diff --git a/README.md b/README.md index bb4b840d..ea31dee4 100644 --- a/README.md +++ b/README.md @@ -82,9 +82,10 @@ plugin [esbuild-dynamic-import](https://github.com/zbmed/esbuild-dynamic-import) For further information on the usage of the HTML widgets, please visit the interactive documentation in the [HTML Storybook](#run-storybook). +#### Testing the JavaScript package in a consumer project locally If the environment features `npm`, a local module can be created from the output file. To do this, place all the files generated inside `dist_plainjs/` -in `local_modules/terminology-service-suite/` in your project. Now +in `local_modules/terminology-service-suite/` in your consumer project. Now add `"terminology-service-suite": "file:local_modules/terminology-service-suite"` as a dependency in `package.json` and run `npm install`. ### Commit Message Formatting diff --git a/dist_plainjs/manually_maintained_types.d.ts b/dist_plainjs/manually_maintained_types.d.ts index d698e9d0..859f589d 100644 --- a/dist_plainjs/manually_maintained_types.d.ts +++ b/dist_plainjs/manually_maintained_types.d.ts @@ -112,7 +112,10 @@ declare global { | "ghost" | "text" | "subdued"; - parameter?: string + parameter?: string; + externalIcon?: boolean; + urlPrefix?: string; + copyButton?: boolean; } )=>void, createTab:(props:{ diff --git a/dist_plainjs/package.json b/dist_plainjs/package.json index 23560734..aae67eaf 100644 --- a/dist_plainjs/package.json +++ b/dist_plainjs/package.json @@ -1,6 +1,6 @@ { - "name": "semlookp-widgets", + "name": "terminology-service-suite", "version": "1.0.0", - "main": "semlookp_widgets.min.js", + "main": "terminology-service-suite.min.js", "types": "manually_maintained_types.d.ts" } diff --git a/dist_plainjs/semlookp_widgets.css b/dist_plainjs/terminology-service-suite.css similarity index 100% rename from dist_plainjs/semlookp_widgets.css rename to dist_plainjs/terminology-service-suite.css diff --git a/dist_plainjs/semlookp_widgets.js b/dist_plainjs/terminology-service-suite.js similarity index 73% rename from dist_plainjs/semlookp_widgets.js rename to dist_plainjs/terminology-service-suite.js index a20a8d20..8147b306 100644 --- a/dist_plainjs/semlookp_widgets.js +++ b/dist_plainjs/terminology-service-suite.js @@ -1137,7 +1137,7 @@ } return dispatcher.useContext(Context, unstable_observedBits); } - function useState20(initialState) { + function useState21(initialState) { var dispatcher = resolveDispatcher(); return dispatcher.useState(initialState); } @@ -1727,7 +1727,7 @@ exports.useMemo = useMemo5; exports.useReducer = useReducer; exports.useRef = useRef10; - exports.useState = useState20; + exports.useState = useState21; exports.version = ReactVersion; })(); } @@ -29324,10 +29324,10 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); "milliseconds", "millisecond", "ms" - ], i, property, propertyLen = properties.length; + ], i, property2, propertyLen = properties.length; for (i = 0; i < propertyLen; i += 1) { - property = properties[i]; - propertyTest = propertyTest || hasOwnProp(input, property); + property2 = properties[i]; + propertyTest = propertyTest || hasOwnProp(input, property2); } return objectTest && propertyTest; } @@ -29348,10 +29348,10 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); "nextWeek", "lastWeek", "sameElse" - ], i, property; + ], i, property2; for (i = 0; i < properties.length; i += 1) { - property = properties[i]; - propertyTest = propertyTest || hasOwnProp(input, property); + property2 = properties[i]; + propertyTest = propertyTest || hasOwnProp(input, property2); } return objectTest && propertyTest; } @@ -31056,8 +31056,8 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); return locales[key]; }; numeral2.reset = function() { - for (var property in defaults3) { - options[property] = defaults3[property]; + for (var property2 in defaults3) { + options[property2] = defaults3[property2]; } }; numeral2.zeroFormat = function(format) { @@ -33537,8 +33537,8 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); }); // src/components/widgets/AutocompleteWidget/AutocompleteWidget.tsx - var import_react705 = __toESM(require_react(), 1); - var import_react_dom14 = __toESM(require_react_dom(), 1); + var import_react705 = __toESM(require_react()); + var import_react_dom14 = __toESM(require_react_dom()); // node_modules/axios/lib/helpers/bind.js function bind(fn, thisArg) { @@ -35953,7 +35953,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); return this.properties["is_defining_ontology"] || void 0; } getShortForm() { - return this.properties["obo_id"] || this.properties["shortForm"]; + return this.properties["obo_id"] || this.properties["short_form"]; } // TODO: are the following 3 needed? getDepictedBy() { @@ -37048,6 +37048,8 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); */ async getEntityObject(iri, entityType, ontologyId, parameter, useLegacy) { let response; + if (!iri) + throw Error("No IRI provided"); if (entityType) { response = await this.getEntityWithEntityTypeProvided(iri, entityType, ontologyId, parameter, useLegacy); } else { @@ -37436,7 +37438,7 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); var offset = 0; var length2 = pseudo; var atrule = 0; - var property = 0; + var property2 = 0; var previous = 0; var variable = 1; var scanning = 1; @@ -37491,8 +37493,8 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); case 59 + offset: if (ampersand == -1) characters2 = replace(characters2, /\f/g, ""); - if (property > 0 && strlen(characters2) - length2) - append2(property > 32 ? declaration(characters2 + ";", rule, parent, length2 - 1) : declaration(replace(characters2, " ", "") + ";", rule, parent, length2 - 2), declarations); + if (property2 > 0 && strlen(characters2) - length2) + append2(property2 > 32 ? declaration(characters2 + ";", rule, parent, length2 - 1) : declaration(replace(characters2, " ", "") + ";", rule, parent, length2 - 2), declarations); break; case 59: characters2 += ";"; @@ -37513,10 +37515,10 @@ For more info, visit https://reactjs.org/link/mock-scheduler`); parse(characters2, reference, reference, reference, [""], children, 0, points, children); } } - index = offset = property = 0, variable = ampersand = 1, type = characters2 = "", length2 = pseudo; + index = offset = property2 = 0, variable = ampersand = 1, type = characters2 = "", length2 = pseudo; break; case 58: - length2 = 1 + strlen(characters2), property = previous; + length2 = 1 + strlen(characters2), property2 = previous; default: if (variable < 1) { if (character2 == 123) @@ -38155,8 +38157,8 @@ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_liter var UNDEFINED_AS_OBJECT_KEY_ERROR = "You have passed in falsy value as style object's key (can happen when in example you pass unexported component as computed key)."; var hyphenateRegex = /[A-Z]|^ms/g; var animationRegex = /_EMO_([^_]+?)_([^]*?)_EMO_/g; - var isCustomProperty = function isCustomProperty2(property) { - return property.charCodeAt(1) === 45; + var isCustomProperty = function isCustomProperty2(property2) { + return property2.charCodeAt(1) === 45; }; var isProcessableValue = function isProcessableValue2(value) { return value != null && typeof value !== "boolean"; @@ -39857,20 +39859,20 @@ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_liter getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, key2) { return Reflect.getOwnPropertyDescriptor(target.model, key2); }, - defineProperty: function defineProperty(target, property, attributes) { - return Reflect.defineProperty(target.model, property, attributes); + defineProperty: function defineProperty(target, property2, attributes) { + return Reflect.defineProperty(target.model, property2, attributes); }, - has: function has(target, property) { - return Reflect.has(target.model, property); + has: function has(target, property2) { + return Reflect.has(target.model, property2); }, - get: function get3(_target, property) { - if (property === "key") { - return _target[property]; + get: function get3(_target, property2) { + if (property2 === "key") { + return _target[property2]; } - if (property === "__proto__") + if (property2 === "__proto__") return {}; - var target = property === "root" ? _target : _target.model || _target; - var value = target[property]; + var target = property2 === "root" ? _target : _target.model || _target; + var value = target[property2]; if (isObject2(value) && !Array.isArray(value)) { return new Proxy({ model: value, @@ -40609,8 +40611,8 @@ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_liter }; var logicals = _objectSpread5(_objectSpread5(_objectSpread5(_objectSpread5(_objectSpread5(_objectSpread5({}, logicalMargins), logicalPaddings), logicalPosition), logicalSize), logicalOverflow), logicalBorders); var LOGICAL_PROPERTIES = keysOf(logicals); - var logicalCSS = function logicalCSS2(property, value) { - return "".concat(logicals[property], ": ").concat(value, ";"); + var logicalCSS = function logicalCSS2(property2, value) { + return "".concat(logicals[property2], ": ").concat(value, ";"); }; var logicalSizeCSS = function logicalSizeCSS2(width, height) { return "\n ".concat(logicals.width, ": ").concat(width, ";\n ").concat(logicals.height, ": ").concat(height, ";\n "); @@ -41535,6 +41537,57 @@ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_liter return (0, import_get.default)(object2, path, defaultValue); }; + // node_modules/@elastic/eui/es/services/sort/comparators.js + var Comparators = Object.freeze({ + default: function _default() { + var direction = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : SortDirection.ASC; + return function(v12, v2) { + var v1IsComparable = v12 != null; + var v2IsComparable = v2 != null; + if (v1IsComparable && !v2IsComparable) { + return -1; + } + if (!v1IsComparable && v2IsComparable) { + return 1; + } + if (!v1IsComparable && !v2IsComparable) { + return 0; + } + if (v12 === v2) { + return 0; + } + var result = v12 > v2 ? 1 : -1; + return SortDirection.isAsc(direction) ? result : -1 * result; + }; + }, + reverse: function reverse2(comparator) { + return function(v12, v2) { + return comparator(v2, v12); + }; + }, + value: function(_value) { + function value(_x, _x2) { + return _value.apply(this, arguments); + } + value.toString = function() { + return _value.toString(); + }; + return value; + }(function(valueCallback, comparator) { + if (!comparator) { + comparator = this.default(SortDirection.ASC); + } + return function(o1, o2) { + return comparator(valueCallback(o1), valueCallback(o2)); + }; + }), + property: function property(prop, comparator) { + return this.value(function(value) { + return get(value, prop); + }, comparator); + } + }); + // node_modules/@elastic/eui/es/services/popover/popover_positioning.js function _defineProperty8(obj, key, value) { if (key in obj) { @@ -75414,14 +75467,14 @@ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_liter return euiPaddingSize(euiTheme, size3); }; var useEuiPaddingCSS = function useEuiPaddingCSS2(side) { - var property = side ? "padding-".concat(logicalSide[side]) : "padding"; + var property2 = side ? "padding-".concat(logicalSide[side]) : "padding"; return { none: null, - xs: /* @__PURE__ */ css(property, ":", useEuiPaddingSize("xs"), ";;label:xs;"), - s: /* @__PURE__ */ css(property, ":", useEuiPaddingSize("s"), ";;label:s;"), - m: /* @__PURE__ */ css(property, ":", useEuiPaddingSize("m"), ";;label:m;"), - l: /* @__PURE__ */ css(property, ":", useEuiPaddingSize("l"), ";;label:l;"), - xl: /* @__PURE__ */ css(property, ":", useEuiPaddingSize("xl"), ";;label:xl;") + xs: /* @__PURE__ */ css(property2, ":", useEuiPaddingSize("xs"), ";;label:xs;"), + s: /* @__PURE__ */ css(property2, ":", useEuiPaddingSize("s"), ";;label:s;"), + m: /* @__PURE__ */ css(property2, ":", useEuiPaddingSize("m"), ";;label:m;"), + l: /* @__PURE__ */ css(property2, ":", useEuiPaddingSize("l"), ";;label:l;"), + xl: /* @__PURE__ */ css(property2, ":", useEuiPaddingSize("xl"), ";;label:xl;") }; }; @@ -75552,8 +75605,7 @@ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_liter var _DynamicImportModuleMap = { "./assets/accessibility.js": accessibility_exports, "./assets/aggregate.js": aggregate_exports, "./assets/alert.js": alert_exports, "./assets/analyzeEvent.js": analyzeEvent_exports, "./assets/analyze_event.js": analyze_event_exports, "./assets/annotation.js": annotation_exports, "./assets/apm_trace.js": apm_trace_exports, "./assets/app_add_data.js": app_add_data_exports, "./assets/app_advanced_settings.js": app_advanced_settings_exports, "./assets/app_agent.js": app_agent_exports, "./assets/app_apm.js": app_apm_exports, "./assets/app_app_search.js": app_app_search_exports, "./assets/app_auditbeat.js": app_auditbeat_exports, "./assets/app_canvas.js": app_canvas_exports, "./assets/app_cases.js": app_cases_exports, "./assets/app_code.js": app_code_exports, "./assets/app_console.js": app_console_exports, "./assets/app_cross_cluster_replication.js": app_cross_cluster_replication_exports, "./assets/app_dashboard.js": app_dashboard_exports, "./assets/app_devtools.js": app_devtools_exports, "./assets/app_discover.js": app_discover_exports, "./assets/app_ems.js": app_ems_exports, "./assets/app_filebeat.js": app_filebeat_exports, "./assets/app_fleet.js": app_fleet_exports, "./assets/app_gis.js": app_gis_exports, "./assets/app_graph.js": app_graph_exports, "./assets/app_grok.js": app_grok_exports, "./assets/app_heartbeat.js": app_heartbeat_exports, "./assets/app_index_management.js": app_index_management_exports, "./assets/app_index_pattern.js": app_index_pattern_exports, "./assets/app_index_rollup.js": app_index_rollup_exports, "./assets/app_lens.js": app_lens_exports, "./assets/app_logs.js": app_logs_exports, "./assets/app_management.js": app_management_exports, "./assets/app_metricbeat.js": app_metricbeat_exports, "./assets/app_metrics.js": app_metrics_exports, "./assets/app_ml.js": app_ml_exports, "./assets/app_monitoring.js": app_monitoring_exports, "./assets/app_notebook.js": app_notebook_exports, "./assets/app_packetbeat.js": app_packetbeat_exports, "./assets/app_pipeline.js": app_pipeline_exports, "./assets/app_recently_viewed.js": app_recently_viewed_exports, "./assets/app_reporting.js": app_reporting_exports, "./assets/app_saved_objects.js": app_saved_objects_exports, "./assets/app_search_profiler.js": app_search_profiler_exports, "./assets/app_security.js": app_security_exports, "./assets/app_security_analytics.js": app_security_analytics_exports, "./assets/app_spaces.js": app_spaces_exports, "./assets/app_sql.js": app_sql_exports, "./assets/app_timelion.js": app_timelion_exports, "./assets/app_upgrade_assistant.js": app_upgrade_assistant_exports, "./assets/app_uptime.js": app_uptime_exports, "./assets/app_users_roles.js": app_users_roles_exports, "./assets/app_visualize.js": app_visualize_exports, "./assets/app_watches.js": app_watches_exports, "./assets/app_workplace_search.js": app_workplace_search_exports, "./assets/apps.js": apps_exports, "./assets/arrowEnd.js": arrowEnd_exports, "./assets/arrowStart.js": arrowStart_exports, "./assets/arrow_down.js": arrow_down_exports, "./assets/arrow_left.js": arrow_left_exports, "./assets/arrow_right.js": arrow_right_exports, "./assets/arrow_up.js": arrow_up_exports, "./assets/asterisk.js": asterisk_exports, "./assets/beaker.js": beaker_exports, "./assets/bell.js": bell_exports, "./assets/bellSlash.js": bellSlash_exports, "./assets/bolt.js": bolt_exports, "./assets/boxes_horizontal.js": boxes_horizontal_exports, "./assets/boxes_vertical.js": boxes_vertical_exports, "./assets/branch.js": branch_exports, "./assets/branchUser.js": branchUser_exports, "./assets/broom.js": broom_exports, "./assets/brush.js": brush_exports, "./assets/bug.js": bug_exports, "./assets/bullseye.js": bullseye_exports, "./assets/calendar.js": calendar_exports, "./assets/check.js": check_exports, "./assets/checkInCircleFilled.js": checkInCircleFilled_exports, "./assets/cheer.js": cheer_exports, "./assets/clock.js": clock_exports, "./assets/cloudDrizzle.js": cloudDrizzle_exports, "./assets/cloudStormy.js": cloudStormy_exports, "./assets/cloudSunny.js": cloudSunny_exports, "./assets/cluster.js": cluster_exports, "./assets/color.js": color_exports, "./assets/compute.js": compute_exports, "./assets/console.js": console_exports, "./assets/container.js": container_exports, "./assets/continuityAbove.js": continuityAbove_exports, "./assets/continuityAboveBelow.js": continuityAboveBelow_exports, "./assets/continuityBelow.js": continuityBelow_exports, "./assets/continuityWithin.js": continuityWithin_exports, "./assets/controls_horizontal.js": controls_horizontal_exports, "./assets/controls_vertical.js": controls_vertical_exports, "./assets/copy.js": copy_exports, "./assets/copy_clipboard.js": copy_clipboard_exports, "./assets/cross.js": cross_exports, "./assets/crossInACircleFilled.js": crossInACircleFilled_exports, "./assets/crosshairs.js": crosshairs_exports, "./assets/currency.js": currency_exports, "./assets/cut.js": cut_exports, "./assets/database.js": database_exports, "./assets/desktop.js": desktop_exports, "./assets/document.js": document_exports, "./assets/documentEdit.js": documentEdit_exports, "./assets/documentation.js": documentation_exports, "./assets/documents.js": documents_exports, "./assets/dot.js": dot_exports, "./assets/doubleArrowLeft.js": doubleArrowLeft_exports, "./assets/doubleArrowRight.js": doubleArrowRight_exports, "./assets/download.js": download_exports, "./assets/editorDistributeHorizontal.js": editorDistributeHorizontal_exports, "./assets/editorDistributeVertical.js": editorDistributeVertical_exports, "./assets/editorItemAlignBottom.js": editorItemAlignBottom_exports, "./assets/editorItemAlignCenter.js": editorItemAlignCenter_exports, "./assets/editorItemAlignLeft.js": editorItemAlignLeft_exports, "./assets/editorItemAlignMiddle.js": editorItemAlignMiddle_exports, "./assets/editorItemAlignRight.js": editorItemAlignRight_exports, "./assets/editorItemAlignTop.js": editorItemAlignTop_exports, "./assets/editorPositionBottomLeft.js": editorPositionBottomLeft_exports, "./assets/editorPositionBottomRight.js": editorPositionBottomRight_exports, "./assets/editorPositionTopLeft.js": editorPositionTopLeft_exports, "./assets/editorPositionTopRight.js": editorPositionTopRight_exports, "./assets/editor_align_center.js": editor_align_center_exports, "./assets/editor_align_left.js": editor_align_left_exports, "./assets/editor_align_right.js": editor_align_right_exports, "./assets/editor_bold.js": editor_bold_exports, "./assets/editor_checklist.js": editor_checklist_exports, "./assets/editor_code_block.js": editor_code_block_exports, "./assets/editor_comment.js": editor_comment_exports, "./assets/editor_heading.js": editor_heading_exports, "./assets/editor_italic.js": editor_italic_exports, "./assets/editor_link.js": editor_link_exports, "./assets/editor_ordered_list.js": editor_ordered_list_exports, "./assets/editor_redo.js": editor_redo_exports, "./assets/editor_strike.js": editor_strike_exports, "./assets/editor_table.js": editor_table_exports, "./assets/editor_underline.js": editor_underline_exports, "./assets/editor_undo.js": editor_undo_exports, "./assets/editor_unordered_list.js": editor_unordered_list_exports, "./assets/email.js": email_exports, "./assets/empty.js": empty_exports, "./assets/eql.js": eql_exports, "./assets/eraser.js": eraser_exports, "./assets/exit.js": exit_exports, "./assets/expand.js": expand_exports, "./assets/expandMini.js": expandMini_exports, "./assets/export.js": export_exports, "./assets/eye.js": eye_exports, "./assets/eye_closed.js": eye_closed_exports, "./assets/face_happy.js": face_happy_exports, "./assets/face_neutral.js": face_neutral_exports, "./assets/face_sad.js": face_sad_exports, "./assets/filter.js": filter_exports, "./assets/flag.js": flag_exports, "./assets/fold.js": fold_exports, "./assets/folder_check.js": folder_check_exports, "./assets/folder_closed.js": folder_closed_exports, "./assets/folder_exclamation.js": folder_exclamation_exports, "./assets/folder_open.js": folder_open_exports, "./assets/frameNext.js": frameNext_exports, "./assets/framePrevious.js": framePrevious_exports, "./assets/fullScreenExit.js": fullScreenExit_exports, "./assets/full_screen.js": full_screen_exports, "./assets/function.js": function_exports, "./assets/gear.js": gear_exports, "./assets/glasses.js": glasses_exports, "./assets/globe.js": globe_exports, "./assets/grab.js": grab_exports, "./assets/grab_horizontal.js": grab_horizontal_exports, "./assets/grid.js": grid_exports, "./assets/heart.js": heart_exports, "./assets/heatmap.js": heatmap_exports, "./assets/help.js": help_exports, "./assets/home.js": home_exports, "./assets/iInCircle.js": iInCircle_exports, "./assets/image.js": image_exports, "./assets/import.js": import_exports, "./assets/index_close.js": index_close_exports, "./assets/index_edit.js": index_edit_exports, "./assets/index_flush.js": index_flush_exports, "./assets/index_mapping.js": index_mapping_exports, "./assets/index_open.js": index_open_exports, "./assets/index_runtime.js": index_runtime_exports, "./assets/index_settings.js": index_settings_exports, "./assets/inputOutput.js": inputOutput_exports, "./assets/inspect.js": inspect_exports, "./assets/invert.js": invert_exports, "./assets/ip.js": ip_exports, "./assets/keyboard.js": keyboard_exports, "./assets/kql_field.js": kql_field_exports, "./assets/kql_function.js": kql_function_exports, "./assets/kql_operand.js": kql_operand_exports, "./assets/kql_selector.js": kql_selector_exports, "./assets/kql_value.js": kql_value_exports, "./assets/kubernetesNode.js": kubernetesNode_exports, "./assets/kubernetesPod.js": kubernetesPod_exports, "./assets/layers.js": layers_exports, "./assets/lettering.js": lettering_exports, "./assets/lineDashed.js": lineDashed_exports, "./assets/lineDotted.js": lineDotted_exports, "./assets/lineSolid.js": lineSolid_exports, "./assets/link.js": link_exports, "./assets/list.js": list_exports, "./assets/list_add.js": list_add_exports, "./assets/lock.js": lock_exports, "./assets/lockOpen.js": lockOpen_exports, "./assets/logo_aerospike.js": logo_aerospike_exports, "./assets/logo_apache.js": logo_apache_exports, "./assets/logo_app_search.js": logo_app_search_exports, "./assets/logo_aws.js": logo_aws_exports, "./assets/logo_aws_mono.js": logo_aws_mono_exports, "./assets/logo_azure.js": logo_azure_exports, "./assets/logo_azure_mono.js": logo_azure_mono_exports, "./assets/logo_beats.js": logo_beats_exports, "./assets/logo_business_analytics.js": logo_business_analytics_exports, "./assets/logo_ceph.js": logo_ceph_exports, "./assets/logo_cloud.js": logo_cloud_exports, "./assets/logo_cloud_ece.js": logo_cloud_ece_exports, "./assets/logo_code.js": logo_code_exports, "./assets/logo_codesandbox.js": logo_codesandbox_exports, "./assets/logo_couchbase.js": logo_couchbase_exports, "./assets/logo_docker.js": logo_docker_exports, "./assets/logo_dropwizard.js": logo_dropwizard_exports, "./assets/logo_elastic.js": logo_elastic_exports, "./assets/logo_elastic_stack.js": logo_elastic_stack_exports, "./assets/logo_elasticsearch.js": logo_elasticsearch_exports, "./assets/logo_enterprise_search.js": logo_enterprise_search_exports, "./assets/logo_etcd.js": logo_etcd_exports, "./assets/logo_gcp.js": logo_gcp_exports, "./assets/logo_gcp_mono.js": logo_gcp_mono_exports, "./assets/logo_github.js": logo_github_exports, "./assets/logo_gmail.js": logo_gmail_exports, "./assets/logo_golang.js": logo_golang_exports, "./assets/logo_google_g.js": logo_google_g_exports, "./assets/logo_haproxy.js": logo_haproxy_exports, "./assets/logo_ibm.js": logo_ibm_exports, "./assets/logo_ibm_mono.js": logo_ibm_mono_exports, "./assets/logo_kafka.js": logo_kafka_exports, "./assets/logo_kibana.js": logo_kibana_exports, "./assets/logo_kubernetes.js": logo_kubernetes_exports, "./assets/logo_logging.js": logo_logging_exports, "./assets/logo_logstash.js": logo_logstash_exports, "./assets/logo_maps.js": logo_maps_exports, "./assets/logo_memcached.js": logo_memcached_exports, "./assets/logo_metrics.js": logo_metrics_exports, "./assets/logo_mongodb.js": logo_mongodb_exports, "./assets/logo_mysql.js": logo_mysql_exports, "./assets/logo_nginx.js": logo_nginx_exports, "./assets/logo_observability.js": logo_observability_exports, "./assets/logo_osquery.js": logo_osquery_exports, "./assets/logo_php.js": logo_php_exports, "./assets/logo_postgres.js": logo_postgres_exports, "./assets/logo_prometheus.js": logo_prometheus_exports, "./assets/logo_rabbitmq.js": logo_rabbitmq_exports, "./assets/logo_redis.js": logo_redis_exports, "./assets/logo_security.js": logo_security_exports, "./assets/logo_site_search.js": logo_site_search_exports, "./assets/logo_sketch.js": logo_sketch_exports, "./assets/logo_slack.js": logo_slack_exports, "./assets/logo_uptime.js": logo_uptime_exports, "./assets/logo_webhook.js": logo_webhook_exports, "./assets/logo_windows.js": logo_windows_exports, "./assets/logo_workplace_search.js": logo_workplace_search_exports, "./assets/logstash_filter.js": logstash_filter_exports, "./assets/logstash_if.js": logstash_if_exports, "./assets/logstash_input.js": logstash_input_exports, "./assets/logstash_output.js": logstash_output_exports, "./assets/logstash_queue.js": logstash_queue_exports, "./assets/magnet.js": magnet_exports, "./assets/magnifyWithExclamation.js": magnifyWithExclamation_exports, "./assets/magnifyWithMinus.js": magnifyWithMinus_exports, "./assets/magnifyWithPlus.js": magnifyWithPlus_exports, "./assets/map_marker.js": map_marker_exports, "./assets/memory.js": memory_exports, "./assets/menu.js": menu_exports, "./assets/menuDown.js": menuDown_exports, "./assets/menuLeft.js": menuLeft_exports, "./assets/menuRight.js": menuRight_exports, "./assets/menuUp.js": menuUp_exports, "./assets/merge.js": merge_exports, "./assets/minimize.js": minimize_exports, "./assets/minus.js": minus_exports, "./assets/minus_in_circle.js": minus_in_circle_exports, "./assets/minus_in_circle_filled.js": minus_in_circle_filled_exports, "./assets/ml_classification_job.js": ml_classification_job_exports, "./assets/ml_create_advanced_job.js": ml_create_advanced_job_exports, "./assets/ml_create_multi_metric_job.js": ml_create_multi_metric_job_exports, "./assets/ml_create_population_job.js": ml_create_population_job_exports, "./assets/ml_create_single_metric_job.js": ml_create_single_metric_job_exports, "./assets/ml_data_visualizer.js": ml_data_visualizer_exports, "./assets/ml_outlier_detection_job.js": ml_outlier_detection_job_exports, "./assets/ml_regression_job.js": ml_regression_job_exports, "./assets/mobile.js": mobile_exports, "./assets/moon.js": moon_exports, "./assets/namespace.js": namespace_exports, "./assets/nested.js": nested_exports, "./assets/node.js": node_exports, "./assets/number.js": number_exports, "./assets/offline.js": offline_exports, "./assets/online.js": online_exports, "./assets/package.js": package_exports, "./assets/pageSelect.js": pageSelect_exports, "./assets/pagesSelect.js": pagesSelect_exports, "./assets/paint.js": paint_exports, "./assets/paper_clip.js": paper_clip_exports, "./assets/partial.js": partial_exports, "./assets/pause.js": pause_exports, "./assets/payment.js": payment_exports, "./assets/pencil.js": pencil_exports, "./assets/percent.js": percent_exports, "./assets/pin.js": pin_exports, "./assets/pin_filled.js": pin_filled_exports, "./assets/play.js": play_exports, "./assets/playFilled.js": playFilled_exports, "./assets/plus.js": plus_exports, "./assets/plus_in_circle.js": plus_in_circle_exports, "./assets/plus_in_circle_filled.js": plus_in_circle_filled_exports, "./assets/popout.js": popout_exports, "./assets/push.js": push_exports, "./assets/question_in_circle.js": question_in_circle_exports, "./assets/quote.js": quote_exports, "./assets/refresh.js": refresh_exports, "./assets/reporter.js": reporter_exports, "./assets/return_key.js": return_key_exports, "./assets/save.js": save_exports, "./assets/scale.js": scale_exports, "./assets/search.js": search_exports, "./assets/securitySignal.js": securitySignal_exports, "./assets/securitySignalDetected.js": securitySignalDetected_exports, "./assets/securitySignalResolved.js": securitySignalResolved_exports, "./assets/sessionViewer.js": sessionViewer_exports, "./assets/shard.js": shard_exports, "./assets/share.js": share_exports, "./assets/snowflake.js": snowflake_exports, "./assets/sortLeft.js": sortLeft_exports, "./assets/sortRight.js": sortRight_exports, "./assets/sort_down.js": sort_down_exports, "./assets/sort_up.js": sort_up_exports, "./assets/sortable.js": sortable_exports, "./assets/starPlusEmpty.js": starPlusEmpty_exports, "./assets/starPlusFilled.js": starPlusFilled_exports, "./assets/star_empty.js": star_empty_exports, "./assets/star_empty_space.js": star_empty_space_exports, "./assets/star_filled.js": star_filled_exports, "./assets/star_filled_space.js": star_filled_space_exports, "./assets/star_minus_empty.js": star_minus_empty_exports, "./assets/star_minus_filled.js": star_minus_filled_exports, "./assets/stats.js": stats_exports, "./assets/stop.js": stop_exports, "./assets/stop_filled.js": stop_filled_exports, "./assets/stop_slash.js": stop_slash_exports, "./assets/storage.js": storage_exports, "./assets/string.js": string_exports, "./assets/submodule.js": submodule_exports, "./assets/sun.js": sun_exports, "./assets/swatch_input.js": swatch_input_exports, "./assets/symlink.js": symlink_exports, "./assets/tableOfContents.js": tableOfContents_exports, "./assets/table_density_compact.js": table_density_compact_exports, "./assets/table_density_expanded.js": table_density_expanded_exports, "./assets/table_density_normal.js": table_density_normal_exports, "./assets/tag.js": tag_exports, "./assets/tear.js": tear_exports, "./assets/temperature.js": temperature_exports, "./assets/timeRefresh.js": timeRefresh_exports, "./assets/timeline.js": timeline_exports, "./assets/timeslider.js": timeslider_exports, "./assets/tokenAlias.js": tokenAlias_exports, "./assets/tokenAnnotation.js": tokenAnnotation_exports, "./assets/tokenArray.js": tokenArray_exports, "./assets/tokenBinary.js": tokenBinary_exports, "./assets/tokenBoolean.js": tokenBoolean_exports, "./assets/tokenClass.js": tokenClass_exports, "./assets/tokenCompletionSuggester.js": tokenCompletionSuggester_exports, "./assets/tokenConstant.js": tokenConstant_exports, "./assets/tokenDate.js": tokenDate_exports, "./assets/tokenDenseVector.js": tokenDenseVector_exports, "./assets/tokenElement.js": tokenElement_exports, "./assets/tokenEnum.js": tokenEnum_exports, "./assets/tokenEnumMember.js": tokenEnumMember_exports, "./assets/tokenEvent.js": tokenEvent_exports, "./assets/tokenException.js": tokenException_exports, "./assets/tokenField.js": tokenField_exports, "./assets/tokenFile.js": tokenFile_exports, "./assets/tokenFlattened.js": tokenFlattened_exports, "./assets/tokenFunction.js": tokenFunction_exports, "./assets/tokenGeo.js": tokenGeo_exports, "./assets/tokenHistogram.js": tokenHistogram_exports, "./assets/tokenIP.js": tokenIP_exports, "./assets/tokenInterface.js": tokenInterface_exports, "./assets/tokenJoin.js": tokenJoin_exports, "./assets/tokenKey.js": tokenKey_exports, "./assets/tokenKeyword.js": tokenKeyword_exports, "./assets/tokenMethod.js": tokenMethod_exports, "./assets/tokenMetricCounter.js": tokenMetricCounter_exports, "./assets/tokenMetricGauge.js": tokenMetricGauge_exports, "./assets/tokenModule.js": tokenModule_exports, "./assets/tokenNamespace.js": tokenNamespace_exports, "./assets/tokenNested.js": tokenNested_exports, "./assets/tokenNull.js": tokenNull_exports, "./assets/tokenNumber.js": tokenNumber_exports, "./assets/tokenObject.js": tokenObject_exports, "./assets/tokenOperator.js": tokenOperator_exports, "./assets/tokenPackage.js": tokenPackage_exports, "./assets/tokenParameter.js": tokenParameter_exports, "./assets/tokenPercolator.js": tokenPercolator_exports, "./assets/tokenProperty.js": tokenProperty_exports, "./assets/tokenRange.js": tokenRange_exports, "./assets/tokenRankFeature.js": tokenRankFeature_exports, "./assets/tokenRankFeatures.js": tokenRankFeatures_exports, "./assets/tokenRepo.js": tokenRepo_exports, "./assets/tokenSearchType.js": tokenSearchType_exports, "./assets/tokenShape.js": tokenShape_exports, "./assets/tokenString.js": tokenString_exports, "./assets/tokenStruct.js": tokenStruct_exports, "./assets/tokenSymbol.js": tokenSymbol_exports, "./assets/tokenTag.js": tokenTag_exports, "./assets/tokenText.js": tokenText_exports, "./assets/tokenTokenCount.js": tokenTokenCount_exports, "./assets/tokenVariable.js": tokenVariable_exports, "./assets/training.js": training_exports, "./assets/trash.js": trash_exports, "./assets/unfold.js": unfold_exports, "./assets/unlink.js": unlink_exports, "./assets/user.js": user_exports, "./assets/userAvatar.js": userAvatar_exports, "./assets/users.js": users_exports, "./assets/vector.js": vector_exports, "./assets/videoPlayer.js": videoPlayer_exports, "./assets/vis_area.js": vis_area_exports, "./assets/vis_area_stacked.js": vis_area_stacked_exports, "./assets/vis_bar_horizontal.js": vis_bar_horizontal_exports, "./assets/vis_bar_horizontal_stacked.js": vis_bar_horizontal_stacked_exports, "./assets/vis_bar_vertical.js": vis_bar_vertical_exports, "./assets/vis_bar_vertical_stacked.js": vis_bar_vertical_stacked_exports, "./assets/vis_gauge.js": vis_gauge_exports, "./assets/vis_goal.js": vis_goal_exports, "./assets/vis_line.js": vis_line_exports, "./assets/vis_map_coordinate.js": vis_map_coordinate_exports, "./assets/vis_map_region.js": vis_map_region_exports, "./assets/vis_metric.js": vis_metric_exports, "./assets/vis_pie.js": vis_pie_exports, "./assets/vis_table.js": vis_table_exports, "./assets/vis_tag_cloud.js": vis_tag_cloud_exports, "./assets/vis_text.js": vis_text_exports, "./assets/vis_timelion.js": vis_timelion_exports, "./assets/vis_vega.js": vis_vega_exports, "./assets/vis_visual_builder.js": vis_visual_builder_exports, "./assets/wordWrap.js": wordWrap_exports, "./assets/wordWrapDisabled.js": wordWrapDisabled_exports, "./assets/wrench.js": wrench_exports, "./assets/accessibility": accessibility_exports, "./assets/aggregate": aggregate_exports, "./assets/alert": alert_exports, "./assets/analyzeEvent": analyzeEvent_exports, "./assets/analyze_event": analyze_event_exports, "./assets/annotation": annotation_exports, "./assets/apm_trace": apm_trace_exports, "./assets/app_add_data": app_add_data_exports, "./assets/app_advanced_settings": app_advanced_settings_exports, "./assets/app_agent": app_agent_exports, "./assets/app_apm": app_apm_exports, "./assets/app_app_search": app_app_search_exports, "./assets/app_auditbeat": app_auditbeat_exports, "./assets/app_canvas": app_canvas_exports, "./assets/app_cases": app_cases_exports, "./assets/app_code": app_code_exports, "./assets/app_console": app_console_exports, "./assets/app_cross_cluster_replication": app_cross_cluster_replication_exports, "./assets/app_dashboard": app_dashboard_exports, "./assets/app_devtools": app_devtools_exports, "./assets/app_discover": app_discover_exports, "./assets/app_ems": app_ems_exports, "./assets/app_filebeat": app_filebeat_exports, "./assets/app_fleet": app_fleet_exports, "./assets/app_gis": app_gis_exports, "./assets/app_graph": app_graph_exports, "./assets/app_grok": app_grok_exports, "./assets/app_heartbeat": app_heartbeat_exports, "./assets/app_index_management": app_index_management_exports, "./assets/app_index_pattern": app_index_pattern_exports, "./assets/app_index_rollup": app_index_rollup_exports, "./assets/app_lens": app_lens_exports, "./assets/app_logs": app_logs_exports, "./assets/app_management": app_management_exports, "./assets/app_metricbeat": app_metricbeat_exports, "./assets/app_metrics": app_metrics_exports, "./assets/app_ml": app_ml_exports, "./assets/app_monitoring": app_monitoring_exports, "./assets/app_notebook": app_notebook_exports, "./assets/app_packetbeat": app_packetbeat_exports, "./assets/app_pipeline": app_pipeline_exports, "./assets/app_recently_viewed": app_recently_viewed_exports, "./assets/app_reporting": app_reporting_exports, "./assets/app_saved_objects": app_saved_objects_exports, "./assets/app_search_profiler": app_search_profiler_exports, "./assets/app_security": app_security_exports, "./assets/app_security_analytics": app_security_analytics_exports, "./assets/app_spaces": app_spaces_exports, "./assets/app_sql": app_sql_exports, "./assets/app_timelion": app_timelion_exports, "./assets/app_upgrade_assistant": app_upgrade_assistant_exports, "./assets/app_uptime": app_uptime_exports, "./assets/app_users_roles": app_users_roles_exports, "./assets/app_visualize": app_visualize_exports, "./assets/app_watches": app_watches_exports, "./assets/app_workplace_search": app_workplace_search_exports, "./assets/apps": apps_exports, "./assets/arrowEnd": arrowEnd_exports, "./assets/arrowStart": arrowStart_exports, "./assets/arrow_down": arrow_down_exports, "./assets/arrow_left": arrow_left_exports, "./assets/arrow_right": arrow_right_exports, "./assets/arrow_up": arrow_up_exports, "./assets/asterisk": asterisk_exports, "./assets/beaker": beaker_exports, "./assets/bell": bell_exports, "./assets/bellSlash": bellSlash_exports, "./assets/bolt": bolt_exports, "./assets/boxes_horizontal": boxes_horizontal_exports, "./assets/boxes_vertical": boxes_vertical_exports, "./assets/branch": branch_exports, "./assets/branchUser": branchUser_exports, "./assets/broom": broom_exports, "./assets/brush": brush_exports, "./assets/bug": bug_exports, "./assets/bullseye": bullseye_exports, "./assets/calendar": calendar_exports, "./assets/check": check_exports, "./assets/checkInCircleFilled": checkInCircleFilled_exports, "./assets/cheer": cheer_exports, "./assets/clock": clock_exports, "./assets/cloudDrizzle": cloudDrizzle_exports, "./assets/cloudStormy": cloudStormy_exports, "./assets/cloudSunny": cloudSunny_exports, "./assets/cluster": cluster_exports, "./assets/color": color_exports, "./assets/compute": compute_exports, "./assets/console": console_exports, "./assets/container": container_exports, "./assets/continuityAbove": continuityAbove_exports, "./assets/continuityAboveBelow": continuityAboveBelow_exports, "./assets/continuityBelow": continuityBelow_exports, "./assets/continuityWithin": continuityWithin_exports, "./assets/controls_horizontal": controls_horizontal_exports, "./assets/controls_vertical": controls_vertical_exports, "./assets/copy": copy_exports, "./assets/copy_clipboard": copy_clipboard_exports, "./assets/cross": cross_exports, "./assets/crossInACircleFilled": crossInACircleFilled_exports, "./assets/crosshairs": crosshairs_exports, "./assets/currency": currency_exports, "./assets/cut": cut_exports, "./assets/database": database_exports, "./assets/desktop": desktop_exports, "./assets/document": document_exports, "./assets/documentEdit": documentEdit_exports, "./assets/documentation": documentation_exports, "./assets/documents": documents_exports, "./assets/dot": dot_exports, "./assets/doubleArrowLeft": doubleArrowLeft_exports, "./assets/doubleArrowRight": doubleArrowRight_exports, "./assets/download": download_exports, "./assets/editorDistributeHorizontal": editorDistributeHorizontal_exports, "./assets/editorDistributeVertical": editorDistributeVertical_exports, "./assets/editorItemAlignBottom": editorItemAlignBottom_exports, "./assets/editorItemAlignCenter": editorItemAlignCenter_exports, "./assets/editorItemAlignLeft": editorItemAlignLeft_exports, "./assets/editorItemAlignMiddle": editorItemAlignMiddle_exports, "./assets/editorItemAlignRight": editorItemAlignRight_exports, "./assets/editorItemAlignTop": editorItemAlignTop_exports, "./assets/editorPositionBottomLeft": editorPositionBottomLeft_exports, "./assets/editorPositionBottomRight": editorPositionBottomRight_exports, "./assets/editorPositionTopLeft": editorPositionTopLeft_exports, "./assets/editorPositionTopRight": editorPositionTopRight_exports, "./assets/editor_align_center": editor_align_center_exports, "./assets/editor_align_left": editor_align_left_exports, "./assets/editor_align_right": editor_align_right_exports, "./assets/editor_bold": editor_bold_exports, "./assets/editor_checklist": editor_checklist_exports, "./assets/editor_code_block": editor_code_block_exports, "./assets/editor_comment": editor_comment_exports, "./assets/editor_heading": editor_heading_exports, "./assets/editor_italic": editor_italic_exports, "./assets/editor_link": editor_link_exports, "./assets/editor_ordered_list": editor_ordered_list_exports, "./assets/editor_redo": editor_redo_exports, "./assets/editor_strike": editor_strike_exports, "./assets/editor_table": editor_table_exports, "./assets/editor_underline": editor_underline_exports, "./assets/editor_undo": editor_undo_exports, "./assets/editor_unordered_list": editor_unordered_list_exports, "./assets/email": email_exports, "./assets/empty": empty_exports, "./assets/eql": eql_exports, "./assets/eraser": eraser_exports, "./assets/exit": exit_exports, "./assets/expand": expand_exports, "./assets/expandMini": expandMini_exports, "./assets/export": export_exports, "./assets/eye": eye_exports, "./assets/eye_closed": eye_closed_exports, "./assets/face_happy": face_happy_exports, "./assets/face_neutral": face_neutral_exports, "./assets/face_sad": face_sad_exports, "./assets/filter": filter_exports, "./assets/flag": flag_exports, "./assets/fold": fold_exports, "./assets/folder_check": folder_check_exports, "./assets/folder_closed": folder_closed_exports, "./assets/folder_exclamation": folder_exclamation_exports, "./assets/folder_open": folder_open_exports, "./assets/frameNext": frameNext_exports, "./assets/framePrevious": framePrevious_exports, "./assets/fullScreenExit": fullScreenExit_exports, "./assets/full_screen": full_screen_exports, "./assets/function": function_exports, "./assets/gear": gear_exports, "./assets/glasses": glasses_exports, "./assets/globe": globe_exports, "./assets/grab": grab_exports, "./assets/grab_horizontal": grab_horizontal_exports, "./assets/grid": grid_exports, "./assets/heart": heart_exports, "./assets/heatmap": heatmap_exports, "./assets/help": help_exports, "./assets/home": home_exports, "./assets/iInCircle": iInCircle_exports, "./assets/image": image_exports, "./assets/import": import_exports, "./assets/index_close": index_close_exports, "./assets/index_edit": index_edit_exports, "./assets/index_flush": index_flush_exports, "./assets/index_mapping": index_mapping_exports, "./assets/index_open": index_open_exports, "./assets/index_runtime": index_runtime_exports, "./assets/index_settings": index_settings_exports, "./assets/inputOutput": inputOutput_exports, "./assets/inspect": inspect_exports, "./assets/invert": invert_exports, "./assets/ip": ip_exports, "./assets/keyboard": keyboard_exports, "./assets/kql_field": kql_field_exports, "./assets/kql_function": kql_function_exports, "./assets/kql_operand": kql_operand_exports, "./assets/kql_selector": kql_selector_exports, "./assets/kql_value": kql_value_exports, "./assets/kubernetesNode": kubernetesNode_exports, "./assets/kubernetesPod": kubernetesPod_exports, "./assets/layers": layers_exports, "./assets/lettering": lettering_exports, "./assets/lineDashed": lineDashed_exports, "./assets/lineDotted": lineDotted_exports, "./assets/lineSolid": lineSolid_exports, "./assets/link": link_exports, "./assets/list": list_exports, "./assets/list_add": list_add_exports, "./assets/lock": lock_exports, "./assets/lockOpen": lockOpen_exports, "./assets/logo_aerospike": logo_aerospike_exports, "./assets/logo_apache": logo_apache_exports, "./assets/logo_app_search": logo_app_search_exports, "./assets/logo_aws": logo_aws_exports, "./assets/logo_aws_mono": logo_aws_mono_exports, "./assets/logo_azure": logo_azure_exports, "./assets/logo_azure_mono": logo_azure_mono_exports, "./assets/logo_beats": logo_beats_exports, "./assets/logo_business_analytics": logo_business_analytics_exports, "./assets/logo_ceph": logo_ceph_exports, "./assets/logo_cloud": logo_cloud_exports, "./assets/logo_cloud_ece": logo_cloud_ece_exports, "./assets/logo_code": logo_code_exports, "./assets/logo_codesandbox": logo_codesandbox_exports, "./assets/logo_couchbase": logo_couchbase_exports, "./assets/logo_docker": logo_docker_exports, "./assets/logo_dropwizard": logo_dropwizard_exports, "./assets/logo_elastic": logo_elastic_exports, "./assets/logo_elastic_stack": logo_elastic_stack_exports, "./assets/logo_elasticsearch": logo_elasticsearch_exports, "./assets/logo_enterprise_search": logo_enterprise_search_exports, "./assets/logo_etcd": logo_etcd_exports, "./assets/logo_gcp": logo_gcp_exports, "./assets/logo_gcp_mono": logo_gcp_mono_exports, "./assets/logo_github": logo_github_exports, "./assets/logo_gmail": logo_gmail_exports, "./assets/logo_golang": logo_golang_exports, "./assets/logo_google_g": logo_google_g_exports, "./assets/logo_haproxy": logo_haproxy_exports, "./assets/logo_ibm": logo_ibm_exports, "./assets/logo_ibm_mono": logo_ibm_mono_exports, "./assets/logo_kafka": logo_kafka_exports, "./assets/logo_kibana": logo_kibana_exports, "./assets/logo_kubernetes": logo_kubernetes_exports, "./assets/logo_logging": logo_logging_exports, "./assets/logo_logstash": logo_logstash_exports, "./assets/logo_maps": logo_maps_exports, "./assets/logo_memcached": logo_memcached_exports, "./assets/logo_metrics": logo_metrics_exports, "./assets/logo_mongodb": logo_mongodb_exports, "./assets/logo_mysql": logo_mysql_exports, "./assets/logo_nginx": logo_nginx_exports, "./assets/logo_observability": logo_observability_exports, "./assets/logo_osquery": logo_osquery_exports, "./assets/logo_php": logo_php_exports, "./assets/logo_postgres": logo_postgres_exports, "./assets/logo_prometheus": logo_prometheus_exports, "./assets/logo_rabbitmq": logo_rabbitmq_exports, "./assets/logo_redis": logo_redis_exports, "./assets/logo_security": logo_security_exports, "./assets/logo_site_search": logo_site_search_exports, "./assets/logo_sketch": logo_sketch_exports, "./assets/logo_slack": logo_slack_exports, "./assets/logo_uptime": logo_uptime_exports, "./assets/logo_webhook": logo_webhook_exports, "./assets/logo_windows": logo_windows_exports, "./assets/logo_workplace_search": logo_workplace_search_exports, "./assets/logstash_filter": logstash_filter_exports, "./assets/logstash_if": logstash_if_exports, "./assets/logstash_input": logstash_input_exports, "./assets/logstash_output": logstash_output_exports, "./assets/logstash_queue": logstash_queue_exports, "./assets/magnet": magnet_exports, "./assets/magnifyWithExclamation": magnifyWithExclamation_exports, "./assets/magnifyWithMinus": magnifyWithMinus_exports, "./assets/magnifyWithPlus": magnifyWithPlus_exports, "./assets/map_marker": map_marker_exports, "./assets/memory": memory_exports, "./assets/menu": menu_exports, "./assets/menuDown": menuDown_exports, "./assets/menuLeft": menuLeft_exports, "./assets/menuRight": menuRight_exports, "./assets/menuUp": menuUp_exports, "./assets/merge": merge_exports, "./assets/minimize": minimize_exports, "./assets/minus": minus_exports, "./assets/minus_in_circle": minus_in_circle_exports, "./assets/minus_in_circle_filled": minus_in_circle_filled_exports, "./assets/ml_classification_job": ml_classification_job_exports, "./assets/ml_create_advanced_job": ml_create_advanced_job_exports, "./assets/ml_create_multi_metric_job": ml_create_multi_metric_job_exports, "./assets/ml_create_population_job": ml_create_population_job_exports, "./assets/ml_create_single_metric_job": ml_create_single_metric_job_exports, "./assets/ml_data_visualizer": ml_data_visualizer_exports, "./assets/ml_outlier_detection_job": ml_outlier_detection_job_exports, "./assets/ml_regression_job": ml_regression_job_exports, "./assets/mobile": mobile_exports, "./assets/moon": moon_exports, "./assets/namespace": namespace_exports, "./assets/nested": nested_exports, "./assets/node": node_exports, "./assets/number": number_exports, "./assets/offline": offline_exports, "./assets/online": online_exports, "./assets/package": package_exports, "./assets/pageSelect": pageSelect_exports, "./assets/pagesSelect": pagesSelect_exports, "./assets/paint": paint_exports, "./assets/paper_clip": paper_clip_exports, "./assets/partial": partial_exports, "./assets/pause": pause_exports, "./assets/payment": payment_exports, "./assets/pencil": pencil_exports, "./assets/percent": percent_exports, "./assets/pin": pin_exports, "./assets/pin_filled": pin_filled_exports, "./assets/play": play_exports, "./assets/playFilled": playFilled_exports, "./assets/plus": plus_exports, "./assets/plus_in_circle": plus_in_circle_exports, "./assets/plus_in_circle_filled": plus_in_circle_filled_exports, "./assets/popout": popout_exports, "./assets/push": push_exports, "./assets/question_in_circle": question_in_circle_exports, "./assets/quote": quote_exports, "./assets/refresh": refresh_exports, "./assets/reporter": reporter_exports, "./assets/return_key": return_key_exports, "./assets/save": save_exports, "./assets/scale": scale_exports, "./assets/search": search_exports, "./assets/securitySignal": securitySignal_exports, "./assets/securitySignalDetected": securitySignalDetected_exports, "./assets/securitySignalResolved": securitySignalResolved_exports, "./assets/sessionViewer": sessionViewer_exports, "./assets/shard": shard_exports, "./assets/share": share_exports, "./assets/snowflake": snowflake_exports, "./assets/sortLeft": sortLeft_exports, "./assets/sortRight": sortRight_exports, "./assets/sort_down": sort_down_exports, "./assets/sort_up": sort_up_exports, "./assets/sortable": sortable_exports, "./assets/starPlusEmpty": starPlusEmpty_exports, "./assets/starPlusFilled": starPlusFilled_exports, "./assets/star_empty": star_empty_exports, "./assets/star_empty_space": star_empty_space_exports, "./assets/star_filled": star_filled_exports, "./assets/star_filled_space": star_filled_space_exports, "./assets/star_minus_empty": star_minus_empty_exports, "./assets/star_minus_filled": star_minus_filled_exports, "./assets/stats": stats_exports, "./assets/stop": stop_exports, "./assets/stop_filled": stop_filled_exports, "./assets/stop_slash": stop_slash_exports, "./assets/storage": storage_exports, "./assets/string": string_exports, "./assets/submodule": submodule_exports, "./assets/sun": sun_exports, "./assets/swatch_input": swatch_input_exports, "./assets/symlink": symlink_exports, "./assets/tableOfContents": tableOfContents_exports, "./assets/table_density_compact": table_density_compact_exports, "./assets/table_density_expanded": table_density_expanded_exports, "./assets/table_density_normal": table_density_normal_exports, "./assets/tag": tag_exports, "./assets/tear": tear_exports, "./assets/temperature": temperature_exports, "./assets/timeRefresh": timeRefresh_exports, "./assets/timeline": timeline_exports, "./assets/timeslider": timeslider_exports, "./assets/tokenAlias": tokenAlias_exports, "./assets/tokenAnnotation": tokenAnnotation_exports, "./assets/tokenArray": tokenArray_exports, "./assets/tokenBinary": tokenBinary_exports, "./assets/tokenBoolean": tokenBoolean_exports, "./assets/tokenClass": tokenClass_exports, "./assets/tokenCompletionSuggester": tokenCompletionSuggester_exports, "./assets/tokenConstant": tokenConstant_exports, "./assets/tokenDate": tokenDate_exports, "./assets/tokenDenseVector": tokenDenseVector_exports, "./assets/tokenElement": tokenElement_exports, "./assets/tokenEnum": tokenEnum_exports, "./assets/tokenEnumMember": tokenEnumMember_exports, "./assets/tokenEvent": tokenEvent_exports, "./assets/tokenException": tokenException_exports, "./assets/tokenField": tokenField_exports, "./assets/tokenFile": tokenFile_exports, "./assets/tokenFlattened": tokenFlattened_exports, "./assets/tokenFunction": tokenFunction_exports, "./assets/tokenGeo": tokenGeo_exports, "./assets/tokenHistogram": tokenHistogram_exports, "./assets/tokenIP": tokenIP_exports, "./assets/tokenInterface": tokenInterface_exports, "./assets/tokenJoin": tokenJoin_exports, "./assets/tokenKey": tokenKey_exports, "./assets/tokenKeyword": tokenKeyword_exports, "./assets/tokenMethod": tokenMethod_exports, "./assets/tokenMetricCounter": tokenMetricCounter_exports, "./assets/tokenMetricGauge": tokenMetricGauge_exports, "./assets/tokenModule": tokenModule_exports, "./assets/tokenNamespace": tokenNamespace_exports, "./assets/tokenNested": tokenNested_exports, "./assets/tokenNull": tokenNull_exports, "./assets/tokenNumber": tokenNumber_exports, "./assets/tokenObject": tokenObject_exports, "./assets/tokenOperator": tokenOperator_exports, "./assets/tokenPackage": tokenPackage_exports, "./assets/tokenParameter": tokenParameter_exports, "./assets/tokenPercolator": tokenPercolator_exports, "./assets/tokenProperty": tokenProperty_exports, "./assets/tokenRange": tokenRange_exports, "./assets/tokenRankFeature": tokenRankFeature_exports, "./assets/tokenRankFeatures": tokenRankFeatures_exports, "./assets/tokenRepo": tokenRepo_exports, "./assets/tokenSearchType": tokenSearchType_exports, "./assets/tokenShape": tokenShape_exports, "./assets/tokenString": tokenString_exports, "./assets/tokenStruct": tokenStruct_exports, "./assets/tokenSymbol": tokenSymbol_exports, "./assets/tokenTag": tokenTag_exports, "./assets/tokenText": tokenText_exports, "./assets/tokenTokenCount": tokenTokenCount_exports, "./assets/tokenVariable": tokenVariable_exports, "./assets/training": training_exports, "./assets/trash": trash_exports, "./assets/unfold": unfold_exports, "./assets/unlink": unlink_exports, "./assets/user": user_exports, "./assets/userAvatar": userAvatar_exports, "./assets/users": users_exports, "./assets/vector": vector_exports, "./assets/videoPlayer": videoPlayer_exports, "./assets/vis_area": vis_area_exports, "./assets/vis_area_stacked": vis_area_stacked_exports, "./assets/vis_bar_horizontal": vis_bar_horizontal_exports, "./assets/vis_bar_horizontal_stacked": vis_bar_horizontal_stacked_exports, "./assets/vis_bar_vertical": vis_bar_vertical_exports, "./assets/vis_bar_vertical_stacked": vis_bar_vertical_stacked_exports, "./assets/vis_gauge": vis_gauge_exports, "./assets/vis_goal": vis_goal_exports, "./assets/vis_line": vis_line_exports, "./assets/vis_map_coordinate": vis_map_coordinate_exports, "./assets/vis_map_region": vis_map_region_exports, "./assets/vis_metric": vis_metric_exports, "./assets/vis_pie": vis_pie_exports, "./assets/vis_table": vis_table_exports, "./assets/vis_tag_cloud": vis_tag_cloud_exports, "./assets/vis_text": vis_text_exports, "./assets/vis_timelion": vis_timelion_exports, "./assets/vis_vega": vis_vega_exports, "./assets/vis_visual_builder": vis_visual_builder_exports, "./assets/wordWrap": wordWrap_exports, "./assets/wordWrapDisabled": wordWrapDisabled_exports, "./assets/wrench": wrench_exports }; function _DynamicImport(path) { const mod = _DynamicImportModuleMap[path]; - if (!mod[Symbol.toStringTag]) - mod[Symbol.toStringTag] = "Module"; + mod[Symbol.toStringTag] = "Module"; return Promise.resolve(mod); } function _typeof5(obj) { @@ -80131,10 +80183,10 @@ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_liter }; var euiShadowMedium = function euiShadowMedium2(_ref52) { var euiTheme = _ref52.euiTheme, colorMode = _ref52.colorMode; - var _ref62 = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, _color = _ref62.color, property = _ref62.property; + var _ref62 = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, _color = _ref62.color, property2 = _ref62.property; var color = _color || euiTheme.colors.shadow; var array = ["0 .9px 4px ".concat(getShadowColor(color, 0.08, colorMode)), "0 2.6px 8px ".concat(getShadowColor(color, 0.06, colorMode)), "0 5.7px 12px ".concat(getShadowColor(color, 0.05, colorMode)), "0 15px 15px ".concat(getShadowColor(color, 0.04, colorMode))]; - if (property === "filter") { + if (property2 === "filter") { return "filter: ".concat(array.reduce(function(v2, i) { return "".concat(v2, " drop-shadow(").concat(i, ")"); }, ""), ";"); @@ -80152,9 +80204,9 @@ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_liter }; var euiShadowXLarge = function euiShadowXLarge2(_ref9) { var euiTheme = _ref9.euiTheme, colorMode = _ref9.colorMode; - var _ref10 = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, _color = _ref10.color, reverse2 = _ref10.reverse; + var _ref10 = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, _color = _ref10.color, reverse3 = _ref10.reverse; var color = _color || euiTheme.colors.shadow; - return "\nbox-shadow:\n 0 ".concat(reverse2 ? "-" : "", "2.7px 9px ").concat(getShadowColor(color, 0.13, colorMode), ",\n 0 ").concat(reverse2 ? "-" : "", "9.4px 24px ").concat(getShadowColor(color, 0.09, colorMode), ",\n 0 ").concat(reverse2 ? "-" : "", "21.8px 43px ").concat(getShadowColor(color, 0.08, colorMode), ";\n"); + return "\nbox-shadow:\n 0 ".concat(reverse3 ? "-" : "", "2.7px 9px ").concat(getShadowColor(color, 0.13, colorMode), ",\n 0 ").concat(reverse3 ? "-" : "", "9.4px 24px ").concat(getShadowColor(color, 0.09, colorMode), ",\n 0 ").concat(reverse3 ? "-" : "", "21.8px 43px ").concat(getShadowColor(color, 0.08, colorMode), ";\n"); }; var euiShadowFlat = function euiShadowFlat2(_ref13) { var euiTheme = _ref13.euiTheme, colorMode = _ref13.colorMode; @@ -80362,9 +80414,9 @@ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_liter var import_react527 = __toESM(require_react()); var import_prop_types25 = __toESM(require_prop_types()); - // node_modules/tslib/tslib.es6.mjs + // node_modules/react-focus-on/node_modules/tslib/tslib.es6.mjs var __assign = function() { - __assign = Object.assign || function __assign2(t) { + __assign = Object.assign || function __assign3(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) @@ -80492,6 +80544,32 @@ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_liter return callbackRef; } + // node_modules/use-sidecar/node_modules/tslib/tslib.es6.mjs + var __assign2 = function() { + __assign2 = Object.assign || function __assign3(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) + if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign2.apply(this, arguments); + }; + function __rest2(s, e) { + var t = {}; + for (var p in s) + if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) + t[p] = s[p]; + if (s != null && typeof Object.getOwnPropertySymbols === "function") + for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { + if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) + t[p[i]] = s[p[i]]; + } + return t; + } + // node_modules/use-sidecar/dist/es2015/medium.js function ItoI(a) { return a; @@ -80580,14 +80658,14 @@ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_liter options = {}; } var medium = innerCreateMedium(null); - medium.options = __assign({ async: true, ssr: false }, options); + medium.options = __assign2({ async: true, ssr: false }, options); return medium; } // node_modules/use-sidecar/dist/es2015/exports.js var React480 = __toESM(require_react()); var SideCar = function(_a) { - var sideCar = _a.sideCar, rest = __rest(_a, ["sideCar"]); + var sideCar = _a.sideCar, rest = __rest2(_a, ["sideCar"]); if (!sideCar) { throw new Error("Sidecar: please provide `sideCar` property to import the right car"); } @@ -80595,7 +80673,7 @@ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_liter if (!Target) { throw new Error("Sidecar medium not found"); } - return React480.createElement(Target, __assign({}, rest)); + return React480.createElement(Target, __assign2({}, rest)); }; SideCar.isSideCarExport = true; function exportSidecar(medium, exported) { @@ -81626,6 +81704,11 @@ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_liter function weakRef(value) { if (!value) return null; + if (typeof WeakRef === "undefined") { + return function() { + return value || null; + }; + } var w = value ? new WeakRef(value) : null; return function() { return (w === null || w === void 0 ? void 0 : w.deref()) || null; @@ -88849,13 +88932,12 @@ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_liter if (source == null) return {}; var target = {}; - var sourceKeys = Object.keys(source); - var key, i; - for (i = 0; i < sourceKeys.length; i++) { - key = sourceKeys[i]; - if (excluded.indexOf(key) >= 0) - continue; - target[key] = source[key]; + for (var key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + if (excluded.indexOf(key) >= 0) + continue; + target[key] = source[key]; + } } return target; } @@ -96113,7 +96195,7 @@ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_liter }).length; var listScreenReaderStatus = searchable && jsx(EuiI18n, { token: "euiSelectable.searchResults", - default: function _default(_ref42) { + default: function _default2(_ref42) { var resultsLength2 = _ref42.resultsLength; return "".concat(resultsLength2, " result").concat(resultsLength2 === 1 ? "" : "s", " available"); }, @@ -102733,17 +102815,17 @@ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_liter } // src/components/widgets/MetadataWidget/DescriptionWidget/DescriptionWidget.tsx - var import_react690 = __toESM(require_react(), 1); + var import_react690 = __toESM(require_react()); // src/components/widgets/MetadataWidget/DescriptionWidget/DescriptionPresentation.tsx - var import_react689 = __toESM(require_react(), 1); + var import_react689 = __toESM(require_react()); function DescriptionPresentation(props) { const { descText, description, ...rest } = props; return /* @__PURE__ */ import_react689.default.createElement(import_react689.default.Fragment, null, /* @__PURE__ */ import_react689.default.createElement(EuiText, { ...rest }, descText || description)); } // src/components/widgets/MetadataWidget/DescriptionWidget/DescriptionWidget.tsx - var import_react_dom4 = __toESM(require_react_dom(), 1); + var import_react_dom4 = __toESM(require_react_dom()); var NO_DESCRIPTION = "No description available."; function DescriptionWidget(props) { const { api, ontologyId, iri, descText, thingType, parameter, useLegacy, ...rest } = props; @@ -102783,11 +102865,55 @@ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_liter } // src/components/widgets/MetadataWidget/IriWidget/IriWidget.tsx - var import_react691 = __toESM(require_react(), 1); - var import_react_dom5 = __toESM(require_react_dom(), 1); + var import_react691 = __toESM(require_react()); + var import_react_dom5 = __toESM(require_react_dom()); function IriWidget(props) { - const { iri, iriText, color } = props; - return /* @__PURE__ */ import_react691.default.createElement(EuiFlexItem, { grow: false }, /* @__PURE__ */ import_react691.default.createElement("div", null, /* @__PURE__ */ import_react691.default.createElement(EuiLink, { href: iri, target: "_blank", style: { color: color && (isHexColor(color) || isRgbColor(color)) ? color : "" }, color: color && isEuiLinkColor(color) ? color : void 0 }, iriText ? iriText : iri))); + const { iri, iriText, color, externalIcon, urlPrefix, copyButton } = props; + const [copied, setCopied] = (0, import_react691.useState)(false); + const urlPrefixExist = typeof urlPrefix !== "undefined" && urlPrefix !== "" ? true : false; + const iriUrl = urlPrefixExist ? urlPrefix + encodeURIComponent(iri) : iri; + const CopyLinkButton = () => { + if (!copied) { + return /* @__PURE__ */ import_react691.default.createElement( + EuiButtonIcon, + { + display: "base", + iconType: "copy", + key: "copy-btn", + style: { marginLeft: "5px", color: color && (isHexColor(color) || isRgbColor(color)) ? color : "" }, + color: color && isEuiLinkColor(color) ? color : void 0, + onClick: () => { + navigator.clipboard.writeText(iriUrl); + setCopied(true); + setTimeout(() => { + setCopied(false); + }, 2e3); + } + } + ); + } + return /* @__PURE__ */ import_react691.default.createElement( + EuiButtonIcon, + { + style: { marginLeft: "5px", color: color && (isHexColor(color) || isRgbColor(color)) ? color : "" }, + display: "base", + iconType: "check", + key: "copy-btn", + color: color && isEuiLinkColor(color) ? color : void 0 + } + ); + }; + return /* @__PURE__ */ import_react691.default.createElement(EuiFlexItem, { grow: false }, /* @__PURE__ */ import_react691.default.createElement("div", null, /* @__PURE__ */ import_react691.default.createElement( + EuiLink, + { + href: iriUrl, + target: "_blank", + style: { color: color && (isHexColor(color) || isRgbColor(color)) ? color : "" }, + color: color && isEuiLinkColor(color) ? color : void 0, + external: externalIcon + }, + iriText ? iriText : iri + ), copyButton && /* @__PURE__ */ import_react691.default.createElement(CopyLinkButton, null))); } function createIri(props, container, callback) { import_react_dom5.default.render(WrappedIriWidget(props), container, callback); @@ -102800,22 +102926,24 @@ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_liter iri: props.iri, iriText: props.iriText, color: props.color, - parameter: props.parameter + externalIcon: props.externalIcon, + urlPrefix: props.urlPrefix, + copyButton: props.copyButton } ))); } // src/components/widgets/MetadataWidget/BreadcrumbWidget/BreadcrumbWidget.tsx - var import_react693 = __toESM(require_react(), 1); + var import_react693 = __toESM(require_react()); // src/components/widgets/MetadataWidget/BreadcrumbWidget/BreadcrumbPresentation.tsx - var import_react692 = __toESM(require_react(), 1); + var import_react692 = __toESM(require_react()); function BreadcrumbPresentation(props) { return /* @__PURE__ */ import_react692.default.createElement(import_react692.default.Fragment, null, /* @__PURE__ */ import_react692.default.createElement("span", null, /* @__PURE__ */ import_react692.default.createElement(EuiBadge, { color: props.colorFirst || "primary" }, props.ontologyName.toUpperCase()), " > ", /* @__PURE__ */ import_react692.default.createElement(EuiBadge, { color: props.colorSecond || "success" }, props.shortForm ? props.shortForm.toUpperCase() : "No short form available"))); } // src/components/widgets/MetadataWidget/BreadcrumbWidget/BreadcrumbWidget.tsx - var import_react_dom6 = __toESM(require_react_dom(), 1); + var import_react_dom6 = __toESM(require_react_dom()); function BreadcrumbWidget(props) { const { api, ontologyId, iri, entityType, colorFirst, colorSecond, parameter, useLegacy } = props; const olsApi = new OlsApi(api); @@ -102862,10 +102990,10 @@ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_liter } // src/components/widgets/MetadataWidget/TabWidget/AlternativeNameTabWidget/AlternativeNameTabWidget.tsx - var import_react695 = __toESM(require_react(), 1); + var import_react695 = __toESM(require_react()); // src/components/widgets/MetadataWidget/TabWidget/AlternativeNameTabWidget/AlternativeNameTabPresentation.tsx - var import_react694 = __toESM(require_react(), 1); + var import_react694 = __toESM(require_react()); function AlternativeNameTabPresentation(props) { function renderAltLabel() { if (props.synonyms && props.synonyms.length > 0) { @@ -102877,7 +103005,7 @@ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_liter } // src/components/widgets/MetadataWidget/TabWidget/AlternativeNameTabWidget/AlternativeNameTabWidget.tsx - var import_react_dom7 = __toESM(require_react_dom(), 1); + var import_react_dom7 = __toESM(require_react_dom()); function AlternativeNameTabWidget(props) { const { iri, api, parameter, entityType, ontologyId, useLegacy } = props; const olsApi = new OlsApi(api); @@ -102913,10 +103041,10 @@ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_liter } // src/components/widgets/MetadataWidget/TabWidget/CrossRefWidget/CrossRefTabWidget.tsx - var import_react697 = __toESM(require_react(), 1); + var import_react697 = __toESM(require_react()); // src/components/widgets/MetadataWidget/TabWidget/CrossRefWidget/CrossRefTabPresentation.tsx - var import_react696 = __toESM(require_react(), 1); + var import_react696 = __toESM(require_react()); function CrossRefTabPresentation(props) { function renderCrossRefs(crossrefs) { if (crossrefs && crossrefs.length > 0) { @@ -102928,7 +103056,7 @@ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_liter } // src/components/widgets/MetadataWidget/TabWidget/CrossRefWidget/CrossRefTabWidget.tsx - var import_react_dom8 = __toESM(require_react_dom(), 1); + var import_react_dom8 = __toESM(require_react_dom()); function CrossRefTabWidget(props) { const { iri, api, parameter, entityType, ontologyId, useLegacy } = props; const olsApi = new OlsApi(api); @@ -102967,7 +103095,7 @@ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_liter } // src/components/widgets/MetadataWidget/TabWidget/HierarchyWidget/HierarchyWidget.tsx - var import_react698 = __toESM(require_react(), 1); + var import_react698 = __toESM(require_react()); // node_modules/@zbmed/ols-treeview/dist_widgets/ols4_widgets.min.js (() => { @@ -115229,7 +115357,7 @@ Add a component higher in the tree to provide a loading })(); // src/components/widgets/MetadataWidget/TabWidget/HierarchyWidget/HierarchyWidget.tsx - var import_react_dom9 = __toESM(require_react_dom(), 1); + var import_react_dom9 = __toESM(require_react_dom()); var HierarchyWidget = (props) => { (0, import_react698.useEffect)(() => { const treeContainer = document.querySelector("#tree_container"); @@ -115270,13 +115398,13 @@ Add a component higher in the tree to provide a loading } // src/components/widgets/MetadataWidget/TabWidget/TabWidget.tsx - var import_react701 = __toESM(require_react(), 1); + var import_react701 = __toESM(require_react()); // src/components/widgets/MetadataWidget/TabWidget/TabPresentation.tsx - var import_react700 = __toESM(require_react(), 1); + var import_react700 = __toESM(require_react()); // src/components/widgets/MetadataWidget/TabWidget/HierarchyWidgetDeprecated/HierarchyWidgetDeprecated.tsx - var import_react699 = __toESM(require_react(), 1); + var import_react699 = __toESM(require_react()); // src/api/hierarchy_widget_deprecated.ts var fetch_data = (url) => { @@ -115304,7 +115432,7 @@ Add a component higher in the tree to provide a loading }; // src/components/widgets/MetadataWidget/TabWidget/HierarchyWidgetDeprecated/HierarchyWidgetDeprecated.tsx - var import_react_dom10 = __toESM(require_react_dom(), 1); + var import_react_dom10 = __toESM(require_react_dom()); var HierarchyTree = class { url; iri; @@ -115407,14 +115535,14 @@ Add a component higher in the tree to provide a loading // src/components/widgets/MetadataWidget/TabWidget/TabPresentation.tsx function TabPresentation(props) { function render6(data) { - return /* @__PURE__ */ import_react700.default.createElement(import_react700.default.Fragment, null, /* @__PURE__ */ import_react700.default.createElement(EuiFlexItem, null, /* @__PURE__ */ import_react700.default.createElement(EuiTabbedContent, { size: "s", tabs: [ + return /* @__PURE__ */ import_react700.default.createElement(import_react700.default.Fragment, null, /* @__PURE__ */ import_react700.default.createElement(EuiTabbedContent, { size: "s", tabs: [ { content: /* @__PURE__ */ import_react700.default.createElement(AlternativeNameTabPresentation, { synonyms: data.getSynonyms().map((synonym) => synonym.value) }), id: "tab1", name: "Alternative Names" }, { - content: /* @__PURE__ */ import_react700.default.createElement(import_react700.default.Fragment, null, props.useLegacy == void 0 || props.useLegacy ? /* @__PURE__ */ import_react700.default.createElement( + content: /* @__PURE__ */ import_react700.default.createElement(import_react700.default.Fragment, null, /* @__PURE__ */ import_react700.default.createElement("div", { style: { overflow: "auto" } }, props.useLegacy == void 0 || props.useLegacy ? /* @__PURE__ */ import_react700.default.createElement( HierarchyWidgetDeprecated, { ontologyId: props.ontologyId || (data && data.getOntologyId() !== void 0 ? data.getOntologyId() : ""), @@ -115429,7 +115557,7 @@ Add a component higher in the tree to provide a loading ontologyId: props.ontologyId || (data && data.getOntologyId() !== void 0 ? data.getOntologyId() : ""), entityType: props.entityType } - )), + ))), id: "tab2", name: "Hierarchy" }, @@ -115440,13 +115568,13 @@ Add a component higher in the tree to provide a loading id: "tab3", name: "Cross references" } - ] }))); + ] })); } return /* @__PURE__ */ import_react700.default.createElement(import_react700.default.Fragment, null, isEntity(props.data) || isProperty(props.data) || isIndividual(props.data) ? render6(props.data) : null); } // src/components/widgets/MetadataWidget/TabWidget/TabWidget.tsx - var import_react_dom11 = __toESM(require_react_dom(), 1); + var import_react_dom11 = __toESM(require_react_dom()); function TabWidget(props) { const { iri, api, ontologyId, entityType, parameter, useLegacy, ...rest } = props; const olsApi = new OlsApi(api); @@ -115496,16 +115624,16 @@ Add a component higher in the tree to provide a loading } // src/components/widgets/MetadataWidget/TitleWidget/TitleWidget.tsx - var import_react703 = __toESM(require_react(), 1); + var import_react703 = __toESM(require_react()); // src/components/widgets/MetadataWidget/TitleWidget/TitlePresentation.tsx - var import_react702 = __toESM(require_react(), 1); + var import_react702 = __toESM(require_react()); function TitlePresentation(props) { return /* @__PURE__ */ import_react702.default.createElement(EuiText, null, props.titleText || props.title); } // src/components/widgets/MetadataWidget/TitleWidget/TitleWidget.tsx - var import_react_dom12 = __toESM(require_react_dom(), 1); + var import_react_dom12 = __toESM(require_react_dom()); var NO_TITLE = "No title available."; function TitleWidget(props) { const { iri, ontologyId, api, titleText, thingType, parameter, useLegacy, default_value } = props; @@ -115545,8 +115673,8 @@ Add a component higher in the tree to provide a loading } // src/components/widgets/MetadataWidget/MetadataWidget.tsx - var import_react704 = __toESM(require_react(), 1); - var import_react_dom13 = __toESM(require_react_dom(), 1); + var import_react704 = __toESM(require_react()); + var import_react_dom13 = __toESM(require_react_dom()); function MetadataWidget(props) { const { iri, api, ontologyId, entityType, parameter, useLegacy } = props; const olsApi = new OlsApi(api); @@ -115563,30 +115691,30 @@ Add a component higher in the tree to provide a loading } ); function render6(data2) { - return /* @__PURE__ */ import_react704.default.createElement(import_react704.default.Fragment, null, /* @__PURE__ */ import_react704.default.createElement(EuiFlexGroup, { direction: "column", style: { maxWidth: 600 } }, /* @__PURE__ */ import_react704.default.createElement(EuiFlexItem, { grow: false }, /* @__PURE__ */ import_react704.default.createElement("span", null, /* @__PURE__ */ import_react704.default.createElement( + return /* @__PURE__ */ import_react704.default.createElement(import_react704.default.Fragment, null, /* @__PURE__ */ import_react704.default.createElement(EuiFlexGroup, { direction: "column" }, /* @__PURE__ */ import_react704.default.createElement(EuiFlexItem, { grow: false }, /* @__PURE__ */ import_react704.default.createElement("span", null, /* @__PURE__ */ import_react704.default.createElement( BreadcrumbPresentation, { isDefiningOntology: data2.getIsDefiningOntology(), ontologyName: data2.getOntologyId(), shortForm: data2.getShortForm() } - ))), /* @__PURE__ */ import_react704.default.createElement(EuiFlexItem, null, /* @__PURE__ */ import_react704.default.createElement(EuiFlexGroup, { direction: "column" }, /* @__PURE__ */ import_react704.default.createElement(EuiFlexItem, null, /* @__PURE__ */ import_react704.default.createElement(EuiFlexGroup, null, /* @__PURE__ */ import_react704.default.createElement(EuiFlexItem, { grow: false }, /* @__PURE__ */ import_react704.default.createElement( + ))), /* @__PURE__ */ import_react704.default.createElement(EuiFlexItem, null, /* @__PURE__ */ import_react704.default.createElement(EuiFlexGroup, { direction: "column" }, /* @__PURE__ */ import_react704.default.createElement(EuiFlexItem, null, /* @__PURE__ */ import_react704.default.createElement(EuiFlexGroup, null, /* @__PURE__ */ import_react704.default.createElement(EuiFlexItem, { grow: false, style: { maxWidth: 600 } }, /* @__PURE__ */ import_react704.default.createElement( IriWidget, { iri, parameter } - )))), /* @__PURE__ */ import_react704.default.createElement(EuiFlexItem, { grow: false }, /* @__PURE__ */ import_react704.default.createElement( + )))), /* @__PURE__ */ import_react704.default.createElement(EuiFlexItem, { grow: false, style: { maxWidth: 600 } }, /* @__PURE__ */ import_react704.default.createElement( TitlePresentation, { title: data2.getLabel() } - )))), /* @__PURE__ */ import_react704.default.createElement(EuiFlexItem, null, /* @__PURE__ */ import_react704.default.createElement( + )))), /* @__PURE__ */ import_react704.default.createElement(EuiFlexItem, { style: { maxWidth: 600 } }, /* @__PURE__ */ import_react704.default.createElement( DescriptionPresentation, { description: data2.getDescription() } - )), /* @__PURE__ */ import_react704.default.createElement(EuiFlexItem, null, /* @__PURE__ */ import_react704.default.createElement("div", { style: { maxHeight: "500px", overflow: "auto" } }, /* @__PURE__ */ import_react704.default.createElement( + )), /* @__PURE__ */ import_react704.default.createElement(EuiFlexItem, null, /* @__PURE__ */ import_react704.default.createElement( TabPresentation, { data: data2, @@ -115596,7 +115724,7 @@ Add a component higher in the tree to provide a loading ontologyId: props.ontologyId ? props.ontologyId : data2.getOntologyId(), useLegacy } - ))))); + )))); } return /* @__PURE__ */ import_react704.default.createElement(import_react704.default.Fragment, null, isLoading && /* @__PURE__ */ import_react704.default.createElement(EuiLoadingSpinner, null), isError && /* @__PURE__ */ import_react704.default.createElement(EuiText, null, getErrorMessageToDisplay(error, "metadata")), isSuccess && data && /* @__PURE__ */ import_react704.default.createElement(import_react704.default.Fragment, null, isEntity(data) ? render6(data) : null)); } @@ -115713,7 +115841,7 @@ Add a component higher in the tree to provide a loading preselected ], async () => { - const preselectedValues = []; + let preselectedValues = []; let uniqueValues = [...new Set(preselected)].filter((option) => { return allowCustomTerms && option.label || option.iri; }); @@ -115721,7 +115849,7 @@ Add a component higher in the tree to provide a loading if (singleSelection) uniqueValues = [uniqueValues[0]]; for (const option of uniqueValues) { - if (option.iri && option.iri.startsWith("http")) { + if (option && option.iri && option.iri.startsWith("http")) { await olsApi.select( { query: option.iri }, void 0, @@ -115748,9 +115876,11 @@ Add a component higher in the tree to provide a loading }); } }); + if (singleSelection && preselectedValues.length > 1) + preselectedValues = [preselectedValues[0]]; } }); - } else if (option.label && allowCustomTerms) { + } else if (option && option.label && allowCustomTerms) { preselectedValues.push({ label: option.label, key: option.label, @@ -115862,7 +115992,7 @@ Add a component higher in the tree to provide a loading } }; setOptions([...options, newOption]); - setSelectedOptions([...selectedOptions, newOption]); + setSelectedOptions(singleSelection ? [newOption] : [...selectedOptions, newOption]); } return /* @__PURE__ */ import_react705.default.createElement( EuiComboBox, @@ -115906,8 +116036,8 @@ Add a component higher in the tree to provide a loading } // src/components/widgets/DataContentWidget/DataContentWidget.tsx - var import_react706 = __toESM(require_react(), 1); - var import_react_dom15 = __toESM(require_react_dom(), 1); + var import_react706 = __toESM(require_react()); + var import_react_dom15 = __toESM(require_react_dom()); function DataContentWidget(props) { const { api, parameter, ...rest } = props; const olsApi = new OlsApi(api); @@ -115949,10 +116079,10 @@ Add a component higher in the tree to provide a loading } // src/components/widgets/EntityInfoWidget/EntityInfoWidget.tsx - var import_react708 = __toESM(require_react(), 1); + var import_react708 = __toESM(require_react()); // src/model/StructureRendering.tsx - var import_react707 = __toESM(require_react(), 1); + var import_react707 = __toESM(require_react()); var DEFAULT_SHOW_BADGES = true; function getTooltip(text) { return /* @__PURE__ */ import_react707.default.createElement(EuiIconTip, { type: "iInCircle", color: "subdued", content: text }); @@ -116232,7 +116362,7 @@ Add a component higher in the tree to provide a loading } // src/components/widgets/EntityInfoWidget/EntityInfoWidget.tsx - var import_react_dom16 = __toESM(require_react_dom(), 1); + var import_react_dom16 = __toESM(require_react_dom()); var DEFAULT_HAS_TITLE = true; function EntityInfoWidget(props) { const { api, iri, ontologyId, hasTitle = DEFAULT_HAS_TITLE, entityType, parameter, showBadges, useLegacy, ...rest } = props; @@ -116271,8 +116401,8 @@ Add a component higher in the tree to provide a loading return /* @__PURE__ */ import_react708.default.createElement("li", { key: randomString(), id: subset + randomString() }, getEntityLinkJSX(term, term.getLinkedEntities(), subset, api, showBadges)); })) : /* @__PURE__ */ import_react708.default.createElement("p", null, getEntityLinkJSX(term, term.getLinkedEntities(), term.getSubsets()[0], api, showBadges))))); } - function getPropertyCharacteristicsSection(property) { - const characteristics = property.getRdfTypes().map((type) => { + function getPropertyCharacteristicsSection(property2) { + const characteristics = property2.getRdfTypes().map((type) => { return { "http://www.w3.org/2002/07/owl#FunctionalProperty": "Functional", "http://www.w3.org/2002/07/owl#InverseFunctionalProperty": "Inverse Functional", @@ -116287,17 +116417,17 @@ Add a component higher in the tree to provide a loading return /* @__PURE__ */ import_react708.default.createElement("li", { key: randomString() }, characteristic); }).sort()) : /* @__PURE__ */ import_react708.default.createElement("p", null, characteristics[0])))); } - function getDomainSection(property) { - const domains = property.getDomain(); + function getDomainSection(property2) { + const domains = property2.getDomain(); return /* @__PURE__ */ import_react708.default.createElement(import_react708.default.Fragment, null, domains.length > 0 && /* @__PURE__ */ import_react708.default.createElement(import_react708.default.Fragment, null, /* @__PURE__ */ import_react708.default.createElement(EuiFlexItem, null, /* @__PURE__ */ import_react708.default.createElement("b", null, "Domain:"), domains.length > 1 ? /* @__PURE__ */ import_react708.default.createElement("ul", null, domains.map((domains2) => { - return /* @__PURE__ */ import_react708.default.createElement("li", { key: randomString() }, getClassExpressionJSX(property, property.getLinkedEntities(), domains2, api, showBadges)); - })) : /* @__PURE__ */ import_react708.default.createElement("p", null, getClassExpressionJSX(property, property.getLinkedEntities(), domains[0], api, showBadges))))); + return /* @__PURE__ */ import_react708.default.createElement("li", { key: randomString() }, getClassExpressionJSX(property2, property2.getLinkedEntities(), domains2, api, showBadges)); + })) : /* @__PURE__ */ import_react708.default.createElement("p", null, getClassExpressionJSX(property2, property2.getLinkedEntities(), domains[0], api, showBadges))))); } - function getRangeSection(property) { - const ranges = property.getRange(); + function getRangeSection(property2) { + const ranges = property2.getRange(); return /* @__PURE__ */ import_react708.default.createElement(import_react708.default.Fragment, null, ranges.length > 0 && /* @__PURE__ */ import_react708.default.createElement(EuiFlexItem, null, /* @__PURE__ */ import_react708.default.createElement("b", null, "Range:"), ranges.length > 1 ? /* @__PURE__ */ import_react708.default.createElement("ul", null, ranges.map((ranges2) => { - return /* @__PURE__ */ import_react708.default.createElement("li", { key: randomString() }, getClassExpressionJSX(property, property.getLinkedEntities(), ranges2, api, showBadges)); - })) : /* @__PURE__ */ import_react708.default.createElement("p", null, getClassExpressionJSX(property, property.getLinkedEntities(), ranges[0], api, showBadges)))); + return /* @__PURE__ */ import_react708.default.createElement("li", { key: randomString() }, getClassExpressionJSX(property2, property2.getLinkedEntities(), ranges2, api, showBadges)); + })) : /* @__PURE__ */ import_react708.default.createElement("p", null, getClassExpressionJSX(property2, property2.getLinkedEntities(), ranges[0], api, showBadges)))); } function getIndividualPropertyAssertionsSection(individual) { const propertyIris = Object.keys(individual.properties); @@ -116381,8 +116511,8 @@ Add a component higher in the tree to provide a loading } // src/components/widgets/JsonApiWidget/JsonApiWidget.tsx - var import_react709 = __toESM(require_react(), 1); - var import_react_dom17 = __toESM(require_react_dom(), 1); + var import_react709 = __toESM(require_react()); + var import_react_dom17 = __toESM(require_react_dom()); function JsonApiWidget(props) { const { apiQuery, buttonText, buttonSize } = props; return /* @__PURE__ */ import_react709.default.createElement(EuiButton, { href: apiQuery, target: "_blank", size: buttonSize || "m" }, buttonText); @@ -116403,8 +116533,8 @@ Add a component higher in the tree to provide a loading } // src/components/widgets/OntologyInfoWidget/OntologyInfoWidget.tsx - var import_react710 = __toESM(require_react(), 1); - var import_react_dom18 = __toESM(require_react_dom(), 1); + var import_react710 = __toESM(require_react()); + var import_react_dom18 = __toESM(require_react_dom()); var DEFAULT_HAS_TITLE2 = true; function OntologyInfoWidget(props) { const { ontologyId, api, parameter, hasTitle = DEFAULT_HAS_TITLE2, useLegacy, showBadges, ...rest } = props; @@ -116499,8 +116629,8 @@ Add a component higher in the tree to provide a loading } // src/components/widgets/ResourcesWidget/ResourcesWidget.tsx - var import_react711 = __toESM(require_react(), 1); - var import_react_dom19 = __toESM(require_react_dom(), 1); + var import_react711 = __toESM(require_react()); + var import_react_dom19 = __toESM(require_react_dom()); var DEFAULT_INITIAL_ENTRIES_PER_PAGE = 10; var DEFAULT_PAGE_SIZE_OPTIONS = [10, 25, 50, 100]; var DEFAULT_INITIAL_SORT_FIELD = "config.preferredPrefix"; @@ -116517,10 +116647,9 @@ Add a component higher in the tree to provide a loading } = props; const olsApi = new OlsApi(api); const [pageIndex, setPageIndex] = (0, import_react711.useState)(0); - const [entriesPerPage, setEntriesPerPage] = (0, import_react711.useState)(initialEntriesPerPage); + const [pageSize, setPageSize] = (0, import_react711.useState)(initialEntriesPerPage); const [sortField, setSortField] = (0, import_react711.useState)(initialSortField); const [sortDirection, setSortDirection] = (0, import_react711.useState)(initialSortDir); - const [totalOntologies, setTotalOntologies] = (0, import_react711.useState)(0); const columns = [ { name: "Resource Name", @@ -116540,9 +116669,9 @@ Add a component higher in the tree to provide a loading field: "config.description", width: "30%", css: css` - display: block; - max-height: 200px; - overflow: auto; + display: block; + max-height: 200px; + overflow: auto; ` }, { @@ -116596,25 +116725,13 @@ Add a component higher in the tree to provide a loading ] } ]; - const pagination = { - pageIndex, - pageSize: entriesPerPage, - totalItemCount: totalOntologies, - pageSizeOptions - }; - const sorting = { - sort: { - field: sortField, - direction: sortDirection - } - }; const onTableChange = ({ page, sort }) => { - const { index: pageIndex2, size: entriesPerPage2 } = page; + const { index: pageIndex2, size: pageSize2 } = page; setPageIndex(pageIndex2); - setEntriesPerPage(entriesPerPage2); + setPageSize(pageSize2); if (sort) { const { field: sortField2, direction: sortDirection2 } = sort; setSortField(sortField2); @@ -116622,57 +116739,79 @@ Add a component higher in the tree to provide a loading } }; const { - data: ontologies, + data: ontologiesData, isSuccess, - isLoading, isError, - error + isLoading } = useQuery( - [ - api, - "ontologiesMetadata", - entriesPerPage, - pageIndex, - sortField, - sortDirection, - parameter - ], + ["ontologiesData", api, parameter], async () => { - return olsApi.getOntologies( - { - size: entriesPerPage.toString(), - page: pageIndex.toString() - }, - { - sortField, - sortDir: sortDirection - }, - void 0, + return olsApi.getOntologiesData( props.parameter - ).then((response) => { - if (response["page"]["totalElements"] != null && response["_embedded"] && response["_embedded"]["ontologies"]) { - setTotalOntologies(response["page"]["totalElements"]); - return response["_embedded"]["ontologies"]; - } else { - throw new Error("Unexpected API response"); - } - }); + ); } ); - return /* @__PURE__ */ import_react711.default.createElement(import_react711.default.Fragment, null, isSuccess && /* @__PURE__ */ import_react711.default.createElement( + const ontos = ontologiesData?.properties.map((ontology) => ({ + ...ontology.properties + })) || []; + const findOntologies = (ontologies, pageIndex2, pageSize2, sortField2, sortDirection2) => { + let items; + if (sortField2) { + items = ontologies.slice(0).sort( + Comparators.property(sortField2, Comparators.default(sortDirection2)) + ); + } else { + items = ontologies; + } + let pageOfItems2; + if (!pageIndex2 && !pageSize2) { + pageOfItems2 = items; + } else { + const startIndex = pageIndex2 * pageSize2; + pageOfItems2 = items.slice( + startIndex, + Math.min(startIndex + pageSize2, ontologies.length) + ); + } + return { + pageOfItems: pageOfItems2, + totalItemCount: ontologies.length + }; + }; + const { pageOfItems, totalItemCount } = findOntologies( + ontos, + pageIndex, + pageSize, + sortField, + sortDirection + ); + const pagination = { + pageIndex, + pageSize, + totalItemCount, + pageSizeOptions + }; + const resultsCount = pageSize === 0 ? /* @__PURE__ */ import_react711.default.createElement("strong", null, "All") : /* @__PURE__ */ import_react711.default.createElement(import_react711.default.Fragment, null, /* @__PURE__ */ import_react711.default.createElement("strong", null, pageSize * pageIndex + 1, "-", pageSize * pageIndex + pageSize), " ", "of ", totalItemCount); + const sorting = { + sort: { + field: sortField, + direction: sortDirection + } + }; + return /* @__PURE__ */ import_react711.default.createElement(import_react711.default.Fragment, null, isSuccess && /* @__PURE__ */ import_react711.default.createElement(import_react711.default.Fragment, null, /* @__PURE__ */ import_react711.default.createElement(EuiText, { size: "xs" }, "Showing ", resultsCount, " ", /* @__PURE__ */ import_react711.default.createElement("strong", null, "Ontologies")), /* @__PURE__ */ import_react711.default.createElement(EuiSpacer, { size: "s" }), /* @__PURE__ */ import_react711.default.createElement(EuiHorizontalRule, { margin: "none", style: { height: 2 } }), /* @__PURE__ */ import_react711.default.createElement( EuiBasicTable, { columns, - items: ontologies, + items: pageOfItems, onChange: onTableChange, pagination, sorting } - ), isLoading && /* @__PURE__ */ import_react711.default.createElement( + )), isLoading && /* @__PURE__ */ import_react711.default.createElement( EuiBasicTable, { columns, - items: [], + items: pageOfItems, onChange: onTableChange, pagination, sorting, @@ -116682,11 +116821,10 @@ Add a component higher in the tree to provide a loading EuiBasicTable, { columns, - items: [], + items: pageOfItems, onChange: onTableChange, pagination, - sorting, - error: getErrorMessageToDisplay(error, "resources") + sorting } )); } @@ -116711,8 +116849,8 @@ Add a component higher in the tree to provide a loading } // src/components/widgets/SearchBarWidget/SearchBarWidget.tsx - var import_react713 = __toESM(require_react(), 1); - var import_react_dom20 = __toESM(require_react_dom(), 1); + var import_react713 = __toESM(require_react()); + var import_react_dom20 = __toESM(require_react_dom()); function SearchBarWidget(props) { const { api, @@ -116786,10 +116924,10 @@ Add a component higher in the tree to provide a loading } // src/components/widgets/SearchResultsListWidget/SearchResultsListWidget.tsx - var import_react715 = __toESM(require_react(), 1); + var import_react715 = __toESM(require_react()); // src/components/widgets/SearchResultsListWidget/MetadataCompact.tsx - var import_react714 = __toESM(require_react(), 1); + var import_react714 = __toESM(require_react()); function MetadataCompact(props) { const { api, @@ -116802,7 +116940,7 @@ Add a component higher in the tree to provide a loading { textAlign: "left", ...rest, - href: targetLink ? result.type != "ontology" ? targetLink + "ontologies/" + result.ontology_name + "/" + pluralizeType(result.type, true) + "?iri=" + result.iri : targetLink + "ontologies/" + result.ontology_name : void 0, + href: targetLink ? result.type != "ontology" ? targetLink + "ontologies/" + result.ontology_name + "/" + pluralizeType(result.type, true) + "?iri=" + encodeURIComponent(result.iri) : targetLink + "ontologies/" + result.ontology_name : void 0, title: /* @__PURE__ */ import_react714.default.createElement(EuiFlexGroup, null, /* @__PURE__ */ import_react714.default.createElement(EuiFlexItem, { grow: false }, /* @__PURE__ */ import_react714.default.createElement(EuiTitle, null, /* @__PURE__ */ import_react714.default.createElement("h2", null, result.label))), /* @__PURE__ */ import_react714.default.createElement(EuiFlexItem, null, result.type != "ontology" && /* @__PURE__ */ import_react714.default.createElement(BreadcrumbWidget, { api, iri: result.iri, entityType: result.type, ontologyId: result.ontology_name }))) }, result.type != "ontology" ? /* @__PURE__ */ import_react714.default.createElement(IriWidget, { iri: result.iri }) : void 0, @@ -116812,7 +116950,7 @@ Add a component higher in the tree to provide a loading } // src/components/widgets/SearchResultsListWidget/SearchResultsListWidget.tsx - var import_react_dom21 = __toESM(require_react_dom(), 1); + var import_react_dom21 = __toESM(require_react_dom()); var DEFAULT_INITIAL_ITEMS_PER_PAGE = 10; var DEFAULT_PAGE_SIZE_OPTIONS2 = [10, 25, 50, 100]; function SearchResultsListWidget(props) { @@ -116823,6 +116961,7 @@ Add a component higher in the tree to provide a loading initialItemsPerPage = DEFAULT_INITIAL_ITEMS_PER_PAGE, itemsPerPageOptions = DEFAULT_PAGE_SIZE_OPTIONS2, targetLink, + preselected, ...rest } = props; const olsApi = new OlsApi(api); @@ -116977,7 +117116,8 @@ Add a component higher in the tree to provide a loading allowCustomTerms: true, singleSelection: true, hasShortSelectedLabel: true, - placeholder: "Search" + placeholder: "Search", + preselected } ), /* @__PURE__ */ import_react715.default.createElement(EuiSpacer, { size: "s" }), /* @__PURE__ */ import_react715.default.createElement(EuiFlexGroup, null, /* @__PURE__ */ import_react715.default.createElement(EuiFlexItem, { grow: 3, style: { minWidth: 250 } }, /* @__PURE__ */ import_react715.default.createElement(EuiPanel, null, isSuccess && /* @__PURE__ */ import_react715.default.createElement(EuiFormRow, { label: "Filter by type" }, /* @__PURE__ */ import_react715.default.createElement( EuiSelectable, @@ -117058,8 +117198,8 @@ Add a component higher in the tree to provide a loading } // src/components/widgets/EntityRelationsWidget/EntityRelationsWidget.tsx - var import_react716 = __toESM(require_react(), 1); - var import_react_dom22 = __toESM(require_react_dom(), 1); + var import_react716 = __toESM(require_react()); + var import_react_dom22 = __toESM(require_react_dom()); var DEFAULT_HAS_TITLE3 = true; function getIndividualTypesSectionJSX(individual, props) { const types = individual.getRdfTypes().filter((elem) => elem !== "http://www.w3.org/2002/07/owl#NamedIndividual" && !elem.startsWith("http://www.w3.org/2000/01/rdf-schema#")); @@ -117080,20 +117220,20 @@ Add a component higher in the tree to provide a loading const disjointWith = entity.getDisjointWith(); return /* @__PURE__ */ import_react716.default.createElement(import_react716.default.Fragment, null, disjointWith.length > 0 && /* @__PURE__ */ import_react716.default.createElement(EuiFlexItem, null, /* @__PURE__ */ import_react716.default.createElement("b", null, "Disjoint with"), getSectionListJSX(entity, entity.getLinkedEntities(), disjointWith, props.api, props.showBadges))); } - function getPropertyInverseOfSectionJSX(property, props) { - const inverseOfs = property.getInverseOf(); - return /* @__PURE__ */ import_react716.default.createElement(import_react716.default.Fragment, null, inverseOfs.length > 0 && /* @__PURE__ */ import_react716.default.createElement(EuiFlexItem, null, /* @__PURE__ */ import_react716.default.createElement("b", null, "Inverse of"), getSectionListJSX(property, property.getLinkedEntities(), inverseOfs, props.api, props.showBadges))); + function getPropertyInverseOfSectionJSX(property2, props) { + const inverseOfs = property2.getInverseOf(); + return /* @__PURE__ */ import_react716.default.createElement(import_react716.default.Fragment, null, inverseOfs.length > 0 && /* @__PURE__ */ import_react716.default.createElement(EuiFlexItem, null, /* @__PURE__ */ import_react716.default.createElement("b", null, "Inverse of"), getSectionListJSX(property2, property2.getLinkedEntities(), inverseOfs, props.api, props.showBadges))); } - function getPropertyChainJSX(propertyChain, property, props) { + function getPropertyChainJSX(propertyChain, property2, props) { return asArray(propertyChain).slice().reverse().map((propertyExpr, i) => { - return /* @__PURE__ */ import_react716.default.createElement("span", { key: propertyExpr }, getClassExpressionJSX(property, property.getLinkedEntities(), propertyExpr, props.api, props.showBadges), /* @__PURE__ */ import_react716.default.createElement(import_react716.default.Fragment, null, i < asArray(propertyChain).length - 1 && /* @__PURE__ */ import_react716.default.createElement("span", { style: { fontSize: "medium", color: "gray" } }, "\xA0\u25C2\xA0"))); + return /* @__PURE__ */ import_react716.default.createElement("span", { key: propertyExpr }, getClassExpressionJSX(property2, property2.getLinkedEntities(), propertyExpr, props.api, props.showBadges), /* @__PURE__ */ import_react716.default.createElement(import_react716.default.Fragment, null, i < asArray(propertyChain).length - 1 && /* @__PURE__ */ import_react716.default.createElement("span", { style: { fontSize: "medium", color: "gray" } }, "\xA0\u25C2\xA0"))); }); } - function getPropertyChainSectionJSX(property, props) { - const propertyChains = property.getPropertyChains().map((reified) => reified.value); + function getPropertyChainSectionJSX(property2, props) { + const propertyChains = property2.getPropertyChains().map((reified) => reified.value); const hasMultipleChains = propertyChains.filter((elem) => Array.isArray(elem)).length > 0; - return /* @__PURE__ */ import_react716.default.createElement(import_react716.default.Fragment, null, propertyChains.length > 0 && /* @__PURE__ */ import_react716.default.createElement(EuiFlexItem, null, /* @__PURE__ */ import_react716.default.createElement("b", null, !hasMultipleChains ? "Property chain" : "Property chains"), !hasMultipleChains ? /* @__PURE__ */ import_react716.default.createElement("p", null, getPropertyChainJSX(propertyChains, property, props)) : /* @__PURE__ */ import_react716.default.createElement("ul", null, propertyChains.map((item) => { - return /* @__PURE__ */ import_react716.default.createElement("li", { key: randomString() }, getPropertyChainJSX(item, property, props)); + return /* @__PURE__ */ import_react716.default.createElement(import_react716.default.Fragment, null, propertyChains.length > 0 && /* @__PURE__ */ import_react716.default.createElement(EuiFlexItem, null, /* @__PURE__ */ import_react716.default.createElement("b", null, !hasMultipleChains ? "Property chain" : "Property chains"), !hasMultipleChains ? /* @__PURE__ */ import_react716.default.createElement("p", null, getPropertyChainJSX(propertyChains, property2, props)) : /* @__PURE__ */ import_react716.default.createElement("ul", null, propertyChains.map((item) => { + return /* @__PURE__ */ import_react716.default.createElement("li", { key: randomString() }, getPropertyChainJSX(item, property2, props)); })))); } function getEntityEquivalentToSectionJSX(entity, props) { @@ -117522,4 +117662,4 @@ tabbable/dist/index.esm.js: *) *) */ -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0L2Nqcy9yZWFjdC5kZXZlbG9wbWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NjaGVkdWxlci9janMvc2NoZWR1bGVyLmRldmVsb3BtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zY2hlZHVsZXIvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NjaGVkdWxlci9janMvc2NoZWR1bGVyLXRyYWNpbmcuZGV2ZWxvcG1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NjaGVkdWxlci90cmFjaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vY2pzL3JlYWN0LWRvbS5kZXZlbG9wbWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL25vZGVfbW9kdWxlcy9yZWFjdC1pcy9janMvcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvbm9kZV9tb2R1bGVzL3JlYWN0LWlzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9saWIvaGFzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2NoZWNrUHJvcFR5cGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2ZhY3RvcnlXaXRoVHlwZUNoZWNrZXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9ob2lzdC1ub24tcmVhY3Qtc3RhdGljcy9ub2RlX21vZHVsZXMvcmVhY3QtaXMvY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9ob2lzdC1ub24tcmVhY3Qtc3RhdGljcy9ub2RlX21vZHVsZXMvcmVhY3QtaXMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzL2Rpc3QvaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3MuY2pzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvY2hyb21hLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZUNsZWFyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZXEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNzb2NJbmRleE9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZURlbGV0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19saXN0Q2FjaGVHZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlSGFzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZVNldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19MaXN0Q2FjaGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tDbGVhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0RlbGV0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0dldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0hhcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19mcmVlR2xvYmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3Jvb3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU3ltYm9sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFJhd1RhZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19vYmplY3RUb1N0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0VGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNPYmplY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0Z1bmN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NvcmVKc0RhdGEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNNYXNrZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fdG9Tb3VyY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzTmF0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFZhbHVlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldE5hdGl2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19NYXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbmF0aXZlQ3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hDbGVhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoRGVsZXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hHZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaEhhcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoU2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0hhc2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVDbGVhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0tleWFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0TWFwRGF0YS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZURlbGV0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZUdldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZUhhcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZVNldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19NYXBDYWNoZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja1NldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19TdGFjay5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRDYWNoZUFkZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRDYWNoZUhhcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19TZXRDYWNoZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheVNvbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2FjaGVIYXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZXF1YWxBcnJheXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fVWludDhBcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBUb0FycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3NldFRvQXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZXF1YWxCeVRhZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheVB1c2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VHZXRBbGxLZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5RmlsdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvc3R1YkFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFN5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVRpbWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNPYmplY3RMaWtlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc0FyZ3VtZW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJndW1lbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvc3R1YkZhbHNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNCdWZmZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNJbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzTGVuZ3RoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc1R5cGVkQXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVVuYXJ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25vZGVVdGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNUeXBlZEFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5TGlrZUtleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNQcm90b3R5cGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fb3ZlckFyZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19uYXRpdmVLZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VLZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcnJheUxpa2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9rZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldEFsbEtleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZXF1YWxPYmplY3RzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0RhdGFWaWV3LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1Byb21pc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1dlYWtNYXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0VGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc0VxdWFsRGVlcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNFcXVhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzRXF1YWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1N0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQm9vbGVhbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzTnVtYmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNOYU4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL251bWVyYWwvbnVtZXJhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL21lbW9pemUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1N5bWJvbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0tleS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tZW1vaXplQ2FwcGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0cmluZ1RvUGF0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheU1hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVG9TdHJpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC90b1N0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jYXN0UGF0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL190b0tleS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZ2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5RWFjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19kZWZpbmVQcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlQXNzaWduVmFsdWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNzaWduVmFsdWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29weU9iamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlQXNzaWduLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25hdGl2ZUtleXNJbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlS2V5c0luLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gva2V5c0luLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VBc3NpZ25Jbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jbG9uZUJ1ZmZlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3B5QXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29weVN5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0UHJvdG90eXBlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFN5bWJvbHNJbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3B5U3ltYm9sc0luLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldEFsbEtleXNJbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pbml0Q2xvbmVBcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jbG9uZUFycmF5QnVmZmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nsb25lRGF0YVZpZXcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVSZWdFeHAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVTeW1ib2wuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVUeXBlZEFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2luaXRDbG9uZUJ5VGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VDcmVhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faW5pdENsb25lT2JqZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc01hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzTWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc1NldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzU2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VDbG9uZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2xhc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVNsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3BhcmVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVW5zZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1BsYWluT2JqZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2N1c3RvbU9taXRDbG9uZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0ZsYXR0ZW5hYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VGbGF0dGVuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZmxhdHRlbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcHBseS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19vdmVyUmVzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2NvbnN0YW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaWRlbnRpdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVNldFRvU3RyaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3Nob3J0T3V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3NldFRvU3RyaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2ZsYXRSZXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvb21pdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtaXMvY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1pcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVxdWlyZXMtcG9ydC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmdpZnkvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VybC1wYXJzZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtaW5wdXQtYXV0b3NpemUvbGliL0F1dG9zaXplSW5wdXQuanMiLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9BdXRvY29tcGxldGVXaWRnZXQvQXV0b2NvbXBsZXRlV2lkZ2V0LnRzeCIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYmluZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3V0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9BeGlvc0Vycm9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9udWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy90b0Zvcm1EYXRhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9BeGlvc1VSTFNlYXJjaFBhcmFtcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYnVpbGRVUkwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0ludGVyY2VwdG9yTWFuYWdlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2RlZmF1bHRzL3RyYW5zaXRpb25hbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3BsYXRmb3JtL2Jyb3dzZXIvY2xhc3Nlcy9VUkxTZWFyY2hQYXJhbXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9wbGF0Zm9ybS9icm93c2VyL2NsYXNzZXMvRm9ybURhdGEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9wbGF0Zm9ybS9icm93c2VyL2NsYXNzZXMvQmxvYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3BsYXRmb3JtL2Jyb3dzZXIvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9wbGF0Zm9ybS9jb21tb24vdXRpbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9wbGF0Zm9ybS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvdG9VUkxFbmNvZGVkRm9ybS5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvZm9ybURhdGFUb0pTT04uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9kZWZhdWx0cy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvcGFyc2VIZWFkZXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9BeGlvc0hlYWRlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL3RyYW5zZm9ybURhdGEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvaXNDYW5jZWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsZWRFcnJvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvc2V0dGxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9jb29raWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc0Fic29sdXRlVVJMLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9jb21iaW5lVVJMcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvYnVpbGRGdWxsUGF0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNVUkxTYW1lT3JpZ2luLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9wYXJzZVByb3RvY29sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9zcGVlZG9tZXRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2FkYXB0ZXJzL3hoci5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2FkYXB0ZXJzL2FkYXB0ZXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9kaXNwYXRjaFJlcXVlc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL21lcmdlQ29uZmlnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvZW52L2RhdGEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3ZhbGlkYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsVG9rZW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3NwcmVhZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNBeGlvc0Vycm9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9IdHRwU3RhdHVzQ29kZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2F4aW9zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9pbmRleC5qcyIsICIuLi9zcmMvYXBwL3V0aWwudHMiLCAiLi4vc3JjL21vZGVsL1JlaWZpZWQudHMiLCAiLi4vc3JjL21vZGVsL0xpbmtlZEVudGl0aWVzLnRzIiwgIi4uL3NyYy9tb2RlbC9vbHMzLW1vZGVsL09MUzNUaGluZy50cyIsICIuLi9zcmMvbW9kZWwvb2xzMy1tb2RlbC9PTFMzRW50aXR5LnRzIiwgIi4uL3NyYy9tb2RlbC9vbHMzLW1vZGVsL09MUzNDbGFzcy50cyIsICIuLi9zcmMvbW9kZWwvb2xzMy1tb2RlbC9PTFMzUHJvcGVydHkudHMiLCAiLi4vc3JjL21vZGVsL29sczMtbW9kZWwvT0xTM0luZGl2aWR1YWwudHMiLCAiLi4vc3JjL21vZGVsL29sczMtbW9kZWwvT0xTM09udG9sb2d5LnRzIiwgIi4uL3NyYy9tb2RlbC9vbHMzLW1vZGVsL09MUzNPbnRvbG9naWVzLnRzIiwgIi4uL3NyYy9tb2RlbC9vbHM0LW1vZGVsL09MUzRUaGluZy50cyIsICIuLi9zcmMvbW9kZWwvb2xzNC1tb2RlbC9PTFM0RW50aXR5LnRzIiwgIi4uL3NyYy9tb2RlbC9vbHM0LW1vZGVsL09MUzRDbGFzcy50cyIsICIuLi9zcmMvbW9kZWwvb2xzNC1tb2RlbC9PTFM0UHJvcGVydHkudHMiLCAiLi4vc3JjL21vZGVsL29sczQtbW9kZWwvT0xTNEluZGl2aWR1YWwudHMiLCAiLi4vc3JjL21vZGVsL29sczQtbW9kZWwvT0xTNE9udG9sb2d5LnRzIiwgIi4uL3NyYy9tb2RlbC9Nb2RlbFR5cGVDaGVjay50cyIsICIuLi9zcmMvbW9kZWwvTW9kZWxPYmplY3RDcmVhdG9yLnRzIiwgIi4uL3NyYy9hcGkvT2xzQXBpLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9hY2Nlc3NpYmlsaXR5L3NjcmVlbl9yZWFkZXJfbGl2ZS9zY3JlZW5fcmVhZGVyX2xpdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2FjY2Vzc2liaWxpdHkvc2NyZWVuX3JlYWRlcl9vbmx5L3NjcmVlbl9yZWFkZXJfb25seS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vcmVhY3QvZGlzdC9lbW90aW9uLWVsZW1lbnQtNDNjNmZlYTAuYnJvd3Nlci5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3NoZWV0L2Rpc3QvZW1vdGlvbi1zaGVldC5icm93c2VyLmVzbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9FbnVtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zdHlsaXMvc3JjL1V0aWxpdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvVG9rZW5pemVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zdHlsaXMvc3JjL1BhcnNlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9TZXJpYWxpemVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zdHlsaXMvc3JjL01pZGRsZXdhcmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL21lbW9pemUvZGlzdC9lbW90aW9uLW1lbW9pemUuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9jYWNoZS9kaXN0L2Vtb3Rpb24tY2FjaGUuYnJvd3Nlci5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3V0aWxzL2Rpc3QvZW1vdGlvbi11dGlscy5icm93c2VyLmVzbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vaGFzaC9kaXN0L2Vtb3Rpb24taGFzaC5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3VuaXRsZXNzL2Rpc3QvZW1vdGlvbi11bml0bGVzcy5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3NlcmlhbGl6ZS9kaXN0L2Vtb3Rpb24tc2VyaWFsaXplLmJyb3dzZXIuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi91c2UtaW5zZXJ0aW9uLWVmZmVjdC13aXRoLWZhbGxiYWNrcy9kaXN0L2Vtb3Rpb24tdXNlLWluc2VydGlvbi1lZmZlY3Qtd2l0aC1mYWxsYmFja3MuYnJvd3Nlci5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3JlYWN0L2Rpc3QvZW1vdGlvbi1yZWFjdC5icm93c2VyLmVzbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL3RoZW1lL2Nsb25lX2VsZW1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2FjY2Vzc2liaWxpdHkvc2NyZWVuX3JlYWRlcl9vbmx5L3NjcmVlbl9yZWFkZXJfb25seS5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3RhYmJhYmxlL3NyYy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL2tleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9hY2Nlc3NpYmlsaXR5L2Nhc2NhZGluZ19tZW51X2tleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9lc20tYnJvd3Nlci9ybmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9lc20tYnJvd3Nlci9yZWdleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2VzbS1icm93c2VyL3ZhbGlkYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvZXNtLWJyb3dzZXIvc3RyaW5naWZ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvZXNtLWJyb3dzZXIvdjEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9hY2Nlc3NpYmlsaXR5L2h0bWxfaWRfZ2VuZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvYWxpZ25tZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9jb21tb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy90aGVtZXMvYW1zdGVyZGFtL2dsb2JhbF9zdHlsaW5nL3ZhcmlhYmxlcy9fYnJlYWtwb2ludC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL2JyZWFrcG9pbnQvYnJlYWtwb2ludC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL2JyZWFrcG9pbnQvY3VycmVudF9icmVha3BvaW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvdGhlbWUvY29udGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL3RoZW1lL3R5cGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvdGhlbWUvdXRpbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9jb2xvci9pc19jb2xvcl9kYXJrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvY29sb3IvaXNfdmFsaWRfaGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvY29sb3IvZXVpX3BhbGV0dGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvY29sb3IvY29sb3JfcGFsZXR0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL2NvbG9yL21hbmlwdWxhdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL2NvbG9yL2NvbnRyYXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvdGhlbWVzL2Ftc3RlcmRhbS9nbG9iYWxfc3R5bGluZy92YXJpYWJsZXMvX2NvbG9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3RoZW1lcy9hbXN0ZXJkYW0vZ2xvYmFsX3N0eWxpbmcvdmFyaWFibGVzL19hbmltYXRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9nbG9iYWxfc3R5bGluZy9mdW5jdGlvbnMvbG9naWNhbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9nbG9iYWxfc3R5bGluZy9mdW5jdGlvbnMvc2l6ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2dsb2JhbF9zdHlsaW5nL2Z1bmN0aW9ucy90eXBvZ3JhcGh5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvdGhlbWVzL2Ftc3RlcmRhbS9nbG9iYWxfc3R5bGluZy92YXJpYWJsZXMvX3NpemUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy90aGVtZXMvYW1zdGVyZGFtL2dsb2JhbF9zdHlsaW5nL3ZhcmlhYmxlcy9fYm9yZGVycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3RoZW1lcy9hbXN0ZXJkYW0vZ2xvYmFsX3N0eWxpbmcvdmFyaWFibGVzL19sZXZlbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy90aGVtZXMvYW1zdGVyZGFtL2dsb2JhbF9zdHlsaW5nL3ZhcmlhYmxlcy9fdHlwb2dyYXBoeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3RoZW1lcy9hbXN0ZXJkYW0vZ2xvYmFsX3N0eWxpbmcvdmFyaWFibGVzL19zdGF0ZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy90aGVtZXMvYW1zdGVyZGFtL3RoZW1lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvdGhlbWUvaG9va3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy90aGVtZS9wcm92aWRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL3Rocm90dGxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvYnJlYWtwb2ludC9jdXJyZW50X2JyZWFrcG9pbnRfaG9vay5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL2JyZWFrcG9pbnQvdXNlSXNXaXRoaW5CcmVha3BvaW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL2ZpbmRFbGVtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvcHJlZGljYXRlL2NvbW1vbl9wcmVkaWNhdGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvcHJlZGljYXRlL2xvZGFzaF9wcmVkaWNhdGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvZm9ybWF0L2Zvcm1hdF9ib29sZWFuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvZm9ybWF0L2Zvcm1hdF9kYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvZm9ybWF0L2Zvcm1hdF9udW1iZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9mb3JtYXQvZm9ybWF0X3RleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9mb3JtYXQvZm9ybWF0X2F1dG8uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy91cmwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9zZWN1cml0eS9nZXRfc2VjdXJlX3JlbF9mb3JfdGFyZ2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvc29ydC9zb3J0X2RpcmVjdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL29iamVjdHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9wb3BvdmVyL3BvcG92ZXJfcG9zaXRpb25pbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy90cmFuc2l0aW9uL3RyYW5zaXRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9ob29rcy91c2VDb21iaW5lZFJlZnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2J1dHRvbi9idXR0b24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2J1dHRvbi9fYnV0dG9uX2NvbnRlbnRfZGVwcmVjYXRlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYWNjZXNzaWJpbGl0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYWdncmVnYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hbGVydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYW5hbHl6ZUV2ZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hbmFseXplX2V2ZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hbm5vdGF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcG1fdHJhY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9hZGRfZGF0YS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2FkdmFuY2VkX3NldHRpbmdzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfYWdlbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9hcG0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9hcHBfc2VhcmNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfYXVkaXRiZWF0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfY2FudmFzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfY2FzZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9jb2RlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfY29uc29sZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2Nyb3NzX2NsdXN0ZXJfcmVwbGljYXRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9kYXNoYm9hcmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9kZXZ0b29scy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2Rpc2NvdmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfZW1zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfZmlsZWJlYXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9mbGVldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2dpcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2dyYXBoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfZ3Jvay5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2hlYXJ0YmVhdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2luZGV4X21hbmFnZW1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9pbmRleF9wYXR0ZXJuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfaW5kZXhfcm9sbHVwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfbGVucy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2xvZ3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9tYW5hZ2VtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfbWV0cmljYmVhdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX21ldHJpY3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9tbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX21vbml0b3JpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9ub3RlYm9vay5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX3BhY2tldGJlYXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9waXBlbGluZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX3JlY2VudGx5X3ZpZXdlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX3JlcG9ydGluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX3NhdmVkX29iamVjdHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9zZWFyY2hfcHJvZmlsZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9zZWN1cml0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX3NlY3VyaXR5X2FuYWx5dGljcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX3NwYWNlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX3NxbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX3RpbWVsaW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfdXBncmFkZV9hc3Npc3RhbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF91cHRpbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF91c2Vyc19yb2xlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX3Zpc3VhbGl6ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX3dhdGNoZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF93b3JrcGxhY2Vfc2VhcmNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcnJvd0VuZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXJyb3dTdGFydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXJyb3dfZG93bi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXJyb3dfbGVmdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXJyb3dfcmlnaHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Fycm93X3VwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hc3Rlcmlzay5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYmVha2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9iZWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9iZWxsU2xhc2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2JvbHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2JveGVzX2hvcml6b250YWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2JveGVzX3ZlcnRpY2FsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9icmFuY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2JyYW5jaFVzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Jyb29tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9icnVzaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYnVnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9idWxsc2V5ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY2FsZW5kYXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2NoZWNrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jaGVja0luQ2lyY2xlRmlsbGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jaGVlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY2xvY2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Nsb3VkRHJpenpsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY2xvdWRTdG9ybXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Nsb3VkU3VubnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2NsdXN0ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2NvbG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jb21wdXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jb25zb2xlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jb250YWluZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2NvbnRpbnVpdHlBYm92ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY29udGludWl0eUFib3ZlQmVsb3cuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2NvbnRpbnVpdHlCZWxvdy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY29udGludWl0eVdpdGhpbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY29udHJvbHNfaG9yaXpvbnRhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY29udHJvbHNfdmVydGljYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2NvcHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2NvcHlfY2xpcGJvYXJkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jcm9zcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY3Jvc3NJbkFDaXJjbGVGaWxsZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Nyb3NzaGFpcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2N1cnJlbmN5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jdXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2RhdGFiYXNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9kZXNrdG9wLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9kb2N1bWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZG9jdW1lbnRFZGl0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9kb2N1bWVudGF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9kb2N1bWVudHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2RvdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZG91YmxlQXJyb3dMZWZ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9kb3VibGVBcnJvd1JpZ2h0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9kb3dubG9hZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9ySXRlbUFsaWduQm90dG9tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25DZW50ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvckl0ZW1BbGlnbkxlZnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvckl0ZW1BbGlnbk1pZGRsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9ySXRlbUFsaWduUmlnaHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvckl0ZW1BbGlnblRvcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JQb3NpdGlvblRvcExlZnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvclBvc2l0aW9uVG9wUmlnaHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvcl9hbGlnbl9jZW50ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvcl9hbGlnbl9sZWZ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JfYWxpZ25fcmlnaHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvcl9ib2xkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JfY2hlY2tsaXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JfY29kZV9ibG9jay5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yX2NvbW1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvcl9oZWFkaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JfaXRhbGljLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JfbGluay5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yX29yZGVyZWRfbGlzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yX3JlZG8uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvcl9zdHJpa2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvcl90YWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yX3VuZGVybGluZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yX3VuZG8uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvcl91bm9yZGVyZWRfbGlzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZW1haWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VtcHR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lcWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VyYXNlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZXhpdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZXhwYW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9leHBhbmRNaW5pLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9leHBvcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2V5ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZXllX2Nsb3NlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZmFjZV9oYXBweS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZmFjZV9uZXV0cmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9mYWNlX3NhZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZmlsdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9mbGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9mb2xkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9mb2xkZXJfY2hlY2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2ZvbGRlcl9jbG9zZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2ZvbGRlcl9leGNsYW1hdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZm9sZGVyX29wZW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2ZyYW1lTmV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZnJhbWVQcmV2aW91cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZnVsbFNjcmVlbkV4aXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Z1bGxfc2NyZWVuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9mdW5jdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZ2Vhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZ2xhc3Nlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZ2xvYmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2dyYWIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2dyYWJfaG9yaXpvbnRhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZ3JpZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvaGVhcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2hlYXRtYXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2hlbHAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2hvbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2lJbkNpcmNsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvaW1hZ2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2ltcG9ydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvaW5kZXhfY2xvc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2luZGV4X2VkaXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2luZGV4X2ZsdXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9pbmRleF9tYXBwaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9pbmRleF9vcGVuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9pbmRleF9ydW50aW1lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9pbmRleF9zZXR0aW5ncy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvaW5wdXRPdXRwdXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2luc3BlY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2ludmVydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvaXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2tleWJvYXJkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9rcWxfZmllbGQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2txbF9mdW5jdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMva3FsX29wZXJhbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2txbF9zZWxlY3Rvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMva3FsX3ZhbHVlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9rdWJlcm5ldGVzTm9kZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMva3ViZXJuZXRlc1BvZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbGF5ZXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sZXR0ZXJpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xpbmVEYXNoZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xpbmVEb3R0ZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xpbmVTb2xpZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbGluay5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbGlzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbGlzdF9hZGQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvY2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvY2tPcGVuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2Flcm9zcGlrZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19hcGFjaGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fYXBwX3NlYXJjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19hd3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fYXdzX21vbm8uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fYXp1cmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fYXp1cmVfbW9uby5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19iZWF0cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19idXNpbmVzc19hbmFseXRpY3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fY2VwaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19jbG91ZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19jbG91ZF9lY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fY29kZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19jb2Rlc2FuZGJveC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19jb3VjaGJhc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fZG9ja2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2Ryb3B3aXphcmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fZWxhc3RpYy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19lbGFzdGljX3N0YWNrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2VsYXN0aWNzZWFyY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fZW50ZXJwcmlzZV9zZWFyY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fZXRjZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19nY3AuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fZ2NwX21vbm8uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fZ2l0aHViLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2dtYWlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2dvbGFuZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19nb29nbGVfZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19oYXByb3h5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2libS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19pYm1fbW9uby5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19rYWZrYS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19raWJhbmEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fa3ViZXJuZXRlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19sb2dnaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2xvZ3N0YXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX21hcHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fbWVtY2FjaGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX21ldHJpY3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fbW9uZ29kYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19teXNxbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19uZ2lueC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19vYnNlcnZhYmlsaXR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX29zcXVlcnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fcGhwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX3Bvc3RncmVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX3Byb21ldGhldXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fcmFiYml0bXEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fcmVkaXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fc2VjdXJpdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fc2l0ZV9zZWFyY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fc2tldGNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX3NsYWNrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX3VwdGltZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb193ZWJob29rLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX3dpbmRvd3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fd29ya3BsYWNlX3NlYXJjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nc3Rhc2hfZmlsdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dzdGFzaF9pZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nc3Rhc2hfaW5wdXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ3N0YXNoX291dHB1dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nc3Rhc2hfcXVldWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21hZ25ldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWFnbmlmeVdpdGhFeGNsYW1hdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWFnbmlmeVdpdGhNaW51cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWFnbmlmeVdpdGhQbHVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tYXBfbWFya2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tZW1vcnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21lbnUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21lbnVEb3duLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tZW51TGVmdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWVudVJpZ2h0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tZW51VXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21lcmdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9taW5pbWl6ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWludXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21pbnVzX2luX2NpcmNsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWludXNfaW5fY2lyY2xlX2ZpbGxlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWxfY2xhc3NpZmljYXRpb25fam9iLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tbF9jcmVhdGVfYWR2YW5jZWRfam9iLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tbF9jcmVhdGVfbXVsdGlfbWV0cmljX2pvYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWxfY3JlYXRlX3BvcHVsYXRpb25fam9iLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tbF9jcmVhdGVfc2luZ2xlX21ldHJpY19qb2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21sX2RhdGFfdmlzdWFsaXplci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWxfb3V0bGllcl9kZXRlY3Rpb25fam9iLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tbF9yZWdyZXNzaW9uX2pvYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbW9iaWxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tb29uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9uYW1lc3BhY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL25lc3RlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbm9kZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbnVtYmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9vZmZsaW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9vbmxpbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3BhY2thZ2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3BhZ2VTZWxlY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3BhZ2VzU2VsZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9wYWludC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcGFwZXJfY2xpcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcGFydGlhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcGF1c2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3BheW1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3BlbmNpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcGVyY2VudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcGluLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9waW5fZmlsbGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9wbGF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9wbGF5RmlsbGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9wbHVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9wbHVzX2luX2NpcmNsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcGx1c19pbl9jaXJjbGVfZmlsbGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9wb3BvdXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3B1c2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3F1ZXN0aW9uX2luX2NpcmNsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcXVvdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3JlZnJlc2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3JlcG9ydGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9yZXR1cm5fa2V5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zYXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zY2FsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc2VhcmNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zZWN1cml0eVNpZ25hbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc2VjdXJpdHlTaWduYWxEZXRlY3RlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc2VjdXJpdHlTaWduYWxSZXNvbHZlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc2Vzc2lvblZpZXdlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc2hhcmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3NoYXJlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zbm93Zmxha2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3NvcnRMZWZ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zb3J0UmlnaHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3NvcnRfZG93bi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc29ydF91cC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc29ydGFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3N0YXJQbHVzRW1wdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3N0YXJQbHVzRmlsbGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zdGFyX2VtcHR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zdGFyX2VtcHR5X3NwYWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zdGFyX2ZpbGxlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc3Rhcl9maWxsZWRfc3BhY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3N0YXJfbWludXNfZW1wdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3N0YXJfbWludXNfZmlsbGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zdGF0cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc3RvcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc3RvcF9maWxsZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3N0b3Bfc2xhc2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3N0b3JhZ2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3N0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc3VibW9kdWxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zdW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3N3YXRjaF9pbnB1dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc3ltbGluay5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdGFibGVPZkNvbnRlbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90YWJsZV9kZW5zaXR5X2NvbXBhY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3RhYmxlX2RlbnNpdHlfZXhwYW5kZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3RhYmxlX2RlbnNpdHlfbm9ybWFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90YWcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3RlYXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3RlbXBlcmF0dXJlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90aW1lUmVmcmVzaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdGltZWxpbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3RpbWVzbGlkZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuQWxpYXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuQW5ub3RhdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5BcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5CaW5hcnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuQm9vbGVhbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5DbGFzcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbkNvbnN0YW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbkRhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuRGVuc2VWZWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuRWxlbWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5FbnVtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbkVudW1NZW1iZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuRXZlbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuRXhjZXB0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbkZpZWxkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbkZpbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuRmxhdHRlbmVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbkZ1bmN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbkdlby5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5IaXN0b2dyYW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuSVAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuSW50ZXJmYWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbkpvaW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuS2V5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbktleXdvcmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuTWV0aG9kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbk1ldHJpY0NvdW50ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuTWV0cmljR2F1Z2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuTW9kdWxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbk5hbWVzcGFjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5OZXN0ZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuTnVsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5OdW1iZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuT2JqZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbk9wZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlblBhY2thZ2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuUGFyYW1ldGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlblBlcmNvbGF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuUHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuUmFuZ2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuUmFua0ZlYXR1cmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuUmFua0ZlYXR1cmVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlblJlcG8uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuU2VhcmNoVHlwZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5TaGFwZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5TdHJpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuU3RydWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlblN5bWJvbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5UYWcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuVGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5Ub2tlbkNvdW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlblZhcmlhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90cmFpbmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdHJhc2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3VuZm9sZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdW5saW5rLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy91c2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy91c2VyQXZhdGFyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy91c2Vycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdmVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aWRlb1BsYXllci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdmlzX2FyZWEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Zpc19hcmVhX3N0YWNrZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Zpc19iYXJfaG9yaXpvbnRhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdmlzX2Jhcl9ob3Jpem9udGFsX3N0YWNrZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Zpc19iYXJfdmVydGljYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Zpc19iYXJfdmVydGljYWxfc3RhY2tlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdmlzX2dhdWdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfZ29hbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdmlzX2xpbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Zpc19tYXBfY29vcmRpbmF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdmlzX21hcF9yZWdpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Zpc19tZXRyaWMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Zpc19waWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Zpc190YWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdmlzX3RhZ19jbG91ZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdmlzX3RleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Zpc190aW1lbGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdmlzX3ZlZ2EuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Zpc192aXN1YWxfYnVpbGRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvd29yZFdyYXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3dvcmRXcmFwRGlzYWJsZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3dyZW5jaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9pY29uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2ljb25fbWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvcmVhY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vbmFtZWRfY29sb3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvZ2xvYmFsX3N0eWxpbmcvcmVzZXQvZ2xvYmFsX3N0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2dsb2JhbF9zdHlsaW5nL21peGlucy9fY29sb3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9nbG9iYWxfc3R5bGluZy9taXhpbnMvX2hlbHBlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9nbG9iYWxfc3R5bGluZy9taXhpbnMvX3BhZGRpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9nbG9iYWxfc3R5bGluZy9taXhpbnMvX3N0YXRlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2dsb2JhbF9zdHlsaW5nL21peGlucy9fdHlwb2dyYXBoeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2dsb2JhbF9zdHlsaW5nL3ZhcmlhYmxlcy9hbmltYXRpb25zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvZ2xvYmFsX3N0eWxpbmcvcmVzZXQvcmVzZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vaWNvbi5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2kxOG4vaTE4bi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvY29udGV4dC9jb250ZXh0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pMThuL2kxOG5fdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvbG9hZGluZy9fbG9hZGluZ19zdHJpbmdzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9sb2FkaW5nL2xvYWRpbmdfc3Bpbm5lci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvbG9hZGluZy9sb2FkaW5nX3NwaW5uZXIuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvc2VjdXJpdHkvaHJlZl92YWxpZGF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL29ic2VydmVyL3Jlc2l6ZV9vYnNlcnZlci9yZXNpemVfb2JzZXJ2ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL29ic2VydmVyL29ic2VydmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90ZXh0L3RleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2xpbmsvbGluay5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RpdGxlL3RpdGxlLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGV4dC90ZXh0LnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGV4dC90ZXh0X2NvbG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90ZXh0L3RleHRfY29sb3Iuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90ZXh0L3RleHRfYWxpZ24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RleHQvdGV4dF9hbGlnbi5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2J1dHRvbi9idXR0b25fZW1wdHkvYnV0dG9uX2VtcHR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9idXR0b24vYnV0dG9uX2ljb24vYnV0dG9uX2ljb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2lubmVyX3RleHQvaW5uZXJfdGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtdmlydHVhbGl6ZWQtYXV0by1zaXplci9kaXN0L3JlYWN0LXZpcnR1YWxpemVkLWF1dG8tc2l6ZXIuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9hdXRvX3NpemVyL2F1dG9fc2l6ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2JhZGdlL2JhZGdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9jb2xvcl9waWNrZXIvdXRpbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2JhZGdlL2JldGFfYmFkZ2UvYmV0YV9iYWRnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdG9vbF90aXAvdG9vbF90aXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3BvcnRhbC9wb3J0YWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3Rvb2xfdGlwL3Rvb2xfdGlwX3BvcG92ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3Rvb2xfdGlwL2ljb25fdGlwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvdGhlbWVzL2Ftc3RlcmRhbS9nbG9iYWxfc3R5bGluZy9mdW5jdGlvbnMvc2hhZG93cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3RoZW1lcy9hbXN0ZXJkYW0vZ2xvYmFsX3N0eWxpbmcvbWl4aW5zL3NoYWRvdy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvbGluay9saW5rLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9wb3BvdmVyL2lucHV0X3BvcG92ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ZvY3VzX3RyYXAvZm9jdXNfdHJhcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2Lm1qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtb24vZGlzdC9lczIwMTUvQ29tYmluYXRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLW9uL2Rpc3QvZXMyMDE1L1VJLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1mb2N1cy1vbi9ub2RlX21vZHVsZXMvcmVhY3QtcmVtb3ZlLXNjcm9sbC9kaXN0L2VzMjAxNS9VSS5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVtb3ZlLXNjcm9sbC1iYXIvZGlzdC9lczIwMTUvY29uc3RhbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91c2UtY2FsbGJhY2stcmVmL2Rpc3QvZXMyMDE1L2Fzc2lnblJlZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdXNlLWNhbGxiYWNrLXJlZi9kaXN0L2VzMjAxNS91c2VSZWYuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VzZS1jYWxsYmFjay1yZWYvZGlzdC9lczIwMTUvdXNlTWVyZ2VSZWYuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VzZS1zaWRlY2FyL2Rpc3QvZXMyMDE1L21lZGl1bS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdXNlLXNpZGVjYXIvZGlzdC9lczIwMTUvZXhwb3J0cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtb24vbm9kZV9tb2R1bGVzL3JlYWN0LXJlbW92ZS1zY3JvbGwvZGlzdC9lczIwMTUvbWVkaXVtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L0xvY2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvY29uc3RhbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L0ZvY3VzR3VhcmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLWxvY2svZGlzdC9lczIwMTUvbWVkaXVtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3Njb3BlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3V0aWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLWxvY2svZGlzdC9lczIwMTUvVUkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLW9uL2Rpc3QvZXMyMDE1L21lZGl1bS5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtbG9jay9kaXN0L2VzMjAxNS9UcmFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zZXRQcm90b3R5cGVPZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b1ByaW1pdGl2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Qcm9wZXJ0eUtleS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWNsaWVudHNpZGUtZWZmZWN0L2xpYi9pbmRleC5lcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS91dGlscy9hcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS91dGlscy9pcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS91dGlscy90YWJPcmRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS91dGlscy90YWJiYWJsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvdXRpbHMvdGFiVXRpbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvdXRpbHMvRE9NdXRpbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvdXRpbHMvYWxsLWFmZmVjdGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3V0aWxzL3NhZmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvdXRpbHMvZ2V0QWN0aXZlRWxlbWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS9mb2N1c0luc2lkZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS9mb2N1c0lzSGlkZGVuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3V0aWxzL2NvcnJlY3RGb2N1cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS91dGlscy9maXJzdEZvY3VzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3NvbHZlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS91dGlscy9hdXRvLWZvY3VzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3V0aWxzL3BhcmVudGluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS9mb2N1c1NvbHZlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS9mb2N1c2FibGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L2NvbW1hbmRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L21vdmVGb2N1c0luc2lkZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS9yZXR1cm4tZm9jdXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvc2libGluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtbG9jay9kaXN0L2VzMjAxNS9zaWRlY2FyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1mb2N1cy1vbi9ub2RlX21vZHVsZXMvcmVhY3QtcmVtb3ZlLXNjcm9sbC9kaXN0L2VzMjAxNS9TaWRlRWZmZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1yZW1vdmUtc2Nyb2xsLWJhci9kaXN0L2VzMjAxNS9jb21wb25lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXN0eWxlLXNpbmdsZXRvbi9kaXN0L2VzMjAxNS9ob29rLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9nZXQtbm9uY2UvZGlzdC9lczIwMTUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXN0eWxlLXNpbmdsZXRvbi9kaXN0L2VzMjAxNS9zaW5nbGV0b24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXN0eWxlLXNpbmdsZXRvbi9kaXN0L2VzMjAxNS9jb21wb25lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlbW92ZS1zY3JvbGwtYmFyL2Rpc3QvZXMyMDE1L3V0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1mb2N1cy1vbi9ub2RlX21vZHVsZXMvcmVhY3QtcmVtb3ZlLXNjcm9sbC9kaXN0L2VzMjAxNS9hZ2dyZXNpdmVDYXB0dXJlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1mb2N1cy1vbi9ub2RlX21vZHVsZXMvcmVhY3QtcmVtb3ZlLXNjcm9sbC9kaXN0L2VzMjAxNS9oYW5kbGVTY3JvbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLW9uL25vZGVfbW9kdWxlcy9yZWFjdC1yZW1vdmUtc2Nyb2xsL2Rpc3QvZXMyMDE1L3NpZGVjYXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLW9uL2Rpc3QvZXMyMDE1L0VmZmVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXJpYS1oaWRkZW4vZGlzdC9lczIwMTUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLW9uL2Rpc3QvZXMyMDE1L0ludGVyYWN0aXZpdHlEaXNhYmxlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtb24vZGlzdC9lczIwMTUvc2lkZWNhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvcG9wb3Zlci9wb3BvdmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9vYnNlcnZlci9tdXRhdGlvbl9vYnNlcnZlci9tdXRhdGlvbl9vYnNlcnZlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvb3V0c2lkZV9jbGlja19kZXRlY3Rvci9vdXRzaWRlX2NsaWNrX2RldGVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9wb3BvdmVyL3BvcG92ZXJfYXJyb3cvX3BvcG92ZXJfYXJyb3cuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3BvcG92ZXIvcG9wb3Zlcl9hcnJvdy9fcG9wb3Zlcl9hcnJvdy5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3BvcG92ZXIvcG9wb3Zlci5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3BvcG92ZXIvcG9wb3Zlcl9wYW5lbC9fcG9wb3Zlcl9wYW5lbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvcGFuZWwvcGFuZWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3BhbmVsL3BhbmVsLnN0eWxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9wb3BvdmVyL3BvcG92ZXJfcGFuZWwvX3BvcG92ZXJfcGFuZWwuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9mb3JtL2Zvcm0uc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90aXRsZS90aXRsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvY2FyZC9jYXJkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9jYXJkL2NhcmRfc2VsZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9mb3JtL2NoZWNrYm94L2NoZWNrYm94LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9mbGV4L2ZsZXhfZ3JvdXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ZsZXgvZmxleF9pdGVtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9mb3JtL2Zvcm1fY29udHJvbF9sYXlvdXQvZm9ybV9jb250cm9sX2xheW91dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZm9ybS9mb3JtX2NvbnRyb2xfbGF5b3V0L2Zvcm1fY29udHJvbF9sYXlvdXRfaWNvbnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Zvcm0vZm9ybV9jb250cm9sX2xheW91dC9mb3JtX2NvbnRyb2xfbGF5b3V0X2NsZWFyX2J1dHRvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZm9ybS9mb3JtX2NvbnRyb2xfbGF5b3V0L2Zvcm1fY29udHJvbF9sYXlvdXRfY3VzdG9tX2ljb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Zvcm0vZm9ybV9sYWJlbC9mb3JtX2xhYmVsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9mb3JtL3ZhbGlkYXRhYmxlX2NvbnRyb2wvdmFsaWRhdGFibGVfY29udHJvbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZm9ybS9mb3JtX2NvbnRyb2xfbGF5b3V0L19udW1faWNvbnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Zvcm0vZmllbGRfc2VhcmNoL2ZpZWxkX3NlYXJjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL2Jyb3dzZXIvYnJvd3Nlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZm9ybS9mb3JtX2Vycm9yX3RleHQvZm9ybV9lcnJvcl90ZXh0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9mb3JtL2Zvcm1faGVscF90ZXh0L2Zvcm1faGVscF90ZXh0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9mb3JtL2Zvcm1fcm93L2Zvcm1fcm93LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9jb250ZXh0X21lbnUvY29udGV4dF9tZW51X3BhbmVsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9jb250ZXh0X21lbnUvY29udGV4dF9tZW51X2l0ZW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2hvcml6b250YWxfcnVsZS9ob3Jpem9udGFsX3J1bGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2hvcml6b250YWxfcnVsZS9ob3Jpem9udGFsX3J1bGUuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9mb3JtL3N3aXRjaC9zd2l0Y2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbWVtb2l6ZS1vbmUvZGlzdC9tZW1vaXplLW9uZS5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXdpbmRvdy9zcmMvdGltZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXdpbmRvdy9zcmMvZG9tSGVscGVycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3Qtd2luZG93L3NyYy9jcmVhdGVHcmlkQ29tcG9uZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC13aW5kb3cvc3JjL1ZhcmlhYmxlU2l6ZUdyaWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXdpbmRvdy9zcmMvY3JlYXRlTGlzdENvbXBvbmVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3Qtd2luZG93L3NyYy9WYXJpYWJsZVNpemVMaXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC13aW5kb3cvc3JjL0ZpeGVkU2l6ZUdyaWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXdpbmRvdy9zcmMvRml4ZWRTaXplTGlzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3Qtd2luZG93L3NyYy9zaGFsbG93RGlmZmVycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3Qtd2luZG93L3NyYy9hcmVFcXVhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3Qtd2luZG93L3NyYy9zaG91bGRDb21wb25lbnRVcGRhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3NwYWNlci9zcGFjZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3NwYWNlci9zcGFjZXIuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9jb21ib19ib3gvY29tYm9fYm94LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9jb21ib19ib3gvY29tYm9fYm94X29wdGlvbnNfbGlzdC9jb21ib19ib3hfb3B0aW9uc19saXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9oaWdobGlnaHQvaGlnaGxpZ2h0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9tYXJrL21hcmsuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL21hcmsvbWFyay5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2NvbWJvX2JveC9jb21ib19ib3hfb3B0aW9uc19saXN0L2NvbWJvX2JveF90aXRsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZmlsdGVyX2dyb3VwL2ZpbHRlcl9zZWxlY3RfaXRlbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvY29tYm9fYm94L21hdGNoaW5nX29wdGlvbnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2NvbWJvX2JveC9jb21ib19ib3hfaW5wdXQvY29tYm9fYm94X2lucHV0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9jb21ib19ib3gvY29tYm9fYm94X2lucHV0L2NvbWJvX2JveF9waWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90YWJsZS90YWJsZV9wYWdpbmF0aW9uL3RhYmxlX3BhZ2luYXRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3BhZ2luYXRpb24vcGFnaW5hdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvcGFnaW5hdGlvbi9wYWdpbmF0aW9uX2J1dHRvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvcGFnaW5hdGlvbi9wYWdpbmF0aW9uX2J1dHRvbl9hcnJvdy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFicy90YWIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYnMvdGFicy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFicy90YWJiZWRfY29udGVudC90YWJiZWRfY29udGVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZGVsYXlfcmVuZGVyL2RlbGF5X3JlbmRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaGVhbHRoL2hlYWx0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaGVhbHRoL2hlYWx0aC5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3Byb3ZpZGVyL3Byb3ZpZGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvZ2xvYmFsX3N0eWxpbmcvdXRpbGl0eS91dGlsaXR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9wcm92aWRlci9jYWNoZS9jYWNoZV9wcm92aWRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdHJlZV92aWV3L3RyZWVfdmlldy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvc2VsZWN0YWJsZS9zZWxlY3RhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9zZWxlY3RhYmxlL3NlbGVjdGFibGVfc2VhcmNoL3NlbGVjdGFibGVfc2VhcmNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9zZWxlY3RhYmxlL21hdGNoaW5nX29wdGlvbnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3NlbGVjdGFibGUvc2VsZWN0YWJsZV9tZXNzYWdlL3NlbGVjdGFibGVfbWVzc2FnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvc2VsZWN0YWJsZS9zZWxlY3RhYmxlX2xpc3Qvc2VsZWN0YWJsZV9saXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9zZWxlY3RhYmxlL3NlbGVjdGFibGVfbGlzdC9zZWxlY3RhYmxlX2xpc3RfaXRlbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvc3VnZ2VzdC9zdWdnZXN0X2l0ZW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3N1Z2dlc3Qvc3VnZ2VzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFibGUvdGFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYmxlL3RhYmxlX2JvZHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYmxlL3RhYmxlX2Zvb3Rlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFibGUvdGFibGVfZm9vdGVyX2NlbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYmxlL3V0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90YWJsZS90YWJsZV9oZWFkZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYmxlL3RhYmxlX2hlYWRlcl9jZWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90YWJsZS90YWJsZV9oZWFkZXJfY2VsbF9jaGVja2JveC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFibGUvbW9iaWxlL3RhYmxlX2hlYWRlcl9tb2JpbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYmxlL21vYmlsZS90YWJsZV9zb3J0X21vYmlsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFibGUvbW9iaWxlL3RhYmxlX3NvcnRfbW9iaWxlX2l0ZW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYmxlL3RhYmxlX3Jvdy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFibGUvdGFibGVfcm93X2NlbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYmxlL3RhYmxlX3Jvd19jZWxsX2NoZWNrYm94LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9iYXNpY190YWJsZS9iYXNpY190YWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYmFzaWNfdGFibGUvY29sbGFwc2VkX2l0ZW1fYWN0aW9ucy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYmFzaWNfdGFibGUvZXhwYW5kZWRfaXRlbV9hY3Rpb25zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9iYXNpY190YWJsZS9kZWZhdWx0X2l0ZW1fYWN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9iYXNpY190YWJsZS9jdXN0b21faXRlbV9hY3Rpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Jhc2ljX3RhYmxlL2FjdGlvbl90eXBlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYmFzaWNfdGFibGUvcGFnaW5hdGlvbl9iYXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvc3Vic2NyaWJhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9jb3JlL3V0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9jb3JlL2ZvY3VzTWFuYWdlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS9vbmxpbmVNYW5hZ2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9jb3JlL3JldHJ5ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvbm90aWZ5TWFuYWdlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS9sb2dnZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvcXVlcnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvcXVlcnlDYWNoZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS9tdXRhdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS9tdXRhdGlvbkNhY2hlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9jb3JlL2luZmluaXRlUXVlcnlCZWhhdmlvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS9xdWVyeUNsaWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS9xdWVyeU9ic2VydmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9yZWFjdC9yZWFjdEJhdGNoZWRVcGRhdGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9yZWFjdC9zZXRCYXRjaFVwZGF0ZXNGbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvcmVhY3QvbG9nZ2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9yZWFjdC9zZXRMb2dnZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL3JlYWN0L1F1ZXJ5Q2xpZW50UHJvdmlkZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL3JlYWN0L1F1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9yZWFjdC91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvcmVhY3QvdXNlQmFzZVF1ZXJ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9yZWFjdC91c2VRdWVyeS5qcyIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L0Rlc2NyaXB0aW9uV2lkZ2V0L0Rlc2NyaXB0aW9uV2lkZ2V0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L0Rlc2NyaXB0aW9uV2lkZ2V0L0Rlc2NyaXB0aW9uUHJlc2VudGF0aW9uLnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L0lyaVdpZGdldC9JcmlXaWRnZXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvTWV0YWRhdGFXaWRnZXQvQnJlYWRjcnVtYldpZGdldC9CcmVhZGNydW1iV2lkZ2V0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L0JyZWFkY3J1bWJXaWRnZXQvQnJlYWRjcnVtYlByZXNlbnRhdGlvbi50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9NZXRhZGF0YVdpZGdldC9UYWJXaWRnZXQvQWx0ZXJuYXRpdmVOYW1lVGFiV2lkZ2V0L0FsdGVybmF0aXZlTmFtZVRhYldpZGdldC50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9NZXRhZGF0YVdpZGdldC9UYWJXaWRnZXQvQWx0ZXJuYXRpdmVOYW1lVGFiV2lkZ2V0L0FsdGVybmF0aXZlTmFtZVRhYlByZXNlbnRhdGlvbi50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9NZXRhZGF0YVdpZGdldC9UYWJXaWRnZXQvQ3Jvc3NSZWZXaWRnZXQvQ3Jvc3NSZWZUYWJXaWRnZXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvTWV0YWRhdGFXaWRnZXQvVGFiV2lkZ2V0L0Nyb3NzUmVmV2lkZ2V0L0Nyb3NzUmVmVGFiUHJlc2VudGF0aW9uLnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L1RhYldpZGdldC9IaWVyYXJjaHlXaWRnZXQvSGllcmFyY2h5V2lkZ2V0LnRzeCIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvb2JqZWN0LWFzc2lnbi9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QvY2pzL3JlYWN0LnByb2R1Y3Rpb24ubWluLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvc2NoZWR1bGVyL2Nqcy9zY2hlZHVsZXIucHJvZHVjdGlvbi5taW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3NjaGVkdWxlci9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2Nqcy9yZWFjdC1kb20ucHJvZHVjdGlvbi5taW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUvY2pzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlLXNoaW0ucHJvZHVjdGlvbi5taW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlL3NoaW0vaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlL2Nqcy91c2Utc3luYy1leHRlcm5hbC1zdG9yZS1zaGltL3dpdGgtc2VsZWN0b3IucHJvZHVjdGlvbi5taW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlL3NoaW0vd2l0aC1zZWxlY3Rvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3Mvbm9kZV9tb2R1bGVzL3JlYWN0LWlzL2Nqcy9yZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3Mvbm9kZV9tb2R1bGVzL3JlYWN0LWlzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9ob2lzdC1ub24tcmVhY3Qtc3RhdGljcy9kaXN0L2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzLmNqcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QtaXMvY2pzL3JlYWN0LWlzLnByb2R1Y3Rpb24ubWluLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC1pcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvbXVsdGltYXAvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BlbW90aW9uL3NoZWV0L2Rpc3QvZW1vdGlvbi1zaGVldC5icm93c2VyLmVzbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9FbnVtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9zdHlsaXMvc3JjL1V0aWxpdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvVG9rZW5pemVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9zdHlsaXMvc3JjL1BhcnNlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9QcmVmaXhlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9TZXJpYWxpemVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9zdHlsaXMvc3JjL01pZGRsZXdhcmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3N0eWxpcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQGVtb3Rpb24vd2Vhay1tZW1vaXplL2Rpc3QvZW1vdGlvbi13ZWFrLW1lbW9pemUuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AZW1vdGlvbi9tZW1vaXplL2Rpc3QvZW1vdGlvbi1tZW1vaXplLmVzbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQGVtb3Rpb24vY2FjaGUvZGlzdC9lbW90aW9uLWNhY2hlLmJyb3dzZXIuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AZW1vdGlvbi9yZWFjdC9faXNvbGF0ZWQtaG5ycy9kaXN0L2Vtb3Rpb24tcmVhY3QtX2lzb2xhdGVkLWhucnMuYnJvd3Nlci5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BlbW90aW9uL3V0aWxzL2Rpc3QvZW1vdGlvbi11dGlscy5icm93c2VyLmVzbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQGVtb3Rpb24vaGFzaC9kaXN0L2Vtb3Rpb24taGFzaC5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BlbW90aW9uL3VuaXRsZXNzL2Rpc3QvZW1vdGlvbi11bml0bGVzcy5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BlbW90aW9uL3NlcmlhbGl6ZS9kaXN0L2Vtb3Rpb24tc2VyaWFsaXplLmJyb3dzZXIuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AZW1vdGlvbi91c2UtaW5zZXJ0aW9uLWVmZmVjdC13aXRoLWZhbGxiYWNrcy9kaXN0L2Vtb3Rpb24tdXNlLWluc2VydGlvbi1lZmZlY3Qtd2l0aC1mYWxsYmFja3MuYnJvd3Nlci5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BlbW90aW9uL3JlYWN0L2Rpc3QvZW1vdGlvbi1lbGVtZW50LTQzYzZmZWEwLmJyb3dzZXIuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AZW1vdGlvbi9yZWFjdC9kaXN0L2Vtb3Rpb24tcmVhY3QuYnJvd3Nlci5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL25vZGUvZm9ybWF0TXVpRXJyb3JNZXNzYWdlL2Zvcm1hdE11aUVycm9yTWVzc2FnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS91dGlscy9ub2RlL2Zvcm1hdE11aUVycm9yTWVzc2FnZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQGVtb3Rpb24vaXMtcHJvcC12YWxpZC9kaXN0L2Vtb3Rpb24taXMtcHJvcC12YWxpZC5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BlbW90aW9uL3N0eWxlZC9iYXNlL2Rpc3QvZW1vdGlvbi1zdHlsZWQtYmFzZS5icm93c2VyLmVzbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQGVtb3Rpb24vc3R5bGVkL2Rpc3QvZW1vdGlvbi1zdHlsZWQuYnJvd3Nlci5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QvY2pzL3JlYWN0LWpzeC1ydW50aW1lLnByb2R1Y3Rpb24ubWluLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC9qc3gtcnVudGltZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zdHlsZWQtZW5naW5lL25vZGUvU3R5bGVkRW5naW5lUHJvdmlkZXIvU3R5bGVkRW5naW5lUHJvdmlkZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3R5bGVkLWVuZ2luZS9ub2RlL1N0eWxlZEVuZ2luZVByb3ZpZGVyL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N0eWxlZC1lbmdpbmUvbm9kZS9HbG9iYWxTdHlsZXMvR2xvYmFsU3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N0eWxlZC1lbmdpbmUvbm9kZS9HbG9iYWxTdHlsZXMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3R5bGVkLWVuZ2luZS9ub2RlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2V4dGVuZHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvbm9kZS9kZWVwbWVyZ2UvZGVlcG1lcmdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL25vZGUvZGVlcG1lcmdlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL25vZGUvY2FwaXRhbGl6ZS9jYXBpdGFsaXplLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL25vZGUvY2FwaXRhbGl6ZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS91dGlscy9ub2RlL2dldERpc3BsYXlOYW1lL2dldERpc3BsYXlOYW1lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL25vZGUvZ2V0RGlzcGxheU5hbWUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvbm9kZS9jbGFtcC9jbGFtcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS91dGlscy9ub2RlL2NsYW1wL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9tZXJnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vcmVzcG9uc2l2ZVByb3BUeXBlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9icmVha3BvaW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vc3R5bGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL21lbW9pemUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL3NwYWNpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2NvbXBvc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2JvcmRlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2Nzc0dyaWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL3BhbGV0dGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL3NpemluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vc3R5bGVGdW5jdGlvblN4L2RlZmF1bHRTeENvbmZpZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vc3R5bGVGdW5jdGlvblN4L3N0eWxlRnVuY3Rpb25TeC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9zdHlsZUZ1bmN0aW9uU3gvZXh0ZW5kU3hQcm9wLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9zdHlsZUZ1bmN0aW9uU3gvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2NyZWF0ZVRoZW1lL2NyZWF0ZUJyZWFrcG9pbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9jcmVhdGVUaGVtZS9zaGFwZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vY3JlYXRlVGhlbWUvY3JlYXRlU3BhY2luZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vY3JlYXRlVGhlbWUvYXBwbHlTdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2NyZWF0ZVRoZW1lL2NyZWF0ZVRoZW1lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9jcmVhdGVUaGVtZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vY29sb3JNYW5pcHVsYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vY3JlYXRlU3R5bGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L3NyYy93aWRnZXRzL0VudGl0eVRyZWVXaWRnZXQudHN4IiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvdXRpbHMvcmVhY3RCYXRjaGVkVXBkYXRlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvdXRpbHMvYmF0Y2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2hvb2tzL3VzZVNlbGVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9ob29rcy91c2VSZWR1eENvbnRleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2NvbXBvbmVudHMvQ29udGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvdXRpbHMvdXNlU3luY0V4dGVybmFsU3RvcmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2NvbXBvbmVudHMvY29ubmVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvY29ubmVjdC9tZXJnZVByb3BzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy91dGlscy9TdWJzY3JpcHRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL3V0aWxzL3VzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2NvbXBvbmVudHMvUHJvdmlkZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2hvb2tzL3VzZVN0b3JlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9ob29rcy91c2VEaXNwYXRjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9zcmMvYXBwL2hvb2tzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9pbW1lci9zcmMvdXRpbHMvZXJyb3JzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9pbW1lci9zcmMvdXRpbHMvY29tbW9uLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9pbW1lci9zcmMvdXRpbHMvcGx1Z2lucy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvaW1tZXIvc3JjL2NvcmUvc2NvcGUudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL2ltbWVyL3NyYy9jb3JlL2ZpbmFsaXplLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9pbW1lci9zcmMvY29yZS9wcm94eS50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvaW1tZXIvc3JjL2NvcmUvaW1tZXJDbGFzcy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvaW1tZXIvc3JjL2NvcmUvY3VycmVudC50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvaW1tZXIvc3JjL3BsdWdpbnMvZXM1LnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9pbW1lci9zcmMvcGx1Z2lucy9wYXRjaGVzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9pbW1lci9zcmMvcGx1Z2lucy9tYXBzZXQudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL2ltbWVyL3NyYy9wbHVnaW5zL2FsbC50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvaW1tZXIvc3JjL2ltbWVyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9pbW1lci9zcmMvdXRpbHMvZW52LnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvUHJpbWl0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b1Byb3BlcnR5S2V5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0U3ByZWFkMi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVkdXgvZXMvcmVkdXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlZHV4LXRodW5rL2VzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AcmVkdXhqcy90b29sa2l0L3NyYy9pbmRleC50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9zcmMvY3JlYXRlRHJhZnRTYWZlU2VsZWN0b3IudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0ByZWR1eGpzL3Rvb2xraXQvc3JjL2NvbmZpZ3VyZVN0b3JlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AcmVkdXhqcy90b29sa2l0L3NyYy9kZXZ0b29sc0V4dGVuc2lvbi50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9zcmMvaXNQbGFpbk9iamVjdC50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9zcmMvZ2V0RGVmYXVsdE1pZGRsZXdhcmUudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0ByZWR1eGpzL3Rvb2xraXQvc3JjL3RzSGVscGVycy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9zcmMvY3JlYXRlQWN0aW9uLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AcmVkdXhqcy90b29sa2l0L3NyYy9hY3Rpb25DcmVhdG9ySW52YXJpYW50TWlkZGxld2FyZS50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9zcmMvdXRpbHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0ByZWR1eGpzL3Rvb2xraXQvc3JjL2ltbXV0YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZS50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9zcmMvc2VyaWFsaXphYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AcmVkdXhqcy90b29sa2l0L3NyYy9jcmVhdGVSZWR1Y2VyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AcmVkdXhqcy90b29sa2l0L3NyYy9tYXBCdWlsZGVycy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9zcmMvY3JlYXRlU2xpY2UudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0ByZWR1eGpzL3Rvb2xraXQvc3JjL2VudGl0aWVzL2VudGl0eV9zdGF0ZS50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9zcmMvZW50aXRpZXMvc3RhdGVfc2VsZWN0b3JzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AcmVkdXhqcy90b29sa2l0L3NyYy9lbnRpdGllcy9zdGF0ZV9hZGFwdGVyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AcmVkdXhqcy90b29sa2l0L3NyYy9lbnRpdGllcy91dGlscy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9zcmMvZW50aXRpZXMvdW5zb3J0ZWRfc3RhdGVfYWRhcHRlci50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9zcmMvZW50aXRpZXMvc29ydGVkX3N0YXRlX2FkYXB0ZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0ByZWR1eGpzL3Rvb2xraXQvc3JjL2VudGl0aWVzL2NyZWF0ZV9hZGFwdGVyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AcmVkdXhqcy90b29sa2l0L3NyYy9uYW5vaWQudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0ByZWR1eGpzL3Rvb2xraXQvc3JjL2NyZWF0ZUFzeW5jVGh1bmsudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0ByZWR1eGpzL3Rvb2xraXQvc3JjL21hdGNoZXJzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AcmVkdXhqcy90b29sa2l0L3NyYy9saXN0ZW5lck1pZGRsZXdhcmUvdXRpbHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0ByZWR1eGpzL3Rvb2xraXQvc3JjL2xpc3RlbmVyTWlkZGxld2FyZS9leGNlcHRpb25zLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AcmVkdXhqcy90b29sa2l0L3NyYy9saXN0ZW5lck1pZGRsZXdhcmUvdGFzay50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9zcmMvbGlzdGVuZXJNaWRkbGV3YXJlL2luZGV4LnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AcmVkdXhqcy90b29sa2l0L3NyYy9hdXRvQmF0Y2hFbmhhbmNlci50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9kaXN0L3JlZHV4LXRvb2xraXQuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L3NyYy9hcHAvYXBpLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy91cmwtam9pbi9saWIvdXJsLWpvaW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvc3JjL3BhZ2VzL2hvbWUvaG9tZVNsaWNlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L3NyYy9hcHAvdXRpbC50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9zcmMvbW9kZWwvUmVpZmllZC50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9zcmMvbW9kZWwvTGlua2VkRW50aXRpZXMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvc3JjL21vZGVsL1RoaW5nLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L3NyYy9tb2RlbC9FbnRpdHkudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvc3JjL21vZGVsL0NsYXNzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L3NyYy9tb2RlbC9JbmRpdmlkdWFsLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L3NyYy9tb2RlbC9Qcm9wZXJ0eS50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9zcmMvbW9kZWwvT250b2xvZ3kudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvc3JjL3BhZ2VzL29udG9sb2dpZXMvZW50aXRpZXMvZXh0cmFjdEVudGl0eUhpZXJhcmNoeS50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9zcmMvcGFnZXMvb250b2xvZ2llcy9lbnRpdGllcy9jcmVhdGVUcmVlRnJvbUVudGl0aWVzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L3NyYy9wYWdlcy9vbnRvbG9naWVzL29udG9sb2dpZXNTbGljZS50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9zcmMvcGFnZXMvc2VhcmNoL3NlYXJjaFNsaWNlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L3NyYy9hcHAvc3RvcmUudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvc3JjL3BhZ2VzL29udG9sb2dpZXMvZW50aXRpZXMvRW50aXR5VHJlZS50c3giLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvY29sb3JzL2NvbW1vbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9jb2xvcnMvcmVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2NvbG9ycy9wdXJwbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvY29sb3JzL2JsdWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvY29sb3JzL2xpZ2h0Qmx1ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9jb2xvcnMvZ3JlZW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvY29sb3JzL29yYW5nZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9jb2xvcnMvZ3JleS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvaWRlbnRpZmllci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vY3JlYXRlVGhlbWUvY3JlYXRlVGhlbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9jcmVhdGVUaGVtZS9jcmVhdGVCcmVha3BvaW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL2NyZWF0ZVRoZW1lL3NoYXBlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vYnJlYWtwb2ludHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9tZXJnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL3N0eWxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vbWVtb2l6ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL3NwYWNpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9jcmVhdGVUaGVtZS9jcmVhdGVTcGFjaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vc3R5bGVGdW5jdGlvblN4L3N0eWxlRnVuY3Rpb25TeC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL2NvbXBvc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9ib3JkZXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vY3NzR3JpZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL3BhbGV0dGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9zaXppbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9zdHlsZUZ1bmN0aW9uU3gvZGVmYXVsdFN4Q29uZmlnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vY3JlYXRlVGhlbWUvYXBwbHlTdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS91c2VUaGVtZVdpdGhvdXREZWZhdWx0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vdXNlVGhlbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9zdHlsZUZ1bmN0aW9uU3gvZXh0ZW5kU3hQcm9wLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL0NsYXNzTmFtZUdlbmVyYXRvci9DbGFzc05hbWVHZW5lcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL2Nsc3gvZGlzdC9jbHN4Lm1qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcy9nZW5lcmF0ZVV0aWxpdHlDbGFzcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9jcmVhdGVTdHlsZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9zdHlsZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvcmVzb2x2ZVByb3BzL3Jlc29sdmVQcm9wcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL3VzZVRoZW1lUHJvcHMvZ2V0VGhlbWVQcm9wcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL3VzZVRoZW1lUHJvcHMvdXNlVGhlbWVQcm9wcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS91dGlscy91c2VFbmhhbmNlZEVmZmVjdC91c2VFbmhhbmNlZEVmZmVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS91dGlscy9jcmVhdGVDaGFpbmVkRnVuY3Rpb24vY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL2lzTXVpRWxlbWVudC9pc011aUVsZW1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvc2V0UmVmL3NldFJlZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS91dGlscy91c2VJZC91c2VJZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS91dGlscy91c2VDb250cm9sbGVkL3VzZUNvbnRyb2xsZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvdXNlRXZlbnRDYWxsYmFjay91c2VFdmVudENhbGxiYWNrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL3VzZUZvcmtSZWYvdXNlRm9ya1JlZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS91dGlscy91c2VMYXp5UmVmL3VzZUxhenlSZWYuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvdXNlT25Nb3VudC91c2VPbk1vdW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL3VzZVRpbWVvdXQvdXNlVGltZW91dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS91dGlscy91c2VJc0ZvY3VzVmlzaWJsZS91c2VJc0ZvY3VzVmlzaWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS91dGlscy9jb21wb3NlQ2xhc3Nlcy9jb21wb3NlQ2xhc3Nlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL1N0YWNrL2NyZWF0ZVN0YWNrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3N0eWxlcy9jcmVhdGVUaGVtZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvY3JlYXRlTWl4aW5zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3N0eWxlcy9jcmVhdGVQYWxldHRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3N0eWxlcy9jcmVhdGVUeXBvZ3JhcGh5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3N0eWxlcy9zaGFkb3dzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3N0eWxlcy9jcmVhdGVUcmFuc2l0aW9ucy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvekluZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3N0eWxlcy9kZWZhdWx0VGhlbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvc3R5bGVzL3VzZVRoZW1lUHJvcHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvc3R5bGVzL3N0eWxlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy9jYXBpdGFsaXplLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3V0aWxzL2NyZWF0ZUNoYWluZWRGdW5jdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy9jcmVhdGVTdmdJY29uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1N2Z0ljb24vU3ZnSWNvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9TdmdJY29uL3N2Z0ljb25DbGFzc2VzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3V0aWxzL2lzTXVpRWxlbWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy91c2VJZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy91c2VDb250cm9sbGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3V0aWxzL3VzZUV2ZW50Q2FsbGJhY2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdXRpbHMvdXNlRm9ya1JlZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy91c2VJc0ZvY3VzVmlzaWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2V0UHJvdG90eXBlT2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL1RyYW5zaXRpb25Hcm91cENvbnRleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL1RyYW5zaXRpb25Hcm91cC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS91dGlscy9DaGlsZE1hcHBpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQnV0dG9uQmFzZS9CdXR0b25CYXNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0J1dHRvbkJhc2UvVG91Y2hSaXBwbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQnV0dG9uQmFzZS9SaXBwbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQnV0dG9uQmFzZS90b3VjaFJpcHBsZUNsYXNzZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQnV0dG9uQmFzZS9idXR0b25CYXNlQ2xhc3Nlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9UeXBvZ3JhcGh5L1R5cG9ncmFwaHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvVHlwb2dyYXBoeS90eXBvZ3JhcGh5Q2xhc3Nlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Gb3JtQ29udHJvbC9mb3JtQ29udHJvbFN0YXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0Zvcm1Db250cm9sL0Zvcm1Db250cm9sQ29udGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Gb3JtQ29udHJvbC91c2VGb3JtQ29udHJvbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9JbnB1dEJhc2UvdXRpbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQ2hlY2tib3gvQ2hlY2tib3guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvaW50ZXJuYWwvU3dpdGNoQmFzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9pbnRlcm5hbC9zd2l0Y2hCYXNlQ2xhc3Nlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9pbnRlcm5hbC9zdmctaWNvbnMvQ2hlY2tCb3hPdXRsaW5lQmxhbmsuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvaW50ZXJuYWwvc3ZnLWljb25zL0NoZWNrQm94LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2ludGVybmFsL3N2Zy1pY29ucy9JbmRldGVybWluYXRlQ2hlY2tCb3guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQ2hlY2tib3gvY2hlY2tib3hDbGFzc2VzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0NpcmN1bGFyUHJvZ3Jlc3MvQ2lyY3VsYXJQcm9ncmVzcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9DaXJjdWxhclByb2dyZXNzL2NpcmN1bGFyUHJvZ3Jlc3NDbGFzc2VzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0Zvcm1Db250cm9sL0Zvcm1Db250cm9sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0Zvcm1Db250cm9sL2Zvcm1Db250cm9sQ2xhc3Nlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Gb3JtQ29udHJvbExhYmVsL0Zvcm1Db250cm9sTGFiZWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvU3RhY2svU3RhY2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvRm9ybUNvbnRyb2xMYWJlbC9mb3JtQ29udHJvbExhYmVsQ2xhc3Nlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Gb3JtR3JvdXAvRm9ybUdyb3VwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0Zvcm1Hcm91cC9mb3JtR3JvdXBDbGFzc2VzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1JhZGlvL1JhZGlvLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1JhZGlvL1JhZGlvQnV0dG9uSWNvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9pbnRlcm5hbC9zdmctaWNvbnMvUmFkaW9CdXR0b25VbmNoZWNrZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvaW50ZXJuYWwvc3ZnLWljb25zL1JhZGlvQnV0dG9uQ2hlY2tlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9SYWRpb0dyb3VwL3VzZVJhZGlvR3JvdXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvUmFkaW9Hcm91cC9SYWRpb0dyb3VwQ29udGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9SYWRpby9yYWRpb0NsYXNzZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvUmFkaW9Hcm91cC9SYWRpb0dyb3VwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L3NyYy9hcHAvbXVpLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L3NyYy9jb21wb25lbnRzL05vZGUudHN4IiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9jb3JlL3N1YnNjcmliYWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS9mb2N1c01hbmFnZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvb25saW5lTWFuYWdlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS9yZXRyeWVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9jb3JlL3F1ZXJ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9jb3JlL25vdGlmeU1hbmFnZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvbG9nZ2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9jb3JlL3F1ZXJ5Q2FjaGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvcXVlcnlDbGllbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvbXV0YXRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvbXV0YXRpb25DYWNoZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS9pbmZpbml0ZVF1ZXJ5QmVoYXZpb3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL3JlYWN0L3JlYWN0QmF0Y2hlZFVwZGF0ZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL3JlYWN0L3NldEJhdGNoVXBkYXRlc0ZuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9yZWFjdC9sb2dnZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL3JlYWN0L3NldExvZ2dlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvcmVhY3QvUXVlcnlDbGllbnRQcm92aWRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9zcmMvd2lkZ2V0cy9pbmRleC50cyIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L1RhYldpZGdldC9UYWJXaWRnZXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvTWV0YWRhdGFXaWRnZXQvVGFiV2lkZ2V0L1RhYlByZXNlbnRhdGlvbi50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9NZXRhZGF0YVdpZGdldC9UYWJXaWRnZXQvSGllcmFyY2h5V2lkZ2V0RGVwcmVjYXRlZC9IaWVyYXJjaHlXaWRnZXREZXByZWNhdGVkLnRzeCIsICIuLi9zcmMvYXBpL2hpZXJhcmNoeV93aWRnZXRfZGVwcmVjYXRlZC50cyIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L1RpdGxlV2lkZ2V0L1RpdGxlV2lkZ2V0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L1RpdGxlV2lkZ2V0L1RpdGxlUHJlc2VudGF0aW9uLnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L01ldGFkYXRhV2lkZ2V0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL0RhdGFDb250ZW50V2lkZ2V0L0RhdGFDb250ZW50V2lkZ2V0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL0VudGl0eUluZm9XaWRnZXQvRW50aXR5SW5mb1dpZGdldC50c3giLCAiLi4vc3JjL21vZGVsL1N0cnVjdHVyZVJlbmRlcmluZy50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9Kc29uQXBpV2lkZ2V0L0pzb25BcGlXaWRnZXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvT250b2xvZ3lJbmZvV2lkZ2V0L09udG9sb2d5SW5mb1dpZGdldC50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9SZXNvdXJjZXNXaWRnZXQvUmVzb3VyY2VzV2lkZ2V0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL1NlYXJjaEJhcldpZGdldC9TZWFyY2hCYXJXaWRnZXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvU2VhcmNoUmVzdWx0c0xpc3RXaWRnZXQvU2VhcmNoUmVzdWx0c0xpc3RXaWRnZXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvU2VhcmNoUmVzdWx0c0xpc3RXaWRnZXQvTWV0YWRhdGFDb21wYWN0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL0VudGl0eVJlbGF0aW9uc1dpZGdldC9FbnRpdHlSZWxhdGlvbnNXaWRnZXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvaW5kZXgudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qXG5vYmplY3QtYXNzaWduXG4oYykgU2luZHJlIFNvcmh1c1xuQGxpY2Vuc2UgTUlUXG4qL1xuXG4ndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xudmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHByb3BJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG5mdW5jdGlvbiB0b09iamVjdCh2YWwpIHtcblx0aWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkJyk7XG5cdH1cblxuXHRyZXR1cm4gT2JqZWN0KHZhbCk7XG59XG5cbmZ1bmN0aW9uIHNob3VsZFVzZU5hdGl2ZSgpIHtcblx0dHJ5IHtcblx0XHRpZiAoIU9iamVjdC5hc3NpZ24pIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBEZXRlY3QgYnVnZ3kgcHJvcGVydHkgZW51bWVyYXRpb24gb3JkZXIgaW4gb2xkZXIgVjggdmVyc2lvbnMuXG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD00MTE4XG5cdFx0dmFyIHRlc3QxID0gbmV3IFN0cmluZygnYWJjJyk7ICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ldy13cmFwcGVyc1xuXHRcdHRlc3QxWzVdID0gJ2RlJztcblx0XHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDEpWzBdID09PSAnNScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XG5cdFx0dmFyIHRlc3QyID0ge307XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG5cdFx0XHR0ZXN0MlsnXycgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGkpXSA9IGk7XG5cdFx0fVxuXHRcdHZhciBvcmRlcjIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MikubWFwKGZ1bmN0aW9uIChuKSB7XG5cdFx0XHRyZXR1cm4gdGVzdDJbbl07XG5cdFx0fSk7XG5cdFx0aWYgKG9yZGVyMi5qb2luKCcnKSAhPT0gJzAxMjM0NTY3ODknKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MyA9IHt9O1xuXHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGxldHRlcikge1xuXHRcdFx0dGVzdDNbbGV0dGVyXSA9IGxldHRlcjtcblx0XHR9KTtcblx0XHRpZiAoT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSwgdGVzdDMpKS5qb2luKCcnKSAhPT1cblx0XHRcdFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlcnIpIHtcblx0XHQvLyBXZSBkb24ndCBleHBlY3QgYW55IG9mIHRoZSBhYm92ZSB0byB0aHJvdywgYnV0IGJldHRlciB0byBiZSBzYWZlLlxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNob3VsZFVzZU5hdGl2ZSgpID8gT2JqZWN0LmFzc2lnbiA6IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xuXHR2YXIgZnJvbTtcblx0dmFyIHRvID0gdG9PYmplY3QodGFyZ2V0KTtcblx0dmFyIHN5bWJvbHM7XG5cblx0Zm9yICh2YXIgcyA9IDE7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspIHtcblx0XHRmcm9tID0gT2JqZWN0KGFyZ3VtZW50c1tzXSk7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuXHRcdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwoZnJvbSwga2V5KSkge1xuXHRcdFx0XHR0b1trZXldID0gZnJvbVtrZXldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcblx0XHRcdHN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKHByb3BJc0VudW1lcmFibGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkge1xuXHRcdFx0XHRcdHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0bztcbn07XG4iLCAiLyoqIEBsaWNlbnNlIFJlYWN0IHYxNy4wLjJcbiAqIHJlYWN0LmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIChmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxudmFyIF9hc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG5cbi8vIFRPRE86IHRoaXMgaXMgc3BlY2lhbCBiZWNhdXNlIGl0IGdldHMgaW1wb3J0ZWQgZHVyaW5nIGJ1aWxkLlxudmFyIFJlYWN0VmVyc2lvbiA9ICcxNy4wLjInO1xuXG4vLyBBVFRFTlRJT05cbi8vIFdoZW4gYWRkaW5nIG5ldyBzeW1ib2xzIHRvIHRoaXMgZmlsZSxcbi8vIFBsZWFzZSBjb25zaWRlciBhbHNvIGFkZGluZyB0byAncmVhY3QtZGV2dG9vbHMtc2hhcmVkL3NyYy9iYWNrZW5kL1JlYWN0U3ltYm9scydcbi8vIFRoZSBTeW1ib2wgdXNlZCB0byB0YWcgdGhlIFJlYWN0RWxlbWVudC1saWtlIHR5cGVzLiBJZiB0aGVyZSBpcyBubyBuYXRpdmUgU3ltYm9sXG4vLyBub3IgcG9seWZpbGwsIHRoZW4gYSBwbGFpbiBudW1iZXIgaXMgdXNlZCBmb3IgcGVyZm9ybWFuY2UuXG52YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0gMHhlYWM3O1xudmFyIFJFQUNUX1BPUlRBTF9UWVBFID0gMHhlYWNhO1xuZXhwb3J0cy5GcmFnbWVudCA9IDB4ZWFjYjtcbmV4cG9ydHMuU3RyaWN0TW9kZSA9IDB4ZWFjYztcbmV4cG9ydHMuUHJvZmlsZXIgPSAweGVhZDI7XG52YXIgUkVBQ1RfUFJPVklERVJfVFlQRSA9IDB4ZWFjZDtcbnZhciBSRUFDVF9DT05URVhUX1RZUEUgPSAweGVhY2U7XG52YXIgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IDB4ZWFkMDtcbmV4cG9ydHMuU3VzcGVuc2UgPSAweGVhZDE7XG52YXIgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFID0gMHhlYWQ4O1xudmFyIFJFQUNUX01FTU9fVFlQRSA9IDB4ZWFkMztcbnZhciBSRUFDVF9MQVpZX1RZUEUgPSAweGVhZDQ7XG52YXIgUkVBQ1RfQkxPQ0tfVFlQRSA9IDB4ZWFkOTtcbnZhciBSRUFDVF9TRVJWRVJfQkxPQ0tfVFlQRSA9IDB4ZWFkYTtcbnZhciBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFID0gMHhlYWQ1O1xudmFyIFJFQUNUX1NDT1BFX1RZUEUgPSAweGVhZDc7XG52YXIgUkVBQ1RfT1BBUVVFX0lEX1RZUEUgPSAweGVhZTA7XG52YXIgUkVBQ1RfREVCVUdfVFJBQ0lOR19NT0RFX1RZUEUgPSAweGVhZTE7XG52YXIgUkVBQ1RfT0ZGU0NSRUVOX1RZUEUgPSAweGVhZTI7XG52YXIgUkVBQ1RfTEVHQUNZX0hJRERFTl9UWVBFID0gMHhlYWUzO1xuXG5pZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuZm9yKSB7XG4gIHZhciBzeW1ib2xGb3IgPSBTeW1ib2wuZm9yO1xuICBSRUFDVF9FTEVNRU5UX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmVsZW1lbnQnKTtcbiAgUkVBQ1RfUE9SVEFMX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnBvcnRhbCcpO1xuICBleHBvcnRzLkZyYWdtZW50ID0gc3ltYm9sRm9yKCdyZWFjdC5mcmFnbWVudCcpO1xuICBleHBvcnRzLlN0cmljdE1vZGUgPSBzeW1ib2xGb3IoJ3JlYWN0LnN0cmljdF9tb2RlJyk7XG4gIGV4cG9ydHMuUHJvZmlsZXIgPSBzeW1ib2xGb3IoJ3JlYWN0LnByb2ZpbGVyJyk7XG4gIFJFQUNUX1BST1ZJREVSX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnByb3ZpZGVyJyk7XG4gIFJFQUNUX0NPTlRFWFRfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuY29udGV4dCcpO1xuICBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5mb3J3YXJkX3JlZicpO1xuICBleHBvcnRzLlN1c3BlbnNlID0gc3ltYm9sRm9yKCdyZWFjdC5zdXNwZW5zZScpO1xuICBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnN1c3BlbnNlX2xpc3QnKTtcbiAgUkVBQ1RfTUVNT19UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5tZW1vJyk7XG4gIFJFQUNUX0xBWllfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QubGF6eScpO1xuICBSRUFDVF9CTE9DS19UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5ibG9jaycpO1xuICBSRUFDVF9TRVJWRVJfQkxPQ0tfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Quc2VydmVyLmJsb2NrJyk7XG4gIFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmZ1bmRhbWVudGFsJyk7XG4gIFJFQUNUX1NDT1BFX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnNjb3BlJyk7XG4gIFJFQUNUX09QQVFVRV9JRF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5vcGFxdWUuaWQnKTtcbiAgUkVBQ1RfREVCVUdfVFJBQ0lOR19NT0RFX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmRlYnVnX3RyYWNlX21vZGUnKTtcbiAgUkVBQ1RfT0ZGU0NSRUVOX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0Lm9mZnNjcmVlbicpO1xuICBSRUFDVF9MRUdBQ1lfSElEREVOX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmxlZ2FjeV9oaWRkZW4nKTtcbn1cblxudmFyIE1BWUJFX0lURVJBVE9SX1NZTUJPTCA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLml0ZXJhdG9yO1xudmFyIEZBVVhfSVRFUkFUT1JfU1lNQk9MID0gJ0BAaXRlcmF0b3InO1xuZnVuY3Rpb24gZ2V0SXRlcmF0b3JGbihtYXliZUl0ZXJhYmxlKSB7XG4gIGlmIChtYXliZUl0ZXJhYmxlID09PSBudWxsIHx8IHR5cGVvZiBtYXliZUl0ZXJhYmxlICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIG1heWJlSXRlcmF0b3IgPSBNQVlCRV9JVEVSQVRPUl9TWU1CT0wgJiYgbWF5YmVJdGVyYWJsZVtNQVlCRV9JVEVSQVRPUl9TWU1CT0xdIHx8IG1heWJlSXRlcmFibGVbRkFVWF9JVEVSQVRPUl9TWU1CT0xdO1xuXG4gIGlmICh0eXBlb2YgbWF5YmVJdGVyYXRvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBtYXliZUl0ZXJhdG9yO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogS2VlcHMgdHJhY2sgb2YgdGhlIGN1cnJlbnQgZGlzcGF0Y2hlci5cbiAqL1xudmFyIFJlYWN0Q3VycmVudERpc3BhdGNoZXIgPSB7XG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICogQHR5cGUge1JlYWN0Q29tcG9uZW50fVxuICAgKi9cbiAgY3VycmVudDogbnVsbFxufTtcblxuLyoqXG4gKiBLZWVwcyB0cmFjayBvZiB0aGUgY3VycmVudCBiYXRjaCdzIGNvbmZpZ3VyYXRpb24gc3VjaCBhcyBob3cgbG9uZyBhbiB1cGRhdGVcbiAqIHNob3VsZCBzdXNwZW5kIGZvciBpZiBpdCBuZWVkcyB0by5cbiAqL1xudmFyIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnID0ge1xuICB0cmFuc2l0aW9uOiAwXG59O1xuXG4vKipcbiAqIEtlZXBzIHRyYWNrIG9mIHRoZSBjdXJyZW50IG93bmVyLlxuICpcbiAqIFRoZSBjdXJyZW50IG93bmVyIGlzIHRoZSBjb21wb25lbnQgd2hvIHNob3VsZCBvd24gYW55IGNvbXBvbmVudHMgdGhhdCBhcmVcbiAqIGN1cnJlbnRseSBiZWluZyBjb25zdHJ1Y3RlZC5cbiAqL1xudmFyIFJlYWN0Q3VycmVudE93bmVyID0ge1xuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIEB0eXBlIHtSZWFjdENvbXBvbmVudH1cbiAgICovXG4gIGN1cnJlbnQ6IG51bGxcbn07XG5cbnZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lID0ge307XG52YXIgY3VycmVudEV4dHJhU3RhY2tGcmFtZSA9IG51bGw7XG5mdW5jdGlvbiBzZXRFeHRyYVN0YWNrRnJhbWUoc3RhY2spIHtcbiAge1xuICAgIGN1cnJlbnRFeHRyYVN0YWNrRnJhbWUgPSBzdGFjaztcbiAgfVxufVxuXG57XG4gIFJlYWN0RGVidWdDdXJyZW50RnJhbWUuc2V0RXh0cmFTdGFja0ZyYW1lID0gZnVuY3Rpb24gKHN0YWNrKSB7XG4gICAge1xuICAgICAgY3VycmVudEV4dHJhU3RhY2tGcmFtZSA9IHN0YWNrO1xuICAgIH1cbiAgfTsgLy8gU3RhY2sgaW1wbGVtZW50YXRpb24gaW5qZWN0ZWQgYnkgdGhlIGN1cnJlbnQgcmVuZGVyZXIuXG5cblxuICBSZWFjdERlYnVnQ3VycmVudEZyYW1lLmdldEN1cnJlbnRTdGFjayA9IG51bGw7XG5cbiAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5nZXRTdGFja0FkZGVuZHVtID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzdGFjayA9ICcnOyAvLyBBZGQgYW4gZXh0cmEgdG9wIGZyYW1lIHdoaWxlIGFuIGVsZW1lbnQgaXMgYmVpbmcgdmFsaWRhdGVkXG5cbiAgICBpZiAoY3VycmVudEV4dHJhU3RhY2tGcmFtZSkge1xuICAgICAgc3RhY2sgKz0gY3VycmVudEV4dHJhU3RhY2tGcmFtZTtcbiAgICB9IC8vIERlbGVnYXRlIHRvIHRoZSBpbmplY3RlZCByZW5kZXJlci1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvblxuXG5cbiAgICB2YXIgaW1wbCA9IFJlYWN0RGVidWdDdXJyZW50RnJhbWUuZ2V0Q3VycmVudFN0YWNrO1xuXG4gICAgaWYgKGltcGwpIHtcbiAgICAgIHN0YWNrICs9IGltcGwoKSB8fCAnJztcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhY2s7XG4gIH07XG59XG5cbi8qKlxuICogVXNlZCBieSBhY3QoKSB0byB0cmFjayB3aGV0aGVyIHlvdSdyZSBpbnNpZGUgYW4gYWN0KCkgc2NvcGUuXG4gKi9cbnZhciBJc1NvbWVSZW5kZXJlckFjdGluZyA9IHtcbiAgY3VycmVudDogZmFsc2Vcbn07XG5cbnZhciBSZWFjdFNoYXJlZEludGVybmFscyA9IHtcbiAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlcjogUmVhY3RDdXJyZW50RGlzcGF0Y2hlcixcbiAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWc6IFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnLFxuICBSZWFjdEN1cnJlbnRPd25lcjogUmVhY3RDdXJyZW50T3duZXIsXG4gIElzU29tZVJlbmRlcmVyQWN0aW5nOiBJc1NvbWVSZW5kZXJlckFjdGluZyxcbiAgLy8gVXNlZCBieSByZW5kZXJlcnMgdG8gYXZvaWQgYnVuZGxpbmcgb2JqZWN0LWFzc2lnbiB0d2ljZSBpbiBVTUQgYnVuZGxlczpcbiAgYXNzaWduOiBfYXNzaWduXG59O1xuXG57XG4gIFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0RGVidWdDdXJyZW50RnJhbWUgPSBSZWFjdERlYnVnQ3VycmVudEZyYW1lO1xufVxuXG4vLyBieSBjYWxscyB0byB0aGVzZSBtZXRob2RzIGJ5IGEgQmFiZWwgcGx1Z2luLlxuLy9cbi8vIEluIFBST0QgKG9yIGluIHBhY2thZ2VzIHdpdGhvdXQgYWNjZXNzIHRvIFJlYWN0IGludGVybmFscyksXG4vLyB0aGV5IGFyZSBsZWZ0IGFzIHRoZXkgYXJlIGluc3RlYWQuXG5cbmZ1bmN0aW9uIHdhcm4oZm9ybWF0KSB7XG4gIHtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBwcmludFdhcm5pbmcoJ3dhcm4nLCBmb3JtYXQsIGFyZ3MpO1xuICB9XG59XG5mdW5jdGlvbiBlcnJvcihmb3JtYXQpIHtcbiAge1xuICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiA+IDEgPyBfbGVuMiAtIDEgOiAwKSwgX2tleTIgPSAxOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICBhcmdzW19rZXkyIC0gMV0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgIH1cblxuICAgIHByaW50V2FybmluZygnZXJyb3InLCBmb3JtYXQsIGFyZ3MpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHByaW50V2FybmluZyhsZXZlbCwgZm9ybWF0LCBhcmdzKSB7XG4gIC8vIFdoZW4gY2hhbmdpbmcgdGhpcyBsb2dpYywgeW91IG1pZ2h0IHdhbnQgdG8gYWxzb1xuICAvLyB1cGRhdGUgY29uc29sZVdpdGhTdGFja0Rldi53d3cuanMgYXMgd2VsbC5cbiAge1xuICAgIHZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcbiAgICB2YXIgc3RhY2sgPSBSZWFjdERlYnVnQ3VycmVudEZyYW1lLmdldFN0YWNrQWRkZW5kdW0oKTtcblxuICAgIGlmIChzdGFjayAhPT0gJycpIHtcbiAgICAgIGZvcm1hdCArPSAnJXMnO1xuICAgICAgYXJncyA9IGFyZ3MuY29uY2F0KFtzdGFja10pO1xuICAgIH1cblxuICAgIHZhciBhcmdzV2l0aEZvcm1hdCA9IGFyZ3MubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICByZXR1cm4gJycgKyBpdGVtO1xuICAgIH0pOyAvLyBDYXJlZnVsOiBSTiBjdXJyZW50bHkgZGVwZW5kcyBvbiB0aGlzIHByZWZpeFxuXG4gICAgYXJnc1dpdGhGb3JtYXQudW5zaGlmdCgnV2FybmluZzogJyArIGZvcm1hdCk7IC8vIFdlIGludGVudGlvbmFsbHkgZG9uJ3QgdXNlIHNwcmVhZCAob3IgLmFwcGx5KSBkaXJlY3RseSBiZWNhdXNlIGl0XG4gICAgLy8gYnJlYWtzIElFOTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMzYxMFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmdcblxuICAgIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5jYWxsKGNvbnNvbGVbbGV2ZWxdLCBjb25zb2xlLCBhcmdzV2l0aEZvcm1hdCk7XG4gIH1cbn1cblxudmFyIGRpZFdhcm5TdGF0ZVVwZGF0ZUZvclVubW91bnRlZENvbXBvbmVudCA9IHt9O1xuXG5mdW5jdGlvbiB3YXJuTm9vcChwdWJsaWNJbnN0YW5jZSwgY2FsbGVyTmFtZSkge1xuICB7XG4gICAgdmFyIF9jb25zdHJ1Y3RvciA9IHB1YmxpY0luc3RhbmNlLmNvbnN0cnVjdG9yO1xuICAgIHZhciBjb21wb25lbnROYW1lID0gX2NvbnN0cnVjdG9yICYmIChfY29uc3RydWN0b3IuZGlzcGxheU5hbWUgfHwgX2NvbnN0cnVjdG9yLm5hbWUpIHx8ICdSZWFjdENsYXNzJztcbiAgICB2YXIgd2FybmluZ0tleSA9IGNvbXBvbmVudE5hbWUgKyBcIi5cIiArIGNhbGxlck5hbWU7XG5cbiAgICBpZiAoZGlkV2FyblN0YXRlVXBkYXRlRm9yVW5tb3VudGVkQ29tcG9uZW50W3dhcm5pbmdLZXldKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZXJyb3IoXCJDYW4ndCBjYWxsICVzIG9uIGEgY29tcG9uZW50IHRoYXQgaXMgbm90IHlldCBtb3VudGVkLiBcIiArICdUaGlzIGlzIGEgbm8tb3AsIGJ1dCBpdCBtaWdodCBpbmRpY2F0ZSBhIGJ1ZyBpbiB5b3VyIGFwcGxpY2F0aW9uLiAnICsgJ0luc3RlYWQsIGFzc2lnbiB0byBgdGhpcy5zdGF0ZWAgZGlyZWN0bHkgb3IgZGVmaW5lIGEgYHN0YXRlID0ge307YCAnICsgJ2NsYXNzIHByb3BlcnR5IHdpdGggdGhlIGRlc2lyZWQgc3RhdGUgaW4gdGhlICVzIGNvbXBvbmVudC4nLCBjYWxsZXJOYW1lLCBjb21wb25lbnROYW1lKTtcblxuICAgIGRpZFdhcm5TdGF0ZVVwZGF0ZUZvclVubW91bnRlZENvbXBvbmVudFt3YXJuaW5nS2V5XSA9IHRydWU7XG4gIH1cbn1cbi8qKlxuICogVGhpcyBpcyB0aGUgYWJzdHJhY3QgQVBJIGZvciBhbiB1cGRhdGUgcXVldWUuXG4gKi9cblxuXG52YXIgUmVhY3ROb29wVXBkYXRlUXVldWUgPSB7XG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciBvciBub3QgdGhpcyBjb21wb3NpdGUgY29tcG9uZW50IGlzIG1vdW50ZWQuXG4gICAqIEBwYXJhbSB7UmVhY3RDbGFzc30gcHVibGljSW5zdGFuY2UgVGhlIGluc3RhbmNlIHdlIHdhbnQgdG8gdGVzdC5cbiAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBtb3VudGVkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqIEBwcm90ZWN0ZWRcbiAgICogQGZpbmFsXG4gICAqL1xuICBpc01vdW50ZWQ6IGZ1bmN0aW9uIChwdWJsaWNJbnN0YW5jZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcblxuICAvKipcbiAgICogRm9yY2VzIGFuIHVwZGF0ZS4gVGhpcyBzaG91bGQgb25seSBiZSBpbnZva2VkIHdoZW4gaXQgaXMga25vd24gd2l0aFxuICAgKiBjZXJ0YWludHkgdGhhdCB3ZSBhcmUgKipub3QqKiBpbiBhIERPTSB0cmFuc2FjdGlvbi5cbiAgICpcbiAgICogWW91IG1heSB3YW50IHRvIGNhbGwgdGhpcyB3aGVuIHlvdSBrbm93IHRoYXQgc29tZSBkZWVwZXIgYXNwZWN0IG9mIHRoZVxuICAgKiBjb21wb25lbnQncyBzdGF0ZSBoYXMgY2hhbmdlZCBidXQgYHNldFN0YXRlYCB3YXMgbm90IGNhbGxlZC5cbiAgICpcbiAgICogVGhpcyB3aWxsIG5vdCBpbnZva2UgYHNob3VsZENvbXBvbmVudFVwZGF0ZWAsIGJ1dCBpdCB3aWxsIGludm9rZVxuICAgKiBgY29tcG9uZW50V2lsbFVwZGF0ZWAgYW5kIGBjb21wb25lbnREaWRVcGRhdGVgLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1YmxpY0luc3RhbmNlIFRoZSBpbnN0YW5jZSB0aGF0IHNob3VsZCByZXJlbmRlci5cbiAgICogQHBhcmFtIHs/ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCBhZnRlciBjb21wb25lbnQgaXMgdXBkYXRlZC5cbiAgICogQHBhcmFtIHs/c3RyaW5nfSBjYWxsZXJOYW1lIG5hbWUgb2YgdGhlIGNhbGxpbmcgZnVuY3Rpb24gaW4gdGhlIHB1YmxpYyBBUEkuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZW5xdWV1ZUZvcmNlVXBkYXRlOiBmdW5jdGlvbiAocHVibGljSW5zdGFuY2UsIGNhbGxiYWNrLCBjYWxsZXJOYW1lKSB7XG4gICAgd2Fybk5vb3AocHVibGljSW5zdGFuY2UsICdmb3JjZVVwZGF0ZScpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZXBsYWNlcyBhbGwgb2YgdGhlIHN0YXRlLiBBbHdheXMgdXNlIHRoaXMgb3IgYHNldFN0YXRlYCB0byBtdXRhdGUgc3RhdGUuXG4gICAqIFlvdSBzaG91bGQgdHJlYXQgYHRoaXMuc3RhdGVgIGFzIGltbXV0YWJsZS5cbiAgICpcbiAgICogVGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgYHRoaXMuc3RhdGVgIHdpbGwgYmUgaW1tZWRpYXRlbHkgdXBkYXRlZCwgc29cbiAgICogYWNjZXNzaW5nIGB0aGlzLnN0YXRlYCBhZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kIG1heSByZXR1cm4gdGhlIG9sZCB2YWx1ZS5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdENsYXNzfSBwdWJsaWNJbnN0YW5jZSBUaGUgaW5zdGFuY2UgdGhhdCBzaG91bGQgcmVyZW5kZXIuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjb21wbGV0ZVN0YXRlIE5leHQgc3RhdGUuXG4gICAqIEBwYXJhbSB7P2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsZWQgYWZ0ZXIgY29tcG9uZW50IGlzIHVwZGF0ZWQuXG4gICAqIEBwYXJhbSB7P3N0cmluZ30gY2FsbGVyTmFtZSBuYW1lIG9mIHRoZSBjYWxsaW5nIGZ1bmN0aW9uIGluIHRoZSBwdWJsaWMgQVBJLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGVucXVldWVSZXBsYWNlU3RhdGU6IGZ1bmN0aW9uIChwdWJsaWNJbnN0YW5jZSwgY29tcGxldGVTdGF0ZSwgY2FsbGJhY2ssIGNhbGxlck5hbWUpIHtcbiAgICB3YXJuTm9vcChwdWJsaWNJbnN0YW5jZSwgJ3JlcGxhY2VTdGF0ZScpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBTZXRzIGEgc3Vic2V0IG9mIHRoZSBzdGF0ZS4gVGhpcyBvbmx5IGV4aXN0cyBiZWNhdXNlIF9wZW5kaW5nU3RhdGUgaXNcbiAgICogaW50ZXJuYWwuIFRoaXMgcHJvdmlkZXMgYSBtZXJnaW5nIHN0cmF0ZWd5IHRoYXQgaXMgbm90IGF2YWlsYWJsZSB0byBkZWVwXG4gICAqIHByb3BlcnRpZXMgd2hpY2ggaXMgY29uZnVzaW5nLiBUT0RPOiBFeHBvc2UgcGVuZGluZ1N0YXRlIG9yIGRvbid0IHVzZSBpdFxuICAgKiBkdXJpbmcgdGhlIG1lcmdlLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1YmxpY0luc3RhbmNlIFRoZSBpbnN0YW5jZSB0aGF0IHNob3VsZCByZXJlbmRlci5cbiAgICogQHBhcmFtIHtvYmplY3R9IHBhcnRpYWxTdGF0ZSBOZXh0IHBhcnRpYWwgc3RhdGUgdG8gYmUgbWVyZ2VkIHdpdGggc3RhdGUuXG4gICAqIEBwYXJhbSB7P2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsZWQgYWZ0ZXIgY29tcG9uZW50IGlzIHVwZGF0ZWQuXG4gICAqIEBwYXJhbSB7P3N0cmluZ30gTmFtZSBvZiB0aGUgY2FsbGluZyBmdW5jdGlvbiBpbiB0aGUgcHVibGljIEFQSS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBlbnF1ZXVlU2V0U3RhdGU6IGZ1bmN0aW9uIChwdWJsaWNJbnN0YW5jZSwgcGFydGlhbFN0YXRlLCBjYWxsYmFjaywgY2FsbGVyTmFtZSkge1xuICAgIHdhcm5Ob29wKHB1YmxpY0luc3RhbmNlLCAnc2V0U3RhdGUnKTtcbiAgfVxufTtcblxudmFyIGVtcHR5T2JqZWN0ID0ge307XG5cbntcbiAgT2JqZWN0LmZyZWV6ZShlbXB0eU9iamVjdCk7XG59XG4vKipcbiAqIEJhc2UgY2xhc3MgaGVscGVycyBmb3IgdGhlIHVwZGF0aW5nIHN0YXRlIG9mIGEgY29tcG9uZW50LlxuICovXG5cblxuZnVuY3Rpb24gQ29tcG9uZW50KHByb3BzLCBjb250ZXh0LCB1cGRhdGVyKSB7XG4gIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgdGhpcy5jb250ZXh0ID0gY29udGV4dDsgLy8gSWYgYSBjb21wb25lbnQgaGFzIHN0cmluZyByZWZzLCB3ZSB3aWxsIGFzc2lnbiBhIGRpZmZlcmVudCBvYmplY3QgbGF0ZXIuXG5cbiAgdGhpcy5yZWZzID0gZW1wdHlPYmplY3Q7IC8vIFdlIGluaXRpYWxpemUgdGhlIGRlZmF1bHQgdXBkYXRlciBidXQgdGhlIHJlYWwgb25lIGdldHMgaW5qZWN0ZWQgYnkgdGhlXG4gIC8vIHJlbmRlcmVyLlxuXG4gIHRoaXMudXBkYXRlciA9IHVwZGF0ZXIgfHwgUmVhY3ROb29wVXBkYXRlUXVldWU7XG59XG5cbkNvbXBvbmVudC5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudCA9IHt9O1xuLyoqXG4gKiBTZXRzIGEgc3Vic2V0IG9mIHRoZSBzdGF0ZS4gQWx3YXlzIHVzZSB0aGlzIHRvIG11dGF0ZVxuICogc3RhdGUuIFlvdSBzaG91bGQgdHJlYXQgYHRoaXMuc3RhdGVgIGFzIGltbXV0YWJsZS5cbiAqXG4gKiBUaGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCBgdGhpcy5zdGF0ZWAgd2lsbCBiZSBpbW1lZGlhdGVseSB1cGRhdGVkLCBzb1xuICogYWNjZXNzaW5nIGB0aGlzLnN0YXRlYCBhZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kIG1heSByZXR1cm4gdGhlIG9sZCB2YWx1ZS5cbiAqXG4gKiBUaGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCBjYWxscyB0byBgc2V0U3RhdGVgIHdpbGwgcnVuIHN5bmNocm9ub3VzbHksXG4gKiBhcyB0aGV5IG1heSBldmVudHVhbGx5IGJlIGJhdGNoZWQgdG9nZXRoZXIuICBZb3UgY2FuIHByb3ZpZGUgYW4gb3B0aW9uYWxcbiAqIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB3aGVuIHRoZSBjYWxsIHRvIHNldFN0YXRlIGlzIGFjdHVhbGx5XG4gKiBjb21wbGV0ZWQuXG4gKlxuICogV2hlbiBhIGZ1bmN0aW9uIGlzIHByb3ZpZGVkIHRvIHNldFN0YXRlLCBpdCB3aWxsIGJlIGNhbGxlZCBhdCBzb21lIHBvaW50IGluXG4gKiB0aGUgZnV0dXJlIChub3Qgc3luY2hyb25vdXNseSkuIEl0IHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIHVwIHRvIGRhdGVcbiAqIGNvbXBvbmVudCBhcmd1bWVudHMgKHN0YXRlLCBwcm9wcywgY29udGV4dCkuIFRoZXNlIHZhbHVlcyBjYW4gYmUgZGlmZmVyZW50XG4gKiBmcm9tIHRoaXMuKiBiZWNhdXNlIHlvdXIgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBhZnRlciByZWNlaXZlUHJvcHMgYnV0IGJlZm9yZVxuICogc2hvdWxkQ29tcG9uZW50VXBkYXRlLCBhbmQgdGhpcyBuZXcgc3RhdGUsIHByb3BzLCBhbmQgY29udGV4dCB3aWxsIG5vdCB5ZXQgYmVcbiAqIGFzc2lnbmVkIHRvIHRoaXMuXG4gKlxuICogQHBhcmFtIHtvYmplY3R8ZnVuY3Rpb259IHBhcnRpYWxTdGF0ZSBOZXh0IHBhcnRpYWwgc3RhdGUgb3IgZnVuY3Rpb24gdG9cbiAqICAgICAgICBwcm9kdWNlIG5leHQgcGFydGlhbCBzdGF0ZSB0byBiZSBtZXJnZWQgd2l0aCBjdXJyZW50IHN0YXRlLlxuICogQHBhcmFtIHs/ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCBhZnRlciBzdGF0ZSBpcyB1cGRhdGVkLlxuICogQGZpbmFsXG4gKiBAcHJvdGVjdGVkXG4gKi9cblxuQ29tcG9uZW50LnByb3RvdHlwZS5zZXRTdGF0ZSA9IGZ1bmN0aW9uIChwYXJ0aWFsU3RhdGUsIGNhbGxiYWNrKSB7XG4gIGlmICghKHR5cGVvZiBwYXJ0aWFsU3RhdGUgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBwYXJ0aWFsU3RhdGUgPT09ICdmdW5jdGlvbicgfHwgcGFydGlhbFN0YXRlID09IG51bGwpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwic2V0U3RhdGUoLi4uKTogdGFrZXMgYW4gb2JqZWN0IG9mIHN0YXRlIHZhcmlhYmxlcyB0byB1cGRhdGUgb3IgYSBmdW5jdGlvbiB3aGljaCByZXR1cm5zIGFuIG9iamVjdCBvZiBzdGF0ZSB2YXJpYWJsZXMuXCIgKTtcbiAgICB9XG4gIH1cblxuICB0aGlzLnVwZGF0ZXIuZW5xdWV1ZVNldFN0YXRlKHRoaXMsIHBhcnRpYWxTdGF0ZSwgY2FsbGJhY2ssICdzZXRTdGF0ZScpO1xufTtcbi8qKlxuICogRm9yY2VzIGFuIHVwZGF0ZS4gVGhpcyBzaG91bGQgb25seSBiZSBpbnZva2VkIHdoZW4gaXQgaXMga25vd24gd2l0aFxuICogY2VydGFpbnR5IHRoYXQgd2UgYXJlICoqbm90KiogaW4gYSBET00gdHJhbnNhY3Rpb24uXG4gKlxuICogWW91IG1heSB3YW50IHRvIGNhbGwgdGhpcyB3aGVuIHlvdSBrbm93IHRoYXQgc29tZSBkZWVwZXIgYXNwZWN0IG9mIHRoZVxuICogY29tcG9uZW50J3Mgc3RhdGUgaGFzIGNoYW5nZWQgYnV0IGBzZXRTdGF0ZWAgd2FzIG5vdCBjYWxsZWQuXG4gKlxuICogVGhpcyB3aWxsIG5vdCBpbnZva2UgYHNob3VsZENvbXBvbmVudFVwZGF0ZWAsIGJ1dCBpdCB3aWxsIGludm9rZVxuICogYGNvbXBvbmVudFdpbGxVcGRhdGVgIGFuZCBgY29tcG9uZW50RGlkVXBkYXRlYC5cbiAqXG4gKiBAcGFyYW0gez9mdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGVkIGFmdGVyIHVwZGF0ZSBpcyBjb21wbGV0ZS5cbiAqIEBmaW5hbFxuICogQHByb3RlY3RlZFxuICovXG5cblxuQ29tcG9uZW50LnByb3RvdHlwZS5mb3JjZVVwZGF0ZSA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICB0aGlzLnVwZGF0ZXIuZW5xdWV1ZUZvcmNlVXBkYXRlKHRoaXMsIGNhbGxiYWNrLCAnZm9yY2VVcGRhdGUnKTtcbn07XG4vKipcbiAqIERlcHJlY2F0ZWQgQVBJcy4gVGhlc2UgQVBJcyB1c2VkIHRvIGV4aXN0IG9uIGNsYXNzaWMgUmVhY3QgY2xhc3NlcyBidXQgc2luY2VcbiAqIHdlIHdvdWxkIGxpa2UgdG8gZGVwcmVjYXRlIHRoZW0sIHdlJ3JlIG5vdCBnb2luZyB0byBtb3ZlIHRoZW0gb3ZlciB0byB0aGlzXG4gKiBtb2Rlcm4gYmFzZSBjbGFzcy4gSW5zdGVhZCwgd2UgZGVmaW5lIGEgZ2V0dGVyIHRoYXQgd2FybnMgaWYgaXQncyBhY2Nlc3NlZC5cbiAqL1xuXG5cbntcbiAgdmFyIGRlcHJlY2F0ZWRBUElzID0ge1xuICAgIGlzTW91bnRlZDogWydpc01vdW50ZWQnLCAnSW5zdGVhZCwgbWFrZSBzdXJlIHRvIGNsZWFuIHVwIHN1YnNjcmlwdGlvbnMgYW5kIHBlbmRpbmcgcmVxdWVzdHMgaW4gJyArICdjb21wb25lbnRXaWxsVW5tb3VudCB0byBwcmV2ZW50IG1lbW9yeSBsZWFrcy4nXSxcbiAgICByZXBsYWNlU3RhdGU6IFsncmVwbGFjZVN0YXRlJywgJ1JlZmFjdG9yIHlvdXIgY29kZSB0byB1c2Ugc2V0U3RhdGUgaW5zdGVhZCAoc2VlICcgKyAnaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8zMjM2KS4nXVxuICB9O1xuXG4gIHZhciBkZWZpbmVEZXByZWNhdGlvbldhcm5pbmcgPSBmdW5jdGlvbiAobWV0aG9kTmFtZSwgaW5mbykge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb21wb25lbnQucHJvdG90eXBlLCBtZXRob2ROYW1lLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgd2FybignJXMoLi4uKSBpcyBkZXByZWNhdGVkIGluIHBsYWluIEphdmFTY3JpcHQgUmVhY3QgY2xhc3Nlcy4gJXMnLCBpbmZvWzBdLCBpbmZvWzFdKTtcblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIGZvciAodmFyIGZuTmFtZSBpbiBkZXByZWNhdGVkQVBJcykge1xuICAgIGlmIChkZXByZWNhdGVkQVBJcy5oYXNPd25Qcm9wZXJ0eShmbk5hbWUpKSB7XG4gICAgICBkZWZpbmVEZXByZWNhdGlvbldhcm5pbmcoZm5OYW1lLCBkZXByZWNhdGVkQVBJc1tmbk5hbWVdKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gQ29tcG9uZW50RHVtbXkoKSB7fVxuXG5Db21wb25lbnREdW1teS5wcm90b3R5cGUgPSBDb21wb25lbnQucHJvdG90eXBlO1xuLyoqXG4gKiBDb252ZW5pZW5jZSBjb21wb25lbnQgd2l0aCBkZWZhdWx0IHNoYWxsb3cgZXF1YWxpdHkgY2hlY2sgZm9yIHNDVS5cbiAqL1xuXG5mdW5jdGlvbiBQdXJlQ29tcG9uZW50KHByb3BzLCBjb250ZXh0LCB1cGRhdGVyKSB7XG4gIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgdGhpcy5jb250ZXh0ID0gY29udGV4dDsgLy8gSWYgYSBjb21wb25lbnQgaGFzIHN0cmluZyByZWZzLCB3ZSB3aWxsIGFzc2lnbiBhIGRpZmZlcmVudCBvYmplY3QgbGF0ZXIuXG5cbiAgdGhpcy5yZWZzID0gZW1wdHlPYmplY3Q7XG4gIHRoaXMudXBkYXRlciA9IHVwZGF0ZXIgfHwgUmVhY3ROb29wVXBkYXRlUXVldWU7XG59XG5cbnZhciBwdXJlQ29tcG9uZW50UHJvdG90eXBlID0gUHVyZUNvbXBvbmVudC5wcm90b3R5cGUgPSBuZXcgQ29tcG9uZW50RHVtbXkoKTtcbnB1cmVDb21wb25lbnRQcm90b3R5cGUuY29uc3RydWN0b3IgPSBQdXJlQ29tcG9uZW50OyAvLyBBdm9pZCBhbiBleHRyYSBwcm90b3R5cGUganVtcCBmb3IgdGhlc2UgbWV0aG9kcy5cblxuX2Fzc2lnbihwdXJlQ29tcG9uZW50UHJvdG90eXBlLCBDb21wb25lbnQucHJvdG90eXBlKTtcblxucHVyZUNvbXBvbmVudFByb3RvdHlwZS5pc1B1cmVSZWFjdENvbXBvbmVudCA9IHRydWU7XG5cbi8vIGFuIGltbXV0YWJsZSBvYmplY3Qgd2l0aCBhIHNpbmdsZSBtdXRhYmxlIHZhbHVlXG5mdW5jdGlvbiBjcmVhdGVSZWYoKSB7XG4gIHZhciByZWZPYmplY3QgPSB7XG4gICAgY3VycmVudDogbnVsbFxuICB9O1xuXG4gIHtcbiAgICBPYmplY3Quc2VhbChyZWZPYmplY3QpO1xuICB9XG5cbiAgcmV0dXJuIHJlZk9iamVjdDtcbn1cblxuZnVuY3Rpb24gZ2V0V3JhcHBlZE5hbWUob3V0ZXJUeXBlLCBpbm5lclR5cGUsIHdyYXBwZXJOYW1lKSB7XG4gIHZhciBmdW5jdGlvbk5hbWUgPSBpbm5lclR5cGUuZGlzcGxheU5hbWUgfHwgaW5uZXJUeXBlLm5hbWUgfHwgJyc7XG4gIHJldHVybiBvdXRlclR5cGUuZGlzcGxheU5hbWUgfHwgKGZ1bmN0aW9uTmFtZSAhPT0gJycgPyB3cmFwcGVyTmFtZSArIFwiKFwiICsgZnVuY3Rpb25OYW1lICsgXCIpXCIgOiB3cmFwcGVyTmFtZSk7XG59XG5cbmZ1bmN0aW9uIGdldENvbnRleHROYW1lKHR5cGUpIHtcbiAgcmV0dXJuIHR5cGUuZGlzcGxheU5hbWUgfHwgJ0NvbnRleHQnO1xufVxuXG5mdW5jdGlvbiBnZXRDb21wb25lbnROYW1lKHR5cGUpIHtcbiAgaWYgKHR5cGUgPT0gbnVsbCkge1xuICAgIC8vIEhvc3Qgcm9vdCwgdGV4dCBub2RlIG9yIGp1c3QgaW52YWxpZCB0eXBlLlxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAge1xuICAgIGlmICh0eXBlb2YgdHlwZS50YWcgPT09ICdudW1iZXInKSB7XG4gICAgICBlcnJvcignUmVjZWl2ZWQgYW4gdW5leHBlY3RlZCBvYmplY3QgaW4gZ2V0Q29tcG9uZW50TmFtZSgpLiAnICsgJ1RoaXMgaXMgbGlrZWx5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdHlwZS5kaXNwbGF5TmFtZSB8fCB0eXBlLm5hbWUgfHwgbnVsbDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdHlwZTtcbiAgfVxuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgZXhwb3J0cy5GcmFnbWVudDpcbiAgICAgIHJldHVybiAnRnJhZ21lbnQnO1xuXG4gICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgIHJldHVybiAnUG9ydGFsJztcblxuICAgIGNhc2UgZXhwb3J0cy5Qcm9maWxlcjpcbiAgICAgIHJldHVybiAnUHJvZmlsZXInO1xuXG4gICAgY2FzZSBleHBvcnRzLlN0cmljdE1vZGU6XG4gICAgICByZXR1cm4gJ1N0cmljdE1vZGUnO1xuXG4gICAgY2FzZSBleHBvcnRzLlN1c3BlbnNlOlxuICAgICAgcmV0dXJuICdTdXNwZW5zZSc7XG5cbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgIHJldHVybiAnU3VzcGVuc2VMaXN0JztcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICBzd2l0Y2ggKHR5cGUuJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfQ09OVEVYVF9UWVBFOlxuICAgICAgICB2YXIgY29udGV4dCA9IHR5cGU7XG4gICAgICAgIHJldHVybiBnZXRDb250ZXh0TmFtZShjb250ZXh0KSArICcuQ29uc3VtZXInO1xuXG4gICAgICBjYXNlIFJFQUNUX1BST1ZJREVSX1RZUEU6XG4gICAgICAgIHZhciBwcm92aWRlciA9IHR5cGU7XG4gICAgICAgIHJldHVybiBnZXRDb250ZXh0TmFtZShwcm92aWRlci5fY29udGV4dCkgKyAnLlByb3ZpZGVyJztcblxuICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICByZXR1cm4gZ2V0V3JhcHBlZE5hbWUodHlwZSwgdHlwZS5yZW5kZXIsICdGb3J3YXJkUmVmJyk7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZSh0eXBlLnR5cGUpO1xuXG4gICAgICBjYXNlIFJFQUNUX0JMT0NLX1RZUEU6XG4gICAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lKHR5cGUuX3JlbmRlcik7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIGxhenlDb21wb25lbnQgPSB0eXBlO1xuICAgICAgICAgIHZhciBwYXlsb2FkID0gbGF6eUNvbXBvbmVudC5fcGF5bG9hZDtcbiAgICAgICAgICB2YXIgaW5pdCA9IGxhenlDb21wb25lbnQuX2luaXQ7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWUoaW5pdChwYXlsb2FkKSk7XG4gICAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgUkVTRVJWRURfUFJPUFMgPSB7XG4gIGtleTogdHJ1ZSxcbiAgcmVmOiB0cnVlLFxuICBfX3NlbGY6IHRydWUsXG4gIF9fc291cmNlOiB0cnVlXG59O1xudmFyIHNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duLCBzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93biwgZGlkV2FybkFib3V0U3RyaW5nUmVmcztcblxue1xuICBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzID0ge307XG59XG5cbmZ1bmN0aW9uIGhhc1ZhbGlkUmVmKGNvbmZpZykge1xuICB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCAncmVmJykpIHtcbiAgICAgIHZhciBnZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGNvbmZpZywgJ3JlZicpLmdldDtcblxuICAgICAgaWYgKGdldHRlciAmJiBnZXR0ZXIuaXNSZWFjdFdhcm5pbmcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb25maWcucmVmICE9PSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGhhc1ZhbGlkS2V5KGNvbmZpZykge1xuICB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCAna2V5JykpIHtcbiAgICAgIHZhciBnZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGNvbmZpZywgJ2tleScpLmdldDtcblxuICAgICAgaWYgKGdldHRlciAmJiBnZXR0ZXIuaXNSZWFjdFdhcm5pbmcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb25maWcua2V5ICE9PSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGRlZmluZUtleVByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSkge1xuICB2YXIgd2FybkFib3V0QWNjZXNzaW5nS2V5ID0gZnVuY3Rpb24gKCkge1xuICAgIHtcbiAgICAgIGlmICghc3BlY2lhbFByb3BLZXlXYXJuaW5nU2hvd24pIHtcbiAgICAgICAgc3BlY2lhbFByb3BLZXlXYXJuaW5nU2hvd24gPSB0cnVlO1xuXG4gICAgICAgIGVycm9yKCclczogYGtleWAgaXMgbm90IGEgcHJvcC4gVHJ5aW5nIHRvIGFjY2VzcyBpdCB3aWxsIHJlc3VsdCAnICsgJ2luIGB1bmRlZmluZWRgIGJlaW5nIHJldHVybmVkLiBJZiB5b3UgbmVlZCB0byBhY2Nlc3MgdGhlIHNhbWUgJyArICd2YWx1ZSB3aXRoaW4gdGhlIGNoaWxkIGNvbXBvbmVudCwgeW91IHNob3VsZCBwYXNzIGl0IGFzIGEgZGlmZmVyZW50ICcgKyAncHJvcC4gKGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9zcGVjaWFsLXByb3BzKScsIGRpc3BsYXlOYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgd2FybkFib3V0QWNjZXNzaW5nS2V5LmlzUmVhY3RXYXJuaW5nID0gdHJ1ZTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3BzLCAna2V5Jywge1xuICAgIGdldDogd2FybkFib3V0QWNjZXNzaW5nS2V5LFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KTtcbn1cblxuZnVuY3Rpb24gZGVmaW5lUmVmUHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKSB7XG4gIHZhciB3YXJuQWJvdXRBY2Nlc3NpbmdSZWYgPSBmdW5jdGlvbiAoKSB7XG4gICAge1xuICAgICAgaWYgKCFzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93bikge1xuICAgICAgICBzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93biA9IHRydWU7XG5cbiAgICAgICAgZXJyb3IoJyVzOiBgcmVmYCBpcyBub3QgYSBwcm9wLiBUcnlpbmcgdG8gYWNjZXNzIGl0IHdpbGwgcmVzdWx0ICcgKyAnaW4gYHVuZGVmaW5lZGAgYmVpbmcgcmV0dXJuZWQuIElmIHlvdSBuZWVkIHRvIGFjY2VzcyB0aGUgc2FtZSAnICsgJ3ZhbHVlIHdpdGhpbiB0aGUgY2hpbGQgY29tcG9uZW50LCB5b3Ugc2hvdWxkIHBhc3MgaXQgYXMgYSBkaWZmZXJlbnQgJyArICdwcm9wLiAoaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3NwZWNpYWwtcHJvcHMpJywgZGlzcGxheU5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICB3YXJuQWJvdXRBY2Nlc3NpbmdSZWYuaXNSZWFjdFdhcm5pbmcgPSB0cnVlO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvcHMsICdyZWYnLCB7XG4gICAgZ2V0OiB3YXJuQWJvdXRBY2Nlc3NpbmdSZWYsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pO1xufVxuXG5mdW5jdGlvbiB3YXJuSWZTdHJpbmdSZWZDYW5ub3RCZUF1dG9Db252ZXJ0ZWQoY29uZmlnKSB7XG4gIHtcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5yZWYgPT09ICdzdHJpbmcnICYmIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQgJiYgY29uZmlnLl9fc2VsZiAmJiBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LnN0YXRlTm9kZSAhPT0gY29uZmlnLl9fc2VsZikge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQudHlwZSk7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0U3RyaW5nUmVmc1tjb21wb25lbnROYW1lXSkge1xuICAgICAgICBlcnJvcignQ29tcG9uZW50IFwiJXNcIiBjb250YWlucyB0aGUgc3RyaW5nIHJlZiBcIiVzXCIuICcgKyAnU3VwcG9ydCBmb3Igc3RyaW5nIHJlZnMgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIG1ham9yIHJlbGVhc2UuICcgKyAnVGhpcyBjYXNlIGNhbm5vdCBiZSBhdXRvbWF0aWNhbGx5IGNvbnZlcnRlZCB0byBhbiBhcnJvdyBmdW5jdGlvbi4gJyArICdXZSBhc2sgeW91IHRvIG1hbnVhbGx5IGZpeCB0aGlzIGNhc2UgYnkgdXNpbmcgdXNlUmVmKCkgb3IgY3JlYXRlUmVmKCkgaW5zdGVhZC4gJyArICdMZWFybiBtb3JlIGFib3V0IHVzaW5nIHJlZnMgc2FmZWx5IGhlcmU6ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3N0cmljdC1tb2RlLXN0cmluZy1yZWYnLCBjb21wb25lbnROYW1lLCBjb25maWcucmVmKTtcblxuICAgICAgICBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzW2NvbXBvbmVudE5hbWVdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbi8qKlxuICogRmFjdG9yeSBtZXRob2QgdG8gY3JlYXRlIGEgbmV3IFJlYWN0IGVsZW1lbnQuIFRoaXMgbm8gbG9uZ2VyIGFkaGVyZXMgdG9cbiAqIHRoZSBjbGFzcyBwYXR0ZXJuLCBzbyBkbyBub3QgdXNlIG5ldyB0byBjYWxsIGl0LiBBbHNvLCBpbnN0YW5jZW9mIGNoZWNrXG4gKiB3aWxsIG5vdCB3b3JrLiBJbnN0ZWFkIHRlc3QgJCR0eXBlb2YgZmllbGQgYWdhaW5zdCBTeW1ib2wuZm9yKCdyZWFjdC5lbGVtZW50JykgdG8gY2hlY2tcbiAqIGlmIHNvbWV0aGluZyBpcyBhIFJlYWN0IEVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHsqfSB0eXBlXG4gKiBAcGFyYW0geyp9IHByb3BzXG4gKiBAcGFyYW0geyp9IGtleVxuICogQHBhcmFtIHtzdHJpbmd8b2JqZWN0fSByZWZcbiAqIEBwYXJhbSB7Kn0gb3duZXJcbiAqIEBwYXJhbSB7Kn0gc2VsZiBBICp0ZW1wb3JhcnkqIGhlbHBlciB0byBkZXRlY3QgcGxhY2VzIHdoZXJlIGB0aGlzYCBpc1xuICogZGlmZmVyZW50IGZyb20gdGhlIGBvd25lcmAgd2hlbiBSZWFjdC5jcmVhdGVFbGVtZW50IGlzIGNhbGxlZCwgc28gdGhhdCB3ZVxuICogY2FuIHdhcm4uIFdlIHdhbnQgdG8gZ2V0IHJpZCBvZiBvd25lciBhbmQgcmVwbGFjZSBzdHJpbmcgYHJlZmBzIHdpdGggYXJyb3dcbiAqIGZ1bmN0aW9ucywgYW5kIGFzIGxvbmcgYXMgYHRoaXNgIGFuZCBvd25lciBhcmUgdGhlIHNhbWUsIHRoZXJlIHdpbGwgYmUgbm9cbiAqIGNoYW5nZSBpbiBiZWhhdmlvci5cbiAqIEBwYXJhbSB7Kn0gc291cmNlIEFuIGFubm90YXRpb24gb2JqZWN0IChhZGRlZCBieSBhIHRyYW5zcGlsZXIgb3Igb3RoZXJ3aXNlKVxuICogaW5kaWNhdGluZyBmaWxlbmFtZSwgbGluZSBudW1iZXIsIGFuZC9vciBvdGhlciBpbmZvcm1hdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG5cblxudmFyIFJlYWN0RWxlbWVudCA9IGZ1bmN0aW9uICh0eXBlLCBrZXksIHJlZiwgc2VsZiwgc291cmNlLCBvd25lciwgcHJvcHMpIHtcbiAgdmFyIGVsZW1lbnQgPSB7XG4gICAgLy8gVGhpcyB0YWcgYWxsb3dzIHVzIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IHRoaXMgYXMgYSBSZWFjdCBFbGVtZW50XG4gICAgJCR0eXBlb2Y6IFJFQUNUX0VMRU1FTlRfVFlQRSxcbiAgICAvLyBCdWlsdC1pbiBwcm9wZXJ0aWVzIHRoYXQgYmVsb25nIG9uIHRoZSBlbGVtZW50XG4gICAgdHlwZTogdHlwZSxcbiAgICBrZXk6IGtleSxcbiAgICByZWY6IHJlZixcbiAgICBwcm9wczogcHJvcHMsXG4gICAgLy8gUmVjb3JkIHRoZSBjb21wb25lbnQgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIHRoaXMgZWxlbWVudC5cbiAgICBfb3duZXI6IG93bmVyXG4gIH07XG5cbiAge1xuICAgIC8vIFRoZSB2YWxpZGF0aW9uIGZsYWcgaXMgY3VycmVudGx5IG11dGF0aXZlLiBXZSBwdXQgaXQgb25cbiAgICAvLyBhbiBleHRlcm5hbCBiYWNraW5nIHN0b3JlIHNvIHRoYXQgd2UgY2FuIGZyZWV6ZSB0aGUgd2hvbGUgb2JqZWN0LlxuICAgIC8vIFRoaXMgY2FuIGJlIHJlcGxhY2VkIHdpdGggYSBXZWFrTWFwIG9uY2UgdGhleSBhcmUgaW1wbGVtZW50ZWQgaW5cbiAgICAvLyBjb21tb25seSB1c2VkIGRldmVsb3BtZW50IGVudmlyb25tZW50cy5cbiAgICBlbGVtZW50Ll9zdG9yZSA9IHt9OyAvLyBUbyBtYWtlIGNvbXBhcmluZyBSZWFjdEVsZW1lbnRzIGVhc2llciBmb3IgdGVzdGluZyBwdXJwb3Nlcywgd2UgbWFrZVxuICAgIC8vIHRoZSB2YWxpZGF0aW9uIGZsYWcgbm9uLWVudW1lcmFibGUgKHdoZXJlIHBvc3NpYmxlLCB3aGljaCBzaG91bGRcbiAgICAvLyBpbmNsdWRlIGV2ZXJ5IGVudmlyb25tZW50IHdlIHJ1biB0ZXN0cyBpbiksIHNvIHRoZSB0ZXN0IGZyYW1ld29ya1xuICAgIC8vIGlnbm9yZXMgaXQuXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudC5fc3RvcmUsICd2YWxpZGF0ZWQnLCB7XG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIHZhbHVlOiBmYWxzZVxuICAgIH0pOyAvLyBzZWxmIGFuZCBzb3VyY2UgYXJlIERFViBvbmx5IHByb3BlcnRpZXMuXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudCwgJ19zZWxmJywge1xuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgdmFsdWU6IHNlbGZcbiAgICB9KTsgLy8gVHdvIGVsZW1lbnRzIGNyZWF0ZWQgaW4gdHdvIGRpZmZlcmVudCBwbGFjZXMgc2hvdWxkIGJlIGNvbnNpZGVyZWRcbiAgICAvLyBlcXVhbCBmb3IgdGVzdGluZyBwdXJwb3NlcyBhbmQgdGhlcmVmb3JlIHdlIGhpZGUgaXQgZnJvbSBlbnVtZXJhdGlvbi5cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50LCAnX3NvdXJjZScsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIHZhbHVlOiBzb3VyY2VcbiAgICB9KTtcblxuICAgIGlmIChPYmplY3QuZnJlZXplKSB7XG4gICAgICBPYmplY3QuZnJlZXplKGVsZW1lbnQucHJvcHMpO1xuICAgICAgT2JqZWN0LmZyZWV6ZShlbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZWxlbWVudDtcbn07XG4vKipcbiAqIENyZWF0ZSBhbmQgcmV0dXJuIGEgbmV3IFJlYWN0RWxlbWVudCBvZiB0aGUgZ2l2ZW4gdHlwZS5cbiAqIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjY3JlYXRlZWxlbWVudFxuICovXG5cbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQodHlwZSwgY29uZmlnLCBjaGlsZHJlbikge1xuICB2YXIgcHJvcE5hbWU7IC8vIFJlc2VydmVkIG5hbWVzIGFyZSBleHRyYWN0ZWRcblxuICB2YXIgcHJvcHMgPSB7fTtcbiAgdmFyIGtleSA9IG51bGw7XG4gIHZhciByZWYgPSBudWxsO1xuICB2YXIgc2VsZiA9IG51bGw7XG4gIHZhciBzb3VyY2UgPSBudWxsO1xuXG4gIGlmIChjb25maWcgIT0gbnVsbCkge1xuICAgIGlmIChoYXNWYWxpZFJlZihjb25maWcpKSB7XG4gICAgICByZWYgPSBjb25maWcucmVmO1xuXG4gICAgICB7XG4gICAgICAgIHdhcm5JZlN0cmluZ1JlZkNhbm5vdEJlQXV0b0NvbnZlcnRlZChjb25maWcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChoYXNWYWxpZEtleShjb25maWcpKSB7XG4gICAgICBrZXkgPSAnJyArIGNvbmZpZy5rZXk7XG4gICAgfVxuXG4gICAgc2VsZiA9IGNvbmZpZy5fX3NlbGYgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBjb25maWcuX19zZWxmO1xuICAgIHNvdXJjZSA9IGNvbmZpZy5fX3NvdXJjZSA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGNvbmZpZy5fX3NvdXJjZTsgLy8gUmVtYWluaW5nIHByb3BlcnRpZXMgYXJlIGFkZGVkIHRvIGEgbmV3IHByb3BzIG9iamVjdFxuXG4gICAgZm9yIChwcm9wTmFtZSBpbiBjb25maWcpIHtcbiAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgcHJvcE5hbWUpICYmICFSRVNFUlZFRF9QUk9QUy5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSkpIHtcbiAgICAgICAgcHJvcHNbcHJvcE5hbWVdID0gY29uZmlnW3Byb3BOYW1lXTtcbiAgICAgIH1cbiAgICB9XG4gIH0gLy8gQ2hpbGRyZW4gY2FuIGJlIG1vcmUgdGhhbiBvbmUgYXJndW1lbnQsIGFuZCB0aG9zZSBhcmUgdHJhbnNmZXJyZWQgb250b1xuICAvLyB0aGUgbmV3bHkgYWxsb2NhdGVkIHByb3BzIG9iamVjdC5cblxuXG4gIHZhciBjaGlsZHJlbkxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGggLSAyO1xuXG4gIGlmIChjaGlsZHJlbkxlbmd0aCA9PT0gMSkge1xuICAgIHByb3BzLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gIH0gZWxzZSBpZiAoY2hpbGRyZW5MZW5ndGggPiAxKSB7XG4gICAgdmFyIGNoaWxkQXJyYXkgPSBBcnJheShjaGlsZHJlbkxlbmd0aCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuTGVuZ3RoOyBpKyspIHtcbiAgICAgIGNoaWxkQXJyYXlbaV0gPSBhcmd1bWVudHNbaSArIDJdO1xuICAgIH1cblxuICAgIHtcbiAgICAgIGlmIChPYmplY3QuZnJlZXplKSB7XG4gICAgICAgIE9iamVjdC5mcmVlemUoY2hpbGRBcnJheSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHJvcHMuY2hpbGRyZW4gPSBjaGlsZEFycmF5O1xuICB9IC8vIFJlc29sdmUgZGVmYXVsdCBwcm9wc1xuXG5cbiAgaWYgKHR5cGUgJiYgdHlwZS5kZWZhdWx0UHJvcHMpIHtcbiAgICB2YXIgZGVmYXVsdFByb3BzID0gdHlwZS5kZWZhdWx0UHJvcHM7XG5cbiAgICBmb3IgKHByb3BOYW1lIGluIGRlZmF1bHRQcm9wcykge1xuICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHByb3BzW3Byb3BOYW1lXSA9IGRlZmF1bHRQcm9wc1twcm9wTmFtZV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAge1xuICAgIGlmIChrZXkgfHwgcmVmKSB7XG4gICAgICB2YXIgZGlzcGxheU5hbWUgPSB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJyA/IHR5cGUuZGlzcGxheU5hbWUgfHwgdHlwZS5uYW1lIHx8ICdVbmtub3duJyA6IHR5cGU7XG5cbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgZGVmaW5lS2V5UHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlZikge1xuICAgICAgICBkZWZpbmVSZWZQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBSZWFjdEVsZW1lbnQodHlwZSwga2V5LCByZWYsIHNlbGYsIHNvdXJjZSwgUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCwgcHJvcHMpO1xufVxuZnVuY3Rpb24gY2xvbmVBbmRSZXBsYWNlS2V5KG9sZEVsZW1lbnQsIG5ld0tleSkge1xuICB2YXIgbmV3RWxlbWVudCA9IFJlYWN0RWxlbWVudChvbGRFbGVtZW50LnR5cGUsIG5ld0tleSwgb2xkRWxlbWVudC5yZWYsIG9sZEVsZW1lbnQuX3NlbGYsIG9sZEVsZW1lbnQuX3NvdXJjZSwgb2xkRWxlbWVudC5fb3duZXIsIG9sZEVsZW1lbnQucHJvcHMpO1xuICByZXR1cm4gbmV3RWxlbWVudDtcbn1cbi8qKlxuICogQ2xvbmUgYW5kIHJldHVybiBhIG5ldyBSZWFjdEVsZW1lbnQgdXNpbmcgZWxlbWVudCBhcyB0aGUgc3RhcnRpbmcgcG9pbnQuXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI2Nsb25lZWxlbWVudFxuICovXG5cbmZ1bmN0aW9uIGNsb25lRWxlbWVudChlbGVtZW50LCBjb25maWcsIGNoaWxkcmVuKSB7XG4gIGlmICghIShlbGVtZW50ID09PSBudWxsIHx8IGVsZW1lbnQgPT09IHVuZGVmaW5lZCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJSZWFjdC5jbG9uZUVsZW1lbnQoLi4uKTogVGhlIGFyZ3VtZW50IG11c3QgYmUgYSBSZWFjdCBlbGVtZW50LCBidXQgeW91IHBhc3NlZCBcIiArIGVsZW1lbnQgKyBcIi5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHZhciBwcm9wTmFtZTsgLy8gT3JpZ2luYWwgcHJvcHMgYXJlIGNvcGllZFxuXG4gIHZhciBwcm9wcyA9IF9hc3NpZ24oe30sIGVsZW1lbnQucHJvcHMpOyAvLyBSZXNlcnZlZCBuYW1lcyBhcmUgZXh0cmFjdGVkXG5cblxuICB2YXIga2V5ID0gZWxlbWVudC5rZXk7XG4gIHZhciByZWYgPSBlbGVtZW50LnJlZjsgLy8gU2VsZiBpcyBwcmVzZXJ2ZWQgc2luY2UgdGhlIG93bmVyIGlzIHByZXNlcnZlZC5cblxuICB2YXIgc2VsZiA9IGVsZW1lbnQuX3NlbGY7IC8vIFNvdXJjZSBpcyBwcmVzZXJ2ZWQgc2luY2UgY2xvbmVFbGVtZW50IGlzIHVubGlrZWx5IHRvIGJlIHRhcmdldGVkIGJ5IGFcbiAgLy8gdHJhbnNwaWxlciwgYW5kIHRoZSBvcmlnaW5hbCBzb3VyY2UgaXMgcHJvYmFibHkgYSBiZXR0ZXIgaW5kaWNhdG9yIG9mIHRoZVxuICAvLyB0cnVlIG93bmVyLlxuXG4gIHZhciBzb3VyY2UgPSBlbGVtZW50Ll9zb3VyY2U7IC8vIE93bmVyIHdpbGwgYmUgcHJlc2VydmVkLCB1bmxlc3MgcmVmIGlzIG92ZXJyaWRkZW5cblxuICB2YXIgb3duZXIgPSBlbGVtZW50Ll9vd25lcjtcblxuICBpZiAoY29uZmlnICE9IG51bGwpIHtcbiAgICBpZiAoaGFzVmFsaWRSZWYoY29uZmlnKSkge1xuICAgICAgLy8gU2lsZW50bHkgc3RlYWwgdGhlIHJlZiBmcm9tIHRoZSBwYXJlbnQuXG4gICAgICByZWYgPSBjb25maWcucmVmO1xuICAgICAgb3duZXIgPSBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50O1xuICAgIH1cblxuICAgIGlmIChoYXNWYWxpZEtleShjb25maWcpKSB7XG4gICAgICBrZXkgPSAnJyArIGNvbmZpZy5rZXk7XG4gICAgfSAvLyBSZW1haW5pbmcgcHJvcGVydGllcyBvdmVycmlkZSBleGlzdGluZyBwcm9wc1xuXG5cbiAgICB2YXIgZGVmYXVsdFByb3BzO1xuXG4gICAgaWYgKGVsZW1lbnQudHlwZSAmJiBlbGVtZW50LnR5cGUuZGVmYXVsdFByb3BzKSB7XG4gICAgICBkZWZhdWx0UHJvcHMgPSBlbGVtZW50LnR5cGUuZGVmYXVsdFByb3BzO1xuICAgIH1cblxuICAgIGZvciAocHJvcE5hbWUgaW4gY29uZmlnKSB7XG4gICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsIHByb3BOYW1lKSAmJiAhUkVTRVJWRURfUFJPUFMuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSB7XG4gICAgICAgIGlmIChjb25maWdbcHJvcE5hbWVdID09PSB1bmRlZmluZWQgJiYgZGVmYXVsdFByb3BzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyBSZXNvbHZlIGRlZmF1bHQgcHJvcHNcbiAgICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBkZWZhdWx0UHJvcHNbcHJvcE5hbWVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByb3BzW3Byb3BOYW1lXSA9IGNvbmZpZ1twcm9wTmFtZV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gLy8gQ2hpbGRyZW4gY2FuIGJlIG1vcmUgdGhhbiBvbmUgYXJndW1lbnQsIGFuZCB0aG9zZSBhcmUgdHJhbnNmZXJyZWQgb250b1xuICAvLyB0aGUgbmV3bHkgYWxsb2NhdGVkIHByb3BzIG9iamVjdC5cblxuXG4gIHZhciBjaGlsZHJlbkxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGggLSAyO1xuXG4gIGlmIChjaGlsZHJlbkxlbmd0aCA9PT0gMSkge1xuICAgIHByb3BzLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gIH0gZWxzZSBpZiAoY2hpbGRyZW5MZW5ndGggPiAxKSB7XG4gICAgdmFyIGNoaWxkQXJyYXkgPSBBcnJheShjaGlsZHJlbkxlbmd0aCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuTGVuZ3RoOyBpKyspIHtcbiAgICAgIGNoaWxkQXJyYXlbaV0gPSBhcmd1bWVudHNbaSArIDJdO1xuICAgIH1cblxuICAgIHByb3BzLmNoaWxkcmVuID0gY2hpbGRBcnJheTtcbiAgfVxuXG4gIHJldHVybiBSZWFjdEVsZW1lbnQoZWxlbWVudC50eXBlLCBrZXksIHJlZiwgc2VsZiwgc291cmNlLCBvd25lciwgcHJvcHMpO1xufVxuLyoqXG4gKiBWZXJpZmllcyB0aGUgb2JqZWN0IGlzIGEgUmVhY3RFbGVtZW50LlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNpc3ZhbGlkZWxlbWVudFxuICogQHBhcmFtIHs/b2JqZWN0fSBvYmplY3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgYG9iamVjdGAgaXMgYSBSZWFjdEVsZW1lbnQuXG4gKiBAZmluYWxcbiAqL1xuXG5mdW5jdGlvbiBpc1ZhbGlkRWxlbWVudChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCAmJiBvYmplY3QuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRTtcbn1cblxudmFyIFNFUEFSQVRPUiA9ICcuJztcbnZhciBTVUJTRVBBUkFUT1IgPSAnOic7XG4vKipcbiAqIEVzY2FwZSBhbmQgd3JhcCBrZXkgc28gaXQgaXMgc2FmZSB0byB1c2UgYXMgYSByZWFjdGlkXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSB0byBiZSBlc2NhcGVkLlxuICogQHJldHVybiB7c3RyaW5nfSB0aGUgZXNjYXBlZCBrZXkuXG4gKi9cblxuZnVuY3Rpb24gZXNjYXBlKGtleSkge1xuICB2YXIgZXNjYXBlUmVnZXggPSAvWz06XS9nO1xuICB2YXIgZXNjYXBlckxvb2t1cCA9IHtcbiAgICAnPSc6ICc9MCcsXG4gICAgJzonOiAnPTInXG4gIH07XG4gIHZhciBlc2NhcGVkU3RyaW5nID0ga2V5LnJlcGxhY2UoZXNjYXBlUmVnZXgsIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgIHJldHVybiBlc2NhcGVyTG9va3VwW21hdGNoXTtcbiAgfSk7XG4gIHJldHVybiAnJCcgKyBlc2NhcGVkU3RyaW5nO1xufVxuLyoqXG4gKiBUT0RPOiBUZXN0IHRoYXQgYSBzaW5nbGUgY2hpbGQgYW5kIGFuIGFycmF5IHdpdGggb25lIGl0ZW0gaGF2ZSB0aGUgc2FtZSBrZXlcbiAqIHBhdHRlcm4uXG4gKi9cblxuXG52YXIgZGlkV2FybkFib3V0TWFwcyA9IGZhbHNlO1xudmFyIHVzZXJQcm92aWRlZEtleUVzY2FwZVJlZ2V4ID0gL1xcLysvZztcblxuZnVuY3Rpb24gZXNjYXBlVXNlclByb3ZpZGVkS2V5KHRleHQpIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZSh1c2VyUHJvdmlkZWRLZXlFc2NhcGVSZWdleCwgJyQmLycpO1xufVxuLyoqXG4gKiBHZW5lcmF0ZSBhIGtleSBzdHJpbmcgdGhhdCBpZGVudGlmaWVzIGEgZWxlbWVudCB3aXRoaW4gYSBzZXQuXG4gKlxuICogQHBhcmFtIHsqfSBlbGVtZW50IEEgZWxlbWVudCB0aGF0IGNvdWxkIGNvbnRhaW4gYSBtYW51YWwga2V5LlxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IEluZGV4IHRoYXQgaXMgdXNlZCBpZiBhIG1hbnVhbCBrZXkgaXMgbm90IHByb3ZpZGVkLlxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5cblxuZnVuY3Rpb24gZ2V0RWxlbWVudEtleShlbGVtZW50LCBpbmRleCkge1xuICAvLyBEbyBzb21lIHR5cGVjaGVja2luZyBoZXJlIHNpbmNlIHdlIGNhbGwgdGhpcyBibGluZGx5LiBXZSB3YW50IHRvIGVuc3VyZVxuICAvLyB0aGF0IHdlIGRvbid0IGJsb2NrIHBvdGVudGlhbCBmdXR1cmUgRVMgQVBJcy5cbiAgaWYgKHR5cGVvZiBlbGVtZW50ID09PSAnb2JqZWN0JyAmJiBlbGVtZW50ICE9PSBudWxsICYmIGVsZW1lbnQua2V5ICE9IG51bGwpIHtcbiAgICAvLyBFeHBsaWNpdCBrZXlcbiAgICByZXR1cm4gZXNjYXBlKCcnICsgZWxlbWVudC5rZXkpO1xuICB9IC8vIEltcGxpY2l0IGtleSBkZXRlcm1pbmVkIGJ5IHRoZSBpbmRleCBpbiB0aGUgc2V0XG5cblxuICByZXR1cm4gaW5kZXgudG9TdHJpbmcoMzYpO1xufVxuXG5mdW5jdGlvbiBtYXBJbnRvQXJyYXkoY2hpbGRyZW4sIGFycmF5LCBlc2NhcGVkUHJlZml4LCBuYW1lU29GYXIsIGNhbGxiYWNrKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIGNoaWxkcmVuO1xuXG4gIGlmICh0eXBlID09PSAndW5kZWZpbmVkJyB8fCB0eXBlID09PSAnYm9vbGVhbicpIHtcbiAgICAvLyBBbGwgb2YgdGhlIGFib3ZlIGFyZSBwZXJjZWl2ZWQgYXMgbnVsbC5cbiAgICBjaGlsZHJlbiA9IG51bGw7XG4gIH1cblxuICB2YXIgaW52b2tlQ2FsbGJhY2sgPSBmYWxzZTtcblxuICBpZiAoY2hpbGRyZW4gPT09IG51bGwpIHtcbiAgICBpbnZva2VDYWxsYmFjayA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgaW52b2tlQ2FsbGJhY2sgPSB0cnVlO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgc3dpdGNoIChjaGlsZHJlbi4kJHR5cGVvZikge1xuICAgICAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgICAgICBpbnZva2VDYWxsYmFjayA9IHRydWU7XG4gICAgICAgIH1cblxuICAgIH1cbiAgfVxuXG4gIGlmIChpbnZva2VDYWxsYmFjaykge1xuICAgIHZhciBfY2hpbGQgPSBjaGlsZHJlbjtcbiAgICB2YXIgbWFwcGVkQ2hpbGQgPSBjYWxsYmFjayhfY2hpbGQpOyAvLyBJZiBpdCdzIHRoZSBvbmx5IGNoaWxkLCB0cmVhdCB0aGUgbmFtZSBhcyBpZiBpdCB3YXMgd3JhcHBlZCBpbiBhbiBhcnJheVxuICAgIC8vIHNvIHRoYXQgaXQncyBjb25zaXN0ZW50IGlmIHRoZSBudW1iZXIgb2YgY2hpbGRyZW4gZ3Jvd3M6XG5cbiAgICB2YXIgY2hpbGRLZXkgPSBuYW1lU29GYXIgPT09ICcnID8gU0VQQVJBVE9SICsgZ2V0RWxlbWVudEtleShfY2hpbGQsIDApIDogbmFtZVNvRmFyO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkobWFwcGVkQ2hpbGQpKSB7XG4gICAgICB2YXIgZXNjYXBlZENoaWxkS2V5ID0gJyc7XG5cbiAgICAgIGlmIChjaGlsZEtleSAhPSBudWxsKSB7XG4gICAgICAgIGVzY2FwZWRDaGlsZEtleSA9IGVzY2FwZVVzZXJQcm92aWRlZEtleShjaGlsZEtleSkgKyAnLyc7XG4gICAgICB9XG5cbiAgICAgIG1hcEludG9BcnJheShtYXBwZWRDaGlsZCwgYXJyYXksIGVzY2FwZWRDaGlsZEtleSwgJycsIGZ1bmN0aW9uIChjKSB7XG4gICAgICAgIHJldHVybiBjO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChtYXBwZWRDaGlsZCAhPSBudWxsKSB7XG4gICAgICBpZiAoaXNWYWxpZEVsZW1lbnQobWFwcGVkQ2hpbGQpKSB7XG4gICAgICAgIG1hcHBlZENoaWxkID0gY2xvbmVBbmRSZXBsYWNlS2V5KG1hcHBlZENoaWxkLCAvLyBLZWVwIGJvdGggdGhlIChtYXBwZWQpIGFuZCBvbGQga2V5cyBpZiB0aGV5IGRpZmZlciwganVzdCBhc1xuICAgICAgICAvLyB0cmF2ZXJzZUFsbENoaWxkcmVuIHVzZWQgdG8gZG8gZm9yIG9iamVjdHMgYXMgY2hpbGRyZW5cbiAgICAgICAgZXNjYXBlZFByZWZpeCArICggLy8gJEZsb3dGaXhNZSBGbG93IGluY29ycmVjdGx5IHRoaW5rcyBSZWFjdC5Qb3J0YWwgZG9lc24ndCBoYXZlIGEga2V5XG4gICAgICAgIG1hcHBlZENoaWxkLmtleSAmJiAoIV9jaGlsZCB8fCBfY2hpbGQua2V5ICE9PSBtYXBwZWRDaGlsZC5rZXkpID8gLy8gJEZsb3dGaXhNZSBGbG93IGluY29ycmVjdGx5IHRoaW5rcyBleGlzdGluZyBlbGVtZW50J3Mga2V5IGNhbiBiZSBhIG51bWJlclxuICAgICAgICBlc2NhcGVVc2VyUHJvdmlkZWRLZXkoJycgKyBtYXBwZWRDaGlsZC5rZXkpICsgJy8nIDogJycpICsgY2hpbGRLZXkpO1xuICAgICAgfVxuXG4gICAgICBhcnJheS5wdXNoKG1hcHBlZENoaWxkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIHZhciBjaGlsZDtcbiAgdmFyIG5leHROYW1lO1xuICB2YXIgc3VidHJlZUNvdW50ID0gMDsgLy8gQ291bnQgb2YgY2hpbGRyZW4gZm91bmQgaW4gdGhlIGN1cnJlbnQgc3VidHJlZS5cblxuICB2YXIgbmV4dE5hbWVQcmVmaXggPSBuYW1lU29GYXIgPT09ICcnID8gU0VQQVJBVE9SIDogbmFtZVNvRmFyICsgU1VCU0VQQVJBVE9SO1xuXG4gIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNoaWxkID0gY2hpbGRyZW5baV07XG4gICAgICBuZXh0TmFtZSA9IG5leHROYW1lUHJlZml4ICsgZ2V0RWxlbWVudEtleShjaGlsZCwgaSk7XG4gICAgICBzdWJ0cmVlQ291bnQgKz0gbWFwSW50b0FycmF5KGNoaWxkLCBhcnJheSwgZXNjYXBlZFByZWZpeCwgbmV4dE5hbWUsIGNhbGxiYWNrKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKGNoaWxkcmVuKTtcblxuICAgIGlmICh0eXBlb2YgaXRlcmF0b3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdmFyIGl0ZXJhYmxlQ2hpbGRyZW4gPSBjaGlsZHJlbjtcblxuICAgICAge1xuICAgICAgICAvLyBXYXJuIGFib3V0IHVzaW5nIE1hcHMgYXMgY2hpbGRyZW5cbiAgICAgICAgaWYgKGl0ZXJhdG9yRm4gPT09IGl0ZXJhYmxlQ2hpbGRyZW4uZW50cmllcykge1xuICAgICAgICAgIGlmICghZGlkV2FybkFib3V0TWFwcykge1xuICAgICAgICAgICAgd2FybignVXNpbmcgTWFwcyBhcyBjaGlsZHJlbiBpcyBub3Qgc3VwcG9ydGVkLiAnICsgJ1VzZSBhbiBhcnJheSBvZiBrZXllZCBSZWFjdEVsZW1lbnRzIGluc3RlYWQuJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGlkV2FybkFib3V0TWFwcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKGl0ZXJhYmxlQ2hpbGRyZW4pO1xuICAgICAgdmFyIHN0ZXA7XG4gICAgICB2YXIgaWkgPSAwO1xuXG4gICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgICAgIGNoaWxkID0gc3RlcC52YWx1ZTtcbiAgICAgICAgbmV4dE5hbWUgPSBuZXh0TmFtZVByZWZpeCArIGdldEVsZW1lbnRLZXkoY2hpbGQsIGlpKyspO1xuICAgICAgICBzdWJ0cmVlQ291bnQgKz0gbWFwSW50b0FycmF5KGNoaWxkLCBhcnJheSwgZXNjYXBlZFByZWZpeCwgbmV4dE5hbWUsIGNhbGxiYWNrKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICB2YXIgY2hpbGRyZW5TdHJpbmcgPSAnJyArIGNoaWxkcmVuO1xuXG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJPYmplY3RzIGFyZSBub3QgdmFsaWQgYXMgYSBSZWFjdCBjaGlsZCAoZm91bmQ6IFwiICsgKGNoaWxkcmVuU3RyaW5nID09PSAnW29iamVjdCBPYmplY3RdJyA/ICdvYmplY3Qgd2l0aCBrZXlzIHsnICsgT2JqZWN0LmtleXMoY2hpbGRyZW4pLmpvaW4oJywgJykgKyAnfScgOiBjaGlsZHJlblN0cmluZykgKyBcIikuIElmIHlvdSBtZWFudCB0byByZW5kZXIgYSBjb2xsZWN0aW9uIG9mIGNoaWxkcmVuLCB1c2UgYW4gYXJyYXkgaW5zdGVhZC5cIiApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN1YnRyZWVDb3VudDtcbn1cblxuLyoqXG4gKiBNYXBzIGNoaWxkcmVuIHRoYXQgYXJlIHR5cGljYWxseSBzcGVjaWZpZWQgYXMgYHByb3BzLmNoaWxkcmVuYC5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI3JlYWN0Y2hpbGRyZW5tYXBcbiAqXG4gKiBUaGUgcHJvdmlkZWQgbWFwRnVuY3Rpb24oY2hpbGQsIGluZGV4KSB3aWxsIGJlIGNhbGxlZCBmb3IgZWFjaFxuICogbGVhZiBjaGlsZC5cbiAqXG4gKiBAcGFyYW0gez8qfSBjaGlsZHJlbiBDaGlsZHJlbiB0cmVlIGNvbnRhaW5lci5cbiAqIEBwYXJhbSB7ZnVuY3Rpb24oKiwgaW50KX0gZnVuYyBUaGUgbWFwIGZ1bmN0aW9uLlxuICogQHBhcmFtIHsqfSBjb250ZXh0IENvbnRleHQgZm9yIG1hcEZ1bmN0aW9uLlxuICogQHJldHVybiB7b2JqZWN0fSBPYmplY3QgY29udGFpbmluZyB0aGUgb3JkZXJlZCBtYXAgb2YgcmVzdWx0cy5cbiAqL1xuZnVuY3Rpb24gbWFwQ2hpbGRyZW4oY2hpbGRyZW4sIGZ1bmMsIGNvbnRleHQpIHtcbiAgaWYgKGNoaWxkcmVuID09IG51bGwpIHtcbiAgICByZXR1cm4gY2hpbGRyZW47XG4gIH1cblxuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBjb3VudCA9IDA7XG4gIG1hcEludG9BcnJheShjaGlsZHJlbiwgcmVzdWx0LCAnJywgJycsIGZ1bmN0aW9uIChjaGlsZCkge1xuICAgIHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgY2hpbGQsIGNvdW50KyspO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKlxuICogQ291bnQgdGhlIG51bWJlciBvZiBjaGlsZHJlbiB0aGF0IGFyZSB0eXBpY2FsbHkgc3BlY2lmaWVkIGFzXG4gKiBgcHJvcHMuY2hpbGRyZW5gLlxuICpcbiAqIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjcmVhY3RjaGlsZHJlbmNvdW50XG4gKlxuICogQHBhcmFtIHs/Kn0gY2hpbGRyZW4gQ2hpbGRyZW4gdHJlZSBjb250YWluZXIuXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgY2hpbGRyZW4uXG4gKi9cblxuXG5mdW5jdGlvbiBjb3VudENoaWxkcmVuKGNoaWxkcmVuKSB7XG4gIHZhciBuID0gMDtcbiAgbWFwQ2hpbGRyZW4oY2hpbGRyZW4sIGZ1bmN0aW9uICgpIHtcbiAgICBuKys7IC8vIERvbid0IHJldHVybiBhbnl0aGluZ1xuICB9KTtcbiAgcmV0dXJuIG47XG59XG5cbi8qKlxuICogSXRlcmF0ZXMgdGhyb3VnaCBjaGlsZHJlbiB0aGF0IGFyZSB0eXBpY2FsbHkgc3BlY2lmaWVkIGFzIGBwcm9wcy5jaGlsZHJlbmAuXG4gKlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNyZWFjdGNoaWxkcmVuZm9yZWFjaFxuICpcbiAqIFRoZSBwcm92aWRlZCBmb3JFYWNoRnVuYyhjaGlsZCwgaW5kZXgpIHdpbGwgYmUgY2FsbGVkIGZvciBlYWNoXG4gKiBsZWFmIGNoaWxkLlxuICpcbiAqIEBwYXJhbSB7Pyp9IGNoaWxkcmVuIENoaWxkcmVuIHRyZWUgY29udGFpbmVyLlxuICogQHBhcmFtIHtmdW5jdGlvbigqLCBpbnQpfSBmb3JFYWNoRnVuY1xuICogQHBhcmFtIHsqfSBmb3JFYWNoQ29udGV4dCBDb250ZXh0IGZvciBmb3JFYWNoQ29udGV4dC5cbiAqL1xuZnVuY3Rpb24gZm9yRWFjaENoaWxkcmVuKGNoaWxkcmVuLCBmb3JFYWNoRnVuYywgZm9yRWFjaENvbnRleHQpIHtcbiAgbWFwQ2hpbGRyZW4oY2hpbGRyZW4sIGZ1bmN0aW9uICgpIHtcbiAgICBmb3JFYWNoRnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyAvLyBEb24ndCByZXR1cm4gYW55dGhpbmcuXG4gIH0sIGZvckVhY2hDb250ZXh0KTtcbn1cbi8qKlxuICogRmxhdHRlbiBhIGNoaWxkcmVuIG9iamVjdCAodHlwaWNhbGx5IHNwZWNpZmllZCBhcyBgcHJvcHMuY2hpbGRyZW5gKSBhbmRcbiAqIHJldHVybiBhbiBhcnJheSB3aXRoIGFwcHJvcHJpYXRlbHkgcmUta2V5ZWQgY2hpbGRyZW4uXG4gKlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNyZWFjdGNoaWxkcmVudG9hcnJheVxuICovXG5cblxuZnVuY3Rpb24gdG9BcnJheShjaGlsZHJlbikge1xuICByZXR1cm4gbWFwQ2hpbGRyZW4oY2hpbGRyZW4sIGZ1bmN0aW9uIChjaGlsZCkge1xuICAgIHJldHVybiBjaGlsZDtcbiAgfSkgfHwgW107XG59XG4vKipcbiAqIFJldHVybnMgdGhlIGZpcnN0IGNoaWxkIGluIGEgY29sbGVjdGlvbiBvZiBjaGlsZHJlbiBhbmQgdmVyaWZpZXMgdGhhdCB0aGVyZVxuICogaXMgb25seSBvbmUgY2hpbGQgaW4gdGhlIGNvbGxlY3Rpb24uXG4gKlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNyZWFjdGNoaWxkcmVub25seVxuICpcbiAqIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IGEgc2luZ2xlIGNoaWxkIGdldHNcbiAqIHBhc3NlZCB3aXRob3V0IGEgd3JhcHBlciwgYnV0IHRoZSBwdXJwb3NlIG9mIHRoaXMgaGVscGVyIGZ1bmN0aW9uIGlzIHRvXG4gKiBhYnN0cmFjdCBhd2F5IHRoZSBwYXJ0aWN1bGFyIHN0cnVjdHVyZSBvZiBjaGlsZHJlbi5cbiAqXG4gKiBAcGFyYW0gez9vYmplY3R9IGNoaWxkcmVuIENoaWxkIGNvbGxlY3Rpb24gc3RydWN0dXJlLlxuICogQHJldHVybiB7UmVhY3RFbGVtZW50fSBUaGUgZmlyc3QgYW5kIG9ubHkgYFJlYWN0RWxlbWVudGAgY29udGFpbmVkIGluIHRoZVxuICogc3RydWN0dXJlLlxuICovXG5cblxuZnVuY3Rpb24gb25seUNoaWxkKGNoaWxkcmVuKSB7XG4gIGlmICghaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiUmVhY3QuQ2hpbGRyZW4ub25seSBleHBlY3RlZCB0byByZWNlaXZlIGEgc2luZ2xlIFJlYWN0IGVsZW1lbnQgY2hpbGQuXCIgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY2hpbGRyZW47XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNvbnRleHQoZGVmYXVsdFZhbHVlLCBjYWxjdWxhdGVDaGFuZ2VkQml0cykge1xuICBpZiAoY2FsY3VsYXRlQ2hhbmdlZEJpdHMgPT09IHVuZGVmaW5lZCkge1xuICAgIGNhbGN1bGF0ZUNoYW5nZWRCaXRzID0gbnVsbDtcbiAgfSBlbHNlIHtcbiAgICB7XG4gICAgICBpZiAoY2FsY3VsYXRlQ2hhbmdlZEJpdHMgIT09IG51bGwgJiYgdHlwZW9mIGNhbGN1bGF0ZUNoYW5nZWRCaXRzICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGVycm9yKCdjcmVhdGVDb250ZXh0OiBFeHBlY3RlZCB0aGUgb3B0aW9uYWwgc2Vjb25kIGFyZ3VtZW50IHRvIGJlIGEgJyArICdmdW5jdGlvbi4gSW5zdGVhZCByZWNlaXZlZDogJXMnLCBjYWxjdWxhdGVDaGFuZ2VkQml0cyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIGNvbnRleHQgPSB7XG4gICAgJCR0eXBlb2Y6IFJFQUNUX0NPTlRFWFRfVFlQRSxcbiAgICBfY2FsY3VsYXRlQ2hhbmdlZEJpdHM6IGNhbGN1bGF0ZUNoYW5nZWRCaXRzLFxuICAgIC8vIEFzIGEgd29ya2Fyb3VuZCB0byBzdXBwb3J0IG11bHRpcGxlIGNvbmN1cnJlbnQgcmVuZGVyZXJzLCB3ZSBjYXRlZ29yaXplXG4gICAgLy8gc29tZSByZW5kZXJlcnMgYXMgcHJpbWFyeSBhbmQgb3RoZXJzIGFzIHNlY29uZGFyeS4gV2Ugb25seSBleHBlY3RcbiAgICAvLyB0aGVyZSB0byBiZSB0d28gY29uY3VycmVudCByZW5kZXJlcnMgYXQgbW9zdDogUmVhY3QgTmF0aXZlIChwcmltYXJ5KSBhbmRcbiAgICAvLyBGYWJyaWMgKHNlY29uZGFyeSk7IFJlYWN0IERPTSAocHJpbWFyeSkgYW5kIFJlYWN0IEFSVCAoc2Vjb25kYXJ5KS5cbiAgICAvLyBTZWNvbmRhcnkgcmVuZGVyZXJzIHN0b3JlIHRoZWlyIGNvbnRleHQgdmFsdWVzIG9uIHNlcGFyYXRlIGZpZWxkcy5cbiAgICBfY3VycmVudFZhbHVlOiBkZWZhdWx0VmFsdWUsXG4gICAgX2N1cnJlbnRWYWx1ZTI6IGRlZmF1bHRWYWx1ZSxcbiAgICAvLyBVc2VkIHRvIHRyYWNrIGhvdyBtYW55IGNvbmN1cnJlbnQgcmVuZGVyZXJzIHRoaXMgY29udGV4dCBjdXJyZW50bHlcbiAgICAvLyBzdXBwb3J0cyB3aXRoaW4gaW4gYSBzaW5nbGUgcmVuZGVyZXIuIFN1Y2ggYXMgcGFyYWxsZWwgc2VydmVyIHJlbmRlcmluZy5cbiAgICBfdGhyZWFkQ291bnQ6IDAsXG4gICAgLy8gVGhlc2UgYXJlIGNpcmN1bGFyXG4gICAgUHJvdmlkZXI6IG51bGwsXG4gICAgQ29uc3VtZXI6IG51bGxcbiAgfTtcbiAgY29udGV4dC5Qcm92aWRlciA9IHtcbiAgICAkJHR5cGVvZjogUkVBQ1RfUFJPVklERVJfVFlQRSxcbiAgICBfY29udGV4dDogY29udGV4dFxuICB9O1xuICB2YXIgaGFzV2FybmVkQWJvdXRVc2luZ05lc3RlZENvbnRleHRDb25zdW1lcnMgPSBmYWxzZTtcbiAgdmFyIGhhc1dhcm5lZEFib3V0VXNpbmdDb25zdW1lclByb3ZpZGVyID0gZmFsc2U7XG4gIHZhciBoYXNXYXJuZWRBYm91dERpc3BsYXlOYW1lT25Db25zdW1lciA9IGZhbHNlO1xuXG4gIHtcbiAgICAvLyBBIHNlcGFyYXRlIG9iamVjdCwgYnV0IHByb3hpZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgY29udGV4dCBvYmplY3QgZm9yXG4gICAgLy8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuIEl0IGhhcyBhIGRpZmZlcmVudCAkJHR5cGVvZiwgc28gd2UgY2FuIHByb3Blcmx5XG4gICAgLy8gd2FybiBmb3IgdGhlIGluY29ycmVjdCB1c2FnZSBvZiBDb250ZXh0IGFzIGEgQ29uc3VtZXIuXG4gICAgdmFyIENvbnN1bWVyID0ge1xuICAgICAgJCR0eXBlb2Y6IFJFQUNUX0NPTlRFWFRfVFlQRSxcbiAgICAgIF9jb250ZXh0OiBjb250ZXh0LFxuICAgICAgX2NhbGN1bGF0ZUNoYW5nZWRCaXRzOiBjb250ZXh0Ll9jYWxjdWxhdGVDaGFuZ2VkQml0c1xuICAgIH07IC8vICRGbG93Rml4TWU6IEZsb3cgY29tcGxhaW5zIGFib3V0IG5vdCBzZXR0aW5nIGEgdmFsdWUsIHdoaWNoIGlzIGludGVudGlvbmFsIGhlcmVcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENvbnN1bWVyLCB7XG4gICAgICBQcm92aWRlcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoIWhhc1dhcm5lZEFib3V0VXNpbmdDb25zdW1lclByb3ZpZGVyKSB7XG4gICAgICAgICAgICBoYXNXYXJuZWRBYm91dFVzaW5nQ29uc3VtZXJQcm92aWRlciA9IHRydWU7XG5cbiAgICAgICAgICAgIGVycm9yKCdSZW5kZXJpbmcgPENvbnRleHQuQ29uc3VtZXIuUHJvdmlkZXI+IGlzIG5vdCBzdXBwb3J0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiAnICsgJ2EgZnV0dXJlIG1ham9yIHJlbGVhc2UuIERpZCB5b3UgbWVhbiB0byByZW5kZXIgPENvbnRleHQuUHJvdmlkZXI+IGluc3RlYWQ/Jyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbnRleHQuUHJvdmlkZXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKF9Qcm92aWRlcikge1xuICAgICAgICAgIGNvbnRleHQuUHJvdmlkZXIgPSBfUHJvdmlkZXI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBfY3VycmVudFZhbHVlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBjb250ZXh0Ll9jdXJyZW50VmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKF9jdXJyZW50VmFsdWUpIHtcbiAgICAgICAgICBjb250ZXh0Ll9jdXJyZW50VmFsdWUgPSBfY3VycmVudFZhbHVlO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgX2N1cnJlbnRWYWx1ZTI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbnRleHQuX2N1cnJlbnRWYWx1ZTI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKF9jdXJyZW50VmFsdWUyKSB7XG4gICAgICAgICAgY29udGV4dC5fY3VycmVudFZhbHVlMiA9IF9jdXJyZW50VmFsdWUyO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgX3RocmVhZENvdW50OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBjb250ZXh0Ll90aHJlYWRDb3VudDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoX3RocmVhZENvdW50KSB7XG4gICAgICAgICAgY29udGV4dC5fdGhyZWFkQ291bnQgPSBfdGhyZWFkQ291bnQ7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBDb25zdW1lcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoIWhhc1dhcm5lZEFib3V0VXNpbmdOZXN0ZWRDb250ZXh0Q29uc3VtZXJzKSB7XG4gICAgICAgICAgICBoYXNXYXJuZWRBYm91dFVzaW5nTmVzdGVkQ29udGV4dENvbnN1bWVycyA9IHRydWU7XG5cbiAgICAgICAgICAgIGVycm9yKCdSZW5kZXJpbmcgPENvbnRleHQuQ29uc3VtZXIuQ29uc3VtZXI+IGlzIG5vdCBzdXBwb3J0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiAnICsgJ2EgZnV0dXJlIG1ham9yIHJlbGVhc2UuIERpZCB5b3UgbWVhbiB0byByZW5kZXIgPENvbnRleHQuQ29uc3VtZXI+IGluc3RlYWQ/Jyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbnRleHQuQ29uc3VtZXI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBkaXNwbGF5TmFtZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gY29udGV4dC5kaXNwbGF5TmFtZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoZGlzcGxheU5hbWUpIHtcbiAgICAgICAgICBpZiAoIWhhc1dhcm5lZEFib3V0RGlzcGxheU5hbWVPbkNvbnN1bWVyKSB7XG4gICAgICAgICAgICB3YXJuKCdTZXR0aW5nIGBkaXNwbGF5TmFtZWAgb24gQ29udGV4dC5Db25zdW1lciBoYXMgbm8gZWZmZWN0LiAnICsgXCJZb3Ugc2hvdWxkIHNldCBpdCBkaXJlY3RseSBvbiB0aGUgY29udGV4dCB3aXRoIENvbnRleHQuZGlzcGxheU5hbWUgPSAnJXMnLlwiLCBkaXNwbGF5TmFtZSk7XG5cbiAgICAgICAgICAgIGhhc1dhcm5lZEFib3V0RGlzcGxheU5hbWVPbkNvbnN1bWVyID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTsgLy8gJEZsb3dGaXhNZTogRmxvdyBjb21wbGFpbnMgYWJvdXQgbWlzc2luZyBwcm9wZXJ0aWVzIGJlY2F1c2UgaXQgZG9lc24ndCB1bmRlcnN0YW5kIGRlZmluZVByb3BlcnR5XG5cbiAgICBjb250ZXh0LkNvbnN1bWVyID0gQ29uc3VtZXI7XG4gIH1cblxuICB7XG4gICAgY29udGV4dC5fY3VycmVudFJlbmRlcmVyID0gbnVsbDtcbiAgICBjb250ZXh0Ll9jdXJyZW50UmVuZGVyZXIyID0gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBjb250ZXh0O1xufVxuXG52YXIgVW5pbml0aWFsaXplZCA9IC0xO1xudmFyIFBlbmRpbmcgPSAwO1xudmFyIFJlc29sdmVkID0gMTtcbnZhciBSZWplY3RlZCA9IDI7XG5cbmZ1bmN0aW9uIGxhenlJbml0aWFsaXplcihwYXlsb2FkKSB7XG4gIGlmIChwYXlsb2FkLl9zdGF0dXMgPT09IFVuaW5pdGlhbGl6ZWQpIHtcbiAgICB2YXIgY3RvciA9IHBheWxvYWQuX3Jlc3VsdDtcbiAgICB2YXIgdGhlbmFibGUgPSBjdG9yKCk7IC8vIFRyYW5zaXRpb24gdG8gdGhlIG5leHQgc3RhdGUuXG5cbiAgICB2YXIgcGVuZGluZyA9IHBheWxvYWQ7XG4gICAgcGVuZGluZy5fc3RhdHVzID0gUGVuZGluZztcbiAgICBwZW5kaW5nLl9yZXN1bHQgPSB0aGVuYWJsZTtcbiAgICB0aGVuYWJsZS50aGVuKGZ1bmN0aW9uIChtb2R1bGVPYmplY3QpIHtcbiAgICAgIGlmIChwYXlsb2FkLl9zdGF0dXMgPT09IFBlbmRpbmcpIHtcbiAgICAgICAgdmFyIGRlZmF1bHRFeHBvcnQgPSBtb2R1bGVPYmplY3QuZGVmYXVsdDtcblxuICAgICAgICB7XG4gICAgICAgICAgaWYgKGRlZmF1bHRFeHBvcnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZXJyb3IoJ2xhenk6IEV4cGVjdGVkIHRoZSByZXN1bHQgb2YgYSBkeW5hbWljIGltcG9ydCgpIGNhbGwuICcgKyAnSW5zdGVhZCByZWNlaXZlZDogJXNcXG5cXG5Zb3VyIGNvZGUgc2hvdWxkIGxvb2sgbGlrZTogXFxuICAnICsgLy8gQnJlYWsgdXAgaW1wb3J0cyB0byBhdm9pZCBhY2NpZGVudGFsbHkgcGFyc2luZyB0aGVtIGFzIGRlcGVuZGVuY2llcy5cbiAgICAgICAgICAgICdjb25zdCBNeUNvbXBvbmVudCA9IGxhenkoKCkgPT4gaW1wJyArIFwib3J0KCcuL015Q29tcG9uZW50JykpXCIsIG1vZHVsZU9iamVjdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIFRyYW5zaXRpb24gdG8gdGhlIG5leHQgc3RhdGUuXG5cblxuICAgICAgICB2YXIgcmVzb2x2ZWQgPSBwYXlsb2FkO1xuICAgICAgICByZXNvbHZlZC5fc3RhdHVzID0gUmVzb2x2ZWQ7XG4gICAgICAgIHJlc29sdmVkLl9yZXN1bHQgPSBkZWZhdWx0RXhwb3J0O1xuICAgICAgfVxuICAgIH0sIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgaWYgKHBheWxvYWQuX3N0YXR1cyA9PT0gUGVuZGluZykge1xuICAgICAgICAvLyBUcmFuc2l0aW9uIHRvIHRoZSBuZXh0IHN0YXRlLlxuICAgICAgICB2YXIgcmVqZWN0ZWQgPSBwYXlsb2FkO1xuICAgICAgICByZWplY3RlZC5fc3RhdHVzID0gUmVqZWN0ZWQ7XG4gICAgICAgIHJlamVjdGVkLl9yZXN1bHQgPSBlcnJvcjtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGlmIChwYXlsb2FkLl9zdGF0dXMgPT09IFJlc29sdmVkKSB7XG4gICAgcmV0dXJuIHBheWxvYWQuX3Jlc3VsdDtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBwYXlsb2FkLl9yZXN1bHQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gbGF6eShjdG9yKSB7XG4gIHZhciBwYXlsb2FkID0ge1xuICAgIC8vIFdlIHVzZSB0aGVzZSBmaWVsZHMgdG8gc3RvcmUgdGhlIHJlc3VsdC5cbiAgICBfc3RhdHVzOiAtMSxcbiAgICBfcmVzdWx0OiBjdG9yXG4gIH07XG4gIHZhciBsYXp5VHlwZSA9IHtcbiAgICAkJHR5cGVvZjogUkVBQ1RfTEFaWV9UWVBFLFxuICAgIF9wYXlsb2FkOiBwYXlsb2FkLFxuICAgIF9pbml0OiBsYXp5SW5pdGlhbGl6ZXJcbiAgfTtcblxuICB7XG4gICAgLy8gSW4gcHJvZHVjdGlvbiwgdGhpcyB3b3VsZCBqdXN0IHNldCBpdCBvbiB0aGUgb2JqZWN0LlxuICAgIHZhciBkZWZhdWx0UHJvcHM7XG4gICAgdmFyIHByb3BUeXBlczsgLy8gJEZsb3dGaXhNZVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMobGF6eVR5cGUsIHtcbiAgICAgIGRlZmF1bHRQcm9wczoge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBkZWZhdWx0UHJvcHM7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKG5ld0RlZmF1bHRQcm9wcykge1xuICAgICAgICAgIGVycm9yKCdSZWFjdC5sYXp5KC4uLik6IEl0IGlzIG5vdCBzdXBwb3J0ZWQgdG8gYXNzaWduIGBkZWZhdWx0UHJvcHNgIHRvICcgKyAnYSBsYXp5IGNvbXBvbmVudCBpbXBvcnQuIEVpdGhlciBzcGVjaWZ5IHRoZW0gd2hlcmUgdGhlIGNvbXBvbmVudCAnICsgJ2lzIGRlZmluZWQsIG9yIGNyZWF0ZSBhIHdyYXBwaW5nIGNvbXBvbmVudCBhcm91bmQgaXQuJyk7XG5cbiAgICAgICAgICBkZWZhdWx0UHJvcHMgPSBuZXdEZWZhdWx0UHJvcHM7IC8vIE1hdGNoIHByb2R1Y3Rpb24gYmVoYXZpb3IgbW9yZSBjbG9zZWx5OlxuICAgICAgICAgIC8vICRGbG93Rml4TWVcblxuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsYXp5VHlwZSwgJ2RlZmF1bHRQcm9wcycsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHByb3BUeXBlczoge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBwcm9wVHlwZXM7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKG5ld1Byb3BUeXBlcykge1xuICAgICAgICAgIGVycm9yKCdSZWFjdC5sYXp5KC4uLik6IEl0IGlzIG5vdCBzdXBwb3J0ZWQgdG8gYXNzaWduIGBwcm9wVHlwZXNgIHRvICcgKyAnYSBsYXp5IGNvbXBvbmVudCBpbXBvcnQuIEVpdGhlciBzcGVjaWZ5IHRoZW0gd2hlcmUgdGhlIGNvbXBvbmVudCAnICsgJ2lzIGRlZmluZWQsIG9yIGNyZWF0ZSBhIHdyYXBwaW5nIGNvbXBvbmVudCBhcm91bmQgaXQuJyk7XG5cbiAgICAgICAgICBwcm9wVHlwZXMgPSBuZXdQcm9wVHlwZXM7IC8vIE1hdGNoIHByb2R1Y3Rpb24gYmVoYXZpb3IgbW9yZSBjbG9zZWx5OlxuICAgICAgICAgIC8vICRGbG93Rml4TWVcblxuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsYXp5VHlwZSwgJ3Byb3BUeXBlcycsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGxhenlUeXBlO1xufVxuXG5mdW5jdGlvbiBmb3J3YXJkUmVmKHJlbmRlcikge1xuICB7XG4gICAgaWYgKHJlbmRlciAhPSBudWxsICYmIHJlbmRlci4kJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFKSB7XG4gICAgICBlcnJvcignZm9yd2FyZFJlZiByZXF1aXJlcyBhIHJlbmRlciBmdW5jdGlvbiBidXQgcmVjZWl2ZWQgYSBgbWVtb2AgJyArICdjb21wb25lbnQuIEluc3RlYWQgb2YgZm9yd2FyZFJlZihtZW1vKC4uLikpLCB1c2UgJyArICdtZW1vKGZvcndhcmRSZWYoLi4uKSkuJyk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgcmVuZGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignZm9yd2FyZFJlZiByZXF1aXJlcyBhIHJlbmRlciBmdW5jdGlvbiBidXQgd2FzIGdpdmVuICVzLicsIHJlbmRlciA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiByZW5kZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocmVuZGVyLmxlbmd0aCAhPT0gMCAmJiByZW5kZXIubGVuZ3RoICE9PSAyKSB7XG4gICAgICAgIGVycm9yKCdmb3J3YXJkUmVmIHJlbmRlciBmdW5jdGlvbnMgYWNjZXB0IGV4YWN0bHkgdHdvIHBhcmFtZXRlcnM6IHByb3BzIGFuZCByZWYuICVzJywgcmVuZGVyLmxlbmd0aCA9PT0gMSA/ICdEaWQgeW91IGZvcmdldCB0byB1c2UgdGhlIHJlZiBwYXJhbWV0ZXI/JyA6ICdBbnkgYWRkaXRpb25hbCBwYXJhbWV0ZXIgd2lsbCBiZSB1bmRlZmluZWQuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHJlbmRlciAhPSBudWxsKSB7XG4gICAgICBpZiAocmVuZGVyLmRlZmF1bHRQcm9wcyAhPSBudWxsIHx8IHJlbmRlci5wcm9wVHlwZXMgIT0gbnVsbCkge1xuICAgICAgICBlcnJvcignZm9yd2FyZFJlZiByZW5kZXIgZnVuY3Rpb25zIGRvIG5vdCBzdXBwb3J0IHByb3BUeXBlcyBvciBkZWZhdWx0UHJvcHMuICcgKyAnRGlkIHlvdSBhY2NpZGVudGFsbHkgcGFzcyBhIFJlYWN0IGNvbXBvbmVudD8nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgZWxlbWVudFR5cGUgPSB7XG4gICAgJCR0eXBlb2Y6IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUsXG4gICAgcmVuZGVyOiByZW5kZXJcbiAgfTtcblxuICB7XG4gICAgdmFyIG93bk5hbWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVsZW1lbnRUeXBlLCAnZGlzcGxheU5hbWUnLCB7XG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gb3duTmFtZTtcbiAgICAgIH0sXG4gICAgICBzZXQ6IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIG93bk5hbWUgPSBuYW1lO1xuXG4gICAgICAgIGlmIChyZW5kZXIuZGlzcGxheU5hbWUgPT0gbnVsbCkge1xuICAgICAgICAgIHJlbmRlci5kaXNwbGF5TmFtZSA9IG5hbWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50VHlwZTtcbn1cblxuLy8gRmlsdGVyIGNlcnRhaW4gRE9NIGF0dHJpYnV0ZXMgKGUuZy4gc3JjLCBocmVmKSBpZiB0aGVpciB2YWx1ZXMgYXJlIGVtcHR5IHN0cmluZ3MuXG5cbnZhciBlbmFibGVTY29wZUFQSSA9IGZhbHNlOyAvLyBFeHBlcmltZW50YWwgQ3JlYXRlIEV2ZW50IEhhbmRsZSBBUEkuXG5cbmZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKSB7XG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSAvLyBOb3RlOiB0eXBlb2YgbWlnaHQgYmUgb3RoZXIgdGhhbiAnc3ltYm9sJyBvciAnbnVtYmVyJyAoZS5nLiBpZiBpdCdzIGEgcG9seWZpbGwpLlxuXG5cbiAgaWYgKHR5cGUgPT09IGV4cG9ydHMuRnJhZ21lbnQgfHwgdHlwZSA9PT0gZXhwb3J0cy5Qcm9maWxlciB8fCB0eXBlID09PSBSRUFDVF9ERUJVR19UUkFDSU5HX01PREVfVFlQRSB8fCB0eXBlID09PSBleHBvcnRzLlN0cmljdE1vZGUgfHwgdHlwZSA9PT0gZXhwb3J0cy5TdXNwZW5zZSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfTEVHQUNZX0hJRERFTl9UWVBFIHx8IGVuYWJsZVNjb3BlQVBJICkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsKSB7XG4gICAgaWYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfUFJPVklERVJfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9DT05URVhUX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0JMT0NLX1RZUEUgfHwgdHlwZVswXSA9PT0gUkVBQ1RfU0VSVkVSX0JMT0NLX1RZUEUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gbWVtbyh0eXBlLCBjb21wYXJlKSB7XG4gIHtcbiAgICBpZiAoIWlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKSkge1xuICAgICAgZXJyb3IoJ21lbW86IFRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgY29tcG9uZW50LiBJbnN0ZWFkICcgKyAncmVjZWl2ZWQ6ICVzJywgdHlwZSA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiB0eXBlKTtcbiAgICB9XG4gIH1cblxuICB2YXIgZWxlbWVudFR5cGUgPSB7XG4gICAgJCR0eXBlb2Y6IFJFQUNUX01FTU9fVFlQRSxcbiAgICB0eXBlOiB0eXBlLFxuICAgIGNvbXBhcmU6IGNvbXBhcmUgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBjb21wYXJlXG4gIH07XG5cbiAge1xuICAgIHZhciBvd25OYW1lO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50VHlwZSwgJ2Rpc3BsYXlOYW1lJywge1xuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG93bk5hbWU7XG4gICAgICB9LFxuICAgICAgc2V0OiBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICBvd25OYW1lID0gbmFtZTtcblxuICAgICAgICBpZiAodHlwZS5kaXNwbGF5TmFtZSA9PSBudWxsKSB7XG4gICAgICAgICAgdHlwZS5kaXNwbGF5TmFtZSA9IG5hbWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50VHlwZTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZURpc3BhdGNoZXIoKSB7XG4gIHZhciBkaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlci5jdXJyZW50O1xuXG4gIGlmICghKGRpc3BhdGNoZXIgIT09IG51bGwpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiSW52YWxpZCBob29rIGNhbGwuIEhvb2tzIGNhbiBvbmx5IGJlIGNhbGxlZCBpbnNpZGUgb2YgdGhlIGJvZHkgb2YgYSBmdW5jdGlvbiBjb21wb25lbnQuIFRoaXMgY291bGQgaGFwcGVuIGZvciBvbmUgb2YgdGhlIGZvbGxvd2luZyByZWFzb25zOlxcbjEuIFlvdSBtaWdodCBoYXZlIG1pc21hdGNoaW5nIHZlcnNpb25zIG9mIFJlYWN0IGFuZCB0aGUgcmVuZGVyZXIgKHN1Y2ggYXMgUmVhY3QgRE9NKVxcbjIuIFlvdSBtaWdodCBiZSBicmVha2luZyB0aGUgUnVsZXMgb2YgSG9va3NcXG4zLiBZb3UgbWlnaHQgaGF2ZSBtb3JlIHRoYW4gb25lIGNvcHkgb2YgUmVhY3QgaW4gdGhlIHNhbWUgYXBwXFxuU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9pbnZhbGlkLWhvb2stY2FsbCBmb3IgdGlwcyBhYm91dCBob3cgdG8gZGVidWcgYW5kIGZpeCB0aGlzIHByb2JsZW0uXCIgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGlzcGF0Y2hlcjtcbn1cblxuZnVuY3Rpb24gdXNlQ29udGV4dChDb250ZXh0LCB1bnN0YWJsZV9vYnNlcnZlZEJpdHMpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuXG4gIHtcbiAgICBpZiAodW5zdGFibGVfb2JzZXJ2ZWRCaXRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGVycm9yKCd1c2VDb250ZXh0KCkgc2Vjb25kIGFyZ3VtZW50IGlzIHJlc2VydmVkIGZvciBmdXR1cmUgJyArICd1c2UgaW4gUmVhY3QuIFBhc3NpbmcgaXQgaXMgbm90IHN1cHBvcnRlZC4gJyArICdZb3UgcGFzc2VkOiAlcy4lcycsIHVuc3RhYmxlX29ic2VydmVkQml0cywgdHlwZW9mIHVuc3RhYmxlX29ic2VydmVkQml0cyA9PT0gJ251bWJlcicgJiYgQXJyYXkuaXNBcnJheShhcmd1bWVudHNbMl0pID8gJ1xcblxcbkRpZCB5b3UgY2FsbCBhcnJheS5tYXAodXNlQ29udGV4dCk/ICcgKyAnQ2FsbGluZyBIb29rcyBpbnNpZGUgYSBsb29wIGlzIG5vdCBzdXBwb3J0ZWQuICcgKyAnTGVhcm4gbW9yZSBhdCBodHRwczovL3JlYWN0anMub3JnL2xpbmsvcnVsZXMtb2YtaG9va3MnIDogJycpO1xuICAgIH0gLy8gVE9ETzogYWRkIGEgbW9yZSBnZW5lcmljIHdhcm5pbmcgZm9yIGludmFsaWQgdmFsdWVzLlxuXG5cbiAgICBpZiAoQ29udGV4dC5fY29udGV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YXIgcmVhbENvbnRleHQgPSBDb250ZXh0Ll9jb250ZXh0OyAvLyBEb24ndCBkZWR1cGxpY2F0ZSBiZWNhdXNlIHRoaXMgbGVnaXRpbWF0ZWx5IGNhdXNlcyBidWdzXG4gICAgICAvLyBhbmQgbm9ib2R5IHNob3VsZCBiZSB1c2luZyB0aGlzIGluIGV4aXN0aW5nIGNvZGUuXG5cbiAgICAgIGlmIChyZWFsQ29udGV4dC5Db25zdW1lciA9PT0gQ29udGV4dCkge1xuICAgICAgICBlcnJvcignQ2FsbGluZyB1c2VDb250ZXh0KENvbnRleHQuQ29uc3VtZXIpIGlzIG5vdCBzdXBwb3J0ZWQsIG1heSBjYXVzZSBidWdzLCBhbmQgd2lsbCBiZSAnICsgJ3JlbW92ZWQgaW4gYSBmdXR1cmUgbWFqb3IgcmVsZWFzZS4gRGlkIHlvdSBtZWFuIHRvIGNhbGwgdXNlQ29udGV4dChDb250ZXh0KSBpbnN0ZWFkPycpO1xuICAgICAgfSBlbHNlIGlmIChyZWFsQ29udGV4dC5Qcm92aWRlciA9PT0gQ29udGV4dCkge1xuICAgICAgICBlcnJvcignQ2FsbGluZyB1c2VDb250ZXh0KENvbnRleHQuUHJvdmlkZXIpIGlzIG5vdCBzdXBwb3J0ZWQuICcgKyAnRGlkIHlvdSBtZWFuIHRvIGNhbGwgdXNlQ29udGV4dChDb250ZXh0KSBpbnN0ZWFkPycpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZUNvbnRleHQoQ29udGV4dCwgdW5zdGFibGVfb2JzZXJ2ZWRCaXRzKTtcbn1cbmZ1bmN0aW9uIHVzZVN0YXRlKGluaXRpYWxTdGF0ZSkge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZVN0YXRlKGluaXRpYWxTdGF0ZSk7XG59XG5mdW5jdGlvbiB1c2VSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpO1xufVxuZnVuY3Rpb24gdXNlUmVmKGluaXRpYWxWYWx1ZSkge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZVJlZihpbml0aWFsVmFsdWUpO1xufVxuZnVuY3Rpb24gdXNlRWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZUVmZmVjdChjcmVhdGUsIGRlcHMpO1xufVxuZnVuY3Rpb24gdXNlTGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZUxheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpO1xufVxuZnVuY3Rpb24gdXNlQ2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG59XG5mdW5jdGlvbiB1c2VNZW1vKGNyZWF0ZSwgZGVwcykge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZU1lbW8oY3JlYXRlLCBkZXBzKTtcbn1cbmZ1bmN0aW9uIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbn1cbmZ1bmN0aW9uIHVzZURlYnVnVmFsdWUodmFsdWUsIGZvcm1hdHRlckZuKSB7XG4gIHtcbiAgICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gICAgcmV0dXJuIGRpc3BhdGNoZXIudXNlRGVidWdWYWx1ZSh2YWx1ZSwgZm9ybWF0dGVyRm4pO1xuICB9XG59XG5cbi8vIEhlbHBlcnMgdG8gcGF0Y2ggY29uc29sZS5sb2dzIHRvIGF2b2lkIGxvZ2dpbmcgZHVyaW5nIHNpZGUtZWZmZWN0IGZyZWVcbi8vIHJlcGxheWluZyBvbiByZW5kZXIgZnVuY3Rpb24uIFRoaXMgY3VycmVudGx5IG9ubHkgcGF0Y2hlcyB0aGUgb2JqZWN0XG4vLyBsYXppbHkgd2hpY2ggd29uJ3QgY292ZXIgaWYgdGhlIGxvZyBmdW5jdGlvbiB3YXMgZXh0cmFjdGVkIGVhZ2VybHkuXG4vLyBXZSBjb3VsZCBhbHNvIGVhZ2VybHkgcGF0Y2ggdGhlIG1ldGhvZC5cbnZhciBkaXNhYmxlZERlcHRoID0gMDtcbnZhciBwcmV2TG9nO1xudmFyIHByZXZJbmZvO1xudmFyIHByZXZXYXJuO1xudmFyIHByZXZFcnJvcjtcbnZhciBwcmV2R3JvdXA7XG52YXIgcHJldkdyb3VwQ29sbGFwc2VkO1xudmFyIHByZXZHcm91cEVuZDtcblxuZnVuY3Rpb24gZGlzYWJsZWRMb2coKSB7fVxuXG5kaXNhYmxlZExvZy5fX3JlYWN0RGlzYWJsZWRMb2cgPSB0cnVlO1xuZnVuY3Rpb24gZGlzYWJsZUxvZ3MoKSB7XG4gIHtcbiAgICBpZiAoZGlzYWJsZWREZXB0aCA9PT0gMCkge1xuICAgICAgLyogZXNsaW50LWRpc2FibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXG4gICAgICBwcmV2TG9nID0gY29uc29sZS5sb2c7XG4gICAgICBwcmV2SW5mbyA9IGNvbnNvbGUuaW5mbztcbiAgICAgIHByZXZXYXJuID0gY29uc29sZS53YXJuO1xuICAgICAgcHJldkVycm9yID0gY29uc29sZS5lcnJvcjtcbiAgICAgIHByZXZHcm91cCA9IGNvbnNvbGUuZ3JvdXA7XG4gICAgICBwcmV2R3JvdXBDb2xsYXBzZWQgPSBjb25zb2xlLmdyb3VwQ29sbGFwc2VkO1xuICAgICAgcHJldkdyb3VwRW5kID0gY29uc29sZS5ncm91cEVuZDsgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xOTA5OVxuXG4gICAgICB2YXIgcHJvcHMgPSB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IGRpc2FibGVkTG9nLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZVxuICAgICAgfTsgLy8gJEZsb3dGaXhNZSBGbG93IHRoaW5rcyBjb25zb2xlIGlzIGltbXV0YWJsZS5cblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY29uc29sZSwge1xuICAgICAgICBpbmZvOiBwcm9wcyxcbiAgICAgICAgbG9nOiBwcm9wcyxcbiAgICAgICAgd2FybjogcHJvcHMsXG4gICAgICAgIGVycm9yOiBwcm9wcyxcbiAgICAgICAgZ3JvdXA6IHByb3BzLFxuICAgICAgICBncm91cENvbGxhcHNlZDogcHJvcHMsXG4gICAgICAgIGdyb3VwRW5kOiBwcm9wc1xuICAgICAgfSk7XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgIH1cblxuICAgIGRpc2FibGVkRGVwdGgrKztcbiAgfVxufVxuZnVuY3Rpb24gcmVlbmFibGVMb2dzKCkge1xuICB7XG4gICAgZGlzYWJsZWREZXB0aC0tO1xuXG4gICAgaWYgKGRpc2FibGVkRGVwdGggPT09IDApIHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgICAgdmFyIHByb3BzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICB9OyAvLyAkRmxvd0ZpeE1lIEZsb3cgdGhpbmtzIGNvbnNvbGUgaXMgaW1tdXRhYmxlLlxuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhjb25zb2xlLCB7XG4gICAgICAgIGxvZzogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkxvZ1xuICAgICAgICB9KSxcbiAgICAgICAgaW5mbzogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkluZm9cbiAgICAgICAgfSksXG4gICAgICAgIHdhcm46IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZXYXJuXG4gICAgICAgIH0pLFxuICAgICAgICBlcnJvcjogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkVycm9yXG4gICAgICAgIH0pLFxuICAgICAgICBncm91cDogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkdyb3VwXG4gICAgICAgIH0pLFxuICAgICAgICBncm91cENvbGxhcHNlZDogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkdyb3VwQ29sbGFwc2VkXG4gICAgICAgIH0pLFxuICAgICAgICBncm91cEVuZDogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkdyb3VwRW5kXG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICAgIC8qIGVzbGludC1lbmFibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXG4gICAgfVxuXG4gICAgaWYgKGRpc2FibGVkRGVwdGggPCAwKSB7XG4gICAgICBlcnJvcignZGlzYWJsZWREZXB0aCBmZWxsIGJlbG93IHplcm8uICcgKyAnVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG4gICAgfVxuICB9XG59XG5cbnZhciBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnREaXNwYXRjaGVyO1xudmFyIHByZWZpeDtcbmZ1bmN0aW9uIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKG5hbWUsIHNvdXJjZSwgb3duZXJGbikge1xuICB7XG4gICAgaWYgKHByZWZpeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBFeHRyYWN0IHRoZSBWTSBzcGVjaWZpYyBwcmVmaXggdXNlZCBieSBlYWNoIGxpbmUuXG4gICAgICB0cnkge1xuICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICB2YXIgbWF0Y2ggPSB4LnN0YWNrLnRyaW0oKS5tYXRjaCgvXFxuKCAqKGF0ICk/KS8pO1xuICAgICAgICBwcmVmaXggPSBtYXRjaCAmJiBtYXRjaFsxXSB8fCAnJztcbiAgICAgIH1cbiAgICB9IC8vIFdlIHVzZSB0aGUgcHJlZml4IHRvIGVuc3VyZSBvdXIgc3RhY2tzIGxpbmUgdXAgd2l0aCBuYXRpdmUgc3RhY2sgZnJhbWVzLlxuXG5cbiAgICByZXR1cm4gJ1xcbicgKyBwcmVmaXggKyBuYW1lO1xuICB9XG59XG52YXIgcmVlbnRyeSA9IGZhbHNlO1xudmFyIGNvbXBvbmVudEZyYW1lQ2FjaGU7XG5cbntcbiAgdmFyIFBvc3NpYmx5V2Vha01hcCA9IHR5cGVvZiBXZWFrTWFwID09PSAnZnVuY3Rpb24nID8gV2Vha01hcCA6IE1hcDtcbiAgY29tcG9uZW50RnJhbWVDYWNoZSA9IG5ldyBQb3NzaWJseVdlYWtNYXAoKTtcbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZShmbiwgY29uc3RydWN0KSB7XG4gIC8vIElmIHNvbWV0aGluZyBhc2tlZCBmb3IgYSBzdGFjayBpbnNpZGUgYSBmYWtlIHJlbmRlciwgaXQgc2hvdWxkIGdldCBpZ25vcmVkLlxuICBpZiAoIWZuIHx8IHJlZW50cnkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICB7XG4gICAgdmFyIGZyYW1lID0gY29tcG9uZW50RnJhbWVDYWNoZS5nZXQoZm4pO1xuXG4gICAgaWYgKGZyYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmcmFtZTtcbiAgICB9XG4gIH1cblxuICB2YXIgY29udHJvbDtcbiAgcmVlbnRyeSA9IHRydWU7XG4gIHZhciBwcmV2aW91c1ByZXBhcmVTdGFja1RyYWNlID0gRXJyb3IucHJlcGFyZVN0YWNrVHJhY2U7IC8vICRGbG93Rml4TWUgSXQgZG9lcyBhY2NlcHQgdW5kZWZpbmVkLlxuXG4gIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gdW5kZWZpbmVkO1xuICB2YXIgcHJldmlvdXNEaXNwYXRjaGVyO1xuXG4gIHtcbiAgICBwcmV2aW91c0Rpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDsgLy8gU2V0IHRoZSBkaXNwYXRjaGVyIGluIERFViBiZWNhdXNlIHRoaXMgbWlnaHQgYmUgY2FsbCBpbiB0aGUgcmVuZGVyIGZ1bmN0aW9uXG4gICAgLy8gZm9yIHdhcm5pbmdzLlxuXG4gICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBudWxsO1xuICAgIGRpc2FibGVMb2dzKCk7XG4gIH1cblxuICB0cnkge1xuICAgIC8vIFRoaXMgc2hvdWxkIHRocm93LlxuICAgIGlmIChjb25zdHJ1Y3QpIHtcbiAgICAgIC8vIFNvbWV0aGluZyBzaG91bGQgYmUgc2V0dGluZyB0aGUgcHJvcHMgaW4gdGhlIGNvbnN0cnVjdG9yLlxuICAgICAgdmFyIEZha2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICB9OyAvLyAkRmxvd0ZpeE1lXG5cblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZha2UucHJvdG90eXBlLCAncHJvcHMnLCB7XG4gICAgICAgIHNldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIC8vIFdlIHVzZSBhIHRocm93aW5nIHNldHRlciBpbnN0ZWFkIG9mIGZyb3plbiBvciBub24td3JpdGFibGUgcHJvcHNcbiAgICAgICAgICAvLyBiZWNhdXNlIHRoYXQgd29uJ3QgdGhyb3cgaW4gYSBub24tc3RyaWN0IG1vZGUgZnVuY3Rpb24uXG4gICAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gJ29iamVjdCcgJiYgUmVmbGVjdC5jb25zdHJ1Y3QpIHtcbiAgICAgICAgLy8gV2UgY29uc3RydWN0IGEgZGlmZmVyZW50IGNvbnRyb2wgZm9yIHRoaXMgY2FzZSB0byBpbmNsdWRlIGFueSBleHRyYVxuICAgICAgICAvLyBmcmFtZXMgYWRkZWQgYnkgdGhlIGNvbnN0cnVjdCBjYWxsLlxuICAgICAgICB0cnkge1xuICAgICAgICAgIFJlZmxlY3QuY29uc3RydWN0KEZha2UsIFtdKTtcbiAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgIGNvbnRyb2wgPSB4O1xuICAgICAgICB9XG5cbiAgICAgICAgUmVmbGVjdC5jb25zdHJ1Y3QoZm4sIFtdLCBGYWtlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgRmFrZS5jYWxsKCk7XG4gICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICBjb250cm9sID0geDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZuLmNhbGwoRmFrZS5wcm90b3R5cGUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICBjb250cm9sID0geDtcbiAgICAgIH1cblxuICAgICAgZm4oKTtcbiAgICB9XG4gIH0gY2F0Y2ggKHNhbXBsZSkge1xuICAgIC8vIFRoaXMgaXMgaW5saW5lZCBtYW51YWxseSBiZWNhdXNlIGNsb3N1cmUgZG9lc24ndCBkbyBpdCBmb3IgdXMuXG4gICAgaWYgKHNhbXBsZSAmJiBjb250cm9sICYmIHR5cGVvZiBzYW1wbGUuc3RhY2sgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBUaGlzIGV4dHJhY3RzIHRoZSBmaXJzdCBmcmFtZSBmcm9tIHRoZSBzYW1wbGUgdGhhdCBpc24ndCBhbHNvIGluIHRoZSBjb250cm9sLlxuICAgICAgLy8gU2tpcHBpbmcgb25lIGZyYW1lIHRoYXQgd2UgYXNzdW1lIGlzIHRoZSBmcmFtZSB0aGF0IGNhbGxzIHRoZSB0d28uXG4gICAgICB2YXIgc2FtcGxlTGluZXMgPSBzYW1wbGUuc3RhY2suc3BsaXQoJ1xcbicpO1xuICAgICAgdmFyIGNvbnRyb2xMaW5lcyA9IGNvbnRyb2wuc3RhY2suc3BsaXQoJ1xcbicpO1xuICAgICAgdmFyIHMgPSBzYW1wbGVMaW5lcy5sZW5ndGggLSAxO1xuICAgICAgdmFyIGMgPSBjb250cm9sTGluZXMubGVuZ3RoIC0gMTtcblxuICAgICAgd2hpbGUgKHMgPj0gMSAmJiBjID49IDAgJiYgc2FtcGxlTGluZXNbc10gIT09IGNvbnRyb2xMaW5lc1tjXSkge1xuICAgICAgICAvLyBXZSBleHBlY3QgYXQgbGVhc3Qgb25lIHN0YWNrIGZyYW1lIHRvIGJlIHNoYXJlZC5cbiAgICAgICAgLy8gVHlwaWNhbGx5IHRoaXMgd2lsbCBiZSB0aGUgcm9vdCBtb3N0IG9uZS4gSG93ZXZlciwgc3RhY2sgZnJhbWVzIG1heSBiZVxuICAgICAgICAvLyBjdXQgb2ZmIGR1ZSB0byBtYXhpbXVtIHN0YWNrIGxpbWl0cy4gSW4gdGhpcyBjYXNlLCBvbmUgbWF5YmUgY3V0IG9mZlxuICAgICAgICAvLyBlYXJsaWVyIHRoYW4gdGhlIG90aGVyLiBXZSBhc3N1bWUgdGhhdCB0aGUgc2FtcGxlIGlzIGxvbmdlciBvciB0aGUgc2FtZVxuICAgICAgICAvLyBhbmQgdGhlcmUgZm9yIGN1dCBvZmYgZWFybGllci4gU28gd2Ugc2hvdWxkIGZpbmQgdGhlIHJvb3QgbW9zdCBmcmFtZSBpblxuICAgICAgICAvLyB0aGUgc2FtcGxlIHNvbWV3aGVyZSBpbiB0aGUgY29udHJvbC5cbiAgICAgICAgYy0tO1xuICAgICAgfVxuXG4gICAgICBmb3IgKDsgcyA+PSAxICYmIGMgPj0gMDsgcy0tLCBjLS0pIHtcbiAgICAgICAgLy8gTmV4dCB3ZSBmaW5kIHRoZSBmaXJzdCBvbmUgdGhhdCBpc24ndCB0aGUgc2FtZSB3aGljaCBzaG91bGQgYmUgdGhlXG4gICAgICAgIC8vIGZyYW1lIHRoYXQgY2FsbGVkIG91ciBzYW1wbGUgZnVuY3Rpb24gYW5kIHRoZSBjb250cm9sLlxuICAgICAgICBpZiAoc2FtcGxlTGluZXNbc10gIT09IGNvbnRyb2xMaW5lc1tjXSkge1xuICAgICAgICAgIC8vIEluIFY4LCB0aGUgZmlyc3QgbGluZSBpcyBkZXNjcmliaW5nIHRoZSBtZXNzYWdlIGJ1dCBvdGhlciBWTXMgZG9uJ3QuXG4gICAgICAgICAgLy8gSWYgd2UncmUgYWJvdXQgdG8gcmV0dXJuIHRoZSBmaXJzdCBsaW5lLCBhbmQgdGhlIGNvbnRyb2wgaXMgYWxzbyBvbiB0aGUgc2FtZVxuICAgICAgICAgIC8vIGxpbmUsIHRoYXQncyBhIHByZXR0eSBnb29kIGluZGljYXRvciB0aGF0IG91ciBzYW1wbGUgdGhyZXcgYXQgc2FtZSBsaW5lIGFzXG4gICAgICAgICAgLy8gdGhlIGNvbnRyb2wuIEkuZS4gYmVmb3JlIHdlIGVudGVyZWQgdGhlIHNhbXBsZSBmcmFtZS4gU28gd2UgaWdub3JlIHRoaXMgcmVzdWx0LlxuICAgICAgICAgIC8vIFRoaXMgY2FuIGhhcHBlbiBpZiB5b3UgcGFzc2VkIGEgY2xhc3MgdG8gZnVuY3Rpb24gY29tcG9uZW50LCBvciBub24tZnVuY3Rpb24uXG4gICAgICAgICAgaWYgKHMgIT09IDEgfHwgYyAhPT0gMSkge1xuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICBzLS07XG4gICAgICAgICAgICAgIGMtLTsgLy8gV2UgbWF5IHN0aWxsIGhhdmUgc2ltaWxhciBpbnRlcm1lZGlhdGUgZnJhbWVzIGZyb20gdGhlIGNvbnN0cnVjdCBjYWxsLlxuICAgICAgICAgICAgICAvLyBUaGUgbmV4dCBvbmUgdGhhdCBpc24ndCB0aGUgc2FtZSBzaG91bGQgYmUgb3VyIG1hdGNoIHRob3VnaC5cblxuICAgICAgICAgICAgICBpZiAoYyA8IDAgfHwgc2FtcGxlTGluZXNbc10gIT09IGNvbnRyb2xMaW5lc1tjXSkge1xuICAgICAgICAgICAgICAgIC8vIFY4IGFkZHMgYSBcIm5ld1wiIHByZWZpeCBmb3IgbmF0aXZlIGNsYXNzZXMuIExldCdzIHJlbW92ZSBpdCB0byBtYWtlIGl0IHByZXR0aWVyLlxuICAgICAgICAgICAgICAgIHZhciBfZnJhbWUgPSAnXFxuJyArIHNhbXBsZUxpbmVzW3NdLnJlcGxhY2UoJyBhdCBuZXcgJywgJyBhdCAnKTtcblxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50RnJhbWVDYWNoZS5zZXQoZm4sIF9mcmFtZSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSAvLyBSZXR1cm4gdGhlIGxpbmUgd2UgZm91bmQuXG5cblxuICAgICAgICAgICAgICAgIHJldHVybiBfZnJhbWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gd2hpbGUgKHMgPj0gMSAmJiBjID49IDApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIHJlZW50cnkgPSBmYWxzZTtcblxuICAgIHtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldmlvdXNEaXNwYXRjaGVyO1xuICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgfVxuXG4gICAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSBwcmV2aW91c1ByZXBhcmVTdGFja1RyYWNlO1xuICB9IC8vIEZhbGxiYWNrIHRvIGp1c3QgdXNpbmcgdGhlIG5hbWUgaWYgd2UgY291bGRuJ3QgbWFrZSBpdCB0aHJvdy5cblxuXG4gIHZhciBuYW1lID0gZm4gPyBmbi5kaXNwbGF5TmFtZSB8fCBmbi5uYW1lIDogJyc7XG4gIHZhciBzeW50aGV0aWNGcmFtZSA9IG5hbWUgPyBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShuYW1lKSA6ICcnO1xuXG4gIHtcbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb21wb25lbnRGcmFtZUNhY2hlLnNldChmbiwgc3ludGhldGljRnJhbWUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzeW50aGV0aWNGcmFtZTtcbn1cbmZ1bmN0aW9uIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZShmbiwgc291cmNlLCBvd25lckZuKSB7XG4gIHtcbiAgICByZXR1cm4gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZShmbiwgZmFsc2UpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNob3VsZENvbnN0cnVjdChDb21wb25lbnQpIHtcbiAgdmFyIHByb3RvdHlwZSA9IENvbXBvbmVudC5wcm90b3R5cGU7XG4gIHJldHVybiAhIShwcm90b3R5cGUgJiYgcHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQpO1xufVxuXG5mdW5jdGlvbiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYodHlwZSwgc291cmNlLCBvd25lckZuKSB7XG5cbiAgaWYgKHR5cGUgPT0gbnVsbCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHtcbiAgICAgIHJldHVybiBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKHR5cGUsIHNob3VsZENvbnN0cnVjdCh0eXBlKSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSh0eXBlKTtcbiAgfVxuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgZXhwb3J0cy5TdXNwZW5zZTpcbiAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSgnU3VzcGVuc2UnKTtcblxuICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKCdTdXNwZW5zZUxpc3QnKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICBzd2l0Y2ggKHR5cGUuJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgcmV0dXJuIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZSh0eXBlLnJlbmRlcik7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAvLyBNZW1vIG1heSBjb250YWluIGFueSBjb21wb25lbnQgdHlwZSBzbyB3ZSByZWN1cnNpdmVseSByZXNvbHZlIGl0LlxuICAgICAgICByZXR1cm4gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKHR5cGUudHlwZSwgc291cmNlLCBvd25lckZuKTtcblxuICAgICAgY2FzZSBSRUFDVF9CTE9DS19UWVBFOlxuICAgICAgICByZXR1cm4gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKHR5cGUuX3JlbmRlcik7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIGxhenlDb21wb25lbnQgPSB0eXBlO1xuICAgICAgICAgIHZhciBwYXlsb2FkID0gbGF6eUNvbXBvbmVudC5fcGF5bG9hZDtcbiAgICAgICAgICB2YXIgaW5pdCA9IGxhenlDb21wb25lbnQuX2luaXQ7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gTGF6eSBtYXkgY29udGFpbiBhbnkgY29tcG9uZW50IHR5cGUgc28gd2UgcmVjdXJzaXZlbHkgcmVzb2x2ZSBpdC5cbiAgICAgICAgICAgIHJldHVybiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYoaW5pdChwYXlsb2FkKSwgc291cmNlLCBvd25lckZuKTtcbiAgICAgICAgICB9IGNhdGNoICh4KSB7fVxuICAgICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG52YXIgbG9nZ2VkVHlwZUZhaWx1cmVzID0ge307XG52YXIgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSQxID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcblxuZnVuY3Rpb24gc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZWxlbWVudCkge1xuICB7XG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIHZhciBvd25lciA9IGVsZW1lbnQuX293bmVyO1xuICAgICAgdmFyIHN0YWNrID0gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKGVsZW1lbnQudHlwZSwgZWxlbWVudC5fc291cmNlLCBvd25lciA/IG93bmVyLnR5cGUgOiBudWxsKTtcbiAgICAgIFJlYWN0RGVidWdDdXJyZW50RnJhbWUkMS5zZXRFeHRyYVN0YWNrRnJhbWUoc3RhY2spO1xuICAgIH0gZWxzZSB7XG4gICAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lJDEuc2V0RXh0cmFTdGFja0ZyYW1lKG51bGwpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja1Byb3BUeXBlcyh0eXBlU3BlY3MsIHZhbHVlcywgbG9jYXRpb24sIGNvbXBvbmVudE5hbWUsIGVsZW1lbnQpIHtcbiAge1xuICAgIC8vICRGbG93Rml4TWUgVGhpcyBpcyBva2F5IGJ1dCBGbG93IGRvZXNuJ3Qga25vdyBpdC5cbiAgICB2YXIgaGFzID0gRnVuY3Rpb24uY2FsbC5iaW5kKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpO1xuXG4gICAgZm9yICh2YXIgdHlwZVNwZWNOYW1lIGluIHR5cGVTcGVjcykge1xuICAgICAgaWYgKGhhcyh0eXBlU3BlY3MsIHR5cGVTcGVjTmFtZSkpIHtcbiAgICAgICAgdmFyIGVycm9yJDEgPSB2b2lkIDA7IC8vIFByb3AgdHlwZSB2YWxpZGF0aW9uIG1heSB0aHJvdy4gSW4gY2FzZSB0aGV5IGRvLCB3ZSBkb24ndCB3YW50IHRvXG4gICAgICAgIC8vIGZhaWwgdGhlIHJlbmRlciBwaGFzZSB3aGVyZSBpdCBkaWRuJ3QgZmFpbCBiZWZvcmUuIFNvIHdlIGxvZyBpdC5cbiAgICAgICAgLy8gQWZ0ZXIgdGhlc2UgaGF2ZSBiZWVuIGNsZWFuZWQgdXAsIHdlJ2xsIGxldCB0aGVtIHRocm93LlxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBpbnRlbnRpb25hbGx5IGFuIGludmFyaWFudCB0aGF0IGdldHMgY2F1Z2h0LiBJdCdzIHRoZSBzYW1lXG4gICAgICAgICAgLy8gYmVoYXZpb3IgYXMgd2l0aG91dCB0aGlzIHN0YXRlbWVudCBleGNlcHQgd2l0aCBhIGJldHRlciBtZXNzYWdlLlxuICAgICAgICAgIGlmICh0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHZhciBlcnIgPSBFcnJvcigoY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnKSArICc6ICcgKyBsb2NhdGlvbiArICcgdHlwZSBgJyArIHR5cGVTcGVjTmFtZSArICdgIGlzIGludmFsaWQ7ICcgKyAnaXQgbXVzdCBiZSBhIGZ1bmN0aW9uLCB1c3VhbGx5IGZyb20gdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLCBidXQgcmVjZWl2ZWQgYCcgKyB0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gKyAnYC4nICsgJ1RoaXMgb2Z0ZW4gaGFwcGVucyBiZWNhdXNlIG9mIHR5cG9zIHN1Y2ggYXMgYFByb3BUeXBlcy5mdW5jdGlvbmAgaW5zdGVhZCBvZiBgUHJvcFR5cGVzLmZ1bmNgLicpO1xuICAgICAgICAgICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZXJyb3IkMSA9IHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdKHZhbHVlcywgdHlwZVNwZWNOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgbnVsbCwgJ1NFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEJyk7XG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgZXJyb3IkMSA9IGV4O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVycm9yJDEgJiYgIShlcnJvciQxIGluc3RhbmNlb2YgRXJyb3IpKSB7XG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZWxlbWVudCk7XG5cbiAgICAgICAgICBlcnJvcignJXM6IHR5cGUgc3BlY2lmaWNhdGlvbiBvZiAlcycgKyAnIGAlc2AgaXMgaW52YWxpZDsgdGhlIHR5cGUgY2hlY2tlciAnICsgJ2Z1bmN0aW9uIG11c3QgcmV0dXJuIGBudWxsYCBvciBhbiBgRXJyb3JgIGJ1dCByZXR1cm5lZCBhICVzLiAnICsgJ1lvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gcGFzcyBhbiBhcmd1bWVudCB0byB0aGUgdHlwZSBjaGVja2VyICcgKyAnY3JlYXRvciAoYXJyYXlPZiwgaW5zdGFuY2VPZiwgb2JqZWN0T2YsIG9uZU9mLCBvbmVPZlR5cGUsIGFuZCAnICsgJ3NoYXBlIGFsbCByZXF1aXJlIGFuIGFyZ3VtZW50KS4nLCBjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycsIGxvY2F0aW9uLCB0eXBlU3BlY05hbWUsIHR5cGVvZiBlcnJvciQxKTtcblxuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KG51bGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVycm9yJDEgaW5zdGFuY2VvZiBFcnJvciAmJiAhKGVycm9yJDEubWVzc2FnZSBpbiBsb2dnZWRUeXBlRmFpbHVyZXMpKSB7XG4gICAgICAgICAgLy8gT25seSBtb25pdG9yIHRoaXMgZmFpbHVyZSBvbmNlIGJlY2F1c2UgdGhlcmUgdGVuZHMgdG8gYmUgYSBsb3Qgb2YgdGhlXG4gICAgICAgICAgLy8gc2FtZSBlcnJvci5cbiAgICAgICAgICBsb2dnZWRUeXBlRmFpbHVyZXNbZXJyb3IkMS5tZXNzYWdlXSA9IHRydWU7XG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZWxlbWVudCk7XG5cbiAgICAgICAgICBlcnJvcignRmFpbGVkICVzIHR5cGU6ICVzJywgbG9jYXRpb24sIGVycm9yJDEubWVzc2FnZSk7XG5cbiAgICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChudWxsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKGVsZW1lbnQpIHtcbiAge1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICB2YXIgb3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgICAgIHZhciBzdGFjayA9IGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVihlbGVtZW50LnR5cGUsIGVsZW1lbnQuX3NvdXJjZSwgb3duZXIgPyBvd25lci50eXBlIDogbnVsbCk7XG4gICAgICBzZXRFeHRyYVN0YWNrRnJhbWUoc3RhY2spO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRFeHRyYVN0YWNrRnJhbWUobnVsbCk7XG4gICAgfVxuICB9XG59XG5cbnZhciBwcm9wVHlwZXNNaXNzcGVsbFdhcm5pbmdTaG93bjtcblxue1xuICBwcm9wVHlwZXNNaXNzcGVsbFdhcm5pbmdTaG93biA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKSB7XG4gIGlmIChSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50KSB7XG4gICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lKFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQudHlwZSk7XG5cbiAgICBpZiAobmFtZSkge1xuICAgICAgcmV0dXJuICdcXG5cXG5DaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgJyArIG5hbWUgKyAnYC4nO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAnJztcbn1cblxuZnVuY3Rpb24gZ2V0U291cmNlSW5mb0Vycm9yQWRkZW5kdW0oc291cmNlKSB7XG4gIGlmIChzb3VyY2UgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBmaWxlTmFtZSA9IHNvdXJjZS5maWxlTmFtZS5yZXBsYWNlKC9eLipbXFxcXFxcL10vLCAnJyk7XG4gICAgdmFyIGxpbmVOdW1iZXIgPSBzb3VyY2UubGluZU51bWJlcjtcbiAgICByZXR1cm4gJ1xcblxcbkNoZWNrIHlvdXIgY29kZSBhdCAnICsgZmlsZU5hbWUgKyAnOicgKyBsaW5lTnVtYmVyICsgJy4nO1xuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG5mdW5jdGlvbiBnZXRTb3VyY2VJbmZvRXJyb3JBZGRlbmR1bUZvclByb3BzKGVsZW1lbnRQcm9wcykge1xuICBpZiAoZWxlbWVudFByb3BzICE9PSBudWxsICYmIGVsZW1lbnRQcm9wcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGdldFNvdXJjZUluZm9FcnJvckFkZGVuZHVtKGVsZW1lbnRQcm9wcy5fX3NvdXJjZSk7XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG4vKipcbiAqIFdhcm4gaWYgdGhlcmUncyBubyBrZXkgZXhwbGljaXRseSBzZXQgb24gZHluYW1pYyBhcnJheXMgb2YgY2hpbGRyZW4gb3JcbiAqIG9iamVjdCBrZXlzIGFyZSBub3QgdmFsaWQuIFRoaXMgYWxsb3dzIHVzIHRvIGtlZXAgdHJhY2sgb2YgY2hpbGRyZW4gYmV0d2VlblxuICogdXBkYXRlcy5cbiAqL1xuXG5cbnZhciBvd25lckhhc0tleVVzZVdhcm5pbmcgPSB7fTtcblxuZnVuY3Rpb24gZ2V0Q3VycmVudENvbXBvbmVudEVycm9ySW5mbyhwYXJlbnRUeXBlKSB7XG4gIHZhciBpbmZvID0gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCk7XG5cbiAgaWYgKCFpbmZvKSB7XG4gICAgdmFyIHBhcmVudE5hbWUgPSB0eXBlb2YgcGFyZW50VHlwZSA9PT0gJ3N0cmluZycgPyBwYXJlbnRUeXBlIDogcGFyZW50VHlwZS5kaXNwbGF5TmFtZSB8fCBwYXJlbnRUeXBlLm5hbWU7XG5cbiAgICBpZiAocGFyZW50TmFtZSkge1xuICAgICAgaW5mbyA9IFwiXFxuXFxuQ2hlY2sgdGhlIHRvcC1sZXZlbCByZW5kZXIgY2FsbCB1c2luZyA8XCIgKyBwYXJlbnROYW1lICsgXCI+LlwiO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpbmZvO1xufVxuLyoqXG4gKiBXYXJuIGlmIHRoZSBlbGVtZW50IGRvZXNuJ3QgaGF2ZSBhbiBleHBsaWNpdCBrZXkgYXNzaWduZWQgdG8gaXQuXG4gKiBUaGlzIGVsZW1lbnQgaXMgaW4gYW4gYXJyYXkuIFRoZSBhcnJheSBjb3VsZCBncm93IGFuZCBzaHJpbmsgb3IgYmVcbiAqIHJlb3JkZXJlZC4gQWxsIGNoaWxkcmVuIHRoYXQgaGF2ZW4ndCBhbHJlYWR5IGJlZW4gdmFsaWRhdGVkIGFyZSByZXF1aXJlZCB0b1xuICogaGF2ZSBhIFwia2V5XCIgcHJvcGVydHkgYXNzaWduZWQgdG8gaXQuIEVycm9yIHN0YXR1c2VzIGFyZSBjYWNoZWQgc28gYSB3YXJuaW5nXG4gKiB3aWxsIG9ubHkgYmUgc2hvd24gb25jZS5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBlbGVtZW50IEVsZW1lbnQgdGhhdCByZXF1aXJlcyBhIGtleS5cbiAqIEBwYXJhbSB7Kn0gcGFyZW50VHlwZSBlbGVtZW50J3MgcGFyZW50J3MgdHlwZS5cbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlRXhwbGljaXRLZXkoZWxlbWVudCwgcGFyZW50VHlwZSkge1xuICBpZiAoIWVsZW1lbnQuX3N0b3JlIHx8IGVsZW1lbnQuX3N0b3JlLnZhbGlkYXRlZCB8fCBlbGVtZW50LmtleSAhPSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZWxlbWVudC5fc3RvcmUudmFsaWRhdGVkID0gdHJ1ZTtcbiAgdmFyIGN1cnJlbnRDb21wb25lbnRFcnJvckluZm8gPSBnZXRDdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvKHBhcmVudFR5cGUpO1xuXG4gIGlmIChvd25lckhhc0tleVVzZVdhcm5pbmdbY3VycmVudENvbXBvbmVudEVycm9ySW5mb10pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBvd25lckhhc0tleVVzZVdhcm5pbmdbY3VycmVudENvbXBvbmVudEVycm9ySW5mb10gPSB0cnVlOyAvLyBVc3VhbGx5IHRoZSBjdXJyZW50IG93bmVyIGlzIHRoZSBvZmZlbmRlciwgYnV0IGlmIGl0IGFjY2VwdHMgY2hpbGRyZW4gYXMgYVxuICAvLyBwcm9wZXJ0eSwgaXQgbWF5IGJlIHRoZSBjcmVhdG9yIG9mIHRoZSBjaGlsZCB0aGF0J3MgcmVzcG9uc2libGUgZm9yXG4gIC8vIGFzc2lnbmluZyBpdCBhIGtleS5cblxuICB2YXIgY2hpbGRPd25lciA9ICcnO1xuXG4gIGlmIChlbGVtZW50ICYmIGVsZW1lbnQuX293bmVyICYmIGVsZW1lbnQuX293bmVyICE9PSBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50KSB7XG4gICAgLy8gR2l2ZSB0aGUgY29tcG9uZW50IHRoYXQgb3JpZ2luYWxseSBjcmVhdGVkIHRoaXMgY2hpbGQuXG4gICAgY2hpbGRPd25lciA9IFwiIEl0IHdhcyBwYXNzZWQgYSBjaGlsZCBmcm9tIFwiICsgZ2V0Q29tcG9uZW50TmFtZShlbGVtZW50Ll9vd25lci50eXBlKSArIFwiLlwiO1xuICB9XG5cbiAge1xuICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEoZWxlbWVudCk7XG5cbiAgICBlcnJvcignRWFjaCBjaGlsZCBpbiBhIGxpc3Qgc2hvdWxkIGhhdmUgYSB1bmlxdWUgXCJrZXlcIiBwcm9wLicgKyAnJXMlcyBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3dhcm5pbmcta2V5cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4nLCBjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvLCBjaGlsZE93bmVyKTtcblxuICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEobnVsbCk7XG4gIH1cbn1cbi8qKlxuICogRW5zdXJlIHRoYXQgZXZlcnkgZWxlbWVudCBlaXRoZXIgaXMgcGFzc2VkIGluIGEgc3RhdGljIGxvY2F0aW9uLCBpbiBhblxuICogYXJyYXkgd2l0aCBhbiBleHBsaWNpdCBrZXlzIHByb3BlcnR5IGRlZmluZWQsIG9yIGluIGFuIG9iamVjdCBsaXRlcmFsXG4gKiB3aXRoIHZhbGlkIGtleSBwcm9wZXJ0eS5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqIEBwYXJhbSB7UmVhY3ROb2RlfSBub2RlIFN0YXRpY2FsbHkgcGFzc2VkIGNoaWxkIG9mIGFueSB0eXBlLlxuICogQHBhcmFtIHsqfSBwYXJlbnRUeXBlIG5vZGUncyBwYXJlbnQncyB0eXBlLlxuICovXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVDaGlsZEtleXMobm9kZSwgcGFyZW50VHlwZSkge1xuICBpZiAodHlwZW9mIG5vZGUgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkobm9kZSkpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjaGlsZCA9IG5vZGVbaV07XG5cbiAgICAgIGlmIChpc1ZhbGlkRWxlbWVudChjaGlsZCkpIHtcbiAgICAgICAgdmFsaWRhdGVFeHBsaWNpdEtleShjaGlsZCwgcGFyZW50VHlwZSk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzVmFsaWRFbGVtZW50KG5vZGUpKSB7XG4gICAgLy8gVGhpcyBlbGVtZW50IHdhcyBwYXNzZWQgaW4gYSB2YWxpZCBsb2NhdGlvbi5cbiAgICBpZiAobm9kZS5fc3RvcmUpIHtcbiAgICAgIG5vZGUuX3N0b3JlLnZhbGlkYXRlZCA9IHRydWU7XG4gICAgfVxuICB9IGVsc2UgaWYgKG5vZGUpIHtcbiAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4obm9kZSk7XG5cbiAgICBpZiAodHlwZW9mIGl0ZXJhdG9yRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIC8vIEVudHJ5IGl0ZXJhdG9ycyB1c2VkIHRvIHByb3ZpZGUgaW1wbGljaXQga2V5cyxcbiAgICAgIC8vIGJ1dCBub3cgd2UgcHJpbnQgYSBzZXBhcmF0ZSB3YXJuaW5nIGZvciB0aGVtIGxhdGVyLlxuICAgICAgaWYgKGl0ZXJhdG9yRm4gIT09IG5vZGUuZW50cmllcykge1xuICAgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwobm9kZSk7XG4gICAgICAgIHZhciBzdGVwO1xuXG4gICAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcbiAgICAgICAgICBpZiAoaXNWYWxpZEVsZW1lbnQoc3RlcC52YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbGlkYXRlRXhwbGljaXRLZXkoc3RlcC52YWx1ZSwgcGFyZW50VHlwZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4vKipcbiAqIEdpdmVuIGFuIGVsZW1lbnQsIHZhbGlkYXRlIHRoYXQgaXRzIHByb3BzIGZvbGxvdyB0aGUgcHJvcFR5cGVzIGRlZmluaXRpb24sXG4gKiBwcm92aWRlZCBieSB0aGUgdHlwZS5cbiAqXG4gKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZWxlbWVudFxuICovXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVQcm9wVHlwZXMoZWxlbWVudCkge1xuICB7XG4gICAgdmFyIHR5cGUgPSBlbGVtZW50LnR5cGU7XG5cbiAgICBpZiAodHlwZSA9PT0gbnVsbCB8fCB0eXBlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHByb3BUeXBlcztcblxuICAgIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcHJvcFR5cGVzID0gdHlwZS5wcm9wVHlwZXM7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgfHwgLy8gTm90ZTogTWVtbyBvbmx5IGNoZWNrcyBvdXRlciBwcm9wcyBoZXJlLlxuICAgIC8vIElubmVyIHByb3BzIGFyZSBjaGVja2VkIGluIHRoZSByZWNvbmNpbGVyLlxuICAgIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX01FTU9fVFlQRSkpIHtcbiAgICAgIHByb3BUeXBlcyA9IHR5cGUucHJvcFR5cGVzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHByb3BUeXBlcykge1xuICAgICAgLy8gSW50ZW50aW9uYWxseSBpbnNpZGUgdG8gYXZvaWQgdHJpZ2dlcmluZyBsYXp5IGluaXRpYWxpemVyczpcbiAgICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZSh0eXBlKTtcbiAgICAgIGNoZWNrUHJvcFR5cGVzKHByb3BUeXBlcywgZWxlbWVudC5wcm9wcywgJ3Byb3AnLCBuYW1lLCBlbGVtZW50KTtcbiAgICB9IGVsc2UgaWYgKHR5cGUuUHJvcFR5cGVzICE9PSB1bmRlZmluZWQgJiYgIXByb3BUeXBlc01pc3NwZWxsV2FybmluZ1Nob3duKSB7XG4gICAgICBwcm9wVHlwZXNNaXNzcGVsbFdhcm5pbmdTaG93biA9IHRydWU7IC8vIEludGVudGlvbmFsbHkgaW5zaWRlIHRvIGF2b2lkIHRyaWdnZXJpbmcgbGF6eSBpbml0aWFsaXplcnM6XG5cbiAgICAgIHZhciBfbmFtZSA9IGdldENvbXBvbmVudE5hbWUodHlwZSk7XG5cbiAgICAgIGVycm9yKCdDb21wb25lbnQgJXMgZGVjbGFyZWQgYFByb3BUeXBlc2AgaW5zdGVhZCBvZiBgcHJvcFR5cGVzYC4gRGlkIHlvdSBtaXNzcGVsbCB0aGUgcHJvcGVydHkgYXNzaWdubWVudD8nLCBfbmFtZSB8fCAnVW5rbm93bicpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdHlwZS5nZXREZWZhdWx0UHJvcHMgPT09ICdmdW5jdGlvbicgJiYgIXR5cGUuZ2V0RGVmYXVsdFByb3BzLmlzUmVhY3RDbGFzc0FwcHJvdmVkKSB7XG4gICAgICBlcnJvcignZ2V0RGVmYXVsdFByb3BzIGlzIG9ubHkgdXNlZCBvbiBjbGFzc2ljIFJlYWN0LmNyZWF0ZUNsYXNzICcgKyAnZGVmaW5pdGlvbnMuIFVzZSBhIHN0YXRpYyBwcm9wZXJ0eSBuYW1lZCBgZGVmYXVsdFByb3BzYCBpbnN0ZWFkLicpO1xuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBHaXZlbiBhIGZyYWdtZW50LCB2YWxpZGF0ZSB0aGF0IGl0IGNhbiBvbmx5IGJlIHByb3ZpZGVkIHdpdGggZnJhZ21lbnQgcHJvcHNcbiAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBmcmFnbWVudFxuICovXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVGcmFnbWVudFByb3BzKGZyYWdtZW50KSB7XG4gIHtcbiAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGZyYWdtZW50LnByb3BzKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IGtleXNbaV07XG5cbiAgICAgIGlmIChrZXkgIT09ICdjaGlsZHJlbicgJiYga2V5ICE9PSAna2V5Jykge1xuICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKGZyYWdtZW50KTtcblxuICAgICAgICBlcnJvcignSW52YWxpZCBwcm9wIGAlc2Agc3VwcGxpZWQgdG8gYFJlYWN0LkZyYWdtZW50YC4gJyArICdSZWFjdC5GcmFnbWVudCBjYW4gb25seSBoYXZlIGBrZXlgIGFuZCBgY2hpbGRyZW5gIHByb3BzLicsIGtleSk7XG5cbiAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShudWxsKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGZyYWdtZW50LnJlZiAhPT0gbnVsbCkge1xuICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShmcmFnbWVudCk7XG5cbiAgICAgIGVycm9yKCdJbnZhbGlkIGF0dHJpYnV0ZSBgcmVmYCBzdXBwbGllZCB0byBgUmVhY3QuRnJhZ21lbnRgLicpO1xuXG4gICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKG51bGwpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gY3JlYXRlRWxlbWVudFdpdGhWYWxpZGF0aW9uKHR5cGUsIHByb3BzLCBjaGlsZHJlbikge1xuICB2YXIgdmFsaWRUeXBlID0gaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpOyAvLyBXZSB3YXJuIGluIHRoaXMgY2FzZSBidXQgZG9uJ3QgdGhyb3cuIFdlIGV4cGVjdCB0aGUgZWxlbWVudCBjcmVhdGlvbiB0b1xuICAvLyBzdWNjZWVkIGFuZCB0aGVyZSB3aWxsIGxpa2VseSBiZSBlcnJvcnMgaW4gcmVuZGVyLlxuXG4gIGlmICghdmFsaWRUeXBlKSB7XG4gICAgdmFyIGluZm8gPSAnJztcblxuICAgIGlmICh0eXBlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwgJiYgT2JqZWN0LmtleXModHlwZSkubGVuZ3RoID09PSAwKSB7XG4gICAgICBpbmZvICs9ICcgWW91IGxpa2VseSBmb3Jnb3QgdG8gZXhwb3J0IHlvdXIgY29tcG9uZW50IGZyb20gdGhlIGZpbGUgJyArIFwiaXQncyBkZWZpbmVkIGluLCBvciB5b3UgbWlnaHQgaGF2ZSBtaXhlZCB1cCBkZWZhdWx0IGFuZCBuYW1lZCBpbXBvcnRzLlwiO1xuICAgIH1cblxuICAgIHZhciBzb3VyY2VJbmZvID0gZ2V0U291cmNlSW5mb0Vycm9yQWRkZW5kdW1Gb3JQcm9wcyhwcm9wcyk7XG5cbiAgICBpZiAoc291cmNlSW5mbykge1xuICAgICAgaW5mbyArPSBzb3VyY2VJbmZvO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbmZvICs9IGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpO1xuICAgIH1cblxuICAgIHZhciB0eXBlU3RyaW5nO1xuXG4gICAgaWYgKHR5cGUgPT09IG51bGwpIHtcbiAgICAgIHR5cGVTdHJpbmcgPSAnbnVsbCc7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHR5cGUpKSB7XG4gICAgICB0eXBlU3RyaW5nID0gJ2FycmF5JztcbiAgICB9IGVsc2UgaWYgKHR5cGUgIT09IHVuZGVmaW5lZCAmJiB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEUpIHtcbiAgICAgIHR5cGVTdHJpbmcgPSBcIjxcIiArIChnZXRDb21wb25lbnROYW1lKHR5cGUudHlwZSkgfHwgJ1Vua25vd24nKSArIFwiIC8+XCI7XG4gICAgICBpbmZvID0gJyBEaWQgeW91IGFjY2lkZW50YWxseSBleHBvcnQgYSBKU1ggbGl0ZXJhbCBpbnN0ZWFkIG9mIGEgY29tcG9uZW50Pyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHR5cGVTdHJpbmcgPSB0eXBlb2YgdHlwZTtcbiAgICB9XG5cbiAgICB7XG4gICAgICBlcnJvcignUmVhY3QuY3JlYXRlRWxlbWVudDogdHlwZSBpcyBpbnZhbGlkIC0tIGV4cGVjdGVkIGEgc3RyaW5nIChmb3IgJyArICdidWlsdC1pbiBjb21wb25lbnRzKSBvciBhIGNsYXNzL2Z1bmN0aW9uIChmb3IgY29tcG9zaXRlICcgKyAnY29tcG9uZW50cykgYnV0IGdvdDogJXMuJXMnLCB0eXBlU3RyaW5nLCBpbmZvKTtcbiAgICB9XG4gIH1cblxuICB2YXIgZWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgLy8gVGhlIHJlc3VsdCBjYW4gYmUgbnVsbGlzaCBpZiBhIG1vY2sgb3IgYSBjdXN0b20gZnVuY3Rpb24gaXMgdXNlZC5cbiAgLy8gVE9ETzogRHJvcCB0aGlzIHdoZW4gdGhlc2UgYXJlIG5vIGxvbmdlciBhbGxvd2VkIGFzIHRoZSB0eXBlIGFyZ3VtZW50LlxuXG4gIGlmIChlbGVtZW50ID09IG51bGwpIHtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfSAvLyBTa2lwIGtleSB3YXJuaW5nIGlmIHRoZSB0eXBlIGlzbid0IHZhbGlkIHNpbmNlIG91ciBrZXkgdmFsaWRhdGlvbiBsb2dpY1xuICAvLyBkb2Vzbid0IGV4cGVjdCBhIG5vbi1zdHJpbmcvZnVuY3Rpb24gdHlwZSBhbmQgY2FuIHRocm93IGNvbmZ1c2luZyBlcnJvcnMuXG4gIC8vIFdlIGRvbid0IHdhbnQgZXhjZXB0aW9uIGJlaGF2aW9yIHRvIGRpZmZlciBiZXR3ZWVuIGRldiBhbmQgcHJvZC5cbiAgLy8gKFJlbmRlcmluZyB3aWxsIHRocm93IHdpdGggYSBoZWxwZnVsIG1lc3NhZ2UgYW5kIGFzIHNvb24gYXMgdGhlIHR5cGUgaXNcbiAgLy8gZml4ZWQsIHRoZSBrZXkgd2FybmluZ3Mgd2lsbCBhcHBlYXIuKVxuXG5cbiAgaWYgKHZhbGlkVHlwZSkge1xuICAgIGZvciAodmFyIGkgPSAyOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YWxpZGF0ZUNoaWxkS2V5cyhhcmd1bWVudHNbaV0sIHR5cGUpO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlID09PSBleHBvcnRzLkZyYWdtZW50KSB7XG4gICAgdmFsaWRhdGVGcmFnbWVudFByb3BzKGVsZW1lbnQpO1xuICB9IGVsc2Uge1xuICAgIHZhbGlkYXRlUHJvcFR5cGVzKGVsZW1lbnQpO1xuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQ7XG59XG52YXIgZGlkV2FybkFib3V0RGVwcmVjYXRlZENyZWF0ZUZhY3RvcnkgPSBmYWxzZTtcbmZ1bmN0aW9uIGNyZWF0ZUZhY3RvcnlXaXRoVmFsaWRhdGlvbih0eXBlKSB7XG4gIHZhciB2YWxpZGF0ZWRGYWN0b3J5ID0gY3JlYXRlRWxlbWVudFdpdGhWYWxpZGF0aW9uLmJpbmQobnVsbCwgdHlwZSk7XG4gIHZhbGlkYXRlZEZhY3RvcnkudHlwZSA9IHR5cGU7XG5cbiAge1xuICAgIGlmICghZGlkV2FybkFib3V0RGVwcmVjYXRlZENyZWF0ZUZhY3RvcnkpIHtcbiAgICAgIGRpZFdhcm5BYm91dERlcHJlY2F0ZWRDcmVhdGVGYWN0b3J5ID0gdHJ1ZTtcblxuICAgICAgd2FybignUmVhY3QuY3JlYXRlRmFjdG9yeSgpIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiAnICsgJ2EgZnV0dXJlIG1ham9yIHJlbGVhc2UuIENvbnNpZGVyIHVzaW5nIEpTWCAnICsgJ29yIHVzZSBSZWFjdC5jcmVhdGVFbGVtZW50KCkgZGlyZWN0bHkgaW5zdGVhZC4nKTtcbiAgICB9IC8vIExlZ2FjeSBob29rOiByZW1vdmUgaXRcblxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHZhbGlkYXRlZEZhY3RvcnksICd0eXBlJywge1xuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgd2FybignRmFjdG9yeS50eXBlIGlzIGRlcHJlY2F0ZWQuIEFjY2VzcyB0aGUgY2xhc3MgZGlyZWN0bHkgJyArICdiZWZvcmUgcGFzc2luZyBpdCB0byBjcmVhdGVGYWN0b3J5LicpO1xuXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAndHlwZScsIHtcbiAgICAgICAgICB2YWx1ZTogdHlwZVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gdmFsaWRhdGVkRmFjdG9yeTtcbn1cbmZ1bmN0aW9uIGNsb25lRWxlbWVudFdpdGhWYWxpZGF0aW9uKGVsZW1lbnQsIHByb3BzLCBjaGlsZHJlbikge1xuICB2YXIgbmV3RWxlbWVudCA9IGNsb25lRWxlbWVudC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gIGZvciAodmFyIGkgPSAyOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFsaWRhdGVDaGlsZEtleXMoYXJndW1lbnRzW2ldLCBuZXdFbGVtZW50LnR5cGUpO1xuICB9XG5cbiAgdmFsaWRhdGVQcm9wVHlwZXMobmV3RWxlbWVudCk7XG4gIHJldHVybiBuZXdFbGVtZW50O1xufVxuXG57XG5cbiAgdHJ5IHtcbiAgICB2YXIgZnJvemVuT2JqZWN0ID0gT2JqZWN0LmZyZWV6ZSh7fSk7XG4gICAgLyogZXNsaW50LWRpc2FibGUgbm8tbmV3ICovXG5cbiAgICBuZXcgTWFwKFtbZnJvemVuT2JqZWN0LCBudWxsXV0pO1xuICAgIG5ldyBTZXQoW2Zyb3plbk9iamVjdF0pO1xuICAgIC8qIGVzbGludC1lbmFibGUgbm8tbmV3ICovXG4gIH0gY2F0Y2ggKGUpIHtcbiAgfVxufVxuXG52YXIgY3JlYXRlRWxlbWVudCQxID0gIGNyZWF0ZUVsZW1lbnRXaXRoVmFsaWRhdGlvbiA7XG52YXIgY2xvbmVFbGVtZW50JDEgPSAgY2xvbmVFbGVtZW50V2l0aFZhbGlkYXRpb24gO1xudmFyIGNyZWF0ZUZhY3RvcnkgPSAgY3JlYXRlRmFjdG9yeVdpdGhWYWxpZGF0aW9uIDtcbnZhciBDaGlsZHJlbiA9IHtcbiAgbWFwOiBtYXBDaGlsZHJlbixcbiAgZm9yRWFjaDogZm9yRWFjaENoaWxkcmVuLFxuICBjb3VudDogY291bnRDaGlsZHJlbixcbiAgdG9BcnJheTogdG9BcnJheSxcbiAgb25seTogb25seUNoaWxkXG59O1xuXG5leHBvcnRzLkNoaWxkcmVuID0gQ2hpbGRyZW47XG5leHBvcnRzLkNvbXBvbmVudCA9IENvbXBvbmVudDtcbmV4cG9ydHMuUHVyZUNvbXBvbmVudCA9IFB1cmVDb21wb25lbnQ7XG5leHBvcnRzLl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEID0gUmVhY3RTaGFyZWRJbnRlcm5hbHM7XG5leHBvcnRzLmNsb25lRWxlbWVudCA9IGNsb25lRWxlbWVudCQxO1xuZXhwb3J0cy5jcmVhdGVDb250ZXh0ID0gY3JlYXRlQ29udGV4dDtcbmV4cG9ydHMuY3JlYXRlRWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQkMTtcbmV4cG9ydHMuY3JlYXRlRmFjdG9yeSA9IGNyZWF0ZUZhY3Rvcnk7XG5leHBvcnRzLmNyZWF0ZVJlZiA9IGNyZWF0ZVJlZjtcbmV4cG9ydHMuZm9yd2FyZFJlZiA9IGZvcndhcmRSZWY7XG5leHBvcnRzLmlzVmFsaWRFbGVtZW50ID0gaXNWYWxpZEVsZW1lbnQ7XG5leHBvcnRzLmxhenkgPSBsYXp5O1xuZXhwb3J0cy5tZW1vID0gbWVtbztcbmV4cG9ydHMudXNlQ2FsbGJhY2sgPSB1c2VDYWxsYmFjaztcbmV4cG9ydHMudXNlQ29udGV4dCA9IHVzZUNvbnRleHQ7XG5leHBvcnRzLnVzZURlYnVnVmFsdWUgPSB1c2VEZWJ1Z1ZhbHVlO1xuZXhwb3J0cy51c2VFZmZlY3QgPSB1c2VFZmZlY3Q7XG5leHBvcnRzLnVzZUltcGVyYXRpdmVIYW5kbGUgPSB1c2VJbXBlcmF0aXZlSGFuZGxlO1xuZXhwb3J0cy51c2VMYXlvdXRFZmZlY3QgPSB1c2VMYXlvdXRFZmZlY3Q7XG5leHBvcnRzLnVzZU1lbW8gPSB1c2VNZW1vO1xuZXhwb3J0cy51c2VSZWR1Y2VyID0gdXNlUmVkdWNlcjtcbmV4cG9ydHMudXNlUmVmID0gdXNlUmVmO1xuZXhwb3J0cy51c2VTdGF0ZSA9IHVzZVN0YXRlO1xuZXhwb3J0cy52ZXJzaW9uID0gUmVhY3RWZXJzaW9uO1xuICB9KSgpO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwgIi8qKiBAbGljZW5zZSBSZWFjdCB2MC4yMC4yXG4gKiBzY2hlZHVsZXIuZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgZW5hYmxlU2NoZWR1bGVyRGVidWdnaW5nID0gZmFsc2U7XG52YXIgZW5hYmxlUHJvZmlsaW5nID0gZmFsc2U7XG5cbnZhciByZXF1ZXN0SG9zdENhbGxiYWNrO1xudmFyIHJlcXVlc3RIb3N0VGltZW91dDtcbnZhciBjYW5jZWxIb3N0VGltZW91dDtcbnZhciByZXF1ZXN0UGFpbnQ7XG52YXIgaGFzUGVyZm9ybWFuY2VOb3cgPSB0eXBlb2YgcGVyZm9ybWFuY2UgPT09ICdvYmplY3QnICYmIHR5cGVvZiBwZXJmb3JtYW5jZS5ub3cgPT09ICdmdW5jdGlvbic7XG5cbmlmIChoYXNQZXJmb3JtYW5jZU5vdykge1xuICB2YXIgbG9jYWxQZXJmb3JtYW5jZSA9IHBlcmZvcm1hbmNlO1xuXG4gIGV4cG9ydHMudW5zdGFibGVfbm93ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBsb2NhbFBlcmZvcm1hbmNlLm5vdygpO1xuICB9O1xufSBlbHNlIHtcbiAgdmFyIGxvY2FsRGF0ZSA9IERhdGU7XG4gIHZhciBpbml0aWFsVGltZSA9IGxvY2FsRGF0ZS5ub3coKTtcblxuICBleHBvcnRzLnVuc3RhYmxlX25vdyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbG9jYWxEYXRlLm5vdygpIC0gaW5pdGlhbFRpbWU7XG4gIH07XG59XG5cbmlmICggLy8gSWYgU2NoZWR1bGVyIHJ1bnMgaW4gYSBub24tRE9NIGVudmlyb25tZW50LCBpdCBmYWxscyBiYWNrIHRvIGEgbmFpdmVcbi8vIGltcGxlbWVudGF0aW9uIHVzaW5nIHNldFRpbWVvdXQuXG50eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAvLyBDaGVjayBpZiBNZXNzYWdlQ2hhbm5lbCBpcyBzdXBwb3J0ZWQsIHRvby5cbnR5cGVvZiBNZXNzYWdlQ2hhbm5lbCAhPT0gJ2Z1bmN0aW9uJykge1xuICAvLyBJZiB0aGlzIGFjY2lkZW50YWxseSBnZXRzIGltcG9ydGVkIGluIGEgbm9uLWJyb3dzZXIgZW52aXJvbm1lbnQsIGUuZy4gSmF2YVNjcmlwdENvcmUsXG4gIC8vIGZhbGxiYWNrIHRvIGEgbmFpdmUgaW1wbGVtZW50YXRpb24uXG4gIHZhciBfY2FsbGJhY2sgPSBudWxsO1xuICB2YXIgX3RpbWVvdXRJRCA9IG51bGw7XG5cbiAgdmFyIF9mbHVzaENhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgIGlmIChfY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBjdXJyZW50VGltZSA9IGV4cG9ydHMudW5zdGFibGVfbm93KCk7XG4gICAgICAgIHZhciBoYXNSZW1haW5pbmdUaW1lID0gdHJ1ZTtcblxuICAgICAgICBfY2FsbGJhY2soaGFzUmVtYWluaW5nVGltZSwgY3VycmVudFRpbWUpO1xuXG4gICAgICAgIF9jYWxsYmFjayA9IG51bGw7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHNldFRpbWVvdXQoX2ZsdXNoQ2FsbGJhY2ssIDApO1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICByZXF1ZXN0SG9zdENhbGxiYWNrID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgaWYgKF9jYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgLy8gUHJvdGVjdCBhZ2FpbnN0IHJlLWVudHJhbmN5LlxuICAgICAgc2V0VGltZW91dChyZXF1ZXN0SG9zdENhbGxiYWNrLCAwLCBjYik7XG4gICAgfSBlbHNlIHtcbiAgICAgIF9jYWxsYmFjayA9IGNiO1xuICAgICAgc2V0VGltZW91dChfZmx1c2hDYWxsYmFjaywgMCk7XG4gICAgfVxuICB9O1xuXG4gIHJlcXVlc3RIb3N0VGltZW91dCA9IGZ1bmN0aW9uIChjYiwgbXMpIHtcbiAgICBfdGltZW91dElEID0gc2V0VGltZW91dChjYiwgbXMpO1xuICB9O1xuXG4gIGNhbmNlbEhvc3RUaW1lb3V0ID0gZnVuY3Rpb24gKCkge1xuICAgIGNsZWFyVGltZW91dChfdGltZW91dElEKTtcbiAgfTtcblxuICBleHBvcnRzLnVuc3RhYmxlX3Nob3VsZFlpZWxkID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcblxuICByZXF1ZXN0UGFpbnQgPSBleHBvcnRzLnVuc3RhYmxlX2ZvcmNlRnJhbWVSYXRlID0gZnVuY3Rpb24gKCkge307XG59IGVsc2Uge1xuICAvLyBDYXB0dXJlIGxvY2FsIHJlZmVyZW5jZXMgdG8gbmF0aXZlIEFQSXMsIGluIGNhc2UgYSBwb2x5ZmlsbCBvdmVycmlkZXMgdGhlbS5cbiAgdmFyIF9zZXRUaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQ7XG4gIHZhciBfY2xlYXJUaW1lb3V0ID0gd2luZG93LmNsZWFyVGltZW91dDtcblxuICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgLy8gVE9ETzogU2NoZWR1bGVyIG5vIGxvbmdlciByZXF1aXJlcyB0aGVzZSBtZXRob2RzIHRvIGJlIHBvbHlmaWxsZWQuIEJ1dFxuICAgIC8vIG1heWJlIHdlIHdhbnQgdG8gY29udGludWUgd2FybmluZyBpZiB0aGV5IGRvbid0IGV4aXN0LCB0byBwcmVzZXJ2ZSB0aGVcbiAgICAvLyBvcHRpb24gdG8gcmVseSBvbiBpdCBpbiB0aGUgZnV0dXJlP1xuICAgIHZhciByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lO1xuICAgIHZhciBjYW5jZWxBbmltYXRpb25GcmFtZSA9IHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZTtcblxuICAgIGlmICh0eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBVc2luZyBjb25zb2xlWydlcnJvciddIHRvIGV2YWRlIEJhYmVsIGFuZCBFU0xpbnRcbiAgICAgIGNvbnNvbGVbJ2Vycm9yJ10oXCJUaGlzIGJyb3dzZXIgZG9lc24ndCBzdXBwb3J0IHJlcXVlc3RBbmltYXRpb25GcmFtZS4gXCIgKyAnTWFrZSBzdXJlIHRoYXQgeW91IGxvYWQgYSAnICsgJ3BvbHlmaWxsIGluIG9sZGVyIGJyb3dzZXJzLiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvcmVhY3QtcG9seWZpbGxzJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjYW5jZWxBbmltYXRpb25GcmFtZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gVXNpbmcgY29uc29sZVsnZXJyb3InXSB0byBldmFkZSBCYWJlbCBhbmQgRVNMaW50XG4gICAgICBjb25zb2xlWydlcnJvciddKFwiVGhpcyBicm93c2VyIGRvZXNuJ3Qgc3VwcG9ydCBjYW5jZWxBbmltYXRpb25GcmFtZS4gXCIgKyAnTWFrZSBzdXJlIHRoYXQgeW91IGxvYWQgYSAnICsgJ3BvbHlmaWxsIGluIG9sZGVyIGJyb3dzZXJzLiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvcmVhY3QtcG9seWZpbGxzJyk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGlzTWVzc2FnZUxvb3BSdW5uaW5nID0gZmFsc2U7XG4gIHZhciBzY2hlZHVsZWRIb3N0Q2FsbGJhY2sgPSBudWxsO1xuICB2YXIgdGFza1RpbWVvdXRJRCA9IC0xOyAvLyBTY2hlZHVsZXIgcGVyaW9kaWNhbGx5IHlpZWxkcyBpbiBjYXNlIHRoZXJlIGlzIG90aGVyIHdvcmsgb24gdGhlIG1haW5cbiAgLy8gdGhyZWFkLCBsaWtlIHVzZXIgZXZlbnRzLiBCeSBkZWZhdWx0LCBpdCB5aWVsZHMgbXVsdGlwbGUgdGltZXMgcGVyIGZyYW1lLlxuICAvLyBJdCBkb2VzIG5vdCBhdHRlbXB0IHRvIGFsaWduIHdpdGggZnJhbWUgYm91bmRhcmllcywgc2luY2UgbW9zdCB0YXNrcyBkb24ndFxuICAvLyBuZWVkIHRvIGJlIGZyYW1lIGFsaWduZWQ7IGZvciB0aG9zZSB0aGF0IGRvLCB1c2UgcmVxdWVzdEFuaW1hdGlvbkZyYW1lLlxuXG4gIHZhciB5aWVsZEludGVydmFsID0gNTtcbiAgdmFyIGRlYWRsaW5lID0gMDsgLy8gVE9ETzogTWFrZSB0aGlzIGNvbmZpZ3VyYWJsZVxuXG4gIHtcbiAgICAvLyBgaXNJbnB1dFBlbmRpbmdgIGlzIG5vdCBhdmFpbGFibGUuIFNpbmNlIHdlIGhhdmUgbm8gd2F5IG9mIGtub3dpbmcgaWZcbiAgICAvLyB0aGVyZSdzIHBlbmRpbmcgaW5wdXQsIGFsd2F5cyB5aWVsZCBhdCB0aGUgZW5kIG9mIHRoZSBmcmFtZS5cbiAgICBleHBvcnRzLnVuc3RhYmxlX3Nob3VsZFlpZWxkID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGV4cG9ydHMudW5zdGFibGVfbm93KCkgPj0gZGVhZGxpbmU7XG4gICAgfTsgLy8gU2luY2Ugd2UgeWllbGQgZXZlcnkgZnJhbWUgcmVnYXJkbGVzcywgYHJlcXVlc3RQYWludGAgaGFzIG5vIGVmZmVjdC5cblxuXG4gICAgcmVxdWVzdFBhaW50ID0gZnVuY3Rpb24gKCkge307XG4gIH1cblxuICBleHBvcnRzLnVuc3RhYmxlX2ZvcmNlRnJhbWVSYXRlID0gZnVuY3Rpb24gKGZwcykge1xuICAgIGlmIChmcHMgPCAwIHx8IGZwcyA+IDEyNSkge1xuICAgICAgLy8gVXNpbmcgY29uc29sZVsnZXJyb3InXSB0byBldmFkZSBCYWJlbCBhbmQgRVNMaW50XG4gICAgICBjb25zb2xlWydlcnJvciddKCdmb3JjZUZyYW1lUmF0ZSB0YWtlcyBhIHBvc2l0aXZlIGludCBiZXR3ZWVuIDAgYW5kIDEyNSwgJyArICdmb3JjaW5nIGZyYW1lIHJhdGVzIGhpZ2hlciB0aGFuIDEyNSBmcHMgaXMgbm90IHN1cHBvcnRlZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChmcHMgPiAwKSB7XG4gICAgICB5aWVsZEludGVydmFsID0gTWF0aC5mbG9vcigxMDAwIC8gZnBzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gcmVzZXQgdGhlIGZyYW1lcmF0ZVxuICAgICAgeWllbGRJbnRlcnZhbCA9IDU7XG4gICAgfVxuICB9O1xuXG4gIHZhciBwZXJmb3JtV29ya1VudGlsRGVhZGxpbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHNjaGVkdWxlZEhvc3RDYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgdmFyIGN1cnJlbnRUaW1lID0gZXhwb3J0cy51bnN0YWJsZV9ub3coKTsgLy8gWWllbGQgYWZ0ZXIgYHlpZWxkSW50ZXJ2YWxgIG1zLCByZWdhcmRsZXNzIG9mIHdoZXJlIHdlIGFyZSBpbiB0aGUgdnN5bmNcbiAgICAgIC8vIGN5Y2xlLiBUaGlzIG1lYW5zIHRoZXJlJ3MgYWx3YXlzIHRpbWUgcmVtYWluaW5nIGF0IHRoZSBiZWdpbm5pbmcgb2ZcbiAgICAgIC8vIHRoZSBtZXNzYWdlIGV2ZW50LlxuXG4gICAgICBkZWFkbGluZSA9IGN1cnJlbnRUaW1lICsgeWllbGRJbnRlcnZhbDtcbiAgICAgIHZhciBoYXNUaW1lUmVtYWluaW5nID0gdHJ1ZTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIGhhc01vcmVXb3JrID0gc2NoZWR1bGVkSG9zdENhbGxiYWNrKGhhc1RpbWVSZW1haW5pbmcsIGN1cnJlbnRUaW1lKTtcblxuICAgICAgICBpZiAoIWhhc01vcmVXb3JrKSB7XG4gICAgICAgICAgaXNNZXNzYWdlTG9vcFJ1bm5pbmcgPSBmYWxzZTtcbiAgICAgICAgICBzY2hlZHVsZWRIb3N0Q2FsbGJhY2sgPSBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIElmIHRoZXJlJ3MgbW9yZSB3b3JrLCBzY2hlZHVsZSB0aGUgbmV4dCBtZXNzYWdlIGV2ZW50IGF0IHRoZSBlbmRcbiAgICAgICAgICAvLyBvZiB0aGUgcHJlY2VkaW5nIG9uZS5cbiAgICAgICAgICBwb3J0LnBvc3RNZXNzYWdlKG51bGwpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBJZiBhIHNjaGVkdWxlciB0YXNrIHRocm93cywgZXhpdCB0aGUgY3VycmVudCBicm93c2VyIHRhc2sgc28gdGhlXG4gICAgICAgIC8vIGVycm9yIGNhbiBiZSBvYnNlcnZlZC5cbiAgICAgICAgcG9ydC5wb3N0TWVzc2FnZShudWxsKTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlzTWVzc2FnZUxvb3BSdW5uaW5nID0gZmFsc2U7XG4gICAgfSAvLyBZaWVsZGluZyB0byB0aGUgYnJvd3NlciB3aWxsIGdpdmUgaXQgYSBjaGFuY2UgdG8gcGFpbnQsIHNvIHdlIGNhblxuICB9O1xuXG4gIHZhciBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XG4gIHZhciBwb3J0ID0gY2hhbm5lbC5wb3J0MjtcbiAgY2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSBwZXJmb3JtV29ya1VudGlsRGVhZGxpbmU7XG5cbiAgcmVxdWVzdEhvc3RDYWxsYmFjayA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIHNjaGVkdWxlZEhvc3RDYWxsYmFjayA9IGNhbGxiYWNrO1xuXG4gICAgaWYgKCFpc01lc3NhZ2VMb29wUnVubmluZykge1xuICAgICAgaXNNZXNzYWdlTG9vcFJ1bm5pbmcgPSB0cnVlO1xuICAgICAgcG9ydC5wb3N0TWVzc2FnZShudWxsKTtcbiAgICB9XG4gIH07XG5cbiAgcmVxdWVzdEhvc3RUaW1lb3V0ID0gZnVuY3Rpb24gKGNhbGxiYWNrLCBtcykge1xuICAgIHRhc2tUaW1lb3V0SUQgPSBfc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsYmFjayhleHBvcnRzLnVuc3RhYmxlX25vdygpKTtcbiAgICB9LCBtcyk7XG4gIH07XG5cbiAgY2FuY2VsSG9zdFRpbWVvdXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgX2NsZWFyVGltZW91dCh0YXNrVGltZW91dElEKTtcblxuICAgIHRhc2tUaW1lb3V0SUQgPSAtMTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gcHVzaChoZWFwLCBub2RlKSB7XG4gIHZhciBpbmRleCA9IGhlYXAubGVuZ3RoO1xuICBoZWFwLnB1c2gobm9kZSk7XG4gIHNpZnRVcChoZWFwLCBub2RlLCBpbmRleCk7XG59XG5mdW5jdGlvbiBwZWVrKGhlYXApIHtcbiAgdmFyIGZpcnN0ID0gaGVhcFswXTtcbiAgcmV0dXJuIGZpcnN0ID09PSB1bmRlZmluZWQgPyBudWxsIDogZmlyc3Q7XG59XG5mdW5jdGlvbiBwb3AoaGVhcCkge1xuICB2YXIgZmlyc3QgPSBoZWFwWzBdO1xuXG4gIGlmIChmaXJzdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdmFyIGxhc3QgPSBoZWFwLnBvcCgpO1xuXG4gICAgaWYgKGxhc3QgIT09IGZpcnN0KSB7XG4gICAgICBoZWFwWzBdID0gbGFzdDtcbiAgICAgIHNpZnREb3duKGhlYXAsIGxhc3QsIDApO1xuICAgIH1cblxuICAgIHJldHVybiBmaXJzdDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBzaWZ0VXAoaGVhcCwgbm9kZSwgaSkge1xuICB2YXIgaW5kZXggPSBpO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgdmFyIHBhcmVudEluZGV4ID0gaW5kZXggLSAxID4+PiAxO1xuICAgIHZhciBwYXJlbnQgPSBoZWFwW3BhcmVudEluZGV4XTtcblxuICAgIGlmIChwYXJlbnQgIT09IHVuZGVmaW5lZCAmJiBjb21wYXJlKHBhcmVudCwgbm9kZSkgPiAwKSB7XG4gICAgICAvLyBUaGUgcGFyZW50IGlzIGxhcmdlci4gU3dhcCBwb3NpdGlvbnMuXG4gICAgICBoZWFwW3BhcmVudEluZGV4XSA9IG5vZGU7XG4gICAgICBoZWFwW2luZGV4XSA9IHBhcmVudDtcbiAgICAgIGluZGV4ID0gcGFyZW50SW5kZXg7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoZSBwYXJlbnQgaXMgc21hbGxlci4gRXhpdC5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc2lmdERvd24oaGVhcCwgbm9kZSwgaSkge1xuICB2YXIgaW5kZXggPSBpO1xuICB2YXIgbGVuZ3RoID0gaGVhcC5sZW5ndGg7XG5cbiAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGxlZnRJbmRleCA9IChpbmRleCArIDEpICogMiAtIDE7XG4gICAgdmFyIGxlZnQgPSBoZWFwW2xlZnRJbmRleF07XG4gICAgdmFyIHJpZ2h0SW5kZXggPSBsZWZ0SW5kZXggKyAxO1xuICAgIHZhciByaWdodCA9IGhlYXBbcmlnaHRJbmRleF07IC8vIElmIHRoZSBsZWZ0IG9yIHJpZ2h0IG5vZGUgaXMgc21hbGxlciwgc3dhcCB3aXRoIHRoZSBzbWFsbGVyIG9mIHRob3NlLlxuXG4gICAgaWYgKGxlZnQgIT09IHVuZGVmaW5lZCAmJiBjb21wYXJlKGxlZnQsIG5vZGUpIDwgMCkge1xuICAgICAgaWYgKHJpZ2h0ICE9PSB1bmRlZmluZWQgJiYgY29tcGFyZShyaWdodCwgbGVmdCkgPCAwKSB7XG4gICAgICAgIGhlYXBbaW5kZXhdID0gcmlnaHQ7XG4gICAgICAgIGhlYXBbcmlnaHRJbmRleF0gPSBub2RlO1xuICAgICAgICBpbmRleCA9IHJpZ2h0SW5kZXg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoZWFwW2luZGV4XSA9IGxlZnQ7XG4gICAgICAgIGhlYXBbbGVmdEluZGV4XSA9IG5vZGU7XG4gICAgICAgIGluZGV4ID0gbGVmdEluZGV4O1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocmlnaHQgIT09IHVuZGVmaW5lZCAmJiBjb21wYXJlKHJpZ2h0LCBub2RlKSA8IDApIHtcbiAgICAgIGhlYXBbaW5kZXhdID0gcmlnaHQ7XG4gICAgICBoZWFwW3JpZ2h0SW5kZXhdID0gbm9kZTtcbiAgICAgIGluZGV4ID0gcmlnaHRJbmRleDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTmVpdGhlciBjaGlsZCBpcyBzbWFsbGVyLiBFeGl0LlxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21wYXJlKGEsIGIpIHtcbiAgLy8gQ29tcGFyZSBzb3J0IGluZGV4IGZpcnN0LCB0aGVuIHRhc2sgaWQuXG4gIHZhciBkaWZmID0gYS5zb3J0SW5kZXggLSBiLnNvcnRJbmRleDtcbiAgcmV0dXJuIGRpZmYgIT09IDAgPyBkaWZmIDogYS5pZCAtIGIuaWQ7XG59XG5cbi8vIFRPRE86IFVzZSBzeW1ib2xzP1xudmFyIEltbWVkaWF0ZVByaW9yaXR5ID0gMTtcbnZhciBVc2VyQmxvY2tpbmdQcmlvcml0eSA9IDI7XG52YXIgTm9ybWFsUHJpb3JpdHkgPSAzO1xudmFyIExvd1ByaW9yaXR5ID0gNDtcbnZhciBJZGxlUHJpb3JpdHkgPSA1O1xuXG5mdW5jdGlvbiBtYXJrVGFza0Vycm9yZWQodGFzaywgbXMpIHtcbn1cblxuLyogZXNsaW50LWRpc2FibGUgbm8tdmFyICovXG4vLyBNYXRoLnBvdygyLCAzMCkgLSAxXG4vLyAwYjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMVxuXG52YXIgbWF4U2lnbmVkMzFCaXRJbnQgPSAxMDczNzQxODIzOyAvLyBUaW1lcyBvdXQgaW1tZWRpYXRlbHlcblxudmFyIElNTUVESUFURV9QUklPUklUWV9USU1FT1VUID0gLTE7IC8vIEV2ZW50dWFsbHkgdGltZXMgb3V0XG5cbnZhciBVU0VSX0JMT0NLSU5HX1BSSU9SSVRZX1RJTUVPVVQgPSAyNTA7XG52YXIgTk9STUFMX1BSSU9SSVRZX1RJTUVPVVQgPSA1MDAwO1xudmFyIExPV19QUklPUklUWV9USU1FT1VUID0gMTAwMDA7IC8vIE5ldmVyIHRpbWVzIG91dFxuXG52YXIgSURMRV9QUklPUklUWV9USU1FT1VUID0gbWF4U2lnbmVkMzFCaXRJbnQ7IC8vIFRhc2tzIGFyZSBzdG9yZWQgb24gYSBtaW4gaGVhcFxuXG52YXIgdGFza1F1ZXVlID0gW107XG52YXIgdGltZXJRdWV1ZSA9IFtdOyAvLyBJbmNyZW1lbnRpbmcgaWQgY291bnRlci4gVXNlZCB0byBtYWludGFpbiBpbnNlcnRpb24gb3JkZXIuXG5cbnZhciB0YXNrSWRDb3VudGVyID0gMTsgLy8gUGF1c2luZyB0aGUgc2NoZWR1bGVyIGlzIHVzZWZ1bCBmb3IgZGVidWdnaW5nLlxudmFyIGN1cnJlbnRUYXNrID0gbnVsbDtcbnZhciBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IE5vcm1hbFByaW9yaXR5OyAvLyBUaGlzIGlzIHNldCB3aGlsZSBwZXJmb3JtaW5nIHdvcmssIHRvIHByZXZlbnQgcmUtZW50cmFuY3kuXG5cbnZhciBpc1BlcmZvcm1pbmdXb3JrID0gZmFsc2U7XG52YXIgaXNIb3N0Q2FsbGJhY2tTY2hlZHVsZWQgPSBmYWxzZTtcbnZhciBpc0hvc3RUaW1lb3V0U2NoZWR1bGVkID0gZmFsc2U7XG5cbmZ1bmN0aW9uIGFkdmFuY2VUaW1lcnMoY3VycmVudFRpbWUpIHtcbiAgLy8gQ2hlY2sgZm9yIHRhc2tzIHRoYXQgYXJlIG5vIGxvbmdlciBkZWxheWVkIGFuZCBhZGQgdGhlbSB0byB0aGUgcXVldWUuXG4gIHZhciB0aW1lciA9IHBlZWsodGltZXJRdWV1ZSk7XG5cbiAgd2hpbGUgKHRpbWVyICE9PSBudWxsKSB7XG4gICAgaWYgKHRpbWVyLmNhbGxiYWNrID09PSBudWxsKSB7XG4gICAgICAvLyBUaW1lciB3YXMgY2FuY2VsbGVkLlxuICAgICAgcG9wKHRpbWVyUXVldWUpO1xuICAgIH0gZWxzZSBpZiAodGltZXIuc3RhcnRUaW1lIDw9IGN1cnJlbnRUaW1lKSB7XG4gICAgICAvLyBUaW1lciBmaXJlZC4gVHJhbnNmZXIgdG8gdGhlIHRhc2sgcXVldWUuXG4gICAgICBwb3AodGltZXJRdWV1ZSk7XG4gICAgICB0aW1lci5zb3J0SW5kZXggPSB0aW1lci5leHBpcmF0aW9uVGltZTtcbiAgICAgIHB1c2godGFza1F1ZXVlLCB0aW1lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlbWFpbmluZyB0aW1lcnMgYXJlIHBlbmRpbmcuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGltZXIgPSBwZWVrKHRpbWVyUXVldWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZVRpbWVvdXQoY3VycmVudFRpbWUpIHtcbiAgaXNIb3N0VGltZW91dFNjaGVkdWxlZCA9IGZhbHNlO1xuICBhZHZhbmNlVGltZXJzKGN1cnJlbnRUaW1lKTtcblxuICBpZiAoIWlzSG9zdENhbGxiYWNrU2NoZWR1bGVkKSB7XG4gICAgaWYgKHBlZWsodGFza1F1ZXVlKSAhPT0gbnVsbCkge1xuICAgICAgaXNIb3N0Q2FsbGJhY2tTY2hlZHVsZWQgPSB0cnVlO1xuICAgICAgcmVxdWVzdEhvc3RDYWxsYmFjayhmbHVzaFdvcmspO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgZmlyc3RUaW1lciA9IHBlZWsodGltZXJRdWV1ZSk7XG5cbiAgICAgIGlmIChmaXJzdFRpbWVyICE9PSBudWxsKSB7XG4gICAgICAgIHJlcXVlc3RIb3N0VGltZW91dChoYW5kbGVUaW1lb3V0LCBmaXJzdFRpbWVyLnN0YXJ0VGltZSAtIGN1cnJlbnRUaW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmx1c2hXb3JrKGhhc1RpbWVSZW1haW5pbmcsIGluaXRpYWxUaW1lKSB7XG5cblxuICBpc0hvc3RDYWxsYmFja1NjaGVkdWxlZCA9IGZhbHNlO1xuXG4gIGlmIChpc0hvc3RUaW1lb3V0U2NoZWR1bGVkKSB7XG4gICAgLy8gV2Ugc2NoZWR1bGVkIGEgdGltZW91dCBidXQgaXQncyBubyBsb25nZXIgbmVlZGVkLiBDYW5jZWwgaXQuXG4gICAgaXNIb3N0VGltZW91dFNjaGVkdWxlZCA9IGZhbHNlO1xuICAgIGNhbmNlbEhvc3RUaW1lb3V0KCk7XG4gIH1cblxuICBpc1BlcmZvcm1pbmdXb3JrID0gdHJ1ZTtcbiAgdmFyIHByZXZpb3VzUHJpb3JpdHlMZXZlbCA9IGN1cnJlbnRQcmlvcml0eUxldmVsO1xuXG4gIHRyeSB7XG4gICAgaWYgKGVuYWJsZVByb2ZpbGluZykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHdvcmtMb29wKGhhc1RpbWVSZW1haW5pbmcsIGluaXRpYWxUaW1lKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChjdXJyZW50VGFzayAhPT0gbnVsbCkge1xuICAgICAgICAgIHZhciBjdXJyZW50VGltZSA9IGV4cG9ydHMudW5zdGFibGVfbm93KCk7XG4gICAgICAgICAgbWFya1Rhc2tFcnJvcmVkKGN1cnJlbnRUYXNrLCBjdXJyZW50VGltZSk7XG4gICAgICAgICAgY3VycmVudFRhc2suaXNRdWV1ZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBObyBjYXRjaCBpbiBwcm9kIGNvZGUgcGF0aC5cbiAgICAgIHJldHVybiB3b3JrTG9vcChoYXNUaW1lUmVtYWluaW5nLCBpbml0aWFsVGltZSk7XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIGN1cnJlbnRUYXNrID0gbnVsbDtcbiAgICBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IHByZXZpb3VzUHJpb3JpdHlMZXZlbDtcbiAgICBpc1BlcmZvcm1pbmdXb3JrID0gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gd29ya0xvb3AoaGFzVGltZVJlbWFpbmluZywgaW5pdGlhbFRpbWUpIHtcbiAgdmFyIGN1cnJlbnRUaW1lID0gaW5pdGlhbFRpbWU7XG4gIGFkdmFuY2VUaW1lcnMoY3VycmVudFRpbWUpO1xuICBjdXJyZW50VGFzayA9IHBlZWsodGFza1F1ZXVlKTtcblxuICB3aGlsZSAoY3VycmVudFRhc2sgIT09IG51bGwgJiYgIShlbmFibGVTY2hlZHVsZXJEZWJ1Z2dpbmcgKSkge1xuICAgIGlmIChjdXJyZW50VGFzay5leHBpcmF0aW9uVGltZSA+IGN1cnJlbnRUaW1lICYmICghaGFzVGltZVJlbWFpbmluZyB8fCBleHBvcnRzLnVuc3RhYmxlX3Nob3VsZFlpZWxkKCkpKSB7XG4gICAgICAvLyBUaGlzIGN1cnJlbnRUYXNrIGhhc24ndCBleHBpcmVkLCBhbmQgd2UndmUgcmVhY2hlZCB0aGUgZGVhZGxpbmUuXG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICB2YXIgY2FsbGJhY2sgPSBjdXJyZW50VGFzay5jYWxsYmFjaztcblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGN1cnJlbnRUYXNrLmNhbGxiYWNrID0gbnVsbDtcbiAgICAgIGN1cnJlbnRQcmlvcml0eUxldmVsID0gY3VycmVudFRhc2sucHJpb3JpdHlMZXZlbDtcbiAgICAgIHZhciBkaWRVc2VyQ2FsbGJhY2tUaW1lb3V0ID0gY3VycmVudFRhc2suZXhwaXJhdGlvblRpbWUgPD0gY3VycmVudFRpbWU7XG5cbiAgICAgIHZhciBjb250aW51YXRpb25DYWxsYmFjayA9IGNhbGxiYWNrKGRpZFVzZXJDYWxsYmFja1RpbWVvdXQpO1xuICAgICAgY3VycmVudFRpbWUgPSBleHBvcnRzLnVuc3RhYmxlX25vdygpO1xuXG4gICAgICBpZiAodHlwZW9mIGNvbnRpbnVhdGlvbkNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGN1cnJlbnRUYXNrLmNhbGxiYWNrID0gY29udGludWF0aW9uQ2FsbGJhY2s7XG4gICAgICB9IGVsc2Uge1xuXG4gICAgICAgIGlmIChjdXJyZW50VGFzayA9PT0gcGVlayh0YXNrUXVldWUpKSB7XG4gICAgICAgICAgcG9wKHRhc2tRdWV1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYWR2YW5jZVRpbWVycyhjdXJyZW50VGltZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBvcCh0YXNrUXVldWUpO1xuICAgIH1cblxuICAgIGN1cnJlbnRUYXNrID0gcGVlayh0YXNrUXVldWUpO1xuICB9IC8vIFJldHVybiB3aGV0aGVyIHRoZXJlJ3MgYWRkaXRpb25hbCB3b3JrXG5cblxuICBpZiAoY3VycmVudFRhc2sgIT09IG51bGwpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgZmlyc3RUaW1lciA9IHBlZWsodGltZXJRdWV1ZSk7XG5cbiAgICBpZiAoZmlyc3RUaW1lciAhPT0gbnVsbCkge1xuICAgICAgcmVxdWVzdEhvc3RUaW1lb3V0KGhhbmRsZVRpbWVvdXQsIGZpcnN0VGltZXIuc3RhcnRUaW1lIC0gY3VycmVudFRpbWUpO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV9ydW5XaXRoUHJpb3JpdHkocHJpb3JpdHlMZXZlbCwgZXZlbnRIYW5kbGVyKSB7XG4gIHN3aXRjaCAocHJpb3JpdHlMZXZlbCkge1xuICAgIGNhc2UgSW1tZWRpYXRlUHJpb3JpdHk6XG4gICAgY2FzZSBVc2VyQmxvY2tpbmdQcmlvcml0eTpcbiAgICBjYXNlIE5vcm1hbFByaW9yaXR5OlxuICAgIGNhc2UgTG93UHJpb3JpdHk6XG4gICAgY2FzZSBJZGxlUHJpb3JpdHk6XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICBwcmlvcml0eUxldmVsID0gTm9ybWFsUHJpb3JpdHk7XG4gIH1cblxuICB2YXIgcHJldmlvdXNQcmlvcml0eUxldmVsID0gY3VycmVudFByaW9yaXR5TGV2ZWw7XG4gIGN1cnJlbnRQcmlvcml0eUxldmVsID0gcHJpb3JpdHlMZXZlbDtcblxuICB0cnkge1xuICAgIHJldHVybiBldmVudEhhbmRsZXIoKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IHByZXZpb3VzUHJpb3JpdHlMZXZlbDtcbiAgfVxufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV9uZXh0KGV2ZW50SGFuZGxlcikge1xuICB2YXIgcHJpb3JpdHlMZXZlbDtcblxuICBzd2l0Y2ggKGN1cnJlbnRQcmlvcml0eUxldmVsKSB7XG4gICAgY2FzZSBJbW1lZGlhdGVQcmlvcml0eTpcbiAgICBjYXNlIFVzZXJCbG9ja2luZ1ByaW9yaXR5OlxuICAgIGNhc2UgTm9ybWFsUHJpb3JpdHk6XG4gICAgICAvLyBTaGlmdCBkb3duIHRvIG5vcm1hbCBwcmlvcml0eVxuICAgICAgcHJpb3JpdHlMZXZlbCA9IE5vcm1hbFByaW9yaXR5O1xuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgLy8gQW55dGhpbmcgbG93ZXIgdGhhbiBub3JtYWwgcHJpb3JpdHkgc2hvdWxkIHJlbWFpbiBhdCB0aGUgY3VycmVudCBsZXZlbC5cbiAgICAgIHByaW9yaXR5TGV2ZWwgPSBjdXJyZW50UHJpb3JpdHlMZXZlbDtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgdmFyIHByZXZpb3VzUHJpb3JpdHlMZXZlbCA9IGN1cnJlbnRQcmlvcml0eUxldmVsO1xuICBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IHByaW9yaXR5TGV2ZWw7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gZXZlbnRIYW5kbGVyKCk7XG4gIH0gZmluYWxseSB7XG4gICAgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBwcmV2aW91c1ByaW9yaXR5TGV2ZWw7XG4gIH1cbn1cblxuZnVuY3Rpb24gdW5zdGFibGVfd3JhcENhbGxiYWNrKGNhbGxiYWNrKSB7XG4gIHZhciBwYXJlbnRQcmlvcml0eUxldmVsID0gY3VycmVudFByaW9yaXR5TGV2ZWw7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgLy8gVGhpcyBpcyBhIGZvcmsgb2YgcnVuV2l0aFByaW9yaXR5LCBpbmxpbmVkIGZvciBwZXJmb3JtYW5jZS5cbiAgICB2YXIgcHJldmlvdXNQcmlvcml0eUxldmVsID0gY3VycmVudFByaW9yaXR5TGV2ZWw7XG4gICAgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBwYXJlbnRQcmlvcml0eUxldmVsO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBjYWxsYmFjay5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IHByZXZpb3VzUHJpb3JpdHlMZXZlbDtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIHVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2socHJpb3JpdHlMZXZlbCwgY2FsbGJhY2ssIG9wdGlvbnMpIHtcbiAgdmFyIGN1cnJlbnRUaW1lID0gZXhwb3J0cy51bnN0YWJsZV9ub3coKTtcbiAgdmFyIHN0YXJ0VGltZTtcblxuICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdvYmplY3QnICYmIG9wdGlvbnMgIT09IG51bGwpIHtcbiAgICB2YXIgZGVsYXkgPSBvcHRpb25zLmRlbGF5O1xuXG4gICAgaWYgKHR5cGVvZiBkZWxheSA9PT0gJ251bWJlcicgJiYgZGVsYXkgPiAwKSB7XG4gICAgICBzdGFydFRpbWUgPSBjdXJyZW50VGltZSArIGRlbGF5O1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGFydFRpbWUgPSBjdXJyZW50VGltZTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgc3RhcnRUaW1lID0gY3VycmVudFRpbWU7XG4gIH1cblxuICB2YXIgdGltZW91dDtcblxuICBzd2l0Y2ggKHByaW9yaXR5TGV2ZWwpIHtcbiAgICBjYXNlIEltbWVkaWF0ZVByaW9yaXR5OlxuICAgICAgdGltZW91dCA9IElNTUVESUFURV9QUklPUklUWV9USU1FT1VUO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFVzZXJCbG9ja2luZ1ByaW9yaXR5OlxuICAgICAgdGltZW91dCA9IFVTRVJfQkxPQ0tJTkdfUFJJT1JJVFlfVElNRU9VVDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBJZGxlUHJpb3JpdHk6XG4gICAgICB0aW1lb3V0ID0gSURMRV9QUklPUklUWV9USU1FT1VUO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIExvd1ByaW9yaXR5OlxuICAgICAgdGltZW91dCA9IExPV19QUklPUklUWV9USU1FT1VUO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIE5vcm1hbFByaW9yaXR5OlxuICAgIGRlZmF1bHQ6XG4gICAgICB0aW1lb3V0ID0gTk9STUFMX1BSSU9SSVRZX1RJTUVPVVQ7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHZhciBleHBpcmF0aW9uVGltZSA9IHN0YXJ0VGltZSArIHRpbWVvdXQ7XG4gIHZhciBuZXdUYXNrID0ge1xuICAgIGlkOiB0YXNrSWRDb3VudGVyKyssXG4gICAgY2FsbGJhY2s6IGNhbGxiYWNrLFxuICAgIHByaW9yaXR5TGV2ZWw6IHByaW9yaXR5TGV2ZWwsXG4gICAgc3RhcnRUaW1lOiBzdGFydFRpbWUsXG4gICAgZXhwaXJhdGlvblRpbWU6IGV4cGlyYXRpb25UaW1lLFxuICAgIHNvcnRJbmRleDogLTFcbiAgfTtcblxuICBpZiAoc3RhcnRUaW1lID4gY3VycmVudFRpbWUpIHtcbiAgICAvLyBUaGlzIGlzIGEgZGVsYXllZCB0YXNrLlxuICAgIG5ld1Rhc2suc29ydEluZGV4ID0gc3RhcnRUaW1lO1xuICAgIHB1c2godGltZXJRdWV1ZSwgbmV3VGFzayk7XG5cbiAgICBpZiAocGVlayh0YXNrUXVldWUpID09PSBudWxsICYmIG5ld1Rhc2sgPT09IHBlZWsodGltZXJRdWV1ZSkpIHtcbiAgICAgIC8vIEFsbCB0YXNrcyBhcmUgZGVsYXllZCwgYW5kIHRoaXMgaXMgdGhlIHRhc2sgd2l0aCB0aGUgZWFybGllc3QgZGVsYXkuXG4gICAgICBpZiAoaXNIb3N0VGltZW91dFNjaGVkdWxlZCkge1xuICAgICAgICAvLyBDYW5jZWwgYW4gZXhpc3RpbmcgdGltZW91dC5cbiAgICAgICAgY2FuY2VsSG9zdFRpbWVvdXQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlzSG9zdFRpbWVvdXRTY2hlZHVsZWQgPSB0cnVlO1xuICAgICAgfSAvLyBTY2hlZHVsZSBhIHRpbWVvdXQuXG5cblxuICAgICAgcmVxdWVzdEhvc3RUaW1lb3V0KGhhbmRsZVRpbWVvdXQsIHN0YXJ0VGltZSAtIGN1cnJlbnRUaW1lKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbmV3VGFzay5zb3J0SW5kZXggPSBleHBpcmF0aW9uVGltZTtcbiAgICBwdXNoKHRhc2tRdWV1ZSwgbmV3VGFzayk7XG4gICAgLy8gd2FpdCB1bnRpbCB0aGUgbmV4dCB0aW1lIHdlIHlpZWxkLlxuXG5cbiAgICBpZiAoIWlzSG9zdENhbGxiYWNrU2NoZWR1bGVkICYmICFpc1BlcmZvcm1pbmdXb3JrKSB7XG4gICAgICBpc0hvc3RDYWxsYmFja1NjaGVkdWxlZCA9IHRydWU7XG4gICAgICByZXF1ZXN0SG9zdENhbGxiYWNrKGZsdXNoV29yayk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ld1Rhc2s7XG59XG5cbmZ1bmN0aW9uIHVuc3RhYmxlX3BhdXNlRXhlY3V0aW9uKCkge1xufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV9jb250aW51ZUV4ZWN1dGlvbigpIHtcblxuICBpZiAoIWlzSG9zdENhbGxiYWNrU2NoZWR1bGVkICYmICFpc1BlcmZvcm1pbmdXb3JrKSB7XG4gICAgaXNIb3N0Q2FsbGJhY2tTY2hlZHVsZWQgPSB0cnVlO1xuICAgIHJlcXVlc3RIb3N0Q2FsbGJhY2soZmx1c2hXb3JrKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV9nZXRGaXJzdENhbGxiYWNrTm9kZSgpIHtcbiAgcmV0dXJuIHBlZWsodGFza1F1ZXVlKTtcbn1cblxuZnVuY3Rpb24gdW5zdGFibGVfY2FuY2VsQ2FsbGJhY2sodGFzaykge1xuICAvLyByZW1vdmUgZnJvbSB0aGUgcXVldWUgYmVjYXVzZSB5b3UgY2FuJ3QgcmVtb3ZlIGFyYml0cmFyeSBub2RlcyBmcm9tIGFuXG4gIC8vIGFycmF5IGJhc2VkIGhlYXAsIG9ubHkgdGhlIGZpcnN0IG9uZS4pXG5cblxuICB0YXNrLmNhbGxiYWNrID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gdW5zdGFibGVfZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwoKSB7XG4gIHJldHVybiBjdXJyZW50UHJpb3JpdHlMZXZlbDtcbn1cblxudmFyIHVuc3RhYmxlX3JlcXVlc3RQYWludCA9IHJlcXVlc3RQYWludDtcbnZhciB1bnN0YWJsZV9Qcm9maWxpbmcgPSAgbnVsbDtcblxuZXhwb3J0cy51bnN0YWJsZV9JZGxlUHJpb3JpdHkgPSBJZGxlUHJpb3JpdHk7XG5leHBvcnRzLnVuc3RhYmxlX0ltbWVkaWF0ZVByaW9yaXR5ID0gSW1tZWRpYXRlUHJpb3JpdHk7XG5leHBvcnRzLnVuc3RhYmxlX0xvd1ByaW9yaXR5ID0gTG93UHJpb3JpdHk7XG5leHBvcnRzLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5ID0gTm9ybWFsUHJpb3JpdHk7XG5leHBvcnRzLnVuc3RhYmxlX1Byb2ZpbGluZyA9IHVuc3RhYmxlX1Byb2ZpbGluZztcbmV4cG9ydHMudW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHkgPSBVc2VyQmxvY2tpbmdQcmlvcml0eTtcbmV4cG9ydHMudW5zdGFibGVfY2FuY2VsQ2FsbGJhY2sgPSB1bnN0YWJsZV9jYW5jZWxDYWxsYmFjaztcbmV4cG9ydHMudW5zdGFibGVfY29udGludWVFeGVjdXRpb24gPSB1bnN0YWJsZV9jb250aW51ZUV4ZWN1dGlvbjtcbmV4cG9ydHMudW5zdGFibGVfZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwgPSB1bnN0YWJsZV9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbDtcbmV4cG9ydHMudW5zdGFibGVfZ2V0Rmlyc3RDYWxsYmFja05vZGUgPSB1bnN0YWJsZV9nZXRGaXJzdENhbGxiYWNrTm9kZTtcbmV4cG9ydHMudW5zdGFibGVfbmV4dCA9IHVuc3RhYmxlX25leHQ7XG5leHBvcnRzLnVuc3RhYmxlX3BhdXNlRXhlY3V0aW9uID0gdW5zdGFibGVfcGF1c2VFeGVjdXRpb247XG5leHBvcnRzLnVuc3RhYmxlX3JlcXVlc3RQYWludCA9IHVuc3RhYmxlX3JlcXVlc3RQYWludDtcbmV4cG9ydHMudW5zdGFibGVfcnVuV2l0aFByaW9yaXR5ID0gdW5zdGFibGVfcnVuV2l0aFByaW9yaXR5O1xuZXhwb3J0cy51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrID0gdW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjaztcbmV4cG9ydHMudW5zdGFibGVfd3JhcENhbGxiYWNrID0gdW5zdGFibGVfd3JhcENhbGxiYWNrO1xuICB9KSgpO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9zY2hlZHVsZXIucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvc2NoZWR1bGVyLmRldmVsb3BtZW50LmpzJyk7XG59XG4iLCAiLyoqIEBsaWNlbnNlIFJlYWN0IHYwLjIwLjJcbiAqIHNjaGVkdWxlci10cmFjaW5nLmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIChmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxudmFyIERFRkFVTFRfVEhSRUFEX0lEID0gMDsgLy8gQ291bnRlcnMgdXNlZCB0byBnZW5lcmF0ZSB1bmlxdWUgSURzLlxuXG52YXIgaW50ZXJhY3Rpb25JRENvdW50ZXIgPSAwO1xudmFyIHRocmVhZElEQ291bnRlciA9IDA7IC8vIFNldCBvZiBjdXJyZW50bHkgdHJhY2VkIGludGVyYWN0aW9ucy5cbi8vIEludGVyYWN0aW9ucyBcInN0YWNrXCJcdTIwMTNcbi8vIE1lYW5pbmcgdGhhdCBuZXdseSB0cmFjZWQgaW50ZXJhY3Rpb25zIGFyZSBhcHBlbmRlZCB0byB0aGUgcHJldmlvdXNseSBhY3RpdmUgc2V0LlxuLy8gV2hlbiBhbiBpbnRlcmFjdGlvbiBnb2VzIG91dCBvZiBzY29wZSwgdGhlIHByZXZpb3VzIHNldCAoaWYgYW55KSBpcyByZXN0b3JlZC5cblxuZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZiA9IG51bGw7IC8vIExpc3RlbmVyKHMpIHRvIG5vdGlmeSB3aGVuIGludGVyYWN0aW9ucyBiZWdpbiBhbmQgZW5kLlxuXG5leHBvcnRzLl9fc3Vic2NyaWJlclJlZiA9IG51bGw7XG5cbntcbiAgZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZiA9IHtcbiAgICBjdXJyZW50OiBuZXcgU2V0KClcbiAgfTtcbiAgZXhwb3J0cy5fX3N1YnNjcmliZXJSZWYgPSB7XG4gICAgY3VycmVudDogbnVsbFxuICB9O1xufVxuZnVuY3Rpb24gdW5zdGFibGVfY2xlYXIoY2FsbGJhY2spIHtcblxuICB2YXIgcHJldkludGVyYWN0aW9ucyA9IGV4cG9ydHMuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudDtcbiAgZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50ID0gbmV3IFNldCgpO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gIH0gZmluYWxseSB7XG4gICAgZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50ID0gcHJldkludGVyYWN0aW9ucztcbiAgfVxufVxuZnVuY3Rpb24gdW5zdGFibGVfZ2V0Q3VycmVudCgpIHtcbiAge1xuICAgIHJldHVybiBleHBvcnRzLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQ7XG4gIH1cbn1cbmZ1bmN0aW9uIHVuc3RhYmxlX2dldFRocmVhZElEKCkge1xuICByZXR1cm4gKyt0aHJlYWRJRENvdW50ZXI7XG59XG5mdW5jdGlvbiB1bnN0YWJsZV90cmFjZShuYW1lLCB0aW1lc3RhbXAsIGNhbGxiYWNrKSB7XG4gIHZhciB0aHJlYWRJRCA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDogREVGQVVMVF9USFJFQURfSUQ7XG5cbiAgdmFyIGludGVyYWN0aW9uID0ge1xuICAgIF9fY291bnQ6IDEsXG4gICAgaWQ6IGludGVyYWN0aW9uSURDb3VudGVyKyssXG4gICAgbmFtZTogbmFtZSxcbiAgICB0aW1lc3RhbXA6IHRpbWVzdGFtcFxuICB9O1xuICB2YXIgcHJldkludGVyYWN0aW9ucyA9IGV4cG9ydHMuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudDsgLy8gVHJhY2VkIGludGVyYWN0aW9ucyBzaG91bGQgc3RhY2svYWNjdW11bGF0ZS5cbiAgLy8gVG8gZG8gdGhhdCwgY2xvbmUgdGhlIGN1cnJlbnQgaW50ZXJhY3Rpb25zLlxuICAvLyBUaGUgcHJldmlvdXMgc2V0IHdpbGwgYmUgcmVzdG9yZWQgdXBvbiBjb21wbGV0aW9uLlxuXG4gIHZhciBpbnRlcmFjdGlvbnMgPSBuZXcgU2V0KHByZXZJbnRlcmFjdGlvbnMpO1xuICBpbnRlcmFjdGlvbnMuYWRkKGludGVyYWN0aW9uKTtcbiAgZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50ID0gaW50ZXJhY3Rpb25zO1xuICB2YXIgc3Vic2NyaWJlciA9IGV4cG9ydHMuX19zdWJzY3JpYmVyUmVmLmN1cnJlbnQ7XG4gIHZhciByZXR1cm5WYWx1ZTtcblxuICB0cnkge1xuICAgIGlmIChzdWJzY3JpYmVyICE9PSBudWxsKSB7XG4gICAgICBzdWJzY3JpYmVyLm9uSW50ZXJhY3Rpb25UcmFjZWQoaW50ZXJhY3Rpb24pO1xuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgaWYgKHN1YnNjcmliZXIgIT09IG51bGwpIHtcbiAgICAgICAgc3Vic2NyaWJlci5vbldvcmtTdGFydGVkKGludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm5WYWx1ZSA9IGNhbGxiYWNrKCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBleHBvcnRzLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQgPSBwcmV2SW50ZXJhY3Rpb25zO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKHN1YnNjcmliZXIgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIub25Xb3JrU3RvcHBlZChpbnRlcmFjdGlvbnMsIHRocmVhZElEKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgaW50ZXJhY3Rpb24uX19jb3VudC0tOyAvLyBJZiBubyBhc3luYyB3b3JrIHdhcyBzY2hlZHVsZWQgZm9yIHRoaXMgaW50ZXJhY3Rpb24sXG4gICAgICAgICAgLy8gTm90aWZ5IHN1YnNjcmliZXJzIHRoYXQgaXQncyBjb21wbGV0ZWQuXG5cbiAgICAgICAgICBpZiAoc3Vic2NyaWJlciAhPT0gbnVsbCAmJiBpbnRlcmFjdGlvbi5fX2NvdW50ID09PSAwKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm9uSW50ZXJhY3Rpb25TY2hlZHVsZWRXb3JrQ29tcGxldGVkKGludGVyYWN0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmV0dXJuVmFsdWU7XG59XG5mdW5jdGlvbiB1bnN0YWJsZV93cmFwKGNhbGxiYWNrKSB7XG4gIHZhciB0aHJlYWRJRCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogREVGQVVMVF9USFJFQURfSUQ7XG5cbiAgdmFyIHdyYXBwZWRJbnRlcmFjdGlvbnMgPSBleHBvcnRzLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQ7XG4gIHZhciBzdWJzY3JpYmVyID0gZXhwb3J0cy5fX3N1YnNjcmliZXJSZWYuY3VycmVudDtcblxuICBpZiAoc3Vic2NyaWJlciAhPT0gbnVsbCkge1xuICAgIHN1YnNjcmliZXIub25Xb3JrU2NoZWR1bGVkKHdyYXBwZWRJbnRlcmFjdGlvbnMsIHRocmVhZElEKTtcbiAgfSAvLyBVcGRhdGUgdGhlIHBlbmRpbmcgYXN5bmMgd29yayBjb3VudCBmb3IgdGhlIGN1cnJlbnQgaW50ZXJhY3Rpb25zLlxuICAvLyBVcGRhdGUgYWZ0ZXIgY2FsbGluZyBzdWJzY3JpYmVycyBpbiBjYXNlIG9mIGVycm9yLlxuXG5cbiAgd3JhcHBlZEludGVyYWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChpbnRlcmFjdGlvbikge1xuICAgIGludGVyYWN0aW9uLl9fY291bnQrKztcbiAgfSk7XG4gIHZhciBoYXNSdW4gPSBmYWxzZTtcblxuICBmdW5jdGlvbiB3cmFwcGVkKCkge1xuICAgIHZhciBwcmV2SW50ZXJhY3Rpb25zID0gZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50O1xuICAgIGV4cG9ydHMuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudCA9IHdyYXBwZWRJbnRlcmFjdGlvbnM7XG4gICAgc3Vic2NyaWJlciA9IGV4cG9ydHMuX19zdWJzY3JpYmVyUmVmLmN1cnJlbnQ7XG5cbiAgICB0cnkge1xuICAgICAgdmFyIHJldHVyblZhbHVlO1xuXG4gICAgICB0cnkge1xuICAgICAgICBpZiAoc3Vic2NyaWJlciAhPT0gbnVsbCkge1xuICAgICAgICAgIHN1YnNjcmliZXIub25Xb3JrU3RhcnRlZCh3cmFwcGVkSW50ZXJhY3Rpb25zLCB0aHJlYWRJRCk7XG4gICAgICAgIH1cbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuVmFsdWUgPSBjYWxsYmFjay5hcHBseSh1bmRlZmluZWQsIGFyZ3VtZW50cyk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50ID0gcHJldkludGVyYWN0aW9ucztcblxuICAgICAgICAgIGlmIChzdWJzY3JpYmVyICE9PSBudWxsKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm9uV29ya1N0b3BwZWQod3JhcHBlZEludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmV0dXJuVmFsdWU7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmICghaGFzUnVuKSB7XG4gICAgICAgIC8vIFdlIG9ubHkgZXhwZWN0IGEgd3JhcHBlZCBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCBvbmNlLFxuICAgICAgICAvLyBCdXQgaW4gdGhlIGV2ZW50IHRoYXQgaXQncyBleGVjdXRlZCBtb3JlIHRoYW4gb25jZVx1MjAxM1xuICAgICAgICAvLyBPbmx5IGRlY3JlbWVudCB0aGUgb3V0c3RhbmRpbmcgaW50ZXJhY3Rpb24gY291bnRzIG9uY2UuXG4gICAgICAgIGhhc1J1biA9IHRydWU7IC8vIFVwZGF0ZSBwZW5kaW5nIGFzeW5jIGNvdW50cyBmb3IgYWxsIHdyYXBwZWQgaW50ZXJhY3Rpb25zLlxuICAgICAgICAvLyBJZiB0aGlzIHdhcyB0aGUgbGFzdCBzY2hlZHVsZWQgYXN5bmMgd29yayBmb3IgYW55IG9mIHRoZW0sXG4gICAgICAgIC8vIE1hcmsgdGhlbSBhcyBjb21wbGV0ZWQuXG5cbiAgICAgICAgd3JhcHBlZEludGVyYWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChpbnRlcmFjdGlvbikge1xuICAgICAgICAgIGludGVyYWN0aW9uLl9fY291bnQtLTtcblxuICAgICAgICAgIGlmIChzdWJzY3JpYmVyICE9PSBudWxsICYmIGludGVyYWN0aW9uLl9fY291bnQgPT09IDApIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIub25JbnRlcmFjdGlvblNjaGVkdWxlZFdvcmtDb21wbGV0ZWQoaW50ZXJhY3Rpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgd3JhcHBlZC5jYW5jZWwgPSBmdW5jdGlvbiBjYW5jZWwoKSB7XG4gICAgc3Vic2NyaWJlciA9IGV4cG9ydHMuX19zdWJzY3JpYmVyUmVmLmN1cnJlbnQ7XG5cbiAgICB0cnkge1xuICAgICAgaWYgKHN1YnNjcmliZXIgIT09IG51bGwpIHtcbiAgICAgICAgc3Vic2NyaWJlci5vbldvcmtDYW5jZWxlZCh3cmFwcGVkSW50ZXJhY3Rpb25zLCB0aHJlYWRJRCk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIC8vIFVwZGF0ZSBwZW5kaW5nIGFzeW5jIGNvdW50cyBmb3IgYWxsIHdyYXBwZWQgaW50ZXJhY3Rpb25zLlxuICAgICAgLy8gSWYgdGhpcyB3YXMgdGhlIGxhc3Qgc2NoZWR1bGVkIGFzeW5jIHdvcmsgZm9yIGFueSBvZiB0aGVtLFxuICAgICAgLy8gTWFyayB0aGVtIGFzIGNvbXBsZXRlZC5cbiAgICAgIHdyYXBwZWRJbnRlcmFjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoaW50ZXJhY3Rpb24pIHtcbiAgICAgICAgaW50ZXJhY3Rpb24uX19jb3VudC0tO1xuXG4gICAgICAgIGlmIChzdWJzY3JpYmVyICYmIGludGVyYWN0aW9uLl9fY291bnQgPT09IDApIHtcbiAgICAgICAgICBzdWJzY3JpYmVyLm9uSW50ZXJhY3Rpb25TY2hlZHVsZWRXb3JrQ29tcGxldGVkKGludGVyYWN0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiB3cmFwcGVkO1xufVxuXG52YXIgc3Vic2NyaWJlcnMgPSBudWxsO1xuXG57XG4gIHN1YnNjcmliZXJzID0gbmV3IFNldCgpO1xufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV9zdWJzY3JpYmUoc3Vic2NyaWJlcikge1xuICB7XG4gICAgc3Vic2NyaWJlcnMuYWRkKHN1YnNjcmliZXIpO1xuXG4gICAgaWYgKHN1YnNjcmliZXJzLnNpemUgPT09IDEpIHtcbiAgICAgIGV4cG9ydHMuX19zdWJzY3JpYmVyUmVmLmN1cnJlbnQgPSB7XG4gICAgICAgIG9uSW50ZXJhY3Rpb25TY2hlZHVsZWRXb3JrQ29tcGxldGVkOiBvbkludGVyYWN0aW9uU2NoZWR1bGVkV29ya0NvbXBsZXRlZCxcbiAgICAgICAgb25JbnRlcmFjdGlvblRyYWNlZDogb25JbnRlcmFjdGlvblRyYWNlZCxcbiAgICAgICAgb25Xb3JrQ2FuY2VsZWQ6IG9uV29ya0NhbmNlbGVkLFxuICAgICAgICBvbldvcmtTY2hlZHVsZWQ6IG9uV29ya1NjaGVkdWxlZCxcbiAgICAgICAgb25Xb3JrU3RhcnRlZDogb25Xb3JrU3RhcnRlZCxcbiAgICAgICAgb25Xb3JrU3RvcHBlZDogb25Xb3JrU3RvcHBlZFxuICAgICAgfTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHVuc3RhYmxlX3Vuc3Vic2NyaWJlKHN1YnNjcmliZXIpIHtcbiAge1xuICAgIHN1YnNjcmliZXJzLmRlbGV0ZShzdWJzY3JpYmVyKTtcblxuICAgIGlmIChzdWJzY3JpYmVycy5zaXplID09PSAwKSB7XG4gICAgICBleHBvcnRzLl9fc3Vic2NyaWJlclJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gb25JbnRlcmFjdGlvblRyYWNlZChpbnRlcmFjdGlvbikge1xuICB2YXIgZGlkQ2F0Y2hFcnJvciA9IGZhbHNlO1xuICB2YXIgY2F1Z2h0RXJyb3IgPSBudWxsO1xuICBzdWJzY3JpYmVycy5mb3JFYWNoKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgdHJ5IHtcbiAgICAgIHN1YnNjcmliZXIub25JbnRlcmFjdGlvblRyYWNlZChpbnRlcmFjdGlvbik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICghZGlkQ2F0Y2hFcnJvcikge1xuICAgICAgICBkaWRDYXRjaEVycm9yID0gdHJ1ZTtcbiAgICAgICAgY2F1Z2h0RXJyb3IgPSBlcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIGlmIChkaWRDYXRjaEVycm9yKSB7XG4gICAgdGhyb3cgY2F1Z2h0RXJyb3I7XG4gIH1cbn1cblxuZnVuY3Rpb24gb25JbnRlcmFjdGlvblNjaGVkdWxlZFdvcmtDb21wbGV0ZWQoaW50ZXJhY3Rpb24pIHtcbiAgdmFyIGRpZENhdGNoRXJyb3IgPSBmYWxzZTtcbiAgdmFyIGNhdWdodEVycm9yID0gbnVsbDtcbiAgc3Vic2NyaWJlcnMuZm9yRWFjaChmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgIHRyeSB7XG4gICAgICBzdWJzY3JpYmVyLm9uSW50ZXJhY3Rpb25TY2hlZHVsZWRXb3JrQ29tcGxldGVkKGludGVyYWN0aW9uKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKCFkaWRDYXRjaEVycm9yKSB7XG4gICAgICAgIGRpZENhdGNoRXJyb3IgPSB0cnVlO1xuICAgICAgICBjYXVnaHRFcnJvciA9IGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgaWYgKGRpZENhdGNoRXJyb3IpIHtcbiAgICB0aHJvdyBjYXVnaHRFcnJvcjtcbiAgfVxufVxuXG5mdW5jdGlvbiBvbldvcmtTY2hlZHVsZWQoaW50ZXJhY3Rpb25zLCB0aHJlYWRJRCkge1xuICB2YXIgZGlkQ2F0Y2hFcnJvciA9IGZhbHNlO1xuICB2YXIgY2F1Z2h0RXJyb3IgPSBudWxsO1xuICBzdWJzY3JpYmVycy5mb3JFYWNoKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgdHJ5IHtcbiAgICAgIHN1YnNjcmliZXIub25Xb3JrU2NoZWR1bGVkKGludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoIWRpZENhdGNoRXJyb3IpIHtcbiAgICAgICAgZGlkQ2F0Y2hFcnJvciA9IHRydWU7XG4gICAgICAgIGNhdWdodEVycm9yID0gZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICBpZiAoZGlkQ2F0Y2hFcnJvcikge1xuICAgIHRocm93IGNhdWdodEVycm9yO1xuICB9XG59XG5cbmZ1bmN0aW9uIG9uV29ya1N0YXJ0ZWQoaW50ZXJhY3Rpb25zLCB0aHJlYWRJRCkge1xuICB2YXIgZGlkQ2F0Y2hFcnJvciA9IGZhbHNlO1xuICB2YXIgY2F1Z2h0RXJyb3IgPSBudWxsO1xuICBzdWJzY3JpYmVycy5mb3JFYWNoKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgdHJ5IHtcbiAgICAgIHN1YnNjcmliZXIub25Xb3JrU3RhcnRlZChpbnRlcmFjdGlvbnMsIHRocmVhZElEKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKCFkaWRDYXRjaEVycm9yKSB7XG4gICAgICAgIGRpZENhdGNoRXJyb3IgPSB0cnVlO1xuICAgICAgICBjYXVnaHRFcnJvciA9IGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgaWYgKGRpZENhdGNoRXJyb3IpIHtcbiAgICB0aHJvdyBjYXVnaHRFcnJvcjtcbiAgfVxufVxuXG5mdW5jdGlvbiBvbldvcmtTdG9wcGVkKGludGVyYWN0aW9ucywgdGhyZWFkSUQpIHtcbiAgdmFyIGRpZENhdGNoRXJyb3IgPSBmYWxzZTtcbiAgdmFyIGNhdWdodEVycm9yID0gbnVsbDtcbiAgc3Vic2NyaWJlcnMuZm9yRWFjaChmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgIHRyeSB7XG4gICAgICBzdWJzY3JpYmVyLm9uV29ya1N0b3BwZWQoaW50ZXJhY3Rpb25zLCB0aHJlYWRJRCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICghZGlkQ2F0Y2hFcnJvcikge1xuICAgICAgICBkaWRDYXRjaEVycm9yID0gdHJ1ZTtcbiAgICAgICAgY2F1Z2h0RXJyb3IgPSBlcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIGlmIChkaWRDYXRjaEVycm9yKSB7XG4gICAgdGhyb3cgY2F1Z2h0RXJyb3I7XG4gIH1cbn1cblxuZnVuY3Rpb24gb25Xb3JrQ2FuY2VsZWQoaW50ZXJhY3Rpb25zLCB0aHJlYWRJRCkge1xuICB2YXIgZGlkQ2F0Y2hFcnJvciA9IGZhbHNlO1xuICB2YXIgY2F1Z2h0RXJyb3IgPSBudWxsO1xuICBzdWJzY3JpYmVycy5mb3JFYWNoKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgdHJ5IHtcbiAgICAgIHN1YnNjcmliZXIub25Xb3JrQ2FuY2VsZWQoaW50ZXJhY3Rpb25zLCB0aHJlYWRJRCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICghZGlkQ2F0Y2hFcnJvcikge1xuICAgICAgICBkaWRDYXRjaEVycm9yID0gdHJ1ZTtcbiAgICAgICAgY2F1Z2h0RXJyb3IgPSBlcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIGlmIChkaWRDYXRjaEVycm9yKSB7XG4gICAgdGhyb3cgY2F1Z2h0RXJyb3I7XG4gIH1cbn1cblxuZXhwb3J0cy51bnN0YWJsZV9jbGVhciA9IHVuc3RhYmxlX2NsZWFyO1xuZXhwb3J0cy51bnN0YWJsZV9nZXRDdXJyZW50ID0gdW5zdGFibGVfZ2V0Q3VycmVudDtcbmV4cG9ydHMudW5zdGFibGVfZ2V0VGhyZWFkSUQgPSB1bnN0YWJsZV9nZXRUaHJlYWRJRDtcbmV4cG9ydHMudW5zdGFibGVfc3Vic2NyaWJlID0gdW5zdGFibGVfc3Vic2NyaWJlO1xuZXhwb3J0cy51bnN0YWJsZV90cmFjZSA9IHVuc3RhYmxlX3RyYWNlO1xuZXhwb3J0cy51bnN0YWJsZV91bnN1YnNjcmliZSA9IHVuc3RhYmxlX3Vuc3Vic2NyaWJlO1xuZXhwb3J0cy51bnN0YWJsZV93cmFwID0gdW5zdGFibGVfd3JhcDtcbiAgfSkoKTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvc2NoZWR1bGVyLXRyYWNpbmcucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvc2NoZWR1bGVyLXRyYWNpbmcuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsICIvKiogQGxpY2Vuc2UgUmVhY3QgdjE3LjAuMlxuICogcmVhY3QtZG9tLmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIChmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcbnZhciBfYXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xudmFyIFNjaGVkdWxlciA9IHJlcXVpcmUoJ3NjaGVkdWxlcicpO1xudmFyIHRyYWNpbmcgPSByZXF1aXJlKCdzY2hlZHVsZXIvdHJhY2luZycpO1xuXG52YXIgUmVhY3RTaGFyZWRJbnRlcm5hbHMgPSBSZWFjdC5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRDtcblxuLy8gYnkgY2FsbHMgdG8gdGhlc2UgbWV0aG9kcyBieSBhIEJhYmVsIHBsdWdpbi5cbi8vXG4vLyBJbiBQUk9EIChvciBpbiBwYWNrYWdlcyB3aXRob3V0IGFjY2VzcyB0byBSZWFjdCBpbnRlcm5hbHMpLFxuLy8gdGhleSBhcmUgbGVmdCBhcyB0aGV5IGFyZSBpbnN0ZWFkLlxuXG5mdW5jdGlvbiB3YXJuKGZvcm1hdCkge1xuICB7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgcHJpbnRXYXJuaW5nKCd3YXJuJywgZm9ybWF0LCBhcmdzKTtcbiAgfVxufVxuZnVuY3Rpb24gZXJyb3IoZm9ybWF0KSB7XG4gIHtcbiAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIgPiAxID8gX2xlbjIgLSAxIDogMCksIF9rZXkyID0gMTsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgYXJnc1tfa2V5MiAtIDFdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICB9XG5cbiAgICBwcmludFdhcm5pbmcoJ2Vycm9yJywgZm9ybWF0LCBhcmdzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwcmludFdhcm5pbmcobGV2ZWwsIGZvcm1hdCwgYXJncykge1xuICAvLyBXaGVuIGNoYW5naW5nIHRoaXMgbG9naWMsIHlvdSBtaWdodCB3YW50IHRvIGFsc29cbiAgLy8gdXBkYXRlIGNvbnNvbGVXaXRoU3RhY2tEZXYud3d3LmpzIGFzIHdlbGwuXG4gIHtcbiAgICB2YXIgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0RGVidWdDdXJyZW50RnJhbWU7XG4gICAgdmFyIHN0YWNrID0gUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5nZXRTdGFja0FkZGVuZHVtKCk7XG5cbiAgICBpZiAoc3RhY2sgIT09ICcnKSB7XG4gICAgICBmb3JtYXQgKz0gJyVzJztcbiAgICAgIGFyZ3MgPSBhcmdzLmNvbmNhdChbc3RhY2tdKTtcbiAgICB9XG5cbiAgICB2YXIgYXJnc1dpdGhGb3JtYXQgPSBhcmdzLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgcmV0dXJuICcnICsgaXRlbTtcbiAgICB9KTsgLy8gQ2FyZWZ1bDogUk4gY3VycmVudGx5IGRlcGVuZHMgb24gdGhpcyBwcmVmaXhcblxuICAgIGFyZ3NXaXRoRm9ybWF0LnVuc2hpZnQoJ1dhcm5pbmc6ICcgKyBmb3JtYXQpOyAvLyBXZSBpbnRlbnRpb25hbGx5IGRvbid0IHVzZSBzcHJlYWQgKG9yIC5hcHBseSkgZGlyZWN0bHkgYmVjYXVzZSBpdFxuICAgIC8vIGJyZWFrcyBJRTk6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTM2MTBcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nXG5cbiAgICBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbChjb25zb2xlW2xldmVsXSwgY29uc29sZSwgYXJnc1dpdGhGb3JtYXQpO1xuICB9XG59XG5cbmlmICghUmVhY3QpIHtcbiAge1xuICAgIHRocm93IEVycm9yKCBcIlJlYWN0RE9NIHdhcyBsb2FkZWQgYmVmb3JlIFJlYWN0LiBNYWtlIHN1cmUgeW91IGxvYWQgdGhlIFJlYWN0IHBhY2thZ2UgYmVmb3JlIGxvYWRpbmcgUmVhY3RET00uXCIgKTtcbiAgfVxufVxuXG52YXIgRnVuY3Rpb25Db21wb25lbnQgPSAwO1xudmFyIENsYXNzQ29tcG9uZW50ID0gMTtcbnZhciBJbmRldGVybWluYXRlQ29tcG9uZW50ID0gMjsgLy8gQmVmb3JlIHdlIGtub3cgd2hldGhlciBpdCBpcyBmdW5jdGlvbiBvciBjbGFzc1xuXG52YXIgSG9zdFJvb3QgPSAzOyAvLyBSb290IG9mIGEgaG9zdCB0cmVlLiBDb3VsZCBiZSBuZXN0ZWQgaW5zaWRlIGFub3RoZXIgbm9kZS5cblxudmFyIEhvc3RQb3J0YWwgPSA0OyAvLyBBIHN1YnRyZWUuIENvdWxkIGJlIGFuIGVudHJ5IHBvaW50IHRvIGEgZGlmZmVyZW50IHJlbmRlcmVyLlxuXG52YXIgSG9zdENvbXBvbmVudCA9IDU7XG52YXIgSG9zdFRleHQgPSA2O1xudmFyIEZyYWdtZW50ID0gNztcbnZhciBNb2RlID0gODtcbnZhciBDb250ZXh0Q29uc3VtZXIgPSA5O1xudmFyIENvbnRleHRQcm92aWRlciA9IDEwO1xudmFyIEZvcndhcmRSZWYgPSAxMTtcbnZhciBQcm9maWxlciA9IDEyO1xudmFyIFN1c3BlbnNlQ29tcG9uZW50ID0gMTM7XG52YXIgTWVtb0NvbXBvbmVudCA9IDE0O1xudmFyIFNpbXBsZU1lbW9Db21wb25lbnQgPSAxNTtcbnZhciBMYXp5Q29tcG9uZW50ID0gMTY7XG52YXIgSW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50ID0gMTc7XG52YXIgRGVoeWRyYXRlZEZyYWdtZW50ID0gMTg7XG52YXIgU3VzcGVuc2VMaXN0Q29tcG9uZW50ID0gMTk7XG52YXIgRnVuZGFtZW50YWxDb21wb25lbnQgPSAyMDtcbnZhciBTY29wZUNvbXBvbmVudCA9IDIxO1xudmFyIEJsb2NrID0gMjI7XG52YXIgT2Zmc2NyZWVuQ29tcG9uZW50ID0gMjM7XG52YXIgTGVnYWN5SGlkZGVuQ29tcG9uZW50ID0gMjQ7XG5cbi8vIEZpbHRlciBjZXJ0YWluIERPTSBhdHRyaWJ1dGVzIChlLmcuIHNyYywgaHJlZikgaWYgdGhlaXIgdmFsdWVzIGFyZSBlbXB0eSBzdHJpbmdzLlxuXG52YXIgZW5hYmxlUHJvZmlsZXJUaW1lciA9IHRydWU7IC8vIFJlY29yZCBkdXJhdGlvbnMgZm9yIGNvbW1pdCBhbmQgcGFzc2l2ZSBlZmZlY3RzIHBoYXNlcy5cblxudmFyIGVuYWJsZUZ1bmRhbWVudGFsQVBJID0gZmFsc2U7IC8vIEV4cGVyaW1lbnRhbCBTY29wZSBzdXBwb3J0LlxudmFyIGVuYWJsZU5ld1JlY29uY2lsZXIgPSBmYWxzZTsgLy8gRXJyb3JzIHRoYXQgYXJlIHRocm93biB3aGlsZSB1bm1vdW50aW5nIChvciBhZnRlciBpbiB0aGUgY2FzZSBvZiBwYXNzaXZlIGVmZmVjdHMpXG52YXIgd2FybkFib3V0U3RyaW5nUmVmcyA9IGZhbHNlO1xuXG52YXIgYWxsTmF0aXZlRXZlbnRzID0gbmV3IFNldCgpO1xuLyoqXG4gKiBNYXBwaW5nIGZyb20gcmVnaXN0cmF0aW9uIG5hbWUgdG8gZXZlbnQgbmFtZVxuICovXG5cblxudmFyIHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXMgPSB7fTtcbi8qKlxuICogTWFwcGluZyBmcm9tIGxvd2VyY2FzZSByZWdpc3RyYXRpb24gbmFtZXMgdG8gdGhlIHByb3Blcmx5IGNhc2VkIHZlcnNpb24sXG4gKiB1c2VkIHRvIHdhcm4gaW4gdGhlIGNhc2Ugb2YgbWlzc2luZyBldmVudCBoYW5kbGVycy4gQXZhaWxhYmxlXG4gKiBvbmx5IGluIHRydWUuXG4gKiBAdHlwZSB7T2JqZWN0fVxuICovXG5cbnZhciBwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzID0gIHt9IDsgLy8gVHJ1c3QgdGhlIGRldmVsb3BlciB0byBvbmx5IHVzZSBwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzIGluIHRydWVcblxuZnVuY3Rpb24gcmVnaXN0ZXJUd29QaGFzZUV2ZW50KHJlZ2lzdHJhdGlvbk5hbWUsIGRlcGVuZGVuY2llcykge1xuICByZWdpc3RlckRpcmVjdEV2ZW50KHJlZ2lzdHJhdGlvbk5hbWUsIGRlcGVuZGVuY2llcyk7XG4gIHJlZ2lzdGVyRGlyZWN0RXZlbnQocmVnaXN0cmF0aW9uTmFtZSArICdDYXB0dXJlJywgZGVwZW5kZW5jaWVzKTtcbn1cbmZ1bmN0aW9uIHJlZ2lzdGVyRGlyZWN0RXZlbnQocmVnaXN0cmF0aW9uTmFtZSwgZGVwZW5kZW5jaWVzKSB7XG4gIHtcbiAgICBpZiAocmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llc1tyZWdpc3RyYXRpb25OYW1lXSkge1xuICAgICAgZXJyb3IoJ0V2ZW50UmVnaXN0cnk6IE1vcmUgdGhhbiBvbmUgcGx1Z2luIGF0dGVtcHRlZCB0byBwdWJsaXNoIHRoZSBzYW1lICcgKyAncmVnaXN0cmF0aW9uIG5hbWUsIGAlc2AuJywgcmVnaXN0cmF0aW9uTmFtZSk7XG4gICAgfVxuICB9XG5cbiAgcmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llc1tyZWdpc3RyYXRpb25OYW1lXSA9IGRlcGVuZGVuY2llcztcblxuICB7XG4gICAgdmFyIGxvd2VyQ2FzZWROYW1lID0gcmVnaXN0cmF0aW9uTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXNbbG93ZXJDYXNlZE5hbWVdID0gcmVnaXN0cmF0aW9uTmFtZTtcblxuICAgIGlmIChyZWdpc3RyYXRpb25OYW1lID09PSAnb25Eb3VibGVDbGljaycpIHtcbiAgICAgIHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXMub25kYmxjbGljayA9IHJlZ2lzdHJhdGlvbk5hbWU7XG4gICAgfVxuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZXBlbmRlbmNpZXMubGVuZ3RoOyBpKyspIHtcbiAgICBhbGxOYXRpdmVFdmVudHMuYWRkKGRlcGVuZGVuY2llc1tpXSk7XG4gIH1cbn1cblxudmFyIGNhblVzZURPTSA9ICEhKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcpO1xuXG4vLyBBIHJlc2VydmVkIGF0dHJpYnV0ZS5cbi8vIEl0IGlzIGhhbmRsZWQgYnkgUmVhY3Qgc2VwYXJhdGVseSBhbmQgc2hvdWxkbid0IGJlIHdyaXR0ZW4gdG8gdGhlIERPTS5cbnZhciBSRVNFUlZFRCA9IDA7IC8vIEEgc2ltcGxlIHN0cmluZyBhdHRyaWJ1dGUuXG4vLyBBdHRyaWJ1dGVzIHRoYXQgYXJlbid0IGluIHRoZSBmaWx0ZXIgYXJlIHByZXN1bWVkIHRvIGhhdmUgdGhpcyB0eXBlLlxuXG52YXIgU1RSSU5HID0gMTsgLy8gQSBzdHJpbmcgYXR0cmlidXRlIHRoYXQgYWNjZXB0cyBib29sZWFucyBpbiBSZWFjdC4gSW4gSFRNTCwgdGhlc2UgYXJlIGNhbGxlZFxuLy8gXCJlbnVtZXJhdGVkXCIgYXR0cmlidXRlcyB3aXRoIFwidHJ1ZVwiIGFuZCBcImZhbHNlXCIgYXMgcG9zc2libGUgdmFsdWVzLlxuLy8gV2hlbiB0cnVlLCBpdCBzaG91bGQgYmUgc2V0IHRvIGEgXCJ0cnVlXCIgc3RyaW5nLlxuLy8gV2hlbiBmYWxzZSwgaXQgc2hvdWxkIGJlIHNldCB0byBhIFwiZmFsc2VcIiBzdHJpbmcuXG5cbnZhciBCT09MRUFOSVNIX1NUUklORyA9IDI7IC8vIEEgcmVhbCBib29sZWFuIGF0dHJpYnV0ZS5cbi8vIFdoZW4gdHJ1ZSwgaXQgc2hvdWxkIGJlIHByZXNlbnQgKHNldCBlaXRoZXIgdG8gYW4gZW1wdHkgc3RyaW5nIG9yIGl0cyBuYW1lKS5cbi8vIFdoZW4gZmFsc2UsIGl0IHNob3VsZCBiZSBvbWl0dGVkLlxuXG52YXIgQk9PTEVBTiA9IDM7IC8vIEFuIGF0dHJpYnV0ZSB0aGF0IGNhbiBiZSB1c2VkIGFzIGEgZmxhZyBhcyB3ZWxsIGFzIHdpdGggYSB2YWx1ZS5cbi8vIFdoZW4gdHJ1ZSwgaXQgc2hvdWxkIGJlIHByZXNlbnQgKHNldCBlaXRoZXIgdG8gYW4gZW1wdHkgc3RyaW5nIG9yIGl0cyBuYW1lKS5cbi8vIFdoZW4gZmFsc2UsIGl0IHNob3VsZCBiZSBvbWl0dGVkLlxuLy8gRm9yIGFueSBvdGhlciB2YWx1ZSwgc2hvdWxkIGJlIHByZXNlbnQgd2l0aCB0aGF0IHZhbHVlLlxuXG52YXIgT1ZFUkxPQURFRF9CT09MRUFOID0gNDsgLy8gQW4gYXR0cmlidXRlIHRoYXQgbXVzdCBiZSBudW1lcmljIG9yIHBhcnNlIGFzIGEgbnVtZXJpYy5cbi8vIFdoZW4gZmFsc3ksIGl0IHNob3VsZCBiZSByZW1vdmVkLlxuXG52YXIgTlVNRVJJQyA9IDU7IC8vIEFuIGF0dHJpYnV0ZSB0aGF0IG11c3QgYmUgcG9zaXRpdmUgbnVtZXJpYyBvciBwYXJzZSBhcyBhIHBvc2l0aXZlIG51bWVyaWMuXG4vLyBXaGVuIGZhbHN5LCBpdCBzaG91bGQgYmUgcmVtb3ZlZC5cblxudmFyIFBPU0lUSVZFX05VTUVSSUMgPSA2O1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXG52YXIgQVRUUklCVVRFX05BTUVfU1RBUlRfQ0hBUiA9IFwiOkEtWl9hLXpcXFxcdTAwQzAtXFxcXHUwMEQ2XFxcXHUwMEQ4LVxcXFx1MDBGNlxcXFx1MDBGOC1cXFxcdTAyRkZcXFxcdTAzNzAtXFxcXHUwMzdEXFxcXHUwMzdGLVxcXFx1MUZGRlxcXFx1MjAwQy1cXFxcdTIwMERcXFxcdTIwNzAtXFxcXHUyMThGXFxcXHUyQzAwLVxcXFx1MkZFRlxcXFx1MzAwMS1cXFxcdUQ3RkZcXFxcdUY5MDAtXFxcXHVGRENGXFxcXHVGREYwLVxcXFx1RkZGRFwiO1xuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuICovXG5cbnZhciBBVFRSSUJVVEVfTkFNRV9DSEFSID0gQVRUUklCVVRFX05BTUVfU1RBUlRfQ0hBUiArIFwiXFxcXC0uMC05XFxcXHUwMEI3XFxcXHUwMzAwLVxcXFx1MDM2RlxcXFx1MjAzRi1cXFxcdTIwNDBcIjtcbnZhciBST09UX0FUVFJJQlVURV9OQU1FID0gJ2RhdGEtcmVhY3Ryb290JztcbnZhciBWQUxJRF9BVFRSSUJVVEVfTkFNRV9SRUdFWCA9IG5ldyBSZWdFeHAoJ15bJyArIEFUVFJJQlVURV9OQU1FX1NUQVJUX0NIQVIgKyAnXVsnICsgQVRUUklCVVRFX05BTUVfQ0hBUiArICddKiQnKTtcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgaWxsZWdhbEF0dHJpYnV0ZU5hbWVDYWNoZSA9IHt9O1xudmFyIHZhbGlkYXRlZEF0dHJpYnV0ZU5hbWVDYWNoZSA9IHt9O1xuZnVuY3Rpb24gaXNBdHRyaWJ1dGVOYW1lU2FmZShhdHRyaWJ1dGVOYW1lKSB7XG4gIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbGlkYXRlZEF0dHJpYnV0ZU5hbWVDYWNoZSwgYXR0cmlidXRlTmFtZSkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGlsbGVnYWxBdHRyaWJ1dGVOYW1lQ2FjaGUsIGF0dHJpYnV0ZU5hbWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKFZBTElEX0FUVFJJQlVURV9OQU1FX1JFR0VYLnRlc3QoYXR0cmlidXRlTmFtZSkpIHtcbiAgICB2YWxpZGF0ZWRBdHRyaWJ1dGVOYW1lQ2FjaGVbYXR0cmlidXRlTmFtZV0gPSB0cnVlO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWxsZWdhbEF0dHJpYnV0ZU5hbWVDYWNoZVthdHRyaWJ1dGVOYW1lXSA9IHRydWU7XG5cbiAge1xuICAgIGVycm9yKCdJbnZhbGlkIGF0dHJpYnV0ZSBuYW1lOiBgJXNgJywgYXR0cmlidXRlTmFtZSk7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBzaG91bGRJZ25vcmVBdHRyaWJ1dGUobmFtZSwgcHJvcGVydHlJbmZvLCBpc0N1c3RvbUNvbXBvbmVudFRhZykge1xuICBpZiAocHJvcGVydHlJbmZvICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIHByb3BlcnR5SW5mby50eXBlID09PSBSRVNFUlZFRDtcbiAgfVxuXG4gIGlmIChpc0N1c3RvbUNvbXBvbmVudFRhZykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChuYW1lLmxlbmd0aCA+IDIgJiYgKG5hbWVbMF0gPT09ICdvJyB8fCBuYW1lWzBdID09PSAnTycpICYmIChuYW1lWzFdID09PSAnbicgfHwgbmFtZVsxXSA9PT0gJ04nKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gc2hvdWxkUmVtb3ZlQXR0cmlidXRlV2l0aFdhcm5pbmcobmFtZSwgdmFsdWUsIHByb3BlcnR5SW5mbywgaXNDdXN0b21Db21wb25lbnRUYWcpIHtcbiAgaWYgKHByb3BlcnR5SW5mbyAhPT0gbnVsbCAmJiBwcm9wZXJ0eUluZm8udHlwZSA9PT0gUkVTRVJWRUQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgIGNhc2UgJ2Z1bmN0aW9uJzogLy8gJEZsb3dJc3N1ZSBzeW1ib2wgaXMgcGVyZmVjdGx5IHZhbGlkIGhlcmVcblxuICAgIGNhc2UgJ3N5bWJvbCc6XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICByZXR1cm4gdHJ1ZTtcblxuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAge1xuICAgICAgICBpZiAoaXNDdXN0b21Db21wb25lbnRUYWcpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvcGVydHlJbmZvICE9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuICFwcm9wZXJ0eUluZm8uYWNjZXB0c0Jvb2xlYW5zO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBwcmVmaXggPSBuYW1lLnRvTG93ZXJDYXNlKCkuc2xpY2UoMCwgNSk7XG4gICAgICAgICAgcmV0dXJuIHByZWZpeCAhPT0gJ2RhdGEtJyAmJiBwcmVmaXggIT09ICdhcmlhLSc7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbmZ1bmN0aW9uIHNob3VsZFJlbW92ZUF0dHJpYnV0ZShuYW1lLCB2YWx1ZSwgcHJvcGVydHlJbmZvLCBpc0N1c3RvbUNvbXBvbmVudFRhZykge1xuICBpZiAodmFsdWUgPT09IG51bGwgfHwgdHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHNob3VsZFJlbW92ZUF0dHJpYnV0ZVdpdGhXYXJuaW5nKG5hbWUsIHZhbHVlLCBwcm9wZXJ0eUluZm8sIGlzQ3VzdG9tQ29tcG9uZW50VGFnKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKGlzQ3VzdG9tQ29tcG9uZW50VGFnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHByb3BlcnR5SW5mbyAhPT0gbnVsbCkge1xuXG4gICAgc3dpdGNoIChwcm9wZXJ0eUluZm8udHlwZSkge1xuICAgICAgY2FzZSBCT09MRUFOOlxuICAgICAgICByZXR1cm4gIXZhbHVlO1xuXG4gICAgICBjYXNlIE9WRVJMT0FERURfQk9PTEVBTjpcbiAgICAgICAgcmV0dXJuIHZhbHVlID09PSBmYWxzZTtcblxuICAgICAgY2FzZSBOVU1FUklDOlxuICAgICAgICByZXR1cm4gaXNOYU4odmFsdWUpO1xuXG4gICAgICBjYXNlIFBPU0lUSVZFX05VTUVSSUM6XG4gICAgICAgIHJldHVybiBpc05hTih2YWx1ZSkgfHwgdmFsdWUgPCAxO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGdldFByb3BlcnR5SW5mbyhuYW1lKSB7XG4gIHJldHVybiBwcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KG5hbWUpID8gcHJvcGVydGllc1tuYW1lXSA6IG51bGw7XG59XG5cbmZ1bmN0aW9uIFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCB0eXBlLCBtdXN0VXNlUHJvcGVydHksIGF0dHJpYnV0ZU5hbWUsIGF0dHJpYnV0ZU5hbWVzcGFjZSwgc2FuaXRpemVVUkwsIHJlbW92ZUVtcHR5U3RyaW5nKSB7XG4gIHRoaXMuYWNjZXB0c0Jvb2xlYW5zID0gdHlwZSA9PT0gQk9PTEVBTklTSF9TVFJJTkcgfHwgdHlwZSA9PT0gQk9PTEVBTiB8fCB0eXBlID09PSBPVkVSTE9BREVEX0JPT0xFQU47XG4gIHRoaXMuYXR0cmlidXRlTmFtZSA9IGF0dHJpYnV0ZU5hbWU7XG4gIHRoaXMuYXR0cmlidXRlTmFtZXNwYWNlID0gYXR0cmlidXRlTmFtZXNwYWNlO1xuICB0aGlzLm11c3RVc2VQcm9wZXJ0eSA9IG11c3RVc2VQcm9wZXJ0eTtcbiAgdGhpcy5wcm9wZXJ0eU5hbWUgPSBuYW1lO1xuICB0aGlzLnR5cGUgPSB0eXBlO1xuICB0aGlzLnNhbml0aXplVVJMID0gc2FuaXRpemVVUkw7XG4gIHRoaXMucmVtb3ZlRW1wdHlTdHJpbmcgPSByZW1vdmVFbXB0eVN0cmluZztcbn0gLy8gV2hlbiBhZGRpbmcgYXR0cmlidXRlcyB0byB0aGlzIGxpc3QsIGJlIHN1cmUgdG8gYWxzbyBhZGQgdGhlbSB0b1xuLy8gdGhlIGBwb3NzaWJsZVN0YW5kYXJkTmFtZXNgIG1vZHVsZSB0byBlbnN1cmUgY2FzaW5nIGFuZCBpbmNvcnJlY3Rcbi8vIG5hbWUgd2FybmluZ3MuXG5cblxudmFyIHByb3BlcnRpZXMgPSB7fTsgLy8gVGhlc2UgcHJvcHMgYXJlIHJlc2VydmVkIGJ5IFJlYWN0LiBUaGV5IHNob3VsZG4ndCBiZSB3cml0dGVuIHRvIHRoZSBET00uXG5cbnZhciByZXNlcnZlZFByb3BzID0gWydjaGlsZHJlbicsICdkYW5nZXJvdXNseVNldElubmVySFRNTCcsIC8vIFRPRE86IFRoaXMgcHJldmVudHMgdGhlIGFzc2lnbm1lbnQgb2YgZGVmYXVsdFZhbHVlIHRvIHJlZ3VsYXJcbi8vIGVsZW1lbnRzIChub3QganVzdCBpbnB1dHMpLiBOb3cgdGhhdCBSZWFjdERPTUlucHV0IGFzc2lnbnMgdG8gdGhlXG4vLyBkZWZhdWx0VmFsdWUgcHJvcGVydHkgLS0gZG8gd2UgbmVlZCB0aGlzP1xuJ2RlZmF1bHRWYWx1ZScsICdkZWZhdWx0Q2hlY2tlZCcsICdpbm5lckhUTUwnLCAnc3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nJywgJ3N1cHByZXNzSHlkcmF0aW9uV2FybmluZycsICdzdHlsZSddO1xucmVzZXJ2ZWRQcm9wcy5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIFJFU0VSVkVELCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIG5hbWUsIC8vIGF0dHJpYnV0ZU5hbWVcbiAgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTsgLy8gQSBmZXcgUmVhY3Qgc3RyaW5nIGF0dHJpYnV0ZXMgaGF2ZSBhIGRpZmZlcmVudCBuYW1lLlxuLy8gVGhpcyBpcyBhIG1hcHBpbmcgZnJvbSBSZWFjdCBwcm9wIG5hbWVzIHRvIHRoZSBhdHRyaWJ1dGUgbmFtZXMuXG5cbltbJ2FjY2VwdENoYXJzZXQnLCAnYWNjZXB0LWNoYXJzZXQnXSwgWydjbGFzc05hbWUnLCAnY2xhc3MnXSwgWydodG1sRm9yJywgJ2ZvciddLCBbJ2h0dHBFcXVpdicsICdodHRwLWVxdWl2J11dLmZvckVhY2goZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIG5hbWUgPSBfcmVmWzBdLFxuICAgICAgYXR0cmlidXRlTmFtZSA9IF9yZWZbMV07XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIFNUUklORywgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBhdHRyaWJ1dGVOYW1lLCAvLyBhdHRyaWJ1dGVOYW1lXG4gIG51bGwsIC8vIGF0dHJpYnV0ZU5hbWVzcGFjZVxuICBmYWxzZSwgLy8gc2FuaXRpemVVUkxcbiAgZmFsc2UpO1xufSk7IC8vIFRoZXNlIGFyZSBcImVudW1lcmF0ZWRcIiBIVE1MIGF0dHJpYnV0ZXMgdGhhdCBhY2NlcHQgXCJ0cnVlXCIgYW5kIFwiZmFsc2VcIi5cbi8vIEluIFJlYWN0LCB3ZSBsZXQgdXNlcnMgcGFzcyBgdHJ1ZWAgYW5kIGBmYWxzZWAgZXZlbiB0aG91Z2ggdGVjaG5pY2FsbHlcbi8vIHRoZXNlIGFyZW4ndCBib29sZWFuIGF0dHJpYnV0ZXMgKHRoZXkgYXJlIGNvZXJjZWQgdG8gc3RyaW5ncykuXG5cblsnY29udGVudEVkaXRhYmxlJywgJ2RyYWdnYWJsZScsICdzcGVsbENoZWNrJywgJ3ZhbHVlJ10uZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICBwcm9wZXJ0aWVzW25hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCBCT09MRUFOSVNIX1NUUklORywgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBuYW1lLnRvTG93ZXJDYXNlKCksIC8vIGF0dHJpYnV0ZU5hbWVcbiAgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTsgLy8gVGhlc2UgYXJlIFwiZW51bWVyYXRlZFwiIFNWRyBhdHRyaWJ1dGVzIHRoYXQgYWNjZXB0IFwidHJ1ZVwiIGFuZCBcImZhbHNlXCIuXG4vLyBJbiBSZWFjdCwgd2UgbGV0IHVzZXJzIHBhc3MgYHRydWVgIGFuZCBgZmFsc2VgIGV2ZW4gdGhvdWdoIHRlY2huaWNhbGx5XG4vLyB0aGVzZSBhcmVuJ3QgYm9vbGVhbiBhdHRyaWJ1dGVzICh0aGV5IGFyZSBjb2VyY2VkIHRvIHN0cmluZ3MpLlxuLy8gU2luY2UgdGhlc2UgYXJlIFNWRyBhdHRyaWJ1dGVzLCB0aGVpciBhdHRyaWJ1dGUgbmFtZXMgYXJlIGNhc2Utc2Vuc2l0aXZlLlxuXG5bJ2F1dG9SZXZlcnNlJywgJ2V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQnLCAnZm9jdXNhYmxlJywgJ3ByZXNlcnZlQWxwaGEnXS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIEJPT0xFQU5JU0hfU1RSSU5HLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIG5hbWUsIC8vIGF0dHJpYnV0ZU5hbWVcbiAgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTsgLy8gVGhlc2UgYXJlIEhUTUwgYm9vbGVhbiBhdHRyaWJ1dGVzLlxuXG5bJ2FsbG93RnVsbFNjcmVlbicsICdhc3luYycsIC8vIE5vdGU6IHRoZXJlIGlzIGEgc3BlY2lhbCBjYXNlIHRoYXQgcHJldmVudHMgaXQgZnJvbSBiZWluZyB3cml0dGVuIHRvIHRoZSBET01cbi8vIG9uIHRoZSBjbGllbnQgc2lkZSBiZWNhdXNlIHRoZSBicm93c2VycyBhcmUgaW5jb25zaXN0ZW50LiBJbnN0ZWFkIHdlIGNhbGwgZm9jdXMoKS5cbidhdXRvRm9jdXMnLCAnYXV0b1BsYXknLCAnY29udHJvbHMnLCAnZGVmYXVsdCcsICdkZWZlcicsICdkaXNhYmxlZCcsICdkaXNhYmxlUGljdHVyZUluUGljdHVyZScsICdkaXNhYmxlUmVtb3RlUGxheWJhY2snLCAnZm9ybU5vVmFsaWRhdGUnLCAnaGlkZGVuJywgJ2xvb3AnLCAnbm9Nb2R1bGUnLCAnbm9WYWxpZGF0ZScsICdvcGVuJywgJ3BsYXlzSW5saW5lJywgJ3JlYWRPbmx5JywgJ3JlcXVpcmVkJywgJ3JldmVyc2VkJywgJ3Njb3BlZCcsICdzZWFtbGVzcycsIC8vIE1pY3JvZGF0YVxuJ2l0ZW1TY29wZSddLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgQk9PTEVBTiwgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBuYW1lLnRvTG93ZXJDYXNlKCksIC8vIGF0dHJpYnV0ZU5hbWVcbiAgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTsgLy8gVGhlc2UgYXJlIHRoZSBmZXcgUmVhY3QgcHJvcHMgdGhhdCB3ZSBzZXQgYXMgRE9NIHByb3BlcnRpZXNcbi8vIHJhdGhlciB0aGFuIGF0dHJpYnV0ZXMuIFRoZXNlIGFyZSBhbGwgYm9vbGVhbnMuXG5cblsnY2hlY2tlZCcsIC8vIE5vdGU6IGBvcHRpb24uc2VsZWN0ZWRgIGlzIG5vdCB1cGRhdGVkIGlmIGBzZWxlY3QubXVsdGlwbGVgIGlzXG4vLyBkaXNhYmxlZCB3aXRoIGByZW1vdmVBdHRyaWJ1dGVgLiBXZSBoYXZlIHNwZWNpYWwgbG9naWMgZm9yIGhhbmRsaW5nIHRoaXMuXG4nbXVsdGlwbGUnLCAnbXV0ZWQnLCAnc2VsZWN0ZWQnIC8vIE5PVEU6IGlmIHlvdSBhZGQgYSBjYW1lbENhc2VkIHByb3AgdG8gdGhpcyBsaXN0LFxuLy8geW91J2xsIG5lZWQgdG8gc2V0IGF0dHJpYnV0ZU5hbWUgdG8gbmFtZS50b0xvd2VyQ2FzZSgpXG4vLyBpbnN0ZWFkIGluIHRoZSBhc3NpZ25tZW50IGJlbG93LlxuXS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIEJPT0xFQU4sIHRydWUsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBuYW1lLCAvLyBhdHRyaWJ1dGVOYW1lXG4gIG51bGwsIC8vIGF0dHJpYnV0ZU5hbWVzcGFjZVxuICBmYWxzZSwgLy8gc2FuaXRpemVVUkxcbiAgZmFsc2UpO1xufSk7IC8vIFRoZXNlIGFyZSBIVE1MIGF0dHJpYnV0ZXMgdGhhdCBhcmUgXCJvdmVybG9hZGVkIGJvb2xlYW5zXCI6IHRoZXkgYmVoYXZlIGxpa2Vcbi8vIGJvb2xlYW5zLCBidXQgY2FuIGFsc28gYWNjZXB0IGEgc3RyaW5nIHZhbHVlLlxuXG5bJ2NhcHR1cmUnLCAnZG93bmxvYWQnIC8vIE5PVEU6IGlmIHlvdSBhZGQgYSBjYW1lbENhc2VkIHByb3AgdG8gdGhpcyBsaXN0LFxuLy8geW91J2xsIG5lZWQgdG8gc2V0IGF0dHJpYnV0ZU5hbWUgdG8gbmFtZS50b0xvd2VyQ2FzZSgpXG4vLyBpbnN0ZWFkIGluIHRoZSBhc3NpZ25tZW50IGJlbG93LlxuXS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIE9WRVJMT0FERURfQk9PTEVBTiwgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBuYW1lLCAvLyBhdHRyaWJ1dGVOYW1lXG4gIG51bGwsIC8vIGF0dHJpYnV0ZU5hbWVzcGFjZVxuICBmYWxzZSwgLy8gc2FuaXRpemVVUkxcbiAgZmFsc2UpO1xufSk7IC8vIFRoZXNlIGFyZSBIVE1MIGF0dHJpYnV0ZXMgdGhhdCBtdXN0IGJlIHBvc2l0aXZlIG51bWJlcnMuXG5cblsnY29scycsICdyb3dzJywgJ3NpemUnLCAnc3BhbicgLy8gTk9URTogaWYgeW91IGFkZCBhIGNhbWVsQ2FzZWQgcHJvcCB0byB0aGlzIGxpc3QsXG4vLyB5b3UnbGwgbmVlZCB0byBzZXQgYXR0cmlidXRlTmFtZSB0byBuYW1lLnRvTG93ZXJDYXNlKClcbi8vIGluc3RlYWQgaW4gdGhlIGFzc2lnbm1lbnQgYmVsb3cuXG5dLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgUE9TSVRJVkVfTlVNRVJJQywgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBuYW1lLCAvLyBhdHRyaWJ1dGVOYW1lXG4gIG51bGwsIC8vIGF0dHJpYnV0ZU5hbWVzcGFjZVxuICBmYWxzZSwgLy8gc2FuaXRpemVVUkxcbiAgZmFsc2UpO1xufSk7IC8vIFRoZXNlIGFyZSBIVE1MIGF0dHJpYnV0ZXMgdGhhdCBtdXN0IGJlIG51bWJlcnMuXG5cblsncm93U3BhbicsICdzdGFydCddLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgTlVNRVJJQywgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBuYW1lLnRvTG93ZXJDYXNlKCksIC8vIGF0dHJpYnV0ZU5hbWVcbiAgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTtcbnZhciBDQU1FTElaRSA9IC9bXFwtXFw6XShbYS16XSkvZztcblxudmFyIGNhcGl0YWxpemUgPSBmdW5jdGlvbiAodG9rZW4pIHtcbiAgcmV0dXJuIHRva2VuWzFdLnRvVXBwZXJDYXNlKCk7XG59OyAvLyBUaGlzIGlzIGEgbGlzdCBvZiBhbGwgU1ZHIGF0dHJpYnV0ZXMgdGhhdCBuZWVkIHNwZWNpYWwgY2FzaW5nLCBuYW1lc3BhY2luZyxcbi8vIG9yIGJvb2xlYW4gdmFsdWUgYXNzaWdubWVudC4gUmVndWxhciBhdHRyaWJ1dGVzIHRoYXQganVzdCBhY2NlcHQgc3RyaW5nc1xuLy8gYW5kIGhhdmUgdGhlIHNhbWUgbmFtZXMgYXJlIG9taXR0ZWQsIGp1c3QgbGlrZSBpbiB0aGUgSFRNTCBhdHRyaWJ1dGUgZmlsdGVyLlxuLy8gU29tZSBvZiB0aGVzZSBhdHRyaWJ1dGVzIGNhbiBiZSBoYXJkIHRvIGZpbmQuIFRoaXMgbGlzdCB3YXMgY3JlYXRlZCBieVxuLy8gc2NyYXBpbmcgdGhlIE1ETiBkb2N1bWVudGF0aW9uLlxuXG5cblsnYWNjZW50LWhlaWdodCcsICdhbGlnbm1lbnQtYmFzZWxpbmUnLCAnYXJhYmljLWZvcm0nLCAnYmFzZWxpbmUtc2hpZnQnLCAnY2FwLWhlaWdodCcsICdjbGlwLXBhdGgnLCAnY2xpcC1ydWxlJywgJ2NvbG9yLWludGVycG9sYXRpb24nLCAnY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzJywgJ2NvbG9yLXByb2ZpbGUnLCAnY29sb3ItcmVuZGVyaW5nJywgJ2RvbWluYW50LWJhc2VsaW5lJywgJ2VuYWJsZS1iYWNrZ3JvdW5kJywgJ2ZpbGwtb3BhY2l0eScsICdmaWxsLXJ1bGUnLCAnZmxvb2QtY29sb3InLCAnZmxvb2Qtb3BhY2l0eScsICdmb250LWZhbWlseScsICdmb250LXNpemUnLCAnZm9udC1zaXplLWFkanVzdCcsICdmb250LXN0cmV0Y2gnLCAnZm9udC1zdHlsZScsICdmb250LXZhcmlhbnQnLCAnZm9udC13ZWlnaHQnLCAnZ2x5cGgtbmFtZScsICdnbHlwaC1vcmllbnRhdGlvbi1ob3Jpem9udGFsJywgJ2dseXBoLW9yaWVudGF0aW9uLXZlcnRpY2FsJywgJ2hvcml6LWFkdi14JywgJ2hvcml6LW9yaWdpbi14JywgJ2ltYWdlLXJlbmRlcmluZycsICdsZXR0ZXItc3BhY2luZycsICdsaWdodGluZy1jb2xvcicsICdtYXJrZXItZW5kJywgJ21hcmtlci1taWQnLCAnbWFya2VyLXN0YXJ0JywgJ292ZXJsaW5lLXBvc2l0aW9uJywgJ292ZXJsaW5lLXRoaWNrbmVzcycsICdwYWludC1vcmRlcicsICdwYW5vc2UtMScsICdwb2ludGVyLWV2ZW50cycsICdyZW5kZXJpbmctaW50ZW50JywgJ3NoYXBlLXJlbmRlcmluZycsICdzdG9wLWNvbG9yJywgJ3N0b3Atb3BhY2l0eScsICdzdHJpa2V0aHJvdWdoLXBvc2l0aW9uJywgJ3N0cmlrZXRocm91Z2gtdGhpY2tuZXNzJywgJ3N0cm9rZS1kYXNoYXJyYXknLCAnc3Ryb2tlLWRhc2hvZmZzZXQnLCAnc3Ryb2tlLWxpbmVjYXAnLCAnc3Ryb2tlLWxpbmVqb2luJywgJ3N0cm9rZS1taXRlcmxpbWl0JywgJ3N0cm9rZS1vcGFjaXR5JywgJ3N0cm9rZS13aWR0aCcsICd0ZXh0LWFuY2hvcicsICd0ZXh0LWRlY29yYXRpb24nLCAndGV4dC1yZW5kZXJpbmcnLCAndW5kZXJsaW5lLXBvc2l0aW9uJywgJ3VuZGVybGluZS10aGlja25lc3MnLCAndW5pY29kZS1iaWRpJywgJ3VuaWNvZGUtcmFuZ2UnLCAndW5pdHMtcGVyLWVtJywgJ3YtYWxwaGFiZXRpYycsICd2LWhhbmdpbmcnLCAndi1pZGVvZ3JhcGhpYycsICd2LW1hdGhlbWF0aWNhbCcsICd2ZWN0b3ItZWZmZWN0JywgJ3ZlcnQtYWR2LXknLCAndmVydC1vcmlnaW4teCcsICd2ZXJ0LW9yaWdpbi15JywgJ3dvcmQtc3BhY2luZycsICd3cml0aW5nLW1vZGUnLCAneG1sbnM6eGxpbmsnLCAneC1oZWlnaHQnIC8vIE5PVEU6IGlmIHlvdSBhZGQgYSBjYW1lbENhc2VkIHByb3AgdG8gdGhpcyBsaXN0LFxuLy8geW91J2xsIG5lZWQgdG8gc2V0IGF0dHJpYnV0ZU5hbWUgdG8gbmFtZS50b0xvd2VyQ2FzZSgpXG4vLyBpbnN0ZWFkIGluIHRoZSBhc3NpZ25tZW50IGJlbG93LlxuXS5mb3JFYWNoKGZ1bmN0aW9uIChhdHRyaWJ1dGVOYW1lKSB7XG4gIHZhciBuYW1lID0gYXR0cmlidXRlTmFtZS5yZXBsYWNlKENBTUVMSVpFLCBjYXBpdGFsaXplKTtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgU1RSSU5HLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIGF0dHJpYnV0ZU5hbWUsIG51bGwsIC8vIGF0dHJpYnV0ZU5hbWVzcGFjZVxuICBmYWxzZSwgLy8gc2FuaXRpemVVUkxcbiAgZmFsc2UpO1xufSk7IC8vIFN0cmluZyBTVkcgYXR0cmlidXRlcyB3aXRoIHRoZSB4bGluayBuYW1lc3BhY2UuXG5cblsneGxpbms6YWN0dWF0ZScsICd4bGluazphcmNyb2xlJywgJ3hsaW5rOnJvbGUnLCAneGxpbms6c2hvdycsICd4bGluazp0aXRsZScsICd4bGluazp0eXBlJyAvLyBOT1RFOiBpZiB5b3UgYWRkIGEgY2FtZWxDYXNlZCBwcm9wIHRvIHRoaXMgbGlzdCxcbi8vIHlvdSdsbCBuZWVkIHRvIHNldCBhdHRyaWJ1dGVOYW1lIHRvIG5hbWUudG9Mb3dlckNhc2UoKVxuLy8gaW5zdGVhZCBpbiB0aGUgYXNzaWdubWVudCBiZWxvdy5cbl0uZm9yRWFjaChmdW5jdGlvbiAoYXR0cmlidXRlTmFtZSkge1xuICB2YXIgbmFtZSA9IGF0dHJpYnV0ZU5hbWUucmVwbGFjZShDQU1FTElaRSwgY2FwaXRhbGl6ZSk7XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIFNUUklORywgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBhdHRyaWJ1dGVOYW1lLCAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluaycsIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTsgLy8gU3RyaW5nIFNWRyBhdHRyaWJ1dGVzIHdpdGggdGhlIHhtbCBuYW1lc3BhY2UuXG5cblsneG1sOmJhc2UnLCAneG1sOmxhbmcnLCAneG1sOnNwYWNlJyAvLyBOT1RFOiBpZiB5b3UgYWRkIGEgY2FtZWxDYXNlZCBwcm9wIHRvIHRoaXMgbGlzdCxcbi8vIHlvdSdsbCBuZWVkIHRvIHNldCBhdHRyaWJ1dGVOYW1lIHRvIG5hbWUudG9Mb3dlckNhc2UoKVxuLy8gaW5zdGVhZCBpbiB0aGUgYXNzaWdubWVudCBiZWxvdy5cbl0uZm9yRWFjaChmdW5jdGlvbiAoYXR0cmlidXRlTmFtZSkge1xuICB2YXIgbmFtZSA9IGF0dHJpYnV0ZU5hbWUucmVwbGFjZShDQU1FTElaRSwgY2FwaXRhbGl6ZSk7XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIFNUUklORywgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBhdHRyaWJ1dGVOYW1lLCAnaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlJywgZmFsc2UsIC8vIHNhbml0aXplVVJMXG4gIGZhbHNlKTtcbn0pOyAvLyBUaGVzZSBhdHRyaWJ1dGUgZXhpc3RzIGJvdGggaW4gSFRNTCBhbmQgU1ZHLlxuLy8gVGhlIGF0dHJpYnV0ZSBuYW1lIGlzIGNhc2Utc2Vuc2l0aXZlIGluIFNWRyBzbyB3ZSBjYW4ndCBqdXN0IHVzZVxuLy8gdGhlIFJlYWN0IG5hbWUgbGlrZSB3ZSBkbyBmb3IgYXR0cmlidXRlcyB0aGF0IGV4aXN0IG9ubHkgaW4gSFRNTC5cblxuWyd0YWJJbmRleCcsICdjcm9zc09yaWdpbiddLmZvckVhY2goZnVuY3Rpb24gKGF0dHJpYnV0ZU5hbWUpIHtcbiAgcHJvcGVydGllc1thdHRyaWJ1dGVOYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQoYXR0cmlidXRlTmFtZSwgU1RSSU5HLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIGF0dHJpYnV0ZU5hbWUudG9Mb3dlckNhc2UoKSwgLy8gYXR0cmlidXRlTmFtZVxuICBudWxsLCAvLyBhdHRyaWJ1dGVOYW1lc3BhY2VcbiAgZmFsc2UsIC8vIHNhbml0aXplVVJMXG4gIGZhbHNlKTtcbn0pOyAvLyBUaGVzZSBhdHRyaWJ1dGVzIGFjY2VwdCBVUkxzLiBUaGVzZSBtdXN0IG5vdCBhbGxvdyBqYXZhc2NyaXB0OiBVUkxTLlxuLy8gVGhlc2Ugd2lsbCBhbHNvIG5lZWQgdG8gYWNjZXB0IFRydXN0ZWQgVHlwZXMgb2JqZWN0IGluIHRoZSBmdXR1cmUuXG5cbnZhciB4bGlua0hyZWYgPSAneGxpbmtIcmVmJztcbnByb3BlcnRpZXNbeGxpbmtIcmVmXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQoJ3hsaW5rSHJlZicsIFNUUklORywgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuJ3hsaW5rOmhyZWYnLCAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluaycsIHRydWUsIC8vIHNhbml0aXplVVJMXG5mYWxzZSk7XG5bJ3NyYycsICdocmVmJywgJ2FjdGlvbicsICdmb3JtQWN0aW9uJ10uZm9yRWFjaChmdW5jdGlvbiAoYXR0cmlidXRlTmFtZSkge1xuICBwcm9wZXJ0aWVzW2F0dHJpYnV0ZU5hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChhdHRyaWJ1dGVOYW1lLCBTVFJJTkcsIGZhbHNlLCAvLyBtdXN0VXNlUHJvcGVydHlcbiAgYXR0cmlidXRlTmFtZS50b0xvd2VyQ2FzZSgpLCAvLyBhdHRyaWJ1dGVOYW1lXG4gIG51bGwsIC8vIGF0dHJpYnV0ZU5hbWVzcGFjZVxuICB0cnVlLCAvLyBzYW5pdGl6ZVVSTFxuICB0cnVlKTtcbn0pO1xuXG4vLyBhbmQgYW55IG5ld2xpbmUgb3IgdGFiIGFyZSBmaWx0ZXJlZCBvdXQgYXMgaWYgdGhleSdyZSBub3QgcGFydCBvZiB0aGUgVVJMLlxuLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyN1cmwtcGFyc2luZ1xuLy8gVGFiIG9yIG5ld2xpbmUgYXJlIGRlZmluZWQgYXMgXFxyXFxuXFx0OlxuLy8gaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI2FzY2lpLXRhYi1vci1uZXdsaW5lXG4vLyBBIEMwIGNvbnRyb2wgaXMgYSBjb2RlIHBvaW50IGluIHRoZSByYW5nZSBcXHUwMDAwIE5VTEwgdG8gXFx1MDAxRlxuLy8gSU5GT1JNQVRJT04gU0VQQVJBVE9SIE9ORSwgaW5jbHVzaXZlOlxuLy8gaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI2MwLWNvbnRyb2wtb3Itc3BhY2VcblxuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuXG52YXIgaXNKYXZhU2NyaXB0UHJvdG9jb2wgPSAvXltcXHUwMDAwLVxcdTAwMUYgXSpqW1xcclxcblxcdF0qYVtcXHJcXG5cXHRdKnZbXFxyXFxuXFx0XSphW1xcclxcblxcdF0qc1tcXHJcXG5cXHRdKmNbXFxyXFxuXFx0XSpyW1xcclxcblxcdF0qaVtcXHJcXG5cXHRdKnBbXFxyXFxuXFx0XSp0W1xcclxcblxcdF0qXFw6L2k7XG52YXIgZGlkV2FybiA9IGZhbHNlO1xuXG5mdW5jdGlvbiBzYW5pdGl6ZVVSTCh1cmwpIHtcbiAge1xuICAgIGlmICghZGlkV2FybiAmJiBpc0phdmFTY3JpcHRQcm90b2NvbC50ZXN0KHVybCkpIHtcbiAgICAgIGRpZFdhcm4gPSB0cnVlO1xuXG4gICAgICBlcnJvcignQSBmdXR1cmUgdmVyc2lvbiBvZiBSZWFjdCB3aWxsIGJsb2NrIGphdmFzY3JpcHQ6IFVSTHMgYXMgYSBzZWN1cml0eSBwcmVjYXV0aW9uLiAnICsgJ1VzZSBldmVudCBoYW5kbGVycyBpbnN0ZWFkIGlmIHlvdSBjYW4uIElmIHlvdSBuZWVkIHRvIGdlbmVyYXRlIHVuc2FmZSBIVE1MIHRyeSAnICsgJ3VzaW5nIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIGluc3RlYWQuIFJlYWN0IHdhcyBwYXNzZWQgJXMuJywgSlNPTi5zdHJpbmdpZnkodXJsKSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogR2V0IHRoZSB2YWx1ZSBmb3IgYSBwcm9wZXJ0eSBvbiBhIG5vZGUuIE9ubHkgdXNlZCBpbiBERVYgZm9yIFNTUiB2YWxpZGF0aW9uLlxuICogVGhlIFwiZXhwZWN0ZWRcIiBhcmd1bWVudCBpcyB1c2VkIGFzIGEgaGludCBvZiB3aGF0IHRoZSBleHBlY3RlZCB2YWx1ZSBpcy5cbiAqIFNvbWUgcHJvcGVydGllcyBoYXZlIG11bHRpcGxlIGVxdWl2YWxlbnQgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBnZXRWYWx1ZUZvclByb3BlcnR5KG5vZGUsIG5hbWUsIGV4cGVjdGVkLCBwcm9wZXJ0eUluZm8pIHtcbiAge1xuICAgIGlmIChwcm9wZXJ0eUluZm8ubXVzdFVzZVByb3BlcnR5KSB7XG4gICAgICB2YXIgcHJvcGVydHlOYW1lID0gcHJvcGVydHlJbmZvLnByb3BlcnR5TmFtZTtcbiAgICAgIHJldHVybiBub2RlW3Byb3BlcnR5TmFtZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICggcHJvcGVydHlJbmZvLnNhbml0aXplVVJMKSB7XG4gICAgICAgIC8vIElmIHdlIGhhdmVuJ3QgZnVsbHkgZGlzYWJsZWQgamF2YXNjcmlwdDogVVJMcywgYW5kIGlmXG4gICAgICAgIC8vIHRoZSBoeWRyYXRpb24gaXMgc3VjY2Vzc2Z1bCBvZiBhIGphdmFzY3JpcHQ6IFVSTCwgd2VcbiAgICAgICAgLy8gc3RpbGwgd2FudCB0byB3YXJuIG9uIHRoZSBjbGllbnQuXG4gICAgICAgIHNhbml0aXplVVJMKCcnICsgZXhwZWN0ZWQpO1xuICAgICAgfVxuXG4gICAgICB2YXIgYXR0cmlidXRlTmFtZSA9IHByb3BlcnR5SW5mby5hdHRyaWJ1dGVOYW1lO1xuICAgICAgdmFyIHN0cmluZ1ZhbHVlID0gbnVsbDtcblxuICAgICAgaWYgKHByb3BlcnR5SW5mby50eXBlID09PSBPVkVSTE9BREVEX0JPT0xFQU4pIHtcbiAgICAgICAgaWYgKG5vZGUuaGFzQXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpKSB7XG4gICAgICAgICAgdmFyIHZhbHVlID0gbm9kZS5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSk7XG5cbiAgICAgICAgICBpZiAodmFsdWUgPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoc2hvdWxkUmVtb3ZlQXR0cmlidXRlKG5hbWUsIGV4cGVjdGVkLCBwcm9wZXJ0eUluZm8sIGZhbHNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh2YWx1ZSA9PT0gJycgKyBleHBlY3RlZCkge1xuICAgICAgICAgICAgcmV0dXJuIGV4cGVjdGVkO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChub2RlLmhhc0F0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSkge1xuICAgICAgICBpZiAoc2hvdWxkUmVtb3ZlQXR0cmlidXRlKG5hbWUsIGV4cGVjdGVkLCBwcm9wZXJ0eUluZm8sIGZhbHNlKSkge1xuICAgICAgICAgIC8vIFdlIGhhZCBhbiBhdHRyaWJ1dGUgYnV0IHNob3VsZG4ndCBoYXZlIGhhZCBvbmUsIHNvIHJlYWQgaXRcbiAgICAgICAgICAvLyBmb3IgdGhlIGVycm9yIG1lc3NhZ2UuXG4gICAgICAgICAgcmV0dXJuIG5vZGUuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb3BlcnR5SW5mby50eXBlID09PSBCT09MRUFOKSB7XG4gICAgICAgICAgLy8gSWYgdGhpcyB3YXMgYSBib29sZWFuLCBpdCBkb2Vzbid0IG1hdHRlciB3aGF0IHRoZSB2YWx1ZSBpc1xuICAgICAgICAgIC8vIHRoZSBmYWN0IHRoYXQgd2UgaGF2ZSBpdCBpcyB0aGUgc2FtZSBhcyB0aGUgZXhwZWN0ZWQuXG4gICAgICAgICAgcmV0dXJuIGV4cGVjdGVkO1xuICAgICAgICB9IC8vIEV2ZW4gaWYgdGhpcyBwcm9wZXJ0eSB1c2VzIGEgbmFtZXNwYWNlIHdlIHVzZSBnZXRBdHRyaWJ1dGVcbiAgICAgICAgLy8gYmVjYXVzZSB3ZSBhc3N1bWUgaXRzIG5hbWVzcGFjZWQgbmFtZSBpcyB0aGUgc2FtZSBhcyBvdXIgY29uZmlnLlxuICAgICAgICAvLyBUbyB1c2UgZ2V0QXR0cmlidXRlTlMgd2UgbmVlZCB0aGUgbG9jYWwgbmFtZSB3aGljaCB3ZSBkb24ndCBoYXZlXG4gICAgICAgIC8vIGluIG91ciBjb25maWcgYXRtLlxuXG5cbiAgICAgICAgc3RyaW5nVmFsdWUgPSBub2RlLmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNob3VsZFJlbW92ZUF0dHJpYnV0ZShuYW1lLCBleHBlY3RlZCwgcHJvcGVydHlJbmZvLCBmYWxzZSkpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZ1ZhbHVlID09PSBudWxsID8gZXhwZWN0ZWQgOiBzdHJpbmdWYWx1ZTtcbiAgICAgIH0gZWxzZSBpZiAoc3RyaW5nVmFsdWUgPT09ICcnICsgZXhwZWN0ZWQpIHtcbiAgICAgICAgcmV0dXJuIGV4cGVjdGVkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZ1ZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBHZXQgdGhlIHZhbHVlIGZvciBhIGF0dHJpYnV0ZSBvbiBhIG5vZGUuIE9ubHkgdXNlZCBpbiBERVYgZm9yIFNTUiB2YWxpZGF0aW9uLlxuICogVGhlIHRoaXJkIGFyZ3VtZW50IGlzIHVzZWQgYXMgYSBoaW50IG9mIHdoYXQgdGhlIGV4cGVjdGVkIHZhbHVlIGlzLiBTb21lXG4gKiBhdHRyaWJ1dGVzIGhhdmUgbXVsdGlwbGUgZXF1aXZhbGVudCB2YWx1ZXMuXG4gKi9cblxuZnVuY3Rpb24gZ2V0VmFsdWVGb3JBdHRyaWJ1dGUobm9kZSwgbmFtZSwgZXhwZWN0ZWQpIHtcbiAge1xuICAgIGlmICghaXNBdHRyaWJ1dGVOYW1lU2FmZShuYW1lKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gSWYgdGhlIG9iamVjdCBpcyBhbiBvcGFxdWUgcmVmZXJlbmNlIElELCBpdCdzIGV4cGVjdGVkIHRoYXRcbiAgICAvLyB0aGUgbmV4dCBwcm9wIGlzIGRpZmZlcmVudCB0aGFuIHRoZSBzZXJ2ZXIgdmFsdWUsIHNvIGp1c3QgcmV0dXJuXG4gICAgLy8gZXhwZWN0ZWRcblxuXG4gICAgaWYgKGlzT3BhcXVlSHlkcmF0aW5nT2JqZWN0KGV4cGVjdGVkKSkge1xuICAgICAgcmV0dXJuIGV4cGVjdGVkO1xuICAgIH1cblxuICAgIGlmICghbm9kZS5oYXNBdHRyaWJ1dGUobmFtZSkpIHtcbiAgICAgIHJldHVybiBleHBlY3RlZCA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgdmFsdWUgPSBub2RlLmdldEF0dHJpYnV0ZShuYW1lKTtcblxuICAgIGlmICh2YWx1ZSA9PT0gJycgKyBleHBlY3RlZCkge1xuICAgICAgcmV0dXJuIGV4cGVjdGVkO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufVxuLyoqXG4gKiBTZXRzIHRoZSB2YWx1ZSBmb3IgYSBwcm9wZXJ0eSBvbiBhIG5vZGUuXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fSBub2RlXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICovXG5cbmZ1bmN0aW9uIHNldFZhbHVlRm9yUHJvcGVydHkobm9kZSwgbmFtZSwgdmFsdWUsIGlzQ3VzdG9tQ29tcG9uZW50VGFnKSB7XG4gIHZhciBwcm9wZXJ0eUluZm8gPSBnZXRQcm9wZXJ0eUluZm8obmFtZSk7XG5cbiAgaWYgKHNob3VsZElnbm9yZUF0dHJpYnV0ZShuYW1lLCBwcm9wZXJ0eUluZm8sIGlzQ3VzdG9tQ29tcG9uZW50VGFnKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChzaG91bGRSZW1vdmVBdHRyaWJ1dGUobmFtZSwgdmFsdWUsIHByb3BlcnR5SW5mbywgaXNDdXN0b21Db21wb25lbnRUYWcpKSB7XG4gICAgdmFsdWUgPSBudWxsO1xuICB9IC8vIElmIHRoZSBwcm9wIGlzbid0IGluIHRoZSBzcGVjaWFsIGxpc3QsIHRyZWF0IGl0IGFzIGEgc2ltcGxlIGF0dHJpYnV0ZS5cblxuXG4gIGlmIChpc0N1c3RvbUNvbXBvbmVudFRhZyB8fCBwcm9wZXJ0eUluZm8gPT09IG51bGwpIHtcbiAgICBpZiAoaXNBdHRyaWJ1dGVOYW1lU2FmZShuYW1lKSkge1xuICAgICAgdmFyIF9hdHRyaWJ1dGVOYW1lID0gbmFtZTtcblxuICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKF9hdHRyaWJ1dGVOYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKF9hdHRyaWJ1dGVOYW1lLCAgJycgKyB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIG11c3RVc2VQcm9wZXJ0eSA9IHByb3BlcnR5SW5mby5tdXN0VXNlUHJvcGVydHk7XG5cbiAgaWYgKG11c3RVc2VQcm9wZXJ0eSkge1xuICAgIHZhciBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eUluZm8ucHJvcGVydHlOYW1lO1xuXG4gICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICB2YXIgdHlwZSA9IHByb3BlcnR5SW5mby50eXBlO1xuICAgICAgbm9kZVtwcm9wZXJ0eU5hbWVdID0gdHlwZSA9PT0gQk9PTEVBTiA/IGZhbHNlIDogJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENvbnRyYXJ5IHRvIGBzZXRBdHRyaWJ1dGVgLCBvYmplY3QgcHJvcGVydGllcyBhcmUgcHJvcGVybHlcbiAgICAgIC8vIGB0b1N0cmluZ2BlZCBieSBJRTgvOS5cbiAgICAgIG5vZGVbcHJvcGVydHlOYW1lXSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybjtcbiAgfSAvLyBUaGUgcmVzdCBhcmUgdHJlYXRlZCBhcyBhdHRyaWJ1dGVzIHdpdGggc3BlY2lhbCBjYXNlcy5cblxuXG4gIHZhciBhdHRyaWJ1dGVOYW1lID0gcHJvcGVydHlJbmZvLmF0dHJpYnV0ZU5hbWUsXG4gICAgICBhdHRyaWJ1dGVOYW1lc3BhY2UgPSBwcm9wZXJ0eUluZm8uYXR0cmlidXRlTmFtZXNwYWNlO1xuXG4gIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpO1xuICB9IGVsc2Uge1xuICAgIHZhciBfdHlwZSA9IHByb3BlcnR5SW5mby50eXBlO1xuICAgIHZhciBhdHRyaWJ1dGVWYWx1ZTtcblxuICAgIGlmIChfdHlwZSA9PT0gQk9PTEVBTiB8fCBfdHlwZSA9PT0gT1ZFUkxPQURFRF9CT09MRUFOICYmIHZhbHVlID09PSB0cnVlKSB7XG4gICAgICAvLyBJZiBhdHRyaWJ1dGUgdHlwZSBpcyBib29sZWFuLCB3ZSBrbm93IGZvciBzdXJlIGl0IHdvbid0IGJlIGFuIGV4ZWN1dGlvbiBzaW5rXG4gICAgICAvLyBhbmQgd2Ugd29uJ3QgcmVxdWlyZSBUcnVzdGVkIFR5cGUgaGVyZS5cbiAgICAgIGF0dHJpYnV0ZVZhbHVlID0gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGBzZXRBdHRyaWJ1dGVgIHdpdGggb2JqZWN0cyBiZWNvbWVzIG9ubHkgYFtvYmplY3RdYCBpbiBJRTgvOSxcbiAgICAgIC8vICgnJyArIHZhbHVlKSBtYWtlcyBpdCBvdXRwdXQgdGhlIGNvcnJlY3QgdG9TdHJpbmcoKS12YWx1ZS5cbiAgICAgIHtcbiAgICAgICAgYXR0cmlidXRlVmFsdWUgPSAnJyArIHZhbHVlO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvcGVydHlJbmZvLnNhbml0aXplVVJMKSB7XG4gICAgICAgIHNhbml0aXplVVJMKGF0dHJpYnV0ZVZhbHVlLnRvU3RyaW5nKCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhdHRyaWJ1dGVOYW1lc3BhY2UpIHtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlTlMoYXR0cmlidXRlTmFtZXNwYWNlLCBhdHRyaWJ1dGVOYW1lLCBhdHRyaWJ1dGVWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUsIGF0dHJpYnV0ZVZhbHVlKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gQVRURU5USU9OXG4vLyBXaGVuIGFkZGluZyBuZXcgc3ltYm9scyB0byB0aGlzIGZpbGUsXG4vLyBQbGVhc2UgY29uc2lkZXIgYWxzbyBhZGRpbmcgdG8gJ3JlYWN0LWRldnRvb2xzLXNoYXJlZC9zcmMvYmFja2VuZC9SZWFjdFN5bWJvbHMnXG4vLyBUaGUgU3ltYm9sIHVzZWQgdG8gdGFnIHRoZSBSZWFjdEVsZW1lbnQtbGlrZSB0eXBlcy4gSWYgdGhlcmUgaXMgbm8gbmF0aXZlIFN5bWJvbFxuLy8gbm9yIHBvbHlmaWxsLCB0aGVuIGEgcGxhaW4gbnVtYmVyIGlzIHVzZWQgZm9yIHBlcmZvcm1hbmNlLlxudmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IDB4ZWFjNztcbnZhciBSRUFDVF9QT1JUQUxfVFlQRSA9IDB4ZWFjYTtcbnZhciBSRUFDVF9GUkFHTUVOVF9UWVBFID0gMHhlYWNiO1xudmFyIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSAweGVhY2M7XG52YXIgUkVBQ1RfUFJPRklMRVJfVFlQRSA9IDB4ZWFkMjtcbnZhciBSRUFDVF9QUk9WSURFUl9UWVBFID0gMHhlYWNkO1xudmFyIFJFQUNUX0NPTlRFWFRfVFlQRSA9IDB4ZWFjZTtcbnZhciBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gMHhlYWQwO1xudmFyIFJFQUNUX1NVU1BFTlNFX1RZUEUgPSAweGVhZDE7XG52YXIgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFID0gMHhlYWQ4O1xudmFyIFJFQUNUX01FTU9fVFlQRSA9IDB4ZWFkMztcbnZhciBSRUFDVF9MQVpZX1RZUEUgPSAweGVhZDQ7XG52YXIgUkVBQ1RfQkxPQ0tfVFlQRSA9IDB4ZWFkOTtcbnZhciBSRUFDVF9TRVJWRVJfQkxPQ0tfVFlQRSA9IDB4ZWFkYTtcbnZhciBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFID0gMHhlYWQ1O1xudmFyIFJFQUNUX1NDT1BFX1RZUEUgPSAweGVhZDc7XG52YXIgUkVBQ1RfT1BBUVVFX0lEX1RZUEUgPSAweGVhZTA7XG52YXIgUkVBQ1RfREVCVUdfVFJBQ0lOR19NT0RFX1RZUEUgPSAweGVhZTE7XG52YXIgUkVBQ1RfT0ZGU0NSRUVOX1RZUEUgPSAweGVhZTI7XG52YXIgUkVBQ1RfTEVHQUNZX0hJRERFTl9UWVBFID0gMHhlYWUzO1xuXG5pZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuZm9yKSB7XG4gIHZhciBzeW1ib2xGb3IgPSBTeW1ib2wuZm9yO1xuICBSRUFDVF9FTEVNRU5UX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmVsZW1lbnQnKTtcbiAgUkVBQ1RfUE9SVEFMX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnBvcnRhbCcpO1xuICBSRUFDVF9GUkFHTUVOVF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5mcmFnbWVudCcpO1xuICBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5zdHJpY3RfbW9kZScpO1xuICBSRUFDVF9QUk9GSUxFUl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5wcm9maWxlcicpO1xuICBSRUFDVF9QUk9WSURFUl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5wcm92aWRlcicpO1xuICBSRUFDVF9DT05URVhUX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmNvbnRleHQnKTtcbiAgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuZm9yd2FyZF9yZWYnKTtcbiAgUkVBQ1RfU1VTUEVOU0VfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Quc3VzcGVuc2UnKTtcbiAgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5zdXNwZW5zZV9saXN0Jyk7XG4gIFJFQUNUX01FTU9fVFlQRSA9IHN5bWJvbEZvcigncmVhY3QubWVtbycpO1xuICBSRUFDVF9MQVpZX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmxhenknKTtcbiAgUkVBQ1RfQkxPQ0tfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuYmxvY2snKTtcbiAgUkVBQ1RfU0VSVkVSX0JMT0NLX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnNlcnZlci5ibG9jaycpO1xuICBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5mdW5kYW1lbnRhbCcpO1xuICBSRUFDVF9TQ09QRV9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5zY29wZScpO1xuICBSRUFDVF9PUEFRVUVfSURfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Qub3BhcXVlLmlkJyk7XG4gIFJFQUNUX0RFQlVHX1RSQUNJTkdfTU9ERV9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5kZWJ1Z190cmFjZV9tb2RlJyk7XG4gIFJFQUNUX09GRlNDUkVFTl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5vZmZzY3JlZW4nKTtcbiAgUkVBQ1RfTEVHQUNZX0hJRERFTl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5sZWdhY3lfaGlkZGVuJyk7XG59XG5cbnZhciBNQVlCRV9JVEVSQVRPUl9TWU1CT0wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5pdGVyYXRvcjtcbnZhciBGQVVYX0lURVJBVE9SX1NZTUJPTCA9ICdAQGl0ZXJhdG9yJztcbmZ1bmN0aW9uIGdldEl0ZXJhdG9yRm4obWF5YmVJdGVyYWJsZSkge1xuICBpZiAobWF5YmVJdGVyYWJsZSA9PT0gbnVsbCB8fCB0eXBlb2YgbWF5YmVJdGVyYWJsZSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBtYXliZUl0ZXJhdG9yID0gTUFZQkVfSVRFUkFUT1JfU1lNQk9MICYmIG1heWJlSXRlcmFibGVbTUFZQkVfSVRFUkFUT1JfU1lNQk9MXSB8fCBtYXliZUl0ZXJhYmxlW0ZBVVhfSVRFUkFUT1JfU1lNQk9MXTtcblxuICBpZiAodHlwZW9mIG1heWJlSXRlcmF0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gbWF5YmVJdGVyYXRvcjtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vLyBIZWxwZXJzIHRvIHBhdGNoIGNvbnNvbGUubG9ncyB0byBhdm9pZCBsb2dnaW5nIGR1cmluZyBzaWRlLWVmZmVjdCBmcmVlXG4vLyByZXBsYXlpbmcgb24gcmVuZGVyIGZ1bmN0aW9uLiBUaGlzIGN1cnJlbnRseSBvbmx5IHBhdGNoZXMgdGhlIG9iamVjdFxuLy8gbGF6aWx5IHdoaWNoIHdvbid0IGNvdmVyIGlmIHRoZSBsb2cgZnVuY3Rpb24gd2FzIGV4dHJhY3RlZCBlYWdlcmx5LlxuLy8gV2UgY291bGQgYWxzbyBlYWdlcmx5IHBhdGNoIHRoZSBtZXRob2QuXG52YXIgZGlzYWJsZWREZXB0aCA9IDA7XG52YXIgcHJldkxvZztcbnZhciBwcmV2SW5mbztcbnZhciBwcmV2V2FybjtcbnZhciBwcmV2RXJyb3I7XG52YXIgcHJldkdyb3VwO1xudmFyIHByZXZHcm91cENvbGxhcHNlZDtcbnZhciBwcmV2R3JvdXBFbmQ7XG5cbmZ1bmN0aW9uIGRpc2FibGVkTG9nKCkge31cblxuZGlzYWJsZWRMb2cuX19yZWFjdERpc2FibGVkTG9nID0gdHJ1ZTtcbmZ1bmN0aW9uIGRpc2FibGVMb2dzKCkge1xuICB7XG4gICAgaWYgKGRpc2FibGVkRGVwdGggPT09IDApIHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgICAgcHJldkxvZyA9IGNvbnNvbGUubG9nO1xuICAgICAgcHJldkluZm8gPSBjb25zb2xlLmluZm87XG4gICAgICBwcmV2V2FybiA9IGNvbnNvbGUud2FybjtcbiAgICAgIHByZXZFcnJvciA9IGNvbnNvbGUuZXJyb3I7XG4gICAgICBwcmV2R3JvdXAgPSBjb25zb2xlLmdyb3VwO1xuICAgICAgcHJldkdyb3VwQ29sbGFwc2VkID0gY29uc29sZS5ncm91cENvbGxhcHNlZDtcbiAgICAgIHByZXZHcm91cEVuZCA9IGNvbnNvbGUuZ3JvdXBFbmQ7IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTkwOTlcblxuICAgICAgdmFyIHByb3BzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIHZhbHVlOiBkaXNhYmxlZExvZyxcbiAgICAgICAgd3JpdGFibGU6IHRydWVcbiAgICAgIH07IC8vICRGbG93Rml4TWUgRmxvdyB0aGlua3MgY29uc29sZSBpcyBpbW11dGFibGUuXG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvbnNvbGUsIHtcbiAgICAgICAgaW5mbzogcHJvcHMsXG4gICAgICAgIGxvZzogcHJvcHMsXG4gICAgICAgIHdhcm46IHByb3BzLFxuICAgICAgICBlcnJvcjogcHJvcHMsXG4gICAgICAgIGdyb3VwOiBwcm9wcyxcbiAgICAgICAgZ3JvdXBDb2xsYXBzZWQ6IHByb3BzLFxuICAgICAgICBncm91cEVuZDogcHJvcHNcbiAgICAgIH0pO1xuICAgICAgLyogZXNsaW50LWVuYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICB9XG5cbiAgICBkaXNhYmxlZERlcHRoKys7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlZW5hYmxlTG9ncygpIHtcbiAge1xuICAgIGRpc2FibGVkRGVwdGgtLTtcblxuICAgIGlmIChkaXNhYmxlZERlcHRoID09PSAwKSB7XG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICAgIHZhciBwcm9wcyA9IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZVxuICAgICAgfTsgLy8gJEZsb3dGaXhNZSBGbG93IHRoaW5rcyBjb25zb2xlIGlzIGltbXV0YWJsZS5cblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY29uc29sZSwge1xuICAgICAgICBsb2c6IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZMb2dcbiAgICAgICAgfSksXG4gICAgICAgIGluZm86IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZJbmZvXG4gICAgICAgIH0pLFxuICAgICAgICB3YXJuOiBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2V2FyblxuICAgICAgICB9KSxcbiAgICAgICAgZXJyb3I6IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZFcnJvclxuICAgICAgICB9KSxcbiAgICAgICAgZ3JvdXA6IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZHcm91cFxuICAgICAgICB9KSxcbiAgICAgICAgZ3JvdXBDb2xsYXBzZWQ6IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZHcm91cENvbGxhcHNlZFxuICAgICAgICB9KSxcbiAgICAgICAgZ3JvdXBFbmQ6IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZHcm91cEVuZFxuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgIH1cblxuICAgIGlmIChkaXNhYmxlZERlcHRoIDwgMCkge1xuICAgICAgZXJyb3IoJ2Rpc2FibGVkRGVwdGggZmVsbCBiZWxvdyB6ZXJvLiAnICsgJ1RoaXMgaXMgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICAgIH1cbiAgfVxufVxuXG52YXIgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudERpc3BhdGNoZXI7XG52YXIgcHJlZml4O1xuZnVuY3Rpb24gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUobmFtZSwgc291cmNlLCBvd25lckZuKSB7XG4gIHtcbiAgICBpZiAocHJlZml4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIEV4dHJhY3QgdGhlIFZNIHNwZWNpZmljIHByZWZpeCB1c2VkIGJ5IGVhY2ggbGluZS5cbiAgICAgIHRyeSB7XG4gICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgIHZhciBtYXRjaCA9IHguc3RhY2sudHJpbSgpLm1hdGNoKC9cXG4oICooYXQgKT8pLyk7XG4gICAgICAgIHByZWZpeCA9IG1hdGNoICYmIG1hdGNoWzFdIHx8ICcnO1xuICAgICAgfVxuICAgIH0gLy8gV2UgdXNlIHRoZSBwcmVmaXggdG8gZW5zdXJlIG91ciBzdGFja3MgbGluZSB1cCB3aXRoIG5hdGl2ZSBzdGFjayBmcmFtZXMuXG5cblxuICAgIHJldHVybiAnXFxuJyArIHByZWZpeCArIG5hbWU7XG4gIH1cbn1cbnZhciByZWVudHJ5ID0gZmFsc2U7XG52YXIgY29tcG9uZW50RnJhbWVDYWNoZTtcblxue1xuICB2YXIgUG9zc2libHlXZWFrTWFwID0gdHlwZW9mIFdlYWtNYXAgPT09ICdmdW5jdGlvbicgPyBXZWFrTWFwIDogTWFwO1xuICBjb21wb25lbnRGcmFtZUNhY2hlID0gbmV3IFBvc3NpYmx5V2Vha01hcCgpO1xufVxuXG5mdW5jdGlvbiBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKGZuLCBjb25zdHJ1Y3QpIHtcbiAgLy8gSWYgc29tZXRoaW5nIGFza2VkIGZvciBhIHN0YWNrIGluc2lkZSBhIGZha2UgcmVuZGVyLCBpdCBzaG91bGQgZ2V0IGlnbm9yZWQuXG4gIGlmICghZm4gfHwgcmVlbnRyeSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHtcbiAgICB2YXIgZnJhbWUgPSBjb21wb25lbnRGcmFtZUNhY2hlLmdldChmbik7XG5cbiAgICBpZiAoZnJhbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGZyYW1lO1xuICAgIH1cbiAgfVxuXG4gIHZhciBjb250cm9sO1xuICByZWVudHJ5ID0gdHJ1ZTtcbiAgdmFyIHByZXZpb3VzUHJlcGFyZVN0YWNrVHJhY2UgPSBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZTsgLy8gJEZsb3dGaXhNZSBJdCBkb2VzIGFjY2VwdCB1bmRlZmluZWQuXG5cbiAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSB1bmRlZmluZWQ7XG4gIHZhciBwcmV2aW91c0Rpc3BhdGNoZXI7XG5cbiAge1xuICAgIHByZXZpb3VzRGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIuY3VycmVudDsgLy8gU2V0IHRoZSBkaXNwYXRjaGVyIGluIERFViBiZWNhdXNlIHRoaXMgbWlnaHQgYmUgY2FsbCBpbiB0aGUgcmVuZGVyIGZ1bmN0aW9uXG4gICAgLy8gZm9yIHdhcm5pbmdzLlxuXG4gICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlci5jdXJyZW50ID0gbnVsbDtcbiAgICBkaXNhYmxlTG9ncygpO1xuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBUaGlzIHNob3VsZCB0aHJvdy5cbiAgICBpZiAoY29uc3RydWN0KSB7XG4gICAgICAvLyBTb21ldGhpbmcgc2hvdWxkIGJlIHNldHRpbmcgdGhlIHByb3BzIGluIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICAgIHZhciBGYWtlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgfTsgLy8gJEZsb3dGaXhNZVxuXG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGYWtlLnByb3RvdHlwZSwgJ3Byb3BzJywge1xuICAgICAgICBzZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAvLyBXZSB1c2UgYSB0aHJvd2luZyBzZXR0ZXIgaW5zdGVhZCBvZiBmcm96ZW4gb3Igbm9uLXdyaXRhYmxlIHByb3BzXG4gICAgICAgICAgLy8gYmVjYXVzZSB0aGF0IHdvbid0IHRocm93IGluIGEgbm9uLXN0cmljdCBtb2RlIGZ1bmN0aW9uLlxuICAgICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09ICdvYmplY3QnICYmIFJlZmxlY3QuY29uc3RydWN0KSB7XG4gICAgICAgIC8vIFdlIGNvbnN0cnVjdCBhIGRpZmZlcmVudCBjb250cm9sIGZvciB0aGlzIGNhc2UgdG8gaW5jbHVkZSBhbnkgZXh0cmFcbiAgICAgICAgLy8gZnJhbWVzIGFkZGVkIGJ5IHRoZSBjb25zdHJ1Y3QgY2FsbC5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBSZWZsZWN0LmNvbnN0cnVjdChGYWtlLCBbXSk7XG4gICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICBjb250cm9sID0geDtcbiAgICAgICAgfVxuXG4gICAgICAgIFJlZmxlY3QuY29uc3RydWN0KGZuLCBbXSwgRmFrZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIEZha2UuY2FsbCgpO1xuICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgY29udHJvbCA9IHg7XG4gICAgICAgIH1cblxuICAgICAgICBmbi5jYWxsKEZha2UucHJvdG90eXBlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgY29udHJvbCA9IHg7XG4gICAgICB9XG5cbiAgICAgIGZuKCk7XG4gICAgfVxuICB9IGNhdGNoIChzYW1wbGUpIHtcbiAgICAvLyBUaGlzIGlzIGlubGluZWQgbWFudWFsbHkgYmVjYXVzZSBjbG9zdXJlIGRvZXNuJ3QgZG8gaXQgZm9yIHVzLlxuICAgIGlmIChzYW1wbGUgJiYgY29udHJvbCAmJiB0eXBlb2Ygc2FtcGxlLnN0YWNrID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gVGhpcyBleHRyYWN0cyB0aGUgZmlyc3QgZnJhbWUgZnJvbSB0aGUgc2FtcGxlIHRoYXQgaXNuJ3QgYWxzbyBpbiB0aGUgY29udHJvbC5cbiAgICAgIC8vIFNraXBwaW5nIG9uZSBmcmFtZSB0aGF0IHdlIGFzc3VtZSBpcyB0aGUgZnJhbWUgdGhhdCBjYWxscyB0aGUgdHdvLlxuICAgICAgdmFyIHNhbXBsZUxpbmVzID0gc2FtcGxlLnN0YWNrLnNwbGl0KCdcXG4nKTtcbiAgICAgIHZhciBjb250cm9sTGluZXMgPSBjb250cm9sLnN0YWNrLnNwbGl0KCdcXG4nKTtcbiAgICAgIHZhciBzID0gc2FtcGxlTGluZXMubGVuZ3RoIC0gMTtcbiAgICAgIHZhciBjID0gY29udHJvbExpbmVzLmxlbmd0aCAtIDE7XG5cbiAgICAgIHdoaWxlIChzID49IDEgJiYgYyA+PSAwICYmIHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcbiAgICAgICAgLy8gV2UgZXhwZWN0IGF0IGxlYXN0IG9uZSBzdGFjayBmcmFtZSB0byBiZSBzaGFyZWQuXG4gICAgICAgIC8vIFR5cGljYWxseSB0aGlzIHdpbGwgYmUgdGhlIHJvb3QgbW9zdCBvbmUuIEhvd2V2ZXIsIHN0YWNrIGZyYW1lcyBtYXkgYmVcbiAgICAgICAgLy8gY3V0IG9mZiBkdWUgdG8gbWF4aW11bSBzdGFjayBsaW1pdHMuIEluIHRoaXMgY2FzZSwgb25lIG1heWJlIGN1dCBvZmZcbiAgICAgICAgLy8gZWFybGllciB0aGFuIHRoZSBvdGhlci4gV2UgYXNzdW1lIHRoYXQgdGhlIHNhbXBsZSBpcyBsb25nZXIgb3IgdGhlIHNhbWVcbiAgICAgICAgLy8gYW5kIHRoZXJlIGZvciBjdXQgb2ZmIGVhcmxpZXIuIFNvIHdlIHNob3VsZCBmaW5kIHRoZSByb290IG1vc3QgZnJhbWUgaW5cbiAgICAgICAgLy8gdGhlIHNhbXBsZSBzb21ld2hlcmUgaW4gdGhlIGNvbnRyb2wuXG4gICAgICAgIGMtLTtcbiAgICAgIH1cblxuICAgICAgZm9yICg7IHMgPj0gMSAmJiBjID49IDA7IHMtLSwgYy0tKSB7XG4gICAgICAgIC8vIE5leHQgd2UgZmluZCB0aGUgZmlyc3Qgb25lIHRoYXQgaXNuJ3QgdGhlIHNhbWUgd2hpY2ggc2hvdWxkIGJlIHRoZVxuICAgICAgICAvLyBmcmFtZSB0aGF0IGNhbGxlZCBvdXIgc2FtcGxlIGZ1bmN0aW9uIGFuZCB0aGUgY29udHJvbC5cbiAgICAgICAgaWYgKHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcbiAgICAgICAgICAvLyBJbiBWOCwgdGhlIGZpcnN0IGxpbmUgaXMgZGVzY3JpYmluZyB0aGUgbWVzc2FnZSBidXQgb3RoZXIgVk1zIGRvbid0LlxuICAgICAgICAgIC8vIElmIHdlJ3JlIGFib3V0IHRvIHJldHVybiB0aGUgZmlyc3QgbGluZSwgYW5kIHRoZSBjb250cm9sIGlzIGFsc28gb24gdGhlIHNhbWVcbiAgICAgICAgICAvLyBsaW5lLCB0aGF0J3MgYSBwcmV0dHkgZ29vZCBpbmRpY2F0b3IgdGhhdCBvdXIgc2FtcGxlIHRocmV3IGF0IHNhbWUgbGluZSBhc1xuICAgICAgICAgIC8vIHRoZSBjb250cm9sLiBJLmUuIGJlZm9yZSB3ZSBlbnRlcmVkIHRoZSBzYW1wbGUgZnJhbWUuIFNvIHdlIGlnbm9yZSB0aGlzIHJlc3VsdC5cbiAgICAgICAgICAvLyBUaGlzIGNhbiBoYXBwZW4gaWYgeW91IHBhc3NlZCBhIGNsYXNzIHRvIGZ1bmN0aW9uIGNvbXBvbmVudCwgb3Igbm9uLWZ1bmN0aW9uLlxuICAgICAgICAgIGlmIChzICE9PSAxIHx8IGMgIT09IDEpIHtcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgcy0tO1xuICAgICAgICAgICAgICBjLS07IC8vIFdlIG1heSBzdGlsbCBoYXZlIHNpbWlsYXIgaW50ZXJtZWRpYXRlIGZyYW1lcyBmcm9tIHRoZSBjb25zdHJ1Y3QgY2FsbC5cbiAgICAgICAgICAgICAgLy8gVGhlIG5leHQgb25lIHRoYXQgaXNuJ3QgdGhlIHNhbWUgc2hvdWxkIGJlIG91ciBtYXRjaCB0aG91Z2guXG5cbiAgICAgICAgICAgICAgaWYgKGMgPCAwIHx8IHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcbiAgICAgICAgICAgICAgICAvLyBWOCBhZGRzIGEgXCJuZXdcIiBwcmVmaXggZm9yIG5hdGl2ZSBjbGFzc2VzLiBMZXQncyByZW1vdmUgaXQgdG8gbWFrZSBpdCBwcmV0dGllci5cbiAgICAgICAgICAgICAgICB2YXIgX2ZyYW1lID0gJ1xcbicgKyBzYW1wbGVMaW5lc1tzXS5yZXBsYWNlKCcgYXQgbmV3ICcsICcgYXQgJyk7XG5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudEZyYW1lQ2FjaGUuc2V0KGZuLCBfZnJhbWUpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gLy8gUmV0dXJuIHRoZSBsaW5lIHdlIGZvdW5kLlxuXG5cbiAgICAgICAgICAgICAgICByZXR1cm4gX2ZyYW1lO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IHdoaWxlIChzID49IDEgJiYgYyA+PSAwKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICByZWVudHJ5ID0gZmFsc2U7XG5cbiAgICB7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyLmN1cnJlbnQgPSBwcmV2aW91c0Rpc3BhdGNoZXI7XG4gICAgICByZWVuYWJsZUxvZ3MoKTtcbiAgICB9XG5cbiAgICBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IHByZXZpb3VzUHJlcGFyZVN0YWNrVHJhY2U7XG4gIH0gLy8gRmFsbGJhY2sgdG8ganVzdCB1c2luZyB0aGUgbmFtZSBpZiB3ZSBjb3VsZG4ndCBtYWtlIGl0IHRocm93LlxuXG5cbiAgdmFyIG5hbWUgPSBmbiA/IGZuLmRpc3BsYXlOYW1lIHx8IGZuLm5hbWUgOiAnJztcbiAgdmFyIHN5bnRoZXRpY0ZyYW1lID0gbmFtZSA/IGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKG5hbWUpIDogJyc7XG5cbiAge1xuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbXBvbmVudEZyYW1lQ2FjaGUuc2V0KGZuLCBzeW50aGV0aWNGcmFtZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN5bnRoZXRpY0ZyYW1lO1xufVxuXG5mdW5jdGlvbiBkZXNjcmliZUNsYXNzQ29tcG9uZW50RnJhbWUoY3Rvciwgc291cmNlLCBvd25lckZuKSB7XG4gIHtcbiAgICByZXR1cm4gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZShjdG9yLCB0cnVlKTtcbiAgfVxufVxuZnVuY3Rpb24gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKGZuLCBzb3VyY2UsIG93bmVyRm4pIHtcbiAge1xuICAgIHJldHVybiBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKGZuLCBmYWxzZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2hvdWxkQ29uc3RydWN0KENvbXBvbmVudCkge1xuICB2YXIgcHJvdG90eXBlID0gQ29tcG9uZW50LnByb3RvdHlwZTtcbiAgcmV0dXJuICEhKHByb3RvdHlwZSAmJiBwcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudCk7XG59XG5cbmZ1bmN0aW9uIGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVih0eXBlLCBzb3VyY2UsIG93bmVyRm4pIHtcblxuICBpZiAodHlwZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAge1xuICAgICAgcmV0dXJuIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUodHlwZSwgc2hvdWxkQ29uc3RydWN0KHR5cGUpKTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKHR5cGUpO1xuICB9XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKCdTdXNwZW5zZScpO1xuXG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU6XG4gICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoJ1N1c3BlbnNlTGlzdCcpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0Jykge1xuICAgIHN3aXRjaCAodHlwZS4kJHR5cGVvZikge1xuICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICByZXR1cm4gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKHR5cGUucmVuZGVyKTtcblxuICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgIC8vIE1lbW8gbWF5IGNvbnRhaW4gYW55IGNvbXBvbmVudCB0eXBlIHNvIHdlIHJlY3Vyc2l2ZWx5IHJlc29sdmUgaXQuXG4gICAgICAgIHJldHVybiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYodHlwZS50eXBlLCBzb3VyY2UsIG93bmVyRm4pO1xuXG4gICAgICBjYXNlIFJFQUNUX0JMT0NLX1RZUEU6XG4gICAgICAgIHJldHVybiBkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWUodHlwZS5fcmVuZGVyKTtcblxuICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgbGF6eUNvbXBvbmVudCA9IHR5cGU7XG4gICAgICAgICAgdmFyIHBheWxvYWQgPSBsYXp5Q29tcG9uZW50Ll9wYXlsb2FkO1xuICAgICAgICAgIHZhciBpbml0ID0gbGF6eUNvbXBvbmVudC5faW5pdDtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBMYXp5IG1heSBjb250YWluIGFueSBjb21wb25lbnQgdHlwZSBzbyB3ZSByZWN1cnNpdmVseSByZXNvbHZlIGl0LlxuICAgICAgICAgICAgcmV0dXJuIGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVihpbml0KHBheWxvYWQpLCBzb3VyY2UsIG93bmVyRm4pO1xuICAgICAgICAgIH0gY2F0Y2ggKHgpIHt9XG4gICAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG5cbmZ1bmN0aW9uIGRlc2NyaWJlRmliZXIoZmliZXIpIHtcbiAgdmFyIG93bmVyID0gIGZpYmVyLl9kZWJ1Z093bmVyID8gZmliZXIuX2RlYnVnT3duZXIudHlwZSA6IG51bGwgO1xuICB2YXIgc291cmNlID0gIGZpYmVyLl9kZWJ1Z1NvdXJjZSA7XG5cbiAgc3dpdGNoIChmaWJlci50YWcpIHtcbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoZmliZXIudHlwZSk7XG5cbiAgICBjYXNlIExhenlDb21wb25lbnQ6XG4gICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoJ0xhenknKTtcblxuICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoJ1N1c3BlbnNlJyk7XG5cbiAgICBjYXNlIFN1c3BlbnNlTGlzdENvbXBvbmVudDpcbiAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSgnU3VzcGVuc2VMaXN0Jyk7XG5cbiAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgIGNhc2UgSW5kZXRlcm1pbmF0ZUNvbXBvbmVudDpcbiAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgICByZXR1cm4gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKGZpYmVyLnR5cGUpO1xuXG4gICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgICAgcmV0dXJuIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZShmaWJlci50eXBlLnJlbmRlcik7XG5cbiAgICBjYXNlIEJsb2NrOlxuICAgICAgcmV0dXJuIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZShmaWJlci50eXBlLl9yZW5kZXIpO1xuXG4gICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgIHJldHVybiBkZXNjcmliZUNsYXNzQ29tcG9uZW50RnJhbWUoZmliZXIudHlwZSk7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuICcnO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFN0YWNrQnlGaWJlckluRGV2QW5kUHJvZCh3b3JrSW5Qcm9ncmVzcykge1xuICB0cnkge1xuICAgIHZhciBpbmZvID0gJyc7XG4gICAgdmFyIG5vZGUgPSB3b3JrSW5Qcm9ncmVzcztcblxuICAgIGRvIHtcbiAgICAgIGluZm8gKz0gZGVzY3JpYmVGaWJlcihub2RlKTtcbiAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICB9IHdoaWxlIChub2RlKTtcblxuICAgIHJldHVybiBpbmZvO1xuICB9IGNhdGNoICh4KSB7XG4gICAgcmV0dXJuICdcXG5FcnJvciBnZW5lcmF0aW5nIHN0YWNrOiAnICsgeC5tZXNzYWdlICsgJ1xcbicgKyB4LnN0YWNrO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFdyYXBwZWROYW1lKG91dGVyVHlwZSwgaW5uZXJUeXBlLCB3cmFwcGVyTmFtZSkge1xuICB2YXIgZnVuY3Rpb25OYW1lID0gaW5uZXJUeXBlLmRpc3BsYXlOYW1lIHx8IGlubmVyVHlwZS5uYW1lIHx8ICcnO1xuICByZXR1cm4gb3V0ZXJUeXBlLmRpc3BsYXlOYW1lIHx8IChmdW5jdGlvbk5hbWUgIT09ICcnID8gd3JhcHBlck5hbWUgKyBcIihcIiArIGZ1bmN0aW9uTmFtZSArIFwiKVwiIDogd3JhcHBlck5hbWUpO1xufVxuXG5mdW5jdGlvbiBnZXRDb250ZXh0TmFtZSh0eXBlKSB7XG4gIHJldHVybiB0eXBlLmRpc3BsYXlOYW1lIHx8ICdDb250ZXh0Jztcbn1cblxuZnVuY3Rpb24gZ2V0Q29tcG9uZW50TmFtZSh0eXBlKSB7XG4gIGlmICh0eXBlID09IG51bGwpIHtcbiAgICAvLyBIb3N0IHJvb3QsIHRleHQgbm9kZSBvciBqdXN0IGludmFsaWQgdHlwZS5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHtcbiAgICBpZiAodHlwZW9mIHR5cGUudGFnID09PSAnbnVtYmVyJykge1xuICAgICAgZXJyb3IoJ1JlY2VpdmVkIGFuIHVuZXhwZWN0ZWQgb2JqZWN0IGluIGdldENvbXBvbmVudE5hbWUoKS4gJyArICdUaGlzIGlzIGxpa2VseSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHR5cGUuZGlzcGxheU5hbWUgfHwgdHlwZS5uYW1lIHx8IG51bGw7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIFJFQUNUX0ZSQUdNRU5UX1RZUEU6XG4gICAgICByZXR1cm4gJ0ZyYWdtZW50JztcblxuICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICByZXR1cm4gJ1BvcnRhbCc7XG5cbiAgICBjYXNlIFJFQUNUX1BST0ZJTEVSX1RZUEU6XG4gICAgICByZXR1cm4gJ1Byb2ZpbGVyJztcblxuICAgIGNhc2UgUkVBQ1RfU1RSSUNUX01PREVfVFlQRTpcbiAgICAgIHJldHVybiAnU3RyaWN0TW9kZSc7XG5cbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG4gICAgICByZXR1cm4gJ1N1c3BlbnNlJztcblxuICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgcmV0dXJuICdTdXNwZW5zZUxpc3QnO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0Jykge1xuICAgIHN3aXRjaCAodHlwZS4kJHR5cGVvZikge1xuICAgICAgY2FzZSBSRUFDVF9DT05URVhUX1RZUEU6XG4gICAgICAgIHZhciBjb250ZXh0ID0gdHlwZTtcbiAgICAgICAgcmV0dXJuIGdldENvbnRleHROYW1lKGNvbnRleHQpICsgJy5Db25zdW1lcic7XG5cbiAgICAgIGNhc2UgUkVBQ1RfUFJPVklERVJfVFlQRTpcbiAgICAgICAgdmFyIHByb3ZpZGVyID0gdHlwZTtcbiAgICAgICAgcmV0dXJuIGdldENvbnRleHROYW1lKHByb3ZpZGVyLl9jb250ZXh0KSArICcuUHJvdmlkZXInO1xuXG4gICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgIHJldHVybiBnZXRXcmFwcGVkTmFtZSh0eXBlLCB0eXBlLnJlbmRlciwgJ0ZvcndhcmRSZWYnKTtcblxuICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lKHR5cGUudHlwZSk7XG5cbiAgICAgIGNhc2UgUkVBQ1RfQkxPQ0tfVFlQRTpcbiAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWUodHlwZS5fcmVuZGVyKTtcblxuICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgbGF6eUNvbXBvbmVudCA9IHR5cGU7XG4gICAgICAgICAgdmFyIHBheWxvYWQgPSBsYXp5Q29tcG9uZW50Ll9wYXlsb2FkO1xuICAgICAgICAgIHZhciBpbml0ID0gbGF6eUNvbXBvbmVudC5faW5pdDtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZShpbml0KHBheWxvYWQpKTtcbiAgICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxudmFyIFJlYWN0RGVidWdDdXJyZW50RnJhbWUgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdERlYnVnQ3VycmVudEZyYW1lO1xudmFyIGN1cnJlbnQgPSBudWxsO1xudmFyIGlzUmVuZGVyaW5nID0gZmFsc2U7XG5mdW5jdGlvbiBnZXRDdXJyZW50RmliZXJPd25lck5hbWVJbkRldk9yTnVsbCgpIHtcbiAge1xuICAgIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgb3duZXIgPSBjdXJyZW50Ll9kZWJ1Z093bmVyO1xuXG4gICAgaWYgKG93bmVyICE9PSBudWxsICYmIHR5cGVvZiBvd25lciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lKG93bmVyLnR5cGUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBnZXRDdXJyZW50RmliZXJTdGFja0luRGV2KCkge1xuICB7XG4gICAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9IC8vIFNhZmUgYmVjYXVzZSBpZiBjdXJyZW50IGZpYmVyIGV4aXN0cywgd2UgYXJlIHJlY29uY2lsaW5nLFxuICAgIC8vIGFuZCBpdCBpcyBndWFyYW50ZWVkIHRvIGJlIHRoZSB3b3JrLWluLXByb2dyZXNzIHZlcnNpb24uXG5cblxuICAgIHJldHVybiBnZXRTdGFja0J5RmliZXJJbkRldkFuZFByb2QoY3VycmVudCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzZXRDdXJyZW50RmliZXIoKSB7XG4gIHtcbiAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lLmdldEN1cnJlbnRTdGFjayA9IG51bGw7XG4gICAgY3VycmVudCA9IG51bGw7XG4gICAgaXNSZW5kZXJpbmcgPSBmYWxzZTtcbiAgfVxufVxuZnVuY3Rpb24gc2V0Q3VycmVudEZpYmVyKGZpYmVyKSB7XG4gIHtcbiAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lLmdldEN1cnJlbnRTdGFjayA9IGdldEN1cnJlbnRGaWJlclN0YWNrSW5EZXY7XG4gICAgY3VycmVudCA9IGZpYmVyO1xuICAgIGlzUmVuZGVyaW5nID0gZmFsc2U7XG4gIH1cbn1cbmZ1bmN0aW9uIHNldElzUmVuZGVyaW5nKHJlbmRlcmluZykge1xuICB7XG4gICAgaXNSZW5kZXJpbmcgPSByZW5kZXJpbmc7XG4gIH1cbn1cbmZ1bmN0aW9uIGdldElzUmVuZGVyaW5nKCkge1xuICB7XG4gICAgcmV0dXJuIGlzUmVuZGVyaW5nO1xuICB9XG59XG5cbi8vIEZsb3cgZG9lcyBub3QgYWxsb3cgc3RyaW5nIGNvbmNhdGVuYXRpb24gb2YgbW9zdCBub24tc3RyaW5nIHR5cGVzLiBUbyB3b3JrXG4vLyBhcm91bmQgdGhpcyBsaW1pdGF0aW9uLCB3ZSB1c2UgYW4gb3BhcXVlIHR5cGUgdGhhdCBjYW4gb25seSBiZSBvYnRhaW5lZCBieVxuLy8gcGFzc2luZyB0aGUgdmFsdWUgdGhyb3VnaCBnZXRUb1N0cmluZ1ZhbHVlIGZpcnN0LlxuZnVuY3Rpb24gdG9TdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuICcnICsgdmFsdWU7XG59XG5mdW5jdGlvbiBnZXRUb1N0cmluZ1ZhbHVlKHZhbHVlKSB7XG4gIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgY2FzZSAnYm9vbGVhbic6XG4gICAgY2FzZSAnbnVtYmVyJzpcbiAgICBjYXNlICdvYmplY3QnOlxuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICAgIHJldHVybiB2YWx1ZTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICAvLyBmdW5jdGlvbiwgc3ltYm9sIGFyZSBhc3NpZ25lZCBhcyBlbXB0eSBzdHJpbmdzXG4gICAgICByZXR1cm4gJyc7XG4gIH1cbn1cblxudmFyIGhhc1JlYWRPbmx5VmFsdWUgPSB7XG4gIGJ1dHRvbjogdHJ1ZSxcbiAgY2hlY2tib3g6IHRydWUsXG4gIGltYWdlOiB0cnVlLFxuICBoaWRkZW46IHRydWUsXG4gIHJhZGlvOiB0cnVlLFxuICByZXNldDogdHJ1ZSxcbiAgc3VibWl0OiB0cnVlXG59O1xuZnVuY3Rpb24gY2hlY2tDb250cm9sbGVkVmFsdWVQcm9wcyh0YWdOYW1lLCBwcm9wcykge1xuICB7XG4gICAgaWYgKCEoaGFzUmVhZE9ubHlWYWx1ZVtwcm9wcy50eXBlXSB8fCBwcm9wcy5vbkNoYW5nZSB8fCBwcm9wcy5vbklucHV0IHx8IHByb3BzLnJlYWRPbmx5IHx8IHByb3BzLmRpc2FibGVkIHx8IHByb3BzLnZhbHVlID09IG51bGwpKSB7XG4gICAgICBlcnJvcignWW91IHByb3ZpZGVkIGEgYHZhbHVlYCBwcm9wIHRvIGEgZm9ybSBmaWVsZCB3aXRob3V0IGFuICcgKyAnYG9uQ2hhbmdlYCBoYW5kbGVyLiBUaGlzIHdpbGwgcmVuZGVyIGEgcmVhZC1vbmx5IGZpZWxkLiBJZiAnICsgJ3RoZSBmaWVsZCBzaG91bGQgYmUgbXV0YWJsZSB1c2UgYGRlZmF1bHRWYWx1ZWAuIE90aGVyd2lzZSwgJyArICdzZXQgZWl0aGVyIGBvbkNoYW5nZWAgb3IgYHJlYWRPbmx5YC4nKTtcbiAgICB9XG5cbiAgICBpZiAoIShwcm9wcy5vbkNoYW5nZSB8fCBwcm9wcy5yZWFkT25seSB8fCBwcm9wcy5kaXNhYmxlZCB8fCBwcm9wcy5jaGVja2VkID09IG51bGwpKSB7XG4gICAgICBlcnJvcignWW91IHByb3ZpZGVkIGEgYGNoZWNrZWRgIHByb3AgdG8gYSBmb3JtIGZpZWxkIHdpdGhvdXQgYW4gJyArICdgb25DaGFuZ2VgIGhhbmRsZXIuIFRoaXMgd2lsbCByZW5kZXIgYSByZWFkLW9ubHkgZmllbGQuIElmICcgKyAndGhlIGZpZWxkIHNob3VsZCBiZSBtdXRhYmxlIHVzZSBgZGVmYXVsdENoZWNrZWRgLiBPdGhlcndpc2UsICcgKyAnc2V0IGVpdGhlciBgb25DaGFuZ2VgIG9yIGByZWFkT25seWAuJyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzQ2hlY2thYmxlKGVsZW0pIHtcbiAgdmFyIHR5cGUgPSBlbGVtLnR5cGU7XG4gIHZhciBub2RlTmFtZSA9IGVsZW0ubm9kZU5hbWU7XG4gIHJldHVybiBub2RlTmFtZSAmJiBub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnaW5wdXQnICYmICh0eXBlID09PSAnY2hlY2tib3gnIHx8IHR5cGUgPT09ICdyYWRpbycpO1xufVxuXG5mdW5jdGlvbiBnZXRUcmFja2VyKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUuX3ZhbHVlVHJhY2tlcjtcbn1cblxuZnVuY3Rpb24gZGV0YWNoVHJhY2tlcihub2RlKSB7XG4gIG5vZGUuX3ZhbHVlVHJhY2tlciA9IG51bGw7XG59XG5cbmZ1bmN0aW9uIGdldFZhbHVlRnJvbU5vZGUobm9kZSkge1xuICB2YXIgdmFsdWUgPSAnJztcblxuICBpZiAoIW5vZGUpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBpZiAoaXNDaGVja2FibGUobm9kZSkpIHtcbiAgICB2YWx1ZSA9IG5vZGUuY2hlY2tlZCA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gIH0gZWxzZSB7XG4gICAgdmFsdWUgPSBub2RlLnZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5mdW5jdGlvbiB0cmFja1ZhbHVlT25Ob2RlKG5vZGUpIHtcbiAgdmFyIHZhbHVlRmllbGQgPSBpc0NoZWNrYWJsZShub2RlKSA/ICdjaGVja2VkJyA6ICd2YWx1ZSc7XG4gIHZhciBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihub2RlLmNvbnN0cnVjdG9yLnByb3RvdHlwZSwgdmFsdWVGaWVsZCk7XG4gIHZhciBjdXJyZW50VmFsdWUgPSAnJyArIG5vZGVbdmFsdWVGaWVsZF07IC8vIGlmIHNvbWVvbmUgaGFzIGFscmVhZHkgZGVmaW5lZCBhIHZhbHVlIG9yIFNhZmFyaSwgdGhlbiBiYWlsXG4gIC8vIGFuZCBkb24ndCB0cmFjayB2YWx1ZSB3aWxsIGNhdXNlIG92ZXIgcmVwb3J0aW5nIG9mIGNoYW5nZXMsXG4gIC8vIGJ1dCBpdCdzIGJldHRlciB0aGVuIGEgaGFyZCBmYWlsdXJlXG4gIC8vIChuZWVkZWQgZm9yIGNlcnRhaW4gdGVzdHMgdGhhdCBzcHlPbiBpbnB1dCB2YWx1ZXMgYW5kIFNhZmFyaSlcblxuICBpZiAobm9kZS5oYXNPd25Qcm9wZXJ0eSh2YWx1ZUZpZWxkKSB8fCB0eXBlb2YgZGVzY3JpcHRvciA9PT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mIGRlc2NyaXB0b3IuZ2V0ICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBkZXNjcmlwdG9yLnNldCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBnZXQgPSBkZXNjcmlwdG9yLmdldCxcbiAgICAgIHNldCA9IGRlc2NyaXB0b3Iuc2V0O1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobm9kZSwgdmFsdWVGaWVsZCwge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBnZXQuY2FsbCh0aGlzKTtcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBjdXJyZW50VmFsdWUgPSAnJyArIHZhbHVlO1xuICAgICAgc2V0LmNhbGwodGhpcywgdmFsdWUpO1xuICAgIH1cbiAgfSk7IC8vIFdlIGNvdWxkJ3ZlIHBhc3NlZCB0aGlzIHRoZSBmaXJzdCB0aW1lXG4gIC8vIGJ1dCBpdCB0cmlnZ2VycyBhIGJ1ZyBpbiBJRTExIGFuZCBFZGdlIDE0LzE1LlxuICAvLyBDYWxsaW5nIGRlZmluZVByb3BlcnR5KCkgYWdhaW4gc2hvdWxkIGJlIGVxdWl2YWxlbnQuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTE3NjhcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobm9kZSwgdmFsdWVGaWVsZCwge1xuICAgIGVudW1lcmFibGU6IGRlc2NyaXB0b3IuZW51bWVyYWJsZVxuICB9KTtcbiAgdmFyIHRyYWNrZXIgPSB7XG4gICAgZ2V0VmFsdWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBjdXJyZW50VmFsdWU7XG4gICAgfSxcbiAgICBzZXRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBjdXJyZW50VmFsdWUgPSAnJyArIHZhbHVlO1xuICAgIH0sXG4gICAgc3RvcFRyYWNraW5nOiBmdW5jdGlvbiAoKSB7XG4gICAgICBkZXRhY2hUcmFja2VyKG5vZGUpO1xuICAgICAgZGVsZXRlIG5vZGVbdmFsdWVGaWVsZF07XG4gICAgfVxuICB9O1xuICByZXR1cm4gdHJhY2tlcjtcbn1cblxuZnVuY3Rpb24gdHJhY2sobm9kZSkge1xuICBpZiAoZ2V0VHJhY2tlcihub2RlKSkge1xuICAgIHJldHVybjtcbiAgfSAvLyBUT0RPOiBPbmNlIGl0J3MganVzdCBGaWJlciB3ZSBjYW4gbW92ZSB0aGlzIHRvIG5vZGUuX3dyYXBwZXJTdGF0ZVxuXG5cbiAgbm9kZS5fdmFsdWVUcmFja2VyID0gdHJhY2tWYWx1ZU9uTm9kZShub2RlKTtcbn1cbmZ1bmN0aW9uIHVwZGF0ZVZhbHVlSWZDaGFuZ2VkKG5vZGUpIHtcbiAgaWYgKCFub2RlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIHRyYWNrZXIgPSBnZXRUcmFja2VyKG5vZGUpOyAvLyBpZiB0aGVyZSBpcyBubyB0cmFja2VyIGF0IHRoaXMgcG9pbnQgaXQncyB1bmxpa2VseVxuICAvLyB0aGF0IHRyeWluZyBhZ2FpbiB3aWxsIHN1Y2NlZWRcblxuICBpZiAoIXRyYWNrZXIpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHZhciBsYXN0VmFsdWUgPSB0cmFja2VyLmdldFZhbHVlKCk7XG4gIHZhciBuZXh0VmFsdWUgPSBnZXRWYWx1ZUZyb21Ob2RlKG5vZGUpO1xuXG4gIGlmIChuZXh0VmFsdWUgIT09IGxhc3RWYWx1ZSkge1xuICAgIHRyYWNrZXIuc2V0VmFsdWUobmV4dFZhbHVlKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZ2V0QWN0aXZlRWxlbWVudChkb2MpIHtcbiAgZG9jID0gZG9jIHx8ICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnID8gZG9jdW1lbnQgOiB1bmRlZmluZWQpO1xuXG4gIGlmICh0eXBlb2YgZG9jID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gZG9jLmFjdGl2ZUVsZW1lbnQgfHwgZG9jLmJvZHk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZG9jLmJvZHk7XG4gIH1cbn1cblxudmFyIGRpZFdhcm5WYWx1ZURlZmF1bHRWYWx1ZSA9IGZhbHNlO1xudmFyIGRpZFdhcm5DaGVja2VkRGVmYXVsdENoZWNrZWQgPSBmYWxzZTtcbnZhciBkaWRXYXJuQ29udHJvbGxlZFRvVW5jb250cm9sbGVkID0gZmFsc2U7XG52YXIgZGlkV2FyblVuY29udHJvbGxlZFRvQ29udHJvbGxlZCA9IGZhbHNlO1xuXG5mdW5jdGlvbiBpc0NvbnRyb2xsZWQocHJvcHMpIHtcbiAgdmFyIHVzZXNDaGVja2VkID0gcHJvcHMudHlwZSA9PT0gJ2NoZWNrYm94JyB8fCBwcm9wcy50eXBlID09PSAncmFkaW8nO1xuICByZXR1cm4gdXNlc0NoZWNrZWQgPyBwcm9wcy5jaGVja2VkICE9IG51bGwgOiBwcm9wcy52YWx1ZSAhPSBudWxsO1xufVxuLyoqXG4gKiBJbXBsZW1lbnRzIGFuIDxpbnB1dD4gaG9zdCBjb21wb25lbnQgdGhhdCBhbGxvd3Mgc2V0dGluZyB0aGVzZSBvcHRpb25hbFxuICogcHJvcHM6IGBjaGVja2VkYCwgYHZhbHVlYCwgYGRlZmF1bHRDaGVja2VkYCwgYW5kIGBkZWZhdWx0VmFsdWVgLlxuICpcbiAqIElmIGBjaGVja2VkYCBvciBgdmFsdWVgIGFyZSBub3Qgc3VwcGxpZWQgKG9yIG51bGwvdW5kZWZpbmVkKSwgdXNlciBhY3Rpb25zXG4gKiB0aGF0IGFmZmVjdCB0aGUgY2hlY2tlZCBzdGF0ZSBvciB2YWx1ZSB3aWxsIHRyaWdnZXIgdXBkYXRlcyB0byB0aGUgZWxlbWVudC5cbiAqXG4gKiBJZiB0aGV5IGFyZSBzdXBwbGllZCAoYW5kIG5vdCBudWxsL3VuZGVmaW5lZCksIHRoZSByZW5kZXJlZCBlbGVtZW50IHdpbGwgbm90XG4gKiB0cmlnZ2VyIHVwZGF0ZXMgdG8gdGhlIGVsZW1lbnQuIEluc3RlYWQsIHRoZSBwcm9wcyBtdXN0IGNoYW5nZSBpbiBvcmRlciBmb3JcbiAqIHRoZSByZW5kZXJlZCBlbGVtZW50IHRvIGJlIHVwZGF0ZWQuXG4gKlxuICogVGhlIHJlbmRlcmVkIGVsZW1lbnQgd2lsbCBiZSBpbml0aWFsaXplZCBhcyB1bmNoZWNrZWQgKG9yIGBkZWZhdWx0Q2hlY2tlZGApXG4gKiB3aXRoIGFuIGVtcHR5IHZhbHVlIChvciBgZGVmYXVsdFZhbHVlYCkuXG4gKlxuICogU2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvV0QtaHRtbDUtMjAxMjEwMjUvdGhlLWlucHV0LWVsZW1lbnQuaHRtbFxuICovXG5cblxuZnVuY3Rpb24gZ2V0SG9zdFByb3BzKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcbiAgdmFyIGNoZWNrZWQgPSBwcm9wcy5jaGVja2VkO1xuXG4gIHZhciBob3N0UHJvcHMgPSBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgIGRlZmF1bHRDaGVja2VkOiB1bmRlZmluZWQsXG4gICAgZGVmYXVsdFZhbHVlOiB1bmRlZmluZWQsXG4gICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICBjaGVja2VkOiBjaGVja2VkICE9IG51bGwgPyBjaGVja2VkIDogbm9kZS5fd3JhcHBlclN0YXRlLmluaXRpYWxDaGVja2VkXG4gIH0pO1xuXG4gIHJldHVybiBob3N0UHJvcHM7XG59XG5mdW5jdGlvbiBpbml0V3JhcHBlclN0YXRlKGVsZW1lbnQsIHByb3BzKSB7XG4gIHtcbiAgICBjaGVja0NvbnRyb2xsZWRWYWx1ZVByb3BzKCdpbnB1dCcsIHByb3BzKTtcblxuICAgIGlmIChwcm9wcy5jaGVja2VkICE9PSB1bmRlZmluZWQgJiYgcHJvcHMuZGVmYXVsdENoZWNrZWQgIT09IHVuZGVmaW5lZCAmJiAhZGlkV2FybkNoZWNrZWREZWZhdWx0Q2hlY2tlZCkge1xuICAgICAgZXJyb3IoJyVzIGNvbnRhaW5zIGFuIGlucHV0IG9mIHR5cGUgJXMgd2l0aCBib3RoIGNoZWNrZWQgYW5kIGRlZmF1bHRDaGVja2VkIHByb3BzLiAnICsgJ0lucHV0IGVsZW1lbnRzIG11c3QgYmUgZWl0aGVyIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkICcgKyAnKHNwZWNpZnkgZWl0aGVyIHRoZSBjaGVja2VkIHByb3AsIG9yIHRoZSBkZWZhdWx0Q2hlY2tlZCBwcm9wLCBidXQgbm90ICcgKyAnYm90aCkuIERlY2lkZSBiZXR3ZWVuIHVzaW5nIGEgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgaW5wdXQgJyArICdlbGVtZW50IGFuZCByZW1vdmUgb25lIG9mIHRoZXNlIHByb3BzLiBNb3JlIGluZm86ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2NvbnRyb2xsZWQtY29tcG9uZW50cycsIGdldEN1cnJlbnRGaWJlck93bmVyTmFtZUluRGV2T3JOdWxsKCkgfHwgJ0EgY29tcG9uZW50JywgcHJvcHMudHlwZSk7XG5cbiAgICAgIGRpZFdhcm5DaGVja2VkRGVmYXVsdENoZWNrZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkICYmICFkaWRXYXJuVmFsdWVEZWZhdWx0VmFsdWUpIHtcbiAgICAgIGVycm9yKCclcyBjb250YWlucyBhbiBpbnB1dCBvZiB0eXBlICVzIHdpdGggYm90aCB2YWx1ZSBhbmQgZGVmYXVsdFZhbHVlIHByb3BzLiAnICsgJ0lucHV0IGVsZW1lbnRzIG11c3QgYmUgZWl0aGVyIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkICcgKyAnKHNwZWNpZnkgZWl0aGVyIHRoZSB2YWx1ZSBwcm9wLCBvciB0aGUgZGVmYXVsdFZhbHVlIHByb3AsIGJ1dCBub3QgJyArICdib3RoKS4gRGVjaWRlIGJldHdlZW4gdXNpbmcgYSBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCBpbnB1dCAnICsgJ2VsZW1lbnQgYW5kIHJlbW92ZSBvbmUgb2YgdGhlc2UgcHJvcHMuIE1vcmUgaW5mbzogJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvY29udHJvbGxlZC1jb21wb25lbnRzJywgZ2V0Q3VycmVudEZpYmVyT3duZXJOYW1lSW5EZXZPck51bGwoKSB8fCAnQSBjb21wb25lbnQnLCBwcm9wcy50eXBlKTtcblxuICAgICAgZGlkV2FyblZhbHVlRGVmYXVsdFZhbHVlID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICB2YXIgbm9kZSA9IGVsZW1lbnQ7XG4gIHZhciBkZWZhdWx0VmFsdWUgPSBwcm9wcy5kZWZhdWx0VmFsdWUgPT0gbnVsbCA/ICcnIDogcHJvcHMuZGVmYXVsdFZhbHVlO1xuICBub2RlLl93cmFwcGVyU3RhdGUgPSB7XG4gICAgaW5pdGlhbENoZWNrZWQ6IHByb3BzLmNoZWNrZWQgIT0gbnVsbCA/IHByb3BzLmNoZWNrZWQgOiBwcm9wcy5kZWZhdWx0Q2hlY2tlZCxcbiAgICBpbml0aWFsVmFsdWU6IGdldFRvU3RyaW5nVmFsdWUocHJvcHMudmFsdWUgIT0gbnVsbCA/IHByb3BzLnZhbHVlIDogZGVmYXVsdFZhbHVlKSxcbiAgICBjb250cm9sbGVkOiBpc0NvbnRyb2xsZWQocHJvcHMpXG4gIH07XG59XG5mdW5jdGlvbiB1cGRhdGVDaGVja2VkKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcbiAgdmFyIGNoZWNrZWQgPSBwcm9wcy5jaGVja2VkO1xuXG4gIGlmIChjaGVja2VkICE9IG51bGwpIHtcbiAgICBzZXRWYWx1ZUZvclByb3BlcnR5KG5vZGUsICdjaGVja2VkJywgY2hlY2tlZCwgZmFsc2UpO1xuICB9XG59XG5mdW5jdGlvbiB1cGRhdGVXcmFwcGVyKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcblxuICB7XG4gICAgdmFyIGNvbnRyb2xsZWQgPSBpc0NvbnRyb2xsZWQocHJvcHMpO1xuXG4gICAgaWYgKCFub2RlLl93cmFwcGVyU3RhdGUuY29udHJvbGxlZCAmJiBjb250cm9sbGVkICYmICFkaWRXYXJuVW5jb250cm9sbGVkVG9Db250cm9sbGVkKSB7XG4gICAgICBlcnJvcignQSBjb21wb25lbnQgaXMgY2hhbmdpbmcgYW4gdW5jb250cm9sbGVkIGlucHV0IHRvIGJlIGNvbnRyb2xsZWQuICcgKyAnVGhpcyBpcyBsaWtlbHkgY2F1c2VkIGJ5IHRoZSB2YWx1ZSBjaGFuZ2luZyBmcm9tIHVuZGVmaW5lZCB0byAnICsgJ2EgZGVmaW5lZCB2YWx1ZSwgd2hpY2ggc2hvdWxkIG5vdCBoYXBwZW4uICcgKyAnRGVjaWRlIGJldHdlZW4gdXNpbmcgYSBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCBpbnB1dCAnICsgJ2VsZW1lbnQgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUgY29tcG9uZW50LiBNb3JlIGluZm86IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9jb250cm9sbGVkLWNvbXBvbmVudHMnKTtcblxuICAgICAgZGlkV2FyblVuY29udHJvbGxlZFRvQ29udHJvbGxlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUuX3dyYXBwZXJTdGF0ZS5jb250cm9sbGVkICYmICFjb250cm9sbGVkICYmICFkaWRXYXJuQ29udHJvbGxlZFRvVW5jb250cm9sbGVkKSB7XG4gICAgICBlcnJvcignQSBjb21wb25lbnQgaXMgY2hhbmdpbmcgYSBjb250cm9sbGVkIGlucHV0IHRvIGJlIHVuY29udHJvbGxlZC4gJyArICdUaGlzIGlzIGxpa2VseSBjYXVzZWQgYnkgdGhlIHZhbHVlIGNoYW5naW5nIGZyb20gYSBkZWZpbmVkIHRvICcgKyAndW5kZWZpbmVkLCB3aGljaCBzaG91bGQgbm90IGhhcHBlbi4gJyArICdEZWNpZGUgYmV0d2VlbiB1c2luZyBhIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkIGlucHV0ICcgKyAnZWxlbWVudCBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBjb21wb25lbnQuIE1vcmUgaW5mbzogaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2NvbnRyb2xsZWQtY29tcG9uZW50cycpO1xuXG4gICAgICBkaWRXYXJuQ29udHJvbGxlZFRvVW5jb250cm9sbGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVDaGVja2VkKGVsZW1lbnQsIHByb3BzKTtcbiAgdmFyIHZhbHVlID0gZ2V0VG9TdHJpbmdWYWx1ZShwcm9wcy52YWx1ZSk7XG4gIHZhciB0eXBlID0gcHJvcHMudHlwZTtcblxuICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgIGlmICh0eXBlID09PSAnbnVtYmVyJykge1xuICAgICAgaWYgKHZhbHVlID09PSAwICYmIG5vZGUudmFsdWUgPT09ICcnIHx8IC8vIFdlIGV4cGxpY2l0bHkgd2FudCB0byBjb2VyY2UgdG8gbnVtYmVyIGhlcmUgaWYgcG9zc2libGUuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgIG5vZGUudmFsdWUgIT0gdmFsdWUpIHtcbiAgICAgICAgbm9kZS52YWx1ZSA9IHRvU3RyaW5nKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG5vZGUudmFsdWUgIT09IHRvU3RyaW5nKHZhbHVlKSkge1xuICAgICAgbm9kZS52YWx1ZSA9IHRvU3RyaW5nKHZhbHVlKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3N1Ym1pdCcgfHwgdHlwZSA9PT0gJ3Jlc2V0Jykge1xuICAgIC8vIFN1Ym1pdC9yZXNldCBpbnB1dHMgbmVlZCB0aGUgYXR0cmlidXRlIHJlbW92ZWQgY29tcGxldGVseSB0byBhdm9pZFxuICAgIC8vIGJsYW5rLXRleHQgYnV0dG9ucy5cbiAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZSgndmFsdWUnKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB7XG4gICAgLy8gV2hlbiBzeW5jaW5nIHRoZSB2YWx1ZSBhdHRyaWJ1dGUsIHRoZSB2YWx1ZSBjb21lcyBmcm9tIGEgY2FzY2FkZSBvZlxuICAgIC8vIHByb3BlcnRpZXM6XG4gICAgLy8gIDEuIFRoZSB2YWx1ZSBSZWFjdCBwcm9wZXJ0eVxuICAgIC8vICAyLiBUaGUgZGVmYXVsdFZhbHVlIFJlYWN0IHByb3BlcnR5XG4gICAgLy8gIDMuIE90aGVyd2lzZSB0aGVyZSBzaG91bGQgYmUgbm8gY2hhbmdlXG4gICAgaWYgKHByb3BzLmhhc093blByb3BlcnR5KCd2YWx1ZScpKSB7XG4gICAgICBzZXREZWZhdWx0VmFsdWUobm9kZSwgcHJvcHMudHlwZSwgdmFsdWUpO1xuICAgIH0gZWxzZSBpZiAocHJvcHMuaGFzT3duUHJvcGVydHkoJ2RlZmF1bHRWYWx1ZScpKSB7XG4gICAgICBzZXREZWZhdWx0VmFsdWUobm9kZSwgcHJvcHMudHlwZSwgZ2V0VG9TdHJpbmdWYWx1ZShwcm9wcy5kZWZhdWx0VmFsdWUpKTtcbiAgICB9XG4gIH1cblxuICB7XG4gICAgLy8gV2hlbiBzeW5jaW5nIHRoZSBjaGVja2VkIGF0dHJpYnV0ZSwgaXQgb25seSBjaGFuZ2VzIHdoZW4gaXQgbmVlZHNcbiAgICAvLyB0byBiZSByZW1vdmVkLCBzdWNoIGFzIHRyYW5zaXRpb25pbmcgZnJvbSBhIGNoZWNrYm94IGludG8gYSB0ZXh0IGlucHV0XG4gICAgaWYgKHByb3BzLmNoZWNrZWQgPT0gbnVsbCAmJiBwcm9wcy5kZWZhdWx0Q2hlY2tlZCAhPSBudWxsKSB7XG4gICAgICBub2RlLmRlZmF1bHRDaGVja2VkID0gISFwcm9wcy5kZWZhdWx0Q2hlY2tlZDtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHBvc3RNb3VudFdyYXBwZXIoZWxlbWVudCwgcHJvcHMsIGlzSHlkcmF0aW5nKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDsgLy8gRG8gbm90IGFzc2lnbiB2YWx1ZSBpZiBpdCBpcyBhbHJlYWR5IHNldC4gVGhpcyBwcmV2ZW50cyB1c2VyIHRleHQgaW5wdXRcbiAgLy8gZnJvbSBiZWluZyBsb3N0IGR1cmluZyBTU1IgaHlkcmF0aW9uLlxuXG4gIGlmIChwcm9wcy5oYXNPd25Qcm9wZXJ0eSgndmFsdWUnKSB8fCBwcm9wcy5oYXNPd25Qcm9wZXJ0eSgnZGVmYXVsdFZhbHVlJykpIHtcbiAgICB2YXIgdHlwZSA9IHByb3BzLnR5cGU7XG4gICAgdmFyIGlzQnV0dG9uID0gdHlwZSA9PT0gJ3N1Ym1pdCcgfHwgdHlwZSA9PT0gJ3Jlc2V0JzsgLy8gQXZvaWQgc2V0dGluZyB2YWx1ZSBhdHRyaWJ1dGUgb24gc3VibWl0L3Jlc2V0IGlucHV0cyBhcyBpdCBvdmVycmlkZXMgdGhlXG4gICAgLy8gZGVmYXVsdCB2YWx1ZSBwcm92aWRlZCBieSB0aGUgYnJvd3Nlci4gU2VlOiAjMTI4NzJcblxuICAgIGlmIChpc0J1dHRvbiAmJiAocHJvcHMudmFsdWUgPT09IHVuZGVmaW5lZCB8fCBwcm9wcy52YWx1ZSA9PT0gbnVsbCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgaW5pdGlhbFZhbHVlID0gdG9TdHJpbmcobm9kZS5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZSk7IC8vIERvIG5vdCBhc3NpZ24gdmFsdWUgaWYgaXQgaXMgYWxyZWFkeSBzZXQuIFRoaXMgcHJldmVudHMgdXNlciB0ZXh0IGlucHV0XG4gICAgLy8gZnJvbSBiZWluZyBsb3N0IGR1cmluZyBTU1IgaHlkcmF0aW9uLlxuXG4gICAgaWYgKCFpc0h5ZHJhdGluZykge1xuICAgICAge1xuICAgICAgICAvLyBXaGVuIHN5bmNpbmcgdGhlIHZhbHVlIGF0dHJpYnV0ZSwgdGhlIHZhbHVlIHByb3BlcnR5IHNob3VsZCB1c2VcbiAgICAgICAgLy8gdGhlIHdyYXBwZXJTdGF0ZS5faW5pdGlhbFZhbHVlIHByb3BlcnR5LiBUaGlzIHVzZXM6XG4gICAgICAgIC8vXG4gICAgICAgIC8vICAgMS4gVGhlIHZhbHVlIFJlYWN0IHByb3BlcnR5IHdoZW4gcHJlc2VudFxuICAgICAgICAvLyAgIDIuIFRoZSBkZWZhdWx0VmFsdWUgUmVhY3QgcHJvcGVydHkgd2hlbiBwcmVzZW50XG4gICAgICAgIC8vICAgMy4gQW4gZW1wdHkgc3RyaW5nXG4gICAgICAgIGlmIChpbml0aWFsVmFsdWUgIT09IG5vZGUudmFsdWUpIHtcbiAgICAgICAgICBub2RlLnZhbHVlID0gaW5pdGlhbFZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAge1xuICAgICAgLy8gT3RoZXJ3aXNlLCB0aGUgdmFsdWUgYXR0cmlidXRlIGlzIHN5bmNocm9uaXplZCB0byB0aGUgcHJvcGVydHksXG4gICAgICAvLyBzbyB3ZSBhc3NpZ24gZGVmYXVsdFZhbHVlIHRvIHRoZSBzYW1lIHRoaW5nIGFzIHRoZSB2YWx1ZSBwcm9wZXJ0eVxuICAgICAgLy8gYXNzaWdubWVudCBzdGVwIGFib3ZlLlxuICAgICAgbm9kZS5kZWZhdWx0VmFsdWUgPSBpbml0aWFsVmFsdWU7XG4gICAgfVxuICB9IC8vIE5vcm1hbGx5LCB3ZSdkIGp1c3QgZG8gYG5vZGUuY2hlY2tlZCA9IG5vZGUuY2hlY2tlZGAgdXBvbiBpbml0aWFsIG1vdW50LCBsZXNzIHRoaXMgYnVnXG4gIC8vIHRoaXMgaXMgbmVlZGVkIHRvIHdvcmsgYXJvdW5kIGEgY2hyb21lIGJ1ZyB3aGVyZSBzZXR0aW5nIGRlZmF1bHRDaGVja2VkXG4gIC8vIHdpbGwgc29tZXRpbWVzIGluZmx1ZW5jZSB0aGUgdmFsdWUgb2YgY2hlY2tlZCAoZXZlbiBhZnRlciBkZXRhY2htZW50KS5cbiAgLy8gUmVmZXJlbmNlOiBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD02MDg0MTZcbiAgLy8gV2UgbmVlZCB0byB0ZW1wb3JhcmlseSB1bnNldCBuYW1lIHRvIGF2b2lkIGRpc3J1cHRpbmcgcmFkaW8gYnV0dG9uIGdyb3Vwcy5cblxuXG4gIHZhciBuYW1lID0gbm9kZS5uYW1lO1xuXG4gIGlmIChuYW1lICE9PSAnJykge1xuICAgIG5vZGUubmFtZSA9ICcnO1xuICB9XG5cbiAge1xuICAgIC8vIFdoZW4gc3luY2luZyB0aGUgY2hlY2tlZCBhdHRyaWJ1dGUsIGJvdGggdGhlIGNoZWNrZWQgcHJvcGVydHkgYW5kXG4gICAgLy8gYXR0cmlidXRlIGFyZSBhc3NpZ25lZCBhdCB0aGUgc2FtZSB0aW1lIHVzaW5nIGRlZmF1bHRDaGVja2VkLiBUaGlzIHVzZXM6XG4gICAgLy9cbiAgICAvLyAgIDEuIFRoZSBjaGVja2VkIFJlYWN0IHByb3BlcnR5IHdoZW4gcHJlc2VudFxuICAgIC8vICAgMi4gVGhlIGRlZmF1bHRDaGVja2VkIFJlYWN0IHByb3BlcnR5IHdoZW4gcHJlc2VudFxuICAgIC8vICAgMy4gT3RoZXJ3aXNlLCBmYWxzZVxuICAgIG5vZGUuZGVmYXVsdENoZWNrZWQgPSAhbm9kZS5kZWZhdWx0Q2hlY2tlZDtcbiAgICBub2RlLmRlZmF1bHRDaGVja2VkID0gISFub2RlLl93cmFwcGVyU3RhdGUuaW5pdGlhbENoZWNrZWQ7XG4gIH1cblxuICBpZiAobmFtZSAhPT0gJycpIHtcbiAgICBub2RlLm5hbWUgPSBuYW1lO1xuICB9XG59XG5mdW5jdGlvbiByZXN0b3JlQ29udHJvbGxlZFN0YXRlKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcbiAgdXBkYXRlV3JhcHBlcihub2RlLCBwcm9wcyk7XG4gIHVwZGF0ZU5hbWVkQ291c2lucyhub2RlLCBwcm9wcyk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZU5hbWVkQ291c2lucyhyb290Tm9kZSwgcHJvcHMpIHtcbiAgdmFyIG5hbWUgPSBwcm9wcy5uYW1lO1xuXG4gIGlmIChwcm9wcy50eXBlID09PSAncmFkaW8nICYmIG5hbWUgIT0gbnVsbCkge1xuICAgIHZhciBxdWVyeVJvb3QgPSByb290Tm9kZTtcblxuICAgIHdoaWxlIChxdWVyeVJvb3QucGFyZW50Tm9kZSkge1xuICAgICAgcXVlcnlSb290ID0gcXVlcnlSb290LnBhcmVudE5vZGU7XG4gICAgfSAvLyBJZiBgcm9vdE5vZGUuZm9ybWAgd2FzIG5vbi1udWxsLCB0aGVuIHdlIGNvdWxkIHRyeSBgZm9ybS5lbGVtZW50c2AsXG4gICAgLy8gYnV0IHRoYXQgc29tZXRpbWVzIGJlaGF2ZXMgc3RyYW5nZWx5IGluIElFOC4gV2UgY291bGQgYWxzbyB0cnkgdXNpbmdcbiAgICAvLyBgZm9ybS5nZXRFbGVtZW50c0J5TmFtZWAsIGJ1dCB0aGF0IHdpbGwgb25seSByZXR1cm4gZGlyZWN0IGNoaWxkcmVuXG4gICAgLy8gYW5kIHdvbid0IGluY2x1ZGUgaW5wdXRzIHRoYXQgdXNlIHRoZSBIVE1MNSBgZm9ybT1gIGF0dHJpYnV0ZS4gU2luY2VcbiAgICAvLyB0aGUgaW5wdXQgbWlnaHQgbm90IGV2ZW4gYmUgaW4gYSBmb3JtLiBJdCBtaWdodCBub3QgZXZlbiBiZSBpbiB0aGVcbiAgICAvLyBkb2N1bWVudC4gTGV0J3MganVzdCB1c2UgdGhlIGxvY2FsIGBxdWVyeVNlbGVjdG9yQWxsYCB0byBlbnN1cmUgd2UgZG9uJ3RcbiAgICAvLyBtaXNzIGFueXRoaW5nLlxuXG5cbiAgICB2YXIgZ3JvdXAgPSBxdWVyeVJvb3QucXVlcnlTZWxlY3RvckFsbCgnaW5wdXRbbmFtZT0nICsgSlNPTi5zdHJpbmdpZnkoJycgKyBuYW1lKSArICddW3R5cGU9XCJyYWRpb1wiXScpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBncm91cC5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIG90aGVyTm9kZSA9IGdyb3VwW2ldO1xuXG4gICAgICBpZiAob3RoZXJOb2RlID09PSByb290Tm9kZSB8fCBvdGhlck5vZGUuZm9ybSAhPT0gcm9vdE5vZGUuZm9ybSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gLy8gVGhpcyB3aWxsIHRocm93IGlmIHJhZGlvIGJ1dHRvbnMgcmVuZGVyZWQgYnkgZGlmZmVyZW50IGNvcGllcyBvZiBSZWFjdFxuICAgICAgLy8gYW5kIHRoZSBzYW1lIG5hbWUgYXJlIHJlbmRlcmVkIGludG8gdGhlIHNhbWUgZm9ybSAoc2FtZSBhcyAjMTkzOSkuXG4gICAgICAvLyBUaGF0J3MgcHJvYmFibHkgb2theTsgd2UgZG9uJ3Qgc3VwcG9ydCBpdCBqdXN0IGFzIHdlIGRvbid0IHN1cHBvcnRcbiAgICAgIC8vIG1peGluZyBSZWFjdCByYWRpbyBidXR0b25zIHdpdGggbm9uLVJlYWN0IG9uZXMuXG5cblxuICAgICAgdmFyIG90aGVyUHJvcHMgPSBnZXRGaWJlckN1cnJlbnRQcm9wc0Zyb21Ob2RlKG90aGVyTm9kZSk7XG5cbiAgICAgIGlmICghb3RoZXJQcm9wcykge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiUmVhY3RET01JbnB1dDogTWl4aW5nIFJlYWN0IGFuZCBub24tUmVhY3QgcmFkaW8gaW5wdXRzIHdpdGggdGhlIHNhbWUgYG5hbWVgIGlzIG5vdCBzdXBwb3J0ZWQuXCIgKTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBXZSBuZWVkIHVwZGF0ZSB0aGUgdHJhY2tlZCB2YWx1ZSBvbiB0aGUgbmFtZWQgY291c2luIHNpbmNlIHRoZSB2YWx1ZVxuICAgICAgLy8gd2FzIGNoYW5nZWQgYnV0IHRoZSBpbnB1dCBzYXcgbm8gZXZlbnQgb3IgdmFsdWUgc2V0XG5cblxuICAgICAgdXBkYXRlVmFsdWVJZkNoYW5nZWQob3RoZXJOb2RlKTsgLy8gSWYgdGhpcyBpcyBhIGNvbnRyb2xsZWQgcmFkaW8gYnV0dG9uIGdyb3VwLCBmb3JjaW5nIHRoZSBpbnB1dCB0aGF0XG4gICAgICAvLyB3YXMgcHJldmlvdXNseSBjaGVja2VkIHRvIHVwZGF0ZSB3aWxsIGNhdXNlIGl0IHRvIGJlIGNvbWUgcmUtY2hlY2tlZFxuICAgICAgLy8gYXMgYXBwcm9wcmlhdGUuXG5cbiAgICAgIHVwZGF0ZVdyYXBwZXIob3RoZXJOb2RlLCBvdGhlclByb3BzKTtcbiAgICB9XG4gIH1cbn0gLy8gSW4gQ2hyb21lLCBhc3NpZ25pbmcgZGVmYXVsdFZhbHVlIHRvIGNlcnRhaW4gaW5wdXQgdHlwZXMgdHJpZ2dlcnMgaW5wdXQgdmFsaWRhdGlvbi5cbi8vIEZvciBudW1iZXIgaW5wdXRzLCB0aGUgZGlzcGxheSB2YWx1ZSBsb3NlcyB0cmFpbGluZyBkZWNpbWFsIHBvaW50cy4gRm9yIGVtYWlsIGlucHV0cyxcbi8vIENocm9tZSByYWlzZXMgXCJUaGUgc3BlY2lmaWVkIHZhbHVlIDx4PiBpcyBub3QgYSB2YWxpZCBlbWFpbCBhZGRyZXNzXCIuXG4vL1xuLy8gSGVyZSB3ZSBjaGVjayB0byBzZWUgaWYgdGhlIGRlZmF1bHRWYWx1ZSBoYXMgYWN0dWFsbHkgY2hhbmdlZCwgYXZvaWRpbmcgdGhlc2UgcHJvYmxlbXNcbi8vIHdoZW4gdGhlIHVzZXIgaXMgaW5wdXR0aW5nIHRleHRcbi8vXG4vLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzcyNTNcblxuXG5mdW5jdGlvbiBzZXREZWZhdWx0VmFsdWUobm9kZSwgdHlwZSwgdmFsdWUpIHtcbiAgaWYgKCAvLyBGb2N1c2VkIG51bWJlciBpbnB1dHMgc3luY2hyb25pemUgb24gYmx1ci4gU2VlIENoYW5nZUV2ZW50UGx1Z2luLmpzXG4gIHR5cGUgIT09ICdudW1iZXInIHx8IGdldEFjdGl2ZUVsZW1lbnQobm9kZS5vd25lckRvY3VtZW50KSAhPT0gbm9kZSkge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICBub2RlLmRlZmF1bHRWYWx1ZSA9IHRvU3RyaW5nKG5vZGUuX3dyYXBwZXJTdGF0ZS5pbml0aWFsVmFsdWUpO1xuICAgIH0gZWxzZSBpZiAobm9kZS5kZWZhdWx0VmFsdWUgIT09IHRvU3RyaW5nKHZhbHVlKSkge1xuICAgICAgbm9kZS5kZWZhdWx0VmFsdWUgPSB0b1N0cmluZyh2YWx1ZSk7XG4gICAgfVxuICB9XG59XG5cbnZhciBkaWRXYXJuU2VsZWN0ZWRTZXRPbk9wdGlvbiA9IGZhbHNlO1xudmFyIGRpZFdhcm5JbnZhbGlkQ2hpbGQgPSBmYWxzZTtcblxuZnVuY3Rpb24gZmxhdHRlbkNoaWxkcmVuKGNoaWxkcmVuKSB7XG4gIHZhciBjb250ZW50ID0gJyc7IC8vIEZsYXR0ZW4gY2hpbGRyZW4uIFdlJ2xsIHdhcm4gaWYgdGhleSBhcmUgaW52YWxpZFxuICAvLyBkdXJpbmcgdmFsaWRhdGVQcm9wcygpIHdoaWNoIHJ1bnMgZm9yIGh5ZHJhdGlvbiB0b28uXG4gIC8vIE5vdGUgdGhhdCB0aGlzIHdvdWxkIHRocm93IG9uIG5vbi1lbGVtZW50IG9iamVjdHMuXG4gIC8vIEVsZW1lbnRzIGFyZSBzdHJpbmdpZmllZCAod2hpY2ggaXMgbm9ybWFsbHkgaXJyZWxldmFudFxuICAvLyBidXQgbWF0dGVycyBmb3IgPGZidD4pLlxuXG4gIFJlYWN0LkNoaWxkcmVuLmZvckVhY2goY2hpbGRyZW4sIGZ1bmN0aW9uIChjaGlsZCkge1xuICAgIGlmIChjaGlsZCA9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29udGVudCArPSBjaGlsZDsgLy8gTm90ZTogd2UgZG9uJ3Qgd2FybiBhYm91dCBpbnZhbGlkIGNoaWxkcmVuIGhlcmUuXG4gICAgLy8gSW5zdGVhZCwgdGhpcyBpcyBkb25lIHNlcGFyYXRlbHkgYmVsb3cgc28gdGhhdFxuICAgIC8vIGl0IGhhcHBlbnMgZHVyaW5nIHRoZSBoeWRyYXRpb24gY29kZSBwYXRoIHRvby5cbiAgfSk7XG4gIHJldHVybiBjb250ZW50O1xufVxuLyoqXG4gKiBJbXBsZW1lbnRzIGFuIDxvcHRpb24+IGhvc3QgY29tcG9uZW50IHRoYXQgd2FybnMgd2hlbiBgc2VsZWN0ZWRgIGlzIHNldC5cbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlUHJvcHMoZWxlbWVudCwgcHJvcHMpIHtcbiAge1xuICAgIC8vIFRoaXMgbWlycm9ycyB0aGUgY29kZSBwYXRoIGFib3ZlLCBidXQgcnVucyBmb3IgaHlkcmF0aW9uIHRvby5cbiAgICAvLyBXYXJuIGFib3V0IGludmFsaWQgY2hpbGRyZW4gaGVyZSBzbyB0aGF0IGNsaWVudCBhbmQgaHlkcmF0aW9uIGFyZSBjb25zaXN0ZW50LlxuICAgIC8vIFRPRE86IHRoaXMgc2VlbXMgbGlrZSBpdCBjb3VsZCBjYXVzZSBhIERFVi1vbmx5IHRocm93IGZvciBoeWRyYXRpb25cbiAgICAvLyBpZiBjaGlsZHJlbiBjb250YWlucyBhIG5vbi1lbGVtZW50IG9iamVjdC4gV2Ugc2hvdWxkIHRyeSB0byBhdm9pZCB0aGF0LlxuICAgIGlmICh0eXBlb2YgcHJvcHMuY2hpbGRyZW4gPT09ICdvYmplY3QnICYmIHByb3BzLmNoaWxkcmVuICE9PSBudWxsKSB7XG4gICAgICBSZWFjdC5DaGlsZHJlbi5mb3JFYWNoKHByb3BzLmNoaWxkcmVuLCBmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgICAgaWYgKGNoaWxkID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGNoaWxkID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgY2hpbGQgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBjaGlsZC50eXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZGlkV2FybkludmFsaWRDaGlsZCkge1xuICAgICAgICAgIGRpZFdhcm5JbnZhbGlkQ2hpbGQgPSB0cnVlO1xuXG4gICAgICAgICAgZXJyb3IoJ09ubHkgc3RyaW5ncyBhbmQgbnVtYmVycyBhcmUgc3VwcG9ydGVkIGFzIDxvcHRpb24+IGNoaWxkcmVuLicpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IC8vIFRPRE86IFJlbW92ZSBzdXBwb3J0IGZvciBgc2VsZWN0ZWRgIGluIDxvcHRpb24+LlxuXG5cbiAgICBpZiAocHJvcHMuc2VsZWN0ZWQgIT0gbnVsbCAmJiAhZGlkV2FyblNlbGVjdGVkU2V0T25PcHRpb24pIHtcbiAgICAgIGVycm9yKCdVc2UgdGhlIGBkZWZhdWx0VmFsdWVgIG9yIGB2YWx1ZWAgcHJvcHMgb24gPHNlbGVjdD4gaW5zdGVhZCBvZiAnICsgJ3NldHRpbmcgYHNlbGVjdGVkYCBvbiA8b3B0aW9uPi4nKTtcblxuICAgICAgZGlkV2FyblNlbGVjdGVkU2V0T25PcHRpb24gPSB0cnVlO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gcG9zdE1vdW50V3JhcHBlciQxKGVsZW1lbnQsIHByb3BzKSB7XG4gIC8vIHZhbHVlPVwiXCIgc2hvdWxkIG1ha2UgYSB2YWx1ZSBhdHRyaWJ1dGUgKCM2MjE5KVxuICBpZiAocHJvcHMudmFsdWUgIT0gbnVsbCkge1xuICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCd2YWx1ZScsIHRvU3RyaW5nKGdldFRvU3RyaW5nVmFsdWUocHJvcHMudmFsdWUpKSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGdldEhvc3RQcm9wcyQxKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBob3N0UHJvcHMgPSBfYXNzaWduKHtcbiAgICBjaGlsZHJlbjogdW5kZWZpbmVkXG4gIH0sIHByb3BzKTtcblxuICB2YXIgY29udGVudCA9IGZsYXR0ZW5DaGlsZHJlbihwcm9wcy5jaGlsZHJlbik7XG5cbiAgaWYgKGNvbnRlbnQpIHtcbiAgICBob3N0UHJvcHMuY2hpbGRyZW4gPSBjb250ZW50O1xuICB9XG5cbiAgcmV0dXJuIGhvc3RQcm9wcztcbn1cblxudmFyIGRpZFdhcm5WYWx1ZURlZmF1bHRWYWx1ZSQxO1xuXG57XG4gIGRpZFdhcm5WYWx1ZURlZmF1bHRWYWx1ZSQxID0gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpIHtcbiAgdmFyIG93bmVyTmFtZSA9IGdldEN1cnJlbnRGaWJlck93bmVyTmFtZUluRGV2T3JOdWxsKCk7XG5cbiAgaWYgKG93bmVyTmFtZSkge1xuICAgIHJldHVybiAnXFxuXFxuQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgYCcgKyBvd25lck5hbWUgKyAnYC4nO1xuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG52YXIgdmFsdWVQcm9wTmFtZXMgPSBbJ3ZhbHVlJywgJ2RlZmF1bHRWYWx1ZSddO1xuLyoqXG4gKiBWYWxpZGF0aW9uIGZ1bmN0aW9uIGZvciBgdmFsdWVgIGFuZCBgZGVmYXVsdFZhbHVlYC5cbiAqL1xuXG5mdW5jdGlvbiBjaGVja1NlbGVjdFByb3BUeXBlcyhwcm9wcykge1xuICB7XG4gICAgY2hlY2tDb250cm9sbGVkVmFsdWVQcm9wcygnc2VsZWN0JywgcHJvcHMpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZVByb3BOYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHByb3BOYW1lID0gdmFsdWVQcm9wTmFtZXNbaV07XG5cbiAgICAgIGlmIChwcm9wc1twcm9wTmFtZV0gPT0gbnVsbCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5KHByb3BzW3Byb3BOYW1lXSk7XG5cbiAgICAgIGlmIChwcm9wcy5tdWx0aXBsZSAmJiAhaXNBcnJheSkge1xuICAgICAgICBlcnJvcignVGhlIGAlc2AgcHJvcCBzdXBwbGllZCB0byA8c2VsZWN0PiBtdXN0IGJlIGFuIGFycmF5IGlmICcgKyAnYG11bHRpcGxlYCBpcyB0cnVlLiVzJywgcHJvcE5hbWUsIGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpKTtcbiAgICAgIH0gZWxzZSBpZiAoIXByb3BzLm11bHRpcGxlICYmIGlzQXJyYXkpIHtcbiAgICAgICAgZXJyb3IoJ1RoZSBgJXNgIHByb3Agc3VwcGxpZWQgdG8gPHNlbGVjdD4gbXVzdCBiZSBhIHNjYWxhciAnICsgJ3ZhbHVlIGlmIGBtdWx0aXBsZWAgaXMgZmFsc2UuJXMnLCBwcm9wTmFtZSwgZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB1cGRhdGVPcHRpb25zKG5vZGUsIG11bHRpcGxlLCBwcm9wVmFsdWUsIHNldERlZmF1bHRTZWxlY3RlZCkge1xuICB2YXIgb3B0aW9ucyA9IG5vZGUub3B0aW9ucztcblxuICBpZiAobXVsdGlwbGUpIHtcbiAgICB2YXIgc2VsZWN0ZWRWYWx1ZXMgPSBwcm9wVmFsdWU7XG4gICAgdmFyIHNlbGVjdGVkVmFsdWUgPSB7fTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VsZWN0ZWRWYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIC8vIFByZWZpeCB0byBhdm9pZCBjaGFvcyB3aXRoIHNwZWNpYWwga2V5cy5cbiAgICAgIHNlbGVjdGVkVmFsdWVbJyQnICsgc2VsZWN0ZWRWYWx1ZXNbaV1dID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgb3B0aW9ucy5sZW5ndGg7IF9pKyspIHtcbiAgICAgIHZhciBzZWxlY3RlZCA9IHNlbGVjdGVkVmFsdWUuaGFzT3duUHJvcGVydHkoJyQnICsgb3B0aW9uc1tfaV0udmFsdWUpO1xuXG4gICAgICBpZiAob3B0aW9uc1tfaV0uc2VsZWN0ZWQgIT09IHNlbGVjdGVkKSB7XG4gICAgICAgIG9wdGlvbnNbX2ldLnNlbGVjdGVkID0gc2VsZWN0ZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChzZWxlY3RlZCAmJiBzZXREZWZhdWx0U2VsZWN0ZWQpIHtcbiAgICAgICAgb3B0aW9uc1tfaV0uZGVmYXVsdFNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gRG8gbm90IHNldCBgc2VsZWN0LnZhbHVlYCBhcyBleGFjdCBiZWhhdmlvciBpc24ndCBjb25zaXN0ZW50IGFjcm9zcyBhbGxcbiAgICAvLyBicm93c2VycyBmb3IgYWxsIGNhc2VzLlxuICAgIHZhciBfc2VsZWN0ZWRWYWx1ZSA9IHRvU3RyaW5nKGdldFRvU3RyaW5nVmFsdWUocHJvcFZhbHVlKSk7XG5cbiAgICB2YXIgZGVmYXVsdFNlbGVjdGVkID0gbnVsbDtcblxuICAgIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IG9wdGlvbnMubGVuZ3RoOyBfaTIrKykge1xuICAgICAgaWYgKG9wdGlvbnNbX2kyXS52YWx1ZSA9PT0gX3NlbGVjdGVkVmFsdWUpIHtcbiAgICAgICAgb3B0aW9uc1tfaTJdLnNlbGVjdGVkID0gdHJ1ZTtcblxuICAgICAgICBpZiAoc2V0RGVmYXVsdFNlbGVjdGVkKSB7XG4gICAgICAgICAgb3B0aW9uc1tfaTJdLmRlZmF1bHRTZWxlY3RlZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChkZWZhdWx0U2VsZWN0ZWQgPT09IG51bGwgJiYgIW9wdGlvbnNbX2kyXS5kaXNhYmxlZCkge1xuICAgICAgICBkZWZhdWx0U2VsZWN0ZWQgPSBvcHRpb25zW19pMl07XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRlZmF1bHRTZWxlY3RlZCAhPT0gbnVsbCkge1xuICAgICAgZGVmYXVsdFNlbGVjdGVkLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cbi8qKlxuICogSW1wbGVtZW50cyBhIDxzZWxlY3Q+IGhvc3QgY29tcG9uZW50IHRoYXQgYWxsb3dzIG9wdGlvbmFsbHkgc2V0dGluZyB0aGVcbiAqIHByb3BzIGB2YWx1ZWAgYW5kIGBkZWZhdWx0VmFsdWVgLiBJZiBgbXVsdGlwbGVgIGlzIGZhbHNlLCB0aGUgcHJvcCBtdXN0IGJlIGFcbiAqIHN0cmluZ2FibGUuIElmIGBtdWx0aXBsZWAgaXMgdHJ1ZSwgdGhlIHByb3AgbXVzdCBiZSBhbiBhcnJheSBvZiBzdHJpbmdhYmxlcy5cbiAqXG4gKiBJZiBgdmFsdWVgIGlzIG5vdCBzdXBwbGllZCAob3IgbnVsbC91bmRlZmluZWQpLCB1c2VyIGFjdGlvbnMgdGhhdCBjaGFuZ2UgdGhlXG4gKiBzZWxlY3RlZCBvcHRpb24gd2lsbCB0cmlnZ2VyIHVwZGF0ZXMgdG8gdGhlIHJlbmRlcmVkIG9wdGlvbnMuXG4gKlxuICogSWYgaXQgaXMgc3VwcGxpZWQgKGFuZCBub3QgbnVsbC91bmRlZmluZWQpLCB0aGUgcmVuZGVyZWQgb3B0aW9ucyB3aWxsIG5vdFxuICogdXBkYXRlIGluIHJlc3BvbnNlIHRvIHVzZXIgYWN0aW9ucy4gSW5zdGVhZCwgdGhlIGB2YWx1ZWAgcHJvcCBtdXN0IGNoYW5nZSBpblxuICogb3JkZXIgZm9yIHRoZSByZW5kZXJlZCBvcHRpb25zIHRvIHVwZGF0ZS5cbiAqXG4gKiBJZiBgZGVmYXVsdFZhbHVlYCBpcyBwcm92aWRlZCwgYW55IG9wdGlvbnMgd2l0aCB0aGUgc3VwcGxpZWQgdmFsdWVzIHdpbGwgYmVcbiAqIHNlbGVjdGVkLlxuICovXG5cblxuZnVuY3Rpb24gZ2V0SG9zdFByb3BzJDIoZWxlbWVudCwgcHJvcHMpIHtcbiAgcmV0dXJuIF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgdmFsdWU6IHVuZGVmaW5lZFxuICB9KTtcbn1cbmZ1bmN0aW9uIGluaXRXcmFwcGVyU3RhdGUkMShlbGVtZW50LCBwcm9wcykge1xuICB2YXIgbm9kZSA9IGVsZW1lbnQ7XG5cbiAge1xuICAgIGNoZWNrU2VsZWN0UHJvcFR5cGVzKHByb3BzKTtcbiAgfVxuXG4gIG5vZGUuX3dyYXBwZXJTdGF0ZSA9IHtcbiAgICB3YXNNdWx0aXBsZTogISFwcm9wcy5tdWx0aXBsZVxuICB9O1xuXG4gIHtcbiAgICBpZiAocHJvcHMudmFsdWUgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCAmJiAhZGlkV2FyblZhbHVlRGVmYXVsdFZhbHVlJDEpIHtcbiAgICAgIGVycm9yKCdTZWxlY3QgZWxlbWVudHMgbXVzdCBiZSBlaXRoZXIgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgJyArICcoc3BlY2lmeSBlaXRoZXIgdGhlIHZhbHVlIHByb3AsIG9yIHRoZSBkZWZhdWx0VmFsdWUgcHJvcCwgYnV0IG5vdCAnICsgJ2JvdGgpLiBEZWNpZGUgYmV0d2VlbiB1c2luZyBhIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkIHNlbGVjdCAnICsgJ2VsZW1lbnQgYW5kIHJlbW92ZSBvbmUgb2YgdGhlc2UgcHJvcHMuIE1vcmUgaW5mbzogJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvY29udHJvbGxlZC1jb21wb25lbnRzJyk7XG5cbiAgICAgIGRpZFdhcm5WYWx1ZURlZmF1bHRWYWx1ZSQxID0gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHBvc3RNb3VudFdyYXBwZXIkMihlbGVtZW50LCBwcm9wcykge1xuICB2YXIgbm9kZSA9IGVsZW1lbnQ7XG4gIG5vZGUubXVsdGlwbGUgPSAhIXByb3BzLm11bHRpcGxlO1xuICB2YXIgdmFsdWUgPSBwcm9wcy52YWx1ZTtcblxuICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgIHVwZGF0ZU9wdGlvbnMobm9kZSwgISFwcm9wcy5tdWx0aXBsZSwgdmFsdWUsIGZhbHNlKTtcbiAgfSBlbHNlIGlmIChwcm9wcy5kZWZhdWx0VmFsdWUgIT0gbnVsbCkge1xuICAgIHVwZGF0ZU9wdGlvbnMobm9kZSwgISFwcm9wcy5tdWx0aXBsZSwgcHJvcHMuZGVmYXVsdFZhbHVlLCB0cnVlKTtcbiAgfVxufVxuZnVuY3Rpb24gcG9zdFVwZGF0ZVdyYXBwZXIoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50O1xuICB2YXIgd2FzTXVsdGlwbGUgPSBub2RlLl93cmFwcGVyU3RhdGUud2FzTXVsdGlwbGU7XG4gIG5vZGUuX3dyYXBwZXJTdGF0ZS53YXNNdWx0aXBsZSA9ICEhcHJvcHMubXVsdGlwbGU7XG4gIHZhciB2YWx1ZSA9IHByb3BzLnZhbHVlO1xuXG4gIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgdXBkYXRlT3B0aW9ucyhub2RlLCAhIXByb3BzLm11bHRpcGxlLCB2YWx1ZSwgZmFsc2UpO1xuICB9IGVsc2UgaWYgKHdhc011bHRpcGxlICE9PSAhIXByb3BzLm11bHRpcGxlKSB7XG4gICAgLy8gRm9yIHNpbXBsaWNpdHksIHJlYXBwbHkgYGRlZmF1bHRWYWx1ZWAgaWYgYG11bHRpcGxlYCBpcyB0b2dnbGVkLlxuICAgIGlmIChwcm9wcy5kZWZhdWx0VmFsdWUgIT0gbnVsbCkge1xuICAgICAgdXBkYXRlT3B0aW9ucyhub2RlLCAhIXByb3BzLm11bHRpcGxlLCBwcm9wcy5kZWZhdWx0VmFsdWUsIHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZXZlcnQgdGhlIHNlbGVjdCBiYWNrIHRvIGl0cyBkZWZhdWx0IHVuc2VsZWN0ZWQgc3RhdGUuXG4gICAgICB1cGRhdGVPcHRpb25zKG5vZGUsICEhcHJvcHMubXVsdGlwbGUsIHByb3BzLm11bHRpcGxlID8gW10gOiAnJywgZmFsc2UpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gcmVzdG9yZUNvbnRyb2xsZWRTdGF0ZSQxKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcbiAgdmFyIHZhbHVlID0gcHJvcHMudmFsdWU7XG5cbiAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICB1cGRhdGVPcHRpb25zKG5vZGUsICEhcHJvcHMubXVsdGlwbGUsIHZhbHVlLCBmYWxzZSk7XG4gIH1cbn1cblxudmFyIGRpZFdhcm5WYWxEZWZhdWx0VmFsID0gZmFsc2U7XG5cbi8qKlxuICogSW1wbGVtZW50cyBhIDx0ZXh0YXJlYT4gaG9zdCBjb21wb25lbnQgdGhhdCBhbGxvd3Mgc2V0dGluZyBgdmFsdWVgLCBhbmRcbiAqIGBkZWZhdWx0VmFsdWVgLiBUaGlzIGRpZmZlcnMgZnJvbSB0aGUgdHJhZGl0aW9uYWwgRE9NIEFQSSBiZWNhdXNlIHZhbHVlIGlzXG4gKiB1c3VhbGx5IHNldCBhcyBQQ0RBVEEgY2hpbGRyZW4uXG4gKlxuICogSWYgYHZhbHVlYCBpcyBub3Qgc3VwcGxpZWQgKG9yIG51bGwvdW5kZWZpbmVkKSwgdXNlciBhY3Rpb25zIHRoYXQgYWZmZWN0IHRoZVxuICogdmFsdWUgd2lsbCB0cmlnZ2VyIHVwZGF0ZXMgdG8gdGhlIGVsZW1lbnQuXG4gKlxuICogSWYgYHZhbHVlYCBpcyBzdXBwbGllZCAoYW5kIG5vdCBudWxsL3VuZGVmaW5lZCksIHRoZSByZW5kZXJlZCBlbGVtZW50IHdpbGxcbiAqIG5vdCB0cmlnZ2VyIHVwZGF0ZXMgdG8gdGhlIGVsZW1lbnQuIEluc3RlYWQsIHRoZSBgdmFsdWVgIHByb3AgbXVzdCBjaGFuZ2UgaW5cbiAqIG9yZGVyIGZvciB0aGUgcmVuZGVyZWQgZWxlbWVudCB0byBiZSB1cGRhdGVkLlxuICpcbiAqIFRoZSByZW5kZXJlZCBlbGVtZW50IHdpbGwgYmUgaW5pdGlhbGl6ZWQgd2l0aCBhbiBlbXB0eSB2YWx1ZSwgdGhlIHByb3BcbiAqIGBkZWZhdWx0VmFsdWVgIGlmIHNwZWNpZmllZCwgb3IgdGhlIGNoaWxkcmVuIGNvbnRlbnQgKGRlcHJlY2F0ZWQpLlxuICovXG5mdW5jdGlvbiBnZXRIb3N0UHJvcHMkMyhlbGVtZW50LCBwcm9wcykge1xuICB2YXIgbm9kZSA9IGVsZW1lbnQ7XG5cbiAgaWYgKCEocHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgPT0gbnVsbCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgIGRvZXMgbm90IG1ha2Ugc2Vuc2Ugb24gPHRleHRhcmVhPi5cIiApO1xuICAgIH1cbiAgfSAvLyBBbHdheXMgc2V0IGNoaWxkcmVuIHRvIHRoZSBzYW1lIHRoaW5nLiBJbiBJRTksIHRoZSBzZWxlY3Rpb24gcmFuZ2Ugd2lsbFxuICAvLyBnZXQgcmVzZXQgaWYgYHRleHRDb250ZW50YCBpcyBtdXRhdGVkLiAgV2UgY291bGQgYWRkIGEgY2hlY2sgaW4gc2V0VGV4dENvbnRlbnRcbiAgLy8gdG8gb25seSBzZXQgdGhlIHZhbHVlIGlmL3doZW4gdGhlIHZhbHVlIGRpZmZlcnMgZnJvbSB0aGUgbm9kZSB2YWx1ZSAod2hpY2ggd291bGRcbiAgLy8gY29tcGxldGVseSBzb2x2ZSB0aGlzIElFOSBidWcpLCBidXQgU2ViYXN0aWFuK1NvcGhpZSBzZWVtZWQgdG8gbGlrZSB0aGlzXG4gIC8vIHNvbHV0aW9uLiBUaGUgdmFsdWUgY2FuIGJlIGEgYm9vbGVhbiBvciBvYmplY3Qgc28gdGhhdCdzIHdoeSBpdCdzIGZvcmNlZFxuICAvLyB0byBiZSBhIHN0cmluZy5cblxuXG4gIHZhciBob3N0UHJvcHMgPSBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgZGVmYXVsdFZhbHVlOiB1bmRlZmluZWQsXG4gICAgY2hpbGRyZW46IHRvU3RyaW5nKG5vZGUuX3dyYXBwZXJTdGF0ZS5pbml0aWFsVmFsdWUpXG4gIH0pO1xuXG4gIHJldHVybiBob3N0UHJvcHM7XG59XG5mdW5jdGlvbiBpbml0V3JhcHBlclN0YXRlJDIoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50O1xuXG4gIHtcbiAgICBjaGVja0NvbnRyb2xsZWRWYWx1ZVByb3BzKCd0ZXh0YXJlYScsIHByb3BzKTtcblxuICAgIGlmIChwcm9wcy52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkICYmICFkaWRXYXJuVmFsRGVmYXVsdFZhbCkge1xuICAgICAgZXJyb3IoJyVzIGNvbnRhaW5zIGEgdGV4dGFyZWEgd2l0aCBib3RoIHZhbHVlIGFuZCBkZWZhdWx0VmFsdWUgcHJvcHMuICcgKyAnVGV4dGFyZWEgZWxlbWVudHMgbXVzdCBiZSBlaXRoZXIgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgJyArICcoc3BlY2lmeSBlaXRoZXIgdGhlIHZhbHVlIHByb3AsIG9yIHRoZSBkZWZhdWx0VmFsdWUgcHJvcCwgYnV0IG5vdCAnICsgJ2JvdGgpLiBEZWNpZGUgYmV0d2VlbiB1c2luZyBhIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkIHRleHRhcmVhICcgKyAnYW5kIHJlbW92ZSBvbmUgb2YgdGhlc2UgcHJvcHMuIE1vcmUgaW5mbzogJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvY29udHJvbGxlZC1jb21wb25lbnRzJywgZ2V0Q3VycmVudEZpYmVyT3duZXJOYW1lSW5EZXZPck51bGwoKSB8fCAnQSBjb21wb25lbnQnKTtcblxuICAgICAgZGlkV2FyblZhbERlZmF1bHRWYWwgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHZhciBpbml0aWFsVmFsdWUgPSBwcm9wcy52YWx1ZTsgLy8gT25seSBib3RoZXIgZmV0Y2hpbmcgZGVmYXVsdCB2YWx1ZSBpZiB3ZSdyZSBnb2luZyB0byB1c2UgaXRcblxuICBpZiAoaW5pdGlhbFZhbHVlID09IG51bGwpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbixcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gcHJvcHMuZGVmYXVsdFZhbHVlO1xuXG4gICAgaWYgKGNoaWxkcmVuICE9IG51bGwpIHtcbiAgICAgIHtcbiAgICAgICAgZXJyb3IoJ1VzZSB0aGUgYGRlZmF1bHRWYWx1ZWAgb3IgYHZhbHVlYCBwcm9wcyBpbnN0ZWFkIG9mIHNldHRpbmcgJyArICdjaGlsZHJlbiBvbiA8dGV4dGFyZWE+LicpO1xuICAgICAgfVxuXG4gICAgICB7XG4gICAgICAgIGlmICghKGRlZmF1bHRWYWx1ZSA9PSBudWxsKSkge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCBcIklmIHlvdSBzdXBwbHkgYGRlZmF1bHRWYWx1ZWAgb24gYSA8dGV4dGFyZWE+LCBkbyBub3QgcGFzcyBjaGlsZHJlbi5cIiApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkge1xuICAgICAgICAgIGlmICghKGNoaWxkcmVuLmxlbmd0aCA8PSAxKSkge1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0aHJvdyBFcnJvciggXCI8dGV4dGFyZWE+IGNhbiBvbmx5IGhhdmUgYXQgbW9zdCBvbmUgY2hpbGQuXCIgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjaGlsZHJlbiA9IGNoaWxkcmVuWzBdO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVmYXVsdFZhbHVlID0gY2hpbGRyZW47XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRlZmF1bHRWYWx1ZSA9PSBudWxsKSB7XG4gICAgICBkZWZhdWx0VmFsdWUgPSAnJztcbiAgICB9XG5cbiAgICBpbml0aWFsVmFsdWUgPSBkZWZhdWx0VmFsdWU7XG4gIH1cblxuICBub2RlLl93cmFwcGVyU3RhdGUgPSB7XG4gICAgaW5pdGlhbFZhbHVlOiBnZXRUb1N0cmluZ1ZhbHVlKGluaXRpYWxWYWx1ZSlcbiAgfTtcbn1cbmZ1bmN0aW9uIHVwZGF0ZVdyYXBwZXIkMShlbGVtZW50LCBwcm9wcykge1xuICB2YXIgbm9kZSA9IGVsZW1lbnQ7XG4gIHZhciB2YWx1ZSA9IGdldFRvU3RyaW5nVmFsdWUocHJvcHMudmFsdWUpO1xuICB2YXIgZGVmYXVsdFZhbHVlID0gZ2V0VG9TdHJpbmdWYWx1ZShwcm9wcy5kZWZhdWx0VmFsdWUpO1xuXG4gIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgLy8gQ2FzdCBgdmFsdWVgIHRvIGEgc3RyaW5nIHRvIGVuc3VyZSB0aGUgdmFsdWUgaXMgc2V0IGNvcnJlY3RseS4gV2hpbGVcbiAgICAvLyBicm93c2VycyB0eXBpY2FsbHkgZG8gdGhpcyBhcyBuZWNlc3NhcnksIGpzZG9tIGRvZXNuJ3QuXG4gICAgdmFyIG5ld1ZhbHVlID0gdG9TdHJpbmcodmFsdWUpOyAvLyBUbyBhdm9pZCBzaWRlIGVmZmVjdHMgKHN1Y2ggYXMgbG9zaW5nIHRleHQgc2VsZWN0aW9uKSwgb25seSBzZXQgdmFsdWUgaWYgY2hhbmdlZFxuXG4gICAgaWYgKG5ld1ZhbHVlICE9PSBub2RlLnZhbHVlKSB7XG4gICAgICBub2RlLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLmRlZmF1bHRWYWx1ZSA9PSBudWxsICYmIG5vZGUuZGVmYXVsdFZhbHVlICE9PSBuZXdWYWx1ZSkge1xuICAgICAgbm9kZS5kZWZhdWx0VmFsdWUgPSBuZXdWYWx1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAoZGVmYXVsdFZhbHVlICE9IG51bGwpIHtcbiAgICBub2RlLmRlZmF1bHRWYWx1ZSA9IHRvU3RyaW5nKGRlZmF1bHRWYWx1ZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIHBvc3RNb3VudFdyYXBwZXIkMyhlbGVtZW50LCBwcm9wcykge1xuICB2YXIgbm9kZSA9IGVsZW1lbnQ7IC8vIFRoaXMgaXMgaW4gcG9zdE1vdW50IGJlY2F1c2Ugd2UgbmVlZCBhY2Nlc3MgdG8gdGhlIERPTSBub2RlLCB3aGljaCBpcyBub3RcbiAgLy8gYXZhaWxhYmxlIHVudGlsIGFmdGVyIHRoZSBjb21wb25lbnQgaGFzIG1vdW50ZWQuXG5cbiAgdmFyIHRleHRDb250ZW50ID0gbm9kZS50ZXh0Q29udGVudDsgLy8gT25seSBzZXQgbm9kZS52YWx1ZSBpZiB0ZXh0Q29udGVudCBpcyBlcXVhbCB0byB0aGUgZXhwZWN0ZWRcbiAgLy8gaW5pdGlhbCB2YWx1ZS4gSW4gSUUxMC9JRTExIHRoZXJlIGlzIGEgYnVnIHdoZXJlIHRoZSBwbGFjZWhvbGRlciBhdHRyaWJ1dGVcbiAgLy8gd2lsbCBwb3B1bGF0ZSB0ZXh0Q29udGVudCBhcyB3ZWxsLlxuICAvLyBodHRwczovL2RldmVsb3Blci5taWNyb3NvZnQuY29tL21pY3Jvc29mdC1lZGdlL3BsYXRmb3JtL2lzc3Vlcy8xMDE1MjUvXG5cbiAgaWYgKHRleHRDb250ZW50ID09PSBub2RlLl93cmFwcGVyU3RhdGUuaW5pdGlhbFZhbHVlKSB7XG4gICAgaWYgKHRleHRDb250ZW50ICE9PSAnJyAmJiB0ZXh0Q29udGVudCAhPT0gbnVsbCkge1xuICAgICAgbm9kZS52YWx1ZSA9IHRleHRDb250ZW50O1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gcmVzdG9yZUNvbnRyb2xsZWRTdGF0ZSQyKGVsZW1lbnQsIHByb3BzKSB7XG4gIC8vIERPTSBjb21wb25lbnQgaXMgc3RpbGwgbW91bnRlZDsgdXBkYXRlXG4gIHVwZGF0ZVdyYXBwZXIkMShlbGVtZW50LCBwcm9wcyk7XG59XG5cbnZhciBIVE1MX05BTUVTUEFDRSA9ICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJztcbnZhciBNQVRIX05BTUVTUEFDRSA9ICdodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MJztcbnZhciBTVkdfTkFNRVNQQUNFID0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJztcbnZhciBOYW1lc3BhY2VzID0ge1xuICBodG1sOiBIVE1MX05BTUVTUEFDRSxcbiAgbWF0aG1sOiBNQVRIX05BTUVTUEFDRSxcbiAgc3ZnOiBTVkdfTkFNRVNQQUNFXG59OyAvLyBBc3N1bWVzIHRoZXJlIGlzIG5vIHBhcmVudCBuYW1lc3BhY2UuXG5cbmZ1bmN0aW9uIGdldEludHJpbnNpY05hbWVzcGFjZSh0eXBlKSB7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ3N2Zyc6XG4gICAgICByZXR1cm4gU1ZHX05BTUVTUEFDRTtcblxuICAgIGNhc2UgJ21hdGgnOlxuICAgICAgcmV0dXJuIE1BVEhfTkFNRVNQQUNFO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBIVE1MX05BTUVTUEFDRTtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0Q2hpbGROYW1lc3BhY2UocGFyZW50TmFtZXNwYWNlLCB0eXBlKSB7XG4gIGlmIChwYXJlbnROYW1lc3BhY2UgPT0gbnVsbCB8fCBwYXJlbnROYW1lc3BhY2UgPT09IEhUTUxfTkFNRVNQQUNFKSB7XG4gICAgLy8gTm8gKG9yIGRlZmF1bHQpIHBhcmVudCBuYW1lc3BhY2U6IHBvdGVudGlhbCBlbnRyeSBwb2ludC5cbiAgICByZXR1cm4gZ2V0SW50cmluc2ljTmFtZXNwYWNlKHR5cGUpO1xuICB9XG5cbiAgaWYgKHBhcmVudE5hbWVzcGFjZSA9PT0gU1ZHX05BTUVTUEFDRSAmJiB0eXBlID09PSAnZm9yZWlnbk9iamVjdCcpIHtcbiAgICAvLyBXZSdyZSBsZWF2aW5nIFNWRy5cbiAgICByZXR1cm4gSFRNTF9OQU1FU1BBQ0U7XG4gIH0gLy8gQnkgZGVmYXVsdCwgcGFzcyBuYW1lc3BhY2UgYmVsb3cuXG5cblxuICByZXR1cm4gcGFyZW50TmFtZXNwYWNlO1xufVxuXG4vKiBnbG9iYWxzIE1TQXBwICovXG5cbi8qKlxuICogQ3JlYXRlIGEgZnVuY3Rpb24gd2hpY2ggaGFzICd1bnNhZmUnIHByaXZpbGVnZXMgKHJlcXVpcmVkIGJ5IHdpbmRvd3M4IGFwcHMpXG4gKi9cbnZhciBjcmVhdGVNaWNyb3NvZnRVbnNhZmVMb2NhbEZ1bmN0aW9uID0gZnVuY3Rpb24gKGZ1bmMpIHtcbiAgaWYgKHR5cGVvZiBNU0FwcCAhPT0gJ3VuZGVmaW5lZCcgJiYgTVNBcHAuZXhlY1Vuc2FmZUxvY2FsRnVuY3Rpb24pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGFyZzAsIGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgICAgIE1TQXBwLmV4ZWNVbnNhZmVMb2NhbEZ1bmN0aW9uKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmMoYXJnMCwgYXJnMSwgYXJnMiwgYXJnMyk7XG4gICAgICB9KTtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmdW5jO1xuICB9XG59O1xuXG52YXIgcmV1c2FibGVTVkdDb250YWluZXI7XG4vKipcbiAqIFNldCB0aGUgaW5uZXJIVE1MIHByb3BlcnR5IG9mIGEgbm9kZVxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gbm9kZVxuICogQHBhcmFtIHtzdHJpbmd9IGh0bWxcbiAqIEBpbnRlcm5hbFxuICovXG5cbnZhciBzZXRJbm5lckhUTUwgPSBjcmVhdGVNaWNyb3NvZnRVbnNhZmVMb2NhbEZ1bmN0aW9uKGZ1bmN0aW9uIChub2RlLCBodG1sKSB7XG4gIGlmIChub2RlLm5hbWVzcGFjZVVSSSA9PT0gTmFtZXNwYWNlcy5zdmcpIHtcblxuICAgIGlmICghKCdpbm5lckhUTUwnIGluIG5vZGUpKSB7XG4gICAgICAvLyBJRSBkb2VzIG5vdCBoYXZlIGlubmVySFRNTCBmb3IgU1ZHIG5vZGVzLCBzbyBpbnN0ZWFkIHdlIGluamVjdCB0aGVcbiAgICAgIC8vIG5ldyBtYXJrdXAgaW4gYSB0ZW1wIG5vZGUgYW5kIHRoZW4gbW92ZSB0aGUgY2hpbGQgbm9kZXMgYWNyb3NzIGludG9cbiAgICAgIC8vIHRoZSB0YXJnZXQgbm9kZVxuICAgICAgcmV1c2FibGVTVkdDb250YWluZXIgPSByZXVzYWJsZVNWR0NvbnRhaW5lciB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIHJldXNhYmxlU1ZHQ29udGFpbmVyLmlubmVySFRNTCA9ICc8c3ZnPicgKyBodG1sLnZhbHVlT2YoKS50b1N0cmluZygpICsgJzwvc3ZnPic7XG4gICAgICB2YXIgc3ZnTm9kZSA9IHJldXNhYmxlU1ZHQ29udGFpbmVyLmZpcnN0Q2hpbGQ7XG5cbiAgICAgIHdoaWxlIChub2RlLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgbm9kZS5yZW1vdmVDaGlsZChub2RlLmZpcnN0Q2hpbGQpO1xuICAgICAgfVxuXG4gICAgICB3aGlsZSAoc3ZnTm9kZS5maXJzdENoaWxkKSB7XG4gICAgICAgIG5vZGUuYXBwZW5kQ2hpbGQoc3ZnTm9kZS5maXJzdENoaWxkKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIG5vZGUuaW5uZXJIVE1MID0gaHRtbDtcbn0pO1xuXG4vKipcbiAqIEhUTUwgbm9kZVR5cGUgdmFsdWVzIHRoYXQgcmVwcmVzZW50IHRoZSB0eXBlIG9mIHRoZSBub2RlXG4gKi9cbnZhciBFTEVNRU5UX05PREUgPSAxO1xudmFyIFRFWFRfTk9ERSA9IDM7XG52YXIgQ09NTUVOVF9OT0RFID0gODtcbnZhciBET0NVTUVOVF9OT0RFID0gOTtcbnZhciBET0NVTUVOVF9GUkFHTUVOVF9OT0RFID0gMTE7XG5cbi8qKlxuICogU2V0IHRoZSB0ZXh0Q29udGVudCBwcm9wZXJ0eSBvZiBhIG5vZGUuIEZvciB0ZXh0IHVwZGF0ZXMsIGl0J3MgZmFzdGVyXG4gKiB0byBzZXQgdGhlIGBub2RlVmFsdWVgIG9mIHRoZSBUZXh0IG5vZGUgZGlyZWN0bHkgaW5zdGVhZCBvZiB1c2luZ1xuICogYC50ZXh0Q29udGVudGAgd2hpY2ggd2lsbCByZW1vdmUgdGhlIGV4aXN0aW5nIG5vZGUgYW5kIGNyZWF0ZSBhIG5ldyBvbmUuXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fSBub2RlXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuICogQGludGVybmFsXG4gKi9cblxudmFyIHNldFRleHRDb250ZW50ID0gZnVuY3Rpb24gKG5vZGUsIHRleHQpIHtcbiAgaWYgKHRleHQpIHtcbiAgICB2YXIgZmlyc3RDaGlsZCA9IG5vZGUuZmlyc3RDaGlsZDtcblxuICAgIGlmIChmaXJzdENoaWxkICYmIGZpcnN0Q2hpbGQgPT09IG5vZGUubGFzdENoaWxkICYmIGZpcnN0Q2hpbGQubm9kZVR5cGUgPT09IFRFWFRfTk9ERSkge1xuICAgICAgZmlyc3RDaGlsZC5ub2RlVmFsdWUgPSB0ZXh0O1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIG5vZGUudGV4dENvbnRlbnQgPSB0ZXh0O1xufTtcblxuLy8gTGlzdCBkZXJpdmVkIGZyb20gR2Vja28gc291cmNlIGNvZGU6XG4vLyBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9nZWNrby1kZXYvYmxvYi80ZTYzOGVmYzcxL2xheW91dC9zdHlsZS90ZXN0L3Byb3BlcnR5X2RhdGFiYXNlLmpzXG52YXIgc2hvcnRoYW5kVG9Mb25naGFuZCA9IHtcbiAgYW5pbWF0aW9uOiBbJ2FuaW1hdGlvbkRlbGF5JywgJ2FuaW1hdGlvbkRpcmVjdGlvbicsICdhbmltYXRpb25EdXJhdGlvbicsICdhbmltYXRpb25GaWxsTW9kZScsICdhbmltYXRpb25JdGVyYXRpb25Db3VudCcsICdhbmltYXRpb25OYW1lJywgJ2FuaW1hdGlvblBsYXlTdGF0ZScsICdhbmltYXRpb25UaW1pbmdGdW5jdGlvbiddLFxuICBiYWNrZ3JvdW5kOiBbJ2JhY2tncm91bmRBdHRhY2htZW50JywgJ2JhY2tncm91bmRDbGlwJywgJ2JhY2tncm91bmRDb2xvcicsICdiYWNrZ3JvdW5kSW1hZ2UnLCAnYmFja2dyb3VuZE9yaWdpbicsICdiYWNrZ3JvdW5kUG9zaXRpb25YJywgJ2JhY2tncm91bmRQb3NpdGlvblknLCAnYmFja2dyb3VuZFJlcGVhdCcsICdiYWNrZ3JvdW5kU2l6ZSddLFxuICBiYWNrZ3JvdW5kUG9zaXRpb246IFsnYmFja2dyb3VuZFBvc2l0aW9uWCcsICdiYWNrZ3JvdW5kUG9zaXRpb25ZJ10sXG4gIGJvcmRlcjogWydib3JkZXJCb3R0b21Db2xvcicsICdib3JkZXJCb3R0b21TdHlsZScsICdib3JkZXJCb3R0b21XaWR0aCcsICdib3JkZXJJbWFnZU91dHNldCcsICdib3JkZXJJbWFnZVJlcGVhdCcsICdib3JkZXJJbWFnZVNsaWNlJywgJ2JvcmRlckltYWdlU291cmNlJywgJ2JvcmRlckltYWdlV2lkdGgnLCAnYm9yZGVyTGVmdENvbG9yJywgJ2JvcmRlckxlZnRTdHlsZScsICdib3JkZXJMZWZ0V2lkdGgnLCAnYm9yZGVyUmlnaHRDb2xvcicsICdib3JkZXJSaWdodFN0eWxlJywgJ2JvcmRlclJpZ2h0V2lkdGgnLCAnYm9yZGVyVG9wQ29sb3InLCAnYm9yZGVyVG9wU3R5bGUnLCAnYm9yZGVyVG9wV2lkdGgnXSxcbiAgYm9yZGVyQmxvY2tFbmQ6IFsnYm9yZGVyQmxvY2tFbmRDb2xvcicsICdib3JkZXJCbG9ja0VuZFN0eWxlJywgJ2JvcmRlckJsb2NrRW5kV2lkdGgnXSxcbiAgYm9yZGVyQmxvY2tTdGFydDogWydib3JkZXJCbG9ja1N0YXJ0Q29sb3InLCAnYm9yZGVyQmxvY2tTdGFydFN0eWxlJywgJ2JvcmRlckJsb2NrU3RhcnRXaWR0aCddLFxuICBib3JkZXJCb3R0b206IFsnYm9yZGVyQm90dG9tQ29sb3InLCAnYm9yZGVyQm90dG9tU3R5bGUnLCAnYm9yZGVyQm90dG9tV2lkdGgnXSxcbiAgYm9yZGVyQ29sb3I6IFsnYm9yZGVyQm90dG9tQ29sb3InLCAnYm9yZGVyTGVmdENvbG9yJywgJ2JvcmRlclJpZ2h0Q29sb3InLCAnYm9yZGVyVG9wQ29sb3InXSxcbiAgYm9yZGVySW1hZ2U6IFsnYm9yZGVySW1hZ2VPdXRzZXQnLCAnYm9yZGVySW1hZ2VSZXBlYXQnLCAnYm9yZGVySW1hZ2VTbGljZScsICdib3JkZXJJbWFnZVNvdXJjZScsICdib3JkZXJJbWFnZVdpZHRoJ10sXG4gIGJvcmRlcklubGluZUVuZDogWydib3JkZXJJbmxpbmVFbmRDb2xvcicsICdib3JkZXJJbmxpbmVFbmRTdHlsZScsICdib3JkZXJJbmxpbmVFbmRXaWR0aCddLFxuICBib3JkZXJJbmxpbmVTdGFydDogWydib3JkZXJJbmxpbmVTdGFydENvbG9yJywgJ2JvcmRlcklubGluZVN0YXJ0U3R5bGUnLCAnYm9yZGVySW5saW5lU3RhcnRXaWR0aCddLFxuICBib3JkZXJMZWZ0OiBbJ2JvcmRlckxlZnRDb2xvcicsICdib3JkZXJMZWZ0U3R5bGUnLCAnYm9yZGVyTGVmdFdpZHRoJ10sXG4gIGJvcmRlclJhZGl1czogWydib3JkZXJCb3R0b21MZWZ0UmFkaXVzJywgJ2JvcmRlckJvdHRvbVJpZ2h0UmFkaXVzJywgJ2JvcmRlclRvcExlZnRSYWRpdXMnLCAnYm9yZGVyVG9wUmlnaHRSYWRpdXMnXSxcbiAgYm9yZGVyUmlnaHQ6IFsnYm9yZGVyUmlnaHRDb2xvcicsICdib3JkZXJSaWdodFN0eWxlJywgJ2JvcmRlclJpZ2h0V2lkdGgnXSxcbiAgYm9yZGVyU3R5bGU6IFsnYm9yZGVyQm90dG9tU3R5bGUnLCAnYm9yZGVyTGVmdFN0eWxlJywgJ2JvcmRlclJpZ2h0U3R5bGUnLCAnYm9yZGVyVG9wU3R5bGUnXSxcbiAgYm9yZGVyVG9wOiBbJ2JvcmRlclRvcENvbG9yJywgJ2JvcmRlclRvcFN0eWxlJywgJ2JvcmRlclRvcFdpZHRoJ10sXG4gIGJvcmRlcldpZHRoOiBbJ2JvcmRlckJvdHRvbVdpZHRoJywgJ2JvcmRlckxlZnRXaWR0aCcsICdib3JkZXJSaWdodFdpZHRoJywgJ2JvcmRlclRvcFdpZHRoJ10sXG4gIGNvbHVtblJ1bGU6IFsnY29sdW1uUnVsZUNvbG9yJywgJ2NvbHVtblJ1bGVTdHlsZScsICdjb2x1bW5SdWxlV2lkdGgnXSxcbiAgY29sdW1uczogWydjb2x1bW5Db3VudCcsICdjb2x1bW5XaWR0aCddLFxuICBmbGV4OiBbJ2ZsZXhCYXNpcycsICdmbGV4R3JvdycsICdmbGV4U2hyaW5rJ10sXG4gIGZsZXhGbG93OiBbJ2ZsZXhEaXJlY3Rpb24nLCAnZmxleFdyYXAnXSxcbiAgZm9udDogWydmb250RmFtaWx5JywgJ2ZvbnRGZWF0dXJlU2V0dGluZ3MnLCAnZm9udEtlcm5pbmcnLCAnZm9udExhbmd1YWdlT3ZlcnJpZGUnLCAnZm9udFNpemUnLCAnZm9udFNpemVBZGp1c3QnLCAnZm9udFN0cmV0Y2gnLCAnZm9udFN0eWxlJywgJ2ZvbnRWYXJpYW50JywgJ2ZvbnRWYXJpYW50QWx0ZXJuYXRlcycsICdmb250VmFyaWFudENhcHMnLCAnZm9udFZhcmlhbnRFYXN0QXNpYW4nLCAnZm9udFZhcmlhbnRMaWdhdHVyZXMnLCAnZm9udFZhcmlhbnROdW1lcmljJywgJ2ZvbnRWYXJpYW50UG9zaXRpb24nLCAnZm9udFdlaWdodCcsICdsaW5lSGVpZ2h0J10sXG4gIGZvbnRWYXJpYW50OiBbJ2ZvbnRWYXJpYW50QWx0ZXJuYXRlcycsICdmb250VmFyaWFudENhcHMnLCAnZm9udFZhcmlhbnRFYXN0QXNpYW4nLCAnZm9udFZhcmlhbnRMaWdhdHVyZXMnLCAnZm9udFZhcmlhbnROdW1lcmljJywgJ2ZvbnRWYXJpYW50UG9zaXRpb24nXSxcbiAgZ2FwOiBbJ2NvbHVtbkdhcCcsICdyb3dHYXAnXSxcbiAgZ3JpZDogWydncmlkQXV0b0NvbHVtbnMnLCAnZ3JpZEF1dG9GbG93JywgJ2dyaWRBdXRvUm93cycsICdncmlkVGVtcGxhdGVBcmVhcycsICdncmlkVGVtcGxhdGVDb2x1bW5zJywgJ2dyaWRUZW1wbGF0ZVJvd3MnXSxcbiAgZ3JpZEFyZWE6IFsnZ3JpZENvbHVtbkVuZCcsICdncmlkQ29sdW1uU3RhcnQnLCAnZ3JpZFJvd0VuZCcsICdncmlkUm93U3RhcnQnXSxcbiAgZ3JpZENvbHVtbjogWydncmlkQ29sdW1uRW5kJywgJ2dyaWRDb2x1bW5TdGFydCddLFxuICBncmlkQ29sdW1uR2FwOiBbJ2NvbHVtbkdhcCddLFxuICBncmlkR2FwOiBbJ2NvbHVtbkdhcCcsICdyb3dHYXAnXSxcbiAgZ3JpZFJvdzogWydncmlkUm93RW5kJywgJ2dyaWRSb3dTdGFydCddLFxuICBncmlkUm93R2FwOiBbJ3Jvd0dhcCddLFxuICBncmlkVGVtcGxhdGU6IFsnZ3JpZFRlbXBsYXRlQXJlYXMnLCAnZ3JpZFRlbXBsYXRlQ29sdW1ucycsICdncmlkVGVtcGxhdGVSb3dzJ10sXG4gIGxpc3RTdHlsZTogWydsaXN0U3R5bGVJbWFnZScsICdsaXN0U3R5bGVQb3NpdGlvbicsICdsaXN0U3R5bGVUeXBlJ10sXG4gIG1hcmdpbjogWydtYXJnaW5Cb3R0b20nLCAnbWFyZ2luTGVmdCcsICdtYXJnaW5SaWdodCcsICdtYXJnaW5Ub3AnXSxcbiAgbWFya2VyOiBbJ21hcmtlckVuZCcsICdtYXJrZXJNaWQnLCAnbWFya2VyU3RhcnQnXSxcbiAgbWFzazogWydtYXNrQ2xpcCcsICdtYXNrQ29tcG9zaXRlJywgJ21hc2tJbWFnZScsICdtYXNrTW9kZScsICdtYXNrT3JpZ2luJywgJ21hc2tQb3NpdGlvblgnLCAnbWFza1Bvc2l0aW9uWScsICdtYXNrUmVwZWF0JywgJ21hc2tTaXplJ10sXG4gIG1hc2tQb3NpdGlvbjogWydtYXNrUG9zaXRpb25YJywgJ21hc2tQb3NpdGlvblknXSxcbiAgb3V0bGluZTogWydvdXRsaW5lQ29sb3InLCAnb3V0bGluZVN0eWxlJywgJ291dGxpbmVXaWR0aCddLFxuICBvdmVyZmxvdzogWydvdmVyZmxvd1gnLCAnb3ZlcmZsb3dZJ10sXG4gIHBhZGRpbmc6IFsncGFkZGluZ0JvdHRvbScsICdwYWRkaW5nTGVmdCcsICdwYWRkaW5nUmlnaHQnLCAncGFkZGluZ1RvcCddLFxuICBwbGFjZUNvbnRlbnQ6IFsnYWxpZ25Db250ZW50JywgJ2p1c3RpZnlDb250ZW50J10sXG4gIHBsYWNlSXRlbXM6IFsnYWxpZ25JdGVtcycsICdqdXN0aWZ5SXRlbXMnXSxcbiAgcGxhY2VTZWxmOiBbJ2FsaWduU2VsZicsICdqdXN0aWZ5U2VsZiddLFxuICB0ZXh0RGVjb3JhdGlvbjogWyd0ZXh0RGVjb3JhdGlvbkNvbG9yJywgJ3RleHREZWNvcmF0aW9uTGluZScsICd0ZXh0RGVjb3JhdGlvblN0eWxlJ10sXG4gIHRleHRFbXBoYXNpczogWyd0ZXh0RW1waGFzaXNDb2xvcicsICd0ZXh0RW1waGFzaXNTdHlsZSddLFxuICB0cmFuc2l0aW9uOiBbJ3RyYW5zaXRpb25EZWxheScsICd0cmFuc2l0aW9uRHVyYXRpb24nLCAndHJhbnNpdGlvblByb3BlcnR5JywgJ3RyYW5zaXRpb25UaW1pbmdGdW5jdGlvbiddLFxuICB3b3JkV3JhcDogWydvdmVyZmxvd1dyYXAnXVxufTtcblxuLyoqXG4gKiBDU1MgcHJvcGVydGllcyB3aGljaCBhY2NlcHQgbnVtYmVycyBidXQgYXJlIG5vdCBpbiB1bml0cyBvZiBcInB4XCIuXG4gKi9cbnZhciBpc1VuaXRsZXNzTnVtYmVyID0ge1xuICBhbmltYXRpb25JdGVyYXRpb25Db3VudDogdHJ1ZSxcbiAgYm9yZGVySW1hZ2VPdXRzZXQ6IHRydWUsXG4gIGJvcmRlckltYWdlU2xpY2U6IHRydWUsXG4gIGJvcmRlckltYWdlV2lkdGg6IHRydWUsXG4gIGJveEZsZXg6IHRydWUsXG4gIGJveEZsZXhHcm91cDogdHJ1ZSxcbiAgYm94T3JkaW5hbEdyb3VwOiB0cnVlLFxuICBjb2x1bW5Db3VudDogdHJ1ZSxcbiAgY29sdW1uczogdHJ1ZSxcbiAgZmxleDogdHJ1ZSxcbiAgZmxleEdyb3c6IHRydWUsXG4gIGZsZXhQb3NpdGl2ZTogdHJ1ZSxcbiAgZmxleFNocmluazogdHJ1ZSxcbiAgZmxleE5lZ2F0aXZlOiB0cnVlLFxuICBmbGV4T3JkZXI6IHRydWUsXG4gIGdyaWRBcmVhOiB0cnVlLFxuICBncmlkUm93OiB0cnVlLFxuICBncmlkUm93RW5kOiB0cnVlLFxuICBncmlkUm93U3BhbjogdHJ1ZSxcbiAgZ3JpZFJvd1N0YXJ0OiB0cnVlLFxuICBncmlkQ29sdW1uOiB0cnVlLFxuICBncmlkQ29sdW1uRW5kOiB0cnVlLFxuICBncmlkQ29sdW1uU3BhbjogdHJ1ZSxcbiAgZ3JpZENvbHVtblN0YXJ0OiB0cnVlLFxuICBmb250V2VpZ2h0OiB0cnVlLFxuICBsaW5lQ2xhbXA6IHRydWUsXG4gIGxpbmVIZWlnaHQ6IHRydWUsXG4gIG9wYWNpdHk6IHRydWUsXG4gIG9yZGVyOiB0cnVlLFxuICBvcnBoYW5zOiB0cnVlLFxuICB0YWJTaXplOiB0cnVlLFxuICB3aWRvd3M6IHRydWUsXG4gIHpJbmRleDogdHJ1ZSxcbiAgem9vbTogdHJ1ZSxcbiAgLy8gU1ZHLXJlbGF0ZWQgcHJvcGVydGllc1xuICBmaWxsT3BhY2l0eTogdHJ1ZSxcbiAgZmxvb2RPcGFjaXR5OiB0cnVlLFxuICBzdG9wT3BhY2l0eTogdHJ1ZSxcbiAgc3Ryb2tlRGFzaGFycmF5OiB0cnVlLFxuICBzdHJva2VEYXNob2Zmc2V0OiB0cnVlLFxuICBzdHJva2VNaXRlcmxpbWl0OiB0cnVlLFxuICBzdHJva2VPcGFjaXR5OiB0cnVlLFxuICBzdHJva2VXaWR0aDogdHJ1ZVxufTtcbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHByZWZpeCB2ZW5kb3Itc3BlY2lmaWMgcHJlZml4LCBlZzogV2Via2l0XG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IHN0eWxlIG5hbWUsIGVnOiB0cmFuc2l0aW9uRHVyYXRpb25cbiAqIEByZXR1cm4ge3N0cmluZ30gc3R5bGUgbmFtZSBwcmVmaXhlZCB3aXRoIGBwcmVmaXhgLCBwcm9wZXJseSBjYW1lbENhc2VkLCBlZzpcbiAqIFdlYmtpdFRyYW5zaXRpb25EdXJhdGlvblxuICovXG5cbmZ1bmN0aW9uIHByZWZpeEtleShwcmVmaXgsIGtleSkge1xuICByZXR1cm4gcHJlZml4ICsga2V5LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsga2V5LnN1YnN0cmluZygxKTtcbn1cbi8qKlxuICogU3VwcG9ydCBzdHlsZSBuYW1lcyB0aGF0IG1heSBjb21lIHBhc3NlZCBpbiBwcmVmaXhlZCBieSBhZGRpbmcgcGVybXV0YXRpb25zXG4gKiBvZiB2ZW5kb3IgcHJlZml4ZXMuXG4gKi9cblxuXG52YXIgcHJlZml4ZXMgPSBbJ1dlYmtpdCcsICdtcycsICdNb3onLCAnTyddOyAvLyBVc2luZyBPYmplY3Qua2V5cyBoZXJlLCBvciBlbHNlIHRoZSB2YW5pbGxhIGZvci1pbiBsb29wIG1ha2VzIElFOCBnbyBpbnRvIGFuXG4vLyBpbmZpbml0ZSBsb29wLCBiZWNhdXNlIGl0IGl0ZXJhdGVzIG92ZXIgdGhlIG5ld2x5IGFkZGVkIHByb3BzIHRvby5cblxuT2JqZWN0LmtleXMoaXNVbml0bGVzc051bWJlcikuZm9yRWFjaChmdW5jdGlvbiAocHJvcCkge1xuICBwcmVmaXhlcy5mb3JFYWNoKGZ1bmN0aW9uIChwcmVmaXgpIHtcbiAgICBpc1VuaXRsZXNzTnVtYmVyW3ByZWZpeEtleShwcmVmaXgsIHByb3ApXSA9IGlzVW5pdGxlc3NOdW1iZXJbcHJvcF07XG4gIH0pO1xufSk7XG5cbi8qKlxuICogQ29udmVydCBhIHZhbHVlIGludG8gdGhlIHByb3BlciBjc3Mgd3JpdGFibGUgdmFsdWUuIFRoZSBzdHlsZSBuYW1lIGBuYW1lYFxuICogc2hvdWxkIGJlIGxvZ2ljYWwgKG5vIGh5cGhlbnMpLCBhcyBzcGVjaWZpZWRcbiAqIGluIGBDU1NQcm9wZXJ0eS5pc1VuaXRsZXNzTnVtYmVyYC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBDU1MgcHJvcGVydHkgbmFtZSBzdWNoIGFzIGB0b3BNYXJnaW5gLlxuICogQHBhcmFtIHsqfSB2YWx1ZSBDU1MgcHJvcGVydHkgdmFsdWUgc3VjaCBhcyBgMTBweGAuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IE5vcm1hbGl6ZWQgc3R5bGUgdmFsdWUgd2l0aCBkaW1lbnNpb25zIGFwcGxpZWQuXG4gKi9cblxuZnVuY3Rpb24gZGFuZ2Vyb3VzU3R5bGVWYWx1ZShuYW1lLCB2YWx1ZSwgaXNDdXN0b21Qcm9wZXJ0eSkge1xuICAvLyBOb3RlIHRoYXQgd2UndmUgcmVtb3ZlZCBlc2NhcGVUZXh0Rm9yQnJvd3NlcigpIGNhbGxzIGhlcmUgc2luY2UgdGhlXG4gIC8vIHdob2xlIHN0cmluZyB3aWxsIGJlIGVzY2FwZWQgd2hlbiB0aGUgYXR0cmlidXRlIGlzIGluamVjdGVkIGludG9cbiAgLy8gdGhlIG1hcmt1cC4gSWYgeW91IHByb3ZpZGUgdW5zYWZlIHVzZXIgZGF0YSBoZXJlIHRoZXkgY2FuIGluamVjdFxuICAvLyBhcmJpdHJhcnkgQ1NTIHdoaWNoIG1heSBiZSBwcm9ibGVtYXRpYyAoSSBjb3VsZG4ndCByZXBybyB0aGlzKTpcbiAgLy8gaHR0cHM6Ly93d3cub3dhc3Aub3JnL2luZGV4LnBocC9YU1NfRmlsdGVyX0V2YXNpb25fQ2hlYXRfU2hlZXRcbiAgLy8gaHR0cDovL3d3dy50aGVzcGFubmVyLmNvLnVrLzIwMDcvMTEvMjYvdWx0aW1hdGUteHNzLWNzcy1pbmplY3Rpb24vXG4gIC8vIFRoaXMgaXMgbm90IGFuIFhTUyBob2xlIGJ1dCBpbnN0ZWFkIGEgcG90ZW50aWFsIENTUyBpbmplY3Rpb24gaXNzdWVcbiAgLy8gd2hpY2ggaGFzIGxlYWQgdG8gYSBncmVhdGVyIGRpc2N1c3Npb24gYWJvdXQgaG93IHdlJ3JlIGdvaW5nIHRvXG4gIC8vIHRydXN0IFVSTHMgbW92aW5nIGZvcndhcmQuIFNlZSAjMjExNTkwMVxuICB2YXIgaXNFbXB0eSA9IHZhbHVlID09IG51bGwgfHwgdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicgfHwgdmFsdWUgPT09ICcnO1xuXG4gIGlmIChpc0VtcHR5KSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgaWYgKCFpc0N1c3RvbVByb3BlcnR5ICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgIT09IDAgJiYgIShpc1VuaXRsZXNzTnVtYmVyLmhhc093blByb3BlcnR5KG5hbWUpICYmIGlzVW5pdGxlc3NOdW1iZXJbbmFtZV0pKSB7XG4gICAgcmV0dXJuIHZhbHVlICsgJ3B4JzsgLy8gUHJlc3VtZXMgaW1wbGljaXQgJ3B4JyBzdWZmaXggZm9yIHVuaXRsZXNzIG51bWJlcnNcbiAgfVxuXG4gIHJldHVybiAoJycgKyB2YWx1ZSkudHJpbSgpO1xufVxuXG52YXIgdXBwZXJjYXNlUGF0dGVybiA9IC8oW0EtWl0pL2c7XG52YXIgbXNQYXR0ZXJuID0gL15tcy0vO1xuLyoqXG4gKiBIeXBoZW5hdGVzIGEgY2FtZWxjYXNlZCBDU1MgcHJvcGVydHkgbmFtZSwgZm9yIGV4YW1wbGU6XG4gKlxuICogICA+IGh5cGhlbmF0ZVN0eWxlTmFtZSgnYmFja2dyb3VuZENvbG9yJylcbiAqICAgPCBcImJhY2tncm91bmQtY29sb3JcIlxuICogICA+IGh5cGhlbmF0ZVN0eWxlTmFtZSgnTW96VHJhbnNpdGlvbicpXG4gKiAgIDwgXCItbW96LXRyYW5zaXRpb25cIlxuICogICA+IGh5cGhlbmF0ZVN0eWxlTmFtZSgnbXNUcmFuc2l0aW9uJylcbiAqICAgPCBcIi1tcy10cmFuc2l0aW9uXCJcbiAqXG4gKiBBcyBNb2Rlcm5penIgc3VnZ2VzdHMgKGh0dHA6Ly9tb2Rlcm5penIuY29tL2RvY3MvI3ByZWZpeGVkKSwgYW4gYG1zYCBwcmVmaXhcbiAqIGlzIGNvbnZlcnRlZCB0byBgLW1zLWAuXG4gKi9cblxuZnVuY3Rpb24gaHlwaGVuYXRlU3R5bGVOYW1lKG5hbWUpIHtcbiAgcmV0dXJuIG5hbWUucmVwbGFjZSh1cHBlcmNhc2VQYXR0ZXJuLCAnLSQxJykudG9Mb3dlckNhc2UoKS5yZXBsYWNlKG1zUGF0dGVybiwgJy1tcy0nKTtcbn1cblxudmFyIHdhcm5WYWxpZFN0eWxlID0gZnVuY3Rpb24gKCkge307XG5cbntcbiAgLy8gJ21zVHJhbnNmb3JtJyBpcyBjb3JyZWN0LCBidXQgdGhlIG90aGVyIHByZWZpeGVzIHNob3VsZCBiZSBjYXBpdGFsaXplZFxuICB2YXIgYmFkVmVuZG9yZWRTdHlsZU5hbWVQYXR0ZXJuID0gL14oPzp3ZWJraXR8bW96fG8pW0EtWl0vO1xuICB2YXIgbXNQYXR0ZXJuJDEgPSAvXi1tcy0vO1xuICB2YXIgaHlwaGVuUGF0dGVybiA9IC8tKC4pL2c7IC8vIHN0eWxlIHZhbHVlcyBzaG91bGRuJ3QgY29udGFpbiBhIHNlbWljb2xvblxuXG4gIHZhciBiYWRTdHlsZVZhbHVlV2l0aFNlbWljb2xvblBhdHRlcm4gPSAvO1xccyokLztcbiAgdmFyIHdhcm5lZFN0eWxlTmFtZXMgPSB7fTtcbiAgdmFyIHdhcm5lZFN0eWxlVmFsdWVzID0ge307XG4gIHZhciB3YXJuZWRGb3JOYU5WYWx1ZSA9IGZhbHNlO1xuICB2YXIgd2FybmVkRm9ySW5maW5pdHlWYWx1ZSA9IGZhbHNlO1xuXG4gIHZhciBjYW1lbGl6ZSA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoaHlwaGVuUGF0dGVybiwgZnVuY3Rpb24gKF8sIGNoYXJhY3Rlcikge1xuICAgICAgcmV0dXJuIGNoYXJhY3Rlci50b1VwcGVyQ2FzZSgpO1xuICAgIH0pO1xuICB9O1xuXG4gIHZhciB3YXJuSHlwaGVuYXRlZFN0eWxlTmFtZSA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgaWYgKHdhcm5lZFN0eWxlTmFtZXMuaGFzT3duUHJvcGVydHkobmFtZSkgJiYgd2FybmVkU3R5bGVOYW1lc1tuYW1lXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdhcm5lZFN0eWxlTmFtZXNbbmFtZV0gPSB0cnVlO1xuXG4gICAgZXJyb3IoJ1Vuc3VwcG9ydGVkIHN0eWxlIHByb3BlcnR5ICVzLiBEaWQgeW91IG1lYW4gJXM/JywgbmFtZSwgLy8gQXMgQW5kaSBTbWl0aCBzdWdnZXN0c1xuICAgIC8vIChodHRwOi8vd3d3LmFuZGlzbWl0aC5jb20vYmxvZy8yMDEyLzAyL21vZGVybml6ci1wcmVmaXhlZC8pLCBhbiBgLW1zYCBwcmVmaXhcbiAgICAvLyBpcyBjb252ZXJ0ZWQgdG8gbG93ZXJjYXNlIGBtc2AuXG4gICAgY2FtZWxpemUobmFtZS5yZXBsYWNlKG1zUGF0dGVybiQxLCAnbXMtJykpKTtcbiAgfTtcblxuICB2YXIgd2FybkJhZFZlbmRvcmVkU3R5bGVOYW1lID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICBpZiAod2FybmVkU3R5bGVOYW1lcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSAmJiB3YXJuZWRTdHlsZU5hbWVzW25hbWVdKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgd2FybmVkU3R5bGVOYW1lc1tuYW1lXSA9IHRydWU7XG5cbiAgICBlcnJvcignVW5zdXBwb3J0ZWQgdmVuZG9yLXByZWZpeGVkIHN0eWxlIHByb3BlcnR5ICVzLiBEaWQgeW91IG1lYW4gJXM/JywgbmFtZSwgbmFtZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIG5hbWUuc2xpY2UoMSkpO1xuICB9O1xuXG4gIHZhciB3YXJuU3R5bGVWYWx1ZVdpdGhTZW1pY29sb24gPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHtcbiAgICBpZiAod2FybmVkU3R5bGVWYWx1ZXMuaGFzT3duUHJvcGVydHkodmFsdWUpICYmIHdhcm5lZFN0eWxlVmFsdWVzW3ZhbHVlXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdhcm5lZFN0eWxlVmFsdWVzW3ZhbHVlXSA9IHRydWU7XG5cbiAgICBlcnJvcihcIlN0eWxlIHByb3BlcnR5IHZhbHVlcyBzaG91bGRuJ3QgY29udGFpbiBhIHNlbWljb2xvbi4gXCIgKyAnVHJ5IFwiJXM6ICVzXCIgaW5zdGVhZC4nLCBuYW1lLCB2YWx1ZS5yZXBsYWNlKGJhZFN0eWxlVmFsdWVXaXRoU2VtaWNvbG9uUGF0dGVybiwgJycpKTtcbiAgfTtcblxuICB2YXIgd2FyblN0eWxlVmFsdWVJc05hTiA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICAgIGlmICh3YXJuZWRGb3JOYU5WYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdhcm5lZEZvck5hTlZhbHVlID0gdHJ1ZTtcblxuICAgIGVycm9yKCdgTmFOYCBpcyBhbiBpbnZhbGlkIHZhbHVlIGZvciB0aGUgYCVzYCBjc3Mgc3R5bGUgcHJvcGVydHkuJywgbmFtZSk7XG4gIH07XG5cbiAgdmFyIHdhcm5TdHlsZVZhbHVlSXNJbmZpbml0eSA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICAgIGlmICh3YXJuZWRGb3JJbmZpbml0eVZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgd2FybmVkRm9ySW5maW5pdHlWYWx1ZSA9IHRydWU7XG5cbiAgICBlcnJvcignYEluZmluaXR5YCBpcyBhbiBpbnZhbGlkIHZhbHVlIGZvciB0aGUgYCVzYCBjc3Mgc3R5bGUgcHJvcGVydHkuJywgbmFtZSk7XG4gIH07XG5cbiAgd2FyblZhbGlkU3R5bGUgPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHtcbiAgICBpZiAobmFtZS5pbmRleE9mKCctJykgPiAtMSkge1xuICAgICAgd2Fybkh5cGhlbmF0ZWRTdHlsZU5hbWUobmFtZSk7XG4gICAgfSBlbHNlIGlmIChiYWRWZW5kb3JlZFN0eWxlTmFtZVBhdHRlcm4udGVzdChuYW1lKSkge1xuICAgICAgd2FybkJhZFZlbmRvcmVkU3R5bGVOYW1lKG5hbWUpO1xuICAgIH0gZWxzZSBpZiAoYmFkU3R5bGVWYWx1ZVdpdGhTZW1pY29sb25QYXR0ZXJuLnRlc3QodmFsdWUpKSB7XG4gICAgICB3YXJuU3R5bGVWYWx1ZVdpdGhTZW1pY29sb24obmFtZSwgdmFsdWUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICBpZiAoaXNOYU4odmFsdWUpKSB7XG4gICAgICAgIHdhcm5TdHlsZVZhbHVlSXNOYU4obmFtZSwgdmFsdWUpO1xuICAgICAgfSBlbHNlIGlmICghaXNGaW5pdGUodmFsdWUpKSB7XG4gICAgICAgIHdhcm5TdHlsZVZhbHVlSXNJbmZpbml0eShuYW1lLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuXG52YXIgd2FyblZhbGlkU3R5bGUkMSA9IHdhcm5WYWxpZFN0eWxlO1xuXG4vKipcbiAqIE9wZXJhdGlvbnMgZm9yIGRlYWxpbmcgd2l0aCBDU1MgcHJvcGVydGllcy5cbiAqL1xuXG4vKipcbiAqIFRoaXMgY3JlYXRlcyBhIHN0cmluZyB0aGF0IGlzIGV4cGVjdGVkIHRvIGJlIGVxdWl2YWxlbnQgdG8gdGhlIHN0eWxlXG4gKiBhdHRyaWJ1dGUgZ2VuZXJhdGVkIGJ5IHNlcnZlci1zaWRlIHJlbmRlcmluZy4gSXQgYnktcGFzc2VzIHdhcm5pbmdzIGFuZFxuICogc2VjdXJpdHkgY2hlY2tzIHNvIGl0J3Mgbm90IHNhZmUgdG8gdXNlIHRoaXMgdmFsdWUgZm9yIGFueXRoaW5nIG90aGVyIHRoYW5cbiAqIGNvbXBhcmlzb24uIEl0IGlzIG9ubHkgdXNlZCBpbiBERVYgZm9yIFNTUiB2YWxpZGF0aW9uLlxuICovXG5cbmZ1bmN0aW9uIGNyZWF0ZURhbmdlcm91c1N0cmluZ0ZvclN0eWxlcyhzdHlsZXMpIHtcbiAge1xuICAgIHZhciBzZXJpYWxpemVkID0gJyc7XG4gICAgdmFyIGRlbGltaXRlciA9ICcnO1xuXG4gICAgZm9yICh2YXIgc3R5bGVOYW1lIGluIHN0eWxlcykge1xuICAgICAgaWYgKCFzdHlsZXMuaGFzT3duUHJvcGVydHkoc3R5bGVOYW1lKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIHN0eWxlVmFsdWUgPSBzdHlsZXNbc3R5bGVOYW1lXTtcblxuICAgICAgaWYgKHN0eWxlVmFsdWUgIT0gbnVsbCkge1xuICAgICAgICB2YXIgaXNDdXN0b21Qcm9wZXJ0eSA9IHN0eWxlTmFtZS5pbmRleE9mKCctLScpID09PSAwO1xuICAgICAgICBzZXJpYWxpemVkICs9IGRlbGltaXRlciArIChpc0N1c3RvbVByb3BlcnR5ID8gc3R5bGVOYW1lIDogaHlwaGVuYXRlU3R5bGVOYW1lKHN0eWxlTmFtZSkpICsgJzonO1xuICAgICAgICBzZXJpYWxpemVkICs9IGRhbmdlcm91c1N0eWxlVmFsdWUoc3R5bGVOYW1lLCBzdHlsZVZhbHVlLCBpc0N1c3RvbVByb3BlcnR5KTtcbiAgICAgICAgZGVsaW1pdGVyID0gJzsnO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzZXJpYWxpemVkIHx8IG51bGw7XG4gIH1cbn1cbi8qKlxuICogU2V0cyB0aGUgdmFsdWUgZm9yIG11bHRpcGxlIHN0eWxlcyBvbiBhIG5vZGUuICBJZiBhIHZhbHVlIGlzIHNwZWNpZmllZCBhc1xuICogJycgKGVtcHR5IHN0cmluZyksIHRoZSBjb3JyZXNwb25kaW5nIHN0eWxlIHByb3BlcnR5IHdpbGwgYmUgdW5zZXQuXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fSBub2RlXG4gKiBAcGFyYW0ge29iamVjdH0gc3R5bGVzXG4gKi9cblxuZnVuY3Rpb24gc2V0VmFsdWVGb3JTdHlsZXMobm9kZSwgc3R5bGVzKSB7XG4gIHZhciBzdHlsZSA9IG5vZGUuc3R5bGU7XG5cbiAgZm9yICh2YXIgc3R5bGVOYW1lIGluIHN0eWxlcykge1xuICAgIGlmICghc3R5bGVzLmhhc093blByb3BlcnR5KHN0eWxlTmFtZSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHZhciBpc0N1c3RvbVByb3BlcnR5ID0gc3R5bGVOYW1lLmluZGV4T2YoJy0tJykgPT09IDA7XG5cbiAgICB7XG4gICAgICBpZiAoIWlzQ3VzdG9tUHJvcGVydHkpIHtcbiAgICAgICAgd2FyblZhbGlkU3R5bGUkMShzdHlsZU5hbWUsIHN0eWxlc1tzdHlsZU5hbWVdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc3R5bGVWYWx1ZSA9IGRhbmdlcm91c1N0eWxlVmFsdWUoc3R5bGVOYW1lLCBzdHlsZXNbc3R5bGVOYW1lXSwgaXNDdXN0b21Qcm9wZXJ0eSk7XG5cbiAgICBpZiAoc3R5bGVOYW1lID09PSAnZmxvYXQnKSB7XG4gICAgICBzdHlsZU5hbWUgPSAnY3NzRmxvYXQnO1xuICAgIH1cblxuICAgIGlmIChpc0N1c3RvbVByb3BlcnR5KSB7XG4gICAgICBzdHlsZS5zZXRQcm9wZXJ0eShzdHlsZU5hbWUsIHN0eWxlVmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHlsZVtzdHlsZU5hbWVdID0gc3R5bGVWYWx1ZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNWYWx1ZUVtcHR5KHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nIHx8IHZhbHVlID09PSAnJztcbn1cbi8qKlxuICogR2l2ZW4ge2NvbG9yOiAncmVkJywgb3ZlcmZsb3c6ICdoaWRkZW4nfSByZXR1cm5zIHtcbiAqICAgY29sb3I6ICdjb2xvcicsXG4gKiAgIG92ZXJmbG93WDogJ292ZXJmbG93JyxcbiAqICAgb3ZlcmZsb3dZOiAnb3ZlcmZsb3cnLFxuICogfS4gVGhpcyBjYW4gYmUgcmVhZCBhcyBcInRoZSBvdmVyZmxvd1kgcHJvcGVydHkgd2FzIHNldCBieSB0aGUgb3ZlcmZsb3dcbiAqIHNob3J0aGFuZFwiLiBUaGF0IGlzLCB0aGUgdmFsdWVzIGFyZSB0aGUgcHJvcGVydHkgdGhhdCBlYWNoIHdhcyBkZXJpdmVkIGZyb20uXG4gKi9cblxuXG5mdW5jdGlvbiBleHBhbmRTaG9ydGhhbmRNYXAoc3R5bGVzKSB7XG4gIHZhciBleHBhbmRlZCA9IHt9O1xuXG4gIGZvciAodmFyIGtleSBpbiBzdHlsZXMpIHtcbiAgICB2YXIgbG9uZ2hhbmRzID0gc2hvcnRoYW5kVG9Mb25naGFuZFtrZXldIHx8IFtrZXldO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsb25naGFuZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGV4cGFuZGVkW2xvbmdoYW5kc1tpXV0gPSBrZXk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGV4cGFuZGVkO1xufVxuLyoqXG4gKiBXaGVuIG1peGluZyBzaG9ydGhhbmQgYW5kIGxvbmdoYW5kIHByb3BlcnR5IG5hbWVzLCB3ZSB3YXJuIGR1cmluZyB1cGRhdGVzIGlmXG4gKiB3ZSBleHBlY3QgYW4gaW5jb3JyZWN0IHJlc3VsdCB0byBvY2N1ci4gSW4gcGFydGljdWxhciwgd2Ugd2FybiBmb3I6XG4gKlxuICogVXBkYXRpbmcgYSBzaG9ydGhhbmQgcHJvcGVydHkgKGxvbmdoYW5kIGdldHMgb3ZlcndyaXR0ZW4pOlxuICogICB7Zm9udDogJ2ZvbycsIGZvbnRWYXJpYW50OiAnYmFyJ30gLT4ge2ZvbnQ6ICdiYXonLCBmb250VmFyaWFudDogJ2Jhcid9XG4gKiAgIGJlY29tZXMgLnN0eWxlLmZvbnQgPSAnYmF6J1xuICogUmVtb3ZpbmcgYSBzaG9ydGhhbmQgcHJvcGVydHkgKGxvbmdoYW5kIGdldHMgbG9zdCB0b28pOlxuICogICB7Zm9udDogJ2ZvbycsIGZvbnRWYXJpYW50OiAnYmFyJ30gLT4ge2ZvbnRWYXJpYW50OiAnYmFyJ31cbiAqICAgYmVjb21lcyAuc3R5bGUuZm9udCA9ICcnXG4gKiBSZW1vdmluZyBhIGxvbmdoYW5kIHByb3BlcnR5IChzaG91bGQgcmV2ZXJ0IHRvIHNob3J0aGFuZDsgZG9lc24ndCk6XG4gKiAgIHtmb250OiAnZm9vJywgZm9udFZhcmlhbnQ6ICdiYXInfSAtPiB7Zm9udDogJ2Zvbyd9XG4gKiAgIGJlY29tZXMgLnN0eWxlLmZvbnRWYXJpYW50ID0gJydcbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlU2hvcnRoYW5kUHJvcGVydHlDb2xsaXNpb25JbkRldihzdHlsZVVwZGF0ZXMsIG5leHRTdHlsZXMpIHtcbiAge1xuICAgIGlmICghbmV4dFN0eWxlcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBleHBhbmRlZFVwZGF0ZXMgPSBleHBhbmRTaG9ydGhhbmRNYXAoc3R5bGVVcGRhdGVzKTtcbiAgICB2YXIgZXhwYW5kZWRTdHlsZXMgPSBleHBhbmRTaG9ydGhhbmRNYXAobmV4dFN0eWxlcyk7XG4gICAgdmFyIHdhcm5lZEFib3V0ID0ge307XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gZXhwYW5kZWRVcGRhdGVzKSB7XG4gICAgICB2YXIgb3JpZ2luYWxLZXkgPSBleHBhbmRlZFVwZGF0ZXNba2V5XTtcbiAgICAgIHZhciBjb3JyZWN0T3JpZ2luYWxLZXkgPSBleHBhbmRlZFN0eWxlc1trZXldO1xuXG4gICAgICBpZiAoY29ycmVjdE9yaWdpbmFsS2V5ICYmIG9yaWdpbmFsS2V5ICE9PSBjb3JyZWN0T3JpZ2luYWxLZXkpIHtcbiAgICAgICAgdmFyIHdhcm5pbmdLZXkgPSBvcmlnaW5hbEtleSArICcsJyArIGNvcnJlY3RPcmlnaW5hbEtleTtcblxuICAgICAgICBpZiAod2FybmVkQWJvdXRbd2FybmluZ0tleV0pIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHdhcm5lZEFib3V0W3dhcm5pbmdLZXldID0gdHJ1ZTtcblxuICAgICAgICBlcnJvcignJXMgYSBzdHlsZSBwcm9wZXJ0eSBkdXJpbmcgcmVyZW5kZXIgKCVzKSB3aGVuIGEgJyArICdjb25mbGljdGluZyBwcm9wZXJ0eSBpcyBzZXQgKCVzKSBjYW4gbGVhZCB0byBzdHlsaW5nIGJ1Z3MuIFRvICcgKyBcImF2b2lkIHRoaXMsIGRvbid0IG1peCBzaG9ydGhhbmQgYW5kIG5vbi1zaG9ydGhhbmQgcHJvcGVydGllcyBcIiArICdmb3IgdGhlIHNhbWUgdmFsdWU7IGluc3RlYWQsIHJlcGxhY2UgdGhlIHNob3J0aGFuZCB3aXRoICcgKyAnc2VwYXJhdGUgdmFsdWVzLicsIGlzVmFsdWVFbXB0eShzdHlsZVVwZGF0ZXNbb3JpZ2luYWxLZXldKSA/ICdSZW1vdmluZycgOiAnVXBkYXRpbmcnLCBvcmlnaW5hbEtleSwgY29ycmVjdE9yaWdpbmFsS2V5KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8gRm9yIEhUTUwsIGNlcnRhaW4gdGFncyBzaG91bGQgb21pdCB0aGVpciBjbG9zZSB0YWcuIFdlIGtlZXAgYSBsaXN0IGZvclxuLy8gdGhvc2Ugc3BlY2lhbC1jYXNlIHRhZ3MuXG52YXIgb21pdHRlZENsb3NlVGFncyA9IHtcbiAgYXJlYTogdHJ1ZSxcbiAgYmFzZTogdHJ1ZSxcbiAgYnI6IHRydWUsXG4gIGNvbDogdHJ1ZSxcbiAgZW1iZWQ6IHRydWUsXG4gIGhyOiB0cnVlLFxuICBpbWc6IHRydWUsXG4gIGlucHV0OiB0cnVlLFxuICBrZXlnZW46IHRydWUsXG4gIGxpbms6IHRydWUsXG4gIG1ldGE6IHRydWUsXG4gIHBhcmFtOiB0cnVlLFxuICBzb3VyY2U6IHRydWUsXG4gIHRyYWNrOiB0cnVlLFxuICB3YnI6IHRydWUgLy8gTk9URTogbWVudWl0ZW0ncyBjbG9zZSB0YWcgc2hvdWxkIGJlIG9taXR0ZWQsIGJ1dCB0aGF0IGNhdXNlcyBwcm9ibGVtcy5cblxufTtcblxuLy8gYG9taXR0ZWRDbG9zZVRhZ3NgIGV4Y2VwdCB0aGF0IGBtZW51aXRlbWAgc2hvdWxkIHN0aWxsIGhhdmUgaXRzIGNsb3NpbmcgdGFnLlxuXG52YXIgdm9pZEVsZW1lbnRUYWdzID0gX2Fzc2lnbih7XG4gIG1lbnVpdGVtOiB0cnVlXG59LCBvbWl0dGVkQ2xvc2VUYWdzKTtcblxudmFyIEhUTUwgPSAnX19odG1sJztcblxuZnVuY3Rpb24gYXNzZXJ0VmFsaWRQcm9wcyh0YWcsIHByb3BzKSB7XG4gIGlmICghcHJvcHMpIHtcbiAgICByZXR1cm47XG4gIH0gLy8gTm90ZSB0aGUgdXNlIG9mIGA9PWAgd2hpY2ggY2hlY2tzIGZvciBudWxsIG9yIHVuZGVmaW5lZC5cblxuXG4gIGlmICh2b2lkRWxlbWVudFRhZ3NbdGFnXSkge1xuICAgIGlmICghKHByb3BzLmNoaWxkcmVuID09IG51bGwgJiYgcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgPT0gbnVsbCkpIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIHRhZyArIFwiIGlzIGEgdm9pZCBlbGVtZW50IHRhZyBhbmQgbXVzdCBuZWl0aGVyIGhhdmUgYGNoaWxkcmVuYCBub3IgdXNlIGBkYW5nZXJvdXNseVNldElubmVySFRNTGAuXCIgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAocHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgIT0gbnVsbCkge1xuICAgIGlmICghKHByb3BzLmNoaWxkcmVuID09IG51bGwpKSB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIkNhbiBvbmx5IHNldCBvbmUgb2YgYGNoaWxkcmVuYCBvciBgcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgLlwiICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCEodHlwZW9mIHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MID09PSAnb2JqZWN0JyAmJiBIVE1MIGluIHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MKSkge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJgcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgIG11c3QgYmUgaW4gdGhlIGZvcm0gYHtfX2h0bWw6IC4uLn1gLiBQbGVhc2UgdmlzaXQgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2Rhbmdlcm91c2x5LXNldC1pbm5lci1odG1sIGZvciBtb3JlIGluZm9ybWF0aW9uLlwiICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAge1xuICAgIGlmICghcHJvcHMuc3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nICYmIHByb3BzLmNvbnRlbnRFZGl0YWJsZSAmJiBwcm9wcy5jaGlsZHJlbiAhPSBudWxsKSB7XG4gICAgICBlcnJvcignQSBjb21wb25lbnQgaXMgYGNvbnRlbnRFZGl0YWJsZWAgYW5kIGNvbnRhaW5zIGBjaGlsZHJlbmAgbWFuYWdlZCBieSAnICsgJ1JlYWN0LiBJdCBpcyBub3cgeW91ciByZXNwb25zaWJpbGl0eSB0byBndWFyYW50ZWUgdGhhdCBub25lIG9mICcgKyAndGhvc2Ugbm9kZXMgYXJlIHVuZXhwZWN0ZWRseSBtb2RpZmllZCBvciBkdXBsaWNhdGVkLiBUaGlzIGlzICcgKyAncHJvYmFibHkgbm90IGludGVudGlvbmFsLicpO1xuICAgIH1cbiAgfVxuXG4gIGlmICghKHByb3BzLnN0eWxlID09IG51bGwgfHwgdHlwZW9mIHByb3BzLnN0eWxlID09PSAnb2JqZWN0JykpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJUaGUgYHN0eWxlYCBwcm9wIGV4cGVjdHMgYSBtYXBwaW5nIGZyb20gc3R5bGUgcHJvcGVydGllcyB0byB2YWx1ZXMsIG5vdCBhIHN0cmluZy4gRm9yIGV4YW1wbGUsIHN0eWxlPXt7bWFyZ2luUmlnaHQ6IHNwYWNpbmcgKyAnZW0nfX0gd2hlbiB1c2luZyBKU1guXCIgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNDdXN0b21Db21wb25lbnQodGFnTmFtZSwgcHJvcHMpIHtcbiAgaWYgKHRhZ05hbWUuaW5kZXhPZignLScpID09PSAtMSkge1xuICAgIHJldHVybiB0eXBlb2YgcHJvcHMuaXMgPT09ICdzdHJpbmcnO1xuICB9XG5cbiAgc3dpdGNoICh0YWdOYW1lKSB7XG4gICAgLy8gVGhlc2UgYXJlIHJlc2VydmVkIFNWRyBhbmQgTWF0aE1MIGVsZW1lbnRzLlxuICAgIC8vIFdlIGRvbid0IG1pbmQgdGhpcyBsaXN0IHRvbyBtdWNoIGJlY2F1c2Ugd2UgZXhwZWN0IGl0IHRvIG5ldmVyIGdyb3cuXG4gICAgLy8gVGhlIGFsdGVybmF0aXZlIGlzIHRvIHRyYWNrIHRoZSBuYW1lc3BhY2UgaW4gYSBmZXcgcGxhY2VzIHdoaWNoIGlzIGNvbnZvbHV0ZWQuXG4gICAgLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmNvbXBvbmVudHMvc3BlYy9jdXN0b20vI2N1c3RvbS1lbGVtZW50cy1jb3JlLWNvbmNlcHRzXG4gICAgY2FzZSAnYW5ub3RhdGlvbi14bWwnOlxuICAgIGNhc2UgJ2NvbG9yLXByb2ZpbGUnOlxuICAgIGNhc2UgJ2ZvbnQtZmFjZSc6XG4gICAgY2FzZSAnZm9udC1mYWNlLXNyYyc6XG4gICAgY2FzZSAnZm9udC1mYWNlLXVyaSc6XG4gICAgY2FzZSAnZm9udC1mYWNlLWZvcm1hdCc6XG4gICAgY2FzZSAnZm9udC1mYWNlLW5hbWUnOlxuICAgIGNhc2UgJ21pc3NpbmctZ2x5cGgnOlxuICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbi8vIFdoZW4gYWRkaW5nIGF0dHJpYnV0ZXMgdG8gdGhlIEhUTUwgb3IgU1ZHIGFsbG93ZWQgYXR0cmlidXRlIGxpc3QsIGJlIHN1cmUgdG9cbi8vIGFsc28gYWRkIHRoZW0gdG8gdGhpcyBtb2R1bGUgdG8gZW5zdXJlIGNhc2luZyBhbmQgaW5jb3JyZWN0IG5hbWVcbi8vIHdhcm5pbmdzLlxudmFyIHBvc3NpYmxlU3RhbmRhcmROYW1lcyA9IHtcbiAgLy8gSFRNTFxuICBhY2NlcHQ6ICdhY2NlcHQnLFxuICBhY2NlcHRjaGFyc2V0OiAnYWNjZXB0Q2hhcnNldCcsXG4gICdhY2NlcHQtY2hhcnNldCc6ICdhY2NlcHRDaGFyc2V0JyxcbiAgYWNjZXNza2V5OiAnYWNjZXNzS2V5JyxcbiAgYWN0aW9uOiAnYWN0aW9uJyxcbiAgYWxsb3dmdWxsc2NyZWVuOiAnYWxsb3dGdWxsU2NyZWVuJyxcbiAgYWx0OiAnYWx0JyxcbiAgYXM6ICdhcycsXG4gIGFzeW5jOiAnYXN5bmMnLFxuICBhdXRvY2FwaXRhbGl6ZTogJ2F1dG9DYXBpdGFsaXplJyxcbiAgYXV0b2NvbXBsZXRlOiAnYXV0b0NvbXBsZXRlJyxcbiAgYXV0b2NvcnJlY3Q6ICdhdXRvQ29ycmVjdCcsXG4gIGF1dG9mb2N1czogJ2F1dG9Gb2N1cycsXG4gIGF1dG9wbGF5OiAnYXV0b1BsYXknLFxuICBhdXRvc2F2ZTogJ2F1dG9TYXZlJyxcbiAgY2FwdHVyZTogJ2NhcHR1cmUnLFxuICBjZWxscGFkZGluZzogJ2NlbGxQYWRkaW5nJyxcbiAgY2VsbHNwYWNpbmc6ICdjZWxsU3BhY2luZycsXG4gIGNoYWxsZW5nZTogJ2NoYWxsZW5nZScsXG4gIGNoYXJzZXQ6ICdjaGFyU2V0JyxcbiAgY2hlY2tlZDogJ2NoZWNrZWQnLFxuICBjaGlsZHJlbjogJ2NoaWxkcmVuJyxcbiAgY2l0ZTogJ2NpdGUnLFxuICBjbGFzczogJ2NsYXNzTmFtZScsXG4gIGNsYXNzaWQ6ICdjbGFzc0lEJyxcbiAgY2xhc3NuYW1lOiAnY2xhc3NOYW1lJyxcbiAgY29sczogJ2NvbHMnLFxuICBjb2xzcGFuOiAnY29sU3BhbicsXG4gIGNvbnRlbnQ6ICdjb250ZW50JyxcbiAgY29udGVudGVkaXRhYmxlOiAnY29udGVudEVkaXRhYmxlJyxcbiAgY29udGV4dG1lbnU6ICdjb250ZXh0TWVudScsXG4gIGNvbnRyb2xzOiAnY29udHJvbHMnLFxuICBjb250cm9sc2xpc3Q6ICdjb250cm9sc0xpc3QnLFxuICBjb29yZHM6ICdjb29yZHMnLFxuICBjcm9zc29yaWdpbjogJ2Nyb3NzT3JpZ2luJyxcbiAgZGFuZ2Vyb3VzbHlzZXRpbm5lcmh0bWw6ICdkYW5nZXJvdXNseVNldElubmVySFRNTCcsXG4gIGRhdGE6ICdkYXRhJyxcbiAgZGF0ZXRpbWU6ICdkYXRlVGltZScsXG4gIGRlZmF1bHQ6ICdkZWZhdWx0JyxcbiAgZGVmYXVsdGNoZWNrZWQ6ICdkZWZhdWx0Q2hlY2tlZCcsXG4gIGRlZmF1bHR2YWx1ZTogJ2RlZmF1bHRWYWx1ZScsXG4gIGRlZmVyOiAnZGVmZXInLFxuICBkaXI6ICdkaXInLFxuICBkaXNhYmxlZDogJ2Rpc2FibGVkJyxcbiAgZGlzYWJsZXBpY3R1cmVpbnBpY3R1cmU6ICdkaXNhYmxlUGljdHVyZUluUGljdHVyZScsXG4gIGRpc2FibGVyZW1vdGVwbGF5YmFjazogJ2Rpc2FibGVSZW1vdGVQbGF5YmFjaycsXG4gIGRvd25sb2FkOiAnZG93bmxvYWQnLFxuICBkcmFnZ2FibGU6ICdkcmFnZ2FibGUnLFxuICBlbmN0eXBlOiAnZW5jVHlwZScsXG4gIGVudGVya2V5aGludDogJ2VudGVyS2V5SGludCcsXG4gIGZvcjogJ2h0bWxGb3InLFxuICBmb3JtOiAnZm9ybScsXG4gIGZvcm1tZXRob2Q6ICdmb3JtTWV0aG9kJyxcbiAgZm9ybWFjdGlvbjogJ2Zvcm1BY3Rpb24nLFxuICBmb3JtZW5jdHlwZTogJ2Zvcm1FbmNUeXBlJyxcbiAgZm9ybW5vdmFsaWRhdGU6ICdmb3JtTm9WYWxpZGF0ZScsXG4gIGZvcm10YXJnZXQ6ICdmb3JtVGFyZ2V0JyxcbiAgZnJhbWVib3JkZXI6ICdmcmFtZUJvcmRlcicsXG4gIGhlYWRlcnM6ICdoZWFkZXJzJyxcbiAgaGVpZ2h0OiAnaGVpZ2h0JyxcbiAgaGlkZGVuOiAnaGlkZGVuJyxcbiAgaGlnaDogJ2hpZ2gnLFxuICBocmVmOiAnaHJlZicsXG4gIGhyZWZsYW5nOiAnaHJlZkxhbmcnLFxuICBodG1sZm9yOiAnaHRtbEZvcicsXG4gIGh0dHBlcXVpdjogJ2h0dHBFcXVpdicsXG4gICdodHRwLWVxdWl2JzogJ2h0dHBFcXVpdicsXG4gIGljb246ICdpY29uJyxcbiAgaWQ6ICdpZCcsXG4gIGlubmVyaHRtbDogJ2lubmVySFRNTCcsXG4gIGlucHV0bW9kZTogJ2lucHV0TW9kZScsXG4gIGludGVncml0eTogJ2ludGVncml0eScsXG4gIGlzOiAnaXMnLFxuICBpdGVtaWQ6ICdpdGVtSUQnLFxuICBpdGVtcHJvcDogJ2l0ZW1Qcm9wJyxcbiAgaXRlbXJlZjogJ2l0ZW1SZWYnLFxuICBpdGVtc2NvcGU6ICdpdGVtU2NvcGUnLFxuICBpdGVtdHlwZTogJ2l0ZW1UeXBlJyxcbiAga2V5cGFyYW1zOiAna2V5UGFyYW1zJyxcbiAga2V5dHlwZTogJ2tleVR5cGUnLFxuICBraW5kOiAna2luZCcsXG4gIGxhYmVsOiAnbGFiZWwnLFxuICBsYW5nOiAnbGFuZycsXG4gIGxpc3Q6ICdsaXN0JyxcbiAgbG9vcDogJ2xvb3AnLFxuICBsb3c6ICdsb3cnLFxuICBtYW5pZmVzdDogJ21hbmlmZXN0JyxcbiAgbWFyZ2lud2lkdGg6ICdtYXJnaW5XaWR0aCcsXG4gIG1hcmdpbmhlaWdodDogJ21hcmdpbkhlaWdodCcsXG4gIG1heDogJ21heCcsXG4gIG1heGxlbmd0aDogJ21heExlbmd0aCcsXG4gIG1lZGlhOiAnbWVkaWEnLFxuICBtZWRpYWdyb3VwOiAnbWVkaWFHcm91cCcsXG4gIG1ldGhvZDogJ21ldGhvZCcsXG4gIG1pbjogJ21pbicsXG4gIG1pbmxlbmd0aDogJ21pbkxlbmd0aCcsXG4gIG11bHRpcGxlOiAnbXVsdGlwbGUnLFxuICBtdXRlZDogJ211dGVkJyxcbiAgbmFtZTogJ25hbWUnLFxuICBub21vZHVsZTogJ25vTW9kdWxlJyxcbiAgbm9uY2U6ICdub25jZScsXG4gIG5vdmFsaWRhdGU6ICdub1ZhbGlkYXRlJyxcbiAgb3BlbjogJ29wZW4nLFxuICBvcHRpbXVtOiAnb3B0aW11bScsXG4gIHBhdHRlcm46ICdwYXR0ZXJuJyxcbiAgcGxhY2Vob2xkZXI6ICdwbGFjZWhvbGRlcicsXG4gIHBsYXlzaW5saW5lOiAncGxheXNJbmxpbmUnLFxuICBwb3N0ZXI6ICdwb3N0ZXInLFxuICBwcmVsb2FkOiAncHJlbG9hZCcsXG4gIHByb2ZpbGU6ICdwcm9maWxlJyxcbiAgcmFkaW9ncm91cDogJ3JhZGlvR3JvdXAnLFxuICByZWFkb25seTogJ3JlYWRPbmx5JyxcbiAgcmVmZXJyZXJwb2xpY3k6ICdyZWZlcnJlclBvbGljeScsXG4gIHJlbDogJ3JlbCcsXG4gIHJlcXVpcmVkOiAncmVxdWlyZWQnLFxuICByZXZlcnNlZDogJ3JldmVyc2VkJyxcbiAgcm9sZTogJ3JvbGUnLFxuICByb3dzOiAncm93cycsXG4gIHJvd3NwYW46ICdyb3dTcGFuJyxcbiAgc2FuZGJveDogJ3NhbmRib3gnLFxuICBzY29wZTogJ3Njb3BlJyxcbiAgc2NvcGVkOiAnc2NvcGVkJyxcbiAgc2Nyb2xsaW5nOiAnc2Nyb2xsaW5nJyxcbiAgc2VhbWxlc3M6ICdzZWFtbGVzcycsXG4gIHNlbGVjdGVkOiAnc2VsZWN0ZWQnLFxuICBzaGFwZTogJ3NoYXBlJyxcbiAgc2l6ZTogJ3NpemUnLFxuICBzaXplczogJ3NpemVzJyxcbiAgc3BhbjogJ3NwYW4nLFxuICBzcGVsbGNoZWNrOiAnc3BlbGxDaGVjaycsXG4gIHNyYzogJ3NyYycsXG4gIHNyY2RvYzogJ3NyY0RvYycsXG4gIHNyY2xhbmc6ICdzcmNMYW5nJyxcbiAgc3Jjc2V0OiAnc3JjU2V0JyxcbiAgc3RhcnQ6ICdzdGFydCcsXG4gIHN0ZXA6ICdzdGVwJyxcbiAgc3R5bGU6ICdzdHlsZScsXG4gIHN1bW1hcnk6ICdzdW1tYXJ5JyxcbiAgdGFiaW5kZXg6ICd0YWJJbmRleCcsXG4gIHRhcmdldDogJ3RhcmdldCcsXG4gIHRpdGxlOiAndGl0bGUnLFxuICB0eXBlOiAndHlwZScsXG4gIHVzZW1hcDogJ3VzZU1hcCcsXG4gIHZhbHVlOiAndmFsdWUnLFxuICB3aWR0aDogJ3dpZHRoJyxcbiAgd21vZGU6ICd3bW9kZScsXG4gIHdyYXA6ICd3cmFwJyxcbiAgLy8gU1ZHXG4gIGFib3V0OiAnYWJvdXQnLFxuICBhY2NlbnRoZWlnaHQ6ICdhY2NlbnRIZWlnaHQnLFxuICAnYWNjZW50LWhlaWdodCc6ICdhY2NlbnRIZWlnaHQnLFxuICBhY2N1bXVsYXRlOiAnYWNjdW11bGF0ZScsXG4gIGFkZGl0aXZlOiAnYWRkaXRpdmUnLFxuICBhbGlnbm1lbnRiYXNlbGluZTogJ2FsaWdubWVudEJhc2VsaW5lJyxcbiAgJ2FsaWdubWVudC1iYXNlbGluZSc6ICdhbGlnbm1lbnRCYXNlbGluZScsXG4gIGFsbG93cmVvcmRlcjogJ2FsbG93UmVvcmRlcicsXG4gIGFscGhhYmV0aWM6ICdhbHBoYWJldGljJyxcbiAgYW1wbGl0dWRlOiAnYW1wbGl0dWRlJyxcbiAgYXJhYmljZm9ybTogJ2FyYWJpY0Zvcm0nLFxuICAnYXJhYmljLWZvcm0nOiAnYXJhYmljRm9ybScsXG4gIGFzY2VudDogJ2FzY2VudCcsXG4gIGF0dHJpYnV0ZW5hbWU6ICdhdHRyaWJ1dGVOYW1lJyxcbiAgYXR0cmlidXRldHlwZTogJ2F0dHJpYnV0ZVR5cGUnLFxuICBhdXRvcmV2ZXJzZTogJ2F1dG9SZXZlcnNlJyxcbiAgYXppbXV0aDogJ2F6aW11dGgnLFxuICBiYXNlZnJlcXVlbmN5OiAnYmFzZUZyZXF1ZW5jeScsXG4gIGJhc2VsaW5lc2hpZnQ6ICdiYXNlbGluZVNoaWZ0JyxcbiAgJ2Jhc2VsaW5lLXNoaWZ0JzogJ2Jhc2VsaW5lU2hpZnQnLFxuICBiYXNlcHJvZmlsZTogJ2Jhc2VQcm9maWxlJyxcbiAgYmJveDogJ2Jib3gnLFxuICBiZWdpbjogJ2JlZ2luJyxcbiAgYmlhczogJ2JpYXMnLFxuICBieTogJ2J5JyxcbiAgY2FsY21vZGU6ICdjYWxjTW9kZScsXG4gIGNhcGhlaWdodDogJ2NhcEhlaWdodCcsXG4gICdjYXAtaGVpZ2h0JzogJ2NhcEhlaWdodCcsXG4gIGNsaXA6ICdjbGlwJyxcbiAgY2xpcHBhdGg6ICdjbGlwUGF0aCcsXG4gICdjbGlwLXBhdGgnOiAnY2xpcFBhdGgnLFxuICBjbGlwcGF0aHVuaXRzOiAnY2xpcFBhdGhVbml0cycsXG4gIGNsaXBydWxlOiAnY2xpcFJ1bGUnLFxuICAnY2xpcC1ydWxlJzogJ2NsaXBSdWxlJyxcbiAgY29sb3I6ICdjb2xvcicsXG4gIGNvbG9yaW50ZXJwb2xhdGlvbjogJ2NvbG9ySW50ZXJwb2xhdGlvbicsXG4gICdjb2xvci1pbnRlcnBvbGF0aW9uJzogJ2NvbG9ySW50ZXJwb2xhdGlvbicsXG4gIGNvbG9yaW50ZXJwb2xhdGlvbmZpbHRlcnM6ICdjb2xvckludGVycG9sYXRpb25GaWx0ZXJzJyxcbiAgJ2NvbG9yLWludGVycG9sYXRpb24tZmlsdGVycyc6ICdjb2xvckludGVycG9sYXRpb25GaWx0ZXJzJyxcbiAgY29sb3Jwcm9maWxlOiAnY29sb3JQcm9maWxlJyxcbiAgJ2NvbG9yLXByb2ZpbGUnOiAnY29sb3JQcm9maWxlJyxcbiAgY29sb3JyZW5kZXJpbmc6ICdjb2xvclJlbmRlcmluZycsXG4gICdjb2xvci1yZW5kZXJpbmcnOiAnY29sb3JSZW5kZXJpbmcnLFxuICBjb250ZW50c2NyaXB0dHlwZTogJ2NvbnRlbnRTY3JpcHRUeXBlJyxcbiAgY29udGVudHN0eWxldHlwZTogJ2NvbnRlbnRTdHlsZVR5cGUnLFxuICBjdXJzb3I6ICdjdXJzb3InLFxuICBjeDogJ2N4JyxcbiAgY3k6ICdjeScsXG4gIGQ6ICdkJyxcbiAgZGF0YXR5cGU6ICdkYXRhdHlwZScsXG4gIGRlY2VsZXJhdGU6ICdkZWNlbGVyYXRlJyxcbiAgZGVzY2VudDogJ2Rlc2NlbnQnLFxuICBkaWZmdXNlY29uc3RhbnQ6ICdkaWZmdXNlQ29uc3RhbnQnLFxuICBkaXJlY3Rpb246ICdkaXJlY3Rpb24nLFxuICBkaXNwbGF5OiAnZGlzcGxheScsXG4gIGRpdmlzb3I6ICdkaXZpc29yJyxcbiAgZG9taW5hbnRiYXNlbGluZTogJ2RvbWluYW50QmFzZWxpbmUnLFxuICAnZG9taW5hbnQtYmFzZWxpbmUnOiAnZG9taW5hbnRCYXNlbGluZScsXG4gIGR1cjogJ2R1cicsXG4gIGR4OiAnZHgnLFxuICBkeTogJ2R5JyxcbiAgZWRnZW1vZGU6ICdlZGdlTW9kZScsXG4gIGVsZXZhdGlvbjogJ2VsZXZhdGlvbicsXG4gIGVuYWJsZWJhY2tncm91bmQ6ICdlbmFibGVCYWNrZ3JvdW5kJyxcbiAgJ2VuYWJsZS1iYWNrZ3JvdW5kJzogJ2VuYWJsZUJhY2tncm91bmQnLFxuICBlbmQ6ICdlbmQnLFxuICBleHBvbmVudDogJ2V4cG9uZW50JyxcbiAgZXh0ZXJuYWxyZXNvdXJjZXNyZXF1aXJlZDogJ2V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQnLFxuICBmaWxsOiAnZmlsbCcsXG4gIGZpbGxvcGFjaXR5OiAnZmlsbE9wYWNpdHknLFxuICAnZmlsbC1vcGFjaXR5JzogJ2ZpbGxPcGFjaXR5JyxcbiAgZmlsbHJ1bGU6ICdmaWxsUnVsZScsXG4gICdmaWxsLXJ1bGUnOiAnZmlsbFJ1bGUnLFxuICBmaWx0ZXI6ICdmaWx0ZXInLFxuICBmaWx0ZXJyZXM6ICdmaWx0ZXJSZXMnLFxuICBmaWx0ZXJ1bml0czogJ2ZpbHRlclVuaXRzJyxcbiAgZmxvb2RvcGFjaXR5OiAnZmxvb2RPcGFjaXR5JyxcbiAgJ2Zsb29kLW9wYWNpdHknOiAnZmxvb2RPcGFjaXR5JyxcbiAgZmxvb2Rjb2xvcjogJ2Zsb29kQ29sb3InLFxuICAnZmxvb2QtY29sb3InOiAnZmxvb2RDb2xvcicsXG4gIGZvY3VzYWJsZTogJ2ZvY3VzYWJsZScsXG4gIGZvbnRmYW1pbHk6ICdmb250RmFtaWx5JyxcbiAgJ2ZvbnQtZmFtaWx5JzogJ2ZvbnRGYW1pbHknLFxuICBmb250c2l6ZTogJ2ZvbnRTaXplJyxcbiAgJ2ZvbnQtc2l6ZSc6ICdmb250U2l6ZScsXG4gIGZvbnRzaXplYWRqdXN0OiAnZm9udFNpemVBZGp1c3QnLFxuICAnZm9udC1zaXplLWFkanVzdCc6ICdmb250U2l6ZUFkanVzdCcsXG4gIGZvbnRzdHJldGNoOiAnZm9udFN0cmV0Y2gnLFxuICAnZm9udC1zdHJldGNoJzogJ2ZvbnRTdHJldGNoJyxcbiAgZm9udHN0eWxlOiAnZm9udFN0eWxlJyxcbiAgJ2ZvbnQtc3R5bGUnOiAnZm9udFN0eWxlJyxcbiAgZm9udHZhcmlhbnQ6ICdmb250VmFyaWFudCcsXG4gICdmb250LXZhcmlhbnQnOiAnZm9udFZhcmlhbnQnLFxuICBmb250d2VpZ2h0OiAnZm9udFdlaWdodCcsXG4gICdmb250LXdlaWdodCc6ICdmb250V2VpZ2h0JyxcbiAgZm9ybWF0OiAnZm9ybWF0JyxcbiAgZnJvbTogJ2Zyb20nLFxuICBmeDogJ2Z4JyxcbiAgZnk6ICdmeScsXG4gIGcxOiAnZzEnLFxuICBnMjogJ2cyJyxcbiAgZ2x5cGhuYW1lOiAnZ2x5cGhOYW1lJyxcbiAgJ2dseXBoLW5hbWUnOiAnZ2x5cGhOYW1lJyxcbiAgZ2x5cGhvcmllbnRhdGlvbmhvcml6b250YWw6ICdnbHlwaE9yaWVudGF0aW9uSG9yaXpvbnRhbCcsXG4gICdnbHlwaC1vcmllbnRhdGlvbi1ob3Jpem9udGFsJzogJ2dseXBoT3JpZW50YXRpb25Ib3Jpem9udGFsJyxcbiAgZ2x5cGhvcmllbnRhdGlvbnZlcnRpY2FsOiAnZ2x5cGhPcmllbnRhdGlvblZlcnRpY2FsJyxcbiAgJ2dseXBoLW9yaWVudGF0aW9uLXZlcnRpY2FsJzogJ2dseXBoT3JpZW50YXRpb25WZXJ0aWNhbCcsXG4gIGdseXBocmVmOiAnZ2x5cGhSZWYnLFxuICBncmFkaWVudHRyYW5zZm9ybTogJ2dyYWRpZW50VHJhbnNmb3JtJyxcbiAgZ3JhZGllbnR1bml0czogJ2dyYWRpZW50VW5pdHMnLFxuICBoYW5naW5nOiAnaGFuZ2luZycsXG4gIGhvcml6YWR2eDogJ2hvcml6QWR2WCcsXG4gICdob3Jpei1hZHYteCc6ICdob3JpekFkdlgnLFxuICBob3Jpem9yaWdpbng6ICdob3Jpek9yaWdpblgnLFxuICAnaG9yaXotb3JpZ2luLXgnOiAnaG9yaXpPcmlnaW5YJyxcbiAgaWRlb2dyYXBoaWM6ICdpZGVvZ3JhcGhpYycsXG4gIGltYWdlcmVuZGVyaW5nOiAnaW1hZ2VSZW5kZXJpbmcnLFxuICAnaW1hZ2UtcmVuZGVyaW5nJzogJ2ltYWdlUmVuZGVyaW5nJyxcbiAgaW4yOiAnaW4yJyxcbiAgaW46ICdpbicsXG4gIGlubGlzdDogJ2lubGlzdCcsXG4gIGludGVyY2VwdDogJ2ludGVyY2VwdCcsXG4gIGsxOiAnazEnLFxuICBrMjogJ2syJyxcbiAgazM6ICdrMycsXG4gIGs0OiAnazQnLFxuICBrOiAnaycsXG4gIGtlcm5lbG1hdHJpeDogJ2tlcm5lbE1hdHJpeCcsXG4gIGtlcm5lbHVuaXRsZW5ndGg6ICdrZXJuZWxVbml0TGVuZ3RoJyxcbiAga2VybmluZzogJ2tlcm5pbmcnLFxuICBrZXlwb2ludHM6ICdrZXlQb2ludHMnLFxuICBrZXlzcGxpbmVzOiAna2V5U3BsaW5lcycsXG4gIGtleXRpbWVzOiAna2V5VGltZXMnLFxuICBsZW5ndGhhZGp1c3Q6ICdsZW5ndGhBZGp1c3QnLFxuICBsZXR0ZXJzcGFjaW5nOiAnbGV0dGVyU3BhY2luZycsXG4gICdsZXR0ZXItc3BhY2luZyc6ICdsZXR0ZXJTcGFjaW5nJyxcbiAgbGlnaHRpbmdjb2xvcjogJ2xpZ2h0aW5nQ29sb3InLFxuICAnbGlnaHRpbmctY29sb3InOiAnbGlnaHRpbmdDb2xvcicsXG4gIGxpbWl0aW5nY29uZWFuZ2xlOiAnbGltaXRpbmdDb25lQW5nbGUnLFxuICBsb2NhbDogJ2xvY2FsJyxcbiAgbWFya2VyZW5kOiAnbWFya2VyRW5kJyxcbiAgJ21hcmtlci1lbmQnOiAnbWFya2VyRW5kJyxcbiAgbWFya2VyaGVpZ2h0OiAnbWFya2VySGVpZ2h0JyxcbiAgbWFya2VybWlkOiAnbWFya2VyTWlkJyxcbiAgJ21hcmtlci1taWQnOiAnbWFya2VyTWlkJyxcbiAgbWFya2Vyc3RhcnQ6ICdtYXJrZXJTdGFydCcsXG4gICdtYXJrZXItc3RhcnQnOiAnbWFya2VyU3RhcnQnLFxuICBtYXJrZXJ1bml0czogJ21hcmtlclVuaXRzJyxcbiAgbWFya2Vyd2lkdGg6ICdtYXJrZXJXaWR0aCcsXG4gIG1hc2s6ICdtYXNrJyxcbiAgbWFza2NvbnRlbnR1bml0czogJ21hc2tDb250ZW50VW5pdHMnLFxuICBtYXNrdW5pdHM6ICdtYXNrVW5pdHMnLFxuICBtYXRoZW1hdGljYWw6ICdtYXRoZW1hdGljYWwnLFxuICBtb2RlOiAnbW9kZScsXG4gIG51bW9jdGF2ZXM6ICdudW1PY3RhdmVzJyxcbiAgb2Zmc2V0OiAnb2Zmc2V0JyxcbiAgb3BhY2l0eTogJ29wYWNpdHknLFxuICBvcGVyYXRvcjogJ29wZXJhdG9yJyxcbiAgb3JkZXI6ICdvcmRlcicsXG4gIG9yaWVudDogJ29yaWVudCcsXG4gIG9yaWVudGF0aW9uOiAnb3JpZW50YXRpb24nLFxuICBvcmlnaW46ICdvcmlnaW4nLFxuICBvdmVyZmxvdzogJ292ZXJmbG93JyxcbiAgb3ZlcmxpbmVwb3NpdGlvbjogJ292ZXJsaW5lUG9zaXRpb24nLFxuICAnb3ZlcmxpbmUtcG9zaXRpb24nOiAnb3ZlcmxpbmVQb3NpdGlvbicsXG4gIG92ZXJsaW5ldGhpY2tuZXNzOiAnb3ZlcmxpbmVUaGlja25lc3MnLFxuICAnb3ZlcmxpbmUtdGhpY2tuZXNzJzogJ292ZXJsaW5lVGhpY2tuZXNzJyxcbiAgcGFpbnRvcmRlcjogJ3BhaW50T3JkZXInLFxuICAncGFpbnQtb3JkZXInOiAncGFpbnRPcmRlcicsXG4gIHBhbm9zZTE6ICdwYW5vc2UxJyxcbiAgJ3Bhbm9zZS0xJzogJ3Bhbm9zZTEnLFxuICBwYXRobGVuZ3RoOiAncGF0aExlbmd0aCcsXG4gIHBhdHRlcm5jb250ZW50dW5pdHM6ICdwYXR0ZXJuQ29udGVudFVuaXRzJyxcbiAgcGF0dGVybnRyYW5zZm9ybTogJ3BhdHRlcm5UcmFuc2Zvcm0nLFxuICBwYXR0ZXJudW5pdHM6ICdwYXR0ZXJuVW5pdHMnLFxuICBwb2ludGVyZXZlbnRzOiAncG9pbnRlckV2ZW50cycsXG4gICdwb2ludGVyLWV2ZW50cyc6ICdwb2ludGVyRXZlbnRzJyxcbiAgcG9pbnRzOiAncG9pbnRzJyxcbiAgcG9pbnRzYXR4OiAncG9pbnRzQXRYJyxcbiAgcG9pbnRzYXR5OiAncG9pbnRzQXRZJyxcbiAgcG9pbnRzYXR6OiAncG9pbnRzQXRaJyxcbiAgcHJlZml4OiAncHJlZml4JyxcbiAgcHJlc2VydmVhbHBoYTogJ3ByZXNlcnZlQWxwaGEnLFxuICBwcmVzZXJ2ZWFzcGVjdHJhdGlvOiAncHJlc2VydmVBc3BlY3RSYXRpbycsXG4gIHByaW1pdGl2ZXVuaXRzOiAncHJpbWl0aXZlVW5pdHMnLFxuICBwcm9wZXJ0eTogJ3Byb3BlcnR5JyxcbiAgcjogJ3InLFxuICByYWRpdXM6ICdyYWRpdXMnLFxuICByZWZ4OiAncmVmWCcsXG4gIHJlZnk6ICdyZWZZJyxcbiAgcmVuZGVyaW5naW50ZW50OiAncmVuZGVyaW5nSW50ZW50JyxcbiAgJ3JlbmRlcmluZy1pbnRlbnQnOiAncmVuZGVyaW5nSW50ZW50JyxcbiAgcmVwZWF0Y291bnQ6ICdyZXBlYXRDb3VudCcsXG4gIHJlcGVhdGR1cjogJ3JlcGVhdER1cicsXG4gIHJlcXVpcmVkZXh0ZW5zaW9uczogJ3JlcXVpcmVkRXh0ZW5zaW9ucycsXG4gIHJlcXVpcmVkZmVhdHVyZXM6ICdyZXF1aXJlZEZlYXR1cmVzJyxcbiAgcmVzb3VyY2U6ICdyZXNvdXJjZScsXG4gIHJlc3RhcnQ6ICdyZXN0YXJ0JyxcbiAgcmVzdWx0OiAncmVzdWx0JyxcbiAgcmVzdWx0czogJ3Jlc3VsdHMnLFxuICByb3RhdGU6ICdyb3RhdGUnLFxuICByeDogJ3J4JyxcbiAgcnk6ICdyeScsXG4gIHNjYWxlOiAnc2NhbGUnLFxuICBzZWN1cml0eTogJ3NlY3VyaXR5JyxcbiAgc2VlZDogJ3NlZWQnLFxuICBzaGFwZXJlbmRlcmluZzogJ3NoYXBlUmVuZGVyaW5nJyxcbiAgJ3NoYXBlLXJlbmRlcmluZyc6ICdzaGFwZVJlbmRlcmluZycsXG4gIHNsb3BlOiAnc2xvcGUnLFxuICBzcGFjaW5nOiAnc3BhY2luZycsXG4gIHNwZWN1bGFyY29uc3RhbnQ6ICdzcGVjdWxhckNvbnN0YW50JyxcbiAgc3BlY3VsYXJleHBvbmVudDogJ3NwZWN1bGFyRXhwb25lbnQnLFxuICBzcGVlZDogJ3NwZWVkJyxcbiAgc3ByZWFkbWV0aG9kOiAnc3ByZWFkTWV0aG9kJyxcbiAgc3RhcnRvZmZzZXQ6ICdzdGFydE9mZnNldCcsXG4gIHN0ZGRldmlhdGlvbjogJ3N0ZERldmlhdGlvbicsXG4gIHN0ZW1oOiAnc3RlbWgnLFxuICBzdGVtdjogJ3N0ZW12JyxcbiAgc3RpdGNodGlsZXM6ICdzdGl0Y2hUaWxlcycsXG4gIHN0b3Bjb2xvcjogJ3N0b3BDb2xvcicsXG4gICdzdG9wLWNvbG9yJzogJ3N0b3BDb2xvcicsXG4gIHN0b3BvcGFjaXR5OiAnc3RvcE9wYWNpdHknLFxuICAnc3RvcC1vcGFjaXR5JzogJ3N0b3BPcGFjaXR5JyxcbiAgc3RyaWtldGhyb3VnaHBvc2l0aW9uOiAnc3RyaWtldGhyb3VnaFBvc2l0aW9uJyxcbiAgJ3N0cmlrZXRocm91Z2gtcG9zaXRpb24nOiAnc3RyaWtldGhyb3VnaFBvc2l0aW9uJyxcbiAgc3RyaWtldGhyb3VnaHRoaWNrbmVzczogJ3N0cmlrZXRocm91Z2hUaGlja25lc3MnLFxuICAnc3RyaWtldGhyb3VnaC10aGlja25lc3MnOiAnc3RyaWtldGhyb3VnaFRoaWNrbmVzcycsXG4gIHN0cmluZzogJ3N0cmluZycsXG4gIHN0cm9rZTogJ3N0cm9rZScsXG4gIHN0cm9rZWRhc2hhcnJheTogJ3N0cm9rZURhc2hhcnJheScsXG4gICdzdHJva2UtZGFzaGFycmF5JzogJ3N0cm9rZURhc2hhcnJheScsXG4gIHN0cm9rZWRhc2hvZmZzZXQ6ICdzdHJva2VEYXNob2Zmc2V0JyxcbiAgJ3N0cm9rZS1kYXNob2Zmc2V0JzogJ3N0cm9rZURhc2hvZmZzZXQnLFxuICBzdHJva2VsaW5lY2FwOiAnc3Ryb2tlTGluZWNhcCcsXG4gICdzdHJva2UtbGluZWNhcCc6ICdzdHJva2VMaW5lY2FwJyxcbiAgc3Ryb2tlbGluZWpvaW46ICdzdHJva2VMaW5lam9pbicsXG4gICdzdHJva2UtbGluZWpvaW4nOiAnc3Ryb2tlTGluZWpvaW4nLFxuICBzdHJva2VtaXRlcmxpbWl0OiAnc3Ryb2tlTWl0ZXJsaW1pdCcsXG4gICdzdHJva2UtbWl0ZXJsaW1pdCc6ICdzdHJva2VNaXRlcmxpbWl0JyxcbiAgc3Ryb2tld2lkdGg6ICdzdHJva2VXaWR0aCcsXG4gICdzdHJva2Utd2lkdGgnOiAnc3Ryb2tlV2lkdGgnLFxuICBzdHJva2VvcGFjaXR5OiAnc3Ryb2tlT3BhY2l0eScsXG4gICdzdHJva2Utb3BhY2l0eSc6ICdzdHJva2VPcGFjaXR5JyxcbiAgc3VwcHJlc3Njb250ZW50ZWRpdGFibGV3YXJuaW5nOiAnc3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nJyxcbiAgc3VwcHJlc3NoeWRyYXRpb253YXJuaW5nOiAnc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nJyxcbiAgc3VyZmFjZXNjYWxlOiAnc3VyZmFjZVNjYWxlJyxcbiAgc3lzdGVtbGFuZ3VhZ2U6ICdzeXN0ZW1MYW5ndWFnZScsXG4gIHRhYmxldmFsdWVzOiAndGFibGVWYWx1ZXMnLFxuICB0YXJnZXR4OiAndGFyZ2V0WCcsXG4gIHRhcmdldHk6ICd0YXJnZXRZJyxcbiAgdGV4dGFuY2hvcjogJ3RleHRBbmNob3InLFxuICAndGV4dC1hbmNob3InOiAndGV4dEFuY2hvcicsXG4gIHRleHRkZWNvcmF0aW9uOiAndGV4dERlY29yYXRpb24nLFxuICAndGV4dC1kZWNvcmF0aW9uJzogJ3RleHREZWNvcmF0aW9uJyxcbiAgdGV4dGxlbmd0aDogJ3RleHRMZW5ndGgnLFxuICB0ZXh0cmVuZGVyaW5nOiAndGV4dFJlbmRlcmluZycsXG4gICd0ZXh0LXJlbmRlcmluZyc6ICd0ZXh0UmVuZGVyaW5nJyxcbiAgdG86ICd0bycsXG4gIHRyYW5zZm9ybTogJ3RyYW5zZm9ybScsXG4gIHR5cGVvZjogJ3R5cGVvZicsXG4gIHUxOiAndTEnLFxuICB1MjogJ3UyJyxcbiAgdW5kZXJsaW5lcG9zaXRpb246ICd1bmRlcmxpbmVQb3NpdGlvbicsXG4gICd1bmRlcmxpbmUtcG9zaXRpb24nOiAndW5kZXJsaW5lUG9zaXRpb24nLFxuICB1bmRlcmxpbmV0aGlja25lc3M6ICd1bmRlcmxpbmVUaGlja25lc3MnLFxuICAndW5kZXJsaW5lLXRoaWNrbmVzcyc6ICd1bmRlcmxpbmVUaGlja25lc3MnLFxuICB1bmljb2RlOiAndW5pY29kZScsXG4gIHVuaWNvZGViaWRpOiAndW5pY29kZUJpZGknLFxuICAndW5pY29kZS1iaWRpJzogJ3VuaWNvZGVCaWRpJyxcbiAgdW5pY29kZXJhbmdlOiAndW5pY29kZVJhbmdlJyxcbiAgJ3VuaWNvZGUtcmFuZ2UnOiAndW5pY29kZVJhbmdlJyxcbiAgdW5pdHNwZXJlbTogJ3VuaXRzUGVyRW0nLFxuICAndW5pdHMtcGVyLWVtJzogJ3VuaXRzUGVyRW0nLFxuICB1bnNlbGVjdGFibGU6ICd1bnNlbGVjdGFibGUnLFxuICB2YWxwaGFiZXRpYzogJ3ZBbHBoYWJldGljJyxcbiAgJ3YtYWxwaGFiZXRpYyc6ICd2QWxwaGFiZXRpYycsXG4gIHZhbHVlczogJ3ZhbHVlcycsXG4gIHZlY3RvcmVmZmVjdDogJ3ZlY3RvckVmZmVjdCcsXG4gICd2ZWN0b3ItZWZmZWN0JzogJ3ZlY3RvckVmZmVjdCcsXG4gIHZlcnNpb246ICd2ZXJzaW9uJyxcbiAgdmVydGFkdnk6ICd2ZXJ0QWR2WScsXG4gICd2ZXJ0LWFkdi15JzogJ3ZlcnRBZHZZJyxcbiAgdmVydG9yaWdpbng6ICd2ZXJ0T3JpZ2luWCcsXG4gICd2ZXJ0LW9yaWdpbi14JzogJ3ZlcnRPcmlnaW5YJyxcbiAgdmVydG9yaWdpbnk6ICd2ZXJ0T3JpZ2luWScsXG4gICd2ZXJ0LW9yaWdpbi15JzogJ3ZlcnRPcmlnaW5ZJyxcbiAgdmhhbmdpbmc6ICd2SGFuZ2luZycsXG4gICd2LWhhbmdpbmcnOiAndkhhbmdpbmcnLFxuICB2aWRlb2dyYXBoaWM6ICd2SWRlb2dyYXBoaWMnLFxuICAndi1pZGVvZ3JhcGhpYyc6ICd2SWRlb2dyYXBoaWMnLFxuICB2aWV3Ym94OiAndmlld0JveCcsXG4gIHZpZXd0YXJnZXQ6ICd2aWV3VGFyZ2V0JyxcbiAgdmlzaWJpbGl0eTogJ3Zpc2liaWxpdHknLFxuICB2bWF0aGVtYXRpY2FsOiAndk1hdGhlbWF0aWNhbCcsXG4gICd2LW1hdGhlbWF0aWNhbCc6ICd2TWF0aGVtYXRpY2FsJyxcbiAgdm9jYWI6ICd2b2NhYicsXG4gIHdpZHRoczogJ3dpZHRocycsXG4gIHdvcmRzcGFjaW5nOiAnd29yZFNwYWNpbmcnLFxuICAnd29yZC1zcGFjaW5nJzogJ3dvcmRTcGFjaW5nJyxcbiAgd3JpdGluZ21vZGU6ICd3cml0aW5nTW9kZScsXG4gICd3cml0aW5nLW1vZGUnOiAnd3JpdGluZ01vZGUnLFxuICB4MTogJ3gxJyxcbiAgeDI6ICd4MicsXG4gIHg6ICd4JyxcbiAgeGNoYW5uZWxzZWxlY3RvcjogJ3hDaGFubmVsU2VsZWN0b3InLFxuICB4aGVpZ2h0OiAneEhlaWdodCcsXG4gICd4LWhlaWdodCc6ICd4SGVpZ2h0JyxcbiAgeGxpbmthY3R1YXRlOiAneGxpbmtBY3R1YXRlJyxcbiAgJ3hsaW5rOmFjdHVhdGUnOiAneGxpbmtBY3R1YXRlJyxcbiAgeGxpbmthcmNyb2xlOiAneGxpbmtBcmNyb2xlJyxcbiAgJ3hsaW5rOmFyY3JvbGUnOiAneGxpbmtBcmNyb2xlJyxcbiAgeGxpbmtocmVmOiAneGxpbmtIcmVmJyxcbiAgJ3hsaW5rOmhyZWYnOiAneGxpbmtIcmVmJyxcbiAgeGxpbmtyb2xlOiAneGxpbmtSb2xlJyxcbiAgJ3hsaW5rOnJvbGUnOiAneGxpbmtSb2xlJyxcbiAgeGxpbmtzaG93OiAneGxpbmtTaG93JyxcbiAgJ3hsaW5rOnNob3cnOiAneGxpbmtTaG93JyxcbiAgeGxpbmt0aXRsZTogJ3hsaW5rVGl0bGUnLFxuICAneGxpbms6dGl0bGUnOiAneGxpbmtUaXRsZScsXG4gIHhsaW5rdHlwZTogJ3hsaW5rVHlwZScsXG4gICd4bGluazp0eXBlJzogJ3hsaW5rVHlwZScsXG4gIHhtbGJhc2U6ICd4bWxCYXNlJyxcbiAgJ3htbDpiYXNlJzogJ3htbEJhc2UnLFxuICB4bWxsYW5nOiAneG1sTGFuZycsXG4gICd4bWw6bGFuZyc6ICd4bWxMYW5nJyxcbiAgeG1sbnM6ICd4bWxucycsXG4gICd4bWw6c3BhY2UnOiAneG1sU3BhY2UnLFxuICB4bWxuc3hsaW5rOiAneG1sbnNYbGluaycsXG4gICd4bWxuczp4bGluayc6ICd4bWxuc1hsaW5rJyxcbiAgeG1sc3BhY2U6ICd4bWxTcGFjZScsXG4gIHkxOiAneTEnLFxuICB5MjogJ3kyJyxcbiAgeTogJ3knLFxuICB5Y2hhbm5lbHNlbGVjdG9yOiAneUNoYW5uZWxTZWxlY3RvcicsXG4gIHo6ICd6JyxcbiAgem9vbWFuZHBhbjogJ3pvb21BbmRQYW4nXG59O1xuXG52YXIgYXJpYVByb3BlcnRpZXMgPSB7XG4gICdhcmlhLWN1cnJlbnQnOiAwLFxuICAvLyBzdGF0ZVxuICAnYXJpYS1kZXRhaWxzJzogMCxcbiAgJ2FyaWEtZGlzYWJsZWQnOiAwLFxuICAvLyBzdGF0ZVxuICAnYXJpYS1oaWRkZW4nOiAwLFxuICAvLyBzdGF0ZVxuICAnYXJpYS1pbnZhbGlkJzogMCxcbiAgLy8gc3RhdGVcbiAgJ2FyaWEta2V5c2hvcnRjdXRzJzogMCxcbiAgJ2FyaWEtbGFiZWwnOiAwLFxuICAnYXJpYS1yb2xlZGVzY3JpcHRpb24nOiAwLFxuICAvLyBXaWRnZXQgQXR0cmlidXRlc1xuICAnYXJpYS1hdXRvY29tcGxldGUnOiAwLFxuICAnYXJpYS1jaGVja2VkJzogMCxcbiAgJ2FyaWEtZXhwYW5kZWQnOiAwLFxuICAnYXJpYS1oYXNwb3B1cCc6IDAsXG4gICdhcmlhLWxldmVsJzogMCxcbiAgJ2FyaWEtbW9kYWwnOiAwLFxuICAnYXJpYS1tdWx0aWxpbmUnOiAwLFxuICAnYXJpYS1tdWx0aXNlbGVjdGFibGUnOiAwLFxuICAnYXJpYS1vcmllbnRhdGlvbic6IDAsXG4gICdhcmlhLXBsYWNlaG9sZGVyJzogMCxcbiAgJ2FyaWEtcHJlc3NlZCc6IDAsXG4gICdhcmlhLXJlYWRvbmx5JzogMCxcbiAgJ2FyaWEtcmVxdWlyZWQnOiAwLFxuICAnYXJpYS1zZWxlY3RlZCc6IDAsXG4gICdhcmlhLXNvcnQnOiAwLFxuICAnYXJpYS12YWx1ZW1heCc6IDAsXG4gICdhcmlhLXZhbHVlbWluJzogMCxcbiAgJ2FyaWEtdmFsdWVub3cnOiAwLFxuICAnYXJpYS12YWx1ZXRleHQnOiAwLFxuICAvLyBMaXZlIFJlZ2lvbiBBdHRyaWJ1dGVzXG4gICdhcmlhLWF0b21pYyc6IDAsXG4gICdhcmlhLWJ1c3knOiAwLFxuICAnYXJpYS1saXZlJzogMCxcbiAgJ2FyaWEtcmVsZXZhbnQnOiAwLFxuICAvLyBEcmFnLWFuZC1Ecm9wIEF0dHJpYnV0ZXNcbiAgJ2FyaWEtZHJvcGVmZmVjdCc6IDAsXG4gICdhcmlhLWdyYWJiZWQnOiAwLFxuICAvLyBSZWxhdGlvbnNoaXAgQXR0cmlidXRlc1xuICAnYXJpYS1hY3RpdmVkZXNjZW5kYW50JzogMCxcbiAgJ2FyaWEtY29sY291bnQnOiAwLFxuICAnYXJpYS1jb2xpbmRleCc6IDAsXG4gICdhcmlhLWNvbHNwYW4nOiAwLFxuICAnYXJpYS1jb250cm9scyc6IDAsXG4gICdhcmlhLWRlc2NyaWJlZGJ5JzogMCxcbiAgJ2FyaWEtZXJyb3JtZXNzYWdlJzogMCxcbiAgJ2FyaWEtZmxvd3RvJzogMCxcbiAgJ2FyaWEtbGFiZWxsZWRieSc6IDAsXG4gICdhcmlhLW93bnMnOiAwLFxuICAnYXJpYS1wb3NpbnNldCc6IDAsXG4gICdhcmlhLXJvd2NvdW50JzogMCxcbiAgJ2FyaWEtcm93aW5kZXgnOiAwLFxuICAnYXJpYS1yb3dzcGFuJzogMCxcbiAgJ2FyaWEtc2V0c2l6ZSc6IDBcbn07XG5cbnZhciB3YXJuZWRQcm9wZXJ0aWVzID0ge307XG52YXIgckFSSUEgPSBuZXcgUmVnRXhwKCdeKGFyaWEpLVsnICsgQVRUUklCVVRFX05BTUVfQ0hBUiArICddKiQnKTtcbnZhciByQVJJQUNhbWVsID0gbmV3IFJlZ0V4cCgnXihhcmlhKVtBLVpdWycgKyBBVFRSSUJVVEVfTkFNRV9DSEFSICsgJ10qJCcpO1xudmFyIGhhc093blByb3BlcnR5JDEgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG5mdW5jdGlvbiB2YWxpZGF0ZVByb3BlcnR5KHRhZ05hbWUsIG5hbWUpIHtcbiAge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eSQxLmNhbGwod2FybmVkUHJvcGVydGllcywgbmFtZSkgJiYgd2FybmVkUHJvcGVydGllc1tuYW1lXSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHJBUklBQ2FtZWwudGVzdChuYW1lKSkge1xuICAgICAgdmFyIGFyaWFOYW1lID0gJ2FyaWEtJyArIG5hbWUuc2xpY2UoNCkudG9Mb3dlckNhc2UoKTtcbiAgICAgIHZhciBjb3JyZWN0TmFtZSA9IGFyaWFQcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KGFyaWFOYW1lKSA/IGFyaWFOYW1lIDogbnVsbDsgLy8gSWYgdGhpcyBpcyBhbiBhcmlhLSogYXR0cmlidXRlLCBidXQgaXMgbm90IGxpc3RlZCBpbiB0aGUga25vd24gRE9NXG4gICAgICAvLyBET00gcHJvcGVydGllcywgdGhlbiBpdCBpcyBhbiBpbnZhbGlkIGFyaWEtKiBhdHRyaWJ1dGUuXG5cbiAgICAgIGlmIChjb3JyZWN0TmFtZSA9PSBudWxsKSB7XG4gICAgICAgIGVycm9yKCdJbnZhbGlkIEFSSUEgYXR0cmlidXRlIGAlc2AuIEFSSUEgYXR0cmlidXRlcyBmb2xsb3cgdGhlIHBhdHRlcm4gYXJpYS0qIGFuZCBtdXN0IGJlIGxvd2VyY2FzZS4nLCBuYW1lKTtcblxuICAgICAgICB3YXJuZWRQcm9wZXJ0aWVzW25hbWVdID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IC8vIGFyaWEtKiBhdHRyaWJ1dGVzIHNob3VsZCBiZSBsb3dlcmNhc2U7IHN1Z2dlc3QgdGhlIGxvd2VyY2FzZSB2ZXJzaW9uLlxuXG5cbiAgICAgIGlmIChuYW1lICE9PSBjb3JyZWN0TmFtZSkge1xuICAgICAgICBlcnJvcignSW52YWxpZCBBUklBIGF0dHJpYnV0ZSBgJXNgLiBEaWQgeW91IG1lYW4gYCVzYD8nLCBuYW1lLCBjb3JyZWN0TmFtZSk7XG5cbiAgICAgICAgd2FybmVkUHJvcGVydGllc1tuYW1lXSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChyQVJJQS50ZXN0KG5hbWUpKSB7XG4gICAgICB2YXIgbG93ZXJDYXNlZE5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICB2YXIgc3RhbmRhcmROYW1lID0gYXJpYVByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkobG93ZXJDYXNlZE5hbWUpID8gbG93ZXJDYXNlZE5hbWUgOiBudWxsOyAvLyBJZiB0aGlzIGlzIGFuIGFyaWEtKiBhdHRyaWJ1dGUsIGJ1dCBpcyBub3QgbGlzdGVkIGluIHRoZSBrbm93biBET01cbiAgICAgIC8vIERPTSBwcm9wZXJ0aWVzLCB0aGVuIGl0IGlzIGFuIGludmFsaWQgYXJpYS0qIGF0dHJpYnV0ZS5cblxuICAgICAgaWYgKHN0YW5kYXJkTmFtZSA9PSBudWxsKSB7XG4gICAgICAgIHdhcm5lZFByb3BlcnRpZXNbbmFtZV0gPSB0cnVlO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IC8vIGFyaWEtKiBhdHRyaWJ1dGVzIHNob3VsZCBiZSBsb3dlcmNhc2U7IHN1Z2dlc3QgdGhlIGxvd2VyY2FzZSB2ZXJzaW9uLlxuXG5cbiAgICAgIGlmIChuYW1lICE9PSBzdGFuZGFyZE5hbWUpIHtcbiAgICAgICAgZXJyb3IoJ1Vua25vd24gQVJJQSBhdHRyaWJ1dGUgYCVzYC4gRGlkIHlvdSBtZWFuIGAlc2A/JywgbmFtZSwgc3RhbmRhcmROYW1lKTtcblxuICAgICAgICB3YXJuZWRQcm9wZXJ0aWVzW25hbWVdID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHdhcm5JbnZhbGlkQVJJQVByb3BzKHR5cGUsIHByb3BzKSB7XG4gIHtcbiAgICB2YXIgaW52YWxpZFByb3BzID0gW107XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHtcbiAgICAgIHZhciBpc1ZhbGlkID0gdmFsaWRhdGVQcm9wZXJ0eSh0eXBlLCBrZXkpO1xuXG4gICAgICBpZiAoIWlzVmFsaWQpIHtcbiAgICAgICAgaW52YWxpZFByb3BzLnB1c2goa2V5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgdW5rbm93blByb3BTdHJpbmcgPSBpbnZhbGlkUHJvcHMubWFwKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgICByZXR1cm4gJ2AnICsgcHJvcCArICdgJztcbiAgICB9KS5qb2luKCcsICcpO1xuXG4gICAgaWYgKGludmFsaWRQcm9wcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIGVycm9yKCdJbnZhbGlkIGFyaWEgcHJvcCAlcyBvbiA8JXM+IHRhZy4gJyArICdGb3IgZGV0YWlscywgc2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9pbnZhbGlkLWFyaWEtcHJvcHMnLCB1bmtub3duUHJvcFN0cmluZywgdHlwZSk7XG4gICAgfSBlbHNlIGlmIChpbnZhbGlkUHJvcHMubGVuZ3RoID4gMSkge1xuICAgICAgZXJyb3IoJ0ludmFsaWQgYXJpYSBwcm9wcyAlcyBvbiA8JXM+IHRhZy4gJyArICdGb3IgZGV0YWlscywgc2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9pbnZhbGlkLWFyaWEtcHJvcHMnLCB1bmtub3duUHJvcFN0cmluZywgdHlwZSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlUHJvcGVydGllcyh0eXBlLCBwcm9wcykge1xuICBpZiAoaXNDdXN0b21Db21wb25lbnQodHlwZSwgcHJvcHMpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgd2FybkludmFsaWRBUklBUHJvcHModHlwZSwgcHJvcHMpO1xufVxuXG52YXIgZGlkV2FyblZhbHVlTnVsbCA9IGZhbHNlO1xuZnVuY3Rpb24gdmFsaWRhdGVQcm9wZXJ0aWVzJDEodHlwZSwgcHJvcHMpIHtcbiAge1xuICAgIGlmICh0eXBlICE9PSAnaW5wdXQnICYmIHR5cGUgIT09ICd0ZXh0YXJlYScgJiYgdHlwZSAhPT0gJ3NlbGVjdCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMgIT0gbnVsbCAmJiBwcm9wcy52YWx1ZSA9PT0gbnVsbCAmJiAhZGlkV2FyblZhbHVlTnVsbCkge1xuICAgICAgZGlkV2FyblZhbHVlTnVsbCA9IHRydWU7XG5cbiAgICAgIGlmICh0eXBlID09PSAnc2VsZWN0JyAmJiBwcm9wcy5tdWx0aXBsZSkge1xuICAgICAgICBlcnJvcignYHZhbHVlYCBwcm9wIG9uIGAlc2Agc2hvdWxkIG5vdCBiZSBudWxsLiAnICsgJ0NvbnNpZGVyIHVzaW5nIGFuIGVtcHR5IGFycmF5IHdoZW4gYG11bHRpcGxlYCBpcyBzZXQgdG8gYHRydWVgICcgKyAndG8gY2xlYXIgdGhlIGNvbXBvbmVudCBvciBgdW5kZWZpbmVkYCBmb3IgdW5jb250cm9sbGVkIGNvbXBvbmVudHMuJywgdHlwZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlcnJvcignYHZhbHVlYCBwcm9wIG9uIGAlc2Agc2hvdWxkIG5vdCBiZSBudWxsLiAnICsgJ0NvbnNpZGVyIHVzaW5nIGFuIGVtcHR5IHN0cmluZyB0byBjbGVhciB0aGUgY29tcG9uZW50IG9yIGB1bmRlZmluZWRgICcgKyAnZm9yIHVuY29udHJvbGxlZCBjb21wb25lbnRzLicsIHR5cGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgdmFsaWRhdGVQcm9wZXJ0eSQxID0gZnVuY3Rpb24gKCkge307XG5cbntcbiAgdmFyIHdhcm5lZFByb3BlcnRpZXMkMSA9IHt9O1xuICB2YXIgX2hhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbiAgdmFyIEVWRU5UX05BTUVfUkVHRVggPSAvXm9uLi87XG4gIHZhciBJTlZBTElEX0VWRU5UX05BTUVfUkVHRVggPSAvXm9uW15BLVpdLztcbiAgdmFyIHJBUklBJDEgPSBuZXcgUmVnRXhwKCdeKGFyaWEpLVsnICsgQVRUUklCVVRFX05BTUVfQ0hBUiArICddKiQnKTtcbiAgdmFyIHJBUklBQ2FtZWwkMSA9IG5ldyBSZWdFeHAoJ14oYXJpYSlbQS1aXVsnICsgQVRUUklCVVRFX05BTUVfQ0hBUiArICddKiQnKTtcblxuICB2YWxpZGF0ZVByb3BlcnR5JDEgPSBmdW5jdGlvbiAodGFnTmFtZSwgbmFtZSwgdmFsdWUsIGV2ZW50UmVnaXN0cnkpIHtcbiAgICBpZiAoX2hhc093blByb3BlcnR5LmNhbGwod2FybmVkUHJvcGVydGllcyQxLCBuYW1lKSAmJiB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0pIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHZhciBsb3dlckNhc2VkTmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcblxuICAgIGlmIChsb3dlckNhc2VkTmFtZSA9PT0gJ29uZm9jdXNpbicgfHwgbG93ZXJDYXNlZE5hbWUgPT09ICdvbmZvY3Vzb3V0Jykge1xuICAgICAgZXJyb3IoJ1JlYWN0IHVzZXMgb25Gb2N1cyBhbmQgb25CbHVyIGluc3RlYWQgb2Ygb25Gb2N1c0luIGFuZCBvbkZvY3VzT3V0LiAnICsgJ0FsbCBSZWFjdCBldmVudHMgYXJlIG5vcm1hbGl6ZWQgdG8gYnViYmxlLCBzbyBvbkZvY3VzSW4gYW5kIG9uRm9jdXNPdXQgJyArICdhcmUgbm90IG5lZWRlZC9zdXBwb3J0ZWQgYnkgUmVhY3QuJyk7XG5cbiAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IC8vIFdlIGNhbid0IHJlbHkgb24gdGhlIGV2ZW50IHN5c3RlbSBiZWluZyBpbmplY3RlZCBvbiB0aGUgc2VydmVyLlxuXG5cbiAgICBpZiAoZXZlbnRSZWdpc3RyeSAhPSBudWxsKSB7XG4gICAgICB2YXIgcmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llcyA9IGV2ZW50UmVnaXN0cnkucmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llcyxcbiAgICAgICAgICBwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzID0gZXZlbnRSZWdpc3RyeS5wb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzO1xuXG4gICAgICBpZiAocmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIHJlZ2lzdHJhdGlvbk5hbWUgPSBwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzLmhhc093blByb3BlcnR5KGxvd2VyQ2FzZWROYW1lKSA/IHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXNbbG93ZXJDYXNlZE5hbWVdIDogbnVsbDtcblxuICAgICAgaWYgKHJlZ2lzdHJhdGlvbk5hbWUgIT0gbnVsbCkge1xuICAgICAgICBlcnJvcignSW52YWxpZCBldmVudCBoYW5kbGVyIHByb3BlcnR5IGAlc2AuIERpZCB5b3UgbWVhbiBgJXNgPycsIG5hbWUsIHJlZ2lzdHJhdGlvbk5hbWUpO1xuXG4gICAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoRVZFTlRfTkFNRV9SRUdFWC50ZXN0KG5hbWUpKSB7XG4gICAgICAgIGVycm9yKCdVbmtub3duIGV2ZW50IGhhbmRsZXIgcHJvcGVydHkgYCVzYC4gSXQgd2lsbCBiZSBpZ25vcmVkLicsIG5hbWUpO1xuXG4gICAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoRVZFTlRfTkFNRV9SRUdFWC50ZXN0KG5hbWUpKSB7XG4gICAgICAvLyBJZiBubyBldmVudCBwbHVnaW5zIGhhdmUgYmVlbiBpbmplY3RlZCwgd2UgYXJlIGluIGEgc2VydmVyIGVudmlyb25tZW50LlxuICAgICAgLy8gU28gd2UgY2FuJ3QgdGVsbCBpZiB0aGUgZXZlbnQgbmFtZSBpcyBjb3JyZWN0IGZvciBzdXJlLCBidXQgd2UgY2FuIGZpbHRlclxuICAgICAgLy8gb3V0IGtub3duIGJhZCBvbmVzIGxpa2UgYG9uY2xpY2tgLiBXZSBjYW4ndCBzdWdnZXN0IGEgc3BlY2lmaWMgcmVwbGFjZW1lbnQgdGhvdWdoLlxuICAgICAgaWYgKElOVkFMSURfRVZFTlRfTkFNRV9SRUdFWC50ZXN0KG5hbWUpKSB7XG4gICAgICAgIGVycm9yKCdJbnZhbGlkIGV2ZW50IGhhbmRsZXIgcHJvcGVydHkgYCVzYC4gJyArICdSZWFjdCBldmVudHMgdXNlIHRoZSBjYW1lbENhc2UgbmFtaW5nIGNvbnZlbnRpb24sIGZvciBleGFtcGxlIGBvbkNsaWNrYC4nLCBuYW1lKTtcbiAgICAgIH1cblxuICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gLy8gTGV0IHRoZSBBUklBIGF0dHJpYnV0ZSBob29rIHZhbGlkYXRlIEFSSUEgYXR0cmlidXRlc1xuXG5cbiAgICBpZiAockFSSUEkMS50ZXN0KG5hbWUpIHx8IHJBUklBQ2FtZWwkMS50ZXN0KG5hbWUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAobG93ZXJDYXNlZE5hbWUgPT09ICdpbm5lcmh0bWwnKSB7XG4gICAgICBlcnJvcignRGlyZWN0bHkgc2V0dGluZyBwcm9wZXJ0eSBgaW5uZXJIVE1MYCBpcyBub3QgcGVybWl0dGVkLiAnICsgJ0ZvciBtb3JlIGluZm9ybWF0aW9uLCBsb29rdXAgZG9jdW1lbnRhdGlvbiBvbiBgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgLicpO1xuXG4gICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGxvd2VyQ2FzZWROYW1lID09PSAnYXJpYScpIHtcbiAgICAgIGVycm9yKCdUaGUgYGFyaWFgIGF0dHJpYnV0ZSBpcyByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSBpbiBSZWFjdC4gJyArICdQYXNzIGluZGl2aWR1YWwgYGFyaWEtYCBhdHRyaWJ1dGVzIGluc3RlYWQuJyk7XG5cbiAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAobG93ZXJDYXNlZE5hbWUgPT09ICdpcycgJiYgdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICBlcnJvcignUmVjZWl2ZWQgYSBgJXNgIGZvciBhIHN0cmluZyBhdHRyaWJ1dGUgYGlzYC4gSWYgdGhpcyBpcyBleHBlY3RlZCwgY2FzdCAnICsgJ3RoZSB2YWx1ZSB0byBhIHN0cmluZy4nLCB0eXBlb2YgdmFsdWUpO1xuXG4gICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgaXNOYU4odmFsdWUpKSB7XG4gICAgICBlcnJvcignUmVjZWl2ZWQgTmFOIGZvciB0aGUgYCVzYCBhdHRyaWJ1dGUuIElmIHRoaXMgaXMgZXhwZWN0ZWQsIGNhc3QgJyArICd0aGUgdmFsdWUgdG8gYSBzdHJpbmcuJywgbmFtZSk7XG5cbiAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgcHJvcGVydHlJbmZvID0gZ2V0UHJvcGVydHlJbmZvKG5hbWUpO1xuICAgIHZhciBpc1Jlc2VydmVkID0gcHJvcGVydHlJbmZvICE9PSBudWxsICYmIHByb3BlcnR5SW5mby50eXBlID09PSBSRVNFUlZFRDsgLy8gS25vd24gYXR0cmlidXRlcyBzaG91bGQgbWF0Y2ggdGhlIGNhc2luZyBzcGVjaWZpZWQgaW4gdGhlIHByb3BlcnR5IGNvbmZpZy5cblxuICAgIGlmIChwb3NzaWJsZVN0YW5kYXJkTmFtZXMuaGFzT3duUHJvcGVydHkobG93ZXJDYXNlZE5hbWUpKSB7XG4gICAgICB2YXIgc3RhbmRhcmROYW1lID0gcG9zc2libGVTdGFuZGFyZE5hbWVzW2xvd2VyQ2FzZWROYW1lXTtcblxuICAgICAgaWYgKHN0YW5kYXJkTmFtZSAhPT0gbmFtZSkge1xuICAgICAgICBlcnJvcignSW52YWxpZCBET00gcHJvcGVydHkgYCVzYC4gRGlkIHlvdSBtZWFuIGAlc2A/JywgbmFtZSwgc3RhbmRhcmROYW1lKTtcblxuICAgICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFpc1Jlc2VydmVkICYmIG5hbWUgIT09IGxvd2VyQ2FzZWROYW1lKSB7XG4gICAgICAvLyBVbmtub3duIGF0dHJpYnV0ZXMgc2hvdWxkIGhhdmUgbG93ZXJjYXNlIGNhc2luZyBzaW5jZSB0aGF0J3MgaG93IHRoZXlcbiAgICAgIC8vIHdpbGwgYmUgY2FzZWQgYW55d2F5IHdpdGggc2VydmVyIHJlbmRlcmluZy5cbiAgICAgIGVycm9yKCdSZWFjdCBkb2VzIG5vdCByZWNvZ25pemUgdGhlIGAlc2AgcHJvcCBvbiBhIERPTSBlbGVtZW50LiBJZiB5b3UgJyArICdpbnRlbnRpb25hbGx5IHdhbnQgaXQgdG8gYXBwZWFyIGluIHRoZSBET00gYXMgYSBjdXN0b20gJyArICdhdHRyaWJ1dGUsIHNwZWxsIGl0IGFzIGxvd2VyY2FzZSBgJXNgIGluc3RlYWQuICcgKyAnSWYgeW91IGFjY2lkZW50YWxseSBwYXNzZWQgaXQgZnJvbSBhIHBhcmVudCBjb21wb25lbnQsIHJlbW92ZSAnICsgJ2l0IGZyb20gdGhlIERPTSBlbGVtZW50LicsIG5hbWUsIGxvd2VyQ2FzZWROYW1lKTtcblxuICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyAmJiBzaG91bGRSZW1vdmVBdHRyaWJ1dGVXaXRoV2FybmluZyhuYW1lLCB2YWx1ZSwgcHJvcGVydHlJbmZvLCBmYWxzZSkpIHtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBlcnJvcignUmVjZWl2ZWQgYCVzYCBmb3IgYSBub24tYm9vbGVhbiBhdHRyaWJ1dGUgYCVzYC5cXG5cXG4nICsgJ0lmIHlvdSB3YW50IHRvIHdyaXRlIGl0IHRvIHRoZSBET00sIHBhc3MgYSBzdHJpbmcgaW5zdGVhZDogJyArICclcz1cIiVzXCIgb3IgJXM9e3ZhbHVlLnRvU3RyaW5nKCl9LicsIHZhbHVlLCBuYW1lLCBuYW1lLCB2YWx1ZSwgbmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlcnJvcignUmVjZWl2ZWQgYCVzYCBmb3IgYSBub24tYm9vbGVhbiBhdHRyaWJ1dGUgYCVzYC5cXG5cXG4nICsgJ0lmIHlvdSB3YW50IHRvIHdyaXRlIGl0IHRvIHRoZSBET00sIHBhc3MgYSBzdHJpbmcgaW5zdGVhZDogJyArICclcz1cIiVzXCIgb3IgJXM9e3ZhbHVlLnRvU3RyaW5nKCl9LlxcblxcbicgKyAnSWYgeW91IHVzZWQgdG8gY29uZGl0aW9uYWxseSBvbWl0IGl0IHdpdGggJXM9e2NvbmRpdGlvbiAmJiB2YWx1ZX0sICcgKyAncGFzcyAlcz17Y29uZGl0aW9uID8gdmFsdWUgOiB1bmRlZmluZWR9IGluc3RlYWQuJywgdmFsdWUsIG5hbWUsIG5hbWUsIHZhbHVlLCBuYW1lLCBuYW1lLCBuYW1lKTtcbiAgICAgIH1cblxuICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gLy8gTm93IHRoYXQgd2UndmUgdmFsaWRhdGVkIGNhc2luZywgZG8gbm90IHZhbGlkYXRlXG4gICAgLy8gZGF0YSB0eXBlcyBmb3IgcmVzZXJ2ZWQgcHJvcHNcblxuXG4gICAgaWYgKGlzUmVzZXJ2ZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gLy8gV2FybiB3aGVuIGEga25vd24gYXR0cmlidXRlIGlzIGEgYmFkIHR5cGVcblxuXG4gICAgaWYgKHNob3VsZFJlbW92ZUF0dHJpYnV0ZVdpdGhXYXJuaW5nKG5hbWUsIHZhbHVlLCBwcm9wZXJ0eUluZm8sIGZhbHNlKSkge1xuICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IC8vIFdhcm4gd2hlbiBwYXNzaW5nIHRoZSBzdHJpbmdzICdmYWxzZScgb3IgJ3RydWUnIGludG8gYSBib29sZWFuIHByb3BcblxuXG4gICAgaWYgKCh2YWx1ZSA9PT0gJ2ZhbHNlJyB8fCB2YWx1ZSA9PT0gJ3RydWUnKSAmJiBwcm9wZXJ0eUluZm8gIT09IG51bGwgJiYgcHJvcGVydHlJbmZvLnR5cGUgPT09IEJPT0xFQU4pIHtcbiAgICAgIGVycm9yKCdSZWNlaXZlZCB0aGUgc3RyaW5nIGAlc2AgZm9yIHRoZSBib29sZWFuIGF0dHJpYnV0ZSBgJXNgLiAnICsgJyVzICcgKyAnRGlkIHlvdSBtZWFuICVzPXslc30/JywgdmFsdWUsIG5hbWUsIHZhbHVlID09PSAnZmFsc2UnID8gJ1RoZSBicm93c2VyIHdpbGwgaW50ZXJwcmV0IGl0IGFzIGEgdHJ1dGh5IHZhbHVlLicgOiAnQWx0aG91Z2ggdGhpcyB3b3JrcywgaXQgd2lsbCBub3Qgd29yayBhcyBleHBlY3RlZCBpZiB5b3UgcGFzcyB0aGUgc3RyaW5nIFwiZmFsc2VcIi4nLCBuYW1lLCB2YWx1ZSk7XG5cbiAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcbn1cblxudmFyIHdhcm5Vbmtub3duUHJvcGVydGllcyA9IGZ1bmN0aW9uICh0eXBlLCBwcm9wcywgZXZlbnRSZWdpc3RyeSkge1xuICB7XG4gICAgdmFyIHVua25vd25Qcm9wcyA9IFtdO1xuXG4gICAgZm9yICh2YXIga2V5IGluIHByb3BzKSB7XG4gICAgICB2YXIgaXNWYWxpZCA9IHZhbGlkYXRlUHJvcGVydHkkMSh0eXBlLCBrZXksIHByb3BzW2tleV0sIGV2ZW50UmVnaXN0cnkpO1xuXG4gICAgICBpZiAoIWlzVmFsaWQpIHtcbiAgICAgICAgdW5rbm93blByb3BzLnB1c2goa2V5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgdW5rbm93blByb3BTdHJpbmcgPSB1bmtub3duUHJvcHMubWFwKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgICByZXR1cm4gJ2AnICsgcHJvcCArICdgJztcbiAgICB9KS5qb2luKCcsICcpO1xuXG4gICAgaWYgKHVua25vd25Qcm9wcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIGVycm9yKCdJbnZhbGlkIHZhbHVlIGZvciBwcm9wICVzIG9uIDwlcz4gdGFnLiBFaXRoZXIgcmVtb3ZlIGl0IGZyb20gdGhlIGVsZW1lbnQsICcgKyAnb3IgcGFzcyBhIHN0cmluZyBvciBudW1iZXIgdmFsdWUgdG8ga2VlcCBpdCBpbiB0aGUgRE9NLiAnICsgJ0ZvciBkZXRhaWxzLCBzZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2F0dHJpYnV0ZS1iZWhhdmlvciAnLCB1bmtub3duUHJvcFN0cmluZywgdHlwZSk7XG4gICAgfSBlbHNlIGlmICh1bmtub3duUHJvcHMubGVuZ3RoID4gMSkge1xuICAgICAgZXJyb3IoJ0ludmFsaWQgdmFsdWVzIGZvciBwcm9wcyAlcyBvbiA8JXM+IHRhZy4gRWl0aGVyIHJlbW92ZSB0aGVtIGZyb20gdGhlIGVsZW1lbnQsICcgKyAnb3IgcGFzcyBhIHN0cmluZyBvciBudW1iZXIgdmFsdWUgdG8ga2VlcCB0aGVtIGluIHRoZSBET00uICcgKyAnRm9yIGRldGFpbHMsIHNlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvYXR0cmlidXRlLWJlaGF2aW9yICcsIHVua25vd25Qcm9wU3RyaW5nLCB0eXBlKTtcbiAgICB9XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHZhbGlkYXRlUHJvcGVydGllcyQyKHR5cGUsIHByb3BzLCBldmVudFJlZ2lzdHJ5KSB7XG4gIGlmIChpc0N1c3RvbUNvbXBvbmVudCh0eXBlLCBwcm9wcykpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB3YXJuVW5rbm93blByb3BlcnRpZXModHlwZSwgcHJvcHMsIGV2ZW50UmVnaXN0cnkpO1xufVxuXG52YXIgSVNfRVZFTlRfSEFORExFX05PTl9NQU5BR0VEX05PREUgPSAxO1xudmFyIElTX05PTl9ERUxFR0FURUQgPSAxIDw8IDE7XG52YXIgSVNfQ0FQVFVSRV9QSEFTRSA9IDEgPDwgMjtcbnZhciBJU19SRVBMQVlFRCA9IDEgPDwgNDtcbi8vIHNldCB0byBMRUdBQ1lfRkJfU1VQUE9SVC4gTEVHQUNZX0ZCX1NVUFBPUlQgb25seSBnZXRzIHNldCB3aGVuXG4vLyB3ZSBjYWxsIHdpbGxEZWZlckxhdGVyRm9yTGVnYWN5RkJTdXBwb3J0LCB0aHVzIG5vdCBiYWlsaW5nIG91dFxuLy8gd2lsbCByZXN1bHQgaW4gZW5kbGVzcyBjeWNsZXMgbGlrZSBhbiBpbmZpbml0ZSBsb29wLlxuLy8gV2UgYWxzbyBkb24ndCB3YW50IHRvIGRlZmVyIGR1cmluZyBldmVudCByZXBsYXlpbmcuXG5cbnZhciBTSE9VTERfTk9UX1BST0NFU1NfUE9MWUZJTExfRVZFTlRfUExVR0lOUyA9IElTX0VWRU5UX0hBTkRMRV9OT05fTUFOQUdFRF9OT0RFIHwgSVNfTk9OX0RFTEVHQVRFRCB8IElTX0NBUFRVUkVfUEhBU0U7XG5cbi8qKlxuICogR2V0cyB0aGUgdGFyZ2V0IG5vZGUgZnJvbSBhIG5hdGl2ZSBicm93c2VyIGV2ZW50IGJ5IGFjY291bnRpbmcgZm9yXG4gKiBpbmNvbnNpc3RlbmNpZXMgaW4gYnJvd3NlciBET00gQVBJcy5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQuXG4gKiBAcmV0dXJuIHtET01FdmVudFRhcmdldH0gVGFyZ2V0IG5vZGUuXG4gKi9cblxuZnVuY3Rpb24gZ2V0RXZlbnRUYXJnZXQobmF0aXZlRXZlbnQpIHtcbiAgLy8gRmFsbGJhY2sgdG8gbmF0aXZlRXZlbnQuc3JjRWxlbWVudCBmb3IgSUU5XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTI1MDZcbiAgdmFyIHRhcmdldCA9IG5hdGl2ZUV2ZW50LnRhcmdldCB8fCBuYXRpdmVFdmVudC5zcmNFbGVtZW50IHx8IHdpbmRvdzsgLy8gTm9ybWFsaXplIFNWRyA8dXNlPiBlbGVtZW50IGV2ZW50cyAjNDk2M1xuXG4gIGlmICh0YXJnZXQuY29ycmVzcG9uZGluZ1VzZUVsZW1lbnQpIHtcbiAgICB0YXJnZXQgPSB0YXJnZXQuY29ycmVzcG9uZGluZ1VzZUVsZW1lbnQ7XG4gIH0gLy8gU2FmYXJpIG1heSBmaXJlIGV2ZW50cyBvbiB0ZXh0IG5vZGVzIChOb2RlLlRFWFRfTk9ERSBpcyAzKS5cbiAgLy8gQHNlZSBodHRwOi8vd3d3LnF1aXJrc21vZGUub3JnL2pzL2V2ZW50c19wcm9wZXJ0aWVzLmh0bWxcblxuXG4gIHJldHVybiB0YXJnZXQubm9kZVR5cGUgPT09IFRFWFRfTk9ERSA/IHRhcmdldC5wYXJlbnROb2RlIDogdGFyZ2V0O1xufVxuXG52YXIgcmVzdG9yZUltcGwgPSBudWxsO1xudmFyIHJlc3RvcmVUYXJnZXQgPSBudWxsO1xudmFyIHJlc3RvcmVRdWV1ZSA9IG51bGw7XG5cbmZ1bmN0aW9uIHJlc3RvcmVTdGF0ZU9mVGFyZ2V0KHRhcmdldCkge1xuICAvLyBXZSBwZXJmb3JtIHRoaXMgdHJhbnNsYXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgZXZlbnQgbG9vcCBzbyB0aGF0IHdlXG4gIC8vIGFsd2F5cyByZWNlaXZlIHRoZSBjb3JyZWN0IGZpYmVyIGhlcmVcbiAgdmFyIGludGVybmFsSW5zdGFuY2UgPSBnZXRJbnN0YW5jZUZyb21Ob2RlKHRhcmdldCk7XG5cbiAgaWYgKCFpbnRlcm5hbEluc3RhbmNlKSB7XG4gICAgLy8gVW5tb3VudGVkXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKCEodHlwZW9mIHJlc3RvcmVJbXBsID09PSAnZnVuY3Rpb24nKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcInNldFJlc3RvcmVJbXBsZW1lbnRhdGlvbigpIG5lZWRzIHRvIGJlIGNhbGxlZCB0byBoYW5kbGUgYSB0YXJnZXQgZm9yIGNvbnRyb2xsZWQgZXZlbnRzLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgfVxuICB9XG5cbiAgdmFyIHN0YXRlTm9kZSA9IGludGVybmFsSW5zdGFuY2Uuc3RhdGVOb2RlOyAvLyBHdWFyZCBhZ2FpbnN0IEZpYmVyIGJlaW5nIHVubW91bnRlZC5cblxuICBpZiAoc3RhdGVOb2RlKSB7XG4gICAgdmFyIF9wcm9wcyA9IGdldEZpYmVyQ3VycmVudFByb3BzRnJvbU5vZGUoc3RhdGVOb2RlKTtcblxuICAgIHJlc3RvcmVJbXBsKGludGVybmFsSW5zdGFuY2Uuc3RhdGVOb2RlLCBpbnRlcm5hbEluc3RhbmNlLnR5cGUsIF9wcm9wcyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0UmVzdG9yZUltcGxlbWVudGF0aW9uKGltcGwpIHtcbiAgcmVzdG9yZUltcGwgPSBpbXBsO1xufVxuZnVuY3Rpb24gZW5xdWV1ZVN0YXRlUmVzdG9yZSh0YXJnZXQpIHtcbiAgaWYgKHJlc3RvcmVUYXJnZXQpIHtcbiAgICBpZiAocmVzdG9yZVF1ZXVlKSB7XG4gICAgICByZXN0b3JlUXVldWUucHVzaCh0YXJnZXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN0b3JlUXVldWUgPSBbdGFyZ2V0XTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmVzdG9yZVRhcmdldCA9IHRhcmdldDtcbiAgfVxufVxuZnVuY3Rpb24gbmVlZHNTdGF0ZVJlc3RvcmUoKSB7XG4gIHJldHVybiByZXN0b3JlVGFyZ2V0ICE9PSBudWxsIHx8IHJlc3RvcmVRdWV1ZSAhPT0gbnVsbDtcbn1cbmZ1bmN0aW9uIHJlc3RvcmVTdGF0ZUlmTmVlZGVkKCkge1xuICBpZiAoIXJlc3RvcmVUYXJnZXQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgdGFyZ2V0ID0gcmVzdG9yZVRhcmdldDtcbiAgdmFyIHF1ZXVlZFRhcmdldHMgPSByZXN0b3JlUXVldWU7XG4gIHJlc3RvcmVUYXJnZXQgPSBudWxsO1xuICByZXN0b3JlUXVldWUgPSBudWxsO1xuICByZXN0b3JlU3RhdGVPZlRhcmdldCh0YXJnZXQpO1xuXG4gIGlmIChxdWV1ZWRUYXJnZXRzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWV1ZWRUYXJnZXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXN0b3JlU3RhdGVPZlRhcmdldChxdWV1ZWRUYXJnZXRzW2ldKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gdGhlIHJlbmRlcmVyLiBTdWNoIGFzIHdoZW4gd2UncmUgZGlzcGF0Y2hpbmcgZXZlbnRzIG9yIGlmIHRoaXJkIHBhcnR5XG4vLyBsaWJyYXJpZXMgbmVlZCB0byBjYWxsIGJhdGNoZWRVcGRhdGVzLiBFdmVudHVhbGx5LCB0aGlzIEFQSSB3aWxsIGdvIGF3YXkgd2hlblxuLy8gZXZlcnl0aGluZyBpcyBiYXRjaGVkIGJ5IGRlZmF1bHQuIFdlJ2xsIHRoZW4gaGF2ZSBhIHNpbWlsYXIgQVBJIHRvIG9wdC1vdXQgb2Zcbi8vIHNjaGVkdWxlZCB3b3JrIGFuZCBpbnN0ZWFkIGRvIHN5bmNocm9ub3VzIHdvcmsuXG4vLyBEZWZhdWx0c1xuXG52YXIgYmF0Y2hlZFVwZGF0ZXNJbXBsID0gZnVuY3Rpb24gKGZuLCBib29ra2VlcGluZykge1xuICByZXR1cm4gZm4oYm9va2tlZXBpbmcpO1xufTtcblxudmFyIGRpc2NyZXRlVXBkYXRlc0ltcGwgPSBmdW5jdGlvbiAoZm4sIGEsIGIsIGMsIGQpIHtcbiAgcmV0dXJuIGZuKGEsIGIsIGMsIGQpO1xufTtcblxudmFyIGZsdXNoRGlzY3JldGVVcGRhdGVzSW1wbCA9IGZ1bmN0aW9uICgpIHt9O1xuXG52YXIgYmF0Y2hlZEV2ZW50VXBkYXRlc0ltcGwgPSBiYXRjaGVkVXBkYXRlc0ltcGw7XG52YXIgaXNJbnNpZGVFdmVudEhhbmRsZXIgPSBmYWxzZTtcbnZhciBpc0JhdGNoaW5nRXZlbnRVcGRhdGVzID0gZmFsc2U7XG5cbmZ1bmN0aW9uIGZpbmlzaEV2ZW50SGFuZGxlcigpIHtcbiAgLy8gSGVyZSB3ZSB3YWl0IHVudGlsIGFsbCB1cGRhdGVzIGhhdmUgcHJvcGFnYXRlZCwgd2hpY2ggaXMgaW1wb3J0YW50XG4gIC8vIHdoZW4gdXNpbmcgY29udHJvbGxlZCBjb21wb25lbnRzIHdpdGhpbiBsYXllcnM6XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTY5OFxuICAvLyBUaGVuIHdlIHJlc3RvcmUgc3RhdGUgb2YgYW55IGNvbnRyb2xsZWQgY29tcG9uZW50LlxuICB2YXIgY29udHJvbGxlZENvbXBvbmVudHNIYXZlUGVuZGluZ1VwZGF0ZXMgPSBuZWVkc1N0YXRlUmVzdG9yZSgpO1xuXG4gIGlmIChjb250cm9sbGVkQ29tcG9uZW50c0hhdmVQZW5kaW5nVXBkYXRlcykge1xuICAgIC8vIElmIGEgY29udHJvbGxlZCBldmVudCB3YXMgZmlyZWQsIHdlIG1heSBuZWVkIHRvIHJlc3RvcmUgdGhlIHN0YXRlIG9mXG4gICAgLy8gdGhlIERPTSBub2RlIGJhY2sgdG8gdGhlIGNvbnRyb2xsZWQgdmFsdWUuIFRoaXMgaXMgbmVjZXNzYXJ5IHdoZW4gUmVhY3RcbiAgICAvLyBiYWlscyBvdXQgb2YgdGhlIHVwZGF0ZSB3aXRob3V0IHRvdWNoaW5nIHRoZSBET00uXG4gICAgZmx1c2hEaXNjcmV0ZVVwZGF0ZXNJbXBsKCk7XG4gICAgcmVzdG9yZVN0YXRlSWZOZWVkZWQoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBiYXRjaGVkVXBkYXRlcyhmbiwgYm9va2tlZXBpbmcpIHtcbiAgaWYgKGlzSW5zaWRlRXZlbnRIYW5kbGVyKSB7XG4gICAgLy8gSWYgd2UgYXJlIGN1cnJlbnRseSBpbnNpZGUgYW5vdGhlciBiYXRjaCwgd2UgbmVlZCB0byB3YWl0IHVudGlsIGl0XG4gICAgLy8gZnVsbHkgY29tcGxldGVzIGJlZm9yZSByZXN0b3Jpbmcgc3RhdGUuXG4gICAgcmV0dXJuIGZuKGJvb2trZWVwaW5nKTtcbiAgfVxuXG4gIGlzSW5zaWRlRXZlbnRIYW5kbGVyID0gdHJ1ZTtcblxuICB0cnkge1xuICAgIHJldHVybiBiYXRjaGVkVXBkYXRlc0ltcGwoZm4sIGJvb2trZWVwaW5nKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBpc0luc2lkZUV2ZW50SGFuZGxlciA9IGZhbHNlO1xuICAgIGZpbmlzaEV2ZW50SGFuZGxlcigpO1xuICB9XG59XG5mdW5jdGlvbiBiYXRjaGVkRXZlbnRVcGRhdGVzKGZuLCBhLCBiKSB7XG4gIGlmIChpc0JhdGNoaW5nRXZlbnRVcGRhdGVzKSB7XG4gICAgLy8gSWYgd2UgYXJlIGN1cnJlbnRseSBpbnNpZGUgYW5vdGhlciBiYXRjaCwgd2UgbmVlZCB0byB3YWl0IHVudGlsIGl0XG4gICAgLy8gZnVsbHkgY29tcGxldGVzIGJlZm9yZSByZXN0b3Jpbmcgc3RhdGUuXG4gICAgcmV0dXJuIGZuKGEsIGIpO1xuICB9XG5cbiAgaXNCYXRjaGluZ0V2ZW50VXBkYXRlcyA9IHRydWU7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gYmF0Y2hlZEV2ZW50VXBkYXRlc0ltcGwoZm4sIGEsIGIpO1xuICB9IGZpbmFsbHkge1xuICAgIGlzQmF0Y2hpbmdFdmVudFVwZGF0ZXMgPSBmYWxzZTtcbiAgICBmaW5pc2hFdmVudEhhbmRsZXIoKTtcbiAgfVxufVxuZnVuY3Rpb24gZGlzY3JldGVVcGRhdGVzKGZuLCBhLCBiLCBjLCBkKSB7XG4gIHZhciBwcmV2SXNJbnNpZGVFdmVudEhhbmRsZXIgPSBpc0luc2lkZUV2ZW50SGFuZGxlcjtcbiAgaXNJbnNpZGVFdmVudEhhbmRsZXIgPSB0cnVlO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGRpc2NyZXRlVXBkYXRlc0ltcGwoZm4sIGEsIGIsIGMsIGQpO1xuICB9IGZpbmFsbHkge1xuICAgIGlzSW5zaWRlRXZlbnRIYW5kbGVyID0gcHJldklzSW5zaWRlRXZlbnRIYW5kbGVyO1xuXG4gICAgaWYgKCFpc0luc2lkZUV2ZW50SGFuZGxlcikge1xuICAgICAgZmluaXNoRXZlbnRIYW5kbGVyKCk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBmbHVzaERpc2NyZXRlVXBkYXRlc0lmTmVlZGVkKHRpbWVTdGFtcCkge1xuICB7XG4gICAgaWYgKCFpc0luc2lkZUV2ZW50SGFuZGxlcikge1xuICAgICAgZmx1c2hEaXNjcmV0ZVVwZGF0ZXNJbXBsKCk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBzZXRCYXRjaGluZ0ltcGxlbWVudGF0aW9uKF9iYXRjaGVkVXBkYXRlc0ltcGwsIF9kaXNjcmV0ZVVwZGF0ZXNJbXBsLCBfZmx1c2hEaXNjcmV0ZVVwZGF0ZXNJbXBsLCBfYmF0Y2hlZEV2ZW50VXBkYXRlc0ltcGwpIHtcbiAgYmF0Y2hlZFVwZGF0ZXNJbXBsID0gX2JhdGNoZWRVcGRhdGVzSW1wbDtcbiAgZGlzY3JldGVVcGRhdGVzSW1wbCA9IF9kaXNjcmV0ZVVwZGF0ZXNJbXBsO1xuICBmbHVzaERpc2NyZXRlVXBkYXRlc0ltcGwgPSBfZmx1c2hEaXNjcmV0ZVVwZGF0ZXNJbXBsO1xuICBiYXRjaGVkRXZlbnRVcGRhdGVzSW1wbCA9IF9iYXRjaGVkRXZlbnRVcGRhdGVzSW1wbDtcbn1cblxuZnVuY3Rpb24gaXNJbnRlcmFjdGl2ZSh0YWcpIHtcbiAgcmV0dXJuIHRhZyA9PT0gJ2J1dHRvbicgfHwgdGFnID09PSAnaW5wdXQnIHx8IHRhZyA9PT0gJ3NlbGVjdCcgfHwgdGFnID09PSAndGV4dGFyZWEnO1xufVxuXG5mdW5jdGlvbiBzaG91bGRQcmV2ZW50TW91c2VFdmVudChuYW1lLCB0eXBlLCBwcm9wcykge1xuICBzd2l0Y2ggKG5hbWUpIHtcbiAgICBjYXNlICdvbkNsaWNrJzpcbiAgICBjYXNlICdvbkNsaWNrQ2FwdHVyZSc6XG4gICAgY2FzZSAnb25Eb3VibGVDbGljayc6XG4gICAgY2FzZSAnb25Eb3VibGVDbGlja0NhcHR1cmUnOlxuICAgIGNhc2UgJ29uTW91c2VEb3duJzpcbiAgICBjYXNlICdvbk1vdXNlRG93bkNhcHR1cmUnOlxuICAgIGNhc2UgJ29uTW91c2VNb3ZlJzpcbiAgICBjYXNlICdvbk1vdXNlTW92ZUNhcHR1cmUnOlxuICAgIGNhc2UgJ29uTW91c2VVcCc6XG4gICAgY2FzZSAnb25Nb3VzZVVwQ2FwdHVyZSc6XG4gICAgY2FzZSAnb25Nb3VzZUVudGVyJzpcbiAgICAgIHJldHVybiAhIShwcm9wcy5kaXNhYmxlZCAmJiBpc0ludGVyYWN0aXZlKHR5cGUpKTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGluc3QgVGhlIGluc3RhbmNlLCB3aGljaCBpcyB0aGUgc291cmNlIG9mIGV2ZW50cy5cbiAqIEBwYXJhbSB7c3RyaW5nfSByZWdpc3RyYXRpb25OYW1lIE5hbWUgb2YgbGlzdGVuZXIgKGUuZy4gYG9uQ2xpY2tgKS5cbiAqIEByZXR1cm4gez9mdW5jdGlvbn0gVGhlIHN0b3JlZCBjYWxsYmFjay5cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldExpc3RlbmVyKGluc3QsIHJlZ2lzdHJhdGlvbk5hbWUpIHtcbiAgdmFyIHN0YXRlTm9kZSA9IGluc3Quc3RhdGVOb2RlO1xuXG4gIGlmIChzdGF0ZU5vZGUgPT09IG51bGwpIHtcbiAgICAvLyBXb3JrIGluIHByb2dyZXNzIChleDogb25sb2FkIGV2ZW50cyBpbiBpbmNyZW1lbnRhbCBtb2RlKS5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBwcm9wcyA9IGdldEZpYmVyQ3VycmVudFByb3BzRnJvbU5vZGUoc3RhdGVOb2RlKTtcblxuICBpZiAocHJvcHMgPT09IG51bGwpIHtcbiAgICAvLyBXb3JrIGluIHByb2dyZXNzLlxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIGxpc3RlbmVyID0gcHJvcHNbcmVnaXN0cmF0aW9uTmFtZV07XG5cbiAgaWYgKHNob3VsZFByZXZlbnRNb3VzZUV2ZW50KHJlZ2lzdHJhdGlvbk5hbWUsIGluc3QudHlwZSwgcHJvcHMpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoISghbGlzdGVuZXIgfHwgdHlwZW9mIGxpc3RlbmVyID09PSAnZnVuY3Rpb24nKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIkV4cGVjdGVkIGBcIiArIHJlZ2lzdHJhdGlvbk5hbWUgKyBcImAgbGlzdGVuZXIgdG8gYmUgYSBmdW5jdGlvbiwgaW5zdGVhZCBnb3QgYSB2YWx1ZSBvZiBgXCIgKyB0eXBlb2YgbGlzdGVuZXIgKyBcImAgdHlwZS5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBsaXN0ZW5lcjtcbn1cblxudmFyIHBhc3NpdmVCcm93c2VyRXZlbnRzU3VwcG9ydGVkID0gZmFsc2U7IC8vIENoZWNrIGlmIGJyb3dzZXIgc3VwcG9ydCBldmVudHMgd2l0aCBwYXNzaXZlIGxpc3RlbmVyc1xuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0V2ZW50VGFyZ2V0L2FkZEV2ZW50TGlzdGVuZXIjU2FmZWx5X2RldGVjdGluZ19vcHRpb25fc3VwcG9ydFxuXG5pZiAoY2FuVXNlRE9NKSB7XG4gIHRyeSB7XG4gICAgdmFyIG9wdGlvbnMgPSB7fTsgLy8gJEZsb3dGaXhNZTogSWdub3JlIEZsb3cgY29tcGxhaW5pbmcgYWJvdXQgbmVlZGluZyBhIHZhbHVlXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob3B0aW9ucywgJ3Bhc3NpdmUnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcGFzc2l2ZUJyb3dzZXJFdmVudHNTdXBwb3J0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd0ZXN0Jywgb3B0aW9ucywgb3B0aW9ucyk7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Rlc3QnLCBvcHRpb25zLCBvcHRpb25zKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHBhc3NpdmVCcm93c2VyRXZlbnRzU3VwcG9ydGVkID0gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW52b2tlR3VhcmRlZENhbGxiYWNrUHJvZChuYW1lLCBmdW5jLCBjb250ZXh0LCBhLCBiLCBjLCBkLCBlLCBmKSB7XG4gIHZhciBmdW5jQXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMyk7XG5cbiAgdHJ5IHtcbiAgICBmdW5jLmFwcGx5KGNvbnRleHQsIGZ1bmNBcmdzKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aGlzLm9uRXJyb3IoZXJyb3IpO1xuICB9XG59XG5cbnZhciBpbnZva2VHdWFyZGVkQ2FsbGJhY2tJbXBsID0gaW52b2tlR3VhcmRlZENhbGxiYWNrUHJvZDtcblxue1xuICAvLyBJbiBERVYgbW9kZSwgd2Ugc3dhcCBvdXQgaW52b2tlR3VhcmRlZENhbGxiYWNrIGZvciBhIHNwZWNpYWwgdmVyc2lvblxuICAvLyB0aGF0IHBsYXlzIG1vcmUgbmljZWx5IHdpdGggdGhlIGJyb3dzZXIncyBEZXZUb29scy4gVGhlIGlkZWEgaXMgdG8gcHJlc2VydmVcbiAgLy8gXCJQYXVzZSBvbiBleGNlcHRpb25zXCIgYmVoYXZpb3IuIEJlY2F1c2UgUmVhY3Qgd3JhcHMgYWxsIHVzZXItcHJvdmlkZWRcbiAgLy8gZnVuY3Rpb25zIGluIGludm9rZUd1YXJkZWRDYWxsYmFjaywgYW5kIHRoZSBwcm9kdWN0aW9uIHZlcnNpb24gb2ZcbiAgLy8gaW52b2tlR3VhcmRlZENhbGxiYWNrIHVzZXMgYSB0cnktY2F0Y2gsIGFsbCB1c2VyIGV4Y2VwdGlvbnMgYXJlIHRyZWF0ZWRcbiAgLy8gbGlrZSBjYXVnaHQgZXhjZXB0aW9ucywgYW5kIHRoZSBEZXZUb29scyB3b24ndCBwYXVzZSB1bmxlc3MgdGhlIGRldmVsb3BlclxuICAvLyB0YWtlcyB0aGUgZXh0cmEgc3RlcCBvZiBlbmFibGluZyBwYXVzZSBvbiBjYXVnaHQgZXhjZXB0aW9ucy4gVGhpcyBpc1xuICAvLyB1bmludHVpdGl2ZSwgdGhvdWdoLCBiZWNhdXNlIGV2ZW4gdGhvdWdoIFJlYWN0IGhhcyBjYXVnaHQgdGhlIGVycm9yLCBmcm9tXG4gIC8vIHRoZSBkZXZlbG9wZXIncyBwZXJzcGVjdGl2ZSwgdGhlIGVycm9yIGlzIHVuY2F1Z2h0LlxuICAvL1xuICAvLyBUbyBwcmVzZXJ2ZSB0aGUgZXhwZWN0ZWQgXCJQYXVzZSBvbiBleGNlcHRpb25zXCIgYmVoYXZpb3IsIHdlIGRvbid0IHVzZSBhXG4gIC8vIHRyeS1jYXRjaCBpbiBERVYuIEluc3RlYWQsIHdlIHN5bmNocm9ub3VzbHkgZGlzcGF0Y2ggYSBmYWtlIGV2ZW50IHRvIGEgZmFrZVxuICAvLyBET00gbm9kZSwgYW5kIGNhbGwgdGhlIHVzZXItcHJvdmlkZWQgY2FsbGJhY2sgZnJvbSBpbnNpZGUgYW4gZXZlbnQgaGFuZGxlclxuICAvLyBmb3IgdGhhdCBmYWtlIGV2ZW50LiBJZiB0aGUgY2FsbGJhY2sgdGhyb3dzLCB0aGUgZXJyb3IgaXMgXCJjYXB0dXJlZFwiIHVzaW5nXG4gIC8vIGEgZ2xvYmFsIGV2ZW50IGhhbmRsZXIuIEJ1dCBiZWNhdXNlIHRoZSBlcnJvciBoYXBwZW5zIGluIGEgZGlmZmVyZW50XG4gIC8vIGV2ZW50IGxvb3AgY29udGV4dCwgaXQgZG9lcyBub3QgaW50ZXJydXB0IHRoZSBub3JtYWwgcHJvZ3JhbSBmbG93LlxuICAvLyBFZmZlY3RpdmVseSwgdGhpcyBnaXZlcyB1cyB0cnktY2F0Y2ggYmVoYXZpb3Igd2l0aG91dCBhY3R1YWxseSB1c2luZ1xuICAvLyB0cnktY2F0Y2guIE5lYXQhXG4gIC8vIENoZWNrIHRoYXQgdGhlIGJyb3dzZXIgc3VwcG9ydHMgdGhlIEFQSXMgd2UgbmVlZCB0byBpbXBsZW1lbnQgb3VyIHNwZWNpYWxcbiAgLy8gREVWIHZlcnNpb24gb2YgaW52b2tlR3VhcmRlZENhbGxiYWNrXG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LmRpc3BhdGNoRXZlbnQgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRXZlbnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgZmFrZU5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdyZWFjdCcpO1xuXG4gICAgaW52b2tlR3VhcmRlZENhbGxiYWNrSW1wbCA9IGZ1bmN0aW9uIGludm9rZUd1YXJkZWRDYWxsYmFja0RldihuYW1lLCBmdW5jLCBjb250ZXh0LCBhLCBiLCBjLCBkLCBlLCBmKSB7XG4gICAgICAvLyBJZiBkb2N1bWVudCBkb2Vzbid0IGV4aXN0IHdlIGtub3cgZm9yIHN1cmUgd2Ugd2lsbCBjcmFzaCBpbiB0aGlzIG1ldGhvZFxuICAgICAgLy8gd2hlbiB3ZSBjYWxsIGRvY3VtZW50LmNyZWF0ZUV2ZW50KCkuIEhvd2V2ZXIgdGhpcyBjYW4gY2F1c2UgY29uZnVzaW5nXG4gICAgICAvLyBlcnJvcnM6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9va2luY3ViYXRvci9jcmVhdGUtcmVhY3QtYXBwL2lzc3Vlcy8zNDgyXG4gICAgICAvLyBTbyB3ZSBwcmVlbXB0aXZlbHkgdGhyb3cgd2l0aCBhIGJldHRlciBtZXNzYWdlIGluc3RlYWQuXG4gICAgICBpZiAoISh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnKSkge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiVGhlIGBkb2N1bWVudGAgZ2xvYmFsIHdhcyBkZWZpbmVkIHdoZW4gUmVhY3Qgd2FzIGluaXRpYWxpemVkLCBidXQgaXMgbm90IGRlZmluZWQgYW55bW9yZS4gVGhpcyBjYW4gaGFwcGVuIGluIGEgdGVzdCBlbnZpcm9ubWVudCBpZiBhIGNvbXBvbmVudCBzY2hlZHVsZXMgYW4gdXBkYXRlIGZyb20gYW4gYXN5bmNocm9ub3VzIGNhbGxiYWNrLCBidXQgdGhlIHRlc3QgaGFzIGFscmVhZHkgZmluaXNoZWQgcnVubmluZy4gVG8gc29sdmUgdGhpcywgeW91IGNhbiBlaXRoZXIgdW5tb3VudCB0aGUgY29tcG9uZW50IGF0IHRoZSBlbmQgb2YgeW91ciB0ZXN0IChhbmQgZW5zdXJlIHRoYXQgYW55IGFzeW5jaHJvbm91cyBvcGVyYXRpb25zIGdldCBjYW5jZWxlZCBpbiBgY29tcG9uZW50V2lsbFVubW91bnRgKSwgb3IgeW91IGNhbiBjaGFuZ2UgdGhlIHRlc3QgaXRzZWxmIHRvIGJlIGFzeW5jaHJvbm91cy5cIiApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBldnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnRXZlbnQnKTtcbiAgICAgIHZhciBkaWRDYWxsID0gZmFsc2U7IC8vIEtlZXBzIHRyYWNrIG9mIHdoZXRoZXIgdGhlIHVzZXItcHJvdmlkZWQgY2FsbGJhY2sgdGhyZXcgYW4gZXJyb3IuIFdlXG4gICAgICAvLyBzZXQgdGhpcyB0byB0cnVlIGF0IHRoZSBiZWdpbm5pbmcsIHRoZW4gc2V0IGl0IHRvIGZhbHNlIHJpZ2h0IGFmdGVyXG4gICAgICAvLyBjYWxsaW5nIHRoZSBmdW5jdGlvbi4gSWYgdGhlIGZ1bmN0aW9uIGVycm9ycywgYGRpZEVycm9yYCB3aWxsIG5ldmVyIGJlXG4gICAgICAvLyBzZXQgdG8gZmFsc2UuIFRoaXMgc3RyYXRlZ3kgd29ya3MgZXZlbiBpZiB0aGUgYnJvd3NlciBpcyBmbGFreSBhbmRcbiAgICAgIC8vIGZhaWxzIHRvIGNhbGwgb3VyIGdsb2JhbCBlcnJvciBoYW5kbGVyLCBiZWNhdXNlIGl0IGRvZXNuJ3QgcmVseSBvblxuICAgICAgLy8gdGhlIGVycm9yIGV2ZW50IGF0IGFsbC5cblxuICAgICAgdmFyIGRpZEVycm9yID0gdHJ1ZTsgLy8gS2VlcHMgdHJhY2sgb2YgdGhlIHZhbHVlIG9mIHdpbmRvdy5ldmVudCBzbyB0aGF0IHdlIGNhbiByZXNldCBpdFxuICAgICAgLy8gZHVyaW5nIHRoZSBjYWxsYmFjayB0byBsZXQgdXNlciBjb2RlIGFjY2VzcyB3aW5kb3cuZXZlbnQgaW4gdGhlXG4gICAgICAvLyBicm93c2VycyB0aGF0IHN1cHBvcnQgaXQuXG5cbiAgICAgIHZhciB3aW5kb3dFdmVudCA9IHdpbmRvdy5ldmVudDsgLy8gS2VlcHMgdHJhY2sgb2YgdGhlIGRlc2NyaXB0b3Igb2Ygd2luZG93LmV2ZW50IHRvIHJlc3RvcmUgaXQgYWZ0ZXIgZXZlbnRcbiAgICAgIC8vIGRpc3BhdGNoaW5nOiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEzNjg4XG5cbiAgICAgIHZhciB3aW5kb3dFdmVudERlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHdpbmRvdywgJ2V2ZW50Jyk7XG5cbiAgICAgIGZ1bmN0aW9uIHJlc3RvcmVBZnRlckRpc3BhdGNoKCkge1xuICAgICAgICAvLyBXZSBpbW1lZGlhdGVseSByZW1vdmUgdGhlIGNhbGxiYWNrIGZyb20gZXZlbnQgbGlzdGVuZXJzIHNvIHRoYXRcbiAgICAgICAgLy8gbmVzdGVkIGBpbnZva2VHdWFyZGVkQ2FsbGJhY2tgIGNhbGxzIGRvIG5vdCBjbGFzaC4gT3RoZXJ3aXNlLCBhXG4gICAgICAgIC8vIG5lc3RlZCBjYWxsIHdvdWxkIHRyaWdnZXIgdGhlIGZha2UgZXZlbnQgaGFuZGxlcnMgb2YgYW55IGNhbGwgaGlnaGVyXG4gICAgICAgIC8vIGluIHRoZSBzdGFjay5cbiAgICAgICAgZmFrZU5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihldnRUeXBlLCBjYWxsQ2FsbGJhY2ssIGZhbHNlKTsgLy8gV2UgY2hlY2sgZm9yIHdpbmRvdy5oYXNPd25Qcm9wZXJ0eSgnZXZlbnQnKSB0byBwcmV2ZW50IHRoZVxuICAgICAgICAvLyB3aW5kb3cuZXZlbnQgYXNzaWdubWVudCBpbiBib3RoIElFIDw9IDEwIGFzIHRoZXkgdGhyb3cgYW4gZXJyb3JcbiAgICAgICAgLy8gXCJNZW1iZXIgbm90IGZvdW5kXCIgaW4gc3RyaWN0IG1vZGUsIGFuZCBpbiBGaXJlZm94IHdoaWNoIGRvZXMgbm90XG4gICAgICAgIC8vIHN1cHBvcnQgd2luZG93LmV2ZW50LlxuXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93LmV2ZW50ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuaGFzT3duUHJvcGVydHkoJ2V2ZW50JykpIHtcbiAgICAgICAgICB3aW5kb3cuZXZlbnQgPSB3aW5kb3dFdmVudDtcbiAgICAgICAgfVxuICAgICAgfSAvLyBDcmVhdGUgYW4gZXZlbnQgaGFuZGxlciBmb3Igb3VyIGZha2UgZXZlbnQuIFdlIHdpbGwgc3luY2hyb25vdXNseVxuICAgICAgLy8gZGlzcGF0Y2ggb3VyIGZha2UgZXZlbnQgdXNpbmcgYGRpc3BhdGNoRXZlbnRgLiBJbnNpZGUgdGhlIGhhbmRsZXIsIHdlXG4gICAgICAvLyBjYWxsIHRoZSB1c2VyLXByb3ZpZGVkIGNhbGxiYWNrLlxuXG5cbiAgICAgIHZhciBmdW5jQXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMyk7XG5cbiAgICAgIGZ1bmN0aW9uIGNhbGxDYWxsYmFjaygpIHtcbiAgICAgICAgZGlkQ2FsbCA9IHRydWU7XG4gICAgICAgIHJlc3RvcmVBZnRlckRpc3BhdGNoKCk7XG4gICAgICAgIGZ1bmMuYXBwbHkoY29udGV4dCwgZnVuY0FyZ3MpO1xuICAgICAgICBkaWRFcnJvciA9IGZhbHNlO1xuICAgICAgfSAvLyBDcmVhdGUgYSBnbG9iYWwgZXJyb3IgZXZlbnQgaGFuZGxlci4gV2UgdXNlIHRoaXMgdG8gY2FwdHVyZSB0aGUgdmFsdWVcbiAgICAgIC8vIHRoYXQgd2FzIHRocm93bi4gSXQncyBwb3NzaWJsZSB0aGF0IHRoaXMgZXJyb3IgaGFuZGxlciB3aWxsIGZpcmUgbW9yZVxuICAgICAgLy8gdGhhbiBvbmNlOyBmb3IgZXhhbXBsZSwgaWYgbm9uLVJlYWN0IGNvZGUgYWxzbyBjYWxscyBgZGlzcGF0Y2hFdmVudGBcbiAgICAgIC8vIGFuZCBhIGhhbmRsZXIgZm9yIHRoYXQgZXZlbnQgdGhyb3dzLiBXZSBzaG91bGQgYmUgcmVzaWxpZW50IHRvIG1vc3Qgb2ZcbiAgICAgIC8vIHRob3NlIGNhc2VzLiBFdmVuIGlmIG91ciBlcnJvciBldmVudCBoYW5kbGVyIGZpcmVzIG1vcmUgdGhhbiBvbmNlLCB0aGVcbiAgICAgIC8vIGxhc3QgZXJyb3IgZXZlbnQgaXMgYWx3YXlzIHVzZWQuIElmIHRoZSBjYWxsYmFjayBhY3R1YWxseSBkb2VzIGVycm9yLFxuICAgICAgLy8gd2Uga25vdyB0aGF0IHRoZSBsYXN0IGVycm9yIGV2ZW50IGlzIHRoZSBjb3JyZWN0IG9uZSwgYmVjYXVzZSBpdCdzIG5vdFxuICAgICAgLy8gcG9zc2libGUgZm9yIGFueXRoaW5nIGVsc2UgdG8gaGF2ZSBoYXBwZW5lZCBpbiBiZXR3ZWVuIG91ciBjYWxsYmFja1xuICAgICAgLy8gZXJyb3JpbmcgYW5kIHRoZSBjb2RlIHRoYXQgZm9sbG93cyB0aGUgYGRpc3BhdGNoRXZlbnRgIGNhbGwgYmVsb3cuIElmXG4gICAgICAvLyB0aGUgY2FsbGJhY2sgZG9lc24ndCBlcnJvciwgYnV0IHRoZSBlcnJvciBldmVudCB3YXMgZmlyZWQsIHdlIGtub3cgdG9cbiAgICAgIC8vIGlnbm9yZSBpdCBiZWNhdXNlIGBkaWRFcnJvcmAgd2lsbCBiZSBmYWxzZSwgYXMgZGVzY3JpYmVkIGFib3ZlLlxuXG5cbiAgICAgIHZhciBlcnJvcjsgLy8gVXNlIHRoaXMgdG8gdHJhY2sgd2hldGhlciB0aGUgZXJyb3IgZXZlbnQgaXMgZXZlciBjYWxsZWQuXG5cbiAgICAgIHZhciBkaWRTZXRFcnJvciA9IGZhbHNlO1xuICAgICAgdmFyIGlzQ3Jvc3NPcmlnaW5FcnJvciA9IGZhbHNlO1xuXG4gICAgICBmdW5jdGlvbiBoYW5kbGVXaW5kb3dFcnJvcihldmVudCkge1xuICAgICAgICBlcnJvciA9IGV2ZW50LmVycm9yO1xuICAgICAgICBkaWRTZXRFcnJvciA9IHRydWU7XG5cbiAgICAgICAgaWYgKGVycm9yID09PSBudWxsICYmIGV2ZW50LmNvbG5vID09PSAwICYmIGV2ZW50LmxpbmVubyA9PT0gMCkge1xuICAgICAgICAgIGlzQ3Jvc3NPcmlnaW5FcnJvciA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICAgIC8vIFNvbWUgb3RoZXIgZXJyb3IgaGFuZGxlciBoYXMgcHJldmVudGVkIGRlZmF1bHQuXG4gICAgICAgICAgLy8gQnJvd3NlcnMgc2lsZW5jZSB0aGUgZXJyb3IgcmVwb3J0IGlmIHRoaXMgaGFwcGVucy5cbiAgICAgICAgICAvLyBXZSdsbCByZW1lbWJlciB0aGlzIHRvIGxhdGVyIGRlY2lkZSB3aGV0aGVyIHRvIGxvZyBpdCBvciBub3QuXG4gICAgICAgICAgaWYgKGVycm9yICE9IG51bGwgJiYgdHlwZW9mIGVycm9yID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgZXJyb3IuX3N1cHByZXNzTG9nZ2luZyA9IHRydWU7XG4gICAgICAgICAgICB9IGNhdGNoIChpbm5lcikgey8vIElnbm9yZS5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gLy8gQ3JlYXRlIGEgZmFrZSBldmVudCB0eXBlLlxuXG5cbiAgICAgIHZhciBldnRUeXBlID0gXCJyZWFjdC1cIiArIChuYW1lID8gbmFtZSA6ICdpbnZva2VndWFyZGVkY2FsbGJhY2snKTsgLy8gQXR0YWNoIG91ciBldmVudCBoYW5kbGVyc1xuXG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBoYW5kbGVXaW5kb3dFcnJvcik7XG4gICAgICBmYWtlTm9kZS5hZGRFdmVudExpc3RlbmVyKGV2dFR5cGUsIGNhbGxDYWxsYmFjaywgZmFsc2UpOyAvLyBTeW5jaHJvbm91c2x5IGRpc3BhdGNoIG91ciBmYWtlIGV2ZW50LiBJZiB0aGUgdXNlci1wcm92aWRlZCBmdW5jdGlvblxuICAgICAgLy8gZXJyb3JzLCBpdCB3aWxsIHRyaWdnZXIgb3VyIGdsb2JhbCBlcnJvciBoYW5kbGVyLlxuXG4gICAgICBldnQuaW5pdEV2ZW50KGV2dFR5cGUsIGZhbHNlLCBmYWxzZSk7XG4gICAgICBmYWtlTm9kZS5kaXNwYXRjaEV2ZW50KGV2dCk7XG5cbiAgICAgIGlmICh3aW5kb3dFdmVudERlc2NyaXB0b3IpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdywgJ2V2ZW50Jywgd2luZG93RXZlbnREZXNjcmlwdG9yKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRpZENhbGwgJiYgZGlkRXJyb3IpIHtcbiAgICAgICAgaWYgKCFkaWRTZXRFcnJvcikge1xuICAgICAgICAgIC8vIFRoZSBjYWxsYmFjayBlcnJvcmVkLCBidXQgdGhlIGVycm9yIGV2ZW50IG5ldmVyIGZpcmVkLlxuICAgICAgICAgIGVycm9yID0gbmV3IEVycm9yKCdBbiBlcnJvciB3YXMgdGhyb3duIGluc2lkZSBvbmUgb2YgeW91ciBjb21wb25lbnRzLCBidXQgUmVhY3QgJyArIFwiZG9lc24ndCBrbm93IHdoYXQgaXQgd2FzLiBUaGlzIGlzIGxpa2VseSBkdWUgdG8gYnJvd3NlciBcIiArICdmbGFraW5lc3MuIFJlYWN0IGRvZXMgaXRzIGJlc3QgdG8gcHJlc2VydmUgdGhlIFwiUGF1c2Ugb24gJyArICdleGNlcHRpb25zXCIgYmVoYXZpb3Igb2YgdGhlIERldlRvb2xzLCB3aGljaCByZXF1aXJlcyBzb21lICcgKyBcIkRFVi1tb2RlIG9ubHkgdHJpY2tzLiBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlc2UgZG9uJ3Qgd29yayBpbiBcIiArICd5b3VyIGJyb3dzZXIuIFRyeSB0cmlnZ2VyaW5nIHRoZSBlcnJvciBpbiBwcm9kdWN0aW9uIG1vZGUsICcgKyAnb3Igc3dpdGNoaW5nIHRvIGEgbW9kZXJuIGJyb3dzZXIuIElmIHlvdSBzdXNwZWN0IHRoYXQgdGhpcyBpcyAnICsgJ2FjdHVhbGx5IGFuIGlzc3VlIHdpdGggUmVhY3QsIHBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzQ3Jvc3NPcmlnaW5FcnJvcikge1xuICAgICAgICAgIGVycm9yID0gbmV3IEVycm9yKFwiQSBjcm9zcy1vcmlnaW4gZXJyb3Igd2FzIHRocm93bi4gUmVhY3QgZG9lc24ndCBoYXZlIGFjY2VzcyB0byBcIiArICd0aGUgYWN0dWFsIGVycm9yIG9iamVjdCBpbiBkZXZlbG9wbWVudC4gJyArICdTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2Nyb3Nzb3JpZ2luLWVycm9yIGZvciBtb3JlIGluZm9ybWF0aW9uLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vbkVycm9yKGVycm9yKTtcbiAgICAgIH0gLy8gUmVtb3ZlIG91ciBldmVudCBsaXN0ZW5lcnNcblxuXG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignZXJyb3InLCBoYW5kbGVXaW5kb3dFcnJvcik7XG5cbiAgICAgIGlmICghZGlkQ2FsbCkge1xuICAgICAgICAvLyBTb21ldGhpbmcgd2VudCByZWFsbHkgd3JvbmcsIGFuZCBvdXIgZXZlbnQgd2FzIG5vdCBkaXNwYXRjaGVkLlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzE2NzM0XG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTY1ODVcbiAgICAgICAgLy8gRmFsbCBiYWNrIHRvIHRoZSBwcm9kdWN0aW9uIGltcGxlbWVudGF0aW9uLlxuICAgICAgICByZXN0b3JlQWZ0ZXJEaXNwYXRjaCgpO1xuICAgICAgICByZXR1cm4gaW52b2tlR3VhcmRlZENhbGxiYWNrUHJvZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfVxuICAgIH07XG4gIH1cbn1cblxudmFyIGludm9rZUd1YXJkZWRDYWxsYmFja0ltcGwkMSA9IGludm9rZUd1YXJkZWRDYWxsYmFja0ltcGw7XG5cbnZhciBoYXNFcnJvciA9IGZhbHNlO1xudmFyIGNhdWdodEVycm9yID0gbnVsbDsgLy8gVXNlZCBieSBldmVudCBzeXN0ZW0gdG8gY2FwdHVyZS9yZXRocm93IHRoZSBmaXJzdCBlcnJvci5cblxudmFyIGhhc1JldGhyb3dFcnJvciA9IGZhbHNlO1xudmFyIHJldGhyb3dFcnJvciA9IG51bGw7XG52YXIgcmVwb3J0ZXIgPSB7XG4gIG9uRXJyb3I6IGZ1bmN0aW9uIChlcnJvcikge1xuICAgIGhhc0Vycm9yID0gdHJ1ZTtcbiAgICBjYXVnaHRFcnJvciA9IGVycm9yO1xuICB9XG59O1xuLyoqXG4gKiBDYWxsIGEgZnVuY3Rpb24gd2hpbGUgZ3VhcmRpbmcgYWdhaW5zdCBlcnJvcnMgdGhhdCBoYXBwZW5zIHdpdGhpbiBpdC5cbiAqIFJldHVybnMgYW4gZXJyb3IgaWYgaXQgdGhyb3dzLCBvdGhlcndpc2UgbnVsbC5cbiAqXG4gKiBJbiBwcm9kdWN0aW9uLCB0aGlzIGlzIGltcGxlbWVudGVkIHVzaW5nIGEgdHJ5LWNhdGNoLiBUaGUgcmVhc29uIHdlIGRvbid0XG4gKiB1c2UgYSB0cnktY2F0Y2ggZGlyZWN0bHkgaXMgc28gdGhhdCB3ZSBjYW4gc3dhcCBvdXQgYSBkaWZmZXJlbnRcbiAqIGltcGxlbWVudGF0aW9uIGluIERFViBtb2RlLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIG9mIHRoZSBndWFyZCB0byB1c2UgZm9yIGxvZ2dpbmcgb3IgZGVidWdnaW5nXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBpbnZva2VcbiAqIEBwYXJhbSB7Kn0gY29udGV4dCBUaGUgY29udGV4dCB0byB1c2Ugd2hlbiBjYWxsaW5nIHRoZSBmdW5jdGlvblxuICogQHBhcmFtIHsuLi4qfSBhcmdzIEFyZ3VtZW50cyBmb3IgZnVuY3Rpb25cbiAqL1xuXG5mdW5jdGlvbiBpbnZva2VHdWFyZGVkQ2FsbGJhY2sobmFtZSwgZnVuYywgY29udGV4dCwgYSwgYiwgYywgZCwgZSwgZikge1xuICBoYXNFcnJvciA9IGZhbHNlO1xuICBjYXVnaHRFcnJvciA9IG51bGw7XG4gIGludm9rZUd1YXJkZWRDYWxsYmFja0ltcGwkMS5hcHBseShyZXBvcnRlciwgYXJndW1lbnRzKTtcbn1cbi8qKlxuICogU2FtZSBhcyBpbnZva2VHdWFyZGVkQ2FsbGJhY2ssIGJ1dCBpbnN0ZWFkIG9mIHJldHVybmluZyBhbiBlcnJvciwgaXQgc3RvcmVzXG4gKiBpdCBpbiBhIGdsb2JhbCBzbyBpdCBjYW4gYmUgcmV0aHJvd24gYnkgYHJldGhyb3dDYXVnaHRFcnJvcmAgbGF0ZXIuXG4gKiBUT0RPOiBTZWUgaWYgY2F1Z2h0RXJyb3IgYW5kIHJldGhyb3dFcnJvciBjYW4gYmUgdW5pZmllZC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBvZiB0aGUgZ3VhcmQgdG8gdXNlIGZvciBsb2dnaW5nIG9yIGRlYnVnZ2luZ1xuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaW52b2tlXG4gKiBAcGFyYW0geyp9IGNvbnRleHQgVGhlIGNvbnRleHQgdG8gdXNlIHdoZW4gY2FsbGluZyB0aGUgZnVuY3Rpb25cbiAqIEBwYXJhbSB7Li4uKn0gYXJncyBBcmd1bWVudHMgZm9yIGZ1bmN0aW9uXG4gKi9cblxuZnVuY3Rpb24gaW52b2tlR3VhcmRlZENhbGxiYWNrQW5kQ2F0Y2hGaXJzdEVycm9yKG5hbWUsIGZ1bmMsIGNvbnRleHQsIGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgaW52b2tlR3VhcmRlZENhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgaWYgKGhhc0Vycm9yKSB7XG4gICAgdmFyIGVycm9yID0gY2xlYXJDYXVnaHRFcnJvcigpO1xuXG4gICAgaWYgKCFoYXNSZXRocm93RXJyb3IpIHtcbiAgICAgIGhhc1JldGhyb3dFcnJvciA9IHRydWU7XG4gICAgICByZXRocm93RXJyb3IgPSBlcnJvcjtcbiAgICB9XG4gIH1cbn1cbi8qKlxuICogRHVyaW5nIGV4ZWN1dGlvbiBvZiBndWFyZGVkIGZ1bmN0aW9ucyB3ZSB3aWxsIGNhcHR1cmUgdGhlIGZpcnN0IGVycm9yIHdoaWNoXG4gKiB3ZSB3aWxsIHJldGhyb3cgdG8gYmUgaGFuZGxlZCBieSB0aGUgdG9wIGxldmVsIGVycm9yIGhhbmRsZXIuXG4gKi9cblxuZnVuY3Rpb24gcmV0aHJvd0NhdWdodEVycm9yKCkge1xuICBpZiAoaGFzUmV0aHJvd0Vycm9yKSB7XG4gICAgdmFyIGVycm9yID0gcmV0aHJvd0Vycm9yO1xuICAgIGhhc1JldGhyb3dFcnJvciA9IGZhbHNlO1xuICAgIHJldGhyb3dFcnJvciA9IG51bGw7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cbmZ1bmN0aW9uIGhhc0NhdWdodEVycm9yKCkge1xuICByZXR1cm4gaGFzRXJyb3I7XG59XG5mdW5jdGlvbiBjbGVhckNhdWdodEVycm9yKCkge1xuICBpZiAoaGFzRXJyb3IpIHtcbiAgICB2YXIgZXJyb3IgPSBjYXVnaHRFcnJvcjtcbiAgICBoYXNFcnJvciA9IGZhbHNlO1xuICAgIGNhdWdodEVycm9yID0gbnVsbDtcbiAgICByZXR1cm4gZXJyb3I7XG4gIH0gZWxzZSB7XG4gICAge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJjbGVhckNhdWdodEVycm9yIHdhcyBjYWxsZWQgYnV0IG5vIGVycm9yIHdhcyBjYXB0dXJlZC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIGBSZWFjdEluc3RhbmNlTWFwYCBtYWludGFpbnMgYSBtYXBwaW5nIGZyb20gYSBwdWJsaWMgZmFjaW5nIHN0YXRlZnVsXG4gKiBpbnN0YW5jZSAoa2V5KSBhbmQgdGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9uICh2YWx1ZSkuIFRoaXMgYWxsb3dzIHB1YmxpY1xuICogbWV0aG9kcyB0byBhY2NlcHQgdGhlIHVzZXIgZmFjaW5nIGluc3RhbmNlIGFzIGFuIGFyZ3VtZW50IGFuZCBtYXAgdGhlbSBiYWNrXG4gKiB0byBpbnRlcm5hbCBtZXRob2RzLlxuICpcbiAqIE5vdGUgdGhhdCB0aGlzIG1vZHVsZSBpcyBjdXJyZW50bHkgc2hhcmVkIGFuZCBhc3N1bWVkIHRvIGJlIHN0YXRlbGVzcy5cbiAqIElmIHRoaXMgYmVjb21lcyBhbiBhY3R1YWwgTWFwLCB0aGF0IHdpbGwgYnJlYWsuXG4gKi9cbmZ1bmN0aW9uIGdldChrZXkpIHtcbiAgcmV0dXJuIGtleS5fcmVhY3RJbnRlcm5hbHM7XG59XG5mdW5jdGlvbiBoYXMoa2V5KSB7XG4gIHJldHVybiBrZXkuX3JlYWN0SW50ZXJuYWxzICE9PSB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICBrZXkuX3JlYWN0SW50ZXJuYWxzID0gdmFsdWU7XG59XG5cbi8vIERvbid0IGNoYW5nZSB0aGVzZSB0d28gdmFsdWVzLiBUaGV5J3JlIHVzZWQgYnkgUmVhY3QgRGV2IFRvb2xzLlxudmFyIE5vRmxhZ3MgPVxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbjA7XG52YXIgUGVyZm9ybWVkV29yayA9XG4vKiAgICAgICAgICAgICAgICAqL1xuMTsgLy8gWW91IGNhbiBjaGFuZ2UgdGhlIHJlc3QgKGFuZCBhZGQgbW9yZSkuXG5cbnZhciBQbGFjZW1lbnQgPVxuLyogICAgICAgICAgICAgICAgICAgICovXG4yO1xudmFyIFVwZGF0ZSA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbjQ7XG52YXIgUGxhY2VtZW50QW5kVXBkYXRlID1cbi8qICAgICAgICAgICAqL1xuNjtcbnZhciBEZWxldGlvbiA9XG4vKiAgICAgICAgICAgICAgICAgICAgICovXG44O1xudmFyIENvbnRlbnRSZXNldCA9XG4vKiAgICAgICAgICAgICAgICAgKi9cbjE2O1xudmFyIENhbGxiYWNrID1cbi8qICAgICAgICAgICAgICAgICAgICAgKi9cbjMyO1xudmFyIERpZENhcHR1cmUgPVxuLyogICAgICAgICAgICAgICAgICAgKi9cbjY0O1xudmFyIFJlZiA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbjEyODtcbnZhciBTbmFwc2hvdCA9XG4vKiAgICAgICAgICAgICAgICAgICAgICovXG4yNTY7XG52YXIgUGFzc2l2ZSA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuNTEyOyAvLyBUT0RPIChlZmZlY3RzKSBSZW1vdmUgdGhpcyBiaXQgb25jZSB0aGUgbmV3IHJlY29uY2lsZXIgaXMgc3luY2VkIHRvIHRoZSBvbGQuXG5cbnZhciBQYXNzaXZlVW5tb3VudFBlbmRpbmdEZXYgPVxuLyogICAgICovXG44MTkyO1xudmFyIEh5ZHJhdGluZyA9XG4vKiAgICAgICAgICAgICAgICAgICAgKi9cbjEwMjQ7XG52YXIgSHlkcmF0aW5nQW5kVXBkYXRlID1cbi8qICAgICAgICAgICAqL1xuMTAyODsgLy8gUGFzc2l2ZSAmIFVwZGF0ZSAmIENhbGxiYWNrICYgUmVmICYgU25hcHNob3RcblxudmFyIExpZmVjeWNsZUVmZmVjdE1hc2sgPVxuLyogICAgICAgICAgKi9cbjkzMjsgLy8gVW5pb24gb2YgYWxsIGhvc3QgZWZmZWN0c1xuXG52YXIgSG9zdEVmZmVjdE1hc2sgPVxuLyogICAgICAgICAgICAgICAqL1xuMjA0NzsgLy8gVGhlc2UgYXJlIG5vdCByZWFsbHkgc2lkZSBlZmZlY3RzLCBidXQgd2Ugc3RpbGwgcmV1c2UgdGhpcyBmaWVsZC5cblxudmFyIEluY29tcGxldGUgPVxuLyogICAgICAgICAgICAgICAgICAgKi9cbjIwNDg7XG52YXIgU2hvdWxkQ2FwdHVyZSA9XG4vKiAgICAgICAgICAgICAgICAqL1xuNDA5NjtcbnZhciBGb3JjZVVwZGF0ZUZvckxlZ2FjeVN1c3BlbnNlID1cbi8qICovXG4xNjM4NDsgLy8gU3RhdGljIHRhZ3MgZGVzY3JpYmUgYXNwZWN0cyBvZiBhIGZpYmVyIHRoYXQgYXJlIG5vdCBzcGVjaWZpYyB0byBhIHJlbmRlcixcblxudmFyIFJlYWN0Q3VycmVudE93bmVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50T3duZXI7XG5mdW5jdGlvbiBnZXROZWFyZXN0TW91bnRlZEZpYmVyKGZpYmVyKSB7XG4gIHZhciBub2RlID0gZmliZXI7XG4gIHZhciBuZWFyZXN0TW91bnRlZCA9IGZpYmVyO1xuXG4gIGlmICghZmliZXIuYWx0ZXJuYXRlKSB7XG4gICAgLy8gSWYgdGhlcmUgaXMgbm8gYWx0ZXJuYXRlLCB0aGlzIG1pZ2h0IGJlIGEgbmV3IHRyZWUgdGhhdCBpc24ndCBpbnNlcnRlZFxuICAgIC8vIHlldC4gSWYgaXQgaXMsIHRoZW4gaXQgd2lsbCBoYXZlIGEgcGVuZGluZyBpbnNlcnRpb24gZWZmZWN0IG9uIGl0LlxuICAgIHZhciBuZXh0Tm9kZSA9IG5vZGU7XG5cbiAgICBkbyB7XG4gICAgICBub2RlID0gbmV4dE5vZGU7XG5cbiAgICAgIGlmICgobm9kZS5mbGFncyAmIChQbGFjZW1lbnQgfCBIeWRyYXRpbmcpKSAhPT0gTm9GbGFncykge1xuICAgICAgICAvLyBUaGlzIGlzIGFuIGluc2VydGlvbiBvciBpbi1wcm9ncmVzcyBoeWRyYXRpb24uIFRoZSBuZWFyZXN0IHBvc3NpYmxlXG4gICAgICAgIC8vIG1vdW50ZWQgZmliZXIgaXMgdGhlIHBhcmVudCBidXQgd2UgbmVlZCB0byBjb250aW51ZSB0byBmaWd1cmUgb3V0XG4gICAgICAgIC8vIGlmIHRoYXQgb25lIGlzIHN0aWxsIG1vdW50ZWQuXG4gICAgICAgIG5lYXJlc3RNb3VudGVkID0gbm9kZS5yZXR1cm47XG4gICAgICB9XG5cbiAgICAgIG5leHROb2RlID0gbm9kZS5yZXR1cm47XG4gICAgfSB3aGlsZSAobmV4dE5vZGUpO1xuICB9IGVsc2Uge1xuICAgIHdoaWxlIChub2RlLnJldHVybikge1xuICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGlmIChub2RlLnRhZyA9PT0gSG9zdFJvb3QpIHtcbiAgICAvLyBUT0RPOiBDaGVjayBpZiB0aGlzIHdhcyBhIG5lc3RlZCBIb3N0Um9vdCB3aGVuIHVzZWQgd2l0aFxuICAgIC8vIHJlbmRlckNvbnRhaW5lckludG9TdWJ0cmVlLlxuICAgIHJldHVybiBuZWFyZXN0TW91bnRlZDtcbiAgfSAvLyBJZiB3ZSBkaWRuJ3QgaGl0IHRoZSByb290LCB0aGF0IG1lYW5zIHRoYXQgd2UncmUgaW4gYW4gZGlzY29ubmVjdGVkIHRyZWVcbiAgLy8gdGhhdCBoYXMgYmVlbiB1bm1vdW50ZWQuXG5cblxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGdldFN1c3BlbnNlSW5zdGFuY2VGcm9tRmliZXIoZmliZXIpIHtcbiAgaWYgKGZpYmVyLnRhZyA9PT0gU3VzcGVuc2VDb21wb25lbnQpIHtcbiAgICB2YXIgc3VzcGVuc2VTdGF0ZSA9IGZpYmVyLm1lbW9pemVkU3RhdGU7XG5cbiAgICBpZiAoc3VzcGVuc2VTdGF0ZSA9PT0gbnVsbCkge1xuICAgICAgdmFyIGN1cnJlbnQgPSBmaWJlci5hbHRlcm5hdGU7XG5cbiAgICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgIHN1c3BlbnNlU3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN1c3BlbnNlU3RhdGUgIT09IG51bGwpIHtcbiAgICAgIHJldHVybiBzdXNwZW5zZVN0YXRlLmRlaHlkcmF0ZWQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBnZXRDb250YWluZXJGcm9tRmliZXIoZmliZXIpIHtcbiAgcmV0dXJuIGZpYmVyLnRhZyA9PT0gSG9zdFJvb3QgPyBmaWJlci5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyA6IG51bGw7XG59XG5mdW5jdGlvbiBpc0ZpYmVyTW91bnRlZChmaWJlcikge1xuICByZXR1cm4gZ2V0TmVhcmVzdE1vdW50ZWRGaWJlcihmaWJlcikgPT09IGZpYmVyO1xufVxuZnVuY3Rpb24gaXNNb3VudGVkKGNvbXBvbmVudCkge1xuICB7XG4gICAgdmFyIG93bmVyID0gUmVhY3RDdXJyZW50T3duZXIuY3VycmVudDtcblxuICAgIGlmIChvd25lciAhPT0gbnVsbCAmJiBvd25lci50YWcgPT09IENsYXNzQ29tcG9uZW50KSB7XG4gICAgICB2YXIgb3duZXJGaWJlciA9IG93bmVyO1xuICAgICAgdmFyIGluc3RhbmNlID0gb3duZXJGaWJlci5zdGF0ZU5vZGU7XG5cbiAgICAgIGlmICghaW5zdGFuY2UuX3dhcm5lZEFib3V0UmVmc0luUmVuZGVyKSB7XG4gICAgICAgIGVycm9yKCclcyBpcyBhY2Nlc3NpbmcgaXNNb3VudGVkIGluc2lkZSBpdHMgcmVuZGVyKCkgZnVuY3Rpb24uICcgKyAncmVuZGVyKCkgc2hvdWxkIGJlIGEgcHVyZSBmdW5jdGlvbiBvZiBwcm9wcyBhbmQgc3RhdGUuIEl0IHNob3VsZCAnICsgJ25ldmVyIGFjY2VzcyBzb21ldGhpbmcgdGhhdCByZXF1aXJlcyBzdGFsZSBkYXRhIGZyb20gdGhlIHByZXZpb3VzICcgKyAncmVuZGVyLCBzdWNoIGFzIHJlZnMuIE1vdmUgdGhpcyBsb2dpYyB0byBjb21wb25lbnREaWRNb3VudCBhbmQgJyArICdjb21wb25lbnREaWRVcGRhdGUgaW5zdGVhZC4nLCBnZXRDb21wb25lbnROYW1lKG93bmVyRmliZXIudHlwZSkgfHwgJ0EgY29tcG9uZW50Jyk7XG4gICAgICB9XG5cbiAgICAgIGluc3RhbmNlLl93YXJuZWRBYm91dFJlZnNJblJlbmRlciA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgdmFyIGZpYmVyID0gZ2V0KGNvbXBvbmVudCk7XG5cbiAgaWYgKCFmaWJlcikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBnZXROZWFyZXN0TW91bnRlZEZpYmVyKGZpYmVyKSA9PT0gZmliZXI7XG59XG5cbmZ1bmN0aW9uIGFzc2VydElzTW91bnRlZChmaWJlcikge1xuICBpZiAoIShnZXROZWFyZXN0TW91bnRlZEZpYmVyKGZpYmVyKSA9PT0gZmliZXIpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiVW5hYmxlIHRvIGZpbmQgbm9kZSBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LlwiICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmRDdXJyZW50RmliZXJVc2luZ1Nsb3dQYXRoKGZpYmVyKSB7XG4gIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG5cbiAgaWYgKCFhbHRlcm5hdGUpIHtcbiAgICAvLyBJZiB0aGVyZSBpcyBubyBhbHRlcm5hdGUsIHRoZW4gd2Ugb25seSBuZWVkIHRvIGNoZWNrIGlmIGl0IGlzIG1vdW50ZWQuXG4gICAgdmFyIG5lYXJlc3RNb3VudGVkID0gZ2V0TmVhcmVzdE1vdW50ZWRGaWJlcihmaWJlcik7XG5cbiAgICBpZiAoIShuZWFyZXN0TW91bnRlZCAhPT0gbnVsbCkpIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiVW5hYmxlIHRvIGZpbmQgbm9kZSBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LlwiICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG5lYXJlc3RNb3VudGVkICE9PSBmaWJlcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpYmVyO1xuICB9IC8vIElmIHdlIGhhdmUgdHdvIHBvc3NpYmxlIGJyYW5jaGVzLCB3ZSdsbCB3YWxrIGJhY2t3YXJkcyB1cCB0byB0aGUgcm9vdFxuICAvLyB0byBzZWUgd2hhdCBwYXRoIHRoZSByb290IHBvaW50cyB0by4gT24gdGhlIHdheSB3ZSBtYXkgaGl0IG9uZSBvZiB0aGVcbiAgLy8gc3BlY2lhbCBjYXNlcyBhbmQgd2UnbGwgZGVhbCB3aXRoIHRoZW0uXG5cblxuICB2YXIgYSA9IGZpYmVyO1xuICB2YXIgYiA9IGFsdGVybmF0ZTtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIHZhciBwYXJlbnRBID0gYS5yZXR1cm47XG5cbiAgICBpZiAocGFyZW50QSA9PT0gbnVsbCkge1xuICAgICAgLy8gV2UncmUgYXQgdGhlIHJvb3QuXG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICB2YXIgcGFyZW50QiA9IHBhcmVudEEuYWx0ZXJuYXRlO1xuXG4gICAgaWYgKHBhcmVudEIgPT09IG51bGwpIHtcbiAgICAgIC8vIFRoZXJlIGlzIG5vIGFsdGVybmF0ZS4gVGhpcyBpcyBhbiB1bnVzdWFsIGNhc2UuIEN1cnJlbnRseSwgaXQgb25seVxuICAgICAgLy8gaGFwcGVucyB3aGVuIGEgU3VzcGVuc2UgY29tcG9uZW50IGlzIGhpZGRlbi4gQW4gZXh0cmEgZnJhZ21lbnQgZmliZXJcbiAgICAgIC8vIGlzIGluc2VydGVkIGluIGJldHdlZW4gdGhlIFN1c3BlbnNlIGZpYmVyIGFuZCBpdHMgY2hpbGRyZW4uIFNraXBcbiAgICAgIC8vIG92ZXIgdGhpcyBleHRyYSBmcmFnbWVudCBmaWJlciBhbmQgcHJvY2VlZCB0byB0aGUgbmV4dCBwYXJlbnQuXG4gICAgICB2YXIgbmV4dFBhcmVudCA9IHBhcmVudEEucmV0dXJuO1xuXG4gICAgICBpZiAobmV4dFBhcmVudCAhPT0gbnVsbCkge1xuICAgICAgICBhID0gYiA9IG5leHRQYXJlbnQ7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSAvLyBJZiB0aGVyZSdzIG5vIHBhcmVudCwgd2UncmUgYXQgdGhlIHJvb3QuXG5cblxuICAgICAgYnJlYWs7XG4gICAgfSAvLyBJZiBib3RoIGNvcGllcyBvZiB0aGUgcGFyZW50IGZpYmVyIHBvaW50IHRvIHRoZSBzYW1lIGNoaWxkLCB3ZSBjYW5cbiAgICAvLyBhc3N1bWUgdGhhdCB0aGUgY2hpbGQgaXMgY3VycmVudC4gVGhpcyBoYXBwZW5zIHdoZW4gd2UgYmFpbG91dCBvbiBsb3dcbiAgICAvLyBwcmlvcml0eTogdGhlIGJhaWxlZCBvdXQgZmliZXIncyBjaGlsZCByZXVzZXMgdGhlIGN1cnJlbnQgY2hpbGQuXG5cblxuICAgIGlmIChwYXJlbnRBLmNoaWxkID09PSBwYXJlbnRCLmNoaWxkKSB7XG4gICAgICB2YXIgY2hpbGQgPSBwYXJlbnRBLmNoaWxkO1xuXG4gICAgICB3aGlsZSAoY2hpbGQpIHtcbiAgICAgICAgaWYgKGNoaWxkID09PSBhKSB7XG4gICAgICAgICAgLy8gV2UndmUgZGV0ZXJtaW5lZCB0aGF0IEEgaXMgdGhlIGN1cnJlbnQgYnJhbmNoLlxuICAgICAgICAgIGFzc2VydElzTW91bnRlZChwYXJlbnRBKTtcbiAgICAgICAgICByZXR1cm4gZmliZXI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hpbGQgPT09IGIpIHtcbiAgICAgICAgICAvLyBXZSd2ZSBkZXRlcm1pbmVkIHRoYXQgQiBpcyB0aGUgY3VycmVudCBicmFuY2guXG4gICAgICAgICAgYXNzZXJ0SXNNb3VudGVkKHBhcmVudEEpO1xuICAgICAgICAgIHJldHVybiBhbHRlcm5hdGU7XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZCA9IGNoaWxkLnNpYmxpbmc7XG4gICAgICB9IC8vIFdlIHNob3VsZCBuZXZlciBoYXZlIGFuIGFsdGVybmF0ZSBmb3IgYW55IG1vdW50aW5nIG5vZGUuIFNvIHRoZSBvbmx5XG4gICAgICAvLyB3YXkgdGhpcyBjb3VsZCBwb3NzaWJseSBoYXBwZW4gaXMgaWYgdGhpcyB3YXMgdW5tb3VudGVkLCBpZiBhdCBhbGwuXG5cblxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiVW5hYmxlIHRvIGZpbmQgbm9kZSBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LlwiICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYS5yZXR1cm4gIT09IGIucmV0dXJuKSB7XG4gICAgICAvLyBUaGUgcmV0dXJuIHBvaW50ZXIgb2YgQSBhbmQgdGhlIHJldHVybiBwb2ludGVyIG9mIEIgcG9pbnQgdG8gZGlmZmVyZW50XG4gICAgICAvLyBmaWJlcnMuIFdlIGFzc3VtZSB0aGF0IHJldHVybiBwb2ludGVycyBuZXZlciBjcmlzcy1jcm9zcywgc28gQSBtdXN0XG4gICAgICAvLyBiZWxvbmcgdG8gdGhlIGNoaWxkIHNldCBvZiBBLnJldHVybiwgYW5kIEIgbXVzdCBiZWxvbmcgdG8gdGhlIGNoaWxkXG4gICAgICAvLyBzZXQgb2YgQi5yZXR1cm4uXG4gICAgICBhID0gcGFyZW50QTtcbiAgICAgIGIgPSBwYXJlbnRCO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGUgcmV0dXJuIHBvaW50ZXJzIHBvaW50IHRvIHRoZSBzYW1lIGZpYmVyLiBXZSdsbCBoYXZlIHRvIHVzZSB0aGVcbiAgICAgIC8vIGRlZmF1bHQsIHNsb3cgcGF0aDogc2NhbiB0aGUgY2hpbGQgc2V0cyBvZiBlYWNoIHBhcmVudCBhbHRlcm5hdGUgdG8gc2VlXG4gICAgICAvLyB3aGljaCBjaGlsZCBiZWxvbmdzIHRvIHdoaWNoIHNldC5cbiAgICAgIC8vXG4gICAgICAvLyBTZWFyY2ggcGFyZW50IEEncyBjaGlsZCBzZXRcbiAgICAgIHZhciBkaWRGaW5kQ2hpbGQgPSBmYWxzZTtcbiAgICAgIHZhciBfY2hpbGQgPSBwYXJlbnRBLmNoaWxkO1xuXG4gICAgICB3aGlsZSAoX2NoaWxkKSB7XG4gICAgICAgIGlmIChfY2hpbGQgPT09IGEpIHtcbiAgICAgICAgICBkaWRGaW5kQ2hpbGQgPSB0cnVlO1xuICAgICAgICAgIGEgPSBwYXJlbnRBO1xuICAgICAgICAgIGIgPSBwYXJlbnRCO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKF9jaGlsZCA9PT0gYikge1xuICAgICAgICAgIGRpZEZpbmRDaGlsZCA9IHRydWU7XG4gICAgICAgICAgYiA9IHBhcmVudEE7XG4gICAgICAgICAgYSA9IHBhcmVudEI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBfY2hpbGQgPSBfY2hpbGQuc2libGluZztcbiAgICAgIH1cblxuICAgICAgaWYgKCFkaWRGaW5kQ2hpbGQpIHtcbiAgICAgICAgLy8gU2VhcmNoIHBhcmVudCBCJ3MgY2hpbGQgc2V0XG4gICAgICAgIF9jaGlsZCA9IHBhcmVudEIuY2hpbGQ7XG5cbiAgICAgICAgd2hpbGUgKF9jaGlsZCkge1xuICAgICAgICAgIGlmIChfY2hpbGQgPT09IGEpIHtcbiAgICAgICAgICAgIGRpZEZpbmRDaGlsZCA9IHRydWU7XG4gICAgICAgICAgICBhID0gcGFyZW50QjtcbiAgICAgICAgICAgIGIgPSBwYXJlbnRBO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKF9jaGlsZCA9PT0gYikge1xuICAgICAgICAgICAgZGlkRmluZENoaWxkID0gdHJ1ZTtcbiAgICAgICAgICAgIGIgPSBwYXJlbnRCO1xuICAgICAgICAgICAgYSA9IHBhcmVudEE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBfY2hpbGQgPSBfY2hpbGQuc2libGluZztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZGlkRmluZENoaWxkKSB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiQ2hpbGQgd2FzIG5vdCBmb3VuZCBpbiBlaXRoZXIgcGFyZW50IHNldC4gVGhpcyBpbmRpY2F0ZXMgYSBidWcgaW4gUmVhY3QgcmVsYXRlZCB0byB0aGUgcmV0dXJuIHBvaW50ZXIuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCEoYS5hbHRlcm5hdGUgPT09IGIpKSB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIlJldHVybiBmaWJlcnMgc2hvdWxkIGFsd2F5cyBiZSBlYWNoIG90aGVycycgYWx0ZXJuYXRlcy4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgfVxuICAgIH1cbiAgfSAvLyBJZiB0aGUgcm9vdCBpcyBub3QgYSBob3N0IGNvbnRhaW5lciwgd2UncmUgaW4gYSBkaXNjb25uZWN0ZWQgdHJlZS4gSS5lLlxuICAvLyB1bm1vdW50ZWQuXG5cblxuICBpZiAoIShhLnRhZyA9PT0gSG9zdFJvb3QpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiVW5hYmxlIHRvIGZpbmQgbm9kZSBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LlwiICk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGEuc3RhdGVOb2RlLmN1cnJlbnQgPT09IGEpIHtcbiAgICAvLyBXZSd2ZSBkZXRlcm1pbmVkIHRoYXQgQSBpcyB0aGUgY3VycmVudCBicmFuY2guXG4gICAgcmV0dXJuIGZpYmVyO1xuICB9IC8vIE90aGVyd2lzZSBCIGhhcyB0byBiZSBjdXJyZW50IGJyYW5jaC5cblxuXG4gIHJldHVybiBhbHRlcm5hdGU7XG59XG5mdW5jdGlvbiBmaW5kQ3VycmVudEhvc3RGaWJlcihwYXJlbnQpIHtcbiAgdmFyIGN1cnJlbnRQYXJlbnQgPSBmaW5kQ3VycmVudEZpYmVyVXNpbmdTbG93UGF0aChwYXJlbnQpO1xuXG4gIGlmICghY3VycmVudFBhcmVudCkge1xuICAgIHJldHVybiBudWxsO1xuICB9IC8vIE5leHQgd2UnbGwgZHJpbGwgZG93biB0aGlzIGNvbXBvbmVudCB0byBmaW5kIHRoZSBmaXJzdCBIb3N0Q29tcG9uZW50L1RleHQuXG5cblxuICB2YXIgbm9kZSA9IGN1cnJlbnRQYXJlbnQ7XG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBpZiAobm9kZS50YWcgPT09IEhvc3RDb21wb25lbnQgfHwgbm9kZS50YWcgPT09IEhvc3RUZXh0KSB7XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9IGVsc2UgaWYgKG5vZGUuY2hpbGQpIHtcbiAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUgPT09IGN1cnJlbnRQYXJlbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHdoaWxlICghbm9kZS5zaWJsaW5nKSB7XG4gICAgICBpZiAoIW5vZGUucmV0dXJuIHx8IG5vZGUucmV0dXJuID09PSBjdXJyZW50UGFyZW50KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfVxuXG4gICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gIH0gLy8gRmxvdyBuZWVkcyB0aGUgcmV0dXJuIG51bGwgaGVyZSwgYnV0IEVTTGludCBjb21wbGFpbnMgYWJvdXQgaXQuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnJlYWNoYWJsZVxuXG5cbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBmaW5kQ3VycmVudEhvc3RGaWJlcldpdGhOb1BvcnRhbHMocGFyZW50KSB7XG4gIHZhciBjdXJyZW50UGFyZW50ID0gZmluZEN1cnJlbnRGaWJlclVzaW5nU2xvd1BhdGgocGFyZW50KTtcblxuICBpZiAoIWN1cnJlbnRQYXJlbnQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSAvLyBOZXh0IHdlJ2xsIGRyaWxsIGRvd24gdGhpcyBjb21wb25lbnQgdG8gZmluZCB0aGUgZmlyc3QgSG9zdENvbXBvbmVudC9UZXh0LlxuXG5cbiAgdmFyIG5vZGUgPSBjdXJyZW50UGFyZW50O1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgaWYgKG5vZGUudGFnID09PSBIb3N0Q29tcG9uZW50IHx8IG5vZGUudGFnID09PSBIb3N0VGV4dCB8fCBlbmFibGVGdW5kYW1lbnRhbEFQSSApIHtcbiAgICAgIHJldHVybiBub2RlO1xuICAgIH0gZWxzZSBpZiAobm9kZS5jaGlsZCAmJiBub2RlLnRhZyAhPT0gSG9zdFBvcnRhbCkge1xuICAgICAgbm9kZS5jaGlsZC5yZXR1cm4gPSBub2RlO1xuICAgICAgbm9kZSA9IG5vZGUuY2hpbGQ7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAobm9kZSA9PT0gY3VycmVudFBhcmVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgd2hpbGUgKCFub2RlLnNpYmxpbmcpIHtcbiAgICAgIGlmICghbm9kZS5yZXR1cm4gfHwgbm9kZS5yZXR1cm4gPT09IGN1cnJlbnRQYXJlbnQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICB9XG5cbiAgICBub2RlLnNpYmxpbmcucmV0dXJuID0gbm9kZS5yZXR1cm47XG4gICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgfSAvLyBGbG93IG5lZWRzIHRoZSByZXR1cm4gbnVsbCBoZXJlLCBidXQgRVNMaW50IGNvbXBsYWlucyBhYm91dCBpdC5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVucmVhY2hhYmxlXG5cblxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGRvZXNGaWJlckNvbnRhaW4ocGFyZW50RmliZXIsIGNoaWxkRmliZXIpIHtcbiAgdmFyIG5vZGUgPSBjaGlsZEZpYmVyO1xuICB2YXIgcGFyZW50RmliZXJBbHRlcm5hdGUgPSBwYXJlbnRGaWJlci5hbHRlcm5hdGU7XG5cbiAgd2hpbGUgKG5vZGUgIT09IG51bGwpIHtcbiAgICBpZiAobm9kZSA9PT0gcGFyZW50RmliZXIgfHwgbm9kZSA9PT0gcGFyZW50RmliZXJBbHRlcm5hdGUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxudmFyIGF0dGVtcHRVc2VyQmxvY2tpbmdIeWRyYXRpb247XG5mdW5jdGlvbiBzZXRBdHRlbXB0VXNlckJsb2NraW5nSHlkcmF0aW9uKGZuKSB7XG4gIGF0dGVtcHRVc2VyQmxvY2tpbmdIeWRyYXRpb24gPSBmbjtcbn1cbnZhciBhdHRlbXB0Q29udGludW91c0h5ZHJhdGlvbjtcbmZ1bmN0aW9uIHNldEF0dGVtcHRDb250aW51b3VzSHlkcmF0aW9uKGZuKSB7XG4gIGF0dGVtcHRDb250aW51b3VzSHlkcmF0aW9uID0gZm47XG59XG52YXIgYXR0ZW1wdEh5ZHJhdGlvbkF0Q3VycmVudFByaW9yaXR5O1xuZnVuY3Rpb24gc2V0QXR0ZW1wdEh5ZHJhdGlvbkF0Q3VycmVudFByaW9yaXR5KGZuKSB7XG4gIGF0dGVtcHRIeWRyYXRpb25BdEN1cnJlbnRQcmlvcml0eSA9IGZuO1xufVxudmFyIGF0dGVtcHRIeWRyYXRpb25BdFByaW9yaXR5O1xuZnVuY3Rpb24gc2V0QXR0ZW1wdEh5ZHJhdGlvbkF0UHJpb3JpdHkoZm4pIHtcbiAgYXR0ZW1wdEh5ZHJhdGlvbkF0UHJpb3JpdHkgPSBmbjtcbn0gLy8gVE9ETzogVXBncmFkZSB0aGlzIGRlZmluaXRpb24gb25jZSB3ZSdyZSBvbiBhIG5ld2VyIHZlcnNpb24gb2YgRmxvdyB0aGF0XG52YXIgaGFzU2NoZWR1bGVkUmVwbGF5QXR0ZW1wdCA9IGZhbHNlOyAvLyBUaGUgcXVldWUgb2YgZGlzY3JldGUgZXZlbnRzIHRvIGJlIHJlcGxheWVkLlxuXG52YXIgcXVldWVkRGlzY3JldGVFdmVudHMgPSBbXTsgLy8gSW5kaWNhdGVzIGlmIGFueSBjb250aW51b3VzIGV2ZW50IHRhcmdldHMgYXJlIG5vbi1udWxsIGZvciBlYXJseSBiYWlsb3V0LlxuLy8gaWYgdGhlIGxhc3QgdGFyZ2V0IHdhcyBkZWh5ZHJhdGVkLlxuXG52YXIgcXVldWVkRm9jdXMgPSBudWxsO1xudmFyIHF1ZXVlZERyYWcgPSBudWxsO1xudmFyIHF1ZXVlZE1vdXNlID0gbnVsbDsgLy8gRm9yIHBvaW50ZXIgZXZlbnRzIHRoZXJlIGNhbiBiZSBvbmUgbGF0ZXN0IGV2ZW50IHBlciBwb2ludGVySWQuXG5cbnZhciBxdWV1ZWRQb2ludGVycyA9IG5ldyBNYXAoKTtcbnZhciBxdWV1ZWRQb2ludGVyQ2FwdHVyZXMgPSBuZXcgTWFwKCk7IC8vIFdlIGNvdWxkIGNvbnNpZGVyIHJlcGxheWluZyBzZWxlY3Rpb25jaGFuZ2UgYW5kIHRvdWNobW92ZXMgdG9vLlxuXG52YXIgcXVldWVkRXhwbGljaXRIeWRyYXRpb25UYXJnZXRzID0gW107XG5mdW5jdGlvbiBoYXNRdWV1ZWREaXNjcmV0ZUV2ZW50cygpIHtcbiAgcmV0dXJuIHF1ZXVlZERpc2NyZXRlRXZlbnRzLmxlbmd0aCA+IDA7XG59XG52YXIgZGlzY3JldGVSZXBsYXlhYmxlRXZlbnRzID0gWydtb3VzZWRvd24nLCAnbW91c2V1cCcsICd0b3VjaGNhbmNlbCcsICd0b3VjaGVuZCcsICd0b3VjaHN0YXJ0JywgJ2F1eGNsaWNrJywgJ2RibGNsaWNrJywgJ3BvaW50ZXJjYW5jZWwnLCAncG9pbnRlcmRvd24nLCAncG9pbnRlcnVwJywgJ2RyYWdlbmQnLCAnZHJhZ3N0YXJ0JywgJ2Ryb3AnLCAnY29tcG9zaXRpb25lbmQnLCAnY29tcG9zaXRpb25zdGFydCcsICdrZXlkb3duJywgJ2tleXByZXNzJywgJ2tleXVwJywgJ2lucHV0JywgJ3RleHRJbnB1dCcsIC8vIEludGVudGlvbmFsbHkgY2FtZWxDYXNlXG4nY29weScsICdjdXQnLCAncGFzdGUnLCAnY2xpY2snLCAnY2hhbmdlJywgJ2NvbnRleHRtZW51JywgJ3Jlc2V0JywgJ3N1Ym1pdCddO1xuZnVuY3Rpb24gaXNSZXBsYXlhYmxlRGlzY3JldGVFdmVudChldmVudFR5cGUpIHtcbiAgcmV0dXJuIGRpc2NyZXRlUmVwbGF5YWJsZUV2ZW50cy5pbmRleE9mKGV2ZW50VHlwZSkgPiAtMTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlUXVldWVkUmVwbGF5YWJsZUV2ZW50KGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIG5hdGl2ZUV2ZW50KSB7XG4gIHJldHVybiB7XG4gICAgYmxvY2tlZE9uOiBibG9ja2VkT24sXG4gICAgZG9tRXZlbnROYW1lOiBkb21FdmVudE5hbWUsXG4gICAgZXZlbnRTeXN0ZW1GbGFnczogZXZlbnRTeXN0ZW1GbGFncyB8IElTX1JFUExBWUVELFxuICAgIG5hdGl2ZUV2ZW50OiBuYXRpdmVFdmVudCxcbiAgICB0YXJnZXRDb250YWluZXJzOiBbdGFyZ2V0Q29udGFpbmVyXVxuICB9O1xufVxuXG5mdW5jdGlvbiBxdWV1ZURpc2NyZXRlRXZlbnQoYmxvY2tlZE9uLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmF0aXZlRXZlbnQpIHtcbiAgdmFyIHF1ZXVlZEV2ZW50ID0gY3JlYXRlUXVldWVkUmVwbGF5YWJsZUV2ZW50KGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIG5hdGl2ZUV2ZW50KTtcbiAgcXVldWVkRGlzY3JldGVFdmVudHMucHVzaChxdWV1ZWRFdmVudCk7XG59IC8vIFJlc2V0cyB0aGUgcmVwbGF5aW5nIGZvciB0aGlzIHR5cGUgb2YgY29udGludW91cyBldmVudCB0byBubyBldmVudC5cblxuZnVuY3Rpb24gY2xlYXJJZkNvbnRpbnVvdXNFdmVudChkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KSB7XG4gIHN3aXRjaCAoZG9tRXZlbnROYW1lKSB7XG4gICAgY2FzZSAnZm9jdXNpbic6XG4gICAgY2FzZSAnZm9jdXNvdXQnOlxuICAgICAgcXVldWVkRm9jdXMgPSBudWxsO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdkcmFnZW50ZXInOlxuICAgIGNhc2UgJ2RyYWdsZWF2ZSc6XG4gICAgICBxdWV1ZWREcmFnID0gbnVsbDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnbW91c2VvdmVyJzpcbiAgICBjYXNlICdtb3VzZW91dCc6XG4gICAgICBxdWV1ZWRNb3VzZSA9IG51bGw7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3BvaW50ZXJvdmVyJzpcbiAgICBjYXNlICdwb2ludGVyb3V0JzpcbiAgICAgIHtcbiAgICAgICAgdmFyIHBvaW50ZXJJZCA9IG5hdGl2ZUV2ZW50LnBvaW50ZXJJZDtcbiAgICAgICAgcXVldWVkUG9pbnRlcnMuZGVsZXRlKHBvaW50ZXJJZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSAnZ290cG9pbnRlcmNhcHR1cmUnOlxuICAgIGNhc2UgJ2xvc3Rwb2ludGVyY2FwdHVyZSc6XG4gICAgICB7XG4gICAgICAgIHZhciBfcG9pbnRlcklkID0gbmF0aXZlRXZlbnQucG9pbnRlcklkO1xuICAgICAgICBxdWV1ZWRQb2ludGVyQ2FwdHVyZXMuZGVsZXRlKF9wb2ludGVySWQpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhY2N1bXVsYXRlT3JDcmVhdGVDb250aW51b3VzUXVldWVkUmVwbGF5YWJsZUV2ZW50KGV4aXN0aW5nUXVldWVkRXZlbnQsIGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIG5hdGl2ZUV2ZW50KSB7XG4gIGlmIChleGlzdGluZ1F1ZXVlZEV2ZW50ID09PSBudWxsIHx8IGV4aXN0aW5nUXVldWVkRXZlbnQubmF0aXZlRXZlbnQgIT09IG5hdGl2ZUV2ZW50KSB7XG4gICAgdmFyIHF1ZXVlZEV2ZW50ID0gY3JlYXRlUXVldWVkUmVwbGF5YWJsZUV2ZW50KGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIG5hdGl2ZUV2ZW50KTtcblxuICAgIGlmIChibG9ja2VkT24gIT09IG51bGwpIHtcbiAgICAgIHZhciBfZmliZXIyID0gZ2V0SW5zdGFuY2VGcm9tTm9kZShibG9ja2VkT24pO1xuXG4gICAgICBpZiAoX2ZpYmVyMiAhPT0gbnVsbCkge1xuICAgICAgICAvLyBBdHRlbXB0IHRvIGluY3JlYXNlIHRoZSBwcmlvcml0eSBvZiB0aGlzIHRhcmdldC5cbiAgICAgICAgYXR0ZW1wdENvbnRpbnVvdXNIeWRyYXRpb24oX2ZpYmVyMik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHF1ZXVlZEV2ZW50O1xuICB9IC8vIElmIHdlIGhhdmUgYWxyZWFkeSBxdWV1ZWQgdGhpcyBleGFjdCBldmVudCwgdGhlbiBpdCdzIGJlY2F1c2VcbiAgLy8gdGhlIGRpZmZlcmVudCBldmVudCBzeXN0ZW1zIGhhdmUgZGlmZmVyZW50IERPTSBldmVudCBsaXN0ZW5lcnMuXG4gIC8vIFdlIGNhbiBhY2N1bXVsYXRlIHRoZSBmbGFncywgYW5kIHRoZSB0YXJnZXRDb250YWluZXJzLCBhbmRcbiAgLy8gc3RvcmUgYSBzaW5nbGUgZXZlbnQgdG8gYmUgcmVwbGF5ZWQuXG5cblxuICBleGlzdGluZ1F1ZXVlZEV2ZW50LmV2ZW50U3lzdGVtRmxhZ3MgfD0gZXZlbnRTeXN0ZW1GbGFncztcbiAgdmFyIHRhcmdldENvbnRhaW5lcnMgPSBleGlzdGluZ1F1ZXVlZEV2ZW50LnRhcmdldENvbnRhaW5lcnM7XG5cbiAgaWYgKHRhcmdldENvbnRhaW5lciAhPT0gbnVsbCAmJiB0YXJnZXRDb250YWluZXJzLmluZGV4T2YodGFyZ2V0Q29udGFpbmVyKSA9PT0gLTEpIHtcbiAgICB0YXJnZXRDb250YWluZXJzLnB1c2godGFyZ2V0Q29udGFpbmVyKTtcbiAgfVxuXG4gIHJldHVybiBleGlzdGluZ1F1ZXVlZEV2ZW50O1xufVxuXG5mdW5jdGlvbiBxdWV1ZUlmQ29udGludW91c0V2ZW50KGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIG5hdGl2ZUV2ZW50KSB7XG4gIC8vIFRoZXNlIHNldCByZWxhdGVkVGFyZ2V0IHRvIG51bGwgYmVjYXVzZSB0aGUgcmVwbGF5ZWQgZXZlbnQgd2lsbCBiZSB0cmVhdGVkIGFzIGlmIHdlXG4gIC8vIG1vdmVkIGZyb20gb3V0c2lkZSB0aGUgd2luZG93IChubyB0YXJnZXQpIG9udG8gdGhlIHRhcmdldCBvbmNlIGl0IGh5ZHJhdGVzLlxuICAvLyBJbnN0ZWFkIG9mIG11dGF0aW5nIHdlIGNvdWxkIGNsb25lIHRoZSBldmVudC5cbiAgc3dpdGNoIChkb21FdmVudE5hbWUpIHtcbiAgICBjYXNlICdmb2N1c2luJzpcbiAgICAgIHtcbiAgICAgICAgdmFyIGZvY3VzRXZlbnQgPSBuYXRpdmVFdmVudDtcbiAgICAgICAgcXVldWVkRm9jdXMgPSBhY2N1bXVsYXRlT3JDcmVhdGVDb250aW51b3VzUXVldWVkUmVwbGF5YWJsZUV2ZW50KHF1ZXVlZEZvY3VzLCBibG9ja2VkT24sIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBmb2N1c0V2ZW50KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICBjYXNlICdkcmFnZW50ZXInOlxuICAgICAge1xuICAgICAgICB2YXIgZHJhZ0V2ZW50ID0gbmF0aXZlRXZlbnQ7XG4gICAgICAgIHF1ZXVlZERyYWcgPSBhY2N1bXVsYXRlT3JDcmVhdGVDb250aW51b3VzUXVldWVkUmVwbGF5YWJsZUV2ZW50KHF1ZXVlZERyYWcsIGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIGRyYWdFdmVudCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgY2FzZSAnbW91c2VvdmVyJzpcbiAgICAgIHtcbiAgICAgICAgdmFyIG1vdXNlRXZlbnQgPSBuYXRpdmVFdmVudDtcbiAgICAgICAgcXVldWVkTW91c2UgPSBhY2N1bXVsYXRlT3JDcmVhdGVDb250aW51b3VzUXVldWVkUmVwbGF5YWJsZUV2ZW50KHF1ZXVlZE1vdXNlLCBibG9ja2VkT24sIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBtb3VzZUV2ZW50KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICBjYXNlICdwb2ludGVyb3Zlcic6XG4gICAgICB7XG4gICAgICAgIHZhciBwb2ludGVyRXZlbnQgPSBuYXRpdmVFdmVudDtcbiAgICAgICAgdmFyIHBvaW50ZXJJZCA9IHBvaW50ZXJFdmVudC5wb2ludGVySWQ7XG4gICAgICAgIHF1ZXVlZFBvaW50ZXJzLnNldChwb2ludGVySWQsIGFjY3VtdWxhdGVPckNyZWF0ZUNvbnRpbnVvdXNRdWV1ZWRSZXBsYXlhYmxlRXZlbnQocXVldWVkUG9pbnRlcnMuZ2V0KHBvaW50ZXJJZCkgfHwgbnVsbCwgYmxvY2tlZE9uLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgcG9pbnRlckV2ZW50KSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgY2FzZSAnZ290cG9pbnRlcmNhcHR1cmUnOlxuICAgICAge1xuICAgICAgICB2YXIgX3BvaW50ZXJFdmVudCA9IG5hdGl2ZUV2ZW50O1xuICAgICAgICB2YXIgX3BvaW50ZXJJZDIgPSBfcG9pbnRlckV2ZW50LnBvaW50ZXJJZDtcbiAgICAgICAgcXVldWVkUG9pbnRlckNhcHR1cmVzLnNldChfcG9pbnRlcklkMiwgYWNjdW11bGF0ZU9yQ3JlYXRlQ29udGludW91c1F1ZXVlZFJlcGxheWFibGVFdmVudChxdWV1ZWRQb2ludGVyQ2FwdHVyZXMuZ2V0KF9wb2ludGVySWQyKSB8fCBudWxsLCBibG9ja2VkT24sIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBfcG9pbnRlckV2ZW50KSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufSAvLyBDaGVjayBpZiB0aGlzIHRhcmdldCBpcyB1bmJsb2NrZWQuIFJldHVybnMgdHJ1ZSBpZiBpdCdzIHVuYmxvY2tlZC5cblxuZnVuY3Rpb24gYXR0ZW1wdEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0KHF1ZXVlZFRhcmdldCkge1xuICAvLyBUT0RPOiBUaGlzIGZ1bmN0aW9uIHNoYXJlcyBhIGxvdCBvZiBsb2dpYyB3aXRoIGF0dGVtcHRUb0Rpc3BhdGNoRXZlbnQuXG4gIC8vIFRyeSB0byB1bmlmeSB0aGVtLiBJdCdzIGEgYml0IHRyaWNreSBzaW5jZSBpdCB3b3VsZCByZXF1aXJlIHR3byByZXR1cm5cbiAgLy8gdmFsdWVzLlxuICB2YXIgdGFyZ2V0SW5zdCA9IGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKHF1ZXVlZFRhcmdldC50YXJnZXQpO1xuXG4gIGlmICh0YXJnZXRJbnN0ICE9PSBudWxsKSB7XG4gICAgdmFyIG5lYXJlc3RNb3VudGVkID0gZ2V0TmVhcmVzdE1vdW50ZWRGaWJlcih0YXJnZXRJbnN0KTtcblxuICAgIGlmIChuZWFyZXN0TW91bnRlZCAhPT0gbnVsbCkge1xuICAgICAgdmFyIHRhZyA9IG5lYXJlc3RNb3VudGVkLnRhZztcblxuICAgICAgaWYgKHRhZyA9PT0gU3VzcGVuc2VDb21wb25lbnQpIHtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gZ2V0U3VzcGVuc2VJbnN0YW5jZUZyb21GaWJlcihuZWFyZXN0TW91bnRlZCk7XG5cbiAgICAgICAgaWYgKGluc3RhbmNlICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gV2UncmUgYmxvY2tlZCBvbiBoeWRyYXRpbmcgdGhpcyBib3VuZGFyeS5cbiAgICAgICAgICAvLyBJbmNyZWFzZSBpdHMgcHJpb3JpdHkuXG4gICAgICAgICAgcXVldWVkVGFyZ2V0LmJsb2NrZWRPbiA9IGluc3RhbmNlO1xuICAgICAgICAgIGF0dGVtcHRIeWRyYXRpb25BdFByaW9yaXR5KHF1ZXVlZFRhcmdldC5sYW5lUHJpb3JpdHksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIFNjaGVkdWxlci51bnN0YWJsZV9ydW5XaXRoUHJpb3JpdHkocXVldWVkVGFyZ2V0LnByaW9yaXR5LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIGF0dGVtcHRIeWRyYXRpb25BdEN1cnJlbnRQcmlvcml0eShuZWFyZXN0TW91bnRlZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodGFnID09PSBIb3N0Um9vdCkge1xuICAgICAgICB2YXIgcm9vdCA9IG5lYXJlc3RNb3VudGVkLnN0YXRlTm9kZTtcblxuICAgICAgICBpZiAocm9vdC5oeWRyYXRlKSB7XG4gICAgICAgICAgcXVldWVkVGFyZ2V0LmJsb2NrZWRPbiA9IGdldENvbnRhaW5lckZyb21GaWJlcihuZWFyZXN0TW91bnRlZCk7IC8vIFdlIGRvbid0IGN1cnJlbnRseSBoYXZlIGEgd2F5IHRvIGluY3JlYXNlIHRoZSBwcmlvcml0eSBvZlxuICAgICAgICAgIC8vIGEgcm9vdCBvdGhlciB0aGFuIHN5bmMuXG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBxdWV1ZWRUYXJnZXQuYmxvY2tlZE9uID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudChxdWV1ZWRFdmVudCkge1xuICBpZiAocXVldWVkRXZlbnQuYmxvY2tlZE9uICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIHRhcmdldENvbnRhaW5lcnMgPSBxdWV1ZWRFdmVudC50YXJnZXRDb250YWluZXJzO1xuXG4gIHdoaWxlICh0YXJnZXRDb250YWluZXJzLmxlbmd0aCA+IDApIHtcbiAgICB2YXIgdGFyZ2V0Q29udGFpbmVyID0gdGFyZ2V0Q29udGFpbmVyc1swXTtcbiAgICB2YXIgbmV4dEJsb2NrZWRPbiA9IGF0dGVtcHRUb0Rpc3BhdGNoRXZlbnQocXVldWVkRXZlbnQuZG9tRXZlbnROYW1lLCBxdWV1ZWRFdmVudC5ldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIHF1ZXVlZEV2ZW50Lm5hdGl2ZUV2ZW50KTtcblxuICAgIGlmIChuZXh0QmxvY2tlZE9uICE9PSBudWxsKSB7XG4gICAgICAvLyBXZSdyZSBzdGlsbCBibG9ja2VkLiBUcnkgYWdhaW4gbGF0ZXIuXG4gICAgICB2YXIgX2ZpYmVyMyA9IGdldEluc3RhbmNlRnJvbU5vZGUobmV4dEJsb2NrZWRPbik7XG5cbiAgICAgIGlmIChfZmliZXIzICE9PSBudWxsKSB7XG4gICAgICAgIGF0dGVtcHRDb250aW51b3VzSHlkcmF0aW9uKF9maWJlcjMpO1xuICAgICAgfVxuXG4gICAgICBxdWV1ZWRFdmVudC5ibG9ja2VkT24gPSBuZXh0QmxvY2tlZE9uO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gLy8gVGhpcyB0YXJnZXQgY29udGFpbmVyIHdhcyBzdWNjZXNzZnVsbHkgZGlzcGF0Y2hlZC4gVHJ5IHRoZSBuZXh0LlxuXG5cbiAgICB0YXJnZXRDb250YWluZXJzLnNoaWZ0KCk7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudEluTWFwKHF1ZXVlZEV2ZW50LCBrZXksIG1hcCkge1xuICBpZiAoYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudChxdWV1ZWRFdmVudCkpIHtcbiAgICBtYXAuZGVsZXRlKGtleSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVwbGF5VW5ibG9ja2VkRXZlbnRzKCkge1xuICBoYXNTY2hlZHVsZWRSZXBsYXlBdHRlbXB0ID0gZmFsc2U7IC8vIEZpcnN0IHJlcGxheSBkaXNjcmV0ZSBldmVudHMuXG5cbiAgd2hpbGUgKHF1ZXVlZERpc2NyZXRlRXZlbnRzLmxlbmd0aCA+IDApIHtcbiAgICB2YXIgbmV4dERpc2NyZXRlRXZlbnQgPSBxdWV1ZWREaXNjcmV0ZUV2ZW50c1swXTtcblxuICAgIGlmIChuZXh0RGlzY3JldGVFdmVudC5ibG9ja2VkT24gIT09IG51bGwpIHtcbiAgICAgIC8vIFdlJ3JlIHN0aWxsIGJsb2NrZWQuXG4gICAgICAvLyBJbmNyZWFzZSB0aGUgcHJpb3JpdHkgb2YgdGhpcyBib3VuZGFyeSB0byB1bmJsb2NrXG4gICAgICAvLyB0aGUgbmV4dCBkaXNjcmV0ZSBldmVudC5cbiAgICAgIHZhciBfZmliZXI0ID0gZ2V0SW5zdGFuY2VGcm9tTm9kZShuZXh0RGlzY3JldGVFdmVudC5ibG9ja2VkT24pO1xuXG4gICAgICBpZiAoX2ZpYmVyNCAhPT0gbnVsbCkge1xuICAgICAgICBhdHRlbXB0VXNlckJsb2NraW5nSHlkcmF0aW9uKF9maWJlcjQpO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICB2YXIgdGFyZ2V0Q29udGFpbmVycyA9IG5leHREaXNjcmV0ZUV2ZW50LnRhcmdldENvbnRhaW5lcnM7XG5cbiAgICB3aGlsZSAodGFyZ2V0Q29udGFpbmVycy5sZW5ndGggPiAwKSB7XG4gICAgICB2YXIgdGFyZ2V0Q29udGFpbmVyID0gdGFyZ2V0Q29udGFpbmVyc1swXTtcbiAgICAgIHZhciBuZXh0QmxvY2tlZE9uID0gYXR0ZW1wdFRvRGlzcGF0Y2hFdmVudChuZXh0RGlzY3JldGVFdmVudC5kb21FdmVudE5hbWUsIG5leHREaXNjcmV0ZUV2ZW50LmV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmV4dERpc2NyZXRlRXZlbnQubmF0aXZlRXZlbnQpO1xuXG4gICAgICBpZiAobmV4dEJsb2NrZWRPbiAhPT0gbnVsbCkge1xuICAgICAgICAvLyBXZSdyZSBzdGlsbCBibG9ja2VkLiBUcnkgYWdhaW4gbGF0ZXIuXG4gICAgICAgIG5leHREaXNjcmV0ZUV2ZW50LmJsb2NrZWRPbiA9IG5leHRCbG9ja2VkT247XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSAvLyBUaGlzIHRhcmdldCBjb250YWluZXIgd2FzIHN1Y2Nlc3NmdWxseSBkaXNwYXRjaGVkLiBUcnkgdGhlIG5leHQuXG5cblxuICAgICAgdGFyZ2V0Q29udGFpbmVycy5zaGlmdCgpO1xuICAgIH1cblxuICAgIGlmIChuZXh0RGlzY3JldGVFdmVudC5ibG9ja2VkT24gPT09IG51bGwpIHtcbiAgICAgIC8vIFdlJ3ZlIHN1Y2Nlc3NmdWxseSByZXBsYXllZCB0aGUgZmlyc3QgZXZlbnQuIExldCdzIHRyeSB0aGUgbmV4dCBvbmUuXG4gICAgICBxdWV1ZWREaXNjcmV0ZUV2ZW50cy5zaGlmdCgpO1xuICAgIH1cbiAgfSAvLyBOZXh0IHJlcGxheSBhbnkgY29udGludW91cyBldmVudHMuXG5cblxuICBpZiAocXVldWVkRm9jdXMgIT09IG51bGwgJiYgYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudChxdWV1ZWRGb2N1cykpIHtcbiAgICBxdWV1ZWRGb2N1cyA9IG51bGw7XG4gIH1cblxuICBpZiAocXVldWVkRHJhZyAhPT0gbnVsbCAmJiBhdHRlbXB0UmVwbGF5Q29udGludW91c1F1ZXVlZEV2ZW50KHF1ZXVlZERyYWcpKSB7XG4gICAgcXVldWVkRHJhZyA9IG51bGw7XG4gIH1cblxuICBpZiAocXVldWVkTW91c2UgIT09IG51bGwgJiYgYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudChxdWV1ZWRNb3VzZSkpIHtcbiAgICBxdWV1ZWRNb3VzZSA9IG51bGw7XG4gIH1cblxuICBxdWV1ZWRQb2ludGVycy5mb3JFYWNoKGF0dGVtcHRSZXBsYXlDb250aW51b3VzUXVldWVkRXZlbnRJbk1hcCk7XG4gIHF1ZXVlZFBvaW50ZXJDYXB0dXJlcy5mb3JFYWNoKGF0dGVtcHRSZXBsYXlDb250aW51b3VzUXVldWVkRXZlbnRJbk1hcCk7XG59XG5cbmZ1bmN0aW9uIHNjaGVkdWxlQ2FsbGJhY2tJZlVuYmxvY2tlZChxdWV1ZWRFdmVudCwgdW5ibG9ja2VkKSB7XG4gIGlmIChxdWV1ZWRFdmVudC5ibG9ja2VkT24gPT09IHVuYmxvY2tlZCkge1xuICAgIHF1ZXVlZEV2ZW50LmJsb2NrZWRPbiA9IG51bGw7XG5cbiAgICBpZiAoIWhhc1NjaGVkdWxlZFJlcGxheUF0dGVtcHQpIHtcbiAgICAgIGhhc1NjaGVkdWxlZFJlcGxheUF0dGVtcHQgPSB0cnVlOyAvLyBTY2hlZHVsZSBhIGNhbGxiYWNrIHRvIGF0dGVtcHQgcmVwbGF5aW5nIGFzIG1hbnkgZXZlbnRzIGFzIGFyZVxuICAgICAgLy8gbm93IHVuYmxvY2tlZC4gVGhpcyBmaXJzdCBtaWdodCBub3QgYWN0dWFsbHkgYmUgdW5ibG9ja2VkIHlldC5cbiAgICAgIC8vIFdlIGNvdWxkIGNoZWNrIGl0IGVhcmx5IHRvIGF2b2lkIHNjaGVkdWxpbmcgYW4gdW5uZWNlc3NhcnkgY2FsbGJhY2suXG5cbiAgICAgIFNjaGVkdWxlci51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrKFNjaGVkdWxlci51bnN0YWJsZV9Ob3JtYWxQcmlvcml0eSwgcmVwbGF5VW5ibG9ja2VkRXZlbnRzKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcmV0cnlJZkJsb2NrZWRPbih1bmJsb2NrZWQpIHtcbiAgLy8gTWFyayBhbnl0aGluZyB0aGF0IHdhcyBibG9ja2VkIG9uIHRoaXMgYXMgbm8gbG9uZ2VyIGJsb2NrZWRcbiAgLy8gYW5kIGVsaWdpYmxlIGZvciBhIHJlcGxheS5cbiAgaWYgKHF1ZXVlZERpc2NyZXRlRXZlbnRzLmxlbmd0aCA+IDApIHtcbiAgICBzY2hlZHVsZUNhbGxiYWNrSWZVbmJsb2NrZWQocXVldWVkRGlzY3JldGVFdmVudHNbMF0sIHVuYmxvY2tlZCk7IC8vIFRoaXMgaXMgYSBleHBvbmVudGlhbCBzZWFyY2ggZm9yIGVhY2ggYm91bmRhcnkgdGhhdCBjb21taXRzLiBJIHRoaW5rIGl0J3NcbiAgICAvLyB3b3J0aCBpdCBiZWNhdXNlIHdlIGV4cGVjdCB2ZXJ5IGZldyBkaXNjcmV0ZSBldmVudHMgdG8gcXVldWUgdXAgYW5kIG9uY2VcbiAgICAvLyB3ZSBhcmUgYWN0dWFsbHkgZnVsbHkgdW5ibG9ja2VkIGl0IHdpbGwgYmUgZmFzdCB0byByZXBsYXkgdGhlbS5cblxuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgcXVldWVkRGlzY3JldGVFdmVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBxdWV1ZWRFdmVudCA9IHF1ZXVlZERpc2NyZXRlRXZlbnRzW2ldO1xuXG4gICAgICBpZiAocXVldWVkRXZlbnQuYmxvY2tlZE9uID09PSB1bmJsb2NrZWQpIHtcbiAgICAgICAgcXVldWVkRXZlbnQuYmxvY2tlZE9uID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAocXVldWVkRm9jdXMgIT09IG51bGwpIHtcbiAgICBzY2hlZHVsZUNhbGxiYWNrSWZVbmJsb2NrZWQocXVldWVkRm9jdXMsIHVuYmxvY2tlZCk7XG4gIH1cblxuICBpZiAocXVldWVkRHJhZyAhPT0gbnVsbCkge1xuICAgIHNjaGVkdWxlQ2FsbGJhY2tJZlVuYmxvY2tlZChxdWV1ZWREcmFnLCB1bmJsb2NrZWQpO1xuICB9XG5cbiAgaWYgKHF1ZXVlZE1vdXNlICE9PSBudWxsKSB7XG4gICAgc2NoZWR1bGVDYWxsYmFja0lmVW5ibG9ja2VkKHF1ZXVlZE1vdXNlLCB1bmJsb2NrZWQpO1xuICB9XG5cbiAgdmFyIHVuYmxvY2sgPSBmdW5jdGlvbiAocXVldWVkRXZlbnQpIHtcbiAgICByZXR1cm4gc2NoZWR1bGVDYWxsYmFja0lmVW5ibG9ja2VkKHF1ZXVlZEV2ZW50LCB1bmJsb2NrZWQpO1xuICB9O1xuXG4gIHF1ZXVlZFBvaW50ZXJzLmZvckVhY2godW5ibG9jayk7XG4gIHF1ZXVlZFBvaW50ZXJDYXB0dXJlcy5mb3JFYWNoKHVuYmxvY2spO1xuXG4gIGZvciAodmFyIF9pID0gMDsgX2kgPCBxdWV1ZWRFeHBsaWNpdEh5ZHJhdGlvblRhcmdldHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgdmFyIHF1ZXVlZFRhcmdldCA9IHF1ZXVlZEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0c1tfaV07XG5cbiAgICBpZiAocXVldWVkVGFyZ2V0LmJsb2NrZWRPbiA9PT0gdW5ibG9ja2VkKSB7XG4gICAgICBxdWV1ZWRUYXJnZXQuYmxvY2tlZE9uID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICB3aGlsZSAocXVldWVkRXhwbGljaXRIeWRyYXRpb25UYXJnZXRzLmxlbmd0aCA+IDApIHtcbiAgICB2YXIgbmV4dEV4cGxpY2l0VGFyZ2V0ID0gcXVldWVkRXhwbGljaXRIeWRyYXRpb25UYXJnZXRzWzBdO1xuXG4gICAgaWYgKG5leHRFeHBsaWNpdFRhcmdldC5ibG9ja2VkT24gIT09IG51bGwpIHtcbiAgICAgIC8vIFdlJ3JlIHN0aWxsIGJsb2NrZWQuXG4gICAgICBicmVhaztcbiAgICB9IGVsc2Uge1xuICAgICAgYXR0ZW1wdEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0KG5leHRFeHBsaWNpdFRhcmdldCk7XG5cbiAgICAgIGlmIChuZXh0RXhwbGljaXRUYXJnZXQuYmxvY2tlZE9uID09PSBudWxsKSB7XG4gICAgICAgIC8vIFdlJ3JlIHVuYmxvY2tlZC5cbiAgICAgICAgcXVldWVkRXhwbGljaXRIeWRyYXRpb25UYXJnZXRzLnNoaWZ0KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciBEaXNjcmV0ZUV2ZW50ID0gMDtcbnZhciBVc2VyQmxvY2tpbmdFdmVudCA9IDE7XG52YXIgQ29udGludW91c0V2ZW50ID0gMjtcblxuLyoqXG4gKiBHZW5lcmF0ZSBhIG1hcHBpbmcgb2Ygc3RhbmRhcmQgdmVuZG9yIHByZWZpeGVzIHVzaW5nIHRoZSBkZWZpbmVkIHN0eWxlIHByb3BlcnR5IGFuZCBldmVudCBuYW1lLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHlsZVByb3BcbiAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWVcbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cblxuZnVuY3Rpb24gbWFrZVByZWZpeE1hcChzdHlsZVByb3AsIGV2ZW50TmFtZSkge1xuICB2YXIgcHJlZml4ZXMgPSB7fTtcbiAgcHJlZml4ZXNbc3R5bGVQcm9wLnRvTG93ZXJDYXNlKCldID0gZXZlbnROYW1lLnRvTG93ZXJDYXNlKCk7XG4gIHByZWZpeGVzWydXZWJraXQnICsgc3R5bGVQcm9wXSA9ICd3ZWJraXQnICsgZXZlbnROYW1lO1xuICBwcmVmaXhlc1snTW96JyArIHN0eWxlUHJvcF0gPSAnbW96JyArIGV2ZW50TmFtZTtcbiAgcmV0dXJuIHByZWZpeGVzO1xufVxuLyoqXG4gKiBBIGxpc3Qgb2YgZXZlbnQgbmFtZXMgdG8gYSBjb25maWd1cmFibGUgbGlzdCBvZiB2ZW5kb3IgcHJlZml4ZXMuXG4gKi9cblxuXG52YXIgdmVuZG9yUHJlZml4ZXMgPSB7XG4gIGFuaW1hdGlvbmVuZDogbWFrZVByZWZpeE1hcCgnQW5pbWF0aW9uJywgJ0FuaW1hdGlvbkVuZCcpLFxuICBhbmltYXRpb25pdGVyYXRpb246IG1ha2VQcmVmaXhNYXAoJ0FuaW1hdGlvbicsICdBbmltYXRpb25JdGVyYXRpb24nKSxcbiAgYW5pbWF0aW9uc3RhcnQ6IG1ha2VQcmVmaXhNYXAoJ0FuaW1hdGlvbicsICdBbmltYXRpb25TdGFydCcpLFxuICB0cmFuc2l0aW9uZW5kOiBtYWtlUHJlZml4TWFwKCdUcmFuc2l0aW9uJywgJ1RyYW5zaXRpb25FbmQnKVxufTtcbi8qKlxuICogRXZlbnQgbmFtZXMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBkZXRlY3RlZCBhbmQgcHJlZml4ZWQgKGlmIGFwcGxpY2FibGUpLlxuICovXG5cbnZhciBwcmVmaXhlZEV2ZW50TmFtZXMgPSB7fTtcbi8qKlxuICogRWxlbWVudCB0byBjaGVjayBmb3IgcHJlZml4ZXMgb24uXG4gKi9cblxudmFyIHN0eWxlID0ge307XG4vKipcbiAqIEJvb3RzdHJhcCBpZiBhIERPTSBleGlzdHMuXG4gKi9cblxuaWYgKGNhblVzZURPTSkge1xuICBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLnN0eWxlOyAvLyBPbiBzb21lIHBsYXRmb3JtcywgaW4gcGFydGljdWxhciBzb21lIHJlbGVhc2VzIG9mIEFuZHJvaWQgNC54LFxuICAvLyB0aGUgdW4tcHJlZml4ZWQgXCJhbmltYXRpb25cIiBhbmQgXCJ0cmFuc2l0aW9uXCIgcHJvcGVydGllcyBhcmUgZGVmaW5lZCBvbiB0aGVcbiAgLy8gc3R5bGUgb2JqZWN0IGJ1dCB0aGUgZXZlbnRzIHRoYXQgZmlyZSB3aWxsIHN0aWxsIGJlIHByZWZpeGVkLCBzbyB3ZSBuZWVkXG4gIC8vIHRvIGNoZWNrIGlmIHRoZSB1bi1wcmVmaXhlZCBldmVudHMgYXJlIHVzYWJsZSwgYW5kIGlmIG5vdCByZW1vdmUgdGhlbSBmcm9tIHRoZSBtYXAuXG5cbiAgaWYgKCEoJ0FuaW1hdGlvbkV2ZW50JyBpbiB3aW5kb3cpKSB7XG4gICAgZGVsZXRlIHZlbmRvclByZWZpeGVzLmFuaW1hdGlvbmVuZC5hbmltYXRpb247XG4gICAgZGVsZXRlIHZlbmRvclByZWZpeGVzLmFuaW1hdGlvbml0ZXJhdGlvbi5hbmltYXRpb247XG4gICAgZGVsZXRlIHZlbmRvclByZWZpeGVzLmFuaW1hdGlvbnN0YXJ0LmFuaW1hdGlvbjtcbiAgfSAvLyBTYW1lIGFzIGFib3ZlXG5cblxuICBpZiAoISgnVHJhbnNpdGlvbkV2ZW50JyBpbiB3aW5kb3cpKSB7XG4gICAgZGVsZXRlIHZlbmRvclByZWZpeGVzLnRyYW5zaXRpb25lbmQudHJhbnNpdGlvbjtcbiAgfVxufVxuLyoqXG4gKiBBdHRlbXB0cyB0byBkZXRlcm1pbmUgdGhlIGNvcnJlY3QgdmVuZG9yIHByZWZpeGVkIGV2ZW50IG5hbWUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldFZlbmRvclByZWZpeGVkRXZlbnROYW1lKGV2ZW50TmFtZSkge1xuICBpZiAocHJlZml4ZWRFdmVudE5hbWVzW2V2ZW50TmFtZV0pIHtcbiAgICByZXR1cm4gcHJlZml4ZWRFdmVudE5hbWVzW2V2ZW50TmFtZV07XG4gIH0gZWxzZSBpZiAoIXZlbmRvclByZWZpeGVzW2V2ZW50TmFtZV0pIHtcbiAgICByZXR1cm4gZXZlbnROYW1lO1xuICB9XG5cbiAgdmFyIHByZWZpeE1hcCA9IHZlbmRvclByZWZpeGVzW2V2ZW50TmFtZV07XG5cbiAgZm9yICh2YXIgc3R5bGVQcm9wIGluIHByZWZpeE1hcCkge1xuICAgIGlmIChwcmVmaXhNYXAuaGFzT3duUHJvcGVydHkoc3R5bGVQcm9wKSAmJiBzdHlsZVByb3AgaW4gc3R5bGUpIHtcbiAgICAgIHJldHVybiBwcmVmaXhlZEV2ZW50TmFtZXNbZXZlbnROYW1lXSA9IHByZWZpeE1hcFtzdHlsZVByb3BdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBldmVudE5hbWU7XG59XG5cbnZhciBBTklNQVRJT05fRU5EID0gZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5hbWUoJ2FuaW1hdGlvbmVuZCcpO1xudmFyIEFOSU1BVElPTl9JVEVSQVRJT04gPSBnZXRWZW5kb3JQcmVmaXhlZEV2ZW50TmFtZSgnYW5pbWF0aW9uaXRlcmF0aW9uJyk7XG52YXIgQU5JTUFUSU9OX1NUQVJUID0gZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5hbWUoJ2FuaW1hdGlvbnN0YXJ0Jyk7XG52YXIgVFJBTlNJVElPTl9FTkQgPSBnZXRWZW5kb3JQcmVmaXhlZEV2ZW50TmFtZSgndHJhbnNpdGlvbmVuZCcpO1xuXG52YXIgdG9wTGV2ZWxFdmVudHNUb1JlYWN0TmFtZXMgPSBuZXcgTWFwKCk7XG52YXIgZXZlbnRQcmlvcml0aWVzID0gbmV3IE1hcCgpOyAvLyBXZSBzdG9yZSBtb3N0IG9mIHRoZSBldmVudHMgaW4gdGhpcyBtb2R1bGUgaW4gcGFpcnMgb2YgdHdvIHN0cmluZ3Mgc28gd2UgY2FuIHJlLXVzZVxuLy8gdGhlIGNvZGUgcmVxdWlyZWQgdG8gYXBwbHkgdGhlIHNhbWUgbG9naWMgZm9yIGV2ZW50IHByaW9yaXRpemF0aW9uIGFuZCB0aGF0IG9mIHRoZVxuLy8gU2ltcGxlRXZlbnRQbHVnaW4uIFRoaXMgY29tcGxpY2F0ZXMgdGhpbmdzIHNsaWdodGx5LCBidXQgdGhlIGFpbSBpcyB0byByZWR1Y2UgY29kZVxuLy8gZHVwbGljYXRpb24gKGZvciB3aGljaCB0aGVyZSB3b3VsZCBiZSBxdWl0ZSBhIGJpdCkuIEZvciB0aGUgZXZlbnRzIHRoYXQgYXJlIG5vdCBuZWVkZWRcbi8vIGZvciB0aGUgU2ltcGxlRXZlbnRQbHVnaW4gKG90aGVyRGlzY3JldGVFdmVudHMpIHdlIHByb2Nlc3MgdGhlbSBzZXBhcmF0ZWx5IGFzIGFuXG4vLyBhcnJheSBvZiB0b3AgbGV2ZWwgZXZlbnRzLlxuLy8gTGFzdGx5LCB3ZSBpZ25vcmUgcHJldHRpZXIgc28gd2UgY2FuIGtlZXAgdGhlIGZvcm1hdHRpbmcgc2FuZS5cbi8vIHByZXR0aWVyLWlnbm9yZVxuXG52YXIgZGlzY3JldGVFdmVudFBhaXJzRm9yU2ltcGxlRXZlbnRQbHVnaW4gPSBbJ2NhbmNlbCcsICdjYW5jZWwnLCAnY2xpY2snLCAnY2xpY2snLCAnY2xvc2UnLCAnY2xvc2UnLCAnY29udGV4dG1lbnUnLCAnY29udGV4dE1lbnUnLCAnY29weScsICdjb3B5JywgJ2N1dCcsICdjdXQnLCAnYXV4Y2xpY2snLCAnYXV4Q2xpY2snLCAnZGJsY2xpY2snLCAnZG91YmxlQ2xpY2snLCAvLyBDYXJlZnVsIVxuJ2RyYWdlbmQnLCAnZHJhZ0VuZCcsICdkcmFnc3RhcnQnLCAnZHJhZ1N0YXJ0JywgJ2Ryb3AnLCAnZHJvcCcsICdmb2N1c2luJywgJ2ZvY3VzJywgLy8gQ2FyZWZ1bCFcbidmb2N1c291dCcsICdibHVyJywgLy8gQ2FyZWZ1bCFcbidpbnB1dCcsICdpbnB1dCcsICdpbnZhbGlkJywgJ2ludmFsaWQnLCAna2V5ZG93bicsICdrZXlEb3duJywgJ2tleXByZXNzJywgJ2tleVByZXNzJywgJ2tleXVwJywgJ2tleVVwJywgJ21vdXNlZG93bicsICdtb3VzZURvd24nLCAnbW91c2V1cCcsICdtb3VzZVVwJywgJ3Bhc3RlJywgJ3Bhc3RlJywgJ3BhdXNlJywgJ3BhdXNlJywgJ3BsYXknLCAncGxheScsICdwb2ludGVyY2FuY2VsJywgJ3BvaW50ZXJDYW5jZWwnLCAncG9pbnRlcmRvd24nLCAncG9pbnRlckRvd24nLCAncG9pbnRlcnVwJywgJ3BvaW50ZXJVcCcsICdyYXRlY2hhbmdlJywgJ3JhdGVDaGFuZ2UnLCAncmVzZXQnLCAncmVzZXQnLCAnc2Vla2VkJywgJ3NlZWtlZCcsICdzdWJtaXQnLCAnc3VibWl0JywgJ3RvdWNoY2FuY2VsJywgJ3RvdWNoQ2FuY2VsJywgJ3RvdWNoZW5kJywgJ3RvdWNoRW5kJywgJ3RvdWNoc3RhcnQnLCAndG91Y2hTdGFydCcsICd2b2x1bWVjaGFuZ2UnLCAndm9sdW1lQ2hhbmdlJ107XG52YXIgb3RoZXJEaXNjcmV0ZUV2ZW50cyA9IFsnY2hhbmdlJywgJ3NlbGVjdGlvbmNoYW5nZScsICd0ZXh0SW5wdXQnLCAnY29tcG9zaXRpb25zdGFydCcsICdjb21wb3NpdGlvbmVuZCcsICdjb21wb3NpdGlvbnVwZGF0ZSddO1xuXG5cbnZhciB1c2VyQmxvY2tpbmdQYWlyc0ZvclNpbXBsZUV2ZW50UGx1Z2luID0gWydkcmFnJywgJ2RyYWcnLCAnZHJhZ2VudGVyJywgJ2RyYWdFbnRlcicsICdkcmFnZXhpdCcsICdkcmFnRXhpdCcsICdkcmFnbGVhdmUnLCAnZHJhZ0xlYXZlJywgJ2RyYWdvdmVyJywgJ2RyYWdPdmVyJywgJ21vdXNlbW92ZScsICdtb3VzZU1vdmUnLCAnbW91c2VvdXQnLCAnbW91c2VPdXQnLCAnbW91c2VvdmVyJywgJ21vdXNlT3ZlcicsICdwb2ludGVybW92ZScsICdwb2ludGVyTW92ZScsICdwb2ludGVyb3V0JywgJ3BvaW50ZXJPdXQnLCAncG9pbnRlcm92ZXInLCAncG9pbnRlck92ZXInLCAnc2Nyb2xsJywgJ3Njcm9sbCcsICd0b2dnbGUnLCAndG9nZ2xlJywgJ3RvdWNobW92ZScsICd0b3VjaE1vdmUnLCAnd2hlZWwnLCAnd2hlZWwnXTsgLy8gcHJldHRpZXItaWdub3JlXG5cbnZhciBjb250aW51b3VzUGFpcnNGb3JTaW1wbGVFdmVudFBsdWdpbiA9IFsnYWJvcnQnLCAnYWJvcnQnLCBBTklNQVRJT05fRU5ELCAnYW5pbWF0aW9uRW5kJywgQU5JTUFUSU9OX0lURVJBVElPTiwgJ2FuaW1hdGlvbkl0ZXJhdGlvbicsIEFOSU1BVElPTl9TVEFSVCwgJ2FuaW1hdGlvblN0YXJ0JywgJ2NhbnBsYXknLCAnY2FuUGxheScsICdjYW5wbGF5dGhyb3VnaCcsICdjYW5QbGF5VGhyb3VnaCcsICdkdXJhdGlvbmNoYW5nZScsICdkdXJhdGlvbkNoYW5nZScsICdlbXB0aWVkJywgJ2VtcHRpZWQnLCAnZW5jcnlwdGVkJywgJ2VuY3J5cHRlZCcsICdlbmRlZCcsICdlbmRlZCcsICdlcnJvcicsICdlcnJvcicsICdnb3Rwb2ludGVyY2FwdHVyZScsICdnb3RQb2ludGVyQ2FwdHVyZScsICdsb2FkJywgJ2xvYWQnLCAnbG9hZGVkZGF0YScsICdsb2FkZWREYXRhJywgJ2xvYWRlZG1ldGFkYXRhJywgJ2xvYWRlZE1ldGFkYXRhJywgJ2xvYWRzdGFydCcsICdsb2FkU3RhcnQnLCAnbG9zdHBvaW50ZXJjYXB0dXJlJywgJ2xvc3RQb2ludGVyQ2FwdHVyZScsICdwbGF5aW5nJywgJ3BsYXlpbmcnLCAncHJvZ3Jlc3MnLCAncHJvZ3Jlc3MnLCAnc2Vla2luZycsICdzZWVraW5nJywgJ3N0YWxsZWQnLCAnc3RhbGxlZCcsICdzdXNwZW5kJywgJ3N1c3BlbmQnLCAndGltZXVwZGF0ZScsICd0aW1lVXBkYXRlJywgVFJBTlNJVElPTl9FTkQsICd0cmFuc2l0aW9uRW5kJywgJ3dhaXRpbmcnLCAnd2FpdGluZyddO1xuLyoqXG4gKiBUdXJuc1xuICogWydhYm9ydCcsIC4uLl1cbiAqXG4gKiBpbnRvXG4gKlxuICogdG9wTGV2ZWxFdmVudHNUb1JlYWN0TmFtZXMgPSBuZXcgTWFwKFtcbiAqICAgWydhYm9ydCcsICdvbkFib3J0J10sXG4gKiBdKTtcbiAqXG4gKiBhbmQgcmVnaXN0ZXJzIHRoZW0uXG4gKi9cblxuZnVuY3Rpb24gcmVnaXN0ZXJTaW1wbGVQbHVnaW5FdmVudHNBbmRTZXRUaGVpclByaW9yaXRpZXMoZXZlbnRUeXBlcywgcHJpb3JpdHkpIHtcbiAgLy8gQXMgdGhlIGV2ZW50IHR5cGVzIGFyZSBpbiBwYWlycyBvZiB0d28sIHdlIG5lZWQgdG8gaXRlcmF0ZVxuICAvLyB0aHJvdWdoIGluIHR3b3MuIFRoZSBldmVudHMgYXJlIGluIHBhaXJzIG9mIHR3byB0byBzYXZlIGNvZGVcbiAgLy8gYW5kIGltcHJvdmUgaW5pdCBwZXJmIG9mIHByb2Nlc3NpbmcgdGhpcyBhcnJheSwgYXMgaXQgd2lsbFxuICAvLyByZXN1bHQgaW4gZmFyIGZld2VyIG9iamVjdCBhbGxvY2F0aW9ucyBhbmQgcHJvcGVydHkgYWNjZXNzZXNcbiAgLy8gaWYgd2Ugb25seSB1c2UgdGhyZWUgYXJyYXlzIHRvIHByb2Nlc3MgYWxsIHRoZSBjYXRlZ29yaWVzIG9mXG4gIC8vIGluc3RlYWQgb2YgdHVwbGVzLlxuICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50VHlwZXMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICB2YXIgdG9wRXZlbnQgPSBldmVudFR5cGVzW2ldO1xuICAgIHZhciBldmVudCA9IGV2ZW50VHlwZXNbaSArIDFdO1xuICAgIHZhciBjYXBpdGFsaXplZEV2ZW50ID0gZXZlbnRbMF0udG9VcHBlckNhc2UoKSArIGV2ZW50LnNsaWNlKDEpO1xuICAgIHZhciByZWFjdE5hbWUgPSAnb24nICsgY2FwaXRhbGl6ZWRFdmVudDtcbiAgICBldmVudFByaW9yaXRpZXMuc2V0KHRvcEV2ZW50LCBwcmlvcml0eSk7XG4gICAgdG9wTGV2ZWxFdmVudHNUb1JlYWN0TmFtZXMuc2V0KHRvcEV2ZW50LCByZWFjdE5hbWUpO1xuICAgIHJlZ2lzdGVyVHdvUGhhc2VFdmVudChyZWFjdE5hbWUsIFt0b3BFdmVudF0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNldEV2ZW50UHJpb3JpdGllcyhldmVudFR5cGVzLCBwcmlvcml0eSkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50VHlwZXMubGVuZ3RoOyBpKyspIHtcbiAgICBldmVudFByaW9yaXRpZXMuc2V0KGV2ZW50VHlwZXNbaV0sIHByaW9yaXR5KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRFdmVudFByaW9yaXR5Rm9yUGx1Z2luU3lzdGVtKGRvbUV2ZW50TmFtZSkge1xuICB2YXIgcHJpb3JpdHkgPSBldmVudFByaW9yaXRpZXMuZ2V0KGRvbUV2ZW50TmFtZSk7IC8vIERlZmF1bHQgdG8gYSBDb250aW51b3VzRXZlbnQuIE5vdGU6IHdlIG1pZ2h0XG4gIC8vIHdhbnQgdG8gd2FybiBpZiB3ZSBjYW4ndCBkZXRlY3QgdGhlIHByaW9yaXR5XG4gIC8vIGZvciB0aGUgZXZlbnQuXG5cbiAgcmV0dXJuIHByaW9yaXR5ID09PSB1bmRlZmluZWQgPyBDb250aW51b3VzRXZlbnQgOiBwcmlvcml0eTtcbn1cbmZ1bmN0aW9uIHJlZ2lzdGVyU2ltcGxlRXZlbnRzKCkge1xuICByZWdpc3RlclNpbXBsZVBsdWdpbkV2ZW50c0FuZFNldFRoZWlyUHJpb3JpdGllcyhkaXNjcmV0ZUV2ZW50UGFpcnNGb3JTaW1wbGVFdmVudFBsdWdpbiwgRGlzY3JldGVFdmVudCk7XG4gIHJlZ2lzdGVyU2ltcGxlUGx1Z2luRXZlbnRzQW5kU2V0VGhlaXJQcmlvcml0aWVzKHVzZXJCbG9ja2luZ1BhaXJzRm9yU2ltcGxlRXZlbnRQbHVnaW4sIFVzZXJCbG9ja2luZ0V2ZW50KTtcbiAgcmVnaXN0ZXJTaW1wbGVQbHVnaW5FdmVudHNBbmRTZXRUaGVpclByaW9yaXRpZXMoY29udGludW91c1BhaXJzRm9yU2ltcGxlRXZlbnRQbHVnaW4sIENvbnRpbnVvdXNFdmVudCk7XG4gIHNldEV2ZW50UHJpb3JpdGllcyhvdGhlckRpc2NyZXRlRXZlbnRzLCBEaXNjcmV0ZUV2ZW50KTtcbn1cblxudmFyIFNjaGVkdWxlcl9ub3cgPSBTY2hlZHVsZXIudW5zdGFibGVfbm93O1xuXG57XG4gIC8vIFByb3ZpZGUgZXhwbGljaXQgZXJyb3IgbWVzc2FnZSB3aGVuIHByb2R1Y3Rpb24rcHJvZmlsaW5nIGJ1bmRsZSBvZiBlLmcuXG4gIC8vIHJlYWN0LWRvbSBpcyB1c2VkIHdpdGggcHJvZHVjdGlvbiAobm9uLXByb2ZpbGluZykgYnVuZGxlIG9mXG4gIC8vIHNjaGVkdWxlci90cmFjaW5nXG4gIGlmICghKHRyYWNpbmcuX19pbnRlcmFjdGlvbnNSZWYgIT0gbnVsbCAmJiB0cmFjaW5nLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQgIT0gbnVsbCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJJdCBpcyBub3Qgc3VwcG9ydGVkIHRvIHJ1biB0aGUgcHJvZmlsaW5nIHZlcnNpb24gb2YgYSByZW5kZXJlciAoZm9yIGV4YW1wbGUsIGByZWFjdC1kb20vcHJvZmlsaW5nYCkgd2l0aG91dCBhbHNvIHJlcGxhY2luZyB0aGUgYHNjaGVkdWxlci90cmFjaW5nYCBtb2R1bGUgd2l0aCBgc2NoZWR1bGVyL3RyYWNpbmctcHJvZmlsaW5nYC4gWW91ciBidW5kbGVyIG1pZ2h0IGhhdmUgYSBzZXR0aW5nIGZvciBhbGlhc2luZyBib3RoIG1vZHVsZXMuIExlYXJuIG1vcmUgYXQgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3Byb2ZpbGluZ1wiICk7XG4gICAgfVxuICB9XG59XG4vLyBhc2NlbmRpbmcgbnVtYmVycyBzbyB3ZSBjYW4gY29tcGFyZSB0aGVtIGxpa2UgbnVtYmVycy4gVGhleSBzdGFydCBhdCA5MCB0b1xuLy8gYXZvaWQgY2xhc2hpbmcgd2l0aCBTY2hlZHVsZXIncyBwcmlvcml0aWVzLlxuXG52YXIgSW1tZWRpYXRlUHJpb3JpdHkgPSA5OTtcbnZhciBVc2VyQmxvY2tpbmdQcmlvcml0eSA9IDk4O1xudmFyIE5vcm1hbFByaW9yaXR5ID0gOTc7XG52YXIgTG93UHJpb3JpdHkgPSA5NjtcbnZhciBJZGxlUHJpb3JpdHkgPSA5NTsgLy8gTm9Qcmlvcml0eSBpcyB0aGUgYWJzZW5jZSBvZiBwcmlvcml0eS4gQWxzbyBSZWFjdC1vbmx5LlxuXG52YXIgTm9Qcmlvcml0eSA9IDkwO1xudmFyIGluaXRpYWxUaW1lTXMgPSBTY2hlZHVsZXJfbm93KCk7IC8vIElmIHRoZSBpbml0aWFsIHRpbWVzdGFtcCBpcyByZWFzb25hYmx5IHNtYWxsLCB1c2UgU2NoZWR1bGVyJ3MgYG5vd2AgZGlyZWN0bHkuXG5cbnZhciBTeW5jTGFuZVByaW9yaXR5ID0gMTU7XG52YXIgU3luY0JhdGNoZWRMYW5lUHJpb3JpdHkgPSAxNDtcbnZhciBJbnB1dERpc2NyZXRlSHlkcmF0aW9uTGFuZVByaW9yaXR5ID0gMTM7XG52YXIgSW5wdXREaXNjcmV0ZUxhbmVQcmlvcml0eSA9IDEyO1xudmFyIElucHV0Q29udGludW91c0h5ZHJhdGlvbkxhbmVQcmlvcml0eSA9IDExO1xudmFyIElucHV0Q29udGludW91c0xhbmVQcmlvcml0eSA9IDEwO1xudmFyIERlZmF1bHRIeWRyYXRpb25MYW5lUHJpb3JpdHkgPSA5O1xudmFyIERlZmF1bHRMYW5lUHJpb3JpdHkgPSA4O1xudmFyIFRyYW5zaXRpb25IeWRyYXRpb25Qcmlvcml0eSA9IDc7XG52YXIgVHJhbnNpdGlvblByaW9yaXR5ID0gNjtcbnZhciBSZXRyeUxhbmVQcmlvcml0eSA9IDU7XG52YXIgU2VsZWN0aXZlSHlkcmF0aW9uTGFuZVByaW9yaXR5ID0gNDtcbnZhciBJZGxlSHlkcmF0aW9uTGFuZVByaW9yaXR5ID0gMztcbnZhciBJZGxlTGFuZVByaW9yaXR5ID0gMjtcbnZhciBPZmZzY3JlZW5MYW5lUHJpb3JpdHkgPSAxO1xudmFyIE5vTGFuZVByaW9yaXR5ID0gMDtcbnZhciBUb3RhbExhbmVzID0gMzE7XG52YXIgTm9MYW5lcyA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICovXG4wO1xudmFyIE5vTGFuZSA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbjA7XG52YXIgU3luY0xhbmUgPVxuLyogICAgICAgICAgICAgICAgICAgICAgICAqL1xuMTtcbnZhciBTeW5jQmF0Y2hlZExhbmUgPVxuLyogICAgICAgICAgICAgICAgICovXG4yO1xudmFyIElucHV0RGlzY3JldGVIeWRyYXRpb25MYW5lID1cbi8qICAgICAgKi9cbjQ7XG52YXIgSW5wdXREaXNjcmV0ZUxhbmVzID1cbi8qICAgICAgICAgICAgICAgICAgICAqL1xuMjQ7XG52YXIgSW5wdXRDb250aW51b3VzSHlkcmF0aW9uTGFuZSA9XG4vKiAgICAgICAgICAgKi9cbjMyO1xudmFyIElucHV0Q29udGludW91c0xhbmVzID1cbi8qICAgICAgICAgICAgICAgICAgKi9cbjE5MjtcbnZhciBEZWZhdWx0SHlkcmF0aW9uTGFuZSA9XG4vKiAgICAgICAgICAgICovXG4yNTY7XG52YXIgRGVmYXVsdExhbmVzID1cbi8qICAgICAgICAgICAgICAgICAgICovXG4zNTg0O1xudmFyIFRyYW5zaXRpb25IeWRyYXRpb25MYW5lID1cbi8qICAgICAgICAgICAgICAgICovXG40MDk2O1xudmFyIFRyYW5zaXRpb25MYW5lcyA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbjQxODYxMTI7XG52YXIgUmV0cnlMYW5lcyA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuNjI5MTQ1NjA7XG52YXIgU29tZVJldHJ5TGFuZSA9XG4vKiAgICAgICAgICAgICAgICAgICovXG4zMzU1NDQzMjtcbnZhciBTZWxlY3RpdmVIeWRyYXRpb25MYW5lID1cbi8qICAgICAgICAgICovXG42NzEwODg2NDtcbnZhciBOb25JZGxlTGFuZXMgPVxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuMTM0MjE3NzI3O1xudmFyIElkbGVIeWRyYXRpb25MYW5lID1cbi8qICAgICAgICAgICAgICAgKi9cbjEzNDIxNzcyODtcbnZhciBJZGxlTGFuZXMgPVxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG44MDUzMDYzNjg7XG52YXIgT2Zmc2NyZWVuTGFuZSA9XG4vKiAgICAgICAgICAgICAgICAgICAqL1xuMTA3Mzc0MTgyNDtcbnZhciBOb1RpbWVzdGFtcCA9IC0xO1xuZnVuY3Rpb24gc2V0Q3VycmVudFVwZGF0ZUxhbmVQcmlvcml0eShuZXdMYW5lUHJpb3JpdHkpIHtcbn0gLy8gXCJSZWdpc3RlcnNcIiB1c2VkIHRvIFwicmV0dXJuXCIgbXVsdGlwbGUgdmFsdWVzXG4vLyBVc2VkIGJ5IGdldEhpZ2hlc3RQcmlvcml0eUxhbmVzIGFuZCBnZXROZXh0TGFuZXM6XG5cbnZhciByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IERlZmF1bHRMYW5lUHJpb3JpdHk7XG5cbmZ1bmN0aW9uIGdldEhpZ2hlc3RQcmlvcml0eUxhbmVzKGxhbmVzKSB7XG4gIGlmICgoU3luY0xhbmUgJiBsYW5lcykgIT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IFN5bmNMYW5lUHJpb3JpdHk7XG4gICAgcmV0dXJuIFN5bmNMYW5lO1xuICB9XG5cbiAgaWYgKChTeW5jQmF0Y2hlZExhbmUgJiBsYW5lcykgIT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IFN5bmNCYXRjaGVkTGFuZVByaW9yaXR5O1xuICAgIHJldHVybiBTeW5jQmF0Y2hlZExhbmU7XG4gIH1cblxuICBpZiAoKElucHV0RGlzY3JldGVIeWRyYXRpb25MYW5lICYgbGFuZXMpICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBJbnB1dERpc2NyZXRlSHlkcmF0aW9uTGFuZVByaW9yaXR5O1xuICAgIHJldHVybiBJbnB1dERpc2NyZXRlSHlkcmF0aW9uTGFuZTtcbiAgfVxuXG4gIHZhciBpbnB1dERpc2NyZXRlTGFuZXMgPSBJbnB1dERpc2NyZXRlTGFuZXMgJiBsYW5lcztcblxuICBpZiAoaW5wdXREaXNjcmV0ZUxhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBJbnB1dERpc2NyZXRlTGFuZVByaW9yaXR5O1xuICAgIHJldHVybiBpbnB1dERpc2NyZXRlTGFuZXM7XG4gIH1cblxuICBpZiAoKGxhbmVzICYgSW5wdXRDb250aW51b3VzSHlkcmF0aW9uTGFuZSkgIT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IElucHV0Q29udGludW91c0h5ZHJhdGlvbkxhbmVQcmlvcml0eTtcbiAgICByZXR1cm4gSW5wdXRDb250aW51b3VzSHlkcmF0aW9uTGFuZTtcbiAgfVxuXG4gIHZhciBpbnB1dENvbnRpbnVvdXNMYW5lcyA9IElucHV0Q29udGludW91c0xhbmVzICYgbGFuZXM7XG5cbiAgaWYgKGlucHV0Q29udGludW91c0xhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBJbnB1dENvbnRpbnVvdXNMYW5lUHJpb3JpdHk7XG4gICAgcmV0dXJuIGlucHV0Q29udGludW91c0xhbmVzO1xuICB9XG5cbiAgaWYgKChsYW5lcyAmIERlZmF1bHRIeWRyYXRpb25MYW5lKSAhPT0gTm9MYW5lcykge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gRGVmYXVsdEh5ZHJhdGlvbkxhbmVQcmlvcml0eTtcbiAgICByZXR1cm4gRGVmYXVsdEh5ZHJhdGlvbkxhbmU7XG4gIH1cblxuICB2YXIgZGVmYXVsdExhbmVzID0gRGVmYXVsdExhbmVzICYgbGFuZXM7XG5cbiAgaWYgKGRlZmF1bHRMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gRGVmYXVsdExhbmVQcmlvcml0eTtcbiAgICByZXR1cm4gZGVmYXVsdExhbmVzO1xuICB9XG5cbiAgaWYgKChsYW5lcyAmIFRyYW5zaXRpb25IeWRyYXRpb25MYW5lKSAhPT0gTm9MYW5lcykge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gVHJhbnNpdGlvbkh5ZHJhdGlvblByaW9yaXR5O1xuICAgIHJldHVybiBUcmFuc2l0aW9uSHlkcmF0aW9uTGFuZTtcbiAgfVxuXG4gIHZhciB0cmFuc2l0aW9uTGFuZXMgPSBUcmFuc2l0aW9uTGFuZXMgJiBsYW5lcztcblxuICBpZiAodHJhbnNpdGlvbkxhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBUcmFuc2l0aW9uUHJpb3JpdHk7XG4gICAgcmV0dXJuIHRyYW5zaXRpb25MYW5lcztcbiAgfVxuXG4gIHZhciByZXRyeUxhbmVzID0gUmV0cnlMYW5lcyAmIGxhbmVzO1xuXG4gIGlmIChyZXRyeUxhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBSZXRyeUxhbmVQcmlvcml0eTtcbiAgICByZXR1cm4gcmV0cnlMYW5lcztcbiAgfVxuXG4gIGlmIChsYW5lcyAmIFNlbGVjdGl2ZUh5ZHJhdGlvbkxhbmUpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IFNlbGVjdGl2ZUh5ZHJhdGlvbkxhbmVQcmlvcml0eTtcbiAgICByZXR1cm4gU2VsZWN0aXZlSHlkcmF0aW9uTGFuZTtcbiAgfVxuXG4gIGlmICgobGFuZXMgJiBJZGxlSHlkcmF0aW9uTGFuZSkgIT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IElkbGVIeWRyYXRpb25MYW5lUHJpb3JpdHk7XG4gICAgcmV0dXJuIElkbGVIeWRyYXRpb25MYW5lO1xuICB9XG5cbiAgdmFyIGlkbGVMYW5lcyA9IElkbGVMYW5lcyAmIGxhbmVzO1xuXG4gIGlmIChpZGxlTGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IElkbGVMYW5lUHJpb3JpdHk7XG4gICAgcmV0dXJuIGlkbGVMYW5lcztcbiAgfVxuXG4gIGlmICgoT2Zmc2NyZWVuTGFuZSAmIGxhbmVzKSAhPT0gTm9MYW5lcykge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gT2Zmc2NyZWVuTGFuZVByaW9yaXR5O1xuICAgIHJldHVybiBPZmZzY3JlZW5MYW5lO1xuICB9XG5cbiAge1xuICAgIGVycm9yKCdTaG91bGQgaGF2ZSBmb3VuZCBtYXRjaGluZyBsYW5lcy4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4nKTtcbiAgfSAvLyBUaGlzIHNob3VsZG4ndCBiZSByZWFjaGFibGUsIGJ1dCBhcyBhIGZhbGxiYWNrLCByZXR1cm4gdGhlIGVudGlyZSBiaXRtYXNrLlxuXG5cbiAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBEZWZhdWx0TGFuZVByaW9yaXR5O1xuICByZXR1cm4gbGFuZXM7XG59XG5cbmZ1bmN0aW9uIHNjaGVkdWxlclByaW9yaXR5VG9MYW5lUHJpb3JpdHkoc2NoZWR1bGVyUHJpb3JpdHlMZXZlbCkge1xuICBzd2l0Y2ggKHNjaGVkdWxlclByaW9yaXR5TGV2ZWwpIHtcbiAgICBjYXNlIEltbWVkaWF0ZVByaW9yaXR5OlxuICAgICAgcmV0dXJuIFN5bmNMYW5lUHJpb3JpdHk7XG5cbiAgICBjYXNlIFVzZXJCbG9ja2luZ1ByaW9yaXR5OlxuICAgICAgcmV0dXJuIElucHV0Q29udGludW91c0xhbmVQcmlvcml0eTtcblxuICAgIGNhc2UgTm9ybWFsUHJpb3JpdHk6XG4gICAgY2FzZSBMb3dQcmlvcml0eTpcbiAgICAgIC8vIFRPRE86IEhhbmRsZSBMb3dTY2hlZHVsZXJQcmlvcml0eSwgc29tZWhvdy4gTWF5YmUgdGhlIHNhbWUgbGFuZSBhcyBoeWRyYXRpb24uXG4gICAgICByZXR1cm4gRGVmYXVsdExhbmVQcmlvcml0eTtcblxuICAgIGNhc2UgSWRsZVByaW9yaXR5OlxuICAgICAgcmV0dXJuIElkbGVMYW5lUHJpb3JpdHk7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIE5vTGFuZVByaW9yaXR5O1xuICB9XG59XG5mdW5jdGlvbiBsYW5lUHJpb3JpdHlUb1NjaGVkdWxlclByaW9yaXR5KGxhbmVQcmlvcml0eSkge1xuICBzd2l0Y2ggKGxhbmVQcmlvcml0eSkge1xuICAgIGNhc2UgU3luY0xhbmVQcmlvcml0eTpcbiAgICBjYXNlIFN5bmNCYXRjaGVkTGFuZVByaW9yaXR5OlxuICAgICAgcmV0dXJuIEltbWVkaWF0ZVByaW9yaXR5O1xuXG4gICAgY2FzZSBJbnB1dERpc2NyZXRlSHlkcmF0aW9uTGFuZVByaW9yaXR5OlxuICAgIGNhc2UgSW5wdXREaXNjcmV0ZUxhbmVQcmlvcml0eTpcbiAgICBjYXNlIElucHV0Q29udGludW91c0h5ZHJhdGlvbkxhbmVQcmlvcml0eTpcbiAgICBjYXNlIElucHV0Q29udGludW91c0xhbmVQcmlvcml0eTpcbiAgICAgIHJldHVybiBVc2VyQmxvY2tpbmdQcmlvcml0eTtcblxuICAgIGNhc2UgRGVmYXVsdEh5ZHJhdGlvbkxhbmVQcmlvcml0eTpcbiAgICBjYXNlIERlZmF1bHRMYW5lUHJpb3JpdHk6XG4gICAgY2FzZSBUcmFuc2l0aW9uSHlkcmF0aW9uUHJpb3JpdHk6XG4gICAgY2FzZSBUcmFuc2l0aW9uUHJpb3JpdHk6XG4gICAgY2FzZSBTZWxlY3RpdmVIeWRyYXRpb25MYW5lUHJpb3JpdHk6XG4gICAgY2FzZSBSZXRyeUxhbmVQcmlvcml0eTpcbiAgICAgIHJldHVybiBOb3JtYWxQcmlvcml0eTtcblxuICAgIGNhc2UgSWRsZUh5ZHJhdGlvbkxhbmVQcmlvcml0eTpcbiAgICBjYXNlIElkbGVMYW5lUHJpb3JpdHk6XG4gICAgY2FzZSBPZmZzY3JlZW5MYW5lUHJpb3JpdHk6XG4gICAgICByZXR1cm4gSWRsZVByaW9yaXR5O1xuXG4gICAgY2FzZSBOb0xhbmVQcmlvcml0eTpcbiAgICAgIHJldHVybiBOb1ByaW9yaXR5O1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCBcIkludmFsaWQgdXBkYXRlIHByaW9yaXR5OiBcIiArIGxhbmVQcmlvcml0eSArIFwiLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LlwiICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICB9XG59XG5mdW5jdGlvbiBnZXROZXh0TGFuZXMocm9vdCwgd2lwTGFuZXMpIHtcbiAgLy8gRWFybHkgYmFpbG91dCBpZiB0aGVyZSdzIG5vIHBlbmRpbmcgd29yayBsZWZ0LlxuICB2YXIgcGVuZGluZ0xhbmVzID0gcm9vdC5wZW5kaW5nTGFuZXM7XG5cbiAgaWYgKHBlbmRpbmdMYW5lcyA9PT0gTm9MYW5lcykge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gTm9MYW5lUHJpb3JpdHk7XG4gICAgcmV0dXJuIE5vTGFuZXM7XG4gIH1cblxuICB2YXIgbmV4dExhbmVzID0gTm9MYW5lcztcbiAgdmFyIG5leHRMYW5lUHJpb3JpdHkgPSBOb0xhbmVQcmlvcml0eTtcbiAgdmFyIGV4cGlyZWRMYW5lcyA9IHJvb3QuZXhwaXJlZExhbmVzO1xuICB2YXIgc3VzcGVuZGVkTGFuZXMgPSByb290LnN1c3BlbmRlZExhbmVzO1xuICB2YXIgcGluZ2VkTGFuZXMgPSByb290LnBpbmdlZExhbmVzOyAvLyBDaGVjayBpZiBhbnkgd29yayBoYXMgZXhwaXJlZC5cblxuICBpZiAoZXhwaXJlZExhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgbmV4dExhbmVzID0gZXhwaXJlZExhbmVzO1xuICAgIG5leHRMYW5lUHJpb3JpdHkgPSByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IFN5bmNMYW5lUHJpb3JpdHk7XG4gIH0gZWxzZSB7XG4gICAgLy8gRG8gbm90IHdvcmsgb24gYW55IGlkbGUgd29yayB1bnRpbCBhbGwgdGhlIG5vbi1pZGxlIHdvcmsgaGFzIGZpbmlzaGVkLFxuICAgIC8vIGV2ZW4gaWYgdGhlIHdvcmsgaXMgc3VzcGVuZGVkLlxuICAgIHZhciBub25JZGxlUGVuZGluZ0xhbmVzID0gcGVuZGluZ0xhbmVzICYgTm9uSWRsZUxhbmVzO1xuXG4gICAgaWYgKG5vbklkbGVQZW5kaW5nTGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICAgIHZhciBub25JZGxlVW5ibG9ja2VkTGFuZXMgPSBub25JZGxlUGVuZGluZ0xhbmVzICYgfnN1c3BlbmRlZExhbmVzO1xuXG4gICAgICBpZiAobm9uSWRsZVVuYmxvY2tlZExhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgICAgIG5leHRMYW5lcyA9IGdldEhpZ2hlc3RQcmlvcml0eUxhbmVzKG5vbklkbGVVbmJsb2NrZWRMYW5lcyk7XG4gICAgICAgIG5leHRMYW5lUHJpb3JpdHkgPSByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBub25JZGxlUGluZ2VkTGFuZXMgPSBub25JZGxlUGVuZGluZ0xhbmVzICYgcGluZ2VkTGFuZXM7XG5cbiAgICAgICAgaWYgKG5vbklkbGVQaW5nZWRMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgICAgICAgIG5leHRMYW5lcyA9IGdldEhpZ2hlc3RQcmlvcml0eUxhbmVzKG5vbklkbGVQaW5nZWRMYW5lcyk7XG4gICAgICAgICAgbmV4dExhbmVQcmlvcml0eSA9IHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoZSBvbmx5IHJlbWFpbmluZyB3b3JrIGlzIElkbGUuXG4gICAgICB2YXIgdW5ibG9ja2VkTGFuZXMgPSBwZW5kaW5nTGFuZXMgJiB+c3VzcGVuZGVkTGFuZXM7XG5cbiAgICAgIGlmICh1bmJsb2NrZWRMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgICAgICBuZXh0TGFuZXMgPSBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lcyh1bmJsb2NrZWRMYW5lcyk7XG4gICAgICAgIG5leHRMYW5lUHJpb3JpdHkgPSByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChwaW5nZWRMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgICAgICAgIG5leHRMYW5lcyA9IGdldEhpZ2hlc3RQcmlvcml0eUxhbmVzKHBpbmdlZExhbmVzKTtcbiAgICAgICAgICBuZXh0TGFuZVByaW9yaXR5ID0gcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAobmV4dExhbmVzID09PSBOb0xhbmVzKSB7XG4gICAgLy8gVGhpcyBzaG91bGQgb25seSBiZSByZWFjaGFibGUgaWYgd2UncmUgc3VzcGVuZGVkXG4gICAgLy8gVE9ETzogQ29uc2lkZXIgd2FybmluZyBpbiB0aGlzIHBhdGggaWYgYSBmYWxsYmFjayB0aW1lciBpcyBub3Qgc2NoZWR1bGVkLlxuICAgIHJldHVybiBOb0xhbmVzO1xuICB9IC8vIElmIHRoZXJlIGFyZSBoaWdoZXIgcHJpb3JpdHkgbGFuZXMsIHdlJ2xsIGluY2x1ZGUgdGhlbSBldmVuIGlmIHRoZXlcbiAgLy8gYXJlIHN1c3BlbmRlZC5cblxuXG4gIG5leHRMYW5lcyA9IHBlbmRpbmdMYW5lcyAmIGdldEVxdWFsT3JIaWdoZXJQcmlvcml0eUxhbmVzKG5leHRMYW5lcyk7IC8vIElmIHdlJ3JlIGFscmVhZHkgaW4gdGhlIG1pZGRsZSBvZiBhIHJlbmRlciwgc3dpdGNoaW5nIGxhbmVzIHdpbGwgaW50ZXJydXB0XG4gIC8vIGl0IGFuZCB3ZSdsbCBsb3NlIG91ciBwcm9ncmVzcy4gV2Ugc2hvdWxkIG9ubHkgZG8gdGhpcyBpZiB0aGUgbmV3IGxhbmVzIGFyZVxuICAvLyBoaWdoZXIgcHJpb3JpdHkuXG5cbiAgaWYgKHdpcExhbmVzICE9PSBOb0xhbmVzICYmIHdpcExhbmVzICE9PSBuZXh0TGFuZXMgJiYgLy8gSWYgd2UgYWxyZWFkeSBzdXNwZW5kZWQgd2l0aCBhIGRlbGF5LCB0aGVuIGludGVycnVwdGluZyBpcyBmaW5lLiBEb24ndFxuICAvLyBib3RoZXIgd2FpdGluZyB1bnRpbCB0aGUgcm9vdCBpcyBjb21wbGV0ZS5cbiAgKHdpcExhbmVzICYgc3VzcGVuZGVkTGFuZXMpID09PSBOb0xhbmVzKSB7XG4gICAgZ2V0SGlnaGVzdFByaW9yaXR5TGFuZXMod2lwTGFuZXMpO1xuICAgIHZhciB3aXBMYW5lUHJpb3JpdHkgPSByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eTtcblxuICAgIGlmIChuZXh0TGFuZVByaW9yaXR5IDw9IHdpcExhbmVQcmlvcml0eSkge1xuICAgICAgcmV0dXJuIHdpcExhbmVzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IG5leHRMYW5lUHJpb3JpdHk7XG4gICAgfVxuICB9IC8vIENoZWNrIGZvciBlbnRhbmdsZWQgbGFuZXMgYW5kIGFkZCB0aGVtIHRvIHRoZSBiYXRjaC5cbiAgLy9cbiAgLy8gQSBsYW5lIGlzIHNhaWQgdG8gYmUgZW50YW5nbGVkIHdpdGggYW5vdGhlciB3aGVuIGl0J3Mgbm90IGFsbG93ZWQgdG8gcmVuZGVyXG4gIC8vIGluIGEgYmF0Y2ggdGhhdCBkb2VzIG5vdCBhbHNvIGluY2x1ZGUgdGhlIG90aGVyIGxhbmUuIFR5cGljYWxseSB3ZSBkbyB0aGlzXG4gIC8vIHdoZW4gbXVsdGlwbGUgdXBkYXRlcyBoYXZlIHRoZSBzYW1lIHNvdXJjZSwgYW5kIHdlIG9ubHkgd2FudCB0byByZXNwb25kIHRvXG4gIC8vIHRoZSBtb3N0IHJlY2VudCBldmVudCBmcm9tIHRoYXQgc291cmNlLlxuICAvL1xuICAvLyBOb3RlIHRoYXQgd2UgYXBwbHkgZW50YW5nbGVtZW50cyAqYWZ0ZXIqIGNoZWNraW5nIGZvciBwYXJ0aWFsIHdvcmsgYWJvdmUuXG4gIC8vIFRoaXMgbWVhbnMgdGhhdCBpZiBhIGxhbmUgaXMgZW50YW5nbGVkIGR1cmluZyBhbiBpbnRlcmxlYXZlZCBldmVudCB3aGlsZVxuICAvLyBpdCdzIGFscmVhZHkgcmVuZGVyaW5nLCB3ZSB3b24ndCBpbnRlcnJ1cHQgaXQuIFRoaXMgaXMgaW50ZW50aW9uYWwsIHNpbmNlXG4gIC8vIGVudGFuZ2xlbWVudCBpcyB1c3VhbGx5IFwiYmVzdCBlZmZvcnRcIjogd2UnbGwgdHJ5IG91ciBiZXN0IHRvIHJlbmRlciB0aGVcbiAgLy8gbGFuZXMgaW4gdGhlIHNhbWUgYmF0Y2gsIGJ1dCBpdCdzIG5vdCB3b3J0aCB0aHJvd2luZyBvdXQgcGFydGlhbGx5XG4gIC8vIGNvbXBsZXRlZCB3b3JrIGluIG9yZGVyIHRvIGRvIGl0LlxuICAvL1xuICAvLyBGb3IgdGhvc2UgZXhjZXB0aW9ucyB3aGVyZSBlbnRhbmdsZW1lbnQgaXMgc2VtYW50aWNhbGx5IGltcG9ydGFudCwgbGlrZVxuICAvLyB1c2VNdXRhYmxlU291cmNlLCB3ZSBzaG91bGQgZW5zdXJlIHRoYXQgdGhlcmUgaXMgbm8gcGFydGlhbCB3b3JrIGF0IHRoZVxuICAvLyB0aW1lIHdlIGFwcGx5IHRoZSBlbnRhbmdsZW1lbnQuXG5cblxuICB2YXIgZW50YW5nbGVkTGFuZXMgPSByb290LmVudGFuZ2xlZExhbmVzO1xuXG4gIGlmIChlbnRhbmdsZWRMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgIHZhciBlbnRhbmdsZW1lbnRzID0gcm9vdC5lbnRhbmdsZW1lbnRzO1xuICAgIHZhciBsYW5lcyA9IG5leHRMYW5lcyAmIGVudGFuZ2xlZExhbmVzO1xuXG4gICAgd2hpbGUgKGxhbmVzID4gMCkge1xuICAgICAgdmFyIGluZGV4ID0gcGlja0FyYml0cmFyeUxhbmVJbmRleChsYW5lcyk7XG4gICAgICB2YXIgbGFuZSA9IDEgPDwgaW5kZXg7XG4gICAgICBuZXh0TGFuZXMgfD0gZW50YW5nbGVtZW50c1tpbmRleF07XG4gICAgICBsYW5lcyAmPSB+bGFuZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV4dExhbmVzO1xufVxuZnVuY3Rpb24gZ2V0TW9zdFJlY2VudEV2ZW50VGltZShyb290LCBsYW5lcykge1xuICB2YXIgZXZlbnRUaW1lcyA9IHJvb3QuZXZlbnRUaW1lcztcbiAgdmFyIG1vc3RSZWNlbnRFdmVudFRpbWUgPSBOb1RpbWVzdGFtcDtcblxuICB3aGlsZSAobGFuZXMgPiAwKSB7XG4gICAgdmFyIGluZGV4ID0gcGlja0FyYml0cmFyeUxhbmVJbmRleChsYW5lcyk7XG4gICAgdmFyIGxhbmUgPSAxIDw8IGluZGV4O1xuICAgIHZhciBldmVudFRpbWUgPSBldmVudFRpbWVzW2luZGV4XTtcblxuICAgIGlmIChldmVudFRpbWUgPiBtb3N0UmVjZW50RXZlbnRUaW1lKSB7XG4gICAgICBtb3N0UmVjZW50RXZlbnRUaW1lID0gZXZlbnRUaW1lO1xuICAgIH1cblxuICAgIGxhbmVzICY9IH5sYW5lO1xuICB9XG5cbiAgcmV0dXJuIG1vc3RSZWNlbnRFdmVudFRpbWU7XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVFeHBpcmF0aW9uVGltZShsYW5lLCBjdXJyZW50VGltZSkge1xuICAvLyBUT0RPOiBFeHBpcmF0aW9uIGhldXJpc3RpYyBpcyBjb25zdGFudCBwZXIgbGFuZSwgc28gY291bGQgdXNlIGEgbWFwLlxuICBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lcyhsYW5lKTtcbiAgdmFyIHByaW9yaXR5ID0gcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHk7XG5cbiAgaWYgKHByaW9yaXR5ID49IElucHV0Q29udGludW91c0xhbmVQcmlvcml0eSkge1xuICAgIC8vIFVzZXIgaW50ZXJhY3Rpb25zIHNob3VsZCBleHBpcmUgc2xpZ2h0bHkgbW9yZSBxdWlja2x5LlxuICAgIC8vXG4gICAgLy8gTk9URTogVGhpcyBpcyBzZXQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgY29uc3RhbnQgYXMgaW4gU2NoZWR1bGVyLmpzLiBXaGVuXG4gICAgLy8gd2UgbWFkZSBpdCBsYXJnZXIsIGEgcHJvZHVjdCBtZXRyaWMgaW4gd3d3IHJlZ3Jlc3NlZCwgc3VnZ2VzdGluZyB0aGVyZSdzXG4gICAgLy8gYSB1c2VyIGludGVyYWN0aW9uIHRoYXQncyBiZWluZyBzdGFydmVkIGJ5IGEgc2VyaWVzIG9mIHN5bmNocm9ub3VzXG4gICAgLy8gdXBkYXRlcy4gSWYgdGhhdCB0aGVvcnkgaXMgY29ycmVjdCwgdGhlIHByb3BlciBzb2x1dGlvbiBpcyB0byBmaXggdGhlXG4gICAgLy8gc3RhcnZhdGlvbi4gSG93ZXZlciwgdGhpcyBzY2VuYXJpbyBzdXBwb3J0cyB0aGUgaWRlYSB0aGF0IGV4cGlyYXRpb25cbiAgICAvLyB0aW1lcyBhcmUgYW4gaW1wb3J0YW50IHNhZmVndWFyZCB3aGVuIHN0YXJ2YXRpb24gZG9lcyBoYXBwZW4uXG4gICAgLy9cbiAgICAvLyBBbHNvIG5vdGUgdGhhdCwgaW4gdGhlIGNhc2Ugb2YgdXNlciBpbnB1dCBzcGVjaWZpY2FsbHksIHRoaXMgd2lsbCBzb29uIG5vXG4gICAgLy8gbG9uZ2VyIGJlIGFuIGlzc3VlIGJlY2F1c2Ugd2UgcGxhbiB0byBtYWtlIHVzZXIgaW5wdXQgc3luY2hyb25vdXMgYnlcbiAgICAvLyBkZWZhdWx0ICh1bnRpbCB5b3UgZW50ZXIgYHN0YXJ0VHJhbnNpdGlvbmAsIG9mIGNvdXJzZS4pXG4gICAgLy9cbiAgICAvLyBJZiB3ZXJlbid0IHBsYW5uaW5nIHRvIG1ha2UgdGhlc2UgdXBkYXRlcyBzeW5jaHJvbm91cyBzb29uIGFueXdheSwgSVxuICAgIC8vIHdvdWxkIHByb2JhYmx5IG1ha2UgdGhpcyBudW1iZXIgYSBjb25maWd1cmFibGUgcGFyYW1ldGVyLlxuICAgIHJldHVybiBjdXJyZW50VGltZSArIDI1MDtcbiAgfSBlbHNlIGlmIChwcmlvcml0eSA+PSBUcmFuc2l0aW9uUHJpb3JpdHkpIHtcbiAgICByZXR1cm4gY3VycmVudFRpbWUgKyA1MDAwO1xuICB9IGVsc2Uge1xuICAgIC8vIEFueXRoaW5nIGlkbGUgcHJpb3JpdHkgb3IgbG93ZXIgc2hvdWxkIG5ldmVyIGV4cGlyZS5cbiAgICByZXR1cm4gTm9UaW1lc3RhbXA7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFya1N0YXJ2ZWRMYW5lc0FzRXhwaXJlZChyb290LCBjdXJyZW50VGltZSkge1xuICAvLyBUT0RPOiBUaGlzIGdldHMgY2FsbGVkIGV2ZXJ5IHRpbWUgd2UgeWllbGQuIFdlIGNhbiBvcHRpbWl6ZSBieSBzdG9yaW5nXG4gIC8vIHRoZSBlYXJsaWVzdCBleHBpcmF0aW9uIHRpbWUgb24gdGhlIHJvb3QuIFRoZW4gdXNlIHRoYXQgdG8gcXVpY2tseSBiYWlsIG91dFxuICAvLyBvZiB0aGlzIGZ1bmN0aW9uLlxuICB2YXIgcGVuZGluZ0xhbmVzID0gcm9vdC5wZW5kaW5nTGFuZXM7XG4gIHZhciBzdXNwZW5kZWRMYW5lcyA9IHJvb3Quc3VzcGVuZGVkTGFuZXM7XG4gIHZhciBwaW5nZWRMYW5lcyA9IHJvb3QucGluZ2VkTGFuZXM7XG4gIHZhciBleHBpcmF0aW9uVGltZXMgPSByb290LmV4cGlyYXRpb25UaW1lczsgLy8gSXRlcmF0ZSB0aHJvdWdoIHRoZSBwZW5kaW5nIGxhbmVzIGFuZCBjaGVjayBpZiB3ZSd2ZSByZWFjaGVkIHRoZWlyXG4gIC8vIGV4cGlyYXRpb24gdGltZS4gSWYgc28sIHdlJ2xsIGFzc3VtZSB0aGUgdXBkYXRlIGlzIGJlaW5nIHN0YXJ2ZWQgYW5kIG1hcmtcbiAgLy8gaXQgYXMgZXhwaXJlZCB0byBmb3JjZSBpdCB0byBmaW5pc2guXG5cbiAgdmFyIGxhbmVzID0gcGVuZGluZ0xhbmVzO1xuXG4gIHdoaWxlIChsYW5lcyA+IDApIHtcbiAgICB2YXIgaW5kZXggPSBwaWNrQXJiaXRyYXJ5TGFuZUluZGV4KGxhbmVzKTtcbiAgICB2YXIgbGFuZSA9IDEgPDwgaW5kZXg7XG4gICAgdmFyIGV4cGlyYXRpb25UaW1lID0gZXhwaXJhdGlvblRpbWVzW2luZGV4XTtcblxuICAgIGlmIChleHBpcmF0aW9uVGltZSA9PT0gTm9UaW1lc3RhbXApIHtcbiAgICAgIC8vIEZvdW5kIGEgcGVuZGluZyBsYW5lIHdpdGggbm8gZXhwaXJhdGlvbiB0aW1lLiBJZiBpdCdzIG5vdCBzdXNwZW5kZWQsIG9yXG4gICAgICAvLyBpZiBpdCdzIHBpbmdlZCwgYXNzdW1lIGl0J3MgQ1BVLWJvdW5kLiBDb21wdXRlIGEgbmV3IGV4cGlyYXRpb24gdGltZVxuICAgICAgLy8gdXNpbmcgdGhlIGN1cnJlbnQgdGltZS5cbiAgICAgIGlmICgobGFuZSAmIHN1c3BlbmRlZExhbmVzKSA9PT0gTm9MYW5lcyB8fCAobGFuZSAmIHBpbmdlZExhbmVzKSAhPT0gTm9MYW5lcykge1xuICAgICAgICAvLyBBc3N1bWVzIHRpbWVzdGFtcHMgYXJlIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZy5cbiAgICAgICAgZXhwaXJhdGlvblRpbWVzW2luZGV4XSA9IGNvbXB1dGVFeHBpcmF0aW9uVGltZShsYW5lLCBjdXJyZW50VGltZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChleHBpcmF0aW9uVGltZSA8PSBjdXJyZW50VGltZSkge1xuICAgICAgLy8gVGhpcyBsYW5lIGV4cGlyZWRcbiAgICAgIHJvb3QuZXhwaXJlZExhbmVzIHw9IGxhbmU7XG4gICAgfVxuXG4gICAgbGFuZXMgJj0gfmxhbmU7XG4gIH1cbn0gLy8gVGhpcyByZXR1cm5zIHRoZSBoaWdoZXN0IHByaW9yaXR5IHBlbmRpbmcgbGFuZXMgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZXlcbmZ1bmN0aW9uIGdldExhbmVzVG9SZXRyeVN5bmNocm9ub3VzbHlPbkVycm9yKHJvb3QpIHtcbiAgdmFyIGV2ZXJ5dGhpbmdCdXRPZmZzY3JlZW4gPSByb290LnBlbmRpbmdMYW5lcyAmIH5PZmZzY3JlZW5MYW5lO1xuXG4gIGlmIChldmVyeXRoaW5nQnV0T2Zmc2NyZWVuICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuIGV2ZXJ5dGhpbmdCdXRPZmZzY3JlZW47XG4gIH1cblxuICBpZiAoZXZlcnl0aGluZ0J1dE9mZnNjcmVlbiAmIE9mZnNjcmVlbkxhbmUpIHtcbiAgICByZXR1cm4gT2Zmc2NyZWVuTGFuZTtcbiAgfVxuXG4gIHJldHVybiBOb0xhbmVzO1xufVxuZnVuY3Rpb24gcmV0dXJuTmV4dExhbmVzUHJpb3JpdHkoKSB7XG4gIHJldHVybiByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eTtcbn1cbmZ1bmN0aW9uIGluY2x1ZGVzTm9uSWRsZVdvcmsobGFuZXMpIHtcbiAgcmV0dXJuIChsYW5lcyAmIE5vbklkbGVMYW5lcykgIT09IE5vTGFuZXM7XG59XG5mdW5jdGlvbiBpbmNsdWRlc09ubHlSZXRyaWVzKGxhbmVzKSB7XG4gIHJldHVybiAobGFuZXMgJiBSZXRyeUxhbmVzKSA9PT0gbGFuZXM7XG59XG5mdW5jdGlvbiBpbmNsdWRlc09ubHlUcmFuc2l0aW9ucyhsYW5lcykge1xuICByZXR1cm4gKGxhbmVzICYgVHJhbnNpdGlvbkxhbmVzKSA9PT0gbGFuZXM7XG59IC8vIFRvIGVuc3VyZSBjb25zaXN0ZW5jeSBhY3Jvc3MgbXVsdGlwbGUgdXBkYXRlcyBpbiB0aGUgc2FtZSBldmVudCwgdGhpcyBzaG91bGRcbi8vIGJlIGEgcHVyZSBmdW5jdGlvbiwgc28gdGhhdCBpdCBhbHdheXMgcmV0dXJucyB0aGUgc2FtZSBsYW5lIGZvciBnaXZlbiBpbnB1dHMuXG5cbmZ1bmN0aW9uIGZpbmRVcGRhdGVMYW5lKGxhbmVQcmlvcml0eSwgd2lwTGFuZXMpIHtcbiAgc3dpdGNoIChsYW5lUHJpb3JpdHkpIHtcbiAgICBjYXNlIE5vTGFuZVByaW9yaXR5OlxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFN5bmNMYW5lUHJpb3JpdHk6XG4gICAgICByZXR1cm4gU3luY0xhbmU7XG5cbiAgICBjYXNlIFN5bmNCYXRjaGVkTGFuZVByaW9yaXR5OlxuICAgICAgcmV0dXJuIFN5bmNCYXRjaGVkTGFuZTtcblxuICAgIGNhc2UgSW5wdXREaXNjcmV0ZUxhbmVQcmlvcml0eTpcbiAgICAgIHtcbiAgICAgICAgdmFyIF9sYW5lID0gcGlja0FyYml0cmFyeUxhbmUoSW5wdXREaXNjcmV0ZUxhbmVzICYgfndpcExhbmVzKTtcblxuICAgICAgICBpZiAoX2xhbmUgPT09IE5vTGFuZSkge1xuICAgICAgICAgIC8vIFNoaWZ0IHRvIHRoZSBuZXh0IHByaW9yaXR5IGxldmVsXG4gICAgICAgICAgcmV0dXJuIGZpbmRVcGRhdGVMYW5lKElucHV0Q29udGludW91c0xhbmVQcmlvcml0eSwgd2lwTGFuZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIF9sYW5lO1xuICAgICAgfVxuXG4gICAgY2FzZSBJbnB1dENvbnRpbnVvdXNMYW5lUHJpb3JpdHk6XG4gICAgICB7XG4gICAgICAgIHZhciBfbGFuZTIgPSBwaWNrQXJiaXRyYXJ5TGFuZShJbnB1dENvbnRpbnVvdXNMYW5lcyAmIH53aXBMYW5lcyk7XG5cbiAgICAgICAgaWYgKF9sYW5lMiA9PT0gTm9MYW5lKSB7XG4gICAgICAgICAgLy8gU2hpZnQgdG8gdGhlIG5leHQgcHJpb3JpdHkgbGV2ZWxcbiAgICAgICAgICByZXR1cm4gZmluZFVwZGF0ZUxhbmUoRGVmYXVsdExhbmVQcmlvcml0eSwgd2lwTGFuZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIF9sYW5lMjtcbiAgICAgIH1cblxuICAgIGNhc2UgRGVmYXVsdExhbmVQcmlvcml0eTpcbiAgICAgIHtcbiAgICAgICAgdmFyIF9sYW5lMyA9IHBpY2tBcmJpdHJhcnlMYW5lKERlZmF1bHRMYW5lcyAmIH53aXBMYW5lcyk7XG5cbiAgICAgICAgaWYgKF9sYW5lMyA9PT0gTm9MYW5lKSB7XG4gICAgICAgICAgLy8gSWYgYWxsIHRoZSBkZWZhdWx0IGxhbmVzIGFyZSBhbHJlYWR5IGJlaW5nIHdvcmtlZCBvbiwgbG9vayBmb3IgYVxuICAgICAgICAgIC8vIGxhbmUgaW4gdGhlIHRyYW5zaXRpb24gcmFuZ2UuXG4gICAgICAgICAgX2xhbmUzID0gcGlja0FyYml0cmFyeUxhbmUoVHJhbnNpdGlvbkxhbmVzICYgfndpcExhbmVzKTtcblxuICAgICAgICAgIGlmIChfbGFuZTMgPT09IE5vTGFuZSkge1xuICAgICAgICAgICAgLy8gQWxsIHRoZSB0cmFuc2l0aW9uIGxhbmVzIGFyZSB0YWtlbiwgdG9vLiBUaGlzIHNob3VsZCBiZSB2ZXJ5XG4gICAgICAgICAgICAvLyByYXJlLCBidXQgYXMgYSBsYXN0IHJlc29ydCwgcGljayBhIGRlZmF1bHQgbGFuZS4gVGhpcyB3aWxsIGhhdmVcbiAgICAgICAgICAgIC8vIHRoZSBlZmZlY3Qgb2YgaW50ZXJydXB0aW5nIHRoZSBjdXJyZW50IHdvcmstaW4tcHJvZ3Jlc3MgcmVuZGVyLlxuICAgICAgICAgICAgX2xhbmUzID0gcGlja0FyYml0cmFyeUxhbmUoRGVmYXVsdExhbmVzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gX2xhbmUzO1xuICAgICAgfVxuXG4gICAgY2FzZSBUcmFuc2l0aW9uUHJpb3JpdHk6IC8vIFNob3VsZCBiZSBoYW5kbGVkIGJ5IGZpbmRUcmFuc2l0aW9uTGFuZSBpbnN0ZWFkXG5cbiAgICBjYXNlIFJldHJ5TGFuZVByaW9yaXR5OlxuICAgICAgLy8gU2hvdWxkIGJlIGhhbmRsZWQgYnkgZmluZFJldHJ5TGFuZSBpbnN0ZWFkXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgSWRsZUxhbmVQcmlvcml0eTpcbiAgICAgIHZhciBsYW5lID0gcGlja0FyYml0cmFyeUxhbmUoSWRsZUxhbmVzICYgfndpcExhbmVzKTtcblxuICAgICAgaWYgKGxhbmUgPT09IE5vTGFuZSkge1xuICAgICAgICBsYW5lID0gcGlja0FyYml0cmFyeUxhbmUoSWRsZUxhbmVzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGxhbmU7XG4gIH1cblxuICB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiSW52YWxpZCB1cGRhdGUgcHJpb3JpdHk6IFwiICsgbGFuZVByaW9yaXR5ICsgXCIuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuXCIgKTtcbiAgICB9XG4gIH1cbn0gLy8gVG8gZW5zdXJlIGNvbnNpc3RlbmN5IGFjcm9zcyBtdWx0aXBsZSB1cGRhdGVzIGluIHRoZSBzYW1lIGV2ZW50LCB0aGlzIHNob3VsZFxuLy8gYmUgcHVyZSBmdW5jdGlvbiwgc28gdGhhdCBpdCBhbHdheXMgcmV0dXJucyB0aGUgc2FtZSBsYW5lIGZvciBnaXZlbiBpbnB1dHMuXG5cbmZ1bmN0aW9uIGZpbmRUcmFuc2l0aW9uTGFuZSh3aXBMYW5lcywgcGVuZGluZ0xhbmVzKSB7XG4gIC8vIEZpcnN0IGxvb2sgZm9yIGxhbmVzIHRoYXQgYXJlIGNvbXBsZXRlbHkgdW5jbGFpbWVkLCBpLmUuIGhhdmUgbm9cbiAgLy8gcGVuZGluZyB3b3JrLlxuICB2YXIgbGFuZSA9IHBpY2tBcmJpdHJhcnlMYW5lKFRyYW5zaXRpb25MYW5lcyAmIH5wZW5kaW5nTGFuZXMpO1xuXG4gIGlmIChsYW5lID09PSBOb0xhbmUpIHtcbiAgICAvLyBJZiBhbGwgbGFuZXMgaGF2ZSBwZW5kaW5nIHdvcmssIGxvb2sgZm9yIGEgbGFuZSB0aGF0IGlzbid0IGN1cnJlbnRseVxuICAgIC8vIGJlaW5nIHdvcmtlZCBvbi5cbiAgICBsYW5lID0gcGlja0FyYml0cmFyeUxhbmUoVHJhbnNpdGlvbkxhbmVzICYgfndpcExhbmVzKTtcblxuICAgIGlmIChsYW5lID09PSBOb0xhbmUpIHtcbiAgICAgIC8vIElmIGV2ZXJ5dGhpbmcgaXMgYmVpbmcgd29ya2VkIG9uLCBwaWNrIGFueSBsYW5lLiBUaGlzIGhhcyB0aGVcbiAgICAgIC8vIGVmZmVjdCBvZiBpbnRlcnJ1cHRpbmcgdGhlIGN1cnJlbnQgd29yay1pbi1wcm9ncmVzcy5cbiAgICAgIGxhbmUgPSBwaWNrQXJiaXRyYXJ5TGFuZShUcmFuc2l0aW9uTGFuZXMpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBsYW5lO1xufSAvLyBUbyBlbnN1cmUgY29uc2lzdGVuY3kgYWNyb3NzIG11bHRpcGxlIHVwZGF0ZXMgaW4gdGhlIHNhbWUgZXZlbnQsIHRoaXMgc2hvdWxkXG4vLyBiZSBwdXJlIGZ1bmN0aW9uLCBzbyB0aGF0IGl0IGFsd2F5cyByZXR1cm5zIHRoZSBzYW1lIGxhbmUgZm9yIGdpdmVuIGlucHV0cy5cblxuZnVuY3Rpb24gZmluZFJldHJ5TGFuZSh3aXBMYW5lcykge1xuICAvLyBUaGlzIGlzIGEgZm9yayBvZiBgZmluZFVwZGF0ZUxhbmVgIGRlc2lnbmVkIHNwZWNpZmljYWxseSBmb3IgU3VzcGVuc2VcbiAgLy8gXCJyZXRyaWVzXCIgXHUyMDE0IGEgc3BlY2lhbCB1cGRhdGUgdGhhdCBhdHRlbXB0cyB0byBmbGlwIGEgU3VzcGVuc2UgYm91bmRhcnlcbiAgLy8gZnJvbSBpdHMgcGxhY2Vob2xkZXIgc3RhdGUgdG8gaXRzIHByaW1hcnkvcmVzb2x2ZWQgc3RhdGUuXG4gIHZhciBsYW5lID0gcGlja0FyYml0cmFyeUxhbmUoUmV0cnlMYW5lcyAmIH53aXBMYW5lcyk7XG5cbiAgaWYgKGxhbmUgPT09IE5vTGFuZSkge1xuICAgIGxhbmUgPSBwaWNrQXJiaXRyYXJ5TGFuZShSZXRyeUxhbmVzKTtcbiAgfVxuXG4gIHJldHVybiBsYW5lO1xufVxuXG5mdW5jdGlvbiBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lKGxhbmVzKSB7XG4gIHJldHVybiBsYW5lcyAmIC1sYW5lcztcbn1cblxuZnVuY3Rpb24gZ2V0TG93ZXN0UHJpb3JpdHlMYW5lKGxhbmVzKSB7XG4gIC8vIFRoaXMgZmluZHMgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgbm9uLXplcm8gYml0LlxuICB2YXIgaW5kZXggPSAzMSAtIGNsejMyKGxhbmVzKTtcbiAgcmV0dXJuIGluZGV4IDwgMCA/IE5vTGFuZXMgOiAxIDw8IGluZGV4O1xufVxuXG5mdW5jdGlvbiBnZXRFcXVhbE9ySGlnaGVyUHJpb3JpdHlMYW5lcyhsYW5lcykge1xuICByZXR1cm4gKGdldExvd2VzdFByaW9yaXR5TGFuZShsYW5lcykgPDwgMSkgLSAxO1xufVxuXG5mdW5jdGlvbiBwaWNrQXJiaXRyYXJ5TGFuZShsYW5lcykge1xuICAvLyBUaGlzIHdyYXBwZXIgZnVuY3Rpb24gZ2V0cyBpbmxpbmVkLiBPbmx5IGV4aXN0cyBzbyB0byBjb21tdW5pY2F0ZSB0aGF0IGl0XG4gIC8vIGRvZXNuJ3QgbWF0dGVyIHdoaWNoIGJpdCBpcyBzZWxlY3RlZDsgeW91IGNhbiBwaWNrIGFueSBiaXQgd2l0aG91dFxuICAvLyBhZmZlY3RpbmcgdGhlIGFsZ29yaXRobXMgd2hlcmUgaXRzIHVzZWQuIEhlcmUgSSdtIHVzaW5nXG4gIC8vIGdldEhpZ2hlc3RQcmlvcml0eUxhbmUgYmVjYXVzZSBpdCByZXF1aXJlcyB0aGUgZmV3ZXN0IG9wZXJhdGlvbnMuXG4gIHJldHVybiBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lKGxhbmVzKTtcbn1cblxuZnVuY3Rpb24gcGlja0FyYml0cmFyeUxhbmVJbmRleChsYW5lcykge1xuICByZXR1cm4gMzEgLSBjbHozMihsYW5lcyk7XG59XG5cbmZ1bmN0aW9uIGxhbmVUb0luZGV4KGxhbmUpIHtcbiAgcmV0dXJuIHBpY2tBcmJpdHJhcnlMYW5lSW5kZXgobGFuZSk7XG59XG5cbmZ1bmN0aW9uIGluY2x1ZGVzU29tZUxhbmUoYSwgYikge1xuICByZXR1cm4gKGEgJiBiKSAhPT0gTm9MYW5lcztcbn1cbmZ1bmN0aW9uIGlzU3Vic2V0T2ZMYW5lcyhzZXQsIHN1YnNldCkge1xuICByZXR1cm4gKHNldCAmIHN1YnNldCkgPT09IHN1YnNldDtcbn1cbmZ1bmN0aW9uIG1lcmdlTGFuZXMoYSwgYikge1xuICByZXR1cm4gYSB8IGI7XG59XG5mdW5jdGlvbiByZW1vdmVMYW5lcyhzZXQsIHN1YnNldCkge1xuICByZXR1cm4gc2V0ICYgfnN1YnNldDtcbn0gLy8gU2VlbXMgcmVkdW5kYW50LCBidXQgaXQgY2hhbmdlcyB0aGUgdHlwZSBmcm9tIGEgc2luZ2xlIGxhbmUgKHVzZWQgZm9yXG4vLyB1cGRhdGVzKSB0byBhIGdyb3VwIG9mIGxhbmVzICh1c2VkIGZvciBmbHVzaGluZyB3b3JrKS5cblxuZnVuY3Rpb24gbGFuZVRvTGFuZXMobGFuZSkge1xuICByZXR1cm4gbGFuZTtcbn1cbmZ1bmN0aW9uIGhpZ2hlclByaW9yaXR5TGFuZShhLCBiKSB7XG4gIC8vIFRoaXMgd29ya3MgYmVjYXVzZSB0aGUgYml0IHJhbmdlcyBkZWNyZWFzZSBpbiBwcmlvcml0eSBhcyB5b3UgZ28gbGVmdC5cbiAgcmV0dXJuIGEgIT09IE5vTGFuZSAmJiBhIDwgYiA/IGEgOiBiO1xufVxuZnVuY3Rpb24gY3JlYXRlTGFuZU1hcChpbml0aWFsKSB7XG4gIC8vIEludGVudGlvbmFsbHkgcHVzaGluZyBvbmUgYnkgb25lLlxuICAvLyBodHRwczovL3Y4LmRldi9ibG9nL2VsZW1lbnRzLWtpbmRzI2F2b2lkLWNyZWF0aW5nLWhvbGVzXG4gIHZhciBsYW5lTWFwID0gW107XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBUb3RhbExhbmVzOyBpKyspIHtcbiAgICBsYW5lTWFwLnB1c2goaW5pdGlhbCk7XG4gIH1cblxuICByZXR1cm4gbGFuZU1hcDtcbn1cbmZ1bmN0aW9uIG1hcmtSb290VXBkYXRlZChyb290LCB1cGRhdGVMYW5lLCBldmVudFRpbWUpIHtcbiAgcm9vdC5wZW5kaW5nTGFuZXMgfD0gdXBkYXRlTGFuZTsgLy8gVE9ETzogVGhlb3JldGljYWxseSwgYW55IHVwZGF0ZSB0byBhbnkgbGFuZSBjYW4gdW5ibG9jayBhbnkgb3RoZXIgbGFuZS4gQnV0XG4gIC8vIGl0J3Mgbm90IHByYWN0aWNhbCB0byB0cnkgZXZlcnkgc2luZ2xlIHBvc3NpYmxlIGNvbWJpbmF0aW9uLiBXZSBuZWVkIGFcbiAgLy8gaGV1cmlzdGljIHRvIGRlY2lkZSB3aGljaCBsYW5lcyB0byBhdHRlbXB0IHRvIHJlbmRlciwgYW5kIGluIHdoaWNoIGJhdGNoZXMuXG4gIC8vIEZvciBub3csIHdlIHVzZSB0aGUgc2FtZSBoZXVyaXN0aWMgYXMgaW4gdGhlIG9sZCBFeHBpcmF0aW9uVGltZXMgbW9kZWw6XG4gIC8vIHJldHJ5IGFueSBsYW5lIGF0IGVxdWFsIG9yIGxvd2VyIHByaW9yaXR5LCBidXQgZG9uJ3QgdHJ5IHVwZGF0ZXMgYXQgaGlnaGVyXG4gIC8vIHByaW9yaXR5IHdpdGhvdXQgYWxzbyBpbmNsdWRpbmcgdGhlIGxvd2VyIHByaW9yaXR5IHVwZGF0ZXMuIFRoaXMgd29ya3Mgd2VsbFxuICAvLyB3aGVuIGNvbnNpZGVyaW5nIHVwZGF0ZXMgYWNyb3NzIGRpZmZlcmVudCBwcmlvcml0eSBsZXZlbHMsIGJ1dCBpc24ndFxuICAvLyBzdWZmaWNpZW50IGZvciB1cGRhdGVzIHdpdGhpbiB0aGUgc2FtZSBwcmlvcml0eSwgc2luY2Ugd2Ugd2FudCB0byB0cmVhdFxuICAvLyB0aG9zZSB1cGRhdGVzIGFzIHBhcmFsbGVsLlxuICAvLyBVbnN1c3BlbmQgYW55IHVwZGF0ZSBhdCBlcXVhbCBvciBsb3dlciBwcmlvcml0eS5cblxuICB2YXIgaGlnaGVyUHJpb3JpdHlMYW5lcyA9IHVwZGF0ZUxhbmUgLSAxOyAvLyBUdXJucyAwYjEwMDAgaW50byAwYjAxMTFcblxuICByb290LnN1c3BlbmRlZExhbmVzICY9IGhpZ2hlclByaW9yaXR5TGFuZXM7XG4gIHJvb3QucGluZ2VkTGFuZXMgJj0gaGlnaGVyUHJpb3JpdHlMYW5lcztcbiAgdmFyIGV2ZW50VGltZXMgPSByb290LmV2ZW50VGltZXM7XG4gIHZhciBpbmRleCA9IGxhbmVUb0luZGV4KHVwZGF0ZUxhbmUpOyAvLyBXZSBjYW4gYWx3YXlzIG92ZXJ3cml0ZSBhbiBleGlzdGluZyB0aW1lc3RhbXAgYmVjYXVzZSB3ZSBwcmVmZXIgdGhlIG1vc3RcbiAgLy8gcmVjZW50IGV2ZW50LCBhbmQgd2UgYXNzdW1lIHRpbWUgaXMgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nLlxuXG4gIGV2ZW50VGltZXNbaW5kZXhdID0gZXZlbnRUaW1lO1xufVxuZnVuY3Rpb24gbWFya1Jvb3RTdXNwZW5kZWQocm9vdCwgc3VzcGVuZGVkTGFuZXMpIHtcbiAgcm9vdC5zdXNwZW5kZWRMYW5lcyB8PSBzdXNwZW5kZWRMYW5lcztcbiAgcm9vdC5waW5nZWRMYW5lcyAmPSB+c3VzcGVuZGVkTGFuZXM7IC8vIFRoZSBzdXNwZW5kZWQgbGFuZXMgYXJlIG5vIGxvbmdlciBDUFUtYm91bmQuIENsZWFyIHRoZWlyIGV4cGlyYXRpb24gdGltZXMuXG5cbiAgdmFyIGV4cGlyYXRpb25UaW1lcyA9IHJvb3QuZXhwaXJhdGlvblRpbWVzO1xuICB2YXIgbGFuZXMgPSBzdXNwZW5kZWRMYW5lcztcblxuICB3aGlsZSAobGFuZXMgPiAwKSB7XG4gICAgdmFyIGluZGV4ID0gcGlja0FyYml0cmFyeUxhbmVJbmRleChsYW5lcyk7XG4gICAgdmFyIGxhbmUgPSAxIDw8IGluZGV4O1xuICAgIGV4cGlyYXRpb25UaW1lc1tpbmRleF0gPSBOb1RpbWVzdGFtcDtcbiAgICBsYW5lcyAmPSB+bGFuZTtcbiAgfVxufVxuZnVuY3Rpb24gbWFya1Jvb3RQaW5nZWQocm9vdCwgcGluZ2VkTGFuZXMsIGV2ZW50VGltZSkge1xuICByb290LnBpbmdlZExhbmVzIHw9IHJvb3Quc3VzcGVuZGVkTGFuZXMgJiBwaW5nZWRMYW5lcztcbn1cbmZ1bmN0aW9uIG1hcmtEaXNjcmV0ZVVwZGF0ZXNFeHBpcmVkKHJvb3QpIHtcbiAgcm9vdC5leHBpcmVkTGFuZXMgfD0gSW5wdXREaXNjcmV0ZUxhbmVzICYgcm9vdC5wZW5kaW5nTGFuZXM7XG59XG5mdW5jdGlvbiBoYXNEaXNjcmV0ZUxhbmVzKGxhbmVzKSB7XG4gIHJldHVybiAobGFuZXMgJiBJbnB1dERpc2NyZXRlTGFuZXMpICE9PSBOb0xhbmVzO1xufVxuZnVuY3Rpb24gbWFya1Jvb3RNdXRhYmxlUmVhZChyb290LCB1cGRhdGVMYW5lKSB7XG4gIHJvb3QubXV0YWJsZVJlYWRMYW5lcyB8PSB1cGRhdGVMYW5lICYgcm9vdC5wZW5kaW5nTGFuZXM7XG59XG5mdW5jdGlvbiBtYXJrUm9vdEZpbmlzaGVkKHJvb3QsIHJlbWFpbmluZ0xhbmVzKSB7XG4gIHZhciBub0xvbmdlclBlbmRpbmdMYW5lcyA9IHJvb3QucGVuZGluZ0xhbmVzICYgfnJlbWFpbmluZ0xhbmVzO1xuICByb290LnBlbmRpbmdMYW5lcyA9IHJlbWFpbmluZ0xhbmVzOyAvLyBMZXQncyB0cnkgZXZlcnl0aGluZyBhZ2FpblxuXG4gIHJvb3Quc3VzcGVuZGVkTGFuZXMgPSAwO1xuICByb290LnBpbmdlZExhbmVzID0gMDtcbiAgcm9vdC5leHBpcmVkTGFuZXMgJj0gcmVtYWluaW5nTGFuZXM7XG4gIHJvb3QubXV0YWJsZVJlYWRMYW5lcyAmPSByZW1haW5pbmdMYW5lcztcbiAgcm9vdC5lbnRhbmdsZWRMYW5lcyAmPSByZW1haW5pbmdMYW5lcztcbiAgdmFyIGVudGFuZ2xlbWVudHMgPSByb290LmVudGFuZ2xlbWVudHM7XG4gIHZhciBldmVudFRpbWVzID0gcm9vdC5ldmVudFRpbWVzO1xuICB2YXIgZXhwaXJhdGlvblRpbWVzID0gcm9vdC5leHBpcmF0aW9uVGltZXM7IC8vIENsZWFyIHRoZSBsYW5lcyB0aGF0IG5vIGxvbmdlciBoYXZlIHBlbmRpbmcgd29ya1xuXG4gIHZhciBsYW5lcyA9IG5vTG9uZ2VyUGVuZGluZ0xhbmVzO1xuXG4gIHdoaWxlIChsYW5lcyA+IDApIHtcbiAgICB2YXIgaW5kZXggPSBwaWNrQXJiaXRyYXJ5TGFuZUluZGV4KGxhbmVzKTtcbiAgICB2YXIgbGFuZSA9IDEgPDwgaW5kZXg7XG4gICAgZW50YW5nbGVtZW50c1tpbmRleF0gPSBOb0xhbmVzO1xuICAgIGV2ZW50VGltZXNbaW5kZXhdID0gTm9UaW1lc3RhbXA7XG4gICAgZXhwaXJhdGlvblRpbWVzW2luZGV4XSA9IE5vVGltZXN0YW1wO1xuICAgIGxhbmVzICY9IH5sYW5lO1xuICB9XG59XG5mdW5jdGlvbiBtYXJrUm9vdEVudGFuZ2xlZChyb290LCBlbnRhbmdsZWRMYW5lcykge1xuICByb290LmVudGFuZ2xlZExhbmVzIHw9IGVudGFuZ2xlZExhbmVzO1xuICB2YXIgZW50YW5nbGVtZW50cyA9IHJvb3QuZW50YW5nbGVtZW50cztcbiAgdmFyIGxhbmVzID0gZW50YW5nbGVkTGFuZXM7XG5cbiAgd2hpbGUgKGxhbmVzID4gMCkge1xuICAgIHZhciBpbmRleCA9IHBpY2tBcmJpdHJhcnlMYW5lSW5kZXgobGFuZXMpO1xuICAgIHZhciBsYW5lID0gMSA8PCBpbmRleDtcbiAgICBlbnRhbmdsZW1lbnRzW2luZGV4XSB8PSBlbnRhbmdsZWRMYW5lcztcbiAgICBsYW5lcyAmPSB+bGFuZTtcbiAgfVxufVxudmFyIGNsejMyID0gTWF0aC5jbHozMiA/IE1hdGguY2x6MzIgOiBjbHozMkZhbGxiYWNrOyAvLyBDb3VudCBsZWFkaW5nIHplcm9zLiBPbmx5IHVzZWQgb24gbGFuZXMsIHNvIGFzc3VtZSBpbnB1dCBpcyBhbiBpbnRlZ2VyLlxuLy8gQmFzZWQgb246XG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9NYXRoL2NsejMyXG5cbnZhciBsb2cgPSBNYXRoLmxvZztcbnZhciBMTjIgPSBNYXRoLkxOMjtcblxuZnVuY3Rpb24gY2x6MzJGYWxsYmFjayhsYW5lcykge1xuICBpZiAobGFuZXMgPT09IDApIHtcbiAgICByZXR1cm4gMzI7XG4gIH1cblxuICByZXR1cm4gMzEgLSAobG9nKGxhbmVzKSAvIExOMiB8IDApIHwgMDtcbn1cblxuLy8gSW50ZW50aW9uYWxseSBub3QgbmFtZWQgaW1wb3J0cyBiZWNhdXNlIFJvbGx1cCB3b3VsZCB1c2UgZHluYW1pYyBkaXNwYXRjaCBmb3JcbnZhciBVc2VyQmxvY2tpbmdQcmlvcml0eSQxID0gU2NoZWR1bGVyLnVuc3RhYmxlX1VzZXJCbG9ja2luZ1ByaW9yaXR5LFxuICAgIHJ1bldpdGhQcmlvcml0eSA9IFNjaGVkdWxlci51bnN0YWJsZV9ydW5XaXRoUHJpb3JpdHk7IC8vIFRPRE86IGNhbiB3ZSBzdG9wIGV4cG9ydGluZyB0aGVzZT9cblxudmFyIF9lbmFibGVkID0gdHJ1ZTsgLy8gVGhpcyBpcyBleHBvcnRlZCBpbiBGQiBidWlsZHMgZm9yIHVzZSBieSBsZWdhY3kgRkIgbGF5ZXIgaW5mcmEuXG4vLyBXZSdkIGxpa2UgdG8gcmVtb3ZlIHRoaXMgYnV0IGl0J3Mgbm90IGNsZWFyIGlmIHRoaXMgaXMgc2FmZS5cblxuZnVuY3Rpb24gc2V0RW5hYmxlZChlbmFibGVkKSB7XG4gIF9lbmFibGVkID0gISFlbmFibGVkO1xufVxuZnVuY3Rpb24gaXNFbmFibGVkKCkge1xuICByZXR1cm4gX2VuYWJsZWQ7XG59XG5mdW5jdGlvbiBjcmVhdGVFdmVudExpc3RlbmVyV3JhcHBlcldpdGhQcmlvcml0eSh0YXJnZXRDb250YWluZXIsIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncykge1xuICB2YXIgZXZlbnRQcmlvcml0eSA9IGdldEV2ZW50UHJpb3JpdHlGb3JQbHVnaW5TeXN0ZW0oZG9tRXZlbnROYW1lKTtcbiAgdmFyIGxpc3RlbmVyV3JhcHBlcjtcblxuICBzd2l0Y2ggKGV2ZW50UHJpb3JpdHkpIHtcbiAgICBjYXNlIERpc2NyZXRlRXZlbnQ6XG4gICAgICBsaXN0ZW5lcldyYXBwZXIgPSBkaXNwYXRjaERpc2NyZXRlRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgVXNlckJsb2NraW5nRXZlbnQ6XG4gICAgICBsaXN0ZW5lcldyYXBwZXIgPSBkaXNwYXRjaFVzZXJCbG9ja2luZ1VwZGF0ZTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBDb250aW51b3VzRXZlbnQ6XG4gICAgZGVmYXVsdDpcbiAgICAgIGxpc3RlbmVyV3JhcHBlciA9IGRpc3BhdGNoRXZlbnQ7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiBsaXN0ZW5lcldyYXBwZXIuYmluZChudWxsLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lcik7XG59XG5cbmZ1bmN0aW9uIGRpc3BhdGNoRGlzY3JldGVFdmVudChkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIGNvbnRhaW5lciwgbmF0aXZlRXZlbnQpIHtcbiAge1xuICAgIGZsdXNoRGlzY3JldGVVcGRhdGVzSWZOZWVkZWQobmF0aXZlRXZlbnQudGltZVN0YW1wKTtcbiAgfVxuXG4gIGRpc2NyZXRlVXBkYXRlcyhkaXNwYXRjaEV2ZW50LCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIGNvbnRhaW5lciwgbmF0aXZlRXZlbnQpO1xufVxuXG5mdW5jdGlvbiBkaXNwYXRjaFVzZXJCbG9ja2luZ1VwZGF0ZShkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIGNvbnRhaW5lciwgbmF0aXZlRXZlbnQpIHtcbiAge1xuICAgIHJ1bldpdGhQcmlvcml0eShVc2VyQmxvY2tpbmdQcmlvcml0eSQxLCBkaXNwYXRjaEV2ZW50LmJpbmQobnVsbCwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCBjb250YWluZXIsIG5hdGl2ZUV2ZW50KSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGlzcGF0Y2hFdmVudChkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmF0aXZlRXZlbnQpIHtcbiAgaWYgKCFfZW5hYmxlZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBhbGxvd1JlcGxheSA9IHRydWU7XG5cbiAge1xuICAgIC8vIFRPRE86IHJlcGxheWluZyBjYXB0dXJlIHBoYXNlIGV2ZW50cyBpcyBjdXJyZW50bHkgYnJva2VuXG4gICAgLy8gYmVjYXVzZSB3ZSB1c2VkIHRvIGRvIGl0IGR1cmluZyB0b3AtbGV2ZWwgbmF0aXZlIGJ1YmJsZSBoYW5kbGVyc1xuICAgIC8vIGJ1dCBub3cgd2UgdXNlIGRpZmZlcmVudCBidWJibGUgYW5kIGNhcHR1cmUgaGFuZGxlcnMuXG4gICAgLy8gSW4gZWFnZXIgbW9kZSwgd2UgYXR0YWNoIGNhcHR1cmUgbGlzdGVuZXJzIGVhcmx5LCBzbyB3ZSBuZWVkXG4gICAgLy8gdG8gZmlsdGVyIHRoZW0gb3V0IHVudGlsIHdlIGZpeCB0aGUgbG9naWMgdG8gaGFuZGxlIHRoZW0gY29ycmVjdGx5LlxuICAgIC8vIFRoaXMgY291bGQndmUgYmVlbiBvdXRzaWRlIHRoZSBmbGFnIGJ1dCBJIHB1dCBpdCBpbnNpZGUgdG8gcmVkdWNlIHJpc2suXG4gICAgYWxsb3dSZXBsYXkgPSAoZXZlbnRTeXN0ZW1GbGFncyAmIElTX0NBUFRVUkVfUEhBU0UpID09PSAwO1xuICB9XG5cbiAgaWYgKGFsbG93UmVwbGF5ICYmIGhhc1F1ZXVlZERpc2NyZXRlRXZlbnRzKCkgJiYgaXNSZXBsYXlhYmxlRGlzY3JldGVFdmVudChkb21FdmVudE5hbWUpKSB7XG4gICAgLy8gSWYgd2UgYWxyZWFkeSBoYXZlIGEgcXVldWUgb2YgZGlzY3JldGUgZXZlbnRzLCBhbmQgdGhpcyBpcyBhbm90aGVyIGRpc2NyZXRlXG4gICAgLy8gZXZlbnQsIHRoZW4gd2UgY2FuJ3QgZGlzcGF0Y2ggaXQgcmVnYXJkbGVzcyBvZiBpdHMgdGFyZ2V0LCBzaW5jZSB0aGV5XG4gICAgLy8gbmVlZCB0byBkaXNwYXRjaCBpbiBvcmRlci5cbiAgICBxdWV1ZURpc2NyZXRlRXZlbnQobnVsbCwgLy8gRmxhZ3MgdGhhdCB3ZSdyZSBub3QgYWN0dWFsbHkgYmxvY2tlZCBvbiBhbnl0aGluZyBhcyBmYXIgYXMgd2Uga25vdy5cbiAgICBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmF0aXZlRXZlbnQpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBibG9ja2VkT24gPSBhdHRlbXB0VG9EaXNwYXRjaEV2ZW50KGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBuYXRpdmVFdmVudCk7XG5cbiAgaWYgKGJsb2NrZWRPbiA9PT0gbnVsbCkge1xuICAgIC8vIFdlIHN1Y2Nlc3NmdWxseSBkaXNwYXRjaGVkIHRoaXMgZXZlbnQuXG4gICAgaWYgKGFsbG93UmVwbGF5KSB7XG4gICAgICBjbGVhcklmQ29udGludW91c0V2ZW50KGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpO1xuICAgIH1cblxuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChhbGxvd1JlcGxheSkge1xuICAgIGlmIChpc1JlcGxheWFibGVEaXNjcmV0ZUV2ZW50KGRvbUV2ZW50TmFtZSkpIHtcbiAgICAgIC8vIFRoaXMgdGhpcyB0byBiZSByZXBsYXllZCBsYXRlciBvbmNlIHRoZSB0YXJnZXQgaXMgYXZhaWxhYmxlLlxuICAgICAgcXVldWVEaXNjcmV0ZUV2ZW50KGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIG5hdGl2ZUV2ZW50KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAocXVldWVJZkNvbnRpbnVvdXNFdmVudChibG9ja2VkT24sIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBuYXRpdmVFdmVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIFdlIG5lZWQgdG8gY2xlYXIgb25seSBpZiB3ZSBkaWRuJ3QgcXVldWUgYmVjYXVzZVxuICAgIC8vIHF1ZXVlaW5nIGlzIGFjY3VtbXVsYXRpdmUuXG5cblxuICAgIGNsZWFySWZDb250aW51b3VzRXZlbnQoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCk7XG4gIH0gLy8gVGhpcyBpcyBub3QgcmVwbGF5YWJsZSBzbyB3ZSdsbCBpbnZva2UgaXQgYnV0IHdpdGhvdXQgYSB0YXJnZXQsXG4gIC8vIGluIGNhc2UgdGhlIGV2ZW50IHN5c3RlbSBuZWVkcyB0byB0cmFjZSBpdC5cblxuXG4gIGRpc3BhdGNoRXZlbnRGb3JQbHVnaW5FdmVudFN5c3RlbShkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIG5hdGl2ZUV2ZW50LCBudWxsLCB0YXJnZXRDb250YWluZXIpO1xufSAvLyBBdHRlbXB0IGRpc3BhdGNoaW5nIGFuIGV2ZW50LiBSZXR1cm5zIGEgU3VzcGVuc2VJbnN0YW5jZSBvciBDb250YWluZXIgaWYgaXQncyBibG9ja2VkLlxuXG5mdW5jdGlvbiBhdHRlbXB0VG9EaXNwYXRjaEV2ZW50KGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBuYXRpdmVFdmVudCkge1xuICAvLyBUT0RPOiBXYXJuIGlmIF9lbmFibGVkIGlzIGZhbHNlLlxuICB2YXIgbmF0aXZlRXZlbnRUYXJnZXQgPSBnZXRFdmVudFRhcmdldChuYXRpdmVFdmVudCk7XG4gIHZhciB0YXJnZXRJbnN0ID0gZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUobmF0aXZlRXZlbnRUYXJnZXQpO1xuXG4gIGlmICh0YXJnZXRJbnN0ICE9PSBudWxsKSB7XG4gICAgdmFyIG5lYXJlc3RNb3VudGVkID0gZ2V0TmVhcmVzdE1vdW50ZWRGaWJlcih0YXJnZXRJbnN0KTtcblxuICAgIGlmIChuZWFyZXN0TW91bnRlZCA9PT0gbnVsbCkge1xuICAgICAgLy8gVGhpcyB0cmVlIGhhcyBiZWVuIHVubW91bnRlZCBhbHJlYWR5LiBEaXNwYXRjaCB3aXRob3V0IGEgdGFyZ2V0LlxuICAgICAgdGFyZ2V0SW5zdCA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciB0YWcgPSBuZWFyZXN0TW91bnRlZC50YWc7XG5cbiAgICAgIGlmICh0YWcgPT09IFN1c3BlbnNlQ29tcG9uZW50KSB7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IGdldFN1c3BlbnNlSW5zdGFuY2VGcm9tRmliZXIobmVhcmVzdE1vdW50ZWQpO1xuXG4gICAgICAgIGlmIChpbnN0YW5jZSAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIFF1ZXVlIHRoZSBldmVudCB0byBiZSByZXBsYXllZCBsYXRlci4gQWJvcnQgZGlzcGF0Y2hpbmcgc2luY2Ugd2VcbiAgICAgICAgICAvLyBkb24ndCB3YW50IHRoaXMgZXZlbnQgZGlzcGF0Y2hlZCB0d2ljZSB0aHJvdWdoIHRoZSBldmVudCBzeXN0ZW0uXG4gICAgICAgICAgLy8gVE9ETzogSWYgdGhpcyBpcyB0aGUgZmlyc3QgZGlzY3JldGUgZXZlbnQgaW4gdGhlIHF1ZXVlLiBTY2hlZHVsZSBhbiBpbmNyZWFzZWRcbiAgICAgICAgICAvLyBwcmlvcml0eSBmb3IgdGhpcyBib3VuZGFyeS5cbiAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgICAgIH0gLy8gVGhpcyBzaG91bGRuJ3QgaGFwcGVuLCBzb21ldGhpbmcgd2VudCB3cm9uZyBidXQgdG8gYXZvaWQgYmxvY2tpbmdcbiAgICAgICAgLy8gdGhlIHdob2xlIHN5c3RlbSwgZGlzcGF0Y2ggdGhlIGV2ZW50IHdpdGhvdXQgYSB0YXJnZXQuXG4gICAgICAgIC8vIFRPRE86IFdhcm4uXG5cblxuICAgICAgICB0YXJnZXRJbnN0ID0gbnVsbDtcbiAgICAgIH0gZWxzZSBpZiAodGFnID09PSBIb3N0Um9vdCkge1xuICAgICAgICB2YXIgcm9vdCA9IG5lYXJlc3RNb3VudGVkLnN0YXRlTm9kZTtcblxuICAgICAgICBpZiAocm9vdC5oeWRyYXRlKSB7XG4gICAgICAgICAgLy8gSWYgdGhpcyBoYXBwZW5zIGR1cmluZyBhIHJlcGxheSBzb21ldGhpbmcgd2VudCB3cm9uZyBhbmQgaXQgbWlnaHQgYmxvY2tcbiAgICAgICAgICAvLyB0aGUgd2hvbGUgc3lzdGVtLlxuICAgICAgICAgIHJldHVybiBnZXRDb250YWluZXJGcm9tRmliZXIobmVhcmVzdE1vdW50ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGFyZ2V0SW5zdCA9IG51bGw7XG4gICAgICB9IGVsc2UgaWYgKG5lYXJlc3RNb3VudGVkICE9PSB0YXJnZXRJbnN0KSB7XG4gICAgICAgIC8vIElmIHdlIGdldCBhbiBldmVudCAoZXg6IGltZyBvbmxvYWQpIGJlZm9yZSBjb21taXR0aW5nIHRoYXRcbiAgICAgICAgLy8gY29tcG9uZW50J3MgbW91bnQsIGlnbm9yZSBpdCBmb3Igbm93ICh0aGF0IGlzLCB0cmVhdCBpdCBhcyBpZiBpdCB3YXMgYW5cbiAgICAgICAgLy8gZXZlbnQgb24gYSBub24tUmVhY3QgdHJlZSkuIFdlIG1pZ2h0IGFsc28gY29uc2lkZXIgcXVldWVpbmcgZXZlbnRzIGFuZFxuICAgICAgICAvLyBkaXNwYXRjaGluZyB0aGVtIGFmdGVyIHRoZSBtb3VudC5cbiAgICAgICAgdGFyZ2V0SW5zdCA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZGlzcGF0Y2hFdmVudEZvclBsdWdpbkV2ZW50U3lzdGVtKGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgbmF0aXZlRXZlbnQsIHRhcmdldEluc3QsIHRhcmdldENvbnRhaW5lcik7IC8vIFdlJ3JlIG5vdCBibG9ja2VkIG9uIGFueXRoaW5nLlxuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBhZGRFdmVudEJ1YmJsZUxpc3RlbmVyKHRhcmdldCwgZXZlbnRUeXBlLCBsaXN0ZW5lcikge1xuICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGxpc3RlbmVyLCBmYWxzZSk7XG4gIHJldHVybiBsaXN0ZW5lcjtcbn1cbmZ1bmN0aW9uIGFkZEV2ZW50Q2FwdHVyZUxpc3RlbmVyKHRhcmdldCwgZXZlbnRUeXBlLCBsaXN0ZW5lcikge1xuICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGxpc3RlbmVyLCB0cnVlKTtcbiAgcmV0dXJuIGxpc3RlbmVyO1xufVxuZnVuY3Rpb24gYWRkRXZlbnRDYXB0dXJlTGlzdGVuZXJXaXRoUGFzc2l2ZUZsYWcodGFyZ2V0LCBldmVudFR5cGUsIGxpc3RlbmVyLCBwYXNzaXZlKSB7XG4gIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgbGlzdGVuZXIsIHtcbiAgICBjYXB0dXJlOiB0cnVlLFxuICAgIHBhc3NpdmU6IHBhc3NpdmVcbiAgfSk7XG4gIHJldHVybiBsaXN0ZW5lcjtcbn1cbmZ1bmN0aW9uIGFkZEV2ZW50QnViYmxlTGlzdGVuZXJXaXRoUGFzc2l2ZUZsYWcodGFyZ2V0LCBldmVudFR5cGUsIGxpc3RlbmVyLCBwYXNzaXZlKSB7XG4gIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgbGlzdGVuZXIsIHtcbiAgICBwYXNzaXZlOiBwYXNzaXZlXG4gIH0pO1xuICByZXR1cm4gbGlzdGVuZXI7XG59XG5cbi8qKlxuICogVGhlc2UgdmFyaWFibGVzIHN0b3JlIGluZm9ybWF0aW9uIGFib3V0IHRleHQgY29udGVudCBvZiBhIHRhcmdldCBub2RlLFxuICogYWxsb3dpbmcgY29tcGFyaXNvbiBvZiBjb250ZW50IGJlZm9yZSBhbmQgYWZ0ZXIgYSBnaXZlbiBldmVudC5cbiAqXG4gKiBJZGVudGlmeSB0aGUgbm9kZSB3aGVyZSBzZWxlY3Rpb24gY3VycmVudGx5IGJlZ2lucywgdGhlbiBvYnNlcnZlXG4gKiBib3RoIGl0cyB0ZXh0IGNvbnRlbnQgYW5kIGl0cyBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBET00uIFNpbmNlIHRoZVxuICogYnJvd3NlciBtYXkgbmF0aXZlbHkgcmVwbGFjZSB0aGUgdGFyZ2V0IG5vZGUgZHVyaW5nIGNvbXBvc2l0aW9uLCB3ZSBjYW5cbiAqIHVzZSBpdHMgcG9zaXRpb24gdG8gZmluZCBpdHMgcmVwbGFjZW1lbnQuXG4gKlxuICpcbiAqL1xudmFyIHJvb3QgPSBudWxsO1xudmFyIHN0YXJ0VGV4dCA9IG51bGw7XG52YXIgZmFsbGJhY2tUZXh0ID0gbnVsbDtcbmZ1bmN0aW9uIGluaXRpYWxpemUobmF0aXZlRXZlbnRUYXJnZXQpIHtcbiAgcm9vdCA9IG5hdGl2ZUV2ZW50VGFyZ2V0O1xuICBzdGFydFRleHQgPSBnZXRUZXh0KCk7XG4gIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gcmVzZXQoKSB7XG4gIHJvb3QgPSBudWxsO1xuICBzdGFydFRleHQgPSBudWxsO1xuICBmYWxsYmFja1RleHQgPSBudWxsO1xufVxuZnVuY3Rpb24gZ2V0RGF0YSgpIHtcbiAgaWYgKGZhbGxiYWNrVGV4dCkge1xuICAgIHJldHVybiBmYWxsYmFja1RleHQ7XG4gIH1cblxuICB2YXIgc3RhcnQ7XG4gIHZhciBzdGFydFZhbHVlID0gc3RhcnRUZXh0O1xuICB2YXIgc3RhcnRMZW5ndGggPSBzdGFydFZhbHVlLmxlbmd0aDtcbiAgdmFyIGVuZDtcbiAgdmFyIGVuZFZhbHVlID0gZ2V0VGV4dCgpO1xuICB2YXIgZW5kTGVuZ3RoID0gZW5kVmFsdWUubGVuZ3RoO1xuXG4gIGZvciAoc3RhcnQgPSAwOyBzdGFydCA8IHN0YXJ0TGVuZ3RoOyBzdGFydCsrKSB7XG4gICAgaWYgKHN0YXJ0VmFsdWVbc3RhcnRdICE9PSBlbmRWYWx1ZVtzdGFydF0pIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHZhciBtaW5FbmQgPSBzdGFydExlbmd0aCAtIHN0YXJ0O1xuXG4gIGZvciAoZW5kID0gMTsgZW5kIDw9IG1pbkVuZDsgZW5kKyspIHtcbiAgICBpZiAoc3RhcnRWYWx1ZVtzdGFydExlbmd0aCAtIGVuZF0gIT09IGVuZFZhbHVlW2VuZExlbmd0aCAtIGVuZF0pIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHZhciBzbGljZVRhaWwgPSBlbmQgPiAxID8gMSAtIGVuZCA6IHVuZGVmaW5lZDtcbiAgZmFsbGJhY2tUZXh0ID0gZW5kVmFsdWUuc2xpY2Uoc3RhcnQsIHNsaWNlVGFpbCk7XG4gIHJldHVybiBmYWxsYmFja1RleHQ7XG59XG5mdW5jdGlvbiBnZXRUZXh0KCkge1xuICBpZiAoJ3ZhbHVlJyBpbiByb290KSB7XG4gICAgcmV0dXJuIHJvb3QudmFsdWU7XG4gIH1cblxuICByZXR1cm4gcm9vdC50ZXh0Q29udGVudDtcbn1cblxuLyoqXG4gKiBgY2hhckNvZGVgIHJlcHJlc2VudHMgdGhlIGFjdHVhbCBcImNoYXJhY3RlciBjb2RlXCIgYW5kIGlzIHNhZmUgdG8gdXNlIHdpdGhcbiAqIGBTdHJpbmcuZnJvbUNoYXJDb2RlYC4gQXMgc3VjaCwgb25seSBrZXlzIHRoYXQgY29ycmVzcG9uZCB0byBwcmludGFibGVcbiAqIGNoYXJhY3RlcnMgcHJvZHVjZSBhIHZhbGlkIGBjaGFyQ29kZWAsIHRoZSBvbmx5IGV4Y2VwdGlvbiB0byB0aGlzIGlzIEVudGVyLlxuICogVGhlIFRhYi1rZXkgaXMgY29uc2lkZXJlZCBub24tcHJpbnRhYmxlIGFuZCBkb2VzIG5vdCBoYXZlIGEgYGNoYXJDb2RlYCxcbiAqIHByZXN1bWFibHkgYmVjYXVzZSBpdCBkb2VzIG5vdCBwcm9kdWNlIGEgdGFiLWNoYXJhY3RlciBpbiBicm93c2Vycy5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQuXG4gKiBAcmV0dXJuIHtudW1iZXJ9IE5vcm1hbGl6ZWQgYGNoYXJDb2RlYCBwcm9wZXJ0eS5cbiAqL1xuZnVuY3Rpb24gZ2V0RXZlbnRDaGFyQ29kZShuYXRpdmVFdmVudCkge1xuICB2YXIgY2hhckNvZGU7XG4gIHZhciBrZXlDb2RlID0gbmF0aXZlRXZlbnQua2V5Q29kZTtcblxuICBpZiAoJ2NoYXJDb2RlJyBpbiBuYXRpdmVFdmVudCkge1xuICAgIGNoYXJDb2RlID0gbmF0aXZlRXZlbnQuY2hhckNvZGU7IC8vIEZGIGRvZXMgbm90IHNldCBgY2hhckNvZGVgIGZvciB0aGUgRW50ZXIta2V5LCBjaGVjayBhZ2FpbnN0IGBrZXlDb2RlYC5cblxuICAgIGlmIChjaGFyQ29kZSA9PT0gMCAmJiBrZXlDb2RlID09PSAxMykge1xuICAgICAgY2hhckNvZGUgPSAxMztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gSUU4IGRvZXMgbm90IGltcGxlbWVudCBgY2hhckNvZGVgLCBidXQgYGtleUNvZGVgIGhhcyB0aGUgY29ycmVjdCB2YWx1ZS5cbiAgICBjaGFyQ29kZSA9IGtleUNvZGU7XG4gIH0gLy8gSUUgYW5kIEVkZ2UgKG9uIFdpbmRvd3MpIGFuZCBDaHJvbWUgLyBTYWZhcmkgKG9uIFdpbmRvd3MgYW5kIExpbnV4KVxuICAvLyByZXBvcnQgRW50ZXIgYXMgY2hhckNvZGUgMTAgd2hlbiBjdHJsIGlzIHByZXNzZWQuXG5cblxuICBpZiAoY2hhckNvZGUgPT09IDEwKSB7XG4gICAgY2hhckNvZGUgPSAxMztcbiAgfSAvLyBTb21lIG5vbi1wcmludGFibGUga2V5cyBhcmUgcmVwb3J0ZWQgaW4gYGNoYXJDb2RlYC9ga2V5Q29kZWAsIGRpc2NhcmQgdGhlbS5cbiAgLy8gTXVzdCBub3QgZGlzY2FyZCB0aGUgKG5vbi0pcHJpbnRhYmxlIEVudGVyLWtleS5cblxuXG4gIGlmIChjaGFyQ29kZSA+PSAzMiB8fCBjaGFyQ29kZSA9PT0gMTMpIHtcbiAgICByZXR1cm4gY2hhckNvZGU7XG4gIH1cblxuICByZXR1cm4gMDtcbn1cblxuZnVuY3Rpb24gZnVuY3Rpb25UaGF0UmV0dXJuc1RydWUoKSB7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBmdW5jdGlvblRoYXRSZXR1cm5zRmFsc2UoKSB7XG4gIHJldHVybiBmYWxzZTtcbn0gLy8gVGhpcyBpcyBpbnRlbnRpb25hbGx5IGEgZmFjdG9yeSBzbyB0aGF0IHdlIGhhdmUgZGlmZmVyZW50IHJldHVybmVkIGNvbnN0cnVjdG9ycy5cbi8vIElmIHdlIGhhZCBhIHNpbmdsZSBjb25zdHJ1Y3RvciwgaXQgd291bGQgYmUgbWVnYW1vcnBoaWMgYW5kIGVuZ2luZXMgd291bGQgZGVvcHQuXG5cblxuZnVuY3Rpb24gY3JlYXRlU3ludGhldGljRXZlbnQoSW50ZXJmYWNlKSB7XG4gIC8qKlxuICAgKiBTeW50aGV0aWMgZXZlbnRzIGFyZSBkaXNwYXRjaGVkIGJ5IGV2ZW50IHBsdWdpbnMsIHR5cGljYWxseSBpbiByZXNwb25zZSB0byBhXG4gICAqIHRvcC1sZXZlbCBldmVudCBkZWxlZ2F0aW9uIGhhbmRsZXIuXG4gICAqXG4gICAqIFRoZXNlIHN5c3RlbXMgc2hvdWxkIGdlbmVyYWxseSB1c2UgcG9vbGluZyB0byByZWR1Y2UgdGhlIGZyZXF1ZW5jeSBvZiBnYXJiYWdlXG4gICAqIGNvbGxlY3Rpb24uIFRoZSBzeXN0ZW0gc2hvdWxkIGNoZWNrIGBpc1BlcnNpc3RlbnRgIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZVxuICAgKiBldmVudCBzaG91bGQgYmUgcmVsZWFzZWQgaW50byB0aGUgcG9vbCBhZnRlciBiZWluZyBkaXNwYXRjaGVkLiBVc2VycyB0aGF0XG4gICAqIG5lZWQgYSBwZXJzaXN0ZWQgZXZlbnQgc2hvdWxkIGludm9rZSBgcGVyc2lzdGAuXG4gICAqXG4gICAqIFN5bnRoZXRpYyBldmVudHMgKGFuZCBzdWJjbGFzc2VzKSBpbXBsZW1lbnQgdGhlIERPTSBMZXZlbCAzIEV2ZW50cyBBUEkgYnlcbiAgICogbm9ybWFsaXppbmcgYnJvd3NlciBxdWlya3MuIFN1YmNsYXNzZXMgZG8gbm90IG5lY2Vzc2FyaWx5IGhhdmUgdG8gaW1wbGVtZW50IGFcbiAgICogRE9NIGludGVyZmFjZTsgY3VzdG9tIGFwcGxpY2F0aW9uLXNwZWNpZmljIGV2ZW50cyBjYW4gYWxzbyBzdWJjbGFzcyB0aGlzLlxuICAgKi9cbiAgZnVuY3Rpb24gU3ludGhldGljQmFzZUV2ZW50KHJlYWN0TmFtZSwgcmVhY3RFdmVudFR5cGUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCkge1xuICAgIHRoaXMuX3JlYWN0TmFtZSA9IHJlYWN0TmFtZTtcbiAgICB0aGlzLl90YXJnZXRJbnN0ID0gdGFyZ2V0SW5zdDtcbiAgICB0aGlzLnR5cGUgPSByZWFjdEV2ZW50VHlwZTtcbiAgICB0aGlzLm5hdGl2ZUV2ZW50ID0gbmF0aXZlRXZlbnQ7XG4gICAgdGhpcy50YXJnZXQgPSBuYXRpdmVFdmVudFRhcmdldDtcbiAgICB0aGlzLmN1cnJlbnRUYXJnZXQgPSBudWxsO1xuXG4gICAgZm9yICh2YXIgX3Byb3BOYW1lIGluIEludGVyZmFjZSkge1xuICAgICAgaWYgKCFJbnRlcmZhY2UuaGFzT3duUHJvcGVydHkoX3Byb3BOYW1lKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIG5vcm1hbGl6ZSA9IEludGVyZmFjZVtfcHJvcE5hbWVdO1xuXG4gICAgICBpZiAobm9ybWFsaXplKSB7XG4gICAgICAgIHRoaXNbX3Byb3BOYW1lXSA9IG5vcm1hbGl6ZShuYXRpdmVFdmVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzW19wcm9wTmFtZV0gPSBuYXRpdmVFdmVudFtfcHJvcE5hbWVdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBkZWZhdWx0UHJldmVudGVkID0gbmF0aXZlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCAhPSBudWxsID8gbmF0aXZlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCA6IG5hdGl2ZUV2ZW50LnJldHVyblZhbHVlID09PSBmYWxzZTtcblxuICAgIGlmIChkZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICB0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IGZ1bmN0aW9uVGhhdFJldHVybnNUcnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IGZ1bmN0aW9uVGhhdFJldHVybnNGYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkID0gZnVuY3Rpb25UaGF0UmV0dXJuc0ZhbHNlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgX2Fzc2lnbihTeW50aGV0aWNCYXNlRXZlbnQucHJvdG90eXBlLCB7XG4gICAgcHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoaXMuZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7XG4gICAgICB2YXIgZXZlbnQgPSB0aGlzLm5hdGl2ZUV2ZW50O1xuXG4gICAgICBpZiAoIWV2ZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50LnByZXZlbnREZWZhdWx0KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IC8vICRGbG93Rml4TWUgLSBmbG93IGlzIG5vdCBhd2FyZSBvZiBgdW5rbm93bmAgaW4gSUVcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGV2ZW50LnJldHVyblZhbHVlICE9PSAndW5rbm93bicpIHtcbiAgICAgICAgZXZlbnQucmV0dXJuVmFsdWUgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSBmdW5jdGlvblRoYXRSZXR1cm5zVHJ1ZTtcbiAgICB9LFxuICAgIHN0b3BQcm9wYWdhdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGV2ZW50ID0gdGhpcy5uYXRpdmVFdmVudDtcblxuICAgICAgaWYgKCFldmVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudC5zdG9wUHJvcGFnYXRpb24pIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IC8vICRGbG93Rml4TWUgLSBmbG93IGlzIG5vdCBhd2FyZSBvZiBgdW5rbm93bmAgaW4gSUVcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGV2ZW50LmNhbmNlbEJ1YmJsZSAhPT0gJ3Vua25vd24nKSB7XG4gICAgICAgIC8vIFRoZSBDaGFuZ2VFdmVudFBsdWdpbiByZWdpc3RlcnMgYSBcInByb3BlcnR5Y2hhbmdlXCIgZXZlbnQgZm9yXG4gICAgICAgIC8vIElFLiBUaGlzIGV2ZW50IGRvZXMgbm90IHN1cHBvcnQgYnViYmxpbmcgb3IgY2FuY2VsbGluZywgYW5kXG4gICAgICAgIC8vIGFueSByZWZlcmVuY2VzIHRvIGNhbmNlbEJ1YmJsZSB0aHJvdyBcIk1lbWJlciBub3QgZm91bmRcIi4gIEFcbiAgICAgICAgLy8gdHlwZW9mIGNoZWNrIG9mIFwidW5rbm93blwiIGNpcmN1bXZlbnRzIHRoaXMgaXNzdWUgKGFuZCBpcyBhbHNvXG4gICAgICAgIC8vIElFIHNwZWNpZmljKS5cbiAgICAgICAgZXZlbnQuY2FuY2VsQnViYmxlID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IGZ1bmN0aW9uVGhhdFJldHVybnNUcnVlO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBXZSByZWxlYXNlIGFsbCBkaXNwYXRjaGVkIGBTeW50aGV0aWNFdmVudGBzIGFmdGVyIGVhY2ggZXZlbnQgbG9vcCwgYWRkaW5nXG4gICAgICogdGhlbSBiYWNrIGludG8gdGhlIHBvb2wuIFRoaXMgYWxsb3dzIGEgd2F5IHRvIGhvbGQgb250byBhIHJlZmVyZW5jZSB0aGF0XG4gICAgICogd29uJ3QgYmUgYWRkZWQgYmFjayBpbnRvIHRoZSBwb29sLlxuICAgICAqL1xuICAgIHBlcnNpc3Q6IGZ1bmN0aW9uICgpIHsvLyBNb2Rlcm4gZXZlbnQgc3lzdGVtIGRvZXNuJ3QgdXNlIHBvb2xpbmcuXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiB0aGlzIGV2ZW50IHNob3VsZCBiZSByZWxlYXNlZCBiYWNrIGludG8gdGhlIHBvb2wuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoaXMgc2hvdWxkIG5vdCBiZSByZWxlYXNlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIGlzUGVyc2lzdGVudDogZnVuY3Rpb25UaGF0UmV0dXJuc1RydWVcbiAgfSk7XG5cbiAgcmV0dXJuIFN5bnRoZXRpY0Jhc2VFdmVudDtcbn1cbi8qKlxuICogQGludGVyZmFjZSBFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvXG4gKi9cblxuXG52YXIgRXZlbnRJbnRlcmZhY2UgPSB7XG4gIGV2ZW50UGhhc2U6IDAsXG4gIGJ1YmJsZXM6IDAsXG4gIGNhbmNlbGFibGU6IDAsXG4gIHRpbWVTdGFtcDogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgcmV0dXJuIGV2ZW50LnRpbWVTdGFtcCB8fCBEYXRlLm5vdygpO1xuICB9LFxuICBkZWZhdWx0UHJldmVudGVkOiAwLFxuICBpc1RydXN0ZWQ6IDBcbn07XG52YXIgU3ludGhldGljRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChFdmVudEludGVyZmFjZSk7XG5cbnZhciBVSUV2ZW50SW50ZXJmYWNlID0gX2Fzc2lnbih7fSwgRXZlbnRJbnRlcmZhY2UsIHtcbiAgdmlldzogMCxcbiAgZGV0YWlsOiAwXG59KTtcblxudmFyIFN5bnRoZXRpY1VJRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChVSUV2ZW50SW50ZXJmYWNlKTtcbnZhciBsYXN0TW92ZW1lbnRYO1xudmFyIGxhc3RNb3ZlbWVudFk7XG52YXIgbGFzdE1vdXNlRXZlbnQ7XG5cbmZ1bmN0aW9uIHVwZGF0ZU1vdXNlTW92ZW1lbnRQb2x5ZmlsbFN0YXRlKGV2ZW50KSB7XG4gIGlmIChldmVudCAhPT0gbGFzdE1vdXNlRXZlbnQpIHtcbiAgICBpZiAobGFzdE1vdXNlRXZlbnQgJiYgZXZlbnQudHlwZSA9PT0gJ21vdXNlbW92ZScpIHtcbiAgICAgIGxhc3RNb3ZlbWVudFggPSBldmVudC5zY3JlZW5YIC0gbGFzdE1vdXNlRXZlbnQuc2NyZWVuWDtcbiAgICAgIGxhc3RNb3ZlbWVudFkgPSBldmVudC5zY3JlZW5ZIC0gbGFzdE1vdXNlRXZlbnQuc2NyZWVuWTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGFzdE1vdmVtZW50WCA9IDA7XG4gICAgICBsYXN0TW92ZW1lbnRZID0gMDtcbiAgICB9XG5cbiAgICBsYXN0TW91c2VFdmVudCA9IGV2ZW50O1xuICB9XG59XG4vKipcbiAqIEBpbnRlcmZhY2UgTW91c2VFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvXG4gKi9cblxuXG52YXIgTW91c2VFdmVudEludGVyZmFjZSA9IF9hc3NpZ24oe30sIFVJRXZlbnRJbnRlcmZhY2UsIHtcbiAgc2NyZWVuWDogMCxcbiAgc2NyZWVuWTogMCxcbiAgY2xpZW50WDogMCxcbiAgY2xpZW50WTogMCxcbiAgcGFnZVg6IDAsXG4gIHBhZ2VZOiAwLFxuICBjdHJsS2V5OiAwLFxuICBzaGlmdEtleTogMCxcbiAgYWx0S2V5OiAwLFxuICBtZXRhS2V5OiAwLFxuICBnZXRNb2RpZmllclN0YXRlOiBnZXRFdmVudE1vZGlmaWVyU3RhdGUsXG4gIGJ1dHRvbjogMCxcbiAgYnV0dG9uczogMCxcbiAgcmVsYXRlZFRhcmdldDogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LnJlbGF0ZWRUYXJnZXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGV2ZW50LmZyb21FbGVtZW50ID09PSBldmVudC5zcmNFbGVtZW50ID8gZXZlbnQudG9FbGVtZW50IDogZXZlbnQuZnJvbUVsZW1lbnQ7XG4gICAgcmV0dXJuIGV2ZW50LnJlbGF0ZWRUYXJnZXQ7XG4gIH0sXG4gIG1vdmVtZW50WDogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgaWYgKCdtb3ZlbWVudFgnIGluIGV2ZW50KSB7XG4gICAgICByZXR1cm4gZXZlbnQubW92ZW1lbnRYO1xuICAgIH1cblxuICAgIHVwZGF0ZU1vdXNlTW92ZW1lbnRQb2x5ZmlsbFN0YXRlKGV2ZW50KTtcbiAgICByZXR1cm4gbGFzdE1vdmVtZW50WDtcbiAgfSxcbiAgbW92ZW1lbnRZOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBpZiAoJ21vdmVtZW50WScgaW4gZXZlbnQpIHtcbiAgICAgIHJldHVybiBldmVudC5tb3ZlbWVudFk7XG4gICAgfSAvLyBEb24ndCBuZWVkIHRvIGNhbGwgdXBkYXRlTW91c2VNb3ZlbWVudFBvbHlmaWxsU3RhdGUoKSBoZXJlXG4gICAgLy8gYmVjYXVzZSBpdCdzIGd1YXJhbnRlZWQgdG8gaGF2ZSBhbHJlYWR5IHJ1biB3aGVuIG1vdmVtZW50WFxuICAgIC8vIHdhcyBjb3BpZWQuXG5cblxuICAgIHJldHVybiBsYXN0TW92ZW1lbnRZO1xuICB9XG59KTtcblxudmFyIFN5bnRoZXRpY01vdXNlRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChNb3VzZUV2ZW50SW50ZXJmYWNlKTtcbi8qKlxuICogQGludGVyZmFjZSBEcmFnRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzL1xuICovXG5cbnZhciBEcmFnRXZlbnRJbnRlcmZhY2UgPSBfYXNzaWduKHt9LCBNb3VzZUV2ZW50SW50ZXJmYWNlLCB7XG4gIGRhdGFUcmFuc2ZlcjogMFxufSk7XG5cbnZhciBTeW50aGV0aWNEcmFnRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChEcmFnRXZlbnRJbnRlcmZhY2UpO1xuLyoqXG4gKiBAaW50ZXJmYWNlIEZvY3VzRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzL1xuICovXG5cbnZhciBGb2N1c0V2ZW50SW50ZXJmYWNlID0gX2Fzc2lnbih7fSwgVUlFdmVudEludGVyZmFjZSwge1xuICByZWxhdGVkVGFyZ2V0OiAwXG59KTtcblxudmFyIFN5bnRoZXRpY0ZvY3VzRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChGb2N1c0V2ZW50SW50ZXJmYWNlKTtcbi8qKlxuICogQGludGVyZmFjZSBFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLWFuaW1hdGlvbnMvI0FuaW1hdGlvbkV2ZW50LWludGVyZmFjZVxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvQW5pbWF0aW9uRXZlbnRcbiAqL1xuXG52YXIgQW5pbWF0aW9uRXZlbnRJbnRlcmZhY2UgPSBfYXNzaWduKHt9LCBFdmVudEludGVyZmFjZSwge1xuICBhbmltYXRpb25OYW1lOiAwLFxuICBlbGFwc2VkVGltZTogMCxcbiAgcHNldWRvRWxlbWVudDogMFxufSk7XG5cbnZhciBTeW50aGV0aWNBbmltYXRpb25FdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KEFuaW1hdGlvbkV2ZW50SW50ZXJmYWNlKTtcbi8qKlxuICogQGludGVyZmFjZSBFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9jbGlwYm9hcmQtYXBpcy9cbiAqL1xuXG52YXIgQ2xpcGJvYXJkRXZlbnRJbnRlcmZhY2UgPSBfYXNzaWduKHt9LCBFdmVudEludGVyZmFjZSwge1xuICBjbGlwYm9hcmREYXRhOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICByZXR1cm4gJ2NsaXBib2FyZERhdGEnIGluIGV2ZW50ID8gZXZlbnQuY2xpcGJvYXJkRGF0YSA6IHdpbmRvdy5jbGlwYm9hcmREYXRhO1xuICB9XG59KTtcblxudmFyIFN5bnRoZXRpY0NsaXBib2FyZEV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoQ2xpcGJvYXJkRXZlbnRJbnRlcmZhY2UpO1xuLyoqXG4gKiBAaW50ZXJmYWNlIEV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy8jZXZlbnRzLWNvbXBvc2l0aW9uZXZlbnRzXG4gKi9cblxudmFyIENvbXBvc2l0aW9uRXZlbnRJbnRlcmZhY2UgPSBfYXNzaWduKHt9LCBFdmVudEludGVyZmFjZSwge1xuICBkYXRhOiAwXG59KTtcblxudmFyIFN5bnRoZXRpY0NvbXBvc2l0aW9uRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChDb21wb3NpdGlvbkV2ZW50SW50ZXJmYWNlKTtcbi8qKlxuICogQGludGVyZmFjZSBFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEzL1dELURPTS1MZXZlbC0zLUV2ZW50cy0yMDEzMTEwNVxuICogICAgICAvI2V2ZW50cy1pbnB1dGV2ZW50c1xuICovXG4vLyBIYXBwZW5zIHRvIHNoYXJlIHRoZSBzYW1lIGxpc3QgZm9yIG5vdy5cblxudmFyIFN5bnRoZXRpY0lucHV0RXZlbnQgPSBTeW50aGV0aWNDb21wb3NpdGlvbkV2ZW50O1xuLyoqXG4gKiBOb3JtYWxpemF0aW9uIG9mIGRlcHJlY2F0ZWQgSFRNTDUgYGtleWAgdmFsdWVzXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9LZXlib2FyZEV2ZW50I0tleV9uYW1lc1xuICovXG5cbnZhciBub3JtYWxpemVLZXkgPSB7XG4gIEVzYzogJ0VzY2FwZScsXG4gIFNwYWNlYmFyOiAnICcsXG4gIExlZnQ6ICdBcnJvd0xlZnQnLFxuICBVcDogJ0Fycm93VXAnLFxuICBSaWdodDogJ0Fycm93UmlnaHQnLFxuICBEb3duOiAnQXJyb3dEb3duJyxcbiAgRGVsOiAnRGVsZXRlJyxcbiAgV2luOiAnT1MnLFxuICBNZW51OiAnQ29udGV4dE1lbnUnLFxuICBBcHBzOiAnQ29udGV4dE1lbnUnLFxuICBTY3JvbGw6ICdTY3JvbGxMb2NrJyxcbiAgTW96UHJpbnRhYmxlS2V5OiAnVW5pZGVudGlmaWVkJ1xufTtcbi8qKlxuICogVHJhbnNsYXRpb24gZnJvbSBsZWdhY3kgYGtleUNvZGVgIHRvIEhUTUw1IGBrZXlgXG4gKiBPbmx5IHNwZWNpYWwga2V5cyBzdXBwb3J0ZWQsIGFsbCBvdGhlcnMgZGVwZW5kIG9uIGtleWJvYXJkIGxheW91dCBvciBicm93c2VyXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9LZXlib2FyZEV2ZW50I0tleV9uYW1lc1xuICovXG5cbnZhciB0cmFuc2xhdGVUb0tleSA9IHtcbiAgJzgnOiAnQmFja3NwYWNlJyxcbiAgJzknOiAnVGFiJyxcbiAgJzEyJzogJ0NsZWFyJyxcbiAgJzEzJzogJ0VudGVyJyxcbiAgJzE2JzogJ1NoaWZ0JyxcbiAgJzE3JzogJ0NvbnRyb2wnLFxuICAnMTgnOiAnQWx0JyxcbiAgJzE5JzogJ1BhdXNlJyxcbiAgJzIwJzogJ0NhcHNMb2NrJyxcbiAgJzI3JzogJ0VzY2FwZScsXG4gICczMic6ICcgJyxcbiAgJzMzJzogJ1BhZ2VVcCcsXG4gICczNCc6ICdQYWdlRG93bicsXG4gICczNSc6ICdFbmQnLFxuICAnMzYnOiAnSG9tZScsXG4gICczNyc6ICdBcnJvd0xlZnQnLFxuICAnMzgnOiAnQXJyb3dVcCcsXG4gICczOSc6ICdBcnJvd1JpZ2h0JyxcbiAgJzQwJzogJ0Fycm93RG93bicsXG4gICc0NSc6ICdJbnNlcnQnLFxuICAnNDYnOiAnRGVsZXRlJyxcbiAgJzExMic6ICdGMScsXG4gICcxMTMnOiAnRjInLFxuICAnMTE0JzogJ0YzJyxcbiAgJzExNSc6ICdGNCcsXG4gICcxMTYnOiAnRjUnLFxuICAnMTE3JzogJ0Y2JyxcbiAgJzExOCc6ICdGNycsXG4gICcxMTknOiAnRjgnLFxuICAnMTIwJzogJ0Y5JyxcbiAgJzEyMSc6ICdGMTAnLFxuICAnMTIyJzogJ0YxMScsXG4gICcxMjMnOiAnRjEyJyxcbiAgJzE0NCc6ICdOdW1Mb2NrJyxcbiAgJzE0NSc6ICdTY3JvbGxMb2NrJyxcbiAgJzIyNCc6ICdNZXRhJ1xufTtcbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICogQHJldHVybiB7c3RyaW5nfSBOb3JtYWxpemVkIGBrZXlgIHByb3BlcnR5LlxuICovXG5cbmZ1bmN0aW9uIGdldEV2ZW50S2V5KG5hdGl2ZUV2ZW50KSB7XG4gIGlmIChuYXRpdmVFdmVudC5rZXkpIHtcbiAgICAvLyBOb3JtYWxpemUgaW5jb25zaXN0ZW50IHZhbHVlcyByZXBvcnRlZCBieSBicm93c2VycyBkdWUgdG9cbiAgICAvLyBpbXBsZW1lbnRhdGlvbnMgb2YgYSB3b3JraW5nIGRyYWZ0IHNwZWNpZmljYXRpb24uXG4gICAgLy8gRmlyZUZveCBpbXBsZW1lbnRzIGBrZXlgIGJ1dCByZXR1cm5zIGBNb3pQcmludGFibGVLZXlgIGZvciBhbGxcbiAgICAvLyBwcmludGFibGUgY2hhcmFjdGVycyAobm9ybWFsaXplZCB0byBgVW5pZGVudGlmaWVkYCksIGlnbm9yZSBpdC5cbiAgICB2YXIga2V5ID0gbm9ybWFsaXplS2V5W25hdGl2ZUV2ZW50LmtleV0gfHwgbmF0aXZlRXZlbnQua2V5O1xuXG4gICAgaWYgKGtleSAhPT0gJ1VuaWRlbnRpZmllZCcpIHtcbiAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICB9IC8vIEJyb3dzZXIgZG9lcyBub3QgaW1wbGVtZW50IGBrZXlgLCBwb2x5ZmlsbCBhcyBtdWNoIG9mIGl0IGFzIHdlIGNhbi5cblxuXG4gIGlmIChuYXRpdmVFdmVudC50eXBlID09PSAna2V5cHJlc3MnKSB7XG4gICAgdmFyIGNoYXJDb2RlID0gZ2V0RXZlbnRDaGFyQ29kZShuYXRpdmVFdmVudCk7IC8vIFRoZSBlbnRlci1rZXkgaXMgdGVjaG5pY2FsbHkgYm90aCBwcmludGFibGUgYW5kIG5vbi1wcmludGFibGUgYW5kIGNhblxuICAgIC8vIHRodXMgYmUgY2FwdHVyZWQgYnkgYGtleXByZXNzYCwgbm8gb3RoZXIgbm9uLXByaW50YWJsZSBrZXkgc2hvdWxkLlxuXG4gICAgcmV0dXJuIGNoYXJDb2RlID09PSAxMyA/ICdFbnRlcicgOiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoYXJDb2RlKTtcbiAgfVxuXG4gIGlmIChuYXRpdmVFdmVudC50eXBlID09PSAna2V5ZG93bicgfHwgbmF0aXZlRXZlbnQudHlwZSA9PT0gJ2tleXVwJykge1xuICAgIC8vIFdoaWxlIHVzZXIga2V5Ym9hcmQgbGF5b3V0IGRldGVybWluZXMgdGhlIGFjdHVhbCBtZWFuaW5nIG9mIGVhY2hcbiAgICAvLyBga2V5Q29kZWAgdmFsdWUsIGFsbW9zdCBhbGwgZnVuY3Rpb24ga2V5cyBoYXZlIGEgdW5pdmVyc2FsIHZhbHVlLlxuICAgIHJldHVybiB0cmFuc2xhdGVUb0tleVtuYXRpdmVFdmVudC5rZXlDb2RlXSB8fCAnVW5pZGVudGlmaWVkJztcbiAgfVxuXG4gIHJldHVybiAnJztcbn1cbi8qKlxuICogVHJhbnNsYXRpb24gZnJvbSBtb2RpZmllciBrZXkgdG8gdGhlIGFzc29jaWF0ZWQgcHJvcGVydHkgaW4gdGhlIGV2ZW50LlxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvI2tleXMtTW9kaWZpZXJzXG4gKi9cblxuXG52YXIgbW9kaWZpZXJLZXlUb1Byb3AgPSB7XG4gIEFsdDogJ2FsdEtleScsXG4gIENvbnRyb2w6ICdjdHJsS2V5JyxcbiAgTWV0YTogJ21ldGFLZXknLFxuICBTaGlmdDogJ3NoaWZ0S2V5J1xufTsgLy8gT2xkZXIgYnJvd3NlcnMgKFNhZmFyaSA8PSAxMCwgaU9TIFNhZmFyaSA8PSAxMC4yKSBkbyBub3Qgc3VwcG9ydFxuLy8gZ2V0TW9kaWZpZXJTdGF0ZS4gSWYgZ2V0TW9kaWZpZXJTdGF0ZSBpcyBub3Qgc3VwcG9ydGVkLCB3ZSBtYXAgaXQgdG8gYSBzZXQgb2Zcbi8vIG1vZGlmaWVyIGtleXMgZXhwb3NlZCBieSB0aGUgZXZlbnQuIEluIHRoaXMgY2FzZSwgTG9jay1rZXlzIGFyZSBub3Qgc3VwcG9ydGVkLlxuXG5mdW5jdGlvbiBtb2RpZmllclN0YXRlR2V0dGVyKGtleUFyZykge1xuICB2YXIgc3ludGhldGljRXZlbnQgPSB0aGlzO1xuICB2YXIgbmF0aXZlRXZlbnQgPSBzeW50aGV0aWNFdmVudC5uYXRpdmVFdmVudDtcblxuICBpZiAobmF0aXZlRXZlbnQuZ2V0TW9kaWZpZXJTdGF0ZSkge1xuICAgIHJldHVybiBuYXRpdmVFdmVudC5nZXRNb2RpZmllclN0YXRlKGtleUFyZyk7XG4gIH1cblxuICB2YXIga2V5UHJvcCA9IG1vZGlmaWVyS2V5VG9Qcm9wW2tleUFyZ107XG4gIHJldHVybiBrZXlQcm9wID8gISFuYXRpdmVFdmVudFtrZXlQcm9wXSA6IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBnZXRFdmVudE1vZGlmaWVyU3RhdGUobmF0aXZlRXZlbnQpIHtcbiAgcmV0dXJuIG1vZGlmaWVyU3RhdGVHZXR0ZXI7XG59XG4vKipcbiAqIEBpbnRlcmZhY2UgS2V5Ym9hcmRFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvXG4gKi9cblxuXG52YXIgS2V5Ym9hcmRFdmVudEludGVyZmFjZSA9IF9hc3NpZ24oe30sIFVJRXZlbnRJbnRlcmZhY2UsIHtcbiAga2V5OiBnZXRFdmVudEtleSxcbiAgY29kZTogMCxcbiAgbG9jYXRpb246IDAsXG4gIGN0cmxLZXk6IDAsXG4gIHNoaWZ0S2V5OiAwLFxuICBhbHRLZXk6IDAsXG4gIG1ldGFLZXk6IDAsXG4gIHJlcGVhdDogMCxcbiAgbG9jYWxlOiAwLFxuICBnZXRNb2RpZmllclN0YXRlOiBnZXRFdmVudE1vZGlmaWVyU3RhdGUsXG4gIC8vIExlZ2FjeSBJbnRlcmZhY2VcbiAgY2hhckNvZGU6IGZ1bmN0aW9uIChldmVudCkge1xuICAgIC8vIGBjaGFyQ29kZWAgaXMgdGhlIHJlc3VsdCBvZiBhIEtleVByZXNzIGV2ZW50IGFuZCByZXByZXNlbnRzIHRoZSB2YWx1ZSBvZlxuICAgIC8vIHRoZSBhY3R1YWwgcHJpbnRhYmxlIGNoYXJhY3Rlci5cbiAgICAvLyBLZXlQcmVzcyBpcyBkZXByZWNhdGVkLCBidXQgaXRzIHJlcGxhY2VtZW50IGlzIG5vdCB5ZXQgZmluYWwgYW5kIG5vdFxuICAgIC8vIGltcGxlbWVudGVkIGluIGFueSBtYWpvciBicm93c2VyLiBPbmx5IEtleVByZXNzIGhhcyBjaGFyQ29kZS5cbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2tleXByZXNzJykge1xuICAgICAgcmV0dXJuIGdldEV2ZW50Q2hhckNvZGUoZXZlbnQpO1xuICAgIH1cblxuICAgIHJldHVybiAwO1xuICB9LFxuICBrZXlDb2RlOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAvLyBga2V5Q29kZWAgaXMgdGhlIHJlc3VsdCBvZiBhIEtleURvd24vVXAgZXZlbnQgYW5kIHJlcHJlc2VudHMgdGhlIHZhbHVlIG9mXG4gICAgLy8gcGh5c2ljYWwga2V5Ym9hcmQga2V5LlxuICAgIC8vIFRoZSBhY3R1YWwgbWVhbmluZyBvZiB0aGUgdmFsdWUgZGVwZW5kcyBvbiB0aGUgdXNlcnMnIGtleWJvYXJkIGxheW91dFxuICAgIC8vIHdoaWNoIGNhbm5vdCBiZSBkZXRlY3RlZC4gQXNzdW1pbmcgdGhhdCBpdCBpcyBhIFVTIGtleWJvYXJkIGxheW91dFxuICAgIC8vIHByb3ZpZGVzIGEgc3VycHJpc2luZ2x5IGFjY3VyYXRlIG1hcHBpbmcgZm9yIFVTIGFuZCBFdXJvcGVhbiB1c2Vycy5cbiAgICAvLyBEdWUgdG8gdGhpcywgaXQgaXMgbGVmdCB0byB0aGUgdXNlciB0byBpbXBsZW1lbnQgYXQgdGhpcyB0aW1lLlxuICAgIGlmIChldmVudC50eXBlID09PSAna2V5ZG93bicgfHwgZXZlbnQudHlwZSA9PT0gJ2tleXVwJykge1xuICAgICAgcmV0dXJuIGV2ZW50LmtleUNvZGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIDA7XG4gIH0sXG4gIHdoaWNoOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAvLyBgd2hpY2hgIGlzIGFuIGFsaWFzIGZvciBlaXRoZXIgYGtleUNvZGVgIG9yIGBjaGFyQ29kZWAgZGVwZW5kaW5nIG9uIHRoZVxuICAgIC8vIHR5cGUgb2YgdGhlIGV2ZW50LlxuICAgIGlmIChldmVudC50eXBlID09PSAna2V5cHJlc3MnKSB7XG4gICAgICByZXR1cm4gZ2V0RXZlbnRDaGFyQ29kZShldmVudCk7XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09ICdrZXlkb3duJyB8fCBldmVudC50eXBlID09PSAna2V5dXAnKSB7XG4gICAgICByZXR1cm4gZXZlbnQua2V5Q29kZTtcbiAgICB9XG5cbiAgICByZXR1cm4gMDtcbiAgfVxufSk7XG5cbnZhciBTeW50aGV0aWNLZXlib2FyZEV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoS2V5Ym9hcmRFdmVudEludGVyZmFjZSk7XG4vKipcbiAqIEBpbnRlcmZhY2UgUG9pbnRlckV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL3BvaW50ZXJldmVudHMvXG4gKi9cblxudmFyIFBvaW50ZXJFdmVudEludGVyZmFjZSA9IF9hc3NpZ24oe30sIE1vdXNlRXZlbnRJbnRlcmZhY2UsIHtcbiAgcG9pbnRlcklkOiAwLFxuICB3aWR0aDogMCxcbiAgaGVpZ2h0OiAwLFxuICBwcmVzc3VyZTogMCxcbiAgdGFuZ2VudGlhbFByZXNzdXJlOiAwLFxuICB0aWx0WDogMCxcbiAgdGlsdFk6IDAsXG4gIHR3aXN0OiAwLFxuICBwb2ludGVyVHlwZTogMCxcbiAgaXNQcmltYXJ5OiAwXG59KTtcblxudmFyIFN5bnRoZXRpY1BvaW50ZXJFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KFBvaW50ZXJFdmVudEludGVyZmFjZSk7XG4vKipcbiAqIEBpbnRlcmZhY2UgVG91Y2hFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi90b3VjaC1ldmVudHMvXG4gKi9cblxudmFyIFRvdWNoRXZlbnRJbnRlcmZhY2UgPSBfYXNzaWduKHt9LCBVSUV2ZW50SW50ZXJmYWNlLCB7XG4gIHRvdWNoZXM6IDAsXG4gIHRhcmdldFRvdWNoZXM6IDAsXG4gIGNoYW5nZWRUb3VjaGVzOiAwLFxuICBhbHRLZXk6IDAsXG4gIG1ldGFLZXk6IDAsXG4gIGN0cmxLZXk6IDAsXG4gIHNoaWZ0S2V5OiAwLFxuICBnZXRNb2RpZmllclN0YXRlOiBnZXRFdmVudE1vZGlmaWVyU3RhdGVcbn0pO1xuXG52YXIgU3ludGhldGljVG91Y2hFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KFRvdWNoRXZlbnRJbnRlcmZhY2UpO1xuLyoqXG4gKiBAaW50ZXJmYWNlIEV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDkvV0QtY3NzMy10cmFuc2l0aW9ucy0yMDA5MDMyMC8jdHJhbnNpdGlvbi1ldmVudHMtXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9UcmFuc2l0aW9uRXZlbnRcbiAqL1xuXG52YXIgVHJhbnNpdGlvbkV2ZW50SW50ZXJmYWNlID0gX2Fzc2lnbih7fSwgRXZlbnRJbnRlcmZhY2UsIHtcbiAgcHJvcGVydHlOYW1lOiAwLFxuICBlbGFwc2VkVGltZTogMCxcbiAgcHNldWRvRWxlbWVudDogMFxufSk7XG5cbnZhciBTeW50aGV0aWNUcmFuc2l0aW9uRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChUcmFuc2l0aW9uRXZlbnRJbnRlcmZhY2UpO1xuLyoqXG4gKiBAaW50ZXJmYWNlIFdoZWVsRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzL1xuICovXG5cbnZhciBXaGVlbEV2ZW50SW50ZXJmYWNlID0gX2Fzc2lnbih7fSwgTW91c2VFdmVudEludGVyZmFjZSwge1xuICBkZWx0YVg6IGZ1bmN0aW9uIChldmVudCkge1xuICAgIHJldHVybiAnZGVsdGFYJyBpbiBldmVudCA/IGV2ZW50LmRlbHRhWCA6IC8vIEZhbGxiYWNrIHRvIGB3aGVlbERlbHRhWGAgZm9yIFdlYmtpdCBhbmQgbm9ybWFsaXplIChyaWdodCBpcyBwb3NpdGl2ZSkuXG4gICAgJ3doZWVsRGVsdGFYJyBpbiBldmVudCA/IC1ldmVudC53aGVlbERlbHRhWCA6IDA7XG4gIH0sXG4gIGRlbHRhWTogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgcmV0dXJuICdkZWx0YVknIGluIGV2ZW50ID8gZXZlbnQuZGVsdGFZIDogLy8gRmFsbGJhY2sgdG8gYHdoZWVsRGVsdGFZYCBmb3IgV2Via2l0IGFuZCBub3JtYWxpemUgKGRvd24gaXMgcG9zaXRpdmUpLlxuICAgICd3aGVlbERlbHRhWScgaW4gZXZlbnQgPyAtZXZlbnQud2hlZWxEZWx0YVkgOiAvLyBGYWxsYmFjayB0byBgd2hlZWxEZWx0YWAgZm9yIElFPDkgYW5kIG5vcm1hbGl6ZSAoZG93biBpcyBwb3NpdGl2ZSkuXG4gICAgJ3doZWVsRGVsdGEnIGluIGV2ZW50ID8gLWV2ZW50LndoZWVsRGVsdGEgOiAwO1xuICB9LFxuICBkZWx0YVo6IDAsXG4gIC8vIEJyb3dzZXJzIHdpdGhvdXQgXCJkZWx0YU1vZGVcIiBpcyByZXBvcnRpbmcgaW4gcmF3IHdoZWVsIGRlbHRhIHdoZXJlIG9uZVxuICAvLyBub3RjaCBvbiB0aGUgc2Nyb2xsIGlzIGFsd2F5cyArLy0gMTIwLCByb3VnaGx5IGVxdWl2YWxlbnQgdG8gcGl4ZWxzLlxuICAvLyBBIGdvb2QgYXBwcm94aW1hdGlvbiBvZiBET01fREVMVEFfTElORSAoMSkgaXMgNSUgb2Ygdmlld3BvcnQgc2l6ZSBvclxuICAvLyB+NDAgcGl4ZWxzLCBmb3IgRE9NX0RFTFRBX1NDUkVFTiAoMikgaXQgaXMgODcuNSUgb2Ygdmlld3BvcnQgc2l6ZS5cbiAgZGVsdGFNb2RlOiAwXG59KTtcblxudmFyIFN5bnRoZXRpY1doZWVsRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChXaGVlbEV2ZW50SW50ZXJmYWNlKTtcblxudmFyIEVORF9LRVlDT0RFUyA9IFs5LCAxMywgMjcsIDMyXTsgLy8gVGFiLCBSZXR1cm4sIEVzYywgU3BhY2VcblxudmFyIFNUQVJUX0tFWUNPREUgPSAyMjk7XG52YXIgY2FuVXNlQ29tcG9zaXRpb25FdmVudCA9IGNhblVzZURPTSAmJiAnQ29tcG9zaXRpb25FdmVudCcgaW4gd2luZG93O1xudmFyIGRvY3VtZW50TW9kZSA9IG51bGw7XG5cbmlmIChjYW5Vc2VET00gJiYgJ2RvY3VtZW50TW9kZScgaW4gZG9jdW1lbnQpIHtcbiAgZG9jdW1lbnRNb2RlID0gZG9jdW1lbnQuZG9jdW1lbnRNb2RlO1xufSAvLyBXZWJraXQgb2ZmZXJzIGEgdmVyeSB1c2VmdWwgYHRleHRJbnB1dGAgZXZlbnQgdGhhdCBjYW4gYmUgdXNlZCB0b1xuLy8gZGlyZWN0bHkgcmVwcmVzZW50IGBiZWZvcmVJbnB1dGAuIFRoZSBJRSBgdGV4dGlucHV0YCBldmVudCBpcyBub3QgYXNcbi8vIHVzZWZ1bCwgc28gd2UgZG9uJ3QgdXNlIGl0LlxuXG5cbnZhciBjYW5Vc2VUZXh0SW5wdXRFdmVudCA9IGNhblVzZURPTSAmJiAnVGV4dEV2ZW50JyBpbiB3aW5kb3cgJiYgIWRvY3VtZW50TW9kZTsgLy8gSW4gSUU5Kywgd2UgaGF2ZSBhY2Nlc3MgdG8gY29tcG9zaXRpb24gZXZlbnRzLCBidXQgdGhlIGRhdGEgc3VwcGxpZWRcbi8vIGJ5IHRoZSBuYXRpdmUgY29tcG9zaXRpb25lbmQgZXZlbnQgbWF5IGJlIGluY29ycmVjdC4gSmFwYW5lc2UgaWRlb2dyYXBoaWNcbi8vIHNwYWNlcywgZm9yIGluc3RhbmNlIChcXHUzMDAwKSBhcmUgbm90IHJlY29yZGVkIGNvcnJlY3RseS5cblxudmFyIHVzZUZhbGxiYWNrQ29tcG9zaXRpb25EYXRhID0gY2FuVXNlRE9NICYmICghY2FuVXNlQ29tcG9zaXRpb25FdmVudCB8fCBkb2N1bWVudE1vZGUgJiYgZG9jdW1lbnRNb2RlID4gOCAmJiBkb2N1bWVudE1vZGUgPD0gMTEpO1xudmFyIFNQQUNFQkFSX0NPREUgPSAzMjtcbnZhciBTUEFDRUJBUl9DSEFSID0gU3RyaW5nLmZyb21DaGFyQ29kZShTUEFDRUJBUl9DT0RFKTtcblxuZnVuY3Rpb24gcmVnaXN0ZXJFdmVudHMoKSB7XG4gIHJlZ2lzdGVyVHdvUGhhc2VFdmVudCgnb25CZWZvcmVJbnB1dCcsIFsnY29tcG9zaXRpb25lbmQnLCAna2V5cHJlc3MnLCAndGV4dElucHV0JywgJ3Bhc3RlJ10pO1xuICByZWdpc3RlclR3b1BoYXNlRXZlbnQoJ29uQ29tcG9zaXRpb25FbmQnLCBbJ2NvbXBvc2l0aW9uZW5kJywgJ2ZvY3Vzb3V0JywgJ2tleWRvd24nLCAna2V5cHJlc3MnLCAna2V5dXAnLCAnbW91c2Vkb3duJ10pO1xuICByZWdpc3RlclR3b1BoYXNlRXZlbnQoJ29uQ29tcG9zaXRpb25TdGFydCcsIFsnY29tcG9zaXRpb25zdGFydCcsICdmb2N1c291dCcsICdrZXlkb3duJywgJ2tleXByZXNzJywgJ2tleXVwJywgJ21vdXNlZG93biddKTtcbiAgcmVnaXN0ZXJUd29QaGFzZUV2ZW50KCdvbkNvbXBvc2l0aW9uVXBkYXRlJywgWydjb21wb3NpdGlvbnVwZGF0ZScsICdmb2N1c291dCcsICdrZXlkb3duJywgJ2tleXByZXNzJywgJ2tleXVwJywgJ21vdXNlZG93biddKTtcbn0gLy8gVHJhY2sgd2hldGhlciB3ZSd2ZSBldmVyIGhhbmRsZWQgYSBrZXlwcmVzcyBvbiB0aGUgc3BhY2Uga2V5LlxuXG5cbnZhciBoYXNTcGFjZUtleXByZXNzID0gZmFsc2U7XG4vKipcbiAqIFJldHVybiB3aGV0aGVyIGEgbmF0aXZlIGtleXByZXNzIGV2ZW50IGlzIGFzc3VtZWQgdG8gYmUgYSBjb21tYW5kLlxuICogVGhpcyBpcyByZXF1aXJlZCBiZWNhdXNlIEZpcmVmb3ggZmlyZXMgYGtleXByZXNzYCBldmVudHMgZm9yIGtleSBjb21tYW5kc1xuICogKGN1dCwgY29weSwgc2VsZWN0LWFsbCwgZXRjLikgZXZlbiB0aG91Z2ggbm8gY2hhcmFjdGVyIGlzIGluc2VydGVkLlxuICovXG5cbmZ1bmN0aW9uIGlzS2V5cHJlc3NDb21tYW5kKG5hdGl2ZUV2ZW50KSB7XG4gIHJldHVybiAobmF0aXZlRXZlbnQuY3RybEtleSB8fCBuYXRpdmVFdmVudC5hbHRLZXkgfHwgbmF0aXZlRXZlbnQubWV0YUtleSkgJiYgLy8gY3RybEtleSAmJiBhbHRLZXkgaXMgZXF1aXZhbGVudCB0byBBbHRHciwgYW5kIGlzIG5vdCBhIGNvbW1hbmQuXG4gICEobmF0aXZlRXZlbnQuY3RybEtleSAmJiBuYXRpdmVFdmVudC5hbHRLZXkpO1xufVxuLyoqXG4gKiBUcmFuc2xhdGUgbmF0aXZlIHRvcCBsZXZlbCBldmVudHMgaW50byBldmVudCB0eXBlcy5cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldENvbXBvc2l0aW9uRXZlbnRUeXBlKGRvbUV2ZW50TmFtZSkge1xuICBzd2l0Y2ggKGRvbUV2ZW50TmFtZSkge1xuICAgIGNhc2UgJ2NvbXBvc2l0aW9uc3RhcnQnOlxuICAgICAgcmV0dXJuICdvbkNvbXBvc2l0aW9uU3RhcnQnO1xuXG4gICAgY2FzZSAnY29tcG9zaXRpb25lbmQnOlxuICAgICAgcmV0dXJuICdvbkNvbXBvc2l0aW9uRW5kJztcblxuICAgIGNhc2UgJ2NvbXBvc2l0aW9udXBkYXRlJzpcbiAgICAgIHJldHVybiAnb25Db21wb3NpdGlvblVwZGF0ZSc7XG4gIH1cbn1cbi8qKlxuICogRG9lcyBvdXIgZmFsbGJhY2sgYmVzdC1ndWVzcyBtb2RlbCB0aGluayB0aGlzIGV2ZW50IHNpZ25pZmllcyB0aGF0XG4gKiBjb21wb3NpdGlvbiBoYXMgYmVndW4/XG4gKi9cblxuXG5mdW5jdGlvbiBpc0ZhbGxiYWNrQ29tcG9zaXRpb25TdGFydChkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KSB7XG4gIHJldHVybiBkb21FdmVudE5hbWUgPT09ICdrZXlkb3duJyAmJiBuYXRpdmVFdmVudC5rZXlDb2RlID09PSBTVEFSVF9LRVlDT0RFO1xufVxuLyoqXG4gKiBEb2VzIG91ciBmYWxsYmFjayBtb2RlIHRoaW5rIHRoYXQgdGhpcyBldmVudCBpcyB0aGUgZW5kIG9mIGNvbXBvc2l0aW9uP1xuICovXG5cblxuZnVuY3Rpb24gaXNGYWxsYmFja0NvbXBvc2l0aW9uRW5kKGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpIHtcbiAgc3dpdGNoIChkb21FdmVudE5hbWUpIHtcbiAgICBjYXNlICdrZXl1cCc6XG4gICAgICAvLyBDb21tYW5kIGtleXMgaW5zZXJ0IG9yIGNsZWFyIElNRSBpbnB1dC5cbiAgICAgIHJldHVybiBFTkRfS0VZQ09ERVMuaW5kZXhPZihuYXRpdmVFdmVudC5rZXlDb2RlKSAhPT0gLTE7XG5cbiAgICBjYXNlICdrZXlkb3duJzpcbiAgICAgIC8vIEV4cGVjdCBJTUUga2V5Q29kZSBvbiBlYWNoIGtleWRvd24uIElmIHdlIGdldCBhbnkgb3RoZXJcbiAgICAgIC8vIGNvZGUgd2UgbXVzdCBoYXZlIGV4aXRlZCBlYXJsaWVyLlxuICAgICAgcmV0dXJuIG5hdGl2ZUV2ZW50LmtleUNvZGUgIT09IFNUQVJUX0tFWUNPREU7XG5cbiAgICBjYXNlICdrZXlwcmVzcyc6XG4gICAgY2FzZSAnbW91c2Vkb3duJzpcbiAgICBjYXNlICdmb2N1c291dCc6XG4gICAgICAvLyBFdmVudHMgYXJlIG5vdCBwb3NzaWJsZSB3aXRob3V0IGNhbmNlbGxpbmcgSU1FLlxuICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4vKipcbiAqIEdvb2dsZSBJbnB1dCBUb29scyBwcm92aWRlcyBjb21wb3NpdGlvbiBkYXRhIHZpYSBhIEN1c3RvbUV2ZW50LFxuICogd2l0aCB0aGUgYGRhdGFgIHByb3BlcnR5IHBvcHVsYXRlZCBpbiB0aGUgYGRldGFpbGAgb2JqZWN0LiBJZiB0aGlzXG4gKiBpcyBhdmFpbGFibGUgb24gdGhlIGV2ZW50IG9iamVjdCwgdXNlIGl0LiBJZiBub3QsIHRoaXMgaXMgYSBwbGFpblxuICogY29tcG9zaXRpb24gZXZlbnQgYW5kIHdlIGhhdmUgbm90aGluZyBzcGVjaWFsIHRvIGV4dHJhY3QuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50XG4gKiBAcmV0dXJuIHs/c3RyaW5nfVxuICovXG5cblxuZnVuY3Rpb24gZ2V0RGF0YUZyb21DdXN0b21FdmVudChuYXRpdmVFdmVudCkge1xuICB2YXIgZGV0YWlsID0gbmF0aXZlRXZlbnQuZGV0YWlsO1xuXG4gIGlmICh0eXBlb2YgZGV0YWlsID09PSAnb2JqZWN0JyAmJiAnZGF0YScgaW4gZGV0YWlsKSB7XG4gICAgcmV0dXJuIGRldGFpbC5kYXRhO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4vKipcbiAqIENoZWNrIGlmIGEgY29tcG9zaXRpb24gZXZlbnQgd2FzIHRyaWdnZXJlZCBieSBLb3JlYW4gSU1FLlxuICogT3VyIGZhbGxiYWNrIG1vZGUgZG9lcyBub3Qgd29yayB3ZWxsIHdpdGggSUUncyBLb3JlYW4gSU1FLFxuICogc28ganVzdCB1c2UgbmF0aXZlIGNvbXBvc2l0aW9uIGV2ZW50cyB3aGVuIEtvcmVhbiBJTUUgaXMgdXNlZC5cbiAqIEFsdGhvdWdoIENvbXBvc2l0aW9uRXZlbnQubG9jYWxlIHByb3BlcnR5IGlzIGRlcHJlY2F0ZWQsXG4gKiBpdCBpcyBhdmFpbGFibGUgaW4gSUUsIHdoZXJlIG91ciBmYWxsYmFjayBtb2RlIGlzIGVuYWJsZWQuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50XG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5cblxuZnVuY3Rpb24gaXNVc2luZ0tvcmVhbklNRShuYXRpdmVFdmVudCkge1xuICByZXR1cm4gbmF0aXZlRXZlbnQubG9jYWxlID09PSAna28nO1xufSAvLyBUcmFjayB0aGUgY3VycmVudCBJTUUgY29tcG9zaXRpb24gc3RhdHVzLCBpZiBhbnkuXG5cblxudmFyIGlzQ29tcG9zaW5nID0gZmFsc2U7XG4vKipcbiAqIEByZXR1cm4gez9vYmplY3R9IEEgU3ludGhldGljQ29tcG9zaXRpb25FdmVudC5cbiAqL1xuXG5mdW5jdGlvbiBleHRyYWN0Q29tcG9zaXRpb25FdmVudChkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCkge1xuICB2YXIgZXZlbnRUeXBlO1xuICB2YXIgZmFsbGJhY2tEYXRhO1xuXG4gIGlmIChjYW5Vc2VDb21wb3NpdGlvbkV2ZW50KSB7XG4gICAgZXZlbnRUeXBlID0gZ2V0Q29tcG9zaXRpb25FdmVudFR5cGUoZG9tRXZlbnROYW1lKTtcbiAgfSBlbHNlIGlmICghaXNDb21wb3NpbmcpIHtcbiAgICBpZiAoaXNGYWxsYmFja0NvbXBvc2l0aW9uU3RhcnQoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCkpIHtcbiAgICAgIGV2ZW50VHlwZSA9ICdvbkNvbXBvc2l0aW9uU3RhcnQnO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc0ZhbGxiYWNrQ29tcG9zaXRpb25FbmQoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCkpIHtcbiAgICBldmVudFR5cGUgPSAnb25Db21wb3NpdGlvbkVuZCc7XG4gIH1cblxuICBpZiAoIWV2ZW50VHlwZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHVzZUZhbGxiYWNrQ29tcG9zaXRpb25EYXRhICYmICFpc1VzaW5nS29yZWFuSU1FKG5hdGl2ZUV2ZW50KSkge1xuICAgIC8vIFRoZSBjdXJyZW50IGNvbXBvc2l0aW9uIGlzIHN0b3JlZCBzdGF0aWNhbGx5IGFuZCBtdXN0IG5vdCBiZVxuICAgIC8vIG92ZXJ3cml0dGVuIHdoaWxlIGNvbXBvc2l0aW9uIGNvbnRpbnVlcy5cbiAgICBpZiAoIWlzQ29tcG9zaW5nICYmIGV2ZW50VHlwZSA9PT0gJ29uQ29tcG9zaXRpb25TdGFydCcpIHtcbiAgICAgIGlzQ29tcG9zaW5nID0gaW5pdGlhbGl6ZShuYXRpdmVFdmVudFRhcmdldCk7XG4gICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT09ICdvbkNvbXBvc2l0aW9uRW5kJykge1xuICAgICAgaWYgKGlzQ29tcG9zaW5nKSB7XG4gICAgICAgIGZhbGxiYWNrRGF0YSA9IGdldERhdGEoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgbGlzdGVuZXJzID0gYWNjdW11bGF0ZVR3b1BoYXNlTGlzdGVuZXJzKHRhcmdldEluc3QsIGV2ZW50VHlwZSk7XG5cbiAgaWYgKGxpc3RlbmVycy5sZW5ndGggPiAwKSB7XG4gICAgdmFyIGV2ZW50ID0gbmV3IFN5bnRoZXRpY0NvbXBvc2l0aW9uRXZlbnQoZXZlbnRUeXBlLCBkb21FdmVudE5hbWUsIG51bGwsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gICAgZGlzcGF0Y2hRdWV1ZS5wdXNoKHtcbiAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgIGxpc3RlbmVyczogbGlzdGVuZXJzXG4gICAgfSk7XG5cbiAgICBpZiAoZmFsbGJhY2tEYXRhKSB7XG4gICAgICAvLyBJbmplY3QgZGF0YSBnZW5lcmF0ZWQgZnJvbSBmYWxsYmFjayBwYXRoIGludG8gdGhlIHN5bnRoZXRpYyBldmVudC5cbiAgICAgIC8vIFRoaXMgbWF0Y2hlcyB0aGUgcHJvcGVydHkgb2YgbmF0aXZlIENvbXBvc2l0aW9uRXZlbnRJbnRlcmZhY2UuXG4gICAgICBldmVudC5kYXRhID0gZmFsbGJhY2tEYXRhO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgY3VzdG9tRGF0YSA9IGdldERhdGFGcm9tQ3VzdG9tRXZlbnQobmF0aXZlRXZlbnQpO1xuXG4gICAgICBpZiAoY3VzdG9tRGF0YSAhPT0gbnVsbCkge1xuICAgICAgICBldmVudC5kYXRhID0gY3VzdG9tRGF0YTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0TmF0aXZlQmVmb3JlSW5wdXRDaGFycyhkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KSB7XG4gIHN3aXRjaCAoZG9tRXZlbnROYW1lKSB7XG4gICAgY2FzZSAnY29tcG9zaXRpb25lbmQnOlxuICAgICAgcmV0dXJuIGdldERhdGFGcm9tQ3VzdG9tRXZlbnQobmF0aXZlRXZlbnQpO1xuXG4gICAgY2FzZSAna2V5cHJlc3MnOlxuICAgICAgLyoqXG4gICAgICAgKiBJZiBuYXRpdmUgYHRleHRJbnB1dGAgZXZlbnRzIGFyZSBhdmFpbGFibGUsIG91ciBnb2FsIGlzIHRvIG1ha2VcbiAgICAgICAqIHVzZSBvZiB0aGVtLiBIb3dldmVyLCB0aGVyZSBpcyBhIHNwZWNpYWwgY2FzZTogdGhlIHNwYWNlYmFyIGtleS5cbiAgICAgICAqIEluIFdlYmtpdCwgcHJldmVudGluZyBkZWZhdWx0IG9uIGEgc3BhY2ViYXIgYHRleHRJbnB1dGAgZXZlbnRcbiAgICAgICAqIGNhbmNlbHMgY2hhcmFjdGVyIGluc2VydGlvbiwgYnV0IGl0ICphbHNvKiBjYXVzZXMgdGhlIGJyb3dzZXJcbiAgICAgICAqIHRvIGZhbGwgYmFjayB0byBpdHMgZGVmYXVsdCBzcGFjZWJhciBiZWhhdmlvciBvZiBzY3JvbGxpbmcgdGhlXG4gICAgICAgKiBwYWdlLlxuICAgICAgICpcbiAgICAgICAqIFRyYWNraW5nIGF0OlxuICAgICAgICogaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTM1NTEwM1xuICAgICAgICpcbiAgICAgICAqIFRvIGF2b2lkIHRoaXMgaXNzdWUsIHVzZSB0aGUga2V5cHJlc3MgZXZlbnQgYXMgaWYgbm8gYHRleHRJbnB1dGBcbiAgICAgICAqIGV2ZW50IGlzIGF2YWlsYWJsZS5cbiAgICAgICAqL1xuICAgICAgdmFyIHdoaWNoID0gbmF0aXZlRXZlbnQud2hpY2g7XG5cbiAgICAgIGlmICh3aGljaCAhPT0gU1BBQ0VCQVJfQ09ERSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaGFzU3BhY2VLZXlwcmVzcyA9IHRydWU7XG4gICAgICByZXR1cm4gU1BBQ0VCQVJfQ0hBUjtcblxuICAgIGNhc2UgJ3RleHRJbnB1dCc6XG4gICAgICAvLyBSZWNvcmQgdGhlIGNoYXJhY3RlcnMgdG8gYmUgYWRkZWQgdG8gdGhlIERPTS5cbiAgICAgIHZhciBjaGFycyA9IG5hdGl2ZUV2ZW50LmRhdGE7IC8vIElmIGl0J3MgYSBzcGFjZWJhciBjaGFyYWN0ZXIsIGFzc3VtZSB0aGF0IHdlIGhhdmUgYWxyZWFkeSBoYW5kbGVkXG4gICAgICAvLyBpdCBhdCB0aGUga2V5cHJlc3MgbGV2ZWwgYW5kIGJhaWwgaW1tZWRpYXRlbHkuIEFuZHJvaWQgQ2hyb21lXG4gICAgICAvLyBkb2Vzbid0IGdpdmUgdXMga2V5Y29kZXMsIHNvIHdlIG5lZWQgdG8gaWdub3JlIGl0LlxuXG4gICAgICBpZiAoY2hhcnMgPT09IFNQQUNFQkFSX0NIQVIgJiYgaGFzU3BhY2VLZXlwcmVzcykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNoYXJzO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIEZvciBvdGhlciBuYXRpdmUgZXZlbnQgdHlwZXMsIGRvIG5vdGhpbmcuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuLyoqXG4gKiBGb3IgYnJvd3NlcnMgdGhhdCBkbyBub3QgcHJvdmlkZSB0aGUgYHRleHRJbnB1dGAgZXZlbnQsIGV4dHJhY3QgdGhlXG4gKiBhcHByb3ByaWF0ZSBzdHJpbmcgdG8gdXNlIGZvciBTeW50aGV0aWNJbnB1dEV2ZW50LlxuICovXG5cblxuZnVuY3Rpb24gZ2V0RmFsbGJhY2tCZWZvcmVJbnB1dENoYXJzKGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpIHtcbiAgLy8gSWYgd2UgYXJlIGN1cnJlbnRseSBjb21wb3NpbmcgKElNRSkgYW5kIHVzaW5nIGEgZmFsbGJhY2sgdG8gZG8gc28sXG4gIC8vIHRyeSB0byBleHRyYWN0IHRoZSBjb21wb3NlZCBjaGFyYWN0ZXJzIGZyb20gdGhlIGZhbGxiYWNrIG9iamVjdC5cbiAgLy8gSWYgY29tcG9zaXRpb24gZXZlbnQgaXMgYXZhaWxhYmxlLCB3ZSBleHRyYWN0IGEgc3RyaW5nIG9ubHkgYXRcbiAgLy8gY29tcG9zaXRpb25ldmVudCwgb3RoZXJ3aXNlIGV4dHJhY3QgaXQgYXQgZmFsbGJhY2sgZXZlbnRzLlxuICBpZiAoaXNDb21wb3NpbmcpIHtcbiAgICBpZiAoZG9tRXZlbnROYW1lID09PSAnY29tcG9zaXRpb25lbmQnIHx8ICFjYW5Vc2VDb21wb3NpdGlvbkV2ZW50ICYmIGlzRmFsbGJhY2tDb21wb3NpdGlvbkVuZChkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KSkge1xuICAgICAgdmFyIGNoYXJzID0gZ2V0RGF0YSgpO1xuICAgICAgcmVzZXQoKTtcbiAgICAgIGlzQ29tcG9zaW5nID0gZmFsc2U7XG4gICAgICByZXR1cm4gY2hhcnM7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzd2l0Y2ggKGRvbUV2ZW50TmFtZSkge1xuICAgIGNhc2UgJ3Bhc3RlJzpcbiAgICAgIC8vIElmIGEgcGFzdGUgZXZlbnQgb2NjdXJzIGFmdGVyIGEga2V5cHJlc3MsIHRocm93IG91dCB0aGUgaW5wdXRcbiAgICAgIC8vIGNoYXJzLiBQYXN0ZSBldmVudHMgc2hvdWxkIG5vdCBsZWFkIHRvIEJlZm9yZUlucHV0IGV2ZW50cy5cbiAgICAgIHJldHVybiBudWxsO1xuXG4gICAgY2FzZSAna2V5cHJlc3MnOlxuICAgICAgLyoqXG4gICAgICAgKiBBcyBvZiB2MjcsIEZpcmVmb3ggbWF5IGZpcmUga2V5cHJlc3MgZXZlbnRzIGV2ZW4gd2hlbiBubyBjaGFyYWN0ZXJcbiAgICAgICAqIHdpbGwgYmUgaW5zZXJ0ZWQuIEEgZmV3IHBvc3NpYmlsaXRpZXM6XG4gICAgICAgKlxuICAgICAgICogLSBgd2hpY2hgIGlzIGAwYC4gQXJyb3cga2V5cywgRXNjIGtleSwgZXRjLlxuICAgICAgICpcbiAgICAgICAqIC0gYHdoaWNoYCBpcyB0aGUgcHJlc3NlZCBrZXkgY29kZSwgYnV0IG5vIGNoYXIgaXMgYXZhaWxhYmxlLlxuICAgICAgICogICBFeDogJ0FsdEdyICsgZGAgaW4gUG9saXNoLiBUaGVyZSBpcyBubyBtb2RpZmllZCBjaGFyYWN0ZXIgZm9yXG4gICAgICAgKiAgIHRoaXMga2V5IGNvbWJpbmF0aW9uIGFuZCBubyBjaGFyYWN0ZXIgaXMgaW5zZXJ0ZWQgaW50byB0aGVcbiAgICAgICAqICAgZG9jdW1lbnQsIGJ1dCBGRiBmaXJlcyB0aGUga2V5cHJlc3MgZm9yIGNoYXIgY29kZSBgMTAwYCBhbnl3YXkuXG4gICAgICAgKiAgIE5vIGBpbnB1dGAgZXZlbnQgd2lsbCBvY2N1ci5cbiAgICAgICAqXG4gICAgICAgKiAtIGB3aGljaGAgaXMgdGhlIHByZXNzZWQga2V5IGNvZGUsIGJ1dCBhIGNvbW1hbmQgY29tYmluYXRpb24gaXNcbiAgICAgICAqICAgYmVpbmcgdXNlZC4gRXg6IGBDbWQrQ2AuIE5vIGNoYXJhY3RlciBpcyBpbnNlcnRlZCwgYW5kIG5vXG4gICAgICAgKiAgIGBpbnB1dGAgZXZlbnQgd2lsbCBvY2N1ci5cbiAgICAgICAqL1xuICAgICAgaWYgKCFpc0tleXByZXNzQ29tbWFuZChuYXRpdmVFdmVudCkpIHtcbiAgICAgICAgLy8gSUUgZmlyZXMgdGhlIGBrZXlwcmVzc2AgZXZlbnQgd2hlbiBhIHVzZXIgdHlwZXMgYW4gZW1vamkgdmlhXG4gICAgICAgIC8vIFRvdWNoIGtleWJvYXJkIG9mIFdpbmRvd3MuICBJbiBzdWNoIGEgY2FzZSwgdGhlIGBjaGFyYCBwcm9wZXJ0eVxuICAgICAgICAvLyBob2xkcyBhbiBlbW9qaSBjaGFyYWN0ZXIgbGlrZSBgXFx1RDgzRFxcdURFMEFgLiAgQmVjYXVzZSBpdHMgbGVuZ3RoXG4gICAgICAgIC8vIGlzIDIsIHRoZSBwcm9wZXJ0eSBgd2hpY2hgIGRvZXMgbm90IHJlcHJlc2VudCBhbiBlbW9qaSBjb3JyZWN0bHkuXG4gICAgICAgIC8vIEluIHN1Y2ggYSBjYXNlLCB3ZSBkaXJlY3RseSByZXR1cm4gdGhlIGBjaGFyYCBwcm9wZXJ0eSBpbnN0ZWFkIG9mXG4gICAgICAgIC8vIHVzaW5nIGB3aGljaGAuXG4gICAgICAgIGlmIChuYXRpdmVFdmVudC5jaGFyICYmIG5hdGl2ZUV2ZW50LmNoYXIubGVuZ3RoID4gMSkge1xuICAgICAgICAgIHJldHVybiBuYXRpdmVFdmVudC5jaGFyO1xuICAgICAgICB9IGVsc2UgaWYgKG5hdGl2ZUV2ZW50LndoaWNoKSB7XG4gICAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUobmF0aXZlRXZlbnQud2hpY2gpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuXG4gICAgY2FzZSAnY29tcG9zaXRpb25lbmQnOlxuICAgICAgcmV0dXJuIHVzZUZhbGxiYWNrQ29tcG9zaXRpb25EYXRhICYmICFpc1VzaW5nS29yZWFuSU1FKG5hdGl2ZUV2ZW50KSA/IG51bGwgOiBuYXRpdmVFdmVudC5kYXRhO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBudWxsO1xuICB9XG59XG4vKipcbiAqIEV4dHJhY3QgYSBTeW50aGV0aWNJbnB1dEV2ZW50IGZvciBgYmVmb3JlSW5wdXRgLCBiYXNlZCBvbiBlaXRoZXIgbmF0aXZlXG4gKiBgdGV4dElucHV0YCBvciBmYWxsYmFjayBiZWhhdmlvci5cbiAqXG4gKiBAcmV0dXJuIHs/b2JqZWN0fSBBIFN5bnRoZXRpY0lucHV0RXZlbnQuXG4gKi9cblxuXG5mdW5jdGlvbiBleHRyYWN0QmVmb3JlSW5wdXRFdmVudChkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCkge1xuICB2YXIgY2hhcnM7XG5cbiAgaWYgKGNhblVzZVRleHRJbnB1dEV2ZW50KSB7XG4gICAgY2hhcnMgPSBnZXROYXRpdmVCZWZvcmVJbnB1dENoYXJzKGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpO1xuICB9IGVsc2Uge1xuICAgIGNoYXJzID0gZ2V0RmFsbGJhY2tCZWZvcmVJbnB1dENoYXJzKGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpO1xuICB9IC8vIElmIG5vIGNoYXJhY3RlcnMgYXJlIGJlaW5nIGluc2VydGVkLCBubyBCZWZvcmVJbnB1dCBldmVudCBzaG91bGRcbiAgLy8gYmUgZmlyZWQuXG5cblxuICBpZiAoIWNoYXJzKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgbGlzdGVuZXJzID0gYWNjdW11bGF0ZVR3b1BoYXNlTGlzdGVuZXJzKHRhcmdldEluc3QsICdvbkJlZm9yZUlucHV0Jyk7XG5cbiAgaWYgKGxpc3RlbmVycy5sZW5ndGggPiAwKSB7XG4gICAgdmFyIGV2ZW50ID0gbmV3IFN5bnRoZXRpY0lucHV0RXZlbnQoJ29uQmVmb3JlSW5wdXQnLCAnYmVmb3JlaW5wdXQnLCBudWxsLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICAgIGRpc3BhdGNoUXVldWUucHVzaCh7XG4gICAgICBldmVudDogZXZlbnQsXG4gICAgICBsaXN0ZW5lcnM6IGxpc3RlbmVyc1xuICAgIH0pO1xuICAgIGV2ZW50LmRhdGEgPSBjaGFycztcbiAgfVxufVxuLyoqXG4gKiBDcmVhdGUgYW4gYG9uQmVmb3JlSW5wdXRgIGV2ZW50IHRvIG1hdGNoXG4gKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEzL1dELURPTS1MZXZlbC0zLUV2ZW50cy0yMDEzMTEwNS8jZXZlbnRzLWlucHV0ZXZlbnRzLlxuICpcbiAqIFRoaXMgZXZlbnQgcGx1Z2luIGlzIGJhc2VkIG9uIHRoZSBuYXRpdmUgYHRleHRJbnB1dGAgZXZlbnRcbiAqIGF2YWlsYWJsZSBpbiBDaHJvbWUsIFNhZmFyaSwgT3BlcmEsIGFuZCBJRS4gVGhpcyBldmVudCBmaXJlcyBhZnRlclxuICogYG9uS2V5UHJlc3NgIGFuZCBgb25Db21wb3NpdGlvbkVuZGAsIGJ1dCBiZWZvcmUgYG9uSW5wdXRgLlxuICpcbiAqIGBiZWZvcmVJbnB1dGAgaXMgc3BlYydkIGJ1dCBub3QgaW1wbGVtZW50ZWQgaW4gYW55IGJyb3dzZXJzLCBhbmRcbiAqIHRoZSBgaW5wdXRgIGV2ZW50IGRvZXMgbm90IHByb3ZpZGUgYW55IHVzZWZ1bCBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IGhhc1xuICogYWN0dWFsbHkgYmVlbiBhZGRlZCwgY29udHJhcnkgdG8gdGhlIHNwZWMuIFRodXMsIGB0ZXh0SW5wdXRgIGlzIHRoZSBiZXN0XG4gKiBhdmFpbGFibGUgZXZlbnQgdG8gaWRlbnRpZnkgdGhlIGNoYXJhY3RlcnMgdGhhdCBoYXZlIGFjdHVhbGx5IGJlZW4gaW5zZXJ0ZWRcbiAqIGludG8gdGhlIHRhcmdldCBub2RlLlxuICpcbiAqIFRoaXMgcGx1Z2luIGlzIGFsc28gcmVzcG9uc2libGUgZm9yIGVtaXR0aW5nIGBjb21wb3NpdGlvbmAgZXZlbnRzLCB0aHVzXG4gKiBhbGxvd2luZyB1cyB0byBzaGFyZSBjb21wb3NpdGlvbiBmYWxsYmFjayBjb2RlIGZvciBib3RoIGBiZWZvcmVJbnB1dGAgYW5kXG4gKiBgY29tcG9zaXRpb25gIGV2ZW50IHR5cGVzLlxuICovXG5cblxuZnVuY3Rpb24gZXh0cmFjdEV2ZW50cyhkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyKSB7XG4gIGV4dHJhY3RDb21wb3NpdGlvbkV2ZW50KGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgZXh0cmFjdEJlZm9yZUlucHV0RXZlbnQoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xufVxuXG4vKipcbiAqIEBzZWUgaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvdGhlLWlucHV0LWVsZW1lbnQuaHRtbCNpbnB1dC10eXBlLWF0dHItc3VtbWFyeVxuICovXG52YXIgc3VwcG9ydGVkSW5wdXRUeXBlcyA9IHtcbiAgY29sb3I6IHRydWUsXG4gIGRhdGU6IHRydWUsXG4gIGRhdGV0aW1lOiB0cnVlLFxuICAnZGF0ZXRpbWUtbG9jYWwnOiB0cnVlLFxuICBlbWFpbDogdHJ1ZSxcbiAgbW9udGg6IHRydWUsXG4gIG51bWJlcjogdHJ1ZSxcbiAgcGFzc3dvcmQ6IHRydWUsXG4gIHJhbmdlOiB0cnVlLFxuICBzZWFyY2g6IHRydWUsXG4gIHRlbDogdHJ1ZSxcbiAgdGV4dDogdHJ1ZSxcbiAgdGltZTogdHJ1ZSxcbiAgdXJsOiB0cnVlLFxuICB3ZWVrOiB0cnVlXG59O1xuXG5mdW5jdGlvbiBpc1RleHRJbnB1dEVsZW1lbnQoZWxlbSkge1xuICB2YXIgbm9kZU5hbWUgPSBlbGVtICYmIGVsZW0ubm9kZU5hbWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gIGlmIChub2RlTmFtZSA9PT0gJ2lucHV0Jykge1xuICAgIHJldHVybiAhIXN1cHBvcnRlZElucHV0VHlwZXNbZWxlbS50eXBlXTtcbiAgfVxuXG4gIGlmIChub2RlTmFtZSA9PT0gJ3RleHRhcmVhJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhbiBldmVudCBpcyBzdXBwb3J0ZWQgaW4gdGhlIGN1cnJlbnQgZXhlY3V0aW9uIGVudmlyb25tZW50LlxuICpcbiAqIE5PVEU6IFRoaXMgd2lsbCBub3Qgd29yayBjb3JyZWN0bHkgZm9yIG5vbi1nZW5lcmljIGV2ZW50cyBzdWNoIGFzIGBjaGFuZ2VgLFxuICogYHJlc2V0YCwgYGxvYWRgLCBgZXJyb3JgLCBhbmQgYHNlbGVjdGAuXG4gKlxuICogQm9ycm93cyBmcm9tIE1vZGVybml6ci5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lU3VmZml4IEV2ZW50IG5hbWUsIGUuZy4gXCJjbGlja1wiLlxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgZXZlbnQgaXMgc3VwcG9ydGVkLlxuICogQGludGVybmFsXG4gKiBAbGljZW5zZSBNb2Rlcm5penIgMy4wLjBwcmUgKEN1c3RvbSBCdWlsZCkgfCBNSVRcbiAqL1xuXG5mdW5jdGlvbiBpc0V2ZW50U3VwcG9ydGVkKGV2ZW50TmFtZVN1ZmZpeCkge1xuICBpZiAoIWNhblVzZURPTSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBldmVudE5hbWUgPSAnb24nICsgZXZlbnROYW1lU3VmZml4O1xuICB2YXIgaXNTdXBwb3J0ZWQgPSAoZXZlbnROYW1lIGluIGRvY3VtZW50KTtcblxuICBpZiAoIWlzU3VwcG9ydGVkKSB7XG4gICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShldmVudE5hbWUsICdyZXR1cm47Jyk7XG4gICAgaXNTdXBwb3J0ZWQgPSB0eXBlb2YgZWxlbWVudFtldmVudE5hbWVdID09PSAnZnVuY3Rpb24nO1xuICB9XG5cbiAgcmV0dXJuIGlzU3VwcG9ydGVkO1xufVxuXG5mdW5jdGlvbiByZWdpc3RlckV2ZW50cyQxKCkge1xuICByZWdpc3RlclR3b1BoYXNlRXZlbnQoJ29uQ2hhbmdlJywgWydjaGFuZ2UnLCAnY2xpY2snLCAnZm9jdXNpbicsICdmb2N1c291dCcsICdpbnB1dCcsICdrZXlkb3duJywgJ2tleXVwJywgJ3NlbGVjdGlvbmNoYW5nZSddKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQW5kQWNjdW11bGF0ZUNoYW5nZUV2ZW50KGRpc3BhdGNoUXVldWUsIGluc3QsIG5hdGl2ZUV2ZW50LCB0YXJnZXQpIHtcbiAgLy8gRmxhZyB0aGlzIGV2ZW50IGxvb3AgYXMgbmVlZGluZyBzdGF0ZSByZXN0b3JlLlxuICBlbnF1ZXVlU3RhdGVSZXN0b3JlKHRhcmdldCk7XG4gIHZhciBsaXN0ZW5lcnMgPSBhY2N1bXVsYXRlVHdvUGhhc2VMaXN0ZW5lcnMoaW5zdCwgJ29uQ2hhbmdlJyk7XG5cbiAgaWYgKGxpc3RlbmVycy5sZW5ndGggPiAwKSB7XG4gICAgdmFyIGV2ZW50ID0gbmV3IFN5bnRoZXRpY0V2ZW50KCdvbkNoYW5nZScsICdjaGFuZ2UnLCBudWxsLCBuYXRpdmVFdmVudCwgdGFyZ2V0KTtcbiAgICBkaXNwYXRjaFF1ZXVlLnB1c2goe1xuICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgbGlzdGVuZXJzOiBsaXN0ZW5lcnNcbiAgICB9KTtcbiAgfVxufVxuLyoqXG4gKiBGb3IgSUUgc2hpbXNcbiAqL1xuXG5cbnZhciBhY3RpdmVFbGVtZW50ID0gbnVsbDtcbnZhciBhY3RpdmVFbGVtZW50SW5zdCA9IG51bGw7XG4vKipcbiAqIFNFQ1RJT046IGhhbmRsZSBgY2hhbmdlYCBldmVudFxuICovXG5cbmZ1bmN0aW9uIHNob3VsZFVzZUNoYW5nZUV2ZW50KGVsZW0pIHtcbiAgdmFyIG5vZGVOYW1lID0gZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiBub2RlTmFtZSA9PT0gJ3NlbGVjdCcgfHwgbm9kZU5hbWUgPT09ICdpbnB1dCcgJiYgZWxlbS50eXBlID09PSAnZmlsZSc7XG59XG5cbmZ1bmN0aW9uIG1hbnVhbERpc3BhdGNoQ2hhbmdlRXZlbnQobmF0aXZlRXZlbnQpIHtcbiAgdmFyIGRpc3BhdGNoUXVldWUgPSBbXTtcbiAgY3JlYXRlQW5kQWNjdW11bGF0ZUNoYW5nZUV2ZW50KGRpc3BhdGNoUXVldWUsIGFjdGl2ZUVsZW1lbnRJbnN0LCBuYXRpdmVFdmVudCwgZ2V0RXZlbnRUYXJnZXQobmF0aXZlRXZlbnQpKTsgLy8gSWYgY2hhbmdlIGFuZCBwcm9wZXJ0eWNoYW5nZSBidWJibGVkLCB3ZSdkIGp1c3QgYmluZCB0byBpdCBsaWtlIGFsbCB0aGVcbiAgLy8gb3RoZXIgZXZlbnRzIGFuZCBoYXZlIGl0IGdvIHRocm91Z2ggUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLiBTaW5jZSBpdFxuICAvLyBkb2Vzbid0LCB3ZSBtYW51YWxseSBsaXN0ZW4gZm9yIHRoZSBldmVudHMgYW5kIHNvIHdlIGhhdmUgdG8gZW5xdWV1ZSBhbmRcbiAgLy8gcHJvY2VzcyB0aGUgYWJzdHJhY3QgZXZlbnQgbWFudWFsbHkuXG4gIC8vXG4gIC8vIEJhdGNoaW5nIGlzIG5lY2Vzc2FyeSBoZXJlIGluIG9yZGVyIHRvIGVuc3VyZSB0aGF0IGFsbCBldmVudCBoYW5kbGVycyBydW5cbiAgLy8gYmVmb3JlIHRoZSBuZXh0IHJlcmVuZGVyIChpbmNsdWRpbmcgZXZlbnQgaGFuZGxlcnMgYXR0YWNoZWQgdG8gYW5jZXN0b3JcbiAgLy8gZWxlbWVudHMgaW5zdGVhZCBvZiBkaXJlY3RseSBvbiB0aGUgaW5wdXQpLiBXaXRob3V0IHRoaXMsIGNvbnRyb2xsZWRcbiAgLy8gY29tcG9uZW50cyBkb24ndCB3b3JrIHByb3Blcmx5IGluIGNvbmp1bmN0aW9uIHdpdGggZXZlbnQgYnViYmxpbmcgYmVjYXVzZVxuICAvLyB0aGUgY29tcG9uZW50IGlzIHJlcmVuZGVyZWQgYW5kIHRoZSB2YWx1ZSByZXZlcnRlZCBiZWZvcmUgYWxsIHRoZSBldmVudFxuICAvLyBoYW5kbGVycyBjYW4gcnVuLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy83MDguXG5cbiAgYmF0Y2hlZFVwZGF0ZXMocnVuRXZlbnRJbkJhdGNoLCBkaXNwYXRjaFF1ZXVlKTtcbn1cblxuZnVuY3Rpb24gcnVuRXZlbnRJbkJhdGNoKGRpc3BhdGNoUXVldWUpIHtcbiAgcHJvY2Vzc0Rpc3BhdGNoUXVldWUoZGlzcGF0Y2hRdWV1ZSwgMCk7XG59XG5cbmZ1bmN0aW9uIGdldEluc3RJZlZhbHVlQ2hhbmdlZCh0YXJnZXRJbnN0KSB7XG4gIHZhciB0YXJnZXROb2RlID0gZ2V0Tm9kZUZyb21JbnN0YW5jZSh0YXJnZXRJbnN0KTtcblxuICBpZiAodXBkYXRlVmFsdWVJZkNoYW5nZWQodGFyZ2V0Tm9kZSkpIHtcbiAgICByZXR1cm4gdGFyZ2V0SW5zdDtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRUYXJnZXRJbnN0Rm9yQ2hhbmdlRXZlbnQoZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0KSB7XG4gIGlmIChkb21FdmVudE5hbWUgPT09ICdjaGFuZ2UnKSB7XG4gICAgcmV0dXJuIHRhcmdldEluc3Q7XG4gIH1cbn1cbi8qKlxuICogU0VDVElPTjogaGFuZGxlIGBpbnB1dGAgZXZlbnRcbiAqL1xuXG5cbnZhciBpc0lucHV0RXZlbnRTdXBwb3J0ZWQgPSBmYWxzZTtcblxuaWYgKGNhblVzZURPTSkge1xuICAvLyBJRTkgY2xhaW1zIHRvIHN1cHBvcnQgdGhlIGlucHV0IGV2ZW50IGJ1dCBmYWlscyB0byB0cmlnZ2VyIGl0IHdoZW5cbiAgLy8gZGVsZXRpbmcgdGV4dCwgc28gd2UgaWdub3JlIGl0cyBpbnB1dCBldmVudHMuXG4gIGlzSW5wdXRFdmVudFN1cHBvcnRlZCA9IGlzRXZlbnRTdXBwb3J0ZWQoJ2lucHV0JykgJiYgKCFkb2N1bWVudC5kb2N1bWVudE1vZGUgfHwgZG9jdW1lbnQuZG9jdW1lbnRNb2RlID4gOSk7XG59XG4vKipcbiAqIChGb3IgSUUgPD05KSBTdGFydHMgdHJhY2tpbmcgcHJvcGVydHljaGFuZ2UgZXZlbnRzIG9uIHRoZSBwYXNzZWQtaW4gZWxlbWVudFxuICogYW5kIG92ZXJyaWRlIHRoZSB2YWx1ZSBwcm9wZXJ0eSBzbyB0aGF0IHdlIGNhbiBkaXN0aW5ndWlzaCB1c2VyIGV2ZW50cyBmcm9tXG4gKiB2YWx1ZSBjaGFuZ2VzIGluIEpTLlxuICovXG5cblxuZnVuY3Rpb24gc3RhcnRXYXRjaGluZ0ZvclZhbHVlQ2hhbmdlKHRhcmdldCwgdGFyZ2V0SW5zdCkge1xuICBhY3RpdmVFbGVtZW50ID0gdGFyZ2V0O1xuICBhY3RpdmVFbGVtZW50SW5zdCA9IHRhcmdldEluc3Q7XG4gIGFjdGl2ZUVsZW1lbnQuYXR0YWNoRXZlbnQoJ29ucHJvcGVydHljaGFuZ2UnLCBoYW5kbGVQcm9wZXJ0eUNoYW5nZSk7XG59XG4vKipcbiAqIChGb3IgSUUgPD05KSBSZW1vdmVzIHRoZSBldmVudCBsaXN0ZW5lcnMgZnJvbSB0aGUgY3VycmVudGx5LXRyYWNrZWQgZWxlbWVudCxcbiAqIGlmIGFueSBleGlzdHMuXG4gKi9cblxuXG5mdW5jdGlvbiBzdG9wV2F0Y2hpbmdGb3JWYWx1ZUNoYW5nZSgpIHtcbiAgaWYgKCFhY3RpdmVFbGVtZW50KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgYWN0aXZlRWxlbWVudC5kZXRhY2hFdmVudCgnb25wcm9wZXJ0eWNoYW5nZScsIGhhbmRsZVByb3BlcnR5Q2hhbmdlKTtcbiAgYWN0aXZlRWxlbWVudCA9IG51bGw7XG4gIGFjdGl2ZUVsZW1lbnRJbnN0ID0gbnVsbDtcbn1cbi8qKlxuICogKEZvciBJRSA8PTkpIEhhbmRsZXMgYSBwcm9wZXJ0eWNoYW5nZSBldmVudCwgc2VuZGluZyBhIGBjaGFuZ2VgIGV2ZW50IGlmXG4gKiB0aGUgdmFsdWUgb2YgdGhlIGFjdGl2ZSBlbGVtZW50IGhhcyBjaGFuZ2VkLlxuICovXG5cblxuZnVuY3Rpb24gaGFuZGxlUHJvcGVydHlDaGFuZ2UobmF0aXZlRXZlbnQpIHtcbiAgaWYgKG5hdGl2ZUV2ZW50LnByb3BlcnR5TmFtZSAhPT0gJ3ZhbHVlJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChnZXRJbnN0SWZWYWx1ZUNoYW5nZWQoYWN0aXZlRWxlbWVudEluc3QpKSB7XG4gICAgbWFudWFsRGlzcGF0Y2hDaGFuZ2VFdmVudChuYXRpdmVFdmVudCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlRXZlbnRzRm9ySW5wdXRFdmVudFBvbHlmaWxsKGRvbUV2ZW50TmFtZSwgdGFyZ2V0LCB0YXJnZXRJbnN0KSB7XG4gIGlmIChkb21FdmVudE5hbWUgPT09ICdmb2N1c2luJykge1xuICAgIC8vIEluIElFOSwgcHJvcGVydHljaGFuZ2UgZmlyZXMgZm9yIG1vc3QgaW5wdXQgZXZlbnRzIGJ1dCBpcyBidWdneSBhbmRcbiAgICAvLyBkb2Vzbid0IGZpcmUgd2hlbiB0ZXh0IGlzIGRlbGV0ZWQsIGJ1dCBjb252ZW5pZW50bHksIHNlbGVjdGlvbmNoYW5nZVxuICAgIC8vIGFwcGVhcnMgdG8gZmlyZSBpbiBhbGwgb2YgdGhlIHJlbWFpbmluZyBjYXNlcyBzbyB3ZSBjYXRjaCB0aG9zZSBhbmRcbiAgICAvLyBmb3J3YXJkIHRoZSBldmVudCBpZiB0aGUgdmFsdWUgaGFzIGNoYW5nZWRcbiAgICAvLyBJbiBlaXRoZXIgY2FzZSwgd2UgZG9uJ3Qgd2FudCB0byBjYWxsIHRoZSBldmVudCBoYW5kbGVyIGlmIHRoZSB2YWx1ZVxuICAgIC8vIGlzIGNoYW5nZWQgZnJvbSBKUyBzbyB3ZSByZWRlZmluZSBhIHNldHRlciBmb3IgYC52YWx1ZWAgdGhhdCB1cGRhdGVzXG4gICAgLy8gb3VyIGFjdGl2ZUVsZW1lbnRWYWx1ZSB2YXJpYWJsZSwgYWxsb3dpbmcgdXMgdG8gaWdub3JlIHRob3NlIGNoYW5nZXNcbiAgICAvL1xuICAgIC8vIHN0b3BXYXRjaGluZygpIHNob3VsZCBiZSBhIG5vb3AgaGVyZSBidXQgd2UgY2FsbCBpdCBqdXN0IGluIGNhc2Ugd2VcbiAgICAvLyBtaXNzZWQgYSBibHVyIGV2ZW50IHNvbWVob3cuXG4gICAgc3RvcFdhdGNoaW5nRm9yVmFsdWVDaGFuZ2UoKTtcbiAgICBzdGFydFdhdGNoaW5nRm9yVmFsdWVDaGFuZ2UodGFyZ2V0LCB0YXJnZXRJbnN0KTtcbiAgfSBlbHNlIGlmIChkb21FdmVudE5hbWUgPT09ICdmb2N1c291dCcpIHtcbiAgICBzdG9wV2F0Y2hpbmdGb3JWYWx1ZUNoYW5nZSgpO1xuICB9XG59IC8vIEZvciBJRTggYW5kIElFOS5cblxuXG5mdW5jdGlvbiBnZXRUYXJnZXRJbnN0Rm9ySW5wdXRFdmVudFBvbHlmaWxsKGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCkge1xuICBpZiAoZG9tRXZlbnROYW1lID09PSAnc2VsZWN0aW9uY2hhbmdlJyB8fCBkb21FdmVudE5hbWUgPT09ICdrZXl1cCcgfHwgZG9tRXZlbnROYW1lID09PSAna2V5ZG93bicpIHtcbiAgICAvLyBPbiB0aGUgc2VsZWN0aW9uY2hhbmdlIGV2ZW50LCB0aGUgdGFyZ2V0IGlzIGp1c3QgZG9jdW1lbnQgd2hpY2ggaXNuJ3RcbiAgICAvLyBoZWxwZnVsIGZvciB1cyBzbyBqdXN0IGNoZWNrIGFjdGl2ZUVsZW1lbnQgaW5zdGVhZC5cbiAgICAvL1xuICAgIC8vIDk5JSBvZiB0aGUgdGltZSwga2V5ZG93biBhbmQga2V5dXAgYXJlbid0IG5lY2Vzc2FyeS4gSUU4IGZhaWxzIHRvIGZpcmVcbiAgICAvLyBwcm9wZXJ0eWNoYW5nZSBvbiB0aGUgZmlyc3QgaW5wdXQgZXZlbnQgYWZ0ZXIgc2V0dGluZyBgdmFsdWVgIGZyb20gYVxuICAgIC8vIHNjcmlwdCBhbmQgZmlyZXMgb25seSBrZXlkb3duLCBrZXlwcmVzcywga2V5dXAuIENhdGNoaW5nIGtleXVwIHVzdWFsbHlcbiAgICAvLyBnZXRzIGl0IGFuZCBjYXRjaGluZyBrZXlkb3duIGxldHMgdXMgZmlyZSBhbiBldmVudCBmb3IgdGhlIGZpcnN0XG4gICAgLy8ga2V5c3Ryb2tlIGlmIHVzZXIgZG9lcyBhIGtleSByZXBlYXQgKGl0J2xsIGJlIGEgbGl0dGxlIGRlbGF5ZWQ6IHJpZ2h0XG4gICAgLy8gYmVmb3JlIHRoZSBzZWNvbmQga2V5c3Ryb2tlKS4gT3RoZXIgaW5wdXQgbWV0aG9kcyAoZS5nLiwgcGFzdGUpIHNlZW0gdG9cbiAgICAvLyBmaXJlIHNlbGVjdGlvbmNoYW5nZSBub3JtYWxseS5cbiAgICByZXR1cm4gZ2V0SW5zdElmVmFsdWVDaGFuZ2VkKGFjdGl2ZUVsZW1lbnRJbnN0KTtcbiAgfVxufVxuLyoqXG4gKiBTRUNUSU9OOiBoYW5kbGUgYGNsaWNrYCBldmVudFxuICovXG5cblxuZnVuY3Rpb24gc2hvdWxkVXNlQ2xpY2tFdmVudChlbGVtKSB7XG4gIC8vIFVzZSB0aGUgYGNsaWNrYCBldmVudCB0byBkZXRlY3QgY2hhbmdlcyB0byBjaGVja2JveCBhbmQgcmFkaW8gaW5wdXRzLlxuICAvLyBUaGlzIGFwcHJvYWNoIHdvcmtzIGFjcm9zcyBhbGwgYnJvd3NlcnMsIHdoZXJlYXMgYGNoYW5nZWAgZG9lcyBub3QgZmlyZVxuICAvLyB1bnRpbCBgYmx1cmAgaW4gSUU4LlxuICB2YXIgbm9kZU5hbWUgPSBlbGVtLm5vZGVOYW1lO1xuICByZXR1cm4gbm9kZU5hbWUgJiYgbm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2lucHV0JyAmJiAoZWxlbS50eXBlID09PSAnY2hlY2tib3gnIHx8IGVsZW0udHlwZSA9PT0gJ3JhZGlvJyk7XG59XG5cbmZ1bmN0aW9uIGdldFRhcmdldEluc3RGb3JDbGlja0V2ZW50KGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCkge1xuICBpZiAoZG9tRXZlbnROYW1lID09PSAnY2xpY2snKSB7XG4gICAgcmV0dXJuIGdldEluc3RJZlZhbHVlQ2hhbmdlZCh0YXJnZXRJbnN0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRUYXJnZXRJbnN0Rm9ySW5wdXRPckNoYW5nZUV2ZW50KGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCkge1xuICBpZiAoZG9tRXZlbnROYW1lID09PSAnaW5wdXQnIHx8IGRvbUV2ZW50TmFtZSA9PT0gJ2NoYW5nZScpIHtcbiAgICByZXR1cm4gZ2V0SW5zdElmVmFsdWVDaGFuZ2VkKHRhcmdldEluc3QpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUNvbnRyb2xsZWRJbnB1dEJsdXIobm9kZSkge1xuICB2YXIgc3RhdGUgPSBub2RlLl93cmFwcGVyU3RhdGU7XG5cbiAgaWYgKCFzdGF0ZSB8fCAhc3RhdGUuY29udHJvbGxlZCB8fCBub2RlLnR5cGUgIT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAge1xuICAgIC8vIElmIGNvbnRyb2xsZWQsIGFzc2lnbiB0aGUgdmFsdWUgYXR0cmlidXRlIHRvIHRoZSBjdXJyZW50IHZhbHVlIG9uIGJsdXJcbiAgICBzZXREZWZhdWx0VmFsdWUobm9kZSwgJ251bWJlcicsIG5vZGUudmFsdWUpO1xuICB9XG59XG4vKipcbiAqIFRoaXMgcGx1Z2luIGNyZWF0ZXMgYW4gYG9uQ2hhbmdlYCBldmVudCB0aGF0IG5vcm1hbGl6ZXMgY2hhbmdlIGV2ZW50c1xuICogYWNyb3NzIGZvcm0gZWxlbWVudHMuIFRoaXMgZXZlbnQgZmlyZXMgYXQgYSB0aW1lIHdoZW4gaXQncyBwb3NzaWJsZSB0b1xuICogY2hhbmdlIHRoZSBlbGVtZW50J3MgdmFsdWUgd2l0aG91dCBzZWVpbmcgYSBmbGlja2VyLlxuICpcbiAqIFN1cHBvcnRlZCBlbGVtZW50cyBhcmU6XG4gKiAtIGlucHV0IChzZWUgYGlzVGV4dElucHV0RWxlbWVudGApXG4gKiAtIHRleHRhcmVhXG4gKiAtIHNlbGVjdFxuICovXG5cblxuZnVuY3Rpb24gZXh0cmFjdEV2ZW50cyQxKGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0LCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIpIHtcbiAgdmFyIHRhcmdldE5vZGUgPSB0YXJnZXRJbnN0ID8gZ2V0Tm9kZUZyb21JbnN0YW5jZSh0YXJnZXRJbnN0KSA6IHdpbmRvdztcbiAgdmFyIGdldFRhcmdldEluc3RGdW5jLCBoYW5kbGVFdmVudEZ1bmM7XG5cbiAgaWYgKHNob3VsZFVzZUNoYW5nZUV2ZW50KHRhcmdldE5vZGUpKSB7XG4gICAgZ2V0VGFyZ2V0SW5zdEZ1bmMgPSBnZXRUYXJnZXRJbnN0Rm9yQ2hhbmdlRXZlbnQ7XG4gIH0gZWxzZSBpZiAoaXNUZXh0SW5wdXRFbGVtZW50KHRhcmdldE5vZGUpKSB7XG4gICAgaWYgKGlzSW5wdXRFdmVudFN1cHBvcnRlZCkge1xuICAgICAgZ2V0VGFyZ2V0SW5zdEZ1bmMgPSBnZXRUYXJnZXRJbnN0Rm9ySW5wdXRPckNoYW5nZUV2ZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICBnZXRUYXJnZXRJbnN0RnVuYyA9IGdldFRhcmdldEluc3RGb3JJbnB1dEV2ZW50UG9seWZpbGw7XG4gICAgICBoYW5kbGVFdmVudEZ1bmMgPSBoYW5kbGVFdmVudHNGb3JJbnB1dEV2ZW50UG9seWZpbGw7XG4gICAgfVxuICB9IGVsc2UgaWYgKHNob3VsZFVzZUNsaWNrRXZlbnQodGFyZ2V0Tm9kZSkpIHtcbiAgICBnZXRUYXJnZXRJbnN0RnVuYyA9IGdldFRhcmdldEluc3RGb3JDbGlja0V2ZW50O1xuICB9XG5cbiAgaWYgKGdldFRhcmdldEluc3RGdW5jKSB7XG4gICAgdmFyIGluc3QgPSBnZXRUYXJnZXRJbnN0RnVuYyhkb21FdmVudE5hbWUsIHRhcmdldEluc3QpO1xuXG4gICAgaWYgKGluc3QpIHtcbiAgICAgIGNyZWF0ZUFuZEFjY3VtdWxhdGVDaGFuZ2VFdmVudChkaXNwYXRjaFF1ZXVlLCBpbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGlmIChoYW5kbGVFdmVudEZ1bmMpIHtcbiAgICBoYW5kbGVFdmVudEZ1bmMoZG9tRXZlbnROYW1lLCB0YXJnZXROb2RlLCB0YXJnZXRJbnN0KTtcbiAgfSAvLyBXaGVuIGJsdXJyaW5nLCBzZXQgdGhlIHZhbHVlIGF0dHJpYnV0ZSBmb3IgbnVtYmVyIGlucHV0c1xuXG5cbiAgaWYgKGRvbUV2ZW50TmFtZSA9PT0gJ2ZvY3Vzb3V0Jykge1xuICAgIGhhbmRsZUNvbnRyb2xsZWRJbnB1dEJsdXIodGFyZ2V0Tm9kZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVnaXN0ZXJFdmVudHMkMigpIHtcbiAgcmVnaXN0ZXJEaXJlY3RFdmVudCgnb25Nb3VzZUVudGVyJywgWydtb3VzZW91dCcsICdtb3VzZW92ZXInXSk7XG4gIHJlZ2lzdGVyRGlyZWN0RXZlbnQoJ29uTW91c2VMZWF2ZScsIFsnbW91c2VvdXQnLCAnbW91c2VvdmVyJ10pO1xuICByZWdpc3RlckRpcmVjdEV2ZW50KCdvblBvaW50ZXJFbnRlcicsIFsncG9pbnRlcm91dCcsICdwb2ludGVyb3ZlciddKTtcbiAgcmVnaXN0ZXJEaXJlY3RFdmVudCgnb25Qb2ludGVyTGVhdmUnLCBbJ3BvaW50ZXJvdXQnLCAncG9pbnRlcm92ZXInXSk7XG59XG4vKipcbiAqIEZvciBhbG1vc3QgZXZlcnkgaW50ZXJhY3Rpb24gd2UgY2FyZSBhYm91dCwgdGhlcmUgd2lsbCBiZSBib3RoIGEgdG9wLWxldmVsXG4gKiBgbW91c2VvdmVyYCBhbmQgYG1vdXNlb3V0YCBldmVudCB0aGF0IG9jY3Vycy4gT25seSB1c2UgYG1vdXNlb3V0YCBzbyB0aGF0XG4gKiB3ZSBkbyBub3QgZXh0cmFjdCBkdXBsaWNhdGUgZXZlbnRzLiBIb3dldmVyLCBtb3ZpbmcgdGhlIG1vdXNlIGludG8gdGhlXG4gKiBicm93c2VyIGZyb20gb3V0c2lkZSB3aWxsIG5vdCBmaXJlIGEgYG1vdXNlb3V0YCBldmVudC4gSW4gdGhpcyBjYXNlLCB3ZSB1c2VcbiAqIHRoZSBgbW91c2VvdmVyYCB0b3AtbGV2ZWwgZXZlbnQuXG4gKi9cblxuXG5mdW5jdGlvbiBleHRyYWN0RXZlbnRzJDIoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lcikge1xuICB2YXIgaXNPdmVyRXZlbnQgPSBkb21FdmVudE5hbWUgPT09ICdtb3VzZW92ZXInIHx8IGRvbUV2ZW50TmFtZSA9PT0gJ3BvaW50ZXJvdmVyJztcbiAgdmFyIGlzT3V0RXZlbnQgPSBkb21FdmVudE5hbWUgPT09ICdtb3VzZW91dCcgfHwgZG9tRXZlbnROYW1lID09PSAncG9pbnRlcm91dCc7XG5cbiAgaWYgKGlzT3ZlckV2ZW50ICYmIChldmVudFN5c3RlbUZsYWdzICYgSVNfUkVQTEFZRUQpID09PSAwKSB7XG4gICAgLy8gSWYgdGhpcyBpcyBhbiBvdmVyIGV2ZW50IHdpdGggYSB0YXJnZXQsIHdlIG1pZ2h0IGhhdmUgYWxyZWFkeSBkaXNwYXRjaGVkXG4gICAgLy8gdGhlIGV2ZW50IGluIHRoZSBvdXQgZXZlbnQgb2YgdGhlIG90aGVyIHRhcmdldC4gSWYgdGhpcyBpcyByZXBsYXllZCxcbiAgICAvLyB0aGVuIGl0J3MgYmVjYXVzZSB3ZSBjb3VsZG4ndCBkaXNwYXRjaCBhZ2FpbnN0IHRoaXMgdGFyZ2V0IHByZXZpb3VzbHlcbiAgICAvLyBzbyB3ZSBoYXZlIHRvIGRvIGl0IG5vdyBpbnN0ZWFkLlxuICAgIHZhciByZWxhdGVkID0gbmF0aXZlRXZlbnQucmVsYXRlZFRhcmdldCB8fCBuYXRpdmVFdmVudC5mcm9tRWxlbWVudDtcblxuICAgIGlmIChyZWxhdGVkKSB7XG4gICAgICAvLyBJZiB0aGUgcmVsYXRlZCBub2RlIGlzIG1hbmFnZWQgYnkgUmVhY3QsIHdlIGNhbiBhc3N1bWUgdGhhdCB3ZSBoYXZlXG4gICAgICAvLyBhbHJlYWR5IGRpc3BhdGNoZWQgdGhlIGNvcnJlc3BvbmRpbmcgZXZlbnRzIGR1cmluZyBpdHMgbW91c2VvdXQuXG4gICAgICBpZiAoZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUocmVsYXRlZCkgfHwgaXNDb250YWluZXJNYXJrZWRBc1Jvb3QocmVsYXRlZCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmICghaXNPdXRFdmVudCAmJiAhaXNPdmVyRXZlbnQpIHtcbiAgICAvLyBNdXN0IG5vdCBiZSBhIG1vdXNlIG9yIHBvaW50ZXIgaW4gb3Igb3V0IC0gaWdub3JpbmcuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHdpbjsgLy8gVE9ETzogd2h5IGlzIHRoaXMgbnVsbGFibGUgaW4gdGhlIHR5cGVzIGJ1dCB3ZSByZWFkIGZyb20gaXQ/XG5cbiAgaWYgKG5hdGl2ZUV2ZW50VGFyZ2V0LndpbmRvdyA9PT0gbmF0aXZlRXZlbnRUYXJnZXQpIHtcbiAgICAvLyBgbmF0aXZlRXZlbnRUYXJnZXRgIGlzIHByb2JhYmx5IGEgd2luZG93IG9iamVjdC5cbiAgICB3aW4gPSBuYXRpdmVFdmVudFRhcmdldDtcbiAgfSBlbHNlIHtcbiAgICAvLyBUT0RPOiBGaWd1cmUgb3V0IHdoeSBgb3duZXJEb2N1bWVudGAgaXMgc29tZXRpbWVzIHVuZGVmaW5lZCBpbiBJRTguXG4gICAgdmFyIGRvYyA9IG5hdGl2ZUV2ZW50VGFyZ2V0Lm93bmVyRG9jdW1lbnQ7XG5cbiAgICBpZiAoZG9jKSB7XG4gICAgICB3aW4gPSBkb2MuZGVmYXVsdFZpZXcgfHwgZG9jLnBhcmVudFdpbmRvdztcbiAgICB9IGVsc2Uge1xuICAgICAgd2luID0gd2luZG93O1xuICAgIH1cbiAgfVxuXG4gIHZhciBmcm9tO1xuICB2YXIgdG87XG5cbiAgaWYgKGlzT3V0RXZlbnQpIHtcbiAgICB2YXIgX3JlbGF0ZWQgPSBuYXRpdmVFdmVudC5yZWxhdGVkVGFyZ2V0IHx8IG5hdGl2ZUV2ZW50LnRvRWxlbWVudDtcblxuICAgIGZyb20gPSB0YXJnZXRJbnN0O1xuICAgIHRvID0gX3JlbGF0ZWQgPyBnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZShfcmVsYXRlZCkgOiBudWxsO1xuXG4gICAgaWYgKHRvICE9PSBudWxsKSB7XG4gICAgICB2YXIgbmVhcmVzdE1vdW50ZWQgPSBnZXROZWFyZXN0TW91bnRlZEZpYmVyKHRvKTtcblxuICAgICAgaWYgKHRvICE9PSBuZWFyZXN0TW91bnRlZCB8fCB0by50YWcgIT09IEhvc3RDb21wb25lbnQgJiYgdG8udGFnICE9PSBIb3N0VGV4dCkge1xuICAgICAgICB0byA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIE1vdmluZyB0byBhIG5vZGUgZnJvbSBvdXRzaWRlIHRoZSB3aW5kb3cuXG4gICAgZnJvbSA9IG51bGw7XG4gICAgdG8gPSB0YXJnZXRJbnN0O1xuICB9XG5cbiAgaWYgKGZyb20gPT09IHRvKSB7XG4gICAgLy8gTm90aGluZyBwZXJ0YWlucyB0byBvdXIgbWFuYWdlZCBjb21wb25lbnRzLlxuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNNb3VzZUV2ZW50O1xuICB2YXIgbGVhdmVFdmVudFR5cGUgPSAnb25Nb3VzZUxlYXZlJztcbiAgdmFyIGVudGVyRXZlbnRUeXBlID0gJ29uTW91c2VFbnRlcic7XG4gIHZhciBldmVudFR5cGVQcmVmaXggPSAnbW91c2UnO1xuXG4gIGlmIChkb21FdmVudE5hbWUgPT09ICdwb2ludGVyb3V0JyB8fCBkb21FdmVudE5hbWUgPT09ICdwb2ludGVyb3ZlcicpIHtcbiAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNQb2ludGVyRXZlbnQ7XG4gICAgbGVhdmVFdmVudFR5cGUgPSAnb25Qb2ludGVyTGVhdmUnO1xuICAgIGVudGVyRXZlbnRUeXBlID0gJ29uUG9pbnRlckVudGVyJztcbiAgICBldmVudFR5cGVQcmVmaXggPSAncG9pbnRlcic7XG4gIH1cblxuICB2YXIgZnJvbU5vZGUgPSBmcm9tID09IG51bGwgPyB3aW4gOiBnZXROb2RlRnJvbUluc3RhbmNlKGZyb20pO1xuICB2YXIgdG9Ob2RlID0gdG8gPT0gbnVsbCA/IHdpbiA6IGdldE5vZGVGcm9tSW5zdGFuY2UodG8pO1xuICB2YXIgbGVhdmUgPSBuZXcgU3ludGhldGljRXZlbnRDdG9yKGxlYXZlRXZlbnRUeXBlLCBldmVudFR5cGVQcmVmaXggKyAnbGVhdmUnLCBmcm9tLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICBsZWF2ZS50YXJnZXQgPSBmcm9tTm9kZTtcbiAgbGVhdmUucmVsYXRlZFRhcmdldCA9IHRvTm9kZTtcbiAgdmFyIGVudGVyID0gbnVsbDsgLy8gV2Ugc2hvdWxkIG9ubHkgcHJvY2VzcyB0aGlzIG5hdGl2ZUV2ZW50IGlmIHdlIGFyZSBwcm9jZXNzaW5nXG4gIC8vIHRoZSBmaXJzdCBhbmNlc3Rvci4gTmV4dCB0aW1lLCB3ZSB3aWxsIGlnbm9yZSB0aGUgZXZlbnQuXG5cbiAgdmFyIG5hdGl2ZVRhcmdldEluc3QgPSBnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZShuYXRpdmVFdmVudFRhcmdldCk7XG5cbiAgaWYgKG5hdGl2ZVRhcmdldEluc3QgPT09IHRhcmdldEluc3QpIHtcbiAgICB2YXIgZW50ZXJFdmVudCA9IG5ldyBTeW50aGV0aWNFdmVudEN0b3IoZW50ZXJFdmVudFR5cGUsIGV2ZW50VHlwZVByZWZpeCArICdlbnRlcicsIHRvLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICAgIGVudGVyRXZlbnQudGFyZ2V0ID0gdG9Ob2RlO1xuICAgIGVudGVyRXZlbnQucmVsYXRlZFRhcmdldCA9IGZyb21Ob2RlO1xuICAgIGVudGVyID0gZW50ZXJFdmVudDtcbiAgfVxuXG4gIGFjY3VtdWxhdGVFbnRlckxlYXZlVHdvUGhhc2VMaXN0ZW5lcnMoZGlzcGF0Y2hRdWV1ZSwgbGVhdmUsIGVudGVyLCBmcm9tLCB0byk7XG59XG5cbi8qKlxuICogaW5saW5lZCBPYmplY3QuaXMgcG9seWZpbGwgdG8gYXZvaWQgcmVxdWlyaW5nIGNvbnN1bWVycyBzaGlwIHRoZWlyIG93blxuICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2lzXG4gKi9cbmZ1bmN0aW9uIGlzKHgsIHkpIHtcbiAgcmV0dXJuIHggPT09IHkgJiYgKHggIT09IDAgfHwgMSAvIHggPT09IDEgLyB5KSB8fCB4ICE9PSB4ICYmIHkgIT09IHkgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgO1xufVxuXG52YXIgb2JqZWN0SXMgPSB0eXBlb2YgT2JqZWN0LmlzID09PSAnZnVuY3Rpb24nID8gT2JqZWN0LmlzIDogaXM7XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSQyID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbi8qKlxuICogUGVyZm9ybXMgZXF1YWxpdHkgYnkgaXRlcmF0aW5nIHRocm91Z2gga2V5cyBvbiBhbiBvYmplY3QgYW5kIHJldHVybmluZyBmYWxzZVxuICogd2hlbiBhbnkga2V5IGhhcyB2YWx1ZXMgd2hpY2ggYXJlIG5vdCBzdHJpY3RseSBlcXVhbCBiZXR3ZWVuIHRoZSBhcmd1bWVudHMuXG4gKiBSZXR1cm5zIHRydWUgd2hlbiB0aGUgdmFsdWVzIG9mIGFsbCBrZXlzIGFyZSBzdHJpY3RseSBlcXVhbC5cbiAqL1xuXG5mdW5jdGlvbiBzaGFsbG93RXF1YWwob2JqQSwgb2JqQikge1xuICBpZiAob2JqZWN0SXMob2JqQSwgb2JqQikpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb2JqQSAhPT0gJ29iamVjdCcgfHwgb2JqQSA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqQiAhPT0gJ29iamVjdCcgfHwgb2JqQiA9PT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBrZXlzQSA9IE9iamVjdC5rZXlzKG9iakEpO1xuICB2YXIga2V5c0IgPSBPYmplY3Qua2V5cyhvYmpCKTtcblxuICBpZiAoa2V5c0EubGVuZ3RoICE9PSBrZXlzQi5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gLy8gVGVzdCBmb3IgQSdzIGtleXMgZGlmZmVyZW50IGZyb20gQi5cblxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5c0EubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoIWhhc093blByb3BlcnR5JDIuY2FsbChvYmpCLCBrZXlzQVtpXSkgfHwgIW9iamVjdElzKG9iakFba2V5c0FbaV1dLCBvYmpCW2tleXNBW2ldXSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBHaXZlbiBhbnkgbm9kZSByZXR1cm4gdGhlIGZpcnN0IGxlYWYgbm9kZSB3aXRob3V0IGNoaWxkcmVuLlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudHxET01UZXh0Tm9kZX0gbm9kZVxuICogQHJldHVybiB7RE9NRWxlbWVudHxET01UZXh0Tm9kZX1cbiAqL1xuXG5mdW5jdGlvbiBnZXRMZWFmTm9kZShub2RlKSB7XG4gIHdoaWxlIChub2RlICYmIG5vZGUuZmlyc3RDaGlsZCkge1xuICAgIG5vZGUgPSBub2RlLmZpcnN0Q2hpbGQ7XG4gIH1cblxuICByZXR1cm4gbm9kZTtcbn1cbi8qKlxuICogR2V0IHRoZSBuZXh0IHNpYmxpbmcgd2l0aGluIGEgY29udGFpbmVyLiBUaGlzIHdpbGwgd2FsayB1cCB0aGVcbiAqIERPTSBpZiBhIG5vZGUncyBzaWJsaW5ncyBoYXZlIGJlZW4gZXhoYXVzdGVkLlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudHxET01UZXh0Tm9kZX0gbm9kZVxuICogQHJldHVybiB7P0RPTUVsZW1lbnR8RE9NVGV4dE5vZGV9XG4gKi9cblxuXG5mdW5jdGlvbiBnZXRTaWJsaW5nTm9kZShub2RlKSB7XG4gIHdoaWxlIChub2RlKSB7XG4gICAgaWYgKG5vZGUubmV4dFNpYmxpbmcpIHtcbiAgICAgIHJldHVybiBub2RlLm5leHRTaWJsaW5nO1xuICAgIH1cblxuICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGU7XG4gIH1cbn1cbi8qKlxuICogR2V0IG9iamVjdCBkZXNjcmliaW5nIHRoZSBub2RlcyB3aGljaCBjb250YWluIGNoYXJhY3RlcnMgYXQgb2Zmc2V0LlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudHxET01UZXh0Tm9kZX0gcm9vdFxuICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldFxuICogQHJldHVybiB7P29iamVjdH1cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldE5vZGVGb3JDaGFyYWN0ZXJPZmZzZXQocm9vdCwgb2Zmc2V0KSB7XG4gIHZhciBub2RlID0gZ2V0TGVhZk5vZGUocm9vdCk7XG4gIHZhciBub2RlU3RhcnQgPSAwO1xuICB2YXIgbm9kZUVuZCA9IDA7XG5cbiAgd2hpbGUgKG5vZGUpIHtcbiAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gVEVYVF9OT0RFKSB7XG4gICAgICBub2RlRW5kID0gbm9kZVN0YXJ0ICsgbm9kZS50ZXh0Q29udGVudC5sZW5ndGg7XG5cbiAgICAgIGlmIChub2RlU3RhcnQgPD0gb2Zmc2V0ICYmIG5vZGVFbmQgPj0gb2Zmc2V0KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbm9kZTogbm9kZSxcbiAgICAgICAgICBvZmZzZXQ6IG9mZnNldCAtIG5vZGVTdGFydFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBub2RlU3RhcnQgPSBub2RlRW5kO1xuICAgIH1cblxuICAgIG5vZGUgPSBnZXRMZWFmTm9kZShnZXRTaWJsaW5nTm9kZShub2RlKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR9IG91dGVyTm9kZVxuICogQHJldHVybiB7P29iamVjdH1cbiAqL1xuXG5mdW5jdGlvbiBnZXRPZmZzZXRzKG91dGVyTm9kZSkge1xuICB2YXIgb3duZXJEb2N1bWVudCA9IG91dGVyTm9kZS5vd25lckRvY3VtZW50O1xuICB2YXIgd2luID0gb3duZXJEb2N1bWVudCAmJiBvd25lckRvY3VtZW50LmRlZmF1bHRWaWV3IHx8IHdpbmRvdztcbiAgdmFyIHNlbGVjdGlvbiA9IHdpbi5nZXRTZWxlY3Rpb24gJiYgd2luLmdldFNlbGVjdGlvbigpO1xuXG4gIGlmICghc2VsZWN0aW9uIHx8IHNlbGVjdGlvbi5yYW5nZUNvdW50ID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgYW5jaG9yTm9kZSA9IHNlbGVjdGlvbi5hbmNob3JOb2RlLFxuICAgICAgYW5jaG9yT2Zmc2V0ID0gc2VsZWN0aW9uLmFuY2hvck9mZnNldCxcbiAgICAgIGZvY3VzTm9kZSA9IHNlbGVjdGlvbi5mb2N1c05vZGUsXG4gICAgICBmb2N1c09mZnNldCA9IHNlbGVjdGlvbi5mb2N1c09mZnNldDsgLy8gSW4gRmlyZWZveCwgYW5jaG9yTm9kZSBhbmQgZm9jdXNOb2RlIGNhbiBiZSBcImFub255bW91cyBkaXZzXCIsIGUuZy4gdGhlXG4gIC8vIHVwL2Rvd24gYnV0dG9ucyBvbiBhbiA8aW5wdXQgdHlwZT1cIm51bWJlclwiPi4gQW5vbnltb3VzIGRpdnMgZG8gbm90IHNlZW0gdG9cbiAgLy8gZXhwb3NlIHByb3BlcnRpZXMsIHRyaWdnZXJpbmcgYSBcIlBlcm1pc3Npb24gZGVuaWVkIGVycm9yXCIgaWYgYW55IG9mIGl0c1xuICAvLyBwcm9wZXJ0aWVzIGFyZSBhY2Nlc3NlZC4gVGhlIG9ubHkgc2VlbWluZ2x5IHBvc3NpYmxlIHdheSB0byBhdm9pZCBlcnJvcmluZ1xuICAvLyBpcyB0byBhY2Nlc3MgYSBwcm9wZXJ0eSB0aGF0IHR5cGljYWxseSB3b3JrcyBmb3Igbm9uLWFub255bW91cyBkaXZzIGFuZFxuICAvLyBjYXRjaCBhbnkgZXJyb3IgdGhhdCBtYXkgb3RoZXJ3aXNlIGFyaXNlLiBTZWVcbiAgLy8gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA4NDI3XG5cbiAgdHJ5IHtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtZXhwcmVzc2lvbnMgKi9cbiAgICBhbmNob3JOb2RlLm5vZGVUeXBlO1xuICAgIGZvY3VzTm9kZS5ub2RlVHlwZTtcbiAgICAvKiBlc2xpbnQtZW5hYmxlIG5vLXVudXNlZC1leHByZXNzaW9ucyAqL1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gZ2V0TW9kZXJuT2Zmc2V0c0Zyb21Qb2ludHMob3V0ZXJOb2RlLCBhbmNob3JOb2RlLCBhbmNob3JPZmZzZXQsIGZvY3VzTm9kZSwgZm9jdXNPZmZzZXQpO1xufVxuLyoqXG4gKiBSZXR1cm5zIHtzdGFydCwgZW5kfSB3aGVyZSBgc3RhcnRgIGlzIHRoZSBjaGFyYWN0ZXIvY29kZXBvaW50IGluZGV4IG9mXG4gKiAoYW5jaG9yTm9kZSwgYW5jaG9yT2Zmc2V0KSB3aXRoaW4gdGhlIHRleHRDb250ZW50IG9mIGBvdXRlck5vZGVgLCBhbmRcbiAqIGBlbmRgIGlzIHRoZSBpbmRleCBvZiAoZm9jdXNOb2RlLCBmb2N1c09mZnNldCkuXG4gKlxuICogUmV0dXJucyBudWxsIGlmIHlvdSBwYXNzIGluIGdhcmJhZ2UgaW5wdXQgYnV0IHdlIHNob3VsZCBwcm9iYWJseSBqdXN0IGNyYXNoLlxuICpcbiAqIEV4cG9ydGVkIG9ubHkgZm9yIHRlc3RpbmcuXG4gKi9cblxuZnVuY3Rpb24gZ2V0TW9kZXJuT2Zmc2V0c0Zyb21Qb2ludHMob3V0ZXJOb2RlLCBhbmNob3JOb2RlLCBhbmNob3JPZmZzZXQsIGZvY3VzTm9kZSwgZm9jdXNPZmZzZXQpIHtcbiAgdmFyIGxlbmd0aCA9IDA7XG4gIHZhciBzdGFydCA9IC0xO1xuICB2YXIgZW5kID0gLTE7XG4gIHZhciBpbmRleFdpdGhpbkFuY2hvciA9IDA7XG4gIHZhciBpbmRleFdpdGhpbkZvY3VzID0gMDtcbiAgdmFyIG5vZGUgPSBvdXRlck5vZGU7XG4gIHZhciBwYXJlbnROb2RlID0gbnVsbDtcblxuICBvdXRlcjogd2hpbGUgKHRydWUpIHtcbiAgICB2YXIgbmV4dCA9IG51bGw7XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKG5vZGUgPT09IGFuY2hvck5vZGUgJiYgKGFuY2hvck9mZnNldCA9PT0gMCB8fCBub2RlLm5vZGVUeXBlID09PSBURVhUX05PREUpKSB7XG4gICAgICAgIHN0YXJ0ID0gbGVuZ3RoICsgYW5jaG9yT2Zmc2V0O1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZSA9PT0gZm9jdXNOb2RlICYmIChmb2N1c09mZnNldCA9PT0gMCB8fCBub2RlLm5vZGVUeXBlID09PSBURVhUX05PREUpKSB7XG4gICAgICAgIGVuZCA9IGxlbmd0aCArIGZvY3VzT2Zmc2V0O1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gVEVYVF9OT0RFKSB7XG4gICAgICAgIGxlbmd0aCArPSBub2RlLm5vZGVWYWx1ZS5sZW5ndGg7XG4gICAgICB9XG5cbiAgICAgIGlmICgobmV4dCA9IG5vZGUuZmlyc3RDaGlsZCkgPT09IG51bGwpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9IC8vIE1vdmluZyBmcm9tIGBub2RlYCB0byBpdHMgZmlyc3QgY2hpbGQgYG5leHRgLlxuXG5cbiAgICAgIHBhcmVudE5vZGUgPSBub2RlO1xuICAgICAgbm9kZSA9IG5leHQ7XG4gICAgfVxuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmIChub2RlID09PSBvdXRlck5vZGUpIHtcbiAgICAgICAgLy8gSWYgYG91dGVyTm9kZWAgaGFzIGNoaWxkcmVuLCB0aGlzIGlzIGFsd2F5cyB0aGUgc2Vjb25kIHRpbWUgdmlzaXRpbmdcbiAgICAgICAgLy8gaXQuIElmIGl0IGhhcyBubyBjaGlsZHJlbiwgdGhpcyBpcyBzdGlsbCB0aGUgZmlyc3QgbG9vcCwgYW5kIHRoZSBvbmx5XG4gICAgICAgIC8vIHZhbGlkIHNlbGVjdGlvbiBpcyBhbmNob3JOb2RlIGFuZCBmb2N1c05vZGUgYm90aCBlcXVhbCB0byB0aGlzIG5vZGVcbiAgICAgICAgLy8gYW5kIGJvdGggb2Zmc2V0cyAwLCBpbiB3aGljaCBjYXNlIHdlIHdpbGwgaGF2ZSBoYW5kbGVkIGFib3ZlLlxuICAgICAgICBicmVhayBvdXRlcjtcbiAgICAgIH1cblxuICAgICAgaWYgKHBhcmVudE5vZGUgPT09IGFuY2hvck5vZGUgJiYgKytpbmRleFdpdGhpbkFuY2hvciA9PT0gYW5jaG9yT2Zmc2V0KSB7XG4gICAgICAgIHN0YXJ0ID0gbGVuZ3RoO1xuICAgICAgfVxuXG4gICAgICBpZiAocGFyZW50Tm9kZSA9PT0gZm9jdXNOb2RlICYmICsraW5kZXhXaXRoaW5Gb2N1cyA9PT0gZm9jdXNPZmZzZXQpIHtcbiAgICAgICAgZW5kID0gbGVuZ3RoO1xuICAgICAgfVxuXG4gICAgICBpZiAoKG5leHQgPSBub2RlLm5leHRTaWJsaW5nKSAhPT0gbnVsbCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgbm9kZSA9IHBhcmVudE5vZGU7XG4gICAgICBwYXJlbnROb2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICAgIH0gLy8gTW92aW5nIGZyb20gYG5vZGVgIHRvIGl0cyBuZXh0IHNpYmxpbmcgYG5leHRgLlxuXG5cbiAgICBub2RlID0gbmV4dDtcbiAgfVxuXG4gIGlmIChzdGFydCA9PT0gLTEgfHwgZW5kID09PSAtMSkge1xuICAgIC8vIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbi4gKFdvdWxkIGhhcHBlbiBpZiB0aGUgYW5jaG9yL2ZvY3VzIG5vZGVzIGFyZW4ndFxuICAgIC8vIGFjdHVhbGx5IGluc2lkZSB0aGUgcGFzc2VkLWluIG5vZGUuKVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzdGFydDogc3RhcnQsXG4gICAgZW5kOiBlbmRcbiAgfTtcbn1cbi8qKlxuICogSW4gbW9kZXJuIG5vbi1JRSBicm93c2Vycywgd2UgY2FuIHN1cHBvcnQgYm90aCBmb3J3YXJkIGFuZCBiYWNrd2FyZFxuICogc2VsZWN0aW9ucy5cbiAqXG4gKiBOb3RlOiBJRTEwKyBzdXBwb3J0cyB0aGUgU2VsZWN0aW9uIG9iamVjdCwgYnV0IGl0IGRvZXMgbm90IHN1cHBvcnRcbiAqIHRoZSBgZXh0ZW5kYCBtZXRob2QsIHdoaWNoIG1lYW5zIHRoYXQgZXZlbiBpbiBtb2Rlcm4gSUUsIGl0J3Mgbm90IHBvc3NpYmxlXG4gKiB0byBwcm9ncmFtbWF0aWNhbGx5IGNyZWF0ZSBhIGJhY2t3YXJkIHNlbGVjdGlvbi4gVGh1cywgZm9yIGFsbCBJRVxuICogdmVyc2lvbnMsIHdlIHVzZSB0aGUgb2xkIElFIEFQSSB0byBjcmVhdGUgb3VyIHNlbGVjdGlvbnMuXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fERPTVRleHROb2RlfSBub2RlXG4gKiBAcGFyYW0ge29iamVjdH0gb2Zmc2V0c1xuICovXG5cbmZ1bmN0aW9uIHNldE9mZnNldHMobm9kZSwgb2Zmc2V0cykge1xuICB2YXIgZG9jID0gbm9kZS5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50O1xuICB2YXIgd2luID0gZG9jICYmIGRvYy5kZWZhdWx0VmlldyB8fCB3aW5kb3c7IC8vIEVkZ2UgZmFpbHMgd2l0aCBcIk9iamVjdCBleHBlY3RlZFwiIGluIHNvbWUgc2NlbmFyaW9zLlxuICAvLyAoRm9yIGluc3RhbmNlOiBUaW55TUNFIGVkaXRvciB1c2VkIGluIGEgbGlzdCBjb21wb25lbnQgdGhhdCBzdXBwb3J0cyBwYXN0aW5nIHRvIGFkZCBtb3JlLFxuICAvLyBmYWlscyB3aGVuIHBhc3RpbmcgMTAwKyBpdGVtcylcblxuICBpZiAoIXdpbi5nZXRTZWxlY3Rpb24pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgc2VsZWN0aW9uID0gd2luLmdldFNlbGVjdGlvbigpO1xuICB2YXIgbGVuZ3RoID0gbm9kZS50ZXh0Q29udGVudC5sZW5ndGg7XG4gIHZhciBzdGFydCA9IE1hdGgubWluKG9mZnNldHMuc3RhcnQsIGxlbmd0aCk7XG4gIHZhciBlbmQgPSBvZmZzZXRzLmVuZCA9PT0gdW5kZWZpbmVkID8gc3RhcnQgOiBNYXRoLm1pbihvZmZzZXRzLmVuZCwgbGVuZ3RoKTsgLy8gSUUgMTEgdXNlcyBtb2Rlcm4gc2VsZWN0aW9uLCBidXQgZG9lc24ndCBzdXBwb3J0IHRoZSBleHRlbmQgbWV0aG9kLlxuICAvLyBGbGlwIGJhY2t3YXJkIHNlbGVjdGlvbnMsIHNvIHdlIGNhbiBzZXQgd2l0aCBhIHNpbmdsZSByYW5nZS5cblxuICBpZiAoIXNlbGVjdGlvbi5leHRlbmQgJiYgc3RhcnQgPiBlbmQpIHtcbiAgICB2YXIgdGVtcCA9IGVuZDtcbiAgICBlbmQgPSBzdGFydDtcbiAgICBzdGFydCA9IHRlbXA7XG4gIH1cblxuICB2YXIgc3RhcnRNYXJrZXIgPSBnZXROb2RlRm9yQ2hhcmFjdGVyT2Zmc2V0KG5vZGUsIHN0YXJ0KTtcbiAgdmFyIGVuZE1hcmtlciA9IGdldE5vZGVGb3JDaGFyYWN0ZXJPZmZzZXQobm9kZSwgZW5kKTtcblxuICBpZiAoc3RhcnRNYXJrZXIgJiYgZW5kTWFya2VyKSB7XG4gICAgaWYgKHNlbGVjdGlvbi5yYW5nZUNvdW50ID09PSAxICYmIHNlbGVjdGlvbi5hbmNob3JOb2RlID09PSBzdGFydE1hcmtlci5ub2RlICYmIHNlbGVjdGlvbi5hbmNob3JPZmZzZXQgPT09IHN0YXJ0TWFya2VyLm9mZnNldCAmJiBzZWxlY3Rpb24uZm9jdXNOb2RlID09PSBlbmRNYXJrZXIubm9kZSAmJiBzZWxlY3Rpb24uZm9jdXNPZmZzZXQgPT09IGVuZE1hcmtlci5vZmZzZXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgcmFuZ2UgPSBkb2MuY3JlYXRlUmFuZ2UoKTtcbiAgICByYW5nZS5zZXRTdGFydChzdGFydE1hcmtlci5ub2RlLCBzdGFydE1hcmtlci5vZmZzZXQpO1xuICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcblxuICAgIGlmIChzdGFydCA+IGVuZCkge1xuICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlKTtcbiAgICAgIHNlbGVjdGlvbi5leHRlbmQoZW5kTWFya2VyLm5vZGUsIGVuZE1hcmtlci5vZmZzZXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByYW5nZS5zZXRFbmQoZW5kTWFya2VyLm5vZGUsIGVuZE1hcmtlci5vZmZzZXQpO1xuICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNUZXh0Tm9kZShub2RlKSB7XG4gIHJldHVybiBub2RlICYmIG5vZGUubm9kZVR5cGUgPT09IFRFWFRfTk9ERTtcbn1cblxuZnVuY3Rpb24gY29udGFpbnNOb2RlKG91dGVyTm9kZSwgaW5uZXJOb2RlKSB7XG4gIGlmICghb3V0ZXJOb2RlIHx8ICFpbm5lck5vZGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gZWxzZSBpZiAob3V0ZXJOb2RlID09PSBpbm5lck5vZGUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIGlmIChpc1RleHROb2RlKG91dGVyTm9kZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gZWxzZSBpZiAoaXNUZXh0Tm9kZShpbm5lck5vZGUpKSB7XG4gICAgcmV0dXJuIGNvbnRhaW5zTm9kZShvdXRlck5vZGUsIGlubmVyTm9kZS5wYXJlbnROb2RlKTtcbiAgfSBlbHNlIGlmICgnY29udGFpbnMnIGluIG91dGVyTm9kZSkge1xuICAgIHJldHVybiBvdXRlck5vZGUuY29udGFpbnMoaW5uZXJOb2RlKTtcbiAgfSBlbHNlIGlmIChvdXRlck5vZGUuY29tcGFyZURvY3VtZW50UG9zaXRpb24pIHtcbiAgICByZXR1cm4gISEob3V0ZXJOb2RlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGlubmVyTm9kZSkgJiAxNik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzSW5Eb2N1bWVudChub2RlKSB7XG4gIHJldHVybiBub2RlICYmIG5vZGUub3duZXJEb2N1bWVudCAmJiBjb250YWluc05vZGUobm9kZS5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgbm9kZSk7XG59XG5cbmZ1bmN0aW9uIGlzU2FtZU9yaWdpbkZyYW1lKGlmcmFtZSkge1xuICB0cnkge1xuICAgIC8vIEFjY2Vzc2luZyB0aGUgY29udGVudERvY3VtZW50IG9mIGEgSFRNTElmcmFtZUVsZW1lbnQgY2FuIGNhdXNlIHRoZSBicm93c2VyXG4gICAgLy8gdG8gdGhyb3csIGUuZy4gaWYgaXQgaGFzIGEgY3Jvc3Mtb3JpZ2luIHNyYyBhdHRyaWJ1dGUuXG4gICAgLy8gU2FmYXJpIHdpbGwgc2hvdyBhbiBlcnJvciBpbiB0aGUgY29uc29sZSB3aGVuIHRoZSBhY2Nlc3MgcmVzdWx0cyBpbiBcIkJsb2NrZWQgYSBmcmFtZSB3aXRoIG9yaWdpblwiLiBlLmc6XG4gICAgLy8gaWZyYW1lLmNvbnRlbnREb2N1bWVudC5kZWZhdWx0VmlldztcbiAgICAvLyBBIHNhZmV0eSB3YXkgaXMgdG8gYWNjZXNzIG9uZSBvZiB0aGUgY3Jvc3Mgb3JpZ2luIHByb3BlcnRpZXM6IFdpbmRvdyBvciBMb2NhdGlvblxuICAgIC8vIFdoaWNoIG1pZ2h0IHJlc3VsdCBpbiBcIlNlY3VyaXR5RXJyb3JcIiBET00gRXhjZXB0aW9uIGFuZCBpdCBpcyBjb21wYXRpYmxlIHRvIFNhZmFyaS5cbiAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9icm93c2Vycy5odG1sI2ludGVncmF0aW9uLXdpdGgtaWRsXG4gICAgcmV0dXJuIHR5cGVvZiBpZnJhbWUuY29udGVudFdpbmRvdy5sb2NhdGlvbi5ocmVmID09PSAnc3RyaW5nJztcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldEFjdGl2ZUVsZW1lbnREZWVwKCkge1xuICB2YXIgd2luID0gd2luZG93O1xuICB2YXIgZWxlbWVudCA9IGdldEFjdGl2ZUVsZW1lbnQoKTtcblxuICB3aGlsZSAoZWxlbWVudCBpbnN0YW5jZW9mIHdpbi5IVE1MSUZyYW1lRWxlbWVudCkge1xuICAgIGlmIChpc1NhbWVPcmlnaW5GcmFtZShlbGVtZW50KSkge1xuICAgICAgd2luID0gZWxlbWVudC5jb250ZW50V2luZG93O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG5cbiAgICBlbGVtZW50ID0gZ2V0QWN0aXZlRWxlbWVudCh3aW4uZG9jdW1lbnQpO1xuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQ7XG59XG4vKipcbiAqIEBSZWFjdElucHV0U2VsZWN0aW9uOiBSZWFjdCBpbnB1dCBzZWxlY3Rpb24gbW9kdWxlLiBCYXNlZCBvbiBTZWxlY3Rpb24uanMsXG4gKiBidXQgbW9kaWZpZWQgdG8gYmUgc3VpdGFibGUgZm9yIHJlYWN0IGFuZCBoYXMgYSBjb3VwbGUgb2YgYnVnIGZpeGVzIChkb2Vzbid0XG4gKiBhc3N1bWUgYnV0dG9ucyBoYXZlIHJhbmdlIHNlbGVjdGlvbnMgYWxsb3dlZCkuXG4gKiBJbnB1dCBzZWxlY3Rpb24gbW9kdWxlIGZvciBSZWFjdC5cbiAqL1xuXG4vKipcbiAqIEBoYXNTZWxlY3Rpb25DYXBhYmlsaXRpZXM6IHdlIGdldCB0aGUgZWxlbWVudCB0eXBlcyB0aGF0IHN1cHBvcnQgc2VsZWN0aW9uXG4gKiBmcm9tIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI2RvLW5vdC1hcHBseSwgbG9va2luZyBhdCBgc2VsZWN0aW9uU3RhcnRgXG4gKiBhbmQgYHNlbGVjdGlvbkVuZGAgcm93cy5cbiAqL1xuXG5cbmZ1bmN0aW9uIGhhc1NlbGVjdGlvbkNhcGFiaWxpdGllcyhlbGVtKSB7XG4gIHZhciBub2RlTmFtZSA9IGVsZW0gJiYgZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiBub2RlTmFtZSAmJiAobm9kZU5hbWUgPT09ICdpbnB1dCcgJiYgKGVsZW0udHlwZSA9PT0gJ3RleHQnIHx8IGVsZW0udHlwZSA9PT0gJ3NlYXJjaCcgfHwgZWxlbS50eXBlID09PSAndGVsJyB8fCBlbGVtLnR5cGUgPT09ICd1cmwnIHx8IGVsZW0udHlwZSA9PT0gJ3Bhc3N3b3JkJykgfHwgbm9kZU5hbWUgPT09ICd0ZXh0YXJlYScgfHwgZWxlbS5jb250ZW50RWRpdGFibGUgPT09ICd0cnVlJyk7XG59XG5mdW5jdGlvbiBnZXRTZWxlY3Rpb25JbmZvcm1hdGlvbigpIHtcbiAgdmFyIGZvY3VzZWRFbGVtID0gZ2V0QWN0aXZlRWxlbWVudERlZXAoKTtcbiAgcmV0dXJuIHtcbiAgICBmb2N1c2VkRWxlbTogZm9jdXNlZEVsZW0sXG4gICAgc2VsZWN0aW9uUmFuZ2U6IGhhc1NlbGVjdGlvbkNhcGFiaWxpdGllcyhmb2N1c2VkRWxlbSkgPyBnZXRTZWxlY3Rpb24oZm9jdXNlZEVsZW0pIDogbnVsbFxuICB9O1xufVxuLyoqXG4gKiBAcmVzdG9yZVNlbGVjdGlvbjogSWYgYW55IHNlbGVjdGlvbiBpbmZvcm1hdGlvbiB3YXMgcG90ZW50aWFsbHkgbG9zdCxcbiAqIHJlc3RvcmUgaXQuIFRoaXMgaXMgdXNlZnVsIHdoZW4gcGVyZm9ybWluZyBvcGVyYXRpb25zIHRoYXQgY291bGQgcmVtb3ZlIGRvbVxuICogbm9kZXMgYW5kIHBsYWNlIHRoZW0gYmFjayBpbiwgcmVzdWx0aW5nIGluIGZvY3VzIGJlaW5nIGxvc3QuXG4gKi9cblxuZnVuY3Rpb24gcmVzdG9yZVNlbGVjdGlvbihwcmlvclNlbGVjdGlvbkluZm9ybWF0aW9uKSB7XG4gIHZhciBjdXJGb2N1c2VkRWxlbSA9IGdldEFjdGl2ZUVsZW1lbnREZWVwKCk7XG4gIHZhciBwcmlvckZvY3VzZWRFbGVtID0gcHJpb3JTZWxlY3Rpb25JbmZvcm1hdGlvbi5mb2N1c2VkRWxlbTtcbiAgdmFyIHByaW9yU2VsZWN0aW9uUmFuZ2UgPSBwcmlvclNlbGVjdGlvbkluZm9ybWF0aW9uLnNlbGVjdGlvblJhbmdlO1xuXG4gIGlmIChjdXJGb2N1c2VkRWxlbSAhPT0gcHJpb3JGb2N1c2VkRWxlbSAmJiBpc0luRG9jdW1lbnQocHJpb3JGb2N1c2VkRWxlbSkpIHtcbiAgICBpZiAocHJpb3JTZWxlY3Rpb25SYW5nZSAhPT0gbnVsbCAmJiBoYXNTZWxlY3Rpb25DYXBhYmlsaXRpZXMocHJpb3JGb2N1c2VkRWxlbSkpIHtcbiAgICAgIHNldFNlbGVjdGlvbihwcmlvckZvY3VzZWRFbGVtLCBwcmlvclNlbGVjdGlvblJhbmdlKTtcbiAgICB9IC8vIEZvY3VzaW5nIGEgbm9kZSBjYW4gY2hhbmdlIHRoZSBzY3JvbGwgcG9zaXRpb24sIHdoaWNoIGlzIHVuZGVzaXJhYmxlXG5cblxuICAgIHZhciBhbmNlc3RvcnMgPSBbXTtcbiAgICB2YXIgYW5jZXN0b3IgPSBwcmlvckZvY3VzZWRFbGVtO1xuXG4gICAgd2hpbGUgKGFuY2VzdG9yID0gYW5jZXN0b3IucGFyZW50Tm9kZSkge1xuICAgICAgaWYgKGFuY2VzdG9yLm5vZGVUeXBlID09PSBFTEVNRU5UX05PREUpIHtcbiAgICAgICAgYW5jZXN0b3JzLnB1c2goe1xuICAgICAgICAgIGVsZW1lbnQ6IGFuY2VzdG9yLFxuICAgICAgICAgIGxlZnQ6IGFuY2VzdG9yLnNjcm9sbExlZnQsXG4gICAgICAgICAgdG9wOiBhbmNlc3Rvci5zY3JvbGxUb3BcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBwcmlvckZvY3VzZWRFbGVtLmZvY3VzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBwcmlvckZvY3VzZWRFbGVtLmZvY3VzKCk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbmNlc3RvcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpbmZvID0gYW5jZXN0b3JzW2ldO1xuICAgICAgaW5mby5lbGVtZW50LnNjcm9sbExlZnQgPSBpbmZvLmxlZnQ7XG4gICAgICBpbmZvLmVsZW1lbnQuc2Nyb2xsVG9wID0gaW5mby50b3A7XG4gICAgfVxuICB9XG59XG4vKipcbiAqIEBnZXRTZWxlY3Rpb246IEdldHMgdGhlIHNlbGVjdGlvbiBib3VuZHMgb2YgYSBmb2N1c2VkIHRleHRhcmVhLCBpbnB1dCBvclxuICogY29udGVudEVkaXRhYmxlIG5vZGUuXG4gKiAtQGlucHV0OiBMb29rIHVwIHNlbGVjdGlvbiBib3VuZHMgb2YgdGhpcyBpbnB1dFxuICogLUByZXR1cm4ge3N0YXJ0OiBzZWxlY3Rpb25TdGFydCwgZW5kOiBzZWxlY3Rpb25FbmR9XG4gKi9cblxuZnVuY3Rpb24gZ2V0U2VsZWN0aW9uKGlucHV0KSB7XG4gIHZhciBzZWxlY3Rpb247XG5cbiAgaWYgKCdzZWxlY3Rpb25TdGFydCcgaW4gaW5wdXQpIHtcbiAgICAvLyBNb2Rlcm4gYnJvd3NlciB3aXRoIGlucHV0IG9yIHRleHRhcmVhLlxuICAgIHNlbGVjdGlvbiA9IHtcbiAgICAgIHN0YXJ0OiBpbnB1dC5zZWxlY3Rpb25TdGFydCxcbiAgICAgIGVuZDogaW5wdXQuc2VsZWN0aW9uRW5kXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICAvLyBDb250ZW50IGVkaXRhYmxlIG9yIG9sZCBJRSB0ZXh0YXJlYS5cbiAgICBzZWxlY3Rpb24gPSBnZXRPZmZzZXRzKGlucHV0KTtcbiAgfVxuXG4gIHJldHVybiBzZWxlY3Rpb24gfHwge1xuICAgIHN0YXJ0OiAwLFxuICAgIGVuZDogMFxuICB9O1xufVxuLyoqXG4gKiBAc2V0U2VsZWN0aW9uOiBTZXRzIHRoZSBzZWxlY3Rpb24gYm91bmRzIG9mIGEgdGV4dGFyZWEgb3IgaW5wdXQgYW5kIGZvY3VzZXNcbiAqIHRoZSBpbnB1dC5cbiAqIC1AaW5wdXQgICAgIFNldCBzZWxlY3Rpb24gYm91bmRzIG9mIHRoaXMgaW5wdXQgb3IgdGV4dGFyZWFcbiAqIC1Ab2Zmc2V0cyAgIE9iamVjdCBvZiBzYW1lIGZvcm0gdGhhdCBpcyByZXR1cm5lZCBmcm9tIGdldCpcbiAqL1xuXG5mdW5jdGlvbiBzZXRTZWxlY3Rpb24oaW5wdXQsIG9mZnNldHMpIHtcbiAgdmFyIHN0YXJ0ID0gb2Zmc2V0cy5zdGFydDtcbiAgdmFyIGVuZCA9IG9mZnNldHMuZW5kO1xuXG4gIGlmIChlbmQgPT09IHVuZGVmaW5lZCkge1xuICAgIGVuZCA9IHN0YXJ0O1xuICB9XG5cbiAgaWYgKCdzZWxlY3Rpb25TdGFydCcgaW4gaW5wdXQpIHtcbiAgICBpbnB1dC5zZWxlY3Rpb25TdGFydCA9IHN0YXJ0O1xuICAgIGlucHV0LnNlbGVjdGlvbkVuZCA9IE1hdGgubWluKGVuZCwgaW5wdXQudmFsdWUubGVuZ3RoKTtcbiAgfSBlbHNlIHtcbiAgICBzZXRPZmZzZXRzKGlucHV0LCBvZmZzZXRzKTtcbiAgfVxufVxuXG52YXIgc2tpcFNlbGVjdGlvbkNoYW5nZUV2ZW50ID0gY2FuVXNlRE9NICYmICdkb2N1bWVudE1vZGUnIGluIGRvY3VtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50TW9kZSA8PSAxMTtcblxuZnVuY3Rpb24gcmVnaXN0ZXJFdmVudHMkMygpIHtcbiAgcmVnaXN0ZXJUd29QaGFzZUV2ZW50KCdvblNlbGVjdCcsIFsnZm9jdXNvdXQnLCAnY29udGV4dG1lbnUnLCAnZHJhZ2VuZCcsICdmb2N1c2luJywgJ2tleWRvd24nLCAna2V5dXAnLCAnbW91c2Vkb3duJywgJ21vdXNldXAnLCAnc2VsZWN0aW9uY2hhbmdlJ10pO1xufVxuXG52YXIgYWN0aXZlRWxlbWVudCQxID0gbnVsbDtcbnZhciBhY3RpdmVFbGVtZW50SW5zdCQxID0gbnVsbDtcbnZhciBsYXN0U2VsZWN0aW9uID0gbnVsbDtcbnZhciBtb3VzZURvd24gPSBmYWxzZTtcbi8qKlxuICogR2V0IGFuIG9iamVjdCB3aGljaCBpcyBhIHVuaXF1ZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgY3VycmVudCBzZWxlY3Rpb24uXG4gKlxuICogVGhlIHJldHVybiB2YWx1ZSB3aWxsIG5vdCBiZSBjb25zaXN0ZW50IGFjcm9zcyBub2RlcyBvciBicm93c2VycywgYnV0XG4gKiB0d28gaWRlbnRpY2FsIHNlbGVjdGlvbnMgb24gdGhlIHNhbWUgbm9kZSB3aWxsIHJldHVybiBpZGVudGljYWwgb2JqZWN0cy5cbiAqL1xuXG5mdW5jdGlvbiBnZXRTZWxlY3Rpb24kMShub2RlKSB7XG4gIGlmICgnc2VsZWN0aW9uU3RhcnQnIGluIG5vZGUgJiYgaGFzU2VsZWN0aW9uQ2FwYWJpbGl0aWVzKG5vZGUpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXJ0OiBub2RlLnNlbGVjdGlvblN0YXJ0LFxuICAgICAgZW5kOiBub2RlLnNlbGVjdGlvbkVuZFxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgdmFyIHdpbiA9IG5vZGUub3duZXJEb2N1bWVudCAmJiBub2RlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcgfHwgd2luZG93O1xuICAgIHZhciBzZWxlY3Rpb24gPSB3aW4uZ2V0U2VsZWN0aW9uKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFuY2hvck5vZGU6IHNlbGVjdGlvbi5hbmNob3JOb2RlLFxuICAgICAgYW5jaG9yT2Zmc2V0OiBzZWxlY3Rpb24uYW5jaG9yT2Zmc2V0LFxuICAgICAgZm9jdXNOb2RlOiBzZWxlY3Rpb24uZm9jdXNOb2RlLFxuICAgICAgZm9jdXNPZmZzZXQ6IHNlbGVjdGlvbi5mb2N1c09mZnNldFxuICAgIH07XG4gIH1cbn1cbi8qKlxuICogR2V0IGRvY3VtZW50IGFzc29jaWF0ZWQgd2l0aCB0aGUgZXZlbnQgdGFyZ2V0LlxuICovXG5cblxuZnVuY3Rpb24gZ2V0RXZlbnRUYXJnZXREb2N1bWVudChldmVudFRhcmdldCkge1xuICByZXR1cm4gZXZlbnRUYXJnZXQud2luZG93ID09PSBldmVudFRhcmdldCA/IGV2ZW50VGFyZ2V0LmRvY3VtZW50IDogZXZlbnRUYXJnZXQubm9kZVR5cGUgPT09IERPQ1VNRU5UX05PREUgPyBldmVudFRhcmdldCA6IGV2ZW50VGFyZ2V0Lm93bmVyRG9jdW1lbnQ7XG59XG4vKipcbiAqIFBvbGwgc2VsZWN0aW9uIHRvIHNlZSB3aGV0aGVyIGl0J3MgY2hhbmdlZC5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnRcbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudFRhcmdldFxuICogQHJldHVybiB7P1N5bnRoZXRpY0V2ZW50fVxuICovXG5cblxuZnVuY3Rpb24gY29uc3RydWN0U2VsZWN0RXZlbnQoZGlzcGF0Y2hRdWV1ZSwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KSB7XG4gIC8vIEVuc3VyZSB3ZSBoYXZlIHRoZSByaWdodCBlbGVtZW50LCBhbmQgdGhhdCB0aGUgdXNlciBpcyBub3QgZHJhZ2dpbmcgYVxuICAvLyBzZWxlY3Rpb24gKHRoaXMgbWF0Y2hlcyBuYXRpdmUgYHNlbGVjdGAgZXZlbnQgYmVoYXZpb3IpLiBJbiBIVE1MNSwgc2VsZWN0XG4gIC8vIGZpcmVzIG9ubHkgb24gaW5wdXQgYW5kIHRleHRhcmVhIHRodXMgaWYgdGhlcmUncyBubyBmb2N1c2VkIGVsZW1lbnQgd2VcbiAgLy8gd29uJ3QgZGlzcGF0Y2guXG4gIHZhciBkb2MgPSBnZXRFdmVudFRhcmdldERvY3VtZW50KG5hdGl2ZUV2ZW50VGFyZ2V0KTtcblxuICBpZiAobW91c2VEb3duIHx8IGFjdGl2ZUVsZW1lbnQkMSA9PSBudWxsIHx8IGFjdGl2ZUVsZW1lbnQkMSAhPT0gZ2V0QWN0aXZlRWxlbWVudChkb2MpKSB7XG4gICAgcmV0dXJuO1xuICB9IC8vIE9ubHkgZmlyZSB3aGVuIHNlbGVjdGlvbiBoYXMgYWN0dWFsbHkgY2hhbmdlZC5cblxuXG4gIHZhciBjdXJyZW50U2VsZWN0aW9uID0gZ2V0U2VsZWN0aW9uJDEoYWN0aXZlRWxlbWVudCQxKTtcblxuICBpZiAoIWxhc3RTZWxlY3Rpb24gfHwgIXNoYWxsb3dFcXVhbChsYXN0U2VsZWN0aW9uLCBjdXJyZW50U2VsZWN0aW9uKSkge1xuICAgIGxhc3RTZWxlY3Rpb24gPSBjdXJyZW50U2VsZWN0aW9uO1xuICAgIHZhciBsaXN0ZW5lcnMgPSBhY2N1bXVsYXRlVHdvUGhhc2VMaXN0ZW5lcnMoYWN0aXZlRWxlbWVudEluc3QkMSwgJ29uU2VsZWN0Jyk7XG5cbiAgICBpZiAobGlzdGVuZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIHZhciBldmVudCA9IG5ldyBTeW50aGV0aWNFdmVudCgnb25TZWxlY3QnLCAnc2VsZWN0JywgbnVsbCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgICAgIGRpc3BhdGNoUXVldWUucHVzaCh7XG4gICAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgICAgbGlzdGVuZXJzOiBsaXN0ZW5lcnNcbiAgICAgIH0pO1xuICAgICAgZXZlbnQudGFyZ2V0ID0gYWN0aXZlRWxlbWVudCQxO1xuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBUaGlzIHBsdWdpbiBjcmVhdGVzIGFuIGBvblNlbGVjdGAgZXZlbnQgdGhhdCBub3JtYWxpemVzIHNlbGVjdCBldmVudHNcbiAqIGFjcm9zcyBmb3JtIGVsZW1lbnRzLlxuICpcbiAqIFN1cHBvcnRlZCBlbGVtZW50cyBhcmU6XG4gKiAtIGlucHV0IChzZWUgYGlzVGV4dElucHV0RWxlbWVudGApXG4gKiAtIHRleHRhcmVhXG4gKiAtIGNvbnRlbnRFZGl0YWJsZVxuICpcbiAqIFRoaXMgZGlmZmVycyBmcm9tIG5hdGl2ZSBicm93c2VyIGltcGxlbWVudGF0aW9ucyBpbiB0aGUgZm9sbG93aW5nIHdheXM6XG4gKiAtIEZpcmVzIG9uIGNvbnRlbnRFZGl0YWJsZSBmaWVsZHMgYXMgd2VsbCBhcyBpbnB1dHMuXG4gKiAtIEZpcmVzIGZvciBjb2xsYXBzZWQgc2VsZWN0aW9uLlxuICogLSBGaXJlcyBhZnRlciB1c2VyIGlucHV0LlxuICovXG5cblxuZnVuY3Rpb24gZXh0cmFjdEV2ZW50cyQzKGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0LCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIpIHtcblxuICB2YXIgdGFyZ2V0Tm9kZSA9IHRhcmdldEluc3QgPyBnZXROb2RlRnJvbUluc3RhbmNlKHRhcmdldEluc3QpIDogd2luZG93O1xuXG4gIHN3aXRjaCAoZG9tRXZlbnROYW1lKSB7XG4gICAgLy8gVHJhY2sgdGhlIGlucHV0IG5vZGUgdGhhdCBoYXMgZm9jdXMuXG4gICAgY2FzZSAnZm9jdXNpbic6XG4gICAgICBpZiAoaXNUZXh0SW5wdXRFbGVtZW50KHRhcmdldE5vZGUpIHx8IHRhcmdldE5vZGUuY29udGVudEVkaXRhYmxlID09PSAndHJ1ZScpIHtcbiAgICAgICAgYWN0aXZlRWxlbWVudCQxID0gdGFyZ2V0Tm9kZTtcbiAgICAgICAgYWN0aXZlRWxlbWVudEluc3QkMSA9IHRhcmdldEluc3Q7XG4gICAgICAgIGxhc3RTZWxlY3Rpb24gPSBudWxsO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2ZvY3Vzb3V0JzpcbiAgICAgIGFjdGl2ZUVsZW1lbnQkMSA9IG51bGw7XG4gICAgICBhY3RpdmVFbGVtZW50SW5zdCQxID0gbnVsbDtcbiAgICAgIGxhc3RTZWxlY3Rpb24gPSBudWxsO1xuICAgICAgYnJlYWs7XG4gICAgLy8gRG9uJ3QgZmlyZSB0aGUgZXZlbnQgd2hpbGUgdGhlIHVzZXIgaXMgZHJhZ2dpbmcuIFRoaXMgbWF0Y2hlcyB0aGVcbiAgICAvLyBzZW1hbnRpY3Mgb2YgdGhlIG5hdGl2ZSBzZWxlY3QgZXZlbnQuXG5cbiAgICBjYXNlICdtb3VzZWRvd24nOlxuICAgICAgbW91c2VEb3duID0gdHJ1ZTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnY29udGV4dG1lbnUnOlxuICAgIGNhc2UgJ21vdXNldXAnOlxuICAgIGNhc2UgJ2RyYWdlbmQnOlxuICAgICAgbW91c2VEb3duID0gZmFsc2U7XG4gICAgICBjb25zdHJ1Y3RTZWxlY3RFdmVudChkaXNwYXRjaFF1ZXVlLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICAgICAgYnJlYWs7XG4gICAgLy8gQ2hyb21lIGFuZCBJRSBmaXJlIG5vbi1zdGFuZGFyZCBldmVudCB3aGVuIHNlbGVjdGlvbiBpcyBjaGFuZ2VkIChhbmRcbiAgICAvLyBzb21ldGltZXMgd2hlbiBpdCBoYXNuJ3QpLiBJRSdzIGV2ZW50IGZpcmVzIG91dCBvZiBvcmRlciB3aXRoIHJlc3BlY3RcbiAgICAvLyB0byBrZXkgYW5kIGlucHV0IGV2ZW50cyBvbiBkZWxldGlvbiwgc28gd2UgZGlzY2FyZCBpdC5cbiAgICAvL1xuICAgIC8vIEZpcmVmb3ggZG9lc24ndCBzdXBwb3J0IHNlbGVjdGlvbmNoYW5nZSwgc28gY2hlY2sgc2VsZWN0aW9uIHN0YXR1c1xuICAgIC8vIGFmdGVyIGVhY2gga2V5IGVudHJ5LiBUaGUgc2VsZWN0aW9uIGNoYW5nZXMgYWZ0ZXIga2V5ZG93biBhbmQgYmVmb3JlXG4gICAgLy8ga2V5dXAsIGJ1dCB3ZSBjaGVjayBvbiBrZXlkb3duIGFzIHdlbGwgaW4gdGhlIGNhc2Ugb2YgaG9sZGluZyBkb3duIGFcbiAgICAvLyBrZXksIHdoZW4gbXVsdGlwbGUga2V5ZG93biBldmVudHMgYXJlIGZpcmVkIGJ1dCBvbmx5IG9uZSBrZXl1cCBpcy5cbiAgICAvLyBUaGlzIGlzIGFsc28gb3VyIGFwcHJvYWNoIGZvciBJRSBoYW5kbGluZywgZm9yIHRoZSByZWFzb24gYWJvdmUuXG5cbiAgICBjYXNlICdzZWxlY3Rpb25jaGFuZ2UnOlxuICAgICAgaWYgKHNraXBTZWxlY3Rpb25DaGFuZ2VFdmVudCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIC8vIGZhbGxzIHRocm91Z2hcblxuICAgIGNhc2UgJ2tleWRvd24nOlxuICAgIGNhc2UgJ2tleXVwJzpcbiAgICAgIGNvbnN0cnVjdFNlbGVjdEV2ZW50KGRpc3BhdGNoUXVldWUsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZXh0cmFjdEV2ZW50cyQ0KGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0LCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIpIHtcbiAgdmFyIHJlYWN0TmFtZSA9IHRvcExldmVsRXZlbnRzVG9SZWFjdE5hbWVzLmdldChkb21FdmVudE5hbWUpO1xuXG4gIGlmIChyZWFjdE5hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNFdmVudDtcbiAgdmFyIHJlYWN0RXZlbnRUeXBlID0gZG9tRXZlbnROYW1lO1xuXG4gIHN3aXRjaCAoZG9tRXZlbnROYW1lKSB7XG4gICAgY2FzZSAna2V5cHJlc3MnOlxuICAgICAgLy8gRmlyZWZveCBjcmVhdGVzIGEga2V5cHJlc3MgZXZlbnQgZm9yIGZ1bmN0aW9uIGtleXMgdG9vLiBUaGlzIHJlbW92ZXNcbiAgICAgIC8vIHRoZSB1bndhbnRlZCBrZXlwcmVzcyBldmVudHMuIEVudGVyIGlzIGhvd2V2ZXIgYm90aCBwcmludGFibGUgYW5kXG4gICAgICAvLyBub24tcHJpbnRhYmxlLiBPbmUgd291bGQgZXhwZWN0IFRhYiB0byBiZSBhcyB3ZWxsIChidXQgaXQgaXNuJ3QpLlxuICAgICAgaWYgKGdldEV2ZW50Q2hhckNvZGUobmF0aXZlRXZlbnQpID09PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cblxuICAgIGNhc2UgJ2tleWRvd24nOlxuICAgIGNhc2UgJ2tleXVwJzpcbiAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY0tleWJvYXJkRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2ZvY3VzaW4nOlxuICAgICAgcmVhY3RFdmVudFR5cGUgPSAnZm9jdXMnO1xuICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljRm9jdXNFdmVudDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnZm9jdXNvdXQnOlxuICAgICAgcmVhY3RFdmVudFR5cGUgPSAnYmx1cic7XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNGb2N1c0V2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdiZWZvcmVibHVyJzpcbiAgICBjYXNlICdhZnRlcmJsdXInOlxuICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljRm9jdXNFdmVudDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnY2xpY2snOlxuICAgICAgLy8gRmlyZWZveCBjcmVhdGVzIGEgY2xpY2sgZXZlbnQgb24gcmlnaHQgbW91c2UgY2xpY2tzLiBUaGlzIHJlbW92ZXMgdGhlXG4gICAgICAvLyB1bndhbnRlZCBjbGljayBldmVudHMuXG4gICAgICBpZiAobmF0aXZlRXZlbnQuYnV0dG9uID09PSAyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cblxuICAgIGNhc2UgJ2F1eGNsaWNrJzpcbiAgICBjYXNlICdkYmxjbGljayc6XG4gICAgY2FzZSAnbW91c2Vkb3duJzpcbiAgICBjYXNlICdtb3VzZW1vdmUnOlxuICAgIGNhc2UgJ21vdXNldXAnOiAvLyBUT0RPOiBEaXNhYmxlZCBlbGVtZW50cyBzaG91bGQgbm90IHJlc3BvbmQgdG8gbW91c2UgZXZlbnRzXG5cbiAgICAvKiBmYWxscyB0aHJvdWdoICovXG5cbiAgICBjYXNlICdtb3VzZW91dCc6XG4gICAgY2FzZSAnbW91c2VvdmVyJzpcbiAgICBjYXNlICdjb250ZXh0bWVudSc6XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNNb3VzZUV2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdkcmFnJzpcbiAgICBjYXNlICdkcmFnZW5kJzpcbiAgICBjYXNlICdkcmFnZW50ZXInOlxuICAgIGNhc2UgJ2RyYWdleGl0JzpcbiAgICBjYXNlICdkcmFnbGVhdmUnOlxuICAgIGNhc2UgJ2RyYWdvdmVyJzpcbiAgICBjYXNlICdkcmFnc3RhcnQnOlxuICAgIGNhc2UgJ2Ryb3AnOlxuICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljRHJhZ0V2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICd0b3VjaGNhbmNlbCc6XG4gICAgY2FzZSAndG91Y2hlbmQnOlxuICAgIGNhc2UgJ3RvdWNobW92ZSc6XG4gICAgY2FzZSAndG91Y2hzdGFydCc6XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNUb3VjaEV2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIEFOSU1BVElPTl9FTkQ6XG4gICAgY2FzZSBBTklNQVRJT05fSVRFUkFUSU9OOlxuICAgIGNhc2UgQU5JTUFUSU9OX1NUQVJUOlxuICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljQW5pbWF0aW9uRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgVFJBTlNJVElPTl9FTkQ6XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNUcmFuc2l0aW9uRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3Njcm9sbCc6XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNVSUV2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICd3aGVlbCc6XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNXaGVlbEV2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdjb3B5JzpcbiAgICBjYXNlICdjdXQnOlxuICAgIGNhc2UgJ3Bhc3RlJzpcbiAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY0NsaXBib2FyZEV2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdnb3Rwb2ludGVyY2FwdHVyZSc6XG4gICAgY2FzZSAnbG9zdHBvaW50ZXJjYXB0dXJlJzpcbiAgICBjYXNlICdwb2ludGVyY2FuY2VsJzpcbiAgICBjYXNlICdwb2ludGVyZG93bic6XG4gICAgY2FzZSAncG9pbnRlcm1vdmUnOlxuICAgIGNhc2UgJ3BvaW50ZXJvdXQnOlxuICAgIGNhc2UgJ3BvaW50ZXJvdmVyJzpcbiAgICBjYXNlICdwb2ludGVydXAnOlxuICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljUG9pbnRlckV2ZW50O1xuICAgICAgYnJlYWs7XG4gIH1cblxuICB2YXIgaW5DYXB0dXJlUGhhc2UgPSAoZXZlbnRTeXN0ZW1GbGFncyAmIElTX0NBUFRVUkVfUEhBU0UpICE9PSAwO1xuXG4gIHtcbiAgICAvLyBTb21lIGV2ZW50cyBkb24ndCBidWJibGUgaW4gdGhlIGJyb3dzZXIuXG4gICAgLy8gSW4gdGhlIHBhc3QsIFJlYWN0IGhhcyBhbHdheXMgYnViYmxlZCB0aGVtLCBidXQgdGhpcyBjYW4gYmUgc3VycHJpc2luZy5cbiAgICAvLyBXZSdyZSBnb2luZyB0byB0cnkgYWxpZ25pbmcgY2xvc2VyIHRvIHRoZSBicm93c2VyIGJlaGF2aW9yIGJ5IG5vdCBidWJibGluZ1xuICAgIC8vIHRoZW0gaW4gUmVhY3QgZWl0aGVyLiBXZSdsbCBzdGFydCBieSBub3QgYnViYmxpbmcgb25TY3JvbGwsIGFuZCB0aGVuIGV4cGFuZC5cbiAgICB2YXIgYWNjdW11bGF0ZVRhcmdldE9ubHkgPSAhaW5DYXB0dXJlUGhhc2UgJiYgLy8gVE9ETzogaWRlYWxseSwgd2UnZCBldmVudHVhbGx5IGFkZCBhbGwgZXZlbnRzIGZyb21cbiAgICAvLyBub25EZWxlZ2F0ZWRFdmVudHMgbGlzdCBpbiBET01QbHVnaW5FdmVudFN5c3RlbS5cbiAgICAvLyBUaGVuIHdlIGNhbiByZW1vdmUgdGhpcyBzcGVjaWFsIGxpc3QuXG4gICAgLy8gVGhpcyBpcyBhIGJyZWFraW5nIGNoYW5nZSB0aGF0IGNhbiB3YWl0IHVudGlsIFJlYWN0IDE4LlxuICAgIGRvbUV2ZW50TmFtZSA9PT0gJ3Njcm9sbCc7XG5cbiAgICB2YXIgX2xpc3RlbmVycyA9IGFjY3VtdWxhdGVTaW5nbGVQaGFzZUxpc3RlbmVycyh0YXJnZXRJbnN0LCByZWFjdE5hbWUsIG5hdGl2ZUV2ZW50LnR5cGUsIGluQ2FwdHVyZVBoYXNlLCBhY2N1bXVsYXRlVGFyZ2V0T25seSk7XG5cbiAgICBpZiAoX2xpc3RlbmVycy5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBJbnRlbnRpb25hbGx5IGNyZWF0ZSBldmVudCBsYXppbHkuXG4gICAgICB2YXIgX2V2ZW50ID0gbmV3IFN5bnRoZXRpY0V2ZW50Q3RvcihyZWFjdE5hbWUsIHJlYWN0RXZlbnRUeXBlLCBudWxsLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuXG4gICAgICBkaXNwYXRjaFF1ZXVlLnB1c2goe1xuICAgICAgICBldmVudDogX2V2ZW50LFxuICAgICAgICBsaXN0ZW5lcnM6IF9saXN0ZW5lcnNcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG4vLyBUT0RPOiByZW1vdmUgdG9wLWxldmVsIHNpZGUgZWZmZWN0LlxucmVnaXN0ZXJTaW1wbGVFdmVudHMoKTtcbnJlZ2lzdGVyRXZlbnRzJDIoKTtcbnJlZ2lzdGVyRXZlbnRzJDEoKTtcbnJlZ2lzdGVyRXZlbnRzJDMoKTtcbnJlZ2lzdGVyRXZlbnRzKCk7XG5cbmZ1bmN0aW9uIGV4dHJhY3RFdmVudHMkNShkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyKSB7XG4gIC8vIFRPRE86IHdlIHNob3VsZCByZW1vdmUgdGhlIGNvbmNlcHQgb2YgYSBcIlNpbXBsZUV2ZW50UGx1Z2luXCIuXG4gIC8vIFRoaXMgaXMgdGhlIGJhc2ljIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIGV2ZW50IHN5c3RlbS4gQWxsXG4gIC8vIHRoZSBvdGhlciBwbHVnaW5zIGFyZSBlc3NlbnRpYWxseSBwb2x5ZmlsbHMuIFNvIHRoZSBwbHVnaW5cbiAgLy8gc2hvdWxkIHByb2JhYmx5IGJlIGlubGluZWQgc29tZXdoZXJlIGFuZCBoYXZlIGl0cyBsb2dpY1xuICAvLyBiZSBjb3JlIHRoZSB0byBldmVudCBzeXN0ZW0uIFRoaXMgd291bGQgcG90ZW50aWFsbHkgYWxsb3dcbiAgLy8gdXMgdG8gc2hpcCBidWlsZHMgb2YgUmVhY3Qgd2l0aG91dCB0aGUgcG9seWZpbGxlZCBwbHVnaW5zIGJlbG93LlxuICBleHRyYWN0RXZlbnRzJDQoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQsIGV2ZW50U3lzdGVtRmxhZ3MpO1xuICB2YXIgc2hvdWxkUHJvY2Vzc1BvbHlmaWxsUGx1Z2lucyA9IChldmVudFN5c3RlbUZsYWdzICYgU0hPVUxEX05PVF9QUk9DRVNTX1BPTFlGSUxMX0VWRU5UX1BMVUdJTlMpID09PSAwOyAvLyBXZSBkb24ndCBwcm9jZXNzIHRoZXNlIGV2ZW50cyB1bmxlc3Mgd2UgYXJlIGluIHRoZVxuICAvLyBldmVudCdzIG5hdGl2ZSBcImJ1YmJsZVwiIHBoYXNlLCB3aGljaCBtZWFucyB0aGF0IHdlJ3JlXG4gIC8vIG5vdCBpbiB0aGUgY2FwdHVyZSBwaGFzZS4gVGhhdCdzIGJlY2F1c2Ugd2UgZW11bGF0ZVxuICAvLyB0aGUgY2FwdHVyZSBwaGFzZSBoZXJlIHN0aWxsLiBUaGlzIGlzIGEgdHJhZGUtb2ZmLFxuICAvLyBiZWNhdXNlIGluIGFuIGlkZWFsIHdvcmxkIHdlIHdvdWxkIG5vdCBlbXVsYXRlIGFuZCB1c2VcbiAgLy8gdGhlIHBoYXNlcyBwcm9wZXJseSwgbGlrZSB3ZSBkbyB3aXRoIHRoZSBTaW1wbGVFdmVudFxuICAvLyBwbHVnaW4uIEhvd2V2ZXIsIHRoZSBwbHVnaW5zIGJlbG93IGVpdGhlciBleHBlY3RcbiAgLy8gZW11bGF0aW9uIChFbnRlckxlYXZlKSBvciB1c2Ugc3RhdGUgbG9jYWxpemVkIHRvIHRoYXRcbiAgLy8gcGx1Z2luIChCZWZvcmVJbnB1dCwgQ2hhbmdlLCBTZWxlY3QpLiBUaGUgc3RhdGUgaW5cbiAgLy8gdGhlc2UgbW9kdWxlcyBjb21wbGljYXRlcyB0aGluZ3MsIGFzIHlvdSdsbCBlc3NlbnRpYWxseVxuICAvLyBnZXQgdGhlIGNhc2Ugd2hlcmUgdGhlIGNhcHR1cmUgcGhhc2UgZXZlbnQgbWlnaHQgY2hhbmdlXG4gIC8vIHN0YXRlLCBvbmx5IGZvciB0aGUgZm9sbG93aW5nIGJ1YmJsZSBldmVudCB0byBjb21lIGluXG4gIC8vIGxhdGVyIGFuZCBub3QgdHJpZ2dlciBhbnl0aGluZyBhcyB0aGUgc3RhdGUgbm93XG4gIC8vIGludmFsaWRhdGVzIHRoZSBoZXVyaXN0aWNzIG9mIHRoZSBldmVudCBwbHVnaW4uIFdlXG4gIC8vIGNvdWxkIGFsdGVyIGFsbCB0aGVzZSBwbHVnaW5zIHRvIHdvcmsgaW4gc3VjaCB3YXlzLCBidXRcbiAgLy8gdGhhdCBtaWdodCBjYXVzZSBvdGhlciB1bmtub3duIHNpZGUtZWZmZWN0cyB0aGF0IHdlXG4gIC8vIGNhbid0IGZvcnNlZSByaWdodCBub3cuXG5cbiAgaWYgKHNob3VsZFByb2Nlc3NQb2x5ZmlsbFBsdWdpbnMpIHtcbiAgICBleHRyYWN0RXZlbnRzJDIoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQsIGV2ZW50U3lzdGVtRmxhZ3MpO1xuICAgIGV4dHJhY3RFdmVudHMkMShkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gICAgZXh0cmFjdEV2ZW50cyQzKGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgICBleHRyYWN0RXZlbnRzKGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgfVxufSAvLyBMaXN0IG9mIGV2ZW50cyB0aGF0IG5lZWQgdG8gYmUgaW5kaXZpZHVhbGx5IGF0dGFjaGVkIHRvIG1lZGlhIGVsZW1lbnRzLlxuXG5cbnZhciBtZWRpYUV2ZW50VHlwZXMgPSBbJ2Fib3J0JywgJ2NhbnBsYXknLCAnY2FucGxheXRocm91Z2gnLCAnZHVyYXRpb25jaGFuZ2UnLCAnZW1wdGllZCcsICdlbmNyeXB0ZWQnLCAnZW5kZWQnLCAnZXJyb3InLCAnbG9hZGVkZGF0YScsICdsb2FkZWRtZXRhZGF0YScsICdsb2Fkc3RhcnQnLCAncGF1c2UnLCAncGxheScsICdwbGF5aW5nJywgJ3Byb2dyZXNzJywgJ3JhdGVjaGFuZ2UnLCAnc2Vla2VkJywgJ3NlZWtpbmcnLCAnc3RhbGxlZCcsICdzdXNwZW5kJywgJ3RpbWV1cGRhdGUnLCAndm9sdW1lY2hhbmdlJywgJ3dhaXRpbmcnXTsgLy8gV2Ugc2hvdWxkIG5vdCBkZWxlZ2F0ZSB0aGVzZSBldmVudHMgdG8gdGhlIGNvbnRhaW5lciwgYnV0IHJhdGhlclxuLy8gc2V0IHRoZW0gb24gdGhlIGFjdHVhbCB0YXJnZXQgZWxlbWVudCBpdHNlbGYuIFRoaXMgaXMgcHJpbWFyaWx5XG4vLyBiZWNhdXNlIHRoZXNlIGV2ZW50cyBkbyBub3QgY29uc2lzdGVudGx5IGJ1YmJsZSBpbiB0aGUgRE9NLlxuXG52YXIgbm9uRGVsZWdhdGVkRXZlbnRzID0gbmV3IFNldChbJ2NhbmNlbCcsICdjbG9zZScsICdpbnZhbGlkJywgJ2xvYWQnLCAnc2Nyb2xsJywgJ3RvZ2dsZSddLmNvbmNhdChtZWRpYUV2ZW50VHlwZXMpKTtcblxuZnVuY3Rpb24gZXhlY3V0ZURpc3BhdGNoKGV2ZW50LCBsaXN0ZW5lciwgY3VycmVudFRhcmdldCkge1xuICB2YXIgdHlwZSA9IGV2ZW50LnR5cGUgfHwgJ3Vua25vd24tZXZlbnQnO1xuICBldmVudC5jdXJyZW50VGFyZ2V0ID0gY3VycmVudFRhcmdldDtcbiAgaW52b2tlR3VhcmRlZENhbGxiYWNrQW5kQ2F0Y2hGaXJzdEVycm9yKHR5cGUsIGxpc3RlbmVyLCB1bmRlZmluZWQsIGV2ZW50KTtcbiAgZXZlbnQuY3VycmVudFRhcmdldCA9IG51bGw7XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NEaXNwYXRjaFF1ZXVlSXRlbXNJbk9yZGVyKGV2ZW50LCBkaXNwYXRjaExpc3RlbmVycywgaW5DYXB0dXJlUGhhc2UpIHtcbiAgdmFyIHByZXZpb3VzSW5zdGFuY2U7XG5cbiAgaWYgKGluQ2FwdHVyZVBoYXNlKSB7XG4gICAgZm9yICh2YXIgaSA9IGRpc3BhdGNoTGlzdGVuZXJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB2YXIgX2Rpc3BhdGNoTGlzdGVuZXJzJGkgPSBkaXNwYXRjaExpc3RlbmVyc1tpXSxcbiAgICAgICAgICBpbnN0YW5jZSA9IF9kaXNwYXRjaExpc3RlbmVycyRpLmluc3RhbmNlLFxuICAgICAgICAgIGN1cnJlbnRUYXJnZXQgPSBfZGlzcGF0Y2hMaXN0ZW5lcnMkaS5jdXJyZW50VGFyZ2V0LFxuICAgICAgICAgIGxpc3RlbmVyID0gX2Rpc3BhdGNoTGlzdGVuZXJzJGkubGlzdGVuZXI7XG5cbiAgICAgIGlmIChpbnN0YW5jZSAhPT0gcHJldmlvdXNJbnN0YW5jZSAmJiBldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZXhlY3V0ZURpc3BhdGNoKGV2ZW50LCBsaXN0ZW5lciwgY3VycmVudFRhcmdldCk7XG4gICAgICBwcmV2aW91c0luc3RhbmNlID0gaW5zdGFuY2U7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBkaXNwYXRjaExpc3RlbmVycy5sZW5ndGg7IF9pKyspIHtcbiAgICAgIHZhciBfZGlzcGF0Y2hMaXN0ZW5lcnMkX2kgPSBkaXNwYXRjaExpc3RlbmVyc1tfaV0sXG4gICAgICAgICAgX2luc3RhbmNlID0gX2Rpc3BhdGNoTGlzdGVuZXJzJF9pLmluc3RhbmNlLFxuICAgICAgICAgIF9jdXJyZW50VGFyZ2V0ID0gX2Rpc3BhdGNoTGlzdGVuZXJzJF9pLmN1cnJlbnRUYXJnZXQsXG4gICAgICAgICAgX2xpc3RlbmVyID0gX2Rpc3BhdGNoTGlzdGVuZXJzJF9pLmxpc3RlbmVyO1xuXG4gICAgICBpZiAoX2luc3RhbmNlICE9PSBwcmV2aW91c0luc3RhbmNlICYmIGV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBleGVjdXRlRGlzcGF0Y2goZXZlbnQsIF9saXN0ZW5lciwgX2N1cnJlbnRUYXJnZXQpO1xuICAgICAgcHJldmlvdXNJbnN0YW5jZSA9IF9pbnN0YW5jZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJvY2Vzc0Rpc3BhdGNoUXVldWUoZGlzcGF0Y2hRdWV1ZSwgZXZlbnRTeXN0ZW1GbGFncykge1xuICB2YXIgaW5DYXB0dXJlUGhhc2UgPSAoZXZlbnRTeXN0ZW1GbGFncyAmIElTX0NBUFRVUkVfUEhBU0UpICE9PSAwO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZGlzcGF0Y2hRdWV1ZS5sZW5ndGg7IGkrKykge1xuICAgIHZhciBfZGlzcGF0Y2hRdWV1ZSRpID0gZGlzcGF0Y2hRdWV1ZVtpXSxcbiAgICAgICAgZXZlbnQgPSBfZGlzcGF0Y2hRdWV1ZSRpLmV2ZW50LFxuICAgICAgICBsaXN0ZW5lcnMgPSBfZGlzcGF0Y2hRdWV1ZSRpLmxpc3RlbmVycztcbiAgICBwcm9jZXNzRGlzcGF0Y2hRdWV1ZUl0ZW1zSW5PcmRlcihldmVudCwgbGlzdGVuZXJzLCBpbkNhcHR1cmVQaGFzZSk7IC8vICBldmVudCBzeXN0ZW0gZG9lc24ndCB1c2UgcG9vbGluZy5cbiAgfSAvLyBUaGlzIHdvdWxkIGJlIGEgZ29vZCB0aW1lIHRvIHJldGhyb3cgaWYgYW55IG9mIHRoZSBldmVudCBoYW5kbGVycyB0aHJldy5cblxuXG4gIHJldGhyb3dDYXVnaHRFcnJvcigpO1xufVxuXG5mdW5jdGlvbiBkaXNwYXRjaEV2ZW50c0ZvclBsdWdpbnMoZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCBuYXRpdmVFdmVudCwgdGFyZ2V0SW5zdCwgdGFyZ2V0Q29udGFpbmVyKSB7XG4gIHZhciBuYXRpdmVFdmVudFRhcmdldCA9IGdldEV2ZW50VGFyZ2V0KG5hdGl2ZUV2ZW50KTtcbiAgdmFyIGRpc3BhdGNoUXVldWUgPSBbXTtcbiAgZXh0cmFjdEV2ZW50cyQ1KGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0LCBldmVudFN5c3RlbUZsYWdzKTtcbiAgcHJvY2Vzc0Rpc3BhdGNoUXVldWUoZGlzcGF0Y2hRdWV1ZSwgZXZlbnRTeXN0ZW1GbGFncyk7XG59XG5cbmZ1bmN0aW9uIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoZG9tRXZlbnROYW1lLCB0YXJnZXRFbGVtZW50KSB7XG4gIHZhciBpc0NhcHR1cmVQaGFzZUxpc3RlbmVyID0gZmFsc2U7XG4gIHZhciBsaXN0ZW5lclNldCA9IGdldEV2ZW50TGlzdGVuZXJTZXQodGFyZ2V0RWxlbWVudCk7XG4gIHZhciBsaXN0ZW5lclNldEtleSA9IGdldExpc3RlbmVyU2V0S2V5KGRvbUV2ZW50TmFtZSwgaXNDYXB0dXJlUGhhc2VMaXN0ZW5lcik7XG5cbiAgaWYgKCFsaXN0ZW5lclNldC5oYXMobGlzdGVuZXJTZXRLZXkpKSB7XG4gICAgYWRkVHJhcHBlZEV2ZW50TGlzdGVuZXIodGFyZ2V0RWxlbWVudCwgZG9tRXZlbnROYW1lLCBJU19OT05fREVMRUdBVEVELCBpc0NhcHR1cmVQaGFzZUxpc3RlbmVyKTtcbiAgICBsaXN0ZW5lclNldC5hZGQobGlzdGVuZXJTZXRLZXkpO1xuICB9XG59XG52YXIgbGlzdGVuaW5nTWFya2VyID0gJ19yZWFjdExpc3RlbmluZycgKyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyKTtcbmZ1bmN0aW9uIGxpc3RlblRvQWxsU3VwcG9ydGVkRXZlbnRzKHJvb3RDb250YWluZXJFbGVtZW50KSB7XG4gIHtcbiAgICBpZiAocm9vdENvbnRhaW5lckVsZW1lbnRbbGlzdGVuaW5nTWFya2VyXSkge1xuICAgICAgLy8gUGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uOiBkb24ndCBpdGVyYXRlIHRocm91Z2ggZXZlbnRzXG4gICAgICAvLyBmb3IgdGhlIHNhbWUgcG9ydGFsIGNvbnRhaW5lciBvciByb290IG5vZGUgbW9yZSB0aGFuIG9uY2UuXG4gICAgICAvLyBUT0RPOiBvbmNlIHdlIHJlbW92ZSB0aGUgZmxhZywgd2UgbWF5IGJlIGFibGUgdG8gYWxzb1xuICAgICAgLy8gcmVtb3ZlIHNvbWUgb2YgdGhlIGJvb2trZWVwaW5nIG1hcHMgdXNlZCBmb3IgbGF6aW5lc3MuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcm9vdENvbnRhaW5lckVsZW1lbnRbbGlzdGVuaW5nTWFya2VyXSA9IHRydWU7XG4gICAgYWxsTmF0aXZlRXZlbnRzLmZvckVhY2goZnVuY3Rpb24gKGRvbUV2ZW50TmFtZSkge1xuICAgICAgaWYgKCFub25EZWxlZ2F0ZWRFdmVudHMuaGFzKGRvbUV2ZW50TmFtZSkpIHtcbiAgICAgICAgbGlzdGVuVG9OYXRpdmVFdmVudChkb21FdmVudE5hbWUsIGZhbHNlLCByb290Q29udGFpbmVyRWxlbWVudCwgbnVsbCk7XG4gICAgICB9XG5cbiAgICAgIGxpc3RlblRvTmF0aXZlRXZlbnQoZG9tRXZlbnROYW1lLCB0cnVlLCByb290Q29udGFpbmVyRWxlbWVudCwgbnVsbCk7XG4gICAgfSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGxpc3RlblRvTmF0aXZlRXZlbnQoZG9tRXZlbnROYW1lLCBpc0NhcHR1cmVQaGFzZUxpc3RlbmVyLCByb290Q29udGFpbmVyRWxlbWVudCwgdGFyZ2V0RWxlbWVudCkge1xuICB2YXIgZXZlbnRTeXN0ZW1GbGFncyA9IGFyZ3VtZW50cy5sZW5ndGggPiA0ICYmIGFyZ3VtZW50c1s0XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzRdIDogMDtcbiAgdmFyIHRhcmdldCA9IHJvb3RDb250YWluZXJFbGVtZW50OyAvLyBzZWxlY3Rpb25jaGFuZ2UgbmVlZHMgdG8gYmUgYXR0YWNoZWQgdG8gdGhlIGRvY3VtZW50XG4gIC8vIG90aGVyd2lzZSBpdCB3b24ndCBjYXB0dXJlIGluY29taW5nIGV2ZW50cyB0aGF0IGFyZSBvbmx5XG4gIC8vIHRyaWdnZXJlZCBvbiB0aGUgZG9jdW1lbnQgZGlyZWN0bHkuXG5cbiAgaWYgKGRvbUV2ZW50TmFtZSA9PT0gJ3NlbGVjdGlvbmNoYW5nZScgJiYgcm9vdENvbnRhaW5lckVsZW1lbnQubm9kZVR5cGUgIT09IERPQ1VNRU5UX05PREUpIHtcbiAgICB0YXJnZXQgPSByb290Q29udGFpbmVyRWxlbWVudC5vd25lckRvY3VtZW50O1xuICB9IC8vIElmIHRoZSBldmVudCBjYW4gYmUgZGVsZWdhdGVkIChvciBpcyBjYXB0dXJlIHBoYXNlKSwgd2UgY2FuXG4gIC8vIHJlZ2lzdGVyIGl0IHRvIHRoZSByb290IGNvbnRhaW5lci4gT3RoZXJ3aXNlLCB3ZSBzaG91bGRcbiAgLy8gcmVnaXN0ZXIgdGhlIGV2ZW50IHRvIHRoZSB0YXJnZXQgZWxlbWVudCBhbmQgbWFyayBpdCBhc1xuICAvLyBhIG5vbi1kZWxlZ2F0ZWQgZXZlbnQuXG5cblxuICBpZiAodGFyZ2V0RWxlbWVudCAhPT0gbnVsbCAmJiAhaXNDYXB0dXJlUGhhc2VMaXN0ZW5lciAmJiBub25EZWxlZ2F0ZWRFdmVudHMuaGFzKGRvbUV2ZW50TmFtZSkpIHtcbiAgICAvLyBGb3IgYWxsIG5vbi1kZWxlZ2F0ZWQgZXZlbnRzLCBhcGFydCBmcm9tIHNjcm9sbCwgd2UgYXR0YWNoXG4gICAgLy8gdGhlaXIgZXZlbnQgbGlzdGVuZXJzIHRvIHRoZSByZXNwZWN0aXZlIGVsZW1lbnRzIHRoYXQgdGhlaXJcbiAgICAvLyBldmVudHMgZmlyZSBvbi4gVGhhdCBtZWFucyB3ZSBjYW4gc2tpcCB0aGlzIHN0ZXAsIGFzIGV2ZW50XG4gICAgLy8gbGlzdGVuZXIgaGFzIGFscmVhZHkgYmVlbiBhZGRlZCBwcmV2aW91c2x5LiBIb3dldmVyLCB3ZVxuICAgIC8vIHNwZWNpYWwgY2FzZSB0aGUgc2Nyb2xsIGV2ZW50IGJlY2F1c2UgdGhlIHJlYWxpdHkgaXMgdGhhdCBhbnlcbiAgICAvLyBlbGVtZW50IGNhbiBzY3JvbGwuXG4gICAgLy8gVE9ETzogaWRlYWxseSwgd2UnZCBldmVudHVhbGx5IGFwcGx5IHRoZSBzYW1lIGxvZ2ljIHRvIGFsbFxuICAgIC8vIGV2ZW50cyBmcm9tIHRoZSBub25EZWxlZ2F0ZWRFdmVudHMgbGlzdC4gVGhlbiB3ZSBjYW4gcmVtb3ZlXG4gICAgLy8gdGhpcyBzcGVjaWFsIGNhc2UgYW5kIHVzZSB0aGUgc2FtZSBsb2dpYyBmb3IgYWxsIGV2ZW50cy5cbiAgICBpZiAoZG9tRXZlbnROYW1lICE9PSAnc2Nyb2xsJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGV2ZW50U3lzdGVtRmxhZ3MgfD0gSVNfTk9OX0RFTEVHQVRFRDtcbiAgICB0YXJnZXQgPSB0YXJnZXRFbGVtZW50O1xuICB9XG5cbiAgdmFyIGxpc3RlbmVyU2V0ID0gZ2V0RXZlbnRMaXN0ZW5lclNldCh0YXJnZXQpO1xuICB2YXIgbGlzdGVuZXJTZXRLZXkgPSBnZXRMaXN0ZW5lclNldEtleShkb21FdmVudE5hbWUsIGlzQ2FwdHVyZVBoYXNlTGlzdGVuZXIpOyAvLyBJZiB0aGUgbGlzdGVuZXIgZW50cnkgaXMgZW1wdHkgb3Igd2Ugc2hvdWxkIHVwZ3JhZGUsIHRoZW5cbiAgLy8gd2UgbmVlZCB0byB0cmFwIGFuIGV2ZW50IGxpc3RlbmVyIG9udG8gdGhlIHRhcmdldC5cblxuICBpZiAoIWxpc3RlbmVyU2V0LmhhcyhsaXN0ZW5lclNldEtleSkpIHtcbiAgICBpZiAoaXNDYXB0dXJlUGhhc2VMaXN0ZW5lcikge1xuICAgICAgZXZlbnRTeXN0ZW1GbGFncyB8PSBJU19DQVBUVVJFX1BIQVNFO1xuICAgIH1cblxuICAgIGFkZFRyYXBwZWRFdmVudExpc3RlbmVyKHRhcmdldCwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCBpc0NhcHR1cmVQaGFzZUxpc3RlbmVyKTtcbiAgICBsaXN0ZW5lclNldC5hZGQobGlzdGVuZXJTZXRLZXkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFkZFRyYXBwZWRFdmVudExpc3RlbmVyKHRhcmdldENvbnRhaW5lciwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCBpc0NhcHR1cmVQaGFzZUxpc3RlbmVyLCBpc0RlZmVycmVkTGlzdGVuZXJGb3JMZWdhY3lGQlN1cHBvcnQpIHtcbiAgdmFyIGxpc3RlbmVyID0gY3JlYXRlRXZlbnRMaXN0ZW5lcldyYXBwZXJXaXRoUHJpb3JpdHkodGFyZ2V0Q29udGFpbmVyLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MpOyAvLyBJZiBwYXNzaXZlIG9wdGlvbiBpcyBub3Qgc3VwcG9ydGVkLCB0aGVuIHRoZSBldmVudCB3aWxsIGJlXG4gIC8vIGFjdGl2ZSBhbmQgbm90IHBhc3NpdmUuXG5cbiAgdmFyIGlzUGFzc2l2ZUxpc3RlbmVyID0gdW5kZWZpbmVkO1xuXG4gIGlmIChwYXNzaXZlQnJvd3NlckV2ZW50c1N1cHBvcnRlZCkge1xuICAgIC8vIEJyb3dzZXJzIGludHJvZHVjZWQgYW4gaW50ZXJ2ZW50aW9uLCBtYWtpbmcgdGhlc2UgZXZlbnRzXG4gICAgLy8gcGFzc2l2ZSBieSBkZWZhdWx0IG9uIGRvY3VtZW50LiBSZWFjdCBkb2Vzbid0IGJpbmQgdGhlbVxuICAgIC8vIHRvIGRvY3VtZW50IGFueW1vcmUsIGJ1dCBjaGFuZ2luZyB0aGlzIG5vdyB3b3VsZCB1bmRvXG4gICAgLy8gdGhlIHBlcmZvcm1hbmNlIHdpbnMgZnJvbSB0aGUgY2hhbmdlLiBTbyB3ZSBlbXVsYXRlXG4gICAgLy8gdGhlIGV4aXN0aW5nIGJlaGF2aW9yIG1hbnVhbGx5IG9uIHRoZSByb290cyBub3cuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xOTY1MVxuICAgIGlmIChkb21FdmVudE5hbWUgPT09ICd0b3VjaHN0YXJ0JyB8fCBkb21FdmVudE5hbWUgPT09ICd0b3VjaG1vdmUnIHx8IGRvbUV2ZW50TmFtZSA9PT0gJ3doZWVsJykge1xuICAgICAgaXNQYXNzaXZlTGlzdGVuZXIgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHRhcmdldENvbnRhaW5lciA9ICB0YXJnZXRDb250YWluZXI7XG4gIHZhciB1bnN1YnNjcmliZUxpc3RlbmVyOyAvLyBXaGVuIGxlZ2FjeUZCU3VwcG9ydCBpcyBlbmFibGVkLCBpdCdzIGZvciB3aGVuIHdlXG5cblxuICBpZiAoaXNDYXB0dXJlUGhhc2VMaXN0ZW5lcikge1xuICAgIGlmIChpc1Bhc3NpdmVMaXN0ZW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB1bnN1YnNjcmliZUxpc3RlbmVyID0gYWRkRXZlbnRDYXB0dXJlTGlzdGVuZXJXaXRoUGFzc2l2ZUZsYWcodGFyZ2V0Q29udGFpbmVyLCBkb21FdmVudE5hbWUsIGxpc3RlbmVyLCBpc1Bhc3NpdmVMaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVuc3Vic2NyaWJlTGlzdGVuZXIgPSBhZGRFdmVudENhcHR1cmVMaXN0ZW5lcih0YXJnZXRDb250YWluZXIsIGRvbUV2ZW50TmFtZSwgbGlzdGVuZXIpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoaXNQYXNzaXZlTGlzdGVuZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdW5zdWJzY3JpYmVMaXN0ZW5lciA9IGFkZEV2ZW50QnViYmxlTGlzdGVuZXJXaXRoUGFzc2l2ZUZsYWcodGFyZ2V0Q29udGFpbmVyLCBkb21FdmVudE5hbWUsIGxpc3RlbmVyLCBpc1Bhc3NpdmVMaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVuc3Vic2NyaWJlTGlzdGVuZXIgPSBhZGRFdmVudEJ1YmJsZUxpc3RlbmVyKHRhcmdldENvbnRhaW5lciwgZG9tRXZlbnROYW1lLCBsaXN0ZW5lcik7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzTWF0Y2hpbmdSb290Q29udGFpbmVyKGdyYW5kQ29udGFpbmVyLCB0YXJnZXRDb250YWluZXIpIHtcbiAgcmV0dXJuIGdyYW5kQ29udGFpbmVyID09PSB0YXJnZXRDb250YWluZXIgfHwgZ3JhbmRDb250YWluZXIubm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSAmJiBncmFuZENvbnRhaW5lci5wYXJlbnROb2RlID09PSB0YXJnZXRDb250YWluZXI7XG59XG5cbmZ1bmN0aW9uIGRpc3BhdGNoRXZlbnRGb3JQbHVnaW5FdmVudFN5c3RlbShkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIG5hdGl2ZUV2ZW50LCB0YXJnZXRJbnN0LCB0YXJnZXRDb250YWluZXIpIHtcbiAgdmFyIGFuY2VzdG9ySW5zdCA9IHRhcmdldEluc3Q7XG5cbiAgaWYgKChldmVudFN5c3RlbUZsYWdzICYgSVNfRVZFTlRfSEFORExFX05PTl9NQU5BR0VEX05PREUpID09PSAwICYmIChldmVudFN5c3RlbUZsYWdzICYgSVNfTk9OX0RFTEVHQVRFRCkgPT09IDApIHtcbiAgICB2YXIgdGFyZ2V0Q29udGFpbmVyTm9kZSA9IHRhcmdldENvbnRhaW5lcjsgLy8gSWYgd2UgYXJlIHVzaW5nIHRoZSBsZWdhY3kgRkIgc3VwcG9ydCBmbGFnLCB3ZVxuXG4gICAgaWYgKHRhcmdldEluc3QgIT09IG51bGwpIHtcbiAgICAgIC8vIFRoZSBiZWxvdyBsb2dpYyBhdHRlbXB0cyB0byB3b3JrIG91dCBpZiB3ZSBuZWVkIHRvIGNoYW5nZVxuICAgICAgLy8gdGhlIHRhcmdldCBmaWJlciB0byBhIGRpZmZlcmVudCBhbmNlc3Rvci4gV2UgaGFkIHNpbWlsYXIgbG9naWNcbiAgICAgIC8vIGluIHRoZSBsZWdhY3kgZXZlbnQgc3lzdGVtLCBleGNlcHQgdGhlIGJpZyBkaWZmZXJlbmNlIGJldHdlZW5cbiAgICAgIC8vIHN5c3RlbXMgaXMgdGhhdCB0aGUgbW9kZXJuIGV2ZW50IHN5c3RlbSBub3cgaGFzIGFuIGV2ZW50IGxpc3RlbmVyXG4gICAgICAvLyBhdHRhY2hlZCB0byBlYWNoIFJlYWN0IFJvb3QgYW5kIFJlYWN0IFBvcnRhbCBSb290LiBUb2dldGhlcixcbiAgICAgIC8vIHRoZSBET00gbm9kZXMgcmVwcmVzZW50aW5nIHRoZXNlIHJvb3RzIGFyZSB0aGUgXCJyb290Q29udGFpbmVyXCIuXG4gICAgICAvLyBUbyBmaWd1cmUgb3V0IHdoaWNoIGFuY2VzdG9yIGluc3RhbmNlIHdlIHNob3VsZCB1c2UsIHdlIHRyYXZlcnNlXG4gICAgICAvLyB1cCB0aGUgZmliZXIgdHJlZSBmcm9tIHRoZSB0YXJnZXQgaW5zdGFuY2UgYW5kIGF0dGVtcHQgdG8gZmluZFxuICAgICAgLy8gcm9vdCBib3VuZGFyaWVzIHRoYXQgbWF0Y2ggdGhhdCBvZiBvdXIgY3VycmVudCBcInJvb3RDb250YWluZXJcIi5cbiAgICAgIC8vIElmIHdlIGZpbmQgdGhhdCBcInJvb3RDb250YWluZXJcIiwgd2UgZmluZCB0aGUgcGFyZW50IGZpYmVyXG4gICAgICAvLyBzdWItdHJlZSBmb3IgdGhhdCByb290IGFuZCBtYWtlIHRoYXQgb3VyIGFuY2VzdG9yIGluc3RhbmNlLlxuICAgICAgdmFyIG5vZGUgPSB0YXJnZXRJbnN0O1xuXG4gICAgICBtYWluTG9vcDogd2hpbGUgKHRydWUpIHtcbiAgICAgICAgaWYgKG5vZGUgPT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbm9kZVRhZyA9IG5vZGUudGFnO1xuXG4gICAgICAgIGlmIChub2RlVGFnID09PSBIb3N0Um9vdCB8fCBub2RlVGFnID09PSBIb3N0UG9ydGFsKSB7XG4gICAgICAgICAgdmFyIGNvbnRhaW5lciA9IG5vZGUuc3RhdGVOb2RlLmNvbnRhaW5lckluZm87XG5cbiAgICAgICAgICBpZiAoaXNNYXRjaGluZ1Jvb3RDb250YWluZXIoY29udGFpbmVyLCB0YXJnZXRDb250YWluZXJOb2RlKSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG5vZGVUYWcgPT09IEhvc3RQb3J0YWwpIHtcbiAgICAgICAgICAgIC8vIFRoZSB0YXJnZXQgaXMgYSBwb3J0YWwsIGJ1dCBpdCdzIG5vdCB0aGUgcm9vdENvbnRhaW5lciB3ZSdyZSBsb29raW5nIGZvci5cbiAgICAgICAgICAgIC8vIE5vcm1hbGx5IHBvcnRhbHMgaGFuZGxlIHRoZWlyIG93biBldmVudHMgYWxsIHRoZSB3YXkgZG93biB0byB0aGUgcm9vdC5cbiAgICAgICAgICAgIC8vIFNvIHdlIHNob3VsZCBiZSBhYmxlIHRvIHN0b3Agbm93LiBIb3dldmVyLCB3ZSBkb24ndCBrbm93IGlmIHRoaXMgcG9ydGFsXG4gICAgICAgICAgICAvLyB3YXMgcGFydCBvZiAqb3VyKiByb290LlxuICAgICAgICAgICAgdmFyIGdyYW5kTm9kZSA9IG5vZGUucmV0dXJuO1xuXG4gICAgICAgICAgICB3aGlsZSAoZ3JhbmROb2RlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHZhciBncmFuZFRhZyA9IGdyYW5kTm9kZS50YWc7XG5cbiAgICAgICAgICAgICAgaWYgKGdyYW5kVGFnID09PSBIb3N0Um9vdCB8fCBncmFuZFRhZyA9PT0gSG9zdFBvcnRhbCkge1xuICAgICAgICAgICAgICAgIHZhciBncmFuZENvbnRhaW5lciA9IGdyYW5kTm9kZS5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztcblxuICAgICAgICAgICAgICAgIGlmIChpc01hdGNoaW5nUm9vdENvbnRhaW5lcihncmFuZENvbnRhaW5lciwgdGFyZ2V0Q29udGFpbmVyTm9kZSkpIHtcbiAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIHJvb3RDb250YWluZXIgd2UncmUgbG9va2luZyBmb3IgYW5kIHdlIGZvdW5kIGl0IGFzXG4gICAgICAgICAgICAgICAgICAvLyBhIHBhcmVudCBvZiB0aGUgUG9ydGFsLiBUaGF0IG1lYW5zIHdlIGNhbiBpZ25vcmUgaXQgYmVjYXVzZSB0aGVcbiAgICAgICAgICAgICAgICAgIC8vIFBvcnRhbCB3aWxsIGJ1YmJsZSB0aHJvdWdoIHRvIHVzLlxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGdyYW5kTm9kZSA9IGdyYW5kTm9kZS5yZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSAvLyBOb3cgd2UgbmVlZCB0byBmaW5kIGl0J3MgY29ycmVzcG9uZGluZyBob3N0IGZpYmVyIGluIHRoZSBvdGhlclxuICAgICAgICAgIC8vIHRyZWUuIFRvIGRvIHRoaXMgd2UgY2FuIHVzZSBnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZSwgYnV0IHdlXG4gICAgICAgICAgLy8gbmVlZCB0byB2YWxpZGF0ZSB0aGF0IHRoZSBmaWJlciBpcyBhIGhvc3QgaW5zdGFuY2UsIG90aGVyd2lzZVxuICAgICAgICAgIC8vIHdlIG5lZWQgdG8gdHJhdmVyc2UgdXAgdGhyb3VnaCB0aGUgRE9NIHRpbGwgd2UgZmluZCB0aGUgY29ycmVjdFxuICAgICAgICAgIC8vIG5vZGUgdGhhdCBpcyBmcm9tIHRoZSBvdGhlciB0cmVlLlxuXG5cbiAgICAgICAgICB3aGlsZSAoY29udGFpbmVyICE9PSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgcGFyZW50Tm9kZSA9IGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKGNvbnRhaW5lcik7XG5cbiAgICAgICAgICAgIGlmIChwYXJlbnROb2RlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHBhcmVudFRhZyA9IHBhcmVudE5vZGUudGFnO1xuXG4gICAgICAgICAgICBpZiAocGFyZW50VGFnID09PSBIb3N0Q29tcG9uZW50IHx8IHBhcmVudFRhZyA9PT0gSG9zdFRleHQpIHtcbiAgICAgICAgICAgICAgbm9kZSA9IGFuY2VzdG9ySW5zdCA9IHBhcmVudE5vZGU7XG4gICAgICAgICAgICAgIGNvbnRpbnVlIG1haW5Mb29wO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb250YWluZXIgPSBjb250YWluZXIucGFyZW50Tm9kZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYmF0Y2hlZEV2ZW50VXBkYXRlcyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGRpc3BhdGNoRXZlbnRzRm9yUGx1Z2lucyhkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIG5hdGl2ZUV2ZW50LCBhbmNlc3Rvckluc3QpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRGlzcGF0Y2hMaXN0ZW5lcihpbnN0YW5jZSwgbGlzdGVuZXIsIGN1cnJlbnRUYXJnZXQpIHtcbiAgcmV0dXJuIHtcbiAgICBpbnN0YW5jZTogaW5zdGFuY2UsXG4gICAgbGlzdGVuZXI6IGxpc3RlbmVyLFxuICAgIGN1cnJlbnRUYXJnZXQ6IGN1cnJlbnRUYXJnZXRcbiAgfTtcbn1cblxuZnVuY3Rpb24gYWNjdW11bGF0ZVNpbmdsZVBoYXNlTGlzdGVuZXJzKHRhcmdldEZpYmVyLCByZWFjdE5hbWUsIG5hdGl2ZUV2ZW50VHlwZSwgaW5DYXB0dXJlUGhhc2UsIGFjY3VtdWxhdGVUYXJnZXRPbmx5KSB7XG4gIHZhciBjYXB0dXJlTmFtZSA9IHJlYWN0TmFtZSAhPT0gbnVsbCA/IHJlYWN0TmFtZSArICdDYXB0dXJlJyA6IG51bGw7XG4gIHZhciByZWFjdEV2ZW50TmFtZSA9IGluQ2FwdHVyZVBoYXNlID8gY2FwdHVyZU5hbWUgOiByZWFjdE5hbWU7XG4gIHZhciBsaXN0ZW5lcnMgPSBbXTtcbiAgdmFyIGluc3RhbmNlID0gdGFyZ2V0RmliZXI7XG4gIHZhciBsYXN0SG9zdENvbXBvbmVudCA9IG51bGw7IC8vIEFjY3VtdWxhdGUgYWxsIGluc3RhbmNlcyBhbmQgbGlzdGVuZXJzIHZpYSB0aGUgdGFyZ2V0IC0+IHJvb3QgcGF0aC5cblxuICB3aGlsZSAoaW5zdGFuY2UgIT09IG51bGwpIHtcbiAgICB2YXIgX2luc3RhbmNlMiA9IGluc3RhbmNlLFxuICAgICAgICBzdGF0ZU5vZGUgPSBfaW5zdGFuY2UyLnN0YXRlTm9kZSxcbiAgICAgICAgdGFnID0gX2luc3RhbmNlMi50YWc7IC8vIEhhbmRsZSBsaXN0ZW5lcnMgdGhhdCBhcmUgb24gSG9zdENvbXBvbmVudHMgKGkuZS4gPGRpdj4pXG5cbiAgICBpZiAodGFnID09PSBIb3N0Q29tcG9uZW50ICYmIHN0YXRlTm9kZSAhPT0gbnVsbCkge1xuICAgICAgbGFzdEhvc3RDb21wb25lbnQgPSBzdGF0ZU5vZGU7IC8vIGNyZWF0ZUV2ZW50SGFuZGxlIGxpc3RlbmVyc1xuXG5cbiAgICAgIGlmIChyZWFjdEV2ZW50TmFtZSAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgbGlzdGVuZXIgPSBnZXRMaXN0ZW5lcihpbnN0YW5jZSwgcmVhY3RFdmVudE5hbWUpO1xuXG4gICAgICAgIGlmIChsaXN0ZW5lciAhPSBudWxsKSB7XG4gICAgICAgICAgbGlzdGVuZXJzLnB1c2goY3JlYXRlRGlzcGF0Y2hMaXN0ZW5lcihpbnN0YW5jZSwgbGlzdGVuZXIsIGxhc3RIb3N0Q29tcG9uZW50KSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIElmIHdlIGFyZSBvbmx5IGFjY3VtdWxhdGluZyBldmVudHMgZm9yIHRoZSB0YXJnZXQsIHRoZW4gd2UgZG9uJ3RcbiAgICAvLyBjb250aW51ZSB0byBwcm9wYWdhdGUgdGhyb3VnaCB0aGUgUmVhY3QgZmliZXIgdHJlZSB0byBmaW5kIG90aGVyXG4gICAgLy8gbGlzdGVuZXJzLlxuXG5cbiAgICBpZiAoYWNjdW11bGF0ZVRhcmdldE9ubHkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGluc3RhbmNlID0gaW5zdGFuY2UucmV0dXJuO1xuICB9XG5cbiAgcmV0dXJuIGxpc3RlbmVycztcbn0gLy8gV2Ugc2hvdWxkIG9ubHkgdXNlIHRoaXMgZnVuY3Rpb24gZm9yOlxuLy8gLSBCZWZvcmVJbnB1dEV2ZW50UGx1Z2luXG4vLyAtIENoYW5nZUV2ZW50UGx1Z2luXG4vLyAtIFNlbGVjdEV2ZW50UGx1Z2luXG4vLyBUaGlzIGlzIGJlY2F1c2Ugd2Ugb25seSBwcm9jZXNzIHRoZXNlIHBsdWdpbnNcbi8vIGluIHRoZSBidWJibGUgcGhhc2UsIHNvIHdlIG5lZWQgdG8gYWNjdW11bGF0ZSB0d29cbi8vIHBoYXNlIGV2ZW50IGxpc3RlbmVycyAodmlhIGVtdWxhdGlvbikuXG5cbmZ1bmN0aW9uIGFjY3VtdWxhdGVUd29QaGFzZUxpc3RlbmVycyh0YXJnZXRGaWJlciwgcmVhY3ROYW1lKSB7XG4gIHZhciBjYXB0dXJlTmFtZSA9IHJlYWN0TmFtZSArICdDYXB0dXJlJztcbiAgdmFyIGxpc3RlbmVycyA9IFtdO1xuICB2YXIgaW5zdGFuY2UgPSB0YXJnZXRGaWJlcjsgLy8gQWNjdW11bGF0ZSBhbGwgaW5zdGFuY2VzIGFuZCBsaXN0ZW5lcnMgdmlhIHRoZSB0YXJnZXQgLT4gcm9vdCBwYXRoLlxuXG4gIHdoaWxlIChpbnN0YW5jZSAhPT0gbnVsbCkge1xuICAgIHZhciBfaW5zdGFuY2UzID0gaW5zdGFuY2UsXG4gICAgICAgIHN0YXRlTm9kZSA9IF9pbnN0YW5jZTMuc3RhdGVOb2RlLFxuICAgICAgICB0YWcgPSBfaW5zdGFuY2UzLnRhZzsgLy8gSGFuZGxlIGxpc3RlbmVycyB0aGF0IGFyZSBvbiBIb3N0Q29tcG9uZW50cyAoaS5lLiA8ZGl2PilcblxuICAgIGlmICh0YWcgPT09IEhvc3RDb21wb25lbnQgJiYgc3RhdGVOb2RlICE9PSBudWxsKSB7XG4gICAgICB2YXIgY3VycmVudFRhcmdldCA9IHN0YXRlTm9kZTtcbiAgICAgIHZhciBjYXB0dXJlTGlzdGVuZXIgPSBnZXRMaXN0ZW5lcihpbnN0YW5jZSwgY2FwdHVyZU5hbWUpO1xuXG4gICAgICBpZiAoY2FwdHVyZUxpc3RlbmVyICE9IG51bGwpIHtcbiAgICAgICAgbGlzdGVuZXJzLnVuc2hpZnQoY3JlYXRlRGlzcGF0Y2hMaXN0ZW5lcihpbnN0YW5jZSwgY2FwdHVyZUxpc3RlbmVyLCBjdXJyZW50VGFyZ2V0KSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBidWJibGVMaXN0ZW5lciA9IGdldExpc3RlbmVyKGluc3RhbmNlLCByZWFjdE5hbWUpO1xuXG4gICAgICBpZiAoYnViYmxlTGlzdGVuZXIgIT0gbnVsbCkge1xuICAgICAgICBsaXN0ZW5lcnMucHVzaChjcmVhdGVEaXNwYXRjaExpc3RlbmVyKGluc3RhbmNlLCBidWJibGVMaXN0ZW5lciwgY3VycmVudFRhcmdldCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGluc3RhbmNlID0gaW5zdGFuY2UucmV0dXJuO1xuICB9XG5cbiAgcmV0dXJuIGxpc3RlbmVycztcbn1cblxuZnVuY3Rpb24gZ2V0UGFyZW50KGluc3QpIHtcbiAgaWYgKGluc3QgPT09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGRvIHtcbiAgICBpbnN0ID0gaW5zdC5yZXR1cm47IC8vIFRPRE86IElmIHRoaXMgaXMgYSBIb3N0Um9vdCB3ZSBtaWdodCB3YW50IHRvIGJhaWwgb3V0LlxuICAgIC8vIFRoYXQgaXMgZGVwZW5kaW5nIG9uIGlmIHdlIHdhbnQgbmVzdGVkIHN1YnRyZWVzIChsYXllcnMpIHRvIGJ1YmJsZVxuICAgIC8vIGV2ZW50cyB0byB0aGVpciBwYXJlbnQuIFdlIGNvdWxkIGFsc28gZ28gdGhyb3VnaCBwYXJlbnROb2RlIG9uIHRoZVxuICAgIC8vIGhvc3Qgbm9kZSBidXQgdGhhdCB3b3VsZG4ndCB3b3JrIGZvciBSZWFjdCBOYXRpdmUgYW5kIGRvZXNuJ3QgbGV0IHVzXG4gICAgLy8gZG8gdGhlIHBvcnRhbCBmZWF0dXJlLlxuICB9IHdoaWxlIChpbnN0ICYmIGluc3QudGFnICE9PSBIb3N0Q29tcG9uZW50KTtcblxuICBpZiAoaW5zdCkge1xuICAgIHJldHVybiBpbnN0O1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4vKipcbiAqIFJldHVybiB0aGUgbG93ZXN0IGNvbW1vbiBhbmNlc3RvciBvZiBBIGFuZCBCLCBvciBudWxsIGlmIHRoZXkgYXJlIGluXG4gKiBkaWZmZXJlbnQgdHJlZXMuXG4gKi9cblxuXG5mdW5jdGlvbiBnZXRMb3dlc3RDb21tb25BbmNlc3RvcihpbnN0QSwgaW5zdEIpIHtcbiAgdmFyIG5vZGVBID0gaW5zdEE7XG4gIHZhciBub2RlQiA9IGluc3RCO1xuICB2YXIgZGVwdGhBID0gMDtcblxuICBmb3IgKHZhciB0ZW1wQSA9IG5vZGVBOyB0ZW1wQTsgdGVtcEEgPSBnZXRQYXJlbnQodGVtcEEpKSB7XG4gICAgZGVwdGhBKys7XG4gIH1cblxuICB2YXIgZGVwdGhCID0gMDtcblxuICBmb3IgKHZhciB0ZW1wQiA9IG5vZGVCOyB0ZW1wQjsgdGVtcEIgPSBnZXRQYXJlbnQodGVtcEIpKSB7XG4gICAgZGVwdGhCKys7XG4gIH0gLy8gSWYgQSBpcyBkZWVwZXIsIGNyYXdsIHVwLlxuXG5cbiAgd2hpbGUgKGRlcHRoQSAtIGRlcHRoQiA+IDApIHtcbiAgICBub2RlQSA9IGdldFBhcmVudChub2RlQSk7XG4gICAgZGVwdGhBLS07XG4gIH0gLy8gSWYgQiBpcyBkZWVwZXIsIGNyYXdsIHVwLlxuXG5cbiAgd2hpbGUgKGRlcHRoQiAtIGRlcHRoQSA+IDApIHtcbiAgICBub2RlQiA9IGdldFBhcmVudChub2RlQik7XG4gICAgZGVwdGhCLS07XG4gIH0gLy8gV2FsayBpbiBsb2Nrc3RlcCB1bnRpbCB3ZSBmaW5kIGEgbWF0Y2guXG5cblxuICB2YXIgZGVwdGggPSBkZXB0aEE7XG5cbiAgd2hpbGUgKGRlcHRoLS0pIHtcbiAgICBpZiAobm9kZUEgPT09IG5vZGVCIHx8IG5vZGVCICE9PSBudWxsICYmIG5vZGVBID09PSBub2RlQi5hbHRlcm5hdGUpIHtcbiAgICAgIHJldHVybiBub2RlQTtcbiAgICB9XG5cbiAgICBub2RlQSA9IGdldFBhcmVudChub2RlQSk7XG4gICAgbm9kZUIgPSBnZXRQYXJlbnQobm9kZUIpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGFjY3VtdWxhdGVFbnRlckxlYXZlTGlzdGVuZXJzRm9yRXZlbnQoZGlzcGF0Y2hRdWV1ZSwgZXZlbnQsIHRhcmdldCwgY29tbW9uLCBpbkNhcHR1cmVQaGFzZSkge1xuICB2YXIgcmVnaXN0cmF0aW9uTmFtZSA9IGV2ZW50Ll9yZWFjdE5hbWU7XG4gIHZhciBsaXN0ZW5lcnMgPSBbXTtcbiAgdmFyIGluc3RhbmNlID0gdGFyZ2V0O1xuXG4gIHdoaWxlIChpbnN0YW5jZSAhPT0gbnVsbCkge1xuICAgIGlmIChpbnN0YW5jZSA9PT0gY29tbW9uKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICB2YXIgX2luc3RhbmNlNCA9IGluc3RhbmNlLFxuICAgICAgICBhbHRlcm5hdGUgPSBfaW5zdGFuY2U0LmFsdGVybmF0ZSxcbiAgICAgICAgc3RhdGVOb2RlID0gX2luc3RhbmNlNC5zdGF0ZU5vZGUsXG4gICAgICAgIHRhZyA9IF9pbnN0YW5jZTQudGFnO1xuXG4gICAgaWYgKGFsdGVybmF0ZSAhPT0gbnVsbCAmJiBhbHRlcm5hdGUgPT09IGNvbW1vbikge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHRhZyA9PT0gSG9zdENvbXBvbmVudCAmJiBzdGF0ZU5vZGUgIT09IG51bGwpIHtcbiAgICAgIHZhciBjdXJyZW50VGFyZ2V0ID0gc3RhdGVOb2RlO1xuXG4gICAgICBpZiAoaW5DYXB0dXJlUGhhc2UpIHtcbiAgICAgICAgdmFyIGNhcHR1cmVMaXN0ZW5lciA9IGdldExpc3RlbmVyKGluc3RhbmNlLCByZWdpc3RyYXRpb25OYW1lKTtcblxuICAgICAgICBpZiAoY2FwdHVyZUxpc3RlbmVyICE9IG51bGwpIHtcbiAgICAgICAgICBsaXN0ZW5lcnMudW5zaGlmdChjcmVhdGVEaXNwYXRjaExpc3RlbmVyKGluc3RhbmNlLCBjYXB0dXJlTGlzdGVuZXIsIGN1cnJlbnRUYXJnZXQpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghaW5DYXB0dXJlUGhhc2UpIHtcbiAgICAgICAgdmFyIGJ1YmJsZUxpc3RlbmVyID0gZ2V0TGlzdGVuZXIoaW5zdGFuY2UsIHJlZ2lzdHJhdGlvbk5hbWUpO1xuXG4gICAgICAgIGlmIChidWJibGVMaXN0ZW5lciAhPSBudWxsKSB7XG4gICAgICAgICAgbGlzdGVuZXJzLnB1c2goY3JlYXRlRGlzcGF0Y2hMaXN0ZW5lcihpbnN0YW5jZSwgYnViYmxlTGlzdGVuZXIsIGN1cnJlbnRUYXJnZXQpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGluc3RhbmNlID0gaW5zdGFuY2UucmV0dXJuO1xuICB9XG5cbiAgaWYgKGxpc3RlbmVycy5sZW5ndGggIT09IDApIHtcbiAgICBkaXNwYXRjaFF1ZXVlLnB1c2goe1xuICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgbGlzdGVuZXJzOiBsaXN0ZW5lcnNcbiAgICB9KTtcbiAgfVxufSAvLyBXZSBzaG91bGQgb25seSB1c2UgdGhpcyBmdW5jdGlvbiBmb3I6XG4vLyAtIEVudGVyTGVhdmVFdmVudFBsdWdpblxuLy8gVGhpcyBpcyBiZWNhdXNlIHdlIG9ubHkgcHJvY2VzcyB0aGlzIHBsdWdpblxuLy8gaW4gdGhlIGJ1YmJsZSBwaGFzZSwgc28gd2UgbmVlZCB0byBhY2N1bXVsYXRlIHR3b1xuLy8gcGhhc2UgZXZlbnQgbGlzdGVuZXJzLlxuXG5cbmZ1bmN0aW9uIGFjY3VtdWxhdGVFbnRlckxlYXZlVHdvUGhhc2VMaXN0ZW5lcnMoZGlzcGF0Y2hRdWV1ZSwgbGVhdmVFdmVudCwgZW50ZXJFdmVudCwgZnJvbSwgdG8pIHtcbiAgdmFyIGNvbW1vbiA9IGZyb20gJiYgdG8gPyBnZXRMb3dlc3RDb21tb25BbmNlc3Rvcihmcm9tLCB0bykgOiBudWxsO1xuXG4gIGlmIChmcm9tICE9PSBudWxsKSB7XG4gICAgYWNjdW11bGF0ZUVudGVyTGVhdmVMaXN0ZW5lcnNGb3JFdmVudChkaXNwYXRjaFF1ZXVlLCBsZWF2ZUV2ZW50LCBmcm9tLCBjb21tb24sIGZhbHNlKTtcbiAgfVxuXG4gIGlmICh0byAhPT0gbnVsbCAmJiBlbnRlckV2ZW50ICE9PSBudWxsKSB7XG4gICAgYWNjdW11bGF0ZUVudGVyTGVhdmVMaXN0ZW5lcnNGb3JFdmVudChkaXNwYXRjaFF1ZXVlLCBlbnRlckV2ZW50LCB0bywgY29tbW9uLCB0cnVlKTtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0TGlzdGVuZXJTZXRLZXkoZG9tRXZlbnROYW1lLCBjYXB0dXJlKSB7XG4gIHJldHVybiBkb21FdmVudE5hbWUgKyBcIl9fXCIgKyAoY2FwdHVyZSA/ICdjYXB0dXJlJyA6ICdidWJibGUnKTtcbn1cblxudmFyIGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uID0gZmFsc2U7XG52YXIgREFOR0VST1VTTFlfU0VUX0lOTkVSX0hUTUwgPSAnZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwnO1xudmFyIFNVUFBSRVNTX0NPTlRFTlRfRURJVEFCTEVfV0FSTklORyA9ICdzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmcnO1xudmFyIFNVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HID0gJ3N1cHByZXNzSHlkcmF0aW9uV2FybmluZyc7XG52YXIgQVVUT0ZPQ1VTID0gJ2F1dG9Gb2N1cyc7XG52YXIgQ0hJTERSRU4gPSAnY2hpbGRyZW4nO1xudmFyIFNUWUxFID0gJ3N0eWxlJztcbnZhciBIVE1MJDEgPSAnX19odG1sJztcbnZhciBIVE1MX05BTUVTUEFDRSQxID0gTmFtZXNwYWNlcy5odG1sO1xudmFyIHdhcm5lZFVua25vd25UYWdzO1xudmFyIHN1cHByZXNzSHlkcmF0aW9uV2FybmluZztcbnZhciB2YWxpZGF0ZVByb3BlcnRpZXNJbkRldmVsb3BtZW50O1xudmFyIHdhcm5Gb3JUZXh0RGlmZmVyZW5jZTtcbnZhciB3YXJuRm9yUHJvcERpZmZlcmVuY2U7XG52YXIgd2FybkZvckV4dHJhQXR0cmlidXRlcztcbnZhciB3YXJuRm9ySW52YWxpZEV2ZW50TGlzdGVuZXI7XG52YXIgY2FuRGlmZlN0eWxlRm9ySHlkcmF0aW9uV2FybmluZztcbnZhciBub3JtYWxpemVNYXJrdXBGb3JUZXh0T3JBdHRyaWJ1dGU7XG52YXIgbm9ybWFsaXplSFRNTDtcblxue1xuICB3YXJuZWRVbmtub3duVGFncyA9IHtcbiAgICAvLyBUaGVyZSBhcmUgd29ya2luZyBwb2x5ZmlsbHMgZm9yIDxkaWFsb2c+LiBMZXQgcGVvcGxlIHVzZSBpdC5cbiAgICBkaWFsb2c6IHRydWUsXG4gICAgLy8gRWxlY3Ryb24gc2hpcHMgYSBjdXN0b20gPHdlYnZpZXc+IHRhZyB0byBkaXNwbGF5IGV4dGVybmFsIHdlYiBjb250ZW50IGluXG4gICAgLy8gYW4gaXNvbGF0ZWQgZnJhbWUgYW5kIHByb2Nlc3MuXG4gICAgLy8gVGhpcyB0YWcgaXMgbm90IHByZXNlbnQgaW4gbm9uIEVsZWN0cm9uIGVudmlyb25tZW50cyBzdWNoIGFzIEpTRG9tIHdoaWNoXG4gICAgLy8gaXMgb2Z0ZW4gdXNlZCBmb3IgdGVzdGluZyBwdXJwb3Nlcy5cbiAgICAvLyBAc2VlIGh0dHBzOi8vZWxlY3Ryb25qcy5vcmcvZG9jcy9hcGkvd2Vidmlldy10YWdcbiAgICB3ZWJ2aWV3OiB0cnVlXG4gIH07XG5cbiAgdmFsaWRhdGVQcm9wZXJ0aWVzSW5EZXZlbG9wbWVudCA9IGZ1bmN0aW9uICh0eXBlLCBwcm9wcykge1xuICAgIHZhbGlkYXRlUHJvcGVydGllcyh0eXBlLCBwcm9wcyk7XG4gICAgdmFsaWRhdGVQcm9wZXJ0aWVzJDEodHlwZSwgcHJvcHMpO1xuICAgIHZhbGlkYXRlUHJvcGVydGllcyQyKHR5cGUsIHByb3BzLCB7XG4gICAgICByZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzOiByZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzLFxuICAgICAgcG9zc2libGVSZWdpc3RyYXRpb25OYW1lczogcG9zc2libGVSZWdpc3RyYXRpb25OYW1lc1xuICAgIH0pO1xuICB9OyAvLyBJRSAxMSBwYXJzZXMgJiBub3JtYWxpemVzIHRoZSBzdHlsZSBhdHRyaWJ1dGUgYXMgb3Bwb3NlZCB0byBvdGhlclxuICAvLyBicm93c2Vycy4gSXQgYWRkcyBzcGFjZXMgYW5kIHNvcnRzIHRoZSBwcm9wZXJ0aWVzIGluIHNvbWVcbiAgLy8gbm9uLWFscGhhYmV0aWNhbCBvcmRlci4gSGFuZGxpbmcgdGhhdCB3b3VsZCByZXF1aXJlIHNvcnRpbmcgQ1NTXG4gIC8vIHByb3BlcnRpZXMgaW4gdGhlIGNsaWVudCAmIHNlcnZlciB2ZXJzaW9ucyBvciBhcHBseWluZ1xuICAvLyBgZXhwZWN0ZWRTdHlsZWAgdG8gYSB0ZW1wb3JhcnkgRE9NIG5vZGUgdG8gcmVhZCBpdHMgYHN0eWxlYCBhdHRyaWJ1dGVcbiAgLy8gbm9ybWFsaXplZC4gU2luY2UgaXQgb25seSBhZmZlY3RzIElFLCB3ZSdyZSBza2lwcGluZyBzdHlsZSB3YXJuaW5nc1xuICAvLyBpbiB0aGF0IGJyb3dzZXIgY29tcGxldGVseSBpbiBmYXZvciBvZiBkb2luZyBhbGwgdGhhdCB3b3JrLlxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMTgwN1xuXG5cbiAgY2FuRGlmZlN0eWxlRm9ySHlkcmF0aW9uV2FybmluZyA9IGNhblVzZURPTSAmJiAhZG9jdW1lbnQuZG9jdW1lbnRNb2RlOyAvLyBIVE1MIHBhcnNpbmcgbm9ybWFsaXplcyBDUiBhbmQgQ1JMRiB0byBMRi5cbiAgLy8gSXQgYWxzbyBjYW4gdHVybiBcXHUwMDAwIGludG8gXFx1RkZGRCBpbnNpZGUgYXR0cmlidXRlcy5cbiAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2h0bWw1L3NpbmdsZS1wYWdlLmh0bWwjcHJlcHJvY2Vzc2luZy10aGUtaW5wdXQtc3RyZWFtXG4gIC8vIElmIHdlIGhhdmUgYSBtaXNtYXRjaCwgaXQgbWlnaHQgYmUgY2F1c2VkIGJ5IHRoYXQuXG4gIC8vIFdlIHdpbGwgc3RpbGwgcGF0Y2ggdXAgaW4gdGhpcyBjYXNlIGJ1dCBub3QgZmlyZSB0aGUgd2FybmluZy5cblxuICB2YXIgTk9STUFMSVpFX05FV0xJTkVTX1JFR0VYID0gL1xcclxcbj8vZztcbiAgdmFyIE5PUk1BTElaRV9OVUxMX0FORF9SRVBMQUNFTUVOVF9SRUdFWCA9IC9cXHUwMDAwfFxcdUZGRkQvZztcblxuICBub3JtYWxpemVNYXJrdXBGb3JUZXh0T3JBdHRyaWJ1dGUgPSBmdW5jdGlvbiAobWFya3VwKSB7XG4gICAgdmFyIG1hcmt1cFN0cmluZyA9IHR5cGVvZiBtYXJrdXAgPT09ICdzdHJpbmcnID8gbWFya3VwIDogJycgKyBtYXJrdXA7XG4gICAgcmV0dXJuIG1hcmt1cFN0cmluZy5yZXBsYWNlKE5PUk1BTElaRV9ORVdMSU5FU19SRUdFWCwgJ1xcbicpLnJlcGxhY2UoTk9STUFMSVpFX05VTExfQU5EX1JFUExBQ0VNRU5UX1JFR0VYLCAnJyk7XG4gIH07XG5cbiAgd2FybkZvclRleHREaWZmZXJlbmNlID0gZnVuY3Rpb24gKHNlcnZlclRleHQsIGNsaWVudFRleHQpIHtcbiAgICBpZiAoZGlkV2FybkludmFsaWRIeWRyYXRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgbm9ybWFsaXplZENsaWVudFRleHQgPSBub3JtYWxpemVNYXJrdXBGb3JUZXh0T3JBdHRyaWJ1dGUoY2xpZW50VGV4dCk7XG4gICAgdmFyIG5vcm1hbGl6ZWRTZXJ2ZXJUZXh0ID0gbm9ybWFsaXplTWFya3VwRm9yVGV4dE9yQXR0cmlidXRlKHNlcnZlclRleHQpO1xuXG4gICAgaWYgKG5vcm1hbGl6ZWRTZXJ2ZXJUZXh0ID09PSBub3JtYWxpemVkQ2xpZW50VGV4dCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uID0gdHJ1ZTtcblxuICAgIGVycm9yKCdUZXh0IGNvbnRlbnQgZGlkIG5vdCBtYXRjaC4gU2VydmVyOiBcIiVzXCIgQ2xpZW50OiBcIiVzXCInLCBub3JtYWxpemVkU2VydmVyVGV4dCwgbm9ybWFsaXplZENsaWVudFRleHQpO1xuICB9O1xuXG4gIHdhcm5Gb3JQcm9wRGlmZmVyZW5jZSA9IGZ1bmN0aW9uIChwcm9wTmFtZSwgc2VydmVyVmFsdWUsIGNsaWVudFZhbHVlKSB7XG4gICAgaWYgKGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIG5vcm1hbGl6ZWRDbGllbnRWYWx1ZSA9IG5vcm1hbGl6ZU1hcmt1cEZvclRleHRPckF0dHJpYnV0ZShjbGllbnRWYWx1ZSk7XG4gICAgdmFyIG5vcm1hbGl6ZWRTZXJ2ZXJWYWx1ZSA9IG5vcm1hbGl6ZU1hcmt1cEZvclRleHRPckF0dHJpYnV0ZShzZXJ2ZXJWYWx1ZSk7XG5cbiAgICBpZiAobm9ybWFsaXplZFNlcnZlclZhbHVlID09PSBub3JtYWxpemVkQ2xpZW50VmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbiA9IHRydWU7XG5cbiAgICBlcnJvcignUHJvcCBgJXNgIGRpZCBub3QgbWF0Y2guIFNlcnZlcjogJXMgQ2xpZW50OiAlcycsIHByb3BOYW1lLCBKU09OLnN0cmluZ2lmeShub3JtYWxpemVkU2VydmVyVmFsdWUpLCBKU09OLnN0cmluZ2lmeShub3JtYWxpemVkQ2xpZW50VmFsdWUpKTtcbiAgfTtcblxuICB3YXJuRm9yRXh0cmFBdHRyaWJ1dGVzID0gZnVuY3Rpb24gKGF0dHJpYnV0ZU5hbWVzKSB7XG4gICAgaWYgKGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGlkV2FybkludmFsaWRIeWRyYXRpb24gPSB0cnVlO1xuICAgIHZhciBuYW1lcyA9IFtdO1xuICAgIGF0dHJpYnV0ZU5hbWVzLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIG5hbWVzLnB1c2gobmFtZSk7XG4gICAgfSk7XG5cbiAgICBlcnJvcignRXh0cmEgYXR0cmlidXRlcyBmcm9tIHRoZSBzZXJ2ZXI6ICVzJywgbmFtZXMpO1xuICB9O1xuXG4gIHdhcm5Gb3JJbnZhbGlkRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uIChyZWdpc3RyYXRpb25OYW1lLCBsaXN0ZW5lcikge1xuICAgIGlmIChsaXN0ZW5lciA9PT0gZmFsc2UpIHtcbiAgICAgIGVycm9yKCdFeHBlY3RlZCBgJXNgIGxpc3RlbmVyIHRvIGJlIGEgZnVuY3Rpb24sIGluc3RlYWQgZ290IGBmYWxzZWAuXFxuXFxuJyArICdJZiB5b3UgdXNlZCB0byBjb25kaXRpb25hbGx5IG9taXQgaXQgd2l0aCAlcz17Y29uZGl0aW9uICYmIHZhbHVlfSwgJyArICdwYXNzICVzPXtjb25kaXRpb24gPyB2YWx1ZSA6IHVuZGVmaW5lZH0gaW5zdGVhZC4nLCByZWdpc3RyYXRpb25OYW1lLCByZWdpc3RyYXRpb25OYW1lLCByZWdpc3RyYXRpb25OYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXJyb3IoJ0V4cGVjdGVkIGAlc2AgbGlzdGVuZXIgdG8gYmUgYSBmdW5jdGlvbiwgaW5zdGVhZCBnb3QgYSB2YWx1ZSBvZiBgJXNgIHR5cGUuJywgcmVnaXN0cmF0aW9uTmFtZSwgdHlwZW9mIGxpc3RlbmVyKTtcbiAgICB9XG4gIH07IC8vIFBhcnNlIHRoZSBIVE1MIGFuZCByZWFkIGl0IGJhY2sgdG8gbm9ybWFsaXplIHRoZSBIVE1MIHN0cmluZyBzbyB0aGF0IGl0XG4gIC8vIGNhbiBiZSB1c2VkIGZvciBjb21wYXJpc29uLlxuXG5cbiAgbm9ybWFsaXplSFRNTCA9IGZ1bmN0aW9uIChwYXJlbnQsIGh0bWwpIHtcbiAgICAvLyBXZSBjb3VsZCBoYXZlIGNyZWF0ZWQgYSBzZXBhcmF0ZSBkb2N1bWVudCBoZXJlIHRvIGF2b2lkXG4gICAgLy8gcmUtaW5pdGlhbGl6aW5nIGN1c3RvbSBlbGVtZW50cyBpZiB0aGV5IGV4aXN0LiBCdXQgdGhpcyBicmVha3NcbiAgICAvLyBob3cgPG5vc2NyaXB0PiBpcyBiZWluZyBoYW5kbGVkLiBTbyB3ZSB1c2UgdGhlIHNhbWUgZG9jdW1lbnQuXG4gICAgLy8gU2VlIHRoZSBkaXNjdXNzaW9uIGluIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzExMTU3LlxuICAgIHZhciB0ZXN0RWxlbWVudCA9IHBhcmVudC5uYW1lc3BhY2VVUkkgPT09IEhUTUxfTkFNRVNQQUNFJDEgPyBwYXJlbnQub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KHBhcmVudC50YWdOYW1lKSA6IHBhcmVudC5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhwYXJlbnQubmFtZXNwYWNlVVJJLCBwYXJlbnQudGFnTmFtZSk7XG4gICAgdGVzdEVsZW1lbnQuaW5uZXJIVE1MID0gaHRtbDtcbiAgICByZXR1cm4gdGVzdEVsZW1lbnQuaW5uZXJIVE1MO1xuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRPd25lckRvY3VtZW50RnJvbVJvb3RDb250YWluZXIocm9vdENvbnRhaW5lckVsZW1lbnQpIHtcbiAgcmV0dXJuIHJvb3RDb250YWluZXJFbGVtZW50Lm5vZGVUeXBlID09PSBET0NVTUVOVF9OT0RFID8gcm9vdENvbnRhaW5lckVsZW1lbnQgOiByb290Q29udGFpbmVyRWxlbWVudC5vd25lckRvY3VtZW50O1xufVxuXG5mdW5jdGlvbiBub29wKCkge31cblxuZnVuY3Rpb24gdHJhcENsaWNrT25Ob25JbnRlcmFjdGl2ZUVsZW1lbnQobm9kZSkge1xuICAvLyBNb2JpbGUgU2FmYXJpIGRvZXMgbm90IGZpcmUgcHJvcGVybHkgYnViYmxlIGNsaWNrIGV2ZW50cyBvblxuICAvLyBub24taW50ZXJhY3RpdmUgZWxlbWVudHMsIHdoaWNoIG1lYW5zIGRlbGVnYXRlZCBjbGljayBsaXN0ZW5lcnMgZG8gbm90XG4gIC8vIGZpcmUuIFRoZSB3b3JrYXJvdW5kIGZvciB0aGlzIGJ1ZyBpbnZvbHZlcyBhdHRhY2hpbmcgYW4gZW1wdHkgY2xpY2tcbiAgLy8gbGlzdGVuZXIgb24gdGhlIHRhcmdldCBub2RlLlxuICAvLyBodHRwczovL3d3dy5xdWlya3Ntb2RlLm9yZy9ibG9nL2FyY2hpdmVzLzIwMTAvMDkvY2xpY2tfZXZlbnRfZGVsLmh0bWxcbiAgLy8gSnVzdCBzZXQgaXQgdXNpbmcgdGhlIG9uY2xpY2sgcHJvcGVydHkgc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRvIG1hbmFnZSBhbnlcbiAgLy8gYm9va2tlZXBpbmcgZm9yIGl0LiBOb3Qgc3VyZSBpZiB3ZSBuZWVkIHRvIGNsZWFyIGl0IHdoZW4gdGhlIGxpc3RlbmVyIGlzXG4gIC8vIHJlbW92ZWQuXG4gIC8vIFRPRE86IE9ubHkgZG8gdGhpcyBmb3IgdGhlIHJlbGV2YW50IFNhZmFyaXMgbWF5YmU/XG4gIG5vZGUub25jbGljayA9IG5vb3A7XG59XG5cbmZ1bmN0aW9uIHNldEluaXRpYWxET01Qcm9wZXJ0aWVzKHRhZywgZG9tRWxlbWVudCwgcm9vdENvbnRhaW5lckVsZW1lbnQsIG5leHRQcm9wcywgaXNDdXN0b21Db21wb25lbnRUYWcpIHtcbiAgZm9yICh2YXIgcHJvcEtleSBpbiBuZXh0UHJvcHMpIHtcbiAgICBpZiAoIW5leHRQcm9wcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgdmFyIG5leHRQcm9wID0gbmV4dFByb3BzW3Byb3BLZXldO1xuXG4gICAgaWYgKHByb3BLZXkgPT09IFNUWUxFKSB7XG4gICAgICB7XG4gICAgICAgIGlmIChuZXh0UHJvcCkge1xuICAgICAgICAgIC8vIEZyZWV6ZSB0aGUgbmV4dCBzdHlsZSBvYmplY3Qgc28gdGhhdCB3ZSBjYW4gYXNzdW1lIGl0IHdvbid0IGJlXG4gICAgICAgICAgLy8gbXV0YXRlZC4gV2UgaGF2ZSBhbHJlYWR5IHdhcm5lZCBmb3IgdGhpcyBpbiB0aGUgcGFzdC5cbiAgICAgICAgICBPYmplY3QuZnJlZXplKG5leHRQcm9wKTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBSZWxpZXMgb24gYHVwZGF0ZVN0eWxlc0J5SURgIG5vdCBtdXRhdGluZyBgc3R5bGVVcGRhdGVzYC5cblxuXG4gICAgICBzZXRWYWx1ZUZvclN0eWxlcyhkb21FbGVtZW50LCBuZXh0UHJvcCk7XG4gICAgfSBlbHNlIGlmIChwcm9wS2V5ID09PSBEQU5HRVJPVVNMWV9TRVRfSU5ORVJfSFRNTCkge1xuICAgICAgdmFyIG5leHRIdG1sID0gbmV4dFByb3AgPyBuZXh0UHJvcFtIVE1MJDFdIDogdW5kZWZpbmVkO1xuXG4gICAgICBpZiAobmV4dEh0bWwgIT0gbnVsbCkge1xuICAgICAgICBzZXRJbm5lckhUTUwoZG9tRWxlbWVudCwgbmV4dEh0bWwpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocHJvcEtleSA9PT0gQ0hJTERSRU4pIHtcbiAgICAgIGlmICh0eXBlb2YgbmV4dFByb3AgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIC8vIEF2b2lkIHNldHRpbmcgaW5pdGlhbCB0ZXh0Q29udGVudCB3aGVuIHRoZSB0ZXh0IGlzIGVtcHR5LiBJbiBJRTExIHNldHRpbmdcbiAgICAgICAgLy8gdGV4dENvbnRlbnQgb24gYSA8dGV4dGFyZWE+IHdpbGwgY2F1c2UgdGhlIHBsYWNlaG9sZGVyIHRvIG5vdFxuICAgICAgICAvLyBzaG93IHdpdGhpbiB0aGUgPHRleHRhcmVhPiB1bnRpbCBpdCBoYXMgYmVlbiBmb2N1c2VkIGFuZCBibHVycmVkIGFnYWluLlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzY3MzEjaXNzdWVjb21tZW50LTI1NDg3NDU1M1xuICAgICAgICB2YXIgY2FuU2V0VGV4dENvbnRlbnQgPSB0YWcgIT09ICd0ZXh0YXJlYScgfHwgbmV4dFByb3AgIT09ICcnO1xuXG4gICAgICAgIGlmIChjYW5TZXRUZXh0Q29udGVudCkge1xuICAgICAgICAgIHNldFRleHRDb250ZW50KGRvbUVsZW1lbnQsIG5leHRQcm9wKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgbmV4dFByb3AgPT09ICdudW1iZXInKSB7XG4gICAgICAgIHNldFRleHRDb250ZW50KGRvbUVsZW1lbnQsICcnICsgbmV4dFByb3ApO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocHJvcEtleSA9PT0gU1VQUFJFU1NfQ09OVEVOVF9FRElUQUJMRV9XQVJOSU5HIHx8IHByb3BLZXkgPT09IFNVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HKSA7IGVsc2UgaWYgKHByb3BLZXkgPT09IEFVVE9GT0NVUykgOyBlbHNlIGlmIChyZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzLmhhc093blByb3BlcnR5KHByb3BLZXkpKSB7XG4gICAgICBpZiAobmV4dFByb3AgIT0gbnVsbCkge1xuICAgICAgICBpZiAoIHR5cGVvZiBuZXh0UHJvcCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHdhcm5Gb3JJbnZhbGlkRXZlbnRMaXN0ZW5lcihwcm9wS2V5LCBuZXh0UHJvcCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvcEtleSA9PT0gJ29uU2Nyb2xsJykge1xuICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ3Njcm9sbCcsIGRvbUVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChuZXh0UHJvcCAhPSBudWxsKSB7XG4gICAgICBzZXRWYWx1ZUZvclByb3BlcnR5KGRvbUVsZW1lbnQsIHByb3BLZXksIG5leHRQcm9wLCBpc0N1c3RvbUNvbXBvbmVudFRhZyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZURPTVByb3BlcnRpZXMoZG9tRWxlbWVudCwgdXBkYXRlUGF5bG9hZCwgd2FzQ3VzdG9tQ29tcG9uZW50VGFnLCBpc0N1c3RvbUNvbXBvbmVudFRhZykge1xuICAvLyBUT0RPOiBIYW5kbGUgd2FzQ3VzdG9tQ29tcG9uZW50VGFnXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdXBkYXRlUGF5bG9hZC5sZW5ndGg7IGkgKz0gMikge1xuICAgIHZhciBwcm9wS2V5ID0gdXBkYXRlUGF5bG9hZFtpXTtcbiAgICB2YXIgcHJvcFZhbHVlID0gdXBkYXRlUGF5bG9hZFtpICsgMV07XG5cbiAgICBpZiAocHJvcEtleSA9PT0gU1RZTEUpIHtcbiAgICAgIHNldFZhbHVlRm9yU3R5bGVzKGRvbUVsZW1lbnQsIHByb3BWYWx1ZSk7XG4gICAgfSBlbHNlIGlmIChwcm9wS2V5ID09PSBEQU5HRVJPVVNMWV9TRVRfSU5ORVJfSFRNTCkge1xuICAgICAgc2V0SW5uZXJIVE1MKGRvbUVsZW1lbnQsIHByb3BWYWx1ZSk7XG4gICAgfSBlbHNlIGlmIChwcm9wS2V5ID09PSBDSElMRFJFTikge1xuICAgICAgc2V0VGV4dENvbnRlbnQoZG9tRWxlbWVudCwgcHJvcFZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0VmFsdWVGb3JQcm9wZXJ0eShkb21FbGVtZW50LCBwcm9wS2V5LCBwcm9wVmFsdWUsIGlzQ3VzdG9tQ29tcG9uZW50VGFnKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlRWxlbWVudCh0eXBlLCBwcm9wcywgcm9vdENvbnRhaW5lckVsZW1lbnQsIHBhcmVudE5hbWVzcGFjZSkge1xuICB2YXIgaXNDdXN0b21Db21wb25lbnRUYWc7IC8vIFdlIGNyZWF0ZSB0YWdzIGluIHRoZSBuYW1lc3BhY2Ugb2YgdGhlaXIgcGFyZW50IGNvbnRhaW5lciwgZXhjZXB0IEhUTUxcbiAgLy8gdGFncyBnZXQgbm8gbmFtZXNwYWNlLlxuXG4gIHZhciBvd25lckRvY3VtZW50ID0gZ2V0T3duZXJEb2N1bWVudEZyb21Sb290Q29udGFpbmVyKHJvb3RDb250YWluZXJFbGVtZW50KTtcbiAgdmFyIGRvbUVsZW1lbnQ7XG4gIHZhciBuYW1lc3BhY2VVUkkgPSBwYXJlbnROYW1lc3BhY2U7XG5cbiAgaWYgKG5hbWVzcGFjZVVSSSA9PT0gSFRNTF9OQU1FU1BBQ0UkMSkge1xuICAgIG5hbWVzcGFjZVVSSSA9IGdldEludHJpbnNpY05hbWVzcGFjZSh0eXBlKTtcbiAgfVxuXG4gIGlmIChuYW1lc3BhY2VVUkkgPT09IEhUTUxfTkFNRVNQQUNFJDEpIHtcbiAgICB7XG4gICAgICBpc0N1c3RvbUNvbXBvbmVudFRhZyA9IGlzQ3VzdG9tQ29tcG9uZW50KHR5cGUsIHByb3BzKTsgLy8gU2hvdWxkIHRoaXMgY2hlY2sgYmUgZ2F0ZWQgYnkgcGFyZW50IG5hbWVzcGFjZT8gTm90IHN1cmUgd2Ugd2FudCB0b1xuICAgICAgLy8gYWxsb3cgPFNWRz4gb3IgPG1BVEg+LlxuXG4gICAgICBpZiAoIWlzQ3VzdG9tQ29tcG9uZW50VGFnICYmIHR5cGUgIT09IHR5cGUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICBlcnJvcignPCVzIC8+IGlzIHVzaW5nIGluY29ycmVjdCBjYXNpbmcuICcgKyAnVXNlIFBhc2NhbENhc2UgZm9yIFJlYWN0IGNvbXBvbmVudHMsICcgKyAnb3IgbG93ZXJjYXNlIGZvciBIVE1MIGVsZW1lbnRzLicsIHR5cGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlID09PSAnc2NyaXB0Jykge1xuICAgICAgLy8gQ3JlYXRlIHRoZSBzY3JpcHQgdmlhIC5pbm5lckhUTUwgc28gaXRzIFwicGFyc2VyLWluc2VydGVkXCIgZmxhZyBpc1xuICAgICAgLy8gc2V0IHRvIHRydWUgYW5kIGl0IGRvZXMgbm90IGV4ZWN1dGVcbiAgICAgIHZhciBkaXYgPSBvd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXG4gICAgICBkaXYuaW5uZXJIVE1MID0gJzxzY3JpcHQ+PCcgKyAnL3NjcmlwdD4nOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICAvLyBUaGlzIGlzIGd1YXJhbnRlZWQgdG8geWllbGQgYSBzY3JpcHQgZWxlbWVudC5cblxuICAgICAgdmFyIGZpcnN0Q2hpbGQgPSBkaXYuZmlyc3RDaGlsZDtcbiAgICAgIGRvbUVsZW1lbnQgPSBkaXYucmVtb3ZlQ2hpbGQoZmlyc3RDaGlsZCk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgcHJvcHMuaXMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyAkRmxvd0lzc3VlIGBjcmVhdGVFbGVtZW50YCBzaG91bGQgYmUgdXBkYXRlZCBmb3IgV2ViIENvbXBvbmVudHNcbiAgICAgIGRvbUVsZW1lbnQgPSBvd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodHlwZSwge1xuICAgICAgICBpczogcHJvcHMuaXNcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTZXBhcmF0ZSBlbHNlIGJyYW5jaCBpbnN0ZWFkIG9mIHVzaW5nIGBwcm9wcy5pcyB8fCB1bmRlZmluZWRgIGFib3ZlIGJlY2F1c2Ugb2YgYSBGaXJlZm94IGJ1Zy5cbiAgICAgIC8vIFNlZSBkaXNjdXNzaW9uIGluIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzY4OTZcbiAgICAgIC8vIGFuZCBkaXNjdXNzaW9uIGluIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTEyNzYyNDBcbiAgICAgIGRvbUVsZW1lbnQgPSBvd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodHlwZSk7IC8vIE5vcm1hbGx5IGF0dHJpYnV0ZXMgYXJlIGFzc2lnbmVkIGluIGBzZXRJbml0aWFsRE9NUHJvcGVydGllc2AsIGhvd2V2ZXIgdGhlIGBtdWx0aXBsZWAgYW5kIGBzaXplYFxuICAgICAgLy8gYXR0cmlidXRlcyBvbiBgc2VsZWN0YHMgbmVlZHMgdG8gYmUgYWRkZWQgYmVmb3JlIGBvcHRpb25gcyBhcmUgaW5zZXJ0ZWQuXG4gICAgICAvLyBUaGlzIHByZXZlbnRzOlxuICAgICAgLy8gLSBhIGJ1ZyB3aGVyZSB0aGUgYHNlbGVjdGAgZG9lcyBub3Qgc2Nyb2xsIHRvIHRoZSBjb3JyZWN0IG9wdGlvbiBiZWNhdXNlIHNpbmd1bGFyXG4gICAgICAvLyAgYHNlbGVjdGAgZWxlbWVudHMgYXV0b21hdGljYWxseSBwaWNrIHRoZSBmaXJzdCBpdGVtICMxMzIyMlxuICAgICAgLy8gLSBhIGJ1ZyB3aGVyZSB0aGUgYHNlbGVjdGAgc2V0IHRoZSBmaXJzdCBpdGVtIGFzIHNlbGVjdGVkIGRlc3BpdGUgdGhlIGBzaXplYCBhdHRyaWJ1dGUgIzE0MjM5XG4gICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMzIyMlxuICAgICAgLy8gYW5kIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTQyMzlcblxuICAgICAgaWYgKHR5cGUgPT09ICdzZWxlY3QnKSB7XG4gICAgICAgIHZhciBub2RlID0gZG9tRWxlbWVudDtcblxuICAgICAgICBpZiAocHJvcHMubXVsdGlwbGUpIHtcbiAgICAgICAgICBub2RlLm11bHRpcGxlID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9wcy5zaXplKSB7XG4gICAgICAgICAgLy8gU2V0dGluZyBhIHNpemUgZ3JlYXRlciB0aGFuIDEgY2F1c2VzIGEgc2VsZWN0IHRvIGJlaGF2ZSBsaWtlIGBtdWx0aXBsZT10cnVlYCwgd2hlcmVcbiAgICAgICAgICAvLyBpdCBpcyBwb3NzaWJsZSB0aGF0IG5vIG9wdGlvbiBpcyBzZWxlY3RlZC5cbiAgICAgICAgICAvL1xuICAgICAgICAgIC8vIFRoaXMgaXMgb25seSBuZWNlc3Nhcnkgd2hlbiBhIHNlbGVjdCBpbiBcInNpbmdsZSBzZWxlY3Rpb24gbW9kZVwiLlxuICAgICAgICAgIG5vZGUuc2l6ZSA9IHByb3BzLnNpemU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZG9tRWxlbWVudCA9IG93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG5hbWVzcGFjZVVSSSwgdHlwZSk7XG4gIH1cblxuICB7XG4gICAgaWYgKG5hbWVzcGFjZVVSSSA9PT0gSFRNTF9OQU1FU1BBQ0UkMSkge1xuICAgICAgaWYgKCFpc0N1c3RvbUNvbXBvbmVudFRhZyAmJiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZG9tRWxlbWVudCkgPT09ICdbb2JqZWN0IEhUTUxVbmtub3duRWxlbWVudF0nICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwod2FybmVkVW5rbm93blRhZ3MsIHR5cGUpKSB7XG4gICAgICAgIHdhcm5lZFVua25vd25UYWdzW3R5cGVdID0gdHJ1ZTtcblxuICAgICAgICBlcnJvcignVGhlIHRhZyA8JXM+IGlzIHVucmVjb2duaXplZCBpbiB0aGlzIGJyb3dzZXIuICcgKyAnSWYgeW91IG1lYW50IHRvIHJlbmRlciBhIFJlYWN0IGNvbXBvbmVudCwgc3RhcnQgaXRzIG5hbWUgd2l0aCAnICsgJ2FuIHVwcGVyY2FzZSBsZXR0ZXIuJywgdHlwZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRvbUVsZW1lbnQ7XG59XG5mdW5jdGlvbiBjcmVhdGVUZXh0Tm9kZSh0ZXh0LCByb290Q29udGFpbmVyRWxlbWVudCkge1xuICByZXR1cm4gZ2V0T3duZXJEb2N1bWVudEZyb21Sb290Q29udGFpbmVyKHJvb3RDb250YWluZXJFbGVtZW50KS5jcmVhdGVUZXh0Tm9kZSh0ZXh0KTtcbn1cbmZ1bmN0aW9uIHNldEluaXRpYWxQcm9wZXJ0aWVzKGRvbUVsZW1lbnQsIHRhZywgcmF3UHJvcHMsIHJvb3RDb250YWluZXJFbGVtZW50KSB7XG4gIHZhciBpc0N1c3RvbUNvbXBvbmVudFRhZyA9IGlzQ3VzdG9tQ29tcG9uZW50KHRhZywgcmF3UHJvcHMpO1xuXG4gIHtcbiAgICB2YWxpZGF0ZVByb3BlcnRpZXNJbkRldmVsb3BtZW50KHRhZywgcmF3UHJvcHMpO1xuICB9IC8vIFRPRE86IE1ha2Ugc3VyZSB0aGF0IHdlIGNoZWNrIGlzTW91bnRlZCBiZWZvcmUgZmlyaW5nIGFueSBvZiB0aGVzZSBldmVudHMuXG5cblxuICB2YXIgcHJvcHM7XG5cbiAgc3dpdGNoICh0YWcpIHtcbiAgICBjYXNlICdkaWFsb2cnOlxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnY2FuY2VsJywgZG9tRWxlbWVudCk7XG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdjbG9zZScsIGRvbUVsZW1lbnQpO1xuICAgICAgcHJvcHMgPSByYXdQcm9wcztcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnaWZyYW1lJzpcbiAgICBjYXNlICdvYmplY3QnOlxuICAgIGNhc2UgJ2VtYmVkJzpcbiAgICAgIC8vIFdlIGxpc3RlbiB0byB0aGlzIGV2ZW50IGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIHRoZSBsb2FkIGV2ZW50LlxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnbG9hZCcsIGRvbUVsZW1lbnQpO1xuICAgICAgcHJvcHMgPSByYXdQcm9wcztcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAndmlkZW8nOlxuICAgIGNhc2UgJ2F1ZGlvJzpcbiAgICAgIC8vIFdlIGxpc3RlbiB0byB0aGVzZSBldmVudHMgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgYWxsIHRoZSBtZWRpYSBldmVudHMuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lZGlhRXZlbnRUeXBlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KG1lZGlhRXZlbnRUeXBlc1tpXSwgZG9tRWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIHByb3BzID0gcmF3UHJvcHM7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3NvdXJjZSc6XG4gICAgICAvLyBXZSBsaXN0ZW4gdG8gdGhpcyBldmVudCBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciB0aGUgZXJyb3IgZXZlbnQuXG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdlcnJvcicsIGRvbUVsZW1lbnQpO1xuICAgICAgcHJvcHMgPSByYXdQcm9wcztcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnaW1nJzpcbiAgICBjYXNlICdpbWFnZSc6XG4gICAgY2FzZSAnbGluayc6XG4gICAgICAvLyBXZSBsaXN0ZW4gdG8gdGhlc2UgZXZlbnRzIGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIGVycm9yIGFuZCBsb2FkIGV2ZW50cy5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2Vycm9yJywgZG9tRWxlbWVudCk7XG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdsb2FkJywgZG9tRWxlbWVudCk7XG4gICAgICBwcm9wcyA9IHJhd1Byb3BzO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdkZXRhaWxzJzpcbiAgICAgIC8vIFdlIGxpc3RlbiB0byB0aGlzIGV2ZW50IGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIHRoZSB0b2dnbGUgZXZlbnQuXG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCd0b2dnbGUnLCBkb21FbGVtZW50KTtcbiAgICAgIHByb3BzID0gcmF3UHJvcHM7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2lucHV0JzpcbiAgICAgIGluaXRXcmFwcGVyU3RhdGUoZG9tRWxlbWVudCwgcmF3UHJvcHMpO1xuICAgICAgcHJvcHMgPSBnZXRIb3N0UHJvcHMoZG9tRWxlbWVudCwgcmF3UHJvcHMpOyAvLyBXZSBsaXN0ZW4gdG8gdGhpcyBldmVudCBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciB0aGUgaW52YWxpZCBldmVudC5cblxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnaW52YWxpZCcsIGRvbUVsZW1lbnQpO1xuXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ29wdGlvbic6XG4gICAgICB2YWxpZGF0ZVByb3BzKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTtcbiAgICAgIHByb3BzID0gZ2V0SG9zdFByb3BzJDEoZG9tRWxlbWVudCwgcmF3UHJvcHMpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgaW5pdFdyYXBwZXJTdGF0ZSQxKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTtcbiAgICAgIHByb3BzID0gZ2V0SG9zdFByb3BzJDIoZG9tRWxlbWVudCwgcmF3UHJvcHMpOyAvLyBXZSBsaXN0ZW4gdG8gdGhpcyBldmVudCBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciB0aGUgaW52YWxpZCBldmVudC5cblxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnaW52YWxpZCcsIGRvbUVsZW1lbnQpO1xuXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3RleHRhcmVhJzpcbiAgICAgIGluaXRXcmFwcGVyU3RhdGUkMihkb21FbGVtZW50LCByYXdQcm9wcyk7XG4gICAgICBwcm9wcyA9IGdldEhvc3RQcm9wcyQzKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTsgLy8gV2UgbGlzdGVuIHRvIHRoaXMgZXZlbnQgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgdGhlIGludmFsaWQgZXZlbnQuXG5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2ludmFsaWQnLCBkb21FbGVtZW50KTtcblxuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcHJvcHMgPSByYXdQcm9wcztcbiAgfVxuXG4gIGFzc2VydFZhbGlkUHJvcHModGFnLCBwcm9wcyk7XG4gIHNldEluaXRpYWxET01Qcm9wZXJ0aWVzKHRhZywgZG9tRWxlbWVudCwgcm9vdENvbnRhaW5lckVsZW1lbnQsIHByb3BzLCBpc0N1c3RvbUNvbXBvbmVudFRhZyk7XG5cbiAgc3dpdGNoICh0YWcpIHtcbiAgICBjYXNlICdpbnB1dCc6XG4gICAgICAvLyBUT0RPOiBNYWtlIHN1cmUgd2UgY2hlY2sgaWYgdGhpcyBpcyBzdGlsbCB1bm1vdW50ZWQgb3IgZG8gYW55IGNsZWFuXG4gICAgICAvLyB1cCBuZWNlc3Nhcnkgc2luY2Ugd2UgbmV2ZXIgc3RvcCB0cmFja2luZyBhbnltb3JlLlxuICAgICAgdHJhY2soZG9tRWxlbWVudCk7XG4gICAgICBwb3N0TW91bnRXcmFwcGVyKGRvbUVsZW1lbnQsIHJhd1Byb3BzLCBmYWxzZSk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3RleHRhcmVhJzpcbiAgICAgIC8vIFRPRE86IE1ha2Ugc3VyZSB3ZSBjaGVjayBpZiB0aGlzIGlzIHN0aWxsIHVubW91bnRlZCBvciBkbyBhbnkgY2xlYW5cbiAgICAgIC8vIHVwIG5lY2Vzc2FyeSBzaW5jZSB3ZSBuZXZlciBzdG9wIHRyYWNraW5nIGFueW1vcmUuXG4gICAgICB0cmFjayhkb21FbGVtZW50KTtcbiAgICAgIHBvc3RNb3VudFdyYXBwZXIkMyhkb21FbGVtZW50KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnb3B0aW9uJzpcbiAgICAgIHBvc3RNb3VudFdyYXBwZXIkMShkb21FbGVtZW50LCByYXdQcm9wcyk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgICBwb3N0TW91bnRXcmFwcGVyJDIoZG9tRWxlbWVudCwgcmF3UHJvcHMpO1xuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgaWYgKHR5cGVvZiBwcm9wcy5vbkNsaWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIFRPRE86IFRoaXMgY2FzdCBtYXkgbm90IGJlIHNvdW5kIGZvciBTVkcsIE1hdGhNTCBvciBjdXN0b20gZWxlbWVudHMuXG4gICAgICAgIHRyYXBDbGlja09uTm9uSW50ZXJhY3RpdmVFbGVtZW50KGRvbUVsZW1lbnQpO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcbiAgfVxufSAvLyBDYWxjdWxhdGUgdGhlIGRpZmYgYmV0d2VlbiB0aGUgdHdvIG9iamVjdHMuXG5cbmZ1bmN0aW9uIGRpZmZQcm9wZXJ0aWVzKGRvbUVsZW1lbnQsIHRhZywgbGFzdFJhd1Byb3BzLCBuZXh0UmF3UHJvcHMsIHJvb3RDb250YWluZXJFbGVtZW50KSB7XG4gIHtcbiAgICB2YWxpZGF0ZVByb3BlcnRpZXNJbkRldmVsb3BtZW50KHRhZywgbmV4dFJhd1Byb3BzKTtcbiAgfVxuXG4gIHZhciB1cGRhdGVQYXlsb2FkID0gbnVsbDtcbiAgdmFyIGxhc3RQcm9wcztcbiAgdmFyIG5leHRQcm9wcztcblxuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgJ2lucHV0JzpcbiAgICAgIGxhc3RQcm9wcyA9IGdldEhvc3RQcm9wcyhkb21FbGVtZW50LCBsYXN0UmF3UHJvcHMpO1xuICAgICAgbmV4dFByb3BzID0gZ2V0SG9zdFByb3BzKGRvbUVsZW1lbnQsIG5leHRSYXdQcm9wcyk7XG4gICAgICB1cGRhdGVQYXlsb2FkID0gW107XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ29wdGlvbic6XG4gICAgICBsYXN0UHJvcHMgPSBnZXRIb3N0UHJvcHMkMShkb21FbGVtZW50LCBsYXN0UmF3UHJvcHMpO1xuICAgICAgbmV4dFByb3BzID0gZ2V0SG9zdFByb3BzJDEoZG9tRWxlbWVudCwgbmV4dFJhd1Byb3BzKTtcbiAgICAgIHVwZGF0ZVBheWxvYWQgPSBbXTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnc2VsZWN0JzpcbiAgICAgIGxhc3RQcm9wcyA9IGdldEhvc3RQcm9wcyQyKGRvbUVsZW1lbnQsIGxhc3RSYXdQcm9wcyk7XG4gICAgICBuZXh0UHJvcHMgPSBnZXRIb3N0UHJvcHMkMihkb21FbGVtZW50LCBuZXh0UmF3UHJvcHMpO1xuICAgICAgdXBkYXRlUGF5bG9hZCA9IFtdO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICd0ZXh0YXJlYSc6XG4gICAgICBsYXN0UHJvcHMgPSBnZXRIb3N0UHJvcHMkMyhkb21FbGVtZW50LCBsYXN0UmF3UHJvcHMpO1xuICAgICAgbmV4dFByb3BzID0gZ2V0SG9zdFByb3BzJDMoZG9tRWxlbWVudCwgbmV4dFJhd1Byb3BzKTtcbiAgICAgIHVwZGF0ZVBheWxvYWQgPSBbXTtcbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIGxhc3RQcm9wcyA9IGxhc3RSYXdQcm9wcztcbiAgICAgIG5leHRQcm9wcyA9IG5leHRSYXdQcm9wcztcblxuICAgICAgaWYgKHR5cGVvZiBsYXN0UHJvcHMub25DbGljayAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgbmV4dFByb3BzLm9uQ2xpY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gVE9ETzogVGhpcyBjYXN0IG1heSBub3QgYmUgc291bmQgZm9yIFNWRywgTWF0aE1MIG9yIGN1c3RvbSBlbGVtZW50cy5cbiAgICAgICAgdHJhcENsaWNrT25Ob25JbnRlcmFjdGl2ZUVsZW1lbnQoZG9tRWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgYXNzZXJ0VmFsaWRQcm9wcyh0YWcsIG5leHRQcm9wcyk7XG4gIHZhciBwcm9wS2V5O1xuICB2YXIgc3R5bGVOYW1lO1xuICB2YXIgc3R5bGVVcGRhdGVzID0gbnVsbDtcblxuICBmb3IgKHByb3BLZXkgaW4gbGFzdFByb3BzKSB7XG4gICAgaWYgKG5leHRQcm9wcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSB8fCAhbGFzdFByb3BzLmhhc093blByb3BlcnR5KHByb3BLZXkpIHx8IGxhc3RQcm9wc1twcm9wS2V5XSA9PSBudWxsKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAocHJvcEtleSA9PT0gU1RZTEUpIHtcbiAgICAgIHZhciBsYXN0U3R5bGUgPSBsYXN0UHJvcHNbcHJvcEtleV07XG5cbiAgICAgIGZvciAoc3R5bGVOYW1lIGluIGxhc3RTdHlsZSkge1xuICAgICAgICBpZiAobGFzdFN0eWxlLmhhc093blByb3BlcnR5KHN0eWxlTmFtZSkpIHtcbiAgICAgICAgICBpZiAoIXN0eWxlVXBkYXRlcykge1xuICAgICAgICAgICAgc3R5bGVVcGRhdGVzID0ge307XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3R5bGVVcGRhdGVzW3N0eWxlTmFtZV0gPSAnJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocHJvcEtleSA9PT0gREFOR0VST1VTTFlfU0VUX0lOTkVSX0hUTUwgfHwgcHJvcEtleSA9PT0gQ0hJTERSRU4pIDsgZWxzZSBpZiAocHJvcEtleSA9PT0gU1VQUFJFU1NfQ09OVEVOVF9FRElUQUJMRV9XQVJOSU5HIHx8IHByb3BLZXkgPT09IFNVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HKSA7IGVsc2UgaWYgKHByb3BLZXkgPT09IEFVVE9GT0NVUykgOyBlbHNlIGlmIChyZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzLmhhc093blByb3BlcnR5KHByb3BLZXkpKSB7XG4gICAgICAvLyBUaGlzIGlzIGEgc3BlY2lhbCBjYXNlLiBJZiBhbnkgbGlzdGVuZXIgdXBkYXRlcyB3ZSBuZWVkIHRvIGVuc3VyZVxuICAgICAgLy8gdGhhdCB0aGUgXCJjdXJyZW50XCIgZmliZXIgcG9pbnRlciBnZXRzIHVwZGF0ZWQgc28gd2UgbmVlZCBhIGNvbW1pdFxuICAgICAgLy8gdG8gdXBkYXRlIHRoaXMgZWxlbWVudC5cbiAgICAgIGlmICghdXBkYXRlUGF5bG9hZCkge1xuICAgICAgICB1cGRhdGVQYXlsb2FkID0gW107XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEZvciBhbGwgb3RoZXIgZGVsZXRlZCBwcm9wZXJ0aWVzIHdlIGFkZCBpdCB0byB0aGUgcXVldWUuIFdlIHVzZVxuICAgICAgLy8gdGhlIGFsbG93ZWQgcHJvcGVydHkgbGlzdCBpbiB0aGUgY29tbWl0IHBoYXNlIGluc3RlYWQuXG4gICAgICAodXBkYXRlUGF5bG9hZCA9IHVwZGF0ZVBheWxvYWQgfHwgW10pLnB1c2gocHJvcEtleSwgbnVsbCk7XG4gICAgfVxuICB9XG5cbiAgZm9yIChwcm9wS2V5IGluIG5leHRQcm9wcykge1xuICAgIHZhciBuZXh0UHJvcCA9IG5leHRQcm9wc1twcm9wS2V5XTtcbiAgICB2YXIgbGFzdFByb3AgPSBsYXN0UHJvcHMgIT0gbnVsbCA/IGxhc3RQcm9wc1twcm9wS2V5XSA6IHVuZGVmaW5lZDtcblxuICAgIGlmICghbmV4dFByb3BzLmhhc093blByb3BlcnR5KHByb3BLZXkpIHx8IG5leHRQcm9wID09PSBsYXN0UHJvcCB8fCBuZXh0UHJvcCA9PSBudWxsICYmIGxhc3RQcm9wID09IG51bGwpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChwcm9wS2V5ID09PSBTVFlMRSkge1xuICAgICAge1xuICAgICAgICBpZiAobmV4dFByb3ApIHtcbiAgICAgICAgICAvLyBGcmVlemUgdGhlIG5leHQgc3R5bGUgb2JqZWN0IHNvIHRoYXQgd2UgY2FuIGFzc3VtZSBpdCB3b24ndCBiZVxuICAgICAgICAgIC8vIG11dGF0ZWQuIFdlIGhhdmUgYWxyZWFkeSB3YXJuZWQgZm9yIHRoaXMgaW4gdGhlIHBhc3QuXG4gICAgICAgICAgT2JqZWN0LmZyZWV6ZShuZXh0UHJvcCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGxhc3RQcm9wKSB7XG4gICAgICAgIC8vIFVuc2V0IHN0eWxlcyBvbiBgbGFzdFByb3BgIGJ1dCBub3Qgb24gYG5leHRQcm9wYC5cbiAgICAgICAgZm9yIChzdHlsZU5hbWUgaW4gbGFzdFByb3ApIHtcbiAgICAgICAgICBpZiAobGFzdFByb3AuaGFzT3duUHJvcGVydHkoc3R5bGVOYW1lKSAmJiAoIW5leHRQcm9wIHx8ICFuZXh0UHJvcC5oYXNPd25Qcm9wZXJ0eShzdHlsZU5hbWUpKSkge1xuICAgICAgICAgICAgaWYgKCFzdHlsZVVwZGF0ZXMpIHtcbiAgICAgICAgICAgICAgc3R5bGVVcGRhdGVzID0ge307XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN0eWxlVXBkYXRlc1tzdHlsZU5hbWVdID0gJyc7XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIFVwZGF0ZSBzdHlsZXMgdGhhdCBjaGFuZ2VkIHNpbmNlIGBsYXN0UHJvcGAuXG5cblxuICAgICAgICBmb3IgKHN0eWxlTmFtZSBpbiBuZXh0UHJvcCkge1xuICAgICAgICAgIGlmIChuZXh0UHJvcC5oYXNPd25Qcm9wZXJ0eShzdHlsZU5hbWUpICYmIGxhc3RQcm9wW3N0eWxlTmFtZV0gIT09IG5leHRQcm9wW3N0eWxlTmFtZV0pIHtcbiAgICAgICAgICAgIGlmICghc3R5bGVVcGRhdGVzKSB7XG4gICAgICAgICAgICAgIHN0eWxlVXBkYXRlcyA9IHt9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzdHlsZVVwZGF0ZXNbc3R5bGVOYW1lXSA9IG5leHRQcm9wW3N0eWxlTmFtZV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBSZWxpZXMgb24gYHVwZGF0ZVN0eWxlc0J5SURgIG5vdCBtdXRhdGluZyBgc3R5bGVVcGRhdGVzYC5cbiAgICAgICAgaWYgKCFzdHlsZVVwZGF0ZXMpIHtcbiAgICAgICAgICBpZiAoIXVwZGF0ZVBheWxvYWQpIHtcbiAgICAgICAgICAgIHVwZGF0ZVBheWxvYWQgPSBbXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB1cGRhdGVQYXlsb2FkLnB1c2gocHJvcEtleSwgc3R5bGVVcGRhdGVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0eWxlVXBkYXRlcyA9IG5leHRQcm9wO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocHJvcEtleSA9PT0gREFOR0VST1VTTFlfU0VUX0lOTkVSX0hUTUwpIHtcbiAgICAgIHZhciBuZXh0SHRtbCA9IG5leHRQcm9wID8gbmV4dFByb3BbSFRNTCQxXSA6IHVuZGVmaW5lZDtcbiAgICAgIHZhciBsYXN0SHRtbCA9IGxhc3RQcm9wID8gbGFzdFByb3BbSFRNTCQxXSA6IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKG5leHRIdG1sICE9IG51bGwpIHtcbiAgICAgICAgaWYgKGxhc3RIdG1sICE9PSBuZXh0SHRtbCkge1xuICAgICAgICAgICh1cGRhdGVQYXlsb2FkID0gdXBkYXRlUGF5bG9hZCB8fCBbXSkucHVzaChwcm9wS2V5LCBuZXh0SHRtbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHByb3BLZXkgPT09IENISUxEUkVOKSB7XG4gICAgICBpZiAodHlwZW9mIG5leHRQcm9wID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgbmV4dFByb3AgPT09ICdudW1iZXInKSB7XG4gICAgICAgICh1cGRhdGVQYXlsb2FkID0gdXBkYXRlUGF5bG9hZCB8fCBbXSkucHVzaChwcm9wS2V5LCAnJyArIG5leHRQcm9wKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHByb3BLZXkgPT09IFNVUFBSRVNTX0NPTlRFTlRfRURJVEFCTEVfV0FSTklORyB8fCBwcm9wS2V5ID09PSBTVVBQUkVTU19IWURSQVRJT05fV0FSTklORykgOyBlbHNlIGlmIChyZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzLmhhc093blByb3BlcnR5KHByb3BLZXkpKSB7XG4gICAgICBpZiAobmV4dFByb3AgIT0gbnVsbCkge1xuICAgICAgICAvLyBXZSBlYWdlcmx5IGxpc3RlbiB0byB0aGlzIGV2ZW4gdGhvdWdoIHdlIGhhdmVuJ3QgY29tbWl0dGVkIHlldC5cbiAgICAgICAgaWYgKCB0eXBlb2YgbmV4dFByb3AgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB3YXJuRm9ySW52YWxpZEV2ZW50TGlzdGVuZXIocHJvcEtleSwgbmV4dFByb3ApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb3BLZXkgPT09ICdvblNjcm9sbCcpIHtcbiAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdzY3JvbGwnLCBkb21FbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIXVwZGF0ZVBheWxvYWQgJiYgbGFzdFByb3AgIT09IG5leHRQcm9wKSB7XG4gICAgICAgIC8vIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2UuIElmIGFueSBsaXN0ZW5lciB1cGRhdGVzIHdlIG5lZWQgdG8gZW5zdXJlXG4gICAgICAgIC8vIHRoYXQgdGhlIFwiY3VycmVudFwiIHByb3BzIHBvaW50ZXIgZ2V0cyB1cGRhdGVkIHNvIHdlIG5lZWQgYSBjb21taXRcbiAgICAgICAgLy8gdG8gdXBkYXRlIHRoaXMgZWxlbWVudC5cbiAgICAgICAgdXBkYXRlUGF5bG9hZCA9IFtdO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIG5leHRQcm9wID09PSAnb2JqZWN0JyAmJiBuZXh0UHJvcCAhPT0gbnVsbCAmJiBuZXh0UHJvcC4kJHR5cGVvZiA9PT0gUkVBQ1RfT1BBUVVFX0lEX1RZUEUpIHtcbiAgICAgIC8vIElmIHdlIGVuY291bnRlciB1c2VPcGFxdWVSZWZlcmVuY2UncyBvcGFxdWUgb2JqZWN0LCB0aGlzIG1lYW5zIHdlIGFyZSBoeWRyYXRpbmcuXG4gICAgICAvLyBJbiB0aGlzIGNhc2UsIGNhbGwgdGhlIG9wYXF1ZSBvYmplY3QncyB0b1N0cmluZyBmdW5jdGlvbiB3aGljaCBnZW5lcmF0ZXMgYSBuZXcgY2xpZW50XG4gICAgICAvLyBJRCBzbyBjbGllbnQgYW5kIHNlcnZlciBJRHMgbWF0Y2ggYW5kIHRocm93cyB0byByZXJlbmRlci5cbiAgICAgIG5leHRQcm9wLnRvU3RyaW5nKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEZvciBhbnkgb3RoZXIgcHJvcGVydHkgd2UgYWx3YXlzIGFkZCBpdCB0byB0aGUgcXVldWUgYW5kIHRoZW4gd2VcbiAgICAgIC8vIGZpbHRlciBpdCBvdXQgdXNpbmcgdGhlIGFsbG93ZWQgcHJvcGVydHkgbGlzdCBkdXJpbmcgdGhlIGNvbW1pdC5cbiAgICAgICh1cGRhdGVQYXlsb2FkID0gdXBkYXRlUGF5bG9hZCB8fCBbXSkucHVzaChwcm9wS2V5LCBuZXh0UHJvcCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHN0eWxlVXBkYXRlcykge1xuICAgIHtcbiAgICAgIHZhbGlkYXRlU2hvcnRoYW5kUHJvcGVydHlDb2xsaXNpb25JbkRldihzdHlsZVVwZGF0ZXMsIG5leHRQcm9wc1tTVFlMRV0pO1xuICAgIH1cblxuICAgICh1cGRhdGVQYXlsb2FkID0gdXBkYXRlUGF5bG9hZCB8fCBbXSkucHVzaChTVFlMRSwgc3R5bGVVcGRhdGVzKTtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVQYXlsb2FkO1xufSAvLyBBcHBseSB0aGUgZGlmZi5cblxuZnVuY3Rpb24gdXBkYXRlUHJvcGVydGllcyhkb21FbGVtZW50LCB1cGRhdGVQYXlsb2FkLCB0YWcsIGxhc3RSYXdQcm9wcywgbmV4dFJhd1Byb3BzKSB7XG4gIC8vIFVwZGF0ZSBjaGVja2VkICpiZWZvcmUqIG5hbWUuXG4gIC8vIEluIHRoZSBtaWRkbGUgb2YgYW4gdXBkYXRlLCBpdCBpcyBwb3NzaWJsZSB0byBoYXZlIG11bHRpcGxlIGNoZWNrZWQuXG4gIC8vIFdoZW4gYSBjaGVja2VkIHJhZGlvIHRyaWVzIHRvIGNoYW5nZSBuYW1lLCBicm93c2VyIG1ha2VzIGFub3RoZXIgcmFkaW8ncyBjaGVja2VkIGZhbHNlLlxuICBpZiAodGFnID09PSAnaW5wdXQnICYmIG5leHRSYXdQcm9wcy50eXBlID09PSAncmFkaW8nICYmIG5leHRSYXdQcm9wcy5uYW1lICE9IG51bGwpIHtcbiAgICB1cGRhdGVDaGVja2VkKGRvbUVsZW1lbnQsIG5leHRSYXdQcm9wcyk7XG4gIH1cblxuICB2YXIgd2FzQ3VzdG9tQ29tcG9uZW50VGFnID0gaXNDdXN0b21Db21wb25lbnQodGFnLCBsYXN0UmF3UHJvcHMpO1xuICB2YXIgaXNDdXN0b21Db21wb25lbnRUYWcgPSBpc0N1c3RvbUNvbXBvbmVudCh0YWcsIG5leHRSYXdQcm9wcyk7IC8vIEFwcGx5IHRoZSBkaWZmLlxuXG4gIHVwZGF0ZURPTVByb3BlcnRpZXMoZG9tRWxlbWVudCwgdXBkYXRlUGF5bG9hZCwgd2FzQ3VzdG9tQ29tcG9uZW50VGFnLCBpc0N1c3RvbUNvbXBvbmVudFRhZyk7IC8vIFRPRE86IEVuc3VyZSB0aGF0IGFuIHVwZGF0ZSBnZXRzIHNjaGVkdWxlZCBpZiBhbnkgb2YgdGhlIHNwZWNpYWwgcHJvcHNcbiAgLy8gY2hhbmdlZC5cblxuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgJ2lucHV0JzpcbiAgICAgIC8vIFVwZGF0ZSB0aGUgd3JhcHBlciBhcm91bmQgaW5wdXRzICphZnRlciogdXBkYXRpbmcgcHJvcHMuIFRoaXMgaGFzIHRvXG4gICAgICAvLyBoYXBwZW4gYWZ0ZXIgYHVwZGF0ZURPTVByb3BlcnRpZXNgLiBPdGhlcndpc2UgSFRNTDUgaW5wdXQgdmFsaWRhdGlvbnNcbiAgICAgIC8vIHJhaXNlIHdhcm5pbmdzIGFuZCBwcmV2ZW50IHRoZSBuZXcgdmFsdWUgZnJvbSBiZWluZyBhc3NpZ25lZC5cbiAgICAgIHVwZGF0ZVdyYXBwZXIoZG9tRWxlbWVudCwgbmV4dFJhd1Byb3BzKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAndGV4dGFyZWEnOlxuICAgICAgdXBkYXRlV3JhcHBlciQxKGRvbUVsZW1lbnQsIG5leHRSYXdQcm9wcyk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgICAvLyA8c2VsZWN0PiB2YWx1ZSB1cGRhdGUgbmVlZHMgdG8gb2NjdXIgYWZ0ZXIgPG9wdGlvbj4gY2hpbGRyZW5cbiAgICAgIC8vIHJlY29uY2lsaWF0aW9uXG4gICAgICBwb3N0VXBkYXRlV3JhcHBlcihkb21FbGVtZW50LCBuZXh0UmF3UHJvcHMpO1xuICAgICAgYnJlYWs7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0UG9zc2libGVTdGFuZGFyZE5hbWUocHJvcE5hbWUpIHtcbiAge1xuICAgIHZhciBsb3dlckNhc2VkTmFtZSA9IHByb3BOYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgICBpZiAoIXBvc3NpYmxlU3RhbmRhcmROYW1lcy5oYXNPd25Qcm9wZXJ0eShsb3dlckNhc2VkTmFtZSkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBwb3NzaWJsZVN0YW5kYXJkTmFtZXNbbG93ZXJDYXNlZE5hbWVdIHx8IG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGlmZkh5ZHJhdGVkUHJvcGVydGllcyhkb21FbGVtZW50LCB0YWcsIHJhd1Byb3BzLCBwYXJlbnROYW1lc3BhY2UsIHJvb3RDb250YWluZXJFbGVtZW50KSB7XG4gIHZhciBpc0N1c3RvbUNvbXBvbmVudFRhZztcbiAgdmFyIGV4dHJhQXR0cmlidXRlTmFtZXM7XG5cbiAge1xuICAgIHN1cHByZXNzSHlkcmF0aW9uV2FybmluZyA9IHJhd1Byb3BzW1NVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HXSA9PT0gdHJ1ZTtcbiAgICBpc0N1c3RvbUNvbXBvbmVudFRhZyA9IGlzQ3VzdG9tQ29tcG9uZW50KHRhZywgcmF3UHJvcHMpO1xuICAgIHZhbGlkYXRlUHJvcGVydGllc0luRGV2ZWxvcG1lbnQodGFnLCByYXdQcm9wcyk7XG4gIH0gLy8gVE9ETzogTWFrZSBzdXJlIHRoYXQgd2UgY2hlY2sgaXNNb3VudGVkIGJlZm9yZSBmaXJpbmcgYW55IG9mIHRoZXNlIGV2ZW50cy5cblxuXG4gIHN3aXRjaCAodGFnKSB7XG4gICAgY2FzZSAnZGlhbG9nJzpcbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2NhbmNlbCcsIGRvbUVsZW1lbnQpO1xuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnY2xvc2UnLCBkb21FbGVtZW50KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnaWZyYW1lJzpcbiAgICBjYXNlICdvYmplY3QnOlxuICAgIGNhc2UgJ2VtYmVkJzpcbiAgICAgIC8vIFdlIGxpc3RlbiB0byB0aGlzIGV2ZW50IGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIHRoZSBsb2FkIGV2ZW50LlxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnbG9hZCcsIGRvbUVsZW1lbnQpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICd2aWRlbyc6XG4gICAgY2FzZSAnYXVkaW8nOlxuICAgICAgLy8gV2UgbGlzdGVuIHRvIHRoZXNlIGV2ZW50cyBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciBhbGwgdGhlIG1lZGlhIGV2ZW50cy5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVkaWFFdmVudFR5cGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQobWVkaWFFdmVudFR5cGVzW2ldLCBkb21FbGVtZW50KTtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdzb3VyY2UnOlxuICAgICAgLy8gV2UgbGlzdGVuIHRvIHRoaXMgZXZlbnQgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgdGhlIGVycm9yIGV2ZW50LlxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnZXJyb3InLCBkb21FbGVtZW50KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnaW1nJzpcbiAgICBjYXNlICdpbWFnZSc6XG4gICAgY2FzZSAnbGluayc6XG4gICAgICAvLyBXZSBsaXN0ZW4gdG8gdGhlc2UgZXZlbnRzIGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIGVycm9yIGFuZCBsb2FkIGV2ZW50cy5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2Vycm9yJywgZG9tRWxlbWVudCk7XG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdsb2FkJywgZG9tRWxlbWVudCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2RldGFpbHMnOlxuICAgICAgLy8gV2UgbGlzdGVuIHRvIHRoaXMgZXZlbnQgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgdGhlIHRvZ2dsZSBldmVudC5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ3RvZ2dsZScsIGRvbUVsZW1lbnQpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdpbnB1dCc6XG4gICAgICBpbml0V3JhcHBlclN0YXRlKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTsgLy8gV2UgbGlzdGVuIHRvIHRoaXMgZXZlbnQgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgdGhlIGludmFsaWQgZXZlbnQuXG5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2ludmFsaWQnLCBkb21FbGVtZW50KTtcblxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdvcHRpb24nOlxuICAgICAgdmFsaWRhdGVQcm9wcyhkb21FbGVtZW50LCByYXdQcm9wcyk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgICBpbml0V3JhcHBlclN0YXRlJDEoZG9tRWxlbWVudCwgcmF3UHJvcHMpOyAvLyBXZSBsaXN0ZW4gdG8gdGhpcyBldmVudCBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciB0aGUgaW52YWxpZCBldmVudC5cblxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnaW52YWxpZCcsIGRvbUVsZW1lbnQpO1xuXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3RleHRhcmVhJzpcbiAgICAgIGluaXRXcmFwcGVyU3RhdGUkMihkb21FbGVtZW50LCByYXdQcm9wcyk7IC8vIFdlIGxpc3RlbiB0byB0aGlzIGV2ZW50IGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIHRoZSBpbnZhbGlkIGV2ZW50LlxuXG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdpbnZhbGlkJywgZG9tRWxlbWVudCk7XG5cbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgYXNzZXJ0VmFsaWRQcm9wcyh0YWcsIHJhd1Byb3BzKTtcblxuICB7XG4gICAgZXh0cmFBdHRyaWJ1dGVOYW1lcyA9IG5ldyBTZXQoKTtcbiAgICB2YXIgYXR0cmlidXRlcyA9IGRvbUVsZW1lbnQuYXR0cmlidXRlcztcblxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhdHRyaWJ1dGVzLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIG5hbWUgPSBhdHRyaWJ1dGVzW19pXS5uYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgIHN3aXRjaCAobmFtZSkge1xuICAgICAgICAvLyBCdWlsdC1pbiBTU1IgYXR0cmlidXRlIGlzIGFsbG93ZWRcbiAgICAgICAgY2FzZSAnZGF0YS1yZWFjdHJvb3QnOlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICAvLyBDb250cm9sbGVkIGF0dHJpYnV0ZXMgYXJlIG5vdCB2YWxpZGF0ZWRcbiAgICAgICAgLy8gVE9ETzogT25seSBpZ25vcmUgdGhlbSBvbiBjb250cm9sbGVkIHRhZ3MuXG5cbiAgICAgICAgY2FzZSAndmFsdWUnOlxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2NoZWNrZWQnOlxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3NlbGVjdGVkJzpcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIC8vIEludGVudGlvbmFsbHkgdXNlIHRoZSBvcmlnaW5hbCBuYW1lLlxuICAgICAgICAgIC8vIFNlZSBkaXNjdXNzaW9uIGluIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzEwNjc2LlxuICAgICAgICAgIGV4dHJhQXR0cmlidXRlTmFtZXMuYWRkKGF0dHJpYnV0ZXNbX2ldLm5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciB1cGRhdGVQYXlsb2FkID0gbnVsbDtcblxuICBmb3IgKHZhciBwcm9wS2V5IGluIHJhd1Byb3BzKSB7XG4gICAgaWYgKCFyYXdQcm9wcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgdmFyIG5leHRQcm9wID0gcmF3UHJvcHNbcHJvcEtleV07XG5cbiAgICBpZiAocHJvcEtleSA9PT0gQ0hJTERSRU4pIHtcbiAgICAgIC8vIEZvciB0ZXh0IGNvbnRlbnQgY2hpbGRyZW4gd2UgY29tcGFyZSBhZ2FpbnN0IHRleHRDb250ZW50LiBUaGlzXG4gICAgICAvLyBtaWdodCBtYXRjaCBhZGRpdGlvbmFsIEhUTUwgdGhhdCBpcyBoaWRkZW4gd2hlbiB3ZSByZWFkIGl0IHVzaW5nXG4gICAgICAvLyB0ZXh0Q29udGVudC4gRS5nLiBcImZvb1wiIHdpbGwgbWF0Y2ggXCJmPHNwYW4+b288L3NwYW4+XCIgYnV0IHRoYXQgc3RpbGxcbiAgICAgIC8vIHNhdGlzZmllcyBvdXIgcmVxdWlyZW1lbnQuIE91ciByZXF1aXJlbWVudCBpcyBub3QgdG8gcHJvZHVjZSBwZXJmZWN0XG4gICAgICAvLyBIVE1MIGFuZCBhdHRyaWJ1dGVzLiBJZGVhbGx5IHdlIHNob3VsZCBwcmVzZXJ2ZSBzdHJ1Y3R1cmUgYnV0IGl0J3NcbiAgICAgIC8vIG9rIG5vdCB0byBpZiB0aGUgdmlzaWJsZSBjb250ZW50IGlzIHN0aWxsIGVub3VnaCB0byBpbmRpY2F0ZSB3aGF0XG4gICAgICAvLyBldmVuIGxpc3RlbmVycyB0aGVzZSBub2RlcyBtaWdodCBiZSB3aXJlZCB1cCB0by5cbiAgICAgIC8vIFRPRE86IFdhcm4gaWYgdGhlcmUgaXMgbW9yZSB0aGFuIGEgc2luZ2xlIHRleHROb2RlIGFzIGEgY2hpbGQuXG4gICAgICAvLyBUT0RPOiBTaG91bGQgd2UgdXNlIGRvbUVsZW1lbnQuZmlyc3RDaGlsZC5ub2RlVmFsdWUgdG8gY29tcGFyZT9cbiAgICAgIGlmICh0eXBlb2YgbmV4dFByb3AgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmIChkb21FbGVtZW50LnRleHRDb250ZW50ICE9PSBuZXh0UHJvcCkge1xuICAgICAgICAgIGlmICggIXN1cHByZXNzSHlkcmF0aW9uV2FybmluZykge1xuICAgICAgICAgICAgd2FybkZvclRleHREaWZmZXJlbmNlKGRvbUVsZW1lbnQudGV4dENvbnRlbnQsIG5leHRQcm9wKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB1cGRhdGVQYXlsb2FkID0gW0NISUxEUkVOLCBuZXh0UHJvcF07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG5leHRQcm9wID09PSAnbnVtYmVyJykge1xuICAgICAgICBpZiAoZG9tRWxlbWVudC50ZXh0Q29udGVudCAhPT0gJycgKyBuZXh0UHJvcCkge1xuICAgICAgICAgIGlmICggIXN1cHByZXNzSHlkcmF0aW9uV2FybmluZykge1xuICAgICAgICAgICAgd2FybkZvclRleHREaWZmZXJlbmNlKGRvbUVsZW1lbnQudGV4dENvbnRlbnQsIG5leHRQcm9wKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB1cGRhdGVQYXlsb2FkID0gW0NISUxEUkVOLCAnJyArIG5leHRQcm9wXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSkge1xuICAgICAgaWYgKG5leHRQcm9wICE9IG51bGwpIHtcbiAgICAgICAgaWYgKCB0eXBlb2YgbmV4dFByb3AgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB3YXJuRm9ySW52YWxpZEV2ZW50TGlzdGVuZXIocHJvcEtleSwgbmV4dFByb3ApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb3BLZXkgPT09ICdvblNjcm9sbCcpIHtcbiAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdzY3JvbGwnLCBkb21FbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIC8vIENvbnZpbmNlIEZsb3cgd2UndmUgY2FsY3VsYXRlZCBpdCAoaXQncyBERVYtb25seSBpbiB0aGlzIG1ldGhvZC4pXG4gICAgdHlwZW9mIGlzQ3VzdG9tQ29tcG9uZW50VGFnID09PSAnYm9vbGVhbicpIHtcbiAgICAgIC8vIFZhbGlkYXRlIHRoYXQgdGhlIHByb3BlcnRpZXMgY29ycmVzcG9uZCB0byB0aGVpciBleHBlY3RlZCB2YWx1ZXMuXG4gICAgICB2YXIgc2VydmVyVmFsdWUgPSB2b2lkIDA7XG4gICAgICB2YXIgcHJvcGVydHlJbmZvID0gZ2V0UHJvcGVydHlJbmZvKHByb3BLZXkpO1xuXG4gICAgICBpZiAoc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nKSA7IGVsc2UgaWYgKHByb3BLZXkgPT09IFNVUFBSRVNTX0NPTlRFTlRfRURJVEFCTEVfV0FSTklORyB8fCBwcm9wS2V5ID09PSBTVVBQUkVTU19IWURSQVRJT05fV0FSTklORyB8fCAvLyBDb250cm9sbGVkIGF0dHJpYnV0ZXMgYXJlIG5vdCB2YWxpZGF0ZWRcbiAgICAgIC8vIFRPRE86IE9ubHkgaWdub3JlIHRoZW0gb24gY29udHJvbGxlZCB0YWdzLlxuICAgICAgcHJvcEtleSA9PT0gJ3ZhbHVlJyB8fCBwcm9wS2V5ID09PSAnY2hlY2tlZCcgfHwgcHJvcEtleSA9PT0gJ3NlbGVjdGVkJykgOyBlbHNlIGlmIChwcm9wS2V5ID09PSBEQU5HRVJPVVNMWV9TRVRfSU5ORVJfSFRNTCkge1xuICAgICAgICB2YXIgc2VydmVySFRNTCA9IGRvbUVsZW1lbnQuaW5uZXJIVE1MO1xuICAgICAgICB2YXIgbmV4dEh0bWwgPSBuZXh0UHJvcCA/IG5leHRQcm9wW0hUTUwkMV0gOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgaWYgKG5leHRIdG1sICE9IG51bGwpIHtcbiAgICAgICAgICB2YXIgZXhwZWN0ZWRIVE1MID0gbm9ybWFsaXplSFRNTChkb21FbGVtZW50LCBuZXh0SHRtbCk7XG5cbiAgICAgICAgICBpZiAoZXhwZWN0ZWRIVE1MICE9PSBzZXJ2ZXJIVE1MKSB7XG4gICAgICAgICAgICB3YXJuRm9yUHJvcERpZmZlcmVuY2UocHJvcEtleSwgc2VydmVySFRNTCwgZXhwZWN0ZWRIVE1MKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAocHJvcEtleSA9PT0gU1RZTEUpIHtcbiAgICAgICAgLy8gJEZsb3dGaXhNZSAtIFNob3VsZCBiZSBpbmZlcnJlZCBhcyBub3QgdW5kZWZpbmVkLlxuICAgICAgICBleHRyYUF0dHJpYnV0ZU5hbWVzLmRlbGV0ZShwcm9wS2V5KTtcblxuICAgICAgICBpZiAoY2FuRGlmZlN0eWxlRm9ySHlkcmF0aW9uV2FybmluZykge1xuICAgICAgICAgIHZhciBleHBlY3RlZFN0eWxlID0gY3JlYXRlRGFuZ2Vyb3VzU3RyaW5nRm9yU3R5bGVzKG5leHRQcm9wKTtcbiAgICAgICAgICBzZXJ2ZXJWYWx1ZSA9IGRvbUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdzdHlsZScpO1xuXG4gICAgICAgICAgaWYgKGV4cGVjdGVkU3R5bGUgIT09IHNlcnZlclZhbHVlKSB7XG4gICAgICAgICAgICB3YXJuRm9yUHJvcERpZmZlcmVuY2UocHJvcEtleSwgc2VydmVyVmFsdWUsIGV4cGVjdGVkU3R5bGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc0N1c3RvbUNvbXBvbmVudFRhZykge1xuICAgICAgICAvLyAkRmxvd0ZpeE1lIC0gU2hvdWxkIGJlIGluZmVycmVkIGFzIG5vdCB1bmRlZmluZWQuXG4gICAgICAgIGV4dHJhQXR0cmlidXRlTmFtZXMuZGVsZXRlKHByb3BLZXkudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIHNlcnZlclZhbHVlID0gZ2V0VmFsdWVGb3JBdHRyaWJ1dGUoZG9tRWxlbWVudCwgcHJvcEtleSwgbmV4dFByb3ApO1xuXG4gICAgICAgIGlmIChuZXh0UHJvcCAhPT0gc2VydmVyVmFsdWUpIHtcbiAgICAgICAgICB3YXJuRm9yUHJvcERpZmZlcmVuY2UocHJvcEtleSwgc2VydmVyVmFsdWUsIG5leHRQcm9wKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghc2hvdWxkSWdub3JlQXR0cmlidXRlKHByb3BLZXksIHByb3BlcnR5SW5mbywgaXNDdXN0b21Db21wb25lbnRUYWcpICYmICFzaG91bGRSZW1vdmVBdHRyaWJ1dGUocHJvcEtleSwgbmV4dFByb3AsIHByb3BlcnR5SW5mbywgaXNDdXN0b21Db21wb25lbnRUYWcpKSB7XG4gICAgICAgIHZhciBpc01pc21hdGNoRHVlVG9CYWRDYXNpbmcgPSBmYWxzZTtcblxuICAgICAgICBpZiAocHJvcGVydHlJbmZvICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gJEZsb3dGaXhNZSAtIFNob3VsZCBiZSBpbmZlcnJlZCBhcyBub3QgdW5kZWZpbmVkLlxuICAgICAgICAgIGV4dHJhQXR0cmlidXRlTmFtZXMuZGVsZXRlKHByb3BlcnR5SW5mby5hdHRyaWJ1dGVOYW1lKTtcbiAgICAgICAgICBzZXJ2ZXJWYWx1ZSA9IGdldFZhbHVlRm9yUHJvcGVydHkoZG9tRWxlbWVudCwgcHJvcEtleSwgbmV4dFByb3AsIHByb3BlcnR5SW5mbyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIG93bk5hbWVzcGFjZSA9IHBhcmVudE5hbWVzcGFjZTtcblxuICAgICAgICAgIGlmIChvd25OYW1lc3BhY2UgPT09IEhUTUxfTkFNRVNQQUNFJDEpIHtcbiAgICAgICAgICAgIG93bk5hbWVzcGFjZSA9IGdldEludHJpbnNpY05hbWVzcGFjZSh0YWcpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChvd25OYW1lc3BhY2UgPT09IEhUTUxfTkFNRVNQQUNFJDEpIHtcbiAgICAgICAgICAgIC8vICRGbG93Rml4TWUgLSBTaG91bGQgYmUgaW5mZXJyZWQgYXMgbm90IHVuZGVmaW5lZC5cbiAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlTmFtZXMuZGVsZXRlKHByb3BLZXkudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBzdGFuZGFyZE5hbWUgPSBnZXRQb3NzaWJsZVN0YW5kYXJkTmFtZShwcm9wS2V5KTtcblxuICAgICAgICAgICAgaWYgKHN0YW5kYXJkTmFtZSAhPT0gbnVsbCAmJiBzdGFuZGFyZE5hbWUgIT09IHByb3BLZXkpIHtcbiAgICAgICAgICAgICAgLy8gSWYgYW4gU1ZHIHByb3AgaXMgc3VwcGxpZWQgd2l0aCBiYWQgY2FzaW5nLCBpdCB3aWxsXG4gICAgICAgICAgICAgIC8vIGJlIHN1Y2Nlc3NmdWxseSBwYXJzZWQgZnJvbSBIVE1MLCBidXQgd2lsbCBwcm9kdWNlIGEgbWlzbWF0Y2hcbiAgICAgICAgICAgICAgLy8gKGFuZCB3b3VsZCBiZSBpbmNvcnJlY3RseSByZW5kZXJlZCBvbiB0aGUgY2xpZW50KS5cbiAgICAgICAgICAgICAgLy8gSG93ZXZlciwgd2UgYWxyZWFkeSB3YXJuIGFib3V0IGJhZCBjYXNpbmcgZWxzZXdoZXJlLlxuICAgICAgICAgICAgICAvLyBTbyB3ZSdsbCBza2lwIHRoZSBtaXNsZWFkaW5nIGV4dHJhIG1pc21hdGNoIHdhcm5pbmcgaW4gdGhpcyBjYXNlLlxuICAgICAgICAgICAgICBpc01pc21hdGNoRHVlVG9CYWRDYXNpbmcgPSB0cnVlOyAvLyAkRmxvd0ZpeE1lIC0gU2hvdWxkIGJlIGluZmVycmVkIGFzIG5vdCB1bmRlZmluZWQuXG5cbiAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVOYW1lcy5kZWxldGUoc3RhbmRhcmROYW1lKTtcbiAgICAgICAgICAgIH0gLy8gJEZsb3dGaXhNZSAtIFNob3VsZCBiZSBpbmZlcnJlZCBhcyBub3QgdW5kZWZpbmVkLlxuXG5cbiAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlTmFtZXMuZGVsZXRlKHByb3BLZXkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHNlcnZlclZhbHVlID0gZ2V0VmFsdWVGb3JBdHRyaWJ1dGUoZG9tRWxlbWVudCwgcHJvcEtleSwgbmV4dFByb3ApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5leHRQcm9wICE9PSBzZXJ2ZXJWYWx1ZSAmJiAhaXNNaXNtYXRjaER1ZVRvQmFkQ2FzaW5nKSB7XG4gICAgICAgICAgd2FybkZvclByb3BEaWZmZXJlbmNlKHByb3BLZXksIHNlcnZlclZhbHVlLCBuZXh0UHJvcCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB7XG4gICAgLy8gJEZsb3dGaXhNZSAtIFNob3VsZCBiZSBpbmZlcnJlZCBhcyBub3QgdW5kZWZpbmVkLlxuICAgIGlmIChleHRyYUF0dHJpYnV0ZU5hbWVzLnNpemUgPiAwICYmICFzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmcpIHtcbiAgICAgIC8vICRGbG93Rml4TWUgLSBTaG91bGQgYmUgaW5mZXJyZWQgYXMgbm90IHVuZGVmaW5lZC5cbiAgICAgIHdhcm5Gb3JFeHRyYUF0dHJpYnV0ZXMoZXh0cmFBdHRyaWJ1dGVOYW1lcyk7XG4gICAgfVxuICB9XG5cbiAgc3dpdGNoICh0YWcpIHtcbiAgICBjYXNlICdpbnB1dCc6XG4gICAgICAvLyBUT0RPOiBNYWtlIHN1cmUgd2UgY2hlY2sgaWYgdGhpcyBpcyBzdGlsbCB1bm1vdW50ZWQgb3IgZG8gYW55IGNsZWFuXG4gICAgICAvLyB1cCBuZWNlc3Nhcnkgc2luY2Ugd2UgbmV2ZXIgc3RvcCB0cmFja2luZyBhbnltb3JlLlxuICAgICAgdHJhY2soZG9tRWxlbWVudCk7XG4gICAgICBwb3N0TW91bnRXcmFwcGVyKGRvbUVsZW1lbnQsIHJhd1Byb3BzLCB0cnVlKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAndGV4dGFyZWEnOlxuICAgICAgLy8gVE9ETzogTWFrZSBzdXJlIHdlIGNoZWNrIGlmIHRoaXMgaXMgc3RpbGwgdW5tb3VudGVkIG9yIGRvIGFueSBjbGVhblxuICAgICAgLy8gdXAgbmVjZXNzYXJ5IHNpbmNlIHdlIG5ldmVyIHN0b3AgdHJhY2tpbmcgYW55bW9yZS5cbiAgICAgIHRyYWNrKGRvbUVsZW1lbnQpO1xuICAgICAgcG9zdE1vdW50V3JhcHBlciQzKGRvbUVsZW1lbnQpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdzZWxlY3QnOlxuICAgIGNhc2UgJ29wdGlvbic6XG4gICAgICAvLyBGb3IgaW5wdXQgYW5kIHRleHRhcmVhIHdlIGN1cnJlbnQgYWx3YXlzIHNldCB0aGUgdmFsdWUgcHJvcGVydHkgYXRcbiAgICAgIC8vIHBvc3QgbW91bnQgdG8gZm9yY2UgaXQgdG8gZGl2ZXJnZSBmcm9tIGF0dHJpYnV0ZXMuIEhvd2V2ZXIsIGZvclxuICAgICAgLy8gb3B0aW9uIGFuZCBzZWxlY3Qgd2UgZG9uJ3QgcXVpdGUgZG8gdGhlIHNhbWUgdGhpbmcgYW5kIHNlbGVjdFxuICAgICAgLy8gaXMgbm90IHJlc2lsaWVudCB0byB0aGUgRE9NIHN0YXRlIGNoYW5naW5nIHNvIHdlIGRvbid0IGRvIHRoYXQgaGVyZS5cbiAgICAgIC8vIFRPRE86IENvbnNpZGVyIG5vdCBkb2luZyB0aGlzIGZvciBpbnB1dCBhbmQgdGV4dGFyZWEuXG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICBpZiAodHlwZW9mIHJhd1Byb3BzLm9uQ2xpY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gVE9ETzogVGhpcyBjYXN0IG1heSBub3QgYmUgc291bmQgZm9yIFNWRywgTWF0aE1MIG9yIGN1c3RvbSBlbGVtZW50cy5cbiAgICAgICAgdHJhcENsaWNrT25Ob25JbnRlcmFjdGl2ZUVsZW1lbnQoZG9tRWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZVBheWxvYWQ7XG59XG5mdW5jdGlvbiBkaWZmSHlkcmF0ZWRUZXh0KHRleHROb2RlLCB0ZXh0KSB7XG4gIHZhciBpc0RpZmZlcmVudCA9IHRleHROb2RlLm5vZGVWYWx1ZSAhPT0gdGV4dDtcbiAgcmV0dXJuIGlzRGlmZmVyZW50O1xufVxuZnVuY3Rpb24gd2FybkZvclVubWF0Y2hlZFRleHQodGV4dE5vZGUsIHRleHQpIHtcbiAge1xuICAgIHdhcm5Gb3JUZXh0RGlmZmVyZW5jZSh0ZXh0Tm9kZS5ub2RlVmFsdWUsIHRleHQpO1xuICB9XG59XG5mdW5jdGlvbiB3YXJuRm9yRGVsZXRlZEh5ZHJhdGFibGVFbGVtZW50KHBhcmVudE5vZGUsIGNoaWxkKSB7XG4gIHtcbiAgICBpZiAoZGlkV2FybkludmFsaWRIeWRyYXRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbiA9IHRydWU7XG5cbiAgICBlcnJvcignRGlkIG5vdCBleHBlY3Qgc2VydmVyIEhUTUwgdG8gY29udGFpbiBhIDwlcz4gaW4gPCVzPi4nLCBjaGlsZC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLCBwYXJlbnROb2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpO1xuICB9XG59XG5mdW5jdGlvbiB3YXJuRm9yRGVsZXRlZEh5ZHJhdGFibGVUZXh0KHBhcmVudE5vZGUsIGNoaWxkKSB7XG4gIHtcbiAgICBpZiAoZGlkV2FybkludmFsaWRIeWRyYXRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbiA9IHRydWU7XG5cbiAgICBlcnJvcignRGlkIG5vdCBleHBlY3Qgc2VydmVyIEhUTUwgdG8gY29udGFpbiB0aGUgdGV4dCBub2RlIFwiJXNcIiBpbiA8JXM+LicsIGNoaWxkLm5vZGVWYWx1ZSwgcGFyZW50Tm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgfVxufVxuZnVuY3Rpb24gd2FybkZvckluc2VydGVkSHlkcmF0ZWRFbGVtZW50KHBhcmVudE5vZGUsIHRhZywgcHJvcHMpIHtcbiAge1xuICAgIGlmIChkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uID0gdHJ1ZTtcblxuICAgIGVycm9yKCdFeHBlY3RlZCBzZXJ2ZXIgSFRNTCB0byBjb250YWluIGEgbWF0Y2hpbmcgPCVzPiBpbiA8JXM+LicsIHRhZywgcGFyZW50Tm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgfVxufVxuZnVuY3Rpb24gd2FybkZvckluc2VydGVkSHlkcmF0ZWRUZXh0KHBhcmVudE5vZGUsIHRleHQpIHtcbiAge1xuICAgIGlmICh0ZXh0ID09PSAnJykge1xuICAgICAgLy8gV2UgZXhwZWN0IHRvIGluc2VydCBlbXB0eSB0ZXh0IG5vZGVzIHNpbmNlIHRoZXkncmUgbm90IHJlcHJlc2VudGVkIGluXG4gICAgICAvLyB0aGUgSFRNTC5cbiAgICAgIC8vIFRPRE86IFJlbW92ZSB0aGlzIHNwZWNpYWwgY2FzZSBpZiB3ZSBjYW4ganVzdCBhdm9pZCBpbnNlcnRpbmcgZW1wdHlcbiAgICAgIC8vIHRleHQgbm9kZXMuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGlkV2FybkludmFsaWRIeWRyYXRpb24gPSB0cnVlO1xuXG4gICAgZXJyb3IoJ0V4cGVjdGVkIHNlcnZlciBIVE1MIHRvIGNvbnRhaW4gYSBtYXRjaGluZyB0ZXh0IG5vZGUgZm9yIFwiJXNcIiBpbiA8JXM+LicsIHRleHQsIHBhcmVudE5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSk7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlc3RvcmVDb250cm9sbGVkU3RhdGUkMyhkb21FbGVtZW50LCB0YWcsIHByb3BzKSB7XG4gIHN3aXRjaCAodGFnKSB7XG4gICAgY2FzZSAnaW5wdXQnOlxuICAgICAgcmVzdG9yZUNvbnRyb2xsZWRTdGF0ZShkb21FbGVtZW50LCBwcm9wcyk7XG4gICAgICByZXR1cm47XG5cbiAgICBjYXNlICd0ZXh0YXJlYSc6XG4gICAgICByZXN0b3JlQ29udHJvbGxlZFN0YXRlJDIoZG9tRWxlbWVudCwgcHJvcHMpO1xuICAgICAgcmV0dXJuO1xuXG4gICAgY2FzZSAnc2VsZWN0JzpcbiAgICAgIHJlc3RvcmVDb250cm9sbGVkU3RhdGUkMShkb21FbGVtZW50LCBwcm9wcyk7XG4gICAgICByZXR1cm47XG4gIH1cbn1cblxudmFyIHZhbGlkYXRlRE9NTmVzdGluZyA9IGZ1bmN0aW9uICgpIHt9O1xuXG52YXIgdXBkYXRlZEFuY2VzdG9ySW5mbyA9IGZ1bmN0aW9uICgpIHt9O1xuXG57XG4gIC8vIFRoaXMgdmFsaWRhdGlvbiBjb2RlIHdhcyB3cml0dGVuIGJhc2VkIG9uIHRoZSBIVE1MNSBwYXJzaW5nIHNwZWM6XG4gIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI2hhcy1hbi1lbGVtZW50LWluLXNjb3BlXG4gIC8vXG4gIC8vIE5vdGU6IHRoaXMgZG9lcyBub3QgY2F0Y2ggYWxsIGludmFsaWQgbmVzdGluZywgbm9yIGRvZXMgaXQgdHJ5IHRvIChhcyBpdCdzXG4gIC8vIG5vdCBjbGVhciB3aGF0IHByYWN0aWNhbCBiZW5lZml0IGRvaW5nIHNvIHByb3ZpZGVzKTsgaW5zdGVhZCwgd2Ugd2FybiBvbmx5XG4gIC8vIGZvciBjYXNlcyB3aGVyZSB0aGUgcGFyc2VyIHdpbGwgZ2l2ZSBhIHBhcnNlIHRyZWUgZGlmZmVyaW5nIGZyb20gd2hhdCBSZWFjdFxuICAvLyBpbnRlbmRlZC4gRm9yIGV4YW1wbGUsIDxiPjxkaXY+PC9kaXY+PC9iPiBpcyBpbnZhbGlkIGJ1dCB3ZSBkb24ndCB3YXJuXG4gIC8vIGJlY2F1c2UgaXQgc3RpbGwgcGFyc2VzIGNvcnJlY3RseTsgd2UgZG8gd2FybiBmb3Igb3RoZXIgY2FzZXMgbGlrZSBuZXN0ZWRcbiAgLy8gPHA+IHRhZ3Mgd2hlcmUgdGhlIGJlZ2lubmluZyBvZiB0aGUgc2Vjb25kIGVsZW1lbnQgaW1wbGljaXRseSBjbG9zZXMgdGhlXG4gIC8vIGZpcnN0LCBjYXVzaW5nIGEgY29uZnVzaW5nIG1lc3MuXG4gIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3NwZWNpYWxcbiAgdmFyIHNwZWNpYWxUYWdzID0gWydhZGRyZXNzJywgJ2FwcGxldCcsICdhcmVhJywgJ2FydGljbGUnLCAnYXNpZGUnLCAnYmFzZScsICdiYXNlZm9udCcsICdiZ3NvdW5kJywgJ2Jsb2NrcXVvdGUnLCAnYm9keScsICdicicsICdidXR0b24nLCAnY2FwdGlvbicsICdjZW50ZXInLCAnY29sJywgJ2NvbGdyb3VwJywgJ2RkJywgJ2RldGFpbHMnLCAnZGlyJywgJ2RpdicsICdkbCcsICdkdCcsICdlbWJlZCcsICdmaWVsZHNldCcsICdmaWdjYXB0aW9uJywgJ2ZpZ3VyZScsICdmb290ZXInLCAnZm9ybScsICdmcmFtZScsICdmcmFtZXNldCcsICdoMScsICdoMicsICdoMycsICdoNCcsICdoNScsICdoNicsICdoZWFkJywgJ2hlYWRlcicsICdoZ3JvdXAnLCAnaHInLCAnaHRtbCcsICdpZnJhbWUnLCAnaW1nJywgJ2lucHV0JywgJ2lzaW5kZXgnLCAnbGknLCAnbGluaycsICdsaXN0aW5nJywgJ21haW4nLCAnbWFycXVlZScsICdtZW51JywgJ21lbnVpdGVtJywgJ21ldGEnLCAnbmF2JywgJ25vZW1iZWQnLCAnbm9mcmFtZXMnLCAnbm9zY3JpcHQnLCAnb2JqZWN0JywgJ29sJywgJ3AnLCAncGFyYW0nLCAncGxhaW50ZXh0JywgJ3ByZScsICdzY3JpcHQnLCAnc2VjdGlvbicsICdzZWxlY3QnLCAnc291cmNlJywgJ3N0eWxlJywgJ3N1bW1hcnknLCAndGFibGUnLCAndGJvZHknLCAndGQnLCAndGVtcGxhdGUnLCAndGV4dGFyZWEnLCAndGZvb3QnLCAndGgnLCAndGhlYWQnLCAndGl0bGUnLCAndHInLCAndHJhY2snLCAndWwnLCAnd2JyJywgJ3htcCddOyAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNoYXMtYW4tZWxlbWVudC1pbi1zY29wZVxuXG4gIHZhciBpblNjb3BlVGFncyA9IFsnYXBwbGV0JywgJ2NhcHRpb24nLCAnaHRtbCcsICd0YWJsZScsICd0ZCcsICd0aCcsICdtYXJxdWVlJywgJ29iamVjdCcsICd0ZW1wbGF0ZScsIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI2h0bWwtaW50ZWdyYXRpb24tcG9pbnRcbiAgLy8gVE9ETzogRGlzdGluZ3Vpc2ggYnkgbmFtZXNwYWNlIGhlcmUgLS0gZm9yIDx0aXRsZT4sIGluY2x1ZGluZyBpdCBoZXJlXG4gIC8vIGVycnMgb24gdGhlIHNpZGUgb2YgZmV3ZXIgd2FybmluZ3NcbiAgJ2ZvcmVpZ25PYmplY3QnLCAnZGVzYycsICd0aXRsZSddOyAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNoYXMtYW4tZWxlbWVudC1pbi1idXR0b24tc2NvcGVcblxuICB2YXIgYnV0dG9uU2NvcGVUYWdzID0gaW5TY29wZVRhZ3MuY29uY2F0KFsnYnV0dG9uJ10pOyAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNnZW5lcmF0ZS1pbXBsaWVkLWVuZC10YWdzXG5cbiAgdmFyIGltcGxpZWRFbmRUYWdzID0gWydkZCcsICdkdCcsICdsaScsICdvcHRpb24nLCAnb3B0Z3JvdXAnLCAncCcsICdycCcsICdydCddO1xuICB2YXIgZW1wdHlBbmNlc3RvckluZm8gPSB7XG4gICAgY3VycmVudDogbnVsbCxcbiAgICBmb3JtVGFnOiBudWxsLFxuICAgIGFUYWdJblNjb3BlOiBudWxsLFxuICAgIGJ1dHRvblRhZ0luU2NvcGU6IG51bGwsXG4gICAgbm9iclRhZ0luU2NvcGU6IG51bGwsXG4gICAgcFRhZ0luQnV0dG9uU2NvcGU6IG51bGwsXG4gICAgbGlzdEl0ZW1UYWdBdXRvY2xvc2luZzogbnVsbCxcbiAgICBkbEl0ZW1UYWdBdXRvY2xvc2luZzogbnVsbFxuICB9O1xuXG4gIHVwZGF0ZWRBbmNlc3RvckluZm8gPSBmdW5jdGlvbiAob2xkSW5mbywgdGFnKSB7XG4gICAgdmFyIGFuY2VzdG9ySW5mbyA9IF9hc3NpZ24oe30sIG9sZEluZm8gfHwgZW1wdHlBbmNlc3RvckluZm8pO1xuXG4gICAgdmFyIGluZm8gPSB7XG4gICAgICB0YWc6IHRhZ1xuICAgIH07XG5cbiAgICBpZiAoaW5TY29wZVRhZ3MuaW5kZXhPZih0YWcpICE9PSAtMSkge1xuICAgICAgYW5jZXN0b3JJbmZvLmFUYWdJblNjb3BlID0gbnVsbDtcbiAgICAgIGFuY2VzdG9ySW5mby5idXR0b25UYWdJblNjb3BlID0gbnVsbDtcbiAgICAgIGFuY2VzdG9ySW5mby5ub2JyVGFnSW5TY29wZSA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGJ1dHRvblNjb3BlVGFncy5pbmRleE9mKHRhZykgIT09IC0xKSB7XG4gICAgICBhbmNlc3RvckluZm8ucFRhZ0luQnV0dG9uU2NvcGUgPSBudWxsO1xuICAgIH0gLy8gU2VlIHJ1bGVzIGZvciAnbGknLCAnZGQnLCAnZHQnIHN0YXJ0IHRhZ3MgaW5cbiAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW5ib2R5XG5cblxuICAgIGlmIChzcGVjaWFsVGFncy5pbmRleE9mKHRhZykgIT09IC0xICYmIHRhZyAhPT0gJ2FkZHJlc3MnICYmIHRhZyAhPT0gJ2RpdicgJiYgdGFnICE9PSAncCcpIHtcbiAgICAgIGFuY2VzdG9ySW5mby5saXN0SXRlbVRhZ0F1dG9jbG9zaW5nID0gbnVsbDtcbiAgICAgIGFuY2VzdG9ySW5mby5kbEl0ZW1UYWdBdXRvY2xvc2luZyA9IG51bGw7XG4gICAgfVxuXG4gICAgYW5jZXN0b3JJbmZvLmN1cnJlbnQgPSBpbmZvO1xuXG4gICAgaWYgKHRhZyA9PT0gJ2Zvcm0nKSB7XG4gICAgICBhbmNlc3RvckluZm8uZm9ybVRhZyA9IGluZm87XG4gICAgfVxuXG4gICAgaWYgKHRhZyA9PT0gJ2EnKSB7XG4gICAgICBhbmNlc3RvckluZm8uYVRhZ0luU2NvcGUgPSBpbmZvO1xuICAgIH1cblxuICAgIGlmICh0YWcgPT09ICdidXR0b24nKSB7XG4gICAgICBhbmNlc3RvckluZm8uYnV0dG9uVGFnSW5TY29wZSA9IGluZm87XG4gICAgfVxuXG4gICAgaWYgKHRhZyA9PT0gJ25vYnInKSB7XG4gICAgICBhbmNlc3RvckluZm8ubm9iclRhZ0luU2NvcGUgPSBpbmZvO1xuICAgIH1cblxuICAgIGlmICh0YWcgPT09ICdwJykge1xuICAgICAgYW5jZXN0b3JJbmZvLnBUYWdJbkJ1dHRvblNjb3BlID0gaW5mbztcbiAgICB9XG5cbiAgICBpZiAodGFnID09PSAnbGknKSB7XG4gICAgICBhbmNlc3RvckluZm8ubGlzdEl0ZW1UYWdBdXRvY2xvc2luZyA9IGluZm87XG4gICAgfVxuXG4gICAgaWYgKHRhZyA9PT0gJ2RkJyB8fCB0YWcgPT09ICdkdCcpIHtcbiAgICAgIGFuY2VzdG9ySW5mby5kbEl0ZW1UYWdBdXRvY2xvc2luZyA9IGluZm87XG4gICAgfVxuXG4gICAgcmV0dXJuIGFuY2VzdG9ySW5mbztcbiAgfTtcbiAgLyoqXG4gICAqIFJldHVybnMgd2hldGhlclxuICAgKi9cblxuXG4gIHZhciBpc1RhZ1ZhbGlkV2l0aFBhcmVudCA9IGZ1bmN0aW9uICh0YWcsIHBhcmVudFRhZykge1xuICAgIC8vIEZpcnN0LCBsZXQncyBjaGVjayBpZiB3ZSdyZSBpbiBhbiB1bnVzdWFsIHBhcnNpbmcgbW9kZS4uLlxuICAgIHN3aXRjaCAocGFyZW50VGFnKSB7XG4gICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW5zZWxlY3RcbiAgICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICdvcHRpb24nIHx8IHRhZyA9PT0gJ29wdGdyb3VwJyB8fCB0YWcgPT09ICcjdGV4dCc7XG5cbiAgICAgIGNhc2UgJ29wdGdyb3VwJzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJ29wdGlvbicgfHwgdGFnID09PSAnI3RleHQnO1xuICAgICAgLy8gU3RyaWN0bHkgc3BlYWtpbmcsIHNlZWluZyBhbiA8b3B0aW9uPiBkb2Vzbid0IG1lYW4gd2UncmUgaW4gYSA8c2VsZWN0PlxuICAgICAgLy8gYnV0XG5cbiAgICAgIGNhc2UgJ29wdGlvbic6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICcjdGV4dCc7XG4gICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW50ZFxuICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjcGFyc2luZy1tYWluLWluY2FwdGlvblxuICAgICAgLy8gTm8gc3BlY2lhbCBiZWhhdmlvciBzaW5jZSB0aGVzZSBydWxlcyBmYWxsIGJhY2sgdG8gXCJpbiBib2R5XCIgbW9kZSBmb3JcbiAgICAgIC8vIGFsbCBleGNlcHQgc3BlY2lhbCB0YWJsZSBub2RlcyB3aGljaCBjYXVzZSBiYWQgcGFyc2luZyBiZWhhdmlvciBhbnl3YXkuXG4gICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW50clxuXG4gICAgICBjYXNlICd0cic6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICd0aCcgfHwgdGFnID09PSAndGQnIHx8IHRhZyA9PT0gJ3N0eWxlJyB8fCB0YWcgPT09ICdzY3JpcHQnIHx8IHRhZyA9PT0gJ3RlbXBsYXRlJztcbiAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbnRib2R5XG5cbiAgICAgIGNhc2UgJ3Rib2R5JzpcbiAgICAgIGNhc2UgJ3RoZWFkJzpcbiAgICAgIGNhc2UgJ3Rmb290JzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJ3RyJyB8fCB0YWcgPT09ICdzdHlsZScgfHwgdGFnID09PSAnc2NyaXB0JyB8fCB0YWcgPT09ICd0ZW1wbGF0ZSc7XG4gICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW5jb2xncm91cFxuXG4gICAgICBjYXNlICdjb2xncm91cCc6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICdjb2wnIHx8IHRhZyA9PT0gJ3RlbXBsYXRlJztcbiAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbnRhYmxlXG5cbiAgICAgIGNhc2UgJ3RhYmxlJzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJ2NhcHRpb24nIHx8IHRhZyA9PT0gJ2NvbGdyb3VwJyB8fCB0YWcgPT09ICd0Ym9keScgfHwgdGFnID09PSAndGZvb3QnIHx8IHRhZyA9PT0gJ3RoZWFkJyB8fCB0YWcgPT09ICdzdHlsZScgfHwgdGFnID09PSAnc2NyaXB0JyB8fCB0YWcgPT09ICd0ZW1wbGF0ZSc7XG4gICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW5oZWFkXG5cbiAgICAgIGNhc2UgJ2hlYWQnOlxuICAgICAgICByZXR1cm4gdGFnID09PSAnYmFzZScgfHwgdGFnID09PSAnYmFzZWZvbnQnIHx8IHRhZyA9PT0gJ2Jnc291bmQnIHx8IHRhZyA9PT0gJ2xpbmsnIHx8IHRhZyA9PT0gJ21ldGEnIHx8IHRhZyA9PT0gJ3RpdGxlJyB8fCB0YWcgPT09ICdub3NjcmlwdCcgfHwgdGFnID09PSAnbm9mcmFtZXMnIHx8IHRhZyA9PT0gJ3N0eWxlJyB8fCB0YWcgPT09ICdzY3JpcHQnIHx8IHRhZyA9PT0gJ3RlbXBsYXRlJztcbiAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3NlbWFudGljcy5odG1sI3RoZS1odG1sLWVsZW1lbnRcblxuICAgICAgY2FzZSAnaHRtbCc6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICdoZWFkJyB8fCB0YWcgPT09ICdib2R5JyB8fCB0YWcgPT09ICdmcmFtZXNldCc7XG5cbiAgICAgIGNhc2UgJ2ZyYW1lc2V0JzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJ2ZyYW1lJztcblxuICAgICAgY2FzZSAnI2RvY3VtZW50JzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJ2h0bWwnO1xuICAgIH0gLy8gUHJvYmFibHkgaW4gdGhlIFwiaW4gYm9keVwiIHBhcnNpbmcgbW9kZSwgc28gd2Ugb3V0bGF3IG9ubHkgdGFnIGNvbWJvc1xuICAgIC8vIHdoZXJlIHRoZSBwYXJzaW5nIHJ1bGVzIGNhdXNlIGltcGxpY2l0IG9wZW5zIG9yIGNsb3NlcyB0byBiZSBhZGRlZC5cbiAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW5ib2R5XG5cblxuICAgIHN3aXRjaCAodGFnKSB7XG4gICAgICBjYXNlICdoMSc6XG4gICAgICBjYXNlICdoMic6XG4gICAgICBjYXNlICdoMyc6XG4gICAgICBjYXNlICdoNCc6XG4gICAgICBjYXNlICdoNSc6XG4gICAgICBjYXNlICdoNic6XG4gICAgICAgIHJldHVybiBwYXJlbnRUYWcgIT09ICdoMScgJiYgcGFyZW50VGFnICE9PSAnaDInICYmIHBhcmVudFRhZyAhPT0gJ2gzJyAmJiBwYXJlbnRUYWcgIT09ICdoNCcgJiYgcGFyZW50VGFnICE9PSAnaDUnICYmIHBhcmVudFRhZyAhPT0gJ2g2JztcblxuICAgICAgY2FzZSAncnAnOlxuICAgICAgY2FzZSAncnQnOlxuICAgICAgICByZXR1cm4gaW1wbGllZEVuZFRhZ3MuaW5kZXhPZihwYXJlbnRUYWcpID09PSAtMTtcblxuICAgICAgY2FzZSAnYm9keSc6XG4gICAgICBjYXNlICdjYXB0aW9uJzpcbiAgICAgIGNhc2UgJ2NvbCc6XG4gICAgICBjYXNlICdjb2xncm91cCc6XG4gICAgICBjYXNlICdmcmFtZXNldCc6XG4gICAgICBjYXNlICdmcmFtZSc6XG4gICAgICBjYXNlICdoZWFkJzpcbiAgICAgIGNhc2UgJ2h0bWwnOlxuICAgICAgY2FzZSAndGJvZHknOlxuICAgICAgY2FzZSAndGQnOlxuICAgICAgY2FzZSAndGZvb3QnOlxuICAgICAgY2FzZSAndGgnOlxuICAgICAgY2FzZSAndGhlYWQnOlxuICAgICAgY2FzZSAndHInOlxuICAgICAgICAvLyBUaGVzZSB0YWdzIGFyZSBvbmx5IHZhbGlkIHdpdGggYSBmZXcgcGFyZW50cyB0aGF0IGhhdmUgc3BlY2lhbCBjaGlsZFxuICAgICAgICAvLyBwYXJzaW5nIHJ1bGVzIC0tIGlmIHdlJ3JlIGRvd24gaGVyZSwgdGhlbiBub25lIG9mIHRob3NlIG1hdGNoZWQgYW5kXG4gICAgICAgIC8vIHNvIHdlIGFsbG93IGl0IG9ubHkgaWYgd2UgZG9uJ3Qga25vdyB3aGF0IHRoZSBwYXJlbnQgaXMsIGFzIGFsbCBvdGhlclxuICAgICAgICAvLyBjYXNlcyBhcmUgaW52YWxpZC5cbiAgICAgICAgcmV0dXJuIHBhcmVudFRhZyA9PSBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyXG4gICAqL1xuXG5cbiAgdmFyIGZpbmRJbnZhbGlkQW5jZXN0b3JGb3JUYWcgPSBmdW5jdGlvbiAodGFnLCBhbmNlc3RvckluZm8pIHtcbiAgICBzd2l0Y2ggKHRhZykge1xuICAgICAgY2FzZSAnYWRkcmVzcyc6XG4gICAgICBjYXNlICdhcnRpY2xlJzpcbiAgICAgIGNhc2UgJ2FzaWRlJzpcbiAgICAgIGNhc2UgJ2Jsb2NrcXVvdGUnOlxuICAgICAgY2FzZSAnY2VudGVyJzpcbiAgICAgIGNhc2UgJ2RldGFpbHMnOlxuICAgICAgY2FzZSAnZGlhbG9nJzpcbiAgICAgIGNhc2UgJ2Rpcic6XG4gICAgICBjYXNlICdkaXYnOlxuICAgICAgY2FzZSAnZGwnOlxuICAgICAgY2FzZSAnZmllbGRzZXQnOlxuICAgICAgY2FzZSAnZmlnY2FwdGlvbic6XG4gICAgICBjYXNlICdmaWd1cmUnOlxuICAgICAgY2FzZSAnZm9vdGVyJzpcbiAgICAgIGNhc2UgJ2hlYWRlcic6XG4gICAgICBjYXNlICdoZ3JvdXAnOlxuICAgICAgY2FzZSAnbWFpbic6XG4gICAgICBjYXNlICdtZW51JzpcbiAgICAgIGNhc2UgJ25hdic6XG4gICAgICBjYXNlICdvbCc6XG4gICAgICBjYXNlICdwJzpcbiAgICAgIGNhc2UgJ3NlY3Rpb24nOlxuICAgICAgY2FzZSAnc3VtbWFyeSc6XG4gICAgICBjYXNlICd1bCc6XG4gICAgICBjYXNlICdwcmUnOlxuICAgICAgY2FzZSAnbGlzdGluZyc6XG4gICAgICBjYXNlICd0YWJsZSc6XG4gICAgICBjYXNlICdocic6XG4gICAgICBjYXNlICd4bXAnOlxuICAgICAgY2FzZSAnaDEnOlxuICAgICAgY2FzZSAnaDInOlxuICAgICAgY2FzZSAnaDMnOlxuICAgICAgY2FzZSAnaDQnOlxuICAgICAgY2FzZSAnaDUnOlxuICAgICAgY2FzZSAnaDYnOlxuICAgICAgICByZXR1cm4gYW5jZXN0b3JJbmZvLnBUYWdJbkJ1dHRvblNjb3BlO1xuXG4gICAgICBjYXNlICdmb3JtJzpcbiAgICAgICAgcmV0dXJuIGFuY2VzdG9ySW5mby5mb3JtVGFnIHx8IGFuY2VzdG9ySW5mby5wVGFnSW5CdXR0b25TY29wZTtcblxuICAgICAgY2FzZSAnbGknOlxuICAgICAgICByZXR1cm4gYW5jZXN0b3JJbmZvLmxpc3RJdGVtVGFnQXV0b2Nsb3Npbmc7XG5cbiAgICAgIGNhc2UgJ2RkJzpcbiAgICAgIGNhc2UgJ2R0JzpcbiAgICAgICAgcmV0dXJuIGFuY2VzdG9ySW5mby5kbEl0ZW1UYWdBdXRvY2xvc2luZztcblxuICAgICAgY2FzZSAnYnV0dG9uJzpcbiAgICAgICAgcmV0dXJuIGFuY2VzdG9ySW5mby5idXR0b25UYWdJblNjb3BlO1xuXG4gICAgICBjYXNlICdhJzpcbiAgICAgICAgLy8gU3BlYyBzYXlzIHNvbWV0aGluZyBhYm91dCBzdG9yaW5nIGEgbGlzdCBvZiBtYXJrZXJzLCBidXQgaXQgc291bmRzXG4gICAgICAgIC8vIGVxdWl2YWxlbnQgdG8gdGhpcyBjaGVjay5cbiAgICAgICAgcmV0dXJuIGFuY2VzdG9ySW5mby5hVGFnSW5TY29wZTtcblxuICAgICAgY2FzZSAnbm9icic6XG4gICAgICAgIHJldHVybiBhbmNlc3RvckluZm8ubm9iclRhZ0luU2NvcGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG5cbiAgdmFyIGRpZFdhcm4kMSA9IHt9O1xuXG4gIHZhbGlkYXRlRE9NTmVzdGluZyA9IGZ1bmN0aW9uIChjaGlsZFRhZywgY2hpbGRUZXh0LCBhbmNlc3RvckluZm8pIHtcbiAgICBhbmNlc3RvckluZm8gPSBhbmNlc3RvckluZm8gfHwgZW1wdHlBbmNlc3RvckluZm87XG4gICAgdmFyIHBhcmVudEluZm8gPSBhbmNlc3RvckluZm8uY3VycmVudDtcbiAgICB2YXIgcGFyZW50VGFnID0gcGFyZW50SW5mbyAmJiBwYXJlbnRJbmZvLnRhZztcblxuICAgIGlmIChjaGlsZFRleHQgIT0gbnVsbCkge1xuICAgICAgaWYgKGNoaWxkVGFnICE9IG51bGwpIHtcbiAgICAgICAgZXJyb3IoJ3ZhbGlkYXRlRE9NTmVzdGluZzogd2hlbiBjaGlsZFRleHQgaXMgcGFzc2VkLCBjaGlsZFRhZyBzaG91bGQgYmUgbnVsbCcpO1xuICAgICAgfVxuXG4gICAgICBjaGlsZFRhZyA9ICcjdGV4dCc7XG4gICAgfVxuXG4gICAgdmFyIGludmFsaWRQYXJlbnQgPSBpc1RhZ1ZhbGlkV2l0aFBhcmVudChjaGlsZFRhZywgcGFyZW50VGFnKSA/IG51bGwgOiBwYXJlbnRJbmZvO1xuICAgIHZhciBpbnZhbGlkQW5jZXN0b3IgPSBpbnZhbGlkUGFyZW50ID8gbnVsbCA6IGZpbmRJbnZhbGlkQW5jZXN0b3JGb3JUYWcoY2hpbGRUYWcsIGFuY2VzdG9ySW5mbyk7XG4gICAgdmFyIGludmFsaWRQYXJlbnRPckFuY2VzdG9yID0gaW52YWxpZFBhcmVudCB8fCBpbnZhbGlkQW5jZXN0b3I7XG5cbiAgICBpZiAoIWludmFsaWRQYXJlbnRPckFuY2VzdG9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGFuY2VzdG9yVGFnID0gaW52YWxpZFBhcmVudE9yQW5jZXN0b3IudGFnO1xuICAgIHZhciB3YXJuS2V5ID0gISFpbnZhbGlkUGFyZW50ICsgJ3wnICsgY2hpbGRUYWcgKyAnfCcgKyBhbmNlc3RvclRhZztcblxuICAgIGlmIChkaWRXYXJuJDFbd2FybktleV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkaWRXYXJuJDFbd2FybktleV0gPSB0cnVlO1xuICAgIHZhciB0YWdEaXNwbGF5TmFtZSA9IGNoaWxkVGFnO1xuICAgIHZhciB3aGl0ZXNwYWNlSW5mbyA9ICcnO1xuXG4gICAgaWYgKGNoaWxkVGFnID09PSAnI3RleHQnKSB7XG4gICAgICBpZiAoL1xcUy8udGVzdChjaGlsZFRleHQpKSB7XG4gICAgICAgIHRhZ0Rpc3BsYXlOYW1lID0gJ1RleHQgbm9kZXMnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFnRGlzcGxheU5hbWUgPSAnV2hpdGVzcGFjZSB0ZXh0IG5vZGVzJztcbiAgICAgICAgd2hpdGVzcGFjZUluZm8gPSBcIiBNYWtlIHN1cmUgeW91IGRvbid0IGhhdmUgYW55IGV4dHJhIHdoaXRlc3BhY2UgYmV0d2VlbiB0YWdzIG9uIFwiICsgJ2VhY2ggbGluZSBvZiB5b3VyIHNvdXJjZSBjb2RlLic7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhZ0Rpc3BsYXlOYW1lID0gJzwnICsgY2hpbGRUYWcgKyAnPic7XG4gICAgfVxuXG4gICAgaWYgKGludmFsaWRQYXJlbnQpIHtcbiAgICAgIHZhciBpbmZvID0gJyc7XG5cbiAgICAgIGlmIChhbmNlc3RvclRhZyA9PT0gJ3RhYmxlJyAmJiBjaGlsZFRhZyA9PT0gJ3RyJykge1xuICAgICAgICBpbmZvICs9ICcgQWRkIGEgPHRib2R5PiwgPHRoZWFkPiBvciA8dGZvb3Q+IHRvIHlvdXIgY29kZSB0byBtYXRjaCB0aGUgRE9NIHRyZWUgZ2VuZXJhdGVkIGJ5ICcgKyAndGhlIGJyb3dzZXIuJztcbiAgICAgIH1cblxuICAgICAgZXJyb3IoJ3ZhbGlkYXRlRE9NTmVzdGluZyguLi4pOiAlcyBjYW5ub3QgYXBwZWFyIGFzIGEgY2hpbGQgb2YgPCVzPi4lcyVzJywgdGFnRGlzcGxheU5hbWUsIGFuY2VzdG9yVGFnLCB3aGl0ZXNwYWNlSW5mbywgaW5mbyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVycm9yKCd2YWxpZGF0ZURPTU5lc3RpbmcoLi4uKTogJXMgY2Fubm90IGFwcGVhciBhcyBhIGRlc2NlbmRhbnQgb2YgJyArICc8JXM+LicsIHRhZ0Rpc3BsYXlOYW1lLCBhbmNlc3RvclRhZyk7XG4gICAgfVxuICB9O1xufVxuXG52YXIgU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkckMTtcblxue1xuICBTVVBQUkVTU19IWURSQVRJT05fV0FSTklORyQxID0gJ3N1cHByZXNzSHlkcmF0aW9uV2FybmluZyc7XG59XG5cbnZhciBTVVNQRU5TRV9TVEFSVF9EQVRBID0gJyQnO1xudmFyIFNVU1BFTlNFX0VORF9EQVRBID0gJy8kJztcbnZhciBTVVNQRU5TRV9QRU5ESU5HX1NUQVJUX0RBVEEgPSAnJD8nO1xudmFyIFNVU1BFTlNFX0ZBTExCQUNLX1NUQVJUX0RBVEEgPSAnJCEnO1xudmFyIFNUWUxFJDEgPSAnc3R5bGUnO1xudmFyIGV2ZW50c0VuYWJsZWQgPSBudWxsO1xudmFyIHNlbGVjdGlvbkluZm9ybWF0aW9uID0gbnVsbDtcblxuZnVuY3Rpb24gc2hvdWxkQXV0b0ZvY3VzSG9zdENvbXBvbmVudCh0eXBlLCBwcm9wcykge1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICdidXR0b24nOlxuICAgIGNhc2UgJ2lucHV0JzpcbiAgICBjYXNlICdzZWxlY3QnOlxuICAgIGNhc2UgJ3RleHRhcmVhJzpcbiAgICAgIHJldHVybiAhIXByb3BzLmF1dG9Gb2N1cztcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGdldFJvb3RIb3N0Q29udGV4dChyb290Q29udGFpbmVySW5zdGFuY2UpIHtcbiAgdmFyIHR5cGU7XG4gIHZhciBuYW1lc3BhY2U7XG4gIHZhciBub2RlVHlwZSA9IHJvb3RDb250YWluZXJJbnN0YW5jZS5ub2RlVHlwZTtcblxuICBzd2l0Y2ggKG5vZGVUeXBlKSB7XG4gICAgY2FzZSBET0NVTUVOVF9OT0RFOlxuICAgIGNhc2UgRE9DVU1FTlRfRlJBR01FTlRfTk9ERTpcbiAgICAgIHtcbiAgICAgICAgdHlwZSA9IG5vZGVUeXBlID09PSBET0NVTUVOVF9OT0RFID8gJyNkb2N1bWVudCcgOiAnI2ZyYWdtZW50JztcbiAgICAgICAgdmFyIHJvb3QgPSByb290Q29udGFpbmVySW5zdGFuY2UuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgICBuYW1lc3BhY2UgPSByb290ID8gcm9vdC5uYW1lc3BhY2VVUkkgOiBnZXRDaGlsZE5hbWVzcGFjZShudWxsLCAnJyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIHtcbiAgICAgICAgdmFyIGNvbnRhaW5lciA9IG5vZGVUeXBlID09PSBDT01NRU5UX05PREUgPyByb290Q29udGFpbmVySW5zdGFuY2UucGFyZW50Tm9kZSA6IHJvb3RDb250YWluZXJJbnN0YW5jZTtcbiAgICAgICAgdmFyIG93bk5hbWVzcGFjZSA9IGNvbnRhaW5lci5uYW1lc3BhY2VVUkkgfHwgbnVsbDtcbiAgICAgICAgdHlwZSA9IGNvbnRhaW5lci50YWdOYW1lO1xuICAgICAgICBuYW1lc3BhY2UgPSBnZXRDaGlsZE5hbWVzcGFjZShvd25OYW1lc3BhY2UsIHR5cGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgfVxuXG4gIHtcbiAgICB2YXIgdmFsaWRhdGVkVGFnID0gdHlwZS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhciBhbmNlc3RvckluZm8gPSB1cGRhdGVkQW5jZXN0b3JJbmZvKG51bGwsIHZhbGlkYXRlZFRhZyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWVzcGFjZTogbmFtZXNwYWNlLFxuICAgICAgYW5jZXN0b3JJbmZvOiBhbmNlc3RvckluZm9cbiAgICB9O1xuICB9XG59XG5mdW5jdGlvbiBnZXRDaGlsZEhvc3RDb250ZXh0KHBhcmVudEhvc3RDb250ZXh0LCB0eXBlLCByb290Q29udGFpbmVySW5zdGFuY2UpIHtcbiAge1xuICAgIHZhciBwYXJlbnRIb3N0Q29udGV4dERldiA9IHBhcmVudEhvc3RDb250ZXh0O1xuICAgIHZhciBuYW1lc3BhY2UgPSBnZXRDaGlsZE5hbWVzcGFjZShwYXJlbnRIb3N0Q29udGV4dERldi5uYW1lc3BhY2UsIHR5cGUpO1xuICAgIHZhciBhbmNlc3RvckluZm8gPSB1cGRhdGVkQW5jZXN0b3JJbmZvKHBhcmVudEhvc3RDb250ZXh0RGV2LmFuY2VzdG9ySW5mbywgdHlwZSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWVzcGFjZTogbmFtZXNwYWNlLFxuICAgICAgYW5jZXN0b3JJbmZvOiBhbmNlc3RvckluZm9cbiAgICB9O1xuICB9XG59XG5mdW5jdGlvbiBnZXRQdWJsaWNJbnN0YW5jZShpbnN0YW5jZSkge1xuICByZXR1cm4gaW5zdGFuY2U7XG59XG5mdW5jdGlvbiBwcmVwYXJlRm9yQ29tbWl0KGNvbnRhaW5lckluZm8pIHtcbiAgZXZlbnRzRW5hYmxlZCA9IGlzRW5hYmxlZCgpO1xuICBzZWxlY3Rpb25JbmZvcm1hdGlvbiA9IGdldFNlbGVjdGlvbkluZm9ybWF0aW9uKCk7XG4gIHZhciBhY3RpdmVJbnN0YW5jZSA9IG51bGw7XG5cbiAgc2V0RW5hYmxlZChmYWxzZSk7XG4gIHJldHVybiBhY3RpdmVJbnN0YW5jZTtcbn1cbmZ1bmN0aW9uIHJlc2V0QWZ0ZXJDb21taXQoY29udGFpbmVySW5mbykge1xuICByZXN0b3JlU2VsZWN0aW9uKHNlbGVjdGlvbkluZm9ybWF0aW9uKTtcbiAgc2V0RW5hYmxlZChldmVudHNFbmFibGVkKTtcbiAgZXZlbnRzRW5hYmxlZCA9IG51bGw7XG4gIHNlbGVjdGlvbkluZm9ybWF0aW9uID0gbnVsbDtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlKHR5cGUsIHByb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UsIGhvc3RDb250ZXh0LCBpbnRlcm5hbEluc3RhbmNlSGFuZGxlKSB7XG4gIHZhciBwYXJlbnROYW1lc3BhY2U7XG5cbiAge1xuICAgIC8vIFRPRE86IHRha2UgbmFtZXNwYWNlIGludG8gYWNjb3VudCB3aGVuIHZhbGlkYXRpbmcuXG4gICAgdmFyIGhvc3RDb250ZXh0RGV2ID0gaG9zdENvbnRleHQ7XG4gICAgdmFsaWRhdGVET01OZXN0aW5nKHR5cGUsIG51bGwsIGhvc3RDb250ZXh0RGV2LmFuY2VzdG9ySW5mbyk7XG5cbiAgICBpZiAodHlwZW9mIHByb3BzLmNoaWxkcmVuID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgcHJvcHMuY2hpbGRyZW4gPT09ICdudW1iZXInKSB7XG4gICAgICB2YXIgc3RyaW5nID0gJycgKyBwcm9wcy5jaGlsZHJlbjtcbiAgICAgIHZhciBvd25BbmNlc3RvckluZm8gPSB1cGRhdGVkQW5jZXN0b3JJbmZvKGhvc3RDb250ZXh0RGV2LmFuY2VzdG9ySW5mbywgdHlwZSk7XG4gICAgICB2YWxpZGF0ZURPTU5lc3RpbmcobnVsbCwgc3RyaW5nLCBvd25BbmNlc3RvckluZm8pO1xuICAgIH1cblxuICAgIHBhcmVudE5hbWVzcGFjZSA9IGhvc3RDb250ZXh0RGV2Lm5hbWVzcGFjZTtcbiAgfVxuXG4gIHZhciBkb21FbGVtZW50ID0gY3JlYXRlRWxlbWVudCh0eXBlLCBwcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlLCBwYXJlbnROYW1lc3BhY2UpO1xuICBwcmVjYWNoZUZpYmVyTm9kZShpbnRlcm5hbEluc3RhbmNlSGFuZGxlLCBkb21FbGVtZW50KTtcbiAgdXBkYXRlRmliZXJQcm9wcyhkb21FbGVtZW50LCBwcm9wcyk7XG4gIHJldHVybiBkb21FbGVtZW50O1xufVxuZnVuY3Rpb24gYXBwZW5kSW5pdGlhbENoaWxkKHBhcmVudEluc3RhbmNlLCBjaGlsZCkge1xuICBwYXJlbnRJbnN0YW5jZS5hcHBlbmRDaGlsZChjaGlsZCk7XG59XG5mdW5jdGlvbiBmaW5hbGl6ZUluaXRpYWxDaGlsZHJlbihkb21FbGVtZW50LCB0eXBlLCBwcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlLCBob3N0Q29udGV4dCkge1xuICBzZXRJbml0aWFsUHJvcGVydGllcyhkb21FbGVtZW50LCB0eXBlLCBwcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlKTtcbiAgcmV0dXJuIHNob3VsZEF1dG9Gb2N1c0hvc3RDb21wb25lbnQodHlwZSwgcHJvcHMpO1xufVxuZnVuY3Rpb24gcHJlcGFyZVVwZGF0ZShkb21FbGVtZW50LCB0eXBlLCBvbGRQcm9wcywgbmV3UHJvcHMsIHJvb3RDb250YWluZXJJbnN0YW5jZSwgaG9zdENvbnRleHQpIHtcbiAge1xuICAgIHZhciBob3N0Q29udGV4dERldiA9IGhvc3RDb250ZXh0O1xuXG4gICAgaWYgKHR5cGVvZiBuZXdQcm9wcy5jaGlsZHJlbiAhPT0gdHlwZW9mIG9sZFByb3BzLmNoaWxkcmVuICYmICh0eXBlb2YgbmV3UHJvcHMuY2hpbGRyZW4gPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBuZXdQcm9wcy5jaGlsZHJlbiA9PT0gJ251bWJlcicpKSB7XG4gICAgICB2YXIgc3RyaW5nID0gJycgKyBuZXdQcm9wcy5jaGlsZHJlbjtcbiAgICAgIHZhciBvd25BbmNlc3RvckluZm8gPSB1cGRhdGVkQW5jZXN0b3JJbmZvKGhvc3RDb250ZXh0RGV2LmFuY2VzdG9ySW5mbywgdHlwZSk7XG4gICAgICB2YWxpZGF0ZURPTU5lc3RpbmcobnVsbCwgc3RyaW5nLCBvd25BbmNlc3RvckluZm8pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkaWZmUHJvcGVydGllcyhkb21FbGVtZW50LCB0eXBlLCBvbGRQcm9wcywgbmV3UHJvcHMpO1xufVxuZnVuY3Rpb24gc2hvdWxkU2V0VGV4dENvbnRlbnQodHlwZSwgcHJvcHMpIHtcbiAgcmV0dXJuIHR5cGUgPT09ICd0ZXh0YXJlYScgfHwgdHlwZSA9PT0gJ29wdGlvbicgfHwgdHlwZSA9PT0gJ25vc2NyaXB0JyB8fCB0eXBlb2YgcHJvcHMuY2hpbGRyZW4gPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBwcm9wcy5jaGlsZHJlbiA9PT0gJ251bWJlcicgfHwgdHlwZW9mIHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MID09PSAnb2JqZWN0JyAmJiBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCAhPT0gbnVsbCAmJiBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTC5fX2h0bWwgIT0gbnVsbDtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVRleHRJbnN0YW5jZSh0ZXh0LCByb290Q29udGFpbmVySW5zdGFuY2UsIGhvc3RDb250ZXh0LCBpbnRlcm5hbEluc3RhbmNlSGFuZGxlKSB7XG4gIHtcbiAgICB2YXIgaG9zdENvbnRleHREZXYgPSBob3N0Q29udGV4dDtcbiAgICB2YWxpZGF0ZURPTU5lc3RpbmcobnVsbCwgdGV4dCwgaG9zdENvbnRleHREZXYuYW5jZXN0b3JJbmZvKTtcbiAgfVxuXG4gIHZhciB0ZXh0Tm9kZSA9IGNyZWF0ZVRleHROb2RlKHRleHQsIHJvb3RDb250YWluZXJJbnN0YW5jZSk7XG4gIHByZWNhY2hlRmliZXJOb2RlKGludGVybmFsSW5zdGFuY2VIYW5kbGUsIHRleHROb2RlKTtcbiAgcmV0dXJuIHRleHROb2RlO1xufVxuLy8gaWYgYSBjb21wb25lbnQganVzdCBpbXBvcnRzIFJlYWN0RE9NIChlLmcuIGZvciBmaW5kRE9NTm9kZSkuXG4vLyBTb21lIGVudmlyb25tZW50cyBtaWdodCBub3QgaGF2ZSBzZXRUaW1lb3V0IG9yIGNsZWFyVGltZW91dC5cblxudmFyIHNjaGVkdWxlVGltZW91dCA9IHR5cGVvZiBzZXRUaW1lb3V0ID09PSAnZnVuY3Rpb24nID8gc2V0VGltZW91dCA6IHVuZGVmaW5lZDtcbnZhciBjYW5jZWxUaW1lb3V0ID0gdHlwZW9mIGNsZWFyVGltZW91dCA9PT0gJ2Z1bmN0aW9uJyA/IGNsZWFyVGltZW91dCA6IHVuZGVmaW5lZDtcbnZhciBub1RpbWVvdXQgPSAtMTsgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gY29tbWl0TW91bnQoZG9tRWxlbWVudCwgdHlwZSwgbmV3UHJvcHMsIGludGVybmFsSW5zdGFuY2VIYW5kbGUpIHtcbiAgLy8gRGVzcGl0ZSB0aGUgbmFtaW5nIHRoYXQgbWlnaHQgaW1wbHkgb3RoZXJ3aXNlLCB0aGlzIG1ldGhvZCBvbmx5XG4gIC8vIGZpcmVzIGlmIHRoZXJlIGlzIGFuIGBVcGRhdGVgIGVmZmVjdCBzY2hlZHVsZWQgZHVyaW5nIG1vdW50aW5nLlxuICAvLyBUaGlzIGhhcHBlbnMgaWYgYGZpbmFsaXplSW5pdGlhbENoaWxkcmVuYCByZXR1cm5zIGB0cnVlYCAod2hpY2ggaXRcbiAgLy8gZG9lcyB0byBpbXBsZW1lbnQgdGhlIGBhdXRvRm9jdXNgIGF0dHJpYnV0ZSBvbiB0aGUgY2xpZW50KS4gQnV0XG4gIC8vIHRoZXJlIGFyZSBhbHNvIG90aGVyIGNhc2VzIHdoZW4gdGhpcyBtaWdodCBoYXBwZW4gKHN1Y2ggYXMgcGF0Y2hpbmdcbiAgLy8gdXAgdGV4dCBjb250ZW50IGR1cmluZyBoeWRyYXRpb24gbWlzbWF0Y2gpLiBTbyB3ZSdsbCBjaGVjayB0aGlzIGFnYWluLlxuICBpZiAoc2hvdWxkQXV0b0ZvY3VzSG9zdENvbXBvbmVudCh0eXBlLCBuZXdQcm9wcykpIHtcbiAgICBkb21FbGVtZW50LmZvY3VzKCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGNvbW1pdFVwZGF0ZShkb21FbGVtZW50LCB1cGRhdGVQYXlsb2FkLCB0eXBlLCBvbGRQcm9wcywgbmV3UHJvcHMsIGludGVybmFsSW5zdGFuY2VIYW5kbGUpIHtcbiAgLy8gVXBkYXRlIHRoZSBwcm9wcyBoYW5kbGUgc28gdGhhdCB3ZSBrbm93IHdoaWNoIHByb3BzIGFyZSB0aGUgb25lcyB3aXRoXG4gIC8vIHdpdGggY3VycmVudCBldmVudCBoYW5kbGVycy5cbiAgdXBkYXRlRmliZXJQcm9wcyhkb21FbGVtZW50LCBuZXdQcm9wcyk7IC8vIEFwcGx5IHRoZSBkaWZmIHRvIHRoZSBET00gbm9kZS5cblxuICB1cGRhdGVQcm9wZXJ0aWVzKGRvbUVsZW1lbnQsIHVwZGF0ZVBheWxvYWQsIHR5cGUsIG9sZFByb3BzLCBuZXdQcm9wcyk7XG59XG5mdW5jdGlvbiByZXNldFRleHRDb250ZW50KGRvbUVsZW1lbnQpIHtcbiAgc2V0VGV4dENvbnRlbnQoZG9tRWxlbWVudCwgJycpO1xufVxuZnVuY3Rpb24gY29tbWl0VGV4dFVwZGF0ZSh0ZXh0SW5zdGFuY2UsIG9sZFRleHQsIG5ld1RleHQpIHtcbiAgdGV4dEluc3RhbmNlLm5vZGVWYWx1ZSA9IG5ld1RleHQ7XG59XG5mdW5jdGlvbiBhcHBlbmRDaGlsZChwYXJlbnRJbnN0YW5jZSwgY2hpbGQpIHtcbiAgcGFyZW50SW5zdGFuY2UuYXBwZW5kQ2hpbGQoY2hpbGQpO1xufVxuZnVuY3Rpb24gYXBwZW5kQ2hpbGRUb0NvbnRhaW5lcihjb250YWluZXIsIGNoaWxkKSB7XG4gIHZhciBwYXJlbnROb2RlO1xuXG4gIGlmIChjb250YWluZXIubm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSkge1xuICAgIHBhcmVudE5vZGUgPSBjb250YWluZXIucGFyZW50Tm9kZTtcbiAgICBwYXJlbnROb2RlLmluc2VydEJlZm9yZShjaGlsZCwgY29udGFpbmVyKTtcbiAgfSBlbHNlIHtcbiAgICBwYXJlbnROb2RlID0gY29udGFpbmVyO1xuICAgIHBhcmVudE5vZGUuYXBwZW5kQ2hpbGQoY2hpbGQpO1xuICB9IC8vIFRoaXMgY29udGFpbmVyIG1pZ2h0IGJlIHVzZWQgZm9yIGEgcG9ydGFsLlxuICAvLyBJZiBzb21ldGhpbmcgaW5zaWRlIGEgcG9ydGFsIGlzIGNsaWNrZWQsIHRoYXQgY2xpY2sgc2hvdWxkIGJ1YmJsZVxuICAvLyB0aHJvdWdoIHRoZSBSZWFjdCB0cmVlLiBIb3dldmVyLCBvbiBNb2JpbGUgU2FmYXJpIHRoZSBjbGljayB3b3VsZFxuICAvLyBuZXZlciBidWJibGUgdGhyb3VnaCB0aGUgKkRPTSogdHJlZSB1bmxlc3MgYW4gYW5jZXN0b3Igd2l0aCBvbmNsaWNrXG4gIC8vIGV2ZW50IGV4aXN0cy4gU28gd2Ugd291bGRuJ3Qgc2VlIGl0IGFuZCBkaXNwYXRjaCBpdC5cbiAgLy8gVGhpcyBpcyB3aHkgd2UgZW5zdXJlIHRoYXQgbm9uIFJlYWN0IHJvb3QgY29udGFpbmVycyBoYXZlIGlubGluZSBvbmNsaWNrXG4gIC8vIGRlZmluZWQuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTE5MThcblxuXG4gIHZhciByZWFjdFJvb3RDb250YWluZXIgPSBjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lcjtcblxuICBpZiAoKHJlYWN0Um9vdENvbnRhaW5lciA9PT0gbnVsbCB8fCByZWFjdFJvb3RDb250YWluZXIgPT09IHVuZGVmaW5lZCkgJiYgcGFyZW50Tm9kZS5vbmNsaWNrID09PSBudWxsKSB7XG4gICAgLy8gVE9ETzogVGhpcyBjYXN0IG1heSBub3QgYmUgc291bmQgZm9yIFNWRywgTWF0aE1MIG9yIGN1c3RvbSBlbGVtZW50cy5cbiAgICB0cmFwQ2xpY2tPbk5vbkludGVyYWN0aXZlRWxlbWVudChwYXJlbnROb2RlKTtcbiAgfVxufVxuZnVuY3Rpb24gaW5zZXJ0QmVmb3JlKHBhcmVudEluc3RhbmNlLCBjaGlsZCwgYmVmb3JlQ2hpbGQpIHtcbiAgcGFyZW50SW5zdGFuY2UuaW5zZXJ0QmVmb3JlKGNoaWxkLCBiZWZvcmVDaGlsZCk7XG59XG5mdW5jdGlvbiBpbnNlcnRJbkNvbnRhaW5lckJlZm9yZShjb250YWluZXIsIGNoaWxkLCBiZWZvcmVDaGlsZCkge1xuICBpZiAoY29udGFpbmVyLm5vZGVUeXBlID09PSBDT01NRU5UX05PREUpIHtcbiAgICBjb250YWluZXIucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoY2hpbGQsIGJlZm9yZUNoaWxkKTtcbiAgfSBlbHNlIHtcbiAgICBjb250YWluZXIuaW5zZXJ0QmVmb3JlKGNoaWxkLCBiZWZvcmVDaGlsZCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVtb3ZlQ2hpbGQocGFyZW50SW5zdGFuY2UsIGNoaWxkKSB7XG4gIHBhcmVudEluc3RhbmNlLnJlbW92ZUNoaWxkKGNoaWxkKTtcbn1cbmZ1bmN0aW9uIHJlbW92ZUNoaWxkRnJvbUNvbnRhaW5lcihjb250YWluZXIsIGNoaWxkKSB7XG4gIGlmIChjb250YWluZXIubm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSkge1xuICAgIGNvbnRhaW5lci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgfSBlbHNlIHtcbiAgICBjb250YWluZXIucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICB9XG59XG5mdW5jdGlvbiBoaWRlSW5zdGFuY2UoaW5zdGFuY2UpIHtcbiAgLy8gVE9ETzogRG9lcyB0aGlzIHdvcmsgZm9yIGFsbCBlbGVtZW50IHR5cGVzPyBXaGF0IGFib3V0IE1hdGhNTD8gU2hvdWxkIHdlXG4gIC8vIHBhc3MgaG9zdCBjb250ZXh0IHRvIHRoaXMgbWV0aG9kP1xuICBpbnN0YW5jZSA9IGluc3RhbmNlO1xuICB2YXIgc3R5bGUgPSBpbnN0YW5jZS5zdHlsZTtcblxuICBpZiAodHlwZW9mIHN0eWxlLnNldFByb3BlcnR5ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgc3R5bGUuc2V0UHJvcGVydHkoJ2Rpc3BsYXknLCAnbm9uZScsICdpbXBvcnRhbnQnKTtcbiAgfSBlbHNlIHtcbiAgICBzdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICB9XG59XG5mdW5jdGlvbiBoaWRlVGV4dEluc3RhbmNlKHRleHRJbnN0YW5jZSkge1xuICB0ZXh0SW5zdGFuY2Uubm9kZVZhbHVlID0gJyc7XG59XG5mdW5jdGlvbiB1bmhpZGVJbnN0YW5jZShpbnN0YW5jZSwgcHJvcHMpIHtcbiAgaW5zdGFuY2UgPSBpbnN0YW5jZTtcbiAgdmFyIHN0eWxlUHJvcCA9IHByb3BzW1NUWUxFJDFdO1xuICB2YXIgZGlzcGxheSA9IHN0eWxlUHJvcCAhPT0gdW5kZWZpbmVkICYmIHN0eWxlUHJvcCAhPT0gbnVsbCAmJiBzdHlsZVByb3AuaGFzT3duUHJvcGVydHkoJ2Rpc3BsYXknKSA/IHN0eWxlUHJvcC5kaXNwbGF5IDogbnVsbDtcbiAgaW5zdGFuY2Uuc3R5bGUuZGlzcGxheSA9IGRhbmdlcm91c1N0eWxlVmFsdWUoJ2Rpc3BsYXknLCBkaXNwbGF5KTtcbn1cbmZ1bmN0aW9uIHVuaGlkZVRleHRJbnN0YW5jZSh0ZXh0SW5zdGFuY2UsIHRleHQpIHtcbiAgdGV4dEluc3RhbmNlLm5vZGVWYWx1ZSA9IHRleHQ7XG59XG5mdW5jdGlvbiBjbGVhckNvbnRhaW5lcihjb250YWluZXIpIHtcbiAgaWYgKGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFKSB7XG4gICAgY29udGFpbmVyLnRleHRDb250ZW50ID0gJyc7XG4gIH0gZWxzZSBpZiAoY29udGFpbmVyLm5vZGVUeXBlID09PSBET0NVTUVOVF9OT0RFKSB7XG4gICAgdmFyIGJvZHkgPSBjb250YWluZXIuYm9keTtcblxuICAgIGlmIChib2R5ICE9IG51bGwpIHtcbiAgICAgIGJvZHkudGV4dENvbnRlbnQgPSAnJztcbiAgICB9XG4gIH1cbn0gLy8gLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gY2FuSHlkcmF0ZUluc3RhbmNlKGluc3RhbmNlLCB0eXBlLCBwcm9wcykge1xuICBpZiAoaW5zdGFuY2Uubm9kZVR5cGUgIT09IEVMRU1FTlRfTk9ERSB8fCB0eXBlLnRvTG93ZXJDYXNlKCkgIT09IGluc3RhbmNlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSAvLyBUaGlzIGhhcyBub3cgYmVlbiByZWZpbmVkIHRvIGFuIGVsZW1lbnQgbm9kZS5cblxuXG4gIHJldHVybiBpbnN0YW5jZTtcbn1cbmZ1bmN0aW9uIGNhbkh5ZHJhdGVUZXh0SW5zdGFuY2UoaW5zdGFuY2UsIHRleHQpIHtcbiAgaWYgKHRleHQgPT09ICcnIHx8IGluc3RhbmNlLm5vZGVUeXBlICE9PSBURVhUX05PREUpIHtcbiAgICAvLyBFbXB0eSBzdHJpbmdzIGFyZSBub3QgcGFyc2VkIGJ5IEhUTUwgc28gdGhlcmUgd29uJ3QgYmUgYSBjb3JyZWN0IG1hdGNoIGhlcmUuXG4gICAgcmV0dXJuIG51bGw7XG4gIH0gLy8gVGhpcyBoYXMgbm93IGJlZW4gcmVmaW5lZCB0byBhIHRleHQgbm9kZS5cblxuXG4gIHJldHVybiBpbnN0YW5jZTtcbn1cbmZ1bmN0aW9uIGlzU3VzcGVuc2VJbnN0YW5jZVBlbmRpbmcoaW5zdGFuY2UpIHtcbiAgcmV0dXJuIGluc3RhbmNlLmRhdGEgPT09IFNVU1BFTlNFX1BFTkRJTkdfU1RBUlRfREFUQTtcbn1cbmZ1bmN0aW9uIGlzU3VzcGVuc2VJbnN0YW5jZUZhbGxiYWNrKGluc3RhbmNlKSB7XG4gIHJldHVybiBpbnN0YW5jZS5kYXRhID09PSBTVVNQRU5TRV9GQUxMQkFDS19TVEFSVF9EQVRBO1xufVxuXG5mdW5jdGlvbiBnZXROZXh0SHlkcmF0YWJsZShub2RlKSB7XG4gIC8vIFNraXAgbm9uLWh5ZHJhdGFibGUgbm9kZXMuXG4gIGZvciAoOyBub2RlICE9IG51bGw7IG5vZGUgPSBub2RlLm5leHRTaWJsaW5nKSB7XG4gICAgdmFyIG5vZGVUeXBlID0gbm9kZS5ub2RlVHlwZTtcblxuICAgIGlmIChub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFIHx8IG5vZGVUeXBlID09PSBURVhUX05PREUpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBub2RlO1xufVxuXG5mdW5jdGlvbiBnZXROZXh0SHlkcmF0YWJsZVNpYmxpbmcoaW5zdGFuY2UpIHtcbiAgcmV0dXJuIGdldE5leHRIeWRyYXRhYmxlKGluc3RhbmNlLm5leHRTaWJsaW5nKTtcbn1cbmZ1bmN0aW9uIGdldEZpcnN0SHlkcmF0YWJsZUNoaWxkKHBhcmVudEluc3RhbmNlKSB7XG4gIHJldHVybiBnZXROZXh0SHlkcmF0YWJsZShwYXJlbnRJbnN0YW5jZS5maXJzdENoaWxkKTtcbn1cbmZ1bmN0aW9uIGh5ZHJhdGVJbnN0YW5jZShpbnN0YW5jZSwgdHlwZSwgcHJvcHMsIHJvb3RDb250YWluZXJJbnN0YW5jZSwgaG9zdENvbnRleHQsIGludGVybmFsSW5zdGFuY2VIYW5kbGUpIHtcbiAgcHJlY2FjaGVGaWJlck5vZGUoaW50ZXJuYWxJbnN0YW5jZUhhbmRsZSwgaW5zdGFuY2UpOyAvLyBUT0RPOiBQb3NzaWJseSBkZWZlciB0aGlzIHVudGlsIHRoZSBjb21taXQgcGhhc2Ugd2hlcmUgYWxsIHRoZSBldmVudHNcbiAgLy8gZ2V0IGF0dGFjaGVkLlxuXG4gIHVwZGF0ZUZpYmVyUHJvcHMoaW5zdGFuY2UsIHByb3BzKTtcbiAgdmFyIHBhcmVudE5hbWVzcGFjZTtcblxuICB7XG4gICAgdmFyIGhvc3RDb250ZXh0RGV2ID0gaG9zdENvbnRleHQ7XG4gICAgcGFyZW50TmFtZXNwYWNlID0gaG9zdENvbnRleHREZXYubmFtZXNwYWNlO1xuICB9XG5cbiAgcmV0dXJuIGRpZmZIeWRyYXRlZFByb3BlcnRpZXMoaW5zdGFuY2UsIHR5cGUsIHByb3BzLCBwYXJlbnROYW1lc3BhY2UpO1xufVxuZnVuY3Rpb24gaHlkcmF0ZVRleHRJbnN0YW5jZSh0ZXh0SW5zdGFuY2UsIHRleHQsIGludGVybmFsSW5zdGFuY2VIYW5kbGUpIHtcbiAgcHJlY2FjaGVGaWJlck5vZGUoaW50ZXJuYWxJbnN0YW5jZUhhbmRsZSwgdGV4dEluc3RhbmNlKTtcbiAgcmV0dXJuIGRpZmZIeWRyYXRlZFRleHQodGV4dEluc3RhbmNlLCB0ZXh0KTtcbn1cbmZ1bmN0aW9uIGdldE5leHRIeWRyYXRhYmxlSW5zdGFuY2VBZnRlclN1c3BlbnNlSW5zdGFuY2Uoc3VzcGVuc2VJbnN0YW5jZSkge1xuICB2YXIgbm9kZSA9IHN1c3BlbnNlSW5zdGFuY2UubmV4dFNpYmxpbmc7IC8vIFNraXAgcGFzdCBhbGwgbm9kZXMgd2l0aGluIHRoaXMgc3VzcGVuc2UgYm91bmRhcnkuXG4gIC8vIFRoZXJlIG1pZ2h0IGJlIG5lc3RlZCBub2RlcyBzbyB3ZSBuZWVkIHRvIGtlZXAgdHJhY2sgb2YgaG93XG4gIC8vIGRlZXAgd2UgYXJlIGFuZCBvbmx5IGJyZWFrIG91dCB3aGVuIHdlJ3JlIGJhY2sgb24gdG9wLlxuXG4gIHZhciBkZXB0aCA9IDA7XG5cbiAgd2hpbGUgKG5vZGUpIHtcbiAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFKSB7XG4gICAgICB2YXIgZGF0YSA9IG5vZGUuZGF0YTtcblxuICAgICAgaWYgKGRhdGEgPT09IFNVU1BFTlNFX0VORF9EQVRBKSB7XG4gICAgICAgIGlmIChkZXB0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBnZXROZXh0SHlkcmF0YWJsZVNpYmxpbmcobm9kZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGVwdGgtLTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChkYXRhID09PSBTVVNQRU5TRV9TVEFSVF9EQVRBIHx8IGRhdGEgPT09IFNVU1BFTlNFX0ZBTExCQUNLX1NUQVJUX0RBVEEgfHwgZGF0YSA9PT0gU1VTUEVOU0VfUEVORElOR19TVEFSVF9EQVRBKSB7XG4gICAgICAgIGRlcHRoKys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbm9kZSA9IG5vZGUubmV4dFNpYmxpbmc7XG4gIH0gLy8gVE9ETzogV2Fybiwgd2UgZGlkbid0IGZpbmQgdGhlIGVuZCBjb21tZW50IGJvdW5kYXJ5LlxuXG5cbiAgcmV0dXJuIG51bGw7XG59IC8vIFJldHVybnMgdGhlIFN1c3BlbnNlSW5zdGFuY2UgaWYgdGhpcyBub2RlIGlzIGEgZGlyZWN0IGNoaWxkIG9mIGFcbi8vIFN1c3BlbnNlSW5zdGFuY2UuIEkuZS4gaWYgaXRzIHByZXZpb3VzIHNpYmxpbmcgaXMgYSBDb21tZW50IHdpdGhcbi8vIFNVU1BFTlNFX3hfU1RBUlRfREFUQS4gT3RoZXJ3aXNlLCBudWxsLlxuXG5mdW5jdGlvbiBnZXRQYXJlbnRTdXNwZW5zZUluc3RhbmNlKHRhcmdldEluc3RhbmNlKSB7XG4gIHZhciBub2RlID0gdGFyZ2V0SW5zdGFuY2UucHJldmlvdXNTaWJsaW5nOyAvLyBTa2lwIHBhc3QgYWxsIG5vZGVzIHdpdGhpbiB0aGlzIHN1c3BlbnNlIGJvdW5kYXJ5LlxuICAvLyBUaGVyZSBtaWdodCBiZSBuZXN0ZWQgbm9kZXMgc28gd2UgbmVlZCB0byBrZWVwIHRyYWNrIG9mIGhvd1xuICAvLyBkZWVwIHdlIGFyZSBhbmQgb25seSBicmVhayBvdXQgd2hlbiB3ZSdyZSBiYWNrIG9uIHRvcC5cblxuICB2YXIgZGVwdGggPSAwO1xuXG4gIHdoaWxlIChub2RlKSB7XG4gICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSkge1xuICAgICAgdmFyIGRhdGEgPSBub2RlLmRhdGE7XG5cbiAgICAgIGlmIChkYXRhID09PSBTVVNQRU5TRV9TVEFSVF9EQVRBIHx8IGRhdGEgPT09IFNVU1BFTlNFX0ZBTExCQUNLX1NUQVJUX0RBVEEgfHwgZGF0YSA9PT0gU1VTUEVOU0VfUEVORElOR19TVEFSVF9EQVRBKSB7XG4gICAgICAgIGlmIChkZXB0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlcHRoLS07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZGF0YSA9PT0gU1VTUEVOU0VfRU5EX0RBVEEpIHtcbiAgICAgICAgZGVwdGgrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBub2RlID0gbm9kZS5wcmV2aW91c1NpYmxpbmc7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGNvbW1pdEh5ZHJhdGVkQ29udGFpbmVyKGNvbnRhaW5lcikge1xuICAvLyBSZXRyeSBpZiBhbnkgZXZlbnQgcmVwbGF5aW5nIHdhcyBibG9ja2VkIG9uIHRoaXMuXG4gIHJldHJ5SWZCbG9ja2VkT24oY29udGFpbmVyKTtcbn1cbmZ1bmN0aW9uIGNvbW1pdEh5ZHJhdGVkU3VzcGVuc2VJbnN0YW5jZShzdXNwZW5zZUluc3RhbmNlKSB7XG4gIC8vIFJldHJ5IGlmIGFueSBldmVudCByZXBsYXlpbmcgd2FzIGJsb2NrZWQgb24gdGhpcy5cbiAgcmV0cnlJZkJsb2NrZWRPbihzdXNwZW5zZUluc3RhbmNlKTtcbn1cbmZ1bmN0aW9uIGRpZE5vdE1hdGNoSHlkcmF0ZWRDb250YWluZXJUZXh0SW5zdGFuY2UocGFyZW50Q29udGFpbmVyLCB0ZXh0SW5zdGFuY2UsIHRleHQpIHtcbiAge1xuICAgIHdhcm5Gb3JVbm1hdGNoZWRUZXh0KHRleHRJbnN0YW5jZSwgdGV4dCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGRpZE5vdE1hdGNoSHlkcmF0ZWRUZXh0SW5zdGFuY2UocGFyZW50VHlwZSwgcGFyZW50UHJvcHMsIHBhcmVudEluc3RhbmNlLCB0ZXh0SW5zdGFuY2UsIHRleHQpIHtcbiAgaWYgKCBwYXJlbnRQcm9wc1tTVVBQUkVTU19IWURSQVRJT05fV0FSTklORyQxXSAhPT0gdHJ1ZSkge1xuICAgIHdhcm5Gb3JVbm1hdGNoZWRUZXh0KHRleHRJbnN0YW5jZSwgdGV4dCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGRpZE5vdEh5ZHJhdGVDb250YWluZXJJbnN0YW5jZShwYXJlbnRDb250YWluZXIsIGluc3RhbmNlKSB7XG4gIHtcbiAgICBpZiAoaW5zdGFuY2Uubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSkge1xuICAgICAgd2FybkZvckRlbGV0ZWRIeWRyYXRhYmxlRWxlbWVudChwYXJlbnRDb250YWluZXIsIGluc3RhbmNlKTtcbiAgICB9IGVsc2UgaWYgKGluc3RhbmNlLm5vZGVUeXBlID09PSBDT01NRU5UX05PREUpIDsgZWxzZSB7XG4gICAgICB3YXJuRm9yRGVsZXRlZEh5ZHJhdGFibGVUZXh0KHBhcmVudENvbnRhaW5lciwgaW5zdGFuY2UpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZGlkTm90SHlkcmF0ZUluc3RhbmNlKHBhcmVudFR5cGUsIHBhcmVudFByb3BzLCBwYXJlbnRJbnN0YW5jZSwgaW5zdGFuY2UpIHtcbiAgaWYgKCBwYXJlbnRQcm9wc1tTVVBQUkVTU19IWURSQVRJT05fV0FSTklORyQxXSAhPT0gdHJ1ZSkge1xuICAgIGlmIChpbnN0YW5jZS5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFKSB7XG4gICAgICB3YXJuRm9yRGVsZXRlZEh5ZHJhdGFibGVFbGVtZW50KHBhcmVudEluc3RhbmNlLCBpbnN0YW5jZSk7XG4gICAgfSBlbHNlIGlmIChpbnN0YW5jZS5ub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFKSA7IGVsc2Uge1xuICAgICAgd2FybkZvckRlbGV0ZWRIeWRyYXRhYmxlVGV4dChwYXJlbnRJbnN0YW5jZSwgaW5zdGFuY2UpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZGlkTm90RmluZEh5ZHJhdGFibGVDb250YWluZXJJbnN0YW5jZShwYXJlbnRDb250YWluZXIsIHR5cGUsIHByb3BzKSB7XG4gIHtcbiAgICB3YXJuRm9ySW5zZXJ0ZWRIeWRyYXRlZEVsZW1lbnQocGFyZW50Q29udGFpbmVyLCB0eXBlKTtcbiAgfVxufVxuZnVuY3Rpb24gZGlkTm90RmluZEh5ZHJhdGFibGVDb250YWluZXJUZXh0SW5zdGFuY2UocGFyZW50Q29udGFpbmVyLCB0ZXh0KSB7XG4gIHtcbiAgICB3YXJuRm9ySW5zZXJ0ZWRIeWRyYXRlZFRleHQocGFyZW50Q29udGFpbmVyLCB0ZXh0KTtcbiAgfVxufVxuZnVuY3Rpb24gZGlkTm90RmluZEh5ZHJhdGFibGVJbnN0YW5jZShwYXJlbnRUeXBlLCBwYXJlbnRQcm9wcywgcGFyZW50SW5zdGFuY2UsIHR5cGUsIHByb3BzKSB7XG4gIGlmICggcGFyZW50UHJvcHNbU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkckMV0gIT09IHRydWUpIHtcbiAgICB3YXJuRm9ySW5zZXJ0ZWRIeWRyYXRlZEVsZW1lbnQocGFyZW50SW5zdGFuY2UsIHR5cGUpO1xuICB9XG59XG5mdW5jdGlvbiBkaWROb3RGaW5kSHlkcmF0YWJsZVRleHRJbnN0YW5jZShwYXJlbnRUeXBlLCBwYXJlbnRQcm9wcywgcGFyZW50SW5zdGFuY2UsIHRleHQpIHtcbiAgaWYgKCBwYXJlbnRQcm9wc1tTVVBQUkVTU19IWURSQVRJT05fV0FSTklORyQxXSAhPT0gdHJ1ZSkge1xuICAgIHdhcm5Gb3JJbnNlcnRlZEh5ZHJhdGVkVGV4dChwYXJlbnRJbnN0YW5jZSwgdGV4dCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGRpZE5vdEZpbmRIeWRyYXRhYmxlU3VzcGVuc2VJbnN0YW5jZShwYXJlbnRUeXBlLCBwYXJlbnRQcm9wcywgcGFyZW50SW5zdGFuY2UpIHtcbiAgaWYgKCBwYXJlbnRQcm9wc1tTVVBQUkVTU19IWURSQVRJT05fV0FSTklORyQxXSAhPT0gdHJ1ZSkgO1xufVxudmFyIGNsaWVudElkID0gMDtcbmZ1bmN0aW9uIG1ha2VDbGllbnRJZEluREVWKHdhcm5PbkFjY2Vzc0luREVWKSB7XG4gIHZhciBpZCA9ICdyOicgKyAoY2xpZW50SWQrKykudG9TdHJpbmcoMzYpO1xuICByZXR1cm4ge1xuICAgIHRvU3RyaW5nOiBmdW5jdGlvbiAoKSB7XG4gICAgICB3YXJuT25BY2Nlc3NJbkRFVigpO1xuICAgICAgcmV0dXJuIGlkO1xuICAgIH0sXG4gICAgdmFsdWVPZjogZnVuY3Rpb24gKCkge1xuICAgICAgd2Fybk9uQWNjZXNzSW5ERVYoKTtcbiAgICAgIHJldHVybiBpZDtcbiAgICB9XG4gIH07XG59XG5mdW5jdGlvbiBpc09wYXF1ZUh5ZHJhdGluZ09iamVjdCh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZS4kJHR5cGVvZiA9PT0gUkVBQ1RfT1BBUVVFX0lEX1RZUEU7XG59XG5mdW5jdGlvbiBtYWtlT3BhcXVlSHlkcmF0aW5nT2JqZWN0KGF0dGVtcHRUb1JlYWRWYWx1ZSkge1xuICByZXR1cm4ge1xuICAgICQkdHlwZW9mOiBSRUFDVF9PUEFRVUVfSURfVFlQRSxcbiAgICB0b1N0cmluZzogYXR0ZW1wdFRvUmVhZFZhbHVlLFxuICAgIHZhbHVlT2Y6IGF0dGVtcHRUb1JlYWRWYWx1ZVxuICB9O1xufVxuZnVuY3Rpb24gcHJlcGFyZVBvcnRhbE1vdW50KHBvcnRhbEluc3RhbmNlKSB7XG4gIHtcbiAgICBsaXN0ZW5Ub0FsbFN1cHBvcnRlZEV2ZW50cyhwb3J0YWxJbnN0YW5jZSk7XG4gIH1cbn1cblxudmFyIHJhbmRvbUtleSA9IE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIpO1xudmFyIGludGVybmFsSW5zdGFuY2VLZXkgPSAnX19yZWFjdEZpYmVyJCcgKyByYW5kb21LZXk7XG52YXIgaW50ZXJuYWxQcm9wc0tleSA9ICdfX3JlYWN0UHJvcHMkJyArIHJhbmRvbUtleTtcbnZhciBpbnRlcm5hbENvbnRhaW5lckluc3RhbmNlS2V5ID0gJ19fcmVhY3RDb250YWluZXIkJyArIHJhbmRvbUtleTtcbnZhciBpbnRlcm5hbEV2ZW50SGFuZGxlcnNLZXkgPSAnX19yZWFjdEV2ZW50cyQnICsgcmFuZG9tS2V5O1xuZnVuY3Rpb24gcHJlY2FjaGVGaWJlck5vZGUoaG9zdEluc3QsIG5vZGUpIHtcbiAgbm9kZVtpbnRlcm5hbEluc3RhbmNlS2V5XSA9IGhvc3RJbnN0O1xufVxuZnVuY3Rpb24gbWFya0NvbnRhaW5lckFzUm9vdChob3N0Um9vdCwgbm9kZSkge1xuICBub2RlW2ludGVybmFsQ29udGFpbmVySW5zdGFuY2VLZXldID0gaG9zdFJvb3Q7XG59XG5mdW5jdGlvbiB1bm1hcmtDb250YWluZXJBc1Jvb3Qobm9kZSkge1xuICBub2RlW2ludGVybmFsQ29udGFpbmVySW5zdGFuY2VLZXldID0gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzQ29udGFpbmVyTWFya2VkQXNSb290KG5vZGUpIHtcbiAgcmV0dXJuICEhbm9kZVtpbnRlcm5hbENvbnRhaW5lckluc3RhbmNlS2V5XTtcbn0gLy8gR2l2ZW4gYSBET00gbm9kZSwgcmV0dXJuIHRoZSBjbG9zZXN0IEhvc3RDb21wb25lbnQgb3IgSG9zdFRleHQgZmliZXIgYW5jZXN0b3IuXG4vLyBJZiB0aGUgdGFyZ2V0IG5vZGUgaXMgcGFydCBvZiBhIGh5ZHJhdGVkIG9yIG5vdCB5ZXQgcmVuZGVyZWQgc3VidHJlZSwgdGhlblxuLy8gdGhpcyBtYXkgYWxzbyByZXR1cm4gYSBTdXNwZW5zZUNvbXBvbmVudCBvciBIb3N0Um9vdCB0byBpbmRpY2F0ZSB0aGF0LlxuLy8gQ29uY2VwdHVhbGx5IHRoZSBIb3N0Um9vdCBmaWJlciBpcyBhIGNoaWxkIG9mIHRoZSBDb250YWluZXIgbm9kZS4gU28gaWYgeW91XG4vLyBwYXNzIHRoZSBDb250YWluZXIgbm9kZSBhcyB0aGUgdGFyZ2V0Tm9kZSwgeW91IHdpbGwgbm90IGFjdHVhbGx5IGdldCB0aGVcbi8vIEhvc3RSb290IGJhY2suIFRvIGdldCB0byB0aGUgSG9zdFJvb3QsIHlvdSBuZWVkIHRvIHBhc3MgYSBjaGlsZCBvZiBpdC5cbi8vIFRoZSBzYW1lIHRoaW5nIGFwcGxpZXMgdG8gU3VzcGVuc2UgYm91bmRhcmllcy5cblxuZnVuY3Rpb24gZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUodGFyZ2V0Tm9kZSkge1xuICB2YXIgdGFyZ2V0SW5zdCA9IHRhcmdldE5vZGVbaW50ZXJuYWxJbnN0YW5jZUtleV07XG5cbiAgaWYgKHRhcmdldEluc3QpIHtcbiAgICAvLyBEb24ndCByZXR1cm4gSG9zdFJvb3Qgb3IgU3VzcGVuc2VDb21wb25lbnQgaGVyZS5cbiAgICByZXR1cm4gdGFyZ2V0SW5zdDtcbiAgfSAvLyBJZiB0aGUgZGlyZWN0IGV2ZW50IHRhcmdldCBpc24ndCBhIFJlYWN0IG93bmVkIERPTSBub2RlLCB3ZSBuZWVkIHRvIGxvb2tcbiAgLy8gdG8gc2VlIGlmIG9uZSBvZiBpdHMgcGFyZW50cyBpcyBhIFJlYWN0IG93bmVkIERPTSBub2RlLlxuXG5cbiAgdmFyIHBhcmVudE5vZGUgPSB0YXJnZXROb2RlLnBhcmVudE5vZGU7XG5cbiAgd2hpbGUgKHBhcmVudE5vZGUpIHtcbiAgICAvLyBXZSdsbCBjaGVjayBpZiB0aGlzIGlzIGEgY29udGFpbmVyIHJvb3QgdGhhdCBjb3VsZCBpbmNsdWRlXG4gICAgLy8gUmVhY3Qgbm9kZXMgaW4gdGhlIGZ1dHVyZS4gV2UgbmVlZCB0byBjaGVjayB0aGlzIGZpcnN0IGJlY2F1c2VcbiAgICAvLyBpZiB3ZSdyZSBhIGNoaWxkIG9mIGEgZGVoeWRyYXRlZCBjb250YWluZXIsIHdlIG5lZWQgdG8gZmlyc3RcbiAgICAvLyBmaW5kIHRoYXQgaW5uZXIgY29udGFpbmVyIGJlZm9yZSBtb3Zpbmcgb24gdG8gZmluZGluZyB0aGUgcGFyZW50XG4gICAgLy8gaW5zdGFuY2UuIE5vdGUgdGhhdCB3ZSBkb24ndCBjaGVjayB0aGlzIGZpZWxkIG9uICB0aGUgdGFyZ2V0Tm9kZVxuICAgIC8vIGl0c2VsZiBiZWNhdXNlIHRoZSBmaWJlcnMgYXJlIGNvbmNlcHR1YWxseSBiZXR3ZWVuIHRoZSBjb250YWluZXJcbiAgICAvLyBub2RlIGFuZCB0aGUgZmlyc3QgY2hpbGQuIEl0IGlzbid0IHN1cnJvdW5kaW5nIHRoZSBjb250YWluZXIgbm9kZS5cbiAgICAvLyBJZiBpdCdzIG5vdCBhIGNvbnRhaW5lciwgd2UgY2hlY2sgaWYgaXQncyBhbiBpbnN0YW5jZS5cbiAgICB0YXJnZXRJbnN0ID0gcGFyZW50Tm9kZVtpbnRlcm5hbENvbnRhaW5lckluc3RhbmNlS2V5XSB8fCBwYXJlbnROb2RlW2ludGVybmFsSW5zdGFuY2VLZXldO1xuXG4gICAgaWYgKHRhcmdldEluc3QpIHtcbiAgICAgIC8vIFNpbmNlIHRoaXMgd2Fzbid0IHRoZSBkaXJlY3QgdGFyZ2V0IG9mIHRoZSBldmVudCwgd2UgbWlnaHQgaGF2ZVxuICAgICAgLy8gc3RlcHBlZCBwYXN0IGRlaHlkcmF0ZWQgRE9NIG5vZGVzIHRvIGdldCBoZXJlLiBIb3dldmVyIHRoZXkgY291bGRcbiAgICAgIC8vIGFsc28gaGF2ZSBiZWVuIG5vbi1SZWFjdCBub2Rlcy4gV2UgbmVlZCB0byBhbnN3ZXIgd2hpY2ggb25lLlxuICAgICAgLy8gSWYgd2UgdGhlIGluc3RhbmNlIGRvZXNuJ3QgaGF2ZSBhbnkgY2hpbGRyZW4sIHRoZW4gdGhlcmUgY2FuJ3QgYmVcbiAgICAgIC8vIGEgbmVzdGVkIHN1c3BlbnNlIGJvdW5kYXJ5IHdpdGhpbiBpdC4gU28gd2UgY2FuIHVzZSB0aGlzIGFzIGEgZmFzdFxuICAgICAgLy8gYmFpbG91dC4gTW9zdCBvZiB0aGUgdGltZSwgd2hlbiBwZW9wbGUgYWRkIG5vbi1SZWFjdCBjaGlsZHJlbiB0b1xuICAgICAgLy8gdGhlIHRyZWUsIGl0IGlzIHVzaW5nIGEgcmVmIHRvIGEgY2hpbGQtbGVzcyBET00gbm9kZS5cbiAgICAgIC8vIE5vcm1hbGx5IHdlJ2Qgb25seSBuZWVkIHRvIGNoZWNrIG9uZSBvZiB0aGUgZmliZXJzIGJlY2F1c2UgaWYgaXRcbiAgICAgIC8vIGhhcyBldmVyIGdvbmUgZnJvbSBoYXZpbmcgY2hpbGRyZW4gdG8gZGVsZXRpbmcgdGhlbSBvciB2aWNlIHZlcnNhXG4gICAgICAvLyBpdCB3b3VsZCBoYXZlIGRlbGV0ZWQgdGhlIGRlaHlkcmF0ZWQgYm91bmRhcnkgbmVzdGVkIGluc2lkZSBhbHJlYWR5LlxuICAgICAgLy8gSG93ZXZlciwgc2luY2UgdGhlIEhvc3RSb290IHN0YXJ0cyBvdXQgd2l0aCBhbiBhbHRlcm5hdGUgaXQgbWlnaHRcbiAgICAgIC8vIGhhdmUgb25lIG9uIHRoZSBhbHRlcm5hdGUgc28gd2UgbmVlZCB0byBjaGVjayBpbiBjYXNlIHRoaXMgd2FzIGFcbiAgICAgIC8vIHJvb3QuXG4gICAgICB2YXIgYWx0ZXJuYXRlID0gdGFyZ2V0SW5zdC5hbHRlcm5hdGU7XG5cbiAgICAgIGlmICh0YXJnZXRJbnN0LmNoaWxkICE9PSBudWxsIHx8IGFsdGVybmF0ZSAhPT0gbnVsbCAmJiBhbHRlcm5hdGUuY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgLy8gTmV4dCB3ZSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlIG5vZGUgdGhhdCBza2lwcGVkIHBhc3QgaXNcbiAgICAgICAgLy8gbmVzdGVkIHdpdGhpbiBhIGRlaHlkcmF0ZWQgYm91bmRhcnkgYW5kIGlmIHNvLCB3aGljaCBvbmUuXG4gICAgICAgIHZhciBzdXNwZW5zZUluc3RhbmNlID0gZ2V0UGFyZW50U3VzcGVuc2VJbnN0YW5jZSh0YXJnZXROb2RlKTtcblxuICAgICAgICB3aGlsZSAoc3VzcGVuc2VJbnN0YW5jZSAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIFdlIGZvdW5kIGEgc3VzcGVuc2UgaW5zdGFuY2UuIFRoYXQgbWVhbnMgdGhhdCB3ZSBoYXZlbid0XG4gICAgICAgICAgLy8gaHlkcmF0ZWQgaXQgeWV0LiBFdmVuIHRob3VnaCB3ZSBsZWF2ZSB0aGUgY29tbWVudHMgaW4gdGhlXG4gICAgICAgICAgLy8gRE9NIGFmdGVyIGh5ZHJhdGluZywgYW5kIHRoZXJlIGFyZSBib3VuZGFyaWVzIGluIHRoZSBET01cbiAgICAgICAgICAvLyB0aGF0IGNvdWxkIGFscmVhZHkgYmUgaHlkcmF0ZWQsIHdlIHdvdWxkbid0IGhhdmUgZm91bmQgdGhlbVxuICAgICAgICAgIC8vIHRocm91Z2ggdGhpcyBwYXNzIHNpbmNlIGlmIHRoZSB0YXJnZXQgaXMgaHlkcmF0ZWQgaXQgd291bGRcbiAgICAgICAgICAvLyBoYXZlIGhhZCBhbiBpbnRlcm5hbEluc3RhbmNlS2V5IG9uIGl0LlxuICAgICAgICAgIC8vIExldCdzIGdldCB0aGUgZmliZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBTdXNwZW5zZUNvbXBvbmVudFxuICAgICAgICAgIC8vIGFzIHRoZSBkZWVwZXN0IGluc3RhbmNlLlxuICAgICAgICAgIHZhciB0YXJnZXRTdXNwZW5zZUluc3QgPSBzdXNwZW5zZUluc3RhbmNlW2ludGVybmFsSW5zdGFuY2VLZXldO1xuXG4gICAgICAgICAgaWYgKHRhcmdldFN1c3BlbnNlSW5zdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRhcmdldFN1c3BlbnNlSW5zdDtcbiAgICAgICAgICB9IC8vIElmIHdlIGRvbid0IGZpbmQgYSBGaWJlciBvbiB0aGUgY29tbWVudCwgaXQgbWlnaHQgYmUgYmVjYXVzZVxuICAgICAgICAgIC8vIHdlIGhhdmVuJ3QgZ290dGVuIHRvIGh5ZHJhdGUgaXQgeWV0LiBUaGVyZSBtaWdodCBzdGlsbCBiZSBhXG4gICAgICAgICAgLy8gcGFyZW50IGJvdW5kYXJ5IHRoYXQgaGFzbid0IGFib3ZlIHRoaXMgb25lIHNvIHdlIG5lZWQgdG8gZmluZFxuICAgICAgICAgIC8vIHRoZSBvdXRlciBtb3N0IHRoYXQgaXMga25vd24uXG5cblxuICAgICAgICAgIHN1c3BlbnNlSW5zdGFuY2UgPSBnZXRQYXJlbnRTdXNwZW5zZUluc3RhbmNlKHN1c3BlbnNlSW5zdGFuY2UpOyAvLyBJZiB3ZSBkb24ndCBmaW5kIG9uZSwgdGhlbiB0aGF0IHNob3VsZCBtZWFuIHRoYXQgdGhlIHBhcmVudFxuICAgICAgICAgIC8vIGhvc3QgY29tcG9uZW50IGFsc28gaGFzbid0IGh5ZHJhdGVkIHlldC4gV2UgY2FuIHJldHVybiBpdFxuICAgICAgICAgIC8vIGJlbG93IHNpbmNlIGl0IHdpbGwgYmFpbCBvdXQgb24gdGhlIGlzTW91bnRlZCBjaGVjayBsYXRlci5cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGFyZ2V0SW5zdDtcbiAgICB9XG5cbiAgICB0YXJnZXROb2RlID0gcGFyZW50Tm9kZTtcbiAgICBwYXJlbnROb2RlID0gdGFyZ2V0Tm9kZS5wYXJlbnROb2RlO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4vKipcbiAqIEdpdmVuIGEgRE9NIG5vZGUsIHJldHVybiB0aGUgUmVhY3RET01Db21wb25lbnQgb3IgUmVhY3RET01UZXh0Q29tcG9uZW50XG4gKiBpbnN0YW5jZSwgb3IgbnVsbCBpZiB0aGUgbm9kZSB3YXMgbm90IHJlbmRlcmVkIGJ5IHRoaXMgUmVhY3QuXG4gKi9cblxuZnVuY3Rpb24gZ2V0SW5zdGFuY2VGcm9tTm9kZShub2RlKSB7XG4gIHZhciBpbnN0ID0gbm9kZVtpbnRlcm5hbEluc3RhbmNlS2V5XSB8fCBub2RlW2ludGVybmFsQ29udGFpbmVySW5zdGFuY2VLZXldO1xuXG4gIGlmIChpbnN0KSB7XG4gICAgaWYgKGluc3QudGFnID09PSBIb3N0Q29tcG9uZW50IHx8IGluc3QudGFnID09PSBIb3N0VGV4dCB8fCBpbnN0LnRhZyA9PT0gU3VzcGVuc2VDb21wb25lbnQgfHwgaW5zdC50YWcgPT09IEhvc3RSb290KSB7XG4gICAgICByZXR1cm4gaW5zdDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4vKipcbiAqIEdpdmVuIGEgUmVhY3RET01Db21wb25lbnQgb3IgUmVhY3RET01UZXh0Q29tcG9uZW50LCByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmdcbiAqIERPTSBub2RlLlxuICovXG5cbmZ1bmN0aW9uIGdldE5vZGVGcm9tSW5zdGFuY2UoaW5zdCkge1xuICBpZiAoaW5zdC50YWcgPT09IEhvc3RDb21wb25lbnQgfHwgaW5zdC50YWcgPT09IEhvc3RUZXh0KSB7XG4gICAgLy8gSW4gRmliZXIgdGhpcywgaXMganVzdCB0aGUgc3RhdGUgbm9kZSByaWdodCBub3cuIFdlIGFzc3VtZSBpdCB3aWxsIGJlXG4gICAgLy8gYSBob3N0IGNvbXBvbmVudCBvciBob3N0IHRleHQuXG4gICAgcmV0dXJuIGluc3Quc3RhdGVOb2RlO1xuICB9IC8vIFdpdGhvdXQgdGhpcyBmaXJzdCBpbnZhcmlhbnQsIHBhc3NpbmcgYSBub24tRE9NLWNvbXBvbmVudCB0cmlnZ2VycyB0aGUgbmV4dFxuICAvLyBpbnZhcmlhbnQgZm9yIGEgbWlzc2luZyBwYXJlbnQsIHdoaWNoIGlzIHN1cGVyIGNvbmZ1c2luZy5cblxuXG4gIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJnZXROb2RlRnJvbUluc3RhbmNlOiBJbnZhbGlkIGFyZ3VtZW50LlwiICk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBnZXRGaWJlckN1cnJlbnRQcm9wc0Zyb21Ob2RlKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGVbaW50ZXJuYWxQcm9wc0tleV0gfHwgbnVsbDtcbn1cbmZ1bmN0aW9uIHVwZGF0ZUZpYmVyUHJvcHMobm9kZSwgcHJvcHMpIHtcbiAgbm9kZVtpbnRlcm5hbFByb3BzS2V5XSA9IHByb3BzO1xufVxuZnVuY3Rpb24gZ2V0RXZlbnRMaXN0ZW5lclNldChub2RlKSB7XG4gIHZhciBlbGVtZW50TGlzdGVuZXJTZXQgPSBub2RlW2ludGVybmFsRXZlbnRIYW5kbGVyc0tleV07XG5cbiAgaWYgKGVsZW1lbnRMaXN0ZW5lclNldCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZWxlbWVudExpc3RlbmVyU2V0ID0gbm9kZVtpbnRlcm5hbEV2ZW50SGFuZGxlcnNLZXldID0gbmV3IFNldCgpO1xuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnRMaXN0ZW5lclNldDtcbn1cblxudmFyIGxvZ2dlZFR5cGVGYWlsdXJlcyA9IHt9O1xudmFyIFJlYWN0RGVidWdDdXJyZW50RnJhbWUkMSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0RGVidWdDdXJyZW50RnJhbWU7XG5cbmZ1bmN0aW9uIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGVsZW1lbnQpIHtcbiAge1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICB2YXIgb3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgICAgIHZhciBzdGFjayA9IGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVihlbGVtZW50LnR5cGUsIGVsZW1lbnQuX3NvdXJjZSwgb3duZXIgPyBvd25lci50eXBlIDogbnVsbCk7XG4gICAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lJDEuc2V0RXh0cmFTdGFja0ZyYW1lKHN0YWNrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSQxLnNldEV4dHJhU3RhY2tGcmFtZShudWxsKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tQcm9wVHlwZXModHlwZVNwZWNzLCB2YWx1ZXMsIGxvY2F0aW9uLCBjb21wb25lbnROYW1lLCBlbGVtZW50KSB7XG4gIHtcbiAgICAvLyAkRmxvd0ZpeE1lIFRoaXMgaXMgb2theSBidXQgRmxvdyBkb2Vzbid0IGtub3cgaXQuXG4gICAgdmFyIGhhcyA9IEZ1bmN0aW9uLmNhbGwuYmluZChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcblxuICAgIGZvciAodmFyIHR5cGVTcGVjTmFtZSBpbiB0eXBlU3BlY3MpIHtcbiAgICAgIGlmIChoYXModHlwZVNwZWNzLCB0eXBlU3BlY05hbWUpKSB7XG4gICAgICAgIHZhciBlcnJvciQxID0gdm9pZCAwOyAvLyBQcm9wIHR5cGUgdmFsaWRhdGlvbiBtYXkgdGhyb3cuIEluIGNhc2UgdGhleSBkbywgd2UgZG9uJ3Qgd2FudCB0b1xuICAgICAgICAvLyBmYWlsIHRoZSByZW5kZXIgcGhhc2Ugd2hlcmUgaXQgZGlkbid0IGZhaWwgYmVmb3JlLiBTbyB3ZSBsb2cgaXQuXG4gICAgICAgIC8vIEFmdGVyIHRoZXNlIGhhdmUgYmVlbiBjbGVhbmVkIHVwLCB3ZSdsbCBsZXQgdGhlbSB0aHJvdy5cblxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIFRoaXMgaXMgaW50ZW50aW9uYWxseSBhbiBpbnZhcmlhbnQgdGhhdCBnZXRzIGNhdWdodC4gSXQncyB0aGUgc2FtZVxuICAgICAgICAgIC8vIGJlaGF2aW9yIGFzIHdpdGhvdXQgdGhpcyBzdGF0ZW1lbnQgZXhjZXB0IHdpdGggYSBiZXR0ZXIgbWVzc2FnZS5cbiAgICAgICAgICBpZiAodHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB2YXIgZXJyID0gRXJyb3IoKGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJykgKyAnOiAnICsgbG9jYXRpb24gKyAnIHR5cGUgYCcgKyB0eXBlU3BlY05hbWUgKyAnYCBpcyBpbnZhbGlkOyAnICsgJ2l0IG11c3QgYmUgYSBmdW5jdGlvbiwgdXN1YWxseSBmcm9tIHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZSwgYnV0IHJlY2VpdmVkIGAnICsgdHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdICsgJ2AuJyArICdUaGlzIG9mdGVuIGhhcHBlbnMgYmVjYXVzZSBvZiB0eXBvcyBzdWNoIGFzIGBQcm9wVHlwZXMuZnVuY3Rpb25gIGluc3RlYWQgb2YgYFByb3BUeXBlcy5mdW5jYC4nKTtcbiAgICAgICAgICAgIGVyci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGVycm9yJDEgPSB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSh2YWx1ZXMsIHR5cGVTcGVjTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIG51bGwsICdTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRCcpO1xuICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgIGVycm9yJDEgPSBleDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlcnJvciQxICYmICEoZXJyb3IkMSBpbnN0YW5jZW9mIEVycm9yKSkge1xuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGVsZW1lbnQpO1xuXG4gICAgICAgICAgZXJyb3IoJyVzOiB0eXBlIHNwZWNpZmljYXRpb24gb2YgJXMnICsgJyBgJXNgIGlzIGludmFsaWQ7IHRoZSB0eXBlIGNoZWNrZXIgJyArICdmdW5jdGlvbiBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gYEVycm9yYCBidXQgcmV0dXJuZWQgYSAlcy4gJyArICdZb3UgbWF5IGhhdmUgZm9yZ290dGVuIHRvIHBhc3MgYW4gYXJndW1lbnQgdG8gdGhlIHR5cGUgY2hlY2tlciAnICsgJ2NyZWF0b3IgKGFycmF5T2YsIGluc3RhbmNlT2YsIG9iamVjdE9mLCBvbmVPZiwgb25lT2ZUeXBlLCBhbmQgJyArICdzaGFwZSBhbGwgcmVxdWlyZSBhbiBhcmd1bWVudCkuJywgY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnLCBsb2NhdGlvbiwgdHlwZVNwZWNOYW1lLCB0eXBlb2YgZXJyb3IkMSk7XG5cbiAgICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlcnJvciQxIGluc3RhbmNlb2YgRXJyb3IgJiYgIShlcnJvciQxLm1lc3NhZ2UgaW4gbG9nZ2VkVHlwZUZhaWx1cmVzKSkge1xuICAgICAgICAgIC8vIE9ubHkgbW9uaXRvciB0aGlzIGZhaWx1cmUgb25jZSBiZWNhdXNlIHRoZXJlIHRlbmRzIHRvIGJlIGEgbG90IG9mIHRoZVxuICAgICAgICAgIC8vIHNhbWUgZXJyb3IuXG4gICAgICAgICAgbG9nZ2VkVHlwZUZhaWx1cmVzW2Vycm9yJDEubWVzc2FnZV0gPSB0cnVlO1xuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGVsZW1lbnQpO1xuXG4gICAgICAgICAgZXJyb3IoJ0ZhaWxlZCAlcyB0eXBlOiAlcycsIGxvY2F0aW9uLCBlcnJvciQxLm1lc3NhZ2UpO1xuXG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQobnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIHZhbHVlU3RhY2sgPSBbXTtcbnZhciBmaWJlclN0YWNrO1xuXG57XG4gIGZpYmVyU3RhY2sgPSBbXTtcbn1cblxudmFyIGluZGV4ID0gLTE7XG5cbmZ1bmN0aW9uIGNyZWF0ZUN1cnNvcihkZWZhdWx0VmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBjdXJyZW50OiBkZWZhdWx0VmFsdWVcbiAgfTtcbn1cblxuZnVuY3Rpb24gcG9wKGN1cnNvciwgZmliZXIpIHtcbiAgaWYgKGluZGV4IDwgMCkge1xuICAgIHtcbiAgICAgIGVycm9yKCdVbmV4cGVjdGVkIHBvcC4nKTtcbiAgICB9XG5cbiAgICByZXR1cm47XG4gIH1cblxuICB7XG4gICAgaWYgKGZpYmVyICE9PSBmaWJlclN0YWNrW2luZGV4XSkge1xuICAgICAgZXJyb3IoJ1VuZXhwZWN0ZWQgRmliZXIgcG9wcGVkLicpO1xuICAgIH1cbiAgfVxuXG4gIGN1cnNvci5jdXJyZW50ID0gdmFsdWVTdGFja1tpbmRleF07XG4gIHZhbHVlU3RhY2tbaW5kZXhdID0gbnVsbDtcblxuICB7XG4gICAgZmliZXJTdGFja1tpbmRleF0gPSBudWxsO1xuICB9XG5cbiAgaW5kZXgtLTtcbn1cblxuZnVuY3Rpb24gcHVzaChjdXJzb3IsIHZhbHVlLCBmaWJlcikge1xuICBpbmRleCsrO1xuICB2YWx1ZVN0YWNrW2luZGV4XSA9IGN1cnNvci5jdXJyZW50O1xuXG4gIHtcbiAgICBmaWJlclN0YWNrW2luZGV4XSA9IGZpYmVyO1xuICB9XG5cbiAgY3Vyc29yLmN1cnJlbnQgPSB2YWx1ZTtcbn1cblxudmFyIHdhcm5lZEFib3V0TWlzc2luZ0dldENoaWxkQ29udGV4dDtcblxue1xuICB3YXJuZWRBYm91dE1pc3NpbmdHZXRDaGlsZENvbnRleHQgPSB7fTtcbn1cblxudmFyIGVtcHR5Q29udGV4dE9iamVjdCA9IHt9O1xuXG57XG4gIE9iamVjdC5mcmVlemUoZW1wdHlDb250ZXh0T2JqZWN0KTtcbn0gLy8gQSBjdXJzb3IgdG8gdGhlIGN1cnJlbnQgbWVyZ2VkIGNvbnRleHQgb2JqZWN0IG9uIHRoZSBzdGFjay5cblxuXG52YXIgY29udGV4dFN0YWNrQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKGVtcHR5Q29udGV4dE9iamVjdCk7IC8vIEEgY3Vyc29yIHRvIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGNvbnRleHQgaGFzIGNoYW5nZWQuXG5cbnZhciBkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKGZhbHNlKTsgLy8gS2VlcCB0cmFjayBvZiB0aGUgcHJldmlvdXMgY29udGV4dCBvYmplY3QgdGhhdCB3YXMgb24gdGhlIHN0YWNrLlxuLy8gV2UgdXNlIHRoaXMgdG8gZ2V0IGFjY2VzcyB0byB0aGUgcGFyZW50IGNvbnRleHQgYWZ0ZXIgd2UgaGF2ZSBhbHJlYWR5XG4vLyBwdXNoZWQgdGhlIG5leHQgY29udGV4dCBwcm92aWRlciwgYW5kIG5vdyBuZWVkIHRvIG1lcmdlIHRoZWlyIGNvbnRleHRzLlxuXG52YXIgcHJldmlvdXNDb250ZXh0ID0gZW1wdHlDb250ZXh0T2JqZWN0O1xuXG5mdW5jdGlvbiBnZXRVbm1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgZGlkUHVzaE93bkNvbnRleHRJZlByb3ZpZGVyKSB7XG4gIHtcbiAgICBpZiAoZGlkUHVzaE93bkNvbnRleHRJZlByb3ZpZGVyICYmIGlzQ29udGV4dFByb3ZpZGVyKENvbXBvbmVudCkpIHtcbiAgICAgIC8vIElmIHRoZSBmaWJlciBpcyBhIGNvbnRleHQgcHJvdmlkZXIgaXRzZWxmLCB3aGVuIHdlIHJlYWQgaXRzIGNvbnRleHRcbiAgICAgIC8vIHdlIG1heSBoYXZlIGFscmVhZHkgcHVzaGVkIGl0cyBvd24gY2hpbGQgY29udGV4dCBvbiB0aGUgc3RhY2suIEEgY29udGV4dFxuICAgICAgLy8gcHJvdmlkZXIgc2hvdWxkIG5vdCBcInNlZVwiIGl0cyBvd24gY2hpbGQgY29udGV4dC4gVGhlcmVmb3JlIHdlIHJlYWQgdGhlXG4gICAgICAvLyBwcmV2aW91cyAocGFyZW50KSBjb250ZXh0IGluc3RlYWQgZm9yIGEgY29udGV4dCBwcm92aWRlci5cbiAgICAgIHJldHVybiBwcmV2aW91c0NvbnRleHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRleHRTdGFja0N1cnNvci5jdXJyZW50O1xuICB9XG59XG5cbmZ1bmN0aW9uIGNhY2hlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgdW5tYXNrZWRDb250ZXh0LCBtYXNrZWRDb250ZXh0KSB7XG4gIHtcbiAgICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gICAgaW5zdGFuY2UuX19yZWFjdEludGVybmFsTWVtb2l6ZWRVbm1hc2tlZENoaWxkQ29udGV4dCA9IHVubWFza2VkQ29udGV4dDtcbiAgICBpbnN0YW5jZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1hc2tlZENoaWxkQ29udGV4dCA9IG1hc2tlZENvbnRleHQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0TWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgdW5tYXNrZWRDb250ZXh0KSB7XG4gIHtcbiAgICB2YXIgdHlwZSA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG4gICAgdmFyIGNvbnRleHRUeXBlcyA9IHR5cGUuY29udGV4dFR5cGVzO1xuXG4gICAgaWYgKCFjb250ZXh0VHlwZXMpIHtcbiAgICAgIHJldHVybiBlbXB0eUNvbnRleHRPYmplY3Q7XG4gICAgfSAvLyBBdm9pZCByZWNyZWF0aW5nIG1hc2tlZCBjb250ZXh0IHVubGVzcyB1bm1hc2tlZCBjb250ZXh0IGhhcyBjaGFuZ2VkLlxuICAgIC8vIEZhaWxpbmcgdG8gZG8gdGhpcyB3aWxsIHJlc3VsdCBpbiB1bm5lY2Vzc2FyeSBjYWxscyB0byBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzLlxuICAgIC8vIFRoaXMgbWF5IHRyaWdnZXIgaW5maW5pdGUgbG9vcHMgaWYgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyBjYWxscyBzZXRTdGF0ZS5cblxuXG4gICAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuXG4gICAgaWYgKGluc3RhbmNlICYmIGluc3RhbmNlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkVW5tYXNrZWRDaGlsZENvbnRleHQgPT09IHVubWFza2VkQ29udGV4dCkge1xuICAgICAgcmV0dXJuIGluc3RhbmNlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWFza2VkQ2hpbGRDb250ZXh0O1xuICAgIH1cblxuICAgIHZhciBjb250ZXh0ID0ge307XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gY29udGV4dFR5cGVzKSB7XG4gICAgICBjb250ZXh0W2tleV0gPSB1bm1hc2tlZENvbnRleHRba2V5XTtcbiAgICB9XG5cbiAgICB7XG4gICAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWUodHlwZSkgfHwgJ1Vua25vd24nO1xuICAgICAgY2hlY2tQcm9wVHlwZXMoY29udGV4dFR5cGVzLCBjb250ZXh0LCAnY29udGV4dCcsIG5hbWUpO1xuICAgIH0gLy8gQ2FjaGUgdW5tYXNrZWQgY29udGV4dCBzbyB3ZSBjYW4gYXZvaWQgcmVjcmVhdGluZyBtYXNrZWQgY29udGV4dCB1bmxlc3MgbmVjZXNzYXJ5LlxuICAgIC8vIENvbnRleHQgaXMgY3JlYXRlZCBiZWZvcmUgdGhlIGNsYXNzIGNvbXBvbmVudCBpcyBpbnN0YW50aWF0ZWQgc28gY2hlY2sgZm9yIGluc3RhbmNlLlxuXG5cbiAgICBpZiAoaW5zdGFuY2UpIHtcbiAgICAgIGNhY2hlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgdW5tYXNrZWRDb250ZXh0LCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udGV4dDtcbiAgfVxufVxuXG5mdW5jdGlvbiBoYXNDb250ZXh0Q2hhbmdlZCgpIHtcbiAge1xuICAgIHJldHVybiBkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLmN1cnJlbnQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNDb250ZXh0UHJvdmlkZXIodHlwZSkge1xuICB7XG4gICAgdmFyIGNoaWxkQ29udGV4dFR5cGVzID0gdHlwZS5jaGlsZENvbnRleHRUeXBlcztcbiAgICByZXR1cm4gY2hpbGRDb250ZXh0VHlwZXMgIT09IG51bGwgJiYgY2hpbGRDb250ZXh0VHlwZXMgIT09IHVuZGVmaW5lZDtcbiAgfVxufVxuXG5mdW5jdGlvbiBwb3BDb250ZXh0KGZpYmVyKSB7XG4gIHtcbiAgICBwb3AoZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvciwgZmliZXIpO1xuICAgIHBvcChjb250ZXh0U3RhY2tDdXJzb3IsIGZpYmVyKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwb3BUb3BMZXZlbENvbnRleHRPYmplY3QoZmliZXIpIHtcbiAge1xuICAgIHBvcChkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLCBmaWJlcik7XG4gICAgcG9wKGNvbnRleHRTdGFja0N1cnNvciwgZmliZXIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHB1c2hUb3BMZXZlbENvbnRleHRPYmplY3QoZmliZXIsIGNvbnRleHQsIGRpZENoYW5nZSkge1xuICB7XG4gICAgaWYgKCEoY29udGV4dFN0YWNrQ3Vyc29yLmN1cnJlbnQgPT09IGVtcHR5Q29udGV4dE9iamVjdCkpIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiVW5leHBlY3RlZCBjb250ZXh0IGZvdW5kIG9uIHN0YWNrLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHVzaChjb250ZXh0U3RhY2tDdXJzb3IsIGNvbnRleHQsIGZpYmVyKTtcbiAgICBwdXNoKGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IsIGRpZENoYW5nZSwgZmliZXIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NDaGlsZENvbnRleHQoZmliZXIsIHR5cGUsIHBhcmVudENvbnRleHQpIHtcbiAge1xuICAgIHZhciBpbnN0YW5jZSA9IGZpYmVyLnN0YXRlTm9kZTtcbiAgICB2YXIgY2hpbGRDb250ZXh0VHlwZXMgPSB0eXBlLmNoaWxkQ29udGV4dFR5cGVzOyAvLyBUT0RPIChidmF1Z2huKSBSZXBsYWNlIHRoaXMgYmVoYXZpb3Igd2l0aCBhbiBpbnZhcmlhbnQoKSBpbiB0aGUgZnV0dXJlLlxuICAgIC8vIEl0IGhhcyBvbmx5IGJlZW4gYWRkZWQgaW4gRmliZXIgdG8gbWF0Y2ggdGhlICh1bmludGVudGlvbmFsKSBiZWhhdmlvciBpbiBTdGFjay5cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuZ2V0Q2hpbGRDb250ZXh0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB7XG4gICAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZSh0eXBlKSB8fCAnVW5rbm93bic7XG5cbiAgICAgICAgaWYgKCF3YXJuZWRBYm91dE1pc3NpbmdHZXRDaGlsZENvbnRleHRbY29tcG9uZW50TmFtZV0pIHtcbiAgICAgICAgICB3YXJuZWRBYm91dE1pc3NpbmdHZXRDaGlsZENvbnRleHRbY29tcG9uZW50TmFtZV0gPSB0cnVlO1xuXG4gICAgICAgICAgZXJyb3IoJyVzLmNoaWxkQ29udGV4dFR5cGVzIGlzIHNwZWNpZmllZCBidXQgdGhlcmUgaXMgbm8gZ2V0Q2hpbGRDb250ZXh0KCkgbWV0aG9kICcgKyAnb24gdGhlIGluc3RhbmNlLiBZb3UgY2FuIGVpdGhlciBkZWZpbmUgZ2V0Q2hpbGRDb250ZXh0KCkgb24gJXMgb3IgcmVtb3ZlICcgKyAnY2hpbGRDb250ZXh0VHlwZXMgZnJvbSBpdC4nLCBjb21wb25lbnROYW1lLCBjb21wb25lbnROYW1lKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFyZW50Q29udGV4dDtcbiAgICB9XG5cbiAgICB2YXIgY2hpbGRDb250ZXh0ID0gaW5zdGFuY2UuZ2V0Q2hpbGRDb250ZXh0KCk7XG5cbiAgICBmb3IgKHZhciBjb250ZXh0S2V5IGluIGNoaWxkQ29udGV4dCkge1xuICAgICAgaWYgKCEoY29udGV4dEtleSBpbiBjaGlsZENvbnRleHRUeXBlcykpIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCAoZ2V0Q29tcG9uZW50TmFtZSh0eXBlKSB8fCAnVW5rbm93bicpICsgXCIuZ2V0Q2hpbGRDb250ZXh0KCk6IGtleSBcXFwiXCIgKyBjb250ZXh0S2V5ICsgXCJcXFwiIGlzIG5vdCBkZWZpbmVkIGluIGNoaWxkQ29udGV4dFR5cGVzLlwiICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB7XG4gICAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWUodHlwZSkgfHwgJ1Vua25vd24nO1xuICAgICAgY2hlY2tQcm9wVHlwZXMoY2hpbGRDb250ZXh0VHlwZXMsIGNoaWxkQ29udGV4dCwgJ2NoaWxkIGNvbnRleHQnLCBuYW1lKTtcbiAgICB9XG5cbiAgICByZXR1cm4gX2Fzc2lnbih7fSwgcGFyZW50Q29udGV4dCwgY2hpbGRDb250ZXh0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwdXNoQ29udGV4dFByb3ZpZGVyKHdvcmtJblByb2dyZXNzKSB7XG4gIHtcbiAgICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7IC8vIFdlIHB1c2ggdGhlIGNvbnRleHQgYXMgZWFybHkgYXMgcG9zc2libGUgdG8gZW5zdXJlIHN0YWNrIGludGVncml0eS5cbiAgICAvLyBJZiB0aGUgaW5zdGFuY2UgZG9lcyBub3QgZXhpc3QgeWV0LCB3ZSB3aWxsIHB1c2ggbnVsbCBhdCBmaXJzdCxcbiAgICAvLyBhbmQgcmVwbGFjZSBpdCBvbiB0aGUgc3RhY2sgbGF0ZXIgd2hlbiBpbnZhbGlkYXRpbmcgdGhlIGNvbnRleHQuXG5cbiAgICB2YXIgbWVtb2l6ZWRNZXJnZWRDaGlsZENvbnRleHQgPSBpbnN0YW5jZSAmJiBpbnN0YW5jZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1lcmdlZENoaWxkQ29udGV4dCB8fCBlbXB0eUNvbnRleHRPYmplY3Q7IC8vIFJlbWVtYmVyIHRoZSBwYXJlbnQgY29udGV4dCBzbyB3ZSBjYW4gbWVyZ2Ugd2l0aCBpdCBsYXRlci5cbiAgICAvLyBJbmhlcml0IHRoZSBwYXJlbnQncyBkaWQtcGVyZm9ybS13b3JrIHZhbHVlIHRvIGF2b2lkIGluYWR2ZXJ0ZW50bHkgYmxvY2tpbmcgdXBkYXRlcy5cblxuICAgIHByZXZpb3VzQ29udGV4dCA9IGNvbnRleHRTdGFja0N1cnNvci5jdXJyZW50O1xuICAgIHB1c2goY29udGV4dFN0YWNrQ3Vyc29yLCBtZW1vaXplZE1lcmdlZENoaWxkQ29udGV4dCwgd29ya0luUHJvZ3Jlc3MpO1xuICAgIHB1c2goZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvciwgZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvci5jdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW52YWxpZGF0ZUNvbnRleHRQcm92aWRlcih3b3JrSW5Qcm9ncmVzcywgdHlwZSwgZGlkQ2hhbmdlKSB7XG4gIHtcbiAgICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG5cbiAgICBpZiAoIWluc3RhbmNlKSB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIkV4cGVjdGVkIHRvIGhhdmUgYW4gaW5zdGFuY2UgYnkgdGhpcyBwb2ludC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChkaWRDaGFuZ2UpIHtcbiAgICAgIC8vIE1lcmdlIHBhcmVudCBhbmQgb3duIGNvbnRleHQuXG4gICAgICAvLyBTa2lwIHRoaXMgaWYgd2UncmUgbm90IHVwZGF0aW5nIGR1ZSB0byBzQ1UuXG4gICAgICAvLyBUaGlzIGF2b2lkcyB1bm5lY2Vzc2FyaWx5IHJlY29tcHV0aW5nIG1lbW9pemVkIHZhbHVlcy5cbiAgICAgIHZhciBtZXJnZWRDb250ZXh0ID0gcHJvY2Vzc0NoaWxkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgdHlwZSwgcHJldmlvdXNDb250ZXh0KTtcbiAgICAgIGluc3RhbmNlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0ID0gbWVyZ2VkQ29udGV4dDsgLy8gUmVwbGFjZSB0aGUgb2xkIChvciBlbXB0eSkgY29udGV4dCB3aXRoIHRoZSBuZXcgb25lLlxuICAgICAgLy8gSXQgaXMgaW1wb3J0YW50IHRvIHVud2luZCB0aGUgY29udGV4dCBpbiB0aGUgcmV2ZXJzZSBvcmRlci5cblxuICAgICAgcG9wKGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHBvcChjb250ZXh0U3RhY2tDdXJzb3IsIHdvcmtJblByb2dyZXNzKTsgLy8gTm93IHB1c2ggdGhlIG5ldyBjb250ZXh0IGFuZCBtYXJrIHRoYXQgaXQgaGFzIGNoYW5nZWQuXG5cbiAgICAgIHB1c2goY29udGV4dFN0YWNrQ3Vyc29yLCBtZXJnZWRDb250ZXh0LCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICBwdXNoKGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IsIGRpZENoYW5nZSwgd29ya0luUHJvZ3Jlc3MpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwb3AoZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvciwgd29ya0luUHJvZ3Jlc3MpO1xuICAgICAgcHVzaChkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLCBkaWRDaGFuZ2UsIHdvcmtJblByb2dyZXNzKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluZEN1cnJlbnRVbm1hc2tlZENvbnRleHQoZmliZXIpIHtcbiAge1xuICAgIC8vIEN1cnJlbnRseSB0aGlzIGlzIG9ubHkgdXNlZCB3aXRoIHJlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyOyBub3Qgc3VyZSBpZiBpdFxuICAgIC8vIG1ha2VzIHNlbnNlIGVsc2V3aGVyZVxuICAgIGlmICghKGlzRmliZXJNb3VudGVkKGZpYmVyKSAmJiBmaWJlci50YWcgPT09IENsYXNzQ29tcG9uZW50KSkge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJFeHBlY3RlZCBzdWJ0cmVlIHBhcmVudCB0byBiZSBhIG1vdW50ZWQgY2xhc3MgY29tcG9uZW50LiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIG5vZGUgPSBmaWJlcjtcblxuICAgIGRvIHtcbiAgICAgIHN3aXRjaCAobm9kZS50YWcpIHtcbiAgICAgICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgICAgICByZXR1cm4gbm9kZS5zdGF0ZU5vZGUuY29udGV4dDtcblxuICAgICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBDb21wb25lbnQgPSBub2RlLnR5cGU7XG5cbiAgICAgICAgICAgIGlmIChpc0NvbnRleHRQcm92aWRlcihDb21wb25lbnQpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBub2RlLnN0YXRlTm9kZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1lcmdlZENoaWxkQ29udGV4dDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfSB3aGlsZSAobm9kZSAhPT0gbnVsbCk7XG5cbiAgICB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIkZvdW5kIHVuZXhwZWN0ZWQgZGV0YWNoZWQgc3VidHJlZSBwYXJlbnQuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIExlZ2FjeVJvb3QgPSAwO1xudmFyIEJsb2NraW5nUm9vdCA9IDE7XG52YXIgQ29uY3VycmVudFJvb3QgPSAyO1xuXG52YXIgcmVuZGVyZXJJRCA9IG51bGw7XG52YXIgaW5qZWN0ZWRIb29rID0gbnVsbDtcbnZhciBoYXNMb2dnZWRFcnJvciA9IGZhbHNlO1xudmFyIGlzRGV2VG9vbHNQcmVzZW50ID0gdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyAhPT0gJ3VuZGVmaW5lZCc7XG5mdW5jdGlvbiBpbmplY3RJbnRlcm5hbHMoaW50ZXJuYWxzKSB7XG4gIGlmICh0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fID09PSAndW5kZWZpbmVkJykge1xuICAgIC8vIE5vIERldlRvb2xzXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIGhvb2sgPSBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX187XG5cbiAgaWYgKGhvb2suaXNEaXNhYmxlZCkge1xuICAgIC8vIFRoaXMgaXNuJ3QgYSByZWFsIHByb3BlcnR5IG9uIHRoZSBob29rLCBidXQgaXQgY2FuIGJlIHNldCB0byBvcHQgb3V0XG4gICAgLy8gb2YgRGV2VG9vbHMgaW50ZWdyYXRpb24gYW5kIGFzc29jaWF0ZWQgd2FybmluZ3MgYW5kIGxvZ3MuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8zODc3XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoIWhvb2suc3VwcG9ydHNGaWJlcikge1xuICAgIHtcbiAgICAgIGVycm9yKCdUaGUgaW5zdGFsbGVkIHZlcnNpb24gb2YgUmVhY3QgRGV2VG9vbHMgaXMgdG9vIG9sZCBhbmQgd2lsbCBub3Qgd29yayAnICsgJ3dpdGggdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiBSZWFjdC4gUGxlYXNlIHVwZGF0ZSBSZWFjdCBEZXZUb29scy4gJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvcmVhY3QtZGV2dG9vbHMnKTtcbiAgICB9IC8vIERldlRvb2xzIGV4aXN0cywgZXZlbiB0aG91Z2ggaXQgZG9lc24ndCBzdXBwb3J0IEZpYmVyLlxuXG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmVuZGVyZXJJRCA9IGhvb2suaW5qZWN0KGludGVybmFscyk7IC8vIFdlIGhhdmUgc3VjY2Vzc2Z1bGx5IGluamVjdGVkLCBzbyBub3cgaXQgaXMgc2FmZSB0byBzZXQgdXAgaG9va3MuXG5cbiAgICBpbmplY3RlZEhvb2sgPSBob29rO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBDYXRjaCBhbGwgZXJyb3JzIGJlY2F1c2UgaXQgaXMgdW5zYWZlIHRvIHRocm93IGR1cmluZyBpbml0aWFsaXphdGlvbi5cbiAgICB7XG4gICAgICBlcnJvcignUmVhY3QgaW5zdHJ1bWVudGF0aW9uIGVuY291bnRlcmVkIGFuIGVycm9yOiAlcy4nLCBlcnIpO1xuICAgIH1cbiAgfSAvLyBEZXZUb29scyBleGlzdHNcblxuXG4gIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gb25TY2hlZHVsZVJvb3Qocm9vdCwgY2hpbGRyZW4pIHtcbiAge1xuICAgIGlmIChpbmplY3RlZEhvb2sgJiYgdHlwZW9mIGluamVjdGVkSG9vay5vblNjaGVkdWxlRmliZXJSb290ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpbmplY3RlZEhvb2sub25TY2hlZHVsZUZpYmVyUm9vdChyZW5kZXJlcklELCByb290LCBjaGlsZHJlbik7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKCAhaGFzTG9nZ2VkRXJyb3IpIHtcbiAgICAgICAgICBoYXNMb2dnZWRFcnJvciA9IHRydWU7XG5cbiAgICAgICAgICBlcnJvcignUmVhY3QgaW5zdHJ1bWVudGF0aW9uIGVuY291bnRlcmVkIGFuIGVycm9yOiAlcycsIGVycik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIG9uQ29tbWl0Um9vdChyb290LCBwcmlvcml0eUxldmVsKSB7XG4gIGlmIChpbmplY3RlZEhvb2sgJiYgdHlwZW9mIGluamVjdGVkSG9vay5vbkNvbW1pdEZpYmVyUm9vdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRyeSB7XG4gICAgICB2YXIgZGlkRXJyb3IgPSAocm9vdC5jdXJyZW50LmZsYWdzICYgRGlkQ2FwdHVyZSkgPT09IERpZENhcHR1cmU7XG5cbiAgICAgIGlmIChlbmFibGVQcm9maWxlclRpbWVyKSB7XG4gICAgICAgIGluamVjdGVkSG9vay5vbkNvbW1pdEZpYmVyUm9vdChyZW5kZXJlcklELCByb290LCBwcmlvcml0eUxldmVsLCBkaWRFcnJvcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbmplY3RlZEhvb2sub25Db21taXRGaWJlclJvb3QocmVuZGVyZXJJRCwgcm9vdCwgdW5kZWZpbmVkLCBkaWRFcnJvcik7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB7XG4gICAgICAgIGlmICghaGFzTG9nZ2VkRXJyb3IpIHtcbiAgICAgICAgICBoYXNMb2dnZWRFcnJvciA9IHRydWU7XG5cbiAgICAgICAgICBlcnJvcignUmVhY3QgaW5zdHJ1bWVudGF0aW9uIGVuY291bnRlcmVkIGFuIGVycm9yOiAlcycsIGVycik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIG9uQ29tbWl0VW5tb3VudChmaWJlcikge1xuICBpZiAoaW5qZWN0ZWRIb29rICYmIHR5cGVvZiBpbmplY3RlZEhvb2sub25Db21taXRGaWJlclVubW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICB0cnkge1xuICAgICAgaW5qZWN0ZWRIb29rLm9uQ29tbWl0RmliZXJVbm1vdW50KHJlbmRlcmVySUQsIGZpYmVyKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKCFoYXNMb2dnZWRFcnJvcikge1xuICAgICAgICAgIGhhc0xvZ2dlZEVycm9yID0gdHJ1ZTtcblxuICAgICAgICAgIGVycm9yKCdSZWFjdCBpbnN0cnVtZW50YXRpb24gZW5jb3VudGVyZWQgYW4gZXJyb3I6ICVzJywgZXJyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgU2NoZWR1bGVyX3J1bldpdGhQcmlvcml0eSA9IFNjaGVkdWxlci51bnN0YWJsZV9ydW5XaXRoUHJpb3JpdHksXG4gICAgU2NoZWR1bGVyX3NjaGVkdWxlQ2FsbGJhY2sgPSBTY2hlZHVsZXIudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayxcbiAgICBTY2hlZHVsZXJfY2FuY2VsQ2FsbGJhY2sgPSBTY2hlZHVsZXIudW5zdGFibGVfY2FuY2VsQ2FsbGJhY2ssXG4gICAgU2NoZWR1bGVyX3Nob3VsZFlpZWxkID0gU2NoZWR1bGVyLnVuc3RhYmxlX3Nob3VsZFlpZWxkLFxuICAgIFNjaGVkdWxlcl9yZXF1ZXN0UGFpbnQgPSBTY2hlZHVsZXIudW5zdGFibGVfcmVxdWVzdFBhaW50LFxuICAgIFNjaGVkdWxlcl9ub3ckMSA9IFNjaGVkdWxlci51bnN0YWJsZV9ub3csXG4gICAgU2NoZWR1bGVyX2dldEN1cnJlbnRQcmlvcml0eUxldmVsID0gU2NoZWR1bGVyLnVuc3RhYmxlX2dldEN1cnJlbnRQcmlvcml0eUxldmVsLFxuICAgIFNjaGVkdWxlcl9JbW1lZGlhdGVQcmlvcml0eSA9IFNjaGVkdWxlci51bnN0YWJsZV9JbW1lZGlhdGVQcmlvcml0eSxcbiAgICBTY2hlZHVsZXJfVXNlckJsb2NraW5nUHJpb3JpdHkgPSBTY2hlZHVsZXIudW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHksXG4gICAgU2NoZWR1bGVyX05vcm1hbFByaW9yaXR5ID0gU2NoZWR1bGVyLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5LFxuICAgIFNjaGVkdWxlcl9Mb3dQcmlvcml0eSA9IFNjaGVkdWxlci51bnN0YWJsZV9Mb3dQcmlvcml0eSxcbiAgICBTY2hlZHVsZXJfSWRsZVByaW9yaXR5ID0gU2NoZWR1bGVyLnVuc3RhYmxlX0lkbGVQcmlvcml0eTtcblxue1xuICAvLyBQcm92aWRlIGV4cGxpY2l0IGVycm9yIG1lc3NhZ2Ugd2hlbiBwcm9kdWN0aW9uK3Byb2ZpbGluZyBidW5kbGUgb2YgZS5nLlxuICAvLyByZWFjdC1kb20gaXMgdXNlZCB3aXRoIHByb2R1Y3Rpb24gKG5vbi1wcm9maWxpbmcpIGJ1bmRsZSBvZlxuICAvLyBzY2hlZHVsZXIvdHJhY2luZ1xuICBpZiAoISh0cmFjaW5nLl9faW50ZXJhY3Rpb25zUmVmICE9IG51bGwgJiYgdHJhY2luZy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50ICE9IG51bGwpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiSXQgaXMgbm90IHN1cHBvcnRlZCB0byBydW4gdGhlIHByb2ZpbGluZyB2ZXJzaW9uIG9mIGEgcmVuZGVyZXIgKGZvciBleGFtcGxlLCBgcmVhY3QtZG9tL3Byb2ZpbGluZ2ApIHdpdGhvdXQgYWxzbyByZXBsYWNpbmcgdGhlIGBzY2hlZHVsZXIvdHJhY2luZ2AgbW9kdWxlIHdpdGggYHNjaGVkdWxlci90cmFjaW5nLXByb2ZpbGluZ2AuIFlvdXIgYnVuZGxlciBtaWdodCBoYXZlIGEgc2V0dGluZyBmb3IgYWxpYXNpbmcgYm90aCBtb2R1bGVzLiBMZWFybiBtb3JlIGF0IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9wcm9maWxpbmdcIiApO1xuICAgIH1cbiAgfVxufVxuXG52YXIgZmFrZUNhbGxiYWNrTm9kZSA9IHt9OyAvLyBFeGNlcHQgZm9yIE5vUHJpb3JpdHksIHRoZXNlIGNvcnJlc3BvbmQgdG8gU2NoZWR1bGVyIHByaW9yaXRpZXMuIFdlIHVzZVxuLy8gYXNjZW5kaW5nIG51bWJlcnMgc28gd2UgY2FuIGNvbXBhcmUgdGhlbSBsaWtlIG51bWJlcnMuIFRoZXkgc3RhcnQgYXQgOTAgdG9cbi8vIGF2b2lkIGNsYXNoaW5nIHdpdGggU2NoZWR1bGVyJ3MgcHJpb3JpdGllcy5cblxudmFyIEltbWVkaWF0ZVByaW9yaXR5JDEgPSA5OTtcbnZhciBVc2VyQmxvY2tpbmdQcmlvcml0eSQyID0gOTg7XG52YXIgTm9ybWFsUHJpb3JpdHkkMSA9IDk3O1xudmFyIExvd1ByaW9yaXR5JDEgPSA5NjtcbnZhciBJZGxlUHJpb3JpdHkkMSA9IDk1OyAvLyBOb1ByaW9yaXR5IGlzIHRoZSBhYnNlbmNlIG9mIHByaW9yaXR5LiBBbHNvIFJlYWN0LW9ubHkuXG5cbnZhciBOb1ByaW9yaXR5JDEgPSA5MDtcbnZhciBzaG91bGRZaWVsZCA9IFNjaGVkdWxlcl9zaG91bGRZaWVsZDtcbnZhciByZXF1ZXN0UGFpbnQgPSAvLyBGYWxsIGJhY2sgZ3JhY2VmdWxseSBpZiB3ZSdyZSBydW5uaW5nIGFuIG9sZGVyIHZlcnNpb24gb2YgU2NoZWR1bGVyLlxuU2NoZWR1bGVyX3JlcXVlc3RQYWludCAhPT0gdW5kZWZpbmVkID8gU2NoZWR1bGVyX3JlcXVlc3RQYWludCA6IGZ1bmN0aW9uICgpIHt9O1xudmFyIHN5bmNRdWV1ZSA9IG51bGw7XG52YXIgaW1tZWRpYXRlUXVldWVDYWxsYmFja05vZGUgPSBudWxsO1xudmFyIGlzRmx1c2hpbmdTeW5jUXVldWUgPSBmYWxzZTtcbnZhciBpbml0aWFsVGltZU1zJDEgPSBTY2hlZHVsZXJfbm93JDEoKTsgLy8gSWYgdGhlIGluaXRpYWwgdGltZXN0YW1wIGlzIHJlYXNvbmFibHkgc21hbGwsIHVzZSBTY2hlZHVsZXIncyBgbm93YCBkaXJlY3RseS5cbi8vIFRoaXMgd2lsbCBiZSB0aGUgY2FzZSBmb3IgbW9kZXJuIGJyb3dzZXJzIHRoYXQgc3VwcG9ydCBgcGVyZm9ybWFuY2Uubm93YC4gSW5cbi8vIG9sZGVyIGJyb3dzZXJzLCBTY2hlZHVsZXIgZmFsbHMgYmFjayB0byBgRGF0ZS5ub3dgLCB3aGljaCByZXR1cm5zIGEgVW5peFxuLy8gdGltZXN0YW1wLiBJbiB0aGF0IGNhc2UsIHN1YnRyYWN0IHRoZSBtb2R1bGUgaW5pdGlhbGl6YXRpb24gdGltZSB0byBzaW11bGF0ZVxuLy8gdGhlIGJlaGF2aW9yIG9mIHBlcmZvcm1hbmNlLm5vdyBhbmQga2VlcCBvdXIgdGltZXMgc21hbGwgZW5vdWdoIHRvIGZpdFxuLy8gd2l0aGluIDMyIGJpdHMuXG4vLyBUT0RPOiBDb25zaWRlciBsaWZ0aW5nIHRoaXMgaW50byBTY2hlZHVsZXIuXG5cbnZhciBub3cgPSBpbml0aWFsVGltZU1zJDEgPCAxMDAwMCA/IFNjaGVkdWxlcl9ub3ckMSA6IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIFNjaGVkdWxlcl9ub3ckMSgpIC0gaW5pdGlhbFRpbWVNcyQxO1xufTtcbmZ1bmN0aW9uIGdldEN1cnJlbnRQcmlvcml0eUxldmVsKCkge1xuICBzd2l0Y2ggKFNjaGVkdWxlcl9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbCgpKSB7XG4gICAgY2FzZSBTY2hlZHVsZXJfSW1tZWRpYXRlUHJpb3JpdHk6XG4gICAgICByZXR1cm4gSW1tZWRpYXRlUHJpb3JpdHkkMTtcblxuICAgIGNhc2UgU2NoZWR1bGVyX1VzZXJCbG9ja2luZ1ByaW9yaXR5OlxuICAgICAgcmV0dXJuIFVzZXJCbG9ja2luZ1ByaW9yaXR5JDI7XG5cbiAgICBjYXNlIFNjaGVkdWxlcl9Ob3JtYWxQcmlvcml0eTpcbiAgICAgIHJldHVybiBOb3JtYWxQcmlvcml0eSQxO1xuXG4gICAgY2FzZSBTY2hlZHVsZXJfTG93UHJpb3JpdHk6XG4gICAgICByZXR1cm4gTG93UHJpb3JpdHkkMTtcblxuICAgIGNhc2UgU2NoZWR1bGVyX0lkbGVQcmlvcml0eTpcbiAgICAgIHJldHVybiBJZGxlUHJpb3JpdHkkMTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJVbmtub3duIHByaW9yaXR5IGxldmVsLlwiICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICB9XG59XG5cbmZ1bmN0aW9uIHJlYWN0UHJpb3JpdHlUb1NjaGVkdWxlclByaW9yaXR5KHJlYWN0UHJpb3JpdHlMZXZlbCkge1xuICBzd2l0Y2ggKHJlYWN0UHJpb3JpdHlMZXZlbCkge1xuICAgIGNhc2UgSW1tZWRpYXRlUHJpb3JpdHkkMTpcbiAgICAgIHJldHVybiBTY2hlZHVsZXJfSW1tZWRpYXRlUHJpb3JpdHk7XG5cbiAgICBjYXNlIFVzZXJCbG9ja2luZ1ByaW9yaXR5JDI6XG4gICAgICByZXR1cm4gU2NoZWR1bGVyX1VzZXJCbG9ja2luZ1ByaW9yaXR5O1xuXG4gICAgY2FzZSBOb3JtYWxQcmlvcml0eSQxOlxuICAgICAgcmV0dXJuIFNjaGVkdWxlcl9Ob3JtYWxQcmlvcml0eTtcblxuICAgIGNhc2UgTG93UHJpb3JpdHkkMTpcbiAgICAgIHJldHVybiBTY2hlZHVsZXJfTG93UHJpb3JpdHk7XG5cbiAgICBjYXNlIElkbGVQcmlvcml0eSQxOlxuICAgICAgcmV0dXJuIFNjaGVkdWxlcl9JZGxlUHJpb3JpdHk7XG5cbiAgICBkZWZhdWx0OlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiVW5rbm93biBwcmlvcml0eSBsZXZlbC5cIiApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgfVxufVxuXG5mdW5jdGlvbiBydW5XaXRoUHJpb3JpdHkkMShyZWFjdFByaW9yaXR5TGV2ZWwsIGZuKSB7XG4gIHZhciBwcmlvcml0eUxldmVsID0gcmVhY3RQcmlvcml0eVRvU2NoZWR1bGVyUHJpb3JpdHkocmVhY3RQcmlvcml0eUxldmVsKTtcbiAgcmV0dXJuIFNjaGVkdWxlcl9ydW5XaXRoUHJpb3JpdHkocHJpb3JpdHlMZXZlbCwgZm4pO1xufVxuZnVuY3Rpb24gc2NoZWR1bGVDYWxsYmFjayhyZWFjdFByaW9yaXR5TGV2ZWwsIGNhbGxiYWNrLCBvcHRpb25zKSB7XG4gIHZhciBwcmlvcml0eUxldmVsID0gcmVhY3RQcmlvcml0eVRvU2NoZWR1bGVyUHJpb3JpdHkocmVhY3RQcmlvcml0eUxldmVsKTtcbiAgcmV0dXJuIFNjaGVkdWxlcl9zY2hlZHVsZUNhbGxiYWNrKHByaW9yaXR5TGV2ZWwsIGNhbGxiYWNrLCBvcHRpb25zKTtcbn1cbmZ1bmN0aW9uIHNjaGVkdWxlU3luY0NhbGxiYWNrKGNhbGxiYWNrKSB7XG4gIC8vIFB1c2ggdGhpcyBjYWxsYmFjayBpbnRvIGFuIGludGVybmFsIHF1ZXVlLiBXZSdsbCBmbHVzaCB0aGVzZSBlaXRoZXIgaW5cbiAgLy8gdGhlIG5leHQgdGljaywgb3IgZWFybGllciBpZiBzb21ldGhpbmcgY2FsbHMgYGZsdXNoU3luY0NhbGxiYWNrUXVldWVgLlxuICBpZiAoc3luY1F1ZXVlID09PSBudWxsKSB7XG4gICAgc3luY1F1ZXVlID0gW2NhbGxiYWNrXTsgLy8gRmx1c2ggdGhlIHF1ZXVlIGluIHRoZSBuZXh0IHRpY2ssIGF0IHRoZSBlYXJsaWVzdC5cblxuICAgIGltbWVkaWF0ZVF1ZXVlQ2FsbGJhY2tOb2RlID0gU2NoZWR1bGVyX3NjaGVkdWxlQ2FsbGJhY2soU2NoZWR1bGVyX0ltbWVkaWF0ZVByaW9yaXR5LCBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlSW1wbCk7XG4gIH0gZWxzZSB7XG4gICAgLy8gUHVzaCBvbnRvIGV4aXN0aW5nIHF1ZXVlLiBEb24ndCBuZWVkIHRvIHNjaGVkdWxlIGEgY2FsbGJhY2sgYmVjYXVzZVxuICAgIC8vIHdlIGFscmVhZHkgc2NoZWR1bGVkIG9uZSB3aGVuIHdlIGNyZWF0ZWQgdGhlIHF1ZXVlLlxuICAgIHN5bmNRdWV1ZS5wdXNoKGNhbGxiYWNrKTtcbiAgfVxuXG4gIHJldHVybiBmYWtlQ2FsbGJhY2tOb2RlO1xufVxuZnVuY3Rpb24gY2FuY2VsQ2FsbGJhY2soY2FsbGJhY2tOb2RlKSB7XG4gIGlmIChjYWxsYmFja05vZGUgIT09IGZha2VDYWxsYmFja05vZGUpIHtcbiAgICBTY2hlZHVsZXJfY2FuY2VsQ2FsbGJhY2soY2FsbGJhY2tOb2RlKTtcbiAgfVxufVxuZnVuY3Rpb24gZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZSgpIHtcbiAgaWYgKGltbWVkaWF0ZVF1ZXVlQ2FsbGJhY2tOb2RlICE9PSBudWxsKSB7XG4gICAgdmFyIG5vZGUgPSBpbW1lZGlhdGVRdWV1ZUNhbGxiYWNrTm9kZTtcbiAgICBpbW1lZGlhdGVRdWV1ZUNhbGxiYWNrTm9kZSA9IG51bGw7XG4gICAgU2NoZWR1bGVyX2NhbmNlbENhbGxiYWNrKG5vZGUpO1xuICB9XG5cbiAgZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZUltcGwoKTtcbn1cblxuZnVuY3Rpb24gZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZUltcGwoKSB7XG4gIGlmICghaXNGbHVzaGluZ1N5bmNRdWV1ZSAmJiBzeW5jUXVldWUgIT09IG51bGwpIHtcbiAgICAvLyBQcmV2ZW50IHJlLWVudHJhbmN5LlxuICAgIGlzRmx1c2hpbmdTeW5jUXVldWUgPSB0cnVlO1xuICAgIHZhciBpID0gMDtcblxuICAgIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBfaXNTeW5jMiA9IHRydWU7XG4gICAgICAgIHZhciBfcXVldWUgPSBzeW5jUXVldWU7XG4gICAgICAgIHJ1bldpdGhQcmlvcml0eSQxKEltbWVkaWF0ZVByaW9yaXR5JDEsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBmb3IgKDsgaSA8IF9xdWV1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gX3F1ZXVlW2ldO1xuXG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2soX2lzU3luYzIpO1xuICAgICAgICAgICAgfSB3aGlsZSAoY2FsbGJhY2sgIT09IG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHN5bmNRdWV1ZSA9IG51bGw7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBJZiBzb21ldGhpbmcgdGhyb3dzLCBsZWF2ZSB0aGUgcmVtYWluaW5nIGNhbGxiYWNrcyBvbiB0aGUgcXVldWUuXG4gICAgICAgIGlmIChzeW5jUXVldWUgIT09IG51bGwpIHtcbiAgICAgICAgICBzeW5jUXVldWUgPSBzeW5jUXVldWUuc2xpY2UoaSArIDEpO1xuICAgICAgICB9IC8vIFJlc3VtZSBmbHVzaGluZyBpbiB0aGUgbmV4dCB0aWNrXG5cblxuICAgICAgICBTY2hlZHVsZXJfc2NoZWR1bGVDYWxsYmFjayhTY2hlZHVsZXJfSW1tZWRpYXRlUHJpb3JpdHksIGZsdXNoU3luY0NhbGxiYWNrUXVldWUpO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlzRmx1c2hpbmdTeW5jUXVldWUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8gVE9ETzogdGhpcyBpcyBzcGVjaWFsIGJlY2F1c2UgaXQgZ2V0cyBpbXBvcnRlZCBkdXJpbmcgYnVpbGQuXG52YXIgUmVhY3RWZXJzaW9uID0gJzE3LjAuMic7XG5cbnZhciBOb01vZGUgPSAwO1xudmFyIFN0cmljdE1vZGUgPSAxOyAvLyBUT0RPOiBSZW1vdmUgQmxvY2tpbmdNb2RlIGFuZCBDb25jdXJyZW50TW9kZSBieSByZWFkaW5nIGZyb20gdGhlIHJvb3Rcbi8vIHRhZyBpbnN0ZWFkXG5cbnZhciBCbG9ja2luZ01vZGUgPSAyO1xudmFyIENvbmN1cnJlbnRNb2RlID0gNDtcbnZhciBQcm9maWxlTW9kZSA9IDg7XG52YXIgRGVidWdUcmFjaW5nTW9kZSA9IDE2O1xuXG52YXIgUmVhY3RDdXJyZW50QmF0Y2hDb25maWcgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnRCYXRjaENvbmZpZztcbnZhciBOb1RyYW5zaXRpb24gPSAwO1xuZnVuY3Rpb24gcmVxdWVzdEN1cnJlbnRUcmFuc2l0aW9uKCkge1xuICByZXR1cm4gUmVhY3RDdXJyZW50QmF0Y2hDb25maWcudHJhbnNpdGlvbjtcbn1cblxudmFyIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzID0ge1xuICByZWNvcmRVbnNhZmVMaWZlY3ljbGVXYXJuaW5nczogZnVuY3Rpb24gKGZpYmVyLCBpbnN0YW5jZSkge30sXG4gIGZsdXNoUGVuZGluZ1Vuc2FmZUxpZmVjeWNsZVdhcm5pbmdzOiBmdW5jdGlvbiAoKSB7fSxcbiAgcmVjb3JkTGVnYWN5Q29udGV4dFdhcm5pbmc6IGZ1bmN0aW9uIChmaWJlciwgaW5zdGFuY2UpIHt9LFxuICBmbHVzaExlZ2FjeUNvbnRleHRXYXJuaW5nOiBmdW5jdGlvbiAoKSB7fSxcbiAgZGlzY2FyZFBlbmRpbmdXYXJuaW5nczogZnVuY3Rpb24gKCkge31cbn07XG5cbntcbiAgdmFyIGZpbmRTdHJpY3RSb290ID0gZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgdmFyIG1heWJlU3RyaWN0Um9vdCA9IG51bGw7XG4gICAgdmFyIG5vZGUgPSBmaWJlcjtcblxuICAgIHdoaWxlIChub2RlICE9PSBudWxsKSB7XG4gICAgICBpZiAobm9kZS5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgICBtYXliZVN0cmljdFJvb3QgPSBub2RlO1xuICAgICAgfVxuXG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIG1heWJlU3RyaWN0Um9vdDtcbiAgfTtcblxuICB2YXIgc2V0VG9Tb3J0ZWRTdHJpbmcgPSBmdW5jdGlvbiAoc2V0KSB7XG4gICAgdmFyIGFycmF5ID0gW107XG4gICAgc2V0LmZvckVhY2goZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBhcnJheS5wdXNoKHZhbHVlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gYXJyYXkuc29ydCgpLmpvaW4oJywgJyk7XG4gIH07XG5cbiAgdmFyIHBlbmRpbmdDb21wb25lbnRXaWxsTW91bnRXYXJuaW5ncyA9IFtdO1xuICB2YXIgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsTW91bnRXYXJuaW5ncyA9IFtdO1xuICB2YXIgcGVuZGluZ0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncyA9IFtdO1xuICB2YXIgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MgPSBbXTtcbiAgdmFyIHBlbmRpbmdDb21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MgPSBbXTtcbiAgdmFyIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzID0gW107IC8vIFRyYWNrcyBjb21wb25lbnRzIHdlIGhhdmUgYWxyZWFkeSB3YXJuZWQgYWJvdXQuXG5cbiAgdmFyIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMgPSBuZXcgU2V0KCk7XG5cbiAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MucmVjb3JkVW5zYWZlTGlmZWN5Y2xlV2FybmluZ3MgPSBmdW5jdGlvbiAoZmliZXIsIGluc3RhbmNlKSB7XG4gICAgLy8gRGVkdXAgc3RyYXRlZ3k6IFdhcm4gb25jZSBwZXIgY29tcG9uZW50LlxuICAgIGlmIChkaWRXYXJuQWJvdXRVbnNhZmVMaWZlY3ljbGVzLmhhcyhmaWJlci50eXBlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nICYmIC8vIERvbid0IHdhcm4gYWJvdXQgcmVhY3QtbGlmZWN5Y2xlcy1jb21wYXQgcG9seWZpbGxlZCBjb21wb25lbnRzLlxuICAgIGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudC5fX3N1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5nICE9PSB0cnVlKSB7XG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MucHVzaChmaWJlcik7XG4gICAgfVxuXG4gICAgaWYgKGZpYmVyLm1vZGUgJiBTdHJpY3RNb2RlICYmIHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzLnB1c2goZmliZXIpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJyAmJiBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzLl9fc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmcgIT09IHRydWUpIHtcbiAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MucHVzaChmaWJlcik7XG4gICAgfVxuXG4gICAgaWYgKGZpYmVyLm1vZGUgJiBTdHJpY3RNb2RlICYmIHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MucHVzaChmaWJlcik7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsVXBkYXRlID09PSAnZnVuY3Rpb24nICYmIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVcGRhdGUuX19zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZyAhPT0gdHJ1ZSkge1xuICAgICAgcGVuZGluZ0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncy5wdXNoKGZpYmVyKTtcbiAgICB9XG5cbiAgICBpZiAoZmliZXIubW9kZSAmIFN0cmljdE1vZGUgJiYgdHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncy5wdXNoKGZpYmVyKTtcbiAgICB9XG4gIH07XG5cbiAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MuZmx1c2hQZW5kaW5nVW5zYWZlTGlmZWN5Y2xlV2FybmluZ3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gV2UgZG8gYW4gaW5pdGlhbCBwYXNzIHRvIGdhdGhlciBjb21wb25lbnQgbmFtZXNcbiAgICB2YXIgY29tcG9uZW50V2lsbE1vdW50VW5pcXVlTmFtZXMgPSBuZXcgU2V0KCk7XG5cbiAgICBpZiAocGVuZGluZ0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsTW91bnRXYXJuaW5ncy5mb3JFYWNoKGZ1bmN0aW9uIChmaWJlcikge1xuICAgICAgICBjb21wb25lbnRXaWxsTW91bnRVbmlxdWVOYW1lcy5hZGQoZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnQ29tcG9uZW50Jyk7XG4gICAgICAgIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMuYWRkKGZpYmVyLnR5cGUpO1xuICAgICAgfSk7XG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MgPSBbXTtcbiAgICB9XG5cbiAgICB2YXIgVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudFVuaXF1ZU5hbWVzID0gbmV3IFNldCgpO1xuXG4gICAgaWYgKHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsTW91bnRXYXJuaW5ncy5mb3JFYWNoKGZ1bmN0aW9uIChmaWJlcikge1xuICAgICAgICBVTlNBRkVfY29tcG9uZW50V2lsbE1vdW50VW5pcXVlTmFtZXMuYWRkKGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkgfHwgJ0NvbXBvbmVudCcpO1xuICAgICAgICBkaWRXYXJuQWJvdXRVbnNhZmVMaWZlY3ljbGVzLmFkZChmaWJlci50eXBlKTtcbiAgICAgIH0pO1xuICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsTW91bnRXYXJuaW5ncyA9IFtdO1xuICAgIH1cblxuICAgIHZhciBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzVW5pcXVlTmFtZXMgPSBuZXcgU2V0KCk7XG5cbiAgICBpZiAocGVuZGluZ0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncy5sZW5ndGggPiAwKSB7XG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzLmZvckVhY2goZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgICAgIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNVbmlxdWVOYW1lcy5hZGQoZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnQ29tcG9uZW50Jyk7XG4gICAgICAgIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMuYWRkKGZpYmVyLnR5cGUpO1xuICAgICAgfSk7XG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzID0gW107XG4gICAgfVxuXG4gICAgdmFyIFVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzVW5pcXVlTmFtZXMgPSBuZXcgU2V0KCk7XG5cbiAgICBpZiAocGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MuZm9yRWFjaChmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgICAgVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNVbmlxdWVOYW1lcy5hZGQoZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnQ29tcG9uZW50Jyk7XG4gICAgICAgIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMuYWRkKGZpYmVyLnR5cGUpO1xuICAgICAgfSk7XG4gICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncyA9IFtdO1xuICAgIH1cblxuICAgIHZhciBjb21wb25lbnRXaWxsVXBkYXRlVW5pcXVlTmFtZXMgPSBuZXcgU2V0KCk7XG5cbiAgICBpZiAocGVuZGluZ0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncy5sZW5ndGggPiAwKSB7XG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzLmZvckVhY2goZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgICAgIGNvbXBvbmVudFdpbGxVcGRhdGVVbmlxdWVOYW1lcy5hZGQoZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnQ29tcG9uZW50Jyk7XG4gICAgICAgIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMuYWRkKGZpYmVyLnR5cGUpO1xuICAgICAgfSk7XG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzID0gW107XG4gICAgfVxuXG4gICAgdmFyIFVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlVW5pcXVlTmFtZXMgPSBuZXcgU2V0KCk7XG5cbiAgICBpZiAocGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MuZm9yRWFjaChmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgICAgVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGVVbmlxdWVOYW1lcy5hZGQoZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnQ29tcG9uZW50Jyk7XG4gICAgICAgIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMuYWRkKGZpYmVyLnR5cGUpO1xuICAgICAgfSk7XG4gICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncyA9IFtdO1xuICAgIH0gLy8gRmluYWxseSwgd2UgZmx1c2ggYWxsIHRoZSB3YXJuaW5nc1xuICAgIC8vIFVOU0FGRV8gb25lcyBiZWZvcmUgdGhlIGRlcHJlY2F0ZWQgb25lcywgc2luY2UgdGhleSdsbCBiZSAnbG91ZGVyJ1xuXG5cbiAgICBpZiAoVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudFVuaXF1ZU5hbWVzLnNpemUgPiAwKSB7XG4gICAgICB2YXIgc29ydGVkTmFtZXMgPSBzZXRUb1NvcnRlZFN0cmluZyhVTlNBRkVfY29tcG9uZW50V2lsbE1vdW50VW5pcXVlTmFtZXMpO1xuXG4gICAgICBlcnJvcignVXNpbmcgVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCBpbiBzdHJpY3QgbW9kZSBpcyBub3QgcmVjb21tZW5kZWQgYW5kIG1heSBpbmRpY2F0ZSBidWdzIGluIHlvdXIgY29kZS4gJyArICdTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3Vuc2FmZS1jb21wb25lbnQtbGlmZWN5Y2xlcyBmb3IgZGV0YWlscy5cXG5cXG4nICsgJyogTW92ZSBjb2RlIHdpdGggc2lkZSBlZmZlY3RzIHRvIGNvbXBvbmVudERpZE1vdW50LCBhbmQgc2V0IGluaXRpYWwgc3RhdGUgaW4gdGhlIGNvbnN0cnVjdG9yLlxcbicgKyAnXFxuUGxlYXNlIHVwZGF0ZSB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6ICVzJywgc29ydGVkTmFtZXMpO1xuICAgIH1cblxuICAgIGlmIChVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1VuaXF1ZU5hbWVzLnNpemUgPiAwKSB7XG4gICAgICB2YXIgX3NvcnRlZE5hbWVzID0gc2V0VG9Tb3J0ZWRTdHJpbmcoVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNVbmlxdWVOYW1lcyk7XG5cbiAgICAgIGVycm9yKCdVc2luZyBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyBpbiBzdHJpY3QgbW9kZSBpcyBub3QgcmVjb21tZW5kZWQgJyArICdhbmQgbWF5IGluZGljYXRlIGJ1Z3MgaW4geW91ciBjb2RlLiAnICsgJ1NlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvdW5zYWZlLWNvbXBvbmVudC1saWZlY3ljbGVzIGZvciBkZXRhaWxzLlxcblxcbicgKyAnKiBNb3ZlIGRhdGEgZmV0Y2hpbmcgY29kZSBvciBzaWRlIGVmZmVjdHMgdG8gY29tcG9uZW50RGlkVXBkYXRlLlxcbicgKyBcIiogSWYgeW91J3JlIHVwZGF0aW5nIHN0YXRlIHdoZW5ldmVyIHByb3BzIGNoYW5nZSwgXCIgKyAncmVmYWN0b3IgeW91ciBjb2RlIHRvIHVzZSBtZW1vaXphdGlvbiB0ZWNobmlxdWVzIG9yIG1vdmUgaXQgdG8gJyArICdzdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLiBMZWFybiBtb3JlIGF0OiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvZGVyaXZlZC1zdGF0ZVxcbicgKyAnXFxuUGxlYXNlIHVwZGF0ZSB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6ICVzJywgX3NvcnRlZE5hbWVzKTtcbiAgICB9XG5cbiAgICBpZiAoVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGVVbmlxdWVOYW1lcy5zaXplID4gMCkge1xuICAgICAgdmFyIF9zb3J0ZWROYW1lczIgPSBzZXRUb1NvcnRlZFN0cmluZyhVTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZVVuaXF1ZU5hbWVzKTtcblxuICAgICAgZXJyb3IoJ1VzaW5nIFVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlIGluIHN0cmljdCBtb2RlIGlzIG5vdCByZWNvbW1lbmRlZCAnICsgJ2FuZCBtYXkgaW5kaWNhdGUgYnVncyBpbiB5b3VyIGNvZGUuICcgKyAnU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay91bnNhZmUtY29tcG9uZW50LWxpZmVjeWNsZXMgZm9yIGRldGFpbHMuXFxuXFxuJyArICcqIE1vdmUgZGF0YSBmZXRjaGluZyBjb2RlIG9yIHNpZGUgZWZmZWN0cyB0byBjb21wb25lbnREaWRVcGRhdGUuXFxuJyArICdcXG5QbGVhc2UgdXBkYXRlIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czogJXMnLCBfc29ydGVkTmFtZXMyKTtcbiAgICB9XG5cbiAgICBpZiAoY29tcG9uZW50V2lsbE1vdW50VW5pcXVlTmFtZXMuc2l6ZSA+IDApIHtcbiAgICAgIHZhciBfc29ydGVkTmFtZXMzID0gc2V0VG9Tb3J0ZWRTdHJpbmcoY29tcG9uZW50V2lsbE1vdW50VW5pcXVlTmFtZXMpO1xuXG4gICAgICB3YXJuKCdjb21wb25lbnRXaWxsTW91bnQgaGFzIGJlZW4gcmVuYW1lZCwgYW5kIGlzIG5vdCByZWNvbW1lbmRlZCBmb3IgdXNlLiAnICsgJ1NlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvdW5zYWZlLWNvbXBvbmVudC1saWZlY3ljbGVzIGZvciBkZXRhaWxzLlxcblxcbicgKyAnKiBNb3ZlIGNvZGUgd2l0aCBzaWRlIGVmZmVjdHMgdG8gY29tcG9uZW50RGlkTW91bnQsIGFuZCBzZXQgaW5pdGlhbCBzdGF0ZSBpbiB0aGUgY29uc3RydWN0b3IuXFxuJyArICcqIFJlbmFtZSBjb21wb25lbnRXaWxsTW91bnQgdG8gVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCB0byBzdXBwcmVzcyAnICsgJ3RoaXMgd2FybmluZyBpbiBub24tc3RyaWN0IG1vZGUuIEluIFJlYWN0IDE4LngsIG9ubHkgdGhlIFVOU0FGRV8gbmFtZSB3aWxsIHdvcmsuICcgKyAnVG8gcmVuYW1lIGFsbCBkZXByZWNhdGVkIGxpZmVjeWNsZXMgdG8gdGhlaXIgbmV3IG5hbWVzLCB5b3UgY2FuIHJ1biAnICsgJ2BucHggcmVhY3QtY29kZW1vZCByZW5hbWUtdW5zYWZlLWxpZmVjeWNsZXNgIGluIHlvdXIgcHJvamVjdCBzb3VyY2UgZm9sZGVyLlxcbicgKyAnXFxuUGxlYXNlIHVwZGF0ZSB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6ICVzJywgX3NvcnRlZE5hbWVzMyk7XG4gICAgfVxuXG4gICAgaWYgKGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNVbmlxdWVOYW1lcy5zaXplID4gMCkge1xuICAgICAgdmFyIF9zb3J0ZWROYW1lczQgPSBzZXRUb1NvcnRlZFN0cmluZyhjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzVW5pcXVlTmFtZXMpO1xuXG4gICAgICB3YXJuKCdjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIGhhcyBiZWVuIHJlbmFtZWQsIGFuZCBpcyBub3QgcmVjb21tZW5kZWQgZm9yIHVzZS4gJyArICdTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3Vuc2FmZS1jb21wb25lbnQtbGlmZWN5Y2xlcyBmb3IgZGV0YWlscy5cXG5cXG4nICsgJyogTW92ZSBkYXRhIGZldGNoaW5nIGNvZGUgb3Igc2lkZSBlZmZlY3RzIHRvIGNvbXBvbmVudERpZFVwZGF0ZS5cXG4nICsgXCIqIElmIHlvdSdyZSB1cGRhdGluZyBzdGF0ZSB3aGVuZXZlciBwcm9wcyBjaGFuZ2UsIHJlZmFjdG9yIHlvdXIgXCIgKyAnY29kZSB0byB1c2UgbWVtb2l6YXRpb24gdGVjaG5pcXVlcyBvciBtb3ZlIGl0IHRvICcgKyAnc3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcy4gTGVhcm4gbW9yZSBhdDogaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2Rlcml2ZWQtc3RhdGVcXG4nICsgJyogUmVuYW1lIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgdG8gVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgdG8gc3VwcHJlc3MgJyArICd0aGlzIHdhcm5pbmcgaW4gbm9uLXN0cmljdCBtb2RlLiBJbiBSZWFjdCAxOC54LCBvbmx5IHRoZSBVTlNBRkVfIG5hbWUgd2lsbCB3b3JrLiAnICsgJ1RvIHJlbmFtZSBhbGwgZGVwcmVjYXRlZCBsaWZlY3ljbGVzIHRvIHRoZWlyIG5ldyBuYW1lcywgeW91IGNhbiBydW4gJyArICdgbnB4IHJlYWN0LWNvZGVtb2QgcmVuYW1lLXVuc2FmZS1saWZlY3ljbGVzYCBpbiB5b3VyIHByb2plY3Qgc291cmNlIGZvbGRlci5cXG4nICsgJ1xcblBsZWFzZSB1cGRhdGUgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOiAlcycsIF9zb3J0ZWROYW1lczQpO1xuICAgIH1cblxuICAgIGlmIChjb21wb25lbnRXaWxsVXBkYXRlVW5pcXVlTmFtZXMuc2l6ZSA+IDApIHtcbiAgICAgIHZhciBfc29ydGVkTmFtZXM1ID0gc2V0VG9Tb3J0ZWRTdHJpbmcoY29tcG9uZW50V2lsbFVwZGF0ZVVuaXF1ZU5hbWVzKTtcblxuICAgICAgd2FybignY29tcG9uZW50V2lsbFVwZGF0ZSBoYXMgYmVlbiByZW5hbWVkLCBhbmQgaXMgbm90IHJlY29tbWVuZGVkIGZvciB1c2UuICcgKyAnU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay91bnNhZmUtY29tcG9uZW50LWxpZmVjeWNsZXMgZm9yIGRldGFpbHMuXFxuXFxuJyArICcqIE1vdmUgZGF0YSBmZXRjaGluZyBjb2RlIG9yIHNpZGUgZWZmZWN0cyB0byBjb21wb25lbnREaWRVcGRhdGUuXFxuJyArICcqIFJlbmFtZSBjb21wb25lbnRXaWxsVXBkYXRlIHRvIFVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlIHRvIHN1cHByZXNzICcgKyAndGhpcyB3YXJuaW5nIGluIG5vbi1zdHJpY3QgbW9kZS4gSW4gUmVhY3QgMTgueCwgb25seSB0aGUgVU5TQUZFXyBuYW1lIHdpbGwgd29yay4gJyArICdUbyByZW5hbWUgYWxsIGRlcHJlY2F0ZWQgbGlmZWN5Y2xlcyB0byB0aGVpciBuZXcgbmFtZXMsIHlvdSBjYW4gcnVuICcgKyAnYG5weCByZWFjdC1jb2RlbW9kIHJlbmFtZS11bnNhZmUtbGlmZWN5Y2xlc2AgaW4geW91ciBwcm9qZWN0IHNvdXJjZSBmb2xkZXIuXFxuJyArICdcXG5QbGVhc2UgdXBkYXRlIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czogJXMnLCBfc29ydGVkTmFtZXM1KTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIHBlbmRpbmdMZWdhY3lDb250ZXh0V2FybmluZyA9IG5ldyBNYXAoKTsgLy8gVHJhY2tzIGNvbXBvbmVudHMgd2UgaGF2ZSBhbHJlYWR5IHdhcm5lZCBhYm91dC5cblxuICB2YXIgZGlkV2FybkFib3V0TGVnYWN5Q29udGV4dCA9IG5ldyBTZXQoKTtcblxuICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5yZWNvcmRMZWdhY3lDb250ZXh0V2FybmluZyA9IGZ1bmN0aW9uIChmaWJlciwgaW5zdGFuY2UpIHtcbiAgICB2YXIgc3RyaWN0Um9vdCA9IGZpbmRTdHJpY3RSb290KGZpYmVyKTtcblxuICAgIGlmIChzdHJpY3RSb290ID09PSBudWxsKSB7XG4gICAgICBlcnJvcignRXhwZWN0ZWQgdG8gZmluZCBhIFN0cmljdE1vZGUgY29tcG9uZW50IGluIGEgc3RyaWN0IG1vZGUgdHJlZS4gJyArICdUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuXG4gICAgICByZXR1cm47XG4gICAgfSAvLyBEZWR1cCBzdHJhdGVneTogV2FybiBvbmNlIHBlciBjb21wb25lbnQuXG5cblxuICAgIGlmIChkaWRXYXJuQWJvdXRMZWdhY3lDb250ZXh0LmhhcyhmaWJlci50eXBlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB3YXJuaW5nc0ZvclJvb3QgPSBwZW5kaW5nTGVnYWN5Q29udGV4dFdhcm5pbmcuZ2V0KHN0cmljdFJvb3QpO1xuXG4gICAgaWYgKGZpYmVyLnR5cGUuY29udGV4dFR5cGVzICE9IG51bGwgfHwgZmliZXIudHlwZS5jaGlsZENvbnRleHRUeXBlcyAhPSBudWxsIHx8IGluc3RhbmNlICE9PSBudWxsICYmIHR5cGVvZiBpbnN0YW5jZS5nZXRDaGlsZENvbnRleHQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGlmICh3YXJuaW5nc0ZvclJvb3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB3YXJuaW5nc0ZvclJvb3QgPSBbXTtcbiAgICAgICAgcGVuZGluZ0xlZ2FjeUNvbnRleHRXYXJuaW5nLnNldChzdHJpY3RSb290LCB3YXJuaW5nc0ZvclJvb3QpO1xuICAgICAgfVxuXG4gICAgICB3YXJuaW5nc0ZvclJvb3QucHVzaChmaWJlcik7XG4gICAgfVxuICB9O1xuXG4gIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLmZsdXNoTGVnYWN5Q29udGV4dFdhcm5pbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgcGVuZGluZ0xlZ2FjeUNvbnRleHRXYXJuaW5nLmZvckVhY2goZnVuY3Rpb24gKGZpYmVyQXJyYXksIHN0cmljdFJvb3QpIHtcbiAgICAgIGlmIChmaWJlckFycmF5Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBmaXJzdEZpYmVyID0gZmliZXJBcnJheVswXTtcbiAgICAgIHZhciB1bmlxdWVOYW1lcyA9IG5ldyBTZXQoKTtcbiAgICAgIGZpYmVyQXJyYXkuZm9yRWFjaChmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgICAgdW5pcXVlTmFtZXMuYWRkKGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkgfHwgJ0NvbXBvbmVudCcpO1xuICAgICAgICBkaWRXYXJuQWJvdXRMZWdhY3lDb250ZXh0LmFkZChmaWJlci50eXBlKTtcbiAgICAgIH0pO1xuICAgICAgdmFyIHNvcnRlZE5hbWVzID0gc2V0VG9Tb3J0ZWRTdHJpbmcodW5pcXVlTmFtZXMpO1xuXG4gICAgICB0cnkge1xuICAgICAgICBzZXRDdXJyZW50RmliZXIoZmlyc3RGaWJlcik7XG5cbiAgICAgICAgZXJyb3IoJ0xlZ2FjeSBjb250ZXh0IEFQSSBoYXMgYmVlbiBkZXRlY3RlZCB3aXRoaW4gYSBzdHJpY3QtbW9kZSB0cmVlLicgKyAnXFxuXFxuVGhlIG9sZCBBUEkgd2lsbCBiZSBzdXBwb3J0ZWQgaW4gYWxsIDE2LnggcmVsZWFzZXMsIGJ1dCBhcHBsaWNhdGlvbnMgJyArICd1c2luZyBpdCBzaG91bGQgbWlncmF0ZSB0byB0aGUgbmV3IHZlcnNpb24uJyArICdcXG5cXG5QbGVhc2UgdXBkYXRlIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czogJXMnICsgJ1xcblxcbkxlYXJuIG1vcmUgYWJvdXQgdGhpcyB3YXJuaW5nIGhlcmU6IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9sZWdhY3ktY29udGV4dCcsIHNvcnRlZE5hbWVzKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MuZGlzY2FyZFBlbmRpbmdXYXJuaW5ncyA9IGZ1bmN0aW9uICgpIHtcbiAgICBwZW5kaW5nQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MgPSBbXTtcbiAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzID0gW107XG4gICAgcGVuZGluZ0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncyA9IFtdO1xuICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzID0gW107XG4gICAgcGVuZGluZ0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncyA9IFtdO1xuICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzID0gW107XG4gICAgcGVuZGluZ0xlZ2FjeUNvbnRleHRXYXJuaW5nID0gbmV3IE1hcCgpO1xuICB9O1xufVxuXG5mdW5jdGlvbiByZXNvbHZlRGVmYXVsdFByb3BzKENvbXBvbmVudCwgYmFzZVByb3BzKSB7XG4gIGlmIChDb21wb25lbnQgJiYgQ29tcG9uZW50LmRlZmF1bHRQcm9wcykge1xuICAgIC8vIFJlc29sdmUgZGVmYXVsdCBwcm9wcy4gVGFrZW4gZnJvbSBSZWFjdEVsZW1lbnRcbiAgICB2YXIgcHJvcHMgPSBfYXNzaWduKHt9LCBiYXNlUHJvcHMpO1xuXG4gICAgdmFyIGRlZmF1bHRQcm9wcyA9IENvbXBvbmVudC5kZWZhdWx0UHJvcHM7XG5cbiAgICBmb3IgKHZhciBwcm9wTmFtZSBpbiBkZWZhdWx0UHJvcHMpIHtcbiAgICAgIGlmIChwcm9wc1twcm9wTmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBkZWZhdWx0UHJvcHNbcHJvcE5hbWVdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwcm9wcztcbiAgfVxuXG4gIHJldHVybiBiYXNlUHJvcHM7XG59XG5cbi8vIE1heCAzMSBiaXQgaW50ZWdlci4gVGhlIG1heCBpbnRlZ2VyIHNpemUgaW4gVjggZm9yIDMyLWJpdCBzeXN0ZW1zLlxuLy8gTWF0aC5wb3coMiwgMzApIC0gMVxuLy8gMGIxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTFcbnZhciBNQVhfU0lHTkVEXzMxX0JJVF9JTlQgPSAxMDczNzQxODIzO1xuXG52YXIgdmFsdWVDdXJzb3IgPSBjcmVhdGVDdXJzb3IobnVsbCk7XG52YXIgcmVuZGVyZXJTaWdpbDtcblxue1xuICAvLyBVc2UgdGhpcyB0byBkZXRlY3QgbXVsdGlwbGUgcmVuZGVyZXJzIHVzaW5nIHRoZSBzYW1lIGNvbnRleHRcbiAgcmVuZGVyZXJTaWdpbCA9IHt9O1xufVxuXG52YXIgY3VycmVudGx5UmVuZGVyaW5nRmliZXIgPSBudWxsO1xudmFyIGxhc3RDb250ZXh0RGVwZW5kZW5jeSA9IG51bGw7XG52YXIgbGFzdENvbnRleHRXaXRoQWxsQml0c09ic2VydmVkID0gbnVsbDtcbnZhciBpc0Rpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWID0gZmFsc2U7XG5mdW5jdGlvbiByZXNldENvbnRleHREZXBlbmRlbmNpZXMoKSB7XG4gIC8vIFRoaXMgaXMgY2FsbGVkIHJpZ2h0IGJlZm9yZSBSZWFjdCB5aWVsZHMgZXhlY3V0aW9uLCB0byBlbnN1cmUgYHJlYWRDb250ZXh0YFxuICAvLyBjYW5ub3QgYmUgY2FsbGVkIG91dHNpZGUgdGhlIHJlbmRlciBwaGFzZS5cbiAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIgPSBudWxsO1xuICBsYXN0Q29udGV4dERlcGVuZGVuY3kgPSBudWxsO1xuICBsYXN0Q29udGV4dFdpdGhBbGxCaXRzT2JzZXJ2ZWQgPSBudWxsO1xuXG4gIHtcbiAgICBpc0Rpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWID0gZmFsc2U7XG4gIH1cbn1cbmZ1bmN0aW9uIGVudGVyRGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYoKSB7XG4gIHtcbiAgICBpc0Rpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWID0gdHJ1ZTtcbiAgfVxufVxuZnVuY3Rpb24gZXhpdERpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWKCkge1xuICB7XG4gICAgaXNEaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFViA9IGZhbHNlO1xuICB9XG59XG5mdW5jdGlvbiBwdXNoUHJvdmlkZXIocHJvdmlkZXJGaWJlciwgbmV4dFZhbHVlKSB7XG4gIHZhciBjb250ZXh0ID0gcHJvdmlkZXJGaWJlci50eXBlLl9jb250ZXh0O1xuXG4gIHtcbiAgICBwdXNoKHZhbHVlQ3Vyc29yLCBjb250ZXh0Ll9jdXJyZW50VmFsdWUsIHByb3ZpZGVyRmliZXIpO1xuICAgIGNvbnRleHQuX2N1cnJlbnRWYWx1ZSA9IG5leHRWYWx1ZTtcblxuICAgIHtcbiAgICAgIGlmIChjb250ZXh0Ll9jdXJyZW50UmVuZGVyZXIgIT09IHVuZGVmaW5lZCAmJiBjb250ZXh0Ll9jdXJyZW50UmVuZGVyZXIgIT09IG51bGwgJiYgY29udGV4dC5fY3VycmVudFJlbmRlcmVyICE9PSByZW5kZXJlclNpZ2lsKSB7XG4gICAgICAgIGVycm9yKCdEZXRlY3RlZCBtdWx0aXBsZSByZW5kZXJlcnMgY29uY3VycmVudGx5IHJlbmRlcmluZyB0aGUgJyArICdzYW1lIGNvbnRleHQgcHJvdmlkZXIuIFRoaXMgaXMgY3VycmVudGx5IHVuc3VwcG9ydGVkLicpO1xuICAgICAgfVxuXG4gICAgICBjb250ZXh0Ll9jdXJyZW50UmVuZGVyZXIgPSByZW5kZXJlclNpZ2lsO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gcG9wUHJvdmlkZXIocHJvdmlkZXJGaWJlcikge1xuICB2YXIgY3VycmVudFZhbHVlID0gdmFsdWVDdXJzb3IuY3VycmVudDtcbiAgcG9wKHZhbHVlQ3Vyc29yLCBwcm92aWRlckZpYmVyKTtcbiAgdmFyIGNvbnRleHQgPSBwcm92aWRlckZpYmVyLnR5cGUuX2NvbnRleHQ7XG5cbiAge1xuICAgIGNvbnRleHQuX2N1cnJlbnRWYWx1ZSA9IGN1cnJlbnRWYWx1ZTtcbiAgfVxufVxuZnVuY3Rpb24gY2FsY3VsYXRlQ2hhbmdlZEJpdHMoY29udGV4dCwgbmV3VmFsdWUsIG9sZFZhbHVlKSB7XG4gIGlmIChvYmplY3RJcyhvbGRWYWx1ZSwgbmV3VmFsdWUpKSB7XG4gICAgLy8gTm8gY2hhbmdlXG4gICAgcmV0dXJuIDA7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGNoYW5nZWRCaXRzID0gdHlwZW9mIGNvbnRleHQuX2NhbGN1bGF0ZUNoYW5nZWRCaXRzID09PSAnZnVuY3Rpb24nID8gY29udGV4dC5fY2FsY3VsYXRlQ2hhbmdlZEJpdHMob2xkVmFsdWUsIG5ld1ZhbHVlKSA6IE1BWF9TSUdORURfMzFfQklUX0lOVDtcblxuICAgIHtcbiAgICAgIGlmICgoY2hhbmdlZEJpdHMgJiBNQVhfU0lHTkVEXzMxX0JJVF9JTlQpICE9PSBjaGFuZ2VkQml0cykge1xuICAgICAgICBlcnJvcignY2FsY3VsYXRlQ2hhbmdlZEJpdHM6IEV4cGVjdGVkIHRoZSByZXR1cm4gdmFsdWUgdG8gYmUgYSAnICsgJzMxLWJpdCBpbnRlZ2VyLiBJbnN0ZWFkIHJlY2VpdmVkOiAlcycsIGNoYW5nZWRCaXRzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY2hhbmdlZEJpdHMgfCAwO1xuICB9XG59XG5mdW5jdGlvbiBzY2hlZHVsZVdvcmtPblBhcmVudFBhdGgocGFyZW50LCByZW5kZXJMYW5lcykge1xuICAvLyBVcGRhdGUgdGhlIGNoaWxkIGxhbmVzIG9mIGFsbCB0aGUgYW5jZXN0b3JzLCBpbmNsdWRpbmcgdGhlIGFsdGVybmF0ZXMuXG4gIHZhciBub2RlID0gcGFyZW50O1xuXG4gIHdoaWxlIChub2RlICE9PSBudWxsKSB7XG4gICAgdmFyIGFsdGVybmF0ZSA9IG5vZGUuYWx0ZXJuYXRlO1xuXG4gICAgaWYgKCFpc1N1YnNldE9mTGFuZXMobm9kZS5jaGlsZExhbmVzLCByZW5kZXJMYW5lcykpIHtcbiAgICAgIG5vZGUuY2hpbGRMYW5lcyA9IG1lcmdlTGFuZXMobm9kZS5jaGlsZExhbmVzLCByZW5kZXJMYW5lcyk7XG5cbiAgICAgIGlmIChhbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgICAgYWx0ZXJuYXRlLmNoaWxkTGFuZXMgPSBtZXJnZUxhbmVzKGFsdGVybmF0ZS5jaGlsZExhbmVzLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChhbHRlcm5hdGUgIT09IG51bGwgJiYgIWlzU3Vic2V0T2ZMYW5lcyhhbHRlcm5hdGUuY2hpbGRMYW5lcywgcmVuZGVyTGFuZXMpKSB7XG4gICAgICBhbHRlcm5hdGUuY2hpbGRMYW5lcyA9IG1lcmdlTGFuZXMoYWx0ZXJuYXRlLmNoaWxkTGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTmVpdGhlciBhbHRlcm5hdGUgd2FzIHVwZGF0ZWQsIHdoaWNoIG1lYW5zIHRoZSByZXN0IG9mIHRoZVxuICAgICAgLy8gYW5jZXN0b3IgcGF0aCBhbHJlYWR5IGhhcyBzdWZmaWNpZW50IHByaW9yaXR5LlxuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICB9XG59XG5mdW5jdGlvbiBwcm9wYWdhdGVDb250ZXh0Q2hhbmdlKHdvcmtJblByb2dyZXNzLCBjb250ZXh0LCBjaGFuZ2VkQml0cywgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIGZpYmVyID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG5cbiAgaWYgKGZpYmVyICE9PSBudWxsKSB7XG4gICAgLy8gU2V0IHRoZSByZXR1cm4gcG9pbnRlciBvZiB0aGUgY2hpbGQgdG8gdGhlIHdvcmstaW4tcHJvZ3Jlc3MgZmliZXIuXG4gICAgZmliZXIucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gIH1cblxuICB3aGlsZSAoZmliZXIgIT09IG51bGwpIHtcbiAgICB2YXIgbmV4dEZpYmVyID0gdm9pZCAwOyAvLyBWaXNpdCB0aGlzIGZpYmVyLlxuXG4gICAgdmFyIGxpc3QgPSBmaWJlci5kZXBlbmRlbmNpZXM7XG5cbiAgICBpZiAobGlzdCAhPT0gbnVsbCkge1xuICAgICAgbmV4dEZpYmVyID0gZmliZXIuY2hpbGQ7XG4gICAgICB2YXIgZGVwZW5kZW5jeSA9IGxpc3QuZmlyc3RDb250ZXh0O1xuXG4gICAgICB3aGlsZSAoZGVwZW5kZW5jeSAhPT0gbnVsbCkge1xuICAgICAgICAvLyBDaGVjayBpZiB0aGUgY29udGV4dCBtYXRjaGVzLlxuICAgICAgICBpZiAoZGVwZW5kZW5jeS5jb250ZXh0ID09PSBjb250ZXh0ICYmIChkZXBlbmRlbmN5Lm9ic2VydmVkQml0cyAmIGNoYW5nZWRCaXRzKSAhPT0gMCkge1xuICAgICAgICAgIC8vIE1hdGNoISBTY2hlZHVsZSBhbiB1cGRhdGUgb24gdGhpcyBmaWJlci5cbiAgICAgICAgICBpZiAoZmliZXIudGFnID09PSBDbGFzc0NvbXBvbmVudCkge1xuICAgICAgICAgICAgLy8gU2NoZWR1bGUgYSBmb3JjZSB1cGRhdGUgb24gdGhlIHdvcmstaW4tcHJvZ3Jlc3MuXG4gICAgICAgICAgICB2YXIgdXBkYXRlID0gY3JlYXRlVXBkYXRlKE5vVGltZXN0YW1wLCBwaWNrQXJiaXRyYXJ5TGFuZShyZW5kZXJMYW5lcykpO1xuICAgICAgICAgICAgdXBkYXRlLnRhZyA9IEZvcmNlVXBkYXRlOyAvLyBUT0RPOiBCZWNhdXNlIHdlIGRvbid0IGhhdmUgYSB3b3JrLWluLXByb2dyZXNzLCB0aGlzIHdpbGwgYWRkIHRoZVxuICAgICAgICAgICAgLy8gdXBkYXRlIHRvIHRoZSBjdXJyZW50IGZpYmVyLCB0b28sIHdoaWNoIG1lYW5zIGl0IHdpbGwgcGVyc2lzdCBldmVuIGlmXG4gICAgICAgICAgICAvLyB0aGlzIHJlbmRlciBpcyB0aHJvd24gYXdheS4gU2luY2UgaXQncyBhIHJhY2UgY29uZGl0aW9uLCBub3Qgc3VyZSBpdCdzXG4gICAgICAgICAgICAvLyB3b3J0aCBmaXhpbmcuXG5cbiAgICAgICAgICAgIGVucXVldWVVcGRhdGUoZmliZXIsIHVwZGF0ZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZmliZXIubGFuZXMgPSBtZXJnZUxhbmVzKGZpYmVyLmxhbmVzLCByZW5kZXJMYW5lcyk7XG4gICAgICAgICAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZTtcblxuICAgICAgICAgIGlmIChhbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGFsdGVybmF0ZS5sYW5lcyA9IG1lcmdlTGFuZXMoYWx0ZXJuYXRlLmxhbmVzLCByZW5kZXJMYW5lcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc2NoZWR1bGVXb3JrT25QYXJlbnRQYXRoKGZpYmVyLnJldHVybiwgcmVuZGVyTGFuZXMpOyAvLyBNYXJrIHRoZSB1cGRhdGVkIGxhbmVzIG9uIHRoZSBsaXN0LCB0b28uXG5cbiAgICAgICAgICBsaXN0LmxhbmVzID0gbWVyZ2VMYW5lcyhsaXN0LmxhbmVzLCByZW5kZXJMYW5lcyk7IC8vIFNpbmNlIHdlIGFscmVhZHkgZm91bmQgYSBtYXRjaCwgd2UgY2FuIHN0b3AgdHJhdmVyc2luZyB0aGVcbiAgICAgICAgICAvLyBkZXBlbmRlbmN5IGxpc3QuXG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGRlcGVuZGVuY3kgPSBkZXBlbmRlbmN5Lm5leHQ7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChmaWJlci50YWcgPT09IENvbnRleHRQcm92aWRlcikge1xuICAgICAgLy8gRG9uJ3Qgc2NhbiBkZWVwZXIgaWYgdGhpcyBpcyBhIG1hdGNoaW5nIHByb3ZpZGVyXG4gICAgICBuZXh0RmliZXIgPSBmaWJlci50eXBlID09PSB3b3JrSW5Qcm9ncmVzcy50eXBlID8gbnVsbCA6IGZpYmVyLmNoaWxkO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUcmF2ZXJzZSBkb3duLlxuICAgICAgbmV4dEZpYmVyID0gZmliZXIuY2hpbGQ7XG4gICAgfVxuXG4gICAgaWYgKG5leHRGaWJlciAhPT0gbnVsbCkge1xuICAgICAgLy8gU2V0IHRoZSByZXR1cm4gcG9pbnRlciBvZiB0aGUgY2hpbGQgdG8gdGhlIHdvcmstaW4tcHJvZ3Jlc3MgZmliZXIuXG4gICAgICBuZXh0RmliZXIucmV0dXJuID0gZmliZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5vIGNoaWxkLiBUcmF2ZXJzZSB0byBuZXh0IHNpYmxpbmcuXG4gICAgICBuZXh0RmliZXIgPSBmaWJlcjtcblxuICAgICAgd2hpbGUgKG5leHRGaWJlciAhPT0gbnVsbCkge1xuICAgICAgICBpZiAobmV4dEZpYmVyID09PSB3b3JrSW5Qcm9ncmVzcykge1xuICAgICAgICAgIC8vIFdlJ3JlIGJhY2sgdG8gdGhlIHJvb3Qgb2YgdGhpcyBzdWJ0cmVlLiBFeGl0LlxuICAgICAgICAgIG5leHRGaWJlciA9IG51bGw7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2libGluZyA9IG5leHRGaWJlci5zaWJsaW5nO1xuXG4gICAgICAgIGlmIChzaWJsaW5nICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gU2V0IHRoZSByZXR1cm4gcG9pbnRlciBvZiB0aGUgc2libGluZyB0byB0aGUgd29yay1pbi1wcm9ncmVzcyBmaWJlci5cbiAgICAgICAgICBzaWJsaW5nLnJldHVybiA9IG5leHRGaWJlci5yZXR1cm47XG4gICAgICAgICAgbmV4dEZpYmVyID0gc2libGluZztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSAvLyBObyBtb3JlIHNpYmxpbmdzLiBUcmF2ZXJzZSB1cC5cblxuXG4gICAgICAgIG5leHRGaWJlciA9IG5leHRGaWJlci5yZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgZmliZXIgPSBuZXh0RmliZXI7XG4gIH1cbn1cbmZ1bmN0aW9uIHByZXBhcmVUb1JlYWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciA9IHdvcmtJblByb2dyZXNzO1xuICBsYXN0Q29udGV4dERlcGVuZGVuY3kgPSBudWxsO1xuICBsYXN0Q29udGV4dFdpdGhBbGxCaXRzT2JzZXJ2ZWQgPSBudWxsO1xuICB2YXIgZGVwZW5kZW5jaWVzID0gd29ya0luUHJvZ3Jlc3MuZGVwZW5kZW5jaWVzO1xuXG4gIGlmIChkZXBlbmRlbmNpZXMgIT09IG51bGwpIHtcbiAgICB2YXIgZmlyc3RDb250ZXh0ID0gZGVwZW5kZW5jaWVzLmZpcnN0Q29udGV4dDtcblxuICAgIGlmIChmaXJzdENvbnRleHQgIT09IG51bGwpIHtcbiAgICAgIGlmIChpbmNsdWRlc1NvbWVMYW5lKGRlcGVuZGVuY2llcy5sYW5lcywgcmVuZGVyTGFuZXMpKSB7XG4gICAgICAgIC8vIENvbnRleHQgbGlzdCBoYXMgYSBwZW5kaW5nIHVwZGF0ZS4gTWFyayB0aGF0IHRoaXMgZmliZXIgcGVyZm9ybWVkIHdvcmsuXG4gICAgICAgIG1hcmtXb3JrSW5Qcm9ncmVzc1JlY2VpdmVkVXBkYXRlKCk7XG4gICAgICB9IC8vIFJlc2V0IHRoZSB3b3JrLWluLXByb2dyZXNzIGxpc3RcblxuXG4gICAgICBkZXBlbmRlbmNpZXMuZmlyc3RDb250ZXh0ID0gbnVsbDtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICB7XG4gICAgLy8gVGhpcyB3YXJuaW5nIHdvdWxkIGZpcmUgaWYgeW91IHJlYWQgY29udGV4dCBpbnNpZGUgYSBIb29rIGxpa2UgdXNlTWVtby5cbiAgICAvLyBVbmxpa2UgdGhlIGNsYXNzIGNoZWNrIGJlbG93LCBpdCdzIG5vdCBlbmZvcmNlZCBpbiBwcm9kdWN0aW9uIGZvciBwZXJmLlxuICAgIGlmIChpc0Rpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWKSB7XG4gICAgICBlcnJvcignQ29udGV4dCBjYW4gb25seSBiZSByZWFkIHdoaWxlIFJlYWN0IGlzIHJlbmRlcmluZy4gJyArICdJbiBjbGFzc2VzLCB5b3UgY2FuIHJlYWQgaXQgaW4gdGhlIHJlbmRlciBtZXRob2Qgb3IgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLiAnICsgJ0luIGZ1bmN0aW9uIGNvbXBvbmVudHMsIHlvdSBjYW4gcmVhZCBpdCBkaXJlY3RseSBpbiB0aGUgZnVuY3Rpb24gYm9keSwgYnV0IG5vdCAnICsgJ2luc2lkZSBIb29rcyBsaWtlIHVzZVJlZHVjZXIoKSBvciB1c2VNZW1vKCkuJyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGxhc3RDb250ZXh0V2l0aEFsbEJpdHNPYnNlcnZlZCA9PT0gY29udGV4dCkgOyBlbHNlIGlmIChvYnNlcnZlZEJpdHMgPT09IGZhbHNlIHx8IG9ic2VydmVkQml0cyA9PT0gMCkgOyBlbHNlIHtcbiAgICB2YXIgcmVzb2x2ZWRPYnNlcnZlZEJpdHM7IC8vIEF2b2lkIGRlb3B0aW5nIG9uIG9ic2VydmFibGUgYXJndW1lbnRzIG9yIGhldGVyb2dlbmVvdXMgdHlwZXMuXG5cbiAgICBpZiAodHlwZW9mIG9ic2VydmVkQml0cyAhPT0gJ251bWJlcicgfHwgb2JzZXJ2ZWRCaXRzID09PSBNQVhfU0lHTkVEXzMxX0JJVF9JTlQpIHtcbiAgICAgIC8vIE9ic2VydmUgYWxsIHVwZGF0ZXMuXG4gICAgICBsYXN0Q29udGV4dFdpdGhBbGxCaXRzT2JzZXJ2ZWQgPSBjb250ZXh0O1xuICAgICAgcmVzb2x2ZWRPYnNlcnZlZEJpdHMgPSBNQVhfU0lHTkVEXzMxX0JJVF9JTlQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc29sdmVkT2JzZXJ2ZWRCaXRzID0gb2JzZXJ2ZWRCaXRzO1xuICAgIH1cblxuICAgIHZhciBjb250ZXh0SXRlbSA9IHtcbiAgICAgIGNvbnRleHQ6IGNvbnRleHQsXG4gICAgICBvYnNlcnZlZEJpdHM6IHJlc29sdmVkT2JzZXJ2ZWRCaXRzLFxuICAgICAgbmV4dDogbnVsbFxuICAgIH07XG5cbiAgICBpZiAobGFzdENvbnRleHREZXBlbmRlbmN5ID09PSBudWxsKSB7XG4gICAgICBpZiAoIShjdXJyZW50bHlSZW5kZXJpbmdGaWJlciAhPT0gbnVsbCkpIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCBcIkNvbnRleHQgY2FuIG9ubHkgYmUgcmVhZCB3aGlsZSBSZWFjdCBpcyByZW5kZXJpbmcuIEluIGNsYXNzZXMsIHlvdSBjYW4gcmVhZCBpdCBpbiB0aGUgcmVuZGVyIG1ldGhvZCBvciBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMuIEluIGZ1bmN0aW9uIGNvbXBvbmVudHMsIHlvdSBjYW4gcmVhZCBpdCBkaXJlY3RseSBpbiB0aGUgZnVuY3Rpb24gYm9keSwgYnV0IG5vdCBpbnNpZGUgSG9va3MgbGlrZSB1c2VSZWR1Y2VyKCkgb3IgdXNlTWVtbygpLlwiICk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gVGhpcyBpcyB0aGUgZmlyc3QgZGVwZW5kZW5jeSBmb3IgdGhpcyBjb21wb25lbnQuIENyZWF0ZSBhIG5ldyBsaXN0LlxuXG5cbiAgICAgIGxhc3RDb250ZXh0RGVwZW5kZW5jeSA9IGNvbnRleHRJdGVtO1xuICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIuZGVwZW5kZW5jaWVzID0ge1xuICAgICAgICBsYW5lczogTm9MYW5lcyxcbiAgICAgICAgZmlyc3RDb250ZXh0OiBjb250ZXh0SXRlbSxcbiAgICAgICAgcmVzcG9uZGVyczogbnVsbFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQXBwZW5kIGEgbmV3IGNvbnRleHQgaXRlbS5cbiAgICAgIGxhc3RDb250ZXh0RGVwZW5kZW5jeSA9IGxhc3RDb250ZXh0RGVwZW5kZW5jeS5uZXh0ID0gY29udGV4dEl0ZW07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuICBjb250ZXh0Ll9jdXJyZW50VmFsdWUgO1xufVxuXG52YXIgVXBkYXRlU3RhdGUgPSAwO1xudmFyIFJlcGxhY2VTdGF0ZSA9IDE7XG52YXIgRm9yY2VVcGRhdGUgPSAyO1xudmFyIENhcHR1cmVVcGRhdGUgPSAzOyAvLyBHbG9iYWwgc3RhdGUgdGhhdCBpcyByZXNldCBhdCB0aGUgYmVnaW5uaW5nIG9mIGNhbGxpbmcgYHByb2Nlc3NVcGRhdGVRdWV1ZWAuXG4vLyBJdCBzaG91bGQgb25seSBiZSByZWFkIHJpZ2h0IGFmdGVyIGNhbGxpbmcgYHByb2Nlc3NVcGRhdGVRdWV1ZWAsIHZpYVxuLy8gYGNoZWNrSGFzRm9yY2VVcGRhdGVBZnRlclByb2Nlc3NpbmdgLlxuXG52YXIgaGFzRm9yY2VVcGRhdGUgPSBmYWxzZTtcbnZhciBkaWRXYXJuVXBkYXRlSW5zaWRlVXBkYXRlO1xudmFyIGN1cnJlbnRseVByb2Nlc3NpbmdRdWV1ZTtcblxue1xuICBkaWRXYXJuVXBkYXRlSW5zaWRlVXBkYXRlID0gZmFsc2U7XG4gIGN1cnJlbnRseVByb2Nlc3NpbmdRdWV1ZSA9IG51bGw7XG59XG5cbmZ1bmN0aW9uIGluaXRpYWxpemVVcGRhdGVRdWV1ZShmaWJlcikge1xuICB2YXIgcXVldWUgPSB7XG4gICAgYmFzZVN0YXRlOiBmaWJlci5tZW1vaXplZFN0YXRlLFxuICAgIGZpcnN0QmFzZVVwZGF0ZTogbnVsbCxcbiAgICBsYXN0QmFzZVVwZGF0ZTogbnVsbCxcbiAgICBzaGFyZWQ6IHtcbiAgICAgIHBlbmRpbmc6IG51bGxcbiAgICB9LFxuICAgIGVmZmVjdHM6IG51bGxcbiAgfTtcbiAgZmliZXIudXBkYXRlUXVldWUgPSBxdWV1ZTtcbn1cbmZ1bmN0aW9uIGNsb25lVXBkYXRlUXVldWUoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpIHtcbiAgLy8gQ2xvbmUgdGhlIHVwZGF0ZSBxdWV1ZSBmcm9tIGN1cnJlbnQuIFVubGVzcyBpdCdzIGFscmVhZHkgYSBjbG9uZS5cbiAgdmFyIHF1ZXVlID0gd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWU7XG4gIHZhciBjdXJyZW50UXVldWUgPSBjdXJyZW50LnVwZGF0ZVF1ZXVlO1xuXG4gIGlmIChxdWV1ZSA9PT0gY3VycmVudFF1ZXVlKSB7XG4gICAgdmFyIGNsb25lID0ge1xuICAgICAgYmFzZVN0YXRlOiBjdXJyZW50UXVldWUuYmFzZVN0YXRlLFxuICAgICAgZmlyc3RCYXNlVXBkYXRlOiBjdXJyZW50UXVldWUuZmlyc3RCYXNlVXBkYXRlLFxuICAgICAgbGFzdEJhc2VVcGRhdGU6IGN1cnJlbnRRdWV1ZS5sYXN0QmFzZVVwZGF0ZSxcbiAgICAgIHNoYXJlZDogY3VycmVudFF1ZXVlLnNoYXJlZCxcbiAgICAgIGVmZmVjdHM6IGN1cnJlbnRRdWV1ZS5lZmZlY3RzXG4gICAgfTtcbiAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IGNsb25lO1xuICB9XG59XG5mdW5jdGlvbiBjcmVhdGVVcGRhdGUoZXZlbnRUaW1lLCBsYW5lKSB7XG4gIHZhciB1cGRhdGUgPSB7XG4gICAgZXZlbnRUaW1lOiBldmVudFRpbWUsXG4gICAgbGFuZTogbGFuZSxcbiAgICB0YWc6IFVwZGF0ZVN0YXRlLFxuICAgIHBheWxvYWQ6IG51bGwsXG4gICAgY2FsbGJhY2s6IG51bGwsXG4gICAgbmV4dDogbnVsbFxuICB9O1xuICByZXR1cm4gdXBkYXRlO1xufVxuZnVuY3Rpb24gZW5xdWV1ZVVwZGF0ZShmaWJlciwgdXBkYXRlKSB7XG4gIHZhciB1cGRhdGVRdWV1ZSA9IGZpYmVyLnVwZGF0ZVF1ZXVlO1xuXG4gIGlmICh1cGRhdGVRdWV1ZSA9PT0gbnVsbCkge1xuICAgIC8vIE9ubHkgb2NjdXJzIGlmIHRoZSBmaWJlciBoYXMgYmVlbiB1bm1vdW50ZWQuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHNoYXJlZFF1ZXVlID0gdXBkYXRlUXVldWUuc2hhcmVkO1xuICB2YXIgcGVuZGluZyA9IHNoYXJlZFF1ZXVlLnBlbmRpbmc7XG5cbiAgaWYgKHBlbmRpbmcgPT09IG51bGwpIHtcbiAgICAvLyBUaGlzIGlzIHRoZSBmaXJzdCB1cGRhdGUuIENyZWF0ZSBhIGNpcmN1bGFyIGxpc3QuXG4gICAgdXBkYXRlLm5leHQgPSB1cGRhdGU7XG4gIH0gZWxzZSB7XG4gICAgdXBkYXRlLm5leHQgPSBwZW5kaW5nLm5leHQ7XG4gICAgcGVuZGluZy5uZXh0ID0gdXBkYXRlO1xuICB9XG5cbiAgc2hhcmVkUXVldWUucGVuZGluZyA9IHVwZGF0ZTtcblxuICB7XG4gICAgaWYgKGN1cnJlbnRseVByb2Nlc3NpbmdRdWV1ZSA9PT0gc2hhcmVkUXVldWUgJiYgIWRpZFdhcm5VcGRhdGVJbnNpZGVVcGRhdGUpIHtcbiAgICAgIGVycm9yKCdBbiB1cGRhdGUgKHNldFN0YXRlLCByZXBsYWNlU3RhdGUsIG9yIGZvcmNlVXBkYXRlKSB3YXMgc2NoZWR1bGVkICcgKyAnZnJvbSBpbnNpZGUgYW4gdXBkYXRlIGZ1bmN0aW9uLiBVcGRhdGUgZnVuY3Rpb25zIHNob3VsZCBiZSBwdXJlLCAnICsgJ3dpdGggemVybyBzaWRlLWVmZmVjdHMuIENvbnNpZGVyIHVzaW5nIGNvbXBvbmVudERpZFVwZGF0ZSBvciBhICcgKyAnY2FsbGJhY2suJyk7XG5cbiAgICAgIGRpZFdhcm5VcGRhdGVJbnNpZGVVcGRhdGUgPSB0cnVlO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZW5xdWV1ZUNhcHR1cmVkVXBkYXRlKHdvcmtJblByb2dyZXNzLCBjYXB0dXJlZFVwZGF0ZSkge1xuICAvLyBDYXB0dXJlZCB1cGRhdGVzIGFyZSB1cGRhdGVzIHRoYXQgYXJlIHRocm93biBieSBhIGNoaWxkIGR1cmluZyB0aGUgcmVuZGVyXG4gIC8vIHBoYXNlLiBUaGV5IHNob3VsZCBiZSBkaXNjYXJkZWQgaWYgdGhlIHJlbmRlciBpcyBhYm9ydGVkLiBUaGVyZWZvcmUsXG4gIC8vIHdlIHNob3VsZCBvbmx5IHB1dCB0aGVtIG9uIHRoZSB3b3JrLWluLXByb2dyZXNzIHF1ZXVlLCBub3QgdGhlIGN1cnJlbnQgb25lLlxuICB2YXIgcXVldWUgPSB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZTsgLy8gQ2hlY2sgaWYgdGhlIHdvcmstaW4tcHJvZ3Jlc3MgcXVldWUgaXMgYSBjbG9uZS5cblxuICB2YXIgY3VycmVudCA9IHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZTtcblxuICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgIHZhciBjdXJyZW50UXVldWUgPSBjdXJyZW50LnVwZGF0ZVF1ZXVlO1xuXG4gICAgaWYgKHF1ZXVlID09PSBjdXJyZW50UXVldWUpIHtcbiAgICAgIC8vIFRoZSB3b3JrLWluLXByb2dyZXNzIHF1ZXVlIGlzIHRoZSBzYW1lIGFzIGN1cnJlbnQuIFRoaXMgaGFwcGVucyB3aGVuXG4gICAgICAvLyB3ZSBiYWlsIG91dCBvbiBhIHBhcmVudCBmaWJlciB0aGF0IHRoZW4gY2FwdHVyZXMgYW4gZXJyb3IgdGhyb3duIGJ5XG4gICAgICAvLyBhIGNoaWxkLiBTaW5jZSB3ZSB3YW50IHRvIGFwcGVuZCB0aGUgdXBkYXRlIG9ubHkgdG8gdGhlIHdvcmstaW5cbiAgICAgIC8vIC1wcm9ncmVzcyBxdWV1ZSwgd2UgbmVlZCB0byBjbG9uZSB0aGUgdXBkYXRlcy4gV2UgdXN1YWxseSBjbG9uZSBkdXJpbmdcbiAgICAgIC8vIHByb2Nlc3NVcGRhdGVRdWV1ZSwgYnV0IHRoYXQgZGlkbid0IGhhcHBlbiBpbiB0aGlzIGNhc2UgYmVjYXVzZSB3ZVxuICAgICAgLy8gc2tpcHBlZCBvdmVyIHRoZSBwYXJlbnQgd2hlbiB3ZSBiYWlsZWQgb3V0LlxuICAgICAgdmFyIG5ld0ZpcnN0ID0gbnVsbDtcbiAgICAgIHZhciBuZXdMYXN0ID0gbnVsbDtcbiAgICAgIHZhciBmaXJzdEJhc2VVcGRhdGUgPSBxdWV1ZS5maXJzdEJhc2VVcGRhdGU7XG5cbiAgICAgIGlmIChmaXJzdEJhc2VVcGRhdGUgIT09IG51bGwpIHtcbiAgICAgICAgLy8gTG9vcCB0aHJvdWdoIHRoZSB1cGRhdGVzIGFuZCBjbG9uZSB0aGVtLlxuICAgICAgICB2YXIgdXBkYXRlID0gZmlyc3RCYXNlVXBkYXRlO1xuXG4gICAgICAgIGRvIHtcbiAgICAgICAgICB2YXIgY2xvbmUgPSB7XG4gICAgICAgICAgICBldmVudFRpbWU6IHVwZGF0ZS5ldmVudFRpbWUsXG4gICAgICAgICAgICBsYW5lOiB1cGRhdGUubGFuZSxcbiAgICAgICAgICAgIHRhZzogdXBkYXRlLnRhZyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHVwZGF0ZS5wYXlsb2FkLFxuICAgICAgICAgICAgY2FsbGJhY2s6IHVwZGF0ZS5jYWxsYmFjayxcbiAgICAgICAgICAgIG5leHQ6IG51bGxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgaWYgKG5ld0xhc3QgPT09IG51bGwpIHtcbiAgICAgICAgICAgIG5ld0ZpcnN0ID0gbmV3TGFzdCA9IGNsb25lO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXdMYXN0Lm5leHQgPSBjbG9uZTtcbiAgICAgICAgICAgIG5ld0xhc3QgPSBjbG9uZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB1cGRhdGUgPSB1cGRhdGUubmV4dDtcbiAgICAgICAgfSB3aGlsZSAodXBkYXRlICE9PSBudWxsKTsgLy8gQXBwZW5kIHRoZSBjYXB0dXJlZCB1cGRhdGUgdGhlIGVuZCBvZiB0aGUgY2xvbmVkIGxpc3QuXG5cblxuICAgICAgICBpZiAobmV3TGFzdCA9PT0gbnVsbCkge1xuICAgICAgICAgIG5ld0ZpcnN0ID0gbmV3TGFzdCA9IGNhcHR1cmVkVXBkYXRlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld0xhc3QubmV4dCA9IGNhcHR1cmVkVXBkYXRlO1xuICAgICAgICAgIG5ld0xhc3QgPSBjYXB0dXJlZFVwZGF0ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVGhlcmUgYXJlIG5vIGJhc2UgdXBkYXRlcy5cbiAgICAgICAgbmV3Rmlyc3QgPSBuZXdMYXN0ID0gY2FwdHVyZWRVcGRhdGU7XG4gICAgICB9XG5cbiAgICAgIHF1ZXVlID0ge1xuICAgICAgICBiYXNlU3RhdGU6IGN1cnJlbnRRdWV1ZS5iYXNlU3RhdGUsXG4gICAgICAgIGZpcnN0QmFzZVVwZGF0ZTogbmV3Rmlyc3QsXG4gICAgICAgIGxhc3RCYXNlVXBkYXRlOiBuZXdMYXN0LFxuICAgICAgICBzaGFyZWQ6IGN1cnJlbnRRdWV1ZS5zaGFyZWQsXG4gICAgICAgIGVmZmVjdHM6IGN1cnJlbnRRdWV1ZS5lZmZlY3RzXG4gICAgICB9O1xuICAgICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBxdWV1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0gLy8gQXBwZW5kIHRoZSB1cGRhdGUgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdC5cblxuXG4gIHZhciBsYXN0QmFzZVVwZGF0ZSA9IHF1ZXVlLmxhc3RCYXNlVXBkYXRlO1xuXG4gIGlmIChsYXN0QmFzZVVwZGF0ZSA9PT0gbnVsbCkge1xuICAgIHF1ZXVlLmZpcnN0QmFzZVVwZGF0ZSA9IGNhcHR1cmVkVXBkYXRlO1xuICB9IGVsc2Uge1xuICAgIGxhc3RCYXNlVXBkYXRlLm5leHQgPSBjYXB0dXJlZFVwZGF0ZTtcbiAgfVxuXG4gIHF1ZXVlLmxhc3RCYXNlVXBkYXRlID0gY2FwdHVyZWRVcGRhdGU7XG59XG5cbmZ1bmN0aW9uIGdldFN0YXRlRnJvbVVwZGF0ZSh3b3JrSW5Qcm9ncmVzcywgcXVldWUsIHVwZGF0ZSwgcHJldlN0YXRlLCBuZXh0UHJvcHMsIGluc3RhbmNlKSB7XG4gIHN3aXRjaCAodXBkYXRlLnRhZykge1xuICAgIGNhc2UgUmVwbGFjZVN0YXRlOlxuICAgICAge1xuICAgICAgICB2YXIgcGF5bG9hZCA9IHVwZGF0ZS5wYXlsb2FkO1xuXG4gICAgICAgIGlmICh0eXBlb2YgcGF5bG9hZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIC8vIFVwZGF0ZXIgZnVuY3Rpb25cbiAgICAgICAgICB7XG4gICAgICAgICAgICBlbnRlckRpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIG5leHRTdGF0ZSA9IHBheWxvYWQuY2FsbChpbnN0YW5jZSwgcHJldlN0YXRlLCBuZXh0UHJvcHMpO1xuXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKCB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgICAgICAgICBkaXNhYmxlTG9ncygpO1xuXG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZC5jYWxsKGluc3RhbmNlLCBwcmV2U3RhdGUsIG5leHRQcm9wcyk7XG4gICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXhpdERpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIG5leHRTdGF0ZTtcbiAgICAgICAgfSAvLyBTdGF0ZSBvYmplY3RcblxuXG4gICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgfVxuXG4gICAgY2FzZSBDYXB0dXJlVXBkYXRlOlxuICAgICAge1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyA9IHdvcmtJblByb2dyZXNzLmZsYWdzICYgflNob3VsZENhcHR1cmUgfCBEaWRDYXB0dXJlO1xuICAgICAgfVxuICAgIC8vIEludGVudGlvbmFsIGZhbGx0aHJvdWdoXG5cbiAgICBjYXNlIFVwZGF0ZVN0YXRlOlxuICAgICAge1xuICAgICAgICB2YXIgX3BheWxvYWQgPSB1cGRhdGUucGF5bG9hZDtcbiAgICAgICAgdmFyIHBhcnRpYWxTdGF0ZTtcblxuICAgICAgICBpZiAodHlwZW9mIF9wYXlsb2FkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgLy8gVXBkYXRlciBmdW5jdGlvblxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGVudGVyRGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwYXJ0aWFsU3RhdGUgPSBfcGF5bG9hZC5jYWxsKGluc3RhbmNlLCBwcmV2U3RhdGUsIG5leHRQcm9wcyk7XG5cbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RNb2RlKSB7XG4gICAgICAgICAgICAgIGRpc2FibGVMb2dzKCk7XG5cbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBfcGF5bG9hZC5jYWxsKGluc3RhbmNlLCBwcmV2U3RhdGUsIG5leHRQcm9wcyk7XG4gICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXhpdERpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFBhcnRpYWwgc3RhdGUgb2JqZWN0XG4gICAgICAgICAgcGFydGlhbFN0YXRlID0gX3BheWxvYWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFydGlhbFN0YXRlID09PSBudWxsIHx8IHBhcnRpYWxTdGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgLy8gTnVsbCBhbmQgdW5kZWZpbmVkIGFyZSB0cmVhdGVkIGFzIG5vLW9wcy5cbiAgICAgICAgICByZXR1cm4gcHJldlN0YXRlO1xuICAgICAgICB9IC8vIE1lcmdlIHRoZSBwYXJ0aWFsIHN0YXRlIGFuZCB0aGUgcHJldmlvdXMgc3RhdGUuXG5cblxuICAgICAgICByZXR1cm4gX2Fzc2lnbih7fSwgcHJldlN0YXRlLCBwYXJ0aWFsU3RhdGUpO1xuICAgICAgfVxuXG4gICAgY2FzZSBGb3JjZVVwZGF0ZTpcbiAgICAgIHtcbiAgICAgICAgaGFzRm9yY2VVcGRhdGUgPSB0cnVlO1xuICAgICAgICByZXR1cm4gcHJldlN0YXRlO1xuICAgICAgfVxuICB9XG5cbiAgcmV0dXJuIHByZXZTdGF0ZTtcbn1cblxuZnVuY3Rpb24gcHJvY2Vzc1VwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzLCBwcm9wcywgaW5zdGFuY2UsIHJlbmRlckxhbmVzKSB7XG4gIC8vIFRoaXMgaXMgYWx3YXlzIG5vbi1udWxsIG9uIGEgQ2xhc3NDb21wb25lbnQgb3IgSG9zdFJvb3RcbiAgdmFyIHF1ZXVlID0gd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWU7XG4gIGhhc0ZvcmNlVXBkYXRlID0gZmFsc2U7XG5cbiAge1xuICAgIGN1cnJlbnRseVByb2Nlc3NpbmdRdWV1ZSA9IHF1ZXVlLnNoYXJlZDtcbiAgfVxuXG4gIHZhciBmaXJzdEJhc2VVcGRhdGUgPSBxdWV1ZS5maXJzdEJhc2VVcGRhdGU7XG4gIHZhciBsYXN0QmFzZVVwZGF0ZSA9IHF1ZXVlLmxhc3RCYXNlVXBkYXRlOyAvLyBDaGVjayBpZiB0aGVyZSBhcmUgcGVuZGluZyB1cGRhdGVzLiBJZiBzbywgdHJhbnNmZXIgdGhlbSB0byB0aGUgYmFzZSBxdWV1ZS5cblxuICB2YXIgcGVuZGluZ1F1ZXVlID0gcXVldWUuc2hhcmVkLnBlbmRpbmc7XG5cbiAgaWYgKHBlbmRpbmdRdWV1ZSAhPT0gbnVsbCkge1xuICAgIHF1ZXVlLnNoYXJlZC5wZW5kaW5nID0gbnVsbDsgLy8gVGhlIHBlbmRpbmcgcXVldWUgaXMgY2lyY3VsYXIuIERpc2Nvbm5lY3QgdGhlIHBvaW50ZXIgYmV0d2VlbiBmaXJzdFxuICAgIC8vIGFuZCBsYXN0IHNvIHRoYXQgaXQncyBub24tY2lyY3VsYXIuXG5cbiAgICB2YXIgbGFzdFBlbmRpbmdVcGRhdGUgPSBwZW5kaW5nUXVldWU7XG4gICAgdmFyIGZpcnN0UGVuZGluZ1VwZGF0ZSA9IGxhc3RQZW5kaW5nVXBkYXRlLm5leHQ7XG4gICAgbGFzdFBlbmRpbmdVcGRhdGUubmV4dCA9IG51bGw7IC8vIEFwcGVuZCBwZW5kaW5nIHVwZGF0ZXMgdG8gYmFzZSBxdWV1ZVxuXG4gICAgaWYgKGxhc3RCYXNlVXBkYXRlID09PSBudWxsKSB7XG4gICAgICBmaXJzdEJhc2VVcGRhdGUgPSBmaXJzdFBlbmRpbmdVcGRhdGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxhc3RCYXNlVXBkYXRlLm5leHQgPSBmaXJzdFBlbmRpbmdVcGRhdGU7XG4gICAgfVxuXG4gICAgbGFzdEJhc2VVcGRhdGUgPSBsYXN0UGVuZGluZ1VwZGF0ZTsgLy8gSWYgdGhlcmUncyBhIGN1cnJlbnQgcXVldWUsIGFuZCBpdCdzIGRpZmZlcmVudCBmcm9tIHRoZSBiYXNlIHF1ZXVlLCB0aGVuXG4gICAgLy8gd2UgbmVlZCB0byB0cmFuc2ZlciB0aGUgdXBkYXRlcyB0byB0aGF0IHF1ZXVlLCB0b28uIEJlY2F1c2UgdGhlIGJhc2VcbiAgICAvLyBxdWV1ZSBpcyBhIHNpbmdseS1saW5rZWQgbGlzdCB3aXRoIG5vIGN5Y2xlcywgd2UgY2FuIGFwcGVuZCB0byBib3RoXG4gICAgLy8gbGlzdHMgYW5kIHRha2UgYWR2YW50YWdlIG9mIHN0cnVjdHVyYWwgc2hhcmluZy5cbiAgICAvLyBUT0RPOiBQYXNzIGBjdXJyZW50YCBhcyBhcmd1bWVudFxuXG4gICAgdmFyIGN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcy5hbHRlcm5hdGU7XG5cbiAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgLy8gVGhpcyBpcyBhbHdheXMgbm9uLW51bGwgb24gYSBDbGFzc0NvbXBvbmVudCBvciBIb3N0Um9vdFxuICAgICAgdmFyIGN1cnJlbnRRdWV1ZSA9IGN1cnJlbnQudXBkYXRlUXVldWU7XG4gICAgICB2YXIgY3VycmVudExhc3RCYXNlVXBkYXRlID0gY3VycmVudFF1ZXVlLmxhc3RCYXNlVXBkYXRlO1xuXG4gICAgICBpZiAoY3VycmVudExhc3RCYXNlVXBkYXRlICE9PSBsYXN0QmFzZVVwZGF0ZSkge1xuICAgICAgICBpZiAoY3VycmVudExhc3RCYXNlVXBkYXRlID09PSBudWxsKSB7XG4gICAgICAgICAgY3VycmVudFF1ZXVlLmZpcnN0QmFzZVVwZGF0ZSA9IGZpcnN0UGVuZGluZ1VwZGF0ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjdXJyZW50TGFzdEJhc2VVcGRhdGUubmV4dCA9IGZpcnN0UGVuZGluZ1VwZGF0ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGN1cnJlbnRRdWV1ZS5sYXN0QmFzZVVwZGF0ZSA9IGxhc3RQZW5kaW5nVXBkYXRlO1xuICAgICAgfVxuICAgIH1cbiAgfSAvLyBUaGVzZSB2YWx1ZXMgbWF5IGNoYW5nZSBhcyB3ZSBwcm9jZXNzIHRoZSBxdWV1ZS5cblxuXG4gIGlmIChmaXJzdEJhc2VVcGRhdGUgIT09IG51bGwpIHtcbiAgICAvLyBJdGVyYXRlIHRocm91Z2ggdGhlIGxpc3Qgb2YgdXBkYXRlcyB0byBjb21wdXRlIHRoZSByZXN1bHQuXG4gICAgdmFyIG5ld1N0YXRlID0gcXVldWUuYmFzZVN0YXRlOyAvLyBUT0RPOiBEb24ndCBuZWVkIHRvIGFjY3VtdWxhdGUgdGhpcy4gSW5zdGVhZCwgd2UgY2FuIHJlbW92ZSByZW5kZXJMYW5lc1xuICAgIC8vIGZyb20gdGhlIG9yaWdpbmFsIGxhbmVzLlxuXG4gICAgdmFyIG5ld0xhbmVzID0gTm9MYW5lcztcbiAgICB2YXIgbmV3QmFzZVN0YXRlID0gbnVsbDtcbiAgICB2YXIgbmV3Rmlyc3RCYXNlVXBkYXRlID0gbnVsbDtcbiAgICB2YXIgbmV3TGFzdEJhc2VVcGRhdGUgPSBudWxsO1xuICAgIHZhciB1cGRhdGUgPSBmaXJzdEJhc2VVcGRhdGU7XG5cbiAgICBkbyB7XG4gICAgICB2YXIgdXBkYXRlTGFuZSA9IHVwZGF0ZS5sYW5lO1xuICAgICAgdmFyIHVwZGF0ZUV2ZW50VGltZSA9IHVwZGF0ZS5ldmVudFRpbWU7XG5cbiAgICAgIGlmICghaXNTdWJzZXRPZkxhbmVzKHJlbmRlckxhbmVzLCB1cGRhdGVMYW5lKSkge1xuICAgICAgICAvLyBQcmlvcml0eSBpcyBpbnN1ZmZpY2llbnQuIFNraXAgdGhpcyB1cGRhdGUuIElmIHRoaXMgaXMgdGhlIGZpcnN0XG4gICAgICAgIC8vIHNraXBwZWQgdXBkYXRlLCB0aGUgcHJldmlvdXMgdXBkYXRlL3N0YXRlIGlzIHRoZSBuZXcgYmFzZVxuICAgICAgICAvLyB1cGRhdGUvc3RhdGUuXG4gICAgICAgIHZhciBjbG9uZSA9IHtcbiAgICAgICAgICBldmVudFRpbWU6IHVwZGF0ZUV2ZW50VGltZSxcbiAgICAgICAgICBsYW5lOiB1cGRhdGVMYW5lLFxuICAgICAgICAgIHRhZzogdXBkYXRlLnRhZyxcbiAgICAgICAgICBwYXlsb2FkOiB1cGRhdGUucGF5bG9hZCxcbiAgICAgICAgICBjYWxsYmFjazogdXBkYXRlLmNhbGxiYWNrLFxuICAgICAgICAgIG5leHQ6IG51bGxcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAobmV3TGFzdEJhc2VVcGRhdGUgPT09IG51bGwpIHtcbiAgICAgICAgICBuZXdGaXJzdEJhc2VVcGRhdGUgPSBuZXdMYXN0QmFzZVVwZGF0ZSA9IGNsb25lO1xuICAgICAgICAgIG5ld0Jhc2VTdGF0ZSA9IG5ld1N0YXRlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld0xhc3RCYXNlVXBkYXRlID0gbmV3TGFzdEJhc2VVcGRhdGUubmV4dCA9IGNsb25lO1xuICAgICAgICB9IC8vIFVwZGF0ZSB0aGUgcmVtYWluaW5nIHByaW9yaXR5IGluIHRoZSBxdWV1ZS5cblxuXG4gICAgICAgIG5ld0xhbmVzID0gbWVyZ2VMYW5lcyhuZXdMYW5lcywgdXBkYXRlTGFuZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUaGlzIHVwZGF0ZSBkb2VzIGhhdmUgc3VmZmljaWVudCBwcmlvcml0eS5cbiAgICAgICAgaWYgKG5ld0xhc3RCYXNlVXBkYXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgdmFyIF9jbG9uZSA9IHtcbiAgICAgICAgICAgIGV2ZW50VGltZTogdXBkYXRlRXZlbnRUaW1lLFxuICAgICAgICAgICAgLy8gVGhpcyB1cGRhdGUgaXMgZ29pbmcgdG8gYmUgY29tbWl0dGVkIHNvIHdlIG5ldmVyIHdhbnQgdW5jb21taXRcbiAgICAgICAgICAgIC8vIGl0LiBVc2luZyBOb0xhbmUgd29ya3MgYmVjYXVzZSAwIGlzIGEgc3Vic2V0IG9mIGFsbCBiaXRtYXNrcywgc29cbiAgICAgICAgICAgIC8vIHRoaXMgd2lsbCBuZXZlciBiZSBza2lwcGVkIGJ5IHRoZSBjaGVjayBhYm92ZS5cbiAgICAgICAgICAgIGxhbmU6IE5vTGFuZSxcbiAgICAgICAgICAgIHRhZzogdXBkYXRlLnRhZyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHVwZGF0ZS5wYXlsb2FkLFxuICAgICAgICAgICAgY2FsbGJhY2s6IHVwZGF0ZS5jYWxsYmFjayxcbiAgICAgICAgICAgIG5leHQ6IG51bGxcbiAgICAgICAgICB9O1xuICAgICAgICAgIG5ld0xhc3RCYXNlVXBkYXRlID0gbmV3TGFzdEJhc2VVcGRhdGUubmV4dCA9IF9jbG9uZTtcbiAgICAgICAgfSAvLyBQcm9jZXNzIHRoaXMgdXBkYXRlLlxuXG5cbiAgICAgICAgbmV3U3RhdGUgPSBnZXRTdGF0ZUZyb21VcGRhdGUod29ya0luUHJvZ3Jlc3MsIHF1ZXVlLCB1cGRhdGUsIG5ld1N0YXRlLCBwcm9wcywgaW5zdGFuY2UpO1xuICAgICAgICB2YXIgY2FsbGJhY2sgPSB1cGRhdGUuY2FsbGJhY2s7XG5cbiAgICAgICAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gQ2FsbGJhY2s7XG4gICAgICAgICAgdmFyIGVmZmVjdHMgPSBxdWV1ZS5lZmZlY3RzO1xuXG4gICAgICAgICAgaWYgKGVmZmVjdHMgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHF1ZXVlLmVmZmVjdHMgPSBbdXBkYXRlXTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZWZmZWN0cy5wdXNoKHVwZGF0ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHVwZGF0ZSA9IHVwZGF0ZS5uZXh0O1xuXG4gICAgICBpZiAodXBkYXRlID09PSBudWxsKSB7XG4gICAgICAgIHBlbmRpbmdRdWV1ZSA9IHF1ZXVlLnNoYXJlZC5wZW5kaW5nO1xuXG4gICAgICAgIGlmIChwZW5kaW5nUXVldWUgPT09IG51bGwpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBBbiB1cGRhdGUgd2FzIHNjaGVkdWxlZCBmcm9tIGluc2lkZSBhIHJlZHVjZXIuIEFkZCB0aGUgbmV3XG4gICAgICAgICAgLy8gcGVuZGluZyB1cGRhdGVzIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QgYW5kIGtlZXAgcHJvY2Vzc2luZy5cbiAgICAgICAgICB2YXIgX2xhc3RQZW5kaW5nVXBkYXRlID0gcGVuZGluZ1F1ZXVlOyAvLyBJbnRlbnRpb25hbGx5IHVuc291bmQuIFBlbmRpbmcgdXBkYXRlcyBmb3JtIGEgY2lyY3VsYXIgbGlzdCwgYnV0IHdlXG4gICAgICAgICAgLy8gdW5yYXZlbCB0aGVtIHdoZW4gdHJhbnNmZXJyaW5nIHRoZW0gdG8gdGhlIGJhc2UgcXVldWUuXG5cbiAgICAgICAgICB2YXIgX2ZpcnN0UGVuZGluZ1VwZGF0ZSA9IF9sYXN0UGVuZGluZ1VwZGF0ZS5uZXh0O1xuICAgICAgICAgIF9sYXN0UGVuZGluZ1VwZGF0ZS5uZXh0ID0gbnVsbDtcbiAgICAgICAgICB1cGRhdGUgPSBfZmlyc3RQZW5kaW5nVXBkYXRlO1xuICAgICAgICAgIHF1ZXVlLmxhc3RCYXNlVXBkYXRlID0gX2xhc3RQZW5kaW5nVXBkYXRlO1xuICAgICAgICAgIHF1ZXVlLnNoYXJlZC5wZW5kaW5nID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gd2hpbGUgKHRydWUpO1xuXG4gICAgaWYgKG5ld0xhc3RCYXNlVXBkYXRlID09PSBudWxsKSB7XG4gICAgICBuZXdCYXNlU3RhdGUgPSBuZXdTdGF0ZTtcbiAgICB9XG5cbiAgICBxdWV1ZS5iYXNlU3RhdGUgPSBuZXdCYXNlU3RhdGU7XG4gICAgcXVldWUuZmlyc3RCYXNlVXBkYXRlID0gbmV3Rmlyc3RCYXNlVXBkYXRlO1xuICAgIHF1ZXVlLmxhc3RCYXNlVXBkYXRlID0gbmV3TGFzdEJhc2VVcGRhdGU7IC8vIFNldCB0aGUgcmVtYWluaW5nIGV4cGlyYXRpb24gdGltZSB0byBiZSB3aGF0ZXZlciBpcyByZW1haW5pbmcgaW4gdGhlIHF1ZXVlLlxuICAgIC8vIFRoaXMgc2hvdWxkIGJlIGZpbmUgYmVjYXVzZSB0aGUgb25seSB0d28gb3RoZXIgdGhpbmdzIHRoYXQgY29udHJpYnV0ZSB0b1xuICAgIC8vIGV4cGlyYXRpb24gdGltZSBhcmUgcHJvcHMgYW5kIGNvbnRleHQuIFdlJ3JlIGFscmVhZHkgaW4gdGhlIG1pZGRsZSBvZiB0aGVcbiAgICAvLyBiZWdpbiBwaGFzZSBieSB0aGUgdGltZSB3ZSBzdGFydCBwcm9jZXNzaW5nIHRoZSBxdWV1ZSwgc28gd2UndmUgYWxyZWFkeVxuICAgIC8vIGRlYWx0IHdpdGggdGhlIHByb3BzLiBDb250ZXh0IGluIGNvbXBvbmVudHMgdGhhdCBzcGVjaWZ5XG4gICAgLy8gc2hvdWxkQ29tcG9uZW50VXBkYXRlIGlzIHRyaWNreTsgYnV0IHdlJ2xsIGhhdmUgdG8gYWNjb3VudCBmb3JcbiAgICAvLyB0aGF0IHJlZ2FyZGxlc3MuXG5cbiAgICBtYXJrU2tpcHBlZFVwZGF0ZUxhbmVzKG5ld0xhbmVzKTtcbiAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IG5ld0xhbmVzO1xuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBuZXdTdGF0ZTtcbiAgfVxuXG4gIHtcbiAgICBjdXJyZW50bHlQcm9jZXNzaW5nUXVldWUgPSBudWxsO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNhbGxDYWxsYmFjayhjYWxsYmFjaywgY29udGV4dCkge1xuICBpZiAoISh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiSW52YWxpZCBhcmd1bWVudCBwYXNzZWQgYXMgY2FsbGJhY2suIEV4cGVjdGVkIGEgZnVuY3Rpb24uIEluc3RlYWQgcmVjZWl2ZWQ6IFwiICsgY2FsbGJhY2sgKTtcbiAgICB9XG4gIH1cblxuICBjYWxsYmFjay5jYWxsKGNvbnRleHQpO1xufVxuXG5mdW5jdGlvbiByZXNldEhhc0ZvcmNlVXBkYXRlQmVmb3JlUHJvY2Vzc2luZygpIHtcbiAgaGFzRm9yY2VVcGRhdGUgPSBmYWxzZTtcbn1cbmZ1bmN0aW9uIGNoZWNrSGFzRm9yY2VVcGRhdGVBZnRlclByb2Nlc3NpbmcoKSB7XG4gIHJldHVybiBoYXNGb3JjZVVwZGF0ZTtcbn1cbmZ1bmN0aW9uIGNvbW1pdFVwZGF0ZVF1ZXVlKGZpbmlzaGVkV29yaywgZmluaXNoZWRRdWV1ZSwgaW5zdGFuY2UpIHtcbiAgLy8gQ29tbWl0IHRoZSBlZmZlY3RzXG4gIHZhciBlZmZlY3RzID0gZmluaXNoZWRRdWV1ZS5lZmZlY3RzO1xuICBmaW5pc2hlZFF1ZXVlLmVmZmVjdHMgPSBudWxsO1xuXG4gIGlmIChlZmZlY3RzICE9PSBudWxsKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlZmZlY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZWZmZWN0ID0gZWZmZWN0c1tpXTtcbiAgICAgIHZhciBjYWxsYmFjayA9IGVmZmVjdC5jYWxsYmFjaztcblxuICAgICAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICAgIGVmZmVjdC5jYWxsYmFjayA9IG51bGw7XG4gICAgICAgIGNhbGxDYWxsYmFjayhjYWxsYmFjaywgaW5zdGFuY2UpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgZmFrZUludGVybmFsSW5zdGFuY2UgPSB7fTtcbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTsgLy8gUmVhY3QuQ29tcG9uZW50IHVzZXMgYSBzaGFyZWQgZnJvemVuIG9iamVjdCBieSBkZWZhdWx0LlxuLy8gV2UnbGwgdXNlIGl0IHRvIGRldGVybWluZSB3aGV0aGVyIHdlIG5lZWQgdG8gaW5pdGlhbGl6ZSBsZWdhY3kgcmVmcy5cblxudmFyIGVtcHR5UmVmc09iamVjdCA9IG5ldyBSZWFjdC5Db21wb25lbnQoKS5yZWZzO1xudmFyIGRpZFdhcm5BYm91dFN0YXRlQXNzaWdubWVudEZvckNvbXBvbmVudDtcbnZhciBkaWRXYXJuQWJvdXRVbmluaXRpYWxpemVkU3RhdGU7XG52YXIgZGlkV2FybkFib3V0R2V0U25hcHNob3RCZWZvcmVVcGRhdGVXaXRob3V0RGlkVXBkYXRlO1xudmFyIGRpZFdhcm5BYm91dExlZ2FjeUxpZmVjeWNsZXNBbmREZXJpdmVkU3RhdGU7XG52YXIgZGlkV2FybkFib3V0VW5kZWZpbmVkRGVyaXZlZFN0YXRlO1xudmFyIHdhcm5PblVuZGVmaW5lZERlcml2ZWRTdGF0ZTtcbnZhciB3YXJuT25JbnZhbGlkQ2FsbGJhY2s7XG52YXIgZGlkV2FybkFib3V0RGlyZWN0bHlBc3NpZ25pbmdQcm9wc1RvU3RhdGU7XG52YXIgZGlkV2FybkFib3V0Q29udGV4dFR5cGVBbmRDb250ZXh0VHlwZXM7XG52YXIgZGlkV2FybkFib3V0SW52YWxpZGF0ZUNvbnRleHRUeXBlO1xuXG57XG4gIGRpZFdhcm5BYm91dFN0YXRlQXNzaWdubWVudEZvckNvbXBvbmVudCA9IG5ldyBTZXQoKTtcbiAgZGlkV2FybkFib3V0VW5pbml0aWFsaXplZFN0YXRlID0gbmV3IFNldCgpO1xuICBkaWRXYXJuQWJvdXRHZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZVdpdGhvdXREaWRVcGRhdGUgPSBuZXcgU2V0KCk7XG4gIGRpZFdhcm5BYm91dExlZ2FjeUxpZmVjeWNsZXNBbmREZXJpdmVkU3RhdGUgPSBuZXcgU2V0KCk7XG4gIGRpZFdhcm5BYm91dERpcmVjdGx5QXNzaWduaW5nUHJvcHNUb1N0YXRlID0gbmV3IFNldCgpO1xuICBkaWRXYXJuQWJvdXRVbmRlZmluZWREZXJpdmVkU3RhdGUgPSBuZXcgU2V0KCk7XG4gIGRpZFdhcm5BYm91dENvbnRleHRUeXBlQW5kQ29udGV4dFR5cGVzID0gbmV3IFNldCgpO1xuICBkaWRXYXJuQWJvdXRJbnZhbGlkYXRlQ29udGV4dFR5cGUgPSBuZXcgU2V0KCk7XG4gIHZhciBkaWRXYXJuT25JbnZhbGlkQ2FsbGJhY2sgPSBuZXcgU2V0KCk7XG5cbiAgd2Fybk9uSW52YWxpZENhbGxiYWNrID0gZnVuY3Rpb24gKGNhbGxiYWNrLCBjYWxsZXJOYW1lKSB7XG4gICAgaWYgKGNhbGxiYWNrID09PSBudWxsIHx8IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBrZXkgPSBjYWxsZXJOYW1lICsgJ18nICsgY2FsbGJhY2s7XG5cbiAgICBpZiAoIWRpZFdhcm5PbkludmFsaWRDYWxsYmFjay5oYXMoa2V5KSkge1xuICAgICAgZGlkV2Fybk9uSW52YWxpZENhbGxiYWNrLmFkZChrZXkpO1xuXG4gICAgICBlcnJvcignJXMoLi4uKTogRXhwZWN0ZWQgdGhlIGxhc3Qgb3B0aW9uYWwgYGNhbGxiYWNrYCBhcmd1bWVudCB0byBiZSBhICcgKyAnZnVuY3Rpb24uIEluc3RlYWQgcmVjZWl2ZWQ6ICVzLicsIGNhbGxlck5hbWUsIGNhbGxiYWNrKTtcbiAgICB9XG4gIH07XG5cbiAgd2Fybk9uVW5kZWZpbmVkRGVyaXZlZFN0YXRlID0gZnVuY3Rpb24gKHR5cGUsIHBhcnRpYWxTdGF0ZSkge1xuICAgIGlmIChwYXJ0aWFsU3RhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKHR5cGUpIHx8ICdDb21wb25lbnQnO1xuXG4gICAgICBpZiAoIWRpZFdhcm5BYm91dFVuZGVmaW5lZERlcml2ZWRTdGF0ZS5oYXMoY29tcG9uZW50TmFtZSkpIHtcbiAgICAgICAgZGlkV2FybkFib3V0VW5kZWZpbmVkRGVyaXZlZFN0YXRlLmFkZChjb21wb25lbnROYW1lKTtcblxuICAgICAgICBlcnJvcignJXMuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKCk6IEEgdmFsaWQgc3RhdGUgb2JqZWN0IChvciBudWxsKSBtdXN0IGJlIHJldHVybmVkLiAnICsgJ1lvdSBoYXZlIHJldHVybmVkIHVuZGVmaW5lZC4nLCBjb21wb25lbnROYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH07IC8vIFRoaXMgaXMgc28gZ3Jvc3MgYnV0IGl0J3MgYXQgbGVhc3Qgbm9uLWNyaXRpY2FsIGFuZCBjYW4gYmUgcmVtb3ZlZCBpZlxuICAvLyBpdCBjYXVzZXMgcHJvYmxlbXMuIFRoaXMgaXMgbWVhbnQgdG8gZ2l2ZSBhIG5pY2VyIGVycm9yIG1lc3NhZ2UgZm9yXG4gIC8vIFJlYWN0RE9NMTUudW5zdGFibGVfcmVuZGVyU3VidHJlZUludG9Db250YWluZXIocmVhY3RET00xNkNvbXBvbmVudCxcbiAgLy8gLi4uKSkgd2hpY2ggb3RoZXJ3aXNlIHRocm93cyBhIFwiX3Byb2Nlc3NDaGlsZENvbnRleHQgaXMgbm90IGEgZnVuY3Rpb25cIlxuICAvLyBleGNlcHRpb24uXG5cblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZmFrZUludGVybmFsSW5zdGFuY2UsICdfcHJvY2Vzc0NoaWxkQ29udGV4dCcsIHtcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICB2YWx1ZTogZnVuY3Rpb24gKCkge1xuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiX3Byb2Nlc3NDaGlsZENvbnRleHQgaXMgbm90IGF2YWlsYWJsZSBpbiBSZWFjdCAxNisuIFRoaXMgbGlrZWx5IG1lYW5zIHlvdSBoYXZlIG11bHRpcGxlIGNvcGllcyBvZiBSZWFjdCBhbmQgYXJlIGF0dGVtcHRpbmcgdG8gbmVzdCBhIFJlYWN0IDE1IHRyZWUgaW5zaWRlIGEgUmVhY3QgMTYgdHJlZSB1c2luZyB1bnN0YWJsZV9yZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lciwgd2hpY2ggaXNuJ3Qgc3VwcG9ydGVkLiBUcnkgdG8gbWFrZSBzdXJlIHlvdSBoYXZlIG9ubHkgb25lIGNvcHkgb2YgUmVhY3QgKGFuZCBpZGVhbGx5LCBzd2l0Y2ggdG8gUmVhY3RET00uY3JlYXRlUG9ydGFsKS5cIiApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgT2JqZWN0LmZyZWV6ZShmYWtlSW50ZXJuYWxJbnN0YW5jZSk7XG59XG5cbmZ1bmN0aW9uIGFwcGx5RGVyaXZlZFN0YXRlRnJvbVByb3BzKHdvcmtJblByb2dyZXNzLCBjdG9yLCBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMsIG5leHRQcm9wcykge1xuICB2YXIgcHJldlN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcblxuICB7XG4gICAgaWYgKCB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgZGlzYWJsZUxvZ3MoKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gSW52b2tlIHRoZSBmdW5jdGlvbiBhbiBleHRyYSB0aW1lIHRvIGhlbHAgZGV0ZWN0IHNpZGUtZWZmZWN0cy5cbiAgICAgICAgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKG5leHRQcm9wcywgcHJldlN0YXRlKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHJlZW5hYmxlTG9ncygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBwYXJ0aWFsU3RhdGUgPSBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMobmV4dFByb3BzLCBwcmV2U3RhdGUpO1xuXG4gIHtcbiAgICB3YXJuT25VbmRlZmluZWREZXJpdmVkU3RhdGUoY3RvciwgcGFydGlhbFN0YXRlKTtcbiAgfSAvLyBNZXJnZSB0aGUgcGFydGlhbCBzdGF0ZSBhbmQgdGhlIHByZXZpb3VzIHN0YXRlLlxuXG5cbiAgdmFyIG1lbW9pemVkU3RhdGUgPSBwYXJ0aWFsU3RhdGUgPT09IG51bGwgfHwgcGFydGlhbFN0YXRlID09PSB1bmRlZmluZWQgPyBwcmV2U3RhdGUgOiBfYXNzaWduKHt9LCBwcmV2U3RhdGUsIHBhcnRpYWxTdGF0ZSk7XG4gIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBtZW1vaXplZFN0YXRlOyAvLyBPbmNlIHRoZSB1cGRhdGUgcXVldWUgaXMgZW1wdHksIHBlcnNpc3QgdGhlIGRlcml2ZWQgc3RhdGUgb250byB0aGVcbiAgLy8gYmFzZSBzdGF0ZS5cblxuICBpZiAod29ya0luUHJvZ3Jlc3MubGFuZXMgPT09IE5vTGFuZXMpIHtcbiAgICAvLyBRdWV1ZSBpcyBhbHdheXMgbm9uLW51bGwgZm9yIGNsYXNzZXNcbiAgICB2YXIgdXBkYXRlUXVldWUgPSB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZTtcbiAgICB1cGRhdGVRdWV1ZS5iYXNlU3RhdGUgPSBtZW1vaXplZFN0YXRlO1xuICB9XG59XG52YXIgY2xhc3NDb21wb25lbnRVcGRhdGVyID0ge1xuICBpc01vdW50ZWQ6IGlzTW91bnRlZCxcbiAgZW5xdWV1ZVNldFN0YXRlOiBmdW5jdGlvbiAoaW5zdCwgcGF5bG9hZCwgY2FsbGJhY2spIHtcbiAgICB2YXIgZmliZXIgPSBnZXQoaW5zdCk7XG4gICAgdmFyIGV2ZW50VGltZSA9IHJlcXVlc3RFdmVudFRpbWUoKTtcbiAgICB2YXIgbGFuZSA9IHJlcXVlc3RVcGRhdGVMYW5lKGZpYmVyKTtcbiAgICB2YXIgdXBkYXRlID0gY3JlYXRlVXBkYXRlKGV2ZW50VGltZSwgbGFuZSk7XG4gICAgdXBkYXRlLnBheWxvYWQgPSBwYXlsb2FkO1xuXG4gICAgaWYgKGNhbGxiYWNrICE9PSB1bmRlZmluZWQgJiYgY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgIHtcbiAgICAgICAgd2Fybk9uSW52YWxpZENhbGxiYWNrKGNhbGxiYWNrLCAnc2V0U3RhdGUnKTtcbiAgICAgIH1cblxuICAgICAgdXBkYXRlLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgfVxuXG4gICAgZW5xdWV1ZVVwZGF0ZShmaWJlciwgdXBkYXRlKTtcbiAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIGxhbmUsIGV2ZW50VGltZSk7XG4gIH0sXG4gIGVucXVldWVSZXBsYWNlU3RhdGU6IGZ1bmN0aW9uIChpbnN0LCBwYXlsb2FkLCBjYWxsYmFjaykge1xuICAgIHZhciBmaWJlciA9IGdldChpbnN0KTtcbiAgICB2YXIgZXZlbnRUaW1lID0gcmVxdWVzdEV2ZW50VGltZSgpO1xuICAgIHZhciBsYW5lID0gcmVxdWVzdFVwZGF0ZUxhbmUoZmliZXIpO1xuICAgIHZhciB1cGRhdGUgPSBjcmVhdGVVcGRhdGUoZXZlbnRUaW1lLCBsYW5lKTtcbiAgICB1cGRhdGUudGFnID0gUmVwbGFjZVN0YXRlO1xuICAgIHVwZGF0ZS5wYXlsb2FkID0gcGF5bG9hZDtcblxuICAgIGlmIChjYWxsYmFjayAhPT0gdW5kZWZpbmVkICYmIGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICB7XG4gICAgICAgIHdhcm5PbkludmFsaWRDYWxsYmFjayhjYWxsYmFjaywgJ3JlcGxhY2VTdGF0ZScpO1xuICAgICAgfVxuXG4gICAgICB1cGRhdGUuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICB9XG5cbiAgICBlbnF1ZXVlVXBkYXRlKGZpYmVyLCB1cGRhdGUpO1xuICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgbGFuZSwgZXZlbnRUaW1lKTtcbiAgfSxcbiAgZW5xdWV1ZUZvcmNlVXBkYXRlOiBmdW5jdGlvbiAoaW5zdCwgY2FsbGJhY2spIHtcbiAgICB2YXIgZmliZXIgPSBnZXQoaW5zdCk7XG4gICAgdmFyIGV2ZW50VGltZSA9IHJlcXVlc3RFdmVudFRpbWUoKTtcbiAgICB2YXIgbGFuZSA9IHJlcXVlc3RVcGRhdGVMYW5lKGZpYmVyKTtcbiAgICB2YXIgdXBkYXRlID0gY3JlYXRlVXBkYXRlKGV2ZW50VGltZSwgbGFuZSk7XG4gICAgdXBkYXRlLnRhZyA9IEZvcmNlVXBkYXRlO1xuXG4gICAgaWYgKGNhbGxiYWNrICE9PSB1bmRlZmluZWQgJiYgY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgIHtcbiAgICAgICAgd2Fybk9uSW52YWxpZENhbGxiYWNrKGNhbGxiYWNrLCAnZm9yY2VVcGRhdGUnKTtcbiAgICAgIH1cblxuICAgICAgdXBkYXRlLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgfVxuXG4gICAgZW5xdWV1ZVVwZGF0ZShmaWJlciwgdXBkYXRlKTtcbiAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIGxhbmUsIGV2ZW50VGltZSk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGNoZWNrU2hvdWxkQ29tcG9uZW50VXBkYXRlKHdvcmtJblByb2dyZXNzLCBjdG9yLCBvbGRQcm9wcywgbmV3UHJvcHMsIG9sZFN0YXRlLCBuZXdTdGF0ZSwgbmV4dENvbnRleHQpIHtcbiAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuXG4gIGlmICh0eXBlb2YgaW5zdGFuY2Uuc2hvdWxkQ29tcG9uZW50VXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAge1xuICAgICAgaWYgKCB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgICBkaXNhYmxlTG9ncygpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gSW52b2tlIHRoZSBmdW5jdGlvbiBhbiBleHRyYSB0aW1lIHRvIGhlbHAgZGV0ZWN0IHNpZGUtZWZmZWN0cy5cbiAgICAgICAgICBpbnN0YW5jZS5zaG91bGRDb21wb25lbnRVcGRhdGUobmV3UHJvcHMsIG5ld1N0YXRlLCBuZXh0Q29udGV4dCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc2hvdWxkVXBkYXRlID0gaW5zdGFuY2Uuc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5ld1Byb3BzLCBuZXdTdGF0ZSwgbmV4dENvbnRleHQpO1xuXG4gICAge1xuICAgICAgaWYgKHNob3VsZFVwZGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGVycm9yKCclcy5zaG91bGRDb21wb25lbnRVcGRhdGUoKTogUmV0dXJuZWQgdW5kZWZpbmVkIGluc3RlYWQgb2YgYSAnICsgJ2Jvb2xlYW4gdmFsdWUuIE1ha2Ugc3VyZSB0byByZXR1cm4gdHJ1ZSBvciBmYWxzZS4nLCBnZXRDb21wb25lbnROYW1lKGN0b3IpIHx8ICdDb21wb25lbnQnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc2hvdWxkVXBkYXRlO1xuICB9XG5cbiAgaWYgKGN0b3IucHJvdG90eXBlICYmIGN0b3IucHJvdG90eXBlLmlzUHVyZVJlYWN0Q29tcG9uZW50KSB7XG4gICAgcmV0dXJuICFzaGFsbG93RXF1YWwob2xkUHJvcHMsIG5ld1Byb3BzKSB8fCAhc2hhbGxvd0VxdWFsKG9sZFN0YXRlLCBuZXdTdGF0ZSk7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gY2hlY2tDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBjdG9yLCBuZXdQcm9wcykge1xuICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG5cbiAge1xuICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZShjdG9yKSB8fCAnQ29tcG9uZW50JztcbiAgICB2YXIgcmVuZGVyUHJlc2VudCA9IGluc3RhbmNlLnJlbmRlcjtcblxuICAgIGlmICghcmVuZGVyUHJlc2VudCkge1xuICAgICAgaWYgKGN0b3IucHJvdG90eXBlICYmIHR5cGVvZiBjdG9yLnByb3RvdHlwZS5yZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZXJyb3IoJyVzKC4uLik6IE5vIGByZW5kZXJgIG1ldGhvZCBmb3VuZCBvbiB0aGUgcmV0dXJuZWQgY29tcG9uZW50ICcgKyAnaW5zdGFuY2U6IGRpZCB5b3UgYWNjaWRlbnRhbGx5IHJldHVybiBhbiBvYmplY3QgZnJvbSB0aGUgY29uc3RydWN0b3I/JywgbmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlcnJvcignJXMoLi4uKTogTm8gYHJlbmRlcmAgbWV0aG9kIGZvdW5kIG9uIHRoZSByZXR1cm5lZCBjb21wb25lbnQgJyArICdpbnN0YW5jZTogeW91IG1heSBoYXZlIGZvcmdvdHRlbiB0byBkZWZpbmUgYHJlbmRlcmAuJywgbmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGluc3RhbmNlLmdldEluaXRpYWxTdGF0ZSAmJiAhaW5zdGFuY2UuZ2V0SW5pdGlhbFN0YXRlLmlzUmVhY3RDbGFzc0FwcHJvdmVkICYmICFpbnN0YW5jZS5zdGF0ZSkge1xuICAgICAgZXJyb3IoJ2dldEluaXRpYWxTdGF0ZSB3YXMgZGVmaW5lZCBvbiAlcywgYSBwbGFpbiBKYXZhU2NyaXB0IGNsYXNzLiAnICsgJ1RoaXMgaXMgb25seSBzdXBwb3J0ZWQgZm9yIGNsYXNzZXMgY3JlYXRlZCB1c2luZyBSZWFjdC5jcmVhdGVDbGFzcy4gJyArICdEaWQgeW91IG1lYW4gdG8gZGVmaW5lIGEgc3RhdGUgcHJvcGVydHkgaW5zdGVhZD8nLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAoaW5zdGFuY2UuZ2V0RGVmYXVsdFByb3BzICYmICFpbnN0YW5jZS5nZXREZWZhdWx0UHJvcHMuaXNSZWFjdENsYXNzQXBwcm92ZWQpIHtcbiAgICAgIGVycm9yKCdnZXREZWZhdWx0UHJvcHMgd2FzIGRlZmluZWQgb24gJXMsIGEgcGxhaW4gSmF2YVNjcmlwdCBjbGFzcy4gJyArICdUaGlzIGlzIG9ubHkgc3VwcG9ydGVkIGZvciBjbGFzc2VzIGNyZWF0ZWQgdXNpbmcgUmVhY3QuY3JlYXRlQ2xhc3MuICcgKyAnVXNlIGEgc3RhdGljIHByb3BlcnR5IHRvIGRlZmluZSBkZWZhdWx0UHJvcHMgaW5zdGVhZC4nLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAoaW5zdGFuY2UucHJvcFR5cGVzKSB7XG4gICAgICBlcnJvcigncHJvcFR5cGVzIHdhcyBkZWZpbmVkIGFzIGFuIGluc3RhbmNlIHByb3BlcnR5IG9uICVzLiBVc2UgYSBzdGF0aWMgJyArICdwcm9wZXJ0eSB0byBkZWZpbmUgcHJvcFR5cGVzIGluc3RlYWQuJywgbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKGluc3RhbmNlLmNvbnRleHRUeXBlKSB7XG4gICAgICBlcnJvcignY29udGV4dFR5cGUgd2FzIGRlZmluZWQgYXMgYW4gaW5zdGFuY2UgcHJvcGVydHkgb24gJXMuIFVzZSBhIHN0YXRpYyAnICsgJ3Byb3BlcnR5IHRvIGRlZmluZSBjb250ZXh0VHlwZSBpbnN0ZWFkLicsIG5hbWUpO1xuICAgIH1cblxuICAgIHtcbiAgICAgIGlmIChpbnN0YW5jZS5jb250ZXh0VHlwZXMpIHtcbiAgICAgICAgZXJyb3IoJ2NvbnRleHRUeXBlcyB3YXMgZGVmaW5lZCBhcyBhbiBpbnN0YW5jZSBwcm9wZXJ0eSBvbiAlcy4gVXNlIGEgc3RhdGljICcgKyAncHJvcGVydHkgdG8gZGVmaW5lIGNvbnRleHRUeXBlcyBpbnN0ZWFkLicsIG5hbWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY3Rvci5jb250ZXh0VHlwZSAmJiBjdG9yLmNvbnRleHRUeXBlcyAmJiAhZGlkV2FybkFib3V0Q29udGV4dFR5cGVBbmRDb250ZXh0VHlwZXMuaGFzKGN0b3IpKSB7XG4gICAgICAgIGRpZFdhcm5BYm91dENvbnRleHRUeXBlQW5kQ29udGV4dFR5cGVzLmFkZChjdG9yKTtcblxuICAgICAgICBlcnJvcignJXMgZGVjbGFyZXMgYm90aCBjb250ZXh0VHlwZXMgYW5kIGNvbnRleHRUeXBlIHN0YXRpYyBwcm9wZXJ0aWVzLiAnICsgJ1RoZSBsZWdhY3kgY29udGV4dFR5cGVzIHByb3BlcnR5IHdpbGwgYmUgaWdub3JlZC4nLCBuYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFNob3VsZFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJyVzIGhhcyBhIG1ldGhvZCBjYWxsZWQgJyArICdjb21wb25lbnRTaG91bGRVcGRhdGUoKS4gRGlkIHlvdSBtZWFuIHNob3VsZENvbXBvbmVudFVwZGF0ZSgpPyAnICsgJ1RoZSBuYW1lIGlzIHBocmFzZWQgYXMgYSBxdWVzdGlvbiBiZWNhdXNlIHRoZSBmdW5jdGlvbiBpcyAnICsgJ2V4cGVjdGVkIHRvIHJldHVybiBhIHZhbHVlLicsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmIChjdG9yLnByb3RvdHlwZSAmJiBjdG9yLnByb3RvdHlwZS5pc1B1cmVSZWFjdENvbXBvbmVudCAmJiB0eXBlb2YgaW5zdGFuY2Uuc2hvdWxkQ29tcG9uZW50VXBkYXRlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgZXJyb3IoJyVzIGhhcyBhIG1ldGhvZCBjYWxsZWQgc2hvdWxkQ29tcG9uZW50VXBkYXRlKCkuICcgKyAnc2hvdWxkQ29tcG9uZW50VXBkYXRlIHNob3VsZCBub3QgYmUgdXNlZCB3aGVuIGV4dGVuZGluZyBSZWFjdC5QdXJlQ29tcG9uZW50LiAnICsgJ1BsZWFzZSBleHRlbmQgUmVhY3QuQ29tcG9uZW50IGlmIHNob3VsZENvbXBvbmVudFVwZGF0ZSBpcyB1c2VkLicsIGdldENvbXBvbmVudE5hbWUoY3RvcikgfHwgJ0EgcHVyZSBjb21wb25lbnQnKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZFVubW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCclcyBoYXMgYSBtZXRob2QgY2FsbGVkICcgKyAnY29tcG9uZW50RGlkVW5tb3VudCgpLiBCdXQgdGhlcmUgaXMgbm8gc3VjaCBsaWZlY3ljbGUgbWV0aG9kLiAnICsgJ0RpZCB5b3UgbWVhbiBjb21wb25lbnRXaWxsVW5tb3VudCgpPycsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkUmVjZWl2ZVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignJXMgaGFzIGEgbWV0aG9kIGNhbGxlZCAnICsgJ2NvbXBvbmVudERpZFJlY2VpdmVQcm9wcygpLiBCdXQgdGhlcmUgaXMgbm8gc3VjaCBsaWZlY3ljbGUgbWV0aG9kLiAnICsgJ0lmIHlvdSBtZWFudCB0byB1cGRhdGUgdGhlIHN0YXRlIGluIHJlc3BvbnNlIHRvIGNoYW5naW5nIHByb3BzLCAnICsgJ3VzZSBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKCkuIElmIHlvdSBtZWFudCB0byBmZXRjaCBkYXRhIG9yICcgKyAncnVuIHNpZGUtZWZmZWN0cyBvciBtdXRhdGlvbnMgYWZ0ZXIgUmVhY3QgaGFzIHVwZGF0ZWQgdGhlIFVJLCB1c2UgY29tcG9uZW50RGlkVXBkYXRlKCkuJywgbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjaWV2ZVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignJXMgaGFzIGEgbWV0aG9kIGNhbGxlZCAnICsgJ2NvbXBvbmVudFdpbGxSZWNpZXZlUHJvcHMoKS4gRGlkIHlvdSBtZWFuIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoKT8nLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjaWV2ZVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignJXMgaGFzIGEgbWV0aG9kIGNhbGxlZCAnICsgJ1VOU0FGRV9jb21wb25lbnRXaWxsUmVjaWV2ZVByb3BzKCkuIERpZCB5b3UgbWVhbiBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcygpPycsIG5hbWUpO1xuICAgIH1cblxuICAgIHZhciBoYXNNdXRhdGVkUHJvcHMgPSBpbnN0YW5jZS5wcm9wcyAhPT0gbmV3UHJvcHM7XG5cbiAgICBpZiAoaW5zdGFuY2UucHJvcHMgIT09IHVuZGVmaW5lZCAmJiBoYXNNdXRhdGVkUHJvcHMpIHtcbiAgICAgIGVycm9yKCclcyguLi4pOiBXaGVuIGNhbGxpbmcgc3VwZXIoKSBpbiBgJXNgLCBtYWtlIHN1cmUgdG8gcGFzcyAnICsgXCJ1cCB0aGUgc2FtZSBwcm9wcyB0aGF0IHlvdXIgY29tcG9uZW50J3MgY29uc3RydWN0b3Igd2FzIHBhc3NlZC5cIiwgbmFtZSwgbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKGluc3RhbmNlLmRlZmF1bHRQcm9wcykge1xuICAgICAgZXJyb3IoJ1NldHRpbmcgZGVmYXVsdFByb3BzIGFzIGFuIGluc3RhbmNlIHByb3BlcnR5IG9uICVzIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIHdpbGwgYmUgaWdub3JlZC4nICsgJyBJbnN0ZWFkLCBkZWZpbmUgZGVmYXVsdFByb3BzIGFzIGEgc3RhdGljIHByb3BlcnR5IG9uICVzLicsIG5hbWUsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZFVwZGF0ZSAhPT0gJ2Z1bmN0aW9uJyAmJiAhZGlkV2FybkFib3V0R2V0U25hcHNob3RCZWZvcmVVcGRhdGVXaXRob3V0RGlkVXBkYXRlLmhhcyhjdG9yKSkge1xuICAgICAgZGlkV2FybkFib3V0R2V0U25hcHNob3RCZWZvcmVVcGRhdGVXaXRob3V0RGlkVXBkYXRlLmFkZChjdG9yKTtcblxuICAgICAgZXJyb3IoJyVzOiBnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSgpIHNob3VsZCBiZSB1c2VkIHdpdGggY29tcG9uZW50RGlkVXBkYXRlKCkuICcgKyAnVGhpcyBjb21wb25lbnQgZGVmaW5lcyBnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSgpIG9ubHkuJywgZ2V0Q29tcG9uZW50TmFtZShjdG9yKSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCclczogZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKCkgaXMgZGVmaW5lZCBhcyBhbiBpbnN0YW5jZSBtZXRob2QgJyArICdhbmQgd2lsbCBiZSBpZ25vcmVkLiBJbnN0ZWFkLCBkZWNsYXJlIGl0IGFzIGEgc3RhdGljIG1ldGhvZC4nLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJyVzOiBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IoKSBpcyBkZWZpbmVkIGFzIGFuIGluc3RhbmNlIG1ldGhvZCAnICsgJ2FuZCB3aWxsIGJlIGlnbm9yZWQuIEluc3RlYWQsIGRlY2xhcmUgaXQgYXMgYSBzdGF0aWMgbWV0aG9kLicsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY3Rvci5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJyVzOiBnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSgpIGlzIGRlZmluZWQgYXMgYSBzdGF0aWMgbWV0aG9kICcgKyAnYW5kIHdpbGwgYmUgaWdub3JlZC4gSW5zdGVhZCwgZGVjbGFyZSBpdCBhcyBhbiBpbnN0YW5jZSBtZXRob2QuJywgbmFtZSk7XG4gICAgfVxuXG4gICAgdmFyIF9zdGF0ZSA9IGluc3RhbmNlLnN0YXRlO1xuXG4gICAgaWYgKF9zdGF0ZSAmJiAodHlwZW9mIF9zdGF0ZSAhPT0gJ29iamVjdCcgfHwgaXNBcnJheShfc3RhdGUpKSkge1xuICAgICAgZXJyb3IoJyVzLnN0YXRlOiBtdXN0IGJlIHNldCB0byBhbiBvYmplY3Qgb3IgbnVsbCcsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuZ2V0Q2hpbGRDb250ZXh0ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBjdG9yLmNoaWxkQ29udGV4dFR5cGVzICE9PSAnb2JqZWN0Jykge1xuICAgICAgZXJyb3IoJyVzLmdldENoaWxkQ29udGV4dCgpOiBjaGlsZENvbnRleHRUeXBlcyBtdXN0IGJlIGRlZmluZWQgaW4gb3JkZXIgdG8gJyArICd1c2UgZ2V0Q2hpbGRDb250ZXh0KCkuJywgbmFtZSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFkb3B0Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UudXBkYXRlciA9IGNsYXNzQ29tcG9uZW50VXBkYXRlcjtcbiAgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID0gaW5zdGFuY2U7IC8vIFRoZSBpbnN0YW5jZSBuZWVkcyBhY2Nlc3MgdG8gdGhlIGZpYmVyIHNvIHRoYXQgaXQgY2FuIHNjaGVkdWxlIHVwZGF0ZXNcblxuICBzZXQoaW5zdGFuY2UsIHdvcmtJblByb2dyZXNzKTtcblxuICB7XG4gICAgaW5zdGFuY2UuX3JlYWN0SW50ZXJuYWxJbnN0YW5jZSA9IGZha2VJbnRlcm5hbEluc3RhbmNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvbnN0cnVjdENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIGN0b3IsIHByb3BzKSB7XG4gIHZhciBpc0xlZ2FjeUNvbnRleHRDb25zdW1lciA9IGZhbHNlO1xuICB2YXIgdW5tYXNrZWRDb250ZXh0ID0gZW1wdHlDb250ZXh0T2JqZWN0O1xuICB2YXIgY29udGV4dCA9IGVtcHR5Q29udGV4dE9iamVjdDtcbiAgdmFyIGNvbnRleHRUeXBlID0gY3Rvci5jb250ZXh0VHlwZTtcblxuICB7XG4gICAgaWYgKCdjb250ZXh0VHlwZScgaW4gY3Rvcikge1xuICAgICAgdmFyIGlzVmFsaWQgPSAvLyBBbGxvdyBudWxsIGZvciBjb25kaXRpb25hbCBkZWNsYXJhdGlvblxuICAgICAgY29udGV4dFR5cGUgPT09IG51bGwgfHwgY29udGV4dFR5cGUgIT09IHVuZGVmaW5lZCAmJiBjb250ZXh0VHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFICYmIGNvbnRleHRUeXBlLl9jb250ZXh0ID09PSB1bmRlZmluZWQ7IC8vIE5vdCBhIDxDb250ZXh0LkNvbnN1bWVyPlxuXG4gICAgICBpZiAoIWlzVmFsaWQgJiYgIWRpZFdhcm5BYm91dEludmFsaWRhdGVDb250ZXh0VHlwZS5oYXMoY3RvcikpIHtcbiAgICAgICAgZGlkV2FybkFib3V0SW52YWxpZGF0ZUNvbnRleHRUeXBlLmFkZChjdG9yKTtcbiAgICAgICAgdmFyIGFkZGVuZHVtID0gJyc7XG5cbiAgICAgICAgaWYgKGNvbnRleHRUeXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBhZGRlbmR1bSA9ICcgSG93ZXZlciwgaXQgaXMgc2V0IHRvIHVuZGVmaW5lZC4gJyArICdUaGlzIGNhbiBiZSBjYXVzZWQgYnkgYSB0eXBvIG9yIGJ5IG1peGluZyB1cCBuYW1lZCBhbmQgZGVmYXVsdCBpbXBvcnRzLiAnICsgJ1RoaXMgY2FuIGFsc28gaGFwcGVuIGR1ZSB0byBhIGNpcmN1bGFyIGRlcGVuZGVuY3ksIHNvICcgKyAndHJ5IG1vdmluZyB0aGUgY3JlYXRlQ29udGV4dCgpIGNhbGwgdG8gYSBzZXBhcmF0ZSBmaWxlLic7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGNvbnRleHRUeXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgIGFkZGVuZHVtID0gJyBIb3dldmVyLCBpdCBpcyBzZXQgdG8gYSAnICsgdHlwZW9mIGNvbnRleHRUeXBlICsgJy4nO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHRUeXBlLiQkdHlwZW9mID09PSBSRUFDVF9QUk9WSURFUl9UWVBFKSB7XG4gICAgICAgICAgYWRkZW5kdW0gPSAnIERpZCB5b3UgYWNjaWRlbnRhbGx5IHBhc3MgdGhlIENvbnRleHQuUHJvdmlkZXIgaW5zdGVhZD8nO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHRUeXBlLl9jb250ZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyA8Q29udGV4dC5Db25zdW1lcj5cbiAgICAgICAgICBhZGRlbmR1bSA9ICcgRGlkIHlvdSBhY2NpZGVudGFsbHkgcGFzcyB0aGUgQ29udGV4dC5Db25zdW1lciBpbnN0ZWFkPyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWRkZW5kdW0gPSAnIEhvd2V2ZXIsIGl0IGlzIHNldCB0byBhbiBvYmplY3Qgd2l0aCBrZXlzIHsnICsgT2JqZWN0LmtleXMoY29udGV4dFR5cGUpLmpvaW4oJywgJykgKyAnfS4nO1xuICAgICAgICB9XG5cbiAgICAgICAgZXJyb3IoJyVzIGRlZmluZXMgYW4gaW52YWxpZCBjb250ZXh0VHlwZS4gJyArICdjb250ZXh0VHlwZSBzaG91bGQgcG9pbnQgdG8gdGhlIENvbnRleHQgb2JqZWN0IHJldHVybmVkIGJ5IFJlYWN0LmNyZWF0ZUNvbnRleHQoKS4lcycsIGdldENvbXBvbmVudE5hbWUoY3RvcikgfHwgJ0NvbXBvbmVudCcsIGFkZGVuZHVtKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIGNvbnRleHRUeXBlID09PSAnb2JqZWN0JyAmJiBjb250ZXh0VHlwZSAhPT0gbnVsbCkge1xuICAgIGNvbnRleHQgPSByZWFkQ29udGV4dChjb250ZXh0VHlwZSk7XG4gIH0gZWxzZSB7XG4gICAgdW5tYXNrZWRDb250ZXh0ID0gZ2V0VW5tYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCBjdG9yLCB0cnVlKTtcbiAgICB2YXIgY29udGV4dFR5cGVzID0gY3Rvci5jb250ZXh0VHlwZXM7XG4gICAgaXNMZWdhY3lDb250ZXh0Q29uc3VtZXIgPSBjb250ZXh0VHlwZXMgIT09IG51bGwgJiYgY29udGV4dFR5cGVzICE9PSB1bmRlZmluZWQ7XG4gICAgY29udGV4dCA9IGlzTGVnYWN5Q29udGV4dENvbnN1bWVyID8gZ2V0TWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgdW5tYXNrZWRDb250ZXh0KSA6IGVtcHR5Q29udGV4dE9iamVjdDtcbiAgfSAvLyBJbnN0YW50aWF0ZSB0d2ljZSB0byBoZWxwIGRldGVjdCBzaWRlLWVmZmVjdHMuXG5cblxuICB7XG4gICAgaWYgKCB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgZGlzYWJsZUxvZ3MoKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgbmV3IGN0b3IocHJvcHMsIGNvbnRleHQpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIGluc3RhbmNlID0gbmV3IGN0b3IocHJvcHMsIGNvbnRleHQpO1xuICB2YXIgc3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gaW5zdGFuY2Uuc3RhdGUgIT09IG51bGwgJiYgaW5zdGFuY2Uuc3RhdGUgIT09IHVuZGVmaW5lZCA/IGluc3RhbmNlLnN0YXRlIDogbnVsbDtcbiAgYWRvcHRDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBpbnN0YW5jZSk7XG5cbiAge1xuICAgIGlmICh0eXBlb2YgY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09ICdmdW5jdGlvbicgJiYgc3RhdGUgPT09IG51bGwpIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShjdG9yKSB8fCAnQ29tcG9uZW50JztcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRVbmluaXRpYWxpemVkU3RhdGUuaGFzKGNvbXBvbmVudE5hbWUpKSB7XG4gICAgICAgIGRpZFdhcm5BYm91dFVuaW5pdGlhbGl6ZWRTdGF0ZS5hZGQoY29tcG9uZW50TmFtZSk7XG5cbiAgICAgICAgZXJyb3IoJ2Alc2AgdXNlcyBgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzYCBidXQgaXRzIGluaXRpYWwgc3RhdGUgaXMgJyArICclcy4gVGhpcyBpcyBub3QgcmVjb21tZW5kZWQuIEluc3RlYWQsIGRlZmluZSB0aGUgaW5pdGlhbCBzdGF0ZSBieSAnICsgJ2Fzc2lnbmluZyBhbiBvYmplY3QgdG8gYHRoaXMuc3RhdGVgIGluIHRoZSBjb25zdHJ1Y3RvciBvZiBgJXNgLiAnICsgJ1RoaXMgZW5zdXJlcyB0aGF0IGBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHNgIGFyZ3VtZW50cyBoYXZlIGEgY29uc2lzdGVudCBzaGFwZS4nLCBjb21wb25lbnROYW1lLCBpbnN0YW5jZS5zdGF0ZSA9PT0gbnVsbCA/ICdudWxsJyA6ICd1bmRlZmluZWQnLCBjb21wb25lbnROYW1lKTtcbiAgICAgIH1cbiAgICB9IC8vIElmIG5ldyBjb21wb25lbnQgQVBJcyBhcmUgZGVmaW5lZCwgXCJ1bnNhZmVcIiBsaWZlY3ljbGVzIHdvbid0IGJlIGNhbGxlZC5cbiAgICAvLyBXYXJuIGFib3V0IHRoZXNlIGxpZmVjeWNsZXMgaWYgdGhleSBhcmUgcHJlc2VudC5cbiAgICAvLyBEb24ndCB3YXJuIGFib3V0IHJlYWN0LWxpZmVjeWNsZXMtY29tcGF0IHBvbHlmaWxsZWQgbWV0aG9kcyB0aG91Z2guXG5cblxuICAgIGlmICh0eXBlb2YgY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGluc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB2YXIgZm91bmRXaWxsTW91bnROYW1lID0gbnVsbDtcbiAgICAgIHZhciBmb3VuZFdpbGxSZWNlaXZlUHJvcHNOYW1lID0gbnVsbDtcbiAgICAgIHZhciBmb3VuZFdpbGxVcGRhdGVOYW1lID0gbnVsbDtcblxuICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicgJiYgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50Ll9fc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmcgIT09IHRydWUpIHtcbiAgICAgICAgZm91bmRXaWxsTW91bnROYW1lID0gJ2NvbXBvbmVudFdpbGxNb3VudCc7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGZvdW5kV2lsbE1vdW50TmFtZSA9ICdVTlNBRkVfY29tcG9uZW50V2lsbE1vdW50JztcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID09PSAnZnVuY3Rpb24nICYmIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMuX19zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZyAhPT0gdHJ1ZSkge1xuICAgICAgICBmb3VuZFdpbGxSZWNlaXZlUHJvcHNOYW1lID0gJ2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMnO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZm91bmRXaWxsUmVjZWl2ZVByb3BzTmFtZSA9ICdVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyc7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJyAmJiBpbnN0YW5jZS5jb21wb25lbnRXaWxsVXBkYXRlLl9fc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmcgIT09IHRydWUpIHtcbiAgICAgICAgZm91bmRXaWxsVXBkYXRlTmFtZSA9ICdjb21wb25lbnRXaWxsVXBkYXRlJztcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGZvdW5kV2lsbFVwZGF0ZU5hbWUgPSAnVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUnO1xuICAgICAgfVxuXG4gICAgICBpZiAoZm91bmRXaWxsTW91bnROYW1lICE9PSBudWxsIHx8IGZvdW5kV2lsbFJlY2VpdmVQcm9wc05hbWUgIT09IG51bGwgfHwgZm91bmRXaWxsVXBkYXRlTmFtZSAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgX2NvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKGN0b3IpIHx8ICdDb21wb25lbnQnO1xuXG4gICAgICAgIHZhciBuZXdBcGlOYW1lID0gdHlwZW9mIGN0b3IuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09PSAnZnVuY3Rpb24nID8gJ2dldERlcml2ZWRTdGF0ZUZyb21Qcm9wcygpJyA6ICdnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSgpJztcblxuICAgICAgICBpZiAoIWRpZFdhcm5BYm91dExlZ2FjeUxpZmVjeWNsZXNBbmREZXJpdmVkU3RhdGUuaGFzKF9jb21wb25lbnROYW1lKSkge1xuICAgICAgICAgIGRpZFdhcm5BYm91dExlZ2FjeUxpZmVjeWNsZXNBbmREZXJpdmVkU3RhdGUuYWRkKF9jb21wb25lbnROYW1lKTtcblxuICAgICAgICAgIGVycm9yKCdVbnNhZmUgbGVnYWN5IGxpZmVjeWNsZXMgd2lsbCBub3QgYmUgY2FsbGVkIGZvciBjb21wb25lbnRzIHVzaW5nIG5ldyBjb21wb25lbnQgQVBJcy5cXG5cXG4nICsgJyVzIHVzZXMgJXMgYnV0IGFsc28gY29udGFpbnMgdGhlIGZvbGxvd2luZyBsZWdhY3kgbGlmZWN5Y2xlczolcyVzJXNcXG5cXG4nICsgJ1RoZSBhYm92ZSBsaWZlY3ljbGVzIHNob3VsZCBiZSByZW1vdmVkLiBMZWFybiBtb3JlIGFib3V0IHRoaXMgd2FybmluZyBoZXJlOlxcbicgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3Vuc2FmZS1jb21wb25lbnQtbGlmZWN5Y2xlcycsIF9jb21wb25lbnROYW1lLCBuZXdBcGlOYW1lLCBmb3VuZFdpbGxNb3VudE5hbWUgIT09IG51bGwgPyBcIlxcbiAgXCIgKyBmb3VuZFdpbGxNb3VudE5hbWUgOiAnJywgZm91bmRXaWxsUmVjZWl2ZVByb3BzTmFtZSAhPT0gbnVsbCA/IFwiXFxuICBcIiArIGZvdW5kV2lsbFJlY2VpdmVQcm9wc05hbWUgOiAnJywgZm91bmRXaWxsVXBkYXRlTmFtZSAhPT0gbnVsbCA/IFwiXFxuICBcIiArIGZvdW5kV2lsbFVwZGF0ZU5hbWUgOiAnJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gLy8gQ2FjaGUgdW5tYXNrZWQgY29udGV4dCBzbyB3ZSBjYW4gYXZvaWQgcmVjcmVhdGluZyBtYXNrZWQgY29udGV4dCB1bmxlc3MgbmVjZXNzYXJ5LlxuICAvLyBSZWFjdEZpYmVyQ29udGV4dCB1c3VhbGx5IHVwZGF0ZXMgdGhpcyBjYWNoZSBidXQgY2FuJ3QgZm9yIG5ld2x5LWNyZWF0ZWQgaW5zdGFuY2VzLlxuXG5cbiAgaWYgKGlzTGVnYWN5Q29udGV4dENvbnN1bWVyKSB7XG4gICAgY2FjaGVDb250ZXh0KHdvcmtJblByb2dyZXNzLCB1bm1hc2tlZENvbnRleHQsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGluc3RhbmNlO1xufVxuXG5mdW5jdGlvbiBjYWxsQ29tcG9uZW50V2lsbE1vdW50KHdvcmtJblByb2dyZXNzLCBpbnN0YW5jZSkge1xuICB2YXIgb2xkU3RhdGUgPSBpbnN0YW5jZS5zdGF0ZTtcblxuICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudCgpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCgpO1xuICB9XG5cbiAgaWYgKG9sZFN0YXRlICE9PSBpbnN0YW5jZS5zdGF0ZSkge1xuICAgIHtcbiAgICAgIGVycm9yKCclcy5jb21wb25lbnRXaWxsTW91bnQoKTogQXNzaWduaW5nIGRpcmVjdGx5IHRvIHRoaXMuc3RhdGUgaXMgJyArIFwiZGVwcmVjYXRlZCAoZXhjZXB0IGluc2lkZSBhIGNvbXBvbmVudCdzIFwiICsgJ2NvbnN0cnVjdG9yKS4gVXNlIHNldFN0YXRlIGluc3RlYWQuJywgZ2V0Q29tcG9uZW50TmFtZSh3b3JrSW5Qcm9ncmVzcy50eXBlKSB8fCAnQ29tcG9uZW50Jyk7XG4gICAgfVxuXG4gICAgY2xhc3NDb21wb25lbnRVcGRhdGVyLmVucXVldWVSZXBsYWNlU3RhdGUoaW5zdGFuY2UsIGluc3RhbmNlLnN0YXRlLCBudWxsKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjYWxsQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyh3b3JrSW5Qcm9ncmVzcywgaW5zdGFuY2UsIG5ld1Byb3BzLCBuZXh0Q29udGV4dCkge1xuICB2YXIgb2xkU3RhdGUgPSBpbnN0YW5jZS5zdGF0ZTtcblxuICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5ld1Byb3BzLCBuZXh0Q29udGV4dCk7XG4gIH1cblxuICBpZiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV3UHJvcHMsIG5leHRDb250ZXh0KTtcbiAgfVxuXG4gIGlmIChpbnN0YW5jZS5zdGF0ZSAhPT0gb2xkU3RhdGUpIHtcbiAgICB7XG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUod29ya0luUHJvZ3Jlc3MudHlwZSkgfHwgJ0NvbXBvbmVudCc7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0U3RhdGVBc3NpZ25tZW50Rm9yQ29tcG9uZW50Lmhhcyhjb21wb25lbnROYW1lKSkge1xuICAgICAgICBkaWRXYXJuQWJvdXRTdGF0ZUFzc2lnbm1lbnRGb3JDb21wb25lbnQuYWRkKGNvbXBvbmVudE5hbWUpO1xuXG4gICAgICAgIGVycm9yKCclcy5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKCk6IEFzc2lnbmluZyBkaXJlY3RseSB0byAnICsgXCJ0aGlzLnN0YXRlIGlzIGRlcHJlY2F0ZWQgKGV4Y2VwdCBpbnNpZGUgYSBjb21wb25lbnQncyBcIiArICdjb25zdHJ1Y3RvcikuIFVzZSBzZXRTdGF0ZSBpbnN0ZWFkLicsIGNvbXBvbmVudE5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzQ29tcG9uZW50VXBkYXRlci5lbnF1ZXVlUmVwbGFjZVN0YXRlKGluc3RhbmNlLCBpbnN0YW5jZS5zdGF0ZSwgbnVsbCk7XG4gIH1cbn0gLy8gSW52b2tlcyB0aGUgbW91bnQgbGlmZS1jeWNsZXMgb24gYSBwcmV2aW91c2x5IG5ldmVyIHJlbmRlcmVkIGluc3RhbmNlLlxuXG5cbmZ1bmN0aW9uIG1vdW50Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgY3RvciwgbmV3UHJvcHMsIHJlbmRlckxhbmVzKSB7XG4gIHtcbiAgICBjaGVja0NsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIGN0b3IsIG5ld1Byb3BzKTtcbiAgfVxuXG4gIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgaW5zdGFuY2UucHJvcHMgPSBuZXdQcm9wcztcbiAgaW5zdGFuY2Uuc3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICBpbnN0YW5jZS5yZWZzID0gZW1wdHlSZWZzT2JqZWN0O1xuICBpbml0aWFsaXplVXBkYXRlUXVldWUod29ya0luUHJvZ3Jlc3MpO1xuICB2YXIgY29udGV4dFR5cGUgPSBjdG9yLmNvbnRleHRUeXBlO1xuXG4gIGlmICh0eXBlb2YgY29udGV4dFR5cGUgPT09ICdvYmplY3QnICYmIGNvbnRleHRUeXBlICE9PSBudWxsKSB7XG4gICAgaW5zdGFuY2UuY29udGV4dCA9IHJlYWRDb250ZXh0KGNvbnRleHRUeXBlKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgdW5tYXNrZWRDb250ZXh0ID0gZ2V0VW5tYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCBjdG9yLCB0cnVlKTtcbiAgICBpbnN0YW5jZS5jb250ZXh0ID0gZ2V0TWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgdW5tYXNrZWRDb250ZXh0KTtcbiAgfVxuXG4gIHtcbiAgICBpZiAoaW5zdGFuY2Uuc3RhdGUgPT09IG5ld1Byb3BzKSB7XG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUoY3RvcikgfHwgJ0NvbXBvbmVudCc7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0RGlyZWN0bHlBc3NpZ25pbmdQcm9wc1RvU3RhdGUuaGFzKGNvbXBvbmVudE5hbWUpKSB7XG4gICAgICAgIGRpZFdhcm5BYm91dERpcmVjdGx5QXNzaWduaW5nUHJvcHNUb1N0YXRlLmFkZChjb21wb25lbnROYW1lKTtcblxuICAgICAgICBlcnJvcignJXM6IEl0IGlzIG5vdCByZWNvbW1lbmRlZCB0byBhc3NpZ24gcHJvcHMgZGlyZWN0bHkgdG8gc3RhdGUgJyArIFwiYmVjYXVzZSB1cGRhdGVzIHRvIHByb3BzIHdvbid0IGJlIHJlZmxlY3RlZCBpbiBzdGF0ZS4gXCIgKyAnSW4gbW9zdCBjYXNlcywgaXQgaXMgYmV0dGVyIHRvIHVzZSBwcm9wcyBkaXJlY3RseS4nLCBjb21wb25lbnROYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdE1vZGUpIHtcbiAgICAgIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLnJlY29yZExlZ2FjeUNvbnRleHRXYXJuaW5nKHdvcmtJblByb2dyZXNzLCBpbnN0YW5jZSk7XG4gICAgfVxuXG4gICAge1xuICAgICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MucmVjb3JkVW5zYWZlTGlmZWN5Y2xlV2FybmluZ3Mod29ya0luUHJvZ3Jlc3MsIGluc3RhbmNlKTtcbiAgICB9XG4gIH1cblxuICBwcm9jZXNzVXBkYXRlUXVldWUod29ya0luUHJvZ3Jlc3MsIG5ld1Byb3BzLCBpbnN0YW5jZSwgcmVuZGVyTGFuZXMpO1xuICBpbnN0YW5jZS5zdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gIHZhciBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPSBjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcztcblxuICBpZiAodHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGFwcGx5RGVyaXZlZFN0YXRlRnJvbVByb3BzKHdvcmtJblByb2dyZXNzLCBjdG9yLCBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMsIG5ld1Byb3BzKTtcbiAgICBpbnN0YW5jZS5zdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gIH0gLy8gSW4gb3JkZXIgdG8gc3VwcG9ydCByZWFjdC1saWZlY3ljbGVzLWNvbXBhdCBwb2x5ZmlsbGVkIGNvbXBvbmVudHMsXG4gIC8vIFVuc2FmZSBsaWZlY3ljbGVzIHNob3VsZCBub3QgYmUgaW52b2tlZCBmb3IgY29tcG9uZW50cyB1c2luZyB0aGUgbmV3IEFQSXMuXG5cblxuICBpZiAodHlwZW9mIGN0b3IuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBpbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSAhPT0gJ2Z1bmN0aW9uJyAmJiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICBjYWxsQ29tcG9uZW50V2lsbE1vdW50KHdvcmtJblByb2dyZXNzLCBpbnN0YW5jZSk7IC8vIElmIHdlIGhhZCBhZGRpdGlvbmFsIHN0YXRlIHVwZGF0ZXMgZHVyaW5nIHRoaXMgbGlmZS1jeWNsZSwgbGV0J3NcbiAgICAvLyBwcm9jZXNzIHRoZW0gbm93LlxuXG4gICAgcHJvY2Vzc1VwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzLCBuZXdQcm9wcywgaW5zdGFuY2UsIHJlbmRlckxhbmVzKTtcbiAgICBpbnN0YW5jZS5zdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gIH1cblxuICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlc3VtZU1vdW50Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgY3RvciwgbmV3UHJvcHMsIHJlbmRlckxhbmVzKSB7XG4gIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgdmFyIG9sZFByb3BzID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcztcbiAgaW5zdGFuY2UucHJvcHMgPSBvbGRQcm9wcztcbiAgdmFyIG9sZENvbnRleHQgPSBpbnN0YW5jZS5jb250ZXh0O1xuICB2YXIgY29udGV4dFR5cGUgPSBjdG9yLmNvbnRleHRUeXBlO1xuICB2YXIgbmV4dENvbnRleHQgPSBlbXB0eUNvbnRleHRPYmplY3Q7XG5cbiAgaWYgKHR5cGVvZiBjb250ZXh0VHlwZSA9PT0gJ29iamVjdCcgJiYgY29udGV4dFR5cGUgIT09IG51bGwpIHtcbiAgICBuZXh0Q29udGV4dCA9IHJlYWRDb250ZXh0KGNvbnRleHRUeXBlKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbmV4dExlZ2FjeVVubWFza2VkQ29udGV4dCA9IGdldFVubWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgY3RvciwgdHJ1ZSk7XG4gICAgbmV4dENvbnRleHQgPSBnZXRNYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCBuZXh0TGVnYWN5VW5tYXNrZWRDb250ZXh0KTtcbiAgfVxuXG4gIHZhciBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPSBjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcztcbiAgdmFyIGhhc05ld0xpZmVjeWNsZXMgPSB0eXBlb2YgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBpbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJzsgLy8gTm90ZTogRHVyaW5nIHRoZXNlIGxpZmUtY3ljbGVzLCBpbnN0YW5jZS5wcm9wcy9pbnN0YW5jZS5zdGF0ZSBhcmUgd2hhdFxuICAvLyBldmVyIHRoZSBwcmV2aW91c2x5IGF0dGVtcHRlZCB0byByZW5kZXIgLSBub3QgdGhlIFwiY3VycmVudFwiLiBIb3dldmVyLFxuICAvLyBkdXJpbmcgY29tcG9uZW50RGlkVXBkYXRlIHdlIHBhc3MgdGhlIFwiY3VycmVudFwiIHByb3BzLlxuICAvLyBJbiBvcmRlciB0byBzdXBwb3J0IHJlYWN0LWxpZmVjeWNsZXMtY29tcGF0IHBvbHlmaWxsZWQgY29tcG9uZW50cyxcbiAgLy8gVW5zYWZlIGxpZmVjeWNsZXMgc2hvdWxkIG5vdCBiZSBpbnZva2VkIGZvciBjb21wb25lbnRzIHVzaW5nIHRoZSBuZXcgQVBJcy5cblxuICBpZiAoIWhhc05ld0xpZmVjeWNsZXMgJiYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICBpZiAob2xkUHJvcHMgIT09IG5ld1Byb3BzIHx8IG9sZENvbnRleHQgIT09IG5leHRDb250ZXh0KSB7XG4gICAgICBjYWxsQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyh3b3JrSW5Qcm9ncmVzcywgaW5zdGFuY2UsIG5ld1Byb3BzLCBuZXh0Q29udGV4dCk7XG4gICAgfVxuICB9XG5cbiAgcmVzZXRIYXNGb3JjZVVwZGF0ZUJlZm9yZVByb2Nlc3NpbmcoKTtcbiAgdmFyIG9sZFN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgdmFyIG5ld1N0YXRlID0gaW5zdGFuY2Uuc3RhdGUgPSBvbGRTdGF0ZTtcbiAgcHJvY2Vzc1VwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzLCBuZXdQcm9wcywgaW5zdGFuY2UsIHJlbmRlckxhbmVzKTtcbiAgbmV3U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuXG4gIGlmIChvbGRQcm9wcyA9PT0gbmV3UHJvcHMgJiYgb2xkU3RhdGUgPT09IG5ld1N0YXRlICYmICFoYXNDb250ZXh0Q2hhbmdlZCgpICYmICFjaGVja0hhc0ZvcmNlVXBkYXRlQWZ0ZXJQcm9jZXNzaW5nKCkpIHtcbiAgICAvLyBJZiBhbiB1cGRhdGUgd2FzIGFscmVhZHkgaW4gcHJvZ3Jlc3MsIHdlIHNob3VsZCBzY2hlZHVsZSBhbiBVcGRhdGVcbiAgICAvLyBlZmZlY3QgZXZlbiB0aG91Z2ggd2UncmUgYmFpbGluZyBvdXQsIHNvIHRoYXQgY1dVL2NEVSBhcmUgY2FsbGVkLlxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkTW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAodHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGFwcGx5RGVyaXZlZFN0YXRlRnJvbVByb3BzKHdvcmtJblByb2dyZXNzLCBjdG9yLCBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMsIG5ld1Byb3BzKTtcbiAgICBuZXdTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gIH1cblxuICB2YXIgc2hvdWxkVXBkYXRlID0gY2hlY2tIYXNGb3JjZVVwZGF0ZUFmdGVyUHJvY2Vzc2luZygpIHx8IGNoZWNrU2hvdWxkQ29tcG9uZW50VXBkYXRlKHdvcmtJblByb2dyZXNzLCBjdG9yLCBvbGRQcm9wcywgbmV3UHJvcHMsIG9sZFN0YXRlLCBuZXdTdGF0ZSwgbmV4dENvbnRleHQpO1xuXG4gIGlmIChzaG91bGRVcGRhdGUpIHtcbiAgICAvLyBJbiBvcmRlciB0byBzdXBwb3J0IHJlYWN0LWxpZmVjeWNsZXMtY29tcGF0IHBvbHlmaWxsZWQgY29tcG9uZW50cyxcbiAgICAvLyBVbnNhZmUgbGlmZWN5Y2xlcyBzaG91bGQgbm90IGJlIGludm9rZWQgZm9yIGNvbXBvbmVudHMgdXNpbmcgdGhlIG5ldyBBUElzLlxuICAgIGlmICghaGFzTmV3TGlmZWN5Y2xlcyAmJiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudCgpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkTW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gSWYgYW4gdXBkYXRlIHdhcyBhbHJlYWR5IGluIHByb2dyZXNzLCB3ZSBzaG91bGQgc2NoZWR1bGUgYW4gVXBkYXRlXG4gICAgLy8gZWZmZWN0IGV2ZW4gdGhvdWdoIHdlJ3JlIGJhaWxpbmcgb3V0LCBzbyB0aGF0IGNXVS9jRFUgYXJlIGNhbGxlZC5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG4gICAgfSAvLyBJZiBzaG91bGRDb21wb25lbnRVcGRhdGUgcmV0dXJuZWQgZmFsc2UsIHdlIHNob3VsZCBzdGlsbCB1cGRhdGUgdGhlXG4gICAgLy8gbWVtb2l6ZWQgc3RhdGUgdG8gaW5kaWNhdGUgdGhhdCB0aGlzIHdvcmsgY2FuIGJlIHJldXNlZC5cblxuXG4gICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcyA9IG5ld1Byb3BzO1xuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBuZXdTdGF0ZTtcbiAgfSAvLyBVcGRhdGUgdGhlIGV4aXN0aW5nIGluc3RhbmNlJ3Mgc3RhdGUsIHByb3BzLCBhbmQgY29udGV4dCBwb2ludGVycyBldmVuXG4gIC8vIGlmIHNob3VsZENvbXBvbmVudFVwZGF0ZSByZXR1cm5zIGZhbHNlLlxuXG5cbiAgaW5zdGFuY2UucHJvcHMgPSBuZXdQcm9wcztcbiAgaW5zdGFuY2Uuc3RhdGUgPSBuZXdTdGF0ZTtcbiAgaW5zdGFuY2UuY29udGV4dCA9IG5leHRDb250ZXh0O1xuICByZXR1cm4gc2hvdWxkVXBkYXRlO1xufSAvLyBJbnZva2VzIHRoZSB1cGRhdGUgbGlmZS1jeWNsZXMgYW5kIHJldHVybnMgZmFsc2UgaWYgaXQgc2hvdWxkbid0IHJlcmVuZGVyLlxuXG5cbmZ1bmN0aW9uIHVwZGF0ZUNsYXNzSW5zdGFuY2UoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIGN0b3IsIG5ld1Byb3BzLCByZW5kZXJMYW5lcykge1xuICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gIGNsb25lVXBkYXRlUXVldWUoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpO1xuICB2YXIgdW5yZXNvbHZlZE9sZFByb3BzID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcztcbiAgdmFyIG9sZFByb3BzID0gd29ya0luUHJvZ3Jlc3MudHlwZSA9PT0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUgPyB1bnJlc29sdmVkT2xkUHJvcHMgOiByZXNvbHZlRGVmYXVsdFByb3BzKHdvcmtJblByb2dyZXNzLnR5cGUsIHVucmVzb2x2ZWRPbGRQcm9wcyk7XG4gIGluc3RhbmNlLnByb3BzID0gb2xkUHJvcHM7XG4gIHZhciB1bnJlc29sdmVkTmV3UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gIHZhciBvbGRDb250ZXh0ID0gaW5zdGFuY2UuY29udGV4dDtcbiAgdmFyIGNvbnRleHRUeXBlID0gY3Rvci5jb250ZXh0VHlwZTtcbiAgdmFyIG5leHRDb250ZXh0ID0gZW1wdHlDb250ZXh0T2JqZWN0O1xuXG4gIGlmICh0eXBlb2YgY29udGV4dFR5cGUgPT09ICdvYmplY3QnICYmIGNvbnRleHRUeXBlICE9PSBudWxsKSB7XG4gICAgbmV4dENvbnRleHQgPSByZWFkQ29udGV4dChjb250ZXh0VHlwZSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIG5leHRVbm1hc2tlZENvbnRleHQgPSBnZXRVbm1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIGN0b3IsIHRydWUpO1xuICAgIG5leHRDb250ZXh0ID0gZ2V0TWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgbmV4dFVubWFza2VkQ29udGV4dCk7XG4gIH1cblxuICB2YXIgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID0gY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM7XG4gIHZhciBoYXNOZXdMaWZlY3ljbGVzID0gdHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgPT09ICdmdW5jdGlvbic7IC8vIE5vdGU6IER1cmluZyB0aGVzZSBsaWZlLWN5Y2xlcywgaW5zdGFuY2UucHJvcHMvaW5zdGFuY2Uuc3RhdGUgYXJlIHdoYXRcbiAgLy8gZXZlciB0aGUgcHJldmlvdXNseSBhdHRlbXB0ZWQgdG8gcmVuZGVyIC0gbm90IHRoZSBcImN1cnJlbnRcIi4gSG93ZXZlcixcbiAgLy8gZHVyaW5nIGNvbXBvbmVudERpZFVwZGF0ZSB3ZSBwYXNzIHRoZSBcImN1cnJlbnRcIiBwcm9wcy5cbiAgLy8gSW4gb3JkZXIgdG8gc3VwcG9ydCByZWFjdC1saWZlY3ljbGVzLWNvbXBhdCBwb2x5ZmlsbGVkIGNvbXBvbmVudHMsXG4gIC8vIFVuc2FmZSBsaWZlY3ljbGVzIHNob3VsZCBub3QgYmUgaW52b2tlZCBmb3IgY29tcG9uZW50cyB1c2luZyB0aGUgbmV3IEFQSXMuXG5cbiAgaWYgKCFoYXNOZXdMaWZlY3ljbGVzICYmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicpKSB7XG4gICAgaWYgKHVucmVzb2x2ZWRPbGRQcm9wcyAhPT0gdW5yZXNvbHZlZE5ld1Byb3BzIHx8IG9sZENvbnRleHQgIT09IG5leHRDb250ZXh0KSB7XG4gICAgICBjYWxsQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyh3b3JrSW5Qcm9ncmVzcywgaW5zdGFuY2UsIG5ld1Byb3BzLCBuZXh0Q29udGV4dCk7XG4gICAgfVxuICB9XG5cbiAgcmVzZXRIYXNGb3JjZVVwZGF0ZUJlZm9yZVByb2Nlc3NpbmcoKTtcbiAgdmFyIG9sZFN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgdmFyIG5ld1N0YXRlID0gaW5zdGFuY2Uuc3RhdGUgPSBvbGRTdGF0ZTtcbiAgcHJvY2Vzc1VwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzLCBuZXdQcm9wcywgaW5zdGFuY2UsIHJlbmRlckxhbmVzKTtcbiAgbmV3U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuXG4gIGlmICh1bnJlc29sdmVkT2xkUHJvcHMgPT09IHVucmVzb2x2ZWROZXdQcm9wcyAmJiBvbGRTdGF0ZSA9PT0gbmV3U3RhdGUgJiYgIWhhc0NvbnRleHRDaGFuZ2VkKCkgJiYgIWNoZWNrSGFzRm9yY2VVcGRhdGVBZnRlclByb2Nlc3NpbmcoKSkge1xuICAgIC8vIElmIGFuIHVwZGF0ZSB3YXMgYWxyZWFkeSBpbiBwcm9ncmVzcywgd2Ugc2hvdWxkIHNjaGVkdWxlIGFuIFVwZGF0ZVxuICAgIC8vIGVmZmVjdCBldmVuIHRob3VnaCB3ZSdyZSBiYWlsaW5nIG91dCwgc28gdGhhdCBjV1UvY0RVIGFyZSBjYWxsZWQuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGlmICh1bnJlc29sdmVkT2xkUHJvcHMgIT09IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyB8fCBvbGRTdGF0ZSAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlKSB7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpZiAodW5yZXNvbHZlZE9sZFByb3BzICE9PSBjdXJyZW50Lm1lbW9pemVkUHJvcHMgfHwgb2xkU3RhdGUgIT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSkge1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBTbmFwc2hvdDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAodHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGFwcGx5RGVyaXZlZFN0YXRlRnJvbVByb3BzKHdvcmtJblByb2dyZXNzLCBjdG9yLCBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMsIG5ld1Byb3BzKTtcbiAgICBuZXdTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gIH1cblxuICB2YXIgc2hvdWxkVXBkYXRlID0gY2hlY2tIYXNGb3JjZVVwZGF0ZUFmdGVyUHJvY2Vzc2luZygpIHx8IGNoZWNrU2hvdWxkQ29tcG9uZW50VXBkYXRlKHdvcmtJblByb2dyZXNzLCBjdG9yLCBvbGRQcm9wcywgbmV3UHJvcHMsIG9sZFN0YXRlLCBuZXdTdGF0ZSwgbmV4dENvbnRleHQpO1xuXG4gIGlmIChzaG91bGRVcGRhdGUpIHtcbiAgICAvLyBJbiBvcmRlciB0byBzdXBwb3J0IHJlYWN0LWxpZmVjeWNsZXMtY29tcGF0IHBvbHlmaWxsZWQgY29tcG9uZW50cyxcbiAgICAvLyBVbnNhZmUgbGlmZWN5Y2xlcyBzaG91bGQgbm90IGJlIGludm9rZWQgZm9yIGNvbXBvbmVudHMgdXNpbmcgdGhlIG5ldyBBUElzLlxuICAgIGlmICghaGFzTmV3TGlmZWN5Y2xlcyAmJiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsVXBkYXRlID09PSAnZnVuY3Rpb24nKSkge1xuICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVcGRhdGUobmV3UHJvcHMsIG5ld1N0YXRlLCBuZXh0Q29udGV4dCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUobmV3UHJvcHMsIG5ld1N0YXRlLCBuZXh0Q29udGV4dCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBTbmFwc2hvdDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gSWYgYW4gdXBkYXRlIHdhcyBhbHJlYWR5IGluIHByb2dyZXNzLCB3ZSBzaG91bGQgc2NoZWR1bGUgYW4gVXBkYXRlXG4gICAgLy8gZWZmZWN0IGV2ZW4gdGhvdWdoIHdlJ3JlIGJhaWxpbmcgb3V0LCBzbyB0aGF0IGNXVS9jRFUgYXJlIGNhbGxlZC5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaWYgKHVucmVzb2x2ZWRPbGRQcm9wcyAhPT0gY3VycmVudC5tZW1vaXplZFByb3BzIHx8IG9sZFN0YXRlICE9PSBjdXJyZW50Lm1lbW9pemVkU3RhdGUpIHtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGlmICh1bnJlc29sdmVkT2xkUHJvcHMgIT09IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyB8fCBvbGRTdGF0ZSAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlKSB7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFNuYXBzaG90O1xuICAgICAgfVxuICAgIH0gLy8gSWYgc2hvdWxkQ29tcG9uZW50VXBkYXRlIHJldHVybmVkIGZhbHNlLCB3ZSBzaG91bGQgc3RpbGwgdXBkYXRlIHRoZVxuICAgIC8vIG1lbW9pemVkIHByb3BzL3N0YXRlIHRvIGluZGljYXRlIHRoYXQgdGhpcyB3b3JrIGNhbiBiZSByZXVzZWQuXG5cblxuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHMgPSBuZXdQcm9wcztcbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbmV3U3RhdGU7XG4gIH0gLy8gVXBkYXRlIHRoZSBleGlzdGluZyBpbnN0YW5jZSdzIHN0YXRlLCBwcm9wcywgYW5kIGNvbnRleHQgcG9pbnRlcnMgZXZlblxuICAvLyBpZiBzaG91bGRDb21wb25lbnRVcGRhdGUgcmV0dXJucyBmYWxzZS5cblxuXG4gIGluc3RhbmNlLnByb3BzID0gbmV3UHJvcHM7XG4gIGluc3RhbmNlLnN0YXRlID0gbmV3U3RhdGU7XG4gIGluc3RhbmNlLmNvbnRleHQgPSBuZXh0Q29udGV4dDtcbiAgcmV0dXJuIHNob3VsZFVwZGF0ZTtcbn1cblxudmFyIGRpZFdhcm5BYm91dE1hcHM7XG52YXIgZGlkV2FybkFib3V0R2VuZXJhdG9ycztcbnZhciBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzO1xudmFyIG93bmVySGFzS2V5VXNlV2FybmluZztcbnZhciBvd25lckhhc0Z1bmN0aW9uVHlwZVdhcm5pbmc7XG5cbnZhciB3YXJuRm9yTWlzc2luZ0tleSA9IGZ1bmN0aW9uIChjaGlsZCwgcmV0dXJuRmliZXIpIHt9O1xuXG57XG4gIGRpZFdhcm5BYm91dE1hcHMgPSBmYWxzZTtcbiAgZGlkV2FybkFib3V0R2VuZXJhdG9ycyA9IGZhbHNlO1xuICBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzID0ge307XG4gIC8qKlxuICAgKiBXYXJuIGlmIHRoZXJlJ3Mgbm8ga2V5IGV4cGxpY2l0bHkgc2V0IG9uIGR5bmFtaWMgYXJyYXlzIG9mIGNoaWxkcmVuIG9yXG4gICAqIG9iamVjdCBrZXlzIGFyZSBub3QgdmFsaWQuIFRoaXMgYWxsb3dzIHVzIHRvIGtlZXAgdHJhY2sgb2YgY2hpbGRyZW4gYmV0d2VlblxuICAgKiB1cGRhdGVzLlxuICAgKi9cblxuICBvd25lckhhc0tleVVzZVdhcm5pbmcgPSB7fTtcbiAgb3duZXJIYXNGdW5jdGlvblR5cGVXYXJuaW5nID0ge307XG5cbiAgd2FybkZvck1pc3NpbmdLZXkgPSBmdW5jdGlvbiAoY2hpbGQsIHJldHVybkZpYmVyKSB7XG4gICAgaWYgKGNoaWxkID09PSBudWxsIHx8IHR5cGVvZiBjaGlsZCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWNoaWxkLl9zdG9yZSB8fCBjaGlsZC5fc3RvcmUudmFsaWRhdGVkIHx8IGNoaWxkLmtleSAhPSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCEodHlwZW9mIGNoaWxkLl9zdG9yZSA9PT0gJ29iamVjdCcpKSB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIlJlYWN0IENvbXBvbmVudCBpbiB3YXJuRm9yTWlzc2luZ0tleSBzaG91bGQgaGF2ZSBhIF9zdG9yZS4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNoaWxkLl9zdG9yZS52YWxpZGF0ZWQgPSB0cnVlO1xuICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShyZXR1cm5GaWJlci50eXBlKSB8fCAnQ29tcG9uZW50JztcblxuICAgIGlmIChvd25lckhhc0tleVVzZVdhcm5pbmdbY29tcG9uZW50TmFtZV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBvd25lckhhc0tleVVzZVdhcm5pbmdbY29tcG9uZW50TmFtZV0gPSB0cnVlO1xuXG4gICAgZXJyb3IoJ0VhY2ggY2hpbGQgaW4gYSBsaXN0IHNob3VsZCBoYXZlIGEgdW5pcXVlICcgKyAnXCJrZXlcIiBwcm9wLiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3dhcm5pbmcta2V5cyBmb3IgJyArICdtb3JlIGluZm9ybWF0aW9uLicpO1xuICB9O1xufVxuXG52YXIgaXNBcnJheSQxID0gQXJyYXkuaXNBcnJheTtcblxuZnVuY3Rpb24gY29lcmNlUmVmKHJldHVybkZpYmVyLCBjdXJyZW50LCBlbGVtZW50KSB7XG4gIHZhciBtaXhlZFJlZiA9IGVsZW1lbnQucmVmO1xuXG4gIGlmIChtaXhlZFJlZiAhPT0gbnVsbCAmJiB0eXBlb2YgbWl4ZWRSZWYgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIG1peGVkUmVmICE9PSAnb2JqZWN0Jykge1xuICAgIHtcbiAgICAgIC8vIFRPRE86IENsZWFuIHRoaXMgdXAgb25jZSB3ZSB0dXJuIG9uIHRoZSBzdHJpbmcgcmVmIHdhcm5pbmcgZm9yXG4gICAgICAvLyBldmVyeW9uZSwgYmVjYXVzZSB0aGUgc3RyaWN0IG1vZGUgY2FzZSB3aWxsIG5vIGxvbmdlciBiZSByZWxldmFudFxuICAgICAgaWYgKChyZXR1cm5GaWJlci5tb2RlICYgU3RyaWN0TW9kZSB8fCB3YXJuQWJvdXRTdHJpbmdSZWZzKSAmJiAvLyBXZSB3YXJuIGluIFJlYWN0RWxlbWVudC5qcyBpZiBvd25lciBhbmQgc2VsZiBhcmUgZXF1YWwgZm9yIHN0cmluZyByZWZzXG4gICAgICAvLyBiZWNhdXNlIHRoZXNlIGNhbm5vdCBiZSBhdXRvbWF0aWNhbGx5IGNvbnZlcnRlZCB0byBhbiBhcnJvdyBmdW5jdGlvblxuICAgICAgLy8gdXNpbmcgYSBjb2RlbW9kLiBUaGVyZWZvcmUsIHdlIGRvbid0IGhhdmUgdG8gd2FybiBhYm91dCBzdHJpbmcgcmVmcyBhZ2Fpbi5cbiAgICAgICEoZWxlbWVudC5fb3duZXIgJiYgZWxlbWVudC5fc2VsZiAmJiBlbGVtZW50Ll9vd25lci5zdGF0ZU5vZGUgIT09IGVsZW1lbnQuX3NlbGYpKSB7XG4gICAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShyZXR1cm5GaWJlci50eXBlKSB8fCAnQ29tcG9uZW50JztcblxuICAgICAgICBpZiAoIWRpZFdhcm5BYm91dFN0cmluZ1JlZnNbY29tcG9uZW50TmFtZV0pIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBlcnJvcignQSBzdHJpbmcgcmVmLCBcIiVzXCIsIGhhcyBiZWVuIGZvdW5kIHdpdGhpbiBhIHN0cmljdCBtb2RlIHRyZWUuICcgKyAnU3RyaW5nIHJlZnMgYXJlIGEgc291cmNlIG9mIHBvdGVudGlhbCBidWdzIGFuZCBzaG91bGQgYmUgYXZvaWRlZC4gJyArICdXZSByZWNvbW1lbmQgdXNpbmcgdXNlUmVmKCkgb3IgY3JlYXRlUmVmKCkgaW5zdGVhZC4gJyArICdMZWFybiBtb3JlIGFib3V0IHVzaW5nIHJlZnMgc2FmZWx5IGhlcmU6ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3N0cmljdC1tb2RlLXN0cmluZy1yZWYnLCBtaXhlZFJlZik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGlkV2FybkFib3V0U3RyaW5nUmVmc1tjb21wb25lbnROYW1lXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZWxlbWVudC5fb3duZXIpIHtcbiAgICAgIHZhciBvd25lciA9IGVsZW1lbnQuX293bmVyO1xuICAgICAgdmFyIGluc3Q7XG5cbiAgICAgIGlmIChvd25lcikge1xuICAgICAgICB2YXIgb3duZXJGaWJlciA9IG93bmVyO1xuXG4gICAgICAgIGlmICghKG93bmVyRmliZXIudGFnID09PSBDbGFzc0NvbXBvbmVudCkpIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvciggXCJGdW5jdGlvbiBjb21wb25lbnRzIGNhbm5vdCBoYXZlIHN0cmluZyByZWZzLiBXZSByZWNvbW1lbmQgdXNpbmcgdXNlUmVmKCkgaW5zdGVhZC4gTGVhcm4gbW9yZSBhYm91dCB1c2luZyByZWZzIHNhZmVseSBoZXJlOiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvc3RyaWN0LW1vZGUtc3RyaW5nLXJlZlwiICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaW5zdCA9IG93bmVyRmliZXIuc3RhdGVOb2RlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWluc3QpIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCBcIk1pc3Npbmcgb3duZXIgZm9yIHN0cmluZyByZWYgXCIgKyBtaXhlZFJlZiArIFwiLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHN0cmluZ1JlZiA9ICcnICsgbWl4ZWRSZWY7IC8vIENoZWNrIGlmIHByZXZpb3VzIHN0cmluZyByZWYgbWF0Y2hlcyBuZXcgc3RyaW5nIHJlZlxuXG4gICAgICBpZiAoY3VycmVudCAhPT0gbnVsbCAmJiBjdXJyZW50LnJlZiAhPT0gbnVsbCAmJiB0eXBlb2YgY3VycmVudC5yZWYgPT09ICdmdW5jdGlvbicgJiYgY3VycmVudC5yZWYuX3N0cmluZ1JlZiA9PT0gc3RyaW5nUmVmKSB7XG4gICAgICAgIHJldHVybiBjdXJyZW50LnJlZjtcbiAgICAgIH1cblxuICAgICAgdmFyIHJlZiA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgcmVmcyA9IGluc3QucmVmcztcblxuICAgICAgICBpZiAocmVmcyA9PT0gZW1wdHlSZWZzT2JqZWN0KSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBhIGxhenkgcG9vbGVkIGZyb3plbiBvYmplY3QsIHNvIHdlIG5lZWQgdG8gaW5pdGlhbGl6ZS5cbiAgICAgICAgICByZWZzID0gaW5zdC5yZWZzID0ge307XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICBkZWxldGUgcmVmc1tzdHJpbmdSZWZdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlZnNbc3RyaW5nUmVmXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICByZWYuX3N0cmluZ1JlZiA9IHN0cmluZ1JlZjtcbiAgICAgIHJldHVybiByZWY7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghKHR5cGVvZiBtaXhlZFJlZiA9PT0gJ3N0cmluZycpKSB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJFeHBlY3RlZCByZWYgdG8gYmUgYSBmdW5jdGlvbiwgYSBzdHJpbmcsIGFuIG9iamVjdCByZXR1cm5lZCBieSBSZWFjdC5jcmVhdGVSZWYoKSwgb3IgbnVsbC5cIiApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghZWxlbWVudC5fb3duZXIpIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCBcIkVsZW1lbnQgcmVmIHdhcyBzcGVjaWZpZWQgYXMgYSBzdHJpbmcgKFwiICsgbWl4ZWRSZWYgKyBcIikgYnV0IG5vIG93bmVyIHdhcyBzZXQuIFRoaXMgY291bGQgaGFwcGVuIGZvciBvbmUgb2YgdGhlIGZvbGxvd2luZyByZWFzb25zOlxcbjEuIFlvdSBtYXkgYmUgYWRkaW5nIGEgcmVmIHRvIGEgZnVuY3Rpb24gY29tcG9uZW50XFxuMi4gWW91IG1heSBiZSBhZGRpbmcgYSByZWYgdG8gYSBjb21wb25lbnQgdGhhdCB3YXMgbm90IGNyZWF0ZWQgaW5zaWRlIGEgY29tcG9uZW50J3MgcmVuZGVyIG1ldGhvZFxcbjMuIFlvdSBoYXZlIG11bHRpcGxlIGNvcGllcyBvZiBSZWFjdCBsb2FkZWRcXG5TZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3JlZnMtbXVzdC1oYXZlLW93bmVyIGZvciBtb3JlIGluZm9ybWF0aW9uLlwiICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWl4ZWRSZWY7XG59XG5cbmZ1bmN0aW9uIHRocm93T25JbnZhbGlkT2JqZWN0VHlwZShyZXR1cm5GaWJlciwgbmV3Q2hpbGQpIHtcbiAgaWYgKHJldHVybkZpYmVyLnR5cGUgIT09ICd0ZXh0YXJlYScpIHtcbiAgICB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIk9iamVjdHMgYXJlIG5vdCB2YWxpZCBhcyBhIFJlYWN0IGNoaWxkIChmb3VuZDogXCIgKyAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG5ld0NoaWxkKSA9PT0gJ1tvYmplY3QgT2JqZWN0XScgPyAnb2JqZWN0IHdpdGgga2V5cyB7JyArIE9iamVjdC5rZXlzKG5ld0NoaWxkKS5qb2luKCcsICcpICsgJ30nIDogbmV3Q2hpbGQpICsgXCIpLiBJZiB5b3UgbWVhbnQgdG8gcmVuZGVyIGEgY29sbGVjdGlvbiBvZiBjaGlsZHJlbiwgdXNlIGFuIGFycmF5IGluc3RlYWQuXCIgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gd2Fybk9uRnVuY3Rpb25UeXBlKHJldHVybkZpYmVyKSB7XG4gIHtcbiAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUocmV0dXJuRmliZXIudHlwZSkgfHwgJ0NvbXBvbmVudCc7XG5cbiAgICBpZiAob3duZXJIYXNGdW5jdGlvblR5cGVXYXJuaW5nW2NvbXBvbmVudE5hbWVdKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgb3duZXJIYXNGdW5jdGlvblR5cGVXYXJuaW5nW2NvbXBvbmVudE5hbWVdID0gdHJ1ZTtcblxuICAgIGVycm9yKCdGdW5jdGlvbnMgYXJlIG5vdCB2YWxpZCBhcyBhIFJlYWN0IGNoaWxkLiBUaGlzIG1heSBoYXBwZW4gaWYgJyArICd5b3UgcmV0dXJuIGEgQ29tcG9uZW50IGluc3RlYWQgb2YgPENvbXBvbmVudCAvPiBmcm9tIHJlbmRlci4gJyArICdPciBtYXliZSB5b3UgbWVhbnQgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIHJhdGhlciB0aGFuIHJldHVybiBpdC4nKTtcbiAgfVxufSAvLyBXZSBhdm9pZCBpbmxpbmluZyB0aGlzIHRvIGF2b2lkIHBvdGVudGlhbCBkZW9wdHMgZnJvbSB1c2luZyB0cnkvY2F0Y2guXG4vLyB0byBiZSBhYmxlIHRvIG9wdGltaXplIGVhY2ggcGF0aCBpbmRpdmlkdWFsbHkgYnkgYnJhbmNoaW5nIGVhcmx5LiBUaGlzIG5lZWRzXG4vLyBhIGNvbXBpbGVyIG9yIHdlIGNhbiBkbyBpdCBtYW51YWxseS4gSGVscGVycyB0aGF0IGRvbid0IG5lZWQgdGhpcyBicmFuY2hpbmdcbi8vIGxpdmUgb3V0c2lkZSBvZiB0aGlzIGZ1bmN0aW9uLlxuXG5cbmZ1bmN0aW9uIENoaWxkUmVjb25jaWxlcihzaG91bGRUcmFja1NpZGVFZmZlY3RzKSB7XG4gIGZ1bmN0aW9uIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBjaGlsZFRvRGVsZXRlKSB7XG4gICAgaWYgKCFzaG91bGRUcmFja1NpZGVFZmZlY3RzKSB7XG4gICAgICAvLyBOb29wLlxuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gRGVsZXRpb25zIGFyZSBhZGRlZCBpbiByZXZlcnNlZCBvcmRlciBzbyB3ZSBhZGQgaXQgdG8gdGhlIGZyb250LlxuICAgIC8vIEF0IHRoaXMgcG9pbnQsIHRoZSByZXR1cm4gZmliZXIncyBlZmZlY3QgbGlzdCBpcyBlbXB0eSBleGNlcHQgZm9yXG4gICAgLy8gZGVsZXRpb25zLCBzbyB3ZSBjYW4ganVzdCBhcHBlbmQgdGhlIGRlbGV0aW9uIHRvIHRoZSBsaXN0LiBUaGUgcmVtYWluaW5nXG4gICAgLy8gZWZmZWN0cyBhcmVuJ3QgYWRkZWQgdW50aWwgdGhlIGNvbXBsZXRlIHBoYXNlLiBPbmNlIHdlIGltcGxlbWVudFxuICAgIC8vIHJlc3VtaW5nLCB0aGlzIG1heSBub3QgYmUgdHJ1ZS5cblxuXG4gICAgdmFyIGxhc3QgPSByZXR1cm5GaWJlci5sYXN0RWZmZWN0O1xuXG4gICAgaWYgKGxhc3QgIT09IG51bGwpIHtcbiAgICAgIGxhc3QubmV4dEVmZmVjdCA9IGNoaWxkVG9EZWxldGU7XG4gICAgICByZXR1cm5GaWJlci5sYXN0RWZmZWN0ID0gY2hpbGRUb0RlbGV0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuRmliZXIuZmlyc3RFZmZlY3QgPSByZXR1cm5GaWJlci5sYXN0RWZmZWN0ID0gY2hpbGRUb0RlbGV0ZTtcbiAgICB9XG5cbiAgICBjaGlsZFRvRGVsZXRlLm5leHRFZmZlY3QgPSBudWxsO1xuICAgIGNoaWxkVG9EZWxldGUuZmxhZ3MgPSBEZWxldGlvbjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCkge1xuICAgIGlmICghc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICAgICAgLy8gTm9vcC5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gLy8gVE9ETzogRm9yIHRoZSBzaG91bGRDbG9uZSBjYXNlLCB0aGlzIGNvdWxkIGJlIG1pY3JvLW9wdGltaXplZCBhIGJpdCBieVxuICAgIC8vIGFzc3VtaW5nIHRoYXQgYWZ0ZXIgdGhlIGZpcnN0IGNoaWxkIHdlJ3ZlIGFscmVhZHkgYWRkZWQgZXZlcnl0aGluZy5cblxuXG4gICAgdmFyIGNoaWxkVG9EZWxldGUgPSBjdXJyZW50Rmlyc3RDaGlsZDtcblxuICAgIHdoaWxlIChjaGlsZFRvRGVsZXRlICE9PSBudWxsKSB7XG4gICAgICBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgY2hpbGRUb0RlbGV0ZSk7XG4gICAgICBjaGlsZFRvRGVsZXRlID0gY2hpbGRUb0RlbGV0ZS5zaWJsaW5nO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZnVuY3Rpb24gbWFwUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkKSB7XG4gICAgLy8gQWRkIHRoZSByZW1haW5pbmcgY2hpbGRyZW4gdG8gYSB0ZW1wb3JhcnkgbWFwIHNvIHRoYXQgd2UgY2FuIGZpbmQgdGhlbSBieVxuICAgIC8vIGtleXMgcXVpY2tseS4gSW1wbGljaXQgKG51bGwpIGtleXMgZ2V0IGFkZGVkIHRvIHRoaXMgc2V0IHdpdGggdGhlaXIgaW5kZXhcbiAgICAvLyBpbnN0ZWFkLlxuICAgIHZhciBleGlzdGluZ0NoaWxkcmVuID0gbmV3IE1hcCgpO1xuICAgIHZhciBleGlzdGluZ0NoaWxkID0gY3VycmVudEZpcnN0Q2hpbGQ7XG5cbiAgICB3aGlsZSAoZXhpc3RpbmdDaGlsZCAhPT0gbnVsbCkge1xuICAgICAgaWYgKGV4aXN0aW5nQ2hpbGQua2V5ICE9PSBudWxsKSB7XG4gICAgICAgIGV4aXN0aW5nQ2hpbGRyZW4uc2V0KGV4aXN0aW5nQ2hpbGQua2V5LCBleGlzdGluZ0NoaWxkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV4aXN0aW5nQ2hpbGRyZW4uc2V0KGV4aXN0aW5nQ2hpbGQuaW5kZXgsIGV4aXN0aW5nQ2hpbGQpO1xuICAgICAgfVxuXG4gICAgICBleGlzdGluZ0NoaWxkID0gZXhpc3RpbmdDaGlsZC5zaWJsaW5nO1xuICAgIH1cblxuICAgIHJldHVybiBleGlzdGluZ0NoaWxkcmVuO1xuICB9XG5cbiAgZnVuY3Rpb24gdXNlRmliZXIoZmliZXIsIHBlbmRpbmdQcm9wcykge1xuICAgIC8vIFdlIGN1cnJlbnRseSBzZXQgc2libGluZyB0byBudWxsIGFuZCBpbmRleCB0byAwIGhlcmUgYmVjYXVzZSBpdCBpcyBlYXN5XG4gICAgLy8gdG8gZm9yZ2V0IHRvIGRvIGJlZm9yZSByZXR1cm5pbmcgaXQuIEUuZy4gZm9yIHRoZSBzaW5nbGUgY2hpbGQgY2FzZS5cbiAgICB2YXIgY2xvbmUgPSBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhmaWJlciwgcGVuZGluZ1Byb3BzKTtcbiAgICBjbG9uZS5pbmRleCA9IDA7XG4gICAgY2xvbmUuc2libGluZyA9IG51bGw7XG4gICAgcmV0dXJuIGNsb25lO1xuICB9XG5cbiAgZnVuY3Rpb24gcGxhY2VDaGlsZChuZXdGaWJlciwgbGFzdFBsYWNlZEluZGV4LCBuZXdJbmRleCkge1xuICAgIG5ld0ZpYmVyLmluZGV4ID0gbmV3SW5kZXg7XG5cbiAgICBpZiAoIXNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgICAgIC8vIE5vb3AuXG4gICAgICByZXR1cm4gbGFzdFBsYWNlZEluZGV4O1xuICAgIH1cblxuICAgIHZhciBjdXJyZW50ID0gbmV3RmliZXIuYWx0ZXJuYXRlO1xuXG4gICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgIHZhciBvbGRJbmRleCA9IGN1cnJlbnQuaW5kZXg7XG5cbiAgICAgIGlmIChvbGRJbmRleCA8IGxhc3RQbGFjZWRJbmRleCkge1xuICAgICAgICAvLyBUaGlzIGlzIGEgbW92ZS5cbiAgICAgICAgbmV3RmliZXIuZmxhZ3MgPSBQbGFjZW1lbnQ7XG4gICAgICAgIHJldHVybiBsYXN0UGxhY2VkSW5kZXg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUaGlzIGl0ZW0gY2FuIHN0YXkgaW4gcGxhY2UuXG4gICAgICAgIHJldHVybiBvbGRJbmRleDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhpcyBpcyBhbiBpbnNlcnRpb24uXG4gICAgICBuZXdGaWJlci5mbGFncyA9IFBsYWNlbWVudDtcbiAgICAgIHJldHVybiBsYXN0UGxhY2VkSW5kZXg7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcGxhY2VTaW5nbGVDaGlsZChuZXdGaWJlcikge1xuICAgIC8vIFRoaXMgaXMgc2ltcGxlciBmb3IgdGhlIHNpbmdsZSBjaGlsZCBjYXNlLiBXZSBvbmx5IG5lZWQgdG8gZG8gYVxuICAgIC8vIHBsYWNlbWVudCBmb3IgaW5zZXJ0aW5nIG5ldyBjaGlsZHJlbi5cbiAgICBpZiAoc2hvdWxkVHJhY2tTaWRlRWZmZWN0cyAmJiBuZXdGaWJlci5hbHRlcm5hdGUgPT09IG51bGwpIHtcbiAgICAgIG5ld0ZpYmVyLmZsYWdzID0gUGxhY2VtZW50O1xuICAgIH1cblxuICAgIHJldHVybiBuZXdGaWJlcjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZVRleHROb2RlKHJldHVybkZpYmVyLCBjdXJyZW50LCB0ZXh0Q29udGVudCwgbGFuZXMpIHtcbiAgICBpZiAoY3VycmVudCA9PT0gbnVsbCB8fCBjdXJyZW50LnRhZyAhPT0gSG9zdFRleHQpIHtcbiAgICAgIC8vIEluc2VydFxuICAgICAgdmFyIGNyZWF0ZWQgPSBjcmVhdGVGaWJlckZyb21UZXh0KHRleHRDb250ZW50LCByZXR1cm5GaWJlci5tb2RlLCBsYW5lcyk7XG4gICAgICBjcmVhdGVkLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgcmV0dXJuIGNyZWF0ZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFVwZGF0ZVxuICAgICAgdmFyIGV4aXN0aW5nID0gdXNlRmliZXIoY3VycmVudCwgdGV4dENvbnRlbnQpO1xuICAgICAgZXhpc3RpbmcucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlRWxlbWVudChyZXR1cm5GaWJlciwgY3VycmVudCwgZWxlbWVudCwgbGFuZXMpIHtcbiAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgaWYgKGN1cnJlbnQuZWxlbWVudFR5cGUgPT09IGVsZW1lbnQudHlwZSB8fCAoIC8vIEtlZXAgdGhpcyBjaGVjayBpbmxpbmUgc28gaXQgb25seSBydW5zIG9uIHRoZSBmYWxzZSBwYXRoOlxuICAgICAgIGlzQ29tcGF0aWJsZUZhbWlseUZvckhvdFJlbG9hZGluZyhjdXJyZW50LCBlbGVtZW50KSApKSB7XG4gICAgICAgIC8vIE1vdmUgYmFzZWQgb24gaW5kZXhcbiAgICAgICAgdmFyIGV4aXN0aW5nID0gdXNlRmliZXIoY3VycmVudCwgZWxlbWVudC5wcm9wcyk7XG4gICAgICAgIGV4aXN0aW5nLnJlZiA9IGNvZXJjZVJlZihyZXR1cm5GaWJlciwgY3VycmVudCwgZWxlbWVudCk7XG4gICAgICAgIGV4aXN0aW5nLnJldHVybiA9IHJldHVybkZpYmVyO1xuXG4gICAgICAgIHtcbiAgICAgICAgICBleGlzdGluZy5fZGVidWdTb3VyY2UgPSBlbGVtZW50Ll9zb3VyY2U7XG4gICAgICAgICAgZXhpc3RpbmcuX2RlYnVnT3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBleGlzdGluZztcbiAgICAgIH1cbiAgICB9IC8vIEluc2VydFxuXG5cbiAgICB2YXIgY3JlYXRlZCA9IGNyZWF0ZUZpYmVyRnJvbUVsZW1lbnQoZWxlbWVudCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMpO1xuICAgIGNyZWF0ZWQucmVmID0gY29lcmNlUmVmKHJldHVybkZpYmVyLCBjdXJyZW50LCBlbGVtZW50KTtcbiAgICBjcmVhdGVkLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgIHJldHVybiBjcmVhdGVkO1xuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlUG9ydGFsKHJldHVybkZpYmVyLCBjdXJyZW50LCBwb3J0YWwsIGxhbmVzKSB7XG4gICAgaWYgKGN1cnJlbnQgPT09IG51bGwgfHwgY3VycmVudC50YWcgIT09IEhvc3RQb3J0YWwgfHwgY3VycmVudC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyAhPT0gcG9ydGFsLmNvbnRhaW5lckluZm8gfHwgY3VycmVudC5zdGF0ZU5vZGUuaW1wbGVtZW50YXRpb24gIT09IHBvcnRhbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgLy8gSW5zZXJ0XG4gICAgICB2YXIgY3JlYXRlZCA9IGNyZWF0ZUZpYmVyRnJvbVBvcnRhbChwb3J0YWwsIHJldHVybkZpYmVyLm1vZGUsIGxhbmVzKTtcbiAgICAgIGNyZWF0ZWQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICByZXR1cm4gY3JlYXRlZDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVXBkYXRlXG4gICAgICB2YXIgZXhpc3RpbmcgPSB1c2VGaWJlcihjdXJyZW50LCBwb3J0YWwuY2hpbGRyZW4gfHwgW10pO1xuICAgICAgZXhpc3RpbmcucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlRnJhZ21lbnQocmV0dXJuRmliZXIsIGN1cnJlbnQsIGZyYWdtZW50LCBsYW5lcywga2V5KSB7XG4gICAgaWYgKGN1cnJlbnQgPT09IG51bGwgfHwgY3VycmVudC50YWcgIT09IEZyYWdtZW50KSB7XG4gICAgICAvLyBJbnNlcnRcbiAgICAgIHZhciBjcmVhdGVkID0gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoZnJhZ21lbnQsIHJldHVybkZpYmVyLm1vZGUsIGxhbmVzLCBrZXkpO1xuICAgICAgY3JlYXRlZC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgIHJldHVybiBjcmVhdGVkO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBVcGRhdGVcbiAgICAgIHZhciBleGlzdGluZyA9IHVzZUZpYmVyKGN1cnJlbnQsIGZyYWdtZW50KTtcbiAgICAgIGV4aXN0aW5nLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUNoaWxkKHJldHVybkZpYmVyLCBuZXdDaGlsZCwgbGFuZXMpIHtcbiAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgbmV3Q2hpbGQgPT09ICdudW1iZXInKSB7XG4gICAgICAvLyBUZXh0IG5vZGVzIGRvbid0IGhhdmUga2V5cy4gSWYgdGhlIHByZXZpb3VzIG5vZGUgaXMgaW1wbGljaXRseSBrZXllZFxuICAgICAgLy8gd2UgY2FuIGNvbnRpbnVlIHRvIHJlcGxhY2UgaXQgd2l0aG91dCBhYm9ydGluZyBldmVuIGlmIGl0IGlzIG5vdCBhIHRleHRcbiAgICAgIC8vIG5vZGUuXG4gICAgICB2YXIgY3JlYXRlZCA9IGNyZWF0ZUZpYmVyRnJvbVRleHQoJycgKyBuZXdDaGlsZCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMpO1xuICAgICAgY3JlYXRlZC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgIHJldHVybiBjcmVhdGVkO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09ICdvYmplY3QnICYmIG5ld0NoaWxkICE9PSBudWxsKSB7XG4gICAgICBzd2l0Y2ggKG5ld0NoaWxkLiQkdHlwZW9mKSB7XG4gICAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBfY3JlYXRlZCA9IGNyZWF0ZUZpYmVyRnJvbUVsZW1lbnQobmV3Q2hpbGQsIHJldHVybkZpYmVyLm1vZGUsIGxhbmVzKTtcblxuICAgICAgICAgICAgX2NyZWF0ZWQucmVmID0gY29lcmNlUmVmKHJldHVybkZpYmVyLCBudWxsLCBuZXdDaGlsZCk7XG4gICAgICAgICAgICBfY3JlYXRlZC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgICAgICAgIHJldHVybiBfY3JlYXRlZDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgX2NyZWF0ZWQyID0gY3JlYXRlRmliZXJGcm9tUG9ydGFsKG5ld0NoaWxkLCByZXR1cm5GaWJlci5tb2RlLCBsYW5lcyk7XG5cbiAgICAgICAgICAgIF9jcmVhdGVkMi5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgICAgICAgIHJldHVybiBfY3JlYXRlZDI7XG4gICAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaXNBcnJheSQxKG5ld0NoaWxkKSB8fCBnZXRJdGVyYXRvckZuKG5ld0NoaWxkKSkge1xuICAgICAgICB2YXIgX2NyZWF0ZWQzID0gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQobmV3Q2hpbGQsIHJldHVybkZpYmVyLm1vZGUsIGxhbmVzLCBudWxsKTtcblxuICAgICAgICBfY3JlYXRlZDMucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICAgIHJldHVybiBfY3JlYXRlZDM7XG4gICAgICB9XG5cbiAgICAgIHRocm93T25JbnZhbGlkT2JqZWN0VHlwZShyZXR1cm5GaWJlciwgbmV3Q2hpbGQpO1xuICAgIH1cblxuICAgIHtcbiAgICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgd2Fybk9uRnVuY3Rpb25UeXBlKHJldHVybkZpYmVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZVNsb3QocmV0dXJuRmliZXIsIG9sZEZpYmVyLCBuZXdDaGlsZCwgbGFuZXMpIHtcbiAgICAvLyBVcGRhdGUgdGhlIGZpYmVyIGlmIHRoZSBrZXlzIG1hdGNoLCBvdGhlcndpc2UgcmV0dXJuIG51bGwuXG4gICAgdmFyIGtleSA9IG9sZEZpYmVyICE9PSBudWxsID8gb2xkRmliZXIua2V5IDogbnVsbDtcblxuICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBuZXdDaGlsZCA9PT0gJ251bWJlcicpIHtcbiAgICAgIC8vIFRleHQgbm9kZXMgZG9uJ3QgaGF2ZSBrZXlzLiBJZiB0aGUgcHJldmlvdXMgbm9kZSBpcyBpbXBsaWNpdGx5IGtleWVkXG4gICAgICAvLyB3ZSBjYW4gY29udGludWUgdG8gcmVwbGFjZSBpdCB3aXRob3V0IGFib3J0aW5nIGV2ZW4gaWYgaXQgaXMgbm90IGEgdGV4dFxuICAgICAgLy8gbm9kZS5cbiAgICAgIGlmIChrZXkgIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB1cGRhdGVUZXh0Tm9kZShyZXR1cm5GaWJlciwgb2xkRmliZXIsICcnICsgbmV3Q2hpbGQsIGxhbmVzKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnb2JqZWN0JyAmJiBuZXdDaGlsZCAhPT0gbnVsbCkge1xuICAgICAgc3dpdGNoIChuZXdDaGlsZC4kJHR5cGVvZikge1xuICAgICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAobmV3Q2hpbGQua2V5ID09PSBrZXkpIHtcbiAgICAgICAgICAgICAgaWYgKG5ld0NoaWxkLnR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdXBkYXRlRnJhZ21lbnQocmV0dXJuRmliZXIsIG9sZEZpYmVyLCBuZXdDaGlsZC5wcm9wcy5jaGlsZHJlbiwgbGFuZXMsIGtleSk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gdXBkYXRlRWxlbWVudChyZXR1cm5GaWJlciwgb2xkRmliZXIsIG5ld0NoaWxkLCBsYW5lcyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAobmV3Q2hpbGQua2V5ID09PSBrZXkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZVBvcnRhbChyZXR1cm5GaWJlciwgb2xkRmliZXIsIG5ld0NoaWxkLCBsYW5lcyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChpc0FycmF5JDEobmV3Q2hpbGQpIHx8IGdldEl0ZXJhdG9yRm4obmV3Q2hpbGQpKSB7XG4gICAgICAgIGlmIChrZXkgIT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1cGRhdGVGcmFnbWVudChyZXR1cm5GaWJlciwgb2xkRmliZXIsIG5ld0NoaWxkLCBsYW5lcywgbnVsbCk7XG4gICAgICB9XG5cbiAgICAgIHRocm93T25JbnZhbGlkT2JqZWN0VHlwZShyZXR1cm5GaWJlciwgbmV3Q2hpbGQpO1xuICAgIH1cblxuICAgIHtcbiAgICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgd2Fybk9uRnVuY3Rpb25UeXBlKHJldHVybkZpYmVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZUZyb21NYXAoZXhpc3RpbmdDaGlsZHJlbiwgcmV0dXJuRmliZXIsIG5ld0lkeCwgbmV3Q2hpbGQsIGxhbmVzKSB7XG4gICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIG5ld0NoaWxkID09PSAnbnVtYmVyJykge1xuICAgICAgLy8gVGV4dCBub2RlcyBkb24ndCBoYXZlIGtleXMsIHNvIHdlIG5laXRoZXIgaGF2ZSB0byBjaGVjayB0aGUgb2xkIG5vclxuICAgICAgLy8gbmV3IG5vZGUgZm9yIHRoZSBrZXkuIElmIGJvdGggYXJlIHRleHQgbm9kZXMsIHRoZXkgbWF0Y2guXG4gICAgICB2YXIgbWF0Y2hlZEZpYmVyID0gZXhpc3RpbmdDaGlsZHJlbi5nZXQobmV3SWR4KSB8fCBudWxsO1xuICAgICAgcmV0dXJuIHVwZGF0ZVRleHROb2RlKHJldHVybkZpYmVyLCBtYXRjaGVkRmliZXIsICcnICsgbmV3Q2hpbGQsIGxhbmVzKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnb2JqZWN0JyAmJiBuZXdDaGlsZCAhPT0gbnVsbCkge1xuICAgICAgc3dpdGNoIChuZXdDaGlsZC4kJHR5cGVvZikge1xuICAgICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgX21hdGNoZWRGaWJlciA9IGV4aXN0aW5nQ2hpbGRyZW4uZ2V0KG5ld0NoaWxkLmtleSA9PT0gbnVsbCA/IG5ld0lkeCA6IG5ld0NoaWxkLmtleSkgfHwgbnVsbDtcblxuICAgICAgICAgICAgaWYgKG5ld0NoaWxkLnR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZUZyYWdtZW50KHJldHVybkZpYmVyLCBfbWF0Y2hlZEZpYmVyLCBuZXdDaGlsZC5wcm9wcy5jaGlsZHJlbiwgbGFuZXMsIG5ld0NoaWxkLmtleSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB1cGRhdGVFbGVtZW50KHJldHVybkZpYmVyLCBfbWF0Y2hlZEZpYmVyLCBuZXdDaGlsZCwgbGFuZXMpO1xuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBfbWF0Y2hlZEZpYmVyMiA9IGV4aXN0aW5nQ2hpbGRyZW4uZ2V0KG5ld0NoaWxkLmtleSA9PT0gbnVsbCA/IG5ld0lkeCA6IG5ld0NoaWxkLmtleSkgfHwgbnVsbDtcblxuICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZVBvcnRhbChyZXR1cm5GaWJlciwgX21hdGNoZWRGaWJlcjIsIG5ld0NoaWxkLCBsYW5lcyk7XG4gICAgICAgICAgfVxuXG4gICAgICB9XG5cbiAgICAgIGlmIChpc0FycmF5JDEobmV3Q2hpbGQpIHx8IGdldEl0ZXJhdG9yRm4obmV3Q2hpbGQpKSB7XG4gICAgICAgIHZhciBfbWF0Y2hlZEZpYmVyMyA9IGV4aXN0aW5nQ2hpbGRyZW4uZ2V0KG5ld0lkeCkgfHwgbnVsbDtcblxuICAgICAgICByZXR1cm4gdXBkYXRlRnJhZ21lbnQocmV0dXJuRmliZXIsIF9tYXRjaGVkRmliZXIzLCBuZXdDaGlsZCwgbGFuZXMsIG51bGwpO1xuICAgICAgfVxuXG4gICAgICB0aHJvd09uSW52YWxpZE9iamVjdFR5cGUocmV0dXJuRmliZXIsIG5ld0NoaWxkKTtcbiAgICB9XG5cbiAgICB7XG4gICAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHdhcm5PbkZ1bmN0aW9uVHlwZShyZXR1cm5GaWJlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgLyoqXG4gICAqIFdhcm5zIGlmIHRoZXJlIGlzIGEgZHVwbGljYXRlIG9yIG1pc3Npbmcga2V5XG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gd2Fybk9uSW52YWxpZEtleShjaGlsZCwga25vd25LZXlzLCByZXR1cm5GaWJlcikge1xuICAgIHtcbiAgICAgIGlmICh0eXBlb2YgY2hpbGQgIT09ICdvYmplY3QnIHx8IGNoaWxkID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBrbm93bktleXM7XG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAoY2hpbGQuJCR0eXBlb2YpIHtcbiAgICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgICAgd2FybkZvck1pc3NpbmdLZXkoY2hpbGQsIHJldHVybkZpYmVyKTtcbiAgICAgICAgICB2YXIga2V5ID0gY2hpbGQua2V5O1xuXG4gICAgICAgICAgaWYgKHR5cGVvZiBrZXkgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoa25vd25LZXlzID09PSBudWxsKSB7XG4gICAgICAgICAgICBrbm93bktleXMgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgICBrbm93bktleXMuYWRkKGtleSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIWtub3duS2V5cy5oYXMoa2V5KSkge1xuICAgICAgICAgICAga25vd25LZXlzLmFkZChrZXkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZXJyb3IoJ0VuY291bnRlcmVkIHR3byBjaGlsZHJlbiB3aXRoIHRoZSBzYW1lIGtleSwgYCVzYC4gJyArICdLZXlzIHNob3VsZCBiZSB1bmlxdWUgc28gdGhhdCBjb21wb25lbnRzIG1haW50YWluIHRoZWlyIGlkZW50aXR5ICcgKyAnYWNyb3NzIHVwZGF0ZXMuIE5vbi11bmlxdWUga2V5cyBtYXkgY2F1c2UgY2hpbGRyZW4gdG8gYmUgJyArICdkdXBsaWNhdGVkIGFuZC9vciBvbWl0dGVkIFx1MjAxNCB0aGUgYmVoYXZpb3IgaXMgdW5zdXBwb3J0ZWQgYW5kICcgKyAnY291bGQgY2hhbmdlIGluIGEgZnV0dXJlIHZlcnNpb24uJywga2V5KTtcblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBrbm93bktleXM7XG4gIH1cblxuICBmdW5jdGlvbiByZWNvbmNpbGVDaGlsZHJlbkFycmF5KHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgbmV3Q2hpbGRyZW4sIGxhbmVzKSB7XG4gICAgLy8gVGhpcyBhbGdvcml0aG0gY2FuJ3Qgb3B0aW1pemUgYnkgc2VhcmNoaW5nIGZyb20gYm90aCBlbmRzIHNpbmNlIHdlXG4gICAgLy8gZG9uJ3QgaGF2ZSBiYWNrcG9pbnRlcnMgb24gZmliZXJzLiBJJ20gdHJ5aW5nIHRvIHNlZSBob3cgZmFyIHdlIGNhbiBnZXRcbiAgICAvLyB3aXRoIHRoYXQgbW9kZWwuIElmIGl0IGVuZHMgdXAgbm90IGJlaW5nIHdvcnRoIHRoZSB0cmFkZW9mZnMsIHdlIGNhblxuICAgIC8vIGFkZCBpdCBsYXRlci5cbiAgICAvLyBFdmVuIHdpdGggYSB0d28gZW5kZWQgb3B0aW1pemF0aW9uLCB3ZSdkIHdhbnQgdG8gb3B0aW1pemUgZm9yIHRoZSBjYXNlXG4gICAgLy8gd2hlcmUgdGhlcmUgYXJlIGZldyBjaGFuZ2VzIGFuZCBicnV0ZSBmb3JjZSB0aGUgY29tcGFyaXNvbiBpbnN0ZWFkIG9mXG4gICAgLy8gZ29pbmcgZm9yIHRoZSBNYXAuIEl0J2QgbGlrZSB0byBleHBsb3JlIGhpdHRpbmcgdGhhdCBwYXRoIGZpcnN0IGluXG4gICAgLy8gZm9yd2FyZC1vbmx5IG1vZGUgYW5kIG9ubHkgZ28gZm9yIHRoZSBNYXAgb25jZSB3ZSBub3RpY2UgdGhhdCB3ZSBuZWVkXG4gICAgLy8gbG90cyBvZiBsb29rIGFoZWFkLiBUaGlzIGRvZXNuJ3QgaGFuZGxlIHJldmVyc2FsIGFzIHdlbGwgYXMgdHdvIGVuZGVkXG4gICAgLy8gc2VhcmNoIGJ1dCB0aGF0J3MgdW51c3VhbC4gQmVzaWRlcywgZm9yIHRoZSB0d28gZW5kZWQgb3B0aW1pemF0aW9uIHRvXG4gICAgLy8gd29yayBvbiBJdGVyYWJsZXMsIHdlJ2QgbmVlZCB0byBjb3B5IHRoZSB3aG9sZSBzZXQuXG4gICAgLy8gSW4gdGhpcyBmaXJzdCBpdGVyYXRpb24sIHdlJ2xsIGp1c3QgbGl2ZSB3aXRoIGhpdHRpbmcgdGhlIGJhZCBjYXNlXG4gICAgLy8gKGFkZGluZyBldmVyeXRoaW5nIHRvIGEgTWFwKSBpbiBmb3IgZXZlcnkgaW5zZXJ0L21vdmUuXG4gICAgLy8gSWYgeW91IGNoYW5nZSB0aGlzIGNvZGUsIGFsc28gdXBkYXRlIHJlY29uY2lsZUNoaWxkcmVuSXRlcmF0b3IoKSB3aGljaFxuICAgIC8vIHVzZXMgdGhlIHNhbWUgYWxnb3JpdGhtLlxuICAgIHtcbiAgICAgIC8vIEZpcnN0LCB2YWxpZGF0ZSBrZXlzLlxuICAgICAgdmFyIGtub3duS2V5cyA9IG51bGw7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmV3Q2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGNoaWxkID0gbmV3Q2hpbGRyZW5baV07XG4gICAgICAgIGtub3duS2V5cyA9IHdhcm5PbkludmFsaWRLZXkoY2hpbGQsIGtub3duS2V5cywgcmV0dXJuRmliZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciByZXN1bHRpbmdGaXJzdENoaWxkID0gbnVsbDtcbiAgICB2YXIgcHJldmlvdXNOZXdGaWJlciA9IG51bGw7XG4gICAgdmFyIG9sZEZpYmVyID0gY3VycmVudEZpcnN0Q2hpbGQ7XG4gICAgdmFyIGxhc3RQbGFjZWRJbmRleCA9IDA7XG4gICAgdmFyIG5ld0lkeCA9IDA7XG4gICAgdmFyIG5leHRPbGRGaWJlciA9IG51bGw7XG5cbiAgICBmb3IgKDsgb2xkRmliZXIgIT09IG51bGwgJiYgbmV3SWR4IDwgbmV3Q2hpbGRyZW4ubGVuZ3RoOyBuZXdJZHgrKykge1xuICAgICAgaWYgKG9sZEZpYmVyLmluZGV4ID4gbmV3SWR4KSB7XG4gICAgICAgIG5leHRPbGRGaWJlciA9IG9sZEZpYmVyO1xuICAgICAgICBvbGRGaWJlciA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXh0T2xkRmliZXIgPSBvbGRGaWJlci5zaWJsaW5nO1xuICAgICAgfVxuXG4gICAgICB2YXIgbmV3RmliZXIgPSB1cGRhdGVTbG90KHJldHVybkZpYmVyLCBvbGRGaWJlciwgbmV3Q2hpbGRyZW5bbmV3SWR4XSwgbGFuZXMpO1xuXG4gICAgICBpZiAobmV3RmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgLy8gVE9ETzogVGhpcyBicmVha3Mgb24gZW1wdHkgc2xvdHMgbGlrZSBudWxsIGNoaWxkcmVuLiBUaGF0J3NcbiAgICAgICAgLy8gdW5mb3J0dW5hdGUgYmVjYXVzZSBpdCB0cmlnZ2VycyB0aGUgc2xvdyBwYXRoIGFsbCB0aGUgdGltZS4gV2UgbmVlZFxuICAgICAgICAvLyBhIGJldHRlciB3YXkgdG8gY29tbXVuaWNhdGUgd2hldGhlciB0aGlzIHdhcyBhIG1pc3Mgb3IgbnVsbCxcbiAgICAgICAgLy8gYm9vbGVhbiwgdW5kZWZpbmVkLCBldGMuXG4gICAgICAgIGlmIChvbGRGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAgIG9sZEZpYmVyID0gbmV4dE9sZEZpYmVyO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChzaG91bGRUcmFja1NpZGVFZmZlY3RzKSB7XG4gICAgICAgIGlmIChvbGRGaWJlciAmJiBuZXdGaWJlci5hbHRlcm5hdGUgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBXZSBtYXRjaGVkIHRoZSBzbG90LCBidXQgd2UgZGlkbid0IHJldXNlIHRoZSBleGlzdGluZyBmaWJlciwgc28gd2VcbiAgICAgICAgICAvLyBuZWVkIHRvIGRlbGV0ZSB0aGUgZXhpc3RpbmcgY2hpbGQuXG4gICAgICAgICAgZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIG9sZEZpYmVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsYXN0UGxhY2VkSW5kZXggPSBwbGFjZUNoaWxkKG5ld0ZpYmVyLCBsYXN0UGxhY2VkSW5kZXgsIG5ld0lkeCk7XG5cbiAgICAgIGlmIChwcmV2aW91c05ld0ZpYmVyID09PSBudWxsKSB7XG4gICAgICAgIC8vIFRPRE86IE1vdmUgb3V0IG9mIHRoZSBsb29wLiBUaGlzIG9ubHkgaGFwcGVucyBmb3IgdGhlIGZpcnN0IHJ1bi5cbiAgICAgICAgcmVzdWx0aW5nRmlyc3RDaGlsZCA9IG5ld0ZpYmVyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVE9ETzogRGVmZXIgc2libGluZ3MgaWYgd2UncmUgbm90IGF0IHRoZSByaWdodCBpbmRleCBmb3IgdGhpcyBzbG90LlxuICAgICAgICAvLyBJLmUuIGlmIHdlIGhhZCBudWxsIHZhbHVlcyBiZWZvcmUsIHRoZW4gd2Ugd2FudCB0byBkZWZlciB0aGlzXG4gICAgICAgIC8vIGZvciBlYWNoIG51bGwgdmFsdWUuIEhvd2V2ZXIsIHdlIGFsc28gZG9uJ3Qgd2FudCB0byBjYWxsIHVwZGF0ZVNsb3RcbiAgICAgICAgLy8gd2l0aCB0aGUgcHJldmlvdXMgb25lLlxuICAgICAgICBwcmV2aW91c05ld0ZpYmVyLnNpYmxpbmcgPSBuZXdGaWJlcjtcbiAgICAgIH1cblxuICAgICAgcHJldmlvdXNOZXdGaWJlciA9IG5ld0ZpYmVyO1xuICAgICAgb2xkRmliZXIgPSBuZXh0T2xkRmliZXI7XG4gICAgfVxuXG4gICAgaWYgKG5ld0lkeCA9PT0gbmV3Q2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAvLyBXZSd2ZSByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIG5ldyBjaGlsZHJlbi4gV2UgY2FuIGRlbGV0ZSB0aGUgcmVzdC5cbiAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBvbGRGaWJlcik7XG4gICAgICByZXR1cm4gcmVzdWx0aW5nRmlyc3RDaGlsZDtcbiAgICB9XG5cbiAgICBpZiAob2xkRmliZXIgPT09IG51bGwpIHtcbiAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYW55IG1vcmUgZXhpc3RpbmcgY2hpbGRyZW4gd2UgY2FuIGNob29zZSBhIGZhc3QgcGF0aFxuICAgICAgLy8gc2luY2UgdGhlIHJlc3Qgd2lsbCBhbGwgYmUgaW5zZXJ0aW9ucy5cbiAgICAgIGZvciAoOyBuZXdJZHggPCBuZXdDaGlsZHJlbi5sZW5ndGg7IG5ld0lkeCsrKSB7XG4gICAgICAgIHZhciBfbmV3RmliZXIgPSBjcmVhdGVDaGlsZChyZXR1cm5GaWJlciwgbmV3Q2hpbGRyZW5bbmV3SWR4XSwgbGFuZXMpO1xuXG4gICAgICAgIGlmIChfbmV3RmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxhc3RQbGFjZWRJbmRleCA9IHBsYWNlQ2hpbGQoX25ld0ZpYmVyLCBsYXN0UGxhY2VkSW5kZXgsIG5ld0lkeCk7XG5cbiAgICAgICAgaWYgKHByZXZpb3VzTmV3RmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBUT0RPOiBNb3ZlIG91dCBvZiB0aGUgbG9vcC4gVGhpcyBvbmx5IGhhcHBlbnMgZm9yIHRoZSBmaXJzdCBydW4uXG4gICAgICAgICAgcmVzdWx0aW5nRmlyc3RDaGlsZCA9IF9uZXdGaWJlcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcmV2aW91c05ld0ZpYmVyLnNpYmxpbmcgPSBfbmV3RmliZXI7XG4gICAgICAgIH1cblxuICAgICAgICBwcmV2aW91c05ld0ZpYmVyID0gX25ld0ZpYmVyO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0aW5nRmlyc3RDaGlsZDtcbiAgICB9IC8vIEFkZCBhbGwgY2hpbGRyZW4gdG8gYSBrZXkgbWFwIGZvciBxdWljayBsb29rdXBzLlxuXG5cbiAgICB2YXIgZXhpc3RpbmdDaGlsZHJlbiA9IG1hcFJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBvbGRGaWJlcik7IC8vIEtlZXAgc2Nhbm5pbmcgYW5kIHVzZSB0aGUgbWFwIHRvIHJlc3RvcmUgZGVsZXRlZCBpdGVtcyBhcyBtb3Zlcy5cblxuICAgIGZvciAoOyBuZXdJZHggPCBuZXdDaGlsZHJlbi5sZW5ndGg7IG5ld0lkeCsrKSB7XG4gICAgICB2YXIgX25ld0ZpYmVyMiA9IHVwZGF0ZUZyb21NYXAoZXhpc3RpbmdDaGlsZHJlbiwgcmV0dXJuRmliZXIsIG5ld0lkeCwgbmV3Q2hpbGRyZW5bbmV3SWR4XSwgbGFuZXMpO1xuXG4gICAgICBpZiAoX25ld0ZpYmVyMiAhPT0gbnVsbCkge1xuICAgICAgICBpZiAoc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICAgICAgICAgIGlmIChfbmV3RmliZXIyLmFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gVGhlIG5ldyBmaWJlciBpcyBhIHdvcmsgaW4gcHJvZ3Jlc3MsIGJ1dCBpZiB0aGVyZSBleGlzdHMgYVxuICAgICAgICAgICAgLy8gY3VycmVudCwgdGhhdCBtZWFucyB0aGF0IHdlIHJldXNlZCB0aGUgZmliZXIuIFdlIG5lZWQgdG8gZGVsZXRlXG4gICAgICAgICAgICAvLyBpdCBmcm9tIHRoZSBjaGlsZCBsaXN0IHNvIHRoYXQgd2UgZG9uJ3QgYWRkIGl0IHRvIHRoZSBkZWxldGlvblxuICAgICAgICAgICAgLy8gbGlzdC5cbiAgICAgICAgICAgIGV4aXN0aW5nQ2hpbGRyZW4uZGVsZXRlKF9uZXdGaWJlcjIua2V5ID09PSBudWxsID8gbmV3SWR4IDogX25ld0ZpYmVyMi5rZXkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxhc3RQbGFjZWRJbmRleCA9IHBsYWNlQ2hpbGQoX25ld0ZpYmVyMiwgbGFzdFBsYWNlZEluZGV4LCBuZXdJZHgpO1xuXG4gICAgICAgIGlmIChwcmV2aW91c05ld0ZpYmVyID09PSBudWxsKSB7XG4gICAgICAgICAgcmVzdWx0aW5nRmlyc3RDaGlsZCA9IF9uZXdGaWJlcjI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJldmlvdXNOZXdGaWJlci5zaWJsaW5nID0gX25ld0ZpYmVyMjtcbiAgICAgICAgfVxuXG4gICAgICAgIHByZXZpb3VzTmV3RmliZXIgPSBfbmV3RmliZXIyO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzaG91bGRUcmFja1NpZGVFZmZlY3RzKSB7XG4gICAgICAvLyBBbnkgZXhpc3RpbmcgY2hpbGRyZW4gdGhhdCB3ZXJlbid0IGNvbnN1bWVkIGFib3ZlIHdlcmUgZGVsZXRlZC4gV2UgbmVlZFxuICAgICAgLy8gdG8gYWRkIHRoZW0gdG8gdGhlIGRlbGV0aW9uIGxpc3QuXG4gICAgICBleGlzdGluZ0NoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgIHJldHVybiBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgY2hpbGQpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdGluZ0ZpcnN0Q2hpbGQ7XG4gIH1cblxuICBmdW5jdGlvbiByZWNvbmNpbGVDaGlsZHJlbkl0ZXJhdG9yKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgbmV3Q2hpbGRyZW5JdGVyYWJsZSwgbGFuZXMpIHtcbiAgICAvLyBUaGlzIGlzIHRoZSBzYW1lIGltcGxlbWVudGF0aW9uIGFzIHJlY29uY2lsZUNoaWxkcmVuQXJyYXkoKSxcbiAgICAvLyBidXQgdXNpbmcgdGhlIGl0ZXJhdG9yIGluc3RlYWQuXG4gICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKG5ld0NoaWxkcmVuSXRlcmFibGUpO1xuXG4gICAgaWYgKCEodHlwZW9mIGl0ZXJhdG9yRm4gPT09ICdmdW5jdGlvbicpKSB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIkFuIG9iamVjdCBpcyBub3QgYW4gaXRlcmFibGUuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB7XG4gICAgICAvLyBXZSBkb24ndCBzdXBwb3J0IHJlbmRlcmluZyBHZW5lcmF0b3JzIGJlY2F1c2UgaXQncyBhIG11dGF0aW9uLlxuICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTI5OTVcbiAgICAgIGlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIC8vICRGbG93Rml4TWUgRmxvdyBkb2Vzbid0IGtub3cgYWJvdXQgdG9TdHJpbmdUYWdcbiAgICAgIG5ld0NoaWxkcmVuSXRlcmFibGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gJ0dlbmVyYXRvcicpIHtcbiAgICAgICAgaWYgKCFkaWRXYXJuQWJvdXRHZW5lcmF0b3JzKSB7XG4gICAgICAgICAgZXJyb3IoJ1VzaW5nIEdlbmVyYXRvcnMgYXMgY2hpbGRyZW4gaXMgdW5zdXBwb3J0ZWQgYW5kIHdpbGwgbGlrZWx5IHlpZWxkICcgKyAndW5leHBlY3RlZCByZXN1bHRzIGJlY2F1c2UgZW51bWVyYXRpbmcgYSBnZW5lcmF0b3IgbXV0YXRlcyBpdC4gJyArICdZb3UgbWF5IGNvbnZlcnQgaXQgdG8gYW4gYXJyYXkgd2l0aCBgQXJyYXkuZnJvbSgpYCBvciB0aGUgJyArICdgWy4uLnNwcmVhZF1gIG9wZXJhdG9yIGJlZm9yZSByZW5kZXJpbmcuIEtlZXAgaW4gbWluZCAnICsgJ3lvdSBtaWdodCBuZWVkIHRvIHBvbHlmaWxsIHRoZXNlIGZlYXR1cmVzIGZvciBvbGRlciBicm93c2Vycy4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRpZFdhcm5BYm91dEdlbmVyYXRvcnMgPSB0cnVlO1xuICAgICAgfSAvLyBXYXJuIGFib3V0IHVzaW5nIE1hcHMgYXMgY2hpbGRyZW5cblxuXG4gICAgICBpZiAobmV3Q2hpbGRyZW5JdGVyYWJsZS5lbnRyaWVzID09PSBpdGVyYXRvckZuKSB7XG4gICAgICAgIGlmICghZGlkV2FybkFib3V0TWFwcykge1xuICAgICAgICAgIGVycm9yKCdVc2luZyBNYXBzIGFzIGNoaWxkcmVuIGlzIG5vdCBzdXBwb3J0ZWQuICcgKyAnVXNlIGFuIGFycmF5IG9mIGtleWVkIFJlYWN0RWxlbWVudHMgaW5zdGVhZC4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRpZFdhcm5BYm91dE1hcHMgPSB0cnVlO1xuICAgICAgfSAvLyBGaXJzdCwgdmFsaWRhdGUga2V5cy5cbiAgICAgIC8vIFdlJ2xsIGdldCBhIGRpZmZlcmVudCBpdGVyYXRvciBsYXRlciBmb3IgdGhlIG1haW4gcGFzcy5cblxuXG4gICAgICB2YXIgX25ld0NoaWxkcmVuID0gaXRlcmF0b3JGbi5jYWxsKG5ld0NoaWxkcmVuSXRlcmFibGUpO1xuXG4gICAgICBpZiAoX25ld0NoaWxkcmVuKSB7XG4gICAgICAgIHZhciBrbm93bktleXMgPSBudWxsO1xuXG4gICAgICAgIHZhciBfc3RlcCA9IF9uZXdDaGlsZHJlbi5uZXh0KCk7XG5cbiAgICAgICAgZm9yICg7ICFfc3RlcC5kb25lOyBfc3RlcCA9IF9uZXdDaGlsZHJlbi5uZXh0KCkpIHtcbiAgICAgICAgICB2YXIgY2hpbGQgPSBfc3RlcC52YWx1ZTtcbiAgICAgICAgICBrbm93bktleXMgPSB3YXJuT25JbnZhbGlkS2V5KGNoaWxkLCBrbm93bktleXMsIHJldHVybkZpYmVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBuZXdDaGlsZHJlbiA9IGl0ZXJhdG9yRm4uY2FsbChuZXdDaGlsZHJlbkl0ZXJhYmxlKTtcblxuICAgIGlmICghKG5ld0NoaWxkcmVuICE9IG51bGwpKSB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIkFuIGl0ZXJhYmxlIG9iamVjdCBwcm92aWRlZCBubyBpdGVyYXRvci5cIiApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciByZXN1bHRpbmdGaXJzdENoaWxkID0gbnVsbDtcbiAgICB2YXIgcHJldmlvdXNOZXdGaWJlciA9IG51bGw7XG4gICAgdmFyIG9sZEZpYmVyID0gY3VycmVudEZpcnN0Q2hpbGQ7XG4gICAgdmFyIGxhc3RQbGFjZWRJbmRleCA9IDA7XG4gICAgdmFyIG5ld0lkeCA9IDA7XG4gICAgdmFyIG5leHRPbGRGaWJlciA9IG51bGw7XG4gICAgdmFyIHN0ZXAgPSBuZXdDaGlsZHJlbi5uZXh0KCk7XG5cbiAgICBmb3IgKDsgb2xkRmliZXIgIT09IG51bGwgJiYgIXN0ZXAuZG9uZTsgbmV3SWR4KyssIHN0ZXAgPSBuZXdDaGlsZHJlbi5uZXh0KCkpIHtcbiAgICAgIGlmIChvbGRGaWJlci5pbmRleCA+IG5ld0lkeCkge1xuICAgICAgICBuZXh0T2xkRmliZXIgPSBvbGRGaWJlcjtcbiAgICAgICAgb2xkRmliZXIgPSBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV4dE9sZEZpYmVyID0gb2xkRmliZXIuc2libGluZztcbiAgICAgIH1cblxuICAgICAgdmFyIG5ld0ZpYmVyID0gdXBkYXRlU2xvdChyZXR1cm5GaWJlciwgb2xkRmliZXIsIHN0ZXAudmFsdWUsIGxhbmVzKTtcblxuICAgICAgaWYgKG5ld0ZpYmVyID09PSBudWxsKSB7XG4gICAgICAgIC8vIFRPRE86IFRoaXMgYnJlYWtzIG9uIGVtcHR5IHNsb3RzIGxpa2UgbnVsbCBjaGlsZHJlbi4gVGhhdCdzXG4gICAgICAgIC8vIHVuZm9ydHVuYXRlIGJlY2F1c2UgaXQgdHJpZ2dlcnMgdGhlIHNsb3cgcGF0aCBhbGwgdGhlIHRpbWUuIFdlIG5lZWRcbiAgICAgICAgLy8gYSBiZXR0ZXIgd2F5IHRvIGNvbW11bmljYXRlIHdoZXRoZXIgdGhpcyB3YXMgYSBtaXNzIG9yIG51bGwsXG4gICAgICAgIC8vIGJvb2xlYW4sIHVuZGVmaW5lZCwgZXRjLlxuICAgICAgICBpZiAob2xkRmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgICBvbGRGaWJlciA9IG5leHRPbGRGaWJlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICAgICAgICBpZiAob2xkRmliZXIgJiYgbmV3RmliZXIuYWx0ZXJuYXRlID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gV2UgbWF0Y2hlZCB0aGUgc2xvdCwgYnV0IHdlIGRpZG4ndCByZXVzZSB0aGUgZXhpc3RpbmcgZmliZXIsIHNvIHdlXG4gICAgICAgICAgLy8gbmVlZCB0byBkZWxldGUgdGhlIGV4aXN0aW5nIGNoaWxkLlxuICAgICAgICAgIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBvbGRGaWJlcik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbGFzdFBsYWNlZEluZGV4ID0gcGxhY2VDaGlsZChuZXdGaWJlciwgbGFzdFBsYWNlZEluZGV4LCBuZXdJZHgpO1xuXG4gICAgICBpZiAocHJldmlvdXNOZXdGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAvLyBUT0RPOiBNb3ZlIG91dCBvZiB0aGUgbG9vcC4gVGhpcyBvbmx5IGhhcHBlbnMgZm9yIHRoZSBmaXJzdCBydW4uXG4gICAgICAgIHJlc3VsdGluZ0ZpcnN0Q2hpbGQgPSBuZXdGaWJlcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRPRE86IERlZmVyIHNpYmxpbmdzIGlmIHdlJ3JlIG5vdCBhdCB0aGUgcmlnaHQgaW5kZXggZm9yIHRoaXMgc2xvdC5cbiAgICAgICAgLy8gSS5lLiBpZiB3ZSBoYWQgbnVsbCB2YWx1ZXMgYmVmb3JlLCB0aGVuIHdlIHdhbnQgdG8gZGVmZXIgdGhpc1xuICAgICAgICAvLyBmb3IgZWFjaCBudWxsIHZhbHVlLiBIb3dldmVyLCB3ZSBhbHNvIGRvbid0IHdhbnQgdG8gY2FsbCB1cGRhdGVTbG90XG4gICAgICAgIC8vIHdpdGggdGhlIHByZXZpb3VzIG9uZS5cbiAgICAgICAgcHJldmlvdXNOZXdGaWJlci5zaWJsaW5nID0gbmV3RmliZXI7XG4gICAgICB9XG5cbiAgICAgIHByZXZpb3VzTmV3RmliZXIgPSBuZXdGaWJlcjtcbiAgICAgIG9sZEZpYmVyID0gbmV4dE9sZEZpYmVyO1xuICAgIH1cblxuICAgIGlmIChzdGVwLmRvbmUpIHtcbiAgICAgIC8vIFdlJ3ZlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgbmV3IGNoaWxkcmVuLiBXZSBjYW4gZGVsZXRlIHRoZSByZXN0LlxuICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIG9sZEZpYmVyKTtcbiAgICAgIHJldHVybiByZXN1bHRpbmdGaXJzdENoaWxkO1xuICAgIH1cblxuICAgIGlmIChvbGRGaWJlciA9PT0gbnVsbCkge1xuICAgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhbnkgbW9yZSBleGlzdGluZyBjaGlsZHJlbiB3ZSBjYW4gY2hvb3NlIGEgZmFzdCBwYXRoXG4gICAgICAvLyBzaW5jZSB0aGUgcmVzdCB3aWxsIGFsbCBiZSBpbnNlcnRpb25zLlxuICAgICAgZm9yICg7ICFzdGVwLmRvbmU7IG5ld0lkeCsrLCBzdGVwID0gbmV3Q2hpbGRyZW4ubmV4dCgpKSB7XG4gICAgICAgIHZhciBfbmV3RmliZXIzID0gY3JlYXRlQ2hpbGQocmV0dXJuRmliZXIsIHN0ZXAudmFsdWUsIGxhbmVzKTtcblxuICAgICAgICBpZiAoX25ld0ZpYmVyMyA9PT0gbnVsbCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgbGFzdFBsYWNlZEluZGV4ID0gcGxhY2VDaGlsZChfbmV3RmliZXIzLCBsYXN0UGxhY2VkSW5kZXgsIG5ld0lkeCk7XG5cbiAgICAgICAgaWYgKHByZXZpb3VzTmV3RmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBUT0RPOiBNb3ZlIG91dCBvZiB0aGUgbG9vcC4gVGhpcyBvbmx5IGhhcHBlbnMgZm9yIHRoZSBmaXJzdCBydW4uXG4gICAgICAgICAgcmVzdWx0aW5nRmlyc3RDaGlsZCA9IF9uZXdGaWJlcjM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJldmlvdXNOZXdGaWJlci5zaWJsaW5nID0gX25ld0ZpYmVyMztcbiAgICAgICAgfVxuXG4gICAgICAgIHByZXZpb3VzTmV3RmliZXIgPSBfbmV3RmliZXIzO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0aW5nRmlyc3RDaGlsZDtcbiAgICB9IC8vIEFkZCBhbGwgY2hpbGRyZW4gdG8gYSBrZXkgbWFwIGZvciBxdWljayBsb29rdXBzLlxuXG5cbiAgICB2YXIgZXhpc3RpbmdDaGlsZHJlbiA9IG1hcFJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBvbGRGaWJlcik7IC8vIEtlZXAgc2Nhbm5pbmcgYW5kIHVzZSB0aGUgbWFwIHRvIHJlc3RvcmUgZGVsZXRlZCBpdGVtcyBhcyBtb3Zlcy5cblxuICAgIGZvciAoOyAhc3RlcC5kb25lOyBuZXdJZHgrKywgc3RlcCA9IG5ld0NoaWxkcmVuLm5leHQoKSkge1xuICAgICAgdmFyIF9uZXdGaWJlcjQgPSB1cGRhdGVGcm9tTWFwKGV4aXN0aW5nQ2hpbGRyZW4sIHJldHVybkZpYmVyLCBuZXdJZHgsIHN0ZXAudmFsdWUsIGxhbmVzKTtcblxuICAgICAgaWYgKF9uZXdGaWJlcjQgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKHNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgICAgICAgICBpZiAoX25ld0ZpYmVyNC5hbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIFRoZSBuZXcgZmliZXIgaXMgYSB3b3JrIGluIHByb2dyZXNzLCBidXQgaWYgdGhlcmUgZXhpc3RzIGFcbiAgICAgICAgICAgIC8vIGN1cnJlbnQsIHRoYXQgbWVhbnMgdGhhdCB3ZSByZXVzZWQgdGhlIGZpYmVyLiBXZSBuZWVkIHRvIGRlbGV0ZVxuICAgICAgICAgICAgLy8gaXQgZnJvbSB0aGUgY2hpbGQgbGlzdCBzbyB0aGF0IHdlIGRvbid0IGFkZCBpdCB0byB0aGUgZGVsZXRpb25cbiAgICAgICAgICAgIC8vIGxpc3QuXG4gICAgICAgICAgICBleGlzdGluZ0NoaWxkcmVuLmRlbGV0ZShfbmV3RmliZXI0LmtleSA9PT0gbnVsbCA/IG5ld0lkeCA6IF9uZXdGaWJlcjQua2V5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0UGxhY2VkSW5kZXggPSBwbGFjZUNoaWxkKF9uZXdGaWJlcjQsIGxhc3RQbGFjZWRJbmRleCwgbmV3SWR4KTtcblxuICAgICAgICBpZiAocHJldmlvdXNOZXdGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAgIHJlc3VsdGluZ0ZpcnN0Q2hpbGQgPSBfbmV3RmliZXI0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByZXZpb3VzTmV3RmliZXIuc2libGluZyA9IF9uZXdGaWJlcjQ7XG4gICAgICAgIH1cblxuICAgICAgICBwcmV2aW91c05ld0ZpYmVyID0gX25ld0ZpYmVyNDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICAgICAgLy8gQW55IGV4aXN0aW5nIGNoaWxkcmVuIHRoYXQgd2VyZW4ndCBjb25zdW1lZCBhYm92ZSB3ZXJlIGRlbGV0ZWQuIFdlIG5lZWRcbiAgICAgIC8vIHRvIGFkZCB0aGVtIHRvIHRoZSBkZWxldGlvbiBsaXN0LlxuICAgICAgZXhpc3RpbmdDaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgICByZXR1cm4gZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIGNoaWxkKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRpbmdGaXJzdENoaWxkO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVjb25jaWxlU2luZ2xlVGV4dE5vZGUocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCB0ZXh0Q29udGVudCwgbGFuZXMpIHtcbiAgICAvLyBUaGVyZSdzIG5vIG5lZWQgdG8gY2hlY2sgZm9yIGtleXMgb24gdGV4dCBub2RlcyBzaW5jZSB3ZSBkb24ndCBoYXZlIGFcbiAgICAvLyB3YXkgdG8gZGVmaW5lIHRoZW0uXG4gICAgaWYgKGN1cnJlbnRGaXJzdENoaWxkICE9PSBudWxsICYmIGN1cnJlbnRGaXJzdENoaWxkLnRhZyA9PT0gSG9zdFRleHQpIHtcbiAgICAgIC8vIFdlIGFscmVhZHkgaGF2ZSBhbiBleGlzdGluZyBub2RlIHNvIGxldCdzIGp1c3QgdXBkYXRlIGl0IGFuZCBkZWxldGVcbiAgICAgIC8vIHRoZSByZXN0LlxuICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLnNpYmxpbmcpO1xuICAgICAgdmFyIGV4aXN0aW5nID0gdXNlRmliZXIoY3VycmVudEZpcnN0Q2hpbGQsIHRleHRDb250ZW50KTtcbiAgICAgIGV4aXN0aW5nLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgIH0gLy8gVGhlIGV4aXN0aW5nIGZpcnN0IGNoaWxkIGlzIG5vdCBhIHRleHQgbm9kZSBzbyB3ZSBuZWVkIHRvIGNyZWF0ZSBvbmVcbiAgICAvLyBhbmQgZGVsZXRlIHRoZSBleGlzdGluZyBvbmVzLlxuXG5cbiAgICBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQpO1xuICAgIHZhciBjcmVhdGVkID0gY3JlYXRlRmliZXJGcm9tVGV4dCh0ZXh0Q29udGVudCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMpO1xuICAgIGNyZWF0ZWQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgcmV0dXJuIGNyZWF0ZWQ7XG4gIH1cblxuICBmdW5jdGlvbiByZWNvbmNpbGVTaW5nbGVFbGVtZW50KHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgZWxlbWVudCwgbGFuZXMpIHtcbiAgICB2YXIga2V5ID0gZWxlbWVudC5rZXk7XG4gICAgdmFyIGNoaWxkID0gY3VycmVudEZpcnN0Q2hpbGQ7XG5cbiAgICB3aGlsZSAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgIC8vIFRPRE86IElmIGtleSA9PT0gbnVsbCBhbmQgY2hpbGQua2V5ID09PSBudWxsLCB0aGVuIHRoaXMgb25seSBhcHBsaWVzIHRvXG4gICAgICAvLyB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgbGlzdC5cbiAgICAgIGlmIChjaGlsZC5rZXkgPT09IGtleSkge1xuICAgICAgICBzd2l0Y2ggKGNoaWxkLnRhZykge1xuICAgICAgICAgIGNhc2UgRnJhZ21lbnQ6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUpIHtcbiAgICAgICAgICAgICAgICBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY2hpbGQuc2libGluZyk7XG4gICAgICAgICAgICAgICAgdmFyIGV4aXN0aW5nID0gdXNlRmliZXIoY2hpbGQsIGVsZW1lbnQucHJvcHMuY2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgIGV4aXN0aW5nLnJldHVybiA9IHJldHVybkZpYmVyO1xuXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZXhpc3RpbmcuX2RlYnVnU291cmNlID0gZWxlbWVudC5fc291cmNlO1xuICAgICAgICAgICAgICAgICAgZXhpc3RpbmcuX2RlYnVnT3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIGNhc2UgQmxvY2s6XG5cbiAgICAgICAgICAvLyBXZSBpbnRlbnRpb25hbGx5IGZhbGx0aHJvdWdoIGhlcmUgaWYgZW5hYmxlQmxvY2tzQVBJIGlzIG5vdCBvbi5cbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVkIG5vLWZhbGx0aHJvdWdoXG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpZiAoY2hpbGQuZWxlbWVudFR5cGUgPT09IGVsZW1lbnQudHlwZSB8fCAoIC8vIEtlZXAgdGhpcyBjaGVjayBpbmxpbmUgc28gaXQgb25seSBydW5zIG9uIHRoZSBmYWxzZSBwYXRoOlxuICAgICAgICAgICAgICAgaXNDb21wYXRpYmxlRmFtaWx5Rm9ySG90UmVsb2FkaW5nKGNoaWxkLCBlbGVtZW50KSApKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGNoaWxkLnNpYmxpbmcpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9leGlzdGluZzMgPSB1c2VGaWJlcihjaGlsZCwgZWxlbWVudC5wcm9wcyk7XG5cbiAgICAgICAgICAgICAgICBfZXhpc3RpbmczLnJlZiA9IGNvZXJjZVJlZihyZXR1cm5GaWJlciwgY2hpbGQsIGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIF9leGlzdGluZzMucmV0dXJuID0gcmV0dXJuRmliZXI7XG5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBfZXhpc3RpbmczLl9kZWJ1Z1NvdXJjZSA9IGVsZW1lbnQuX3NvdXJjZTtcbiAgICAgICAgICAgICAgICAgIF9leGlzdGluZzMuX2RlYnVnT3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gX2V4aXN0aW5nMztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IC8vIERpZG4ndCBtYXRjaC5cblxuXG4gICAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjaGlsZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIGNoaWxkKTtcbiAgICAgIH1cblxuICAgICAgY2hpbGQgPSBjaGlsZC5zaWJsaW5nO1xuICAgIH1cblxuICAgIGlmIChlbGVtZW50LnR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUpIHtcbiAgICAgIHZhciBjcmVhdGVkID0gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoZWxlbWVudC5wcm9wcy5jaGlsZHJlbiwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMsIGVsZW1lbnQua2V5KTtcbiAgICAgIGNyZWF0ZWQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICByZXR1cm4gY3JlYXRlZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIF9jcmVhdGVkNCA9IGNyZWF0ZUZpYmVyRnJvbUVsZW1lbnQoZWxlbWVudCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMpO1xuXG4gICAgICBfY3JlYXRlZDQucmVmID0gY29lcmNlUmVmKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgZWxlbWVudCk7XG4gICAgICBfY3JlYXRlZDQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICByZXR1cm4gX2NyZWF0ZWQ0O1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlY29uY2lsZVNpbmdsZVBvcnRhbChyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIHBvcnRhbCwgbGFuZXMpIHtcbiAgICB2YXIga2V5ID0gcG9ydGFsLmtleTtcbiAgICB2YXIgY2hpbGQgPSBjdXJyZW50Rmlyc3RDaGlsZDtcblxuICAgIHdoaWxlIChjaGlsZCAhPT0gbnVsbCkge1xuICAgICAgLy8gVE9ETzogSWYga2V5ID09PSBudWxsIGFuZCBjaGlsZC5rZXkgPT09IG51bGwsIHRoZW4gdGhpcyBvbmx5IGFwcGxpZXMgdG9cbiAgICAgIC8vIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBsaXN0LlxuICAgICAgaWYgKGNoaWxkLmtleSA9PT0ga2V5KSB7XG4gICAgICAgIGlmIChjaGlsZC50YWcgPT09IEhvc3RQb3J0YWwgJiYgY2hpbGQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8gPT09IHBvcnRhbC5jb250YWluZXJJbmZvICYmIGNoaWxkLnN0YXRlTm9kZS5pbXBsZW1lbnRhdGlvbiA9PT0gcG9ydGFsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGNoaWxkLnNpYmxpbmcpO1xuICAgICAgICAgIHZhciBleGlzdGluZyA9IHVzZUZpYmVyKGNoaWxkLCBwb3J0YWwuY2hpbGRyZW4gfHwgW10pO1xuICAgICAgICAgIGV4aXN0aW5nLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgICAgIHJldHVybiBleGlzdGluZztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY2hpbGQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgY2hpbGQpO1xuICAgICAgfVxuXG4gICAgICBjaGlsZCA9IGNoaWxkLnNpYmxpbmc7XG4gICAgfVxuXG4gICAgdmFyIGNyZWF0ZWQgPSBjcmVhdGVGaWJlckZyb21Qb3J0YWwocG9ydGFsLCByZXR1cm5GaWJlci5tb2RlLCBsYW5lcyk7XG4gICAgY3JlYXRlZC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICByZXR1cm4gY3JlYXRlZDtcbiAgfSAvLyBUaGlzIEFQSSB3aWxsIHRhZyB0aGUgY2hpbGRyZW4gd2l0aCB0aGUgc2lkZS1lZmZlY3Qgb2YgdGhlIHJlY29uY2lsaWF0aW9uXG4gIC8vIGl0c2VsZi4gVGhleSB3aWxsIGJlIGFkZGVkIHRvIHRoZSBzaWRlLWVmZmVjdCBsaXN0IGFzIHdlIHBhc3MgdGhyb3VnaCB0aGVcbiAgLy8gY2hpbGRyZW4gYW5kIHRoZSBwYXJlbnQuXG5cblxuICBmdW5jdGlvbiByZWNvbmNpbGVDaGlsZEZpYmVycyhyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIG5ld0NoaWxkLCBsYW5lcykge1xuICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgbm90IHJlY3Vyc2l2ZS5cbiAgICAvLyBJZiB0aGUgdG9wIGxldmVsIGl0ZW0gaXMgYW4gYXJyYXksIHdlIHRyZWF0IGl0IGFzIGEgc2V0IG9mIGNoaWxkcmVuLFxuICAgIC8vIG5vdCBhcyBhIGZyYWdtZW50LiBOZXN0ZWQgYXJyYXlzIG9uIHRoZSBvdGhlciBoYW5kIHdpbGwgYmUgdHJlYXRlZCBhc1xuICAgIC8vIGZyYWdtZW50IG5vZGVzLiBSZWN1cnNpb24gaGFwcGVucyBhdCB0aGUgbm9ybWFsIGZsb3cuXG4gICAgLy8gSGFuZGxlIHRvcCBsZXZlbCB1bmtleWVkIGZyYWdtZW50cyBhcyBpZiB0aGV5IHdlcmUgYXJyYXlzLlxuICAgIC8vIFRoaXMgbGVhZHMgdG8gYW4gYW1iaWd1aXR5IGJldHdlZW4gPD57Wy4uLl19PC8+IGFuZCA8Pi4uLjwvPi5cbiAgICAvLyBXZSB0cmVhdCB0aGUgYW1iaWd1b3VzIGNhc2VzIGFib3ZlIHRoZSBzYW1lLlxuICAgIHZhciBpc1Vua2V5ZWRUb3BMZXZlbEZyYWdtZW50ID0gdHlwZW9mIG5ld0NoaWxkID09PSAnb2JqZWN0JyAmJiBuZXdDaGlsZCAhPT0gbnVsbCAmJiBuZXdDaGlsZC50eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFICYmIG5ld0NoaWxkLmtleSA9PT0gbnVsbDtcblxuICAgIGlmIChpc1Vua2V5ZWRUb3BMZXZlbEZyYWdtZW50KSB7XG4gICAgICBuZXdDaGlsZCA9IG5ld0NoaWxkLnByb3BzLmNoaWxkcmVuO1xuICAgIH0gLy8gSGFuZGxlIG9iamVjdCB0eXBlc1xuXG5cbiAgICB2YXIgaXNPYmplY3QgPSB0eXBlb2YgbmV3Q2hpbGQgPT09ICdvYmplY3QnICYmIG5ld0NoaWxkICE9PSBudWxsO1xuXG4gICAgaWYgKGlzT2JqZWN0KSB7XG4gICAgICBzd2l0Y2ggKG5ld0NoaWxkLiQkdHlwZW9mKSB7XG4gICAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICAgIHJldHVybiBwbGFjZVNpbmdsZUNoaWxkKHJlY29uY2lsZVNpbmdsZUVsZW1lbnQocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCBuZXdDaGlsZCwgbGFuZXMpKTtcblxuICAgICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICAgIHJldHVybiBwbGFjZVNpbmdsZUNoaWxkKHJlY29uY2lsZVNpbmdsZVBvcnRhbChyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIG5ld0NoaWxkLCBsYW5lcykpO1xuXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIG5ld0NoaWxkID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIHBsYWNlU2luZ2xlQ2hpbGQocmVjb25jaWxlU2luZ2xlVGV4dE5vZGUocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCAnJyArIG5ld0NoaWxkLCBsYW5lcykpO1xuICAgIH1cblxuICAgIGlmIChpc0FycmF5JDEobmV3Q2hpbGQpKSB7XG4gICAgICByZXR1cm4gcmVjb25jaWxlQ2hpbGRyZW5BcnJheShyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIG5ld0NoaWxkLCBsYW5lcyk7XG4gICAgfVxuXG4gICAgaWYgKGdldEl0ZXJhdG9yRm4obmV3Q2hpbGQpKSB7XG4gICAgICByZXR1cm4gcmVjb25jaWxlQ2hpbGRyZW5JdGVyYXRvcihyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIG5ld0NoaWxkLCBsYW5lcyk7XG4gICAgfVxuXG4gICAgaWYgKGlzT2JqZWN0KSB7XG4gICAgICB0aHJvd09uSW52YWxpZE9iamVjdFR5cGUocmV0dXJuRmliZXIsIG5ld0NoaWxkKTtcbiAgICB9XG5cbiAgICB7XG4gICAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHdhcm5PbkZ1bmN0aW9uVHlwZShyZXR1cm5GaWJlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ3VuZGVmaW5lZCcgJiYgIWlzVW5rZXllZFRvcExldmVsRnJhZ21lbnQpIHtcbiAgICAgIC8vIElmIHRoZSBuZXcgY2hpbGQgaXMgdW5kZWZpbmVkLCBhbmQgdGhlIHJldHVybiBmaWJlciBpcyBhIGNvbXBvc2l0ZVxuICAgICAgLy8gY29tcG9uZW50LCB0aHJvdyBhbiBlcnJvci4gSWYgRmliZXIgcmV0dXJuIHR5cGVzIGFyZSBkaXNhYmxlZCxcbiAgICAgIC8vIHdlIGFscmVhZHkgdGhyZXcgYWJvdmUuXG4gICAgICBzd2l0Y2ggKHJldHVybkZpYmVyLnRhZykge1xuICAgICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdmFyIGluc3RhbmNlID0gcmV0dXJuRmliZXIuc3RhdGVOb2RlO1xuXG4gICAgICAgICAgICAgIGlmIChpbnN0YW5jZS5yZW5kZXIuX2lzTW9ja0Z1bmN0aW9uKSB7XG4gICAgICAgICAgICAgICAgLy8gV2UgYWxsb3cgYXV0by1tb2NrcyB0byBwcm9jZWVkIGFzIGlmIHRoZXkncmUgcmV0dXJuaW5nIG51bGwuXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIC8vIEludGVudGlvbmFsbHkgZmFsbCB0aHJvdWdoIHRvIHRoZSBuZXh0IGNhc2UsIHdoaWNoIGhhbmRsZXMgYm90aFxuICAgICAgICAvLyBmdW5jdGlvbnMgYW5kIGNsYXNzZXNcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lZCBuby1mYWxsdGhyb3VnaFxuXG4gICAgICAgIGNhc2UgQmxvY2s6XG4gICAgICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCAoZ2V0Q29tcG9uZW50TmFtZShyZXR1cm5GaWJlci50eXBlKSB8fCAnQ29tcG9uZW50JykgKyBcIiguLi4pOiBOb3RoaW5nIHdhcyByZXR1cm5lZCBmcm9tIHJlbmRlci4gVGhpcyB1c3VhbGx5IG1lYW5zIGEgcmV0dXJuIHN0YXRlbWVudCBpcyBtaXNzaW5nLiBPciwgdG8gcmVuZGVyIG5vdGhpbmcsIHJldHVybiBudWxsLlwiICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyBSZW1haW5pbmcgY2FzZXMgYXJlIGFsbCB0cmVhdGVkIGFzIGVtcHR5LlxuXG5cbiAgICByZXR1cm4gZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkKTtcbiAgfVxuXG4gIHJldHVybiByZWNvbmNpbGVDaGlsZEZpYmVycztcbn1cblxudmFyIHJlY29uY2lsZUNoaWxkRmliZXJzID0gQ2hpbGRSZWNvbmNpbGVyKHRydWUpO1xudmFyIG1vdW50Q2hpbGRGaWJlcnMgPSBDaGlsZFJlY29uY2lsZXIoZmFsc2UpO1xuZnVuY3Rpb24gY2xvbmVDaGlsZEZpYmVycyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcykge1xuICBpZiAoIShjdXJyZW50ID09PSBudWxsIHx8IHdvcmtJblByb2dyZXNzLmNoaWxkID09PSBjdXJyZW50LmNoaWxkKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlJlc3VtaW5nIHdvcmsgbm90IHlldCBpbXBsZW1lbnRlZC5cIiApO1xuICAgIH1cbiAgfVxuXG4gIGlmICh3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9PT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBjdXJyZW50Q2hpbGQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgdmFyIG5ld0NoaWxkID0gY3JlYXRlV29ya0luUHJvZ3Jlc3MoY3VycmVudENoaWxkLCBjdXJyZW50Q2hpbGQucGVuZGluZ1Byb3BzKTtcbiAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBuZXdDaGlsZDtcbiAgbmV3Q2hpbGQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG5cbiAgd2hpbGUgKGN1cnJlbnRDaGlsZC5zaWJsaW5nICE9PSBudWxsKSB7XG4gICAgY3VycmVudENoaWxkID0gY3VycmVudENoaWxkLnNpYmxpbmc7XG4gICAgbmV3Q2hpbGQgPSBuZXdDaGlsZC5zaWJsaW5nID0gY3JlYXRlV29ya0luUHJvZ3Jlc3MoY3VycmVudENoaWxkLCBjdXJyZW50Q2hpbGQucGVuZGluZ1Byb3BzKTtcbiAgICBuZXdDaGlsZC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgfVxuXG4gIG5ld0NoaWxkLnNpYmxpbmcgPSBudWxsO1xufSAvLyBSZXNldCBhIHdvcmtJblByb2dyZXNzIGNoaWxkIHNldCB0byBwcmVwYXJlIGl0IGZvciBhIHNlY29uZCBwYXNzLlxuXG5mdW5jdGlvbiByZXNldENoaWxkRmliZXJzKHdvcmtJblByb2dyZXNzLCBsYW5lcykge1xuICB2YXIgY2hpbGQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcblxuICB3aGlsZSAoY2hpbGQgIT09IG51bGwpIHtcbiAgICByZXNldFdvcmtJblByb2dyZXNzKGNoaWxkLCBsYW5lcyk7XG4gICAgY2hpbGQgPSBjaGlsZC5zaWJsaW5nO1xuICB9XG59XG5cbnZhciBOT19DT05URVhUID0ge307XG52YXIgY29udGV4dFN0YWNrQ3Vyc29yJDEgPSBjcmVhdGVDdXJzb3IoTk9fQ09OVEVYVCk7XG52YXIgY29udGV4dEZpYmVyU3RhY2tDdXJzb3IgPSBjcmVhdGVDdXJzb3IoTk9fQ09OVEVYVCk7XG52YXIgcm9vdEluc3RhbmNlU3RhY2tDdXJzb3IgPSBjcmVhdGVDdXJzb3IoTk9fQ09OVEVYVCk7XG5cbmZ1bmN0aW9uIHJlcXVpcmVkQ29udGV4dChjKSB7XG4gIGlmICghKGMgIT09IE5PX0NPTlRFWFQpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiRXhwZWN0ZWQgaG9zdCBjb250ZXh0IHRvIGV4aXN0LiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGM7XG59XG5cbmZ1bmN0aW9uIGdldFJvb3RIb3N0Q29udGFpbmVyKCkge1xuICB2YXIgcm9vdEluc3RhbmNlID0gcmVxdWlyZWRDb250ZXh0KHJvb3RJbnN0YW5jZVN0YWNrQ3Vyc29yLmN1cnJlbnQpO1xuICByZXR1cm4gcm9vdEluc3RhbmNlO1xufVxuXG5mdW5jdGlvbiBwdXNoSG9zdENvbnRhaW5lcihmaWJlciwgbmV4dFJvb3RJbnN0YW5jZSkge1xuICAvLyBQdXNoIGN1cnJlbnQgcm9vdCBpbnN0YW5jZSBvbnRvIHRoZSBzdGFjaztcbiAgLy8gVGhpcyBhbGxvd3MgdXMgdG8gcmVzZXQgcm9vdCB3aGVuIHBvcnRhbHMgYXJlIHBvcHBlZC5cbiAgcHVzaChyb290SW5zdGFuY2VTdGFja0N1cnNvciwgbmV4dFJvb3RJbnN0YW5jZSwgZmliZXIpOyAvLyBUcmFjayB0aGUgY29udGV4dCBhbmQgdGhlIEZpYmVyIHRoYXQgcHJvdmlkZWQgaXQuXG4gIC8vIFRoaXMgZW5hYmxlcyB1cyB0byBwb3Agb25seSBGaWJlcnMgdGhhdCBwcm92aWRlIHVuaXF1ZSBjb250ZXh0cy5cblxuICBwdXNoKGNvbnRleHRGaWJlclN0YWNrQ3Vyc29yLCBmaWJlciwgZmliZXIpOyAvLyBGaW5hbGx5LCB3ZSBuZWVkIHRvIHB1c2ggdGhlIGhvc3QgY29udGV4dCB0byB0aGUgc3RhY2suXG4gIC8vIEhvd2V2ZXIsIHdlIGNhbid0IGp1c3QgY2FsbCBnZXRSb290SG9zdENvbnRleHQoKSBhbmQgcHVzaCBpdCBiZWNhdXNlXG4gIC8vIHdlJ2QgaGF2ZSBhIGRpZmZlcmVudCBudW1iZXIgb2YgZW50cmllcyBvbiB0aGUgc3RhY2sgZGVwZW5kaW5nIG9uXG4gIC8vIHdoZXRoZXIgZ2V0Um9vdEhvc3RDb250ZXh0KCkgdGhyb3dzIHNvbWV3aGVyZSBpbiByZW5kZXJlciBjb2RlIG9yIG5vdC5cbiAgLy8gU28gd2UgcHVzaCBhbiBlbXB0eSB2YWx1ZSBmaXJzdC4gVGhpcyBsZXRzIHVzIHNhZmVseSB1bndpbmQgb24gZXJyb3JzLlxuXG4gIHB1c2goY29udGV4dFN0YWNrQ3Vyc29yJDEsIE5PX0NPTlRFWFQsIGZpYmVyKTtcbiAgdmFyIG5leHRSb290Q29udGV4dCA9IGdldFJvb3RIb3N0Q29udGV4dChuZXh0Um9vdEluc3RhbmNlKTsgLy8gTm93IHRoYXQgd2Uga25vdyB0aGlzIGZ1bmN0aW9uIGRvZXNuJ3QgdGhyb3csIHJlcGxhY2UgaXQuXG5cbiAgcG9wKGNvbnRleHRTdGFja0N1cnNvciQxLCBmaWJlcik7XG4gIHB1c2goY29udGV4dFN0YWNrQ3Vyc29yJDEsIG5leHRSb290Q29udGV4dCwgZmliZXIpO1xufVxuXG5mdW5jdGlvbiBwb3BIb3N0Q29udGFpbmVyKGZpYmVyKSB7XG4gIHBvcChjb250ZXh0U3RhY2tDdXJzb3IkMSwgZmliZXIpO1xuICBwb3AoY29udGV4dEZpYmVyU3RhY2tDdXJzb3IsIGZpYmVyKTtcbiAgcG9wKHJvb3RJbnN0YW5jZVN0YWNrQ3Vyc29yLCBmaWJlcik7XG59XG5cbmZ1bmN0aW9uIGdldEhvc3RDb250ZXh0KCkge1xuICB2YXIgY29udGV4dCA9IHJlcXVpcmVkQ29udGV4dChjb250ZXh0U3RhY2tDdXJzb3IkMS5jdXJyZW50KTtcbiAgcmV0dXJuIGNvbnRleHQ7XG59XG5cbmZ1bmN0aW9uIHB1c2hIb3N0Q29udGV4dChmaWJlcikge1xuICB2YXIgcm9vdEluc3RhbmNlID0gcmVxdWlyZWRDb250ZXh0KHJvb3RJbnN0YW5jZVN0YWNrQ3Vyc29yLmN1cnJlbnQpO1xuICB2YXIgY29udGV4dCA9IHJlcXVpcmVkQ29udGV4dChjb250ZXh0U3RhY2tDdXJzb3IkMS5jdXJyZW50KTtcbiAgdmFyIG5leHRDb250ZXh0ID0gZ2V0Q2hpbGRIb3N0Q29udGV4dChjb250ZXh0LCBmaWJlci50eXBlKTsgLy8gRG9uJ3QgcHVzaCB0aGlzIEZpYmVyJ3MgY29udGV4dCB1bmxlc3MgaXQncyB1bmlxdWUuXG5cbiAgaWYgKGNvbnRleHQgPT09IG5leHRDb250ZXh0KSB7XG4gICAgcmV0dXJuO1xuICB9IC8vIFRyYWNrIHRoZSBjb250ZXh0IGFuZCB0aGUgRmliZXIgdGhhdCBwcm92aWRlZCBpdC5cbiAgLy8gVGhpcyBlbmFibGVzIHVzIHRvIHBvcCBvbmx5IEZpYmVycyB0aGF0IHByb3ZpZGUgdW5pcXVlIGNvbnRleHRzLlxuXG5cbiAgcHVzaChjb250ZXh0RmliZXJTdGFja0N1cnNvciwgZmliZXIsIGZpYmVyKTtcbiAgcHVzaChjb250ZXh0U3RhY2tDdXJzb3IkMSwgbmV4dENvbnRleHQsIGZpYmVyKTtcbn1cblxuZnVuY3Rpb24gcG9wSG9zdENvbnRleHQoZmliZXIpIHtcbiAgLy8gRG8gbm90IHBvcCB1bmxlc3MgdGhpcyBGaWJlciBwcm92aWRlZCB0aGUgY3VycmVudCBjb250ZXh0LlxuICAvLyBwdXNoSG9zdENvbnRleHQoKSBvbmx5IHB1c2hlcyBGaWJlcnMgdGhhdCBwcm92aWRlIHVuaXF1ZSBjb250ZXh0cy5cbiAgaWYgKGNvbnRleHRGaWJlclN0YWNrQ3Vyc29yLmN1cnJlbnQgIT09IGZpYmVyKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcG9wKGNvbnRleHRTdGFja0N1cnNvciQxLCBmaWJlcik7XG4gIHBvcChjb250ZXh0RmliZXJTdGFja0N1cnNvciwgZmliZXIpO1xufVxuXG52YXIgRGVmYXVsdFN1c3BlbnNlQ29udGV4dCA9IDA7IC8vIFRoZSBTdXNwZW5zZSBDb250ZXh0IGlzIHNwbGl0IGludG8gdHdvIHBhcnRzLiBUaGUgbG93ZXIgYml0cyBpc1xuLy8gaW5oZXJpdGVkIGRlZXBseSBkb3duIHRoZSBzdWJ0cmVlLiBUaGUgdXBwZXIgYml0cyBvbmx5IGFmZmVjdFxuLy8gdGhpcyBpbW1lZGlhdGUgc3VzcGVuc2UgYm91bmRhcnkgYW5kIGdldHMgcmVzZXQgZWFjaCBuZXdcbi8vIGJvdW5kYXJ5IG9yIHN1c3BlbnNlIGxpc3QuXG5cbnZhciBTdWJ0cmVlU3VzcGVuc2VDb250ZXh0TWFzayA9IDE7IC8vIFN1YnRyZWUgRmxhZ3M6XG4vLyBJbnZpc2libGVQYXJlbnRTdXNwZW5zZUNvbnRleHQgaW5kaWNhdGVzIHRoYXQgb25lIG9mIG91ciBwYXJlbnQgU3VzcGVuc2Vcbi8vIGJvdW5kYXJpZXMgaXMgbm90IGN1cnJlbnRseSBzaG93aW5nIHZpc2libGUgbWFpbiBjb250ZW50LlxuLy8gRWl0aGVyIGJlY2F1c2UgaXQgaXMgYWxyZWFkeSBzaG93aW5nIGEgZmFsbGJhY2sgb3IgaXMgbm90IG1vdW50ZWQgYXQgYWxsLlxuLy8gV2UgY2FuIHVzZSB0aGlzIHRvIGRldGVybWluZSBpZiBpdCBpcyBkZXNpcmFibGUgdG8gdHJpZ2dlciBhIGZhbGxiYWNrIGF0XG4vLyB0aGUgcGFyZW50LiBJZiBub3QsIHRoZW4gd2UgbWlnaHQgbmVlZCB0byB0cmlnZ2VyIHVuZGVzaXJhYmxlIGJvdW5kYXJpZXNcbi8vIGFuZC9vciBzdXNwZW5kIHRoZSBjb21taXQgdG8gYXZvaWQgaGlkaW5nIHRoZSBwYXJlbnQgY29udGVudC5cblxudmFyIEludmlzaWJsZVBhcmVudFN1c3BlbnNlQ29udGV4dCA9IDE7IC8vIFNoYWxsb3cgRmxhZ3M6XG4vLyBGb3JjZVN1c3BlbnNlRmFsbGJhY2sgY2FuIGJlIHVzZWQgYnkgU3VzcGVuc2VMaXN0IHRvIGZvcmNlIG5ld2x5IGFkZGVkXG4vLyBpdGVtcyBpbnRvIHRoZWlyIGZhbGxiYWNrIHN0YXRlIGR1cmluZyBvbmUgb2YgdGhlIHJlbmRlciBwYXNzZXMuXG5cbnZhciBGb3JjZVN1c3BlbnNlRmFsbGJhY2sgPSAyO1xudmFyIHN1c3BlbnNlU3RhY2tDdXJzb3IgPSBjcmVhdGVDdXJzb3IoRGVmYXVsdFN1c3BlbnNlQ29udGV4dCk7XG5mdW5jdGlvbiBoYXNTdXNwZW5zZUNvbnRleHQocGFyZW50Q29udGV4dCwgZmxhZykge1xuICByZXR1cm4gKHBhcmVudENvbnRleHQgJiBmbGFnKSAhPT0gMDtcbn1cbmZ1bmN0aW9uIHNldERlZmF1bHRTaGFsbG93U3VzcGVuc2VDb250ZXh0KHBhcmVudENvbnRleHQpIHtcbiAgcmV0dXJuIHBhcmVudENvbnRleHQgJiBTdWJ0cmVlU3VzcGVuc2VDb250ZXh0TWFzaztcbn1cbmZ1bmN0aW9uIHNldFNoYWxsb3dTdXNwZW5zZUNvbnRleHQocGFyZW50Q29udGV4dCwgc2hhbGxvd0NvbnRleHQpIHtcbiAgcmV0dXJuIHBhcmVudENvbnRleHQgJiBTdWJ0cmVlU3VzcGVuc2VDb250ZXh0TWFzayB8IHNoYWxsb3dDb250ZXh0O1xufVxuZnVuY3Rpb24gYWRkU3VidHJlZVN1c3BlbnNlQ29udGV4dChwYXJlbnRDb250ZXh0LCBzdWJ0cmVlQ29udGV4dCkge1xuICByZXR1cm4gcGFyZW50Q29udGV4dCB8IHN1YnRyZWVDb250ZXh0O1xufVxuZnVuY3Rpb24gcHVzaFN1c3BlbnNlQ29udGV4dChmaWJlciwgbmV3Q29udGV4dCkge1xuICBwdXNoKHN1c3BlbnNlU3RhY2tDdXJzb3IsIG5ld0NvbnRleHQsIGZpYmVyKTtcbn1cbmZ1bmN0aW9uIHBvcFN1c3BlbnNlQ29udGV4dChmaWJlcikge1xuICBwb3Aoc3VzcGVuc2VTdGFja0N1cnNvciwgZmliZXIpO1xufVxuXG5mdW5jdGlvbiBzaG91bGRDYXB0dXJlU3VzcGVuc2Uod29ya0luUHJvZ3Jlc3MsIGhhc0ludmlzaWJsZVBhcmVudCkge1xuICAvLyBJZiBpdCB3YXMgdGhlIHByaW1hcnkgY2hpbGRyZW4gdGhhdCBqdXN0IHN1c3BlbmRlZCwgY2FwdHVyZSBhbmQgcmVuZGVyIHRoZVxuICAvLyBmYWxsYmFjay4gT3RoZXJ3aXNlLCBkb24ndCBjYXB0dXJlIGFuZCBidWJibGUgdG8gdGhlIG5leHQgYm91bmRhcnkuXG4gIHZhciBuZXh0U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuXG4gIGlmIChuZXh0U3RhdGUgIT09IG51bGwpIHtcbiAgICBpZiAobmV4dFN0YXRlLmRlaHlkcmF0ZWQgIT09IG51bGwpIHtcbiAgICAgIC8vIEEgZGVoeWRyYXRlZCBib3VuZGFyeSBhbHdheXMgY2FwdHVyZXMuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgcHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzOyAvLyBJbiBvcmRlciB0byBjYXB0dXJlLCB0aGUgU3VzcGVuc2UgY29tcG9uZW50IG11c3QgaGF2ZSBhIGZhbGxiYWNrIHByb3AuXG5cbiAgaWYgKHByb3BzLmZhbGxiYWNrID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gLy8gUmVndWxhciBib3VuZGFyaWVzIGFsd2F5cyBjYXB0dXJlLlxuXG5cbiAgaWYgKHByb3BzLnVuc3RhYmxlX2F2b2lkVGhpc0ZhbGxiYWNrICE9PSB0cnVlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gLy8gSWYgaXQncyBhIGJvdW5kYXJ5IHdlIHNob3VsZCBhdm9pZCwgdGhlbiB3ZSBwcmVmZXIgdG8gYnViYmxlIHVwIHRvIHRoZVxuICAvLyBwYXJlbnQgYm91bmRhcnkgaWYgaXQgaXMgY3VycmVudGx5IGludmlzaWJsZS5cblxuXG4gIGlmIChoYXNJbnZpc2libGVQYXJlbnQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gLy8gSWYgdGhlIHBhcmVudCBpcyBub3QgYWJsZSB0byBoYW5kbGUgaXQsIHdlIG11c3QgaGFuZGxlIGl0LlxuXG5cbiAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiBmaW5kRmlyc3RTdXNwZW5kZWQocm93KSB7XG4gIHZhciBub2RlID0gcm93O1xuXG4gIHdoaWxlIChub2RlICE9PSBudWxsKSB7XG4gICAgaWYgKG5vZGUudGFnID09PSBTdXNwZW5zZUNvbXBvbmVudCkge1xuICAgICAgdmFyIHN0YXRlID0gbm9kZS5tZW1vaXplZFN0YXRlO1xuXG4gICAgICBpZiAoc3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIGRlaHlkcmF0ZWQgPSBzdGF0ZS5kZWh5ZHJhdGVkO1xuXG4gICAgICAgIGlmIChkZWh5ZHJhdGVkID09PSBudWxsIHx8IGlzU3VzcGVuc2VJbnN0YW5jZVBlbmRpbmcoZGVoeWRyYXRlZCkgfHwgaXNTdXNwZW5zZUluc3RhbmNlRmFsbGJhY2soZGVoeWRyYXRlZCkpIHtcbiAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobm9kZS50YWcgPT09IFN1c3BlbnNlTGlzdENvbXBvbmVudCAmJiAvLyByZXZlYWxPcmRlciB1bmRlZmluZWQgY2FuJ3QgYmUgdHJ1c3RlZCBiZWNhdXNlIGl0IGRvbid0XG4gICAgLy8ga2VlcCB0cmFjayBvZiB3aGV0aGVyIGl0IHN1c3BlbmRlZCBvciBub3QuXG4gICAgbm9kZS5tZW1vaXplZFByb3BzLnJldmVhbE9yZGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhciBkaWRTdXNwZW5kID0gKG5vZGUuZmxhZ3MgJiBEaWRDYXB0dXJlKSAhPT0gTm9GbGFncztcblxuICAgICAgaWYgKGRpZFN1c3BlbmQpIHtcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChub2RlLmNoaWxkICE9PSBudWxsKSB7XG4gICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICBub2RlID0gbm9kZS5jaGlsZDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChub2RlID09PSByb3cpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHdoaWxlIChub2RlLnNpYmxpbmcgPT09IG51bGwpIHtcbiAgICAgIGlmIChub2RlLnJldHVybiA9PT0gbnVsbCB8fCBub2RlLnJldHVybiA9PT0gcm93KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfVxuXG4gICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxudmFyIE5vRmxhZ3MkMSA9XG4vKiAgKi9cbjA7IC8vIFJlcHJlc2VudHMgd2hldGhlciBlZmZlY3Qgc2hvdWxkIGZpcmUuXG5cbnZhciBIYXNFZmZlY3QgPVxuLyogKi9cbjE7IC8vIFJlcHJlc2VudHMgdGhlIHBoYXNlIGluIHdoaWNoIHRoZSBlZmZlY3QgKG5vdCB0aGUgY2xlYW4tdXApIGZpcmVzLlxuXG52YXIgTGF5b3V0ID1cbi8qICAgICovXG4yO1xudmFyIFBhc3NpdmUkMSA9XG4vKiAgICovXG40O1xuXG4vLyBUaGlzIG1heSBoYXZlIGJlZW4gYW4gaW5zZXJ0aW9uIG9yIGEgaHlkcmF0aW9uLlxuXG52YXIgaHlkcmF0aW9uUGFyZW50RmliZXIgPSBudWxsO1xudmFyIG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPSBudWxsO1xudmFyIGlzSHlkcmF0aW5nID0gZmFsc2U7XG5cbmZ1bmN0aW9uIGVudGVySHlkcmF0aW9uU3RhdGUoZmliZXIpIHtcblxuICB2YXIgcGFyZW50SW5zdGFuY2UgPSBmaWJlci5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztcbiAgbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSA9IGdldEZpcnN0SHlkcmF0YWJsZUNoaWxkKHBhcmVudEluc3RhbmNlKTtcbiAgaHlkcmF0aW9uUGFyZW50RmliZXIgPSBmaWJlcjtcbiAgaXNIeWRyYXRpbmcgPSB0cnVlO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gZGVsZXRlSHlkcmF0YWJsZUluc3RhbmNlKHJldHVybkZpYmVyLCBpbnN0YW5jZSkge1xuICB7XG4gICAgc3dpdGNoIChyZXR1cm5GaWJlci50YWcpIHtcbiAgICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICAgIGRpZE5vdEh5ZHJhdGVDb250YWluZXJJbnN0YW5jZShyZXR1cm5GaWJlci5zdGF0ZU5vZGUuY29udGFpbmVySW5mbywgaW5zdGFuY2UpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICBkaWROb3RIeWRyYXRlSW5zdGFuY2UocmV0dXJuRmliZXIudHlwZSwgcmV0dXJuRmliZXIubWVtb2l6ZWRQcm9wcywgcmV0dXJuRmliZXIuc3RhdGVOb2RlLCBpbnN0YW5jZSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHZhciBjaGlsZFRvRGVsZXRlID0gY3JlYXRlRmliZXJGcm9tSG9zdEluc3RhbmNlRm9yRGVsZXRpb24oKTtcbiAgY2hpbGRUb0RlbGV0ZS5zdGF0ZU5vZGUgPSBpbnN0YW5jZTtcbiAgY2hpbGRUb0RlbGV0ZS5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgY2hpbGRUb0RlbGV0ZS5mbGFncyA9IERlbGV0aW9uOyAvLyBUaGlzIG1pZ2h0IHNlZW0gbGlrZSBpdCBiZWxvbmdzIG9uIHByb2dyZXNzZWRGaXJzdERlbGV0aW9uLiBIb3dldmVyLFxuICAvLyB0aGVzZSBjaGlsZHJlbiBhcmUgbm90IHBhcnQgb2YgdGhlIHJlY29uY2lsaWF0aW9uIGxpc3Qgb2YgY2hpbGRyZW4uXG4gIC8vIEV2ZW4gaWYgd2UgYWJvcnQgYW5kIHJlcmVjb25jaWxlIHRoZSBjaGlsZHJlbiwgdGhhdCB3aWxsIHRyeSB0byBoeWRyYXRlXG4gIC8vIGFnYWluIGFuZCB0aGUgbm9kZXMgYXJlIHN0aWxsIGluIHRoZSBob3N0IHRyZWUgc28gdGhlc2Ugd2lsbCBiZVxuICAvLyByZWNyZWF0ZWQuXG5cbiAgaWYgKHJldHVybkZpYmVyLmxhc3RFZmZlY3QgIT09IG51bGwpIHtcbiAgICByZXR1cm5GaWJlci5sYXN0RWZmZWN0Lm5leHRFZmZlY3QgPSBjaGlsZFRvRGVsZXRlO1xuICAgIHJldHVybkZpYmVyLmxhc3RFZmZlY3QgPSBjaGlsZFRvRGVsZXRlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybkZpYmVyLmZpcnN0RWZmZWN0ID0gcmV0dXJuRmliZXIubGFzdEVmZmVjdCA9IGNoaWxkVG9EZWxldGU7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5zZXJ0Tm9uSHlkcmF0ZWRJbnN0YW5jZShyZXR1cm5GaWJlciwgZmliZXIpIHtcbiAgZmliZXIuZmxhZ3MgPSBmaWJlci5mbGFncyAmIH5IeWRyYXRpbmcgfCBQbGFjZW1lbnQ7XG5cbiAge1xuICAgIHN3aXRjaCAocmV0dXJuRmliZXIudGFnKSB7XG4gICAgICBjYXNlIEhvc3RSb290OlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIHBhcmVudENvbnRhaW5lciA9IHJldHVybkZpYmVyLnN0YXRlTm9kZS5jb250YWluZXJJbmZvO1xuXG4gICAgICAgICAgc3dpdGNoIChmaWJlci50YWcpIHtcbiAgICAgICAgICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgICAgICAgICAgdmFyIHR5cGUgPSBmaWJlci50eXBlO1xuICAgICAgICAgICAgICB2YXIgcHJvcHMgPSBmaWJlci5wZW5kaW5nUHJvcHM7XG4gICAgICAgICAgICAgIGRpZE5vdEZpbmRIeWRyYXRhYmxlQ29udGFpbmVySW5zdGFuY2UocGFyZW50Q29udGFpbmVyLCB0eXBlKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgSG9zdFRleHQ6XG4gICAgICAgICAgICAgIHZhciB0ZXh0ID0gZmliZXIucGVuZGluZ1Byb3BzO1xuICAgICAgICAgICAgICBkaWROb3RGaW5kSHlkcmF0YWJsZUNvbnRhaW5lclRleHRJbnN0YW5jZShwYXJlbnRDb250YWluZXIsIHRleHQpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgcGFyZW50VHlwZSA9IHJldHVybkZpYmVyLnR5cGU7XG4gICAgICAgICAgdmFyIHBhcmVudFByb3BzID0gcmV0dXJuRmliZXIubWVtb2l6ZWRQcm9wcztcbiAgICAgICAgICB2YXIgcGFyZW50SW5zdGFuY2UgPSByZXR1cm5GaWJlci5zdGF0ZU5vZGU7XG5cbiAgICAgICAgICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgICAgICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICAgICAgICB2YXIgX3R5cGUgPSBmaWJlci50eXBlO1xuICAgICAgICAgICAgICB2YXIgX3Byb3BzID0gZmliZXIucGVuZGluZ1Byb3BzO1xuICAgICAgICAgICAgICBkaWROb3RGaW5kSHlkcmF0YWJsZUluc3RhbmNlKHBhcmVudFR5cGUsIHBhcmVudFByb3BzLCBwYXJlbnRJbnN0YW5jZSwgX3R5cGUpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBIb3N0VGV4dDpcbiAgICAgICAgICAgICAgdmFyIF90ZXh0ID0gZmliZXIucGVuZGluZ1Byb3BzO1xuICAgICAgICAgICAgICBkaWROb3RGaW5kSHlkcmF0YWJsZVRleHRJbnN0YW5jZShwYXJlbnRUeXBlLCBwYXJlbnRQcm9wcywgcGFyZW50SW5zdGFuY2UsIF90ZXh0KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICAgICAgICAgIGRpZE5vdEZpbmRIeWRyYXRhYmxlU3VzcGVuc2VJbnN0YW5jZShwYXJlbnRUeXBlLCBwYXJlbnRQcm9wcyk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdHJ5SHlkcmF0ZShmaWJlciwgbmV4dEluc3RhbmNlKSB7XG4gIHN3aXRjaCAoZmliZXIudGFnKSB7XG4gICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgdHlwZSA9IGZpYmVyLnR5cGU7XG4gICAgICAgIHZhciBwcm9wcyA9IGZpYmVyLnBlbmRpbmdQcm9wcztcbiAgICAgICAgdmFyIGluc3RhbmNlID0gY2FuSHlkcmF0ZUluc3RhbmNlKG5leHRJbnN0YW5jZSwgdHlwZSk7XG5cbiAgICAgICAgaWYgKGluc3RhbmNlICE9PSBudWxsKSB7XG4gICAgICAgICAgZmliZXIuc3RhdGVOb2RlID0gaW5zdGFuY2U7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RUZXh0OlxuICAgICAge1xuICAgICAgICB2YXIgdGV4dCA9IGZpYmVyLnBlbmRpbmdQcm9wcztcbiAgICAgICAgdmFyIHRleHRJbnN0YW5jZSA9IGNhbkh5ZHJhdGVUZXh0SW5zdGFuY2UobmV4dEluc3RhbmNlLCB0ZXh0KTtcblxuICAgICAgICBpZiAodGV4dEluc3RhbmNlICE9PSBudWxsKSB7XG4gICAgICAgICAgZmliZXIuc3RhdGVOb2RlID0gdGV4dEluc3RhbmNlO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgIHtcblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRyeVRvQ2xhaW1OZXh0SHlkcmF0YWJsZUluc3RhbmNlKGZpYmVyKSB7XG4gIGlmICghaXNIeWRyYXRpbmcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgbmV4dEluc3RhbmNlID0gbmV4dEh5ZHJhdGFibGVJbnN0YW5jZTtcblxuICBpZiAoIW5leHRJbnN0YW5jZSkge1xuICAgIC8vIE5vdGhpbmcgdG8gaHlkcmF0ZS4gTWFrZSBpdCBhbiBpbnNlcnRpb24uXG4gICAgaW5zZXJ0Tm9uSHlkcmF0ZWRJbnN0YW5jZShoeWRyYXRpb25QYXJlbnRGaWJlciwgZmliZXIpO1xuICAgIGlzSHlkcmF0aW5nID0gZmFsc2U7XG4gICAgaHlkcmF0aW9uUGFyZW50RmliZXIgPSBmaWJlcjtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgZmlyc3RBdHRlbXB0ZWRJbnN0YW5jZSA9IG5leHRJbnN0YW5jZTtcblxuICBpZiAoIXRyeUh5ZHJhdGUoZmliZXIsIG5leHRJbnN0YW5jZSkpIHtcbiAgICAvLyBJZiB3ZSBjYW4ndCBoeWRyYXRlIHRoaXMgaW5zdGFuY2UgbGV0J3MgdHJ5IHRoZSBuZXh0IG9uZS5cbiAgICAvLyBXZSB1c2UgdGhpcyBhcyBhIGhldXJpc3RpYy4gSXQncyBiYXNlZCBvbiBpbnR1aXRpb24gYW5kIG5vdCBkYXRhIHNvIGl0XG4gICAgLy8gbWlnaHQgYmUgZmxhd2VkIG9yIHVubmVjZXNzYXJ5LlxuICAgIG5leHRJbnN0YW5jZSA9IGdldE5leHRIeWRyYXRhYmxlU2libGluZyhmaXJzdEF0dGVtcHRlZEluc3RhbmNlKTtcblxuICAgIGlmICghbmV4dEluc3RhbmNlIHx8ICF0cnlIeWRyYXRlKGZpYmVyLCBuZXh0SW5zdGFuY2UpKSB7XG4gICAgICAvLyBOb3RoaW5nIHRvIGh5ZHJhdGUuIE1ha2UgaXQgYW4gaW5zZXJ0aW9uLlxuICAgICAgaW5zZXJ0Tm9uSHlkcmF0ZWRJbnN0YW5jZShoeWRyYXRpb25QYXJlbnRGaWJlciwgZmliZXIpO1xuICAgICAgaXNIeWRyYXRpbmcgPSBmYWxzZTtcbiAgICAgIGh5ZHJhdGlvblBhcmVudEZpYmVyID0gZmliZXI7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBXZSBtYXRjaGVkIHRoZSBuZXh0IG9uZSwgd2UnbGwgbm93IGFzc3VtZSB0aGF0IHRoZSBmaXJzdCBvbmUgd2FzXG4gICAgLy8gc3VwZXJmbHVvdXMgYW5kIHdlJ2xsIGRlbGV0ZSBpdC4gU2luY2Ugd2UgY2FuJ3QgZWFnZXJseSBkZWxldGUgaXRcbiAgICAvLyB3ZSdsbCBoYXZlIHRvIHNjaGVkdWxlIGEgZGVsZXRpb24uIFRvIGRvIHRoYXQsIHRoaXMgbm9kZSBuZWVkcyBhIGR1bW15XG4gICAgLy8gZmliZXIgYXNzb2NpYXRlZCB3aXRoIGl0LlxuXG5cbiAgICBkZWxldGVIeWRyYXRhYmxlSW5zdGFuY2UoaHlkcmF0aW9uUGFyZW50RmliZXIsIGZpcnN0QXR0ZW1wdGVkSW5zdGFuY2UpO1xuICB9XG5cbiAgaHlkcmF0aW9uUGFyZW50RmliZXIgPSBmaWJlcjtcbiAgbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSA9IGdldEZpcnN0SHlkcmF0YWJsZUNoaWxkKG5leHRJbnN0YW5jZSk7XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVUb0h5ZHJhdGVIb3N0SW5zdGFuY2UoZmliZXIsIHJvb3RDb250YWluZXJJbnN0YW5jZSwgaG9zdENvbnRleHQpIHtcblxuICB2YXIgaW5zdGFuY2UgPSBmaWJlci5zdGF0ZU5vZGU7XG4gIHZhciB1cGRhdGVQYXlsb2FkID0gaHlkcmF0ZUluc3RhbmNlKGluc3RhbmNlLCBmaWJlci50eXBlLCBmaWJlci5tZW1vaXplZFByb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UsIGhvc3RDb250ZXh0LCBmaWJlcik7IC8vIFRPRE86IFR5cGUgdGhpcyBzcGVjaWZpYyB0byB0aGlzIHR5cGUgb2YgY29tcG9uZW50LlxuXG4gIGZpYmVyLnVwZGF0ZVF1ZXVlID0gdXBkYXRlUGF5bG9hZDsgLy8gSWYgdGhlIHVwZGF0ZSBwYXlsb2FkIGluZGljYXRlcyB0aGF0IHRoZXJlIGlzIGEgY2hhbmdlIG9yIGlmIHRoZXJlXG4gIC8vIGlzIGEgbmV3IHJlZiB3ZSBtYXJrIHRoaXMgYXMgYW4gdXBkYXRlLlxuXG4gIGlmICh1cGRhdGVQYXlsb2FkICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVUb0h5ZHJhdGVIb3N0VGV4dEluc3RhbmNlKGZpYmVyKSB7XG5cbiAgdmFyIHRleHRJbnN0YW5jZSA9IGZpYmVyLnN0YXRlTm9kZTtcbiAgdmFyIHRleHRDb250ZW50ID0gZmliZXIubWVtb2l6ZWRQcm9wcztcbiAgdmFyIHNob3VsZFVwZGF0ZSA9IGh5ZHJhdGVUZXh0SW5zdGFuY2UodGV4dEluc3RhbmNlLCB0ZXh0Q29udGVudCwgZmliZXIpO1xuXG4gIHtcbiAgICBpZiAoc2hvdWxkVXBkYXRlKSB7XG4gICAgICAvLyBXZSBhc3N1bWUgdGhhdCBwcmVwYXJlVG9IeWRyYXRlSG9zdFRleHRJbnN0YW5jZSBpcyBjYWxsZWQgaW4gYSBjb250ZXh0IHdoZXJlIHRoZVxuICAgICAgLy8gaHlkcmF0aW9uIHBhcmVudCBpcyB0aGUgcGFyZW50IGhvc3QgY29tcG9uZW50IG9mIHRoaXMgaG9zdCB0ZXh0LlxuICAgICAgdmFyIHJldHVybkZpYmVyID0gaHlkcmF0aW9uUGFyZW50RmliZXI7XG5cbiAgICAgIGlmIChyZXR1cm5GaWJlciAhPT0gbnVsbCkge1xuICAgICAgICBzd2l0Y2ggKHJldHVybkZpYmVyLnRhZykge1xuICAgICAgICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHZhciBwYXJlbnRDb250YWluZXIgPSByZXR1cm5GaWJlci5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztcbiAgICAgICAgICAgICAgZGlkTm90TWF0Y2hIeWRyYXRlZENvbnRhaW5lclRleHRJbnN0YW5jZShwYXJlbnRDb250YWluZXIsIHRleHRJbnN0YW5jZSwgdGV4dENvbnRlbnQpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdmFyIHBhcmVudFR5cGUgPSByZXR1cm5GaWJlci50eXBlO1xuICAgICAgICAgICAgICB2YXIgcGFyZW50UHJvcHMgPSByZXR1cm5GaWJlci5tZW1vaXplZFByb3BzO1xuICAgICAgICAgICAgICB2YXIgcGFyZW50SW5zdGFuY2UgPSByZXR1cm5GaWJlci5zdGF0ZU5vZGU7XG4gICAgICAgICAgICAgIGRpZE5vdE1hdGNoSHlkcmF0ZWRUZXh0SW5zdGFuY2UocGFyZW50VHlwZSwgcGFyZW50UHJvcHMsIHBhcmVudEluc3RhbmNlLCB0ZXh0SW5zdGFuY2UsIHRleHRDb250ZW50KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gc2hvdWxkVXBkYXRlO1xufVxuXG5mdW5jdGlvbiBza2lwUGFzdERlaHlkcmF0ZWRTdXNwZW5zZUluc3RhbmNlKGZpYmVyKSB7XG5cbiAgdmFyIHN1c3BlbnNlU3RhdGUgPSBmaWJlci5tZW1vaXplZFN0YXRlO1xuICB2YXIgc3VzcGVuc2VJbnN0YW5jZSA9IHN1c3BlbnNlU3RhdGUgIT09IG51bGwgPyBzdXNwZW5zZVN0YXRlLmRlaHlkcmF0ZWQgOiBudWxsO1xuXG4gIGlmICghc3VzcGVuc2VJbnN0YW5jZSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIkV4cGVjdGVkIHRvIGhhdmUgYSBoeWRyYXRlZCBzdXNwZW5zZSBpbnN0YW5jZS4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBnZXROZXh0SHlkcmF0YWJsZUluc3RhbmNlQWZ0ZXJTdXNwZW5zZUluc3RhbmNlKHN1c3BlbnNlSW5zdGFuY2UpO1xufVxuXG5mdW5jdGlvbiBwb3BUb05leHRIb3N0UGFyZW50KGZpYmVyKSB7XG4gIHZhciBwYXJlbnQgPSBmaWJlci5yZXR1cm47XG5cbiAgd2hpbGUgKHBhcmVudCAhPT0gbnVsbCAmJiBwYXJlbnQudGFnICE9PSBIb3N0Q29tcG9uZW50ICYmIHBhcmVudC50YWcgIT09IEhvc3RSb290ICYmIHBhcmVudC50YWcgIT09IFN1c3BlbnNlQ29tcG9uZW50KSB7XG4gICAgcGFyZW50ID0gcGFyZW50LnJldHVybjtcbiAgfVxuXG4gIGh5ZHJhdGlvblBhcmVudEZpYmVyID0gcGFyZW50O1xufVxuXG5mdW5jdGlvbiBwb3BIeWRyYXRpb25TdGF0ZShmaWJlcikge1xuXG4gIGlmIChmaWJlciAhPT0gaHlkcmF0aW9uUGFyZW50RmliZXIpIHtcbiAgICAvLyBXZSdyZSBkZWVwZXIgdGhhbiB0aGUgY3VycmVudCBoeWRyYXRpb24gY29udGV4dCwgaW5zaWRlIGFuIGluc2VydGVkXG4gICAgLy8gdHJlZS5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIWlzSHlkcmF0aW5nKSB7XG4gICAgLy8gSWYgd2UncmUgbm90IGN1cnJlbnRseSBoeWRyYXRpbmcgYnV0IHdlJ3JlIGluIGEgaHlkcmF0aW9uIGNvbnRleHQsIHRoZW5cbiAgICAvLyB3ZSB3ZXJlIGFuIGluc2VydGlvbiBhbmQgbm93IG5lZWQgdG8gcG9wIHVwIHJlZW50ZXIgaHlkcmF0aW9uIG9mIG91clxuICAgIC8vIHNpYmxpbmdzLlxuICAgIHBvcFRvTmV4dEhvc3RQYXJlbnQoZmliZXIpO1xuICAgIGlzSHlkcmF0aW5nID0gdHJ1ZTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgdHlwZSA9IGZpYmVyLnR5cGU7IC8vIElmIHdlIGhhdmUgYW55IHJlbWFpbmluZyBoeWRyYXRhYmxlIG5vZGVzLCB3ZSBuZWVkIHRvIGRlbGV0ZSB0aGVtIG5vdy5cbiAgLy8gV2Ugb25seSBkbyB0aGlzIGRlZXBlciB0aGFuIGhlYWQgYW5kIGJvZHkgc2luY2UgdGhleSB0ZW5kIHRvIGhhdmUgcmFuZG9tXG4gIC8vIG90aGVyIG5vZGVzIGluIHRoZW0uIFdlIGFsc28gaWdub3JlIGNvbXBvbmVudHMgd2l0aCBwdXJlIHRleHQgY29udGVudCBpblxuICAvLyBzaWRlIG9mIHRoZW0uXG4gIC8vIFRPRE86IEJldHRlciBoZXVyaXN0aWMuXG5cbiAgaWYgKGZpYmVyLnRhZyAhPT0gSG9zdENvbXBvbmVudCB8fCB0eXBlICE9PSAnaGVhZCcgJiYgdHlwZSAhPT0gJ2JvZHknICYmICFzaG91bGRTZXRUZXh0Q29udGVudCh0eXBlLCBmaWJlci5tZW1vaXplZFByb3BzKSkge1xuICAgIHZhciBuZXh0SW5zdGFuY2UgPSBuZXh0SHlkcmF0YWJsZUluc3RhbmNlO1xuXG4gICAgd2hpbGUgKG5leHRJbnN0YW5jZSkge1xuICAgICAgZGVsZXRlSHlkcmF0YWJsZUluc3RhbmNlKGZpYmVyLCBuZXh0SW5zdGFuY2UpO1xuICAgICAgbmV4dEluc3RhbmNlID0gZ2V0TmV4dEh5ZHJhdGFibGVTaWJsaW5nKG5leHRJbnN0YW5jZSk7XG4gICAgfVxuICB9XG5cbiAgcG9wVG9OZXh0SG9zdFBhcmVudChmaWJlcik7XG5cbiAgaWYgKGZpYmVyLnRhZyA9PT0gU3VzcGVuc2VDb21wb25lbnQpIHtcbiAgICBuZXh0SHlkcmF0YWJsZUluc3RhbmNlID0gc2tpcFBhc3REZWh5ZHJhdGVkU3VzcGVuc2VJbnN0YW5jZShmaWJlcik7XG4gIH0gZWxzZSB7XG4gICAgbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSA9IGh5ZHJhdGlvblBhcmVudEZpYmVyID8gZ2V0TmV4dEh5ZHJhdGFibGVTaWJsaW5nKGZpYmVyLnN0YXRlTm9kZSkgOiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHJlc2V0SHlkcmF0aW9uU3RhdGUoKSB7XG5cbiAgaHlkcmF0aW9uUGFyZW50RmliZXIgPSBudWxsO1xuICBuZXh0SHlkcmF0YWJsZUluc3RhbmNlID0gbnVsbDtcbiAgaXNIeWRyYXRpbmcgPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZ2V0SXNIeWRyYXRpbmcoKSB7XG4gIHJldHVybiBpc0h5ZHJhdGluZztcbn1cblxuLy8gYW5kIHNob3VsZCBiZSByZXNldCBiZWZvcmUgc3RhcnRpbmcgYSBuZXcgcmVuZGVyLlxuLy8gVGhpcyB0cmFja3Mgd2hpY2ggbXV0YWJsZSBzb3VyY2VzIG5lZWQgdG8gYmUgcmVzZXQgYWZ0ZXIgYSByZW5kZXIuXG5cbnZhciB3b3JrSW5Qcm9ncmVzc1NvdXJjZXMgPSBbXTtcbnZhciByZW5kZXJlclNpZ2lsJDE7XG5cbntcbiAgLy8gVXNlZCB0byBkZXRlY3QgbXVsdGlwbGUgcmVuZGVyZXJzIHVzaW5nIHRoZSBzYW1lIG11dGFibGUgc291cmNlLlxuICByZW5kZXJlclNpZ2lsJDEgPSB7fTtcbn1cblxuZnVuY3Rpb24gbWFya1NvdXJjZUFzRGlydHkobXV0YWJsZVNvdXJjZSkge1xuICB3b3JrSW5Qcm9ncmVzc1NvdXJjZXMucHVzaChtdXRhYmxlU291cmNlKTtcbn1cbmZ1bmN0aW9uIHJlc2V0V29ya0luUHJvZ3Jlc3NWZXJzaW9ucygpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB3b3JrSW5Qcm9ncmVzc1NvdXJjZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbXV0YWJsZVNvdXJjZSA9IHdvcmtJblByb2dyZXNzU291cmNlc1tpXTtcblxuICAgIHtcbiAgICAgIG11dGFibGVTb3VyY2UuX3dvcmtJblByb2dyZXNzVmVyc2lvblByaW1hcnkgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHdvcmtJblByb2dyZXNzU291cmNlcy5sZW5ndGggPSAwO1xufVxuZnVuY3Rpb24gZ2V0V29ya0luUHJvZ3Jlc3NWZXJzaW9uKG11dGFibGVTb3VyY2UpIHtcbiAge1xuICAgIHJldHVybiBtdXRhYmxlU291cmNlLl93b3JrSW5Qcm9ncmVzc1ZlcnNpb25QcmltYXJ5O1xuICB9XG59XG5mdW5jdGlvbiBzZXRXb3JrSW5Qcm9ncmVzc1ZlcnNpb24obXV0YWJsZVNvdXJjZSwgdmVyc2lvbikge1xuICB7XG4gICAgbXV0YWJsZVNvdXJjZS5fd29ya0luUHJvZ3Jlc3NWZXJzaW9uUHJpbWFyeSA9IHZlcnNpb247XG4gIH1cblxuICB3b3JrSW5Qcm9ncmVzc1NvdXJjZXMucHVzaChtdXRhYmxlU291cmNlKTtcbn1cbmZ1bmN0aW9uIHdhcm5BYm91dE11bHRpcGxlUmVuZGVyZXJzREVWKG11dGFibGVTb3VyY2UpIHtcbiAge1xuICAgIHtcbiAgICAgIGlmIChtdXRhYmxlU291cmNlLl9jdXJyZW50UHJpbWFyeVJlbmRlcmVyID09IG51bGwpIHtcbiAgICAgICAgbXV0YWJsZVNvdXJjZS5fY3VycmVudFByaW1hcnlSZW5kZXJlciA9IHJlbmRlcmVyU2lnaWwkMTtcbiAgICAgIH0gZWxzZSBpZiAobXV0YWJsZVNvdXJjZS5fY3VycmVudFByaW1hcnlSZW5kZXJlciAhPT0gcmVuZGVyZXJTaWdpbCQxKSB7XG4gICAgICAgIGVycm9yKCdEZXRlY3RlZCBtdWx0aXBsZSByZW5kZXJlcnMgY29uY3VycmVudGx5IHJlbmRlcmluZyB0aGUgJyArICdzYW1lIG11dGFibGUgc291cmNlLiBUaGlzIGlzIGN1cnJlbnRseSB1bnN1cHBvcnRlZC4nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0gLy8gRWFnZXIgcmVhZHMgdGhlIHZlcnNpb24gb2YgYSBtdXRhYmxlIHNvdXJjZSBhbmQgc3RvcmVzIGl0IG9uIHRoZSByb290LlxuXG52YXIgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50RGlzcGF0Y2hlcixcbiAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50QmF0Y2hDb25maWc7XG52YXIgZGlkV2FybkFib3V0TWlzbWF0Y2hlZEhvb2tzRm9yQ29tcG9uZW50O1xudmFyIGRpZFdhcm5BYm91dFVzZU9wYXF1ZUlkZW50aWZpZXI7XG5cbntcbiAgZGlkV2FybkFib3V0VXNlT3BhcXVlSWRlbnRpZmllciA9IHt9O1xuICBkaWRXYXJuQWJvdXRNaXNtYXRjaGVkSG9va3NGb3JDb21wb25lbnQgPSBuZXcgU2V0KCk7XG59XG5cbi8vIFRoZXNlIGFyZSBzZXQgcmlnaHQgYmVmb3JlIGNhbGxpbmcgdGhlIGNvbXBvbmVudC5cbnZhciByZW5kZXJMYW5lcyA9IE5vTGFuZXM7IC8vIFRoZSB3b3JrLWluLXByb2dyZXNzIGZpYmVyLiBJJ3ZlIG5hbWVkIGl0IGRpZmZlcmVudGx5IHRvIGRpc3Rpbmd1aXNoIGl0IGZyb21cbi8vIHRoZSB3b3JrLWluLXByb2dyZXNzIGhvb2suXG5cbnZhciBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxID0gbnVsbDsgLy8gSG9va3MgYXJlIHN0b3JlZCBhcyBhIGxpbmtlZCBsaXN0IG9uIHRoZSBmaWJlcidzIG1lbW9pemVkU3RhdGUgZmllbGQuIFRoZVxuLy8gY3VycmVudCBob29rIGxpc3QgaXMgdGhlIGxpc3QgdGhhdCBiZWxvbmdzIHRvIHRoZSBjdXJyZW50IGZpYmVyLiBUaGVcbi8vIHdvcmstaW4tcHJvZ3Jlc3MgaG9vayBsaXN0IGlzIGEgbmV3IGxpc3QgdGhhdCB3aWxsIGJlIGFkZGVkIHRvIHRoZVxuLy8gd29yay1pbi1wcm9ncmVzcyBmaWJlci5cblxudmFyIGN1cnJlbnRIb29rID0gbnVsbDtcbnZhciB3b3JrSW5Qcm9ncmVzc0hvb2sgPSBudWxsOyAvLyBXaGV0aGVyIGFuIHVwZGF0ZSB3YXMgc2NoZWR1bGVkIGF0IGFueSBwb2ludCBkdXJpbmcgdGhlIHJlbmRlciBwaGFzZS4gVGhpc1xuLy8gZG9lcyBub3QgZ2V0IHJlc2V0IGlmIHdlIGRvIGFub3RoZXIgcmVuZGVyIHBhc3M7IG9ubHkgd2hlbiB3ZSdyZSBjb21wbGV0ZWx5XG4vLyBmaW5pc2hlZCBldmFsdWF0aW5nIHRoaXMgY29tcG9uZW50LiBUaGlzIGlzIGFuIG9wdGltaXphdGlvbiBzbyB3ZSBrbm93XG4vLyB3aGV0aGVyIHdlIG5lZWQgdG8gY2xlYXIgcmVuZGVyIHBoYXNlIHVwZGF0ZXMgYWZ0ZXIgYSB0aHJvdy5cblxudmFyIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGUgPSBmYWxzZTsgLy8gV2hlcmUgYW4gdXBkYXRlIHdhcyBzY2hlZHVsZWQgb25seSBkdXJpbmcgdGhlIGN1cnJlbnQgcmVuZGVyIHBhc3MuIFRoaXNcbi8vIGdldHMgcmVzZXQgYWZ0ZXIgZWFjaCBhdHRlbXB0LlxuLy8gVE9ETzogTWF5YmUgdGhlcmUncyBzb21lIHdheSB0byBjb25zb2xpZGF0ZSB0aGlzIHdpdGhcbi8vIGBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlYC4gT3Igd2l0aCBgbnVtYmVyT2ZSZVJlbmRlcnNgLlxuXG52YXIgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZUR1cmluZ1RoaXNQYXNzID0gZmFsc2U7XG52YXIgUkVfUkVOREVSX0xJTUlUID0gMjU7IC8vIEluIERFViwgdGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgY3VycmVudGx5IGV4ZWN1dGluZyBwcmltaXRpdmUgaG9va1xuXG52YXIgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBudWxsOyAvLyBJbiBERVYsIHRoaXMgbGlzdCBlbnN1cmVzIHRoYXQgaG9va3MgYXJlIGNhbGxlZCBpbiB0aGUgc2FtZSBvcmRlciBiZXR3ZWVuIHJlbmRlcnMuXG4vLyBUaGUgbGlzdCBzdG9yZXMgdGhlIG9yZGVyIG9mIGhvb2tzIHVzZWQgZHVyaW5nIHRoZSBpbml0aWFsIHJlbmRlciAobW91bnQpLlxuLy8gU3Vic2VxdWVudCByZW5kZXJzICh1cGRhdGVzKSByZWZlcmVuY2UgdGhpcyBsaXN0LlxuXG52YXIgaG9va1R5cGVzRGV2ID0gbnVsbDtcbnZhciBob29rVHlwZXNVcGRhdGVJbmRleERldiA9IC0xOyAvLyBJbiBERVYsIHRoaXMgdHJhY2tzIHdoZXRoZXIgY3VycmVudGx5IHJlbmRlcmluZyBjb21wb25lbnQgbmVlZHMgdG8gaWdub3JlXG4vLyB0aGUgZGVwZW5kZW5jaWVzIGZvciBIb29rcyB0aGF0IG5lZWQgdGhlbSAoZS5nLiB1c2VFZmZlY3Qgb3IgdXNlTWVtbykuXG4vLyBXaGVuIHRydWUsIHN1Y2ggSG9va3Mgd2lsbCBhbHdheXMgYmUgXCJyZW1vdW50ZWRcIi4gT25seSB1c2VkIGR1cmluZyBob3QgcmVsb2FkLlxuXG52YXIgaWdub3JlUHJldmlvdXNEZXBlbmRlbmNpZXMgPSBmYWxzZTtcblxuZnVuY3Rpb24gbW91bnRIb29rVHlwZXNEZXYoKSB7XG4gIHtcbiAgICB2YXIgaG9va05hbWUgPSBjdXJyZW50SG9va05hbWVJbkRldjtcblxuICAgIGlmIChob29rVHlwZXNEZXYgPT09IG51bGwpIHtcbiAgICAgIGhvb2tUeXBlc0RldiA9IFtob29rTmFtZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGhvb2tUeXBlc0Rldi5wdXNoKGhvb2tOYW1lKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlSG9va1R5cGVzRGV2KCkge1xuICB7XG4gICAgdmFyIGhvb2tOYW1lID0gY3VycmVudEhvb2tOYW1lSW5EZXY7XG5cbiAgICBpZiAoaG9va1R5cGVzRGV2ICE9PSBudWxsKSB7XG4gICAgICBob29rVHlwZXNVcGRhdGVJbmRleERldisrO1xuXG4gICAgICBpZiAoaG9va1R5cGVzRGV2W2hvb2tUeXBlc1VwZGF0ZUluZGV4RGV2XSAhPT0gaG9va05hbWUpIHtcbiAgICAgICAgd2Fybk9uSG9va01pc21hdGNoSW5EZXYoaG9va05hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja0RlcHNBcmVBcnJheURldihkZXBzKSB7XG4gIHtcbiAgICBpZiAoZGVwcyAhPT0gdW5kZWZpbmVkICYmIGRlcHMgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkoZGVwcykpIHtcbiAgICAgIC8vIFZlcmlmeSBkZXBzLCBidXQgb25seSBvbiBtb3VudCB0byBhdm9pZCBleHRyYSBjaGVja3MuXG4gICAgICAvLyBJdCdzIHVubGlrZWx5IHRoZWlyIHR5cGUgd291bGQgY2hhbmdlIGFzIHVzdWFsbHkgeW91IGRlZmluZSB0aGVtIGlubGluZS5cbiAgICAgIGVycm9yKCclcyByZWNlaXZlZCBhIGZpbmFsIGFyZ3VtZW50IHRoYXQgaXMgbm90IGFuIGFycmF5IChpbnN0ZWFkLCByZWNlaXZlZCBgJXNgKS4gV2hlbiAnICsgJ3NwZWNpZmllZCwgdGhlIGZpbmFsIGFyZ3VtZW50IG11c3QgYmUgYW4gYXJyYXkuJywgY3VycmVudEhvb2tOYW1lSW5EZXYsIHR5cGVvZiBkZXBzKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gd2Fybk9uSG9va01pc21hdGNoSW5EZXYoY3VycmVudEhvb2tOYW1lKSB7XG4gIHtcbiAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUoY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS50eXBlKTtcblxuICAgIGlmICghZGlkV2FybkFib3V0TWlzbWF0Y2hlZEhvb2tzRm9yQ29tcG9uZW50Lmhhcyhjb21wb25lbnROYW1lKSkge1xuICAgICAgZGlkV2FybkFib3V0TWlzbWF0Y2hlZEhvb2tzRm9yQ29tcG9uZW50LmFkZChjb21wb25lbnROYW1lKTtcblxuICAgICAgaWYgKGhvb2tUeXBlc0RldiAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgdGFibGUgPSAnJztcbiAgICAgICAgdmFyIHNlY29uZENvbHVtblN0YXJ0ID0gMzA7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gaG9va1R5cGVzVXBkYXRlSW5kZXhEZXY7IGkrKykge1xuICAgICAgICAgIHZhciBvbGRIb29rTmFtZSA9IGhvb2tUeXBlc0RldltpXTtcbiAgICAgICAgICB2YXIgbmV3SG9va05hbWUgPSBpID09PSBob29rVHlwZXNVcGRhdGVJbmRleERldiA/IGN1cnJlbnRIb29rTmFtZSA6IG9sZEhvb2tOYW1lO1xuICAgICAgICAgIHZhciByb3cgPSBpICsgMSArIFwiLiBcIiArIG9sZEhvb2tOYW1lOyAvLyBFeHRyYSBzcGFjZSBzbyBzZWNvbmQgY29sdW1uIGxpbmVzIHVwXG4gICAgICAgICAgLy8gbG9sIEAgSUUgbm90IHN1cHBvcnRpbmcgU3RyaW5nI3JlcGVhdFxuXG4gICAgICAgICAgd2hpbGUgKHJvdy5sZW5ndGggPCBzZWNvbmRDb2x1bW5TdGFydCkge1xuICAgICAgICAgICAgcm93ICs9ICcgJztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByb3cgKz0gbmV3SG9va05hbWUgKyAnXFxuJztcbiAgICAgICAgICB0YWJsZSArPSByb3c7XG4gICAgICAgIH1cblxuICAgICAgICBlcnJvcignUmVhY3QgaGFzIGRldGVjdGVkIGEgY2hhbmdlIGluIHRoZSBvcmRlciBvZiBIb29rcyBjYWxsZWQgYnkgJXMuICcgKyAnVGhpcyB3aWxsIGxlYWQgdG8gYnVncyBhbmQgZXJyb3JzIGlmIG5vdCBmaXhlZC4gJyArICdGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmVhZCB0aGUgUnVsZXMgb2YgSG9va3M6IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9ydWxlcy1vZi1ob29rc1xcblxcbicgKyAnICAgUHJldmlvdXMgcmVuZGVyICAgICAgICAgICAgTmV4dCByZW5kZXJcXG4nICsgJyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbicgKyAnJXMnICsgJyAgIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXlxcbicsIGNvbXBvbmVudE5hbWUsIHRhYmxlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdGhyb3dJbnZhbGlkSG9va0Vycm9yKCkge1xuICB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiSW52YWxpZCBob29rIGNhbGwuIEhvb2tzIGNhbiBvbmx5IGJlIGNhbGxlZCBpbnNpZGUgb2YgdGhlIGJvZHkgb2YgYSBmdW5jdGlvbiBjb21wb25lbnQuIFRoaXMgY291bGQgaGFwcGVuIGZvciBvbmUgb2YgdGhlIGZvbGxvd2luZyByZWFzb25zOlxcbjEuIFlvdSBtaWdodCBoYXZlIG1pc21hdGNoaW5nIHZlcnNpb25zIG9mIFJlYWN0IGFuZCB0aGUgcmVuZGVyZXIgKHN1Y2ggYXMgUmVhY3QgRE9NKVxcbjIuIFlvdSBtaWdodCBiZSBicmVha2luZyB0aGUgUnVsZXMgb2YgSG9va3NcXG4zLiBZb3UgbWlnaHQgaGF2ZSBtb3JlIHRoYW4gb25lIGNvcHkgb2YgUmVhY3QgaW4gdGhlIHNhbWUgYXBwXFxuU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9pbnZhbGlkLWhvb2stY2FsbCBmb3IgdGlwcyBhYm91dCBob3cgdG8gZGVidWcgYW5kIGZpeCB0aGlzIHByb2JsZW0uXCIgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYXJlSG9va0lucHV0c0VxdWFsKG5leHREZXBzLCBwcmV2RGVwcykge1xuICB7XG4gICAgaWYgKGlnbm9yZVByZXZpb3VzRGVwZW5kZW5jaWVzKSB7XG4gICAgICAvLyBPbmx5IHRydWUgd2hlbiB0aGlzIGNvbXBvbmVudCBpcyBiZWluZyBob3QgcmVsb2FkZWQuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgaWYgKHByZXZEZXBzID09PSBudWxsKSB7XG4gICAge1xuICAgICAgZXJyb3IoJyVzIHJlY2VpdmVkIGEgZmluYWwgYXJndW1lbnQgZHVyaW5nIHRoaXMgcmVuZGVyLCBidXQgbm90IGR1cmluZyAnICsgJ3RoZSBwcmV2aW91cyByZW5kZXIuIEV2ZW4gdGhvdWdoIHRoZSBmaW5hbCBhcmd1bWVudCBpcyBvcHRpb25hbCwgJyArICdpdHMgdHlwZSBjYW5ub3QgY2hhbmdlIGJldHdlZW4gcmVuZGVycy4nLCBjdXJyZW50SG9va05hbWVJbkRldik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAge1xuICAgIC8vIERvbid0IGJvdGhlciBjb21wYXJpbmcgbGVuZ3RocyBpbiBwcm9kIGJlY2F1c2UgdGhlc2UgYXJyYXlzIHNob3VsZCBiZVxuICAgIC8vIHBhc3NlZCBpbmxpbmUuXG4gICAgaWYgKG5leHREZXBzLmxlbmd0aCAhPT0gcHJldkRlcHMubGVuZ3RoKSB7XG4gICAgICBlcnJvcignVGhlIGZpbmFsIGFyZ3VtZW50IHBhc3NlZCB0byAlcyBjaGFuZ2VkIHNpemUgYmV0d2VlbiByZW5kZXJzLiBUaGUgJyArICdvcmRlciBhbmQgc2l6ZSBvZiB0aGlzIGFycmF5IG11c3QgcmVtYWluIGNvbnN0YW50LlxcblxcbicgKyAnUHJldmlvdXM6ICVzXFxuJyArICdJbmNvbWluZzogJXMnLCBjdXJyZW50SG9va05hbWVJbkRldiwgXCJbXCIgKyBwcmV2RGVwcy5qb2luKCcsICcpICsgXCJdXCIsIFwiW1wiICsgbmV4dERlcHMuam9pbignLCAnKSArIFwiXVwiKTtcbiAgICB9XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHByZXZEZXBzLmxlbmd0aCAmJiBpIDwgbmV4dERlcHMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAob2JqZWN0SXMobmV4dERlcHNbaV0sIHByZXZEZXBzW2ldKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHJlbmRlcldpdGhIb29rcyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBwcm9wcywgc2Vjb25kQXJnLCBuZXh0UmVuZGVyTGFuZXMpIHtcbiAgcmVuZGVyTGFuZXMgPSBuZXh0UmVuZGVyTGFuZXM7XG4gIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEgPSB3b3JrSW5Qcm9ncmVzcztcblxuICB7XG4gICAgaG9va1R5cGVzRGV2ID0gY3VycmVudCAhPT0gbnVsbCA/IGN1cnJlbnQuX2RlYnVnSG9va1R5cGVzIDogbnVsbDtcbiAgICBob29rVHlwZXNVcGRhdGVJbmRleERldiA9IC0xOyAvLyBVc2VkIGZvciBob3QgcmVsb2FkaW5nOlxuXG4gICAgaWdub3JlUHJldmlvdXNEZXBlbmRlbmNpZXMgPSBjdXJyZW50ICE9PSBudWxsICYmIGN1cnJlbnQudHlwZSAhPT0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgfVxuXG4gIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IG51bGw7XG4gIHdvcmtJblByb2dyZXNzLmxhbmVzID0gTm9MYW5lczsgLy8gVGhlIGZvbGxvd2luZyBzaG91bGQgaGF2ZSBhbHJlYWR5IGJlZW4gcmVzZXRcbiAgLy8gY3VycmVudEhvb2sgPSBudWxsO1xuICAvLyB3b3JrSW5Qcm9ncmVzc0hvb2sgPSBudWxsO1xuICAvLyBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlID0gZmFsc2U7XG4gIC8vIFRPRE8gV2FybiBpZiBubyBob29rcyBhcmUgdXNlZCBhdCBhbGwgZHVyaW5nIG1vdW50LCB0aGVuIHNvbWUgYXJlIHVzZWQgZHVyaW5nIHVwZGF0ZS5cbiAgLy8gQ3VycmVudGx5IHdlIHdpbGwgaWRlbnRpZnkgdGhlIHVwZGF0ZSByZW5kZXIgYXMgYSBtb3VudCBiZWNhdXNlIG1lbW9pemVkU3RhdGUgPT09IG51bGwuXG4gIC8vIFRoaXMgaXMgdHJpY2t5IGJlY2F1c2UgaXQncyB2YWxpZCBmb3IgY2VydGFpbiB0eXBlcyBvZiBjb21wb25lbnRzIChlLmcuIFJlYWN0LmxhenkpXG4gIC8vIFVzaW5nIG1lbW9pemVkU3RhdGUgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIG1vdW50L3VwZGF0ZSBvbmx5IHdvcmtzIGlmIGF0IGxlYXN0IG9uZSBzdGF0ZWZ1bCBob29rIGlzIHVzZWQuXG4gIC8vIE5vbi1zdGF0ZWZ1bCBob29rcyAoZS5nLiBjb250ZXh0KSBkb24ndCBnZXQgYWRkZWQgdG8gbWVtb2l6ZWRTdGF0ZSxcbiAgLy8gc28gbWVtb2l6ZWRTdGF0ZSB3b3VsZCBiZSBudWxsIGR1cmluZyB1cGRhdGVzIGFuZCBtb3VudHMuXG5cbiAge1xuICAgIGlmIChjdXJyZW50ICE9PSBudWxsICYmIGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuICAgIH0gZWxzZSBpZiAoaG9va1R5cGVzRGV2ICE9PSBudWxsKSB7XG4gICAgICAvLyBUaGlzIGRpc3BhdGNoZXIgaGFuZGxlcyBhbiBlZGdlIGNhc2Ugd2hlcmUgYSBjb21wb25lbnQgaXMgdXBkYXRpbmcsXG4gICAgICAvLyBidXQgbm8gc3RhdGVmdWwgaG9va3MgaGF2ZSBiZWVuIHVzZWQuXG4gICAgICAvLyBXZSB3YW50IHRvIG1hdGNoIHRoZSBwcm9kdWN0aW9uIGNvZGUgYmVoYXZpb3IgKHdoaWNoIHdpbGwgdXNlIEhvb2tzRGlzcGF0Y2hlck9uTW91bnQpLFxuICAgICAgLy8gYnV0IHdpdGggdGhlIGV4dHJhIERFViB2YWxpZGF0aW9uIHRvIGVuc3VyZSBob29rcyBvcmRlcmluZyBoYXNuJ3QgY2hhbmdlZC5cbiAgICAgIC8vIFRoaXMgZGlzcGF0Y2hlciBkb2VzIHRoYXQuXG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEhvb2tzRGlzcGF0Y2hlck9uTW91bnRXaXRoSG9va1R5cGVzSW5ERVY7XG4gICAgfSBlbHNlIHtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuICAgIH1cbiAgfVxuXG4gIHZhciBjaGlsZHJlbiA9IENvbXBvbmVudChwcm9wcywgc2Vjb25kQXJnKTsgLy8gQ2hlY2sgaWYgdGhlcmUgd2FzIGEgcmVuZGVyIHBoYXNlIHVwZGF0ZVxuXG4gIGlmIChkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlRHVyaW5nVGhpc1Bhc3MpIHtcbiAgICAvLyBLZWVwIHJlbmRlcmluZyBpbiBhIGxvb3AgZm9yIGFzIGxvbmcgYXMgcmVuZGVyIHBoYXNlIHVwZGF0ZXMgY29udGludWUgdG9cbiAgICAvLyBiZSBzY2hlZHVsZWQuIFVzZSBhIGNvdW50ZXIgdG8gcHJldmVudCBpbmZpbml0ZSBsb29wcy5cbiAgICB2YXIgbnVtYmVyT2ZSZVJlbmRlcnMgPSAwO1xuXG4gICAgZG8ge1xuICAgICAgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZUR1cmluZ1RoaXNQYXNzID0gZmFsc2U7XG5cbiAgICAgIGlmICghKG51bWJlck9mUmVSZW5kZXJzIDwgUkVfUkVOREVSX0xJTUlUKSkge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiVG9vIG1hbnkgcmUtcmVuZGVycy4gUmVhY3QgbGltaXRzIHRoZSBudW1iZXIgb2YgcmVuZGVycyB0byBwcmV2ZW50IGFuIGluZmluaXRlIGxvb3AuXCIgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBudW1iZXJPZlJlUmVuZGVycyArPSAxO1xuXG4gICAgICB7XG4gICAgICAgIC8vIEV2ZW4gd2hlbiBob3QgcmVsb2FkaW5nLCBhbGxvdyBkZXBlbmRlbmNpZXMgdG8gc3RhYmlsaXplXG4gICAgICAgIC8vIGFmdGVyIGZpcnN0IHJlbmRlciB0byBwcmV2ZW50IGluZmluaXRlIHJlbmRlciBwaGFzZSB1cGRhdGVzLlxuICAgICAgICBpZ25vcmVQcmV2aW91c0RlcGVuZGVuY2llcyA9IGZhbHNlO1xuICAgICAgfSAvLyBTdGFydCBvdmVyIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlzdFxuXG5cbiAgICAgIGN1cnJlbnRIb29rID0gbnVsbDtcbiAgICAgIHdvcmtJblByb2dyZXNzSG9vayA9IG51bGw7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IG51bGw7XG5cbiAgICAgIHtcbiAgICAgICAgLy8gQWxzbyB2YWxpZGF0ZSBob29rIG9yZGVyIGZvciBjYXNjYWRpbmcgdXBkYXRlcy5cbiAgICAgICAgaG9va1R5cGVzVXBkYXRlSW5kZXhEZXYgPSAtMTtcbiAgICAgIH1cblxuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSAgSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWIDtcbiAgICAgIGNoaWxkcmVuID0gQ29tcG9uZW50KHByb3BzLCBzZWNvbmRBcmcpO1xuICAgIH0gd2hpbGUgKGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGVEdXJpbmdUaGlzUGFzcyk7XG4gIH0gLy8gV2UgY2FuIGFzc3VtZSB0aGUgcHJldmlvdXMgZGlzcGF0Y2hlciBpcyBhbHdheXMgdGhpcyBvbmUsIHNpbmNlIHdlIHNldCBpdFxuICAvLyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSByZW5kZXIgcGhhc2UgYW5kIHRoZXJlJ3Mgbm8gcmUtZW50cmFuY3kuXG5cblxuICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IENvbnRleHRPbmx5RGlzcGF0Y2hlcjtcblxuICB7XG4gICAgd29ya0luUHJvZ3Jlc3MuX2RlYnVnSG9va1R5cGVzID0gaG9va1R5cGVzRGV2O1xuICB9IC8vIFRoaXMgY2hlY2sgdXNlcyBjdXJyZW50SG9vayBzbyB0aGF0IGl0IHdvcmtzIHRoZSBzYW1lIGluIERFViBhbmQgcHJvZCBidW5kbGVzLlxuICAvLyBob29rVHlwZXNEZXYgY291bGQgY2F0Y2ggbW9yZSBjYXNlcyAoZS5nLiBjb250ZXh0KSBidXQgb25seSBpbiBERVYgYnVuZGxlcy5cblxuXG4gIHZhciBkaWRSZW5kZXJUb29GZXdIb29rcyA9IGN1cnJlbnRIb29rICE9PSBudWxsICYmIGN1cnJlbnRIb29rLm5leHQgIT09IG51bGw7XG4gIHJlbmRlckxhbmVzID0gTm9MYW5lcztcbiAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSA9IG51bGw7XG4gIGN1cnJlbnRIb29rID0gbnVsbDtcbiAgd29ya0luUHJvZ3Jlc3NIb29rID0gbnVsbDtcblxuICB7XG4gICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBudWxsO1xuICAgIGhvb2tUeXBlc0RldiA9IG51bGw7XG4gICAgaG9va1R5cGVzVXBkYXRlSW5kZXhEZXYgPSAtMTtcbiAgfVxuXG4gIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGUgPSBmYWxzZTtcblxuICBpZiAoISFkaWRSZW5kZXJUb29GZXdIb29rcykge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlJlbmRlcmVkIGZld2VyIGhvb2tzIHRoYW4gZXhwZWN0ZWQuIFRoaXMgbWF5IGJlIGNhdXNlZCBieSBhbiBhY2NpZGVudGFsIGVhcmx5IHJldHVybiBzdGF0ZW1lbnQuXCIgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY2hpbGRyZW47XG59XG5mdW5jdGlvbiBiYWlsb3V0SG9va3MoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIGxhbmVzKSB7XG4gIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gY3VycmVudC51cGRhdGVRdWV1ZTtcbiAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgJj0gfihQYXNzaXZlIHwgVXBkYXRlKTtcbiAgY3VycmVudC5sYW5lcyA9IHJlbW92ZUxhbmVzKGN1cnJlbnQubGFuZXMsIGxhbmVzKTtcbn1cbmZ1bmN0aW9uIHJlc2V0SG9va3NBZnRlclRocm93KCkge1xuICAvLyBXZSBjYW4gYXNzdW1lIHRoZSBwcmV2aW91cyBkaXNwYXRjaGVyIGlzIGFsd2F5cyB0aGlzIG9uZSwgc2luY2Ugd2Ugc2V0IGl0XG4gIC8vIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJlbmRlciBwaGFzZSBhbmQgdGhlcmUncyBubyByZS1lbnRyYW5jeS5cbiAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBDb250ZXh0T25seURpc3BhdGNoZXI7XG5cbiAgaWYgKGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGUpIHtcbiAgICAvLyBUaGVyZSB3ZXJlIHJlbmRlciBwaGFzZSB1cGRhdGVzLiBUaGVzZSBhcmUgb25seSB2YWxpZCBmb3IgdGhpcyByZW5kZXJcbiAgICAvLyBwaGFzZSwgd2hpY2ggd2UgYXJlIG5vdyBhYm9ydGluZy4gUmVtb3ZlIHRoZSB1cGRhdGVzIGZyb20gdGhlIHF1ZXVlcyBzb1xuICAgIC8vIHRoZXkgZG8gbm90IHBlcnNpc3QgdG8gdGhlIG5leHQgcmVuZGVyLiBEbyBub3QgcmVtb3ZlIHVwZGF0ZXMgZnJvbSBob29rc1xuICAgIC8vIHRoYXQgd2VyZW4ndCBwcm9jZXNzZWQuXG4gICAgLy9cbiAgICAvLyBPbmx5IHJlc2V0IHRoZSB1cGRhdGVzIGZyb20gdGhlIHF1ZXVlIGlmIGl0IGhhcyBhIGNsb25lLiBJZiBpdCBkb2VzXG4gICAgLy8gbm90IGhhdmUgYSBjbG9uZSwgdGhhdCBtZWFucyBpdCB3YXNuJ3QgcHJvY2Vzc2VkLCBhbmQgdGhlIHVwZGF0ZXMgd2VyZVxuICAgIC8vIHNjaGVkdWxlZCBiZWZvcmUgd2UgZW50ZXJlZCB0aGUgcmVuZGVyIHBoYXNlLlxuICAgIHZhciBob29rID0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5tZW1vaXplZFN0YXRlO1xuXG4gICAgd2hpbGUgKGhvb2sgIT09IG51bGwpIHtcbiAgICAgIHZhciBxdWV1ZSA9IGhvb2sucXVldWU7XG5cbiAgICAgIGlmIChxdWV1ZSAhPT0gbnVsbCkge1xuICAgICAgICBxdWV1ZS5wZW5kaW5nID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaG9vayA9IGhvb2submV4dDtcbiAgICB9XG5cbiAgICBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlID0gZmFsc2U7XG4gIH1cblxuICByZW5kZXJMYW5lcyA9IE5vTGFuZXM7XG4gIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEgPSBudWxsO1xuICBjdXJyZW50SG9vayA9IG51bGw7XG4gIHdvcmtJblByb2dyZXNzSG9vayA9IG51bGw7XG5cbiAge1xuICAgIGhvb2tUeXBlc0RldiA9IG51bGw7XG4gICAgaG9va1R5cGVzVXBkYXRlSW5kZXhEZXYgPSAtMTtcbiAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IG51bGw7XG4gICAgaXNVcGRhdGluZ09wYXF1ZVZhbHVlSW5SZW5kZXJQaGFzZSA9IGZhbHNlO1xuICB9XG5cbiAgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZUR1cmluZ1RoaXNQYXNzID0gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCkge1xuICB2YXIgaG9vayA9IHtcbiAgICBtZW1vaXplZFN0YXRlOiBudWxsLFxuICAgIGJhc2VTdGF0ZTogbnVsbCxcbiAgICBiYXNlUXVldWU6IG51bGwsXG4gICAgcXVldWU6IG51bGwsXG4gICAgbmV4dDogbnVsbFxuICB9O1xuXG4gIGlmICh3b3JrSW5Qcm9ncmVzc0hvb2sgPT09IG51bGwpIHtcbiAgICAvLyBUaGlzIGlzIHRoZSBmaXJzdCBob29rIGluIHRoZSBsaXN0XG4gICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5tZW1vaXplZFN0YXRlID0gd29ya0luUHJvZ3Jlc3NIb29rID0gaG9vaztcbiAgfSBlbHNlIHtcbiAgICAvLyBBcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdFxuICAgIHdvcmtJblByb2dyZXNzSG9vayA9IHdvcmtJblByb2dyZXNzSG9vay5uZXh0ID0gaG9vaztcbiAgfVxuXG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzc0hvb2s7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpIHtcbiAgLy8gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGJvdGggZm9yIHVwZGF0ZXMgYW5kIGZvciByZS1yZW5kZXJzIHRyaWdnZXJlZCBieSBhXG4gIC8vIHJlbmRlciBwaGFzZSB1cGRhdGUuIEl0IGFzc3VtZXMgdGhlcmUgaXMgZWl0aGVyIGEgY3VycmVudCBob29rIHdlIGNhblxuICAvLyBjbG9uZSwgb3IgYSB3b3JrLWluLXByb2dyZXNzIGhvb2sgZnJvbSBhIHByZXZpb3VzIHJlbmRlciBwYXNzIHRoYXQgd2UgY2FuXG4gIC8vIHVzZSBhcyBhIGJhc2UuIFdoZW4gd2UgcmVhY2ggdGhlIGVuZCBvZiB0aGUgYmFzZSBsaXN0LCB3ZSBtdXN0IHN3aXRjaCB0b1xuICAvLyB0aGUgZGlzcGF0Y2hlciB1c2VkIGZvciBtb3VudHMuXG4gIHZhciBuZXh0Q3VycmVudEhvb2s7XG5cbiAgaWYgKGN1cnJlbnRIb29rID09PSBudWxsKSB7XG4gICAgdmFyIGN1cnJlbnQgPSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLmFsdGVybmF0ZTtcblxuICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICBuZXh0Q3VycmVudEhvb2sgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5leHRDdXJyZW50SG9vayA9IG51bGw7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIG5leHRDdXJyZW50SG9vayA9IGN1cnJlbnRIb29rLm5leHQ7XG4gIH1cblxuICB2YXIgbmV4dFdvcmtJblByb2dyZXNzSG9vaztcblxuICBpZiAod29ya0luUHJvZ3Jlc3NIb29rID09PSBudWxsKSB7XG4gICAgbmV4dFdvcmtJblByb2dyZXNzSG9vayA9IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEubWVtb2l6ZWRTdGF0ZTtcbiAgfSBlbHNlIHtcbiAgICBuZXh0V29ya0luUHJvZ3Jlc3NIb29rID0gd29ya0luUHJvZ3Jlc3NIb29rLm5leHQ7XG4gIH1cblxuICBpZiAobmV4dFdvcmtJblByb2dyZXNzSG9vayAhPT0gbnVsbCkge1xuICAgIC8vIFRoZXJlJ3MgYWxyZWFkeSBhIHdvcmstaW4tcHJvZ3Jlc3MuIFJldXNlIGl0LlxuICAgIHdvcmtJblByb2dyZXNzSG9vayA9IG5leHRXb3JrSW5Qcm9ncmVzc0hvb2s7XG4gICAgbmV4dFdvcmtJblByb2dyZXNzSG9vayA9IHdvcmtJblByb2dyZXNzSG9vay5uZXh0O1xuICAgIGN1cnJlbnRIb29rID0gbmV4dEN1cnJlbnRIb29rO1xuICB9IGVsc2Uge1xuICAgIC8vIENsb25lIGZyb20gdGhlIGN1cnJlbnQgaG9vay5cbiAgICBpZiAoIShuZXh0Q3VycmVudEhvb2sgIT09IG51bGwpKSB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIlJlbmRlcmVkIG1vcmUgaG9va3MgdGhhbiBkdXJpbmcgdGhlIHByZXZpb3VzIHJlbmRlci5cIiApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGN1cnJlbnRIb29rID0gbmV4dEN1cnJlbnRIb29rO1xuICAgIHZhciBuZXdIb29rID0ge1xuICAgICAgbWVtb2l6ZWRTdGF0ZTogY3VycmVudEhvb2subWVtb2l6ZWRTdGF0ZSxcbiAgICAgIGJhc2VTdGF0ZTogY3VycmVudEhvb2suYmFzZVN0YXRlLFxuICAgICAgYmFzZVF1ZXVlOiBjdXJyZW50SG9vay5iYXNlUXVldWUsXG4gICAgICBxdWV1ZTogY3VycmVudEhvb2sucXVldWUsXG4gICAgICBuZXh0OiBudWxsXG4gICAgfTtcblxuICAgIGlmICh3b3JrSW5Qcm9ncmVzc0hvb2sgPT09IG51bGwpIHtcbiAgICAgIC8vIFRoaXMgaXMgdGhlIGZpcnN0IGhvb2sgaW4gdGhlIGxpc3QuXG4gICAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLm1lbW9pemVkU3RhdGUgPSB3b3JrSW5Qcm9ncmVzc0hvb2sgPSBuZXdIb29rO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBBcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdC5cbiAgICAgIHdvcmtJblByb2dyZXNzSG9vayA9IHdvcmtJblByb2dyZXNzSG9vay5uZXh0ID0gbmV3SG9vaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gd29ya0luUHJvZ3Jlc3NIb29rO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVGdW5jdGlvbkNvbXBvbmVudFVwZGF0ZVF1ZXVlKCkge1xuICByZXR1cm4ge1xuICAgIGxhc3RFZmZlY3Q6IG51bGxcbiAgfTtcbn1cblxuZnVuY3Rpb24gYmFzaWNTdGF0ZVJlZHVjZXIoc3RhdGUsIGFjdGlvbikge1xuICAvLyAkRmxvd0ZpeE1lOiBGbG93IGRvZXNuJ3QgbGlrZSBtaXhlZCB0eXBlc1xuICByZXR1cm4gdHlwZW9mIGFjdGlvbiA9PT0gJ2Z1bmN0aW9uJyA/IGFjdGlvbihzdGF0ZSkgOiBhY3Rpb247XG59XG5cbmZ1bmN0aW9uIG1vdW50UmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgdmFyIGluaXRpYWxTdGF0ZTtcblxuICBpZiAoaW5pdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaW5pdGlhbFN0YXRlID0gaW5pdChpbml0aWFsQXJnKTtcbiAgfSBlbHNlIHtcbiAgICBpbml0aWFsU3RhdGUgPSBpbml0aWFsQXJnO1xuICB9XG5cbiAgaG9vay5tZW1vaXplZFN0YXRlID0gaG9vay5iYXNlU3RhdGUgPSBpbml0aWFsU3RhdGU7XG4gIHZhciBxdWV1ZSA9IGhvb2sucXVldWUgPSB7XG4gICAgcGVuZGluZzogbnVsbCxcbiAgICBkaXNwYXRjaDogbnVsbCxcbiAgICBsYXN0UmVuZGVyZWRSZWR1Y2VyOiByZWR1Y2VyLFxuICAgIGxhc3RSZW5kZXJlZFN0YXRlOiBpbml0aWFsU3RhdGVcbiAgfTtcbiAgdmFyIGRpc3BhdGNoID0gcXVldWUuZGlzcGF0Y2ggPSBkaXNwYXRjaEFjdGlvbi5iaW5kKG51bGwsIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEsIHF1ZXVlKTtcbiAgcmV0dXJuIFtob29rLm1lbW9pemVkU3RhdGUsIGRpc3BhdGNoXTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlUmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHZhciBxdWV1ZSA9IGhvb2sucXVldWU7XG5cbiAgaWYgKCEocXVldWUgIT09IG51bGwpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiU2hvdWxkIGhhdmUgYSBxdWV1ZS4gVGhpcyBpcyBsaWtlbHkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgfVxuICB9XG5cbiAgcXVldWUubGFzdFJlbmRlcmVkUmVkdWNlciA9IHJlZHVjZXI7XG4gIHZhciBjdXJyZW50ID0gY3VycmVudEhvb2s7IC8vIFRoZSBsYXN0IHJlYmFzZSB1cGRhdGUgdGhhdCBpcyBOT1QgcGFydCBvZiB0aGUgYmFzZSBzdGF0ZS5cblxuICB2YXIgYmFzZVF1ZXVlID0gY3VycmVudC5iYXNlUXVldWU7IC8vIFRoZSBsYXN0IHBlbmRpbmcgdXBkYXRlIHRoYXQgaGFzbid0IGJlZW4gcHJvY2Vzc2VkIHlldC5cblxuICB2YXIgcGVuZGluZ1F1ZXVlID0gcXVldWUucGVuZGluZztcblxuICBpZiAocGVuZGluZ1F1ZXVlICE9PSBudWxsKSB7XG4gICAgLy8gV2UgaGF2ZSBuZXcgdXBkYXRlcyB0aGF0IGhhdmVuJ3QgYmVlbiBwcm9jZXNzZWQgeWV0LlxuICAgIC8vIFdlJ2xsIGFkZCB0aGVtIHRvIHRoZSBiYXNlIHF1ZXVlLlxuICAgIGlmIChiYXNlUXVldWUgIT09IG51bGwpIHtcbiAgICAgIC8vIE1lcmdlIHRoZSBwZW5kaW5nIHF1ZXVlIGFuZCB0aGUgYmFzZSBxdWV1ZS5cbiAgICAgIHZhciBiYXNlRmlyc3QgPSBiYXNlUXVldWUubmV4dDtcbiAgICAgIHZhciBwZW5kaW5nRmlyc3QgPSBwZW5kaW5nUXVldWUubmV4dDtcbiAgICAgIGJhc2VRdWV1ZS5uZXh0ID0gcGVuZGluZ0ZpcnN0O1xuICAgICAgcGVuZGluZ1F1ZXVlLm5leHQgPSBiYXNlRmlyc3Q7XG4gICAgfVxuXG4gICAge1xuICAgICAgaWYgKGN1cnJlbnQuYmFzZVF1ZXVlICE9PSBiYXNlUXVldWUpIHtcbiAgICAgICAgLy8gSW50ZXJuYWwgaW52YXJpYW50IHRoYXQgc2hvdWxkIG5ldmVyIGhhcHBlbiwgYnV0IGZlYXNpYmx5IGNvdWxkIGluXG4gICAgICAgIC8vIHRoZSBmdXR1cmUgaWYgd2UgaW1wbGVtZW50IHJlc3VtaW5nLCBvciBzb21lIGZvcm0gb2YgdGhhdC5cbiAgICAgICAgZXJyb3IoJ0ludGVybmFsIGVycm9yOiBFeHBlY3RlZCB3b3JrLWluLXByb2dyZXNzIHF1ZXVlIHRvIGJlIGEgY2xvbmUuICcgKyAnVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjdXJyZW50LmJhc2VRdWV1ZSA9IGJhc2VRdWV1ZSA9IHBlbmRpbmdRdWV1ZTtcbiAgICBxdWV1ZS5wZW5kaW5nID0gbnVsbDtcbiAgfVxuXG4gIGlmIChiYXNlUXVldWUgIT09IG51bGwpIHtcbiAgICAvLyBXZSBoYXZlIGEgcXVldWUgdG8gcHJvY2Vzcy5cbiAgICB2YXIgZmlyc3QgPSBiYXNlUXVldWUubmV4dDtcbiAgICB2YXIgbmV3U3RhdGUgPSBjdXJyZW50LmJhc2VTdGF0ZTtcbiAgICB2YXIgbmV3QmFzZVN0YXRlID0gbnVsbDtcbiAgICB2YXIgbmV3QmFzZVF1ZXVlRmlyc3QgPSBudWxsO1xuICAgIHZhciBuZXdCYXNlUXVldWVMYXN0ID0gbnVsbDtcbiAgICB2YXIgdXBkYXRlID0gZmlyc3Q7XG5cbiAgICBkbyB7XG4gICAgICB2YXIgdXBkYXRlTGFuZSA9IHVwZGF0ZS5sYW5lO1xuXG4gICAgICBpZiAoIWlzU3Vic2V0T2ZMYW5lcyhyZW5kZXJMYW5lcywgdXBkYXRlTGFuZSkpIHtcbiAgICAgICAgLy8gUHJpb3JpdHkgaXMgaW5zdWZmaWNpZW50LiBTa2lwIHRoaXMgdXBkYXRlLiBJZiB0aGlzIGlzIHRoZSBmaXJzdFxuICAgICAgICAvLyBza2lwcGVkIHVwZGF0ZSwgdGhlIHByZXZpb3VzIHVwZGF0ZS9zdGF0ZSBpcyB0aGUgbmV3IGJhc2VcbiAgICAgICAgLy8gdXBkYXRlL3N0YXRlLlxuICAgICAgICB2YXIgY2xvbmUgPSB7XG4gICAgICAgICAgbGFuZTogdXBkYXRlTGFuZSxcbiAgICAgICAgICBhY3Rpb246IHVwZGF0ZS5hY3Rpb24sXG4gICAgICAgICAgZWFnZXJSZWR1Y2VyOiB1cGRhdGUuZWFnZXJSZWR1Y2VyLFxuICAgICAgICAgIGVhZ2VyU3RhdGU6IHVwZGF0ZS5lYWdlclN0YXRlLFxuICAgICAgICAgIG5leHQ6IG51bGxcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAobmV3QmFzZVF1ZXVlTGFzdCA9PT0gbnVsbCkge1xuICAgICAgICAgIG5ld0Jhc2VRdWV1ZUZpcnN0ID0gbmV3QmFzZVF1ZXVlTGFzdCA9IGNsb25lO1xuICAgICAgICAgIG5ld0Jhc2VTdGF0ZSA9IG5ld1N0YXRlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld0Jhc2VRdWV1ZUxhc3QgPSBuZXdCYXNlUXVldWVMYXN0Lm5leHQgPSBjbG9uZTtcbiAgICAgICAgfSAvLyBVcGRhdGUgdGhlIHJlbWFpbmluZyBwcmlvcml0eSBpbiB0aGUgcXVldWUuXG4gICAgICAgIC8vIFRPRE86IERvbid0IG5lZWQgdG8gYWNjdW11bGF0ZSB0aGlzLiBJbnN0ZWFkLCB3ZSBjYW4gcmVtb3ZlXG4gICAgICAgIC8vIHJlbmRlckxhbmVzIGZyb20gdGhlIG9yaWdpbmFsIGxhbmVzLlxuXG5cbiAgICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5sYW5lcyA9IG1lcmdlTGFuZXMoY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5sYW5lcywgdXBkYXRlTGFuZSk7XG4gICAgICAgIG1hcmtTa2lwcGVkVXBkYXRlTGFuZXModXBkYXRlTGFuZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUaGlzIHVwZGF0ZSBkb2VzIGhhdmUgc3VmZmljaWVudCBwcmlvcml0eS5cbiAgICAgICAgaWYgKG5ld0Jhc2VRdWV1ZUxhc3QgIT09IG51bGwpIHtcbiAgICAgICAgICB2YXIgX2Nsb25lID0ge1xuICAgICAgICAgICAgLy8gVGhpcyB1cGRhdGUgaXMgZ29pbmcgdG8gYmUgY29tbWl0dGVkIHNvIHdlIG5ldmVyIHdhbnQgdW5jb21taXRcbiAgICAgICAgICAgIC8vIGl0LiBVc2luZyBOb0xhbmUgd29ya3MgYmVjYXVzZSAwIGlzIGEgc3Vic2V0IG9mIGFsbCBiaXRtYXNrcywgc29cbiAgICAgICAgICAgIC8vIHRoaXMgd2lsbCBuZXZlciBiZSBza2lwcGVkIGJ5IHRoZSBjaGVjayBhYm92ZS5cbiAgICAgICAgICAgIGxhbmU6IE5vTGFuZSxcbiAgICAgICAgICAgIGFjdGlvbjogdXBkYXRlLmFjdGlvbixcbiAgICAgICAgICAgIGVhZ2VyUmVkdWNlcjogdXBkYXRlLmVhZ2VyUmVkdWNlcixcbiAgICAgICAgICAgIGVhZ2VyU3RhdGU6IHVwZGF0ZS5lYWdlclN0YXRlLFxuICAgICAgICAgICAgbmV4dDogbnVsbFxuICAgICAgICAgIH07XG4gICAgICAgICAgbmV3QmFzZVF1ZXVlTGFzdCA9IG5ld0Jhc2VRdWV1ZUxhc3QubmV4dCA9IF9jbG9uZTtcbiAgICAgICAgfSAvLyBQcm9jZXNzIHRoaXMgdXBkYXRlLlxuXG5cbiAgICAgICAgaWYgKHVwZGF0ZS5lYWdlclJlZHVjZXIgPT09IHJlZHVjZXIpIHtcbiAgICAgICAgICAvLyBJZiB0aGlzIHVwZGF0ZSB3YXMgcHJvY2Vzc2VkIGVhZ2VybHksIGFuZCBpdHMgcmVkdWNlciBtYXRjaGVzIHRoZVxuICAgICAgICAgIC8vIGN1cnJlbnQgcmVkdWNlciwgd2UgY2FuIHVzZSB0aGUgZWFnZXJseSBjb21wdXRlZCBzdGF0ZS5cbiAgICAgICAgICBuZXdTdGF0ZSA9IHVwZGF0ZS5lYWdlclN0YXRlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBhY3Rpb24gPSB1cGRhdGUuYWN0aW9uO1xuICAgICAgICAgIG5ld1N0YXRlID0gcmVkdWNlcihuZXdTdGF0ZSwgYWN0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB1cGRhdGUgPSB1cGRhdGUubmV4dDtcbiAgICB9IHdoaWxlICh1cGRhdGUgIT09IG51bGwgJiYgdXBkYXRlICE9PSBmaXJzdCk7XG5cbiAgICBpZiAobmV3QmFzZVF1ZXVlTGFzdCA9PT0gbnVsbCkge1xuICAgICAgbmV3QmFzZVN0YXRlID0gbmV3U3RhdGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0Jhc2VRdWV1ZUxhc3QubmV4dCA9IG5ld0Jhc2VRdWV1ZUZpcnN0O1xuICAgIH0gLy8gTWFyayB0aGF0IHRoZSBmaWJlciBwZXJmb3JtZWQgd29yaywgYnV0IG9ubHkgaWYgdGhlIG5ldyBzdGF0ZSBpc1xuICAgIC8vIGRpZmZlcmVudCBmcm9tIHRoZSBjdXJyZW50IHN0YXRlLlxuXG5cbiAgICBpZiAoIW9iamVjdElzKG5ld1N0YXRlLCBob29rLm1lbW9pemVkU3RhdGUpKSB7XG4gICAgICBtYXJrV29ya0luUHJvZ3Jlc3NSZWNlaXZlZFVwZGF0ZSgpO1xuICAgIH1cblxuICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IG5ld1N0YXRlO1xuICAgIGhvb2suYmFzZVN0YXRlID0gbmV3QmFzZVN0YXRlO1xuICAgIGhvb2suYmFzZVF1ZXVlID0gbmV3QmFzZVF1ZXVlTGFzdDtcbiAgICBxdWV1ZS5sYXN0UmVuZGVyZWRTdGF0ZSA9IG5ld1N0YXRlO1xuICB9XG5cbiAgdmFyIGRpc3BhdGNoID0gcXVldWUuZGlzcGF0Y2g7XG4gIHJldHVybiBbaG9vay5tZW1vaXplZFN0YXRlLCBkaXNwYXRjaF07XG59XG5cbmZ1bmN0aW9uIHJlcmVuZGVyUmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHZhciBxdWV1ZSA9IGhvb2sucXVldWU7XG5cbiAgaWYgKCEocXVldWUgIT09IG51bGwpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiU2hvdWxkIGhhdmUgYSBxdWV1ZS4gVGhpcyBpcyBsaWtlbHkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgfVxuICB9XG5cbiAgcXVldWUubGFzdFJlbmRlcmVkUmVkdWNlciA9IHJlZHVjZXI7IC8vIFRoaXMgaXMgYSByZS1yZW5kZXIuIEFwcGx5IHRoZSBuZXcgcmVuZGVyIHBoYXNlIHVwZGF0ZXMgdG8gdGhlIHByZXZpb3VzXG4gIC8vIHdvcmstaW4tcHJvZ3Jlc3MgaG9vay5cblxuICB2YXIgZGlzcGF0Y2ggPSBxdWV1ZS5kaXNwYXRjaDtcbiAgdmFyIGxhc3RSZW5kZXJQaGFzZVVwZGF0ZSA9IHF1ZXVlLnBlbmRpbmc7XG4gIHZhciBuZXdTdGF0ZSA9IGhvb2subWVtb2l6ZWRTdGF0ZTtcblxuICBpZiAobGFzdFJlbmRlclBoYXNlVXBkYXRlICE9PSBudWxsKSB7XG4gICAgLy8gVGhlIHF1ZXVlIGRvZXNuJ3QgcGVyc2lzdCBwYXN0IHRoaXMgcmVuZGVyIHBhc3MuXG4gICAgcXVldWUucGVuZGluZyA9IG51bGw7XG4gICAgdmFyIGZpcnN0UmVuZGVyUGhhc2VVcGRhdGUgPSBsYXN0UmVuZGVyUGhhc2VVcGRhdGUubmV4dDtcbiAgICB2YXIgdXBkYXRlID0gZmlyc3RSZW5kZXJQaGFzZVVwZGF0ZTtcblxuICAgIGRvIHtcbiAgICAgIC8vIFByb2Nlc3MgdGhpcyByZW5kZXIgcGhhc2UgdXBkYXRlLiBXZSBkb24ndCBoYXZlIHRvIGNoZWNrIHRoZVxuICAgICAgLy8gcHJpb3JpdHkgYmVjYXVzZSBpdCB3aWxsIGFsd2F5cyBiZSB0aGUgc2FtZSBhcyB0aGUgY3VycmVudFxuICAgICAgLy8gcmVuZGVyJ3MuXG4gICAgICB2YXIgYWN0aW9uID0gdXBkYXRlLmFjdGlvbjtcbiAgICAgIG5ld1N0YXRlID0gcmVkdWNlcihuZXdTdGF0ZSwgYWN0aW9uKTtcbiAgICAgIHVwZGF0ZSA9IHVwZGF0ZS5uZXh0O1xuICAgIH0gd2hpbGUgKHVwZGF0ZSAhPT0gZmlyc3RSZW5kZXJQaGFzZVVwZGF0ZSk7IC8vIE1hcmsgdGhhdCB0aGUgZmliZXIgcGVyZm9ybWVkIHdvcmssIGJ1dCBvbmx5IGlmIHRoZSBuZXcgc3RhdGUgaXNcbiAgICAvLyBkaWZmZXJlbnQgZnJvbSB0aGUgY3VycmVudCBzdGF0ZS5cblxuXG4gICAgaWYgKCFvYmplY3RJcyhuZXdTdGF0ZSwgaG9vay5tZW1vaXplZFN0YXRlKSkge1xuICAgICAgbWFya1dvcmtJblByb2dyZXNzUmVjZWl2ZWRVcGRhdGUoKTtcbiAgICB9XG5cbiAgICBob29rLm1lbW9pemVkU3RhdGUgPSBuZXdTdGF0ZTsgLy8gRG9uJ3QgcGVyc2lzdCB0aGUgc3RhdGUgYWNjdW11bGF0ZWQgZnJvbSB0aGUgcmVuZGVyIHBoYXNlIHVwZGF0ZXMgdG9cbiAgICAvLyB0aGUgYmFzZSBzdGF0ZSB1bmxlc3MgdGhlIHF1ZXVlIGlzIGVtcHR5LlxuICAgIC8vIFRPRE86IE5vdCBzdXJlIGlmIHRoaXMgaXMgdGhlIGRlc2lyZWQgc2VtYW50aWNzLCBidXQgaXQncyB3aGF0IHdlXG4gICAgLy8gZG8gZm9yIGdEU0ZQLiBJIGNhbid0IHJlbWVtYmVyIHdoeS5cblxuICAgIGlmIChob29rLmJhc2VRdWV1ZSA9PT0gbnVsbCkge1xuICAgICAgaG9vay5iYXNlU3RhdGUgPSBuZXdTdGF0ZTtcbiAgICB9XG5cbiAgICBxdWV1ZS5sYXN0UmVuZGVyZWRTdGF0ZSA9IG5ld1N0YXRlO1xuICB9XG5cbiAgcmV0dXJuIFtuZXdTdGF0ZSwgZGlzcGF0Y2hdO1xufVxuXG5mdW5jdGlvbiByZWFkRnJvbVVuc3ViY3JpYmVkTXV0YWJsZVNvdXJjZShyb290LCBzb3VyY2UsIGdldFNuYXBzaG90KSB7XG4gIHtcbiAgICB3YXJuQWJvdXRNdWx0aXBsZVJlbmRlcmVyc0RFVihzb3VyY2UpO1xuICB9XG5cbiAgdmFyIGdldFZlcnNpb24gPSBzb3VyY2UuX2dldFZlcnNpb247XG4gIHZhciB2ZXJzaW9uID0gZ2V0VmVyc2lvbihzb3VyY2UuX3NvdXJjZSk7IC8vIElzIGl0IHNhZmUgZm9yIHRoaXMgY29tcG9uZW50IHRvIHJlYWQgZnJvbSB0aGlzIHNvdXJjZSBkdXJpbmcgdGhlIGN1cnJlbnQgcmVuZGVyP1xuXG4gIHZhciBpc1NhZmVUb1JlYWRGcm9tU291cmNlID0gZmFsc2U7IC8vIENoZWNrIHRoZSB2ZXJzaW9uIGZpcnN0LlxuICAvLyBJZiB0aGlzIHJlbmRlciBoYXMgYWxyZWFkeSBiZWVuIHN0YXJ0ZWQgd2l0aCBhIHNwZWNpZmljIHZlcnNpb24sXG4gIC8vIHdlIGNhbiB1c2UgaXQgYWxvbmUgdG8gZGV0ZXJtaW5lIGlmIHdlIGNhbiBzYWZlbHkgcmVhZCBmcm9tIHRoZSBzb3VyY2UuXG5cbiAgdmFyIGN1cnJlbnRSZW5kZXJWZXJzaW9uID0gZ2V0V29ya0luUHJvZ3Jlc3NWZXJzaW9uKHNvdXJjZSk7XG5cbiAgaWYgKGN1cnJlbnRSZW5kZXJWZXJzaW9uICE9PSBudWxsKSB7XG4gICAgLy8gSXQncyBzYWZlIHRvIHJlYWQgaWYgdGhlIHN0b3JlIGhhc24ndCBiZWVuIG11dGF0ZWQgc2luY2UgdGhlIGxhc3QgdGltZVxuICAgIC8vIHdlIHJlYWQgc29tZXRoaW5nLlxuICAgIGlzU2FmZVRvUmVhZEZyb21Tb3VyY2UgPSBjdXJyZW50UmVuZGVyVmVyc2lvbiA9PT0gdmVyc2lvbjtcbiAgfSBlbHNlIHtcbiAgICAvLyBJZiB0aGVyZSdzIG5vIHZlcnNpb24sIHRoZW4gdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB3ZSd2ZSByZWFkIGZyb20gdGhlXG4gICAgLy8gc291cmNlIGR1cmluZyB0aGUgY3VycmVudCByZW5kZXIgcGFzcywgc28gd2UgbmVlZCB0byBkbyBhIGJpdCBtb3JlIHdvcmsuXG4gICAgLy8gV2hhdCB3ZSBuZWVkIHRvIGRldGVybWluZSBpcyBpZiB0aGVyZSBhcmUgYW55IGhvb2tzIHRoYXQgYWxyZWFkeVxuICAgIC8vIHN1YnNjcmliZWQgdG8gdGhlIHNvdXJjZSwgYW5kIGlmIHNvLCB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgcGVuZGluZ1xuICAgIC8vIG11dGF0aW9ucyB0aGF0IGhhdmVuJ3QgYmVlbiBzeW5jaHJvbml6ZWQgeWV0LlxuICAgIC8vXG4gICAgLy8gSWYgdGhlcmUgYXJlIG5vIHBlbmRpbmcgbXV0YXRpb25zLCB0aGVuIGByb290Lm11dGFibGVSZWFkTGFuZXNgIHdpbGwgYmVcbiAgICAvLyBlbXB0eSwgYW5kIHdlIGtub3cgd2UgY2FuIHNhZmVseSByZWFkLlxuICAgIC8vXG4gICAgLy8gSWYgdGhlcmUgKmFyZSogcGVuZGluZyBtdXRhdGlvbnMsIHdlIG1heSBzdGlsbCBiZSBhYmxlIHRvIHNhZmVseSByZWFkXG4gICAgLy8gaWYgdGhlIGN1cnJlbnRseSByZW5kZXJpbmcgbGFuZXMgYXJlIGluY2x1c2l2ZSBvZiB0aGUgcGVuZGluZyBtdXRhdGlvblxuICAgIC8vIGxhbmVzLCBzaW5jZSB0aGF0IGd1YXJhbnRlZXMgdGhhdCB0aGUgdmFsdWUgd2UncmUgYWJvdXQgdG8gcmVhZCBmcm9tXG4gICAgLy8gdGhlIHNvdXJjZSBpcyBjb25zaXN0ZW50IHdpdGggdGhlIHZhbHVlcyB0aGF0IHdlIHJlYWQgZHVyaW5nIHRoZSBtb3N0XG4gICAgLy8gcmVjZW50IG11dGF0aW9uLlxuICAgIGlzU2FmZVRvUmVhZEZyb21Tb3VyY2UgPSBpc1N1YnNldE9mTGFuZXMocmVuZGVyTGFuZXMsIHJvb3QubXV0YWJsZVJlYWRMYW5lcyk7XG5cbiAgICBpZiAoaXNTYWZlVG9SZWFkRnJvbVNvdXJjZSkge1xuICAgICAgLy8gSWYgaXQncyBzYWZlIHRvIHJlYWQgZnJvbSB0aGlzIHNvdXJjZSBkdXJpbmcgdGhlIGN1cnJlbnQgcmVuZGVyLFxuICAgICAgLy8gc3RvcmUgdGhlIHZlcnNpb24gaW4gY2FzZSBvdGhlciBjb21wb25lbnRzIHJlYWQgZnJvbSBpdC5cbiAgICAgIC8vIEEgY2hhbmdlZCB2ZXJzaW9uIG51bWJlciB3aWxsIGxldCB0aG9zZSBjb21wb25lbnRzIGtub3cgdG8gdGhyb3cgYW5kIHJlc3RhcnQgdGhlIHJlbmRlci5cbiAgICAgIHNldFdvcmtJblByb2dyZXNzVmVyc2lvbihzb3VyY2UsIHZlcnNpb24pO1xuICAgIH1cbiAgfVxuXG4gIGlmIChpc1NhZmVUb1JlYWRGcm9tU291cmNlKSB7XG4gICAgdmFyIHNuYXBzaG90ID0gZ2V0U25hcHNob3Qoc291cmNlLl9zb3VyY2UpO1xuXG4gICAge1xuICAgICAgaWYgKHR5cGVvZiBzbmFwc2hvdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBlcnJvcignTXV0YWJsZSBzb3VyY2Ugc2hvdWxkIG5vdCByZXR1cm4gYSBmdW5jdGlvbiBhcyB0aGUgc25hcHNob3QgdmFsdWUuICcgKyAnRnVuY3Rpb25zIG1heSBjbG9zZSBvdmVyIG11dGFibGUgdmFsdWVzIGFuZCBjYXVzZSB0ZWFyaW5nLicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzbmFwc2hvdDtcbiAgfSBlbHNlIHtcbiAgICAvLyBUaGlzIGhhbmRsZXMgdGhlIHNwZWNpYWwgY2FzZSBvZiBhIG11dGFibGUgc291cmNlIGJlaW5nIHNoYXJlZCBiZXR3ZWVuIHJlbmRlcmVycy5cbiAgICAvLyBJbiB0aGF0IGNhc2UsIGlmIHRoZSBzb3VyY2UgaXMgbXV0YXRlZCBiZXR3ZWVuIHRoZSBmaXJzdCBhbmQgc2Vjb25kIHJlbmRlcmVyLFxuICAgIC8vIFRoZSBzZWNvbmQgcmVuZGVyZXIgZG9uJ3Qga25vdyB0aGF0IGl0IG5lZWRzIHRvIHJlc2V0IHRoZSBXSVAgdmVyc2lvbiBkdXJpbmcgdW53aW5kLFxuICAgIC8vIChiZWNhdXNlIHRoZSBob29rIG9ubHkgbWFya3Mgc291cmNlcyBhcyBkaXJ0eSBpZiBpdCdzIHdyaXR0ZW4gdG8gdGhlaXIgV0lQIHZlcnNpb24pLlxuICAgIC8vIFRoYXQgd291bGQgY2F1c2UgdGhpcyB0ZWFyIGNoZWNrIHRvIHRocm93IGFnYWluIGFuZCBldmVudHVhbGx5IGJlIHZpc2libGUgdG8gdGhlIHVzZXIuXG4gICAgLy8gV2UgY2FuIGF2b2lkIHRoaXMgaW5maW5pdGUgbG9vcCBieSBleHBsaWNpdGx5IG1hcmtpbmcgdGhlIHNvdXJjZSBhcyBkaXJ0eS5cbiAgICAvL1xuICAgIC8vIFRoaXMgY2FuIGxlYWQgdG8gdGVhcmluZyBpbiB0aGUgZmlyc3QgcmVuZGVyZXIgd2hlbiBpdCByZXN1bWVzLFxuICAgIC8vIGJ1dCB0aGVyZSdzIG5vdGhpbmcgd2UgY2FuIGRvIGFib3V0IHRoYXQgKHNob3J0IG9mIHRocm93aW5nIGhlcmUgYW5kIHJlZnVzaW5nIHRvIGNvbnRpbnVlIHRoZSByZW5kZXIpLlxuICAgIG1hcmtTb3VyY2VBc0RpcnR5KHNvdXJjZSk7XG5cbiAgICB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIkNhbm5vdCByZWFkIGZyb20gbXV0YWJsZSBzb3VyY2UgZHVyaW5nIHRoZSBjdXJyZW50IHJlbmRlciB3aXRob3V0IHRlYXJpbmcuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHVzZU11dGFibGVTb3VyY2UoaG9vaywgc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKSB7XG4gIHZhciByb290ID0gZ2V0V29ya0luUHJvZ3Jlc3NSb290KCk7XG5cbiAgaWYgKCEocm9vdCAhPT0gbnVsbCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJFeHBlY3RlZCBhIHdvcmstaW4tcHJvZ3Jlc3Mgcm9vdC4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICB9XG4gIH1cblxuICB2YXIgZ2V0VmVyc2lvbiA9IHNvdXJjZS5fZ2V0VmVyc2lvbjtcbiAgdmFyIHZlcnNpb24gPSBnZXRWZXJzaW9uKHNvdXJjZS5fc291cmNlKTtcbiAgdmFyIGRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdFxuXG4gIHZhciBfZGlzcGF0Y2hlciR1c2VTdGF0ZSA9IGRpc3BhdGNoZXIudXNlU3RhdGUoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiByZWFkRnJvbVVuc3ViY3JpYmVkTXV0YWJsZVNvdXJjZShyb290LCBzb3VyY2UsIGdldFNuYXBzaG90KTtcbiAgfSksXG4gICAgICBjdXJyZW50U25hcHNob3QgPSBfZGlzcGF0Y2hlciR1c2VTdGF0ZVswXSxcbiAgICAgIHNldFNuYXBzaG90ID0gX2Rpc3BhdGNoZXIkdXNlU3RhdGVbMV07XG5cbiAgdmFyIHNuYXBzaG90ID0gY3VycmVudFNuYXBzaG90OyAvLyBHcmFiIGEgaGFuZGxlIHRvIHRoZSBzdGF0ZSBob29rIGFzIHdlbGwuXG4gIC8vIFdlIHVzZSBpdCB0byBjbGVhciB0aGUgcGVuZGluZyB1cGRhdGUgcXVldWUgaWYgd2UgaGF2ZSBhIG5ldyBzb3VyY2UuXG5cbiAgdmFyIHN0YXRlSG9vayA9IHdvcmtJblByb2dyZXNzSG9vaztcbiAgdmFyIG1lbW9pemVkU3RhdGUgPSBob29rLm1lbW9pemVkU3RhdGU7XG4gIHZhciByZWZzID0gbWVtb2l6ZWRTdGF0ZS5yZWZzO1xuICB2YXIgcHJldkdldFNuYXBzaG90ID0gcmVmcy5nZXRTbmFwc2hvdDtcbiAgdmFyIHByZXZTb3VyY2UgPSBtZW1vaXplZFN0YXRlLnNvdXJjZTtcbiAgdmFyIHByZXZTdWJzY3JpYmUgPSBtZW1vaXplZFN0YXRlLnN1YnNjcmliZTtcbiAgdmFyIGZpYmVyID0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMTtcbiAgaG9vay5tZW1vaXplZFN0YXRlID0ge1xuICAgIHJlZnM6IHJlZnMsXG4gICAgc291cmNlOiBzb3VyY2UsXG4gICAgc3Vic2NyaWJlOiBzdWJzY3JpYmVcbiAgfTsgLy8gU3luYyB0aGUgdmFsdWVzIG5lZWRlZCBieSBvdXIgc3Vic2NyaXB0aW9uIGhhbmRsZXIgYWZ0ZXIgZWFjaCBjb21taXQuXG5cbiAgZGlzcGF0Y2hlci51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHJlZnMuZ2V0U25hcHNob3QgPSBnZXRTbmFwc2hvdDsgLy8gTm9ybWFsbHkgdGhlIGRpc3BhdGNoIGZ1bmN0aW9uIGZvciBhIHN0YXRlIGhvb2sgbmV2ZXIgY2hhbmdlcyxcbiAgICAvLyBidXQgdGhpcyBob29rIHJlY3JlYXRlcyB0aGUgcXVldWUgaW4gY2VydGFpbiBjYXNlcyAgdG8gYXZvaWQgdXBkYXRlcyBmcm9tIHN0YWxlIHNvdXJjZXMuXG4gICAgLy8gaGFuZGxlQ2hhbmdlKCkgYmVsb3cgbmVlZHMgdG8gcmVmZXJlbmNlIHRoZSBkaXNwYXRjaCBmdW5jdGlvbiB3aXRob3V0IHJlLXN1YnNjcmliaW5nLFxuICAgIC8vIHNvIHdlIHVzZSBhIHJlZiB0byBlbnN1cmUgdGhhdCBpdCBhbHdheXMgaGFzIHRoZSBsYXRlc3QgdmVyc2lvbi5cblxuICAgIHJlZnMuc2V0U25hcHNob3QgPSBzZXRTbmFwc2hvdDsgLy8gQ2hlY2sgZm9yIGEgcG9zc2libGUgY2hhbmdlIGJldHdlZW4gd2hlbiB3ZSBsYXN0IHJlbmRlcmVkIG5vdy5cblxuICAgIHZhciBtYXliZU5ld1ZlcnNpb24gPSBnZXRWZXJzaW9uKHNvdXJjZS5fc291cmNlKTtcblxuICAgIGlmICghb2JqZWN0SXModmVyc2lvbiwgbWF5YmVOZXdWZXJzaW9uKSkge1xuICAgICAgdmFyIG1heWJlTmV3U25hcHNob3QgPSBnZXRTbmFwc2hvdChzb3VyY2UuX3NvdXJjZSk7XG5cbiAgICAgIHtcbiAgICAgICAgaWYgKHR5cGVvZiBtYXliZU5ld1NuYXBzaG90ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgZXJyb3IoJ011dGFibGUgc291cmNlIHNob3VsZCBub3QgcmV0dXJuIGEgZnVuY3Rpb24gYXMgdGhlIHNuYXBzaG90IHZhbHVlLiAnICsgJ0Z1bmN0aW9ucyBtYXkgY2xvc2Ugb3ZlciBtdXRhYmxlIHZhbHVlcyBhbmQgY2F1c2UgdGVhcmluZy4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIW9iamVjdElzKHNuYXBzaG90LCBtYXliZU5ld1NuYXBzaG90KSkge1xuICAgICAgICBzZXRTbmFwc2hvdChtYXliZU5ld1NuYXBzaG90KTtcbiAgICAgICAgdmFyIGxhbmUgPSByZXF1ZXN0VXBkYXRlTGFuZShmaWJlcik7XG4gICAgICAgIG1hcmtSb290TXV0YWJsZVJlYWQocm9vdCwgbGFuZSk7XG4gICAgICB9IC8vIElmIHRoZSBzb3VyY2UgbXV0YXRlZCBiZXR3ZWVuIHJlbmRlciBhbmQgbm93LFxuICAgICAgLy8gdGhlcmUgbWF5IGJlIHN0YXRlIHVwZGF0ZXMgYWxyZWFkeSBzY2hlZHVsZWQgZnJvbSB0aGUgb2xkIHNvdXJjZS5cbiAgICAgIC8vIEVudGFuZ2xlIHRoZSB1cGRhdGVzIHNvIHRoYXQgdGhleSByZW5kZXIgaW4gdGhlIHNhbWUgYmF0Y2guXG5cblxuICAgICAgbWFya1Jvb3RFbnRhbmdsZWQocm9vdCwgcm9vdC5tdXRhYmxlUmVhZExhbmVzKTtcbiAgICB9XG4gIH0sIFtnZXRTbmFwc2hvdCwgc291cmNlLCBzdWJzY3JpYmVdKTsgLy8gSWYgd2UgZ290IGEgbmV3IHNvdXJjZSBvciBzdWJzY3JpYmUgZnVuY3Rpb24sIHJlLXN1YnNjcmliZSBpbiBhIHBhc3NpdmUgZWZmZWN0LlxuXG4gIGRpc3BhdGNoZXIudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaGFuZGxlQ2hhbmdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGxhdGVzdEdldFNuYXBzaG90ID0gcmVmcy5nZXRTbmFwc2hvdDtcbiAgICAgIHZhciBsYXRlc3RTZXRTbmFwc2hvdCA9IHJlZnMuc2V0U25hcHNob3Q7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGxhdGVzdFNldFNuYXBzaG90KGxhdGVzdEdldFNuYXBzaG90KHNvdXJjZS5fc291cmNlKSk7IC8vIFJlY29yZCBhIHBlbmRpbmcgbXV0YWJsZSBzb3VyY2UgdXBkYXRlIHdpdGggdGhlIHNhbWUgZXhwaXJhdGlvbiB0aW1lLlxuXG4gICAgICAgIHZhciBsYW5lID0gcmVxdWVzdFVwZGF0ZUxhbmUoZmliZXIpO1xuICAgICAgICBtYXJrUm9vdE11dGFibGVSZWFkKHJvb3QsIGxhbmUpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gQSBzZWxlY3RvciBtaWdodCB0aHJvdyBhZnRlciBhIHNvdXJjZSBtdXRhdGlvbi5cbiAgICAgICAgLy8gZS5nLiBpdCBtaWdodCB0cnkgdG8gcmVhZCBmcm9tIGEgcGFydCBvZiB0aGUgc3RvcmUgdGhhdCBubyBsb25nZXIgZXhpc3RzLlxuICAgICAgICAvLyBJbiB0aGlzIGNhc2Ugd2Ugc2hvdWxkIHN0aWxsIHNjaGVkdWxlIGFuIHVwZGF0ZSB3aXRoIFJlYWN0LlxuICAgICAgICAvLyBXb3JzdCBjYXNlIHRoZSBzZWxlY3RvciB3aWxsIHRocm93IGFnYWluIGFuZCB0aGVuIGFuIGVycm9yIGJvdW5kYXJ5IHdpbGwgaGFuZGxlIGl0LlxuICAgICAgICBsYXRlc3RTZXRTbmFwc2hvdChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgdW5zdWJzY3JpYmUgPSBzdWJzY3JpYmUoc291cmNlLl9zb3VyY2UsIGhhbmRsZUNoYW5nZSk7XG5cbiAgICB7XG4gICAgICBpZiAodHlwZW9mIHVuc3Vic2NyaWJlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGVycm9yKCdNdXRhYmxlIHNvdXJjZSBzdWJzY3JpYmUgZnVuY3Rpb24gbXVzdCByZXR1cm4gYW4gdW5zdWJzY3JpYmUgZnVuY3Rpb24uJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuc3Vic2NyaWJlO1xuICB9LCBbc291cmNlLCBzdWJzY3JpYmVdKTsgLy8gSWYgYW55IG9mIHRoZSBpbnB1dHMgdG8gdXNlTXV0YWJsZVNvdXJjZSBjaGFuZ2UsIHJlYWRpbmcgaXMgcG90ZW50aWFsbHkgdW5zYWZlLlxuICAvL1xuICAvLyBJZiBlaXRoZXIgdGhlIHNvdXJjZSBvciB0aGUgc3Vic2NyaXB0aW9uIGhhdmUgY2hhbmdlZCB3ZSBjYW4ndCBjYW4ndCB0cnVzdCB0aGUgdXBkYXRlIHF1ZXVlLlxuICAvLyBNYXliZSB0aGUgc291cmNlIGNoYW5nZWQgaW4gYSB3YXkgdGhhdCB0aGUgb2xkIHN1YnNjcmlwdGlvbiBpZ25vcmVkIGJ1dCB0aGUgbmV3IG9uZSBkZXBlbmRzIG9uLlxuICAvL1xuICAvLyBJZiB0aGUgZ2V0U25hcHNob3QgZnVuY3Rpb24gY2hhbmdlZCwgd2UgYWxzbyBzaG91bGRuJ3QgcmVseSBvbiB0aGUgdXBkYXRlIHF1ZXVlLlxuICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlIHVuZGVybHlpbmcgc291cmNlIHdhcyBtdXRhdGVkIGJldHdlZW4gdGhlIHdoZW4gdGhlIGxhc3QgXCJjaGFuZ2VcIiBldmVudCBmaXJlZCxcbiAgLy8gYW5kIHdoZW4gdGhlIGN1cnJlbnQgcmVuZGVyICh3aXRoIHRoZSBuZXcgZ2V0U25hcHNob3QgZnVuY3Rpb24pIGlzIHByb2Nlc3NlZC5cbiAgLy9cbiAgLy8gSW4gYm90aCBjYXNlcywgd2UgbmVlZCB0byB0aHJvdyBhd2F5IHBlbmRpbmcgdXBkYXRlcyAoc2luY2UgdGhleSBhcmUgbm8gbG9uZ2VyIHJlbGV2YW50KVxuICAvLyBhbmQgdHJlYXQgcmVhZGluZyBmcm9tIHRoZSBzb3VyY2UgYXMgd2UgZG8gaW4gdGhlIG1vdW50IGNhc2UuXG5cbiAgaWYgKCFvYmplY3RJcyhwcmV2R2V0U25hcHNob3QsIGdldFNuYXBzaG90KSB8fCAhb2JqZWN0SXMocHJldlNvdXJjZSwgc291cmNlKSB8fCAhb2JqZWN0SXMocHJldlN1YnNjcmliZSwgc3Vic2NyaWJlKSkge1xuICAgIC8vIENyZWF0ZSBhIG5ldyBxdWV1ZSBhbmQgc2V0U3RhdGUgbWV0aG9kLFxuICAgIC8vIFNvIGlmIHRoZXJlIGFyZSBpbnRlcmxlYXZlZCB1cGRhdGVzLCB0aGV5IGdldCBwdXNoZWQgdG8gdGhlIG9sZGVyIHF1ZXVlLlxuICAgIC8vIFdoZW4gdGhpcyBiZWNvbWVzIGN1cnJlbnQsIHRoZSBwcmV2aW91cyBxdWV1ZSBhbmQgZGlzcGF0Y2ggbWV0aG9kIHdpbGwgYmUgZGlzY2FyZGVkLFxuICAgIC8vIGluY2x1ZGluZyBhbnkgaW50ZXJsZWF2aW5nIHVwZGF0ZXMgdGhhdCBvY2N1ci5cbiAgICB2YXIgbmV3UXVldWUgPSB7XG4gICAgICBwZW5kaW5nOiBudWxsLFxuICAgICAgZGlzcGF0Y2g6IG51bGwsXG4gICAgICBsYXN0UmVuZGVyZWRSZWR1Y2VyOiBiYXNpY1N0YXRlUmVkdWNlcixcbiAgICAgIGxhc3RSZW5kZXJlZFN0YXRlOiBzbmFwc2hvdFxuICAgIH07XG4gICAgbmV3UXVldWUuZGlzcGF0Y2ggPSBzZXRTbmFwc2hvdCA9IGRpc3BhdGNoQWN0aW9uLmJpbmQobnVsbCwgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSwgbmV3UXVldWUpO1xuICAgIHN0YXRlSG9vay5xdWV1ZSA9IG5ld1F1ZXVlO1xuICAgIHN0YXRlSG9vay5iYXNlUXVldWUgPSBudWxsO1xuICAgIHNuYXBzaG90ID0gcmVhZEZyb21VbnN1YmNyaWJlZE11dGFibGVTb3VyY2Uocm9vdCwgc291cmNlLCBnZXRTbmFwc2hvdCk7XG4gICAgc3RhdGVIb29rLm1lbW9pemVkU3RhdGUgPSBzdGF0ZUhvb2suYmFzZVN0YXRlID0gc25hcHNob3Q7XG4gIH1cblxuICByZXR1cm4gc25hcHNob3Q7XG59XG5cbmZ1bmN0aW9uIG1vdW50TXV0YWJsZVNvdXJjZShzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpIHtcbiAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICBob29rLm1lbW9pemVkU3RhdGUgPSB7XG4gICAgcmVmczoge1xuICAgICAgZ2V0U25hcHNob3Q6IGdldFNuYXBzaG90LFxuICAgICAgc2V0U25hcHNob3Q6IG51bGxcbiAgICB9LFxuICAgIHNvdXJjZTogc291cmNlLFxuICAgIHN1YnNjcmliZTogc3Vic2NyaWJlXG4gIH07XG4gIHJldHVybiB1c2VNdXRhYmxlU291cmNlKGhvb2ssIHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZU11dGFibGVTb3VyY2Uoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKSB7XG4gIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHJldHVybiB1c2VNdXRhYmxlU291cmNlKGhvb2ssIHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSk7XG59XG5cbmZ1bmN0aW9uIG1vdW50U3RhdGUoaW5pdGlhbFN0YXRlKSB7XG4gIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcblxuICBpZiAodHlwZW9mIGluaXRpYWxTdGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vICRGbG93Rml4TWU6IEZsb3cgZG9lc24ndCBsaWtlIG1peGVkIHR5cGVzXG4gICAgaW5pdGlhbFN0YXRlID0gaW5pdGlhbFN0YXRlKCk7XG4gIH1cblxuICBob29rLm1lbW9pemVkU3RhdGUgPSBob29rLmJhc2VTdGF0ZSA9IGluaXRpYWxTdGF0ZTtcbiAgdmFyIHF1ZXVlID0gaG9vay5xdWV1ZSA9IHtcbiAgICBwZW5kaW5nOiBudWxsLFxuICAgIGRpc3BhdGNoOiBudWxsLFxuICAgIGxhc3RSZW5kZXJlZFJlZHVjZXI6IGJhc2ljU3RhdGVSZWR1Y2VyLFxuICAgIGxhc3RSZW5kZXJlZFN0YXRlOiBpbml0aWFsU3RhdGVcbiAgfTtcbiAgdmFyIGRpc3BhdGNoID0gcXVldWUuZGlzcGF0Y2ggPSBkaXNwYXRjaEFjdGlvbi5iaW5kKG51bGwsIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEsIHF1ZXVlKTtcbiAgcmV0dXJuIFtob29rLm1lbW9pemVkU3RhdGUsIGRpc3BhdGNoXTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlU3RhdGUoaW5pdGlhbFN0YXRlKSB7XG4gIHJldHVybiB1cGRhdGVSZWR1Y2VyKGJhc2ljU3RhdGVSZWR1Y2VyKTtcbn1cblxuZnVuY3Rpb24gcmVyZW5kZXJTdGF0ZShpbml0aWFsU3RhdGUpIHtcbiAgcmV0dXJuIHJlcmVuZGVyUmVkdWNlcihiYXNpY1N0YXRlUmVkdWNlcik7XG59XG5cbmZ1bmN0aW9uIHB1c2hFZmZlY3QodGFnLCBjcmVhdGUsIGRlc3Ryb3ksIGRlcHMpIHtcbiAgdmFyIGVmZmVjdCA9IHtcbiAgICB0YWc6IHRhZyxcbiAgICBjcmVhdGU6IGNyZWF0ZSxcbiAgICBkZXN0cm95OiBkZXN0cm95LFxuICAgIGRlcHM6IGRlcHMsXG4gICAgLy8gQ2lyY3VsYXJcbiAgICBuZXh0OiBudWxsXG4gIH07XG4gIHZhciBjb21wb25lbnRVcGRhdGVRdWV1ZSA9IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEudXBkYXRlUXVldWU7XG5cbiAgaWYgKGNvbXBvbmVudFVwZGF0ZVF1ZXVlID09PSBudWxsKSB7XG4gICAgY29tcG9uZW50VXBkYXRlUXVldWUgPSBjcmVhdGVGdW5jdGlvbkNvbXBvbmVudFVwZGF0ZVF1ZXVlKCk7XG4gICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS51cGRhdGVRdWV1ZSA9IGNvbXBvbmVudFVwZGF0ZVF1ZXVlO1xuICAgIGNvbXBvbmVudFVwZGF0ZVF1ZXVlLmxhc3RFZmZlY3QgPSBlZmZlY3QubmV4dCA9IGVmZmVjdDtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbGFzdEVmZmVjdCA9IGNvbXBvbmVudFVwZGF0ZVF1ZXVlLmxhc3RFZmZlY3Q7XG5cbiAgICBpZiAobGFzdEVmZmVjdCA9PT0gbnVsbCkge1xuICAgICAgY29tcG9uZW50VXBkYXRlUXVldWUubGFzdEVmZmVjdCA9IGVmZmVjdC5uZXh0ID0gZWZmZWN0O1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgZmlyc3RFZmZlY3QgPSBsYXN0RWZmZWN0Lm5leHQ7XG4gICAgICBsYXN0RWZmZWN0Lm5leHQgPSBlZmZlY3Q7XG4gICAgICBlZmZlY3QubmV4dCA9IGZpcnN0RWZmZWN0O1xuICAgICAgY29tcG9uZW50VXBkYXRlUXVldWUubGFzdEVmZmVjdCA9IGVmZmVjdDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZWZmZWN0O1xufVxuXG5mdW5jdGlvbiBtb3VudFJlZihpbml0aWFsVmFsdWUpIHtcbiAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICB2YXIgcmVmID0ge1xuICAgIGN1cnJlbnQ6IGluaXRpYWxWYWx1ZVxuICB9O1xuXG4gIHtcbiAgICBPYmplY3Quc2VhbChyZWYpO1xuICB9XG5cbiAgaG9vay5tZW1vaXplZFN0YXRlID0gcmVmO1xuICByZXR1cm4gcmVmO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVSZWYoaW5pdGlhbFZhbHVlKSB7XG4gIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHJldHVybiBob29rLm1lbW9pemVkU3RhdGU7XG59XG5cbmZ1bmN0aW9uIG1vdW50RWZmZWN0SW1wbChmaWJlckZsYWdzLCBob29rRmxhZ3MsIGNyZWF0ZSwgZGVwcykge1xuICB2YXIgaG9vayA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHZhciBuZXh0RGVwcyA9IGRlcHMgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBkZXBzO1xuICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLmZsYWdzIHw9IGZpYmVyRmxhZ3M7XG4gIGhvb2subWVtb2l6ZWRTdGF0ZSA9IHB1c2hFZmZlY3QoSGFzRWZmZWN0IHwgaG9va0ZsYWdzLCBjcmVhdGUsIHVuZGVmaW5lZCwgbmV4dERlcHMpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVFZmZlY3RJbXBsKGZpYmVyRmxhZ3MsIGhvb2tGbGFncywgY3JlYXRlLCBkZXBzKSB7XG4gIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHZhciBuZXh0RGVwcyA9IGRlcHMgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBkZXBzO1xuICB2YXIgZGVzdHJveSA9IHVuZGVmaW5lZDtcblxuICBpZiAoY3VycmVudEhvb2sgIT09IG51bGwpIHtcbiAgICB2YXIgcHJldkVmZmVjdCA9IGN1cnJlbnRIb29rLm1lbW9pemVkU3RhdGU7XG4gICAgZGVzdHJveSA9IHByZXZFZmZlY3QuZGVzdHJveTtcblxuICAgIGlmIChuZXh0RGVwcyAhPT0gbnVsbCkge1xuICAgICAgdmFyIHByZXZEZXBzID0gcHJldkVmZmVjdC5kZXBzO1xuXG4gICAgICBpZiAoYXJlSG9va0lucHV0c0VxdWFsKG5leHREZXBzLCBwcmV2RGVwcykpIHtcbiAgICAgICAgcHVzaEVmZmVjdChob29rRmxhZ3MsIGNyZWF0ZSwgZGVzdHJveSwgbmV4dERlcHMpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5mbGFncyB8PSBmaWJlckZsYWdzO1xuICBob29rLm1lbW9pemVkU3RhdGUgPSBwdXNoRWZmZWN0KEhhc0VmZmVjdCB8IGhvb2tGbGFncywgY3JlYXRlLCBkZXN0cm95LCBuZXh0RGVwcyk7XG59XG5cbmZ1bmN0aW9uIG1vdW50RWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICB7XG4gICAgLy8gJEZsb3dFeHBlY3RlZEVycm9yIC0gamVzdCBpc24ndCBhIGdsb2JhbCwgYW5kIGlzbid0IHJlY29nbml6ZWQgb3V0c2lkZSBvZiB0ZXN0c1xuICAgIGlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIGplc3QpIHtcbiAgICAgIHdhcm5JZk5vdEN1cnJlbnRseUFjdGluZ0VmZmVjdHNJbkRFVihjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbW91bnRFZmZlY3RJbXBsKFVwZGF0ZSB8IFBhc3NpdmUsIFBhc3NpdmUkMSwgY3JlYXRlLCBkZXBzKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlRWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICB7XG4gICAgLy8gJEZsb3dFeHBlY3RlZEVycm9yIC0gamVzdCBpc24ndCBhIGdsb2JhbCwgYW5kIGlzbid0IHJlY29nbml6ZWQgb3V0c2lkZSBvZiB0ZXN0c1xuICAgIGlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIGplc3QpIHtcbiAgICAgIHdhcm5JZk5vdEN1cnJlbnRseUFjdGluZ0VmZmVjdHNJbkRFVihjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdXBkYXRlRWZmZWN0SW1wbChVcGRhdGUgfCBQYXNzaXZlLCBQYXNzaXZlJDEsIGNyZWF0ZSwgZGVwcyk7XG59XG5cbmZ1bmN0aW9uIG1vdW50TGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICByZXR1cm4gbW91bnRFZmZlY3RJbXBsKFVwZGF0ZSwgTGF5b3V0LCBjcmVhdGUsIGRlcHMpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKSB7XG4gIHJldHVybiB1cGRhdGVFZmZlY3RJbXBsKFVwZGF0ZSwgTGF5b3V0LCBjcmVhdGUsIGRlcHMpO1xufVxuXG5mdW5jdGlvbiBpbXBlcmF0aXZlSGFuZGxlRWZmZWN0KGNyZWF0ZSwgcmVmKSB7XG4gIGlmICh0eXBlb2YgcmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIHJlZkNhbGxiYWNrID0gcmVmO1xuXG4gICAgdmFyIF9pbnN0ID0gY3JlYXRlKCk7XG5cbiAgICByZWZDYWxsYmFjayhfaW5zdCk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJlZkNhbGxiYWNrKG51bGwpO1xuICAgIH07XG4gIH0gZWxzZSBpZiAocmVmICE9PSBudWxsICYmIHJlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdmFyIHJlZk9iamVjdCA9IHJlZjtcblxuICAgIHtcbiAgICAgIGlmICghcmVmT2JqZWN0Lmhhc093blByb3BlcnR5KCdjdXJyZW50JykpIHtcbiAgICAgICAgZXJyb3IoJ0V4cGVjdGVkIHVzZUltcGVyYXRpdmVIYW5kbGUoKSBmaXJzdCBhcmd1bWVudCB0byBlaXRoZXIgYmUgYSAnICsgJ3JlZiBjYWxsYmFjayBvciBSZWFjdC5jcmVhdGVSZWYoKSBvYmplY3QuIEluc3RlYWQgcmVjZWl2ZWQ6ICVzLicsICdhbiBvYmplY3Qgd2l0aCBrZXlzIHsnICsgT2JqZWN0LmtleXMocmVmT2JqZWN0KS5qb2luKCcsICcpICsgJ30nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgX2luc3QyID0gY3JlYXRlKCk7XG5cbiAgICByZWZPYmplY3QuY3VycmVudCA9IF9pbnN0MjtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgcmVmT2JqZWN0LmN1cnJlbnQgPSBudWxsO1xuICAgIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gbW91bnRJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gIHtcbiAgICBpZiAodHlwZW9mIGNyZWF0ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJ0V4cGVjdGVkIHVzZUltcGVyYXRpdmVIYW5kbGUoKSBzZWNvbmQgYXJndW1lbnQgdG8gYmUgYSBmdW5jdGlvbiAnICsgJ3RoYXQgY3JlYXRlcyBhIGhhbmRsZS4gSW5zdGVhZCByZWNlaXZlZDogJXMuJywgY3JlYXRlICE9PSBudWxsID8gdHlwZW9mIGNyZWF0ZSA6ICdudWxsJyk7XG4gICAgfVxuICB9IC8vIFRPRE86IElmIGRlcHMgYXJlIHByb3ZpZGVkLCBzaG91bGQgd2Ugc2tpcCBjb21wYXJpbmcgdGhlIHJlZiBpdHNlbGY/XG5cblxuICB2YXIgZWZmZWN0RGVwcyA9IGRlcHMgIT09IG51bGwgJiYgZGVwcyAhPT0gdW5kZWZpbmVkID8gZGVwcy5jb25jYXQoW3JlZl0pIDogbnVsbDtcbiAgcmV0dXJuIG1vdW50RWZmZWN0SW1wbChVcGRhdGUsIExheW91dCwgaW1wZXJhdGl2ZUhhbmRsZUVmZmVjdC5iaW5kKG51bGwsIGNyZWF0ZSwgcmVmKSwgZWZmZWN0RGVwcyk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAge1xuICAgIGlmICh0eXBlb2YgY3JlYXRlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignRXhwZWN0ZWQgdXNlSW1wZXJhdGl2ZUhhbmRsZSgpIHNlY29uZCBhcmd1bWVudCB0byBiZSBhIGZ1bmN0aW9uICcgKyAndGhhdCBjcmVhdGVzIGEgaGFuZGxlLiBJbnN0ZWFkIHJlY2VpdmVkOiAlcy4nLCBjcmVhdGUgIT09IG51bGwgPyB0eXBlb2YgY3JlYXRlIDogJ251bGwnKTtcbiAgICB9XG4gIH0gLy8gVE9ETzogSWYgZGVwcyBhcmUgcHJvdmlkZWQsIHNob3VsZCB3ZSBza2lwIGNvbXBhcmluZyB0aGUgcmVmIGl0c2VsZj9cblxuXG4gIHZhciBlZmZlY3REZXBzID0gZGVwcyAhPT0gbnVsbCAmJiBkZXBzICE9PSB1bmRlZmluZWQgPyBkZXBzLmNvbmNhdChbcmVmXSkgOiBudWxsO1xuICByZXR1cm4gdXBkYXRlRWZmZWN0SW1wbChVcGRhdGUsIExheW91dCwgaW1wZXJhdGl2ZUhhbmRsZUVmZmVjdC5iaW5kKG51bGwsIGNyZWF0ZSwgcmVmKSwgZWZmZWN0RGVwcyk7XG59XG5cbmZ1bmN0aW9uIG1vdW50RGVidWdWYWx1ZSh2YWx1ZSwgZm9ybWF0dGVyRm4pIHsvLyBUaGlzIGhvb2sgaXMgbm9ybWFsbHkgYSBuby1vcC5cbiAgLy8gVGhlIHJlYWN0LWRlYnVnLWhvb2tzIHBhY2thZ2UgaW5qZWN0cyBpdHMgb3duIGltcGxlbWVudGF0aW9uXG4gIC8vIHNvIHRoYXQgZS5nLiBEZXZUb29scyBjYW4gZGlzcGxheSBjdXN0b20gaG9vayB2YWx1ZXMuXG59XG5cbnZhciB1cGRhdGVEZWJ1Z1ZhbHVlID0gbW91bnREZWJ1Z1ZhbHVlO1xuXG5mdW5jdGlvbiBtb3VudENhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKSB7XG4gIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgdmFyIG5leHREZXBzID0gZGVwcyA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGRlcHM7XG4gIGhvb2subWVtb2l6ZWRTdGF0ZSA9IFtjYWxsYmFjaywgbmV4dERlcHNdO1xuICByZXR1cm4gY2FsbGJhY2s7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUNhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKSB7XG4gIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHZhciBuZXh0RGVwcyA9IGRlcHMgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBkZXBzO1xuICB2YXIgcHJldlN0YXRlID0gaG9vay5tZW1vaXplZFN0YXRlO1xuXG4gIGlmIChwcmV2U3RhdGUgIT09IG51bGwpIHtcbiAgICBpZiAobmV4dERlcHMgIT09IG51bGwpIHtcbiAgICAgIHZhciBwcmV2RGVwcyA9IHByZXZTdGF0ZVsxXTtcblxuICAgICAgaWYgKGFyZUhvb2tJbnB1dHNFcXVhbChuZXh0RGVwcywgcHJldkRlcHMpKSB7XG4gICAgICAgIHJldHVybiBwcmV2U3RhdGVbMF07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaG9vay5tZW1vaXplZFN0YXRlID0gW2NhbGxiYWNrLCBuZXh0RGVwc107XG4gIHJldHVybiBjYWxsYmFjaztcbn1cblxuZnVuY3Rpb24gbW91bnRNZW1vKG5leHRDcmVhdGUsIGRlcHMpIHtcbiAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICB2YXIgbmV4dERlcHMgPSBkZXBzID09PSB1bmRlZmluZWQgPyBudWxsIDogZGVwcztcbiAgdmFyIG5leHRWYWx1ZSA9IG5leHRDcmVhdGUoKTtcbiAgaG9vay5tZW1vaXplZFN0YXRlID0gW25leHRWYWx1ZSwgbmV4dERlcHNdO1xuICByZXR1cm4gbmV4dFZhbHVlO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVNZW1vKG5leHRDcmVhdGUsIGRlcHMpIHtcbiAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgdmFyIG5leHREZXBzID0gZGVwcyA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGRlcHM7XG4gIHZhciBwcmV2U3RhdGUgPSBob29rLm1lbW9pemVkU3RhdGU7XG5cbiAgaWYgKHByZXZTdGF0ZSAhPT0gbnVsbCkge1xuICAgIC8vIEFzc3VtZSB0aGVzZSBhcmUgZGVmaW5lZC4gSWYgdGhleSdyZSBub3QsIGFyZUhvb2tJbnB1dHNFcXVhbCB3aWxsIHdhcm4uXG4gICAgaWYgKG5leHREZXBzICE9PSBudWxsKSB7XG4gICAgICB2YXIgcHJldkRlcHMgPSBwcmV2U3RhdGVbMV07XG5cbiAgICAgIGlmIChhcmVIb29rSW5wdXRzRXF1YWwobmV4dERlcHMsIHByZXZEZXBzKSkge1xuICAgICAgICByZXR1cm4gcHJldlN0YXRlWzBdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBuZXh0VmFsdWUgPSBuZXh0Q3JlYXRlKCk7XG4gIGhvb2subWVtb2l6ZWRTdGF0ZSA9IFtuZXh0VmFsdWUsIG5leHREZXBzXTtcbiAgcmV0dXJuIG5leHRWYWx1ZTtcbn1cblxuZnVuY3Rpb24gbW91bnREZWZlcnJlZFZhbHVlKHZhbHVlKSB7XG4gIHZhciBfbW91bnRTdGF0ZSA9IG1vdW50U3RhdGUodmFsdWUpLFxuICAgICAgcHJldlZhbHVlID0gX21vdW50U3RhdGVbMF0sXG4gICAgICBzZXRWYWx1ZSA9IF9tb3VudFN0YXRlWzFdO1xuXG4gIG1vdW50RWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcHJldlRyYW5zaXRpb24gPSBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxLnRyYW5zaXRpb247XG4gICAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMS50cmFuc2l0aW9uID0gMTtcblxuICAgIHRyeSB7XG4gICAgICBzZXRWYWx1ZSh2YWx1ZSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEudHJhbnNpdGlvbiA9IHByZXZUcmFuc2l0aW9uO1xuICAgIH1cbiAgfSwgW3ZhbHVlXSk7XG4gIHJldHVybiBwcmV2VmFsdWU7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZURlZmVycmVkVmFsdWUodmFsdWUpIHtcbiAgdmFyIF91cGRhdGVTdGF0ZSA9IHVwZGF0ZVN0YXRlKCksXG4gICAgICBwcmV2VmFsdWUgPSBfdXBkYXRlU3RhdGVbMF0sXG4gICAgICBzZXRWYWx1ZSA9IF91cGRhdGVTdGF0ZVsxXTtcblxuICB1cGRhdGVFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHZhciBwcmV2VHJhbnNpdGlvbiA9IFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEudHJhbnNpdGlvbjtcbiAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxLnRyYW5zaXRpb24gPSAxO1xuXG4gICAgdHJ5IHtcbiAgICAgIHNldFZhbHVlKHZhbHVlKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMS50cmFuc2l0aW9uID0gcHJldlRyYW5zaXRpb247XG4gICAgfVxuICB9LCBbdmFsdWVdKTtcbiAgcmV0dXJuIHByZXZWYWx1ZTtcbn1cblxuZnVuY3Rpb24gcmVyZW5kZXJEZWZlcnJlZFZhbHVlKHZhbHVlKSB7XG4gIHZhciBfcmVyZW5kZXJTdGF0ZSA9IHJlcmVuZGVyU3RhdGUoKSxcbiAgICAgIHByZXZWYWx1ZSA9IF9yZXJlbmRlclN0YXRlWzBdLFxuICAgICAgc2V0VmFsdWUgPSBfcmVyZW5kZXJTdGF0ZVsxXTtcblxuICB1cGRhdGVFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHZhciBwcmV2VHJhbnNpdGlvbiA9IFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEudHJhbnNpdGlvbjtcbiAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxLnRyYW5zaXRpb24gPSAxO1xuXG4gICAgdHJ5IHtcbiAgICAgIHNldFZhbHVlKHZhbHVlKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMS50cmFuc2l0aW9uID0gcHJldlRyYW5zaXRpb247XG4gICAgfVxuICB9LCBbdmFsdWVdKTtcbiAgcmV0dXJuIHByZXZWYWx1ZTtcbn1cblxuZnVuY3Rpb24gc3RhcnRUcmFuc2l0aW9uKHNldFBlbmRpbmcsIGNhbGxiYWNrKSB7XG4gIHZhciBwcmlvcml0eUxldmVsID0gZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwoKTtcblxuICB7XG4gICAgcnVuV2l0aFByaW9yaXR5JDEocHJpb3JpdHlMZXZlbCA8IFVzZXJCbG9ja2luZ1ByaW9yaXR5JDIgPyBVc2VyQmxvY2tpbmdQcmlvcml0eSQyIDogcHJpb3JpdHlMZXZlbCwgZnVuY3Rpb24gKCkge1xuICAgICAgc2V0UGVuZGluZyh0cnVlKTtcbiAgICB9KTtcbiAgICBydW5XaXRoUHJpb3JpdHkkMShwcmlvcml0eUxldmVsID4gTm9ybWFsUHJpb3JpdHkkMSA/IE5vcm1hbFByaW9yaXR5JDEgOiBwcmlvcml0eUxldmVsLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgcHJldlRyYW5zaXRpb24gPSBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxLnRyYW5zaXRpb247XG4gICAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxLnRyYW5zaXRpb24gPSAxO1xuXG4gICAgICB0cnkge1xuICAgICAgICBzZXRQZW5kaW5nKGZhbHNlKTtcbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEudHJhbnNpdGlvbiA9IHByZXZUcmFuc2l0aW9uO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1vdW50VHJhbnNpdGlvbigpIHtcbiAgdmFyIF9tb3VudFN0YXRlMiA9IG1vdW50U3RhdGUoZmFsc2UpLFxuICAgICAgaXNQZW5kaW5nID0gX21vdW50U3RhdGUyWzBdLFxuICAgICAgc2V0UGVuZGluZyA9IF9tb3VudFN0YXRlMlsxXTsgLy8gVGhlIGBzdGFydGAgbWV0aG9kIGNhbiBiZSBzdG9yZWQgb24gYSByZWYsIHNpbmNlIGBzZXRQZW5kaW5nYFxuICAvLyBuZXZlciBjaGFuZ2VzLlxuXG5cbiAgdmFyIHN0YXJ0ID0gc3RhcnRUcmFuc2l0aW9uLmJpbmQobnVsbCwgc2V0UGVuZGluZyk7XG4gIG1vdW50UmVmKHN0YXJ0KTtcbiAgcmV0dXJuIFtzdGFydCwgaXNQZW5kaW5nXTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlVHJhbnNpdGlvbigpIHtcbiAgdmFyIF91cGRhdGVTdGF0ZTIgPSB1cGRhdGVTdGF0ZSgpLFxuICAgICAgaXNQZW5kaW5nID0gX3VwZGF0ZVN0YXRlMlswXTtcblxuICB2YXIgc3RhcnRSZWYgPSB1cGRhdGVSZWYoKTtcbiAgdmFyIHN0YXJ0ID0gc3RhcnRSZWYuY3VycmVudDtcbiAgcmV0dXJuIFtzdGFydCwgaXNQZW5kaW5nXTtcbn1cblxuZnVuY3Rpb24gcmVyZW5kZXJUcmFuc2l0aW9uKCkge1xuICB2YXIgX3JlcmVuZGVyU3RhdGUyID0gcmVyZW5kZXJTdGF0ZSgpLFxuICAgICAgaXNQZW5kaW5nID0gX3JlcmVuZGVyU3RhdGUyWzBdO1xuXG4gIHZhciBzdGFydFJlZiA9IHVwZGF0ZVJlZigpO1xuICB2YXIgc3RhcnQgPSBzdGFydFJlZi5jdXJyZW50O1xuICByZXR1cm4gW3N0YXJ0LCBpc1BlbmRpbmddO1xufVxuXG52YXIgaXNVcGRhdGluZ09wYXF1ZVZhbHVlSW5SZW5kZXJQaGFzZSA9IGZhbHNlO1xuZnVuY3Rpb24gZ2V0SXNVcGRhdGluZ09wYXF1ZVZhbHVlSW5SZW5kZXJQaGFzZUluREVWKCkge1xuICB7XG4gICAgcmV0dXJuIGlzVXBkYXRpbmdPcGFxdWVWYWx1ZUluUmVuZGVyUGhhc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gd2Fybk9uT3BhcXVlSWRlbnRpZmllckFjY2Vzc0luREVWKGZpYmVyKSB7XG4gIHtcbiAgICAvLyBUT0RPOiBTaG91bGQgd2FybiBpbiBlZmZlY3RzIGFuZCBjYWxsYmFja3MsIHRvb1xuICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnVW5rbm93bic7XG5cbiAgICBpZiAoZ2V0SXNSZW5kZXJpbmcoKSAmJiAhZGlkV2FybkFib3V0VXNlT3BhcXVlSWRlbnRpZmllcltuYW1lXSkge1xuICAgICAgZXJyb3IoJ1RoZSBvYmplY3QgcGFzc2VkIGJhY2sgZnJvbSB1c2VPcGFxdWVJZGVudGlmaWVyIGlzIG1lYW50IHRvIGJlICcgKyAncGFzc2VkIHRocm91Z2ggdG8gYXR0cmlidXRlcyBvbmx5LiBEbyBub3QgcmVhZCB0aGUgJyArICd2YWx1ZSBkaXJlY3RseS4nKTtcblxuICAgICAgZGlkV2FybkFib3V0VXNlT3BhcXVlSWRlbnRpZmllcltuYW1lXSA9IHRydWU7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG1vdW50T3BhcXVlSWRlbnRpZmllcigpIHtcbiAgdmFyIG1ha2VJZCA9ICBtYWtlQ2xpZW50SWRJbkRFVi5iaW5kKG51bGwsIHdhcm5Pbk9wYXF1ZUlkZW50aWZpZXJBY2Nlc3NJbkRFVi5iaW5kKG51bGwsIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEpKSA7XG5cbiAgaWYgKGdldElzSHlkcmF0aW5nKCkpIHtcbiAgICB2YXIgZGlkVXBncmFkZSA9IGZhbHNlO1xuICAgIHZhciBmaWJlciA9IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDE7XG5cbiAgICB2YXIgcmVhZFZhbHVlID0gZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKCFkaWRVcGdyYWRlKSB7XG4gICAgICAgIC8vIE9ubHkgdXBncmFkZSBvbmNlLiBUaGlzIHdvcmtzIGV2ZW4gaW5zaWRlIHRoZSByZW5kZXIgcGhhc2UgYmVjYXVzZVxuICAgICAgICAvLyB0aGUgdXBkYXRlIGlzIGFkZGVkIHRvIGEgc2hhcmVkIHF1ZXVlLCB3aGljaCBvdXRsYXN0cyB0aGVcbiAgICAgICAgLy8gaW4tcHJvZ3Jlc3MgcmVuZGVyLlxuICAgICAgICBkaWRVcGdyYWRlID0gdHJ1ZTtcblxuICAgICAgICB7XG4gICAgICAgICAgaXNVcGRhdGluZ09wYXF1ZVZhbHVlSW5SZW5kZXJQaGFzZSA9IHRydWU7XG4gICAgICAgICAgc2V0SWQobWFrZUlkKCkpO1xuICAgICAgICAgIGlzVXBkYXRpbmdPcGFxdWVWYWx1ZUluUmVuZGVyUGhhc2UgPSBmYWxzZTtcbiAgICAgICAgICB3YXJuT25PcGFxdWVJZGVudGlmaWVyQWNjZXNzSW5ERVYoZmliZXIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCBcIlRoZSBvYmplY3QgcGFzc2VkIGJhY2sgZnJvbSB1c2VPcGFxdWVJZGVudGlmaWVyIGlzIG1lYW50IHRvIGJlIHBhc3NlZCB0aHJvdWdoIHRvIGF0dHJpYnV0ZXMgb25seS4gRG8gbm90IHJlYWQgdGhlIHZhbHVlIGRpcmVjdGx5LlwiICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIGlkID0gbWFrZU9wYXF1ZUh5ZHJhdGluZ09iamVjdChyZWFkVmFsdWUpO1xuICAgIHZhciBzZXRJZCA9IG1vdW50U3RhdGUoaWQpWzFdO1xuXG4gICAgaWYgKChjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLm1vZGUgJiBCbG9ja2luZ01vZGUpID09PSBOb01vZGUpIHtcbiAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEuZmxhZ3MgfD0gVXBkYXRlIHwgUGFzc2l2ZTtcbiAgICAgIHB1c2hFZmZlY3QoSGFzRWZmZWN0IHwgUGFzc2l2ZSQxLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNldElkKG1ha2VJZCgpKTtcbiAgICAgIH0sIHVuZGVmaW5lZCwgbnVsbCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGlkO1xuICB9IGVsc2Uge1xuICAgIHZhciBfaWQgPSBtYWtlSWQoKTtcblxuICAgIG1vdW50U3RhdGUoX2lkKTtcbiAgICByZXR1cm4gX2lkO1xuICB9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZU9wYXF1ZUlkZW50aWZpZXIoKSB7XG4gIHZhciBpZCA9IHVwZGF0ZVN0YXRlKClbMF07XG4gIHJldHVybiBpZDtcbn1cblxuZnVuY3Rpb24gcmVyZW5kZXJPcGFxdWVJZGVudGlmaWVyKCkge1xuICB2YXIgaWQgPSByZXJlbmRlclN0YXRlKClbMF07XG4gIHJldHVybiBpZDtcbn1cblxuZnVuY3Rpb24gZGlzcGF0Y2hBY3Rpb24oZmliZXIsIHF1ZXVlLCBhY3Rpb24pIHtcbiAge1xuICAgIGlmICh0eXBlb2YgYXJndW1lbnRzWzNdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcihcIlN0YXRlIHVwZGF0ZXMgZnJvbSB0aGUgdXNlU3RhdGUoKSBhbmQgdXNlUmVkdWNlcigpIEhvb2tzIGRvbid0IHN1cHBvcnQgdGhlIFwiICsgJ3NlY29uZCBjYWxsYmFjayBhcmd1bWVudC4gVG8gZXhlY3V0ZSBhIHNpZGUgZWZmZWN0IGFmdGVyICcgKyAncmVuZGVyaW5nLCBkZWNsYXJlIGl0IGluIHRoZSBjb21wb25lbnQgYm9keSB3aXRoIHVzZUVmZmVjdCgpLicpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBldmVudFRpbWUgPSByZXF1ZXN0RXZlbnRUaW1lKCk7XG4gIHZhciBsYW5lID0gcmVxdWVzdFVwZGF0ZUxhbmUoZmliZXIpO1xuICB2YXIgdXBkYXRlID0ge1xuICAgIGxhbmU6IGxhbmUsXG4gICAgYWN0aW9uOiBhY3Rpb24sXG4gICAgZWFnZXJSZWR1Y2VyOiBudWxsLFxuICAgIGVhZ2VyU3RhdGU6IG51bGwsXG4gICAgbmV4dDogbnVsbFxuICB9OyAvLyBBcHBlbmQgdGhlIHVwZGF0ZSB0byB0aGUgZW5kIG9mIHRoZSBsaXN0LlxuXG4gIHZhciBwZW5kaW5nID0gcXVldWUucGVuZGluZztcblxuICBpZiAocGVuZGluZyA9PT0gbnVsbCkge1xuICAgIC8vIFRoaXMgaXMgdGhlIGZpcnN0IHVwZGF0ZS4gQ3JlYXRlIGEgY2lyY3VsYXIgbGlzdC5cbiAgICB1cGRhdGUubmV4dCA9IHVwZGF0ZTtcbiAgfSBlbHNlIHtcbiAgICB1cGRhdGUubmV4dCA9IHBlbmRpbmcubmV4dDtcbiAgICBwZW5kaW5nLm5leHQgPSB1cGRhdGU7XG4gIH1cblxuICBxdWV1ZS5wZW5kaW5nID0gdXBkYXRlO1xuICB2YXIgYWx0ZXJuYXRlID0gZmliZXIuYWx0ZXJuYXRlO1xuXG4gIGlmIChmaWJlciA9PT0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSB8fCBhbHRlcm5hdGUgIT09IG51bGwgJiYgYWx0ZXJuYXRlID09PSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxKSB7XG4gICAgLy8gVGhpcyBpcyBhIHJlbmRlciBwaGFzZSB1cGRhdGUuIFN0YXNoIGl0IGluIGEgbGF6aWx5LWNyZWF0ZWQgbWFwIG9mXG4gICAgLy8gcXVldWUgLT4gbGlua2VkIGxpc3Qgb2YgdXBkYXRlcy4gQWZ0ZXIgdGhpcyByZW5kZXIgcGFzcywgd2UnbGwgcmVzdGFydFxuICAgIC8vIGFuZCBhcHBseSB0aGUgc3Rhc2hlZCB1cGRhdGVzIG9uIHRvcCBvZiB0aGUgd29yay1pbi1wcm9ncmVzcyBob29rLlxuICAgIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGVEdXJpbmdUaGlzUGFzcyA9IGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGUgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIGlmIChmaWJlci5sYW5lcyA9PT0gTm9MYW5lcyAmJiAoYWx0ZXJuYXRlID09PSBudWxsIHx8IGFsdGVybmF0ZS5sYW5lcyA9PT0gTm9MYW5lcykpIHtcbiAgICAgIC8vIFRoZSBxdWV1ZSBpcyBjdXJyZW50bHkgZW1wdHksIHdoaWNoIG1lYW5zIHdlIGNhbiBlYWdlcmx5IGNvbXB1dGUgdGhlXG4gICAgICAvLyBuZXh0IHN0YXRlIGJlZm9yZSBlbnRlcmluZyB0aGUgcmVuZGVyIHBoYXNlLiBJZiB0aGUgbmV3IHN0YXRlIGlzIHRoZVxuICAgICAgLy8gc2FtZSBhcyB0aGUgY3VycmVudCBzdGF0ZSwgd2UgbWF5IGJlIGFibGUgdG8gYmFpbCBvdXQgZW50aXJlbHkuXG4gICAgICB2YXIgbGFzdFJlbmRlcmVkUmVkdWNlciA9IHF1ZXVlLmxhc3RSZW5kZXJlZFJlZHVjZXI7XG5cbiAgICAgIGlmIChsYXN0UmVuZGVyZWRSZWR1Y2VyICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBwcmV2RGlzcGF0Y2hlcjtcblxuICAgICAgICB7XG4gICAgICAgICAgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB2YXIgY3VycmVudFN0YXRlID0gcXVldWUubGFzdFJlbmRlcmVkU3RhdGU7XG4gICAgICAgICAgdmFyIGVhZ2VyU3RhdGUgPSBsYXN0UmVuZGVyZWRSZWR1Y2VyKGN1cnJlbnRTdGF0ZSwgYWN0aW9uKTsgLy8gU3Rhc2ggdGhlIGVhZ2VybHkgY29tcHV0ZWQgc3RhdGUsIGFuZCB0aGUgcmVkdWNlciB1c2VkIHRvIGNvbXB1dGVcbiAgICAgICAgICAvLyBpdCwgb24gdGhlIHVwZGF0ZSBvYmplY3QuIElmIHRoZSByZWR1Y2VyIGhhc24ndCBjaGFuZ2VkIGJ5IHRoZVxuICAgICAgICAgIC8vIHRpbWUgd2UgZW50ZXIgdGhlIHJlbmRlciBwaGFzZSwgdGhlbiB0aGUgZWFnZXIgc3RhdGUgY2FuIGJlIHVzZWRcbiAgICAgICAgICAvLyB3aXRob3V0IGNhbGxpbmcgdGhlIHJlZHVjZXIgYWdhaW4uXG5cbiAgICAgICAgICB1cGRhdGUuZWFnZXJSZWR1Y2VyID0gbGFzdFJlbmRlcmVkUmVkdWNlcjtcbiAgICAgICAgICB1cGRhdGUuZWFnZXJTdGF0ZSA9IGVhZ2VyU3RhdGU7XG5cbiAgICAgICAgICBpZiAob2JqZWN0SXMoZWFnZXJTdGF0ZSwgY3VycmVudFN0YXRlKSkge1xuICAgICAgICAgICAgLy8gRmFzdCBwYXRoLiBXZSBjYW4gYmFpbCBvdXQgd2l0aG91dCBzY2hlZHVsaW5nIFJlYWN0IHRvIHJlLXJlbmRlci5cbiAgICAgICAgICAgIC8vIEl0J3Mgc3RpbGwgcG9zc2libGUgdGhhdCB3ZSdsbCBuZWVkIHRvIHJlYmFzZSB0aGlzIHVwZGF0ZSBsYXRlcixcbiAgICAgICAgICAgIC8vIGlmIHRoZSBjb21wb25lbnQgcmUtcmVuZGVycyBmb3IgYSBkaWZmZXJlbnQgcmVhc29uIGFuZCBieSB0aGF0XG4gICAgICAgICAgICAvLyB0aW1lIHRoZSByZWR1Y2VyIGhhcyBjaGFuZ2VkLlxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsvLyBTdXBwcmVzcyB0aGUgZXJyb3IuIEl0IHdpbGwgdGhyb3cgYWdhaW4gaW4gdGhlIHJlbmRlciBwaGFzZS5cbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHtcbiAgICAgIC8vICRGbG93RXhwZWN0ZWRFcnJvciAtIGplc3QgaXNuJ3QgYSBnbG9iYWwsIGFuZCBpc24ndCByZWNvZ25pemVkIG91dHNpZGUgb2YgdGVzdHNcbiAgICAgIGlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIGplc3QpIHtcbiAgICAgICAgd2FybklmTm90U2NvcGVkV2l0aE1hdGNoaW5nQWN0KGZpYmVyKTtcbiAgICAgICAgd2FybklmTm90Q3VycmVudGx5QWN0aW5nVXBkYXRlc0luRGV2KGZpYmVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIGxhbmUsIGV2ZW50VGltZSk7XG4gIH1cbn1cblxudmFyIENvbnRleHRPbmx5RGlzcGF0Y2hlciA9IHtcbiAgcmVhZENvbnRleHQ6IHJlYWRDb250ZXh0LFxuICB1c2VDYWxsYmFjazogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VDb250ZXh0OiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZUVmZmVjdDogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VJbXBlcmF0aXZlSGFuZGxlOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZUxheW91dEVmZmVjdDogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VNZW1vOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZVJlZHVjZXI6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlUmVmOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZVN0YXRlOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZURlYnVnVmFsdWU6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlRGVmZXJyZWRWYWx1ZTogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VUcmFuc2l0aW9uOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZU11dGFibGVTb3VyY2U6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlT3BhcXVlSWRlbnRpZmllcjogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1bnN0YWJsZV9pc05ld1JlY29uY2lsZXI6IGVuYWJsZU5ld1JlY29uY2lsZXJcbn07XG52YXIgSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWID0gbnVsbDtcbnZhciBIb29rc0Rpc3BhdGNoZXJPbk1vdW50V2l0aEhvb2tUeXBlc0luREVWID0gbnVsbDtcbnZhciBIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWID0gbnVsbDtcbnZhciBIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVYgPSBudWxsO1xudmFyIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVYgPSBudWxsO1xudmFyIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWID0gbnVsbDtcbnZhciBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWID0gbnVsbDtcblxue1xuICB2YXIgd2FybkludmFsaWRDb250ZXh0QWNjZXNzID0gZnVuY3Rpb24gKCkge1xuICAgIGVycm9yKCdDb250ZXh0IGNhbiBvbmx5IGJlIHJlYWQgd2hpbGUgUmVhY3QgaXMgcmVuZGVyaW5nLiAnICsgJ0luIGNsYXNzZXMsIHlvdSBjYW4gcmVhZCBpdCBpbiB0aGUgcmVuZGVyIG1ldGhvZCBvciBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMuICcgKyAnSW4gZnVuY3Rpb24gY29tcG9uZW50cywgeW91IGNhbiByZWFkIGl0IGRpcmVjdGx5IGluIHRoZSBmdW5jdGlvbiBib2R5LCBidXQgbm90ICcgKyAnaW5zaWRlIEhvb2tzIGxpa2UgdXNlUmVkdWNlcigpIG9yIHVzZU1lbW8oKS4nKTtcbiAgfTtcblxuICB2YXIgd2FybkludmFsaWRIb29rQWNjZXNzID0gZnVuY3Rpb24gKCkge1xuICAgIGVycm9yKCdEbyBub3QgY2FsbCBIb29rcyBpbnNpZGUgdXNlRWZmZWN0KC4uLiksIHVzZU1lbW8oLi4uKSwgb3Igb3RoZXIgYnVpbHQtaW4gSG9va3MuICcgKyAnWW91IGNhbiBvbmx5IGNhbGwgSG9va3MgYXQgdGhlIHRvcCBsZXZlbCBvZiB5b3VyIFJlYWN0IGZ1bmN0aW9uLiAnICsgJ0ZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvcnVsZXMtb2YtaG9va3MnKTtcbiAgfTtcblxuICBIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVYgPSB7XG4gICAgcmVhZENvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpO1xuICAgIH0sXG4gICAgdXNlQ2FsbGJhY2s6IGZ1bmN0aW9uIChjYWxsYmFjaywgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ2FsbGJhY2snO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIGNoZWNrRGVwc0FyZUFycmF5RGV2KGRlcHMpO1xuICAgICAgcmV0dXJuIG1vdW50Q2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ29udGV4dCc7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUVmZmVjdCc7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgY2hlY2tEZXBzQXJlQXJyYXlEZXYoZGVwcyk7XG4gICAgICByZXR1cm4gbW91bnRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGU6IGZ1bmN0aW9uIChyZWYsIGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlSW1wZXJhdGl2ZUhhbmRsZSc7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgY2hlY2tEZXBzQXJlQXJyYXlEZXYoZGVwcyk7XG4gICAgICByZXR1cm4gbW91bnRJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUxheW91dEVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTGF5b3V0RWZmZWN0JztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICBjaGVja0RlcHNBcmVBcnJheURldihkZXBzKTtcbiAgICAgIHJldHVybiBtb3VudExheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTWVtbzogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTWVtbyc7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgY2hlY2tEZXBzQXJlQXJyYXlEZXYoZGVwcyk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG1vdW50TWVtbyhjcmVhdGUsIGRlcHMpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZHVjZXI6IGZ1bmN0aW9uIChyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWR1Y2VyJztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG1vdW50UmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWY6IGZ1bmN0aW9uIChpbml0aWFsVmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZic7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50UmVmKGluaXRpYWxWYWx1ZSk7XG4gICAgfSxcbiAgICB1c2VTdGF0ZTogZnVuY3Rpb24gKGluaXRpYWxTdGF0ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlU3RhdGUnO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbW91bnRTdGF0ZShpbml0aWFsU3RhdGUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZURlYnVnVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgZm9ybWF0dGVyRm4pIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlYnVnVmFsdWUnO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudERlYnVnVmFsdWUoKTtcbiAgICB9LFxuICAgIHVzZURlZmVycmVkVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVmZXJyZWRWYWx1ZSc7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50RGVmZXJyZWRWYWx1ZSh2YWx1ZSk7XG4gICAgfSxcbiAgICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VUcmFuc2l0aW9uJztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRUcmFuc2l0aW9uKCk7XG4gICAgfSxcbiAgICB1c2VNdXRhYmxlU291cmNlOiBmdW5jdGlvbiAoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNdXRhYmxlU291cmNlJztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRNdXRhYmxlU291cmNlKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSk7XG4gICAgfSxcbiAgICB1c2VPcGFxdWVJZGVudGlmaWVyOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VPcGFxdWVJZGVudGlmaWVyJztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRPcGFxdWVJZGVudGlmaWVyKCk7XG4gICAgfSxcbiAgICB1bnN0YWJsZV9pc05ld1JlY29uY2lsZXI6IGVuYWJsZU5ld1JlY29uY2lsZXJcbiAgfTtcbiAgSG9va3NEaXNwYXRjaGVyT25Nb3VudFdpdGhIb29rVHlwZXNJbkRFViA9IHtcbiAgICByZWFkQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDYWxsYmFjayc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudENhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUNvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNvbnRleHQnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKTtcbiAgICB9LFxuICAgIHVzZUVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRWZmZWN0JztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VJbXBlcmF0aXZlSGFuZGxlOiBmdW5jdGlvbiAocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUltcGVyYXRpdmVIYW5kbGUnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUxheW91dEVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTGF5b3V0RWZmZWN0JztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50TGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VNZW1vOiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNZW1vJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBtb3VudE1lbW8oY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWR1Y2VyOiBmdW5jdGlvbiAocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVkdWNlcic7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbW91bnRSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZjogZnVuY3Rpb24gKGluaXRpYWxWYWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVmJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50UmVmKGluaXRpYWxWYWx1ZSk7XG4gICAgfSxcbiAgICB1c2VTdGF0ZTogZnVuY3Rpb24gKGluaXRpYWxTdGF0ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlU3RhdGUnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG1vdW50U3RhdGUoaW5pdGlhbFN0YXRlKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VEZWJ1Z1ZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGZvcm1hdHRlckZuKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWJ1Z1ZhbHVlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50RGVidWdWYWx1ZSgpO1xuICAgIH0sXG4gICAgdXNlRGVmZXJyZWRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWZlcnJlZFZhbHVlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50RGVmZXJyZWRWYWx1ZSh2YWx1ZSk7XG4gICAgfSxcbiAgICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VUcmFuc2l0aW9uJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50VHJhbnNpdGlvbigpO1xuICAgIH0sXG4gICAgdXNlTXV0YWJsZVNvdXJjZTogZnVuY3Rpb24gKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTXV0YWJsZVNvdXJjZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudE11dGFibGVTb3VyY2Uoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKTtcbiAgICB9LFxuICAgIHVzZU9wYXF1ZUlkZW50aWZpZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU9wYXF1ZUlkZW50aWZpZXInO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRPcGFxdWVJZGVudGlmaWVyKCk7XG4gICAgfSxcbiAgICB1bnN0YWJsZV9pc05ld1JlY29uY2lsZXI6IGVuYWJsZU5ld1JlY29uY2lsZXJcbiAgfTtcbiAgSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFViA9IHtcbiAgICByZWFkQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDYWxsYmFjayc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDb250ZXh0JztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUVmZmVjdCc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGU6IGZ1bmN0aW9uIChyZWYsIGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlSW1wZXJhdGl2ZUhhbmRsZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUxheW91dEVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTGF5b3V0RWZmZWN0JztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUxheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTWVtbzogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTWVtbyc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZU1lbW8oY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWR1Y2VyOiBmdW5jdGlvbiAocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVkdWNlcic7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZVJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVmOiBmdW5jdGlvbiAoaW5pdGlhbFZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWYnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlUmVmKCk7XG4gICAgfSxcbiAgICB1c2VTdGF0ZTogZnVuY3Rpb24gKGluaXRpYWxTdGF0ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlU3RhdGUnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB1cGRhdGVTdGF0ZShpbml0aWFsU3RhdGUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZURlYnVnVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgZm9ybWF0dGVyRm4pIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlYnVnVmFsdWUnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlRGVidWdWYWx1ZSgpO1xuICAgIH0sXG4gICAgdXNlRGVmZXJyZWRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWZlcnJlZFZhbHVlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZURlZmVycmVkVmFsdWUodmFsdWUpO1xuICAgIH0sXG4gICAgdXNlVHJhbnNpdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlVHJhbnNpdGlvbic7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVUcmFuc2l0aW9uKCk7XG4gICAgfSxcbiAgICB1c2VNdXRhYmxlU291cmNlOiBmdW5jdGlvbiAoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNdXRhYmxlU291cmNlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZU11dGFibGVTb3VyY2Uoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKTtcbiAgICB9LFxuICAgIHVzZU9wYXF1ZUlkZW50aWZpZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU9wYXF1ZUlkZW50aWZpZXInO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlT3BhcXVlSWRlbnRpZmllcigpO1xuICAgIH0sXG4gICAgdW5zdGFibGVfaXNOZXdSZWNvbmNpbGVyOiBlbmFibGVOZXdSZWNvbmNpbGVyXG4gIH07XG4gIEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFViA9IHtcbiAgICByZWFkQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDYWxsYmFjayc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDb250ZXh0JztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUVmZmVjdCc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGU6IGZ1bmN0aW9uIChyZWYsIGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlSW1wZXJhdGl2ZUhhbmRsZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUxheW91dEVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTGF5b3V0RWZmZWN0JztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUxheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTWVtbzogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTWVtbyc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdXBkYXRlTWVtbyhjcmVhdGUsIGRlcHMpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZHVjZXI6IGZ1bmN0aW9uIChyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWR1Y2VyJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiByZXJlbmRlclJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVmOiBmdW5jdGlvbiAoaW5pdGlhbFZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWYnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlUmVmKCk7XG4gICAgfSxcbiAgICB1c2VTdGF0ZTogZnVuY3Rpb24gKGluaXRpYWxTdGF0ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlU3RhdGUnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHJlcmVuZGVyU3RhdGUoaW5pdGlhbFN0YXRlKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VEZWJ1Z1ZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGZvcm1hdHRlckZuKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWJ1Z1ZhbHVlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZURlYnVnVmFsdWUoKTtcbiAgICB9LFxuICAgIHVzZURlZmVycmVkVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVmZXJyZWRWYWx1ZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZXJlbmRlckRlZmVycmVkVmFsdWUodmFsdWUpO1xuICAgIH0sXG4gICAgdXNlVHJhbnNpdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlVHJhbnNpdGlvbic7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZXJlbmRlclRyYW5zaXRpb24oKTtcbiAgICB9LFxuICAgIHVzZU11dGFibGVTb3VyY2U6IGZ1bmN0aW9uIChzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU11dGFibGVTb3VyY2UnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlTXV0YWJsZVNvdXJjZShzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpO1xuICAgIH0sXG4gICAgdXNlT3BhcXVlSWRlbnRpZmllcjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlT3BhcXVlSWRlbnRpZmllcic7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZXJlbmRlck9wYXF1ZUlkZW50aWZpZXIoKTtcbiAgICB9LFxuICAgIHVuc3RhYmxlX2lzTmV3UmVjb25jaWxlcjogZW5hYmxlTmV3UmVjb25jaWxlclxuICB9O1xuICBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWID0ge1xuICAgIHJlYWRDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICB3YXJuSW52YWxpZENvbnRleHRBY2Nlc3MoKTtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpO1xuICAgIH0sXG4gICAgdXNlQ2FsbGJhY2s6IGZ1bmN0aW9uIChjYWxsYmFjaywgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ2FsbGJhY2snO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50Q2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ29udGV4dCc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKTtcbiAgICB9LFxuICAgIHVzZUVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRWZmZWN0JztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudEVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogZnVuY3Rpb24gKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VJbXBlcmF0aXZlSGFuZGxlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudEltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTGF5b3V0RWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VMYXlvdXRFZmZlY3QnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50TGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VNZW1vOiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNZW1vJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbW91bnRNZW1vKGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVkdWNlcjogZnVuY3Rpb24gKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZHVjZXInO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBtb3VudFJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVmOiBmdW5jdGlvbiAoaW5pdGlhbFZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWYnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50UmVmKGluaXRpYWxWYWx1ZSk7XG4gICAgfSxcbiAgICB1c2VTdGF0ZTogZnVuY3Rpb24gKGluaXRpYWxTdGF0ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlU3RhdGUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBtb3VudFN0YXRlKGluaXRpYWxTdGF0ZSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlRGVidWdWYWx1ZTogZnVuY3Rpb24gKHZhbHVlLCBmb3JtYXR0ZXJGbikge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVidWdWYWx1ZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnREZWJ1Z1ZhbHVlKCk7XG4gICAgfSxcbiAgICB1c2VEZWZlcnJlZFZhbHVlOiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlZmVycmVkVmFsdWUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50RGVmZXJyZWRWYWx1ZSh2YWx1ZSk7XG4gICAgfSxcbiAgICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VUcmFuc2l0aW9uJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudFRyYW5zaXRpb24oKTtcbiAgICB9LFxuICAgIHVzZU11dGFibGVTb3VyY2U6IGZ1bmN0aW9uIChzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU11dGFibGVTb3VyY2UnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50TXV0YWJsZVNvdXJjZShzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpO1xuICAgIH0sXG4gICAgdXNlT3BhcXVlSWRlbnRpZmllcjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlT3BhcXVlSWRlbnRpZmllcic7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRPcGFxdWVJZGVudGlmaWVyKCk7XG4gICAgfSxcbiAgICB1bnN0YWJsZV9pc05ld1JlY29uY2lsZXI6IGVuYWJsZU5ld1JlY29uY2lsZXJcbiAgfTtcbiAgSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYgPSB7XG4gICAgcmVhZENvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAgICAgIHdhcm5JbnZhbGlkQ29udGV4dEFjY2VzcygpO1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDYWxsYmFjayc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUNhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUNvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNvbnRleHQnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpO1xuICAgIH0sXG4gICAgdXNlRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VFZmZlY3QnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGU6IGZ1bmN0aW9uIChyZWYsIGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlSW1wZXJhdGl2ZUhhbmRsZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTGF5b3V0RWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VMYXlvdXRFZmZlY3QnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZU1lbW86IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU1lbW8nO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZU1lbW8oY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWR1Y2VyOiBmdW5jdGlvbiAocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVkdWNlcic7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdXBkYXRlUmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWY6IGZ1bmN0aW9uIChpbml0aWFsVmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZic7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZVJlZigpO1xuICAgIH0sXG4gICAgdXNlU3RhdGU6IGZ1bmN0aW9uIChpbml0aWFsU3RhdGUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVN0YXRlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB1cGRhdGVTdGF0ZShpbml0aWFsU3RhdGUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZURlYnVnVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgZm9ybWF0dGVyRm4pIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlYnVnVmFsdWUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVEZWJ1Z1ZhbHVlKCk7XG4gICAgfSxcbiAgICB1c2VEZWZlcnJlZFZhbHVlOiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlZmVycmVkVmFsdWUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVEZWZlcnJlZFZhbHVlKHZhbHVlKTtcbiAgICB9LFxuICAgIHVzZVRyYW5zaXRpb246IGZ1bmN0aW9uICgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVRyYW5zaXRpb24nO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVUcmFuc2l0aW9uKCk7XG4gICAgfSxcbiAgICB1c2VNdXRhYmxlU291cmNlOiBmdW5jdGlvbiAoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNdXRhYmxlU291cmNlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlTXV0YWJsZVNvdXJjZShzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpO1xuICAgIH0sXG4gICAgdXNlT3BhcXVlSWRlbnRpZmllcjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlT3BhcXVlSWRlbnRpZmllcic7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZU9wYXF1ZUlkZW50aWZpZXIoKTtcbiAgICB9LFxuICAgIHVuc3RhYmxlX2lzTmV3UmVjb25jaWxlcjogZW5hYmxlTmV3UmVjb25jaWxlclxuICB9O1xuICBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWID0ge1xuICAgIHJlYWRDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICB3YXJuSW52YWxpZENvbnRleHRBY2Nlc3MoKTtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpO1xuICAgIH0sXG4gICAgdXNlQ2FsbGJhY2s6IGZ1bmN0aW9uIChjYWxsYmFjaywgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ2FsbGJhY2snO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDb250ZXh0JztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKTtcbiAgICB9LFxuICAgIHVzZUVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRWZmZWN0JztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlRWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VJbXBlcmF0aXZlSGFuZGxlOiBmdW5jdGlvbiAocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUltcGVyYXRpdmVIYW5kbGUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUxheW91dEVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTGF5b3V0RWZmZWN0JztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlTGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VNZW1vOiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNZW1vJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB1cGRhdGVNZW1vKGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVkdWNlcjogZnVuY3Rpb24gKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZHVjZXInO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHJlcmVuZGVyUmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWY6IGZ1bmN0aW9uIChpbml0aWFsVmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZic7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZVJlZigpO1xuICAgIH0sXG4gICAgdXNlU3RhdGU6IGZ1bmN0aW9uIChpbml0aWFsU3RhdGUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVN0YXRlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiByZXJlbmRlclN0YXRlKGluaXRpYWxTdGF0ZSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlRGVidWdWYWx1ZTogZnVuY3Rpb24gKHZhbHVlLCBmb3JtYXR0ZXJGbikge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVidWdWYWx1ZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZURlYnVnVmFsdWUoKTtcbiAgICB9LFxuICAgIHVzZURlZmVycmVkVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVmZXJyZWRWYWx1ZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlcmVuZGVyRGVmZXJyZWRWYWx1ZSh2YWx1ZSk7XG4gICAgfSxcbiAgICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VUcmFuc2l0aW9uJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gcmVyZW5kZXJUcmFuc2l0aW9uKCk7XG4gICAgfSxcbiAgICB1c2VNdXRhYmxlU291cmNlOiBmdW5jdGlvbiAoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNdXRhYmxlU291cmNlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlTXV0YWJsZVNvdXJjZShzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpO1xuICAgIH0sXG4gICAgdXNlT3BhcXVlSWRlbnRpZmllcjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlT3BhcXVlSWRlbnRpZmllcic7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlcmVuZGVyT3BhcXVlSWRlbnRpZmllcigpO1xuICAgIH0sXG4gICAgdW5zdGFibGVfaXNOZXdSZWNvbmNpbGVyOiBlbmFibGVOZXdSZWNvbmNpbGVyXG4gIH07XG59XG5cbnZhciBub3ckMSA9IFNjaGVkdWxlci51bnN0YWJsZV9ub3c7XG52YXIgY29tbWl0VGltZSA9IDA7XG52YXIgcHJvZmlsZXJTdGFydFRpbWUgPSAtMTtcblxuZnVuY3Rpb24gZ2V0Q29tbWl0VGltZSgpIHtcbiAgcmV0dXJuIGNvbW1pdFRpbWU7XG59XG5cbmZ1bmN0aW9uIHJlY29yZENvbW1pdFRpbWUoKSB7XG5cbiAgY29tbWl0VGltZSA9IG5vdyQxKCk7XG59XG5cbmZ1bmN0aW9uIHN0YXJ0UHJvZmlsZXJUaW1lcihmaWJlcikge1xuXG4gIHByb2ZpbGVyU3RhcnRUaW1lID0gbm93JDEoKTtcblxuICBpZiAoZmliZXIuYWN0dWFsU3RhcnRUaW1lIDwgMCkge1xuICAgIGZpYmVyLmFjdHVhbFN0YXJ0VGltZSA9IG5vdyQxKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc3RvcFByb2ZpbGVyVGltZXJJZlJ1bm5pbmcoZmliZXIpIHtcblxuICBwcm9maWxlclN0YXJ0VGltZSA9IC0xO1xufVxuXG5mdW5jdGlvbiBzdG9wUHJvZmlsZXJUaW1lcklmUnVubmluZ0FuZFJlY29yZERlbHRhKGZpYmVyLCBvdmVycmlkZUJhc2VUaW1lKSB7XG5cbiAgaWYgKHByb2ZpbGVyU3RhcnRUaW1lID49IDApIHtcbiAgICB2YXIgZWxhcHNlZFRpbWUgPSBub3ckMSgpIC0gcHJvZmlsZXJTdGFydFRpbWU7XG4gICAgZmliZXIuYWN0dWFsRHVyYXRpb24gKz0gZWxhcHNlZFRpbWU7XG5cbiAgICBpZiAob3ZlcnJpZGVCYXNlVGltZSkge1xuICAgICAgZmliZXIuc2VsZkJhc2VEdXJhdGlvbiA9IGVsYXBzZWRUaW1lO1xuICAgIH1cblxuICAgIHByb2ZpbGVyU3RhcnRUaW1lID0gLTE7XG4gIH1cbn1cblxuZnVuY3Rpb24gdHJhbnNmZXJBY3R1YWxEdXJhdGlvbihmaWJlcikge1xuICAvLyBUcmFuc2ZlciB0aW1lIHNwZW50IHJlbmRlcmluZyB0aGVzZSBjaGlsZHJlbiBzbyB3ZSBkb24ndCBsb3NlIGl0XG4gIC8vIGFmdGVyIHdlIHJlcmVuZGVyLiBUaGlzIGlzIHVzZWQgYXMgYSBoZWxwZXIgaW4gc3BlY2lhbCBjYXNlc1xuICAvLyB3aGVyZSB3ZSBzaG91bGQgY291bnQgdGhlIHdvcmsgb2YgbXVsdGlwbGUgcGFzc2VzLlxuICB2YXIgY2hpbGQgPSBmaWJlci5jaGlsZDtcblxuICB3aGlsZSAoY2hpbGQpIHtcbiAgICBmaWJlci5hY3R1YWxEdXJhdGlvbiArPSBjaGlsZC5hY3R1YWxEdXJhdGlvbjtcbiAgICBjaGlsZCA9IGNoaWxkLnNpYmxpbmc7XG4gIH1cbn1cblxudmFyIFJlYWN0Q3VycmVudE93bmVyJDEgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnRPd25lcjtcbnZhciBkaWRSZWNlaXZlVXBkYXRlID0gZmFsc2U7XG52YXIgZGlkV2FybkFib3V0QmFkQ2xhc3M7XG52YXIgZGlkV2FybkFib3V0TW9kdWxlUGF0dGVybkNvbXBvbmVudDtcbnZhciBkaWRXYXJuQWJvdXRDb250ZXh0VHlwZU9uRnVuY3Rpb25Db21wb25lbnQ7XG52YXIgZGlkV2FybkFib3V0R2V0RGVyaXZlZFN0YXRlT25GdW5jdGlvbkNvbXBvbmVudDtcbnZhciBkaWRXYXJuQWJvdXRGdW5jdGlvblJlZnM7XG52YXIgZGlkV2FybkFib3V0UmVhc3NpZ25pbmdQcm9wcztcbnZhciBkaWRXYXJuQWJvdXRSZXZlYWxPcmRlcjtcbnZhciBkaWRXYXJuQWJvdXRUYWlsT3B0aW9ucztcblxue1xuICBkaWRXYXJuQWJvdXRCYWRDbGFzcyA9IHt9O1xuICBkaWRXYXJuQWJvdXRNb2R1bGVQYXR0ZXJuQ29tcG9uZW50ID0ge307XG4gIGRpZFdhcm5BYm91dENvbnRleHRUeXBlT25GdW5jdGlvbkNvbXBvbmVudCA9IHt9O1xuICBkaWRXYXJuQWJvdXRHZXREZXJpdmVkU3RhdGVPbkZ1bmN0aW9uQ29tcG9uZW50ID0ge307XG4gIGRpZFdhcm5BYm91dEZ1bmN0aW9uUmVmcyA9IHt9O1xuICBkaWRXYXJuQWJvdXRSZWFzc2lnbmluZ1Byb3BzID0gZmFsc2U7XG4gIGRpZFdhcm5BYm91dFJldmVhbE9yZGVyID0ge307XG4gIGRpZFdhcm5BYm91dFRhaWxPcHRpb25zID0ge307XG59XG5cbmZ1bmN0aW9uIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKSB7XG4gIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgLy8gSWYgdGhpcyBpcyBhIGZyZXNoIG5ldyBjb21wb25lbnQgdGhhdCBoYXNuJ3QgYmVlbiByZW5kZXJlZCB5ZXQsIHdlXG4gICAgLy8gd29uJ3QgdXBkYXRlIGl0cyBjaGlsZCBzZXQgYnkgYXBwbHlpbmcgbWluaW1hbCBzaWRlLWVmZmVjdHMuIEluc3RlYWQsXG4gICAgLy8gd2Ugd2lsbCBhZGQgdGhlbSBhbGwgdG8gdGhlIGNoaWxkIGJlZm9yZSBpdCBnZXRzIHJlbmRlcmVkLiBUaGF0IG1lYW5zXG4gICAgLy8gd2UgY2FuIG9wdGltaXplIHRoaXMgcmVjb25jaWxpYXRpb24gcGFzcyBieSBub3QgdHJhY2tpbmcgc2lkZS1lZmZlY3RzLlxuICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gbW91bnRDaGlsZEZpYmVycyh3b3JrSW5Qcm9ncmVzcywgbnVsbCwgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIH0gZWxzZSB7XG4gICAgLy8gSWYgdGhlIGN1cnJlbnQgY2hpbGQgaXMgdGhlIHNhbWUgYXMgdGhlIHdvcmsgaW4gcHJvZ3Jlc3MsIGl0IG1lYW5zIHRoYXRcbiAgICAvLyB3ZSBoYXZlbid0IHlldCBzdGFydGVkIGFueSB3b3JrIG9uIHRoZXNlIGNoaWxkcmVuLiBUaGVyZWZvcmUsIHdlIHVzZVxuICAgIC8vIHRoZSBjbG9uZSBhbGdvcml0aG0gdG8gY3JlYXRlIGEgY29weSBvZiBhbGwgdGhlIGN1cnJlbnQgY2hpbGRyZW4uXG4gICAgLy8gSWYgd2UgaGFkIGFueSBwcm9ncmVzc2VkIHdvcmsgYWxyZWFkeSwgdGhhdCBpcyBpbnZhbGlkIGF0IHRoaXMgcG9pbnQgc29cbiAgICAvLyBsZXQncyB0aHJvdyBpdCBvdXQuXG4gICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSByZWNvbmNpbGVDaGlsZEZpYmVycyh3b3JrSW5Qcm9ncmVzcywgY3VycmVudC5jaGlsZCwgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZm9yY2VVbm1vdW50Q3VycmVudEFuZFJlY29uY2lsZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcykge1xuICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGZvcmsgb2YgcmVjb25jaWxlQ2hpbGRyZW4uIEl0J3MgdXNlZCBpbiBjYXNlcyB3aGVyZSB3ZVxuICAvLyB3YW50IHRvIHJlY29uY2lsZSB3aXRob3V0IG1hdGNoaW5nIGFnYWluc3QgdGhlIGV4aXN0aW5nIHNldC4gVGhpcyBoYXMgdGhlXG4gIC8vIGVmZmVjdCBvZiBhbGwgY3VycmVudCBjaGlsZHJlbiBiZWluZyB1bm1vdW50ZWQ7IGV2ZW4gaWYgdGhlIHR5cGUgYW5kIGtleVxuICAvLyBhcmUgdGhlIHNhbWUsIHRoZSBvbGQgY2hpbGQgaXMgdW5tb3VudGVkIGFuZCBhIG5ldyBjaGlsZCBpcyBjcmVhdGVkLlxuICAvL1xuICAvLyBUbyBkbyB0aGlzLCB3ZSdyZSBnb2luZyB0byBnbyB0aHJvdWdoIHRoZSByZWNvbmNpbGUgYWxnb3JpdGhtIHR3aWNlLiBJblxuICAvLyB0aGUgZmlyc3QgcGFzcywgd2Ugc2NoZWR1bGUgYSBkZWxldGlvbiBmb3IgYWxsIHRoZSBjdXJyZW50IGNoaWxkcmVuIGJ5XG4gIC8vIHBhc3NpbmcgbnVsbC5cbiAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSByZWNvbmNpbGVDaGlsZEZpYmVycyh3b3JrSW5Qcm9ncmVzcywgY3VycmVudC5jaGlsZCwgbnVsbCwgcmVuZGVyTGFuZXMpOyAvLyBJbiB0aGUgc2Vjb25kIHBhc3MsIHdlIG1vdW50IHRoZSBuZXcgY2hpbGRyZW4uIFRoZSB0cmljayBoZXJlIGlzIHRoYXQgd2VcbiAgLy8gcGFzcyBudWxsIGluIHBsYWNlIG9mIHdoZXJlIHdlIHVzdWFsbHkgcGFzcyB0aGUgY3VycmVudCBjaGlsZCBzZXQuIFRoaXMgaGFzXG4gIC8vIHRoZSBlZmZlY3Qgb2YgcmVtb3VudGluZyBhbGwgY2hpbGRyZW4gcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZWlyXG4gIC8vIGlkZW50aXRpZXMgbWF0Y2guXG5cbiAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSByZWNvbmNpbGVDaGlsZEZpYmVycyh3b3JrSW5Qcm9ncmVzcywgbnVsbCwgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUZvcndhcmRSZWYoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCByZW5kZXJMYW5lcykge1xuICAvLyBUT0RPOiBjdXJyZW50IGNhbiBiZSBub24tbnVsbCBoZXJlIGV2ZW4gaWYgdGhlIGNvbXBvbmVudFxuICAvLyBoYXNuJ3QgeWV0IG1vdW50ZWQuIFRoaXMgaGFwcGVucyBhZnRlciB0aGUgZmlyc3QgcmVuZGVyIHN1c3BlbmRzLlxuICAvLyBXZSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBpcyBmaW5lIG9yIGNhbiBjYXVzZSBpc3N1ZXMuXG4gIHtcbiAgICBpZiAod29ya0luUHJvZ3Jlc3MudHlwZSAhPT0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUpIHtcbiAgICAgIC8vIExhenkgY29tcG9uZW50IHByb3BzIGNhbid0IGJlIHZhbGlkYXRlZCBpbiBjcmVhdGVFbGVtZW50XG4gICAgICAvLyBiZWNhdXNlIHRoZXkncmUgb25seSBndWFyYW50ZWVkIHRvIGJlIHJlc29sdmVkIGhlcmUuXG4gICAgICB2YXIgaW5uZXJQcm9wVHlwZXMgPSBDb21wb25lbnQucHJvcFR5cGVzO1xuXG4gICAgICBpZiAoaW5uZXJQcm9wVHlwZXMpIHtcbiAgICAgICAgY2hlY2tQcm9wVHlwZXMoaW5uZXJQcm9wVHlwZXMsIG5leHRQcm9wcywgLy8gUmVzb2x2ZWQgcHJvcHNcbiAgICAgICAgJ3Byb3AnLCBnZXRDb21wb25lbnROYW1lKENvbXBvbmVudCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciByZW5kZXIgPSBDb21wb25lbnQucmVuZGVyO1xuICB2YXIgcmVmID0gd29ya0luUHJvZ3Jlc3MucmVmOyAvLyBUaGUgcmVzdCBpcyBhIGZvcmsgb2YgdXBkYXRlRnVuY3Rpb25Db21wb25lbnRcblxuICB2YXIgbmV4dENoaWxkcmVuO1xuICBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuXG4gIHtcbiAgICBSZWFjdEN1cnJlbnRPd25lciQxLmN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcztcbiAgICBzZXRJc1JlbmRlcmluZyh0cnVlKTtcbiAgICBuZXh0Q2hpbGRyZW4gPSByZW5kZXJXaXRoSG9va3MoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlciwgbmV4dFByb3BzLCByZWYsIHJlbmRlckxhbmVzKTtcblxuICAgIGlmICggd29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdE1vZGUpIHtcbiAgICAgIGRpc2FibGVMb2dzKCk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIG5leHRDaGlsZHJlbiA9IHJlbmRlcldpdGhIb29rcyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyLCBuZXh0UHJvcHMsIHJlZiwgcmVuZGVyTGFuZXMpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc2V0SXNSZW5kZXJpbmcoZmFsc2UpO1xuICB9XG5cbiAgaWYgKGN1cnJlbnQgIT09IG51bGwgJiYgIWRpZFJlY2VpdmVVcGRhdGUpIHtcbiAgICBiYWlsb3V0SG9va3MoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICB9IC8vIFJlYWN0IERldlRvb2xzIHJlYWRzIHRoaXMgZmxhZy5cblxuXG4gIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBlcmZvcm1lZFdvcms7XG4gIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVNZW1vQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgdXBkYXRlTGFuZXMsIHJlbmRlckxhbmVzKSB7XG4gIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgdmFyIHR5cGUgPSBDb21wb25lbnQudHlwZTtcblxuICAgIGlmIChpc1NpbXBsZUZ1bmN0aW9uQ29tcG9uZW50KHR5cGUpICYmIENvbXBvbmVudC5jb21wYXJlID09PSBudWxsICYmIC8vIFNpbXBsZU1lbW9Db21wb25lbnQgY29kZXBhdGggZG9lc24ndCByZXNvbHZlIG91dGVyIHByb3BzIGVpdGhlci5cbiAgICBDb21wb25lbnQuZGVmYXVsdFByb3BzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhciByZXNvbHZlZFR5cGUgPSB0eXBlO1xuXG4gICAgICB7XG4gICAgICAgIHJlc29sdmVkVHlwZSA9IHJlc29sdmVGdW5jdGlvbkZvckhvdFJlbG9hZGluZyh0eXBlKTtcbiAgICAgIH0gLy8gSWYgdGhpcyBpcyBhIHBsYWluIGZ1bmN0aW9uIGNvbXBvbmVudCB3aXRob3V0IGRlZmF1bHQgcHJvcHMsXG4gICAgICAvLyBhbmQgd2l0aCBvbmx5IHRoZSBkZWZhdWx0IHNoYWxsb3cgY29tcGFyaXNvbiwgd2UgdXBncmFkZSBpdFxuICAgICAgLy8gdG8gYSBTaW1wbGVNZW1vQ29tcG9uZW50IHRvIGFsbG93IGZhc3QgcGF0aCB1cGRhdGVzLlxuXG5cbiAgICAgIHdvcmtJblByb2dyZXNzLnRhZyA9IFNpbXBsZU1lbW9Db21wb25lbnQ7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gcmVzb2x2ZWRUeXBlO1xuXG4gICAgICB7XG4gICAgICAgIHZhbGlkYXRlRnVuY3Rpb25Db21wb25lbnRJbkRldih3b3JrSW5Qcm9ncmVzcywgdHlwZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB1cGRhdGVTaW1wbGVNZW1vQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZXNvbHZlZFR5cGUsIG5leHRQcm9wcywgdXBkYXRlTGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgICB9XG5cbiAgICB7XG4gICAgICB2YXIgaW5uZXJQcm9wVHlwZXMgPSB0eXBlLnByb3BUeXBlcztcblxuICAgICAgaWYgKGlubmVyUHJvcFR5cGVzKSB7XG4gICAgICAgIC8vIElubmVyIG1lbW8gY29tcG9uZW50IHByb3BzIGFyZW4ndCBjdXJyZW50bHkgdmFsaWRhdGVkIGluIGNyZWF0ZUVsZW1lbnQuXG4gICAgICAgIC8vIFdlIGNvdWxkIG1vdmUgaXQgdGhlcmUsIGJ1dCB3ZSdkIHN0aWxsIG5lZWQgdGhpcyBmb3IgbGF6eSBjb2RlIHBhdGguXG4gICAgICAgIGNoZWNrUHJvcFR5cGVzKGlubmVyUHJvcFR5cGVzLCBuZXh0UHJvcHMsIC8vIFJlc29sdmVkIHByb3BzXG4gICAgICAgICdwcm9wJywgZ2V0Q29tcG9uZW50TmFtZSh0eXBlKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGNoaWxkID0gY3JlYXRlRmliZXJGcm9tVHlwZUFuZFByb3BzKENvbXBvbmVudC50eXBlLCBudWxsLCBuZXh0UHJvcHMsIHdvcmtJblByb2dyZXNzLCB3b3JrSW5Qcm9ncmVzcy5tb2RlLCByZW5kZXJMYW5lcyk7XG4gICAgY2hpbGQucmVmID0gd29ya0luUHJvZ3Jlc3MucmVmO1xuICAgIGNoaWxkLnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gY2hpbGQ7XG4gICAgcmV0dXJuIGNoaWxkO1xuICB9XG5cbiAge1xuICAgIHZhciBfdHlwZSA9IENvbXBvbmVudC50eXBlO1xuICAgIHZhciBfaW5uZXJQcm9wVHlwZXMgPSBfdHlwZS5wcm9wVHlwZXM7XG5cbiAgICBpZiAoX2lubmVyUHJvcFR5cGVzKSB7XG4gICAgICAvLyBJbm5lciBtZW1vIGNvbXBvbmVudCBwcm9wcyBhcmVuJ3QgY3VycmVudGx5IHZhbGlkYXRlZCBpbiBjcmVhdGVFbGVtZW50LlxuICAgICAgLy8gV2UgY291bGQgbW92ZSBpdCB0aGVyZSwgYnV0IHdlJ2Qgc3RpbGwgbmVlZCB0aGlzIGZvciBsYXp5IGNvZGUgcGF0aC5cbiAgICAgIGNoZWNrUHJvcFR5cGVzKF9pbm5lclByb3BUeXBlcywgbmV4dFByb3BzLCAvLyBSZXNvbHZlZCBwcm9wc1xuICAgICAgJ3Byb3AnLCBnZXRDb21wb25lbnROYW1lKF90eXBlKSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGN1cnJlbnRDaGlsZCA9IGN1cnJlbnQuY2hpbGQ7IC8vIFRoaXMgaXMgYWx3YXlzIGV4YWN0bHkgb25lIGNoaWxkXG5cbiAgaWYgKCFpbmNsdWRlc1NvbWVMYW5lKHVwZGF0ZUxhbmVzLCByZW5kZXJMYW5lcykpIHtcbiAgICAvLyBUaGlzIHdpbGwgYmUgdGhlIHByb3BzIHdpdGggcmVzb2x2ZWQgZGVmYXVsdFByb3BzLFxuICAgIC8vIHVubGlrZSBjdXJyZW50Lm1lbW9pemVkUHJvcHMgd2hpY2ggd2lsbCBiZSB0aGUgdW5yZXNvbHZlZCBvbmVzLlxuICAgIHZhciBwcmV2UHJvcHMgPSBjdXJyZW50Q2hpbGQubWVtb2l6ZWRQcm9wczsgLy8gRGVmYXVsdCB0byBzaGFsbG93IGNvbXBhcmlzb25cblxuICAgIHZhciBjb21wYXJlID0gQ29tcG9uZW50LmNvbXBhcmU7XG4gICAgY29tcGFyZSA9IGNvbXBhcmUgIT09IG51bGwgPyBjb21wYXJlIDogc2hhbGxvd0VxdWFsO1xuXG4gICAgaWYgKGNvbXBhcmUocHJldlByb3BzLCBuZXh0UHJvcHMpICYmIGN1cnJlbnQucmVmID09PSB3b3JrSW5Qcm9ncmVzcy5yZWYpIHtcbiAgICAgIHJldHVybiBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgfVxuICB9IC8vIFJlYWN0IERldlRvb2xzIHJlYWRzIHRoaXMgZmxhZy5cblxuXG4gIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBlcmZvcm1lZFdvcms7XG4gIHZhciBuZXdDaGlsZCA9IGNyZWF0ZVdvcmtJblByb2dyZXNzKGN1cnJlbnRDaGlsZCwgbmV4dFByb3BzKTtcbiAgbmV3Q2hpbGQucmVmID0gd29ya0luUHJvZ3Jlc3MucmVmO1xuICBuZXdDaGlsZC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBuZXdDaGlsZDtcbiAgcmV0dXJuIG5ld0NoaWxkO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVTaW1wbGVNZW1vQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgdXBkYXRlTGFuZXMsIHJlbmRlckxhbmVzKSB7XG4gIC8vIFRPRE86IGN1cnJlbnQgY2FuIGJlIG5vbi1udWxsIGhlcmUgZXZlbiBpZiB0aGUgY29tcG9uZW50XG4gIC8vIGhhc24ndCB5ZXQgbW91bnRlZC4gVGhpcyBoYXBwZW5zIHdoZW4gdGhlIGlubmVyIHJlbmRlciBzdXNwZW5kcy5cbiAgLy8gV2UnbGwgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgaXMgZmluZSBvciBjYW4gY2F1c2UgaXNzdWVzLlxuICB7XG4gICAgaWYgKHdvcmtJblByb2dyZXNzLnR5cGUgIT09IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlKSB7XG4gICAgICAvLyBMYXp5IGNvbXBvbmVudCBwcm9wcyBjYW4ndCBiZSB2YWxpZGF0ZWQgaW4gY3JlYXRlRWxlbWVudFxuICAgICAgLy8gYmVjYXVzZSB0aGV5J3JlIG9ubHkgZ3VhcmFudGVlZCB0byBiZSByZXNvbHZlZCBoZXJlLlxuICAgICAgdmFyIG91dGVyTWVtb1R5cGUgPSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZTtcblxuICAgICAgaWYgKG91dGVyTWVtb1R5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSkge1xuICAgICAgICAvLyBXZSB3YXJuIHdoZW4geW91IGRlZmluZSBwcm9wVHlwZXMgb24gbGF6eSgpXG4gICAgICAgIC8vIHNvIGxldCdzIGp1c3Qgc2tpcCBvdmVyIGl0IHRvIGZpbmQgbWVtbygpIG91dGVyIHdyYXBwZXIuXG4gICAgICAgIC8vIElubmVyIHByb3BzIGZvciBtZW1vIGFyZSB2YWxpZGF0ZWQgbGF0ZXIuXG4gICAgICAgIHZhciBsYXp5Q29tcG9uZW50ID0gb3V0ZXJNZW1vVHlwZTtcbiAgICAgICAgdmFyIHBheWxvYWQgPSBsYXp5Q29tcG9uZW50Ll9wYXlsb2FkO1xuICAgICAgICB2YXIgaW5pdCA9IGxhenlDb21wb25lbnQuX2luaXQ7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBvdXRlck1lbW9UeXBlID0gaW5pdChwYXlsb2FkKTtcbiAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgIG91dGVyTWVtb1R5cGUgPSBudWxsO1xuICAgICAgICB9IC8vIElubmVyIHByb3BUeXBlcyB3aWxsIGJlIHZhbGlkYXRlZCBpbiB0aGUgZnVuY3Rpb24gY29tcG9uZW50IHBhdGguXG5cblxuICAgICAgICB2YXIgb3V0ZXJQcm9wVHlwZXMgPSBvdXRlck1lbW9UeXBlICYmIG91dGVyTWVtb1R5cGUucHJvcFR5cGVzO1xuXG4gICAgICAgIGlmIChvdXRlclByb3BUeXBlcykge1xuICAgICAgICAgIGNoZWNrUHJvcFR5cGVzKG91dGVyUHJvcFR5cGVzLCBuZXh0UHJvcHMsIC8vIFJlc29sdmVkIChTaW1wbGVNZW1vQ29tcG9uZW50IGhhcyBubyBkZWZhdWx0UHJvcHMpXG4gICAgICAgICAgJ3Byb3AnLCBnZXRDb21wb25lbnROYW1lKG91dGVyTWVtb1R5cGUpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgdmFyIHByZXZQcm9wcyA9IGN1cnJlbnQubWVtb2l6ZWRQcm9wcztcblxuICAgIGlmIChzaGFsbG93RXF1YWwocHJldlByb3BzLCBuZXh0UHJvcHMpICYmIGN1cnJlbnQucmVmID09PSB3b3JrSW5Qcm9ncmVzcy5yZWYgJiYgKCAvLyBQcmV2ZW50IGJhaWxvdXQgaWYgdGhlIGltcGxlbWVudGF0aW9uIGNoYW5nZWQgZHVlIHRvIGhvdCByZWxvYWQuXG4gICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPT09IGN1cnJlbnQudHlwZSApKSB7XG4gICAgICBkaWRSZWNlaXZlVXBkYXRlID0gZmFsc2U7XG5cbiAgICAgIGlmICghaW5jbHVkZXNTb21lTGFuZShyZW5kZXJMYW5lcywgdXBkYXRlTGFuZXMpKSB7XG4gICAgICAgIC8vIFRoZSBwZW5kaW5nIGxhbmVzIHdlcmUgY2xlYXJlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGJlZ2luV29yay4gV2UncmVcbiAgICAgICAgLy8gYWJvdXQgdG8gYmFpbCBvdXQsIGJ1dCB0aGVyZSBtaWdodCBiZSBvdGhlciBsYW5lcyB0aGF0IHdlcmVuJ3RcbiAgICAgICAgLy8gaW5jbHVkZWQgaW4gdGhlIGN1cnJlbnQgcmVuZGVyLiBVc3VhbGx5LCB0aGUgcHJpb3JpdHkgbGV2ZWwgb2YgdGhlXG4gICAgICAgIC8vIHJlbWFpbmluZyB1cGRhdGVzIGlzIGFjY3VtbGF0ZWQgZHVyaW5nIHRoZSBldmFsdWF0aW9uIG9mIHRoZVxuICAgICAgICAvLyBjb21wb25lbnQgKGkuZS4gd2hlbiBwcm9jZXNzaW5nIHRoZSB1cGRhdGUgcXVldWUpLiBCdXQgc2luY2Ugc2luY2VcbiAgICAgICAgLy8gd2UncmUgYmFpbGluZyBvdXQgZWFybHkgKndpdGhvdXQqIGV2YWx1YXRpbmcgdGhlIGNvbXBvbmVudCwgd2UgbmVlZFxuICAgICAgICAvLyB0byBhY2NvdW50IGZvciBpdCBoZXJlLCB0b28uIFJlc2V0IHRvIHRoZSB2YWx1ZSBvZiB0aGUgY3VycmVudCBmaWJlci5cbiAgICAgICAgLy8gTk9URTogVGhpcyBvbmx5IGFwcGxpZXMgdG8gU2ltcGxlTWVtb0NvbXBvbmVudCwgbm90IE1lbW9Db21wb25lbnQsXG4gICAgICAgIC8vIGJlY2F1c2UgYSBNZW1vQ29tcG9uZW50IGZpYmVyIGRvZXMgbm90IGhhdmUgaG9va3Mgb3IgYW4gdXBkYXRlIHF1ZXVlO1xuICAgICAgICAvLyByYXRoZXIsIGl0IHdyYXBzIGFyb3VuZCBhbiBpbm5lciBjb21wb25lbnQsIHdoaWNoIG1heSBvciBtYXkgbm90XG4gICAgICAgIC8vIGNvbnRhaW5zIGhvb2tzLlxuICAgICAgICAvLyBUT0RPOiBNb3ZlIHRoZSByZXNldCBhdCBpbiBiZWdpbldvcmsgb3V0IG9mIHRoZSBjb21tb24gcGF0aCBzbyB0aGF0XG4gICAgICAgIC8vIHRoaXMgaXMgbm8gbG9uZ2VyIG5lY2Vzc2FyeS5cbiAgICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBjdXJyZW50LmxhbmVzO1xuICAgICAgICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgICAgfSBlbHNlIGlmICgoY3VycmVudC5mbGFncyAmIEZvcmNlVXBkYXRlRm9yTGVnYWN5U3VzcGVuc2UpICE9PSBOb0ZsYWdzKSB7XG4gICAgICAgIC8vIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2UgdGhhdCBvbmx5IGV4aXN0cyBmb3IgbGVnYWN5IG1vZGUuXG4gICAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC8xOTIxNi5cbiAgICAgICAgZGlkUmVjZWl2ZVVwZGF0ZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZUZ1bmN0aW9uQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgcmVuZGVyTGFuZXMpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVPZmZzY3JlZW5Db21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHZhciBuZXh0UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gIHZhciBuZXh0Q2hpbGRyZW4gPSBuZXh0UHJvcHMuY2hpbGRyZW47XG4gIHZhciBwcmV2U3RhdGUgPSBjdXJyZW50ICE9PSBudWxsID8gY3VycmVudC5tZW1vaXplZFN0YXRlIDogbnVsbDtcblxuICBpZiAobmV4dFByb3BzLm1vZGUgPT09ICdoaWRkZW4nIHx8IG5leHRQcm9wcy5tb2RlID09PSAndW5zdGFibGUtZGVmZXItd2l0aG91dC1oaWRpbmcnKSB7XG4gICAgaWYgKCh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgQ29uY3VycmVudE1vZGUpID09PSBOb01vZGUpIHtcbiAgICAgIC8vIEluIGxlZ2FjeSBzeW5jIG1vZGUsIGRvbid0IGRlZmVyIHRoZSBzdWJ0cmVlLiBSZW5kZXIgaXQgbm93LlxuICAgICAgLy8gVE9ETzogRmlndXJlIG91dCB3aGF0IHdlIHNob3VsZCBkbyBpbiBCbG9ja2luZyBtb2RlLlxuICAgICAgdmFyIG5leHRTdGF0ZSA9IHtcbiAgICAgICAgYmFzZUxhbmVzOiBOb0xhbmVzXG4gICAgICB9O1xuICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG5leHRTdGF0ZTtcbiAgICAgIHB1c2hSZW5kZXJMYW5lcyh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgIH0gZWxzZSBpZiAoIWluY2x1ZGVzU29tZUxhbmUocmVuZGVyTGFuZXMsIE9mZnNjcmVlbkxhbmUpKSB7XG4gICAgICB2YXIgbmV4dEJhc2VMYW5lcztcblxuICAgICAgaWYgKHByZXZTdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgcHJldkJhc2VMYW5lcyA9IHByZXZTdGF0ZS5iYXNlTGFuZXM7XG4gICAgICAgIG5leHRCYXNlTGFuZXMgPSBtZXJnZUxhbmVzKHByZXZCYXNlTGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5leHRCYXNlTGFuZXMgPSByZW5kZXJMYW5lcztcbiAgICAgIH0gLy8gU2NoZWR1bGUgdGhpcyBmaWJlciB0byByZS1yZW5kZXIgYXQgb2Zmc2NyZWVuIHByaW9yaXR5LiBUaGVuIGJhaWxvdXQuXG5cblxuICAgICAge1xuICAgICAgICBtYXJrU3Bhd25lZFdvcmsoT2Zmc2NyZWVuTGFuZSk7XG4gICAgICB9XG5cbiAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gd29ya0luUHJvZ3Jlc3MuY2hpbGRMYW5lcyA9IGxhbmVUb0xhbmVzKE9mZnNjcmVlbkxhbmUpO1xuICAgICAgdmFyIF9uZXh0U3RhdGUgPSB7XG4gICAgICAgIGJhc2VMYW5lczogbmV4dEJhc2VMYW5lc1xuICAgICAgfTtcbiAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBfbmV4dFN0YXRlOyAvLyBXZSdyZSBhYm91dCB0byBiYWlsIG91dCwgYnV0IHdlIG5lZWQgdG8gcHVzaCB0aGlzIHRvIHRoZSBzdGFjayBhbnl3YXlcbiAgICAgIC8vIHRvIGF2b2lkIGEgcHVzaC9wb3AgbWlzYWxpZ25tZW50LlxuXG4gICAgICBwdXNoUmVuZGVyTGFuZXMod29ya0luUHJvZ3Jlc3MsIG5leHRCYXNlTGFuZXMpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlbmRlcmluZyBhdCBvZmZzY3JlZW4sIHNvIHdlIGNhbiBjbGVhciB0aGUgYmFzZSBsYW5lcy5cbiAgICAgIHZhciBfbmV4dFN0YXRlMiA9IHtcbiAgICAgICAgYmFzZUxhbmVzOiBOb0xhbmVzXG4gICAgICB9O1xuICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IF9uZXh0U3RhdGUyOyAvLyBQdXNoIHRoZSBsYW5lcyB0aGF0IHdlcmUgc2tpcHBlZCB3aGVuIHdlIGJhaWxlZCBvdXQuXG5cbiAgICAgIHZhciBzdWJ0cmVlUmVuZGVyTGFuZXMgPSBwcmV2U3RhdGUgIT09IG51bGwgPyBwcmV2U3RhdGUuYmFzZUxhbmVzIDogcmVuZGVyTGFuZXM7XG4gICAgICBwdXNoUmVuZGVyTGFuZXMod29ya0luUHJvZ3Jlc3MsIHN1YnRyZWVSZW5kZXJMYW5lcyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBfc3VidHJlZVJlbmRlckxhbmVzO1xuXG4gICAgaWYgKHByZXZTdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgX3N1YnRyZWVSZW5kZXJMYW5lcyA9IG1lcmdlTGFuZXMocHJldlN0YXRlLmJhc2VMYW5lcywgcmVuZGVyTGFuZXMpOyAvLyBTaW5jZSB3ZSdyZSBub3QgaGlkZGVuIGFueW1vcmUsIHJlc2V0IHRoZSBzdGF0ZVxuXG4gICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gV2Ugd2VyZW4ndCBwcmV2aW91c2x5IGhpZGRlbiwgYW5kIHdlIHN0aWxsIGFyZW4ndCwgc28gdGhlcmUncyBub3RoaW5nXG4gICAgICAvLyBzcGVjaWFsIHRvIGRvLiBOZWVkIHRvIHB1c2ggdG8gdGhlIHN0YWNrIHJlZ2FyZGxlc3MsIHRob3VnaCwgdG8gYXZvaWRcbiAgICAgIC8vIGEgcHVzaC9wb3AgbWlzYWxpZ25tZW50LlxuICAgICAgX3N1YnRyZWVSZW5kZXJMYW5lcyA9IHJlbmRlckxhbmVzO1xuICAgIH1cblxuICAgIHB1c2hSZW5kZXJMYW5lcyh3b3JrSW5Qcm9ncmVzcywgX3N1YnRyZWVSZW5kZXJMYW5lcyk7XG4gIH1cblxuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn0gLy8gTm90ZTogVGhlc2UgaGFwcGVuIHRvIGhhdmUgaWRlbnRpY2FsIGJlZ2luIHBoYXNlcywgZm9yIG5vdy4gV2Ugc2hvdWxkbid0IGhvbGRcbi8vIG91cnNlbHZlcyB0byB0aGlzIGNvbnN0cmFpbnQsIHRob3VnaC4gSWYgdGhlIGJlaGF2aW9yIGRpdmVyZ2VzLCB3ZSBzaG91bGRcbi8vIGZvcmsgdGhlIGZ1bmN0aW9uLlxuXG5cbnZhciB1cGRhdGVMZWdhY3lIaWRkZW5Db21wb25lbnQgPSB1cGRhdGVPZmZzY3JlZW5Db21wb25lbnQ7XG5cbmZ1bmN0aW9uIHVwZGF0ZUZyYWdtZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICB2YXIgbmV4dENoaWxkcmVuID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlTW9kZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIG5leHRDaGlsZHJlbiA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcy5jaGlsZHJlbjtcbiAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVByb2ZpbGVyKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICB7XG4gICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlOyAvLyBSZXNldCBlZmZlY3QgZHVyYXRpb25zIGZvciB0aGUgbmV4dCBldmVudHVhbCBlZmZlY3QgcGhhc2UuXG4gICAgLy8gVGhlc2UgYXJlIHJlc2V0IGR1cmluZyByZW5kZXIgdG8gYWxsb3cgdGhlIERldlRvb2xzIGNvbW1pdCBob29rIGEgY2hhbmNlIHRvIHJlYWQgdGhlbSxcblxuICAgIHZhciBzdGF0ZU5vZGUgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gICAgc3RhdGVOb2RlLmVmZmVjdER1cmF0aW9uID0gMDtcbiAgICBzdGF0ZU5vZGUucGFzc2l2ZUVmZmVjdER1cmF0aW9uID0gMDtcbiAgfVxuXG4gIHZhciBuZXh0UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gIHZhciBuZXh0Q2hpbGRyZW4gPSBuZXh0UHJvcHMuY2hpbGRyZW47XG4gIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuXG5mdW5jdGlvbiBtYXJrUmVmKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKSB7XG4gIHZhciByZWYgPSB3b3JrSW5Qcm9ncmVzcy5yZWY7XG5cbiAgaWYgKGN1cnJlbnQgPT09IG51bGwgJiYgcmVmICE9PSBudWxsIHx8IGN1cnJlbnQgIT09IG51bGwgJiYgY3VycmVudC5yZWYgIT09IHJlZikge1xuICAgIC8vIFNjaGVkdWxlIGEgUmVmIGVmZmVjdFxuICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFJlZjtcbiAgfVxufVxuXG5mdW5jdGlvbiB1cGRhdGVGdW5jdGlvbkNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHJlbmRlckxhbmVzKSB7XG4gIHtcbiAgICBpZiAod29ya0luUHJvZ3Jlc3MudHlwZSAhPT0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUpIHtcbiAgICAgIC8vIExhenkgY29tcG9uZW50IHByb3BzIGNhbid0IGJlIHZhbGlkYXRlZCBpbiBjcmVhdGVFbGVtZW50XG4gICAgICAvLyBiZWNhdXNlIHRoZXkncmUgb25seSBndWFyYW50ZWVkIHRvIGJlIHJlc29sdmVkIGhlcmUuXG4gICAgICB2YXIgaW5uZXJQcm9wVHlwZXMgPSBDb21wb25lbnQucHJvcFR5cGVzO1xuXG4gICAgICBpZiAoaW5uZXJQcm9wVHlwZXMpIHtcbiAgICAgICAgY2hlY2tQcm9wVHlwZXMoaW5uZXJQcm9wVHlwZXMsIG5leHRQcm9wcywgLy8gUmVzb2x2ZWQgcHJvcHNcbiAgICAgICAgJ3Byb3AnLCBnZXRDb21wb25lbnROYW1lKENvbXBvbmVudCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBjb250ZXh0O1xuXG4gIHtcbiAgICB2YXIgdW5tYXNrZWRDb250ZXh0ID0gZ2V0VW5tYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHRydWUpO1xuICAgIGNvbnRleHQgPSBnZXRNYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCB1bm1hc2tlZENvbnRleHQpO1xuICB9XG5cbiAgdmFyIG5leHRDaGlsZHJlbjtcbiAgcHJlcGFyZVRvUmVhZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICB7XG4gICAgUmVhY3RDdXJyZW50T3duZXIkMS5jdXJyZW50ID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgc2V0SXNSZW5kZXJpbmcodHJ1ZSk7XG4gICAgbmV4dENoaWxkcmVuID0gcmVuZGVyV2l0aEhvb2tzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgY29udGV4dCwgcmVuZGVyTGFuZXMpO1xuXG4gICAgaWYgKCB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgZGlzYWJsZUxvZ3MoKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgbmV4dENoaWxkcmVuID0gcmVuZGVyV2l0aEhvb2tzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgY29udGV4dCwgcmVuZGVyTGFuZXMpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc2V0SXNSZW5kZXJpbmcoZmFsc2UpO1xuICB9XG5cbiAgaWYgKGN1cnJlbnQgIT09IG51bGwgJiYgIWRpZFJlY2VpdmVVcGRhdGUpIHtcbiAgICBiYWlsb3V0SG9va3MoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICB9IC8vIFJlYWN0IERldlRvb2xzIHJlYWRzIHRoaXMgZmxhZy5cblxuXG4gIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBlcmZvcm1lZFdvcms7XG4gIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVDbGFzc0NvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHJlbmRlckxhbmVzKSB7XG4gIHtcbiAgICBpZiAod29ya0luUHJvZ3Jlc3MudHlwZSAhPT0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUpIHtcbiAgICAgIC8vIExhenkgY29tcG9uZW50IHByb3BzIGNhbid0IGJlIHZhbGlkYXRlZCBpbiBjcmVhdGVFbGVtZW50XG4gICAgICAvLyBiZWNhdXNlIHRoZXkncmUgb25seSBndWFyYW50ZWVkIHRvIGJlIHJlc29sdmVkIGhlcmUuXG4gICAgICB2YXIgaW5uZXJQcm9wVHlwZXMgPSBDb21wb25lbnQucHJvcFR5cGVzO1xuXG4gICAgICBpZiAoaW5uZXJQcm9wVHlwZXMpIHtcbiAgICAgICAgY2hlY2tQcm9wVHlwZXMoaW5uZXJQcm9wVHlwZXMsIG5leHRQcm9wcywgLy8gUmVzb2x2ZWQgcHJvcHNcbiAgICAgICAgJ3Byb3AnLCBnZXRDb21wb25lbnROYW1lKENvbXBvbmVudCkpO1xuICAgICAgfVxuICAgIH1cbiAgfSAvLyBQdXNoIGNvbnRleHQgcHJvdmlkZXJzIGVhcmx5IHRvIHByZXZlbnQgY29udGV4dCBzdGFjayBtaXNtYXRjaGVzLlxuICAvLyBEdXJpbmcgbW91bnRpbmcgd2UgZG9uJ3Qga25vdyB0aGUgY2hpbGQgY29udGV4dCB5ZXQgYXMgdGhlIGluc3RhbmNlIGRvZXNuJ3QgZXhpc3QuXG4gIC8vIFdlIHdpbGwgaW52YWxpZGF0ZSB0aGUgY2hpbGQgY29udGV4dCBpbiBmaW5pc2hDbGFzc0NvbXBvbmVudCgpIHJpZ2h0IGFmdGVyIHJlbmRlcmluZy5cblxuXG4gIHZhciBoYXNDb250ZXh0O1xuXG4gIGlmIChpc0NvbnRleHRQcm92aWRlcihDb21wb25lbnQpKSB7XG4gICAgaGFzQ29udGV4dCA9IHRydWU7XG4gICAgcHVzaENvbnRleHRQcm92aWRlcih3b3JrSW5Qcm9ncmVzcyk7XG4gIH0gZWxzZSB7XG4gICAgaGFzQ29udGV4dCA9IGZhbHNlO1xuICB9XG5cbiAgcHJlcGFyZVRvUmVhZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICB2YXIgc2hvdWxkVXBkYXRlO1xuXG4gIGlmIChpbnN0YW5jZSA9PT0gbnVsbCkge1xuICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAvLyBBIGNsYXNzIGNvbXBvbmVudCB3aXRob3V0IGFuIGluc3RhbmNlIG9ubHkgbW91bnRzIGlmIGl0IHN1c3BlbmRlZFxuICAgICAgLy8gaW5zaWRlIGEgbm9uLWNvbmN1cnJlbnQgdHJlZSwgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlLiBXZSB3YW50IHRvXG4gICAgICAvLyB0cmVhdCBpdCBsaWtlIGEgbmV3IG1vdW50LCBldmVuIHRob3VnaCBhbiBlbXB0eSB2ZXJzaW9uIG9mIGl0IGFscmVhZHlcbiAgICAgIC8vIGNvbW1pdHRlZC4gRGlzY29ubmVjdCB0aGUgYWx0ZXJuYXRlIHBvaW50ZXJzLlxuICAgICAgY3VycmVudC5hbHRlcm5hdGUgPSBudWxsO1xuICAgICAgd29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlID0gbnVsbDsgLy8gU2luY2UgdGhpcyBpcyBjb25jZXB0dWFsbHkgYSBuZXcgZmliZXIsIHNjaGVkdWxlIGEgUGxhY2VtZW50IGVmZmVjdFxuXG4gICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBQbGFjZW1lbnQ7XG4gICAgfSAvLyBJbiB0aGUgaW5pdGlhbCBwYXNzIHdlIG1pZ2h0IG5lZWQgdG8gY29uc3RydWN0IHRoZSBpbnN0YW5jZS5cblxuXG4gICAgY29uc3RydWN0Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMpO1xuICAgIG1vdW50Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHJlbmRlckxhbmVzKTtcbiAgICBzaG91bGRVcGRhdGUgPSB0cnVlO1xuICB9IGVsc2UgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAvLyBJbiBhIHJlc3VtZSwgd2UnbGwgYWxyZWFkeSBoYXZlIGFuIGluc3RhbmNlIHdlIGNhbiByZXVzZS5cbiAgICBzaG91bGRVcGRhdGUgPSByZXN1bWVNb3VudENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCByZW5kZXJMYW5lcyk7XG4gIH0gZWxzZSB7XG4gICAgc2hvdWxkVXBkYXRlID0gdXBkYXRlQ2xhc3NJbnN0YW5jZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHJlbmRlckxhbmVzKTtcbiAgfVxuXG4gIHZhciBuZXh0VW5pdE9mV29yayA9IGZpbmlzaENsYXNzQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHNob3VsZFVwZGF0ZSwgaGFzQ29udGV4dCwgcmVuZGVyTGFuZXMpO1xuXG4gIHtcbiAgICB2YXIgaW5zdCA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcblxuICAgIGlmIChzaG91bGRVcGRhdGUgJiYgaW5zdC5wcm9wcyAhPT0gbmV4dFByb3BzKSB7XG4gICAgICBpZiAoIWRpZFdhcm5BYm91dFJlYXNzaWduaW5nUHJvcHMpIHtcbiAgICAgICAgZXJyb3IoJ0l0IGxvb2tzIGxpa2UgJXMgaXMgcmVhc3NpZ25pbmcgaXRzIG93biBgdGhpcy5wcm9wc2Agd2hpbGUgcmVuZGVyaW5nLiAnICsgJ1RoaXMgaXMgbm90IHN1cHBvcnRlZCBhbmQgY2FuIGxlYWQgdG8gY29uZnVzaW5nIGJ1Z3MuJywgZ2V0Q29tcG9uZW50TmFtZSh3b3JrSW5Qcm9ncmVzcy50eXBlKSB8fCAnYSBjb21wb25lbnQnKTtcbiAgICAgIH1cblxuICAgICAgZGlkV2FybkFib3V0UmVhc3NpZ25pbmdQcm9wcyA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5leHRVbml0T2ZXb3JrO1xufVxuXG5mdW5jdGlvbiBmaW5pc2hDbGFzc0NvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBzaG91bGRVcGRhdGUsIGhhc0NvbnRleHQsIHJlbmRlckxhbmVzKSB7XG4gIC8vIFJlZnMgc2hvdWxkIHVwZGF0ZSBldmVuIGlmIHNob3VsZENvbXBvbmVudFVwZGF0ZSByZXR1cm5zIGZhbHNlXG4gIG1hcmtSZWYoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpO1xuICB2YXIgZGlkQ2FwdHVyZUVycm9yID0gKHdvcmtJblByb2dyZXNzLmZsYWdzICYgRGlkQ2FwdHVyZSkgIT09IE5vRmxhZ3M7XG5cbiAgaWYgKCFzaG91bGRVcGRhdGUgJiYgIWRpZENhcHR1cmVFcnJvcikge1xuICAgIC8vIENvbnRleHQgcHJvdmlkZXJzIHNob3VsZCBkZWZlciB0byBzQ1UgZm9yIHJlbmRlcmluZ1xuICAgIGlmIChoYXNDb250ZXh0KSB7XG4gICAgICBpbnZhbGlkYXRlQ29udGV4dFByb3ZpZGVyKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIGZhbHNlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICB9XG5cbiAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlOyAvLyBSZXJlbmRlclxuXG4gIFJlYWN0Q3VycmVudE93bmVyJDEuY3VycmVudCA9IHdvcmtJblByb2dyZXNzO1xuICB2YXIgbmV4dENoaWxkcmVuO1xuXG4gIGlmIChkaWRDYXB0dXJlRXJyb3IgJiYgdHlwZW9mIENvbXBvbmVudC5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBJZiB3ZSBjYXB0dXJlZCBhbiBlcnJvciwgYnV0IGdldERlcml2ZWRTdGF0ZUZyb21FcnJvciBpcyBub3QgZGVmaW5lZCxcbiAgICAvLyB1bm1vdW50IGFsbCB0aGUgY2hpbGRyZW4uIGNvbXBvbmVudERpZENhdGNoIHdpbGwgc2NoZWR1bGUgYW4gdXBkYXRlIHRvXG4gICAgLy8gcmUtcmVuZGVyIGEgZmFsbGJhY2suIFRoaXMgaXMgdGVtcG9yYXJ5IHVudGlsIHdlIG1pZ3JhdGUgZXZlcnlvbmUgdG9cbiAgICAvLyB0aGUgbmV3IEFQSS5cbiAgICAvLyBUT0RPOiBXYXJuIGluIGEgZnV0dXJlIHJlbGVhc2UuXG4gICAgbmV4dENoaWxkcmVuID0gbnVsbDtcblxuICAgIHtcbiAgICAgIHN0b3BQcm9maWxlclRpbWVySWZSdW5uaW5nKCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHtcbiAgICAgIHNldElzUmVuZGVyaW5nKHRydWUpO1xuICAgICAgbmV4dENoaWxkcmVuID0gaW5zdGFuY2UucmVuZGVyKCk7XG5cbiAgICAgIGlmICggd29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdE1vZGUpIHtcbiAgICAgICAgZGlzYWJsZUxvZ3MoKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGluc3RhbmNlLnJlbmRlcigpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHJlZW5hYmxlTG9ncygpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHNldElzUmVuZGVyaW5nKGZhbHNlKTtcbiAgICB9XG4gIH0gLy8gUmVhY3QgRGV2VG9vbHMgcmVhZHMgdGhpcyBmbGFnLlxuXG5cbiAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gUGVyZm9ybWVkV29yaztcblxuICBpZiAoY3VycmVudCAhPT0gbnVsbCAmJiBkaWRDYXB0dXJlRXJyb3IpIHtcbiAgICAvLyBJZiB3ZSdyZSByZWNvdmVyaW5nIGZyb20gYW4gZXJyb3IsIHJlY29uY2lsZSB3aXRob3V0IHJldXNpbmcgYW55IG9mXG4gICAgLy8gdGhlIGV4aXN0aW5nIGNoaWxkcmVuLiBDb25jZXB0dWFsbHksIHRoZSBub3JtYWwgY2hpbGRyZW4gYW5kIHRoZSBjaGlsZHJlblxuICAgIC8vIHRoYXQgYXJlIHNob3duIG9uIGVycm9yIGFyZSB0d28gZGlmZmVyZW50IHNldHMsIHNvIHdlIHNob3VsZG4ndCByZXVzZVxuICAgIC8vIG5vcm1hbCBjaGlsZHJlbiBldmVuIGlmIHRoZWlyIGlkZW50aXRpZXMgbWF0Y2guXG4gICAgZm9yY2VVbm1vdW50Q3VycmVudEFuZFJlY29uY2lsZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIH0gZWxzZSB7XG4gICAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICB9IC8vIE1lbW9pemUgc3RhdGUgdXNpbmcgdGhlIHZhbHVlcyB3ZSBqdXN0IHVzZWQgdG8gcmVuZGVyLlxuICAvLyBUT0RPOiBSZXN0cnVjdHVyZSBzbyB3ZSBuZXZlciByZWFkIHZhbHVlcyBmcm9tIHRoZSBpbnN0YW5jZS5cblxuXG4gIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBpbnN0YW5jZS5zdGF0ZTsgLy8gVGhlIGNvbnRleHQgbWlnaHQgaGF2ZSBjaGFuZ2VkIHNvIHdlIG5lZWQgdG8gcmVjYWxjdWxhdGUgaXQuXG5cbiAgaWYgKGhhc0NvbnRleHQpIHtcbiAgICBpbnZhbGlkYXRlQ29udGV4dFByb3ZpZGVyKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHRydWUpO1xuICB9XG5cbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuXG5mdW5jdGlvbiBwdXNoSG9zdFJvb3RDb250ZXh0KHdvcmtJblByb2dyZXNzKSB7XG4gIHZhciByb290ID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuXG4gIGlmIChyb290LnBlbmRpbmdDb250ZXh0KSB7XG4gICAgcHVzaFRvcExldmVsQ29udGV4dE9iamVjdCh3b3JrSW5Qcm9ncmVzcywgcm9vdC5wZW5kaW5nQ29udGV4dCwgcm9vdC5wZW5kaW5nQ29udGV4dCAhPT0gcm9vdC5jb250ZXh0KTtcbiAgfSBlbHNlIGlmIChyb290LmNvbnRleHQpIHtcbiAgICAvLyBTaG91bGQgYWx3YXlzIGJlIHNldFxuICAgIHB1c2hUb3BMZXZlbENvbnRleHRPYmplY3Qod29ya0luUHJvZ3Jlc3MsIHJvb3QuY29udGV4dCwgZmFsc2UpO1xuICB9XG5cbiAgcHVzaEhvc3RDb250YWluZXIod29ya0luUHJvZ3Jlc3MsIHJvb3QuY29udGFpbmVySW5mbyk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUhvc3RSb290KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICBwdXNoSG9zdFJvb3RDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgdmFyIHVwZGF0ZVF1ZXVlID0gd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWU7XG5cbiAgaWYgKCEoY3VycmVudCAhPT0gbnVsbCAmJiB1cGRhdGVRdWV1ZSAhPT0gbnVsbCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJJZiB0aGUgcm9vdCBkb2VzIG5vdCBoYXZlIGFuIHVwZGF0ZVF1ZXVlLCB3ZSBzaG91bGQgaGF2ZSBhbHJlYWR5IGJhaWxlZCBvdXQuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICB9XG4gIH1cblxuICB2YXIgbmV4dFByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICB2YXIgcHJldlN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgdmFyIHByZXZDaGlsZHJlbiA9IHByZXZTdGF0ZSAhPT0gbnVsbCA/IHByZXZTdGF0ZS5lbGVtZW50IDogbnVsbDtcbiAgY2xvbmVVcGRhdGVRdWV1ZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7XG4gIHByb2Nlc3NVcGRhdGVRdWV1ZSh3b3JrSW5Qcm9ncmVzcywgbmV4dFByb3BzLCBudWxsLCByZW5kZXJMYW5lcyk7XG4gIHZhciBuZXh0U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlOyAvLyBDYXV0aW9uOiBSZWFjdCBEZXZUb29scyBjdXJyZW50bHkgZGVwZW5kcyBvbiB0aGlzIHByb3BlcnR5XG4gIC8vIGJlaW5nIGNhbGxlZCBcImVsZW1lbnRcIi5cblxuICB2YXIgbmV4dENoaWxkcmVuID0gbmV4dFN0YXRlLmVsZW1lbnQ7XG5cbiAgaWYgKG5leHRDaGlsZHJlbiA9PT0gcHJldkNoaWxkcmVuKSB7XG4gICAgcmVzZXRIeWRyYXRpb25TdGF0ZSgpO1xuICAgIHJldHVybiBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gIH1cblxuICB2YXIgcm9vdCA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcblxuICBpZiAocm9vdC5oeWRyYXRlICYmIGVudGVySHlkcmF0aW9uU3RhdGUod29ya0luUHJvZ3Jlc3MpKSB7XG4gICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhbnkgY3VycmVudCBjaGlsZHJlbiB0aGlzIG1pZ2h0IGJlIHRoZSBmaXJzdCBwYXNzLlxuICAgIC8vIFdlIGFsd2F5cyB0cnkgdG8gaHlkcmF0ZS4gSWYgdGhpcyBpc24ndCBhIGh5ZHJhdGlvbiBwYXNzIHRoZXJlIHdvbid0XG4gICAgLy8gYmUgYW55IGNoaWxkcmVuIHRvIGh5ZHJhdGUgd2hpY2ggaXMgZWZmZWN0aXZlbHkgdGhlIHNhbWUgdGhpbmcgYXNcbiAgICAvLyBub3QgaHlkcmF0aW5nLlxuICAgIHtcbiAgICAgIHZhciBtdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhID0gcm9vdC5tdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhO1xuXG4gICAgICBpZiAobXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YSAhPSBudWxsKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YS5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgICAgIHZhciBtdXRhYmxlU291cmNlID0gbXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YVtpXTtcbiAgICAgICAgICB2YXIgdmVyc2lvbiA9IG11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGFbaSArIDFdO1xuICAgICAgICAgIHNldFdvcmtJblByb2dyZXNzVmVyc2lvbihtdXRhYmxlU291cmNlLCB2ZXJzaW9uKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBjaGlsZCA9IG1vdW50Q2hpbGRGaWJlcnMod29ya0luUHJvZ3Jlc3MsIG51bGwsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gY2hpbGQ7XG4gICAgdmFyIG5vZGUgPSBjaGlsZDtcblxuICAgIHdoaWxlIChub2RlKSB7XG4gICAgICAvLyBNYXJrIGVhY2ggY2hpbGQgYXMgaHlkcmF0aW5nLiBUaGlzIGlzIGEgZmFzdCBwYXRoIHRvIGtub3cgd2hldGhlciB0aGlzXG4gICAgICAvLyB0cmVlIGlzIHBhcnQgb2YgYSBoeWRyYXRpbmcgdHJlZS4gVGhpcyBpcyB1c2VkIHRvIGRldGVybWluZSBpZiBhIGNoaWxkXG4gICAgICAvLyBub2RlIGhhcyBmdWxseSBtb3VudGVkIHlldCwgYW5kIGZvciBzY2hlZHVsaW5nIGV2ZW50IHJlcGxheWluZy5cbiAgICAgIC8vIENvbmNlcHR1YWxseSB0aGlzIGlzIHNpbWlsYXIgdG8gUGxhY2VtZW50IGluIHRoYXQgYSBuZXcgc3VidHJlZSBpc1xuICAgICAgLy8gaW5zZXJ0ZWQgaW50byB0aGUgUmVhY3QgdHJlZSBoZXJlLiBJdCBqdXN0IGhhcHBlbnMgdG8gbm90IG5lZWQgRE9NXG4gICAgICAvLyBtdXRhdGlvbnMgYmVjYXVzZSBpdCBhbHJlYWR5IGV4aXN0cy5cbiAgICAgIG5vZGUuZmxhZ3MgPSBub2RlLmZsYWdzICYgflBsYWNlbWVudCB8IEh5ZHJhdGluZztcbiAgICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIE90aGVyd2lzZSByZXNldCBoeWRyYXRpb24gc3RhdGUgaW4gY2FzZSB3ZSBhYm9ydGVkIGFuZCByZXN1bWVkIGFub3RoZXJcbiAgICAvLyByb290LlxuICAgIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgICByZXNldEh5ZHJhdGlvblN0YXRlKCk7XG4gIH1cblxuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUhvc3RDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHB1c2hIb3N0Q29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG5cbiAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICB0cnlUb0NsYWltTmV4dEh5ZHJhdGFibGVJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcyk7XG4gIH1cblxuICB2YXIgdHlwZSA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG4gIHZhciBuZXh0UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gIHZhciBwcmV2UHJvcHMgPSBjdXJyZW50ICE9PSBudWxsID8gY3VycmVudC5tZW1vaXplZFByb3BzIDogbnVsbDtcbiAgdmFyIG5leHRDaGlsZHJlbiA9IG5leHRQcm9wcy5jaGlsZHJlbjtcbiAgdmFyIGlzRGlyZWN0VGV4dENoaWxkID0gc2hvdWxkU2V0VGV4dENvbnRlbnQodHlwZSwgbmV4dFByb3BzKTtcblxuICBpZiAoaXNEaXJlY3RUZXh0Q2hpbGQpIHtcbiAgICAvLyBXZSBzcGVjaWFsIGNhc2UgYSBkaXJlY3QgdGV4dCBjaGlsZCBvZiBhIGhvc3Qgbm9kZS4gVGhpcyBpcyBhIGNvbW1vblxuICAgIC8vIGNhc2UuIFdlIHdvbid0IGhhbmRsZSBpdCBhcyBhIHJlaWZpZWQgY2hpbGQuIFdlIHdpbGwgaW5zdGVhZCBoYW5kbGVcbiAgICAvLyB0aGlzIGluIHRoZSBob3N0IGVudmlyb25tZW50IHRoYXQgYWxzbyBoYXMgYWNjZXNzIHRvIHRoaXMgcHJvcC4gVGhhdFxuICAgIC8vIGF2b2lkcyBhbGxvY2F0aW5nIGFub3RoZXIgSG9zdFRleHQgZmliZXIgYW5kIHRyYXZlcnNpbmcgaXQuXG4gICAgbmV4dENoaWxkcmVuID0gbnVsbDtcbiAgfSBlbHNlIGlmIChwcmV2UHJvcHMgIT09IG51bGwgJiYgc2hvdWxkU2V0VGV4dENvbnRlbnQodHlwZSwgcHJldlByb3BzKSkge1xuICAgIC8vIElmIHdlJ3JlIHN3aXRjaGluZyBmcm9tIGEgZGlyZWN0IHRleHQgY2hpbGQgdG8gYSBub3JtYWwgY2hpbGQsIG9yIHRvXG4gICAgLy8gZW1wdHksIHdlIG5lZWQgdG8gc2NoZWR1bGUgdGhlIHRleHQgY29udGVudCB0byBiZSByZXNldC5cbiAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBDb250ZW50UmVzZXQ7XG4gIH1cblxuICBtYXJrUmVmKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKTtcbiAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUhvc3RUZXh0KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKSB7XG4gIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgdHJ5VG9DbGFpbU5leHRIeWRyYXRhYmxlSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MpO1xuICB9IC8vIE5vdGhpbmcgdG8gZG8gaGVyZS4gVGhpcyBpcyB0ZXJtaW5hbC4gV2UnbGwgZG8gdGhlIGNvbXBsZXRpb24gc3RlcFxuICAvLyBpbW1lZGlhdGVseSBhZnRlci5cblxuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBtb3VudExhenlDb21wb25lbnQoX2N1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBlbGVtZW50VHlwZSwgdXBkYXRlTGFuZXMsIHJlbmRlckxhbmVzKSB7XG4gIGlmIChfY3VycmVudCAhPT0gbnVsbCkge1xuICAgIC8vIEEgbGF6eSBjb21wb25lbnQgb25seSBtb3VudHMgaWYgaXQgc3VzcGVuZGVkIGluc2lkZSBhIG5vbi1cbiAgICAvLyBjb25jdXJyZW50IHRyZWUsIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZS4gV2Ugd2FudCB0byB0cmVhdCBpdCBsaWtlXG4gICAgLy8gYSBuZXcgbW91bnQsIGV2ZW4gdGhvdWdoIGFuIGVtcHR5IHZlcnNpb24gb2YgaXQgYWxyZWFkeSBjb21taXR0ZWQuXG4gICAgLy8gRGlzY29ubmVjdCB0aGUgYWx0ZXJuYXRlIHBvaW50ZXJzLlxuICAgIF9jdXJyZW50LmFsdGVybmF0ZSA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlID0gbnVsbDsgLy8gU2luY2UgdGhpcyBpcyBjb25jZXB0dWFsbHkgYSBuZXcgZmliZXIsIHNjaGVkdWxlIGEgUGxhY2VtZW50IGVmZmVjdFxuXG4gICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gUGxhY2VtZW50O1xuICB9XG5cbiAgdmFyIHByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICB2YXIgbGF6eUNvbXBvbmVudCA9IGVsZW1lbnRUeXBlO1xuICB2YXIgcGF5bG9hZCA9IGxhenlDb21wb25lbnQuX3BheWxvYWQ7XG4gIHZhciBpbml0ID0gbGF6eUNvbXBvbmVudC5faW5pdDtcbiAgdmFyIENvbXBvbmVudCA9IGluaXQocGF5bG9hZCk7IC8vIFN0b3JlIHRoZSB1bndyYXBwZWQgY29tcG9uZW50IGluIHRoZSB0eXBlLlxuXG4gIHdvcmtJblByb2dyZXNzLnR5cGUgPSBDb21wb25lbnQ7XG4gIHZhciByZXNvbHZlZFRhZyA9IHdvcmtJblByb2dyZXNzLnRhZyA9IHJlc29sdmVMYXp5Q29tcG9uZW50VGFnKENvbXBvbmVudCk7XG4gIHZhciByZXNvbHZlZFByb3BzID0gcmVzb2x2ZURlZmF1bHRQcm9wcyhDb21wb25lbnQsIHByb3BzKTtcbiAgdmFyIGNoaWxkO1xuXG4gIHN3aXRjaCAocmVzb2x2ZWRUYWcpIHtcbiAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgdmFsaWRhdGVGdW5jdGlvbkNvbXBvbmVudEluRGV2KHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQpO1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSBDb21wb25lbnQgPSByZXNvbHZlRnVuY3Rpb25Gb3JIb3RSZWxvYWRpbmcoQ29tcG9uZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkID0gdXBkYXRlRnVuY3Rpb25Db21wb25lbnQobnVsbCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgcmVzb2x2ZWRQcm9wcywgcmVuZGVyTGFuZXMpO1xuICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICB9XG5cbiAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9IENvbXBvbmVudCA9IHJlc29sdmVDbGFzc0ZvckhvdFJlbG9hZGluZyhDb21wb25lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQgPSB1cGRhdGVDbGFzc0NvbXBvbmVudChudWxsLCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCByZXNvbHZlZFByb3BzLCByZW5kZXJMYW5lcyk7XG4gICAgICAgIHJldHVybiBjaGlsZDtcbiAgICAgIH1cblxuICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSBDb21wb25lbnQgPSByZXNvbHZlRm9yd2FyZFJlZkZvckhvdFJlbG9hZGluZyhDb21wb25lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQgPSB1cGRhdGVGb3J3YXJkUmVmKG51bGwsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHJlc29sdmVkUHJvcHMsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgfVxuXG4gICAgY2FzZSBNZW1vQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgaWYgKHdvcmtJblByb2dyZXNzLnR5cGUgIT09IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlKSB7XG4gICAgICAgICAgICB2YXIgb3V0ZXJQcm9wVHlwZXMgPSBDb21wb25lbnQucHJvcFR5cGVzO1xuXG4gICAgICAgICAgICBpZiAob3V0ZXJQcm9wVHlwZXMpIHtcbiAgICAgICAgICAgICAgY2hlY2tQcm9wVHlwZXMob3V0ZXJQcm9wVHlwZXMsIHJlc29sdmVkUHJvcHMsIC8vIFJlc29sdmVkIGZvciBvdXRlciBvbmx5XG4gICAgICAgICAgICAgICdwcm9wJywgZ2V0Q29tcG9uZW50TmFtZShDb21wb25lbnQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZCA9IHVwZGF0ZU1lbW9Db21wb25lbnQobnVsbCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgcmVzb2x2ZURlZmF1bHRQcm9wcyhDb21wb25lbnQudHlwZSwgcmVzb2x2ZWRQcm9wcyksIC8vIFRoZSBpbm5lciB0eXBlIGNhbiBoYXZlIGRlZmF1bHRzIHRvb1xuICAgICAgICB1cGRhdGVMYW5lcywgcmVuZGVyTGFuZXMpO1xuICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICB9XG4gIH1cblxuICB2YXIgaGludCA9ICcnO1xuXG4gIHtcbiAgICBpZiAoQ29tcG9uZW50ICE9PSBudWxsICYmIHR5cGVvZiBDb21wb25lbnQgPT09ICdvYmplY3QnICYmIENvbXBvbmVudC4kJHR5cGVvZiA9PT0gUkVBQ1RfTEFaWV9UWVBFKSB7XG4gICAgICBoaW50ID0gJyBEaWQgeW91IHdyYXAgYSBjb21wb25lbnQgaW4gUmVhY3QubGF6eSgpIG1vcmUgdGhhbiBvbmNlPyc7XG4gICAgfVxuICB9IC8vIFRoaXMgbWVzc2FnZSBpbnRlbnRpb25hbGx5IGRvZXNuJ3QgbWVudGlvbiBGb3J3YXJkUmVmIG9yIE1lbW9Db21wb25lbnRcbiAgLy8gYmVjYXVzZSB0aGUgZmFjdCB0aGF0IGl0J3MgYSBzZXBhcmF0ZSB0eXBlIG9mIHdvcmsgaXMgYW5cbiAgLy8gaW1wbGVtZW50YXRpb24gZGV0YWlsLlxuXG5cbiAge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIkVsZW1lbnQgdHlwZSBpcyBpbnZhbGlkLiBSZWNlaXZlZCBhIHByb21pc2UgdGhhdCByZXNvbHZlcyB0bzogXCIgKyBDb21wb25lbnQgKyBcIi4gTGF6eSBlbGVtZW50IHR5cGUgbXVzdCByZXNvbHZlIHRvIGEgY2xhc3Mgb3IgZnVuY3Rpb24uXCIgKyBoaW50ICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG1vdW50SW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50KF9jdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHJlbmRlckxhbmVzKSB7XG4gIGlmIChfY3VycmVudCAhPT0gbnVsbCkge1xuICAgIC8vIEFuIGluY29tcGxldGUgY29tcG9uZW50IG9ubHkgbW91bnRzIGlmIGl0IHN1c3BlbmRlZCBpbnNpZGUgYSBub24tXG4gICAgLy8gY29uY3VycmVudCB0cmVlLCBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUuIFdlIHdhbnQgdG8gdHJlYXQgaXQgbGlrZVxuICAgIC8vIGEgbmV3IG1vdW50LCBldmVuIHRob3VnaCBhbiBlbXB0eSB2ZXJzaW9uIG9mIGl0IGFscmVhZHkgY29tbWl0dGVkLlxuICAgIC8vIERpc2Nvbm5lY3QgdGhlIGFsdGVybmF0ZSBwb2ludGVycy5cbiAgICBfY3VycmVudC5hbHRlcm5hdGUgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZSA9IG51bGw7IC8vIFNpbmNlIHRoaXMgaXMgY29uY2VwdHVhbGx5IGEgbmV3IGZpYmVyLCBzY2hlZHVsZSBhIFBsYWNlbWVudCBlZmZlY3RcblxuICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBsYWNlbWVudDtcbiAgfSAvLyBQcm9tb3RlIHRoZSBmaWJlciB0byBhIGNsYXNzIGFuZCB0cnkgcmVuZGVyaW5nIGFnYWluLlxuXG5cbiAgd29ya0luUHJvZ3Jlc3MudGFnID0gQ2xhc3NDb21wb25lbnQ7IC8vIFRoZSByZXN0IG9mIHRoaXMgZnVuY3Rpb24gaXMgYSBmb3JrIG9mIGB1cGRhdGVDbGFzc0NvbXBvbmVudGBcbiAgLy8gUHVzaCBjb250ZXh0IHByb3ZpZGVycyBlYXJseSB0byBwcmV2ZW50IGNvbnRleHQgc3RhY2sgbWlzbWF0Y2hlcy5cbiAgLy8gRHVyaW5nIG1vdW50aW5nIHdlIGRvbid0IGtub3cgdGhlIGNoaWxkIGNvbnRleHQgeWV0IGFzIHRoZSBpbnN0YW5jZSBkb2Vzbid0IGV4aXN0LlxuICAvLyBXZSB3aWxsIGludmFsaWRhdGUgdGhlIGNoaWxkIGNvbnRleHQgaW4gZmluaXNoQ2xhc3NDb21wb25lbnQoKSByaWdodCBhZnRlciByZW5kZXJpbmcuXG5cbiAgdmFyIGhhc0NvbnRleHQ7XG5cbiAgaWYgKGlzQ29udGV4dFByb3ZpZGVyKENvbXBvbmVudCkpIHtcbiAgICBoYXNDb250ZXh0ID0gdHJ1ZTtcbiAgICBwdXNoQ29udGV4dFByb3ZpZGVyKHdvcmtJblByb2dyZXNzKTtcbiAgfSBlbHNlIHtcbiAgICBoYXNDb250ZXh0ID0gZmFsc2U7XG4gIH1cblxuICBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICBjb25zdHJ1Y3RDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcyk7XG4gIG1vdW50Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHJlbmRlckxhbmVzKTtcbiAgcmV0dXJuIGZpbmlzaENsYXNzQ29tcG9uZW50KG51bGwsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHRydWUsIGhhc0NvbnRleHQsIHJlbmRlckxhbmVzKTtcbn1cblxuZnVuY3Rpb24gbW91bnRJbmRldGVybWluYXRlQ29tcG9uZW50KF9jdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCByZW5kZXJMYW5lcykge1xuICBpZiAoX2N1cnJlbnQgIT09IG51bGwpIHtcbiAgICAvLyBBbiBpbmRldGVybWluYXRlIGNvbXBvbmVudCBvbmx5IG1vdW50cyBpZiBpdCBzdXNwZW5kZWQgaW5zaWRlIGEgbm9uLVxuICAgIC8vIGNvbmN1cnJlbnQgdHJlZSwgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlLiBXZSB3YW50IHRvIHRyZWF0IGl0IGxpa2VcbiAgICAvLyBhIG5ldyBtb3VudCwgZXZlbiB0aG91Z2ggYW4gZW1wdHkgdmVyc2lvbiBvZiBpdCBhbHJlYWR5IGNvbW1pdHRlZC5cbiAgICAvLyBEaXNjb25uZWN0IHRoZSBhbHRlcm5hdGUgcG9pbnRlcnMuXG4gICAgX2N1cnJlbnQuYWx0ZXJuYXRlID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzcy5hbHRlcm5hdGUgPSBudWxsOyAvLyBTaW5jZSB0aGlzIGlzIGNvbmNlcHR1YWxseSBhIG5ldyBmaWJlciwgc2NoZWR1bGUgYSBQbGFjZW1lbnQgZWZmZWN0XG5cbiAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBQbGFjZW1lbnQ7XG4gIH1cblxuICB2YXIgcHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gIHZhciBjb250ZXh0O1xuXG4gIHtcbiAgICB2YXIgdW5tYXNrZWRDb250ZXh0ID0gZ2V0VW5tYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIGZhbHNlKTtcbiAgICBjb250ZXh0ID0gZ2V0TWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgdW5tYXNrZWRDb250ZXh0KTtcbiAgfVxuXG4gIHByZXBhcmVUb1JlYWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gIHZhciB2YWx1ZTtcblxuICB7XG4gICAgaWYgKENvbXBvbmVudC5wcm90b3R5cGUgJiYgdHlwZW9mIENvbXBvbmVudC5wcm90b3R5cGUucmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUoQ29tcG9uZW50KSB8fCAnVW5rbm93bic7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0QmFkQ2xhc3NbY29tcG9uZW50TmFtZV0pIHtcbiAgICAgICAgZXJyb3IoXCJUaGUgPCVzIC8+IGNvbXBvbmVudCBhcHBlYXJzIHRvIGhhdmUgYSByZW5kZXIgbWV0aG9kLCBidXQgZG9lc24ndCBleHRlbmQgUmVhY3QuQ29tcG9uZW50LiBcIiArICdUaGlzIGlzIGxpa2VseSB0byBjYXVzZSBlcnJvcnMuIENoYW5nZSAlcyB0byBleHRlbmQgUmVhY3QuQ29tcG9uZW50IGluc3RlYWQuJywgY29tcG9uZW50TmFtZSwgY29tcG9uZW50TmFtZSk7XG5cbiAgICAgICAgZGlkV2FybkFib3V0QmFkQ2xhc3NbY29tcG9uZW50TmFtZV0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MucmVjb3JkTGVnYWN5Q29udGV4dFdhcm5pbmcod29ya0luUHJvZ3Jlc3MsIG51bGwpO1xuICAgIH1cblxuICAgIHNldElzUmVuZGVyaW5nKHRydWUpO1xuICAgIFJlYWN0Q3VycmVudE93bmVyJDEuY3VycmVudCA9IHdvcmtJblByb2dyZXNzO1xuICAgIHZhbHVlID0gcmVuZGVyV2l0aEhvb2tzKG51bGwsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHByb3BzLCBjb250ZXh0LCByZW5kZXJMYW5lcyk7XG4gICAgc2V0SXNSZW5kZXJpbmcoZmFsc2UpO1xuICB9IC8vIFJlYWN0IERldlRvb2xzIHJlYWRzIHRoaXMgZmxhZy5cblxuXG4gIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBlcmZvcm1lZFdvcms7XG5cbiAge1xuICAgIC8vIFN1cHBvcnQgZm9yIG1vZHVsZSBjb21wb25lbnRzIGlzIGRlcHJlY2F0ZWQgYW5kIGlzIHJlbW92ZWQgYmVoaW5kIGEgZmxhZy5cbiAgICAvLyBXaGV0aGVyIG9yIG5vdCBpdCB3b3VsZCBjcmFzaCBsYXRlciwgd2Ugd2FudCB0byBzaG93IGEgZ29vZCBtZXNzYWdlIGluIERFViBmaXJzdC5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUucmVuZGVyID09PSAnZnVuY3Rpb24nICYmIHZhbHVlLiQkdHlwZW9mID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhciBfY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUoQ29tcG9uZW50KSB8fCAnVW5rbm93bic7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0TW9kdWxlUGF0dGVybkNvbXBvbmVudFtfY29tcG9uZW50TmFtZV0pIHtcbiAgICAgICAgZXJyb3IoJ1RoZSA8JXMgLz4gY29tcG9uZW50IGFwcGVhcnMgdG8gYmUgYSBmdW5jdGlvbiBjb21wb25lbnQgdGhhdCByZXR1cm5zIGEgY2xhc3MgaW5zdGFuY2UuICcgKyAnQ2hhbmdlICVzIHRvIGEgY2xhc3MgdGhhdCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCBpbnN0ZWFkLiAnICsgXCJJZiB5b3UgY2FuJ3QgdXNlIGEgY2xhc3MgdHJ5IGFzc2lnbmluZyB0aGUgcHJvdG90eXBlIG9uIHRoZSBmdW5jdGlvbiBhcyBhIHdvcmthcm91bmQuIFwiICsgXCJgJXMucHJvdG90eXBlID0gUmVhY3QuQ29tcG9uZW50LnByb3RvdHlwZWAuIERvbid0IHVzZSBhbiBhcnJvdyBmdW5jdGlvbiBzaW5jZSBpdCBcIiArICdjYW5ub3QgYmUgY2FsbGVkIHdpdGggYG5ld2AgYnkgUmVhY3QuJywgX2NvbXBvbmVudE5hbWUsIF9jb21wb25lbnROYW1lLCBfY29tcG9uZW50TmFtZSk7XG5cbiAgICAgICAgZGlkV2FybkFib3V0TW9kdWxlUGF0dGVybkNvbXBvbmVudFtfY29tcG9uZW50TmFtZV0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmICggLy8gUnVuIHRoZXNlIGNoZWNrcyBpbiBwcm9kdWN0aW9uIG9ubHkgaWYgdGhlIGZsYWcgaXMgb2ZmLlxuICAvLyBFdmVudHVhbGx5IHdlJ2xsIGRlbGV0ZSB0aGlzIGJyYW5jaCBhbHRvZ2V0aGVyLlxuICAgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUucmVuZGVyID09PSAnZnVuY3Rpb24nICYmIHZhbHVlLiQkdHlwZW9mID09PSB1bmRlZmluZWQpIHtcbiAgICB7XG4gICAgICB2YXIgX2NvbXBvbmVudE5hbWUyID0gZ2V0Q29tcG9uZW50TmFtZShDb21wb25lbnQpIHx8ICdVbmtub3duJztcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRNb2R1bGVQYXR0ZXJuQ29tcG9uZW50W19jb21wb25lbnROYW1lMl0pIHtcbiAgICAgICAgZXJyb3IoJ1RoZSA8JXMgLz4gY29tcG9uZW50IGFwcGVhcnMgdG8gYmUgYSBmdW5jdGlvbiBjb21wb25lbnQgdGhhdCByZXR1cm5zIGEgY2xhc3MgaW5zdGFuY2UuICcgKyAnQ2hhbmdlICVzIHRvIGEgY2xhc3MgdGhhdCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCBpbnN0ZWFkLiAnICsgXCJJZiB5b3UgY2FuJ3QgdXNlIGEgY2xhc3MgdHJ5IGFzc2lnbmluZyB0aGUgcHJvdG90eXBlIG9uIHRoZSBmdW5jdGlvbiBhcyBhIHdvcmthcm91bmQuIFwiICsgXCJgJXMucHJvdG90eXBlID0gUmVhY3QuQ29tcG9uZW50LnByb3RvdHlwZWAuIERvbid0IHVzZSBhbiBhcnJvdyBmdW5jdGlvbiBzaW5jZSBpdCBcIiArICdjYW5ub3QgYmUgY2FsbGVkIHdpdGggYG5ld2AgYnkgUmVhY3QuJywgX2NvbXBvbmVudE5hbWUyLCBfY29tcG9uZW50TmFtZTIsIF9jb21wb25lbnROYW1lMik7XG5cbiAgICAgICAgZGlkV2FybkFib3V0TW9kdWxlUGF0dGVybkNvbXBvbmVudFtfY29tcG9uZW50TmFtZTJdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IC8vIFByb2NlZWQgdW5kZXIgdGhlIGFzc3VtcHRpb24gdGhhdCB0aGlzIGlzIGEgY2xhc3MgaW5zdGFuY2VcblxuXG4gICAgd29ya0luUHJvZ3Jlc3MudGFnID0gQ2xhc3NDb21wb25lbnQ7IC8vIFRocm93IG91dCBhbnkgaG9va3MgdGhhdCB3ZXJlIHVzZWQuXG5cbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IG51bGw7IC8vIFB1c2ggY29udGV4dCBwcm92aWRlcnMgZWFybHkgdG8gcHJldmVudCBjb250ZXh0IHN0YWNrIG1pc21hdGNoZXMuXG4gICAgLy8gRHVyaW5nIG1vdW50aW5nIHdlIGRvbid0IGtub3cgdGhlIGNoaWxkIGNvbnRleHQgeWV0IGFzIHRoZSBpbnN0YW5jZSBkb2Vzbid0IGV4aXN0LlxuICAgIC8vIFdlIHdpbGwgaW52YWxpZGF0ZSB0aGUgY2hpbGQgY29udGV4dCBpbiBmaW5pc2hDbGFzc0NvbXBvbmVudCgpIHJpZ2h0IGFmdGVyIHJlbmRlcmluZy5cblxuICAgIHZhciBoYXNDb250ZXh0ID0gZmFsc2U7XG5cbiAgICBpZiAoaXNDb250ZXh0UHJvdmlkZXIoQ29tcG9uZW50KSkge1xuICAgICAgaGFzQ29udGV4dCA9IHRydWU7XG4gICAgICBwdXNoQ29udGV4dFByb3ZpZGVyKHdvcmtJblByb2dyZXNzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGFzQ29udGV4dCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSB2YWx1ZS5zdGF0ZSAhPT0gbnVsbCAmJiB2YWx1ZS5zdGF0ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUuc3RhdGUgOiBudWxsO1xuICAgIGluaXRpYWxpemVVcGRhdGVRdWV1ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgdmFyIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9IENvbXBvbmVudC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM7XG5cbiAgICBpZiAodHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgYXBwbHlEZXJpdmVkU3RhdGVGcm9tUHJvcHMod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLCBwcm9wcyk7XG4gICAgfVxuXG4gICAgYWRvcHRDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCB2YWx1ZSk7XG4gICAgbW91bnRDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHByb3BzLCByZW5kZXJMYW5lcyk7XG4gICAgcmV0dXJuIGZpbmlzaENsYXNzQ29tcG9uZW50KG51bGwsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHRydWUsIGhhc0NvbnRleHQsIHJlbmRlckxhbmVzKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBQcm9jZWVkIHVuZGVyIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhpcyBpcyBhIGZ1bmN0aW9uIGNvbXBvbmVudFxuICAgIHdvcmtJblByb2dyZXNzLnRhZyA9IEZ1bmN0aW9uQ29tcG9uZW50O1xuXG4gICAge1xuXG4gICAgICBpZiAoIHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RNb2RlKSB7XG4gICAgICAgIGRpc2FibGVMb2dzKCk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB2YWx1ZSA9IHJlbmRlcldpdGhIb29rcyhudWxsLCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBwcm9wcywgY29udGV4dCwgcmVuZGVyTGFuZXMpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHJlZW5hYmxlTG9ncygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVjb25jaWxlQ2hpbGRyZW4obnVsbCwgd29ya0luUHJvZ3Jlc3MsIHZhbHVlLCByZW5kZXJMYW5lcyk7XG5cbiAgICB7XG4gICAgICB2YWxpZGF0ZUZ1bmN0aW9uQ29tcG9uZW50SW5EZXYod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICB9XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlRnVuY3Rpb25Db21wb25lbnRJbkRldih3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50KSB7XG4gIHtcbiAgICBpZiAoQ29tcG9uZW50KSB7XG4gICAgICBpZiAoQ29tcG9uZW50LmNoaWxkQ29udGV4dFR5cGVzKSB7XG4gICAgICAgIGVycm9yKCclcyguLi4pOiBjaGlsZENvbnRleHRUeXBlcyBjYW5ub3QgYmUgZGVmaW5lZCBvbiBhIGZ1bmN0aW9uIGNvbXBvbmVudC4nLCBDb21wb25lbnQuZGlzcGxheU5hbWUgfHwgQ29tcG9uZW50Lm5hbWUgfHwgJ0NvbXBvbmVudCcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5yZWYgIT09IG51bGwpIHtcbiAgICAgIHZhciBpbmZvID0gJyc7XG4gICAgICB2YXIgb3duZXJOYW1lID0gZ2V0Q3VycmVudEZpYmVyT3duZXJOYW1lSW5EZXZPck51bGwoKTtcblxuICAgICAgaWYgKG93bmVyTmFtZSkge1xuICAgICAgICBpbmZvICs9ICdcXG5cXG5DaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgJyArIG93bmVyTmFtZSArICdgLic7XG4gICAgICB9XG5cbiAgICAgIHZhciB3YXJuaW5nS2V5ID0gb3duZXJOYW1lIHx8IHdvcmtJblByb2dyZXNzLl9kZWJ1Z0lEIHx8ICcnO1xuICAgICAgdmFyIGRlYnVnU291cmNlID0gd29ya0luUHJvZ3Jlc3MuX2RlYnVnU291cmNlO1xuXG4gICAgICBpZiAoZGVidWdTb3VyY2UpIHtcbiAgICAgICAgd2FybmluZ0tleSA9IGRlYnVnU291cmNlLmZpbGVOYW1lICsgJzonICsgZGVidWdTb3VyY2UubGluZU51bWJlcjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRGdW5jdGlvblJlZnNbd2FybmluZ0tleV0pIHtcbiAgICAgICAgZGlkV2FybkFib3V0RnVuY3Rpb25SZWZzW3dhcm5pbmdLZXldID0gdHJ1ZTtcblxuICAgICAgICBlcnJvcignRnVuY3Rpb24gY29tcG9uZW50cyBjYW5ub3QgYmUgZ2l2ZW4gcmVmcy4gJyArICdBdHRlbXB0cyB0byBhY2Nlc3MgdGhpcyByZWYgd2lsbCBmYWlsLiAnICsgJ0RpZCB5b3UgbWVhbiB0byB1c2UgUmVhY3QuZm9yd2FyZFJlZigpPyVzJywgaW5mbyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBDb21wb25lbnQuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB2YXIgX2NvbXBvbmVudE5hbWUzID0gZ2V0Q29tcG9uZW50TmFtZShDb21wb25lbnQpIHx8ICdVbmtub3duJztcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRHZXREZXJpdmVkU3RhdGVPbkZ1bmN0aW9uQ29tcG9uZW50W19jb21wb25lbnROYW1lM10pIHtcbiAgICAgICAgZXJyb3IoJyVzOiBGdW5jdGlvbiBjb21wb25lbnRzIGRvIG5vdCBzdXBwb3J0IGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcy4nLCBfY29tcG9uZW50TmFtZTMpO1xuXG4gICAgICAgIGRpZFdhcm5BYm91dEdldERlcml2ZWRTdGF0ZU9uRnVuY3Rpb25Db21wb25lbnRbX2NvbXBvbmVudE5hbWUzXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBDb21wb25lbnQuY29udGV4dFR5cGUgPT09ICdvYmplY3QnICYmIENvbXBvbmVudC5jb250ZXh0VHlwZSAhPT0gbnVsbCkge1xuICAgICAgdmFyIF9jb21wb25lbnROYW1lNCA9IGdldENvbXBvbmVudE5hbWUoQ29tcG9uZW50KSB8fCAnVW5rbm93bic7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0Q29udGV4dFR5cGVPbkZ1bmN0aW9uQ29tcG9uZW50W19jb21wb25lbnROYW1lNF0pIHtcbiAgICAgICAgZXJyb3IoJyVzOiBGdW5jdGlvbiBjb21wb25lbnRzIGRvIG5vdCBzdXBwb3J0IGNvbnRleHRUeXBlLicsIF9jb21wb25lbnROYW1lNCk7XG5cbiAgICAgICAgZGlkV2FybkFib3V0Q29udGV4dFR5cGVPbkZ1bmN0aW9uQ29tcG9uZW50W19jb21wb25lbnROYW1lNF0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgU1VTUEVOREVEX01BUktFUiA9IHtcbiAgZGVoeWRyYXRlZDogbnVsbCxcbiAgcmV0cnlMYW5lOiBOb0xhbmVcbn07XG5cbmZ1bmN0aW9uIG1vdW50U3VzcGVuc2VPZmZzY3JlZW5TdGF0ZShyZW5kZXJMYW5lcykge1xuICByZXR1cm4ge1xuICAgIGJhc2VMYW5lczogcmVuZGVyTGFuZXNcbiAgfTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlU3VzcGVuc2VPZmZzY3JlZW5TdGF0ZShwcmV2T2Zmc2NyZWVuU3RhdGUsIHJlbmRlckxhbmVzKSB7XG4gIHJldHVybiB7XG4gICAgYmFzZUxhbmVzOiBtZXJnZUxhbmVzKHByZXZPZmZzY3JlZW5TdGF0ZS5iYXNlTGFuZXMsIHJlbmRlckxhbmVzKVxuICB9O1xufSAvLyBUT0RPOiBQcm9iYWJseSBzaG91bGQgaW5saW5lIHRoaXMgYmFja1xuXG5cbmZ1bmN0aW9uIHNob3VsZFJlbWFpbk9uRmFsbGJhY2soc3VzcGVuc2VDb250ZXh0LCBjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgLy8gSWYgd2UncmUgYWxyZWFkeSBzaG93aW5nIGEgZmFsbGJhY2ssIHRoZXJlIGFyZSBjYXNlcyB3aGVyZSB3ZSBuZWVkIHRvXG4gIC8vIHJlbWFpbiBvbiB0aGF0IGZhbGxiYWNrIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgY29udGVudCBoYXMgcmVzb2x2ZWQuXG4gIC8vIEZvciBleGFtcGxlLCBTdXNwZW5zZUxpc3QgY29vcmRpbmF0ZXMgd2hlbiBuZXN0ZWQgY29udGVudCBhcHBlYXJzLlxuICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgIHZhciBzdXNwZW5zZVN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuXG4gICAgaWYgKHN1c3BlbnNlU3RhdGUgPT09IG51bGwpIHtcbiAgICAgIC8vIEN1cnJlbnRseSBzaG93aW5nIGNvbnRlbnQuIERvbid0IGhpZGUgaXQsIGV2ZW4gaWYgRm9yY2VTdXNwZW5zZUZhbGxhY2tcbiAgICAgIC8vIGlzIHRydWUuIE1vcmUgcHJlY2lzZSBuYW1lIG1pZ2h0IGJlIFwiRm9yY2VSZW1haW5TdXNwZW5zZUZhbGxiYWNrXCIuXG4gICAgICAvLyBOb3RlOiBUaGlzIGlzIGEgZmFjdG9yaW5nIHNtZWxsLiBDYW4ndCByZW1haW4gb24gYSBmYWxsYmFjayBpZiB0aGVyZSdzXG4gICAgICAvLyBubyBmYWxsYmFjayB0byByZW1haW4gb24uXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9IC8vIE5vdCBjdXJyZW50bHkgc2hvd2luZyBjb250ZW50LiBDb25zdWx0IHRoZSBTdXNwZW5zZSBjb250ZXh0LlxuXG5cbiAgcmV0dXJuIGhhc1N1c3BlbnNlQ29udGV4dChzdXNwZW5zZUNvbnRleHQsIEZvcmNlU3VzcGVuc2VGYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIGdldFJlbWFpbmluZ1dvcmtJblByaW1hcnlUcmVlKGN1cnJlbnQsIHJlbmRlckxhbmVzKSB7XG4gIC8vIFRPRE86IFNob3VsZCBub3QgcmVtb3ZlIHJlbmRlciBsYW5lcyB0aGF0IHdlcmUgcGluZ2VkIGR1cmluZyB0aGlzIHJlbmRlclxuICByZXR1cm4gcmVtb3ZlTGFuZXMoY3VycmVudC5jaGlsZExhbmVzLCByZW5kZXJMYW5lcyk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVN1c3BlbnNlQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICB2YXIgbmV4dFByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzOyAvLyBUaGlzIGlzIHVzZWQgYnkgRGV2VG9vbHMgdG8gZm9yY2UgYSBib3VuZGFyeSB0byBzdXNwZW5kLlxuXG4gIHtcbiAgICBpZiAoc2hvdWxkU3VzcGVuZCh3b3JrSW5Qcm9ncmVzcykpIHtcbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IERpZENhcHR1cmU7XG4gICAgfVxuICB9XG5cbiAgdmFyIHN1c3BlbnNlQ29udGV4dCA9IHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudDtcbiAgdmFyIHNob3dGYWxsYmFjayA9IGZhbHNlO1xuICB2YXIgZGlkU3VzcGVuZCA9ICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIERpZENhcHR1cmUpICE9PSBOb0ZsYWdzO1xuXG4gIGlmIChkaWRTdXNwZW5kIHx8IHNob3VsZFJlbWFpbk9uRmFsbGJhY2soc3VzcGVuc2VDb250ZXh0LCBjdXJyZW50KSkge1xuICAgIC8vIFNvbWV0aGluZyBpbiB0aGlzIGJvdW5kYXJ5J3Mgc3VidHJlZSBhbHJlYWR5IHN1c3BlbmRlZC4gU3dpdGNoIHRvXG4gICAgLy8gcmVuZGVyaW5nIHRoZSBmYWxsYmFjayBjaGlsZHJlbi5cbiAgICBzaG93RmFsbGJhY2sgPSB0cnVlO1xuICAgIHdvcmtJblByb2dyZXNzLmZsYWdzICY9IH5EaWRDYXB0dXJlO1xuICB9IGVsc2Uge1xuICAgIC8vIEF0dGVtcHRpbmcgdGhlIG1haW4gY29udGVudFxuICAgIGlmIChjdXJyZW50ID09PSBudWxsIHx8IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgLy8gVGhpcyBpcyBhIG5ldyBtb3VudCBvciB0aGlzIGJvdW5kYXJ5IGlzIGFscmVhZHkgc2hvd2luZyBhIGZhbGxiYWNrIHN0YXRlLlxuICAgICAgLy8gTWFyayB0aGlzIHN1YnRyZWUgY29udGV4dCBhcyBoYXZpbmcgYXQgbGVhc3Qgb25lIGludmlzaWJsZSBwYXJlbnQgdGhhdCBjb3VsZFxuICAgICAgLy8gaGFuZGxlIHRoZSBmYWxsYmFjayBzdGF0ZS5cbiAgICAgIC8vIEJvdW5kYXJpZXMgd2l0aG91dCBmYWxsYmFja3Mgb3Igc2hvdWxkIGJlIGF2b2lkZWQgYXJlIG5vdCBjb25zaWRlcmVkIHNpbmNlXG4gICAgICAvLyB0aGV5IGNhbm5vdCBoYW5kbGUgcHJlZmVycmVkIGZhbGxiYWNrIHN0YXRlcy5cbiAgICAgIGlmIChuZXh0UHJvcHMuZmFsbGJhY2sgIT09IHVuZGVmaW5lZCAmJiBuZXh0UHJvcHMudW5zdGFibGVfYXZvaWRUaGlzRmFsbGJhY2sgIT09IHRydWUpIHtcbiAgICAgICAgc3VzcGVuc2VDb250ZXh0ID0gYWRkU3VidHJlZVN1c3BlbnNlQ29udGV4dChzdXNwZW5zZUNvbnRleHQsIEludmlzaWJsZVBhcmVudFN1c3BlbnNlQ29udGV4dCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3VzcGVuc2VDb250ZXh0ID0gc2V0RGVmYXVsdFNoYWxsb3dTdXNwZW5zZUNvbnRleHQoc3VzcGVuc2VDb250ZXh0KTtcbiAgcHVzaFN1c3BlbnNlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgc3VzcGVuc2VDb250ZXh0KTsgLy8gT0ssIHRoZSBuZXh0IHBhcnQgaXMgY29uZnVzaW5nLiBXZSdyZSBhYm91dCB0byByZWNvbmNpbGUgdGhlIFN1c3BlbnNlXG4gIC8vIGJvdW5kYXJ5J3MgY2hpbGRyZW4uIFRoaXMgaW52b2x2ZXMgc29tZSBjdXN0b20gcmVjb25jaWxhdGlvbiBsb2dpYy4gVHdvXG4gIC8vIG1haW4gcmVhc29ucyB0aGlzIGlzIHNvIGNvbXBsaWNhdGVkLlxuICAvL1xuICAvLyBGaXJzdCwgTGVnYWN5IE1vZGUgaGFzIGRpZmZlcmVudCBzZW1hbnRpY3MgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LiBUaGVcbiAgLy8gcHJpbWFyeSB0cmVlIHdpbGwgY29tbWl0IGluIGFuIGluY29uc2lzdGVudCBzdGF0ZSwgc28gd2hlbiB3ZSBkbyB0aGVcbiAgLy8gc2Vjb25kIHBhc3MgdG8gcmVuZGVyIHRoZSBmYWxsYmFjaywgd2UgZG8gc29tZSBleGNlZWRpbmdseSwgdWgsIGNsZXZlclxuICAvLyBoYWNrcyB0byBtYWtlIHRoYXQgbm90IHRvdGFsbHkgYnJlYWsuIExpa2UgdHJhbnNmZXJyaW5nIGVmZmVjdHMgYW5kXG4gIC8vIGRlbGV0aW9ucyBmcm9tIGhpZGRlbiB0cmVlLiBJbiBDb25jdXJyZW50IE1vZGUsIGl0J3MgbXVjaCBzaW1wbGVyLFxuICAvLyBiZWNhdXNlIHdlIGJhaWxvdXQgb24gdGhlIHByaW1hcnkgdHJlZSBjb21wbGV0ZWx5IGFuZCBsZWF2ZSBpdCBpbiBpdHMgb2xkXG4gIC8vIHN0YXRlLCBubyBlZmZlY3RzLiBTYW1lIGFzIHdoYXQgd2UgZG8gZm9yIE9mZnNjcmVlbiAoZXhjZXB0IHRoYXRcbiAgLy8gT2Zmc2NyZWVuIGRvZXNuJ3QgaGF2ZSB0aGUgZmlyc3QgcmVuZGVyIHBhc3MpLlxuICAvL1xuICAvLyBTZWNvbmQgaXMgaHlkcmF0aW9uLiBEdXJpbmcgaHlkcmF0aW9uLCB0aGUgU3VzcGVuc2UgZmliZXIgaGFzIGEgc2xpZ2h0bHlcbiAgLy8gZGlmZmVyZW50IGxheW91dCwgd2hlcmUgdGhlIGNoaWxkIHBvaW50cyB0byBhIGRlaHlkcmF0ZWQgZnJhZ21lbnQsIHdoaWNoXG4gIC8vIGNvbnRhaW5zIHRoZSBET00gcmVuZGVyZWQgYnkgdGhlIHNlcnZlci5cbiAgLy9cbiAgLy8gVGhpcmQsIGV2ZW4gaWYgeW91IHNldCBhbGwgdGhhdCBhc2lkZSwgU3VzcGVuc2UgaXMgbGlrZSBlcnJvciBib3VuZGFyaWVzIGluXG4gIC8vIHRoYXQgd2UgZmlyc3Qgd2UgdHJ5IHRvIHJlbmRlciBvbmUgdHJlZSwgYW5kIGlmIHRoYXQgZmFpbHMsIHdlIHJlbmRlciBhZ2FpblxuICAvLyBhbmQgc3dpdGNoIHRvIGEgZGlmZmVyZW50IHRyZWUuIExpa2UgYSB0cnkvY2F0Y2ggYmxvY2suIFNvIHdlIGhhdmUgdG8gdHJhY2tcbiAgLy8gd2hpY2ggYnJhbmNoIHdlJ3JlIGN1cnJlbnRseSByZW5kZXJpbmcuIElkZWFsbHkgd2Ugd291bGQgbW9kZWwgdGhpcyB1c2luZ1xuICAvLyBhIHN0YWNrLlxuXG4gIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgLy8gSW5pdGlhbCBtb3VudFxuICAgIC8vIElmIHdlJ3JlIGN1cnJlbnRseSBoeWRyYXRpbmcsIHRyeSB0byBoeWRyYXRlIHRoaXMgYm91bmRhcnkuXG4gICAgLy8gQnV0IG9ubHkgaWYgdGhpcyBoYXMgYSBmYWxsYmFjay5cbiAgICBpZiAobmV4dFByb3BzLmZhbGxiYWNrICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRyeVRvQ2xhaW1OZXh0SHlkcmF0YWJsZUluc3RhbmNlKHdvcmtJblByb2dyZXNzKTsgLy8gVGhpcyBjb3VsZCd2ZSBiZWVuIGEgZGVoeWRyYXRlZCBzdXNwZW5zZSBjb21wb25lbnQuXG4gICAgfVxuXG4gICAgdmFyIG5leHRQcmltYXJ5Q2hpbGRyZW4gPSBuZXh0UHJvcHMuY2hpbGRyZW47XG4gICAgdmFyIG5leHRGYWxsYmFja0NoaWxkcmVuID0gbmV4dFByb3BzLmZhbGxiYWNrO1xuXG4gICAgaWYgKHNob3dGYWxsYmFjaykge1xuICAgICAgdmFyIGZhbGxiYWNrRnJhZ21lbnQgPSBtb3VudFN1c3BlbnNlRmFsbGJhY2tDaGlsZHJlbih3b3JrSW5Qcm9ncmVzcywgbmV4dFByaW1hcnlDaGlsZHJlbiwgbmV4dEZhbGxiYWNrQ2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgICAgIHZhciBwcmltYXJ5Q2hpbGRGcmFnbWVudCA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQubWVtb2l6ZWRTdGF0ZSA9IG1vdW50U3VzcGVuc2VPZmZzY3JlZW5TdGF0ZShyZW5kZXJMYW5lcyk7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gU1VTUEVOREVEX01BUktFUjtcbiAgICAgIHJldHVybiBmYWxsYmFja0ZyYWdtZW50O1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG5leHRQcm9wcy51bnN0YWJsZV9leHBlY3RlZExvYWRUaW1lID09PSAnbnVtYmVyJykge1xuICAgICAgLy8gVGhpcyBpcyBhIENQVS1ib3VuZCB0cmVlLiBTa2lwIHRoaXMgdHJlZSBhbmQgc2hvdyBhIHBsYWNlaG9sZGVyIHRvXG4gICAgICAvLyB1bmJsb2NrIHRoZSBzdXJyb3VuZGluZyBjb250ZW50LiBUaGVuIGltbWVkaWF0ZWx5IHJldHJ5IGFmdGVyIHRoZVxuICAgICAgLy8gaW5pdGlhbCBjb21taXQuXG4gICAgICB2YXIgX2ZhbGxiYWNrRnJhZ21lbnQgPSBtb3VudFN1c3BlbnNlRmFsbGJhY2tDaGlsZHJlbih3b3JrSW5Qcm9ncmVzcywgbmV4dFByaW1hcnlDaGlsZHJlbiwgbmV4dEZhbGxiYWNrQ2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcblxuICAgICAgdmFyIF9wcmltYXJ5Q2hpbGRGcmFnbWVudCA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgICAgX3ByaW1hcnlDaGlsZEZyYWdtZW50Lm1lbW9pemVkU3RhdGUgPSBtb3VudFN1c3BlbnNlT2Zmc2NyZWVuU3RhdGUocmVuZGVyTGFuZXMpO1xuICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IFNVU1BFTkRFRF9NQVJLRVI7IC8vIFNpbmNlIG5vdGhpbmcgYWN0dWFsbHkgc3VzcGVuZGVkLCB0aGVyZSB3aWxsIG5vdGhpbmcgdG8gcGluZyB0aGlzIHRvXG4gICAgICAvLyBnZXQgaXQgc3RhcnRlZCBiYWNrIHVwIHRvIGF0dGVtcHQgdGhlIG5leHQgaXRlbS4gV2hpbGUgaW4gdGVybXMgb2ZcbiAgICAgIC8vIHByaW9yaXR5IHRoaXMgd29yayBoYXMgdGhlIHNhbWUgcHJpb3JpdHkgYXMgdGhpcyBjdXJyZW50IHJlbmRlciwgaXQnc1xuICAgICAgLy8gbm90IHBhcnQgb2YgdGhlIHNhbWUgdHJhbnNpdGlvbiBvbmNlIHRoZSB0cmFuc2l0aW9uIGhhcyBjb21taXR0ZWQuIElmXG4gICAgICAvLyBpdCdzIHN5bmMsIHdlIHN0aWxsIHdhbnQgdG8geWllbGQgc28gdGhhdCBpdCBjYW4gYmUgcGFpbnRlZC5cbiAgICAgIC8vIENvbmNlcHR1YWxseSwgdGhpcyBpcyByZWFsbHkgdGhlIHNhbWUgYXMgcGluZ2luZy4gV2UgY2FuIHVzZSBhbnlcbiAgICAgIC8vIFJldHJ5TGFuZSBldmVuIGlmIGl0J3MgdGhlIG9uZSBjdXJyZW50bHkgcmVuZGVyaW5nIHNpbmNlIHdlJ3JlIGxlYXZpbmdcbiAgICAgIC8vIGl0IGJlaGluZCBvbiB0aGlzIG5vZGUuXG5cbiAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gU29tZVJldHJ5TGFuZTtcblxuICAgICAge1xuICAgICAgICBtYXJrU3Bhd25lZFdvcmsoU29tZVJldHJ5TGFuZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfZmFsbGJhY2tGcmFnbWVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG1vdW50U3VzcGVuc2VQcmltYXJ5Q2hpbGRyZW4od29ya0luUHJvZ3Jlc3MsIG5leHRQcmltYXJ5Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gVGhpcyBpcyBhbiB1cGRhdGUuXG4gICAgLy8gSWYgdGhlIGN1cnJlbnQgZmliZXIgaGFzIGEgU3VzcGVuc2VTdGF0ZSwgdGhhdCBtZWFucyBpdCdzIGFscmVhZHkgc2hvd2luZ1xuICAgIC8vIGEgZmFsbGJhY2suXG4gICAgdmFyIHByZXZTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcblxuICAgIGlmIChwcmV2U3RhdGUgIT09IG51bGwpIHtcblxuICAgICAgaWYgKHNob3dGYWxsYmFjaykge1xuICAgICAgICB2YXIgX25leHRGYWxsYmFja0NoaWxkcmVuMiA9IG5leHRQcm9wcy5mYWxsYmFjaztcbiAgICAgICAgdmFyIF9uZXh0UHJpbWFyeUNoaWxkcmVuMiA9IG5leHRQcm9wcy5jaGlsZHJlbjtcblxuICAgICAgICB2YXIgX2ZhbGxiYWNrQ2hpbGRGcmFnbWVudCA9IHVwZGF0ZVN1c3BlbnNlRmFsbGJhY2tDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgX25leHRQcmltYXJ5Q2hpbGRyZW4yLCBfbmV4dEZhbGxiYWNrQ2hpbGRyZW4yLCByZW5kZXJMYW5lcyk7XG5cbiAgICAgICAgdmFyIF9wcmltYXJ5Q2hpbGRGcmFnbWVudDMgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgdmFyIHByZXZPZmZzY3JlZW5TdGF0ZSA9IGN1cnJlbnQuY2hpbGQubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgX3ByaW1hcnlDaGlsZEZyYWdtZW50My5tZW1vaXplZFN0YXRlID0gcHJldk9mZnNjcmVlblN0YXRlID09PSBudWxsID8gbW91bnRTdXNwZW5zZU9mZnNjcmVlblN0YXRlKHJlbmRlckxhbmVzKSA6IHVwZGF0ZVN1c3BlbnNlT2Zmc2NyZWVuU3RhdGUocHJldk9mZnNjcmVlblN0YXRlLCByZW5kZXJMYW5lcyk7XG4gICAgICAgIF9wcmltYXJ5Q2hpbGRGcmFnbWVudDMuY2hpbGRMYW5lcyA9IGdldFJlbWFpbmluZ1dvcmtJblByaW1hcnlUcmVlKGN1cnJlbnQsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IFNVU1BFTkRFRF9NQVJLRVI7XG4gICAgICAgIHJldHVybiBfZmFsbGJhY2tDaGlsZEZyYWdtZW50O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIF9uZXh0UHJpbWFyeUNoaWxkcmVuMyA9IG5leHRQcm9wcy5jaGlsZHJlbjtcblxuICAgICAgICB2YXIgX3ByaW1hcnlDaGlsZEZyYWdtZW50NCA9IHVwZGF0ZVN1c3BlbnNlUHJpbWFyeUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBfbmV4dFByaW1hcnlDaGlsZHJlbjMsIHJlbmRlckxhbmVzKTtcblxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgICAgICAgcmV0dXJuIF9wcmltYXJ5Q2hpbGRGcmFnbWVudDQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoZSBjdXJyZW50IHRyZWUgaXMgbm90IGFscmVhZHkgc2hvd2luZyBhIGZhbGxiYWNrLlxuICAgICAgaWYgKHNob3dGYWxsYmFjaykge1xuICAgICAgICAvLyBUaW1lZCBvdXQuXG4gICAgICAgIHZhciBfbmV4dEZhbGxiYWNrQ2hpbGRyZW4zID0gbmV4dFByb3BzLmZhbGxiYWNrO1xuICAgICAgICB2YXIgX25leHRQcmltYXJ5Q2hpbGRyZW40ID0gbmV4dFByb3BzLmNoaWxkcmVuO1xuXG4gICAgICAgIHZhciBfZmFsbGJhY2tDaGlsZEZyYWdtZW50MiA9IHVwZGF0ZVN1c3BlbnNlRmFsbGJhY2tDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgX25leHRQcmltYXJ5Q2hpbGRyZW40LCBfbmV4dEZhbGxiYWNrQ2hpbGRyZW4zLCByZW5kZXJMYW5lcyk7XG5cbiAgICAgICAgdmFyIF9wcmltYXJ5Q2hpbGRGcmFnbWVudDUgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgdmFyIF9wcmV2T2Zmc2NyZWVuU3RhdGUgPSBjdXJyZW50LmNoaWxkLm1lbW9pemVkU3RhdGU7XG4gICAgICAgIF9wcmltYXJ5Q2hpbGRGcmFnbWVudDUubWVtb2l6ZWRTdGF0ZSA9IF9wcmV2T2Zmc2NyZWVuU3RhdGUgPT09IG51bGwgPyBtb3VudFN1c3BlbnNlT2Zmc2NyZWVuU3RhdGUocmVuZGVyTGFuZXMpIDogdXBkYXRlU3VzcGVuc2VPZmZzY3JlZW5TdGF0ZShfcHJldk9mZnNjcmVlblN0YXRlLCByZW5kZXJMYW5lcyk7XG4gICAgICAgIF9wcmltYXJ5Q2hpbGRGcmFnbWVudDUuY2hpbGRMYW5lcyA9IGdldFJlbWFpbmluZ1dvcmtJblByaW1hcnlUcmVlKGN1cnJlbnQsIHJlbmRlckxhbmVzKTsgLy8gU2tpcCB0aGUgcHJpbWFyeSBjaGlsZHJlbiwgYW5kIGNvbnRpbnVlIHdvcmtpbmcgb24gdGhlXG4gICAgICAgIC8vIGZhbGxiYWNrIGNoaWxkcmVuLlxuXG4gICAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBTVVNQRU5ERURfTUFSS0VSO1xuICAgICAgICByZXR1cm4gX2ZhbGxiYWNrQ2hpbGRGcmFnbWVudDI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBTdGlsbCBoYXZlbid0IHRpbWVkIG91dC4gQ29udGludWUgcmVuZGVyaW5nIHRoZSBjaGlsZHJlbiwgbGlrZSB3ZVxuICAgICAgICAvLyBub3JtYWxseSBkby5cbiAgICAgICAgdmFyIF9uZXh0UHJpbWFyeUNoaWxkcmVuNSA9IG5leHRQcm9wcy5jaGlsZHJlbjtcblxuICAgICAgICB2YXIgX3ByaW1hcnlDaGlsZEZyYWdtZW50NiA9IHVwZGF0ZVN1c3BlbnNlUHJpbWFyeUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBfbmV4dFByaW1hcnlDaGlsZHJlbjUsIHJlbmRlckxhbmVzKTtcblxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgICAgICAgcmV0dXJuIF9wcmltYXJ5Q2hpbGRGcmFnbWVudDY7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG1vdW50U3VzcGVuc2VQcmltYXJ5Q2hpbGRyZW4od29ya0luUHJvZ3Jlc3MsIHByaW1hcnlDaGlsZHJlbiwgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIG1vZGUgPSB3b3JrSW5Qcm9ncmVzcy5tb2RlO1xuICB2YXIgcHJpbWFyeUNoaWxkUHJvcHMgPSB7XG4gICAgbW9kZTogJ3Zpc2libGUnLFxuICAgIGNoaWxkcmVuOiBwcmltYXJ5Q2hpbGRyZW5cbiAgfTtcbiAgdmFyIHByaW1hcnlDaGlsZEZyYWdtZW50ID0gY3JlYXRlRmliZXJGcm9tT2Zmc2NyZWVuKHByaW1hcnlDaGlsZFByb3BzLCBtb2RlLCByZW5kZXJMYW5lcywgbnVsbCk7XG4gIHByaW1hcnlDaGlsZEZyYWdtZW50LnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHByaW1hcnlDaGlsZEZyYWdtZW50O1xuICByZXR1cm4gcHJpbWFyeUNoaWxkRnJhZ21lbnQ7XG59XG5cbmZ1bmN0aW9uIG1vdW50U3VzcGVuc2VGYWxsYmFja0NoaWxkcmVuKHdvcmtJblByb2dyZXNzLCBwcmltYXJ5Q2hpbGRyZW4sIGZhbGxiYWNrQ2hpbGRyZW4sIHJlbmRlckxhbmVzKSB7XG4gIHZhciBtb2RlID0gd29ya0luUHJvZ3Jlc3MubW9kZTtcbiAgdmFyIHByb2dyZXNzZWRQcmltYXJ5RnJhZ21lbnQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgdmFyIHByaW1hcnlDaGlsZFByb3BzID0ge1xuICAgIG1vZGU6ICdoaWRkZW4nLFxuICAgIGNoaWxkcmVuOiBwcmltYXJ5Q2hpbGRyZW5cbiAgfTtcbiAgdmFyIHByaW1hcnlDaGlsZEZyYWdtZW50O1xuICB2YXIgZmFsbGJhY2tDaGlsZEZyYWdtZW50O1xuXG4gIGlmICgobW9kZSAmIEJsb2NraW5nTW9kZSkgPT09IE5vTW9kZSAmJiBwcm9ncmVzc2VkUHJpbWFyeUZyYWdtZW50ICE9PSBudWxsKSB7XG4gICAgLy8gSW4gbGVnYWN5IG1vZGUsIHdlIGNvbW1pdCB0aGUgcHJpbWFyeSB0cmVlIGFzIGlmIGl0IHN1Y2Nlc3NmdWxseVxuICAgIC8vIGNvbXBsZXRlZCwgZXZlbiB0aG91Z2ggaXQncyBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUuXG4gICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSBwcm9ncmVzc2VkUHJpbWFyeUZyYWdtZW50O1xuICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LmNoaWxkTGFuZXMgPSBOb0xhbmVzO1xuICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LnBlbmRpbmdQcm9wcyA9IHByaW1hcnlDaGlsZFByb3BzO1xuXG4gICAgaWYgKCB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgUHJvZmlsZU1vZGUpIHtcbiAgICAgIC8vIFJlc2V0IHRoZSBkdXJhdGlvbnMgZnJvbSB0aGUgZmlyc3QgcGFzcyBzbyB0aGV5IGFyZW4ndCBpbmNsdWRlZCBpbiB0aGVcbiAgICAgIC8vIGZpbmFsIGFtb3VudHMuIFRoaXMgc2VlbXMgY291bnRlcmludHVpdGl2ZSwgc2luY2Ugd2UncmUgaW50ZW50aW9uYWxseVxuICAgICAgLy8gbm90IG1lYXN1cmluZyBwYXJ0IG9mIHRoZSByZW5kZXIgcGhhc2UsIGJ1dCB0aGlzIG1ha2VzIGl0IG1hdGNoIHdoYXQgd2VcbiAgICAgIC8vIGRvIGluIENvbmN1cnJlbnQgTW9kZS5cbiAgICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LmFjdHVhbER1cmF0aW9uID0gMDtcbiAgICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LmFjdHVhbFN0YXJ0VGltZSA9IC0xO1xuICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuc2VsZkJhc2VEdXJhdGlvbiA9IDA7XG4gICAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC50cmVlQmFzZUR1cmF0aW9uID0gMDtcbiAgICB9XG5cbiAgICBmYWxsYmFja0NoaWxkRnJhZ21lbnQgPSBjcmVhdGVGaWJlckZyb21GcmFnbWVudChmYWxsYmFja0NoaWxkcmVuLCBtb2RlLCByZW5kZXJMYW5lcywgbnVsbCk7XG4gIH0gZWxzZSB7XG4gICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSBjcmVhdGVGaWJlckZyb21PZmZzY3JlZW4ocHJpbWFyeUNoaWxkUHJvcHMsIG1vZGUsIE5vTGFuZXMsIG51bGwpO1xuICAgIGZhbGxiYWNrQ2hpbGRGcmFnbWVudCA9IGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KGZhbGxiYWNrQ2hpbGRyZW4sIG1vZGUsIHJlbmRlckxhbmVzLCBudWxsKTtcbiAgfVxuXG4gIHByaW1hcnlDaGlsZEZyYWdtZW50LnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICBmYWxsYmFja0NoaWxkRnJhZ21lbnQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gIHByaW1hcnlDaGlsZEZyYWdtZW50LnNpYmxpbmcgPSBmYWxsYmFja0NoaWxkRnJhZ21lbnQ7XG4gIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcHJpbWFyeUNoaWxkRnJhZ21lbnQ7XG4gIHJldHVybiBmYWxsYmFja0NoaWxkRnJhZ21lbnQ7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVdvcmtJblByb2dyZXNzT2Zmc2NyZWVuRmliZXIoY3VycmVudCwgb2Zmc2NyZWVuUHJvcHMpIHtcbiAgLy8gVGhlIHByb3BzIGFyZ3VtZW50IHRvIGBjcmVhdGVXb3JrSW5Qcm9ncmVzc2AgaXMgYGFueWAgdHlwZWQsIHNvIHdlIHVzZSB0aGlzXG4gIC8vIHdyYXBwZXIgZnVuY3Rpb24gdG8gY29uc3RyYWluIGl0LlxuICByZXR1cm4gY3JlYXRlV29ya0luUHJvZ3Jlc3MoY3VycmVudCwgb2Zmc2NyZWVuUHJvcHMpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVTdXNwZW5zZVByaW1hcnlDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcHJpbWFyeUNoaWxkcmVuLCByZW5kZXJMYW5lcykge1xuICB2YXIgY3VycmVudFByaW1hcnlDaGlsZEZyYWdtZW50ID0gY3VycmVudC5jaGlsZDtcbiAgdmFyIGN1cnJlbnRGYWxsYmFja0NoaWxkRnJhZ21lbnQgPSBjdXJyZW50UHJpbWFyeUNoaWxkRnJhZ21lbnQuc2libGluZztcbiAgdmFyIHByaW1hcnlDaGlsZEZyYWdtZW50ID0gY3JlYXRlV29ya0luUHJvZ3Jlc3NPZmZzY3JlZW5GaWJlcihjdXJyZW50UHJpbWFyeUNoaWxkRnJhZ21lbnQsIHtcbiAgICBtb2RlOiAndmlzaWJsZScsXG4gICAgY2hpbGRyZW46IHByaW1hcnlDaGlsZHJlblxuICB9KTtcblxuICBpZiAoKHdvcmtJblByb2dyZXNzLm1vZGUgJiBCbG9ja2luZ01vZGUpID09PSBOb01vZGUpIHtcbiAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5sYW5lcyA9IHJlbmRlckxhbmVzO1xuICB9XG5cbiAgcHJpbWFyeUNoaWxkRnJhZ21lbnQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gIHByaW1hcnlDaGlsZEZyYWdtZW50LnNpYmxpbmcgPSBudWxsO1xuXG4gIGlmIChjdXJyZW50RmFsbGJhY2tDaGlsZEZyYWdtZW50ICE9PSBudWxsKSB7XG4gICAgLy8gRGVsZXRlIHRoZSBmYWxsYmFjayBjaGlsZCBmcmFnbWVudFxuICAgIGN1cnJlbnRGYWxsYmFja0NoaWxkRnJhZ21lbnQubmV4dEVmZmVjdCA9IG51bGw7XG4gICAgY3VycmVudEZhbGxiYWNrQ2hpbGRGcmFnbWVudC5mbGFncyA9IERlbGV0aW9uO1xuICAgIHdvcmtJblByb2dyZXNzLmZpcnN0RWZmZWN0ID0gd29ya0luUHJvZ3Jlc3MubGFzdEVmZmVjdCA9IGN1cnJlbnRGYWxsYmFja0NoaWxkRnJhZ21lbnQ7XG4gIH1cblxuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHByaW1hcnlDaGlsZEZyYWdtZW50O1xuICByZXR1cm4gcHJpbWFyeUNoaWxkRnJhZ21lbnQ7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVN1c3BlbnNlRmFsbGJhY2tDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcHJpbWFyeUNoaWxkcmVuLCBmYWxsYmFja0NoaWxkcmVuLCByZW5kZXJMYW5lcykge1xuICB2YXIgbW9kZSA9IHdvcmtJblByb2dyZXNzLm1vZGU7XG4gIHZhciBjdXJyZW50UHJpbWFyeUNoaWxkRnJhZ21lbnQgPSBjdXJyZW50LmNoaWxkO1xuICB2YXIgY3VycmVudEZhbGxiYWNrQ2hpbGRGcmFnbWVudCA9IGN1cnJlbnRQcmltYXJ5Q2hpbGRGcmFnbWVudC5zaWJsaW5nO1xuICB2YXIgcHJpbWFyeUNoaWxkUHJvcHMgPSB7XG4gICAgbW9kZTogJ2hpZGRlbicsXG4gICAgY2hpbGRyZW46IHByaW1hcnlDaGlsZHJlblxuICB9O1xuICB2YXIgcHJpbWFyeUNoaWxkRnJhZ21lbnQ7XG5cbiAgaWYgKCAvLyBJbiBsZWdhY3kgbW9kZSwgd2UgY29tbWl0IHRoZSBwcmltYXJ5IHRyZWUgYXMgaWYgaXQgc3VjY2Vzc2Z1bGx5XG4gIC8vIGNvbXBsZXRlZCwgZXZlbiB0aG91Z2ggaXQncyBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUuXG4gIChtb2RlICYgQmxvY2tpbmdNb2RlKSA9PT0gTm9Nb2RlICYmIC8vIE1ha2Ugc3VyZSB3ZSdyZSBvbiB0aGUgc2Vjb25kIHBhc3MsIGkuZS4gdGhlIHByaW1hcnkgY2hpbGQgZnJhZ21lbnQgd2FzXG4gIC8vIGFscmVhZHkgY2xvbmVkLiBJbiBsZWdhY3kgbW9kZSwgdGhlIG9ubHkgY2FzZSB3aGVyZSB0aGlzIGlzbid0IHRydWUgaXNcbiAgLy8gd2hlbiBEZXZUb29scyBmb3JjZXMgdXMgdG8gZGlzcGxheSBhIGZhbGxiYWNrOyB3ZSBza2lwIHRoZSBmaXJzdCByZW5kZXJcbiAgLy8gcGFzcyBlbnRpcmVseSBhbmQgZ28gc3RyYWlnaHQgdG8gcmVuZGVyaW5nIHRoZSBmYWxsYmFjay4gKEluIENvbmN1cnJlbnRcbiAgLy8gTW9kZSwgU3VzcGVuc2VMaXN0IGNhbiBhbHNvIHRyaWdnZXIgdGhpcyBzY2VuYXJpbywgYnV0IHRoaXMgaXMgYSBsZWdhY3ktXG4gIC8vIG9ubHkgY29kZXBhdGguKVxuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCAhPT0gY3VycmVudFByaW1hcnlDaGlsZEZyYWdtZW50KSB7XG4gICAgdmFyIHByb2dyZXNzZWRQcmltYXJ5RnJhZ21lbnQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudCA9IHByb2dyZXNzZWRQcmltYXJ5RnJhZ21lbnQ7XG4gICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuY2hpbGRMYW5lcyA9IE5vTGFuZXM7XG4gICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQucGVuZGluZ1Byb3BzID0gcHJpbWFyeUNoaWxkUHJvcHM7XG5cbiAgICBpZiAoIHdvcmtJblByb2dyZXNzLm1vZGUgJiBQcm9maWxlTW9kZSkge1xuICAgICAgLy8gUmVzZXQgdGhlIGR1cmF0aW9ucyBmcm9tIHRoZSBmaXJzdCBwYXNzIHNvIHRoZXkgYXJlbid0IGluY2x1ZGVkIGluIHRoZVxuICAgICAgLy8gZmluYWwgYW1vdW50cy4gVGhpcyBzZWVtcyBjb3VudGVyaW50dWl0aXZlLCBzaW5jZSB3ZSdyZSBpbnRlbnRpb25hbGx5XG4gICAgICAvLyBub3QgbWVhc3VyaW5nIHBhcnQgb2YgdGhlIHJlbmRlciBwaGFzZSwgYnV0IHRoaXMgbWFrZXMgaXQgbWF0Y2ggd2hhdCB3ZVxuICAgICAgLy8gZG8gaW4gQ29uY3VycmVudCBNb2RlLlxuICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuYWN0dWFsRHVyYXRpb24gPSAwO1xuICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuYWN0dWFsU3RhcnRUaW1lID0gLTE7XG4gICAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5zZWxmQmFzZUR1cmF0aW9uID0gY3VycmVudFByaW1hcnlDaGlsZEZyYWdtZW50LnNlbGZCYXNlRHVyYXRpb247XG4gICAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC50cmVlQmFzZUR1cmF0aW9uID0gY3VycmVudFByaW1hcnlDaGlsZEZyYWdtZW50LnRyZWVCYXNlRHVyYXRpb247XG4gICAgfSAvLyBUaGUgZmFsbGJhY2sgZmliZXIgd2FzIGFkZGVkIGFzIGEgZGVsZXRpb24gZWZmZWN0IGR1cmluZyB0aGUgZmlyc3QgcGFzcy5cbiAgICAvLyBIb3dldmVyLCBzaW5jZSB3ZSdyZSBnb2luZyB0byByZW1haW4gb24gdGhlIGZhbGxiYWNrLCB3ZSBubyBsb25nZXIgd2FudFxuICAgIC8vIHRvIGRlbGV0ZSBpdC4gU28gd2UgbmVlZCB0byByZW1vdmUgaXQgZnJvbSB0aGUgbGlzdC4gRGVsZXRpb25zIGFyZSBzdG9yZWRcbiAgICAvLyBvbiB0aGUgc2FtZSBsaXN0IGFzIGVmZmVjdHMuIFdlIHdhbnQgdG8ga2VlcCB0aGUgZWZmZWN0cyBmcm9tIHRoZSBwcmltYXJ5XG4gICAgLy8gdHJlZS4gU28gd2UgY29weSB0aGUgcHJpbWFyeSBjaGlsZCBmcmFnbWVudCdzIGVmZmVjdCBsaXN0LCB3aGljaCBkb2VzIG5vdFxuICAgIC8vIGluY2x1ZGUgdGhlIGZhbGxiYWNrIGRlbGV0aW9uIGVmZmVjdC5cblxuXG4gICAgdmFyIHByb2dyZXNzZWRMYXN0RWZmZWN0ID0gcHJpbWFyeUNoaWxkRnJhZ21lbnQubGFzdEVmZmVjdDtcblxuICAgIGlmIChwcm9ncmVzc2VkTGFzdEVmZmVjdCAhPT0gbnVsbCkge1xuICAgICAgd29ya0luUHJvZ3Jlc3MuZmlyc3RFZmZlY3QgPSBwcmltYXJ5Q2hpbGRGcmFnbWVudC5maXJzdEVmZmVjdDtcbiAgICAgIHdvcmtJblByb2dyZXNzLmxhc3RFZmZlY3QgPSBwcm9ncmVzc2VkTGFzdEVmZmVjdDtcbiAgICAgIHByb2dyZXNzZWRMYXN0RWZmZWN0Lm5leHRFZmZlY3QgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUT0RPOiBSZXNldCB0aGlzIHNvbWV3aGVyZSBlbHNlPyBMb2wgbGVnYWN5IG1vZGUgaXMgc28gd2VpcmQuXG4gICAgICB3b3JrSW5Qcm9ncmVzcy5maXJzdEVmZmVjdCA9IHdvcmtJblByb2dyZXNzLmxhc3RFZmZlY3QgPSBudWxsO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudCA9IGNyZWF0ZVdvcmtJblByb2dyZXNzT2Zmc2NyZWVuRmliZXIoY3VycmVudFByaW1hcnlDaGlsZEZyYWdtZW50LCBwcmltYXJ5Q2hpbGRQcm9wcyk7XG4gIH1cblxuICB2YXIgZmFsbGJhY2tDaGlsZEZyYWdtZW50O1xuXG4gIGlmIChjdXJyZW50RmFsbGJhY2tDaGlsZEZyYWdtZW50ICE9PSBudWxsKSB7XG4gICAgZmFsbGJhY2tDaGlsZEZyYWdtZW50ID0gY3JlYXRlV29ya0luUHJvZ3Jlc3MoY3VycmVudEZhbGxiYWNrQ2hpbGRGcmFnbWVudCwgZmFsbGJhY2tDaGlsZHJlbik7XG4gIH0gZWxzZSB7XG4gICAgZmFsbGJhY2tDaGlsZEZyYWdtZW50ID0gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoZmFsbGJhY2tDaGlsZHJlbiwgbW9kZSwgcmVuZGVyTGFuZXMsIG51bGwpOyAvLyBOZWVkcyBhIHBsYWNlbWVudCBlZmZlY3QgYmVjYXVzZSB0aGUgcGFyZW50ICh0aGUgU3VzcGVuc2UgYm91bmRhcnkpIGFscmVhZHlcbiAgICAvLyBtb3VudGVkIGJ1dCB0aGlzIGlzIGEgbmV3IGZpYmVyLlxuXG4gICAgZmFsbGJhY2tDaGlsZEZyYWdtZW50LmZsYWdzIHw9IFBsYWNlbWVudDtcbiAgfVxuXG4gIGZhbGxiYWNrQ2hpbGRGcmFnbWVudC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgcHJpbWFyeUNoaWxkRnJhZ21lbnQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gIHByaW1hcnlDaGlsZEZyYWdtZW50LnNpYmxpbmcgPSBmYWxsYmFja0NoaWxkRnJhZ21lbnQ7XG4gIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcHJpbWFyeUNoaWxkRnJhZ21lbnQ7XG4gIHJldHVybiBmYWxsYmFja0NoaWxkRnJhZ21lbnQ7XG59XG5cbmZ1bmN0aW9uIHNjaGVkdWxlV29ya09uRmliZXIoZmliZXIsIHJlbmRlckxhbmVzKSB7XG4gIGZpYmVyLmxhbmVzID0gbWVyZ2VMYW5lcyhmaWJlci5sYW5lcywgcmVuZGVyTGFuZXMpO1xuICB2YXIgYWx0ZXJuYXRlID0gZmliZXIuYWx0ZXJuYXRlO1xuXG4gIGlmIChhbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICBhbHRlcm5hdGUubGFuZXMgPSBtZXJnZUxhbmVzKGFsdGVybmF0ZS5sYW5lcywgcmVuZGVyTGFuZXMpO1xuICB9XG5cbiAgc2NoZWR1bGVXb3JrT25QYXJlbnRQYXRoKGZpYmVyLnJldHVybiwgcmVuZGVyTGFuZXMpO1xufVxuXG5mdW5jdGlvbiBwcm9wYWdhdGVTdXNwZW5zZUNvbnRleHRDaGFuZ2Uod29ya0luUHJvZ3Jlc3MsIGZpcnN0Q2hpbGQsIHJlbmRlckxhbmVzKSB7XG4gIC8vIE1hcmsgYW55IFN1c3BlbnNlIGJvdW5kYXJpZXMgd2l0aCBmYWxsYmFja3MgYXMgaGF2aW5nIHdvcmsgdG8gZG8uXG4gIC8vIElmIHRoZXkgd2VyZSBwcmV2aW91c2x5IGZvcmNlZCBpbnRvIGZhbGxiYWNrcywgdGhleSBtYXkgbm93IGJlIGFibGVcbiAgLy8gdG8gdW5ibG9jay5cbiAgdmFyIG5vZGUgPSBmaXJzdENoaWxkO1xuXG4gIHdoaWxlIChub2RlICE9PSBudWxsKSB7XG4gICAgaWYgKG5vZGUudGFnID09PSBTdXNwZW5zZUNvbXBvbmVudCkge1xuICAgICAgdmFyIHN0YXRlID0gbm9kZS5tZW1vaXplZFN0YXRlO1xuXG4gICAgICBpZiAoc3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgc2NoZWR1bGVXb3JrT25GaWJlcihub2RlLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChub2RlLnRhZyA9PT0gU3VzcGVuc2VMaXN0Q29tcG9uZW50KSB7XG4gICAgICAvLyBJZiB0aGUgdGFpbCBpcyBoaWRkZW4gdGhlcmUgbWlnaHQgbm90IGJlIGFuIFN1c3BlbnNlIGJvdW5kYXJpZXNcbiAgICAgIC8vIHRvIHNjaGVkdWxlIHdvcmsgb24uIEluIHRoaXMgY2FzZSB3ZSBoYXZlIHRvIHNjaGVkdWxlIGl0IG9uIHRoZVxuICAgICAgLy8gbGlzdCBpdHNlbGYuXG4gICAgICAvLyBXZSBkb24ndCBoYXZlIHRvIHRyYXZlcnNlIHRvIHRoZSBjaGlsZHJlbiBvZiB0aGUgbGlzdCBzaW5jZVxuICAgICAgLy8gdGhlIGxpc3Qgd2lsbCBwcm9wYWdhdGUgdGhlIGNoYW5nZSB3aGVuIGl0IHJlcmVuZGVycy5cbiAgICAgIHNjaGVkdWxlV29ya09uRmliZXIobm9kZSwgcmVuZGVyTGFuZXMpO1xuICAgIH0gZWxzZSBpZiAobm9kZS5jaGlsZCAhPT0gbnVsbCkge1xuICAgICAgbm9kZS5jaGlsZC5yZXR1cm4gPSBub2RlO1xuICAgICAgbm9kZSA9IG5vZGUuY2hpbGQ7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAobm9kZSA9PT0gd29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3aGlsZSAobm9kZS5zaWJsaW5nID09PSBudWxsKSB7XG4gICAgICBpZiAobm9kZS5yZXR1cm4gPT09IG51bGwgfHwgbm9kZS5yZXR1cm4gPT09IHdvcmtJblByb2dyZXNzKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgIH1cblxuICAgIG5vZGUuc2libGluZy5yZXR1cm4gPSBub2RlLnJldHVybjtcbiAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmRMYXN0Q29udGVudFJvdyhmaXJzdENoaWxkKSB7XG4gIC8vIFRoaXMgaXMgZ29pbmcgdG8gZmluZCB0aGUgbGFzdCByb3cgYW1vbmcgdGhlc2UgY2hpbGRyZW4gdGhhdCBpcyBhbHJlYWR5XG4gIC8vIHNob3dpbmcgY29udGVudCBvbiB0aGUgc2NyZWVuLCBhcyBvcHBvc2VkIHRvIGJlaW5nIGluIGZhbGxiYWNrIHN0YXRlIG9yXG4gIC8vIG5ldy4gSWYgYSByb3cgaGFzIG11bHRpcGxlIFN1c3BlbnNlIGJvdW5kYXJpZXMsIGFueSBvZiB0aGVtIGJlaW5nIGluIHRoZVxuICAvLyBmYWxsYmFjayBzdGF0ZSwgY291bnRzIGFzIHRoZSB3aG9sZSByb3cgYmVpbmcgaW4gYSBmYWxsYmFjayBzdGF0ZS5cbiAgLy8gTm90ZSB0aGF0IHRoZSBcInJvd3NcIiB3aWxsIGJlIHdvcmtJblByb2dyZXNzLCBidXQgYW55IG5lc3RlZCBjaGlsZHJlblxuICAvLyB3aWxsIHN0aWxsIGJlIGN1cnJlbnQgc2luY2Ugd2UgaGF2ZW4ndCByZW5kZXJlZCB0aGVtIHlldC4gVGhlIG1vdW50ZWRcbiAgLy8gb3JkZXIgbWF5IG5vdCBiZSB0aGUgc2FtZSBhcyB0aGUgbmV3IG9yZGVyLiBXZSB1c2UgdGhlIG5ldyBvcmRlci5cbiAgdmFyIHJvdyA9IGZpcnN0Q2hpbGQ7XG4gIHZhciBsYXN0Q29udGVudFJvdyA9IG51bGw7XG5cbiAgd2hpbGUgKHJvdyAhPT0gbnVsbCkge1xuICAgIHZhciBjdXJyZW50Um93ID0gcm93LmFsdGVybmF0ZTsgLy8gTmV3IHJvd3MgY2FuJ3QgYmUgY29udGVudCByb3dzLlxuXG4gICAgaWYgKGN1cnJlbnRSb3cgIT09IG51bGwgJiYgZmluZEZpcnN0U3VzcGVuZGVkKGN1cnJlbnRSb3cpID09PSBudWxsKSB7XG4gICAgICBsYXN0Q29udGVudFJvdyA9IHJvdztcbiAgICB9XG5cbiAgICByb3cgPSByb3cuc2libGluZztcbiAgfVxuXG4gIHJldHVybiBsYXN0Q29udGVudFJvdztcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVSZXZlYWxPcmRlcihyZXZlYWxPcmRlcikge1xuICB7XG4gICAgaWYgKHJldmVhbE9yZGVyICE9PSB1bmRlZmluZWQgJiYgcmV2ZWFsT3JkZXIgIT09ICdmb3J3YXJkcycgJiYgcmV2ZWFsT3JkZXIgIT09ICdiYWNrd2FyZHMnICYmIHJldmVhbE9yZGVyICE9PSAndG9nZXRoZXInICYmICFkaWRXYXJuQWJvdXRSZXZlYWxPcmRlcltyZXZlYWxPcmRlcl0pIHtcbiAgICAgIGRpZFdhcm5BYm91dFJldmVhbE9yZGVyW3JldmVhbE9yZGVyXSA9IHRydWU7XG5cbiAgICAgIGlmICh0eXBlb2YgcmV2ZWFsT3JkZXIgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHN3aXRjaCAocmV2ZWFsT3JkZXIudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgIGNhc2UgJ3RvZ2V0aGVyJzpcbiAgICAgICAgICBjYXNlICdmb3J3YXJkcyc6XG4gICAgICAgICAgY2FzZSAnYmFja3dhcmRzJzpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZXJyb3IoJ1wiJXNcIiBpcyBub3QgYSB2YWxpZCB2YWx1ZSBmb3IgcmV2ZWFsT3JkZXIgb24gPFN1c3BlbnNlTGlzdCAvPi4gJyArICdVc2UgbG93ZXJjYXNlIFwiJXNcIiBpbnN0ZWFkLicsIHJldmVhbE9yZGVyLCByZXZlYWxPcmRlci50b0xvd2VyQ2FzZSgpKTtcblxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIGNhc2UgJ2ZvcndhcmQnOlxuICAgICAgICAgIGNhc2UgJ2JhY2t3YXJkJzpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZXJyb3IoJ1wiJXNcIiBpcyBub3QgYSB2YWxpZCB2YWx1ZSBmb3IgcmV2ZWFsT3JkZXIgb24gPFN1c3BlbnNlTGlzdCAvPi4gJyArICdSZWFjdCB1c2VzIHRoZSAtcyBzdWZmaXggaW4gdGhlIHNwZWxsaW5nLiBVc2UgXCIlc3NcIiBpbnN0ZWFkLicsIHJldmVhbE9yZGVyLCByZXZlYWxPcmRlci50b0xvd2VyQ2FzZSgpKTtcblxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBlcnJvcignXCIlc1wiIGlzIG5vdCBhIHN1cHBvcnRlZCByZXZlYWxPcmRlciBvbiA8U3VzcGVuc2VMaXN0IC8+LiAnICsgJ0RpZCB5b3UgbWVhbiBcInRvZ2V0aGVyXCIsIFwiZm9yd2FyZHNcIiBvciBcImJhY2t3YXJkc1wiPycsIHJldmVhbE9yZGVyKTtcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVycm9yKCclcyBpcyBub3QgYSBzdXBwb3J0ZWQgdmFsdWUgZm9yIHJldmVhbE9yZGVyIG9uIDxTdXNwZW5zZUxpc3QgLz4uICcgKyAnRGlkIHlvdSBtZWFuIFwidG9nZXRoZXJcIiwgXCJmb3J3YXJkc1wiIG9yIFwiYmFja3dhcmRzXCI/JywgcmV2ZWFsT3JkZXIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVRhaWxPcHRpb25zKHRhaWxNb2RlLCByZXZlYWxPcmRlcikge1xuICB7XG4gICAgaWYgKHRhaWxNb2RlICE9PSB1bmRlZmluZWQgJiYgIWRpZFdhcm5BYm91dFRhaWxPcHRpb25zW3RhaWxNb2RlXSkge1xuICAgICAgaWYgKHRhaWxNb2RlICE9PSAnY29sbGFwc2VkJyAmJiB0YWlsTW9kZSAhPT0gJ2hpZGRlbicpIHtcbiAgICAgICAgZGlkV2FybkFib3V0VGFpbE9wdGlvbnNbdGFpbE1vZGVdID0gdHJ1ZTtcblxuICAgICAgICBlcnJvcignXCIlc1wiIGlzIG5vdCBhIHN1cHBvcnRlZCB2YWx1ZSBmb3IgdGFpbCBvbiA8U3VzcGVuc2VMaXN0IC8+LiAnICsgJ0RpZCB5b3UgbWVhbiBcImNvbGxhcHNlZFwiIG9yIFwiaGlkZGVuXCI/JywgdGFpbE1vZGUpO1xuICAgICAgfSBlbHNlIGlmIChyZXZlYWxPcmRlciAhPT0gJ2ZvcndhcmRzJyAmJiByZXZlYWxPcmRlciAhPT0gJ2JhY2t3YXJkcycpIHtcbiAgICAgICAgZGlkV2FybkFib3V0VGFpbE9wdGlvbnNbdGFpbE1vZGVdID0gdHJ1ZTtcblxuICAgICAgICBlcnJvcignPFN1c3BlbnNlTGlzdCB0YWlsPVwiJXNcIiAvPiBpcyBvbmx5IHZhbGlkIGlmIHJldmVhbE9yZGVyIGlzICcgKyAnXCJmb3J3YXJkc1wiIG9yIFwiYmFja3dhcmRzXCIuICcgKyAnRGlkIHlvdSBtZWFuIHRvIHNwZWNpZnkgcmV2ZWFsT3JkZXI9XCJmb3J3YXJkc1wiPycsIHRhaWxNb2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdXNwZW5zZUxpc3ROZXN0ZWRDaGlsZChjaGlsZFNsb3QsIGluZGV4KSB7XG4gIHtcbiAgICB2YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkoY2hpbGRTbG90KTtcbiAgICB2YXIgaXNJdGVyYWJsZSA9ICFpc0FycmF5ICYmIHR5cGVvZiBnZXRJdGVyYXRvckZuKGNoaWxkU2xvdCkgPT09ICdmdW5jdGlvbic7XG5cbiAgICBpZiAoaXNBcnJheSB8fCBpc0l0ZXJhYmxlKSB7XG4gICAgICB2YXIgdHlwZSA9IGlzQXJyYXkgPyAnYXJyYXknIDogJ2l0ZXJhYmxlJztcblxuICAgICAgZXJyb3IoJ0EgbmVzdGVkICVzIHdhcyBwYXNzZWQgdG8gcm93ICMlcyBpbiA8U3VzcGVuc2VMaXN0IC8+LiBXcmFwIGl0IGluICcgKyAnYW4gYWRkaXRpb25hbCBTdXNwZW5zZUxpc3QgdG8gY29uZmlndXJlIGl0cyByZXZlYWxPcmRlcjogJyArICc8U3VzcGVuc2VMaXN0IHJldmVhbE9yZGVyPS4uLj4gLi4uICcgKyAnPFN1c3BlbnNlTGlzdCByZXZlYWxPcmRlcj0uLi4+eyVzfTwvU3VzcGVuc2VMaXN0PiAuLi4gJyArICc8L1N1c3BlbnNlTGlzdD4nLCB0eXBlLCBpbmRleCwgdHlwZSk7XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdXNwZW5zZUxpc3RDaGlsZHJlbihjaGlsZHJlbiwgcmV2ZWFsT3JkZXIpIHtcbiAge1xuICAgIGlmICgocmV2ZWFsT3JkZXIgPT09ICdmb3J3YXJkcycgfHwgcmV2ZWFsT3JkZXIgPT09ICdiYWNrd2FyZHMnKSAmJiBjaGlsZHJlbiAhPT0gdW5kZWZpbmVkICYmIGNoaWxkcmVuICE9PSBudWxsICYmIGNoaWxkcmVuICE9PSBmYWxzZSkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoIXZhbGlkYXRlU3VzcGVuc2VMaXN0TmVzdGVkQ2hpbGQoY2hpbGRyZW5baV0sIGkpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4oY2hpbGRyZW4pO1xuXG4gICAgICAgIGlmICh0eXBlb2YgaXRlcmF0b3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHZhciBjaGlsZHJlbkl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKGNoaWxkcmVuKTtcblxuICAgICAgICAgIGlmIChjaGlsZHJlbkl0ZXJhdG9yKSB7XG4gICAgICAgICAgICB2YXIgc3RlcCA9IGNoaWxkcmVuSXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgdmFyIF9pID0gMDtcblxuICAgICAgICAgICAgZm9yICg7ICFzdGVwLmRvbmU7IHN0ZXAgPSBjaGlsZHJlbkl0ZXJhdG9yLm5leHQoKSkge1xuICAgICAgICAgICAgICBpZiAoIXZhbGlkYXRlU3VzcGVuc2VMaXN0TmVzdGVkQ2hpbGQoc3RlcC52YWx1ZSwgX2kpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgX2krKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZXJyb3IoJ0Egc2luZ2xlIHJvdyB3YXMgcGFzc2VkIHRvIGEgPFN1c3BlbnNlTGlzdCByZXZlYWxPcmRlcj1cIiVzXCIgLz4uICcgKyAnVGhpcyBpcyBub3QgdXNlZnVsIHNpbmNlIGl0IG5lZWRzIG11bHRpcGxlIHJvd3MuICcgKyAnRGlkIHlvdSBtZWFuIHRvIHBhc3MgbXVsdGlwbGUgY2hpbGRyZW4gb3IgYW4gYXJyYXk/JywgcmV2ZWFsT3JkZXIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGluaXRTdXNwZW5zZUxpc3RSZW5kZXJTdGF0ZSh3b3JrSW5Qcm9ncmVzcywgaXNCYWNrd2FyZHMsIHRhaWwsIGxhc3RDb250ZW50Um93LCB0YWlsTW9kZSwgbGFzdEVmZmVjdEJlZm9yZVJlbmRlcmluZykge1xuICB2YXIgcmVuZGVyU3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuXG4gIGlmIChyZW5kZXJTdGF0ZSA9PT0gbnVsbCkge1xuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSB7XG4gICAgICBpc0JhY2t3YXJkczogaXNCYWNrd2FyZHMsXG4gICAgICByZW5kZXJpbmc6IG51bGwsXG4gICAgICByZW5kZXJpbmdTdGFydFRpbWU6IDAsXG4gICAgICBsYXN0OiBsYXN0Q29udGVudFJvdyxcbiAgICAgIHRhaWw6IHRhaWwsXG4gICAgICB0YWlsTW9kZTogdGFpbE1vZGUsXG4gICAgICBsYXN0RWZmZWN0OiBsYXN0RWZmZWN0QmVmb3JlUmVuZGVyaW5nXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICAvLyBXZSBjYW4gcmV1c2UgdGhlIGV4aXN0aW5nIG9iamVjdCBmcm9tIHByZXZpb3VzIHJlbmRlcnMuXG4gICAgcmVuZGVyU3RhdGUuaXNCYWNrd2FyZHMgPSBpc0JhY2t3YXJkcztcbiAgICByZW5kZXJTdGF0ZS5yZW5kZXJpbmcgPSBudWxsO1xuICAgIHJlbmRlclN0YXRlLnJlbmRlcmluZ1N0YXJ0VGltZSA9IDA7XG4gICAgcmVuZGVyU3RhdGUubGFzdCA9IGxhc3RDb250ZW50Um93O1xuICAgIHJlbmRlclN0YXRlLnRhaWwgPSB0YWlsO1xuICAgIHJlbmRlclN0YXRlLnRhaWxNb2RlID0gdGFpbE1vZGU7XG4gICAgcmVuZGVyU3RhdGUubGFzdEVmZmVjdCA9IGxhc3RFZmZlY3RCZWZvcmVSZW5kZXJpbmc7XG4gIH1cbn0gLy8gVGhpcyBjYW4gZW5kIHVwIHJlbmRlcmluZyB0aGlzIGNvbXBvbmVudCBtdWx0aXBsZSBwYXNzZXMuXG4vLyBUaGUgZmlyc3QgcGFzcyBzcGxpdHMgdGhlIGNoaWxkcmVuIGZpYmVycyBpbnRvIHR3byBzZXRzLiBBIGhlYWQgYW5kIHRhaWwuXG4vLyBXZSBmaXJzdCByZW5kZXIgdGhlIGhlYWQuIElmIGFueXRoaW5nIGlzIGluIGZhbGxiYWNrIHN0YXRlLCB3ZSBkbyBhbm90aGVyXG4vLyBwYXNzIHRocm91Z2ggYmVnaW5Xb3JrIHRvIHJlcmVuZGVyIGFsbCBjaGlsZHJlbiAoaW5jbHVkaW5nIHRoZSB0YWlsKSB3aXRoXG4vLyB0aGUgZm9yY2Ugc3VzcGVuZCBjb250ZXh0LiBJZiB0aGUgZmlyc3QgcmVuZGVyIGRpZG4ndCBoYXZlIGFueXRoaW5nIGluXG4vLyBpbiBmYWxsYmFjayBzdGF0ZS4gVGhlbiB3ZSByZW5kZXIgZWFjaCByb3cgaW4gdGhlIHRhaWwgb25lLWJ5LW9uZS5cbi8vIFRoYXQgaGFwcGVucyBpbiB0aGUgY29tcGxldGVXb3JrIHBoYXNlIHdpdGhvdXQgZ29pbmcgYmFjayB0byBiZWdpbldvcmsuXG5cblxuZnVuY3Rpb24gdXBkYXRlU3VzcGVuc2VMaXN0Q29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICB2YXIgbmV4dFByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICB2YXIgcmV2ZWFsT3JkZXIgPSBuZXh0UHJvcHMucmV2ZWFsT3JkZXI7XG4gIHZhciB0YWlsTW9kZSA9IG5leHRQcm9wcy50YWlsO1xuICB2YXIgbmV3Q2hpbGRyZW4gPSBuZXh0UHJvcHMuY2hpbGRyZW47XG4gIHZhbGlkYXRlUmV2ZWFsT3JkZXIocmV2ZWFsT3JkZXIpO1xuICB2YWxpZGF0ZVRhaWxPcHRpb25zKHRhaWxNb2RlLCByZXZlYWxPcmRlcik7XG4gIHZhbGlkYXRlU3VzcGVuc2VMaXN0Q2hpbGRyZW4obmV3Q2hpbGRyZW4sIHJldmVhbE9yZGVyKTtcbiAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5ld0NoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIHZhciBzdXNwZW5zZUNvbnRleHQgPSBzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQ7XG4gIHZhciBzaG91bGRGb3JjZUZhbGxiYWNrID0gaGFzU3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlQ29udGV4dCwgRm9yY2VTdXNwZW5zZUZhbGxiYWNrKTtcblxuICBpZiAoc2hvdWxkRm9yY2VGYWxsYmFjaykge1xuICAgIHN1c3BlbnNlQ29udGV4dCA9IHNldFNoYWxsb3dTdXNwZW5zZUNvbnRleHQoc3VzcGVuc2VDb250ZXh0LCBGb3JjZVN1c3BlbnNlRmFsbGJhY2spO1xuICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IERpZENhcHR1cmU7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGRpZFN1c3BlbmRCZWZvcmUgPSBjdXJyZW50ICE9PSBudWxsICYmIChjdXJyZW50LmZsYWdzICYgRGlkQ2FwdHVyZSkgIT09IE5vRmxhZ3M7XG5cbiAgICBpZiAoZGlkU3VzcGVuZEJlZm9yZSkge1xuICAgICAgLy8gSWYgd2UgcHJldmlvdXNseSBmb3JjZWQgYSBmYWxsYmFjaywgd2UgbmVlZCB0byBzY2hlZHVsZSB3b3JrXG4gICAgICAvLyBvbiBhbnkgbmVzdGVkIGJvdW5kYXJpZXMgdG8gbGV0IHRoZW0ga25vdyB0byB0cnkgdG8gcmVuZGVyXG4gICAgICAvLyBhZ2Fpbi4gVGhpcyBpcyB0aGUgc2FtZSBhcyBjb250ZXh0IHVwZGF0aW5nLlxuICAgICAgcHJvcGFnYXRlU3VzcGVuc2VDb250ZXh0Q2hhbmdlKHdvcmtJblByb2dyZXNzLCB3b3JrSW5Qcm9ncmVzcy5jaGlsZCwgcmVuZGVyTGFuZXMpO1xuICAgIH1cblxuICAgIHN1c3BlbnNlQ29udGV4dCA9IHNldERlZmF1bHRTaGFsbG93U3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlQ29udGV4dCk7XG4gIH1cblxuICBwdXNoU3VzcGVuc2VDb250ZXh0KHdvcmtJblByb2dyZXNzLCBzdXNwZW5zZUNvbnRleHQpO1xuXG4gIGlmICgod29ya0luUHJvZ3Jlc3MubW9kZSAmIEJsb2NraW5nTW9kZSkgPT09IE5vTW9kZSkge1xuICAgIC8vIEluIGxlZ2FjeSBtb2RlLCBTdXNwZW5zZUxpc3QgZG9lc24ndCB3b3JrIHNvIHdlIGp1c3RcbiAgICAvLyB1c2UgbWFrZSBpdCBhIG5vb3AgYnkgdHJlYXRpbmcgaXQgYXMgdGhlIGRlZmF1bHQgcmV2ZWFsT3JkZXIuXG4gICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gIH0gZWxzZSB7XG4gICAgc3dpdGNoIChyZXZlYWxPcmRlcikge1xuICAgICAgY2FzZSAnZm9yd2FyZHMnOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIGxhc3RDb250ZW50Um93ID0gZmluZExhc3RDb250ZW50Um93KHdvcmtJblByb2dyZXNzLmNoaWxkKTtcbiAgICAgICAgICB2YXIgdGFpbDtcblxuICAgICAgICAgIGlmIChsYXN0Q29udGVudFJvdyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gVGhlIHdob2xlIGxpc3QgaXMgcGFydCBvZiB0aGUgdGFpbC5cbiAgICAgICAgICAgIC8vIFRPRE86IFdlIGNvdWxkIGZhc3QgcGF0aCBieSBqdXN0IHJlbmRlcmluZyB0aGUgdGFpbCBub3cuXG4gICAgICAgICAgICB0YWlsID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IG51bGw7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIERpc2Nvbm5lY3QgdGhlIHRhaWwgcm93cyBhZnRlciB0aGUgY29udGVudCByb3cuXG4gICAgICAgICAgICAvLyBXZSdyZSBnb2luZyB0byByZW5kZXIgdGhlbSBzZXBhcmF0ZWx5IGxhdGVyLlxuICAgICAgICAgICAgdGFpbCA9IGxhc3RDb250ZW50Um93LnNpYmxpbmc7XG4gICAgICAgICAgICBsYXN0Q29udGVudFJvdy5zaWJsaW5nID0gbnVsbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpbml0U3VzcGVuc2VMaXN0UmVuZGVyU3RhdGUod29ya0luUHJvZ3Jlc3MsIGZhbHNlLCAvLyBpc0JhY2t3YXJkc1xuICAgICAgICAgIHRhaWwsIGxhc3RDb250ZW50Um93LCB0YWlsTW9kZSwgd29ya0luUHJvZ3Jlc3MubGFzdEVmZmVjdCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSAnYmFja3dhcmRzJzpcbiAgICAgICAge1xuICAgICAgICAgIC8vIFdlJ3JlIGdvaW5nIHRvIGZpbmQgdGhlIGZpcnN0IHJvdyB0aGF0IGhhcyBleGlzdGluZyBjb250ZW50LlxuICAgICAgICAgIC8vIEF0IHRoZSBzYW1lIHRpbWUgd2UncmUgZ29pbmcgdG8gcmV2ZXJzZSB0aGUgbGlzdCBvZiBldmVyeXRoaW5nXG4gICAgICAgICAgLy8gd2UgcGFzcyBpbiB0aGUgbWVhbnRpbWUuIFRoYXQncyBnb2luZyB0byBiZSBvdXIgdGFpbCBpbiByZXZlcnNlXG4gICAgICAgICAgLy8gb3JkZXIuXG4gICAgICAgICAgdmFyIF90YWlsID0gbnVsbDtcbiAgICAgICAgICB2YXIgcm93ID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBudWxsO1xuXG4gICAgICAgICAgd2hpbGUgKHJvdyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIGN1cnJlbnRSb3cgPSByb3cuYWx0ZXJuYXRlOyAvLyBOZXcgcm93cyBjYW4ndCBiZSBjb250ZW50IHJvd3MuXG5cbiAgICAgICAgICAgIGlmIChjdXJyZW50Um93ICE9PSBudWxsICYmIGZpbmRGaXJzdFN1c3BlbmRlZChjdXJyZW50Um93KSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG1haW4gY29udGVudC5cbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSByb3c7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgbmV4dFJvdyA9IHJvdy5zaWJsaW5nO1xuICAgICAgICAgICAgcm93LnNpYmxpbmcgPSBfdGFpbDtcbiAgICAgICAgICAgIF90YWlsID0gcm93O1xuICAgICAgICAgICAgcm93ID0gbmV4dFJvdztcbiAgICAgICAgICB9IC8vIFRPRE86IElmIHdvcmtJblByb2dyZXNzLmNoaWxkIGlzIG51bGwsIHdlIGNhbiBjb250aW51ZSBvbiB0aGUgdGFpbCBpbW1lZGlhdGVseS5cblxuXG4gICAgICAgICAgaW5pdFN1c3BlbnNlTGlzdFJlbmRlclN0YXRlKHdvcmtJblByb2dyZXNzLCB0cnVlLCAvLyBpc0JhY2t3YXJkc1xuICAgICAgICAgIF90YWlsLCBudWxsLCAvLyBsYXN0XG4gICAgICAgICAgdGFpbE1vZGUsIHdvcmtJblByb2dyZXNzLmxhc3RFZmZlY3QpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgJ3RvZ2V0aGVyJzpcbiAgICAgICAge1xuICAgICAgICAgIGluaXRTdXNwZW5zZUxpc3RSZW5kZXJTdGF0ZSh3b3JrSW5Qcm9ncmVzcywgZmFsc2UsIC8vIGlzQmFja3dhcmRzXG4gICAgICAgICAgbnVsbCwgLy8gdGFpbFxuICAgICAgICAgIG51bGwsIC8vIGxhc3RcbiAgICAgICAgICB1bmRlZmluZWQsIHdvcmtJblByb2dyZXNzLmxhc3RFZmZlY3QpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHtcbiAgICAgICAgICAvLyBUaGUgZGVmYXVsdCByZXZlYWwgb3JkZXIgaXMgdGhlIHNhbWUgYXMgbm90IGhhdmluZ1xuICAgICAgICAgIC8vIGEgYm91bmRhcnkuXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVBvcnRhbENvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgcHVzaEhvc3RDb250YWluZXIod29ya0luUHJvZ3Jlc3MsIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKTtcbiAgdmFyIG5leHRDaGlsZHJlbiA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcblxuICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgIC8vIFBvcnRhbHMgYXJlIHNwZWNpYWwgYmVjYXVzZSB3ZSBkb24ndCBhcHBlbmQgdGhlIGNoaWxkcmVuIGR1cmluZyBtb3VudFxuICAgIC8vIGJ1dCBhdCBjb21taXQuIFRoZXJlZm9yZSB3ZSBuZWVkIHRvIHRyYWNrIGluc2VydGlvbnMgd2hpY2ggdGhlIG5vcm1hbFxuICAgIC8vIGZsb3cgZG9lc24ndCBkbyBkdXJpbmcgbW91bnQuIFRoaXMgZG9lc24ndCBoYXBwZW4gYXQgdGhlIHJvb3QgYmVjYXVzZVxuICAgIC8vIHRoZSByb290IGFsd2F5cyBzdGFydHMgd2l0aCBhIFwiY3VycmVudFwiIHdpdGggYSBudWxsIGNoaWxkLlxuICAgIC8vIFRPRE86IENvbnNpZGVyIHVuaWZ5aW5nIHRoaXMgd2l0aCBob3cgdGhlIHJvb3Qgd29ya3MuXG4gICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSByZWNvbmNpbGVDaGlsZEZpYmVycyh3b3JrSW5Qcm9ncmVzcywgbnVsbCwgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIH0gZWxzZSB7XG4gICAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICB9XG5cbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuXG52YXIgaGFzV2FybmVkQWJvdXRVc2luZ05vVmFsdWVQcm9wT25Db250ZXh0UHJvdmlkZXIgPSBmYWxzZTtcblxuZnVuY3Rpb24gdXBkYXRlQ29udGV4dFByb3ZpZGVyKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICB2YXIgcHJvdmlkZXJUeXBlID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgdmFyIGNvbnRleHQgPSBwcm92aWRlclR5cGUuX2NvbnRleHQ7XG4gIHZhciBuZXdQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgdmFyIG9sZFByb3BzID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcztcbiAgdmFyIG5ld1ZhbHVlID0gbmV3UHJvcHMudmFsdWU7XG5cbiAge1xuICAgIGlmICghKCd2YWx1ZScgaW4gbmV3UHJvcHMpKSB7XG4gICAgICBpZiAoIWhhc1dhcm5lZEFib3V0VXNpbmdOb1ZhbHVlUHJvcE9uQ29udGV4dFByb3ZpZGVyKSB7XG4gICAgICAgIGhhc1dhcm5lZEFib3V0VXNpbmdOb1ZhbHVlUHJvcE9uQ29udGV4dFByb3ZpZGVyID0gdHJ1ZTtcblxuICAgICAgICBlcnJvcignVGhlIGB2YWx1ZWAgcHJvcCBpcyByZXF1aXJlZCBmb3IgdGhlIGA8Q29udGV4dC5Qcm92aWRlcj5gLiBEaWQgeW91IG1pc3NwZWxsIGl0IG9yIGZvcmdldCB0byBwYXNzIGl0PycpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBwcm92aWRlclByb3BUeXBlcyA9IHdvcmtJblByb2dyZXNzLnR5cGUucHJvcFR5cGVzO1xuXG4gICAgaWYgKHByb3ZpZGVyUHJvcFR5cGVzKSB7XG4gICAgICBjaGVja1Byb3BUeXBlcyhwcm92aWRlclByb3BUeXBlcywgbmV3UHJvcHMsICdwcm9wJywgJ0NvbnRleHQuUHJvdmlkZXInKTtcbiAgICB9XG4gIH1cblxuICBwdXNoUHJvdmlkZXIod29ya0luUHJvZ3Jlc3MsIG5ld1ZhbHVlKTtcblxuICBpZiAob2xkUHJvcHMgIT09IG51bGwpIHtcbiAgICB2YXIgb2xkVmFsdWUgPSBvbGRQcm9wcy52YWx1ZTtcbiAgICB2YXIgY2hhbmdlZEJpdHMgPSBjYWxjdWxhdGVDaGFuZ2VkQml0cyhjb250ZXh0LCBuZXdWYWx1ZSwgb2xkVmFsdWUpO1xuXG4gICAgaWYgKGNoYW5nZWRCaXRzID09PSAwKSB7XG4gICAgICAvLyBObyBjaGFuZ2UuIEJhaWxvdXQgZWFybHkgaWYgY2hpbGRyZW4gYXJlIHRoZSBzYW1lLlxuICAgICAgaWYgKG9sZFByb3BzLmNoaWxkcmVuID09PSBuZXdQcm9wcy5jaGlsZHJlbiAmJiAhaGFzQ29udGV4dENoYW5nZWQoKSkge1xuICAgICAgICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGUgY29udGV4dCB2YWx1ZSBjaGFuZ2VkLiBTZWFyY2ggZm9yIG1hdGNoaW5nIGNvbnN1bWVycyBhbmQgc2NoZWR1bGVcbiAgICAgIC8vIHRoZW0gdG8gdXBkYXRlLlxuICAgICAgcHJvcGFnYXRlQ29udGV4dENoYW5nZSh3b3JrSW5Qcm9ncmVzcywgY29udGV4dCwgY2hhbmdlZEJpdHMsIHJlbmRlckxhbmVzKTtcbiAgICB9XG4gIH1cblxuICB2YXIgbmV3Q2hpbGRyZW4gPSBuZXdQcm9wcy5jaGlsZHJlbjtcbiAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5ld0NoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxudmFyIGhhc1dhcm5lZEFib3V0VXNpbmdDb250ZXh0QXNDb25zdW1lciA9IGZhbHNlO1xuXG5mdW5jdGlvbiB1cGRhdGVDb250ZXh0Q29uc3VtZXIoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHZhciBjb250ZXh0ID0gd29ya0luUHJvZ3Jlc3MudHlwZTsgLy8gVGhlIGxvZ2ljIGJlbG93IGZvciBDb250ZXh0IGRpZmZlcnMgZGVwZW5kaW5nIG9uIFBST0Qgb3IgREVWIG1vZGUuIEluXG4gIC8vIERFViBtb2RlLCB3ZSBjcmVhdGUgYSBzZXBhcmF0ZSBvYmplY3QgZm9yIENvbnRleHQuQ29uc3VtZXIgdGhhdCBhY3RzXG4gIC8vIGxpa2UgYSBwcm94eSB0byBDb250ZXh0LiBUaGlzIHByb3h5IG9iamVjdCBhZGRzIHVubmVjZXNzYXJ5IGNvZGUgaW4gUFJPRFxuICAvLyBzbyB3ZSB1c2UgdGhlIG9sZCBiZWhhdmlvdXIgKENvbnRleHQuQ29uc3VtZXIgcmVmZXJlbmNlcyBDb250ZXh0KSB0b1xuICAvLyByZWR1Y2Ugc2l6ZSBhbmQgb3ZlcmhlYWQuIFRoZSBzZXBhcmF0ZSBvYmplY3QgcmVmZXJlbmNlcyBjb250ZXh0IHZpYVxuICAvLyBhIHByb3BlcnR5IGNhbGxlZCBcIl9jb250ZXh0XCIsIHdoaWNoIGFsc28gZ2l2ZXMgdXMgdGhlIGFiaWxpdHkgdG8gY2hlY2tcbiAgLy8gaW4gREVWIG1vZGUgaWYgdGhpcyBwcm9wZXJ0eSBleGlzdHMgb3Igbm90IGFuZCB3YXJuIGlmIGl0IGRvZXMgbm90LlxuXG4gIHtcbiAgICBpZiAoY29udGV4dC5fY29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBUaGlzIG1heSBiZSBiZWNhdXNlIGl0J3MgYSBDb250ZXh0IChyYXRoZXIgdGhhbiBhIENvbnN1bWVyKS5cbiAgICAgIC8vIE9yIGl0IG1heSBiZSBiZWNhdXNlIGl0J3Mgb2xkZXIgUmVhY3Qgd2hlcmUgdGhleSdyZSB0aGUgc2FtZSB0aGluZy5cbiAgICAgIC8vIFdlIG9ubHkgd2FudCB0byB3YXJuIGlmIHdlJ3JlIHN1cmUgaXQncyBhIG5ldyBSZWFjdC5cbiAgICAgIGlmIChjb250ZXh0ICE9PSBjb250ZXh0LkNvbnN1bWVyKSB7XG4gICAgICAgIGlmICghaGFzV2FybmVkQWJvdXRVc2luZ0NvbnRleHRBc0NvbnN1bWVyKSB7XG4gICAgICAgICAgaGFzV2FybmVkQWJvdXRVc2luZ0NvbnRleHRBc0NvbnN1bWVyID0gdHJ1ZTtcblxuICAgICAgICAgIGVycm9yKCdSZW5kZXJpbmcgPENvbnRleHQ+IGRpcmVjdGx5IGlzIG5vdCBzdXBwb3J0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiAnICsgJ2EgZnV0dXJlIG1ham9yIHJlbGVhc2UuIERpZCB5b3UgbWVhbiB0byByZW5kZXIgPENvbnRleHQuQ29uc3VtZXI+IGluc3RlYWQ/Jyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29udGV4dCA9IGNvbnRleHQuX2NvbnRleHQ7XG4gICAgfVxuICB9XG5cbiAgdmFyIG5ld1Byb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICB2YXIgcmVuZGVyID0gbmV3UHJvcHMuY2hpbGRyZW47XG5cbiAge1xuICAgIGlmICh0eXBlb2YgcmVuZGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignQSBjb250ZXh0IGNvbnN1bWVyIHdhcyByZW5kZXJlZCB3aXRoIG11bHRpcGxlIGNoaWxkcmVuLCBvciBhIGNoaWxkICcgKyBcInRoYXQgaXNuJ3QgYSBmdW5jdGlvbi4gQSBjb250ZXh0IGNvbnN1bWVyIGV4cGVjdHMgYSBzaW5nbGUgY2hpbGQgXCIgKyAndGhhdCBpcyBhIGZ1bmN0aW9uLiBJZiB5b3UgZGlkIHBhc3MgYSBmdW5jdGlvbiwgbWFrZSBzdXJlIHRoZXJlICcgKyAnaXMgbm8gdHJhaWxpbmcgb3IgbGVhZGluZyB3aGl0ZXNwYWNlIGFyb3VuZCBpdC4nKTtcbiAgICB9XG4gIH1cblxuICBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICB2YXIgbmV3VmFsdWUgPSByZWFkQ29udGV4dChjb250ZXh0LCBuZXdQcm9wcy51bnN0YWJsZV9vYnNlcnZlZEJpdHMpO1xuICB2YXIgbmV3Q2hpbGRyZW47XG5cbiAge1xuICAgIFJlYWN0Q3VycmVudE93bmVyJDEuY3VycmVudCA9IHdvcmtJblByb2dyZXNzO1xuICAgIHNldElzUmVuZGVyaW5nKHRydWUpO1xuICAgIG5ld0NoaWxkcmVuID0gcmVuZGVyKG5ld1ZhbHVlKTtcbiAgICBzZXRJc1JlbmRlcmluZyhmYWxzZSk7XG4gIH0gLy8gUmVhY3QgRGV2VG9vbHMgcmVhZHMgdGhpcyBmbGFnLlxuXG5cbiAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gUGVyZm9ybWVkV29yaztcbiAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5ld0NoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gbWFya1dvcmtJblByb2dyZXNzUmVjZWl2ZWRVcGRhdGUoKSB7XG4gIGRpZFJlY2VpdmVVcGRhdGUgPSB0cnVlO1xufVxuXG5mdW5jdGlvbiBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgIC8vIFJldXNlIHByZXZpb3VzIGRlcGVuZGVuY2llc1xuICAgIHdvcmtJblByb2dyZXNzLmRlcGVuZGVuY2llcyA9IGN1cnJlbnQuZGVwZW5kZW5jaWVzO1xuICB9XG5cbiAge1xuICAgIC8vIERvbid0IHVwZGF0ZSBcImJhc2VcIiByZW5kZXIgdGltZXMgZm9yIGJhaWxvdXRzLlxuICAgIHN0b3BQcm9maWxlclRpbWVySWZSdW5uaW5nKCk7XG4gIH1cblxuICBtYXJrU2tpcHBlZFVwZGF0ZUxhbmVzKHdvcmtJblByb2dyZXNzLmxhbmVzKTsgLy8gQ2hlY2sgaWYgdGhlIGNoaWxkcmVuIGhhdmUgYW55IHBlbmRpbmcgd29yay5cblxuICBpZiAoIWluY2x1ZGVzU29tZUxhbmUocmVuZGVyTGFuZXMsIHdvcmtJblByb2dyZXNzLmNoaWxkTGFuZXMpKSB7XG4gICAgLy8gVGhlIGNoaWxkcmVuIGRvbid0IGhhdmUgYW55IHdvcmsgZWl0aGVyLiBXZSBjYW4gc2tpcCB0aGVtLlxuICAgIC8vIFRPRE86IE9uY2Ugd2UgYWRkIGJhY2sgcmVzdW1pbmcsIHdlIHNob3VsZCBjaGVjayBpZiB0aGUgY2hpbGRyZW4gYXJlXG4gICAgLy8gYSB3b3JrLWluLXByb2dyZXNzIHNldC4gSWYgc28sIHdlIG5lZWQgdG8gdHJhbnNmZXIgdGhlaXIgZWZmZWN0cy5cbiAgICByZXR1cm4gbnVsbDtcbiAgfSBlbHNlIHtcbiAgICAvLyBUaGlzIGZpYmVyIGRvZXNuJ3QgaGF2ZSB3b3JrLCBidXQgaXRzIHN1YnRyZWUgZG9lcy4gQ2xvbmUgdGhlIGNoaWxkXG4gICAgLy8gZmliZXJzIGFuZCBjb250aW51ZS5cbiAgICBjbG9uZUNoaWxkRmliZXJzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKTtcbiAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVtb3VudEZpYmVyKGN1cnJlbnQsIG9sZFdvcmtJblByb2dyZXNzLCBuZXdXb3JrSW5Qcm9ncmVzcykge1xuICB7XG4gICAgdmFyIHJldHVybkZpYmVyID0gb2xkV29ya0luUHJvZ3Jlc3MucmV0dXJuO1xuXG4gICAgaWYgKHJldHVybkZpYmVyID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBzd2FwIHRoZSByb290IGZpYmVyLicpO1xuICAgIH0gLy8gRGlzY29ubmVjdCBmcm9tIHRoZSBvbGQgY3VycmVudC5cbiAgICAvLyBJdCB3aWxsIGdldCBkZWxldGVkLlxuXG5cbiAgICBjdXJyZW50LmFsdGVybmF0ZSA9IG51bGw7XG4gICAgb2xkV29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlID0gbnVsbDsgLy8gQ29ubmVjdCB0byB0aGUgbmV3IHRyZWUuXG5cbiAgICBuZXdXb3JrSW5Qcm9ncmVzcy5pbmRleCA9IG9sZFdvcmtJblByb2dyZXNzLmluZGV4O1xuICAgIG5ld1dvcmtJblByb2dyZXNzLnNpYmxpbmcgPSBvbGRXb3JrSW5Qcm9ncmVzcy5zaWJsaW5nO1xuICAgIG5ld1dvcmtJblByb2dyZXNzLnJldHVybiA9IG9sZFdvcmtJblByb2dyZXNzLnJldHVybjtcbiAgICBuZXdXb3JrSW5Qcm9ncmVzcy5yZWYgPSBvbGRXb3JrSW5Qcm9ncmVzcy5yZWY7IC8vIFJlcGxhY2UgdGhlIGNoaWxkL3NpYmxpbmcgcG9pbnRlcnMgYWJvdmUgaXQuXG5cbiAgICBpZiAob2xkV29ya0luUHJvZ3Jlc3MgPT09IHJldHVybkZpYmVyLmNoaWxkKSB7XG4gICAgICByZXR1cm5GaWJlci5jaGlsZCA9IG5ld1dvcmtJblByb2dyZXNzO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgcHJldlNpYmxpbmcgPSByZXR1cm5GaWJlci5jaGlsZDtcblxuICAgICAgaWYgKHByZXZTaWJsaW5nID09PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgcGFyZW50IHRvIGhhdmUgYSBjaGlsZC4nKTtcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKHByZXZTaWJsaW5nLnNpYmxpbmcgIT09IG9sZFdvcmtJblByb2dyZXNzKSB7XG4gICAgICAgIHByZXZTaWJsaW5nID0gcHJldlNpYmxpbmcuc2libGluZztcblxuICAgICAgICBpZiAocHJldlNpYmxpbmcgPT09IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHRvIGZpbmQgdGhlIHByZXZpb3VzIHNpYmxpbmcuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcHJldlNpYmxpbmcuc2libGluZyA9IG5ld1dvcmtJblByb2dyZXNzO1xuICAgIH0gLy8gRGVsZXRlIHRoZSBvbGQgZmliZXIgYW5kIHBsYWNlIHRoZSBuZXcgb25lLlxuICAgIC8vIFNpbmNlIHRoZSBvbGQgZmliZXIgaXMgZGlzY29ubmVjdGVkLCB3ZSBoYXZlIHRvIHNjaGVkdWxlIGl0IG1hbnVhbGx5LlxuXG5cbiAgICB2YXIgbGFzdCA9IHJldHVybkZpYmVyLmxhc3RFZmZlY3Q7XG5cbiAgICBpZiAobGFzdCAhPT0gbnVsbCkge1xuICAgICAgbGFzdC5uZXh0RWZmZWN0ID0gY3VycmVudDtcbiAgICAgIHJldHVybkZpYmVyLmxhc3RFZmZlY3QgPSBjdXJyZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm5GaWJlci5maXJzdEVmZmVjdCA9IHJldHVybkZpYmVyLmxhc3RFZmZlY3QgPSBjdXJyZW50O1xuICAgIH1cblxuICAgIGN1cnJlbnQubmV4dEVmZmVjdCA9IG51bGw7XG4gICAgY3VycmVudC5mbGFncyA9IERlbGV0aW9uO1xuICAgIG5ld1dvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBsYWNlbWVudDsgLy8gUmVzdGFydCB3b3JrIGZyb20gdGhlIG5ldyBmaWJlci5cblxuICAgIHJldHVybiBuZXdXb3JrSW5Qcm9ncmVzcztcbiAgfVxufVxuXG5mdW5jdGlvbiBiZWdpbldvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHZhciB1cGRhdGVMYW5lcyA9IHdvcmtJblByb2dyZXNzLmxhbmVzO1xuXG4gIHtcbiAgICBpZiAod29ya0luUHJvZ3Jlc3MuX2RlYnVnTmVlZHNSZW1vdW50ICYmIGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgIC8vIFRoaXMgd2lsbCByZXN0YXJ0IHRoZSBiZWdpbiBwaGFzZSB3aXRoIGEgbmV3IGZpYmVyLlxuICAgICAgcmV0dXJuIHJlbW91bnRGaWJlcihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgY3JlYXRlRmliZXJGcm9tVHlwZUFuZFByb3BzKHdvcmtJblByb2dyZXNzLnR5cGUsIHdvcmtJblByb2dyZXNzLmtleSwgd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzLCB3b3JrSW5Qcm9ncmVzcy5fZGVidWdPd25lciB8fCBudWxsLCB3b3JrSW5Qcm9ncmVzcy5tb2RlLCB3b3JrSW5Qcm9ncmVzcy5sYW5lcykpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgdmFyIG9sZFByb3BzID0gY3VycmVudC5tZW1vaXplZFByb3BzO1xuICAgIHZhciBuZXdQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcblxuICAgIGlmIChvbGRQcm9wcyAhPT0gbmV3UHJvcHMgfHwgaGFzQ29udGV4dENoYW5nZWQoKSB8fCAoIC8vIEZvcmNlIGEgcmUtcmVuZGVyIGlmIHRoZSBpbXBsZW1lbnRhdGlvbiBjaGFuZ2VkIGR1ZSB0byBob3QgcmVsb2FkOlxuICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlICE9PSBjdXJyZW50LnR5cGUgKSkge1xuICAgICAgLy8gSWYgcHJvcHMgb3IgY29udGV4dCBjaGFuZ2VkLCBtYXJrIHRoZSBmaWJlciBhcyBoYXZpbmcgcGVyZm9ybWVkIHdvcmsuXG4gICAgICAvLyBUaGlzIG1heSBiZSB1bnNldCBpZiB0aGUgcHJvcHMgYXJlIGRldGVybWluZWQgdG8gYmUgZXF1YWwgbGF0ZXIgKG1lbW8pLlxuICAgICAgZGlkUmVjZWl2ZVVwZGF0ZSA9IHRydWU7XG4gICAgfSBlbHNlIGlmICghaW5jbHVkZXNTb21lTGFuZShyZW5kZXJMYW5lcywgdXBkYXRlTGFuZXMpKSB7XG4gICAgICBkaWRSZWNlaXZlVXBkYXRlID0gZmFsc2U7IC8vIFRoaXMgZmliZXIgZG9lcyBub3QgaGF2ZSBhbnkgcGVuZGluZyB3b3JrLiBCYWlsb3V0IHdpdGhvdXQgZW50ZXJpbmdcbiAgICAgIC8vIHRoZSBiZWdpbiBwaGFzZS4gVGhlcmUncyBzdGlsbCBzb21lIGJvb2trZWVwaW5nIHdlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZVxuICAgICAgLy8gaW4gdGhpcyBvcHRpbWl6ZWQgcGF0aCwgbW9zdGx5IHB1c2hpbmcgc3R1ZmYgb250byB0aGUgc3RhY2suXG5cbiAgICAgIHN3aXRjaCAod29ya0luUHJvZ3Jlc3MudGFnKSB7XG4gICAgICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICAgICAgcHVzaEhvc3RSb290Q29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgcmVzZXRIeWRyYXRpb25TdGF0ZSgpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgICAgICBwdXNoSG9zdENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIENvbXBvbmVudCA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG5cbiAgICAgICAgICAgIGlmIChpc0NvbnRleHRQcm92aWRlcihDb21wb25lbnQpKSB7XG4gICAgICAgICAgICAgIHB1c2hDb250ZXh0UHJvdmlkZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAgICAgIHB1c2hIb3N0Q29udGFpbmVyKHdvcmtJblByb2dyZXNzLCB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBDb250ZXh0UHJvdmlkZXI6XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIG5ld1ZhbHVlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcy52YWx1ZTtcbiAgICAgICAgICAgIHB1c2hQcm92aWRlcih3b3JrSW5Qcm9ncmVzcywgbmV3VmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgUHJvZmlsZXI6XG4gICAgICAgICAge1xuICAgICAgICAgICAgLy8gUHJvZmlsZXIgc2hvdWxkIG9ubHkgY2FsbCBvblJlbmRlciB3aGVuIG9uZSBvZiBpdHMgZGVzY2VuZGFudHMgYWN0dWFsbHkgcmVuZGVyZWQuXG4gICAgICAgICAgICB2YXIgaGFzQ2hpbGRXb3JrID0gaW5jbHVkZXNTb21lTGFuZShyZW5kZXJMYW5lcywgd29ya0luUHJvZ3Jlc3MuY2hpbGRMYW5lcyk7XG5cbiAgICAgICAgICAgIGlmIChoYXNDaGlsZFdvcmspIHtcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlO1xuICAgICAgICAgICAgfSAvLyBSZXNldCBlZmZlY3QgZHVyYXRpb25zIGZvciB0aGUgbmV4dCBldmVudHVhbCBlZmZlY3QgcGhhc2UuXG4gICAgICAgICAgICAvLyBUaGVzZSBhcmUgcmVzZXQgZHVyaW5nIHJlbmRlciB0byBhbGxvdyB0aGUgRGV2VG9vbHMgY29tbWl0IGhvb2sgYSBjaGFuY2UgdG8gcmVhZCB0aGVtLFxuXG5cbiAgICAgICAgICAgIHZhciBzdGF0ZU5vZGUgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gICAgICAgICAgICBzdGF0ZU5vZGUuZWZmZWN0RHVyYXRpb24gPSAwO1xuICAgICAgICAgICAgc3RhdGVOb2RlLnBhc3NpdmVFZmZlY3REdXJhdGlvbiA9IDA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgc3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuXG4gICAgICAgICAgICBpZiAoc3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgLy8gd2hldGhlciB0byByZXRyeSB0aGUgcHJpbWFyeSBjaGlsZHJlbiwgb3IgdG8gc2tpcCBvdmVyIGl0IGFuZFxuICAgICAgICAgICAgICAvLyBnbyBzdHJhaWdodCB0byB0aGUgZmFsbGJhY2suIENoZWNrIHRoZSBwcmlvcml0eSBvZiB0aGUgcHJpbWFyeVxuICAgICAgICAgICAgICAvLyBjaGlsZCBmcmFnbWVudC5cblxuXG4gICAgICAgICAgICAgIHZhciBwcmltYXJ5Q2hpbGRGcmFnbWVudCA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgICAgICAgICAgICB2YXIgcHJpbWFyeUNoaWxkTGFuZXMgPSBwcmltYXJ5Q2hpbGRGcmFnbWVudC5jaGlsZExhbmVzO1xuXG4gICAgICAgICAgICAgIGlmIChpbmNsdWRlc1NvbWVMYW5lKHJlbmRlckxhbmVzLCBwcmltYXJ5Q2hpbGRMYW5lcykpIHtcbiAgICAgICAgICAgICAgICAvLyBUaGUgcHJpbWFyeSBjaGlsZHJlbiBoYXZlIHBlbmRpbmcgd29yay4gVXNlIHRoZSBub3JtYWwgcGF0aFxuICAgICAgICAgICAgICAgIC8vIHRvIGF0dGVtcHQgdG8gcmVuZGVyIHRoZSBwcmltYXJ5IGNoaWxkcmVuIGFnYWluLlxuICAgICAgICAgICAgICAgIHJldHVybiB1cGRhdGVTdXNwZW5zZUNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFRoZSBwcmltYXJ5IGNoaWxkIGZyYWdtZW50IGRvZXMgbm90IGhhdmUgcGVuZGluZyB3b3JrIG1hcmtlZFxuICAgICAgICAgICAgICAgIC8vIG9uIGl0XG4gICAgICAgICAgICAgICAgcHVzaFN1c3BlbnNlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgc2V0RGVmYXVsdFNoYWxsb3dTdXNwZW5zZUNvbnRleHQoc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50KSk7IC8vIFRoZSBwcmltYXJ5IGNoaWxkcmVuIGRvIG5vdCBoYXZlIHBlbmRpbmcgd29yayB3aXRoIHN1ZmZpY2llbnRcbiAgICAgICAgICAgICAgICAvLyBwcmlvcml0eS4gQmFpbG91dC5cblxuICAgICAgICAgICAgICAgIHZhciBjaGlsZCA9IGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICAgICAgICAgICAgICAgIGlmIChjaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgLy8gVGhlIGZhbGxiYWNrIGNoaWxkcmVuIGhhdmUgcGVuZGluZyB3b3JrLiBTa2lwIG92ZXIgdGhlXG4gICAgICAgICAgICAgICAgICAvLyBwcmltYXJ5IGNoaWxkcmVuIGFuZCB3b3JrIG9uIHRoZSBmYWxsYmFjay5cbiAgICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZC5zaWJsaW5nO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHB1c2hTdXNwZW5zZUNvbnRleHQod29ya0luUHJvZ3Jlc3MsIHNldERlZmF1bHRTaGFsbG93U3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudCkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBTdXNwZW5zZUxpc3RDb21wb25lbnQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIGRpZFN1c3BlbmRCZWZvcmUgPSAoY3VycmVudC5mbGFncyAmIERpZENhcHR1cmUpICE9PSBOb0ZsYWdzO1xuXG4gICAgICAgICAgICB2YXIgX2hhc0NoaWxkV29yayA9IGluY2x1ZGVzU29tZUxhbmUocmVuZGVyTGFuZXMsIHdvcmtJblByb2dyZXNzLmNoaWxkTGFuZXMpO1xuXG4gICAgICAgICAgICBpZiAoZGlkU3VzcGVuZEJlZm9yZSkge1xuICAgICAgICAgICAgICBpZiAoX2hhc0NoaWxkV29yaykge1xuICAgICAgICAgICAgICAgIC8vIElmIHNvbWV0aGluZyB3YXMgaW4gZmFsbGJhY2sgc3RhdGUgbGFzdCB0aW1lLCBhbmQgd2UgaGF2ZSBhbGwgdGhlXG4gICAgICAgICAgICAgICAgLy8gc2FtZSBjaGlsZHJlbiB0aGVuIHdlJ3JlIHN0aWxsIGluIHByb2dyZXNzaXZlIGxvYWRpbmcgc3RhdGUuXG4gICAgICAgICAgICAgICAgLy8gU29tZXRoaW5nIG1pZ2h0IGdldCB1bmJsb2NrZWQgYnkgc3RhdGUgdXBkYXRlcyBvciByZXRyaWVzIGluIHRoZVxuICAgICAgICAgICAgICAgIC8vIHRyZWUgd2hpY2ggd2lsbCBhZmZlY3QgdGhlIHRhaWwuIFNvIHdlIG5lZWQgdG8gdXNlIHRoZSBub3JtYWxcbiAgICAgICAgICAgICAgICAvLyBwYXRoIHRvIGNvbXB1dGUgdGhlIGNvcnJlY3QgdGFpbC5cbiAgICAgICAgICAgICAgICByZXR1cm4gdXBkYXRlU3VzcGVuc2VMaXN0Q29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgICAgICAgICAgIH0gLy8gSWYgbm9uZSBvZiB0aGUgY2hpbGRyZW4gaGFkIGFueSB3b3JrLCB0aGF0IG1lYW5zIHRoYXQgbm9uZSBvZlxuICAgICAgICAgICAgICAvLyB0aGVtIGdvdCByZXRyaWVkIHNvIHRoZXknbGwgc3RpbGwgYmUgYmxvY2tlZCBpbiB0aGUgc2FtZSB3YXlcbiAgICAgICAgICAgICAgLy8gYXMgYmVmb3JlLiBXZSBjYW4gZmFzdCBiYWlsIG91dC5cblxuXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IERpZENhcHR1cmU7XG4gICAgICAgICAgICB9IC8vIElmIG5vdGhpbmcgc3VzcGVuZGVkIGJlZm9yZSBhbmQgd2UncmUgcmVuZGVyaW5nIHRoZSBzYW1lIGNoaWxkcmVuLFxuICAgICAgICAgICAgLy8gdGhlbiB0aGUgdGFpbCBkb2Vzbid0IG1hdHRlci4gQW55dGhpbmcgbmV3IHRoYXQgc3VzcGVuZHMgd2lsbCB3b3JrXG4gICAgICAgICAgICAvLyBpbiB0aGUgXCJ0b2dldGhlclwiIG1vZGUsIHNvIHdlIGNhbiBjb250aW51ZSBmcm9tIHRoZSBzdGF0ZSB3ZSBoYWQuXG5cblxuICAgICAgICAgICAgdmFyIHJlbmRlclN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcblxuICAgICAgICAgICAgaWYgKHJlbmRlclN0YXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIC8vIFJlc2V0IHRvIHRoZSBcInRvZ2V0aGVyXCIgbW9kZSBpbiBjYXNlIHdlJ3ZlIHN0YXJ0ZWQgYSBkaWZmZXJlbnRcbiAgICAgICAgICAgICAgLy8gdXBkYXRlIGluIHRoZSBwYXN0IGJ1dCBkaWRuJ3QgY29tcGxldGUgaXQuXG4gICAgICAgICAgICAgIHJlbmRlclN0YXRlLnJlbmRlcmluZyA9IG51bGw7XG4gICAgICAgICAgICAgIHJlbmRlclN0YXRlLnRhaWwgPSBudWxsO1xuICAgICAgICAgICAgICByZW5kZXJTdGF0ZS5sYXN0RWZmZWN0ID0gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcHVzaFN1c3BlbnNlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50KTtcblxuICAgICAgICAgICAgaWYgKF9oYXNDaGlsZFdvcmspIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBJZiBub25lIG9mIHRoZSBjaGlsZHJlbiBoYWQgYW55IHdvcmssIHRoYXQgbWVhbnMgdGhhdCBub25lIG9mXG4gICAgICAgICAgICAgIC8vIHRoZW0gZ290IHJldHJpZWQgc28gdGhleSdsbCBzdGlsbCBiZSBibG9ja2VkIGluIHRoZSBzYW1lIHdheVxuICAgICAgICAgICAgICAvLyBhcyBiZWZvcmUuIFdlIGNhbiBmYXN0IGJhaWwgb3V0LlxuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBPZmZzY3JlZW5Db21wb25lbnQ6XG4gICAgICAgIGNhc2UgTGVnYWN5SGlkZGVuQ29tcG9uZW50OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC8vIE5lZWQgdG8gY2hlY2sgaWYgdGhlIHRyZWUgc3RpbGwgbmVlZHMgdG8gYmUgZGVmZXJyZWQuIFRoaXMgaXNcbiAgICAgICAgICAgIC8vIGFsbW9zdCBpZGVudGljYWwgdG8gdGhlIGxvZ2ljIHVzZWQgaW4gdGhlIG5vcm1hbCB1cGRhdGUgcGF0aCxcbiAgICAgICAgICAgIC8vIHNvIHdlJ2xsIGp1c3QgZW50ZXIgdGhhdC4gVGhlIG9ubHkgZGlmZmVyZW5jZSBpcyB3ZSdsbCBiYWlsIG91dFxuICAgICAgICAgICAgLy8gYXQgdGhlIG5leHQgbGV2ZWwgaW5zdGVhZCBvZiB0aGlzIG9uZSwgYmVjYXVzZSB0aGUgY2hpbGQgcHJvcHNcbiAgICAgICAgICAgIC8vIGhhdmUgbm90IGNoYW5nZWQuIFdoaWNoIGlzIGZpbmUuXG4gICAgICAgICAgICAvLyBUT0RPOiBQcm9iYWJseSBzaG91bGQgcmVmYWN0b3IgYGJlZ2luV29ya2AgdG8gc3BsaXQgdGhlIGJhaWxvdXRcbiAgICAgICAgICAgIC8vIHBhdGggZnJvbSB0aGUgbm9ybWFsIHBhdGguIEknbSB0ZW1wdGVkIHRvIGRvIGEgbGFiZWxlZCBicmVhayBoZXJlXG4gICAgICAgICAgICAvLyBidXQgSSB3b24ndCA6KVxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBOb0xhbmVzO1xuICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZU9mZnNjcmVlbkNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKChjdXJyZW50LmZsYWdzICYgRm9yY2VVcGRhdGVGb3JMZWdhY3lTdXNwZW5zZSkgIT09IE5vRmxhZ3MpIHtcbiAgICAgICAgLy8gVGhpcyBpcyBhIHNwZWNpYWwgY2FzZSB0aGF0IG9ubHkgZXhpc3RzIGZvciBsZWdhY3kgbW9kZS5cbiAgICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzE5MjE2LlxuICAgICAgICBkaWRSZWNlaXZlVXBkYXRlID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEFuIHVwZGF0ZSB3YXMgc2NoZWR1bGVkIG9uIHRoaXMgZmliZXIsIGJ1dCB0aGVyZSBhcmUgbm8gbmV3IHByb3BzXG4gICAgICAgIC8vIG5vciBsZWdhY3kgY29udGV4dC4gU2V0IHRoaXMgdG8gZmFsc2UuIElmIGFuIHVwZGF0ZSBxdWV1ZSBvciBjb250ZXh0XG4gICAgICAgIC8vIGNvbnN1bWVyIHByb2R1Y2VzIGEgY2hhbmdlZCB2YWx1ZSwgaXQgd2lsbCBzZXQgdGhpcyB0byB0cnVlLiBPdGhlcndpc2UsXG4gICAgICAgIC8vIHRoZSBjb21wb25lbnQgd2lsbCBhc3N1bWUgdGhlIGNoaWxkcmVuIGhhdmUgbm90IGNoYW5nZWQgYW5kIGJhaWwgb3V0LlxuICAgICAgICBkaWRSZWNlaXZlVXBkYXRlID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGRpZFJlY2VpdmVVcGRhdGUgPSBmYWxzZTtcbiAgfSAvLyBCZWZvcmUgZW50ZXJpbmcgdGhlIGJlZ2luIHBoYXNlLCBjbGVhciBwZW5kaW5nIHVwZGF0ZSBwcmlvcml0eS5cbiAgLy8gVE9ETzogVGhpcyBhc3N1bWVzIHRoYXQgd2UncmUgYWJvdXQgdG8gZXZhbHVhdGUgdGhlIGNvbXBvbmVudCBhbmQgcHJvY2Vzc1xuICAvLyB0aGUgdXBkYXRlIHF1ZXVlLiBIb3dldmVyLCB0aGVyZSdzIGFuIGV4Y2VwdGlvbjogU2ltcGxlTWVtb0NvbXBvbmVudFxuICAvLyBzb21ldGltZXMgYmFpbHMgb3V0IGxhdGVyIGluIHRoZSBiZWdpbiBwaGFzZS4gVGhpcyBpbmRpY2F0ZXMgdGhhdCB3ZSBzaG91bGRcbiAgLy8gbW92ZSB0aGlzIGFzc2lnbm1lbnQgb3V0IG9mIHRoZSBjb21tb24gcGF0aCBhbmQgaW50byBlYWNoIGJyYW5jaC5cblxuXG4gIHdvcmtJblByb2dyZXNzLmxhbmVzID0gTm9MYW5lcztcblxuICBzd2l0Y2ggKHdvcmtJblByb2dyZXNzLnRhZykge1xuICAgIGNhc2UgSW5kZXRlcm1pbmF0ZUNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuIG1vdW50SW5kZXRlcm1pbmF0ZUNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgd29ya0luUHJvZ3Jlc3MudHlwZSwgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuXG4gICAgY2FzZSBMYXp5Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgZWxlbWVudFR5cGUgPSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZTtcbiAgICAgICAgcmV0dXJuIG1vdW50TGF6eUNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgZWxlbWVudFR5cGUsIHVwZGF0ZUxhbmVzLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG5cbiAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgX0NvbXBvbmVudCA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG4gICAgICAgIHZhciB1bnJlc29sdmVkUHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gICAgICAgIHZhciByZXNvbHZlZFByb3BzID0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUgPT09IF9Db21wb25lbnQgPyB1bnJlc29sdmVkUHJvcHMgOiByZXNvbHZlRGVmYXVsdFByb3BzKF9Db21wb25lbnQsIHVucmVzb2x2ZWRQcm9wcyk7XG4gICAgICAgIHJldHVybiB1cGRhdGVGdW5jdGlvbkNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgX0NvbXBvbmVudCwgcmVzb2x2ZWRQcm9wcywgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuXG4gICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIF9Db21wb25lbnQyID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgICAgICAgdmFyIF91bnJlc29sdmVkUHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG5cbiAgICAgICAgdmFyIF9yZXNvbHZlZFByb3BzID0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUgPT09IF9Db21wb25lbnQyID8gX3VucmVzb2x2ZWRQcm9wcyA6IHJlc29sdmVEZWZhdWx0UHJvcHMoX0NvbXBvbmVudDIsIF91bnJlc29sdmVkUHJvcHMpO1xuXG4gICAgICAgIHJldHVybiB1cGRhdGVDbGFzc0NvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgX0NvbXBvbmVudDIsIF9yZXNvbHZlZFByb3BzLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RSb290OlxuICAgICAgcmV0dXJuIHVwZGF0ZUhvc3RSb290KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICByZXR1cm4gdXBkYXRlSG9zdENvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuXG4gICAgY2FzZSBIb3N0VGV4dDpcbiAgICAgIHJldHVybiB1cGRhdGVIb3N0VGV4dChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7XG5cbiAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OlxuICAgICAgcmV0dXJuIHVwZGF0ZVN1c3BlbnNlQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgICByZXR1cm4gdXBkYXRlUG9ydGFsQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICB7XG4gICAgICAgIHZhciB0eXBlID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgICAgICAgdmFyIF91bnJlc29sdmVkUHJvcHMyID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuXG4gICAgICAgIHZhciBfcmVzb2x2ZWRQcm9wczIgPSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSA9PT0gdHlwZSA/IF91bnJlc29sdmVkUHJvcHMyIDogcmVzb2x2ZURlZmF1bHRQcm9wcyh0eXBlLCBfdW5yZXNvbHZlZFByb3BzMik7XG5cbiAgICAgICAgcmV0dXJuIHVwZGF0ZUZvcndhcmRSZWYoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHR5cGUsIF9yZXNvbHZlZFByb3BzMiwgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuXG4gICAgY2FzZSBGcmFnbWVudDpcbiAgICAgIHJldHVybiB1cGRhdGVGcmFnbWVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuXG4gICAgY2FzZSBNb2RlOlxuICAgICAgcmV0dXJuIHVwZGF0ZU1vZGUoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICAgIGNhc2UgUHJvZmlsZXI6XG4gICAgICByZXR1cm4gdXBkYXRlUHJvZmlsZXIoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICAgIGNhc2UgQ29udGV4dFByb3ZpZGVyOlxuICAgICAgcmV0dXJuIHVwZGF0ZUNvbnRleHRQcm92aWRlcihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuXG4gICAgY2FzZSBDb250ZXh0Q29uc3VtZXI6XG4gICAgICByZXR1cm4gdXBkYXRlQ29udGV4dENvbnN1bWVyKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAgICBjYXNlIE1lbW9Db21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBfdHlwZTIgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICAgICAgICB2YXIgX3VucmVzb2x2ZWRQcm9wczMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7IC8vIFJlc29sdmUgb3V0ZXIgcHJvcHMgZmlyc3QsIHRoZW4gcmVzb2x2ZSBpbm5lciBwcm9wcy5cblxuICAgICAgICB2YXIgX3Jlc29sdmVkUHJvcHMzID0gcmVzb2x2ZURlZmF1bHRQcm9wcyhfdHlwZTIsIF91bnJlc29sdmVkUHJvcHMzKTtcblxuICAgICAgICB7XG4gICAgICAgICAgaWYgKHdvcmtJblByb2dyZXNzLnR5cGUgIT09IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlKSB7XG4gICAgICAgICAgICB2YXIgb3V0ZXJQcm9wVHlwZXMgPSBfdHlwZTIucHJvcFR5cGVzO1xuXG4gICAgICAgICAgICBpZiAob3V0ZXJQcm9wVHlwZXMpIHtcbiAgICAgICAgICAgICAgY2hlY2tQcm9wVHlwZXMob3V0ZXJQcm9wVHlwZXMsIF9yZXNvbHZlZFByb3BzMywgLy8gUmVzb2x2ZWQgZm9yIG91dGVyIG9ubHlcbiAgICAgICAgICAgICAgJ3Byb3AnLCBnZXRDb21wb25lbnROYW1lKF90eXBlMikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIF9yZXNvbHZlZFByb3BzMyA9IHJlc29sdmVEZWZhdWx0UHJvcHMoX3R5cGUyLnR5cGUsIF9yZXNvbHZlZFByb3BzMyk7XG4gICAgICAgIHJldHVybiB1cGRhdGVNZW1vQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBfdHlwZTIsIF9yZXNvbHZlZFByb3BzMywgdXBkYXRlTGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cblxuICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZVNpbXBsZU1lbW9Db21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHdvcmtJblByb2dyZXNzLnR5cGUsIHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcywgdXBkYXRlTGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cblxuICAgIGNhc2UgSW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgX0NvbXBvbmVudDMgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICAgICAgICB2YXIgX3VucmVzb2x2ZWRQcm9wczQgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG5cbiAgICAgICAgdmFyIF9yZXNvbHZlZFByb3BzNCA9IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlID09PSBfQ29tcG9uZW50MyA/IF91bnJlc29sdmVkUHJvcHM0IDogcmVzb2x2ZURlZmF1bHRQcm9wcyhfQ29tcG9uZW50MywgX3VucmVzb2x2ZWRQcm9wczQpO1xuXG4gICAgICAgIHJldHVybiBtb3VudEluY29tcGxldGVDbGFzc0NvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgX0NvbXBvbmVudDMsIF9yZXNvbHZlZFByb3BzNCwgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuXG4gICAgY2FzZSBTdXNwZW5zZUxpc3RDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHJldHVybiB1cGRhdGVTdXNwZW5zZUxpc3RDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cblxuICAgIGNhc2UgRnVuZGFtZW50YWxDb21wb25lbnQ6XG4gICAgICB7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIFNjb3BlQ29tcG9uZW50OlxuICAgICAge1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBCbG9jazpcbiAgICAgIHtcblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgT2Zmc2NyZWVuQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICByZXR1cm4gdXBkYXRlT2Zmc2NyZWVuQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG5cbiAgICBjYXNlIExlZ2FjeUhpZGRlbkNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZUxlZ2FjeUhpZGRlbkNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuICB9XG5cbiAge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlVua25vd24gdW5pdCBvZiB3b3JrIHRhZyAoXCIgKyB3b3JrSW5Qcm9ncmVzcy50YWcgKyBcIikuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcykge1xuICAvLyBUYWcgdGhlIGZpYmVyIHdpdGggYW4gdXBkYXRlIGVmZmVjdC4gVGhpcyB0dXJucyBhIFBsYWNlbWVudCBpbnRvXG4gIC8vIGEgUGxhY2VtZW50QW5kVXBkYXRlLlxuICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG59XG5cbmZ1bmN0aW9uIG1hcmtSZWYkMSh3b3JrSW5Qcm9ncmVzcykge1xuICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBSZWY7XG59XG5cbnZhciBhcHBlbmRBbGxDaGlsZHJlbjtcbnZhciB1cGRhdGVIb3N0Q29udGFpbmVyO1xudmFyIHVwZGF0ZUhvc3RDb21wb25lbnQkMTtcbnZhciB1cGRhdGVIb3N0VGV4dCQxO1xuXG57XG4gIC8vIE11dGF0aW9uIG1vZGVcbiAgYXBwZW5kQWxsQ2hpbGRyZW4gPSBmdW5jdGlvbiAocGFyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmVlZHNWaXNpYmlsaXR5VG9nZ2xlLCBpc0hpZGRlbikge1xuICAgIC8vIFdlIG9ubHkgaGF2ZSB0aGUgdG9wIEZpYmVyIHRoYXQgd2FzIGNyZWF0ZWQgYnV0IHdlIG5lZWQgcmVjdXJzZSBkb3duIGl0c1xuICAgIC8vIGNoaWxkcmVuIHRvIGZpbmQgYWxsIHRoZSB0ZXJtaW5hbCBub2Rlcy5cbiAgICB2YXIgbm9kZSA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuXG4gICAgd2hpbGUgKG5vZGUgIT09IG51bGwpIHtcbiAgICAgIGlmIChub2RlLnRhZyA9PT0gSG9zdENvbXBvbmVudCB8fCBub2RlLnRhZyA9PT0gSG9zdFRleHQpIHtcbiAgICAgICAgYXBwZW5kSW5pdGlhbENoaWxkKHBhcmVudCwgbm9kZS5zdGF0ZU5vZGUpO1xuICAgICAgfSBlbHNlIGlmIChub2RlLnRhZyA9PT0gSG9zdFBvcnRhbCkgOyBlbHNlIGlmIChub2RlLmNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgICAgbm9kZSA9IG5vZGUuY2hpbGQ7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZSA9PT0gd29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB3aGlsZSAobm9kZS5zaWJsaW5nID09PSBudWxsKSB7XG4gICAgICAgIGlmIChub2RlLnJldHVybiA9PT0gbnVsbCB8fCBub2RlLnJldHVybiA9PT0gd29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgICB9XG5cbiAgICAgIG5vZGUuc2libGluZy5yZXR1cm4gPSBub2RlLnJldHVybjtcbiAgICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gICAgfVxuICB9O1xuXG4gIHVwZGF0ZUhvc3RDb250YWluZXIgPSBmdW5jdGlvbiAod29ya0luUHJvZ3Jlc3MpIHsvLyBOb29wXG4gIH07XG5cbiAgdXBkYXRlSG9zdENvbXBvbmVudCQxID0gZnVuY3Rpb24gKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCB0eXBlLCBuZXdQcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlKSB7XG4gICAgLy8gSWYgd2UgaGF2ZSBhbiBhbHRlcm5hdGUsIHRoYXQgbWVhbnMgdGhpcyBpcyBhbiB1cGRhdGUgYW5kIHdlIG5lZWQgdG9cbiAgICAvLyBzY2hlZHVsZSBhIHNpZGUtZWZmZWN0IHRvIGRvIHRoZSB1cGRhdGVzLlxuICAgIHZhciBvbGRQcm9wcyA9IGN1cnJlbnQubWVtb2l6ZWRQcm9wcztcblxuICAgIGlmIChvbGRQcm9wcyA9PT0gbmV3UHJvcHMpIHtcbiAgICAgIC8vIEluIG11dGF0aW9uIG1vZGUsIHRoaXMgaXMgc3VmZmljaWVudCBmb3IgYSBiYWlsb3V0IGJlY2F1c2VcbiAgICAgIC8vIHdlIHdvbid0IHRvdWNoIHRoaXMgbm9kZSBldmVuIGlmIGNoaWxkcmVuIGNoYW5nZWQuXG4gICAgICByZXR1cm47XG4gICAgfSAvLyBJZiB3ZSBnZXQgdXBkYXRlZCBiZWNhdXNlIG9uZSBvZiBvdXIgY2hpbGRyZW4gdXBkYXRlZCwgd2UgZG9uJ3RcbiAgICAvLyBoYXZlIG5ld1Byb3BzIHNvIHdlJ2xsIGhhdmUgdG8gcmV1c2UgdGhlbS5cbiAgICAvLyBUT0RPOiBTcGxpdCB0aGUgdXBkYXRlIEFQSSBhcyBzZXBhcmF0ZSBmb3IgdGhlIHByb3BzIHZzLiBjaGlsZHJlbi5cbiAgICAvLyBFdmVuIGJldHRlciB3b3VsZCBiZSBpZiBjaGlsZHJlbiB3ZXJlbid0IHNwZWNpYWwgY2FzZWQgYXQgYWxsIHRoby5cblxuXG4gICAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICAgIHZhciBjdXJyZW50SG9zdENvbnRleHQgPSBnZXRIb3N0Q29udGV4dCgpOyAvLyBUT0RPOiBFeHBlcmllbmNpbmcgYW4gZXJyb3Igd2hlcmUgb2xkUHJvcHMgaXMgbnVsbC4gU3VnZ2VzdHMgYSBob3N0XG4gICAgLy8gY29tcG9uZW50IGlzIGhpdHRpbmcgdGhlIHJlc3VtZSBwYXRoLiBGaWd1cmUgb3V0IHdoeS4gUG9zc2libHlcbiAgICAvLyByZWxhdGVkIHRvIGBoaWRkZW5gLlxuXG4gICAgdmFyIHVwZGF0ZVBheWxvYWQgPSBwcmVwYXJlVXBkYXRlKGluc3RhbmNlLCB0eXBlLCBvbGRQcm9wcywgbmV3UHJvcHMsIHJvb3RDb250YWluZXJJbnN0YW5jZSwgY3VycmVudEhvc3RDb250ZXh0KTsgLy8gVE9ETzogVHlwZSB0aGlzIHNwZWNpZmljIHRvIHRoaXMgdHlwZSBvZiBjb21wb25lbnQuXG5cbiAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IHVwZGF0ZVBheWxvYWQ7IC8vIElmIHRoZSB1cGRhdGUgcGF5bG9hZCBpbmRpY2F0ZXMgdGhhdCB0aGVyZSBpcyBhIGNoYW5nZSBvciBpZiB0aGVyZVxuICAgIC8vIGlzIGEgbmV3IHJlZiB3ZSBtYXJrIHRoaXMgYXMgYW4gdXBkYXRlLiBBbGwgdGhlIHdvcmsgaXMgZG9uZSBpbiBjb21taXRXb3JrLlxuXG4gICAgaWYgKHVwZGF0ZVBheWxvYWQpIHtcbiAgICAgIG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpO1xuICAgIH1cbiAgfTtcblxuICB1cGRhdGVIb3N0VGV4dCQxID0gZnVuY3Rpb24gKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBvbGRUZXh0LCBuZXdUZXh0KSB7XG4gICAgLy8gSWYgdGhlIHRleHQgZGlmZmVycywgbWFyayBpdCBhcyBhbiB1cGRhdGUuIEFsbCB0aGUgd29yayBpbiBkb25lIGluIGNvbW1pdFdvcmsuXG4gICAgaWYgKG9sZFRleHQgIT09IG5ld1RleHQpIHtcbiAgICAgIG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gY3V0T2ZmVGFpbElmTmVlZGVkKHJlbmRlclN0YXRlLCBoYXNSZW5kZXJlZEFUYWlsRmFsbGJhY2spIHtcbiAgaWYgKGdldElzSHlkcmF0aW5nKCkpIHtcbiAgICAvLyBJZiB3ZSdyZSBoeWRyYXRpbmcsIHdlIHNob3VsZCBjb25zdW1lIGFzIG1hbnkgaXRlbXMgYXMgd2UgY2FuXG4gICAgLy8gc28gd2UgZG9uJ3QgbGVhdmUgYW55IGJlaGluZC5cbiAgICByZXR1cm47XG4gIH1cblxuICBzd2l0Y2ggKHJlbmRlclN0YXRlLnRhaWxNb2RlKSB7XG4gICAgY2FzZSAnaGlkZGVuJzpcbiAgICAgIHtcbiAgICAgICAgLy8gQW55IGluc2VydGlvbnMgYXQgdGhlIGVuZCBvZiB0aGUgdGFpbCBsaXN0IGFmdGVyIHRoaXMgcG9pbnRcbiAgICAgICAgLy8gc2hvdWxkIGJlIGludmlzaWJsZS4gSWYgdGhlcmUgYXJlIGFscmVhZHkgbW91bnRlZCBib3VuZGFyaWVzXG4gICAgICAgIC8vIGFueXRoaW5nIGJlZm9yZSB0aGVtIGFyZSBub3QgY29uc2lkZXJlZCBmb3IgY29sbGFwc2luZy5cbiAgICAgICAgLy8gVGhlcmVmb3JlIHdlIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgd2hvbGUgdGFpbCB0byBmaW5kIGlmXG4gICAgICAgIC8vIHRoZXJlIGFyZSBhbnkuXG4gICAgICAgIHZhciB0YWlsTm9kZSA9IHJlbmRlclN0YXRlLnRhaWw7XG4gICAgICAgIHZhciBsYXN0VGFpbE5vZGUgPSBudWxsO1xuXG4gICAgICAgIHdoaWxlICh0YWlsTm9kZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGlmICh0YWlsTm9kZS5hbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGxhc3RUYWlsTm9kZSA9IHRhaWxOb2RlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRhaWxOb2RlID0gdGFpbE5vZGUuc2libGluZztcbiAgICAgICAgfSAvLyBOZXh0IHdlJ3JlIHNpbXBseSBnb2luZyB0byBkZWxldGUgYWxsIGluc2VydGlvbnMgYWZ0ZXIgdGhlXG4gICAgICAgIC8vIGxhc3QgcmVuZGVyZWQgaXRlbS5cblxuXG4gICAgICAgIGlmIChsYXN0VGFpbE5vZGUgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBBbGwgcmVtYWluaW5nIGl0ZW1zIGluIHRoZSB0YWlsIGFyZSBpbnNlcnRpb25zLlxuICAgICAgICAgIHJlbmRlclN0YXRlLnRhaWwgPSBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIERldGFjaCB0aGUgaW5zZXJ0aW9uIGFmdGVyIHRoZSBsYXN0IG5vZGUgdGhhdCB3YXMgYWxyZWFkeVxuICAgICAgICAgIC8vIGluc2VydGVkLlxuICAgICAgICAgIGxhc3RUYWlsTm9kZS5zaWJsaW5nID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSAnY29sbGFwc2VkJzpcbiAgICAgIHtcbiAgICAgICAgLy8gQW55IGluc2VydGlvbnMgYXQgdGhlIGVuZCBvZiB0aGUgdGFpbCBsaXN0IGFmdGVyIHRoaXMgcG9pbnRcbiAgICAgICAgLy8gc2hvdWxkIGJlIGludmlzaWJsZS4gSWYgdGhlcmUgYXJlIGFscmVhZHkgbW91bnRlZCBib3VuZGFyaWVzXG4gICAgICAgIC8vIGFueXRoaW5nIGJlZm9yZSB0aGVtIGFyZSBub3QgY29uc2lkZXJlZCBmb3IgY29sbGFwc2luZy5cbiAgICAgICAgLy8gVGhlcmVmb3JlIHdlIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgd2hvbGUgdGFpbCB0byBmaW5kIGlmXG4gICAgICAgIC8vIHRoZXJlIGFyZSBhbnkuXG4gICAgICAgIHZhciBfdGFpbE5vZGUgPSByZW5kZXJTdGF0ZS50YWlsO1xuICAgICAgICB2YXIgX2xhc3RUYWlsTm9kZSA9IG51bGw7XG5cbiAgICAgICAgd2hpbGUgKF90YWlsTm9kZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGlmIChfdGFpbE5vZGUuYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBfbGFzdFRhaWxOb2RlID0gX3RhaWxOb2RlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIF90YWlsTm9kZSA9IF90YWlsTm9kZS5zaWJsaW5nO1xuICAgICAgICB9IC8vIE5leHQgd2UncmUgc2ltcGx5IGdvaW5nIHRvIGRlbGV0ZSBhbGwgaW5zZXJ0aW9ucyBhZnRlciB0aGVcbiAgICAgICAgLy8gbGFzdCByZW5kZXJlZCBpdGVtLlxuXG5cbiAgICAgICAgaWYgKF9sYXN0VGFpbE5vZGUgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBBbGwgcmVtYWluaW5nIGl0ZW1zIGluIHRoZSB0YWlsIGFyZSBpbnNlcnRpb25zLlxuICAgICAgICAgIGlmICghaGFzUmVuZGVyZWRBVGFpbEZhbGxiYWNrICYmIHJlbmRlclN0YXRlLnRhaWwgIT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIFdlIHN1c3BlbmRlZCBkdXJpbmcgdGhlIGhlYWQuIFdlIHdhbnQgdG8gc2hvdyBhdCBsZWFzdCBvbmVcbiAgICAgICAgICAgIC8vIHJvdyBhdCB0aGUgdGFpbC4gU28gd2UnbGwga2VlcCBvbiBhbmQgY3V0IG9mZiB0aGUgcmVzdC5cbiAgICAgICAgICAgIHJlbmRlclN0YXRlLnRhaWwuc2libGluZyA9IG51bGw7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlbmRlclN0YXRlLnRhaWwgPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBEZXRhY2ggdGhlIGluc2VydGlvbiBhZnRlciB0aGUgbGFzdCBub2RlIHRoYXQgd2FzIGFscmVhZHlcbiAgICAgICAgICAvLyBpbnNlcnRlZC5cbiAgICAgICAgICBfbGFzdFRhaWxOb2RlLnNpYmxpbmcgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tcGxldGVXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICB2YXIgbmV3UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG5cbiAgc3dpdGNoICh3b3JrSW5Qcm9ncmVzcy50YWcpIHtcbiAgICBjYXNlIEluZGV0ZXJtaW5hdGVDb21wb25lbnQ6XG4gICAgY2FzZSBMYXp5Q29tcG9uZW50OlxuICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICBjYXNlIEZyYWdtZW50OlxuICAgIGNhc2UgTW9kZTpcbiAgICBjYXNlIFByb2ZpbGVyOlxuICAgIGNhc2UgQ29udGV4dENvbnN1bWVyOlxuICAgIGNhc2UgTWVtb0NvbXBvbmVudDpcbiAgICAgIHJldHVybiBudWxsO1xuXG4gICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIENvbXBvbmVudCA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG5cbiAgICAgICAgaWYgKGlzQ29udGV4dFByb3ZpZGVyKENvbXBvbmVudCkpIHtcbiAgICAgICAgICBwb3BDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgIHtcbiAgICAgICAgcG9wSG9zdENvbnRhaW5lcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHBvcFRvcExldmVsQ29udGV4dE9iamVjdCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHJlc2V0V29ya0luUHJvZ3Jlc3NWZXJzaW9ucygpO1xuICAgICAgICB2YXIgZmliZXJSb290ID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuXG4gICAgICAgIGlmIChmaWJlclJvb3QucGVuZGluZ0NvbnRleHQpIHtcbiAgICAgICAgICBmaWJlclJvb3QuY29udGV4dCA9IGZpYmVyUm9vdC5wZW5kaW5nQ29udGV4dDtcbiAgICAgICAgICBmaWJlclJvb3QucGVuZGluZ0NvbnRleHQgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGN1cnJlbnQgPT09IG51bGwgfHwgY3VycmVudC5jaGlsZCA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIElmIHdlIGh5ZHJhdGVkLCBwb3Agc28gdGhhdCB3ZSBjYW4gZGVsZXRlIGFueSByZW1haW5pbmcgY2hpbGRyZW5cbiAgICAgICAgICAvLyB0aGF0IHdlcmVuJ3QgaHlkcmF0ZWQuXG4gICAgICAgICAgdmFyIHdhc0h5ZHJhdGVkID0gcG9wSHlkcmF0aW9uU3RhdGUod29ya0luUHJvZ3Jlc3MpO1xuXG4gICAgICAgICAgaWYgKHdhc0h5ZHJhdGVkKSB7XG4gICAgICAgICAgICAvLyBJZiB3ZSBoeWRyYXRlZCwgdGhlbiB3ZSdsbCBuZWVkIHRvIHNjaGVkdWxlIGFuIHVwZGF0ZSBmb3JcbiAgICAgICAgICAgIC8vIHRoZSBjb21taXQgc2lkZS1lZmZlY3RzIG9uIHRoZSByb290LlxuICAgICAgICAgICAgbWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgfSBlbHNlIGlmICghZmliZXJSb290Lmh5ZHJhdGUpIHtcbiAgICAgICAgICAgIC8vIFNjaGVkdWxlIGFuIGVmZmVjdCB0byBjbGVhciB0aGlzIGNvbnRhaW5lciBhdCB0aGUgc3RhcnQgb2YgdGhlIG5leHQgY29tbWl0LlxuICAgICAgICAgICAgLy8gVGhpcyBoYW5kbGVzIHRoZSBjYXNlIG9mIFJlYWN0IHJlbmRlcmluZyBpbnRvIGEgY29udGFpbmVyIHdpdGggcHJldmlvdXMgY2hpbGRyZW4uXG4gICAgICAgICAgICAvLyBJdCdzIGFsc28gc2FmZSB0byBkbyBmb3IgdXBkYXRlcyB0b28sIGJlY2F1c2UgY3VycmVudC5jaGlsZCB3b3VsZCBvbmx5IGJlIG51bGxcbiAgICAgICAgICAgIC8vIGlmIHRoZSBwcmV2aW91cyByZW5kZXIgd2FzIG51bGwgKHNvIHRoZSB0aGUgY29udGFpbmVyIHdvdWxkIGFscmVhZHkgYmUgZW1wdHkpLlxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gU25hcHNob3Q7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdXBkYXRlSG9zdENvbnRhaW5lcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBwb3BIb3N0Q29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHZhciByb290Q29udGFpbmVySW5zdGFuY2UgPSBnZXRSb290SG9zdENvbnRhaW5lcigpO1xuICAgICAgICB2YXIgdHlwZSA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG5cbiAgICAgICAgaWYgKGN1cnJlbnQgIT09IG51bGwgJiYgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlICE9IG51bGwpIHtcbiAgICAgICAgICB1cGRhdGVIb3N0Q29tcG9uZW50JDEoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHR5cGUsIG5ld1Byb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UpO1xuXG4gICAgICAgICAgaWYgKGN1cnJlbnQucmVmICE9PSB3b3JrSW5Qcm9ncmVzcy5yZWYpIHtcbiAgICAgICAgICAgIG1hcmtSZWYkMSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICghbmV3UHJvcHMpIHtcbiAgICAgICAgICAgIGlmICghKHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSAhPT0gbnVsbCkpIHtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCBcIldlIG11c3QgaGF2ZSBuZXcgcHJvcHMgZm9yIG5ldyBtb3VudHMuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSAvLyBUaGlzIGNhbiBoYXBwZW4gd2hlbiB3ZSBhYm9ydCB3b3JrLlxuXG5cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBjdXJyZW50SG9zdENvbnRleHQgPSBnZXRIb3N0Q29udGV4dCgpOyAvLyBUT0RPOiBNb3ZlIGNyZWF0ZUluc3RhbmNlIHRvIGJlZ2luV29yayBhbmQga2VlcCBpdCBvbiBhIGNvbnRleHRcbiAgICAgICAgICAvLyBcInN0YWNrXCIgYXMgdGhlIHBhcmVudC4gVGhlbiBhcHBlbmQgY2hpbGRyZW4gYXMgd2UgZ28gaW4gYmVnaW5Xb3JrXG4gICAgICAgICAgLy8gb3IgY29tcGxldGVXb3JrIGRlcGVuZGluZyBvbiB3aGV0aGVyIHdlIHdhbnQgdG8gYWRkIHRoZW0gdG9wLT5kb3duIG9yXG4gICAgICAgICAgLy8gYm90dG9tLT51cC4gVG9wLT5kb3duIGlzIGZhc3RlciBpbiBJRTExLlxuXG4gICAgICAgICAgdmFyIF93YXNIeWRyYXRlZCA9IHBvcEh5ZHJhdGlvblN0YXRlKHdvcmtJblByb2dyZXNzKTtcblxuICAgICAgICAgIGlmIChfd2FzSHlkcmF0ZWQpIHtcbiAgICAgICAgICAgIC8vIFRPRE86IE1vdmUgdGhpcyBhbmQgY3JlYXRlSW5zdGFuY2Ugc3RlcCBpbnRvIHRoZSBiZWdpblBoYXNlXG4gICAgICAgICAgICAvLyB0byBjb25zb2xpZGF0ZS5cbiAgICAgICAgICAgIGlmIChwcmVwYXJlVG9IeWRyYXRlSG9zdEluc3RhbmNlKHdvcmtJblByb2dyZXNzLCByb290Q29udGFpbmVySW5zdGFuY2UsIGN1cnJlbnRIb3N0Q29udGV4dCkpIHtcbiAgICAgICAgICAgICAgLy8gSWYgY2hhbmdlcyB0byB0aGUgaHlkcmF0ZWQgbm9kZSBuZWVkIHRvIGJlIGFwcGxpZWQgYXQgdGhlXG4gICAgICAgICAgICAgIC8vIGNvbW1pdC1waGFzZSB3ZSBtYXJrIHRoaXMgYXMgc3VjaC5cbiAgICAgICAgICAgICAgbWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBpbnN0YW5jZSA9IGNyZWF0ZUluc3RhbmNlKHR5cGUsIG5ld1Byb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UsIGN1cnJlbnRIb3N0Q29udGV4dCwgd29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgYXBwZW5kQWxsQ2hpbGRyZW4oaW5zdGFuY2UsIHdvcmtJblByb2dyZXNzLCBmYWxzZSwgZmFsc2UpO1xuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID0gaW5zdGFuY2U7IC8vIENlcnRhaW4gcmVuZGVyZXJzIHJlcXVpcmUgY29tbWl0LXRpbWUgZWZmZWN0cyBmb3IgaW5pdGlhbCBtb3VudC5cbiAgICAgICAgICAgIC8vIChlZyBET00gcmVuZGVyZXIgc3VwcG9ydHMgYXV0by1mb2N1cyBmb3IgY2VydGFpbiBlbGVtZW50cykuXG4gICAgICAgICAgICAvLyBNYWtlIHN1cmUgc3VjaCByZW5kZXJlcnMgZ2V0IHNjaGVkdWxlZCBmb3IgbGF0ZXIgd29yay5cblxuICAgICAgICAgICAgaWYgKGZpbmFsaXplSW5pdGlhbENoaWxkcmVuKGluc3RhbmNlLCB0eXBlLCBuZXdQcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlKSkge1xuICAgICAgICAgICAgICBtYXJrVXBkYXRlKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAod29ya0luUHJvZ3Jlc3MucmVmICE9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBhIHJlZiBvbiBhIGhvc3Qgbm9kZSB3ZSBuZWVkIHRvIHNjaGVkdWxlIGEgY2FsbGJhY2tcbiAgICAgICAgICAgIG1hcmtSZWYkMSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RUZXh0OlxuICAgICAge1xuICAgICAgICB2YXIgbmV3VGV4dCA9IG5ld1Byb3BzO1xuXG4gICAgICAgIGlmIChjdXJyZW50ICYmIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSAhPSBudWxsKSB7XG4gICAgICAgICAgdmFyIG9sZFRleHQgPSBjdXJyZW50Lm1lbW9pemVkUHJvcHM7IC8vIElmIHdlIGhhdmUgYW4gYWx0ZXJuYXRlLCB0aGF0IG1lYW5zIHRoaXMgaXMgYW4gdXBkYXRlIGFuZCB3ZSBuZWVkXG4gICAgICAgICAgLy8gdG8gc2NoZWR1bGUgYSBzaWRlLWVmZmVjdCB0byBkbyB0aGUgdXBkYXRlcy5cblxuICAgICAgICAgIHVwZGF0ZUhvc3RUZXh0JDEoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG9sZFRleHQsIG5ld1RleHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0eXBlb2YgbmV3VGV4dCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGlmICghKHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSAhPT0gbnVsbCkpIHtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCBcIldlIG11c3QgaGF2ZSBuZXcgcHJvcHMgZm9yIG5ldyBtb3VudHMuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSAvLyBUaGlzIGNhbiBoYXBwZW4gd2hlbiB3ZSBhYm9ydCB3b3JrLlxuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIF9yb290Q29udGFpbmVySW5zdGFuY2UgPSBnZXRSb290SG9zdENvbnRhaW5lcigpO1xuXG4gICAgICAgICAgdmFyIF9jdXJyZW50SG9zdENvbnRleHQgPSBnZXRIb3N0Q29udGV4dCgpO1xuXG4gICAgICAgICAgdmFyIF93YXNIeWRyYXRlZDIgPSBwb3BIeWRyYXRpb25TdGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG5cbiAgICAgICAgICBpZiAoX3dhc0h5ZHJhdGVkMikge1xuICAgICAgICAgICAgaWYgKHByZXBhcmVUb0h5ZHJhdGVIb3N0VGV4dEluc3RhbmNlKHdvcmtJblByb2dyZXNzKSkge1xuICAgICAgICAgICAgICBtYXJrVXBkYXRlKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID0gY3JlYXRlVGV4dEluc3RhbmNlKG5ld1RleHQsIF9yb290Q29udGFpbmVySW5zdGFuY2UsIF9jdXJyZW50SG9zdENvbnRleHQsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHBvcFN1c3BlbnNlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHZhciBuZXh0U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuXG4gICAgICAgIGlmICgod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiBEaWRDYXB0dXJlKSAhPT0gTm9GbGFncykge1xuICAgICAgICAgIC8vIFNvbWV0aGluZyBzdXNwZW5kZWQuIFJlLXJlbmRlciB3aXRoIHRoZSBmYWxsYmFjayBjaGlsZHJlbi5cbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IHJlbmRlckxhbmVzOyAvLyBEbyBub3QgcmVzZXQgdGhlIGVmZmVjdCBsaXN0LlxuXG4gICAgICAgICAgaWYgKCAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgICAgICAgICB0cmFuc2ZlckFjdHVhbER1cmF0aW9uKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbmV4dERpZFRpbWVvdXQgPSBuZXh0U3RhdGUgIT09IG51bGw7XG4gICAgICAgIHZhciBwcmV2RGlkVGltZW91dCA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgICAgICAgaWYgKHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHMuZmFsbGJhY2sgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcG9wSHlkcmF0aW9uU3RhdGUod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgcHJldlN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuICAgICAgICAgIHByZXZEaWRUaW1lb3V0ID0gcHJldlN0YXRlICE9PSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5leHREaWRUaW1lb3V0ICYmICFwcmV2RGlkVGltZW91dCkge1xuICAgICAgICAgIC8vIElmIHRoaXMgc3VidHJlZWUgaXMgcnVubmluZyBpbiBibG9ja2luZyBtb2RlIHdlIGNhbiBzdXNwZW5kLFxuICAgICAgICAgIC8vIG90aGVyd2lzZSB3ZSB3b24ndCBzdXNwZW5kLlxuICAgICAgICAgIC8vIFRPRE86IFRoaXMgd2lsbCBzdGlsbCBzdXNwZW5kIGEgc3luY2hyb25vdXMgdHJlZSBpZiBhbnl0aGluZ1xuICAgICAgICAgIC8vIGluIHRoZSBjb25jdXJyZW50IHRyZWUgYWxyZWFkeSBzdXNwZW5kZWQgZHVyaW5nIHRoaXMgcmVuZGVyLlxuICAgICAgICAgIC8vIFRoaXMgaXMgYSBrbm93biBidWcuXG4gICAgICAgICAgaWYgKCh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgQmxvY2tpbmdNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBNb3ZlIHRoaXMgYmFjayB0byB0aHJvd0V4Y2VwdGlvbiBiZWNhdXNlIHRoaXMgaXMgdG9vIGxhdGVcbiAgICAgICAgICAgIC8vIGlmIHRoaXMgaXMgYSBsYXJnZSB0cmVlIHdoaWNoIGlzIGNvbW1vbiBmb3IgaW5pdGlhbCBsb2Fkcy4gV2VcbiAgICAgICAgICAgIC8vIGRvbid0IGtub3cgaWYgd2Ugc2hvdWxkIHJlc3RhcnQgYSByZW5kZXIgb3Igbm90IHVudGlsIHdlIGdldFxuICAgICAgICAgICAgLy8gdGhpcyBtYXJrZXIsIGFuZCB0aGlzIGlzIHRvbyBsYXRlLlxuICAgICAgICAgICAgLy8gSWYgdGhpcyByZW5kZXIgYWxyZWFkeSBoYWQgYSBwaW5nIG9yIGxvd2VyIHByaSB1cGRhdGVzLFxuICAgICAgICAgICAgLy8gYW5kIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgd2Uga25vdyB3ZSdyZSBnb2luZyB0byBzdXNwZW5kIHdlXG4gICAgICAgICAgICAvLyBzaG91bGQgYmUgYWJsZSB0byBpbW1lZGlhdGVseSByZXN0YXJ0IGZyb20gd2l0aGluIHRocm93RXhjZXB0aW9uLlxuICAgICAgICAgICAgdmFyIGhhc0ludmlzaWJsZUNoaWxkQ29udGV4dCA9IGN1cnJlbnQgPT09IG51bGwgJiYgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcy51bnN0YWJsZV9hdm9pZFRoaXNGYWxsYmFjayAhPT0gdHJ1ZTtcblxuICAgICAgICAgICAgaWYgKGhhc0ludmlzaWJsZUNoaWxkQ29udGV4dCB8fCBoYXNTdXNwZW5zZUNvbnRleHQoc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50LCBJbnZpc2libGVQYXJlbnRTdXNwZW5zZUNvbnRleHQpKSB7XG4gICAgICAgICAgICAgIC8vIElmIHRoaXMgd2FzIGluIGFuIGludmlzaWJsZSB0cmVlIG9yIGEgbmV3IHJlbmRlciwgdGhlbiBzaG93aW5nXG4gICAgICAgICAgICAgIC8vIHRoaXMgYm91bmRhcnkgaXMgb2suXG4gICAgICAgICAgICAgIHJlbmRlckRpZFN1c3BlbmQoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgd2UncmUgZ29pbmcgdG8gaGF2ZSB0byBoaWRlIGNvbnRlbnQgc28gd2Ugc2hvdWxkXG4gICAgICAgICAgICAgIC8vIHN1c3BlbmQgZm9yIGxvbmdlciBpZiBwb3NzaWJsZS5cbiAgICAgICAgICAgICAgcmVuZGVyRGlkU3VzcGVuZERlbGF5SWZQb3NzaWJsZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHtcbiAgICAgICAgICAvLyBUT0RPOiBPbmx5IHNjaGVkdWxlIHVwZGF0ZXMgaWYgdGhlc2UgdmFsdWVzIGFyZSBub24gZXF1YWwsIGkuZS4gaXQgY2hhbmdlZC5cbiAgICAgICAgICBpZiAobmV4dERpZFRpbWVvdXQgfHwgcHJldkRpZFRpbWVvdXQpIHtcbiAgICAgICAgICAgIC8vIElmIHRoaXMgYm91bmRhcnkganVzdCB0aW1lZCBvdXQsIHNjaGVkdWxlIGFuIGVmZmVjdCB0byBhdHRhY2ggYVxuICAgICAgICAgICAgLy8gcmV0cnkgbGlzdGVuZXIgdG8gdGhlIHByb21pc2UuIFRoaXMgZmxhZyBpcyBhbHNvIHVzZWQgdG8gaGlkZSB0aGVcbiAgICAgICAgICAgIC8vIHByaW1hcnkgY2hpbGRyZW4uIEluIG11dGF0aW9uIG1vZGUsIHdlIGFsc28gbmVlZCB0aGUgZmxhZyB0b1xuICAgICAgICAgICAgLy8gKnVuaGlkZSogY2hpbGRyZW4gdGhhdCB3ZXJlIHByZXZpb3VzbHkgaGlkZGVuLCBzbyBjaGVjayBpZiB0aGlzXG4gICAgICAgICAgICAvLyBpcyBjdXJyZW50bHkgdGltZWQgb3V0LCB0b28uXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgICBwb3BIb3N0Q29udGFpbmVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHVwZGF0ZUhvc3RDb250YWluZXIod29ya0luUHJvZ3Jlc3MpO1xuXG4gICAgICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgICAgICBwcmVwYXJlUG9ydGFsTW91bnQod29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIGNhc2UgQ29udGV4dFByb3ZpZGVyOlxuICAgICAgLy8gUG9wIHByb3ZpZGVyIGZpYmVyXG4gICAgICBwb3BQcm92aWRlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIGNhc2UgSW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICAvLyBTYW1lIGFzIGNsYXNzIGNvbXBvbmVudCBjYXNlLiBJIHB1dCBpdCBkb3duIGhlcmUgc28gdGhhdCB0aGUgdGFncyBhcmVcbiAgICAgICAgLy8gc2VxdWVudGlhbCB0byBlbnN1cmUgdGhpcyBzd2l0Y2ggaXMgY29tcGlsZWQgdG8gYSBqdW1wIHRhYmxlLlxuICAgICAgICB2YXIgX0NvbXBvbmVudCA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG5cbiAgICAgICAgaWYgKGlzQ29udGV4dFByb3ZpZGVyKF9Db21wb25lbnQpKSB7XG4gICAgICAgICAgcG9wQ29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgIGNhc2UgU3VzcGVuc2VMaXN0Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBwb3BTdXNwZW5zZUNvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICB2YXIgcmVuZGVyU3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuXG4gICAgICAgIGlmIChyZW5kZXJTdGF0ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIFdlJ3JlIHJ1bm5pbmcgaW4gdGhlIGRlZmF1bHQsIFwiaW5kZXBlbmRlbnRcIiBtb2RlLlxuICAgICAgICAgIC8vIFdlIGRvbid0IGRvIGFueXRoaW5nIGluIHRoaXMgbW9kZS5cbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBkaWRTdXNwZW5kQWxyZWFkeSA9ICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIERpZENhcHR1cmUpICE9PSBOb0ZsYWdzO1xuICAgICAgICB2YXIgcmVuZGVyZWRUYWlsID0gcmVuZGVyU3RhdGUucmVuZGVyaW5nO1xuXG4gICAgICAgIGlmIChyZW5kZXJlZFRhaWwgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBXZSBqdXN0IHJlbmRlcmVkIHRoZSBoZWFkLlxuICAgICAgICAgIGlmICghZGlkU3VzcGVuZEFscmVhZHkpIHtcbiAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGZpcnN0IHBhc3MuIFdlIG5lZWQgdG8gZmlndXJlIG91dCBpZiBhbnl0aGluZyBpcyBzdGlsbFxuICAgICAgICAgICAgLy8gc3VzcGVuZGVkIGluIHRoZSByZW5kZXJlZCBzZXQuXG4gICAgICAgICAgICAvLyBJZiBuZXcgY29udGVudCB1bnN1c3BlbmRlZCwgYnV0IHRoZXJlJ3Mgc3RpbGwgc29tZSBjb250ZW50IHRoYXRcbiAgICAgICAgICAgIC8vIGRpZG4ndC4gVGhlbiB3ZSBuZWVkIHRvIGRvIGEgc2Vjb25kIHBhc3MgdGhhdCBmb3JjZXMgZXZlcnl0aGluZ1xuICAgICAgICAgICAgLy8gdG8ga2VlcCBzaG93aW5nIHRoZWlyIGZhbGxiYWNrcy5cbiAgICAgICAgICAgIC8vIFdlIG1pZ2h0IGJlIHN1c3BlbmRlZCBpZiBzb21ldGhpbmcgaW4gdGhpcyByZW5kZXIgcGFzcyBzdXNwZW5kZWQsIG9yXG4gICAgICAgICAgICAvLyBzb21ldGhpbmcgaW4gdGhlIHByZXZpb3VzIGNvbW1pdHRlZCBwYXNzIHN1c3BlbmRlZC4gT3RoZXJ3aXNlLFxuICAgICAgICAgICAgLy8gdGhlcmUncyBubyBjaGFuY2Ugc28gd2UgY2FuIHNraXAgdGhlIGV4cGVuc2l2ZSBjYWxsIHRvXG4gICAgICAgICAgICAvLyBmaW5kRmlyc3RTdXNwZW5kZWQuXG4gICAgICAgICAgICB2YXIgY2Fubm90QmVTdXNwZW5kZWQgPSByZW5kZXJIYXNOb3RTdXNwZW5kZWRZZXQoKSAmJiAoY3VycmVudCA9PT0gbnVsbCB8fCAoY3VycmVudC5mbGFncyAmIERpZENhcHR1cmUpID09PSBOb0ZsYWdzKTtcblxuICAgICAgICAgICAgaWYgKCFjYW5ub3RCZVN1c3BlbmRlZCkge1xuICAgICAgICAgICAgICB2YXIgcm93ID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG5cbiAgICAgICAgICAgICAgd2hpbGUgKHJvdyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHZhciBzdXNwZW5kZWQgPSBmaW5kRmlyc3RTdXNwZW5kZWQocm93KTtcblxuICAgICAgICAgICAgICAgIGlmIChzdXNwZW5kZWQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgIGRpZFN1c3BlbmRBbHJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IERpZENhcHR1cmU7XG4gICAgICAgICAgICAgICAgICBjdXRPZmZUYWlsSWZOZWVkZWQocmVuZGVyU3RhdGUsIGZhbHNlKTsgLy8gSWYgdGhpcyBpcyBhIG5ld2x5IHN1c3BlbmRlZCB0cmVlLCBpdCBtaWdodCBub3QgZ2V0IGNvbW1pdHRlZCBhc1xuICAgICAgICAgICAgICAgICAgLy8gcGFydCBvZiB0aGUgc2Vjb25kIHBhc3MuIEluIHRoYXQgY2FzZSBub3RoaW5nIHdpbGwgc3Vic2NyaWJlIHRvXG4gICAgICAgICAgICAgICAgICAvLyBpdHMgdGhlbm5hYmxlcy4gSW5zdGVhZCwgd2UnbGwgdHJhbnNmZXIgaXRzIHRoZW5uYWJsZXMgdG8gdGhlXG4gICAgICAgICAgICAgICAgICAvLyBTdXNwZW5zZUxpc3Qgc28gdGhhdCBpdCBjYW4gcmV0cnkgaWYgdGhleSByZXNvbHZlLlxuICAgICAgICAgICAgICAgICAgLy8gVGhlcmUgbWlnaHQgYmUgbXVsdGlwbGUgb2YgdGhlc2UgaW4gdGhlIGxpc3QgYnV0IHNpbmNlIHdlJ3JlXG4gICAgICAgICAgICAgICAgICAvLyBnb2luZyB0byB3YWl0IGZvciBhbGwgb2YgdGhlbSBhbnl3YXksIGl0IGRvZXNuJ3QgcmVhbGx5IG1hdHRlclxuICAgICAgICAgICAgICAgICAgLy8gd2hpY2ggb25lcyBnZXRzIHRvIHBpbmcuIEluIHRoZW9yeSB3ZSBjb3VsZCBnZXQgY2xldmVyIGFuZCBrZWVwXG4gICAgICAgICAgICAgICAgICAvLyB0cmFjayBvZiBob3cgbWFueSBkZXBlbmRlbmNpZXMgcmVtYWluIGJ1dCBpdCBnZXRzIHRyaWNreSBiZWNhdXNlXG4gICAgICAgICAgICAgICAgICAvLyBpbiB0aGUgbWVhbnRpbWUsIHdlIGNhbiBhZGQvcmVtb3ZlL2NoYW5nZSBpdGVtcyBhbmQgZGVwZW5kZW5jaWVzLlxuICAgICAgICAgICAgICAgICAgLy8gV2UgbWlnaHQgYmFpbCBvdXQgb2YgdGhlIGxvb3AgYmVmb3JlIGZpbmRpbmcgYW55IGJ1dCB0aGF0XG4gICAgICAgICAgICAgICAgICAvLyBkb2Vzbid0IG1hdHRlciBzaW5jZSB0aGF0IG1lYW5zIHRoYXQgdGhlIG90aGVyIGJvdW5kYXJpZXMgdGhhdFxuICAgICAgICAgICAgICAgICAgLy8gd2UgZGlkIGZpbmQgYWxyZWFkeSBoYXMgdGhlaXIgbGlzdGVuZXJzIGF0dGFjaGVkLlxuXG4gICAgICAgICAgICAgICAgICB2YXIgbmV3VGhlbm5hYmxlcyA9IHN1c3BlbmRlZC51cGRhdGVRdWV1ZTtcblxuICAgICAgICAgICAgICAgICAgaWYgKG5ld1RoZW5uYWJsZXMgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBuZXdUaGVubmFibGVzO1xuICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG4gICAgICAgICAgICAgICAgICB9IC8vIFJlcmVuZGVyIHRoZSB3aG9sZSBsaXN0LCBidXQgdGhpcyB0aW1lLCB3ZSdsbCBmb3JjZSBmYWxsYmFja3NcbiAgICAgICAgICAgICAgICAgIC8vIHRvIHN0YXkgaW4gcGxhY2UuXG4gICAgICAgICAgICAgICAgICAvLyBSZXNldCB0aGUgZWZmZWN0IGxpc3QgYmVmb3JlIGRvaW5nIHRoZSBzZWNvbmQgcGFzcyBzaW5jZSB0aGF0J3Mgbm93IGludmFsaWQuXG5cblxuICAgICAgICAgICAgICAgICAgaWYgKHJlbmRlclN0YXRlLmxhc3RFZmZlY3QgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmlyc3RFZmZlY3QgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5sYXN0RWZmZWN0ID0gcmVuZGVyU3RhdGUubGFzdEVmZmVjdDsgLy8gUmVzZXQgdGhlIGNoaWxkIGZpYmVycyB0byB0aGVpciBvcmlnaW5hbCBzdGF0ZS5cblxuICAgICAgICAgICAgICAgICAgcmVzZXRDaGlsZEZpYmVycyh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpOyAvLyBTZXQgdXAgdGhlIFN1c3BlbnNlIENvbnRleHQgdG8gZm9yY2Ugc3VzcGVuc2UgYW5kIGltbWVkaWF0ZWx5XG4gICAgICAgICAgICAgICAgICAvLyByZXJlbmRlciB0aGUgY2hpbGRyZW4uXG5cbiAgICAgICAgICAgICAgICAgIHB1c2hTdXNwZW5zZUNvbnRleHQod29ya0luUHJvZ3Jlc3MsIHNldFNoYWxsb3dTdXNwZW5zZUNvbnRleHQoc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50LCBGb3JjZVN1c3BlbnNlRmFsbGJhY2spKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByb3cgPSByb3cuc2libGluZztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocmVuZGVyU3RhdGUudGFpbCAhPT0gbnVsbCAmJiBub3coKSA+IGdldFJlbmRlclRhcmdldFRpbWUoKSkge1xuICAgICAgICAgICAgICAvLyBXZSBoYXZlIGFscmVhZHkgcGFzc2VkIG91ciBDUFUgZGVhZGxpbmUgYnV0IHdlIHN0aWxsIGhhdmUgcm93c1xuICAgICAgICAgICAgICAvLyBsZWZ0IGluIHRoZSB0YWlsLiBXZSdsbCBqdXN0IGdpdmUgdXAgZnVydGhlciBhdHRlbXB0cyB0byByZW5kZXJcbiAgICAgICAgICAgICAgLy8gdGhlIG1haW4gY29udGVudCBhbmQgb25seSByZW5kZXIgZmFsbGJhY2tzLlxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBEaWRDYXB0dXJlO1xuICAgICAgICAgICAgICBkaWRTdXNwZW5kQWxyZWFkeSA9IHRydWU7XG4gICAgICAgICAgICAgIGN1dE9mZlRhaWxJZk5lZWRlZChyZW5kZXJTdGF0ZSwgZmFsc2UpOyAvLyBTaW5jZSBub3RoaW5nIGFjdHVhbGx5IHN1c3BlbmRlZCwgdGhlcmUgd2lsbCBub3RoaW5nIHRvIHBpbmcgdGhpc1xuICAgICAgICAgICAgICAvLyB0byBnZXQgaXQgc3RhcnRlZCBiYWNrIHVwIHRvIGF0dGVtcHQgdGhlIG5leHQgaXRlbS4gV2hpbGUgaW4gdGVybXNcbiAgICAgICAgICAgICAgLy8gb2YgcHJpb3JpdHkgdGhpcyB3b3JrIGhhcyB0aGUgc2FtZSBwcmlvcml0eSBhcyB0aGlzIGN1cnJlbnQgcmVuZGVyLFxuICAgICAgICAgICAgICAvLyBpdCdzIG5vdCBwYXJ0IG9mIHRoZSBzYW1lIHRyYW5zaXRpb24gb25jZSB0aGUgdHJhbnNpdGlvbiBoYXNcbiAgICAgICAgICAgICAgLy8gY29tbWl0dGVkLiBJZiBpdCdzIHN5bmMsIHdlIHN0aWxsIHdhbnQgdG8geWllbGQgc28gdGhhdCBpdCBjYW4gYmVcbiAgICAgICAgICAgICAgLy8gcGFpbnRlZC4gQ29uY2VwdHVhbGx5LCB0aGlzIGlzIHJlYWxseSB0aGUgc2FtZSBhcyBwaW5naW5nLlxuICAgICAgICAgICAgICAvLyBXZSBjYW4gdXNlIGFueSBSZXRyeUxhbmUgZXZlbiBpZiBpdCdzIHRoZSBvbmUgY3VycmVudGx5IHJlbmRlcmluZ1xuICAgICAgICAgICAgICAvLyBzaW5jZSB3ZSdyZSBsZWF2aW5nIGl0IGJlaGluZCBvbiB0aGlzIG5vZGUuXG5cbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBTb21lUmV0cnlMYW5lO1xuXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBtYXJrU3Bhd25lZFdvcmsoU29tZVJldHJ5TGFuZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY3V0T2ZmVGFpbElmTmVlZGVkKHJlbmRlclN0YXRlLCBmYWxzZSk7XG4gICAgICAgICAgfSAvLyBOZXh0IHdlJ3JlIGdvaW5nIHRvIHJlbmRlciB0aGUgdGFpbC5cblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEFwcGVuZCB0aGUgcmVuZGVyZWQgcm93IHRvIHRoZSBjaGlsZCBsaXN0LlxuICAgICAgICAgIGlmICghZGlkU3VzcGVuZEFscmVhZHkpIHtcbiAgICAgICAgICAgIHZhciBfc3VzcGVuZGVkID0gZmluZEZpcnN0U3VzcGVuZGVkKHJlbmRlcmVkVGFpbCk7XG5cbiAgICAgICAgICAgIGlmIChfc3VzcGVuZGVkICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IERpZENhcHR1cmU7XG4gICAgICAgICAgICAgIGRpZFN1c3BlbmRBbHJlYWR5ID0gdHJ1ZTsgLy8gRW5zdXJlIHdlIHRyYW5zZmVyIHRoZSB1cGRhdGUgcXVldWUgdG8gdGhlIHBhcmVudCBzbyB0aGF0IGl0IGRvZXNuJ3RcbiAgICAgICAgICAgICAgLy8gZ2V0IGxvc3QgaWYgdGhpcyByb3cgZW5kcyB1cCBkcm9wcGVkIGR1cmluZyBhIHNlY29uZCBwYXNzLlxuXG4gICAgICAgICAgICAgIHZhciBfbmV3VGhlbm5hYmxlcyA9IF9zdXNwZW5kZWQudXBkYXRlUXVldWU7XG5cbiAgICAgICAgICAgICAgaWYgKF9uZXdUaGVubmFibGVzICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBfbmV3VGhlbm5hYmxlcztcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjdXRPZmZUYWlsSWZOZWVkZWQocmVuZGVyU3RhdGUsIHRydWUpOyAvLyBUaGlzIG1pZ2h0IGhhdmUgYmVlbiBtb2RpZmllZC5cblxuICAgICAgICAgICAgICBpZiAocmVuZGVyU3RhdGUudGFpbCA9PT0gbnVsbCAmJiByZW5kZXJTdGF0ZS50YWlsTW9kZSA9PT0gJ2hpZGRlbicgJiYgIXJlbmRlcmVkVGFpbC5hbHRlcm5hdGUgJiYgIWdldElzSHlkcmF0aW5nKCkgLy8gV2UgZG9uJ3QgY3V0IGl0IGlmIHdlJ3JlIGh5ZHJhdGluZy5cbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGRlbGV0ZSB0aGUgcm93IHdlIGp1c3QgcmVuZGVyZWQuXG4gICAgICAgICAgICAgICAgICAvLyBSZXNldCB0aGUgZWZmZWN0IGxpc3QgdG8gd2hhdCBpdCB3YXMgYmVmb3JlIHdlIHJlbmRlcmVkIHRoaXNcbiAgICAgICAgICAgICAgICAgIC8vIGNoaWxkLiBUaGUgbmVzdGVkIGNoaWxkcmVuIGhhdmUgYWxyZWFkeSBhcHBlbmRlZCB0aGVtc2VsdmVzLlxuICAgICAgICAgICAgICAgICAgdmFyIGxhc3RFZmZlY3QgPSB3b3JrSW5Qcm9ncmVzcy5sYXN0RWZmZWN0ID0gcmVuZGVyU3RhdGUubGFzdEVmZmVjdDsgLy8gUmVtb3ZlIGFueSBlZmZlY3RzIHRoYXQgd2VyZSBhcHBlbmRlZCBhZnRlciB0aGlzIHBvaW50LlxuXG4gICAgICAgICAgICAgICAgICBpZiAobGFzdEVmZmVjdCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBsYXN0RWZmZWN0Lm5leHRFZmZlY3QgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgfSAvLyBXZSdyZSBkb25lLlxuXG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIC8vIFRoZSB0aW1lIGl0IHRvb2sgdG8gcmVuZGVyIGxhc3Qgcm93IGlzIGdyZWF0ZXIgdGhhbiB0aGUgcmVtYWluaW5nXG4gICAgICAgICAgICAvLyB0aW1lIHdlIGhhdmUgdG8gcmVuZGVyLiBTbyByZW5kZXJpbmcgb25lIG1vcmUgcm93IHdvdWxkIGxpa2VseVxuICAgICAgICAgICAgLy8gZXhjZWVkIGl0LlxuICAgICAgICAgICAgbm93KCkgKiAyIC0gcmVuZGVyU3RhdGUucmVuZGVyaW5nU3RhcnRUaW1lID4gZ2V0UmVuZGVyVGFyZ2V0VGltZSgpICYmIHJlbmRlckxhbmVzICE9PSBPZmZzY3JlZW5MYW5lKSB7XG4gICAgICAgICAgICAgIC8vIFdlIGhhdmUgbm93IHBhc3NlZCBvdXIgQ1BVIGRlYWRsaW5lIGFuZCB3ZSdsbCBqdXN0IGdpdmUgdXAgZnVydGhlclxuICAgICAgICAgICAgICAvLyBhdHRlbXB0cyB0byByZW5kZXIgdGhlIG1haW4gY29udGVudCBhbmQgb25seSByZW5kZXIgZmFsbGJhY2tzLlxuICAgICAgICAgICAgICAvLyBUaGUgYXNzdW1wdGlvbiBpcyB0aGF0IHRoaXMgaXMgdXN1YWxseSBmYXN0ZXIuXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IERpZENhcHR1cmU7XG4gICAgICAgICAgICAgIGRpZFN1c3BlbmRBbHJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgY3V0T2ZmVGFpbElmTmVlZGVkKHJlbmRlclN0YXRlLCBmYWxzZSk7IC8vIFNpbmNlIG5vdGhpbmcgYWN0dWFsbHkgc3VzcGVuZGVkLCB0aGVyZSB3aWxsIG5vdGhpbmcgdG8gcGluZyB0aGlzXG4gICAgICAgICAgICAgIC8vIHRvIGdldCBpdCBzdGFydGVkIGJhY2sgdXAgdG8gYXR0ZW1wdCB0aGUgbmV4dCBpdGVtLiBXaGlsZSBpbiB0ZXJtc1xuICAgICAgICAgICAgICAvLyBvZiBwcmlvcml0eSB0aGlzIHdvcmsgaGFzIHRoZSBzYW1lIHByaW9yaXR5IGFzIHRoaXMgY3VycmVudCByZW5kZXIsXG4gICAgICAgICAgICAgIC8vIGl0J3Mgbm90IHBhcnQgb2YgdGhlIHNhbWUgdHJhbnNpdGlvbiBvbmNlIHRoZSB0cmFuc2l0aW9uIGhhc1xuICAgICAgICAgICAgICAvLyBjb21taXR0ZWQuIElmIGl0J3Mgc3luYywgd2Ugc3RpbGwgd2FudCB0byB5aWVsZCBzbyB0aGF0IGl0IGNhbiBiZVxuICAgICAgICAgICAgICAvLyBwYWludGVkLiBDb25jZXB0dWFsbHksIHRoaXMgaXMgcmVhbGx5IHRoZSBzYW1lIGFzIHBpbmdpbmcuXG4gICAgICAgICAgICAgIC8vIFdlIGNhbiB1c2UgYW55IFJldHJ5TGFuZSBldmVuIGlmIGl0J3MgdGhlIG9uZSBjdXJyZW50bHkgcmVuZGVyaW5nXG4gICAgICAgICAgICAgIC8vIHNpbmNlIHdlJ3JlIGxlYXZpbmcgaXQgYmVoaW5kIG9uIHRoaXMgbm9kZS5cblxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IFNvbWVSZXRyeUxhbmU7XG5cbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG1hcmtTcGF3bmVkV29yayhTb21lUmV0cnlMYW5lKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChyZW5kZXJTdGF0ZS5pc0JhY2t3YXJkcykge1xuICAgICAgICAgICAgLy8gVGhlIGVmZmVjdCBsaXN0IG9mIHRoZSBiYWNrd2FyZHMgdGFpbCB3aWxsIGhhdmUgYmVlbiBhZGRlZFxuICAgICAgICAgICAgLy8gdG8gdGhlIGVuZC4gVGhpcyBicmVha3MgdGhlIGd1YXJhbnRlZSB0aGF0IGxpZmUtY3ljbGVzIGZpcmUgaW5cbiAgICAgICAgICAgIC8vIHNpYmxpbmcgb3JkZXIgYnV0IHRoYXQgaXNuJ3QgYSBzdHJvbmcgZ3VhcmFudGVlIHByb21pc2VkIGJ5IFJlYWN0LlxuICAgICAgICAgICAgLy8gRXNwZWNpYWxseSBzaW5jZSB0aGVzZSBtaWdodCBhbHNvIGp1c3QgcG9wIGluIGR1cmluZyBmdXR1cmUgY29tbWl0cy5cbiAgICAgICAgICAgIC8vIEFwcGVuZCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0LlxuICAgICAgICAgICAgcmVuZGVyZWRUYWlsLnNpYmxpbmcgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcmVuZGVyZWRUYWlsO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgcHJldmlvdXNTaWJsaW5nID0gcmVuZGVyU3RhdGUubGFzdDtcblxuICAgICAgICAgICAgaWYgKHByZXZpb3VzU2libGluZyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICBwcmV2aW91c1NpYmxpbmcuc2libGluZyA9IHJlbmRlcmVkVGFpbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcmVuZGVyZWRUYWlsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZW5kZXJTdGF0ZS5sYXN0ID0gcmVuZGVyZWRUYWlsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZW5kZXJTdGF0ZS50YWlsICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gV2Ugc3RpbGwgaGF2ZSB0YWlsIHJvd3MgdG8gcmVuZGVyLlxuICAgICAgICAgIC8vIFBvcCBhIHJvdy5cbiAgICAgICAgICB2YXIgbmV4dCA9IHJlbmRlclN0YXRlLnRhaWw7XG4gICAgICAgICAgcmVuZGVyU3RhdGUucmVuZGVyaW5nID0gbmV4dDtcbiAgICAgICAgICByZW5kZXJTdGF0ZS50YWlsID0gbmV4dC5zaWJsaW5nO1xuICAgICAgICAgIHJlbmRlclN0YXRlLmxhc3RFZmZlY3QgPSB3b3JrSW5Qcm9ncmVzcy5sYXN0RWZmZWN0O1xuICAgICAgICAgIHJlbmRlclN0YXRlLnJlbmRlcmluZ1N0YXJ0VGltZSA9IG5vdygpO1xuICAgICAgICAgIG5leHQuc2libGluZyA9IG51bGw7IC8vIFJlc3RvcmUgdGhlIGNvbnRleHQuXG4gICAgICAgICAgLy8gVE9ETzogV2UgY2FuIHByb2JhYmx5IGp1c3QgYXZvaWQgcG9wcGluZyBpdCBpbnN0ZWFkIGFuZCBvbmx5XG4gICAgICAgICAgLy8gc2V0dGluZyBpdCB0aGUgZmlyc3QgdGltZSB3ZSBnbyBmcm9tIG5vdCBzdXNwZW5kZWQgdG8gc3VzcGVuZGVkLlxuXG4gICAgICAgICAgdmFyIHN1c3BlbnNlQ29udGV4dCA9IHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudDtcblxuICAgICAgICAgIGlmIChkaWRTdXNwZW5kQWxyZWFkeSkge1xuICAgICAgICAgICAgc3VzcGVuc2VDb250ZXh0ID0gc2V0U2hhbGxvd1N1c3BlbnNlQ29udGV4dChzdXNwZW5zZUNvbnRleHQsIEZvcmNlU3VzcGVuc2VGYWxsYmFjayk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN1c3BlbnNlQ29udGV4dCA9IHNldERlZmF1bHRTaGFsbG93U3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlQ29udGV4dCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcHVzaFN1c3BlbnNlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgc3VzcGVuc2VDb250ZXh0KTsgLy8gRG8gYSBwYXNzIG92ZXIgdGhlIG5leHQgcm93LlxuXG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgIGNhc2UgRnVuZGFtZW50YWxDb21wb25lbnQ6XG4gICAgICB7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIFNjb3BlQ29tcG9uZW50OlxuICAgICAge1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBCbG9jazpcblxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIE9mZnNjcmVlbkNvbXBvbmVudDpcbiAgICBjYXNlIExlZ2FjeUhpZGRlbkNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcG9wUmVuZGVyTGFuZXMod29ya0luUHJvZ3Jlc3MpO1xuXG4gICAgICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgdmFyIF9uZXh0U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICAgICAgICAgIHZhciBfcHJldlN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuICAgICAgICAgIHZhciBwcmV2SXNIaWRkZW4gPSBfcHJldlN0YXRlICE9PSBudWxsO1xuICAgICAgICAgIHZhciBuZXh0SXNIaWRkZW4gPSBfbmV4dFN0YXRlICE9PSBudWxsO1xuXG4gICAgICAgICAgaWYgKHByZXZJc0hpZGRlbiAhPT0gbmV4dElzSGlkZGVuICYmIG5ld1Byb3BzLm1vZGUgIT09ICd1bnN0YWJsZS1kZWZlci13aXRob3V0LWhpZGluZycpIHtcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgfVxuXG4gIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJVbmtub3duIHVuaXQgb2Ygd29yayB0YWcgKFwiICsgd29ya0luUHJvZ3Jlc3MudGFnICsgXCIpLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHVud2luZFdvcmsod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHN3aXRjaCAod29ya0luUHJvZ3Jlc3MudGFnKSB7XG4gICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIENvbXBvbmVudCA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG5cbiAgICAgICAgaWYgKGlzQ29udGV4dFByb3ZpZGVyKENvbXBvbmVudCkpIHtcbiAgICAgICAgICBwb3BDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBmbGFncyA9IHdvcmtJblByb2dyZXNzLmZsYWdzO1xuXG4gICAgICAgIGlmIChmbGFncyAmIFNob3VsZENhcHR1cmUpIHtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyA9IGZsYWdzICYgflNob3VsZENhcHR1cmUgfCBEaWRDYXB0dXJlO1xuXG4gICAgICAgICAgaWYgKCAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgICAgICAgICB0cmFuc2ZlckFjdHVhbER1cmF0aW9uKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICB7XG4gICAgICAgIHBvcEhvc3RDb250YWluZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICBwb3BUb3BMZXZlbENvbnRleHRPYmplY3Qod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICByZXNldFdvcmtJblByb2dyZXNzVmVyc2lvbnMoKTtcbiAgICAgICAgdmFyIF9mbGFncyA9IHdvcmtJblByb2dyZXNzLmZsYWdzO1xuXG4gICAgICAgIGlmICghKChfZmxhZ3MgJiBEaWRDYXB0dXJlKSA9PT0gTm9GbGFncykpIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvciggXCJUaGUgcm9vdCBmYWlsZWQgdG8gdW5tb3VudCBhZnRlciBhbiBlcnJvci4gVGhpcyBpcyBsaWtlbHkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgPSBfZmxhZ3MgJiB+U2hvdWxkQ2FwdHVyZSB8IERpZENhcHR1cmU7XG4gICAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcztcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgLy8gVE9ETzogcG9wSHlkcmF0aW9uU3RhdGVcbiAgICAgICAgcG9wSG9zdENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHBvcFN1c3BlbnNlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG5cbiAgICAgICAgdmFyIF9mbGFnczIgPSB3b3JrSW5Qcm9ncmVzcy5mbGFncztcblxuICAgICAgICBpZiAoX2ZsYWdzMiAmIFNob3VsZENhcHR1cmUpIHtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyA9IF9mbGFnczIgJiB+U2hvdWxkQ2FwdHVyZSB8IERpZENhcHR1cmU7IC8vIENhcHR1cmVkIGEgc3VzcGVuc2UgZWZmZWN0LiBSZS1yZW5kZXIgdGhlIGJvdW5kYXJ5LlxuXG4gICAgICAgICAgaWYgKCAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgICAgICAgICB0cmFuc2ZlckFjdHVhbER1cmF0aW9uKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgIGNhc2UgU3VzcGVuc2VMaXN0Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBwb3BTdXNwZW5zZUNvbnRleHQod29ya0luUHJvZ3Jlc3MpOyAvLyBTdXNwZW5zZUxpc3QgZG9lc24ndCBhY3R1YWxseSBjYXRjaCBhbnl0aGluZy4gSXQgc2hvdWxkJ3ZlIGJlZW5cbiAgICAgICAgLy8gY2F1Z2h0IGJ5IGEgbmVzdGVkIGJvdW5kYXJ5LiBJZiBub3QsIGl0IHNob3VsZCBidWJibGUgdGhyb3VnaC5cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICAgIHBvcEhvc3RDb250YWluZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICBjYXNlIENvbnRleHRQcm92aWRlcjpcbiAgICAgIHBvcFByb3ZpZGVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHJldHVybiBudWxsO1xuXG4gICAgY2FzZSBPZmZzY3JlZW5Db21wb25lbnQ6XG4gICAgY2FzZSBMZWdhY3lIaWRkZW5Db21wb25lbnQ6XG4gICAgICBwb3BSZW5kZXJMYW5lcyh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiB1bndpbmRJbnRlcnJ1cHRlZFdvcmsoaW50ZXJydXB0ZWRXb3JrKSB7XG4gIHN3aXRjaCAoaW50ZXJydXB0ZWRXb3JrLnRhZykge1xuICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBjaGlsZENvbnRleHRUeXBlcyA9IGludGVycnVwdGVkV29yay50eXBlLmNoaWxkQ29udGV4dFR5cGVzO1xuXG4gICAgICAgIGlmIChjaGlsZENvbnRleHRUeXBlcyAhPT0gbnVsbCAmJiBjaGlsZENvbnRleHRUeXBlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcG9wQ29udGV4dChpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RSb290OlxuICAgICAge1xuICAgICAgICBwb3BIb3N0Q29udGFpbmVyKGludGVycnVwdGVkV29yayk7XG4gICAgICAgIHBvcFRvcExldmVsQ29udGV4dE9iamVjdChpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgICByZXNldFdvcmtJblByb2dyZXNzVmVyc2lvbnMoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHBvcEhvc3RDb250ZXh0KGludGVycnVwdGVkV29yayk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAgcG9wSG9zdENvbnRhaW5lcihpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OlxuICAgICAgcG9wU3VzcGVuc2VDb250ZXh0KGludGVycnVwdGVkV29yayk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgU3VzcGVuc2VMaXN0Q29tcG9uZW50OlxuICAgICAgcG9wU3VzcGVuc2VDb250ZXh0KGludGVycnVwdGVkV29yayk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgQ29udGV4dFByb3ZpZGVyOlxuICAgICAgcG9wUHJvdmlkZXIoaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBPZmZzY3JlZW5Db21wb25lbnQ6XG4gICAgY2FzZSBMZWdhY3lIaWRkZW5Db21wb25lbnQ6XG4gICAgICBwb3BSZW5kZXJMYW5lcyhpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgYnJlYWs7XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlQ2FwdHVyZWRWYWx1ZSh2YWx1ZSwgc291cmNlKSB7XG4gIC8vIElmIHRoZSB2YWx1ZSBpcyBhbiBlcnJvciwgY2FsbCB0aGlzIGZ1bmN0aW9uIGltbWVkaWF0ZWx5IGFmdGVyIGl0IGlzIHRocm93blxuICAvLyBzbyB0aGUgc3RhY2sgaXMgYWNjdXJhdGUuXG4gIHJldHVybiB7XG4gICAgdmFsdWU6IHZhbHVlLFxuICAgIHNvdXJjZTogc291cmNlLFxuICAgIHN0YWNrOiBnZXRTdGFja0J5RmliZXJJbkRldkFuZFByb2Qoc291cmNlKVxuICB9O1xufVxuXG4vLyBUaGlzIG1vZHVsZSBpcyBmb3JrZWQgaW4gZGlmZmVyZW50IGVudmlyb25tZW50cy5cbi8vIEJ5IGRlZmF1bHQsIHJldHVybiBgdHJ1ZWAgdG8gbG9nIGVycm9ycyB0byB0aGUgY29uc29sZS5cbi8vIEZvcmtzIGNhbiByZXR1cm4gYGZhbHNlYCBpZiB0aGlzIGlzbid0IGRlc2lyYWJsZS5cbmZ1bmN0aW9uIHNob3dFcnJvckRpYWxvZyhib3VuZGFyeSwgZXJyb3JJbmZvKSB7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBsb2dDYXB0dXJlZEVycm9yKGJvdW5kYXJ5LCBlcnJvckluZm8pIHtcbiAgdHJ5IHtcbiAgICB2YXIgbG9nRXJyb3IgPSBzaG93RXJyb3JEaWFsb2coYm91bmRhcnksIGVycm9ySW5mbyk7IC8vIEFsbG93IGluamVjdGVkIHNob3dFcnJvckRpYWxvZygpIHRvIHByZXZlbnQgZGVmYXVsdCBjb25zb2xlLmVycm9yIGxvZ2dpbmcuXG4gICAgLy8gVGhpcyBlbmFibGVzIHJlbmRlcmVycyBsaWtlIFJlYWN0TmF0aXZlIHRvIGJldHRlciBtYW5hZ2UgcmVkYm94IGJlaGF2aW9yLlxuXG4gICAgaWYgKGxvZ0Vycm9yID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBlcnJvciA9IGVycm9ySW5mby52YWx1ZTtcblxuICAgIGlmICh0cnVlKSB7XG4gICAgICB2YXIgc291cmNlID0gZXJyb3JJbmZvLnNvdXJjZTtcbiAgICAgIHZhciBzdGFjayA9IGVycm9ySW5mby5zdGFjaztcbiAgICAgIHZhciBjb21wb25lbnRTdGFjayA9IHN0YWNrICE9PSBudWxsID8gc3RhY2sgOiAnJzsgLy8gQnJvd3NlcnMgc3VwcG9ydCBzaWxlbmNpbmcgdW5jYXVnaHQgZXJyb3JzIGJ5IGNhbGxpbmdcbiAgICAgIC8vIGBwcmV2ZW50RGVmYXVsdCgpYCBpbiB3aW5kb3cgYGVycm9yYCBoYW5kbGVyLlxuICAgICAgLy8gV2UgcmVjb3JkIHRoaXMgaW5mb3JtYXRpb24gYXMgYW4gZXhwYW5kbyBvbiB0aGUgZXJyb3IuXG5cbiAgICAgIGlmIChlcnJvciAhPSBudWxsICYmIGVycm9yLl9zdXBwcmVzc0xvZ2dpbmcpIHtcbiAgICAgICAgaWYgKGJvdW5kYXJ5LnRhZyA9PT0gQ2xhc3NDb21wb25lbnQpIHtcbiAgICAgICAgICAvLyBUaGUgZXJyb3IgaXMgcmVjb3ZlcmFibGUgYW5kIHdhcyBzaWxlbmNlZC5cbiAgICAgICAgICAvLyBJZ25vcmUgaXQgYW5kIGRvbid0IHByaW50IHRoZSBzdGFjayBhZGRlbmR1bS5cbiAgICAgICAgICAvLyBUaGlzIGlzIGhhbmR5IGZvciB0ZXN0aW5nIGVycm9yIGJvdW5kYXJpZXMgd2l0aG91dCBub2lzZS5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gLy8gVGhlIGVycm9yIGlzIGZhdGFsLiBTaW5jZSB0aGUgc2lsZW5jaW5nIG1pZ2h0IGhhdmVcbiAgICAgICAgLy8gYmVlbiBhY2NpZGVudGFsLCB3ZSdsbCBzdXJmYWNlIGl0IGFueXdheS5cbiAgICAgICAgLy8gSG93ZXZlciwgdGhlIGJyb3dzZXIgd291bGQgaGF2ZSBzaWxlbmNlZCB0aGUgb3JpZ2luYWwgZXJyb3JcbiAgICAgICAgLy8gc28gd2UnbGwgcHJpbnQgaXQgZmlyc3QsIGFuZCB0aGVuIHByaW50IHRoZSBzdGFjayBhZGRlbmR1bS5cblxuXG4gICAgICAgIGNvbnNvbGVbJ2Vycm9yJ10oZXJyb3IpOyAvLyBEb24ndCB0cmFuc2Zvcm0gdG8gb3VyIHdyYXBwZXJcbiAgICAgICAgLy8gRm9yIGEgbW9yZSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiB0aGlzIGJsb2NrLCBzZWU6XG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzEzMzg0XG4gICAgICB9XG5cbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gc291cmNlID8gZ2V0Q29tcG9uZW50TmFtZShzb3VyY2UudHlwZSkgOiBudWxsO1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWVNZXNzYWdlID0gY29tcG9uZW50TmFtZSA/IFwiVGhlIGFib3ZlIGVycm9yIG9jY3VycmVkIGluIHRoZSA8XCIgKyBjb21wb25lbnROYW1lICsgXCI+IGNvbXBvbmVudDpcIiA6ICdUaGUgYWJvdmUgZXJyb3Igb2NjdXJyZWQgaW4gb25lIG9mIHlvdXIgUmVhY3QgY29tcG9uZW50czonO1xuICAgICAgdmFyIGVycm9yQm91bmRhcnlNZXNzYWdlO1xuICAgICAgdmFyIGVycm9yQm91bmRhcnlOYW1lID0gZ2V0Q29tcG9uZW50TmFtZShib3VuZGFyeS50eXBlKTtcblxuICAgICAgaWYgKGVycm9yQm91bmRhcnlOYW1lKSB7XG4gICAgICAgIGVycm9yQm91bmRhcnlNZXNzYWdlID0gXCJSZWFjdCB3aWxsIHRyeSB0byByZWNyZWF0ZSB0aGlzIGNvbXBvbmVudCB0cmVlIGZyb20gc2NyYXRjaCBcIiArIChcInVzaW5nIHRoZSBlcnJvciBib3VuZGFyeSB5b3UgcHJvdmlkZWQsIFwiICsgZXJyb3JCb3VuZGFyeU5hbWUgKyBcIi5cIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlcnJvckJvdW5kYXJ5TWVzc2FnZSA9ICdDb25zaWRlciBhZGRpbmcgYW4gZXJyb3IgYm91bmRhcnkgdG8geW91ciB0cmVlIHRvIGN1c3RvbWl6ZSBlcnJvciBoYW5kbGluZyBiZWhhdmlvci5cXG4nICsgJ1Zpc2l0IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9lcnJvci1ib3VuZGFyaWVzIHRvIGxlYXJuIG1vcmUgYWJvdXQgZXJyb3IgYm91bmRhcmllcy4nO1xuICAgICAgfVxuXG4gICAgICB2YXIgY29tYmluZWRNZXNzYWdlID0gY29tcG9uZW50TmFtZU1lc3NhZ2UgKyBcIlxcblwiICsgY29tcG9uZW50U3RhY2sgKyBcIlxcblxcblwiICsgKFwiXCIgKyBlcnJvckJvdW5kYXJ5TWVzc2FnZSk7IC8vIEluIGRldmVsb3BtZW50LCB3ZSBwcm92aWRlIG91ciBvd24gbWVzc2FnZSB3aXRoIGp1c3QgdGhlIGNvbXBvbmVudCBzdGFjay5cbiAgICAgIC8vIFdlIGRvbid0IGluY2x1ZGUgdGhlIG9yaWdpbmFsIGVycm9yIG1lc3NhZ2UgYW5kIEpTIHN0YWNrIGJlY2F1c2UgdGhlIGJyb3dzZXJcbiAgICAgIC8vIGhhcyBhbHJlYWR5IHByaW50ZWQgaXQuIEV2ZW4gaWYgdGhlIGFwcGxpY2F0aW9uIHN3YWxsb3dzIHRoZSBlcnJvciwgaXQgaXMgc3RpbGxcbiAgICAgIC8vIGRpc3BsYXllZCBieSB0aGUgYnJvd3NlciB0aGFua3MgdG8gdGhlIERFVi1vbmx5IGZha2UgZXZlbnQgdHJpY2sgaW4gUmVhY3RFcnJvclV0aWxzLlxuXG4gICAgICBjb25zb2xlWydlcnJvciddKGNvbWJpbmVkTWVzc2FnZSk7IC8vIERvbid0IHRyYW5zZm9ybSB0byBvdXIgd3JhcHBlclxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJbiBwcm9kdWN0aW9uLCB3ZSBwcmludCB0aGUgZXJyb3IgZGlyZWN0bHkuXG4gICAgICAvLyBUaGlzIHdpbGwgaW5jbHVkZSB0aGUgbWVzc2FnZSwgdGhlIEpTIHN0YWNrLCBhbmQgYW55dGhpbmcgdGhlIGJyb3dzZXIgd2FudHMgdG8gc2hvdy5cbiAgICAgIC8vIFdlIHBhc3MgdGhlIGVycm9yIG9iamVjdCBpbnN0ZWFkIG9mIGN1c3RvbSBtZXNzYWdlIHNvIHRoYXQgdGhlIGJyb3dzZXIgZGlzcGxheXMgdGhlIGVycm9yIG5hdGl2ZWx5LlxuICAgICAgY29uc29sZVsnZXJyb3InXShlcnJvcik7IC8vIERvbid0IHRyYW5zZm9ybSB0byBvdXIgd3JhcHBlclxuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIFRoaXMgbWV0aG9kIG11c3Qgbm90IHRocm93LCBvciBSZWFjdCBpbnRlcm5hbCBzdGF0ZSB3aWxsIGdldCBtZXNzZWQgdXAuXG4gICAgLy8gSWYgY29uc29sZS5lcnJvciBpcyBvdmVycmlkZGVuLCBvciBsb2dDYXB0dXJlZEVycm9yKCkgc2hvd3MgYSBkaWFsb2cgdGhhdCB0aHJvd3MsXG4gICAgLy8gd2Ugd2FudCB0byByZXBvcnQgdGhpcyBlcnJvciBvdXRzaWRlIG9mIHRoZSBub3JtYWwgc3RhY2sgYXMgYSBsYXN0IHJlc29ydC5cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEzMTg4XG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICB0aHJvdyBlO1xuICAgIH0pO1xuICB9XG59XG5cbnZhciBQb3NzaWJseVdlYWtNYXAkMSA9IHR5cGVvZiBXZWFrTWFwID09PSAnZnVuY3Rpb24nID8gV2Vha01hcCA6IE1hcDtcblxuZnVuY3Rpb24gY3JlYXRlUm9vdEVycm9yVXBkYXRlKGZpYmVyLCBlcnJvckluZm8sIGxhbmUpIHtcbiAgdmFyIHVwZGF0ZSA9IGNyZWF0ZVVwZGF0ZShOb1RpbWVzdGFtcCwgbGFuZSk7IC8vIFVubW91bnQgdGhlIHJvb3QgYnkgcmVuZGVyaW5nIG51bGwuXG5cbiAgdXBkYXRlLnRhZyA9IENhcHR1cmVVcGRhdGU7IC8vIENhdXRpb246IFJlYWN0IERldlRvb2xzIGN1cnJlbnRseSBkZXBlbmRzIG9uIHRoaXMgcHJvcGVydHlcbiAgLy8gYmVpbmcgY2FsbGVkIFwiZWxlbWVudFwiLlxuXG4gIHVwZGF0ZS5wYXlsb2FkID0ge1xuICAgIGVsZW1lbnQ6IG51bGxcbiAgfTtcbiAgdmFyIGVycm9yID0gZXJyb3JJbmZvLnZhbHVlO1xuXG4gIHVwZGF0ZS5jYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICBvblVuY2F1Z2h0RXJyb3IoZXJyb3IpO1xuICAgIGxvZ0NhcHR1cmVkRXJyb3IoZmliZXIsIGVycm9ySW5mbyk7XG4gIH07XG5cbiAgcmV0dXJuIHVwZGF0ZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQ2xhc3NFcnJvclVwZGF0ZShmaWJlciwgZXJyb3JJbmZvLCBsYW5lKSB7XG4gIHZhciB1cGRhdGUgPSBjcmVhdGVVcGRhdGUoTm9UaW1lc3RhbXAsIGxhbmUpO1xuICB1cGRhdGUudGFnID0gQ2FwdHVyZVVwZGF0ZTtcbiAgdmFyIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvciA9IGZpYmVyLnR5cGUuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yO1xuXG4gIGlmICh0eXBlb2YgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIGVycm9yJDEgPSBlcnJvckluZm8udmFsdWU7XG5cbiAgICB1cGRhdGUucGF5bG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGxvZ0NhcHR1cmVkRXJyb3IoZmliZXIsIGVycm9ySW5mbyk7XG4gICAgICByZXR1cm4gZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yKGVycm9yJDEpO1xuICAgIH07XG4gIH1cblxuICB2YXIgaW5zdCA9IGZpYmVyLnN0YXRlTm9kZTtcblxuICBpZiAoaW5zdCAhPT0gbnVsbCAmJiB0eXBlb2YgaW5zdC5jb21wb25lbnREaWRDYXRjaCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHVwZGF0ZS5jYWxsYmFjayA9IGZ1bmN0aW9uIGNhbGxiYWNrKCkge1xuICAgICAge1xuICAgICAgICBtYXJrRmFpbGVkRXJyb3JCb3VuZGFyeUZvckhvdFJlbG9hZGluZyhmaWJlcik7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIFRvIHByZXNlcnZlIHRoZSBwcmVleGlzdGluZyByZXRyeSBiZWhhdmlvciBvZiBlcnJvciBib3VuZGFyaWVzLFxuICAgICAgICAvLyB3ZSBrZWVwIHRyYWNrIG9mIHdoaWNoIG9uZXMgYWxyZWFkeSBmYWlsZWQgZHVyaW5nIHRoaXMgYmF0Y2guXG4gICAgICAgIC8vIFRoaXMgZ2V0cyByZXNldCBiZWZvcmUgd2UgeWllbGQgYmFjayB0byB0aGUgYnJvd3Nlci5cbiAgICAgICAgLy8gVE9ETzogV2FybiBpbiBzdHJpY3QgbW9kZSBpZiBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgaXNcbiAgICAgICAgLy8gbm90IGRlZmluZWQuXG4gICAgICAgIG1hcmtMZWdhY3lFcnJvckJvdW5kYXJ5QXNGYWlsZWQodGhpcyk7IC8vIE9ubHkgbG9nIGhlcmUgaWYgY29tcG9uZW50RGlkQ2F0Y2ggaXMgdGhlIG9ubHkgZXJyb3IgYm91bmRhcnkgbWV0aG9kIGRlZmluZWRcblxuICAgICAgICBsb2dDYXB0dXJlZEVycm9yKGZpYmVyLCBlcnJvckluZm8pO1xuICAgICAgfVxuXG4gICAgICB2YXIgZXJyb3IkMSA9IGVycm9ySW5mby52YWx1ZTtcbiAgICAgIHZhciBzdGFjayA9IGVycm9ySW5mby5zdGFjaztcbiAgICAgIHRoaXMuY29tcG9uZW50RGlkQ2F0Y2goZXJyb3IkMSwge1xuICAgICAgICBjb21wb25lbnRTdGFjazogc3RhY2sgIT09IG51bGwgPyBzdGFjayA6ICcnXG4gICAgICB9KTtcblxuICAgICAge1xuICAgICAgICBpZiAodHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIC8vIElmIGNvbXBvbmVudERpZENhdGNoIGlzIHRoZSBvbmx5IGVycm9yIGJvdW5kYXJ5IG1ldGhvZCBkZWZpbmVkLFxuICAgICAgICAgIC8vIHRoZW4gaXQgbmVlZHMgdG8gY2FsbCBzZXRTdGF0ZSB0byByZWNvdmVyIGZyb20gZXJyb3JzLlxuICAgICAgICAgIC8vIElmIG5vIHN0YXRlIHVwZGF0ZSBpcyBzY2hlZHVsZWQgdGhlbiB0aGUgYm91bmRhcnkgd2lsbCBzd2FsbG93IHRoZSBlcnJvci5cbiAgICAgICAgICBpZiAoIWluY2x1ZGVzU29tZUxhbmUoZmliZXIubGFuZXMsIFN5bmNMYW5lKSkge1xuICAgICAgICAgICAgZXJyb3IoJyVzOiBFcnJvciBib3VuZGFyaWVzIHNob3VsZCBpbXBsZW1lbnQgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yKCkuICcgKyAnSW4gdGhhdCBtZXRob2QsIHJldHVybiBhIHN0YXRlIHVwZGF0ZSB0byBkaXNwbGF5IGFuIGVycm9yIG1lc3NhZ2Ugb3IgZmFsbGJhY2sgVUkuJywgZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnVW5rbm93bicpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgdXBkYXRlLmNhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgbWFya0ZhaWxlZEVycm9yQm91bmRhcnlGb3JIb3RSZWxvYWRpbmcoZmliZXIpO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gdXBkYXRlO1xufVxuXG5mdW5jdGlvbiBhdHRhY2hQaW5nTGlzdGVuZXIocm9vdCwgd2FrZWFibGUsIGxhbmVzKSB7XG4gIC8vIEF0dGFjaCBhIGxpc3RlbmVyIHRvIHRoZSBwcm9taXNlIHRvIFwicGluZ1wiIHRoZSByb290IGFuZCByZXRyeS4gQnV0IG9ubHkgaWZcbiAgLy8gb25lIGRvZXMgbm90IGFscmVhZHkgZXhpc3QgZm9yIHRoZSBsYW5lcyB3ZSdyZSBjdXJyZW50bHkgcmVuZGVyaW5nICh3aGljaFxuICAvLyBhY3RzIGxpa2UgYSBcInRocmVhZCBJRFwiIGhlcmUpLlxuICB2YXIgcGluZ0NhY2hlID0gcm9vdC5waW5nQ2FjaGU7XG4gIHZhciB0aHJlYWRJRHM7XG5cbiAgaWYgKHBpbmdDYWNoZSA9PT0gbnVsbCkge1xuICAgIHBpbmdDYWNoZSA9IHJvb3QucGluZ0NhY2hlID0gbmV3IFBvc3NpYmx5V2Vha01hcCQxKCk7XG4gICAgdGhyZWFkSURzID0gbmV3IFNldCgpO1xuICAgIHBpbmdDYWNoZS5zZXQod2FrZWFibGUsIHRocmVhZElEcyk7XG4gIH0gZWxzZSB7XG4gICAgdGhyZWFkSURzID0gcGluZ0NhY2hlLmdldCh3YWtlYWJsZSk7XG5cbiAgICBpZiAodGhyZWFkSURzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocmVhZElEcyA9IG5ldyBTZXQoKTtcbiAgICAgIHBpbmdDYWNoZS5zZXQod2FrZWFibGUsIHRocmVhZElEcyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKCF0aHJlYWRJRHMuaGFzKGxhbmVzKSkge1xuICAgIC8vIE1lbW9pemUgdXNpbmcgdGhlIHRocmVhZCBJRCB0byBwcmV2ZW50IHJlZHVuZGFudCBsaXN0ZW5lcnMuXG4gICAgdGhyZWFkSURzLmFkZChsYW5lcyk7XG4gICAgdmFyIHBpbmcgPSBwaW5nU3VzcGVuZGVkUm9vdC5iaW5kKG51bGwsIHJvb3QsIHdha2VhYmxlLCBsYW5lcyk7XG4gICAgd2FrZWFibGUudGhlbihwaW5nLCBwaW5nKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0aHJvd0V4Y2VwdGlvbihyb290LCByZXR1cm5GaWJlciwgc291cmNlRmliZXIsIHZhbHVlLCByb290UmVuZGVyTGFuZXMpIHtcbiAgLy8gVGhlIHNvdXJjZSBmaWJlciBkaWQgbm90IGNvbXBsZXRlLlxuICBzb3VyY2VGaWJlci5mbGFncyB8PSBJbmNvbXBsZXRlOyAvLyBJdHMgZWZmZWN0IGxpc3QgaXMgbm8gbG9uZ2VyIHZhbGlkLlxuXG4gIHNvdXJjZUZpYmVyLmZpcnN0RWZmZWN0ID0gc291cmNlRmliZXIubGFzdEVmZmVjdCA9IG51bGw7XG5cbiAgaWYgKHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHZhbHVlLnRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBUaGlzIGlzIGEgd2FrZWFibGUuXG4gICAgdmFyIHdha2VhYmxlID0gdmFsdWU7XG5cbiAgICBpZiAoKHNvdXJjZUZpYmVyLm1vZGUgJiBCbG9ja2luZ01vZGUpID09PSBOb01vZGUpIHtcbiAgICAgIC8vIFJlc2V0IHRoZSBtZW1vaXplZFN0YXRlIHRvIHdoYXQgaXQgd2FzIGJlZm9yZSB3ZSBhdHRlbXB0ZWRcbiAgICAgIC8vIHRvIHJlbmRlciBpdC5cbiAgICAgIHZhciBjdXJyZW50U291cmNlID0gc291cmNlRmliZXIuYWx0ZXJuYXRlO1xuXG4gICAgICBpZiAoY3VycmVudFNvdXJjZSkge1xuICAgICAgICBzb3VyY2VGaWJlci51cGRhdGVRdWV1ZSA9IGN1cnJlbnRTb3VyY2UudXBkYXRlUXVldWU7XG4gICAgICAgIHNvdXJjZUZpYmVyLm1lbW9pemVkU3RhdGUgPSBjdXJyZW50U291cmNlLm1lbW9pemVkU3RhdGU7XG4gICAgICAgIHNvdXJjZUZpYmVyLmxhbmVzID0gY3VycmVudFNvdXJjZS5sYW5lcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNvdXJjZUZpYmVyLnVwZGF0ZVF1ZXVlID0gbnVsbDtcbiAgICAgICAgc291cmNlRmliZXIubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGhhc0ludmlzaWJsZVBhcmVudEJvdW5kYXJ5ID0gaGFzU3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudCwgSW52aXNpYmxlUGFyZW50U3VzcGVuc2VDb250ZXh0KTsgLy8gU2NoZWR1bGUgdGhlIG5lYXJlc3QgU3VzcGVuc2UgdG8gcmUtcmVuZGVyIHRoZSB0aW1lZCBvdXQgdmlldy5cblxuICAgIHZhciBfd29ya0luUHJvZ3Jlc3MgPSByZXR1cm5GaWJlcjtcblxuICAgIGRvIHtcbiAgICAgIGlmIChfd29ya0luUHJvZ3Jlc3MudGFnID09PSBTdXNwZW5zZUNvbXBvbmVudCAmJiBzaG91bGRDYXB0dXJlU3VzcGVuc2UoX3dvcmtJblByb2dyZXNzLCBoYXNJbnZpc2libGVQYXJlbnRCb3VuZGFyeSkpIHtcbiAgICAgICAgLy8gRm91bmQgdGhlIG5lYXJlc3QgYm91bmRhcnkuXG4gICAgICAgIC8vIFN0YXNoIHRoZSBwcm9taXNlIG9uIHRoZSBib3VuZGFyeSBmaWJlci4gSWYgdGhlIGJvdW5kYXJ5IHRpbWVzIG91dCwgd2UnbGxcbiAgICAgICAgLy8gYXR0YWNoIGFub3RoZXIgbGlzdGVuZXIgdG8gZmxpcCB0aGUgYm91bmRhcnkgYmFjayB0byBpdHMgbm9ybWFsIHN0YXRlLlxuICAgICAgICB2YXIgd2FrZWFibGVzID0gX3dvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlO1xuXG4gICAgICAgIGlmICh3YWtlYWJsZXMgPT09IG51bGwpIHtcbiAgICAgICAgICB2YXIgdXBkYXRlUXVldWUgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgdXBkYXRlUXVldWUuYWRkKHdha2VhYmxlKTtcbiAgICAgICAgICBfd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSB1cGRhdGVRdWV1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3YWtlYWJsZXMuYWRkKHdha2VhYmxlKTtcbiAgICAgICAgfSAvLyBJZiB0aGUgYm91bmRhcnkgaXMgb3V0c2lkZSBvZiBibG9ja2luZyBtb2RlLCB3ZSBzaG91bGQgKm5vdCpcbiAgICAgICAgLy8gc3VzcGVuZCB0aGUgY29tbWl0LiBQcmV0ZW5kIGFzIGlmIHRoZSBzdXNwZW5kZWQgY29tcG9uZW50IHJlbmRlcmVkXG4gICAgICAgIC8vIG51bGwgYW5kIGtlZXAgcmVuZGVyaW5nLiBJbiB0aGUgY29tbWl0IHBoYXNlLCB3ZSdsbCBzY2hlZHVsZSBhXG4gICAgICAgIC8vIHN1YnNlcXVlbnQgc3luY2hyb25vdXMgdXBkYXRlIHRvIHJlLXJlbmRlciB0aGUgU3VzcGVuc2UuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIE5vdGU6IEl0IGRvZXNuJ3QgbWF0dGVyIHdoZXRoZXIgdGhlIGNvbXBvbmVudCB0aGF0IHN1c3BlbmRlZCB3YXNcbiAgICAgICAgLy8gaW5zaWRlIGEgYmxvY2tpbmcgbW9kZSB0cmVlLiBJZiB0aGUgU3VzcGVuc2UgaXMgb3V0c2lkZSBvZiBpdCwgd2VcbiAgICAgICAgLy8gc2hvdWxkICpub3QqIHN1c3BlbmQgdGhlIGNvbW1pdC5cblxuXG4gICAgICAgIGlmICgoX3dvcmtJblByb2dyZXNzLm1vZGUgJiBCbG9ja2luZ01vZGUpID09PSBOb01vZGUpIHtcbiAgICAgICAgICBfd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gRGlkQ2FwdHVyZTtcbiAgICAgICAgICBzb3VyY2VGaWJlci5mbGFncyB8PSBGb3JjZVVwZGF0ZUZvckxlZ2FjeVN1c3BlbnNlOyAvLyBXZSdyZSBnb2luZyB0byBjb21taXQgdGhpcyBmaWJlciBldmVuIHRob3VnaCBpdCBkaWRuJ3QgY29tcGxldGUuXG4gICAgICAgICAgLy8gQnV0IHdlIHNob3VsZG4ndCBjYWxsIGFueSBsaWZlY3ljbGUgbWV0aG9kcyBvciBjYWxsYmFja3MuIFJlbW92ZVxuICAgICAgICAgIC8vIGFsbCBsaWZlY3ljbGUgZWZmZWN0IHRhZ3MuXG5cbiAgICAgICAgICBzb3VyY2VGaWJlci5mbGFncyAmPSB+KExpZmVjeWNsZUVmZmVjdE1hc2sgfCBJbmNvbXBsZXRlKTtcblxuICAgICAgICAgIGlmIChzb3VyY2VGaWJlci50YWcgPT09IENsYXNzQ29tcG9uZW50KSB7XG4gICAgICAgICAgICB2YXIgY3VycmVudFNvdXJjZUZpYmVyID0gc291cmNlRmliZXIuYWx0ZXJuYXRlO1xuXG4gICAgICAgICAgICBpZiAoY3VycmVudFNvdXJjZUZpYmVyID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBuZXcgbW91bnQuIENoYW5nZSB0aGUgdGFnIHNvIGl0J3Mgbm90IG1pc3Rha2VuIGZvciBhXG4gICAgICAgICAgICAgIC8vIGNvbXBsZXRlZCBjbGFzcyBjb21wb25lbnQuIEZvciBleGFtcGxlLCB3ZSBzaG91bGQgbm90IGNhbGxcbiAgICAgICAgICAgICAgLy8gY29tcG9uZW50V2lsbFVubW91bnQgaWYgaXQgaXMgZGVsZXRlZC5cbiAgICAgICAgICAgICAgc291cmNlRmliZXIudGFnID0gSW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gV2hlbiB3ZSB0cnkgcmVuZGVyaW5nIGFnYWluLCB3ZSBzaG91bGQgbm90IHJldXNlIHRoZSBjdXJyZW50IGZpYmVyLFxuICAgICAgICAgICAgICAvLyBzaW5jZSBpdCdzIGtub3duIHRvIGJlIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZS4gVXNlIGEgZm9yY2UgdXBkYXRlIHRvXG4gICAgICAgICAgICAgIC8vIHByZXZlbnQgYSBiYWlsIG91dC5cbiAgICAgICAgICAgICAgdmFyIHVwZGF0ZSA9IGNyZWF0ZVVwZGF0ZShOb1RpbWVzdGFtcCwgU3luY0xhbmUpO1xuICAgICAgICAgICAgICB1cGRhdGUudGFnID0gRm9yY2VVcGRhdGU7XG4gICAgICAgICAgICAgIGVucXVldWVVcGRhdGUoc291cmNlRmliZXIsIHVwZGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSAvLyBUaGUgc291cmNlIGZpYmVyIGRpZCBub3QgY29tcGxldGUuIE1hcmsgaXQgd2l0aCBTeW5jIHByaW9yaXR5IHRvXG4gICAgICAgICAgLy8gaW5kaWNhdGUgdGhhdCBpdCBzdGlsbCBoYXMgcGVuZGluZyB3b3JrLlxuXG5cbiAgICAgICAgICBzb3VyY2VGaWJlci5sYW5lcyA9IG1lcmdlTGFuZXMoc291cmNlRmliZXIubGFuZXMsIFN5bmNMYW5lKTsgLy8gRXhpdCB3aXRob3V0IHN1c3BlbmRpbmcuXG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gLy8gQ29uZmlybWVkIHRoYXQgdGhlIGJvdW5kYXJ5IGlzIGluIGEgY29uY3VycmVudCBtb2RlIHRyZWUuIENvbnRpbnVlXG4gICAgICAgIC8vIHdpdGggdGhlIG5vcm1hbCBzdXNwZW5kIHBhdGguXG4gICAgICAgIC8vXG4gICAgICAgIC8vIEFmdGVyIHRoaXMgd2UnbGwgdXNlIGEgc2V0IG9mIGhldXJpc3RpY3MgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhpc1xuICAgICAgICAvLyByZW5kZXIgcGFzcyB3aWxsIHJ1biB0byBjb21wbGV0aW9uIG9yIHJlc3RhcnQgb3IgXCJzdXNwZW5kXCIgdGhlIGNvbW1pdC5cbiAgICAgICAgLy8gVGhlIGFjdHVhbCBsb2dpYyBmb3IgdGhpcyBpcyBzcHJlYWQgb3V0IGluIGRpZmZlcmVudCBwbGFjZXMuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFRoaXMgZmlyc3QgcHJpbmNpcGxlIGlzIHRoYXQgaWYgd2UncmUgZ29pbmcgdG8gc3VzcGVuZCB3aGVuIHdlIGNvbXBsZXRlXG4gICAgICAgIC8vIGEgcm9vdCwgdGhlbiB3ZSBzaG91bGQgYWxzbyByZXN0YXJ0IGlmIHdlIGdldCBhbiB1cGRhdGUgb3IgcGluZyB0aGF0XG4gICAgICAgIC8vIG1pZ2h0IHVuc3VzcGVuZCBpdCwgYW5kIHZpY2UgdmVyc2EuIFRoZSBvbmx5IHJlYXNvbiB0byBzdXNwZW5kIGlzXG4gICAgICAgIC8vIGJlY2F1c2UgeW91IHRoaW5rIHlvdSBtaWdodCB3YW50IHRvIHJlc3RhcnQgYmVmb3JlIGNvbW1pdHRpbmcuIEhvd2V2ZXIsXG4gICAgICAgIC8vIGl0IGRvZXNuJ3QgbWFrZSBzZW5zZSB0byByZXN0YXJ0IG9ubHkgd2hpbGUgaW4gdGhlIHBlcmlvZCB3ZSdyZSBzdXNwZW5kZWQuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFJlc3RhcnRpbmcgdG9vIGFnZ3Jlc3NpdmVseSBpcyBhbHNvIG5vdCBnb29kIGJlY2F1c2UgaXQgc3RhcnZlcyBvdXQgYW55XG4gICAgICAgIC8vIGludGVybWVkaWF0ZSBsb2FkaW5nIHN0YXRlLiBTbyB3ZSB1c2UgaGV1cmlzdGljcyB0byBkZXRlcm1pbmUgd2hlbi5cbiAgICAgICAgLy8gU3VzcGVuc2UgSGV1cmlzdGljc1xuICAgICAgICAvL1xuICAgICAgICAvLyBJZiBub3RoaW5nIHRocmV3IGEgUHJvbWlzZSBvciBhbGwgdGhlIHNhbWUgZmFsbGJhY2tzIGFyZSBhbHJlYWR5IHNob3dpbmcsXG4gICAgICAgIC8vIHRoZW4gZG9uJ3Qgc3VzcGVuZC9yZXN0YXJ0LlxuICAgICAgICAvL1xuICAgICAgICAvLyBJZiB0aGlzIGlzIGFuIGluaXRpYWwgcmVuZGVyIG9mIGEgbmV3IHRyZWUgb2YgU3VzcGVuc2UgYm91bmRhcmllcyBhbmRcbiAgICAgICAgLy8gdGhvc2UgdHJpZ2dlciBhIGZhbGxiYWNrLCB0aGVuIGRvbid0IHN1c3BlbmQvcmVzdGFydC4gV2Ugd2FudCB0byBlbnN1cmVcbiAgICAgICAgLy8gdGhhdCB3ZSBjYW4gc2hvdyB0aGUgaW5pdGlhbCBsb2FkaW5nIHN0YXRlIGFzIHF1aWNrbHkgYXMgcG9zc2libGUuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIElmIHdlIGhpdCBhIFwiRGVsYXllZFwiIGNhc2UsIHN1Y2ggYXMgd2hlbiB3ZSdkIHN3aXRjaCBmcm9tIGNvbnRlbnQgYmFjayBpbnRvXG4gICAgICAgIC8vIGEgZmFsbGJhY2ssIHRoZW4gd2Ugc2hvdWxkIGFsd2F5cyBzdXNwZW5kL3Jlc3RhcnQuIFRyYW5zaXRpb25zIGFwcGx5XG4gICAgICAgIC8vIHRvIHRoaXMgY2FzZS4gSWYgbm9uZSBpcyBkZWZpbmVkLCBKTkQgaXMgdXNlZCBpbnN0ZWFkLlxuICAgICAgICAvL1xuICAgICAgICAvLyBJZiB3ZSdyZSBhbHJlYWR5IHNob3dpbmcgYSBmYWxsYmFjayBhbmQgaXQgZ2V0cyBcInJldHJpZWRcIiwgYWxsb3dpbmcgdXMgdG8gc2hvd1xuICAgICAgICAvLyBhbm90aGVyIGxldmVsLCBidXQgdGhlcmUncyBzdGlsbCBhbiBpbm5lciBib3VuZGFyeSB0aGF0IHdvdWxkIHNob3cgYSBmYWxsYmFjayxcbiAgICAgICAgLy8gdGhlbiB3ZSBzdXNwZW5kL3Jlc3RhcnQgZm9yIDUwMG1zIHNpbmNlIHRoZSBsYXN0IHRpbWUgd2Ugc2hvd2VkIGEgZmFsbGJhY2tcbiAgICAgICAgLy8gYW55d2hlcmUgaW4gdGhlIHRyZWUuIFRoaXMgZWZmZWN0aXZlbHkgdGhyb3R0bGVzIHByb2dyZXNzaXZlIGxvYWRpbmcgaW50byBhXG4gICAgICAgIC8vIGNvbnNpc3RlbnQgdHJhaW4gb2YgY29tbWl0cy4gVGhpcyBhbHNvIGdpdmVzIHVzIGFuIG9wcG9ydHVuaXR5IHRvIHJlc3RhcnQgdG9cbiAgICAgICAgLy8gZ2V0IHRvIHRoZSBjb21wbGV0ZWQgc3RhdGUgc2xpZ2h0bHkgZWFybGllci5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gSWYgdGhlcmUncyBhbWJpZ3VpdHkgZHVlIHRvIGJhdGNoaW5nIGl0J3MgcmVzb2x2ZWQgaW4gcHJlZmVyZW5jZSBvZjpcbiAgICAgICAgLy8gMSkgXCJkZWxheWVkXCIsIDIpIFwiaW5pdGlhbCByZW5kZXJcIiwgMykgXCJyZXRyeVwiLlxuICAgICAgICAvL1xuICAgICAgICAvLyBXZSB3YW50IHRvIGVuc3VyZSB0aGF0IGEgXCJidXN5XCIgc3RhdGUgZG9lc24ndCBnZXQgZm9yY2UgY29tbWl0dGVkLiBXZSB3YW50IHRvXG4gICAgICAgIC8vIGVuc3VyZSB0aGF0IG5ldyBpbml0aWFsIGxvYWRpbmcgc3RhdGVzIGNhbiBjb21taXQgYXMgc29vbiBhcyBwb3NzaWJsZS5cblxuXG4gICAgICAgIGF0dGFjaFBpbmdMaXN0ZW5lcihyb290LCB3YWtlYWJsZSwgcm9vdFJlbmRlckxhbmVzKTtcbiAgICAgICAgX3dvcmtJblByb2dyZXNzLmZsYWdzIHw9IFNob3VsZENhcHR1cmU7XG4gICAgICAgIF93b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IHJvb3RSZW5kZXJMYW5lcztcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSAvLyBUaGlzIGJvdW5kYXJ5IGFscmVhZHkgY2FwdHVyZWQgZHVyaW5nIHRoaXMgcmVuZGVyLiBDb250aW51ZSB0byB0aGUgbmV4dFxuICAgICAgLy8gYm91bmRhcnkuXG5cblxuICAgICAgX3dvcmtJblByb2dyZXNzID0gX3dvcmtJblByb2dyZXNzLnJldHVybjtcbiAgICB9IHdoaWxlIChfd29ya0luUHJvZ3Jlc3MgIT09IG51bGwpOyAvLyBObyBib3VuZGFyeSB3YXMgZm91bmQuIEZhbGx0aHJvdWdoIHRvIGVycm9yIG1vZGUuXG4gICAgLy8gVE9ETzogVXNlIGludmFyaWFudCBzbyB0aGUgbWVzc2FnZSBpcyBzdHJpcHBlZCBpbiBwcm9kP1xuXG5cbiAgICB2YWx1ZSA9IG5ldyBFcnJvcigoZ2V0Q29tcG9uZW50TmFtZShzb3VyY2VGaWJlci50eXBlKSB8fCAnQSBSZWFjdCBjb21wb25lbnQnKSArICcgc3VzcGVuZGVkIHdoaWxlIHJlbmRlcmluZywgYnV0IG5vIGZhbGxiYWNrIFVJIHdhcyBzcGVjaWZpZWQuXFxuJyArICdcXG4nICsgJ0FkZCBhIDxTdXNwZW5zZSBmYWxsYmFjaz0uLi4+IGNvbXBvbmVudCBoaWdoZXIgaW4gdGhlIHRyZWUgdG8gJyArICdwcm92aWRlIGEgbG9hZGluZyBpbmRpY2F0b3Igb3IgcGxhY2Vob2xkZXIgdG8gZGlzcGxheS4nKTtcbiAgfSAvLyBXZSBkaWRuJ3QgZmluZCBhIGJvdW5kYXJ5IHRoYXQgY291bGQgaGFuZGxlIHRoaXMgdHlwZSBvZiBleGNlcHRpb24uIFN0YXJ0XG4gIC8vIG92ZXIgYW5kIHRyYXZlcnNlIHBhcmVudCBwYXRoIGFnYWluLCB0aGlzIHRpbWUgdHJlYXRpbmcgdGhlIGV4Y2VwdGlvblxuICAvLyBhcyBhbiBlcnJvci5cblxuXG4gIHJlbmRlckRpZEVycm9yKCk7XG4gIHZhbHVlID0gY3JlYXRlQ2FwdHVyZWRWYWx1ZSh2YWx1ZSwgc291cmNlRmliZXIpO1xuICB2YXIgd29ya0luUHJvZ3Jlc3MgPSByZXR1cm5GaWJlcjtcblxuICBkbyB7XG4gICAgc3dpdGNoICh3b3JrSW5Qcm9ncmVzcy50YWcpIHtcbiAgICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgX2Vycm9ySW5mbyA9IHZhbHVlO1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFNob3VsZENhcHR1cmU7XG4gICAgICAgICAgdmFyIGxhbmUgPSBwaWNrQXJiaXRyYXJ5TGFuZShyb290UmVuZGVyTGFuZXMpO1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gbWVyZ2VMYW5lcyh3b3JrSW5Qcm9ncmVzcy5sYW5lcywgbGFuZSk7XG5cbiAgICAgICAgICB2YXIgX3VwZGF0ZSA9IGNyZWF0ZVJvb3RFcnJvclVwZGF0ZSh3b3JrSW5Qcm9ncmVzcywgX2Vycm9ySW5mbywgbGFuZSk7XG5cbiAgICAgICAgICBlbnF1ZXVlQ2FwdHVyZWRVcGRhdGUod29ya0luUHJvZ3Jlc3MsIF91cGRhdGUpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICAvLyBDYXB0dXJlIGFuZCByZXRyeVxuICAgICAgICB2YXIgZXJyb3JJbmZvID0gdmFsdWU7XG4gICAgICAgIHZhciBjdG9yID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuXG4gICAgICAgIGlmICgod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiBEaWRDYXB0dXJlKSA9PT0gTm9GbGFncyAmJiAodHlwZW9mIGN0b3IuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yID09PSAnZnVuY3Rpb24nIHx8IGluc3RhbmNlICE9PSBudWxsICYmIHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRDYXRjaCA9PT0gJ2Z1bmN0aW9uJyAmJiAhaXNBbHJlYWR5RmFpbGVkTGVnYWN5RXJyb3JCb3VuZGFyeShpbnN0YW5jZSkpKSB7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gU2hvdWxkQ2FwdHVyZTtcblxuICAgICAgICAgIHZhciBfbGFuZSA9IHBpY2tBcmJpdHJhcnlMYW5lKHJvb3RSZW5kZXJMYW5lcyk7XG5cbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IG1lcmdlTGFuZXMod29ya0luUHJvZ3Jlc3MubGFuZXMsIF9sYW5lKTsgLy8gU2NoZWR1bGUgdGhlIGVycm9yIGJvdW5kYXJ5IHRvIHJlLXJlbmRlciB1c2luZyB1cGRhdGVkIHN0YXRlXG5cbiAgICAgICAgICB2YXIgX3VwZGF0ZTIgPSBjcmVhdGVDbGFzc0Vycm9yVXBkYXRlKHdvcmtJblByb2dyZXNzLCBlcnJvckluZm8sIF9sYW5lKTtcblxuICAgICAgICAgIGVucXVldWVDYXB0dXJlZFVwZGF0ZSh3b3JrSW5Qcm9ncmVzcywgX3VwZGF0ZTIpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHdvcmtJblByb2dyZXNzID0gd29ya0luUHJvZ3Jlc3MucmV0dXJuO1xuICB9IHdoaWxlICh3b3JrSW5Qcm9ncmVzcyAhPT0gbnVsbCk7XG59XG5cbnZhciBkaWRXYXJuQWJvdXRVbmRlZmluZWRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9IG51bGw7XG5cbntcbiAgZGlkV2FybkFib3V0VW5kZWZpbmVkU25hcHNob3RCZWZvcmVVcGRhdGUgPSBuZXcgU2V0KCk7XG59XG5cbnZhciBQb3NzaWJseVdlYWtTZXQgPSB0eXBlb2YgV2Vha1NldCA9PT0gJ2Z1bmN0aW9uJyA/IFdlYWtTZXQgOiBTZXQ7XG5cbnZhciBjYWxsQ29tcG9uZW50V2lsbFVubW91bnRXaXRoVGltZXIgPSBmdW5jdGlvbiAoY3VycmVudCwgaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucHJvcHMgPSBjdXJyZW50Lm1lbW9pemVkUHJvcHM7XG4gIGluc3RhbmNlLnN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuXG4gIHtcbiAgICBpbnN0YW5jZS5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICB9XG59OyAvLyBDYXB0dXJlIGVycm9ycyBzbyB0aGV5IGRvbid0IGludGVycnVwdCB1bm1vdW50aW5nLlxuXG5cbmZ1bmN0aW9uIHNhZmVseUNhbGxDb21wb25lbnRXaWxsVW5tb3VudChjdXJyZW50LCBpbnN0YW5jZSkge1xuICB7XG4gICAgaW52b2tlR3VhcmRlZENhbGxiYWNrKG51bGwsIGNhbGxDb21wb25lbnRXaWxsVW5tb3VudFdpdGhUaW1lciwgbnVsbCwgY3VycmVudCwgaW5zdGFuY2UpO1xuXG4gICAgaWYgKGhhc0NhdWdodEVycm9yKCkpIHtcbiAgICAgIHZhciB1bm1vdW50RXJyb3IgPSBjbGVhckNhdWdodEVycm9yKCk7XG4gICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihjdXJyZW50LCB1bm1vdW50RXJyb3IpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzYWZlbHlEZXRhY2hSZWYoY3VycmVudCkge1xuICB2YXIgcmVmID0gY3VycmVudC5yZWY7XG5cbiAgaWYgKHJlZiAhPT0gbnVsbCkge1xuICAgIGlmICh0eXBlb2YgcmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB7XG4gICAgICAgIGludm9rZUd1YXJkZWRDYWxsYmFjayhudWxsLCByZWYsIG51bGwsIG51bGwpO1xuXG4gICAgICAgIGlmIChoYXNDYXVnaHRFcnJvcigpKSB7XG4gICAgICAgICAgdmFyIHJlZkVycm9yID0gY2xlYXJDYXVnaHRFcnJvcigpO1xuICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGN1cnJlbnQsIHJlZkVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZWYuY3VycmVudCA9IG51bGw7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHNhZmVseUNhbGxEZXN0cm95KGN1cnJlbnQsIGRlc3Ryb3kpIHtcbiAge1xuICAgIGludm9rZUd1YXJkZWRDYWxsYmFjayhudWxsLCBkZXN0cm95LCBudWxsKTtcblxuICAgIGlmIChoYXNDYXVnaHRFcnJvcigpKSB7XG4gICAgICB2YXIgZXJyb3IgPSBjbGVhckNhdWdodEVycm9yKCk7XG4gICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihjdXJyZW50LCBlcnJvcik7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdEJlZm9yZU11dGF0aW9uTGlmZUN5Y2xlcyhjdXJyZW50LCBmaW5pc2hlZFdvcmspIHtcbiAgc3dpdGNoIChmaW5pc2hlZFdvcmsudGFnKSB7XG4gICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgIGNhc2UgQmxvY2s6XG4gICAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIGlmIChmaW5pc2hlZFdvcmsuZmxhZ3MgJiBTbmFwc2hvdCkge1xuICAgICAgICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgcHJldlByb3BzID0gY3VycmVudC5tZW1vaXplZFByb3BzO1xuICAgICAgICAgICAgdmFyIHByZXZTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICAgIHZhciBpbnN0YW5jZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7IC8vIFdlIGNvdWxkIHVwZGF0ZSBpbnN0YW5jZSBwcm9wcyBhbmQgc3RhdGUgaGVyZSxcbiAgICAgICAgICAgIC8vIGJ1dCBpbnN0ZWFkIHdlIHJlbHkgb24gdGhlbSBiZWluZyBzZXQgZHVyaW5nIGxhc3QgcmVuZGVyLlxuICAgICAgICAgICAgLy8gVE9ETzogcmV2aXNpdCB0aGlzIHdoZW4gd2UgaW1wbGVtZW50IHJlc3VtaW5nLlxuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlmIChmaW5pc2hlZFdvcmsudHlwZSA9PT0gZmluaXNoZWRXb3JrLmVsZW1lbnRUeXBlICYmICFkaWRXYXJuQWJvdXRSZWFzc2lnbmluZ1Byb3BzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGluc3RhbmNlLnByb3BzICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcykge1xuICAgICAgICAgICAgICAgICAgZXJyb3IoJ0V4cGVjdGVkICVzIHByb3BzIHRvIG1hdGNoIG1lbW9pemVkIHByb3BzIGJlZm9yZSAnICsgJ2dldFNuYXBzaG90QmVmb3JlVXBkYXRlLiAnICsgJ1RoaXMgbWlnaHQgZWl0aGVyIGJlIGJlY2F1c2Ugb2YgYSBidWcgaW4gUmVhY3QsIG9yIGJlY2F1c2UgJyArICdhIGNvbXBvbmVudCByZWFzc2lnbnMgaXRzIG93biBgdGhpcy5wcm9wc2AuICcgKyAnUGxlYXNlIGZpbGUgYW4gaXNzdWUuJywgZ2V0Q29tcG9uZW50TmFtZShmaW5pc2hlZFdvcmsudHlwZSkgfHwgJ2luc3RhbmNlJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGluc3RhbmNlLnN0YXRlICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgZXJyb3IoJ0V4cGVjdGVkICVzIHN0YXRlIHRvIG1hdGNoIG1lbW9pemVkIHN0YXRlIGJlZm9yZSAnICsgJ2dldFNuYXBzaG90QmVmb3JlVXBkYXRlLiAnICsgJ1RoaXMgbWlnaHQgZWl0aGVyIGJlIGJlY2F1c2Ugb2YgYSBidWcgaW4gUmVhY3QsIG9yIGJlY2F1c2UgJyArICdhIGNvbXBvbmVudCByZWFzc2lnbnMgaXRzIG93biBgdGhpcy5zdGF0ZWAuICcgKyAnUGxlYXNlIGZpbGUgYW4gaXNzdWUuJywgZ2V0Q29tcG9uZW50TmFtZShmaW5pc2hlZFdvcmsudHlwZSkgfHwgJ2luc3RhbmNlJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBzbmFwc2hvdCA9IGluc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlKGZpbmlzaGVkV29yay5lbGVtZW50VHlwZSA9PT0gZmluaXNoZWRXb3JrLnR5cGUgPyBwcmV2UHJvcHMgOiByZXNvbHZlRGVmYXVsdFByb3BzKGZpbmlzaGVkV29yay50eXBlLCBwcmV2UHJvcHMpLCBwcmV2U3RhdGUpO1xuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHZhciBkaWRXYXJuU2V0ID0gZGlkV2FybkFib3V0VW5kZWZpbmVkU25hcHNob3RCZWZvcmVVcGRhdGU7XG5cbiAgICAgICAgICAgICAgaWYgKHNuYXBzaG90ID09PSB1bmRlZmluZWQgJiYgIWRpZFdhcm5TZXQuaGFzKGZpbmlzaGVkV29yay50eXBlKSkge1xuICAgICAgICAgICAgICAgIGRpZFdhcm5TZXQuYWRkKGZpbmlzaGVkV29yay50eXBlKTtcblxuICAgICAgICAgICAgICAgIGVycm9yKCclcy5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSgpOiBBIHNuYXBzaG90IHZhbHVlIChvciBudWxsKSAnICsgJ211c3QgYmUgcmV0dXJuZWQuIFlvdSBoYXZlIHJldHVybmVkIHVuZGVmaW5lZC4nLCBnZXRDb21wb25lbnROYW1lKGZpbmlzaGVkV29yay50eXBlKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaW5zdGFuY2UuX19yZWFjdEludGVybmFsU25hcHNob3RCZWZvcmVVcGRhdGUgPSBzbmFwc2hvdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RSb290OlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgaWYgKGZpbmlzaGVkV29yay5mbGFncyAmIFNuYXBzaG90KSB7XG4gICAgICAgICAgICB2YXIgcm9vdCA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgICAgICAgICBjbGVhckNvbnRhaW5lcihyb290LmNvbnRhaW5lckluZm8pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICBjYXNlIEhvc3RUZXh0OlxuICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICBjYXNlIEluY29tcGxldGVDbGFzc0NvbXBvbmVudDpcbiAgICAgIC8vIE5vdGhpbmcgdG8gZG8gZm9yIHRoZXNlIGNvbXBvbmVudCB0eXBlc1xuICAgICAgcmV0dXJuO1xuICB9XG5cbiAge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlRoaXMgdW5pdCBvZiB3b3JrIHRhZyBzaG91bGQgbm90IGhhdmUgc2lkZS1lZmZlY3RzLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdEhvb2tFZmZlY3RMaXN0VW5tb3VudCh0YWcsIGZpbmlzaGVkV29yaykge1xuICB2YXIgdXBkYXRlUXVldWUgPSBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWU7XG4gIHZhciBsYXN0RWZmZWN0ID0gdXBkYXRlUXVldWUgIT09IG51bGwgPyB1cGRhdGVRdWV1ZS5sYXN0RWZmZWN0IDogbnVsbDtcblxuICBpZiAobGFzdEVmZmVjdCAhPT0gbnVsbCkge1xuICAgIHZhciBmaXJzdEVmZmVjdCA9IGxhc3RFZmZlY3QubmV4dDtcbiAgICB2YXIgZWZmZWN0ID0gZmlyc3RFZmZlY3Q7XG5cbiAgICBkbyB7XG4gICAgICBpZiAoKGVmZmVjdC50YWcgJiB0YWcpID09PSB0YWcpIHtcbiAgICAgICAgLy8gVW5tb3VudFxuICAgICAgICB2YXIgZGVzdHJveSA9IGVmZmVjdC5kZXN0cm95O1xuICAgICAgICBlZmZlY3QuZGVzdHJveSA9IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAoZGVzdHJveSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGVmZmVjdCA9IGVmZmVjdC5uZXh0O1xuICAgIH0gd2hpbGUgKGVmZmVjdCAhPT0gZmlyc3RFZmZlY3QpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdEhvb2tFZmZlY3RMaXN0TW91bnQodGFnLCBmaW5pc2hlZFdvcmspIHtcbiAgdmFyIHVwZGF0ZVF1ZXVlID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlO1xuICB2YXIgbGFzdEVmZmVjdCA9IHVwZGF0ZVF1ZXVlICE9PSBudWxsID8gdXBkYXRlUXVldWUubGFzdEVmZmVjdCA6IG51bGw7XG5cbiAgaWYgKGxhc3RFZmZlY3QgIT09IG51bGwpIHtcbiAgICB2YXIgZmlyc3RFZmZlY3QgPSBsYXN0RWZmZWN0Lm5leHQ7XG4gICAgdmFyIGVmZmVjdCA9IGZpcnN0RWZmZWN0O1xuXG4gICAgZG8ge1xuICAgICAgaWYgKChlZmZlY3QudGFnICYgdGFnKSA9PT0gdGFnKSB7XG4gICAgICAgIC8vIE1vdW50XG4gICAgICAgIHZhciBjcmVhdGUgPSBlZmZlY3QuY3JlYXRlO1xuICAgICAgICBlZmZlY3QuZGVzdHJveSA9IGNyZWF0ZSgpO1xuXG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgZGVzdHJveSA9IGVmZmVjdC5kZXN0cm95O1xuXG4gICAgICAgICAgaWYgKGRlc3Ryb3kgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgZGVzdHJveSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdmFyIGFkZGVuZHVtID0gdm9pZCAwO1xuXG4gICAgICAgICAgICBpZiAoZGVzdHJveSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICBhZGRlbmR1bSA9ICcgWW91IHJldHVybmVkIG51bGwuIElmIHlvdXIgZWZmZWN0IGRvZXMgbm90IHJlcXVpcmUgY2xlYW4gJyArICd1cCwgcmV0dXJuIHVuZGVmaW5lZCAob3Igbm90aGluZykuJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGRlc3Ryb3kudGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICBhZGRlbmR1bSA9ICdcXG5cXG5JdCBsb29rcyBsaWtlIHlvdSB3cm90ZSB1c2VFZmZlY3QoYXN5bmMgKCkgPT4gLi4uKSBvciByZXR1cm5lZCBhIFByb21pc2UuICcgKyAnSW5zdGVhZCwgd3JpdGUgdGhlIGFzeW5jIGZ1bmN0aW9uIGluc2lkZSB5b3VyIGVmZmVjdCAnICsgJ2FuZCBjYWxsIGl0IGltbWVkaWF0ZWx5OlxcblxcbicgKyAndXNlRWZmZWN0KCgpID0+IHtcXG4nICsgJyAgYXN5bmMgZnVuY3Rpb24gZmV0Y2hEYXRhKCkge1xcbicgKyAnICAgIC8vIFlvdSBjYW4gYXdhaXQgaGVyZVxcbicgKyAnICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgTXlBUEkuZ2V0RGF0YShzb21lSWQpO1xcbicgKyAnICAgIC8vIC4uLlxcbicgKyAnICB9XFxuJyArICcgIGZldGNoRGF0YSgpO1xcbicgKyBcIn0sIFtzb21lSWRdKTsgLy8gT3IgW10gaWYgZWZmZWN0IGRvZXNuJ3QgbmVlZCBwcm9wcyBvciBzdGF0ZVxcblxcblwiICsgJ0xlYXJuIG1vcmUgYWJvdXQgZGF0YSBmZXRjaGluZyB3aXRoIEhvb2tzOiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvaG9va3MtZGF0YS1mZXRjaGluZyc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBhZGRlbmR1bSA9ICcgWW91IHJldHVybmVkOiAnICsgZGVzdHJveTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXJyb3IoJ0FuIGVmZmVjdCBmdW5jdGlvbiBtdXN0IG5vdCByZXR1cm4gYW55dGhpbmcgYmVzaWRlcyBhIGZ1bmN0aW9uLCAnICsgJ3doaWNoIGlzIHVzZWQgZm9yIGNsZWFuLXVwLiVzJywgYWRkZW5kdW0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBlZmZlY3QgPSBlZmZlY3QubmV4dDtcbiAgICB9IHdoaWxlIChlZmZlY3QgIT09IGZpcnN0RWZmZWN0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzY2hlZHVsZVBhc3NpdmVFZmZlY3RzKGZpbmlzaGVkV29yaykge1xuICB2YXIgdXBkYXRlUXVldWUgPSBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWU7XG4gIHZhciBsYXN0RWZmZWN0ID0gdXBkYXRlUXVldWUgIT09IG51bGwgPyB1cGRhdGVRdWV1ZS5sYXN0RWZmZWN0IDogbnVsbDtcblxuICBpZiAobGFzdEVmZmVjdCAhPT0gbnVsbCkge1xuICAgIHZhciBmaXJzdEVmZmVjdCA9IGxhc3RFZmZlY3QubmV4dDtcbiAgICB2YXIgZWZmZWN0ID0gZmlyc3RFZmZlY3Q7XG5cbiAgICBkbyB7XG4gICAgICB2YXIgX2VmZmVjdCA9IGVmZmVjdCxcbiAgICAgICAgICBuZXh0ID0gX2VmZmVjdC5uZXh0LFxuICAgICAgICAgIHRhZyA9IF9lZmZlY3QudGFnO1xuXG4gICAgICBpZiAoKHRhZyAmIFBhc3NpdmUkMSkgIT09IE5vRmxhZ3MkMSAmJiAodGFnICYgSGFzRWZmZWN0KSAhPT0gTm9GbGFncyQxKSB7XG4gICAgICAgIGVucXVldWVQZW5kaW5nUGFzc2l2ZUhvb2tFZmZlY3RVbm1vdW50KGZpbmlzaGVkV29yaywgZWZmZWN0KTtcbiAgICAgICAgZW5xdWV1ZVBlbmRpbmdQYXNzaXZlSG9va0VmZmVjdE1vdW50KGZpbmlzaGVkV29yaywgZWZmZWN0KTtcbiAgICAgIH1cblxuICAgICAgZWZmZWN0ID0gbmV4dDtcbiAgICB9IHdoaWxlIChlZmZlY3QgIT09IGZpcnN0RWZmZWN0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRMaWZlQ3ljbGVzKGZpbmlzaGVkUm9vdCwgY3VycmVudCwgZmluaXNoZWRXb3JrLCBjb21taXR0ZWRMYW5lcykge1xuICBzd2l0Y2ggKGZpbmlzaGVkV29yay50YWcpIHtcbiAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgY2FzZSBCbG9jazpcbiAgICAgIHtcbiAgICAgICAgLy8gQXQgdGhpcyBwb2ludCBsYXlvdXQgZWZmZWN0cyBoYXZlIGFscmVhZHkgYmVlbiBkZXN0cm95ZWQgKGR1cmluZyBtdXRhdGlvbiBwaGFzZSkuXG4gICAgICAgIC8vIFRoaXMgaXMgZG9uZSB0byBwcmV2ZW50IHNpYmxpbmcgY29tcG9uZW50IGVmZmVjdHMgZnJvbSBpbnRlcmZlcmluZyB3aXRoIGVhY2ggb3RoZXIsXG4gICAgICAgIC8vIGUuZy4gYSBkZXN0cm95IGZ1bmN0aW9uIGluIG9uZSBjb21wb25lbnQgc2hvdWxkIG5ldmVyIG92ZXJyaWRlIGEgcmVmIHNldFxuICAgICAgICAvLyBieSBhIGNyZWF0ZSBmdW5jdGlvbiBpbiBhbm90aGVyIGNvbXBvbmVudCBkdXJpbmcgdGhlIHNhbWUgY29tbWl0LlxuICAgICAgICB7XG4gICAgICAgICAgY29tbWl0SG9va0VmZmVjdExpc3RNb3VudChMYXlvdXQgfCBIYXNFZmZlY3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgIH1cblxuICAgICAgICBzY2hlZHVsZVBhc3NpdmVFZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG5cbiAgICAgICAgaWYgKGZpbmlzaGVkV29yay5mbGFncyAmIFVwZGF0ZSkge1xuICAgICAgICAgIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBXZSBjb3VsZCB1cGRhdGUgaW5zdGFuY2UgcHJvcHMgYW5kIHN0YXRlIGhlcmUsXG4gICAgICAgICAgICAvLyBidXQgaW5zdGVhZCB3ZSByZWx5IG9uIHRoZW0gYmVpbmcgc2V0IGR1cmluZyBsYXN0IHJlbmRlci5cbiAgICAgICAgICAgIC8vIFRPRE86IHJldmlzaXQgdGhpcyB3aGVuIHdlIGltcGxlbWVudCByZXN1bWluZy5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaWYgKGZpbmlzaGVkV29yay50eXBlID09PSBmaW5pc2hlZFdvcmsuZWxlbWVudFR5cGUgJiYgIWRpZFdhcm5BYm91dFJlYXNzaWduaW5nUHJvcHMpIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2UucHJvcHMgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzKSB7XG4gICAgICAgICAgICAgICAgICBlcnJvcignRXhwZWN0ZWQgJXMgcHJvcHMgdG8gbWF0Y2ggbWVtb2l6ZWQgcHJvcHMgYmVmb3JlICcgKyAnY29tcG9uZW50RGlkTW91bnQuICcgKyAnVGhpcyBtaWdodCBlaXRoZXIgYmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBSZWFjdCwgb3IgYmVjYXVzZSAnICsgJ2EgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnByb3BzYC4gJyArICdQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nLCBnZXRDb21wb25lbnROYW1lKGZpbmlzaGVkV29yay50eXBlKSB8fCAnaW5zdGFuY2UnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2Uuc3RhdGUgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlKSB7XG4gICAgICAgICAgICAgICAgICBlcnJvcignRXhwZWN0ZWQgJXMgc3RhdGUgdG8gbWF0Y2ggbWVtb2l6ZWQgc3RhdGUgYmVmb3JlICcgKyAnY29tcG9uZW50RGlkTW91bnQuICcgKyAnVGhpcyBtaWdodCBlaXRoZXIgYmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBSZWFjdCwgb3IgYmVjYXVzZSAnICsgJ2EgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnN0YXRlYC4gJyArICdQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nLCBnZXRDb21wb25lbnROYW1lKGZpbmlzaGVkV29yay50eXBlKSB8fCAnaW5zdGFuY2UnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpbnN0YW5jZS5jb21wb25lbnREaWRNb3VudCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgcHJldlByb3BzID0gZmluaXNoZWRXb3JrLmVsZW1lbnRUeXBlID09PSBmaW5pc2hlZFdvcmsudHlwZSA/IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyA6IHJlc29sdmVEZWZhdWx0UHJvcHMoZmluaXNoZWRXb3JrLnR5cGUsIGN1cnJlbnQubWVtb2l6ZWRQcm9wcyk7XG4gICAgICAgICAgICB2YXIgcHJldlN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlOyAvLyBXZSBjb3VsZCB1cGRhdGUgaW5zdGFuY2UgcHJvcHMgYW5kIHN0YXRlIGhlcmUsXG4gICAgICAgICAgICAvLyBidXQgaW5zdGVhZCB3ZSByZWx5IG9uIHRoZW0gYmVpbmcgc2V0IGR1cmluZyBsYXN0IHJlbmRlci5cbiAgICAgICAgICAgIC8vIFRPRE86IHJldmlzaXQgdGhpcyB3aGVuIHdlIGltcGxlbWVudCByZXN1bWluZy5cblxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpZiAoZmluaXNoZWRXb3JrLnR5cGUgPT09IGZpbmlzaGVkV29yay5lbGVtZW50VHlwZSAmJiAhZGlkV2FybkFib3V0UmVhc3NpZ25pbmdQcm9wcykge1xuICAgICAgICAgICAgICAgIGlmIChpbnN0YW5jZS5wcm9wcyAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHMpIHtcbiAgICAgICAgICAgICAgICAgIGVycm9yKCdFeHBlY3RlZCAlcyBwcm9wcyB0byBtYXRjaCBtZW1vaXplZCBwcm9wcyBiZWZvcmUgJyArICdjb21wb25lbnREaWRVcGRhdGUuICcgKyAnVGhpcyBtaWdodCBlaXRoZXIgYmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBSZWFjdCwgb3IgYmVjYXVzZSAnICsgJ2EgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnByb3BzYC4gJyArICdQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nLCBnZXRDb21wb25lbnROYW1lKGZpbmlzaGVkV29yay50eXBlKSB8fCAnaW5zdGFuY2UnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2Uuc3RhdGUgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlKSB7XG4gICAgICAgICAgICAgICAgICBlcnJvcignRXhwZWN0ZWQgJXMgc3RhdGUgdG8gbWF0Y2ggbWVtb2l6ZWQgc3RhdGUgYmVmb3JlICcgKyAnY29tcG9uZW50RGlkVXBkYXRlLiAnICsgJ1RoaXMgbWlnaHQgZWl0aGVyIGJlIGJlY2F1c2Ugb2YgYSBidWcgaW4gUmVhY3QsIG9yIGJlY2F1c2UgJyArICdhIGNvbXBvbmVudCByZWFzc2lnbnMgaXRzIG93biBgdGhpcy5zdGF0ZWAuICcgKyAnUGxlYXNlIGZpbGUgYW4gaXNzdWUuJywgZ2V0Q29tcG9uZW50TmFtZShmaW5pc2hlZFdvcmsudHlwZSkgfHwgJ2luc3RhbmNlJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaW5zdGFuY2UuY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlLCBpbnN0YW5jZS5fX3JlYWN0SW50ZXJuYWxTbmFwc2hvdEJlZm9yZVVwZGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIFRPRE86IEkgdGhpbmsgdGhpcyBpcyBub3cgYWx3YXlzIG5vbi1udWxsIGJ5IHRoZSB0aW1lIGl0IHJlYWNoZXMgdGhlXG4gICAgICAgIC8vIGNvbW1pdCBwaGFzZS4gQ29uc2lkZXIgcmVtb3ZpbmcgdGhlIHR5cGUgY2hlY2suXG5cblxuICAgICAgICB2YXIgdXBkYXRlUXVldWUgPSBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWU7XG5cbiAgICAgICAgaWYgKHVwZGF0ZVF1ZXVlICE9PSBudWxsKSB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKGZpbmlzaGVkV29yay50eXBlID09PSBmaW5pc2hlZFdvcmsuZWxlbWVudFR5cGUgJiYgIWRpZFdhcm5BYm91dFJlYXNzaWduaW5nUHJvcHMpIHtcbiAgICAgICAgICAgICAgaWYgKGluc3RhbmNlLnByb3BzICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcykge1xuICAgICAgICAgICAgICAgIGVycm9yKCdFeHBlY3RlZCAlcyBwcm9wcyB0byBtYXRjaCBtZW1vaXplZCBwcm9wcyBiZWZvcmUgJyArICdwcm9jZXNzaW5nIHRoZSB1cGRhdGUgcXVldWUuICcgKyAnVGhpcyBtaWdodCBlaXRoZXIgYmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBSZWFjdCwgb3IgYmVjYXVzZSAnICsgJ2EgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnByb3BzYC4gJyArICdQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nLCBnZXRDb21wb25lbnROYW1lKGZpbmlzaGVkV29yay50eXBlKSB8fCAnaW5zdGFuY2UnKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChpbnN0YW5jZS5zdGF0ZSAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGUpIHtcbiAgICAgICAgICAgICAgICBlcnJvcignRXhwZWN0ZWQgJXMgc3RhdGUgdG8gbWF0Y2ggbWVtb2l6ZWQgc3RhdGUgYmVmb3JlICcgKyAncHJvY2Vzc2luZyB0aGUgdXBkYXRlIHF1ZXVlLiAnICsgJ1RoaXMgbWlnaHQgZWl0aGVyIGJlIGJlY2F1c2Ugb2YgYSBidWcgaW4gUmVhY3QsIG9yIGJlY2F1c2UgJyArICdhIGNvbXBvbmVudCByZWFzc2lnbnMgaXRzIG93biBgdGhpcy5zdGF0ZWAuICcgKyAnUGxlYXNlIGZpbGUgYW4gaXNzdWUuJywgZ2V0Q29tcG9uZW50TmFtZShmaW5pc2hlZFdvcmsudHlwZSkgfHwgJ2luc3RhbmNlJyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IC8vIFdlIGNvdWxkIHVwZGF0ZSBpbnN0YW5jZSBwcm9wcyBhbmQgc3RhdGUgaGVyZSxcbiAgICAgICAgICAvLyBidXQgaW5zdGVhZCB3ZSByZWx5IG9uIHRoZW0gYmVpbmcgc2V0IGR1cmluZyBsYXN0IHJlbmRlci5cbiAgICAgICAgICAvLyBUT0RPOiByZXZpc2l0IHRoaXMgd2hlbiB3ZSBpbXBsZW1lbnQgcmVzdW1pbmcuXG5cblxuICAgICAgICAgIGNvbW1pdFVwZGF0ZVF1ZXVlKGZpbmlzaGVkV29yaywgdXBkYXRlUXVldWUsIGluc3RhbmNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICB7XG4gICAgICAgIC8vIFRPRE86IEkgdGhpbmsgdGhpcyBpcyBub3cgYWx3YXlzIG5vbi1udWxsIGJ5IHRoZSB0aW1lIGl0IHJlYWNoZXMgdGhlXG4gICAgICAgIC8vIGNvbW1pdCBwaGFzZS4gQ29uc2lkZXIgcmVtb3ZpbmcgdGhlIHR5cGUgY2hlY2suXG4gICAgICAgIHZhciBfdXBkYXRlUXVldWUgPSBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWU7XG5cbiAgICAgICAgaWYgKF91cGRhdGVRdWV1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHZhciBfaW5zdGFuY2UgPSBudWxsO1xuXG4gICAgICAgICAgaWYgKGZpbmlzaGVkV29yay5jaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgc3dpdGNoIChmaW5pc2hlZFdvcmsuY2hpbGQudGFnKSB7XG4gICAgICAgICAgICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgICAgICAgICAgICBfaW5zdGFuY2UgPSBnZXRQdWJsaWNJbnN0YW5jZShmaW5pc2hlZFdvcmsuY2hpbGQuc3RhdGVOb2RlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICAgICAgICAgIF9pbnN0YW5jZSA9IGZpbmlzaGVkV29yay5jaGlsZC5zdGF0ZU5vZGU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29tbWl0VXBkYXRlUXVldWUoZmluaXNoZWRXb3JrLCBfdXBkYXRlUXVldWUsIF9pbnN0YW5jZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBfaW5zdGFuY2UyID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTsgLy8gUmVuZGVyZXJzIG1heSBzY2hlZHVsZSB3b3JrIHRvIGJlIGRvbmUgYWZ0ZXIgaG9zdCBjb21wb25lbnRzIGFyZSBtb3VudGVkXG4gICAgICAgIC8vIChlZyBET00gcmVuZGVyZXIgbWF5IHNjaGVkdWxlIGF1dG8tZm9jdXMgZm9yIGlucHV0cyBhbmQgZm9ybSBjb250cm9scykuXG4gICAgICAgIC8vIFRoZXNlIGVmZmVjdHMgc2hvdWxkIG9ubHkgYmUgY29tbWl0dGVkIHdoZW4gY29tcG9uZW50cyBhcmUgZmlyc3QgbW91bnRlZCxcbiAgICAgICAgLy8gYWthIHdoZW4gdGhlcmUgaXMgbm8gY3VycmVudC9hbHRlcm5hdGUuXG5cbiAgICAgICAgaWYgKGN1cnJlbnQgPT09IG51bGwgJiYgZmluaXNoZWRXb3JrLmZsYWdzICYgVXBkYXRlKSB7XG4gICAgICAgICAgdmFyIHR5cGUgPSBmaW5pc2hlZFdvcmsudHlwZTtcbiAgICAgICAgICB2YXIgcHJvcHMgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcztcbiAgICAgICAgICBjb21taXRNb3VudChfaW5zdGFuY2UyLCB0eXBlLCBwcm9wcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RUZXh0OlxuICAgICAge1xuICAgICAgICAvLyBXZSBoYXZlIG5vIGxpZmUtY3ljbGVzIGFzc29jaWF0ZWQgd2l0aCB0ZXh0LlxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgICB7XG4gICAgICAgIC8vIFdlIGhhdmUgbm8gbGlmZS1jeWNsZXMgYXNzb2NpYXRlZCB3aXRoIHBvcnRhbHMuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgUHJvZmlsZXI6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgX2ZpbmlzaGVkV29yayRtZW1vaXplMiA9IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzLFxuICAgICAgICAgICAgICBvbkNvbW1pdCA9IF9maW5pc2hlZFdvcmskbWVtb2l6ZTIub25Db21taXQsXG4gICAgICAgICAgICAgIG9uUmVuZGVyID0gX2ZpbmlzaGVkV29yayRtZW1vaXplMi5vblJlbmRlcjtcbiAgICAgICAgICB2YXIgZWZmZWN0RHVyYXRpb24gPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlLmVmZmVjdER1cmF0aW9uO1xuICAgICAgICAgIHZhciBjb21taXRUaW1lID0gZ2V0Q29tbWl0VGltZSgpO1xuXG4gICAgICAgICAgaWYgKHR5cGVvZiBvblJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBvblJlbmRlcihmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcy5pZCwgY3VycmVudCA9PT0gbnVsbCA/ICdtb3VudCcgOiAndXBkYXRlJywgZmluaXNoZWRXb3JrLmFjdHVhbER1cmF0aW9uLCBmaW5pc2hlZFdvcmsudHJlZUJhc2VEdXJhdGlvbiwgZmluaXNoZWRXb3JrLmFjdHVhbFN0YXJ0VGltZSwgY29tbWl0VGltZSwgZmluaXNoZWRSb290Lm1lbW9pemVkSW50ZXJhY3Rpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBjb21taXRTdXNwZW5zZUh5ZHJhdGlvbkNhbGxiYWNrcyhmaW5pc2hlZFJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgU3VzcGVuc2VMaXN0Q29tcG9uZW50OlxuICAgIGNhc2UgSW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50OlxuICAgIGNhc2UgRnVuZGFtZW50YWxDb21wb25lbnQ6XG4gICAgY2FzZSBTY29wZUNvbXBvbmVudDpcbiAgICBjYXNlIE9mZnNjcmVlbkNvbXBvbmVudDpcbiAgICBjYXNlIExlZ2FjeUhpZGRlbkNvbXBvbmVudDpcbiAgICAgIHJldHVybjtcbiAgfVxuXG4gIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJUaGlzIHVuaXQgb2Ygd29yayB0YWcgc2hvdWxkIG5vdCBoYXZlIHNpZGUtZWZmZWN0cy4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBoaWRlT3JVbmhpZGVBbGxDaGlsZHJlbihmaW5pc2hlZFdvcmssIGlzSGlkZGVuKSB7XG4gIHtcbiAgICAvLyBXZSBvbmx5IGhhdmUgdGhlIHRvcCBGaWJlciB0aGF0IHdhcyBpbnNlcnRlZCBidXQgd2UgbmVlZCB0byByZWN1cnNlIGRvd24gaXRzXG4gICAgLy8gY2hpbGRyZW4gdG8gZmluZCBhbGwgdGhlIHRlcm1pbmFsIG5vZGVzLlxuICAgIHZhciBub2RlID0gZmluaXNoZWRXb3JrO1xuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmIChub2RlLnRhZyA9PT0gSG9zdENvbXBvbmVudCkge1xuICAgICAgICB2YXIgaW5zdGFuY2UgPSBub2RlLnN0YXRlTm9kZTtcblxuICAgICAgICBpZiAoaXNIaWRkZW4pIHtcbiAgICAgICAgICBoaWRlSW5zdGFuY2UoaW5zdGFuY2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHVuaGlkZUluc3RhbmNlKG5vZGUuc3RhdGVOb2RlLCBub2RlLm1lbW9pemVkUHJvcHMpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKG5vZGUudGFnID09PSBIb3N0VGV4dCkge1xuICAgICAgICB2YXIgX2luc3RhbmNlMyA9IG5vZGUuc3RhdGVOb2RlO1xuXG4gICAgICAgIGlmIChpc0hpZGRlbikge1xuICAgICAgICAgIGhpZGVUZXh0SW5zdGFuY2UoX2luc3RhbmNlMyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdW5oaWRlVGV4dEluc3RhbmNlKF9pbnN0YW5jZTMsIG5vZGUubWVtb2l6ZWRQcm9wcyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoKG5vZGUudGFnID09PSBPZmZzY3JlZW5Db21wb25lbnQgfHwgbm9kZS50YWcgPT09IExlZ2FjeUhpZGRlbkNvbXBvbmVudCkgJiYgbm9kZS5tZW1vaXplZFN0YXRlICE9PSBudWxsICYmIG5vZGUgIT09IGZpbmlzaGVkV29yaykgOyBlbHNlIGlmIChub2RlLmNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgICAgbm9kZSA9IG5vZGUuY2hpbGQ7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZSA9PT0gZmluaXNoZWRXb3JrKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKG5vZGUuc2libGluZyA9PT0gbnVsbCkge1xuICAgICAgICBpZiAobm9kZS5yZXR1cm4gPT09IG51bGwgfHwgbm9kZS5yZXR1cm4gPT09IGZpbmlzaGVkV29yaykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICAgIH1cblxuICAgICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0QXR0YWNoUmVmKGZpbmlzaGVkV29yaykge1xuICB2YXIgcmVmID0gZmluaXNoZWRXb3JrLnJlZjtcblxuICBpZiAocmVmICE9PSBudWxsKSB7XG4gICAgdmFyIGluc3RhbmNlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcbiAgICB2YXIgaW5zdGFuY2VUb1VzZTtcblxuICAgIHN3aXRjaCAoZmluaXNoZWRXb3JrLnRhZykge1xuICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICBpbnN0YW5jZVRvVXNlID0gZ2V0UHVibGljSW5zdGFuY2UoaW5zdGFuY2UpO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaW5zdGFuY2VUb1VzZSA9IGluc3RhbmNlO1xuICAgIH0gLy8gTW92ZWQgb3V0c2lkZSB0byBlbnN1cmUgRENFIHdvcmtzIHdpdGggdGhpcyBmbGFnXG5cbiAgICBpZiAodHlwZW9mIHJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmVmKGluc3RhbmNlVG9Vc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB7XG4gICAgICAgIGlmICghcmVmLmhhc093blByb3BlcnR5KCdjdXJyZW50JykpIHtcbiAgICAgICAgICBlcnJvcignVW5leHBlY3RlZCByZWYgb2JqZWN0IHByb3ZpZGVkIGZvciAlcy4gJyArICdVc2UgZWl0aGVyIGEgcmVmLXNldHRlciBmdW5jdGlvbiBvciBSZWFjdC5jcmVhdGVSZWYoKS4nLCBnZXRDb21wb25lbnROYW1lKGZpbmlzaGVkV29yay50eXBlKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmVmLmN1cnJlbnQgPSBpbnN0YW5jZVRvVXNlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXREZXRhY2hSZWYoY3VycmVudCkge1xuICB2YXIgY3VycmVudFJlZiA9IGN1cnJlbnQucmVmO1xuXG4gIGlmIChjdXJyZW50UmVmICE9PSBudWxsKSB7XG4gICAgaWYgKHR5cGVvZiBjdXJyZW50UmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjdXJyZW50UmVmKG51bGwpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50UmVmLmN1cnJlbnQgPSBudWxsO1xuICAgIH1cbiAgfVxufSAvLyBVc2VyLW9yaWdpbmF0aW5nIGVycm9ycyAobGlmZWN5Y2xlcyBhbmQgcmVmcykgc2hvdWxkIG5vdCBpbnRlcnJ1cHRcbi8vIGRlbGV0aW9uLCBzbyBkb24ndCBsZXQgdGhlbSB0aHJvdy4gSG9zdC1vcmlnaW5hdGluZyBlcnJvcnMgc2hvdWxkXG4vLyBpbnRlcnJ1cHQgZGVsZXRpb24sIHNvIGl0J3Mgb2theVxuXG5cbmZ1bmN0aW9uIGNvbW1pdFVubW91bnQoZmluaXNoZWRSb290LCBjdXJyZW50LCByZW5kZXJQcmlvcml0eUxldmVsKSB7XG4gIG9uQ29tbWl0VW5tb3VudChjdXJyZW50KTtcblxuICBzd2l0Y2ggKGN1cnJlbnQudGFnKSB7XG4gICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgY2FzZSBNZW1vQ29tcG9uZW50OlxuICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICBjYXNlIEJsb2NrOlxuICAgICAge1xuICAgICAgICB2YXIgdXBkYXRlUXVldWUgPSBjdXJyZW50LnVwZGF0ZVF1ZXVlO1xuXG4gICAgICAgIGlmICh1cGRhdGVRdWV1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHZhciBsYXN0RWZmZWN0ID0gdXBkYXRlUXVldWUubGFzdEVmZmVjdDtcblxuICAgICAgICAgIGlmIChsYXN0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgZmlyc3RFZmZlY3QgPSBsYXN0RWZmZWN0Lm5leHQ7XG4gICAgICAgICAgICB2YXIgZWZmZWN0ID0gZmlyc3RFZmZlY3Q7XG5cbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgdmFyIF9lZmZlY3QyID0gZWZmZWN0LFxuICAgICAgICAgICAgICAgICAgZGVzdHJveSA9IF9lZmZlY3QyLmRlc3Ryb3ksXG4gICAgICAgICAgICAgICAgICB0YWcgPSBfZWZmZWN0Mi50YWc7XG5cbiAgICAgICAgICAgICAgaWYgKGRlc3Ryb3kgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGlmICgodGFnICYgUGFzc2l2ZSQxKSAhPT0gTm9GbGFncyQxKSB7XG4gICAgICAgICAgICAgICAgICBlbnF1ZXVlUGVuZGluZ1Bhc3NpdmVIb29rRWZmZWN0VW5tb3VudChjdXJyZW50LCBlZmZlY3QpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHNhZmVseUNhbGxEZXN0cm95KGN1cnJlbnQsIGRlc3Ryb3kpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGVmZmVjdCA9IGVmZmVjdC5uZXh0O1xuICAgICAgICAgICAgfSB3aGlsZSAoZWZmZWN0ICE9PSBmaXJzdEVmZmVjdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgc2FmZWx5RGV0YWNoUmVmKGN1cnJlbnQpO1xuICAgICAgICB2YXIgaW5zdGFuY2UgPSBjdXJyZW50LnN0YXRlTm9kZTtcblxuICAgICAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVbm1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgc2FmZWx5Q2FsbENvbXBvbmVudFdpbGxVbm1vdW50KGN1cnJlbnQsIGluc3RhbmNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgc2FmZWx5RGV0YWNoUmVmKGN1cnJlbnQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgICB7XG4gICAgICAgIC8vIFRPRE86IHRoaXMgaXMgcmVjdXJzaXZlLlxuICAgICAgICAvLyBXZSBhcmUgYWxzbyBub3QgdXNpbmcgdGhpcyBwYXJlbnQgYmVjYXVzZVxuICAgICAgICAvLyB0aGUgcG9ydGFsIHdpbGwgZ2V0IHB1c2hlZCBpbW1lZGlhdGVseS5cbiAgICAgICAge1xuICAgICAgICAgIHVubW91bnRIb3N0Q29tcG9uZW50cyhmaW5pc2hlZFJvb3QsIGN1cnJlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBGdW5kYW1lbnRhbENvbXBvbmVudDpcbiAgICAgIHtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIERlaHlkcmF0ZWRGcmFnbWVudDpcbiAgICAgIHtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIFNjb3BlQ29tcG9uZW50OlxuICAgICAge1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXROZXN0ZWRVbm1vdW50cyhmaW5pc2hlZFJvb3QsIHJvb3QsIHJlbmRlclByaW9yaXR5TGV2ZWwpIHtcbiAgLy8gV2hpbGUgd2UncmUgaW5zaWRlIGEgcmVtb3ZlZCBob3N0IG5vZGUgd2UgZG9uJ3Qgd2FudCB0byBjYWxsXG4gIC8vIHJlbW92ZUNoaWxkIG9uIHRoZSBpbm5lciBub2RlcyBiZWNhdXNlIHRoZXkncmUgcmVtb3ZlZCBieSB0aGUgdG9wXG4gIC8vIGNhbGwgYW55d2F5LiBXZSBhbHNvIHdhbnQgdG8gY2FsbCBjb21wb25lbnRXaWxsVW5tb3VudCBvbiBhbGxcbiAgLy8gY29tcG9zaXRlcyBiZWZvcmUgdGhpcyBob3N0IG5vZGUgaXMgcmVtb3ZlZCBmcm9tIHRoZSB0cmVlLiBUaGVyZWZvcmVcbiAgLy8gd2UgZG8gYW4gaW5uZXIgbG9vcCB3aGlsZSB3ZSdyZSBzdGlsbCBpbnNpZGUgdGhlIGhvc3Qgbm9kZS5cbiAgdmFyIG5vZGUgPSByb290O1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29tbWl0VW5tb3VudChmaW5pc2hlZFJvb3QsIG5vZGUpOyAvLyBWaXNpdCBjaGlsZHJlbiBiZWNhdXNlIHRoZXkgbWF5IGNvbnRhaW4gbW9yZSBjb21wb3NpdGUgb3IgaG9zdCBub2Rlcy5cbiAgICAvLyBTa2lwIHBvcnRhbHMgYmVjYXVzZSBjb21taXRVbm1vdW50KCkgY3VycmVudGx5IHZpc2l0cyB0aGVtIHJlY3Vyc2l2ZWx5LlxuXG4gICAgaWYgKG5vZGUuY2hpbGQgIT09IG51bGwgJiYgKCAvLyBJZiB3ZSB1c2UgbXV0YXRpb24gd2UgZHJpbGwgZG93biBpbnRvIHBvcnRhbHMgdXNpbmcgY29tbWl0VW5tb3VudCBhYm92ZS5cbiAgICAvLyBJZiB3ZSBkb24ndCB1c2UgbXV0YXRpb24gd2UgZHJpbGwgZG93biBpbnRvIHBvcnRhbHMgaGVyZSBpbnN0ZWFkLlxuICAgICBub2RlLnRhZyAhPT0gSG9zdFBvcnRhbCkpIHtcbiAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUgPT09IHJvb3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3aGlsZSAobm9kZS5zaWJsaW5nID09PSBudWxsKSB7XG4gICAgICBpZiAobm9kZS5yZXR1cm4gPT09IG51bGwgfHwgbm9kZS5yZXR1cm4gPT09IHJvb3QpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfVxuXG4gICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGV0YWNoRmliZXJNdXRhdGlvbihmaWJlcikge1xuICAvLyBDdXQgb2ZmIHRoZSByZXR1cm4gcG9pbnRlcnMgdG8gZGlzY29ubmVjdCBpdCBmcm9tIHRoZSB0cmVlLiBJZGVhbGx5LCB3ZVxuICAvLyBzaG91bGQgY2xlYXIgdGhlIGNoaWxkIHBvaW50ZXIgb2YgdGhlIHBhcmVudCBhbHRlcm5hdGUgdG8gbGV0IHRoaXNcbiAgLy8gZ2V0IEdDOmVkIGJ1dCB3ZSBkb24ndCBrbm93IHdoaWNoIGZvciBzdXJlIHdoaWNoIHBhcmVudCBpcyB0aGUgY3VycmVudFxuICAvLyBvbmUgc28gd2UnbGwgc2V0dGxlIGZvciBHQzppbmcgdGhlIHN1YnRyZWUgb2YgdGhpcyBjaGlsZC4gVGhpcyBjaGlsZFxuICAvLyBpdHNlbGYgd2lsbCBiZSBHQzplZCB3aGVuIHRoZSBwYXJlbnQgdXBkYXRlcyB0aGUgbmV4dCB0aW1lLlxuICAvLyBOb3RlOiB3ZSBjYW5ub3QgbnVsbCBvdXQgc2libGluZyBoZXJlLCBvdGhlcndpc2UgaXQgY2FuIGNhdXNlIGlzc3Vlc1xuICAvLyB3aXRoIGZpbmRET01Ob2RlIGFuZCBob3cgaXQgcmVxdWlyZXMgdGhlIHNpYmxpbmcgZmllbGQgdG8gY2Fycnkgb3V0XG4gIC8vIHRyYXZlcnNhbCBpbiBhIGxhdGVyIGVmZmVjdC4gU2VlIFBSICMxNjgyMC4gV2Ugbm93IGNsZWFyIHRoZSBzaWJsaW5nXG4gIC8vIGZpZWxkIGFmdGVyIGVmZmVjdHMsIHNlZTogZGV0YWNoRmliZXJBZnRlckVmZmVjdHMuXG4gIC8vXG4gIC8vIERvbid0IGRpc2Nvbm5lY3Qgc3RhdGVOb2RlIG5vdzsgaXQgd2lsbCBiZSBkZXRhY2hlZCBpbiBkZXRhY2hGaWJlckFmdGVyRWZmZWN0cy5cbiAgLy8gSXQgbWF5IGJlIHJlcXVpcmVkIGlmIHRoZSBjdXJyZW50IGNvbXBvbmVudCBpcyBhbiBlcnJvciBib3VuZGFyeSxcbiAgLy8gYW5kIG9uZSBvZiBpdHMgZGVzY2VuZGFudHMgdGhyb3dzIHdoaWxlIHVubW91bnRpbmcgYSBwYXNzaXZlIGVmZmVjdC5cbiAgZmliZXIuYWx0ZXJuYXRlID0gbnVsbDtcbiAgZmliZXIuY2hpbGQgPSBudWxsO1xuICBmaWJlci5kZXBlbmRlbmNpZXMgPSBudWxsO1xuICBmaWJlci5maXJzdEVmZmVjdCA9IG51bGw7XG4gIGZpYmVyLmxhc3RFZmZlY3QgPSBudWxsO1xuICBmaWJlci5tZW1vaXplZFByb3BzID0gbnVsbDtcbiAgZmliZXIubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gIGZpYmVyLnBlbmRpbmdQcm9wcyA9IG51bGw7XG4gIGZpYmVyLnJldHVybiA9IG51bGw7XG4gIGZpYmVyLnVwZGF0ZVF1ZXVlID0gbnVsbDtcblxuICB7XG4gICAgZmliZXIuX2RlYnVnT3duZXIgPSBudWxsO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldEhvc3RQYXJlbnRGaWJlcihmaWJlcikge1xuICB2YXIgcGFyZW50ID0gZmliZXIucmV0dXJuO1xuXG4gIHdoaWxlIChwYXJlbnQgIT09IG51bGwpIHtcbiAgICBpZiAoaXNIb3N0UGFyZW50KHBhcmVudCkpIHtcbiAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgfVxuXG4gICAgcGFyZW50ID0gcGFyZW50LnJldHVybjtcbiAgfVxuXG4gIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJFeHBlY3RlZCB0byBmaW5kIGEgaG9zdCBwYXJlbnQuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNIb3N0UGFyZW50KGZpYmVyKSB7XG4gIHJldHVybiBmaWJlci50YWcgPT09IEhvc3RDb21wb25lbnQgfHwgZmliZXIudGFnID09PSBIb3N0Um9vdCB8fCBmaWJlci50YWcgPT09IEhvc3RQb3J0YWw7XG59XG5cbmZ1bmN0aW9uIGdldEhvc3RTaWJsaW5nKGZpYmVyKSB7XG4gIC8vIFdlJ3JlIGdvaW5nIHRvIHNlYXJjaCBmb3J3YXJkIGludG8gdGhlIHRyZWUgdW50aWwgd2UgZmluZCBhIHNpYmxpbmcgaG9zdFxuICAvLyBub2RlLiBVbmZvcnR1bmF0ZWx5LCBpZiBtdWx0aXBsZSBpbnNlcnRpb25zIGFyZSBkb25lIGluIGEgcm93IHdlIGhhdmUgdG9cbiAgLy8gc2VhcmNoIHBhc3QgdGhlbS4gVGhpcyBsZWFkcyB0byBleHBvbmVudGlhbCBzZWFyY2ggZm9yIHRoZSBuZXh0IHNpYmxpbmcuXG4gIC8vIFRPRE86IEZpbmQgYSBtb3JlIGVmZmljaWVudCB3YXkgdG8gZG8gdGhpcy5cbiAgdmFyIG5vZGUgPSBmaWJlcjtcblxuICBzaWJsaW5nczogd2hpbGUgKHRydWUpIHtcbiAgICAvLyBJZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZywgbGV0J3MgdHJ5IHRoZSBuZXh0IHNpYmxpbmcuXG4gICAgd2hpbGUgKG5vZGUuc2libGluZyA9PT0gbnVsbCkge1xuICAgICAgaWYgKG5vZGUucmV0dXJuID09PSBudWxsIHx8IGlzSG9zdFBhcmVudChub2RlLnJldHVybikpIHtcbiAgICAgICAgLy8gSWYgd2UgcG9wIG91dCBvZiB0aGUgcm9vdCBvciBoaXQgdGhlIHBhcmVudCB0aGUgZmliZXIgd2UgYXJlIHRoZVxuICAgICAgICAvLyBsYXN0IHNpYmxpbmcuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfVxuXG4gICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG5cbiAgICB3aGlsZSAobm9kZS50YWcgIT09IEhvc3RDb21wb25lbnQgJiYgbm9kZS50YWcgIT09IEhvc3RUZXh0ICYmIG5vZGUudGFnICE9PSBEZWh5ZHJhdGVkRnJhZ21lbnQpIHtcbiAgICAgIC8vIElmIGl0IGlzIG5vdCBob3N0IG5vZGUgYW5kLCB3ZSBtaWdodCBoYXZlIGEgaG9zdCBub2RlIGluc2lkZSBpdC5cbiAgICAgIC8vIFRyeSB0byBzZWFyY2ggZG93biB1bnRpbCB3ZSBmaW5kIG9uZS5cbiAgICAgIGlmIChub2RlLmZsYWdzICYgUGxhY2VtZW50KSB7XG4gICAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYSBjaGlsZCwgdHJ5IHRoZSBzaWJsaW5ncyBpbnN0ZWFkLlxuICAgICAgICBjb250aW51ZSBzaWJsaW5ncztcbiAgICAgIH0gLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhIGNoaWxkLCB0cnkgdGhlIHNpYmxpbmdzIGluc3RlYWQuXG4gICAgICAvLyBXZSBhbHNvIHNraXAgcG9ydGFscyBiZWNhdXNlIHRoZXkgYXJlIG5vdCBwYXJ0IG9mIHRoaXMgaG9zdCB0cmVlLlxuXG5cbiAgICAgIGlmIChub2RlLmNoaWxkID09PSBudWxsIHx8IG5vZGUudGFnID09PSBIb3N0UG9ydGFsKSB7XG4gICAgICAgIGNvbnRpbnVlIHNpYmxpbmdzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZS5jaGlsZC5yZXR1cm4gPSBub2RlO1xuICAgICAgICBub2RlID0gbm9kZS5jaGlsZDtcbiAgICAgIH1cbiAgICB9IC8vIENoZWNrIGlmIHRoaXMgaG9zdCBub2RlIGlzIHN0YWJsZSBvciBhYm91dCB0byBiZSBwbGFjZWQuXG5cblxuICAgIGlmICghKG5vZGUuZmxhZ3MgJiBQbGFjZW1lbnQpKSB7XG4gICAgICAvLyBGb3VuZCBpdCFcbiAgICAgIHJldHVybiBub2RlLnN0YXRlTm9kZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0UGxhY2VtZW50KGZpbmlzaGVkV29yaykge1xuXG5cbiAgdmFyIHBhcmVudEZpYmVyID0gZ2V0SG9zdFBhcmVudEZpYmVyKGZpbmlzaGVkV29yayk7IC8vIE5vdGU6IHRoZXNlIHR3byB2YXJpYWJsZXMgKm11c3QqIGFsd2F5cyBiZSB1cGRhdGVkIHRvZ2V0aGVyLlxuXG4gIHZhciBwYXJlbnQ7XG4gIHZhciBpc0NvbnRhaW5lcjtcbiAgdmFyIHBhcmVudFN0YXRlTm9kZSA9IHBhcmVudEZpYmVyLnN0YXRlTm9kZTtcblxuICBzd2l0Y2ggKHBhcmVudEZpYmVyLnRhZykge1xuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgIHBhcmVudCA9IHBhcmVudFN0YXRlTm9kZTtcbiAgICAgIGlzQ29udGFpbmVyID0gZmFsc2U7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICBwYXJlbnQgPSBwYXJlbnRTdGF0ZU5vZGUuY29udGFpbmVySW5mbztcbiAgICAgIGlzQ29udGFpbmVyID0gdHJ1ZTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAgcGFyZW50ID0gcGFyZW50U3RhdGVOb2RlLmNvbnRhaW5lckluZm87XG4gICAgICBpc0NvbnRhaW5lciA9IHRydWU7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgRnVuZGFtZW50YWxDb21wb25lbnQ6XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUtbm8tZmFsbHRocm91Z2hcblxuICAgIGRlZmF1bHQ6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJJbnZhbGlkIGhvc3QgcGFyZW50IGZpYmVyLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICB9XG5cbiAgaWYgKHBhcmVudEZpYmVyLmZsYWdzICYgQ29udGVudFJlc2V0KSB7XG4gICAgLy8gUmVzZXQgdGhlIHRleHQgY29udGVudCBvZiB0aGUgcGFyZW50IGJlZm9yZSBkb2luZyBhbnkgaW5zZXJ0aW9uc1xuICAgIHJlc2V0VGV4dENvbnRlbnQocGFyZW50KTsgLy8gQ2xlYXIgQ29udGVudFJlc2V0IGZyb20gdGhlIGVmZmVjdCB0YWdcblxuICAgIHBhcmVudEZpYmVyLmZsYWdzICY9IH5Db250ZW50UmVzZXQ7XG4gIH1cblxuICB2YXIgYmVmb3JlID0gZ2V0SG9zdFNpYmxpbmcoZmluaXNoZWRXb3JrKTsgLy8gV2Ugb25seSBoYXZlIHRoZSB0b3AgRmliZXIgdGhhdCB3YXMgaW5zZXJ0ZWQgYnV0IHdlIG5lZWQgdG8gcmVjdXJzZSBkb3duIGl0c1xuICAvLyBjaGlsZHJlbiB0byBmaW5kIGFsbCB0aGUgdGVybWluYWwgbm9kZXMuXG5cbiAgaWYgKGlzQ29udGFpbmVyKSB7XG4gICAgaW5zZXJ0T3JBcHBlbmRQbGFjZW1lbnROb2RlSW50b0NvbnRhaW5lcihmaW5pc2hlZFdvcmssIGJlZm9yZSwgcGFyZW50KTtcbiAgfSBlbHNlIHtcbiAgICBpbnNlcnRPckFwcGVuZFBsYWNlbWVudE5vZGUoZmluaXNoZWRXb3JrLCBiZWZvcmUsIHBhcmVudCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5zZXJ0T3JBcHBlbmRQbGFjZW1lbnROb2RlSW50b0NvbnRhaW5lcihub2RlLCBiZWZvcmUsIHBhcmVudCkge1xuICB2YXIgdGFnID0gbm9kZS50YWc7XG4gIHZhciBpc0hvc3QgPSB0YWcgPT09IEhvc3RDb21wb25lbnQgfHwgdGFnID09PSBIb3N0VGV4dDtcblxuICBpZiAoaXNIb3N0IHx8IGVuYWJsZUZ1bmRhbWVudGFsQVBJICkge1xuICAgIHZhciBzdGF0ZU5vZGUgPSBpc0hvc3QgPyBub2RlLnN0YXRlTm9kZSA6IG5vZGUuc3RhdGVOb2RlLmluc3RhbmNlO1xuXG4gICAgaWYgKGJlZm9yZSkge1xuICAgICAgaW5zZXJ0SW5Db250YWluZXJCZWZvcmUocGFyZW50LCBzdGF0ZU5vZGUsIGJlZm9yZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFwcGVuZENoaWxkVG9Db250YWluZXIocGFyZW50LCBzdGF0ZU5vZGUpO1xuICAgIH1cbiAgfSBlbHNlIGlmICh0YWcgPT09IEhvc3RQb3J0YWwpIDsgZWxzZSB7XG4gICAgdmFyIGNoaWxkID0gbm9kZS5jaGlsZDtcblxuICAgIGlmIChjaGlsZCAhPT0gbnVsbCkge1xuICAgICAgaW5zZXJ0T3JBcHBlbmRQbGFjZW1lbnROb2RlSW50b0NvbnRhaW5lcihjaGlsZCwgYmVmb3JlLCBwYXJlbnQpO1xuICAgICAgdmFyIHNpYmxpbmcgPSBjaGlsZC5zaWJsaW5nO1xuXG4gICAgICB3aGlsZSAoc2libGluZyAhPT0gbnVsbCkge1xuICAgICAgICBpbnNlcnRPckFwcGVuZFBsYWNlbWVudE5vZGVJbnRvQ29udGFpbmVyKHNpYmxpbmcsIGJlZm9yZSwgcGFyZW50KTtcbiAgICAgICAgc2libGluZyA9IHNpYmxpbmcuc2libGluZztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5zZXJ0T3JBcHBlbmRQbGFjZW1lbnROb2RlKG5vZGUsIGJlZm9yZSwgcGFyZW50KSB7XG4gIHZhciB0YWcgPSBub2RlLnRhZztcbiAgdmFyIGlzSG9zdCA9IHRhZyA9PT0gSG9zdENvbXBvbmVudCB8fCB0YWcgPT09IEhvc3RUZXh0O1xuXG4gIGlmIChpc0hvc3QgfHwgZW5hYmxlRnVuZGFtZW50YWxBUEkgKSB7XG4gICAgdmFyIHN0YXRlTm9kZSA9IGlzSG9zdCA/IG5vZGUuc3RhdGVOb2RlIDogbm9kZS5zdGF0ZU5vZGUuaW5zdGFuY2U7XG5cbiAgICBpZiAoYmVmb3JlKSB7XG4gICAgICBpbnNlcnRCZWZvcmUocGFyZW50LCBzdGF0ZU5vZGUsIGJlZm9yZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFwcGVuZENoaWxkKHBhcmVudCwgc3RhdGVOb2RlKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodGFnID09PSBIb3N0UG9ydGFsKSA7IGVsc2Uge1xuICAgIHZhciBjaGlsZCA9IG5vZGUuY2hpbGQ7XG5cbiAgICBpZiAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgIGluc2VydE9yQXBwZW5kUGxhY2VtZW50Tm9kZShjaGlsZCwgYmVmb3JlLCBwYXJlbnQpO1xuICAgICAgdmFyIHNpYmxpbmcgPSBjaGlsZC5zaWJsaW5nO1xuXG4gICAgICB3aGlsZSAoc2libGluZyAhPT0gbnVsbCkge1xuICAgICAgICBpbnNlcnRPckFwcGVuZFBsYWNlbWVudE5vZGUoc2libGluZywgYmVmb3JlLCBwYXJlbnQpO1xuICAgICAgICBzaWJsaW5nID0gc2libGluZy5zaWJsaW5nO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB1bm1vdW50SG9zdENvbXBvbmVudHMoZmluaXNoZWRSb290LCBjdXJyZW50LCByZW5kZXJQcmlvcml0eUxldmVsKSB7XG4gIC8vIFdlIG9ubHkgaGF2ZSB0aGUgdG9wIEZpYmVyIHRoYXQgd2FzIGRlbGV0ZWQgYnV0IHdlIG5lZWQgdG8gcmVjdXJzZSBkb3duIGl0c1xuICAvLyBjaGlsZHJlbiB0byBmaW5kIGFsbCB0aGUgdGVybWluYWwgbm9kZXMuXG4gIHZhciBub2RlID0gY3VycmVudDsgLy8gRWFjaCBpdGVyYXRpb24sIGN1cnJlbnRQYXJlbnQgaXMgcG9wdWxhdGVkIHdpdGggbm9kZSdzIGhvc3QgcGFyZW50IGlmIG5vdFxuICAvLyBjdXJyZW50UGFyZW50SXNWYWxpZC5cblxuICB2YXIgY3VycmVudFBhcmVudElzVmFsaWQgPSBmYWxzZTsgLy8gTm90ZTogdGhlc2UgdHdvIHZhcmlhYmxlcyAqbXVzdCogYWx3YXlzIGJlIHVwZGF0ZWQgdG9nZXRoZXIuXG5cbiAgdmFyIGN1cnJlbnRQYXJlbnQ7XG4gIHZhciBjdXJyZW50UGFyZW50SXNDb250YWluZXI7XG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBpZiAoIWN1cnJlbnRQYXJlbnRJc1ZhbGlkKSB7XG4gICAgICB2YXIgcGFyZW50ID0gbm9kZS5yZXR1cm47XG5cbiAgICAgIGZpbmRQYXJlbnQ6IHdoaWxlICh0cnVlKSB7XG4gICAgICAgIGlmICghKHBhcmVudCAhPT0gbnVsbCkpIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvciggXCJFeHBlY3RlZCB0byBmaW5kIGEgaG9zdCBwYXJlbnQuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcGFyZW50U3RhdGVOb2RlID0gcGFyZW50LnN0YXRlTm9kZTtcblxuICAgICAgICBzd2l0Y2ggKHBhcmVudC50YWcpIHtcbiAgICAgICAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICAgICAgICBjdXJyZW50UGFyZW50ID0gcGFyZW50U3RhdGVOb2RlO1xuICAgICAgICAgICAgY3VycmVudFBhcmVudElzQ29udGFpbmVyID0gZmFsc2U7XG4gICAgICAgICAgICBicmVhayBmaW5kUGFyZW50O1xuXG4gICAgICAgICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgICAgICAgIGN1cnJlbnRQYXJlbnQgPSBwYXJlbnRTdGF0ZU5vZGUuY29udGFpbmVySW5mbztcbiAgICAgICAgICAgIGN1cnJlbnRQYXJlbnRJc0NvbnRhaW5lciA9IHRydWU7XG4gICAgICAgICAgICBicmVhayBmaW5kUGFyZW50O1xuXG4gICAgICAgICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAgICAgICAgY3VycmVudFBhcmVudCA9IHBhcmVudFN0YXRlTm9kZS5jb250YWluZXJJbmZvO1xuICAgICAgICAgICAgY3VycmVudFBhcmVudElzQ29udGFpbmVyID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrIGZpbmRQYXJlbnQ7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIHBhcmVudCA9IHBhcmVudC5yZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGN1cnJlbnRQYXJlbnRJc1ZhbGlkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAobm9kZS50YWcgPT09IEhvc3RDb21wb25lbnQgfHwgbm9kZS50YWcgPT09IEhvc3RUZXh0KSB7XG4gICAgICBjb21taXROZXN0ZWRVbm1vdW50cyhmaW5pc2hlZFJvb3QsIG5vZGUpOyAvLyBBZnRlciBhbGwgdGhlIGNoaWxkcmVuIGhhdmUgdW5tb3VudGVkLCBpdCBpcyBub3cgc2FmZSB0byByZW1vdmUgdGhlXG4gICAgICAvLyBub2RlIGZyb20gdGhlIHRyZWUuXG5cbiAgICAgIGlmIChjdXJyZW50UGFyZW50SXNDb250YWluZXIpIHtcbiAgICAgICAgcmVtb3ZlQ2hpbGRGcm9tQ29udGFpbmVyKGN1cnJlbnRQYXJlbnQsIG5vZGUuc3RhdGVOb2RlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlbW92ZUNoaWxkKGN1cnJlbnRQYXJlbnQsIG5vZGUuc3RhdGVOb2RlKTtcbiAgICAgIH0gLy8gRG9uJ3QgdmlzaXQgY2hpbGRyZW4gYmVjYXVzZSB3ZSBhbHJlYWR5IHZpc2l0ZWQgdGhlbS5cblxuICAgIH0gZWxzZSBpZiAobm9kZS50YWcgPT09IEhvc3RQb3J0YWwpIHtcbiAgICAgIGlmIChub2RlLmNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgIC8vIFdoZW4gd2UgZ28gaW50byBhIHBvcnRhbCwgaXQgYmVjb21lcyB0aGUgcGFyZW50IHRvIHJlbW92ZSBmcm9tLlxuICAgICAgICAvLyBXZSB3aWxsIHJlYXNzaWduIGl0IGJhY2sgd2hlbiB3ZSBwb3AgdGhlIHBvcnRhbCBvbiB0aGUgd2F5IHVwLlxuICAgICAgICBjdXJyZW50UGFyZW50ID0gbm9kZS5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztcbiAgICAgICAgY3VycmVudFBhcmVudElzQ29udGFpbmVyID0gdHJ1ZTsgLy8gVmlzaXQgY2hpbGRyZW4gYmVjYXVzZSBwb3J0YWxzIG1pZ2h0IGNvbnRhaW4gaG9zdCBjb21wb25lbnRzLlxuXG4gICAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgICAgbm9kZSA9IG5vZGUuY2hpbGQ7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb21taXRVbm1vdW50KGZpbmlzaGVkUm9vdCwgbm9kZSk7IC8vIFZpc2l0IGNoaWxkcmVuIGJlY2F1c2Ugd2UgbWF5IGZpbmQgbW9yZSBob3N0IGNvbXBvbmVudHMgYmVsb3cuXG5cbiAgICAgIGlmIChub2RlLmNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgICAgbm9kZSA9IG5vZGUuY2hpbGQ7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChub2RlID09PSBjdXJyZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgd2hpbGUgKG5vZGUuc2libGluZyA9PT0gbnVsbCkge1xuICAgICAgaWYgKG5vZGUucmV0dXJuID09PSBudWxsIHx8IG5vZGUucmV0dXJuID09PSBjdXJyZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuXG4gICAgICBpZiAobm9kZS50YWcgPT09IEhvc3RQb3J0YWwpIHtcbiAgICAgICAgLy8gV2hlbiB3ZSBnbyBvdXQgb2YgdGhlIHBvcnRhbCwgd2UgbmVlZCB0byByZXN0b3JlIHRoZSBwYXJlbnQuXG4gICAgICAgIC8vIFNpbmNlIHdlIGRvbid0IGtlZXAgYSBzdGFjayBvZiB0aGVtLCB3ZSB3aWxsIHNlYXJjaCBmb3IgaXQuXG4gICAgICAgIGN1cnJlbnRQYXJlbnRJc1ZhbGlkID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0RGVsZXRpb24oZmluaXNoZWRSb290LCBjdXJyZW50LCByZW5kZXJQcmlvcml0eUxldmVsKSB7XG4gIHtcbiAgICAvLyBSZWN1cnNpdmVseSBkZWxldGUgYWxsIGhvc3Qgbm9kZXMgZnJvbSB0aGUgcGFyZW50LlxuICAgIC8vIERldGFjaCByZWZzIGFuZCBjYWxsIGNvbXBvbmVudFdpbGxVbm1vdW50KCkgb24gdGhlIHdob2xlIHN1YnRyZWUuXG4gICAgdW5tb3VudEhvc3RDb21wb25lbnRzKGZpbmlzaGVkUm9vdCwgY3VycmVudCk7XG4gIH1cblxuICB2YXIgYWx0ZXJuYXRlID0gY3VycmVudC5hbHRlcm5hdGU7XG4gIGRldGFjaEZpYmVyTXV0YXRpb24oY3VycmVudCk7XG5cbiAgaWYgKGFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgIGRldGFjaEZpYmVyTXV0YXRpb24oYWx0ZXJuYXRlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRXb3JrKGN1cnJlbnQsIGZpbmlzaGVkV29yaykge1xuXG4gIHN3aXRjaCAoZmluaXNoZWRXb3JrLnRhZykge1xuICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgIGNhc2UgTWVtb0NvbXBvbmVudDpcbiAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgY2FzZSBCbG9jazpcbiAgICAgIHtcbiAgICAgICAgLy8gTGF5b3V0IGVmZmVjdHMgYXJlIGRlc3Ryb3llZCBkdXJpbmcgdGhlIG11dGF0aW9uIHBoYXNlIHNvIHRoYXQgYWxsXG4gICAgICAgIC8vIGRlc3Ryb3kgZnVuY3Rpb25zIGZvciBhbGwgZmliZXJzIGFyZSBjYWxsZWQgYmVmb3JlIGFueSBjcmVhdGUgZnVuY3Rpb25zLlxuICAgICAgICAvLyBUaGlzIHByZXZlbnRzIHNpYmxpbmcgY29tcG9uZW50IGVmZmVjdHMgZnJvbSBpbnRlcmZlcmluZyB3aXRoIGVhY2ggb3RoZXIsXG4gICAgICAgIC8vIGUuZy4gYSBkZXN0cm95IGZ1bmN0aW9uIGluIG9uZSBjb21wb25lbnQgc2hvdWxkIG5ldmVyIG92ZXJyaWRlIGEgcmVmIHNldFxuICAgICAgICAvLyBieSBhIGNyZWF0ZSBmdW5jdGlvbiBpbiBhbm90aGVyIGNvbXBvbmVudCBkdXJpbmcgdGhlIHNhbWUgY29tbWl0LlxuICAgICAgICB7XG4gICAgICAgICAgY29tbWl0SG9va0VmZmVjdExpc3RVbm1vdW50KExheW91dCB8IEhhc0VmZmVjdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcblxuICAgICAgICBpZiAoaW5zdGFuY2UgIT0gbnVsbCkge1xuICAgICAgICAgIC8vIENvbW1pdCB0aGUgd29yayBwcmVwYXJlZCBlYXJsaWVyLlxuICAgICAgICAgIHZhciBuZXdQcm9wcyA9IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzOyAvLyBGb3IgaHlkcmF0aW9uIHdlIHJldXNlIHRoZSB1cGRhdGUgcGF0aCBidXQgd2UgdHJlYXQgdGhlIG9sZFByb3BzXG4gICAgICAgICAgLy8gYXMgdGhlIG5ld1Byb3BzLiBUaGUgdXBkYXRlUGF5bG9hZCB3aWxsIGNvbnRhaW4gdGhlIHJlYWwgY2hhbmdlIGluXG4gICAgICAgICAgLy8gdGhpcyBjYXNlLlxuXG4gICAgICAgICAgdmFyIG9sZFByb3BzID0gY3VycmVudCAhPT0gbnVsbCA/IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyA6IG5ld1Byb3BzO1xuICAgICAgICAgIHZhciB0eXBlID0gZmluaXNoZWRXb3JrLnR5cGU7IC8vIFRPRE86IFR5cGUgdGhlIHVwZGF0ZVF1ZXVlIHRvIGJlIHNwZWNpZmljIHRvIGhvc3QgY29tcG9uZW50cy5cblxuICAgICAgICAgIHZhciB1cGRhdGVQYXlsb2FkID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlO1xuICAgICAgICAgIGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZSA9IG51bGw7XG5cbiAgICAgICAgICBpZiAodXBkYXRlUGF5bG9hZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29tbWl0VXBkYXRlKGluc3RhbmNlLCB1cGRhdGVQYXlsb2FkLCB0eXBlLCBvbGRQcm9wcywgbmV3UHJvcHMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFRleHQ6XG4gICAgICB7XG4gICAgICAgIGlmICghKGZpbmlzaGVkV29yay5zdGF0ZU5vZGUgIT09IG51bGwpKSB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiVGhpcyBzaG91bGQgaGF2ZSBhIHRleHQgbm9kZSBpbml0aWFsaXplZC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB0ZXh0SW5zdGFuY2UgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuICAgICAgICB2YXIgbmV3VGV4dCA9IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzOyAvLyBGb3IgaHlkcmF0aW9uIHdlIHJldXNlIHRoZSB1cGRhdGUgcGF0aCBidXQgd2UgdHJlYXQgdGhlIG9sZFByb3BzXG4gICAgICAgIC8vIGFzIHRoZSBuZXdQcm9wcy4gVGhlIHVwZGF0ZVBheWxvYWQgd2lsbCBjb250YWluIHRoZSByZWFsIGNoYW5nZSBpblxuICAgICAgICAvLyB0aGlzIGNhc2UuXG5cbiAgICAgICAgdmFyIG9sZFRleHQgPSBjdXJyZW50ICE9PSBudWxsID8gY3VycmVudC5tZW1vaXplZFByb3BzIDogbmV3VGV4dDtcbiAgICAgICAgY29tbWl0VGV4dFVwZGF0ZSh0ZXh0SW5zdGFuY2UsIG9sZFRleHQsIG5ld1RleHQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RSb290OlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgdmFyIF9yb290ID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcblxuICAgICAgICAgIGlmIChfcm9vdC5oeWRyYXRlKSB7XG4gICAgICAgICAgICAvLyBXZSd2ZSBqdXN0IGh5ZHJhdGVkLiBObyBuZWVkIHRvIGh5ZHJhdGUgYWdhaW4uXG4gICAgICAgICAgICBfcm9vdC5oeWRyYXRlID0gZmFsc2U7XG4gICAgICAgICAgICBjb21taXRIeWRyYXRlZENvbnRhaW5lcihfcm9vdC5jb250YWluZXJJbmZvKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIFByb2ZpbGVyOlxuICAgICAge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBjb21taXRTdXNwZW5zZUNvbXBvbmVudChmaW5pc2hlZFdvcmspO1xuICAgICAgICBhdHRhY2hTdXNwZW5zZVJldHJ5TGlzdGVuZXJzKGZpbmlzaGVkV29yayk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgU3VzcGVuc2VMaXN0Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBhdHRhY2hTdXNwZW5zZVJldHJ5TGlzdGVuZXJzKGZpbmlzaGVkV29yayk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgSW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEZ1bmRhbWVudGFsQ29tcG9uZW50OlxuICAgICAge1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBTY29wZUNvbXBvbmVudDpcbiAgICAgIHtcblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgT2Zmc2NyZWVuQ29tcG9uZW50OlxuICAgIGNhc2UgTGVnYWN5SGlkZGVuQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgbmV3U3RhdGUgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgdmFyIGlzSGlkZGVuID0gbmV3U3RhdGUgIT09IG51bGw7XG4gICAgICAgIGhpZGVPclVuaGlkZUFsbENoaWxkcmVuKGZpbmlzaGVkV29yaywgaXNIaWRkZW4pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gIH1cblxuICB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiVGhpcyB1bml0IG9mIHdvcmsgdGFnIHNob3VsZCBub3QgaGF2ZSBzaWRlLWVmZmVjdHMuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0U3VzcGVuc2VDb21wb25lbnQoZmluaXNoZWRXb3JrKSB7XG4gIHZhciBuZXdTdGF0ZSA9IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlO1xuXG4gIGlmIChuZXdTdGF0ZSAhPT0gbnVsbCkge1xuICAgIG1hcmtDb21taXRUaW1lT2ZGYWxsYmFjaygpO1xuXG4gICAge1xuICAgICAgLy8gSGlkZSB0aGUgT2Zmc2NyZWVuIGNvbXBvbmVudCB0aGF0IGNvbnRhaW5zIHRoZSBwcmltYXJ5IGNoaWxkcmVuLiBUT0RPOlxuICAgICAgLy8gSWRlYWxseSwgdGhpcyBlZmZlY3Qgd291bGQgaGF2ZSBiZWVuIHNjaGVkdWxlZCBvbiB0aGUgT2Zmc2NyZWVuIGZpYmVyXG4gICAgICAvLyBpdHNlbGYuIFRoYXQncyBob3cgdW5oaWRpbmcgd29ya3M6IHRoZSBPZmZzY3JlZW4gY29tcG9uZW50IHNjaGVkdWxlcyBhblxuICAgICAgLy8gZWZmZWN0IG9uIGl0c2VsZi4gSG93ZXZlciwgaW4gdGhpcyBjYXNlLCB0aGUgY29tcG9uZW50IGRpZG4ndCBjb21wbGV0ZSxcbiAgICAgIC8vIHNvIHRoZSBmaWJlciB3YXMgbmV2ZXIgYWRkZWQgdG8gdGhlIGVmZmVjdCBsaXN0IGluIHRoZSBub3JtYWwgcGF0aC4gV2VcbiAgICAgIC8vIGNvdWxkIGhhdmUgYXBwZW5kZWQgaXQgdG8gdGhlIGVmZmVjdCBsaXN0IGluIHRoZSBTdXNwZW5zZSBjb21wb25lbnQnc1xuICAgICAgLy8gc2Vjb25kIHBhc3MsIGJ1dCBkb2luZyBpdCB0aGlzIHdheSBpcyBsZXNzIGNvbXBsaWNhdGVkLiBUaGlzIHdvdWxkIGJlXG4gICAgICAvLyBzaW1wbGVyIGlmIHdlIGdvdCByaWQgb2YgdGhlIGVmZmVjdCBsaXN0IGFuZCB0cmF2ZXJzZWQgdGhlIHRyZWUsIGxpa2VcbiAgICAgIC8vIHdlJ3JlIHBsYW5uaW5nIHRvIGRvLlxuICAgICAgdmFyIHByaW1hcnlDaGlsZFBhcmVudCA9IGZpbmlzaGVkV29yay5jaGlsZDtcbiAgICAgIGhpZGVPclVuaGlkZUFsbENoaWxkcmVuKHByaW1hcnlDaGlsZFBhcmVudCwgdHJ1ZSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdFN1c3BlbnNlSHlkcmF0aW9uQ2FsbGJhY2tzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKSB7XG5cbiAgdmFyIG5ld1N0YXRlID0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGU7XG5cbiAgaWYgKG5ld1N0YXRlID09PSBudWxsKSB7XG4gICAgdmFyIGN1cnJlbnQgPSBmaW5pc2hlZFdvcmsuYWx0ZXJuYXRlO1xuXG4gICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgIHZhciBwcmV2U3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG5cbiAgICAgIGlmIChwcmV2U3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIHN1c3BlbnNlSW5zdGFuY2UgPSBwcmV2U3RhdGUuZGVoeWRyYXRlZDtcblxuICAgICAgICBpZiAoc3VzcGVuc2VJbnN0YW5jZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGNvbW1pdEh5ZHJhdGVkU3VzcGVuc2VJbnN0YW5jZShzdXNwZW5zZUluc3RhbmNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhdHRhY2hTdXNwZW5zZVJldHJ5TGlzdGVuZXJzKGZpbmlzaGVkV29yaykge1xuICAvLyBJZiB0aGlzIGJvdW5kYXJ5IGp1c3QgdGltZWQgb3V0LCB0aGVuIGl0IHdpbGwgaGF2ZSBhIHNldCBvZiB3YWtlYWJsZXMuXG4gIC8vIEZvciBlYWNoIHdha2VhYmxlLCBhdHRhY2ggYSBsaXN0ZW5lciBzbyB0aGF0IHdoZW4gaXQgcmVzb2x2ZXMsIFJlYWN0XG4gIC8vIGF0dGVtcHRzIHRvIHJlLXJlbmRlciB0aGUgYm91bmRhcnkgaW4gdGhlIHByaW1hcnkgKHByZS10aW1lb3V0KSBzdGF0ZS5cbiAgdmFyIHdha2VhYmxlcyA9IGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZTtcblxuICBpZiAod2FrZWFibGVzICE9PSBudWxsKSB7XG4gICAgZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlID0gbnVsbDtcbiAgICB2YXIgcmV0cnlDYWNoZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG5cbiAgICBpZiAocmV0cnlDYWNoZSA9PT0gbnVsbCkge1xuICAgICAgcmV0cnlDYWNoZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGUgPSBuZXcgUG9zc2libHlXZWFrU2V0KCk7XG4gICAgfVxuXG4gICAgd2FrZWFibGVzLmZvckVhY2goZnVuY3Rpb24gKHdha2VhYmxlKSB7XG4gICAgICAvLyBNZW1vaXplIHVzaW5nIHRoZSBib3VuZGFyeSBmaWJlciB0byBwcmV2ZW50IHJlZHVuZGFudCBsaXN0ZW5lcnMuXG4gICAgICB2YXIgcmV0cnkgPSByZXNvbHZlUmV0cnlXYWtlYWJsZS5iaW5kKG51bGwsIGZpbmlzaGVkV29yaywgd2FrZWFibGUpO1xuXG4gICAgICBpZiAoIXJldHJ5Q2FjaGUuaGFzKHdha2VhYmxlKSkge1xuICAgICAgICB7XG4gICAgICAgICAgaWYgKHdha2VhYmxlLl9fcmVhY3REb05vdFRyYWNlSW50ZXJhY3Rpb25zICE9PSB0cnVlKSB7XG4gICAgICAgICAgICByZXRyeSA9IHRyYWNpbmcudW5zdGFibGVfd3JhcChyZXRyeSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0cnlDYWNoZS5hZGQod2FrZWFibGUpO1xuICAgICAgICB3YWtlYWJsZS50aGVuKHJldHJ5LCByZXRyeSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn0gLy8gVGhpcyBmdW5jdGlvbiBkZXRlY3RzIHdoZW4gYSBTdXNwZW5zZSBib3VuZGFyeSBnb2VzIGZyb20gdmlzaWJsZSB0byBoaWRkZW4uXG4vLyBJdCByZXR1cm5zIGZhbHNlIGlmIHRoZSBib3VuZGFyeSBpcyBhbHJlYWR5IGhpZGRlbi5cbi8vIFRPRE86IFVzZSBhbiBlZmZlY3QgdGFnLlxuXG5cbmZ1bmN0aW9uIGlzU3VzcGVuc2VCb3VuZGFyeUJlaW5nSGlkZGVuKGN1cnJlbnQsIGZpbmlzaGVkV29yaykge1xuICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgIHZhciBvbGRTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcblxuICAgIGlmIChvbGRTdGF0ZSA9PT0gbnVsbCB8fCBvbGRTdGF0ZS5kZWh5ZHJhdGVkICE9PSBudWxsKSB7XG4gICAgICB2YXIgbmV3U3RhdGUgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIHJldHVybiBuZXdTdGF0ZSAhPT0gbnVsbCAmJiBuZXdTdGF0ZS5kZWh5ZHJhdGVkID09PSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gY29tbWl0UmVzZXRUZXh0Q29udGVudChjdXJyZW50KSB7XG5cbiAgcmVzZXRUZXh0Q29udGVudChjdXJyZW50LnN0YXRlTm9kZSk7XG59XG5cbnZhciBDT01QT05FTlRfVFlQRSA9IDA7XG52YXIgSEFTX1BTRVVET19DTEFTU19UWVBFID0gMTtcbnZhciBST0xFX1RZUEUgPSAyO1xudmFyIFRFU1RfTkFNRV9UWVBFID0gMztcbnZhciBURVhUX1RZUEUgPSA0O1xuXG5pZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuZm9yKSB7XG4gIHZhciBzeW1ib2xGb3IkMSA9IFN5bWJvbC5mb3I7XG4gIENPTVBPTkVOVF9UWVBFID0gc3ltYm9sRm9yJDEoJ3NlbGVjdG9yLmNvbXBvbmVudCcpO1xuICBIQVNfUFNFVURPX0NMQVNTX1RZUEUgPSBzeW1ib2xGb3IkMSgnc2VsZWN0b3IuaGFzX3BzZXVkb19jbGFzcycpO1xuICBST0xFX1RZUEUgPSBzeW1ib2xGb3IkMSgnc2VsZWN0b3Iucm9sZScpO1xuICBURVNUX05BTUVfVFlQRSA9IHN5bWJvbEZvciQxKCdzZWxlY3Rvci50ZXN0X2lkJyk7XG4gIFRFWFRfVFlQRSA9IHN5bWJvbEZvciQxKCdzZWxlY3Rvci50ZXh0Jyk7XG59XG52YXIgY29tbWl0SG9va3MgPSBbXTtcbmZ1bmN0aW9uIG9uQ29tbWl0Um9vdCQxKCkge1xuICB7XG4gICAgY29tbWl0SG9va3MuZm9yRWFjaChmdW5jdGlvbiAoY29tbWl0SG9vaykge1xuICAgICAgcmV0dXJuIGNvbW1pdEhvb2soKTtcbiAgICB9KTtcbiAgfVxufVxuXG52YXIgY2VpbCA9IE1hdGguY2VpbDtcbnZhciBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDIgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnREaXNwYXRjaGVyLFxuICAgIFJlYWN0Q3VycmVudE93bmVyJDIgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnRPd25lcixcbiAgICBJc1NvbWVSZW5kZXJlckFjdGluZyA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLklzU29tZVJlbmRlcmVyQWN0aW5nO1xudmFyIE5vQ29udGV4dCA9XG4vKiAgICAgICAgICAgICAqL1xuMDtcbnZhciBCYXRjaGVkQ29udGV4dCA9XG4vKiAgICAgICAgICAgICAgICovXG4xO1xudmFyIEV2ZW50Q29udGV4dCA9XG4vKiAgICAgICAgICAgICAgICAgKi9cbjI7XG52YXIgRGlzY3JldGVFdmVudENvbnRleHQgPVxuLyogICAgICAgICAqL1xuNDtcbnZhciBMZWdhY3lVbmJhdGNoZWRDb250ZXh0ID1cbi8qICAgICAgICovXG44O1xudmFyIFJlbmRlckNvbnRleHQgPVxuLyogICAgICAgICAgICAgICAgKi9cbjE2O1xudmFyIENvbW1pdENvbnRleHQgPVxuLyogICAgICAgICAgICAgICAgKi9cbjMyO1xudmFyIFJldHJ5QWZ0ZXJFcnJvciA9XG4vKiAgICAgICAqL1xuNjQ7XG52YXIgUm9vdEluY29tcGxldGUgPSAwO1xudmFyIFJvb3RGYXRhbEVycm9yZWQgPSAxO1xudmFyIFJvb3RFcnJvcmVkID0gMjtcbnZhciBSb290U3VzcGVuZGVkID0gMztcbnZhciBSb290U3VzcGVuZGVkV2l0aERlbGF5ID0gNDtcbnZhciBSb290Q29tcGxldGVkID0gNTsgLy8gRGVzY3JpYmVzIHdoZXJlIHdlIGFyZSBpbiB0aGUgUmVhY3QgZXhlY3V0aW9uIHN0YWNrXG5cbnZhciBleGVjdXRpb25Db250ZXh0ID0gTm9Db250ZXh0OyAvLyBUaGUgcm9vdCB3ZSdyZSB3b3JraW5nIG9uXG5cbnZhciB3b3JrSW5Qcm9ncmVzc1Jvb3QgPSBudWxsOyAvLyBUaGUgZmliZXIgd2UncmUgd29ya2luZyBvblxuXG52YXIgd29ya0luUHJvZ3Jlc3MgPSBudWxsOyAvLyBUaGUgbGFuZXMgd2UncmUgcmVuZGVyaW5nXG5cbnZhciB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyA9IE5vTGFuZXM7IC8vIFN0YWNrIHRoYXQgYWxsb3dzIGNvbXBvbmVudHMgdG8gY2hhbmdlIHRoZSByZW5kZXIgbGFuZXMgZm9yIGl0cyBzdWJ0cmVlXG4vLyBUaGlzIGlzIGEgc3VwZXJzZXQgb2YgdGhlIGxhbmVzIHdlIHN0YXJ0ZWQgd29ya2luZyBvbiBhdCB0aGUgcm9vdC4gVGhlIG9ubHlcbi8vIGNhc2Ugd2hlcmUgaXQncyBkaWZmZXJlbnQgZnJvbSBgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXNgIGlzIHdoZW4gd2Vcbi8vIGVudGVyIGEgc3VidHJlZSB0aGF0IGlzIGhpZGRlbiBhbmQgbmVlZHMgdG8gYmUgdW5oaWRkZW46IFN1c3BlbnNlIGFuZFxuLy8gT2Zmc2NyZWVuIGNvbXBvbmVudC5cbi8vXG4vLyBNb3N0IHRoaW5ncyBpbiB0aGUgd29yayBsb29wIHNob3VsZCBkZWFsIHdpdGggd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMuXG4vLyBNb3N0IHRoaW5ncyBpbiBiZWdpbi9jb21wbGV0ZSBwaGFzZXMgc2hvdWxkIGRlYWwgd2l0aCBzdWJ0cmVlUmVuZGVyTGFuZXMuXG5cbnZhciBzdWJ0cmVlUmVuZGVyTGFuZXMgPSBOb0xhbmVzO1xudmFyIHN1YnRyZWVSZW5kZXJMYW5lc0N1cnNvciA9IGNyZWF0ZUN1cnNvcihOb0xhbmVzKTsgLy8gV2hldGhlciB0byByb290IGNvbXBsZXRlZCwgZXJyb3JlZCwgc3VzcGVuZGVkLCBldGMuXG5cbnZhciB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdEluY29tcGxldGU7IC8vIEEgZmF0YWwgZXJyb3IsIGlmIG9uZSBpcyB0aHJvd25cblxudmFyIHdvcmtJblByb2dyZXNzUm9vdEZhdGFsRXJyb3IgPSBudWxsOyAvLyBcIkluY2x1ZGVkXCIgbGFuZXMgcmVmZXIgdG8gbGFuZXMgdGhhdCB3ZXJlIHdvcmtlZCBvbiBkdXJpbmcgdGhpcyByZW5kZXIuIEl0J3Ncbi8vIHNsaWdodGx5IGRpZmZlcmVudCB0aGFuIGByZW5kZXJMYW5lc2AgYmVjYXVzZSBgcmVuZGVyTGFuZXNgIGNhbiBjaGFuZ2UgYXMgeW91XG4vLyBlbnRlciBhbmQgZXhpdCBhbiBPZmZzY3JlZW4gdHJlZS4gVGhpcyB2YWx1ZSBpcyB0aGUgY29tYmluYXRpb24gb2YgYWxsIHJlbmRlclxuLy8gbGFuZXMgZm9yIHRoZSBlbnRpcmUgcmVuZGVyIHBoYXNlLlxuXG52YXIgd29ya0luUHJvZ3Jlc3NSb290SW5jbHVkZWRMYW5lcyA9IE5vTGFuZXM7IC8vIFRoZSB3b3JrIGxlZnQgb3ZlciBieSBjb21wb25lbnRzIHRoYXQgd2VyZSB2aXNpdGVkIGR1cmluZyB0aGlzIHJlbmRlci4gT25seVxuLy8gaW5jbHVkZXMgdW5wcm9jZXNzZWQgdXBkYXRlcywgbm90IHdvcmsgaW4gYmFpbGVkIG91dCBjaGlsZHJlbi5cblxudmFyIHdvcmtJblByb2dyZXNzUm9vdFNraXBwZWRMYW5lcyA9IE5vTGFuZXM7IC8vIExhbmVzIHRoYXQgd2VyZSB1cGRhdGVkIChpbiBhbiBpbnRlcmxlYXZlZCBldmVudCkgZHVyaW5nIHRoaXMgcmVuZGVyLlxuXG52YXIgd29ya0luUHJvZ3Jlc3NSb290VXBkYXRlZExhbmVzID0gTm9MYW5lczsgLy8gTGFuZXMgdGhhdCB3ZXJlIHBpbmdlZCAoaW4gYW4gaW50ZXJsZWF2ZWQgZXZlbnQpIGR1cmluZyB0aGlzIHJlbmRlci5cblxudmFyIHdvcmtJblByb2dyZXNzUm9vdFBpbmdlZExhbmVzID0gTm9MYW5lcztcbnZhciBtb3N0UmVjZW50bHlVcGRhdGVkUm9vdCA9IG51bGw7IC8vIFRoZSBtb3N0IHJlY2VudCB0aW1lIHdlIGNvbW1pdHRlZCBhIGZhbGxiYWNrLiBUaGlzIGxldHMgdXMgZW5zdXJlIGEgdHJhaW5cbi8vIG1vZGVsIHdoZXJlIHdlIGRvbid0IGNvbW1pdCBuZXcgbG9hZGluZyBzdGF0ZXMgaW4gdG9vIHF1aWNrIHN1Y2Nlc3Npb24uXG5cbnZhciBnbG9iYWxNb3N0UmVjZW50RmFsbGJhY2tUaW1lID0gMDtcbnZhciBGQUxMQkFDS19USFJPVFRMRV9NUyA9IDUwMDsgLy8gVGhlIGFic29sdXRlIHRpbWUgZm9yIHdoZW4gd2Ugc2hvdWxkIHN0YXJ0IGdpdmluZyB1cCBvbiByZW5kZXJpbmdcbi8vIG1vcmUgYW5kIHByZWZlciBDUFUgc3VzcGVuc2UgaGV1cmlzdGljcyBpbnN0ZWFkLlxuXG52YXIgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyVGFyZ2V0VGltZSA9IEluZmluaXR5OyAvLyBIb3cgbG9uZyBhIHJlbmRlciBpcyBzdXBwb3NlZCB0byB0YWtlIGJlZm9yZSB3ZSBzdGFydCBmb2xsb3dpbmcgQ1BVXG4vLyBzdXNwZW5zZSBoZXVyaXN0aWNzIGFuZCBvcHQgb3V0IG9mIHJlbmRlcmluZyBtb3JlIGNvbnRlbnQuXG5cbnZhciBSRU5ERVJfVElNRU9VVF9NUyA9IDUwMDtcblxuZnVuY3Rpb24gcmVzZXRSZW5kZXJUaW1lcigpIHtcbiAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyVGFyZ2V0VGltZSA9IG5vdygpICsgUkVOREVSX1RJTUVPVVRfTVM7XG59XG5cbmZ1bmN0aW9uIGdldFJlbmRlclRhcmdldFRpbWUoKSB7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJUYXJnZXRUaW1lO1xufVxudmFyIG5leHRFZmZlY3QgPSBudWxsO1xudmFyIGhhc1VuY2F1Z2h0RXJyb3IgPSBmYWxzZTtcbnZhciBmaXJzdFVuY2F1Z2h0RXJyb3IgPSBudWxsO1xudmFyIGxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkID0gbnVsbDtcbnZhciByb290RG9lc0hhdmVQYXNzaXZlRWZmZWN0cyA9IGZhbHNlO1xudmFyIHJvb3RXaXRoUGVuZGluZ1Bhc3NpdmVFZmZlY3RzID0gbnVsbDtcbnZhciBwZW5kaW5nUGFzc2l2ZUVmZmVjdHNSZW5kZXJQcmlvcml0eSA9IE5vUHJpb3JpdHkkMTtcbnZhciBwZW5kaW5nUGFzc2l2ZUVmZmVjdHNMYW5lcyA9IE5vTGFuZXM7XG52YXIgcGVuZGluZ1Bhc3NpdmVIb29rRWZmZWN0c01vdW50ID0gW107XG52YXIgcGVuZGluZ1Bhc3NpdmVIb29rRWZmZWN0c1VubW91bnQgPSBbXTtcbnZhciByb290c1dpdGhQZW5kaW5nRGlzY3JldGVVcGRhdGVzID0gbnVsbDsgLy8gVXNlIHRoZXNlIHRvIHByZXZlbnQgYW4gaW5maW5pdGUgbG9vcCBvZiBuZXN0ZWQgdXBkYXRlc1xuXG52YXIgTkVTVEVEX1VQREFURV9MSU1JVCA9IDUwO1xudmFyIG5lc3RlZFVwZGF0ZUNvdW50ID0gMDtcbnZhciByb290V2l0aE5lc3RlZFVwZGF0ZXMgPSBudWxsO1xudmFyIE5FU1RFRF9QQVNTSVZFX1VQREFURV9MSU1JVCA9IDUwO1xudmFyIG5lc3RlZFBhc3NpdmVVcGRhdGVDb3VudCA9IDA7IC8vIE1hcmtzIHRoZSBuZWVkIHRvIHJlc2NoZWR1bGUgcGVuZGluZyBpbnRlcmFjdGlvbnMgYXQgdGhlc2UgbGFuZXNcbi8vIGR1cmluZyB0aGUgY29tbWl0IHBoYXNlLiBUaGlzIGVuYWJsZXMgdGhlbSB0byBiZSB0cmFjZWQgYWNyb3NzIGNvbXBvbmVudHNcbi8vIHRoYXQgc3Bhd24gbmV3IHdvcmsgZHVyaW5nIHJlbmRlci4gRS5nLiBoaWRkZW4gYm91bmRhcmllcywgc3VzcGVuZGVkIFNTUlxuLy8gaHlkcmF0aW9uIG9yIFN1c3BlbnNlTGlzdC5cbi8vIFRPRE86IENhbiB1c2UgYSBiaXRtYXNrIGluc3RlYWQgb2YgYW4gYXJyYXlcblxudmFyIHNwYXduZWRXb3JrRHVyaW5nUmVuZGVyID0gbnVsbDsgLy8gSWYgdHdvIHVwZGF0ZXMgYXJlIHNjaGVkdWxlZCB3aXRoaW4gdGhlIHNhbWUgZXZlbnQsIHdlIHNob3VsZCB0cmVhdCB0aGVpclxuLy8gZXZlbnQgdGltZXMgYXMgc2ltdWx0YW5lb3VzLCBldmVuIGlmIHRoZSBhY3R1YWwgY2xvY2sgdGltZSBoYXMgYWR2YW5jZWRcbi8vIGJldHdlZW4gdGhlIGZpcnN0IGFuZCBzZWNvbmQgY2FsbC5cblxudmFyIGN1cnJlbnRFdmVudFRpbWUgPSBOb1RpbWVzdGFtcDtcbnZhciBjdXJyZW50RXZlbnRXaXBMYW5lcyA9IE5vTGFuZXM7XG52YXIgY3VycmVudEV2ZW50UGVuZGluZ0xhbmVzID0gTm9MYW5lczsgLy8gRGV2IG9ubHkgZmxhZyB0aGF0IHRyYWNrcyBpZiBwYXNzaXZlIGVmZmVjdHMgYXJlIGN1cnJlbnRseSBiZWluZyBmbHVzaGVkLlxuLy8gV2Ugd2FybiBhYm91dCBzdGF0ZSB1cGRhdGVzIGZvciB1bm1vdW50ZWQgY29tcG9uZW50cyBkaWZmZXJlbnRseSBpbiB0aGlzIGNhc2UuXG5cbnZhciBpc0ZsdXNoaW5nUGFzc2l2ZUVmZmVjdHMgPSBmYWxzZTtcbnZhciBmb2N1c2VkSW5zdGFuY2VIYW5kbGUgPSBudWxsO1xudmFyIHNob3VsZEZpcmVBZnRlckFjdGl2ZUluc3RhbmNlQmx1ciA9IGZhbHNlO1xuZnVuY3Rpb24gZ2V0V29ya0luUHJvZ3Jlc3NSb290KCkge1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3NSb290O1xufVxuZnVuY3Rpb24gcmVxdWVzdEV2ZW50VGltZSgpIHtcbiAgaWYgKChleGVjdXRpb25Db250ZXh0ICYgKFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgIT09IE5vQ29udGV4dCkge1xuICAgIC8vIFdlJ3JlIGluc2lkZSBSZWFjdCwgc28gaXQncyBmaW5lIHRvIHJlYWQgdGhlIGFjdHVhbCB0aW1lLlxuICAgIHJldHVybiBub3coKTtcbiAgfSAvLyBXZSdyZSBub3QgaW5zaWRlIFJlYWN0LCBzbyB3ZSBtYXkgYmUgaW4gdGhlIG1pZGRsZSBvZiBhIGJyb3dzZXIgZXZlbnQuXG5cblxuICBpZiAoY3VycmVudEV2ZW50VGltZSAhPT0gTm9UaW1lc3RhbXApIHtcbiAgICAvLyBVc2UgdGhlIHNhbWUgc3RhcnQgdGltZSBmb3IgYWxsIHVwZGF0ZXMgdW50aWwgd2UgZW50ZXIgUmVhY3QgYWdhaW4uXG4gICAgcmV0dXJuIGN1cnJlbnRFdmVudFRpbWU7XG4gIH0gLy8gVGhpcyBpcyB0aGUgZmlyc3QgdXBkYXRlIHNpbmNlIFJlYWN0IHlpZWxkZWQuIENvbXB1dGUgYSBuZXcgc3RhcnQgdGltZS5cblxuXG4gIGN1cnJlbnRFdmVudFRpbWUgPSBub3coKTtcbiAgcmV0dXJuIGN1cnJlbnRFdmVudFRpbWU7XG59XG5mdW5jdGlvbiByZXF1ZXN0VXBkYXRlTGFuZShmaWJlcikge1xuICAvLyBTcGVjaWFsIGNhc2VzXG4gIHZhciBtb2RlID0gZmliZXIubW9kZTtcblxuICBpZiAoKG1vZGUgJiBCbG9ja2luZ01vZGUpID09PSBOb01vZGUpIHtcbiAgICByZXR1cm4gU3luY0xhbmU7XG4gIH0gZWxzZSBpZiAoKG1vZGUgJiBDb25jdXJyZW50TW9kZSkgPT09IE5vTW9kZSkge1xuICAgIHJldHVybiBnZXRDdXJyZW50UHJpb3JpdHlMZXZlbCgpID09PSBJbW1lZGlhdGVQcmlvcml0eSQxID8gU3luY0xhbmUgOiBTeW5jQmF0Y2hlZExhbmU7XG4gIH0gLy8gVGhlIGFsZ29yaXRobSBmb3IgYXNzaWduaW5nIGFuIHVwZGF0ZSB0byBhIGxhbmUgc2hvdWxkIGJlIHN0YWJsZSBmb3IgYWxsXG4gIC8vIHVwZGF0ZXMgYXQgdGhlIHNhbWUgcHJpb3JpdHkgd2l0aGluIHRoZSBzYW1lIGV2ZW50LiBUbyBkbyB0aGlzLCB0aGUgaW5wdXRzXG4gIC8vIHRvIHRoZSBhbGdvcml0aG0gbXVzdCBiZSB0aGUgc2FtZS4gRm9yIGV4YW1wbGUsIHdlIHVzZSB0aGUgYHJlbmRlckxhbmVzYFxuICAvLyB0byBhdm9pZCBjaG9vc2luZyBhIGxhbmUgdGhhdCBpcyBhbHJlYWR5IGluIHRoZSBtaWRkbGUgb2YgcmVuZGVyaW5nLlxuICAvL1xuICAvLyBIb3dldmVyLCB0aGUgXCJpbmNsdWRlZFwiIGxhbmVzIGNvdWxkIGJlIG11dGF0ZWQgaW4gYmV0d2VlbiB1cGRhdGVzIGluIHRoZVxuICAvLyBzYW1lIGV2ZW50LCBsaWtlIGlmIHlvdSBwZXJmb3JtIGFuIHVwZGF0ZSBpbnNpZGUgYGZsdXNoU3luY2AuIE9yIGFueSBvdGhlclxuICAvLyBjb2RlIHBhdGggdGhhdCBtaWdodCBjYWxsIGBwcmVwYXJlRnJlc2hTdGFja2AuXG4gIC8vXG4gIC8vIFRoZSB0cmljayB3ZSB1c2UgaXMgdG8gY2FjaGUgdGhlIGZpcnN0IG9mIGVhY2ggb2YgdGhlc2UgaW5wdXRzIHdpdGhpbiBhblxuICAvLyBldmVudC4gVGhlbiByZXNldCB0aGUgY2FjaGVkIHZhbHVlcyBvbmNlIHdlIGNhbiBiZSBzdXJlIHRoZSBldmVudCBpcyBvdmVyLlxuICAvLyBPdXIgaGV1cmlzdGljIGZvciB0aGF0IGlzIHdoZW5ldmVyIHdlIGVudGVyIGEgY29uY3VycmVudCB3b3JrIGxvb3AuXG4gIC8vXG4gIC8vIFdlJ2xsIGRvIHRoZSBzYW1lIGZvciBgY3VycmVudEV2ZW50UGVuZGluZ0xhbmVzYCBiZWxvdy5cblxuXG4gIGlmIChjdXJyZW50RXZlbnRXaXBMYW5lcyA9PT0gTm9MYW5lcykge1xuICAgIGN1cnJlbnRFdmVudFdpcExhbmVzID0gd29ya0luUHJvZ3Jlc3NSb290SW5jbHVkZWRMYW5lcztcbiAgfVxuXG4gIHZhciBpc1RyYW5zaXRpb24gPSByZXF1ZXN0Q3VycmVudFRyYW5zaXRpb24oKSAhPT0gTm9UcmFuc2l0aW9uO1xuXG4gIGlmIChpc1RyYW5zaXRpb24pIHtcbiAgICBpZiAoY3VycmVudEV2ZW50UGVuZGluZ0xhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgICBjdXJyZW50RXZlbnRQZW5kaW5nTGFuZXMgPSBtb3N0UmVjZW50bHlVcGRhdGVkUm9vdCAhPT0gbnVsbCA/IG1vc3RSZWNlbnRseVVwZGF0ZWRSb290LnBlbmRpbmdMYW5lcyA6IE5vTGFuZXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbmRUcmFuc2l0aW9uTGFuZShjdXJyZW50RXZlbnRXaXBMYW5lcywgY3VycmVudEV2ZW50UGVuZGluZ0xhbmVzKTtcbiAgfSAvLyBUT0RPOiBSZW1vdmUgdGhpcyBkZXBlbmRlbmN5IG9uIHRoZSBTY2hlZHVsZXIgcHJpb3JpdHkuXG4gIC8vIFRvIGRvIHRoYXQsIHdlJ3JlIHJlcGxhY2luZyBpdCB3aXRoIGFuIHVwZGF0ZSBsYW5lIHByaW9yaXR5LlxuXG5cbiAgdmFyIHNjaGVkdWxlclByaW9yaXR5ID0gZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwoKTsgLy8gVGhlIG9sZCBiZWhhdmlvciB3YXMgdXNpbmcgdGhlIHByaW9yaXR5IGxldmVsIG9mIHRoZSBTY2hlZHVsZXIuXG4gIC8vIFRoaXMgY291cGxlcyBSZWFjdCB0byB0aGUgU2NoZWR1bGVyIGludGVybmFscywgc28gd2UncmUgcmVwbGFjaW5nIGl0XG4gIC8vIHdpdGggdGhlIGN1cnJlbnRVcGRhdGVMYW5lUHJpb3JpdHkgYWJvdmUuIEFzIGFuIGV4YW1wbGUgb2YgaG93IHRoaXNcbiAgLy8gY291bGQgYmUgcHJvYmxlbWF0aWMsIGlmIHdlJ3JlIG5vdCBpbnNpZGUgYFNjaGVkdWxlci5ydW5XaXRoUHJpb3JpdHlgLFxuICAvLyB0aGVuIHdlJ2xsIGdldCB0aGUgcHJpb3JpdHkgb2YgdGhlIGN1cnJlbnQgcnVubmluZyBTY2hlZHVsZXIgdGFzayxcbiAgLy8gd2hpY2ggaXMgcHJvYmFibHkgbm90IHdoYXQgd2Ugd2FudC5cblxuICB2YXIgbGFuZTtcblxuICBpZiAoIC8vIFRPRE86IFRlbXBvcmFyeS4gV2UncmUgcmVtb3ZpbmcgdGhlIGNvbmNlcHQgb2YgZGlzY3JldGUgdXBkYXRlcy5cbiAgKGV4ZWN1dGlvbkNvbnRleHQgJiBEaXNjcmV0ZUV2ZW50Q29udGV4dCkgIT09IE5vQ29udGV4dCAmJiBzY2hlZHVsZXJQcmlvcml0eSA9PT0gVXNlckJsb2NraW5nUHJpb3JpdHkkMikge1xuICAgIGxhbmUgPSBmaW5kVXBkYXRlTGFuZShJbnB1dERpc2NyZXRlTGFuZVByaW9yaXR5LCBjdXJyZW50RXZlbnRXaXBMYW5lcyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIHNjaGVkdWxlckxhbmVQcmlvcml0eSA9IHNjaGVkdWxlclByaW9yaXR5VG9MYW5lUHJpb3JpdHkoc2NoZWR1bGVyUHJpb3JpdHkpO1xuXG4gICAgbGFuZSA9IGZpbmRVcGRhdGVMYW5lKHNjaGVkdWxlckxhbmVQcmlvcml0eSwgY3VycmVudEV2ZW50V2lwTGFuZXMpO1xuICB9XG5cbiAgcmV0dXJuIGxhbmU7XG59XG5cbmZ1bmN0aW9uIHJlcXVlc3RSZXRyeUxhbmUoZmliZXIpIHtcbiAgLy8gVGhpcyBpcyBhIGZvcmsgb2YgYHJlcXVlc3RVcGRhdGVMYW5lYCBkZXNpZ25lZCBzcGVjaWZpY2FsbHkgZm9yIFN1c3BlbnNlXG4gIC8vIFwicmV0cmllc1wiIFx1MjAxNCBhIHNwZWNpYWwgdXBkYXRlIHRoYXQgYXR0ZW1wdHMgdG8gZmxpcCBhIFN1c3BlbnNlIGJvdW5kYXJ5XG4gIC8vIGZyb20gaXRzIHBsYWNlaG9sZGVyIHN0YXRlIHRvIGl0cyBwcmltYXJ5L3Jlc29sdmVkIHN0YXRlLlxuICAvLyBTcGVjaWFsIGNhc2VzXG4gIHZhciBtb2RlID0gZmliZXIubW9kZTtcblxuICBpZiAoKG1vZGUgJiBCbG9ja2luZ01vZGUpID09PSBOb01vZGUpIHtcbiAgICByZXR1cm4gU3luY0xhbmU7XG4gIH0gZWxzZSBpZiAoKG1vZGUgJiBDb25jdXJyZW50TW9kZSkgPT09IE5vTW9kZSkge1xuICAgIHJldHVybiBnZXRDdXJyZW50UHJpb3JpdHlMZXZlbCgpID09PSBJbW1lZGlhdGVQcmlvcml0eSQxID8gU3luY0xhbmUgOiBTeW5jQmF0Y2hlZExhbmU7XG4gIH0gLy8gU2VlIGByZXF1ZXN0VXBkYXRlTGFuZWAgZm9yIGV4cGxhbmF0aW9uIG9mIGBjdXJyZW50RXZlbnRXaXBMYW5lc2BcblxuXG4gIGlmIChjdXJyZW50RXZlbnRXaXBMYW5lcyA9PT0gTm9MYW5lcykge1xuICAgIGN1cnJlbnRFdmVudFdpcExhbmVzID0gd29ya0luUHJvZ3Jlc3NSb290SW5jbHVkZWRMYW5lcztcbiAgfVxuXG4gIHJldHVybiBmaW5kUmV0cnlMYW5lKGN1cnJlbnRFdmVudFdpcExhbmVzKTtcbn1cblxuZnVuY3Rpb24gc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBsYW5lLCBldmVudFRpbWUpIHtcbiAgY2hlY2tGb3JOZXN0ZWRVcGRhdGVzKCk7XG4gIHdhcm5BYm91dFJlbmRlclBoYXNlVXBkYXRlc0luREVWKGZpYmVyKTtcbiAgdmFyIHJvb3QgPSBtYXJrVXBkYXRlTGFuZUZyb21GaWJlclRvUm9vdChmaWJlciwgbGFuZSk7XG5cbiAgaWYgKHJvb3QgPT09IG51bGwpIHtcbiAgICB3YXJuQWJvdXRVcGRhdGVPblVubW91bnRlZEZpYmVySW5ERVYoZmliZXIpO1xuICAgIHJldHVybiBudWxsO1xuICB9IC8vIE1hcmsgdGhhdCB0aGUgcm9vdCBoYXMgYSBwZW5kaW5nIHVwZGF0ZS5cblxuXG4gIG1hcmtSb290VXBkYXRlZChyb290LCBsYW5lLCBldmVudFRpbWUpO1xuXG4gIGlmIChyb290ID09PSB3b3JrSW5Qcm9ncmVzc1Jvb3QpIHtcbiAgICAvLyBSZWNlaXZlZCBhbiB1cGRhdGUgdG8gYSB0cmVlIHRoYXQncyBpbiB0aGUgbWlkZGxlIG9mIHJlbmRlcmluZy4gTWFya1xuICAgIC8vIHRoYXQgdGhlcmUgd2FzIGFuIGludGVybGVhdmVkIHVwZGF0ZSB3b3JrIG9uIHRoaXMgcm9vdC4gVW5sZXNzIHRoZVxuICAgIC8vIGBkZWZlclJlbmRlclBoYXNlVXBkYXRlVG9OZXh0QmF0Y2hgIGZsYWcgaXMgb2ZmIGFuZCB0aGlzIGlzIGEgcmVuZGVyXG4gICAgLy8gcGhhc2UgdXBkYXRlLiBJbiB0aGF0IGNhc2UsIHdlIGRvbid0IHRyZWF0IHJlbmRlciBwaGFzZSB1cGRhdGVzIGFzIGlmXG4gICAgLy8gdGhleSB3ZXJlIGludGVybGVhdmVkLCBmb3IgYmFja3dhcmRzIGNvbXBhdCByZWFzb25zLlxuICAgIHtcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdFVwZGF0ZWRMYW5lcyA9IG1lcmdlTGFuZXMod29ya0luUHJvZ3Jlc3NSb290VXBkYXRlZExhbmVzLCBsYW5lKTtcbiAgICB9XG5cbiAgICBpZiAod29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9PT0gUm9vdFN1c3BlbmRlZFdpdGhEZWxheSkge1xuICAgICAgLy8gVGhlIHJvb3QgYWxyZWFkeSBzdXNwZW5kZWQgd2l0aCBhIGRlbGF5LCB3aGljaCBtZWFucyB0aGlzIHJlbmRlclxuICAgICAgLy8gZGVmaW5pdGVseSB3b24ndCBmaW5pc2guIFNpbmNlIHdlIGhhdmUgYSBuZXcgdXBkYXRlLCBsZXQncyBtYXJrIGl0IGFzXG4gICAgICAvLyBzdXNwZW5kZWQgbm93LCByaWdodCBiZWZvcmUgbWFya2luZyB0aGUgaW5jb21pbmcgdXBkYXRlLiBUaGlzIGhhcyB0aGVcbiAgICAgIC8vIGVmZmVjdCBvZiBpbnRlcnJ1cHRpbmcgdGhlIGN1cnJlbnQgcmVuZGVyIGFuZCBzd2l0Y2hpbmcgdG8gdGhlIHVwZGF0ZS5cbiAgICAgIC8vIFRPRE86IE1ha2Ugc3VyZSB0aGlzIGRvZXNuJ3Qgb3ZlcnJpZGUgcGluZ3MgdGhhdCBoYXBwZW4gd2hpbGUgd2UndmVcbiAgICAgIC8vIGFscmVhZHkgc3RhcnRlZCByZW5kZXJpbmcuXG4gICAgICBtYXJrUm9vdFN1c3BlbmRlZCQxKHJvb3QsIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzKTtcbiAgICB9XG4gIH0gLy8gVE9ETzogcmVxdWVzdFVwZGF0ZUxhbmVQcmlvcml0eSBhbHNvIHJlYWRzIHRoZSBwcmlvcml0eS4gUGFzcyB0aGVcbiAgLy8gcHJpb3JpdHkgYXMgYW4gYXJndW1lbnQgdG8gdGhhdCBmdW5jdGlvbiBhbmQgdGhpcyBvbmUuXG5cblxuICB2YXIgcHJpb3JpdHlMZXZlbCA9IGdldEN1cnJlbnRQcmlvcml0eUxldmVsKCk7XG5cbiAgaWYgKGxhbmUgPT09IFN5bmNMYW5lKSB7XG4gICAgaWYgKCAvLyBDaGVjayBpZiB3ZSdyZSBpbnNpZGUgdW5iYXRjaGVkVXBkYXRlc1xuICAgIChleGVjdXRpb25Db250ZXh0ICYgTGVnYWN5VW5iYXRjaGVkQ29udGV4dCkgIT09IE5vQ29udGV4dCAmJiAvLyBDaGVjayBpZiB3ZSdyZSBub3QgYWxyZWFkeSByZW5kZXJpbmdcbiAgICAoZXhlY3V0aW9uQ29udGV4dCAmIChSZW5kZXJDb250ZXh0IHwgQ29tbWl0Q29udGV4dCkpID09PSBOb0NvbnRleHQpIHtcbiAgICAgIC8vIFJlZ2lzdGVyIHBlbmRpbmcgaW50ZXJhY3Rpb25zIG9uIHRoZSByb290IHRvIGF2b2lkIGxvc2luZyB0cmFjZWQgaW50ZXJhY3Rpb24gZGF0YS5cbiAgICAgIHNjaGVkdWxlUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCBsYW5lKTsgLy8gVGhpcyBpcyBhIGxlZ2FjeSBlZGdlIGNhc2UuIFRoZSBpbml0aWFsIG1vdW50IG9mIGEgUmVhY3RET00ucmVuZGVyLWVkXG4gICAgICAvLyByb290IGluc2lkZSBvZiBiYXRjaGVkVXBkYXRlcyBzaG91bGQgYmUgc3luY2hyb25vdXMsIGJ1dCBsYXlvdXQgdXBkYXRlc1xuICAgICAgLy8gc2hvdWxkIGJlIGRlZmVycmVkIHVudGlsIHRoZSBlbmQgb2YgdGhlIGJhdGNoLlxuXG4gICAgICBwZXJmb3JtU3luY1dvcmtPblJvb3Qocm9vdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290LCBldmVudFRpbWUpO1xuICAgICAgc2NoZWR1bGVQZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIGxhbmUpO1xuXG4gICAgICBpZiAoZXhlY3V0aW9uQ29udGV4dCA9PT0gTm9Db250ZXh0KSB7XG4gICAgICAgIC8vIEZsdXNoIHRoZSBzeW5jaHJvbm91cyB3b3JrIG5vdywgdW5sZXNzIHdlJ3JlIGFscmVhZHkgd29ya2luZyBvciBpbnNpZGVcbiAgICAgICAgLy8gYSBiYXRjaC4gVGhpcyBpcyBpbnRlbnRpb25hbGx5IGluc2lkZSBzY2hlZHVsZVVwZGF0ZU9uRmliZXIgaW5zdGVhZCBvZlxuICAgICAgICAvLyBzY2hlZHVsZUNhbGxiYWNrRm9yRmliZXIgdG8gcHJlc2VydmUgdGhlIGFiaWxpdHkgdG8gc2NoZWR1bGUgYSBjYWxsYmFja1xuICAgICAgICAvLyB3aXRob3V0IGltbWVkaWF0ZWx5IGZsdXNoaW5nIGl0LiBXZSBvbmx5IGRvIHRoaXMgZm9yIHVzZXItaW5pdGlhdGVkXG4gICAgICAgIC8vIHVwZGF0ZXMsIHRvIHByZXNlcnZlIGhpc3RvcmljYWwgYmVoYXZpb3Igb2YgbGVnYWN5IG1vZGUuXG4gICAgICAgIHJlc2V0UmVuZGVyVGltZXIoKTtcbiAgICAgICAgZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBTY2hlZHVsZSBhIGRpc2NyZXRlIHVwZGF0ZSBidXQgb25seSBpZiBpdCdzIG5vdCBTeW5jLlxuICAgIGlmICgoZXhlY3V0aW9uQ29udGV4dCAmIERpc2NyZXRlRXZlbnRDb250ZXh0KSAhPT0gTm9Db250ZXh0ICYmICggLy8gT25seSB1cGRhdGVzIGF0IHVzZXItYmxvY2tpbmcgcHJpb3JpdHkgb3IgZ3JlYXRlciBhcmUgY29uc2lkZXJlZFxuICAgIC8vIGRpc2NyZXRlLCBldmVuIGluc2lkZSBhIGRpc2NyZXRlIGV2ZW50LlxuICAgIHByaW9yaXR5TGV2ZWwgPT09IFVzZXJCbG9ja2luZ1ByaW9yaXR5JDIgfHwgcHJpb3JpdHlMZXZlbCA9PT0gSW1tZWRpYXRlUHJpb3JpdHkkMSkpIHtcbiAgICAgIC8vIFRoaXMgaXMgdGhlIHJlc3VsdCBvZiBhIGRpc2NyZXRlIGV2ZW50LiBUcmFjayB0aGUgbG93ZXN0IHByaW9yaXR5XG4gICAgICAvLyBkaXNjcmV0ZSB1cGRhdGUgcGVyIHJvb3Qgc28gd2UgY2FuIGZsdXNoIHRoZW0gZWFybHksIGlmIG5lZWRlZC5cbiAgICAgIGlmIChyb290c1dpdGhQZW5kaW5nRGlzY3JldGVVcGRhdGVzID09PSBudWxsKSB7XG4gICAgICAgIHJvb3RzV2l0aFBlbmRpbmdEaXNjcmV0ZVVwZGF0ZXMgPSBuZXcgU2V0KFtyb290XSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByb290c1dpdGhQZW5kaW5nRGlzY3JldGVVcGRhdGVzLmFkZChyb290KTtcbiAgICAgIH1cbiAgICB9IC8vIFNjaGVkdWxlIG90aGVyIHVwZGF0ZXMgYWZ0ZXIgaW4gY2FzZSB0aGUgY2FsbGJhY2sgaXMgc3luYy5cblxuXG4gICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QsIGV2ZW50VGltZSk7XG4gICAgc2NoZWR1bGVQZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIGxhbmUpO1xuICB9IC8vIFdlIHVzZSB0aGlzIHdoZW4gYXNzaWduaW5nIGEgbGFuZSBmb3IgYSB0cmFuc2l0aW9uIGluc2lkZVxuICAvLyBgcmVxdWVzdFVwZGF0ZUxhbmVgLiBXZSBhc3N1bWUgaXQncyB0aGUgc2FtZSBhcyB0aGUgcm9vdCBiZWluZyB1cGRhdGVkLFxuICAvLyBzaW5jZSBpbiB0aGUgY29tbW9uIGNhc2Ugb2YgYSBzaW5nbGUgcm9vdCBhcHAgaXQgcHJvYmFibHkgaXMuIElmIGl0J3Mgbm90XG4gIC8vIHRoZSBzYW1lIHJvb3QsIHRoZW4gaXQncyBub3QgYSBodWdlIGRlYWwsIHdlIGp1c3QgbWlnaHQgYmF0Y2ggbW9yZSBzdHVmZlxuICAvLyB0b2dldGhlciBtb3JlIHRoYW4gbmVjZXNzYXJ5LlxuXG5cbiAgbW9zdFJlY2VudGx5VXBkYXRlZFJvb3QgPSByb290O1xufSAvLyBUaGlzIGlzIHNwbGl0IGludG8gYSBzZXBhcmF0ZSBmdW5jdGlvbiBzbyB3ZSBjYW4gbWFyayBhIGZpYmVyIHdpdGggcGVuZGluZ1xuLy8gd29yayB3aXRob3V0IHRyZWF0aW5nIGl0IGFzIGEgdHlwaWNhbCB1cGRhdGUgdGhhdCBvcmlnaW5hdGVzIGZyb20gYW4gZXZlbnQ7XG4vLyBlLmcuIHJldHJ5aW5nIGEgU3VzcGVuc2UgYm91bmRhcnkgaXNuJ3QgYW4gdXBkYXRlLCBidXQgaXQgZG9lcyBzY2hlZHVsZSB3b3JrXG4vLyBvbiBhIGZpYmVyLlxuXG5mdW5jdGlvbiBtYXJrVXBkYXRlTGFuZUZyb21GaWJlclRvUm9vdChzb3VyY2VGaWJlciwgbGFuZSkge1xuICAvLyBVcGRhdGUgdGhlIHNvdXJjZSBmaWJlcidzIGxhbmVzXG4gIHNvdXJjZUZpYmVyLmxhbmVzID0gbWVyZ2VMYW5lcyhzb3VyY2VGaWJlci5sYW5lcywgbGFuZSk7XG4gIHZhciBhbHRlcm5hdGUgPSBzb3VyY2VGaWJlci5hbHRlcm5hdGU7XG5cbiAgaWYgKGFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgIGFsdGVybmF0ZS5sYW5lcyA9IG1lcmdlTGFuZXMoYWx0ZXJuYXRlLmxhbmVzLCBsYW5lKTtcbiAgfVxuXG4gIHtcbiAgICBpZiAoYWx0ZXJuYXRlID09PSBudWxsICYmIChzb3VyY2VGaWJlci5mbGFncyAmIChQbGFjZW1lbnQgfCBIeWRyYXRpbmcpKSAhPT0gTm9GbGFncykge1xuICAgICAgd2FybkFib3V0VXBkYXRlT25Ob3RZZXRNb3VudGVkRmliZXJJbkRFVihzb3VyY2VGaWJlcik7XG4gICAgfVxuICB9IC8vIFdhbGsgdGhlIHBhcmVudCBwYXRoIHRvIHRoZSByb290IGFuZCB1cGRhdGUgdGhlIGNoaWxkIGV4cGlyYXRpb24gdGltZS5cblxuXG4gIHZhciBub2RlID0gc291cmNlRmliZXI7XG4gIHZhciBwYXJlbnQgPSBzb3VyY2VGaWJlci5yZXR1cm47XG5cbiAgd2hpbGUgKHBhcmVudCAhPT0gbnVsbCkge1xuICAgIHBhcmVudC5jaGlsZExhbmVzID0gbWVyZ2VMYW5lcyhwYXJlbnQuY2hpbGRMYW5lcywgbGFuZSk7XG4gICAgYWx0ZXJuYXRlID0gcGFyZW50LmFsdGVybmF0ZTtcblxuICAgIGlmIChhbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgIGFsdGVybmF0ZS5jaGlsZExhbmVzID0gbWVyZ2VMYW5lcyhhbHRlcm5hdGUuY2hpbGRMYW5lcywgbGFuZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKChwYXJlbnQuZmxhZ3MgJiAoUGxhY2VtZW50IHwgSHlkcmF0aW5nKSkgIT09IE5vRmxhZ3MpIHtcbiAgICAgICAgICB3YXJuQWJvdXRVcGRhdGVPbk5vdFlldE1vdW50ZWRGaWJlckluREVWKHNvdXJjZUZpYmVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIG5vZGUgPSBwYXJlbnQ7XG4gICAgcGFyZW50ID0gcGFyZW50LnJldHVybjtcbiAgfVxuXG4gIGlmIChub2RlLnRhZyA9PT0gSG9zdFJvb3QpIHtcbiAgICB2YXIgcm9vdCA9IG5vZGUuc3RhdGVOb2RlO1xuICAgIHJldHVybiByb290O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59IC8vIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIHNjaGVkdWxlIGEgdGFzayBmb3IgYSByb290LiBUaGVyZSdzIG9ubHkgb25lIHRhc2sgcGVyXG4vLyByb290OyBpZiBhIHRhc2sgd2FzIGFscmVhZHkgc2NoZWR1bGVkLCB3ZSdsbCBjaGVjayB0byBtYWtlIHN1cmUgdGhlIHByaW9yaXR5XG4vLyBvZiB0aGUgZXhpc3RpbmcgdGFzayBpcyB0aGUgc2FtZSBhcyB0aGUgcHJpb3JpdHkgb2YgdGhlIG5leHQgbGV2ZWwgdGhhdCB0aGVcbi8vIHJvb3QgaGFzIHdvcmsgb24uIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG9uIGV2ZXJ5IHVwZGF0ZSwgYW5kIHJpZ2h0IGJlZm9yZVxuLy8gZXhpdGluZyBhIHRhc2suXG5cblxuZnVuY3Rpb24gZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QsIGN1cnJlbnRUaW1lKSB7XG4gIHZhciBleGlzdGluZ0NhbGxiYWNrTm9kZSA9IHJvb3QuY2FsbGJhY2tOb2RlOyAvLyBDaGVjayBpZiBhbnkgbGFuZXMgYXJlIGJlaW5nIHN0YXJ2ZWQgYnkgb3RoZXIgd29yay4gSWYgc28sIG1hcmsgdGhlbSBhc1xuICAvLyBleHBpcmVkIHNvIHdlIGtub3cgdG8gd29yayBvbiB0aG9zZSBuZXh0LlxuXG4gIG1hcmtTdGFydmVkTGFuZXNBc0V4cGlyZWQocm9vdCwgY3VycmVudFRpbWUpOyAvLyBEZXRlcm1pbmUgdGhlIG5leHQgbGFuZXMgdG8gd29yayBvbiwgYW5kIHRoZWlyIHByaW9yaXR5LlxuXG4gIHZhciBuZXh0TGFuZXMgPSBnZXROZXh0TGFuZXMocm9vdCwgcm9vdCA9PT0gd29ya0luUHJvZ3Jlc3NSb290ID8gd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgOiBOb0xhbmVzKTsgLy8gVGhpcyByZXR1cm5zIHRoZSBwcmlvcml0eSBsZXZlbCBjb21wdXRlZCBkdXJpbmcgdGhlIGBnZXROZXh0TGFuZXNgIGNhbGwuXG5cbiAgdmFyIG5ld0NhbGxiYWNrUHJpb3JpdHkgPSByZXR1cm5OZXh0TGFuZXNQcmlvcml0eSgpO1xuXG4gIGlmIChuZXh0TGFuZXMgPT09IE5vTGFuZXMpIHtcbiAgICAvLyBTcGVjaWFsIGNhc2U6IFRoZXJlJ3Mgbm90aGluZyB0byB3b3JrIG9uLlxuICAgIGlmIChleGlzdGluZ0NhbGxiYWNrTm9kZSAhPT0gbnVsbCkge1xuICAgICAgY2FuY2VsQ2FsbGJhY2soZXhpc3RpbmdDYWxsYmFja05vZGUpO1xuICAgICAgcm9vdC5jYWxsYmFja05vZGUgPSBudWxsO1xuICAgICAgcm9vdC5jYWxsYmFja1ByaW9yaXR5ID0gTm9MYW5lUHJpb3JpdHk7XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9IC8vIENoZWNrIGlmIHRoZXJlJ3MgYW4gZXhpc3RpbmcgdGFzay4gV2UgbWF5IGJlIGFibGUgdG8gcmV1c2UgaXQuXG5cblxuICBpZiAoZXhpc3RpbmdDYWxsYmFja05vZGUgIT09IG51bGwpIHtcbiAgICB2YXIgZXhpc3RpbmdDYWxsYmFja1ByaW9yaXR5ID0gcm9vdC5jYWxsYmFja1ByaW9yaXR5O1xuXG4gICAgaWYgKGV4aXN0aW5nQ2FsbGJhY2tQcmlvcml0eSA9PT0gbmV3Q2FsbGJhY2tQcmlvcml0eSkge1xuICAgICAgLy8gVGhlIHByaW9yaXR5IGhhc24ndCBjaGFuZ2VkLiBXZSBjYW4gcmV1c2UgdGhlIGV4aXN0aW5nIHRhc2suIEV4aXQuXG4gICAgICByZXR1cm47XG4gICAgfSAvLyBUaGUgcHJpb3JpdHkgY2hhbmdlZC4gQ2FuY2VsIHRoZSBleGlzdGluZyBjYWxsYmFjay4gV2UnbGwgc2NoZWR1bGUgYSBuZXdcbiAgICAvLyBvbmUgYmVsb3cuXG5cblxuICAgIGNhbmNlbENhbGxiYWNrKGV4aXN0aW5nQ2FsbGJhY2tOb2RlKTtcbiAgfSAvLyBTY2hlZHVsZSBhIG5ldyBjYWxsYmFjay5cblxuXG4gIHZhciBuZXdDYWxsYmFja05vZGU7XG5cbiAgaWYgKG5ld0NhbGxiYWNrUHJpb3JpdHkgPT09IFN5bmNMYW5lUHJpb3JpdHkpIHtcbiAgICAvLyBTcGVjaWFsIGNhc2U6IFN5bmMgUmVhY3QgY2FsbGJhY2tzIGFyZSBzY2hlZHVsZWQgb24gYSBzcGVjaWFsXG4gICAgLy8gaW50ZXJuYWwgcXVldWVcbiAgICBuZXdDYWxsYmFja05vZGUgPSBzY2hlZHVsZVN5bmNDYWxsYmFjayhwZXJmb3JtU3luY1dvcmtPblJvb3QuYmluZChudWxsLCByb290KSk7XG4gIH0gZWxzZSBpZiAobmV3Q2FsbGJhY2tQcmlvcml0eSA9PT0gU3luY0JhdGNoZWRMYW5lUHJpb3JpdHkpIHtcbiAgICBuZXdDYWxsYmFja05vZGUgPSBzY2hlZHVsZUNhbGxiYWNrKEltbWVkaWF0ZVByaW9yaXR5JDEsIHBlcmZvcm1TeW5jV29ya09uUm9vdC5iaW5kKG51bGwsIHJvb3QpKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgc2NoZWR1bGVyUHJpb3JpdHlMZXZlbCA9IGxhbmVQcmlvcml0eVRvU2NoZWR1bGVyUHJpb3JpdHkobmV3Q2FsbGJhY2tQcmlvcml0eSk7XG4gICAgbmV3Q2FsbGJhY2tOb2RlID0gc2NoZWR1bGVDYWxsYmFjayhzY2hlZHVsZXJQcmlvcml0eUxldmVsLCBwZXJmb3JtQ29uY3VycmVudFdvcmtPblJvb3QuYmluZChudWxsLCByb290KSk7XG4gIH1cblxuICByb290LmNhbGxiYWNrUHJpb3JpdHkgPSBuZXdDYWxsYmFja1ByaW9yaXR5O1xuICByb290LmNhbGxiYWNrTm9kZSA9IG5ld0NhbGxiYWNrTm9kZTtcbn0gLy8gVGhpcyBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIGV2ZXJ5IGNvbmN1cnJlbnQgdGFzaywgaS5lLiBhbnl0aGluZyB0aGF0XG4vLyBnb2VzIHRocm91Z2ggU2NoZWR1bGVyLlxuXG5cbmZ1bmN0aW9uIHBlcmZvcm1Db25jdXJyZW50V29ya09uUm9vdChyb290KSB7XG4gIC8vIFNpbmNlIHdlIGtub3cgd2UncmUgaW4gYSBSZWFjdCBldmVudCwgd2UgY2FuIGNsZWFyIHRoZSBjdXJyZW50XG4gIC8vIGV2ZW50IHRpbWUuIFRoZSBuZXh0IHVwZGF0ZSB3aWxsIGNvbXB1dGUgYSBuZXcgZXZlbnQgdGltZS5cbiAgY3VycmVudEV2ZW50VGltZSA9IE5vVGltZXN0YW1wO1xuICBjdXJyZW50RXZlbnRXaXBMYW5lcyA9IE5vTGFuZXM7XG4gIGN1cnJlbnRFdmVudFBlbmRpbmdMYW5lcyA9IE5vTGFuZXM7XG5cbiAgaWYgKCEoKGV4ZWN1dGlvbkNvbnRleHQgJiAoUmVuZGVyQ29udGV4dCB8IENvbW1pdENvbnRleHQpKSA9PT0gTm9Db250ZXh0KSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlNob3VsZCBub3QgYWxyZWFkeSBiZSB3b3JraW5nLlwiICk7XG4gICAgfVxuICB9IC8vIEZsdXNoIGFueSBwZW5kaW5nIHBhc3NpdmUgZWZmZWN0cyBiZWZvcmUgZGVjaWRpbmcgd2hpY2ggbGFuZXMgdG8gd29yayBvbixcbiAgLy8gaW4gY2FzZSB0aGV5IHNjaGVkdWxlIGFkZGl0aW9uYWwgd29yay5cblxuXG4gIHZhciBvcmlnaW5hbENhbGxiYWNrTm9kZSA9IHJvb3QuY2FsbGJhY2tOb2RlO1xuICB2YXIgZGlkRmx1c2hQYXNzaXZlRWZmZWN0cyA9IGZsdXNoUGFzc2l2ZUVmZmVjdHMoKTtcblxuICBpZiAoZGlkRmx1c2hQYXNzaXZlRWZmZWN0cykge1xuICAgIC8vIFNvbWV0aGluZyBpbiB0aGUgcGFzc2l2ZSBlZmZlY3QgcGhhc2UgbWF5IGhhdmUgY2FuY2VsZWQgdGhlIGN1cnJlbnQgdGFzay5cbiAgICAvLyBDaGVjayBpZiB0aGUgdGFzayBub2RlIGZvciB0aGlzIHJvb3Qgd2FzIGNoYW5nZWQuXG4gICAgaWYgKHJvb3QuY2FsbGJhY2tOb2RlICE9PSBvcmlnaW5hbENhbGxiYWNrTm9kZSkge1xuICAgICAgLy8gVGhlIGN1cnJlbnQgdGFzayB3YXMgY2FuY2VsZWQuIEV4aXQuIFdlIGRvbid0IG5lZWQgdG8gY2FsbFxuICAgICAgLy8gYGVuc3VyZVJvb3RJc1NjaGVkdWxlZGAgYmVjYXVzZSB0aGUgY2hlY2sgYWJvdmUgaW1wbGllcyBlaXRoZXIgdGhhdFxuICAgICAgLy8gdGhlcmUncyBhIG5ldyB0YXNrLCBvciB0aGF0IHRoZXJlJ3Mgbm8gcmVtYWluaW5nIHdvcmsgb24gdGhpcyByb290LlxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9IC8vIERldGVybWluZSB0aGUgbmV4dCBleHBpcmF0aW9uIHRpbWUgdG8gd29yayBvbiwgdXNpbmcgdGhlIGZpZWxkcyBzdG9yZWRcbiAgLy8gb24gdGhlIHJvb3QuXG5cblxuICB2YXIgbGFuZXMgPSBnZXROZXh0TGFuZXMocm9vdCwgcm9vdCA9PT0gd29ya0luUHJvZ3Jlc3NSb290ID8gd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgOiBOb0xhbmVzKTtcblxuICBpZiAobGFuZXMgPT09IE5vTGFuZXMpIHtcbiAgICAvLyBEZWZlbnNpdmUgY29kaW5nLiBUaGlzIGlzIG5ldmVyIGV4cGVjdGVkIHRvIGhhcHBlbi5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBleGl0U3RhdHVzID0gcmVuZGVyUm9vdENvbmN1cnJlbnQocm9vdCwgbGFuZXMpO1xuXG4gIGlmIChpbmNsdWRlc1NvbWVMYW5lKHdvcmtJblByb2dyZXNzUm9vdEluY2x1ZGVkTGFuZXMsIHdvcmtJblByb2dyZXNzUm9vdFVwZGF0ZWRMYW5lcykpIHtcbiAgICAvLyBUaGUgcmVuZGVyIGluY2x1ZGVkIGxhbmVzIHRoYXQgd2VyZSB1cGRhdGVkIGR1cmluZyB0aGUgcmVuZGVyIHBoYXNlLlxuICAgIC8vIEZvciBleGFtcGxlLCB3aGVuIHVuaGlkaW5nIGEgaGlkZGVuIHRyZWUsIHdlIGluY2x1ZGUgYWxsIHRoZSBsYW5lc1xuICAgIC8vIHRoYXQgd2VyZSBwcmV2aW91c2x5IHNraXBwZWQgd2hlbiB0aGUgdHJlZSB3YXMgaGlkZGVuLiBUaGF0IHNldCBvZlxuICAgIC8vIGxhbmVzIGlzIGEgc3VwZXJzZXQgb2YgdGhlIGxhbmVzIHdlIHN0YXJ0ZWQgcmVuZGVyaW5nIHdpdGguXG4gICAgLy9cbiAgICAvLyBTbyB3ZSdsbCB0aHJvdyBvdXQgdGhlIGN1cnJlbnQgd29yayBhbmQgcmVzdGFydC5cbiAgICBwcmVwYXJlRnJlc2hTdGFjayhyb290LCBOb0xhbmVzKTtcbiAgfSBlbHNlIGlmIChleGl0U3RhdHVzICE9PSBSb290SW5jb21wbGV0ZSkge1xuICAgIGlmIChleGl0U3RhdHVzID09PSBSb290RXJyb3JlZCkge1xuICAgICAgZXhlY3V0aW9uQ29udGV4dCB8PSBSZXRyeUFmdGVyRXJyb3I7IC8vIElmIGFuIGVycm9yIG9jY3VycmVkIGR1cmluZyBoeWRyYXRpb24sXG4gICAgICAvLyBkaXNjYXJkIHNlcnZlciByZXNwb25zZSBhbmQgZmFsbCBiYWNrIHRvIGNsaWVudCBzaWRlIHJlbmRlci5cblxuICAgICAgaWYgKHJvb3QuaHlkcmF0ZSkge1xuICAgICAgICByb290Lmh5ZHJhdGUgPSBmYWxzZTtcbiAgICAgICAgY2xlYXJDb250YWluZXIocm9vdC5jb250YWluZXJJbmZvKTtcbiAgICAgIH0gLy8gSWYgc29tZXRoaW5nIHRocmV3IGFuIGVycm9yLCB0cnkgcmVuZGVyaW5nIG9uZSBtb3JlIHRpbWUuIFdlJ2xsIHJlbmRlclxuICAgICAgLy8gc3luY2hyb25vdXNseSB0byBibG9jayBjb25jdXJyZW50IGRhdGEgbXV0YXRpb25zLCBhbmQgd2UnbGwgaW5jbHVkZXNcbiAgICAgIC8vIGFsbCBwZW5kaW5nIHVwZGF0ZXMgYXJlIGluY2x1ZGVkLiBJZiBpdCBzdGlsbCBmYWlscyBhZnRlciB0aGUgc2Vjb25kXG4gICAgICAvLyBhdHRlbXB0LCB3ZSdsbCBnaXZlIHVwIGFuZCBjb21taXQgdGhlIHJlc3VsdGluZyB0cmVlLlxuXG5cbiAgICAgIGxhbmVzID0gZ2V0TGFuZXNUb1JldHJ5U3luY2hyb25vdXNseU9uRXJyb3Iocm9vdCk7XG5cbiAgICAgIGlmIChsYW5lcyAhPT0gTm9MYW5lcykge1xuICAgICAgICBleGl0U3RhdHVzID0gcmVuZGVyUm9vdFN5bmMocm9vdCwgbGFuZXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChleGl0U3RhdHVzID09PSBSb290RmF0YWxFcnJvcmVkKSB7XG4gICAgICB2YXIgZmF0YWxFcnJvciA9IHdvcmtJblByb2dyZXNzUm9vdEZhdGFsRXJyb3I7XG4gICAgICBwcmVwYXJlRnJlc2hTdGFjayhyb290LCBOb0xhbmVzKTtcbiAgICAgIG1hcmtSb290U3VzcGVuZGVkJDEocm9vdCwgbGFuZXMpO1xuICAgICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QsIG5vdygpKTtcbiAgICAgIHRocm93IGZhdGFsRXJyb3I7XG4gICAgfSAvLyBXZSBub3cgaGF2ZSBhIGNvbnNpc3RlbnQgdHJlZS4gVGhlIG5leHQgc3RlcCBpcyBlaXRoZXIgdG8gY29tbWl0IGl0LFxuICAgIC8vIG9yLCBpZiBzb21ldGhpbmcgc3VzcGVuZGVkLCB3YWl0IHRvIGNvbW1pdCBpdCBhZnRlciBhIHRpbWVvdXQuXG5cblxuICAgIHZhciBmaW5pc2hlZFdvcmsgPSByb290LmN1cnJlbnQuYWx0ZXJuYXRlO1xuICAgIHJvb3QuZmluaXNoZWRXb3JrID0gZmluaXNoZWRXb3JrO1xuICAgIHJvb3QuZmluaXNoZWRMYW5lcyA9IGxhbmVzO1xuICAgIGZpbmlzaENvbmN1cnJlbnRSZW5kZXIocm9vdCwgZXhpdFN0YXR1cywgbGFuZXMpO1xuICB9XG5cbiAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QsIG5vdygpKTtcblxuICBpZiAocm9vdC5jYWxsYmFja05vZGUgPT09IG9yaWdpbmFsQ2FsbGJhY2tOb2RlKSB7XG4gICAgLy8gVGhlIHRhc2sgbm9kZSBzY2hlZHVsZWQgZm9yIHRoaXMgcm9vdCBpcyB0aGUgc2FtZSBvbmUgdGhhdCdzXG4gICAgLy8gY3VycmVudGx5IGV4ZWN1dGVkLiBOZWVkIHRvIHJldHVybiBhIGNvbnRpbnVhdGlvbi5cbiAgICByZXR1cm4gcGVyZm9ybUNvbmN1cnJlbnRXb3JrT25Sb290LmJpbmQobnVsbCwgcm9vdCk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gZmluaXNoQ29uY3VycmVudFJlbmRlcihyb290LCBleGl0U3RhdHVzLCBsYW5lcykge1xuICBzd2l0Y2ggKGV4aXRTdGF0dXMpIHtcbiAgICBjYXNlIFJvb3RJbmNvbXBsZXRlOlxuICAgIGNhc2UgUm9vdEZhdGFsRXJyb3JlZDpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCBcIlJvb3QgZGlkIG5vdCBjb21wbGV0ZS4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC5cIiApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIC8vIEZsb3cga25vd3MgYWJvdXQgaW52YXJpYW50LCBzbyBpdCBjb21wbGFpbnMgaWYgSSBhZGQgYSBicmVha1xuICAgIC8vIHN0YXRlbWVudCwgYnV0IGVzbGludCBkb2Vzbid0IGtub3cgYWJvdXQgaW52YXJpYW50LCBzbyBpdCBjb21wbGFpbnNcbiAgICAvLyBpZiBJIGRvLiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZmFsbHRocm91Z2hcblxuICAgIGNhc2UgUm9vdEVycm9yZWQ6XG4gICAgICB7XG4gICAgICAgIC8vIFdlIHNob3VsZCBoYXZlIGFscmVhZHkgYXR0ZW1wdGVkIHRvIHJldHJ5IHRoaXMgdHJlZS4gSWYgd2UgcmVhY2hlZFxuICAgICAgICAvLyB0aGlzIHBvaW50LCBpdCBlcnJvcmVkIGFnYWluLiBDb21taXQgaXQuXG4gICAgICAgIGNvbW1pdFJvb3Qocm9vdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBSb290U3VzcGVuZGVkOlxuICAgICAge1xuICAgICAgICBtYXJrUm9vdFN1c3BlbmRlZCQxKHJvb3QsIGxhbmVzKTsgLy8gV2UgaGF2ZSBhbiBhY2NlcHRhYmxlIGxvYWRpbmcgc3RhdGUuIFdlIG5lZWQgdG8gZmlndXJlIG91dCBpZiB3ZVxuICAgICAgICAvLyBzaG91bGQgaW1tZWRpYXRlbHkgY29tbWl0IGl0IG9yIHdhaXQgYSBiaXQuXG5cbiAgICAgICAgaWYgKGluY2x1ZGVzT25seVJldHJpZXMobGFuZXMpICYmIC8vIGRvIG5vdCBkZWxheSBpZiB3ZSdyZSBpbnNpZGUgYW4gYWN0KCkgc2NvcGVcbiAgICAgICAgIXNob3VsZEZvcmNlRmx1c2hGYWxsYmFja3NJbkRFVigpKSB7XG4gICAgICAgICAgLy8gVGhpcyByZW5kZXIgb25seSBpbmNsdWRlZCByZXRyaWVzLCBubyB1cGRhdGVzLiBUaHJvdHRsZSBjb21taXR0aW5nXG4gICAgICAgICAgLy8gcmV0cmllcyBzbyB0aGF0IHdlIGRvbid0IHNob3cgdG9vIG1hbnkgbG9hZGluZyBzdGF0ZXMgdG9vIHF1aWNrbHkuXG4gICAgICAgICAgdmFyIG1zVW50aWxUaW1lb3V0ID0gZ2xvYmFsTW9zdFJlY2VudEZhbGxiYWNrVGltZSArIEZBTExCQUNLX1RIUk9UVExFX01TIC0gbm93KCk7IC8vIERvbid0IGJvdGhlciB3aXRoIGEgdmVyeSBzaG9ydCBzdXNwZW5zZSB0aW1lLlxuXG4gICAgICAgICAgaWYgKG1zVW50aWxUaW1lb3V0ID4gMTApIHtcbiAgICAgICAgICAgIHZhciBuZXh0TGFuZXMgPSBnZXROZXh0TGFuZXMocm9vdCwgTm9MYW5lcyk7XG5cbiAgICAgICAgICAgIGlmIChuZXh0TGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICAgICAgICAgICAgLy8gVGhlcmUncyBhZGRpdGlvbmFsIHdvcmsgb24gdGhpcyByb290LlxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHN1c3BlbmRlZExhbmVzID0gcm9vdC5zdXNwZW5kZWRMYW5lcztcblxuICAgICAgICAgICAgaWYgKCFpc1N1YnNldE9mTGFuZXMoc3VzcGVuZGVkTGFuZXMsIGxhbmVzKSkge1xuICAgICAgICAgICAgICAvLyBXZSBzaG91bGQgcHJlZmVyIHRvIHJlbmRlciB0aGUgZmFsbGJhY2sgb2YgYXQgdGhlIGxhc3RcbiAgICAgICAgICAgICAgLy8gc3VzcGVuZGVkIGxldmVsLiBQaW5nIHRoZSBsYXN0IHN1c3BlbmRlZCBsZXZlbCB0byB0cnlcbiAgICAgICAgICAgICAgLy8gcmVuZGVyaW5nIGl0IGFnYWluLlxuICAgICAgICAgICAgICAvLyBGSVhNRTogV2hhdCBpZiB0aGUgc3VzcGVuZGVkIGxhbmVzIGFyZSBJZGxlPyBTaG91bGQgbm90IHJlc3RhcnQuXG4gICAgICAgICAgICAgIHZhciBldmVudFRpbWUgPSByZXF1ZXN0RXZlbnRUaW1lKCk7XG4gICAgICAgICAgICAgIG1hcmtSb290UGluZ2VkKHJvb3QsIHN1c3BlbmRlZExhbmVzKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IC8vIFRoZSByZW5kZXIgaXMgc3VzcGVuZGVkLCBpdCBoYXNuJ3QgdGltZWQgb3V0LCBhbmQgdGhlcmUncyBub1xuICAgICAgICAgICAgLy8gbG93ZXIgcHJpb3JpdHkgd29yayB0byBkby4gSW5zdGVhZCBvZiBjb21taXR0aW5nIHRoZSBmYWxsYmFja1xuICAgICAgICAgICAgLy8gaW1tZWRpYXRlbHksIHdhaXQgZm9yIG1vcmUgZGF0YSB0byBhcnJpdmUuXG5cblxuICAgICAgICAgICAgcm9vdC50aW1lb3V0SGFuZGxlID0gc2NoZWR1bGVUaW1lb3V0KGNvbW1pdFJvb3QuYmluZChudWxsLCByb290KSwgbXNVbnRpbFRpbWVvdXQpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIFRoZSB3b3JrIGV4cGlyZWQuIENvbW1pdCBpbW1lZGlhdGVseS5cblxuXG4gICAgICAgIGNvbW1pdFJvb3Qocm9vdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBSb290U3VzcGVuZGVkV2l0aERlbGF5OlxuICAgICAge1xuICAgICAgICBtYXJrUm9vdFN1c3BlbmRlZCQxKHJvb3QsIGxhbmVzKTtcblxuICAgICAgICBpZiAoaW5jbHVkZXNPbmx5VHJhbnNpdGlvbnMobGFuZXMpKSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBhIHRyYW5zaXRpb24sIHNvIHdlIHNob3VsZCBleGl0IHdpdGhvdXQgY29tbWl0dGluZyBhXG4gICAgICAgICAgLy8gcGxhY2Vob2xkZXIgYW5kIHdpdGhvdXQgc2NoZWR1bGluZyBhIHRpbWVvdXQuIERlbGF5IGluZGVmaW5pdGVseVxuICAgICAgICAgIC8vIHVudGlsIHdlIHJlY2VpdmUgbW9yZSBkYXRhLlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFzaG91bGRGb3JjZUZsdXNoRmFsbGJhY2tzSW5ERVYoKSkge1xuICAgICAgICAgIC8vIFRoaXMgaXMgbm90IGEgdHJhbnNpdGlvbiwgYnV0IHdlIGRpZCB0cmlnZ2VyIGFuIGF2b2lkZWQgc3RhdGUuXG4gICAgICAgICAgLy8gU2NoZWR1bGUgYSBwbGFjZWhvbGRlciB0byBkaXNwbGF5IGFmdGVyIGEgc2hvcnQgZGVsYXksIHVzaW5nIHRoZSBKdXN0XG4gICAgICAgICAgLy8gTm90aWNlYWJsZSBEaWZmZXJlbmNlLlxuICAgICAgICAgIC8vIFRPRE86IElzIHRoZSBKTkQgb3B0aW1pemF0aW9uIHdvcnRoIHRoZSBhZGRlZCBjb21wbGV4aXR5PyBJZiB0aGlzIGlzXG4gICAgICAgICAgLy8gdGhlIG9ubHkgcmVhc29uIHdlIHRyYWNrIHRoZSBldmVudCB0aW1lLCB0aGVuIHByb2JhYmx5IG5vdC5cbiAgICAgICAgICAvLyBDb25zaWRlciByZW1vdmluZy5cbiAgICAgICAgICB2YXIgbW9zdFJlY2VudEV2ZW50VGltZSA9IGdldE1vc3RSZWNlbnRFdmVudFRpbWUocm9vdCwgbGFuZXMpO1xuICAgICAgICAgIHZhciBldmVudFRpbWVNcyA9IG1vc3RSZWNlbnRFdmVudFRpbWU7XG4gICAgICAgICAgdmFyIHRpbWVFbGFwc2VkTXMgPSBub3coKSAtIGV2ZW50VGltZU1zO1xuXG4gICAgICAgICAgdmFyIF9tc1VudGlsVGltZW91dCA9IGpuZCh0aW1lRWxhcHNlZE1zKSAtIHRpbWVFbGFwc2VkTXM7IC8vIERvbid0IGJvdGhlciB3aXRoIGEgdmVyeSBzaG9ydCBzdXNwZW5zZSB0aW1lLlxuXG5cbiAgICAgICAgICBpZiAoX21zVW50aWxUaW1lb3V0ID4gMTApIHtcbiAgICAgICAgICAgIC8vIEluc3RlYWQgb2YgY29tbWl0dGluZyB0aGUgZmFsbGJhY2sgaW1tZWRpYXRlbHksIHdhaXQgZm9yIG1vcmUgZGF0YVxuICAgICAgICAgICAgLy8gdG8gYXJyaXZlLlxuICAgICAgICAgICAgcm9vdC50aW1lb3V0SGFuZGxlID0gc2NoZWR1bGVUaW1lb3V0KGNvbW1pdFJvb3QuYmluZChudWxsLCByb290KSwgX21zVW50aWxUaW1lb3V0KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBDb21taXQgdGhlIHBsYWNlaG9sZGVyLlxuXG5cbiAgICAgICAgY29tbWl0Um9vdChyb290KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIFJvb3RDb21wbGV0ZWQ6XG4gICAgICB7XG4gICAgICAgIC8vIFRoZSB3b3JrIGNvbXBsZXRlZC4gUmVhZHkgdG8gY29tbWl0LlxuICAgICAgICBjb21taXRSb290KHJvb3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvciggXCJVbmtub3duIHJvb3QgZXhpdCBzdGF0dXMuXCIgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBtYXJrUm9vdFN1c3BlbmRlZCQxKHJvb3QsIHN1c3BlbmRlZExhbmVzKSB7XG4gIC8vIFdoZW4gc3VzcGVuZGluZywgd2Ugc2hvdWxkIGFsd2F5cyBleGNsdWRlIGxhbmVzIHRoYXQgd2VyZSBwaW5nZWQgb3IgKG1vcmVcbiAgLy8gcmFyZWx5LCBzaW5jZSB3ZSB0cnkgdG8gYXZvaWQgaXQpIHVwZGF0ZWQgZHVyaW5nIHRoZSByZW5kZXIgcGhhc2UuXG4gIC8vIFRPRE86IExvbCBtYXliZSB0aGVyZSdzIGEgYmV0dGVyIHdheSB0byBmYWN0b3IgdGhpcyBiZXNpZGVzIHRoaXNcbiAgLy8gb2Jub3hpb3VzbHkgbmFtZWQgZnVuY3Rpb24gOilcbiAgc3VzcGVuZGVkTGFuZXMgPSByZW1vdmVMYW5lcyhzdXNwZW5kZWRMYW5lcywgd29ya0luUHJvZ3Jlc3NSb290UGluZ2VkTGFuZXMpO1xuICBzdXNwZW5kZWRMYW5lcyA9IHJlbW92ZUxhbmVzKHN1c3BlbmRlZExhbmVzLCB3b3JrSW5Qcm9ncmVzc1Jvb3RVcGRhdGVkTGFuZXMpO1xuICBtYXJrUm9vdFN1c3BlbmRlZChyb290LCBzdXNwZW5kZWRMYW5lcyk7XG59IC8vIFRoaXMgaXMgdGhlIGVudHJ5IHBvaW50IGZvciBzeW5jaHJvbm91cyB0YXNrcyB0aGF0IGRvbid0IGdvXG4vLyB0aHJvdWdoIFNjaGVkdWxlclxuXG5cbmZ1bmN0aW9uIHBlcmZvcm1TeW5jV29ya09uUm9vdChyb290KSB7XG4gIGlmICghKChleGVjdXRpb25Db250ZXh0ICYgKFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgPT09IE5vQ29udGV4dCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJTaG91bGQgbm90IGFscmVhZHkgYmUgd29ya2luZy5cIiApO1xuICAgIH1cbiAgfVxuXG4gIGZsdXNoUGFzc2l2ZUVmZmVjdHMoKTtcbiAgdmFyIGxhbmVzO1xuICB2YXIgZXhpdFN0YXR1cztcblxuICBpZiAocm9vdCA9PT0gd29ya0luUHJvZ3Jlc3NSb290ICYmIGluY2x1ZGVzU29tZUxhbmUocm9vdC5leHBpcmVkTGFuZXMsIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzKSkge1xuICAgIC8vIFRoZXJlJ3MgYSBwYXJ0aWFsIHRyZWUsIGFuZCBhdCBsZWFzdCBvbmUgb2YgaXRzIGxhbmVzIGhhcyBleHBpcmVkLiBGaW5pc2hcbiAgICAvLyByZW5kZXJpbmcgaXQgYmVmb3JlIHJlbmRlcmluZyB0aGUgcmVzdCBvZiB0aGUgZXhwaXJlZCB3b3JrLlxuICAgIGxhbmVzID0gd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXM7XG4gICAgZXhpdFN0YXR1cyA9IHJlbmRlclJvb3RTeW5jKHJvb3QsIGxhbmVzKTtcblxuICAgIGlmIChpbmNsdWRlc1NvbWVMYW5lKHdvcmtJblByb2dyZXNzUm9vdEluY2x1ZGVkTGFuZXMsIHdvcmtJblByb2dyZXNzUm9vdFVwZGF0ZWRMYW5lcykpIHtcbiAgICAgIC8vIFRoZSByZW5kZXIgaW5jbHVkZWQgbGFuZXMgdGhhdCB3ZXJlIHVwZGF0ZWQgZHVyaW5nIHRoZSByZW5kZXIgcGhhc2UuXG4gICAgICAvLyBGb3IgZXhhbXBsZSwgd2hlbiB1bmhpZGluZyBhIGhpZGRlbiB0cmVlLCB3ZSBpbmNsdWRlIGFsbCB0aGUgbGFuZXNcbiAgICAgIC8vIHRoYXQgd2VyZSBwcmV2aW91c2x5IHNraXBwZWQgd2hlbiB0aGUgdHJlZSB3YXMgaGlkZGVuLiBUaGF0IHNldCBvZlxuICAgICAgLy8gbGFuZXMgaXMgYSBzdXBlcnNldCBvZiB0aGUgbGFuZXMgd2Ugc3RhcnRlZCByZW5kZXJpbmcgd2l0aC5cbiAgICAgIC8vXG4gICAgICAvLyBOb3RlIHRoYXQgdGhpcyBvbmx5IGhhcHBlbnMgd2hlbiBwYXJ0IG9mIHRoZSB0cmVlIGlzIHJlbmRlcmVkXG4gICAgICAvLyBjb25jdXJyZW50bHkuIElmIHRoZSB3aG9sZSB0cmVlIGlzIHJlbmRlcmVkIHN5bmNocm9ub3VzbHksIHRoZW4gdGhlcmVcbiAgICAgIC8vIGFyZSBubyBpbnRlcmxlYXZlZCBldmVudHMuXG4gICAgICBsYW5lcyA9IGdldE5leHRMYW5lcyhyb290LCBsYW5lcyk7XG4gICAgICBleGl0U3RhdHVzID0gcmVuZGVyUm9vdFN5bmMocm9vdCwgbGFuZXMpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsYW5lcyA9IGdldE5leHRMYW5lcyhyb290LCBOb0xhbmVzKTtcbiAgICBleGl0U3RhdHVzID0gcmVuZGVyUm9vdFN5bmMocm9vdCwgbGFuZXMpO1xuICB9XG5cbiAgaWYgKHJvb3QudGFnICE9PSBMZWdhY3lSb290ICYmIGV4aXRTdGF0dXMgPT09IFJvb3RFcnJvcmVkKSB7XG4gICAgZXhlY3V0aW9uQ29udGV4dCB8PSBSZXRyeUFmdGVyRXJyb3I7IC8vIElmIGFuIGVycm9yIG9jY3VycmVkIGR1cmluZyBoeWRyYXRpb24sXG4gICAgLy8gZGlzY2FyZCBzZXJ2ZXIgcmVzcG9uc2UgYW5kIGZhbGwgYmFjayB0byBjbGllbnQgc2lkZSByZW5kZXIuXG5cbiAgICBpZiAocm9vdC5oeWRyYXRlKSB7XG4gICAgICByb290Lmh5ZHJhdGUgPSBmYWxzZTtcbiAgICAgIGNsZWFyQ29udGFpbmVyKHJvb3QuY29udGFpbmVySW5mbyk7XG4gICAgfSAvLyBJZiBzb21ldGhpbmcgdGhyZXcgYW4gZXJyb3IsIHRyeSByZW5kZXJpbmcgb25lIG1vcmUgdGltZS4gV2UnbGwgcmVuZGVyXG4gICAgLy8gc3luY2hyb25vdXNseSB0byBibG9jayBjb25jdXJyZW50IGRhdGEgbXV0YXRpb25zLCBhbmQgd2UnbGwgaW5jbHVkZXNcbiAgICAvLyBhbGwgcGVuZGluZyB1cGRhdGVzIGFyZSBpbmNsdWRlZC4gSWYgaXQgc3RpbGwgZmFpbHMgYWZ0ZXIgdGhlIHNlY29uZFxuICAgIC8vIGF0dGVtcHQsIHdlJ2xsIGdpdmUgdXAgYW5kIGNvbW1pdCB0aGUgcmVzdWx0aW5nIHRyZWUuXG5cblxuICAgIGxhbmVzID0gZ2V0TGFuZXNUb1JldHJ5U3luY2hyb25vdXNseU9uRXJyb3Iocm9vdCk7XG5cbiAgICBpZiAobGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICAgIGV4aXRTdGF0dXMgPSByZW5kZXJSb290U3luYyhyb290LCBsYW5lcyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGV4aXRTdGF0dXMgPT09IFJvb3RGYXRhbEVycm9yZWQpIHtcbiAgICB2YXIgZmF0YWxFcnJvciA9IHdvcmtJblByb2dyZXNzUm9vdEZhdGFsRXJyb3I7XG4gICAgcHJlcGFyZUZyZXNoU3RhY2socm9vdCwgTm9MYW5lcyk7XG4gICAgbWFya1Jvb3RTdXNwZW5kZWQkMShyb290LCBsYW5lcyk7XG4gICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QsIG5vdygpKTtcbiAgICB0aHJvdyBmYXRhbEVycm9yO1xuICB9IC8vIFdlIG5vdyBoYXZlIGEgY29uc2lzdGVudCB0cmVlLiBCZWNhdXNlIHRoaXMgaXMgYSBzeW5jIHJlbmRlciwgd2VcbiAgLy8gd2lsbCBjb21taXQgaXQgZXZlbiBpZiBzb21ldGhpbmcgc3VzcGVuZGVkLlxuXG5cbiAgdmFyIGZpbmlzaGVkV29yayA9IHJvb3QuY3VycmVudC5hbHRlcm5hdGU7XG4gIHJvb3QuZmluaXNoZWRXb3JrID0gZmluaXNoZWRXb3JrO1xuICByb290LmZpbmlzaGVkTGFuZXMgPSBsYW5lcztcbiAgY29tbWl0Um9vdChyb290KTsgLy8gQmVmb3JlIGV4aXRpbmcsIG1ha2Ugc3VyZSB0aGVyZSdzIGEgY2FsbGJhY2sgc2NoZWR1bGVkIGZvciB0aGUgbmV4dFxuICAvLyBwZW5kaW5nIGxldmVsLlxuXG4gIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290LCBub3coKSk7XG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gZmx1c2hEaXNjcmV0ZVVwZGF0ZXMoKSB7XG4gIC8vIFRPRE86IFNob3VsZCBiZSBhYmxlIHRvIGZsdXNoIGluc2lkZSBiYXRjaGVkVXBkYXRlcywgYnV0IG5vdCBpbnNpZGUgYGFjdGAuXG4gIC8vIEhvd2V2ZXIsIGBhY3RgIHVzZXMgYGJhdGNoZWRVcGRhdGVzYCwgc28gdGhlcmUncyBubyB3YXkgdG8gZGlzdGluZ3Vpc2hcbiAgLy8gdGhvc2UgdHdvIGNhc2VzLiBOZWVkIHRvIGZpeCB0aGlzIGJlZm9yZSBleHBvc2luZyBmbHVzaERpc2NyZXRlVXBkYXRlc1xuICAvLyBhcyBhIHB1YmxpYyBBUEkuXG4gIGlmICgoZXhlY3V0aW9uQ29udGV4dCAmIChCYXRjaGVkQ29udGV4dCB8IFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgIT09IE5vQ29udGV4dCkge1xuICAgIHtcbiAgICAgIGlmICgoZXhlY3V0aW9uQ29udGV4dCAmIFJlbmRlckNvbnRleHQpICE9PSBOb0NvbnRleHQpIHtcbiAgICAgICAgZXJyb3IoJ3Vuc3RhYmxlX2ZsdXNoRGlzY3JldGVVcGRhdGVzOiBDYW5ub3QgZmx1c2ggdXBkYXRlcyB3aGVuIFJlYWN0IGlzICcgKyAnYWxyZWFkeSByZW5kZXJpbmcuJyk7XG4gICAgICB9XG4gICAgfSAvLyBXZSdyZSBhbHJlYWR5IHJlbmRlcmluZywgc28gd2UgY2FuJ3Qgc3luY2hyb25vdXNseSBmbHVzaCBwZW5kaW5nIHdvcmsuXG4gICAgLy8gVGhpcyBpcyBwcm9iYWJseSBhIG5lc3RlZCBldmVudCBkaXNwYXRjaCB0cmlnZ2VyZWQgYnkgYSBsaWZlY3ljbGUvZWZmZWN0LFxuICAgIC8vIGxpa2UgYGVsLmZvY3VzKClgLiBFeGl0LlxuXG5cbiAgICByZXR1cm47XG4gIH1cblxuICBmbHVzaFBlbmRpbmdEaXNjcmV0ZVVwZGF0ZXMoKTsgLy8gSWYgdGhlIGRpc2NyZXRlIHVwZGF0ZXMgc2NoZWR1bGVkIHBhc3NpdmUgZWZmZWN0cywgZmx1c2ggdGhlbSBub3cgc28gdGhhdFxuICAvLyB0aGV5IGZpcmUgYmVmb3JlIHRoZSBuZXh0IHNlcmlhbCBldmVudC5cblxuICBmbHVzaFBhc3NpdmVFZmZlY3RzKCk7XG59XG5cbmZ1bmN0aW9uIGZsdXNoUGVuZGluZ0Rpc2NyZXRlVXBkYXRlcygpIHtcbiAgaWYgKHJvb3RzV2l0aFBlbmRpbmdEaXNjcmV0ZVVwZGF0ZXMgIT09IG51bGwpIHtcbiAgICAvLyBGb3IgZWFjaCByb290IHdpdGggcGVuZGluZyBkaXNjcmV0ZSB1cGRhdGVzLCBzY2hlZHVsZSBhIGNhbGxiYWNrIHRvXG4gICAgLy8gaW1tZWRpYXRlbHkgZmx1c2ggdGhlbS5cbiAgICB2YXIgcm9vdHMgPSByb290c1dpdGhQZW5kaW5nRGlzY3JldGVVcGRhdGVzO1xuICAgIHJvb3RzV2l0aFBlbmRpbmdEaXNjcmV0ZVVwZGF0ZXMgPSBudWxsO1xuICAgIHJvb3RzLmZvckVhY2goZnVuY3Rpb24gKHJvb3QpIHtcbiAgICAgIG1hcmtEaXNjcmV0ZVVwZGF0ZXNFeHBpcmVkKHJvb3QpO1xuICAgICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QsIG5vdygpKTtcbiAgICB9KTtcbiAgfSAvLyBOb3cgZmx1c2ggdGhlIGltbWVkaWF0ZSBxdWV1ZS5cblxuXG4gIGZsdXNoU3luY0NhbGxiYWNrUXVldWUoKTtcbn1cblxuZnVuY3Rpb24gYmF0Y2hlZFVwZGF0ZXMkMShmbiwgYSkge1xuICB2YXIgcHJldkV4ZWN1dGlvbkNvbnRleHQgPSBleGVjdXRpb25Db250ZXh0O1xuICBleGVjdXRpb25Db250ZXh0IHw9IEJhdGNoZWRDb250ZXh0O1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGZuKGEpO1xuICB9IGZpbmFsbHkge1xuICAgIGV4ZWN1dGlvbkNvbnRleHQgPSBwcmV2RXhlY3V0aW9uQ29udGV4dDtcblxuICAgIGlmIChleGVjdXRpb25Db250ZXh0ID09PSBOb0NvbnRleHQpIHtcbiAgICAgIC8vIEZsdXNoIHRoZSBpbW1lZGlhdGUgY2FsbGJhY2tzIHRoYXQgd2VyZSBzY2hlZHVsZWQgZHVyaW5nIHRoaXMgYmF0Y2hcbiAgICAgIHJlc2V0UmVuZGVyVGltZXIoKTtcbiAgICAgIGZsdXNoU3luY0NhbGxiYWNrUXVldWUoKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGJhdGNoZWRFdmVudFVwZGF0ZXMkMShmbiwgYSkge1xuICB2YXIgcHJldkV4ZWN1dGlvbkNvbnRleHQgPSBleGVjdXRpb25Db250ZXh0O1xuICBleGVjdXRpb25Db250ZXh0IHw9IEV2ZW50Q29udGV4dDtcblxuICB0cnkge1xuICAgIHJldHVybiBmbihhKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBleGVjdXRpb25Db250ZXh0ID0gcHJldkV4ZWN1dGlvbkNvbnRleHQ7XG5cbiAgICBpZiAoZXhlY3V0aW9uQ29udGV4dCA9PT0gTm9Db250ZXh0KSB7XG4gICAgICAvLyBGbHVzaCB0aGUgaW1tZWRpYXRlIGNhbGxiYWNrcyB0aGF0IHdlcmUgc2NoZWR1bGVkIGR1cmluZyB0aGlzIGJhdGNoXG4gICAgICByZXNldFJlbmRlclRpbWVyKCk7XG4gICAgICBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlKCk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBkaXNjcmV0ZVVwZGF0ZXMkMShmbiwgYSwgYiwgYywgZCkge1xuICB2YXIgcHJldkV4ZWN1dGlvbkNvbnRleHQgPSBleGVjdXRpb25Db250ZXh0O1xuICBleGVjdXRpb25Db250ZXh0IHw9IERpc2NyZXRlRXZlbnRDb250ZXh0O1xuXG4gIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHJ1bldpdGhQcmlvcml0eSQxKFVzZXJCbG9ja2luZ1ByaW9yaXR5JDIsIGZuLmJpbmQobnVsbCwgYSwgYiwgYywgZCkpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBleGVjdXRpb25Db250ZXh0ID0gcHJldkV4ZWN1dGlvbkNvbnRleHQ7XG5cbiAgICAgIGlmIChleGVjdXRpb25Db250ZXh0ID09PSBOb0NvbnRleHQpIHtcbiAgICAgICAgLy8gRmx1c2ggdGhlIGltbWVkaWF0ZSBjYWxsYmFja3MgdGhhdCB3ZXJlIHNjaGVkdWxlZCBkdXJpbmcgdGhpcyBiYXRjaFxuICAgICAgICByZXNldFJlbmRlclRpbWVyKCk7XG4gICAgICAgIGZsdXNoU3luY0NhbGxiYWNrUXVldWUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHVuYmF0Y2hlZFVwZGF0ZXMoZm4sIGEpIHtcbiAgdmFyIHByZXZFeGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcbiAgZXhlY3V0aW9uQ29udGV4dCAmPSB+QmF0Y2hlZENvbnRleHQ7XG4gIGV4ZWN1dGlvbkNvbnRleHQgfD0gTGVnYWN5VW5iYXRjaGVkQ29udGV4dDtcblxuICB0cnkge1xuICAgIHJldHVybiBmbihhKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBleGVjdXRpb25Db250ZXh0ID0gcHJldkV4ZWN1dGlvbkNvbnRleHQ7XG5cbiAgICBpZiAoZXhlY3V0aW9uQ29udGV4dCA9PT0gTm9Db250ZXh0KSB7XG4gICAgICAvLyBGbHVzaCB0aGUgaW1tZWRpYXRlIGNhbGxiYWNrcyB0aGF0IHdlcmUgc2NoZWR1bGVkIGR1cmluZyB0aGlzIGJhdGNoXG4gICAgICByZXNldFJlbmRlclRpbWVyKCk7XG4gICAgICBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlKCk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBmbHVzaFN5bmMoZm4sIGEpIHtcbiAgdmFyIHByZXZFeGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcblxuICBpZiAoKHByZXZFeGVjdXRpb25Db250ZXh0ICYgKFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgIT09IE5vQ29udGV4dCkge1xuICAgIHtcbiAgICAgIGVycm9yKCdmbHVzaFN5bmMgd2FzIGNhbGxlZCBmcm9tIGluc2lkZSBhIGxpZmVjeWNsZSBtZXRob2QuIFJlYWN0IGNhbm5vdCAnICsgJ2ZsdXNoIHdoZW4gUmVhY3QgaXMgYWxyZWFkeSByZW5kZXJpbmcuIENvbnNpZGVyIG1vdmluZyB0aGlzIGNhbGwgdG8gJyArICdhIHNjaGVkdWxlciB0YXNrIG9yIG1pY3JvIHRhc2suJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZuKGEpO1xuICB9XG5cbiAgZXhlY3V0aW9uQ29udGV4dCB8PSBCYXRjaGVkQ29udGV4dDtcblxuICB7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChmbikge1xuICAgICAgICByZXR1cm4gcnVuV2l0aFByaW9yaXR5JDEoSW1tZWRpYXRlUHJpb3JpdHkkMSwgZm4uYmluZChudWxsLCBhKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBleGVjdXRpb25Db250ZXh0ID0gcHJldkV4ZWN1dGlvbkNvbnRleHQ7IC8vIEZsdXNoIHRoZSBpbW1lZGlhdGUgY2FsbGJhY2tzIHRoYXQgd2VyZSBzY2hlZHVsZWQgZHVyaW5nIHRoaXMgYmF0Y2guXG4gICAgICAvLyBOb3RlIHRoYXQgdGhpcyB3aWxsIGhhcHBlbiBldmVuIGlmIGJhdGNoZWRVcGRhdGVzIGlzIGhpZ2hlciB1cFxuICAgICAgLy8gdGhlIHN0YWNrLlxuXG4gICAgICBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlKCk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBwdXNoUmVuZGVyTGFuZXMoZmliZXIsIGxhbmVzKSB7XG4gIHB1c2goc3VidHJlZVJlbmRlckxhbmVzQ3Vyc29yLCBzdWJ0cmVlUmVuZGVyTGFuZXMsIGZpYmVyKTtcbiAgc3VidHJlZVJlbmRlckxhbmVzID0gbWVyZ2VMYW5lcyhzdWJ0cmVlUmVuZGVyTGFuZXMsIGxhbmVzKTtcbiAgd29ya0luUHJvZ3Jlc3NSb290SW5jbHVkZWRMYW5lcyA9IG1lcmdlTGFuZXMod29ya0luUHJvZ3Jlc3NSb290SW5jbHVkZWRMYW5lcywgbGFuZXMpO1xufVxuZnVuY3Rpb24gcG9wUmVuZGVyTGFuZXMoZmliZXIpIHtcbiAgc3VidHJlZVJlbmRlckxhbmVzID0gc3VidHJlZVJlbmRlckxhbmVzQ3Vyc29yLmN1cnJlbnQ7XG4gIHBvcChzdWJ0cmVlUmVuZGVyTGFuZXNDdXJzb3IsIGZpYmVyKTtcbn1cblxuZnVuY3Rpb24gcHJlcGFyZUZyZXNoU3RhY2socm9vdCwgbGFuZXMpIHtcbiAgcm9vdC5maW5pc2hlZFdvcmsgPSBudWxsO1xuICByb290LmZpbmlzaGVkTGFuZXMgPSBOb0xhbmVzO1xuICB2YXIgdGltZW91dEhhbmRsZSA9IHJvb3QudGltZW91dEhhbmRsZTtcblxuICBpZiAodGltZW91dEhhbmRsZSAhPT0gbm9UaW1lb3V0KSB7XG4gICAgLy8gVGhlIHJvb3QgcHJldmlvdXMgc3VzcGVuZGVkIGFuZCBzY2hlZHVsZWQgYSB0aW1lb3V0IHRvIGNvbW1pdCBhIGZhbGxiYWNrXG4gICAgLy8gc3RhdGUuIE5vdyB0aGF0IHdlIGhhdmUgYWRkaXRpb25hbCB3b3JrLCBjYW5jZWwgdGhlIHRpbWVvdXQuXG4gICAgcm9vdC50aW1lb3V0SGFuZGxlID0gbm9UaW1lb3V0OyAvLyAkRmxvd0ZpeE1lIENvbXBsYWlucyBub1RpbWVvdXQgaXMgbm90IGEgVGltZW91dElELCBkZXNwaXRlIHRoZSBjaGVjayBhYm92ZVxuXG4gICAgY2FuY2VsVGltZW91dCh0aW1lb3V0SGFuZGxlKTtcbiAgfVxuXG4gIGlmICh3b3JrSW5Qcm9ncmVzcyAhPT0gbnVsbCkge1xuICAgIHZhciBpbnRlcnJ1cHRlZFdvcmsgPSB3b3JrSW5Qcm9ncmVzcy5yZXR1cm47XG5cbiAgICB3aGlsZSAoaW50ZXJydXB0ZWRXb3JrICE9PSBudWxsKSB7XG4gICAgICB1bndpbmRJbnRlcnJ1cHRlZFdvcmsoaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgIGludGVycnVwdGVkV29yayA9IGludGVycnVwdGVkV29yay5yZXR1cm47XG4gICAgfVxuICB9XG5cbiAgd29ya0luUHJvZ3Jlc3NSb290ID0gcm9vdDtcbiAgd29ya0luUHJvZ3Jlc3MgPSBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhyb290LmN1cnJlbnQsIG51bGwpO1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyA9IHN1YnRyZWVSZW5kZXJMYW5lcyA9IHdvcmtJblByb2dyZXNzUm9vdEluY2x1ZGVkTGFuZXMgPSBsYW5lcztcbiAgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IFJvb3RJbmNvbXBsZXRlO1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3RGYXRhbEVycm9yID0gbnVsbDtcbiAgd29ya0luUHJvZ3Jlc3NSb290U2tpcHBlZExhbmVzID0gTm9MYW5lcztcbiAgd29ya0luUHJvZ3Jlc3NSb290VXBkYXRlZExhbmVzID0gTm9MYW5lcztcbiAgd29ya0luUHJvZ3Jlc3NSb290UGluZ2VkTGFuZXMgPSBOb0xhbmVzO1xuXG4gIHtcbiAgICBzcGF3bmVkV29ya0R1cmluZ1JlbmRlciA9IG51bGw7XG4gIH1cblxuICB7XG4gICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MuZGlzY2FyZFBlbmRpbmdXYXJuaW5ncygpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUVycm9yKHJvb3QsIHRocm93blZhbHVlKSB7XG4gIGRvIHtcbiAgICB2YXIgZXJyb3JlZFdvcmsgPSB3b3JrSW5Qcm9ncmVzcztcblxuICAgIHRyeSB7XG4gICAgICAvLyBSZXNldCBtb2R1bGUtbGV2ZWwgc3RhdGUgdGhhdCB3YXMgc2V0IGR1cmluZyB0aGUgcmVuZGVyIHBoYXNlLlxuICAgICAgcmVzZXRDb250ZXh0RGVwZW5kZW5jaWVzKCk7XG4gICAgICByZXNldEhvb2tzQWZ0ZXJUaHJvdygpO1xuICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTsgLy8gVE9ETzogSSBmb3VuZCBhbmQgYWRkZWQgdGhpcyBtaXNzaW5nIGxpbmUgd2hpbGUgaW52ZXN0aWdhdGluZyBhXG4gICAgICAvLyBzZXBhcmF0ZSBpc3N1ZS4gV3JpdGUgYSByZWdyZXNzaW9uIHRlc3QgdXNpbmcgc3RyaW5nIHJlZnMuXG5cbiAgICAgIFJlYWN0Q3VycmVudE93bmVyJDIuY3VycmVudCA9IG51bGw7XG5cbiAgICAgIGlmIChlcnJvcmVkV29yayA9PT0gbnVsbCB8fCBlcnJvcmVkV29yay5yZXR1cm4gPT09IG51bGwpIHtcbiAgICAgICAgLy8gRXhwZWN0ZWQgdG8gYmUgd29ya2luZyBvbiBhIG5vbi1yb290IGZpYmVyLiBUaGlzIGlzIGEgZmF0YWwgZXJyb3JcbiAgICAgICAgLy8gYmVjYXVzZSB0aGVyZSdzIG5vIGFuY2VzdG9yIHRoYXQgY2FuIGhhbmRsZSBpdDsgdGhlIHJvb3QgaXNcbiAgICAgICAgLy8gc3VwcG9zZWQgdG8gY2FwdHVyZSBhbGwgZXJyb3JzIHRoYXQgd2VyZW4ndCBjYXVnaHQgYnkgYW4gZXJyb3JcbiAgICAgICAgLy8gYm91bmRhcnkuXG4gICAgICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290RmF0YWxFcnJvcmVkO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RGYXRhbEVycm9yID0gdGhyb3duVmFsdWU7IC8vIFNldCBgd29ya0luUHJvZ3Jlc3NgIHRvIG51bGwuIFRoaXMgcmVwcmVzZW50cyBhZHZhbmNpbmcgdG8gdGhlIG5leHRcbiAgICAgICAgLy8gc2libGluZywgb3IgdGhlIHBhcmVudCBpZiB0aGVyZSBhcmUgbm8gc2libGluZ3MuIEJ1dCBzaW5jZSB0aGUgcm9vdFxuICAgICAgICAvLyBoYXMgbm8gc2libGluZ3Mgbm9yIGEgcGFyZW50LCB3ZSBzZXQgaXQgdG8gbnVsbC4gVXN1YWxseSB0aGlzIGlzXG4gICAgICAgIC8vIGhhbmRsZWQgYnkgYGNvbXBsZXRlVW5pdE9mV29ya2Agb3IgYHVud2luZFdvcmtgLCBidXQgc2luY2Ugd2UncmVcbiAgICAgICAgLy8gaW50ZW50aW9uYWxseSBub3QgY2FsbGluZyB0aG9zZSwgd2UgbmVlZCBzZXQgaXQgaGVyZS5cbiAgICAgICAgLy8gVE9ETzogQ29uc2lkZXIgY2FsbGluZyBgdW53aW5kV29ya2AgdG8gcG9wIHRoZSBjb250ZXh0cy5cblxuICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IG51bGw7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGVuYWJsZVByb2ZpbGVyVGltZXIgJiYgZXJyb3JlZFdvcmsubW9kZSAmIFByb2ZpbGVNb2RlKSB7XG4gICAgICAgIC8vIFJlY29yZCB0aGUgdGltZSBzcGVudCByZW5kZXJpbmcgYmVmb3JlIGFuIGVycm9yIHdhcyB0aHJvd24uIFRoaXNcbiAgICAgICAgLy8gYXZvaWRzIGluYWNjdXJhdGUgUHJvZmlsZXIgZHVyYXRpb25zIGluIHRoZSBjYXNlIG9mIGFcbiAgICAgICAgLy8gc3VzcGVuZGVkIHJlbmRlci5cbiAgICAgICAgc3RvcFByb2ZpbGVyVGltZXJJZlJ1bm5pbmdBbmRSZWNvcmREZWx0YShlcnJvcmVkV29yaywgdHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIHRocm93RXhjZXB0aW9uKHJvb3QsIGVycm9yZWRXb3JrLnJldHVybiwgZXJyb3JlZFdvcmssIHRocm93blZhbHVlLCB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyk7XG4gICAgICBjb21wbGV0ZVVuaXRPZldvcmsoZXJyb3JlZFdvcmspO1xuICAgIH0gY2F0Y2ggKHlldEFub3RoZXJUaHJvd25WYWx1ZSkge1xuICAgICAgLy8gU29tZXRoaW5nIGluIHRoZSByZXR1cm4gcGF0aCBhbHNvIHRocmV3LlxuICAgICAgdGhyb3duVmFsdWUgPSB5ZXRBbm90aGVyVGhyb3duVmFsdWU7XG5cbiAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcyA9PT0gZXJyb3JlZFdvcmsgJiYgZXJyb3JlZFdvcmsgIT09IG51bGwpIHtcbiAgICAgICAgLy8gSWYgdGhpcyBib3VuZGFyeSBoYXMgYWxyZWFkeSBlcnJvcmVkLCB0aGVuIHdlIGhhZCB0cm91YmxlIHByb2Nlc3NpbmdcbiAgICAgICAgLy8gdGhlIGVycm9yLiBCdWJibGUgaXQgdG8gdGhlIG5leHQgYm91bmRhcnkuXG4gICAgICAgIGVycm9yZWRXb3JrID0gZXJyb3JlZFdvcmsucmV0dXJuO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IGVycm9yZWRXb3JrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXJyb3JlZFdvcmsgPSB3b3JrSW5Qcm9ncmVzcztcbiAgICAgIH1cblxuICAgICAgY29udGludWU7XG4gICAgfSAvLyBSZXR1cm4gdG8gdGhlIG5vcm1hbCB3b3JrIGxvb3AuXG5cblxuICAgIHJldHVybjtcbiAgfSB3aGlsZSAodHJ1ZSk7XG59XG5cbmZ1bmN0aW9uIHB1c2hEaXNwYXRjaGVyKCkge1xuICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDIuY3VycmVudDtcbiAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQyLmN1cnJlbnQgPSBDb250ZXh0T25seURpc3BhdGNoZXI7XG5cbiAgaWYgKHByZXZEaXNwYXRjaGVyID09PSBudWxsKSB7XG4gICAgLy8gVGhlIFJlYWN0IGlzb21vcnBoaWMgcGFja2FnZSBkb2VzIG5vdCBpbmNsdWRlIGEgZGVmYXVsdCBkaXNwYXRjaGVyLlxuICAgIC8vIEluc3RlYWQgdGhlIGZpcnN0IHJlbmRlcmVyIHdpbGwgbGF6aWx5IGF0dGFjaCBvbmUsIGluIG9yZGVyIHRvIGdpdmVcbiAgICAvLyBuaWNlciBlcnJvciBtZXNzYWdlcy5cbiAgICByZXR1cm4gQ29udGV4dE9ubHlEaXNwYXRjaGVyO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBwcmV2RGlzcGF0Y2hlcjtcbiAgfVxufVxuXG5mdW5jdGlvbiBwb3BEaXNwYXRjaGVyKHByZXZEaXNwYXRjaGVyKSB7XG4gIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMi5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG59XG5cbmZ1bmN0aW9uIHB1c2hJbnRlcmFjdGlvbnMocm9vdCkge1xuICB7XG4gICAgdmFyIHByZXZJbnRlcmFjdGlvbnMgPSB0cmFjaW5nLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQ7XG4gICAgdHJhY2luZy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50ID0gcm9vdC5tZW1vaXplZEludGVyYWN0aW9ucztcbiAgICByZXR1cm4gcHJldkludGVyYWN0aW9ucztcbiAgfVxufVxuXG5mdW5jdGlvbiBwb3BJbnRlcmFjdGlvbnMocHJldkludGVyYWN0aW9ucykge1xuICB7XG4gICAgdHJhY2luZy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50ID0gcHJldkludGVyYWN0aW9ucztcbiAgfVxufVxuXG5mdW5jdGlvbiBtYXJrQ29tbWl0VGltZU9mRmFsbGJhY2soKSB7XG4gIGdsb2JhbE1vc3RSZWNlbnRGYWxsYmFja1RpbWUgPSBub3coKTtcbn1cbmZ1bmN0aW9uIG1hcmtTa2lwcGVkVXBkYXRlTGFuZXMobGFuZSkge1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3RTa2lwcGVkTGFuZXMgPSBtZXJnZUxhbmVzKGxhbmUsIHdvcmtJblByb2dyZXNzUm9vdFNraXBwZWRMYW5lcyk7XG59XG5mdW5jdGlvbiByZW5kZXJEaWRTdXNwZW5kKCkge1xuICBpZiAod29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9PT0gUm9vdEluY29tcGxldGUpIHtcbiAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdFN1c3BlbmRlZDtcbiAgfVxufVxuZnVuY3Rpb24gcmVuZGVyRGlkU3VzcGVuZERlbGF5SWZQb3NzaWJsZSgpIHtcbiAgaWYgKHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPT09IFJvb3RJbmNvbXBsZXRlIHx8IHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPT09IFJvb3RTdXNwZW5kZWQpIHtcbiAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdFN1c3BlbmRlZFdpdGhEZWxheTtcbiAgfSAvLyBDaGVjayBpZiB0aGVyZSBhcmUgdXBkYXRlcyB0aGF0IHdlIHNraXBwZWQgdHJlZSB0aGF0IG1pZ2h0IGhhdmUgdW5ibG9ja2VkXG4gIC8vIHRoaXMgcmVuZGVyLlxuXG5cbiAgaWYgKHdvcmtJblByb2dyZXNzUm9vdCAhPT0gbnVsbCAmJiAoaW5jbHVkZXNOb25JZGxlV29yayh3b3JrSW5Qcm9ncmVzc1Jvb3RTa2lwcGVkTGFuZXMpIHx8IGluY2x1ZGVzTm9uSWRsZVdvcmsod29ya0luUHJvZ3Jlc3NSb290VXBkYXRlZExhbmVzKSkpIHtcbiAgICAvLyBNYXJrIHRoZSBjdXJyZW50IHJlbmRlciBhcyBzdXNwZW5kZWQgc28gdGhhdCB3ZSBzd2l0Y2ggdG8gd29ya2luZyBvblxuICAgIC8vIHRoZSB1cGRhdGVzIHRoYXQgd2VyZSBza2lwcGVkLiBVc3VhbGx5IHdlIG9ubHkgc3VzcGVuZCBhdCB0aGUgZW5kIG9mXG4gICAgLy8gdGhlIHJlbmRlciBwaGFzZS5cbiAgICAvLyBUT0RPOiBXZSBzaG91bGQgcHJvYmFibHkgYWx3YXlzIG1hcmsgdGhlIHJvb3QgYXMgc3VzcGVuZGVkIGltbWVkaWF0ZWx5XG4gICAgLy8gKGluc2lkZSB0aGlzIGZ1bmN0aW9uKSwgc2luY2UgYnkgc3VzcGVuZGluZyBhdCB0aGUgZW5kIG9mIHRoZSByZW5kZXJcbiAgICAvLyBwaGFzZSBpbnRyb2R1Y2VzIGEgcG90ZW50aWFsIG1pc3Rha2Ugd2hlcmUgd2Ugc3VzcGVuZCBsYW5lcyB0aGF0IHdlcmVcbiAgICAvLyBwaW5nZWQgb3IgdXBkYXRlZCB3aGlsZSB3ZSB3ZXJlIHJlbmRlcmluZy5cbiAgICBtYXJrUm9vdFN1c3BlbmRlZCQxKHdvcmtJblByb2dyZXNzUm9vdCwgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMpO1xuICB9XG59XG5mdW5jdGlvbiByZW5kZXJEaWRFcnJvcigpIHtcbiAgaWYgKHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgIT09IFJvb3RDb21wbGV0ZWQpIHtcbiAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdEVycm9yZWQ7XG4gIH1cbn0gLy8gQ2FsbGVkIGR1cmluZyByZW5kZXIgdG8gZGV0ZXJtaW5lIGlmIGFueXRoaW5nIGhhcyBzdXNwZW5kZWQuXG4vLyBSZXR1cm5zIGZhbHNlIGlmIHdlJ3JlIG5vdCBzdXJlLlxuXG5mdW5jdGlvbiByZW5kZXJIYXNOb3RTdXNwZW5kZWRZZXQoKSB7XG4gIC8vIElmIHNvbWV0aGluZyBlcnJvcmVkIG9yIGNvbXBsZXRlZCwgd2UgY2FuJ3QgcmVhbGx5IGJlIHN1cmUsXG4gIC8vIHNvIHRob3NlIGFyZSBmYWxzZS5cbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPT09IFJvb3RJbmNvbXBsZXRlO1xufVxuXG5mdW5jdGlvbiByZW5kZXJSb290U3luYyhyb290LCBsYW5lcykge1xuICB2YXIgcHJldkV4ZWN1dGlvbkNvbnRleHQgPSBleGVjdXRpb25Db250ZXh0O1xuICBleGVjdXRpb25Db250ZXh0IHw9IFJlbmRlckNvbnRleHQ7XG4gIHZhciBwcmV2RGlzcGF0Y2hlciA9IHB1c2hEaXNwYXRjaGVyKCk7IC8vIElmIHRoZSByb290IG9yIGxhbmVzIGhhdmUgY2hhbmdlZCwgdGhyb3cgb3V0IHRoZSBleGlzdGluZyBzdGFja1xuICAvLyBhbmQgcHJlcGFyZSBhIGZyZXNoIG9uZS4gT3RoZXJ3aXNlIHdlJ2xsIGNvbnRpbnVlIHdoZXJlIHdlIGxlZnQgb2ZmLlxuXG4gIGlmICh3b3JrSW5Qcm9ncmVzc1Jvb3QgIT09IHJvb3QgfHwgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgIT09IGxhbmVzKSB7XG4gICAgcHJlcGFyZUZyZXNoU3RhY2socm9vdCwgbGFuZXMpO1xuICAgIHN0YXJ0V29ya09uUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCBsYW5lcyk7XG4gIH1cblxuICB2YXIgcHJldkludGVyYWN0aW9ucyA9IHB1c2hJbnRlcmFjdGlvbnMocm9vdCk7XG5cbiAgZG8ge1xuICAgIHRyeSB7XG4gICAgICB3b3JrTG9vcFN5bmMoKTtcbiAgICAgIGJyZWFrO1xuICAgIH0gY2F0Y2ggKHRocm93blZhbHVlKSB7XG4gICAgICBoYW5kbGVFcnJvcihyb290LCB0aHJvd25WYWx1ZSk7XG4gICAgfVxuICB9IHdoaWxlICh0cnVlKTtcblxuICByZXNldENvbnRleHREZXBlbmRlbmNpZXMoKTtcblxuICB7XG4gICAgcG9wSW50ZXJhY3Rpb25zKHByZXZJbnRlcmFjdGlvbnMpO1xuICB9XG5cbiAgZXhlY3V0aW9uQ29udGV4dCA9IHByZXZFeGVjdXRpb25Db250ZXh0O1xuICBwb3BEaXNwYXRjaGVyKHByZXZEaXNwYXRjaGVyKTtcblxuICBpZiAod29ya0luUHJvZ3Jlc3MgIT09IG51bGwpIHtcbiAgICAvLyBUaGlzIGlzIGEgc3luYyByZW5kZXIsIHNvIHdlIHNob3VsZCBoYXZlIGZpbmlzaGVkIHRoZSB3aG9sZSB0cmVlLlxuICAgIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiQ2Fubm90IGNvbW1pdCBhbiBpbmNvbXBsZXRlIHJvb3QuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuXG4gIHdvcmtJblByb2dyZXNzUm9vdCA9IG51bGw7XG4gIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzID0gTm9MYW5lcztcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXM7XG59IC8vIFRoZSB3b3JrIGxvb3AgaXMgYW4gZXh0cmVtZWx5IGhvdCBwYXRoLiBUZWxsIENsb3N1cmUgbm90IHRvIGlubGluZSBpdC5cblxuLyoqIEBub2lubGluZSAqL1xuXG5cbmZ1bmN0aW9uIHdvcmtMb29wU3luYygpIHtcbiAgLy8gQWxyZWFkeSB0aW1lZCBvdXQsIHNvIHBlcmZvcm0gd29yayB3aXRob3V0IGNoZWNraW5nIGlmIHdlIG5lZWQgdG8geWllbGQuXG4gIHdoaWxlICh3b3JrSW5Qcm9ncmVzcyAhPT0gbnVsbCkge1xuICAgIHBlcmZvcm1Vbml0T2ZXb3JrKHdvcmtJblByb2dyZXNzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZW5kZXJSb290Q29uY3VycmVudChyb290LCBsYW5lcykge1xuICB2YXIgcHJldkV4ZWN1dGlvbkNvbnRleHQgPSBleGVjdXRpb25Db250ZXh0O1xuICBleGVjdXRpb25Db250ZXh0IHw9IFJlbmRlckNvbnRleHQ7XG4gIHZhciBwcmV2RGlzcGF0Y2hlciA9IHB1c2hEaXNwYXRjaGVyKCk7IC8vIElmIHRoZSByb290IG9yIGxhbmVzIGhhdmUgY2hhbmdlZCwgdGhyb3cgb3V0IHRoZSBleGlzdGluZyBzdGFja1xuICAvLyBhbmQgcHJlcGFyZSBhIGZyZXNoIG9uZS4gT3RoZXJ3aXNlIHdlJ2xsIGNvbnRpbnVlIHdoZXJlIHdlIGxlZnQgb2ZmLlxuXG4gIGlmICh3b3JrSW5Qcm9ncmVzc1Jvb3QgIT09IHJvb3QgfHwgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgIT09IGxhbmVzKSB7XG4gICAgcmVzZXRSZW5kZXJUaW1lcigpO1xuICAgIHByZXBhcmVGcmVzaFN0YWNrKHJvb3QsIGxhbmVzKTtcbiAgICBzdGFydFdvcmtPblBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgbGFuZXMpO1xuICB9XG5cbiAgdmFyIHByZXZJbnRlcmFjdGlvbnMgPSBwdXNoSW50ZXJhY3Rpb25zKHJvb3QpO1xuXG4gIGRvIHtcbiAgICB0cnkge1xuICAgICAgd29ya0xvb3BDb25jdXJyZW50KCk7XG4gICAgICBicmVhaztcbiAgICB9IGNhdGNoICh0aHJvd25WYWx1ZSkge1xuICAgICAgaGFuZGxlRXJyb3Iocm9vdCwgdGhyb3duVmFsdWUpO1xuICAgIH1cbiAgfSB3aGlsZSAodHJ1ZSk7XG5cbiAgcmVzZXRDb250ZXh0RGVwZW5kZW5jaWVzKCk7XG5cbiAge1xuICAgIHBvcEludGVyYWN0aW9ucyhwcmV2SW50ZXJhY3Rpb25zKTtcbiAgfVxuXG4gIHBvcERpc3BhdGNoZXIocHJldkRpc3BhdGNoZXIpO1xuICBleGVjdXRpb25Db250ZXh0ID0gcHJldkV4ZWN1dGlvbkNvbnRleHQ7XG5cblxuICBpZiAod29ya0luUHJvZ3Jlc3MgIT09IG51bGwpIHtcblxuICAgIHJldHVybiBSb290SW5jb21wbGV0ZTtcbiAgfSBlbHNlIHtcblxuXG4gICAgd29ya0luUHJvZ3Jlc3NSb290ID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyA9IE5vTGFuZXM7IC8vIFJldHVybiB0aGUgZmluYWwgZXhpdCBzdGF0dXMuXG5cbiAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cztcbiAgfVxufVxuLyoqIEBub2lubGluZSAqL1xuXG5cbmZ1bmN0aW9uIHdvcmtMb29wQ29uY3VycmVudCgpIHtcbiAgLy8gUGVyZm9ybSB3b3JrIHVudGlsIFNjaGVkdWxlciBhc2tzIHVzIHRvIHlpZWxkXG4gIHdoaWxlICh3b3JrSW5Qcm9ncmVzcyAhPT0gbnVsbCAmJiAhc2hvdWxkWWllbGQoKSkge1xuICAgIHBlcmZvcm1Vbml0T2ZXb3JrKHdvcmtJblByb2dyZXNzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwZXJmb3JtVW5pdE9mV29yayh1bml0T2ZXb3JrKSB7XG4gIC8vIFRoZSBjdXJyZW50LCBmbHVzaGVkLCBzdGF0ZSBvZiB0aGlzIGZpYmVyIGlzIHRoZSBhbHRlcm5hdGUuIElkZWFsbHlcbiAgLy8gbm90aGluZyBzaG91bGQgcmVseSBvbiB0aGlzLCBidXQgcmVseWluZyBvbiBpdCBoZXJlIG1lYW5zIHRoYXQgd2UgZG9uJ3RcbiAgLy8gbmVlZCBhbiBhZGRpdGlvbmFsIGZpZWxkIG9uIHRoZSB3b3JrIGluIHByb2dyZXNzLlxuICB2YXIgY3VycmVudCA9IHVuaXRPZldvcmsuYWx0ZXJuYXRlO1xuICBzZXRDdXJyZW50RmliZXIodW5pdE9mV29yayk7XG4gIHZhciBuZXh0O1xuXG4gIGlmICggKHVuaXRPZldvcmsubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgc3RhcnRQcm9maWxlclRpbWVyKHVuaXRPZldvcmspO1xuICAgIG5leHQgPSBiZWdpbldvcmskMShjdXJyZW50LCB1bml0T2ZXb3JrLCBzdWJ0cmVlUmVuZGVyTGFuZXMpO1xuICAgIHN0b3BQcm9maWxlclRpbWVySWZSdW5uaW5nQW5kUmVjb3JkRGVsdGEodW5pdE9mV29yaywgdHJ1ZSk7XG4gIH0gZWxzZSB7XG4gICAgbmV4dCA9IGJlZ2luV29yayQxKGN1cnJlbnQsIHVuaXRPZldvcmssIHN1YnRyZWVSZW5kZXJMYW5lcyk7XG4gIH1cblxuICByZXNldEN1cnJlbnRGaWJlcigpO1xuICB1bml0T2ZXb3JrLm1lbW9pemVkUHJvcHMgPSB1bml0T2ZXb3JrLnBlbmRpbmdQcm9wcztcblxuICBpZiAobmV4dCA9PT0gbnVsbCkge1xuICAgIC8vIElmIHRoaXMgZG9lc24ndCBzcGF3biBuZXcgd29yaywgY29tcGxldGUgdGhlIGN1cnJlbnQgd29yay5cbiAgICBjb21wbGV0ZVVuaXRPZldvcmsodW5pdE9mV29yayk7XG4gIH0gZWxzZSB7XG4gICAgd29ya0luUHJvZ3Jlc3MgPSBuZXh0O1xuICB9XG5cbiAgUmVhY3RDdXJyZW50T3duZXIkMi5jdXJyZW50ID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gY29tcGxldGVVbml0T2ZXb3JrKHVuaXRPZldvcmspIHtcbiAgLy8gQXR0ZW1wdCB0byBjb21wbGV0ZSB0aGUgY3VycmVudCB1bml0IG9mIHdvcmssIHRoZW4gbW92ZSB0byB0aGUgbmV4dFxuICAvLyBzaWJsaW5nLiBJZiB0aGVyZSBhcmUgbm8gbW9yZSBzaWJsaW5ncywgcmV0dXJuIHRvIHRoZSBwYXJlbnQgZmliZXIuXG4gIHZhciBjb21wbGV0ZWRXb3JrID0gdW5pdE9mV29yaztcblxuICBkbyB7XG4gICAgLy8gVGhlIGN1cnJlbnQsIGZsdXNoZWQsIHN0YXRlIG9mIHRoaXMgZmliZXIgaXMgdGhlIGFsdGVybmF0ZS4gSWRlYWxseVxuICAgIC8vIG5vdGhpbmcgc2hvdWxkIHJlbHkgb24gdGhpcywgYnV0IHJlbHlpbmcgb24gaXQgaGVyZSBtZWFucyB0aGF0IHdlIGRvbid0XG4gICAgLy8gbmVlZCBhbiBhZGRpdGlvbmFsIGZpZWxkIG9uIHRoZSB3b3JrIGluIHByb2dyZXNzLlxuICAgIHZhciBjdXJyZW50ID0gY29tcGxldGVkV29yay5hbHRlcm5hdGU7XG4gICAgdmFyIHJldHVybkZpYmVyID0gY29tcGxldGVkV29yay5yZXR1cm47IC8vIENoZWNrIGlmIHRoZSB3b3JrIGNvbXBsZXRlZCBvciBpZiBzb21ldGhpbmcgdGhyZXcuXG5cbiAgICBpZiAoKGNvbXBsZXRlZFdvcmsuZmxhZ3MgJiBJbmNvbXBsZXRlKSA9PT0gTm9GbGFncykge1xuICAgICAgc2V0Q3VycmVudEZpYmVyKGNvbXBsZXRlZFdvcmspO1xuICAgICAgdmFyIG5leHQgPSB2b2lkIDA7XG5cbiAgICAgIGlmICggKGNvbXBsZXRlZFdvcmsubW9kZSAmIFByb2ZpbGVNb2RlKSA9PT0gTm9Nb2RlKSB7XG4gICAgICAgIG5leHQgPSBjb21wbGV0ZVdvcmsoY3VycmVudCwgY29tcGxldGVkV29yaywgc3VidHJlZVJlbmRlckxhbmVzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXJ0UHJvZmlsZXJUaW1lcihjb21wbGV0ZWRXb3JrKTtcbiAgICAgICAgbmV4dCA9IGNvbXBsZXRlV29yayhjdXJyZW50LCBjb21wbGV0ZWRXb3JrLCBzdWJ0cmVlUmVuZGVyTGFuZXMpOyAvLyBVcGRhdGUgcmVuZGVyIGR1cmF0aW9uIGFzc3VtaW5nIHdlIGRpZG4ndCBlcnJvci5cblxuICAgICAgICBzdG9wUHJvZmlsZXJUaW1lcklmUnVubmluZ0FuZFJlY29yZERlbHRhKGNvbXBsZXRlZFdvcmssIGZhbHNlKTtcbiAgICAgIH1cblxuICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTtcblxuICAgICAgaWYgKG5leHQgIT09IG51bGwpIHtcbiAgICAgICAgLy8gQ29tcGxldGluZyB0aGlzIGZpYmVyIHNwYXduZWQgbmV3IHdvcmsuIFdvcmsgb24gdGhhdCBuZXh0LlxuICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IG5leHQ7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcmVzZXRDaGlsZExhbmVzKGNvbXBsZXRlZFdvcmspO1xuXG4gICAgICBpZiAocmV0dXJuRmliZXIgIT09IG51bGwgJiYgLy8gRG8gbm90IGFwcGVuZCBlZmZlY3RzIHRvIHBhcmVudHMgaWYgYSBzaWJsaW5nIGZhaWxlZCB0byBjb21wbGV0ZVxuICAgICAgKHJldHVybkZpYmVyLmZsYWdzICYgSW5jb21wbGV0ZSkgPT09IE5vRmxhZ3MpIHtcbiAgICAgICAgLy8gQXBwZW5kIGFsbCB0aGUgZWZmZWN0cyBvZiB0aGUgc3VidHJlZSBhbmQgdGhpcyBmaWJlciBvbnRvIHRoZSBlZmZlY3RcbiAgICAgICAgLy8gbGlzdCBvZiB0aGUgcGFyZW50LiBUaGUgY29tcGxldGlvbiBvcmRlciBvZiB0aGUgY2hpbGRyZW4gYWZmZWN0cyB0aGVcbiAgICAgICAgLy8gc2lkZS1lZmZlY3Qgb3JkZXIuXG4gICAgICAgIGlmIChyZXR1cm5GaWJlci5maXJzdEVmZmVjdCA9PT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybkZpYmVyLmZpcnN0RWZmZWN0ID0gY29tcGxldGVkV29yay5maXJzdEVmZmVjdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb21wbGV0ZWRXb3JrLmxhc3RFZmZlY3QgIT09IG51bGwpIHtcbiAgICAgICAgICBpZiAocmV0dXJuRmliZXIubGFzdEVmZmVjdCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuRmliZXIubGFzdEVmZmVjdC5uZXh0RWZmZWN0ID0gY29tcGxldGVkV29yay5maXJzdEVmZmVjdDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm5GaWJlci5sYXN0RWZmZWN0ID0gY29tcGxldGVkV29yay5sYXN0RWZmZWN0O1xuICAgICAgICB9IC8vIElmIHRoaXMgZmliZXIgaGFkIHNpZGUtZWZmZWN0cywgd2UgYXBwZW5kIGl0IEFGVEVSIHRoZSBjaGlsZHJlbidzXG4gICAgICAgIC8vIHNpZGUtZWZmZWN0cy4gV2UgY2FuIHBlcmZvcm0gY2VydGFpbiBzaWRlLWVmZmVjdHMgZWFybGllciBpZiBuZWVkZWQsXG4gICAgICAgIC8vIGJ5IGRvaW5nIG11bHRpcGxlIHBhc3NlcyBvdmVyIHRoZSBlZmZlY3QgbGlzdC4gV2UgZG9uJ3Qgd2FudCB0b1xuICAgICAgICAvLyBzY2hlZHVsZSBvdXIgb3duIHNpZGUtZWZmZWN0IG9uIG91ciBvd24gbGlzdCBiZWNhdXNlIGlmIGVuZCB1cFxuICAgICAgICAvLyByZXVzaW5nIGNoaWxkcmVuIHdlJ2xsIHNjaGVkdWxlIHRoaXMgZWZmZWN0IG9udG8gaXRzZWxmIHNpbmNlIHdlJ3JlXG4gICAgICAgIC8vIGF0IHRoZSBlbmQuXG5cblxuICAgICAgICB2YXIgZmxhZ3MgPSBjb21wbGV0ZWRXb3JrLmZsYWdzOyAvLyBTa2lwIGJvdGggTm9Xb3JrIGFuZCBQZXJmb3JtZWRXb3JrIHRhZ3Mgd2hlbiBjcmVhdGluZyB0aGUgZWZmZWN0XG4gICAgICAgIC8vIGxpc3QuIFBlcmZvcm1lZFdvcmsgZWZmZWN0IGlzIHJlYWQgYnkgUmVhY3QgRGV2VG9vbHMgYnV0IHNob3VsZG4ndCBiZVxuICAgICAgICAvLyBjb21taXR0ZWQuXG5cbiAgICAgICAgaWYgKGZsYWdzID4gUGVyZm9ybWVkV29yaykge1xuICAgICAgICAgIGlmIChyZXR1cm5GaWJlci5sYXN0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm5GaWJlci5sYXN0RWZmZWN0Lm5leHRFZmZlY3QgPSBjb21wbGV0ZWRXb3JrO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm5GaWJlci5maXJzdEVmZmVjdCA9IGNvbXBsZXRlZFdvcms7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuRmliZXIubGFzdEVmZmVjdCA9IGNvbXBsZXRlZFdvcms7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhpcyBmaWJlciBkaWQgbm90IGNvbXBsZXRlIGJlY2F1c2Ugc29tZXRoaW5nIHRocmV3LiBQb3AgdmFsdWVzIG9mZlxuICAgICAgLy8gdGhlIHN0YWNrIHdpdGhvdXQgZW50ZXJpbmcgdGhlIGNvbXBsZXRlIHBoYXNlLiBJZiB0aGlzIGlzIGEgYm91bmRhcnksXG4gICAgICAvLyBjYXB0dXJlIHZhbHVlcyBpZiBwb3NzaWJsZS5cbiAgICAgIHZhciBfbmV4dCA9IHVud2luZFdvcmsoY29tcGxldGVkV29yayk7IC8vIEJlY2F1c2UgdGhpcyBmaWJlciBkaWQgbm90IGNvbXBsZXRlLCBkb24ndCByZXNldCBpdHMgZXhwaXJhdGlvbiB0aW1lLlxuXG5cbiAgICAgIGlmIChfbmV4dCAhPT0gbnVsbCkge1xuICAgICAgICAvLyBJZiBjb21wbGV0aW5nIHRoaXMgd29yayBzcGF3bmVkIG5ldyB3b3JrLCBkbyB0aGF0IG5leHQuIFdlJ2xsIGNvbWVcbiAgICAgICAgLy8gYmFjayBoZXJlIGFnYWluLlxuICAgICAgICAvLyBTaW5jZSB3ZSdyZSByZXN0YXJ0aW5nLCByZW1vdmUgYW55dGhpbmcgdGhhdCBpcyBub3QgYSBob3N0IGVmZmVjdFxuICAgICAgICAvLyBmcm9tIHRoZSBlZmZlY3QgdGFnLlxuICAgICAgICBfbmV4dC5mbGFncyAmPSBIb3N0RWZmZWN0TWFzaztcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSBfbmV4dDtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIChjb21wbGV0ZWRXb3JrLm1vZGUgJiBQcm9maWxlTW9kZSkgIT09IE5vTW9kZSkge1xuICAgICAgICAvLyBSZWNvcmQgdGhlIHJlbmRlciBkdXJhdGlvbiBmb3IgdGhlIGZpYmVyIHRoYXQgZXJyb3JlZC5cbiAgICAgICAgc3RvcFByb2ZpbGVyVGltZXJJZlJ1bm5pbmdBbmRSZWNvcmREZWx0YShjb21wbGV0ZWRXb3JrLCBmYWxzZSk7IC8vIEluY2x1ZGUgdGhlIHRpbWUgc3BlbnQgd29ya2luZyBvbiBmYWlsZWQgY2hpbGRyZW4gYmVmb3JlIGNvbnRpbnVpbmcuXG5cbiAgICAgICAgdmFyIGFjdHVhbER1cmF0aW9uID0gY29tcGxldGVkV29yay5hY3R1YWxEdXJhdGlvbjtcbiAgICAgICAgdmFyIGNoaWxkID0gY29tcGxldGVkV29yay5jaGlsZDtcblxuICAgICAgICB3aGlsZSAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgICBhY3R1YWxEdXJhdGlvbiArPSBjaGlsZC5hY3R1YWxEdXJhdGlvbjtcbiAgICAgICAgICBjaGlsZCA9IGNoaWxkLnNpYmxpbmc7XG4gICAgICAgIH1cblxuICAgICAgICBjb21wbGV0ZWRXb3JrLmFjdHVhbER1cmF0aW9uID0gYWN0dWFsRHVyYXRpb247XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXR1cm5GaWJlciAhPT0gbnVsbCkge1xuICAgICAgICAvLyBNYXJrIHRoZSBwYXJlbnQgZmliZXIgYXMgaW5jb21wbGV0ZSBhbmQgY2xlYXIgaXRzIGVmZmVjdCBsaXN0LlxuICAgICAgICByZXR1cm5GaWJlci5maXJzdEVmZmVjdCA9IHJldHVybkZpYmVyLmxhc3RFZmZlY3QgPSBudWxsO1xuICAgICAgICByZXR1cm5GaWJlci5mbGFncyB8PSBJbmNvbXBsZXRlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBzaWJsaW5nRmliZXIgPSBjb21wbGV0ZWRXb3JrLnNpYmxpbmc7XG5cbiAgICBpZiAoc2libGluZ0ZpYmVyICE9PSBudWxsKSB7XG4gICAgICAvLyBJZiB0aGVyZSBpcyBtb3JlIHdvcmsgdG8gZG8gaW4gdGhpcyByZXR1cm5GaWJlciwgZG8gdGhhdCBuZXh0LlxuICAgICAgd29ya0luUHJvZ3Jlc3MgPSBzaWJsaW5nRmliZXI7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBPdGhlcndpc2UsIHJldHVybiB0byB0aGUgcGFyZW50XG5cblxuICAgIGNvbXBsZXRlZFdvcmsgPSByZXR1cm5GaWJlcjsgLy8gVXBkYXRlIHRoZSBuZXh0IHRoaW5nIHdlJ3JlIHdvcmtpbmcgb24gaW4gY2FzZSBzb21ldGhpbmcgdGhyb3dzLlxuXG4gICAgd29ya0luUHJvZ3Jlc3MgPSBjb21wbGV0ZWRXb3JrO1xuICB9IHdoaWxlIChjb21wbGV0ZWRXb3JrICE9PSBudWxsKTsgLy8gV2UndmUgcmVhY2hlZCB0aGUgcm9vdC5cblxuXG4gIGlmICh3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID09PSBSb290SW5jb21wbGV0ZSkge1xuICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290Q29tcGxldGVkO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlc2V0Q2hpbGRMYW5lcyhjb21wbGV0ZWRXb3JrKSB7XG4gIGlmICggLy8gVE9ETzogTW92ZSB0aGlzIGNoZWNrIG91dCBvZiB0aGUgaG90IHBhdGggYnkgbW92aW5nIGByZXNldENoaWxkTGFuZXNgXG4gIC8vIHRvIHN3aXRjaCBzdGF0ZW1lbnQgaW4gYGNvbXBsZXRlV29ya2AuXG4gIChjb21wbGV0ZWRXb3JrLnRhZyA9PT0gTGVnYWN5SGlkZGVuQ29tcG9uZW50IHx8IGNvbXBsZXRlZFdvcmsudGFnID09PSBPZmZzY3JlZW5Db21wb25lbnQpICYmIGNvbXBsZXRlZFdvcmsubWVtb2l6ZWRTdGF0ZSAhPT0gbnVsbCAmJiAhaW5jbHVkZXNTb21lTGFuZShzdWJ0cmVlUmVuZGVyTGFuZXMsIE9mZnNjcmVlbkxhbmUpICYmIChjb21wbGV0ZWRXb3JrLm1vZGUgJiBDb25jdXJyZW50TW9kZSkgIT09IE5vTGFuZXMpIHtcbiAgICAvLyBUaGUgY2hpbGRyZW4gb2YgdGhpcyBjb21wb25lbnQgYXJlIGhpZGRlbi4gRG9uJ3QgYnViYmxlIHRoZWlyXG4gICAgLy8gZXhwaXJhdGlvbiB0aW1lcy5cbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgbmV3Q2hpbGRMYW5lcyA9IE5vTGFuZXM7IC8vIEJ1YmJsZSB1cCB0aGUgZWFybGllc3QgZXhwaXJhdGlvbiB0aW1lLlxuXG4gIGlmICggKGNvbXBsZXRlZFdvcmsubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgLy8gSW4gcHJvZmlsaW5nIG1vZGUsIHJlc2V0Q2hpbGRFeHBpcmF0aW9uVGltZSBpcyBhbHNvIHVzZWQgdG8gcmVzZXRcbiAgICAvLyBwcm9maWxlciBkdXJhdGlvbnMuXG4gICAgdmFyIGFjdHVhbER1cmF0aW9uID0gY29tcGxldGVkV29yay5hY3R1YWxEdXJhdGlvbjtcbiAgICB2YXIgdHJlZUJhc2VEdXJhdGlvbiA9IGNvbXBsZXRlZFdvcmsuc2VsZkJhc2VEdXJhdGlvbjsgLy8gV2hlbiBhIGZpYmVyIGlzIGNsb25lZCwgaXRzIGFjdHVhbER1cmF0aW9uIGlzIHJlc2V0IHRvIDAuIFRoaXMgdmFsdWUgd2lsbFxuICAgIC8vIG9ubHkgYmUgdXBkYXRlZCBpZiB3b3JrIGlzIGRvbmUgb24gdGhlIGZpYmVyIChpLmUuIGl0IGRvZXNuJ3QgYmFpbG91dCkuXG4gICAgLy8gV2hlbiB3b3JrIGlzIGRvbmUsIGl0IHNob3VsZCBidWJibGUgdG8gdGhlIHBhcmVudCdzIGFjdHVhbER1cmF0aW9uLiBJZlxuICAgIC8vIHRoZSBmaWJlciBoYXMgbm90IGJlZW4gY2xvbmVkIHRob3VnaCwgKG1lYW5pbmcgbm8gd29yayB3YXMgZG9uZSksIHRoZW5cbiAgICAvLyB0aGlzIHZhbHVlIHdpbGwgcmVmbGVjdCB0aGUgYW1vdW50IG9mIHRpbWUgc3BlbnQgd29ya2luZyBvbiBhIHByZXZpb3VzXG4gICAgLy8gcmVuZGVyLiBJbiB0aGF0IGNhc2UgaXQgc2hvdWxkIG5vdCBidWJibGUuIFdlIGRldGVybWluZSB3aGV0aGVyIGl0IHdhc1xuICAgIC8vIGNsb25lZCBieSBjb21wYXJpbmcgdGhlIGNoaWxkIHBvaW50ZXIuXG5cbiAgICB2YXIgc2hvdWxkQnViYmxlQWN0dWFsRHVyYXRpb25zID0gY29tcGxldGVkV29yay5hbHRlcm5hdGUgPT09IG51bGwgfHwgY29tcGxldGVkV29yay5jaGlsZCAhPT0gY29tcGxldGVkV29yay5hbHRlcm5hdGUuY2hpbGQ7XG4gICAgdmFyIGNoaWxkID0gY29tcGxldGVkV29yay5jaGlsZDtcblxuICAgIHdoaWxlIChjaGlsZCAhPT0gbnVsbCkge1xuICAgICAgbmV3Q2hpbGRMYW5lcyA9IG1lcmdlTGFuZXMobmV3Q2hpbGRMYW5lcywgbWVyZ2VMYW5lcyhjaGlsZC5sYW5lcywgY2hpbGQuY2hpbGRMYW5lcykpO1xuXG4gICAgICBpZiAoc2hvdWxkQnViYmxlQWN0dWFsRHVyYXRpb25zKSB7XG4gICAgICAgIGFjdHVhbER1cmF0aW9uICs9IGNoaWxkLmFjdHVhbER1cmF0aW9uO1xuICAgICAgfVxuXG4gICAgICB0cmVlQmFzZUR1cmF0aW9uICs9IGNoaWxkLnRyZWVCYXNlRHVyYXRpb247XG4gICAgICBjaGlsZCA9IGNoaWxkLnNpYmxpbmc7XG4gICAgfVxuXG4gICAgdmFyIGlzVGltZWRPdXRTdXNwZW5zZSA9IGNvbXBsZXRlZFdvcmsudGFnID09PSBTdXNwZW5zZUNvbXBvbmVudCAmJiBjb21wbGV0ZWRXb3JrLm1lbW9pemVkU3RhdGUgIT09IG51bGw7XG5cbiAgICBpZiAoaXNUaW1lZE91dFN1c3BlbnNlKSB7XG4gICAgICAvLyBEb24ndCBjb3VudCB0aW1lIHNwZW50IGluIGEgdGltZWQgb3V0IFN1c3BlbnNlIHN1YnRyZWUgYXMgcGFydCBvZiB0aGUgYmFzZSBkdXJhdGlvbi5cbiAgICAgIHZhciBwcmltYXJ5Q2hpbGRGcmFnbWVudCA9IGNvbXBsZXRlZFdvcmsuY2hpbGQ7XG5cbiAgICAgIGlmIChwcmltYXJ5Q2hpbGRGcmFnbWVudCAhPT0gbnVsbCkge1xuICAgICAgICB0cmVlQmFzZUR1cmF0aW9uIC09IHByaW1hcnlDaGlsZEZyYWdtZW50LnRyZWVCYXNlRHVyYXRpb247XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29tcGxldGVkV29yay5hY3R1YWxEdXJhdGlvbiA9IGFjdHVhbER1cmF0aW9uO1xuICAgIGNvbXBsZXRlZFdvcmsudHJlZUJhc2VEdXJhdGlvbiA9IHRyZWVCYXNlRHVyYXRpb247XG4gIH0gZWxzZSB7XG4gICAgdmFyIF9jaGlsZCA9IGNvbXBsZXRlZFdvcmsuY2hpbGQ7XG5cbiAgICB3aGlsZSAoX2NoaWxkICE9PSBudWxsKSB7XG4gICAgICBuZXdDaGlsZExhbmVzID0gbWVyZ2VMYW5lcyhuZXdDaGlsZExhbmVzLCBtZXJnZUxhbmVzKF9jaGlsZC5sYW5lcywgX2NoaWxkLmNoaWxkTGFuZXMpKTtcbiAgICAgIF9jaGlsZCA9IF9jaGlsZC5zaWJsaW5nO1xuICAgIH1cbiAgfVxuXG4gIGNvbXBsZXRlZFdvcmsuY2hpbGRMYW5lcyA9IG5ld0NoaWxkTGFuZXM7XG59XG5cbmZ1bmN0aW9uIGNvbW1pdFJvb3Qocm9vdCkge1xuICB2YXIgcmVuZGVyUHJpb3JpdHlMZXZlbCA9IGdldEN1cnJlbnRQcmlvcml0eUxldmVsKCk7XG4gIHJ1bldpdGhQcmlvcml0eSQxKEltbWVkaWF0ZVByaW9yaXR5JDEsIGNvbW1pdFJvb3RJbXBsLmJpbmQobnVsbCwgcm9vdCwgcmVuZGVyUHJpb3JpdHlMZXZlbCkpO1xuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gY29tbWl0Um9vdEltcGwocm9vdCwgcmVuZGVyUHJpb3JpdHlMZXZlbCkge1xuICBkbyB7XG4gICAgLy8gYGZsdXNoUGFzc2l2ZUVmZmVjdHNgIHdpbGwgY2FsbCBgZmx1c2hTeW5jVXBkYXRlUXVldWVgIGF0IHRoZSBlbmQsIHdoaWNoXG4gICAgLy8gbWVhbnMgYGZsdXNoUGFzc2l2ZUVmZmVjdHNgIHdpbGwgc29tZXRpbWVzIHJlc3VsdCBpbiBhZGRpdGlvbmFsXG4gICAgLy8gcGFzc2l2ZSBlZmZlY3RzLiBTbyB3ZSBuZWVkIHRvIGtlZXAgZmx1c2hpbmcgaW4gYSBsb29wIHVudGlsIHRoZXJlIGFyZVxuICAgIC8vIG5vIG1vcmUgcGVuZGluZyBlZmZlY3RzLlxuICAgIC8vIFRPRE86IE1pZ2h0IGJlIGJldHRlciBpZiBgZmx1c2hQYXNzaXZlRWZmZWN0c2AgZGlkIG5vdCBhdXRvbWF0aWNhbGx5XG4gICAgLy8gZmx1c2ggc3luY2hyb25vdXMgd29yayBhdCB0aGUgZW5kLCB0byBhdm9pZCBmYWN0b3JpbmcgaGF6YXJkcyBsaWtlIHRoaXMuXG4gICAgZmx1c2hQYXNzaXZlRWZmZWN0cygpO1xuICB9IHdoaWxlIChyb290V2l0aFBlbmRpbmdQYXNzaXZlRWZmZWN0cyAhPT0gbnVsbCk7XG5cbiAgZmx1c2hSZW5kZXJQaGFzZVN0cmljdE1vZGVXYXJuaW5nc0luREVWKCk7XG5cbiAgaWYgKCEoKGV4ZWN1dGlvbkNvbnRleHQgJiAoUmVuZGVyQ29udGV4dCB8IENvbW1pdENvbnRleHQpKSA9PT0gTm9Db250ZXh0KSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlNob3VsZCBub3QgYWxyZWFkeSBiZSB3b3JraW5nLlwiICk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGZpbmlzaGVkV29yayA9IHJvb3QuZmluaXNoZWRXb3JrO1xuICB2YXIgbGFuZXMgPSByb290LmZpbmlzaGVkTGFuZXM7XG5cbiAgaWYgKGZpbmlzaGVkV29yayA9PT0gbnVsbCkge1xuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByb290LmZpbmlzaGVkV29yayA9IG51bGw7XG4gIHJvb3QuZmluaXNoZWRMYW5lcyA9IE5vTGFuZXM7XG5cbiAgaWYgKCEoZmluaXNoZWRXb3JrICE9PSByb290LmN1cnJlbnQpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiQ2Fubm90IGNvbW1pdCB0aGUgc2FtZSB0cmVlIGFzIGJlZm9yZS4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgIH1cbiAgfSAvLyBjb21taXRSb290IG5ldmVyIHJldHVybnMgYSBjb250aW51YXRpb247IGl0IGFsd2F5cyBmaW5pc2hlcyBzeW5jaHJvbm91c2x5LlxuICAvLyBTbyB3ZSBjYW4gY2xlYXIgdGhlc2Ugbm93IHRvIGFsbG93IGEgbmV3IGNhbGxiYWNrIHRvIGJlIHNjaGVkdWxlZC5cblxuXG4gIHJvb3QuY2FsbGJhY2tOb2RlID0gbnVsbDsgLy8gVXBkYXRlIHRoZSBmaXJzdCBhbmQgbGFzdCBwZW5kaW5nIHRpbWVzIG9uIHRoaXMgcm9vdC4gVGhlIG5ldyBmaXJzdFxuICAvLyBwZW5kaW5nIHRpbWUgaXMgd2hhdGV2ZXIgaXMgbGVmdCBvbiB0aGUgcm9vdCBmaWJlci5cblxuICB2YXIgcmVtYWluaW5nTGFuZXMgPSBtZXJnZUxhbmVzKGZpbmlzaGVkV29yay5sYW5lcywgZmluaXNoZWRXb3JrLmNoaWxkTGFuZXMpO1xuICBtYXJrUm9vdEZpbmlzaGVkKHJvb3QsIHJlbWFpbmluZ0xhbmVzKTsgLy8gQ2xlYXIgYWxyZWFkeSBmaW5pc2hlZCBkaXNjcmV0ZSB1cGRhdGVzIGluIGNhc2UgdGhhdCBhIGxhdGVyIGNhbGwgb2ZcbiAgLy8gYGZsdXNoRGlzY3JldGVVcGRhdGVzYCBzdGFydHMgYSB1c2VsZXNzIHJlbmRlciBwYXNzIHdoaWNoIG1heSBjYW5jZWxzXG4gIC8vIGEgc2NoZWR1bGVkIHRpbWVvdXQuXG5cbiAgaWYgKHJvb3RzV2l0aFBlbmRpbmdEaXNjcmV0ZVVwZGF0ZXMgIT09IG51bGwpIHtcbiAgICBpZiAoIWhhc0Rpc2NyZXRlTGFuZXMocmVtYWluaW5nTGFuZXMpICYmIHJvb3RzV2l0aFBlbmRpbmdEaXNjcmV0ZVVwZGF0ZXMuaGFzKHJvb3QpKSB7XG4gICAgICByb290c1dpdGhQZW5kaW5nRGlzY3JldGVVcGRhdGVzLmRlbGV0ZShyb290KTtcbiAgICB9XG4gIH1cblxuICBpZiAocm9vdCA9PT0gd29ya0luUHJvZ3Jlc3NSb290KSB7XG4gICAgLy8gV2UgY2FuIHJlc2V0IHRoZXNlIG5vdyB0aGF0IHRoZXkgYXJlIGZpbmlzaGVkLlxuICAgIHdvcmtJblByb2dyZXNzUm9vdCA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3MgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzID0gTm9MYW5lcztcbiAgfSAvLyBHZXQgdGhlIGxpc3Qgb2YgZWZmZWN0cy5cblxuXG4gIHZhciBmaXJzdEVmZmVjdDtcblxuICBpZiAoZmluaXNoZWRXb3JrLmZsYWdzID4gUGVyZm9ybWVkV29yaykge1xuICAgIC8vIEEgZmliZXIncyBlZmZlY3QgbGlzdCBjb25zaXN0cyBvbmx5IG9mIGl0cyBjaGlsZHJlbiwgbm90IGl0c2VsZi4gU28gaWZcbiAgICAvLyB0aGUgcm9vdCBoYXMgYW4gZWZmZWN0LCB3ZSBuZWVkIHRvIGFkZCBpdCB0byB0aGUgZW5kIG9mIHRoZSBsaXN0LiBUaGVcbiAgICAvLyByZXN1bHRpbmcgbGlzdCBpcyB0aGUgc2V0IHRoYXQgd291bGQgYmVsb25nIHRvIHRoZSByb290J3MgcGFyZW50LCBpZiBpdFxuICAgIC8vIGhhZCBvbmU7IHRoYXQgaXMsIGFsbCB0aGUgZWZmZWN0cyBpbiB0aGUgdHJlZSBpbmNsdWRpbmcgdGhlIHJvb3QuXG4gICAgaWYgKGZpbmlzaGVkV29yay5sYXN0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgICBmaW5pc2hlZFdvcmsubGFzdEVmZmVjdC5uZXh0RWZmZWN0ID0gZmluaXNoZWRXb3JrO1xuICAgICAgZmlyc3RFZmZlY3QgPSBmaW5pc2hlZFdvcmsuZmlyc3RFZmZlY3Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZpcnN0RWZmZWN0ID0gZmluaXNoZWRXb3JrO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBUaGVyZSBpcyBubyBlZmZlY3Qgb24gdGhlIHJvb3QuXG4gICAgZmlyc3RFZmZlY3QgPSBmaW5pc2hlZFdvcmsuZmlyc3RFZmZlY3Q7XG4gIH1cblxuICBpZiAoZmlyc3RFZmZlY3QgIT09IG51bGwpIHtcblxuICAgIHZhciBwcmV2RXhlY3V0aW9uQ29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQ7XG4gICAgZXhlY3V0aW9uQ29udGV4dCB8PSBDb21taXRDb250ZXh0O1xuICAgIHZhciBwcmV2SW50ZXJhY3Rpb25zID0gcHVzaEludGVyYWN0aW9ucyhyb290KTsgLy8gUmVzZXQgdGhpcyB0byBudWxsIGJlZm9yZSBjYWxsaW5nIGxpZmVjeWNsZXNcblxuICAgIFJlYWN0Q3VycmVudE93bmVyJDIuY3VycmVudCA9IG51bGw7IC8vIFRoZSBjb21taXQgcGhhc2UgaXMgYnJva2VuIGludG8gc2V2ZXJhbCBzdWItcGhhc2VzLiBXZSBkbyBhIHNlcGFyYXRlIHBhc3NcbiAgICAvLyBvZiB0aGUgZWZmZWN0IGxpc3QgZm9yIGVhY2ggcGhhc2U6IGFsbCBtdXRhdGlvbiBlZmZlY3RzIGNvbWUgYmVmb3JlIGFsbFxuICAgIC8vIGxheW91dCBlZmZlY3RzLCBhbmQgc28gb24uXG4gICAgLy8gVGhlIGZpcnN0IHBoYXNlIGEgXCJiZWZvcmUgbXV0YXRpb25cIiBwaGFzZS4gV2UgdXNlIHRoaXMgcGhhc2UgdG8gcmVhZCB0aGVcbiAgICAvLyBzdGF0ZSBvZiB0aGUgaG9zdCB0cmVlIHJpZ2h0IGJlZm9yZSB3ZSBtdXRhdGUgaXQuIFRoaXMgaXMgd2hlcmVcbiAgICAvLyBnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSBpcyBjYWxsZWQuXG5cbiAgICBmb2N1c2VkSW5zdGFuY2VIYW5kbGUgPSBwcmVwYXJlRm9yQ29tbWl0KHJvb3QuY29udGFpbmVySW5mbyk7XG4gICAgc2hvdWxkRmlyZUFmdGVyQWN0aXZlSW5zdGFuY2VCbHVyID0gZmFsc2U7XG4gICAgbmV4dEVmZmVjdCA9IGZpcnN0RWZmZWN0O1xuXG4gICAgZG8ge1xuICAgICAge1xuICAgICAgICBpbnZva2VHdWFyZGVkQ2FsbGJhY2sobnVsbCwgY29tbWl0QmVmb3JlTXV0YXRpb25FZmZlY3RzLCBudWxsKTtcblxuICAgICAgICBpZiAoaGFzQ2F1Z2h0RXJyb3IoKSkge1xuICAgICAgICAgIGlmICghKG5leHRFZmZlY3QgIT09IG51bGwpKSB7XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRocm93IEVycm9yKCBcIlNob3VsZCBiZSB3b3JraW5nIG9uIGFuIGVmZmVjdC5cIiApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBlcnJvciA9IGNsZWFyQ2F1Z2h0RXJyb3IoKTtcbiAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihuZXh0RWZmZWN0LCBlcnJvcik7XG4gICAgICAgICAgbmV4dEVmZmVjdCA9IG5leHRFZmZlY3QubmV4dEVmZmVjdDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gd2hpbGUgKG5leHRFZmZlY3QgIT09IG51bGwpOyAvLyBXZSBubyBsb25nZXIgbmVlZCB0byB0cmFjayB0aGUgYWN0aXZlIGluc3RhbmNlIGZpYmVyXG5cblxuICAgIGZvY3VzZWRJbnN0YW5jZUhhbmRsZSA9IG51bGw7XG5cbiAgICB7XG4gICAgICAvLyBNYXJrIHRoZSBjdXJyZW50IGNvbW1pdCB0aW1lIHRvIGJlIHNoYXJlZCBieSBhbGwgUHJvZmlsZXJzIGluIHRoaXNcbiAgICAgIC8vIGJhdGNoLiBUaGlzIGVuYWJsZXMgdGhlbSB0byBiZSBncm91cGVkIGxhdGVyLlxuICAgICAgcmVjb3JkQ29tbWl0VGltZSgpO1xuICAgIH0gLy8gVGhlIG5leHQgcGhhc2UgaXMgdGhlIG11dGF0aW9uIHBoYXNlLCB3aGVyZSB3ZSBtdXRhdGUgdGhlIGhvc3QgdHJlZS5cblxuXG4gICAgbmV4dEVmZmVjdCA9IGZpcnN0RWZmZWN0O1xuXG4gICAgZG8ge1xuICAgICAge1xuICAgICAgICBpbnZva2VHdWFyZGVkQ2FsbGJhY2sobnVsbCwgY29tbWl0TXV0YXRpb25FZmZlY3RzLCBudWxsLCByb290LCByZW5kZXJQcmlvcml0eUxldmVsKTtcblxuICAgICAgICBpZiAoaGFzQ2F1Z2h0RXJyb3IoKSkge1xuICAgICAgICAgIGlmICghKG5leHRFZmZlY3QgIT09IG51bGwpKSB7XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRocm93IEVycm9yKCBcIlNob3VsZCBiZSB3b3JraW5nIG9uIGFuIGVmZmVjdC5cIiApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBfZXJyb3IgPSBjbGVhckNhdWdodEVycm9yKCk7XG5cbiAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihuZXh0RWZmZWN0LCBfZXJyb3IpO1xuICAgICAgICAgIG5leHRFZmZlY3QgPSBuZXh0RWZmZWN0Lm5leHRFZmZlY3Q7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IHdoaWxlIChuZXh0RWZmZWN0ICE9PSBudWxsKTtcblxuICAgIHJlc2V0QWZ0ZXJDb21taXQocm9vdC5jb250YWluZXJJbmZvKTsgLy8gVGhlIHdvcmstaW4tcHJvZ3Jlc3MgdHJlZSBpcyBub3cgdGhlIGN1cnJlbnQgdHJlZS4gVGhpcyBtdXN0IGNvbWUgYWZ0ZXJcbiAgICAvLyB0aGUgbXV0YXRpb24gcGhhc2UsIHNvIHRoYXQgdGhlIHByZXZpb3VzIHRyZWUgaXMgc3RpbGwgY3VycmVudCBkdXJpbmdcbiAgICAvLyBjb21wb25lbnRXaWxsVW5tb3VudCwgYnV0IGJlZm9yZSB0aGUgbGF5b3V0IHBoYXNlLCBzbyB0aGF0IHRoZSBmaW5pc2hlZFxuICAgIC8vIHdvcmsgaXMgY3VycmVudCBkdXJpbmcgY29tcG9uZW50RGlkTW91bnQvVXBkYXRlLlxuXG4gICAgcm9vdC5jdXJyZW50ID0gZmluaXNoZWRXb3JrOyAvLyBUaGUgbmV4dCBwaGFzZSBpcyB0aGUgbGF5b3V0IHBoYXNlLCB3aGVyZSB3ZSBjYWxsIGVmZmVjdHMgdGhhdCByZWFkXG4gICAgLy8gdGhlIGhvc3QgdHJlZSBhZnRlciBpdCdzIGJlZW4gbXV0YXRlZC4gVGhlIGlkaW9tYXRpYyB1c2UgY2FzZSBmb3IgdGhpcyBpc1xuICAgIC8vIGxheW91dCwgYnV0IGNsYXNzIGNvbXBvbmVudCBsaWZlY3ljbGVzIGFsc28gZmlyZSBoZXJlIGZvciBsZWdhY3kgcmVhc29ucy5cblxuICAgIG5leHRFZmZlY3QgPSBmaXJzdEVmZmVjdDtcblxuICAgIGRvIHtcbiAgICAgIHtcbiAgICAgICAgaW52b2tlR3VhcmRlZENhbGxiYWNrKG51bGwsIGNvbW1pdExheW91dEVmZmVjdHMsIG51bGwsIHJvb3QsIGxhbmVzKTtcblxuICAgICAgICBpZiAoaGFzQ2F1Z2h0RXJyb3IoKSkge1xuICAgICAgICAgIGlmICghKG5leHRFZmZlY3QgIT09IG51bGwpKSB7XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRocm93IEVycm9yKCBcIlNob3VsZCBiZSB3b3JraW5nIG9uIGFuIGVmZmVjdC5cIiApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBfZXJyb3IyID0gY2xlYXJDYXVnaHRFcnJvcigpO1xuXG4gICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IobmV4dEVmZmVjdCwgX2Vycm9yMik7XG4gICAgICAgICAgbmV4dEVmZmVjdCA9IG5leHRFZmZlY3QubmV4dEVmZmVjdDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gd2hpbGUgKG5leHRFZmZlY3QgIT09IG51bGwpO1xuXG4gICAgbmV4dEVmZmVjdCA9IG51bGw7IC8vIFRlbGwgU2NoZWR1bGVyIHRvIHlpZWxkIGF0IHRoZSBlbmQgb2YgdGhlIGZyYW1lLCBzbyB0aGUgYnJvd3NlciBoYXMgYW5cbiAgICAvLyBvcHBvcnR1bml0eSB0byBwYWludC5cblxuICAgIHJlcXVlc3RQYWludCgpO1xuXG4gICAge1xuICAgICAgcG9wSW50ZXJhY3Rpb25zKHByZXZJbnRlcmFjdGlvbnMpO1xuICAgIH1cblxuICAgIGV4ZWN1dGlvbkNvbnRleHQgPSBwcmV2RXhlY3V0aW9uQ29udGV4dDtcbiAgfSBlbHNlIHtcbiAgICAvLyBObyBlZmZlY3RzLlxuICAgIHJvb3QuY3VycmVudCA9IGZpbmlzaGVkV29yazsgLy8gTWVhc3VyZSB0aGVzZSBhbnl3YXkgc28gdGhlIGZsYW1lZ3JhcGggZXhwbGljaXRseSBzaG93cyB0aGF0IHRoZXJlIHdlcmVcbiAgICAvLyBubyBlZmZlY3RzLlxuICAgIC8vIFRPRE86IE1heWJlIHRoZXJlJ3MgYSBiZXR0ZXIgd2F5IHRvIHJlcG9ydCB0aGlzLlxuXG4gICAge1xuICAgICAgcmVjb3JkQ29tbWl0VGltZSgpO1xuICAgIH1cbiAgfVxuXG4gIHZhciByb290RGlkSGF2ZVBhc3NpdmVFZmZlY3RzID0gcm9vdERvZXNIYXZlUGFzc2l2ZUVmZmVjdHM7XG5cbiAgaWYgKHJvb3REb2VzSGF2ZVBhc3NpdmVFZmZlY3RzKSB7XG4gICAgLy8gVGhpcyBjb21taXQgaGFzIHBhc3NpdmUgZWZmZWN0cy4gU3Rhc2ggYSByZWZlcmVuY2UgdG8gdGhlbS4gQnV0IGRvbid0XG4gICAgLy8gc2NoZWR1bGUgYSBjYWxsYmFjayB1bnRpbCBhZnRlciBmbHVzaGluZyBsYXlvdXQgd29yay5cbiAgICByb290RG9lc0hhdmVQYXNzaXZlRWZmZWN0cyA9IGZhbHNlO1xuICAgIHJvb3RXaXRoUGVuZGluZ1Bhc3NpdmVFZmZlY3RzID0gcm9vdDtcbiAgICBwZW5kaW5nUGFzc2l2ZUVmZmVjdHNMYW5lcyA9IGxhbmVzO1xuICAgIHBlbmRpbmdQYXNzaXZlRWZmZWN0c1JlbmRlclByaW9yaXR5ID0gcmVuZGVyUHJpb3JpdHlMZXZlbDtcbiAgfSBlbHNlIHtcbiAgICAvLyBXZSBhcmUgZG9uZSB3aXRoIHRoZSBlZmZlY3QgY2hhaW4gYXQgdGhpcyBwb2ludCBzbyBsZXQncyBjbGVhciB0aGVcbiAgICAvLyBuZXh0RWZmZWN0IHBvaW50ZXJzIHRvIGFzc2lzdCB3aXRoIEdDLiBJZiB3ZSBoYXZlIHBhc3NpdmUgZWZmZWN0cywgd2UnbGxcbiAgICAvLyBjbGVhciB0aGlzIGluIGZsdXNoUGFzc2l2ZUVmZmVjdHMuXG4gICAgbmV4dEVmZmVjdCA9IGZpcnN0RWZmZWN0O1xuXG4gICAgd2hpbGUgKG5leHRFZmZlY3QgIT09IG51bGwpIHtcbiAgICAgIHZhciBuZXh0TmV4dEVmZmVjdCA9IG5leHRFZmZlY3QubmV4dEVmZmVjdDtcbiAgICAgIG5leHRFZmZlY3QubmV4dEVmZmVjdCA9IG51bGw7XG5cbiAgICAgIGlmIChuZXh0RWZmZWN0LmZsYWdzICYgRGVsZXRpb24pIHtcbiAgICAgICAgZGV0YWNoRmliZXJBZnRlckVmZmVjdHMobmV4dEVmZmVjdCk7XG4gICAgICB9XG5cbiAgICAgIG5leHRFZmZlY3QgPSBuZXh0TmV4dEVmZmVjdDtcbiAgICB9XG4gIH0gLy8gUmVhZCB0aGlzIGFnYWluLCBzaW5jZSBhbiBlZmZlY3QgbWlnaHQgaGF2ZSB1cGRhdGVkIGl0XG5cblxuICByZW1haW5pbmdMYW5lcyA9IHJvb3QucGVuZGluZ0xhbmVzOyAvLyBDaGVjayBpZiB0aGVyZSdzIHJlbWFpbmluZyB3b3JrIG9uIHRoaXMgcm9vdFxuXG4gIGlmIChyZW1haW5pbmdMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgIHtcbiAgICAgIGlmIChzcGF3bmVkV29ya0R1cmluZ1JlbmRlciAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgZXhwaXJhdGlvblRpbWVzID0gc3Bhd25lZFdvcmtEdXJpbmdSZW5kZXI7XG4gICAgICAgIHNwYXduZWRXb3JrRHVyaW5nUmVuZGVyID0gbnVsbDtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cGlyYXRpb25UaW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHNjaGVkdWxlSW50ZXJhY3Rpb25zKHJvb3QsIGV4cGlyYXRpb25UaW1lc1tpXSwgcm9vdC5tZW1vaXplZEludGVyYWN0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc2NoZWR1bGVQZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIHJlbWFpbmluZ0xhbmVzKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gSWYgdGhlcmUncyBubyByZW1haW5pbmcgd29yaywgd2UgY2FuIGNsZWFyIHRoZSBzZXQgb2YgYWxyZWFkeSBmYWlsZWRcbiAgICAvLyBlcnJvciBib3VuZGFyaWVzLlxuICAgIGxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkID0gbnVsbDtcbiAgfVxuXG4gIHtcbiAgICBpZiAoIXJvb3REaWRIYXZlUGFzc2l2ZUVmZmVjdHMpIHtcbiAgICAgIC8vIElmIHRoZXJlIGFyZSBubyBwYXNzaXZlIGVmZmVjdHMsIHRoZW4gd2UgY2FuIGNvbXBsZXRlIHRoZSBwZW5kaW5nIGludGVyYWN0aW9ucy5cbiAgICAgIC8vIE90aGVyd2lzZSwgd2UnbGwgd2FpdCB1bnRpbCBhZnRlciB0aGUgcGFzc2l2ZSBlZmZlY3RzIGFyZSBmbHVzaGVkLlxuICAgICAgLy8gV2FpdCB0byBkbyB0aGlzIHVudGlsIGFmdGVyIHJlbWFpbmluZyB3b3JrIGhhcyBiZWVuIHNjaGVkdWxlZCxcbiAgICAgIC8vIHNvIHRoYXQgd2UgZG9uJ3QgcHJlbWF0dXJlbHkgc2lnbmFsIGNvbXBsZXRlIGZvciBpbnRlcmFjdGlvbnMgd2hlbiB0aGVyZSdzIGUuZy4gaGlkZGVuIHdvcmsuXG4gICAgICBmaW5pc2hQZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIGxhbmVzKTtcbiAgICB9XG4gIH1cblxuICBpZiAocmVtYWluaW5nTGFuZXMgPT09IFN5bmNMYW5lKSB7XG4gICAgLy8gQ291bnQgdGhlIG51bWJlciBvZiB0aW1lcyB0aGUgcm9vdCBzeW5jaHJvbm91c2x5IHJlLXJlbmRlcnMgd2l0aG91dFxuICAgIC8vIGZpbmlzaGluZy4gSWYgdGhlcmUgYXJlIHRvbyBtYW55LCBpdCBpbmRpY2F0ZXMgYW4gaW5maW5pdGUgdXBkYXRlIGxvb3AuXG4gICAgaWYgKHJvb3QgPT09IHJvb3RXaXRoTmVzdGVkVXBkYXRlcykge1xuICAgICAgbmVzdGVkVXBkYXRlQ291bnQrKztcbiAgICB9IGVsc2Uge1xuICAgICAgbmVzdGVkVXBkYXRlQ291bnQgPSAwO1xuICAgICAgcm9vdFdpdGhOZXN0ZWRVcGRhdGVzID0gcm9vdDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbmVzdGVkVXBkYXRlQ291bnQgPSAwO1xuICB9XG5cbiAgb25Db21taXRSb290KGZpbmlzaGVkV29yay5zdGF0ZU5vZGUsIHJlbmRlclByaW9yaXR5TGV2ZWwpO1xuXG4gIHtcbiAgICBvbkNvbW1pdFJvb3QkMSgpO1xuICB9IC8vIEFsd2F5cyBjYWxsIHRoaXMgYmVmb3JlIGV4aXRpbmcgYGNvbW1pdFJvb3RgLCB0byBlbnN1cmUgdGhhdCBhbnlcbiAgLy8gYWRkaXRpb25hbCB3b3JrIG9uIHRoaXMgcm9vdCBpcyBzY2hlZHVsZWQuXG5cblxuICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCwgbm93KCkpO1xuXG4gIGlmIChoYXNVbmNhdWdodEVycm9yKSB7XG4gICAgaGFzVW5jYXVnaHRFcnJvciA9IGZhbHNlO1xuICAgIHZhciBfZXJyb3IzID0gZmlyc3RVbmNhdWdodEVycm9yO1xuICAgIGZpcnN0VW5jYXVnaHRFcnJvciA9IG51bGw7XG4gICAgdGhyb3cgX2Vycm9yMztcbiAgfVxuXG4gIGlmICgoZXhlY3V0aW9uQ29udGV4dCAmIExlZ2FjeVVuYmF0Y2hlZENvbnRleHQpICE9PSBOb0NvbnRleHQpIHtcbiAgICAvLyBhIFJlYWN0RE9NLnJlbmRlci1lZCByb290IGluc2lkZSBvZiBiYXRjaGVkVXBkYXRlcy4gVGhlIGNvbW1pdCBmaXJlZFxuICAgIC8vIHN5bmNocm9ub3VzbHksIGJ1dCBsYXlvdXQgdXBkYXRlcyBzaG91bGQgYmUgZGVmZXJyZWQgdW50aWwgdGhlIGVuZFxuICAgIC8vIG9mIHRoZSBiYXRjaC5cblxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH0gLy8gSWYgbGF5b3V0IHdvcmsgd2FzIHNjaGVkdWxlZCwgZmx1c2ggaXQgbm93LlxuXG5cbiAgZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZSgpO1xuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBjb21taXRCZWZvcmVNdXRhdGlvbkVmZmVjdHMoKSB7XG4gIHdoaWxlIChuZXh0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgdmFyIGN1cnJlbnQgPSBuZXh0RWZmZWN0LmFsdGVybmF0ZTtcblxuICAgIGlmICghc2hvdWxkRmlyZUFmdGVyQWN0aXZlSW5zdGFuY2VCbHVyICYmIGZvY3VzZWRJbnN0YW5jZUhhbmRsZSAhPT0gbnVsbCkge1xuICAgICAgaWYgKChuZXh0RWZmZWN0LmZsYWdzICYgRGVsZXRpb24pICE9PSBOb0ZsYWdzKSB7XG4gICAgICAgIGlmIChkb2VzRmliZXJDb250YWluKG5leHRFZmZlY3QsIGZvY3VzZWRJbnN0YW5jZUhhbmRsZSkpIHtcbiAgICAgICAgICBzaG91bGRGaXJlQWZ0ZXJBY3RpdmVJbnN0YW5jZUJsdXIgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUT0RPOiBNb3ZlIHRoaXMgb3V0IG9mIHRoZSBob3QgcGF0aCB1c2luZyBhIGRlZGljYXRlZCBlZmZlY3QgdGFnLlxuICAgICAgICBpZiAobmV4dEVmZmVjdC50YWcgPT09IFN1c3BlbnNlQ29tcG9uZW50ICYmIGlzU3VzcGVuc2VCb3VuZGFyeUJlaW5nSGlkZGVuKGN1cnJlbnQsIG5leHRFZmZlY3QpICYmIGRvZXNGaWJlckNvbnRhaW4obmV4dEVmZmVjdCwgZm9jdXNlZEluc3RhbmNlSGFuZGxlKSkge1xuICAgICAgICAgIHNob3VsZEZpcmVBZnRlckFjdGl2ZUluc3RhbmNlQmx1ciA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZmxhZ3MgPSBuZXh0RWZmZWN0LmZsYWdzO1xuXG4gICAgaWYgKChmbGFncyAmIFNuYXBzaG90KSAhPT0gTm9GbGFncykge1xuICAgICAgc2V0Q3VycmVudEZpYmVyKG5leHRFZmZlY3QpO1xuICAgICAgY29tbWl0QmVmb3JlTXV0YXRpb25MaWZlQ3ljbGVzKGN1cnJlbnQsIG5leHRFZmZlY3QpO1xuICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgICB9XG5cbiAgICBpZiAoKGZsYWdzICYgUGFzc2l2ZSkgIT09IE5vRmxhZ3MpIHtcbiAgICAgIC8vIElmIHRoZXJlIGFyZSBwYXNzaXZlIGVmZmVjdHMsIHNjaGVkdWxlIGEgY2FsbGJhY2sgdG8gZmx1c2ggYXRcbiAgICAgIC8vIHRoZSBlYXJsaWVzdCBvcHBvcnR1bml0eS5cbiAgICAgIGlmICghcm9vdERvZXNIYXZlUGFzc2l2ZUVmZmVjdHMpIHtcbiAgICAgICAgcm9vdERvZXNIYXZlUGFzc2l2ZUVmZmVjdHMgPSB0cnVlO1xuICAgICAgICBzY2hlZHVsZUNhbGxiYWNrKE5vcm1hbFByaW9yaXR5JDEsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBmbHVzaFBhc3NpdmVFZmZlY3RzKCk7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIG5leHRFZmZlY3QgPSBuZXh0RWZmZWN0Lm5leHRFZmZlY3Q7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0TXV0YXRpb25FZmZlY3RzKHJvb3QsIHJlbmRlclByaW9yaXR5TGV2ZWwpIHtcbiAgLy8gVE9ETzogU2hvdWxkIHByb2JhYmx5IG1vdmUgdGhlIGJ1bGsgb2YgdGhpcyBmdW5jdGlvbiB0byBjb21taXRXb3JrLlxuICB3aGlsZSAobmV4dEVmZmVjdCAhPT0gbnVsbCkge1xuICAgIHNldEN1cnJlbnRGaWJlcihuZXh0RWZmZWN0KTtcbiAgICB2YXIgZmxhZ3MgPSBuZXh0RWZmZWN0LmZsYWdzO1xuXG4gICAgaWYgKGZsYWdzICYgQ29udGVudFJlc2V0KSB7XG4gICAgICBjb21taXRSZXNldFRleHRDb250ZW50KG5leHRFZmZlY3QpO1xuICAgIH1cblxuICAgIGlmIChmbGFncyAmIFJlZikge1xuICAgICAgdmFyIGN1cnJlbnQgPSBuZXh0RWZmZWN0LmFsdGVybmF0ZTtcblxuICAgICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgY29tbWl0RGV0YWNoUmVmKGN1cnJlbnQpO1xuICAgICAgfVxuICAgIH0gLy8gVGhlIGZvbGxvd2luZyBzd2l0Y2ggc3RhdGVtZW50IGlzIG9ubHkgY29uY2VybmVkIGFib3V0IHBsYWNlbWVudCxcbiAgICAvLyB1cGRhdGVzLCBhbmQgZGVsZXRpb25zLiBUbyBhdm9pZCBuZWVkaW5nIHRvIGFkZCBhIGNhc2UgZm9yIGV2ZXJ5IHBvc3NpYmxlXG4gICAgLy8gYml0bWFwIHZhbHVlLCB3ZSByZW1vdmUgdGhlIHNlY29uZGFyeSBlZmZlY3RzIGZyb20gdGhlIGVmZmVjdCB0YWcgYW5kXG4gICAgLy8gc3dpdGNoIG9uIHRoYXQgdmFsdWUuXG5cblxuICAgIHZhciBwcmltYXJ5RmxhZ3MgPSBmbGFncyAmIChQbGFjZW1lbnQgfCBVcGRhdGUgfCBEZWxldGlvbiB8IEh5ZHJhdGluZyk7XG5cbiAgICBzd2l0Y2ggKHByaW1hcnlGbGFncykge1xuICAgICAgY2FzZSBQbGFjZW1lbnQ6XG4gICAgICAgIHtcbiAgICAgICAgICBjb21taXRQbGFjZW1lbnQobmV4dEVmZmVjdCk7IC8vIENsZWFyIHRoZSBcInBsYWNlbWVudFwiIGZyb20gZWZmZWN0IHRhZyBzbyB0aGF0IHdlIGtub3cgdGhhdCB0aGlzIGlzXG4gICAgICAgICAgLy8gaW5zZXJ0ZWQsIGJlZm9yZSBhbnkgbGlmZS1jeWNsZXMgbGlrZSBjb21wb25lbnREaWRNb3VudCBnZXRzIGNhbGxlZC5cbiAgICAgICAgICAvLyBUT0RPOiBmaW5kRE9NTm9kZSBkb2Vzbid0IHJlbHkgb24gdGhpcyBhbnkgbW9yZSBidXQgaXNNb3VudGVkIGRvZXNcbiAgICAgICAgICAvLyBhbmQgaXNNb3VudGVkIGlzIGRlcHJlY2F0ZWQgYW55d2F5IHNvIHdlIHNob3VsZCBiZSBhYmxlIHRvIGtpbGwgdGhpcy5cblxuICAgICAgICAgIG5leHRFZmZlY3QuZmxhZ3MgJj0gflBsYWNlbWVudDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIFBsYWNlbWVudEFuZFVwZGF0ZTpcbiAgICAgICAge1xuICAgICAgICAgIC8vIFBsYWNlbWVudFxuICAgICAgICAgIGNvbW1pdFBsYWNlbWVudChuZXh0RWZmZWN0KTsgLy8gQ2xlYXIgdGhlIFwicGxhY2VtZW50XCIgZnJvbSBlZmZlY3QgdGFnIHNvIHRoYXQgd2Uga25vdyB0aGF0IHRoaXMgaXNcbiAgICAgICAgICAvLyBpbnNlcnRlZCwgYmVmb3JlIGFueSBsaWZlLWN5Y2xlcyBsaWtlIGNvbXBvbmVudERpZE1vdW50IGdldHMgY2FsbGVkLlxuXG4gICAgICAgICAgbmV4dEVmZmVjdC5mbGFncyAmPSB+UGxhY2VtZW50OyAvLyBVcGRhdGVcblxuICAgICAgICAgIHZhciBfY3VycmVudCA9IG5leHRFZmZlY3QuYWx0ZXJuYXRlO1xuICAgICAgICAgIGNvbW1pdFdvcmsoX2N1cnJlbnQsIG5leHRFZmZlY3QpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgSHlkcmF0aW5nOlxuICAgICAgICB7XG4gICAgICAgICAgbmV4dEVmZmVjdC5mbGFncyAmPSB+SHlkcmF0aW5nO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgSHlkcmF0aW5nQW5kVXBkYXRlOlxuICAgICAgICB7XG4gICAgICAgICAgbmV4dEVmZmVjdC5mbGFncyAmPSB+SHlkcmF0aW5nOyAvLyBVcGRhdGVcblxuICAgICAgICAgIHZhciBfY3VycmVudDIgPSBuZXh0RWZmZWN0LmFsdGVybmF0ZTtcbiAgICAgICAgICBjb21taXRXb3JrKF9jdXJyZW50MiwgbmV4dEVmZmVjdCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBVcGRhdGU6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgX2N1cnJlbnQzID0gbmV4dEVmZmVjdC5hbHRlcm5hdGU7XG4gICAgICAgICAgY29tbWl0V29yayhfY3VycmVudDMsIG5leHRFZmZlY3QpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgRGVsZXRpb246XG4gICAgICAgIHtcbiAgICAgICAgICBjb21taXREZWxldGlvbihyb290LCBuZXh0RWZmZWN0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7XG4gICAgbmV4dEVmZmVjdCA9IG5leHRFZmZlY3QubmV4dEVmZmVjdDtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRMYXlvdXRFZmZlY3RzKHJvb3QsIGNvbW1pdHRlZExhbmVzKSB7XG5cblxuICB3aGlsZSAobmV4dEVmZmVjdCAhPT0gbnVsbCkge1xuICAgIHNldEN1cnJlbnRGaWJlcihuZXh0RWZmZWN0KTtcbiAgICB2YXIgZmxhZ3MgPSBuZXh0RWZmZWN0LmZsYWdzO1xuXG4gICAgaWYgKGZsYWdzICYgKFVwZGF0ZSB8IENhbGxiYWNrKSkge1xuICAgICAgdmFyIGN1cnJlbnQgPSBuZXh0RWZmZWN0LmFsdGVybmF0ZTtcbiAgICAgIGNvbW1pdExpZmVDeWNsZXMocm9vdCwgY3VycmVudCwgbmV4dEVmZmVjdCk7XG4gICAgfVxuXG4gICAge1xuICAgICAgaWYgKGZsYWdzICYgUmVmKSB7XG4gICAgICAgIGNvbW1pdEF0dGFjaFJlZihuZXh0RWZmZWN0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICAgIG5leHRFZmZlY3QgPSBuZXh0RWZmZWN0Lm5leHRFZmZlY3Q7XG4gIH1cbn1cblxuZnVuY3Rpb24gZmx1c2hQYXNzaXZlRWZmZWN0cygpIHtcbiAgLy8gUmV0dXJucyB3aGV0aGVyIHBhc3NpdmUgZWZmZWN0cyB3ZXJlIGZsdXNoZWQuXG4gIGlmIChwZW5kaW5nUGFzc2l2ZUVmZmVjdHNSZW5kZXJQcmlvcml0eSAhPT0gTm9Qcmlvcml0eSQxKSB7XG4gICAgdmFyIHByaW9yaXR5TGV2ZWwgPSBwZW5kaW5nUGFzc2l2ZUVmZmVjdHNSZW5kZXJQcmlvcml0eSA+IE5vcm1hbFByaW9yaXR5JDEgPyBOb3JtYWxQcmlvcml0eSQxIDogcGVuZGluZ1Bhc3NpdmVFZmZlY3RzUmVuZGVyUHJpb3JpdHk7XG4gICAgcGVuZGluZ1Bhc3NpdmVFZmZlY3RzUmVuZGVyUHJpb3JpdHkgPSBOb1ByaW9yaXR5JDE7XG5cbiAgICB7XG4gICAgICByZXR1cm4gcnVuV2l0aFByaW9yaXR5JDEocHJpb3JpdHlMZXZlbCwgZmx1c2hQYXNzaXZlRWZmZWN0c0ltcGwpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGVucXVldWVQZW5kaW5nUGFzc2l2ZUhvb2tFZmZlY3RNb3VudChmaWJlciwgZWZmZWN0KSB7XG4gIHBlbmRpbmdQYXNzaXZlSG9va0VmZmVjdHNNb3VudC5wdXNoKGVmZmVjdCwgZmliZXIpO1xuXG4gIGlmICghcm9vdERvZXNIYXZlUGFzc2l2ZUVmZmVjdHMpIHtcbiAgICByb290RG9lc0hhdmVQYXNzaXZlRWZmZWN0cyA9IHRydWU7XG4gICAgc2NoZWR1bGVDYWxsYmFjayhOb3JtYWxQcmlvcml0eSQxLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmbHVzaFBhc3NpdmVFZmZlY3RzKCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9KTtcbiAgfVxufVxuZnVuY3Rpb24gZW5xdWV1ZVBlbmRpbmdQYXNzaXZlSG9va0VmZmVjdFVubW91bnQoZmliZXIsIGVmZmVjdCkge1xuICBwZW5kaW5nUGFzc2l2ZUhvb2tFZmZlY3RzVW5tb3VudC5wdXNoKGVmZmVjdCwgZmliZXIpO1xuXG4gIHtcbiAgICBmaWJlci5mbGFncyB8PSBQYXNzaXZlVW5tb3VudFBlbmRpbmdEZXY7XG4gICAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZTtcblxuICAgIGlmIChhbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgIGFsdGVybmF0ZS5mbGFncyB8PSBQYXNzaXZlVW5tb3VudFBlbmRpbmdEZXY7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFyb290RG9lc0hhdmVQYXNzaXZlRWZmZWN0cykge1xuICAgIHJvb3REb2VzSGF2ZVBhc3NpdmVFZmZlY3RzID0gdHJ1ZTtcbiAgICBzY2hlZHVsZUNhbGxiYWNrKE5vcm1hbFByaW9yaXR5JDEsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZsdXNoUGFzc2l2ZUVmZmVjdHMoKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGludm9rZVBhc3NpdmVFZmZlY3RDcmVhdGUoZWZmZWN0KSB7XG4gIHZhciBjcmVhdGUgPSBlZmZlY3QuY3JlYXRlO1xuICBlZmZlY3QuZGVzdHJveSA9IGNyZWF0ZSgpO1xufVxuXG5mdW5jdGlvbiBmbHVzaFBhc3NpdmVFZmZlY3RzSW1wbCgpIHtcbiAgaWYgKHJvb3RXaXRoUGVuZGluZ1Bhc3NpdmVFZmZlY3RzID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIHJvb3QgPSByb290V2l0aFBlbmRpbmdQYXNzaXZlRWZmZWN0cztcbiAgdmFyIGxhbmVzID0gcGVuZGluZ1Bhc3NpdmVFZmZlY3RzTGFuZXM7XG4gIHJvb3RXaXRoUGVuZGluZ1Bhc3NpdmVFZmZlY3RzID0gbnVsbDtcbiAgcGVuZGluZ1Bhc3NpdmVFZmZlY3RzTGFuZXMgPSBOb0xhbmVzO1xuXG4gIGlmICghKChleGVjdXRpb25Db250ZXh0ICYgKFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgPT09IE5vQ29udGV4dCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJDYW5ub3QgZmx1c2ggcGFzc2l2ZSBlZmZlY3RzIHdoaWxlIGFscmVhZHkgcmVuZGVyaW5nLlwiICk7XG4gICAgfVxuICB9XG5cbiAge1xuICAgIGlzRmx1c2hpbmdQYXNzaXZlRWZmZWN0cyA9IHRydWU7XG4gIH1cblxuICB2YXIgcHJldkV4ZWN1dGlvbkNvbnRleHQgPSBleGVjdXRpb25Db250ZXh0O1xuICBleGVjdXRpb25Db250ZXh0IHw9IENvbW1pdENvbnRleHQ7XG4gIHZhciBwcmV2SW50ZXJhY3Rpb25zID0gcHVzaEludGVyYWN0aW9ucyhyb290KTsgLy8gSXQncyBpbXBvcnRhbnQgdGhhdCBBTEwgcGVuZGluZyBwYXNzaXZlIGVmZmVjdCBkZXN0cm95IGZ1bmN0aW9ucyBhcmUgY2FsbGVkXG4gIC8vIGJlZm9yZSBBTlkgcGFzc2l2ZSBlZmZlY3QgY3JlYXRlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkLlxuICAvLyBPdGhlcndpc2UgZWZmZWN0cyBpbiBzaWJsaW5nIGNvbXBvbmVudHMgbWlnaHQgaW50ZXJmZXJlIHdpdGggZWFjaCBvdGhlci5cbiAgLy8gZS5nLiBhIGRlc3Ryb3kgZnVuY3Rpb24gaW4gb25lIGNvbXBvbmVudCBtYXkgdW5pbnRlbnRpb25hbGx5IG92ZXJyaWRlIGEgcmVmXG4gIC8vIHZhbHVlIHNldCBieSBhIGNyZWF0ZSBmdW5jdGlvbiBpbiBhbm90aGVyIGNvbXBvbmVudC5cbiAgLy8gTGF5b3V0IGVmZmVjdHMgaGF2ZSB0aGUgc2FtZSBjb25zdHJhaW50LlxuICAvLyBGaXJzdCBwYXNzOiBEZXN0cm95IHN0YWxlIHBhc3NpdmUgZWZmZWN0cy5cblxuICB2YXIgdW5tb3VudEVmZmVjdHMgPSBwZW5kaW5nUGFzc2l2ZUhvb2tFZmZlY3RzVW5tb3VudDtcbiAgcGVuZGluZ1Bhc3NpdmVIb29rRWZmZWN0c1VubW91bnQgPSBbXTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHVubW91bnRFZmZlY3RzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgdmFyIF9lZmZlY3QgPSB1bm1vdW50RWZmZWN0c1tpXTtcbiAgICB2YXIgZmliZXIgPSB1bm1vdW50RWZmZWN0c1tpICsgMV07XG4gICAgdmFyIGRlc3Ryb3kgPSBfZWZmZWN0LmRlc3Ryb3k7XG4gICAgX2VmZmVjdC5kZXN0cm95ID0gdW5kZWZpbmVkO1xuXG4gICAge1xuICAgICAgZmliZXIuZmxhZ3MgJj0gflBhc3NpdmVVbm1vdW50UGVuZGluZ0RldjtcbiAgICAgIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG5cbiAgICAgIGlmIChhbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgICAgYWx0ZXJuYXRlLmZsYWdzICY9IH5QYXNzaXZlVW5tb3VudFBlbmRpbmdEZXY7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBkZXN0cm95ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB7XG4gICAgICAgIHNldEN1cnJlbnRGaWJlcihmaWJlcik7XG5cbiAgICAgICAge1xuICAgICAgICAgIGludm9rZUd1YXJkZWRDYWxsYmFjayhudWxsLCBkZXN0cm95LCBudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXNDYXVnaHRFcnJvcigpKSB7XG4gICAgICAgICAgaWYgKCEoZmliZXIgIT09IG51bGwpKSB7XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRocm93IEVycm9yKCBcIlNob3VsZCBiZSB3b3JraW5nIG9uIGFuIGVmZmVjdC5cIiApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBlcnJvciA9IGNsZWFyQ2F1Z2h0RXJyb3IoKTtcbiAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaWJlciwgZXJyb3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gLy8gU2Vjb25kIHBhc3M6IENyZWF0ZSBuZXcgcGFzc2l2ZSBlZmZlY3RzLlxuXG5cbiAgdmFyIG1vdW50RWZmZWN0cyA9IHBlbmRpbmdQYXNzaXZlSG9va0VmZmVjdHNNb3VudDtcbiAgcGVuZGluZ1Bhc3NpdmVIb29rRWZmZWN0c01vdW50ID0gW107XG5cbiAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IG1vdW50RWZmZWN0cy5sZW5ndGg7IF9pICs9IDIpIHtcbiAgICB2YXIgX2VmZmVjdDIgPSBtb3VudEVmZmVjdHNbX2ldO1xuICAgIHZhciBfZmliZXIgPSBtb3VudEVmZmVjdHNbX2kgKyAxXTtcblxuICAgIHtcbiAgICAgIHNldEN1cnJlbnRGaWJlcihfZmliZXIpO1xuXG4gICAgICB7XG4gICAgICAgIGludm9rZUd1YXJkZWRDYWxsYmFjayhudWxsLCBpbnZva2VQYXNzaXZlRWZmZWN0Q3JlYXRlLCBudWxsLCBfZWZmZWN0Mik7XG4gICAgICB9XG5cbiAgICAgIGlmIChoYXNDYXVnaHRFcnJvcigpKSB7XG4gICAgICAgIGlmICghKF9maWJlciAhPT0gbnVsbCkpIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvciggXCJTaG91bGQgYmUgd29ya2luZyBvbiBhbiBlZmZlY3QuXCIgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgX2Vycm9yNCA9IGNsZWFyQ2F1Z2h0RXJyb3IoKTtcblxuICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihfZmliZXIsIF9lcnJvcjQpO1xuICAgICAgfVxuXG4gICAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICAgIH1cbiAgfSAvLyBOb3RlOiBUaGlzIGN1cnJlbnRseSBhc3N1bWVzIHRoZXJlIGFyZSBubyBwYXNzaXZlIGVmZmVjdHMgb24gdGhlIHJvb3QgZmliZXJcbiAgLy8gYmVjYXVzZSB0aGUgcm9vdCBpcyBub3QgcGFydCBvZiBpdHMgb3duIGVmZmVjdCBsaXN0LlxuICAvLyBUaGlzIGNvdWxkIGNoYW5nZSBpbiB0aGUgZnV0dXJlLlxuXG5cbiAgdmFyIGVmZmVjdCA9IHJvb3QuY3VycmVudC5maXJzdEVmZmVjdDtcblxuICB3aGlsZSAoZWZmZWN0ICE9PSBudWxsKSB7XG4gICAgdmFyIG5leHROZXh0RWZmZWN0ID0gZWZmZWN0Lm5leHRFZmZlY3Q7IC8vIFJlbW92ZSBuZXh0RWZmZWN0IHBvaW50ZXIgdG8gYXNzaXN0IEdDXG5cbiAgICBlZmZlY3QubmV4dEVmZmVjdCA9IG51bGw7XG5cbiAgICBpZiAoZWZmZWN0LmZsYWdzICYgRGVsZXRpb24pIHtcbiAgICAgIGRldGFjaEZpYmVyQWZ0ZXJFZmZlY3RzKGVmZmVjdCk7XG4gICAgfVxuXG4gICAgZWZmZWN0ID0gbmV4dE5leHRFZmZlY3Q7XG4gIH1cblxuICB7XG4gICAgcG9wSW50ZXJhY3Rpb25zKHByZXZJbnRlcmFjdGlvbnMpO1xuICAgIGZpbmlzaFBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgbGFuZXMpO1xuICB9XG5cbiAge1xuICAgIGlzRmx1c2hpbmdQYXNzaXZlRWZmZWN0cyA9IGZhbHNlO1xuICB9XG5cbiAgZXhlY3V0aW9uQ29udGV4dCA9IHByZXZFeGVjdXRpb25Db250ZXh0O1xuICBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlKCk7IC8vIElmIGFkZGl0aW9uYWwgcGFzc2l2ZSBlZmZlY3RzIHdlcmUgc2NoZWR1bGVkLCBpbmNyZW1lbnQgYSBjb3VudGVyLiBJZiB0aGlzXG4gIC8vIGV4Y2VlZHMgdGhlIGxpbWl0LCB3ZSdsbCBmaXJlIGEgd2FybmluZy5cblxuICBuZXN0ZWRQYXNzaXZlVXBkYXRlQ291bnQgPSByb290V2l0aFBlbmRpbmdQYXNzaXZlRWZmZWN0cyA9PT0gbnVsbCA/IDAgOiBuZXN0ZWRQYXNzaXZlVXBkYXRlQ291bnQgKyAxO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaXNBbHJlYWR5RmFpbGVkTGVnYWN5RXJyb3JCb3VuZGFyeShpbnN0YW5jZSkge1xuICByZXR1cm4gbGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQgIT09IG51bGwgJiYgbGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQuaGFzKGluc3RhbmNlKTtcbn1cbmZ1bmN0aW9uIG1hcmtMZWdhY3lFcnJvckJvdW5kYXJ5QXNGYWlsZWQoaW5zdGFuY2UpIHtcbiAgaWYgKGxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkID09PSBudWxsKSB7XG4gICAgbGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQgPSBuZXcgU2V0KFtpbnN0YW5jZV0pO1xuICB9IGVsc2Uge1xuICAgIGxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkLmFkZChpbnN0YW5jZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJlcGFyZVRvVGhyb3dVbmNhdWdodEVycm9yKGVycm9yKSB7XG4gIGlmICghaGFzVW5jYXVnaHRFcnJvcikge1xuICAgIGhhc1VuY2F1Z2h0RXJyb3IgPSB0cnVlO1xuICAgIGZpcnN0VW5jYXVnaHRFcnJvciA9IGVycm9yO1xuICB9XG59XG5cbnZhciBvblVuY2F1Z2h0RXJyb3IgPSBwcmVwYXJlVG9UaHJvd1VuY2F1Z2h0RXJyb3I7XG5cbmZ1bmN0aW9uIGNhcHR1cmVDb21taXRQaGFzZUVycm9yT25Sb290KHJvb3RGaWJlciwgc291cmNlRmliZXIsIGVycm9yKSB7XG4gIHZhciBlcnJvckluZm8gPSBjcmVhdGVDYXB0dXJlZFZhbHVlKGVycm9yLCBzb3VyY2VGaWJlcik7XG4gIHZhciB1cGRhdGUgPSBjcmVhdGVSb290RXJyb3JVcGRhdGUocm9vdEZpYmVyLCBlcnJvckluZm8sIFN5bmNMYW5lKTtcbiAgZW5xdWV1ZVVwZGF0ZShyb290RmliZXIsIHVwZGF0ZSk7XG4gIHZhciBldmVudFRpbWUgPSByZXF1ZXN0RXZlbnRUaW1lKCk7XG4gIHZhciByb290ID0gbWFya1VwZGF0ZUxhbmVGcm9tRmliZXJUb1Jvb3Qocm9vdEZpYmVyLCBTeW5jTGFuZSk7XG5cbiAgaWYgKHJvb3QgIT09IG51bGwpIHtcbiAgICBtYXJrUm9vdFVwZGF0ZWQocm9vdCwgU3luY0xhbmUsIGV2ZW50VGltZSk7XG4gICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QsIGV2ZW50VGltZSk7XG4gICAgc2NoZWR1bGVQZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIFN5bmNMYW5lKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihzb3VyY2VGaWJlciwgZXJyb3IpIHtcbiAgaWYgKHNvdXJjZUZpYmVyLnRhZyA9PT0gSG9zdFJvb3QpIHtcbiAgICAvLyBFcnJvciB3YXMgdGhyb3duIGF0IHRoZSByb290LiBUaGVyZSBpcyBubyBwYXJlbnQsIHNvIHRoZSByb290XG4gICAgLy8gaXRzZWxmIHNob3VsZCBjYXB0dXJlIGl0LlxuICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yT25Sb290KHNvdXJjZUZpYmVyLCBzb3VyY2VGaWJlciwgZXJyb3IpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBmaWJlciA9IHNvdXJjZUZpYmVyLnJldHVybjtcblxuICB3aGlsZSAoZmliZXIgIT09IG51bGwpIHtcbiAgICBpZiAoZmliZXIudGFnID09PSBIb3N0Um9vdCkge1xuICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3JPblJvb3QoZmliZXIsIHNvdXJjZUZpYmVyLCBlcnJvcik7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmIChmaWJlci50YWcgPT09IENsYXNzQ29tcG9uZW50KSB7XG4gICAgICB2YXIgY3RvciA9IGZpYmVyLnR5cGU7XG4gICAgICB2YXIgaW5zdGFuY2UgPSBmaWJlci5zdGF0ZU5vZGU7XG5cbiAgICAgIGlmICh0eXBlb2YgY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZENhdGNoID09PSAnZnVuY3Rpb24nICYmICFpc0FscmVhZHlGYWlsZWRMZWdhY3lFcnJvckJvdW5kYXJ5KGluc3RhbmNlKSkge1xuICAgICAgICB2YXIgZXJyb3JJbmZvID0gY3JlYXRlQ2FwdHVyZWRWYWx1ZShlcnJvciwgc291cmNlRmliZXIpO1xuICAgICAgICB2YXIgdXBkYXRlID0gY3JlYXRlQ2xhc3NFcnJvclVwZGF0ZShmaWJlciwgZXJyb3JJbmZvLCBTeW5jTGFuZSk7XG4gICAgICAgIGVucXVldWVVcGRhdGUoZmliZXIsIHVwZGF0ZSk7XG4gICAgICAgIHZhciBldmVudFRpbWUgPSByZXF1ZXN0RXZlbnRUaW1lKCk7XG4gICAgICAgIHZhciByb290ID0gbWFya1VwZGF0ZUxhbmVGcm9tRmliZXJUb1Jvb3QoZmliZXIsIFN5bmNMYW5lKTtcblxuICAgICAgICBpZiAocm9vdCAhPT0gbnVsbCkge1xuICAgICAgICAgIG1hcmtSb290VXBkYXRlZChyb290LCBTeW5jTGFuZSwgZXZlbnRUaW1lKTtcbiAgICAgICAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCwgZXZlbnRUaW1lKTtcbiAgICAgICAgICBzY2hlZHVsZVBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgU3luY0xhbmUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFRoaXMgY29tcG9uZW50IGhhcyBhbHJlYWR5IGJlZW4gdW5tb3VudGVkLlxuICAgICAgICAgIC8vIFdlIGNhbid0IHNjaGVkdWxlIGFueSBmb2xsb3cgdXAgd29yayBmb3IgdGhlIHJvb3QgYmVjYXVzZSB0aGUgZmliZXIgaXMgYWxyZWFkeSB1bm1vdW50ZWQsXG4gICAgICAgICAgLy8gYnV0IHdlIGNhbiBzdGlsbCBjYWxsIHRoZSBsb2ctb25seSBib3VuZGFyeSBzbyB0aGUgZXJyb3IgaXNuJ3Qgc3dhbGxvd2VkLlxuICAgICAgICAgIC8vXG4gICAgICAgICAgLy8gVE9ETyBUaGlzIGlzIG9ubHkgYSB0ZW1wb3JhcnkgYmFuZGFpZCBmb3IgdGhlIG9sZCByZWNvbmNpbGVyIGZvcmsuXG4gICAgICAgICAgLy8gV2UgY2FuIGRlbGV0ZSB0aGlzIHNwZWNpYWwgY2FzZSBvbmNlIHRoZSBuZXcgZm9yayBpcyBtZXJnZWQuXG4gICAgICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRDYXRjaCA9PT0gJ2Z1bmN0aW9uJyAmJiAhaXNBbHJlYWR5RmFpbGVkTGVnYWN5RXJyb3JCb3VuZGFyeShpbnN0YW5jZSkpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGluc3RhbmNlLmNvbXBvbmVudERpZENhdGNoKGVycm9yLCBlcnJvckluZm8pO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3JUb0lnbm9yZSkgey8vIFRPRE8gSWdub3JlIHRoaXMgZXJyb3I/IFJldGhyb3cgaXQ/XG4gICAgICAgICAgICAgIC8vIFRoaXMgaXMga2luZCBvZiBhbiBlZGdlIGNhc2UuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZpYmVyID0gZmliZXIucmV0dXJuO1xuICB9XG59XG5mdW5jdGlvbiBwaW5nU3VzcGVuZGVkUm9vdChyb290LCB3YWtlYWJsZSwgcGluZ2VkTGFuZXMpIHtcbiAgdmFyIHBpbmdDYWNoZSA9IHJvb3QucGluZ0NhY2hlO1xuXG4gIGlmIChwaW5nQ2FjaGUgIT09IG51bGwpIHtcbiAgICAvLyBUaGUgd2FrZWFibGUgcmVzb2x2ZWQsIHNvIHdlIG5vIGxvbmdlciBuZWVkIHRvIG1lbW9pemUsIGJlY2F1c2UgaXQgd2lsbFxuICAgIC8vIG5ldmVyIGJlIHRocm93biBhZ2Fpbi5cbiAgICBwaW5nQ2FjaGUuZGVsZXRlKHdha2VhYmxlKTtcbiAgfVxuXG4gIHZhciBldmVudFRpbWUgPSByZXF1ZXN0RXZlbnRUaW1lKCk7XG4gIG1hcmtSb290UGluZ2VkKHJvb3QsIHBpbmdlZExhbmVzKTtcblxuICBpZiAod29ya0luUHJvZ3Jlc3NSb290ID09PSByb290ICYmIGlzU3Vic2V0T2ZMYW5lcyh3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcywgcGluZ2VkTGFuZXMpKSB7XG4gICAgLy8gUmVjZWl2ZWQgYSBwaW5nIGF0IHRoZSBzYW1lIHByaW9yaXR5IGxldmVsIGF0IHdoaWNoIHdlJ3JlIGN1cnJlbnRseVxuICAgIC8vIHJlbmRlcmluZy4gV2UgbWlnaHQgd2FudCB0byByZXN0YXJ0IHRoaXMgcmVuZGVyLiBUaGlzIHNob3VsZCBtaXJyb3JcbiAgICAvLyB0aGUgbG9naWMgb2Ygd2hldGhlciBvciBub3QgYSByb290IHN1c3BlbmRzIG9uY2UgaXQgY29tcGxldGVzLlxuICAgIC8vIFRPRE86IElmIHdlJ3JlIHJlbmRlcmluZyBzeW5jIGVpdGhlciBkdWUgdG8gU3luYywgQmF0Y2hlZCBvciBleHBpcmVkLFxuICAgIC8vIHdlIHNob3VsZCBwcm9iYWJseSBuZXZlciByZXN0YXJ0LlxuICAgIC8vIElmIHdlJ3JlIHN1c3BlbmRlZCB3aXRoIGRlbGF5LCBvciBpZiBpdCdzIGEgcmV0cnksIHdlJ2xsIGFsd2F5cyBzdXNwZW5kXG4gICAgLy8gc28gd2UgY2FuIGFsd2F5cyByZXN0YXJ0LlxuICAgIGlmICh3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID09PSBSb290U3VzcGVuZGVkV2l0aERlbGF5IHx8IHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPT09IFJvb3RTdXNwZW5kZWQgJiYgaW5jbHVkZXNPbmx5UmV0cmllcyh3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcykgJiYgbm93KCkgLSBnbG9iYWxNb3N0UmVjZW50RmFsbGJhY2tUaW1lIDwgRkFMTEJBQ0tfVEhST1RUTEVfTVMpIHtcbiAgICAgIC8vIFJlc3RhcnQgZnJvbSB0aGUgcm9vdC5cbiAgICAgIHByZXBhcmVGcmVzaFN0YWNrKHJvb3QsIE5vTGFuZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBFdmVuIHRob3VnaCB3ZSBjYW4ndCByZXN0YXJ0IHJpZ2h0IG5vdywgd2UgbWlnaHQgZ2V0IGFuXG4gICAgICAvLyBvcHBvcnR1bml0eSBsYXRlci4gU28gd2UgbWFyayB0aGlzIHJlbmRlciBhcyBoYXZpbmcgYSBwaW5nLlxuICAgICAgd29ya0luUHJvZ3Jlc3NSb290UGluZ2VkTGFuZXMgPSBtZXJnZUxhbmVzKHdvcmtJblByb2dyZXNzUm9vdFBpbmdlZExhbmVzLCBwaW5nZWRMYW5lcyk7XG4gICAgfVxuICB9XG5cbiAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QsIGV2ZW50VGltZSk7XG4gIHNjaGVkdWxlUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCBwaW5nZWRMYW5lcyk7XG59XG5cbmZ1bmN0aW9uIHJldHJ5VGltZWRPdXRCb3VuZGFyeShib3VuZGFyeUZpYmVyLCByZXRyeUxhbmUpIHtcbiAgLy8gVGhlIGJvdW5kYXJ5IGZpYmVyIChhIFN1c3BlbnNlIGNvbXBvbmVudCBvciBTdXNwZW5zZUxpc3QgY29tcG9uZW50KVxuICAvLyBwcmV2aW91c2x5IHdhcyByZW5kZXJlZCBpbiBpdHMgZmFsbGJhY2sgc3RhdGUuIE9uZSBvZiB0aGUgcHJvbWlzZXMgdGhhdFxuICAvLyBzdXNwZW5kZWQgaXQgaGFzIHJlc29sdmVkLCB3aGljaCBtZWFucyBhdCBsZWFzdCBwYXJ0IG9mIHRoZSB0cmVlIHdhc1xuICAvLyBsaWtlbHkgdW5ibG9ja2VkLiBUcnkgcmVuZGVyaW5nIGFnYWluLCBhdCBhIG5ldyBleHBpcmF0aW9uIHRpbWUuXG4gIGlmIChyZXRyeUxhbmUgPT09IE5vTGFuZSkge1xuICAgIHJldHJ5TGFuZSA9IHJlcXVlc3RSZXRyeUxhbmUoYm91bmRhcnlGaWJlcik7XG4gIH0gLy8gVE9ETzogU3BlY2lhbCBjYXNlIGlkbGUgcHJpb3JpdHk/XG5cblxuICB2YXIgZXZlbnRUaW1lID0gcmVxdWVzdEV2ZW50VGltZSgpO1xuICB2YXIgcm9vdCA9IG1hcmtVcGRhdGVMYW5lRnJvbUZpYmVyVG9Sb290KGJvdW5kYXJ5RmliZXIsIHJldHJ5TGFuZSk7XG5cbiAgaWYgKHJvb3QgIT09IG51bGwpIHtcbiAgICBtYXJrUm9vdFVwZGF0ZWQocm9vdCwgcmV0cnlMYW5lLCBldmVudFRpbWUpO1xuICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290LCBldmVudFRpbWUpO1xuICAgIHNjaGVkdWxlUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCByZXRyeUxhbmUpO1xuICB9XG59XG5mdW5jdGlvbiByZXNvbHZlUmV0cnlXYWtlYWJsZShib3VuZGFyeUZpYmVyLCB3YWtlYWJsZSkge1xuICB2YXIgcmV0cnlMYW5lID0gTm9MYW5lOyAvLyBEZWZhdWx0XG5cbiAgdmFyIHJldHJ5Q2FjaGU7XG5cbiAge1xuICAgIHJldHJ5Q2FjaGUgPSBib3VuZGFyeUZpYmVyLnN0YXRlTm9kZTtcbiAgfVxuXG4gIGlmIChyZXRyeUNhY2hlICE9PSBudWxsKSB7XG4gICAgLy8gVGhlIHdha2VhYmxlIHJlc29sdmVkLCBzbyB3ZSBubyBsb25nZXIgbmVlZCB0byBtZW1vaXplLCBiZWNhdXNlIGl0IHdpbGxcbiAgICAvLyBuZXZlciBiZSB0aHJvd24gYWdhaW4uXG4gICAgcmV0cnlDYWNoZS5kZWxldGUod2FrZWFibGUpO1xuICB9XG5cbiAgcmV0cnlUaW1lZE91dEJvdW5kYXJ5KGJvdW5kYXJ5RmliZXIsIHJldHJ5TGFuZSk7XG59IC8vIENvbXB1dGVzIHRoZSBuZXh0IEp1c3QgTm90aWNlYWJsZSBEaWZmZXJlbmNlIChKTkQpIGJvdW5kYXJ5LlxuLy8gVGhlIHRoZW9yeSBpcyB0aGF0IGEgcGVyc29uIGNhbid0IHRlbGwgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBzbWFsbCBkaWZmZXJlbmNlcyBpbiB0aW1lLlxuLy8gVGhlcmVmb3JlLCBpZiB3ZSB3YWl0IGEgYml0IGxvbmdlciB0aGFuIG5lY2Vzc2FyeSB0aGF0IHdvbid0IHRyYW5zbGF0ZSB0byBhIG5vdGljZWFibGVcbi8vIGRpZmZlcmVuY2UgaW4gdGhlIGV4cGVyaWVuY2UuIEhvd2V2ZXIsIHdhaXRpbmcgZm9yIGxvbmdlciBtaWdodCBtZWFuIHRoYXQgd2UgY2FuIGF2b2lkXG4vLyBzaG93aW5nIGFuIGludGVybWVkaWF0ZSBsb2FkaW5nIHN0YXRlLiBUaGUgbG9uZ2VyIHdlIGhhdmUgYWxyZWFkeSB3YWl0ZWQsIHRoZSBoYXJkZXIgaXRcbi8vIGlzIHRvIHRlbGwgc21hbGwgZGlmZmVyZW5jZXMgaW4gdGltZS4gVGhlcmVmb3JlLCB0aGUgbG9uZ2VyIHdlJ3ZlIGFscmVhZHkgd2FpdGVkLFxuLy8gdGhlIGxvbmdlciB3ZSBjYW4gd2FpdCBhZGRpdGlvbmFsbHkuIEF0IHNvbWUgcG9pbnQgd2UgaGF2ZSB0byBnaXZlIHVwIHRob3VnaC5cbi8vIFdlIHBpY2sgYSB0cmFpbiBtb2RlbCB3aGVyZSB0aGUgbmV4dCBib3VuZGFyeSBjb21taXRzIGF0IGEgY29uc2lzdGVudCBzY2hlZHVsZS5cbi8vIFRoZXNlIHBhcnRpY3VsYXIgbnVtYmVycyBhcmUgdmFndWUgZXN0aW1hdGVzLiBXZSBleHBlY3QgdG8gYWRqdXN0IHRoZW0gYmFzZWQgb24gcmVzZWFyY2guXG5cbmZ1bmN0aW9uIGpuZCh0aW1lRWxhcHNlZCkge1xuICByZXR1cm4gdGltZUVsYXBzZWQgPCAxMjAgPyAxMjAgOiB0aW1lRWxhcHNlZCA8IDQ4MCA/IDQ4MCA6IHRpbWVFbGFwc2VkIDwgMTA4MCA/IDEwODAgOiB0aW1lRWxhcHNlZCA8IDE5MjAgPyAxOTIwIDogdGltZUVsYXBzZWQgPCAzMDAwID8gMzAwMCA6IHRpbWVFbGFwc2VkIDwgNDMyMCA/IDQzMjAgOiBjZWlsKHRpbWVFbGFwc2VkIC8gMTk2MCkgKiAxOTYwO1xufVxuXG5mdW5jdGlvbiBjaGVja0Zvck5lc3RlZFVwZGF0ZXMoKSB7XG4gIGlmIChuZXN0ZWRVcGRhdGVDb3VudCA+IE5FU1RFRF9VUERBVEVfTElNSVQpIHtcbiAgICBuZXN0ZWRVcGRhdGVDb3VudCA9IDA7XG4gICAgcm9vdFdpdGhOZXN0ZWRVcGRhdGVzID0gbnVsbDtcblxuICAgIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiTWF4aW11bSB1cGRhdGUgZGVwdGggZXhjZWVkZWQuIFRoaXMgY2FuIGhhcHBlbiB3aGVuIGEgY29tcG9uZW50IHJlcGVhdGVkbHkgY2FsbHMgc2V0U3RhdGUgaW5zaWRlIGNvbXBvbmVudFdpbGxVcGRhdGUgb3IgY29tcG9uZW50RGlkVXBkYXRlLiBSZWFjdCBsaW1pdHMgdGhlIG51bWJlciBvZiBuZXN0ZWQgdXBkYXRlcyB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzLlwiICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAge1xuICAgIGlmIChuZXN0ZWRQYXNzaXZlVXBkYXRlQ291bnQgPiBORVNURURfUEFTU0lWRV9VUERBVEVfTElNSVQpIHtcbiAgICAgIG5lc3RlZFBhc3NpdmVVcGRhdGVDb3VudCA9IDA7XG5cbiAgICAgIGVycm9yKCdNYXhpbXVtIHVwZGF0ZSBkZXB0aCBleGNlZWRlZC4gVGhpcyBjYW4gaGFwcGVuIHdoZW4gYSBjb21wb25lbnQgJyArIFwiY2FsbHMgc2V0U3RhdGUgaW5zaWRlIHVzZUVmZmVjdCwgYnV0IHVzZUVmZmVjdCBlaXRoZXIgZG9lc24ndCBcIiArICdoYXZlIGEgZGVwZW5kZW5jeSBhcnJheSwgb3Igb25lIG9mIHRoZSBkZXBlbmRlbmNpZXMgY2hhbmdlcyBvbiAnICsgJ2V2ZXJ5IHJlbmRlci4nKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmx1c2hSZW5kZXJQaGFzZVN0cmljdE1vZGVXYXJuaW5nc0luREVWKCkge1xuICB7XG4gICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MuZmx1c2hMZWdhY3lDb250ZXh0V2FybmluZygpO1xuXG4gICAge1xuICAgICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MuZmx1c2hQZW5kaW5nVW5zYWZlTGlmZWN5Y2xlV2FybmluZ3MoKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIGRpZFdhcm5TdGF0ZVVwZGF0ZUZvck5vdFlldE1vdW50ZWRDb21wb25lbnQgPSBudWxsO1xuXG5mdW5jdGlvbiB3YXJuQWJvdXRVcGRhdGVPbk5vdFlldE1vdW50ZWRGaWJlckluREVWKGZpYmVyKSB7XG4gIHtcbiAgICBpZiAoKGV4ZWN1dGlvbkNvbnRleHQgJiBSZW5kZXJDb250ZXh0KSAhPT0gTm9Db250ZXh0KSB7XG4gICAgICAvLyBXZSBsZXQgdGhlIG90aGVyIHdhcm5pbmcgYWJvdXQgcmVuZGVyIHBoYXNlIHVwZGF0ZXMgZGVhbCB3aXRoIHRoaXMgb25lLlxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghKGZpYmVyLm1vZGUgJiAoQmxvY2tpbmdNb2RlIHwgQ29uY3VycmVudE1vZGUpKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB0YWcgPSBmaWJlci50YWc7XG5cbiAgICBpZiAodGFnICE9PSBJbmRldGVybWluYXRlQ29tcG9uZW50ICYmIHRhZyAhPT0gSG9zdFJvb3QgJiYgdGFnICE9PSBDbGFzc0NvbXBvbmVudCAmJiB0YWcgIT09IEZ1bmN0aW9uQ29tcG9uZW50ICYmIHRhZyAhPT0gRm9yd2FyZFJlZiAmJiB0YWcgIT09IE1lbW9Db21wb25lbnQgJiYgdGFnICE9PSBTaW1wbGVNZW1vQ29tcG9uZW50ICYmIHRhZyAhPT0gQmxvY2spIHtcbiAgICAgIC8vIE9ubHkgd2FybiBmb3IgdXNlci1kZWZpbmVkIGNvbXBvbmVudHMsIG5vdCBpbnRlcm5hbCBvbmVzIGxpa2UgU3VzcGVuc2UuXG4gICAgICByZXR1cm47XG4gICAgfSAvLyBXZSBzaG93IHRoZSB3aG9sZSBzdGFjayBidXQgZGVkdXBlIG9uIHRoZSB0b3AgY29tcG9uZW50J3MgbmFtZSBiZWNhdXNlXG4gICAgLy8gdGhlIHByb2JsZW1hdGljIGNvZGUgYWxtb3N0IGFsd2F5cyBsaWVzIGluc2lkZSB0aGF0IGNvbXBvbmVudC5cblxuXG4gICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpIHx8ICdSZWFjdENvbXBvbmVudCc7XG5cbiAgICBpZiAoZGlkV2FyblN0YXRlVXBkYXRlRm9yTm90WWV0TW91bnRlZENvbXBvbmVudCAhPT0gbnVsbCkge1xuICAgICAgaWYgKGRpZFdhcm5TdGF0ZVVwZGF0ZUZvck5vdFlldE1vdW50ZWRDb21wb25lbnQuaGFzKGNvbXBvbmVudE5hbWUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZGlkV2FyblN0YXRlVXBkYXRlRm9yTm90WWV0TW91bnRlZENvbXBvbmVudC5hZGQoY29tcG9uZW50TmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpZFdhcm5TdGF0ZVVwZGF0ZUZvck5vdFlldE1vdW50ZWRDb21wb25lbnQgPSBuZXcgU2V0KFtjb21wb25lbnROYW1lXSk7XG4gICAgfVxuXG4gICAgdmFyIHByZXZpb3VzRmliZXIgPSBjdXJyZW50O1xuXG4gICAgdHJ5IHtcbiAgICAgIHNldEN1cnJlbnRGaWJlcihmaWJlcik7XG5cbiAgICAgIGVycm9yKFwiQ2FuJ3QgcGVyZm9ybSBhIFJlYWN0IHN0YXRlIHVwZGF0ZSBvbiBhIGNvbXBvbmVudCB0aGF0IGhhc24ndCBtb3VudGVkIHlldC4gXCIgKyAnVGhpcyBpbmRpY2F0ZXMgdGhhdCB5b3UgaGF2ZSBhIHNpZGUtZWZmZWN0IGluIHlvdXIgcmVuZGVyIGZ1bmN0aW9uIHRoYXQgJyArICdhc3luY2hyb25vdXNseSBsYXRlciBjYWxscyB0cmllcyB0byB1cGRhdGUgdGhlIGNvbXBvbmVudC4gTW92ZSB0aGlzIHdvcmsgdG8gJyArICd1c2VFZmZlY3QgaW5zdGVhZC4nKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKHByZXZpb3VzRmliZXIpIHtcbiAgICAgICAgc2V0Q3VycmVudEZpYmVyKGZpYmVyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciBkaWRXYXJuU3RhdGVVcGRhdGVGb3JVbm1vdW50ZWRDb21wb25lbnQgPSBudWxsO1xuXG5mdW5jdGlvbiB3YXJuQWJvdXRVcGRhdGVPblVubW91bnRlZEZpYmVySW5ERVYoZmliZXIpIHtcbiAge1xuICAgIHZhciB0YWcgPSBmaWJlci50YWc7XG5cbiAgICBpZiAodGFnICE9PSBIb3N0Um9vdCAmJiB0YWcgIT09IENsYXNzQ29tcG9uZW50ICYmIHRhZyAhPT0gRnVuY3Rpb25Db21wb25lbnQgJiYgdGFnICE9PSBGb3J3YXJkUmVmICYmIHRhZyAhPT0gTWVtb0NvbXBvbmVudCAmJiB0YWcgIT09IFNpbXBsZU1lbW9Db21wb25lbnQgJiYgdGFnICE9PSBCbG9jaykge1xuICAgICAgLy8gT25seSB3YXJuIGZvciB1c2VyLWRlZmluZWQgY29tcG9uZW50cywgbm90IGludGVybmFsIG9uZXMgbGlrZSBTdXNwZW5zZS5cbiAgICAgIHJldHVybjtcbiAgICB9IC8vIElmIHRoZXJlIGFyZSBwZW5kaW5nIHBhc3NpdmUgZWZmZWN0cyB1bm1vdW50cyBmb3IgdGhpcyBGaWJlcixcbiAgICAvLyB3ZSBjYW4gYXNzdW1lIHRoYXQgdGhleSB3b3VsZCBoYXZlIHByZXZlbnRlZCB0aGlzIHVwZGF0ZS5cblxuXG4gICAgaWYgKChmaWJlci5mbGFncyAmIFBhc3NpdmVVbm1vdW50UGVuZGluZ0RldikgIT09IE5vRmxhZ3MpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIFdlIHNob3cgdGhlIHdob2xlIHN0YWNrIGJ1dCBkZWR1cGUgb24gdGhlIHRvcCBjb21wb25lbnQncyBuYW1lIGJlY2F1c2VcbiAgICAvLyB0aGUgcHJvYmxlbWF0aWMgY29kZSBhbG1vc3QgYWx3YXlzIGxpZXMgaW5zaWRlIHRoYXQgY29tcG9uZW50LlxuXG5cbiAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkgfHwgJ1JlYWN0Q29tcG9uZW50JztcblxuICAgIGlmIChkaWRXYXJuU3RhdGVVcGRhdGVGb3JVbm1vdW50ZWRDb21wb25lbnQgIT09IG51bGwpIHtcbiAgICAgIGlmIChkaWRXYXJuU3RhdGVVcGRhdGVGb3JVbm1vdW50ZWRDb21wb25lbnQuaGFzKGNvbXBvbmVudE5hbWUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZGlkV2FyblN0YXRlVXBkYXRlRm9yVW5tb3VudGVkQ29tcG9uZW50LmFkZChjb21wb25lbnROYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGlkV2FyblN0YXRlVXBkYXRlRm9yVW5tb3VudGVkQ29tcG9uZW50ID0gbmV3IFNldChbY29tcG9uZW50TmFtZV0pO1xuICAgIH1cblxuICAgIGlmIChpc0ZsdXNoaW5nUGFzc2l2ZUVmZmVjdHMpIDsgZWxzZSB7XG4gICAgICB2YXIgcHJldmlvdXNGaWJlciA9IGN1cnJlbnQ7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHNldEN1cnJlbnRGaWJlcihmaWJlcik7XG5cbiAgICAgICAgZXJyb3IoXCJDYW4ndCBwZXJmb3JtIGEgUmVhY3Qgc3RhdGUgdXBkYXRlIG9uIGFuIHVubW91bnRlZCBjb21wb25lbnQuIFRoaXMgXCIgKyAnaXMgYSBuby1vcCwgYnV0IGl0IGluZGljYXRlcyBhIG1lbW9yeSBsZWFrIGluIHlvdXIgYXBwbGljYXRpb24uIFRvICcgKyAnZml4LCBjYW5jZWwgYWxsIHN1YnNjcmlwdGlvbnMgYW5kIGFzeW5jaHJvbm91cyB0YXNrcyBpbiAlcy4nLCB0YWcgPT09IENsYXNzQ29tcG9uZW50ID8gJ3RoZSBjb21wb25lbnRXaWxsVW5tb3VudCBtZXRob2QnIDogJ2EgdXNlRWZmZWN0IGNsZWFudXAgZnVuY3Rpb24nKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChwcmV2aW91c0ZpYmVyKSB7XG4gICAgICAgICAgc2V0Q3VycmVudEZpYmVyKGZpYmVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciBiZWdpbldvcmskMTtcblxue1xuICB2YXIgZHVtbXlGaWJlciA9IG51bGw7XG5cbiAgYmVnaW5Xb3JrJDEgPSBmdW5jdGlvbiAoY3VycmVudCwgdW5pdE9mV29yaywgbGFuZXMpIHtcbiAgICAvLyBJZiBhIGNvbXBvbmVudCB0aHJvd3MgYW4gZXJyb3IsIHdlIHJlcGxheSBpdCBhZ2FpbiBpbiBhIHN5bmNocm9ub3VzbHlcbiAgICAvLyBkaXNwYXRjaGVkIGV2ZW50LCBzbyB0aGF0IHRoZSBkZWJ1Z2dlciB3aWxsIHRyZWF0IGl0IGFzIGFuIHVuY2F1Z2h0XG4gICAgLy8gZXJyb3IgU2VlIFJlYWN0RXJyb3JVdGlscyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgICAvLyBCZWZvcmUgZW50ZXJpbmcgdGhlIGJlZ2luIHBoYXNlLCBjb3B5IHRoZSB3b3JrLWluLXByb2dyZXNzIG9udG8gYSBkdW1teVxuICAgIC8vIGZpYmVyLiBJZiBiZWdpbldvcmsgdGhyb3dzLCB3ZSdsbCB1c2UgdGhpcyB0byByZXNldCB0aGUgc3RhdGUuXG4gICAgdmFyIG9yaWdpbmFsV29ya0luUHJvZ3Jlc3NDb3B5ID0gYXNzaWduRmliZXJQcm9wZXJ0aWVzSW5ERVYoZHVtbXlGaWJlciwgdW5pdE9mV29yayk7XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGJlZ2luV29yayhjdXJyZW50LCB1bml0T2ZXb3JrLCBsYW5lcyk7XG4gICAgfSBjYXRjaCAob3JpZ2luYWxFcnJvcikge1xuICAgICAgaWYgKG9yaWdpbmFsRXJyb3IgIT09IG51bGwgJiYgdHlwZW9mIG9yaWdpbmFsRXJyb3IgPT09ICdvYmplY3QnICYmIHR5cGVvZiBvcmlnaW5hbEVycm9yLnRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gRG9uJ3QgcmVwbGF5IHByb21pc2VzLiBUcmVhdCBldmVyeXRoaW5nIGVsc2UgbGlrZSBhbiBlcnJvci5cbiAgICAgICAgdGhyb3cgb3JpZ2luYWxFcnJvcjtcbiAgICAgIH0gLy8gS2VlcCB0aGlzIGNvZGUgaW4gc3luYyB3aXRoIGhhbmRsZUVycm9yOyBhbnkgY2hhbmdlcyBoZXJlIG11c3QgaGF2ZVxuICAgICAgLy8gY29ycmVzcG9uZGluZyBjaGFuZ2VzIHRoZXJlLlxuXG5cbiAgICAgIHJlc2V0Q29udGV4dERlcGVuZGVuY2llcygpO1xuICAgICAgcmVzZXRIb29rc0FmdGVyVGhyb3coKTsgLy8gRG9uJ3QgcmVzZXQgY3VycmVudCBkZWJ1ZyBmaWJlciwgc2luY2Ugd2UncmUgYWJvdXQgdG8gd29yayBvbiB0aGVcbiAgICAgIC8vIHNhbWUgZmliZXIgYWdhaW4uXG4gICAgICAvLyBVbndpbmQgdGhlIGZhaWxlZCBzdGFjayBmcmFtZVxuXG4gICAgICB1bndpbmRJbnRlcnJ1cHRlZFdvcmsodW5pdE9mV29yayk7IC8vIFJlc3RvcmUgdGhlIG9yaWdpbmFsIHByb3BlcnRpZXMgb2YgdGhlIGZpYmVyLlxuXG4gICAgICBhc3NpZ25GaWJlclByb3BlcnRpZXNJbkRFVih1bml0T2ZXb3JrLCBvcmlnaW5hbFdvcmtJblByb2dyZXNzQ29weSk7XG5cbiAgICAgIGlmICggdW5pdE9mV29yay5tb2RlICYgUHJvZmlsZU1vZGUpIHtcbiAgICAgICAgLy8gUmVzZXQgdGhlIHByb2ZpbGVyIHRpbWVyLlxuICAgICAgICBzdGFydFByb2ZpbGVyVGltZXIodW5pdE9mV29yayk7XG4gICAgICB9IC8vIFJ1biBiZWdpbldvcmsgYWdhaW4uXG5cblxuICAgICAgaW52b2tlR3VhcmRlZENhbGxiYWNrKG51bGwsIGJlZ2luV29yaywgbnVsbCwgY3VycmVudCwgdW5pdE9mV29yaywgbGFuZXMpO1xuXG4gICAgICBpZiAoaGFzQ2F1Z2h0RXJyb3IoKSkge1xuICAgICAgICB2YXIgcmVwbGF5RXJyb3IgPSBjbGVhckNhdWdodEVycm9yKCk7IC8vIGBpbnZva2VHdWFyZGVkQ2FsbGJhY2tgIHNvbWV0aW1lcyBzZXRzIGFuIGV4cGFuZG8gYF9zdXBwcmVzc0xvZ2dpbmdgLlxuICAgICAgICAvLyBSZXRocm93IHRoaXMgZXJyb3IgaW5zdGVhZCBvZiB0aGUgb3JpZ2luYWwgb25lLlxuXG4gICAgICAgIHRocm93IHJlcGxheUVycm9yO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVGhpcyBicmFuY2ggaXMgcmVhY2hhYmxlIGlmIHRoZSByZW5kZXIgcGhhc2UgaXMgaW1wdXJlLlxuICAgICAgICB0aHJvdyBvcmlnaW5hbEVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cblxudmFyIGRpZFdhcm5BYm91dFVwZGF0ZUluUmVuZGVyID0gZmFsc2U7XG52YXIgZGlkV2FybkFib3V0VXBkYXRlSW5SZW5kZXJGb3JBbm90aGVyQ29tcG9uZW50O1xuXG57XG4gIGRpZFdhcm5BYm91dFVwZGF0ZUluUmVuZGVyRm9yQW5vdGhlckNvbXBvbmVudCA9IG5ldyBTZXQoKTtcbn1cblxuZnVuY3Rpb24gd2FybkFib3V0UmVuZGVyUGhhc2VVcGRhdGVzSW5ERVYoZmliZXIpIHtcbiAge1xuICAgIGlmIChpc1JlbmRlcmluZyAmJiAoZXhlY3V0aW9uQ29udGV4dCAmIFJlbmRlckNvbnRleHQpICE9PSBOb0NvbnRleHQgJiYgIWdldElzVXBkYXRpbmdPcGFxdWVWYWx1ZUluUmVuZGVyUGhhc2VJbkRFVigpKSB7XG4gICAgICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgICAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgcmVuZGVyaW5nQ29tcG9uZW50TmFtZSA9IHdvcmtJblByb2dyZXNzICYmIGdldENvbXBvbmVudE5hbWUod29ya0luUHJvZ3Jlc3MudHlwZSkgfHwgJ1Vua25vd24nOyAvLyBEZWR1cGUgYnkgdGhlIHJlbmRlcmluZyBjb21wb25lbnQgYmVjYXVzZSBpdCdzIHRoZSBvbmUgdGhhdCBuZWVkcyB0byBiZSBmaXhlZC5cblxuICAgICAgICAgICAgdmFyIGRlZHVwZUtleSA9IHJlbmRlcmluZ0NvbXBvbmVudE5hbWU7XG5cbiAgICAgICAgICAgIGlmICghZGlkV2FybkFib3V0VXBkYXRlSW5SZW5kZXJGb3JBbm90aGVyQ29tcG9uZW50LmhhcyhkZWR1cGVLZXkpKSB7XG4gICAgICAgICAgICAgIGRpZFdhcm5BYm91dFVwZGF0ZUluUmVuZGVyRm9yQW5vdGhlckNvbXBvbmVudC5hZGQoZGVkdXBlS2V5KTtcbiAgICAgICAgICAgICAgdmFyIHNldFN0YXRlQ29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkgfHwgJ1Vua25vd24nO1xuXG4gICAgICAgICAgICAgIGVycm9yKCdDYW5ub3QgdXBkYXRlIGEgY29tcG9uZW50IChgJXNgKSB3aGlsZSByZW5kZXJpbmcgYSAnICsgJ2RpZmZlcmVudCBjb21wb25lbnQgKGAlc2ApLiBUbyBsb2NhdGUgdGhlIGJhZCBzZXRTdGF0ZSgpIGNhbGwgaW5zaWRlIGAlc2AsICcgKyAnZm9sbG93IHRoZSBzdGFjayB0cmFjZSBhcyBkZXNjcmliZWQgaW4gaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3NldHN0YXRlLWluLXJlbmRlcicsIHNldFN0YXRlQ29tcG9uZW50TmFtZSwgcmVuZGVyaW5nQ29tcG9uZW50TmFtZSwgcmVuZGVyaW5nQ29tcG9uZW50TmFtZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmICghZGlkV2FybkFib3V0VXBkYXRlSW5SZW5kZXIpIHtcbiAgICAgICAgICAgICAgZXJyb3IoJ0Nhbm5vdCB1cGRhdGUgZHVyaW5nIGFuIGV4aXN0aW5nIHN0YXRlIHRyYW5zaXRpb24gKHN1Y2ggYXMgJyArICd3aXRoaW4gYHJlbmRlcmApLiBSZW5kZXIgbWV0aG9kcyBzaG91bGQgYmUgYSBwdXJlICcgKyAnZnVuY3Rpb24gb2YgcHJvcHMgYW5kIHN0YXRlLicpO1xuXG4gICAgICAgICAgICAgIGRpZFdhcm5BYm91dFVwZGF0ZUluUmVuZGVyID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufSAvLyBhICdzaGFyZWQnIHZhcmlhYmxlIHRoYXQgY2hhbmdlcyB3aGVuIGFjdCgpIG9wZW5zL2Nsb3NlcyBpbiB0ZXN0cy5cblxuXG52YXIgSXNUaGlzUmVuZGVyZXJBY3RpbmcgPSB7XG4gIGN1cnJlbnQ6IGZhbHNlXG59O1xuZnVuY3Rpb24gd2FybklmTm90U2NvcGVkV2l0aE1hdGNoaW5nQWN0KGZpYmVyKSB7XG4gIHtcbiAgICBpZiAoIElzU29tZVJlbmRlcmVyQWN0aW5nLmN1cnJlbnQgPT09IHRydWUgJiYgSXNUaGlzUmVuZGVyZXJBY3RpbmcuY3VycmVudCAhPT0gdHJ1ZSkge1xuICAgICAgdmFyIHByZXZpb3VzRmliZXIgPSBjdXJyZW50O1xuXG4gICAgICB0cnkge1xuICAgICAgICBzZXRDdXJyZW50RmliZXIoZmliZXIpO1xuXG4gICAgICAgIGVycm9yKFwiSXQgbG9va3MgbGlrZSB5b3UncmUgdXNpbmcgdGhlIHdyb25nIGFjdCgpIGFyb3VuZCB5b3VyIHRlc3QgaW50ZXJhY3Rpb25zLlxcblwiICsgJ0JlIHN1cmUgdG8gdXNlIHRoZSBtYXRjaGluZyB2ZXJzaW9uIG9mIGFjdCgpIGNvcnJlc3BvbmRpbmcgdG8geW91ciByZW5kZXJlcjpcXG5cXG4nICsgJy8vIGZvciByZWFjdC1kb206XFxuJyArIC8vIEJyZWFrIHVwIGltcG9ydHMgdG8gYXZvaWQgYWNjaWRlbnRhbGx5IHBhcnNpbmcgdGhlbSBhcyBkZXBlbmRlbmNpZXMuXG4gICAgICAgICdpbXBvcnQge2FjdH0gZnInICsgXCJvbSAncmVhY3QtZG9tL3Rlc3QtdXRpbHMnO1xcblwiICsgJy8vIC4uLlxcbicgKyAnYWN0KCgpID0+IC4uLik7XFxuXFxuJyArICcvLyBmb3IgcmVhY3QtdGVzdC1yZW5kZXJlcjpcXG4nICsgLy8gQnJlYWsgdXAgaW1wb3J0cyB0byBhdm9pZCBhY2NpZGVudGFsbHkgcGFyc2luZyB0aGVtIGFzIGRlcGVuZGVuY2llcy5cbiAgICAgICAgJ2ltcG9ydCBUZXN0UmVuZGVyZXIgZnInICsgXCJvbSByZWFjdC10ZXN0LXJlbmRlcmVyJztcXG5cIiArICdjb25zdCB7YWN0fSA9IFRlc3RSZW5kZXJlcjtcXG4nICsgJy8vIC4uLlxcbicgKyAnYWN0KCgpID0+IC4uLik7Jyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAocHJldmlvdXNGaWJlcikge1xuICAgICAgICAgIHNldEN1cnJlbnRGaWJlcihmaWJlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gd2FybklmTm90Q3VycmVudGx5QWN0aW5nRWZmZWN0c0luREVWKGZpYmVyKSB7XG4gIHtcbiAgICBpZiAoIChmaWJlci5tb2RlICYgU3RyaWN0TW9kZSkgIT09IE5vTW9kZSAmJiBJc1NvbWVSZW5kZXJlckFjdGluZy5jdXJyZW50ID09PSBmYWxzZSAmJiBJc1RoaXNSZW5kZXJlckFjdGluZy5jdXJyZW50ID09PSBmYWxzZSkge1xuICAgICAgZXJyb3IoJ0FuIHVwZGF0ZSB0byAlcyByYW4gYW4gZWZmZWN0LCBidXQgd2FzIG5vdCB3cmFwcGVkIGluIGFjdCguLi4pLlxcblxcbicgKyAnV2hlbiB0ZXN0aW5nLCBjb2RlIHRoYXQgY2F1c2VzIFJlYWN0IHN0YXRlIHVwZGF0ZXMgc2hvdWxkIGJlICcgKyAnd3JhcHBlZCBpbnRvIGFjdCguLi4pOlxcblxcbicgKyAnYWN0KCgpID0+IHtcXG4nICsgJyAgLyogZmlyZSBldmVudHMgdGhhdCB1cGRhdGUgc3RhdGUgKi9cXG4nICsgJ30pO1xcbicgKyAnLyogYXNzZXJ0IG9uIHRoZSBvdXRwdXQgKi9cXG5cXG4nICsgXCJUaGlzIGVuc3VyZXMgdGhhdCB5b3UncmUgdGVzdGluZyB0aGUgYmVoYXZpb3IgdGhlIHVzZXIgd291bGQgc2VlIFwiICsgJ2luIHRoZSBicm93c2VyLicgKyAnIExlYXJuIG1vcmUgYXQgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3dyYXAtdGVzdHMtd2l0aC1hY3QnLCBnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gd2FybklmTm90Q3VycmVudGx5QWN0aW5nVXBkYXRlc0luREVWKGZpYmVyKSB7XG4gIHtcbiAgICBpZiAoIGV4ZWN1dGlvbkNvbnRleHQgPT09IE5vQ29udGV4dCAmJiBJc1NvbWVSZW5kZXJlckFjdGluZy5jdXJyZW50ID09PSBmYWxzZSAmJiBJc1RoaXNSZW5kZXJlckFjdGluZy5jdXJyZW50ID09PSBmYWxzZSkge1xuICAgICAgdmFyIHByZXZpb3VzRmliZXIgPSBjdXJyZW50O1xuXG4gICAgICB0cnkge1xuICAgICAgICBzZXRDdXJyZW50RmliZXIoZmliZXIpO1xuXG4gICAgICAgIGVycm9yKCdBbiB1cGRhdGUgdG8gJXMgaW5zaWRlIGEgdGVzdCB3YXMgbm90IHdyYXBwZWQgaW4gYWN0KC4uLikuXFxuXFxuJyArICdXaGVuIHRlc3RpbmcsIGNvZGUgdGhhdCBjYXVzZXMgUmVhY3Qgc3RhdGUgdXBkYXRlcyBzaG91bGQgYmUgJyArICd3cmFwcGVkIGludG8gYWN0KC4uLik6XFxuXFxuJyArICdhY3QoKCkgPT4ge1xcbicgKyAnICAvKiBmaXJlIGV2ZW50cyB0aGF0IHVwZGF0ZSBzdGF0ZSAqL1xcbicgKyAnfSk7XFxuJyArICcvKiBhc3NlcnQgb24gdGhlIG91dHB1dCAqL1xcblxcbicgKyBcIlRoaXMgZW5zdXJlcyB0aGF0IHlvdSdyZSB0ZXN0aW5nIHRoZSBiZWhhdmlvciB0aGUgdXNlciB3b3VsZCBzZWUgXCIgKyAnaW4gdGhlIGJyb3dzZXIuJyArICcgTGVhcm4gbW9yZSBhdCBodHRwczovL3JlYWN0anMub3JnL2xpbmsvd3JhcC10ZXN0cy13aXRoLWFjdCcsIGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKHByZXZpb3VzRmliZXIpIHtcbiAgICAgICAgICBzZXRDdXJyZW50RmliZXIoZmliZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIHdhcm5JZk5vdEN1cnJlbnRseUFjdGluZ1VwZGF0ZXNJbkRldiA9IHdhcm5JZk5vdEN1cnJlbnRseUFjdGluZ1VwZGF0ZXNJbkRFVjsgLy8gSW4gdGVzdHMsIHdlIHdhbnQgdG8gZW5mb3JjZSBhIG1vY2tlZCBzY2hlZHVsZXIuXG5cbnZhciBkaWRXYXJuQWJvdXRVbm1vY2tlZFNjaGVkdWxlciA9IGZhbHNlOyAvLyBUT0RPIEJlZm9yZSB3ZSByZWxlYXNlIGNvbmN1cnJlbnQgbW9kZSwgcmV2aXNpdCB0aGlzIGFuZCBkZWNpZGUgd2hldGhlciBhIG1vY2tlZFxuLy8gc2NoZWR1bGVyIGlzIHRoZSBhY3R1YWwgcmVjb21tZW5kYXRpb24uIFRoZSBhbHRlcm5hdGl2ZSBjb3VsZCBiZSBhIHRlc3RpbmcgYnVpbGQsXG4vLyBhIG5ldyBsaWIsIG9yIHdoYXRldmVyOyB3ZSBkdW5ubyBqdXN0IHlldC4gVGhpcyBtZXNzYWdlIGlzIGZvciBlYXJseSBhZG9wdGVyc1xuLy8gdG8gZ2V0IHRoZWlyIHRlc3RzIHJpZ2h0LlxuXG5mdW5jdGlvbiB3YXJuSWZVbm1vY2tlZFNjaGVkdWxlcihmaWJlcikge1xuICB7XG4gICAgaWYgKGRpZFdhcm5BYm91dFVubW9ja2VkU2NoZWR1bGVyID09PSBmYWxzZSAmJiBTY2hlZHVsZXIudW5zdGFibGVfZmx1c2hBbGxXaXRob3V0QXNzZXJ0aW5nID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChmaWJlci5tb2RlICYgQmxvY2tpbmdNb2RlIHx8IGZpYmVyLm1vZGUgJiBDb25jdXJyZW50TW9kZSkge1xuICAgICAgICBkaWRXYXJuQWJvdXRVbm1vY2tlZFNjaGVkdWxlciA9IHRydWU7XG5cbiAgICAgICAgZXJyb3IoJ0luIENvbmN1cnJlbnQgb3IgU3luYyBtb2RlcywgdGhlIFwic2NoZWR1bGVyXCIgbW9kdWxlIG5lZWRzIHRvIGJlIG1vY2tlZCAnICsgJ3RvIGd1YXJhbnRlZSBjb25zaXN0ZW50IGJlaGF2aW91ciBhY3Jvc3MgdGVzdHMgYW5kIGJyb3dzZXJzLiAnICsgJ0ZvciBleGFtcGxlLCB3aXRoIGplc3Q6IFxcbicgKyAvLyBCcmVhayB1cCByZXF1aXJlcyB0byBhdm9pZCBhY2NpZGVudGFsbHkgcGFyc2luZyB0aGVtIGFzIGRlcGVuZGVuY2llcy5cbiAgICAgICAgXCJqZXN0Lm1vY2soJ3NjaGVkdWxlcicsICgpID0+IHJlcXVpcmVcIiArIFwiKCdzY2hlZHVsZXIvdW5zdGFibGVfbW9jaycpKTtcXG5cXG5cIiArICdGb3IgbW9yZSBpbmZvLCB2aXNpdCBodHRwczovL3JlYWN0anMub3JnL2xpbmsvbW9jay1zY2hlZHVsZXInKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tcHV0ZVRocmVhZElEKHJvb3QsIGxhbmUpIHtcbiAgLy8gSW50ZXJhY3Rpb24gdGhyZWFkcyBhcmUgdW5pcXVlIHBlciByb290IGFuZCBleHBpcmF0aW9uIHRpbWUuXG4gIC8vIE5PVEU6IEludGVudGlvbmFsbHkgdW5zb3VuZCBjYXN0LiBBbGwgdGhhdCBtYXR0ZXJzIGlzIHRoYXQgaXQncyBhIG51bWJlclxuICAvLyBhbmQgaXQgcmVwcmVzZW50cyBhIGJhdGNoIG9mIHdvcmsuIENvdWxkIG1ha2UgYSBoZWxwZXIgZnVuY3Rpb24gaW5zdGVhZCxcbiAgLy8gYnV0IG1laCB0aGlzIGlzIGZpbmUgZm9yIG5vdy5cbiAgcmV0dXJuIGxhbmUgKiAxMDAwICsgcm9vdC5pbnRlcmFjdGlvblRocmVhZElEO1xufVxuXG5mdW5jdGlvbiBtYXJrU3Bhd25lZFdvcmsobGFuZSkge1xuXG4gIGlmIChzcGF3bmVkV29ya0R1cmluZ1JlbmRlciA9PT0gbnVsbCkge1xuICAgIHNwYXduZWRXb3JrRHVyaW5nUmVuZGVyID0gW2xhbmVdO1xuICB9IGVsc2Uge1xuICAgIHNwYXduZWRXb3JrRHVyaW5nUmVuZGVyLnB1c2gobGFuZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2NoZWR1bGVJbnRlcmFjdGlvbnMocm9vdCwgbGFuZSwgaW50ZXJhY3Rpb25zKSB7XG5cbiAgaWYgKGludGVyYWN0aW9ucy5zaXplID4gMCkge1xuICAgIHZhciBwZW5kaW5nSW50ZXJhY3Rpb25NYXAgPSByb290LnBlbmRpbmdJbnRlcmFjdGlvbk1hcDtcbiAgICB2YXIgcGVuZGluZ0ludGVyYWN0aW9ucyA9IHBlbmRpbmdJbnRlcmFjdGlvbk1hcC5nZXQobGFuZSk7XG5cbiAgICBpZiAocGVuZGluZ0ludGVyYWN0aW9ucyAhPSBudWxsKSB7XG4gICAgICBpbnRlcmFjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoaW50ZXJhY3Rpb24pIHtcbiAgICAgICAgaWYgKCFwZW5kaW5nSW50ZXJhY3Rpb25zLmhhcyhpbnRlcmFjdGlvbikpIHtcbiAgICAgICAgICAvLyBVcGRhdGUgdGhlIHBlbmRpbmcgYXN5bmMgd29yayBjb3VudCBmb3IgcHJldmlvdXNseSB1bnNjaGVkdWxlZCBpbnRlcmFjdGlvbi5cbiAgICAgICAgICBpbnRlcmFjdGlvbi5fX2NvdW50Kys7XG4gICAgICAgIH1cblxuICAgICAgICBwZW5kaW5nSW50ZXJhY3Rpb25zLmFkZChpbnRlcmFjdGlvbik7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGVuZGluZ0ludGVyYWN0aW9uTWFwLnNldChsYW5lLCBuZXcgU2V0KGludGVyYWN0aW9ucykpOyAvLyBVcGRhdGUgdGhlIHBlbmRpbmcgYXN5bmMgd29yayBjb3VudCBmb3IgdGhlIGN1cnJlbnQgaW50ZXJhY3Rpb25zLlxuXG4gICAgICBpbnRlcmFjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoaW50ZXJhY3Rpb24pIHtcbiAgICAgICAgaW50ZXJhY3Rpb24uX19jb3VudCsrO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdmFyIHN1YnNjcmliZXIgPSB0cmFjaW5nLl9fc3Vic2NyaWJlclJlZi5jdXJyZW50O1xuXG4gICAgaWYgKHN1YnNjcmliZXIgIT09IG51bGwpIHtcbiAgICAgIHZhciB0aHJlYWRJRCA9IGNvbXB1dGVUaHJlYWRJRChyb290LCBsYW5lKTtcbiAgICAgIHN1YnNjcmliZXIub25Xb3JrU2NoZWR1bGVkKGludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzY2hlZHVsZVBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgbGFuZSkge1xuXG4gIHNjaGVkdWxlSW50ZXJhY3Rpb25zKHJvb3QsIGxhbmUsIHRyYWNpbmcuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudCk7XG59XG5cbmZ1bmN0aW9uIHN0YXJ0V29ya09uUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCBsYW5lcykge1xuICAvLyB3ZSBjYW4gYWNjdXJhdGVseSBhdHRyaWJ1dGUgdGltZSBzcGVudCB3b3JraW5nIG9uIGl0LCBBbmQgc28gdGhhdCBjYXNjYWRpbmdcbiAgLy8gd29yayB0cmlnZ2VyZWQgZHVyaW5nIHRoZSByZW5kZXIgcGhhc2Ugd2lsbCBiZSBhc3NvY2lhdGVkIHdpdGggaXQuXG5cblxuICB2YXIgaW50ZXJhY3Rpb25zID0gbmV3IFNldCgpO1xuICByb290LnBlbmRpbmdJbnRlcmFjdGlvbk1hcC5mb3JFYWNoKGZ1bmN0aW9uIChzY2hlZHVsZWRJbnRlcmFjdGlvbnMsIHNjaGVkdWxlZExhbmUpIHtcbiAgICBpZiAoaW5jbHVkZXNTb21lTGFuZShsYW5lcywgc2NoZWR1bGVkTGFuZSkpIHtcbiAgICAgIHNjaGVkdWxlZEludGVyYWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChpbnRlcmFjdGlvbikge1xuICAgICAgICByZXR1cm4gaW50ZXJhY3Rpb25zLmFkZChpbnRlcmFjdGlvbik7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pOyAvLyBTdG9yZSB0aGUgY3VycmVudCBzZXQgb2YgaW50ZXJhY3Rpb25zIG9uIHRoZSBGaWJlclJvb3QgZm9yIGEgZmV3IHJlYXNvbnM6XG4gIC8vIFdlIGNhbiByZS11c2UgaXQgaW4gaG90IGZ1bmN0aW9ucyBsaWtlIHBlcmZvcm1Db25jdXJyZW50V29ya09uUm9vdCgpXG4gIC8vIHdpdGhvdXQgaGF2aW5nIHRvIHJlY2FsY3VsYXRlIGl0LiBXZSB3aWxsIGFsc28gdXNlIGl0IGluIGNvbW1pdFdvcmsoKSB0b1xuICAvLyBwYXNzIHRvIGFueSBQcm9maWxlciBvblJlbmRlcigpIGhvb2tzLiBUaGlzIGFsc28gcHJvdmlkZXMgRGV2VG9vbHMgd2l0aCBhXG4gIC8vIHdheSB0byBhY2Nlc3MgaXQgd2hlbiB0aGUgb25Db21taXRSb290KCkgaG9vayBpcyBjYWxsZWQuXG5cbiAgcm9vdC5tZW1vaXplZEludGVyYWN0aW9ucyA9IGludGVyYWN0aW9ucztcblxuICBpZiAoaW50ZXJhY3Rpb25zLnNpemUgPiAwKSB7XG4gICAgdmFyIHN1YnNjcmliZXIgPSB0cmFjaW5nLl9fc3Vic2NyaWJlclJlZi5jdXJyZW50O1xuXG4gICAgaWYgKHN1YnNjcmliZXIgIT09IG51bGwpIHtcbiAgICAgIHZhciB0aHJlYWRJRCA9IGNvbXB1dGVUaHJlYWRJRChyb290LCBsYW5lcyk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHN1YnNjcmliZXIub25Xb3JrU3RhcnRlZChpbnRlcmFjdGlvbnMsIHRocmVhZElEKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIElmIHRoZSBzdWJzY3JpYmVyIHRocm93cywgcmV0aHJvdyBpdCBpbiBhIHNlcGFyYXRlIHRhc2tcbiAgICAgICAgc2NoZWR1bGVDYWxsYmFjayhJbW1lZGlhdGVQcmlvcml0eSQxLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5pc2hQZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIGNvbW1pdHRlZExhbmVzKSB7XG5cbiAgdmFyIHJlbWFpbmluZ0xhbmVzQWZ0ZXJDb21taXQgPSByb290LnBlbmRpbmdMYW5lcztcbiAgdmFyIHN1YnNjcmliZXI7XG5cbiAgdHJ5IHtcbiAgICBzdWJzY3JpYmVyID0gdHJhY2luZy5fX3N1YnNjcmliZXJSZWYuY3VycmVudDtcblxuICAgIGlmIChzdWJzY3JpYmVyICE9PSBudWxsICYmIHJvb3QubWVtb2l6ZWRJbnRlcmFjdGlvbnMuc2l6ZSA+IDApIHtcbiAgICAgIC8vIEZJWE1FOiBNb3JlIHRoYW4gb25lIGxhbmUgY2FuIGZpbmlzaCBpbiBhIHNpbmdsZSBjb21taXQuXG4gICAgICB2YXIgdGhyZWFkSUQgPSBjb21wdXRlVGhyZWFkSUQocm9vdCwgY29tbWl0dGVkTGFuZXMpO1xuICAgICAgc3Vic2NyaWJlci5vbldvcmtTdG9wcGVkKHJvb3QubWVtb2l6ZWRJbnRlcmFjdGlvbnMsIHRocmVhZElEKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgLy8gSWYgdGhlIHN1YnNjcmliZXIgdGhyb3dzLCByZXRocm93IGl0IGluIGEgc2VwYXJhdGUgdGFza1xuICAgIHNjaGVkdWxlQ2FsbGJhY2soSW1tZWRpYXRlUHJpb3JpdHkkMSwgZnVuY3Rpb24gKCkge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSk7XG4gIH0gZmluYWxseSB7XG4gICAgLy8gQ2xlYXIgY29tcGxldGVkIGludGVyYWN0aW9ucyBmcm9tIHRoZSBwZW5kaW5nIE1hcC5cbiAgICAvLyBVbmxlc3MgdGhlIHJlbmRlciB3YXMgc3VzcGVuZGVkIG9yIGNhc2NhZGluZyB3b3JrIHdhcyBzY2hlZHVsZWQsXG4gICAgLy8gSW4gd2hpY2ggY2FzZVx1MjAxMyBsZWF2ZSBwZW5kaW5nIGludGVyYWN0aW9ucyB1bnRpbCB0aGUgc3Vic2VxdWVudCByZW5kZXIuXG4gICAgdmFyIHBlbmRpbmdJbnRlcmFjdGlvbk1hcCA9IHJvb3QucGVuZGluZ0ludGVyYWN0aW9uTWFwO1xuICAgIHBlbmRpbmdJbnRlcmFjdGlvbk1hcC5mb3JFYWNoKGZ1bmN0aW9uIChzY2hlZHVsZWRJbnRlcmFjdGlvbnMsIGxhbmUpIHtcbiAgICAgIC8vIE9ubHkgZGVjcmVtZW50IHRoZSBwZW5kaW5nIGludGVyYWN0aW9uIGNvdW50IGlmIHdlJ3JlIGRvbmUuXG4gICAgICAvLyBJZiB0aGVyZSdzIHN0aWxsIHdvcmsgYXQgdGhlIGN1cnJlbnQgcHJpb3JpdHksXG4gICAgICAvLyBUaGF0IGluZGljYXRlcyB0aGF0IHdlIGFyZSB3YWl0aW5nIGZvciBzdXNwZW5zZSBkYXRhLlxuICAgICAgaWYgKCFpbmNsdWRlc1NvbWVMYW5lKHJlbWFpbmluZ0xhbmVzQWZ0ZXJDb21taXQsIGxhbmUpKSB7XG4gICAgICAgIHBlbmRpbmdJbnRlcmFjdGlvbk1hcC5kZWxldGUobGFuZSk7XG4gICAgICAgIHNjaGVkdWxlZEludGVyYWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChpbnRlcmFjdGlvbikge1xuICAgICAgICAgIGludGVyYWN0aW9uLl9fY291bnQtLTtcblxuICAgICAgICAgIGlmIChzdWJzY3JpYmVyICE9PSBudWxsICYmIGludGVyYWN0aW9uLl9fY291bnQgPT09IDApIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHN1YnNjcmliZXIub25JbnRlcmFjdGlvblNjaGVkdWxlZFdvcmtDb21wbGV0ZWQoaW50ZXJhY3Rpb24pO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgLy8gSWYgdGhlIHN1YnNjcmliZXIgdGhyb3dzLCByZXRocm93IGl0IGluIGEgc2VwYXJhdGUgdGFza1xuICAgICAgICAgICAgICBzY2hlZHVsZUNhbGxiYWNrKEltbWVkaWF0ZVByaW9yaXR5JDEsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufSAvLyBgYWN0YCB0ZXN0aW5nIEFQSVxuXG5mdW5jdGlvbiBzaG91bGRGb3JjZUZsdXNoRmFsbGJhY2tzSW5ERVYoKSB7XG4gIC8vIE5ldmVyIGZvcmNlIGZsdXNoIGluIHByb2R1Y3Rpb24uIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGdldCBzdHJpcHBlZCBvdXQuXG4gIHJldHVybiAgYWN0aW5nVXBkYXRlc1Njb3BlRGVwdGggPiAwO1xufVxuLy8gc28gd2UgY2FuIHRlbGwgaWYgYW55IGFzeW5jIGFjdCgpIGNhbGxzIHRyeSB0byBydW4gaW4gcGFyYWxsZWwuXG5cblxudmFyIGFjdGluZ1VwZGF0ZXNTY29wZURlcHRoID0gMDtcblxuZnVuY3Rpb24gZGV0YWNoRmliZXJBZnRlckVmZmVjdHMoZmliZXIpIHtcbiAgZmliZXIuc2libGluZyA9IG51bGw7XG4gIGZpYmVyLnN0YXRlTm9kZSA9IG51bGw7XG59XG5cbnZhciByZXNvbHZlRmFtaWx5ID0gbnVsbDsgLy8gJEZsb3dGaXhNZSBGbG93IGdldHMgY29uZnVzZWQgYnkgYSBXZWFrU2V0IGZlYXR1cmUgY2hlY2sgYmVsb3cuXG5cbnZhciBmYWlsZWRCb3VuZGFyaWVzID0gbnVsbDtcbnZhciBzZXRSZWZyZXNoSGFuZGxlciA9IGZ1bmN0aW9uIChoYW5kbGVyKSB7XG4gIHtcbiAgICByZXNvbHZlRmFtaWx5ID0gaGFuZGxlcjtcbiAgfVxufTtcbmZ1bmN0aW9uIHJlc29sdmVGdW5jdGlvbkZvckhvdFJlbG9hZGluZyh0eXBlKSB7XG4gIHtcbiAgICBpZiAocmVzb2x2ZUZhbWlseSA9PT0gbnVsbCkge1xuICAgICAgLy8gSG90IHJlbG9hZGluZyBpcyBkaXNhYmxlZC5cbiAgICAgIHJldHVybiB0eXBlO1xuICAgIH1cblxuICAgIHZhciBmYW1pbHkgPSByZXNvbHZlRmFtaWx5KHR5cGUpO1xuXG4gICAgaWYgKGZhbWlseSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdHlwZTtcbiAgICB9IC8vIFVzZSB0aGUgbGF0ZXN0IGtub3duIGltcGxlbWVudGF0aW9uLlxuXG5cbiAgICByZXR1cm4gZmFtaWx5LmN1cnJlbnQ7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlc29sdmVDbGFzc0ZvckhvdFJlbG9hZGluZyh0eXBlKSB7XG4gIC8vIE5vIGltcGxlbWVudGF0aW9uIGRpZmZlcmVuY2VzLlxuICByZXR1cm4gcmVzb2x2ZUZ1bmN0aW9uRm9ySG90UmVsb2FkaW5nKHR5cGUpO1xufVxuZnVuY3Rpb24gcmVzb2x2ZUZvcndhcmRSZWZGb3JIb3RSZWxvYWRpbmcodHlwZSkge1xuICB7XG4gICAgaWYgKHJlc29sdmVGYW1pbHkgPT09IG51bGwpIHtcbiAgICAgIC8vIEhvdCByZWxvYWRpbmcgaXMgZGlzYWJsZWQuXG4gICAgICByZXR1cm4gdHlwZTtcbiAgICB9XG5cbiAgICB2YXIgZmFtaWx5ID0gcmVzb2x2ZUZhbWlseSh0eXBlKTtcblxuICAgIGlmIChmYW1pbHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gQ2hlY2sgaWYgd2UncmUgZGVhbGluZyB3aXRoIGEgcmVhbCBmb3J3YXJkUmVmLiBEb24ndCB3YW50IHRvIGNyYXNoIGVhcmx5LlxuICAgICAgaWYgKHR5cGUgIT09IG51bGwgJiYgdHlwZSAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiB0eXBlLnJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBGb3J3YXJkUmVmIGlzIHNwZWNpYWwgYmVjYXVzZSBpdHMgcmVzb2x2ZWQgLnR5cGUgaXMgYW4gb2JqZWN0LFxuICAgICAgICAvLyBidXQgaXQncyBwb3NzaWJsZSB0aGF0IHdlIG9ubHkgaGF2ZSBpdHMgaW5uZXIgcmVuZGVyIGZ1bmN0aW9uIGluIHRoZSBtYXAuXG4gICAgICAgIC8vIElmIHRoYXQgaW5uZXIgcmVuZGVyIGZ1bmN0aW9uIGlzIGRpZmZlcmVudCwgd2UnbGwgYnVpbGQgYSBuZXcgZm9yd2FyZFJlZiB0eXBlLlxuICAgICAgICB2YXIgY3VycmVudFJlbmRlciA9IHJlc29sdmVGdW5jdGlvbkZvckhvdFJlbG9hZGluZyh0eXBlLnJlbmRlcik7XG5cbiAgICAgICAgaWYgKHR5cGUucmVuZGVyICE9PSBjdXJyZW50UmVuZGVyKSB7XG4gICAgICAgICAgdmFyIHN5bnRoZXRpY1R5cGUgPSB7XG4gICAgICAgICAgICAkJHR5cGVvZjogUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSxcbiAgICAgICAgICAgIHJlbmRlcjogY3VycmVudFJlbmRlclxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBpZiAodHlwZS5kaXNwbGF5TmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzeW50aGV0aWNUeXBlLmRpc3BsYXlOYW1lID0gdHlwZS5kaXNwbGF5TmFtZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gc3ludGhldGljVHlwZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHlwZTtcbiAgICB9IC8vIFVzZSB0aGUgbGF0ZXN0IGtub3duIGltcGxlbWVudGF0aW9uLlxuXG5cbiAgICByZXR1cm4gZmFtaWx5LmN1cnJlbnQ7XG4gIH1cbn1cbmZ1bmN0aW9uIGlzQ29tcGF0aWJsZUZhbWlseUZvckhvdFJlbG9hZGluZyhmaWJlciwgZWxlbWVudCkge1xuICB7XG4gICAgaWYgKHJlc29sdmVGYW1pbHkgPT09IG51bGwpIHtcbiAgICAgIC8vIEhvdCByZWxvYWRpbmcgaXMgZGlzYWJsZWQuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIHByZXZUeXBlID0gZmliZXIuZWxlbWVudFR5cGU7XG4gICAgdmFyIG5leHRUeXBlID0gZWxlbWVudC50eXBlOyAvLyBJZiB3ZSBnb3QgaGVyZSwgd2Uga25vdyB0eXBlcyBhcmVuJ3QgPT09IGVxdWFsLlxuXG4gICAgdmFyIG5lZWRzQ29tcGFyZUZhbWlsaWVzID0gZmFsc2U7XG4gICAgdmFyICQkdHlwZW9mTmV4dFR5cGUgPSB0eXBlb2YgbmV4dFR5cGUgPT09ICdvYmplY3QnICYmIG5leHRUeXBlICE9PSBudWxsID8gbmV4dFR5cGUuJCR0eXBlb2YgOiBudWxsO1xuXG4gICAgc3dpdGNoIChmaWJlci50YWcpIHtcbiAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAodHlwZW9mIG5leHRUeXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBuZWVkc0NvbXBhcmVGYW1pbGllcyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgICAge1xuICAgICAgICAgIGlmICh0eXBlb2YgbmV4dFR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIG5lZWRzQ29tcGFyZUZhbWlsaWVzID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCQkdHlwZW9mTmV4dFR5cGUgPT09IFJFQUNUX0xBWllfVFlQRSkge1xuICAgICAgICAgICAgLy8gV2UgZG9uJ3Qga25vdyB0aGUgaW5uZXIgdHlwZSB5ZXQuXG4gICAgICAgICAgICAvLyBXZSdyZSBnb2luZyB0byBhc3N1bWUgdGhhdCB0aGUgbGF6eSBpbm5lciB0eXBlIGlzIHN0YWJsZSxcbiAgICAgICAgICAgIC8vIGFuZCBzbyBpdCBpcyBzdWZmaWNpZW50IHRvIGF2b2lkIHJlY29uY2lsaW5nIGl0IGF3YXkuXG4gICAgICAgICAgICAvLyBXZSdyZSBub3QgZ29pbmcgdG8gdW53cmFwIG9yIGFjdHVhbGx5IHVzZSB0aGUgbmV3IGxhenkgdHlwZS5cbiAgICAgICAgICAgIG5lZWRzQ29tcGFyZUZhbWlsaWVzID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAoJCR0eXBlb2ZOZXh0VHlwZSA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSkge1xuICAgICAgICAgICAgbmVlZHNDb21wYXJlRmFtaWxpZXMgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAoJCR0eXBlb2ZOZXh0VHlwZSA9PT0gUkVBQ1RfTEFaWV9UWVBFKSB7XG4gICAgICAgICAgICBuZWVkc0NvbXBhcmVGYW1pbGllcyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBNZW1vQ29tcG9uZW50OlxuICAgICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgICAgICB7XG4gICAgICAgICAgaWYgKCQkdHlwZW9mTmV4dFR5cGUgPT09IFJFQUNUX01FTU9fVFlQRSkge1xuICAgICAgICAgICAgLy8gVE9ETzogaWYgaXQgd2FzIGJ1dCBjYW4gbm8gbG9uZ2VyIGJlIHNpbXBsZSxcbiAgICAgICAgICAgIC8vIHdlIHNob3VsZG4ndCBzZXQgdGhpcy5cbiAgICAgICAgICAgIG5lZWRzQ29tcGFyZUZhbWlsaWVzID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCQkdHlwZW9mTmV4dFR5cGUgPT09IFJFQUNUX0xBWllfVFlQRSkge1xuICAgICAgICAgICAgbmVlZHNDb21wYXJlRmFtaWxpZXMgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IC8vIENoZWNrIGlmIGJvdGggdHlwZXMgaGF2ZSBhIGZhbWlseSBhbmQgaXQncyB0aGUgc2FtZSBvbmUuXG5cblxuICAgIGlmIChuZWVkc0NvbXBhcmVGYW1pbGllcykge1xuICAgICAgLy8gTm90ZTogbWVtbygpIGFuZCBmb3J3YXJkUmVmKCkgd2UnbGwgY29tcGFyZSBvdXRlciByYXRoZXIgdGhhbiBpbm5lciB0eXBlLlxuICAgICAgLy8gVGhpcyBtZWFucyBib3RoIG9mIHRoZW0gbmVlZCB0byBiZSByZWdpc3RlcmVkIHRvIHByZXNlcnZlIHN0YXRlLlxuICAgICAgLy8gSWYgd2UgdW53cmFwcGVkIGFuZCBjb21wYXJlZCB0aGUgaW5uZXIgdHlwZXMgZm9yIHdyYXBwZXJzIGluc3RlYWQsXG4gICAgICAvLyB0aGVuIHdlIHdvdWxkIHJpc2sgZmFsc2VseSBzYXlpbmcgdHdvIHNlcGFyYXRlIG1lbW8oRm9vKVxuICAgICAgLy8gY2FsbHMgYXJlIGVxdWl2YWxlbnQgYmVjYXVzZSB0aGV5IHdyYXAgdGhlIHNhbWUgRm9vIGZ1bmN0aW9uLlxuICAgICAgdmFyIHByZXZGYW1pbHkgPSByZXNvbHZlRmFtaWx5KHByZXZUeXBlKTtcblxuICAgICAgaWYgKHByZXZGYW1pbHkgIT09IHVuZGVmaW5lZCAmJiBwcmV2RmFtaWx5ID09PSByZXNvbHZlRmFtaWx5KG5leHRUeXBlKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbmZ1bmN0aW9uIG1hcmtGYWlsZWRFcnJvckJvdW5kYXJ5Rm9ySG90UmVsb2FkaW5nKGZpYmVyKSB7XG4gIHtcbiAgICBpZiAocmVzb2x2ZUZhbWlseSA9PT0gbnVsbCkge1xuICAgICAgLy8gSG90IHJlbG9hZGluZyBpcyBkaXNhYmxlZC5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIFdlYWtTZXQgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZmFpbGVkQm91bmRhcmllcyA9PT0gbnVsbCkge1xuICAgICAgZmFpbGVkQm91bmRhcmllcyA9IG5ldyBXZWFrU2V0KCk7XG4gICAgfVxuXG4gICAgZmFpbGVkQm91bmRhcmllcy5hZGQoZmliZXIpO1xuICB9XG59XG52YXIgc2NoZWR1bGVSZWZyZXNoID0gZnVuY3Rpb24gKHJvb3QsIHVwZGF0ZSkge1xuICB7XG4gICAgaWYgKHJlc29sdmVGYW1pbHkgPT09IG51bGwpIHtcbiAgICAgIC8vIEhvdCByZWxvYWRpbmcgaXMgZGlzYWJsZWQuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHN0YWxlRmFtaWxpZXMgPSB1cGRhdGUuc3RhbGVGYW1pbGllcyxcbiAgICAgICAgdXBkYXRlZEZhbWlsaWVzID0gdXBkYXRlLnVwZGF0ZWRGYW1pbGllcztcbiAgICBmbHVzaFBhc3NpdmVFZmZlY3RzKCk7XG4gICAgZmx1c2hTeW5jKGZ1bmN0aW9uICgpIHtcbiAgICAgIHNjaGVkdWxlRmliZXJzV2l0aEZhbWlsaWVzUmVjdXJzaXZlbHkocm9vdC5jdXJyZW50LCB1cGRhdGVkRmFtaWxpZXMsIHN0YWxlRmFtaWxpZXMpO1xuICAgIH0pO1xuICB9XG59O1xudmFyIHNjaGVkdWxlUm9vdCA9IGZ1bmN0aW9uIChyb290LCBlbGVtZW50KSB7XG4gIHtcbiAgICBpZiAocm9vdC5jb250ZXh0ICE9PSBlbXB0eUNvbnRleHRPYmplY3QpIHtcbiAgICAgIC8vIFN1cGVyIGVkZ2UgY2FzZTogcm9vdCBoYXMgYSBsZWdhY3kgX3JlbmRlclN1YnRyZWUgY29udGV4dFxuICAgICAgLy8gYnV0IHdlIGRvbid0IGtub3cgdGhlIHBhcmVudENvbXBvbmVudCBzbyB3ZSBjYW4ndCBwYXNzIGl0LlxuICAgICAgLy8gSnVzdCBpZ25vcmUuIFdlJ2xsIGRlbGV0ZSB0aGlzIHdpdGggX3JlbmRlclN1YnRyZWUgY29kZSBwYXRoIGxhdGVyLlxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZsdXNoUGFzc2l2ZUVmZmVjdHMoKTtcbiAgICBmbHVzaFN5bmMoZnVuY3Rpb24gKCkge1xuICAgICAgdXBkYXRlQ29udGFpbmVyKGVsZW1lbnQsIHJvb3QsIG51bGwsIG51bGwpO1xuICAgIH0pO1xuICB9XG59O1xuXG5mdW5jdGlvbiBzY2hlZHVsZUZpYmVyc1dpdGhGYW1pbGllc1JlY3Vyc2l2ZWx5KGZpYmVyLCB1cGRhdGVkRmFtaWxpZXMsIHN0YWxlRmFtaWxpZXMpIHtcbiAge1xuICAgIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGUsXG4gICAgICAgIGNoaWxkID0gZmliZXIuY2hpbGQsXG4gICAgICAgIHNpYmxpbmcgPSBmaWJlci5zaWJsaW5nLFxuICAgICAgICB0YWcgPSBmaWJlci50YWcsXG4gICAgICAgIHR5cGUgPSBmaWJlci50eXBlO1xuICAgIHZhciBjYW5kaWRhdGVUeXBlID0gbnVsbDtcblxuICAgIHN3aXRjaCAodGFnKSB7XG4gICAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgICAgY2FuZGlkYXRlVHlwZSA9IHR5cGU7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICAgIGNhbmRpZGF0ZVR5cGUgPSB0eXBlLnJlbmRlcjtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHJlc29sdmVGYW1pbHkgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgcmVzb2x2ZUZhbWlseSB0byBiZSBzZXQgZHVyaW5nIGhvdCByZWxvYWQuJyk7XG4gICAgfVxuXG4gICAgdmFyIG5lZWRzUmVuZGVyID0gZmFsc2U7XG4gICAgdmFyIG5lZWRzUmVtb3VudCA9IGZhbHNlO1xuXG4gICAgaWYgKGNhbmRpZGF0ZVR5cGUgIT09IG51bGwpIHtcbiAgICAgIHZhciBmYW1pbHkgPSByZXNvbHZlRmFtaWx5KGNhbmRpZGF0ZVR5cGUpO1xuXG4gICAgICBpZiAoZmFtaWx5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHN0YWxlRmFtaWxpZXMuaGFzKGZhbWlseSkpIHtcbiAgICAgICAgICBuZWVkc1JlbW91bnQgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHVwZGF0ZWRGYW1pbGllcy5oYXMoZmFtaWx5KSkge1xuICAgICAgICAgIGlmICh0YWcgPT09IENsYXNzQ29tcG9uZW50KSB7XG4gICAgICAgICAgICBuZWVkc1JlbW91bnQgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZWVkc1JlbmRlciA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGZhaWxlZEJvdW5kYXJpZXMgIT09IG51bGwpIHtcbiAgICAgIGlmIChmYWlsZWRCb3VuZGFyaWVzLmhhcyhmaWJlcikgfHwgYWx0ZXJuYXRlICE9PSBudWxsICYmIGZhaWxlZEJvdW5kYXJpZXMuaGFzKGFsdGVybmF0ZSkpIHtcbiAgICAgICAgbmVlZHNSZW1vdW50ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobmVlZHNSZW1vdW50KSB7XG4gICAgICBmaWJlci5fZGVidWdOZWVkc1JlbW91bnQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChuZWVkc1JlbW91bnQgfHwgbmVlZHNSZW5kZXIpIHtcbiAgICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgU3luY0xhbmUsIE5vVGltZXN0YW1wKTtcbiAgICB9XG5cbiAgICBpZiAoY2hpbGQgIT09IG51bGwgJiYgIW5lZWRzUmVtb3VudCkge1xuICAgICAgc2NoZWR1bGVGaWJlcnNXaXRoRmFtaWxpZXNSZWN1cnNpdmVseShjaGlsZCwgdXBkYXRlZEZhbWlsaWVzLCBzdGFsZUZhbWlsaWVzKTtcbiAgICB9XG5cbiAgICBpZiAoc2libGluZyAhPT0gbnVsbCkge1xuICAgICAgc2NoZWR1bGVGaWJlcnNXaXRoRmFtaWxpZXNSZWN1cnNpdmVseShzaWJsaW5nLCB1cGRhdGVkRmFtaWxpZXMsIHN0YWxlRmFtaWxpZXMpO1xuICAgIH1cbiAgfVxufVxuXG52YXIgZmluZEhvc3RJbnN0YW5jZXNGb3JSZWZyZXNoID0gZnVuY3Rpb24gKHJvb3QsIGZhbWlsaWVzKSB7XG4gIHtcbiAgICB2YXIgaG9zdEluc3RhbmNlcyA9IG5ldyBTZXQoKTtcbiAgICB2YXIgdHlwZXMgPSBuZXcgU2V0KGZhbWlsaWVzLm1hcChmdW5jdGlvbiAoZmFtaWx5KSB7XG4gICAgICByZXR1cm4gZmFtaWx5LmN1cnJlbnQ7XG4gICAgfSkpO1xuICAgIGZpbmRIb3N0SW5zdGFuY2VzRm9yTWF0Y2hpbmdGaWJlcnNSZWN1cnNpdmVseShyb290LmN1cnJlbnQsIHR5cGVzLCBob3N0SW5zdGFuY2VzKTtcbiAgICByZXR1cm4gaG9zdEluc3RhbmNlcztcbiAgfVxufTtcblxuZnVuY3Rpb24gZmluZEhvc3RJbnN0YW5jZXNGb3JNYXRjaGluZ0ZpYmVyc1JlY3Vyc2l2ZWx5KGZpYmVyLCB0eXBlcywgaG9zdEluc3RhbmNlcykge1xuICB7XG4gICAgdmFyIGNoaWxkID0gZmliZXIuY2hpbGQsXG4gICAgICAgIHNpYmxpbmcgPSBmaWJlci5zaWJsaW5nLFxuICAgICAgICB0YWcgPSBmaWJlci50YWcsXG4gICAgICAgIHR5cGUgPSBmaWJlci50eXBlO1xuICAgIHZhciBjYW5kaWRhdGVUeXBlID0gbnVsbDtcblxuICAgIHN3aXRjaCAodGFnKSB7XG4gICAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgICAgY2FuZGlkYXRlVHlwZSA9IHR5cGU7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICAgIGNhbmRpZGF0ZVR5cGUgPSB0eXBlLnJlbmRlcjtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIGRpZE1hdGNoID0gZmFsc2U7XG5cbiAgICBpZiAoY2FuZGlkYXRlVHlwZSAhPT0gbnVsbCkge1xuICAgICAgaWYgKHR5cGVzLmhhcyhjYW5kaWRhdGVUeXBlKSkge1xuICAgICAgICBkaWRNYXRjaCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRpZE1hdGNoKSB7XG4gICAgICAvLyBXZSBoYXZlIGEgbWF0Y2guIFRoaXMgb25seSBkcmlsbHMgZG93biB0byB0aGUgY2xvc2VzdCBob3N0IGNvbXBvbmVudHMuXG4gICAgICAvLyBUaGVyZSdzIG5vIG5lZWQgdG8gc2VhcmNoIGRlZXBlciBiZWNhdXNlIGZvciB0aGUgcHVycG9zZSBvZiBnaXZpbmdcbiAgICAgIC8vIHZpc3VhbCBmZWVkYmFjaywgXCJmbGFzaGluZ1wiIG91dGVybW9zdCBwYXJlbnQgcmVjdGFuZ2xlcyBpcyBzdWZmaWNpZW50LlxuICAgICAgZmluZEhvc3RJbnN0YW5jZXNGb3JGaWJlclNoYWxsb3dseShmaWJlciwgaG9zdEluc3RhbmNlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIHRoZXJlJ3Mgbm8gbWF0Y2gsIG1heWJlIHRoZXJlIHdpbGwgYmUgb25lIGZ1cnRoZXIgZG93biBpbiB0aGUgY2hpbGQgdHJlZS5cbiAgICAgIGlmIChjaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICBmaW5kSG9zdEluc3RhbmNlc0Zvck1hdGNoaW5nRmliZXJzUmVjdXJzaXZlbHkoY2hpbGQsIHR5cGVzLCBob3N0SW5zdGFuY2VzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2libGluZyAhPT0gbnVsbCkge1xuICAgICAgZmluZEhvc3RJbnN0YW5jZXNGb3JNYXRjaGluZ0ZpYmVyc1JlY3Vyc2l2ZWx5KHNpYmxpbmcsIHR5cGVzLCBob3N0SW5zdGFuY2VzKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluZEhvc3RJbnN0YW5jZXNGb3JGaWJlclNoYWxsb3dseShmaWJlciwgaG9zdEluc3RhbmNlcykge1xuICB7XG4gICAgdmFyIGZvdW5kSG9zdEluc3RhbmNlcyA9IGZpbmRDaGlsZEhvc3RJbnN0YW5jZXNGb3JGaWJlclNoYWxsb3dseShmaWJlciwgaG9zdEluc3RhbmNlcyk7XG5cbiAgICBpZiAoZm91bmRIb3N0SW5zdGFuY2VzKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBJZiB3ZSBkaWRuJ3QgZmluZCBhbnkgaG9zdCBjaGlsZHJlbiwgZmFsbGJhY2sgdG8gY2xvc2VzdCBob3N0IHBhcmVudC5cblxuXG4gICAgdmFyIG5vZGUgPSBmaWJlcjtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBzd2l0Y2ggKG5vZGUudGFnKSB7XG4gICAgICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgICAgICBob3N0SW5zdGFuY2VzLmFkZChub2RlLnN0YXRlTm9kZSk7XG4gICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICAgICAgICBob3N0SW5zdGFuY2VzLmFkZChub2RlLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKTtcbiAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgICAgICBob3N0SW5zdGFuY2VzLmFkZChub2RlLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChub2RlLnJldHVybiA9PT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHRvIHJlYWNoIHJvb3QgZmlyc3QuJyk7XG4gICAgICB9XG5cbiAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluZENoaWxkSG9zdEluc3RhbmNlc0ZvckZpYmVyU2hhbGxvd2x5KGZpYmVyLCBob3N0SW5zdGFuY2VzKSB7XG4gIHtcbiAgICB2YXIgbm9kZSA9IGZpYmVyO1xuICAgIHZhciBmb3VuZEhvc3RJbnN0YW5jZXMgPSBmYWxzZTtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAobm9kZS50YWcgPT09IEhvc3RDb21wb25lbnQpIHtcbiAgICAgICAgLy8gV2UgZ290IGEgbWF0Y2guXG4gICAgICAgIGZvdW5kSG9zdEluc3RhbmNlcyA9IHRydWU7XG4gICAgICAgIGhvc3RJbnN0YW5jZXMuYWRkKG5vZGUuc3RhdGVOb2RlKTsgLy8gVGhlcmUgbWF5IHN0aWxsIGJlIG1vcmUsIHNvIGtlZXAgc2VhcmNoaW5nLlxuICAgICAgfSBlbHNlIGlmIChub2RlLmNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgICAgbm9kZSA9IG5vZGUuY2hpbGQ7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZSA9PT0gZmliZXIpIHtcbiAgICAgICAgcmV0dXJuIGZvdW5kSG9zdEluc3RhbmNlcztcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKG5vZGUuc2libGluZyA9PT0gbnVsbCkge1xuICAgICAgICBpZiAobm9kZS5yZXR1cm4gPT09IG51bGwgfHwgbm9kZS5yZXR1cm4gPT09IGZpYmVyKSB7XG4gICAgICAgICAgcmV0dXJuIGZvdW5kSG9zdEluc3RhbmNlcztcbiAgICAgICAgfVxuXG4gICAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICAgIH1cblxuICAgICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbnZhciBoYXNCYWRNYXBQb2x5ZmlsbDtcblxue1xuICBoYXNCYWRNYXBQb2x5ZmlsbCA9IGZhbHNlO1xuXG4gIHRyeSB7XG4gICAgdmFyIG5vbkV4dGVuc2libGVPYmplY3QgPSBPYmplY3QucHJldmVudEV4dGVuc2lvbnMoe30pO1xuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLW5ldyAqL1xuXG4gICAgbmV3IE1hcChbW25vbkV4dGVuc2libGVPYmplY3QsIG51bGxdXSk7XG4gICAgbmV3IFNldChbbm9uRXh0ZW5zaWJsZU9iamVjdF0pO1xuICAgIC8qIGVzbGludC1lbmFibGUgbm8tbmV3ICovXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBUT0RPOiBDb25zaWRlciB3YXJuaW5nIGFib3V0IGJhZCBwb2x5ZmlsbHNcbiAgICBoYXNCYWRNYXBQb2x5ZmlsbCA9IHRydWU7XG4gIH1cbn1cblxudmFyIGRlYnVnQ291bnRlciA9IDE7XG5cbmZ1bmN0aW9uIEZpYmVyTm9kZSh0YWcsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKSB7XG4gIC8vIEluc3RhbmNlXG4gIHRoaXMudGFnID0gdGFnO1xuICB0aGlzLmtleSA9IGtleTtcbiAgdGhpcy5lbGVtZW50VHlwZSA9IG51bGw7XG4gIHRoaXMudHlwZSA9IG51bGw7XG4gIHRoaXMuc3RhdGVOb2RlID0gbnVsbDsgLy8gRmliZXJcblxuICB0aGlzLnJldHVybiA9IG51bGw7XG4gIHRoaXMuY2hpbGQgPSBudWxsO1xuICB0aGlzLnNpYmxpbmcgPSBudWxsO1xuICB0aGlzLmluZGV4ID0gMDtcbiAgdGhpcy5yZWYgPSBudWxsO1xuICB0aGlzLnBlbmRpbmdQcm9wcyA9IHBlbmRpbmdQcm9wcztcbiAgdGhpcy5tZW1vaXplZFByb3BzID0gbnVsbDtcbiAgdGhpcy51cGRhdGVRdWV1ZSA9IG51bGw7XG4gIHRoaXMubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gIHRoaXMuZGVwZW5kZW5jaWVzID0gbnVsbDtcbiAgdGhpcy5tb2RlID0gbW9kZTsgLy8gRWZmZWN0c1xuXG4gIHRoaXMuZmxhZ3MgPSBOb0ZsYWdzO1xuICB0aGlzLm5leHRFZmZlY3QgPSBudWxsO1xuICB0aGlzLmZpcnN0RWZmZWN0ID0gbnVsbDtcbiAgdGhpcy5sYXN0RWZmZWN0ID0gbnVsbDtcbiAgdGhpcy5sYW5lcyA9IE5vTGFuZXM7XG4gIHRoaXMuY2hpbGRMYW5lcyA9IE5vTGFuZXM7XG4gIHRoaXMuYWx0ZXJuYXRlID0gbnVsbDtcblxuICB7XG4gICAgLy8gTm90ZTogVGhlIGZvbGxvd2luZyBpcyBkb25lIHRvIGF2b2lkIGEgdjggcGVyZm9ybWFuY2UgY2xpZmYuXG4gICAgLy9cbiAgICAvLyBJbml0aWFsaXppbmcgdGhlIGZpZWxkcyBiZWxvdyB0byBzbWlzIGFuZCBsYXRlciB1cGRhdGluZyB0aGVtIHdpdGhcbiAgICAvLyBkb3VibGUgdmFsdWVzIHdpbGwgY2F1c2UgRmliZXJzIHRvIGVuZCB1cCBoYXZpbmcgc2VwYXJhdGUgc2hhcGVzLlxuICAgIC8vIFRoaXMgYmVoYXZpb3IvYnVnIGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCBPYmplY3QucHJldmVudEV4dGVuc2lvbigpLlxuICAgIC8vIEZvcnR1bmF0ZWx5IHRoaXMgb25seSBpbXBhY3RzIERFViBidWlsZHMuXG4gICAgLy8gVW5mb3J0dW5hdGVseSBpdCBtYWtlcyBSZWFjdCB1bnVzYWJseSBzbG93IGZvciBzb21lIGFwcGxpY2F0aW9ucy5cbiAgICAvLyBUbyB3b3JrIGFyb3VuZCB0aGlzLCBpbml0aWFsaXplIHRoZSBmaWVsZHMgYmVsb3cgd2l0aCBkb3VibGVzLlxuICAgIC8vXG4gICAgLy8gTGVhcm4gbW9yZSBhYm91dCB0aGlzIGhlcmU6XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xNDM2NVxuICAgIC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTg1MzhcbiAgICB0aGlzLmFjdHVhbER1cmF0aW9uID0gTnVtYmVyLk5hTjtcbiAgICB0aGlzLmFjdHVhbFN0YXJ0VGltZSA9IE51bWJlci5OYU47XG4gICAgdGhpcy5zZWxmQmFzZUR1cmF0aW9uID0gTnVtYmVyLk5hTjtcbiAgICB0aGlzLnRyZWVCYXNlRHVyYXRpb24gPSBOdW1iZXIuTmFOOyAvLyBJdCdzIG9rYXkgdG8gcmVwbGFjZSB0aGUgaW5pdGlhbCBkb3VibGVzIHdpdGggc21pcyBhZnRlciBpbml0aWFsaXphdGlvbi5cbiAgICAvLyBUaGlzIHdvbid0IHRyaWdnZXIgdGhlIHBlcmZvcm1hbmNlIGNsaWZmIG1lbnRpb25lZCBhYm92ZSxcbiAgICAvLyBhbmQgaXQgc2ltcGxpZmllcyBvdGhlciBwcm9maWxlciBjb2RlIChpbmNsdWRpbmcgRGV2VG9vbHMpLlxuXG4gICAgdGhpcy5hY3R1YWxEdXJhdGlvbiA9IDA7XG4gICAgdGhpcy5hY3R1YWxTdGFydFRpbWUgPSAtMTtcbiAgICB0aGlzLnNlbGZCYXNlRHVyYXRpb24gPSAwO1xuICAgIHRoaXMudHJlZUJhc2VEdXJhdGlvbiA9IDA7XG4gIH1cblxuICB7XG4gICAgLy8gVGhpcyBpc24ndCBkaXJlY3RseSB1c2VkIGJ1dCBpcyBoYW5keSBmb3IgZGVidWdnaW5nIGludGVybmFsczpcbiAgICB0aGlzLl9kZWJ1Z0lEID0gZGVidWdDb3VudGVyKys7XG4gICAgdGhpcy5fZGVidWdTb3VyY2UgPSBudWxsO1xuICAgIHRoaXMuX2RlYnVnT3duZXIgPSBudWxsO1xuICAgIHRoaXMuX2RlYnVnTmVlZHNSZW1vdW50ID0gZmFsc2U7XG4gICAgdGhpcy5fZGVidWdIb29rVHlwZXMgPSBudWxsO1xuXG4gICAgaWYgKCFoYXNCYWRNYXBQb2x5ZmlsbCAmJiB0eXBlb2YgT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBPYmplY3QucHJldmVudEV4dGVuc2lvbnModGhpcyk7XG4gICAgfVxuICB9XG59IC8vIFRoaXMgaXMgYSBjb25zdHJ1Y3RvciBmdW5jdGlvbiwgcmF0aGVyIHRoYW4gYSBQT0pPIGNvbnN0cnVjdG9yLCBzdGlsbFxuLy8gcGxlYXNlIGVuc3VyZSB3ZSBkbyB0aGUgZm9sbG93aW5nOlxuLy8gMSkgTm9ib2R5IHNob3VsZCBhZGQgYW55IGluc3RhbmNlIG1ldGhvZHMgb24gdGhpcy4gSW5zdGFuY2UgbWV0aG9kcyBjYW4gYmVcbi8vICAgIG1vcmUgZGlmZmljdWx0IHRvIHByZWRpY3Qgd2hlbiB0aGV5IGdldCBvcHRpbWl6ZWQgYW5kIHRoZXkgYXJlIGFsbW9zdFxuLy8gICAgbmV2ZXIgaW5saW5lZCBwcm9wZXJseSBpbiBzdGF0aWMgY29tcGlsZXJzLlxuLy8gMikgTm9ib2R5IHNob3VsZCByZWx5IG9uIGBpbnN0YW5jZW9mIEZpYmVyYCBmb3IgdHlwZSB0ZXN0aW5nLiBXZSBzaG91bGRcbi8vICAgIGFsd2F5cyBrbm93IHdoZW4gaXQgaXMgYSBmaWJlci5cbi8vIDMpIFdlIG1pZ2h0IHdhbnQgdG8gZXhwZXJpbWVudCB3aXRoIHVzaW5nIG51bWVyaWMga2V5cyBzaW5jZSB0aGV5IGFyZSBlYXNpZXJcbi8vICAgIHRvIG9wdGltaXplIGluIGEgbm9uLUpJVCBlbnZpcm9ubWVudC5cbi8vIDQpIFdlIGNhbiBlYXNpbHkgZ28gZnJvbSBhIGNvbnN0cnVjdG9yIHRvIGEgY3JlYXRlRmliZXIgb2JqZWN0IGxpdGVyYWwgaWYgdGhhdFxuLy8gICAgaXMgZmFzdGVyLlxuLy8gNSkgSXQgc2hvdWxkIGJlIGVhc3kgdG8gcG9ydCB0aGlzIHRvIGEgQyBzdHJ1Y3QgYW5kIGtlZXAgYSBDIGltcGxlbWVudGF0aW9uXG4vLyAgICBjb21wYXRpYmxlLlxuXG5cbnZhciBjcmVhdGVGaWJlciA9IGZ1bmN0aW9uICh0YWcsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKSB7XG4gIC8vICRGbG93Rml4TWU6IHRoZSBzaGFwZXMgYXJlIGV4YWN0IGhlcmUgYnV0IEZsb3cgZG9lc24ndCBsaWtlIGNvbnN0cnVjdG9yc1xuICByZXR1cm4gbmV3IEZpYmVyTm9kZSh0YWcsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKTtcbn07XG5cbmZ1bmN0aW9uIHNob3VsZENvbnN0cnVjdCQxKENvbXBvbmVudCkge1xuICB2YXIgcHJvdG90eXBlID0gQ29tcG9uZW50LnByb3RvdHlwZTtcbiAgcmV0dXJuICEhKHByb3RvdHlwZSAmJiBwcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudCk7XG59XG5cbmZ1bmN0aW9uIGlzU2ltcGxlRnVuY3Rpb25Db21wb25lbnQodHlwZSkge1xuICByZXR1cm4gdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicgJiYgIXNob3VsZENvbnN0cnVjdCQxKHR5cGUpICYmIHR5cGUuZGVmYXVsdFByb3BzID09PSB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiByZXNvbHZlTGF6eUNvbXBvbmVudFRhZyhDb21wb25lbnQpIHtcbiAgaWYgKHR5cGVvZiBDb21wb25lbnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gc2hvdWxkQ29uc3RydWN0JDEoQ29tcG9uZW50KSA/IENsYXNzQ29tcG9uZW50IDogRnVuY3Rpb25Db21wb25lbnQ7XG4gIH0gZWxzZSBpZiAoQ29tcG9uZW50ICE9PSB1bmRlZmluZWQgJiYgQ29tcG9uZW50ICE9PSBudWxsKSB7XG4gICAgdmFyICQkdHlwZW9mID0gQ29tcG9uZW50LiQkdHlwZW9mO1xuXG4gICAgaWYgKCQkdHlwZW9mID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFKSB7XG4gICAgICByZXR1cm4gRm9yd2FyZFJlZjtcbiAgICB9XG5cbiAgICBpZiAoJCR0eXBlb2YgPT09IFJFQUNUX01FTU9fVFlQRSkge1xuICAgICAgcmV0dXJuIE1lbW9Db21wb25lbnQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIEluZGV0ZXJtaW5hdGVDb21wb25lbnQ7XG59IC8vIFRoaXMgaXMgdXNlZCB0byBjcmVhdGUgYW4gYWx0ZXJuYXRlIGZpYmVyIHRvIGRvIHdvcmsgb24uXG5cbmZ1bmN0aW9uIGNyZWF0ZVdvcmtJblByb2dyZXNzKGN1cnJlbnQsIHBlbmRpbmdQcm9wcykge1xuICB2YXIgd29ya0luUHJvZ3Jlc3MgPSBjdXJyZW50LmFsdGVybmF0ZTtcblxuICBpZiAod29ya0luUHJvZ3Jlc3MgPT09IG51bGwpIHtcbiAgICAvLyBXZSB1c2UgYSBkb3VibGUgYnVmZmVyaW5nIHBvb2xpbmcgdGVjaG5pcXVlIGJlY2F1c2Ugd2Uga25vdyB0aGF0IHdlJ2xsXG4gICAgLy8gb25seSBldmVyIG5lZWQgYXQgbW9zdCB0d28gdmVyc2lvbnMgb2YgYSB0cmVlLiBXZSBwb29sIHRoZSBcIm90aGVyXCIgdW51c2VkXG4gICAgLy8gbm9kZSB0aGF0IHdlJ3JlIGZyZWUgdG8gcmV1c2UuIFRoaXMgaXMgbGF6aWx5IGNyZWF0ZWQgdG8gYXZvaWQgYWxsb2NhdGluZ1xuICAgIC8vIGV4dHJhIG9iamVjdHMgZm9yIHRoaW5ncyB0aGF0IGFyZSBuZXZlciB1cGRhdGVkLiBJdCBhbHNvIGFsbG93IHVzIHRvXG4gICAgLy8gcmVjbGFpbSB0aGUgZXh0cmEgbWVtb3J5IGlmIG5lZWRlZC5cbiAgICB3b3JrSW5Qcm9ncmVzcyA9IGNyZWF0ZUZpYmVyKGN1cnJlbnQudGFnLCBwZW5kaW5nUHJvcHMsIGN1cnJlbnQua2V5LCBjdXJyZW50Lm1vZGUpO1xuICAgIHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlID0gY3VycmVudC5lbGVtZW50VHlwZTtcbiAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gY3VycmVudC50eXBlO1xuICAgIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSA9IGN1cnJlbnQuc3RhdGVOb2RlO1xuXG4gICAge1xuICAgICAgLy8gREVWLW9ubHkgZmllbGRzXG4gICAgICB3b3JrSW5Qcm9ncmVzcy5fZGVidWdJRCA9IGN1cnJlbnQuX2RlYnVnSUQ7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5fZGVidWdTb3VyY2UgPSBjdXJyZW50Ll9kZWJ1Z1NvdXJjZTtcbiAgICAgIHdvcmtJblByb2dyZXNzLl9kZWJ1Z093bmVyID0gY3VycmVudC5fZGVidWdPd25lcjtcbiAgICAgIHdvcmtJblByb2dyZXNzLl9kZWJ1Z0hvb2tUeXBlcyA9IGN1cnJlbnQuX2RlYnVnSG9va1R5cGVzO1xuICAgIH1cblxuICAgIHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZSA9IGN1cnJlbnQ7XG4gICAgY3VycmVudC5hbHRlcm5hdGUgPSB3b3JrSW5Qcm9ncmVzcztcbiAgfSBlbHNlIHtcbiAgICB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMgPSBwZW5kaW5nUHJvcHM7IC8vIE5lZWRlZCBiZWNhdXNlIEJsb2NrcyBzdG9yZSBkYXRhIG9uIHR5cGUuXG5cbiAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gY3VycmVudC50eXBlOyAvLyBXZSBhbHJlYWR5IGhhdmUgYW4gYWx0ZXJuYXRlLlxuICAgIC8vIFJlc2V0IHRoZSBlZmZlY3QgdGFnLlxuXG4gICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgPSBOb0ZsYWdzOyAvLyBUaGUgZWZmZWN0IGxpc3QgaXMgbm8gbG9uZ2VyIHZhbGlkLlxuXG4gICAgd29ya0luUHJvZ3Jlc3MubmV4dEVmZmVjdCA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3MuZmlyc3RFZmZlY3QgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzLmxhc3RFZmZlY3QgPSBudWxsO1xuXG4gICAge1xuICAgICAgLy8gV2UgaW50ZW50aW9uYWxseSByZXNldCwgcmF0aGVyIHRoYW4gY29weSwgYWN0dWFsRHVyYXRpb24gJiBhY3R1YWxTdGFydFRpbWUuXG4gICAgICAvLyBUaGlzIHByZXZlbnRzIHRpbWUgZnJvbSBlbmRsZXNzbHkgYWNjdW11bGF0aW5nIGluIG5ldyBjb21taXRzLlxuICAgICAgLy8gVGhpcyBoYXMgdGhlIGRvd25zaWRlIG9mIHJlc2V0dGluZyB2YWx1ZXMgZm9yIGRpZmZlcmVudCBwcmlvcml0eSByZW5kZXJzLFxuICAgICAgLy8gQnV0IHdvcmtzIGZvciB5aWVsZGluZyAodGhlIGNvbW1vbiBjYXNlKSBhbmQgc2hvdWxkIHN1cHBvcnQgcmVzdW1pbmcuXG4gICAgICB3b3JrSW5Qcm9ncmVzcy5hY3R1YWxEdXJhdGlvbiA9IDA7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5hY3R1YWxTdGFydFRpbWUgPSAtMTtcbiAgICB9XG4gIH1cblxuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzID0gY3VycmVudC5jaGlsZExhbmVzO1xuICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IGN1cnJlbnQubGFuZXM7XG4gIHdvcmtJblByb2dyZXNzLmNoaWxkID0gY3VycmVudC5jaGlsZDtcbiAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcyA9IGN1cnJlbnQubWVtb2l6ZWRQcm9wcztcbiAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcbiAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBjdXJyZW50LnVwZGF0ZVF1ZXVlOyAvLyBDbG9uZSB0aGUgZGVwZW5kZW5jaWVzIG9iamVjdC4gVGhpcyBpcyBtdXRhdGVkIGR1cmluZyB0aGUgcmVuZGVyIHBoYXNlLCBzb1xuICAvLyBpdCBjYW5ub3QgYmUgc2hhcmVkIHdpdGggdGhlIGN1cnJlbnQgZmliZXIuXG5cbiAgdmFyIGN1cnJlbnREZXBlbmRlbmNpZXMgPSBjdXJyZW50LmRlcGVuZGVuY2llcztcbiAgd29ya0luUHJvZ3Jlc3MuZGVwZW5kZW5jaWVzID0gY3VycmVudERlcGVuZGVuY2llcyA9PT0gbnVsbCA/IG51bGwgOiB7XG4gICAgbGFuZXM6IGN1cnJlbnREZXBlbmRlbmNpZXMubGFuZXMsXG4gICAgZmlyc3RDb250ZXh0OiBjdXJyZW50RGVwZW5kZW5jaWVzLmZpcnN0Q29udGV4dFxuICB9OyAvLyBUaGVzZSB3aWxsIGJlIG92ZXJyaWRkZW4gZHVyaW5nIHRoZSBwYXJlbnQncyByZWNvbmNpbGlhdGlvblxuXG4gIHdvcmtJblByb2dyZXNzLnNpYmxpbmcgPSBjdXJyZW50LnNpYmxpbmc7XG4gIHdvcmtJblByb2dyZXNzLmluZGV4ID0gY3VycmVudC5pbmRleDtcbiAgd29ya0luUHJvZ3Jlc3MucmVmID0gY3VycmVudC5yZWY7XG5cbiAge1xuICAgIHdvcmtJblByb2dyZXNzLnNlbGZCYXNlRHVyYXRpb24gPSBjdXJyZW50LnNlbGZCYXNlRHVyYXRpb247XG4gICAgd29ya0luUHJvZ3Jlc3MudHJlZUJhc2VEdXJhdGlvbiA9IGN1cnJlbnQudHJlZUJhc2VEdXJhdGlvbjtcbiAgfVxuXG4gIHtcbiAgICB3b3JrSW5Qcm9ncmVzcy5fZGVidWdOZWVkc1JlbW91bnQgPSBjdXJyZW50Ll9kZWJ1Z05lZWRzUmVtb3VudDtcblxuICAgIHN3aXRjaCAod29ya0luUHJvZ3Jlc3MudGFnKSB7XG4gICAgICBjYXNlIEluZGV0ZXJtaW5hdGVDb21wb25lbnQ6XG4gICAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gcmVzb2x2ZUZ1bmN0aW9uRm9ySG90UmVsb2FkaW5nKGN1cnJlbnQudHlwZSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gcmVzb2x2ZUNsYXNzRm9ySG90UmVsb2FkaW5nKGN1cnJlbnQudHlwZSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSByZXNvbHZlRm9yd2FyZFJlZkZvckhvdFJlbG9hZGluZyhjdXJyZW50LnR5cGUpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gd29ya0luUHJvZ3Jlc3M7XG59IC8vIFVzZWQgdG8gcmV1c2UgYSBGaWJlciBmb3IgYSBzZWNvbmQgcGFzcy5cblxuZnVuY3Rpb24gcmVzZXRXb3JrSW5Qcm9ncmVzcyh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgLy8gVGhpcyByZXNldHMgdGhlIEZpYmVyIHRvIHdoYXQgY3JlYXRlRmliZXIgb3IgY3JlYXRlV29ya0luUHJvZ3Jlc3Mgd291bGRcbiAgLy8gaGF2ZSBzZXQgdGhlIHZhbHVlcyB0byBiZWZvcmUgZHVyaW5nIHRoZSBmaXJzdCBwYXNzLiBJZGVhbGx5IHRoaXMgd291bGRuJ3RcbiAgLy8gYmUgbmVjZXNzYXJ5IGJ1dCB1bmZvcnR1bmF0ZWx5IG1hbnkgY29kZSBwYXRocyByZWFkcyBmcm9tIHRoZSB3b3JrSW5Qcm9ncmVzc1xuICAvLyB3aGVuIHRoZXkgc2hvdWxkIGJlIHJlYWRpbmcgZnJvbSBjdXJyZW50IGFuZCB3cml0aW5nIHRvIHdvcmtJblByb2dyZXNzLlxuICAvLyBXZSBhc3N1bWUgcGVuZGluZ1Byb3BzLCBpbmRleCwga2V5LCByZWYsIHJldHVybiBhcmUgc3RpbGwgdW50b3VjaGVkIHRvXG4gIC8vIGF2b2lkIGRvaW5nIGFub3RoZXIgcmVjb25jaWxpYXRpb24uXG4gIC8vIFJlc2V0IHRoZSBlZmZlY3QgdGFnIGJ1dCBrZWVwIGFueSBQbGFjZW1lbnQgdGFncywgc2luY2UgdGhhdCdzIHNvbWV0aGluZ1xuICAvLyB0aGF0IGNoaWxkIGZpYmVyIGlzIHNldHRpbmcsIG5vdCB0aGUgcmVjb25jaWxpYXRpb24uXG4gIHdvcmtJblByb2dyZXNzLmZsYWdzICY9IFBsYWNlbWVudDsgLy8gVGhlIGVmZmVjdCBsaXN0IGlzIG5vIGxvbmdlciB2YWxpZC5cblxuICB3b3JrSW5Qcm9ncmVzcy5uZXh0RWZmZWN0ID0gbnVsbDtcbiAgd29ya0luUHJvZ3Jlc3MuZmlyc3RFZmZlY3QgPSBudWxsO1xuICB3b3JrSW5Qcm9ncmVzcy5sYXN0RWZmZWN0ID0gbnVsbDtcbiAgdmFyIGN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcy5hbHRlcm5hdGU7XG5cbiAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAvLyBSZXNldCB0byBjcmVhdGVGaWJlcidzIGluaXRpYWwgdmFsdWVzLlxuICAgIHdvcmtJblByb2dyZXNzLmNoaWxkTGFuZXMgPSBOb0xhbmVzO1xuICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gcmVuZGVyTGFuZXM7XG4gICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHMgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzcy5kZXBlbmRlbmNpZXMgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSA9IG51bGw7XG5cbiAgICB7XG4gICAgICAvLyBOb3RlOiBXZSBkb24ndCByZXNldCB0aGUgYWN0dWFsVGltZSBjb3VudHMuIEl0J3MgdXNlZnVsIHRvIGFjY3VtdWxhdGVcbiAgICAgIC8vIGFjdHVhbCB0aW1lIGFjcm9zcyBtdWx0aXBsZSByZW5kZXIgcGFzc2VzLlxuICAgICAgd29ya0luUHJvZ3Jlc3Muc2VsZkJhc2VEdXJhdGlvbiA9IDA7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy50cmVlQmFzZUR1cmF0aW9uID0gMDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gUmVzZXQgdG8gdGhlIGNsb25lZCB2YWx1ZXMgdGhhdCBjcmVhdGVXb3JrSW5Qcm9ncmVzcyB3b3VsZCd2ZS5cbiAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzID0gY3VycmVudC5jaGlsZExhbmVzO1xuICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gY3VycmVudC5sYW5lcztcbiAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IGN1cnJlbnQuY2hpbGQ7XG4gICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcyA9IGN1cnJlbnQubWVtb2l6ZWRQcm9wcztcbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuICAgIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gY3VycmVudC51cGRhdGVRdWV1ZTsgLy8gTmVlZGVkIGJlY2F1c2UgQmxvY2tzIHN0b3JlIGRhdGEgb24gdHlwZS5cblxuICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSBjdXJyZW50LnR5cGU7IC8vIENsb25lIHRoZSBkZXBlbmRlbmNpZXMgb2JqZWN0LiBUaGlzIGlzIG11dGF0ZWQgZHVyaW5nIHRoZSByZW5kZXIgcGhhc2UsIHNvXG4gICAgLy8gaXQgY2Fubm90IGJlIHNoYXJlZCB3aXRoIHRoZSBjdXJyZW50IGZpYmVyLlxuXG4gICAgdmFyIGN1cnJlbnREZXBlbmRlbmNpZXMgPSBjdXJyZW50LmRlcGVuZGVuY2llcztcbiAgICB3b3JrSW5Qcm9ncmVzcy5kZXBlbmRlbmNpZXMgPSBjdXJyZW50RGVwZW5kZW5jaWVzID09PSBudWxsID8gbnVsbCA6IHtcbiAgICAgIGxhbmVzOiBjdXJyZW50RGVwZW5kZW5jaWVzLmxhbmVzLFxuICAgICAgZmlyc3RDb250ZXh0OiBjdXJyZW50RGVwZW5kZW5jaWVzLmZpcnN0Q29udGV4dFxuICAgIH07XG5cbiAgICB7XG4gICAgICAvLyBOb3RlOiBXZSBkb24ndCByZXNldCB0aGUgYWN0dWFsVGltZSBjb3VudHMuIEl0J3MgdXNlZnVsIHRvIGFjY3VtdWxhdGVcbiAgICAgIC8vIGFjdHVhbCB0aW1lIGFjcm9zcyBtdWx0aXBsZSByZW5kZXIgcGFzc2VzLlxuICAgICAgd29ya0luUHJvZ3Jlc3Muc2VsZkJhc2VEdXJhdGlvbiA9IGN1cnJlbnQuc2VsZkJhc2VEdXJhdGlvbjtcbiAgICAgIHdvcmtJblByb2dyZXNzLnRyZWVCYXNlRHVyYXRpb24gPSBjdXJyZW50LnRyZWVCYXNlRHVyYXRpb247XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzO1xufVxuZnVuY3Rpb24gY3JlYXRlSG9zdFJvb3RGaWJlcih0YWcpIHtcbiAgdmFyIG1vZGU7XG5cbiAgaWYgKHRhZyA9PT0gQ29uY3VycmVudFJvb3QpIHtcbiAgICBtb2RlID0gQ29uY3VycmVudE1vZGUgfCBCbG9ja2luZ01vZGUgfCBTdHJpY3RNb2RlO1xuICB9IGVsc2UgaWYgKHRhZyA9PT0gQmxvY2tpbmdSb290KSB7XG4gICAgbW9kZSA9IEJsb2NraW5nTW9kZSB8IFN0cmljdE1vZGU7XG4gIH0gZWxzZSB7XG4gICAgbW9kZSA9IE5vTW9kZTtcbiAgfVxuXG4gIGlmICggaXNEZXZUb29sc1ByZXNlbnQpIHtcbiAgICAvLyBBbHdheXMgY29sbGVjdCBwcm9maWxlIHRpbWluZ3Mgd2hlbiBEZXZUb29scyBhcmUgcHJlc2VudC5cbiAgICAvLyBUaGlzIGVuYWJsZXMgRGV2VG9vbHMgdG8gc3RhcnQgY2FwdHVyaW5nIHRpbWluZyBhdCBhbnkgcG9pbnRcdTIwMTNcbiAgICAvLyBXaXRob3V0IHNvbWUgbm9kZXMgaW4gdGhlIHRyZWUgaGF2aW5nIGVtcHR5IGJhc2UgdGltZXMuXG4gICAgbW9kZSB8PSBQcm9maWxlTW9kZTtcbiAgfVxuXG4gIHJldHVybiBjcmVhdGVGaWJlcihIb3N0Um9vdCwgbnVsbCwgbnVsbCwgbW9kZSk7XG59XG5mdW5jdGlvbiBjcmVhdGVGaWJlckZyb21UeXBlQW5kUHJvcHModHlwZSwgLy8gUmVhY3QkRWxlbWVudFR5cGVcbmtleSwgcGVuZGluZ1Byb3BzLCBvd25lciwgbW9kZSwgbGFuZXMpIHtcbiAgdmFyIGZpYmVyVGFnID0gSW5kZXRlcm1pbmF0ZUNvbXBvbmVudDsgLy8gVGhlIHJlc29sdmVkIHR5cGUgaXMgc2V0IGlmIHdlIGtub3cgd2hhdCB0aGUgZmluYWwgdHlwZSB3aWxsIGJlLiBJLmUuIGl0J3Mgbm90IGxhenkuXG5cbiAgdmFyIHJlc29sdmVkVHlwZSA9IHR5cGU7XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKHNob3VsZENvbnN0cnVjdCQxKHR5cGUpKSB7XG4gICAgICBmaWJlclRhZyA9IENsYXNzQ29tcG9uZW50O1xuXG4gICAgICB7XG4gICAgICAgIHJlc29sdmVkVHlwZSA9IHJlc29sdmVDbGFzc0ZvckhvdFJlbG9hZGluZyhyZXNvbHZlZFR5cGUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB7XG4gICAgICAgIHJlc29sdmVkVHlwZSA9IHJlc29sdmVGdW5jdGlvbkZvckhvdFJlbG9hZGluZyhyZXNvbHZlZFR5cGUpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICBmaWJlclRhZyA9IEhvc3RDb21wb25lbnQ7XG4gIH0gZWxzZSB7XG4gICAgZ2V0VGFnOiBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgUkVBQ1RfRlJBR01FTlRfVFlQRTpcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KHBlbmRpbmdQcm9wcy5jaGlsZHJlbiwgbW9kZSwgbGFuZXMsIGtleSk7XG5cbiAgICAgIGNhc2UgUkVBQ1RfREVCVUdfVFJBQ0lOR19NT0RFX1RZUEU6XG4gICAgICAgIGZpYmVyVGFnID0gTW9kZTtcbiAgICAgICAgbW9kZSB8PSBEZWJ1Z1RyYWNpbmdNb2RlO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFOlxuICAgICAgICBmaWJlclRhZyA9IE1vZGU7XG4gICAgICAgIG1vZGUgfD0gU3RyaWN0TW9kZTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgUkVBQ1RfUFJPRklMRVJfVFlQRTpcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUZpYmVyRnJvbVByb2ZpbGVyKHBlbmRpbmdQcm9wcywgbW9kZSwgbGFuZXMsIGtleSk7XG5cbiAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfVFlQRTpcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUZpYmVyRnJvbVN1c3BlbnNlKHBlbmRpbmdQcm9wcywgbW9kZSwgbGFuZXMsIGtleSk7XG5cbiAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgICByZXR1cm4gY3JlYXRlRmliZXJGcm9tU3VzcGVuc2VMaXN0KHBlbmRpbmdQcm9wcywgbW9kZSwgbGFuZXMsIGtleSk7XG5cbiAgICAgIGNhc2UgUkVBQ1RfT0ZGU0NSRUVOX1RZUEU6XG4gICAgICAgIHJldHVybiBjcmVhdGVGaWJlckZyb21PZmZzY3JlZW4ocGVuZGluZ1Byb3BzLCBtb2RlLCBsYW5lcywga2V5KTtcblxuICAgICAgY2FzZSBSRUFDVF9MRUdBQ1lfSElEREVOX1RZUEU6XG4gICAgICAgIHJldHVybiBjcmVhdGVGaWJlckZyb21MZWdhY3lIaWRkZW4ocGVuZGluZ1Byb3BzLCBtb2RlLCBsYW5lcywga2V5KTtcblxuICAgICAgY2FzZSBSRUFDVF9TQ09QRV9UWVBFOlxuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZmFsbHRocm91Z2hcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAge1xuICAgICAgICAgIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgc3dpdGNoICh0eXBlLiQkdHlwZW9mKSB7XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfUFJPVklERVJfVFlQRTpcbiAgICAgICAgICAgICAgICBmaWJlclRhZyA9IENvbnRleHRQcm92aWRlcjtcbiAgICAgICAgICAgICAgICBicmVhayBnZXRUYWc7XG5cbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9DT05URVhUX1RZUEU6XG4gICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIGNvbnN1bWVyXG4gICAgICAgICAgICAgICAgZmliZXJUYWcgPSBDb250ZXh0Q29uc3VtZXI7XG4gICAgICAgICAgICAgICAgYnJlYWsgZ2V0VGFnO1xuXG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgICAgICAgICBmaWJlclRhZyA9IEZvcndhcmRSZWY7XG5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlZFR5cGUgPSByZXNvbHZlRm9yd2FyZFJlZkZvckhvdFJlbG9hZGluZyhyZXNvbHZlZFR5cGUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGJyZWFrIGdldFRhZztcblxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgICAgICAgICBmaWJlclRhZyA9IE1lbW9Db21wb25lbnQ7XG4gICAgICAgICAgICAgICAgYnJlYWsgZ2V0VGFnO1xuXG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICAgICAgICAgIGZpYmVyVGFnID0gTGF6eUNvbXBvbmVudDtcbiAgICAgICAgICAgICAgICByZXNvbHZlZFR5cGUgPSBudWxsO1xuICAgICAgICAgICAgICAgIGJyZWFrIGdldFRhZztcblxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0JMT0NLX1RZUEU6XG4gICAgICAgICAgICAgICAgZmliZXJUYWcgPSBCbG9jaztcbiAgICAgICAgICAgICAgICBicmVhayBnZXRUYWc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGluZm8gPSAnJztcblxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0eXBlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwgJiYgT2JqZWN0LmtleXModHlwZSkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgIGluZm8gKz0gJyBZb3UgbGlrZWx5IGZvcmdvdCB0byBleHBvcnQgeW91ciBjb21wb25lbnQgZnJvbSB0aGUgZmlsZSAnICsgXCJpdCdzIGRlZmluZWQgaW4sIG9yIHlvdSBtaWdodCBoYXZlIG1peGVkIHVwIGRlZmF1bHQgYW5kIFwiICsgJ25hbWVkIGltcG9ydHMuJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIG93bmVyTmFtZSA9IG93bmVyID8gZ2V0Q29tcG9uZW50TmFtZShvd25lci50eXBlKSA6IG51bGw7XG5cbiAgICAgICAgICAgIGlmIChvd25lck5hbWUpIHtcbiAgICAgICAgICAgICAgaW5mbyArPSAnXFxuXFxuQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgYCcgKyBvd25lck5hbWUgKyAnYC4nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiRWxlbWVudCB0eXBlIGlzIGludmFsaWQ6IGV4cGVjdGVkIGEgc3RyaW5nIChmb3IgYnVpbHQtaW4gY29tcG9uZW50cykgb3IgYSBjbGFzcy9mdW5jdGlvbiAoZm9yIGNvbXBvc2l0ZSBjb21wb25lbnRzKSBidXQgZ290OiBcIiArICh0eXBlID09IG51bGwgPyB0eXBlIDogdHlwZW9mIHR5cGUpICsgXCIuXCIgKyBpbmZvICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXIoZmliZXJUYWcsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKTtcbiAgZmliZXIuZWxlbWVudFR5cGUgPSB0eXBlO1xuICBmaWJlci50eXBlID0gcmVzb2x2ZWRUeXBlO1xuICBmaWJlci5sYW5lcyA9IGxhbmVzO1xuXG4gIHtcbiAgICBmaWJlci5fZGVidWdPd25lciA9IG93bmVyO1xuICB9XG5cbiAgcmV0dXJuIGZpYmVyO1xufVxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tRWxlbWVudChlbGVtZW50LCBtb2RlLCBsYW5lcykge1xuICB2YXIgb3duZXIgPSBudWxsO1xuXG4gIHtcbiAgICBvd25lciA9IGVsZW1lbnQuX293bmVyO1xuICB9XG5cbiAgdmFyIHR5cGUgPSBlbGVtZW50LnR5cGU7XG4gIHZhciBrZXkgPSBlbGVtZW50LmtleTtcbiAgdmFyIHBlbmRpbmdQcm9wcyA9IGVsZW1lbnQucHJvcHM7XG4gIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyRnJvbVR5cGVBbmRQcm9wcyh0eXBlLCBrZXksIHBlbmRpbmdQcm9wcywgb3duZXIsIG1vZGUsIGxhbmVzKTtcblxuICB7XG4gICAgZmliZXIuX2RlYnVnU291cmNlID0gZWxlbWVudC5fc291cmNlO1xuICAgIGZpYmVyLl9kZWJ1Z093bmVyID0gZWxlbWVudC5fb3duZXI7XG4gIH1cblxuICByZXR1cm4gZmliZXI7XG59XG5mdW5jdGlvbiBjcmVhdGVGaWJlckZyb21GcmFnbWVudChlbGVtZW50cywgbW9kZSwgbGFuZXMsIGtleSkge1xuICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlcihGcmFnbWVudCwgZWxlbWVudHMsIGtleSwgbW9kZSk7XG4gIGZpYmVyLmxhbmVzID0gbGFuZXM7XG4gIHJldHVybiBmaWJlcjtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tUHJvZmlsZXIocGVuZGluZ1Byb3BzLCBtb2RlLCBsYW5lcywga2V5KSB7XG4gIHtcbiAgICBpZiAodHlwZW9mIHBlbmRpbmdQcm9wcy5pZCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGVycm9yKCdQcm9maWxlciBtdXN0IHNwZWNpZnkgYW4gXCJpZFwiIGFzIGEgcHJvcCcpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyKFByb2ZpbGVyLCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSB8IFByb2ZpbGVNb2RlKTsgLy8gVE9ETzogVGhlIFByb2ZpbGVyIGZpYmVyIHNob3VsZG4ndCBoYXZlIGEgdHlwZS4gSXQgaGFzIGEgdGFnLlxuXG4gIGZpYmVyLmVsZW1lbnRUeXBlID0gUkVBQ1RfUFJPRklMRVJfVFlQRTtcbiAgZmliZXIudHlwZSA9IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG4gIGZpYmVyLmxhbmVzID0gbGFuZXM7XG5cbiAge1xuICAgIGZpYmVyLnN0YXRlTm9kZSA9IHtcbiAgICAgIGVmZmVjdER1cmF0aW9uOiAwLFxuICAgICAgcGFzc2l2ZUVmZmVjdER1cmF0aW9uOiAwXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBmaWJlcjtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tU3VzcGVuc2UocGVuZGluZ1Byb3BzLCBtb2RlLCBsYW5lcywga2V5KSB7XG4gIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyKFN1c3BlbnNlQ29tcG9uZW50LCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSk7IC8vIFRPRE86IFRoZSBTdXNwZW5zZUNvbXBvbmVudCBmaWJlciBzaG91bGRuJ3QgaGF2ZSBhIHR5cGUuIEl0IGhhcyBhIHRhZy5cbiAgLy8gVGhpcyBuZWVkcyB0byBiZSBmaXhlZCBpbiBnZXRDb21wb25lbnROYW1lIHNvIHRoYXQgaXQgcmVsaWVzIG9uIHRoZSB0YWdcbiAgLy8gaW5zdGVhZC5cblxuICBmaWJlci50eXBlID0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbiAgZmliZXIuZWxlbWVudFR5cGUgPSBSRUFDVF9TVVNQRU5TRV9UWVBFO1xuICBmaWJlci5sYW5lcyA9IGxhbmVzO1xuICByZXR1cm4gZmliZXI7XG59XG5mdW5jdGlvbiBjcmVhdGVGaWJlckZyb21TdXNwZW5zZUxpc3QocGVuZGluZ1Byb3BzLCBtb2RlLCBsYW5lcywga2V5KSB7XG4gIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyKFN1c3BlbnNlTGlzdENvbXBvbmVudCwgcGVuZGluZ1Byb3BzLCBrZXksIG1vZGUpO1xuXG4gIHtcbiAgICAvLyBUT0RPOiBUaGUgU3VzcGVuc2VMaXN0Q29tcG9uZW50IGZpYmVyIHNob3VsZG4ndCBoYXZlIGEgdHlwZS4gSXQgaGFzIGEgdGFnLlxuICAgIC8vIFRoaXMgbmVlZHMgdG8gYmUgZml4ZWQgaW4gZ2V0Q29tcG9uZW50TmFtZSBzbyB0aGF0IGl0IHJlbGllcyBvbiB0aGUgdGFnXG4gICAgLy8gaW5zdGVhZC5cbiAgICBmaWJlci50eXBlID0gUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFO1xuICB9XG5cbiAgZmliZXIuZWxlbWVudFR5cGUgPSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU7XG4gIGZpYmVyLmxhbmVzID0gbGFuZXM7XG4gIHJldHVybiBmaWJlcjtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbU9mZnNjcmVlbihwZW5kaW5nUHJvcHMsIG1vZGUsIGxhbmVzLCBrZXkpIHtcbiAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXIoT2Zmc2NyZWVuQ29tcG9uZW50LCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSk7IC8vIFRPRE86IFRoZSBPZmZzY3JlZW5Db21wb25lbnQgZmliZXIgc2hvdWxkbid0IGhhdmUgYSB0eXBlLiBJdCBoYXMgYSB0YWcuXG4gIC8vIFRoaXMgbmVlZHMgdG8gYmUgZml4ZWQgaW4gZ2V0Q29tcG9uZW50TmFtZSBzbyB0aGF0IGl0IHJlbGllcyBvbiB0aGUgdGFnXG4gIC8vIGluc3RlYWQuXG5cbiAge1xuICAgIGZpYmVyLnR5cGUgPSBSRUFDVF9PRkZTQ1JFRU5fVFlQRTtcbiAgfVxuXG4gIGZpYmVyLmVsZW1lbnRUeXBlID0gUkVBQ1RfT0ZGU0NSRUVOX1RZUEU7XG4gIGZpYmVyLmxhbmVzID0gbGFuZXM7XG4gIHJldHVybiBmaWJlcjtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbUxlZ2FjeUhpZGRlbihwZW5kaW5nUHJvcHMsIG1vZGUsIGxhbmVzLCBrZXkpIHtcbiAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXIoTGVnYWN5SGlkZGVuQ29tcG9uZW50LCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSk7IC8vIFRPRE86IFRoZSBMZWdhY3lIaWRkZW4gZmliZXIgc2hvdWxkbid0IGhhdmUgYSB0eXBlLiBJdCBoYXMgYSB0YWcuXG4gIC8vIFRoaXMgbmVlZHMgdG8gYmUgZml4ZWQgaW4gZ2V0Q29tcG9uZW50TmFtZSBzbyB0aGF0IGl0IHJlbGllcyBvbiB0aGUgdGFnXG4gIC8vIGluc3RlYWQuXG5cbiAge1xuICAgIGZpYmVyLnR5cGUgPSBSRUFDVF9MRUdBQ1lfSElEREVOX1RZUEU7XG4gIH1cblxuICBmaWJlci5lbGVtZW50VHlwZSA9IFJFQUNUX0xFR0FDWV9ISURERU5fVFlQRTtcbiAgZmliZXIubGFuZXMgPSBsYW5lcztcbiAgcmV0dXJuIGZpYmVyO1xufVxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tVGV4dChjb250ZW50LCBtb2RlLCBsYW5lcykge1xuICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlcihIb3N0VGV4dCwgY29udGVudCwgbnVsbCwgbW9kZSk7XG4gIGZpYmVyLmxhbmVzID0gbGFuZXM7XG4gIHJldHVybiBmaWJlcjtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbUhvc3RJbnN0YW5jZUZvckRlbGV0aW9uKCkge1xuICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlcihIb3N0Q29tcG9uZW50LCBudWxsLCBudWxsLCBOb01vZGUpOyAvLyBUT0RPOiBUaGVzZSBzaG91bGQgbm90IG5lZWQgYSB0eXBlLlxuXG4gIGZpYmVyLmVsZW1lbnRUeXBlID0gJ0RFTEVURUQnO1xuICBmaWJlci50eXBlID0gJ0RFTEVURUQnO1xuICByZXR1cm4gZmliZXI7XG59XG5mdW5jdGlvbiBjcmVhdGVGaWJlckZyb21Qb3J0YWwocG9ydGFsLCBtb2RlLCBsYW5lcykge1xuICB2YXIgcGVuZGluZ1Byb3BzID0gcG9ydGFsLmNoaWxkcmVuICE9PSBudWxsID8gcG9ydGFsLmNoaWxkcmVuIDogW107XG4gIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyKEhvc3RQb3J0YWwsIHBlbmRpbmdQcm9wcywgcG9ydGFsLmtleSwgbW9kZSk7XG4gIGZpYmVyLmxhbmVzID0gbGFuZXM7XG4gIGZpYmVyLnN0YXRlTm9kZSA9IHtcbiAgICBjb250YWluZXJJbmZvOiBwb3J0YWwuY29udGFpbmVySW5mbyxcbiAgICBwZW5kaW5nQ2hpbGRyZW46IG51bGwsXG4gICAgLy8gVXNlZCBieSBwZXJzaXN0ZW50IHVwZGF0ZXNcbiAgICBpbXBsZW1lbnRhdGlvbjogcG9ydGFsLmltcGxlbWVudGF0aW9uXG4gIH07XG4gIHJldHVybiBmaWJlcjtcbn0gLy8gVXNlZCBmb3Igc3Rhc2hpbmcgV0lQIHByb3BlcnRpZXMgdG8gcmVwbGF5IGZhaWxlZCB3b3JrIGluIERFVi5cblxuZnVuY3Rpb24gYXNzaWduRmliZXJQcm9wZXJ0aWVzSW5ERVYodGFyZ2V0LCBzb3VyY2UpIHtcbiAgaWYgKHRhcmdldCA9PT0gbnVsbCkge1xuICAgIC8vIFRoaXMgRmliZXIncyBpbml0aWFsIHByb3BlcnRpZXMgd2lsbCBhbHdheXMgYmUgb3ZlcndyaXR0ZW4uXG4gICAgLy8gV2Ugb25seSB1c2UgYSBGaWJlciB0byBlbnN1cmUgdGhlIHNhbWUgaGlkZGVuIGNsYXNzIHNvIERFViBpc24ndCBzbG93LlxuICAgIHRhcmdldCA9IGNyZWF0ZUZpYmVyKEluZGV0ZXJtaW5hdGVDb21wb25lbnQsIG51bGwsIG51bGwsIE5vTW9kZSk7XG4gIH0gLy8gVGhpcyBpcyBpbnRlbnRpb25hbGx5IHdyaXR0ZW4gYXMgYSBsaXN0IG9mIGFsbCBwcm9wZXJ0aWVzLlxuICAvLyBXZSB0cmllZCB0byB1c2UgT2JqZWN0LmFzc2lnbigpIGluc3RlYWQgYnV0IHRoaXMgaXMgY2FsbGVkIGluXG4gIC8vIHRoZSBob3R0ZXN0IHBhdGgsIGFuZCBPYmplY3QuYXNzaWduKCkgd2FzIHRvbyBzbG93OlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEyNTAyXG4gIC8vIFRoaXMgY29kZSBpcyBERVYtb25seSBzbyBzaXplIGlzIG5vdCBhIGNvbmNlcm4uXG5cblxuICB0YXJnZXQudGFnID0gc291cmNlLnRhZztcbiAgdGFyZ2V0LmtleSA9IHNvdXJjZS5rZXk7XG4gIHRhcmdldC5lbGVtZW50VHlwZSA9IHNvdXJjZS5lbGVtZW50VHlwZTtcbiAgdGFyZ2V0LnR5cGUgPSBzb3VyY2UudHlwZTtcbiAgdGFyZ2V0LnN0YXRlTm9kZSA9IHNvdXJjZS5zdGF0ZU5vZGU7XG4gIHRhcmdldC5yZXR1cm4gPSBzb3VyY2UucmV0dXJuO1xuICB0YXJnZXQuY2hpbGQgPSBzb3VyY2UuY2hpbGQ7XG4gIHRhcmdldC5zaWJsaW5nID0gc291cmNlLnNpYmxpbmc7XG4gIHRhcmdldC5pbmRleCA9IHNvdXJjZS5pbmRleDtcbiAgdGFyZ2V0LnJlZiA9IHNvdXJjZS5yZWY7XG4gIHRhcmdldC5wZW5kaW5nUHJvcHMgPSBzb3VyY2UucGVuZGluZ1Byb3BzO1xuICB0YXJnZXQubWVtb2l6ZWRQcm9wcyA9IHNvdXJjZS5tZW1vaXplZFByb3BzO1xuICB0YXJnZXQudXBkYXRlUXVldWUgPSBzb3VyY2UudXBkYXRlUXVldWU7XG4gIHRhcmdldC5tZW1vaXplZFN0YXRlID0gc291cmNlLm1lbW9pemVkU3RhdGU7XG4gIHRhcmdldC5kZXBlbmRlbmNpZXMgPSBzb3VyY2UuZGVwZW5kZW5jaWVzO1xuICB0YXJnZXQubW9kZSA9IHNvdXJjZS5tb2RlO1xuICB0YXJnZXQuZmxhZ3MgPSBzb3VyY2UuZmxhZ3M7XG4gIHRhcmdldC5uZXh0RWZmZWN0ID0gc291cmNlLm5leHRFZmZlY3Q7XG4gIHRhcmdldC5maXJzdEVmZmVjdCA9IHNvdXJjZS5maXJzdEVmZmVjdDtcbiAgdGFyZ2V0Lmxhc3RFZmZlY3QgPSBzb3VyY2UubGFzdEVmZmVjdDtcbiAgdGFyZ2V0LmxhbmVzID0gc291cmNlLmxhbmVzO1xuICB0YXJnZXQuY2hpbGRMYW5lcyA9IHNvdXJjZS5jaGlsZExhbmVzO1xuICB0YXJnZXQuYWx0ZXJuYXRlID0gc291cmNlLmFsdGVybmF0ZTtcblxuICB7XG4gICAgdGFyZ2V0LmFjdHVhbER1cmF0aW9uID0gc291cmNlLmFjdHVhbER1cmF0aW9uO1xuICAgIHRhcmdldC5hY3R1YWxTdGFydFRpbWUgPSBzb3VyY2UuYWN0dWFsU3RhcnRUaW1lO1xuICAgIHRhcmdldC5zZWxmQmFzZUR1cmF0aW9uID0gc291cmNlLnNlbGZCYXNlRHVyYXRpb247XG4gICAgdGFyZ2V0LnRyZWVCYXNlRHVyYXRpb24gPSBzb3VyY2UudHJlZUJhc2VEdXJhdGlvbjtcbiAgfVxuXG4gIHRhcmdldC5fZGVidWdJRCA9IHNvdXJjZS5fZGVidWdJRDtcbiAgdGFyZ2V0Ll9kZWJ1Z1NvdXJjZSA9IHNvdXJjZS5fZGVidWdTb3VyY2U7XG4gIHRhcmdldC5fZGVidWdPd25lciA9IHNvdXJjZS5fZGVidWdPd25lcjtcbiAgdGFyZ2V0Ll9kZWJ1Z05lZWRzUmVtb3VudCA9IHNvdXJjZS5fZGVidWdOZWVkc1JlbW91bnQ7XG4gIHRhcmdldC5fZGVidWdIb29rVHlwZXMgPSBzb3VyY2UuX2RlYnVnSG9va1R5cGVzO1xuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5mdW5jdGlvbiBGaWJlclJvb3ROb2RlKGNvbnRhaW5lckluZm8sIHRhZywgaHlkcmF0ZSkge1xuICB0aGlzLnRhZyA9IHRhZztcbiAgdGhpcy5jb250YWluZXJJbmZvID0gY29udGFpbmVySW5mbztcbiAgdGhpcy5wZW5kaW5nQ2hpbGRyZW4gPSBudWxsO1xuICB0aGlzLmN1cnJlbnQgPSBudWxsO1xuICB0aGlzLnBpbmdDYWNoZSA9IG51bGw7XG4gIHRoaXMuZmluaXNoZWRXb3JrID0gbnVsbDtcbiAgdGhpcy50aW1lb3V0SGFuZGxlID0gbm9UaW1lb3V0O1xuICB0aGlzLmNvbnRleHQgPSBudWxsO1xuICB0aGlzLnBlbmRpbmdDb250ZXh0ID0gbnVsbDtcbiAgdGhpcy5oeWRyYXRlID0gaHlkcmF0ZTtcbiAgdGhpcy5jYWxsYmFja05vZGUgPSBudWxsO1xuICB0aGlzLmNhbGxiYWNrUHJpb3JpdHkgPSBOb0xhbmVQcmlvcml0eTtcbiAgdGhpcy5ldmVudFRpbWVzID0gY3JlYXRlTGFuZU1hcChOb0xhbmVzKTtcbiAgdGhpcy5leHBpcmF0aW9uVGltZXMgPSBjcmVhdGVMYW5lTWFwKE5vVGltZXN0YW1wKTtcbiAgdGhpcy5wZW5kaW5nTGFuZXMgPSBOb0xhbmVzO1xuICB0aGlzLnN1c3BlbmRlZExhbmVzID0gTm9MYW5lcztcbiAgdGhpcy5waW5nZWRMYW5lcyA9IE5vTGFuZXM7XG4gIHRoaXMuZXhwaXJlZExhbmVzID0gTm9MYW5lcztcbiAgdGhpcy5tdXRhYmxlUmVhZExhbmVzID0gTm9MYW5lcztcbiAgdGhpcy5maW5pc2hlZExhbmVzID0gTm9MYW5lcztcbiAgdGhpcy5lbnRhbmdsZWRMYW5lcyA9IE5vTGFuZXM7XG4gIHRoaXMuZW50YW5nbGVtZW50cyA9IGNyZWF0ZUxhbmVNYXAoTm9MYW5lcyk7XG5cbiAge1xuICAgIHRoaXMubXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YSA9IG51bGw7XG4gIH1cblxuICB7XG4gICAgdGhpcy5pbnRlcmFjdGlvblRocmVhZElEID0gdHJhY2luZy51bnN0YWJsZV9nZXRUaHJlYWRJRCgpO1xuICAgIHRoaXMubWVtb2l6ZWRJbnRlcmFjdGlvbnMgPSBuZXcgU2V0KCk7XG4gICAgdGhpcy5wZW5kaW5nSW50ZXJhY3Rpb25NYXAgPSBuZXcgTWFwKCk7XG4gIH1cblxuICB7XG4gICAgc3dpdGNoICh0YWcpIHtcbiAgICAgIGNhc2UgQmxvY2tpbmdSb290OlxuICAgICAgICB0aGlzLl9kZWJ1Z1Jvb3RUeXBlID0gJ2NyZWF0ZUJsb2NraW5nUm9vdCgpJztcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgQ29uY3VycmVudFJvb3Q6XG4gICAgICAgIHRoaXMuX2RlYnVnUm9vdFR5cGUgPSAnY3JlYXRlUm9vdCgpJztcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgTGVnYWN5Um9vdDpcbiAgICAgICAgdGhpcy5fZGVidWdSb290VHlwZSA9ICdjcmVhdGVMZWdhY3lSb290KCknO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlRmliZXJSb290KGNvbnRhaW5lckluZm8sIHRhZywgaHlkcmF0ZSwgaHlkcmF0aW9uQ2FsbGJhY2tzKSB7XG4gIHZhciByb290ID0gbmV3IEZpYmVyUm9vdE5vZGUoY29udGFpbmVySW5mbywgdGFnLCBoeWRyYXRlKTtcbiAgLy8gc3RhdGVOb2RlIGlzIGFueS5cblxuXG4gIHZhciB1bmluaXRpYWxpemVkRmliZXIgPSBjcmVhdGVIb3N0Um9vdEZpYmVyKHRhZyk7XG4gIHJvb3QuY3VycmVudCA9IHVuaW5pdGlhbGl6ZWRGaWJlcjtcbiAgdW5pbml0aWFsaXplZEZpYmVyLnN0YXRlTm9kZSA9IHJvb3Q7XG4gIGluaXRpYWxpemVVcGRhdGVRdWV1ZSh1bmluaXRpYWxpemVkRmliZXIpO1xuICByZXR1cm4gcm9vdDtcbn1cblxuLy8gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIHZlcnNpb24gdXNlZCBmb3Igc2VydmVyIHJlbmRlcmluZyBtYXRjaGVzIHRoZSBvbmVcbi8vIHRoYXQgaXMgZXZlbnR1YWxseSByZWFkIGR1cmluZyBoeWRyYXRpb24uXG4vLyBJZiB0aGV5IGRvbid0IG1hdGNoIHRoZXJlJ3MgYSBwb3RlbnRpYWwgdGVhciBhbmQgYSBmdWxsIGRlb3B0IHJlbmRlciBpcyByZXF1aXJlZC5cblxuZnVuY3Rpb24gcmVnaXN0ZXJNdXRhYmxlU291cmNlRm9ySHlkcmF0aW9uKHJvb3QsIG11dGFibGVTb3VyY2UpIHtcbiAgdmFyIGdldFZlcnNpb24gPSBtdXRhYmxlU291cmNlLl9nZXRWZXJzaW9uO1xuICB2YXIgdmVyc2lvbiA9IGdldFZlcnNpb24obXV0YWJsZVNvdXJjZS5fc291cmNlKTsgLy8gVE9ETyBDbGVhciB0aGlzIGRhdGEgb25jZSBhbGwgcGVuZGluZyBoeWRyYXRpb24gd29yayBpcyBmaW5pc2hlZC5cbiAgLy8gUmV0YWluaW5nIGl0IGZvcmV2ZXIgbWF5IGludGVyZmVyZSB3aXRoIEdDLlxuXG4gIGlmIChyb290Lm11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGEgPT0gbnVsbCkge1xuICAgIHJvb3QubXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YSA9IFttdXRhYmxlU291cmNlLCB2ZXJzaW9uXTtcbiAgfSBlbHNlIHtcbiAgICByb290Lm11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGEucHVzaChtdXRhYmxlU291cmNlLCB2ZXJzaW9uKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVQb3J0YWwoY2hpbGRyZW4sIGNvbnRhaW5lckluZm8sIC8vIFRPRE86IGZpZ3VyZSBvdXQgdGhlIEFQSSBmb3IgY3Jvc3MtcmVuZGVyZXIgaW1wbGVtZW50YXRpb24uXG5pbXBsZW1lbnRhdGlvbikge1xuICB2YXIga2V5ID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiBudWxsO1xuICByZXR1cm4ge1xuICAgIC8vIFRoaXMgdGFnIGFsbG93IHVzIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IHRoaXMgYXMgYSBSZWFjdCBQb3J0YWxcbiAgICAkJHR5cGVvZjogUkVBQ1RfUE9SVEFMX1RZUEUsXG4gICAga2V5OiBrZXkgPT0gbnVsbCA/IG51bGwgOiAnJyArIGtleSxcbiAgICBjaGlsZHJlbjogY2hpbGRyZW4sXG4gICAgY29udGFpbmVySW5mbzogY29udGFpbmVySW5mbyxcbiAgICBpbXBsZW1lbnRhdGlvbjogaW1wbGVtZW50YXRpb25cbiAgfTtcbn1cblxudmFyIGRpZFdhcm5BYm91dE5lc3RlZFVwZGF0ZXM7XG52YXIgZGlkV2FybkFib3V0RmluZE5vZGVJblN0cmljdE1vZGU7XG5cbntcbiAgZGlkV2FybkFib3V0TmVzdGVkVXBkYXRlcyA9IGZhbHNlO1xuICBkaWRXYXJuQWJvdXRGaW5kTm9kZUluU3RyaWN0TW9kZSA9IHt9O1xufVxuXG5mdW5jdGlvbiBnZXRDb250ZXh0Rm9yU3VidHJlZShwYXJlbnRDb21wb25lbnQpIHtcbiAgaWYgKCFwYXJlbnRDb21wb25lbnQpIHtcbiAgICByZXR1cm4gZW1wdHlDb250ZXh0T2JqZWN0O1xuICB9XG5cbiAgdmFyIGZpYmVyID0gZ2V0KHBhcmVudENvbXBvbmVudCk7XG4gIHZhciBwYXJlbnRDb250ZXh0ID0gZmluZEN1cnJlbnRVbm1hc2tlZENvbnRleHQoZmliZXIpO1xuXG4gIGlmIChmaWJlci50YWcgPT09IENsYXNzQ29tcG9uZW50KSB7XG4gICAgdmFyIENvbXBvbmVudCA9IGZpYmVyLnR5cGU7XG5cbiAgICBpZiAoaXNDb250ZXh0UHJvdmlkZXIoQ29tcG9uZW50KSkge1xuICAgICAgcmV0dXJuIHByb2Nlc3NDaGlsZENvbnRleHQoZmliZXIsIENvbXBvbmVudCwgcGFyZW50Q29udGV4dCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHBhcmVudENvbnRleHQ7XG59XG5cbmZ1bmN0aW9uIGZpbmRIb3N0SW5zdGFuY2VXaXRoV2FybmluZyhjb21wb25lbnQsIG1ldGhvZE5hbWUpIHtcbiAge1xuICAgIHZhciBmaWJlciA9IGdldChjb21wb25lbnQpO1xuXG4gICAgaWYgKGZpYmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0eXBlb2YgY29tcG9uZW50LnJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiVW5hYmxlIHRvIGZpbmQgbm9kZSBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LlwiICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiQXJndW1lbnQgYXBwZWFycyB0byBub3QgYmUgYSBSZWFjdENvbXBvbmVudC4gS2V5czogXCIgKyBPYmplY3Qua2V5cyhjb21wb25lbnQpICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGhvc3RGaWJlciA9IGZpbmRDdXJyZW50SG9zdEZpYmVyKGZpYmVyKTtcblxuICAgIGlmIChob3N0RmliZXIgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChob3N0RmliZXIubW9kZSAmIFN0cmljdE1vZGUpIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnQ29tcG9uZW50JztcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRGaW5kTm9kZUluU3RyaWN0TW9kZVtjb21wb25lbnROYW1lXSkge1xuICAgICAgICBkaWRXYXJuQWJvdXRGaW5kTm9kZUluU3RyaWN0TW9kZVtjb21wb25lbnROYW1lXSA9IHRydWU7XG4gICAgICAgIHZhciBwcmV2aW91c0ZpYmVyID0gY3VycmVudDtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIHNldEN1cnJlbnRGaWJlcihob3N0RmliZXIpO1xuXG4gICAgICAgICAgaWYgKGZpYmVyLm1vZGUgJiBTdHJpY3RNb2RlKSB7XG4gICAgICAgICAgICBlcnJvcignJXMgaXMgZGVwcmVjYXRlZCBpbiBTdHJpY3RNb2RlLiAnICsgJyVzIHdhcyBwYXNzZWQgYW4gaW5zdGFuY2Ugb2YgJXMgd2hpY2ggaXMgaW5zaWRlIFN0cmljdE1vZGUuICcgKyAnSW5zdGVhZCwgYWRkIGEgcmVmIGRpcmVjdGx5IHRvIHRoZSBlbGVtZW50IHlvdSB3YW50IHRvIHJlZmVyZW5jZS4gJyArICdMZWFybiBtb3JlIGFib3V0IHVzaW5nIHJlZnMgc2FmZWx5IGhlcmU6ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3N0cmljdC1tb2RlLWZpbmQtbm9kZScsIG1ldGhvZE5hbWUsIG1ldGhvZE5hbWUsIGNvbXBvbmVudE5hbWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlcnJvcignJXMgaXMgZGVwcmVjYXRlZCBpbiBTdHJpY3RNb2RlLiAnICsgJyVzIHdhcyBwYXNzZWQgYW4gaW5zdGFuY2Ugb2YgJXMgd2hpY2ggcmVuZGVycyBTdHJpY3RNb2RlIGNoaWxkcmVuLiAnICsgJ0luc3RlYWQsIGFkZCBhIHJlZiBkaXJlY3RseSB0byB0aGUgZWxlbWVudCB5b3Ugd2FudCB0byByZWZlcmVuY2UuICcgKyAnTGVhcm4gbW9yZSBhYm91dCB1c2luZyByZWZzIHNhZmVseSBoZXJlOiAnICsgJ2h0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9zdHJpY3QtbW9kZS1maW5kLW5vZGUnLCBtZXRob2ROYW1lLCBtZXRob2ROYW1lLCBjb21wb25lbnROYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgLy8gSWRlYWxseSB0aGlzIHNob3VsZCByZXNldCB0byBwcmV2aW91cyBidXQgdGhpcyBzaG91bGRuJ3QgYmUgY2FsbGVkIGluXG4gICAgICAgICAgLy8gcmVuZGVyIGFuZCB0aGVyZSdzIGFub3RoZXIgd2FybmluZyBmb3IgdGhhdCBhbnl3YXkuXG4gICAgICAgICAgaWYgKHByZXZpb3VzRmliZXIpIHtcbiAgICAgICAgICAgIHNldEN1cnJlbnRGaWJlcihwcmV2aW91c0ZpYmVyKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaG9zdEZpYmVyLnN0YXRlTm9kZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVDb250YWluZXIoY29udGFpbmVySW5mbywgdGFnLCBoeWRyYXRlLCBoeWRyYXRpb25DYWxsYmFja3MpIHtcbiAgcmV0dXJuIGNyZWF0ZUZpYmVyUm9vdChjb250YWluZXJJbmZvLCB0YWcsIGh5ZHJhdGUpO1xufVxuZnVuY3Rpb24gdXBkYXRlQ29udGFpbmVyKGVsZW1lbnQsIGNvbnRhaW5lciwgcGFyZW50Q29tcG9uZW50LCBjYWxsYmFjaykge1xuICB7XG4gICAgb25TY2hlZHVsZVJvb3QoY29udGFpbmVyLCBlbGVtZW50KTtcbiAgfVxuXG4gIHZhciBjdXJyZW50JDEgPSBjb250YWluZXIuY3VycmVudDtcbiAgdmFyIGV2ZW50VGltZSA9IHJlcXVlc3RFdmVudFRpbWUoKTtcblxuICB7XG4gICAgLy8gJEZsb3dFeHBlY3RlZEVycm9yIC0gamVzdCBpc24ndCBhIGdsb2JhbCwgYW5kIGlzbid0IHJlY29nbml6ZWQgb3V0c2lkZSBvZiB0ZXN0c1xuICAgIGlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIGplc3QpIHtcbiAgICAgIHdhcm5JZlVubW9ja2VkU2NoZWR1bGVyKGN1cnJlbnQkMSk7XG4gICAgICB3YXJuSWZOb3RTY29wZWRXaXRoTWF0Y2hpbmdBY3QoY3VycmVudCQxKTtcbiAgICB9XG4gIH1cblxuICB2YXIgbGFuZSA9IHJlcXVlc3RVcGRhdGVMYW5lKGN1cnJlbnQkMSk7XG5cbiAgdmFyIGNvbnRleHQgPSBnZXRDb250ZXh0Rm9yU3VidHJlZShwYXJlbnRDb21wb25lbnQpO1xuXG4gIGlmIChjb250YWluZXIuY29udGV4dCA9PT0gbnVsbCkge1xuICAgIGNvbnRhaW5lci5jb250ZXh0ID0gY29udGV4dDtcbiAgfSBlbHNlIHtcbiAgICBjb250YWluZXIucGVuZGluZ0NvbnRleHQgPSBjb250ZXh0O1xuICB9XG5cbiAge1xuICAgIGlmIChpc1JlbmRlcmluZyAmJiBjdXJyZW50ICE9PSBudWxsICYmICFkaWRXYXJuQWJvdXROZXN0ZWRVcGRhdGVzKSB7XG4gICAgICBkaWRXYXJuQWJvdXROZXN0ZWRVcGRhdGVzID0gdHJ1ZTtcblxuICAgICAgZXJyb3IoJ1JlbmRlciBtZXRob2RzIHNob3VsZCBiZSBhIHB1cmUgZnVuY3Rpb24gb2YgcHJvcHMgYW5kIHN0YXRlOyAnICsgJ3RyaWdnZXJpbmcgbmVzdGVkIGNvbXBvbmVudCB1cGRhdGVzIGZyb20gcmVuZGVyIGlzIG5vdCBhbGxvd2VkLiAnICsgJ0lmIG5lY2Vzc2FyeSwgdHJpZ2dlciBuZXN0ZWQgdXBkYXRlcyBpbiBjb21wb25lbnREaWRVcGRhdGUuXFxuXFxuJyArICdDaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiAlcy4nLCBnZXRDb21wb25lbnROYW1lKGN1cnJlbnQudHlwZSkgfHwgJ1Vua25vd24nKTtcbiAgICB9XG4gIH1cblxuICB2YXIgdXBkYXRlID0gY3JlYXRlVXBkYXRlKGV2ZW50VGltZSwgbGFuZSk7IC8vIENhdXRpb246IFJlYWN0IERldlRvb2xzIGN1cnJlbnRseSBkZXBlbmRzIG9uIHRoaXMgcHJvcGVydHlcbiAgLy8gYmVpbmcgY2FsbGVkIFwiZWxlbWVudFwiLlxuXG4gIHVwZGF0ZS5wYXlsb2FkID0ge1xuICAgIGVsZW1lbnQ6IGVsZW1lbnRcbiAgfTtcbiAgY2FsbGJhY2sgPSBjYWxsYmFjayA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGNhbGxiYWNrO1xuXG4gIGlmIChjYWxsYmFjayAhPT0gbnVsbCkge1xuICAgIHtcbiAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZXJyb3IoJ3JlbmRlciguLi4pOiBFeHBlY3RlZCB0aGUgbGFzdCBvcHRpb25hbCBgY2FsbGJhY2tgIGFyZ3VtZW50IHRvIGJlIGEgJyArICdmdW5jdGlvbi4gSW5zdGVhZCByZWNlaXZlZDogJXMuJywgY2FsbGJhY2spO1xuICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZS5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICB9XG5cbiAgZW5xdWV1ZVVwZGF0ZShjdXJyZW50JDEsIHVwZGF0ZSk7XG4gIHNjaGVkdWxlVXBkYXRlT25GaWJlcihjdXJyZW50JDEsIGxhbmUsIGV2ZW50VGltZSk7XG4gIHJldHVybiBsYW5lO1xufVxuZnVuY3Rpb24gZ2V0UHVibGljUm9vdEluc3RhbmNlKGNvbnRhaW5lcikge1xuICB2YXIgY29udGFpbmVyRmliZXIgPSBjb250YWluZXIuY3VycmVudDtcblxuICBpZiAoIWNvbnRhaW5lckZpYmVyLmNoaWxkKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzd2l0Y2ggKGNvbnRhaW5lckZpYmVyLmNoaWxkLnRhZykge1xuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgIHJldHVybiBnZXRQdWJsaWNJbnN0YW5jZShjb250YWluZXJGaWJlci5jaGlsZC5zdGF0ZU5vZGUpO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBjb250YWluZXJGaWJlci5jaGlsZC5zdGF0ZU5vZGU7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFya1JldHJ5TGFuZUltcGwoZmliZXIsIHJldHJ5TGFuZSkge1xuICB2YXIgc3VzcGVuc2VTdGF0ZSA9IGZpYmVyLm1lbW9pemVkU3RhdGU7XG5cbiAgaWYgKHN1c3BlbnNlU3RhdGUgIT09IG51bGwgJiYgc3VzcGVuc2VTdGF0ZS5kZWh5ZHJhdGVkICE9PSBudWxsKSB7XG4gICAgc3VzcGVuc2VTdGF0ZS5yZXRyeUxhbmUgPSBoaWdoZXJQcmlvcml0eUxhbmUoc3VzcGVuc2VTdGF0ZS5yZXRyeUxhbmUsIHJldHJ5TGFuZSk7XG4gIH1cbn0gLy8gSW5jcmVhc2VzIHRoZSBwcmlvcml0eSBvZiB0aGVubmFibGVzIHdoZW4gdGhleSByZXNvbHZlIHdpdGhpbiB0aGlzIGJvdW5kYXJ5LlxuXG5cbmZ1bmN0aW9uIG1hcmtSZXRyeUxhbmVJZk5vdEh5ZHJhdGVkKGZpYmVyLCByZXRyeUxhbmUpIHtcbiAgbWFya1JldHJ5TGFuZUltcGwoZmliZXIsIHJldHJ5TGFuZSk7XG4gIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG5cbiAgaWYgKGFsdGVybmF0ZSkge1xuICAgIG1hcmtSZXRyeUxhbmVJbXBsKGFsdGVybmF0ZSwgcmV0cnlMYW5lKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhdHRlbXB0VXNlckJsb2NraW5nSHlkcmF0aW9uJDEoZmliZXIpIHtcbiAgaWYgKGZpYmVyLnRhZyAhPT0gU3VzcGVuc2VDb21wb25lbnQpIHtcbiAgICAvLyBXZSBpZ25vcmUgSG9zdFJvb3RzIGhlcmUgYmVjYXVzZSB3ZSBjYW4ndCBpbmNyZWFzZVxuICAgIC8vIHRoZWlyIHByaW9yaXR5IGFuZCB0aGV5IHNob3VsZCBub3Qgc3VzcGVuZCBvbiBJL08sXG4gICAgLy8gc2luY2UgeW91IGhhdmUgdG8gd3JhcCBhbnl0aGluZyB0aGF0IG1pZ2h0IHN1c3BlbmQgaW5cbiAgICAvLyBTdXNwZW5zZS5cbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgZXZlbnRUaW1lID0gcmVxdWVzdEV2ZW50VGltZSgpO1xuICB2YXIgbGFuZSA9IElucHV0RGlzY3JldGVIeWRyYXRpb25MYW5lO1xuICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIGxhbmUsIGV2ZW50VGltZSk7XG4gIG1hcmtSZXRyeUxhbmVJZk5vdEh5ZHJhdGVkKGZpYmVyLCBsYW5lKTtcbn1cbmZ1bmN0aW9uIGF0dGVtcHRDb250aW51b3VzSHlkcmF0aW9uJDEoZmliZXIpIHtcbiAgaWYgKGZpYmVyLnRhZyAhPT0gU3VzcGVuc2VDb21wb25lbnQpIHtcbiAgICAvLyBXZSBpZ25vcmUgSG9zdFJvb3RzIGhlcmUgYmVjYXVzZSB3ZSBjYW4ndCBpbmNyZWFzZVxuICAgIC8vIHRoZWlyIHByaW9yaXR5IGFuZCB0aGV5IHNob3VsZCBub3Qgc3VzcGVuZCBvbiBJL08sXG4gICAgLy8gc2luY2UgeW91IGhhdmUgdG8gd3JhcCBhbnl0aGluZyB0aGF0IG1pZ2h0IHN1c3BlbmQgaW5cbiAgICAvLyBTdXNwZW5zZS5cbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgZXZlbnRUaW1lID0gcmVxdWVzdEV2ZW50VGltZSgpO1xuICB2YXIgbGFuZSA9IFNlbGVjdGl2ZUh5ZHJhdGlvbkxhbmU7XG4gIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgbGFuZSwgZXZlbnRUaW1lKTtcbiAgbWFya1JldHJ5TGFuZUlmTm90SHlkcmF0ZWQoZmliZXIsIGxhbmUpO1xufVxuZnVuY3Rpb24gYXR0ZW1wdEh5ZHJhdGlvbkF0Q3VycmVudFByaW9yaXR5JDEoZmliZXIpIHtcbiAgaWYgKGZpYmVyLnRhZyAhPT0gU3VzcGVuc2VDb21wb25lbnQpIHtcbiAgICAvLyBXZSBpZ25vcmUgSG9zdFJvb3RzIGhlcmUgYmVjYXVzZSB3ZSBjYW4ndCBpbmNyZWFzZVxuICAgIC8vIHRoZWlyIHByaW9yaXR5IG90aGVyIHRoYW4gc3luY2hyb25vdXNseSBmbHVzaCBpdC5cbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgZXZlbnRUaW1lID0gcmVxdWVzdEV2ZW50VGltZSgpO1xuICB2YXIgbGFuZSA9IHJlcXVlc3RVcGRhdGVMYW5lKGZpYmVyKTtcbiAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBsYW5lLCBldmVudFRpbWUpO1xuICBtYXJrUmV0cnlMYW5lSWZOb3RIeWRyYXRlZChmaWJlciwgbGFuZSk7XG59XG5mdW5jdGlvbiBydW5XaXRoUHJpb3JpdHkkMihwcmlvcml0eSwgZm4pIHtcblxuICB0cnkge1xuICAgIHNldEN1cnJlbnRVcGRhdGVMYW5lUHJpb3JpdHkocHJpb3JpdHkpO1xuICAgIHJldHVybiBmbigpO1xuICB9IGZpbmFsbHkge1xuICB9XG59XG5mdW5jdGlvbiBmaW5kSG9zdEluc3RhbmNlV2l0aE5vUG9ydGFscyhmaWJlcikge1xuICB2YXIgaG9zdEZpYmVyID0gZmluZEN1cnJlbnRIb3N0RmliZXJXaXRoTm9Qb3J0YWxzKGZpYmVyKTtcblxuICBpZiAoaG9zdEZpYmVyID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoaG9zdEZpYmVyLnRhZyA9PT0gRnVuZGFtZW50YWxDb21wb25lbnQpIHtcbiAgICByZXR1cm4gaG9zdEZpYmVyLnN0YXRlTm9kZS5pbnN0YW5jZTtcbiAgfVxuXG4gIHJldHVybiBob3N0RmliZXIuc3RhdGVOb2RlO1xufVxuXG52YXIgc2hvdWxkU3VzcGVuZEltcGwgPSBmdW5jdGlvbiAoZmliZXIpIHtcbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuZnVuY3Rpb24gc2hvdWxkU3VzcGVuZChmaWJlcikge1xuICByZXR1cm4gc2hvdWxkU3VzcGVuZEltcGwoZmliZXIpO1xufVxudmFyIG92ZXJyaWRlSG9va1N0YXRlID0gbnVsbDtcbnZhciBvdmVycmlkZUhvb2tTdGF0ZURlbGV0ZVBhdGggPSBudWxsO1xudmFyIG92ZXJyaWRlSG9va1N0YXRlUmVuYW1lUGF0aCA9IG51bGw7XG52YXIgb3ZlcnJpZGVQcm9wcyA9IG51bGw7XG52YXIgb3ZlcnJpZGVQcm9wc0RlbGV0ZVBhdGggPSBudWxsO1xudmFyIG92ZXJyaWRlUHJvcHNSZW5hbWVQYXRoID0gbnVsbDtcbnZhciBzY2hlZHVsZVVwZGF0ZSA9IG51bGw7XG52YXIgc2V0U3VzcGVuc2VIYW5kbGVyID0gbnVsbDtcblxue1xuICB2YXIgY29weVdpdGhEZWxldGVJbXBsID0gZnVuY3Rpb24gKG9iaiwgcGF0aCwgaW5kZXgpIHtcbiAgICB2YXIga2V5ID0gcGF0aFtpbmRleF07XG4gICAgdmFyIHVwZGF0ZWQgPSBBcnJheS5pc0FycmF5KG9iaikgPyBvYmouc2xpY2UoKSA6IF9hc3NpZ24oe30sIG9iaik7XG5cbiAgICBpZiAoaW5kZXggKyAxID09PSBwYXRoLmxlbmd0aCkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodXBkYXRlZCkpIHtcbiAgICAgICAgdXBkYXRlZC5zcGxpY2Uoa2V5LCAxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGV0ZSB1cGRhdGVkW2tleV07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB1cGRhdGVkO1xuICAgIH0gLy8gJEZsb3dGaXhNZSBudW1iZXIgb3Igc3RyaW5nIGlzIGZpbmUgaGVyZVxuXG5cbiAgICB1cGRhdGVkW2tleV0gPSBjb3B5V2l0aERlbGV0ZUltcGwob2JqW2tleV0sIHBhdGgsIGluZGV4ICsgMSk7XG4gICAgcmV0dXJuIHVwZGF0ZWQ7XG4gIH07XG5cbiAgdmFyIGNvcHlXaXRoRGVsZXRlID0gZnVuY3Rpb24gKG9iaiwgcGF0aCkge1xuICAgIHJldHVybiBjb3B5V2l0aERlbGV0ZUltcGwob2JqLCBwYXRoLCAwKTtcbiAgfTtcblxuICB2YXIgY29weVdpdGhSZW5hbWVJbXBsID0gZnVuY3Rpb24gKG9iaiwgb2xkUGF0aCwgbmV3UGF0aCwgaW5kZXgpIHtcbiAgICB2YXIgb2xkS2V5ID0gb2xkUGF0aFtpbmRleF07XG4gICAgdmFyIHVwZGF0ZWQgPSBBcnJheS5pc0FycmF5KG9iaikgPyBvYmouc2xpY2UoKSA6IF9hc3NpZ24oe30sIG9iaik7XG5cbiAgICBpZiAoaW5kZXggKyAxID09PSBvbGRQYXRoLmxlbmd0aCkge1xuICAgICAgdmFyIG5ld0tleSA9IG5ld1BhdGhbaW5kZXhdOyAvLyAkRmxvd0ZpeE1lIG51bWJlciBvciBzdHJpbmcgaXMgZmluZSBoZXJlXG5cbiAgICAgIHVwZGF0ZWRbbmV3S2V5XSA9IHVwZGF0ZWRbb2xkS2V5XTtcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodXBkYXRlZCkpIHtcbiAgICAgICAgdXBkYXRlZC5zcGxpY2Uob2xkS2V5LCAxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGV0ZSB1cGRhdGVkW29sZEtleV07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vICRGbG93Rml4TWUgbnVtYmVyIG9yIHN0cmluZyBpcyBmaW5lIGhlcmVcbiAgICAgIHVwZGF0ZWRbb2xkS2V5XSA9IGNvcHlXaXRoUmVuYW1lSW1wbCggLy8gJEZsb3dGaXhNZSBudW1iZXIgb3Igc3RyaW5nIGlzIGZpbmUgaGVyZVxuICAgICAgb2JqW29sZEtleV0sIG9sZFBhdGgsIG5ld1BhdGgsIGluZGV4ICsgMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVwZGF0ZWQ7XG4gIH07XG5cbiAgdmFyIGNvcHlXaXRoUmVuYW1lID0gZnVuY3Rpb24gKG9iaiwgb2xkUGF0aCwgbmV3UGF0aCkge1xuICAgIGlmIChvbGRQYXRoLmxlbmd0aCAhPT0gbmV3UGF0aC5sZW5ndGgpIHtcbiAgICAgIHdhcm4oJ2NvcHlXaXRoUmVuYW1lKCkgZXhwZWN0cyBwYXRocyBvZiB0aGUgc2FtZSBsZW5ndGgnKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5ld1BhdGgubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgIGlmIChvbGRQYXRoW2ldICE9PSBuZXdQYXRoW2ldKSB7XG4gICAgICAgICAgd2FybignY29weVdpdGhSZW5hbWUoKSBleHBlY3RzIHBhdGhzIHRvIGJlIHRoZSBzYW1lIGV4Y2VwdCBmb3IgdGhlIGRlZXBlc3Qga2V5Jyk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY29weVdpdGhSZW5hbWVJbXBsKG9iaiwgb2xkUGF0aCwgbmV3UGF0aCwgMCk7XG4gIH07XG5cbiAgdmFyIGNvcHlXaXRoU2V0SW1wbCA9IGZ1bmN0aW9uIChvYmosIHBhdGgsIGluZGV4LCB2YWx1ZSkge1xuICAgIGlmIChpbmRleCA+PSBwYXRoLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHZhciBrZXkgPSBwYXRoW2luZGV4XTtcbiAgICB2YXIgdXBkYXRlZCA9IEFycmF5LmlzQXJyYXkob2JqKSA/IG9iai5zbGljZSgpIDogX2Fzc2lnbih7fSwgb2JqKTsgLy8gJEZsb3dGaXhNZSBudW1iZXIgb3Igc3RyaW5nIGlzIGZpbmUgaGVyZVxuXG4gICAgdXBkYXRlZFtrZXldID0gY29weVdpdGhTZXRJbXBsKG9ialtrZXldLCBwYXRoLCBpbmRleCArIDEsIHZhbHVlKTtcbiAgICByZXR1cm4gdXBkYXRlZDtcbiAgfTtcblxuICB2YXIgY29weVdpdGhTZXQgPSBmdW5jdGlvbiAob2JqLCBwYXRoLCB2YWx1ZSkge1xuICAgIHJldHVybiBjb3B5V2l0aFNldEltcGwob2JqLCBwYXRoLCAwLCB2YWx1ZSk7XG4gIH07XG5cbiAgdmFyIGZpbmRIb29rID0gZnVuY3Rpb24gKGZpYmVyLCBpZCkge1xuICAgIC8vIEZvciBub3csIHRoZSBcImlkXCIgb2Ygc3RhdGVmdWwgaG9va3MgaXMganVzdCB0aGUgc3RhdGVmdWwgaG9vayBpbmRleC5cbiAgICAvLyBUaGlzIG1heSBjaGFuZ2UgaW4gdGhlIGZ1dHVyZSB3aXRoIGUuZy4gbmVzdGVkIGhvb2tzLlxuICAgIHZhciBjdXJyZW50SG9vayA9IGZpYmVyLm1lbW9pemVkU3RhdGU7XG5cbiAgICB3aGlsZSAoY3VycmVudEhvb2sgIT09IG51bGwgJiYgaWQgPiAwKSB7XG4gICAgICBjdXJyZW50SG9vayA9IGN1cnJlbnRIb29rLm5leHQ7XG4gICAgICBpZC0tO1xuICAgIH1cblxuICAgIHJldHVybiBjdXJyZW50SG9vaztcbiAgfTsgLy8gU3VwcG9ydCBEZXZUb29scyBlZGl0YWJsZSB2YWx1ZXMgZm9yIHVzZVN0YXRlIGFuZCB1c2VSZWR1Y2VyLlxuXG5cbiAgb3ZlcnJpZGVIb29rU3RhdGUgPSBmdW5jdGlvbiAoZmliZXIsIGlkLCBwYXRoLCB2YWx1ZSkge1xuICAgIHZhciBob29rID0gZmluZEhvb2soZmliZXIsIGlkKTtcblxuICAgIGlmIChob29rICE9PSBudWxsKSB7XG4gICAgICB2YXIgbmV3U3RhdGUgPSBjb3B5V2l0aFNldChob29rLm1lbW9pemVkU3RhdGUsIHBhdGgsIHZhbHVlKTtcbiAgICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IG5ld1N0YXRlO1xuICAgICAgaG9vay5iYXNlU3RhdGUgPSBuZXdTdGF0ZTsgLy8gV2UgYXJlbid0IGFjdHVhbGx5IGFkZGluZyBhbiB1cGRhdGUgdG8gdGhlIHF1ZXVlLFxuICAgICAgLy8gYmVjYXVzZSB0aGVyZSBpcyBubyB1cGRhdGUgd2UgY2FuIGFkZCBmb3IgdXNlUmVkdWNlciBob29rcyB0aGF0IHdvbid0IHRyaWdnZXIgYW4gZXJyb3IuXG4gICAgICAvLyAoVGhlcmUncyBubyBhcHByb3ByaWF0ZSBhY3Rpb24gdHlwZSBmb3IgRGV2VG9vbHMgb3ZlcnJpZGVzLilcbiAgICAgIC8vIEFzIGEgcmVzdWx0IHRob3VnaCwgUmVhY3Qgd2lsbCBzZWUgdGhlIHNjaGVkdWxlZCB1cGRhdGUgYXMgYSBub29wIGFuZCBiYWlsb3V0LlxuICAgICAgLy8gU2hhbGxvdyBjbG9uaW5nIHByb3BzIHdvcmtzIGFzIGEgd29ya2Fyb3VuZCBmb3Igbm93IHRvIGJ5cGFzcyB0aGUgYmFpbG91dCBjaGVjay5cblxuICAgICAgZmliZXIubWVtb2l6ZWRQcm9wcyA9IF9hc3NpZ24oe30sIGZpYmVyLm1lbW9pemVkUHJvcHMpO1xuICAgICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBTeW5jTGFuZSwgTm9UaW1lc3RhbXApO1xuICAgIH1cbiAgfTtcblxuICBvdmVycmlkZUhvb2tTdGF0ZURlbGV0ZVBhdGggPSBmdW5jdGlvbiAoZmliZXIsIGlkLCBwYXRoKSB7XG4gICAgdmFyIGhvb2sgPSBmaW5kSG9vayhmaWJlciwgaWQpO1xuXG4gICAgaWYgKGhvb2sgIT09IG51bGwpIHtcbiAgICAgIHZhciBuZXdTdGF0ZSA9IGNvcHlXaXRoRGVsZXRlKGhvb2subWVtb2l6ZWRTdGF0ZSwgcGF0aCk7XG4gICAgICBob29rLm1lbW9pemVkU3RhdGUgPSBuZXdTdGF0ZTtcbiAgICAgIGhvb2suYmFzZVN0YXRlID0gbmV3U3RhdGU7IC8vIFdlIGFyZW4ndCBhY3R1YWxseSBhZGRpbmcgYW4gdXBkYXRlIHRvIHRoZSBxdWV1ZSxcbiAgICAgIC8vIGJlY2F1c2UgdGhlcmUgaXMgbm8gdXBkYXRlIHdlIGNhbiBhZGQgZm9yIHVzZVJlZHVjZXIgaG9va3MgdGhhdCB3b24ndCB0cmlnZ2VyIGFuIGVycm9yLlxuICAgICAgLy8gKFRoZXJlJ3Mgbm8gYXBwcm9wcmlhdGUgYWN0aW9uIHR5cGUgZm9yIERldlRvb2xzIG92ZXJyaWRlcy4pXG4gICAgICAvLyBBcyBhIHJlc3VsdCB0aG91Z2gsIFJlYWN0IHdpbGwgc2VlIHRoZSBzY2hlZHVsZWQgdXBkYXRlIGFzIGEgbm9vcCBhbmQgYmFpbG91dC5cbiAgICAgIC8vIFNoYWxsb3cgY2xvbmluZyBwcm9wcyB3b3JrcyBhcyBhIHdvcmthcm91bmQgZm9yIG5vdyB0byBieXBhc3MgdGhlIGJhaWxvdXQgY2hlY2suXG5cbiAgICAgIGZpYmVyLm1lbW9pemVkUHJvcHMgPSBfYXNzaWduKHt9LCBmaWJlci5tZW1vaXplZFByb3BzKTtcbiAgICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgU3luY0xhbmUsIE5vVGltZXN0YW1wKTtcbiAgICB9XG4gIH07XG5cbiAgb3ZlcnJpZGVIb29rU3RhdGVSZW5hbWVQYXRoID0gZnVuY3Rpb24gKGZpYmVyLCBpZCwgb2xkUGF0aCwgbmV3UGF0aCkge1xuICAgIHZhciBob29rID0gZmluZEhvb2soZmliZXIsIGlkKTtcblxuICAgIGlmIChob29rICE9PSBudWxsKSB7XG4gICAgICB2YXIgbmV3U3RhdGUgPSBjb3B5V2l0aFJlbmFtZShob29rLm1lbW9pemVkU3RhdGUsIG9sZFBhdGgsIG5ld1BhdGgpO1xuICAgICAgaG9vay5tZW1vaXplZFN0YXRlID0gbmV3U3RhdGU7XG4gICAgICBob29rLmJhc2VTdGF0ZSA9IG5ld1N0YXRlOyAvLyBXZSBhcmVuJ3QgYWN0dWFsbHkgYWRkaW5nIGFuIHVwZGF0ZSB0byB0aGUgcXVldWUsXG4gICAgICAvLyBiZWNhdXNlIHRoZXJlIGlzIG5vIHVwZGF0ZSB3ZSBjYW4gYWRkIGZvciB1c2VSZWR1Y2VyIGhvb2tzIHRoYXQgd29uJ3QgdHJpZ2dlciBhbiBlcnJvci5cbiAgICAgIC8vIChUaGVyZSdzIG5vIGFwcHJvcHJpYXRlIGFjdGlvbiB0eXBlIGZvciBEZXZUb29scyBvdmVycmlkZXMuKVxuICAgICAgLy8gQXMgYSByZXN1bHQgdGhvdWdoLCBSZWFjdCB3aWxsIHNlZSB0aGUgc2NoZWR1bGVkIHVwZGF0ZSBhcyBhIG5vb3AgYW5kIGJhaWxvdXQuXG4gICAgICAvLyBTaGFsbG93IGNsb25pbmcgcHJvcHMgd29ya3MgYXMgYSB3b3JrYXJvdW5kIGZvciBub3cgdG8gYnlwYXNzIHRoZSBiYWlsb3V0IGNoZWNrLlxuXG4gICAgICBmaWJlci5tZW1vaXplZFByb3BzID0gX2Fzc2lnbih7fSwgZmliZXIubWVtb2l6ZWRQcm9wcyk7XG4gICAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIFN5bmNMYW5lLCBOb1RpbWVzdGFtcCk7XG4gICAgfVxuICB9OyAvLyBTdXBwb3J0IERldlRvb2xzIHByb3BzIGZvciBmdW5jdGlvbiBjb21wb25lbnRzLCBmb3J3YXJkUmVmLCBtZW1vLCBob3N0IGNvbXBvbmVudHMsIGV0Yy5cblxuXG4gIG92ZXJyaWRlUHJvcHMgPSBmdW5jdGlvbiAoZmliZXIsIHBhdGgsIHZhbHVlKSB7XG4gICAgZmliZXIucGVuZGluZ1Byb3BzID0gY29weVdpdGhTZXQoZmliZXIubWVtb2l6ZWRQcm9wcywgcGF0aCwgdmFsdWUpO1xuXG4gICAgaWYgKGZpYmVyLmFsdGVybmF0ZSkge1xuICAgICAgZmliZXIuYWx0ZXJuYXRlLnBlbmRpbmdQcm9wcyA9IGZpYmVyLnBlbmRpbmdQcm9wcztcbiAgICB9XG5cbiAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIFN5bmNMYW5lLCBOb1RpbWVzdGFtcCk7XG4gIH07XG5cbiAgb3ZlcnJpZGVQcm9wc0RlbGV0ZVBhdGggPSBmdW5jdGlvbiAoZmliZXIsIHBhdGgpIHtcbiAgICBmaWJlci5wZW5kaW5nUHJvcHMgPSBjb3B5V2l0aERlbGV0ZShmaWJlci5tZW1vaXplZFByb3BzLCBwYXRoKTtcblxuICAgIGlmIChmaWJlci5hbHRlcm5hdGUpIHtcbiAgICAgIGZpYmVyLmFsdGVybmF0ZS5wZW5kaW5nUHJvcHMgPSBmaWJlci5wZW5kaW5nUHJvcHM7XG4gICAgfVxuXG4gICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBTeW5jTGFuZSwgTm9UaW1lc3RhbXApO1xuICB9O1xuXG4gIG92ZXJyaWRlUHJvcHNSZW5hbWVQYXRoID0gZnVuY3Rpb24gKGZpYmVyLCBvbGRQYXRoLCBuZXdQYXRoKSB7XG4gICAgZmliZXIucGVuZGluZ1Byb3BzID0gY29weVdpdGhSZW5hbWUoZmliZXIubWVtb2l6ZWRQcm9wcywgb2xkUGF0aCwgbmV3UGF0aCk7XG5cbiAgICBpZiAoZmliZXIuYWx0ZXJuYXRlKSB7XG4gICAgICBmaWJlci5hbHRlcm5hdGUucGVuZGluZ1Byb3BzID0gZmliZXIucGVuZGluZ1Byb3BzO1xuICAgIH1cblxuICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgU3luY0xhbmUsIE5vVGltZXN0YW1wKTtcbiAgfTtcblxuICBzY2hlZHVsZVVwZGF0ZSA9IGZ1bmN0aW9uIChmaWJlcikge1xuICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgU3luY0xhbmUsIE5vVGltZXN0YW1wKTtcbiAgfTtcblxuICBzZXRTdXNwZW5zZUhhbmRsZXIgPSBmdW5jdGlvbiAobmV3U2hvdWxkU3VzcGVuZEltcGwpIHtcbiAgICBzaG91bGRTdXNwZW5kSW1wbCA9IG5ld1Nob3VsZFN1c3BlbmRJbXBsO1xuICB9O1xufVxuXG5mdW5jdGlvbiBmaW5kSG9zdEluc3RhbmNlQnlGaWJlcihmaWJlcikge1xuICB2YXIgaG9zdEZpYmVyID0gZmluZEN1cnJlbnRIb3N0RmliZXIoZmliZXIpO1xuXG4gIGlmIChob3N0RmliZXIgPT09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBob3N0RmliZXIuc3RhdGVOb2RlO1xufVxuXG5mdW5jdGlvbiBlbXB0eUZpbmRGaWJlckJ5SG9zdEluc3RhbmNlKGluc3RhbmNlKSB7XG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBnZXRDdXJyZW50RmliZXJGb3JEZXZUb29scygpIHtcbiAgcmV0dXJuIGN1cnJlbnQ7XG59XG5cbmZ1bmN0aW9uIGluamVjdEludG9EZXZUb29scyhkZXZUb29sc0NvbmZpZykge1xuICB2YXIgZmluZEZpYmVyQnlIb3N0SW5zdGFuY2UgPSBkZXZUb29sc0NvbmZpZy5maW5kRmliZXJCeUhvc3RJbnN0YW5jZTtcbiAgdmFyIFJlYWN0Q3VycmVudERpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnREaXNwYXRjaGVyO1xuICByZXR1cm4gaW5qZWN0SW50ZXJuYWxzKHtcbiAgICBidW5kbGVUeXBlOiBkZXZUb29sc0NvbmZpZy5idW5kbGVUeXBlLFxuICAgIHZlcnNpb246IGRldlRvb2xzQ29uZmlnLnZlcnNpb24sXG4gICAgcmVuZGVyZXJQYWNrYWdlTmFtZTogZGV2VG9vbHNDb25maWcucmVuZGVyZXJQYWNrYWdlTmFtZSxcbiAgICByZW5kZXJlckNvbmZpZzogZGV2VG9vbHNDb25maWcucmVuZGVyZXJDb25maWcsXG4gICAgb3ZlcnJpZGVIb29rU3RhdGU6IG92ZXJyaWRlSG9va1N0YXRlLFxuICAgIG92ZXJyaWRlSG9va1N0YXRlRGVsZXRlUGF0aDogb3ZlcnJpZGVIb29rU3RhdGVEZWxldGVQYXRoLFxuICAgIG92ZXJyaWRlSG9va1N0YXRlUmVuYW1lUGF0aDogb3ZlcnJpZGVIb29rU3RhdGVSZW5hbWVQYXRoLFxuICAgIG92ZXJyaWRlUHJvcHM6IG92ZXJyaWRlUHJvcHMsXG4gICAgb3ZlcnJpZGVQcm9wc0RlbGV0ZVBhdGg6IG92ZXJyaWRlUHJvcHNEZWxldGVQYXRoLFxuICAgIG92ZXJyaWRlUHJvcHNSZW5hbWVQYXRoOiBvdmVycmlkZVByb3BzUmVuYW1lUGF0aCxcbiAgICBzZXRTdXNwZW5zZUhhbmRsZXI6IHNldFN1c3BlbnNlSGFuZGxlcixcbiAgICBzY2hlZHVsZVVwZGF0ZTogc2NoZWR1bGVVcGRhdGUsXG4gICAgY3VycmVudERpc3BhdGNoZXJSZWY6IFJlYWN0Q3VycmVudERpc3BhdGNoZXIsXG4gICAgZmluZEhvc3RJbnN0YW5jZUJ5RmliZXI6IGZpbmRIb3N0SW5zdGFuY2VCeUZpYmVyLFxuICAgIGZpbmRGaWJlckJ5SG9zdEluc3RhbmNlOiBmaW5kRmliZXJCeUhvc3RJbnN0YW5jZSB8fCBlbXB0eUZpbmRGaWJlckJ5SG9zdEluc3RhbmNlLFxuICAgIC8vIFJlYWN0IFJlZnJlc2hcbiAgICBmaW5kSG9zdEluc3RhbmNlc0ZvclJlZnJlc2g6ICBmaW5kSG9zdEluc3RhbmNlc0ZvclJlZnJlc2ggLFxuICAgIHNjaGVkdWxlUmVmcmVzaDogIHNjaGVkdWxlUmVmcmVzaCAsXG4gICAgc2NoZWR1bGVSb290OiAgc2NoZWR1bGVSb290ICxcbiAgICBzZXRSZWZyZXNoSGFuZGxlcjogIHNldFJlZnJlc2hIYW5kbGVyICxcbiAgICAvLyBFbmFibGVzIERldlRvb2xzIHRvIGFwcGVuZCBvd25lciBzdGFja3MgdG8gZXJyb3IgbWVzc2FnZXMgaW4gREVWIG1vZGUuXG4gICAgZ2V0Q3VycmVudEZpYmVyOiAgZ2V0Q3VycmVudEZpYmVyRm9yRGV2VG9vbHMgXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBSZWFjdERPTVJvb3QoY29udGFpbmVyLCBvcHRpb25zKSB7XG4gIHRoaXMuX2ludGVybmFsUm9vdCA9IGNyZWF0ZVJvb3RJbXBsKGNvbnRhaW5lciwgQ29uY3VycmVudFJvb3QsIG9wdGlvbnMpO1xufVxuXG5mdW5jdGlvbiBSZWFjdERPTUJsb2NraW5nUm9vdChjb250YWluZXIsIHRhZywgb3B0aW9ucykge1xuICB0aGlzLl9pbnRlcm5hbFJvb3QgPSBjcmVhdGVSb290SW1wbChjb250YWluZXIsIHRhZywgb3B0aW9ucyk7XG59XG5cblJlYWN0RE9NUm9vdC5wcm90b3R5cGUucmVuZGVyID0gUmVhY3RET01CbG9ja2luZ1Jvb3QucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChjaGlsZHJlbikge1xuICB2YXIgcm9vdCA9IHRoaXMuX2ludGVybmFsUm9vdDtcblxuICB7XG4gICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbMV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCdyZW5kZXIoLi4uKTogZG9lcyBub3Qgc3VwcG9ydCB0aGUgc2Vjb25kIGNhbGxiYWNrIGFyZ3VtZW50LiAnICsgJ1RvIGV4ZWN1dGUgYSBzaWRlIGVmZmVjdCBhZnRlciByZW5kZXJpbmcsIGRlY2xhcmUgaXQgaW4gYSBjb21wb25lbnQgYm9keSB3aXRoIHVzZUVmZmVjdCgpLicpO1xuICAgIH1cblxuICAgIHZhciBjb250YWluZXIgPSByb290LmNvbnRhaW5lckluZm87XG5cbiAgICBpZiAoY29udGFpbmVyLm5vZGVUeXBlICE9PSBDT01NRU5UX05PREUpIHtcbiAgICAgIHZhciBob3N0SW5zdGFuY2UgPSBmaW5kSG9zdEluc3RhbmNlV2l0aE5vUG9ydGFscyhyb290LmN1cnJlbnQpO1xuXG4gICAgICBpZiAoaG9zdEluc3RhbmNlKSB7XG4gICAgICAgIGlmIChob3N0SW5zdGFuY2UucGFyZW50Tm9kZSAhPT0gY29udGFpbmVyKSB7XG4gICAgICAgICAgZXJyb3IoJ3JlbmRlciguLi4pOiBJdCBsb29rcyBsaWtlIHRoZSBSZWFjdC1yZW5kZXJlZCBjb250ZW50IG9mIHRoZSAnICsgJ3Jvb3QgY29udGFpbmVyIHdhcyByZW1vdmVkIHdpdGhvdXQgdXNpbmcgUmVhY3QuIFRoaXMgaXMgbm90ICcgKyAnc3VwcG9ydGVkIGFuZCB3aWxsIGNhdXNlIGVycm9ycy4gSW5zdGVhZCwgY2FsbCAnICsgXCJyb290LnVubW91bnQoKSB0byBlbXB0eSBhIHJvb3QncyBjb250YWluZXIuXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlQ29udGFpbmVyKGNoaWxkcmVuLCByb290LCBudWxsLCBudWxsKTtcbn07XG5cblJlYWN0RE9NUm9vdC5wcm90b3R5cGUudW5tb3VudCA9IFJlYWN0RE9NQmxvY2tpbmdSb290LnByb3RvdHlwZS51bm1vdW50ID0gZnVuY3Rpb24gKCkge1xuICB7XG4gICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbMF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCd1bm1vdW50KC4uLik6IGRvZXMgbm90IHN1cHBvcnQgYSBjYWxsYmFjayBhcmd1bWVudC4gJyArICdUbyBleGVjdXRlIGEgc2lkZSBlZmZlY3QgYWZ0ZXIgcmVuZGVyaW5nLCBkZWNsYXJlIGl0IGluIGEgY29tcG9uZW50IGJvZHkgd2l0aCB1c2VFZmZlY3QoKS4nKTtcbiAgICB9XG4gIH1cblxuICB2YXIgcm9vdCA9IHRoaXMuX2ludGVybmFsUm9vdDtcbiAgdmFyIGNvbnRhaW5lciA9IHJvb3QuY29udGFpbmVySW5mbztcbiAgdXBkYXRlQ29udGFpbmVyKG51bGwsIHJvb3QsIG51bGwsIGZ1bmN0aW9uICgpIHtcbiAgICB1bm1hcmtDb250YWluZXJBc1Jvb3QoY29udGFpbmVyKTtcbiAgfSk7XG59O1xuXG5mdW5jdGlvbiBjcmVhdGVSb290SW1wbChjb250YWluZXIsIHRhZywgb3B0aW9ucykge1xuICAvLyBUYWcgaXMgZWl0aGVyIExlZ2FjeVJvb3Qgb3IgQ29uY3VycmVudCBSb290XG4gIHZhciBoeWRyYXRlID0gb3B0aW9ucyAhPSBudWxsICYmIG9wdGlvbnMuaHlkcmF0ZSA9PT0gdHJ1ZTtcbiAgdmFyIGh5ZHJhdGlvbkNhbGxiYWNrcyA9IG9wdGlvbnMgIT0gbnVsbCAmJiBvcHRpb25zLmh5ZHJhdGlvbk9wdGlvbnMgfHwgbnVsbDtcbiAgdmFyIG11dGFibGVTb3VyY2VzID0gb3B0aW9ucyAhPSBudWxsICYmIG9wdGlvbnMuaHlkcmF0aW9uT3B0aW9ucyAhPSBudWxsICYmIG9wdGlvbnMuaHlkcmF0aW9uT3B0aW9ucy5tdXRhYmxlU291cmNlcyB8fCBudWxsO1xuICB2YXIgcm9vdCA9IGNyZWF0ZUNvbnRhaW5lcihjb250YWluZXIsIHRhZywgaHlkcmF0ZSk7XG4gIG1hcmtDb250YWluZXJBc1Jvb3Qocm9vdC5jdXJyZW50LCBjb250YWluZXIpO1xuICB2YXIgY29udGFpbmVyTm9kZVR5cGUgPSBjb250YWluZXIubm9kZVR5cGU7XG5cbiAge1xuICAgIHZhciByb290Q29udGFpbmVyRWxlbWVudCA9IGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFID8gY29udGFpbmVyLnBhcmVudE5vZGUgOiBjb250YWluZXI7XG4gICAgbGlzdGVuVG9BbGxTdXBwb3J0ZWRFdmVudHMocm9vdENvbnRhaW5lckVsZW1lbnQpO1xuICB9XG5cbiAgaWYgKG11dGFibGVTb3VyY2VzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtdXRhYmxlU291cmNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIG11dGFibGVTb3VyY2UgPSBtdXRhYmxlU291cmNlc1tpXTtcbiAgICAgIHJlZ2lzdGVyTXV0YWJsZVNvdXJjZUZvckh5ZHJhdGlvbihyb290LCBtdXRhYmxlU291cmNlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcm9vdDtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUxlZ2FjeVJvb3QoY29udGFpbmVyLCBvcHRpb25zKSB7XG4gIHJldHVybiBuZXcgUmVhY3RET01CbG9ja2luZ1Jvb3QoY29udGFpbmVyLCBMZWdhY3lSb290LCBvcHRpb25zKTtcbn1cbmZ1bmN0aW9uIGlzVmFsaWRDb250YWluZXIobm9kZSkge1xuICByZXR1cm4gISEobm9kZSAmJiAobm9kZS5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFIHx8IG5vZGUubm9kZVR5cGUgPT09IERPQ1VNRU5UX05PREUgfHwgbm9kZS5ub2RlVHlwZSA9PT0gRE9DVU1FTlRfRlJBR01FTlRfTk9ERSB8fCBub2RlLm5vZGVUeXBlID09PSBDT01NRU5UX05PREUgJiYgbm9kZS5ub2RlVmFsdWUgPT09ICcgcmVhY3QtbW91bnQtcG9pbnQtdW5zdGFibGUgJykpO1xufVxuXG52YXIgUmVhY3RDdXJyZW50T3duZXIkMyA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudE93bmVyO1xudmFyIHRvcExldmVsVXBkYXRlV2FybmluZ3M7XG52YXIgd2FybmVkQWJvdXRIeWRyYXRlQVBJID0gZmFsc2U7XG5cbntcbiAgdG9wTGV2ZWxVcGRhdGVXYXJuaW5ncyA9IGZ1bmN0aW9uIChjb250YWluZXIpIHtcbiAgICBpZiAoY29udGFpbmVyLl9yZWFjdFJvb3RDb250YWluZXIgJiYgY29udGFpbmVyLm5vZGVUeXBlICE9PSBDT01NRU5UX05PREUpIHtcbiAgICAgIHZhciBob3N0SW5zdGFuY2UgPSBmaW5kSG9zdEluc3RhbmNlV2l0aE5vUG9ydGFscyhjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lci5faW50ZXJuYWxSb290LmN1cnJlbnQpO1xuXG4gICAgICBpZiAoaG9zdEluc3RhbmNlKSB7XG4gICAgICAgIGlmIChob3N0SW5zdGFuY2UucGFyZW50Tm9kZSAhPT0gY29udGFpbmVyKSB7XG4gICAgICAgICAgZXJyb3IoJ3JlbmRlciguLi4pOiBJdCBsb29rcyBsaWtlIHRoZSBSZWFjdC1yZW5kZXJlZCBjb250ZW50IG9mIHRoaXMgJyArICdjb250YWluZXIgd2FzIHJlbW92ZWQgd2l0aG91dCB1c2luZyBSZWFjdC4gVGhpcyBpcyBub3QgJyArICdzdXBwb3J0ZWQgYW5kIHdpbGwgY2F1c2UgZXJyb3JzLiBJbnN0ZWFkLCBjYWxsICcgKyAnUmVhY3RET00udW5tb3VudENvbXBvbmVudEF0Tm9kZSB0byBlbXB0eSBhIGNvbnRhaW5lci4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBpc1Jvb3RSZW5kZXJlZEJ5U29tZVJlYWN0ID0gISFjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lcjtcbiAgICB2YXIgcm9vdEVsID0gZ2V0UmVhY3RSb290RWxlbWVudEluQ29udGFpbmVyKGNvbnRhaW5lcik7XG4gICAgdmFyIGhhc05vblJvb3RSZWFjdENoaWxkID0gISEocm9vdEVsICYmIGdldEluc3RhbmNlRnJvbU5vZGUocm9vdEVsKSk7XG5cbiAgICBpZiAoaGFzTm9uUm9vdFJlYWN0Q2hpbGQgJiYgIWlzUm9vdFJlbmRlcmVkQnlTb21lUmVhY3QpIHtcbiAgICAgIGVycm9yKCdyZW5kZXIoLi4uKTogUmVwbGFjaW5nIFJlYWN0LXJlbmRlcmVkIGNoaWxkcmVuIHdpdGggYSBuZXcgcm9vdCAnICsgJ2NvbXBvbmVudC4gSWYgeW91IGludGVuZGVkIHRvIHVwZGF0ZSB0aGUgY2hpbGRyZW4gb2YgdGhpcyBub2RlLCAnICsgJ3lvdSBzaG91bGQgaW5zdGVhZCBoYXZlIHRoZSBleGlzdGluZyBjaGlsZHJlbiB1cGRhdGUgdGhlaXIgc3RhdGUgJyArICdhbmQgcmVuZGVyIHRoZSBuZXcgY29tcG9uZW50cyBpbnN0ZWFkIG9mIGNhbGxpbmcgUmVhY3RET00ucmVuZGVyLicpO1xuICAgIH1cblxuICAgIGlmIChjb250YWluZXIubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSAmJiBjb250YWluZXIudGFnTmFtZSAmJiBjb250YWluZXIudGFnTmFtZS50b1VwcGVyQ2FzZSgpID09PSAnQk9EWScpIHtcbiAgICAgIGVycm9yKCdyZW5kZXIoKTogUmVuZGVyaW5nIGNvbXBvbmVudHMgZGlyZWN0bHkgaW50byBkb2N1bWVudC5ib2R5IGlzICcgKyAnZGlzY291cmFnZWQsIHNpbmNlIGl0cyBjaGlsZHJlbiBhcmUgb2Z0ZW4gbWFuaXB1bGF0ZWQgYnkgdGhpcmQtcGFydHkgJyArICdzY3JpcHRzIGFuZCBicm93c2VyIGV4dGVuc2lvbnMuIFRoaXMgbWF5IGxlYWQgdG8gc3VidGxlICcgKyAncmVjb25jaWxpYXRpb24gaXNzdWVzLiBUcnkgcmVuZGVyaW5nIGludG8gYSBjb250YWluZXIgZWxlbWVudCBjcmVhdGVkICcgKyAnZm9yIHlvdXIgYXBwLicpO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0UmVhY3RSb290RWxlbWVudEluQ29udGFpbmVyKGNvbnRhaW5lcikge1xuICBpZiAoIWNvbnRhaW5lcikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gRE9DVU1FTlRfTk9ERSkge1xuICAgIHJldHVybiBjb250YWluZXIuZG9jdW1lbnRFbGVtZW50O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBjb250YWluZXIuZmlyc3RDaGlsZDtcbiAgfVxufVxuXG5mdW5jdGlvbiBzaG91bGRIeWRyYXRlRHVlVG9MZWdhY3lIZXVyaXN0aWMoY29udGFpbmVyKSB7XG4gIHZhciByb290RWxlbWVudCA9IGdldFJlYWN0Um9vdEVsZW1lbnRJbkNvbnRhaW5lcihjb250YWluZXIpO1xuICByZXR1cm4gISEocm9vdEVsZW1lbnQgJiYgcm9vdEVsZW1lbnQubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSAmJiByb290RWxlbWVudC5oYXNBdHRyaWJ1dGUoUk9PVF9BVFRSSUJVVEVfTkFNRSkpO1xufVxuXG5mdW5jdGlvbiBsZWdhY3lDcmVhdGVSb290RnJvbURPTUNvbnRhaW5lcihjb250YWluZXIsIGZvcmNlSHlkcmF0ZSkge1xuICB2YXIgc2hvdWxkSHlkcmF0ZSA9IGZvcmNlSHlkcmF0ZSB8fCBzaG91bGRIeWRyYXRlRHVlVG9MZWdhY3lIZXVyaXN0aWMoY29udGFpbmVyKTsgLy8gRmlyc3QgY2xlYXIgYW55IGV4aXN0aW5nIGNvbnRlbnQuXG5cbiAgaWYgKCFzaG91bGRIeWRyYXRlKSB7XG4gICAgdmFyIHdhcm5lZCA9IGZhbHNlO1xuICAgIHZhciByb290U2libGluZztcblxuICAgIHdoaWxlIChyb290U2libGluZyA9IGNvbnRhaW5lci5sYXN0Q2hpbGQpIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKCF3YXJuZWQgJiYgcm9vdFNpYmxpbmcubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSAmJiByb290U2libGluZy5oYXNBdHRyaWJ1dGUoUk9PVF9BVFRSSUJVVEVfTkFNRSkpIHtcbiAgICAgICAgICB3YXJuZWQgPSB0cnVlO1xuXG4gICAgICAgICAgZXJyb3IoJ3JlbmRlcigpOiBUYXJnZXQgbm9kZSBoYXMgbWFya3VwIHJlbmRlcmVkIGJ5IFJlYWN0LCBidXQgdGhlcmUgJyArICdhcmUgdW5yZWxhdGVkIG5vZGVzIGFzIHdlbGwuIFRoaXMgaXMgbW9zdCBjb21tb25seSBjYXVzZWQgYnkgJyArICd3aGl0ZS1zcGFjZSBpbnNlcnRlZCBhcm91bmQgc2VydmVyLXJlbmRlcmVkIG1hcmt1cC4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb250YWluZXIucmVtb3ZlQ2hpbGQocm9vdFNpYmxpbmcpO1xuICAgIH1cbiAgfVxuXG4gIHtcbiAgICBpZiAoc2hvdWxkSHlkcmF0ZSAmJiAhZm9yY2VIeWRyYXRlICYmICF3YXJuZWRBYm91dEh5ZHJhdGVBUEkpIHtcbiAgICAgIHdhcm5lZEFib3V0SHlkcmF0ZUFQSSA9IHRydWU7XG5cbiAgICAgIHdhcm4oJ3JlbmRlcigpOiBDYWxsaW5nIFJlYWN0RE9NLnJlbmRlcigpIHRvIGh5ZHJhdGUgc2VydmVyLXJlbmRlcmVkIG1hcmt1cCAnICsgJ3dpbGwgc3RvcCB3b3JraW5nIGluIFJlYWN0IHYxOC4gUmVwbGFjZSB0aGUgUmVhY3RET00ucmVuZGVyKCkgY2FsbCAnICsgJ3dpdGggUmVhY3RET00uaHlkcmF0ZSgpIGlmIHlvdSB3YW50IFJlYWN0IHRvIGF0dGFjaCB0byB0aGUgc2VydmVyIEhUTUwuJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNyZWF0ZUxlZ2FjeVJvb3QoY29udGFpbmVyLCBzaG91bGRIeWRyYXRlID8ge1xuICAgIGh5ZHJhdGU6IHRydWVcbiAgfSA6IHVuZGVmaW5lZCk7XG59XG5cbmZ1bmN0aW9uIHdhcm5PbkludmFsaWRDYWxsYmFjayQxKGNhbGxiYWNrLCBjYWxsZXJOYW1lKSB7XG4gIHtcbiAgICBpZiAoY2FsbGJhY2sgIT09IG51bGwgJiYgdHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignJXMoLi4uKTogRXhwZWN0ZWQgdGhlIGxhc3Qgb3B0aW9uYWwgYGNhbGxiYWNrYCBhcmd1bWVudCB0byBiZSBhICcgKyAnZnVuY3Rpb24uIEluc3RlYWQgcmVjZWl2ZWQ6ICVzLicsIGNhbGxlck5hbWUsIGNhbGxiYWNrKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbGVnYWN5UmVuZGVyU3VidHJlZUludG9Db250YWluZXIocGFyZW50Q29tcG9uZW50LCBjaGlsZHJlbiwgY29udGFpbmVyLCBmb3JjZUh5ZHJhdGUsIGNhbGxiYWNrKSB7XG4gIHtcbiAgICB0b3BMZXZlbFVwZGF0ZVdhcm5pbmdzKGNvbnRhaW5lcik7XG4gICAgd2Fybk9uSW52YWxpZENhbGxiYWNrJDEoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBjYWxsYmFjaywgJ3JlbmRlcicpO1xuICB9IC8vIFRPRE86IFdpdGhvdXQgYGFueWAgdHlwZSwgRmxvdyBzYXlzIFwiUHJvcGVydHkgY2Fubm90IGJlIGFjY2Vzc2VkIG9uIGFueVxuICAvLyBtZW1iZXIgb2YgaW50ZXJzZWN0aW9uIHR5cGUuXCIgV2h5eXl5eXkuXG5cblxuICB2YXIgcm9vdCA9IGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyO1xuICB2YXIgZmliZXJSb290O1xuXG4gIGlmICghcm9vdCkge1xuICAgIC8vIEluaXRpYWwgbW91bnRcbiAgICByb290ID0gY29udGFpbmVyLl9yZWFjdFJvb3RDb250YWluZXIgPSBsZWdhY3lDcmVhdGVSb290RnJvbURPTUNvbnRhaW5lcihjb250YWluZXIsIGZvcmNlSHlkcmF0ZSk7XG4gICAgZmliZXJSb290ID0gcm9vdC5faW50ZXJuYWxSb290O1xuXG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdmFyIG9yaWdpbmFsQ2FsbGJhY2sgPSBjYWxsYmFjaztcblxuICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IGdldFB1YmxpY1Jvb3RJbnN0YW5jZShmaWJlclJvb3QpO1xuICAgICAgICBvcmlnaW5hbENhbGxiYWNrLmNhbGwoaW5zdGFuY2UpO1xuICAgICAgfTtcbiAgICB9IC8vIEluaXRpYWwgbW91bnQgc2hvdWxkIG5vdCBiZSBiYXRjaGVkLlxuXG5cbiAgICB1bmJhdGNoZWRVcGRhdGVzKGZ1bmN0aW9uICgpIHtcbiAgICAgIHVwZGF0ZUNvbnRhaW5lcihjaGlsZHJlbiwgZmliZXJSb290LCBwYXJlbnRDb21wb25lbnQsIGNhbGxiYWNrKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBmaWJlclJvb3QgPSByb290Ll9pbnRlcm5hbFJvb3Q7XG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB2YXIgX29yaWdpbmFsQ2FsbGJhY2sgPSBjYWxsYmFjaztcblxuICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IGdldFB1YmxpY1Jvb3RJbnN0YW5jZShmaWJlclJvb3QpO1xuXG4gICAgICAgIF9vcmlnaW5hbENhbGxiYWNrLmNhbGwoaW5zdGFuY2UpO1xuICAgICAgfTtcbiAgICB9IC8vIFVwZGF0ZVxuXG5cbiAgICB1cGRhdGVDb250YWluZXIoY2hpbGRyZW4sIGZpYmVyUm9vdCwgcGFyZW50Q29tcG9uZW50LCBjYWxsYmFjayk7XG4gIH1cblxuICByZXR1cm4gZ2V0UHVibGljUm9vdEluc3RhbmNlKGZpYmVyUm9vdCk7XG59XG5cbmZ1bmN0aW9uIGZpbmRET01Ob2RlKGNvbXBvbmVudE9yRWxlbWVudCkge1xuICB7XG4gICAgdmFyIG93bmVyID0gUmVhY3RDdXJyZW50T3duZXIkMy5jdXJyZW50O1xuXG4gICAgaWYgKG93bmVyICE9PSBudWxsICYmIG93bmVyLnN0YXRlTm9kZSAhPT0gbnVsbCkge1xuICAgICAgdmFyIHdhcm5lZEFib3V0UmVmc0luUmVuZGVyID0gb3duZXIuc3RhdGVOb2RlLl93YXJuZWRBYm91dFJlZnNJblJlbmRlcjtcblxuICAgICAgaWYgKCF3YXJuZWRBYm91dFJlZnNJblJlbmRlcikge1xuICAgICAgICBlcnJvcignJXMgaXMgYWNjZXNzaW5nIGZpbmRET01Ob2RlIGluc2lkZSBpdHMgcmVuZGVyKCkuICcgKyAncmVuZGVyKCkgc2hvdWxkIGJlIGEgcHVyZSBmdW5jdGlvbiBvZiBwcm9wcyBhbmQgc3RhdGUuIEl0IHNob3VsZCAnICsgJ25ldmVyIGFjY2VzcyBzb21ldGhpbmcgdGhhdCByZXF1aXJlcyBzdGFsZSBkYXRhIGZyb20gdGhlIHByZXZpb3VzICcgKyAncmVuZGVyLCBzdWNoIGFzIHJlZnMuIE1vdmUgdGhpcyBsb2dpYyB0byBjb21wb25lbnREaWRNb3VudCBhbmQgJyArICdjb21wb25lbnREaWRVcGRhdGUgaW5zdGVhZC4nLCBnZXRDb21wb25lbnROYW1lKG93bmVyLnR5cGUpIHx8ICdBIGNvbXBvbmVudCcpO1xuICAgICAgfVxuXG4gICAgICBvd25lci5zdGF0ZU5vZGUuX3dhcm5lZEFib3V0UmVmc0luUmVuZGVyID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAoY29tcG9uZW50T3JFbGVtZW50ID09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChjb21wb25lbnRPckVsZW1lbnQubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSkge1xuICAgIHJldHVybiBjb21wb25lbnRPckVsZW1lbnQ7XG4gIH1cblxuICB7XG4gICAgcmV0dXJuIGZpbmRIb3N0SW5zdGFuY2VXaXRoV2FybmluZyhjb21wb25lbnRPckVsZW1lbnQsICdmaW5kRE9NTm9kZScpO1xuICB9XG59XG5mdW5jdGlvbiBoeWRyYXRlKGVsZW1lbnQsIGNvbnRhaW5lciwgY2FsbGJhY2spIHtcbiAgaWYgKCFpc1ZhbGlkQ29udGFpbmVyKGNvbnRhaW5lcikpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJUYXJnZXQgY29udGFpbmVyIGlzIG5vdCBhIERPTSBlbGVtZW50LlwiICk7XG4gICAgfVxuICB9XG5cbiAge1xuICAgIHZhciBpc01vZGVyblJvb3QgPSBpc0NvbnRhaW5lck1hcmtlZEFzUm9vdChjb250YWluZXIpICYmIGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyID09PSB1bmRlZmluZWQ7XG5cbiAgICBpZiAoaXNNb2Rlcm5Sb290KSB7XG4gICAgICBlcnJvcignWW91IGFyZSBjYWxsaW5nIFJlYWN0RE9NLmh5ZHJhdGUoKSBvbiBhIGNvbnRhaW5lciB0aGF0IHdhcyBwcmV2aW91c2x5ICcgKyAncGFzc2VkIHRvIFJlYWN0RE9NLmNyZWF0ZVJvb3QoKS4gVGhpcyBpcyBub3Qgc3VwcG9ydGVkLiAnICsgJ0RpZCB5b3UgbWVhbiB0byBjYWxsIGNyZWF0ZVJvb3QoY29udGFpbmVyLCB7aHlkcmF0ZTogdHJ1ZX0pLnJlbmRlcihlbGVtZW50KT8nKTtcbiAgICB9XG4gIH0gLy8gVE9ETzogdGhyb3cgb3Igd2FybiBpZiB3ZSBjb3VsZG4ndCBoeWRyYXRlP1xuXG5cbiAgcmV0dXJuIGxlZ2FjeVJlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyKG51bGwsIGVsZW1lbnQsIGNvbnRhaW5lciwgdHJ1ZSwgY2FsbGJhY2spO1xufVxuZnVuY3Rpb24gcmVuZGVyKGVsZW1lbnQsIGNvbnRhaW5lciwgY2FsbGJhY2spIHtcbiAgaWYgKCFpc1ZhbGlkQ29udGFpbmVyKGNvbnRhaW5lcikpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJUYXJnZXQgY29udGFpbmVyIGlzIG5vdCBhIERPTSBlbGVtZW50LlwiICk7XG4gICAgfVxuICB9XG5cbiAge1xuICAgIHZhciBpc01vZGVyblJvb3QgPSBpc0NvbnRhaW5lck1hcmtlZEFzUm9vdChjb250YWluZXIpICYmIGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyID09PSB1bmRlZmluZWQ7XG5cbiAgICBpZiAoaXNNb2Rlcm5Sb290KSB7XG4gICAgICBlcnJvcignWW91IGFyZSBjYWxsaW5nIFJlYWN0RE9NLnJlbmRlcigpIG9uIGEgY29udGFpbmVyIHRoYXQgd2FzIHByZXZpb3VzbHkgJyArICdwYXNzZWQgdG8gUmVhY3RET00uY3JlYXRlUm9vdCgpLiBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQuICcgKyAnRGlkIHlvdSBtZWFuIHRvIGNhbGwgcm9vdC5yZW5kZXIoZWxlbWVudCk/Jyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGxlZ2FjeVJlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyKG51bGwsIGVsZW1lbnQsIGNvbnRhaW5lciwgZmFsc2UsIGNhbGxiYWNrKTtcbn1cbmZ1bmN0aW9uIHVuc3RhYmxlX3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyKHBhcmVudENvbXBvbmVudCwgZWxlbWVudCwgY29udGFpbmVyTm9kZSwgY2FsbGJhY2spIHtcbiAgaWYgKCFpc1ZhbGlkQ29udGFpbmVyKGNvbnRhaW5lck5vZGUpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiVGFyZ2V0IGNvbnRhaW5lciBpcyBub3QgYSBET00gZWxlbWVudC5cIiApO1xuICAgIH1cbiAgfVxuXG4gIGlmICghKHBhcmVudENvbXBvbmVudCAhPSBudWxsICYmIGhhcyhwYXJlbnRDb21wb25lbnQpKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcInBhcmVudENvbXBvbmVudCBtdXN0IGJlIGEgdmFsaWQgUmVhY3QgQ29tcG9uZW50XCIgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbGVnYWN5UmVuZGVyU3VidHJlZUludG9Db250YWluZXIocGFyZW50Q29tcG9uZW50LCBlbGVtZW50LCBjb250YWluZXJOb2RlLCBmYWxzZSwgY2FsbGJhY2spO1xufVxuZnVuY3Rpb24gdW5tb3VudENvbXBvbmVudEF0Tm9kZShjb250YWluZXIpIHtcbiAgaWYgKCFpc1ZhbGlkQ29udGFpbmVyKGNvbnRhaW5lcikpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJ1bm1vdW50Q29tcG9uZW50QXROb2RlKC4uLik6IFRhcmdldCBjb250YWluZXIgaXMgbm90IGEgRE9NIGVsZW1lbnQuXCIgKTtcbiAgICB9XG4gIH1cblxuICB7XG4gICAgdmFyIGlzTW9kZXJuUm9vdCA9IGlzQ29udGFpbmVyTWFya2VkQXNSb290KGNvbnRhaW5lcikgJiYgY29udGFpbmVyLl9yZWFjdFJvb3RDb250YWluZXIgPT09IHVuZGVmaW5lZDtcblxuICAgIGlmIChpc01vZGVyblJvb3QpIHtcbiAgICAgIGVycm9yKCdZb3UgYXJlIGNhbGxpbmcgUmVhY3RET00udW5tb3VudENvbXBvbmVudEF0Tm9kZSgpIG9uIGEgY29udGFpbmVyIHRoYXQgd2FzIHByZXZpb3VzbHkgJyArICdwYXNzZWQgdG8gUmVhY3RET00uY3JlYXRlUm9vdCgpLiBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQuIERpZCB5b3UgbWVhbiB0byBjYWxsIHJvb3QudW5tb3VudCgpPycpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lcikge1xuICAgIHtcbiAgICAgIHZhciByb290RWwgPSBnZXRSZWFjdFJvb3RFbGVtZW50SW5Db250YWluZXIoY29udGFpbmVyKTtcbiAgICAgIHZhciByZW5kZXJlZEJ5RGlmZmVyZW50UmVhY3QgPSByb290RWwgJiYgIWdldEluc3RhbmNlRnJvbU5vZGUocm9vdEVsKTtcblxuICAgICAgaWYgKHJlbmRlcmVkQnlEaWZmZXJlbnRSZWFjdCkge1xuICAgICAgICBlcnJvcihcInVubW91bnRDb21wb25lbnRBdE5vZGUoKTogVGhlIG5vZGUgeW91J3JlIGF0dGVtcHRpbmcgdG8gdW5tb3VudCBcIiArICd3YXMgcmVuZGVyZWQgYnkgYW5vdGhlciBjb3B5IG9mIFJlYWN0LicpO1xuICAgICAgfVxuICAgIH0gLy8gVW5tb3VudCBzaG91bGQgbm90IGJlIGJhdGNoZWQuXG5cblxuICAgIHVuYmF0Y2hlZFVwZGF0ZXMoZnVuY3Rpb24gKCkge1xuICAgICAgbGVnYWN5UmVuZGVyU3VidHJlZUludG9Db250YWluZXIobnVsbCwgbnVsbCwgY29udGFpbmVyLCBmYWxzZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyAkRmxvd0ZpeE1lIFRoaXMgc2hvdWxkIHByb2JhYmx5IHVzZSBgZGVsZXRlIGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyYFxuICAgICAgICBjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lciA9IG51bGw7XG4gICAgICAgIHVubWFya0NvbnRhaW5lckFzUm9vdChjb250YWluZXIpO1xuICAgICAgfSk7XG4gICAgfSk7IC8vIElmIHlvdSBjYWxsIHVubW91bnRDb21wb25lbnRBdE5vZGUgdHdpY2UgaW4gcXVpY2sgc3VjY2Vzc2lvbiwgeW91J2xsXG4gICAgLy8gZ2V0IGB0cnVlYCB0d2ljZS4gVGhhdCdzIHByb2JhYmx5IGZpbmU/XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICB7XG4gICAgICB2YXIgX3Jvb3RFbCA9IGdldFJlYWN0Um9vdEVsZW1lbnRJbkNvbnRhaW5lcihjb250YWluZXIpO1xuXG4gICAgICB2YXIgaGFzTm9uUm9vdFJlYWN0Q2hpbGQgPSAhIShfcm9vdEVsICYmIGdldEluc3RhbmNlRnJvbU5vZGUoX3Jvb3RFbCkpOyAvLyBDaGVjayBpZiB0aGUgY29udGFpbmVyIGl0c2VsZiBpcyBhIFJlYWN0IHJvb3Qgbm9kZS5cblxuICAgICAgdmFyIGlzQ29udGFpbmVyUmVhY3RSb290ID0gY29udGFpbmVyLm5vZGVUeXBlID09PSBFTEVNRU5UX05PREUgJiYgaXNWYWxpZENvbnRhaW5lcihjb250YWluZXIucGFyZW50Tm9kZSkgJiYgISFjb250YWluZXIucGFyZW50Tm9kZS5fcmVhY3RSb290Q29udGFpbmVyO1xuXG4gICAgICBpZiAoaGFzTm9uUm9vdFJlYWN0Q2hpbGQpIHtcbiAgICAgICAgZXJyb3IoXCJ1bm1vdW50Q29tcG9uZW50QXROb2RlKCk6IFRoZSBub2RlIHlvdSdyZSBhdHRlbXB0aW5nIHRvIHVubW91bnQgXCIgKyAnd2FzIHJlbmRlcmVkIGJ5IFJlYWN0IGFuZCBpcyBub3QgYSB0b3AtbGV2ZWwgY29udGFpbmVyLiAlcycsIGlzQ29udGFpbmVyUmVhY3RSb290ID8gJ1lvdSBtYXkgaGF2ZSBhY2NpZGVudGFsbHkgcGFzc2VkIGluIGEgUmVhY3Qgcm9vdCBub2RlIGluc3RlYWQgJyArICdvZiBpdHMgY29udGFpbmVyLicgOiAnSW5zdGVhZCwgaGF2ZSB0aGUgcGFyZW50IGNvbXBvbmVudCB1cGRhdGUgaXRzIHN0YXRlIGFuZCAnICsgJ3JlcmVuZGVyIGluIG9yZGVyIHRvIHJlbW92ZSB0aGlzIGNvbXBvbmVudC4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuc2V0QXR0ZW1wdFVzZXJCbG9ja2luZ0h5ZHJhdGlvbihhdHRlbXB0VXNlckJsb2NraW5nSHlkcmF0aW9uJDEpO1xuc2V0QXR0ZW1wdENvbnRpbnVvdXNIeWRyYXRpb24oYXR0ZW1wdENvbnRpbnVvdXNIeWRyYXRpb24kMSk7XG5zZXRBdHRlbXB0SHlkcmF0aW9uQXRDdXJyZW50UHJpb3JpdHkoYXR0ZW1wdEh5ZHJhdGlvbkF0Q3VycmVudFByaW9yaXR5JDEpO1xuc2V0QXR0ZW1wdEh5ZHJhdGlvbkF0UHJpb3JpdHkocnVuV2l0aFByaW9yaXR5JDIpO1xudmFyIGRpZFdhcm5BYm91dFVuc3RhYmxlQ3JlYXRlUG9ydGFsID0gZmFsc2U7XG5cbntcbiAgaWYgKHR5cGVvZiBNYXAgIT09ICdmdW5jdGlvbicgfHwgLy8gJEZsb3dJc3N1ZSBGbG93IGluY29ycmVjdGx5IHRoaW5rcyBNYXAgaGFzIG5vIHByb3RvdHlwZVxuICBNYXAucHJvdG90eXBlID09IG51bGwgfHwgdHlwZW9mIE1hcC5wcm90b3R5cGUuZm9yRWFjaCAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgU2V0ICE9PSAnZnVuY3Rpb24nIHx8IC8vICRGbG93SXNzdWUgRmxvdyBpbmNvcnJlY3RseSB0aGlua3MgU2V0IGhhcyBubyBwcm90b3R5cGVcbiAgU2V0LnByb3RvdHlwZSA9PSBudWxsIHx8IHR5cGVvZiBTZXQucHJvdG90eXBlLmNsZWFyICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBTZXQucHJvdG90eXBlLmZvckVhY2ggIT09ICdmdW5jdGlvbicpIHtcbiAgICBlcnJvcignUmVhY3QgZGVwZW5kcyBvbiBNYXAgYW5kIFNldCBidWlsdC1pbiB0eXBlcy4gTWFrZSBzdXJlIHRoYXQgeW91IGxvYWQgYSAnICsgJ3BvbHlmaWxsIGluIG9sZGVyIGJyb3dzZXJzLiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvcmVhY3QtcG9seWZpbGxzJyk7XG4gIH1cbn1cblxuc2V0UmVzdG9yZUltcGxlbWVudGF0aW9uKHJlc3RvcmVDb250cm9sbGVkU3RhdGUkMyk7XG5zZXRCYXRjaGluZ0ltcGxlbWVudGF0aW9uKGJhdGNoZWRVcGRhdGVzJDEsIGRpc2NyZXRlVXBkYXRlcyQxLCBmbHVzaERpc2NyZXRlVXBkYXRlcywgYmF0Y2hlZEV2ZW50VXBkYXRlcyQxKTtcblxuZnVuY3Rpb24gY3JlYXRlUG9ydGFsJDEoY2hpbGRyZW4sIGNvbnRhaW5lcikge1xuICB2YXIga2V5ID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBudWxsO1xuXG4gIGlmICghaXNWYWxpZENvbnRhaW5lcihjb250YWluZXIpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiVGFyZ2V0IGNvbnRhaW5lciBpcyBub3QgYSBET00gZWxlbWVudC5cIiApO1xuICAgIH1cbiAgfSAvLyBUT0RPOiBwYXNzIFJlYWN0RE9NIHBvcnRhbCBpbXBsZW1lbnRhdGlvbiBhcyB0aGlyZCBhcmd1bWVudFxuICAvLyAkRmxvd0ZpeE1lIFRoZSBGbG93IHR5cGUgaXMgb3BhcXVlIGJ1dCB0aGVyZSdzIG5vIHdheSB0byBhY3R1YWxseSBjcmVhdGUgaXQuXG5cblxuICByZXR1cm4gY3JlYXRlUG9ydGFsKGNoaWxkcmVuLCBjb250YWluZXIsIG51bGwsIGtleSk7XG59XG5cbmZ1bmN0aW9uIHJlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyKHBhcmVudENvbXBvbmVudCwgZWxlbWVudCwgY29udGFpbmVyTm9kZSwgY2FsbGJhY2spIHtcblxuICByZXR1cm4gdW5zdGFibGVfcmVuZGVyU3VidHJlZUludG9Db250YWluZXIocGFyZW50Q29tcG9uZW50LCBlbGVtZW50LCBjb250YWluZXJOb2RlLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIHVuc3RhYmxlX2NyZWF0ZVBvcnRhbChjaGlsZHJlbiwgY29udGFpbmVyKSB7XG4gIHZhciBrZXkgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IG51bGw7XG5cbiAge1xuICAgIGlmICghZGlkV2FybkFib3V0VW5zdGFibGVDcmVhdGVQb3J0YWwpIHtcbiAgICAgIGRpZFdhcm5BYm91dFVuc3RhYmxlQ3JlYXRlUG9ydGFsID0gdHJ1ZTtcblxuICAgICAgd2FybignVGhlIFJlYWN0RE9NLnVuc3RhYmxlX2NyZWF0ZVBvcnRhbCgpIGFsaWFzIGhhcyBiZWVuIGRlcHJlY2F0ZWQsICcgKyAnYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBSZWFjdCAxOCsuIFVwZGF0ZSB5b3VyIGNvZGUgdG8gdXNlICcgKyAnUmVhY3RET00uY3JlYXRlUG9ydGFsKCkgaW5zdGVhZC4gSXQgaGFzIHRoZSBleGFjdCBzYW1lIEFQSSwgJyArICdidXQgd2l0aG91dCB0aGUgXCJ1bnN0YWJsZV9cIiBwcmVmaXguJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNyZWF0ZVBvcnRhbCQxKGNoaWxkcmVuLCBjb250YWluZXIsIGtleSk7XG59XG5cbnZhciBJbnRlcm5hbHMgPSB7XG4gIC8vIEtlZXAgaW4gc3luYyB3aXRoIFJlYWN0VGVzdFV0aWxzLmpzLCBhbmQgUmVhY3RUZXN0VXRpbHNBY3QuanMuXG4gIC8vIFRoaXMgaXMgYW4gYXJyYXkgZm9yIGJldHRlciBtaW5pZmljYXRpb24uXG4gIEV2ZW50czogW2dldEluc3RhbmNlRnJvbU5vZGUsIGdldE5vZGVGcm9tSW5zdGFuY2UsIGdldEZpYmVyQ3VycmVudFByb3BzRnJvbU5vZGUsIGVucXVldWVTdGF0ZVJlc3RvcmUsIHJlc3RvcmVTdGF0ZUlmTmVlZGVkLCBmbHVzaFBhc3NpdmVFZmZlY3RzLCAvLyBUT0RPOiBUaGlzIGlzIHJlbGF0ZWQgdG8gYGFjdGAsIG5vdCBldmVudHMuIE1vdmUgdG8gc2VwYXJhdGUga2V5P1xuICBJc1RoaXNSZW5kZXJlckFjdGluZ11cbn07XG52YXIgZm91bmREZXZUb29scyA9IGluamVjdEludG9EZXZUb29scyh7XG4gIGZpbmRGaWJlckJ5SG9zdEluc3RhbmNlOiBnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZSxcbiAgYnVuZGxlVHlwZTogIDEgLFxuICB2ZXJzaW9uOiBSZWFjdFZlcnNpb24sXG4gIHJlbmRlcmVyUGFja2FnZU5hbWU6ICdyZWFjdC1kb20nXG59KTtcblxue1xuICBpZiAoIWZvdW5kRGV2VG9vbHMgJiYgY2FuVXNlRE9NICYmIHdpbmRvdy50b3AgPT09IHdpbmRvdy5zZWxmKSB7XG4gICAgLy8gSWYgd2UncmUgaW4gQ2hyb21lIG9yIEZpcmVmb3gsIHByb3ZpZGUgYSBkb3dubG9hZCBsaW5rIGlmIG5vdCBpbnN0YWxsZWQuXG4gICAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignQ2hyb21lJykgPiAtMSAmJiBuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ0VkZ2UnKSA9PT0gLTEgfHwgbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdGaXJlZm94JykgPiAtMSkge1xuICAgICAgdmFyIHByb3RvY29sID0gd2luZG93LmxvY2F0aW9uLnByb3RvY29sOyAvLyBEb24ndCB3YXJuIGluIGV4b3RpYyBjYXNlcyBsaWtlIGNocm9tZS1leHRlbnNpb246Ly8uXG5cbiAgICAgIGlmICgvXihodHRwcz98ZmlsZSk6JC8udGVzdChwcm90b2NvbCkpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZ1xuICAgICAgICBjb25zb2xlLmluZm8oJyVjRG93bmxvYWQgdGhlIFJlYWN0IERldlRvb2xzICcgKyAnZm9yIGEgYmV0dGVyIGRldmVsb3BtZW50IGV4cGVyaWVuY2U6ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3JlYWN0LWRldnRvb2xzJyArIChwcm90b2NvbCA9PT0gJ2ZpbGU6JyA/ICdcXG5Zb3UgbWlnaHQgbmVlZCB0byB1c2UgYSBsb2NhbCBIVFRQIHNlcnZlciAoaW5zdGVhZCBvZiBmaWxlOi8vKTogJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvcmVhY3QtZGV2dG9vbHMtZmFxJyA6ICcnKSwgJ2ZvbnQtd2VpZ2h0OmJvbGQnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0cy5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRCA9IEludGVybmFscztcbmV4cG9ydHMuY3JlYXRlUG9ydGFsID0gY3JlYXRlUG9ydGFsJDE7XG5leHBvcnRzLmZpbmRET01Ob2RlID0gZmluZERPTU5vZGU7XG5leHBvcnRzLmZsdXNoU3luYyA9IGZsdXNoU3luYztcbmV4cG9ydHMuaHlkcmF0ZSA9IGh5ZHJhdGU7XG5leHBvcnRzLnJlbmRlciA9IHJlbmRlcjtcbmV4cG9ydHMudW5tb3VudENvbXBvbmVudEF0Tm9kZSA9IHVubW91bnRDb21wb25lbnRBdE5vZGU7XG5leHBvcnRzLnVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzID0gYmF0Y2hlZFVwZGF0ZXMkMTtcbmV4cG9ydHMudW5zdGFibGVfY3JlYXRlUG9ydGFsID0gdW5zdGFibGVfY3JlYXRlUG9ydGFsO1xuZXhwb3J0cy51bnN0YWJsZV9yZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lciA9IHJlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyO1xuZXhwb3J0cy52ZXJzaW9uID0gUmVhY3RWZXJzaW9uO1xuICB9KSgpO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gY2hlY2tEQ0UoKSB7XG4gIC8qIGdsb2JhbCBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gKi9cbiAgaWYgKFxuICAgIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gPT09ICd1bmRlZmluZWQnIHx8XG4gICAgdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5jaGVja0RDRSAhPT0gJ2Z1bmN0aW9uJ1xuICApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyBUaGlzIGJyYW5jaCBpcyB1bnJlYWNoYWJsZSBiZWNhdXNlIHRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWRcbiAgICAvLyBpbiBwcm9kdWN0aW9uLCBidXQgdGhlIGNvbmRpdGlvbiBpcyB0cnVlIG9ubHkgaW4gZGV2ZWxvcG1lbnQuXG4gICAgLy8gVGhlcmVmb3JlIGlmIHRoZSBicmFuY2ggaXMgc3RpbGwgaGVyZSwgZGVhZCBjb2RlIGVsaW1pbmF0aW9uIHdhc24ndFxuICAgIC8vIHByb3Blcmx5IGFwcGxpZWQuXG4gICAgLy8gRG9uJ3QgY2hhbmdlIHRoZSBtZXNzYWdlLiBSZWFjdCBEZXZUb29scyByZWxpZXMgb24gaXQuIEFsc28gbWFrZSBzdXJlXG4gICAgLy8gdGhpcyBtZXNzYWdlIGRvZXNuJ3Qgb2NjdXIgZWxzZXdoZXJlIGluIHRoaXMgZnVuY3Rpb24sIG9yIGl0IHdpbGwgY2F1c2VcbiAgICAvLyBhIGZhbHNlIHBvc2l0aXZlLlxuICAgIHRocm93IG5ldyBFcnJvcignXl9eJyk7XG4gIH1cbiAgdHJ5IHtcbiAgICAvLyBWZXJpZnkgdGhhdCB0aGUgY29kZSBhYm92ZSBoYXMgYmVlbiBkZWFkIGNvZGUgZWxpbWluYXRlZCAoRENFJ2QpLlxuICAgIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5jaGVja0RDRShjaGVja0RDRSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIERldlRvb2xzIHNob3VsZG4ndCBjcmFzaCBSZWFjdCwgbm8gbWF0dGVyIHdoYXQuXG4gICAgLy8gV2Ugc2hvdWxkIHN0aWxsIHJlcG9ydCBpbiBjYXNlIHdlIGJyZWFrIHRoaXMgY29kZS5cbiAgICBjb25zb2xlLmVycm9yKGVycik7XG4gIH1cbn1cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgLy8gRENFIGNoZWNrIHNob3VsZCBoYXBwZW4gYmVmb3JlIFJlYWN0RE9NIGJ1bmRsZSBleGVjdXRlcyBzbyB0aGF0XG4gIC8vIERldlRvb2xzIGNhbiByZXBvcnQgYmFkIG1pbmlmaWNhdGlvbiBkdXJpbmcgaW5qZWN0aW9uLlxuICBjaGVja0RDRSgpO1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWRvbS5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1kb20uZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsICIvKiogQGxpY2Vuc2UgUmVhY3QgdjE2LjEzLjFcbiAqIHJlYWN0LWlzLmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAoZnVuY3Rpb24oKSB7XG4ndXNlIHN0cmljdCc7XG5cbi8vIFRoZSBTeW1ib2wgdXNlZCB0byB0YWcgdGhlIFJlYWN0RWxlbWVudC1saWtlIHR5cGVzLiBJZiB0aGVyZSBpcyBubyBuYXRpdmUgU3ltYm9sXG4vLyBub3IgcG9seWZpbGwsIHRoZW4gYSBwbGFpbiBudW1iZXIgaXMgdXNlZCBmb3IgcGVyZm9ybWFuY2UuXG52YXIgaGFzU3ltYm9sID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuZm9yO1xudmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmVsZW1lbnQnKSA6IDB4ZWFjNztcbnZhciBSRUFDVF9QT1JUQUxfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnBvcnRhbCcpIDogMHhlYWNhO1xudmFyIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5mcmFnbWVudCcpIDogMHhlYWNiO1xudmFyIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5zdHJpY3RfbW9kZScpIDogMHhlYWNjO1xudmFyIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5wcm9maWxlcicpIDogMHhlYWQyO1xudmFyIFJFQUNUX1BST1ZJREVSX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5wcm92aWRlcicpIDogMHhlYWNkO1xudmFyIFJFQUNUX0NPTlRFWFRfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmNvbnRleHQnKSA6IDB4ZWFjZTsgLy8gVE9ETzogV2UgZG9uJ3QgdXNlIEFzeW5jTW9kZSBvciBDb25jdXJyZW50TW9kZSBhbnltb3JlLiBUaGV5IHdlcmUgdGVtcG9yYXJ5XG4vLyAodW5zdGFibGUpIEFQSXMgdGhhdCBoYXZlIGJlZW4gcmVtb3ZlZC4gQ2FuIHdlIHJlbW92ZSB0aGUgc3ltYm9scz9cblxudmFyIFJFQUNUX0FTWU5DX01PREVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmFzeW5jX21vZGUnKSA6IDB4ZWFjZjtcbnZhciBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmNvbmN1cnJlbnRfbW9kZScpIDogMHhlYWNmO1xudmFyIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5mb3J3YXJkX3JlZicpIDogMHhlYWQwO1xudmFyIFJFQUNUX1NVU1BFTlNFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5zdXNwZW5zZScpIDogMHhlYWQxO1xudmFyIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnN1c3BlbnNlX2xpc3QnKSA6IDB4ZWFkODtcbnZhciBSRUFDVF9NRU1PX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5tZW1vJykgOiAweGVhZDM7XG52YXIgUkVBQ1RfTEFaWV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QubGF6eScpIDogMHhlYWQ0O1xudmFyIFJFQUNUX0JMT0NLX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5ibG9jaycpIDogMHhlYWQ5O1xudmFyIFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5mdW5kYW1lbnRhbCcpIDogMHhlYWQ1O1xudmFyIFJFQUNUX1JFU1BPTkRFUl9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QucmVzcG9uZGVyJykgOiAweGVhZDY7XG52YXIgUkVBQ1RfU0NPUEVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnNjb3BlJykgOiAweGVhZDc7XG5cbmZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKSB7XG4gIHJldHVybiB0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicgfHwgLy8gTm90ZTogaXRzIHR5cGVvZiBtaWdodCBiZSBvdGhlciB0aGFuICdzeW1ib2wnIG9yICdudW1iZXInIGlmIGl0J3MgYSBwb2x5ZmlsbC5cbiAgdHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9QUk9GSUxFUl9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgfHwgdHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwgJiYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfUFJPVklERVJfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9DT05URVhUX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1JFU1BPTkRFUl9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1NDT1BFX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQkxPQ0tfVFlQRSk7XG59XG5cbmZ1bmN0aW9uIHR5cGVPZihvYmplY3QpIHtcbiAgaWYgKHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCkge1xuICAgIHZhciAkJHR5cGVvZiA9IG9iamVjdC4kJHR5cGVvZjtcblxuICAgIHN3aXRjaCAoJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICB2YXIgdHlwZSA9IG9iamVjdC50eXBlO1xuXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgIGNhc2UgUkVBQ1RfQVNZTkNfTU9ERV9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9GUkFHTUVOVF9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfUFJPRklMRVJfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1NUUklDVF9NT0RFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuIHR5cGU7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdmFyICQkdHlwZW9mVHlwZSA9IHR5cGUgJiYgdHlwZS4kJHR5cGVvZjtcblxuICAgICAgICAgICAgc3dpdGNoICgkJHR5cGVvZlR5cGUpIHtcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9DT05URVhUX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX1BST1ZJREVSX1RZUEU6XG4gICAgICAgICAgICAgICAgcmV0dXJuICQkdHlwZW9mVHlwZTtcblxuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiAkJHR5cGVvZjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgIHJldHVybiAkJHR5cGVvZjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufSAvLyBBc3luY01vZGUgaXMgZGVwcmVjYXRlZCBhbG9uZyB3aXRoIGlzQXN5bmNNb2RlXG5cbnZhciBBc3luY01vZGUgPSBSRUFDVF9BU1lOQ19NT0RFX1RZUEU7XG52YXIgQ29uY3VycmVudE1vZGUgPSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRTtcbnZhciBDb250ZXh0Q29uc3VtZXIgPSBSRUFDVF9DT05URVhUX1RZUEU7XG52YXIgQ29udGV4dFByb3ZpZGVyID0gUkVBQ1RfUFJPVklERVJfVFlQRTtcbnZhciBFbGVtZW50ID0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xudmFyIEZvcndhcmRSZWYgPSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFO1xudmFyIEZyYWdtZW50ID0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbnZhciBMYXp5ID0gUkVBQ1RfTEFaWV9UWVBFO1xudmFyIE1lbW8gPSBSRUFDVF9NRU1PX1RZUEU7XG52YXIgUG9ydGFsID0gUkVBQ1RfUE9SVEFMX1RZUEU7XG52YXIgUHJvZmlsZXIgPSBSRUFDVF9QUk9GSUxFUl9UWVBFO1xudmFyIFN0cmljdE1vZGUgPSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFO1xudmFyIFN1c3BlbnNlID0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbnZhciBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSA9IGZhbHNlOyAvLyBBc3luY01vZGUgc2hvdWxkIGJlIGRlcHJlY2F0ZWRcblxuZnVuY3Rpb24gaXNBc3luY01vZGUob2JqZWN0KSB7XG4gIHtcbiAgICBpZiAoIWhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlKSB7XG4gICAgICBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSA9IHRydWU7IC8vIFVzaW5nIGNvbnNvbGVbJ3dhcm4nXSB0byBldmFkZSBCYWJlbCBhbmQgRVNMaW50XG5cbiAgICAgIGNvbnNvbGVbJ3dhcm4nXSgnVGhlIFJlYWN0SXMuaXNBc3luY01vZGUoKSBhbGlhcyBoYXMgYmVlbiBkZXByZWNhdGVkLCAnICsgJ2FuZCB3aWxsIGJlIHJlbW92ZWQgaW4gUmVhY3QgMTcrLiBVcGRhdGUgeW91ciBjb2RlIHRvIHVzZSAnICsgJ1JlYWN0SXMuaXNDb25jdXJyZW50TW9kZSgpIGluc3RlYWQuIEl0IGhhcyB0aGUgZXhhY3Qgc2FtZSBBUEkuJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGlzQ29uY3VycmVudE1vZGUob2JqZWN0KSB8fCB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfQVNZTkNfTU9ERV9UWVBFO1xufVxuZnVuY3Rpb24gaXNDb25jdXJyZW50TW9kZShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzQ29udGV4dENvbnN1bWVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0NPTlRFWFRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzQ29udGV4dFByb3ZpZGVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BST1ZJREVSX1RZUEU7XG59XG5mdW5jdGlvbiBpc0VsZW1lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwgJiYgb2JqZWN0LiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEU7XG59XG5mdW5jdGlvbiBpc0ZvcndhcmRSZWYob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzRnJhZ21lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzTGF6eShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9MQVpZX1RZUEU7XG59XG5mdW5jdGlvbiBpc01lbW8ob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfTUVNT19UWVBFO1xufVxuZnVuY3Rpb24gaXNQb3J0YWwob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUE9SVEFMX1RZUEU7XG59XG5mdW5jdGlvbiBpc1Byb2ZpbGVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG59XG5mdW5jdGlvbiBpc1N0cmljdE1vZGUob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzU3VzcGVuc2Uob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbn1cblxuZXhwb3J0cy5Bc3luY01vZGUgPSBBc3luY01vZGU7XG5leHBvcnRzLkNvbmN1cnJlbnRNb2RlID0gQ29uY3VycmVudE1vZGU7XG5leHBvcnRzLkNvbnRleHRDb25zdW1lciA9IENvbnRleHRDb25zdW1lcjtcbmV4cG9ydHMuQ29udGV4dFByb3ZpZGVyID0gQ29udGV4dFByb3ZpZGVyO1xuZXhwb3J0cy5FbGVtZW50ID0gRWxlbWVudDtcbmV4cG9ydHMuRm9yd2FyZFJlZiA9IEZvcndhcmRSZWY7XG5leHBvcnRzLkZyYWdtZW50ID0gRnJhZ21lbnQ7XG5leHBvcnRzLkxhenkgPSBMYXp5O1xuZXhwb3J0cy5NZW1vID0gTWVtbztcbmV4cG9ydHMuUG9ydGFsID0gUG9ydGFsO1xuZXhwb3J0cy5Qcm9maWxlciA9IFByb2ZpbGVyO1xuZXhwb3J0cy5TdHJpY3RNb2RlID0gU3RyaWN0TW9kZTtcbmV4cG9ydHMuU3VzcGVuc2UgPSBTdXNwZW5zZTtcbmV4cG9ydHMuaXNBc3luY01vZGUgPSBpc0FzeW5jTW9kZTtcbmV4cG9ydHMuaXNDb25jdXJyZW50TW9kZSA9IGlzQ29uY3VycmVudE1vZGU7XG5leHBvcnRzLmlzQ29udGV4dENvbnN1bWVyID0gaXNDb250ZXh0Q29uc3VtZXI7XG5leHBvcnRzLmlzQ29udGV4dFByb3ZpZGVyID0gaXNDb250ZXh0UHJvdmlkZXI7XG5leHBvcnRzLmlzRWxlbWVudCA9IGlzRWxlbWVudDtcbmV4cG9ydHMuaXNGb3J3YXJkUmVmID0gaXNGb3J3YXJkUmVmO1xuZXhwb3J0cy5pc0ZyYWdtZW50ID0gaXNGcmFnbWVudDtcbmV4cG9ydHMuaXNMYXp5ID0gaXNMYXp5O1xuZXhwb3J0cy5pc01lbW8gPSBpc01lbW87XG5leHBvcnRzLmlzUG9ydGFsID0gaXNQb3J0YWw7XG5leHBvcnRzLmlzUHJvZmlsZXIgPSBpc1Byb2ZpbGVyO1xuZXhwb3J0cy5pc1N0cmljdE1vZGUgPSBpc1N0cmljdE1vZGU7XG5leHBvcnRzLmlzU3VzcGVuc2UgPSBpc1N1c3BlbnNlO1xuZXhwb3J0cy5pc1ZhbGlkRWxlbWVudFR5cGUgPSBpc1ZhbGlkRWxlbWVudFR5cGU7XG5leHBvcnRzLnR5cGVPZiA9IHR5cGVPZjtcbiAgfSkoKTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gJ1NFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEJztcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdFByb3BUeXBlc1NlY3JldDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IEZ1bmN0aW9uLmNhbGwuYmluZChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcbiIsICIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIHByaW50V2FybmluZyA9IGZ1bmN0aW9uKCkge307XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9IHJlcXVpcmUoJy4vbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0Jyk7XG4gIHZhciBsb2dnZWRUeXBlRmFpbHVyZXMgPSB7fTtcbiAgdmFyIGhhcyA9IHJlcXVpcmUoJy4vbGliL2hhcycpO1xuXG4gIHByaW50V2FybmluZyA9IGZ1bmN0aW9uKHRleHQpIHtcbiAgICB2YXIgbWVzc2FnZSA9ICdXYXJuaW5nOiAnICsgdGV4dDtcbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgLy8gLS0tIFdlbGNvbWUgdG8gZGVidWdnaW5nIFJlYWN0IC0tLVxuICAgICAgLy8gVGhpcyBlcnJvciB3YXMgdGhyb3duIGFzIGEgY29udmVuaWVuY2Ugc28gdGhhdCB5b3UgY2FuIHVzZSB0aGlzIHN0YWNrXG4gICAgICAvLyB0byBmaW5kIHRoZSBjYWxsc2l0ZSB0aGF0IGNhdXNlZCB0aGlzIHdhcm5pbmcgdG8gZmlyZS5cbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICB9IGNhdGNoICh4KSB7IC8qKi8gfVxuICB9O1xufVxuXG4vKipcbiAqIEFzc2VydCB0aGF0IHRoZSB2YWx1ZXMgbWF0Y2ggd2l0aCB0aGUgdHlwZSBzcGVjcy5cbiAqIEVycm9yIG1lc3NhZ2VzIGFyZSBtZW1vcml6ZWQgYW5kIHdpbGwgb25seSBiZSBzaG93biBvbmNlLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSB0eXBlU3BlY3MgTWFwIG9mIG5hbWUgdG8gYSBSZWFjdFByb3BUeXBlXG4gKiBAcGFyYW0ge29iamVjdH0gdmFsdWVzIFJ1bnRpbWUgdmFsdWVzIHRoYXQgbmVlZCB0byBiZSB0eXBlLWNoZWNrZWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBsb2NhdGlvbiBlLmcuIFwicHJvcFwiLCBcImNvbnRleHRcIiwgXCJjaGlsZCBjb250ZXh0XCJcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb21wb25lbnROYW1lIE5hbWUgb2YgdGhlIGNvbXBvbmVudCBmb3IgZXJyb3IgbWVzc2FnZXMuXG4gKiBAcGFyYW0gez9GdW5jdGlvbn0gZ2V0U3RhY2sgUmV0dXJucyB0aGUgY29tcG9uZW50IHN0YWNrLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gY2hlY2tQcm9wVHlwZXModHlwZVNwZWNzLCB2YWx1ZXMsIGxvY2F0aW9uLCBjb21wb25lbnROYW1lLCBnZXRTdGFjaykge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGZvciAodmFyIHR5cGVTcGVjTmFtZSBpbiB0eXBlU3BlY3MpIHtcbiAgICAgIGlmIChoYXModHlwZVNwZWNzLCB0eXBlU3BlY05hbWUpKSB7XG4gICAgICAgIHZhciBlcnJvcjtcbiAgICAgICAgLy8gUHJvcCB0eXBlIHZhbGlkYXRpb24gbWF5IHRocm93LiBJbiBjYXNlIHRoZXkgZG8sIHdlIGRvbid0IHdhbnQgdG9cbiAgICAgICAgLy8gZmFpbCB0aGUgcmVuZGVyIHBoYXNlIHdoZXJlIGl0IGRpZG4ndCBmYWlsIGJlZm9yZS4gU28gd2UgbG9nIGl0LlxuICAgICAgICAvLyBBZnRlciB0aGVzZSBoYXZlIGJlZW4gY2xlYW5lZCB1cCwgd2UnbGwgbGV0IHRoZW0gdGhyb3cuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBpbnRlbnRpb25hbGx5IGFuIGludmFyaWFudCB0aGF0IGdldHMgY2F1Z2h0LiBJdCdzIHRoZSBzYW1lXG4gICAgICAgICAgLy8gYmVoYXZpb3IgYXMgd2l0aG91dCB0aGlzIHN0YXRlbWVudCBleGNlcHQgd2l0aCBhIGJldHRlciBtZXNzYWdlLlxuICAgICAgICAgIGlmICh0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHZhciBlcnIgPSBFcnJvcihcbiAgICAgICAgICAgICAgKGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJykgKyAnOiAnICsgbG9jYXRpb24gKyAnIHR5cGUgYCcgKyB0eXBlU3BlY05hbWUgKyAnYCBpcyBpbnZhbGlkOyAnICtcbiAgICAgICAgICAgICAgJ2l0IG11c3QgYmUgYSBmdW5jdGlvbiwgdXN1YWxseSBmcm9tIHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZSwgYnV0IHJlY2VpdmVkIGAnICsgdHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdICsgJ2AuJyArXG4gICAgICAgICAgICAgICdUaGlzIG9mdGVuIGhhcHBlbnMgYmVjYXVzZSBvZiB0eXBvcyBzdWNoIGFzIGBQcm9wVHlwZXMuZnVuY3Rpb25gIGluc3RlYWQgb2YgYFByb3BUeXBlcy5mdW5jYC4nXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVycm9yID0gdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0odmFsdWVzLCB0eXBlU3BlY05hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBudWxsLCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgZXJyb3IgPSBleDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3IgJiYgIShlcnJvciBpbnN0YW5jZW9mIEVycm9yKSkge1xuICAgICAgICAgIHByaW50V2FybmluZyhcbiAgICAgICAgICAgIChjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycpICsgJzogdHlwZSBzcGVjaWZpY2F0aW9uIG9mICcgK1xuICAgICAgICAgICAgbG9jYXRpb24gKyAnIGAnICsgdHlwZVNwZWNOYW1lICsgJ2AgaXMgaW52YWxpZDsgdGhlIHR5cGUgY2hlY2tlciAnICtcbiAgICAgICAgICAgICdmdW5jdGlvbiBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gYEVycm9yYCBidXQgcmV0dXJuZWQgYSAnICsgdHlwZW9mIGVycm9yICsgJy4gJyArXG4gICAgICAgICAgICAnWW91IG1heSBoYXZlIGZvcmdvdHRlbiB0byBwYXNzIGFuIGFyZ3VtZW50IHRvIHRoZSB0eXBlIGNoZWNrZXIgJyArXG4gICAgICAgICAgICAnY3JlYXRvciAoYXJyYXlPZiwgaW5zdGFuY2VPZiwgb2JqZWN0T2YsIG9uZU9mLCBvbmVPZlR5cGUsIGFuZCAnICtcbiAgICAgICAgICAgICdzaGFwZSBhbGwgcmVxdWlyZSBhbiBhcmd1bWVudCkuJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgIShlcnJvci5tZXNzYWdlIGluIGxvZ2dlZFR5cGVGYWlsdXJlcykpIHtcbiAgICAgICAgICAvLyBPbmx5IG1vbml0b3IgdGhpcyBmYWlsdXJlIG9uY2UgYmVjYXVzZSB0aGVyZSB0ZW5kcyB0byBiZSBhIGxvdCBvZiB0aGVcbiAgICAgICAgICAvLyBzYW1lIGVycm9yLlxuICAgICAgICAgIGxvZ2dlZFR5cGVGYWlsdXJlc1tlcnJvci5tZXNzYWdlXSA9IHRydWU7XG5cbiAgICAgICAgICB2YXIgc3RhY2sgPSBnZXRTdGFjayA/IGdldFN0YWNrKCkgOiAnJztcblxuICAgICAgICAgIHByaW50V2FybmluZyhcbiAgICAgICAgICAgICdGYWlsZWQgJyArIGxvY2F0aW9uICsgJyB0eXBlOiAnICsgZXJyb3IubWVzc2FnZSArIChzdGFjayAhPSBudWxsID8gc3RhY2sgOiAnJylcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmVzZXRzIHdhcm5pbmcgY2FjaGUgd2hlbiB0ZXN0aW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNoZWNrUHJvcFR5cGVzLnJlc2V0V2FybmluZ0NhY2hlID0gZnVuY3Rpb24oKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgbG9nZ2VkVHlwZUZhaWx1cmVzID0ge307XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjaGVja1Byb3BUeXBlcztcbiIsICIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0SXMgPSByZXF1aXJlKCdyZWFjdC1pcycpO1xudmFyIGFzc2lnbiA9IHJlcXVpcmUoJ29iamVjdC1hc3NpZ24nKTtcblxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gcmVxdWlyZSgnLi9saWIvUmVhY3RQcm9wVHlwZXNTZWNyZXQnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL2xpYi9oYXMnKTtcbnZhciBjaGVja1Byb3BUeXBlcyA9IHJlcXVpcmUoJy4vY2hlY2tQcm9wVHlwZXMnKTtcblxudmFyIHByaW50V2FybmluZyA9IGZ1bmN0aW9uKCkge307XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHByaW50V2FybmluZyA9IGZ1bmN0aW9uKHRleHQpIHtcbiAgICB2YXIgbWVzc2FnZSA9ICdXYXJuaW5nOiAnICsgdGV4dDtcbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgLy8gLS0tIFdlbGNvbWUgdG8gZGVidWdnaW5nIFJlYWN0IC0tLVxuICAgICAgLy8gVGhpcyBlcnJvciB3YXMgdGhyb3duIGFzIGEgY29udmVuaWVuY2Ugc28gdGhhdCB5b3UgY2FuIHVzZSB0aGlzIHN0YWNrXG4gICAgICAvLyB0byBmaW5kIHRoZSBjYWxsc2l0ZSB0aGF0IGNhdXNlZCB0aGlzIHdhcm5pbmcgdG8gZmlyZS5cbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICB9IGNhdGNoICh4KSB7fVxuICB9O1xufVxuXG5mdW5jdGlvbiBlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsKCkge1xuICByZXR1cm4gbnVsbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpc1ZhbGlkRWxlbWVudCwgdGhyb3dPbkRpcmVjdEFjY2Vzcykge1xuICAvKiBnbG9iYWwgU3ltYm9sICovXG4gIHZhciBJVEVSQVRPUl9TWU1CT0wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5pdGVyYXRvcjtcbiAgdmFyIEZBVVhfSVRFUkFUT1JfU1lNQk9MID0gJ0BAaXRlcmF0b3InOyAvLyBCZWZvcmUgU3ltYm9sIHNwZWMuXG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGl0ZXJhdG9yIG1ldGhvZCBmdW5jdGlvbiBjb250YWluZWQgb24gdGhlIGl0ZXJhYmxlIG9iamVjdC5cbiAgICpcbiAgICogQmUgc3VyZSB0byBpbnZva2UgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIGl0ZXJhYmxlIGFzIGNvbnRleHQ6XG4gICAqXG4gICAqICAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4obXlJdGVyYWJsZSk7XG4gICAqICAgICBpZiAoaXRlcmF0b3JGbikge1xuICAgKiAgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwobXlJdGVyYWJsZSk7XG4gICAqICAgICAgIC4uLlxuICAgKiAgICAgfVxuICAgKlxuICAgKiBAcGFyYW0gez9vYmplY3R9IG1heWJlSXRlcmFibGVcbiAgICogQHJldHVybiB7P2Z1bmN0aW9ufVxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0SXRlcmF0b3JGbihtYXliZUl0ZXJhYmxlKSB7XG4gICAgdmFyIGl0ZXJhdG9yRm4gPSBtYXliZUl0ZXJhYmxlICYmIChJVEVSQVRPUl9TWU1CT0wgJiYgbWF5YmVJdGVyYWJsZVtJVEVSQVRPUl9TWU1CT0xdIHx8IG1heWJlSXRlcmFibGVbRkFVWF9JVEVSQVRPUl9TWU1CT0xdKTtcbiAgICBpZiAodHlwZW9mIGl0ZXJhdG9yRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBpdGVyYXRvckZuO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb2xsZWN0aW9uIG9mIG1ldGhvZHMgdGhhdCBhbGxvdyBkZWNsYXJhdGlvbiBhbmQgdmFsaWRhdGlvbiBvZiBwcm9wcyB0aGF0IGFyZVxuICAgKiBzdXBwbGllZCB0byBSZWFjdCBjb21wb25lbnRzLiBFeGFtcGxlIHVzYWdlOlxuICAgKlxuICAgKiAgIHZhciBQcm9wcyA9IHJlcXVpcmUoJ1JlYWN0UHJvcFR5cGVzJyk7XG4gICAqICAgdmFyIE15QXJ0aWNsZSA9IFJlYWN0LmNyZWF0ZUNsYXNzKHtcbiAgICogICAgIHByb3BUeXBlczoge1xuICAgKiAgICAgICAvLyBBbiBvcHRpb25hbCBzdHJpbmcgcHJvcCBuYW1lZCBcImRlc2NyaXB0aW9uXCIuXG4gICAqICAgICAgIGRlc2NyaXB0aW9uOiBQcm9wcy5zdHJpbmcsXG4gICAqXG4gICAqICAgICAgIC8vIEEgcmVxdWlyZWQgZW51bSBwcm9wIG5hbWVkIFwiY2F0ZWdvcnlcIi5cbiAgICogICAgICAgY2F0ZWdvcnk6IFByb3BzLm9uZU9mKFsnTmV3cycsJ1Bob3RvcyddKS5pc1JlcXVpcmVkLFxuICAgKlxuICAgKiAgICAgICAvLyBBIHByb3AgbmFtZWQgXCJkaWFsb2dcIiB0aGF0IHJlcXVpcmVzIGFuIGluc3RhbmNlIG9mIERpYWxvZy5cbiAgICogICAgICAgZGlhbG9nOiBQcm9wcy5pbnN0YW5jZU9mKERpYWxvZykuaXNSZXF1aXJlZFxuICAgKiAgICAgfSxcbiAgICogICAgIHJlbmRlcjogZnVuY3Rpb24oKSB7IC4uLiB9XG4gICAqICAgfSk7XG4gICAqXG4gICAqIEEgbW9yZSBmb3JtYWwgc3BlY2lmaWNhdGlvbiBvZiBob3cgdGhlc2UgbWV0aG9kcyBhcmUgdXNlZDpcbiAgICpcbiAgICogICB0eXBlIDo9IGFycmF5fGJvb2x8ZnVuY3xvYmplY3R8bnVtYmVyfHN0cmluZ3xvbmVPZihbLi4uXSl8aW5zdGFuY2VPZiguLi4pXG4gICAqICAgZGVjbCA6PSBSZWFjdFByb3BUeXBlcy57dHlwZX0oLmlzUmVxdWlyZWQpP1xuICAgKlxuICAgKiBFYWNoIGFuZCBldmVyeSBkZWNsYXJhdGlvbiBwcm9kdWNlcyBhIGZ1bmN0aW9uIHdpdGggdGhlIHNhbWUgc2lnbmF0dXJlLiBUaGlzXG4gICAqIGFsbG93cyB0aGUgY3JlYXRpb24gb2YgY3VzdG9tIHZhbGlkYXRpb24gZnVuY3Rpb25zLiBGb3IgZXhhbXBsZTpcbiAgICpcbiAgICogIHZhciBNeUxpbmsgPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG4gICAqICAgIHByb3BUeXBlczoge1xuICAgKiAgICAgIC8vIEFuIG9wdGlvbmFsIHN0cmluZyBvciBVUkkgcHJvcCBuYW1lZCBcImhyZWZcIi5cbiAgICogICAgICBocmVmOiBmdW5jdGlvbihwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAgICogICAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAqICAgICAgICBpZiAocHJvcFZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHByb3BWYWx1ZSAhPT0gJ3N0cmluZycgJiZcbiAgICogICAgICAgICAgICAhKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFVSSSkpIHtcbiAgICogICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihcbiAgICogICAgICAgICAgICAnRXhwZWN0ZWQgYSBzdHJpbmcgb3IgYW4gVVJJIGZvciAnICsgcHJvcE5hbWUgKyAnIGluICcgK1xuICAgKiAgICAgICAgICAgIGNvbXBvbmVudE5hbWVcbiAgICogICAgICAgICAgKTtcbiAgICogICAgICAgIH1cbiAgICogICAgICB9XG4gICAqICAgIH0sXG4gICAqICAgIHJlbmRlcjogZnVuY3Rpb24oKSB7Li4ufVxuICAgKiAgfSk7XG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cblxuICB2YXIgQU5PTllNT1VTID0gJzw8YW5vbnltb3VzPj4nO1xuXG4gIC8vIEltcG9ydGFudCFcbiAgLy8gS2VlcCB0aGlzIGxpc3QgaW4gc3luYyB3aXRoIHByb2R1Y3Rpb24gdmVyc2lvbiBpbiBgLi9mYWN0b3J5V2l0aFRocm93aW5nU2hpbXMuanNgLlxuICB2YXIgUmVhY3RQcm9wVHlwZXMgPSB7XG4gICAgYXJyYXk6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdhcnJheScpLFxuICAgIGJpZ2ludDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ2JpZ2ludCcpLFxuICAgIGJvb2w6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdib29sZWFuJyksXG4gICAgZnVuYzogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ2Z1bmN0aW9uJyksXG4gICAgbnVtYmVyOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignbnVtYmVyJyksXG4gICAgb2JqZWN0OiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignb2JqZWN0JyksXG4gICAgc3RyaW5nOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignc3RyaW5nJyksXG4gICAgc3ltYm9sOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignc3ltYm9sJyksXG5cbiAgICBhbnk6IGNyZWF0ZUFueVR5cGVDaGVja2VyKCksXG4gICAgYXJyYXlPZjogY3JlYXRlQXJyYXlPZlR5cGVDaGVja2VyLFxuICAgIGVsZW1lbnQ6IGNyZWF0ZUVsZW1lbnRUeXBlQ2hlY2tlcigpLFxuICAgIGVsZW1lbnRUeXBlOiBjcmVhdGVFbGVtZW50VHlwZVR5cGVDaGVja2VyKCksXG4gICAgaW5zdGFuY2VPZjogY3JlYXRlSW5zdGFuY2VUeXBlQ2hlY2tlcixcbiAgICBub2RlOiBjcmVhdGVOb2RlQ2hlY2tlcigpLFxuICAgIG9iamVjdE9mOiBjcmVhdGVPYmplY3RPZlR5cGVDaGVja2VyLFxuICAgIG9uZU9mOiBjcmVhdGVFbnVtVHlwZUNoZWNrZXIsXG4gICAgb25lT2ZUeXBlOiBjcmVhdGVVbmlvblR5cGVDaGVja2VyLFxuICAgIHNoYXBlOiBjcmVhdGVTaGFwZVR5cGVDaGVja2VyLFxuICAgIGV4YWN0OiBjcmVhdGVTdHJpY3RTaGFwZVR5cGVDaGVja2VyLFxuICB9O1xuXG4gIC8qKlxuICAgKiBpbmxpbmVkIE9iamVjdC5pcyBwb2x5ZmlsbCB0byBhdm9pZCByZXF1aXJpbmcgY29uc3VtZXJzIHNoaXAgdGhlaXIgb3duXG4gICAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9pc1xuICAgKi9cbiAgLyplc2xpbnQtZGlzYWJsZSBuby1zZWxmLWNvbXBhcmUqL1xuICBmdW5jdGlvbiBpcyh4LCB5KSB7XG4gICAgLy8gU2FtZVZhbHVlIGFsZ29yaXRobVxuICAgIGlmICh4ID09PSB5KSB7XG4gICAgICAvLyBTdGVwcyAxLTUsIDctMTBcbiAgICAgIC8vIFN0ZXBzIDYuYi02LmU6ICswICE9IC0wXG4gICAgICByZXR1cm4geCAhPT0gMCB8fCAxIC8geCA9PT0gMSAvIHk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFN0ZXAgNi5hOiBOYU4gPT0gTmFOXG4gICAgICByZXR1cm4geCAhPT0geCAmJiB5ICE9PSB5O1xuICAgIH1cbiAgfVxuICAvKmVzbGludC1lbmFibGUgbm8tc2VsZi1jb21wYXJlKi9cblxuICAvKipcbiAgICogV2UgdXNlIGFuIEVycm9yLWxpa2Ugb2JqZWN0IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGFzIHBlb3BsZSBtYXkgY2FsbFxuICAgKiBQcm9wVHlwZXMgZGlyZWN0bHkgYW5kIGluc3BlY3QgdGhlaXIgb3V0cHV0LiBIb3dldmVyLCB3ZSBkb24ndCB1c2UgcmVhbFxuICAgKiBFcnJvcnMgYW55bW9yZS4gV2UgZG9uJ3QgaW5zcGVjdCB0aGVpciBzdGFjayBhbnl3YXksIGFuZCBjcmVhdGluZyB0aGVtXG4gICAqIGlzIHByb2hpYml0aXZlbHkgZXhwZW5zaXZlIGlmIHRoZXkgYXJlIGNyZWF0ZWQgdG9vIG9mdGVuLCBzdWNoIGFzIHdoYXRcbiAgICogaGFwcGVucyBpbiBvbmVPZlR5cGUoKSBmb3IgYW55IHR5cGUgYmVmb3JlIHRoZSBvbmUgdGhhdCBtYXRjaGVkLlxuICAgKi9cbiAgZnVuY3Rpb24gUHJvcFR5cGVFcnJvcihtZXNzYWdlLCBkYXRhKSB7XG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgICB0aGlzLmRhdGEgPSBkYXRhICYmIHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGE6IHt9O1xuICAgIHRoaXMuc3RhY2sgPSAnJztcbiAgfVxuICAvLyBNYWtlIGBpbnN0YW5jZW9mIEVycm9yYCBzdGlsbCB3b3JrIGZvciByZXR1cm5lZCBlcnJvcnMuXG4gIFByb3BUeXBlRXJyb3IucHJvdG90eXBlID0gRXJyb3IucHJvdG90eXBlO1xuXG4gIGZ1bmN0aW9uIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHZhciBtYW51YWxQcm9wVHlwZUNhbGxDYWNoZSA9IHt9O1xuICAgICAgdmFyIG1hbnVhbFByb3BUeXBlV2FybmluZ0NvdW50ID0gMDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2hlY2tUeXBlKGlzUmVxdWlyZWQsIHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7XG4gICAgICBjb21wb25lbnROYW1lID0gY29tcG9uZW50TmFtZSB8fCBBTk9OWU1PVVM7XG4gICAgICBwcm9wRnVsbE5hbWUgPSBwcm9wRnVsbE5hbWUgfHwgcHJvcE5hbWU7XG5cbiAgICAgIGlmIChzZWNyZXQgIT09IFJlYWN0UHJvcFR5cGVzU2VjcmV0KSB7XG4gICAgICAgIGlmICh0aHJvd09uRGlyZWN0QWNjZXNzKSB7XG4gICAgICAgICAgLy8gTmV3IGJlaGF2aW9yIG9ubHkgZm9yIHVzZXJzIG9mIGBwcm9wLXR5cGVzYCBwYWNrYWdlXG4gICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihcbiAgICAgICAgICAgICdDYWxsaW5nIFByb3BUeXBlcyB2YWxpZGF0b3JzIGRpcmVjdGx5IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLiAnICtcbiAgICAgICAgICAgICdVc2UgYFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcygpYCB0byBjYWxsIHRoZW0uICcgK1xuICAgICAgICAgICAgJ1JlYWQgbW9yZSBhdCBodHRwOi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXMnXG4gICAgICAgICAgKTtcbiAgICAgICAgICBlcnIubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAvLyBPbGQgYmVoYXZpb3IgZm9yIHBlb3BsZSB1c2luZyBSZWFjdC5Qcm9wVHlwZXNcbiAgICAgICAgICB2YXIgY2FjaGVLZXkgPSBjb21wb25lbnROYW1lICsgJzonICsgcHJvcE5hbWU7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIW1hbnVhbFByb3BUeXBlQ2FsbENhY2hlW2NhY2hlS2V5XSAmJlxuICAgICAgICAgICAgLy8gQXZvaWQgc3BhbW1pbmcgdGhlIGNvbnNvbGUgYmVjYXVzZSB0aGV5IGFyZSBvZnRlbiBub3QgYWN0aW9uYWJsZSBleGNlcHQgZm9yIGxpYiBhdXRob3JzXG4gICAgICAgICAgICBtYW51YWxQcm9wVHlwZVdhcm5pbmdDb3VudCA8IDNcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHByaW50V2FybmluZyhcbiAgICAgICAgICAgICAgJ1lvdSBhcmUgbWFudWFsbHkgY2FsbGluZyBhIFJlYWN0LlByb3BUeXBlcyB2YWxpZGF0aW9uICcgK1xuICAgICAgICAgICAgICAnZnVuY3Rpb24gZm9yIHRoZSBgJyArIHByb3BGdWxsTmFtZSArICdgIHByb3Agb24gYCcgKyBjb21wb25lbnROYW1lICsgJ2AuIFRoaXMgaXMgZGVwcmVjYXRlZCAnICtcbiAgICAgICAgICAgICAgJ2FuZCB3aWxsIHRocm93IGluIHRoZSBzdGFuZGFsb25lIGBwcm9wLXR5cGVzYCBwYWNrYWdlLiAnICtcbiAgICAgICAgICAgICAgJ1lvdSBtYXkgYmUgc2VlaW5nIHRoaXMgd2FybmluZyBkdWUgdG8gYSB0aGlyZC1wYXJ0eSBQcm9wVHlwZXMgJyArXG4gICAgICAgICAgICAgICdsaWJyYXJ5LiBTZWUgaHR0cHM6Ly9mYi5tZS9yZWFjdC13YXJuaW5nLWRvbnQtY2FsbC1wcm9wdHlwZXMgJyArICdmb3IgZGV0YWlscy4nXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbWFudWFsUHJvcFR5cGVDYWxsQ2FjaGVbY2FjaGVLZXldID0gdHJ1ZTtcbiAgICAgICAgICAgIG1hbnVhbFByb3BUeXBlV2FybmluZ0NvdW50Kys7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09IG51bGwpIHtcbiAgICAgICAgaWYgKGlzUmVxdWlyZWQpIHtcbiAgICAgICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1RoZSAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2AgaXMgbWFya2VkIGFzIHJlcXVpcmVkICcgKyAoJ2luIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBidXQgaXRzIHZhbHVlIGlzIGBudWxsYC4nKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignVGhlICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBpcyBtYXJrZWQgYXMgcmVxdWlyZWQgaW4gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGJ1dCBpdHMgdmFsdWUgaXMgYHVuZGVmaW5lZGAuJykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGNoYWluZWRDaGVja1R5cGUgPSBjaGVja1R5cGUuYmluZChudWxsLCBmYWxzZSk7XG4gICAgY2hhaW5lZENoZWNrVHlwZS5pc1JlcXVpcmVkID0gY2hlY2tUeXBlLmJpbmQobnVsbCwgdHJ1ZSk7XG5cbiAgICByZXR1cm4gY2hhaW5lZENoZWNrVHlwZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKGV4cGVjdGVkVHlwZSkge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gZXhwZWN0ZWRUeXBlKSB7XG4gICAgICAgIC8vIGBwcm9wVmFsdWVgIGJlaW5nIGluc3RhbmNlIG9mLCBzYXksIGRhdGUvcmVnZXhwLCBwYXNzIHRoZSAnb2JqZWN0J1xuICAgICAgICAvLyBjaGVjaywgYnV0IHdlIGNhbiBvZmZlciBhIG1vcmUgcHJlY2lzZSBlcnJvciBtZXNzYWdlIGhlcmUgcmF0aGVyIHRoYW5cbiAgICAgICAgLy8gJ29mIHR5cGUgYG9iamVjdGAnLlxuICAgICAgICB2YXIgcHJlY2lzZVR5cGUgPSBnZXRQcmVjaXNlVHlwZShwcm9wVmFsdWUpO1xuXG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcihcbiAgICAgICAgICAnSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByZWNpc2VUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkICcpICsgKCdgJyArIGV4cGVjdGVkVHlwZSArICdgLicpLFxuICAgICAgICAgIHtleHBlY3RlZFR5cGU6IGV4cGVjdGVkVHlwZX1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlQW55VHlwZUNoZWNrZXIoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGwpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlQXJyYXlPZlR5cGVDaGVja2VyKHR5cGVDaGVja2VyKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICBpZiAodHlwZW9mIHR5cGVDaGVja2VyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignUHJvcGVydHkgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiBjb21wb25lbnQgYCcgKyBjb21wb25lbnROYW1lICsgJ2AgaGFzIGludmFsaWQgUHJvcFR5cGUgbm90YXRpb24gaW5zaWRlIGFycmF5T2YuJyk7XG4gICAgICB9XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHtcbiAgICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJvcFR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYW4gYXJyYXkuJykpO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wVmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGVycm9yID0gdHlwZUNoZWNrZXIocHJvcFZhbHVlLCBpLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJ1snICsgaSArICddJywgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVFbGVtZW50VHlwZUNoZWNrZXIoKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgaWYgKCFpc1ZhbGlkRWxlbWVudChwcm9wVmFsdWUpKSB7XG4gICAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGEgc2luZ2xlIFJlYWN0RWxlbWVudC4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnRUeXBlVHlwZUNoZWNrZXIoKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgaWYgKCFSZWFjdElzLmlzVmFsaWRFbGVtZW50VHlwZShwcm9wVmFsdWUpKSB7XG4gICAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGEgc2luZ2xlIFJlYWN0RWxlbWVudCB0eXBlLicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2VUeXBlQ2hlY2tlcihleHBlY3RlZENsYXNzKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICBpZiAoIShwcm9wc1twcm9wTmFtZV0gaW5zdGFuY2VvZiBleHBlY3RlZENsYXNzKSkge1xuICAgICAgICB2YXIgZXhwZWN0ZWRDbGFzc05hbWUgPSBleHBlY3RlZENsYXNzLm5hbWUgfHwgQU5PTllNT1VTO1xuICAgICAgICB2YXIgYWN0dWFsQ2xhc3NOYW1lID0gZ2V0Q2xhc3NOYW1lKHByb3BzW3Byb3BOYW1lXSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIGFjdHVhbENsYXNzTmFtZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCAnKSArICgnaW5zdGFuY2Ugb2YgYCcgKyBleHBlY3RlZENsYXNzTmFtZSArICdgLicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlRW51bVR5cGVDaGVja2VyKGV4cGVjdGVkVmFsdWVzKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGV4cGVjdGVkVmFsdWVzKSkge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgcHJpbnRXYXJuaW5nKFxuICAgICAgICAgICAgJ0ludmFsaWQgYXJndW1lbnRzIHN1cHBsaWVkIHRvIG9uZU9mLCBleHBlY3RlZCBhbiBhcnJheSwgZ290ICcgKyBhcmd1bWVudHMubGVuZ3RoICsgJyBhcmd1bWVudHMuICcgK1xuICAgICAgICAgICAgJ0EgY29tbW9uIG1pc3Rha2UgaXMgdG8gd3JpdGUgb25lT2YoeCwgeSwgeikgaW5zdGVhZCBvZiBvbmVPZihbeCwgeSwgel0pLidcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByaW50V2FybmluZygnSW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byBvbmVPZiwgZXhwZWN0ZWQgYW4gYXJyYXkuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXhwZWN0ZWRWYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGlzKHByb3BWYWx1ZSwgZXhwZWN0ZWRWYWx1ZXNbaV0pKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHZhbHVlc1N0cmluZyA9IEpTT04uc3RyaW5naWZ5KGV4cGVjdGVkVmFsdWVzLCBmdW5jdGlvbiByZXBsYWNlcihrZXksIHZhbHVlKSB7XG4gICAgICAgIHZhciB0eXBlID0gZ2V0UHJlY2lzZVR5cGUodmFsdWUpO1xuICAgICAgICBpZiAodHlwZSA9PT0gJ3N5bWJvbCcpIHtcbiAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdmFsdWUgYCcgKyBTdHJpbmcocHJvcFZhbHVlKSArICdgICcgKyAoJ3N1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBvbmUgb2YgJyArIHZhbHVlc1N0cmluZyArICcuJykpO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlT2JqZWN0T2ZUeXBlQ2hlY2tlcih0eXBlQ2hlY2tlcikge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKHR5cGVvZiB0eXBlQ2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1Byb3BlcnR5IGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgY29tcG9uZW50IGAnICsgY29tcG9uZW50TmFtZSArICdgIGhhcyBpbnZhbGlkIFByb3BUeXBlIG5vdGF0aW9uIGluc2lkZSBvYmplY3RPZi4nKTtcbiAgICAgIH1cbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhbiBvYmplY3QuJykpO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIga2V5IGluIHByb3BWYWx1ZSkge1xuICAgICAgICBpZiAoaGFzKHByb3BWYWx1ZSwga2V5KSkge1xuICAgICAgICAgIHZhciBlcnJvciA9IHR5cGVDaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlVW5pb25UeXBlQ2hlY2tlcihhcnJheU9mVHlwZUNoZWNrZXJzKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGFycmF5T2ZUeXBlQ2hlY2tlcnMpKSB7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gcHJpbnRXYXJuaW5nKCdJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIHRvIG9uZU9mVHlwZSwgZXhwZWN0ZWQgYW4gaW5zdGFuY2Ugb2YgYXJyYXkuJykgOiB2b2lkIDA7XG4gICAgICByZXR1cm4gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbDtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5T2ZUeXBlQ2hlY2tlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjaGVja2VyID0gYXJyYXlPZlR5cGVDaGVja2Vyc1tpXTtcbiAgICAgIGlmICh0eXBlb2YgY2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBwcmludFdhcm5pbmcoXG4gICAgICAgICAgJ0ludmFsaWQgYXJndW1lbnQgc3VwcGxpZWQgdG8gb25lT2ZUeXBlLiBFeHBlY3RlZCBhbiBhcnJheSBvZiBjaGVjayBmdW5jdGlvbnMsIGJ1dCAnICtcbiAgICAgICAgICAncmVjZWl2ZWQgJyArIGdldFBvc3RmaXhGb3JUeXBlV2FybmluZyhjaGVja2VyKSArICcgYXQgaW5kZXggJyArIGkgKyAnLidcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgZXhwZWN0ZWRUeXBlcyA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheU9mVHlwZUNoZWNrZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjaGVja2VyID0gYXJyYXlPZlR5cGVDaGVja2Vyc1tpXTtcbiAgICAgICAgdmFyIGNoZWNrZXJSZXN1bHQgPSBjaGVja2VyKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICBpZiAoY2hlY2tlclJlc3VsdCA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoZWNrZXJSZXN1bHQuZGF0YSAmJiBoYXMoY2hlY2tlclJlc3VsdC5kYXRhLCAnZXhwZWN0ZWRUeXBlJykpIHtcbiAgICAgICAgICBleHBlY3RlZFR5cGVzLnB1c2goY2hlY2tlclJlc3VsdC5kYXRhLmV4cGVjdGVkVHlwZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZhciBleHBlY3RlZFR5cGVzTWVzc2FnZSA9IChleHBlY3RlZFR5cGVzLmxlbmd0aCA+IDApID8gJywgZXhwZWN0ZWQgb25lIG9mIHR5cGUgWycgKyBleHBlY3RlZFR5cGVzLmpvaW4oJywgJykgKyAnXSc6ICcnO1xuICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBzdXBwbGllZCB0byAnICsgKCdgJyArIGNvbXBvbmVudE5hbWUgKyAnYCcgKyBleHBlY3RlZFR5cGVzTWVzc2FnZSArICcuJykpO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlTm9kZUNoZWNrZXIoKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICBpZiAoIWlzTm9kZShwcm9wc1twcm9wTmFtZV0pKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agc3VwcGxpZWQgdG8gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGEgUmVhY3ROb2RlLicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW52YWxpZFZhbGlkYXRvckVycm9yKGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIGtleSwgdHlwZSkge1xuICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcihcbiAgICAgIChjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycpICsgJzogJyArIGxvY2F0aW9uICsgJyB0eXBlIGAnICsgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5ICsgJ2AgaXMgaW52YWxpZDsgJyArXG4gICAgICAnaXQgbXVzdCBiZSBhIGZ1bmN0aW9uLCB1c3VhbGx5IGZyb20gdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLCBidXQgcmVjZWl2ZWQgYCcgKyB0eXBlICsgJ2AuJ1xuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVTaGFwZVR5cGVDaGVja2VyKHNoYXBlVHlwZXMpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgYCcgKyBwcm9wVHlwZSArICdgICcgKyAoJ3N1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBgb2JqZWN0YC4nKSk7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBrZXkgaW4gc2hhcGVUeXBlcykge1xuICAgICAgICB2YXIgY2hlY2tlciA9IHNoYXBlVHlwZXNba2V5XTtcbiAgICAgICAgaWYgKHR5cGVvZiBjaGVja2VyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcmV0dXJuIGludmFsaWRWYWxpZGF0b3JFcnJvcihjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBrZXksIGdldFByZWNpc2VUeXBlKGNoZWNrZXIpKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZXJyb3IgPSBjaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVTdHJpY3RTaGFwZVR5cGVDaGVja2VyKHNoYXBlVHlwZXMpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgYCcgKyBwcm9wVHlwZSArICdgICcgKyAoJ3N1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBgb2JqZWN0YC4nKSk7XG4gICAgICB9XG4gICAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIGFsbCBrZXlzIGluIGNhc2Ugc29tZSBhcmUgcmVxdWlyZWQgYnV0IG1pc3NpbmcgZnJvbSBwcm9wcy5cbiAgICAgIHZhciBhbGxLZXlzID0gYXNzaWduKHt9LCBwcm9wc1twcm9wTmFtZV0sIHNoYXBlVHlwZXMpO1xuICAgICAgZm9yICh2YXIga2V5IGluIGFsbEtleXMpIHtcbiAgICAgICAgdmFyIGNoZWNrZXIgPSBzaGFwZVR5cGVzW2tleV07XG4gICAgICAgIGlmIChoYXMoc2hhcGVUeXBlcywga2V5KSAmJiB0eXBlb2YgY2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHJldHVybiBpbnZhbGlkVmFsaWRhdG9yRXJyb3IoY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwga2V5LCBnZXRQcmVjaXNlVHlwZShjaGVja2VyKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjaGVja2VyKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKFxuICAgICAgICAgICAgJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIGtleSBgJyArIGtleSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLicgK1xuICAgICAgICAgICAgJ1xcbkJhZCBvYmplY3Q6ICcgKyBKU09OLnN0cmluZ2lmeShwcm9wc1twcm9wTmFtZV0sIG51bGwsICcgICcpICtcbiAgICAgICAgICAgICdcXG5WYWxpZCBrZXlzOiAnICsgSlNPTi5zdHJpbmdpZnkoT2JqZWN0LmtleXMoc2hhcGVUeXBlcyksIG51bGwsICcgICcpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZXJyb3IgPSBjaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzTm9kZShwcm9wVmFsdWUpIHtcbiAgICBzd2l0Y2ggKHR5cGVvZiBwcm9wVmFsdWUpIHtcbiAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgcmV0dXJuICFwcm9wVmFsdWU7XG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIHByb3BWYWx1ZS5ldmVyeShpc05vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wVmFsdWUgPT09IG51bGwgfHwgaXNWYWxpZEVsZW1lbnQocHJvcFZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKHByb3BWYWx1ZSk7XG4gICAgICAgIGlmIChpdGVyYXRvckZuKSB7XG4gICAgICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKHByb3BWYWx1ZSk7XG4gICAgICAgICAgdmFyIHN0ZXA7XG4gICAgICAgICAgaWYgKGl0ZXJhdG9yRm4gIT09IHByb3BWYWx1ZS5lbnRyaWVzKSB7XG4gICAgICAgICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgICAgICAgICAgIGlmICghaXNOb2RlKHN0ZXAudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEl0ZXJhdG9yIHdpbGwgcHJvdmlkZSBlbnRyeSBbayx2XSB0dXBsZXMgcmF0aGVyIHRoYW4gdmFsdWVzLlxuICAgICAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICAgICAgICB2YXIgZW50cnkgPSBzdGVwLnZhbHVlO1xuICAgICAgICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzTm9kZShlbnRyeVsxXSkpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaXNTeW1ib2wocHJvcFR5cGUsIHByb3BWYWx1ZSkge1xuICAgIC8vIE5hdGl2ZSBTeW1ib2wuXG4gICAgaWYgKHByb3BUeXBlID09PSAnc3ltYm9sJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gZmFsc3kgdmFsdWUgY2FuJ3QgYmUgYSBTeW1ib2xcbiAgICBpZiAoIXByb3BWYWx1ZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIDE5LjQuMy41IFN5bWJvbC5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ10gPT09ICdTeW1ib2wnXG4gICAgaWYgKHByb3BWYWx1ZVsnQEB0b1N0cmluZ1RhZyddID09PSAnU3ltYm9sJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gRmFsbGJhY2sgZm9yIG5vbi1zcGVjIGNvbXBsaWFudCBTeW1ib2xzIHdoaWNoIGFyZSBwb2x5ZmlsbGVkLlxuICAgIGlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHByb3BWYWx1ZSBpbnN0YW5jZW9mIFN5bWJvbCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gRXF1aXZhbGVudCBvZiBgdHlwZW9mYCBidXQgd2l0aCBzcGVjaWFsIGhhbmRsaW5nIGZvciBhcnJheSBhbmQgcmVnZXhwLlxuICBmdW5jdGlvbiBnZXRQcm9wVHlwZShwcm9wVmFsdWUpIHtcbiAgICB2YXIgcHJvcFR5cGUgPSB0eXBlb2YgcHJvcFZhbHVlO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHtcbiAgICAgIHJldHVybiAnYXJyYXknO1xuICAgIH1cbiAgICBpZiAocHJvcFZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAvLyBPbGQgd2Via2l0cyAoYXQgbGVhc3QgdW50aWwgQW5kcm9pZCA0LjApIHJldHVybiAnZnVuY3Rpb24nIHJhdGhlciB0aGFuXG4gICAgICAvLyAnb2JqZWN0JyBmb3IgdHlwZW9mIGEgUmVnRXhwLiBXZSdsbCBub3JtYWxpemUgdGhpcyBoZXJlIHNvIHRoYXQgL2JsYS9cbiAgICAgIC8vIHBhc3NlcyBQcm9wVHlwZXMub2JqZWN0LlxuICAgICAgcmV0dXJuICdvYmplY3QnO1xuICAgIH1cbiAgICBpZiAoaXNTeW1ib2wocHJvcFR5cGUsIHByb3BWYWx1ZSkpIHtcbiAgICAgIHJldHVybiAnc3ltYm9sJztcbiAgICB9XG4gICAgcmV0dXJuIHByb3BUeXBlO1xuICB9XG5cbiAgLy8gVGhpcyBoYW5kbGVzIG1vcmUgdHlwZXMgdGhhbiBgZ2V0UHJvcFR5cGVgLiBPbmx5IHVzZWQgZm9yIGVycm9yIG1lc3NhZ2VzLlxuICAvLyBTZWUgYGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyYC5cbiAgZnVuY3Rpb24gZ2V0UHJlY2lzZVR5cGUocHJvcFZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiBwcm9wVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IHByb3BWYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuICcnICsgcHJvcFZhbHVlO1xuICAgIH1cbiAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgIGlmIChwcm9wVHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgIHJldHVybiAnZGF0ZSc7XG4gICAgICB9IGVsc2UgaWYgKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICByZXR1cm4gJ3JlZ2V4cCc7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwcm9wVHlwZTtcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBzdHJpbmcgdGhhdCBpcyBwb3N0Zml4ZWQgdG8gYSB3YXJuaW5nIGFib3V0IGFuIGludmFsaWQgdHlwZS5cbiAgLy8gRm9yIGV4YW1wbGUsIFwidW5kZWZpbmVkXCIgb3IgXCJvZiB0eXBlIGFycmF5XCJcbiAgZnVuY3Rpb24gZ2V0UG9zdGZpeEZvclR5cGVXYXJuaW5nKHZhbHVlKSB7XG4gICAgdmFyIHR5cGUgPSBnZXRQcmVjaXNlVHlwZSh2YWx1ZSk7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdhcnJheSc6XG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICByZXR1cm4gJ2FuICcgKyB0eXBlO1xuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICBjYXNlICdkYXRlJzpcbiAgICAgIGNhc2UgJ3JlZ2V4cCc6XG4gICAgICAgIHJldHVybiAnYSAnICsgdHlwZTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0eXBlO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJldHVybnMgY2xhc3MgbmFtZSBvZiB0aGUgb2JqZWN0LCBpZiBhbnkuXG4gIGZ1bmN0aW9uIGdldENsYXNzTmFtZShwcm9wVmFsdWUpIHtcbiAgICBpZiAoIXByb3BWYWx1ZS5jb25zdHJ1Y3RvciB8fCAhcHJvcFZhbHVlLmNvbnN0cnVjdG9yLm5hbWUpIHtcbiAgICAgIHJldHVybiBBTk9OWU1PVVM7XG4gICAgfVxuICAgIHJldHVybiBwcm9wVmFsdWUuY29uc3RydWN0b3IubmFtZTtcbiAgfVxuXG4gIFJlYWN0UHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzID0gY2hlY2tQcm9wVHlwZXM7XG4gIFJlYWN0UHJvcFR5cGVzLnJlc2V0V2FybmluZ0NhY2hlID0gY2hlY2tQcm9wVHlwZXMucmVzZXRXYXJuaW5nQ2FjaGU7XG4gIFJlYWN0UHJvcFR5cGVzLlByb3BUeXBlcyA9IFJlYWN0UHJvcFR5cGVzO1xuXG4gIHJldHVybiBSZWFjdFByb3BUeXBlcztcbn07XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgUmVhY3RJcyA9IHJlcXVpcmUoJ3JlYWN0LWlzJyk7XG5cbiAgLy8gQnkgZXhwbGljaXRseSB1c2luZyBgcHJvcC10eXBlc2AgeW91IGFyZSBvcHRpbmcgaW50byBuZXcgZGV2ZWxvcG1lbnQgYmVoYXZpb3IuXG4gIC8vIGh0dHA6Ly9mYi5tZS9wcm9wLXR5cGVzLWluLXByb2RcbiAgdmFyIHRocm93T25EaXJlY3RBY2Nlc3MgPSB0cnVlO1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMnKShSZWFjdElzLmlzRWxlbWVudCwgdGhyb3dPbkRpcmVjdEFjY2Vzcyk7XG59IGVsc2Uge1xuICAvLyBCeSBleHBsaWNpdGx5IHVzaW5nIGBwcm9wLXR5cGVzYCB5b3UgYXJlIG9wdGluZyBpbnRvIG5ldyBwcm9kdWN0aW9uIGJlaGF2aW9yLlxuICAvLyBodHRwOi8vZmIubWUvcHJvcC10eXBlcy1pbi1wcm9kXG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9mYWN0b3J5V2l0aFRocm93aW5nU2hpbXMnKSgpO1xufVxuIiwgIi8qIVxuXHRDb3B5cmlnaHQgKGMpIDIwMTggSmVkIFdhdHNvbi5cblx0TGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlIChNSVQpLCBzZWVcblx0aHR0cDovL2plZHdhdHNvbi5naXRodWIuaW8vY2xhc3NuYW1lc1xuKi9cbi8qIGdsb2JhbCBkZWZpbmUgKi9cblxuKGZ1bmN0aW9uICgpIHtcblx0J3VzZSBzdHJpY3QnO1xuXG5cdHZhciBoYXNPd24gPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxuXHRmdW5jdGlvbiBjbGFzc05hbWVzICgpIHtcblx0XHR2YXIgY2xhc3NlcyA9ICcnO1xuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBhcmcgPSBhcmd1bWVudHNbaV07XG5cdFx0XHRpZiAoYXJnKSB7XG5cdFx0XHRcdGNsYXNzZXMgPSBhcHBlbmRDbGFzcyhjbGFzc2VzLCBwYXJzZVZhbHVlKGFyZykpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBjbGFzc2VzO1xuXHR9XG5cblx0ZnVuY3Rpb24gcGFyc2VWYWx1ZSAoYXJnKSB7XG5cdFx0aWYgKHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBhcmcgPT09ICdudW1iZXInKSB7XG5cdFx0XHRyZXR1cm4gYXJnO1xuXHRcdH1cblxuXHRcdGlmICh0eXBlb2YgYXJnICE9PSAnb2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuICcnO1xuXHRcdH1cblxuXHRcdGlmIChBcnJheS5pc0FycmF5KGFyZykpIHtcblx0XHRcdHJldHVybiBjbGFzc05hbWVzLmFwcGx5KG51bGwsIGFyZyk7XG5cdFx0fVxuXG5cdFx0aWYgKGFyZy50b1N0cmluZyAhPT0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyAmJiAhYXJnLnRvU3RyaW5nLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ1tuYXRpdmUgY29kZV0nKSkge1xuXHRcdFx0cmV0dXJuIGFyZy50b1N0cmluZygpO1xuXHRcdH1cblxuXHRcdHZhciBjbGFzc2VzID0gJyc7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gYXJnKSB7XG5cdFx0XHRpZiAoaGFzT3duLmNhbGwoYXJnLCBrZXkpICYmIGFyZ1trZXldKSB7XG5cdFx0XHRcdGNsYXNzZXMgPSBhcHBlbmRDbGFzcyhjbGFzc2VzLCBrZXkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBjbGFzc2VzO1xuXHR9XG5cblx0ZnVuY3Rpb24gYXBwZW5kQ2xhc3MgKHZhbHVlLCBuZXdDbGFzcykge1xuXHRcdGlmICghbmV3Q2xhc3MpIHtcblx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9XG5cdFxuXHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0cmV0dXJuIHZhbHVlICsgJyAnICsgbmV3Q2xhc3M7XG5cdFx0fVxuXHRcblx0XHRyZXR1cm4gdmFsdWUgKyBuZXdDbGFzcztcblx0fVxuXG5cdGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuXHRcdGNsYXNzTmFtZXMuZGVmYXVsdCA9IGNsYXNzTmFtZXM7XG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBjbGFzc05hbWVzO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGRlZmluZS5hbWQgPT09ICdvYmplY3QnICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyByZWdpc3RlciBhcyAnY2xhc3NuYW1lcycsIGNvbnNpc3RlbnQgd2l0aCBucG0gcGFja2FnZSBuYW1lXG5cdFx0ZGVmaW5lKCdjbGFzc25hbWVzJywgW10sIGZ1bmN0aW9uICgpIHtcblx0XHRcdHJldHVybiBjbGFzc05hbWVzO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHdpbmRvdy5jbGFzc05hbWVzID0gY2xhc3NOYW1lcztcblx0fVxufSgpKTtcbiIsICIvKiogQGxpY2Vuc2UgUmVhY3QgdjE2LjEzLjFcbiAqIHJlYWN0LWlzLmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAoZnVuY3Rpb24oKSB7XG4ndXNlIHN0cmljdCc7XG5cbi8vIFRoZSBTeW1ib2wgdXNlZCB0byB0YWcgdGhlIFJlYWN0RWxlbWVudC1saWtlIHR5cGVzLiBJZiB0aGVyZSBpcyBubyBuYXRpdmUgU3ltYm9sXG4vLyBub3IgcG9seWZpbGwsIHRoZW4gYSBwbGFpbiBudW1iZXIgaXMgdXNlZCBmb3IgcGVyZm9ybWFuY2UuXG52YXIgaGFzU3ltYm9sID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuZm9yO1xudmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmVsZW1lbnQnKSA6IDB4ZWFjNztcbnZhciBSRUFDVF9QT1JUQUxfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnBvcnRhbCcpIDogMHhlYWNhO1xudmFyIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5mcmFnbWVudCcpIDogMHhlYWNiO1xudmFyIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5zdHJpY3RfbW9kZScpIDogMHhlYWNjO1xudmFyIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5wcm9maWxlcicpIDogMHhlYWQyO1xudmFyIFJFQUNUX1BST1ZJREVSX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5wcm92aWRlcicpIDogMHhlYWNkO1xudmFyIFJFQUNUX0NPTlRFWFRfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmNvbnRleHQnKSA6IDB4ZWFjZTsgLy8gVE9ETzogV2UgZG9uJ3QgdXNlIEFzeW5jTW9kZSBvciBDb25jdXJyZW50TW9kZSBhbnltb3JlLiBUaGV5IHdlcmUgdGVtcG9yYXJ5XG4vLyAodW5zdGFibGUpIEFQSXMgdGhhdCBoYXZlIGJlZW4gcmVtb3ZlZC4gQ2FuIHdlIHJlbW92ZSB0aGUgc3ltYm9scz9cblxudmFyIFJFQUNUX0FTWU5DX01PREVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmFzeW5jX21vZGUnKSA6IDB4ZWFjZjtcbnZhciBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmNvbmN1cnJlbnRfbW9kZScpIDogMHhlYWNmO1xudmFyIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5mb3J3YXJkX3JlZicpIDogMHhlYWQwO1xudmFyIFJFQUNUX1NVU1BFTlNFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5zdXNwZW5zZScpIDogMHhlYWQxO1xudmFyIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnN1c3BlbnNlX2xpc3QnKSA6IDB4ZWFkODtcbnZhciBSRUFDVF9NRU1PX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5tZW1vJykgOiAweGVhZDM7XG52YXIgUkVBQ1RfTEFaWV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QubGF6eScpIDogMHhlYWQ0O1xudmFyIFJFQUNUX0JMT0NLX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5ibG9jaycpIDogMHhlYWQ5O1xudmFyIFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5mdW5kYW1lbnRhbCcpIDogMHhlYWQ1O1xudmFyIFJFQUNUX1JFU1BPTkRFUl9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QucmVzcG9uZGVyJykgOiAweGVhZDY7XG52YXIgUkVBQ1RfU0NPUEVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnNjb3BlJykgOiAweGVhZDc7XG5cbmZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKSB7XG4gIHJldHVybiB0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicgfHwgLy8gTm90ZTogaXRzIHR5cGVvZiBtaWdodCBiZSBvdGhlciB0aGFuICdzeW1ib2wnIG9yICdudW1iZXInIGlmIGl0J3MgYSBwb2x5ZmlsbC5cbiAgdHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9QUk9GSUxFUl9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgfHwgdHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwgJiYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfUFJPVklERVJfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9DT05URVhUX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1JFU1BPTkRFUl9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1NDT1BFX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQkxPQ0tfVFlQRSk7XG59XG5cbmZ1bmN0aW9uIHR5cGVPZihvYmplY3QpIHtcbiAgaWYgKHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCkge1xuICAgIHZhciAkJHR5cGVvZiA9IG9iamVjdC4kJHR5cGVvZjtcblxuICAgIHN3aXRjaCAoJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICB2YXIgdHlwZSA9IG9iamVjdC50eXBlO1xuXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgIGNhc2UgUkVBQ1RfQVNZTkNfTU9ERV9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9GUkFHTUVOVF9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfUFJPRklMRVJfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1NUUklDVF9NT0RFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuIHR5cGU7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdmFyICQkdHlwZW9mVHlwZSA9IHR5cGUgJiYgdHlwZS4kJHR5cGVvZjtcblxuICAgICAgICAgICAgc3dpdGNoICgkJHR5cGVvZlR5cGUpIHtcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9DT05URVhUX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX1BST1ZJREVSX1RZUEU6XG4gICAgICAgICAgICAgICAgcmV0dXJuICQkdHlwZW9mVHlwZTtcblxuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiAkJHR5cGVvZjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgIHJldHVybiAkJHR5cGVvZjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufSAvLyBBc3luY01vZGUgaXMgZGVwcmVjYXRlZCBhbG9uZyB3aXRoIGlzQXN5bmNNb2RlXG5cbnZhciBBc3luY01vZGUgPSBSRUFDVF9BU1lOQ19NT0RFX1RZUEU7XG52YXIgQ29uY3VycmVudE1vZGUgPSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRTtcbnZhciBDb250ZXh0Q29uc3VtZXIgPSBSRUFDVF9DT05URVhUX1RZUEU7XG52YXIgQ29udGV4dFByb3ZpZGVyID0gUkVBQ1RfUFJPVklERVJfVFlQRTtcbnZhciBFbGVtZW50ID0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xudmFyIEZvcndhcmRSZWYgPSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFO1xudmFyIEZyYWdtZW50ID0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbnZhciBMYXp5ID0gUkVBQ1RfTEFaWV9UWVBFO1xudmFyIE1lbW8gPSBSRUFDVF9NRU1PX1RZUEU7XG52YXIgUG9ydGFsID0gUkVBQ1RfUE9SVEFMX1RZUEU7XG52YXIgUHJvZmlsZXIgPSBSRUFDVF9QUk9GSUxFUl9UWVBFO1xudmFyIFN0cmljdE1vZGUgPSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFO1xudmFyIFN1c3BlbnNlID0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbnZhciBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSA9IGZhbHNlOyAvLyBBc3luY01vZGUgc2hvdWxkIGJlIGRlcHJlY2F0ZWRcblxuZnVuY3Rpb24gaXNBc3luY01vZGUob2JqZWN0KSB7XG4gIHtcbiAgICBpZiAoIWhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlKSB7XG4gICAgICBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSA9IHRydWU7IC8vIFVzaW5nIGNvbnNvbGVbJ3dhcm4nXSB0byBldmFkZSBCYWJlbCBhbmQgRVNMaW50XG5cbiAgICAgIGNvbnNvbGVbJ3dhcm4nXSgnVGhlIFJlYWN0SXMuaXNBc3luY01vZGUoKSBhbGlhcyBoYXMgYmVlbiBkZXByZWNhdGVkLCAnICsgJ2FuZCB3aWxsIGJlIHJlbW92ZWQgaW4gUmVhY3QgMTcrLiBVcGRhdGUgeW91ciBjb2RlIHRvIHVzZSAnICsgJ1JlYWN0SXMuaXNDb25jdXJyZW50TW9kZSgpIGluc3RlYWQuIEl0IGhhcyB0aGUgZXhhY3Qgc2FtZSBBUEkuJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGlzQ29uY3VycmVudE1vZGUob2JqZWN0KSB8fCB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfQVNZTkNfTU9ERV9UWVBFO1xufVxuZnVuY3Rpb24gaXNDb25jdXJyZW50TW9kZShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzQ29udGV4dENvbnN1bWVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0NPTlRFWFRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzQ29udGV4dFByb3ZpZGVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BST1ZJREVSX1RZUEU7XG59XG5mdW5jdGlvbiBpc0VsZW1lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwgJiYgb2JqZWN0LiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEU7XG59XG5mdW5jdGlvbiBpc0ZvcndhcmRSZWYob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzRnJhZ21lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzTGF6eShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9MQVpZX1RZUEU7XG59XG5mdW5jdGlvbiBpc01lbW8ob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfTUVNT19UWVBFO1xufVxuZnVuY3Rpb24gaXNQb3J0YWwob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUE9SVEFMX1RZUEU7XG59XG5mdW5jdGlvbiBpc1Byb2ZpbGVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG59XG5mdW5jdGlvbiBpc1N0cmljdE1vZGUob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzU3VzcGVuc2Uob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbn1cblxuZXhwb3J0cy5Bc3luY01vZGUgPSBBc3luY01vZGU7XG5leHBvcnRzLkNvbmN1cnJlbnRNb2RlID0gQ29uY3VycmVudE1vZGU7XG5leHBvcnRzLkNvbnRleHRDb25zdW1lciA9IENvbnRleHRDb25zdW1lcjtcbmV4cG9ydHMuQ29udGV4dFByb3ZpZGVyID0gQ29udGV4dFByb3ZpZGVyO1xuZXhwb3J0cy5FbGVtZW50ID0gRWxlbWVudDtcbmV4cG9ydHMuRm9yd2FyZFJlZiA9IEZvcndhcmRSZWY7XG5leHBvcnRzLkZyYWdtZW50ID0gRnJhZ21lbnQ7XG5leHBvcnRzLkxhenkgPSBMYXp5O1xuZXhwb3J0cy5NZW1vID0gTWVtbztcbmV4cG9ydHMuUG9ydGFsID0gUG9ydGFsO1xuZXhwb3J0cy5Qcm9maWxlciA9IFByb2ZpbGVyO1xuZXhwb3J0cy5TdHJpY3RNb2RlID0gU3RyaWN0TW9kZTtcbmV4cG9ydHMuU3VzcGVuc2UgPSBTdXNwZW5zZTtcbmV4cG9ydHMuaXNBc3luY01vZGUgPSBpc0FzeW5jTW9kZTtcbmV4cG9ydHMuaXNDb25jdXJyZW50TW9kZSA9IGlzQ29uY3VycmVudE1vZGU7XG5leHBvcnRzLmlzQ29udGV4dENvbnN1bWVyID0gaXNDb250ZXh0Q29uc3VtZXI7XG5leHBvcnRzLmlzQ29udGV4dFByb3ZpZGVyID0gaXNDb250ZXh0UHJvdmlkZXI7XG5leHBvcnRzLmlzRWxlbWVudCA9IGlzRWxlbWVudDtcbmV4cG9ydHMuaXNGb3J3YXJkUmVmID0gaXNGb3J3YXJkUmVmO1xuZXhwb3J0cy5pc0ZyYWdtZW50ID0gaXNGcmFnbWVudDtcbmV4cG9ydHMuaXNMYXp5ID0gaXNMYXp5O1xuZXhwb3J0cy5pc01lbW8gPSBpc01lbW87XG5leHBvcnRzLmlzUG9ydGFsID0gaXNQb3J0YWw7XG5leHBvcnRzLmlzUHJvZmlsZXIgPSBpc1Byb2ZpbGVyO1xuZXhwb3J0cy5pc1N0cmljdE1vZGUgPSBpc1N0cmljdE1vZGU7XG5leHBvcnRzLmlzU3VzcGVuc2UgPSBpc1N1c3BlbnNlO1xuZXhwb3J0cy5pc1ZhbGlkRWxlbWVudFR5cGUgPSBpc1ZhbGlkRWxlbWVudFR5cGU7XG5leHBvcnRzLnR5cGVPZiA9IHR5cGVPZjtcbiAgfSkoKTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbnZhciByZWFjdElzID0gcmVxdWlyZSgncmVhY3QtaXMnKTtcblxuLyoqXG4gKiBDb3B5cmlnaHQgMjAxNSwgWWFob28hIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xudmFyIFJFQUNUX1NUQVRJQ1MgPSB7XG4gIGNoaWxkQ29udGV4dFR5cGVzOiB0cnVlLFxuICBjb250ZXh0VHlwZTogdHJ1ZSxcbiAgY29udGV4dFR5cGVzOiB0cnVlLFxuICBkZWZhdWx0UHJvcHM6IHRydWUsXG4gIGRpc3BsYXlOYW1lOiB0cnVlLFxuICBnZXREZWZhdWx0UHJvcHM6IHRydWUsXG4gIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcjogdHJ1ZSxcbiAgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzOiB0cnVlLFxuICBtaXhpbnM6IHRydWUsXG4gIHByb3BUeXBlczogdHJ1ZSxcbiAgdHlwZTogdHJ1ZVxufTtcbnZhciBLTk9XTl9TVEFUSUNTID0ge1xuICBuYW1lOiB0cnVlLFxuICBsZW5ndGg6IHRydWUsXG4gIHByb3RvdHlwZTogdHJ1ZSxcbiAgY2FsbGVyOiB0cnVlLFxuICBjYWxsZWU6IHRydWUsXG4gIGFyZ3VtZW50czogdHJ1ZSxcbiAgYXJpdHk6IHRydWVcbn07XG52YXIgRk9SV0FSRF9SRUZfU1RBVElDUyA9IHtcbiAgJyQkdHlwZW9mJzogdHJ1ZSxcbiAgcmVuZGVyOiB0cnVlLFxuICBkZWZhdWx0UHJvcHM6IHRydWUsXG4gIGRpc3BsYXlOYW1lOiB0cnVlLFxuICBwcm9wVHlwZXM6IHRydWVcbn07XG52YXIgTUVNT19TVEFUSUNTID0ge1xuICAnJCR0eXBlb2YnOiB0cnVlLFxuICBjb21wYXJlOiB0cnVlLFxuICBkZWZhdWx0UHJvcHM6IHRydWUsXG4gIGRpc3BsYXlOYW1lOiB0cnVlLFxuICBwcm9wVHlwZXM6IHRydWUsXG4gIHR5cGU6IHRydWVcbn07XG52YXIgVFlQRV9TVEFUSUNTID0ge307XG5UWVBFX1NUQVRJQ1NbcmVhY3RJcy5Gb3J3YXJkUmVmXSA9IEZPUldBUkRfUkVGX1NUQVRJQ1M7XG5UWVBFX1NUQVRJQ1NbcmVhY3RJcy5NZW1vXSA9IE1FTU9fU1RBVElDUztcblxuZnVuY3Rpb24gZ2V0U3RhdGljcyhjb21wb25lbnQpIHtcbiAgLy8gUmVhY3QgdjE2LjExIGFuZCBiZWxvd1xuICBpZiAocmVhY3RJcy5pc01lbW8oY29tcG9uZW50KSkge1xuICAgIHJldHVybiBNRU1PX1NUQVRJQ1M7XG4gIH0gLy8gUmVhY3QgdjE2LjEyIGFuZCBhYm92ZVxuXG5cbiAgcmV0dXJuIFRZUEVfU1RBVElDU1tjb21wb25lbnRbJyQkdHlwZW9mJ11dIHx8IFJFQUNUX1NUQVRJQ1M7XG59XG5cbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIGdldFByb3RvdHlwZU9mID0gT2JqZWN0LmdldFByb3RvdHlwZU9mO1xudmFyIG9iamVjdFByb3RvdHlwZSA9IE9iamVjdC5wcm90b3R5cGU7XG5mdW5jdGlvbiBob2lzdE5vblJlYWN0U3RhdGljcyh0YXJnZXRDb21wb25lbnQsIHNvdXJjZUNvbXBvbmVudCwgYmxhY2tsaXN0KSB7XG4gIGlmICh0eXBlb2Ygc291cmNlQ29tcG9uZW50ICE9PSAnc3RyaW5nJykge1xuICAgIC8vIGRvbid0IGhvaXN0IG92ZXIgc3RyaW5nIChodG1sKSBjb21wb25lbnRzXG4gICAgaWYgKG9iamVjdFByb3RvdHlwZSkge1xuICAgICAgdmFyIGluaGVyaXRlZENvbXBvbmVudCA9IGdldFByb3RvdHlwZU9mKHNvdXJjZUNvbXBvbmVudCk7XG5cbiAgICAgIGlmIChpbmhlcml0ZWRDb21wb25lbnQgJiYgaW5oZXJpdGVkQ29tcG9uZW50ICE9PSBvYmplY3RQcm90b3R5cGUpIHtcbiAgICAgICAgaG9pc3ROb25SZWFjdFN0YXRpY3ModGFyZ2V0Q29tcG9uZW50LCBpbmhlcml0ZWRDb21wb25lbnQsIGJsYWNrbGlzdCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzKHNvdXJjZUNvbXBvbmVudCk7XG5cbiAgICBpZiAoZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgICBrZXlzID0ga2V5cy5jb25jYXQoZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZUNvbXBvbmVudCkpO1xuICAgIH1cblxuICAgIHZhciB0YXJnZXRTdGF0aWNzID0gZ2V0U3RhdGljcyh0YXJnZXRDb21wb25lbnQpO1xuICAgIHZhciBzb3VyY2VTdGF0aWNzID0gZ2V0U3RhdGljcyhzb3VyY2VDb21wb25lbnQpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXTtcblxuICAgICAgaWYgKCFLTk9XTl9TVEFUSUNTW2tleV0gJiYgIShibGFja2xpc3QgJiYgYmxhY2tsaXN0W2tleV0pICYmICEoc291cmNlU3RhdGljcyAmJiBzb3VyY2VTdGF0aWNzW2tleV0pICYmICEodGFyZ2V0U3RhdGljcyAmJiB0YXJnZXRTdGF0aWNzW2tleV0pKSB7XG4gICAgICAgIHZhciBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZUNvbXBvbmVudCwga2V5KTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIEF2b2lkIGZhaWx1cmVzIGZyb20gcmVhZC1vbmx5IHByb3BlcnRpZXNcbiAgICAgICAgICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXRDb21wb25lbnQsIGtleSwgZGVzY3JpcHRvcik7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldENvbXBvbmVudDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBob2lzdE5vblJlYWN0U3RhdGljcztcbiIsICIvKipcbiAqIGNocm9tYS5qcyAtIEphdmFTY3JpcHQgbGlicmFyeSBmb3IgY29sb3IgY29udmVyc2lvbnNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTEtMjAxOSwgR3JlZ29yIEFpc2NoXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG4gKlxuICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gKiBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAqXG4gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsXG4gKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uXG4gKiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cbiAqXG4gKiAzLiBUaGUgbmFtZSBHcmVnb3IgQWlzY2ggbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0c1xuICogZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG4gKlxuICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCJcbiAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEVcbiAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxuICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgR1JFR09SIEFJU0NIIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsXG4gKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORyxcbiAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsXG4gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZXG4gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElOR1xuICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLFxuICogRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKlxuICogY2hyb21hLmpzIGluY2x1ZGVzIGNvbG9ycyBmcm9tIGNvbG9yYnJld2VyMi5vcmcsIHdoaWNoIGFyZSByZWxlYXNlZCB1bmRlclxuICogdGhlIGZvbGxvd2luZyBsaWNlbnNlOlxuICpcbiAqIENvcHlyaWdodCAoYykgMjAwMiBDeW50aGlhIEJyZXdlciwgTWFyayBIYXJyb3dlcixcbiAqIGFuZCBUaGUgUGVubnN5bHZhbmlhIFN0YXRlIFVuaXZlcnNpdHkuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLFxuICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW5cbiAqIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsXG4gKiBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpY1xuICogbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqXG4gKiBOYW1lZCBjb2xvcnMgYXJlIHRha2VuIGZyb20gWDExIENvbG9yIE5hbWVzLlxuICogaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1jb2xvci8jc3ZnLWNvbG9yXG4gKlxuICogQHByZXNlcnZlXG4gKi9cblxuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKSA6XG4gICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKGZhY3RvcnkpIDpcbiAgICAoZ2xvYmFsID0gdHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsVGhpcyA6IGdsb2JhbCB8fCBzZWxmLCBnbG9iYWwuY2hyb21hID0gZmFjdG9yeSgpKTtcbn0pKHRoaXMsIChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIHZhciBsaW1pdCQyID0gZnVuY3Rpb24gKHgsIG1pbiwgbWF4KSB7XG4gICAgICAgIGlmICggbWluID09PSB2b2lkIDAgKSBtaW49MDtcbiAgICAgICAgaWYgKCBtYXggPT09IHZvaWQgMCApIG1heD0xO1xuXG4gICAgICAgIHJldHVybiB4IDwgbWluID8gbWluIDogeCA+IG1heCA/IG1heCA6IHg7XG4gICAgfTtcblxuICAgIHZhciBsaW1pdCQxID0gbGltaXQkMjtcblxuICAgIHZhciBjbGlwX3JnYiQzID0gZnVuY3Rpb24gKHJnYikge1xuICAgICAgICByZ2IuX2NsaXBwZWQgPSBmYWxzZTtcbiAgICAgICAgcmdiLl91bmNsaXBwZWQgPSByZ2Iuc2xpY2UoMCk7XG4gICAgICAgIGZvciAodmFyIGk9MDsgaTw9MzsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoaSA8IDMpIHtcbiAgICAgICAgICAgICAgICBpZiAocmdiW2ldIDwgMCB8fCByZ2JbaV0gPiAyNTUpIHsgcmdiLl9jbGlwcGVkID0gdHJ1ZTsgfVxuICAgICAgICAgICAgICAgIHJnYltpXSA9IGxpbWl0JDEocmdiW2ldLCAwLCAyNTUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpID09PSAzKSB7XG4gICAgICAgICAgICAgICAgcmdiW2ldID0gbGltaXQkMShyZ2JbaV0sIDAsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZ2I7XG4gICAgfTtcblxuICAgIC8vIHBvcnRlZCBmcm9tIGpRdWVyeSdzICQudHlwZVxuICAgIHZhciBjbGFzc1RvVHlwZSA9IHt9O1xuICAgIGZvciAodmFyIGkkMSA9IDAsIGxpc3QkMSA9IFsnQm9vbGVhbicsICdOdW1iZXInLCAnU3RyaW5nJywgJ0Z1bmN0aW9uJywgJ0FycmF5JywgJ0RhdGUnLCAnUmVnRXhwJywgJ1VuZGVmaW5lZCcsICdOdWxsJ107IGkkMSA8IGxpc3QkMS5sZW5ndGg7IGkkMSArPSAxKSB7XG4gICAgICAgIHZhciBuYW1lID0gbGlzdCQxW2kkMV07XG5cbiAgICAgICAgY2xhc3NUb1R5cGVbKFwiW29iamVjdCBcIiArIG5hbWUgKyBcIl1cIildID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cbiAgICB2YXIgdHlwZSRwID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgICAgIHJldHVybiBjbGFzc1RvVHlwZVtPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKV0gfHwgXCJvYmplY3RcIjtcbiAgICB9O1xuXG4gICAgdmFyIHR5cGUkbyA9IHR5cGUkcDtcblxuICAgIHZhciB1bnBhY2skQiA9IGZ1bmN0aW9uIChhcmdzLCBrZXlPcmRlcikge1xuICAgICAgICBpZiAoIGtleU9yZGVyID09PSB2b2lkIDAgKSBrZXlPcmRlcj1udWxsO1xuXG4gICAgXHQvLyBpZiBjYWxsZWQgd2l0aCBtb3JlIHRoYW4gMyBhcmd1bWVudHMsIHdlIHJldHVybiB0aGUgYXJndW1lbnRzXG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA+PSAzKSB7IHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmdzKTsgfVxuICAgICAgICAvLyB3aXRoIGxlc3MgdGhhbiAzIGFyZ3Mgd2UgY2hlY2sgaWYgZmlyc3QgYXJnIGlzIG9iamVjdFxuICAgICAgICAvLyBhbmQgdXNlIHRoZSBrZXlPcmRlciBzdHJpbmcgdG8gZXh0cmFjdCBhbmQgc29ydCBwcm9wZXJ0aWVzXG4gICAgXHRpZiAodHlwZSRvKGFyZ3NbMF0pID09ICdvYmplY3QnICYmIGtleU9yZGVyKSB7XG4gICAgXHRcdHJldHVybiBrZXlPcmRlci5zcGxpdCgnJylcbiAgICBcdFx0XHQuZmlsdGVyKGZ1bmN0aW9uIChrKSB7IHJldHVybiBhcmdzWzBdW2tdICE9PSB1bmRlZmluZWQ7IH0pXG4gICAgXHRcdFx0Lm1hcChmdW5jdGlvbiAoaykgeyByZXR1cm4gYXJnc1swXVtrXTsgfSk7XG4gICAgXHR9XG4gICAgXHQvLyBvdGhlcndpc2Ugd2UganVzdCByZXR1cm4gdGhlIGZpcnN0IGFyZ3VtZW50XG4gICAgXHQvLyAod2hpY2ggd2Ugc3VwcG9zZSBpcyBhbiBhcnJheSBvZiBhcmdzKVxuICAgICAgICByZXR1cm4gYXJnc1swXTtcbiAgICB9O1xuXG4gICAgdmFyIHR5cGUkbiA9IHR5cGUkcDtcblxuICAgIHZhciBsYXN0JDQgPSBmdW5jdGlvbiAoYXJncykge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggPCAyKSB7IHJldHVybiBudWxsOyB9XG4gICAgICAgIHZhciBsID0gYXJncy5sZW5ndGgtMTtcbiAgICAgICAgaWYgKHR5cGUkbihhcmdzW2xdKSA9PSAnc3RyaW5nJykgeyByZXR1cm4gYXJnc1tsXS50b0xvd2VyQ2FzZSgpOyB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG5cbiAgICB2YXIgUEkkMiA9IE1hdGguUEk7XG5cbiAgICB2YXIgdXRpbHMgPSB7XG4gICAgXHRjbGlwX3JnYjogY2xpcF9yZ2IkMyxcbiAgICBcdGxpbWl0OiBsaW1pdCQyLFxuICAgIFx0dHlwZTogdHlwZSRwLFxuICAgIFx0dW5wYWNrOiB1bnBhY2skQixcbiAgICBcdGxhc3Q6IGxhc3QkNCxcbiAgICBcdFBJOiBQSSQyLFxuICAgIFx0VFdPUEk6IFBJJDIqMixcbiAgICBcdFBJVEhJUkQ6IFBJJDIvMyxcbiAgICBcdERFRzJSQUQ6IFBJJDIgLyAxODAsXG4gICAgXHRSQUQyREVHOiAxODAgLyBQSSQyXG4gICAgfTtcblxuICAgIHZhciBpbnB1dCRoID0ge1xuICAgIFx0Zm9ybWF0OiB7fSxcbiAgICBcdGF1dG9kZXRlY3Q6IFtdXG4gICAgfTtcblxuICAgIHZhciBsYXN0JDMgPSB1dGlscy5sYXN0O1xuICAgIHZhciBjbGlwX3JnYiQyID0gdXRpbHMuY2xpcF9yZ2I7XG4gICAgdmFyIHR5cGUkbSA9IHV0aWxzLnR5cGU7XG4gICAgdmFyIF9pbnB1dCA9IGlucHV0JGg7XG5cbiAgICB2YXIgQ29sb3IkRCA9IGZ1bmN0aW9uIENvbG9yKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHZhciBtZSA9IHRoaXM7XG4gICAgICAgIGlmICh0eXBlJG0oYXJnc1swXSkgPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgICBhcmdzWzBdLmNvbnN0cnVjdG9yICYmXG4gICAgICAgICAgICBhcmdzWzBdLmNvbnN0cnVjdG9yID09PSB0aGlzLmNvbnN0cnVjdG9yKSB7XG4gICAgICAgICAgICAvLyB0aGUgYXJndW1lbnQgaXMgYWxyZWFkeSBhIENvbG9yIGluc3RhbmNlXG4gICAgICAgICAgICByZXR1cm4gYXJnc1swXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGxhc3QgYXJndW1lbnQgY291bGQgYmUgdGhlIG1vZGVcbiAgICAgICAgdmFyIG1vZGUgPSBsYXN0JDMoYXJncyk7XG4gICAgICAgIHZhciBhdXRvZGV0ZWN0ID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKCFtb2RlKSB7XG4gICAgICAgICAgICBhdXRvZGV0ZWN0ID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghX2lucHV0LnNvcnRlZCkge1xuICAgICAgICAgICAgICAgIF9pbnB1dC5hdXRvZGV0ZWN0ID0gX2lucHV0LmF1dG9kZXRlY3Quc29ydChmdW5jdGlvbiAoYSxiKSB7IHJldHVybiBiLnAgLSBhLnA7IH0pO1xuICAgICAgICAgICAgICAgIF9pbnB1dC5zb3J0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gYXV0by1kZXRlY3QgZm9ybWF0XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGlzdCA9IF9pbnB1dC5hdXRvZGV0ZWN0OyBpIDwgbGlzdC5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgIHZhciBjaGsgPSBsaXN0W2ldO1xuXG4gICAgICAgICAgICAgICAgbW9kZSA9IGNoay50ZXN0LmFwcGx5KGNoaywgYXJncyk7XG4gICAgICAgICAgICAgICAgaWYgKG1vZGUpIHsgYnJlYWs7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChfaW5wdXQuZm9ybWF0W21vZGVdKSB7XG4gICAgICAgICAgICB2YXIgcmdiID0gX2lucHV0LmZvcm1hdFttb2RlXS5hcHBseShudWxsLCBhdXRvZGV0ZWN0ID8gYXJncyA6IGFyZ3Muc2xpY2UoMCwtMSkpO1xuICAgICAgICAgICAgbWUuX3JnYiA9IGNsaXBfcmdiJDIocmdiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93biBmb3JtYXQ6ICcrYXJncyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBhZGQgYWxwaGEgY2hhbm5lbFxuICAgICAgICBpZiAobWUuX3JnYi5sZW5ndGggPT09IDMpIHsgbWUuX3JnYi5wdXNoKDEpOyB9XG4gICAgfTtcblxuICAgIENvbG9yJEQucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcgKCkge1xuICAgICAgICBpZiAodHlwZSRtKHRoaXMuaGV4KSA9PSAnZnVuY3Rpb24nKSB7IHJldHVybiB0aGlzLmhleCgpOyB9XG4gICAgICAgIHJldHVybiAoXCJbXCIgKyAodGhpcy5fcmdiLmpvaW4oJywnKSkgKyBcIl1cIik7XG4gICAgfTtcblxuICAgIHZhciBDb2xvcl8xID0gQ29sb3IkRDtcblxuICAgIHZhciBjaHJvbWEkayA9IGZ1bmN0aW9uICgpIHtcbiAgICBcdHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgXHR3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgXHRyZXR1cm4gbmV3IChGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5hcHBseSggY2hyb21hJGsuQ29sb3IsIFsgbnVsbCBdLmNvbmNhdCggYXJncykgKSk7XG4gICAgfTtcblxuICAgIGNocm9tYSRrLkNvbG9yID0gQ29sb3JfMTtcbiAgICBjaHJvbWEkay52ZXJzaW9uID0gJzIuNC4yJztcblxuICAgIHZhciBjaHJvbWFfMSA9IGNocm9tYSRrO1xuXG4gICAgdmFyIHVucGFjayRBID0gdXRpbHMudW5wYWNrO1xuICAgIHZhciBtYXgkMiA9IE1hdGgubWF4O1xuXG4gICAgdmFyIHJnYjJjbXlrJDEgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgdmFyIHJlZiA9IHVucGFjayRBKGFyZ3MsICdyZ2InKTtcbiAgICAgICAgdmFyIHIgPSByZWZbMF07XG4gICAgICAgIHZhciBnID0gcmVmWzFdO1xuICAgICAgICB2YXIgYiA9IHJlZlsyXTtcbiAgICAgICAgciA9IHIgLyAyNTU7XG4gICAgICAgIGcgPSBnIC8gMjU1O1xuICAgICAgICBiID0gYiAvIDI1NTtcbiAgICAgICAgdmFyIGsgPSAxIC0gbWF4JDIocixtYXgkMihnLGIpKTtcbiAgICAgICAgdmFyIGYgPSBrIDwgMSA/IDEgLyAoMS1rKSA6IDA7XG4gICAgICAgIHZhciBjID0gKDEtci1rKSAqIGY7XG4gICAgICAgIHZhciBtID0gKDEtZy1rKSAqIGY7XG4gICAgICAgIHZhciB5ID0gKDEtYi1rKSAqIGY7XG4gICAgICAgIHJldHVybiBbYyxtLHksa107XG4gICAgfTtcblxuICAgIHZhciByZ2IyY215a18xID0gcmdiMmNteWskMTtcblxuICAgIHZhciB1bnBhY2skeiA9IHV0aWxzLnVucGFjaztcblxuICAgIHZhciBjbXlrMnJnYiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICBhcmdzID0gdW5wYWNrJHooYXJncywgJ2NteWsnKTtcbiAgICAgICAgdmFyIGMgPSBhcmdzWzBdO1xuICAgICAgICB2YXIgbSA9IGFyZ3NbMV07XG4gICAgICAgIHZhciB5ID0gYXJnc1syXTtcbiAgICAgICAgdmFyIGsgPSBhcmdzWzNdO1xuICAgICAgICB2YXIgYWxwaGEgPSBhcmdzLmxlbmd0aCA+IDQgPyBhcmdzWzRdIDogMTtcbiAgICAgICAgaWYgKGsgPT09IDEpIHsgcmV0dXJuIFswLDAsMCxhbHBoYV07IH1cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIGMgPj0gMSA/IDAgOiAyNTUgKiAoMS1jKSAqICgxLWspLCAvLyByXG4gICAgICAgICAgICBtID49IDEgPyAwIDogMjU1ICogKDEtbSkgKiAoMS1rKSwgLy8gZ1xuICAgICAgICAgICAgeSA+PSAxID8gMCA6IDI1NSAqICgxLXkpICogKDEtayksIC8vIGJcbiAgICAgICAgICAgIGFscGhhXG4gICAgICAgIF07XG4gICAgfTtcblxuICAgIHZhciBjbXlrMnJnYl8xID0gY215azJyZ2I7XG5cbiAgICB2YXIgY2hyb21hJGogPSBjaHJvbWFfMTtcbiAgICB2YXIgQ29sb3IkQyA9IENvbG9yXzE7XG4gICAgdmFyIGlucHV0JGcgPSBpbnB1dCRoO1xuICAgIHZhciB1bnBhY2skeSA9IHV0aWxzLnVucGFjaztcbiAgICB2YXIgdHlwZSRsID0gdXRpbHMudHlwZTtcblxuICAgIHZhciByZ2IyY215ayA9IHJnYjJjbXlrXzE7XG5cbiAgICBDb2xvciRDLnByb3RvdHlwZS5jbXlrID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiByZ2IyY215ayh0aGlzLl9yZ2IpO1xuICAgIH07XG5cbiAgICBjaHJvbWEkai5jbXlrID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHJldHVybiBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KCBDb2xvciRDLCBbIG51bGwgXS5jb25jYXQoIGFyZ3MsIFsnY215ayddKSApKTtcbiAgICB9O1xuXG4gICAgaW5wdXQkZy5mb3JtYXQuY215ayA9IGNteWsycmdiXzE7XG5cbiAgICBpbnB1dCRnLmF1dG9kZXRlY3QucHVzaCh7XG4gICAgICAgIHA6IDIsXG4gICAgICAgIHRlc3Q6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgICAgICBhcmdzID0gdW5wYWNrJHkoYXJncywgJ2NteWsnKTtcbiAgICAgICAgICAgIGlmICh0eXBlJGwoYXJncykgPT09ICdhcnJheScgJiYgYXJncy5sZW5ndGggPT09IDQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2NteWsnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICB2YXIgdW5wYWNrJHggPSB1dGlscy51bnBhY2s7XG4gICAgdmFyIGxhc3QkMiA9IHV0aWxzLmxhc3Q7XG4gICAgdmFyIHJuZCA9IGZ1bmN0aW9uIChhKSB7IHJldHVybiBNYXRoLnJvdW5kKGEqMTAwKS8xMDA7IH07XG5cbiAgICAvKlxuICAgICAqIHN1cHBvcnRlZCBhcmd1bWVudHM6XG4gICAgICogLSBoc2wyY3NzKGgscyxsKVxuICAgICAqIC0gaHNsMmNzcyhoLHMsbCxhKVxuICAgICAqIC0gaHNsMmNzcyhbaCxzLGxdLCBtb2RlKVxuICAgICAqIC0gaHNsMmNzcyhbaCxzLGwsYV0sIG1vZGUpXG4gICAgICogLSBoc2wyY3NzKHtoLHMsbCxhfSwgbW9kZSlcbiAgICAgKi9cbiAgICB2YXIgaHNsMmNzcyQxID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHZhciBoc2xhID0gdW5wYWNrJHgoYXJncywgJ2hzbGEnKTtcbiAgICAgICAgdmFyIG1vZGUgPSBsYXN0JDIoYXJncykgfHwgJ2xzYSc7XG4gICAgICAgIGhzbGFbMF0gPSBybmQoaHNsYVswXSB8fCAwKTtcbiAgICAgICAgaHNsYVsxXSA9IHJuZChoc2xhWzFdKjEwMCkgKyAnJSc7XG4gICAgICAgIGhzbGFbMl0gPSBybmQoaHNsYVsyXSoxMDApICsgJyUnO1xuICAgICAgICBpZiAobW9kZSA9PT0gJ2hzbGEnIHx8IChoc2xhLmxlbmd0aCA+IDMgJiYgaHNsYVszXTwxKSkge1xuICAgICAgICAgICAgaHNsYVszXSA9IGhzbGEubGVuZ3RoID4gMyA/IGhzbGFbM10gOiAxO1xuICAgICAgICAgICAgbW9kZSA9ICdoc2xhJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGhzbGEubGVuZ3RoID0gMztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKG1vZGUgKyBcIihcIiArIChoc2xhLmpvaW4oJywnKSkgKyBcIilcIik7XG4gICAgfTtcblxuICAgIHZhciBoc2wyY3NzXzEgPSBoc2wyY3NzJDE7XG5cbiAgICB2YXIgdW5wYWNrJHcgPSB1dGlscy51bnBhY2s7XG5cbiAgICAvKlxuICAgICAqIHN1cHBvcnRlZCBhcmd1bWVudHM6XG4gICAgICogLSByZ2IyaHNsKHIsZyxiKVxuICAgICAqIC0gcmdiMmhzbChyLGcsYixhKVxuICAgICAqIC0gcmdiMmhzbChbcixnLGJdKVxuICAgICAqIC0gcmdiMmhzbChbcixnLGIsYV0pXG4gICAgICogLSByZ2IyaHNsKHtyLGcsYixhfSlcbiAgICAgKi9cbiAgICB2YXIgcmdiMmhzbCQzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIGFyZ3MgPSB1bnBhY2skdyhhcmdzLCAncmdiYScpO1xuICAgICAgICB2YXIgciA9IGFyZ3NbMF07XG4gICAgICAgIHZhciBnID0gYXJnc1sxXTtcbiAgICAgICAgdmFyIGIgPSBhcmdzWzJdO1xuXG4gICAgICAgIHIgLz0gMjU1O1xuICAgICAgICBnIC89IDI1NTtcbiAgICAgICAgYiAvPSAyNTU7XG5cbiAgICAgICAgdmFyIG1pbiA9IE1hdGgubWluKHIsIGcsIGIpO1xuICAgICAgICB2YXIgbWF4ID0gTWF0aC5tYXgociwgZywgYik7XG5cbiAgICAgICAgdmFyIGwgPSAobWF4ICsgbWluKSAvIDI7XG4gICAgICAgIHZhciBzLCBoO1xuXG4gICAgICAgIGlmIChtYXggPT09IG1pbil7XG4gICAgICAgICAgICBzID0gMDtcbiAgICAgICAgICAgIGggPSBOdW1iZXIuTmFOO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcyA9IGwgPCAwLjUgPyAobWF4IC0gbWluKSAvIChtYXggKyBtaW4pIDogKG1heCAtIG1pbikgLyAoMiAtIG1heCAtIG1pbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAociA9PSBtYXgpIHsgaCA9IChnIC0gYikgLyAobWF4IC0gbWluKTsgfVxuICAgICAgICBlbHNlIGlmIChnID09IG1heCkgeyBoID0gMiArIChiIC0gcikgLyAobWF4IC0gbWluKTsgfVxuICAgICAgICBlbHNlIGlmIChiID09IG1heCkgeyBoID0gNCArIChyIC0gZykgLyAobWF4IC0gbWluKTsgfVxuXG4gICAgICAgIGggKj0gNjA7XG4gICAgICAgIGlmIChoIDwgMCkgeyBoICs9IDM2MDsgfVxuICAgICAgICBpZiAoYXJncy5sZW5ndGg+MyAmJiBhcmdzWzNdIT09dW5kZWZpbmVkKSB7IHJldHVybiBbaCxzLGwsYXJnc1szXV07IH1cbiAgICAgICAgcmV0dXJuIFtoLHMsbF07XG4gICAgfTtcblxuICAgIHZhciByZ2IyaHNsXzEgPSByZ2IyaHNsJDM7XG5cbiAgICB2YXIgdW5wYWNrJHYgPSB1dGlscy51bnBhY2s7XG4gICAgdmFyIGxhc3QkMSA9IHV0aWxzLmxhc3Q7XG4gICAgdmFyIGhzbDJjc3MgPSBoc2wyY3NzXzE7XG4gICAgdmFyIHJnYjJoc2wkMiA9IHJnYjJoc2xfMTtcbiAgICB2YXIgcm91bmQkNiA9IE1hdGgucm91bmQ7XG5cbiAgICAvKlxuICAgICAqIHN1cHBvcnRlZCBhcmd1bWVudHM6XG4gICAgICogLSByZ2IyY3NzKHIsZyxiKVxuICAgICAqIC0gcmdiMmNzcyhyLGcsYixhKVxuICAgICAqIC0gcmdiMmNzcyhbcixnLGJdLCBtb2RlKVxuICAgICAqIC0gcmdiMmNzcyhbcixnLGIsYV0sIG1vZGUpXG4gICAgICogLSByZ2IyY3NzKHtyLGcsYixhfSwgbW9kZSlcbiAgICAgKi9cbiAgICB2YXIgcmdiMmNzcyQxID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHZhciByZ2JhID0gdW5wYWNrJHYoYXJncywgJ3JnYmEnKTtcbiAgICAgICAgdmFyIG1vZGUgPSBsYXN0JDEoYXJncykgfHwgJ3JnYic7XG4gICAgICAgIGlmIChtb2RlLnN1YnN0cigwLDMpID09ICdoc2wnKSB7XG4gICAgICAgICAgICByZXR1cm4gaHNsMmNzcyhyZ2IyaHNsJDIocmdiYSksIG1vZGUpO1xuICAgICAgICB9XG4gICAgICAgIHJnYmFbMF0gPSByb3VuZCQ2KHJnYmFbMF0pO1xuICAgICAgICByZ2JhWzFdID0gcm91bmQkNihyZ2JhWzFdKTtcbiAgICAgICAgcmdiYVsyXSA9IHJvdW5kJDYocmdiYVsyXSk7XG4gICAgICAgIGlmIChtb2RlID09PSAncmdiYScgfHwgKHJnYmEubGVuZ3RoID4gMyAmJiByZ2JhWzNdPDEpKSB7XG4gICAgICAgICAgICByZ2JhWzNdID0gcmdiYS5sZW5ndGggPiAzID8gcmdiYVszXSA6IDE7XG4gICAgICAgICAgICBtb2RlID0gJ3JnYmEnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAobW9kZSArIFwiKFwiICsgKHJnYmEuc2xpY2UoMCxtb2RlPT09J3JnYic/Mzo0KS5qb2luKCcsJykpICsgXCIpXCIpO1xuICAgIH07XG5cbiAgICB2YXIgcmdiMmNzc18xID0gcmdiMmNzcyQxO1xuXG4gICAgdmFyIHVucGFjayR1ID0gdXRpbHMudW5wYWNrO1xuICAgIHZhciByb3VuZCQ1ID0gTWF0aC5yb3VuZDtcblxuICAgIHZhciBoc2wycmdiJDEgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhc3NpZ247XG5cbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcbiAgICAgICAgYXJncyA9IHVucGFjayR1KGFyZ3MsICdoc2wnKTtcbiAgICAgICAgdmFyIGggPSBhcmdzWzBdO1xuICAgICAgICB2YXIgcyA9IGFyZ3NbMV07XG4gICAgICAgIHZhciBsID0gYXJnc1syXTtcbiAgICAgICAgdmFyIHIsZyxiO1xuICAgICAgICBpZiAocyA9PT0gMCkge1xuICAgICAgICAgICAgciA9IGcgPSBiID0gbCoyNTU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgdDMgPSBbMCwwLDBdO1xuICAgICAgICAgICAgdmFyIGMgPSBbMCwwLDBdO1xuICAgICAgICAgICAgdmFyIHQyID0gbCA8IDAuNSA/IGwgKiAoMStzKSA6IGwrcy1sKnM7XG4gICAgICAgICAgICB2YXIgdDEgPSAyICogbCAtIHQyO1xuICAgICAgICAgICAgdmFyIGhfID0gaCAvIDM2MDtcbiAgICAgICAgICAgIHQzWzBdID0gaF8gKyAxLzM7XG4gICAgICAgICAgICB0M1sxXSA9IGhfO1xuICAgICAgICAgICAgdDNbMl0gPSBoXyAtIDEvMztcbiAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaTwzOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAodDNbaV0gPCAwKSB7IHQzW2ldICs9IDE7IH1cbiAgICAgICAgICAgICAgICBpZiAodDNbaV0gPiAxKSB7IHQzW2ldIC09IDE7IH1cbiAgICAgICAgICAgICAgICBpZiAoNiAqIHQzW2ldIDwgMSlcbiAgICAgICAgICAgICAgICAgICAgeyBjW2ldID0gdDEgKyAodDIgLSB0MSkgKiA2ICogdDNbaV07IH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICgyICogdDNbaV0gPCAxKVxuICAgICAgICAgICAgICAgICAgICB7IGNbaV0gPSB0MjsgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKDMgKiB0M1tpXSA8IDIpXG4gICAgICAgICAgICAgICAgICAgIHsgY1tpXSA9IHQxICsgKHQyIC0gdDEpICogKCgyIC8gMykgLSB0M1tpXSkgKiA2OyB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB7IGNbaV0gPSB0MTsgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgKGFzc2lnbiA9IFtyb3VuZCQ1KGNbMF0qMjU1KSxyb3VuZCQ1KGNbMV0qMjU1KSxyb3VuZCQ1KGNbMl0qMjU1KV0sIHIgPSBhc3NpZ25bMF0sIGcgPSBhc3NpZ25bMV0sIGIgPSBhc3NpZ25bMl0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA+IDMpIHtcbiAgICAgICAgICAgIC8vIGtlZXAgYWxwaGEgY2hhbm5lbFxuICAgICAgICAgICAgcmV0dXJuIFtyLGcsYixhcmdzWzNdXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW3IsZyxiLDFdO1xuICAgIH07XG5cbiAgICB2YXIgaHNsMnJnYl8xID0gaHNsMnJnYiQxO1xuXG4gICAgdmFyIGhzbDJyZ2IgPSBoc2wycmdiXzE7XG4gICAgdmFyIGlucHV0JGYgPSBpbnB1dCRoO1xuXG4gICAgdmFyIFJFX1JHQiA9IC9ecmdiXFwoXFxzKigtP1xcZCspLFxccyooLT9cXGQrKVxccyosXFxzKigtP1xcZCspXFxzKlxcKSQvO1xuICAgIHZhciBSRV9SR0JBID0gL15yZ2JhXFwoXFxzKigtP1xcZCspLFxccyooLT9cXGQrKVxccyosXFxzKigtP1xcZCspXFxzKixcXHMqKFswMV18WzAxXT9cXC5cXGQrKVxcKSQvO1xuICAgIHZhciBSRV9SR0JfUENUID0gL15yZ2JcXChcXHMqKC0/XFxkKyg/OlxcLlxcZCspPyklLFxccyooLT9cXGQrKD86XFwuXFxkKyk/KSVcXHMqLFxccyooLT9cXGQrKD86XFwuXFxkKyk/KSVcXHMqXFwpJC87XG4gICAgdmFyIFJFX1JHQkFfUENUID0gL15yZ2JhXFwoXFxzKigtP1xcZCsoPzpcXC5cXGQrKT8pJSxcXHMqKC0/XFxkKyg/OlxcLlxcZCspPyklXFxzKixcXHMqKC0/XFxkKyg/OlxcLlxcZCspPyklXFxzKixcXHMqKFswMV18WzAxXT9cXC5cXGQrKVxcKSQvO1xuICAgIHZhciBSRV9IU0wgPSAvXmhzbFxcKFxccyooLT9cXGQrKD86XFwuXFxkKyk/KSxcXHMqKC0/XFxkKyg/OlxcLlxcZCspPyklXFxzKixcXHMqKC0/XFxkKyg/OlxcLlxcZCspPyklXFxzKlxcKSQvO1xuICAgIHZhciBSRV9IU0xBID0gL15oc2xhXFwoXFxzKigtP1xcZCsoPzpcXC5cXGQrKT8pLFxccyooLT9cXGQrKD86XFwuXFxkKyk/KSVcXHMqLFxccyooLT9cXGQrKD86XFwuXFxkKyk/KSVcXHMqLFxccyooWzAxXXxbMDFdP1xcLlxcZCspXFwpJC87XG5cbiAgICB2YXIgcm91bmQkNCA9IE1hdGgucm91bmQ7XG5cbiAgICB2YXIgY3NzMnJnYiQxID0gZnVuY3Rpb24gKGNzcykge1xuICAgICAgICBjc3MgPSBjc3MudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgICAgIHZhciBtO1xuXG4gICAgICAgIGlmIChpbnB1dCRmLmZvcm1hdC5uYW1lZCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5wdXQkZi5mb3JtYXQubmFtZWQoY3NzKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHJnYigyNTAsMjAsMClcbiAgICAgICAgaWYgKChtID0gY3NzLm1hdGNoKFJFX1JHQikpKSB7XG4gICAgICAgICAgICB2YXIgcmdiID0gbS5zbGljZSgxLDQpO1xuICAgICAgICAgICAgZm9yICh2YXIgaT0wOyBpPDM7IGkrKykge1xuICAgICAgICAgICAgICAgIHJnYltpXSA9ICtyZ2JbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZ2JbM10gPSAxOyAgLy8gZGVmYXVsdCBhbHBoYVxuICAgICAgICAgICAgcmV0dXJuIHJnYjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHJnYmEoMjUwLDIwLDAsMC40KVxuICAgICAgICBpZiAoKG0gPSBjc3MubWF0Y2goUkVfUkdCQSkpKSB7XG4gICAgICAgICAgICB2YXIgcmdiJDEgPSBtLnNsaWNlKDEsNSk7XG4gICAgICAgICAgICBmb3IgKHZhciBpJDE9MDsgaSQxPDQ7IGkkMSsrKSB7XG4gICAgICAgICAgICAgICAgcmdiJDFbaSQxXSA9ICtyZ2IkMVtpJDFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJnYiQxO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcmdiKDEwMCUsMCUsMCUpXG4gICAgICAgIGlmICgobSA9IGNzcy5tYXRjaChSRV9SR0JfUENUKSkpIHtcbiAgICAgICAgICAgIHZhciByZ2IkMiA9IG0uc2xpY2UoMSw0KTtcbiAgICAgICAgICAgIGZvciAodmFyIGkkMj0wOyBpJDI8MzsgaSQyKyspIHtcbiAgICAgICAgICAgICAgICByZ2IkMltpJDJdID0gcm91bmQkNChyZ2IkMltpJDJdICogMi41NSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZ2IkMlszXSA9IDE7ICAvLyBkZWZhdWx0IGFscGhhXG4gICAgICAgICAgICByZXR1cm4gcmdiJDI7XG4gICAgICAgIH1cblxuICAgICAgICAvLyByZ2JhKDEwMCUsMCUsMCUsMC40KVxuICAgICAgICBpZiAoKG0gPSBjc3MubWF0Y2goUkVfUkdCQV9QQ1QpKSkge1xuICAgICAgICAgICAgdmFyIHJnYiQzID0gbS5zbGljZSgxLDUpO1xuICAgICAgICAgICAgZm9yICh2YXIgaSQzPTA7IGkkMzwzOyBpJDMrKykge1xuICAgICAgICAgICAgICAgIHJnYiQzW2kkM10gPSByb3VuZCQ0KHJnYiQzW2kkM10gKiAyLjU1KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJnYiQzWzNdID0gK3JnYiQzWzNdO1xuICAgICAgICAgICAgcmV0dXJuIHJnYiQzO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaHNsKDAsMTAwJSw1MCUpXG4gICAgICAgIGlmICgobSA9IGNzcy5tYXRjaChSRV9IU0wpKSkge1xuICAgICAgICAgICAgdmFyIGhzbCA9IG0uc2xpY2UoMSw0KTtcbiAgICAgICAgICAgIGhzbFsxXSAqPSAwLjAxO1xuICAgICAgICAgICAgaHNsWzJdICo9IDAuMDE7XG4gICAgICAgICAgICB2YXIgcmdiJDQgPSBoc2wycmdiKGhzbCk7XG4gICAgICAgICAgICByZ2IkNFszXSA9IDE7XG4gICAgICAgICAgICByZXR1cm4gcmdiJDQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBoc2xhKDAsMTAwJSw1MCUsMC41KVxuICAgICAgICBpZiAoKG0gPSBjc3MubWF0Y2goUkVfSFNMQSkpKSB7XG4gICAgICAgICAgICB2YXIgaHNsJDEgPSBtLnNsaWNlKDEsNCk7XG4gICAgICAgICAgICBoc2wkMVsxXSAqPSAwLjAxO1xuICAgICAgICAgICAgaHNsJDFbMl0gKj0gMC4wMTtcbiAgICAgICAgICAgIHZhciByZ2IkNSA9IGhzbDJyZ2IoaHNsJDEpO1xuICAgICAgICAgICAgcmdiJDVbM10gPSArbVs0XTsgIC8vIGRlZmF1bHQgYWxwaGEgPSAxXG4gICAgICAgICAgICByZXR1cm4gcmdiJDU7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgY3NzMnJnYiQxLnRlc3QgPSBmdW5jdGlvbiAocykge1xuICAgICAgICByZXR1cm4gUkVfUkdCLnRlc3QocykgfHxcbiAgICAgICAgICAgIFJFX1JHQkEudGVzdChzKSB8fFxuICAgICAgICAgICAgUkVfUkdCX1BDVC50ZXN0KHMpIHx8XG4gICAgICAgICAgICBSRV9SR0JBX1BDVC50ZXN0KHMpIHx8XG4gICAgICAgICAgICBSRV9IU0wudGVzdChzKSB8fFxuICAgICAgICAgICAgUkVfSFNMQS50ZXN0KHMpO1xuICAgIH07XG5cbiAgICB2YXIgY3NzMnJnYl8xID0gY3NzMnJnYiQxO1xuXG4gICAgdmFyIGNocm9tYSRpID0gY2hyb21hXzE7XG4gICAgdmFyIENvbG9yJEIgPSBDb2xvcl8xO1xuICAgIHZhciBpbnB1dCRlID0gaW5wdXQkaDtcbiAgICB2YXIgdHlwZSRrID0gdXRpbHMudHlwZTtcblxuICAgIHZhciByZ2IyY3NzID0gcmdiMmNzc18xO1xuICAgIHZhciBjc3MycmdiID0gY3NzMnJnYl8xO1xuXG4gICAgQ29sb3IkQi5wcm90b3R5cGUuY3NzID0gZnVuY3Rpb24obW9kZSkge1xuICAgICAgICByZXR1cm4gcmdiMmNzcyh0aGlzLl9yZ2IsIG1vZGUpO1xuICAgIH07XG5cbiAgICBjaHJvbWEkaS5jc3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgcmV0dXJuIG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYXBwbHkoIENvbG9yJEIsIFsgbnVsbCBdLmNvbmNhdCggYXJncywgWydjc3MnXSkgKSk7XG4gICAgfTtcblxuICAgIGlucHV0JGUuZm9ybWF0LmNzcyA9IGNzczJyZ2I7XG5cbiAgICBpbnB1dCRlLmF1dG9kZXRlY3QucHVzaCh7XG4gICAgICAgIHA6IDUsXG4gICAgICAgIHRlc3Q6IGZ1bmN0aW9uIChoKSB7XG4gICAgICAgICAgICB2YXIgcmVzdCA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIHdoaWxlICggbGVuLS0gPiAwICkgcmVzdFsgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiArIDEgXTtcblxuICAgICAgICAgICAgaWYgKCFyZXN0Lmxlbmd0aCAmJiB0eXBlJGsoaCkgPT09ICdzdHJpbmcnICYmIGNzczJyZ2IudGVzdChoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnY3NzJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgdmFyIENvbG9yJEEgPSBDb2xvcl8xO1xuICAgIHZhciBjaHJvbWEkaCA9IGNocm9tYV8xO1xuICAgIHZhciBpbnB1dCRkID0gaW5wdXQkaDtcbiAgICB2YXIgdW5wYWNrJHQgPSB1dGlscy51bnBhY2s7XG5cbiAgICBpbnB1dCRkLmZvcm1hdC5nbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICB2YXIgcmdiID0gdW5wYWNrJHQoYXJncywgJ3JnYmEnKTtcbiAgICAgICAgcmdiWzBdICo9IDI1NTtcbiAgICAgICAgcmdiWzFdICo9IDI1NTtcbiAgICAgICAgcmdiWzJdICo9IDI1NTtcbiAgICAgICAgcmV0dXJuIHJnYjtcbiAgICB9O1xuXG4gICAgY2hyb21hJGguZ2wgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgcmV0dXJuIG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYXBwbHkoIENvbG9yJEEsIFsgbnVsbCBdLmNvbmNhdCggYXJncywgWydnbCddKSApKTtcbiAgICB9O1xuXG4gICAgQ29sb3IkQS5wcm90b3R5cGUuZ2wgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHJnYiA9IHRoaXMuX3JnYjtcbiAgICAgICAgcmV0dXJuIFtyZ2JbMF0vMjU1LCByZ2JbMV0vMjU1LCByZ2JbMl0vMjU1LCByZ2JbM11dO1xuICAgIH07XG5cbiAgICB2YXIgdW5wYWNrJHMgPSB1dGlscy51bnBhY2s7XG5cbiAgICB2YXIgcmdiMmhjZyQxID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHZhciByZWYgPSB1bnBhY2skcyhhcmdzLCAncmdiJyk7XG4gICAgICAgIHZhciByID0gcmVmWzBdO1xuICAgICAgICB2YXIgZyA9IHJlZlsxXTtcbiAgICAgICAgdmFyIGIgPSByZWZbMl07XG4gICAgICAgIHZhciBtaW4gPSBNYXRoLm1pbihyLCBnLCBiKTtcbiAgICAgICAgdmFyIG1heCA9IE1hdGgubWF4KHIsIGcsIGIpO1xuICAgICAgICB2YXIgZGVsdGEgPSBtYXggLSBtaW47XG4gICAgICAgIHZhciBjID0gZGVsdGEgKiAxMDAgLyAyNTU7XG4gICAgICAgIHZhciBfZyA9IG1pbiAvICgyNTUgLSBkZWx0YSkgKiAxMDA7XG4gICAgICAgIHZhciBoO1xuICAgICAgICBpZiAoZGVsdGEgPT09IDApIHtcbiAgICAgICAgICAgIGggPSBOdW1iZXIuTmFOO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHIgPT09IG1heCkgeyBoID0gKGcgLSBiKSAvIGRlbHRhOyB9XG4gICAgICAgICAgICBpZiAoZyA9PT0gbWF4KSB7IGggPSAyKyhiIC0gcikgLyBkZWx0YTsgfVxuICAgICAgICAgICAgaWYgKGIgPT09IG1heCkgeyBoID0gNCsociAtIGcpIC8gZGVsdGE7IH1cbiAgICAgICAgICAgIGggKj0gNjA7XG4gICAgICAgICAgICBpZiAoaCA8IDApIHsgaCArPSAzNjA7IH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW2gsIGMsIF9nXTtcbiAgICB9O1xuXG4gICAgdmFyIHJnYjJoY2dfMSA9IHJnYjJoY2ckMTtcblxuICAgIHZhciB1bnBhY2skciA9IHV0aWxzLnVucGFjaztcbiAgICB2YXIgZmxvb3IkMyA9IE1hdGguZmxvb3I7XG5cbiAgICAvKlxuICAgICAqIHRoaXMgaXMgYmFzaWNhbGx5IGp1c3QgSFNWIHdpdGggc29tZSBtaW5vciB0d2Vha3NcbiAgICAgKlxuICAgICAqIGh1ZS4uIFswLi4zNjBdXG4gICAgICogY2hyb21hIC4uIFswLi4xXVxuICAgICAqIGdyYXluZXNzIC4uIFswLi4xXVxuICAgICAqL1xuXG4gICAgdmFyIGhjZzJyZ2IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhc3NpZ24sIGFzc2lnbiQxLCBhc3NpZ24kMiwgYXNzaWduJDMsIGFzc2lnbiQ0LCBhc3NpZ24kNTtcblxuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuICAgICAgICBhcmdzID0gdW5wYWNrJHIoYXJncywgJ2hjZycpO1xuICAgICAgICB2YXIgaCA9IGFyZ3NbMF07XG4gICAgICAgIHZhciBjID0gYXJnc1sxXTtcbiAgICAgICAgdmFyIF9nID0gYXJnc1syXTtcbiAgICAgICAgdmFyIHIsZyxiO1xuICAgICAgICBfZyA9IF9nICogMjU1O1xuICAgICAgICB2YXIgX2MgPSBjICogMjU1O1xuICAgICAgICBpZiAoYyA9PT0gMCkge1xuICAgICAgICAgICAgciA9IGcgPSBiID0gX2c7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoaCA9PT0gMzYwKSB7IGggPSAwOyB9XG4gICAgICAgICAgICBpZiAoaCA+IDM2MCkgeyBoIC09IDM2MDsgfVxuICAgICAgICAgICAgaWYgKGggPCAwKSB7IGggKz0gMzYwOyB9XG4gICAgICAgICAgICBoIC89IDYwO1xuICAgICAgICAgICAgdmFyIGkgPSBmbG9vciQzKGgpO1xuICAgICAgICAgICAgdmFyIGYgPSBoIC0gaTtcbiAgICAgICAgICAgIHZhciBwID0gX2cgKiAoMSAtIGMpO1xuICAgICAgICAgICAgdmFyIHEgPSBwICsgX2MgKiAoMSAtIGYpO1xuICAgICAgICAgICAgdmFyIHQgPSBwICsgX2MgKiBmO1xuICAgICAgICAgICAgdmFyIHYgPSBwICsgX2M7XG4gICAgICAgICAgICBzd2l0Y2ggKGkpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6IChhc3NpZ24gPSBbdiwgdCwgcF0sIHIgPSBhc3NpZ25bMF0sIGcgPSBhc3NpZ25bMV0sIGIgPSBhc3NpZ25bMl0pOyBicmVha1xuICAgICAgICAgICAgICAgIGNhc2UgMTogKGFzc2lnbiQxID0gW3EsIHYsIHBdLCByID0gYXNzaWduJDFbMF0sIGcgPSBhc3NpZ24kMVsxXSwgYiA9IGFzc2lnbiQxWzJdKTsgYnJlYWtcbiAgICAgICAgICAgICAgICBjYXNlIDI6IChhc3NpZ24kMiA9IFtwLCB2LCB0XSwgciA9IGFzc2lnbiQyWzBdLCBnID0gYXNzaWduJDJbMV0sIGIgPSBhc3NpZ24kMlsyXSk7IGJyZWFrXG4gICAgICAgICAgICAgICAgY2FzZSAzOiAoYXNzaWduJDMgPSBbcCwgcSwgdl0sIHIgPSBhc3NpZ24kM1swXSwgZyA9IGFzc2lnbiQzWzFdLCBiID0gYXNzaWduJDNbMl0pOyBicmVha1xuICAgICAgICAgICAgICAgIGNhc2UgNDogKGFzc2lnbiQ0ID0gW3QsIHAsIHZdLCByID0gYXNzaWduJDRbMF0sIGcgPSBhc3NpZ24kNFsxXSwgYiA9IGFzc2lnbiQ0WzJdKTsgYnJlYWtcbiAgICAgICAgICAgICAgICBjYXNlIDU6IChhc3NpZ24kNSA9IFt2LCBwLCBxXSwgciA9IGFzc2lnbiQ1WzBdLCBnID0gYXNzaWduJDVbMV0sIGIgPSBhc3NpZ24kNVsyXSk7IGJyZWFrXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtyLCBnLCBiLCBhcmdzLmxlbmd0aCA+IDMgPyBhcmdzWzNdIDogMV07XG4gICAgfTtcblxuICAgIHZhciBoY2cycmdiXzEgPSBoY2cycmdiO1xuXG4gICAgdmFyIHVucGFjayRxID0gdXRpbHMudW5wYWNrO1xuICAgIHZhciB0eXBlJGogPSB1dGlscy50eXBlO1xuICAgIHZhciBjaHJvbWEkZyA9IGNocm9tYV8xO1xuICAgIHZhciBDb2xvciR6ID0gQ29sb3JfMTtcbiAgICB2YXIgaW5wdXQkYyA9IGlucHV0JGg7XG5cbiAgICB2YXIgcmdiMmhjZyA9IHJnYjJoY2dfMTtcblxuICAgIENvbG9yJHoucHJvdG90eXBlLmhjZyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gcmdiMmhjZyh0aGlzLl9yZ2IpO1xuICAgIH07XG5cbiAgICBjaHJvbWEkZy5oY2cgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgcmV0dXJuIG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYXBwbHkoIENvbG9yJHosIFsgbnVsbCBdLmNvbmNhdCggYXJncywgWydoY2cnXSkgKSk7XG4gICAgfTtcblxuICAgIGlucHV0JGMuZm9ybWF0LmhjZyA9IGhjZzJyZ2JfMTtcblxuICAgIGlucHV0JGMuYXV0b2RldGVjdC5wdXNoKHtcbiAgICAgICAgcDogMSxcbiAgICAgICAgdGVzdDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgICAgIGFyZ3MgPSB1bnBhY2skcShhcmdzLCAnaGNnJyk7XG4gICAgICAgICAgICBpZiAodHlwZSRqKGFyZ3MpID09PSAnYXJyYXknICYmIGFyZ3MubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdoY2cnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICB2YXIgdW5wYWNrJHAgPSB1dGlscy51bnBhY2s7XG4gICAgdmFyIGxhc3QgPSB1dGlscy5sYXN0O1xuICAgIHZhciByb3VuZCQzID0gTWF0aC5yb3VuZDtcblxuICAgIHZhciByZ2IyaGV4JDIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgdmFyIHJlZiA9IHVucGFjayRwKGFyZ3MsICdyZ2JhJyk7XG4gICAgICAgIHZhciByID0gcmVmWzBdO1xuICAgICAgICB2YXIgZyA9IHJlZlsxXTtcbiAgICAgICAgdmFyIGIgPSByZWZbMl07XG4gICAgICAgIHZhciBhID0gcmVmWzNdO1xuICAgICAgICB2YXIgbW9kZSA9IGxhc3QoYXJncykgfHwgJ2F1dG8nO1xuICAgICAgICBpZiAoYSA9PT0gdW5kZWZpbmVkKSB7IGEgPSAxOyB9XG4gICAgICAgIGlmIChtb2RlID09PSAnYXV0bycpIHtcbiAgICAgICAgICAgIG1vZGUgPSBhIDwgMSA/ICdyZ2JhJyA6ICdyZ2InO1xuICAgICAgICB9XG4gICAgICAgIHIgPSByb3VuZCQzKHIpO1xuICAgICAgICBnID0gcm91bmQkMyhnKTtcbiAgICAgICAgYiA9IHJvdW5kJDMoYik7XG4gICAgICAgIHZhciB1ID0gciA8PCAxNiB8IGcgPDwgOCB8IGI7XG4gICAgICAgIHZhciBzdHIgPSBcIjAwMDAwMFwiICsgdS50b1N0cmluZygxNik7IC8vIy50b1VwcGVyQ2FzZSgpO1xuICAgICAgICBzdHIgPSBzdHIuc3Vic3RyKHN0ci5sZW5ndGggLSA2KTtcbiAgICAgICAgdmFyIGh4YSA9ICcwJyArIHJvdW5kJDMoYSAqIDI1NSkudG9TdHJpbmcoMTYpO1xuICAgICAgICBoeGEgPSBoeGEuc3Vic3RyKGh4YS5sZW5ndGggLSAyKTtcbiAgICAgICAgc3dpdGNoIChtb2RlLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgJ3JnYmEnOiByZXR1cm4gKFwiI1wiICsgc3RyICsgaHhhKTtcbiAgICAgICAgICAgIGNhc2UgJ2FyZ2InOiByZXR1cm4gKFwiI1wiICsgaHhhICsgc3RyKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVybiAoXCIjXCIgKyBzdHIpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHZhciByZ2IyaGV4XzEgPSByZ2IyaGV4JDI7XG5cbiAgICB2YXIgUkVfSEVYID0gL14jPyhbQS1GYS1mMC05XXs2fXxbQS1GYS1mMC05XXszfSkkLztcbiAgICB2YXIgUkVfSEVYQSA9IC9eIz8oW0EtRmEtZjAtOV17OH18W0EtRmEtZjAtOV17NH0pJC87XG5cbiAgICB2YXIgaGV4MnJnYiQxID0gZnVuY3Rpb24gKGhleCkge1xuICAgICAgICBpZiAoaGV4Lm1hdGNoKFJFX0hFWCkpIHtcbiAgICAgICAgICAgIC8vIHJlbW92ZSBvcHRpb25hbCBsZWFkaW5nICNcbiAgICAgICAgICAgIGlmIChoZXgubGVuZ3RoID09PSA0IHx8IGhleC5sZW5ndGggPT09IDcpIHtcbiAgICAgICAgICAgICAgICBoZXggPSBoZXguc3Vic3RyKDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZXhwYW5kIHNob3J0LW5vdGF0aW9uIHRvIGZ1bGwgc2l4LWRpZ2l0XG4gICAgICAgICAgICBpZiAoaGV4Lmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgICAgIGhleCA9IGhleC5zcGxpdCgnJyk7XG4gICAgICAgICAgICAgICAgaGV4ID0gaGV4WzBdK2hleFswXStoZXhbMV0raGV4WzFdK2hleFsyXStoZXhbMl07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgdSA9IHBhcnNlSW50KGhleCwgMTYpO1xuICAgICAgICAgICAgdmFyIHIgPSB1ID4+IDE2O1xuICAgICAgICAgICAgdmFyIGcgPSB1ID4+IDggJiAweEZGO1xuICAgICAgICAgICAgdmFyIGIgPSB1ICYgMHhGRjtcbiAgICAgICAgICAgIHJldHVybiBbcixnLGIsMV07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBtYXRjaCByZ2JhIGhleCBmb3JtYXQsIGVnICNGRjAwMDA3N1xuICAgICAgICBpZiAoaGV4Lm1hdGNoKFJFX0hFWEEpKSB7XG4gICAgICAgICAgICBpZiAoaGV4Lmxlbmd0aCA9PT0gNSB8fCBoZXgubGVuZ3RoID09PSA5KSB7XG4gICAgICAgICAgICAgICAgLy8gcmVtb3ZlIG9wdGlvbmFsIGxlYWRpbmcgI1xuICAgICAgICAgICAgICAgIGhleCA9IGhleC5zdWJzdHIoMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBleHBhbmQgc2hvcnQtbm90YXRpb24gdG8gZnVsbCBlaWdodC1kaWdpdFxuICAgICAgICAgICAgaWYgKGhleC5sZW5ndGggPT09IDQpIHtcbiAgICAgICAgICAgICAgICBoZXggPSBoZXguc3BsaXQoJycpO1xuICAgICAgICAgICAgICAgIGhleCA9IGhleFswXStoZXhbMF0raGV4WzFdK2hleFsxXStoZXhbMl0raGV4WzJdK2hleFszXStoZXhbM107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgdSQxID0gcGFyc2VJbnQoaGV4LCAxNik7XG4gICAgICAgICAgICB2YXIgciQxID0gdSQxID4+IDI0ICYgMHhGRjtcbiAgICAgICAgICAgIHZhciBnJDEgPSB1JDEgPj4gMTYgJiAweEZGO1xuICAgICAgICAgICAgdmFyIGIkMSA9IHUkMSA+PiA4ICYgMHhGRjtcbiAgICAgICAgICAgIHZhciBhID0gTWF0aC5yb3VuZCgodSQxICYgMHhGRikgLyAweEZGICogMTAwKSAvIDEwMDtcbiAgICAgICAgICAgIHJldHVybiBbciQxLGckMSxiJDEsYV07XG4gICAgICAgIH1cblxuICAgICAgICAvLyB3ZSB1c2VkIHRvIGNoZWNrIGZvciBjc3MgY29sb3JzIGhlcmVcbiAgICAgICAgLy8gaWYgX2lucHV0LmNzcz8gYW5kIHJnYiA9IF9pbnB1dC5jc3MgaGV4XG4gICAgICAgIC8vICAgICByZXR1cm4gcmdiXG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKChcInVua25vd24gaGV4IGNvbG9yOiBcIiArIGhleCkpO1xuICAgIH07XG5cbiAgICB2YXIgaGV4MnJnYl8xID0gaGV4MnJnYiQxO1xuXG4gICAgdmFyIGNocm9tYSRmID0gY2hyb21hXzE7XG4gICAgdmFyIENvbG9yJHkgPSBDb2xvcl8xO1xuICAgIHZhciB0eXBlJGkgPSB1dGlscy50eXBlO1xuICAgIHZhciBpbnB1dCRiID0gaW5wdXQkaDtcblxuICAgIHZhciByZ2IyaGV4JDEgPSByZ2IyaGV4XzE7XG5cbiAgICBDb2xvciR5LnByb3RvdHlwZS5oZXggPSBmdW5jdGlvbihtb2RlKSB7XG4gICAgICAgIHJldHVybiByZ2IyaGV4JDEodGhpcy5fcmdiLCBtb2RlKTtcbiAgICB9O1xuXG4gICAgY2hyb21hJGYuaGV4ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHJldHVybiBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KCBDb2xvciR5LCBbIG51bGwgXS5jb25jYXQoIGFyZ3MsIFsnaGV4J10pICkpO1xuICAgIH07XG5cbiAgICBpbnB1dCRiLmZvcm1hdC5oZXggPSBoZXgycmdiXzE7XG4gICAgaW5wdXQkYi5hdXRvZGV0ZWN0LnB1c2goe1xuICAgICAgICBwOiA0LFxuICAgICAgICB0ZXN0OiBmdW5jdGlvbiAoaCkge1xuICAgICAgICAgICAgdmFyIHJlc3QgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICB3aGlsZSAoIGxlbi0tID4gMCApIHJlc3RbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gKyAxIF07XG5cbiAgICAgICAgICAgIGlmICghcmVzdC5sZW5ndGggJiYgdHlwZSRpKGgpID09PSAnc3RyaW5nJyAmJiBbMyw0LDUsNiw3LDgsOV0uaW5kZXhPZihoLmxlbmd0aCkgPj0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnaGV4JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgdmFyIHVucGFjayRvID0gdXRpbHMudW5wYWNrO1xuICAgIHZhciBUV09QSSQyID0gdXRpbHMuVFdPUEk7XG4gICAgdmFyIG1pbiQyID0gTWF0aC5taW47XG4gICAgdmFyIHNxcnQkNCA9IE1hdGguc3FydDtcbiAgICB2YXIgYWNvcyA9IE1hdGguYWNvcztcblxuICAgIHZhciByZ2IyaHNpJDEgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgLypcbiAgICAgICAgYm9ycm93ZWQgZnJvbSBoZXJlOlxuICAgICAgICBodHRwOi8vaHVtbWVyLnN0YW5mb3JkLmVkdS9tdXNlaW5mby9kb2MvZXhhbXBsZXMvaHVtZHJ1bS9rZXlzY2FwZTIvcmdiMmhzaS5jcHBcbiAgICAgICAgKi9cbiAgICAgICAgdmFyIHJlZiA9IHVucGFjayRvKGFyZ3MsICdyZ2InKTtcbiAgICAgICAgdmFyIHIgPSByZWZbMF07XG4gICAgICAgIHZhciBnID0gcmVmWzFdO1xuICAgICAgICB2YXIgYiA9IHJlZlsyXTtcbiAgICAgICAgciAvPSAyNTU7XG4gICAgICAgIGcgLz0gMjU1O1xuICAgICAgICBiIC89IDI1NTtcbiAgICAgICAgdmFyIGg7XG4gICAgICAgIHZhciBtaW5fID0gbWluJDIocixnLGIpO1xuICAgICAgICB2YXIgaSA9IChyK2crYikgLyAzO1xuICAgICAgICB2YXIgcyA9IGkgPiAwID8gMSAtIG1pbl8vaSA6IDA7XG4gICAgICAgIGlmIChzID09PSAwKSB7XG4gICAgICAgICAgICBoID0gTmFOO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaCA9ICgoci1nKSsoci1iKSkgLyAyO1xuICAgICAgICAgICAgaCAvPSBzcXJ0JDQoKHItZykqKHItZykgKyAoci1iKSooZy1iKSk7XG4gICAgICAgICAgICBoID0gYWNvcyhoKTtcbiAgICAgICAgICAgIGlmIChiID4gZykge1xuICAgICAgICAgICAgICAgIGggPSBUV09QSSQyIC0gaDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGggLz0gVFdPUEkkMjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW2gqMzYwLHMsaV07XG4gICAgfTtcblxuICAgIHZhciByZ2IyaHNpXzEgPSByZ2IyaHNpJDE7XG5cbiAgICB2YXIgdW5wYWNrJG4gPSB1dGlscy51bnBhY2s7XG4gICAgdmFyIGxpbWl0ID0gdXRpbHMubGltaXQ7XG4gICAgdmFyIFRXT1BJJDEgPSB1dGlscy5UV09QSTtcbiAgICB2YXIgUElUSElSRCA9IHV0aWxzLlBJVEhJUkQ7XG4gICAgdmFyIGNvcyQ0ID0gTWF0aC5jb3M7XG5cbiAgICAvKlxuICAgICAqIGh1ZSBbMC4uMzYwXVxuICAgICAqIHNhdHVyYXRpb24gWzAuLjFdXG4gICAgICogaW50ZW5zaXR5IFswLi4xXVxuICAgICAqL1xuICAgIHZhciBoc2kycmdiID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIC8qXG4gICAgICAgIGJvcnJvd2VkIGZyb20gaGVyZTpcbiAgICAgICAgaHR0cDovL2h1bW1lci5zdGFuZm9yZC5lZHUvbXVzZWluZm8vZG9jL2V4YW1wbGVzL2h1bWRydW0va2V5c2NhcGUyL2hzaTJyZ2IuY3BwXG4gICAgICAgICovXG4gICAgICAgIGFyZ3MgPSB1bnBhY2skbihhcmdzLCAnaHNpJyk7XG4gICAgICAgIHZhciBoID0gYXJnc1swXTtcbiAgICAgICAgdmFyIHMgPSBhcmdzWzFdO1xuICAgICAgICB2YXIgaSA9IGFyZ3NbMl07XG4gICAgICAgIHZhciByLGcsYjtcblxuICAgICAgICBpZiAoaXNOYU4oaCkpIHsgaCA9IDA7IH1cbiAgICAgICAgaWYgKGlzTmFOKHMpKSB7IHMgPSAwOyB9XG4gICAgICAgIC8vIG5vcm1hbGl6ZSBodWVcbiAgICAgICAgaWYgKGggPiAzNjApIHsgaCAtPSAzNjA7IH1cbiAgICAgICAgaWYgKGggPCAwKSB7IGggKz0gMzYwOyB9XG4gICAgICAgIGggLz0gMzYwO1xuICAgICAgICBpZiAoaCA8IDEvMykge1xuICAgICAgICAgICAgYiA9ICgxLXMpLzM7XG4gICAgICAgICAgICByID0gKDErcypjb3MkNChUV09QSSQxKmgpL2NvcyQ0KFBJVEhJUkQtVFdPUEkkMSpoKSkvMztcbiAgICAgICAgICAgIGcgPSAxIC0gKGIrcik7XG4gICAgICAgIH0gZWxzZSBpZiAoaCA8IDIvMykge1xuICAgICAgICAgICAgaCAtPSAxLzM7XG4gICAgICAgICAgICByID0gKDEtcykvMztcbiAgICAgICAgICAgIGcgPSAoMStzKmNvcyQ0KFRXT1BJJDEqaCkvY29zJDQoUElUSElSRC1UV09QSSQxKmgpKS8zO1xuICAgICAgICAgICAgYiA9IDEgLSAocitnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGggLT0gMi8zO1xuICAgICAgICAgICAgZyA9ICgxLXMpLzM7XG4gICAgICAgICAgICBiID0gKDErcypjb3MkNChUV09QSSQxKmgpL2NvcyQ0KFBJVEhJUkQtVFdPUEkkMSpoKSkvMztcbiAgICAgICAgICAgIHIgPSAxIC0gKGcrYik7XG4gICAgICAgIH1cbiAgICAgICAgciA9IGxpbWl0KGkqciozKTtcbiAgICAgICAgZyA9IGxpbWl0KGkqZyozKTtcbiAgICAgICAgYiA9IGxpbWl0KGkqYiozKTtcbiAgICAgICAgcmV0dXJuIFtyKjI1NSwgZyoyNTUsIGIqMjU1LCBhcmdzLmxlbmd0aCA+IDMgPyBhcmdzWzNdIDogMV07XG4gICAgfTtcblxuICAgIHZhciBoc2kycmdiXzEgPSBoc2kycmdiO1xuXG4gICAgdmFyIHVucGFjayRtID0gdXRpbHMudW5wYWNrO1xuICAgIHZhciB0eXBlJGggPSB1dGlscy50eXBlO1xuICAgIHZhciBjaHJvbWEkZSA9IGNocm9tYV8xO1xuICAgIHZhciBDb2xvciR4ID0gQ29sb3JfMTtcbiAgICB2YXIgaW5wdXQkYSA9IGlucHV0JGg7XG5cbiAgICB2YXIgcmdiMmhzaSA9IHJnYjJoc2lfMTtcblxuICAgIENvbG9yJHgucHJvdG90eXBlLmhzaSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gcmdiMmhzaSh0aGlzLl9yZ2IpO1xuICAgIH07XG5cbiAgICBjaHJvbWEkZS5oc2kgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgcmV0dXJuIG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYXBwbHkoIENvbG9yJHgsIFsgbnVsbCBdLmNvbmNhdCggYXJncywgWydoc2knXSkgKSk7XG4gICAgfTtcblxuICAgIGlucHV0JGEuZm9ybWF0LmhzaSA9IGhzaTJyZ2JfMTtcblxuICAgIGlucHV0JGEuYXV0b2RldGVjdC5wdXNoKHtcbiAgICAgICAgcDogMixcbiAgICAgICAgdGVzdDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgICAgIGFyZ3MgPSB1bnBhY2skbShhcmdzLCAnaHNpJyk7XG4gICAgICAgICAgICBpZiAodHlwZSRoKGFyZ3MpID09PSAnYXJyYXknICYmIGFyZ3MubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdoc2knO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICB2YXIgdW5wYWNrJGwgPSB1dGlscy51bnBhY2s7XG4gICAgdmFyIHR5cGUkZyA9IHV0aWxzLnR5cGU7XG4gICAgdmFyIGNocm9tYSRkID0gY2hyb21hXzE7XG4gICAgdmFyIENvbG9yJHcgPSBDb2xvcl8xO1xuICAgIHZhciBpbnB1dCQ5ID0gaW5wdXQkaDtcblxuICAgIHZhciByZ2IyaHNsJDEgPSByZ2IyaHNsXzE7XG5cbiAgICBDb2xvciR3LnByb3RvdHlwZS5oc2wgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHJnYjJoc2wkMSh0aGlzLl9yZ2IpO1xuICAgIH07XG5cbiAgICBjaHJvbWEkZC5oc2wgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgcmV0dXJuIG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYXBwbHkoIENvbG9yJHcsIFsgbnVsbCBdLmNvbmNhdCggYXJncywgWydoc2wnXSkgKSk7XG4gICAgfTtcblxuICAgIGlucHV0JDkuZm9ybWF0LmhzbCA9IGhzbDJyZ2JfMTtcblxuICAgIGlucHV0JDkuYXV0b2RldGVjdC5wdXNoKHtcbiAgICAgICAgcDogMixcbiAgICAgICAgdGVzdDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgICAgIGFyZ3MgPSB1bnBhY2skbChhcmdzLCAnaHNsJyk7XG4gICAgICAgICAgICBpZiAodHlwZSRnKGFyZ3MpID09PSAnYXJyYXknICYmIGFyZ3MubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdoc2wnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICB2YXIgdW5wYWNrJGsgPSB1dGlscy51bnBhY2s7XG4gICAgdmFyIG1pbiQxID0gTWF0aC5taW47XG4gICAgdmFyIG1heCQxID0gTWF0aC5tYXg7XG5cbiAgICAvKlxuICAgICAqIHN1cHBvcnRlZCBhcmd1bWVudHM6XG4gICAgICogLSByZ2IyaHN2KHIsZyxiKVxuICAgICAqIC0gcmdiMmhzdihbcixnLGJdKVxuICAgICAqIC0gcmdiMmhzdih7cixnLGJ9KVxuICAgICAqL1xuICAgIHZhciByZ2IyaHNsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIGFyZ3MgPSB1bnBhY2skayhhcmdzLCAncmdiJyk7XG4gICAgICAgIHZhciByID0gYXJnc1swXTtcbiAgICAgICAgdmFyIGcgPSBhcmdzWzFdO1xuICAgICAgICB2YXIgYiA9IGFyZ3NbMl07XG4gICAgICAgIHZhciBtaW5fID0gbWluJDEociwgZywgYik7XG4gICAgICAgIHZhciBtYXhfID0gbWF4JDEociwgZywgYik7XG4gICAgICAgIHZhciBkZWx0YSA9IG1heF8gLSBtaW5fO1xuICAgICAgICB2YXIgaCxzLHY7XG4gICAgICAgIHYgPSBtYXhfIC8gMjU1LjA7XG4gICAgICAgIGlmIChtYXhfID09PSAwKSB7XG4gICAgICAgICAgICBoID0gTnVtYmVyLk5hTjtcbiAgICAgICAgICAgIHMgPSAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcyA9IGRlbHRhIC8gbWF4XztcbiAgICAgICAgICAgIGlmIChyID09PSBtYXhfKSB7IGggPSAoZyAtIGIpIC8gZGVsdGE7IH1cbiAgICAgICAgICAgIGlmIChnID09PSBtYXhfKSB7IGggPSAyKyhiIC0gcikgLyBkZWx0YTsgfVxuICAgICAgICAgICAgaWYgKGIgPT09IG1heF8pIHsgaCA9IDQrKHIgLSBnKSAvIGRlbHRhOyB9XG4gICAgICAgICAgICBoICo9IDYwO1xuICAgICAgICAgICAgaWYgKGggPCAwKSB7IGggKz0gMzYwOyB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtoLCBzLCB2XVxuICAgIH07XG5cbiAgICB2YXIgcmdiMmhzdiQxID0gcmdiMmhzbDtcblxuICAgIHZhciB1bnBhY2skaiA9IHV0aWxzLnVucGFjaztcbiAgICB2YXIgZmxvb3IkMiA9IE1hdGguZmxvb3I7XG5cbiAgICB2YXIgaHN2MnJnYiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFzc2lnbiwgYXNzaWduJDEsIGFzc2lnbiQyLCBhc3NpZ24kMywgYXNzaWduJDQsIGFzc2lnbiQ1O1xuXG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG4gICAgICAgIGFyZ3MgPSB1bnBhY2skaihhcmdzLCAnaHN2Jyk7XG4gICAgICAgIHZhciBoID0gYXJnc1swXTtcbiAgICAgICAgdmFyIHMgPSBhcmdzWzFdO1xuICAgICAgICB2YXIgdiA9IGFyZ3NbMl07XG4gICAgICAgIHZhciByLGcsYjtcbiAgICAgICAgdiAqPSAyNTU7XG4gICAgICAgIGlmIChzID09PSAwKSB7XG4gICAgICAgICAgICByID0gZyA9IGIgPSB2O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGggPT09IDM2MCkgeyBoID0gMDsgfVxuICAgICAgICAgICAgaWYgKGggPiAzNjApIHsgaCAtPSAzNjA7IH1cbiAgICAgICAgICAgIGlmIChoIDwgMCkgeyBoICs9IDM2MDsgfVxuICAgICAgICAgICAgaCAvPSA2MDtcblxuICAgICAgICAgICAgdmFyIGkgPSBmbG9vciQyKGgpO1xuICAgICAgICAgICAgdmFyIGYgPSBoIC0gaTtcbiAgICAgICAgICAgIHZhciBwID0gdiAqICgxIC0gcyk7XG4gICAgICAgICAgICB2YXIgcSA9IHYgKiAoMSAtIHMgKiBmKTtcbiAgICAgICAgICAgIHZhciB0ID0gdiAqICgxIC0gcyAqICgxIC0gZikpO1xuXG4gICAgICAgICAgICBzd2l0Y2ggKGkpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6IChhc3NpZ24gPSBbdiwgdCwgcF0sIHIgPSBhc3NpZ25bMF0sIGcgPSBhc3NpZ25bMV0sIGIgPSBhc3NpZ25bMl0pOyBicmVha1xuICAgICAgICAgICAgICAgIGNhc2UgMTogKGFzc2lnbiQxID0gW3EsIHYsIHBdLCByID0gYXNzaWduJDFbMF0sIGcgPSBhc3NpZ24kMVsxXSwgYiA9IGFzc2lnbiQxWzJdKTsgYnJlYWtcbiAgICAgICAgICAgICAgICBjYXNlIDI6IChhc3NpZ24kMiA9IFtwLCB2LCB0XSwgciA9IGFzc2lnbiQyWzBdLCBnID0gYXNzaWduJDJbMV0sIGIgPSBhc3NpZ24kMlsyXSk7IGJyZWFrXG4gICAgICAgICAgICAgICAgY2FzZSAzOiAoYXNzaWduJDMgPSBbcCwgcSwgdl0sIHIgPSBhc3NpZ24kM1swXSwgZyA9IGFzc2lnbiQzWzFdLCBiID0gYXNzaWduJDNbMl0pOyBicmVha1xuICAgICAgICAgICAgICAgIGNhc2UgNDogKGFzc2lnbiQ0ID0gW3QsIHAsIHZdLCByID0gYXNzaWduJDRbMF0sIGcgPSBhc3NpZ24kNFsxXSwgYiA9IGFzc2lnbiQ0WzJdKTsgYnJlYWtcbiAgICAgICAgICAgICAgICBjYXNlIDU6IChhc3NpZ24kNSA9IFt2LCBwLCBxXSwgciA9IGFzc2lnbiQ1WzBdLCBnID0gYXNzaWduJDVbMV0sIGIgPSBhc3NpZ24kNVsyXSk7IGJyZWFrXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtyLGcsYixhcmdzLmxlbmd0aCA+IDM/YXJnc1szXToxXTtcbiAgICB9O1xuXG4gICAgdmFyIGhzdjJyZ2JfMSA9IGhzdjJyZ2I7XG5cbiAgICB2YXIgdW5wYWNrJGkgPSB1dGlscy51bnBhY2s7XG4gICAgdmFyIHR5cGUkZiA9IHV0aWxzLnR5cGU7XG4gICAgdmFyIGNocm9tYSRjID0gY2hyb21hXzE7XG4gICAgdmFyIENvbG9yJHYgPSBDb2xvcl8xO1xuICAgIHZhciBpbnB1dCQ4ID0gaW5wdXQkaDtcblxuICAgIHZhciByZ2IyaHN2ID0gcmdiMmhzdiQxO1xuXG4gICAgQ29sb3Ikdi5wcm90b3R5cGUuaHN2ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiByZ2IyaHN2KHRoaXMuX3JnYik7XG4gICAgfTtcblxuICAgIGNocm9tYSRjLmhzdiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICByZXR1cm4gbmV3IChGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5hcHBseSggQ29sb3IkdiwgWyBudWxsIF0uY29uY2F0KCBhcmdzLCBbJ2hzdiddKSApKTtcbiAgICB9O1xuXG4gICAgaW5wdXQkOC5mb3JtYXQuaHN2ID0gaHN2MnJnYl8xO1xuXG4gICAgaW5wdXQkOC5hdXRvZGV0ZWN0LnB1c2goe1xuICAgICAgICBwOiAyLFxuICAgICAgICB0ZXN0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICAgICAgYXJncyA9IHVucGFjayRpKGFyZ3MsICdoc3YnKTtcbiAgICAgICAgICAgIGlmICh0eXBlJGYoYXJncykgPT09ICdhcnJheScgJiYgYXJncy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hzdic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHZhciBsYWJDb25zdGFudHMgPSB7XG4gICAgICAgIC8vIENvcnJlc3BvbmRzIHJvdWdobHkgdG8gUkdCIGJyaWdodGVyL2RhcmtlclxuICAgICAgICBLbjogMTgsXG5cbiAgICAgICAgLy8gRDY1IHN0YW5kYXJkIHJlZmVyZW50XG4gICAgICAgIFhuOiAwLjk1MDQ3MCxcbiAgICAgICAgWW46IDEsXG4gICAgICAgIFpuOiAxLjA4ODgzMCxcblxuICAgICAgICB0MDogMC4xMzc5MzEwMzQsICAvLyA0IC8gMjlcbiAgICAgICAgdDE6IDAuMjA2ODk2NTUyLCAgLy8gNiAvIDI5XG4gICAgICAgIHQyOiAwLjEyODQxODU1LCAgIC8vIDMgKiB0MSAqIHQxXG4gICAgICAgIHQzOiAwLjAwODg1NjQ1MiwgIC8vIHQxICogdDEgKiB0MVxuICAgIH07XG5cbiAgICB2YXIgTEFCX0NPTlNUQU5UUyQzID0gbGFiQ29uc3RhbnRzO1xuICAgIHZhciB1bnBhY2skaCA9IHV0aWxzLnVucGFjaztcbiAgICB2YXIgcG93JGEgPSBNYXRoLnBvdztcblxuICAgIHZhciByZ2IybGFiJDIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgdmFyIHJlZiA9IHVucGFjayRoKGFyZ3MsICdyZ2InKTtcbiAgICAgICAgdmFyIHIgPSByZWZbMF07XG4gICAgICAgIHZhciBnID0gcmVmWzFdO1xuICAgICAgICB2YXIgYiA9IHJlZlsyXTtcbiAgICAgICAgdmFyIHJlZiQxID0gcmdiMnh5eihyLGcsYik7XG4gICAgICAgIHZhciB4ID0gcmVmJDFbMF07XG4gICAgICAgIHZhciB5ID0gcmVmJDFbMV07XG4gICAgICAgIHZhciB6ID0gcmVmJDFbMl07XG4gICAgICAgIHZhciBsID0gMTE2ICogeSAtIDE2O1xuICAgICAgICByZXR1cm4gW2wgPCAwID8gMCA6IGwsIDUwMCAqICh4IC0geSksIDIwMCAqICh5IC0geildO1xuICAgIH07XG5cbiAgICB2YXIgcmdiX3h5eiA9IGZ1bmN0aW9uIChyKSB7XG4gICAgICAgIGlmICgociAvPSAyNTUpIDw9IDAuMDQwNDUpIHsgcmV0dXJuIHIgLyAxMi45MjsgfVxuICAgICAgICByZXR1cm4gcG93JGEoKHIgKyAwLjA1NSkgLyAxLjA1NSwgMi40KTtcbiAgICB9O1xuXG4gICAgdmFyIHh5el9sYWIgPSBmdW5jdGlvbiAodCkge1xuICAgICAgICBpZiAodCA+IExBQl9DT05TVEFOVFMkMy50MykgeyByZXR1cm4gcG93JGEodCwgMSAvIDMpOyB9XG4gICAgICAgIHJldHVybiB0IC8gTEFCX0NPTlNUQU5UUyQzLnQyICsgTEFCX0NPTlNUQU5UUyQzLnQwO1xuICAgIH07XG5cbiAgICB2YXIgcmdiMnh5eiA9IGZ1bmN0aW9uIChyLGcsYikge1xuICAgICAgICByID0gcmdiX3h5eihyKTtcbiAgICAgICAgZyA9IHJnYl94eXooZyk7XG4gICAgICAgIGIgPSByZ2JfeHl6KGIpO1xuICAgICAgICB2YXIgeCA9IHh5el9sYWIoKDAuNDEyNDU2NCAqIHIgKyAwLjM1NzU3NjEgKiBnICsgMC4xODA0Mzc1ICogYikgLyBMQUJfQ09OU1RBTlRTJDMuWG4pO1xuICAgICAgICB2YXIgeSA9IHh5el9sYWIoKDAuMjEyNjcyOSAqIHIgKyAwLjcxNTE1MjIgKiBnICsgMC4wNzIxNzUwICogYikgLyBMQUJfQ09OU1RBTlRTJDMuWW4pO1xuICAgICAgICB2YXIgeiA9IHh5el9sYWIoKDAuMDE5MzMzOSAqIHIgKyAwLjExOTE5MjAgKiBnICsgMC45NTAzMDQxICogYikgLyBMQUJfQ09OU1RBTlRTJDMuWm4pO1xuICAgICAgICByZXR1cm4gW3gseSx6XTtcbiAgICB9O1xuXG4gICAgdmFyIHJnYjJsYWJfMSA9IHJnYjJsYWIkMjtcblxuICAgIHZhciBMQUJfQ09OU1RBTlRTJDIgPSBsYWJDb25zdGFudHM7XG4gICAgdmFyIHVucGFjayRnID0gdXRpbHMudW5wYWNrO1xuICAgIHZhciBwb3ckOSA9IE1hdGgucG93O1xuXG4gICAgLypcbiAgICAgKiBMKiBbMC4uMTAwXVxuICAgICAqIGEgWy0xMDAuLjEwMF1cbiAgICAgKiBiIFstMTAwLi4xMDBdXG4gICAgICovXG4gICAgdmFyIGxhYjJyZ2IkMSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICBhcmdzID0gdW5wYWNrJGcoYXJncywgJ2xhYicpO1xuICAgICAgICB2YXIgbCA9IGFyZ3NbMF07XG4gICAgICAgIHZhciBhID0gYXJnc1sxXTtcbiAgICAgICAgdmFyIGIgPSBhcmdzWzJdO1xuICAgICAgICB2YXIgeCx5LHosIHIsZyxiXztcblxuICAgICAgICB5ID0gKGwgKyAxNikgLyAxMTY7XG4gICAgICAgIHggPSBpc05hTihhKSA/IHkgOiB5ICsgYSAvIDUwMDtcbiAgICAgICAgeiA9IGlzTmFOKGIpID8geSA6IHkgLSBiIC8gMjAwO1xuXG4gICAgICAgIHkgPSBMQUJfQ09OU1RBTlRTJDIuWW4gKiBsYWJfeHl6KHkpO1xuICAgICAgICB4ID0gTEFCX0NPTlNUQU5UUyQyLlhuICogbGFiX3h5eih4KTtcbiAgICAgICAgeiA9IExBQl9DT05TVEFOVFMkMi5abiAqIGxhYl94eXooeik7XG5cbiAgICAgICAgciA9IHh5el9yZ2IoMy4yNDA0NTQyICogeCAtIDEuNTM3MTM4NSAqIHkgLSAwLjQ5ODUzMTQgKiB6KTsgIC8vIEQ2NSAtPiBzUkdCXG4gICAgICAgIGcgPSB4eXpfcmdiKC0wLjk2OTI2NjAgKiB4ICsgMS44NzYwMTA4ICogeSArIDAuMDQxNTU2MCAqIHopO1xuICAgICAgICBiXyA9IHh5el9yZ2IoMC4wNTU2NDM0ICogeCAtIDAuMjA0MDI1OSAqIHkgKyAxLjA1NzIyNTIgKiB6KTtcblxuICAgICAgICByZXR1cm4gW3IsZyxiXyxhcmdzLmxlbmd0aCA+IDMgPyBhcmdzWzNdIDogMV07XG4gICAgfTtcblxuICAgIHZhciB4eXpfcmdiID0gZnVuY3Rpb24gKHIpIHtcbiAgICAgICAgcmV0dXJuIDI1NSAqIChyIDw9IDAuMDAzMDQgPyAxMi45MiAqIHIgOiAxLjA1NSAqIHBvdyQ5KHIsIDEgLyAyLjQpIC0gMC4wNTUpXG4gICAgfTtcblxuICAgIHZhciBsYWJfeHl6ID0gZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgcmV0dXJuIHQgPiBMQUJfQ09OU1RBTlRTJDIudDEgPyB0ICogdCAqIHQgOiBMQUJfQ09OU1RBTlRTJDIudDIgKiAodCAtIExBQl9DT05TVEFOVFMkMi50MClcbiAgICB9O1xuXG4gICAgdmFyIGxhYjJyZ2JfMSA9IGxhYjJyZ2IkMTtcblxuICAgIHZhciB1bnBhY2skZiA9IHV0aWxzLnVucGFjaztcbiAgICB2YXIgdHlwZSRlID0gdXRpbHMudHlwZTtcbiAgICB2YXIgY2hyb21hJGIgPSBjaHJvbWFfMTtcbiAgICB2YXIgQ29sb3IkdSA9IENvbG9yXzE7XG4gICAgdmFyIGlucHV0JDcgPSBpbnB1dCRoO1xuXG4gICAgdmFyIHJnYjJsYWIkMSA9IHJnYjJsYWJfMTtcblxuICAgIENvbG9yJHUucHJvdG90eXBlLmxhYiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gcmdiMmxhYiQxKHRoaXMuX3JnYik7XG4gICAgfTtcblxuICAgIGNocm9tYSRiLmxhYiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICByZXR1cm4gbmV3IChGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5hcHBseSggQ29sb3IkdSwgWyBudWxsIF0uY29uY2F0KCBhcmdzLCBbJ2xhYiddKSApKTtcbiAgICB9O1xuXG4gICAgaW5wdXQkNy5mb3JtYXQubGFiID0gbGFiMnJnYl8xO1xuXG4gICAgaW5wdXQkNy5hdXRvZGV0ZWN0LnB1c2goe1xuICAgICAgICBwOiAyLFxuICAgICAgICB0ZXN0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICAgICAgYXJncyA9IHVucGFjayRmKGFyZ3MsICdsYWInKTtcbiAgICAgICAgICAgIGlmICh0eXBlJGUoYXJncykgPT09ICdhcnJheScgJiYgYXJncy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2xhYic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHZhciB1bnBhY2skZSA9IHV0aWxzLnVucGFjaztcbiAgICB2YXIgUkFEMkRFRyA9IHV0aWxzLlJBRDJERUc7XG4gICAgdmFyIHNxcnQkMyA9IE1hdGguc3FydDtcbiAgICB2YXIgYXRhbjIkMiA9IE1hdGguYXRhbjI7XG4gICAgdmFyIHJvdW5kJDIgPSBNYXRoLnJvdW5kO1xuXG4gICAgdmFyIGxhYjJsY2gkMiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICB2YXIgcmVmID0gdW5wYWNrJGUoYXJncywgJ2xhYicpO1xuICAgICAgICB2YXIgbCA9IHJlZlswXTtcbiAgICAgICAgdmFyIGEgPSByZWZbMV07XG4gICAgICAgIHZhciBiID0gcmVmWzJdO1xuICAgICAgICB2YXIgYyA9IHNxcnQkMyhhICogYSArIGIgKiBiKTtcbiAgICAgICAgdmFyIGggPSAoYXRhbjIkMihiLCBhKSAqIFJBRDJERUcgKyAzNjApICUgMzYwO1xuICAgICAgICBpZiAocm91bmQkMihjKjEwMDAwKSA9PT0gMCkgeyBoID0gTnVtYmVyLk5hTjsgfVxuICAgICAgICByZXR1cm4gW2wsIGMsIGhdO1xuICAgIH07XG5cbiAgICB2YXIgbGFiMmxjaF8xID0gbGFiMmxjaCQyO1xuXG4gICAgdmFyIHVucGFjayRkID0gdXRpbHMudW5wYWNrO1xuICAgIHZhciByZ2IybGFiID0gcmdiMmxhYl8xO1xuICAgIHZhciBsYWIybGNoJDEgPSBsYWIybGNoXzE7XG5cbiAgICB2YXIgcmdiMmxjaCQxID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHZhciByZWYgPSB1bnBhY2skZChhcmdzLCAncmdiJyk7XG4gICAgICAgIHZhciByID0gcmVmWzBdO1xuICAgICAgICB2YXIgZyA9IHJlZlsxXTtcbiAgICAgICAgdmFyIGIgPSByZWZbMl07XG4gICAgICAgIHZhciByZWYkMSA9IHJnYjJsYWIocixnLGIpO1xuICAgICAgICB2YXIgbCA9IHJlZiQxWzBdO1xuICAgICAgICB2YXIgYSA9IHJlZiQxWzFdO1xuICAgICAgICB2YXIgYl8gPSByZWYkMVsyXTtcbiAgICAgICAgcmV0dXJuIGxhYjJsY2gkMShsLGEsYl8pO1xuICAgIH07XG5cbiAgICB2YXIgcmdiMmxjaF8xID0gcmdiMmxjaCQxO1xuXG4gICAgdmFyIHVucGFjayRjID0gdXRpbHMudW5wYWNrO1xuICAgIHZhciBERUcyUkFEID0gdXRpbHMuREVHMlJBRDtcbiAgICB2YXIgc2luJDMgPSBNYXRoLnNpbjtcbiAgICB2YXIgY29zJDMgPSBNYXRoLmNvcztcblxuICAgIHZhciBsY2gybGFiJDIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgLypcbiAgICAgICAgQ29udmVydCBmcm9tIGEgcXVhbGl0YXRpdmUgcGFyYW1ldGVyIGggYW5kIGEgcXVhbnRpdGF0aXZlIHBhcmFtZXRlciBsIHRvIGEgMjQtYml0IHBpeGVsLlxuICAgICAgICBUaGVzZSBmb3JtdWxhcyB3ZXJlIGludmVudGVkIGJ5IERhdmlkIERhbHJ5bXBsZSB0byBvYnRhaW4gbWF4aW11bSBjb250cmFzdCB3aXRob3V0IGdvaW5nXG4gICAgICAgIG91dCBvZiBnYW11dCBpZiB0aGUgcGFyYW1ldGVycyBhcmUgaW4gdGhlIHJhbmdlIDAtMS5cblxuICAgICAgICBBIHNhdHVyYXRpb24gbXVsdGlwbGllciB3YXMgYWRkZWQgYnkgR3JlZ29yIEFpc2NoXG4gICAgICAgICovXG4gICAgICAgIHZhciByZWYgPSB1bnBhY2skYyhhcmdzLCAnbGNoJyk7XG4gICAgICAgIHZhciBsID0gcmVmWzBdO1xuICAgICAgICB2YXIgYyA9IHJlZlsxXTtcbiAgICAgICAgdmFyIGggPSByZWZbMl07XG4gICAgICAgIGlmIChpc05hTihoKSkgeyBoID0gMDsgfVxuICAgICAgICBoID0gaCAqIERFRzJSQUQ7XG4gICAgICAgIHJldHVybiBbbCwgY29zJDMoaCkgKiBjLCBzaW4kMyhoKSAqIGNdXG4gICAgfTtcblxuICAgIHZhciBsY2gybGFiXzEgPSBsY2gybGFiJDI7XG5cbiAgICB2YXIgdW5wYWNrJGIgPSB1dGlscy51bnBhY2s7XG4gICAgdmFyIGxjaDJsYWIkMSA9IGxjaDJsYWJfMTtcbiAgICB2YXIgbGFiMnJnYiA9IGxhYjJyZ2JfMTtcblxuICAgIHZhciBsY2gycmdiJDEgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgYXJncyA9IHVucGFjayRiKGFyZ3MsICdsY2gnKTtcbiAgICAgICAgdmFyIGwgPSBhcmdzWzBdO1xuICAgICAgICB2YXIgYyA9IGFyZ3NbMV07XG4gICAgICAgIHZhciBoID0gYXJnc1syXTtcbiAgICAgICAgdmFyIHJlZiA9IGxjaDJsYWIkMSAobCxjLGgpO1xuICAgICAgICB2YXIgTCA9IHJlZlswXTtcbiAgICAgICAgdmFyIGEgPSByZWZbMV07XG4gICAgICAgIHZhciBiXyA9IHJlZlsyXTtcbiAgICAgICAgdmFyIHJlZiQxID0gbGFiMnJnYiAoTCxhLGJfKTtcbiAgICAgICAgdmFyIHIgPSByZWYkMVswXTtcbiAgICAgICAgdmFyIGcgPSByZWYkMVsxXTtcbiAgICAgICAgdmFyIGIgPSByZWYkMVsyXTtcbiAgICAgICAgcmV0dXJuIFtyLCBnLCBiLCBhcmdzLmxlbmd0aCA+IDMgPyBhcmdzWzNdIDogMV07XG4gICAgfTtcblxuICAgIHZhciBsY2gycmdiXzEgPSBsY2gycmdiJDE7XG5cbiAgICB2YXIgdW5wYWNrJGEgPSB1dGlscy51bnBhY2s7XG4gICAgdmFyIGxjaDJyZ2IgPSBsY2gycmdiXzE7XG5cbiAgICB2YXIgaGNsMnJnYiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICB2YXIgaGNsID0gdW5wYWNrJGEoYXJncywgJ2hjbCcpLnJldmVyc2UoKTtcbiAgICAgICAgcmV0dXJuIGxjaDJyZ2IuYXBwbHkodm9pZCAwLCBoY2wpO1xuICAgIH07XG5cbiAgICB2YXIgaGNsMnJnYl8xID0gaGNsMnJnYjtcblxuICAgIHZhciB1bnBhY2skOSA9IHV0aWxzLnVucGFjaztcbiAgICB2YXIgdHlwZSRkID0gdXRpbHMudHlwZTtcbiAgICB2YXIgY2hyb21hJGEgPSBjaHJvbWFfMTtcbiAgICB2YXIgQ29sb3IkdCA9IENvbG9yXzE7XG4gICAgdmFyIGlucHV0JDYgPSBpbnB1dCRoO1xuXG4gICAgdmFyIHJnYjJsY2ggPSByZ2IybGNoXzE7XG5cbiAgICBDb2xvciR0LnByb3RvdHlwZS5sY2ggPSBmdW5jdGlvbigpIHsgcmV0dXJuIHJnYjJsY2godGhpcy5fcmdiKTsgfTtcbiAgICBDb2xvciR0LnByb3RvdHlwZS5oY2wgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHJnYjJsY2godGhpcy5fcmdiKS5yZXZlcnNlKCk7IH07XG5cbiAgICBjaHJvbWEkYS5sY2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgcmV0dXJuIG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYXBwbHkoIENvbG9yJHQsIFsgbnVsbCBdLmNvbmNhdCggYXJncywgWydsY2gnXSkgKSk7XG4gICAgfTtcbiAgICBjaHJvbWEkYS5oY2wgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgcmV0dXJuIG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYXBwbHkoIENvbG9yJHQsIFsgbnVsbCBdLmNvbmNhdCggYXJncywgWydoY2wnXSkgKSk7XG4gICAgfTtcblxuICAgIGlucHV0JDYuZm9ybWF0LmxjaCA9IGxjaDJyZ2JfMTtcbiAgICBpbnB1dCQ2LmZvcm1hdC5oY2wgPSBoY2wycmdiXzE7XG5cbiAgICBbJ2xjaCcsJ2hjbCddLmZvckVhY2goZnVuY3Rpb24gKG0pIHsgcmV0dXJuIGlucHV0JDYuYXV0b2RldGVjdC5wdXNoKHtcbiAgICAgICAgcDogMixcbiAgICAgICAgdGVzdDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgICAgIGFyZ3MgPSB1bnBhY2skOShhcmdzLCBtKTtcbiAgICAgICAgICAgIGlmICh0eXBlJGQoYXJncykgPT09ICdhcnJheScgJiYgYXJncy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pOyB9KTtcblxuICAgIC8qKlxuICAgIFx0WDExIGNvbG9yIG5hbWVzXG5cbiAgICBcdGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtY29sb3IvI3N2Zy1jb2xvclxuICAgICovXG5cbiAgICB2YXIgdzNjeDExJDEgPSB7XG4gICAgICAgIGFsaWNlYmx1ZTogJyNmMGY4ZmYnLFxuICAgICAgICBhbnRpcXVld2hpdGU6ICcjZmFlYmQ3JyxcbiAgICAgICAgYXF1YTogJyMwMGZmZmYnLFxuICAgICAgICBhcXVhbWFyaW5lOiAnIzdmZmZkNCcsXG4gICAgICAgIGF6dXJlOiAnI2YwZmZmZicsXG4gICAgICAgIGJlaWdlOiAnI2Y1ZjVkYycsXG4gICAgICAgIGJpc3F1ZTogJyNmZmU0YzQnLFxuICAgICAgICBibGFjazogJyMwMDAwMDAnLFxuICAgICAgICBibGFuY2hlZGFsbW9uZDogJyNmZmViY2QnLFxuICAgICAgICBibHVlOiAnIzAwMDBmZicsXG4gICAgICAgIGJsdWV2aW9sZXQ6ICcjOGEyYmUyJyxcbiAgICAgICAgYnJvd246ICcjYTUyYTJhJyxcbiAgICAgICAgYnVybHl3b29kOiAnI2RlYjg4NycsXG4gICAgICAgIGNhZGV0Ymx1ZTogJyM1ZjllYTAnLFxuICAgICAgICBjaGFydHJldXNlOiAnIzdmZmYwMCcsXG4gICAgICAgIGNob2NvbGF0ZTogJyNkMjY5MWUnLFxuICAgICAgICBjb3JhbDogJyNmZjdmNTAnLFxuICAgICAgICBjb3JuZmxvd2VyOiAnIzY0OTVlZCcsXG4gICAgICAgIGNvcm5mbG93ZXJibHVlOiAnIzY0OTVlZCcsXG4gICAgICAgIGNvcm5zaWxrOiAnI2ZmZjhkYycsXG4gICAgICAgIGNyaW1zb246ICcjZGMxNDNjJyxcbiAgICAgICAgY3lhbjogJyMwMGZmZmYnLFxuICAgICAgICBkYXJrYmx1ZTogJyMwMDAwOGInLFxuICAgICAgICBkYXJrY3lhbjogJyMwMDhiOGInLFxuICAgICAgICBkYXJrZ29sZGVucm9kOiAnI2I4ODYwYicsXG4gICAgICAgIGRhcmtncmF5OiAnI2E5YTlhOScsXG4gICAgICAgIGRhcmtncmVlbjogJyMwMDY0MDAnLFxuICAgICAgICBkYXJrZ3JleTogJyNhOWE5YTknLFxuICAgICAgICBkYXJra2hha2k6ICcjYmRiNzZiJyxcbiAgICAgICAgZGFya21hZ2VudGE6ICcjOGIwMDhiJyxcbiAgICAgICAgZGFya29saXZlZ3JlZW46ICcjNTU2YjJmJyxcbiAgICAgICAgZGFya29yYW5nZTogJyNmZjhjMDAnLFxuICAgICAgICBkYXJrb3JjaGlkOiAnIzk5MzJjYycsXG4gICAgICAgIGRhcmtyZWQ6ICcjOGIwMDAwJyxcbiAgICAgICAgZGFya3NhbG1vbjogJyNlOTk2N2EnLFxuICAgICAgICBkYXJrc2VhZ3JlZW46ICcjOGZiYzhmJyxcbiAgICAgICAgZGFya3NsYXRlYmx1ZTogJyM0ODNkOGInLFxuICAgICAgICBkYXJrc2xhdGVncmF5OiAnIzJmNGY0ZicsXG4gICAgICAgIGRhcmtzbGF0ZWdyZXk6ICcjMmY0ZjRmJyxcbiAgICAgICAgZGFya3R1cnF1b2lzZTogJyMwMGNlZDEnLFxuICAgICAgICBkYXJrdmlvbGV0OiAnIzk0MDBkMycsXG4gICAgICAgIGRlZXBwaW5rOiAnI2ZmMTQ5MycsXG4gICAgICAgIGRlZXBza3libHVlOiAnIzAwYmZmZicsXG4gICAgICAgIGRpbWdyYXk6ICcjNjk2OTY5JyxcbiAgICAgICAgZGltZ3JleTogJyM2OTY5NjknLFxuICAgICAgICBkb2RnZXJibHVlOiAnIzFlOTBmZicsXG4gICAgICAgIGZpcmVicmljazogJyNiMjIyMjInLFxuICAgICAgICBmbG9yYWx3aGl0ZTogJyNmZmZhZjAnLFxuICAgICAgICBmb3Jlc3RncmVlbjogJyMyMjhiMjInLFxuICAgICAgICBmdWNoc2lhOiAnI2ZmMDBmZicsXG4gICAgICAgIGdhaW5zYm9ybzogJyNkY2RjZGMnLFxuICAgICAgICBnaG9zdHdoaXRlOiAnI2Y4ZjhmZicsXG4gICAgICAgIGdvbGQ6ICcjZmZkNzAwJyxcbiAgICAgICAgZ29sZGVucm9kOiAnI2RhYTUyMCcsXG4gICAgICAgIGdyYXk6ICcjODA4MDgwJyxcbiAgICAgICAgZ3JlZW46ICcjMDA4MDAwJyxcbiAgICAgICAgZ3JlZW55ZWxsb3c6ICcjYWRmZjJmJyxcbiAgICAgICAgZ3JleTogJyM4MDgwODAnLFxuICAgICAgICBob25leWRldzogJyNmMGZmZjAnLFxuICAgICAgICBob3RwaW5rOiAnI2ZmNjliNCcsXG4gICAgICAgIGluZGlhbnJlZDogJyNjZDVjNWMnLFxuICAgICAgICBpbmRpZ286ICcjNGIwMDgyJyxcbiAgICAgICAgaXZvcnk6ICcjZmZmZmYwJyxcbiAgICAgICAga2hha2k6ICcjZjBlNjhjJyxcbiAgICAgICAgbGFzZXJsZW1vbjogJyNmZmZmNTQnLFxuICAgICAgICBsYXZlbmRlcjogJyNlNmU2ZmEnLFxuICAgICAgICBsYXZlbmRlcmJsdXNoOiAnI2ZmZjBmNScsXG4gICAgICAgIGxhd25ncmVlbjogJyM3Y2ZjMDAnLFxuICAgICAgICBsZW1vbmNoaWZmb246ICcjZmZmYWNkJyxcbiAgICAgICAgbGlnaHRibHVlOiAnI2FkZDhlNicsXG4gICAgICAgIGxpZ2h0Y29yYWw6ICcjZjA4MDgwJyxcbiAgICAgICAgbGlnaHRjeWFuOiAnI2UwZmZmZicsXG4gICAgICAgIGxpZ2h0Z29sZGVucm9kOiAnI2ZhZmFkMicsXG4gICAgICAgIGxpZ2h0Z29sZGVucm9keWVsbG93OiAnI2ZhZmFkMicsXG4gICAgICAgIGxpZ2h0Z3JheTogJyNkM2QzZDMnLFxuICAgICAgICBsaWdodGdyZWVuOiAnIzkwZWU5MCcsXG4gICAgICAgIGxpZ2h0Z3JleTogJyNkM2QzZDMnLFxuICAgICAgICBsaWdodHBpbms6ICcjZmZiNmMxJyxcbiAgICAgICAgbGlnaHRzYWxtb246ICcjZmZhMDdhJyxcbiAgICAgICAgbGlnaHRzZWFncmVlbjogJyMyMGIyYWEnLFxuICAgICAgICBsaWdodHNreWJsdWU6ICcjODdjZWZhJyxcbiAgICAgICAgbGlnaHRzbGF0ZWdyYXk6ICcjNzc4ODk5JyxcbiAgICAgICAgbGlnaHRzbGF0ZWdyZXk6ICcjNzc4ODk5JyxcbiAgICAgICAgbGlnaHRzdGVlbGJsdWU6ICcjYjBjNGRlJyxcbiAgICAgICAgbGlnaHR5ZWxsb3c6ICcjZmZmZmUwJyxcbiAgICAgICAgbGltZTogJyMwMGZmMDAnLFxuICAgICAgICBsaW1lZ3JlZW46ICcjMzJjZDMyJyxcbiAgICAgICAgbGluZW46ICcjZmFmMGU2JyxcbiAgICAgICAgbWFnZW50YTogJyNmZjAwZmYnLFxuICAgICAgICBtYXJvb246ICcjODAwMDAwJyxcbiAgICAgICAgbWFyb29uMjogJyM3ZjAwMDAnLFxuICAgICAgICBtYXJvb24zOiAnI2IwMzA2MCcsXG4gICAgICAgIG1lZGl1bWFxdWFtYXJpbmU6ICcjNjZjZGFhJyxcbiAgICAgICAgbWVkaXVtYmx1ZTogJyMwMDAwY2QnLFxuICAgICAgICBtZWRpdW1vcmNoaWQ6ICcjYmE1NWQzJyxcbiAgICAgICAgbWVkaXVtcHVycGxlOiAnIzkzNzBkYicsXG4gICAgICAgIG1lZGl1bXNlYWdyZWVuOiAnIzNjYjM3MScsXG4gICAgICAgIG1lZGl1bXNsYXRlYmx1ZTogJyM3YjY4ZWUnLFxuICAgICAgICBtZWRpdW1zcHJpbmdncmVlbjogJyMwMGZhOWEnLFxuICAgICAgICBtZWRpdW10dXJxdW9pc2U6ICcjNDhkMWNjJyxcbiAgICAgICAgbWVkaXVtdmlvbGV0cmVkOiAnI2M3MTU4NScsXG4gICAgICAgIG1pZG5pZ2h0Ymx1ZTogJyMxOTE5NzAnLFxuICAgICAgICBtaW50Y3JlYW06ICcjZjVmZmZhJyxcbiAgICAgICAgbWlzdHlyb3NlOiAnI2ZmZTRlMScsXG4gICAgICAgIG1vY2Nhc2luOiAnI2ZmZTRiNScsXG4gICAgICAgIG5hdmFqb3doaXRlOiAnI2ZmZGVhZCcsXG4gICAgICAgIG5hdnk6ICcjMDAwMDgwJyxcbiAgICAgICAgb2xkbGFjZTogJyNmZGY1ZTYnLFxuICAgICAgICBvbGl2ZTogJyM4MDgwMDAnLFxuICAgICAgICBvbGl2ZWRyYWI6ICcjNmI4ZTIzJyxcbiAgICAgICAgb3JhbmdlOiAnI2ZmYTUwMCcsXG4gICAgICAgIG9yYW5nZXJlZDogJyNmZjQ1MDAnLFxuICAgICAgICBvcmNoaWQ6ICcjZGE3MGQ2JyxcbiAgICAgICAgcGFsZWdvbGRlbnJvZDogJyNlZWU4YWEnLFxuICAgICAgICBwYWxlZ3JlZW46ICcjOThmYjk4JyxcbiAgICAgICAgcGFsZXR1cnF1b2lzZTogJyNhZmVlZWUnLFxuICAgICAgICBwYWxldmlvbGV0cmVkOiAnI2RiNzA5MycsXG4gICAgICAgIHBhcGF5YXdoaXA6ICcjZmZlZmQ1JyxcbiAgICAgICAgcGVhY2hwdWZmOiAnI2ZmZGFiOScsXG4gICAgICAgIHBlcnU6ICcjY2Q4NTNmJyxcbiAgICAgICAgcGluazogJyNmZmMwY2InLFxuICAgICAgICBwbHVtOiAnI2RkYTBkZCcsXG4gICAgICAgIHBvd2RlcmJsdWU6ICcjYjBlMGU2JyxcbiAgICAgICAgcHVycGxlOiAnIzgwMDA4MCcsXG4gICAgICAgIHB1cnBsZTI6ICcjN2YwMDdmJyxcbiAgICAgICAgcHVycGxlMzogJyNhMDIwZjAnLFxuICAgICAgICByZWJlY2NhcHVycGxlOiAnIzY2MzM5OScsXG4gICAgICAgIHJlZDogJyNmZjAwMDAnLFxuICAgICAgICByb3N5YnJvd246ICcjYmM4ZjhmJyxcbiAgICAgICAgcm95YWxibHVlOiAnIzQxNjllMScsXG4gICAgICAgIHNhZGRsZWJyb3duOiAnIzhiNDUxMycsXG4gICAgICAgIHNhbG1vbjogJyNmYTgwNzInLFxuICAgICAgICBzYW5keWJyb3duOiAnI2Y0YTQ2MCcsXG4gICAgICAgIHNlYWdyZWVuOiAnIzJlOGI1NycsXG4gICAgICAgIHNlYXNoZWxsOiAnI2ZmZjVlZScsXG4gICAgICAgIHNpZW5uYTogJyNhMDUyMmQnLFxuICAgICAgICBzaWx2ZXI6ICcjYzBjMGMwJyxcbiAgICAgICAgc2t5Ymx1ZTogJyM4N2NlZWInLFxuICAgICAgICBzbGF0ZWJsdWU6ICcjNmE1YWNkJyxcbiAgICAgICAgc2xhdGVncmF5OiAnIzcwODA5MCcsXG4gICAgICAgIHNsYXRlZ3JleTogJyM3MDgwOTAnLFxuICAgICAgICBzbm93OiAnI2ZmZmFmYScsXG4gICAgICAgIHNwcmluZ2dyZWVuOiAnIzAwZmY3ZicsXG4gICAgICAgIHN0ZWVsYmx1ZTogJyM0NjgyYjQnLFxuICAgICAgICB0YW46ICcjZDJiNDhjJyxcbiAgICAgICAgdGVhbDogJyMwMDgwODAnLFxuICAgICAgICB0aGlzdGxlOiAnI2Q4YmZkOCcsXG4gICAgICAgIHRvbWF0bzogJyNmZjYzNDcnLFxuICAgICAgICB0dXJxdW9pc2U6ICcjNDBlMGQwJyxcbiAgICAgICAgdmlvbGV0OiAnI2VlODJlZScsXG4gICAgICAgIHdoZWF0OiAnI2Y1ZGViMycsXG4gICAgICAgIHdoaXRlOiAnI2ZmZmZmZicsXG4gICAgICAgIHdoaXRlc21va2U6ICcjZjVmNWY1JyxcbiAgICAgICAgeWVsbG93OiAnI2ZmZmYwMCcsXG4gICAgICAgIHllbGxvd2dyZWVuOiAnIzlhY2QzMidcbiAgICB9O1xuXG4gICAgdmFyIHczY3gxMV8xID0gdzNjeDExJDE7XG5cbiAgICB2YXIgQ29sb3IkcyA9IENvbG9yXzE7XG4gICAgdmFyIGlucHV0JDUgPSBpbnB1dCRoO1xuICAgIHZhciB0eXBlJGMgPSB1dGlscy50eXBlO1xuXG4gICAgdmFyIHczY3gxMSA9IHczY3gxMV8xO1xuICAgIHZhciBoZXgycmdiID0gaGV4MnJnYl8xO1xuICAgIHZhciByZ2IyaGV4ID0gcmdiMmhleF8xO1xuXG4gICAgQ29sb3Ikcy5wcm90b3R5cGUubmFtZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgaGV4ID0gcmdiMmhleCh0aGlzLl9yZ2IsICdyZ2InKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxpc3QgPSBPYmplY3Qua2V5cyh3M2N4MTEpOyBpIDwgbGlzdC5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgdmFyIG4gPSBsaXN0W2ldO1xuXG4gICAgICAgICAgICBpZiAodzNjeDExW25dID09PSBoZXgpIHsgcmV0dXJuIG4udG9Mb3dlckNhc2UoKTsgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBoZXg7XG4gICAgfTtcblxuICAgIGlucHV0JDUuZm9ybWF0Lm5hbWVkID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKHczY3gxMVtuYW1lXSkgeyByZXR1cm4gaGV4MnJnYih3M2N4MTFbbmFtZV0pOyB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93biBjb2xvciBuYW1lOiAnK25hbWUpO1xuICAgIH07XG5cbiAgICBpbnB1dCQ1LmF1dG9kZXRlY3QucHVzaCh7XG4gICAgICAgIHA6IDUsXG4gICAgICAgIHRlc3Q6IGZ1bmN0aW9uIChoKSB7XG4gICAgICAgICAgICB2YXIgcmVzdCA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIHdoaWxlICggbGVuLS0gPiAwICkgcmVzdFsgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiArIDEgXTtcblxuICAgICAgICAgICAgaWYgKCFyZXN0Lmxlbmd0aCAmJiB0eXBlJGMoaCkgPT09ICdzdHJpbmcnICYmIHczY3gxMVtoLnRvTG93ZXJDYXNlKCldKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICduYW1lZCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHZhciB1bnBhY2skOCA9IHV0aWxzLnVucGFjaztcblxuICAgIHZhciByZ2IybnVtJDEgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgdmFyIHJlZiA9IHVucGFjayQ4KGFyZ3MsICdyZ2InKTtcbiAgICAgICAgdmFyIHIgPSByZWZbMF07XG4gICAgICAgIHZhciBnID0gcmVmWzFdO1xuICAgICAgICB2YXIgYiA9IHJlZlsyXTtcbiAgICAgICAgcmV0dXJuIChyIDw8IDE2KSArIChnIDw8IDgpICsgYjtcbiAgICB9O1xuXG4gICAgdmFyIHJnYjJudW1fMSA9IHJnYjJudW0kMTtcblxuICAgIHZhciB0eXBlJGIgPSB1dGlscy50eXBlO1xuXG4gICAgdmFyIG51bTJyZ2IgPSBmdW5jdGlvbiAobnVtKSB7XG4gICAgICAgIGlmICh0eXBlJGIobnVtKSA9PSBcIm51bWJlclwiICYmIG51bSA+PSAwICYmIG51bSA8PSAweEZGRkZGRikge1xuICAgICAgICAgICAgdmFyIHIgPSBudW0gPj4gMTY7XG4gICAgICAgICAgICB2YXIgZyA9IChudW0gPj4gOCkgJiAweEZGO1xuICAgICAgICAgICAgdmFyIGIgPSBudW0gJiAweEZGO1xuICAgICAgICAgICAgcmV0dXJuIFtyLGcsYiwxXTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIG51bSBjb2xvcjogXCIrbnVtKTtcbiAgICB9O1xuXG4gICAgdmFyIG51bTJyZ2JfMSA9IG51bTJyZ2I7XG5cbiAgICB2YXIgY2hyb21hJDkgPSBjaHJvbWFfMTtcbiAgICB2YXIgQ29sb3IkciA9IENvbG9yXzE7XG4gICAgdmFyIGlucHV0JDQgPSBpbnB1dCRoO1xuICAgIHZhciB0eXBlJGEgPSB1dGlscy50eXBlO1xuXG4gICAgdmFyIHJnYjJudW0gPSByZ2IybnVtXzE7XG5cbiAgICBDb2xvciRyLnByb3RvdHlwZS5udW0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHJnYjJudW0odGhpcy5fcmdiKTtcbiAgICB9O1xuXG4gICAgY2hyb21hJDkubnVtID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHJldHVybiBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KCBDb2xvciRyLCBbIG51bGwgXS5jb25jYXQoIGFyZ3MsIFsnbnVtJ10pICkpO1xuICAgIH07XG5cbiAgICBpbnB1dCQ0LmZvcm1hdC5udW0gPSBudW0ycmdiXzE7XG5cbiAgICBpbnB1dCQ0LmF1dG9kZXRlY3QucHVzaCh7XG4gICAgICAgIHA6IDUsXG4gICAgICAgIHRlc3Q6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPT09IDEgJiYgdHlwZSRhKGFyZ3NbMF0pID09PSAnbnVtYmVyJyAmJiBhcmdzWzBdID49IDAgJiYgYXJnc1swXSA8PSAweEZGRkZGRikge1xuICAgICAgICAgICAgICAgIHJldHVybiAnbnVtJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgdmFyIGNocm9tYSQ4ID0gY2hyb21hXzE7XG4gICAgdmFyIENvbG9yJHEgPSBDb2xvcl8xO1xuICAgIHZhciBpbnB1dCQzID0gaW5wdXQkaDtcbiAgICB2YXIgdW5wYWNrJDcgPSB1dGlscy51bnBhY2s7XG4gICAgdmFyIHR5cGUkOSA9IHV0aWxzLnR5cGU7XG4gICAgdmFyIHJvdW5kJDEgPSBNYXRoLnJvdW5kO1xuXG4gICAgQ29sb3IkcS5wcm90b3R5cGUucmdiID0gZnVuY3Rpb24ocm5kKSB7XG4gICAgICAgIGlmICggcm5kID09PSB2b2lkIDAgKSBybmQ9dHJ1ZTtcblxuICAgICAgICBpZiAocm5kID09PSBmYWxzZSkgeyByZXR1cm4gdGhpcy5fcmdiLnNsaWNlKDAsMyk7IH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX3JnYi5zbGljZSgwLDMpLm1hcChyb3VuZCQxKTtcbiAgICB9O1xuXG4gICAgQ29sb3IkcS5wcm90b3R5cGUucmdiYSA9IGZ1bmN0aW9uKHJuZCkge1xuICAgICAgICBpZiAoIHJuZCA9PT0gdm9pZCAwICkgcm5kPXRydWU7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX3JnYi5zbGljZSgwLDQpLm1hcChmdW5jdGlvbiAodixpKSB7XG4gICAgICAgICAgICByZXR1cm4gaTwzID8gKHJuZCA9PT0gZmFsc2UgPyB2IDogcm91bmQkMSh2KSkgOiB2O1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgY2hyb21hJDgucmdiID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHJldHVybiBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KCBDb2xvciRxLCBbIG51bGwgXS5jb25jYXQoIGFyZ3MsIFsncmdiJ10pICkpO1xuICAgIH07XG5cbiAgICBpbnB1dCQzLmZvcm1hdC5yZ2IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgdmFyIHJnYmEgPSB1bnBhY2skNyhhcmdzLCAncmdiYScpO1xuICAgICAgICBpZiAocmdiYVszXSA9PT0gdW5kZWZpbmVkKSB7IHJnYmFbM10gPSAxOyB9XG4gICAgICAgIHJldHVybiByZ2JhO1xuICAgIH07XG5cbiAgICBpbnB1dCQzLmF1dG9kZXRlY3QucHVzaCh7XG4gICAgICAgIHA6IDMsXG4gICAgICAgIHRlc3Q6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgICAgICBhcmdzID0gdW5wYWNrJDcoYXJncywgJ3JnYmEnKTtcbiAgICAgICAgICAgIGlmICh0eXBlJDkoYXJncykgPT09ICdhcnJheScgJiYgKGFyZ3MubGVuZ3RoID09PSAzIHx8XG4gICAgICAgICAgICAgICAgYXJncy5sZW5ndGggPT09IDQgJiYgdHlwZSQ5KGFyZ3NbM10pID09ICdudW1iZXInICYmIGFyZ3NbM10gPj0gMCAmJiBhcmdzWzNdIDw9IDEpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdyZ2InO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICAvKlxuICAgICAqIEJhc2VkIG9uIGltcGxlbWVudGF0aW9uIGJ5IE5laWwgQmFydGxldHRcbiAgICAgKiBodHRwczovL2dpdGh1Yi5jb20vbmVpbGJhcnRsZXR0L2NvbG9yLXRlbXBlcmF0dXJlXG4gICAgICovXG5cbiAgICB2YXIgbG9nJDEgPSBNYXRoLmxvZztcblxuICAgIHZhciB0ZW1wZXJhdHVyZTJyZ2IkMSA9IGZ1bmN0aW9uIChrZWx2aW4pIHtcbiAgICAgICAgdmFyIHRlbXAgPSBrZWx2aW4gLyAxMDA7XG4gICAgICAgIHZhciByLGcsYjtcbiAgICAgICAgaWYgKHRlbXAgPCA2Nikge1xuICAgICAgICAgICAgciA9IDI1NTtcbiAgICAgICAgICAgIGcgPSB0ZW1wIDwgNiA/IDAgOiAtMTU1LjI1NDg1NTYyNzA5MTc5IC0gMC40NDU5Njk1MDQ2OTU3OTEzMyAqIChnID0gdGVtcC0yKSArIDEwNC40OTIxNjE5OTM5Mzg4OCAqIGxvZyQxKGcpO1xuICAgICAgICAgICAgYiA9IHRlbXAgPCAyMCA/IDAgOiAtMjU0Ljc2OTM1MTg0MTIwOTAyICsgMC44Mjc0MDk2MDY0MDA3Mzk1ICogKGIgPSB0ZW1wLTEwKSArIDExNS42Nzk5NDQwMTA2NjE0NyAqIGxvZyQxKGIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgciA9IDM1MS45NzY5MDU2NjgwNTY5MyArIDAuMTE0MjA2NDUzNzg0MTY1ICogKHIgPSB0ZW1wLTU1KSAtIDQwLjI1MzY2MzA5MzMyMTI3ICogbG9nJDEocik7XG4gICAgICAgICAgICBnID0gMzI1LjQ0OTQxMjU3MTE5NzQgKyAwLjA3OTQzNDU2NTM2NjYyMzQyICogKGcgPSB0ZW1wLTUwKSAtIDI4LjA4NTI5NjM1MDc5NTcgKiBsb2ckMShnKTtcbiAgICAgICAgICAgIGIgPSAyNTU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtyLGcsYiwxXTtcbiAgICB9O1xuXG4gICAgdmFyIHRlbXBlcmF0dXJlMnJnYl8xID0gdGVtcGVyYXR1cmUycmdiJDE7XG5cbiAgICAvKlxuICAgICAqIEJhc2VkIG9uIGltcGxlbWVudGF0aW9uIGJ5IE5laWwgQmFydGxldHRcbiAgICAgKiBodHRwczovL2dpdGh1Yi5jb20vbmVpbGJhcnRsZXR0L2NvbG9yLXRlbXBlcmF0dXJlXG4gICAgICoqL1xuXG4gICAgdmFyIHRlbXBlcmF0dXJlMnJnYiA9IHRlbXBlcmF0dXJlMnJnYl8xO1xuICAgIHZhciB1bnBhY2skNiA9IHV0aWxzLnVucGFjaztcbiAgICB2YXIgcm91bmQgPSBNYXRoLnJvdW5kO1xuXG4gICAgdmFyIHJnYjJ0ZW1wZXJhdHVyZSQxID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHZhciByZ2IgPSB1bnBhY2skNihhcmdzLCAncmdiJyk7XG4gICAgICAgIHZhciByID0gcmdiWzBdLCBiID0gcmdiWzJdO1xuICAgICAgICB2YXIgbWluVGVtcCA9IDEwMDA7XG4gICAgICAgIHZhciBtYXhUZW1wID0gNDAwMDA7XG4gICAgICAgIHZhciBlcHMgPSAwLjQ7XG4gICAgICAgIHZhciB0ZW1wO1xuICAgICAgICB3aGlsZSAobWF4VGVtcCAtIG1pblRlbXAgPiBlcHMpIHtcbiAgICAgICAgICAgIHRlbXAgPSAobWF4VGVtcCArIG1pblRlbXApICogMC41O1xuICAgICAgICAgICAgdmFyIHJnYiQxID0gdGVtcGVyYXR1cmUycmdiKHRlbXApO1xuICAgICAgICAgICAgaWYgKChyZ2IkMVsyXSAvIHJnYiQxWzBdKSA+PSAoYiAvIHIpKSB7XG4gICAgICAgICAgICAgICAgbWF4VGVtcCA9IHRlbXA7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG1pblRlbXAgPSB0ZW1wO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByb3VuZCh0ZW1wKTtcbiAgICB9O1xuXG4gICAgdmFyIHJnYjJ0ZW1wZXJhdHVyZV8xID0gcmdiMnRlbXBlcmF0dXJlJDE7XG5cbiAgICB2YXIgY2hyb21hJDcgPSBjaHJvbWFfMTtcbiAgICB2YXIgQ29sb3IkcCA9IENvbG9yXzE7XG4gICAgdmFyIGlucHV0JDIgPSBpbnB1dCRoO1xuXG4gICAgdmFyIHJnYjJ0ZW1wZXJhdHVyZSA9IHJnYjJ0ZW1wZXJhdHVyZV8xO1xuXG4gICAgQ29sb3IkcC5wcm90b3R5cGUudGVtcCA9XG4gICAgQ29sb3IkcC5wcm90b3R5cGUua2VsdmluID1cbiAgICBDb2xvciRwLnByb3RvdHlwZS50ZW1wZXJhdHVyZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gcmdiMnRlbXBlcmF0dXJlKHRoaXMuX3JnYik7XG4gICAgfTtcblxuICAgIGNocm9tYSQ3LnRlbXAgPVxuICAgIGNocm9tYSQ3LmtlbHZpbiA9XG4gICAgY2hyb21hJDcudGVtcGVyYXR1cmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgcmV0dXJuIG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYXBwbHkoIENvbG9yJHAsIFsgbnVsbCBdLmNvbmNhdCggYXJncywgWyd0ZW1wJ10pICkpO1xuICAgIH07XG5cbiAgICBpbnB1dCQyLmZvcm1hdC50ZW1wID1cbiAgICBpbnB1dCQyLmZvcm1hdC5rZWx2aW4gPVxuICAgIGlucHV0JDIuZm9ybWF0LnRlbXBlcmF0dXJlID0gdGVtcGVyYXR1cmUycmdiXzE7XG5cbiAgICB2YXIgdW5wYWNrJDUgPSB1dGlscy51bnBhY2s7XG4gICAgdmFyIGNicnQgPSBNYXRoLmNicnQ7XG4gICAgdmFyIHBvdyQ4ID0gTWF0aC5wb3c7XG4gICAgdmFyIHNpZ24kMSA9IE1hdGguc2lnbjtcblxuICAgIHZhciByZ2Iyb2tsYWIkMiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICAvLyBPS0xhYiBjb2xvciBzcGFjZSBpbXBsZW1lbnRhdGlvbiB0YWtlbiBmcm9tXG4gICAgICAgIC8vIGh0dHBzOi8vYm90dG9zc29uLmdpdGh1Yi5pby9wb3N0cy9va2xhYi9cbiAgICAgICAgdmFyIHJlZiA9IHVucGFjayQ1KGFyZ3MsICdyZ2InKTtcbiAgICAgICAgdmFyIHIgPSByZWZbMF07XG4gICAgICAgIHZhciBnID0gcmVmWzFdO1xuICAgICAgICB2YXIgYiA9IHJlZlsyXTtcbiAgICAgICAgdmFyIHJlZiQxID0gW3JnYjJscmdiKHIgLyAyNTUpLCByZ2IybHJnYihnIC8gMjU1KSwgcmdiMmxyZ2IoYiAvIDI1NSldO1xuICAgICAgICB2YXIgbHIgPSByZWYkMVswXTtcbiAgICAgICAgdmFyIGxnID0gcmVmJDFbMV07XG4gICAgICAgIHZhciBsYiA9IHJlZiQxWzJdO1xuICAgICAgICB2YXIgbCA9IGNicnQoMC40MTIyMjE0NzA4ICogbHIgKyAwLjUzNjMzMjUzNjMgKiBsZyArIDAuMDUxNDQ1OTkyOSAqIGxiKTtcbiAgICAgICAgdmFyIG0gPSBjYnJ0KDAuMjExOTAzNDk4MiAqIGxyICsgMC42ODA2OTk1NDUxICogbGcgKyAwLjEwNzM5Njk1NjYgKiBsYik7XG4gICAgICAgIHZhciBzID0gY2JydCgwLjA4ODMwMjQ2MTkgKiBsciArIDAuMjgxNzE4ODM3NiAqIGxnICsgMC42Mjk5Nzg3MDA1ICogbGIpO1xuXG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAwLjIxMDQ1NDI1NTMgKiBsICsgMC43OTM2MTc3ODUgKiBtIC0gMC4wMDQwNzIwNDY4ICogcyxcbiAgICAgICAgICAgIDEuOTc3OTk4NDk1MSAqIGwgLSAyLjQyODU5MjIwNSAqIG0gKyAwLjQ1MDU5MzcwOTkgKiBzLFxuICAgICAgICAgICAgMC4wMjU5MDQwMzcxICogbCArIDAuNzgyNzcxNzY2MiAqIG0gLSAwLjgwODY3NTc2NiAqIHNcbiAgICAgICAgXTtcbiAgICB9O1xuXG4gICAgdmFyIHJnYjJva2xhYl8xID0gcmdiMm9rbGFiJDI7XG5cbiAgICBmdW5jdGlvbiByZ2IybHJnYihjKSB7XG4gICAgICAgIHZhciBhYnMgPSBNYXRoLmFicyhjKTtcbiAgICAgICAgaWYgKGFicyA8IDAuMDQwNDUpIHtcbiAgICAgICAgICAgIHJldHVybiBjIC8gMTIuOTI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChzaWduJDEoYykgfHwgMSkgKiBwb3ckOCgoYWJzICsgMC4wNTUpIC8gMS4wNTUsIDIuNCk7XG4gICAgfVxuXG4gICAgdmFyIHVucGFjayQ0ID0gdXRpbHMudW5wYWNrO1xuICAgIHZhciBwb3ckNyA9IE1hdGgucG93O1xuICAgIHZhciBzaWduID0gTWF0aC5zaWduO1xuXG4gICAgLypcbiAgICAgKiBMKiBbMC4uMTAwXVxuICAgICAqIGEgWy0xMDAuLjEwMF1cbiAgICAgKiBiIFstMTAwLi4xMDBdXG4gICAgICovXG4gICAgdmFyIG9rbGFiMnJnYiQxID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIGFyZ3MgPSB1bnBhY2skNChhcmdzLCAnbGFiJyk7XG4gICAgICAgIHZhciBMID0gYXJnc1swXTtcbiAgICAgICAgdmFyIGEgPSBhcmdzWzFdO1xuICAgICAgICB2YXIgYiA9IGFyZ3NbMl07XG5cbiAgICAgICAgdmFyIGwgPSBwb3ckNyhMICsgMC4zOTYzMzc3Nzc0ICogYSArIDAuMjE1ODAzNzU3MyAqIGIsIDMpO1xuICAgICAgICB2YXIgbSA9IHBvdyQ3KEwgLSAwLjEwNTU2MTM0NTggKiBhIC0gMC4wNjM4NTQxNzI4ICogYiwgMyk7XG4gICAgICAgIHZhciBzID0gcG93JDcoTCAtIDAuMDg5NDg0MTc3NSAqIGEgLSAxLjI5MTQ4NTU0OCAqIGIsIDMpO1xuXG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAyNTUgKiBscmdiMnJnYigrNC4wNzY3NDE2NjIxICogbCAtIDMuMzA3NzExNTkxMyAqIG0gKyAwLjIzMDk2OTkyOTIgKiBzKSxcbiAgICAgICAgICAgIDI1NSAqIGxyZ2IycmdiKC0xLjI2ODQzODAwNDYgKiBsICsgMi42MDk3NTc0MDExICogbSAtIDAuMzQxMzE5Mzk2NSAqIHMpLFxuICAgICAgICAgICAgMjU1ICogbHJnYjJyZ2IoLTAuMDA0MTk2MDg2MyAqIGwgLSAwLjcwMzQxODYxNDcgKiBtICsgMS43MDc2MTQ3MDEgKiBzKSxcbiAgICAgICAgICAgIGFyZ3MubGVuZ3RoID4gMyA/IGFyZ3NbM10gOiAxXG4gICAgICAgIF07XG4gICAgfTtcblxuICAgIHZhciBva2xhYjJyZ2JfMSA9IG9rbGFiMnJnYiQxO1xuXG4gICAgZnVuY3Rpb24gbHJnYjJyZ2IoYykge1xuICAgICAgICB2YXIgYWJzID0gTWF0aC5hYnMoYyk7XG4gICAgICAgIGlmIChhYnMgPiAwLjAwMzEzMDgpIHtcbiAgICAgICAgICAgIHJldHVybiAoc2lnbihjKSB8fCAxKSAqICgxLjA1NSAqIHBvdyQ3KGFicywgMSAvIDIuNCkgLSAwLjA1NSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGMgKiAxMi45MjtcbiAgICB9XG5cbiAgICB2YXIgdW5wYWNrJDMgPSB1dGlscy51bnBhY2s7XG4gICAgdmFyIHR5cGUkOCA9IHV0aWxzLnR5cGU7XG4gICAgdmFyIGNocm9tYSQ2ID0gY2hyb21hXzE7XG4gICAgdmFyIENvbG9yJG8gPSBDb2xvcl8xO1xuICAgIHZhciBpbnB1dCQxID0gaW5wdXQkaDtcblxuICAgIHZhciByZ2Iyb2tsYWIkMSA9IHJnYjJva2xhYl8xO1xuXG4gICAgQ29sb3Ikby5wcm90b3R5cGUub2tsYWIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiByZ2Iyb2tsYWIkMSh0aGlzLl9yZ2IpO1xuICAgIH07XG5cbiAgICBjaHJvbWEkNi5va2xhYiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICByZXR1cm4gbmV3IChGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5hcHBseSggQ29sb3IkbywgWyBudWxsIF0uY29uY2F0KCBhcmdzLCBbJ29rbGFiJ10pICkpO1xuICAgIH07XG5cbiAgICBpbnB1dCQxLmZvcm1hdC5va2xhYiA9IG9rbGFiMnJnYl8xO1xuXG4gICAgaW5wdXQkMS5hdXRvZGV0ZWN0LnB1c2goe1xuICAgICAgICBwOiAzLFxuICAgICAgICB0ZXN0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICAgICAgYXJncyA9IHVucGFjayQzKGFyZ3MsICdva2xhYicpO1xuICAgICAgICAgICAgaWYgKHR5cGUkOChhcmdzKSA9PT0gJ2FycmF5JyAmJiBhcmdzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgICAgIHJldHVybiAnb2tsYWInO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICB2YXIgdW5wYWNrJDIgPSB1dGlscy51bnBhY2s7XG4gICAgdmFyIHJnYjJva2xhYiA9IHJnYjJva2xhYl8xO1xuICAgIHZhciBsYWIybGNoID0gbGFiMmxjaF8xO1xuXG4gICAgdmFyIHJnYjJva2xjaCQxID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHZhciByZWYgPSB1bnBhY2skMihhcmdzLCAncmdiJyk7XG4gICAgICAgIHZhciByID0gcmVmWzBdO1xuICAgICAgICB2YXIgZyA9IHJlZlsxXTtcbiAgICAgICAgdmFyIGIgPSByZWZbMl07XG4gICAgICAgIHZhciByZWYkMSA9IHJnYjJva2xhYihyLCBnLCBiKTtcbiAgICAgICAgdmFyIGwgPSByZWYkMVswXTtcbiAgICAgICAgdmFyIGEgPSByZWYkMVsxXTtcbiAgICAgICAgdmFyIGJfID0gcmVmJDFbMl07XG4gICAgICAgIHJldHVybiBsYWIybGNoKGwsIGEsIGJfKTtcbiAgICB9O1xuXG4gICAgdmFyIHJnYjJva2xjaF8xID0gcmdiMm9rbGNoJDE7XG5cbiAgICB2YXIgdW5wYWNrJDEgPSB1dGlscy51bnBhY2s7XG4gICAgdmFyIGxjaDJsYWIgPSBsY2gybGFiXzE7XG4gICAgdmFyIG9rbGFiMnJnYiA9IG9rbGFiMnJnYl8xO1xuXG4gICAgdmFyIG9rbGNoMnJnYiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICBhcmdzID0gdW5wYWNrJDEoYXJncywgJ2xjaCcpO1xuICAgICAgICB2YXIgbCA9IGFyZ3NbMF07XG4gICAgICAgIHZhciBjID0gYXJnc1sxXTtcbiAgICAgICAgdmFyIGggPSBhcmdzWzJdO1xuICAgICAgICB2YXIgcmVmID0gbGNoMmxhYihsLCBjLCBoKTtcbiAgICAgICAgdmFyIEwgPSByZWZbMF07XG4gICAgICAgIHZhciBhID0gcmVmWzFdO1xuICAgICAgICB2YXIgYl8gPSByZWZbMl07XG4gICAgICAgIHZhciByZWYkMSA9IG9rbGFiMnJnYihMLCBhLCBiXyk7XG4gICAgICAgIHZhciByID0gcmVmJDFbMF07XG4gICAgICAgIHZhciBnID0gcmVmJDFbMV07XG4gICAgICAgIHZhciBiID0gcmVmJDFbMl07XG4gICAgICAgIHJldHVybiBbciwgZywgYiwgYXJncy5sZW5ndGggPiAzID8gYXJnc1szXSA6IDFdO1xuICAgIH07XG5cbiAgICB2YXIgb2tsY2gycmdiXzEgPSBva2xjaDJyZ2I7XG5cbiAgICB2YXIgdW5wYWNrID0gdXRpbHMudW5wYWNrO1xuICAgIHZhciB0eXBlJDcgPSB1dGlscy50eXBlO1xuICAgIHZhciBjaHJvbWEkNSA9IGNocm9tYV8xO1xuICAgIHZhciBDb2xvciRuID0gQ29sb3JfMTtcbiAgICB2YXIgaW5wdXQgPSBpbnB1dCRoO1xuXG4gICAgdmFyIHJnYjJva2xjaCA9IHJnYjJva2xjaF8xO1xuXG4gICAgQ29sb3Ikbi5wcm90b3R5cGUub2tsY2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiByZ2Iyb2tsY2godGhpcy5fcmdiKTtcbiAgICB9O1xuXG4gICAgY2hyb21hJDUub2tsY2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgcmV0dXJuIG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYXBwbHkoIENvbG9yJG4sIFsgbnVsbCBdLmNvbmNhdCggYXJncywgWydva2xjaCddKSApKTtcbiAgICB9O1xuXG4gICAgaW5wdXQuZm9ybWF0Lm9rbGNoID0gb2tsY2gycmdiXzE7XG5cbiAgICBpbnB1dC5hdXRvZGV0ZWN0LnB1c2goe1xuICAgICAgICBwOiAzLFxuICAgICAgICB0ZXN0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICAgICAgYXJncyA9IHVucGFjayhhcmdzLCAnb2tsY2gnKTtcbiAgICAgICAgICAgIGlmICh0eXBlJDcoYXJncykgPT09ICdhcnJheScgJiYgYXJncy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ29rbGNoJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgdmFyIENvbG9yJG0gPSBDb2xvcl8xO1xuICAgIHZhciB0eXBlJDYgPSB1dGlscy50eXBlO1xuXG4gICAgQ29sb3IkbS5wcm90b3R5cGUuYWxwaGEgPSBmdW5jdGlvbihhLCBtdXRhdGUpIHtcbiAgICAgICAgaWYgKCBtdXRhdGUgPT09IHZvaWQgMCApIG11dGF0ZT1mYWxzZTtcblxuICAgICAgICBpZiAoYSAhPT0gdW5kZWZpbmVkICYmIHR5cGUkNihhKSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIGlmIChtdXRhdGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZ2JbM10gPSBhO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvciRtKFt0aGlzLl9yZ2JbMF0sIHRoaXMuX3JnYlsxXSwgdGhpcy5fcmdiWzJdLCBhXSwgJ3JnYicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9yZ2JbM107XG4gICAgfTtcblxuICAgIHZhciBDb2xvciRsID0gQ29sb3JfMTtcblxuICAgIENvbG9yJGwucHJvdG90eXBlLmNsaXBwZWQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JnYi5fY2xpcHBlZCB8fCBmYWxzZTtcbiAgICB9O1xuXG4gICAgdmFyIENvbG9yJGsgPSBDb2xvcl8xO1xuICAgIHZhciBMQUJfQ09OU1RBTlRTJDEgPSBsYWJDb25zdGFudHM7XG5cbiAgICBDb2xvciRrLnByb3RvdHlwZS5kYXJrZW4gPSBmdW5jdGlvbihhbW91bnQpIHtcbiAgICBcdGlmICggYW1vdW50ID09PSB2b2lkIDAgKSBhbW91bnQ9MTtcblxuICAgIFx0dmFyIG1lID0gdGhpcztcbiAgICBcdHZhciBsYWIgPSBtZS5sYWIoKTtcbiAgICBcdGxhYlswXSAtPSBMQUJfQ09OU1RBTlRTJDEuS24gKiBhbW91bnQ7XG4gICAgXHRyZXR1cm4gbmV3IENvbG9yJGsobGFiLCAnbGFiJykuYWxwaGEobWUuYWxwaGEoKSwgdHJ1ZSk7XG4gICAgfTtcblxuICAgIENvbG9yJGsucHJvdG90eXBlLmJyaWdodGVuID0gZnVuY3Rpb24oYW1vdW50KSB7XG4gICAgXHRpZiAoIGFtb3VudCA9PT0gdm9pZCAwICkgYW1vdW50PTE7XG5cbiAgICBcdHJldHVybiB0aGlzLmRhcmtlbigtYW1vdW50KTtcbiAgICB9O1xuXG4gICAgQ29sb3Ikay5wcm90b3R5cGUuZGFya2VyID0gQ29sb3Ikay5wcm90b3R5cGUuZGFya2VuO1xuICAgIENvbG9yJGsucHJvdG90eXBlLmJyaWdodGVyID0gQ29sb3Ikay5wcm90b3R5cGUuYnJpZ2h0ZW47XG5cbiAgICB2YXIgQ29sb3IkaiA9IENvbG9yXzE7XG5cbiAgICBDb2xvciRqLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAobWMpIHtcbiAgICAgICAgdmFyIHJlZiA9IG1jLnNwbGl0KCcuJyk7XG4gICAgICAgIHZhciBtb2RlID0gcmVmWzBdO1xuICAgICAgICB2YXIgY2hhbm5lbCA9IHJlZlsxXTtcbiAgICAgICAgdmFyIHNyYyA9IHRoaXNbbW9kZV0oKTtcbiAgICAgICAgaWYgKGNoYW5uZWwpIHtcbiAgICAgICAgICAgIHZhciBpID0gbW9kZS5pbmRleE9mKGNoYW5uZWwpIC0gKG1vZGUuc3Vic3RyKDAsIDIpID09PSAnb2snID8gMiA6IDApO1xuICAgICAgICAgICAgaWYgKGkgPiAtMSkgeyByZXR1cm4gc3JjW2ldOyB9XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKFwidW5rbm93biBjaGFubmVsIFwiICsgY2hhbm5lbCArIFwiIGluIG1vZGUgXCIgKyBtb2RlKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gc3JjO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHZhciBDb2xvciRpID0gQ29sb3JfMTtcbiAgICB2YXIgdHlwZSQ1ID0gdXRpbHMudHlwZTtcbiAgICB2YXIgcG93JDYgPSBNYXRoLnBvdztcblxuICAgIHZhciBFUFMgPSAxZS03O1xuICAgIHZhciBNQVhfSVRFUiA9IDIwO1xuXG4gICAgQ29sb3IkaS5wcm90b3R5cGUubHVtaW5hbmNlID0gZnVuY3Rpb24obHVtKSB7XG4gICAgICAgIGlmIChsdW0gIT09IHVuZGVmaW5lZCAmJiB0eXBlJDUobHVtKSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIGlmIChsdW0gPT09IDApIHtcbiAgICAgICAgICAgICAgICAvLyByZXR1cm4gcHVyZSBibGFja1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ29sb3IkaShbMCwwLDAsdGhpcy5fcmdiWzNdXSwgJ3JnYicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGx1bSA9PT0gMSkge1xuICAgICAgICAgICAgICAgIC8vIHJldHVybiBwdXJlIHdoaXRlXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvciRpKFsyNTUsMjU1LDI1NSx0aGlzLl9yZ2JbM11dLCAncmdiJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBjb21wdXRlIG5ldyBjb2xvciB1c2luZy4uLlxuICAgICAgICAgICAgdmFyIGN1cl9sdW0gPSB0aGlzLmx1bWluYW5jZSgpO1xuICAgICAgICAgICAgdmFyIG1vZGUgPSAncmdiJztcbiAgICAgICAgICAgIHZhciBtYXhfaXRlciA9IE1BWF9JVEVSO1xuXG4gICAgICAgICAgICB2YXIgdGVzdCA9IGZ1bmN0aW9uIChsb3csIGhpZ2gpIHtcbiAgICAgICAgICAgICAgICB2YXIgbWlkID0gbG93LmludGVycG9sYXRlKGhpZ2gsIDAuNSwgbW9kZSk7XG4gICAgICAgICAgICAgICAgdmFyIGxtID0gbWlkLmx1bWluYW5jZSgpO1xuICAgICAgICAgICAgICAgIGlmIChNYXRoLmFicyhsdW0gLSBsbSkgPCBFUFMgfHwgIW1heF9pdGVyLS0pIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gY2xvc2UgZW5vdWdoXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtaWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBsbSA+IGx1bSA/IHRlc3QobG93LCBtaWQpIDogdGVzdChtaWQsIGhpZ2gpO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgdmFyIHJnYiA9IChjdXJfbHVtID4gbHVtID8gdGVzdChuZXcgQ29sb3IkaShbMCwwLDBdKSwgdGhpcykgOiB0ZXN0KHRoaXMsIG5ldyBDb2xvciRpKFsyNTUsMjU1LDI1NV0pKSkucmdiKCk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IENvbG9yJGkocmdiLmNvbmNhdCggW3RoaXMuX3JnYlszXV0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmdiMmx1bWluYW5jZS5hcHBseSh2b2lkIDAsICh0aGlzLl9yZ2IpLnNsaWNlKDAsMykpO1xuICAgIH07XG5cblxuICAgIHZhciByZ2IybHVtaW5hbmNlID0gZnVuY3Rpb24gKHIsZyxiKSB7XG4gICAgICAgIC8vIHJlbGF0aXZlIGx1bWluYW5jZVxuICAgICAgICAvLyBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwOC9SRUMtV0NBRzIwLTIwMDgxMjExLyNyZWxhdGl2ZWx1bWluYW5jZWRlZlxuICAgICAgICByID0gbHVtaW5hbmNlX3gocik7XG4gICAgICAgIGcgPSBsdW1pbmFuY2VfeChnKTtcbiAgICAgICAgYiA9IGx1bWluYW5jZV94KGIpO1xuICAgICAgICByZXR1cm4gMC4yMTI2ICogciArIDAuNzE1MiAqIGcgKyAwLjA3MjIgKiBiO1xuICAgIH07XG5cbiAgICB2YXIgbHVtaW5hbmNlX3ggPSBmdW5jdGlvbiAoeCkge1xuICAgICAgICB4IC89IDI1NTtcbiAgICAgICAgcmV0dXJuIHggPD0gMC4wMzkyOCA/IHgvMTIuOTIgOiBwb3ckNigoeCswLjA1NSkvMS4wNTUsIDIuNCk7XG4gICAgfTtcblxuICAgIHZhciBpbnRlcnBvbGF0b3IkMSA9IHt9O1xuXG4gICAgdmFyIENvbG9yJGggPSBDb2xvcl8xO1xuICAgIHZhciB0eXBlJDQgPSB1dGlscy50eXBlO1xuICAgIHZhciBpbnRlcnBvbGF0b3IgPSBpbnRlcnBvbGF0b3IkMTtcblxuICAgIHZhciBtaXgkMSA9IGZ1bmN0aW9uIChjb2wxLCBjb2wyLCBmKSB7XG4gICAgICAgIGlmICggZiA9PT0gdm9pZCAwICkgZj0wLjU7XG4gICAgICAgIHZhciByZXN0ID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGggLSAzO1xuICAgICAgICB3aGlsZSAoIGxlbi0tID4gMCApIHJlc3RbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gKyAzIF07XG5cbiAgICAgICAgdmFyIG1vZGUgPSByZXN0WzBdIHx8ICdscmdiJztcbiAgICAgICAgaWYgKCFpbnRlcnBvbGF0b3JbbW9kZV0gJiYgIXJlc3QubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBmYWxsIGJhY2sgdG8gdGhlIGZpcnN0IHN1cHBvcnRlZCBtb2RlXG4gICAgICAgICAgICBtb2RlID0gT2JqZWN0LmtleXMoaW50ZXJwb2xhdG9yKVswXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWludGVycG9sYXRvclttb2RlXSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKChcImludGVycG9sYXRpb24gbW9kZSBcIiArIG1vZGUgKyBcIiBpcyBub3QgZGVmaW5lZFwiKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGUkNChjb2wxKSAhPT0gJ29iamVjdCcpIHsgY29sMSA9IG5ldyBDb2xvciRoKGNvbDEpOyB9XG4gICAgICAgIGlmICh0eXBlJDQoY29sMikgIT09ICdvYmplY3QnKSB7IGNvbDIgPSBuZXcgQ29sb3IkaChjb2wyKTsgfVxuICAgICAgICByZXR1cm4gaW50ZXJwb2xhdG9yW21vZGVdKGNvbDEsIGNvbDIsIGYpXG4gICAgICAgICAgICAuYWxwaGEoY29sMS5hbHBoYSgpICsgZiAqIChjb2wyLmFscGhhKCkgLSBjb2wxLmFscGhhKCkpKTtcbiAgICB9O1xuXG4gICAgdmFyIENvbG9yJGcgPSBDb2xvcl8xO1xuICAgIHZhciBtaXggPSBtaXgkMTtcblxuICAgIENvbG9yJGcucHJvdG90eXBlLm1peCA9XG4gICAgQ29sb3IkZy5wcm90b3R5cGUuaW50ZXJwb2xhdGUgPSBmdW5jdGlvbihjb2wyLCBmKSB7XG4gICAgXHRpZiAoIGYgPT09IHZvaWQgMCApIGY9MC41O1xuICAgIFx0dmFyIHJlc3QgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aCAtIDI7XG4gICAgXHR3aGlsZSAoIGxlbi0tID4gMCApIHJlc3RbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gKyAyIF07XG5cbiAgICBcdHJldHVybiBtaXguYXBwbHkodm9pZCAwLCBbIHRoaXMsIGNvbDIsIGYgXS5jb25jYXQoIHJlc3QgKSk7XG4gICAgfTtcblxuICAgIHZhciBDb2xvciRmID0gQ29sb3JfMTtcblxuICAgIENvbG9yJGYucHJvdG90eXBlLnByZW11bHRpcGx5ID0gZnVuY3Rpb24obXV0YXRlKSB7XG4gICAgXHRpZiAoIG11dGF0ZSA9PT0gdm9pZCAwICkgbXV0YXRlPWZhbHNlO1xuXG4gICAgXHR2YXIgcmdiID0gdGhpcy5fcmdiO1xuICAgIFx0dmFyIGEgPSByZ2JbM107XG4gICAgXHRpZiAobXV0YXRlKSB7XG4gICAgXHRcdHRoaXMuX3JnYiA9IFtyZ2JbMF0qYSwgcmdiWzFdKmEsIHJnYlsyXSphLCBhXTtcbiAgICBcdFx0cmV0dXJuIHRoaXM7XG4gICAgXHR9IGVsc2Uge1xuICAgIFx0XHRyZXR1cm4gbmV3IENvbG9yJGYoW3JnYlswXSphLCByZ2JbMV0qYSwgcmdiWzJdKmEsIGFdLCAncmdiJyk7XG4gICAgXHR9XG4gICAgfTtcblxuICAgIHZhciBDb2xvciRlID0gQ29sb3JfMTtcbiAgICB2YXIgTEFCX0NPTlNUQU5UUyA9IGxhYkNvbnN0YW50cztcblxuICAgIENvbG9yJGUucHJvdG90eXBlLnNhdHVyYXRlID0gZnVuY3Rpb24oYW1vdW50KSB7XG4gICAgXHRpZiAoIGFtb3VudCA9PT0gdm9pZCAwICkgYW1vdW50PTE7XG5cbiAgICBcdHZhciBtZSA9IHRoaXM7XG4gICAgXHR2YXIgbGNoID0gbWUubGNoKCk7XG4gICAgXHRsY2hbMV0gKz0gTEFCX0NPTlNUQU5UUy5LbiAqIGFtb3VudDtcbiAgICBcdGlmIChsY2hbMV0gPCAwKSB7IGxjaFsxXSA9IDA7IH1cbiAgICBcdHJldHVybiBuZXcgQ29sb3IkZShsY2gsICdsY2gnKS5hbHBoYShtZS5hbHBoYSgpLCB0cnVlKTtcbiAgICB9O1xuXG4gICAgQ29sb3IkZS5wcm90b3R5cGUuZGVzYXR1cmF0ZSA9IGZ1bmN0aW9uKGFtb3VudCkge1xuICAgIFx0aWYgKCBhbW91bnQgPT09IHZvaWQgMCApIGFtb3VudD0xO1xuXG4gICAgXHRyZXR1cm4gdGhpcy5zYXR1cmF0ZSgtYW1vdW50KTtcbiAgICB9O1xuXG4gICAgdmFyIENvbG9yJGQgPSBDb2xvcl8xO1xuICAgIHZhciB0eXBlJDMgPSB1dGlscy50eXBlO1xuXG4gICAgQ29sb3IkZC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKG1jLCB2YWx1ZSwgbXV0YXRlKSB7XG4gICAgICAgIGlmICggbXV0YXRlID09PSB2b2lkIDAgKSBtdXRhdGUgPSBmYWxzZTtcblxuICAgICAgICB2YXIgcmVmID0gbWMuc3BsaXQoJy4nKTtcbiAgICAgICAgdmFyIG1vZGUgPSByZWZbMF07XG4gICAgICAgIHZhciBjaGFubmVsID0gcmVmWzFdO1xuICAgICAgICB2YXIgc3JjID0gdGhpc1ttb2RlXSgpO1xuICAgICAgICBpZiAoY2hhbm5lbCkge1xuICAgICAgICAgICAgdmFyIGkgPSBtb2RlLmluZGV4T2YoY2hhbm5lbCkgLSAobW9kZS5zdWJzdHIoMCwgMikgPT09ICdvaycgPyAyIDogMCk7XG4gICAgICAgICAgICBpZiAoaSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGUkMyh2YWx1ZSkgPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS5jaGFyQXQoMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJysnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1tpXSArPSArdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICctJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNbaV0gKz0gK3ZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnKic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjW2ldICo9ICt2YWx1ZS5zdWJzdHIoMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICcvJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNbaV0gLz0gK3ZhbHVlLnN1YnN0cigxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjW2ldID0gK3ZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlJDModmFsdWUpID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgICAgICBzcmNbaV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1bnN1cHBvcnRlZCB2YWx1ZSBmb3IgQ29sb3Iuc2V0XCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgb3V0ID0gbmV3IENvbG9yJGQoc3JjLCBtb2RlKTtcbiAgICAgICAgICAgICAgICBpZiAobXV0YXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JnYiA9IG91dC5fcmdiO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG91dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigoXCJ1bmtub3duIGNoYW5uZWwgXCIgKyBjaGFubmVsICsgXCIgaW4gbW9kZSBcIiArIG1vZGUpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBzcmM7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIENvbG9yJGMgPSBDb2xvcl8xO1xuXG4gICAgdmFyIHJnYiA9IGZ1bmN0aW9uIChjb2wxLCBjb2wyLCBmKSB7XG4gICAgICAgIHZhciB4eXowID0gY29sMS5fcmdiO1xuICAgICAgICB2YXIgeHl6MSA9IGNvbDIuX3JnYjtcbiAgICAgICAgcmV0dXJuIG5ldyBDb2xvciRjKFxuICAgICAgICAgICAgeHl6MFswXSArIGYgKiAoeHl6MVswXS14eXowWzBdKSxcbiAgICAgICAgICAgIHh5ejBbMV0gKyBmICogKHh5ejFbMV0teHl6MFsxXSksXG4gICAgICAgICAgICB4eXowWzJdICsgZiAqICh4eXoxWzJdLXh5ejBbMl0pLFxuICAgICAgICAgICAgJ3JnYidcbiAgICAgICAgKVxuICAgIH07XG5cbiAgICAvLyByZWdpc3RlciBpbnRlcnBvbGF0b3JcbiAgICBpbnRlcnBvbGF0b3IkMS5yZ2IgPSByZ2I7XG5cbiAgICB2YXIgQ29sb3IkYiA9IENvbG9yXzE7XG4gICAgdmFyIHNxcnQkMiA9IE1hdGguc3FydDtcbiAgICB2YXIgcG93JDUgPSBNYXRoLnBvdztcblxuICAgIHZhciBscmdiID0gZnVuY3Rpb24gKGNvbDEsIGNvbDIsIGYpIHtcbiAgICAgICAgdmFyIHJlZiA9IGNvbDEuX3JnYjtcbiAgICAgICAgdmFyIHgxID0gcmVmWzBdO1xuICAgICAgICB2YXIgeTEgPSByZWZbMV07XG4gICAgICAgIHZhciB6MSA9IHJlZlsyXTtcbiAgICAgICAgdmFyIHJlZiQxID0gY29sMi5fcmdiO1xuICAgICAgICB2YXIgeDIgPSByZWYkMVswXTtcbiAgICAgICAgdmFyIHkyID0gcmVmJDFbMV07XG4gICAgICAgIHZhciB6MiA9IHJlZiQxWzJdO1xuICAgICAgICByZXR1cm4gbmV3IENvbG9yJGIoXG4gICAgICAgICAgICBzcXJ0JDIocG93JDUoeDEsMikgKiAoMS1mKSArIHBvdyQ1KHgyLDIpICogZiksXG4gICAgICAgICAgICBzcXJ0JDIocG93JDUoeTEsMikgKiAoMS1mKSArIHBvdyQ1KHkyLDIpICogZiksXG4gICAgICAgICAgICBzcXJ0JDIocG93JDUoejEsMikgKiAoMS1mKSArIHBvdyQ1KHoyLDIpICogZiksXG4gICAgICAgICAgICAncmdiJ1xuICAgICAgICApXG4gICAgfTtcblxuICAgIC8vIHJlZ2lzdGVyIGludGVycG9sYXRvclxuICAgIGludGVycG9sYXRvciQxLmxyZ2IgPSBscmdiO1xuXG4gICAgdmFyIENvbG9yJGEgPSBDb2xvcl8xO1xuXG4gICAgdmFyIGxhYiA9IGZ1bmN0aW9uIChjb2wxLCBjb2wyLCBmKSB7XG4gICAgICAgIHZhciB4eXowID0gY29sMS5sYWIoKTtcbiAgICAgICAgdmFyIHh5ejEgPSBjb2wyLmxhYigpO1xuICAgICAgICByZXR1cm4gbmV3IENvbG9yJGEoXG4gICAgICAgICAgICB4eXowWzBdICsgZiAqICh4eXoxWzBdLXh5ejBbMF0pLFxuICAgICAgICAgICAgeHl6MFsxXSArIGYgKiAoeHl6MVsxXS14eXowWzFdKSxcbiAgICAgICAgICAgIHh5ejBbMl0gKyBmICogKHh5ejFbMl0teHl6MFsyXSksXG4gICAgICAgICAgICAnbGFiJ1xuICAgICAgICApXG4gICAgfTtcblxuICAgIC8vIHJlZ2lzdGVyIGludGVycG9sYXRvclxuICAgIGludGVycG9sYXRvciQxLmxhYiA9IGxhYjtcblxuICAgIHZhciBDb2xvciQ5ID0gQ29sb3JfMTtcblxuICAgIHZhciBfaHN4ID0gZnVuY3Rpb24gKGNvbDEsIGNvbDIsIGYsIG0pIHtcbiAgICAgICAgdmFyIGFzc2lnbiwgYXNzaWduJDE7XG5cbiAgICAgICAgdmFyIHh5ejAsIHh5ejE7XG4gICAgICAgIGlmIChtID09PSAnaHNsJykge1xuICAgICAgICAgICAgeHl6MCA9IGNvbDEuaHNsKCk7XG4gICAgICAgICAgICB4eXoxID0gY29sMi5oc2woKTtcbiAgICAgICAgfSBlbHNlIGlmIChtID09PSAnaHN2Jykge1xuICAgICAgICAgICAgeHl6MCA9IGNvbDEuaHN2KCk7XG4gICAgICAgICAgICB4eXoxID0gY29sMi5oc3YoKTtcbiAgICAgICAgfSBlbHNlIGlmIChtID09PSAnaGNnJykge1xuICAgICAgICAgICAgeHl6MCA9IGNvbDEuaGNnKCk7XG4gICAgICAgICAgICB4eXoxID0gY29sMi5oY2coKTtcbiAgICAgICAgfSBlbHNlIGlmIChtID09PSAnaHNpJykge1xuICAgICAgICAgICAgeHl6MCA9IGNvbDEuaHNpKCk7XG4gICAgICAgICAgICB4eXoxID0gY29sMi5oc2koKTtcbiAgICAgICAgfSBlbHNlIGlmIChtID09PSAnbGNoJyB8fCBtID09PSAnaGNsJykge1xuICAgICAgICAgICAgbSA9ICdoY2wnO1xuICAgICAgICAgICAgeHl6MCA9IGNvbDEuaGNsKCk7XG4gICAgICAgICAgICB4eXoxID0gY29sMi5oY2woKTtcbiAgICAgICAgfSBlbHNlIGlmIChtID09PSAnb2tsY2gnKSB7XG4gICAgICAgICAgICB4eXowID0gY29sMS5va2xjaCgpLnJldmVyc2UoKTtcbiAgICAgICAgICAgIHh5ejEgPSBjb2wyLm9rbGNoKCkucmV2ZXJzZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGh1ZTAsIGh1ZTEsIHNhdDAsIHNhdDEsIGxidjAsIGxidjE7XG4gICAgICAgIGlmIChtLnN1YnN0cigwLCAxKSA9PT0gJ2gnIHx8IG0gPT09ICdva2xjaCcpIHtcbiAgICAgICAgICAgIChhc3NpZ24gPSB4eXowLCBodWUwID0gYXNzaWduWzBdLCBzYXQwID0gYXNzaWduWzFdLCBsYnYwID0gYXNzaWduWzJdKTtcbiAgICAgICAgICAgIChhc3NpZ24kMSA9IHh5ejEsIGh1ZTEgPSBhc3NpZ24kMVswXSwgc2F0MSA9IGFzc2lnbiQxWzFdLCBsYnYxID0gYXNzaWduJDFbMl0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNhdCwgaHVlLCBsYnYsIGRoO1xuXG4gICAgICAgIGlmICghaXNOYU4oaHVlMCkgJiYgIWlzTmFOKGh1ZTEpKSB7XG4gICAgICAgICAgICAvLyBib3RoIGNvbG9ycyBoYXZlIGh1ZVxuICAgICAgICAgICAgaWYgKGh1ZTEgPiBodWUwICYmIGh1ZTEgLSBodWUwID4gMTgwKSB7XG4gICAgICAgICAgICAgICAgZGggPSBodWUxIC0gKGh1ZTAgKyAzNjApO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChodWUxIDwgaHVlMCAmJiBodWUwIC0gaHVlMSA+IDE4MCkge1xuICAgICAgICAgICAgICAgIGRoID0gaHVlMSArIDM2MCAtIGh1ZTA7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRoID0gaHVlMSAtIGh1ZTA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBodWUgPSBodWUwICsgZiAqIGRoO1xuICAgICAgICB9IGVsc2UgaWYgKCFpc05hTihodWUwKSkge1xuICAgICAgICAgICAgaHVlID0gaHVlMDtcbiAgICAgICAgICAgIGlmICgobGJ2MSA9PSAxIHx8IGxidjEgPT0gMCkgJiYgbSAhPSAnaHN2JykgeyBzYXQgPSBzYXQwOyB9XG4gICAgICAgIH0gZWxzZSBpZiAoIWlzTmFOKGh1ZTEpKSB7XG4gICAgICAgICAgICBodWUgPSBodWUxO1xuICAgICAgICAgICAgaWYgKChsYnYwID09IDEgfHwgbGJ2MCA9PSAwKSAmJiBtICE9ICdoc3YnKSB7IHNhdCA9IHNhdDE7IH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGh1ZSA9IE51bWJlci5OYU47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2F0ID09PSB1bmRlZmluZWQpIHsgc2F0ID0gc2F0MCArIGYgKiAoc2F0MSAtIHNhdDApOyB9XG4gICAgICAgIGxidiA9IGxidjAgKyBmICogKGxidjEgLSBsYnYwKTtcbiAgICAgICAgcmV0dXJuIG0gPT09ICdva2xjaCcgPyBuZXcgQ29sb3IkOShbbGJ2LCBzYXQsIGh1ZV0sIG0pIDogbmV3IENvbG9yJDkoW2h1ZSwgc2F0LCBsYnZdLCBtKTtcbiAgICB9O1xuXG4gICAgdmFyIGludGVycG9sYXRlX2hzeCQ1ID0gX2hzeDtcblxuICAgIHZhciBsY2ggPSBmdW5jdGlvbiAoY29sMSwgY29sMiwgZikge1xuICAgIFx0cmV0dXJuIGludGVycG9sYXRlX2hzeCQ1KGNvbDEsIGNvbDIsIGYsICdsY2gnKTtcbiAgICB9O1xuXG4gICAgLy8gcmVnaXN0ZXIgaW50ZXJwb2xhdG9yXG4gICAgaW50ZXJwb2xhdG9yJDEubGNoID0gbGNoO1xuICAgIGludGVycG9sYXRvciQxLmhjbCA9IGxjaDtcblxuICAgIHZhciBDb2xvciQ4ID0gQ29sb3JfMTtcblxuICAgIHZhciBudW0gPSBmdW5jdGlvbiAoY29sMSwgY29sMiwgZikge1xuICAgICAgICB2YXIgYzEgPSBjb2wxLm51bSgpO1xuICAgICAgICB2YXIgYzIgPSBjb2wyLm51bSgpO1xuICAgICAgICByZXR1cm4gbmV3IENvbG9yJDgoYzEgKyBmICogKGMyLWMxKSwgJ251bScpXG4gICAgfTtcblxuICAgIC8vIHJlZ2lzdGVyIGludGVycG9sYXRvclxuICAgIGludGVycG9sYXRvciQxLm51bSA9IG51bTtcblxuICAgIHZhciBpbnRlcnBvbGF0ZV9oc3gkNCA9IF9oc3g7XG5cbiAgICB2YXIgaGNnID0gZnVuY3Rpb24gKGNvbDEsIGNvbDIsIGYpIHtcbiAgICBcdHJldHVybiBpbnRlcnBvbGF0ZV9oc3gkNChjb2wxLCBjb2wyLCBmLCAnaGNnJyk7XG4gICAgfTtcblxuICAgIC8vIHJlZ2lzdGVyIGludGVycG9sYXRvclxuICAgIGludGVycG9sYXRvciQxLmhjZyA9IGhjZztcblxuICAgIHZhciBpbnRlcnBvbGF0ZV9oc3gkMyA9IF9oc3g7XG5cbiAgICB2YXIgaHNpID0gZnVuY3Rpb24gKGNvbDEsIGNvbDIsIGYpIHtcbiAgICBcdHJldHVybiBpbnRlcnBvbGF0ZV9oc3gkMyhjb2wxLCBjb2wyLCBmLCAnaHNpJyk7XG4gICAgfTtcblxuICAgIC8vIHJlZ2lzdGVyIGludGVycG9sYXRvclxuICAgIGludGVycG9sYXRvciQxLmhzaSA9IGhzaTtcblxuICAgIHZhciBpbnRlcnBvbGF0ZV9oc3gkMiA9IF9oc3g7XG5cbiAgICB2YXIgaHNsID0gZnVuY3Rpb24gKGNvbDEsIGNvbDIsIGYpIHtcbiAgICBcdHJldHVybiBpbnRlcnBvbGF0ZV9oc3gkMihjb2wxLCBjb2wyLCBmLCAnaHNsJyk7XG4gICAgfTtcblxuICAgIC8vIHJlZ2lzdGVyIGludGVycG9sYXRvclxuICAgIGludGVycG9sYXRvciQxLmhzbCA9IGhzbDtcblxuICAgIHZhciBpbnRlcnBvbGF0ZV9oc3gkMSA9IF9oc3g7XG5cbiAgICB2YXIgaHN2ID0gZnVuY3Rpb24gKGNvbDEsIGNvbDIsIGYpIHtcbiAgICBcdHJldHVybiBpbnRlcnBvbGF0ZV9oc3gkMShjb2wxLCBjb2wyLCBmLCAnaHN2Jyk7XG4gICAgfTtcblxuICAgIC8vIHJlZ2lzdGVyIGludGVycG9sYXRvclxuICAgIGludGVycG9sYXRvciQxLmhzdiA9IGhzdjtcblxuICAgIHZhciBDb2xvciQ3ID0gQ29sb3JfMTtcblxuICAgIHZhciBva2xhYiA9IGZ1bmN0aW9uIChjb2wxLCBjb2wyLCBmKSB7XG4gICAgICAgIHZhciB4eXowID0gY29sMS5va2xhYigpO1xuICAgICAgICB2YXIgeHl6MSA9IGNvbDIub2tsYWIoKTtcbiAgICAgICAgcmV0dXJuIG5ldyBDb2xvciQ3KFxuICAgICAgICAgICAgeHl6MFswXSArIGYgKiAoeHl6MVswXSAtIHh5ejBbMF0pLFxuICAgICAgICAgICAgeHl6MFsxXSArIGYgKiAoeHl6MVsxXSAtIHh5ejBbMV0pLFxuICAgICAgICAgICAgeHl6MFsyXSArIGYgKiAoeHl6MVsyXSAtIHh5ejBbMl0pLFxuICAgICAgICAgICAgJ29rbGFiJ1xuICAgICAgICApO1xuICAgIH07XG5cbiAgICAvLyByZWdpc3RlciBpbnRlcnBvbGF0b3JcbiAgICBpbnRlcnBvbGF0b3IkMS5va2xhYiA9IG9rbGFiO1xuXG4gICAgdmFyIGludGVycG9sYXRlX2hzeCA9IF9oc3g7XG5cbiAgICB2YXIgb2tsY2ggPSBmdW5jdGlvbiAoY29sMSwgY29sMiwgZikge1xuICAgICAgICByZXR1cm4gaW50ZXJwb2xhdGVfaHN4KGNvbDEsIGNvbDIsIGYsICdva2xjaCcpO1xuICAgIH07XG5cbiAgICAvLyByZWdpc3RlciBpbnRlcnBvbGF0b3JcbiAgICBpbnRlcnBvbGF0b3IkMS5va2xjaCA9IG9rbGNoO1xuXG4gICAgdmFyIENvbG9yJDYgPSBDb2xvcl8xO1xuICAgIHZhciBjbGlwX3JnYiQxID0gdXRpbHMuY2xpcF9yZ2I7XG4gICAgdmFyIHBvdyQ0ID0gTWF0aC5wb3c7XG4gICAgdmFyIHNxcnQkMSA9IE1hdGguc3FydDtcbiAgICB2YXIgUEkkMSA9IE1hdGguUEk7XG4gICAgdmFyIGNvcyQyID0gTWF0aC5jb3M7XG4gICAgdmFyIHNpbiQyID0gTWF0aC5zaW47XG4gICAgdmFyIGF0YW4yJDEgPSBNYXRoLmF0YW4yO1xuXG4gICAgdmFyIGF2ZXJhZ2UgPSBmdW5jdGlvbiAoY29sb3JzLCBtb2RlLCB3ZWlnaHRzKSB7XG4gICAgICAgIGlmICggbW9kZSA9PT0gdm9pZCAwICkgbW9kZT0nbHJnYic7XG4gICAgICAgIGlmICggd2VpZ2h0cyA9PT0gdm9pZCAwICkgd2VpZ2h0cz1udWxsO1xuXG4gICAgICAgIHZhciBsID0gY29sb3JzLmxlbmd0aDtcbiAgICAgICAgaWYgKCF3ZWlnaHRzKSB7IHdlaWdodHMgPSBBcnJheS5mcm9tKG5ldyBBcnJheShsKSkubWFwKGZ1bmN0aW9uICgpIHsgcmV0dXJuIDE7IH0pOyB9XG4gICAgICAgIC8vIG5vcm1hbGl6ZSB3ZWlnaHRzXG4gICAgICAgIHZhciBrID0gbCAvIHdlaWdodHMucmVkdWNlKGZ1bmN0aW9uKGEsIGIpIHsgcmV0dXJuIGEgKyBiOyB9KTtcbiAgICAgICAgd2VpZ2h0cy5mb3JFYWNoKGZ1bmN0aW9uICh3LGkpIHsgd2VpZ2h0c1tpXSAqPSBrOyB9KTtcbiAgICAgICAgLy8gY29udmVydCBjb2xvcnMgdG8gQ29sb3Igb2JqZWN0c1xuICAgICAgICBjb2xvcnMgPSBjb2xvcnMubWFwKGZ1bmN0aW9uIChjKSB7IHJldHVybiBuZXcgQ29sb3IkNihjKTsgfSk7XG4gICAgICAgIGlmIChtb2RlID09PSAnbHJnYicpIHtcbiAgICAgICAgICAgIHJldHVybiBfYXZlcmFnZV9scmdiKGNvbG9ycywgd2VpZ2h0cylcbiAgICAgICAgfVxuICAgICAgICB2YXIgZmlyc3QgPSBjb2xvcnMuc2hpZnQoKTtcbiAgICAgICAgdmFyIHh5eiA9IGZpcnN0LmdldChtb2RlKTtcbiAgICAgICAgdmFyIGNudCA9IFtdO1xuICAgICAgICB2YXIgZHggPSAwO1xuICAgICAgICB2YXIgZHkgPSAwO1xuICAgICAgICAvLyBpbml0aWFsIGNvbG9yXG4gICAgICAgIGZvciAodmFyIGk9MDsgaTx4eXoubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHh5eltpXSA9ICh4eXpbaV0gfHwgMCkgKiB3ZWlnaHRzWzBdO1xuICAgICAgICAgICAgY250LnB1c2goaXNOYU4oeHl6W2ldKSA/IDAgOiB3ZWlnaHRzWzBdKTtcbiAgICAgICAgICAgIGlmIChtb2RlLmNoYXJBdChpKSA9PT0gJ2gnICYmICFpc05hTih4eXpbaV0pKSB7XG4gICAgICAgICAgICAgICAgdmFyIEEgPSB4eXpbaV0gLyAxODAgKiBQSSQxO1xuICAgICAgICAgICAgICAgIGR4ICs9IGNvcyQyKEEpICogd2VpZ2h0c1swXTtcbiAgICAgICAgICAgICAgICBkeSArPSBzaW4kMihBKSAqIHdlaWdodHNbMF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYWxwaGEgPSBmaXJzdC5hbHBoYSgpICogd2VpZ2h0c1swXTtcbiAgICAgICAgY29sb3JzLmZvckVhY2goZnVuY3Rpb24gKGMsY2kpIHtcbiAgICAgICAgICAgIHZhciB4eXoyID0gYy5nZXQobW9kZSk7XG4gICAgICAgICAgICBhbHBoYSArPSBjLmFscGhhKCkgKiB3ZWlnaHRzW2NpKzFdO1xuICAgICAgICAgICAgZm9yICh2YXIgaT0wOyBpPHh5ei5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmICghaXNOYU4oeHl6MltpXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY250W2ldICs9IHdlaWdodHNbY2krMV07XG4gICAgICAgICAgICAgICAgICAgIGlmIChtb2RlLmNoYXJBdChpKSA9PT0gJ2gnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgQSA9IHh5ejJbaV0gLyAxODAgKiBQSSQxO1xuICAgICAgICAgICAgICAgICAgICAgICAgZHggKz0gY29zJDIoQSkgKiB3ZWlnaHRzW2NpKzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgZHkgKz0gc2luJDIoQSkgKiB3ZWlnaHRzW2NpKzFdO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgeHl6W2ldICs9IHh5ejJbaV0gKiB3ZWlnaHRzW2NpKzFdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBmb3IgKHZhciBpJDE9MDsgaSQxPHh5ei5sZW5ndGg7IGkkMSsrKSB7XG4gICAgICAgICAgICBpZiAobW9kZS5jaGFyQXQoaSQxKSA9PT0gJ2gnKSB7XG4gICAgICAgICAgICAgICAgdmFyIEEkMSA9IGF0YW4yJDEoZHkgLyBjbnRbaSQxXSwgZHggLyBjbnRbaSQxXSkgLyBQSSQxICogMTgwO1xuICAgICAgICAgICAgICAgIHdoaWxlIChBJDEgPCAwKSB7IEEkMSArPSAzNjA7IH1cbiAgICAgICAgICAgICAgICB3aGlsZSAoQSQxID49IDM2MCkgeyBBJDEgLT0gMzYwOyB9XG4gICAgICAgICAgICAgICAgeHl6W2kkMV0gPSBBJDE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHh5eltpJDFdID0geHl6W2kkMV0vY250W2kkMV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYWxwaGEgLz0gbDtcbiAgICAgICAgcmV0dXJuIChuZXcgQ29sb3IkNih4eXosIG1vZGUpKS5hbHBoYShhbHBoYSA+IDAuOTk5OTkgPyAxIDogYWxwaGEsIHRydWUpO1xuICAgIH07XG5cblxuICAgIHZhciBfYXZlcmFnZV9scmdiID0gZnVuY3Rpb24gKGNvbG9ycywgd2VpZ2h0cykge1xuICAgICAgICB2YXIgbCA9IGNvbG9ycy5sZW5ndGg7XG4gICAgICAgIHZhciB4eXogPSBbMCwwLDAsMF07XG4gICAgICAgIGZvciAodmFyIGk9MDsgaSA8IGNvbG9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGNvbCA9IGNvbG9yc1tpXTtcbiAgICAgICAgICAgIHZhciBmID0gd2VpZ2h0c1tpXSAvIGw7XG4gICAgICAgICAgICB2YXIgcmdiID0gY29sLl9yZ2I7XG4gICAgICAgICAgICB4eXpbMF0gKz0gcG93JDQocmdiWzBdLDIpICogZjtcbiAgICAgICAgICAgIHh5elsxXSArPSBwb3ckNChyZ2JbMV0sMikgKiBmO1xuICAgICAgICAgICAgeHl6WzJdICs9IHBvdyQ0KHJnYlsyXSwyKSAqIGY7XG4gICAgICAgICAgICB4eXpbM10gKz0gcmdiWzNdICogZjtcbiAgICAgICAgfVxuICAgICAgICB4eXpbMF0gPSBzcXJ0JDEoeHl6WzBdKTtcbiAgICAgICAgeHl6WzFdID0gc3FydCQxKHh5elsxXSk7XG4gICAgICAgIHh5elsyXSA9IHNxcnQkMSh4eXpbMl0pO1xuICAgICAgICBpZiAoeHl6WzNdID4gMC45OTk5OTk5KSB7IHh5elszXSA9IDE7IH1cbiAgICAgICAgcmV0dXJuIG5ldyBDb2xvciQ2KGNsaXBfcmdiJDEoeHl6KSk7XG4gICAgfTtcblxuICAgIC8vIG1pbmltYWwgbXVsdGktcHVycG9zZSBpbnRlcmZhY2VcblxuICAgIC8vIEByZXF1aXJlcyB1dGlscyBjb2xvciBhbmFseXplXG5cbiAgICB2YXIgY2hyb21hJDQgPSBjaHJvbWFfMTtcbiAgICB2YXIgdHlwZSQyID0gdXRpbHMudHlwZTtcblxuICAgIHZhciBwb3ckMyA9IE1hdGgucG93O1xuXG4gICAgdmFyIHNjYWxlJDIgPSBmdW5jdGlvbihjb2xvcnMpIHtcblxuICAgICAgICAvLyBjb25zdHJ1Y3RvclxuICAgICAgICB2YXIgX21vZGUgPSAncmdiJztcbiAgICAgICAgdmFyIF9uYWNvbCA9IGNocm9tYSQ0KCcjY2NjJyk7XG4gICAgICAgIHZhciBfc3ByZWFkID0gMDtcbiAgICAgICAgLy8gY29uc3QgX2ZpeGVkID0gZmFsc2U7XG4gICAgICAgIHZhciBfZG9tYWluID0gWzAsIDFdO1xuICAgICAgICB2YXIgX3BvcyA9IFtdO1xuICAgICAgICB2YXIgX3BhZGRpbmcgPSBbMCwwXTtcbiAgICAgICAgdmFyIF9jbGFzc2VzID0gZmFsc2U7XG4gICAgICAgIHZhciBfY29sb3JzID0gW107XG4gICAgICAgIHZhciBfb3V0ID0gZmFsc2U7XG4gICAgICAgIHZhciBfbWluID0gMDtcbiAgICAgICAgdmFyIF9tYXggPSAxO1xuICAgICAgICB2YXIgX2NvcnJlY3RMaWdodG5lc3MgPSBmYWxzZTtcbiAgICAgICAgdmFyIF9jb2xvckNhY2hlID0ge307XG4gICAgICAgIHZhciBfdXNlQ2FjaGUgPSB0cnVlO1xuICAgICAgICB2YXIgX2dhbW1hID0gMTtcblxuICAgICAgICAvLyBwcml2YXRlIG1ldGhvZHNcblxuICAgICAgICB2YXIgc2V0Q29sb3JzID0gZnVuY3Rpb24oY29sb3JzKSB7XG4gICAgICAgICAgICBjb2xvcnMgPSBjb2xvcnMgfHwgWycjZmZmJywgJyMwMDAnXTtcbiAgICAgICAgICAgIGlmIChjb2xvcnMgJiYgdHlwZSQyKGNvbG9ycykgPT09ICdzdHJpbmcnICYmIGNocm9tYSQ0LmJyZXdlciAmJlxuICAgICAgICAgICAgICAgIGNocm9tYSQ0LmJyZXdlcltjb2xvcnMudG9Mb3dlckNhc2UoKV0pIHtcbiAgICAgICAgICAgICAgICBjb2xvcnMgPSBjaHJvbWEkNC5icmV3ZXJbY29sb3JzLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGUkMihjb2xvcnMpID09PSAnYXJyYXknKSB7XG4gICAgICAgICAgICAgICAgLy8gaGFuZGxlIHNpbmdsZSBjb2xvclxuICAgICAgICAgICAgICAgIGlmIChjb2xvcnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9ycyA9IFtjb2xvcnNbMF0sIGNvbG9yc1swXV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIG1ha2UgYSBjb3B5IG9mIHRoZSBjb2xvcnNcbiAgICAgICAgICAgICAgICBjb2xvcnMgPSBjb2xvcnMuc2xpY2UoMCk7XG4gICAgICAgICAgICAgICAgLy8gY29udmVydCB0byBjaHJvbWEgY2xhc3Nlc1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGM9MDsgYzxjb2xvcnMubGVuZ3RoOyBjKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29sb3JzW2NdID0gY2hyb21hJDQoY29sb3JzW2NdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gYXV0by1maWxsIGNvbG9yIHBvc2l0aW9uXG4gICAgICAgICAgICAgICAgX3Bvcy5sZW5ndGggPSAwO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGMkMT0wOyBjJDE8Y29sb3JzLmxlbmd0aDsgYyQxKyspIHtcbiAgICAgICAgICAgICAgICAgICAgX3Bvcy5wdXNoKGMkMS8oY29sb3JzLmxlbmd0aC0xKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzZXRDYWNoZSgpO1xuICAgICAgICAgICAgcmV0dXJuIF9jb2xvcnMgPSBjb2xvcnM7XG4gICAgICAgIH07XG5cbiAgICAgICAgdmFyIGdldENsYXNzID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIGlmIChfY2xhc3NlcyAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdmFyIG4gPSBfY2xhc3Nlcy5sZW5ndGgtMTtcbiAgICAgICAgICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgICAgICAgICAgd2hpbGUgKGkgPCBuICYmIHZhbHVlID49IF9jbGFzc2VzW2ldKSB7XG4gICAgICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGktMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9O1xuXG4gICAgICAgIHZhciB0TWFwTGlnaHRuZXNzID0gZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQ7IH07XG4gICAgICAgIHZhciB0TWFwRG9tYWluID0gZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQ7IH07XG5cbiAgICAgICAgLy8gY29uc3QgY2xhc3NpZnlWYWx1ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIC8vICAgICBsZXQgdmFsID0gdmFsdWU7XG4gICAgICAgIC8vICAgICBpZiAoX2NsYXNzZXMubGVuZ3RoID4gMikge1xuICAgICAgICAvLyAgICAgICAgIGNvbnN0IG4gPSBfY2xhc3Nlcy5sZW5ndGgtMTtcbiAgICAgICAgLy8gICAgICAgICBjb25zdCBpID0gZ2V0Q2xhc3ModmFsdWUpO1xuICAgICAgICAvLyAgICAgICAgIGNvbnN0IG1pbmMgPSBfY2xhc3Nlc1swXSArICgoX2NsYXNzZXNbMV0tX2NsYXNzZXNbMF0pICogKDAgKyAoX3NwcmVhZCAqIDAuNSkpKTsgIC8vIGNlbnRlciBvZiAxc3QgY2xhc3NcbiAgICAgICAgLy8gICAgICAgICBjb25zdCBtYXhjID0gX2NsYXNzZXNbbi0xXSArICgoX2NsYXNzZXNbbl0tX2NsYXNzZXNbbi0xXSkgKiAoMSAtIChfc3ByZWFkICogMC41KSkpOyAgLy8gY2VudGVyIG9mIGxhc3QgY2xhc3NcbiAgICAgICAgLy8gICAgICAgICB2YWwgPSBfbWluICsgKCgoKF9jbGFzc2VzW2ldICsgKChfY2xhc3Nlc1tpKzFdIC0gX2NsYXNzZXNbaV0pICogMC41KSkgLSBtaW5jKSAvIChtYXhjLW1pbmMpKSAqIChfbWF4IC0gX21pbikpO1xuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvLyAgICAgcmV0dXJuIHZhbDtcbiAgICAgICAgLy8gfTtcblxuICAgICAgICB2YXIgZ2V0Q29sb3IgPSBmdW5jdGlvbih2YWwsIGJ5cGFzc01hcCkge1xuICAgICAgICAgICAgdmFyIGNvbCwgdDtcbiAgICAgICAgICAgIGlmIChieXBhc3NNYXAgPT0gbnVsbCkgeyBieXBhc3NNYXAgPSBmYWxzZTsgfVxuICAgICAgICAgICAgaWYgKGlzTmFOKHZhbCkgfHwgKHZhbCA9PT0gbnVsbCkpIHsgcmV0dXJuIF9uYWNvbDsgfVxuICAgICAgICAgICAgaWYgKCFieXBhc3NNYXApIHtcbiAgICAgICAgICAgICAgICBpZiAoX2NsYXNzZXMgJiYgKF9jbGFzc2VzLmxlbmd0aCA+IDIpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGZpbmQgdGhlIGNsYXNzXG4gICAgICAgICAgICAgICAgICAgIHZhciBjID0gZ2V0Q2xhc3ModmFsKTtcbiAgICAgICAgICAgICAgICAgICAgdCA9IGMgLyAoX2NsYXNzZXMubGVuZ3RoLTIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoX21heCAhPT0gX21pbikge1xuICAgICAgICAgICAgICAgICAgICAvLyBqdXN0IGludGVycG9sYXRlIGJldHdlZW4gbWluL21heFxuICAgICAgICAgICAgICAgICAgICB0ID0gKHZhbCAtIF9taW4pIC8gKF9tYXggLSBfbWluKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0ID0gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHQgPSB2YWw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGRvbWFpbiBtYXBcbiAgICAgICAgICAgIHQgPSB0TWFwRG9tYWluKHQpO1xuXG4gICAgICAgICAgICBpZiAoIWJ5cGFzc01hcCkge1xuICAgICAgICAgICAgICAgIHQgPSB0TWFwTGlnaHRuZXNzKHQpOyAgLy8gbGlnaHRuZXNzIGNvcnJlY3Rpb25cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKF9nYW1tYSAhPT0gMSkgeyB0ID0gcG93JDModCwgX2dhbW1hKTsgfVxuXG4gICAgICAgICAgICB0ID0gX3BhZGRpbmdbMF0gKyAodCAqICgxIC0gX3BhZGRpbmdbMF0gLSBfcGFkZGluZ1sxXSkpO1xuXG4gICAgICAgICAgICB0ID0gTWF0aC5taW4oMSwgTWF0aC5tYXgoMCwgdCkpO1xuXG4gICAgICAgICAgICB2YXIgayA9IE1hdGguZmxvb3IodCAqIDEwMDAwKTtcblxuICAgICAgICAgICAgaWYgKF91c2VDYWNoZSAmJiBfY29sb3JDYWNoZVtrXSkge1xuICAgICAgICAgICAgICAgIGNvbCA9IF9jb2xvckNhY2hlW2tdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZSQyKF9jb2xvcnMpID09PSAnYXJyYXknKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vZm9yIGkgaW4gWzAuLl9wb3MubGVuZ3RoLTFdXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaTxfcG9zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcCA9IF9wb3NbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA8PSBwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sID0gX2NvbG9yc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgodCA+PSBwKSAmJiAoaSA9PT0gKF9wb3MubGVuZ3RoLTEpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbCA9IF9jb2xvcnNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA+IHAgJiYgdCA8IF9wb3NbaSsxXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSAodC1wKS8oX3Bvc1tpKzFdLXApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbCA9IGNocm9tYSQ0LmludGVycG9sYXRlKF9jb2xvcnNbaV0sIF9jb2xvcnNbaSsxXSwgdCwgX21vZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlJDIoX2NvbG9ycykgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgY29sID0gX2NvbG9ycyh0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKF91c2VDYWNoZSkgeyBfY29sb3JDYWNoZVtrXSA9IGNvbDsgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNvbDtcbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgcmVzZXRDYWNoZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF9jb2xvckNhY2hlID0ge307IH07XG5cbiAgICAgICAgc2V0Q29sb3JzKGNvbG9ycyk7XG5cbiAgICAgICAgLy8gcHVibGljIGludGVyZmFjZVxuXG4gICAgICAgIHZhciBmID0gZnVuY3Rpb24odikge1xuICAgICAgICAgICAgdmFyIGMgPSBjaHJvbWEkNChnZXRDb2xvcih2KSk7XG4gICAgICAgICAgICBpZiAoX291dCAmJiBjW19vdXRdKSB7IHJldHVybiBjW19vdXRdKCk7IH0gZWxzZSB7IHJldHVybiBjOyB9XG4gICAgICAgIH07XG5cbiAgICAgICAgZi5jbGFzc2VzID0gZnVuY3Rpb24oY2xhc3Nlcykge1xuICAgICAgICAgICAgaWYgKGNsYXNzZXMgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlJDIoY2xhc3NlcykgPT09ICdhcnJheScpIHtcbiAgICAgICAgICAgICAgICAgICAgX2NsYXNzZXMgPSBjbGFzc2VzO1xuICAgICAgICAgICAgICAgICAgICBfZG9tYWluID0gW2NsYXNzZXNbMF0sIGNsYXNzZXNbY2xhc3Nlcy5sZW5ndGgtMV1dO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkID0gY2hyb21hJDQuYW5hbHl6ZShfZG9tYWluKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNsYXNzZXMgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc2VzID0gW2QubWluLCBkLm1heF07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NlcyA9IGNocm9tYSQ0LmxpbWl0cyhkLCAnZScsIGNsYXNzZXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIF9jbGFzc2VzO1xuICAgICAgICB9O1xuXG5cbiAgICAgICAgZi5kb21haW4gPSBmdW5jdGlvbihkb21haW4pIHtcbiAgICAgICAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfZG9tYWluO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX21pbiA9IGRvbWFpblswXTtcbiAgICAgICAgICAgIF9tYXggPSBkb21haW5bZG9tYWluLmxlbmd0aC0xXTtcbiAgICAgICAgICAgIF9wb3MgPSBbXTtcbiAgICAgICAgICAgIHZhciBrID0gX2NvbG9ycy5sZW5ndGg7XG4gICAgICAgICAgICBpZiAoKGRvbWFpbi5sZW5ndGggPT09IGspICYmIChfbWluICE9PSBfbWF4KSkge1xuICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSBwb3NpdGlvbnNcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGlzdCA9IEFycmF5LmZyb20oZG9tYWluKTsgaSA8IGxpc3QubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGQgPSBsaXN0W2ldO1xuXG4gICAgICAgICAgICAgICAgICBfcG9zLnB1c2goKGQtX21pbikgLyAoX21heC1fbWluKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBjPTA7IGM8azsgYysrKSB7XG4gICAgICAgICAgICAgICAgICAgIF9wb3MucHVzaChjLyhrLTEpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGRvbWFpbi5sZW5ndGggPiAyKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHNldCBkb21haW4gbWFwXG4gICAgICAgICAgICAgICAgICAgIHZhciB0T3V0ID0gZG9tYWluLm1hcChmdW5jdGlvbiAoZCxpKSB7IHJldHVybiBpLyhkb21haW4ubGVuZ3RoLTEpOyB9KTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRCcmVha3MgPSBkb21haW4ubWFwKGZ1bmN0aW9uIChkKSB7IHJldHVybiAoZCAtIF9taW4pIC8gKF9tYXggLSBfbWluKTsgfSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdEJyZWFrcy5ldmVyeShmdW5jdGlvbiAodmFsLCBpKSB7IHJldHVybiB0T3V0W2ldID09PSB2YWw7IH0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0TWFwRG9tYWluID0gZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA8PSAwIHx8IHQgPj0gMSkgeyByZXR1cm4gdDsgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAodCA+PSB0QnJlYWtzW2krMV0pIHsgaSsrOyB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGYgPSAodCAtIHRCcmVha3NbaV0pIC8gKHRCcmVha3NbaSsxXSAtIHRCcmVha3NbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvdXQgPSB0T3V0W2ldICsgZiAqICh0T3V0W2krMV0gLSB0T3V0W2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX2RvbWFpbiA9IFtfbWluLCBfbWF4XTtcbiAgICAgICAgICAgIHJldHVybiBmO1xuICAgICAgICB9O1xuXG4gICAgICAgIGYubW9kZSA9IGZ1bmN0aW9uKF9tKSB7XG4gICAgICAgICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX21vZGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBfbW9kZSA9IF9tO1xuICAgICAgICAgICAgcmVzZXRDYWNoZSgpO1xuICAgICAgICAgICAgcmV0dXJuIGY7XG4gICAgICAgIH07XG5cbiAgICAgICAgZi5yYW5nZSA9IGZ1bmN0aW9uKGNvbG9ycywgX3Bvcykge1xuICAgICAgICAgICAgc2V0Q29sb3JzKGNvbG9ycyk7XG4gICAgICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgfTtcblxuICAgICAgICBmLm91dCA9IGZ1bmN0aW9uKF9vKSB7XG4gICAgICAgICAgICBfb3V0ID0gX287XG4gICAgICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgfTtcblxuICAgICAgICBmLnNwcmVhZCA9IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9zcHJlYWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBfc3ByZWFkID0gdmFsO1xuICAgICAgICAgICAgcmV0dXJuIGY7XG4gICAgICAgIH07XG5cbiAgICAgICAgZi5jb3JyZWN0TGlnaHRuZXNzID0gZnVuY3Rpb24odikge1xuICAgICAgICAgICAgaWYgKHYgPT0gbnVsbCkgeyB2ID0gdHJ1ZTsgfVxuICAgICAgICAgICAgX2NvcnJlY3RMaWdodG5lc3MgPSB2O1xuICAgICAgICAgICAgcmVzZXRDYWNoZSgpO1xuICAgICAgICAgICAgaWYgKF9jb3JyZWN0TGlnaHRuZXNzKSB7XG4gICAgICAgICAgICAgICAgdE1hcExpZ2h0bmVzcyA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIEwwID0gZ2V0Q29sb3IoMCwgdHJ1ZSkubGFiKClbMF07XG4gICAgICAgICAgICAgICAgICAgIHZhciBMMSA9IGdldENvbG9yKDEsIHRydWUpLmxhYigpWzBdO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcG9sID0gTDAgPiBMMTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIExfYWN0dWFsID0gZ2V0Q29sb3IodCwgdHJ1ZSkubGFiKClbMF07XG4gICAgICAgICAgICAgICAgICAgIHZhciBMX2lkZWFsID0gTDAgKyAoKEwxIC0gTDApICogdCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBMX2RpZmYgPSBMX2FjdHVhbCAtIExfaWRlYWw7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0MCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0MSA9IDE7XG4gICAgICAgICAgICAgICAgICAgIHZhciBtYXhfaXRlciA9IDIwO1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKE1hdGguYWJzKExfZGlmZikgPiAxZS0yKSAmJiAobWF4X2l0ZXItLSA+IDApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBvbCkgeyBMX2RpZmYgKj0gLTE7IH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTF9kaWZmIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0MCA9IHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgKz0gKHQxIC0gdCkgKiAwLjU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDEgPSB0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ICs9ICh0MCAtIHQpICogMC41O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBMX2FjdHVhbCA9IGdldENvbG9yKHQsIHRydWUpLmxhYigpWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBMX2RpZmYgPSBMX2FjdHVhbCAtIExfaWRlYWw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0O1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRNYXBMaWdodG5lc3MgPSBmdW5jdGlvbiAodCkgeyByZXR1cm4gdDsgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmO1xuICAgICAgICB9O1xuXG4gICAgICAgIGYucGFkZGluZyA9IGZ1bmN0aW9uKHApIHtcbiAgICAgICAgICAgIGlmIChwICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZSQyKHApID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgICAgICBwID0gW3AscF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF9wYWRkaW5nID0gcDtcbiAgICAgICAgICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9wYWRkaW5nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGYuY29sb3JzID0gZnVuY3Rpb24obnVtQ29sb3JzLCBvdXQpIHtcbiAgICAgICAgICAgIC8vIElmIG5vIGFyZ3VtZW50cyBhcmUgZ2l2ZW4sIHJldHVybiB0aGUgb3JpZ2luYWwgY29sb3JzIHRoYXQgd2VyZSBwcm92aWRlZFxuICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7IG91dCA9ICdoZXgnOyB9XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gW107XG5cbiAgICAgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gX2NvbG9ycy5zbGljZSgwKTtcblxuICAgICAgICAgICAgfSBlbHNlIGlmIChudW1Db2xvcnMgPT09IDEpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBbZigwLjUpXTtcblxuICAgICAgICAgICAgfSBlbHNlIGlmIChudW1Db2xvcnMgPiAxKSB7XG4gICAgICAgICAgICAgICAgdmFyIGRtID0gX2RvbWFpblswXTtcbiAgICAgICAgICAgICAgICB2YXIgZGQgPSBfZG9tYWluWzFdIC0gZG07XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gX19yYW5nZV9fKDAsIG51bUNvbG9ycywgZmFsc2UpLm1hcChmdW5jdGlvbiAoaSkgeyByZXR1cm4gZiggZG0gKyAoKGkvKG51bUNvbG9ycy0xKSkgKiBkZCkgKTsgfSk7XG5cbiAgICAgICAgICAgIH0gZWxzZSB7IC8vIHJldHVybnMgYWxsIGNvbG9ycyBiYXNlZCBvbiB0aGUgZGVmaW5lZCBjbGFzc2VzXG4gICAgICAgICAgICAgICAgY29sb3JzID0gW107XG4gICAgICAgICAgICAgICAgdmFyIHNhbXBsZXMgPSBbXTtcbiAgICAgICAgICAgICAgICBpZiAoX2NsYXNzZXMgJiYgKF9jbGFzc2VzLmxlbmd0aCA+IDIpKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAxLCBlbmQgPSBfY2xhc3Nlcy5sZW5ndGgsIGFzYyA9IDEgPD0gZW5kOyBhc2MgPyBpIDwgZW5kIDogaSA+IGVuZDsgYXNjID8gaSsrIDogaS0tKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVzLnB1c2goKF9jbGFzc2VzW2ktMV0rX2NsYXNzZXNbaV0pKjAuNSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzYW1wbGVzID0gX2RvbWFpbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gc2FtcGxlcy5tYXAoZnVuY3Rpb24gKHYpIHsgcmV0dXJuIGYodik7IH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY2hyb21hJDRbb3V0XSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5tYXAoZnVuY3Rpb24gKGMpIHsgcmV0dXJuIGNbb3V0XSgpOyB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH07XG5cbiAgICAgICAgZi5jYWNoZSA9IGZ1bmN0aW9uKGMpIHtcbiAgICAgICAgICAgIGlmIChjICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBfdXNlQ2FjaGUgPSBjO1xuICAgICAgICAgICAgICAgIHJldHVybiBmO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3VzZUNhY2hlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGYuZ2FtbWEgPSBmdW5jdGlvbihnKSB7XG4gICAgICAgICAgICBpZiAoZyAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgX2dhbW1hID0gZztcbiAgICAgICAgICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9nYW1tYTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBmLm5vZGF0YSA9IGZ1bmN0aW9uKGQpIHtcbiAgICAgICAgICAgIGlmIChkICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBfbmFjb2wgPSBjaHJvbWEkNChkKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9uYWNvbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gZjtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX19yYW5nZV9fKGxlZnQsIHJpZ2h0LCBpbmNsdXNpdmUpIHtcbiAgICAgIHZhciByYW5nZSA9IFtdO1xuICAgICAgdmFyIGFzY2VuZGluZyA9IGxlZnQgPCByaWdodDtcbiAgICAgIHZhciBlbmQgPSAhaW5jbHVzaXZlID8gcmlnaHQgOiBhc2NlbmRpbmcgPyByaWdodCArIDEgOiByaWdodCAtIDE7XG4gICAgICBmb3IgKHZhciBpID0gbGVmdDsgYXNjZW5kaW5nID8gaSA8IGVuZCA6IGkgPiBlbmQ7IGFzY2VuZGluZyA/IGkrKyA6IGktLSkge1xuICAgICAgICByYW5nZS5wdXNoKGkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJhbmdlO1xuICAgIH1cblxuICAgIC8vXG4gICAgLy8gaW50ZXJwb2xhdGVzIGJldHdlZW4gYSBzZXQgb2YgY29sb3JzIHV6aW5nIGEgYmV6aWVyIHNwbGluZVxuICAgIC8vXG5cbiAgICAvLyBAcmVxdWlyZXMgdXRpbHMgbGFiXG4gICAgdmFyIENvbG9yJDUgPSBDb2xvcl8xO1xuXG4gICAgdmFyIHNjYWxlJDEgPSBzY2FsZSQyO1xuXG4gICAgLy8gbnRoIHJvdyBvZiB0aGUgcGFzY2FsIHRyaWFuZ2xlXG4gICAgdmFyIGJpbm9tX3JvdyA9IGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgdmFyIHJvdyA9IFsxLCAxXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBuZXdyb3cgPSBbMV07XG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMTsgaiA8PSByb3cubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICBuZXdyb3dbal0gPSAocm93W2pdIHx8IDApICsgcm93W2ogLSAxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJvdyA9IG5ld3JvdztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcm93O1xuICAgIH07XG5cbiAgICB2YXIgYmV6aWVyID0gZnVuY3Rpb24oY29sb3JzKSB7XG4gICAgICAgIHZhciBhc3NpZ24sIGFzc2lnbiQxLCBhc3NpZ24kMjtcblxuICAgICAgICB2YXIgSSwgbGFiMCwgbGFiMSwgbGFiMjtcbiAgICAgICAgY29sb3JzID0gY29sb3JzLm1hcChmdW5jdGlvbiAoYykgeyByZXR1cm4gbmV3IENvbG9yJDUoYyk7IH0pO1xuICAgICAgICBpZiAoY29sb3JzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgLy8gbGluZWFyIGludGVycG9sYXRpb25cbiAgICAgICAgICAgIChhc3NpZ24gPSBjb2xvcnMubWFwKGZ1bmN0aW9uIChjKSB7IHJldHVybiBjLmxhYigpOyB9KSwgbGFiMCA9IGFzc2lnblswXSwgbGFiMSA9IGFzc2lnblsxXSk7XG4gICAgICAgICAgICBJID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICAgIHZhciBsYWIgPSAoWzAsIDEsIDJdLm1hcChmdW5jdGlvbiAoaSkgeyByZXR1cm4gbGFiMFtpXSArICh0ICogKGxhYjFbaV0gLSBsYWIwW2ldKSk7IH0pKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbG9yJDUobGFiLCAnbGFiJyk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKGNvbG9ycy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgIC8vIHF1YWRyYXRpYyBiZXppZXIgaW50ZXJwb2xhdGlvblxuICAgICAgICAgICAgKGFzc2lnbiQxID0gY29sb3JzLm1hcChmdW5jdGlvbiAoYykgeyByZXR1cm4gYy5sYWIoKTsgfSksIGxhYjAgPSBhc3NpZ24kMVswXSwgbGFiMSA9IGFzc2lnbiQxWzFdLCBsYWIyID0gYXNzaWduJDFbMl0pO1xuICAgICAgICAgICAgSSA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgICB2YXIgbGFiID0gKFswLCAxLCAyXS5tYXAoZnVuY3Rpb24gKGkpIHsgcmV0dXJuICgoMS10KSooMS10KSAqIGxhYjBbaV0pICsgKDIgKiAoMS10KSAqIHQgKiBsYWIxW2ldKSArICh0ICogdCAqIGxhYjJbaV0pOyB9KSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvciQ1KGxhYiwgJ2xhYicpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmIChjb2xvcnMubGVuZ3RoID09PSA0KSB7XG4gICAgICAgICAgICAvLyBjdWJpYyBiZXppZXIgaW50ZXJwb2xhdGlvblxuICAgICAgICAgICAgdmFyIGxhYjM7XG4gICAgICAgICAgICAoYXNzaWduJDIgPSBjb2xvcnMubWFwKGZ1bmN0aW9uIChjKSB7IHJldHVybiBjLmxhYigpOyB9KSwgbGFiMCA9IGFzc2lnbiQyWzBdLCBsYWIxID0gYXNzaWduJDJbMV0sIGxhYjIgPSBhc3NpZ24kMlsyXSwgbGFiMyA9IGFzc2lnbiQyWzNdKTtcbiAgICAgICAgICAgIEkgPSBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICAgICAgdmFyIGxhYiA9IChbMCwgMSwgMl0ubWFwKGZ1bmN0aW9uIChpKSB7IHJldHVybiAoKDEtdCkqKDEtdCkqKDEtdCkgKiBsYWIwW2ldKSArICgzICogKDEtdCkgKiAoMS10KSAqIHQgKiBsYWIxW2ldKSArICgzICogKDEtdCkgKiB0ICogdCAqIGxhYjJbaV0pICsgKHQqdCp0ICogbGFiM1tpXSk7IH0pKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbG9yJDUobGFiLCAnbGFiJyk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKGNvbG9ycy5sZW5ndGggPj0gNSkge1xuICAgICAgICAgICAgLy8gZ2VuZXJhbCBjYXNlIChkZWdyZWUgbiBiZXppZXIpXG4gICAgICAgICAgICB2YXIgbGFicywgcm93LCBuO1xuICAgICAgICAgICAgbGFicyA9IGNvbG9ycy5tYXAoZnVuY3Rpb24gKGMpIHsgcmV0dXJuIGMubGFiKCk7IH0pO1xuICAgICAgICAgICAgbiA9IGNvbG9ycy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgcm93ID0gYmlub21fcm93KG4pO1xuICAgICAgICAgICAgSSA9IGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICAgICAgdmFyIHUgPSAxIC0gdDtcbiAgICAgICAgICAgICAgICB2YXIgbGFiID0gKFswLCAxLCAyXS5tYXAoZnVuY3Rpb24gKGkpIHsgcmV0dXJuIGxhYnMucmVkdWNlKGZ1bmN0aW9uIChzdW0sIGVsLCBqKSB7IHJldHVybiAoc3VtICsgcm93W2pdICogTWF0aC5wb3coIHUsIChuIC0gaikgKSAqIE1hdGgucG93KCB0LCBqICkgKiBlbFtpXSk7IH0sIDApOyB9KSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvciQ1KGxhYiwgJ2xhYicpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiTm8gcG9pbnQgaW4gcnVubmluZyBiZXppZXIgd2l0aCBvbmx5IG9uZSBjb2xvci5cIilcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gSTtcbiAgICB9O1xuXG4gICAgdmFyIGJlemllcl8xID0gZnVuY3Rpb24gKGNvbG9ycykge1xuICAgICAgICB2YXIgZiA9IGJlemllcihjb2xvcnMpO1xuICAgICAgICBmLnNjYWxlID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gc2NhbGUkMShmKTsgfTtcbiAgICAgICAgcmV0dXJuIGY7XG4gICAgfTtcblxuICAgIC8qXG4gICAgICogaW50ZXJwb2xhdGVzIGJldHdlZW4gYSBzZXQgb2YgY29sb3JzIHV6aW5nIGEgYmV6aWVyIHNwbGluZVxuICAgICAqIGJsZW5kIG1vZGUgZm9ybXVsYXMgdGFrZW4gZnJvbSBodHRwOi8vd3d3LnZlbnR1cmUtd2FyZS5jb20va2V2aW4vY29kaW5nL2xldHMtbGVhcm4tbWF0aC1waG90b3Nob3AtYmxlbmQtbW9kZXMvXG4gICAgICovXG5cbiAgICB2YXIgY2hyb21hJDMgPSBjaHJvbWFfMTtcblxuICAgIHZhciBibGVuZCA9IGZ1bmN0aW9uIChib3R0b20sIHRvcCwgbW9kZSkge1xuICAgICAgICBpZiAoIWJsZW5kW21vZGVdKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Vua25vd24gYmxlbmQgbW9kZSAnICsgbW9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGJsZW5kW21vZGVdKGJvdHRvbSwgdG9wKTtcbiAgICB9O1xuXG4gICAgdmFyIGJsZW5kX2YgPSBmdW5jdGlvbiAoZikgeyByZXR1cm4gZnVuY3Rpb24gKGJvdHRvbSx0b3ApIHtcbiAgICAgICAgICAgIHZhciBjMCA9IGNocm9tYSQzKHRvcCkucmdiKCk7XG4gICAgICAgICAgICB2YXIgYzEgPSBjaHJvbWEkMyhib3R0b20pLnJnYigpO1xuICAgICAgICAgICAgcmV0dXJuIGNocm9tYSQzLnJnYihmKGMwLCBjMSkpO1xuICAgICAgICB9OyB9O1xuXG4gICAgdmFyIGVhY2ggPSBmdW5jdGlvbiAoZikgeyByZXR1cm4gZnVuY3Rpb24gKGMwLCBjMSkge1xuICAgICAgICAgICAgdmFyIG91dCA9IFtdO1xuICAgICAgICAgICAgb3V0WzBdID0gZihjMFswXSwgYzFbMF0pO1xuICAgICAgICAgICAgb3V0WzFdID0gZihjMFsxXSwgYzFbMV0pO1xuICAgICAgICAgICAgb3V0WzJdID0gZihjMFsyXSwgYzFbMl0pO1xuICAgICAgICAgICAgcmV0dXJuIG91dDtcbiAgICAgICAgfTsgfTtcblxuICAgIHZhciBub3JtYWwgPSBmdW5jdGlvbiAoYSkgeyByZXR1cm4gYTsgfTtcbiAgICB2YXIgbXVsdGlwbHkgPSBmdW5jdGlvbiAoYSxiKSB7IHJldHVybiBhICogYiAvIDI1NTsgfTtcbiAgICB2YXIgZGFya2VuID0gZnVuY3Rpb24gKGEsYikgeyByZXR1cm4gYSA+IGIgPyBiIDogYTsgfTtcbiAgICB2YXIgbGlnaHRlbiA9IGZ1bmN0aW9uIChhLGIpIHsgcmV0dXJuIGEgPiBiID8gYSA6IGI7IH07XG4gICAgdmFyIHNjcmVlbiA9IGZ1bmN0aW9uIChhLGIpIHsgcmV0dXJuIDI1NSAqICgxIC0gKDEtYS8yNTUpICogKDEtYi8yNTUpKTsgfTtcbiAgICB2YXIgb3ZlcmxheSA9IGZ1bmN0aW9uIChhLGIpIHsgcmV0dXJuIGIgPCAxMjggPyAyICogYSAqIGIgLyAyNTUgOiAyNTUgKiAoMSAtIDIgKiAoMSAtIGEgLyAyNTUgKSAqICggMSAtIGIgLyAyNTUgKSk7IH07XG4gICAgdmFyIGJ1cm4gPSBmdW5jdGlvbiAoYSxiKSB7IHJldHVybiAyNTUgKiAoMSAtICgxIC0gYiAvIDI1NSkgLyAoYS8yNTUpKTsgfTtcbiAgICB2YXIgZG9kZ2UgPSBmdW5jdGlvbiAoYSxiKSB7XG4gICAgICAgIGlmIChhID09PSAyNTUpIHsgcmV0dXJuIDI1NTsgfVxuICAgICAgICBhID0gMjU1ICogKGIgLyAyNTUpIC8gKDEgLSBhIC8gMjU1KTtcbiAgICAgICAgcmV0dXJuIGEgPiAyNTUgPyAyNTUgOiBhXG4gICAgfTtcblxuICAgIC8vICMgYWRkID0gKGEsYikgLT5cbiAgICAvLyAjICAgICBpZiAoYSArIGIgPiAyNTUpIHRoZW4gMjU1IGVsc2UgYSArIGJcblxuICAgIGJsZW5kLm5vcm1hbCA9IGJsZW5kX2YoZWFjaChub3JtYWwpKTtcbiAgICBibGVuZC5tdWx0aXBseSA9IGJsZW5kX2YoZWFjaChtdWx0aXBseSkpO1xuICAgIGJsZW5kLnNjcmVlbiA9IGJsZW5kX2YoZWFjaChzY3JlZW4pKTtcbiAgICBibGVuZC5vdmVybGF5ID0gYmxlbmRfZihlYWNoKG92ZXJsYXkpKTtcbiAgICBibGVuZC5kYXJrZW4gPSBibGVuZF9mKGVhY2goZGFya2VuKSk7XG4gICAgYmxlbmQubGlnaHRlbiA9IGJsZW5kX2YoZWFjaChsaWdodGVuKSk7XG4gICAgYmxlbmQuZG9kZ2UgPSBibGVuZF9mKGVhY2goZG9kZ2UpKTtcbiAgICBibGVuZC5idXJuID0gYmxlbmRfZihlYWNoKGJ1cm4pKTtcbiAgICAvLyBibGVuZC5hZGQgPSBibGVuZF9mKGVhY2goYWRkKSk7XG5cbiAgICB2YXIgYmxlbmRfMSA9IGJsZW5kO1xuXG4gICAgLy8gY3ViZWhlbGl4IGludGVycG9sYXRpb25cbiAgICAvLyBiYXNlZCBvbiBELkEuIEdyZWVuIFwiQSBjb2xvdXIgc2NoZW1lIGZvciB0aGUgZGlzcGxheSBvZiBhc3Ryb25vbWljYWwgaW50ZW5zaXR5IGltYWdlc1wiXG4gICAgLy8gaHR0cDovL2FzdHJvbi1zb2MuaW4vYnVsbGV0aW4vMTFKdW5lLzI4OTM5MjAxMS5wZGZcblxuICAgIHZhciB0eXBlJDEgPSB1dGlscy50eXBlO1xuICAgIHZhciBjbGlwX3JnYiA9IHV0aWxzLmNsaXBfcmdiO1xuICAgIHZhciBUV09QSSA9IHV0aWxzLlRXT1BJO1xuICAgIHZhciBwb3ckMiA9IE1hdGgucG93O1xuICAgIHZhciBzaW4kMSA9IE1hdGguc2luO1xuICAgIHZhciBjb3MkMSA9IE1hdGguY29zO1xuICAgIHZhciBjaHJvbWEkMiA9IGNocm9tYV8xO1xuXG4gICAgdmFyIGN1YmVoZWxpeCA9IGZ1bmN0aW9uKHN0YXJ0LCByb3RhdGlvbnMsIGh1ZSwgZ2FtbWEsIGxpZ2h0bmVzcykge1xuICAgICAgICBpZiAoIHN0YXJ0ID09PSB2b2lkIDAgKSBzdGFydD0zMDA7XG4gICAgICAgIGlmICggcm90YXRpb25zID09PSB2b2lkIDAgKSByb3RhdGlvbnM9LTEuNTtcbiAgICAgICAgaWYgKCBodWUgPT09IHZvaWQgMCApIGh1ZT0xO1xuICAgICAgICBpZiAoIGdhbW1hID09PSB2b2lkIDAgKSBnYW1tYT0xO1xuICAgICAgICBpZiAoIGxpZ2h0bmVzcyA9PT0gdm9pZCAwICkgbGlnaHRuZXNzPVswLDFdO1xuXG4gICAgICAgIHZhciBkaCA9IDAsIGRsO1xuICAgICAgICBpZiAodHlwZSQxKGxpZ2h0bmVzcykgPT09ICdhcnJheScpIHtcbiAgICAgICAgICAgIGRsID0gbGlnaHRuZXNzWzFdIC0gbGlnaHRuZXNzWzBdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGwgPSAwO1xuICAgICAgICAgICAgbGlnaHRuZXNzID0gW2xpZ2h0bmVzcywgbGlnaHRuZXNzXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBmID0gZnVuY3Rpb24oZnJhY3QpIHtcbiAgICAgICAgICAgIHZhciBhID0gVFdPUEkgKiAoKChzdGFydCsxMjApLzM2MCkgKyAocm90YXRpb25zICogZnJhY3QpKTtcbiAgICAgICAgICAgIHZhciBsID0gcG93JDIobGlnaHRuZXNzWzBdICsgKGRsICogZnJhY3QpLCBnYW1tYSk7XG4gICAgICAgICAgICB2YXIgaCA9IGRoICE9PSAwID8gaHVlWzBdICsgKGZyYWN0ICogZGgpIDogaHVlO1xuICAgICAgICAgICAgdmFyIGFtcCA9IChoICogbCAqICgxLWwpKSAvIDI7XG4gICAgICAgICAgICB2YXIgY29zX2EgPSBjb3MkMShhKTtcbiAgICAgICAgICAgIHZhciBzaW5fYSA9IHNpbiQxKGEpO1xuICAgICAgICAgICAgdmFyIHIgPSBsICsgKGFtcCAqICgoLTAuMTQ4NjEgKiBjb3NfYSkgKyAoMS43ODI3Nyogc2luX2EpKSk7XG4gICAgICAgICAgICB2YXIgZyA9IGwgKyAoYW1wICogKCgtMC4yOTIyNyAqIGNvc19hKSAtICgwLjkwNjQ5KiBzaW5fYSkpKTtcbiAgICAgICAgICAgIHZhciBiID0gbCArIChhbXAgKiAoKzEuOTcyOTQgKiBjb3NfYSkpO1xuICAgICAgICAgICAgcmV0dXJuIGNocm9tYSQyKGNsaXBfcmdiKFtyKjI1NSxnKjI1NSxiKjI1NSwxXSkpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGYuc3RhcnQgPSBmdW5jdGlvbihzKSB7XG4gICAgICAgICAgICBpZiAoKHMgPT0gbnVsbCkpIHsgcmV0dXJuIHN0YXJ0OyB9XG4gICAgICAgICAgICBzdGFydCA9IHM7XG4gICAgICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgfTtcblxuICAgICAgICBmLnJvdGF0aW9ucyA9IGZ1bmN0aW9uKHIpIHtcbiAgICAgICAgICAgIGlmICgociA9PSBudWxsKSkgeyByZXR1cm4gcm90YXRpb25zOyB9XG4gICAgICAgICAgICByb3RhdGlvbnMgPSByO1xuICAgICAgICAgICAgcmV0dXJuIGY7XG4gICAgICAgIH07XG5cbiAgICAgICAgZi5nYW1tYSA9IGZ1bmN0aW9uKGcpIHtcbiAgICAgICAgICAgIGlmICgoZyA9PSBudWxsKSkgeyByZXR1cm4gZ2FtbWE7IH1cbiAgICAgICAgICAgIGdhbW1hID0gZztcbiAgICAgICAgICAgIHJldHVybiBmO1xuICAgICAgICB9O1xuXG4gICAgICAgIGYuaHVlID0gZnVuY3Rpb24oaCkge1xuICAgICAgICAgICAgaWYgKChoID09IG51bGwpKSB7IHJldHVybiBodWU7IH1cbiAgICAgICAgICAgIGh1ZSA9IGg7XG4gICAgICAgICAgICBpZiAodHlwZSQxKGh1ZSkgPT09ICdhcnJheScpIHtcbiAgICAgICAgICAgICAgICBkaCA9IGh1ZVsxXSAtIGh1ZVswXTtcbiAgICAgICAgICAgICAgICBpZiAoZGggPT09IDApIHsgaHVlID0gaHVlWzFdOyB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRoID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmO1xuICAgICAgICB9O1xuXG4gICAgICAgIGYubGlnaHRuZXNzID0gZnVuY3Rpb24oaCkge1xuICAgICAgICAgICAgaWYgKChoID09IG51bGwpKSB7IHJldHVybiBsaWdodG5lc3M7IH1cbiAgICAgICAgICAgIGlmICh0eXBlJDEoaCkgPT09ICdhcnJheScpIHtcbiAgICAgICAgICAgICAgICBsaWdodG5lc3MgPSBoO1xuICAgICAgICAgICAgICAgIGRsID0gaFsxXSAtIGhbMF07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxpZ2h0bmVzcyA9IFtoLGhdO1xuICAgICAgICAgICAgICAgIGRsID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmO1xuICAgICAgICB9O1xuXG4gICAgICAgIGYuc2NhbGUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBjaHJvbWEkMi5zY2FsZShmKTsgfTtcblxuICAgICAgICBmLmh1ZShodWUpO1xuXG4gICAgICAgIHJldHVybiBmO1xuICAgIH07XG5cbiAgICB2YXIgQ29sb3IkNCA9IENvbG9yXzE7XG4gICAgdmFyIGRpZ2l0cyA9ICcwMTIzNDU2Nzg5YWJjZGVmJztcblxuICAgIHZhciBmbG9vciQxID0gTWF0aC5mbG9vcjtcbiAgICB2YXIgcmFuZG9tID0gTWF0aC5yYW5kb207XG5cbiAgICB2YXIgcmFuZG9tXzEgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBjb2RlID0gJyMnO1xuICAgICAgICBmb3IgKHZhciBpPTA7IGk8NjsgaSsrKSB7XG4gICAgICAgICAgICBjb2RlICs9IGRpZ2l0cy5jaGFyQXQoZmxvb3IkMShyYW5kb20oKSAqIDE2KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBDb2xvciQ0KGNvZGUsICdoZXgnKTtcbiAgICB9O1xuXG4gICAgdmFyIHR5cGUgPSB0eXBlJHA7XG4gICAgdmFyIGxvZyA9IE1hdGgubG9nO1xuICAgIHZhciBwb3ckMSA9IE1hdGgucG93O1xuICAgIHZhciBmbG9vciA9IE1hdGguZmxvb3I7XG4gICAgdmFyIGFicyQxID0gTWF0aC5hYnM7XG5cblxuICAgIHZhciBhbmFseXplID0gZnVuY3Rpb24gKGRhdGEsIGtleSkge1xuICAgICAgICBpZiAoIGtleSA9PT0gdm9pZCAwICkga2V5PW51bGw7XG5cbiAgICAgICAgdmFyIHIgPSB7XG4gICAgICAgICAgICBtaW46IE51bWJlci5NQVhfVkFMVUUsXG4gICAgICAgICAgICBtYXg6IE51bWJlci5NQVhfVkFMVUUqLTEsXG4gICAgICAgICAgICBzdW06IDAsXG4gICAgICAgICAgICB2YWx1ZXM6IFtdLFxuICAgICAgICAgICAgY291bnQ6IDBcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHR5cGUoZGF0YSkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBkYXRhID0gT2JqZWN0LnZhbHVlcyhkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBkYXRhLmZvckVhY2goZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgaWYgKGtleSAmJiB0eXBlKHZhbCkgPT09ICdvYmplY3QnKSB7IHZhbCA9IHZhbFtrZXldOyB9XG4gICAgICAgICAgICBpZiAodmFsICE9PSB1bmRlZmluZWQgJiYgdmFsICE9PSBudWxsICYmICFpc05hTih2YWwpKSB7XG4gICAgICAgICAgICAgICAgci52YWx1ZXMucHVzaCh2YWwpO1xuICAgICAgICAgICAgICAgIHIuc3VtICs9IHZhbDtcbiAgICAgICAgICAgICAgICBpZiAodmFsIDwgci5taW4pIHsgci5taW4gPSB2YWw7IH1cbiAgICAgICAgICAgICAgICBpZiAodmFsID4gci5tYXgpIHsgci5tYXggPSB2YWw7IH1cbiAgICAgICAgICAgICAgICByLmNvdW50ICs9IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHIuZG9tYWluID0gW3IubWluLCByLm1heF07XG5cbiAgICAgICAgci5saW1pdHMgPSBmdW5jdGlvbiAobW9kZSwgbnVtKSB7IHJldHVybiBsaW1pdHMociwgbW9kZSwgbnVtKTsgfTtcblxuICAgICAgICByZXR1cm4gcjtcbiAgICB9O1xuXG5cbiAgICB2YXIgbGltaXRzID0gZnVuY3Rpb24gKGRhdGEsIG1vZGUsIG51bSkge1xuICAgICAgICBpZiAoIG1vZGUgPT09IHZvaWQgMCApIG1vZGU9J2VxdWFsJztcbiAgICAgICAgaWYgKCBudW0gPT09IHZvaWQgMCApIG51bT03O1xuXG4gICAgICAgIGlmICh0eXBlKGRhdGEpID09ICdhcnJheScpIHtcbiAgICAgICAgICAgIGRhdGEgPSBhbmFseXplKGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBtaW4gPSBkYXRhLm1pbjtcbiAgICAgICAgdmFyIG1heCA9IGRhdGEubWF4O1xuICAgICAgICB2YXIgdmFsdWVzID0gZGF0YS52YWx1ZXMuc29ydChmdW5jdGlvbiAoYSxiKSB7IHJldHVybiBhLWI7IH0pO1xuXG4gICAgICAgIGlmIChudW0gPT09IDEpIHsgcmV0dXJuIFttaW4sbWF4XTsgfVxuXG4gICAgICAgIHZhciBsaW1pdHMgPSBbXTtcblxuICAgICAgICBpZiAobW9kZS5zdWJzdHIoMCwxKSA9PT0gJ2MnKSB7IC8vIGNvbnRpbnVvdXNcbiAgICAgICAgICAgIGxpbWl0cy5wdXNoKG1pbik7XG4gICAgICAgICAgICBsaW1pdHMucHVzaChtYXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1vZGUuc3Vic3RyKDAsMSkgPT09ICdlJykgeyAvLyBlcXVhbCBpbnRlcnZhbFxuICAgICAgICAgICAgbGltaXRzLnB1c2gobWluKTtcbiAgICAgICAgICAgIGZvciAodmFyIGk9MTsgaTxudW07IGkrKykge1xuICAgICAgICAgICAgICAgIGxpbWl0cy5wdXNoKG1pbisoKGkvbnVtKSoobWF4LW1pbikpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxpbWl0cy5wdXNoKG1heCk7XG4gICAgICAgIH1cblxuICAgICAgICBlbHNlIGlmIChtb2RlLnN1YnN0cigwLDEpID09PSAnbCcpIHsgLy8gbG9nIHNjYWxlXG4gICAgICAgICAgICBpZiAobWluIDw9IDApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0xvZ2FyaXRobWljIHNjYWxlcyBhcmUgb25seSBwb3NzaWJsZSBmb3IgdmFsdWVzID4gMCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIG1pbl9sb2cgPSBNYXRoLkxPRzEwRSAqIGxvZyhtaW4pO1xuICAgICAgICAgICAgdmFyIG1heF9sb2cgPSBNYXRoLkxPRzEwRSAqIGxvZyhtYXgpO1xuICAgICAgICAgICAgbGltaXRzLnB1c2gobWluKTtcbiAgICAgICAgICAgIGZvciAodmFyIGkkMT0xOyBpJDE8bnVtOyBpJDErKykge1xuICAgICAgICAgICAgICAgIGxpbWl0cy5wdXNoKHBvdyQxKDEwLCBtaW5fbG9nICsgKChpJDEvbnVtKSAqIChtYXhfbG9nIC0gbWluX2xvZykpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsaW1pdHMucHVzaChtYXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgZWxzZSBpZiAobW9kZS5zdWJzdHIoMCwxKSA9PT0gJ3EnKSB7IC8vIHF1YW50aWxlIHNjYWxlXG4gICAgICAgICAgICBsaW1pdHMucHVzaChtaW4pO1xuICAgICAgICAgICAgZm9yICh2YXIgaSQyPTE7IGkkMjxudW07IGkkMisrKSB7XG4gICAgICAgICAgICAgICAgdmFyIHAgPSAoKHZhbHVlcy5sZW5ndGgtMSkgKiBpJDIpL251bTtcbiAgICAgICAgICAgICAgICB2YXIgcGIgPSBmbG9vcihwKTtcbiAgICAgICAgICAgICAgICBpZiAocGIgPT09IHApIHtcbiAgICAgICAgICAgICAgICAgICAgbGltaXRzLnB1c2godmFsdWVzW3BiXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHsgLy8gcCA+IHBiXG4gICAgICAgICAgICAgICAgICAgIHZhciBwciA9IHAgLSBwYjtcbiAgICAgICAgICAgICAgICAgICAgbGltaXRzLnB1c2goKHZhbHVlc1twYl0qKDEtcHIpKSArICh2YWx1ZXNbcGIrMV0qcHIpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsaW1pdHMucHVzaChtYXgpO1xuXG4gICAgICAgIH1cblxuICAgICAgICBlbHNlIGlmIChtb2RlLnN1YnN0cigwLDEpID09PSAnaycpIHsgLy8gay1tZWFucyBjbHVzdGVyaW5nXG4gICAgICAgICAgICAvKlxuICAgICAgICAgICAgaW1wbGVtZW50YXRpb24gYmFzZWQgb25cbiAgICAgICAgICAgIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9maWd1ZS9zb3VyY2UvYnJvd3NlL3RydW5rL2ZpZ3VlLmpzIzMzNlxuICAgICAgICAgICAgc2ltcGxpZmllZCBmb3IgMS1kIGlucHV0IHZhbHVlc1xuICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHZhciBjbHVzdGVyO1xuICAgICAgICAgICAgdmFyIG4gPSB2YWx1ZXMubGVuZ3RoO1xuICAgICAgICAgICAgdmFyIGFzc2lnbm1lbnRzID0gbmV3IEFycmF5KG4pO1xuICAgICAgICAgICAgdmFyIGNsdXN0ZXJTaXplcyA9IG5ldyBBcnJheShudW0pO1xuICAgICAgICAgICAgdmFyIHJlcGVhdCA9IHRydWU7XG4gICAgICAgICAgICB2YXIgbmJfaXRlcnMgPSAwO1xuICAgICAgICAgICAgdmFyIGNlbnRyb2lkcyA9IG51bGw7XG5cbiAgICAgICAgICAgIC8vIGdldCBzZWVkIHZhbHVlc1xuICAgICAgICAgICAgY2VudHJvaWRzID0gW107XG4gICAgICAgICAgICBjZW50cm9pZHMucHVzaChtaW4pO1xuICAgICAgICAgICAgZm9yICh2YXIgaSQzPTE7IGkkMzxudW07IGkkMysrKSB7XG4gICAgICAgICAgICAgICAgY2VudHJvaWRzLnB1c2gobWluICsgKChpJDMvbnVtKSAqIChtYXgtbWluKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2VudHJvaWRzLnB1c2gobWF4KTtcblxuICAgICAgICAgICAgd2hpbGUgKHJlcGVhdCkge1xuICAgICAgICAgICAgICAgIC8vIGFzc2lnbm1lbnQgc3RlcFxuICAgICAgICAgICAgICAgIGZvciAodmFyIGo9MDsgajxudW07IGorKykge1xuICAgICAgICAgICAgICAgICAgICBjbHVzdGVyU2l6ZXNbal0gPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpJDQ9MDsgaSQ0PG47IGkkNCsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHZhbHVlc1tpJDRdO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbWluZGlzdCA9IE51bWJlci5NQVhfVkFMVUU7XG4gICAgICAgICAgICAgICAgICAgIHZhciBiZXN0ID0gKHZvaWQgMCk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGokMT0wOyBqJDE8bnVtOyBqJDErKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRpc3QgPSBhYnMkMShjZW50cm9pZHNbaiQxXS12YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGlzdCA8IG1pbmRpc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5kaXN0ID0gZGlzdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZXN0ID0gaiQxO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2x1c3RlclNpemVzW2Jlc3RdKys7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NpZ25tZW50c1tpJDRdID0gYmVzdDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSBjZW50cm9pZHMgc3RlcFxuICAgICAgICAgICAgICAgIHZhciBuZXdDZW50cm9pZHMgPSBuZXcgQXJyYXkobnVtKTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBqJDI9MDsgaiQyPG51bTsgaiQyKyspIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3Q2VudHJvaWRzW2okMl0gPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpJDU9MDsgaSQ1PG47IGkkNSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNsdXN0ZXIgPSBhc3NpZ25tZW50c1tpJDVdO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV3Q2VudHJvaWRzW2NsdXN0ZXJdID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdDZW50cm9pZHNbY2x1c3Rlcl0gPSB2YWx1ZXNbaSQ1XTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NlbnRyb2lkc1tjbHVzdGVyXSArPSB2YWx1ZXNbaSQ1XTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmb3IgKHZhciBqJDM9MDsgaiQzPG51bTsgaiQzKyspIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3Q2VudHJvaWRzW2okM10gKj0gMS9jbHVzdGVyU2l6ZXNbaiQzXTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBjaGVjayBjb252ZXJnZW5jZVxuICAgICAgICAgICAgICAgIHJlcGVhdCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGokND0wOyBqJDQ8bnVtOyBqJDQrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV3Q2VudHJvaWRzW2okNF0gIT09IGNlbnRyb2lkc1tqJDRdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXBlYXQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjZW50cm9pZHMgPSBuZXdDZW50cm9pZHM7XG4gICAgICAgICAgICAgICAgbmJfaXRlcnMrKztcblxuICAgICAgICAgICAgICAgIGlmIChuYl9pdGVycyA+IDIwMCkge1xuICAgICAgICAgICAgICAgICAgICByZXBlYXQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGZpbmlzaGVkIGstbWVhbnMgY2x1c3RlcmluZ1xuICAgICAgICAgICAgLy8gdGhlIG5leHQgcGFydCBpcyBib3Jyb3dlZCBmcm9tIGdhYnJpZWxmbG9yLml0XG4gICAgICAgICAgICB2YXIga0NsdXN0ZXJzID0ge307XG4gICAgICAgICAgICBmb3IgKHZhciBqJDU9MDsgaiQ1PG51bTsgaiQ1KyspIHtcbiAgICAgICAgICAgICAgICBrQ2x1c3RlcnNbaiQ1XSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yICh2YXIgaSQ2PTA7IGkkNjxuOyBpJDYrKykge1xuICAgICAgICAgICAgICAgIGNsdXN0ZXIgPSBhc3NpZ25tZW50c1tpJDZdO1xuICAgICAgICAgICAgICAgIGtDbHVzdGVyc1tjbHVzdGVyXS5wdXNoKHZhbHVlc1tpJDZdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciB0bXBLTWVhbnNCcmVha3MgPSBbXTtcbiAgICAgICAgICAgIGZvciAodmFyIGokNj0wOyBqJDY8bnVtOyBqJDYrKykge1xuICAgICAgICAgICAgICAgIHRtcEtNZWFuc0JyZWFrcy5wdXNoKGtDbHVzdGVyc1tqJDZdWzBdKTtcbiAgICAgICAgICAgICAgICB0bXBLTWVhbnNCcmVha3MucHVzaChrQ2x1c3RlcnNbaiQ2XVtrQ2x1c3RlcnNbaiQ2XS5sZW5ndGgtMV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdG1wS01lYW5zQnJlYWtzID0gdG1wS01lYW5zQnJlYWtzLnNvcnQoZnVuY3Rpb24gKGEsYil7IHJldHVybiBhLWI7IH0pO1xuICAgICAgICAgICAgbGltaXRzLnB1c2godG1wS01lYW5zQnJlYWtzWzBdKTtcbiAgICAgICAgICAgIGZvciAodmFyIGkkNz0xOyBpJDcgPCB0bXBLTWVhbnNCcmVha3MubGVuZ3RoOyBpJDcrPSAyKSB7XG4gICAgICAgICAgICAgICAgdmFyIHYgPSB0bXBLTWVhbnNCcmVha3NbaSQ3XTtcbiAgICAgICAgICAgICAgICBpZiAoIWlzTmFOKHYpICYmIChsaW1pdHMuaW5kZXhPZih2KSA9PT0gLTEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGxpbWl0cy5wdXNoKHYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGltaXRzO1xuICAgIH07XG5cbiAgICB2YXIgYW5hbHl6ZV8xID0ge2FuYWx5emU6IGFuYWx5emUsIGxpbWl0czogbGltaXRzfTtcblxuICAgIHZhciBDb2xvciQzID0gQ29sb3JfMTtcblxuXG4gICAgdmFyIGNvbnRyYXN0ID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgLy8gV0NBRyBjb250cmFzdCByYXRpb1xuICAgICAgICAvLyBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwOC9SRUMtV0NBRzIwLTIwMDgxMjExLyNjb250cmFzdC1yYXRpb2RlZlxuICAgICAgICBhID0gbmV3IENvbG9yJDMoYSk7XG4gICAgICAgIGIgPSBuZXcgQ29sb3IkMyhiKTtcbiAgICAgICAgdmFyIGwxID0gYS5sdW1pbmFuY2UoKTtcbiAgICAgICAgdmFyIGwyID0gYi5sdW1pbmFuY2UoKTtcbiAgICAgICAgcmV0dXJuIGwxID4gbDIgPyAobDEgKyAwLjA1KSAvIChsMiArIDAuMDUpIDogKGwyICsgMC4wNSkgLyAobDEgKyAwLjA1KTtcbiAgICB9O1xuXG4gICAgdmFyIENvbG9yJDIgPSBDb2xvcl8xO1xuICAgIHZhciBzcXJ0ID0gTWF0aC5zcXJ0O1xuICAgIHZhciBwb3cgPSBNYXRoLnBvdztcbiAgICB2YXIgbWluID0gTWF0aC5taW47XG4gICAgdmFyIG1heCA9IE1hdGgubWF4O1xuICAgIHZhciBhdGFuMiA9IE1hdGguYXRhbjI7XG4gICAgdmFyIGFicyA9IE1hdGguYWJzO1xuICAgIHZhciBjb3MgPSBNYXRoLmNvcztcbiAgICB2YXIgc2luID0gTWF0aC5zaW47XG4gICAgdmFyIGV4cCA9IE1hdGguZXhwO1xuICAgIHZhciBQSSA9IE1hdGguUEk7XG5cbiAgICB2YXIgZGVsdGFFID0gZnVuY3Rpb24oYSwgYiwgS2wsIEtjLCBLaCkge1xuICAgICAgICBpZiAoIEtsID09PSB2b2lkIDAgKSBLbD0xO1xuICAgICAgICBpZiAoIEtjID09PSB2b2lkIDAgKSBLYz0xO1xuICAgICAgICBpZiAoIEtoID09PSB2b2lkIDAgKSBLaD0xO1xuXG4gICAgICAgIC8vIERlbHRhIEUgKENJRSAyMDAwKVxuICAgICAgICAvLyBzZWUgaHR0cDovL3d3dy5icnVjZWxpbmRibG9vbS5jb20vaW5kZXguaHRtbD9FcW5fRGVsdGFFX0NJRTIwMDAuaHRtbFxuICAgICAgICB2YXIgcmFkMmRlZyA9IGZ1bmN0aW9uKHJhZCkge1xuICAgICAgICAgICAgcmV0dXJuIDM2MCAqIHJhZCAvICgyICogUEkpO1xuICAgICAgICB9O1xuICAgICAgICB2YXIgZGVnMnJhZCA9IGZ1bmN0aW9uKGRlZykge1xuICAgICAgICAgICAgcmV0dXJuICgyICogUEkgKiBkZWcpIC8gMzYwO1xuICAgICAgICB9O1xuICAgICAgICBhID0gbmV3IENvbG9yJDIoYSk7XG4gICAgICAgIGIgPSBuZXcgQ29sb3IkMihiKTtcbiAgICAgICAgdmFyIHJlZiA9IEFycmF5LmZyb20oYS5sYWIoKSk7XG4gICAgICAgIHZhciBMMSA9IHJlZlswXTtcbiAgICAgICAgdmFyIGExID0gcmVmWzFdO1xuICAgICAgICB2YXIgYjEgPSByZWZbMl07XG4gICAgICAgIHZhciByZWYkMSA9IEFycmF5LmZyb20oYi5sYWIoKSk7XG4gICAgICAgIHZhciBMMiA9IHJlZiQxWzBdO1xuICAgICAgICB2YXIgYTIgPSByZWYkMVsxXTtcbiAgICAgICAgdmFyIGIyID0gcmVmJDFbMl07XG4gICAgICAgIHZhciBhdmdMID0gKEwxICsgTDIpLzI7XG4gICAgICAgIHZhciBDMSA9IHNxcnQocG93KGExLCAyKSArIHBvdyhiMSwgMikpO1xuICAgICAgICB2YXIgQzIgPSBzcXJ0KHBvdyhhMiwgMikgKyBwb3coYjIsIDIpKTtcbiAgICAgICAgdmFyIGF2Z0MgPSAoQzEgKyBDMikvMjtcbiAgICAgICAgdmFyIEcgPSAwLjUqKDEtc3FydChwb3coYXZnQywgNykvKHBvdyhhdmdDLCA3KSArIHBvdygyNSwgNykpKSk7XG4gICAgICAgIHZhciBhMXAgPSBhMSooMStHKTtcbiAgICAgICAgdmFyIGEycCA9IGEyKigxK0cpO1xuICAgICAgICB2YXIgQzFwID0gc3FydChwb3coYTFwLCAyKSArIHBvdyhiMSwgMikpO1xuICAgICAgICB2YXIgQzJwID0gc3FydChwb3coYTJwLCAyKSArIHBvdyhiMiwgMikpO1xuICAgICAgICB2YXIgYXZnQ3AgPSAoQzFwICsgQzJwKS8yO1xuICAgICAgICB2YXIgYXJjdGFuMSA9IHJhZDJkZWcoYXRhbjIoYjEsIGExcCkpO1xuICAgICAgICB2YXIgYXJjdGFuMiA9IHJhZDJkZWcoYXRhbjIoYjIsIGEycCkpO1xuICAgICAgICB2YXIgaDFwID0gYXJjdGFuMSA+PSAwID8gYXJjdGFuMSA6IGFyY3RhbjEgKyAzNjA7XG4gICAgICAgIHZhciBoMnAgPSBhcmN0YW4yID49IDAgPyBhcmN0YW4yIDogYXJjdGFuMiArIDM2MDtcbiAgICAgICAgdmFyIGF2Z0hwID0gYWJzKGgxcCAtIGgycCkgPiAxODAgPyAoaDFwICsgaDJwICsgMzYwKS8yIDogKGgxcCArIGgycCkvMjtcbiAgICAgICAgdmFyIFQgPSAxIC0gMC4xNypjb3MoZGVnMnJhZChhdmdIcCAtIDMwKSkgKyAwLjI0KmNvcyhkZWcycmFkKDIqYXZnSHApKSArIDAuMzIqY29zKGRlZzJyYWQoMyphdmdIcCArIDYpKSAtIDAuMipjb3MoZGVnMnJhZCg0KmF2Z0hwIC0gNjMpKTtcbiAgICAgICAgdmFyIGRlbHRhSHAgPSBoMnAgLSBoMXA7XG4gICAgICAgIGRlbHRhSHAgPSBhYnMoZGVsdGFIcCkgPD0gMTgwID8gZGVsdGFIcCA6IGgycCA8PSBoMXAgPyBkZWx0YUhwICsgMzYwIDogZGVsdGFIcCAtIDM2MDtcbiAgICAgICAgZGVsdGFIcCA9IDIqc3FydChDMXAqQzJwKSpzaW4oZGVnMnJhZChkZWx0YUhwKS8yKTtcbiAgICAgICAgdmFyIGRlbHRhTCA9IEwyIC0gTDE7XG4gICAgICAgIHZhciBkZWx0YUNwID0gQzJwIC0gQzFwOyAgICBcbiAgICAgICAgdmFyIHNsID0gMSArICgwLjAxNSpwb3coYXZnTCAtIDUwLCAyKSkvc3FydCgyMCArIHBvdyhhdmdMIC0gNTAsIDIpKTtcbiAgICAgICAgdmFyIHNjID0gMSArIDAuMDQ1KmF2Z0NwO1xuICAgICAgICB2YXIgc2ggPSAxICsgMC4wMTUqYXZnQ3AqVDtcbiAgICAgICAgdmFyIGRlbHRhVGhldGEgPSAzMCpleHAoLXBvdygoYXZnSHAgLSAyNzUpLzI1LCAyKSk7XG4gICAgICAgIHZhciBSYyA9IDIqc3FydChwb3coYXZnQ3AsIDcpLyhwb3coYXZnQ3AsIDcpICsgcG93KDI1LCA3KSkpO1xuICAgICAgICB2YXIgUnQgPSAtUmMqc2luKDIqZGVnMnJhZChkZWx0YVRoZXRhKSk7XG4gICAgICAgIHZhciByZXN1bHQgPSBzcXJ0KHBvdyhkZWx0YUwvKEtsKnNsKSwgMikgKyBwb3coZGVsdGFDcC8oS2Mqc2MpLCAyKSArIHBvdyhkZWx0YUhwLyhLaCpzaCksIDIpICsgUnQqKGRlbHRhQ3AvKEtjKnNjKSkqKGRlbHRhSHAvKEtoKnNoKSkpO1xuICAgICAgICByZXR1cm4gbWF4KDAsIG1pbigxMDAsIHJlc3VsdCkpO1xuICAgIH07XG5cbiAgICB2YXIgQ29sb3IkMSA9IENvbG9yXzE7XG5cbiAgICAvLyBzaW1wbGUgRXVjbGlkZWFuIGRpc3RhbmNlXG4gICAgdmFyIGRpc3RhbmNlID0gZnVuY3Rpb24oYSwgYiwgbW9kZSkge1xuICAgICAgICBpZiAoIG1vZGUgPT09IHZvaWQgMCApIG1vZGU9J2xhYic7XG5cbiAgICAgICAgLy8gRGVsdGEgRSAoQ0lFIDE5NzYpXG4gICAgICAgIC8vIHNlZSBodHRwOi8vd3d3LmJydWNlbGluZGJsb29tLmNvbS9pbmRleC5odG1sP0VxdWF0aW9ucy5odG1sXG4gICAgICAgIGEgPSBuZXcgQ29sb3IkMShhKTtcbiAgICAgICAgYiA9IG5ldyBDb2xvciQxKGIpO1xuICAgICAgICB2YXIgbDEgPSBhLmdldChtb2RlKTtcbiAgICAgICAgdmFyIGwyID0gYi5nZXQobW9kZSk7XG4gICAgICAgIHZhciBzdW1fc3EgPSAwO1xuICAgICAgICBmb3IgKHZhciBpIGluIGwxKSB7XG4gICAgICAgICAgICB2YXIgZCA9IChsMVtpXSB8fCAwKSAtIChsMltpXSB8fCAwKTtcbiAgICAgICAgICAgIHN1bV9zcSArPSBkKmQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE1hdGguc3FydChzdW1fc3EpO1xuICAgIH07XG5cbiAgICB2YXIgQ29sb3IgPSBDb2xvcl8xO1xuXG4gICAgdmFyIHZhbGlkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KCBDb2xvciwgWyBudWxsIF0uY29uY2F0KCBhcmdzKSApKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gc29tZSBwcmUtZGVmaW5lZCBjb2xvciBzY2FsZXM6XG4gICAgdmFyIGNocm9tYSQxID0gY2hyb21hXzE7XG5cbiAgICB2YXIgc2NhbGUgPSBzY2FsZSQyO1xuXG4gICAgdmFyIHNjYWxlcyA9IHtcbiAgICBcdGNvb2w6IGZ1bmN0aW9uIGNvb2woKSB7IHJldHVybiBzY2FsZShbY2hyb21hJDEuaHNsKDE4MCwxLC45KSwgY2hyb21hJDEuaHNsKDI1MCwuNywuNCldKSB9LFxuICAgIFx0aG90OiBmdW5jdGlvbiBob3QoKSB7IHJldHVybiBzY2FsZShbJyMwMDAnLCcjZjAwJywnI2ZmMCcsJyNmZmYnXSkubW9kZSgncmdiJykgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgICAgQ29sb3JCcmV3ZXIgY29sb3JzIGZvciBjaHJvbWEuanNcblxuICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMDIgQ3ludGhpYSBCcmV3ZXIsIE1hcmsgSGFycm93ZXIsIGFuZCBUaGVcbiAgICAgICAgUGVubnN5bHZhbmlhIFN0YXRlIFVuaXZlcnNpdHkuXG5cbiAgICAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAgICAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICAgICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgICAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSBkaXN0cmlidXRlZFxuICAgICAgICB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUlxuICAgICAgICBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZVxuICAgICAgICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICAgICovXG5cbiAgICB2YXIgY29sb3JicmV3ZXIgPSB7XG4gICAgICAgIC8vIHNlcXVlbnRpYWxcbiAgICAgICAgT3JSZDogWycjZmZmN2VjJywgJyNmZWU4YzgnLCAnI2ZkZDQ5ZScsICcjZmRiYjg0JywgJyNmYzhkNTknLCAnI2VmNjU0OCcsICcjZDczMDFmJywgJyNiMzAwMDAnLCAnIzdmMDAwMCddLFxuICAgICAgICBQdUJ1OiBbJyNmZmY3ZmInLCAnI2VjZTdmMicsICcjZDBkMWU2JywgJyNhNmJkZGInLCAnIzc0YTljZicsICcjMzY5MGMwJywgJyMwNTcwYjAnLCAnIzA0NWE4ZCcsICcjMDIzODU4J10sXG4gICAgICAgIEJ1UHU6IFsnI2Y3ZmNmZCcsICcjZTBlY2Y0JywgJyNiZmQzZTYnLCAnIzllYmNkYScsICcjOGM5NmM2JywgJyM4YzZiYjEnLCAnIzg4NDE5ZCcsICcjODEwZjdjJywgJyM0ZDAwNGInXSxcbiAgICAgICAgT3JhbmdlczogWycjZmZmNWViJywgJyNmZWU2Y2UnLCAnI2ZkZDBhMicsICcjZmRhZTZiJywgJyNmZDhkM2MnLCAnI2YxNjkxMycsICcjZDk0ODAxJywgJyNhNjM2MDMnLCAnIzdmMjcwNCddLFxuICAgICAgICBCdUduOiBbJyNmN2ZjZmQnLCAnI2U1ZjVmOScsICcjY2NlY2U2JywgJyM5OWQ4YzknLCAnIzY2YzJhNCcsICcjNDFhZTc2JywgJyMyMzhiNDUnLCAnIzAwNmQyYycsICcjMDA0NDFiJ10sXG4gICAgICAgIFlsT3JCcjogWycjZmZmZmU1JywgJyNmZmY3YmMnLCAnI2ZlZTM5MScsICcjZmVjNDRmJywgJyNmZTk5MjknLCAnI2VjNzAxNCcsICcjY2M0YzAyJywgJyM5OTM0MDQnLCAnIzY2MjUwNiddLFxuICAgICAgICBZbEduOiBbJyNmZmZmZTUnLCAnI2Y3ZmNiOScsICcjZDlmMGEzJywgJyNhZGRkOGUnLCAnIzc4YzY3OScsICcjNDFhYjVkJywgJyMyMzg0NDMnLCAnIzAwNjgzNycsICcjMDA0NTI5J10sXG4gICAgICAgIFJlZHM6IFsnI2ZmZjVmMCcsICcjZmVlMGQyJywgJyNmY2JiYTEnLCAnI2ZjOTI3MicsICcjZmI2YTRhJywgJyNlZjNiMmMnLCAnI2NiMTgxZCcsICcjYTUwZjE1JywgJyM2NzAwMGQnXSxcbiAgICAgICAgUmRQdTogWycjZmZmN2YzJywgJyNmZGUwZGQnLCAnI2ZjYzVjMCcsICcjZmE5ZmI1JywgJyNmNzY4YTEnLCAnI2RkMzQ5NycsICcjYWUwMTdlJywgJyM3YTAxNzcnLCAnIzQ5MDA2YSddLFxuICAgICAgICBHcmVlbnM6IFsnI2Y3ZmNmNScsICcjZTVmNWUwJywgJyNjN2U5YzAnLCAnI2ExZDk5YicsICcjNzRjNDc2JywgJyM0MWFiNWQnLCAnIzIzOGI0NScsICcjMDA2ZDJjJywgJyMwMDQ0MWInXSxcbiAgICAgICAgWWxHbkJ1OiBbJyNmZmZmZDknLCAnI2VkZjhiMScsICcjYzdlOWI0JywgJyM3ZmNkYmInLCAnIzQxYjZjNCcsICcjMWQ5MWMwJywgJyMyMjVlYTgnLCAnIzI1MzQ5NCcsICcjMDgxZDU4J10sXG4gICAgICAgIFB1cnBsZXM6IFsnI2ZjZmJmZCcsICcjZWZlZGY1JywgJyNkYWRhZWInLCAnI2JjYmRkYycsICcjOWU5YWM4JywgJyM4MDdkYmEnLCAnIzZhNTFhMycsICcjNTQyNzhmJywgJyMzZjAwN2QnXSxcbiAgICAgICAgR25CdTogWycjZjdmY2YwJywgJyNlMGYzZGInLCAnI2NjZWJjNScsICcjYThkZGI1JywgJyM3YmNjYzQnLCAnIzRlYjNkMycsICcjMmI4Y2JlJywgJyMwODY4YWMnLCAnIzA4NDA4MSddLFxuICAgICAgICBHcmV5czogWycjZmZmZmZmJywgJyNmMGYwZjAnLCAnI2Q5ZDlkOScsICcjYmRiZGJkJywgJyM5Njk2OTYnLCAnIzczNzM3MycsICcjNTI1MjUyJywgJyMyNTI1MjUnLCAnIzAwMDAwMCddLFxuICAgICAgICBZbE9yUmQ6IFsnI2ZmZmZjYycsICcjZmZlZGEwJywgJyNmZWQ5NzYnLCAnI2ZlYjI0YycsICcjZmQ4ZDNjJywgJyNmYzRlMmEnLCAnI2UzMWExYycsICcjYmQwMDI2JywgJyM4MDAwMjYnXSxcbiAgICAgICAgUHVSZDogWycjZjdmNGY5JywgJyNlN2UxZWYnLCAnI2Q0YjlkYScsICcjYzk5NGM3JywgJyNkZjY1YjAnLCAnI2U3Mjk4YScsICcjY2UxMjU2JywgJyM5ODAwNDMnLCAnIzY3MDAxZiddLFxuICAgICAgICBCbHVlczogWycjZjdmYmZmJywgJyNkZWViZjcnLCAnI2M2ZGJlZicsICcjOWVjYWUxJywgJyM2YmFlZDYnLCAnIzQyOTJjNicsICcjMjE3MWI1JywgJyMwODUxOWMnLCAnIzA4MzA2YiddLFxuICAgICAgICBQdUJ1R246IFsnI2ZmZjdmYicsICcjZWNlMmYwJywgJyNkMGQxZTYnLCAnI2E2YmRkYicsICcjNjdhOWNmJywgJyMzNjkwYzAnLCAnIzAyODE4YScsICcjMDE2YzU5JywgJyMwMTQ2MzYnXSxcbiAgICAgICAgVmlyaWRpczogWycjNDQwMTU0JywgJyM0ODI3NzcnLCAnIzNmNGE4YScsICcjMzE2NzhlJywgJyMyNjgzOGYnLCAnIzFmOWQ4YScsICcjNmNjZTVhJywgJyNiNmRlMmInLCAnI2ZlZTgyNSddLFxuXG4gICAgICAgIC8vIGRpdmVyZ2luZ1xuXG4gICAgICAgIFNwZWN0cmFsOiBbJyM5ZTAxNDInLCAnI2Q1M2U0ZicsICcjZjQ2ZDQzJywgJyNmZGFlNjEnLCAnI2ZlZTA4YicsICcjZmZmZmJmJywgJyNlNmY1OTgnLCAnI2FiZGRhNCcsICcjNjZjMmE1JywgJyMzMjg4YmQnLCAnIzVlNGZhMiddLFxuICAgICAgICBSZFlsR246IFsnI2E1MDAyNicsICcjZDczMDI3JywgJyNmNDZkNDMnLCAnI2ZkYWU2MScsICcjZmVlMDhiJywgJyNmZmZmYmYnLCAnI2Q5ZWY4YicsICcjYTZkOTZhJywgJyM2NmJkNjMnLCAnIzFhOTg1MCcsICcjMDA2ODM3J10sXG4gICAgICAgIFJkQnU6IFsnIzY3MDAxZicsICcjYjIxODJiJywgJyNkNjYwNGQnLCAnI2Y0YTU4MicsICcjZmRkYmM3JywgJyNmN2Y3ZjcnLCAnI2QxZTVmMCcsICcjOTJjNWRlJywgJyM0MzkzYzMnLCAnIzIxNjZhYycsICcjMDUzMDYxJ10sXG4gICAgICAgIFBpWUc6IFsnIzhlMDE1MicsICcjYzUxYjdkJywgJyNkZTc3YWUnLCAnI2YxYjZkYScsICcjZmRlMGVmJywgJyNmN2Y3ZjcnLCAnI2U2ZjVkMCcsICcjYjhlMTg2JywgJyM3ZmJjNDEnLCAnIzRkOTIyMScsICcjMjc2NDE5J10sXG4gICAgICAgIFBSR246IFsnIzQwMDA0YicsICcjNzYyYTgzJywgJyM5OTcwYWInLCAnI2MyYTVjZicsICcjZTdkNGU4JywgJyNmN2Y3ZjcnLCAnI2Q5ZjBkMycsICcjYTZkYmEwJywgJyM1YWFlNjEnLCAnIzFiNzgzNycsICcjMDA0NDFiJ10sXG4gICAgICAgIFJkWWxCdTogWycjYTUwMDI2JywgJyNkNzMwMjcnLCAnI2Y0NmQ0MycsICcjZmRhZTYxJywgJyNmZWUwOTAnLCAnI2ZmZmZiZicsICcjZTBmM2Y4JywgJyNhYmQ5ZTknLCAnIzc0YWRkMScsICcjNDU3NWI0JywgJyMzMTM2OTUnXSxcbiAgICAgICAgQnJCRzogWycjNTQzMDA1JywgJyM4YzUxMGEnLCAnI2JmODEyZCcsICcjZGZjMjdkJywgJyNmNmU4YzMnLCAnI2Y1ZjVmNScsICcjYzdlYWU1JywgJyM4MGNkYzEnLCAnIzM1OTc4ZicsICcjMDE2NjVlJywgJyMwMDNjMzAnXSxcbiAgICAgICAgUmRHeTogWycjNjcwMDFmJywgJyNiMjE4MmInLCAnI2Q2NjA0ZCcsICcjZjRhNTgyJywgJyNmZGRiYzcnLCAnI2ZmZmZmZicsICcjZTBlMGUwJywgJyNiYWJhYmEnLCAnIzg3ODc4NycsICcjNGQ0ZDRkJywgJyMxYTFhMWEnXSxcbiAgICAgICAgUHVPcjogWycjN2YzYjA4JywgJyNiMzU4MDYnLCAnI2UwODIxNCcsICcjZmRiODYzJywgJyNmZWUwYjYnLCAnI2Y3ZjdmNycsICcjZDhkYWViJywgJyNiMmFiZDInLCAnIzgwNzNhYycsICcjNTQyNzg4JywgJyMyZDAwNGInXSxcblxuICAgICAgICAvLyBxdWFsaXRhdGl2ZVxuXG4gICAgICAgIFNldDI6IFsnIzY2YzJhNScsICcjZmM4ZDYyJywgJyM4ZGEwY2InLCAnI2U3OGFjMycsICcjYTZkODU0JywgJyNmZmQ5MmYnLCAnI2U1YzQ5NCcsICcjYjNiM2IzJ10sXG4gICAgICAgIEFjY2VudDogWycjN2ZjOTdmJywgJyNiZWFlZDQnLCAnI2ZkYzA4NicsICcjZmZmZjk5JywgJyMzODZjYjAnLCAnI2YwMDI3ZicsICcjYmY1YjE3JywgJyM2NjY2NjYnXSxcbiAgICAgICAgU2V0MTogWycjZTQxYTFjJywgJyMzNzdlYjgnLCAnIzRkYWY0YScsICcjOTg0ZWEzJywgJyNmZjdmMDAnLCAnI2ZmZmYzMycsICcjYTY1NjI4JywgJyNmNzgxYmYnLCAnIzk5OTk5OSddLFxuICAgICAgICBTZXQzOiBbJyM4ZGQzYzcnLCAnI2ZmZmZiMycsICcjYmViYWRhJywgJyNmYjgwNzInLCAnIzgwYjFkMycsICcjZmRiNDYyJywgJyNiM2RlNjknLCAnI2ZjY2RlNScsICcjZDlkOWQ5JywgJyNiYzgwYmQnLCAnI2NjZWJjNScsICcjZmZlZDZmJ10sXG4gICAgICAgIERhcmsyOiBbJyMxYjllNzcnLCAnI2Q5NWYwMicsICcjNzU3MGIzJywgJyNlNzI5OGEnLCAnIzY2YTYxZScsICcjZTZhYjAyJywgJyNhNjc2MWQnLCAnIzY2NjY2NiddLFxuICAgICAgICBQYWlyZWQ6IFsnI2E2Y2VlMycsICcjMWY3OGI0JywgJyNiMmRmOGEnLCAnIzMzYTAyYycsICcjZmI5YTk5JywgJyNlMzFhMWMnLCAnI2ZkYmY2ZicsICcjZmY3ZjAwJywgJyNjYWIyZDYnLCAnIzZhM2Q5YScsICcjZmZmZjk5JywgJyNiMTU5MjgnXSxcbiAgICAgICAgUGFzdGVsMjogWycjYjNlMmNkJywgJyNmZGNkYWMnLCAnI2NiZDVlOCcsICcjZjRjYWU0JywgJyNlNmY1YzknLCAnI2ZmZjJhZScsICcjZjFlMmNjJywgJyNjY2NjY2MnXSxcbiAgICAgICAgUGFzdGVsMTogWycjZmJiNGFlJywgJyNiM2NkZTMnLCAnI2NjZWJjNScsICcjZGVjYmU0JywgJyNmZWQ5YTYnLCAnI2ZmZmZjYycsICcjZTVkOGJkJywgJyNmZGRhZWMnLCAnI2YyZjJmMiddLFxuICAgIH07XG5cbiAgICAvLyBhZGQgbG93ZXJjYXNlIGFsaWFzZXMgZm9yIGNhc2UtaW5zZW5zaXRpdmUgbWF0Y2hlc1xuICAgIGZvciAodmFyIGkgPSAwLCBsaXN0ID0gT2JqZWN0LmtleXMoY29sb3JicmV3ZXIpOyBpIDwgbGlzdC5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICB2YXIga2V5ID0gbGlzdFtpXTtcblxuICAgICAgICBjb2xvcmJyZXdlcltrZXkudG9Mb3dlckNhc2UoKV0gPSBjb2xvcmJyZXdlcltrZXldO1xuICAgIH1cblxuICAgIHZhciBjb2xvcmJyZXdlcl8xID0gY29sb3JicmV3ZXI7XG5cbiAgICB2YXIgY2hyb21hID0gY2hyb21hXzE7XG5cbiAgICAvLyBmZWVsIGZyZWUgdG8gY29tbWVudCBvdXQgYW55dGhpbmcgdG8gcm9sbHVwXG4gICAgLy8gYSBzbWFsbGVyIGNocm9tYS5qcyBidWlsdFxuXG4gICAgLy8gaW8gLS0+IGNvbnZlcnQgY29sb3JzXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgIC8vIG9wZXJhdG9ycyAtLT4gbW9kaWZ5IGV4aXN0aW5nIENvbG9yc1xuXG5cblxuXG5cblxuXG5cblxuXG4gICAgLy8gaW50ZXJwb2xhdG9yc1xuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgIC8vIGdlbmVyYXRvcnMgLS0gPiBjcmVhdGUgbmV3IGNvbG9yc1xuICAgIGNocm9tYS5hdmVyYWdlID0gYXZlcmFnZTtcbiAgICBjaHJvbWEuYmV6aWVyID0gYmV6aWVyXzE7XG4gICAgY2hyb21hLmJsZW5kID0gYmxlbmRfMTtcbiAgICBjaHJvbWEuY3ViZWhlbGl4ID0gY3ViZWhlbGl4O1xuICAgIGNocm9tYS5taXggPSBjaHJvbWEuaW50ZXJwb2xhdGUgPSBtaXgkMTtcbiAgICBjaHJvbWEucmFuZG9tID0gcmFuZG9tXzE7XG4gICAgY2hyb21hLnNjYWxlID0gc2NhbGUkMjtcblxuICAgIC8vIG90aGVyIHV0aWxpdHkgbWV0aG9kc1xuICAgIGNocm9tYS5hbmFseXplID0gYW5hbHl6ZV8xLmFuYWx5emU7XG4gICAgY2hyb21hLmNvbnRyYXN0ID0gY29udHJhc3Q7XG4gICAgY2hyb21hLmRlbHRhRSA9IGRlbHRhRTtcbiAgICBjaHJvbWEuZGlzdGFuY2UgPSBkaXN0YW5jZTtcbiAgICBjaHJvbWEubGltaXRzID0gYW5hbHl6ZV8xLmxpbWl0cztcbiAgICBjaHJvbWEudmFsaWQgPSB2YWxpZDtcblxuICAgIC8vIHNjYWxlXG4gICAgY2hyb21hLnNjYWxlcyA9IHNjYWxlcztcblxuICAgIC8vIGNvbG9yc1xuICAgIGNocm9tYS5jb2xvcnMgPSB3M2N4MTFfMTtcbiAgICBjaHJvbWEuYnJld2VyID0gY29sb3JicmV3ZXJfMTtcblxuICAgIHZhciBjaHJvbWFfanMgPSBjaHJvbWE7XG5cbiAgICByZXR1cm4gY2hyb21hX2pzO1xuXG59KSk7XG4iLCAiLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBsaXN0IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IFtdO1xuICB0aGlzLnNpemUgPSAwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZUNsZWFyO1xuIiwgIi8qKlxuICogUGVyZm9ybXMgYVxuICogW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGNvbXBhcmlzb24gYmV0d2VlbiB0d28gdmFsdWVzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZSBlcXVpdmFsZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICogdmFyIG90aGVyID0geyAnYSc6IDEgfTtcbiAqXG4gKiBfLmVxKG9iamVjdCwgb2JqZWN0KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmVxKG9iamVjdCwgb3RoZXIpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmVxKCdhJywgJ2EnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmVxKCdhJywgT2JqZWN0KCdhJykpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmVxKE5hTiwgTmFOKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gZXEodmFsdWUsIG90aGVyKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gb3RoZXIgfHwgKHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXIpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVxO1xuIiwgInZhciBlcSA9IHJlcXVpcmUoJy4vZXEnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBpbmRleCBhdCB3aGljaCB0aGUgYGtleWAgaXMgZm91bmQgaW4gYGFycmF5YCBvZiBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSBrZXkgVGhlIGtleSB0byBzZWFyY2ggZm9yLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gYXNzb2NJbmRleE9mKGFycmF5LCBrZXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgaWYgKGVxKGFycmF5W2xlbmd0aF1bMF0sIGtleSkpIHtcbiAgICAgIHJldHVybiBsZW5ndGg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhc3NvY0luZGV4T2Y7XG4iLCAidmFyIGFzc29jSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Fzc29jSW5kZXhPZicpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgYXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3BsaWNlID0gYXJyYXlQcm90by5zcGxpY2U7XG5cbi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGxpc3QgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZURlbGV0ZShrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBsYXN0SW5kZXggPSBkYXRhLmxlbmd0aCAtIDE7XG4gIGlmIChpbmRleCA9PSBsYXN0SW5kZXgpIHtcbiAgICBkYXRhLnBvcCgpO1xuICB9IGVsc2Uge1xuICAgIHNwbGljZS5jYWxsKGRhdGEsIGluZGV4LCAxKTtcbiAgfVxuICAtLXRoaXMuc2l6ZTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlRGVsZXRlO1xuIiwgInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBsaXN0IGNhY2hlIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlR2V0KGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIHJldHVybiBpbmRleCA8IDAgPyB1bmRlZmluZWQgOiBkYXRhW2luZGV4XVsxXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVHZXQ7XG4iLCAidmFyIGFzc29jSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Fzc29jSW5kZXhPZicpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIGxpc3QgY2FjaGUgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlSGFzKGtleSkge1xuICByZXR1cm4gYXNzb2NJbmRleE9mKHRoaXMuX19kYXRhX18sIGtleSkgPiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVIYXM7XG4iLCAidmFyIGFzc29jSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Fzc29jSW5kZXhPZicpO1xuXG4vKipcbiAqIFNldHMgdGhlIGxpc3QgY2FjaGUgYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGxpc3QgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZVNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgaWYgKGluZGV4IDwgMCkge1xuICAgICsrdGhpcy5zaXplO1xuICAgIGRhdGEucHVzaChba2V5LCB2YWx1ZV0pO1xuICB9IGVsc2Uge1xuICAgIGRhdGFbaW5kZXhdWzFdID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlU2V0O1xuIiwgInZhciBsaXN0Q2FjaGVDbGVhciA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZUNsZWFyJyksXG4gICAgbGlzdENhY2hlRGVsZXRlID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlRGVsZXRlJyksXG4gICAgbGlzdENhY2hlR2V0ID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlR2V0JyksXG4gICAgbGlzdENhY2hlSGFzID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlSGFzJyksXG4gICAgbGlzdENhY2hlU2V0ID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBsaXN0IGNhY2hlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gTGlzdENhY2hlKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYExpc3RDYWNoZWAuXG5MaXN0Q2FjaGUucHJvdG90eXBlLmNsZWFyID0gbGlzdENhY2hlQ2xlYXI7XG5MaXN0Q2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IGxpc3RDYWNoZURlbGV0ZTtcbkxpc3RDYWNoZS5wcm90b3R5cGUuZ2V0ID0gbGlzdENhY2hlR2V0O1xuTGlzdENhY2hlLnByb3RvdHlwZS5oYXMgPSBsaXN0Q2FjaGVIYXM7XG5MaXN0Q2FjaGUucHJvdG90eXBlLnNldCA9IGxpc3RDYWNoZVNldDtcblxubW9kdWxlLmV4cG9ydHMgPSBMaXN0Q2FjaGU7XG4iLCAidmFyIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIHN0YWNrLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIFN0YWNrXG4gKi9cbmZ1bmN0aW9uIHN0YWNrQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBuZXcgTGlzdENhY2hlO1xuICB0aGlzLnNpemUgPSAwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrQ2xlYXI7XG4iLCAiLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgc3RhY2suXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gc3RhY2tEZWxldGUoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIHJlc3VsdCA9IGRhdGFbJ2RlbGV0ZSddKGtleSk7XG5cbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrRGVsZXRlO1xuIiwgIi8qKlxuICogR2V0cyB0aGUgc3RhY2sgdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrR2V0KGtleSkge1xuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja0dldDtcbiIsICIvKipcbiAqIENoZWNrcyBpZiBhIHN0YWNrIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gc3RhY2tIYXMoa2V5KSB7XG4gIHJldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrSGFzO1xuIiwgIi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZ2xvYmFsYCBmcm9tIE5vZGUuanMuICovXG52YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsICYmIGdsb2JhbC5PYmplY3QgPT09IE9iamVjdCAmJiBnbG9iYWw7XG5cbm1vZHVsZS5leHBvcnRzID0gZnJlZUdsb2JhbDtcbiIsICJ2YXIgZnJlZUdsb2JhbCA9IHJlcXVpcmUoJy4vX2ZyZWVHbG9iYWwnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBzZWxmYC4gKi9cbnZhciBmcmVlU2VsZiA9IHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYgJiYgc2VsZi5PYmplY3QgPT09IE9iamVjdCAmJiBzZWxmO1xuXG4vKiogVXNlZCBhcyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIG9iamVjdC4gKi9cbnZhciByb290ID0gZnJlZUdsb2JhbCB8fCBmcmVlU2VsZiB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJvb3Q7XG4iLCAidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIFN5bWJvbCA9IHJvb3QuU3ltYm9sO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN5bWJvbDtcbiIsICJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVXNlZCB0byByZXNvbHZlIHRoZVxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gKiBvZiB2YWx1ZXMuXG4gKi9cbnZhciBuYXRpdmVPYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1Ub1N0cmluZ1RhZyA9IFN5bWJvbCA/IFN5bWJvbC50b1N0cmluZ1RhZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VHZXRUYWdgIHdoaWNoIGlnbm9yZXMgYFN5bWJvbC50b1N0cmluZ1RhZ2AgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHJhdyBgdG9TdHJpbmdUYWdgLlxuICovXG5mdW5jdGlvbiBnZXRSYXdUYWcodmFsdWUpIHtcbiAgdmFyIGlzT3duID0gaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgc3ltVG9TdHJpbmdUYWcpLFxuICAgICAgdGFnID0gdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuXG4gIHRyeSB7XG4gICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdW5kZWZpbmVkO1xuICAgIHZhciB1bm1hc2tlZCA9IHRydWU7XG4gIH0gY2F0Y2ggKGUpIHt9XG5cbiAgdmFyIHJlc3VsdCA9IG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xuICBpZiAodW5tYXNrZWQpIHtcbiAgICBpZiAoaXNPd24pIHtcbiAgICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHRhZztcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRSYXdUYWc7XG4iLCAiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyB1c2luZyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBvYmplY3RUb1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gb2JqZWN0VG9TdHJpbmc7XG4iLCAidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpLFxuICAgIGdldFJhd1RhZyA9IHJlcXVpcmUoJy4vX2dldFJhd1RhZycpLFxuICAgIG9iamVjdFRvU3RyaW5nID0gcmVxdWlyZSgnLi9fb2JqZWN0VG9TdHJpbmcnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG51bGxUYWcgPSAnW29iamVjdCBOdWxsXScsXG4gICAgdW5kZWZpbmVkVGFnID0gJ1tvYmplY3QgVW5kZWZpbmVkXSc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHN5bVRvU3RyaW5nVGFnID0gU3ltYm9sID8gU3ltYm9sLnRvU3RyaW5nVGFnIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBnZXRUYWdgIHdpdGhvdXQgZmFsbGJhY2tzIGZvciBidWdneSBlbnZpcm9ubWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgYHRvU3RyaW5nVGFnYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldFRhZyh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkVGFnIDogbnVsbFRhZztcbiAgfVxuICByZXR1cm4gKHN5bVRvU3RyaW5nVGFnICYmIHN5bVRvU3RyaW5nVGFnIGluIE9iamVjdCh2YWx1ZSkpXG4gICAgPyBnZXRSYXdUYWcodmFsdWUpXG4gICAgOiBvYmplY3RUb1N0cmluZyh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUdldFRhZztcbiIsICIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHRoZVxuICogW2xhbmd1YWdlIHR5cGVdKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1lY21hc2NyaXB0LWxhbmd1YWdlLXR5cGVzKVxuICogb2YgYE9iamVjdGAuIChlLmcuIGFycmF5cywgZnVuY3Rpb25zLCBvYmplY3RzLCByZWdleGVzLCBgbmV3IE51bWJlcigwKWAsIGFuZCBgbmV3IFN0cmluZygnJylgKVxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0KHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChfLm5vb3ApO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgKHR5cGUgPT0gJ29iamVjdCcgfHwgdHlwZSA9PSAnZnVuY3Rpb24nKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc09iamVjdDtcbiIsICJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFzeW5jVGFnID0gJ1tvYmplY3QgQXN5bmNGdW5jdGlvbl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIGdlblRhZyA9ICdbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXScsXG4gICAgcHJveHlUYWcgPSAnW29iamVjdCBQcm94eV0nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgRnVuY3Rpb25gIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGZ1bmN0aW9uLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNGdW5jdGlvbihfKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oL2FiYy8pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBUaGUgdXNlIG9mIGBPYmplY3QjdG9TdHJpbmdgIGF2b2lkcyBpc3N1ZXMgd2l0aCB0aGUgYHR5cGVvZmAgb3BlcmF0b3JcbiAgLy8gaW4gU2FmYXJpIDkgd2hpY2ggcmV0dXJucyAnb2JqZWN0JyBmb3IgdHlwZWQgYXJyYXlzIGFuZCBvdGhlciBjb25zdHJ1Y3RvcnMuXG4gIHZhciB0YWcgPSBiYXNlR2V0VGFnKHZhbHVlKTtcbiAgcmV0dXJuIHRhZyA9PSBmdW5jVGFnIHx8IHRhZyA9PSBnZW5UYWcgfHwgdGFnID09IGFzeW5jVGFnIHx8IHRhZyA9PSBwcm94eVRhZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0Z1bmN0aW9uO1xuIiwgInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogVXNlZCB0byBkZXRlY3Qgb3ZlcnJlYWNoaW5nIGNvcmUtanMgc2hpbXMuICovXG52YXIgY29yZUpzRGF0YSA9IHJvb3RbJ19fY29yZS1qc19zaGFyZWRfXyddO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcmVKc0RhdGE7XG4iLCAidmFyIGNvcmVKc0RhdGEgPSByZXF1aXJlKCcuL19jb3JlSnNEYXRhJyk7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBtZXRob2RzIG1hc3F1ZXJhZGluZyBhcyBuYXRpdmUuICovXG52YXIgbWFza1NyY0tleSA9IChmdW5jdGlvbigpIHtcbiAgdmFyIHVpZCA9IC9bXi5dKyQvLmV4ZWMoY29yZUpzRGF0YSAmJiBjb3JlSnNEYXRhLmtleXMgJiYgY29yZUpzRGF0YS5rZXlzLklFX1BST1RPIHx8ICcnKTtcbiAgcmV0dXJuIHVpZCA/ICgnU3ltYm9sKHNyYylfMS4nICsgdWlkKSA6ICcnO1xufSgpKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYGZ1bmNgIGhhcyBpdHMgc291cmNlIG1hc2tlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYGZ1bmNgIGlzIG1hc2tlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc01hc2tlZChmdW5jKSB7XG4gIHJldHVybiAhIW1hc2tTcmNLZXkgJiYgKG1hc2tTcmNLZXkgaW4gZnVuYyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNNYXNrZWQ7XG4iLCAiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqXG4gKiBDb252ZXJ0cyBgZnVuY2AgdG8gaXRzIHNvdXJjZSBjb2RlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc291cmNlIGNvZGUuXG4gKi9cbmZ1bmN0aW9uIHRvU291cmNlKGZ1bmMpIHtcbiAgaWYgKGZ1bmMgIT0gbnVsbCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZnVuY1RvU3RyaW5nLmNhbGwoZnVuYyk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIChmdW5jICsgJycpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gIH1cbiAgcmV0dXJuICcnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvU291cmNlO1xuIiwgInZhciBpc0Z1bmN0aW9uID0gcmVxdWlyZSgnLi9pc0Z1bmN0aW9uJyksXG4gICAgaXNNYXNrZWQgPSByZXF1aXJlKCcuL19pc01hc2tlZCcpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIHRvU291cmNlID0gcmVxdWlyZSgnLi9fdG9Tb3VyY2UnKTtcblxuLyoqXG4gKiBVc2VkIHRvIG1hdGNoIGBSZWdFeHBgXG4gKiBbc3ludGF4IGNoYXJhY3RlcnNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXBhdHRlcm5zKS5cbiAqL1xudmFyIHJlUmVnRXhwQ2hhciA9IC9bXFxcXF4kLiorPygpW1xcXXt9fF0vZztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGhvc3QgY29uc3RydWN0b3JzIChTYWZhcmkpLiAqL1xudmFyIHJlSXNIb3N0Q3RvciA9IC9eXFxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXFxdJC87XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGUsXG4gICAgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKiogVXNlZCB0byBkZXRlY3QgaWYgYSBtZXRob2QgaXMgbmF0aXZlLiAqL1xudmFyIHJlSXNOYXRpdmUgPSBSZWdFeHAoJ14nICtcbiAgZnVuY1RvU3RyaW5nLmNhbGwoaGFzT3duUHJvcGVydHkpLnJlcGxhY2UocmVSZWdFeHBDaGFyLCAnXFxcXCQmJylcbiAgLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFxcXFwoKXwgZm9yIC4rPyg/PVxcXFxcXF0pL2csICckMS4qPycpICsgJyQnXG4pO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTmF0aXZlYCB3aXRob3V0IGJhZCBzaGltIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG5hdGl2ZSBmdW5jdGlvbixcbiAqICBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc05hdGl2ZSh2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSB8fCBpc01hc2tlZCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHBhdHRlcm4gPSBpc0Z1bmN0aW9uKHZhbHVlKSA/IHJlSXNOYXRpdmUgOiByZUlzSG9zdEN0b3I7XG4gIHJldHVybiBwYXR0ZXJuLnRlc3QodG9Tb3VyY2UodmFsdWUpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNOYXRpdmU7XG4iLCAiLyoqXG4gKiBHZXRzIHRoZSB2YWx1ZSBhdCBga2V5YCBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBwcm9wZXJ0eSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gZ2V0VmFsdWUob2JqZWN0LCBrZXkpIHtcbiAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W2tleV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0VmFsdWU7XG4iLCAidmFyIGJhc2VJc05hdGl2ZSA9IHJlcXVpcmUoJy4vX2Jhc2VJc05hdGl2ZScpLFxuICAgIGdldFZhbHVlID0gcmVxdWlyZSgnLi9fZ2V0VmFsdWUnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBuYXRpdmUgZnVuY3Rpb24gYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgbWV0aG9kIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBmdW5jdGlvbiBpZiBpdCdzIG5hdGl2ZSwgZWxzZSBgdW5kZWZpbmVkYC5cbiAqL1xuZnVuY3Rpb24gZ2V0TmF0aXZlKG9iamVjdCwga2V5KSB7XG4gIHZhciB2YWx1ZSA9IGdldFZhbHVlKG9iamVjdCwga2V5KTtcbiAgcmV0dXJuIGJhc2VJc05hdGl2ZSh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXROYXRpdmU7XG4iLCAidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBNYXAgPSBnZXROYXRpdmUocm9vdCwgJ01hcCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1hcDtcbiIsICJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBuYXRpdmVDcmVhdGUgPSBnZXROYXRpdmUoT2JqZWN0LCAnY3JlYXRlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gbmF0aXZlQ3JlYXRlO1xuIiwgInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBoYXNoLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIEhhc2hcbiAqL1xuZnVuY3Rpb24gaGFzaENsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0gbmF0aXZlQ3JlYXRlID8gbmF0aXZlQ3JlYXRlKG51bGwpIDoge307XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaENsZWFyO1xuIiwgIi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGhhc2guXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7T2JqZWN0fSBoYXNoIFRoZSBoYXNoIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBoYXNoRGVsZXRlKGtleSkge1xuICB2YXIgcmVzdWx0ID0gdGhpcy5oYXMoa2V5KSAmJiBkZWxldGUgdGhpcy5fX2RhdGFfX1trZXldO1xuICB0aGlzLnNpemUgLT0gcmVzdWx0ID8gMSA6IDA7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaERlbGV0ZTtcbiIsICJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cbnZhciBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBHZXRzIHRoZSBoYXNoIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGhhc2hHZXQoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgaWYgKG5hdGl2ZUNyZWF0ZSkge1xuICAgIHZhciByZXN1bHQgPSBkYXRhW2tleV07XG4gICAgcmV0dXJuIHJlc3VsdCA9PT0gSEFTSF9VTkRFRklORUQgPyB1bmRlZmluZWQgOiByZXN1bHQ7XG4gIH1cbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KSA/IGRhdGFba2V5XSA6IHVuZGVmaW5lZDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoR2V0O1xuIiwgInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBoYXNoIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBoYXNoSGFzKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIHJldHVybiBuYXRpdmVDcmVhdGUgPyAoZGF0YVtrZXldICE9PSB1bmRlZmluZWQpIDogaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hIYXM7XG4iLCAidmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX25hdGl2ZUNyZWF0ZScpO1xuXG4vKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKlxuICogU2V0cyB0aGUgaGFzaCBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGhhc2ggaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIGhhc2hTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIHRoaXMuc2l6ZSArPSB0aGlzLmhhcyhrZXkpID8gMCA6IDE7XG4gIGRhdGFba2V5XSA9IChuYXRpdmVDcmVhdGUgJiYgdmFsdWUgPT09IHVuZGVmaW5lZCkgPyBIQVNIX1VOREVGSU5FRCA6IHZhbHVlO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoU2V0O1xuIiwgInZhciBoYXNoQ2xlYXIgPSByZXF1aXJlKCcuL19oYXNoQ2xlYXInKSxcbiAgICBoYXNoRGVsZXRlID0gcmVxdWlyZSgnLi9faGFzaERlbGV0ZScpLFxuICAgIGhhc2hHZXQgPSByZXF1aXJlKCcuL19oYXNoR2V0JyksXG4gICAgaGFzaEhhcyA9IHJlcXVpcmUoJy4vX2hhc2hIYXMnKSxcbiAgICBoYXNoU2V0ID0gcmVxdWlyZSgnLi9faGFzaFNldCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBoYXNoIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gSGFzaChlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBIYXNoYC5cbkhhc2gucHJvdG90eXBlLmNsZWFyID0gaGFzaENsZWFyO1xuSGFzaC5wcm90b3R5cGVbJ2RlbGV0ZSddID0gaGFzaERlbGV0ZTtcbkhhc2gucHJvdG90eXBlLmdldCA9IGhhc2hHZXQ7XG5IYXNoLnByb3RvdHlwZS5oYXMgPSBoYXNoSGFzO1xuSGFzaC5wcm90b3R5cGUuc2V0ID0gaGFzaFNldDtcblxubW9kdWxlLmV4cG9ydHMgPSBIYXNoO1xuIiwgInZhciBIYXNoID0gcmVxdWlyZSgnLi9fSGFzaCcpLFxuICAgIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpLFxuICAgIE1hcCA9IHJlcXVpcmUoJy4vX01hcCcpO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIG1hcC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUNsZWFyKCkge1xuICB0aGlzLnNpemUgPSAwO1xuICB0aGlzLl9fZGF0YV9fID0ge1xuICAgICdoYXNoJzogbmV3IEhhc2gsXG4gICAgJ21hcCc6IG5ldyAoTWFwIHx8IExpc3RDYWNoZSksXG4gICAgJ3N0cmluZyc6IG5ldyBIYXNoXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVDbGVhcjtcbiIsICIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlIGZvciB1c2UgYXMgdW5pcXVlIG9iamVjdCBrZXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNLZXlhYmxlKHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gKHR5cGUgPT0gJ3N0cmluZycgfHwgdHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nKVxuICAgID8gKHZhbHVlICE9PSAnX19wcm90b19fJylcbiAgICA6ICh2YWx1ZSA9PT0gbnVsbCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNLZXlhYmxlO1xuIiwgInZhciBpc0tleWFibGUgPSByZXF1aXJlKCcuL19pc0tleWFibGUnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBkYXRhIGZvciBgbWFwYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG1hcCBUaGUgbWFwIHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUgcmVmZXJlbmNlIGtleS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtYXAgZGF0YS5cbiAqL1xuZnVuY3Rpb24gZ2V0TWFwRGF0YShtYXAsIGtleSkge1xuICB2YXIgZGF0YSA9IG1hcC5fX2RhdGFfXztcbiAgcmV0dXJuIGlzS2V5YWJsZShrZXkpXG4gICAgPyBkYXRhW3R5cGVvZiBrZXkgPT0gJ3N0cmluZycgPyAnc3RyaW5nJyA6ICdoYXNoJ11cbiAgICA6IGRhdGEubWFwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldE1hcERhdGE7XG4iLCAidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIG1hcC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZURlbGV0ZShrZXkpIHtcbiAgdmFyIHJlc3VsdCA9IGdldE1hcERhdGEodGhpcywga2V5KVsnZGVsZXRlJ10oa2V5KTtcbiAgdGhpcy5zaXplIC09IHJlc3VsdCA/IDEgOiAwO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlRGVsZXRlO1xuIiwgInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIEdldHMgdGhlIG1hcCB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVHZXQoa2V5KSB7XG4gIHJldHVybiBnZXRNYXBEYXRhKHRoaXMsIGtleSkuZ2V0KGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVHZXQ7XG4iLCAidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgbWFwIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVIYXMoa2V5KSB7XG4gIHJldHVybiBnZXRNYXBEYXRhKHRoaXMsIGtleSkuaGFzKGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVIYXM7XG4iLCAidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogU2V0cyB0aGUgbWFwIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG1hcCBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IGdldE1hcERhdGEodGhpcywga2V5KSxcbiAgICAgIHNpemUgPSBkYXRhLnNpemU7XG5cbiAgZGF0YS5zZXQoa2V5LCB2YWx1ZSk7XG4gIHRoaXMuc2l6ZSArPSBkYXRhLnNpemUgPT0gc2l6ZSA/IDAgOiAxO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZVNldDtcbiIsICJ2YXIgbWFwQ2FjaGVDbGVhciA9IHJlcXVpcmUoJy4vX21hcENhY2hlQ2xlYXInKSxcbiAgICBtYXBDYWNoZURlbGV0ZSA9IHJlcXVpcmUoJy4vX21hcENhY2hlRGVsZXRlJyksXG4gICAgbWFwQ2FjaGVHZXQgPSByZXF1aXJlKCcuL19tYXBDYWNoZUdldCcpLFxuICAgIG1hcENhY2hlSGFzID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVIYXMnKSxcbiAgICBtYXBDYWNoZVNldCA9IHJlcXVpcmUoJy4vX21hcENhY2hlU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG1hcCBjYWNoZSBvYmplY3QgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBNYXBDYWNoZShlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBNYXBDYWNoZWAuXG5NYXBDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBtYXBDYWNoZUNsZWFyO1xuTWFwQ2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IG1hcENhY2hlRGVsZXRlO1xuTWFwQ2FjaGUucHJvdG90eXBlLmdldCA9IG1hcENhY2hlR2V0O1xuTWFwQ2FjaGUucHJvdG90eXBlLmhhcyA9IG1hcENhY2hlSGFzO1xuTWFwQ2FjaGUucHJvdG90eXBlLnNldCA9IG1hcENhY2hlU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1hcENhY2hlO1xuIiwgInZhciBMaXN0Q2FjaGUgPSByZXF1aXJlKCcuL19MaXN0Q2FjaGUnKSxcbiAgICBNYXAgPSByZXF1aXJlKCcuL19NYXAnKSxcbiAgICBNYXBDYWNoZSA9IHJlcXVpcmUoJy4vX01hcENhY2hlJyk7XG5cbi8qKiBVc2VkIGFzIHRoZSBzaXplIHRvIGVuYWJsZSBsYXJnZSBhcnJheSBvcHRpbWl6YXRpb25zLiAqL1xudmFyIExBUkdFX0FSUkFZX1NJWkUgPSAyMDA7XG5cbi8qKlxuICogU2V0cyB0aGUgc3RhY2sgYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgc3RhY2sgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICBpZiAoZGF0YSBpbnN0YW5jZW9mIExpc3RDYWNoZSkge1xuICAgIHZhciBwYWlycyA9IGRhdGEuX19kYXRhX187XG4gICAgaWYgKCFNYXAgfHwgKHBhaXJzLmxlbmd0aCA8IExBUkdFX0FSUkFZX1NJWkUgLSAxKSkge1xuICAgICAgcGFpcnMucHVzaChba2V5LCB2YWx1ZV0pO1xuICAgICAgdGhpcy5zaXplID0gKytkYXRhLnNpemU7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZGF0YSA9IHRoaXMuX19kYXRhX18gPSBuZXcgTWFwQ2FjaGUocGFpcnMpO1xuICB9XG4gIGRhdGEuc2V0KGtleSwgdmFsdWUpO1xuICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrU2V0O1xuIiwgInZhciBMaXN0Q2FjaGUgPSByZXF1aXJlKCcuL19MaXN0Q2FjaGUnKSxcbiAgICBzdGFja0NsZWFyID0gcmVxdWlyZSgnLi9fc3RhY2tDbGVhcicpLFxuICAgIHN0YWNrRGVsZXRlID0gcmVxdWlyZSgnLi9fc3RhY2tEZWxldGUnKSxcbiAgICBzdGFja0dldCA9IHJlcXVpcmUoJy4vX3N0YWNrR2V0JyksXG4gICAgc3RhY2tIYXMgPSByZXF1aXJlKCcuL19zdGFja0hhcycpLFxuICAgIHN0YWNrU2V0ID0gcmVxdWlyZSgnLi9fc3RhY2tTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgc3RhY2sgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gU3RhY2soZW50cmllcykge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18gPSBuZXcgTGlzdENhY2hlKGVudHJpZXMpO1xuICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBTdGFja2AuXG5TdGFjay5wcm90b3R5cGUuY2xlYXIgPSBzdGFja0NsZWFyO1xuU3RhY2sucHJvdG90eXBlWydkZWxldGUnXSA9IHN0YWNrRGVsZXRlO1xuU3RhY2sucHJvdG90eXBlLmdldCA9IHN0YWNrR2V0O1xuU3RhY2sucHJvdG90eXBlLmhhcyA9IHN0YWNrSGFzO1xuU3RhY2sucHJvdG90eXBlLnNldCA9IHN0YWNrU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0YWNrO1xuIiwgIi8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cbnZhciBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcblxuLyoqXG4gKiBBZGRzIGB2YWx1ZWAgdG8gdGhlIGFycmF5IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBhZGRcbiAqIEBtZW1iZXJPZiBTZXRDYWNoZVxuICogQGFsaWFzIHB1c2hcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNhY2hlLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIHNldENhY2hlQWRkKHZhbHVlKSB7XG4gIHRoaXMuX19kYXRhX18uc2V0KHZhbHVlLCBIQVNIX1VOREVGSU5FRCk7XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNldENhY2hlQWRkO1xuIiwgIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgaW4gdGhlIGFycmF5IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBTZXRDYWNoZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgZm91bmQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gc2V0Q2FjaGVIYXModmFsdWUpIHtcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZXRDYWNoZUhhcztcbiIsICJ2YXIgTWFwQ2FjaGUgPSByZXF1aXJlKCcuL19NYXBDYWNoZScpLFxuICAgIHNldENhY2hlQWRkID0gcmVxdWlyZSgnLi9fc2V0Q2FjaGVBZGQnKSxcbiAgICBzZXRDYWNoZUhhcyA9IHJlcXVpcmUoJy4vX3NldENhY2hlSGFzJyk7XG5cbi8qKlxuICpcbiAqIENyZWF0ZXMgYW4gYXJyYXkgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIHVuaXF1ZSB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW3ZhbHVlc10gVGhlIHZhbHVlcyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gU2V0Q2FjaGUodmFsdWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gdmFsdWVzID09IG51bGwgPyAwIDogdmFsdWVzLmxlbmd0aDtcblxuICB0aGlzLl9fZGF0YV9fID0gbmV3IE1hcENhY2hlO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHRoaXMuYWRkKHZhbHVlc1tpbmRleF0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBTZXRDYWNoZWAuXG5TZXRDYWNoZS5wcm90b3R5cGUuYWRkID0gU2V0Q2FjaGUucHJvdG90eXBlLnB1c2ggPSBzZXRDYWNoZUFkZDtcblNldENhY2hlLnByb3RvdHlwZS5oYXMgPSBzZXRDYWNoZUhhcztcblxubW9kdWxlLmV4cG9ydHMgPSBTZXRDYWNoZTtcbiIsICIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5zb21lYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWVcbiAqIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFueSBlbGVtZW50IHBhc3NlcyB0aGUgcHJlZGljYXRlIGNoZWNrLFxuICogIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlTb21lKGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGlmIChwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5U29tZTtcbiIsICIvKipcbiAqIENoZWNrcyBpZiBhIGBjYWNoZWAgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IGNhY2hlIFRoZSBjYWNoZSB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBjYWNoZUhhcyhjYWNoZSwga2V5KSB7XG4gIHJldHVybiBjYWNoZS5oYXMoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjYWNoZUhhcztcbiIsICJ2YXIgU2V0Q2FjaGUgPSByZXF1aXJlKCcuL19TZXRDYWNoZScpLFxuICAgIGFycmF5U29tZSA9IHJlcXVpcmUoJy4vX2FycmF5U29tZScpLFxuICAgIGNhY2hlSGFzID0gcmVxdWlyZSgnLi9fY2FjaGVIYXMnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3IgYXJyYXlzIHdpdGggc3VwcG9ydCBmb3JcbiAqIHBhcnRpYWwgZGVlcCBjb21wYXJpc29ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge0FycmF5fSBvdGhlciBUaGUgb3RoZXIgYXJyYXkgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYGFycmF5YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBhcnJheXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gZXF1YWxBcnJheXMoYXJyYXksIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gIHZhciBpc1BhcnRpYWwgPSBiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUcsXG4gICAgICBhcnJMZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICBvdGhMZW5ndGggPSBvdGhlci5sZW5ndGg7XG5cbiAgaWYgKGFyckxlbmd0aCAhPSBvdGhMZW5ndGggJiYgIShpc1BhcnRpYWwgJiYgb3RoTGVuZ3RoID4gYXJyTGVuZ3RoKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBDaGVjayB0aGF0IGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxuICB2YXIgYXJyU3RhY2tlZCA9IHN0YWNrLmdldChhcnJheSk7XG4gIHZhciBvdGhTdGFja2VkID0gc3RhY2suZ2V0KG90aGVyKTtcbiAgaWYgKGFyclN0YWNrZWQgJiYgb3RoU3RhY2tlZCkge1xuICAgIHJldHVybiBhcnJTdGFja2VkID09IG90aGVyICYmIG90aFN0YWNrZWQgPT0gYXJyYXk7XG4gIH1cbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSB0cnVlLFxuICAgICAgc2VlbiA9IChiaXRtYXNrICYgQ09NUEFSRV9VTk9SREVSRURfRkxBRykgPyBuZXcgU2V0Q2FjaGUgOiB1bmRlZmluZWQ7XG5cbiAgc3RhY2suc2V0KGFycmF5LCBvdGhlcik7XG4gIHN0YWNrLnNldChvdGhlciwgYXJyYXkpO1xuXG4gIC8vIElnbm9yZSBub24taW5kZXggcHJvcGVydGllcy5cbiAgd2hpbGUgKCsraW5kZXggPCBhcnJMZW5ndGgpIHtcbiAgICB2YXIgYXJyVmFsdWUgPSBhcnJheVtpbmRleF0sXG4gICAgICAgIG90aFZhbHVlID0gb3RoZXJbaW5kZXhdO1xuXG4gICAgaWYgKGN1c3RvbWl6ZXIpIHtcbiAgICAgIHZhciBjb21wYXJlZCA9IGlzUGFydGlhbFxuICAgICAgICA/IGN1c3RvbWl6ZXIob3RoVmFsdWUsIGFyclZhbHVlLCBpbmRleCwgb3RoZXIsIGFycmF5LCBzdGFjaylcbiAgICAgICAgOiBjdXN0b21pemVyKGFyclZhbHVlLCBvdGhWYWx1ZSwgaW5kZXgsIGFycmF5LCBvdGhlciwgc3RhY2spO1xuICAgIH1cbiAgICBpZiAoY29tcGFyZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGNvbXBhcmVkKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBhcnJheXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICBpZiAoc2Vlbikge1xuICAgICAgaWYgKCFhcnJheVNvbWUob3RoZXIsIGZ1bmN0aW9uKG90aFZhbHVlLCBvdGhJbmRleCkge1xuICAgICAgICAgICAgaWYgKCFjYWNoZUhhcyhzZWVuLCBvdGhJbmRleCkgJiZcbiAgICAgICAgICAgICAgICAoYXJyVmFsdWUgPT09IG90aFZhbHVlIHx8IGVxdWFsRnVuYyhhcnJWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHNlZW4ucHVzaChvdGhJbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkpIHtcbiAgICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIShcbiAgICAgICAgICBhcnJWYWx1ZSA9PT0gb3RoVmFsdWUgfHxcbiAgICAgICAgICAgIGVxdWFsRnVuYyhhcnJWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKVxuICAgICAgICApKSB7XG4gICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBzdGFja1snZGVsZXRlJ10oYXJyYXkpO1xuICBzdGFja1snZGVsZXRlJ10ob3RoZXIpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVxdWFsQXJyYXlzO1xuIiwgInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBVaW50OEFycmF5ID0gcm9vdC5VaW50OEFycmF5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFVpbnQ4QXJyYXk7XG4iLCAiLyoqXG4gKiBDb252ZXJ0cyBgbWFwYCB0byBpdHMga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUga2V5LXZhbHVlIHBhaXJzLlxuICovXG5mdW5jdGlvbiBtYXBUb0FycmF5KG1hcCkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KG1hcC5zaXplKTtcblxuICBtYXAuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgcmVzdWx0WysraW5kZXhdID0gW2tleSwgdmFsdWVdO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBUb0FycmF5O1xuIiwgIi8qKlxuICogQ29udmVydHMgYHNldGAgdG8gYW4gYXJyYXkgb2YgaXRzIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNldCBUaGUgc2V0IHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gc2V0VG9BcnJheShzZXQpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShzZXQuc2l6ZSk7XG5cbiAgc2V0LmZvckVhY2goZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXN1bHRbKytpbmRleF0gPSB2YWx1ZTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0VG9BcnJheTtcbiIsICJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgVWludDhBcnJheSA9IHJlcXVpcmUoJy4vX1VpbnQ4QXJyYXknKSxcbiAgICBlcSA9IHJlcXVpcmUoJy4vZXEnKSxcbiAgICBlcXVhbEFycmF5cyA9IHJlcXVpcmUoJy4vX2VxdWFsQXJyYXlzJyksXG4gICAgbWFwVG9BcnJheSA9IHJlcXVpcmUoJy4vX21hcFRvQXJyYXknKSxcbiAgICBzZXRUb0FycmF5ID0gcmVxdWlyZSgnLi9fc2V0VG9BcnJheScpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDEsXG4gICAgQ09NUEFSRV9VTk9SREVSRURfRkxBRyA9IDI7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxuICAgIGRhdGVUYWcgPSAnW29iamVjdCBEYXRlXScsXG4gICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nLFxuICAgIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG51bWJlclRhZyA9ICdbb2JqZWN0IE51bWJlcl0nLFxuICAgIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nLFxuICAgIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nO1xuXG52YXIgYXJyYXlCdWZmZXJUYWcgPSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nLFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJztcblxuLyoqIFVzZWQgdG8gY29udmVydCBzeW1ib2xzIHRvIHByaW1pdGl2ZXMgYW5kIHN0cmluZ3MuICovXG52YXIgc3ltYm9sUHJvdG8gPSBTeW1ib2wgPyBTeW1ib2wucHJvdG90eXBlIDogdW5kZWZpbmVkLFxuICAgIHN5bWJvbFZhbHVlT2YgPSBzeW1ib2xQcm90byA/IHN5bWJvbFByb3RvLnZhbHVlT2YgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbERlZXBgIGZvciBjb21wYXJpbmcgb2JqZWN0cyBvZlxuICogdGhlIHNhbWUgYHRvU3RyaW5nVGFnYC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBmdW5jdGlvbiBvbmx5IHN1cHBvcnRzIGNvbXBhcmluZyB2YWx1ZXMgd2l0aCB0YWdzIG9mXG4gKiBgQm9vbGVhbmAsIGBEYXRlYCwgYEVycm9yYCwgYE51bWJlcmAsIGBSZWdFeHBgLCBvciBgU3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtzdHJpbmd9IHRhZyBUaGUgYHRvU3RyaW5nVGFnYCBvZiB0aGUgb2JqZWN0cyB0byBjb21wYXJlLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3RzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGVxdWFsQnlUYWcob2JqZWN0LCBvdGhlciwgdGFnLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gIHN3aXRjaCAodGFnKSB7XG4gICAgY2FzZSBkYXRhVmlld1RhZzpcbiAgICAgIGlmICgob2JqZWN0LmJ5dGVMZW5ndGggIT0gb3RoZXIuYnl0ZUxlbmd0aCkgfHxcbiAgICAgICAgICAob2JqZWN0LmJ5dGVPZmZzZXQgIT0gb3RoZXIuYnl0ZU9mZnNldCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgb2JqZWN0ID0gb2JqZWN0LmJ1ZmZlcjtcbiAgICAgIG90aGVyID0gb3RoZXIuYnVmZmVyO1xuXG4gICAgY2FzZSBhcnJheUJ1ZmZlclRhZzpcbiAgICAgIGlmICgob2JqZWN0LmJ5dGVMZW5ndGggIT0gb3RoZXIuYnl0ZUxlbmd0aCkgfHxcbiAgICAgICAgICAhZXF1YWxGdW5jKG5ldyBVaW50OEFycmF5KG9iamVjdCksIG5ldyBVaW50OEFycmF5KG90aGVyKSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICBjYXNlIGJvb2xUYWc6XG4gICAgY2FzZSBkYXRlVGFnOlxuICAgIGNhc2UgbnVtYmVyVGFnOlxuICAgICAgLy8gQ29lcmNlIGJvb2xlYW5zIHRvIGAxYCBvciBgMGAgYW5kIGRhdGVzIHRvIG1pbGxpc2Vjb25kcy5cbiAgICAgIC8vIEludmFsaWQgZGF0ZXMgYXJlIGNvZXJjZWQgdG8gYE5hTmAuXG4gICAgICByZXR1cm4gZXEoK29iamVjdCwgK290aGVyKTtcblxuICAgIGNhc2UgZXJyb3JUYWc6XG4gICAgICByZXR1cm4gb2JqZWN0Lm5hbWUgPT0gb3RoZXIubmFtZSAmJiBvYmplY3QubWVzc2FnZSA9PSBvdGhlci5tZXNzYWdlO1xuXG4gICAgY2FzZSByZWdleHBUYWc6XG4gICAgY2FzZSBzdHJpbmdUYWc6XG4gICAgICAvLyBDb2VyY2UgcmVnZXhlcyB0byBzdHJpbmdzIGFuZCB0cmVhdCBzdHJpbmdzLCBwcmltaXRpdmVzIGFuZCBvYmplY3RzLFxuICAgICAgLy8gYXMgZXF1YWwuIFNlZSBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcmVnZXhwLnByb3RvdHlwZS50b3N0cmluZ1xuICAgICAgLy8gZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgIHJldHVybiBvYmplY3QgPT0gKG90aGVyICsgJycpO1xuXG4gICAgY2FzZSBtYXBUYWc6XG4gICAgICB2YXIgY29udmVydCA9IG1hcFRvQXJyYXk7XG5cbiAgICBjYXNlIHNldFRhZzpcbiAgICAgIHZhciBpc1BhcnRpYWwgPSBiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUc7XG4gICAgICBjb252ZXJ0IHx8IChjb252ZXJ0ID0gc2V0VG9BcnJheSk7XG5cbiAgICAgIGlmIChvYmplY3Quc2l6ZSAhPSBvdGhlci5zaXplICYmICFpc1BhcnRpYWwpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgLy8gQXNzdW1lIGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxuICAgICAgdmFyIHN0YWNrZWQgPSBzdGFjay5nZXQob2JqZWN0KTtcbiAgICAgIGlmIChzdGFja2VkKSB7XG4gICAgICAgIHJldHVybiBzdGFja2VkID09IG90aGVyO1xuICAgICAgfVxuICAgICAgYml0bWFzayB8PSBDT01QQVJFX1VOT1JERVJFRF9GTEFHO1xuXG4gICAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIG9iamVjdHMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICAgIHN0YWNrLnNldChvYmplY3QsIG90aGVyKTtcbiAgICAgIHZhciByZXN1bHQgPSBlcXVhbEFycmF5cyhjb252ZXJ0KG9iamVjdCksIGNvbnZlcnQob3RoZXIpLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcbiAgICAgIHN0YWNrWydkZWxldGUnXShvYmplY3QpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcblxuICAgIGNhc2Ugc3ltYm9sVGFnOlxuICAgICAgaWYgKHN5bWJvbFZhbHVlT2YpIHtcbiAgICAgICAgcmV0dXJuIHN5bWJvbFZhbHVlT2YuY2FsbChvYmplY3QpID09IHN5bWJvbFZhbHVlT2YuY2FsbChvdGhlcik7XG4gICAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVxdWFsQnlUYWc7XG4iLCAiLyoqXG4gKiBBcHBlbmRzIHRoZSBlbGVtZW50cyBvZiBgdmFsdWVzYCB0byBgYXJyYXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gYXBwZW5kLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5UHVzaChhcnJheSwgdmFsdWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gdmFsdWVzLmxlbmd0aCxcbiAgICAgIG9mZnNldCA9IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGFycmF5W29mZnNldCArIGluZGV4XSA9IHZhbHVlc1tpbmRleF07XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5UHVzaDtcbiIsICIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYW4gYEFycmF5YCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5KGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXkoJ2FiYycpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXkoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0FycmF5O1xuIiwgInZhciBhcnJheVB1c2ggPSByZXF1aXJlKCcuL19hcnJheVB1c2gnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldEFsbEtleXNgIGFuZCBgZ2V0QWxsS2V5c0luYCB3aGljaCB1c2VzXG4gKiBga2V5c0Z1bmNgIGFuZCBgc3ltYm9sc0Z1bmNgIHRvIGdldCB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBhbmRcbiAqIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGtleXNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGtleXMgb2YgYG9iamVjdGAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzeW1ib2xzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scy5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldEFsbEtleXMob2JqZWN0LCBrZXlzRnVuYywgc3ltYm9sc0Z1bmMpIHtcbiAgdmFyIHJlc3VsdCA9IGtleXNGdW5jKG9iamVjdCk7XG4gIHJldHVybiBpc0FycmF5KG9iamVjdCkgPyByZXN1bHQgOiBhcnJheVB1c2gocmVzdWx0LCBzeW1ib2xzRnVuYyhvYmplY3QpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlR2V0QWxsS2V5cztcbiIsICIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5maWx0ZXJgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvclxuICogaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmaWx0ZXJlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlGaWx0ZXIoYXJyYXksIHByZWRpY2F0ZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoLFxuICAgICAgcmVzSW5kZXggPSAwLFxuICAgICAgcmVzdWx0ID0gW107XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF07XG4gICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwgaW5kZXgsIGFycmF5KSkge1xuICAgICAgcmVzdWx0W3Jlc0luZGV4KytdID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlGaWx0ZXI7XG4iLCAiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgbmV3IGVtcHR5IGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4xMy4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZW1wdHkgYXJyYXkuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBhcnJheXMgPSBfLnRpbWVzKDIsIF8uc3R1YkFycmF5KTtcbiAqXG4gKiBjb25zb2xlLmxvZyhhcnJheXMpO1xuICogLy8gPT4gW1tdLCBbXV1cbiAqXG4gKiBjb25zb2xlLmxvZyhhcnJheXNbMF0gPT09IGFycmF5c1sxXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBzdHViQXJyYXkoKSB7XG4gIHJldHVybiBbXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHViQXJyYXk7XG4iLCAidmFyIGFycmF5RmlsdGVyID0gcmVxdWlyZSgnLi9fYXJyYXlGaWx0ZXInKSxcbiAgICBzdHViQXJyYXkgPSByZXF1aXJlKCcuL3N0dWJBcnJheScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IG9iamVjdFByb3RvLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlR2V0U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGVudW1lcmFibGUgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBzeW1ib2xzLlxuICovXG52YXIgZ2V0U3ltYm9scyA9ICFuYXRpdmVHZXRTeW1ib2xzID8gc3R1YkFycmF5IDogZnVuY3Rpb24ob2JqZWN0KSB7XG4gIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcbiAgcmV0dXJuIGFycmF5RmlsdGVyKG5hdGl2ZUdldFN5bWJvbHMob2JqZWN0KSwgZnVuY3Rpb24oc3ltYm9sKSB7XG4gICAgcmV0dXJuIHByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwob2JqZWN0LCBzeW1ib2wpO1xuICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0U3ltYm9scztcbiIsICIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnRpbWVzYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHNcbiAqIG9yIG1heCBhcnJheSBsZW5ndGggY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIGludm9rZSBgaXRlcmF0ZWVgLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcmVzdWx0cy5cbiAqL1xuZnVuY3Rpb24gYmFzZVRpbWVzKG4sIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobik7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBuKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGluZGV4KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VUaW1lcztcbiIsICIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLiBBIHZhbHVlIGlzIG9iamVjdC1saWtlIGlmIGl0J3Mgbm90IGBudWxsYFxuICogYW5kIGhhcyBhIGB0eXBlb2ZgIHJlc3VsdCBvZiBcIm9iamVjdFwiLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc09iamVjdExpa2U7XG4iLCAidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0FyZ3VtZW50c2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LFxuICovXG5mdW5jdGlvbiBiYXNlSXNBcmd1bWVudHModmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gYXJnc1RhZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNBcmd1bWVudHM7XG4iLCAidmFyIGJhc2VJc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vX2Jhc2VJc0FyZ3VtZW50cycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGFuIGBhcmd1bWVudHNgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FyZ3VtZW50cyA9IGJhc2VJc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA/IGJhc2VJc0FyZ3VtZW50cyA6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdjYWxsZWUnKSAmJlxuICAgICFwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHZhbHVlLCAnY2FsbGVlJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJndW1lbnRzO1xuIiwgIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyBgZmFsc2VgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4xMy4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50aW1lcygyLCBfLnN0dWJGYWxzZSk7XG4gKiAvLyA9PiBbZmFsc2UsIGZhbHNlXVxuICovXG5mdW5jdGlvbiBzdHViRmFsc2UoKSB7XG4gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHViRmFsc2U7XG4iLCAidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290JyksXG4gICAgc3R1YkZhbHNlID0gcmVxdWlyZSgnLi9zdHViRmFsc2UnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cbnZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xudmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcblxuLyoqIERldGVjdCB0aGUgcG9wdWxhciBDb21tb25KUyBleHRlbnNpb24gYG1vZHVsZS5leHBvcnRzYC4gKi9cbnZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBCdWZmZXIgPSBtb2R1bGVFeHBvcnRzID8gcm9vdC5CdWZmZXIgOiB1bmRlZmluZWQ7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVJc0J1ZmZlciA9IEJ1ZmZlciA/IEJ1ZmZlci5pc0J1ZmZlciA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIGJ1ZmZlci5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMy4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGJ1ZmZlciwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQnVmZmVyKG5ldyBCdWZmZXIoMikpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNCdWZmZXIobmV3IFVpbnQ4QXJyYXkoMikpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQnVmZmVyID0gbmF0aXZlSXNCdWZmZXIgfHwgc3R1YkZhbHNlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQnVmZmVyO1xuIiwgIi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgdW5zaWduZWQgaW50ZWdlciB2YWx1ZXMuICovXG52YXIgcmVJc1VpbnQgPSAvXig/OjB8WzEtOV1cXGQqKSQvO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgYXJyYXktbGlrZSBpbmRleC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aD1NQVhfU0FGRV9JTlRFR0VSXSBUaGUgdXBwZXIgYm91bmRzIG9mIGEgdmFsaWQgaW5kZXguXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGluZGV4LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzSW5kZXgodmFsdWUsIGxlbmd0aCkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgbGVuZ3RoID0gbGVuZ3RoID09IG51bGwgPyBNQVhfU0FGRV9JTlRFR0VSIDogbGVuZ3RoO1xuXG4gIHJldHVybiAhIWxlbmd0aCAmJlxuICAgICh0eXBlID09ICdudW1iZXInIHx8XG4gICAgICAodHlwZSAhPSAnc3ltYm9sJyAmJiByZUlzVWludC50ZXN0KHZhbHVlKSkpICYmXG4gICAgICAgICh2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDwgbGVuZ3RoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0luZGV4O1xuIiwgIi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgYXJyYXktbGlrZSBsZW5ndGguXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGxvb3NlbHkgYmFzZWQgb25cbiAqIFtgVG9MZW5ndGhgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy10b2xlbmd0aCkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBsZW5ndGgsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0xlbmd0aCgzKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzTGVuZ3RoKE51bWJlci5NSU5fVkFMVUUpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzTGVuZ3RoKEluZmluaXR5KTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0xlbmd0aCgnMycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNMZW5ndGgodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyAmJlxuICAgIHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPD0gTUFYX1NBRkVfSU5URUdFUjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0xlbmd0aDtcbiIsICJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc0xlbmd0aCA9IHJlcXVpcmUoJy4vaXNMZW5ndGgnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nLFxuICAgIGFycmF5VGFnID0gJ1tvYmplY3QgQXJyYXldJyxcbiAgICBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxuICAgIGRhdGVUYWcgPSAnW29iamVjdCBEYXRlXScsXG4gICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG51bWJlclRhZyA9ICdbb2JqZWN0IE51bWJlcl0nLFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nLFxuICAgIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nLFxuICAgIHdlYWtNYXBUYWcgPSAnW29iamVjdCBXZWFrTWFwXSc7XG5cbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXG4gICAgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nLFxuICAgIGZsb2F0MzJUYWcgPSAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICBmbG9hdDY0VGFnID0gJ1tvYmplY3QgRmxvYXQ2NEFycmF5XScsXG4gICAgaW50OFRhZyA9ICdbb2JqZWN0IEludDhBcnJheV0nLFxuICAgIGludDE2VGFnID0gJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgIGludDMyVGFnID0gJ1tvYmplY3QgSW50MzJBcnJheV0nLFxuICAgIHVpbnQ4VGFnID0gJ1tvYmplY3QgVWludDhBcnJheV0nLFxuICAgIHVpbnQ4Q2xhbXBlZFRhZyA9ICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXG4gICAgdWludDE2VGFnID0gJ1tvYmplY3QgVWludDE2QXJyYXldJyxcbiAgICB1aW50MzJUYWcgPSAnW29iamVjdCBVaW50MzJBcnJheV0nO1xuXG4vKiogVXNlZCB0byBpZGVudGlmeSBgdG9TdHJpbmdUYWdgIHZhbHVlcyBvZiB0eXBlZCBhcnJheXMuICovXG52YXIgdHlwZWRBcnJheVRhZ3MgPSB7fTtcbnR5cGVkQXJyYXlUYWdzW2Zsb2F0MzJUYWddID0gdHlwZWRBcnJheVRhZ3NbZmxvYXQ2NFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbaW50OFRhZ10gPSB0eXBlZEFycmF5VGFnc1tpbnQxNlRhZ10gPVxudHlwZWRBcnJheVRhZ3NbaW50MzJUYWddID0gdHlwZWRBcnJheVRhZ3NbdWludDhUYWddID1cbnR5cGVkQXJyYXlUYWdzW3VpbnQ4Q2xhbXBlZFRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50MTZUYWddID1cbnR5cGVkQXJyYXlUYWdzW3VpbnQzMlRhZ10gPSB0cnVlO1xudHlwZWRBcnJheVRhZ3NbYXJnc1RhZ10gPSB0eXBlZEFycmF5VGFnc1thcnJheVRhZ10gPVxudHlwZWRBcnJheVRhZ3NbYXJyYXlCdWZmZXJUYWddID0gdHlwZWRBcnJheVRhZ3NbYm9vbFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbZGF0YVZpZXdUYWddID0gdHlwZWRBcnJheVRhZ3NbZGF0ZVRhZ10gPVxudHlwZWRBcnJheVRhZ3NbZXJyb3JUYWddID0gdHlwZWRBcnJheVRhZ3NbZnVuY1RhZ10gPVxudHlwZWRBcnJheVRhZ3NbbWFwVGFnXSA9IHR5cGVkQXJyYXlUYWdzW251bWJlclRhZ10gPVxudHlwZWRBcnJheVRhZ3Nbb2JqZWN0VGFnXSA9IHR5cGVkQXJyYXlUYWdzW3JlZ2V4cFRhZ10gPVxudHlwZWRBcnJheVRhZ3Nbc2V0VGFnXSA9IHR5cGVkQXJyYXlUYWdzW3N0cmluZ1RhZ10gPVxudHlwZWRBcnJheVRhZ3Nbd2Vha01hcFRhZ10gPSBmYWxzZTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc1R5cGVkQXJyYXlgIHdpdGhvdXQgTm9kZS5qcyBvcHRpbWl6YXRpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzVHlwZWRBcnJheSh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJlxuICAgIGlzTGVuZ3RoKHZhbHVlLmxlbmd0aCkgJiYgISF0eXBlZEFycmF5VGFnc1tiYXNlR2V0VGFnKHZhbHVlKV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzVHlwZWRBcnJheTtcbiIsICIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnVuYXJ5YCB3aXRob3V0IHN1cHBvcnQgZm9yIHN0b3JpbmcgbWV0YWRhdGEuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNhcCBhcmd1bWVudHMgZm9yLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY2FwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlVW5hcnkoZnVuYykge1xuICByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gZnVuYyh2YWx1ZSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVVuYXJ5O1xuIiwgInZhciBmcmVlR2xvYmFsID0gcmVxdWlyZSgnLi9fZnJlZUdsb2JhbCcpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgcHJvY2Vzc2AgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVQcm9jZXNzID0gbW9kdWxlRXhwb3J0cyAmJiBmcmVlR2xvYmFsLnByb2Nlc3M7XG5cbi8qKiBVc2VkIHRvIGFjY2VzcyBmYXN0ZXIgTm9kZS5qcyBoZWxwZXJzLiAqL1xudmFyIG5vZGVVdGlsID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIC8vIFVzZSBgdXRpbC50eXBlc2AgZm9yIE5vZGUuanMgMTArLlxuICAgIHZhciB0eXBlcyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlICYmIGZyZWVNb2R1bGUucmVxdWlyZSgndXRpbCcpLnR5cGVzO1xuXG4gICAgaWYgKHR5cGVzKSB7XG4gICAgICByZXR1cm4gdHlwZXM7XG4gICAgfVxuXG4gICAgLy8gTGVnYWN5IGBwcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKWAgZm9yIE5vZGUuanMgPCAxMC5cbiAgICByZXR1cm4gZnJlZVByb2Nlc3MgJiYgZnJlZVByb2Nlc3MuYmluZGluZyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nKCd1dGlsJyk7XG4gIH0gY2F0Y2ggKGUpIHt9XG59KCkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5vZGVVdGlsO1xuIiwgInZhciBiYXNlSXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9fYmFzZUlzVHlwZWRBcnJheScpLFxuICAgIGJhc2VVbmFyeSA9IHJlcXVpcmUoJy4vX2Jhc2VVbmFyeScpLFxuICAgIG5vZGVVdGlsID0gcmVxdWlyZSgnLi9fbm9kZVV0aWwnKTtcblxuLyogTm9kZS5qcyBoZWxwZXIgcmVmZXJlbmNlcy4gKi9cbnZhciBub2RlSXNUeXBlZEFycmF5ID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNUeXBlZEFycmF5O1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSB0eXBlZCBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHR5cGVkIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNUeXBlZEFycmF5KG5ldyBVaW50OEFycmF5KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzVHlwZWRBcnJheShbXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNUeXBlZEFycmF5ID0gbm9kZUlzVHlwZWRBcnJheSA/IGJhc2VVbmFyeShub2RlSXNUeXBlZEFycmF5KSA6IGJhc2VJc1R5cGVkQXJyYXk7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNUeXBlZEFycmF5O1xuIiwgInZhciBiYXNlVGltZXMgPSByZXF1aXJlKCcuL19iYXNlVGltZXMnKSxcbiAgICBpc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNCdWZmZXIgPSByZXF1aXJlKCcuL2lzQnVmZmVyJyksXG4gICAgaXNJbmRleCA9IHJlcXVpcmUoJy4vX2lzSW5kZXgnKSxcbiAgICBpc1R5cGVkQXJyYXkgPSByZXF1aXJlKCcuL2lzVHlwZWRBcnJheScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgdGhlIGFycmF5LWxpa2UgYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGluaGVyaXRlZCBTcGVjaWZ5IHJldHVybmluZyBpbmhlcml0ZWQgcHJvcGVydHkgbmFtZXMuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBhcnJheUxpa2VLZXlzKHZhbHVlLCBpbmhlcml0ZWQpIHtcbiAgdmFyIGlzQXJyID0gaXNBcnJheSh2YWx1ZSksXG4gICAgICBpc0FyZyA9ICFpc0FyciAmJiBpc0FyZ3VtZW50cyh2YWx1ZSksXG4gICAgICBpc0J1ZmYgPSAhaXNBcnIgJiYgIWlzQXJnICYmIGlzQnVmZmVyKHZhbHVlKSxcbiAgICAgIGlzVHlwZSA9ICFpc0FyciAmJiAhaXNBcmcgJiYgIWlzQnVmZiAmJiBpc1R5cGVkQXJyYXkodmFsdWUpLFxuICAgICAgc2tpcEluZGV4ZXMgPSBpc0FyciB8fCBpc0FyZyB8fCBpc0J1ZmYgfHwgaXNUeXBlLFxuICAgICAgcmVzdWx0ID0gc2tpcEluZGV4ZXMgPyBiYXNlVGltZXModmFsdWUubGVuZ3RoLCBTdHJpbmcpIDogW10sXG4gICAgICBsZW5ndGggPSByZXN1bHQubGVuZ3RoO1xuXG4gIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xuICAgIGlmICgoaW5oZXJpdGVkIHx8IGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGtleSkpICYmXG4gICAgICAgICEoc2tpcEluZGV4ZXMgJiYgKFxuICAgICAgICAgICAvLyBTYWZhcmkgOSBoYXMgZW51bWVyYWJsZSBgYXJndW1lbnRzLmxlbmd0aGAgaW4gc3RyaWN0IG1vZGUuXG4gICAgICAgICAgIGtleSA9PSAnbGVuZ3RoJyB8fFxuICAgICAgICAgICAvLyBOb2RlLmpzIDAuMTAgaGFzIGVudW1lcmFibGUgbm9uLWluZGV4IHByb3BlcnRpZXMgb24gYnVmZmVycy5cbiAgICAgICAgICAgKGlzQnVmZiAmJiAoa2V5ID09ICdvZmZzZXQnIHx8IGtleSA9PSAncGFyZW50JykpIHx8XG4gICAgICAgICAgIC8vIFBoYW50b21KUyAyIGhhcyBlbnVtZXJhYmxlIG5vbi1pbmRleCBwcm9wZXJ0aWVzIG9uIHR5cGVkIGFycmF5cy5cbiAgICAgICAgICAgKGlzVHlwZSAmJiAoa2V5ID09ICdidWZmZXInIHx8IGtleSA9PSAnYnl0ZUxlbmd0aCcgfHwga2V5ID09ICdieXRlT2Zmc2V0JykpIHx8XG4gICAgICAgICAgIC8vIFNraXAgaW5kZXggcHJvcGVydGllcy5cbiAgICAgICAgICAgaXNJbmRleChrZXksIGxlbmd0aClcbiAgICAgICAgKSkpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlMaWtlS2V5cztcbiIsICIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhIHByb3RvdHlwZSBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwcm90b3R5cGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNQcm90b3R5cGUodmFsdWUpIHtcbiAgdmFyIEN0b3IgPSB2YWx1ZSAmJiB2YWx1ZS5jb25zdHJ1Y3RvcixcbiAgICAgIHByb3RvID0gKHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3Rvci5wcm90b3R5cGUpIHx8IG9iamVjdFByb3RvO1xuXG4gIHJldHVybiB2YWx1ZSA9PT0gcHJvdG87XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNQcm90b3R5cGU7XG4iLCAiLyoqXG4gKiBDcmVhdGVzIGEgdW5hcnkgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIGl0cyBhcmd1bWVudCB0cmFuc2Zvcm1lZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgYXJndW1lbnQgdHJhbnNmb3JtLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG92ZXJBcmcoZnVuYywgdHJhbnNmb3JtKSB7XG4gIHJldHVybiBmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4gZnVuYyh0cmFuc2Zvcm0oYXJnKSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gb3ZlckFyZztcbiIsICJ2YXIgb3ZlckFyZyA9IHJlcXVpcmUoJy4vX292ZXJBcmcnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUtleXMgPSBvdmVyQXJnKE9iamVjdC5rZXlzLCBPYmplY3QpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5hdGl2ZUtleXM7XG4iLCAidmFyIGlzUHJvdG90eXBlID0gcmVxdWlyZSgnLi9faXNQcm90b3R5cGUnKSxcbiAgICBuYXRpdmVLZXlzID0gcmVxdWlyZSgnLi9fbmF0aXZlS2V5cycpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmtleXNgIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYmFzZUtleXMob2JqZWN0KSB7XG4gIGlmICghaXNQcm90b3R5cGUob2JqZWN0KSkge1xuICAgIHJldHVybiBuYXRpdmVLZXlzKG9iamVjdCk7XG4gIH1cbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gT2JqZWN0KG9iamVjdCkpIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYga2V5ICE9ICdjb25zdHJ1Y3RvcicpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUtleXM7XG4iLCAidmFyIGlzRnVuY3Rpb24gPSByZXF1aXJlKCcuL2lzRnVuY3Rpb24nKSxcbiAgICBpc0xlbmd0aCA9IHJlcXVpcmUoJy4vaXNMZW5ndGgnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLiBBIHZhbHVlIGlzIGNvbnNpZGVyZWQgYXJyYXktbGlrZSBpZiBpdCdzXG4gKiBub3QgYSBmdW5jdGlvbiBhbmQgaGFzIGEgYHZhbHVlLmxlbmd0aGAgdGhhdCdzIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIG9yXG4gKiBlcXVhbCB0byBgMGAgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZSgnYWJjJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUxpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhaXNGdW5jdGlvbih2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcnJheUxpa2U7XG4iLCAidmFyIGFycmF5TGlrZUtleXMgPSByZXF1aXJlKCcuL19hcnJheUxpa2VLZXlzJyksXG4gICAgYmFzZUtleXMgPSByZXF1aXJlKCcuL19iYXNlS2V5cycpLFxuICAgIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIGBvYmplY3RgLlxuICpcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLiBTZWUgdGhlXG4gKiBbRVMgc3BlY10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LmtleXMpXG4gKiBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8ua2V5cyhuZXcgRm9vKTtcbiAqIC8vID0+IFsnYScsICdiJ10gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAqXG4gKiBfLmtleXMoJ2hpJyk7XG4gKiAvLyA9PiBbJzAnLCAnMSddXG4gKi9cbmZ1bmN0aW9uIGtleXMob2JqZWN0KSB7XG4gIHJldHVybiBpc0FycmF5TGlrZShvYmplY3QpID8gYXJyYXlMaWtlS2V5cyhvYmplY3QpIDogYmFzZUtleXMob2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBrZXlzO1xuIiwgInZhciBiYXNlR2V0QWxsS2V5cyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRBbGxLZXlzJyksXG4gICAgZ2V0U3ltYm9scyA9IHJlcXVpcmUoJy4vX2dldFN5bWJvbHMnKSxcbiAgICBrZXlzID0gcmVxdWlyZSgnLi9rZXlzJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiBvd24gZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scy5cbiAqL1xuZnVuY3Rpb24gZ2V0QWxsS2V5cyhvYmplY3QpIHtcbiAgcmV0dXJuIGJhc2VHZXRBbGxLZXlzKG9iamVjdCwga2V5cywgZ2V0U3ltYm9scyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QWxsS2V5cztcbiIsICJ2YXIgZ2V0QWxsS2V5cyA9IHJlcXVpcmUoJy4vX2dldEFsbEtleXMnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3Igb2JqZWN0cyB3aXRoIHN1cHBvcnQgZm9yXG4gKiBwYXJ0aWFsIGRlZXAgY29tcGFyaXNvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYG9iamVjdGAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBlcXVhbE9iamVjdHMob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHLFxuICAgICAgb2JqUHJvcHMgPSBnZXRBbGxLZXlzKG9iamVjdCksXG4gICAgICBvYmpMZW5ndGggPSBvYmpQcm9wcy5sZW5ndGgsXG4gICAgICBvdGhQcm9wcyA9IGdldEFsbEtleXMob3RoZXIpLFxuICAgICAgb3RoTGVuZ3RoID0gb3RoUHJvcHMubGVuZ3RoO1xuXG4gIGlmIChvYmpMZW5ndGggIT0gb3RoTGVuZ3RoICYmICFpc1BhcnRpYWwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIGluZGV4ID0gb2JqTGVuZ3RoO1xuICB3aGlsZSAoaW5kZXgtLSkge1xuICAgIHZhciBrZXkgPSBvYmpQcm9wc1tpbmRleF07XG4gICAgaWYgKCEoaXNQYXJ0aWFsID8ga2V5IGluIG90aGVyIDogaGFzT3duUHJvcGVydHkuY2FsbChvdGhlciwga2V5KSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgLy8gQ2hlY2sgdGhhdCBjeWNsaWMgdmFsdWVzIGFyZSBlcXVhbC5cbiAgdmFyIG9ialN0YWNrZWQgPSBzdGFjay5nZXQob2JqZWN0KTtcbiAgdmFyIG90aFN0YWNrZWQgPSBzdGFjay5nZXQob3RoZXIpO1xuICBpZiAob2JqU3RhY2tlZCAmJiBvdGhTdGFja2VkKSB7XG4gICAgcmV0dXJuIG9ialN0YWNrZWQgPT0gb3RoZXIgJiYgb3RoU3RhY2tlZCA9PSBvYmplY3Q7XG4gIH1cbiAgdmFyIHJlc3VsdCA9IHRydWU7XG4gIHN0YWNrLnNldChvYmplY3QsIG90aGVyKTtcbiAgc3RhY2suc2V0KG90aGVyLCBvYmplY3QpO1xuXG4gIHZhciBza2lwQ3RvciA9IGlzUGFydGlhbDtcbiAgd2hpbGUgKCsraW5kZXggPCBvYmpMZW5ndGgpIHtcbiAgICBrZXkgPSBvYmpQcm9wc1tpbmRleF07XG4gICAgdmFyIG9ialZhbHVlID0gb2JqZWN0W2tleV0sXG4gICAgICAgIG90aFZhbHVlID0gb3RoZXJba2V5XTtcblxuICAgIGlmIChjdXN0b21pemVyKSB7XG4gICAgICB2YXIgY29tcGFyZWQgPSBpc1BhcnRpYWxcbiAgICAgICAgPyBjdXN0b21pemVyKG90aFZhbHVlLCBvYmpWYWx1ZSwga2V5LCBvdGhlciwgb2JqZWN0LCBzdGFjaylcbiAgICAgICAgOiBjdXN0b21pemVyKG9ialZhbHVlLCBvdGhWYWx1ZSwga2V5LCBvYmplY3QsIG90aGVyLCBzdGFjayk7XG4gICAgfVxuICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgb2JqZWN0cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgIGlmICghKGNvbXBhcmVkID09PSB1bmRlZmluZWRcbiAgICAgICAgICA/IChvYmpWYWx1ZSA9PT0gb3RoVmFsdWUgfHwgZXF1YWxGdW5jKG9ialZhbHVlLCBvdGhWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spKVxuICAgICAgICAgIDogY29tcGFyZWRcbiAgICAgICAgKSkge1xuICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgc2tpcEN0b3IgfHwgKHNraXBDdG9yID0ga2V5ID09ICdjb25zdHJ1Y3RvcicpO1xuICB9XG4gIGlmIChyZXN1bHQgJiYgIXNraXBDdG9yKSB7XG4gICAgdmFyIG9iakN0b3IgPSBvYmplY3QuY29uc3RydWN0b3IsXG4gICAgICAgIG90aEN0b3IgPSBvdGhlci5jb25zdHJ1Y3RvcjtcblxuICAgIC8vIE5vbiBgT2JqZWN0YCBvYmplY3QgaW5zdGFuY2VzIHdpdGggZGlmZmVyZW50IGNvbnN0cnVjdG9ycyBhcmUgbm90IGVxdWFsLlxuICAgIGlmIChvYmpDdG9yICE9IG90aEN0b3IgJiZcbiAgICAgICAgKCdjb25zdHJ1Y3RvcicgaW4gb2JqZWN0ICYmICdjb25zdHJ1Y3RvcicgaW4gb3RoZXIpICYmXG4gICAgICAgICEodHlwZW9mIG9iakN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBvYmpDdG9yIGluc3RhbmNlb2Ygb2JqQ3RvciAmJlxuICAgICAgICAgIHR5cGVvZiBvdGhDdG9yID09ICdmdW5jdGlvbicgJiYgb3RoQ3RvciBpbnN0YW5jZW9mIG90aEN0b3IpKSB7XG4gICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgc3RhY2tbJ2RlbGV0ZSddKG9iamVjdCk7XG4gIHN0YWNrWydkZWxldGUnXShvdGhlcik7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXF1YWxPYmplY3RzO1xuIiwgInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgRGF0YVZpZXcgPSBnZXROYXRpdmUocm9vdCwgJ0RhdGFWaWV3Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gRGF0YVZpZXc7XG4iLCAidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBQcm9taXNlID0gZ2V0TmF0aXZlKHJvb3QsICdQcm9taXNlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gUHJvbWlzZTtcbiIsICJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIFNldCA9IGdldE5hdGl2ZShyb290LCAnU2V0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gU2V0O1xuIiwgInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgV2Vha01hcCA9IGdldE5hdGl2ZShyb290LCAnV2Vha01hcCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFdlYWtNYXA7XG4iLCAidmFyIERhdGFWaWV3ID0gcmVxdWlyZSgnLi9fRGF0YVZpZXcnKSxcbiAgICBNYXAgPSByZXF1aXJlKCcuL19NYXAnKSxcbiAgICBQcm9taXNlID0gcmVxdWlyZSgnLi9fUHJvbWlzZScpLFxuICAgIFNldCA9IHJlcXVpcmUoJy4vX1NldCcpLFxuICAgIFdlYWtNYXAgPSByZXF1aXJlKCcuL19XZWFrTWFwJyksXG4gICAgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICB0b1NvdXJjZSA9IHJlcXVpcmUoJy4vX3RvU291cmNlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJyxcbiAgICBwcm9taXNlVGFnID0gJ1tvYmplY3QgUHJvbWlzZV0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHdlYWtNYXBUYWcgPSAnW29iamVjdCBXZWFrTWFwXSc7XG5cbnZhciBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XSc7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBtYXBzLCBzZXRzLCBhbmQgd2Vha21hcHMuICovXG52YXIgZGF0YVZpZXdDdG9yU3RyaW5nID0gdG9Tb3VyY2UoRGF0YVZpZXcpLFxuICAgIG1hcEN0b3JTdHJpbmcgPSB0b1NvdXJjZShNYXApLFxuICAgIHByb21pc2VDdG9yU3RyaW5nID0gdG9Tb3VyY2UoUHJvbWlzZSksXG4gICAgc2V0Q3RvclN0cmluZyA9IHRvU291cmNlKFNldCksXG4gICAgd2Vha01hcEN0b3JTdHJpbmcgPSB0b1NvdXJjZShXZWFrTWFwKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBgdG9TdHJpbmdUYWdgIG9mIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgYHRvU3RyaW5nVGFnYC5cbiAqL1xudmFyIGdldFRhZyA9IGJhc2VHZXRUYWc7XG5cbi8vIEZhbGxiYWNrIGZvciBkYXRhIHZpZXdzLCBtYXBzLCBzZXRzLCBhbmQgd2VhayBtYXBzIGluIElFIDExIGFuZCBwcm9taXNlcyBpbiBOb2RlLmpzIDwgNi5cbmlmICgoRGF0YVZpZXcgJiYgZ2V0VGFnKG5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoMSkpKSAhPSBkYXRhVmlld1RhZykgfHxcbiAgICAoTWFwICYmIGdldFRhZyhuZXcgTWFwKSAhPSBtYXBUYWcpIHx8XG4gICAgKFByb21pc2UgJiYgZ2V0VGFnKFByb21pc2UucmVzb2x2ZSgpKSAhPSBwcm9taXNlVGFnKSB8fFxuICAgIChTZXQgJiYgZ2V0VGFnKG5ldyBTZXQpICE9IHNldFRhZykgfHxcbiAgICAoV2Vha01hcCAmJiBnZXRUYWcobmV3IFdlYWtNYXApICE9IHdlYWtNYXBUYWcpKSB7XG4gIGdldFRhZyA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgdmFyIHJlc3VsdCA9IGJhc2VHZXRUYWcodmFsdWUpLFxuICAgICAgICBDdG9yID0gcmVzdWx0ID09IG9iamVjdFRhZyA/IHZhbHVlLmNvbnN0cnVjdG9yIDogdW5kZWZpbmVkLFxuICAgICAgICBjdG9yU3RyaW5nID0gQ3RvciA/IHRvU291cmNlKEN0b3IpIDogJyc7XG5cbiAgICBpZiAoY3RvclN0cmluZykge1xuICAgICAgc3dpdGNoIChjdG9yU3RyaW5nKSB7XG4gICAgICAgIGNhc2UgZGF0YVZpZXdDdG9yU3RyaW5nOiByZXR1cm4gZGF0YVZpZXdUYWc7XG4gICAgICAgIGNhc2UgbWFwQ3RvclN0cmluZzogcmV0dXJuIG1hcFRhZztcbiAgICAgICAgY2FzZSBwcm9taXNlQ3RvclN0cmluZzogcmV0dXJuIHByb21pc2VUYWc7XG4gICAgICAgIGNhc2Ugc2V0Q3RvclN0cmluZzogcmV0dXJuIHNldFRhZztcbiAgICAgICAgY2FzZSB3ZWFrTWFwQ3RvclN0cmluZzogcmV0dXJuIHdlYWtNYXBUYWc7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0VGFnO1xuIiwgInZhciBTdGFjayA9IHJlcXVpcmUoJy4vX1N0YWNrJyksXG4gICAgZXF1YWxBcnJheXMgPSByZXF1aXJlKCcuL19lcXVhbEFycmF5cycpLFxuICAgIGVxdWFsQnlUYWcgPSByZXF1aXJlKCcuL19lcXVhbEJ5VGFnJyksXG4gICAgZXF1YWxPYmplY3RzID0gcmVxdWlyZSgnLi9fZXF1YWxPYmplY3RzJyksXG4gICAgZ2V0VGFnID0gcmVxdWlyZSgnLi9fZ2V0VGFnJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzQnVmZmVyID0gcmVxdWlyZSgnLi9pc0J1ZmZlcicpLFxuICAgIGlzVHlwZWRBcnJheSA9IHJlcXVpcmUoJy4vaXNUeXBlZEFycmF5Jyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJyxcbiAgICBhcnJheVRhZyA9ICdbb2JqZWN0IEFycmF5XScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XSc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbGAgZm9yIGFycmF5cyBhbmQgb2JqZWN0cyB3aGljaCBwZXJmb3Jtc1xuICogZGVlcCBjb21wYXJpc29ucyBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzIGVuYWJsaW5nIG9iamVjdHMgd2l0aCBjaXJjdWxhclxuICogcmVmZXJlbmNlcyB0byBiZSBjb21wYXJlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIGBvYmplY3RgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdHMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzRXF1YWxEZWVwKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spIHtcbiAgdmFyIG9iaklzQXJyID0gaXNBcnJheShvYmplY3QpLFxuICAgICAgb3RoSXNBcnIgPSBpc0FycmF5KG90aGVyKSxcbiAgICAgIG9ialRhZyA9IG9iaklzQXJyID8gYXJyYXlUYWcgOiBnZXRUYWcob2JqZWN0KSxcbiAgICAgIG90aFRhZyA9IG90aElzQXJyID8gYXJyYXlUYWcgOiBnZXRUYWcob3RoZXIpO1xuXG4gIG9ialRhZyA9IG9ialRhZyA9PSBhcmdzVGFnID8gb2JqZWN0VGFnIDogb2JqVGFnO1xuICBvdGhUYWcgPSBvdGhUYWcgPT0gYXJnc1RhZyA/IG9iamVjdFRhZyA6IG90aFRhZztcblxuICB2YXIgb2JqSXNPYmogPSBvYmpUYWcgPT0gb2JqZWN0VGFnLFxuICAgICAgb3RoSXNPYmogPSBvdGhUYWcgPT0gb2JqZWN0VGFnLFxuICAgICAgaXNTYW1lVGFnID0gb2JqVGFnID09IG90aFRhZztcblxuICBpZiAoaXNTYW1lVGFnICYmIGlzQnVmZmVyKG9iamVjdCkpIHtcbiAgICBpZiAoIWlzQnVmZmVyKG90aGVyKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBvYmpJc0FyciA9IHRydWU7XG4gICAgb2JqSXNPYmogPSBmYWxzZTtcbiAgfVxuICBpZiAoaXNTYW1lVGFnICYmICFvYmpJc09iaikge1xuICAgIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gICAgcmV0dXJuIChvYmpJc0FyciB8fCBpc1R5cGVkQXJyYXkob2JqZWN0KSlcbiAgICAgID8gZXF1YWxBcnJheXMob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaylcbiAgICAgIDogZXF1YWxCeVRhZyhvYmplY3QsIG90aGVyLCBvYmpUYWcsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spO1xuICB9XG4gIGlmICghKGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRykpIHtcbiAgICB2YXIgb2JqSXNXcmFwcGVkID0gb2JqSXNPYmogJiYgaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsICdfX3dyYXBwZWRfXycpLFxuICAgICAgICBvdGhJc1dyYXBwZWQgPSBvdGhJc09iaiAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG90aGVyLCAnX193cmFwcGVkX18nKTtcblxuICAgIGlmIChvYmpJc1dyYXBwZWQgfHwgb3RoSXNXcmFwcGVkKSB7XG4gICAgICB2YXIgb2JqVW53cmFwcGVkID0gb2JqSXNXcmFwcGVkID8gb2JqZWN0LnZhbHVlKCkgOiBvYmplY3QsXG4gICAgICAgICAgb3RoVW53cmFwcGVkID0gb3RoSXNXcmFwcGVkID8gb3RoZXIudmFsdWUoKSA6IG90aGVyO1xuXG4gICAgICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgU3RhY2spO1xuICAgICAgcmV0dXJuIGVxdWFsRnVuYyhvYmpVbndyYXBwZWQsIG90aFVud3JhcHBlZCwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spO1xuICAgIH1cbiAgfVxuICBpZiAoIWlzU2FtZVRhZykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgU3RhY2spO1xuICByZXR1cm4gZXF1YWxPYmplY3RzKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc0VxdWFsRGVlcDtcbiIsICJ2YXIgYmFzZUlzRXF1YWxEZWVwID0gcmVxdWlyZSgnLi9fYmFzZUlzRXF1YWxEZWVwJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0VxdWFsYCB3aGljaCBzdXBwb3J0cyBwYXJ0aWFsIGNvbXBhcmlzb25zXG4gKiBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy5cbiAqICAxIC0gVW5vcmRlcmVkIGNvbXBhcmlzb25cbiAqICAyIC0gUGFydGlhbCBjb21wYXJpc29uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgYHZhbHVlYCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzRXF1YWwodmFsdWUsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykge1xuICBpZiAodmFsdWUgPT09IG90aGVyKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKHZhbHVlID09IG51bGwgfHwgb3RoZXIgPT0gbnVsbCB8fCAoIWlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgIWlzT2JqZWN0TGlrZShvdGhlcikpKSB7XG4gICAgcmV0dXJuIHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXI7XG4gIH1cbiAgcmV0dXJuIGJhc2VJc0VxdWFsRGVlcCh2YWx1ZSwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGJhc2VJc0VxdWFsLCBzdGFjayk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzRXF1YWw7XG4iLCAidmFyIGJhc2VJc0VxdWFsID0gcmVxdWlyZSgnLi9fYmFzZUlzRXF1YWwnKTtcblxuLyoqXG4gKiBQZXJmb3JtcyBhIGRlZXAgY29tcGFyaXNvbiBiZXR3ZWVuIHR3byB2YWx1ZXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgYXJlXG4gKiBlcXVpdmFsZW50LlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBzdXBwb3J0cyBjb21wYXJpbmcgYXJyYXlzLCBhcnJheSBidWZmZXJzLCBib29sZWFucyxcbiAqIGRhdGUgb2JqZWN0cywgZXJyb3Igb2JqZWN0cywgbWFwcywgbnVtYmVycywgYE9iamVjdGAgb2JqZWN0cywgcmVnZXhlcyxcbiAqIHNldHMsIHN0cmluZ3MsIHN5bWJvbHMsIGFuZCB0eXBlZCBhcnJheXMuIGBPYmplY3RgIG9iamVjdHMgYXJlIGNvbXBhcmVkXG4gKiBieSB0aGVpciBvd24sIG5vdCBpbmhlcml0ZWQsIGVudW1lcmFibGUgcHJvcGVydGllcy4gRnVuY3Rpb25zIGFuZCBET01cbiAqIG5vZGVzIGFyZSBjb21wYXJlZCBieSBzdHJpY3QgZXF1YWxpdHksIGkuZS4gYD09PWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKiB2YXIgb3RoZXIgPSB7ICdhJzogMSB9O1xuICpcbiAqIF8uaXNFcXVhbChvYmplY3QsIG90aGVyKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBvYmplY3QgPT09IG90aGVyO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNFcXVhbCh2YWx1ZSwgb3RoZXIpIHtcbiAgcmV0dXJuIGJhc2VJc0VxdWFsKHZhbHVlLCBvdGhlcik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNFcXVhbDtcbiIsICIvLyEgbW9tZW50LmpzXG4vLyEgdmVyc2lvbiA6IDIuMzAuMVxuLy8hIGF1dGhvcnMgOiBUaW0gV29vZCwgSXNrcmVuIENoZXJuZXYsIE1vbWVudC5qcyBjb250cmlidXRvcnNcbi8vISBsaWNlbnNlIDogTUlUXG4vLyEgbW9tZW50anMuY29tXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpIDpcbiAgICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoZmFjdG9yeSkgOlxuICAgIGdsb2JhbC5tb21lbnQgPSBmYWN0b3J5KClcbn0odGhpcywgKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgdmFyIGhvb2tDYWxsYmFjaztcblxuICAgIGZ1bmN0aW9uIGhvb2tzKCkge1xuICAgICAgICByZXR1cm4gaG9va0NhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBpcyBkb25lIHRvIHJlZ2lzdGVyIHRoZSBtZXRob2QgY2FsbGVkIHdpdGggbW9tZW50KClcbiAgICAvLyB3aXRob3V0IGNyZWF0aW5nIGNpcmN1bGFyIGRlcGVuZGVuY2llcy5cbiAgICBmdW5jdGlvbiBzZXRIb29rQ2FsbGJhY2soY2FsbGJhY2spIHtcbiAgICAgICAgaG9va0NhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNBcnJheShpbnB1dCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgaW5wdXQgaW5zdGFuY2VvZiBBcnJheSB8fFxuICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KSA9PT0gJ1tvYmplY3QgQXJyYXldJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzT2JqZWN0KGlucHV0KSB7XG4gICAgICAgIC8vIElFOCB3aWxsIHRyZWF0IHVuZGVmaW5lZCBhbmQgbnVsbCBhcyBvYmplY3QgaWYgaXQgd2Fzbid0IGZvclxuICAgICAgICAvLyBpbnB1dCAhPSBudWxsXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBpbnB1dCAhPSBudWxsICYmXG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBPYmplY3RdJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhc093blByb3AoYSwgYikge1xuICAgICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsIGIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzT2JqZWN0RW1wdHkob2JqKSB7XG4gICAgICAgIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcykge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaikubGVuZ3RoID09PSAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGs7XG4gICAgICAgICAgICBmb3IgKGsgaW4gb2JqKSB7XG4gICAgICAgICAgICAgICAgaWYgKGhhc093blByb3Aob2JqLCBrKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1VuZGVmaW5lZChpbnB1dCkge1xuICAgICAgICByZXR1cm4gaW5wdXQgPT09IHZvaWQgMDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc051bWJlcihpbnB1dCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdHlwZW9mIGlucHV0ID09PSAnbnVtYmVyJyB8fFxuICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KSA9PT0gJ1tvYmplY3QgTnVtYmVyXSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0RhdGUoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGlucHV0IGluc3RhbmNlb2YgRGF0ZSB8fFxuICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KSA9PT0gJ1tvYmplY3QgRGF0ZV0nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFwKGFyciwgZm4pIHtcbiAgICAgICAgdmFyIHJlcyA9IFtdLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIGFyckxlbiA9IGFyci5sZW5ndGg7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBhcnJMZW47ICsraSkge1xuICAgICAgICAgICAgcmVzLnB1c2goZm4oYXJyW2ldLCBpKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBleHRlbmQoYSwgYikge1xuICAgICAgICBmb3IgKHZhciBpIGluIGIpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGIsIGkpKSB7XG4gICAgICAgICAgICAgICAgYVtpXSA9IGJbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFzT3duUHJvcChiLCAndG9TdHJpbmcnKSkge1xuICAgICAgICAgICAgYS50b1N0cmluZyA9IGIudG9TdHJpbmc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFzT3duUHJvcChiLCAndmFsdWVPZicpKSB7XG4gICAgICAgICAgICBhLnZhbHVlT2YgPSBiLnZhbHVlT2Y7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVVVEMoaW5wdXQsIGZvcm1hdCwgbG9jYWxlLCBzdHJpY3QpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsT3JVVEMoaW5wdXQsIGZvcm1hdCwgbG9jYWxlLCBzdHJpY3QsIHRydWUpLnV0YygpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlZmF1bHRQYXJzaW5nRmxhZ3MoKSB7XG4gICAgICAgIC8vIFdlIG5lZWQgdG8gZGVlcCBjbG9uZSB0aGlzIG9iamVjdC5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGVtcHR5OiBmYWxzZSxcbiAgICAgICAgICAgIHVudXNlZFRva2VuczogW10sXG4gICAgICAgICAgICB1bnVzZWRJbnB1dDogW10sXG4gICAgICAgICAgICBvdmVyZmxvdzogLTIsXG4gICAgICAgICAgICBjaGFyc0xlZnRPdmVyOiAwLFxuICAgICAgICAgICAgbnVsbElucHV0OiBmYWxzZSxcbiAgICAgICAgICAgIGludmFsaWRFcmE6IG51bGwsXG4gICAgICAgICAgICBpbnZhbGlkTW9udGg6IG51bGwsXG4gICAgICAgICAgICBpbnZhbGlkRm9ybWF0OiBmYWxzZSxcbiAgICAgICAgICAgIHVzZXJJbnZhbGlkYXRlZDogZmFsc2UsXG4gICAgICAgICAgICBpc286IGZhbHNlLFxuICAgICAgICAgICAgcGFyc2VkRGF0ZVBhcnRzOiBbXSxcbiAgICAgICAgICAgIGVyYTogbnVsbCxcbiAgICAgICAgICAgIG1lcmlkaWVtOiBudWxsLFxuICAgICAgICAgICAgcmZjMjgyMjogZmFsc2UsXG4gICAgICAgICAgICB3ZWVrZGF5TWlzbWF0Y2g6IGZhbHNlLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFBhcnNpbmdGbGFncyhtKSB7XG4gICAgICAgIGlmIChtLl9wZiA9PSBudWxsKSB7XG4gICAgICAgICAgICBtLl9wZiA9IGRlZmF1bHRQYXJzaW5nRmxhZ3MoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbS5fcGY7XG4gICAgfVxuXG4gICAgdmFyIHNvbWU7XG4gICAgaWYgKEFycmF5LnByb3RvdHlwZS5zb21lKSB7XG4gICAgICAgIHNvbWUgPSBBcnJheS5wcm90b3R5cGUuc29tZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBzb21lID0gZnVuY3Rpb24gKGZ1bikge1xuICAgICAgICAgICAgdmFyIHQgPSBPYmplY3QodGhpcyksXG4gICAgICAgICAgICAgICAgbGVuID0gdC5sZW5ndGggPj4+IDAsXG4gICAgICAgICAgICAgICAgaTtcblxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGkgaW4gdCAmJiBmdW4uY2FsbCh0aGlzLCB0W2ldLCBpLCB0KSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1ZhbGlkKG0pIHtcbiAgICAgICAgdmFyIGZsYWdzID0gbnVsbCxcbiAgICAgICAgICAgIHBhcnNlZFBhcnRzID0gZmFsc2UsXG4gICAgICAgICAgICBpc05vd1ZhbGlkID0gbS5fZCAmJiAhaXNOYU4obS5fZC5nZXRUaW1lKCkpO1xuICAgICAgICBpZiAoaXNOb3dWYWxpZCkge1xuICAgICAgICAgICAgZmxhZ3MgPSBnZXRQYXJzaW5nRmxhZ3MobSk7XG4gICAgICAgICAgICBwYXJzZWRQYXJ0cyA9IHNvbWUuY2FsbChmbGFncy5wYXJzZWREYXRlUGFydHMsIGZ1bmN0aW9uIChpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGkgIT0gbnVsbDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaXNOb3dWYWxpZCA9XG4gICAgICAgICAgICAgICAgZmxhZ3Mub3ZlcmZsb3cgPCAwICYmXG4gICAgICAgICAgICAgICAgIWZsYWdzLmVtcHR5ICYmXG4gICAgICAgICAgICAgICAgIWZsYWdzLmludmFsaWRFcmEgJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3MuaW52YWxpZE1vbnRoICYmXG4gICAgICAgICAgICAgICAgIWZsYWdzLmludmFsaWRXZWVrZGF5ICYmXG4gICAgICAgICAgICAgICAgIWZsYWdzLndlZWtkYXlNaXNtYXRjaCAmJlxuICAgICAgICAgICAgICAgICFmbGFncy5udWxsSW5wdXQgJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3MuaW52YWxpZEZvcm1hdCAmJlxuICAgICAgICAgICAgICAgICFmbGFncy51c2VySW52YWxpZGF0ZWQgJiZcbiAgICAgICAgICAgICAgICAoIWZsYWdzLm1lcmlkaWVtIHx8IChmbGFncy5tZXJpZGllbSAmJiBwYXJzZWRQYXJ0cykpO1xuICAgICAgICAgICAgaWYgKG0uX3N0cmljdCkge1xuICAgICAgICAgICAgICAgIGlzTm93VmFsaWQgPVxuICAgICAgICAgICAgICAgICAgICBpc05vd1ZhbGlkICYmXG4gICAgICAgICAgICAgICAgICAgIGZsYWdzLmNoYXJzTGVmdE92ZXIgPT09IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MudW51c2VkVG9rZW5zLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgICAgICAgICAgICAgICBmbGFncy5iaWdIb3VyID09PSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKE9iamVjdC5pc0Zyb3plbiA9PSBudWxsIHx8ICFPYmplY3QuaXNGcm96ZW4obSkpIHtcbiAgICAgICAgICAgIG0uX2lzVmFsaWQgPSBpc05vd1ZhbGlkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGlzTm93VmFsaWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG0uX2lzVmFsaWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlSW52YWxpZChmbGFncykge1xuICAgICAgICB2YXIgbSA9IGNyZWF0ZVVUQyhOYU4pO1xuICAgICAgICBpZiAoZmxhZ3MgIT0gbnVsbCkge1xuICAgICAgICAgICAgZXh0ZW5kKGdldFBhcnNpbmdGbGFncyhtKSwgZmxhZ3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKG0pLnVzZXJJbnZhbGlkYXRlZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICAvLyBQbHVnaW5zIHRoYXQgYWRkIHByb3BlcnRpZXMgc2hvdWxkIGFsc28gYWRkIHRoZSBrZXkgaGVyZSAobnVsbCB2YWx1ZSksXG4gICAgLy8gc28gd2UgY2FuIHByb3Blcmx5IGNsb25lIG91cnNlbHZlcy5cbiAgICB2YXIgbW9tZW50UHJvcGVydGllcyA9IChob29rcy5tb21lbnRQcm9wZXJ0aWVzID0gW10pLFxuICAgICAgICB1cGRhdGVJblByb2dyZXNzID0gZmFsc2U7XG5cbiAgICBmdW5jdGlvbiBjb3B5Q29uZmlnKHRvLCBmcm9tKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgcHJvcCxcbiAgICAgICAgICAgIHZhbCxcbiAgICAgICAgICAgIG1vbWVudFByb3BlcnRpZXNMZW4gPSBtb21lbnRQcm9wZXJ0aWVzLmxlbmd0aDtcblxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2lzQU1vbWVudE9iamVjdCkpIHtcbiAgICAgICAgICAgIHRvLl9pc0FNb21lbnRPYmplY3QgPSBmcm9tLl9pc0FNb21lbnRPYmplY3Q7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9pKSkge1xuICAgICAgICAgICAgdG8uX2kgPSBmcm9tLl9pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fZikpIHtcbiAgICAgICAgICAgIHRvLl9mID0gZnJvbS5fZjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2wpKSB7XG4gICAgICAgICAgICB0by5fbCA9IGZyb20uX2w7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9zdHJpY3QpKSB7XG4gICAgICAgICAgICB0by5fc3RyaWN0ID0gZnJvbS5fc3RyaWN0O1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fdHptKSkge1xuICAgICAgICAgICAgdG8uX3R6bSA9IGZyb20uX3R6bTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2lzVVRDKSkge1xuICAgICAgICAgICAgdG8uX2lzVVRDID0gZnJvbS5faXNVVEM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9vZmZzZXQpKSB7XG4gICAgICAgICAgICB0by5fb2Zmc2V0ID0gZnJvbS5fb2Zmc2V0O1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fcGYpKSB7XG4gICAgICAgICAgICB0by5fcGYgPSBnZXRQYXJzaW5nRmxhZ3MoZnJvbSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9sb2NhbGUpKSB7XG4gICAgICAgICAgICB0by5fbG9jYWxlID0gZnJvbS5fbG9jYWxlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1vbWVudFByb3BlcnRpZXNMZW4gPiAwKSB7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbW9tZW50UHJvcGVydGllc0xlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgcHJvcCA9IG1vbWVudFByb3BlcnRpZXNbaV07XG4gICAgICAgICAgICAgICAgdmFsID0gZnJvbVtwcm9wXTtcbiAgICAgICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKHZhbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9bcHJvcF0gPSB2YWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRvO1xuICAgIH1cblxuICAgIC8vIE1vbWVudCBwcm90b3R5cGUgb2JqZWN0XG4gICAgZnVuY3Rpb24gTW9tZW50KGNvbmZpZykge1xuICAgICAgICBjb3B5Q29uZmlnKHRoaXMsIGNvbmZpZyk7XG4gICAgICAgIHRoaXMuX2QgPSBuZXcgRGF0ZShjb25maWcuX2QgIT0gbnVsbCA/IGNvbmZpZy5fZC5nZXRUaW1lKCkgOiBOYU4pO1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICB0aGlzLl9kID0gbmV3IERhdGUoTmFOKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBQcmV2ZW50IGluZmluaXRlIGxvb3AgaW4gY2FzZSB1cGRhdGVPZmZzZXQgY3JlYXRlcyBuZXcgbW9tZW50XG4gICAgICAgIC8vIG9iamVjdHMuXG4gICAgICAgIGlmICh1cGRhdGVJblByb2dyZXNzID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdXBkYXRlSW5Qcm9ncmVzcyA9IHRydWU7XG4gICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcyk7XG4gICAgICAgICAgICB1cGRhdGVJblByb2dyZXNzID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc01vbWVudChvYmopIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIG9iaiBpbnN0YW5jZW9mIE1vbWVudCB8fCAob2JqICE9IG51bGwgJiYgb2JqLl9pc0FNb21lbnRPYmplY3QgIT0gbnVsbClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3YXJuKG1zZykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBob29rcy5zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZ3MgPT09IGZhbHNlICYmXG4gICAgICAgICAgICB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgIGNvbnNvbGUud2FyblxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignRGVwcmVjYXRpb24gd2FybmluZzogJyArIG1zZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZXByZWNhdGUobXNnLCBmbikge1xuICAgICAgICB2YXIgZmlyc3RUaW1lID0gdHJ1ZTtcblxuICAgICAgICByZXR1cm4gZXh0ZW5kKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChob29rcy5kZXByZWNhdGlvbkhhbmRsZXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlcihudWxsLCBtc2cpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZpcnN0VGltZSkge1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gW10sXG4gICAgICAgICAgICAgICAgICAgIGFyZyxcbiAgICAgICAgICAgICAgICAgICAgaSxcbiAgICAgICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgICAgICBhcmdMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBhcmdMZW47IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBhcmcgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbaV0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgKz0gJ1xcblsnICsgaSArICddICc7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGtleSBpbiBhcmd1bWVudHNbMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzT3duUHJvcChhcmd1bWVudHNbMF0sIGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnICs9IGtleSArICc6ICcgKyBhcmd1bWVudHNbMF1ba2V5XSArICcsICc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gYXJnLnNsaWNlKDAsIC0yKTsgLy8gUmVtb3ZlIHRyYWlsaW5nIGNvbW1hIGFuZCBzcGFjZVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaChhcmcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB3YXJuKFxuICAgICAgICAgICAgICAgICAgICBtc2cgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ1xcbkFyZ3VtZW50czogJyArXG4gICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmdzKS5qb2luKCcnKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgRXJyb3IoKS5zdGFja1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgZmlyc3RUaW1lID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfSwgZm4pO1xuICAgIH1cblxuICAgIHZhciBkZXByZWNhdGlvbnMgPSB7fTtcblxuICAgIGZ1bmN0aW9uIGRlcHJlY2F0ZVNpbXBsZShuYW1lLCBtc2cpIHtcbiAgICAgICAgaWYgKGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlciAhPSBudWxsKSB7XG4gICAgICAgICAgICBob29rcy5kZXByZWNhdGlvbkhhbmRsZXIobmFtZSwgbXNnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWRlcHJlY2F0aW9uc1tuYW1lXSkge1xuICAgICAgICAgICAgd2Fybihtc2cpO1xuICAgICAgICAgICAgZGVwcmVjYXRpb25zW25hbWVdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhvb2tzLnN1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5ncyA9IGZhbHNlO1xuICAgIGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlciA9IG51bGw7XG5cbiAgICBmdW5jdGlvbiBpc0Z1bmN0aW9uKGlucHV0KSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAodHlwZW9mIEZ1bmN0aW9uICE9PSAndW5kZWZpbmVkJyAmJiBpbnB1dCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB8fFxuICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldChjb25maWcpIHtcbiAgICAgICAgdmFyIHByb3AsIGk7XG4gICAgICAgIGZvciAoaSBpbiBjb25maWcpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGNvbmZpZywgaSkpIHtcbiAgICAgICAgICAgICAgICBwcm9wID0gY29uZmlnW2ldO1xuICAgICAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHByb3ApKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXNbaV0gPSBwcm9wO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXNbJ18nICsgaV0gPSBwcm9wO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jb25maWcgPSBjb25maWc7XG4gICAgICAgIC8vIExlbmllbnQgb3JkaW5hbCBwYXJzaW5nIGFjY2VwdHMganVzdCBhIG51bWJlciBpbiBhZGRpdGlvbiB0b1xuICAgICAgICAvLyBudW1iZXIgKyAocG9zc2libHkpIHN0dWZmIGNvbWluZyBmcm9tIF9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlLlxuICAgICAgICAvLyBUT0RPOiBSZW1vdmUgXCJvcmRpbmFsUGFyc2VcIiBmYWxsYmFjayBpbiBuZXh0IG1ham9yIHJlbGVhc2UuXG4gICAgICAgIHRoaXMuX2RheU9mTW9udGhPcmRpbmFsUGFyc2VMZW5pZW50ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICh0aGlzLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlLnNvdXJjZSB8fCB0aGlzLl9vcmRpbmFsUGFyc2Uuc291cmNlKSArXG4gICAgICAgICAgICAgICAgJ3wnICtcbiAgICAgICAgICAgICAgICAvXFxkezEsMn0vLnNvdXJjZVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1lcmdlQ29uZmlncyhwYXJlbnRDb25maWcsIGNoaWxkQ29uZmlnKSB7XG4gICAgICAgIHZhciByZXMgPSBleHRlbmQoe30sIHBhcmVudENvbmZpZyksXG4gICAgICAgICAgICBwcm9wO1xuICAgICAgICBmb3IgKHByb3AgaW4gY2hpbGRDb25maWcpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGNoaWxkQ29uZmlnLCBwcm9wKSkge1xuICAgICAgICAgICAgICAgIGlmIChpc09iamVjdChwYXJlbnRDb25maWdbcHJvcF0pICYmIGlzT2JqZWN0KGNoaWxkQ29uZmlnW3Byb3BdKSkge1xuICAgICAgICAgICAgICAgICAgICByZXNbcHJvcF0gPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgZXh0ZW5kKHJlc1twcm9wXSwgcGFyZW50Q29uZmlnW3Byb3BdKTtcbiAgICAgICAgICAgICAgICAgICAgZXh0ZW5kKHJlc1twcm9wXSwgY2hpbGRDb25maWdbcHJvcF0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hpbGRDb25maWdbcHJvcF0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXNbcHJvcF0gPSBjaGlsZENvbmZpZ1twcm9wXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcmVzW3Byb3BdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKHByb3AgaW4gcGFyZW50Q29uZmlnKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgaGFzT3duUHJvcChwYXJlbnRDb25maWcsIHByb3ApICYmXG4gICAgICAgICAgICAgICAgIWhhc093blByb3AoY2hpbGRDb25maWcsIHByb3ApICYmXG4gICAgICAgICAgICAgICAgaXNPYmplY3QocGFyZW50Q29uZmlnW3Byb3BdKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgLy8gbWFrZSBzdXJlIGNoYW5nZXMgdG8gcHJvcGVydGllcyBkb24ndCBtb2RpZnkgcGFyZW50IGNvbmZpZ1xuICAgICAgICAgICAgICAgIHJlc1twcm9wXSA9IGV4dGVuZCh7fSwgcmVzW3Byb3BdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIExvY2FsZShjb25maWcpIHtcbiAgICAgICAgaWYgKGNvbmZpZyAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLnNldChjb25maWcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGtleXM7XG5cbiAgICBpZiAoT2JqZWN0LmtleXMpIHtcbiAgICAgICAga2V5cyA9IE9iamVjdC5rZXlzO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGtleXMgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgICAgICByZXMgPSBbXTtcbiAgICAgICAgICAgIGZvciAoaSBpbiBvYmopIHtcbiAgICAgICAgICAgICAgICBpZiAoaGFzT3duUHJvcChvYmosIGkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcy5wdXNoKGkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRDYWxlbmRhciA9IHtcbiAgICAgICAgc2FtZURheTogJ1tUb2RheSBhdF0gTFQnLFxuICAgICAgICBuZXh0RGF5OiAnW1RvbW9ycm93IGF0XSBMVCcsXG4gICAgICAgIG5leHRXZWVrOiAnZGRkZCBbYXRdIExUJyxcbiAgICAgICAgbGFzdERheTogJ1tZZXN0ZXJkYXkgYXRdIExUJyxcbiAgICAgICAgbGFzdFdlZWs6ICdbTGFzdF0gZGRkZCBbYXRdIExUJyxcbiAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gY2FsZW5kYXIoa2V5LCBtb20sIG5vdykge1xuICAgICAgICB2YXIgb3V0cHV0ID0gdGhpcy5fY2FsZW5kYXJba2V5XSB8fCB0aGlzLl9jYWxlbmRhclsnc2FtZUVsc2UnXTtcbiAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24ob3V0cHV0KSA/IG91dHB1dC5jYWxsKG1vbSwgbm93KSA6IG91dHB1dDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB6ZXJvRmlsbChudW1iZXIsIHRhcmdldExlbmd0aCwgZm9yY2VTaWduKSB7XG4gICAgICAgIHZhciBhYnNOdW1iZXIgPSAnJyArIE1hdGguYWJzKG51bWJlciksXG4gICAgICAgICAgICB6ZXJvc1RvRmlsbCA9IHRhcmdldExlbmd0aCAtIGFic051bWJlci5sZW5ndGgsXG4gICAgICAgICAgICBzaWduID0gbnVtYmVyID49IDA7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAoc2lnbiA/IChmb3JjZVNpZ24gPyAnKycgOiAnJykgOiAnLScpICtcbiAgICAgICAgICAgIE1hdGgucG93KDEwLCBNYXRoLm1heCgwLCB6ZXJvc1RvRmlsbCkpLnRvU3RyaW5nKCkuc3Vic3RyKDEpICtcbiAgICAgICAgICAgIGFic051bWJlclxuICAgICAgICApO1xuICAgIH1cblxuICAgIHZhciBmb3JtYXR0aW5nVG9rZW5zID1cbiAgICAgICAgICAgIC8oXFxbW15cXFtdKlxcXSl8KFxcXFwpPyhbSGhdbW0oc3MpP3xNb3xNTT9NP00/fERvfERERG98REQ/RD9EP3xkZGQ/ZD98ZG8/fHdbb3x3XT98V1tvfFddP3xRbz98TnsxLDV9fFlZWVlZWXxZWVlZWXxZWVlZfFlZfHl7Miw0fXx5bz98Z2coZ2dnPyk/fEdHKEdHRz8pP3xlfEV8YXxBfGhoP3xISD98a2s/fG1tP3xzcz98U3sxLDl9fHh8WHx6ej98Wlo/fC4pL2csXG4gICAgICAgIGxvY2FsRm9ybWF0dGluZ1Rva2VucyA9IC8oXFxbW15cXFtdKlxcXSl8KFxcXFwpPyhMVFN8TFR8TEw/TD9MP3xsezEsNH0pL2csXG4gICAgICAgIGZvcm1hdEZ1bmN0aW9ucyA9IHt9LFxuICAgICAgICBmb3JtYXRUb2tlbkZ1bmN0aW9ucyA9IHt9O1xuXG4gICAgLy8gdG9rZW46ICAgICdNJ1xuICAgIC8vIHBhZGRlZDogICBbJ01NJywgMl1cbiAgICAvLyBvcmRpbmFsOiAgJ01vJ1xuICAgIC8vIGNhbGxiYWNrOiBmdW5jdGlvbiAoKSB7IHRoaXMubW9udGgoKSArIDEgfVxuICAgIGZ1bmN0aW9uIGFkZEZvcm1hdFRva2VuKHRva2VuLCBwYWRkZWQsIG9yZGluYWwsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBmdW5jID0gY2FsbGJhY2s7XG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBmdW5jID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzW2NhbGxiYWNrXSgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgICAgIGZvcm1hdFRva2VuRnVuY3Rpb25zW3Rva2VuXSA9IGZ1bmM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhZGRlZCkge1xuICAgICAgICAgICAgZm9ybWF0VG9rZW5GdW5jdGlvbnNbcGFkZGVkWzBdXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gemVyb0ZpbGwoZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpLCBwYWRkZWRbMV0sIHBhZGRlZFsyXSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcmRpbmFsKSB7XG4gICAgICAgICAgICBmb3JtYXRUb2tlbkZ1bmN0aW9uc1tvcmRpbmFsXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkub3JkaW5hbChcbiAgICAgICAgICAgICAgICAgICAgZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpLFxuICAgICAgICAgICAgICAgICAgICB0b2tlblxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVtb3ZlRm9ybWF0dGluZ1Rva2VucyhpbnB1dCkge1xuICAgICAgICBpZiAoaW5wdXQubWF0Y2goL1xcW1tcXHNcXFNdLykpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dC5yZXBsYWNlKC9eXFxbfFxcXSQvZywgJycpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnB1dC5yZXBsYWNlKC9cXFxcL2csICcnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYWtlRm9ybWF0RnVuY3Rpb24oZm9ybWF0KSB7XG4gICAgICAgIHZhciBhcnJheSA9IGZvcm1hdC5tYXRjaChmb3JtYXR0aW5nVG9rZW5zKSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBsZW5ndGg7XG5cbiAgICAgICAgZm9yIChpID0gMCwgbGVuZ3RoID0gYXJyYXkubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXRUb2tlbkZ1bmN0aW9uc1thcnJheVtpXV0pIHtcbiAgICAgICAgICAgICAgICBhcnJheVtpXSA9IGZvcm1hdFRva2VuRnVuY3Rpb25zW2FycmF5W2ldXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYXJyYXlbaV0gPSByZW1vdmVGb3JtYXR0aW5nVG9rZW5zKGFycmF5W2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAobW9tKSB7XG4gICAgICAgICAgICB2YXIgb3V0cHV0ID0gJycsXG4gICAgICAgICAgICAgICAgaTtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIG91dHB1dCArPSBpc0Z1bmN0aW9uKGFycmF5W2ldKVxuICAgICAgICAgICAgICAgICAgICA/IGFycmF5W2ldLmNhbGwobW9tLCBmb3JtYXQpXG4gICAgICAgICAgICAgICAgICAgIDogYXJyYXlbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIGZvcm1hdCBkYXRlIHVzaW5nIG5hdGl2ZSBkYXRlIG9iamVjdFxuICAgIGZ1bmN0aW9uIGZvcm1hdE1vbWVudChtLCBmb3JtYXQpIHtcbiAgICAgICAgaWYgKCFtLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIG0ubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3JtYXQgPSBleHBhbmRGb3JtYXQoZm9ybWF0LCBtLmxvY2FsZURhdGEoKSk7XG4gICAgICAgIGZvcm1hdEZ1bmN0aW9uc1tmb3JtYXRdID1cbiAgICAgICAgICAgIGZvcm1hdEZ1bmN0aW9uc1tmb3JtYXRdIHx8IG1ha2VGb3JtYXRGdW5jdGlvbihmb3JtYXQpO1xuXG4gICAgICAgIHJldHVybiBmb3JtYXRGdW5jdGlvbnNbZm9ybWF0XShtKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBleHBhbmRGb3JtYXQoZm9ybWF0LCBsb2NhbGUpIHtcbiAgICAgICAgdmFyIGkgPSA1O1xuXG4gICAgICAgIGZ1bmN0aW9uIHJlcGxhY2VMb25nRGF0ZUZvcm1hdFRva2VucyhpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsZS5sb25nRGF0ZUZvcm1hdChpbnB1dCkgfHwgaW5wdXQ7XG4gICAgICAgIH1cblxuICAgICAgICBsb2NhbEZvcm1hdHRpbmdUb2tlbnMubGFzdEluZGV4ID0gMDtcbiAgICAgICAgd2hpbGUgKGkgPj0gMCAmJiBsb2NhbEZvcm1hdHRpbmdUb2tlbnMudGVzdChmb3JtYXQpKSB7XG4gICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZShcbiAgICAgICAgICAgICAgICBsb2NhbEZvcm1hdHRpbmdUb2tlbnMsXG4gICAgICAgICAgICAgICAgcmVwbGFjZUxvbmdEYXRlRm9ybWF0VG9rZW5zXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbG9jYWxGb3JtYXR0aW5nVG9rZW5zLmxhc3RJbmRleCA9IDA7XG4gICAgICAgICAgICBpIC09IDE7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZm9ybWF0O1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0TG9uZ0RhdGVGb3JtYXQgPSB7XG4gICAgICAgIExUUzogJ2g6bW06c3MgQScsXG4gICAgICAgIExUOiAnaDptbSBBJyxcbiAgICAgICAgTDogJ01NL0REL1lZWVknLFxuICAgICAgICBMTDogJ01NTU0gRCwgWVlZWScsXG4gICAgICAgIExMTDogJ01NTU0gRCwgWVlZWSBoOm1tIEEnLFxuICAgICAgICBMTExMOiAnZGRkZCwgTU1NTSBELCBZWVlZIGg6bW0gQScsXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGxvbmdEYXRlRm9ybWF0KGtleSkge1xuICAgICAgICB2YXIgZm9ybWF0ID0gdGhpcy5fbG9uZ0RhdGVGb3JtYXRba2V5XSxcbiAgICAgICAgICAgIGZvcm1hdFVwcGVyID0gdGhpcy5fbG9uZ0RhdGVGb3JtYXRba2V5LnRvVXBwZXJDYXNlKCldO1xuXG4gICAgICAgIGlmIChmb3JtYXQgfHwgIWZvcm1hdFVwcGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbG9uZ0RhdGVGb3JtYXRba2V5XSA9IGZvcm1hdFVwcGVyXG4gICAgICAgICAgICAubWF0Y2goZm9ybWF0dGluZ1Rva2VucylcbiAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKHRvaykge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgdG9rID09PSAnTU1NTScgfHxcbiAgICAgICAgICAgICAgICAgICAgdG9rID09PSAnTU0nIHx8XG4gICAgICAgICAgICAgICAgICAgIHRvayA9PT0gJ0REJyB8fFxuICAgICAgICAgICAgICAgICAgICB0b2sgPT09ICdkZGRkJ1xuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9rLnNsaWNlKDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdG9rO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5qb2luKCcnKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5fbG9uZ0RhdGVGb3JtYXRba2V5XTtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdEludmFsaWREYXRlID0gJ0ludmFsaWQgZGF0ZSc7XG5cbiAgICBmdW5jdGlvbiBpbnZhbGlkRGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ludmFsaWREYXRlO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0T3JkaW5hbCA9ICclZCcsXG4gICAgICAgIGRlZmF1bHREYXlPZk1vbnRoT3JkaW5hbFBhcnNlID0gL1xcZHsxLDJ9LztcblxuICAgIGZ1bmN0aW9uIG9yZGluYWwobnVtYmVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9vcmRpbmFsLnJlcGxhY2UoJyVkJywgbnVtYmVyKTtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdFJlbGF0aXZlVGltZSA9IHtcbiAgICAgICAgZnV0dXJlOiAnaW4gJXMnLFxuICAgICAgICBwYXN0OiAnJXMgYWdvJyxcbiAgICAgICAgczogJ2EgZmV3IHNlY29uZHMnLFxuICAgICAgICBzczogJyVkIHNlY29uZHMnLFxuICAgICAgICBtOiAnYSBtaW51dGUnLFxuICAgICAgICBtbTogJyVkIG1pbnV0ZXMnLFxuICAgICAgICBoOiAnYW4gaG91cicsXG4gICAgICAgIGhoOiAnJWQgaG91cnMnLFxuICAgICAgICBkOiAnYSBkYXknLFxuICAgICAgICBkZDogJyVkIGRheXMnLFxuICAgICAgICB3OiAnYSB3ZWVrJyxcbiAgICAgICAgd3c6ICclZCB3ZWVrcycsXG4gICAgICAgIE06ICdhIG1vbnRoJyxcbiAgICAgICAgTU06ICclZCBtb250aHMnLFxuICAgICAgICB5OiAnYSB5ZWFyJyxcbiAgICAgICAgeXk6ICclZCB5ZWFycycsXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIHJlbGF0aXZlVGltZShudW1iZXIsIHdpdGhvdXRTdWZmaXgsIHN0cmluZywgaXNGdXR1cmUpIHtcbiAgICAgICAgdmFyIG91dHB1dCA9IHRoaXMuX3JlbGF0aXZlVGltZVtzdHJpbmddO1xuICAgICAgICByZXR1cm4gaXNGdW5jdGlvbihvdXRwdXQpXG4gICAgICAgICAgICA/IG91dHB1dChudW1iZXIsIHdpdGhvdXRTdWZmaXgsIHN0cmluZywgaXNGdXR1cmUpXG4gICAgICAgICAgICA6IG91dHB1dC5yZXBsYWNlKC8lZC9pLCBudW1iZXIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhc3RGdXR1cmUoZGlmZiwgb3V0cHV0KSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSB0aGlzLl9yZWxhdGl2ZVRpbWVbZGlmZiA+IDAgPyAnZnV0dXJlJyA6ICdwYXN0J107XG4gICAgICAgIHJldHVybiBpc0Z1bmN0aW9uKGZvcm1hdCkgPyBmb3JtYXQob3V0cHV0KSA6IGZvcm1hdC5yZXBsYWNlKC8lcy9pLCBvdXRwdXQpO1xuICAgIH1cblxuICAgIHZhciBhbGlhc2VzID0ge1xuICAgICAgICBEOiAnZGF0ZScsXG4gICAgICAgIGRhdGVzOiAnZGF0ZScsXG4gICAgICAgIGRhdGU6ICdkYXRlJyxcbiAgICAgICAgZDogJ2RheScsXG4gICAgICAgIGRheXM6ICdkYXknLFxuICAgICAgICBkYXk6ICdkYXknLFxuICAgICAgICBlOiAnd2Vla2RheScsXG4gICAgICAgIHdlZWtkYXlzOiAnd2Vla2RheScsXG4gICAgICAgIHdlZWtkYXk6ICd3ZWVrZGF5JyxcbiAgICAgICAgRTogJ2lzb1dlZWtkYXknLFxuICAgICAgICBpc293ZWVrZGF5czogJ2lzb1dlZWtkYXknLFxuICAgICAgICBpc293ZWVrZGF5OiAnaXNvV2Vla2RheScsXG4gICAgICAgIERERDogJ2RheU9mWWVhcicsXG4gICAgICAgIGRheW9meWVhcnM6ICdkYXlPZlllYXInLFxuICAgICAgICBkYXlvZnllYXI6ICdkYXlPZlllYXInLFxuICAgICAgICBoOiAnaG91cicsXG4gICAgICAgIGhvdXJzOiAnaG91cicsXG4gICAgICAgIGhvdXI6ICdob3VyJyxcbiAgICAgICAgbXM6ICdtaWxsaXNlY29uZCcsXG4gICAgICAgIG1pbGxpc2Vjb25kczogJ21pbGxpc2Vjb25kJyxcbiAgICAgICAgbWlsbGlzZWNvbmQ6ICdtaWxsaXNlY29uZCcsXG4gICAgICAgIG06ICdtaW51dGUnLFxuICAgICAgICBtaW51dGVzOiAnbWludXRlJyxcbiAgICAgICAgbWludXRlOiAnbWludXRlJyxcbiAgICAgICAgTTogJ21vbnRoJyxcbiAgICAgICAgbW9udGhzOiAnbW9udGgnLFxuICAgICAgICBtb250aDogJ21vbnRoJyxcbiAgICAgICAgUTogJ3F1YXJ0ZXInLFxuICAgICAgICBxdWFydGVyczogJ3F1YXJ0ZXInLFxuICAgICAgICBxdWFydGVyOiAncXVhcnRlcicsXG4gICAgICAgIHM6ICdzZWNvbmQnLFxuICAgICAgICBzZWNvbmRzOiAnc2Vjb25kJyxcbiAgICAgICAgc2Vjb25kOiAnc2Vjb25kJyxcbiAgICAgICAgZ2c6ICd3ZWVrWWVhcicsXG4gICAgICAgIHdlZWt5ZWFyczogJ3dlZWtZZWFyJyxcbiAgICAgICAgd2Vla3llYXI6ICd3ZWVrWWVhcicsXG4gICAgICAgIEdHOiAnaXNvV2Vla1llYXInLFxuICAgICAgICBpc293ZWVreWVhcnM6ICdpc29XZWVrWWVhcicsXG4gICAgICAgIGlzb3dlZWt5ZWFyOiAnaXNvV2Vla1llYXInLFxuICAgICAgICB3OiAnd2VlaycsXG4gICAgICAgIHdlZWtzOiAnd2VlaycsXG4gICAgICAgIHdlZWs6ICd3ZWVrJyxcbiAgICAgICAgVzogJ2lzb1dlZWsnLFxuICAgICAgICBpc293ZWVrczogJ2lzb1dlZWsnLFxuICAgICAgICBpc293ZWVrOiAnaXNvV2VlaycsXG4gICAgICAgIHk6ICd5ZWFyJyxcbiAgICAgICAgeWVhcnM6ICd5ZWFyJyxcbiAgICAgICAgeWVhcjogJ3llYXInLFxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBub3JtYWxpemVVbml0cyh1bml0cykge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHVuaXRzID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgPyBhbGlhc2VzW3VuaXRzXSB8fCBhbGlhc2VzW3VuaXRzLnRvTG93ZXJDYXNlKCldXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBub3JtYWxpemVPYmplY3RVbml0cyhpbnB1dE9iamVjdCkge1xuICAgICAgICB2YXIgbm9ybWFsaXplZElucHV0ID0ge30sXG4gICAgICAgICAgICBub3JtYWxpemVkUHJvcCxcbiAgICAgICAgICAgIHByb3A7XG5cbiAgICAgICAgZm9yIChwcm9wIGluIGlucHV0T2JqZWN0KSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duUHJvcChpbnB1dE9iamVjdCwgcHJvcCkpIHtcbiAgICAgICAgICAgICAgICBub3JtYWxpemVkUHJvcCA9IG5vcm1hbGl6ZVVuaXRzKHByb3ApO1xuICAgICAgICAgICAgICAgIGlmIChub3JtYWxpemVkUHJvcCkge1xuICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkSW5wdXRbbm9ybWFsaXplZFByb3BdID0gaW5wdXRPYmplY3RbcHJvcF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWRJbnB1dDtcbiAgICB9XG5cbiAgICB2YXIgcHJpb3JpdGllcyA9IHtcbiAgICAgICAgZGF0ZTogOSxcbiAgICAgICAgZGF5OiAxMSxcbiAgICAgICAgd2Vla2RheTogMTEsXG4gICAgICAgIGlzb1dlZWtkYXk6IDExLFxuICAgICAgICBkYXlPZlllYXI6IDQsXG4gICAgICAgIGhvdXI6IDEzLFxuICAgICAgICBtaWxsaXNlY29uZDogMTYsXG4gICAgICAgIG1pbnV0ZTogMTQsXG4gICAgICAgIG1vbnRoOiA4LFxuICAgICAgICBxdWFydGVyOiA3LFxuICAgICAgICBzZWNvbmQ6IDE1LFxuICAgICAgICB3ZWVrWWVhcjogMSxcbiAgICAgICAgaXNvV2Vla1llYXI6IDEsXG4gICAgICAgIHdlZWs6IDUsXG4gICAgICAgIGlzb1dlZWs6IDUsXG4gICAgICAgIHllYXI6IDEsXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGdldFByaW9yaXRpemVkVW5pdHModW5pdHNPYmopIHtcbiAgICAgICAgdmFyIHVuaXRzID0gW10sXG4gICAgICAgICAgICB1O1xuICAgICAgICBmb3IgKHUgaW4gdW5pdHNPYmopIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKHVuaXRzT2JqLCB1KSkge1xuICAgICAgICAgICAgICAgIHVuaXRzLnB1c2goeyB1bml0OiB1LCBwcmlvcml0eTogcHJpb3JpdGllc1t1XSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB1bml0cy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICByZXR1cm4gYS5wcmlvcml0eSAtIGIucHJpb3JpdHk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdW5pdHM7XG4gICAgfVxuXG4gICAgdmFyIG1hdGNoMSA9IC9cXGQvLCAvLyAgICAgICAwIC0gOVxuICAgICAgICBtYXRjaDIgPSAvXFxkXFxkLywgLy8gICAgICAwMCAtIDk5XG4gICAgICAgIG1hdGNoMyA9IC9cXGR7M30vLCAvLyAgICAgMDAwIC0gOTk5XG4gICAgICAgIG1hdGNoNCA9IC9cXGR7NH0vLCAvLyAgICAwMDAwIC0gOTk5OVxuICAgICAgICBtYXRjaDYgPSAvWystXT9cXGR7Nn0vLCAvLyAtOTk5OTk5IC0gOTk5OTk5XG4gICAgICAgIG1hdGNoMXRvMiA9IC9cXGRcXGQ/LywgLy8gICAgICAgMCAtIDk5XG4gICAgICAgIG1hdGNoM3RvNCA9IC9cXGRcXGRcXGRcXGQ/LywgLy8gICAgIDk5OSAtIDk5OTlcbiAgICAgICAgbWF0Y2g1dG82ID0gL1xcZFxcZFxcZFxcZFxcZFxcZD8vLCAvLyAgIDk5OTk5IC0gOTk5OTk5XG4gICAgICAgIG1hdGNoMXRvMyA9IC9cXGR7MSwzfS8sIC8vICAgICAgIDAgLSA5OTlcbiAgICAgICAgbWF0Y2gxdG80ID0gL1xcZHsxLDR9LywgLy8gICAgICAgMCAtIDk5OTlcbiAgICAgICAgbWF0Y2gxdG82ID0gL1srLV0/XFxkezEsNn0vLCAvLyAtOTk5OTk5IC0gOTk5OTk5XG4gICAgICAgIG1hdGNoVW5zaWduZWQgPSAvXFxkKy8sIC8vICAgICAgIDAgLSBpbmZcbiAgICAgICAgbWF0Y2hTaWduZWQgPSAvWystXT9cXGQrLywgLy8gICAgLWluZiAtIGluZlxuICAgICAgICBtYXRjaE9mZnNldCA9IC9afFsrLV1cXGRcXGQ6P1xcZFxcZC9naSwgLy8gKzAwOjAwIC0wMDowMCArMDAwMCAtMDAwMCBvciBaXG4gICAgICAgIG1hdGNoU2hvcnRPZmZzZXQgPSAvWnxbKy1dXFxkXFxkKD86Oj9cXGRcXGQpPy9naSwgLy8gKzAwIC0wMCArMDA6MDAgLTAwOjAwICswMDAwIC0wMDAwIG9yIFpcbiAgICAgICAgbWF0Y2hUaW1lc3RhbXAgPSAvWystXT9cXGQrKFxcLlxcZHsxLDN9KT8vLCAvLyAxMjM0NTY3ODkgMTIzNDU2Nzg5LjEyM1xuICAgICAgICAvLyBhbnkgd29yZCAob3IgdHdvKSBjaGFyYWN0ZXJzIG9yIG51bWJlcnMgaW5jbHVkaW5nIHR3by90aHJlZSB3b3JkIG1vbnRoIGluIGFyYWJpYy5cbiAgICAgICAgLy8gaW5jbHVkZXMgc2NvdHRpc2ggZ2FlbGljIHR3byB3b3JkIGFuZCBoeXBoZW5hdGVkIG1vbnRoc1xuICAgICAgICBtYXRjaFdvcmQgPVxuICAgICAgICAgICAgL1swLTldezAsMjU2fVsnYS16XFx1MDBBMC1cXHUwNUZGXFx1MDcwMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRjA3XFx1RkYxMC1cXHVGRkVGXXsxLDI1Nn18W1xcdTA2MDAtXFx1MDZGRlxcL117MSwyNTZ9KFxccyo/W1xcdTA2MDAtXFx1MDZGRl17MSwyNTZ9KXsxLDJ9L2ksXG4gICAgICAgIG1hdGNoMXRvMk5vTGVhZGluZ1plcm8gPSAvXlsxLTldXFxkPy8sIC8vICAgICAgICAgMS05OVxuICAgICAgICBtYXRjaDF0bzJIYXNaZXJvID0gL14oWzEtOV1cXGR8XFxkKS8sIC8vICAgICAgICAgICAwLTk5XG4gICAgICAgIHJlZ2V4ZXM7XG5cbiAgICByZWdleGVzID0ge307XG5cbiAgICBmdW5jdGlvbiBhZGRSZWdleFRva2VuKHRva2VuLCByZWdleCwgc3RyaWN0UmVnZXgpIHtcbiAgICAgICAgcmVnZXhlc1t0b2tlbl0gPSBpc0Z1bmN0aW9uKHJlZ2V4KVxuICAgICAgICAgICAgPyByZWdleFxuICAgICAgICAgICAgOiBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZURhdGEpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBpc1N0cmljdCAmJiBzdHJpY3RSZWdleCA/IHN0cmljdFJlZ2V4IDogcmVnZXg7XG4gICAgICAgICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0UGFyc2VSZWdleEZvclRva2VuKHRva2VuLCBjb25maWcpIHtcbiAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHJlZ2V4ZXMsIHRva2VuKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAodW5lc2NhcGVGb3JtYXQodG9rZW4pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZWdleGVzW3Rva2VuXShjb25maWcuX3N0cmljdCwgY29uZmlnLl9sb2NhbGUpO1xuICAgIH1cblxuICAgIC8vIENvZGUgZnJvbSBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzM1NjE0OTMvaXMtdGhlcmUtYS1yZWdleHAtZXNjYXBlLWZ1bmN0aW9uLWluLWphdmFzY3JpcHRcbiAgICBmdW5jdGlvbiB1bmVzY2FwZUZvcm1hdChzKSB7XG4gICAgICAgIHJldHVybiByZWdleEVzY2FwZShcbiAgICAgICAgICAgIHNcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgnXFxcXCcsICcnKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKFxuICAgICAgICAgICAgICAgICAgICAvXFxcXChcXFspfFxcXFwoXFxdKXxcXFsoW15cXF1cXFtdKilcXF18XFxcXCguKS9nLFxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAobWF0Y2hlZCwgcDEsIHAyLCBwMywgcDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwMSB8fCBwMiB8fCBwMyB8fCBwNDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWdleEVzY2FwZShzKSB7XG4gICAgICAgIHJldHVybiBzLnJlcGxhY2UoL1stXFwvXFxcXF4kKis/LigpfFtcXF17fV0vZywgJ1xcXFwkJicpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFic0Zsb29yKG51bWJlcikge1xuICAgICAgICBpZiAobnVtYmVyIDwgMCkge1xuICAgICAgICAgICAgLy8gLTAgLT4gMFxuICAgICAgICAgICAgcmV0dXJuIE1hdGguY2VpbChudW1iZXIpIHx8IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihudW1iZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9JbnQoYXJndW1lbnRGb3JDb2VyY2lvbikge1xuICAgICAgICB2YXIgY29lcmNlZE51bWJlciA9ICthcmd1bWVudEZvckNvZXJjaW9uLFxuICAgICAgICAgICAgdmFsdWUgPSAwO1xuXG4gICAgICAgIGlmIChjb2VyY2VkTnVtYmVyICE9PSAwICYmIGlzRmluaXRlKGNvZXJjZWROdW1iZXIpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IGFic0Zsb29yKGNvZXJjZWROdW1iZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHZhciB0b2tlbnMgPSB7fTtcblxuICAgIGZ1bmN0aW9uIGFkZFBhcnNlVG9rZW4odG9rZW4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgZnVuYyA9IGNhbGxiYWNrLFxuICAgICAgICAgICAgdG9rZW5MZW47XG4gICAgICAgIGlmICh0eXBlb2YgdG9rZW4gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0b2tlbiA9IFt0b2tlbl07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzTnVtYmVyKGNhbGxiYWNrKSkge1xuICAgICAgICAgICAgZnVuYyA9IGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgICAgICAgICBhcnJheVtjYWxsYmFja10gPSB0b0ludChpbnB1dCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHRva2VuTGVuID0gdG9rZW4ubGVuZ3RoO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdG9rZW5MZW47IGkrKykge1xuICAgICAgICAgICAgdG9rZW5zW3Rva2VuW2ldXSA9IGZ1bmM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhZGRXZWVrUGFyc2VUb2tlbih0b2tlbiwgY2FsbGJhY2spIHtcbiAgICAgICAgYWRkUGFyc2VUb2tlbih0b2tlbiwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnLCB0b2tlbikge1xuICAgICAgICAgICAgY29uZmlnLl93ID0gY29uZmlnLl93IHx8IHt9O1xuICAgICAgICAgICAgY2FsbGJhY2soaW5wdXQsIGNvbmZpZy5fdywgY29uZmlnLCB0b2tlbik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZFRpbWVUb0FycmF5RnJvbVRva2VuKHRva2VuLCBpbnB1dCwgY29uZmlnKSB7XG4gICAgICAgIGlmIChpbnB1dCAhPSBudWxsICYmIGhhc093blByb3AodG9rZW5zLCB0b2tlbikpIHtcbiAgICAgICAgICAgIHRva2Vuc1t0b2tlbl0oaW5wdXQsIGNvbmZpZy5fYSwgY29uZmlnLCB0b2tlbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0xlYXBZZWFyKHllYXIpIHtcbiAgICAgICAgcmV0dXJuICh5ZWFyICUgNCA9PT0gMCAmJiB5ZWFyICUgMTAwICE9PSAwKSB8fCB5ZWFyICUgNDAwID09PSAwO1xuICAgIH1cblxuICAgIHZhciBZRUFSID0gMCxcbiAgICAgICAgTU9OVEggPSAxLFxuICAgICAgICBEQVRFID0gMixcbiAgICAgICAgSE9VUiA9IDMsXG4gICAgICAgIE1JTlVURSA9IDQsXG4gICAgICAgIFNFQ09ORCA9IDUsXG4gICAgICAgIE1JTExJU0VDT05EID0gNixcbiAgICAgICAgV0VFSyA9IDcsXG4gICAgICAgIFdFRUtEQVkgPSA4O1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1knLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB5ID0gdGhpcy55ZWFyKCk7XG4gICAgICAgIHJldHVybiB5IDw9IDk5OTkgPyB6ZXJvRmlsbCh5LCA0KSA6ICcrJyArIHk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1lZJywgMl0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMueWVhcigpICUgMTAwO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydZWVlZJywgNF0sIDAsICd5ZWFyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydZWVlZWScsIDVdLCAwLCAneWVhcicpO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnWVlZWVlZJywgNiwgdHJ1ZV0sIDAsICd5ZWFyJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdZJywgbWF0Y2hTaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1lZJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1lZWVknLCBtYXRjaDF0bzQsIG1hdGNoNCk7XG4gICAgYWRkUmVnZXhUb2tlbignWVlZWVknLCBtYXRjaDF0bzYsIG1hdGNoNik7XG4gICAgYWRkUmVnZXhUb2tlbignWVlZWVlZJywgbWF0Y2gxdG82LCBtYXRjaDYpO1xuXG4gICAgYWRkUGFyc2VUb2tlbihbJ1lZWVlZJywgJ1lZWVlZWSddLCBZRUFSKTtcbiAgICBhZGRQYXJzZVRva2VuKCdZWVlZJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgICAgICBhcnJheVtZRUFSXSA9XG4gICAgICAgICAgICBpbnB1dC5sZW5ndGggPT09IDIgPyBob29rcy5wYXJzZVR3b0RpZ2l0WWVhcihpbnB1dCkgOiB0b0ludChpbnB1dCk7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignWVknLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W1lFQVJdID0gaG9va3MucGFyc2VUd29EaWdpdFllYXIoaW5wdXQpO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ1knLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W1lFQVJdID0gcGFyc2VJbnQoaW5wdXQsIDEwKTtcbiAgICB9KTtcblxuICAgIC8vIEhFTFBFUlNcblxuICAgIGZ1bmN0aW9uIGRheXNJblllYXIoeWVhcikge1xuICAgICAgICByZXR1cm4gaXNMZWFwWWVhcih5ZWFyKSA/IDM2NiA6IDM2NTtcbiAgICB9XG5cbiAgICAvLyBIT09LU1xuXG4gICAgaG9va3MucGFyc2VUd29EaWdpdFllYXIgPSBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIHRvSW50KGlucHV0KSArICh0b0ludChpbnB1dCkgPiA2OCA/IDE5MDAgOiAyMDAwKTtcbiAgICB9O1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgdmFyIGdldFNldFllYXIgPSBtYWtlR2V0U2V0KCdGdWxsWWVhcicsIHRydWUpO1xuXG4gICAgZnVuY3Rpb24gZ2V0SXNMZWFwWWVhcigpIHtcbiAgICAgICAgcmV0dXJuIGlzTGVhcFllYXIodGhpcy55ZWFyKCkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VHZXRTZXQodW5pdCwga2VlcFRpbWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBzZXQkMSh0aGlzLCB1bml0LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHRoaXMsIGtlZXBUaW1lKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldCh0aGlzLCB1bml0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXQobW9tLCB1bml0KSB7XG4gICAgICAgIGlmICghbW9tLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBkID0gbW9tLl9kLFxuICAgICAgICAgICAgaXNVVEMgPSBtb20uX2lzVVRDO1xuXG4gICAgICAgIHN3aXRjaCAodW5pdCkge1xuICAgICAgICAgICAgY2FzZSAnTWlsbGlzZWNvbmRzJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNVVEMgPyBkLmdldFVUQ01pbGxpc2Vjb25kcygpIDogZC5nZXRNaWxsaXNlY29uZHMoKTtcbiAgICAgICAgICAgIGNhc2UgJ1NlY29uZHMnOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc1VUQyA/IGQuZ2V0VVRDU2Vjb25kcygpIDogZC5nZXRTZWNvbmRzKCk7XG4gICAgICAgICAgICBjYXNlICdNaW51dGVzJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNVVEMgPyBkLmdldFVUQ01pbnV0ZXMoKSA6IGQuZ2V0TWludXRlcygpO1xuICAgICAgICAgICAgY2FzZSAnSG91cnMnOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc1VUQyA/IGQuZ2V0VVRDSG91cnMoKSA6IGQuZ2V0SG91cnMoKTtcbiAgICAgICAgICAgIGNhc2UgJ0RhdGUnOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc1VUQyA/IGQuZ2V0VVRDRGF0ZSgpIDogZC5nZXREYXRlKCk7XG4gICAgICAgICAgICBjYXNlICdEYXknOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc1VUQyA/IGQuZ2V0VVRDRGF5KCkgOiBkLmdldERheSgpO1xuICAgICAgICAgICAgY2FzZSAnTW9udGgnOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc1VUQyA/IGQuZ2V0VVRDTW9udGgoKSA6IGQuZ2V0TW9udGgoKTtcbiAgICAgICAgICAgIGNhc2UgJ0Z1bGxZZWFyJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNVVEMgPyBkLmdldFVUQ0Z1bGxZZWFyKCkgOiBkLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBOYU47IC8vIEp1c3QgaW4gY2FzZVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0JDEobW9tLCB1bml0LCB2YWx1ZSkge1xuICAgICAgICB2YXIgZCwgaXNVVEMsIHllYXIsIG1vbnRoLCBkYXRlO1xuXG4gICAgICAgIGlmICghbW9tLmlzVmFsaWQoKSB8fCBpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGQgPSBtb20uX2Q7XG4gICAgICAgIGlzVVRDID0gbW9tLl9pc1VUQztcblxuICAgICAgICBzd2l0Y2ggKHVuaXQpIHtcbiAgICAgICAgICAgIGNhc2UgJ01pbGxpc2Vjb25kcyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZvaWQgKGlzVVRDXG4gICAgICAgICAgICAgICAgICAgID8gZC5zZXRVVENNaWxsaXNlY29uZHModmFsdWUpXG4gICAgICAgICAgICAgICAgICAgIDogZC5zZXRNaWxsaXNlY29uZHModmFsdWUpKTtcbiAgICAgICAgICAgIGNhc2UgJ1NlY29uZHMnOlxuICAgICAgICAgICAgICAgIHJldHVybiB2b2lkIChpc1VUQyA/IGQuc2V0VVRDU2Vjb25kcyh2YWx1ZSkgOiBkLnNldFNlY29uZHModmFsdWUpKTtcbiAgICAgICAgICAgIGNhc2UgJ01pbnV0ZXMnOlxuICAgICAgICAgICAgICAgIHJldHVybiB2b2lkIChpc1VUQyA/IGQuc2V0VVRDTWludXRlcyh2YWx1ZSkgOiBkLnNldE1pbnV0ZXModmFsdWUpKTtcbiAgICAgICAgICAgIGNhc2UgJ0hvdXJzJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdm9pZCAoaXNVVEMgPyBkLnNldFVUQ0hvdXJzKHZhbHVlKSA6IGQuc2V0SG91cnModmFsdWUpKTtcbiAgICAgICAgICAgIGNhc2UgJ0RhdGUnOlxuICAgICAgICAgICAgICAgIHJldHVybiB2b2lkIChpc1VUQyA/IGQuc2V0VVRDRGF0ZSh2YWx1ZSkgOiBkLnNldERhdGUodmFsdWUpKTtcbiAgICAgICAgICAgIC8vIGNhc2UgJ0RheSc6IC8vIE5vdCByZWFsXG4gICAgICAgICAgICAvLyAgICByZXR1cm4gdm9pZCAoaXNVVEMgPyBkLnNldFVUQ0RheSh2YWx1ZSkgOiBkLnNldERheSh2YWx1ZSkpO1xuICAgICAgICAgICAgLy8gY2FzZSAnTW9udGgnOiAvLyBOb3QgdXNlZCBiZWNhdXNlIHdlIG5lZWQgdG8gcGFzcyB0d28gdmFyaWFibGVzXG4gICAgICAgICAgICAvLyAgICAgcmV0dXJuIHZvaWQgKGlzVVRDID8gZC5zZXRVVENNb250aCh2YWx1ZSkgOiBkLnNldE1vbnRoKHZhbHVlKSk7XG4gICAgICAgICAgICBjYXNlICdGdWxsWWVhcic6XG4gICAgICAgICAgICAgICAgYnJlYWs7IC8vIFNlZSBiZWxvdyAuLi5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBKdXN0IGluIGNhc2VcbiAgICAgICAgfVxuXG4gICAgICAgIHllYXIgPSB2YWx1ZTtcbiAgICAgICAgbW9udGggPSBtb20ubW9udGgoKTtcbiAgICAgICAgZGF0ZSA9IG1vbS5kYXRlKCk7XG4gICAgICAgIGRhdGUgPSBkYXRlID09PSAyOSAmJiBtb250aCA9PT0gMSAmJiAhaXNMZWFwWWVhcih5ZWFyKSA/IDI4IDogZGF0ZTtcbiAgICAgICAgdm9pZCAoaXNVVENcbiAgICAgICAgICAgID8gZC5zZXRVVENGdWxsWWVhcih5ZWFyLCBtb250aCwgZGF0ZSlcbiAgICAgICAgICAgIDogZC5zZXRGdWxsWWVhcih5ZWFyLCBtb250aCwgZGF0ZSkpO1xuICAgIH1cblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIHN0cmluZ0dldCh1bml0cykge1xuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24odGhpc1t1bml0c10pKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpc1t1bml0c10oKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzdHJpbmdTZXQodW5pdHMsIHZhbHVlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdW5pdHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZU9iamVjdFVuaXRzKHVuaXRzKTtcbiAgICAgICAgICAgIHZhciBwcmlvcml0aXplZCA9IGdldFByaW9yaXRpemVkVW5pdHModW5pdHMpLFxuICAgICAgICAgICAgICAgIGksXG4gICAgICAgICAgICAgICAgcHJpb3JpdGl6ZWRMZW4gPSBwcmlvcml0aXplZC5sZW5ndGg7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcHJpb3JpdGl6ZWRMZW47IGkrKykge1xuICAgICAgICAgICAgICAgIHRoaXNbcHJpb3JpdGl6ZWRbaV0udW5pdF0odW5pdHNbcHJpb3JpdGl6ZWRbaV0udW5pdF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG4gICAgICAgICAgICBpZiAoaXNGdW5jdGlvbih0aGlzW3VuaXRzXSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpc1t1bml0c10odmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vZChuLCB4KSB7XG4gICAgICAgIHJldHVybiAoKG4gJSB4KSArIHgpICUgeDtcbiAgICB9XG5cbiAgICB2YXIgaW5kZXhPZjtcblxuICAgIGlmIChBcnJheS5wcm90b3R5cGUuaW5kZXhPZikge1xuICAgICAgICBpbmRleE9mID0gQXJyYXkucHJvdG90eXBlLmluZGV4T2Y7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaW5kZXhPZiA9IGZ1bmN0aW9uIChvKSB7XG4gICAgICAgICAgICAvLyBJIGtub3dcbiAgICAgICAgICAgIHZhciBpO1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpc1tpXSA9PT0gbykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGF5c0luTW9udGgoeWVhciwgbW9udGgpIHtcbiAgICAgICAgaWYgKGlzTmFOKHllYXIpIHx8IGlzTmFOKG1vbnRoKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbW9kTW9udGggPSBtb2QobW9udGgsIDEyKTtcbiAgICAgICAgeWVhciArPSAobW9udGggLSBtb2RNb250aCkgLyAxMjtcbiAgICAgICAgcmV0dXJuIG1vZE1vbnRoID09PSAxXG4gICAgICAgICAgICA/IGlzTGVhcFllYXIoeWVhcilcbiAgICAgICAgICAgICAgICA/IDI5XG4gICAgICAgICAgICAgICAgOiAyOFxuICAgICAgICAgICAgOiAzMSAtICgobW9kTW9udGggJSA3KSAlIDIpO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdNJywgWydNTScsIDJdLCAnTW8nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vbnRoKCkgKyAxO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ01NTScsIDAsIDAsIGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm1vbnRoc1Nob3J0KHRoaXMsIGZvcm1hdCk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignTU1NTScsIDAsIDAsIGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm1vbnRocyh0aGlzLCBmb3JtYXQpO1xuICAgIH0pO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignTScsIG1hdGNoMXRvMiwgbWF0Y2gxdG8yTm9MZWFkaW5nWmVybyk7XG4gICAgYWRkUmVnZXhUb2tlbignTU0nLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignTU1NJywgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5tb250aHNTaG9ydFJlZ2V4KGlzU3RyaWN0KTtcbiAgICB9KTtcbiAgICBhZGRSZWdleFRva2VuKCdNTU1NJywgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5tb250aHNSZWdleChpc1N0cmljdCk7XG4gICAgfSk7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsnTScsICdNTSddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W01PTlRIXSA9IHRvSW50KGlucHV0KSAtIDE7XG4gICAgfSk7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsnTU1NJywgJ01NTU0nXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnLCB0b2tlbikge1xuICAgICAgICB2YXIgbW9udGggPSBjb25maWcuX2xvY2FsZS5tb250aHNQYXJzZShpbnB1dCwgdG9rZW4sIGNvbmZpZy5fc3RyaWN0KTtcbiAgICAgICAgLy8gaWYgd2UgZGlkbid0IGZpbmQgYSBtb250aCBuYW1lLCBtYXJrIHRoZSBkYXRlIGFzIGludmFsaWQuXG4gICAgICAgIGlmIChtb250aCAhPSBudWxsKSB7XG4gICAgICAgICAgICBhcnJheVtNT05USF0gPSBtb250aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmludmFsaWRNb250aCA9IGlucHV0O1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBMT0NBTEVTXG5cbiAgICB2YXIgZGVmYXVsdExvY2FsZU1vbnRocyA9XG4gICAgICAgICAgICAnSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICBkZWZhdWx0TG9jYWxlTW9udGhzU2hvcnQgPVxuICAgICAgICAgICAgJ0phbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjJy5zcGxpdCgnXycpLFxuICAgICAgICBNT05USFNfSU5fRk9STUFUID0gL0Rbb0RdPyhcXFtbXlxcW1xcXV0qXFxdfFxccykrTU1NTT8vLFxuICAgICAgICBkZWZhdWx0TW9udGhzU2hvcnRSZWdleCA9IG1hdGNoV29yZCxcbiAgICAgICAgZGVmYXVsdE1vbnRoc1JlZ2V4ID0gbWF0Y2hXb3JkO1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlTW9udGhzKG0sIGZvcm1hdCkge1xuICAgICAgICBpZiAoIW0pIHtcbiAgICAgICAgICAgIHJldHVybiBpc0FycmF5KHRoaXMuX21vbnRocylcbiAgICAgICAgICAgICAgICA/IHRoaXMuX21vbnRoc1xuICAgICAgICAgICAgICAgIDogdGhpcy5fbW9udGhzWydzdGFuZGFsb25lJ107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzQXJyYXkodGhpcy5fbW9udGhzKVxuICAgICAgICAgICAgPyB0aGlzLl9tb250aHNbbS5tb250aCgpXVxuICAgICAgICAgICAgOiB0aGlzLl9tb250aHNbXG4gICAgICAgICAgICAgICAgICAodGhpcy5fbW9udGhzLmlzRm9ybWF0IHx8IE1PTlRIU19JTl9GT1JNQVQpLnRlc3QoZm9ybWF0KVxuICAgICAgICAgICAgICAgICAgICAgID8gJ2Zvcm1hdCdcbiAgICAgICAgICAgICAgICAgICAgICA6ICdzdGFuZGFsb25lJ1xuICAgICAgICAgICAgICBdW20ubW9udGgoKV07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlTW9udGhzU2hvcnQobSwgZm9ybWF0KSB7XG4gICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgcmV0dXJuIGlzQXJyYXkodGhpcy5fbW9udGhzU2hvcnQpXG4gICAgICAgICAgICAgICAgPyB0aGlzLl9tb250aHNTaG9ydFxuICAgICAgICAgICAgICAgIDogdGhpcy5fbW9udGhzU2hvcnRbJ3N0YW5kYWxvbmUnXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNBcnJheSh0aGlzLl9tb250aHNTaG9ydClcbiAgICAgICAgICAgID8gdGhpcy5fbW9udGhzU2hvcnRbbS5tb250aCgpXVxuICAgICAgICAgICAgOiB0aGlzLl9tb250aHNTaG9ydFtcbiAgICAgICAgICAgICAgICAgIE1PTlRIU19JTl9GT1JNQVQudGVzdChmb3JtYXQpID8gJ2Zvcm1hdCcgOiAnc3RhbmRhbG9uZSdcbiAgICAgICAgICAgICAgXVttLm1vbnRoKCldO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhbmRsZVN0cmljdFBhcnNlKG1vbnRoTmFtZSwgZm9ybWF0LCBzdHJpY3QpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBpaSxcbiAgICAgICAgICAgIG1vbSxcbiAgICAgICAgICAgIGxsYyA9IG1vbnRoTmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAoIXRoaXMuX21vbnRoc1BhcnNlKSB7XG4gICAgICAgICAgICAvLyB0aGlzIGlzIG5vdCB1c2VkXG4gICAgICAgICAgICB0aGlzLl9tb250aHNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fbG9uZ01vbnRoc1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9zaG9ydE1vbnRoc1BhcnNlID0gW107XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7ICsraSkge1xuICAgICAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgaV0pO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3J0TW9udGhzUGFyc2VbaV0gPSB0aGlzLm1vbnRoc1Nob3J0KFxuICAgICAgICAgICAgICAgICAgICBtb20sXG4gICAgICAgICAgICAgICAgICAgICcnXG4gICAgICAgICAgICAgICAgKS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvbmdNb250aHNQYXJzZVtpXSA9IHRoaXMubW9udGhzKG1vbSwgJycpLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RyaWN0KSB7XG4gICAgICAgICAgICBpZiAoZm9ybWF0ID09PSAnTU1NJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0TW9udGhzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbG9uZ01vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoZm9ybWF0ID09PSAnTU1NJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0TW9udGhzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX2xvbmdNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9sb25nTW9udGhzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0TW9udGhzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZU1vbnRoc1BhcnNlKG1vbnRoTmFtZSwgZm9ybWF0LCBzdHJpY3QpIHtcbiAgICAgICAgdmFyIGksIG1vbSwgcmVnZXg7XG5cbiAgICAgICAgaWYgKHRoaXMuX21vbnRoc1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVTdHJpY3RQYXJzZS5jYWxsKHRoaXMsIG1vbnRoTmFtZSwgZm9ybWF0LCBzdHJpY3QpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLl9tb250aHNQYXJzZSkge1xuICAgICAgICAgICAgdGhpcy5fbW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX2xvbmdNb250aHNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fc2hvcnRNb250aHNQYXJzZSA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVE9ETzogYWRkIHNvcnRpbmdcbiAgICAgICAgLy8gU29ydGluZyBtYWtlcyBzdXJlIGlmIG9uZSBtb250aCAob3IgYWJicikgaXMgYSBwcmVmaXggb2YgYW5vdGhlclxuICAgICAgICAvLyBzZWUgc29ydGluZyBpbiBjb21wdXRlTW9udGhzUGFyc2VcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDEyOyBpKyspIHtcbiAgICAgICAgICAgIC8vIG1ha2UgdGhlIHJlZ2V4IGlmIHdlIGRvbid0IGhhdmUgaXQgYWxyZWFkeVxuICAgICAgICAgICAgbW9tID0gY3JlYXRlVVRDKFsyMDAwLCBpXSk7XG4gICAgICAgICAgICBpZiAoc3RyaWN0ICYmICF0aGlzLl9sb25nTW9udGhzUGFyc2VbaV0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb25nTW9udGhzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgICAgICAgICAnXicgKyB0aGlzLm1vbnRocyhtb20sICcnKS5yZXBsYWNlKCcuJywgJycpICsgJyQnLFxuICAgICAgICAgICAgICAgICAgICAnaSdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3J0TW9udGhzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgICAgICAgICAnXicgKyB0aGlzLm1vbnRoc1Nob3J0KG1vbSwgJycpLnJlcGxhY2UoJy4nLCAnJykgKyAnJCcsXG4gICAgICAgICAgICAgICAgICAgICdpJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXN0cmljdCAmJiAhdGhpcy5fbW9udGhzUGFyc2VbaV0pIHtcbiAgICAgICAgICAgICAgICByZWdleCA9XG4gICAgICAgICAgICAgICAgICAgICdeJyArIHRoaXMubW9udGhzKG1vbSwgJycpICsgJ3xeJyArIHRoaXMubW9udGhzU2hvcnQobW9tLCAnJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbW9udGhzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKHJlZ2V4LnJlcGxhY2UoJy4nLCAnJyksICdpJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyB0ZXN0IHRoZSByZWdleFxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHN0cmljdCAmJlxuICAgICAgICAgICAgICAgIGZvcm1hdCA9PT0gJ01NTU0nICYmXG4gICAgICAgICAgICAgICAgdGhpcy5fbG9uZ01vbnRoc1BhcnNlW2ldLnRlc3QobW9udGhOYW1lKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIHN0cmljdCAmJlxuICAgICAgICAgICAgICAgIGZvcm1hdCA9PT0gJ01NTScgJiZcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG9ydE1vbnRoc1BhcnNlW2ldLnRlc3QobW9udGhOYW1lKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJpY3QgJiYgdGhpcy5fbW9udGhzUGFyc2VbaV0udGVzdChtb250aE5hbWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBzZXRNb250aChtb20sIHZhbHVlKSB7XG4gICAgICAgIGlmICghbW9tLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgLy8gTm8gb3BcbiAgICAgICAgICAgIHJldHVybiBtb207XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgaWYgKC9eXFxkKyQvLnRlc3QodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB0b0ludCh2YWx1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gbW9tLmxvY2FsZURhdGEoKS5tb250aHNQYXJzZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgLy8gVE9ETzogQW5vdGhlciBzaWxlbnQgZmFpbHVyZT9cbiAgICAgICAgICAgICAgICBpZiAoIWlzTnVtYmVyKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9tO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBtb250aCA9IHZhbHVlLFxuICAgICAgICAgICAgZGF0ZSA9IG1vbS5kYXRlKCk7XG5cbiAgICAgICAgZGF0ZSA9IGRhdGUgPCAyOSA/IGRhdGUgOiBNYXRoLm1pbihkYXRlLCBkYXlzSW5Nb250aChtb20ueWVhcigpLCBtb250aCkpO1xuICAgICAgICB2b2lkIChtb20uX2lzVVRDXG4gICAgICAgICAgICA/IG1vbS5fZC5zZXRVVENNb250aChtb250aCwgZGF0ZSlcbiAgICAgICAgICAgIDogbW9tLl9kLnNldE1vbnRoKG1vbnRoLCBkYXRlKSk7XG4gICAgICAgIHJldHVybiBtb207XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0TW9udGgodmFsdWUpIHtcbiAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgIHNldE1vbnRoKHRoaXMsIHZhbHVlKTtcbiAgICAgICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzLCB0cnVlKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGdldCh0aGlzLCAnTW9udGgnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldERheXNJbk1vbnRoKCkge1xuICAgICAgICByZXR1cm4gZGF5c0luTW9udGgodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW9udGhzU2hvcnRSZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAodGhpcy5fbW9udGhzUGFyc2VFeGFjdCkge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfbW9udGhzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIGNvbXB1dGVNb250aHNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNTaG9ydFJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfbW9udGhzU2hvcnRSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbW9udGhzU2hvcnRSZWdleCA9IGRlZmF1bHRNb250aHNTaG9ydFJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXggJiYgaXNTdHJpY3RcbiAgICAgICAgICAgICAgICA/IHRoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXhcbiAgICAgICAgICAgICAgICA6IHRoaXMuX21vbnRoc1Nob3J0UmVnZXg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb250aHNSZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAodGhpcy5fbW9udGhzUGFyc2VFeGFjdCkge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfbW9udGhzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIGNvbXB1dGVNb250aHNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1N0cmljdFJlZ2V4O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19tb250aHNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbW9udGhzUmVnZXggPSBkZWZhdWx0TW9udGhzUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU3RyaWN0UmVnZXggJiYgaXNTdHJpY3RcbiAgICAgICAgICAgICAgICA/IHRoaXMuX21vbnRoc1N0cmljdFJlZ2V4XG4gICAgICAgICAgICAgICAgOiB0aGlzLl9tb250aHNSZWdleDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXB1dGVNb250aHNQYXJzZSgpIHtcbiAgICAgICAgZnVuY3Rpb24gY21wTGVuUmV2KGEsIGIpIHtcbiAgICAgICAgICAgIHJldHVybiBiLmxlbmd0aCAtIGEubGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNob3J0UGllY2VzID0gW10sXG4gICAgICAgICAgICBsb25nUGllY2VzID0gW10sXG4gICAgICAgICAgICBtaXhlZFBpZWNlcyA9IFtdLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIG1vbSxcbiAgICAgICAgICAgIHNob3J0UCxcbiAgICAgICAgICAgIGxvbmdQO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgICAgICAgLy8gbWFrZSB0aGUgcmVnZXggaWYgd2UgZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5XG4gICAgICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIGldKTtcbiAgICAgICAgICAgIHNob3J0UCA9IHJlZ2V4RXNjYXBlKHRoaXMubW9udGhzU2hvcnQobW9tLCAnJykpO1xuICAgICAgICAgICAgbG9uZ1AgPSByZWdleEVzY2FwZSh0aGlzLm1vbnRocyhtb20sICcnKSk7XG4gICAgICAgICAgICBzaG9ydFBpZWNlcy5wdXNoKHNob3J0UCk7XG4gICAgICAgICAgICBsb25nUGllY2VzLnB1c2gobG9uZ1ApO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChsb25nUCk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKHNob3J0UCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU29ydGluZyBtYWtlcyBzdXJlIGlmIG9uZSBtb250aCAob3IgYWJicikgaXMgYSBwcmVmaXggb2YgYW5vdGhlciBpdFxuICAgICAgICAvLyB3aWxsIG1hdGNoIHRoZSBsb25nZXIgcGllY2UuXG4gICAgICAgIHNob3J0UGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgbG9uZ1BpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIG1peGVkUGllY2VzLnNvcnQoY21wTGVuUmV2KTtcblxuICAgICAgICB0aGlzLl9tb250aHNSZWdleCA9IG5ldyBSZWdFeHAoJ14oJyArIG1peGVkUGllY2VzLmpvaW4oJ3wnKSArICcpJywgJ2knKTtcbiAgICAgICAgdGhpcy5fbW9udGhzU2hvcnRSZWdleCA9IHRoaXMuX21vbnRoc1JlZ2V4O1xuICAgICAgICB0aGlzLl9tb250aHNTdHJpY3RSZWdleCA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAnXignICsgbG9uZ1BpZWNlcy5qb2luKCd8JykgKyAnKScsXG4gICAgICAgICAgICAnaSdcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleCA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAnXignICsgc2hvcnRQaWVjZXMuam9pbignfCcpICsgJyknLFxuICAgICAgICAgICAgJ2knXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlRGF0ZSh5LCBtLCBkLCBoLCBNLCBzLCBtcykge1xuICAgICAgICAvLyBjYW4ndCBqdXN0IGFwcGx5KCkgdG8gY3JlYXRlIGEgZGF0ZTpcbiAgICAgICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xLzE4MTM0OFxuICAgICAgICB2YXIgZGF0ZTtcbiAgICAgICAgLy8gdGhlIGRhdGUgY29uc3RydWN0b3IgcmVtYXBzIHllYXJzIDAtOTkgdG8gMTkwMC0xOTk5XG4gICAgICAgIGlmICh5IDwgMTAwICYmIHkgPj0gMCkge1xuICAgICAgICAgICAgLy8gcHJlc2VydmUgbGVhcCB5ZWFycyB1c2luZyBhIGZ1bGwgNDAwIHllYXIgY3ljbGUsIHRoZW4gcmVzZXRcbiAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZSh5ICsgNDAwLCBtLCBkLCBoLCBNLCBzLCBtcyk7XG4gICAgICAgICAgICBpZiAoaXNGaW5pdGUoZGF0ZS5nZXRGdWxsWWVhcigpKSkge1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0RnVsbFllYXIoeSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkYXRlID0gbmV3IERhdGUoeSwgbSwgZCwgaCwgTSwgcywgbXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlVVRDRGF0ZSh5KSB7XG4gICAgICAgIHZhciBkYXRlLCBhcmdzO1xuICAgICAgICAvLyB0aGUgRGF0ZS5VVEMgZnVuY3Rpb24gcmVtYXBzIHllYXJzIDAtOTkgdG8gMTkwMC0xOTk5XG4gICAgICAgIGlmICh5IDwgMTAwICYmIHkgPj0gMCkge1xuICAgICAgICAgICAgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAvLyBwcmVzZXJ2ZSBsZWFwIHllYXJzIHVzaW5nIGEgZnVsbCA0MDAgeWVhciBjeWNsZSwgdGhlbiByZXNldFxuICAgICAgICAgICAgYXJnc1swXSA9IHkgKyA0MDA7XG4gICAgICAgICAgICBkYXRlID0gbmV3IERhdGUoRGF0ZS5VVEMuYXBwbHkobnVsbCwgYXJncykpO1xuICAgICAgICAgICAgaWYgKGlzRmluaXRlKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSkpIHtcbiAgICAgICAgICAgICAgICBkYXRlLnNldFVUQ0Z1bGxZZWFyKHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKERhdGUuVVRDLmFwcGx5KG51bGwsIGFyZ3VtZW50cykpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfVxuXG4gICAgLy8gc3RhcnQtb2YtZmlyc3Qtd2VlayAtIHN0YXJ0LW9mLXllYXJcbiAgICBmdW5jdGlvbiBmaXJzdFdlZWtPZmZzZXQoeWVhciwgZG93LCBkb3kpIHtcbiAgICAgICAgdmFyIC8vIGZpcnN0LXdlZWsgZGF5IC0tIHdoaWNoIGphbnVhcnkgaXMgYWx3YXlzIGluIHRoZSBmaXJzdCB3ZWVrICg0IGZvciBpc28sIDEgZm9yIG90aGVyKVxuICAgICAgICAgICAgZndkID0gNyArIGRvdyAtIGRveSxcbiAgICAgICAgICAgIC8vIGZpcnN0LXdlZWsgZGF5IGxvY2FsIHdlZWtkYXkgLS0gd2hpY2ggbG9jYWwgd2Vla2RheSBpcyBmd2RcbiAgICAgICAgICAgIGZ3ZGx3ID0gKDcgKyBjcmVhdGVVVENEYXRlKHllYXIsIDAsIGZ3ZCkuZ2V0VVRDRGF5KCkgLSBkb3cpICUgNztcblxuICAgICAgICByZXR1cm4gLWZ3ZGx3ICsgZndkIC0gMTtcbiAgICB9XG5cbiAgICAvLyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fd2Vla19kYXRlI0NhbGN1bGF0aW5nX2FfZGF0ZV9naXZlbl90aGVfeWVhci4yQ193ZWVrX251bWJlcl9hbmRfd2Vla2RheVxuICAgIGZ1bmN0aW9uIGRheU9mWWVhckZyb21XZWVrcyh5ZWFyLCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSkge1xuICAgICAgICB2YXIgbG9jYWxXZWVrZGF5ID0gKDcgKyB3ZWVrZGF5IC0gZG93KSAlIDcsXG4gICAgICAgICAgICB3ZWVrT2Zmc2V0ID0gZmlyc3RXZWVrT2Zmc2V0KHllYXIsIGRvdywgZG95KSxcbiAgICAgICAgICAgIGRheU9mWWVhciA9IDEgKyA3ICogKHdlZWsgLSAxKSArIGxvY2FsV2Vla2RheSArIHdlZWtPZmZzZXQsXG4gICAgICAgICAgICByZXNZZWFyLFxuICAgICAgICAgICAgcmVzRGF5T2ZZZWFyO1xuXG4gICAgICAgIGlmIChkYXlPZlllYXIgPD0gMCkge1xuICAgICAgICAgICAgcmVzWWVhciA9IHllYXIgLSAxO1xuICAgICAgICAgICAgcmVzRGF5T2ZZZWFyID0gZGF5c0luWWVhcihyZXNZZWFyKSArIGRheU9mWWVhcjtcbiAgICAgICAgfSBlbHNlIGlmIChkYXlPZlllYXIgPiBkYXlzSW5ZZWFyKHllYXIpKSB7XG4gICAgICAgICAgICByZXNZZWFyID0geWVhciArIDE7XG4gICAgICAgICAgICByZXNEYXlPZlllYXIgPSBkYXlPZlllYXIgLSBkYXlzSW5ZZWFyKHllYXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzWWVhciA9IHllYXI7XG4gICAgICAgICAgICByZXNEYXlPZlllYXIgPSBkYXlPZlllYXI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeWVhcjogcmVzWWVhcixcbiAgICAgICAgICAgIGRheU9mWWVhcjogcmVzRGF5T2ZZZWFyLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdlZWtPZlllYXIobW9tLCBkb3csIGRveSkge1xuICAgICAgICB2YXIgd2Vla09mZnNldCA9IGZpcnN0V2Vla09mZnNldChtb20ueWVhcigpLCBkb3csIGRveSksXG4gICAgICAgICAgICB3ZWVrID0gTWF0aC5mbG9vcigobW9tLmRheU9mWWVhcigpIC0gd2Vla09mZnNldCAtIDEpIC8gNykgKyAxLFxuICAgICAgICAgICAgcmVzV2VlayxcbiAgICAgICAgICAgIHJlc1llYXI7XG5cbiAgICAgICAgaWYgKHdlZWsgPCAxKSB7XG4gICAgICAgICAgICByZXNZZWFyID0gbW9tLnllYXIoKSAtIDE7XG4gICAgICAgICAgICByZXNXZWVrID0gd2VlayArIHdlZWtzSW5ZZWFyKHJlc1llYXIsIGRvdywgZG95KTtcbiAgICAgICAgfSBlbHNlIGlmICh3ZWVrID4gd2Vla3NJblllYXIobW9tLnllYXIoKSwgZG93LCBkb3kpKSB7XG4gICAgICAgICAgICByZXNXZWVrID0gd2VlayAtIHdlZWtzSW5ZZWFyKG1vbS55ZWFyKCksIGRvdywgZG95KTtcbiAgICAgICAgICAgIHJlc1llYXIgPSBtb20ueWVhcigpICsgMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc1llYXIgPSBtb20ueWVhcigpO1xuICAgICAgICAgICAgcmVzV2VlayA9IHdlZWs7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgd2VlazogcmVzV2VlayxcbiAgICAgICAgICAgIHllYXI6IHJlc1llYXIsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd2Vla3NJblllYXIoeWVhciwgZG93LCBkb3kpIHtcbiAgICAgICAgdmFyIHdlZWtPZmZzZXQgPSBmaXJzdFdlZWtPZmZzZXQoeWVhciwgZG93LCBkb3kpLFxuICAgICAgICAgICAgd2Vla09mZnNldE5leHQgPSBmaXJzdFdlZWtPZmZzZXQoeWVhciArIDEsIGRvdywgZG95KTtcbiAgICAgICAgcmV0dXJuIChkYXlzSW5ZZWFyKHllYXIpIC0gd2Vla09mZnNldCArIHdlZWtPZmZzZXROZXh0KSAvIDc7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ3cnLCBbJ3d3JywgMl0sICd3bycsICd3ZWVrJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ1cnLCBbJ1dXJywgMl0sICdXbycsICdpc29XZWVrJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCd3JywgbWF0Y2gxdG8yLCBtYXRjaDF0bzJOb0xlYWRpbmdaZXJvKTtcbiAgICBhZGRSZWdleFRva2VuKCd3dycsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdXJywgbWF0Y2gxdG8yLCBtYXRjaDF0bzJOb0xlYWRpbmdaZXJvKTtcbiAgICBhZGRSZWdleFRva2VuKCdXVycsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcblxuICAgIGFkZFdlZWtQYXJzZVRva2VuKFxuICAgICAgICBbJ3cnLCAnd3cnLCAnVycsICdXVyddLFxuICAgICAgICBmdW5jdGlvbiAoaW5wdXQsIHdlZWssIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgICAgIHdlZWtbdG9rZW4uc3Vic3RyKDAsIDEpXSA9IHRvSW50KGlucHV0KTtcbiAgICAgICAgfVxuICAgICk7XG5cbiAgICAvLyBIRUxQRVJTXG5cbiAgICAvLyBMT0NBTEVTXG5cbiAgICBmdW5jdGlvbiBsb2NhbGVXZWVrKG1vbSkge1xuICAgICAgICByZXR1cm4gd2Vla09mWWVhcihtb20sIHRoaXMuX3dlZWsuZG93LCB0aGlzLl93ZWVrLmRveSkud2VlaztcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdExvY2FsZVdlZWsgPSB7XG4gICAgICAgIGRvdzogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgIGRveTogNiwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVGaXJzdERheU9mV2VlaygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWsuZG93O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZUZpcnN0RGF5T2ZZZWFyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fd2Vlay5kb3k7XG4gICAgfVxuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0U2V0V2VlayhpbnB1dCkge1xuICAgICAgICB2YXIgd2VlayA9IHRoaXMubG9jYWxlRGF0YSgpLndlZWsodGhpcyk7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PSBudWxsID8gd2VlayA6IHRoaXMuYWRkKChpbnB1dCAtIHdlZWspICogNywgJ2QnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRJU09XZWVrKGlucHV0KSB7XG4gICAgICAgIHZhciB3ZWVrID0gd2Vla09mWWVhcih0aGlzLCAxLCA0KS53ZWVrO1xuICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbCA/IHdlZWsgOiB0aGlzLmFkZCgoaW5wdXQgLSB3ZWVrKSAqIDcsICdkJyk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2QnLCAwLCAnZG8nLCAnZGF5Jyk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignZGQnLCAwLCAwLCBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS53ZWVrZGF5c01pbih0aGlzLCBmb3JtYXQpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2RkZCcsIDAsIDAsIGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzU2hvcnQodGhpcywgZm9ybWF0KTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdkZGRkJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXModGhpcywgZm9ybWF0KTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdlJywgMCwgMCwgJ3dlZWtkYXknKTtcbiAgICBhZGRGb3JtYXRUb2tlbignRScsIDAsIDAsICdpc29XZWVrZGF5Jyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdkJywgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdlJywgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdFJywgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdkZCcsIGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUud2Vla2RheXNNaW5SZWdleChpc1N0cmljdCk7XG4gICAgfSk7XG4gICAgYWRkUmVnZXhUb2tlbignZGRkJywgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS53ZWVrZGF5c1Nob3J0UmVnZXgoaXNTdHJpY3QpO1xuICAgIH0pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2RkZGQnLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLndlZWtkYXlzUmVnZXgoaXNTdHJpY3QpO1xuICAgIH0pO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oWydkZCcsICdkZGQnLCAnZGRkZCddLCBmdW5jdGlvbiAoaW5wdXQsIHdlZWssIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgdmFyIHdlZWtkYXkgPSBjb25maWcuX2xvY2FsZS53ZWVrZGF5c1BhcnNlKGlucHV0LCB0b2tlbiwgY29uZmlnLl9zdHJpY3QpO1xuICAgICAgICAvLyBpZiB3ZSBkaWRuJ3QgZ2V0IGEgd2Vla2RheSBuYW1lLCBtYXJrIHRoZSBkYXRlIGFzIGludmFsaWRcbiAgICAgICAgaWYgKHdlZWtkYXkgIT0gbnVsbCkge1xuICAgICAgICAgICAgd2Vlay5kID0gd2Vla2RheTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmludmFsaWRXZWVrZGF5ID0gaW5wdXQ7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIGFkZFdlZWtQYXJzZVRva2VuKFsnZCcsICdlJywgJ0UnXSwgZnVuY3Rpb24gKGlucHV0LCB3ZWVrLCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHdlZWtbdG9rZW5dID0gdG9JbnQoaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gSEVMUEVSU1xuXG4gICAgZnVuY3Rpb24gcGFyc2VXZWVrZGF5KGlucHV0LCBsb2NhbGUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNOYU4oaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQoaW5wdXQsIDEwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlucHV0ID0gbG9jYWxlLndlZWtkYXlzUGFyc2UoaW5wdXQpO1xuICAgICAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VJc29XZWVrZGF5KGlucHV0LCBsb2NhbGUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbGUud2Vla2RheXNQYXJzZShpbnB1dCkgJSA3IHx8IDc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzTmFOKGlucHV0KSA/IG51bGwgOiBpbnB1dDtcbiAgICB9XG5cbiAgICAvLyBMT0NBTEVTXG4gICAgZnVuY3Rpb24gc2hpZnRXZWVrZGF5cyh3cywgbikge1xuICAgICAgICByZXR1cm4gd3Muc2xpY2UobiwgNykuY29uY2F0KHdzLnNsaWNlKDAsIG4pKTtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdExvY2FsZVdlZWtkYXlzID1cbiAgICAgICAgICAgICdTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheScuc3BsaXQoJ18nKSxcbiAgICAgICAgZGVmYXVsdExvY2FsZVdlZWtkYXlzU2hvcnQgPSAnU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Jy5zcGxpdCgnXycpLFxuICAgICAgICBkZWZhdWx0TG9jYWxlV2Vla2RheXNNaW4gPSAnU3VfTW9fVHVfV2VfVGhfRnJfU2EnLnNwbGl0KCdfJyksXG4gICAgICAgIGRlZmF1bHRXZWVrZGF5c1JlZ2V4ID0gbWF0Y2hXb3JkLFxuICAgICAgICBkZWZhdWx0V2Vla2RheXNTaG9ydFJlZ2V4ID0gbWF0Y2hXb3JkLFxuICAgICAgICBkZWZhdWx0V2Vla2RheXNNaW5SZWdleCA9IG1hdGNoV29yZDtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZVdlZWtkYXlzKG0sIGZvcm1hdCkge1xuICAgICAgICB2YXIgd2Vla2RheXMgPSBpc0FycmF5KHRoaXMuX3dlZWtkYXlzKVxuICAgICAgICAgICAgPyB0aGlzLl93ZWVrZGF5c1xuICAgICAgICAgICAgOiB0aGlzLl93ZWVrZGF5c1tcbiAgICAgICAgICAgICAgICAgIG0gJiYgbSAhPT0gdHJ1ZSAmJiB0aGlzLl93ZWVrZGF5cy5pc0Zvcm1hdC50ZXN0KGZvcm1hdClcbiAgICAgICAgICAgICAgICAgICAgICA/ICdmb3JtYXQnXG4gICAgICAgICAgICAgICAgICAgICAgOiAnc3RhbmRhbG9uZSdcbiAgICAgICAgICAgICAgXTtcbiAgICAgICAgcmV0dXJuIG0gPT09IHRydWVcbiAgICAgICAgICAgID8gc2hpZnRXZWVrZGF5cyh3ZWVrZGF5cywgdGhpcy5fd2Vlay5kb3cpXG4gICAgICAgICAgICA6IG1cbiAgICAgICAgICAgICAgPyB3ZWVrZGF5c1ttLmRheSgpXVxuICAgICAgICAgICAgICA6IHdlZWtkYXlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZVdlZWtkYXlzU2hvcnQobSkge1xuICAgICAgICByZXR1cm4gbSA9PT0gdHJ1ZVxuICAgICAgICAgICAgPyBzaGlmdFdlZWtkYXlzKHRoaXMuX3dlZWtkYXlzU2hvcnQsIHRoaXMuX3dlZWsuZG93KVxuICAgICAgICAgICAgOiBtXG4gICAgICAgICAgICAgID8gdGhpcy5fd2Vla2RheXNTaG9ydFttLmRheSgpXVxuICAgICAgICAgICAgICA6IHRoaXMuX3dlZWtkYXlzU2hvcnQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlV2Vla2RheXNNaW4obSkge1xuICAgICAgICByZXR1cm4gbSA9PT0gdHJ1ZVxuICAgICAgICAgICAgPyBzaGlmdFdlZWtkYXlzKHRoaXMuX3dlZWtkYXlzTWluLCB0aGlzLl93ZWVrLmRvdylcbiAgICAgICAgICAgIDogbVxuICAgICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzTWluW20uZGF5KCldXG4gICAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNNaW47XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFuZGxlU3RyaWN0UGFyc2UkMSh3ZWVrZGF5TmFtZSwgZm9ybWF0LCBzdHJpY3QpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBpaSxcbiAgICAgICAgICAgIG1vbSxcbiAgICAgICAgICAgIGxsYyA9IHdlZWtkYXlOYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmICghdGhpcy5fd2Vla2RheXNQYXJzZSkge1xuICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9taW5XZWVrZGF5c1BhcnNlID0gW107XG5cbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCA3OyArK2kpIHtcbiAgICAgICAgICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIDFdKS5kYXkoaSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWluV2Vla2RheXNQYXJzZVtpXSA9IHRoaXMud2Vla2RheXNNaW4oXG4gICAgICAgICAgICAgICAgICAgIG1vbSxcbiAgICAgICAgICAgICAgICAgICAgJydcbiAgICAgICAgICAgICAgICApLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlW2ldID0gdGhpcy53ZWVrZGF5c1Nob3J0KFxuICAgICAgICAgICAgICAgICAgICBtb20sXG4gICAgICAgICAgICAgICAgICAgICcnXG4gICAgICAgICAgICAgICAgKS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzUGFyc2VbaV0gPSB0aGlzLndlZWtkYXlzKG1vbSwgJycpLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RyaWN0KSB7XG4gICAgICAgICAgICBpZiAoZm9ybWF0ID09PSAnZGRkZCcpIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PT0gJ2RkZCcpIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGZvcm1hdCA9PT0gJ2RkZGQnKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PT0gJ2RkZCcpIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVXZWVrZGF5c1BhcnNlKHdlZWtkYXlOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSwgbW9tLCByZWdleDtcblxuICAgICAgICBpZiAodGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlU3RyaWN0UGFyc2UkMS5jYWxsKHRoaXMsIHdlZWtkYXlOYW1lLCBmb3JtYXQsIHN0cmljdCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuX3dlZWtkYXlzUGFyc2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX21pbldlZWtkYXlzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2UgPSBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHtcbiAgICAgICAgICAgIC8vIG1ha2UgdGhlIHJlZ2V4IGlmIHdlIGRvbid0IGhhdmUgaXQgYWxyZWFkeVxuXG4gICAgICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIDFdKS5kYXkoaSk7XG4gICAgICAgICAgICBpZiAoc3RyaWN0ICYmICF0aGlzLl9mdWxsV2Vla2RheXNQYXJzZVtpXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW2ldID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICAgICAgICAgJ14nICsgdGhpcy53ZWVrZGF5cyhtb20sICcnKS5yZXBsYWNlKCcuJywgJ1xcXFwuPycpICsgJyQnLFxuICAgICAgICAgICAgICAgICAgICAnaSdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAgICAgICAgICdeJyArIHRoaXMud2Vla2RheXNTaG9ydChtb20sICcnKS5yZXBsYWNlKCcuJywgJ1xcXFwuPycpICsgJyQnLFxuICAgICAgICAgICAgICAgICAgICAnaSdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuX21pbldlZWtkYXlzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgICAgICAgICAnXicgKyB0aGlzLndlZWtkYXlzTWluKG1vbSwgJycpLnJlcGxhY2UoJy4nLCAnXFxcXC4/JykgKyAnJCcsXG4gICAgICAgICAgICAgICAgICAgICdpJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMuX3dlZWtkYXlzUGFyc2VbaV0pIHtcbiAgICAgICAgICAgICAgICByZWdleCA9XG4gICAgICAgICAgICAgICAgICAgICdeJyArXG4gICAgICAgICAgICAgICAgICAgIHRoaXMud2Vla2RheXMobW9tLCAnJykgK1xuICAgICAgICAgICAgICAgICAgICAnfF4nICtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53ZWVrZGF5c1Nob3J0KG1vbSwgJycpICtcbiAgICAgICAgICAgICAgICAgICAgJ3xeJyArXG4gICAgICAgICAgICAgICAgICAgIHRoaXMud2Vla2RheXNNaW4obW9tLCAnJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNQYXJzZVtpXSA9IG5ldyBSZWdFeHAocmVnZXgucmVwbGFjZSgnLicsICcnKSwgJ2knKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHRlc3QgdGhlIHJlZ2V4XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgc3RyaWN0ICYmXG4gICAgICAgICAgICAgICAgZm9ybWF0ID09PSAnZGRkZCcgJiZcbiAgICAgICAgICAgICAgICB0aGlzLl9mdWxsV2Vla2RheXNQYXJzZVtpXS50ZXN0KHdlZWtkYXlOYW1lKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIHN0cmljdCAmJlxuICAgICAgICAgICAgICAgIGZvcm1hdCA9PT0gJ2RkZCcgJiZcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2VbaV0udGVzdCh3ZWVrZGF5TmFtZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICBzdHJpY3QgJiZcbiAgICAgICAgICAgICAgICBmb3JtYXQgPT09ICdkZCcgJiZcbiAgICAgICAgICAgICAgICB0aGlzLl9taW5XZWVrZGF5c1BhcnNlW2ldLnRlc3Qod2Vla2RheU5hbWUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cmljdCAmJiB0aGlzLl93ZWVrZGF5c1BhcnNlW2ldLnRlc3Qod2Vla2RheU5hbWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRTZXREYXlPZldlZWsoaW5wdXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0ICE9IG51bGwgPyB0aGlzIDogTmFOO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGRheSA9IGdldCh0aGlzLCAnRGF5Jyk7XG4gICAgICAgIGlmIChpbnB1dCAhPSBudWxsKSB7XG4gICAgICAgICAgICBpbnB1dCA9IHBhcnNlV2Vla2RheShpbnB1dCwgdGhpcy5sb2NhbGVEYXRhKCkpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWRkKGlucHV0IC0gZGF5LCAnZCcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGRheTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldExvY2FsZURheU9mV2VlayhpbnB1dCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQgIT0gbnVsbCA/IHRoaXMgOiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHdlZWtkYXkgPSAodGhpcy5kYXkoKSArIDcgLSB0aGlzLmxvY2FsZURhdGEoKS5fd2Vlay5kb3cpICUgNztcbiAgICAgICAgcmV0dXJuIGlucHV0ID09IG51bGwgPyB3ZWVrZGF5IDogdGhpcy5hZGQoaW5wdXQgLSB3ZWVrZGF5LCAnZCcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldElTT0RheU9mV2VlayhpbnB1dCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQgIT0gbnVsbCA/IHRoaXMgOiBOYU47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBiZWhhdmVzIHRoZSBzYW1lIGFzIG1vbWVudCNkYXkgZXhjZXB0XG4gICAgICAgIC8vIGFzIGEgZ2V0dGVyLCByZXR1cm5zIDcgaW5zdGVhZCBvZiAwICgxLTcgcmFuZ2UgaW5zdGVhZCBvZiAwLTYpXG4gICAgICAgIC8vIGFzIGEgc2V0dGVyLCBzdW5kYXkgc2hvdWxkIGJlbG9uZyB0byB0aGUgcHJldmlvdXMgd2Vlay5cblxuICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIHdlZWtkYXkgPSBwYXJzZUlzb1dlZWtkYXkoaW5wdXQsIHRoaXMubG9jYWxlRGF0YSgpKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRheSh0aGlzLmRheSgpICUgNyA/IHdlZWtkYXkgOiB3ZWVrZGF5IC0gNyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kYXkoKSB8fCA3O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd2Vla2RheXNSZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAodGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICBjb21wdXRlV2Vla2RheXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c1JlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfd2Vla2RheXNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNSZWdleCA9IGRlZmF1bHRXZWVrZGF5c1JlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXggJiYgaXNTdHJpY3RcbiAgICAgICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXhcbiAgICAgICAgICAgICAgICA6IHRoaXMuX3dlZWtkYXlzUmVnZXg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3ZWVrZGF5c1Nob3J0UmVnZXgoaXNTdHJpY3QpIHtcbiAgICAgICAgaWYgKHRoaXMuX3dlZWtkYXlzUGFyc2VFeGFjdCkge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfd2Vla2RheXNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgY29tcHV0ZVdlZWtkYXlzUGFyc2UuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc1N0cmljdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1Nob3J0UmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleCA9IGRlZmF1bHRXZWVrZGF5c1Nob3J0UmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTaG9ydFN0cmljdFJlZ2V4ICYmIGlzU3RyaWN0XG4gICAgICAgICAgICAgICAgPyB0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXhcbiAgICAgICAgICAgICAgICA6IHRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdlZWtkYXlzTWluUmVnZXgoaXNTdHJpY3QpIHtcbiAgICAgICAgaWYgKHRoaXMuX3dlZWtkYXlzUGFyc2VFeGFjdCkge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfd2Vla2RheXNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgY29tcHV0ZVdlZWtkYXlzUGFyc2UuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc1N0cmljdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNNaW5SZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzTWluUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzTWluUmVnZXggPSBkZWZhdWx0V2Vla2RheXNNaW5SZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4ICYmIGlzU3RyaWN0XG4gICAgICAgICAgICAgICAgPyB0aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4XG4gICAgICAgICAgICAgICAgOiB0aGlzLl93ZWVrZGF5c01pblJlZ2V4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tcHV0ZVdlZWtkYXlzUGFyc2UoKSB7XG4gICAgICAgIGZ1bmN0aW9uIGNtcExlblJldihhLCBiKSB7XG4gICAgICAgICAgICByZXR1cm4gYi5sZW5ndGggLSBhLmxlbmd0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBtaW5QaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIHNob3J0UGllY2VzID0gW10sXG4gICAgICAgICAgICBsb25nUGllY2VzID0gW10sXG4gICAgICAgICAgICBtaXhlZFBpZWNlcyA9IFtdLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIG1vbSxcbiAgICAgICAgICAgIG1pbnAsXG4gICAgICAgICAgICBzaG9ydHAsXG4gICAgICAgICAgICBsb25ncDtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDc7IGkrKykge1xuICAgICAgICAgICAgLy8gbWFrZSB0aGUgcmVnZXggaWYgd2UgZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5XG4gICAgICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIDFdKS5kYXkoaSk7XG4gICAgICAgICAgICBtaW5wID0gcmVnZXhFc2NhcGUodGhpcy53ZWVrZGF5c01pbihtb20sICcnKSk7XG4gICAgICAgICAgICBzaG9ydHAgPSByZWdleEVzY2FwZSh0aGlzLndlZWtkYXlzU2hvcnQobW9tLCAnJykpO1xuICAgICAgICAgICAgbG9uZ3AgPSByZWdleEVzY2FwZSh0aGlzLndlZWtkYXlzKG1vbSwgJycpKTtcbiAgICAgICAgICAgIG1pblBpZWNlcy5wdXNoKG1pbnApO1xuICAgICAgICAgICAgc2hvcnRQaWVjZXMucHVzaChzaG9ydHApO1xuICAgICAgICAgICAgbG9uZ1BpZWNlcy5wdXNoKGxvbmdwKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2gobWlucCk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKHNob3J0cCk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKGxvbmdwKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBTb3J0aW5nIG1ha2VzIHN1cmUgaWYgb25lIHdlZWtkYXkgKG9yIGFiYnIpIGlzIGEgcHJlZml4IG9mIGFub3RoZXIgaXRcbiAgICAgICAgLy8gd2lsbCBtYXRjaCB0aGUgbG9uZ2VyIHBpZWNlLlxuICAgICAgICBtaW5QaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuICAgICAgICBzaG9ydFBpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIGxvbmdQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuICAgICAgICBtaXhlZFBpZWNlcy5zb3J0KGNtcExlblJldik7XG5cbiAgICAgICAgdGhpcy5fd2Vla2RheXNSZWdleCA9IG5ldyBSZWdFeHAoJ14oJyArIG1peGVkUGllY2VzLmpvaW4oJ3wnKSArICcpJywgJ2knKTtcbiAgICAgICAgdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4ID0gdGhpcy5fd2Vla2RheXNSZWdleDtcbiAgICAgICAgdGhpcy5fd2Vla2RheXNNaW5SZWdleCA9IHRoaXMuX3dlZWtkYXlzUmVnZXg7XG5cbiAgICAgICAgdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleCA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAnXignICsgbG9uZ1BpZWNlcy5qb2luKCd8JykgKyAnKScsXG4gICAgICAgICAgICAnaSdcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fd2Vla2RheXNTaG9ydFN0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBzaG9ydFBpZWNlcy5qb2luKCd8JykgKyAnKScsXG4gICAgICAgICAgICAnaSdcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleCA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAnXignICsgbWluUGllY2VzLmpvaW4oJ3wnKSArICcpJyxcbiAgICAgICAgICAgICdpJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGZ1bmN0aW9uIGhGb3JtYXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhvdXJzKCkgJSAxMiB8fCAxMjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBrRm9ybWF0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ob3VycygpIHx8IDI0O1xuICAgIH1cblxuICAgIGFkZEZvcm1hdFRva2VuKCdIJywgWydISCcsIDJdLCAwLCAnaG91cicpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdoJywgWydoaCcsIDJdLCAwLCBoRm9ybWF0KTtcbiAgICBhZGRGb3JtYXRUb2tlbignaycsIFsna2snLCAyXSwgMCwga0Zvcm1hdCk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignaG1tJywgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gJycgKyBoRm9ybWF0LmFwcGx5KHRoaXMpICsgemVyb0ZpbGwodGhpcy5taW51dGVzKCksIDIpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2htbXNzJywgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgJycgK1xuICAgICAgICAgICAgaEZvcm1hdC5hcHBseSh0aGlzKSArXG4gICAgICAgICAgICB6ZXJvRmlsbCh0aGlzLm1pbnV0ZXMoKSwgMikgK1xuICAgICAgICAgICAgemVyb0ZpbGwodGhpcy5zZWNvbmRzKCksIDIpXG4gICAgICAgICk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignSG1tJywgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gJycgKyB0aGlzLmhvdXJzKCkgKyB6ZXJvRmlsbCh0aGlzLm1pbnV0ZXMoKSwgMik7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignSG1tc3MnLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAnJyArXG4gICAgICAgICAgICB0aGlzLmhvdXJzKCkgK1xuICAgICAgICAgICAgemVyb0ZpbGwodGhpcy5taW51dGVzKCksIDIpICtcbiAgICAgICAgICAgIHplcm9GaWxsKHRoaXMuc2Vjb25kcygpLCAyKVxuICAgICAgICApO1xuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gbWVyaWRpZW0odG9rZW4sIGxvd2VyY2FzZSkge1xuICAgICAgICBhZGRGb3JtYXRUb2tlbih0b2tlbiwgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm1lcmlkaWVtKFxuICAgICAgICAgICAgICAgIHRoaXMuaG91cnMoKSxcbiAgICAgICAgICAgICAgICB0aGlzLm1pbnV0ZXMoKSxcbiAgICAgICAgICAgICAgICBsb3dlcmNhc2VcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG1lcmlkaWVtKCdhJywgdHJ1ZSk7XG4gICAgbWVyaWRpZW0oJ0EnLCBmYWxzZSk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBmdW5jdGlvbiBtYXRjaE1lcmlkaWVtKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5fbWVyaWRpZW1QYXJzZTtcbiAgICB9XG5cbiAgICBhZGRSZWdleFRva2VuKCdhJywgbWF0Y2hNZXJpZGllbSk7XG4gICAgYWRkUmVnZXhUb2tlbignQScsIG1hdGNoTWVyaWRpZW0pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0gnLCBtYXRjaDF0bzIsIG1hdGNoMXRvMkhhc1plcm8pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2gnLCBtYXRjaDF0bzIsIG1hdGNoMXRvMk5vTGVhZGluZ1plcm8pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2snLCBtYXRjaDF0bzIsIG1hdGNoMXRvMk5vTGVhZGluZ1plcm8pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0hIJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2hoJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2trJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuXG4gICAgYWRkUmVnZXhUb2tlbignaG1tJywgbWF0Y2gzdG80KTtcbiAgICBhZGRSZWdleFRva2VuKCdobW1zcycsIG1hdGNoNXRvNik7XG4gICAgYWRkUmVnZXhUb2tlbignSG1tJywgbWF0Y2gzdG80KTtcbiAgICBhZGRSZWdleFRva2VuKCdIbW1zcycsIG1hdGNoNXRvNik7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsnSCcsICdISCddLCBIT1VSKTtcbiAgICBhZGRQYXJzZVRva2VuKFsnaycsICdrayddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgdmFyIGtJbnB1dCA9IHRvSW50KGlucHV0KTtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSBrSW5wdXQgPT09IDI0ID8gMCA6IGtJbnB1dDtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKFsnYScsICdBJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBjb25maWcuX2lzUG0gPSBjb25maWcuX2xvY2FsZS5pc1BNKGlucHV0KTtcbiAgICAgICAgY29uZmlnLl9tZXJpZGllbSA9IGlucHV0O1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oWydoJywgJ2hoJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBhcnJheVtIT1VSXSA9IHRvSW50KGlucHV0KTtcbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuYmlnSG91ciA9IHRydWU7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignaG1tJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIHZhciBwb3MgPSBpbnB1dC5sZW5ndGggLSAyO1xuICAgICAgICBhcnJheVtIT1VSXSA9IHRvSW50KGlucHV0LnN1YnN0cigwLCBwb3MpKTtcbiAgICAgICAgYXJyYXlbTUlOVVRFXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MpKTtcbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuYmlnSG91ciA9IHRydWU7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignaG1tc3MnLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgdmFyIHBvczEgPSBpbnB1dC5sZW5ndGggLSA0LFxuICAgICAgICAgICAgcG9zMiA9IGlucHV0Lmxlbmd0aCAtIDI7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQuc3Vic3RyKDAsIHBvczEpKTtcbiAgICAgICAgYXJyYXlbTUlOVVRFXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MxLCAyKSk7XG4gICAgICAgIGFycmF5W1NFQ09ORF0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zMikpO1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdIbW0nLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgdmFyIHBvcyA9IGlucHV0Lmxlbmd0aCAtIDI7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQuc3Vic3RyKDAsIHBvcykpO1xuICAgICAgICBhcnJheVtNSU5VVEVdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvcykpO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ0htbXNzJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIHZhciBwb3MxID0gaW5wdXQubGVuZ3RoIC0gNCxcbiAgICAgICAgICAgIHBvczIgPSBpbnB1dC5sZW5ndGggLSAyO1xuICAgICAgICBhcnJheVtIT1VSXSA9IHRvSW50KGlucHV0LnN1YnN0cigwLCBwb3MxKSk7XG4gICAgICAgIGFycmF5W01JTlVURV0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zMSwgMikpO1xuICAgICAgICBhcnJheVtTRUNPTkRdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvczIpKTtcbiAgICB9KTtcblxuICAgIC8vIExPQ0FMRVNcblxuICAgIGZ1bmN0aW9uIGxvY2FsZUlzUE0oaW5wdXQpIHtcbiAgICAgICAgLy8gSUU4IFF1aXJrcyBNb2RlICYgSUU3IFN0YW5kYXJkcyBNb2RlIGRvIG5vdCBhbGxvdyBhY2Nlc3Npbmcgc3RyaW5ncyBsaWtlIGFycmF5c1xuICAgICAgICAvLyBVc2luZyBjaGFyQXQgc2hvdWxkIGJlIG1vcmUgY29tcGF0aWJsZS5cbiAgICAgICAgcmV0dXJuIChpbnB1dCArICcnKS50b0xvd2VyQ2FzZSgpLmNoYXJBdCgwKSA9PT0gJ3AnO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0TG9jYWxlTWVyaWRpZW1QYXJzZSA9IC9bYXBdXFwuP20/XFwuPy9pLFxuICAgICAgICAvLyBTZXR0aW5nIHRoZSBob3VyIHNob3VsZCBrZWVwIHRoZSB0aW1lLCBiZWNhdXNlIHRoZSB1c2VyIGV4cGxpY2l0bHlcbiAgICAgICAgLy8gc3BlY2lmaWVkIHdoaWNoIGhvdXIgdGhleSB3YW50LiBTbyB0cnlpbmcgdG8gbWFpbnRhaW4gdGhlIHNhbWUgaG91ciAoaW5cbiAgICAgICAgLy8gYSBuZXcgdGltZXpvbmUpIG1ha2VzIHNlbnNlLiBBZGRpbmcvc3VidHJhY3RpbmcgaG91cnMgZG9lcyBub3QgZm9sbG93XG4gICAgICAgIC8vIHRoaXMgcnVsZS5cbiAgICAgICAgZ2V0U2V0SG91ciA9IG1ha2VHZXRTZXQoJ0hvdXJzJywgdHJ1ZSk7XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVNZXJpZGllbShob3VycywgbWludXRlcywgaXNMb3dlcikge1xuICAgICAgICBpZiAoaG91cnMgPiAxMSkge1xuICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAncG0nIDogJ1BNJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBpc0xvd2VyID8gJ2FtJyA6ICdBTSc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgYmFzZUNvbmZpZyA9IHtcbiAgICAgICAgY2FsZW5kYXI6IGRlZmF1bHRDYWxlbmRhcixcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IGRlZmF1bHRMb25nRGF0ZUZvcm1hdCxcbiAgICAgICAgaW52YWxpZERhdGU6IGRlZmF1bHRJbnZhbGlkRGF0ZSxcbiAgICAgICAgb3JkaW5hbDogZGVmYXVsdE9yZGluYWwsXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IGRlZmF1bHREYXlPZk1vbnRoT3JkaW5hbFBhcnNlLFxuICAgICAgICByZWxhdGl2ZVRpbWU6IGRlZmF1bHRSZWxhdGl2ZVRpbWUsXG5cbiAgICAgICAgbW9udGhzOiBkZWZhdWx0TG9jYWxlTW9udGhzLFxuICAgICAgICBtb250aHNTaG9ydDogZGVmYXVsdExvY2FsZU1vbnRoc1Nob3J0LFxuXG4gICAgICAgIHdlZWs6IGRlZmF1bHRMb2NhbGVXZWVrLFxuXG4gICAgICAgIHdlZWtkYXlzOiBkZWZhdWx0TG9jYWxlV2Vla2RheXMsXG4gICAgICAgIHdlZWtkYXlzTWluOiBkZWZhdWx0TG9jYWxlV2Vla2RheXNNaW4sXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6IGRlZmF1bHRMb2NhbGVXZWVrZGF5c1Nob3J0LFxuXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IGRlZmF1bHRMb2NhbGVNZXJpZGllbVBhcnNlLFxuICAgIH07XG5cbiAgICAvLyBpbnRlcm5hbCBzdG9yYWdlIGZvciBsb2NhbGUgY29uZmlnIGZpbGVzXG4gICAgdmFyIGxvY2FsZXMgPSB7fSxcbiAgICAgICAgbG9jYWxlRmFtaWxpZXMgPSB7fSxcbiAgICAgICAgZ2xvYmFsTG9jYWxlO1xuXG4gICAgZnVuY3Rpb24gY29tbW9uUHJlZml4KGFycjEsIGFycjIpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBtaW5sID0gTWF0aC5taW4oYXJyMS5sZW5ndGgsIGFycjIubGVuZ3RoKTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IG1pbmw7IGkgKz0gMSkge1xuICAgICAgICAgICAgaWYgKGFycjFbaV0gIT09IGFycjJbaV0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWlubDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBub3JtYWxpemVMb2NhbGUoa2V5KSB7XG4gICAgICAgIHJldHVybiBrZXkgPyBrZXkudG9Mb3dlckNhc2UoKS5yZXBsYWNlKCdfJywgJy0nKSA6IGtleTtcbiAgICB9XG5cbiAgICAvLyBwaWNrIHRoZSBsb2NhbGUgZnJvbSB0aGUgYXJyYXlcbiAgICAvLyB0cnkgWydlbi1hdScsICdlbi1nYiddIGFzICdlbi1hdScsICdlbi1nYicsICdlbicsIGFzIGluIG1vdmUgdGhyb3VnaCB0aGUgbGlzdCB0cnlpbmcgZWFjaFxuICAgIC8vIHN1YnN0cmluZyBmcm9tIG1vc3Qgc3BlY2lmaWMgdG8gbGVhc3QsIGJ1dCBtb3ZlIHRvIHRoZSBuZXh0IGFycmF5IGl0ZW0gaWYgaXQncyBhIG1vcmUgc3BlY2lmaWMgdmFyaWFudCB0aGFuIHRoZSBjdXJyZW50IHJvb3RcbiAgICBmdW5jdGlvbiBjaG9vc2VMb2NhbGUobmFtZXMpIHtcbiAgICAgICAgdmFyIGkgPSAwLFxuICAgICAgICAgICAgaixcbiAgICAgICAgICAgIG5leHQsXG4gICAgICAgICAgICBsb2NhbGUsXG4gICAgICAgICAgICBzcGxpdDtcblxuICAgICAgICB3aGlsZSAoaSA8IG5hbWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgc3BsaXQgPSBub3JtYWxpemVMb2NhbGUobmFtZXNbaV0pLnNwbGl0KCctJyk7XG4gICAgICAgICAgICBqID0gc3BsaXQubGVuZ3RoO1xuICAgICAgICAgICAgbmV4dCA9IG5vcm1hbGl6ZUxvY2FsZShuYW1lc1tpICsgMV0pO1xuICAgICAgICAgICAgbmV4dCA9IG5leHQgPyBuZXh0LnNwbGl0KCctJykgOiBudWxsO1xuICAgICAgICAgICAgd2hpbGUgKGogPiAwKSB7XG4gICAgICAgICAgICAgICAgbG9jYWxlID0gbG9hZExvY2FsZShzcGxpdC5zbGljZSgwLCBqKS5qb2luKCctJykpO1xuICAgICAgICAgICAgICAgIGlmIChsb2NhbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxvY2FsZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBuZXh0ICYmXG4gICAgICAgICAgICAgICAgICAgIG5leHQubGVuZ3RoID49IGogJiZcbiAgICAgICAgICAgICAgICAgICAgY29tbW9uUHJlZml4KHNwbGl0LCBuZXh0KSA+PSBqIC0gMVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAvL3RoZSBuZXh0IGFycmF5IGl0ZW0gaXMgYmV0dGVyIHRoYW4gYSBzaGFsbG93ZXIgc3Vic3RyaW5nIG9mIHRoaXMgb25lXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBqLS07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpKys7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdsb2JhbExvY2FsZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0xvY2FsZU5hbWVTYW5lKG5hbWUpIHtcbiAgICAgICAgLy8gUHJldmVudCBuYW1lcyB0aGF0IGxvb2sgbGlrZSBmaWxlc3lzdGVtIHBhdGhzLCBpLmUgY29udGFpbiAnLycgb3IgJ1xcJ1xuICAgICAgICAvLyBFbnN1cmUgbmFtZSBpcyBhdmFpbGFibGUgYW5kIGZ1bmN0aW9uIHJldHVybnMgYm9vbGVhblxuICAgICAgICByZXR1cm4gISEobmFtZSAmJiBuYW1lLm1hdGNoKCdeW14vXFxcXFxcXFxdKiQnKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9hZExvY2FsZShuYW1lKSB7XG4gICAgICAgIHZhciBvbGRMb2NhbGUgPSBudWxsLFxuICAgICAgICAgICAgYWxpYXNlZFJlcXVpcmU7XG4gICAgICAgIC8vIFRPRE86IEZpbmQgYSBiZXR0ZXIgd2F5IHRvIHJlZ2lzdGVyIGFuZCBsb2FkIGFsbCB0aGUgbG9jYWxlcyBpbiBOb2RlXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0gPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgIG1vZHVsZSAmJlxuICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgJiZcbiAgICAgICAgICAgIGlzTG9jYWxlTmFtZVNhbmUobmFtZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIG9sZExvY2FsZSA9IGdsb2JhbExvY2FsZS5fYWJicjtcbiAgICAgICAgICAgICAgICBhbGlhc2VkUmVxdWlyZSA9IHJlcXVpcmU7XG4gICAgICAgICAgICAgICAgYWxpYXNlZFJlcXVpcmUoJy4vbG9jYWxlLycgKyBuYW1lKTtcbiAgICAgICAgICAgICAgICBnZXRTZXRHbG9iYWxMb2NhbGUob2xkTG9jYWxlKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAvLyBtYXJrIGFzIG5vdCBmb3VuZCB0byBhdm9pZCByZXBlYXRpbmcgZXhwZW5zaXZlIGZpbGUgcmVxdWlyZSBjYWxsIGNhdXNpbmcgaGlnaCBDUFVcbiAgICAgICAgICAgICAgICAvLyB3aGVuIHRyeWluZyB0byBmaW5kIGVuLVVTLCBlbl9VUywgZW4tdXMgZm9yIGV2ZXJ5IGZvcm1hdCBjYWxsXG4gICAgICAgICAgICAgICAgbG9jYWxlc1tuYW1lXSA9IG51bGw7IC8vIG51bGwgbWVhbnMgbm90IGZvdW5kXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxvY2FsZXNbbmFtZV07XG4gICAgfVxuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIGxvYWQgbG9jYWxlIGFuZCB0aGVuIHNldCB0aGUgZ2xvYmFsIGxvY2FsZS4gIElmXG4gICAgLy8gbm8gYXJndW1lbnRzIGFyZSBwYXNzZWQgaW4sIGl0IHdpbGwgc2ltcGx5IHJldHVybiB0aGUgY3VycmVudCBnbG9iYWxcbiAgICAvLyBsb2NhbGUga2V5LlxuICAgIGZ1bmN0aW9uIGdldFNldEdsb2JhbExvY2FsZShrZXksIHZhbHVlcykge1xuICAgICAgICB2YXIgZGF0YTtcbiAgICAgICAgaWYgKGtleSkge1xuICAgICAgICAgICAgaWYgKGlzVW5kZWZpbmVkKHZhbHVlcykpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gZ2V0TG9jYWxlKGtleSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBkZWZpbmVMb2NhbGUoa2V5LCB2YWx1ZXMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAgIC8vIG1vbWVudC5kdXJhdGlvbi5fbG9jYWxlID0gbW9tZW50Ll9sb2NhbGUgPSBkYXRhO1xuICAgICAgICAgICAgICAgIGdsb2JhbExvY2FsZSA9IGRhdGE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiYgY29uc29sZS53YXJuKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vd2FybiB1c2VyIGlmIGFyZ3VtZW50cyBhcmUgcGFzc2VkIGJ1dCB0aGUgbG9jYWxlIGNvdWxkIG5vdCBiZSBzZXRcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0xvY2FsZSAnICsga2V5ICsgJyBub3QgZm91bmQuIERpZCB5b3UgZm9yZ2V0IHRvIGxvYWQgaXQ/J1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBnbG9iYWxMb2NhbGUuX2FiYnI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGVmaW5lTG9jYWxlKG5hbWUsIGNvbmZpZykge1xuICAgICAgICBpZiAoY29uZmlnICE9PSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgbG9jYWxlLFxuICAgICAgICAgICAgICAgIHBhcmVudENvbmZpZyA9IGJhc2VDb25maWc7XG4gICAgICAgICAgICBjb25maWcuYWJiciA9IG5hbWU7XG4gICAgICAgICAgICBpZiAobG9jYWxlc1tuYW1lXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgZGVwcmVjYXRlU2ltcGxlKFxuICAgICAgICAgICAgICAgICAgICAnZGVmaW5lTG9jYWxlT3ZlcnJpZGUnLFxuICAgICAgICAgICAgICAgICAgICAndXNlIG1vbWVudC51cGRhdGVMb2NhbGUobG9jYWxlTmFtZSwgY29uZmlnKSB0byBjaGFuZ2UgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnYW4gZXhpc3RpbmcgbG9jYWxlLiBtb21lbnQuZGVmaW5lTG9jYWxlKGxvY2FsZU5hbWUsICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbmZpZykgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgY3JlYXRpbmcgYSBuZXcgbG9jYWxlICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ1NlZSBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2RlZmluZS1sb2NhbGUvIGZvciBtb3JlIGluZm8uJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gbG9jYWxlc1tuYW1lXS5fY29uZmlnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjb25maWcucGFyZW50TG9jYWxlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAobG9jYWxlc1tjb25maWcucGFyZW50TG9jYWxlXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudENvbmZpZyA9IGxvY2FsZXNbY29uZmlnLnBhcmVudExvY2FsZV0uX2NvbmZpZztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsb2NhbGUgPSBsb2FkTG9jYWxlKGNvbmZpZy5wYXJlbnRMb2NhbGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobG9jYWxlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudENvbmZpZyA9IGxvY2FsZS5fY29uZmlnO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsb2NhbGVGYW1pbGllc1tjb25maWcucGFyZW50TG9jYWxlXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsZUZhbWlsaWVzW2NvbmZpZy5wYXJlbnRMb2NhbGVdID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbGVGYW1pbGllc1tjb25maWcucGFyZW50TG9jYWxlXS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZzogY29uZmlnLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0gPSBuZXcgTG9jYWxlKG1lcmdlQ29uZmlncyhwYXJlbnRDb25maWcsIGNvbmZpZykpO1xuXG4gICAgICAgICAgICBpZiAobG9jYWxlRmFtaWxpZXNbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICBsb2NhbGVGYW1pbGllc1tuYW1lXS5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIGRlZmluZUxvY2FsZSh4Lm5hbWUsIHguY29uZmlnKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gYmFja3dhcmRzIGNvbXBhdCBmb3Igbm93OiBhbHNvIHNldCB0aGUgbG9jYWxlXG4gICAgICAgICAgICAvLyBtYWtlIHN1cmUgd2Ugc2V0IHRoZSBsb2NhbGUgQUZURVIgYWxsIGNoaWxkIGxvY2FsZXMgaGF2ZSBiZWVuXG4gICAgICAgICAgICAvLyBjcmVhdGVkLCBzbyB3ZSB3b24ndCBlbmQgdXAgd2l0aCB0aGUgY2hpbGQgbG9jYWxlIHNldC5cbiAgICAgICAgICAgIGdldFNldEdsb2JhbExvY2FsZShuYW1lKTtcblxuICAgICAgICAgICAgcmV0dXJuIGxvY2FsZXNbbmFtZV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyB1c2VmdWwgZm9yIHRlc3RpbmdcbiAgICAgICAgICAgIGRlbGV0ZSBsb2NhbGVzW25hbWVdO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1cGRhdGVMb2NhbGUobmFtZSwgY29uZmlnKSB7XG4gICAgICAgIGlmIChjb25maWcgIT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIGxvY2FsZSxcbiAgICAgICAgICAgICAgICB0bXBMb2NhbGUsXG4gICAgICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gYmFzZUNvbmZpZztcblxuICAgICAgICAgICAgaWYgKGxvY2FsZXNbbmFtZV0gIT0gbnVsbCAmJiBsb2NhbGVzW25hbWVdLnBhcmVudExvY2FsZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gVXBkYXRlIGV4aXN0aW5nIGNoaWxkIGxvY2FsZSBpbi1wbGFjZSB0byBhdm9pZCBtZW1vcnktbGVha3NcbiAgICAgICAgICAgICAgICBsb2NhbGVzW25hbWVdLnNldChtZXJnZUNvbmZpZ3MobG9jYWxlc1tuYW1lXS5fY29uZmlnLCBjb25maWcpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gTUVSR0VcbiAgICAgICAgICAgICAgICB0bXBMb2NhbGUgPSBsb2FkTG9jYWxlKG5hbWUpO1xuICAgICAgICAgICAgICAgIGlmICh0bXBMb2NhbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSB0bXBMb2NhbGUuX2NvbmZpZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uZmlnID0gbWVyZ2VDb25maWdzKHBhcmVudENvbmZpZywgY29uZmlnKTtcbiAgICAgICAgICAgICAgICBpZiAodG1wTG9jYWxlID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdXBkYXRlTG9jYWxlIGlzIGNhbGxlZCBmb3IgY3JlYXRpbmcgYSBuZXcgbG9jYWxlXG4gICAgICAgICAgICAgICAgICAgIC8vIFNldCBhYmJyIHNvIGl0IHdpbGwgaGF2ZSBhIG5hbWUgKGdldHRlcnMgcmV0dXJuXG4gICAgICAgICAgICAgICAgICAgIC8vIHVuZGVmaW5lZCBvdGhlcndpc2UpLlxuICAgICAgICAgICAgICAgICAgICBjb25maWcuYWJiciA9IG5hbWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxvY2FsZSA9IG5ldyBMb2NhbGUoY29uZmlnKTtcbiAgICAgICAgICAgICAgICBsb2NhbGUucGFyZW50TG9jYWxlID0gbG9jYWxlc1tuYW1lXTtcbiAgICAgICAgICAgICAgICBsb2NhbGVzW25hbWVdID0gbG9jYWxlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBiYWNrd2FyZHMgY29tcGF0IGZvciBub3c6IGFsc28gc2V0IHRoZSBsb2NhbGVcbiAgICAgICAgICAgIGdldFNldEdsb2JhbExvY2FsZShuYW1lKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHBhc3MgbnVsbCBmb3IgY29uZmlnIHRvIHVudXBkYXRlLCB1c2VmdWwgZm9yIHRlc3RzXG4gICAgICAgICAgICBpZiAobG9jYWxlc1tuYW1lXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKGxvY2FsZXNbbmFtZV0ucGFyZW50TG9jYWxlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxlc1tuYW1lXSA9IGxvY2FsZXNbbmFtZV0ucGFyZW50TG9jYWxlO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSA9PT0gZ2V0U2V0R2xvYmFsTG9jYWxlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldFNldEdsb2JhbExvY2FsZShuYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobG9jYWxlc1tuYW1lXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBsb2NhbGVzW25hbWVdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbG9jYWxlc1tuYW1lXTtcbiAgICB9XG5cbiAgICAvLyByZXR1cm5zIGxvY2FsZSBkYXRhXG4gICAgZnVuY3Rpb24gZ2V0TG9jYWxlKGtleSkge1xuICAgICAgICB2YXIgbG9jYWxlO1xuXG4gICAgICAgIGlmIChrZXkgJiYga2V5Ll9sb2NhbGUgJiYga2V5Ll9sb2NhbGUuX2FiYnIpIHtcbiAgICAgICAgICAgIGtleSA9IGtleS5fbG9jYWxlLl9hYmJyO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFrZXkpIHtcbiAgICAgICAgICAgIHJldHVybiBnbG9iYWxMb2NhbGU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzQXJyYXkoa2V5KSkge1xuICAgICAgICAgICAgLy9zaG9ydC1jaXJjdWl0IGV2ZXJ5dGhpbmcgZWxzZVxuICAgICAgICAgICAgbG9jYWxlID0gbG9hZExvY2FsZShrZXkpO1xuICAgICAgICAgICAgaWYgKGxvY2FsZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBsb2NhbGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBrZXkgPSBba2V5XTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjaG9vc2VMb2NhbGUoa2V5KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0TG9jYWxlcygpIHtcbiAgICAgICAgcmV0dXJuIGtleXMobG9jYWxlcyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2hlY2tPdmVyZmxvdyhtKSB7XG4gICAgICAgIHZhciBvdmVyZmxvdyxcbiAgICAgICAgICAgIGEgPSBtLl9hO1xuXG4gICAgICAgIGlmIChhICYmIGdldFBhcnNpbmdGbGFncyhtKS5vdmVyZmxvdyA9PT0gLTIpIHtcbiAgICAgICAgICAgIG92ZXJmbG93ID1cbiAgICAgICAgICAgICAgICBhW01PTlRIXSA8IDAgfHwgYVtNT05USF0gPiAxMVxuICAgICAgICAgICAgICAgICAgICA/IE1PTlRIXG4gICAgICAgICAgICAgICAgICAgIDogYVtEQVRFXSA8IDEgfHwgYVtEQVRFXSA+IGRheXNJbk1vbnRoKGFbWUVBUl0sIGFbTU9OVEhdKVxuICAgICAgICAgICAgICAgICAgICAgID8gREFURVxuICAgICAgICAgICAgICAgICAgICAgIDogYVtIT1VSXSA8IDAgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYVtIT1VSXSA+IDI0IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgIChhW0hPVVJdID09PSAyNCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFbTUlOVVRFXSAhPT0gMCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFbU0VDT05EXSAhPT0gMCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFbTUlMTElTRUNPTkRdICE9PSAwKSlcbiAgICAgICAgICAgICAgICAgICAgICAgID8gSE9VUlxuICAgICAgICAgICAgICAgICAgICAgICAgOiBhW01JTlVURV0gPCAwIHx8IGFbTUlOVVRFXSA+IDU5XG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gTUlOVVRFXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogYVtTRUNPTkRdIDwgMCB8fCBhW1NFQ09ORF0gPiA1OVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gU0VDT05EXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBhW01JTExJU0VDT05EXSA8IDAgfHwgYVtNSUxMSVNFQ09ORF0gPiA5OTlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gTUlMTElTRUNPTkRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogLTE7XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MobSkuX292ZXJmbG93RGF5T2ZZZWFyICYmXG4gICAgICAgICAgICAgICAgKG92ZXJmbG93IDwgWUVBUiB8fCBvdmVyZmxvdyA+IERBVEUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBvdmVyZmxvdyA9IERBVEU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZ2V0UGFyc2luZ0ZsYWdzKG0pLl9vdmVyZmxvd1dlZWtzICYmIG92ZXJmbG93ID09PSAtMSkge1xuICAgICAgICAgICAgICAgIG92ZXJmbG93ID0gV0VFSztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChnZXRQYXJzaW5nRmxhZ3MobSkuX292ZXJmbG93V2Vla2RheSAmJiBvdmVyZmxvdyA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBvdmVyZmxvdyA9IFdFRUtEQVk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhtKS5vdmVyZmxvdyA9IG92ZXJmbG93O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgLy8gaXNvIDg2MDEgcmVnZXhcbiAgICAvLyAwMDAwLTAwLTAwIDAwMDAtVzAwIG9yIDAwMDAtVzAwLTAgKyBUICsgMDAgb3IgMDA6MDAgb3IgMDA6MDA6MDAgb3IgMDA6MDA6MDAuMDAwICsgKzAwOjAwIG9yICswMDAwIG9yICswMClcbiAgICB2YXIgZXh0ZW5kZWRJc29SZWdleCA9XG4gICAgICAgICAgICAvXlxccyooKD86WystXVxcZHs2fXxcXGR7NH0pLSg/OlxcZFxcZC1cXGRcXGR8V1xcZFxcZC1cXGR8V1xcZFxcZHxcXGRcXGRcXGR8XFxkXFxkKSkoPzooVHwgKShcXGRcXGQoPzo6XFxkXFxkKD86OlxcZFxcZCg/OlsuLF1cXGQrKT8pPyk/KShbKy1dXFxkXFxkKD86Oj9cXGRcXGQpP3xcXHMqWik/KT8kLyxcbiAgICAgICAgYmFzaWNJc29SZWdleCA9XG4gICAgICAgICAgICAvXlxccyooKD86WystXVxcZHs2fXxcXGR7NH0pKD86XFxkXFxkXFxkXFxkfFdcXGRcXGRcXGR8V1xcZFxcZHxcXGRcXGRcXGR8XFxkXFxkfCkpKD86KFR8ICkoXFxkXFxkKD86XFxkXFxkKD86XFxkXFxkKD86Wy4sXVxcZCspPyk/KT8pKFsrLV1cXGRcXGQoPzo6P1xcZFxcZCk/fFxccypaKT8pPyQvLFxuICAgICAgICB0elJlZ2V4ID0gL1p8WystXVxcZFxcZCg/Ojo/XFxkXFxkKT8vLFxuICAgICAgICBpc29EYXRlcyA9IFtcbiAgICAgICAgICAgIFsnWVlZWVlZLU1NLUREJywgL1srLV1cXGR7Nn0tXFxkXFxkLVxcZFxcZC9dLFxuICAgICAgICAgICAgWydZWVlZLU1NLUREJywgL1xcZHs0fS1cXGRcXGQtXFxkXFxkL10sXG4gICAgICAgICAgICBbJ0dHR0ctW1ddV1ctRScsIC9cXGR7NH0tV1xcZFxcZC1cXGQvXSxcbiAgICAgICAgICAgIFsnR0dHRy1bV11XVycsIC9cXGR7NH0tV1xcZFxcZC8sIGZhbHNlXSxcbiAgICAgICAgICAgIFsnWVlZWS1EREQnLCAvXFxkezR9LVxcZHszfS9dLFxuICAgICAgICAgICAgWydZWVlZLU1NJywgL1xcZHs0fS1cXGRcXGQvLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ1lZWVlZWU1NREQnLCAvWystXVxcZHsxMH0vXSxcbiAgICAgICAgICAgIFsnWVlZWU1NREQnLCAvXFxkezh9L10sXG4gICAgICAgICAgICBbJ0dHR0dbV11XV0UnLCAvXFxkezR9V1xcZHszfS9dLFxuICAgICAgICAgICAgWydHR0dHW1ddV1cnLCAvXFxkezR9V1xcZHsyfS8sIGZhbHNlXSxcbiAgICAgICAgICAgIFsnWVlZWURERCcsIC9cXGR7N30vXSxcbiAgICAgICAgICAgIFsnWVlZWU1NJywgL1xcZHs2fS8sIGZhbHNlXSxcbiAgICAgICAgICAgIFsnWVlZWScsIC9cXGR7NH0vLCBmYWxzZV0sXG4gICAgICAgIF0sXG4gICAgICAgIC8vIGlzbyB0aW1lIGZvcm1hdHMgYW5kIHJlZ2V4ZXNcbiAgICAgICAgaXNvVGltZXMgPSBbXG4gICAgICAgICAgICBbJ0hIOm1tOnNzLlNTU1MnLCAvXFxkXFxkOlxcZFxcZDpcXGRcXGRcXC5cXGQrL10sXG4gICAgICAgICAgICBbJ0hIOm1tOnNzLFNTU1MnLCAvXFxkXFxkOlxcZFxcZDpcXGRcXGQsXFxkKy9dLFxuICAgICAgICAgICAgWydISDptbTpzcycsIC9cXGRcXGQ6XFxkXFxkOlxcZFxcZC9dLFxuICAgICAgICAgICAgWydISDptbScsIC9cXGRcXGQ6XFxkXFxkL10sXG4gICAgICAgICAgICBbJ0hIbW1zcy5TU1NTJywgL1xcZFxcZFxcZFxcZFxcZFxcZFxcLlxcZCsvXSxcbiAgICAgICAgICAgIFsnSEhtbXNzLFNTU1MnLCAvXFxkXFxkXFxkXFxkXFxkXFxkLFxcZCsvXSxcbiAgICAgICAgICAgIFsnSEhtbXNzJywgL1xcZFxcZFxcZFxcZFxcZFxcZC9dLFxuICAgICAgICAgICAgWydISG1tJywgL1xcZFxcZFxcZFxcZC9dLFxuICAgICAgICAgICAgWydISCcsIC9cXGRcXGQvXSxcbiAgICAgICAgXSxcbiAgICAgICAgYXNwTmV0SnNvblJlZ2V4ID0gL15cXC8/RGF0ZVxcKCgtP1xcZCspL2ksXG4gICAgICAgIC8vIFJGQyAyODIyIHJlZ2V4OiBGb3IgZGV0YWlscyBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzI4MjIjc2VjdGlvbi0zLjNcbiAgICAgICAgcmZjMjgyMiA9XG4gICAgICAgICAgICAvXig/OihNb258VHVlfFdlZHxUaHV8RnJpfFNhdHxTdW4pLD9cXHMpPyhcXGR7MSwyfSlcXHMoSmFufEZlYnxNYXJ8QXByfE1heXxKdW58SnVsfEF1Z3xTZXB8T2N0fE5vdnxEZWMpXFxzKFxcZHsyLDR9KVxccyhcXGRcXGQpOihcXGRcXGQpKD86OihcXGRcXGQpKT9cXHMoPzooVVR8R01UfFtFQ01QXVtTRF1UKXwoW1p6XSl8KFsrLV1cXGR7NH0pKSQvLFxuICAgICAgICBvYnNPZmZzZXRzID0ge1xuICAgICAgICAgICAgVVQ6IDAsXG4gICAgICAgICAgICBHTVQ6IDAsXG4gICAgICAgICAgICBFRFQ6IC00ICogNjAsXG4gICAgICAgICAgICBFU1Q6IC01ICogNjAsXG4gICAgICAgICAgICBDRFQ6IC01ICogNjAsXG4gICAgICAgICAgICBDU1Q6IC02ICogNjAsXG4gICAgICAgICAgICBNRFQ6IC02ICogNjAsXG4gICAgICAgICAgICBNU1Q6IC03ICogNjAsXG4gICAgICAgICAgICBQRFQ6IC03ICogNjAsXG4gICAgICAgICAgICBQU1Q6IC04ICogNjAsXG4gICAgICAgIH07XG5cbiAgICAvLyBkYXRlIGZyb20gaXNvIGZvcm1hdFxuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21JU08oY29uZmlnKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIHN0cmluZyA9IGNvbmZpZy5faSxcbiAgICAgICAgICAgIG1hdGNoID0gZXh0ZW5kZWRJc29SZWdleC5leGVjKHN0cmluZykgfHwgYmFzaWNJc29SZWdleC5leGVjKHN0cmluZyksXG4gICAgICAgICAgICBhbGxvd1RpbWUsXG4gICAgICAgICAgICBkYXRlRm9ybWF0LFxuICAgICAgICAgICAgdGltZUZvcm1hdCxcbiAgICAgICAgICAgIHR6Rm9ybWF0LFxuICAgICAgICAgICAgaXNvRGF0ZXNMZW4gPSBpc29EYXRlcy5sZW5ndGgsXG4gICAgICAgICAgICBpc29UaW1lc0xlbiA9IGlzb1RpbWVzLmxlbmd0aDtcblxuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmlzbyA9IHRydWU7XG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBsID0gaXNvRGF0ZXNMZW47IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNvRGF0ZXNbaV1bMV0uZXhlYyhtYXRjaFsxXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0ZUZvcm1hdCA9IGlzb0RhdGVzW2ldWzBdO1xuICAgICAgICAgICAgICAgICAgICBhbGxvd1RpbWUgPSBpc29EYXRlc1tpXVsyXSAhPT0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRlRm9ybWF0ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWF0Y2hbM10pIHtcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBsID0gaXNvVGltZXNMZW47IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzb1RpbWVzW2ldWzFdLmV4ZWMobWF0Y2hbM10pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBtYXRjaFsyXSBzaG91bGQgYmUgJ1QnIG9yIHNwYWNlXG4gICAgICAgICAgICAgICAgICAgICAgICB0aW1lRm9ybWF0ID0gKG1hdGNoWzJdIHx8ICcgJykgKyBpc29UaW1lc1tpXVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aW1lRm9ybWF0ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWFsbG93VGltZSAmJiB0aW1lRm9ybWF0ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWF0Y2hbNF0pIHtcbiAgICAgICAgICAgICAgICBpZiAodHpSZWdleC5leGVjKG1hdGNoWzRdKSkge1xuICAgICAgICAgICAgICAgICAgICB0ekZvcm1hdCA9ICdaJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbmZpZy5fZiA9IGRhdGVGb3JtYXQgKyAodGltZUZvcm1hdCB8fCAnJykgKyAodHpGb3JtYXQgfHwgJycpO1xuICAgICAgICAgICAgY29uZmlnRnJvbVN0cmluZ0FuZEZvcm1hdChjb25maWcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBleHRyYWN0RnJvbVJGQzI4MjJTdHJpbmdzKFxuICAgICAgICB5ZWFyU3RyLFxuICAgICAgICBtb250aFN0cixcbiAgICAgICAgZGF5U3RyLFxuICAgICAgICBob3VyU3RyLFxuICAgICAgICBtaW51dGVTdHIsXG4gICAgICAgIHNlY29uZFN0clxuICAgICkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gW1xuICAgICAgICAgICAgdW50cnVuY2F0ZVllYXIoeWVhclN0ciksXG4gICAgICAgICAgICBkZWZhdWx0TG9jYWxlTW9udGhzU2hvcnQuaW5kZXhPZihtb250aFN0ciksXG4gICAgICAgICAgICBwYXJzZUludChkYXlTdHIsIDEwKSxcbiAgICAgICAgICAgIHBhcnNlSW50KGhvdXJTdHIsIDEwKSxcbiAgICAgICAgICAgIHBhcnNlSW50KG1pbnV0ZVN0ciwgMTApLFxuICAgICAgICBdO1xuXG4gICAgICAgIGlmIChzZWNvbmRTdHIpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHBhcnNlSW50KHNlY29uZFN0ciwgMTApKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdW50cnVuY2F0ZVllYXIoeWVhclN0cikge1xuICAgICAgICB2YXIgeWVhciA9IHBhcnNlSW50KHllYXJTdHIsIDEwKTtcbiAgICAgICAgaWYgKHllYXIgPD0gNDkpIHtcbiAgICAgICAgICAgIHJldHVybiAyMDAwICsgeWVhcjtcbiAgICAgICAgfSBlbHNlIGlmICh5ZWFyIDw9IDk5OSkge1xuICAgICAgICAgICAgcmV0dXJuIDE5MDAgKyB5ZWFyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB5ZWFyO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHByZXByb2Nlc3NSRkMyODIyKHMpIHtcbiAgICAgICAgLy8gUmVtb3ZlIGNvbW1lbnRzIGFuZCBmb2xkaW5nIHdoaXRlc3BhY2UgYW5kIHJlcGxhY2UgbXVsdGlwbGUtc3BhY2VzIHdpdGggYSBzaW5nbGUgc3BhY2VcbiAgICAgICAgcmV0dXJuIHNcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXChbXigpXSpcXCl8W1xcblxcdF0vZywgJyAnKVxuICAgICAgICAgICAgLnJlcGxhY2UoLyhcXHNcXHMrKS9nLCAnICcpXG4gICAgICAgICAgICAucmVwbGFjZSgvXlxcc1xccyovLCAnJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXHNcXHMqJC8sICcnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjaGVja1dlZWtkYXkod2Vla2RheVN0ciwgcGFyc2VkSW5wdXQsIGNvbmZpZykge1xuICAgICAgICBpZiAod2Vla2RheVN0cikge1xuICAgICAgICAgICAgLy8gVE9ETzogUmVwbGFjZSB0aGUgdmFuaWxsYSBKUyBEYXRlIG9iamVjdCB3aXRoIGFuIGluZGVwZW5kZW50IGRheS1vZi13ZWVrIGNoZWNrLlxuICAgICAgICAgICAgdmFyIHdlZWtkYXlQcm92aWRlZCA9IGRlZmF1bHRMb2NhbGVXZWVrZGF5c1Nob3J0LmluZGV4T2Yod2Vla2RheVN0ciksXG4gICAgICAgICAgICAgICAgd2Vla2RheUFjdHVhbCA9IG5ldyBEYXRlKFxuICAgICAgICAgICAgICAgICAgICBwYXJzZWRJbnB1dFswXSxcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkSW5wdXRbMV0sXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlZElucHV0WzJdXG4gICAgICAgICAgICAgICAgKS5nZXREYXkoKTtcbiAgICAgICAgICAgIGlmICh3ZWVrZGF5UHJvdmlkZWQgIT09IHdlZWtkYXlBY3R1YWwpIHtcbiAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS53ZWVrZGF5TWlzbWF0Y2ggPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjYWxjdWxhdGVPZmZzZXQob2JzT2Zmc2V0LCBtaWxpdGFyeU9mZnNldCwgbnVtT2Zmc2V0KSB7XG4gICAgICAgIGlmIChvYnNPZmZzZXQpIHtcbiAgICAgICAgICAgIHJldHVybiBvYnNPZmZzZXRzW29ic09mZnNldF07XG4gICAgICAgIH0gZWxzZSBpZiAobWlsaXRhcnlPZmZzZXQpIHtcbiAgICAgICAgICAgIC8vIHRoZSBvbmx5IGFsbG93ZWQgbWlsaXRhcnkgdHogaXMgWlxuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgaG0gPSBwYXJzZUludChudW1PZmZzZXQsIDEwKSxcbiAgICAgICAgICAgICAgICBtID0gaG0gJSAxMDAsXG4gICAgICAgICAgICAgICAgaCA9IChobSAtIG0pIC8gMTAwO1xuICAgICAgICAgICAgcmV0dXJuIGggKiA2MCArIG07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBkYXRlIGFuZCB0aW1lIGZyb20gcmVmIDI4MjIgZm9ybWF0XG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbVJGQzI4MjIoY29uZmlnKSB7XG4gICAgICAgIHZhciBtYXRjaCA9IHJmYzI4MjIuZXhlYyhwcmVwcm9jZXNzUkZDMjgyMihjb25maWcuX2kpKSxcbiAgICAgICAgICAgIHBhcnNlZEFycmF5O1xuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgIHBhcnNlZEFycmF5ID0gZXh0cmFjdEZyb21SRkMyODIyU3RyaW5ncyhcbiAgICAgICAgICAgICAgICBtYXRjaFs0XSxcbiAgICAgICAgICAgICAgICBtYXRjaFszXSxcbiAgICAgICAgICAgICAgICBtYXRjaFsyXSxcbiAgICAgICAgICAgICAgICBtYXRjaFs1XSxcbiAgICAgICAgICAgICAgICBtYXRjaFs2XSxcbiAgICAgICAgICAgICAgICBtYXRjaFs3XVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmICghY2hlY2tXZWVrZGF5KG1hdGNoWzFdLCBwYXJzZWRBcnJheSwgY29uZmlnKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uZmlnLl9hID0gcGFyc2VkQXJyYXk7XG4gICAgICAgICAgICBjb25maWcuX3R6bSA9IGNhbGN1bGF0ZU9mZnNldChtYXRjaFs4XSwgbWF0Y2hbOV0sIG1hdGNoWzEwXSk7XG5cbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IGNyZWF0ZVVUQ0RhdGUuYXBwbHkobnVsbCwgY29uZmlnLl9hKTtcbiAgICAgICAgICAgIGNvbmZpZy5fZC5zZXRVVENNaW51dGVzKGNvbmZpZy5fZC5nZXRVVENNaW51dGVzKCkgLSBjb25maWcuX3R6bSk7XG5cbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnJmYzI4MjIgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBkYXRlIGZyb20gMSkgQVNQLk5FVCwgMikgSVNPLCAzKSBSRkMgMjgyMiBmb3JtYXRzLCBvciA0KSBvcHRpb25hbCBmYWxsYmFjayBpZiBwYXJzaW5nIGlzbid0IHN0cmljdFxuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21TdHJpbmcoY29uZmlnKSB7XG4gICAgICAgIHZhciBtYXRjaGVkID0gYXNwTmV0SnNvblJlZ2V4LmV4ZWMoY29uZmlnLl9pKTtcbiAgICAgICAgaWYgKG1hdGNoZWQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKCttYXRjaGVkWzFdKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbmZpZ0Zyb21JU08oY29uZmlnKTtcbiAgICAgICAgaWYgKGNvbmZpZy5faXNWYWxpZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBjb25maWcuX2lzVmFsaWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25maWdGcm9tUkZDMjgyMihjb25maWcpO1xuICAgICAgICBpZiAoY29uZmlnLl9pc1ZhbGlkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgZGVsZXRlIGNvbmZpZy5faXNWYWxpZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25maWcuX3N0cmljdCkge1xuICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBGaW5hbCBhdHRlbXB0LCB1c2UgSW5wdXQgRmFsbGJhY2tcbiAgICAgICAgICAgIGhvb2tzLmNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrKGNvbmZpZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBob29rcy5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjayA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ3ZhbHVlIHByb3ZpZGVkIGlzIG5vdCBpbiBhIHJlY29nbml6ZWQgUkZDMjgyMiBvciBJU08gZm9ybWF0LiBtb21lbnQgY29uc3RydWN0aW9uIGZhbGxzIGJhY2sgdG8ganMgRGF0ZSgpLCAnICtcbiAgICAgICAgICAgICd3aGljaCBpcyBub3QgcmVsaWFibGUgYWNyb3NzIGFsbCBicm93c2VycyBhbmQgdmVyc2lvbnMuIE5vbiBSRkMyODIyL0lTTyBkYXRlIGZvcm1hdHMgYXJlICcgK1xuICAgICAgICAgICAgJ2Rpc2NvdXJhZ2VkLiBQbGVhc2UgcmVmZXIgdG8gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9qcy1kYXRlLyBmb3IgbW9yZSBpbmZvLicsXG4gICAgICAgIGZ1bmN0aW9uIChjb25maWcpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKGNvbmZpZy5faSArIChjb25maWcuX3VzZVVUQyA/ICcgVVRDJyA6ICcnKSk7XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgLy8gUGljayB0aGUgZmlyc3QgZGVmaW5lZCBvZiB0d28gb3IgdGhyZWUgYXJndW1lbnRzLlxuICAgIGZ1bmN0aW9uIGRlZmF1bHRzKGEsIGIsIGMpIHtcbiAgICAgICAgaWYgKGEgIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGIgIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3VycmVudERhdGVBcnJheShjb25maWcpIHtcbiAgICAgICAgLy8gaG9va3MgaXMgYWN0dWFsbHkgdGhlIGV4cG9ydGVkIG1vbWVudCBvYmplY3RcbiAgICAgICAgdmFyIG5vd1ZhbHVlID0gbmV3IERhdGUoaG9va3Mubm93KCkpO1xuICAgICAgICBpZiAoY29uZmlnLl91c2VVVEMpIHtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgbm93VmFsdWUuZ2V0VVRDRnVsbFllYXIoKSxcbiAgICAgICAgICAgICAgICBub3dWYWx1ZS5nZXRVVENNb250aCgpLFxuICAgICAgICAgICAgICAgIG5vd1ZhbHVlLmdldFVUQ0RhdGUoKSxcbiAgICAgICAgICAgIF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtub3dWYWx1ZS5nZXRGdWxsWWVhcigpLCBub3dWYWx1ZS5nZXRNb250aCgpLCBub3dWYWx1ZS5nZXREYXRlKCldO1xuICAgIH1cblxuICAgIC8vIGNvbnZlcnQgYW4gYXJyYXkgdG8gYSBkYXRlLlxuICAgIC8vIHRoZSBhcnJheSBzaG91bGQgbWlycm9yIHRoZSBwYXJhbWV0ZXJzIGJlbG93XG4gICAgLy8gbm90ZTogYWxsIHZhbHVlcyBwYXN0IHRoZSB5ZWFyIGFyZSBvcHRpb25hbCBhbmQgd2lsbCBkZWZhdWx0IHRvIHRoZSBsb3dlc3QgcG9zc2libGUgdmFsdWUuXG4gICAgLy8gW3llYXIsIG1vbnRoLCBkYXkgLCBob3VyLCBtaW51dGUsIHNlY29uZCwgbWlsbGlzZWNvbmRdXG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbUFycmF5KGNvbmZpZykge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgICBpbnB1dCA9IFtdLFxuICAgICAgICAgICAgY3VycmVudERhdGUsXG4gICAgICAgICAgICBleHBlY3RlZFdlZWtkYXksXG4gICAgICAgICAgICB5ZWFyVG9Vc2U7XG5cbiAgICAgICAgaWYgKGNvbmZpZy5fZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY3VycmVudERhdGUgPSBjdXJyZW50RGF0ZUFycmF5KGNvbmZpZyk7XG5cbiAgICAgICAgLy9jb21wdXRlIGRheSBvZiB0aGUgeWVhciBmcm9tIHdlZWtzIGFuZCB3ZWVrZGF5c1xuICAgICAgICBpZiAoY29uZmlnLl93ICYmIGNvbmZpZy5fYVtEQVRFXSA9PSBudWxsICYmIGNvbmZpZy5fYVtNT05USF0gPT0gbnVsbCkge1xuICAgICAgICAgICAgZGF5T2ZZZWFyRnJvbVdlZWtJbmZvKGNvbmZpZyk7XG4gICAgICAgIH1cblxuICAgICAgICAvL2lmIHRoZSBkYXkgb2YgdGhlIHllYXIgaXMgc2V0LCBmaWd1cmUgb3V0IHdoYXQgaXQgaXNcbiAgICAgICAgaWYgKGNvbmZpZy5fZGF5T2ZZZWFyICE9IG51bGwpIHtcbiAgICAgICAgICAgIHllYXJUb1VzZSA9IGRlZmF1bHRzKGNvbmZpZy5fYVtZRUFSXSwgY3VycmVudERhdGVbWUVBUl0pO1xuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgY29uZmlnLl9kYXlPZlllYXIgPiBkYXlzSW5ZZWFyKHllYXJUb1VzZSkgfHxcbiAgICAgICAgICAgICAgICBjb25maWcuX2RheU9mWWVhciA9PT0gMFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuX292ZXJmbG93RGF5T2ZZZWFyID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGF0ZSA9IGNyZWF0ZVVUQ0RhdGUoeWVhclRvVXNlLCAwLCBjb25maWcuX2RheU9mWWVhcik7XG4gICAgICAgICAgICBjb25maWcuX2FbTU9OVEhdID0gZGF0ZS5nZXRVVENNb250aCgpO1xuICAgICAgICAgICAgY29uZmlnLl9hW0RBVEVdID0gZGF0ZS5nZXRVVENEYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEZWZhdWx0IHRvIGN1cnJlbnQgZGF0ZS5cbiAgICAgICAgLy8gKiBpZiBubyB5ZWFyLCBtb250aCwgZGF5IG9mIG1vbnRoIGFyZSBnaXZlbiwgZGVmYXVsdCB0byB0b2RheVxuICAgICAgICAvLyAqIGlmIGRheSBvZiBtb250aCBpcyBnaXZlbiwgZGVmYXVsdCBtb250aCBhbmQgeWVhclxuICAgICAgICAvLyAqIGlmIG1vbnRoIGlzIGdpdmVuLCBkZWZhdWx0IG9ubHkgeWVhclxuICAgICAgICAvLyAqIGlmIHllYXIgaXMgZ2l2ZW4sIGRvbid0IGRlZmF1bHQgYW55dGhpbmdcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDMgJiYgY29uZmlnLl9hW2ldID09IG51bGw7ICsraSkge1xuICAgICAgICAgICAgY29uZmlnLl9hW2ldID0gaW5wdXRbaV0gPSBjdXJyZW50RGF0ZVtpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFplcm8gb3V0IHdoYXRldmVyIHdhcyBub3QgZGVmYXVsdGVkLCBpbmNsdWRpbmcgdGltZVxuICAgICAgICBmb3IgKDsgaSA8IDc7IGkrKykge1xuICAgICAgICAgICAgY29uZmlnLl9hW2ldID0gaW5wdXRbaV0gPVxuICAgICAgICAgICAgICAgIGNvbmZpZy5fYVtpXSA9PSBudWxsID8gKGkgPT09IDIgPyAxIDogMCkgOiBjb25maWcuX2FbaV07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDaGVjayBmb3IgMjQ6MDA6MDAuMDAwXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGNvbmZpZy5fYVtIT1VSXSA9PT0gMjQgJiZcbiAgICAgICAgICAgIGNvbmZpZy5fYVtNSU5VVEVdID09PSAwICYmXG4gICAgICAgICAgICBjb25maWcuX2FbU0VDT05EXSA9PT0gMCAmJlxuICAgICAgICAgICAgY29uZmlnLl9hW01JTExJU0VDT05EXSA9PT0gMFxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbmZpZy5fbmV4dERheSA9IHRydWU7XG4gICAgICAgICAgICBjb25maWcuX2FbSE9VUl0gPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uZmlnLl9kID0gKGNvbmZpZy5fdXNlVVRDID8gY3JlYXRlVVRDRGF0ZSA6IGNyZWF0ZURhdGUpLmFwcGx5KFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIGlucHV0XG4gICAgICAgICk7XG4gICAgICAgIGV4cGVjdGVkV2Vla2RheSA9IGNvbmZpZy5fdXNlVVRDXG4gICAgICAgICAgICA/IGNvbmZpZy5fZC5nZXRVVENEYXkoKVxuICAgICAgICAgICAgOiBjb25maWcuX2QuZ2V0RGF5KCk7XG5cbiAgICAgICAgLy8gQXBwbHkgdGltZXpvbmUgb2Zmc2V0IGZyb20gaW5wdXQuIFRoZSBhY3R1YWwgdXRjT2Zmc2V0IGNhbiBiZSBjaGFuZ2VkXG4gICAgICAgIC8vIHdpdGggcGFyc2Vab25lLlxuICAgICAgICBpZiAoY29uZmlnLl90em0gIT0gbnVsbCkge1xuICAgICAgICAgICAgY29uZmlnLl9kLnNldFVUQ01pbnV0ZXMoY29uZmlnLl9kLmdldFVUQ01pbnV0ZXMoKSAtIGNvbmZpZy5fdHptKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25maWcuX25leHREYXkpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtIT1VSXSA9IDI0O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2hlY2sgZm9yIG1pc21hdGNoaW5nIGRheSBvZiB3ZWVrXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGNvbmZpZy5fdyAmJlxuICAgICAgICAgICAgdHlwZW9mIGNvbmZpZy5fdy5kICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgY29uZmlnLl93LmQgIT09IGV4cGVjdGVkV2Vla2RheVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLndlZWtkYXlNaXNtYXRjaCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkYXlPZlllYXJGcm9tV2Vla0luZm8oY29uZmlnKSB7XG4gICAgICAgIHZhciB3LCB3ZWVrWWVhciwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3ksIHRlbXAsIHdlZWtkYXlPdmVyZmxvdywgY3VyV2VlaztcblxuICAgICAgICB3ID0gY29uZmlnLl93O1xuICAgICAgICBpZiAody5HRyAhPSBudWxsIHx8IHcuVyAhPSBudWxsIHx8IHcuRSAhPSBudWxsKSB7XG4gICAgICAgICAgICBkb3cgPSAxO1xuICAgICAgICAgICAgZG95ID0gNDtcblxuICAgICAgICAgICAgLy8gVE9ETzogV2UgbmVlZCB0byB0YWtlIHRoZSBjdXJyZW50IGlzb1dlZWtZZWFyLCBidXQgdGhhdCBkZXBlbmRzIG9uXG4gICAgICAgICAgICAvLyBob3cgd2UgaW50ZXJwcmV0IG5vdyAobG9jYWwsIHV0YywgZml4ZWQgb2Zmc2V0KS4gU28gY3JlYXRlXG4gICAgICAgICAgICAvLyBhIG5vdyB2ZXJzaW9uIG9mIGN1cnJlbnQgY29uZmlnICh0YWtlIGxvY2FsL3V0Yy9vZmZzZXQgZmxhZ3MsIGFuZFxuICAgICAgICAgICAgLy8gY3JlYXRlIG5vdykuXG4gICAgICAgICAgICB3ZWVrWWVhciA9IGRlZmF1bHRzKFxuICAgICAgICAgICAgICAgIHcuR0csXG4gICAgICAgICAgICAgICAgY29uZmlnLl9hW1lFQVJdLFxuICAgICAgICAgICAgICAgIHdlZWtPZlllYXIoY3JlYXRlTG9jYWwoKSwgMSwgNCkueWVhclxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHdlZWsgPSBkZWZhdWx0cyh3LlcsIDEpO1xuICAgICAgICAgICAgd2Vla2RheSA9IGRlZmF1bHRzKHcuRSwgMSk7XG4gICAgICAgICAgICBpZiAod2Vla2RheSA8IDEgfHwgd2Vla2RheSA+IDcpIHtcbiAgICAgICAgICAgICAgICB3ZWVrZGF5T3ZlcmZsb3cgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZG93ID0gY29uZmlnLl9sb2NhbGUuX3dlZWsuZG93O1xuICAgICAgICAgICAgZG95ID0gY29uZmlnLl9sb2NhbGUuX3dlZWsuZG95O1xuXG4gICAgICAgICAgICBjdXJXZWVrID0gd2Vla09mWWVhcihjcmVhdGVMb2NhbCgpLCBkb3csIGRveSk7XG5cbiAgICAgICAgICAgIHdlZWtZZWFyID0gZGVmYXVsdHMody5nZywgY29uZmlnLl9hW1lFQVJdLCBjdXJXZWVrLnllYXIpO1xuXG4gICAgICAgICAgICAvLyBEZWZhdWx0IHRvIGN1cnJlbnQgd2Vlay5cbiAgICAgICAgICAgIHdlZWsgPSBkZWZhdWx0cyh3LncsIGN1cldlZWsud2Vlayk7XG5cbiAgICAgICAgICAgIGlmICh3LmQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIC8vIHdlZWtkYXkgLS0gbG93IGRheSBudW1iZXJzIGFyZSBjb25zaWRlcmVkIG5leHQgd2Vla1xuICAgICAgICAgICAgICAgIHdlZWtkYXkgPSB3LmQ7XG4gICAgICAgICAgICAgICAgaWYgKHdlZWtkYXkgPCAwIHx8IHdlZWtkYXkgPiA2KSB7XG4gICAgICAgICAgICAgICAgICAgIHdlZWtkYXlPdmVyZmxvdyA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICh3LmUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIC8vIGxvY2FsIHdlZWtkYXkgLS0gY291bnRpbmcgc3RhcnRzIGZyb20gYmVnaW5uaW5nIG9mIHdlZWtcbiAgICAgICAgICAgICAgICB3ZWVrZGF5ID0gdy5lICsgZG93O1xuICAgICAgICAgICAgICAgIGlmICh3LmUgPCAwIHx8IHcuZSA+IDYpIHtcbiAgICAgICAgICAgICAgICAgICAgd2Vla2RheU92ZXJmbG93ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGRlZmF1bHQgdG8gYmVnaW5uaW5nIG9mIHdlZWtcbiAgICAgICAgICAgICAgICB3ZWVrZGF5ID0gZG93O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh3ZWVrIDwgMSB8fCB3ZWVrID4gd2Vla3NJblllYXIod2Vla1llYXIsIGRvdywgZG95KSkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuX292ZXJmbG93V2Vla3MgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHdlZWtkYXlPdmVyZmxvdyAhPSBudWxsKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5fb3ZlcmZsb3dXZWVrZGF5ID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRlbXAgPSBkYXlPZlllYXJGcm9tV2Vla3Mod2Vla1llYXIsIHdlZWssIHdlZWtkYXksIGRvdywgZG95KTtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtZRUFSXSA9IHRlbXAueWVhcjtcbiAgICAgICAgICAgIGNvbmZpZy5fZGF5T2ZZZWFyID0gdGVtcC5kYXlPZlllYXI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBjb25zdGFudCB0aGF0IHJlZmVycyB0byB0aGUgSVNPIHN0YW5kYXJkXG4gICAgaG9va3MuSVNPXzg2MDEgPSBmdW5jdGlvbiAoKSB7fTtcblxuICAgIC8vIGNvbnN0YW50IHRoYXQgcmVmZXJzIHRvIHRoZSBSRkMgMjgyMiBmb3JtXG4gICAgaG9va3MuUkZDXzI4MjIgPSBmdW5jdGlvbiAoKSB7fTtcblxuICAgIC8vIGRhdGUgZnJvbSBzdHJpbmcgYW5kIGZvcm1hdCBzdHJpbmdcbiAgICBmdW5jdGlvbiBjb25maWdGcm9tU3RyaW5nQW5kRm9ybWF0KGNvbmZpZykge1xuICAgICAgICAvLyBUT0RPOiBNb3ZlIHRoaXMgdG8gYW5vdGhlciBwYXJ0IG9mIHRoZSBjcmVhdGlvbiBmbG93IHRvIHByZXZlbnQgY2lyY3VsYXIgZGVwc1xuICAgICAgICBpZiAoY29uZmlnLl9mID09PSBob29rcy5JU09fODYwMSkge1xuICAgICAgICAgICAgY29uZmlnRnJvbUlTTyhjb25maWcpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb25maWcuX2YgPT09IGhvb2tzLlJGQ18yODIyKSB7XG4gICAgICAgICAgICBjb25maWdGcm9tUkZDMjgyMihjb25maWcpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbmZpZy5fYSA9IFtdO1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5lbXB0eSA9IHRydWU7XG5cbiAgICAgICAgLy8gVGhpcyBhcnJheSBpcyB1c2VkIHRvIG1ha2UgYSBEYXRlLCBlaXRoZXIgd2l0aCBgbmV3IERhdGVgIG9yIGBEYXRlLlVUQ2BcbiAgICAgICAgdmFyIHN0cmluZyA9ICcnICsgY29uZmlnLl9pLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIHBhcnNlZElucHV0LFxuICAgICAgICAgICAgdG9rZW5zLFxuICAgICAgICAgICAgdG9rZW4sXG4gICAgICAgICAgICBza2lwcGVkLFxuICAgICAgICAgICAgc3RyaW5nTGVuZ3RoID0gc3RyaW5nLmxlbmd0aCxcbiAgICAgICAgICAgIHRvdGFsUGFyc2VkSW5wdXRMZW5ndGggPSAwLFxuICAgICAgICAgICAgZXJhLFxuICAgICAgICAgICAgdG9rZW5MZW47XG5cbiAgICAgICAgdG9rZW5zID1cbiAgICAgICAgICAgIGV4cGFuZEZvcm1hdChjb25maWcuX2YsIGNvbmZpZy5fbG9jYWxlKS5tYXRjaChmb3JtYXR0aW5nVG9rZW5zKSB8fCBbXTtcbiAgICAgICAgdG9rZW5MZW4gPSB0b2tlbnMubGVuZ3RoO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdG9rZW5MZW47IGkrKykge1xuICAgICAgICAgICAgdG9rZW4gPSB0b2tlbnNbaV07XG4gICAgICAgICAgICBwYXJzZWRJbnB1dCA9IChzdHJpbmcubWF0Y2goZ2V0UGFyc2VSZWdleEZvclRva2VuKHRva2VuLCBjb25maWcpKSB8fFxuICAgICAgICAgICAgICAgIFtdKVswXTtcbiAgICAgICAgICAgIGlmIChwYXJzZWRJbnB1dCkge1xuICAgICAgICAgICAgICAgIHNraXBwZWQgPSBzdHJpbmcuc3Vic3RyKDAsIHN0cmluZy5pbmRleE9mKHBhcnNlZElucHV0KSk7XG4gICAgICAgICAgICAgICAgaWYgKHNraXBwZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS51bnVzZWRJbnB1dC5wdXNoKHNraXBwZWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzdHJpbmcgPSBzdHJpbmcuc2xpY2UoXG4gICAgICAgICAgICAgICAgICAgIHN0cmluZy5pbmRleE9mKHBhcnNlZElucHV0KSArIHBhcnNlZElucHV0Lmxlbmd0aFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdG90YWxQYXJzZWRJbnB1dExlbmd0aCArPSBwYXJzZWRJbnB1dC5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBkb24ndCBwYXJzZSBpZiBpdCdzIG5vdCBhIGtub3duIHRva2VuXG4gICAgICAgICAgICBpZiAoZm9ybWF0VG9rZW5GdW5jdGlvbnNbdG9rZW5dKSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcnNlZElucHV0KSB7XG4gICAgICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmVtcHR5ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykudW51c2VkVG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhZGRUaW1lVG9BcnJheUZyb21Ub2tlbih0b2tlbiwgcGFyc2VkSW5wdXQsIGNvbmZpZyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbmZpZy5fc3RyaWN0ICYmICFwYXJzZWRJbnB1dCkge1xuICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnVudXNlZFRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGFkZCByZW1haW5pbmcgdW5wYXJzZWQgaW5wdXQgbGVuZ3RoIHRvIHRoZSBzdHJpbmdcbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuY2hhcnNMZWZ0T3ZlciA9XG4gICAgICAgICAgICBzdHJpbmdMZW5ndGggLSB0b3RhbFBhcnNlZElucHV0TGVuZ3RoO1xuICAgICAgICBpZiAoc3RyaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnVudXNlZElucHV0LnB1c2goc3RyaW5nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNsZWFyIF8xMmggZmxhZyBpZiBob3VyIGlzIDw9IDEyXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGNvbmZpZy5fYVtIT1VSXSA8PSAxMiAmJlxuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuYmlnSG91ciA9PT0gdHJ1ZSAmJlxuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdID4gMFxuICAgICAgICApIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmJpZ0hvdXIgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5wYXJzZWREYXRlUGFydHMgPSBjb25maWcuX2Euc2xpY2UoMCk7XG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLm1lcmlkaWVtID0gY29uZmlnLl9tZXJpZGllbTtcbiAgICAgICAgLy8gaGFuZGxlIG1lcmlkaWVtXG4gICAgICAgIGNvbmZpZy5fYVtIT1VSXSA9IG1lcmlkaWVtRml4V3JhcChcbiAgICAgICAgICAgIGNvbmZpZy5fbG9jYWxlLFxuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdLFxuICAgICAgICAgICAgY29uZmlnLl9tZXJpZGllbVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIGhhbmRsZSBlcmFcbiAgICAgICAgZXJhID0gZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuZXJhO1xuICAgICAgICBpZiAoZXJhICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25maWcuX2FbWUVBUl0gPSBjb25maWcuX2xvY2FsZS5lcmFzQ29udmVydFllYXIoZXJhLCBjb25maWcuX2FbWUVBUl0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uZmlnRnJvbUFycmF5KGNvbmZpZyk7XG4gICAgICAgIGNoZWNrT3ZlcmZsb3coY29uZmlnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtZXJpZGllbUZpeFdyYXAobG9jYWxlLCBob3VyLCBtZXJpZGllbSkge1xuICAgICAgICB2YXIgaXNQbTtcblxuICAgICAgICBpZiAobWVyaWRpZW0gPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gbm90aGluZyB0byBkb1xuICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvY2FsZS5tZXJpZGllbUhvdXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsZS5tZXJpZGllbUhvdXIoaG91ciwgbWVyaWRpZW0pO1xuICAgICAgICB9IGVsc2UgaWYgKGxvY2FsZS5pc1BNICE9IG51bGwpIHtcbiAgICAgICAgICAgIC8vIEZhbGxiYWNrXG4gICAgICAgICAgICBpc1BtID0gbG9jYWxlLmlzUE0obWVyaWRpZW0pO1xuICAgICAgICAgICAgaWYgKGlzUG0gJiYgaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciArPSAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghaXNQbSAmJiBob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyB0aGlzIGlzIG5vdCBzdXBwb3NlZCB0byBoYXBwZW5cbiAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gZGF0ZSBmcm9tIHN0cmluZyBhbmQgYXJyYXkgb2YgZm9ybWF0IHN0cmluZ3NcbiAgICBmdW5jdGlvbiBjb25maWdGcm9tU3RyaW5nQW5kQXJyYXkoY29uZmlnKSB7XG4gICAgICAgIHZhciB0ZW1wQ29uZmlnLFxuICAgICAgICAgICAgYmVzdE1vbWVudCxcbiAgICAgICAgICAgIHNjb3JlVG9CZWF0LFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIGN1cnJlbnRTY29yZSxcbiAgICAgICAgICAgIHZhbGlkRm9ybWF0Rm91bmQsXG4gICAgICAgICAgICBiZXN0Rm9ybWF0SXNWYWxpZCA9IGZhbHNlLFxuICAgICAgICAgICAgY29uZmlnZkxlbiA9IGNvbmZpZy5fZi5sZW5ndGg7XG5cbiAgICAgICAgaWYgKGNvbmZpZ2ZMZW4gPT09IDApIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmludmFsaWRGb3JtYXQgPSB0cnVlO1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoTmFOKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb25maWdmTGVuOyBpKyspIHtcbiAgICAgICAgICAgIGN1cnJlbnRTY29yZSA9IDA7XG4gICAgICAgICAgICB2YWxpZEZvcm1hdEZvdW5kID0gZmFsc2U7XG4gICAgICAgICAgICB0ZW1wQ29uZmlnID0gY29weUNvbmZpZyh7fSwgY29uZmlnKTtcbiAgICAgICAgICAgIGlmIChjb25maWcuX3VzZVVUQyAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGVtcENvbmZpZy5fdXNlVVRDID0gY29uZmlnLl91c2VVVEM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0ZW1wQ29uZmlnLl9mID0gY29uZmlnLl9mW2ldO1xuICAgICAgICAgICAgY29uZmlnRnJvbVN0cmluZ0FuZEZvcm1hdCh0ZW1wQ29uZmlnKTtcblxuICAgICAgICAgICAgaWYgKGlzVmFsaWQodGVtcENvbmZpZykpIHtcbiAgICAgICAgICAgICAgICB2YWxpZEZvcm1hdEZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgYW55IGlucHV0IHRoYXQgd2FzIG5vdCBwYXJzZWQgYWRkIGEgcGVuYWx0eSBmb3IgdGhhdCBmb3JtYXRcbiAgICAgICAgICAgIGN1cnJlbnRTY29yZSArPSBnZXRQYXJzaW5nRmxhZ3ModGVtcENvbmZpZykuY2hhcnNMZWZ0T3ZlcjtcblxuICAgICAgICAgICAgLy9vciB0b2tlbnNcbiAgICAgICAgICAgIGN1cnJlbnRTY29yZSArPSBnZXRQYXJzaW5nRmxhZ3ModGVtcENvbmZpZykudW51c2VkVG9rZW5zLmxlbmd0aCAqIDEwO1xuXG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3ModGVtcENvbmZpZykuc2NvcmUgPSBjdXJyZW50U2NvcmU7XG5cbiAgICAgICAgICAgIGlmICghYmVzdEZvcm1hdElzVmFsaWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHNjb3JlVG9CZWF0ID09IG51bGwgfHxcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3JlIDwgc2NvcmVUb0JlYXQgfHxcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRGb3JtYXRGb3VuZFxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBzY29yZVRvQmVhdCA9IGN1cnJlbnRTY29yZTtcbiAgICAgICAgICAgICAgICAgICAgYmVzdE1vbWVudCA9IHRlbXBDb25maWc7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWxpZEZvcm1hdEZvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBiZXN0Rm9ybWF0SXNWYWxpZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50U2NvcmUgPCBzY29yZVRvQmVhdCkge1xuICAgICAgICAgICAgICAgICAgICBzY29yZVRvQmVhdCA9IGN1cnJlbnRTY29yZTtcbiAgICAgICAgICAgICAgICAgICAgYmVzdE1vbWVudCA9IHRlbXBDb25maWc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZXh0ZW5kKGNvbmZpZywgYmVzdE1vbWVudCB8fCB0ZW1wQ29uZmlnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb25maWdGcm9tT2JqZWN0KGNvbmZpZykge1xuICAgICAgICBpZiAoY29uZmlnLl9kKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaSA9IG5vcm1hbGl6ZU9iamVjdFVuaXRzKGNvbmZpZy5faSksXG4gICAgICAgICAgICBkYXlPckRhdGUgPSBpLmRheSA9PT0gdW5kZWZpbmVkID8gaS5kYXRlIDogaS5kYXk7XG4gICAgICAgIGNvbmZpZy5fYSA9IG1hcChcbiAgICAgICAgICAgIFtpLnllYXIsIGkubW9udGgsIGRheU9yRGF0ZSwgaS5ob3VyLCBpLm1pbnV0ZSwgaS5zZWNvbmQsIGkubWlsbGlzZWNvbmRdLFxuICAgICAgICAgICAgZnVuY3Rpb24gKG9iaikge1xuICAgICAgICAgICAgICAgIHJldHVybiBvYmogJiYgcGFyc2VJbnQob2JqLCAxMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICAgICAgY29uZmlnRnJvbUFycmF5KGNvbmZpZyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlRnJvbUNvbmZpZyhjb25maWcpIHtcbiAgICAgICAgdmFyIHJlcyA9IG5ldyBNb21lbnQoY2hlY2tPdmVyZmxvdyhwcmVwYXJlQ29uZmlnKGNvbmZpZykpKTtcbiAgICAgICAgaWYgKHJlcy5fbmV4dERheSkge1xuICAgICAgICAgICAgLy8gQWRkaW5nIGlzIHNtYXJ0IGVub3VnaCBhcm91bmQgRFNUXG4gICAgICAgICAgICByZXMuYWRkKDEsICdkJyk7XG4gICAgICAgICAgICByZXMuX25leHREYXkgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHByZXBhcmVDb25maWcoY29uZmlnKSB7XG4gICAgICAgIHZhciBpbnB1dCA9IGNvbmZpZy5faSxcbiAgICAgICAgICAgIGZvcm1hdCA9IGNvbmZpZy5fZjtcblxuICAgICAgICBjb25maWcuX2xvY2FsZSA9IGNvbmZpZy5fbG9jYWxlIHx8IGdldExvY2FsZShjb25maWcuX2wpO1xuXG4gICAgICAgIGlmIChpbnB1dCA9PT0gbnVsbCB8fCAoZm9ybWF0ID09PSB1bmRlZmluZWQgJiYgaW5wdXQgPT09ICcnKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUludmFsaWQoeyBudWxsSW5wdXQ6IHRydWUgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgY29uZmlnLl9pID0gaW5wdXQgPSBjb25maWcuX2xvY2FsZS5wcmVwYXJzZShpbnB1dCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNNb21lbnQoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE1vbWVudChjaGVja092ZXJmbG93KGlucHV0KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNEYXRlKGlucHV0KSkge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gaW5wdXQ7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNBcnJheShmb3JtYXQpKSB7XG4gICAgICAgICAgICBjb25maWdGcm9tU3RyaW5nQW5kQXJyYXkoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIGlmIChmb3JtYXQpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21TdHJpbmdBbmRGb3JtYXQoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21JbnB1dChjb25maWcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc1ZhbGlkKGNvbmZpZykpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29uZmlnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21JbnB1dChjb25maWcpIHtcbiAgICAgICAgdmFyIGlucHV0ID0gY29uZmlnLl9pO1xuICAgICAgICBpZiAoaXNVbmRlZmluZWQoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShob29rcy5ub3coKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNEYXRlKGlucHV0KSkge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoaW5wdXQudmFsdWVPZigpKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBjb25maWdGcm9tU3RyaW5nKGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNBcnJheShpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fYSA9IG1hcChpbnB1dC5zbGljZSgwKSwgZnVuY3Rpb24gKG9iaikge1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUludChvYmosIDEwKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uZmlnRnJvbUFycmF5KGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb25maWdGcm9tT2JqZWN0KGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNOdW1iZXIoaW5wdXQpKSB7XG4gICAgICAgICAgICAvLyBmcm9tIG1pbGxpc2Vjb25kc1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoaW5wdXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaG9va3MuY3JlYXRlRnJvbUlucHV0RmFsbGJhY2soY29uZmlnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUxvY2FsT3JVVEMoaW5wdXQsIGZvcm1hdCwgbG9jYWxlLCBzdHJpY3QsIGlzVVRDKSB7XG4gICAgICAgIHZhciBjID0ge307XG5cbiAgICAgICAgaWYgKGZvcm1hdCA9PT0gdHJ1ZSB8fCBmb3JtYXQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBzdHJpY3QgPSBmb3JtYXQ7XG4gICAgICAgICAgICBmb3JtYXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobG9jYWxlID09PSB0cnVlIHx8IGxvY2FsZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHN0cmljdCA9IGxvY2FsZTtcbiAgICAgICAgICAgIGxvY2FsZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIChpc09iamVjdChpbnB1dCkgJiYgaXNPYmplY3RFbXB0eShpbnB1dCkpIHx8XG4gICAgICAgICAgICAoaXNBcnJheShpbnB1dCkgJiYgaW5wdXQubGVuZ3RoID09PSAwKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGlucHV0ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIC8vIG9iamVjdCBjb25zdHJ1Y3Rpb24gbXVzdCBiZSBkb25lIHRoaXMgd2F5LlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9pc3N1ZXMvMTQyM1xuICAgICAgICBjLl9pc0FNb21lbnRPYmplY3QgPSB0cnVlO1xuICAgICAgICBjLl91c2VVVEMgPSBjLl9pc1VUQyA9IGlzVVRDO1xuICAgICAgICBjLl9sID0gbG9jYWxlO1xuICAgICAgICBjLl9pID0gaW5wdXQ7XG4gICAgICAgIGMuX2YgPSBmb3JtYXQ7XG4gICAgICAgIGMuX3N0cmljdCA9IHN0cmljdDtcblxuICAgICAgICByZXR1cm4gY3JlYXRlRnJvbUNvbmZpZyhjKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVMb2NhbChpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlTG9jYWxPclVUQyhpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCwgZmFsc2UpO1xuICAgIH1cblxuICAgIHZhciBwcm90b3R5cGVNaW4gPSBkZXByZWNhdGUoXG4gICAgICAgICAgICAnbW9tZW50KCkubWluIGlzIGRlcHJlY2F0ZWQsIHVzZSBtb21lbnQubWF4IGluc3RlYWQuIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvbWluLW1heC8nLFxuICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBvdGhlciA9IGNyZWF0ZUxvY2FsLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNWYWxpZCgpICYmIG90aGVyLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3RoZXIgPCB0aGlzID8gdGhpcyA6IG90aGVyO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVJbnZhbGlkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICBwcm90b3R5cGVNYXggPSBkZXByZWNhdGUoXG4gICAgICAgICAgICAnbW9tZW50KCkubWF4IGlzIGRlcHJlY2F0ZWQsIHVzZSBtb21lbnQubWluIGluc3RlYWQuIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvbWluLW1heC8nLFxuICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBvdGhlciA9IGNyZWF0ZUxvY2FsLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNWYWxpZCgpICYmIG90aGVyLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3RoZXIgPiB0aGlzID8gdGhpcyA6IG90aGVyO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVJbnZhbGlkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgLy8gUGljayBhIG1vbWVudCBtIGZyb20gbW9tZW50cyBzbyB0aGF0IG1bZm5dKG90aGVyKSBpcyB0cnVlIGZvciBhbGxcbiAgICAvLyBvdGhlci4gVGhpcyByZWxpZXMgb24gdGhlIGZ1bmN0aW9uIGZuIHRvIGJlIHRyYW5zaXRpdmUuXG4gICAgLy9cbiAgICAvLyBtb21lbnRzIHNob3VsZCBlaXRoZXIgYmUgYW4gYXJyYXkgb2YgbW9tZW50IG9iamVjdHMgb3IgYW4gYXJyYXksIHdob3NlXG4gICAgLy8gZmlyc3QgZWxlbWVudCBpcyBhbiBhcnJheSBvZiBtb21lbnQgb2JqZWN0cy5cbiAgICBmdW5jdGlvbiBwaWNrQnkoZm4sIG1vbWVudHMpIHtcbiAgICAgICAgdmFyIHJlcywgaTtcbiAgICAgICAgaWYgKG1vbWVudHMubGVuZ3RoID09PSAxICYmIGlzQXJyYXkobW9tZW50c1swXSkpIHtcbiAgICAgICAgICAgIG1vbWVudHMgPSBtb21lbnRzWzBdO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbW9tZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVMb2NhbCgpO1xuICAgICAgICB9XG4gICAgICAgIHJlcyA9IG1vbWVudHNbMF07XG4gICAgICAgIGZvciAoaSA9IDE7IGkgPCBtb21lbnRzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICBpZiAoIW1vbWVudHNbaV0uaXNWYWxpZCgpIHx8IG1vbWVudHNbaV1bZm5dKHJlcykpIHtcbiAgICAgICAgICAgICAgICByZXMgPSBtb21lbnRzW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogVXNlIFtdLnNvcnQgaW5zdGVhZD9cbiAgICBmdW5jdGlvbiBtaW4oKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDApO1xuXG4gICAgICAgIHJldHVybiBwaWNrQnkoJ2lzQmVmb3JlJywgYXJncyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWF4KCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcblxuICAgICAgICByZXR1cm4gcGlja0J5KCdpc0FmdGVyJywgYXJncyk7XG4gICAgfVxuXG4gICAgdmFyIG5vdyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIERhdGUubm93ID8gRGF0ZS5ub3coKSA6ICtuZXcgRGF0ZSgpO1xuICAgIH07XG5cbiAgICB2YXIgb3JkZXJpbmcgPSBbXG4gICAgICAgICd5ZWFyJyxcbiAgICAgICAgJ3F1YXJ0ZXInLFxuICAgICAgICAnbW9udGgnLFxuICAgICAgICAnd2VlaycsXG4gICAgICAgICdkYXknLFxuICAgICAgICAnaG91cicsXG4gICAgICAgICdtaW51dGUnLFxuICAgICAgICAnc2Vjb25kJyxcbiAgICAgICAgJ21pbGxpc2Vjb25kJyxcbiAgICBdO1xuXG4gICAgZnVuY3Rpb24gaXNEdXJhdGlvblZhbGlkKG0pIHtcbiAgICAgICAgdmFyIGtleSxcbiAgICAgICAgICAgIHVuaXRIYXNEZWNpbWFsID0gZmFsc2UsXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgb3JkZXJMZW4gPSBvcmRlcmluZy5sZW5ndGg7XG4gICAgICAgIGZvciAoa2V5IGluIG0pIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBoYXNPd25Qcm9wKG0sIGtleSkgJiZcbiAgICAgICAgICAgICAgICAhKFxuICAgICAgICAgICAgICAgICAgICBpbmRleE9mLmNhbGwob3JkZXJpbmcsIGtleSkgIT09IC0xICYmXG4gICAgICAgICAgICAgICAgICAgIChtW2tleV0gPT0gbnVsbCB8fCAhaXNOYU4obVtrZXldKSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgb3JkZXJMZW47ICsraSkge1xuICAgICAgICAgICAgaWYgKG1bb3JkZXJpbmdbaV1dKSB7XG4gICAgICAgICAgICAgICAgaWYgKHVuaXRIYXNEZWNpbWFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gb25seSBhbGxvdyBub24taW50ZWdlcnMgZm9yIHNtYWxsZXN0IHVuaXRcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHBhcnNlRmxvYXQobVtvcmRlcmluZ1tpXV0pICE9PSB0b0ludChtW29yZGVyaW5nW2ldXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdW5pdEhhc0RlY2ltYWwgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVmFsaWQkMSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzVmFsaWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlSW52YWxpZCQxKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlRHVyYXRpb24oTmFOKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBEdXJhdGlvbihkdXJhdGlvbikge1xuICAgICAgICB2YXIgbm9ybWFsaXplZElucHV0ID0gbm9ybWFsaXplT2JqZWN0VW5pdHMoZHVyYXRpb24pLFxuICAgICAgICAgICAgeWVhcnMgPSBub3JtYWxpemVkSW5wdXQueWVhciB8fCAwLFxuICAgICAgICAgICAgcXVhcnRlcnMgPSBub3JtYWxpemVkSW5wdXQucXVhcnRlciB8fCAwLFxuICAgICAgICAgICAgbW9udGhzID0gbm9ybWFsaXplZElucHV0Lm1vbnRoIHx8IDAsXG4gICAgICAgICAgICB3ZWVrcyA9IG5vcm1hbGl6ZWRJbnB1dC53ZWVrIHx8IG5vcm1hbGl6ZWRJbnB1dC5pc29XZWVrIHx8IDAsXG4gICAgICAgICAgICBkYXlzID0gbm9ybWFsaXplZElucHV0LmRheSB8fCAwLFxuICAgICAgICAgICAgaG91cnMgPSBub3JtYWxpemVkSW5wdXQuaG91ciB8fCAwLFxuICAgICAgICAgICAgbWludXRlcyA9IG5vcm1hbGl6ZWRJbnB1dC5taW51dGUgfHwgMCxcbiAgICAgICAgICAgIHNlY29uZHMgPSBub3JtYWxpemVkSW5wdXQuc2Vjb25kIHx8IDAsXG4gICAgICAgICAgICBtaWxsaXNlY29uZHMgPSBub3JtYWxpemVkSW5wdXQubWlsbGlzZWNvbmQgfHwgMDtcblxuICAgICAgICB0aGlzLl9pc1ZhbGlkID0gaXNEdXJhdGlvblZhbGlkKG5vcm1hbGl6ZWRJbnB1dCk7XG5cbiAgICAgICAgLy8gcmVwcmVzZW50YXRpb24gZm9yIGRhdGVBZGRSZW1vdmVcbiAgICAgICAgdGhpcy5fbWlsbGlzZWNvbmRzID1cbiAgICAgICAgICAgICttaWxsaXNlY29uZHMgK1xuICAgICAgICAgICAgc2Vjb25kcyAqIDFlMyArIC8vIDEwMDBcbiAgICAgICAgICAgIG1pbnV0ZXMgKiA2ZTQgKyAvLyAxMDAwICogNjBcbiAgICAgICAgICAgIGhvdXJzICogMTAwMCAqIDYwICogNjA7IC8vdXNpbmcgMTAwMCAqIDYwICogNjAgaW5zdGVhZCBvZiAzNmU1IHRvIGF2b2lkIGZsb2F0aW5nIHBvaW50IHJvdW5kaW5nIGVycm9ycyBodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9pc3N1ZXMvMjk3OFxuICAgICAgICAvLyBCZWNhdXNlIG9mIGRhdGVBZGRSZW1vdmUgdHJlYXRzIDI0IGhvdXJzIGFzIGRpZmZlcmVudCBmcm9tIGFcbiAgICAgICAgLy8gZGF5IHdoZW4gd29ya2luZyBhcm91bmQgRFNULCB3ZSBuZWVkIHRvIHN0b3JlIHRoZW0gc2VwYXJhdGVseVxuICAgICAgICB0aGlzLl9kYXlzID0gK2RheXMgKyB3ZWVrcyAqIDc7XG4gICAgICAgIC8vIEl0IGlzIGltcG9zc2libGUgdG8gdHJhbnNsYXRlIG1vbnRocyBpbnRvIGRheXMgd2l0aG91dCBrbm93aW5nXG4gICAgICAgIC8vIHdoaWNoIG1vbnRocyB5b3UgYXJlIGFyZSB0YWxraW5nIGFib3V0LCBzbyB3ZSBoYXZlIHRvIHN0b3JlXG4gICAgICAgIC8vIGl0IHNlcGFyYXRlbHkuXG4gICAgICAgIHRoaXMuX21vbnRocyA9ICttb250aHMgKyBxdWFydGVycyAqIDMgKyB5ZWFycyAqIDEyO1xuXG4gICAgICAgIHRoaXMuX2RhdGEgPSB7fTtcblxuICAgICAgICB0aGlzLl9sb2NhbGUgPSBnZXRMb2NhbGUoKTtcblxuICAgICAgICB0aGlzLl9idWJibGUoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0R1cmF0aW9uKG9iaikge1xuICAgICAgICByZXR1cm4gb2JqIGluc3RhbmNlb2YgRHVyYXRpb247XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWJzUm91bmQobnVtYmVyKSB7XG4gICAgICAgIGlmIChudW1iZXIgPCAwKSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5yb3VuZCgtMSAqIG51bWJlcikgKiAtMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLnJvdW5kKG51bWJlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBjb21wYXJlIHR3byBhcnJheXMsIHJldHVybiB0aGUgbnVtYmVyIG9mIGRpZmZlcmVuY2VzXG4gICAgZnVuY3Rpb24gY29tcGFyZUFycmF5cyhhcnJheTEsIGFycmF5MiwgZG9udENvbnZlcnQpIHtcbiAgICAgICAgdmFyIGxlbiA9IE1hdGgubWluKGFycmF5MS5sZW5ndGgsIGFycmF5Mi5sZW5ndGgpLFxuICAgICAgICAgICAgbGVuZ3RoRGlmZiA9IE1hdGguYWJzKGFycmF5MS5sZW5ndGggLSBhcnJheTIubGVuZ3RoKSxcbiAgICAgICAgICAgIGRpZmZzID0gMCxcbiAgICAgICAgICAgIGk7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIChkb250Q29udmVydCAmJiBhcnJheTFbaV0gIT09IGFycmF5MltpXSkgfHxcbiAgICAgICAgICAgICAgICAoIWRvbnRDb252ZXJ0ICYmIHRvSW50KGFycmF5MVtpXSkgIT09IHRvSW50KGFycmF5MltpXSkpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBkaWZmcysrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkaWZmcyArIGxlbmd0aERpZmY7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgZnVuY3Rpb24gb2Zmc2V0KHRva2VuLCBzZXBhcmF0b3IpIHtcbiAgICAgICAgYWRkRm9ybWF0VG9rZW4odG9rZW4sIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBvZmZzZXQgPSB0aGlzLnV0Y09mZnNldCgpLFxuICAgICAgICAgICAgICAgIHNpZ24gPSAnKyc7XG4gICAgICAgICAgICBpZiAob2Zmc2V0IDwgMCkge1xuICAgICAgICAgICAgICAgIG9mZnNldCA9IC1vZmZzZXQ7XG4gICAgICAgICAgICAgICAgc2lnbiA9ICctJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgc2lnbiArXG4gICAgICAgICAgICAgICAgemVyb0ZpbGwofn4ob2Zmc2V0IC8gNjApLCAyKSArXG4gICAgICAgICAgICAgICAgc2VwYXJhdG9yICtcbiAgICAgICAgICAgICAgICB6ZXJvRmlsbCh+fm9mZnNldCAlIDYwLCAyKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb2Zmc2V0KCdaJywgJzonKTtcbiAgICBvZmZzZXQoJ1paJywgJycpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignWicsIG1hdGNoU2hvcnRPZmZzZXQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1paJywgbWF0Y2hTaG9ydE9mZnNldCk7XG4gICAgYWRkUGFyc2VUb2tlbihbJ1onLCAnWlonXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5fdXNlVVRDID0gdHJ1ZTtcbiAgICAgICAgY29uZmlnLl90em0gPSBvZmZzZXRGcm9tU3RyaW5nKG1hdGNoU2hvcnRPZmZzZXQsIGlucHV0KTtcbiAgICB9KTtcblxuICAgIC8vIEhFTFBFUlNcblxuICAgIC8vIHRpbWV6b25lIGNodW5rZXJcbiAgICAvLyAnKzEwOjAwJyA+IFsnMTAnLCAgJzAwJ11cbiAgICAvLyAnLTE1MzAnICA+IFsnLTE1JywgJzMwJ11cbiAgICB2YXIgY2h1bmtPZmZzZXQgPSAvKFtcXCtcXC1dfFxcZFxcZCkvZ2k7XG5cbiAgICBmdW5jdGlvbiBvZmZzZXRGcm9tU3RyaW5nKG1hdGNoZXIsIHN0cmluZykge1xuICAgICAgICB2YXIgbWF0Y2hlcyA9IChzdHJpbmcgfHwgJycpLm1hdGNoKG1hdGNoZXIpLFxuICAgICAgICAgICAgY2h1bmssXG4gICAgICAgICAgICBwYXJ0cyxcbiAgICAgICAgICAgIG1pbnV0ZXM7XG5cbiAgICAgICAgaWYgKG1hdGNoZXMgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY2h1bmsgPSBtYXRjaGVzW21hdGNoZXMubGVuZ3RoIC0gMV0gfHwgW107XG4gICAgICAgIHBhcnRzID0gKGNodW5rICsgJycpLm1hdGNoKGNodW5rT2Zmc2V0KSB8fCBbJy0nLCAwLCAwXTtcbiAgICAgICAgbWludXRlcyA9ICsocGFydHNbMV0gKiA2MCkgKyB0b0ludChwYXJ0c1syXSk7XG5cbiAgICAgICAgcmV0dXJuIG1pbnV0ZXMgPT09IDAgPyAwIDogcGFydHNbMF0gPT09ICcrJyA/IG1pbnV0ZXMgOiAtbWludXRlcztcbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gYSBtb21lbnQgZnJvbSBpbnB1dCwgdGhhdCBpcyBsb2NhbC91dGMvem9uZSBlcXVpdmFsZW50IHRvIG1vZGVsLlxuICAgIGZ1bmN0aW9uIGNsb25lV2l0aE9mZnNldChpbnB1dCwgbW9kZWwpIHtcbiAgICAgICAgdmFyIHJlcywgZGlmZjtcbiAgICAgICAgaWYgKG1vZGVsLl9pc1VUQykge1xuICAgICAgICAgICAgcmVzID0gbW9kZWwuY2xvbmUoKTtcbiAgICAgICAgICAgIGRpZmYgPVxuICAgICAgICAgICAgICAgIChpc01vbWVudChpbnB1dCkgfHwgaXNEYXRlKGlucHV0KVxuICAgICAgICAgICAgICAgICAgICA/IGlucHV0LnZhbHVlT2YoKVxuICAgICAgICAgICAgICAgICAgICA6IGNyZWF0ZUxvY2FsKGlucHV0KS52YWx1ZU9mKCkpIC0gcmVzLnZhbHVlT2YoKTtcbiAgICAgICAgICAgIC8vIFVzZSBsb3ctbGV2ZWwgYXBpLCBiZWNhdXNlIHRoaXMgZm4gaXMgbG93LWxldmVsIGFwaS5cbiAgICAgICAgICAgIHJlcy5fZC5zZXRUaW1lKHJlcy5fZC52YWx1ZU9mKCkgKyBkaWZmKTtcbiAgICAgICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldChyZXMsIGZhbHNlKTtcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlTG9jYWwoaW5wdXQpLmxvY2FsKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXREYXRlT2Zmc2V0KG0pIHtcbiAgICAgICAgLy8gT24gRmlyZWZveC4yNCBEYXRlI2dldFRpbWV6b25lT2Zmc2V0IHJldHVybnMgYSBmbG9hdGluZyBwb2ludC5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21vbWVudC9tb21lbnQvcHVsbC8xODcxXG4gICAgICAgIHJldHVybiAtTWF0aC5yb3VuZChtLl9kLmdldFRpbWV6b25lT2Zmc2V0KCkpO1xuICAgIH1cblxuICAgIC8vIEhPT0tTXG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdoZW5ldmVyIGEgbW9tZW50IGlzIG11dGF0ZWQuXG4gICAgLy8gSXQgaXMgaW50ZW5kZWQgdG8ga2VlcCB0aGUgb2Zmc2V0IGluIHN5bmMgd2l0aCB0aGUgdGltZXpvbmUuXG4gICAgaG9va3MudXBkYXRlT2Zmc2V0ID0gZnVuY3Rpb24gKCkge307XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICAvLyBrZWVwTG9jYWxUaW1lID0gdHJ1ZSBtZWFucyBvbmx5IGNoYW5nZSB0aGUgdGltZXpvbmUsIHdpdGhvdXRcbiAgICAvLyBhZmZlY3RpbmcgdGhlIGxvY2FsIGhvdXIuIFNvIDU6MzE6MjYgKzAzMDAgLS1bdXRjT2Zmc2V0KDIsIHRydWUpXS0tPlxuICAgIC8vIDU6MzE6MjYgKzAyMDAgSXQgaXMgcG9zc2libGUgdGhhdCA1OjMxOjI2IGRvZXNuJ3QgZXhpc3Qgd2l0aCBvZmZzZXRcbiAgICAvLyArMDIwMCwgc28gd2UgYWRqdXN0IHRoZSB0aW1lIGFzIG5lZWRlZCwgdG8gYmUgdmFsaWQuXG4gICAgLy9cbiAgICAvLyBLZWVwaW5nIHRoZSB0aW1lIGFjdHVhbGx5IGFkZHMvc3VidHJhY3RzIChvbmUgaG91cilcbiAgICAvLyBmcm9tIHRoZSBhY3R1YWwgcmVwcmVzZW50ZWQgdGltZS4gVGhhdCBpcyB3aHkgd2UgY2FsbCB1cGRhdGVPZmZzZXRcbiAgICAvLyBhIHNlY29uZCB0aW1lLiBJbiBjYXNlIGl0IHdhbnRzIHVzIHRvIGNoYW5nZSB0aGUgb2Zmc2V0IGFnYWluXG4gICAgLy8gX2NoYW5nZUluUHJvZ3Jlc3MgPT0gdHJ1ZSBjYXNlLCB0aGVuIHdlIGhhdmUgdG8gYWRqdXN0LCBiZWNhdXNlXG4gICAgLy8gdGhlcmUgaXMgbm8gc3VjaCB0aW1lIGluIHRoZSBnaXZlbiB0aW1lem9uZS5cbiAgICBmdW5jdGlvbiBnZXRTZXRPZmZzZXQoaW5wdXQsIGtlZXBMb2NhbFRpbWUsIGtlZXBNaW51dGVzKSB7XG4gICAgICAgIHZhciBvZmZzZXQgPSB0aGlzLl9vZmZzZXQgfHwgMCxcbiAgICAgICAgICAgIGxvY2FsQWRqdXN0O1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQgIT0gbnVsbCA/IHRoaXMgOiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgaW5wdXQgPSBvZmZzZXRGcm9tU3RyaW5nKG1hdGNoU2hvcnRPZmZzZXQsIGlucHV0KTtcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChNYXRoLmFicyhpbnB1dCkgPCAxNiAmJiAha2VlcE1pbnV0ZXMpIHtcbiAgICAgICAgICAgICAgICBpbnB1dCA9IGlucHV0ICogNjA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2lzVVRDICYmIGtlZXBMb2NhbFRpbWUpIHtcbiAgICAgICAgICAgICAgICBsb2NhbEFkanVzdCA9IGdldERhdGVPZmZzZXQodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9vZmZzZXQgPSBpbnB1dDtcbiAgICAgICAgICAgIHRoaXMuX2lzVVRDID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChsb2NhbEFkanVzdCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGQobG9jYWxBZGp1c3QsICdtJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob2Zmc2V0ICE9PSBpbnB1dCkge1xuICAgICAgICAgICAgICAgIGlmICgha2VlcExvY2FsVGltZSB8fCB0aGlzLl9jaGFuZ2VJblByb2dyZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIGFkZFN1YnRyYWN0KFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZUR1cmF0aW9uKGlucHV0IC0gb2Zmc2V0LCAnbScpLFxuICAgICAgICAgICAgICAgICAgICAgICAgMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5fY2hhbmdlSW5Qcm9ncmVzcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFuZ2VJblByb2dyZXNzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHRoaXMsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFuZ2VJblByb2dyZXNzID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9pc1VUQyA/IG9mZnNldCA6IGdldERhdGVPZmZzZXQodGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRab25lKGlucHV0LCBrZWVwTG9jYWxUaW1lKSB7XG4gICAgICAgIGlmIChpbnB1dCAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGlucHV0ID0gLWlucHV0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnV0Y09mZnNldChpbnB1dCwga2VlcExvY2FsVGltZSk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIC10aGlzLnV0Y09mZnNldCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0T2Zmc2V0VG9VVEMoa2VlcExvY2FsVGltZSkge1xuICAgICAgICByZXR1cm4gdGhpcy51dGNPZmZzZXQoMCwga2VlcExvY2FsVGltZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0T2Zmc2V0VG9Mb2NhbChrZWVwTG9jYWxUaW1lKSB7XG4gICAgICAgIGlmICh0aGlzLl9pc1VUQykge1xuICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoMCwga2VlcExvY2FsVGltZSk7XG4gICAgICAgICAgICB0aGlzLl9pc1VUQyA9IGZhbHNlO1xuXG4gICAgICAgICAgICBpZiAoa2VlcExvY2FsVGltZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3VidHJhY3QoZ2V0RGF0ZU9mZnNldCh0aGlzKSwgJ20nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRPZmZzZXRUb1BhcnNlZE9mZnNldCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX3R6bSAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLnV0Y09mZnNldCh0aGlzLl90em0sIGZhbHNlLCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5faSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHZhciB0Wm9uZSA9IG9mZnNldEZyb21TdHJpbmcobWF0Y2hPZmZzZXQsIHRoaXMuX2kpO1xuICAgICAgICAgICAgaWYgKHRab25lICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnV0Y09mZnNldCh0Wm9uZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KDAsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhc0FsaWduZWRIb3VyT2Zmc2V0KGlucHV0KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpbnB1dCA9IGlucHV0ID8gY3JlYXRlTG9jYWwoaW5wdXQpLnV0Y09mZnNldCgpIDogMDtcblxuICAgICAgICByZXR1cm4gKHRoaXMudXRjT2Zmc2V0KCkgLSBpbnB1dCkgJSA2MCA9PT0gMDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0RheWxpZ2h0U2F2aW5nVGltZSgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KCkgPiB0aGlzLmNsb25lKCkubW9udGgoMCkudXRjT2Zmc2V0KCkgfHxcbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KCkgPiB0aGlzLmNsb25lKCkubW9udGgoNSkudXRjT2Zmc2V0KClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0RheWxpZ2h0U2F2aW5nVGltZVNoaWZ0ZWQoKSB7XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQodGhpcy5faXNEU1RTaGlmdGVkKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzRFNUU2hpZnRlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjID0ge30sXG4gICAgICAgICAgICBvdGhlcjtcblxuICAgICAgICBjb3B5Q29uZmlnKGMsIHRoaXMpO1xuICAgICAgICBjID0gcHJlcGFyZUNvbmZpZyhjKTtcblxuICAgICAgICBpZiAoYy5fYSkge1xuICAgICAgICAgICAgb3RoZXIgPSBjLl9pc1VUQyA/IGNyZWF0ZVVUQyhjLl9hKSA6IGNyZWF0ZUxvY2FsKGMuX2EpO1xuICAgICAgICAgICAgdGhpcy5faXNEU1RTaGlmdGVkID1cbiAgICAgICAgICAgICAgICB0aGlzLmlzVmFsaWQoKSAmJiBjb21wYXJlQXJyYXlzKGMuX2EsIG90aGVyLnRvQXJyYXkoKSkgPiAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5faXNEU1RTaGlmdGVkID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5faXNEU1RTaGlmdGVkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTG9jYWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/ICF0aGlzLl9pc1VUQyA6IGZhbHNlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVXRjT2Zmc2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgPyB0aGlzLl9pc1VUQyA6IGZhbHNlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVXRjKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgPyB0aGlzLl9pc1VUQyAmJiB0aGlzLl9vZmZzZXQgPT09IDAgOiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBBU1AuTkVUIGpzb24gZGF0ZSBmb3JtYXQgcmVnZXhcbiAgICB2YXIgYXNwTmV0UmVnZXggPSAvXigtfFxcKyk/KD86KFxcZCopWy4gXSk/KFxcZCspOihcXGQrKSg/OjooXFxkKykoXFwuXFxkKik/KT8kLyxcbiAgICAgICAgLy8gZnJvbSBodHRwOi8vZG9jcy5jbG9zdXJlLWxpYnJhcnkuZ29vZ2xlY29kZS5jb20vZ2l0L2Nsb3N1cmVfZ29vZ19kYXRlX2RhdGUuanMuc291cmNlLmh0bWxcbiAgICAgICAgLy8gc29tZXdoYXQgbW9yZSBpbiBsaW5lIHdpdGggNC40LjMuMiAyMDA0IHNwZWMsIGJ1dCBhbGxvd3MgZGVjaW1hbCBhbnl3aGVyZVxuICAgICAgICAvLyBhbmQgZnVydGhlciBtb2RpZmllZCB0byBhbGxvdyBmb3Igc3RyaW5ncyBjb250YWluaW5nIGJvdGggd2VlayBhbmQgZGF5XG4gICAgICAgIGlzb1JlZ2V4ID1cbiAgICAgICAgICAgIC9eKC18XFwrKT9QKD86KFstK10/WzAtOSwuXSopWSk/KD86KFstK10/WzAtOSwuXSopTSk/KD86KFstK10/WzAtOSwuXSopVyk/KD86KFstK10/WzAtOSwuXSopRCk/KD86VCg/OihbLStdP1swLTksLl0qKUgpPyg/OihbLStdP1swLTksLl0qKU0pPyg/OihbLStdP1swLTksLl0qKVMpPyk/JC87XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVEdXJhdGlvbihpbnB1dCwga2V5KSB7XG4gICAgICAgIHZhciBkdXJhdGlvbiA9IGlucHV0LFxuICAgICAgICAgICAgLy8gbWF0Y2hpbmcgYWdhaW5zdCByZWdleHAgaXMgZXhwZW5zaXZlLCBkbyBpdCBvbiBkZW1hbmRcbiAgICAgICAgICAgIG1hdGNoID0gbnVsbCxcbiAgICAgICAgICAgIHNpZ24sXG4gICAgICAgICAgICByZXQsXG4gICAgICAgICAgICBkaWZmUmVzO1xuXG4gICAgICAgIGlmIChpc0R1cmF0aW9uKGlucHV0KSkge1xuICAgICAgICAgICAgZHVyYXRpb24gPSB7XG4gICAgICAgICAgICAgICAgbXM6IGlucHV0Ll9taWxsaXNlY29uZHMsXG4gICAgICAgICAgICAgICAgZDogaW5wdXQuX2RheXMsXG4gICAgICAgICAgICAgICAgTTogaW5wdXQuX21vbnRocyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoaXNOdW1iZXIoaW5wdXQpIHx8ICFpc05hTigraW5wdXQpKSB7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHt9O1xuICAgICAgICAgICAgaWYgKGtleSkge1xuICAgICAgICAgICAgICAgIGR1cmF0aW9uW2tleV0gPSAraW5wdXQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGR1cmF0aW9uLm1pbGxpc2Vjb25kcyA9ICtpbnB1dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICgobWF0Y2ggPSBhc3BOZXRSZWdleC5leGVjKGlucHV0KSkpIHtcbiAgICAgICAgICAgIHNpZ24gPSBtYXRjaFsxXSA9PT0gJy0nID8gLTEgOiAxO1xuICAgICAgICAgICAgZHVyYXRpb24gPSB7XG4gICAgICAgICAgICAgICAgeTogMCxcbiAgICAgICAgICAgICAgICBkOiB0b0ludChtYXRjaFtEQVRFXSkgKiBzaWduLFxuICAgICAgICAgICAgICAgIGg6IHRvSW50KG1hdGNoW0hPVVJdKSAqIHNpZ24sXG4gICAgICAgICAgICAgICAgbTogdG9JbnQobWF0Y2hbTUlOVVRFXSkgKiBzaWduLFxuICAgICAgICAgICAgICAgIHM6IHRvSW50KG1hdGNoW1NFQ09ORF0pICogc2lnbixcbiAgICAgICAgICAgICAgICBtczogdG9JbnQoYWJzUm91bmQobWF0Y2hbTUlMTElTRUNPTkRdICogMTAwMCkpICogc2lnbiwgLy8gdGhlIG1pbGxpc2Vjb25kIGRlY2ltYWwgcG9pbnQgaXMgaW5jbHVkZWQgaW4gdGhlIG1hdGNoXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKChtYXRjaCA9IGlzb1JlZ2V4LmV4ZWMoaW5wdXQpKSkge1xuICAgICAgICAgICAgc2lnbiA9IG1hdGNoWzFdID09PSAnLScgPyAtMSA6IDE7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHtcbiAgICAgICAgICAgICAgICB5OiBwYXJzZUlzbyhtYXRjaFsyXSwgc2lnbiksXG4gICAgICAgICAgICAgICAgTTogcGFyc2VJc28obWF0Y2hbM10sIHNpZ24pLFxuICAgICAgICAgICAgICAgIHc6IHBhcnNlSXNvKG1hdGNoWzRdLCBzaWduKSxcbiAgICAgICAgICAgICAgICBkOiBwYXJzZUlzbyhtYXRjaFs1XSwgc2lnbiksXG4gICAgICAgICAgICAgICAgaDogcGFyc2VJc28obWF0Y2hbNl0sIHNpZ24pLFxuICAgICAgICAgICAgICAgIG06IHBhcnNlSXNvKG1hdGNoWzddLCBzaWduKSxcbiAgICAgICAgICAgICAgICBzOiBwYXJzZUlzbyhtYXRjaFs4XSwgc2lnbiksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKGR1cmF0aW9uID09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIGNoZWNrcyBmb3IgbnVsbCBvciB1bmRlZmluZWRcbiAgICAgICAgICAgIGR1cmF0aW9uID0ge307XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICB0eXBlb2YgZHVyYXRpb24gPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgICAoJ2Zyb20nIGluIGR1cmF0aW9uIHx8ICd0bycgaW4gZHVyYXRpb24pXG4gICAgICAgICkge1xuICAgICAgICAgICAgZGlmZlJlcyA9IG1vbWVudHNEaWZmZXJlbmNlKFxuICAgICAgICAgICAgICAgIGNyZWF0ZUxvY2FsKGR1cmF0aW9uLmZyb20pLFxuICAgICAgICAgICAgICAgIGNyZWF0ZUxvY2FsKGR1cmF0aW9uLnRvKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgZHVyYXRpb24gPSB7fTtcbiAgICAgICAgICAgIGR1cmF0aW9uLm1zID0gZGlmZlJlcy5taWxsaXNlY29uZHM7XG4gICAgICAgICAgICBkdXJhdGlvbi5NID0gZGlmZlJlcy5tb250aHM7XG4gICAgICAgIH1cblxuICAgICAgICByZXQgPSBuZXcgRHVyYXRpb24oZHVyYXRpb24pO1xuXG4gICAgICAgIGlmIChpc0R1cmF0aW9uKGlucHV0KSAmJiBoYXNPd25Qcm9wKGlucHV0LCAnX2xvY2FsZScpKSB7XG4gICAgICAgICAgICByZXQuX2xvY2FsZSA9IGlucHV0Ll9sb2NhbGU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNEdXJhdGlvbihpbnB1dCkgJiYgaGFzT3duUHJvcChpbnB1dCwgJ19pc1ZhbGlkJykpIHtcbiAgICAgICAgICAgIHJldC5faXNWYWxpZCA9IGlucHV0Ll9pc1ZhbGlkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG5cbiAgICBjcmVhdGVEdXJhdGlvbi5mbiA9IER1cmF0aW9uLnByb3RvdHlwZTtcbiAgICBjcmVhdGVEdXJhdGlvbi5pbnZhbGlkID0gY3JlYXRlSW52YWxpZCQxO1xuXG4gICAgZnVuY3Rpb24gcGFyc2VJc28oaW5wLCBzaWduKSB7XG4gICAgICAgIC8vIFdlJ2Qgbm9ybWFsbHkgdXNlIH5+aW5wIGZvciB0aGlzLCBidXQgdW5mb3J0dW5hdGVseSBpdCBhbHNvXG4gICAgICAgIC8vIGNvbnZlcnRzIGZsb2F0cyB0byBpbnRzLlxuICAgICAgICAvLyBpbnAgbWF5IGJlIHVuZGVmaW5lZCwgc28gY2FyZWZ1bCBjYWxsaW5nIHJlcGxhY2Ugb24gaXQuXG4gICAgICAgIHZhciByZXMgPSBpbnAgJiYgcGFyc2VGbG9hdChpbnAucmVwbGFjZSgnLCcsICcuJykpO1xuICAgICAgICAvLyBhcHBseSBzaWduIHdoaWxlIHdlJ3JlIGF0IGl0XG4gICAgICAgIHJldHVybiAoaXNOYU4ocmVzKSA/IDAgOiByZXMpICogc2lnbjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwb3NpdGl2ZU1vbWVudHNEaWZmZXJlbmNlKGJhc2UsIG90aGVyKSB7XG4gICAgICAgIHZhciByZXMgPSB7fTtcblxuICAgICAgICByZXMubW9udGhzID1cbiAgICAgICAgICAgIG90aGVyLm1vbnRoKCkgLSBiYXNlLm1vbnRoKCkgKyAob3RoZXIueWVhcigpIC0gYmFzZS55ZWFyKCkpICogMTI7XG4gICAgICAgIGlmIChiYXNlLmNsb25lKCkuYWRkKHJlcy5tb250aHMsICdNJykuaXNBZnRlcihvdGhlcikpIHtcbiAgICAgICAgICAgIC0tcmVzLm1vbnRocztcbiAgICAgICAgfVxuXG4gICAgICAgIHJlcy5taWxsaXNlY29uZHMgPSArb3RoZXIgLSArYmFzZS5jbG9uZSgpLmFkZChyZXMubW9udGhzLCAnTScpO1xuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW9tZW50c0RpZmZlcmVuY2UoYmFzZSwgb3RoZXIpIHtcbiAgICAgICAgdmFyIHJlcztcbiAgICAgICAgaWYgKCEoYmFzZS5pc1ZhbGlkKCkgJiYgb3RoZXIuaXNWYWxpZCgpKSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgbWlsbGlzZWNvbmRzOiAwLCBtb250aHM6IDAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIG90aGVyID0gY2xvbmVXaXRoT2Zmc2V0KG90aGVyLCBiYXNlKTtcbiAgICAgICAgaWYgKGJhc2UuaXNCZWZvcmUob3RoZXIpKSB7XG4gICAgICAgICAgICByZXMgPSBwb3NpdGl2ZU1vbWVudHNEaWZmZXJlbmNlKGJhc2UsIG90aGVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlcyA9IHBvc2l0aXZlTW9tZW50c0RpZmZlcmVuY2Uob3RoZXIsIGJhc2UpO1xuICAgICAgICAgICAgcmVzLm1pbGxpc2Vjb25kcyA9IC1yZXMubWlsbGlzZWNvbmRzO1xuICAgICAgICAgICAgcmVzLm1vbnRocyA9IC1yZXMubW9udGhzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICAvLyBUT0RPOiByZW1vdmUgJ25hbWUnIGFyZyBhZnRlciBkZXByZWNhdGlvbiBpcyByZW1vdmVkXG4gICAgZnVuY3Rpb24gY3JlYXRlQWRkZXIoZGlyZWN0aW9uLCBuYW1lKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsLCBwZXJpb2QpIHtcbiAgICAgICAgICAgIHZhciBkdXIsIHRtcDtcbiAgICAgICAgICAgIC8vaW52ZXJ0IHRoZSBhcmd1bWVudHMsIGJ1dCBjb21wbGFpbiBhYm91dCBpdFxuICAgICAgICAgICAgaWYgKHBlcmlvZCAhPT0gbnVsbCAmJiAhaXNOYU4oK3BlcmlvZCkpIHtcbiAgICAgICAgICAgICAgICBkZXByZWNhdGVTaW1wbGUoXG4gICAgICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICdtb21lbnQoKS4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJyhwZXJpb2QsIG51bWJlcikgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBtb21lbnQoKS4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJyhudW1iZXIsIHBlcmlvZCkuICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ1NlZSBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2FkZC1pbnZlcnRlZC1wYXJhbS8gZm9yIG1vcmUgaW5mby4nXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0bXAgPSB2YWw7XG4gICAgICAgICAgICAgICAgdmFsID0gcGVyaW9kO1xuICAgICAgICAgICAgICAgIHBlcmlvZCA9IHRtcDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZHVyID0gY3JlYXRlRHVyYXRpb24odmFsLCBwZXJpb2QpO1xuICAgICAgICAgICAgYWRkU3VidHJhY3QodGhpcywgZHVyLCBkaXJlY3Rpb24pO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkU3VidHJhY3QobW9tLCBkdXJhdGlvbiwgaXNBZGRpbmcsIHVwZGF0ZU9mZnNldCkge1xuICAgICAgICB2YXIgbWlsbGlzZWNvbmRzID0gZHVyYXRpb24uX21pbGxpc2Vjb25kcyxcbiAgICAgICAgICAgIGRheXMgPSBhYnNSb3VuZChkdXJhdGlvbi5fZGF5cyksXG4gICAgICAgICAgICBtb250aHMgPSBhYnNSb3VuZChkdXJhdGlvbi5fbW9udGhzKTtcblxuICAgICAgICBpZiAoIW1vbS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIC8vIE5vIG9wXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB1cGRhdGVPZmZzZXQgPSB1cGRhdGVPZmZzZXQgPT0gbnVsbCA/IHRydWUgOiB1cGRhdGVPZmZzZXQ7XG5cbiAgICAgICAgaWYgKG1vbnRocykge1xuICAgICAgICAgICAgc2V0TW9udGgobW9tLCBnZXQobW9tLCAnTW9udGgnKSArIG1vbnRocyAqIGlzQWRkaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF5cykge1xuICAgICAgICAgICAgc2V0JDEobW9tLCAnRGF0ZScsIGdldChtb20sICdEYXRlJykgKyBkYXlzICogaXNBZGRpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtaWxsaXNlY29uZHMpIHtcbiAgICAgICAgICAgIG1vbS5fZC5zZXRUaW1lKG1vbS5fZC52YWx1ZU9mKCkgKyBtaWxsaXNlY29uZHMgKiBpc0FkZGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVwZGF0ZU9mZnNldCkge1xuICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KG1vbSwgZGF5cyB8fCBtb250aHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGFkZCA9IGNyZWF0ZUFkZGVyKDEsICdhZGQnKSxcbiAgICAgICAgc3VidHJhY3QgPSBjcmVhdGVBZGRlcigtMSwgJ3N1YnRyYWN0Jyk7XG5cbiAgICBmdW5jdGlvbiBpc1N0cmluZyhpbnB1dCkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJyB8fCBpbnB1dCBpbnN0YW5jZW9mIFN0cmluZztcbiAgICB9XG5cbiAgICAvLyB0eXBlIE1vbWVudElucHV0ID0gTW9tZW50IHwgRGF0ZSB8IHN0cmluZyB8IG51bWJlciB8IChudW1iZXIgfCBzdHJpbmcpW10gfCBNb21lbnRJbnB1dE9iamVjdCB8IHZvaWQ7IC8vIG51bGwgfCB1bmRlZmluZWRcbiAgICBmdW5jdGlvbiBpc01vbWVudElucHV0KGlucHV0KSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBpc01vbWVudChpbnB1dCkgfHxcbiAgICAgICAgICAgIGlzRGF0ZShpbnB1dCkgfHxcbiAgICAgICAgICAgIGlzU3RyaW5nKGlucHV0KSB8fFxuICAgICAgICAgICAgaXNOdW1iZXIoaW5wdXQpIHx8XG4gICAgICAgICAgICBpc051bWJlck9yU3RyaW5nQXJyYXkoaW5wdXQpIHx8XG4gICAgICAgICAgICBpc01vbWVudElucHV0T2JqZWN0KGlucHV0KSB8fFxuICAgICAgICAgICAgaW5wdXQgPT09IG51bGwgfHxcbiAgICAgICAgICAgIGlucHV0ID09PSB1bmRlZmluZWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc01vbWVudElucHV0T2JqZWN0KGlucHV0KSB7XG4gICAgICAgIHZhciBvYmplY3RUZXN0ID0gaXNPYmplY3QoaW5wdXQpICYmICFpc09iamVjdEVtcHR5KGlucHV0KSxcbiAgICAgICAgICAgIHByb3BlcnR5VGVzdCA9IGZhbHNlLFxuICAgICAgICAgICAgcHJvcGVydGllcyA9IFtcbiAgICAgICAgICAgICAgICAneWVhcnMnLFxuICAgICAgICAgICAgICAgICd5ZWFyJyxcbiAgICAgICAgICAgICAgICAneScsXG4gICAgICAgICAgICAgICAgJ21vbnRocycsXG4gICAgICAgICAgICAgICAgJ21vbnRoJyxcbiAgICAgICAgICAgICAgICAnTScsXG4gICAgICAgICAgICAgICAgJ2RheXMnLFxuICAgICAgICAgICAgICAgICdkYXknLFxuICAgICAgICAgICAgICAgICdkJyxcbiAgICAgICAgICAgICAgICAnZGF0ZXMnLFxuICAgICAgICAgICAgICAgICdkYXRlJyxcbiAgICAgICAgICAgICAgICAnRCcsXG4gICAgICAgICAgICAgICAgJ2hvdXJzJyxcbiAgICAgICAgICAgICAgICAnaG91cicsXG4gICAgICAgICAgICAgICAgJ2gnLFxuICAgICAgICAgICAgICAgICdtaW51dGVzJyxcbiAgICAgICAgICAgICAgICAnbWludXRlJyxcbiAgICAgICAgICAgICAgICAnbScsXG4gICAgICAgICAgICAgICAgJ3NlY29uZHMnLFxuICAgICAgICAgICAgICAgICdzZWNvbmQnLFxuICAgICAgICAgICAgICAgICdzJyxcbiAgICAgICAgICAgICAgICAnbWlsbGlzZWNvbmRzJyxcbiAgICAgICAgICAgICAgICAnbWlsbGlzZWNvbmQnLFxuICAgICAgICAgICAgICAgICdtcycsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIHByb3BlcnR5LFxuICAgICAgICAgICAgcHJvcGVydHlMZW4gPSBwcm9wZXJ0aWVzLmxlbmd0aDtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcHJvcGVydHlMZW47IGkgKz0gMSkge1xuICAgICAgICAgICAgcHJvcGVydHkgPSBwcm9wZXJ0aWVzW2ldO1xuICAgICAgICAgICAgcHJvcGVydHlUZXN0ID0gcHJvcGVydHlUZXN0IHx8IGhhc093blByb3AoaW5wdXQsIHByb3BlcnR5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvYmplY3RUZXN0ICYmIHByb3BlcnR5VGVzdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc051bWJlck9yU3RyaW5nQXJyYXkoaW5wdXQpIHtcbiAgICAgICAgdmFyIGFycmF5VGVzdCA9IGlzQXJyYXkoaW5wdXQpLFxuICAgICAgICAgICAgZGF0YVR5cGVUZXN0ID0gZmFsc2U7XG4gICAgICAgIGlmIChhcnJheVRlc3QpIHtcbiAgICAgICAgICAgIGRhdGFUeXBlVGVzdCA9XG4gICAgICAgICAgICAgICAgaW5wdXQuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAhaXNOdW1iZXIoaXRlbSkgJiYgaXNTdHJpbmcoaW5wdXQpO1xuICAgICAgICAgICAgICAgIH0pLmxlbmd0aCA9PT0gMDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXJyYXlUZXN0ICYmIGRhdGFUeXBlVGVzdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0NhbGVuZGFyU3BlYyhpbnB1dCkge1xuICAgICAgICB2YXIgb2JqZWN0VGVzdCA9IGlzT2JqZWN0KGlucHV0KSAmJiAhaXNPYmplY3RFbXB0eShpbnB1dCksXG4gICAgICAgICAgICBwcm9wZXJ0eVRlc3QgPSBmYWxzZSxcbiAgICAgICAgICAgIHByb3BlcnRpZXMgPSBbXG4gICAgICAgICAgICAgICAgJ3NhbWVEYXknLFxuICAgICAgICAgICAgICAgICduZXh0RGF5JyxcbiAgICAgICAgICAgICAgICAnbGFzdERheScsXG4gICAgICAgICAgICAgICAgJ25leHRXZWVrJyxcbiAgICAgICAgICAgICAgICAnbGFzdFdlZWsnLFxuICAgICAgICAgICAgICAgICdzYW1lRWxzZScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIHByb3BlcnR5O1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbaV07XG4gICAgICAgICAgICBwcm9wZXJ0eVRlc3QgPSBwcm9wZXJ0eVRlc3QgfHwgaGFzT3duUHJvcChpbnB1dCwgcHJvcGVydHkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9iamVjdFRlc3QgJiYgcHJvcGVydHlUZXN0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldENhbGVuZGFyRm9ybWF0KG15TW9tZW50LCBub3cpIHtcbiAgICAgICAgdmFyIGRpZmYgPSBteU1vbWVudC5kaWZmKG5vdywgJ2RheXMnLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIGRpZmYgPCAtNlxuICAgICAgICAgICAgPyAnc2FtZUVsc2UnXG4gICAgICAgICAgICA6IGRpZmYgPCAtMVxuICAgICAgICAgICAgICA/ICdsYXN0V2VlaydcbiAgICAgICAgICAgICAgOiBkaWZmIDwgMFxuICAgICAgICAgICAgICAgID8gJ2xhc3REYXknXG4gICAgICAgICAgICAgICAgOiBkaWZmIDwgMVxuICAgICAgICAgICAgICAgICAgPyAnc2FtZURheSdcbiAgICAgICAgICAgICAgICAgIDogZGlmZiA8IDJcbiAgICAgICAgICAgICAgICAgICAgPyAnbmV4dERheSdcbiAgICAgICAgICAgICAgICAgICAgOiBkaWZmIDwgN1xuICAgICAgICAgICAgICAgICAgICAgID8gJ25leHRXZWVrJ1xuICAgICAgICAgICAgICAgICAgICAgIDogJ3NhbWVFbHNlJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjYWxlbmRhciQxKHRpbWUsIGZvcm1hdHMpIHtcbiAgICAgICAgLy8gU3VwcG9ydCBmb3Igc2luZ2xlIHBhcmFtZXRlciwgZm9ybWF0cyBvbmx5IG92ZXJsb2FkIHRvIHRoZSBjYWxlbmRhciBmdW5jdGlvblxuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgaWYgKCFhcmd1bWVudHNbMF0pIHtcbiAgICAgICAgICAgICAgICB0aW1lID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGZvcm1hdHMgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzTW9tZW50SW5wdXQoYXJndW1lbnRzWzBdKSkge1xuICAgICAgICAgICAgICAgIHRpbWUgPSBhcmd1bWVudHNbMF07XG4gICAgICAgICAgICAgICAgZm9ybWF0cyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNDYWxlbmRhclNwZWMoYXJndW1lbnRzWzBdKSkge1xuICAgICAgICAgICAgICAgIGZvcm1hdHMgPSBhcmd1bWVudHNbMF07XG4gICAgICAgICAgICAgICAgdGltZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBXZSB3YW50IHRvIGNvbXBhcmUgdGhlIHN0YXJ0IG9mIHRvZGF5LCB2cyB0aGlzLlxuICAgICAgICAvLyBHZXR0aW5nIHN0YXJ0LW9mLXRvZGF5IGRlcGVuZHMgb24gd2hldGhlciB3ZSdyZSBsb2NhbC91dGMvb2Zmc2V0IG9yIG5vdC5cbiAgICAgICAgdmFyIG5vdyA9IHRpbWUgfHwgY3JlYXRlTG9jYWwoKSxcbiAgICAgICAgICAgIHNvZCA9IGNsb25lV2l0aE9mZnNldChub3csIHRoaXMpLnN0YXJ0T2YoJ2RheScpLFxuICAgICAgICAgICAgZm9ybWF0ID0gaG9va3MuY2FsZW5kYXJGb3JtYXQodGhpcywgc29kKSB8fCAnc2FtZUVsc2UnLFxuICAgICAgICAgICAgb3V0cHV0ID1cbiAgICAgICAgICAgICAgICBmb3JtYXRzICYmXG4gICAgICAgICAgICAgICAgKGlzRnVuY3Rpb24oZm9ybWF0c1tmb3JtYXRdKVxuICAgICAgICAgICAgICAgICAgICA/IGZvcm1hdHNbZm9ybWF0XS5jYWxsKHRoaXMsIG5vdylcbiAgICAgICAgICAgICAgICAgICAgOiBmb3JtYXRzW2Zvcm1hdF0pO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1hdChcbiAgICAgICAgICAgIG91dHB1dCB8fCB0aGlzLmxvY2FsZURhdGEoKS5jYWxlbmRhcihmb3JtYXQsIHRoaXMsIGNyZWF0ZUxvY2FsKG5vdykpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2xvbmUoKSB7XG4gICAgICAgIHJldHVybiBuZXcgTW9tZW50KHRoaXMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQWZ0ZXIoaW5wdXQsIHVuaXRzKSB7XG4gICAgICAgIHZhciBsb2NhbElucHV0ID0gaXNNb21lbnQoaW5wdXQpID8gaW5wdXQgOiBjcmVhdGVMb2NhbChpbnB1dCk7XG4gICAgICAgIGlmICghKHRoaXMuaXNWYWxpZCgpICYmIGxvY2FsSW5wdXQuaXNWYWxpZCgpKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpIHx8ICdtaWxsaXNlY29uZCc7XG4gICAgICAgIGlmICh1bml0cyA9PT0gJ21pbGxpc2Vjb25kJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVPZigpID4gbG9jYWxJbnB1dC52YWx1ZU9mKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxJbnB1dC52YWx1ZU9mKCkgPCB0aGlzLmNsb25lKCkuc3RhcnRPZih1bml0cykudmFsdWVPZigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNCZWZvcmUoaW5wdXQsIHVuaXRzKSB7XG4gICAgICAgIHZhciBsb2NhbElucHV0ID0gaXNNb21lbnQoaW5wdXQpID8gaW5wdXQgOiBjcmVhdGVMb2NhbChpbnB1dCk7XG4gICAgICAgIGlmICghKHRoaXMuaXNWYWxpZCgpICYmIGxvY2FsSW5wdXQuaXNWYWxpZCgpKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpIHx8ICdtaWxsaXNlY29uZCc7XG4gICAgICAgIGlmICh1bml0cyA9PT0gJ21pbGxpc2Vjb25kJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVPZigpIDwgbG9jYWxJbnB1dC52YWx1ZU9mKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jbG9uZSgpLmVuZE9mKHVuaXRzKS52YWx1ZU9mKCkgPCBsb2NhbElucHV0LnZhbHVlT2YoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQmV0d2Vlbihmcm9tLCB0bywgdW5pdHMsIGluY2x1c2l2aXR5KSB7XG4gICAgICAgIHZhciBsb2NhbEZyb20gPSBpc01vbWVudChmcm9tKSA/IGZyb20gOiBjcmVhdGVMb2NhbChmcm9tKSxcbiAgICAgICAgICAgIGxvY2FsVG8gPSBpc01vbWVudCh0bykgPyB0byA6IGNyZWF0ZUxvY2FsKHRvKTtcbiAgICAgICAgaWYgKCEodGhpcy5pc1ZhbGlkKCkgJiYgbG9jYWxGcm9tLmlzVmFsaWQoKSAmJiBsb2NhbFRvLmlzVmFsaWQoKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpbmNsdXNpdml0eSA9IGluY2x1c2l2aXR5IHx8ICcoKSc7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAoaW5jbHVzaXZpdHlbMF0gPT09ICcoJ1xuICAgICAgICAgICAgICAgID8gdGhpcy5pc0FmdGVyKGxvY2FsRnJvbSwgdW5pdHMpXG4gICAgICAgICAgICAgICAgOiAhdGhpcy5pc0JlZm9yZShsb2NhbEZyb20sIHVuaXRzKSkgJiZcbiAgICAgICAgICAgIChpbmNsdXNpdml0eVsxXSA9PT0gJyknXG4gICAgICAgICAgICAgICAgPyB0aGlzLmlzQmVmb3JlKGxvY2FsVG8sIHVuaXRzKVxuICAgICAgICAgICAgICAgIDogIXRoaXMuaXNBZnRlcihsb2NhbFRvLCB1bml0cykpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNTYW1lKGlucHV0LCB1bml0cykge1xuICAgICAgICB2YXIgbG9jYWxJbnB1dCA9IGlzTW9tZW50KGlucHV0KSA/IGlucHV0IDogY3JlYXRlTG9jYWwoaW5wdXQpLFxuICAgICAgICAgICAgaW5wdXRNcztcbiAgICAgICAgaWYgKCEodGhpcy5pc1ZhbGlkKCkgJiYgbG9jYWxJbnB1dC5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cykgfHwgJ21pbGxpc2Vjb25kJztcbiAgICAgICAgaWYgKHVuaXRzID09PSAnbWlsbGlzZWNvbmQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCkgPT09IGxvY2FsSW5wdXQudmFsdWVPZigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW5wdXRNcyA9IGxvY2FsSW5wdXQudmFsdWVPZigpO1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICB0aGlzLmNsb25lKCkuc3RhcnRPZih1bml0cykudmFsdWVPZigpIDw9IGlucHV0TXMgJiZcbiAgICAgICAgICAgICAgICBpbnB1dE1zIDw9IHRoaXMuY2xvbmUoKS5lbmRPZih1bml0cykudmFsdWVPZigpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNTYW1lT3JBZnRlcihpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTYW1lKGlucHV0LCB1bml0cykgfHwgdGhpcy5pc0FmdGVyKGlucHV0LCB1bml0cyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNTYW1lT3JCZWZvcmUoaW5wdXQsIHVuaXRzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzU2FtZShpbnB1dCwgdW5pdHMpIHx8IHRoaXMuaXNCZWZvcmUoaW5wdXQsIHVuaXRzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkaWZmKGlucHV0LCB1bml0cywgYXNGbG9hdCkge1xuICAgICAgICB2YXIgdGhhdCwgem9uZURlbHRhLCBvdXRwdXQ7XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoYXQgPSBjbG9uZVdpdGhPZmZzZXQoaW5wdXQsIHRoaXMpO1xuXG4gICAgICAgIGlmICghdGhhdC5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cblxuICAgICAgICB6b25lRGVsdGEgPSAodGhhdC51dGNPZmZzZXQoKSAtIHRoaXMudXRjT2Zmc2V0KCkpICogNmU0O1xuXG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuXG4gICAgICAgIHN3aXRjaCAodW5pdHMpIHtcbiAgICAgICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9IG1vbnRoRGlmZih0aGlzLCB0aGF0KSAvIDEyO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9IG1vbnRoRGlmZih0aGlzLCB0aGF0KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3F1YXJ0ZXInOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9IG1vbnRoRGlmZih0aGlzLCB0aGF0KSAvIDM7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzZWNvbmQnOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9ICh0aGlzIC0gdGhhdCkgLyAxZTM7XG4gICAgICAgICAgICAgICAgYnJlYWs7IC8vIDEwMDBcbiAgICAgICAgICAgIGNhc2UgJ21pbnV0ZSc6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gKHRoaXMgLSB0aGF0KSAvIDZlNDtcbiAgICAgICAgICAgICAgICBicmVhazsgLy8gMTAwMCAqIDYwXG4gICAgICAgICAgICBjYXNlICdob3VyJzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAodGhpcyAtIHRoYXQpIC8gMzZlNTtcbiAgICAgICAgICAgICAgICBicmVhazsgLy8gMTAwMCAqIDYwICogNjBcbiAgICAgICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gKHRoaXMgLSB0aGF0IC0gem9uZURlbHRhKSAvIDg2NGU1O1xuICAgICAgICAgICAgICAgIGJyZWFrOyAvLyAxMDAwICogNjAgKiA2MCAqIDI0LCBuZWdhdGUgZHN0XG4gICAgICAgICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAodGhpcyAtIHRoYXQgLSB6b25lRGVsdGEpIC8gNjA0OGU1O1xuICAgICAgICAgICAgICAgIGJyZWFrOyAvLyAxMDAwICogNjAgKiA2MCAqIDI0ICogNywgbmVnYXRlIGRzdFxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSB0aGlzIC0gdGhhdDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhc0Zsb2F0ID8gb3V0cHV0IDogYWJzRmxvb3Iob3V0cHV0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb250aERpZmYoYSwgYikge1xuICAgICAgICBpZiAoYS5kYXRlKCkgPCBiLmRhdGUoKSkge1xuICAgICAgICAgICAgLy8gZW5kLW9mLW1vbnRoIGNhbGN1bGF0aW9ucyB3b3JrIGNvcnJlY3Qgd2hlbiB0aGUgc3RhcnQgbW9udGggaGFzIG1vcmVcbiAgICAgICAgICAgIC8vIGRheXMgdGhhbiB0aGUgZW5kIG1vbnRoLlxuICAgICAgICAgICAgcmV0dXJuIC1tb250aERpZmYoYiwgYSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZGlmZmVyZW5jZSBpbiBtb250aHNcbiAgICAgICAgdmFyIHdob2xlTW9udGhEaWZmID0gKGIueWVhcigpIC0gYS55ZWFyKCkpICogMTIgKyAoYi5tb250aCgpIC0gYS5tb250aCgpKSxcbiAgICAgICAgICAgIC8vIGIgaXMgaW4gKGFuY2hvciAtIDEgbW9udGgsIGFuY2hvciArIDEgbW9udGgpXG4gICAgICAgICAgICBhbmNob3IgPSBhLmNsb25lKCkuYWRkKHdob2xlTW9udGhEaWZmLCAnbW9udGhzJyksXG4gICAgICAgICAgICBhbmNob3IyLFxuICAgICAgICAgICAgYWRqdXN0O1xuXG4gICAgICAgIGlmIChiIC0gYW5jaG9yIDwgMCkge1xuICAgICAgICAgICAgYW5jaG9yMiA9IGEuY2xvbmUoKS5hZGQod2hvbGVNb250aERpZmYgLSAxLCAnbW9udGhzJyk7XG4gICAgICAgICAgICAvLyBsaW5lYXIgYWNyb3NzIHRoZSBtb250aFxuICAgICAgICAgICAgYWRqdXN0ID0gKGIgLSBhbmNob3IpIC8gKGFuY2hvciAtIGFuY2hvcjIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYW5jaG9yMiA9IGEuY2xvbmUoKS5hZGQod2hvbGVNb250aERpZmYgKyAxLCAnbW9udGhzJyk7XG4gICAgICAgICAgICAvLyBsaW5lYXIgYWNyb3NzIHRoZSBtb250aFxuICAgICAgICAgICAgYWRqdXN0ID0gKGIgLSBhbmNob3IpIC8gKGFuY2hvcjIgLSBhbmNob3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9jaGVjayBmb3IgbmVnYXRpdmUgemVybywgcmV0dXJuIHplcm8gaWYgbmVnYXRpdmUgemVyb1xuICAgICAgICByZXR1cm4gLSh3aG9sZU1vbnRoRGlmZiArIGFkanVzdCkgfHwgMDtcbiAgICB9XG5cbiAgICBob29rcy5kZWZhdWx0Rm9ybWF0ID0gJ1lZWVktTU0tRERUSEg6bW06c3NaJztcbiAgICBob29rcy5kZWZhdWx0Rm9ybWF0VXRjID0gJ1lZWVktTU0tRERUSEg6bW06c3NbWl0nO1xuXG4gICAgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsb25lKCkubG9jYWxlKCdlbicpLmZvcm1hdCgnZGRkIE1NTSBERCBZWVlZIEhIOm1tOnNzIFtHTVRdWlonKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b0lTT1N0cmluZyhrZWVwT2Zmc2V0KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHZhciB1dGMgPSBrZWVwT2Zmc2V0ICE9PSB0cnVlLFxuICAgICAgICAgICAgbSA9IHV0YyA/IHRoaXMuY2xvbmUoKS51dGMoKSA6IHRoaXM7XG4gICAgICAgIGlmIChtLnllYXIoKSA8IDAgfHwgbS55ZWFyKCkgPiA5OTk5KSB7XG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0TW9tZW50KFxuICAgICAgICAgICAgICAgIG0sXG4gICAgICAgICAgICAgICAgdXRjXG4gICAgICAgICAgICAgICAgICAgID8gJ1lZWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1taXSdcbiAgICAgICAgICAgICAgICAgICAgOiAnWVlZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTWidcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcpKSB7XG4gICAgICAgICAgICAvLyBuYXRpdmUgaW1wbGVtZW50YXRpb24gaXMgfjUweCBmYXN0ZXIsIHVzZSBpdCB3aGVuIHdlIGNhblxuICAgICAgICAgICAgaWYgKHV0Yykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRvRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSh0aGlzLnZhbHVlT2YoKSArIHRoaXMudXRjT2Zmc2V0KCkgKiA2MCAqIDEwMDApXG4gICAgICAgICAgICAgICAgICAgIC50b0lTT1N0cmluZygpXG4gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCdaJywgZm9ybWF0TW9tZW50KG0sICdaJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmb3JtYXRNb21lbnQoXG4gICAgICAgICAgICBtLFxuICAgICAgICAgICAgdXRjID8gJ1lZWVktTU0tRERbVF1ISDptbTpzcy5TU1NbWl0nIDogJ1lZWVktTU0tRERbVF1ISDptbTpzcy5TU1NaJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiBhIGh1bWFuIHJlYWRhYmxlIHJlcHJlc2VudGF0aW9uIG9mIGEgbW9tZW50IHRoYXQgY2FuXG4gICAgICogYWxzbyBiZSBldmFsdWF0ZWQgdG8gZ2V0IGEgbmV3IG1vbWVudCB3aGljaCBpcyB0aGUgc2FtZVxuICAgICAqXG4gICAgICogQGxpbmsgaHR0cHM6Ly9ub2RlanMub3JnL2Rpc3QvbGF0ZXN0L2RvY3MvYXBpL3V0aWwuaHRtbCN1dGlsX2N1c3RvbV9pbnNwZWN0X2Z1bmN0aW9uX29uX29iamVjdHNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpbnNwZWN0KCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gJ21vbWVudC5pbnZhbGlkKC8qICcgKyB0aGlzLl9pICsgJyAqLyknO1xuICAgICAgICB9XG4gICAgICAgIHZhciBmdW5jID0gJ21vbWVudCcsXG4gICAgICAgICAgICB6b25lID0gJycsXG4gICAgICAgICAgICBwcmVmaXgsXG4gICAgICAgICAgICB5ZWFyLFxuICAgICAgICAgICAgZGF0ZXRpbWUsXG4gICAgICAgICAgICBzdWZmaXg7XG4gICAgICAgIGlmICghdGhpcy5pc0xvY2FsKCkpIHtcbiAgICAgICAgICAgIGZ1bmMgPSB0aGlzLnV0Y09mZnNldCgpID09PSAwID8gJ21vbWVudC51dGMnIDogJ21vbWVudC5wYXJzZVpvbmUnO1xuICAgICAgICAgICAgem9uZSA9ICdaJztcbiAgICAgICAgfVxuICAgICAgICBwcmVmaXggPSAnWycgKyBmdW5jICsgJyhcIl0nO1xuICAgICAgICB5ZWFyID0gMCA8PSB0aGlzLnllYXIoKSAmJiB0aGlzLnllYXIoKSA8PSA5OTk5ID8gJ1lZWVknIDogJ1lZWVlZWSc7XG4gICAgICAgIGRhdGV0aW1lID0gJy1NTS1ERFtUXUhIOm1tOnNzLlNTUyc7XG4gICAgICAgIHN1ZmZpeCA9IHpvbmUgKyAnW1wiKV0nO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1hdChwcmVmaXggKyB5ZWFyICsgZGF0ZXRpbWUgKyBzdWZmaXgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZvcm1hdChpbnB1dFN0cmluZykge1xuICAgICAgICBpZiAoIWlucHV0U3RyaW5nKSB7XG4gICAgICAgICAgICBpbnB1dFN0cmluZyA9IHRoaXMuaXNVdGMoKVxuICAgICAgICAgICAgICAgID8gaG9va3MuZGVmYXVsdEZvcm1hdFV0Y1xuICAgICAgICAgICAgICAgIDogaG9va3MuZGVmYXVsdEZvcm1hdDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgb3V0cHV0ID0gZm9ybWF0TW9tZW50KHRoaXMsIGlucHV0U3RyaW5nKTtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLnBvc3Rmb3JtYXQob3V0cHV0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmcm9tKHRpbWUsIHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5pc1ZhbGlkKCkgJiZcbiAgICAgICAgICAgICgoaXNNb21lbnQodGltZSkgJiYgdGltZS5pc1ZhbGlkKCkpIHx8IGNyZWF0ZUxvY2FsKHRpbWUpLmlzVmFsaWQoKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlRHVyYXRpb24oeyB0bzogdGhpcywgZnJvbTogdGltZSB9KVxuICAgICAgICAgICAgICAgIC5sb2NhbGUodGhpcy5sb2NhbGUoKSlcbiAgICAgICAgICAgICAgICAuaHVtYW5pemUoIXdpdGhvdXRTdWZmaXgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmcm9tTm93KHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZnJvbShjcmVhdGVMb2NhbCgpLCB3aXRob3V0U3VmZml4KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0byh0aW1lLCB3aXRob3V0U3VmZml4KSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuaXNWYWxpZCgpICYmXG4gICAgICAgICAgICAoKGlzTW9tZW50KHRpbWUpICYmIHRpbWUuaXNWYWxpZCgpKSB8fCBjcmVhdGVMb2NhbCh0aW1lKS5pc1ZhbGlkKCkpXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUR1cmF0aW9uKHsgZnJvbTogdGhpcywgdG86IHRpbWUgfSlcbiAgICAgICAgICAgICAgICAubG9jYWxlKHRoaXMubG9jYWxlKCkpXG4gICAgICAgICAgICAgICAgLmh1bWFuaXplKCF3aXRob3V0U3VmZml4KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9Ob3cod2l0aG91dFN1ZmZpeCkge1xuICAgICAgICByZXR1cm4gdGhpcy50byhjcmVhdGVMb2NhbCgpLCB3aXRob3V0U3VmZml4KTtcbiAgICB9XG5cbiAgICAvLyBJZiBwYXNzZWQgYSBsb2NhbGUga2V5LCBpdCB3aWxsIHNldCB0aGUgbG9jYWxlIGZvciB0aGlzXG4gICAgLy8gaW5zdGFuY2UuICBPdGhlcndpc2UsIGl0IHdpbGwgcmV0dXJuIHRoZSBsb2NhbGUgY29uZmlndXJhdGlvblxuICAgIC8vIHZhcmlhYmxlcyBmb3IgdGhpcyBpbnN0YW5jZS5cbiAgICBmdW5jdGlvbiBsb2NhbGUoa2V5KSB7XG4gICAgICAgIHZhciBuZXdMb2NhbGVEYXRhO1xuXG4gICAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xvY2FsZS5fYWJicjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5ld0xvY2FsZURhdGEgPSBnZXRMb2NhbGUoa2V5KTtcbiAgICAgICAgICAgIGlmIChuZXdMb2NhbGVEYXRhICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2NhbGUgPSBuZXdMb2NhbGVEYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgbGFuZyA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ21vbWVudCgpLmxhbmcoKSBpcyBkZXByZWNhdGVkLiBJbnN0ZWFkLCB1c2UgbW9tZW50KCkubG9jYWxlRGF0YSgpIHRvIGdldCB0aGUgbGFuZ3VhZ2UgY29uZmlndXJhdGlvbi4gVXNlIG1vbWVudCgpLmxvY2FsZSgpIHRvIGNoYW5nZSBsYW5ndWFnZXMuJyxcbiAgICAgICAgZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGUoa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVEYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9jYWxlO1xuICAgIH1cblxuICAgIHZhciBNU19QRVJfU0VDT05EID0gMTAwMCxcbiAgICAgICAgTVNfUEVSX01JTlVURSA9IDYwICogTVNfUEVSX1NFQ09ORCxcbiAgICAgICAgTVNfUEVSX0hPVVIgPSA2MCAqIE1TX1BFUl9NSU5VVEUsXG4gICAgICAgIE1TX1BFUl80MDBfWUVBUlMgPSAoMzY1ICogNDAwICsgOTcpICogMjQgKiBNU19QRVJfSE9VUjtcblxuICAgIC8vIGFjdHVhbCBtb2R1bG8gLSBoYW5kbGVzIG5lZ2F0aXZlIG51bWJlcnMgKGZvciBkYXRlcyBiZWZvcmUgMTk3MCk6XG4gICAgZnVuY3Rpb24gbW9kJDEoZGl2aWRlbmQsIGRpdmlzb3IpIHtcbiAgICAgICAgcmV0dXJuICgoZGl2aWRlbmQgJSBkaXZpc29yKSArIGRpdmlzb3IpICUgZGl2aXNvcjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbFN0YXJ0T2ZEYXRlKHksIG0sIGQpIHtcbiAgICAgICAgLy8gdGhlIGRhdGUgY29uc3RydWN0b3IgcmVtYXBzIHllYXJzIDAtOTkgdG8gMTkwMC0xOTk5XG4gICAgICAgIGlmICh5IDwgMTAwICYmIHkgPj0gMCkge1xuICAgICAgICAgICAgLy8gcHJlc2VydmUgbGVhcCB5ZWFycyB1c2luZyBhIGZ1bGwgNDAwIHllYXIgY3ljbGUsIHRoZW4gcmVzZXRcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSh5ICsgNDAwLCBtLCBkKSAtIE1TX1BFUl80MDBfWUVBUlM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoeSwgbSwgZCkudmFsdWVPZigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdXRjU3RhcnRPZkRhdGUoeSwgbSwgZCkge1xuICAgICAgICAvLyBEYXRlLlVUQyByZW1hcHMgeWVhcnMgMC05OSB0byAxOTAwLTE5OTlcbiAgICAgICAgaWYgKHkgPCAxMDAgJiYgeSA+PSAwKSB7XG4gICAgICAgICAgICAvLyBwcmVzZXJ2ZSBsZWFwIHllYXJzIHVzaW5nIGEgZnVsbCA0MDAgeWVhciBjeWNsZSwgdGhlbiByZXNldFxuICAgICAgICAgICAgcmV0dXJuIERhdGUuVVRDKHkgKyA0MDAsIG0sIGQpIC0gTVNfUEVSXzQwMF9ZRUFSUztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBEYXRlLlVUQyh5LCBtLCBkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHN0YXJ0T2YodW5pdHMpIHtcbiAgICAgICAgdmFyIHRpbWUsIHN0YXJ0T2ZEYXRlO1xuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcbiAgICAgICAgaWYgKHVuaXRzID09PSB1bmRlZmluZWQgfHwgdW5pdHMgPT09ICdtaWxsaXNlY29uZCcgfHwgIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXJ0T2ZEYXRlID0gdGhpcy5faXNVVEMgPyB1dGNTdGFydE9mRGF0ZSA6IGxvY2FsU3RhcnRPZkRhdGU7XG5cbiAgICAgICAgc3dpdGNoICh1bml0cykge1xuICAgICAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKHRoaXMueWVhcigpLCAwLCAxKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3F1YXJ0ZXInOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgdGhpcy55ZWFyKCksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9udGgoKSAtICh0aGlzLm1vbnRoKCkgJSAzKSxcbiAgICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKHRoaXMueWVhcigpLCB0aGlzLm1vbnRoKCksIDEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnd2Vlayc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGUoKSAtIHRoaXMud2Vla2RheSgpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2lzb1dlZWsnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgdGhpcy55ZWFyKCksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9udGgoKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlKCkgLSAodGhpcy5pc29XZWVrZGF5KCkgLSAxKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdkYXknOlxuICAgICAgICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKHRoaXMueWVhcigpLCB0aGlzLm1vbnRoKCksIHRoaXMuZGF0ZSgpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2hvdXInOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lIC09IG1vZCQxKFxuICAgICAgICAgICAgICAgICAgICB0aW1lICsgKHRoaXMuX2lzVVRDID8gMCA6IHRoaXMudXRjT2Zmc2V0KCkgKiBNU19QRVJfTUlOVVRFKSxcbiAgICAgICAgICAgICAgICAgICAgTVNfUEVSX0hPVVJcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gdGhpcy5fZC52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgdGltZSAtPSBtb2QkMSh0aW1lLCBNU19QRVJfTUlOVVRFKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIHRpbWUgLT0gbW9kJDEodGltZSwgTVNfUEVSX1NFQ09ORCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9kLnNldFRpbWUodGltZSk7XG4gICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZW5kT2YodW5pdHMpIHtcbiAgICAgICAgdmFyIHRpbWUsIHN0YXJ0T2ZEYXRlO1xuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcbiAgICAgICAgaWYgKHVuaXRzID09PSB1bmRlZmluZWQgfHwgdW5pdHMgPT09ICdtaWxsaXNlY29uZCcgfHwgIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXJ0T2ZEYXRlID0gdGhpcy5faXNVVEMgPyB1dGNTdGFydE9mRGF0ZSA6IGxvY2FsU3RhcnRPZkRhdGU7XG5cbiAgICAgICAgc3dpdGNoICh1bml0cykge1xuICAgICAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKHRoaXMueWVhcigpICsgMSwgMCwgMSkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncXVhcnRlcic6XG4gICAgICAgICAgICAgICAgdGltZSA9XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy55ZWFyKCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vbnRoKCkgLSAodGhpcy5tb250aCgpICUgMykgKyAzLFxuICAgICAgICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICAgICApIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSArIDEsIDEpIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICAgICAgICAgIHRpbWUgPVxuICAgICAgICAgICAgICAgICAgICBzdGFydE9mRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueWVhcigpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlKCkgLSB0aGlzLndlZWtkYXkoKSArIDdcbiAgICAgICAgICAgICAgICAgICAgKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdpc29XZWVrJzpcbiAgICAgICAgICAgICAgICB0aW1lID1cbiAgICAgICAgICAgICAgICAgICAgc3RhcnRPZkRhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9udGgoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZSgpIC0gKHRoaXMuaXNvV2Vla2RheSgpIC0gMSkgKyA3XG4gICAgICAgICAgICAgICAgICAgICkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpLCB0aGlzLmRhdGUoKSArIDEpIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2hvdXInOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lICs9XG4gICAgICAgICAgICAgICAgICAgIE1TX1BFUl9IT1VSIC1cbiAgICAgICAgICAgICAgICAgICAgbW9kJDEoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aW1lICsgKHRoaXMuX2lzVVRDID8gMCA6IHRoaXMudXRjT2Zmc2V0KCkgKiBNU19QRVJfTUlOVVRFKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIE1TX1BFUl9IT1VSXG4gICAgICAgICAgICAgICAgICAgICkgLVxuICAgICAgICAgICAgICAgICAgICAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gdGhpcy5fZC52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgdGltZSArPSBNU19QRVJfTUlOVVRFIC0gbW9kJDEodGltZSwgTVNfUEVSX01JTlVURSkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc2Vjb25kJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gdGhpcy5fZC52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgdGltZSArPSBNU19QRVJfU0VDT05EIC0gbW9kJDEodGltZSwgTVNfUEVSX1NFQ09ORCkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZC5zZXRUaW1lKHRpbWUpO1xuICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcywgdHJ1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHZhbHVlT2YoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kLnZhbHVlT2YoKSAtICh0aGlzLl9vZmZzZXQgfHwgMCkgKiA2MDAwMDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1bml4KCkge1xuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcih0aGlzLnZhbHVlT2YoKSAvIDEwMDApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvRGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHRoaXMudmFsdWVPZigpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b0FycmF5KCkge1xuICAgICAgICB2YXIgbSA9IHRoaXM7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBtLnllYXIoKSxcbiAgICAgICAgICAgIG0ubW9udGgoKSxcbiAgICAgICAgICAgIG0uZGF0ZSgpLFxuICAgICAgICAgICAgbS5ob3VyKCksXG4gICAgICAgICAgICBtLm1pbnV0ZSgpLFxuICAgICAgICAgICAgbS5zZWNvbmQoKSxcbiAgICAgICAgICAgIG0ubWlsbGlzZWNvbmQoKSxcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b09iamVjdCgpIHtcbiAgICAgICAgdmFyIG0gPSB0aGlzO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeWVhcnM6IG0ueWVhcigpLFxuICAgICAgICAgICAgbW9udGhzOiBtLm1vbnRoKCksXG4gICAgICAgICAgICBkYXRlOiBtLmRhdGUoKSxcbiAgICAgICAgICAgIGhvdXJzOiBtLmhvdXJzKCksXG4gICAgICAgICAgICBtaW51dGVzOiBtLm1pbnV0ZXMoKSxcbiAgICAgICAgICAgIHNlY29uZHM6IG0uc2Vjb25kcygpLFxuICAgICAgICAgICAgbWlsbGlzZWNvbmRzOiBtLm1pbGxpc2Vjb25kcygpLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICAgICAgLy8gbmV3IERhdGUoTmFOKS50b0pTT04oKSA9PT0gbnVsbFxuICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgPyB0aGlzLnRvSVNPU3RyaW5nKCkgOiBudWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVmFsaWQkMigpIHtcbiAgICAgICAgcmV0dXJuIGlzVmFsaWQodGhpcyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2luZ0ZsYWdzKCkge1xuICAgICAgICByZXR1cm4gZXh0ZW5kKHt9LCBnZXRQYXJzaW5nRmxhZ3ModGhpcykpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGludmFsaWRBdCgpIHtcbiAgICAgICAgcmV0dXJuIGdldFBhcnNpbmdGbGFncyh0aGlzKS5vdmVyZmxvdztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGlvbkRhdGEoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpbnB1dDogdGhpcy5faSxcbiAgICAgICAgICAgIGZvcm1hdDogdGhpcy5fZixcbiAgICAgICAgICAgIGxvY2FsZTogdGhpcy5fbG9jYWxlLFxuICAgICAgICAgICAgaXNVVEM6IHRoaXMuX2lzVVRDLFxuICAgICAgICAgICAgc3RyaWN0OiB0aGlzLl9zdHJpY3QsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ04nLCAwLCAwLCAnZXJhQWJicicpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdOTicsIDAsIDAsICdlcmFBYmJyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ05OTicsIDAsIDAsICdlcmFBYmJyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ05OTk4nLCAwLCAwLCAnZXJhTmFtZScpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdOTk5OTicsIDAsIDAsICdlcmFOYXJyb3cnKTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCd5JywgWyd5JywgMV0sICd5bycsICdlcmFZZWFyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ3knLCBbJ3l5JywgMl0sIDAsICdlcmFZZWFyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ3knLCBbJ3l5eScsIDNdLCAwLCAnZXJhWWVhcicpO1xuICAgIGFkZEZvcm1hdFRva2VuKCd5JywgWyd5eXl5JywgNF0sIDAsICdlcmFZZWFyJyk7XG5cbiAgICBhZGRSZWdleFRva2VuKCdOJywgbWF0Y2hFcmFBYmJyKTtcbiAgICBhZGRSZWdleFRva2VuKCdOTicsIG1hdGNoRXJhQWJicik7XG4gICAgYWRkUmVnZXhUb2tlbignTk5OJywgbWF0Y2hFcmFBYmJyKTtcbiAgICBhZGRSZWdleFRva2VuKCdOTk5OJywgbWF0Y2hFcmFOYW1lKTtcbiAgICBhZGRSZWdleFRva2VuKCdOTk5OTicsIG1hdGNoRXJhTmFycm93KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oXG4gICAgICAgIFsnTicsICdOTicsICdOTk4nLCAnTk5OTicsICdOTk5OTiddLFxuICAgICAgICBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgICAgICB2YXIgZXJhID0gY29uZmlnLl9sb2NhbGUuZXJhc1BhcnNlKGlucHV0LCB0b2tlbiwgY29uZmlnLl9zdHJpY3QpO1xuICAgICAgICAgICAgaWYgKGVyYSkge1xuICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmVyYSA9IGVyYTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaW52YWxpZEVyYSA9IGlucHV0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ3knLCBtYXRjaFVuc2lnbmVkKTtcbiAgICBhZGRSZWdleFRva2VuKCd5eScsIG1hdGNoVW5zaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3l5eScsIG1hdGNoVW5zaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3l5eXknLCBtYXRjaFVuc2lnbmVkKTtcbiAgICBhZGRSZWdleFRva2VuKCd5bycsIG1hdGNoRXJhWWVhck9yZGluYWwpO1xuXG4gICAgYWRkUGFyc2VUb2tlbihbJ3knLCAneXknLCAneXl5JywgJ3l5eXknXSwgWUVBUik7XG4gICAgYWRkUGFyc2VUb2tlbihbJ3lvJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgdmFyIG1hdGNoO1xuICAgICAgICBpZiAoY29uZmlnLl9sb2NhbGUuX2VyYVllYXJPcmRpbmFsUmVnZXgpIHtcbiAgICAgICAgICAgIG1hdGNoID0gaW5wdXQubWF0Y2goY29uZmlnLl9sb2NhbGUuX2VyYVllYXJPcmRpbmFsUmVnZXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZy5fbG9jYWxlLmVyYVllYXJPcmRpbmFsUGFyc2UpIHtcbiAgICAgICAgICAgIGFycmF5W1lFQVJdID0gY29uZmlnLl9sb2NhbGUuZXJhWWVhck9yZGluYWxQYXJzZShpbnB1dCwgbWF0Y2gpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXJyYXlbWUVBUl0gPSBwYXJzZUludChpbnB1dCwgMTApO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVFcmFzKG0sIGZvcm1hdCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICBkYXRlLFxuICAgICAgICAgICAgZXJhcyA9IHRoaXMuX2VyYXMgfHwgZ2V0TG9jYWxlKCdlbicpLl9lcmFzO1xuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIHN3aXRjaCAodHlwZW9mIGVyYXNbaV0uc2luY2UpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgICAgICAgICAgICAvLyB0cnVuY2F0ZSB0aW1lXG4gICAgICAgICAgICAgICAgICAgIGRhdGUgPSBob29rcyhlcmFzW2ldLnNpbmNlKS5zdGFydE9mKCdkYXknKTtcbiAgICAgICAgICAgICAgICAgICAgZXJhc1tpXS5zaW5jZSA9IGRhdGUudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3dpdGNoICh0eXBlb2YgZXJhc1tpXS51bnRpbCkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3VuZGVmaW5lZCc6XG4gICAgICAgICAgICAgICAgICAgIGVyYXNbaV0udW50aWwgPSArSW5maW5pdHk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgICAgICAgICAgIC8vIHRydW5jYXRlIHRpbWVcbiAgICAgICAgICAgICAgICAgICAgZGF0ZSA9IGhvb2tzKGVyYXNbaV0udW50aWwpLnN0YXJ0T2YoJ2RheScpLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICAgICAgZXJhc1tpXS51bnRpbCA9IGRhdGUudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXJhcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVFcmFzUGFyc2UoZXJhTmFtZSwgZm9ybWF0LCBzdHJpY3QpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgZXJhcyA9IHRoaXMuZXJhcygpLFxuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIGFiYnIsXG4gICAgICAgICAgICBuYXJyb3c7XG4gICAgICAgIGVyYU5hbWUgPSBlcmFOYW1lLnRvVXBwZXJDYXNlKCk7XG5cbiAgICAgICAgZm9yIChpID0gMCwgbCA9IGVyYXMubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgICAgICAgICBuYW1lID0gZXJhc1tpXS5uYW1lLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgICBhYmJyID0gZXJhc1tpXS5hYmJyLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgICBuYXJyb3cgPSBlcmFzW2ldLm5hcnJvdy50b1VwcGVyQ2FzZSgpO1xuXG4gICAgICAgICAgICBpZiAoc3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChmb3JtYXQpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnTic6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ05OJzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnTk5OJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhYmJyID09PSBlcmFOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICBjYXNlICdOTk5OJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSBlcmFOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICBjYXNlICdOTk5OTic6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmFycm93ID09PSBlcmFOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFtuYW1lLCBhYmJyLCBuYXJyb3ddLmluZGV4T2YoZXJhTmFtZSkgPj0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlRXJhc0NvbnZlcnRZZWFyKGVyYSwgeWVhcikge1xuICAgICAgICB2YXIgZGlyID0gZXJhLnNpbmNlIDw9IGVyYS51bnRpbCA/ICsxIDogLTE7XG4gICAgICAgIGlmICh5ZWFyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBob29rcyhlcmEuc2luY2UpLnllYXIoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBob29rcyhlcmEuc2luY2UpLnllYXIoKSArICh5ZWFyIC0gZXJhLm9mZnNldCkgKiBkaXI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRFcmFOYW1lKCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICB2YWwsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5sb2NhbGVEYXRhKCkuZXJhcygpO1xuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIC8vIHRydW5jYXRlIHRpbWVcbiAgICAgICAgICAgIHZhbCA9IHRoaXMuY2xvbmUoKS5zdGFydE9mKCdkYXknKS52YWx1ZU9mKCk7XG5cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnNpbmNlIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS51bnRpbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLm5hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJhc1tpXS51bnRpbCA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0uc2luY2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXS5uYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEVyYU5hcnJvdygpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgdmFsLFxuICAgICAgICAgICAgZXJhcyA9IHRoaXMubG9jYWxlRGF0YSgpLmVyYXMoKTtcbiAgICAgICAgZm9yIChpID0gMCwgbCA9IGVyYXMubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgICAgICAgICAvLyB0cnVuY2F0ZSB0aW1lXG4gICAgICAgICAgICB2YWwgPSB0aGlzLmNsb25lKCkuc3RhcnRPZignZGF5JykudmFsdWVPZigpO1xuXG4gICAgICAgICAgICBpZiAoZXJhc1tpXS5zaW5jZSA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0udW50aWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXS5uYXJyb3c7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJhc1tpXS51bnRpbCA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0uc2luY2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXS5uYXJyb3c7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RXJhQWJicigpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgdmFsLFxuICAgICAgICAgICAgZXJhcyA9IHRoaXMubG9jYWxlRGF0YSgpLmVyYXMoKTtcbiAgICAgICAgZm9yIChpID0gMCwgbCA9IGVyYXMubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgICAgICAgICAvLyB0cnVuY2F0ZSB0aW1lXG4gICAgICAgICAgICB2YWwgPSB0aGlzLmNsb25lKCkuc3RhcnRPZignZGF5JykudmFsdWVPZigpO1xuXG4gICAgICAgICAgICBpZiAoZXJhc1tpXS5zaW5jZSA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0udW50aWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXS5hYmJyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVyYXNbaV0udW50aWwgPD0gdmFsICYmIHZhbCA8PSBlcmFzW2ldLnNpbmNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV0uYWJicjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRFcmFZZWFyKCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICBkaXIsXG4gICAgICAgICAgICB2YWwsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5sb2NhbGVEYXRhKCkuZXJhcygpO1xuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIGRpciA9IGVyYXNbaV0uc2luY2UgPD0gZXJhc1tpXS51bnRpbCA/ICsxIDogLTE7XG5cbiAgICAgICAgICAgIC8vIHRydW5jYXRlIHRpbWVcbiAgICAgICAgICAgIHZhbCA9IHRoaXMuY2xvbmUoKS5zdGFydE9mKCdkYXknKS52YWx1ZU9mKCk7XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAoZXJhc1tpXS5zaW5jZSA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0udW50aWwpIHx8XG4gICAgICAgICAgICAgICAgKGVyYXNbaV0udW50aWwgPD0gdmFsICYmIHZhbCA8PSBlcmFzW2ldLnNpbmNlKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgKHRoaXMueWVhcigpIC0gaG9va3MoZXJhc1tpXS5zaW5jZSkueWVhcigpKSAqIGRpciArXG4gICAgICAgICAgICAgICAgICAgIGVyYXNbaV0ub2Zmc2V0XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnllYXIoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlcmFzTmFtZVJlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX2VyYXNOYW1lUmVnZXgnKSkge1xuICAgICAgICAgICAgY29tcHV0ZUVyYXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc1N0cmljdCA/IHRoaXMuX2VyYXNOYW1lUmVnZXggOiB0aGlzLl9lcmFzUmVnZXg7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXJhc0FiYnJSZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19lcmFzQWJiclJlZ2V4JykpIHtcbiAgICAgICAgICAgIGNvbXB1dGVFcmFzUGFyc2UuY2FsbCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNTdHJpY3QgPyB0aGlzLl9lcmFzQWJiclJlZ2V4IDogdGhpcy5fZXJhc1JlZ2V4O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVyYXNOYXJyb3dSZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19lcmFzTmFycm93UmVnZXgnKSkge1xuICAgICAgICAgICAgY29tcHV0ZUVyYXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc1N0cmljdCA/IHRoaXMuX2VyYXNOYXJyb3dSZWdleCA6IHRoaXMuX2VyYXNSZWdleDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXRjaEVyYUFiYnIoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLmVyYXNBYmJyUmVnZXgoaXNTdHJpY3QpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1hdGNoRXJhTmFtZShpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUuZXJhc05hbWVSZWdleChpc1N0cmljdCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWF0Y2hFcmFOYXJyb3coaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLmVyYXNOYXJyb3dSZWdleChpc1N0cmljdCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWF0Y2hFcmFZZWFyT3JkaW5hbChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUuX2VyYVllYXJPcmRpbmFsUmVnZXggfHwgbWF0Y2hVbnNpZ25lZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21wdXRlRXJhc1BhcnNlKCkge1xuICAgICAgICB2YXIgYWJiclBpZWNlcyA9IFtdLFxuICAgICAgICAgICAgbmFtZVBpZWNlcyA9IFtdLFxuICAgICAgICAgICAgbmFycm93UGllY2VzID0gW10sXG4gICAgICAgICAgICBtaXhlZFBpZWNlcyA9IFtdLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICBlcmFzTmFtZSxcbiAgICAgICAgICAgIGVyYXNBYmJyLFxuICAgICAgICAgICAgZXJhc05hcnJvdyxcbiAgICAgICAgICAgIGVyYXMgPSB0aGlzLmVyYXMoKTtcblxuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIGVyYXNOYW1lID0gcmVnZXhFc2NhcGUoZXJhc1tpXS5uYW1lKTtcbiAgICAgICAgICAgIGVyYXNBYmJyID0gcmVnZXhFc2NhcGUoZXJhc1tpXS5hYmJyKTtcbiAgICAgICAgICAgIGVyYXNOYXJyb3cgPSByZWdleEVzY2FwZShlcmFzW2ldLm5hcnJvdyk7XG5cbiAgICAgICAgICAgIG5hbWVQaWVjZXMucHVzaChlcmFzTmFtZSk7XG4gICAgICAgICAgICBhYmJyUGllY2VzLnB1c2goZXJhc0FiYnIpO1xuICAgICAgICAgICAgbmFycm93UGllY2VzLnB1c2goZXJhc05hcnJvdyk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKGVyYXNOYW1lKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2goZXJhc0FiYnIpO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChlcmFzTmFycm93KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2VyYXNSZWdleCA9IG5ldyBSZWdFeHAoJ14oJyArIG1peGVkUGllY2VzLmpvaW4oJ3wnKSArICcpJywgJ2knKTtcbiAgICAgICAgdGhpcy5fZXJhc05hbWVSZWdleCA9IG5ldyBSZWdFeHAoJ14oJyArIG5hbWVQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl9lcmFzQWJiclJlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgYWJiclBpZWNlcy5qb2luKCd8JykgKyAnKScsICdpJyk7XG4gICAgICAgIHRoaXMuX2VyYXNOYXJyb3dSZWdleCA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAnXignICsgbmFycm93UGllY2VzLmpvaW4oJ3wnKSArICcpJyxcbiAgICAgICAgICAgICdpJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnZ2cnLCAyXSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy53ZWVrWWVhcigpICUgMTAwO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydHRycsIDJdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzb1dlZWtZZWFyKCkgJSAxMDA7XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBhZGRXZWVrWWVhckZvcm1hdFRva2VuKHRva2VuLCBnZXR0ZXIpIHtcbiAgICAgICAgYWRkRm9ybWF0VG9rZW4oMCwgW3Rva2VuLCB0b2tlbi5sZW5ndGhdLCAwLCBnZXR0ZXIpO1xuICAgIH1cblxuICAgIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4oJ2dnZ2cnLCAnd2Vla1llYXInKTtcbiAgICBhZGRXZWVrWWVhckZvcm1hdFRva2VuKCdnZ2dnZycsICd3ZWVrWWVhcicpO1xuICAgIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4oJ0dHR0cnLCAnaXNvV2Vla1llYXInKTtcbiAgICBhZGRXZWVrWWVhckZvcm1hdFRva2VuKCdHR0dHRycsICdpc29XZWVrWWVhcicpO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignRycsIG1hdGNoU2lnbmVkKTtcbiAgICBhZGRSZWdleFRva2VuKCdnJywgbWF0Y2hTaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0dHJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2dnJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0dHR0cnLCBtYXRjaDF0bzQsIG1hdGNoNCk7XG4gICAgYWRkUmVnZXhUb2tlbignZ2dnZycsIG1hdGNoMXRvNCwgbWF0Y2g0KTtcbiAgICBhZGRSZWdleFRva2VuKCdHR0dHRycsIG1hdGNoMXRvNiwgbWF0Y2g2KTtcbiAgICBhZGRSZWdleFRva2VuKCdnZ2dnZycsIG1hdGNoMXRvNiwgbWF0Y2g2KTtcblxuICAgIGFkZFdlZWtQYXJzZVRva2VuKFxuICAgICAgICBbJ2dnZ2cnLCAnZ2dnZ2cnLCAnR0dHRycsICdHR0dHRyddLFxuICAgICAgICBmdW5jdGlvbiAoaW5wdXQsIHdlZWssIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgICAgIHdlZWtbdG9rZW4uc3Vic3RyKDAsIDIpXSA9IHRvSW50KGlucHV0KTtcbiAgICAgICAgfVxuICAgICk7XG5cbiAgICBhZGRXZWVrUGFyc2VUb2tlbihbJ2dnJywgJ0dHJ10sIGZ1bmN0aW9uIChpbnB1dCwgd2VlaywgY29uZmlnLCB0b2tlbikge1xuICAgICAgICB3ZWVrW3Rva2VuXSA9IGhvb2tzLnBhcnNlVHdvRGlnaXRZZWFyKGlucHV0KTtcbiAgICB9KTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFNldFdlZWtZZWFyKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBnZXRTZXRXZWVrWWVhckhlbHBlci5jYWxsKFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgdGhpcy53ZWVrKCksXG4gICAgICAgICAgICB0aGlzLndlZWtkYXkoKSArIHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRvdyxcbiAgICAgICAgICAgIHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRvdyxcbiAgICAgICAgICAgIHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRveVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldElTT1dlZWtZZWFyKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBnZXRTZXRXZWVrWWVhckhlbHBlci5jYWxsKFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgdGhpcy5pc29XZWVrKCksXG4gICAgICAgICAgICB0aGlzLmlzb1dlZWtkYXkoKSxcbiAgICAgICAgICAgIDEsXG4gICAgICAgICAgICA0XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0SVNPV2Vla3NJblllYXIoKSB7XG4gICAgICAgIHJldHVybiB3ZWVrc0luWWVhcih0aGlzLnllYXIoKSwgMSwgNCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0SVNPV2Vla3NJbklTT1dlZWtZZWFyKCkge1xuICAgICAgICByZXR1cm4gd2Vla3NJblllYXIodGhpcy5pc29XZWVrWWVhcigpLCAxLCA0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRXZWVrc0luWWVhcigpIHtcbiAgICAgICAgdmFyIHdlZWtJbmZvID0gdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWs7XG4gICAgICAgIHJldHVybiB3ZWVrc0luWWVhcih0aGlzLnllYXIoKSwgd2Vla0luZm8uZG93LCB3ZWVrSW5mby5kb3kpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFdlZWtzSW5XZWVrWWVhcigpIHtcbiAgICAgICAgdmFyIHdlZWtJbmZvID0gdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWs7XG4gICAgICAgIHJldHVybiB3ZWVrc0luWWVhcih0aGlzLndlZWtZZWFyKCksIHdlZWtJbmZvLmRvdywgd2Vla0luZm8uZG95KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRXZWVrWWVhckhlbHBlcihpbnB1dCwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpIHtcbiAgICAgICAgdmFyIHdlZWtzVGFyZ2V0O1xuICAgICAgICBpZiAoaW5wdXQgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHdlZWtPZlllYXIodGhpcywgZG93LCBkb3kpLnllYXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB3ZWVrc1RhcmdldCA9IHdlZWtzSW5ZZWFyKGlucHV0LCBkb3csIGRveSk7XG4gICAgICAgICAgICBpZiAod2VlayA+IHdlZWtzVGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgd2VlayA9IHdlZWtzVGFyZ2V0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHNldFdlZWtBbGwuY2FsbCh0aGlzLCBpbnB1dCwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0V2Vla0FsbCh3ZWVrWWVhciwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpIHtcbiAgICAgICAgdmFyIGRheU9mWWVhckRhdGEgPSBkYXlPZlllYXJGcm9tV2Vla3Mod2Vla1llYXIsIHdlZWssIHdlZWtkYXksIGRvdywgZG95KSxcbiAgICAgICAgICAgIGRhdGUgPSBjcmVhdGVVVENEYXRlKGRheU9mWWVhckRhdGEueWVhciwgMCwgZGF5T2ZZZWFyRGF0YS5kYXlPZlllYXIpO1xuXG4gICAgICAgIHRoaXMueWVhcihkYXRlLmdldFVUQ0Z1bGxZZWFyKCkpO1xuICAgICAgICB0aGlzLm1vbnRoKGRhdGUuZ2V0VVRDTW9udGgoKSk7XG4gICAgICAgIHRoaXMuZGF0ZShkYXRlLmdldFVUQ0RhdGUoKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdRJywgMCwgJ1FvJywgJ3F1YXJ0ZXInKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ1EnLCBtYXRjaDEpO1xuICAgIGFkZFBhcnNlVG9rZW4oJ1EnLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W01PTlRIXSA9ICh0b0ludChpbnB1dCkgLSAxKSAqIDM7XG4gICAgfSk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRTZXRRdWFydGVyKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PSBudWxsXG4gICAgICAgICAgICA/IE1hdGguY2VpbCgodGhpcy5tb250aCgpICsgMSkgLyAzKVxuICAgICAgICAgICAgOiB0aGlzLm1vbnRoKChpbnB1dCAtIDEpICogMyArICh0aGlzLm1vbnRoKCkgJSAzKSk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ0QnLCBbJ0REJywgMl0sICdEbycsICdkYXRlJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdEJywgbWF0Y2gxdG8yLCBtYXRjaDF0bzJOb0xlYWRpbmdaZXJvKTtcbiAgICBhZGRSZWdleFRva2VuKCdERCcsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdEbycsIGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIC8vIFRPRE86IFJlbW92ZSBcIm9yZGluYWxQYXJzZVwiIGZhbGxiYWNrIGluIG5leHQgbWFqb3IgcmVsZWFzZS5cbiAgICAgICAgcmV0dXJuIGlzU3RyaWN0XG4gICAgICAgICAgICA/IGxvY2FsZS5fZGF5T2ZNb250aE9yZGluYWxQYXJzZSB8fCBsb2NhbGUuX29yZGluYWxQYXJzZVxuICAgICAgICAgICAgOiBsb2NhbGUuX2RheU9mTW9udGhPcmRpbmFsUGFyc2VMZW5pZW50O1xuICAgIH0pO1xuXG4gICAgYWRkUGFyc2VUb2tlbihbJ0QnLCAnREQnXSwgREFURSk7XG4gICAgYWRkUGFyc2VUb2tlbignRG8nLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W0RBVEVdID0gdG9JbnQoaW5wdXQubWF0Y2gobWF0Y2gxdG8yKVswXSk7XG4gICAgfSk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICB2YXIgZ2V0U2V0RGF5T2ZNb250aCA9IG1ha2VHZXRTZXQoJ0RhdGUnLCB0cnVlKTtcblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdEREQnLCBbJ0REREQnLCAzXSwgJ0RERG8nLCAnZGF5T2ZZZWFyJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdEREQnLCBtYXRjaDF0bzMpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0REREQnLCBtYXRjaDMpO1xuICAgIGFkZFBhcnNlVG9rZW4oWydEREQnLCAnRERERCddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgY29uZmlnLl9kYXlPZlllYXIgPSB0b0ludChpbnB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBIRUxQRVJTXG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRTZXREYXlPZlllYXIoaW5wdXQpIHtcbiAgICAgICAgdmFyIGRheU9mWWVhciA9XG4gICAgICAgICAgICBNYXRoLnJvdW5kKFxuICAgICAgICAgICAgICAgICh0aGlzLmNsb25lKCkuc3RhcnRPZignZGF5JykgLSB0aGlzLmNsb25lKCkuc3RhcnRPZigneWVhcicpKSAvIDg2NGU1XG4gICAgICAgICAgICApICsgMTtcbiAgICAgICAgcmV0dXJuIGlucHV0ID09IG51bGwgPyBkYXlPZlllYXIgOiB0aGlzLmFkZChpbnB1dCAtIGRheU9mWWVhciwgJ2QnKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignbScsIFsnbW0nLCAyXSwgMCwgJ21pbnV0ZScpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignbScsIG1hdGNoMXRvMiwgbWF0Y2gxdG8ySGFzWmVybyk7XG4gICAgYWRkUmVnZXhUb2tlbignbW0nLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUGFyc2VUb2tlbihbJ20nLCAnbW0nXSwgTUlOVVRFKTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIHZhciBnZXRTZXRNaW51dGUgPSBtYWtlR2V0U2V0KCdNaW51dGVzJywgZmFsc2UpO1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ3MnLCBbJ3NzJywgMl0sIDAsICdzZWNvbmQnKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ3MnLCBtYXRjaDF0bzIsIG1hdGNoMXRvMkhhc1plcm8pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3NzJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFBhcnNlVG9rZW4oWydzJywgJ3NzJ10sIFNFQ09ORCk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICB2YXIgZ2V0U2V0U2Vjb25kID0gbWFrZUdldFNldCgnU2Vjb25kcycsIGZhbHNlKTtcblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdTJywgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gfn4odGhpcy5taWxsaXNlY29uZCgpIC8gMTAwKTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1MnLCAyXSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gfn4odGhpcy5taWxsaXNlY29uZCgpIC8gMTApO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1MnLCAzXSwgMCwgJ21pbGxpc2Vjb25kJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTJywgNF0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwO1xuICAgIH0pO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTU1MnLCA1XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwO1xuICAgIH0pO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTU1NTJywgNl0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwMDA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTU1NTJywgN10sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwMDAwO1xuICAgIH0pO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTU1NTU1MnLCA4XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwMDAwO1xuICAgIH0pO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTU1NTU1NTJywgOV0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwMDAwMDA7XG4gICAgfSk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdTJywgbWF0Y2gxdG8zLCBtYXRjaDEpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1NTJywgbWF0Y2gxdG8zLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1NTUycsIG1hdGNoMXRvMywgbWF0Y2gzKTtcblxuICAgIHZhciB0b2tlbiwgZ2V0U2V0TWlsbGlzZWNvbmQ7XG4gICAgZm9yICh0b2tlbiA9ICdTU1NTJzsgdG9rZW4ubGVuZ3RoIDw9IDk7IHRva2VuICs9ICdTJykge1xuICAgICAgICBhZGRSZWdleFRva2VuKHRva2VuLCBtYXRjaFVuc2lnbmVkKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZU1zKGlucHV0LCBhcnJheSkge1xuICAgICAgICBhcnJheVtNSUxMSVNFQ09ORF0gPSB0b0ludCgoJzAuJyArIGlucHV0KSAqIDEwMDApO1xuICAgIH1cblxuICAgIGZvciAodG9rZW4gPSAnUyc7IHRva2VuLmxlbmd0aCA8PSA5OyB0b2tlbiArPSAnUycpIHtcbiAgICAgICAgYWRkUGFyc2VUb2tlbih0b2tlbiwgcGFyc2VNcyk7XG4gICAgfVxuXG4gICAgZ2V0U2V0TWlsbGlzZWNvbmQgPSBtYWtlR2V0U2V0KCdNaWxsaXNlY29uZHMnLCBmYWxzZSk7XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbigneicsIDAsIDAsICd6b25lQWJicicpO1xuICAgIGFkZEZvcm1hdFRva2VuKCd6eicsIDAsIDAsICd6b25lTmFtZScpO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0Wm9uZUFiYnIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1VUQyA/ICdVVEMnIDogJyc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0Wm9uZU5hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1VUQyA/ICdDb29yZGluYXRlZCBVbml2ZXJzYWwgVGltZScgOiAnJztcbiAgICB9XG5cbiAgICB2YXIgcHJvdG8gPSBNb21lbnQucHJvdG90eXBlO1xuXG4gICAgcHJvdG8uYWRkID0gYWRkO1xuICAgIHByb3RvLmNhbGVuZGFyID0gY2FsZW5kYXIkMTtcbiAgICBwcm90by5jbG9uZSA9IGNsb25lO1xuICAgIHByb3RvLmRpZmYgPSBkaWZmO1xuICAgIHByb3RvLmVuZE9mID0gZW5kT2Y7XG4gICAgcHJvdG8uZm9ybWF0ID0gZm9ybWF0O1xuICAgIHByb3RvLmZyb20gPSBmcm9tO1xuICAgIHByb3RvLmZyb21Ob3cgPSBmcm9tTm93O1xuICAgIHByb3RvLnRvID0gdG87XG4gICAgcHJvdG8udG9Ob3cgPSB0b05vdztcbiAgICBwcm90by5nZXQgPSBzdHJpbmdHZXQ7XG4gICAgcHJvdG8uaW52YWxpZEF0ID0gaW52YWxpZEF0O1xuICAgIHByb3RvLmlzQWZ0ZXIgPSBpc0FmdGVyO1xuICAgIHByb3RvLmlzQmVmb3JlID0gaXNCZWZvcmU7XG4gICAgcHJvdG8uaXNCZXR3ZWVuID0gaXNCZXR3ZWVuO1xuICAgIHByb3RvLmlzU2FtZSA9IGlzU2FtZTtcbiAgICBwcm90by5pc1NhbWVPckFmdGVyID0gaXNTYW1lT3JBZnRlcjtcbiAgICBwcm90by5pc1NhbWVPckJlZm9yZSA9IGlzU2FtZU9yQmVmb3JlO1xuICAgIHByb3RvLmlzVmFsaWQgPSBpc1ZhbGlkJDI7XG4gICAgcHJvdG8ubGFuZyA9IGxhbmc7XG4gICAgcHJvdG8ubG9jYWxlID0gbG9jYWxlO1xuICAgIHByb3RvLmxvY2FsZURhdGEgPSBsb2NhbGVEYXRhO1xuICAgIHByb3RvLm1heCA9IHByb3RvdHlwZU1heDtcbiAgICBwcm90by5taW4gPSBwcm90b3R5cGVNaW47XG4gICAgcHJvdG8ucGFyc2luZ0ZsYWdzID0gcGFyc2luZ0ZsYWdzO1xuICAgIHByb3RvLnNldCA9IHN0cmluZ1NldDtcbiAgICBwcm90by5zdGFydE9mID0gc3RhcnRPZjtcbiAgICBwcm90by5zdWJ0cmFjdCA9IHN1YnRyYWN0O1xuICAgIHByb3RvLnRvQXJyYXkgPSB0b0FycmF5O1xuICAgIHByb3RvLnRvT2JqZWN0ID0gdG9PYmplY3Q7XG4gICAgcHJvdG8udG9EYXRlID0gdG9EYXRlO1xuICAgIHByb3RvLnRvSVNPU3RyaW5nID0gdG9JU09TdHJpbmc7XG4gICAgcHJvdG8uaW5zcGVjdCA9IGluc3BlY3Q7XG4gICAgaWYgKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC5mb3IgIT0gbnVsbCkge1xuICAgICAgICBwcm90b1tTeW1ib2wuZm9yKCdub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbScpXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAnTW9tZW50PCcgKyB0aGlzLmZvcm1hdCgpICsgJz4nO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBwcm90by50b0pTT04gPSB0b0pTT047XG4gICAgcHJvdG8udG9TdHJpbmcgPSB0b1N0cmluZztcbiAgICBwcm90by51bml4ID0gdW5peDtcbiAgICBwcm90by52YWx1ZU9mID0gdmFsdWVPZjtcbiAgICBwcm90by5jcmVhdGlvbkRhdGEgPSBjcmVhdGlvbkRhdGE7XG4gICAgcHJvdG8uZXJhTmFtZSA9IGdldEVyYU5hbWU7XG4gICAgcHJvdG8uZXJhTmFycm93ID0gZ2V0RXJhTmFycm93O1xuICAgIHByb3RvLmVyYUFiYnIgPSBnZXRFcmFBYmJyO1xuICAgIHByb3RvLmVyYVllYXIgPSBnZXRFcmFZZWFyO1xuICAgIHByb3RvLnllYXIgPSBnZXRTZXRZZWFyO1xuICAgIHByb3RvLmlzTGVhcFllYXIgPSBnZXRJc0xlYXBZZWFyO1xuICAgIHByb3RvLndlZWtZZWFyID0gZ2V0U2V0V2Vla1llYXI7XG4gICAgcHJvdG8uaXNvV2Vla1llYXIgPSBnZXRTZXRJU09XZWVrWWVhcjtcbiAgICBwcm90by5xdWFydGVyID0gcHJvdG8ucXVhcnRlcnMgPSBnZXRTZXRRdWFydGVyO1xuICAgIHByb3RvLm1vbnRoID0gZ2V0U2V0TW9udGg7XG4gICAgcHJvdG8uZGF5c0luTW9udGggPSBnZXREYXlzSW5Nb250aDtcbiAgICBwcm90by53ZWVrID0gcHJvdG8ud2Vla3MgPSBnZXRTZXRXZWVrO1xuICAgIHByb3RvLmlzb1dlZWsgPSBwcm90by5pc29XZWVrcyA9IGdldFNldElTT1dlZWs7XG4gICAgcHJvdG8ud2Vla3NJblllYXIgPSBnZXRXZWVrc0luWWVhcjtcbiAgICBwcm90by53ZWVrc0luV2Vla1llYXIgPSBnZXRXZWVrc0luV2Vla1llYXI7XG4gICAgcHJvdG8uaXNvV2Vla3NJblllYXIgPSBnZXRJU09XZWVrc0luWWVhcjtcbiAgICBwcm90by5pc29XZWVrc0luSVNPV2Vla1llYXIgPSBnZXRJU09XZWVrc0luSVNPV2Vla1llYXI7XG4gICAgcHJvdG8uZGF0ZSA9IGdldFNldERheU9mTW9udGg7XG4gICAgcHJvdG8uZGF5ID0gcHJvdG8uZGF5cyA9IGdldFNldERheU9mV2VlaztcbiAgICBwcm90by53ZWVrZGF5ID0gZ2V0U2V0TG9jYWxlRGF5T2ZXZWVrO1xuICAgIHByb3RvLmlzb1dlZWtkYXkgPSBnZXRTZXRJU09EYXlPZldlZWs7XG4gICAgcHJvdG8uZGF5T2ZZZWFyID0gZ2V0U2V0RGF5T2ZZZWFyO1xuICAgIHByb3RvLmhvdXIgPSBwcm90by5ob3VycyA9IGdldFNldEhvdXI7XG4gICAgcHJvdG8ubWludXRlID0gcHJvdG8ubWludXRlcyA9IGdldFNldE1pbnV0ZTtcbiAgICBwcm90by5zZWNvbmQgPSBwcm90by5zZWNvbmRzID0gZ2V0U2V0U2Vjb25kO1xuICAgIHByb3RvLm1pbGxpc2Vjb25kID0gcHJvdG8ubWlsbGlzZWNvbmRzID0gZ2V0U2V0TWlsbGlzZWNvbmQ7XG4gICAgcHJvdG8udXRjT2Zmc2V0ID0gZ2V0U2V0T2Zmc2V0O1xuICAgIHByb3RvLnV0YyA9IHNldE9mZnNldFRvVVRDO1xuICAgIHByb3RvLmxvY2FsID0gc2V0T2Zmc2V0VG9Mb2NhbDtcbiAgICBwcm90by5wYXJzZVpvbmUgPSBzZXRPZmZzZXRUb1BhcnNlZE9mZnNldDtcbiAgICBwcm90by5oYXNBbGlnbmVkSG91ck9mZnNldCA9IGhhc0FsaWduZWRIb3VyT2Zmc2V0O1xuICAgIHByb3RvLmlzRFNUID0gaXNEYXlsaWdodFNhdmluZ1RpbWU7XG4gICAgcHJvdG8uaXNMb2NhbCA9IGlzTG9jYWw7XG4gICAgcHJvdG8uaXNVdGNPZmZzZXQgPSBpc1V0Y09mZnNldDtcbiAgICBwcm90by5pc1V0YyA9IGlzVXRjO1xuICAgIHByb3RvLmlzVVRDID0gaXNVdGM7XG4gICAgcHJvdG8uem9uZUFiYnIgPSBnZXRab25lQWJicjtcbiAgICBwcm90by56b25lTmFtZSA9IGdldFpvbmVOYW1lO1xuICAgIHByb3RvLmRhdGVzID0gZGVwcmVjYXRlKFxuICAgICAgICAnZGF0ZXMgYWNjZXNzb3IgaXMgZGVwcmVjYXRlZC4gVXNlIGRhdGUgaW5zdGVhZC4nLFxuICAgICAgICBnZXRTZXREYXlPZk1vbnRoXG4gICAgKTtcbiAgICBwcm90by5tb250aHMgPSBkZXByZWNhdGUoXG4gICAgICAgICdtb250aHMgYWNjZXNzb3IgaXMgZGVwcmVjYXRlZC4gVXNlIG1vbnRoIGluc3RlYWQnLFxuICAgICAgICBnZXRTZXRNb250aFxuICAgICk7XG4gICAgcHJvdG8ueWVhcnMgPSBkZXByZWNhdGUoXG4gICAgICAgICd5ZWFycyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgeWVhciBpbnN0ZWFkJyxcbiAgICAgICAgZ2V0U2V0WWVhclxuICAgICk7XG4gICAgcHJvdG8uem9uZSA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ21vbWVudCgpLnpvbmUgaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudCgpLnV0Y09mZnNldCBpbnN0ZWFkLiBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL3pvbmUvJyxcbiAgICAgICAgZ2V0U2V0Wm9uZVxuICAgICk7XG4gICAgcHJvdG8uaXNEU1RTaGlmdGVkID0gZGVwcmVjYXRlKFxuICAgICAgICAnaXNEU1RTaGlmdGVkIGlzIGRlcHJlY2F0ZWQuIFNlZSBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2RzdC1zaGlmdGVkLyBmb3IgbW9yZSBpbmZvcm1hdGlvbicsXG4gICAgICAgIGlzRGF5bGlnaHRTYXZpbmdUaW1lU2hpZnRlZFxuICAgICk7XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVVbml4KGlucHV0KSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVMb2NhbChpbnB1dCAqIDEwMDApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUluWm9uZSgpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsLmFwcGx5KG51bGwsIGFyZ3VtZW50cykucGFyc2Vab25lKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJlUGFyc2VQb3N0Rm9ybWF0KHN0cmluZykge1xuICAgICAgICByZXR1cm4gc3RyaW5nO1xuICAgIH1cblxuICAgIHZhciBwcm90byQxID0gTG9jYWxlLnByb3RvdHlwZTtcblxuICAgIHByb3RvJDEuY2FsZW5kYXIgPSBjYWxlbmRhcjtcbiAgICBwcm90byQxLmxvbmdEYXRlRm9ybWF0ID0gbG9uZ0RhdGVGb3JtYXQ7XG4gICAgcHJvdG8kMS5pbnZhbGlkRGF0ZSA9IGludmFsaWREYXRlO1xuICAgIHByb3RvJDEub3JkaW5hbCA9IG9yZGluYWw7XG4gICAgcHJvdG8kMS5wcmVwYXJzZSA9IHByZVBhcnNlUG9zdEZvcm1hdDtcbiAgICBwcm90byQxLnBvc3Rmb3JtYXQgPSBwcmVQYXJzZVBvc3RGb3JtYXQ7XG4gICAgcHJvdG8kMS5yZWxhdGl2ZVRpbWUgPSByZWxhdGl2ZVRpbWU7XG4gICAgcHJvdG8kMS5wYXN0RnV0dXJlID0gcGFzdEZ1dHVyZTtcbiAgICBwcm90byQxLnNldCA9IHNldDtcbiAgICBwcm90byQxLmVyYXMgPSBsb2NhbGVFcmFzO1xuICAgIHByb3RvJDEuZXJhc1BhcnNlID0gbG9jYWxlRXJhc1BhcnNlO1xuICAgIHByb3RvJDEuZXJhc0NvbnZlcnRZZWFyID0gbG9jYWxlRXJhc0NvbnZlcnRZZWFyO1xuICAgIHByb3RvJDEuZXJhc0FiYnJSZWdleCA9IGVyYXNBYmJyUmVnZXg7XG4gICAgcHJvdG8kMS5lcmFzTmFtZVJlZ2V4ID0gZXJhc05hbWVSZWdleDtcbiAgICBwcm90byQxLmVyYXNOYXJyb3dSZWdleCA9IGVyYXNOYXJyb3dSZWdleDtcblxuICAgIHByb3RvJDEubW9udGhzID0gbG9jYWxlTW9udGhzO1xuICAgIHByb3RvJDEubW9udGhzU2hvcnQgPSBsb2NhbGVNb250aHNTaG9ydDtcbiAgICBwcm90byQxLm1vbnRoc1BhcnNlID0gbG9jYWxlTW9udGhzUGFyc2U7XG4gICAgcHJvdG8kMS5tb250aHNSZWdleCA9IG1vbnRoc1JlZ2V4O1xuICAgIHByb3RvJDEubW9udGhzU2hvcnRSZWdleCA9IG1vbnRoc1Nob3J0UmVnZXg7XG4gICAgcHJvdG8kMS53ZWVrID0gbG9jYWxlV2VlaztcbiAgICBwcm90byQxLmZpcnN0RGF5T2ZZZWFyID0gbG9jYWxlRmlyc3REYXlPZlllYXI7XG4gICAgcHJvdG8kMS5maXJzdERheU9mV2VlayA9IGxvY2FsZUZpcnN0RGF5T2ZXZWVrO1xuXG4gICAgcHJvdG8kMS53ZWVrZGF5cyA9IGxvY2FsZVdlZWtkYXlzO1xuICAgIHByb3RvJDEud2Vla2RheXNNaW4gPSBsb2NhbGVXZWVrZGF5c01pbjtcbiAgICBwcm90byQxLndlZWtkYXlzU2hvcnQgPSBsb2NhbGVXZWVrZGF5c1Nob3J0O1xuICAgIHByb3RvJDEud2Vla2RheXNQYXJzZSA9IGxvY2FsZVdlZWtkYXlzUGFyc2U7XG5cbiAgICBwcm90byQxLndlZWtkYXlzUmVnZXggPSB3ZWVrZGF5c1JlZ2V4O1xuICAgIHByb3RvJDEud2Vla2RheXNTaG9ydFJlZ2V4ID0gd2Vla2RheXNTaG9ydFJlZ2V4O1xuICAgIHByb3RvJDEud2Vla2RheXNNaW5SZWdleCA9IHdlZWtkYXlzTWluUmVnZXg7XG5cbiAgICBwcm90byQxLmlzUE0gPSBsb2NhbGVJc1BNO1xuICAgIHByb3RvJDEubWVyaWRpZW0gPSBsb2NhbGVNZXJpZGllbTtcblxuICAgIGZ1bmN0aW9uIGdldCQxKGZvcm1hdCwgaW5kZXgsIGZpZWxkLCBzZXR0ZXIpIHtcbiAgICAgICAgdmFyIGxvY2FsZSA9IGdldExvY2FsZSgpLFxuICAgICAgICAgICAgdXRjID0gY3JlYXRlVVRDKCkuc2V0KHNldHRlciwgaW5kZXgpO1xuICAgICAgICByZXR1cm4gbG9jYWxlW2ZpZWxkXSh1dGMsIGZvcm1hdCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdE1vbnRoc0ltcGwoZm9ybWF0LCBpbmRleCwgZmllbGQpIHtcbiAgICAgICAgaWYgKGlzTnVtYmVyKGZvcm1hdCkpIHtcbiAgICAgICAgICAgIGluZGV4ID0gZm9ybWF0O1xuICAgICAgICAgICAgZm9ybWF0ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9ybWF0ID0gZm9ybWF0IHx8ICcnO1xuXG4gICAgICAgIGlmIChpbmRleCAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0JDEoZm9ybWF0LCBpbmRleCwgZmllbGQsICdtb250aCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBvdXQgPSBbXTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDEyOyBpKyspIHtcbiAgICAgICAgICAgIG91dFtpXSA9IGdldCQxKGZvcm1hdCwgaSwgZmllbGQsICdtb250aCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuXG4gICAgLy8gKClcbiAgICAvLyAoNSlcbiAgICAvLyAoZm10LCA1KVxuICAgIC8vIChmbXQpXG4gICAgLy8gKHRydWUpXG4gICAgLy8gKHRydWUsIDUpXG4gICAgLy8gKHRydWUsIGZtdCwgNSlcbiAgICAvLyAodHJ1ZSwgZm10KVxuICAgIGZ1bmN0aW9uIGxpc3RXZWVrZGF5c0ltcGwobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4LCBmaWVsZCkge1xuICAgICAgICBpZiAodHlwZW9mIGxvY2FsZVNvcnRlZCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICBpZiAoaXNOdW1iZXIoZm9ybWF0KSkge1xuICAgICAgICAgICAgICAgIGluZGV4ID0gZm9ybWF0O1xuICAgICAgICAgICAgICAgIGZvcm1hdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0IHx8ICcnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9ybWF0ID0gbG9jYWxlU29ydGVkO1xuICAgICAgICAgICAgaW5kZXggPSBmb3JtYXQ7XG4gICAgICAgICAgICBsb2NhbGVTb3J0ZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKGlzTnVtYmVyKGZvcm1hdCkpIHtcbiAgICAgICAgICAgICAgICBpbmRleCA9IGZvcm1hdDtcbiAgICAgICAgICAgICAgICBmb3JtYXQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdCB8fCAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsb2NhbGUgPSBnZXRMb2NhbGUoKSxcbiAgICAgICAgICAgIHNoaWZ0ID0gbG9jYWxlU29ydGVkID8gbG9jYWxlLl93ZWVrLmRvdyA6IDAsXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgb3V0ID0gW107XG5cbiAgICAgICAgaWYgKGluZGV4ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXQkMShmb3JtYXQsIChpbmRleCArIHNoaWZ0KSAlIDcsIGZpZWxkLCAnZGF5Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgICAgICBvdXRbaV0gPSBnZXQkMShmb3JtYXQsIChpICsgc2hpZnQpICUgNywgZmllbGQsICdkYXknKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RNb250aHMoZm9ybWF0LCBpbmRleCkge1xuICAgICAgICByZXR1cm4gbGlzdE1vbnRoc0ltcGwoZm9ybWF0LCBpbmRleCwgJ21vbnRocycpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RNb250aHNTaG9ydChmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0TW9udGhzSW1wbChmb3JtYXQsIGluZGV4LCAnbW9udGhzU2hvcnQnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0V2Vla2RheXMobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0V2Vla2RheXNJbXBsKGxvY2FsZVNvcnRlZCwgZm9ybWF0LCBpbmRleCwgJ3dlZWtkYXlzJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdFdlZWtkYXlzU2hvcnQobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0V2Vla2RheXNJbXBsKGxvY2FsZVNvcnRlZCwgZm9ybWF0LCBpbmRleCwgJ3dlZWtkYXlzU2hvcnQnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0V2Vla2RheXNNaW4obG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0V2Vla2RheXNJbXBsKGxvY2FsZVNvcnRlZCwgZm9ybWF0LCBpbmRleCwgJ3dlZWtkYXlzTWluJyk7XG4gICAgfVxuXG4gICAgZ2V0U2V0R2xvYmFsTG9jYWxlKCdlbicsIHtcbiAgICAgICAgZXJhczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNpbmNlOiAnMDAwMS0wMS0wMScsXG4gICAgICAgICAgICAgICAgdW50aWw6ICtJbmZpbml0eSxcbiAgICAgICAgICAgICAgICBvZmZzZXQ6IDEsXG4gICAgICAgICAgICAgICAgbmFtZTogJ0Fubm8gRG9taW5pJyxcbiAgICAgICAgICAgICAgICBuYXJyb3c6ICdBRCcsXG4gICAgICAgICAgICAgICAgYWJicjogJ0FEJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2luY2U6ICcwMDAwLTEyLTMxJyxcbiAgICAgICAgICAgICAgICB1bnRpbDogLUluZmluaXR5LFxuICAgICAgICAgICAgICAgIG9mZnNldDogMSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnQmVmb3JlIENocmlzdCcsXG4gICAgICAgICAgICAgICAgbmFycm93OiAnQkMnLFxuICAgICAgICAgICAgICAgIGFiYnI6ICdCQycsXG4gICAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0odGh8c3R8bmR8cmQpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgdmFyIGIgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICBvdXRwdXQgPVxuICAgICAgICAgICAgICAgICAgICB0b0ludCgobnVtYmVyICUgMTAwKSAvIDEwKSA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAndGgnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnc3QnXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ25kJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gM1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAncmQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICd0aCc7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgb3V0cHV0O1xuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gU2lkZSBlZmZlY3QgaW1wb3J0c1xuXG4gICAgaG9va3MubGFuZyA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ21vbWVudC5sYW5nIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb21lbnQubG9jYWxlIGluc3RlYWQuJyxcbiAgICAgICAgZ2V0U2V0R2xvYmFsTG9jYWxlXG4gICAgKTtcbiAgICBob29rcy5sYW5nRGF0YSA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ21vbWVudC5sYW5nRGF0YSBpcyBkZXByZWNhdGVkLiBVc2UgbW9tZW50LmxvY2FsZURhdGEgaW5zdGVhZC4nLFxuICAgICAgICBnZXRMb2NhbGVcbiAgICApO1xuXG4gICAgdmFyIG1hdGhBYnMgPSBNYXRoLmFicztcblxuICAgIGZ1bmN0aW9uIGFicygpIHtcbiAgICAgICAgdmFyIGRhdGEgPSB0aGlzLl9kYXRhO1xuXG4gICAgICAgIHRoaXMuX21pbGxpc2Vjb25kcyA9IG1hdGhBYnModGhpcy5fbWlsbGlzZWNvbmRzKTtcbiAgICAgICAgdGhpcy5fZGF5cyA9IG1hdGhBYnModGhpcy5fZGF5cyk7XG4gICAgICAgIHRoaXMuX21vbnRocyA9IG1hdGhBYnModGhpcy5fbW9udGhzKTtcblxuICAgICAgICBkYXRhLm1pbGxpc2Vjb25kcyA9IG1hdGhBYnMoZGF0YS5taWxsaXNlY29uZHMpO1xuICAgICAgICBkYXRhLnNlY29uZHMgPSBtYXRoQWJzKGRhdGEuc2Vjb25kcyk7XG4gICAgICAgIGRhdGEubWludXRlcyA9IG1hdGhBYnMoZGF0YS5taW51dGVzKTtcbiAgICAgICAgZGF0YS5ob3VycyA9IG1hdGhBYnMoZGF0YS5ob3Vycyk7XG4gICAgICAgIGRhdGEubW9udGhzID0gbWF0aEFicyhkYXRhLm1vbnRocyk7XG4gICAgICAgIGRhdGEueWVhcnMgPSBtYXRoQWJzKGRhdGEueWVhcnMpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZFN1YnRyYWN0JDEoZHVyYXRpb24sIGlucHV0LCB2YWx1ZSwgZGlyZWN0aW9uKSB7XG4gICAgICAgIHZhciBvdGhlciA9IGNyZWF0ZUR1cmF0aW9uKGlucHV0LCB2YWx1ZSk7XG5cbiAgICAgICAgZHVyYXRpb24uX21pbGxpc2Vjb25kcyArPSBkaXJlY3Rpb24gKiBvdGhlci5fbWlsbGlzZWNvbmRzO1xuICAgICAgICBkdXJhdGlvbi5fZGF5cyArPSBkaXJlY3Rpb24gKiBvdGhlci5fZGF5cztcbiAgICAgICAgZHVyYXRpb24uX21vbnRocyArPSBkaXJlY3Rpb24gKiBvdGhlci5fbW9udGhzO1xuXG4gICAgICAgIHJldHVybiBkdXJhdGlvbi5fYnViYmxlKCk7XG4gICAgfVxuXG4gICAgLy8gc3VwcG9ydHMgb25seSAyLjAtc3R5bGUgYWRkKDEsICdzJykgb3IgYWRkKGR1cmF0aW9uKVxuICAgIGZ1bmN0aW9uIGFkZCQxKGlucHV0LCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gYWRkU3VidHJhY3QkMSh0aGlzLCBpbnB1dCwgdmFsdWUsIDEpO1xuICAgIH1cblxuICAgIC8vIHN1cHBvcnRzIG9ubHkgMi4wLXN0eWxlIHN1YnRyYWN0KDEsICdzJykgb3Igc3VidHJhY3QoZHVyYXRpb24pXG4gICAgZnVuY3Rpb24gc3VidHJhY3QkMShpbnB1dCwgdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGFkZFN1YnRyYWN0JDEodGhpcywgaW5wdXQsIHZhbHVlLCAtMSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWJzQ2VpbChudW1iZXIpIHtcbiAgICAgICAgaWYgKG51bWJlciA8IDApIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKG51bWJlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5jZWlsKG51bWJlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWJibGUoKSB7XG4gICAgICAgIHZhciBtaWxsaXNlY29uZHMgPSB0aGlzLl9taWxsaXNlY29uZHMsXG4gICAgICAgICAgICBkYXlzID0gdGhpcy5fZGF5cyxcbiAgICAgICAgICAgIG1vbnRocyA9IHRoaXMuX21vbnRocyxcbiAgICAgICAgICAgIGRhdGEgPSB0aGlzLl9kYXRhLFxuICAgICAgICAgICAgc2Vjb25kcyxcbiAgICAgICAgICAgIG1pbnV0ZXMsXG4gICAgICAgICAgICBob3VycyxcbiAgICAgICAgICAgIHllYXJzLFxuICAgICAgICAgICAgbW9udGhzRnJvbURheXM7XG5cbiAgICAgICAgLy8gaWYgd2UgaGF2ZSBhIG1peCBvZiBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgdmFsdWVzLCBidWJibGUgZG93biBmaXJzdFxuICAgICAgICAvLyBjaGVjazogaHR0cHM6Ly9naXRodWIuY29tL21vbWVudC9tb21lbnQvaXNzdWVzLzIxNjZcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICAobWlsbGlzZWNvbmRzID49IDAgJiYgZGF5cyA+PSAwICYmIG1vbnRocyA+PSAwKSB8fFxuICAgICAgICAgICAgICAgIChtaWxsaXNlY29uZHMgPD0gMCAmJiBkYXlzIDw9IDAgJiYgbW9udGhzIDw9IDApXG4gICAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgICAgbWlsbGlzZWNvbmRzICs9IGFic0NlaWwobW9udGhzVG9EYXlzKG1vbnRocykgKyBkYXlzKSAqIDg2NGU1O1xuICAgICAgICAgICAgZGF5cyA9IDA7XG4gICAgICAgICAgICBtb250aHMgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBjb2RlIGJ1YmJsZXMgdXAgdmFsdWVzLCBzZWUgdGhlIHRlc3RzIGZvclxuICAgICAgICAvLyBleGFtcGxlcyBvZiB3aGF0IHRoYXQgbWVhbnMuXG4gICAgICAgIGRhdGEubWlsbGlzZWNvbmRzID0gbWlsbGlzZWNvbmRzICUgMTAwMDtcblxuICAgICAgICBzZWNvbmRzID0gYWJzRmxvb3IobWlsbGlzZWNvbmRzIC8gMTAwMCk7XG4gICAgICAgIGRhdGEuc2Vjb25kcyA9IHNlY29uZHMgJSA2MDtcblxuICAgICAgICBtaW51dGVzID0gYWJzRmxvb3Ioc2Vjb25kcyAvIDYwKTtcbiAgICAgICAgZGF0YS5taW51dGVzID0gbWludXRlcyAlIDYwO1xuXG4gICAgICAgIGhvdXJzID0gYWJzRmxvb3IobWludXRlcyAvIDYwKTtcbiAgICAgICAgZGF0YS5ob3VycyA9IGhvdXJzICUgMjQ7XG5cbiAgICAgICAgZGF5cyArPSBhYnNGbG9vcihob3VycyAvIDI0KTtcblxuICAgICAgICAvLyBjb252ZXJ0IGRheXMgdG8gbW9udGhzXG4gICAgICAgIG1vbnRoc0Zyb21EYXlzID0gYWJzRmxvb3IoZGF5c1RvTW9udGhzKGRheXMpKTtcbiAgICAgICAgbW9udGhzICs9IG1vbnRoc0Zyb21EYXlzO1xuICAgICAgICBkYXlzIC09IGFic0NlaWwobW9udGhzVG9EYXlzKG1vbnRoc0Zyb21EYXlzKSk7XG5cbiAgICAgICAgLy8gMTIgbW9udGhzIC0+IDEgeWVhclxuICAgICAgICB5ZWFycyA9IGFic0Zsb29yKG1vbnRocyAvIDEyKTtcbiAgICAgICAgbW9udGhzICU9IDEyO1xuXG4gICAgICAgIGRhdGEuZGF5cyA9IGRheXM7XG4gICAgICAgIGRhdGEubW9udGhzID0gbW9udGhzO1xuICAgICAgICBkYXRhLnllYXJzID0geWVhcnM7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGF5c1RvTW9udGhzKGRheXMpIHtcbiAgICAgICAgLy8gNDAwIHllYXJzIGhhdmUgMTQ2MDk3IGRheXMgKHRha2luZyBpbnRvIGFjY291bnQgbGVhcCB5ZWFyIHJ1bGVzKVxuICAgICAgICAvLyA0MDAgeWVhcnMgaGF2ZSAxMiBtb250aHMgPT09IDQ4MDBcbiAgICAgICAgcmV0dXJuIChkYXlzICogNDgwMCkgLyAxNDYwOTc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW9udGhzVG9EYXlzKG1vbnRocykge1xuICAgICAgICAvLyB0aGUgcmV2ZXJzZSBvZiBkYXlzVG9Nb250aHNcbiAgICAgICAgcmV0dXJuIChtb250aHMgKiAxNDYwOTcpIC8gNDgwMDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhcyh1bml0cykge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG4gICAgICAgIHZhciBkYXlzLFxuICAgICAgICAgICAgbW9udGhzLFxuICAgICAgICAgICAgbWlsbGlzZWNvbmRzID0gdGhpcy5fbWlsbGlzZWNvbmRzO1xuXG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuXG4gICAgICAgIGlmICh1bml0cyA9PT0gJ21vbnRoJyB8fCB1bml0cyA9PT0gJ3F1YXJ0ZXInIHx8IHVuaXRzID09PSAneWVhcicpIHtcbiAgICAgICAgICAgIGRheXMgPSB0aGlzLl9kYXlzICsgbWlsbGlzZWNvbmRzIC8gODY0ZTU7XG4gICAgICAgICAgICBtb250aHMgPSB0aGlzLl9tb250aHMgKyBkYXlzVG9Nb250aHMoZGF5cyk7XG4gICAgICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3F1YXJ0ZXInOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzIC8gMztcbiAgICAgICAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRocyAvIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gaGFuZGxlIG1pbGxpc2Vjb25kcyBzZXBhcmF0ZWx5IGJlY2F1c2Ugb2YgZmxvYXRpbmcgcG9pbnQgbWF0aCBlcnJvcnMgKGlzc3VlICMxODY3KVxuICAgICAgICAgICAgZGF5cyA9IHRoaXMuX2RheXMgKyBNYXRoLnJvdW5kKG1vbnRoc1RvRGF5cyh0aGlzLl9tb250aHMpKTtcbiAgICAgICAgICAgIHN3aXRjaCAodW5pdHMpIHtcbiAgICAgICAgICAgICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRheXMgLyA3ICsgbWlsbGlzZWNvbmRzIC8gNjA0OGU1O1xuICAgICAgICAgICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXlzICsgbWlsbGlzZWNvbmRzIC8gODY0ZTU7XG4gICAgICAgICAgICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXlzICogMjQgKyBtaWxsaXNlY29uZHMgLyAzNmU1O1xuICAgICAgICAgICAgICAgIGNhc2UgJ21pbnV0ZSc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXlzICogMTQ0MCArIG1pbGxpc2Vjb25kcyAvIDZlNDtcbiAgICAgICAgICAgICAgICBjYXNlICdzZWNvbmQnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF5cyAqIDg2NDAwICsgbWlsbGlzZWNvbmRzIC8gMTAwMDtcbiAgICAgICAgICAgICAgICAvLyBNYXRoLmZsb29yIHByZXZlbnRzIGZsb2F0aW5nIHBvaW50IG1hdGggZXJyb3JzIGhlcmVcbiAgICAgICAgICAgICAgICBjYXNlICdtaWxsaXNlY29uZCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKGRheXMgKiA4NjRlNSkgKyBtaWxsaXNlY29uZHM7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIHVuaXQgJyArIHVuaXRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VBcyhhbGlhcykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXMoYWxpYXMpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHZhciBhc01pbGxpc2Vjb25kcyA9IG1ha2VBcygnbXMnKSxcbiAgICAgICAgYXNTZWNvbmRzID0gbWFrZUFzKCdzJyksXG4gICAgICAgIGFzTWludXRlcyA9IG1ha2VBcygnbScpLFxuICAgICAgICBhc0hvdXJzID0gbWFrZUFzKCdoJyksXG4gICAgICAgIGFzRGF5cyA9IG1ha2VBcygnZCcpLFxuICAgICAgICBhc1dlZWtzID0gbWFrZUFzKCd3JyksXG4gICAgICAgIGFzTW9udGhzID0gbWFrZUFzKCdNJyksXG4gICAgICAgIGFzUXVhcnRlcnMgPSBtYWtlQXMoJ1EnKSxcbiAgICAgICAgYXNZZWFycyA9IG1ha2VBcygneScpLFxuICAgICAgICB2YWx1ZU9mJDEgPSBhc01pbGxpc2Vjb25kcztcblxuICAgIGZ1bmN0aW9uIGNsb25lJDEoKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVEdXJhdGlvbih0aGlzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXQkMih1bml0cykge1xuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gdGhpc1t1bml0cyArICdzJ10oKSA6IE5hTjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYWtlR2V0dGVyKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXMuX2RhdGFbbmFtZV0gOiBOYU47XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIG1pbGxpc2Vjb25kcyA9IG1ha2VHZXR0ZXIoJ21pbGxpc2Vjb25kcycpLFxuICAgICAgICBzZWNvbmRzID0gbWFrZUdldHRlcignc2Vjb25kcycpLFxuICAgICAgICBtaW51dGVzID0gbWFrZUdldHRlcignbWludXRlcycpLFxuICAgICAgICBob3VycyA9IG1ha2VHZXR0ZXIoJ2hvdXJzJyksXG4gICAgICAgIGRheXMgPSBtYWtlR2V0dGVyKCdkYXlzJyksXG4gICAgICAgIG1vbnRocyA9IG1ha2VHZXR0ZXIoJ21vbnRocycpLFxuICAgICAgICB5ZWFycyA9IG1ha2VHZXR0ZXIoJ3llYXJzJyk7XG5cbiAgICBmdW5jdGlvbiB3ZWVrcygpIHtcbiAgICAgICAgcmV0dXJuIGFic0Zsb29yKHRoaXMuZGF5cygpIC8gNyk7XG4gICAgfVxuXG4gICAgdmFyIHJvdW5kID0gTWF0aC5yb3VuZCxcbiAgICAgICAgdGhyZXNob2xkcyA9IHtcbiAgICAgICAgICAgIHNzOiA0NCwgLy8gYSBmZXcgc2Vjb25kcyB0byBzZWNvbmRzXG4gICAgICAgICAgICBzOiA0NSwgLy8gc2Vjb25kcyB0byBtaW51dGVcbiAgICAgICAgICAgIG06IDQ1LCAvLyBtaW51dGVzIHRvIGhvdXJcbiAgICAgICAgICAgIGg6IDIyLCAvLyBob3VycyB0byBkYXlcbiAgICAgICAgICAgIGQ6IDI2LCAvLyBkYXlzIHRvIG1vbnRoL3dlZWtcbiAgICAgICAgICAgIHc6IG51bGwsIC8vIHdlZWtzIHRvIG1vbnRoXG4gICAgICAgICAgICBNOiAxMSwgLy8gbW9udGhzIHRvIHllYXJcbiAgICAgICAgfTtcblxuICAgIC8vIGhlbHBlciBmdW5jdGlvbiBmb3IgbW9tZW50LmZuLmZyb20sIG1vbWVudC5mbi5mcm9tTm93LCBhbmQgbW9tZW50LmR1cmF0aW9uLmZuLmh1bWFuaXplXG4gICAgZnVuY3Rpb24gc3Vic3RpdHV0ZVRpbWVBZ28oc3RyaW5nLCBudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGlzRnV0dXJlLCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5yZWxhdGl2ZVRpbWUobnVtYmVyIHx8IDEsICEhd2l0aG91dFN1ZmZpeCwgc3RyaW5nLCBpc0Z1dHVyZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVsYXRpdmVUaW1lJDEocG9zTmVnRHVyYXRpb24sIHdpdGhvdXRTdWZmaXgsIHRocmVzaG9sZHMsIGxvY2FsZSkge1xuICAgICAgICB2YXIgZHVyYXRpb24gPSBjcmVhdGVEdXJhdGlvbihwb3NOZWdEdXJhdGlvbikuYWJzKCksXG4gICAgICAgICAgICBzZWNvbmRzID0gcm91bmQoZHVyYXRpb24uYXMoJ3MnKSksXG4gICAgICAgICAgICBtaW51dGVzID0gcm91bmQoZHVyYXRpb24uYXMoJ20nKSksXG4gICAgICAgICAgICBob3VycyA9IHJvdW5kKGR1cmF0aW9uLmFzKCdoJykpLFxuICAgICAgICAgICAgZGF5cyA9IHJvdW5kKGR1cmF0aW9uLmFzKCdkJykpLFxuICAgICAgICAgICAgbW9udGhzID0gcm91bmQoZHVyYXRpb24uYXMoJ00nKSksXG4gICAgICAgICAgICB3ZWVrcyA9IHJvdW5kKGR1cmF0aW9uLmFzKCd3JykpLFxuICAgICAgICAgICAgeWVhcnMgPSByb3VuZChkdXJhdGlvbi5hcygneScpKSxcbiAgICAgICAgICAgIGEgPVxuICAgICAgICAgICAgICAgIChzZWNvbmRzIDw9IHRocmVzaG9sZHMuc3MgJiYgWydzJywgc2Vjb25kc10pIHx8XG4gICAgICAgICAgICAgICAgKHNlY29uZHMgPCB0aHJlc2hvbGRzLnMgJiYgWydzcycsIHNlY29uZHNdKSB8fFxuICAgICAgICAgICAgICAgIChtaW51dGVzIDw9IDEgJiYgWydtJ10pIHx8XG4gICAgICAgICAgICAgICAgKG1pbnV0ZXMgPCB0aHJlc2hvbGRzLm0gJiYgWydtbScsIG1pbnV0ZXNdKSB8fFxuICAgICAgICAgICAgICAgIChob3VycyA8PSAxICYmIFsnaCddKSB8fFxuICAgICAgICAgICAgICAgIChob3VycyA8IHRocmVzaG9sZHMuaCAmJiBbJ2hoJywgaG91cnNdKSB8fFxuICAgICAgICAgICAgICAgIChkYXlzIDw9IDEgJiYgWydkJ10pIHx8XG4gICAgICAgICAgICAgICAgKGRheXMgPCB0aHJlc2hvbGRzLmQgJiYgWydkZCcsIGRheXNdKTtcblxuICAgICAgICBpZiAodGhyZXNob2xkcy53ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGEgPVxuICAgICAgICAgICAgICAgIGEgfHxcbiAgICAgICAgICAgICAgICAod2Vla3MgPD0gMSAmJiBbJ3cnXSkgfHxcbiAgICAgICAgICAgICAgICAod2Vla3MgPCB0aHJlc2hvbGRzLncgJiYgWyd3dycsIHdlZWtzXSk7XG4gICAgICAgIH1cbiAgICAgICAgYSA9IGEgfHxcbiAgICAgICAgICAgIChtb250aHMgPD0gMSAmJiBbJ00nXSkgfHxcbiAgICAgICAgICAgIChtb250aHMgPCB0aHJlc2hvbGRzLk0gJiYgWydNTScsIG1vbnRoc10pIHx8XG4gICAgICAgICAgICAoeWVhcnMgPD0gMSAmJiBbJ3knXSkgfHwgWyd5eScsIHllYXJzXTtcblxuICAgICAgICBhWzJdID0gd2l0aG91dFN1ZmZpeDtcbiAgICAgICAgYVszXSA9ICtwb3NOZWdEdXJhdGlvbiA+IDA7XG4gICAgICAgIGFbNF0gPSBsb2NhbGU7XG4gICAgICAgIHJldHVybiBzdWJzdGl0dXRlVGltZUFnby5hcHBseShudWxsLCBhKTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGFsbG93cyB5b3UgdG8gc2V0IHRoZSByb3VuZGluZyBmdW5jdGlvbiBmb3IgcmVsYXRpdmUgdGltZSBzdHJpbmdzXG4gICAgZnVuY3Rpb24gZ2V0U2V0UmVsYXRpdmVUaW1lUm91bmRpbmcocm91bmRpbmdGdW5jdGlvbikge1xuICAgICAgICBpZiAocm91bmRpbmdGdW5jdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gcm91bmQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiByb3VuZGluZ0Z1bmN0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByb3VuZCA9IHJvdW5kaW5nRnVuY3Rpb247XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiBhbGxvd3MgeW91IHRvIHNldCBhIHRocmVzaG9sZCBmb3IgcmVsYXRpdmUgdGltZSBzdHJpbmdzXG4gICAgZnVuY3Rpb24gZ2V0U2V0UmVsYXRpdmVUaW1lVGhyZXNob2xkKHRocmVzaG9sZCwgbGltaXQpIHtcbiAgICAgICAgaWYgKHRocmVzaG9sZHNbdGhyZXNob2xkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxpbWl0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aHJlc2hvbGRzW3RocmVzaG9sZF07XG4gICAgICAgIH1cbiAgICAgICAgdGhyZXNob2xkc1t0aHJlc2hvbGRdID0gbGltaXQ7XG4gICAgICAgIGlmICh0aHJlc2hvbGQgPT09ICdzJykge1xuICAgICAgICAgICAgdGhyZXNob2xkcy5zcyA9IGxpbWl0IC0gMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBodW1hbml6ZShhcmdXaXRoU3VmZml4LCBhcmdUaHJlc2hvbGRzKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdpdGhTdWZmaXggPSBmYWxzZSxcbiAgICAgICAgICAgIHRoID0gdGhyZXNob2xkcyxcbiAgICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICAgIG91dHB1dDtcblxuICAgICAgICBpZiAodHlwZW9mIGFyZ1dpdGhTdWZmaXggPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBhcmdUaHJlc2hvbGRzID0gYXJnV2l0aFN1ZmZpeDtcbiAgICAgICAgICAgIGFyZ1dpdGhTdWZmaXggPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGFyZ1dpdGhTdWZmaXggPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgd2l0aFN1ZmZpeCA9IGFyZ1dpdGhTdWZmaXg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBhcmdUaHJlc2hvbGRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgdGggPSBPYmplY3QuYXNzaWduKHt9LCB0aHJlc2hvbGRzLCBhcmdUaHJlc2hvbGRzKTtcbiAgICAgICAgICAgIGlmIChhcmdUaHJlc2hvbGRzLnMgIT0gbnVsbCAmJiBhcmdUaHJlc2hvbGRzLnNzID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aC5zcyA9IGFyZ1RocmVzaG9sZHMucyAtIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsb2NhbGUgPSB0aGlzLmxvY2FsZURhdGEoKTtcbiAgICAgICAgb3V0cHV0ID0gcmVsYXRpdmVUaW1lJDEodGhpcywgIXdpdGhTdWZmaXgsIHRoLCBsb2NhbGUpO1xuXG4gICAgICAgIGlmICh3aXRoU3VmZml4KSB7XG4gICAgICAgICAgICBvdXRwdXQgPSBsb2NhbGUucGFzdEZ1dHVyZSgrdGhpcywgb3V0cHV0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBsb2NhbGUucG9zdGZvcm1hdChvdXRwdXQpO1xuICAgIH1cblxuICAgIHZhciBhYnMkMSA9IE1hdGguYWJzO1xuXG4gICAgZnVuY3Rpb24gc2lnbih4KSB7XG4gICAgICAgIHJldHVybiAoeCA+IDApIC0gKHggPCAwKSB8fCAreDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b0lTT1N0cmluZyQxKCkge1xuICAgICAgICAvLyBmb3IgSVNPIHN0cmluZ3Mgd2UgZG8gbm90IHVzZSB0aGUgbm9ybWFsIGJ1YmJsaW5nIHJ1bGVzOlxuICAgICAgICAvLyAgKiBtaWxsaXNlY29uZHMgYnViYmxlIHVwIHVudGlsIHRoZXkgYmVjb21lIGhvdXJzXG4gICAgICAgIC8vICAqIGRheXMgZG8gbm90IGJ1YmJsZSBhdCBhbGxcbiAgICAgICAgLy8gICogbW9udGhzIGJ1YmJsZSB1cCB1bnRpbCB0aGV5IGJlY29tZSB5ZWFyc1xuICAgICAgICAvLyBUaGlzIGlzIGJlY2F1c2UgdGhlcmUgaXMgbm8gY29udGV4dC1mcmVlIGNvbnZlcnNpb24gYmV0d2VlbiBob3VycyBhbmQgZGF5c1xuICAgICAgICAvLyAodGhpbmsgb2YgY2xvY2sgY2hhbmdlcylcbiAgICAgICAgLy8gYW5kIGFsc28gbm90IGJldHdlZW4gZGF5cyBhbmQgbW9udGhzICgyOC0zMSBkYXlzIHBlciBtb250aClcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2Vjb25kcyA9IGFicyQxKHRoaXMuX21pbGxpc2Vjb25kcykgLyAxMDAwLFxuICAgICAgICAgICAgZGF5cyA9IGFicyQxKHRoaXMuX2RheXMpLFxuICAgICAgICAgICAgbW9udGhzID0gYWJzJDEodGhpcy5fbW9udGhzKSxcbiAgICAgICAgICAgIG1pbnV0ZXMsXG4gICAgICAgICAgICBob3VycyxcbiAgICAgICAgICAgIHllYXJzLFxuICAgICAgICAgICAgcyxcbiAgICAgICAgICAgIHRvdGFsID0gdGhpcy5hc1NlY29uZHMoKSxcbiAgICAgICAgICAgIHRvdGFsU2lnbixcbiAgICAgICAgICAgIHltU2lnbixcbiAgICAgICAgICAgIGRheXNTaWduLFxuICAgICAgICAgICAgaG1zU2lnbjtcblxuICAgICAgICBpZiAoIXRvdGFsKSB7XG4gICAgICAgICAgICAvLyB0aGlzIGlzIHRoZSBzYW1lIGFzIEMjJ3MgKE5vZGEpIGFuZCBweXRob24gKGlzb2RhdGUpLi4uXG4gICAgICAgICAgICAvLyBidXQgbm90IG90aGVyIEpTIChnb29nLmRhdGUpXG4gICAgICAgICAgICByZXR1cm4gJ1AwRCc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAzNjAwIHNlY29uZHMgLT4gNjAgbWludXRlcyAtPiAxIGhvdXJcbiAgICAgICAgbWludXRlcyA9IGFic0Zsb29yKHNlY29uZHMgLyA2MCk7XG4gICAgICAgIGhvdXJzID0gYWJzRmxvb3IobWludXRlcyAvIDYwKTtcbiAgICAgICAgc2Vjb25kcyAlPSA2MDtcbiAgICAgICAgbWludXRlcyAlPSA2MDtcblxuICAgICAgICAvLyAxMiBtb250aHMgLT4gMSB5ZWFyXG4gICAgICAgIHllYXJzID0gYWJzRmxvb3IobW9udGhzIC8gMTIpO1xuICAgICAgICBtb250aHMgJT0gMTI7XG5cbiAgICAgICAgLy8gaW5zcGlyZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL2RvcmRpbGxlL21vbWVudC1pc29kdXJhdGlvbi9ibG9iL21hc3Rlci9tb21lbnQuaXNvZHVyYXRpb24uanNcbiAgICAgICAgcyA9IHNlY29uZHMgPyBzZWNvbmRzLnRvRml4ZWQoMykucmVwbGFjZSgvXFwuPzArJC8sICcnKSA6ICcnO1xuXG4gICAgICAgIHRvdGFsU2lnbiA9IHRvdGFsIDwgMCA/ICctJyA6ICcnO1xuICAgICAgICB5bVNpZ24gPSBzaWduKHRoaXMuX21vbnRocykgIT09IHNpZ24odG90YWwpID8gJy0nIDogJyc7XG4gICAgICAgIGRheXNTaWduID0gc2lnbih0aGlzLl9kYXlzKSAhPT0gc2lnbih0b3RhbCkgPyAnLScgOiAnJztcbiAgICAgICAgaG1zU2lnbiA9IHNpZ24odGhpcy5fbWlsbGlzZWNvbmRzKSAhPT0gc2lnbih0b3RhbCkgPyAnLScgOiAnJztcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdG90YWxTaWduICtcbiAgICAgICAgICAgICdQJyArXG4gICAgICAgICAgICAoeWVhcnMgPyB5bVNpZ24gKyB5ZWFycyArICdZJyA6ICcnKSArXG4gICAgICAgICAgICAobW9udGhzID8geW1TaWduICsgbW9udGhzICsgJ00nIDogJycpICtcbiAgICAgICAgICAgIChkYXlzID8gZGF5c1NpZ24gKyBkYXlzICsgJ0QnIDogJycpICtcbiAgICAgICAgICAgIChob3VycyB8fCBtaW51dGVzIHx8IHNlY29uZHMgPyAnVCcgOiAnJykgK1xuICAgICAgICAgICAgKGhvdXJzID8gaG1zU2lnbiArIGhvdXJzICsgJ0gnIDogJycpICtcbiAgICAgICAgICAgIChtaW51dGVzID8gaG1zU2lnbiArIG1pbnV0ZXMgKyAnTScgOiAnJykgK1xuICAgICAgICAgICAgKHNlY29uZHMgPyBobXNTaWduICsgcyArICdTJyA6ICcnKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHZhciBwcm90byQyID0gRHVyYXRpb24ucHJvdG90eXBlO1xuXG4gICAgcHJvdG8kMi5pc1ZhbGlkID0gaXNWYWxpZCQxO1xuICAgIHByb3RvJDIuYWJzID0gYWJzO1xuICAgIHByb3RvJDIuYWRkID0gYWRkJDE7XG4gICAgcHJvdG8kMi5zdWJ0cmFjdCA9IHN1YnRyYWN0JDE7XG4gICAgcHJvdG8kMi5hcyA9IGFzO1xuICAgIHByb3RvJDIuYXNNaWxsaXNlY29uZHMgPSBhc01pbGxpc2Vjb25kcztcbiAgICBwcm90byQyLmFzU2Vjb25kcyA9IGFzU2Vjb25kcztcbiAgICBwcm90byQyLmFzTWludXRlcyA9IGFzTWludXRlcztcbiAgICBwcm90byQyLmFzSG91cnMgPSBhc0hvdXJzO1xuICAgIHByb3RvJDIuYXNEYXlzID0gYXNEYXlzO1xuICAgIHByb3RvJDIuYXNXZWVrcyA9IGFzV2Vla3M7XG4gICAgcHJvdG8kMi5hc01vbnRocyA9IGFzTW9udGhzO1xuICAgIHByb3RvJDIuYXNRdWFydGVycyA9IGFzUXVhcnRlcnM7XG4gICAgcHJvdG8kMi5hc1llYXJzID0gYXNZZWFycztcbiAgICBwcm90byQyLnZhbHVlT2YgPSB2YWx1ZU9mJDE7XG4gICAgcHJvdG8kMi5fYnViYmxlID0gYnViYmxlO1xuICAgIHByb3RvJDIuY2xvbmUgPSBjbG9uZSQxO1xuICAgIHByb3RvJDIuZ2V0ID0gZ2V0JDI7XG4gICAgcHJvdG8kMi5taWxsaXNlY29uZHMgPSBtaWxsaXNlY29uZHM7XG4gICAgcHJvdG8kMi5zZWNvbmRzID0gc2Vjb25kcztcbiAgICBwcm90byQyLm1pbnV0ZXMgPSBtaW51dGVzO1xuICAgIHByb3RvJDIuaG91cnMgPSBob3VycztcbiAgICBwcm90byQyLmRheXMgPSBkYXlzO1xuICAgIHByb3RvJDIud2Vla3MgPSB3ZWVrcztcbiAgICBwcm90byQyLm1vbnRocyA9IG1vbnRocztcbiAgICBwcm90byQyLnllYXJzID0geWVhcnM7XG4gICAgcHJvdG8kMi5odW1hbml6ZSA9IGh1bWFuaXplO1xuICAgIHByb3RvJDIudG9JU09TdHJpbmcgPSB0b0lTT1N0cmluZyQxO1xuICAgIHByb3RvJDIudG9TdHJpbmcgPSB0b0lTT1N0cmluZyQxO1xuICAgIHByb3RvJDIudG9KU09OID0gdG9JU09TdHJpbmckMTtcbiAgICBwcm90byQyLmxvY2FsZSA9IGxvY2FsZTtcbiAgICBwcm90byQyLmxvY2FsZURhdGEgPSBsb2NhbGVEYXRhO1xuXG4gICAgcHJvdG8kMi50b0lzb1N0cmluZyA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ3RvSXNvU3RyaW5nKCkgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSB0b0lTT1N0cmluZygpIGluc3RlYWQgKG5vdGljZSB0aGUgY2FwaXRhbHMpJyxcbiAgICAgICAgdG9JU09TdHJpbmckMVxuICAgICk7XG4gICAgcHJvdG8kMi5sYW5nID0gbGFuZztcblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdYJywgMCwgMCwgJ3VuaXgnKTtcbiAgICBhZGRGb3JtYXRUb2tlbigneCcsIDAsIDAsICd2YWx1ZU9mJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCd4JywgbWF0Y2hTaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1gnLCBtYXRjaFRpbWVzdGFtcCk7XG4gICAgYWRkUGFyc2VUb2tlbignWCcsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShwYXJzZUZsb2F0KGlucHV0KSAqIDEwMDApO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ3gnLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUodG9JbnQoaW5wdXQpKTtcbiAgICB9KTtcblxuICAgIC8vISBtb21lbnQuanNcblxuICAgIGhvb2tzLnZlcnNpb24gPSAnMi4zMC4xJztcblxuICAgIHNldEhvb2tDYWxsYmFjayhjcmVhdGVMb2NhbCk7XG5cbiAgICBob29rcy5mbiA9IHByb3RvO1xuICAgIGhvb2tzLm1pbiA9IG1pbjtcbiAgICBob29rcy5tYXggPSBtYXg7XG4gICAgaG9va3Mubm93ID0gbm93O1xuICAgIGhvb2tzLnV0YyA9IGNyZWF0ZVVUQztcbiAgICBob29rcy51bml4ID0gY3JlYXRlVW5peDtcbiAgICBob29rcy5tb250aHMgPSBsaXN0TW9udGhzO1xuICAgIGhvb2tzLmlzRGF0ZSA9IGlzRGF0ZTtcbiAgICBob29rcy5sb2NhbGUgPSBnZXRTZXRHbG9iYWxMb2NhbGU7XG4gICAgaG9va3MuaW52YWxpZCA9IGNyZWF0ZUludmFsaWQ7XG4gICAgaG9va3MuZHVyYXRpb24gPSBjcmVhdGVEdXJhdGlvbjtcbiAgICBob29rcy5pc01vbWVudCA9IGlzTW9tZW50O1xuICAgIGhvb2tzLndlZWtkYXlzID0gbGlzdFdlZWtkYXlzO1xuICAgIGhvb2tzLnBhcnNlWm9uZSA9IGNyZWF0ZUluWm9uZTtcbiAgICBob29rcy5sb2NhbGVEYXRhID0gZ2V0TG9jYWxlO1xuICAgIGhvb2tzLmlzRHVyYXRpb24gPSBpc0R1cmF0aW9uO1xuICAgIGhvb2tzLm1vbnRoc1Nob3J0ID0gbGlzdE1vbnRoc1Nob3J0O1xuICAgIGhvb2tzLndlZWtkYXlzTWluID0gbGlzdFdlZWtkYXlzTWluO1xuICAgIGhvb2tzLmRlZmluZUxvY2FsZSA9IGRlZmluZUxvY2FsZTtcbiAgICBob29rcy51cGRhdGVMb2NhbGUgPSB1cGRhdGVMb2NhbGU7XG4gICAgaG9va3MubG9jYWxlcyA9IGxpc3RMb2NhbGVzO1xuICAgIGhvb2tzLndlZWtkYXlzU2hvcnQgPSBsaXN0V2Vla2RheXNTaG9ydDtcbiAgICBob29rcy5ub3JtYWxpemVVbml0cyA9IG5vcm1hbGl6ZVVuaXRzO1xuICAgIGhvb2tzLnJlbGF0aXZlVGltZVJvdW5kaW5nID0gZ2V0U2V0UmVsYXRpdmVUaW1lUm91bmRpbmc7XG4gICAgaG9va3MucmVsYXRpdmVUaW1lVGhyZXNob2xkID0gZ2V0U2V0UmVsYXRpdmVUaW1lVGhyZXNob2xkO1xuICAgIGhvb2tzLmNhbGVuZGFyRm9ybWF0ID0gZ2V0Q2FsZW5kYXJGb3JtYXQ7XG4gICAgaG9va3MucHJvdG90eXBlID0gcHJvdG87XG5cbiAgICAvLyBjdXJyZW50bHkgSFRNTDUgaW5wdXQgdHlwZSBvbmx5IHN1cHBvcnRzIDI0LWhvdXIgZm9ybWF0c1xuICAgIGhvb2tzLkhUTUw1X0ZNVCA9IHtcbiAgICAgICAgREFURVRJTUVfTE9DQUw6ICdZWVlZLU1NLUREVEhIOm1tJywgLy8gPGlucHV0IHR5cGU9XCJkYXRldGltZS1sb2NhbFwiIC8+XG4gICAgICAgIERBVEVUSU1FX0xPQ0FMX1NFQ09ORFM6ICdZWVlZLU1NLUREVEhIOm1tOnNzJywgLy8gPGlucHV0IHR5cGU9XCJkYXRldGltZS1sb2NhbFwiIHN0ZXA9XCIxXCIgLz5cbiAgICAgICAgREFURVRJTUVfTE9DQUxfTVM6ICdZWVlZLU1NLUREVEhIOm1tOnNzLlNTUycsIC8vIDxpbnB1dCB0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIiBzdGVwPVwiMC4wMDFcIiAvPlxuICAgICAgICBEQVRFOiAnWVlZWS1NTS1ERCcsIC8vIDxpbnB1dCB0eXBlPVwiZGF0ZVwiIC8+XG4gICAgICAgIFRJTUU6ICdISDptbScsIC8vIDxpbnB1dCB0eXBlPVwidGltZVwiIC8+XG4gICAgICAgIFRJTUVfU0VDT05EUzogJ0hIOm1tOnNzJywgLy8gPGlucHV0IHR5cGU9XCJ0aW1lXCIgc3RlcD1cIjFcIiAvPlxuICAgICAgICBUSU1FX01TOiAnSEg6bW06c3MuU1NTJywgLy8gPGlucHV0IHR5cGU9XCJ0aW1lXCIgc3RlcD1cIjAuMDAxXCIgLz5cbiAgICAgICAgV0VFSzogJ0dHR0ctW1ddV1cnLCAvLyA8aW5wdXQgdHlwZT1cIndlZWtcIiAvPlxuICAgICAgICBNT05USDogJ1lZWVktTU0nLCAvLyA8aW5wdXQgdHlwZT1cIm1vbnRoXCIgLz5cbiAgICB9O1xuXG4gICAgcmV0dXJuIGhvb2tzO1xuXG59KSkpO1xuIiwgInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXSc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBTdHJpbmdgIHByaW1pdGl2ZSBvciBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzdHJpbmcsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1N0cmluZygnYWJjJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1N0cmluZygxKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgfHxcbiAgICAoIWlzQXJyYXkodmFsdWUpICYmIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gc3RyaW5nVGFnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1N0cmluZztcbiIsICJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYm9vbGVhbiBwcmltaXRpdmUgb3Igb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgYm9vbGVhbiwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQm9vbGVhbihmYWxzZSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0Jvb2xlYW4obnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Jvb2xlYW4odmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09PSB0cnVlIHx8IHZhbHVlID09PSBmYWxzZSB8fFxuICAgIChpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IGJvb2xUYWcpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQm9vbGVhbjtcbiIsICJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXSc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBOdW1iZXJgIHByaW1pdGl2ZSBvciBvYmplY3QuXG4gKlxuICogKipOb3RlOioqIFRvIGV4Y2x1ZGUgYEluZmluaXR5YCwgYC1JbmZpbml0eWAsIGFuZCBgTmFOYCwgd2hpY2ggYXJlXG4gKiBjbGFzc2lmaWVkIGFzIG51bWJlcnMsIHVzZSB0aGUgYF8uaXNGaW5pdGVgIG1ldGhvZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG51bWJlciwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzTnVtYmVyKDMpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNOdW1iZXIoTnVtYmVyLk1JTl9WQUxVRSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc051bWJlcihJbmZpbml0eSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc051bWJlcignMycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNOdW1iZXIodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyB8fFxuICAgIChpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IG51bWJlclRhZyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNOdW1iZXI7XG4iLCAidmFyIGlzTnVtYmVyID0gcmVxdWlyZSgnLi9pc051bWJlcicpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGBOYU5gLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBiYXNlZCBvblxuICogW2BOdW1iZXIuaXNOYU5gXShodHRwczovL21kbi5pby9OdW1iZXIvaXNOYU4pIGFuZCBpcyBub3QgdGhlIHNhbWUgYXNcbiAqIGdsb2JhbCBbYGlzTmFOYF0oaHR0cHM6Ly9tZG4uaW8vaXNOYU4pIHdoaWNoIHJldHVybnMgYHRydWVgIGZvclxuICogYHVuZGVmaW5lZGAgYW5kIG90aGVyIG5vbi1udW1iZXIgdmFsdWVzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGBOYU5gLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNOYU4oTmFOKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzTmFOKG5ldyBOdW1iZXIoTmFOKSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogaXNOYU4odW5kZWZpbmVkKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzTmFOKHVuZGVmaW5lZCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc05hTih2YWx1ZSkge1xuICAvLyBBbiBgTmFOYCBwcmltaXRpdmUgaXMgdGhlIG9ubHkgdmFsdWUgdGhhdCBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLlxuICAvLyBQZXJmb3JtIHRoZSBgdG9TdHJpbmdUYWdgIGNoZWNrIGZpcnN0IHRvIGF2b2lkIGVycm9ycyB3aXRoIHNvbWVcbiAgLy8gQWN0aXZlWCBvYmplY3RzIGluIElFLlxuICByZXR1cm4gaXNOdW1iZXIodmFsdWUpICYmIHZhbHVlICE9ICt2YWx1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc05hTjtcbiIsICIvKiEgQHByZXNlcnZlXG4gKiBudW1lcmFsLmpzXG4gKiB2ZXJzaW9uIDogMi4wLjZcbiAqIGF1dGhvciA6IEFkYW0gRHJhcGVyXG4gKiBsaWNlbnNlIDogTUlUXG4gKiBodHRwOi8vYWRhbXdkcmFwZXIuZ2l0aHViLmNvbS9OdW1lcmFsLWpzL1xuICovXG5cbihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoZmFjdG9yeSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBnbG9iYWwubnVtZXJhbCA9IGZhY3RvcnkoKTtcbiAgICB9XG59KHRoaXMsIGZ1bmN0aW9uICgpIHtcbiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgIFZhcmlhYmxlc1xuICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAgIHZhciBudW1lcmFsLFxuICAgICAgICBfLFxuICAgICAgICBWRVJTSU9OID0gJzIuMC42JyxcbiAgICAgICAgZm9ybWF0cyA9IHt9LFxuICAgICAgICBsb2NhbGVzID0ge30sXG4gICAgICAgIGRlZmF1bHRzID0ge1xuICAgICAgICAgICAgY3VycmVudExvY2FsZTogJ2VuJyxcbiAgICAgICAgICAgIHplcm9Gb3JtYXQ6IG51bGwsXG4gICAgICAgICAgICBudWxsRm9ybWF0OiBudWxsLFxuICAgICAgICAgICAgZGVmYXVsdEZvcm1hdDogJzAsMCcsXG4gICAgICAgICAgICBzY2FsZVBlcmNlbnRCeTEwMDogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBvcHRpb25zID0ge1xuICAgICAgICAgICAgY3VycmVudExvY2FsZTogZGVmYXVsdHMuY3VycmVudExvY2FsZSxcbiAgICAgICAgICAgIHplcm9Gb3JtYXQ6IGRlZmF1bHRzLnplcm9Gb3JtYXQsXG4gICAgICAgICAgICBudWxsRm9ybWF0OiBkZWZhdWx0cy5udWxsRm9ybWF0LFxuICAgICAgICAgICAgZGVmYXVsdEZvcm1hdDogZGVmYXVsdHMuZGVmYXVsdEZvcm1hdCxcbiAgICAgICAgICAgIHNjYWxlUGVyY2VudEJ5MTAwOiBkZWZhdWx0cy5zY2FsZVBlcmNlbnRCeTEwMFxuICAgICAgICB9O1xuXG5cbiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgIENvbnN0cnVjdG9yc1xuICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAgIC8vIE51bWVyYWwgcHJvdG90eXBlIG9iamVjdFxuICAgIGZ1bmN0aW9uIE51bWVyYWwoaW5wdXQsIG51bWJlcikge1xuICAgICAgICB0aGlzLl9pbnB1dCA9IGlucHV0O1xuXG4gICAgICAgIHRoaXMuX3ZhbHVlID0gbnVtYmVyO1xuICAgIH1cblxuICAgIG51bWVyYWwgPSBmdW5jdGlvbihpbnB1dCkge1xuICAgICAgICB2YXIgdmFsdWUsXG4gICAgICAgICAgICBraW5kLFxuICAgICAgICAgICAgdW5mb3JtYXRGdW5jdGlvbixcbiAgICAgICAgICAgIHJlZ2V4cDtcblxuICAgICAgICBpZiAobnVtZXJhbC5pc051bWVyYWwoaW5wdXQpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IGlucHV0LnZhbHVlKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaW5wdXQgPT09IDAgfHwgdHlwZW9mIGlucHV0ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdmFsdWUgPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKGlucHV0ID09PSBudWxsIHx8IF8uaXNOYU4oaW5wdXQpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IG51bGw7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuemVyb0Zvcm1hdCAmJiBpbnB1dCA9PT0gb3B0aW9ucy56ZXJvRm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSAwO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLm51bGxGb3JtYXQgJiYgaW5wdXQgPT09IG9wdGlvbnMubnVsbEZvcm1hdCB8fCAhaW5wdXQucmVwbGFjZSgvW14wLTldKy9nLCAnJykubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3IgKGtpbmQgaW4gZm9ybWF0cykge1xuICAgICAgICAgICAgICAgICAgICByZWdleHAgPSB0eXBlb2YgZm9ybWF0c1traW5kXS5yZWdleHBzLnVuZm9ybWF0ID09PSAnZnVuY3Rpb24nID8gZm9ybWF0c1traW5kXS5yZWdleHBzLnVuZm9ybWF0KCkgOiBmb3JtYXRzW2tpbmRdLnJlZ2V4cHMudW5mb3JtYXQ7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlZ2V4cCAmJiBpbnB1dC5tYXRjaChyZWdleHApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1bmZvcm1hdEZ1bmN0aW9uID0gZm9ybWF0c1traW5kXS51bmZvcm1hdDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB1bmZvcm1hdEZ1bmN0aW9uID0gdW5mb3JtYXRGdW5jdGlvbiB8fCBudW1lcmFsLl8uc3RyaW5nVG9OdW1iZXI7XG5cbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHVuZm9ybWF0RnVuY3Rpb24oaW5wdXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsdWUgPSBOdW1iZXIoaW5wdXQpfHwgbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgTnVtZXJhbChpbnB1dCwgdmFsdWUpO1xuICAgIH07XG5cbiAgICAvLyB2ZXJzaW9uIG51bWJlclxuICAgIG51bWVyYWwudmVyc2lvbiA9IFZFUlNJT047XG5cbiAgICAvLyBjb21wYXJlIG51bWVyYWwgb2JqZWN0XG4gICAgbnVtZXJhbC5pc051bWVyYWwgPSBmdW5jdGlvbihvYmopIHtcbiAgICAgICAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIE51bWVyYWw7XG4gICAgfTtcblxuICAgIC8vIGhlbHBlciBmdW5jdGlvbnNcbiAgICBudW1lcmFsLl8gPSBfID0ge1xuICAgICAgICAvLyBmb3JtYXRzIG51bWJlcnMgc2VwYXJhdG9ycywgZGVjaW1hbHMgcGxhY2VzLCBzaWducywgYWJicmV2aWF0aW9uc1xuICAgICAgICBudW1iZXJUb0Zvcm1hdDogZnVuY3Rpb24odmFsdWUsIGZvcm1hdCwgcm91bmRpbmdGdW5jdGlvbikge1xuICAgICAgICAgICAgdmFyIGxvY2FsZSA9IGxvY2FsZXNbbnVtZXJhbC5vcHRpb25zLmN1cnJlbnRMb2NhbGVdLFxuICAgICAgICAgICAgICAgIG5lZ1AgPSBmYWxzZSxcbiAgICAgICAgICAgICAgICBvcHREZWMgPSBmYWxzZSxcbiAgICAgICAgICAgICAgICBsZWFkaW5nQ291bnQgPSAwLFxuICAgICAgICAgICAgICAgIGFiYnIgPSAnJyxcbiAgICAgICAgICAgICAgICB0cmlsbGlvbiA9IDEwMDAwMDAwMDAwMDAsXG4gICAgICAgICAgICAgICAgYmlsbGlvbiA9IDEwMDAwMDAwMDAsXG4gICAgICAgICAgICAgICAgbWlsbGlvbiA9IDEwMDAwMDAsXG4gICAgICAgICAgICAgICAgdGhvdXNhbmQgPSAxMDAwLFxuICAgICAgICAgICAgICAgIGRlY2ltYWwgPSAnJyxcbiAgICAgICAgICAgICAgICBuZWcgPSBmYWxzZSxcbiAgICAgICAgICAgICAgICBhYmJyRm9yY2UsIC8vIGZvcmNlIGFiYnJldmlhdGlvblxuICAgICAgICAgICAgICAgIGFicyxcbiAgICAgICAgICAgICAgICBtaW4sXG4gICAgICAgICAgICAgICAgbWF4LFxuICAgICAgICAgICAgICAgIHBvd2VyLFxuICAgICAgICAgICAgICAgIGludCxcbiAgICAgICAgICAgICAgICBwcmVjaXNpb24sXG4gICAgICAgICAgICAgICAgc2lnbmVkLFxuICAgICAgICAgICAgICAgIHRob3VzYW5kcyxcbiAgICAgICAgICAgICAgICBvdXRwdXQ7XG5cbiAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB3ZSBuZXZlciBmb3JtYXQgYSBudWxsIHZhbHVlXG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlIHx8IDA7XG5cbiAgICAgICAgICAgIGFicyA9IE1hdGguYWJzKHZhbHVlKTtcblxuICAgICAgICAgICAgLy8gc2VlIGlmIHdlIHNob3VsZCB1c2UgcGFyZW50aGVzZXMgZm9yIG5lZ2F0aXZlIG51bWJlciBvciBpZiB3ZSBzaG91bGQgcHJlZml4IHdpdGggYSBzaWduXG4gICAgICAgICAgICAvLyBpZiBib3RoIGFyZSBwcmVzZW50IHdlIGRlZmF1bHQgdG8gcGFyZW50aGVzZXNcbiAgICAgICAgICAgIGlmIChudW1lcmFsLl8uaW5jbHVkZXMoZm9ybWF0LCAnKCcpKSB7XG4gICAgICAgICAgICAgICAgbmVnUCA9IHRydWU7XG4gICAgICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0LnJlcGxhY2UoL1tcXCh8XFwpXS9nLCAnJyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG51bWVyYWwuXy5pbmNsdWRlcyhmb3JtYXQsICcrJykgfHwgbnVtZXJhbC5fLmluY2x1ZGVzKGZvcm1hdCwgJy0nKSkge1xuICAgICAgICAgICAgICAgIHNpZ25lZCA9IG51bWVyYWwuXy5pbmNsdWRlcyhmb3JtYXQsICcrJykgPyBmb3JtYXQuaW5kZXhPZignKycpIDogdmFsdWUgPCAwID8gZm9ybWF0LmluZGV4T2YoJy0nKSA6IC0xO1xuICAgICAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKC9bXFwrfFxcLV0vZywgJycpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBzZWUgaWYgYWJicmV2aWF0aW9uIGlzIHdhbnRlZFxuICAgICAgICAgICAgaWYgKG51bWVyYWwuXy5pbmNsdWRlcyhmb3JtYXQsICdhJykpIHtcbiAgICAgICAgICAgICAgICBhYmJyRm9yY2UgPSBmb3JtYXQubWF0Y2goL2Eoa3xtfGJ8dCk/Lyk7XG5cbiAgICAgICAgICAgICAgICBhYmJyRm9yY2UgPSBhYmJyRm9yY2UgPyBhYmJyRm9yY2VbMV0gOiBmYWxzZTtcblxuICAgICAgICAgICAgICAgIC8vIGNoZWNrIGZvciBzcGFjZSBiZWZvcmUgYWJicmV2aWF0aW9uXG4gICAgICAgICAgICAgICAgaWYgKG51bWVyYWwuXy5pbmNsdWRlcyhmb3JtYXQsICcgYScpKSB7XG4gICAgICAgICAgICAgICAgICAgIGFiYnIgPSAnICc7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0LnJlcGxhY2UobmV3IFJlZ0V4cChhYmJyICsgJ2Fba21idF0/JyksICcnKTtcblxuICAgICAgICAgICAgICAgIGlmIChhYnMgPj0gdHJpbGxpb24gJiYgIWFiYnJGb3JjZSB8fCBhYmJyRm9yY2UgPT09ICd0Jykge1xuICAgICAgICAgICAgICAgICAgICAvLyB0cmlsbGlvblxuICAgICAgICAgICAgICAgICAgICBhYmJyICs9IGxvY2FsZS5hYmJyZXZpYXRpb25zLnRyaWxsaW9uO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlIC8gdHJpbGxpb247XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhYnMgPCB0cmlsbGlvbiAmJiBhYnMgPj0gYmlsbGlvbiAmJiAhYWJickZvcmNlIHx8IGFiYnJGb3JjZSA9PT0gJ2InKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGJpbGxpb25cbiAgICAgICAgICAgICAgICAgICAgYWJiciArPSBsb2NhbGUuYWJicmV2aWF0aW9ucy5iaWxsaW9uO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlIC8gYmlsbGlvbjtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFicyA8IGJpbGxpb24gJiYgYWJzID49IG1pbGxpb24gJiYgIWFiYnJGb3JjZSB8fCBhYmJyRm9yY2UgPT09ICdtJykge1xuICAgICAgICAgICAgICAgICAgICAvLyBtaWxsaW9uXG4gICAgICAgICAgICAgICAgICAgIGFiYnIgKz0gbG9jYWxlLmFiYnJldmlhdGlvbnMubWlsbGlvbjtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSAvIG1pbGxpb247XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhYnMgPCBtaWxsaW9uICYmIGFicyA+PSB0aG91c2FuZCAmJiAhYWJickZvcmNlIHx8IGFiYnJGb3JjZSA9PT0gJ2snKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRob3VzYW5kXG4gICAgICAgICAgICAgICAgICAgIGFiYnIgKz0gbG9jYWxlLmFiYnJldmlhdGlvbnMudGhvdXNhbmQ7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgLyB0aG91c2FuZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGNoZWNrIGZvciBvcHRpb25hbCBkZWNpbWFsc1xuICAgICAgICAgICAgaWYgKG51bWVyYWwuXy5pbmNsdWRlcyhmb3JtYXQsICdbLl0nKSkge1xuICAgICAgICAgICAgICAgIG9wdERlYyA9IHRydWU7XG4gICAgICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0LnJlcGxhY2UoJ1suXScsICcuJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGJyZWFrIG51bWJlciBhbmQgZm9ybWF0XG4gICAgICAgICAgICBpbnQgPSB2YWx1ZS50b1N0cmluZygpLnNwbGl0KCcuJylbMF07XG4gICAgICAgICAgICBwcmVjaXNpb24gPSBmb3JtYXQuc3BsaXQoJy4nKVsxXTtcbiAgICAgICAgICAgIHRob3VzYW5kcyA9IGZvcm1hdC5pbmRleE9mKCcsJyk7XG4gICAgICAgICAgICBsZWFkaW5nQ291bnQgPSAoZm9ybWF0LnNwbGl0KCcuJylbMF0uc3BsaXQoJywnKVswXS5tYXRjaCgvMC9nKSB8fCBbXSkubGVuZ3RoO1xuXG4gICAgICAgICAgICBpZiAocHJlY2lzaW9uKSB7XG4gICAgICAgICAgICAgICAgaWYgKG51bWVyYWwuXy5pbmNsdWRlcyhwcmVjaXNpb24sICdbJykpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJlY2lzaW9uID0gcHJlY2lzaW9uLnJlcGxhY2UoJ10nLCAnJyk7XG4gICAgICAgICAgICAgICAgICAgIHByZWNpc2lvbiA9IHByZWNpc2lvbi5zcGxpdCgnWycpO1xuICAgICAgICAgICAgICAgICAgICBkZWNpbWFsID0gbnVtZXJhbC5fLnRvRml4ZWQodmFsdWUsIChwcmVjaXNpb25bMF0ubGVuZ3RoICsgcHJlY2lzaW9uWzFdLmxlbmd0aCksIHJvdW5kaW5nRnVuY3Rpb24sIHByZWNpc2lvblsxXS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGRlY2ltYWwgPSBudW1lcmFsLl8udG9GaXhlZCh2YWx1ZSwgcHJlY2lzaW9uLmxlbmd0aCwgcm91bmRpbmdGdW5jdGlvbik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaW50ID0gZGVjaW1hbC5zcGxpdCgnLicpWzBdO1xuXG4gICAgICAgICAgICAgICAgaWYgKG51bWVyYWwuXy5pbmNsdWRlcyhkZWNpbWFsLCAnLicpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlY2ltYWwgPSBsb2NhbGUuZGVsaW1pdGVycy5kZWNpbWFsICsgZGVjaW1hbC5zcGxpdCgnLicpWzFdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGRlY2ltYWwgPSAnJztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAob3B0RGVjICYmIE51bWJlcihkZWNpbWFsLnNsaWNlKDEpKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBkZWNpbWFsID0gJyc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpbnQgPSBudW1lcmFsLl8udG9GaXhlZCh2YWx1ZSwgMCwgcm91bmRpbmdGdW5jdGlvbik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGNoZWNrIGFiYnJldmlhdGlvbiBhZ2FpbiBhZnRlciByb3VuZGluZ1xuICAgICAgICAgICAgaWYgKGFiYnIgJiYgIWFiYnJGb3JjZSAmJiBOdW1iZXIoaW50KSA+PSAxMDAwICYmIGFiYnIgIT09IGxvY2FsZS5hYmJyZXZpYXRpb25zLnRyaWxsaW9uKSB7XG4gICAgICAgICAgICAgICAgaW50ID0gU3RyaW5nKE51bWJlcihpbnQpIC8gMTAwMCk7XG5cbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGFiYnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBsb2NhbGUuYWJicmV2aWF0aW9ucy50aG91c2FuZDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFiYnIgPSBsb2NhbGUuYWJicmV2aWF0aW9ucy5taWxsaW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgbG9jYWxlLmFiYnJldmlhdGlvbnMubWlsbGlvbjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFiYnIgPSBsb2NhbGUuYWJicmV2aWF0aW9ucy5iaWxsaW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgbG9jYWxlLmFiYnJldmlhdGlvbnMuYmlsbGlvbjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFiYnIgPSBsb2NhbGUuYWJicmV2aWF0aW9ucy50cmlsbGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAvLyBmb3JtYXQgbnVtYmVyXG4gICAgICAgICAgICBpZiAobnVtZXJhbC5fLmluY2x1ZGVzKGludCwgJy0nKSkge1xuICAgICAgICAgICAgICAgIGludCA9IGludC5zbGljZSgxKTtcbiAgICAgICAgICAgICAgICBuZWcgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaW50Lmxlbmd0aCA8IGxlYWRpbmdDb3VudCkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSBsZWFkaW5nQ291bnQgLSBpbnQubGVuZ3RoOyBpID4gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgICAgIGludCA9ICcwJyArIGludDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aG91c2FuZHMgPiAtMSkge1xuICAgICAgICAgICAgICAgIGludCA9IGludC50b1N0cmluZygpLnJlcGxhY2UoLyhcXGQpKD89KFxcZHszfSkrKD8hXFxkKSkvZywgJyQxJyArIGxvY2FsZS5kZWxpbWl0ZXJzLnRob3VzYW5kcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChmb3JtYXQuaW5kZXhPZignLicpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgaW50ID0gJyc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG91dHB1dCA9IGludCArIGRlY2ltYWwgKyAoYWJiciA/IGFiYnIgOiAnJyk7XG5cbiAgICAgICAgICAgIGlmIChuZWdQKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gKG5lZ1AgJiYgbmVnID8gJygnIDogJycpICsgb3V0cHV0ICsgKG5lZ1AgJiYgbmVnID8gJyknIDogJycpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoc2lnbmVkID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gc2lnbmVkID09PSAwID8gKG5lZyA/ICctJyA6ICcrJykgKyBvdXRwdXQgOiBvdXRwdXQgKyAobmVnID8gJy0nIDogJysnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5lZykge1xuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSAnLScgKyBvdXRwdXQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICAgICB9LFxuICAgICAgICAvLyB1bmZvcm1hdHMgbnVtYmVycyBzZXBhcmF0b3JzLCBkZWNpbWFscyBwbGFjZXMsIHNpZ25zLCBhYmJyZXZpYXRpb25zXG4gICAgICAgIHN0cmluZ1RvTnVtYmVyOiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICAgICAgICAgIHZhciBsb2NhbGUgPSBsb2NhbGVzW29wdGlvbnMuY3VycmVudExvY2FsZV0sXG4gICAgICAgICAgICAgICAgc3RyaW5nT3JpZ2luYWwgPSBzdHJpbmcsXG4gICAgICAgICAgICAgICAgYWJicmV2aWF0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICAgICAgdGhvdXNhbmQ6IDMsXG4gICAgICAgICAgICAgICAgICAgIG1pbGxpb246IDYsXG4gICAgICAgICAgICAgICAgICAgIGJpbGxpb246IDksXG4gICAgICAgICAgICAgICAgICAgIHRyaWxsaW9uOiAxMlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYWJicmV2aWF0aW9uLFxuICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgIGksXG4gICAgICAgICAgICAgICAgcmVnZXhwO1xuXG4gICAgICAgICAgICBpZiAob3B0aW9ucy56ZXJvRm9ybWF0ICYmIHN0cmluZyA9PT0gb3B0aW9ucy56ZXJvRm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSAwO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLm51bGxGb3JtYXQgJiYgc3RyaW5nID09PSBvcHRpb25zLm51bGxGb3JtYXQgfHwgIXN0cmluZy5yZXBsYWNlKC9bXjAtOV0rL2csICcnKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gMTtcblxuICAgICAgICAgICAgICAgIGlmIChsb2NhbGUuZGVsaW1pdGVycy5kZWNpbWFsICE9PSAnLicpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoL1xcLi9nLCAnJykucmVwbGFjZShsb2NhbGUuZGVsaW1pdGVycy5kZWNpbWFsLCAnLicpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZvciAoYWJicmV2aWF0aW9uIGluIGFiYnJldmlhdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVnZXhwID0gbmV3IFJlZ0V4cCgnW15hLXpBLVpdJyArIGxvY2FsZS5hYmJyZXZpYXRpb25zW2FiYnJldmlhdGlvbl0gKyAnKD86XFxcXCl8KFxcXFwnICsgbG9jYWxlLmN1cnJlbmN5LnN5bWJvbCArICcpPyg/OlxcXFwpKT8pPyQnKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoc3RyaW5nT3JpZ2luYWwubWF0Y2gocmVnZXhwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgKj0gTWF0aC5wb3coMTAsIGFiYnJldmlhdGlvbnNbYWJicmV2aWF0aW9uXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIGNoZWNrIGZvciBuZWdhdGl2ZSBudW1iZXJcbiAgICAgICAgICAgICAgICB2YWx1ZSAqPSAoc3RyaW5nLnNwbGl0KCctJykubGVuZ3RoICsgTWF0aC5taW4oc3RyaW5nLnNwbGl0KCcoJykubGVuZ3RoIC0gMSwgc3RyaW5nLnNwbGl0KCcpJykubGVuZ3RoIC0gMSkpICUgMiA/IDEgOiAtMTtcblxuICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBub24gbnVtYmVyc1xuICAgICAgICAgICAgICAgIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKC9bXjAtOVxcLl0rL2csICcnKTtcblxuICAgICAgICAgICAgICAgIHZhbHVlICo9IE51bWJlcihzdHJpbmcpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIGlzTmFOOiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgaXNOYU4odmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICBpbmNsdWRlczogZnVuY3Rpb24oc3RyaW5nLCBzZWFyY2gpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcuaW5kZXhPZihzZWFyY2gpICE9PSAtMTtcbiAgICAgICAgfSxcbiAgICAgICAgaW5zZXJ0OiBmdW5jdGlvbihzdHJpbmcsIHN1YlN0cmluZywgc3RhcnQpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcuc2xpY2UoMCwgc3RhcnQpICsgc3ViU3RyaW5nICsgc3RyaW5nLnNsaWNlKHN0YXJ0KTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVkdWNlOiBmdW5jdGlvbihhcnJheSwgY2FsbGJhY2sgLyosIGluaXRpYWxWYWx1ZSovKSB7XG4gICAgICAgICAgICBpZiAodGhpcyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5LnByb3RvdHlwZS5yZWR1Y2UgY2FsbGVkIG9uIG51bGwgb3IgdW5kZWZpbmVkJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGNhbGxiYWNrICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgdCA9IE9iamVjdChhcnJheSksXG4gICAgICAgICAgICAgICAgbGVuID0gdC5sZW5ndGggPj4+IDAsXG4gICAgICAgICAgICAgICAgayA9IDAsXG4gICAgICAgICAgICAgICAgdmFsdWU7XG5cbiAgICAgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBhcmd1bWVudHNbMl07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHdoaWxlIChrIDwgbGVuICYmICEoayBpbiB0KSkge1xuICAgICAgICAgICAgICAgICAgICBrKys7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGsgPj0gbGVuKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlZHVjZSBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHRbaysrXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoOyBrIDwgbGVuOyBrKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoayBpbiB0KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gY2FsbGJhY2sodmFsdWUsIHRba10sIGssIHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbXB1dGVzIHRoZSBtdWx0aXBsaWVyIG5lY2Vzc2FyeSB0byBtYWtlIHggPj0gMSxcbiAgICAgICAgICogZWZmZWN0aXZlbHkgZWxpbWluYXRpbmcgbWlzY2FsY3VsYXRpb25zIGNhdXNlZCBieVxuICAgICAgICAgKiBmaW5pdGUgcHJlY2lzaW9uLlxuICAgICAgICAgKi9cbiAgICAgICAgbXVsdGlwbGllcjogZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgIHZhciBwYXJ0cyA9IHgudG9TdHJpbmcoKS5zcGxpdCgnLicpO1xuXG4gICAgICAgICAgICByZXR1cm4gcGFydHMubGVuZ3RoIDwgMiA/IDEgOiBNYXRoLnBvdygxMCwgcGFydHNbMV0ubGVuZ3RoKTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdpdmVuIGEgdmFyaWFibGUgbnVtYmVyIG9mIGFyZ3VtZW50cywgcmV0dXJucyB0aGUgbWF4aW11bVxuICAgICAgICAgKiBtdWx0aXBsaWVyIHRoYXQgbXVzdCBiZSB1c2VkIHRvIG5vcm1hbGl6ZSBhbiBvcGVyYXRpb24gaW52b2x2aW5nXG4gICAgICAgICAqIGFsbCBvZiB0aGVtLlxuICAgICAgICAgKi9cbiAgICAgICAgY29ycmVjdGlvbkZhY3RvcjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuXG4gICAgICAgICAgICByZXR1cm4gYXJncy5yZWR1Y2UoZnVuY3Rpb24oYWNjdW0sIG5leHQpIHtcbiAgICAgICAgICAgICAgICB2YXIgbW4gPSBfLm11bHRpcGxpZXIobmV4dCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjY3VtID4gbW4gPyBhY2N1bSA6IG1uO1xuICAgICAgICAgICAgfSwgMSk7XG4gICAgICAgIH0sXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJbXBsZW1lbnRhdGlvbiBvZiB0b0ZpeGVkKCkgdGhhdCB0cmVhdHMgZmxvYXRzIG1vcmUgbGlrZSBkZWNpbWFsc1xuICAgICAgICAgKlxuICAgICAgICAgKiBGaXhlcyBiaW5hcnkgcm91bmRpbmcgaXNzdWVzIChlZy4gKDAuNjE1KS50b0ZpeGVkKDIpID09PSAnMC42MScpIHRoYXQgcHJlc2VudFxuICAgICAgICAgKiBwcm9ibGVtcyBmb3IgYWNjb3VudGluZy0gYW5kIGZpbmFuY2UtcmVsYXRlZCBzb2Z0d2FyZS5cbiAgICAgICAgICovXG4gICAgICAgIHRvRml4ZWQ6IGZ1bmN0aW9uKHZhbHVlLCBtYXhEZWNpbWFscywgcm91bmRpbmdGdW5jdGlvbiwgb3B0aW9uYWxzKSB7XG4gICAgICAgICAgICB2YXIgc3BsaXRWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCkuc3BsaXQoJy4nKSxcbiAgICAgICAgICAgICAgICBtaW5EZWNpbWFscyA9IG1heERlY2ltYWxzIC0gKG9wdGlvbmFscyB8fCAwKSxcbiAgICAgICAgICAgICAgICBib3VuZGVkUHJlY2lzaW9uLFxuICAgICAgICAgICAgICAgIG9wdGlvbmFsc1JlZ0V4cCxcbiAgICAgICAgICAgICAgICBwb3dlcixcbiAgICAgICAgICAgICAgICBvdXRwdXQ7XG5cbiAgICAgICAgICAgIC8vIFVzZSB0aGUgc21hbGxlc3QgcHJlY2lzaW9uIHZhbHVlIHBvc3NpYmxlIHRvIGF2b2lkIGVycm9ycyBmcm9tIGZsb2F0aW5nIHBvaW50IHJlcHJlc2VudGF0aW9uXG4gICAgICAgICAgICBpZiAoc3BsaXRWYWx1ZS5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgICAgYm91bmRlZFByZWNpc2lvbiA9IE1hdGgubWluKE1hdGgubWF4KHNwbGl0VmFsdWVbMV0ubGVuZ3RoLCBtaW5EZWNpbWFscyksIG1heERlY2ltYWxzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGJvdW5kZWRQcmVjaXNpb24gPSBtaW5EZWNpbWFscztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcG93ZXIgPSBNYXRoLnBvdygxMCwgYm91bmRlZFByZWNpc2lvbik7XG5cbiAgICAgICAgICAgIC8vIE11bHRpcGx5IHVwIGJ5IHByZWNpc2lvbiwgcm91bmQgYWNjdXJhdGVseSwgdGhlbiBkaXZpZGUgYW5kIHVzZSBuYXRpdmUgdG9GaXhlZCgpOlxuICAgICAgICAgICAgb3V0cHV0ID0gKHJvdW5kaW5nRnVuY3Rpb24odmFsdWUgKyAnZSsnICsgYm91bmRlZFByZWNpc2lvbikgLyBwb3dlcikudG9GaXhlZChib3VuZGVkUHJlY2lzaW9uKTtcblxuICAgICAgICAgICAgaWYgKG9wdGlvbmFscyA+IG1heERlY2ltYWxzIC0gYm91bmRlZFByZWNpc2lvbikge1xuICAgICAgICAgICAgICAgIG9wdGlvbmFsc1JlZ0V4cCA9IG5ldyBSZWdFeHAoJ1xcXFwuPzB7MSwnICsgKG9wdGlvbmFscyAtIChtYXhEZWNpbWFscyAtIGJvdW5kZWRQcmVjaXNpb24pKSArICd9JCcpO1xuICAgICAgICAgICAgICAgIG91dHB1dCA9IG91dHB1dC5yZXBsYWNlKG9wdGlvbmFsc1JlZ0V4cCwgJycpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8vIGF2YWxpYWJsZSBvcHRpb25zXG4gICAgbnVtZXJhbC5vcHRpb25zID0gb3B0aW9ucztcblxuICAgIC8vIGF2YWxpYWJsZSBmb3JtYXRzXG4gICAgbnVtZXJhbC5mb3JtYXRzID0gZm9ybWF0cztcblxuICAgIC8vIGF2YWxpYWJsZSBmb3JtYXRzXG4gICAgbnVtZXJhbC5sb2NhbGVzID0gbG9jYWxlcztcblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgY3VycmVudCBsb2NhbGUuICBJZlxuICAgIC8vIG5vIGFyZ3VtZW50cyBhcmUgcGFzc2VkIGluLCBpdCB3aWxsIHNpbXBseSByZXR1cm4gdGhlIGN1cnJlbnQgZ2xvYmFsXG4gICAgLy8gbG9jYWxlIGtleS5cbiAgICBudW1lcmFsLmxvY2FsZSA9IGZ1bmN0aW9uKGtleSkge1xuICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICBvcHRpb25zLmN1cnJlbnRMb2NhbGUgPSBrZXkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvcHRpb25zLmN1cnJlbnRMb2NhbGU7XG4gICAgfTtcblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBsb2FkZWQgbG9jYWxlIGRhdGEuICBJZlxuICAgIC8vIG5vIGFyZ3VtZW50cyBhcmUgcGFzc2VkIGluLCBpdCB3aWxsIHNpbXBseSByZXR1cm4gdGhlIGN1cnJlbnRcbiAgICAvLyBnbG9iYWwgbG9jYWxlIG9iamVjdC5cbiAgICBudW1lcmFsLmxvY2FsZURhdGEgPSBmdW5jdGlvbihrZXkpIHtcbiAgICAgICAgaWYgKCFrZXkpIHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbGVzW29wdGlvbnMuY3VycmVudExvY2FsZV07XG4gICAgICAgIH1cblxuICAgICAgICBrZXkgPSBrZXkudG9Mb3dlckNhc2UoKTtcblxuICAgICAgICBpZiAoIWxvY2FsZXNba2V5XSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGxvY2FsZSA6ICcgKyBrZXkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGxvY2FsZXNba2V5XTtcbiAgICB9O1xuXG4gICAgbnVtZXJhbC5yZXNldCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkZWZhdWx0cykge1xuICAgICAgICAgICAgb3B0aW9uc1twcm9wZXJ0eV0gPSBkZWZhdWx0c1twcm9wZXJ0eV07XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgbnVtZXJhbC56ZXJvRm9ybWF0ID0gZnVuY3Rpb24oZm9ybWF0KSB7XG4gICAgICAgIG9wdGlvbnMuemVyb0Zvcm1hdCA9IHR5cGVvZihmb3JtYXQpID09PSAnc3RyaW5nJyA/IGZvcm1hdCA6IG51bGw7XG4gICAgfTtcblxuICAgIG51bWVyYWwubnVsbEZvcm1hdCA9IGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICAgICAgb3B0aW9ucy5udWxsRm9ybWF0ID0gdHlwZW9mKGZvcm1hdCkgPT09ICdzdHJpbmcnID8gZm9ybWF0IDogbnVsbDtcbiAgICB9O1xuXG4gICAgbnVtZXJhbC5kZWZhdWx0Rm9ybWF0ID0gZnVuY3Rpb24oZm9ybWF0KSB7XG4gICAgICAgIG9wdGlvbnMuZGVmYXVsdEZvcm1hdCA9IHR5cGVvZihmb3JtYXQpID09PSAnc3RyaW5nJyA/IGZvcm1hdCA6ICcwLjAnO1xuICAgIH07XG5cbiAgICBudW1lcmFsLnJlZ2lzdGVyID0gZnVuY3Rpb24odHlwZSwgbmFtZSwgZm9ybWF0KSB7XG4gICAgICAgIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgICAgaWYgKHRoaXNbdHlwZSArICdzJ11bbmFtZV0pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IobmFtZSArICcgJyArIHR5cGUgKyAnIGFscmVhZHkgcmVnaXN0ZXJlZC4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXNbdHlwZSArICdzJ11bbmFtZV0gPSBmb3JtYXQ7XG5cbiAgICAgICAgcmV0dXJuIGZvcm1hdDtcbiAgICB9O1xuXG5cbiAgICBudW1lcmFsLnZhbGlkYXRlID0gZnVuY3Rpb24odmFsLCBjdWx0dXJlKSB7XG4gICAgICAgIHZhciBfZGVjaW1hbFNlcCxcbiAgICAgICAgICAgIF90aG91c2FuZFNlcCxcbiAgICAgICAgICAgIF9jdXJyU3ltYm9sLFxuICAgICAgICAgICAgX3ZhbEFycmF5LFxuICAgICAgICAgICAgX2FiYnJPYmosXG4gICAgICAgICAgICBfdGhvdXNhbmRSZWdFeCxcbiAgICAgICAgICAgIGxvY2FsZURhdGEsXG4gICAgICAgICAgICB0ZW1wO1xuXG4gICAgICAgIC8vY29lcmNlIHZhbCB0byBzdHJpbmdcbiAgICAgICAgaWYgKHR5cGVvZiB2YWwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB2YWwgKz0gJyc7XG5cbiAgICAgICAgICAgIGlmIChjb25zb2xlLndhcm4pIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ051bWVyYWwuanM6IFZhbHVlIGlzIG5vdCBzdHJpbmcuIEl0IGhhcyBiZWVuIGNvLWVyY2VkIHRvOiAnLCB2YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy90cmltIHdoaXRlc3BhY2VzIGZyb20gZWl0aGVyIHNpZGVzXG4gICAgICAgIHZhbCA9IHZhbC50cmltKCk7XG5cbiAgICAgICAgLy9pZiB2YWwgaXMganVzdCBkaWdpdHMgcmV0dXJuIHRydWVcbiAgICAgICAgaWYgKCEhdmFsLm1hdGNoKC9eXFxkKyQvKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICAvL2lmIHZhbCBpcyBlbXB0eSByZXR1cm4gZmFsc2VcbiAgICAgICAgaWYgKHZhbCA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vZ2V0IHRoZSBkZWNpbWFsIGFuZCB0aG91c2FuZHMgc2VwYXJhdG9yIGZyb20gbnVtZXJhbC5sb2NhbGVEYXRhXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvL2NoZWNrIGlmIHRoZSBjdWx0dXJlIGlzIHVuZGVyc3Rvb2QgYnkgbnVtZXJhbC4gaWYgbm90LCBkZWZhdWx0IGl0IHRvIGN1cnJlbnQgbG9jYWxlXG4gICAgICAgICAgICBsb2NhbGVEYXRhID0gbnVtZXJhbC5sb2NhbGVEYXRhKGN1bHR1cmUpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBsb2NhbGVEYXRhID0gbnVtZXJhbC5sb2NhbGVEYXRhKG51bWVyYWwubG9jYWxlKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9zZXR1cCB0aGUgZGVsaW1pdGVycyBhbmQgY3VycmVuY3kgc3ltYm9sIGJhc2VkIG9uIGN1bHR1cmUvbG9jYWxlXG4gICAgICAgIF9jdXJyU3ltYm9sID0gbG9jYWxlRGF0YS5jdXJyZW5jeS5zeW1ib2w7XG4gICAgICAgIF9hYmJyT2JqID0gbG9jYWxlRGF0YS5hYmJyZXZpYXRpb25zO1xuICAgICAgICBfZGVjaW1hbFNlcCA9IGxvY2FsZURhdGEuZGVsaW1pdGVycy5kZWNpbWFsO1xuICAgICAgICBpZiAobG9jYWxlRGF0YS5kZWxpbWl0ZXJzLnRob3VzYW5kcyA9PT0gJy4nKSB7XG4gICAgICAgICAgICBfdGhvdXNhbmRTZXAgPSAnXFxcXC4nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgX3Rob3VzYW5kU2VwID0gbG9jYWxlRGF0YS5kZWxpbWl0ZXJzLnRob3VzYW5kcztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHZhbGlkYXRpbmcgY3VycmVuY3kgc3ltYm9sXG4gICAgICAgIHRlbXAgPSB2YWwubWF0Y2goL15bXlxcZF0rLyk7XG4gICAgICAgIGlmICh0ZW1wICE9PSBudWxsKSB7XG4gICAgICAgICAgICB2YWwgPSB2YWwuc3Vic3RyKDEpO1xuICAgICAgICAgICAgaWYgKHRlbXBbMF0gIT09IF9jdXJyU3ltYm9sKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy92YWxpZGF0aW5nIGFiYnJldmlhdGlvbiBzeW1ib2xcbiAgICAgICAgdGVtcCA9IHZhbC5tYXRjaCgvW15cXGRdKyQvKTtcbiAgICAgICAgaWYgKHRlbXAgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHZhbCA9IHZhbC5zbGljZSgwLCAtMSk7XG4gICAgICAgICAgICBpZiAodGVtcFswXSAhPT0gX2FiYnJPYmoudGhvdXNhbmQgJiYgdGVtcFswXSAhPT0gX2FiYnJPYmoubWlsbGlvbiAmJiB0ZW1wWzBdICE9PSBfYWJick9iai5iaWxsaW9uICYmIHRlbXBbMF0gIT09IF9hYmJyT2JqLnRyaWxsaW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgX3Rob3VzYW5kUmVnRXggPSBuZXcgUmVnRXhwKF90aG91c2FuZFNlcCArICd7Mn0nKTtcblxuICAgICAgICBpZiAoIXZhbC5tYXRjaCgvW15cXGQuLF0vZykpIHtcbiAgICAgICAgICAgIF92YWxBcnJheSA9IHZhbC5zcGxpdChfZGVjaW1hbFNlcCk7XG4gICAgICAgICAgICBpZiAoX3ZhbEFycmF5Lmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChfdmFsQXJyYXkubGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCAhISBfdmFsQXJyYXlbMF0ubWF0Y2goL15cXGQrLipcXGQkLykgJiYgIV92YWxBcnJheVswXS5tYXRjaChfdGhvdXNhbmRSZWdFeCkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfdmFsQXJyYXlbMF0ubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCAhISBfdmFsQXJyYXlbMF0ubWF0Y2goL15cXGQrJC8pICYmICFfdmFsQXJyYXlbMF0ubWF0Y2goX3Rob3VzYW5kUmVnRXgpICYmICEhIF92YWxBcnJheVsxXS5tYXRjaCgvXlxcZCskLykpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICggISEgX3ZhbEFycmF5WzBdLm1hdGNoKC9eXFxkKy4qXFxkJC8pICYmICFfdmFsQXJyYXlbMF0ubWF0Y2goX3Rob3VzYW5kUmVnRXgpICYmICEhIF92YWxBcnJheVsxXS5tYXRjaCgvXlxcZCskLykpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG5cblxuICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgTnVtZXJhbCBQcm90b3R5cGVcbiAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgICBudW1lcmFsLmZuID0gTnVtZXJhbC5wcm90b3R5cGUgPSB7XG4gICAgICAgIGNsb25lOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBudW1lcmFsKHRoaXMpO1xuICAgICAgICB9LFxuICAgICAgICBmb3JtYXQ6IGZ1bmN0aW9uKGlucHV0U3RyaW5nLCByb3VuZGluZ0Z1bmN0aW9uKSB7XG4gICAgICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLl92YWx1ZSxcbiAgICAgICAgICAgICAgICBmb3JtYXQgPSBpbnB1dFN0cmluZyB8fCBvcHRpb25zLmRlZmF1bHRGb3JtYXQsXG4gICAgICAgICAgICAgICAga2luZCxcbiAgICAgICAgICAgICAgICBvdXRwdXQsXG4gICAgICAgICAgICAgICAgZm9ybWF0RnVuY3Rpb247XG5cbiAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB3ZSBoYXZlIGEgcm91bmRpbmdGdW5jdGlvblxuICAgICAgICAgICAgcm91bmRpbmdGdW5jdGlvbiA9IHJvdW5kaW5nRnVuY3Rpb24gfHwgTWF0aC5yb3VuZDtcblxuICAgICAgICAgICAgLy8gZm9ybWF0IGJhc2VkIG9uIHZhbHVlXG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IDAgJiYgb3B0aW9ucy56ZXJvRm9ybWF0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gb3B0aW9ucy56ZXJvRm9ybWF0O1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gbnVsbCAmJiBvcHRpb25zLm51bGxGb3JtYXQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSBvcHRpb25zLm51bGxGb3JtYXQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvciAoa2luZCBpbiBmb3JtYXRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmb3JtYXQubWF0Y2goZm9ybWF0c1traW5kXS5yZWdleHBzLmZvcm1hdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdEZ1bmN0aW9uID0gZm9ybWF0c1traW5kXS5mb3JtYXQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZm9ybWF0RnVuY3Rpb24gPSBmb3JtYXRGdW5jdGlvbiB8fCBudW1lcmFsLl8ubnVtYmVyVG9Gb3JtYXQ7XG5cbiAgICAgICAgICAgICAgICBvdXRwdXQgPSBmb3JtYXRGdW5jdGlvbih2YWx1ZSwgZm9ybWF0LCByb3VuZGluZ0Z1bmN0aW9uKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBpbnB1dDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faW5wdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gTnVtYmVyKHZhbHVlKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG4gICAgICAgIGFkZDogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIHZhciBjb3JyRmFjdG9yID0gXy5jb3JyZWN0aW9uRmFjdG9yLmNhbGwobnVsbCwgdGhpcy5fdmFsdWUsIHZhbHVlKTtcblxuICAgICAgICAgICAgZnVuY3Rpb24gY2JhY2soYWNjdW0sIGN1cnIsIGN1cnJJLCBPKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjY3VtICsgTWF0aC5yb3VuZChjb3JyRmFjdG9yICogY3Vycik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gXy5yZWR1Y2UoW3RoaXMuX3ZhbHVlLCB2YWx1ZV0sIGNiYWNrLCAwKSAvIGNvcnJGYWN0b3I7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuICAgICAgICBzdWJ0cmFjdDogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIHZhciBjb3JyRmFjdG9yID0gXy5jb3JyZWN0aW9uRmFjdG9yLmNhbGwobnVsbCwgdGhpcy5fdmFsdWUsIHZhbHVlKTtcblxuICAgICAgICAgICAgZnVuY3Rpb24gY2JhY2soYWNjdW0sIGN1cnIsIGN1cnJJLCBPKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjY3VtIC0gTWF0aC5yb3VuZChjb3JyRmFjdG9yICogY3Vycik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gXy5yZWR1Y2UoW3ZhbHVlXSwgY2JhY2ssIE1hdGgucm91bmQodGhpcy5fdmFsdWUgKiBjb3JyRmFjdG9yKSkgLyBjb3JyRmFjdG9yO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcbiAgICAgICAgbXVsdGlwbHk6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICBmdW5jdGlvbiBjYmFjayhhY2N1bSwgY3VyciwgY3VyckksIE8pIHtcbiAgICAgICAgICAgICAgICB2YXIgY29yckZhY3RvciA9IF8uY29ycmVjdGlvbkZhY3RvcihhY2N1bSwgY3Vycik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgucm91bmQoYWNjdW0gKiBjb3JyRmFjdG9yKSAqIE1hdGgucm91bmQoY3VyciAqIGNvcnJGYWN0b3IpIC8gTWF0aC5yb3VuZChjb3JyRmFjdG9yICogY29yckZhY3Rvcik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gXy5yZWR1Y2UoW3RoaXMuX3ZhbHVlLCB2YWx1ZV0sIGNiYWNrLCAxKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG4gICAgICAgIGRpdmlkZTogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIGNiYWNrKGFjY3VtLCBjdXJyLCBjdXJySSwgTykge1xuICAgICAgICAgICAgICAgIHZhciBjb3JyRmFjdG9yID0gXy5jb3JyZWN0aW9uRmFjdG9yKGFjY3VtLCBjdXJyKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5yb3VuZChhY2N1bSAqIGNvcnJGYWN0b3IpIC8gTWF0aC5yb3VuZChjdXJyICogY29yckZhY3Rvcik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gXy5yZWR1Y2UoW3RoaXMuX3ZhbHVlLCB2YWx1ZV0sIGNiYWNrKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG4gICAgICAgIGRpZmZlcmVuY2U6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5hYnMobnVtZXJhbCh0aGlzLl92YWx1ZSkuc3VidHJhY3QodmFsdWUpLnZhbHVlKCkpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgRGVmYXVsdCBMb2NhbGUgJiYgRm9ybWF0XG4gICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gICAgbnVtZXJhbC5yZWdpc3RlcignbG9jYWxlJywgJ2VuJywge1xuICAgICAgICBkZWxpbWl0ZXJzOiB7XG4gICAgICAgICAgICB0aG91c2FuZHM6ICcsJyxcbiAgICAgICAgICAgIGRlY2ltYWw6ICcuJ1xuICAgICAgICB9LFxuICAgICAgICBhYmJyZXZpYXRpb25zOiB7XG4gICAgICAgICAgICB0aG91c2FuZDogJ2snLFxuICAgICAgICAgICAgbWlsbGlvbjogJ20nLFxuICAgICAgICAgICAgYmlsbGlvbjogJ2InLFxuICAgICAgICAgICAgdHJpbGxpb246ICd0J1xuICAgICAgICB9LFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbihudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBiID0gbnVtYmVyICUgMTA7XG4gICAgICAgICAgICByZXR1cm4gKH5+KG51bWJlciAlIDEwMCAvIDEwKSA9PT0gMSkgPyAndGgnIDpcbiAgICAgICAgICAgICAgICAoYiA9PT0gMSkgPyAnc3QnIDpcbiAgICAgICAgICAgICAgICAoYiA9PT0gMikgPyAnbmQnIDpcbiAgICAgICAgICAgICAgICAoYiA9PT0gMykgPyAncmQnIDogJ3RoJztcbiAgICAgICAgfSxcbiAgICAgICAgY3VycmVuY3k6IHtcbiAgICAgICAgICAgIHN5bWJvbDogJyQnXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIFxuXG4oZnVuY3Rpb24oKSB7XG4gICAgICAgIG51bWVyYWwucmVnaXN0ZXIoJ2Zvcm1hdCcsICdicHMnLCB7XG4gICAgICAgICAgICByZWdleHBzOiB7XG4gICAgICAgICAgICAgICAgZm9ybWF0OiAvKEJQUykvLFxuICAgICAgICAgICAgICAgIHVuZm9ybWF0OiAvKEJQUykvXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZm9ybWF0OiBmdW5jdGlvbih2YWx1ZSwgZm9ybWF0LCByb3VuZGluZ0Z1bmN0aW9uKSB7XG4gICAgICAgICAgICAgICAgdmFyIHNwYWNlID0gbnVtZXJhbC5fLmluY2x1ZGVzKGZvcm1hdCwgJyBCUFMnKSA/ICcgJyA6ICcnLFxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQ7XG5cbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlICogMTAwMDA7XG5cbiAgICAgICAgICAgICAgICAvLyBjaGVjayBmb3Igc3BhY2UgYmVmb3JlIEJQU1xuICAgICAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKC9cXHM/QlBTLywgJycpO1xuXG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gbnVtZXJhbC5fLm51bWJlclRvRm9ybWF0KHZhbHVlLCBmb3JtYXQsIHJvdW5kaW5nRnVuY3Rpb24pO1xuXG4gICAgICAgICAgICAgICAgaWYgKG51bWVyYWwuXy5pbmNsdWRlcyhvdXRwdXQsICcpJykpIHtcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gb3V0cHV0LnNwbGl0KCcnKTtcblxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQuc3BsaWNlKC0xLCAwLCBzcGFjZSArICdCUFMnKTtcblxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSBvdXRwdXQuam9pbignJyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gb3V0cHV0ICsgc3BhY2UgKyAnQlBTJztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVuZm9ybWF0OiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKyhudW1lcmFsLl8uc3RyaW5nVG9OdW1iZXIoc3RyaW5nKSAqIDAuMDAwMSkudG9GaXhlZCgxNSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xufSkoKTtcblxuXG4oZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBkZWNpbWFsID0ge1xuICAgICAgICAgICAgYmFzZTogMTAwMCxcbiAgICAgICAgICAgIHN1ZmZpeGVzOiBbJ0InLCAnS0InLCAnTUInLCAnR0InLCAnVEInLCAnUEInLCAnRUInLCAnWkInLCAnWUInXVxuICAgICAgICB9LFxuICAgICAgICBiaW5hcnkgPSB7XG4gICAgICAgICAgICBiYXNlOiAxMDI0LFxuICAgICAgICAgICAgc3VmZml4ZXM6IFsnQicsICdLaUInLCAnTWlCJywgJ0dpQicsICdUaUInLCAnUGlCJywgJ0VpQicsICdaaUInLCAnWWlCJ11cbiAgICAgICAgfTtcblxuICAgIHZhciBhbGxTdWZmaXhlcyA9ICBkZWNpbWFsLnN1ZmZpeGVzLmNvbmNhdChiaW5hcnkuc3VmZml4ZXMuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICByZXR1cm4gZGVjaW1hbC5zdWZmaXhlcy5pbmRleE9mKGl0ZW0pIDwgMDtcbiAgICAgICAgfSkpO1xuICAgICAgICB2YXIgdW5mb3JtYXRSZWdleCA9IGFsbFN1ZmZpeGVzLmpvaW4oJ3wnKTtcbiAgICAgICAgLy8gQWxsb3cgc3VwcG9ydCBmb3IgQlBTIChodHRwOi8vd3d3LmludmVzdG9wZWRpYS5jb20vdGVybXMvYi9iYXNpc3BvaW50LmFzcClcbiAgICAgICAgdW5mb3JtYXRSZWdleCA9ICcoJyArIHVuZm9ybWF0UmVnZXgucmVwbGFjZSgnQicsICdCKD8hUFMpJykgKyAnKSc7XG5cbiAgICBudW1lcmFsLnJlZ2lzdGVyKCdmb3JtYXQnLCAnYnl0ZXMnLCB7XG4gICAgICAgIHJlZ2V4cHM6IHtcbiAgICAgICAgICAgIGZvcm1hdDogLyhbMFxcc11pP2IpLyxcbiAgICAgICAgICAgIHVuZm9ybWF0OiBuZXcgUmVnRXhwKHVuZm9ybWF0UmVnZXgpXG4gICAgICAgIH0sXG4gICAgICAgIGZvcm1hdDogZnVuY3Rpb24odmFsdWUsIGZvcm1hdCwgcm91bmRpbmdGdW5jdGlvbikge1xuICAgICAgICAgICAgdmFyIG91dHB1dCxcbiAgICAgICAgICAgICAgICBieXRlcyA9IG51bWVyYWwuXy5pbmNsdWRlcyhmb3JtYXQsICdpYicpID8gYmluYXJ5IDogZGVjaW1hbCxcbiAgICAgICAgICAgICAgICBzdWZmaXggPSBudW1lcmFsLl8uaW5jbHVkZXMoZm9ybWF0LCAnIGInKSB8fCBudW1lcmFsLl8uaW5jbHVkZXMoZm9ybWF0LCAnIGliJykgPyAnICcgOiAnJyxcbiAgICAgICAgICAgICAgICBwb3dlcixcbiAgICAgICAgICAgICAgICBtaW4sXG4gICAgICAgICAgICAgICAgbWF4O1xuXG4gICAgICAgICAgICAvLyBjaGVjayBmb3Igc3BhY2UgYmVmb3JlXG4gICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZSgvXFxzP2k/Yi8sICcnKTtcblxuICAgICAgICAgICAgZm9yIChwb3dlciA9IDA7IHBvd2VyIDw9IGJ5dGVzLnN1ZmZpeGVzLmxlbmd0aDsgcG93ZXIrKykge1xuICAgICAgICAgICAgICAgIG1pbiA9IE1hdGgucG93KGJ5dGVzLmJhc2UsIHBvd2VyKTtcbiAgICAgICAgICAgICAgICBtYXggPSBNYXRoLnBvdyhieXRlcy5iYXNlLCBwb3dlciArIDEpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSAwIHx8IHZhbHVlID49IG1pbiAmJiB2YWx1ZSA8IG1heCkge1xuICAgICAgICAgICAgICAgICAgICBzdWZmaXggKz0gYnl0ZXMuc3VmZml4ZXNbcG93ZXJdO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChtaW4gPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlIC8gbWluO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBvdXRwdXQgPSBudW1lcmFsLl8ubnVtYmVyVG9Gb3JtYXQodmFsdWUsIGZvcm1hdCwgcm91bmRpbmdGdW5jdGlvbik7XG5cbiAgICAgICAgICAgIHJldHVybiBvdXRwdXQgKyBzdWZmaXg7XG4gICAgICAgIH0sXG4gICAgICAgIHVuZm9ybWF0OiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IG51bWVyYWwuXy5zdHJpbmdUb051bWJlcihzdHJpbmcpLFxuICAgICAgICAgICAgICAgIHBvd2VyLFxuICAgICAgICAgICAgICAgIGJ5dGVzTXVsdGlwbGllcjtcblxuICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgZm9yIChwb3dlciA9IGRlY2ltYWwuc3VmZml4ZXMubGVuZ3RoIC0gMTsgcG93ZXIgPj0gMDsgcG93ZXItLSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAobnVtZXJhbC5fLmluY2x1ZGVzKHN0cmluZywgZGVjaW1hbC5zdWZmaXhlc1twb3dlcl0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBieXRlc011bHRpcGxpZXIgPSBNYXRoLnBvdyhkZWNpbWFsLmJhc2UsIHBvd2VyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAobnVtZXJhbC5fLmluY2x1ZGVzKHN0cmluZywgYmluYXJ5LnN1ZmZpeGVzW3Bvd2VyXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzTXVsdGlwbGllciA9IE1hdGgucG93KGJpbmFyeS5iYXNlLCBwb3dlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFsdWUgKj0gKGJ5dGVzTXVsdGlwbGllciB8fCAxKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgfSk7XG59KSgpO1xuXG5cbihmdW5jdGlvbigpIHtcbiAgICAgICAgbnVtZXJhbC5yZWdpc3RlcignZm9ybWF0JywgJ2N1cnJlbmN5Jywge1xuICAgICAgICByZWdleHBzOiB7XG4gICAgICAgICAgICBmb3JtYXQ6IC8oXFwkKS9cbiAgICAgICAgfSxcbiAgICAgICAgZm9ybWF0OiBmdW5jdGlvbih2YWx1ZSwgZm9ybWF0LCByb3VuZGluZ0Z1bmN0aW9uKSB7XG4gICAgICAgICAgICB2YXIgbG9jYWxlID0gbnVtZXJhbC5sb2NhbGVzW251bWVyYWwub3B0aW9ucy5jdXJyZW50TG9jYWxlXSxcbiAgICAgICAgICAgICAgICBzeW1ib2xzID0ge1xuICAgICAgICAgICAgICAgICAgICBiZWZvcmU6IGZvcm1hdC5tYXRjaCgvXihbXFwrfFxcLXxcXCh8XFxzfFxcJF0qKS8pWzBdLFxuICAgICAgICAgICAgICAgICAgICBhZnRlcjogZm9ybWF0Lm1hdGNoKC8oW1xcK3xcXC18XFwpfFxcc3xcXCRdKikkLylbMF1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG91dHB1dCxcbiAgICAgICAgICAgICAgICBzeW1ib2wsXG4gICAgICAgICAgICAgICAgaTtcblxuICAgICAgICAgICAgLy8gc3RyaXAgZm9ybWF0IG9mIHNwYWNlcyBhbmQgJFxuICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0LnJlcGxhY2UoL1xccz9cXCRcXHM/LywgJycpO1xuXG4gICAgICAgICAgICAvLyBmb3JtYXQgdGhlIG51bWJlclxuICAgICAgICAgICAgb3V0cHV0ID0gbnVtZXJhbC5fLm51bWJlclRvRm9ybWF0KHZhbHVlLCBmb3JtYXQsIHJvdW5kaW5nRnVuY3Rpb24pO1xuXG4gICAgICAgICAgICAvLyB1cGRhdGUgdGhlIGJlZm9yZSBhbmQgYWZ0ZXIgYmFzZWQgb24gdmFsdWVcbiAgICAgICAgICAgIGlmICh2YWx1ZSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgc3ltYm9scy5iZWZvcmUgPSBzeW1ib2xzLmJlZm9yZS5yZXBsYWNlKC9bXFwtXFwoXS8sICcnKTtcbiAgICAgICAgICAgICAgICBzeW1ib2xzLmFmdGVyID0gc3ltYm9scy5hZnRlci5yZXBsYWNlKC9bXFwtXFwpXS8sICcnKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPCAwICYmICghbnVtZXJhbC5fLmluY2x1ZGVzKHN5bWJvbHMuYmVmb3JlLCAnLScpICYmICFudW1lcmFsLl8uaW5jbHVkZXMoc3ltYm9scy5iZWZvcmUsICcoJykpKSB7XG4gICAgICAgICAgICAgICAgc3ltYm9scy5iZWZvcmUgPSAnLScgKyBzeW1ib2xzLmJlZm9yZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gbG9vcCB0aHJvdWdoIGVhY2ggYmVmb3JlIHN5bWJvbFxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHN5bWJvbHMuYmVmb3JlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgc3ltYm9sID0gc3ltYm9scy5iZWZvcmVbaV07XG5cbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHN5bWJvbCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlICckJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IG51bWVyYWwuXy5pbnNlcnQob3V0cHV0LCBsb2NhbGUuY3VycmVuY3kuc3ltYm9sLCBpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICcgJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IG51bWVyYWwuXy5pbnNlcnQob3V0cHV0LCAnICcsIGkgKyBsb2NhbGUuY3VycmVuY3kuc3ltYm9sLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBsb29wIHRocm91Z2ggZWFjaCBhZnRlciBzeW1ib2xcbiAgICAgICAgICAgIGZvciAoaSA9IHN5bWJvbHMuYWZ0ZXIubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICBzeW1ib2wgPSBzeW1ib2xzLmFmdGVyW2ldO1xuXG4gICAgICAgICAgICAgICAgc3dpdGNoIChzeW1ib2wpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnJCc6XG4gICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSBpID09PSBzeW1ib2xzLmFmdGVyLmxlbmd0aCAtIDEgPyBvdXRwdXQgKyBsb2NhbGUuY3VycmVuY3kuc3ltYm9sIDogbnVtZXJhbC5fLmluc2VydChvdXRwdXQsIGxvY2FsZS5jdXJyZW5jeS5zeW1ib2wsIC0oc3ltYm9scy5hZnRlci5sZW5ndGggLSAoMSArIGkpKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnICc6XG4gICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSBpID09PSBzeW1ib2xzLmFmdGVyLmxlbmd0aCAtIDEgPyBvdXRwdXQgKyAnICcgOiBudW1lcmFsLl8uaW5zZXJ0KG91dHB1dCwgJyAnLCAtKHN5bWJvbHMuYWZ0ZXIubGVuZ3RoIC0gKDEgKyBpKSArIGxvY2FsZS5jdXJyZW5jeS5zeW1ib2wubGVuZ3RoIC0gMSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICAgIH1cbiAgICB9KTtcbn0pKCk7XG5cblxuKGZ1bmN0aW9uKCkge1xuICAgICAgICBudW1lcmFsLnJlZ2lzdGVyKCdmb3JtYXQnLCAnZXhwb25lbnRpYWwnLCB7XG4gICAgICAgIHJlZ2V4cHM6IHtcbiAgICAgICAgICAgIGZvcm1hdDogLyhlXFwrfGUtKS8sXG4gICAgICAgICAgICB1bmZvcm1hdDogLyhlXFwrfGUtKS9cbiAgICAgICAgfSxcbiAgICAgICAgZm9ybWF0OiBmdW5jdGlvbih2YWx1ZSwgZm9ybWF0LCByb3VuZGluZ0Z1bmN0aW9uKSB7XG4gICAgICAgICAgICB2YXIgb3V0cHV0LFxuICAgICAgICAgICAgICAgIGV4cG9uZW50aWFsID0gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiAhbnVtZXJhbC5fLmlzTmFOKHZhbHVlKSA/IHZhbHVlLnRvRXhwb25lbnRpYWwoKSA6ICcwZSswJyxcbiAgICAgICAgICAgICAgICBwYXJ0cyA9IGV4cG9uZW50aWFsLnNwbGl0KCdlJyk7XG5cbiAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKC9lW1xcK3xcXC1dezF9MC8sICcnKTtcblxuICAgICAgICAgICAgb3V0cHV0ID0gbnVtZXJhbC5fLm51bWJlclRvRm9ybWF0KE51bWJlcihwYXJ0c1swXSksIGZvcm1hdCwgcm91bmRpbmdGdW5jdGlvbik7XG5cbiAgICAgICAgICAgIHJldHVybiBvdXRwdXQgKyAnZScgKyBwYXJ0c1sxXTtcbiAgICAgICAgfSxcbiAgICAgICAgdW5mb3JtYXQ6IGZ1bmN0aW9uKHN0cmluZykge1xuICAgICAgICAgICAgdmFyIHBhcnRzID0gbnVtZXJhbC5fLmluY2x1ZGVzKHN0cmluZywgJ2UrJykgPyBzdHJpbmcuc3BsaXQoJ2UrJykgOiBzdHJpbmcuc3BsaXQoJ2UtJyksXG4gICAgICAgICAgICAgICAgdmFsdWUgPSBOdW1iZXIocGFydHNbMF0pLFxuICAgICAgICAgICAgICAgIHBvd2VyID0gTnVtYmVyKHBhcnRzWzFdKTtcblxuICAgICAgICAgICAgcG93ZXIgPSBudW1lcmFsLl8uaW5jbHVkZXMoc3RyaW5nLCAnZS0nKSA/IHBvd2VyICo9IC0xIDogcG93ZXI7XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIGNiYWNrKGFjY3VtLCBjdXJyLCBjdXJySSwgTykge1xuICAgICAgICAgICAgICAgIHZhciBjb3JyRmFjdG9yID0gbnVtZXJhbC5fLmNvcnJlY3Rpb25GYWN0b3IoYWNjdW0sIGN1cnIpLFxuICAgICAgICAgICAgICAgICAgICBudW0gPSAoYWNjdW0gKiBjb3JyRmFjdG9yKSAqIChjdXJyICogY29yckZhY3RvcikgLyAoY29yckZhY3RvciAqIGNvcnJGYWN0b3IpO1xuICAgICAgICAgICAgICAgIHJldHVybiBudW07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBudW1lcmFsLl8ucmVkdWNlKFt2YWx1ZSwgTWF0aC5wb3coMTAsIHBvd2VyKV0sIGNiYWNrLCAxKTtcbiAgICAgICAgfVxuICAgIH0pO1xufSkoKTtcblxuXG4oZnVuY3Rpb24oKSB7XG4gICAgICAgIG51bWVyYWwucmVnaXN0ZXIoJ2Zvcm1hdCcsICdvcmRpbmFsJywge1xuICAgICAgICByZWdleHBzOiB7XG4gICAgICAgICAgICBmb3JtYXQ6IC8obykvXG4gICAgICAgIH0sXG4gICAgICAgIGZvcm1hdDogZnVuY3Rpb24odmFsdWUsIGZvcm1hdCwgcm91bmRpbmdGdW5jdGlvbikge1xuICAgICAgICAgICAgdmFyIGxvY2FsZSA9IG51bWVyYWwubG9jYWxlc1tudW1lcmFsLm9wdGlvbnMuY3VycmVudExvY2FsZV0sXG4gICAgICAgICAgICAgICAgb3V0cHV0LFxuICAgICAgICAgICAgICAgIG9yZGluYWwgPSBudW1lcmFsLl8uaW5jbHVkZXMoZm9ybWF0LCAnIG8nKSA/ICcgJyA6ICcnO1xuXG4gICAgICAgICAgICAvLyBjaGVjayBmb3Igc3BhY2UgYmVmb3JlXG4gICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZSgvXFxzP28vLCAnJyk7XG5cbiAgICAgICAgICAgIG9yZGluYWwgKz0gbG9jYWxlLm9yZGluYWwodmFsdWUpO1xuXG4gICAgICAgICAgICBvdXRwdXQgPSBudW1lcmFsLl8ubnVtYmVyVG9Gb3JtYXQodmFsdWUsIGZvcm1hdCwgcm91bmRpbmdGdW5jdGlvbik7XG5cbiAgICAgICAgICAgIHJldHVybiBvdXRwdXQgKyBvcmRpbmFsO1xuICAgICAgICB9XG4gICAgfSk7XG59KSgpO1xuXG5cbihmdW5jdGlvbigpIHtcbiAgICAgICAgbnVtZXJhbC5yZWdpc3RlcignZm9ybWF0JywgJ3BlcmNlbnRhZ2UnLCB7XG4gICAgICAgIHJlZ2V4cHM6IHtcbiAgICAgICAgICAgIGZvcm1hdDogLyglKS8sXG4gICAgICAgICAgICB1bmZvcm1hdDogLyglKS9cbiAgICAgICAgfSxcbiAgICAgICAgZm9ybWF0OiBmdW5jdGlvbih2YWx1ZSwgZm9ybWF0LCByb3VuZGluZ0Z1bmN0aW9uKSB7XG4gICAgICAgICAgICB2YXIgc3BhY2UgPSBudW1lcmFsLl8uaW5jbHVkZXMoZm9ybWF0LCAnICUnKSA/ICcgJyA6ICcnLFxuICAgICAgICAgICAgICAgIG91dHB1dDtcblxuICAgICAgICAgICAgaWYgKG51bWVyYWwub3B0aW9ucy5zY2FsZVBlcmNlbnRCeTEwMCkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgKiAxMDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGNoZWNrIGZvciBzcGFjZSBiZWZvcmUgJVxuICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0LnJlcGxhY2UoL1xccz9cXCUvLCAnJyk7XG5cbiAgICAgICAgICAgIG91dHB1dCA9IG51bWVyYWwuXy5udW1iZXJUb0Zvcm1hdCh2YWx1ZSwgZm9ybWF0LCByb3VuZGluZ0Z1bmN0aW9uKTtcblxuICAgICAgICAgICAgaWYgKG51bWVyYWwuXy5pbmNsdWRlcyhvdXRwdXQsICcpJykpIHtcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSBvdXRwdXQuc3BsaXQoJycpO1xuXG4gICAgICAgICAgICAgICAgb3V0cHV0LnNwbGljZSgtMSwgMCwgc3BhY2UgKyAnJScpO1xuXG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gb3V0cHV0LmpvaW4oJycpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSBvdXRwdXQgKyBzcGFjZSArICclJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgdW5mb3JtYXQ6IGZ1bmN0aW9uKHN0cmluZykge1xuICAgICAgICAgICAgdmFyIG51bWJlciA9IG51bWVyYWwuXy5zdHJpbmdUb051bWJlcihzdHJpbmcpO1xuICAgICAgICAgICAgaWYgKG51bWVyYWwub3B0aW9ucy5zY2FsZVBlcmNlbnRCeTEwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKiAwLjAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgfVxuICAgIH0pO1xufSkoKTtcblxuXG4oZnVuY3Rpb24oKSB7XG4gICAgICAgIG51bWVyYWwucmVnaXN0ZXIoJ2Zvcm1hdCcsICd0aW1lJywge1xuICAgICAgICByZWdleHBzOiB7XG4gICAgICAgICAgICBmb3JtYXQ6IC8oOikvLFxuICAgICAgICAgICAgdW5mb3JtYXQ6IC8oOikvXG4gICAgICAgIH0sXG4gICAgICAgIGZvcm1hdDogZnVuY3Rpb24odmFsdWUsIGZvcm1hdCwgcm91bmRpbmdGdW5jdGlvbikge1xuICAgICAgICAgICAgdmFyIGhvdXJzID0gTWF0aC5mbG9vcih2YWx1ZSAvIDYwIC8gNjApLFxuICAgICAgICAgICAgICAgIG1pbnV0ZXMgPSBNYXRoLmZsb29yKCh2YWx1ZSAtIChob3VycyAqIDYwICogNjApKSAvIDYwKSxcbiAgICAgICAgICAgICAgICBzZWNvbmRzID0gTWF0aC5yb3VuZCh2YWx1ZSAtIChob3VycyAqIDYwICogNjApIC0gKG1pbnV0ZXMgKiA2MCkpO1xuXG4gICAgICAgICAgICByZXR1cm4gaG91cnMgKyAnOicgKyAobWludXRlcyA8IDEwID8gJzAnICsgbWludXRlcyA6IG1pbnV0ZXMpICsgJzonICsgKHNlY29uZHMgPCAxMCA/ICcwJyArIHNlY29uZHMgOiBzZWNvbmRzKTtcbiAgICAgICAgfSxcbiAgICAgICAgdW5mb3JtYXQ6IGZ1bmN0aW9uKHN0cmluZykge1xuICAgICAgICAgICAgdmFyIHRpbWVBcnJheSA9IHN0cmluZy5zcGxpdCgnOicpLFxuICAgICAgICAgICAgICAgIHNlY29uZHMgPSAwO1xuXG4gICAgICAgICAgICAvLyB0dXJuIGhvdXJzIGFuZCBtaW51dGVzIGludG8gc2Vjb25kcyBhbmQgYWRkIHRoZW0gYWxsIHVwXG4gICAgICAgICAgICBpZiAodGltZUFycmF5Lmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgICAgIC8vIGhvdXJzXG4gICAgICAgICAgICAgICAgc2Vjb25kcyA9IHNlY29uZHMgKyAoTnVtYmVyKHRpbWVBcnJheVswXSkgKiA2MCAqIDYwKTtcbiAgICAgICAgICAgICAgICAvLyBtaW51dGVzXG4gICAgICAgICAgICAgICAgc2Vjb25kcyA9IHNlY29uZHMgKyAoTnVtYmVyKHRpbWVBcnJheVsxXSkgKiA2MCk7XG4gICAgICAgICAgICAgICAgLy8gc2Vjb25kc1xuICAgICAgICAgICAgICAgIHNlY29uZHMgPSBzZWNvbmRzICsgTnVtYmVyKHRpbWVBcnJheVsyXSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRpbWVBcnJheS5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgICAgICAvLyBtaW51dGVzXG4gICAgICAgICAgICAgICAgc2Vjb25kcyA9IHNlY29uZHMgKyAoTnVtYmVyKHRpbWVBcnJheVswXSkgKiA2MCk7XG4gICAgICAgICAgICAgICAgLy8gc2Vjb25kc1xuICAgICAgICAgICAgICAgIHNlY29uZHMgPSBzZWNvbmRzICsgTnVtYmVyKHRpbWVBcnJheVsxXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gTnVtYmVyKHNlY29uZHMpO1xuICAgICAgICB9XG4gICAgfSk7XG59KSgpO1xuXG5yZXR1cm4gbnVtZXJhbDtcbn0pKTtcbiIsICJ2YXIgTWFwQ2FjaGUgPSByZXF1aXJlKCcuL19NYXBDYWNoZScpO1xuXG4vKiogRXJyb3IgbWVzc2FnZSBjb25zdGFudHMuICovXG52YXIgRlVOQ19FUlJPUl9URVhUID0gJ0V4cGVjdGVkIGEgZnVuY3Rpb24nO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IG1lbW9pemVzIHRoZSByZXN1bHQgb2YgYGZ1bmNgLiBJZiBgcmVzb2x2ZXJgIGlzXG4gKiBwcm92aWRlZCwgaXQgZGV0ZXJtaW5lcyB0aGUgY2FjaGUga2V5IGZvciBzdG9yaW5nIHRoZSByZXN1bHQgYmFzZWQgb24gdGhlXG4gKiBhcmd1bWVudHMgcHJvdmlkZWQgdG8gdGhlIG1lbW9pemVkIGZ1bmN0aW9uLiBCeSBkZWZhdWx0LCB0aGUgZmlyc3QgYXJndW1lbnRcbiAqIHByb3ZpZGVkIHRvIHRoZSBtZW1vaXplZCBmdW5jdGlvbiBpcyB1c2VkIGFzIHRoZSBtYXAgY2FjaGUga2V5LiBUaGUgYGZ1bmNgXG4gKiBpcyBpbnZva2VkIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIHRoZSBtZW1vaXplZCBmdW5jdGlvbi5cbiAqXG4gKiAqKk5vdGU6KiogVGhlIGNhY2hlIGlzIGV4cG9zZWQgYXMgdGhlIGBjYWNoZWAgcHJvcGVydHkgb24gdGhlIG1lbW9pemVkXG4gKiBmdW5jdGlvbi4gSXRzIGNyZWF0aW9uIG1heSBiZSBjdXN0b21pemVkIGJ5IHJlcGxhY2luZyB0aGUgYF8ubWVtb2l6ZS5DYWNoZWBcbiAqIGNvbnN0cnVjdG9yIHdpdGggb25lIHdob3NlIGluc3RhbmNlcyBpbXBsZW1lbnQgdGhlXG4gKiBbYE1hcGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXByb3BlcnRpZXMtb2YtdGhlLW1hcC1wcm90b3R5cGUtb2JqZWN0KVxuICogbWV0aG9kIGludGVyZmFjZSBvZiBgY2xlYXJgLCBgZGVsZXRlYCwgYGdldGAsIGBoYXNgLCBhbmQgYHNldGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBoYXZlIGl0cyBvdXRwdXQgbWVtb2l6ZWQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcmVzb2x2ZXJdIFRoZSBmdW5jdGlvbiB0byByZXNvbHZlIHRoZSBjYWNoZSBrZXkuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBtZW1vaXplZCBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6IDIgfTtcbiAqIHZhciBvdGhlciA9IHsgJ2MnOiAzLCAnZCc6IDQgfTtcbiAqXG4gKiB2YXIgdmFsdWVzID0gXy5tZW1vaXplKF8udmFsdWVzKTtcbiAqIHZhbHVlcyhvYmplY3QpO1xuICogLy8gPT4gWzEsIDJdXG4gKlxuICogdmFsdWVzKG90aGVyKTtcbiAqIC8vID0+IFszLCA0XVxuICpcbiAqIG9iamVjdC5hID0gMjtcbiAqIHZhbHVlcyhvYmplY3QpO1xuICogLy8gPT4gWzEsIDJdXG4gKlxuICogLy8gTW9kaWZ5IHRoZSByZXN1bHQgY2FjaGUuXG4gKiB2YWx1ZXMuY2FjaGUuc2V0KG9iamVjdCwgWydhJywgJ2InXSk7XG4gKiB2YWx1ZXMob2JqZWN0KTtcbiAqIC8vID0+IFsnYScsICdiJ11cbiAqXG4gKiAvLyBSZXBsYWNlIGBfLm1lbW9pemUuQ2FjaGVgLlxuICogXy5tZW1vaXplLkNhY2hlID0gV2Vha01hcDtcbiAqL1xuZnVuY3Rpb24gbWVtb2l6ZShmdW5jLCByZXNvbHZlcikge1xuICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJyB8fCAocmVzb2x2ZXIgIT0gbnVsbCAmJiB0eXBlb2YgcmVzb2x2ZXIgIT0gJ2Z1bmN0aW9uJykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gIH1cbiAgdmFyIG1lbW9pemVkID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgIGtleSA9IHJlc29sdmVyID8gcmVzb2x2ZXIuYXBwbHkodGhpcywgYXJncykgOiBhcmdzWzBdLFxuICAgICAgICBjYWNoZSA9IG1lbW9pemVkLmNhY2hlO1xuXG4gICAgaWYgKGNhY2hlLmhhcyhrZXkpKSB7XG4gICAgICByZXR1cm4gY2FjaGUuZ2V0KGtleSk7XG4gICAgfVxuICAgIHZhciByZXN1bHQgPSBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIG1lbW9pemVkLmNhY2hlID0gY2FjaGUuc2V0KGtleSwgcmVzdWx0KSB8fCBjYWNoZTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuICBtZW1vaXplZC5jYWNoZSA9IG5ldyAobWVtb2l6ZS5DYWNoZSB8fCBNYXBDYWNoZSk7XG4gIHJldHVybiBtZW1vaXplZDtcbn1cblxuLy8gRXhwb3NlIGBNYXBDYWNoZWAuXG5tZW1vaXplLkNhY2hlID0gTWFwQ2FjaGU7XG5cbm1vZHVsZS5leHBvcnRzID0gbWVtb2l6ZTtcbiIsICJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXSc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBTeW1ib2xgIHByaW1pdGl2ZSBvciBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzeW1ib2wsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1N5bWJvbChTeW1ib2wuaXRlcmF0b3IpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNTeW1ib2woJ2FiYycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTeW1ib2wodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnc3ltYm9sJyB8fFxuICAgIChpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IHN5bWJvbFRhZyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNTeW1ib2w7XG4iLCAidmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc1N5bWJvbCA9IHJlcXVpcmUoJy4vaXNTeW1ib2wnKTtcblxuLyoqIFVzZWQgdG8gbWF0Y2ggcHJvcGVydHkgbmFtZXMgd2l0aGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlSXNEZWVwUHJvcCA9IC9cXC58XFxbKD86W15bXFxdXSp8KFtcIiddKSg/Oig/IVxcMSlbXlxcXFxdfFxcXFwuKSo/XFwxKVxcXS8sXG4gICAgcmVJc1BsYWluUHJvcCA9IC9eXFx3KiQvO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcHJvcGVydHkgbmFtZSBhbmQgbm90IGEgcHJvcGVydHkgcGF0aC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeSBrZXlzIG9uLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwcm9wZXJ0eSBuYW1lLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzS2V5KHZhbHVlLCBvYmplY3QpIHtcbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICBpZiAodHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nIHx8XG4gICAgICB2YWx1ZSA9PSBudWxsIHx8IGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiByZUlzUGxhaW5Qcm9wLnRlc3QodmFsdWUpIHx8ICFyZUlzRGVlcFByb3AudGVzdCh2YWx1ZSkgfHxcbiAgICAob2JqZWN0ICE9IG51bGwgJiYgdmFsdWUgaW4gT2JqZWN0KG9iamVjdCkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzS2V5O1xuIiwgInZhciBtZW1vaXplID0gcmVxdWlyZSgnLi9tZW1vaXplJyk7XG5cbi8qKiBVc2VkIGFzIHRoZSBtYXhpbXVtIG1lbW9pemUgY2FjaGUgc2l6ZS4gKi9cbnZhciBNQVhfTUVNT0laRV9TSVpFID0gNTAwO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5tZW1vaXplYCB3aGljaCBjbGVhcnMgdGhlIG1lbW9pemVkIGZ1bmN0aW9uJ3NcbiAqIGNhY2hlIHdoZW4gaXQgZXhjZWVkcyBgTUFYX01FTU9JWkVfU0laRWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGhhdmUgaXRzIG91dHB1dCBtZW1vaXplZC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IG1lbW9pemVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBtZW1vaXplQ2FwcGVkKGZ1bmMpIHtcbiAgdmFyIHJlc3VsdCA9IG1lbW9pemUoZnVuYywgZnVuY3Rpb24oa2V5KSB7XG4gICAgaWYgKGNhY2hlLnNpemUgPT09IE1BWF9NRU1PSVpFX1NJWkUpIHtcbiAgICAgIGNhY2hlLmNsZWFyKCk7XG4gICAgfVxuICAgIHJldHVybiBrZXk7XG4gIH0pO1xuXG4gIHZhciBjYWNoZSA9IHJlc3VsdC5jYWNoZTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtZW1vaXplQ2FwcGVkO1xuIiwgInZhciBtZW1vaXplQ2FwcGVkID0gcmVxdWlyZSgnLi9fbWVtb2l6ZUNhcHBlZCcpO1xuXG4vKiogVXNlZCB0byBtYXRjaCBwcm9wZXJ0eSBuYW1lcyB3aXRoaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgcmVQcm9wTmFtZSA9IC9bXi5bXFxdXSt8XFxbKD86KC0/XFxkKyg/OlxcLlxcZCspPyl8KFtcIiddKSgoPzooPyFcXDIpW15cXFxcXXxcXFxcLikqPylcXDIpXFxdfCg/PSg/OlxcLnxcXFtcXF0pKD86XFwufFxcW1xcXXwkKSkvZztcblxuLyoqIFVzZWQgdG8gbWF0Y2ggYmFja3NsYXNoZXMgaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgcmVFc2NhcGVDaGFyID0gL1xcXFwoXFxcXCk/L2c7XG5cbi8qKlxuICogQ29udmVydHMgYHN0cmluZ2AgdG8gYSBwcm9wZXJ0eSBwYXRoIGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAqL1xudmFyIHN0cmluZ1RvUGF0aCA9IG1lbW9pemVDYXBwZWQoZnVuY3Rpb24oc3RyaW5nKSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgaWYgKHN0cmluZy5jaGFyQ29kZUF0KDApID09PSA0NiAvKiAuICovKSB7XG4gICAgcmVzdWx0LnB1c2goJycpO1xuICB9XG4gIHN0cmluZy5yZXBsYWNlKHJlUHJvcE5hbWUsIGZ1bmN0aW9uKG1hdGNoLCBudW1iZXIsIHF1b3RlLCBzdWJTdHJpbmcpIHtcbiAgICByZXN1bHQucHVzaChxdW90ZSA/IHN1YlN0cmluZy5yZXBsYWNlKHJlRXNjYXBlQ2hhciwgJyQxJykgOiAobnVtYmVyIHx8IG1hdGNoKSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gc3RyaW5nVG9QYXRoO1xuIiwgIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLm1hcGAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlXG4gKiBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgbWFwcGVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBhcnJheU1hcChhcnJheSwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlNYXA7XG4iLCAidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpLFxuICAgIGFycmF5TWFwID0gcmVxdWlyZSgnLi9fYXJyYXlNYXAnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNTeW1ib2wgPSByZXF1aXJlKCcuL2lzU3ltYm9sJyk7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIElORklOSVRZID0gMSAvIDA7XG5cbi8qKiBVc2VkIHRvIGNvbnZlcnQgc3ltYm9scyB0byBwcmltaXRpdmVzIGFuZCBzdHJpbmdzLiAqL1xudmFyIHN5bWJvbFByb3RvID0gU3ltYm9sID8gU3ltYm9sLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcbiAgICBzeW1ib2xUb1N0cmluZyA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udG9TdHJpbmcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udG9TdHJpbmdgIHdoaWNoIGRvZXNuJ3QgY29udmVydCBudWxsaXNoXG4gKiB2YWx1ZXMgdG8gZW1wdHkgc3RyaW5ncy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvY2Vzcy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gYmFzZVRvU3RyaW5nKHZhbHVlKSB7XG4gIC8vIEV4aXQgZWFybHkgZm9yIHN0cmluZ3MgdG8gYXZvaWQgYSBwZXJmb3JtYW5jZSBoaXQgaW4gc29tZSBlbnZpcm9ubWVudHMuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgLy8gUmVjdXJzaXZlbHkgY29udmVydCB2YWx1ZXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICByZXR1cm4gYXJyYXlNYXAodmFsdWUsIGJhc2VUb1N0cmluZykgKyAnJztcbiAgfVxuICBpZiAoaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIHN5bWJvbFRvU3RyaW5nID8gc3ltYm9sVG9TdHJpbmcuY2FsbCh2YWx1ZSkgOiAnJztcbiAgfVxuICB2YXIgcmVzdWx0ID0gKHZhbHVlICsgJycpO1xuICByZXR1cm4gKHJlc3VsdCA9PSAnMCcgJiYgKDEgLyB2YWx1ZSkgPT0gLUlORklOSVRZKSA/ICctMCcgOiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVRvU3RyaW5nO1xuIiwgInZhciBiYXNlVG9TdHJpbmcgPSByZXF1aXJlKCcuL19iYXNlVG9TdHJpbmcnKTtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nLiBBbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQgZm9yIGBudWxsYFxuICogYW5kIGB1bmRlZmluZWRgIHZhbHVlcy4gVGhlIHNpZ24gb2YgYC0wYCBpcyBwcmVzZXJ2ZWQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvU3RyaW5nKG51bGwpO1xuICogLy8gPT4gJydcbiAqXG4gKiBfLnRvU3RyaW5nKC0wKTtcbiAqIC8vID0+ICctMCdcbiAqXG4gKiBfLnRvU3RyaW5nKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiAnMSwyLDMnXG4gKi9cbmZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PSBudWxsID8gJycgOiBiYXNlVG9TdHJpbmcodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvU3RyaW5nO1xuIiwgInZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNLZXkgPSByZXF1aXJlKCcuL19pc0tleScpLFxuICAgIHN0cmluZ1RvUGF0aCA9IHJlcXVpcmUoJy4vX3N0cmluZ1RvUGF0aCcpLFxuICAgIHRvU3RyaW5nID0gcmVxdWlyZSgnLi90b1N0cmluZycpO1xuXG4vKipcbiAqIENhc3RzIGB2YWx1ZWAgdG8gYSBwYXRoIGFycmF5IGlmIGl0J3Mgbm90IG9uZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5IGtleXMgb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNhc3QgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gY2FzdFBhdGgodmFsdWUsIG9iamVjdCkge1xuICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIGlzS2V5KHZhbHVlLCBvYmplY3QpID8gW3ZhbHVlXSA6IHN0cmluZ1RvUGF0aCh0b1N0cmluZyh2YWx1ZSkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNhc3RQYXRoO1xuIiwgInZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4vaXNTeW1ib2wnKTtcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgSU5GSU5JVFkgPSAxIC8gMDtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIGtleSBpZiBpdCdzIG5vdCBhIHN0cmluZyBvciBzeW1ib2wuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7c3RyaW5nfHN5bWJvbH0gUmV0dXJucyB0aGUga2V5LlxuICovXG5mdW5jdGlvbiB0b0tleSh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnIHx8IGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICB2YXIgcmVzdWx0ID0gKHZhbHVlICsgJycpO1xuICByZXR1cm4gKHJlc3VsdCA9PSAnMCcgJiYgKDEgLyB2YWx1ZSkgPT0gLUlORklOSVRZKSA/ICctMCcgOiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9LZXk7XG4iLCAidmFyIGNhc3RQYXRoID0gcmVxdWlyZSgnLi9fY2FzdFBhdGgnKSxcbiAgICB0b0tleSA9IHJlcXVpcmUoJy4vX3RvS2V5Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZ2V0YCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZmF1bHQgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc29sdmVkIHZhbHVlLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0KG9iamVjdCwgcGF0aCkge1xuICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcblxuICB2YXIgaW5kZXggPSAwLFxuICAgICAgbGVuZ3RoID0gcGF0aC5sZW5ndGg7XG5cbiAgd2hpbGUgKG9iamVjdCAhPSBudWxsICYmIGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgb2JqZWN0ID0gb2JqZWN0W3RvS2V5KHBhdGhbaW5kZXgrK10pXTtcbiAgfVxuICByZXR1cm4gKGluZGV4ICYmIGluZGV4ID09IGxlbmd0aCkgPyBvYmplY3QgOiB1bmRlZmluZWQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUdldDtcbiIsICJ2YXIgYmFzZUdldCA9IHJlcXVpcmUoJy4vX2Jhc2VHZXQnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSB2YWx1ZSBhdCBgcGF0aGAgb2YgYG9iamVjdGAuIElmIHRoZSByZXNvbHZlZCB2YWx1ZSBpc1xuICogYHVuZGVmaW5lZGAsIHRoZSBgZGVmYXVsdFZhbHVlYCBpcyByZXR1cm5lZCBpbiBpdHMgcGxhY2UuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjcuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEBwYXJhbSB7Kn0gW2RlZmF1bHRWYWx1ZV0gVGhlIHZhbHVlIHJldHVybmVkIGZvciBgdW5kZWZpbmVkYCByZXNvbHZlZCB2YWx1ZXMuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzb2x2ZWQgdmFsdWUuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogW3sgJ2InOiB7ICdjJzogMyB9IH1dIH07XG4gKlxuICogXy5nZXQob2JqZWN0LCAnYVswXS5iLmMnKTtcbiAqIC8vID0+IDNcbiAqXG4gKiBfLmdldChvYmplY3QsIFsnYScsICcwJywgJ2InLCAnYyddKTtcbiAqIC8vID0+IDNcbiAqXG4gKiBfLmdldChvYmplY3QsICdhLmIuYycsICdkZWZhdWx0Jyk7XG4gKiAvLyA9PiAnZGVmYXVsdCdcbiAqL1xuZnVuY3Rpb24gZ2V0KG9iamVjdCwgcGF0aCwgZGVmYXVsdFZhbHVlKSB7XG4gIHZhciByZXN1bHQgPSBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGJhc2VHZXQob2JqZWN0LCBwYXRoKTtcbiAgcmV0dXJuIHJlc3VsdCA9PT0gdW5kZWZpbmVkID8gZGVmYXVsdFZhbHVlIDogcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldDtcbiIsICIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5mb3JFYWNoYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlFYWNoKGFycmF5LCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKGl0ZXJhdGVlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSA9PT0gZmFsc2UpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlFYWNoO1xuIiwgInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKTtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIHZhciBmdW5jID0gZ2V0TmF0aXZlKE9iamVjdCwgJ2RlZmluZVByb3BlcnR5Jyk7XG4gICAgZnVuYyh7fSwgJycsIHt9KTtcbiAgICByZXR1cm4gZnVuYztcbiAgfSBjYXRjaCAoZSkge31cbn0oKSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lUHJvcGVydHk7XG4iLCAidmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fZGVmaW5lUHJvcGVydHknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgYXNzaWduVmFsdWVgIGFuZCBgYXNzaWduTWVyZ2VWYWx1ZWAgd2l0aG91dFxuICogdmFsdWUgY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBhc3NpZ24uXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBhc3NpZ24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgaWYgKGtleSA9PSAnX19wcm90b19fJyAmJiBkZWZpbmVQcm9wZXJ0eSkge1xuICAgIGRlZmluZVByb3BlcnR5KG9iamVjdCwga2V5LCB7XG4gICAgICAnY29uZmlndXJhYmxlJzogdHJ1ZSxcbiAgICAgICdlbnVtZXJhYmxlJzogdHJ1ZSxcbiAgICAgICd2YWx1ZSc6IHZhbHVlLFxuICAgICAgJ3dyaXRhYmxlJzogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlQXNzaWduVmFsdWU7XG4iLCAidmFyIGJhc2VBc3NpZ25WYWx1ZSA9IHJlcXVpcmUoJy4vX2Jhc2VBc3NpZ25WYWx1ZScpLFxuICAgIGVxID0gcmVxdWlyZSgnLi9lcScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEFzc2lnbnMgYHZhbHVlYCB0byBga2V5YCBvZiBgb2JqZWN0YCBpZiB0aGUgZXhpc3RpbmcgdmFsdWUgaXMgbm90IGVxdWl2YWxlbnRcbiAqIHVzaW5nIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gYXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHZhciBvYmpWYWx1ZSA9IG9iamVjdFtrZXldO1xuICBpZiAoIShoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSAmJiBlcShvYmpWYWx1ZSwgdmFsdWUpKSB8fFxuICAgICAgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkpIHtcbiAgICBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFzc2lnblZhbHVlO1xuIiwgInZhciBhc3NpZ25WYWx1ZSA9IHJlcXVpcmUoJy4vX2Fzc2lnblZhbHVlJyksXG4gICAgYmFzZUFzc2lnblZhbHVlID0gcmVxdWlyZSgnLi9fYmFzZUFzc2lnblZhbHVlJyk7XG5cbi8qKlxuICogQ29waWVzIHByb3BlcnRpZXMgb2YgYHNvdXJjZWAgdG8gYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgZnJvbS5cbiAqIEBwYXJhbSB7QXJyYXl9IHByb3BzIFRoZSBwcm9wZXJ0eSBpZGVudGlmaWVycyB0byBjb3B5LlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3Q9e31dIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIHRvLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29waWVkIHZhbHVlcy5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGNvcHlPYmplY3Qoc291cmNlLCBwcm9wcywgb2JqZWN0LCBjdXN0b21pemVyKSB7XG4gIHZhciBpc05ldyA9ICFvYmplY3Q7XG4gIG9iamVjdCB8fCAob2JqZWN0ID0ge30pO1xuXG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gcHJvcHMubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGtleSA9IHByb3BzW2luZGV4XTtcblxuICAgIHZhciBuZXdWYWx1ZSA9IGN1c3RvbWl6ZXJcbiAgICAgID8gY3VzdG9taXplcihvYmplY3Rba2V5XSwgc291cmNlW2tleV0sIGtleSwgb2JqZWN0LCBzb3VyY2UpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGlmIChuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBuZXdWYWx1ZSA9IHNvdXJjZVtrZXldO1xuICAgIH1cbiAgICBpZiAoaXNOZXcpIHtcbiAgICAgIGJhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb2JqZWN0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcHlPYmplY3Q7XG4iLCAidmFyIGNvcHlPYmplY3QgPSByZXF1aXJlKCcuL19jb3B5T2JqZWN0JyksXG4gICAga2V5cyA9IHJlcXVpcmUoJy4va2V5cycpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmFzc2lnbmAgd2l0aG91dCBzdXBwb3J0IGZvciBtdWx0aXBsZSBzb3VyY2VzXG4gKiBvciBgY3VzdG9taXplcmAgZnVuY3Rpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gYmFzZUFzc2lnbihvYmplY3QsIHNvdXJjZSkge1xuICByZXR1cm4gb2JqZWN0ICYmIGNvcHlPYmplY3Qoc291cmNlLCBrZXlzKHNvdXJjZSksIG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUFzc2lnbjtcbiIsICIvKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgbGlrZVxuICogW2BPYmplY3Qua2V5c2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5rZXlzKVxuICogZXhjZXB0IHRoYXQgaXQgaW5jbHVkZXMgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydGllcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gbmF0aXZlS2V5c0luKG9iamVjdCkge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGlmIChvYmplY3QgIT0gbnVsbCkge1xuICAgIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBuYXRpdmVLZXlzSW47XG4iLCAidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIGlzUHJvdG90eXBlID0gcmVxdWlyZSgnLi9faXNQcm90b3R5cGUnKSxcbiAgICBuYXRpdmVLZXlzSW4gPSByZXF1aXJlKCcuL19uYXRpdmVLZXlzSW4nKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5rZXlzSW5gIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYmFzZUtleXNJbihvYmplY3QpIHtcbiAgaWYgKCFpc09iamVjdChvYmplY3QpKSB7XG4gICAgcmV0dXJuIG5hdGl2ZUtleXNJbihvYmplY3QpO1xuICB9XG4gIHZhciBpc1Byb3RvID0gaXNQcm90b3R5cGUob2JqZWN0KSxcbiAgICAgIHJlc3VsdCA9IFtdO1xuXG4gIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICBpZiAoIShrZXkgPT0gJ2NvbnN0cnVjdG9yJyAmJiAoaXNQcm90byB8fCAhaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkpKSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlS2V5c0luO1xuIiwgInZhciBhcnJheUxpa2VLZXlzID0gcmVxdWlyZSgnLi9fYXJyYXlMaWtlS2V5cycpLFxuICAgIGJhc2VLZXlzSW4gPSByZXF1aXJlKCcuL19iYXNlS2V5c0luJyksXG4gICAgaXNBcnJheUxpa2UgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiBgb2JqZWN0YC5cbiAqXG4gKiAqKk5vdGU6KiogTm9uLW9iamVjdCB2YWx1ZXMgYXJlIGNvZXJjZWQgdG8gb2JqZWN0cy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiAgIHRoaXMuYiA9IDI7XG4gKiB9XG4gKlxuICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAqXG4gKiBfLmtleXNJbihuZXcgRm9vKTtcbiAqIC8vID0+IFsnYScsICdiJywgJ2MnXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICovXG5mdW5jdGlvbiBrZXlzSW4ob2JqZWN0KSB7XG4gIHJldHVybiBpc0FycmF5TGlrZShvYmplY3QpID8gYXJyYXlMaWtlS2V5cyhvYmplY3QsIHRydWUpIDogYmFzZUtleXNJbihvYmplY3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGtleXNJbjtcbiIsICJ2YXIgY29weU9iamVjdCA9IHJlcXVpcmUoJy4vX2NvcHlPYmplY3QnKSxcbiAgICBrZXlzSW4gPSByZXF1aXJlKCcuL2tleXNJbicpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmFzc2lnbkluYCB3aXRob3V0IHN1cHBvcnQgZm9yIG11bHRpcGxlIHNvdXJjZXNcbiAqIG9yIGBjdXN0b21pemVyYCBmdW5jdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBiYXNlQXNzaWduSW4ob2JqZWN0LCBzb3VyY2UpIHtcbiAgcmV0dXJuIG9iamVjdCAmJiBjb3B5T2JqZWN0KHNvdXJjZSwga2V5c0luKHNvdXJjZSksIG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUFzc2lnbkluO1xuIiwgInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIEJ1ZmZlciA9IG1vZHVsZUV4cG9ydHMgPyByb290LkJ1ZmZlciA6IHVuZGVmaW5lZCxcbiAgICBhbGxvY1Vuc2FmZSA9IEJ1ZmZlciA/IEJ1ZmZlci5hbGxvY1Vuc2FmZSA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgIGBidWZmZXJgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0J1ZmZlcn0gYnVmZmVyIFRoZSBidWZmZXIgdG8gY2xvbmUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0RlZXBdIFNwZWNpZnkgYSBkZWVwIGNsb25lLlxuICogQHJldHVybnMge0J1ZmZlcn0gUmV0dXJucyB0aGUgY2xvbmVkIGJ1ZmZlci5cbiAqL1xuZnVuY3Rpb24gY2xvbmVCdWZmZXIoYnVmZmVyLCBpc0RlZXApIHtcbiAgaWYgKGlzRGVlcCkge1xuICAgIHJldHVybiBidWZmZXIuc2xpY2UoKTtcbiAgfVxuICB2YXIgbGVuZ3RoID0gYnVmZmVyLmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IGFsbG9jVW5zYWZlID8gYWxsb2NVbnNhZmUobGVuZ3RoKSA6IG5ldyBidWZmZXIuY29uc3RydWN0b3IobGVuZ3RoKTtcblxuICBidWZmZXIuY29weShyZXN1bHQpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsb25lQnVmZmVyO1xuIiwgIi8qKlxuICogQ29waWVzIHRoZSB2YWx1ZXMgb2YgYHNvdXJjZWAgdG8gYGFycmF5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gc291cmNlIFRoZSBhcnJheSB0byBjb3B5IHZhbHVlcyBmcm9tLlxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5PVtdXSBUaGUgYXJyYXkgdG8gY29weSB2YWx1ZXMgdG8uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gY29weUFycmF5KHNvdXJjZSwgYXJyYXkpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBzb3VyY2UubGVuZ3RoO1xuXG4gIGFycmF5IHx8IChhcnJheSA9IEFycmF5KGxlbmd0aCkpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGFycmF5W2luZGV4XSA9IHNvdXJjZVtpbmRleF07XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcHlBcnJheTtcbiIsICJ2YXIgY29weU9iamVjdCA9IHJlcXVpcmUoJy4vX2NvcHlPYmplY3QnKSxcbiAgICBnZXRTeW1ib2xzID0gcmVxdWlyZSgnLi9fZ2V0U3ltYm9scycpO1xuXG4vKipcbiAqIENvcGllcyBvd24gc3ltYm9scyBvZiBgc291cmNlYCB0byBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IHRvIGNvcHkgc3ltYm9scyBmcm9tLlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3Q9e31dIFRoZSBvYmplY3QgdG8gY29weSBzeW1ib2xzIHRvLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gY29weVN5bWJvbHMoc291cmNlLCBvYmplY3QpIHtcbiAgcmV0dXJuIGNvcHlPYmplY3Qoc291cmNlLCBnZXRTeW1ib2xzKHNvdXJjZSksIG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29weVN5bWJvbHM7XG4iLCAidmFyIG92ZXJBcmcgPSByZXF1aXJlKCcuL19vdmVyQXJnJyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIGdldFByb3RvdHlwZSA9IG92ZXJBcmcoT2JqZWN0LmdldFByb3RvdHlwZU9mLCBPYmplY3QpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFByb3RvdHlwZTtcbiIsICJ2YXIgYXJyYXlQdXNoID0gcmVxdWlyZSgnLi9fYXJyYXlQdXNoJyksXG4gICAgZ2V0UHJvdG90eXBlID0gcmVxdWlyZSgnLi9fZ2V0UHJvdG90eXBlJyksXG4gICAgZ2V0U3ltYm9scyA9IHJlcXVpcmUoJy4vX2dldFN5bWJvbHMnKSxcbiAgICBzdHViQXJyYXkgPSByZXF1aXJlKCcuL3N0dWJBcnJheScpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlR2V0U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHN5bWJvbHMuXG4gKi9cbnZhciBnZXRTeW1ib2xzSW4gPSAhbmF0aXZlR2V0U3ltYm9scyA/IHN0dWJBcnJheSA6IGZ1bmN0aW9uKG9iamVjdCkge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHdoaWxlIChvYmplY3QpIHtcbiAgICBhcnJheVB1c2gocmVzdWx0LCBnZXRTeW1ib2xzKG9iamVjdCkpO1xuICAgIG9iamVjdCA9IGdldFByb3RvdHlwZShvYmplY3QpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFN5bWJvbHNJbjtcbiIsICJ2YXIgY29weU9iamVjdCA9IHJlcXVpcmUoJy4vX2NvcHlPYmplY3QnKSxcbiAgICBnZXRTeW1ib2xzSW4gPSByZXF1aXJlKCcuL19nZXRTeW1ib2xzSW4nKTtcblxuLyoqXG4gKiBDb3BpZXMgb3duIGFuZCBpbmhlcml0ZWQgc3ltYm9scyBvZiBgc291cmNlYCB0byBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IHRvIGNvcHkgc3ltYm9scyBmcm9tLlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3Q9e31dIFRoZSBvYmplY3QgdG8gY29weSBzeW1ib2xzIHRvLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gY29weVN5bWJvbHNJbihzb3VyY2UsIG9iamVjdCkge1xuICByZXR1cm4gY29weU9iamVjdChzb3VyY2UsIGdldFN5bWJvbHNJbihzb3VyY2UpLCBvYmplY3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcHlTeW1ib2xzSW47XG4iLCAidmFyIGJhc2VHZXRBbGxLZXlzID0gcmVxdWlyZSgnLi9fYmFzZUdldEFsbEtleXMnKSxcbiAgICBnZXRTeW1ib2xzSW4gPSByZXF1aXJlKCcuL19nZXRTeW1ib2xzSW4nKSxcbiAgICBrZXlzSW4gPSByZXF1aXJlKCcuL2tleXNJbicpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2Ygb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBhbmRcbiAqIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMgYW5kIHN5bWJvbHMuXG4gKi9cbmZ1bmN0aW9uIGdldEFsbEtleXNJbihvYmplY3QpIHtcbiAgcmV0dXJuIGJhc2VHZXRBbGxLZXlzKG9iamVjdCwga2V5c0luLCBnZXRTeW1ib2xzSW4pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEFsbEtleXNJbjtcbiIsICIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEluaXRpYWxpemVzIGFuIGFycmF5IGNsb25lLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gY2xvbmUuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGluaXRpYWxpemVkIGNsb25lLlxuICovXG5mdW5jdGlvbiBpbml0Q2xvbmVBcnJheShhcnJheSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0gbmV3IGFycmF5LmNvbnN0cnVjdG9yKGxlbmd0aCk7XG5cbiAgLy8gQWRkIHByb3BlcnRpZXMgYXNzaWduZWQgYnkgYFJlZ0V4cCNleGVjYC5cbiAgaWYgKGxlbmd0aCAmJiB0eXBlb2YgYXJyYXlbMF0gPT0gJ3N0cmluZycgJiYgaGFzT3duUHJvcGVydHkuY2FsbChhcnJheSwgJ2luZGV4JykpIHtcbiAgICByZXN1bHQuaW5kZXggPSBhcnJheS5pbmRleDtcbiAgICByZXN1bHQuaW5wdXQgPSBhcnJheS5pbnB1dDtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGluaXRDbG9uZUFycmF5O1xuIiwgInZhciBVaW50OEFycmF5ID0gcmVxdWlyZSgnLi9fVWludDhBcnJheScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgYXJyYXlCdWZmZXJgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5QnVmZmVyfSBhcnJheUJ1ZmZlciBUaGUgYXJyYXkgYnVmZmVyIHRvIGNsb25lLlxuICogQHJldHVybnMge0FycmF5QnVmZmVyfSBSZXR1cm5zIHRoZSBjbG9uZWQgYXJyYXkgYnVmZmVyLlxuICovXG5mdW5jdGlvbiBjbG9uZUFycmF5QnVmZmVyKGFycmF5QnVmZmVyKSB7XG4gIHZhciByZXN1bHQgPSBuZXcgYXJyYXlCdWZmZXIuY29uc3RydWN0b3IoYXJyYXlCdWZmZXIuYnl0ZUxlbmd0aCk7XG4gIG5ldyBVaW50OEFycmF5KHJlc3VsdCkuc2V0KG5ldyBVaW50OEFycmF5KGFycmF5QnVmZmVyKSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVBcnJheUJ1ZmZlcjtcbiIsICJ2YXIgY2xvbmVBcnJheUJ1ZmZlciA9IHJlcXVpcmUoJy4vX2Nsb25lQXJyYXlCdWZmZXInKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYGRhdGFWaWV3YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IGRhdGFWaWV3IFRoZSBkYXRhIHZpZXcgdG8gY2xvbmUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0RlZXBdIFNwZWNpZnkgYSBkZWVwIGNsb25lLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2xvbmVkIGRhdGEgdmlldy5cbiAqL1xuZnVuY3Rpb24gY2xvbmVEYXRhVmlldyhkYXRhVmlldywgaXNEZWVwKSB7XG4gIHZhciBidWZmZXIgPSBpc0RlZXAgPyBjbG9uZUFycmF5QnVmZmVyKGRhdGFWaWV3LmJ1ZmZlcikgOiBkYXRhVmlldy5idWZmZXI7XG4gIHJldHVybiBuZXcgZGF0YVZpZXcuY29uc3RydWN0b3IoYnVmZmVyLCBkYXRhVmlldy5ieXRlT2Zmc2V0LCBkYXRhVmlldy5ieXRlTGVuZ3RoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZURhdGFWaWV3O1xuIiwgIi8qKiBVc2VkIHRvIG1hdGNoIGBSZWdFeHBgIGZsYWdzIGZyb20gdGhlaXIgY29lcmNlZCBzdHJpbmcgdmFsdWVzLiAqL1xudmFyIHJlRmxhZ3MgPSAvXFx3KiQvO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgcmVnZXhwYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHJlZ2V4cCBUaGUgcmVnZXhwIHRvIGNsb25lLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2xvbmVkIHJlZ2V4cC5cbiAqL1xuZnVuY3Rpb24gY2xvbmVSZWdFeHAocmVnZXhwKSB7XG4gIHZhciByZXN1bHQgPSBuZXcgcmVnZXhwLmNvbnN0cnVjdG9yKHJlZ2V4cC5zb3VyY2UsIHJlRmxhZ3MuZXhlYyhyZWdleHApKTtcbiAgcmVzdWx0Lmxhc3RJbmRleCA9IHJlZ2V4cC5sYXN0SW5kZXg7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVSZWdFeHA7XG4iLCAidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpO1xuXG4vKiogVXNlZCB0byBjb252ZXJ0IHN5bWJvbHMgdG8gcHJpbWl0aXZlcyBhbmQgc3RyaW5ncy4gKi9cbnZhciBzeW1ib2xQcm90byA9IFN5bWJvbCA/IFN5bWJvbC5wcm90b3R5cGUgOiB1bmRlZmluZWQsXG4gICAgc3ltYm9sVmFsdWVPZiA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udmFsdWVPZiA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhlIGBzeW1ib2xgIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHN5bWJvbCBUaGUgc3ltYm9sIG9iamVjdCB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCBzeW1ib2wgb2JqZWN0LlxuICovXG5mdW5jdGlvbiBjbG9uZVN5bWJvbChzeW1ib2wpIHtcbiAgcmV0dXJuIHN5bWJvbFZhbHVlT2YgPyBPYmplY3Qoc3ltYm9sVmFsdWVPZi5jYWxsKHN5bWJvbCkpIDoge307XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVTeW1ib2w7XG4iLCAidmFyIGNsb25lQXJyYXlCdWZmZXIgPSByZXF1aXJlKCcuL19jbG9uZUFycmF5QnVmZmVyJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIGB0eXBlZEFycmF5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHR5cGVkQXJyYXkgVGhlIHR5cGVkIGFycmF5IHRvIGNsb25lLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBTcGVjaWZ5IGEgZGVlcCBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCB0eXBlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gY2xvbmVUeXBlZEFycmF5KHR5cGVkQXJyYXksIGlzRGVlcCkge1xuICB2YXIgYnVmZmVyID0gaXNEZWVwID8gY2xvbmVBcnJheUJ1ZmZlcih0eXBlZEFycmF5LmJ1ZmZlcikgOiB0eXBlZEFycmF5LmJ1ZmZlcjtcbiAgcmV0dXJuIG5ldyB0eXBlZEFycmF5LmNvbnN0cnVjdG9yKGJ1ZmZlciwgdHlwZWRBcnJheS5ieXRlT2Zmc2V0LCB0eXBlZEFycmF5Lmxlbmd0aCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVUeXBlZEFycmF5O1xuIiwgInZhciBjbG9uZUFycmF5QnVmZmVyID0gcmVxdWlyZSgnLi9fY2xvbmVBcnJheUJ1ZmZlcicpLFxuICAgIGNsb25lRGF0YVZpZXcgPSByZXF1aXJlKCcuL19jbG9uZURhdGFWaWV3JyksXG4gICAgY2xvbmVSZWdFeHAgPSByZXF1aXJlKCcuL19jbG9uZVJlZ0V4cCcpLFxuICAgIGNsb25lU3ltYm9sID0gcmVxdWlyZSgnLi9fY2xvbmVTeW1ib2wnKSxcbiAgICBjbG9uZVR5cGVkQXJyYXkgPSByZXF1aXJlKCcuL19jbG9uZVR5cGVkQXJyYXknKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJyxcbiAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJyxcbiAgICBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XScsXG4gICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgIGZsb2F0NjRUYWcgPSAnW29iamVjdCBGbG9hdDY0QXJyYXldJyxcbiAgICBpbnQ4VGFnID0gJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgaW50MzJUYWcgPSAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgdWludDhUYWcgPSAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICB1aW50MTZUYWcgPSAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgIHVpbnQzMlRhZyA9ICdbb2JqZWN0IFVpbnQzMkFycmF5XSc7XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgYW4gb2JqZWN0IGNsb25lIGJhc2VkIG9uIGl0cyBgdG9TdHJpbmdUYWdgLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIGZ1bmN0aW9uIG9ubHkgc3VwcG9ydHMgY2xvbmluZyB2YWx1ZXMgd2l0aCB0YWdzIG9mXG4gKiBgQm9vbGVhbmAsIGBEYXRlYCwgYEVycm9yYCwgYE1hcGAsIGBOdW1iZXJgLCBgUmVnRXhwYCwgYFNldGAsIG9yIGBTdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY2xvbmUuXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFnIFRoZSBgdG9TdHJpbmdUYWdgIG9mIHRoZSBvYmplY3QgdG8gY2xvbmUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0RlZXBdIFNwZWNpZnkgYSBkZWVwIGNsb25lLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaW5pdGlhbGl6ZWQgY2xvbmUuXG4gKi9cbmZ1bmN0aW9uIGluaXRDbG9uZUJ5VGFnKG9iamVjdCwgdGFnLCBpc0RlZXApIHtcbiAgdmFyIEN0b3IgPSBvYmplY3QuY29uc3RydWN0b3I7XG4gIHN3aXRjaCAodGFnKSB7XG4gICAgY2FzZSBhcnJheUJ1ZmZlclRhZzpcbiAgICAgIHJldHVybiBjbG9uZUFycmF5QnVmZmVyKG9iamVjdCk7XG5cbiAgICBjYXNlIGJvb2xUYWc6XG4gICAgY2FzZSBkYXRlVGFnOlxuICAgICAgcmV0dXJuIG5ldyBDdG9yKCtvYmplY3QpO1xuXG4gICAgY2FzZSBkYXRhVmlld1RhZzpcbiAgICAgIHJldHVybiBjbG9uZURhdGFWaWV3KG9iamVjdCwgaXNEZWVwKTtcblxuICAgIGNhc2UgZmxvYXQzMlRhZzogY2FzZSBmbG9hdDY0VGFnOlxuICAgIGNhc2UgaW50OFRhZzogY2FzZSBpbnQxNlRhZzogY2FzZSBpbnQzMlRhZzpcbiAgICBjYXNlIHVpbnQ4VGFnOiBjYXNlIHVpbnQ4Q2xhbXBlZFRhZzogY2FzZSB1aW50MTZUYWc6IGNhc2UgdWludDMyVGFnOlxuICAgICAgcmV0dXJuIGNsb25lVHlwZWRBcnJheShvYmplY3QsIGlzRGVlcCk7XG5cbiAgICBjYXNlIG1hcFRhZzpcbiAgICAgIHJldHVybiBuZXcgQ3RvcjtcblxuICAgIGNhc2UgbnVtYmVyVGFnOlxuICAgIGNhc2Ugc3RyaW5nVGFnOlxuICAgICAgcmV0dXJuIG5ldyBDdG9yKG9iamVjdCk7XG5cbiAgICBjYXNlIHJlZ2V4cFRhZzpcbiAgICAgIHJldHVybiBjbG9uZVJlZ0V4cChvYmplY3QpO1xuXG4gICAgY2FzZSBzZXRUYWc6XG4gICAgICByZXR1cm4gbmV3IEN0b3I7XG5cbiAgICBjYXNlIHN5bWJvbFRhZzpcbiAgICAgIHJldHVybiBjbG9uZVN5bWJvbChvYmplY3QpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaW5pdENsb25lQnlUYWc7XG4iLCAidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RDcmVhdGUgPSBPYmplY3QuY3JlYXRlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmNyZWF0ZWAgd2l0aG91dCBzdXBwb3J0IGZvciBhc3NpZ25pbmdcbiAqIHByb3BlcnRpZXMgdG8gdGhlIGNyZWF0ZWQgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvdG8gVGhlIG9iamVjdCB0byBpbmhlcml0IGZyb20uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICovXG52YXIgYmFzZUNyZWF0ZSA9IChmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gb2JqZWN0KCkge31cbiAgcmV0dXJuIGZ1bmN0aW9uKHByb3RvKSB7XG4gICAgaWYgKCFpc09iamVjdChwcm90bykpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgaWYgKG9iamVjdENyZWF0ZSkge1xuICAgICAgcmV0dXJuIG9iamVjdENyZWF0ZShwcm90byk7XG4gICAgfVxuICAgIG9iamVjdC5wcm90b3R5cGUgPSBwcm90bztcbiAgICB2YXIgcmVzdWx0ID0gbmV3IG9iamVjdDtcbiAgICBvYmplY3QucHJvdG90eXBlID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59KCkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VDcmVhdGU7XG4iLCAidmFyIGJhc2VDcmVhdGUgPSByZXF1aXJlKCcuL19iYXNlQ3JlYXRlJyksXG4gICAgZ2V0UHJvdG90eXBlID0gcmVxdWlyZSgnLi9fZ2V0UHJvdG90eXBlJyksXG4gICAgaXNQcm90b3R5cGUgPSByZXF1aXJlKCcuL19pc1Byb3RvdHlwZScpO1xuXG4vKipcbiAqIEluaXRpYWxpemVzIGFuIG9iamVjdCBjbG9uZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNsb25lLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaW5pdGlhbGl6ZWQgY2xvbmUuXG4gKi9cbmZ1bmN0aW9uIGluaXRDbG9uZU9iamVjdChvYmplY3QpIHtcbiAgcmV0dXJuICh0eXBlb2Ygb2JqZWN0LmNvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgIWlzUHJvdG90eXBlKG9iamVjdCkpXG4gICAgPyBiYXNlQ3JlYXRlKGdldFByb3RvdHlwZShvYmplY3QpKVxuICAgIDoge307XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaW5pdENsb25lT2JqZWN0O1xuIiwgInZhciBnZXRUYWcgPSByZXF1aXJlKCcuL19nZXRUYWcnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbWFwVGFnID0gJ1tvYmplY3QgTWFwXSc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNNYXBgIHdpdGhvdXQgTm9kZS5qcyBvcHRpbWl6YXRpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbWFwLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc01hcCh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBnZXRUYWcodmFsdWUpID09IG1hcFRhZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNNYXA7XG4iLCAidmFyIGJhc2VJc01hcCA9IHJlcXVpcmUoJy4vX2Jhc2VJc01hcCcpLFxuICAgIGJhc2VVbmFyeSA9IHJlcXVpcmUoJy4vX2Jhc2VVbmFyeScpLFxuICAgIG5vZGVVdGlsID0gcmVxdWlyZSgnLi9fbm9kZVV0aWwnKTtcblxuLyogTm9kZS5qcyBoZWxwZXIgcmVmZXJlbmNlcy4gKi9cbnZhciBub2RlSXNNYXAgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc01hcDtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYE1hcGAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4zLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbWFwLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNNYXAobmV3IE1hcCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc01hcChuZXcgV2Vha01hcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNNYXAgPSBub2RlSXNNYXAgPyBiYXNlVW5hcnkobm9kZUlzTWFwKSA6IGJhc2VJc01hcDtcblxubW9kdWxlLmV4cG9ydHMgPSBpc01hcDtcbiIsICJ2YXIgZ2V0VGFnID0gcmVxdWlyZSgnLi9fZ2V0VGFnJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzU2V0YCB3aXRob3V0IE5vZGUuanMgb3B0aW1pemF0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHNldCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNTZXQodmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgZ2V0VGFnKHZhbHVlKSA9PSBzZXRUYWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzU2V0O1xuIiwgInZhciBiYXNlSXNTZXQgPSByZXF1aXJlKCcuL19iYXNlSXNTZXQnKSxcbiAgICBiYXNlVW5hcnkgPSByZXF1aXJlKCcuL19iYXNlVW5hcnknKSxcbiAgICBub2RlVXRpbCA9IHJlcXVpcmUoJy4vX25vZGVVdGlsJyk7XG5cbi8qIE5vZGUuanMgaGVscGVyIHJlZmVyZW5jZXMuICovXG52YXIgbm9kZUlzU2V0ID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNTZXQ7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBTZXRgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMy4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHNldCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzU2V0KG5ldyBTZXQpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNTZXQobmV3IFdlYWtTZXQpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzU2V0ID0gbm9kZUlzU2V0ID8gYmFzZVVuYXJ5KG5vZGVJc1NldCkgOiBiYXNlSXNTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNTZXQ7XG4iLCAidmFyIFN0YWNrID0gcmVxdWlyZSgnLi9fU3RhY2snKSxcbiAgICBhcnJheUVhY2ggPSByZXF1aXJlKCcuL19hcnJheUVhY2gnKSxcbiAgICBhc3NpZ25WYWx1ZSA9IHJlcXVpcmUoJy4vX2Fzc2lnblZhbHVlJyksXG4gICAgYmFzZUFzc2lnbiA9IHJlcXVpcmUoJy4vX2Jhc2VBc3NpZ24nKSxcbiAgICBiYXNlQXNzaWduSW4gPSByZXF1aXJlKCcuL19iYXNlQXNzaWduSW4nKSxcbiAgICBjbG9uZUJ1ZmZlciA9IHJlcXVpcmUoJy4vX2Nsb25lQnVmZmVyJyksXG4gICAgY29weUFycmF5ID0gcmVxdWlyZSgnLi9fY29weUFycmF5JyksXG4gICAgY29weVN5bWJvbHMgPSByZXF1aXJlKCcuL19jb3B5U3ltYm9scycpLFxuICAgIGNvcHlTeW1ib2xzSW4gPSByZXF1aXJlKCcuL19jb3B5U3ltYm9sc0luJyksXG4gICAgZ2V0QWxsS2V5cyA9IHJlcXVpcmUoJy4vX2dldEFsbEtleXMnKSxcbiAgICBnZXRBbGxLZXlzSW4gPSByZXF1aXJlKCcuL19nZXRBbGxLZXlzSW4nKSxcbiAgICBnZXRUYWcgPSByZXF1aXJlKCcuL19nZXRUYWcnKSxcbiAgICBpbml0Q2xvbmVBcnJheSA9IHJlcXVpcmUoJy4vX2luaXRDbG9uZUFycmF5JyksXG4gICAgaW5pdENsb25lQnlUYWcgPSByZXF1aXJlKCcuL19pbml0Q2xvbmVCeVRhZycpLFxuICAgIGluaXRDbG9uZU9iamVjdCA9IHJlcXVpcmUoJy4vX2luaXRDbG9uZU9iamVjdCcpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0J1ZmZlciA9IHJlcXVpcmUoJy4vaXNCdWZmZXInKSxcbiAgICBpc01hcCA9IHJlcXVpcmUoJy4vaXNNYXAnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKSxcbiAgICBpc1NldCA9IHJlcXVpcmUoJy4vaXNTZXQnKSxcbiAgICBrZXlzID0gcmVxdWlyZSgnLi9rZXlzJyksXG4gICAga2V5c0luID0gcmVxdWlyZSgnLi9rZXlzSW4nKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgY2xvbmluZy4gKi9cbnZhciBDTE9ORV9ERUVQX0ZMQUcgPSAxLFxuICAgIENMT05FX0ZMQVRfRkxBRyA9IDIsXG4gICAgQ0xPTkVfU1lNQk9MU19GTEFHID0gNDtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJyxcbiAgICBhcnJheVRhZyA9ICdbb2JqZWN0IEFycmF5XScsXG4gICAgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJyxcbiAgICBkYXRlVGFnID0gJ1tvYmplY3QgRGF0ZV0nLFxuICAgIGVycm9yVGFnID0gJ1tvYmplY3QgRXJyb3JdJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBnZW5UYWcgPSAnW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0nLFxuICAgIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG51bWJlclRhZyA9ICdbb2JqZWN0IE51bWJlcl0nLFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nLFxuICAgIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nLFxuICAgIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nLFxuICAgIHdlYWtNYXBUYWcgPSAnW29iamVjdCBXZWFrTWFwXSc7XG5cbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXG4gICAgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nLFxuICAgIGZsb2F0MzJUYWcgPSAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICBmbG9hdDY0VGFnID0gJ1tvYmplY3QgRmxvYXQ2NEFycmF5XScsXG4gICAgaW50OFRhZyA9ICdbb2JqZWN0IEludDhBcnJheV0nLFxuICAgIGludDE2VGFnID0gJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgIGludDMyVGFnID0gJ1tvYmplY3QgSW50MzJBcnJheV0nLFxuICAgIHVpbnQ4VGFnID0gJ1tvYmplY3QgVWludDhBcnJheV0nLFxuICAgIHVpbnQ4Q2xhbXBlZFRhZyA9ICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXG4gICAgdWludDE2VGFnID0gJ1tvYmplY3QgVWludDE2QXJyYXldJyxcbiAgICB1aW50MzJUYWcgPSAnW29iamVjdCBVaW50MzJBcnJheV0nO1xuXG4vKiogVXNlZCB0byBpZGVudGlmeSBgdG9TdHJpbmdUYWdgIHZhbHVlcyBzdXBwb3J0ZWQgYnkgYF8uY2xvbmVgLiAqL1xudmFyIGNsb25lYWJsZVRhZ3MgPSB7fTtcbmNsb25lYWJsZVRhZ3NbYXJnc1RhZ10gPSBjbG9uZWFibGVUYWdzW2FycmF5VGFnXSA9XG5jbG9uZWFibGVUYWdzW2FycmF5QnVmZmVyVGFnXSA9IGNsb25lYWJsZVRhZ3NbZGF0YVZpZXdUYWddID1cbmNsb25lYWJsZVRhZ3NbYm9vbFRhZ10gPSBjbG9uZWFibGVUYWdzW2RhdGVUYWddID1cbmNsb25lYWJsZVRhZ3NbZmxvYXQzMlRhZ10gPSBjbG9uZWFibGVUYWdzW2Zsb2F0NjRUYWddID1cbmNsb25lYWJsZVRhZ3NbaW50OFRhZ10gPSBjbG9uZWFibGVUYWdzW2ludDE2VGFnXSA9XG5jbG9uZWFibGVUYWdzW2ludDMyVGFnXSA9IGNsb25lYWJsZVRhZ3NbbWFwVGFnXSA9XG5jbG9uZWFibGVUYWdzW251bWJlclRhZ10gPSBjbG9uZWFibGVUYWdzW29iamVjdFRhZ10gPVxuY2xvbmVhYmxlVGFnc1tyZWdleHBUYWddID0gY2xvbmVhYmxlVGFnc1tzZXRUYWddID1cbmNsb25lYWJsZVRhZ3Nbc3RyaW5nVGFnXSA9IGNsb25lYWJsZVRhZ3Nbc3ltYm9sVGFnXSA9XG5jbG9uZWFibGVUYWdzW3VpbnQ4VGFnXSA9IGNsb25lYWJsZVRhZ3NbdWludDhDbGFtcGVkVGFnXSA9XG5jbG9uZWFibGVUYWdzW3VpbnQxNlRhZ10gPSBjbG9uZWFibGVUYWdzW3VpbnQzMlRhZ10gPSB0cnVlO1xuY2xvbmVhYmxlVGFnc1tlcnJvclRhZ10gPSBjbG9uZWFibGVUYWdzW2Z1bmNUYWddID1cbmNsb25lYWJsZVRhZ3Nbd2Vha01hcFRhZ10gPSBmYWxzZTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5jbG9uZWAgYW5kIGBfLmNsb25lRGVlcGAgd2hpY2ggdHJhY2tzXG4gKiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2xvbmUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuXG4gKiAgMSAtIERlZXAgY2xvbmVcbiAqICAyIC0gRmxhdHRlbiBpbmhlcml0ZWQgcHJvcGVydGllc1xuICogIDQgLSBDbG9uZSBzeW1ib2xzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjbG9uaW5nLlxuICogQHBhcmFtIHtzdHJpbmd9IFtrZXldIFRoZSBrZXkgb2YgYHZhbHVlYC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgcGFyZW50IG9iamVjdCBvZiBgdmFsdWVgLlxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzIGFuZCB0aGVpciBjbG9uZSBjb3VudGVycGFydHMuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgY2xvbmVkIHZhbHVlLlxuICovXG5mdW5jdGlvbiBiYXNlQ2xvbmUodmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGtleSwgb2JqZWN0LCBzdGFjaykge1xuICB2YXIgcmVzdWx0LFxuICAgICAgaXNEZWVwID0gYml0bWFzayAmIENMT05FX0RFRVBfRkxBRyxcbiAgICAgIGlzRmxhdCA9IGJpdG1hc2sgJiBDTE9ORV9GTEFUX0ZMQUcsXG4gICAgICBpc0Z1bGwgPSBiaXRtYXNrICYgQ0xPTkVfU1lNQk9MU19GTEFHO1xuXG4gIGlmIChjdXN0b21pemVyKSB7XG4gICAgcmVzdWx0ID0gb2JqZWN0ID8gY3VzdG9taXplcih2YWx1ZSwga2V5LCBvYmplY3QsIHN0YWNrKSA6IGN1c3RvbWl6ZXIodmFsdWUpO1xuICB9XG4gIGlmIChyZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgdmFyIGlzQXJyID0gaXNBcnJheSh2YWx1ZSk7XG4gIGlmIChpc0Fycikge1xuICAgIHJlc3VsdCA9IGluaXRDbG9uZUFycmF5KHZhbHVlKTtcbiAgICBpZiAoIWlzRGVlcCkge1xuICAgICAgcmV0dXJuIGNvcHlBcnJheSh2YWx1ZSwgcmVzdWx0KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIHRhZyA9IGdldFRhZyh2YWx1ZSksXG4gICAgICAgIGlzRnVuYyA9IHRhZyA9PSBmdW5jVGFnIHx8IHRhZyA9PSBnZW5UYWc7XG5cbiAgICBpZiAoaXNCdWZmZXIodmFsdWUpKSB7XG4gICAgICByZXR1cm4gY2xvbmVCdWZmZXIodmFsdWUsIGlzRGVlcCk7XG4gICAgfVxuICAgIGlmICh0YWcgPT0gb2JqZWN0VGFnIHx8IHRhZyA9PSBhcmdzVGFnIHx8IChpc0Z1bmMgJiYgIW9iamVjdCkpIHtcbiAgICAgIHJlc3VsdCA9IChpc0ZsYXQgfHwgaXNGdW5jKSA/IHt9IDogaW5pdENsb25lT2JqZWN0KHZhbHVlKTtcbiAgICAgIGlmICghaXNEZWVwKSB7XG4gICAgICAgIHJldHVybiBpc0ZsYXRcbiAgICAgICAgICA/IGNvcHlTeW1ib2xzSW4odmFsdWUsIGJhc2VBc3NpZ25JbihyZXN1bHQsIHZhbHVlKSlcbiAgICAgICAgICA6IGNvcHlTeW1ib2xzKHZhbHVlLCBiYXNlQXNzaWduKHJlc3VsdCwgdmFsdWUpKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFjbG9uZWFibGVUYWdzW3RhZ10pIHtcbiAgICAgICAgcmV0dXJuIG9iamVjdCA/IHZhbHVlIDoge307XG4gICAgICB9XG4gICAgICByZXN1bHQgPSBpbml0Q2xvbmVCeVRhZyh2YWx1ZSwgdGFnLCBpc0RlZXApO1xuICAgIH1cbiAgfVxuICAvLyBDaGVjayBmb3IgY2lyY3VsYXIgcmVmZXJlbmNlcyBhbmQgcmV0dXJuIGl0cyBjb3JyZXNwb25kaW5nIGNsb25lLlxuICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgU3RhY2spO1xuICB2YXIgc3RhY2tlZCA9IHN0YWNrLmdldCh2YWx1ZSk7XG4gIGlmIChzdGFja2VkKSB7XG4gICAgcmV0dXJuIHN0YWNrZWQ7XG4gIH1cbiAgc3RhY2suc2V0KHZhbHVlLCByZXN1bHQpO1xuXG4gIGlmIChpc1NldCh2YWx1ZSkpIHtcbiAgICB2YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uKHN1YlZhbHVlKSB7XG4gICAgICByZXN1bHQuYWRkKGJhc2VDbG9uZShzdWJWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3ViVmFsdWUsIHZhbHVlLCBzdGFjaykpO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKGlzTWFwKHZhbHVlKSkge1xuICAgIHZhbHVlLmZvckVhY2goZnVuY3Rpb24oc3ViVmFsdWUsIGtleSkge1xuICAgICAgcmVzdWx0LnNldChrZXksIGJhc2VDbG9uZShzdWJWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwga2V5LCB2YWx1ZSwgc3RhY2spKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhciBrZXlzRnVuYyA9IGlzRnVsbFxuICAgID8gKGlzRmxhdCA/IGdldEFsbEtleXNJbiA6IGdldEFsbEtleXMpXG4gICAgOiAoaXNGbGF0ID8ga2V5c0luIDoga2V5cyk7XG5cbiAgdmFyIHByb3BzID0gaXNBcnIgPyB1bmRlZmluZWQgOiBrZXlzRnVuYyh2YWx1ZSk7XG4gIGFycmF5RWFjaChwcm9wcyB8fCB2YWx1ZSwgZnVuY3Rpb24oc3ViVmFsdWUsIGtleSkge1xuICAgIGlmIChwcm9wcykge1xuICAgICAga2V5ID0gc3ViVmFsdWU7XG4gICAgICBzdWJWYWx1ZSA9IHZhbHVlW2tleV07XG4gICAgfVxuICAgIC8vIFJlY3Vyc2l2ZWx5IHBvcHVsYXRlIGNsb25lIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgYXNzaWduVmFsdWUocmVzdWx0LCBrZXksIGJhc2VDbG9uZShzdWJWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwga2V5LCB2YWx1ZSwgc3RhY2spKTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUNsb25lO1xuIiwgIi8qKlxuICogR2V0cyB0aGUgbGFzdCBlbGVtZW50IG9mIGBhcnJheWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbGFzdCBlbGVtZW50IG9mIGBhcnJheWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8ubGFzdChbMSwgMiwgM10pO1xuICogLy8gPT4gM1xuICovXG5mdW5jdGlvbiBsYXN0KGFycmF5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgcmV0dXJuIGxlbmd0aCA/IGFycmF5W2xlbmd0aCAtIDFdIDogdW5kZWZpbmVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxhc3Q7XG4iLCAiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zbGljZWAgd2l0aG91dCBhbiBpdGVyYXRlZSBjYWxsIGd1YXJkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gc2xpY2UuXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PTBdIFRoZSBzdGFydCBwb3NpdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbZW5kPWFycmF5Lmxlbmd0aF0gVGhlIGVuZCBwb3NpdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2YgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gYmFzZVNsaWNlKGFycmF5LCBzdGFydCwgZW5kKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGlmIChzdGFydCA8IDApIHtcbiAgICBzdGFydCA9IC1zdGFydCA+IGxlbmd0aCA/IDAgOiAobGVuZ3RoICsgc3RhcnQpO1xuICB9XG4gIGVuZCA9IGVuZCA+IGxlbmd0aCA/IGxlbmd0aCA6IGVuZDtcbiAgaWYgKGVuZCA8IDApIHtcbiAgICBlbmQgKz0gbGVuZ3RoO1xuICB9XG4gIGxlbmd0aCA9IHN0YXJ0ID4gZW5kID8gMCA6ICgoZW5kIC0gc3RhcnQpID4+PiAwKTtcbiAgc3RhcnQgPj4+PSAwO1xuXG4gIHZhciByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHJlc3VsdFtpbmRleF0gPSBhcnJheVtpbmRleCArIHN0YXJ0XTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VTbGljZTtcbiIsICJ2YXIgYmFzZUdldCA9IHJlcXVpcmUoJy4vX2Jhc2VHZXQnKSxcbiAgICBiYXNlU2xpY2UgPSByZXF1aXJlKCcuL19iYXNlU2xpY2UnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBwYXJlbnQgdmFsdWUgYXQgYHBhdGhgIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fSBwYXRoIFRoZSBwYXRoIHRvIGdldCB0aGUgcGFyZW50IHZhbHVlIG9mLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHBhcmVudCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gcGFyZW50KG9iamVjdCwgcGF0aCkge1xuICByZXR1cm4gcGF0aC5sZW5ndGggPCAyID8gb2JqZWN0IDogYmFzZUdldChvYmplY3QsIGJhc2VTbGljZShwYXRoLCAwLCAtMSkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJ2YXIgY2FzdFBhdGggPSByZXF1aXJlKCcuL19jYXN0UGF0aCcpLFxuICAgIGxhc3QgPSByZXF1aXJlKCcuL2xhc3QnKSxcbiAgICBwYXJlbnQgPSByZXF1aXJlKCcuL19wYXJlbnQnKSxcbiAgICB0b0tleSA9IHJlcXVpcmUoJy4vX3RvS2V5Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udW5zZXRgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHByb3BlcnR5IHBhdGggdG8gdW5zZXQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHByb3BlcnR5IGlzIGRlbGV0ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZVVuc2V0KG9iamVjdCwgcGF0aCkge1xuICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcbiAgb2JqZWN0ID0gcGFyZW50KG9iamVjdCwgcGF0aCk7XG4gIHJldHVybiBvYmplY3QgPT0gbnVsbCB8fCBkZWxldGUgb2JqZWN0W3RvS2V5KGxhc3QocGF0aCkpXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVW5zZXQ7XG4iLCAidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgZ2V0UHJvdG90eXBlID0gcmVxdWlyZSgnLi9fZ2V0UHJvdG90eXBlJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxuICAgIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIFVzZWQgdG8gaW5mZXIgdGhlIGBPYmplY3RgIGNvbnN0cnVjdG9yLiAqL1xudmFyIG9iamVjdEN0b3JTdHJpbmcgPSBmdW5jVG9TdHJpbmcuY2FsbChPYmplY3QpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcGxhaW4gb2JqZWN0LCB0aGF0IGlzLCBhbiBvYmplY3QgY3JlYXRlZCBieSB0aGVcbiAqIGBPYmplY3RgIGNvbnN0cnVjdG9yIG9yIG9uZSB3aXRoIGEgYFtbUHJvdG90eXBlXV1gIG9mIGBudWxsYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuOC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHBsYWluIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiB9XG4gKlxuICogXy5pc1BsYWluT2JqZWN0KG5ldyBGb28pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KHsgJ3gnOiAwLCAneSc6IDAgfSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KE9iamVjdC5jcmVhdGUobnVsbCkpO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3RMaWtlKHZhbHVlKSB8fCBiYXNlR2V0VGFnKHZhbHVlKSAhPSBvYmplY3RUYWcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHByb3RvID0gZ2V0UHJvdG90eXBlKHZhbHVlKTtcbiAgaWYgKHByb3RvID09PSBudWxsKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgdmFyIEN0b3IgPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3RvLCAnY29uc3RydWN0b3InKSAmJiBwcm90by5jb25zdHJ1Y3RvcjtcbiAgcmV0dXJuIHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3RvciBpbnN0YW5jZW9mIEN0b3IgJiZcbiAgICBmdW5jVG9TdHJpbmcuY2FsbChDdG9yKSA9PSBvYmplY3RDdG9yU3RyaW5nO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzUGxhaW5PYmplY3Q7XG4iLCAidmFyIGlzUGxhaW5PYmplY3QgPSByZXF1aXJlKCcuL2lzUGxhaW5PYmplY3QnKTtcblxuLyoqXG4gKiBVc2VkIGJ5IGBfLm9taXRgIHRvIGN1c3RvbWl6ZSBpdHMgYF8uY2xvbmVEZWVwYCB1c2UgdG8gb25seSBjbG9uZSBwbGFpblxuICogb2JqZWN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSB1bmNsb25lZCB2YWx1ZSBvciBgdW5kZWZpbmVkYCB0byBkZWZlciBjbG9uaW5nIHRvIGBfLmNsb25lRGVlcGAuXG4gKi9cbmZ1bmN0aW9uIGN1c3RvbU9taXRDbG9uZSh2YWx1ZSkge1xuICByZXR1cm4gaXNQbGFpbk9iamVjdCh2YWx1ZSkgPyB1bmRlZmluZWQgOiB2YWx1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjdXN0b21PbWl0Q2xvbmU7XG4iLCAidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpLFxuICAgIGlzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9pc0FyZ3VtZW50cycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ByZWFkYWJsZVN5bWJvbCA9IFN5bWJvbCA/IFN5bWJvbC5pc0NvbmNhdFNwcmVhZGFibGUgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBmbGF0dGVuYWJsZSBgYXJndW1lbnRzYCBvYmplY3Qgb3IgYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgZmxhdHRlbmFibGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNGbGF0dGVuYWJsZSh2YWx1ZSkge1xuICByZXR1cm4gaXNBcnJheSh2YWx1ZSkgfHwgaXNBcmd1bWVudHModmFsdWUpIHx8XG4gICAgISEoc3ByZWFkYWJsZVN5bWJvbCAmJiB2YWx1ZSAmJiB2YWx1ZVtzcHJlYWRhYmxlU3ltYm9sXSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGbGF0dGVuYWJsZTtcbiIsICJ2YXIgYXJyYXlQdXNoID0gcmVxdWlyZSgnLi9fYXJyYXlQdXNoJyksXG4gICAgaXNGbGF0dGVuYWJsZSA9IHJlcXVpcmUoJy4vX2lzRmxhdHRlbmFibGUnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mbGF0dGVuYCB3aXRoIHN1cHBvcnQgZm9yIHJlc3RyaWN0aW5nIGZsYXR0ZW5pbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBmbGF0dGVuLlxuICogQHBhcmFtIHtudW1iZXJ9IGRlcHRoIFRoZSBtYXhpbXVtIHJlY3Vyc2lvbiBkZXB0aC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3ByZWRpY2F0ZT1pc0ZsYXR0ZW5hYmxlXSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNTdHJpY3RdIFJlc3RyaWN0IHRvIHZhbHVlcyB0aGF0IHBhc3MgYHByZWRpY2F0ZWAgY2hlY2tzLlxuICogQHBhcmFtIHtBcnJheX0gW3Jlc3VsdD1bXV0gVGhlIGluaXRpYWwgcmVzdWx0IHZhbHVlLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmxhdHRlbmVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBiYXNlRmxhdHRlbihhcnJheSwgZGVwdGgsIHByZWRpY2F0ZSwgaXNTdHJpY3QsIHJlc3VsdCkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBwcmVkaWNhdGUgfHwgKHByZWRpY2F0ZSA9IGlzRmxhdHRlbmFibGUpO1xuICByZXN1bHQgfHwgKHJlc3VsdCA9IFtdKTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTtcbiAgICBpZiAoZGVwdGggPiAwICYmIHByZWRpY2F0ZSh2YWx1ZSkpIHtcbiAgICAgIGlmIChkZXB0aCA+IDEpIHtcbiAgICAgICAgLy8gUmVjdXJzaXZlbHkgZmxhdHRlbiBhcnJheXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICAgICAgYmFzZUZsYXR0ZW4odmFsdWUsIGRlcHRoIC0gMSwgcHJlZGljYXRlLCBpc1N0cmljdCwgcmVzdWx0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFycmF5UHVzaChyZXN1bHQsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFpc1N0cmljdCkge1xuICAgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGhdID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUZsYXR0ZW47XG4iLCAidmFyIGJhc2VGbGF0dGVuID0gcmVxdWlyZSgnLi9fYmFzZUZsYXR0ZW4nKTtcblxuLyoqXG4gKiBGbGF0dGVucyBgYXJyYXlgIGEgc2luZ2xlIGxldmVsIGRlZXAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gZmxhdHRlbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZsYXR0ZW5lZCBhcnJheS5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5mbGF0dGVuKFsxLCBbMiwgWzMsIFs0XV0sIDVdXSk7XG4gKiAvLyA9PiBbMSwgMiwgWzMsIFs0XV0sIDVdXG4gKi9cbmZ1bmN0aW9uIGZsYXR0ZW4oYXJyYXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICByZXR1cm4gbGVuZ3RoID8gYmFzZUZsYXR0ZW4oYXJyYXksIDEpIDogW107XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZmxhdHRlbjtcbiIsICIvKipcbiAqIEEgZmFzdGVyIGFsdGVybmF0aXZlIHRvIGBGdW5jdGlvbiNhcHBseWAsIHRoaXMgZnVuY3Rpb24gaW52b2tlcyBgZnVuY2BcbiAqIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIGB0aGlzQXJnYCBhbmQgdGhlIGFyZ3VtZW50cyBvZiBgYXJnc2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGludm9rZS5cbiAqIEBwYXJhbSB7Kn0gdGhpc0FyZyBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICogQHBhcmFtIHtBcnJheX0gYXJncyBUaGUgYXJndW1lbnRzIHRvIGludm9rZSBgZnVuY2Agd2l0aC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXN1bHQgb2YgYGZ1bmNgLlxuICovXG5mdW5jdGlvbiBhcHBseShmdW5jLCB0aGlzQXJnLCBhcmdzKSB7XG4gIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICBjYXNlIDA6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZyk7XG4gICAgY2FzZSAxOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0pO1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gIH1cbiAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpc0FyZywgYXJncyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXBwbHk7XG4iLCAidmFyIGFwcGx5ID0gcmVxdWlyZSgnLi9fYXBwbHknKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU1heCA9IE1hdGgubWF4O1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZVJlc3RgIHdoaWNoIHRyYW5zZm9ybXMgdGhlIHJlc3QgYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PWZ1bmMubGVuZ3RoLTFdIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgcmVzdCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2Zvcm0gVGhlIHJlc3QgYXJyYXkgdHJhbnNmb3JtLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG92ZXJSZXN0KGZ1bmMsIHN0YXJ0LCB0cmFuc2Zvcm0pIHtcbiAgc3RhcnQgPSBuYXRpdmVNYXgoc3RhcnQgPT09IHVuZGVmaW5lZCA/IChmdW5jLmxlbmd0aCAtIDEpIDogc3RhcnQsIDApO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IG5hdGl2ZU1heChhcmdzLmxlbmd0aCAtIHN0YXJ0LCAwKSxcbiAgICAgICAgYXJyYXkgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGFycmF5W2luZGV4XSA9IGFyZ3Nbc3RhcnQgKyBpbmRleF07XG4gICAgfVxuICAgIGluZGV4ID0gLTE7XG4gICAgdmFyIG90aGVyQXJncyA9IEFycmF5KHN0YXJ0ICsgMSk7XG4gICAgd2hpbGUgKCsraW5kZXggPCBzdGFydCkge1xuICAgICAgb3RoZXJBcmdzW2luZGV4XSA9IGFyZ3NbaW5kZXhdO1xuICAgIH1cbiAgICBvdGhlckFyZ3Nbc3RhcnRdID0gdHJhbnNmb3JtKGFycmF5KTtcbiAgICByZXR1cm4gYXBwbHkoZnVuYywgdGhpcywgb3RoZXJBcmdzKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvdmVyUmVzdDtcbiIsICIvKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYHZhbHVlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDIuNC4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcmV0dXJuIGZyb20gdGhlIG5ldyBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNvbnN0YW50IGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0cyA9IF8udGltZXMoMiwgXy5jb25zdGFudCh7ICdhJzogMSB9KSk7XG4gKlxuICogY29uc29sZS5sb2cob2JqZWN0cyk7XG4gKiAvLyA9PiBbeyAnYSc6IDEgfSwgeyAnYSc6IDEgfV1cbiAqXG4gKiBjb25zb2xlLmxvZyhvYmplY3RzWzBdID09PSBvYmplY3RzWzFdKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gY29uc3RhbnQodmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb25zdGFudDtcbiIsICIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGZpcnN0IGFyZ3VtZW50IGl0IHJlY2VpdmVzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0geyp9IHZhbHVlIEFueSB2YWx1ZS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIGB2YWx1ZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICpcbiAqIGNvbnNvbGUubG9nKF8uaWRlbnRpdHkob2JqZWN0KSA9PT0gb2JqZWN0KTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gaWRlbnRpdHkodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlkZW50aXR5O1xuIiwgInZhciBjb25zdGFudCA9IHJlcXVpcmUoJy4vY29uc3RhbnQnKSxcbiAgICBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2RlZmluZVByb3BlcnR5JyksXG4gICAgaWRlbnRpdHkgPSByZXF1aXJlKCcuL2lkZW50aXR5Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYHNldFRvU3RyaW5nYCB3aXRob3V0IHN1cHBvcnQgZm9yIGhvdCBsb29wIHNob3J0aW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdHJpbmcgVGhlIGB0b1N0cmluZ2AgcmVzdWx0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC5cbiAqL1xudmFyIGJhc2VTZXRUb1N0cmluZyA9ICFkZWZpbmVQcm9wZXJ0eSA/IGlkZW50aXR5IDogZnVuY3Rpb24oZnVuYywgc3RyaW5nKSB7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eShmdW5jLCAndG9TdHJpbmcnLCB7XG4gICAgJ2NvbmZpZ3VyYWJsZSc6IHRydWUsXG4gICAgJ2VudW1lcmFibGUnOiBmYWxzZSxcbiAgICAndmFsdWUnOiBjb25zdGFudChzdHJpbmcpLFxuICAgICd3cml0YWJsZSc6IHRydWVcbiAgfSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VTZXRUb1N0cmluZztcbiIsICIvKiogVXNlZCB0byBkZXRlY3QgaG90IGZ1bmN0aW9ucyBieSBudW1iZXIgb2YgY2FsbHMgd2l0aGluIGEgc3BhbiBvZiBtaWxsaXNlY29uZHMuICovXG52YXIgSE9UX0NPVU5UID0gODAwLFxuICAgIEhPVF9TUEFOID0gMTY7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVOb3cgPSBEYXRlLm5vdztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCdsbCBzaG9ydCBvdXQgYW5kIGludm9rZSBgaWRlbnRpdHlgIGluc3RlYWRcbiAqIG9mIGBmdW5jYCB3aGVuIGl0J3MgY2FsbGVkIGBIT1RfQ09VTlRgIG9yIG1vcmUgdGltZXMgaW4gYEhPVF9TUEFOYFxuICogbWlsbGlzZWNvbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byByZXN0cmljdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNob3J0YWJsZSBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gc2hvcnRPdXQoZnVuYykge1xuICB2YXIgY291bnQgPSAwLFxuICAgICAgbGFzdENhbGxlZCA9IDA7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdGFtcCA9IG5hdGl2ZU5vdygpLFxuICAgICAgICByZW1haW5pbmcgPSBIT1RfU1BBTiAtIChzdGFtcCAtIGxhc3RDYWxsZWQpO1xuXG4gICAgbGFzdENhbGxlZCA9IHN0YW1wO1xuICAgIGlmIChyZW1haW5pbmcgPiAwKSB7XG4gICAgICBpZiAoKytjb3VudCA+PSBIT1RfQ09VTlQpIHtcbiAgICAgICAgcmV0dXJuIGFyZ3VtZW50c1swXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY291bnQgPSAwO1xuICAgIH1cbiAgICByZXR1cm4gZnVuYy5hcHBseSh1bmRlZmluZWQsIGFyZ3VtZW50cyk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2hvcnRPdXQ7XG4iLCAidmFyIGJhc2VTZXRUb1N0cmluZyA9IHJlcXVpcmUoJy4vX2Jhc2VTZXRUb1N0cmluZycpLFxuICAgIHNob3J0T3V0ID0gcmVxdWlyZSgnLi9fc2hvcnRPdXQnKTtcblxuLyoqXG4gKiBTZXRzIHRoZSBgdG9TdHJpbmdgIG1ldGhvZCBvZiBgZnVuY2AgdG8gcmV0dXJuIGBzdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdHJpbmcgVGhlIGB0b1N0cmluZ2AgcmVzdWx0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC5cbiAqL1xudmFyIHNldFRvU3RyaW5nID0gc2hvcnRPdXQoYmFzZVNldFRvU3RyaW5nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBzZXRUb1N0cmluZztcbiIsICJ2YXIgZmxhdHRlbiA9IHJlcXVpcmUoJy4vZmxhdHRlbicpLFxuICAgIG92ZXJSZXN0ID0gcmVxdWlyZSgnLi9fb3ZlclJlc3QnKSxcbiAgICBzZXRUb1N0cmluZyA9IHJlcXVpcmUoJy4vX3NldFRvU3RyaW5nJyk7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUmVzdGAgd2hpY2ggZmxhdHRlbnMgdGhlIHJlc3QgYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gZmxhdFJlc3QoZnVuYykge1xuICByZXR1cm4gc2V0VG9TdHJpbmcob3ZlclJlc3QoZnVuYywgdW5kZWZpbmVkLCBmbGF0dGVuKSwgZnVuYyArICcnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmbGF0UmVzdDtcbiIsICJ2YXIgYXJyYXlNYXAgPSByZXF1aXJlKCcuL19hcnJheU1hcCcpLFxuICAgIGJhc2VDbG9uZSA9IHJlcXVpcmUoJy4vX2Jhc2VDbG9uZScpLFxuICAgIGJhc2VVbnNldCA9IHJlcXVpcmUoJy4vX2Jhc2VVbnNldCcpLFxuICAgIGNhc3RQYXRoID0gcmVxdWlyZSgnLi9fY2FzdFBhdGgnKSxcbiAgICBjb3B5T2JqZWN0ID0gcmVxdWlyZSgnLi9fY29weU9iamVjdCcpLFxuICAgIGN1c3RvbU9taXRDbG9uZSA9IHJlcXVpcmUoJy4vX2N1c3RvbU9taXRDbG9uZScpLFxuICAgIGZsYXRSZXN0ID0gcmVxdWlyZSgnLi9fZmxhdFJlc3QnKSxcbiAgICBnZXRBbGxLZXlzSW4gPSByZXF1aXJlKCcuL19nZXRBbGxLZXlzSW4nKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgY2xvbmluZy4gKi9cbnZhciBDTE9ORV9ERUVQX0ZMQUcgPSAxLFxuICAgIENMT05FX0ZMQVRfRkxBRyA9IDIsXG4gICAgQ0xPTkVfU1lNQk9MU19GTEFHID0gNDtcblxuLyoqXG4gKiBUaGUgb3Bwb3NpdGUgb2YgYF8ucGlja2A7IHRoaXMgbWV0aG9kIGNyZWF0ZXMgYW4gb2JqZWN0IGNvbXBvc2VkIG9mIHRoZVxuICogb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0eSBwYXRocyBvZiBgb2JqZWN0YCB0aGF0IGFyZSBub3Qgb21pdHRlZC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgY29uc2lkZXJhYmx5IHNsb3dlciB0aGFuIGBfLnBpY2tgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIHNvdXJjZSBvYmplY3QuXG4gKiBAcGFyYW0gey4uLihzdHJpbmd8c3RyaW5nW10pfSBbcGF0aHNdIFRoZSBwcm9wZXJ0eSBwYXRocyB0byBvbWl0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6ICcyJywgJ2MnOiAzIH07XG4gKlxuICogXy5vbWl0KG9iamVjdCwgWydhJywgJ2MnXSk7XG4gKiAvLyA9PiB7ICdiJzogJzInIH1cbiAqL1xudmFyIG9taXQgPSBmbGF0UmVzdChmdW5jdGlvbihvYmplY3QsIHBhdGhzKSB7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICB2YXIgaXNEZWVwID0gZmFsc2U7XG4gIHBhdGhzID0gYXJyYXlNYXAocGF0aHMsIGZ1bmN0aW9uKHBhdGgpIHtcbiAgICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcbiAgICBpc0RlZXAgfHwgKGlzRGVlcCA9IHBhdGgubGVuZ3RoID4gMSk7XG4gICAgcmV0dXJuIHBhdGg7XG4gIH0pO1xuICBjb3B5T2JqZWN0KG9iamVjdCwgZ2V0QWxsS2V5c0luKG9iamVjdCksIHJlc3VsdCk7XG4gIGlmIChpc0RlZXApIHtcbiAgICByZXN1bHQgPSBiYXNlQ2xvbmUocmVzdWx0LCBDTE9ORV9ERUVQX0ZMQUcgfCBDTE9ORV9GTEFUX0ZMQUcgfCBDTE9ORV9TWU1CT0xTX0ZMQUcsIGN1c3RvbU9taXRDbG9uZSk7XG4gIH1cbiAgdmFyIGxlbmd0aCA9IHBhdGhzLmxlbmd0aDtcbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgYmFzZVVuc2V0KHJlc3VsdCwgcGF0aHNbbGVuZ3RoXSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG9taXQ7XG4iLCAiLyoqIEBsaWNlbnNlIFJlYWN0IHYxNy4wLjJcbiAqIHJlYWN0LWlzLmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIChmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxuLy8gQVRURU5USU9OXG4vLyBXaGVuIGFkZGluZyBuZXcgc3ltYm9scyB0byB0aGlzIGZpbGUsXG4vLyBQbGVhc2UgY29uc2lkZXIgYWxzbyBhZGRpbmcgdG8gJ3JlYWN0LWRldnRvb2xzLXNoYXJlZC9zcmMvYmFja2VuZC9SZWFjdFN5bWJvbHMnXG4vLyBUaGUgU3ltYm9sIHVzZWQgdG8gdGFnIHRoZSBSZWFjdEVsZW1lbnQtbGlrZSB0eXBlcy4gSWYgdGhlcmUgaXMgbm8gbmF0aXZlIFN5bWJvbFxuLy8gbm9yIHBvbHlmaWxsLCB0aGVuIGEgcGxhaW4gbnVtYmVyIGlzIHVzZWQgZm9yIHBlcmZvcm1hbmNlLlxudmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IDB4ZWFjNztcbnZhciBSRUFDVF9QT1JUQUxfVFlQRSA9IDB4ZWFjYTtcbnZhciBSRUFDVF9GUkFHTUVOVF9UWVBFID0gMHhlYWNiO1xudmFyIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSAweGVhY2M7XG52YXIgUkVBQ1RfUFJPRklMRVJfVFlQRSA9IDB4ZWFkMjtcbnZhciBSRUFDVF9QUk9WSURFUl9UWVBFID0gMHhlYWNkO1xudmFyIFJFQUNUX0NPTlRFWFRfVFlQRSA9IDB4ZWFjZTtcbnZhciBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gMHhlYWQwO1xudmFyIFJFQUNUX1NVU1BFTlNFX1RZUEUgPSAweGVhZDE7XG52YXIgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFID0gMHhlYWQ4O1xudmFyIFJFQUNUX01FTU9fVFlQRSA9IDB4ZWFkMztcbnZhciBSRUFDVF9MQVpZX1RZUEUgPSAweGVhZDQ7XG52YXIgUkVBQ1RfQkxPQ0tfVFlQRSA9IDB4ZWFkOTtcbnZhciBSRUFDVF9TRVJWRVJfQkxPQ0tfVFlQRSA9IDB4ZWFkYTtcbnZhciBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFID0gMHhlYWQ1O1xudmFyIFJFQUNUX1NDT1BFX1RZUEUgPSAweGVhZDc7XG52YXIgUkVBQ1RfT1BBUVVFX0lEX1RZUEUgPSAweGVhZTA7XG52YXIgUkVBQ1RfREVCVUdfVFJBQ0lOR19NT0RFX1RZUEUgPSAweGVhZTE7XG52YXIgUkVBQ1RfT0ZGU0NSRUVOX1RZUEUgPSAweGVhZTI7XG52YXIgUkVBQ1RfTEVHQUNZX0hJRERFTl9UWVBFID0gMHhlYWUzO1xuXG5pZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuZm9yKSB7XG4gIHZhciBzeW1ib2xGb3IgPSBTeW1ib2wuZm9yO1xuICBSRUFDVF9FTEVNRU5UX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmVsZW1lbnQnKTtcbiAgUkVBQ1RfUE9SVEFMX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnBvcnRhbCcpO1xuICBSRUFDVF9GUkFHTUVOVF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5mcmFnbWVudCcpO1xuICBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5zdHJpY3RfbW9kZScpO1xuICBSRUFDVF9QUk9GSUxFUl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5wcm9maWxlcicpO1xuICBSRUFDVF9QUk9WSURFUl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5wcm92aWRlcicpO1xuICBSRUFDVF9DT05URVhUX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmNvbnRleHQnKTtcbiAgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuZm9yd2FyZF9yZWYnKTtcbiAgUkVBQ1RfU1VTUEVOU0VfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Quc3VzcGVuc2UnKTtcbiAgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5zdXNwZW5zZV9saXN0Jyk7XG4gIFJFQUNUX01FTU9fVFlQRSA9IHN5bWJvbEZvcigncmVhY3QubWVtbycpO1xuICBSRUFDVF9MQVpZX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmxhenknKTtcbiAgUkVBQ1RfQkxPQ0tfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuYmxvY2snKTtcbiAgUkVBQ1RfU0VSVkVSX0JMT0NLX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnNlcnZlci5ibG9jaycpO1xuICBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5mdW5kYW1lbnRhbCcpO1xuICBSRUFDVF9TQ09QRV9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5zY29wZScpO1xuICBSRUFDVF9PUEFRVUVfSURfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Qub3BhcXVlLmlkJyk7XG4gIFJFQUNUX0RFQlVHX1RSQUNJTkdfTU9ERV9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5kZWJ1Z190cmFjZV9tb2RlJyk7XG4gIFJFQUNUX09GRlNDUkVFTl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5vZmZzY3JlZW4nKTtcbiAgUkVBQ1RfTEVHQUNZX0hJRERFTl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5sZWdhY3lfaGlkZGVuJyk7XG59XG5cbi8vIEZpbHRlciBjZXJ0YWluIERPTSBhdHRyaWJ1dGVzIChlLmcuIHNyYywgaHJlZikgaWYgdGhlaXIgdmFsdWVzIGFyZSBlbXB0eSBzdHJpbmdzLlxuXG52YXIgZW5hYmxlU2NvcGVBUEkgPSBmYWxzZTsgLy8gRXhwZXJpbWVudGFsIENyZWF0ZSBFdmVudCBIYW5kbGUgQVBJLlxuXG5mdW5jdGlvbiBpc1ZhbGlkRWxlbWVudFR5cGUodHlwZSkge1xuICBpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gLy8gTm90ZTogdHlwZW9mIG1pZ2h0IGJlIG90aGVyIHRoYW4gJ3N5bWJvbCcgb3IgJ251bWJlcicgKGUuZy4gaWYgaXQncyBhIHBvbHlmaWxsKS5cblxuXG4gIGlmICh0eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1BST0ZJTEVSX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfREVCVUdfVFJBQ0lOR19NT0RFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9MRUdBQ1lfSElEREVOX1RZUEUgfHwgZW5hYmxlU2NvcGVBUEkgKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwpIHtcbiAgICBpZiAodHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTEFaWV9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX01FTU9fVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9QUk9WSURFUl9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlRFWFRfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQkxPQ0tfVFlQRSB8fCB0eXBlWzBdID09PSBSRUFDVF9TRVJWRVJfQkxPQ0tfVFlQRSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiB0eXBlT2Yob2JqZWN0KSB7XG4gIGlmICh0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwpIHtcbiAgICB2YXIgJCR0eXBlb2YgPSBvYmplY3QuJCR0eXBlb2Y7XG5cbiAgICBzd2l0Y2ggKCQkdHlwZW9mKSB7XG4gICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgdmFyIHR5cGUgPSBvYmplY3QudHlwZTtcblxuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICBjYXNlIFJFQUNUX0ZSQUdNRU5UX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9QUk9GSUxFUl9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfU1RSSUNUX01PREVfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU6XG4gICAgICAgICAgICByZXR1cm4gdHlwZTtcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB2YXIgJCR0eXBlb2ZUeXBlID0gdHlwZSAmJiB0eXBlLiQkdHlwZW9mO1xuXG4gICAgICAgICAgICBzd2l0Y2ggKCQkdHlwZW9mVHlwZSkge1xuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0NPTlRFWFRfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfUFJPVklERVJfVFlQRTpcbiAgICAgICAgICAgICAgICByZXR1cm4gJCR0eXBlb2ZUeXBlO1xuXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuICQkdHlwZW9mO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgcmV0dXJuICQkdHlwZW9mO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG52YXIgQ29udGV4dENvbnN1bWVyID0gUkVBQ1RfQ09OVEVYVF9UWVBFO1xudmFyIENvbnRleHRQcm92aWRlciA9IFJFQUNUX1BST1ZJREVSX1RZUEU7XG52YXIgRWxlbWVudCA9IFJFQUNUX0VMRU1FTlRfVFlQRTtcbnZhciBGb3J3YXJkUmVmID0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTtcbnZhciBGcmFnbWVudCA9IFJFQUNUX0ZSQUdNRU5UX1RZUEU7XG52YXIgTGF6eSA9IFJFQUNUX0xBWllfVFlQRTtcbnZhciBNZW1vID0gUkVBQ1RfTUVNT19UWVBFO1xudmFyIFBvcnRhbCA9IFJFQUNUX1BPUlRBTF9UWVBFO1xudmFyIFByb2ZpbGVyID0gUkVBQ1RfUFJPRklMRVJfVFlQRTtcbnZhciBTdHJpY3RNb2RlID0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRTtcbnZhciBTdXNwZW5zZSA9IFJFQUNUX1NVU1BFTlNFX1RZUEU7XG52YXIgaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNBc3luY01vZGUgPSBmYWxzZTtcbnZhciBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0NvbmN1cnJlbnRNb2RlID0gZmFsc2U7IC8vIEFzeW5jTW9kZSBzaG91bGQgYmUgZGVwcmVjYXRlZFxuXG5mdW5jdGlvbiBpc0FzeW5jTW9kZShvYmplY3QpIHtcbiAge1xuICAgIGlmICghaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNBc3luY01vZGUpIHtcbiAgICAgIGhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlID0gdHJ1ZTsgLy8gVXNpbmcgY29uc29sZVsnd2FybiddIHRvIGV2YWRlIEJhYmVsIGFuZCBFU0xpbnRcblxuICAgICAgY29uc29sZVsnd2FybiddKCdUaGUgUmVhY3RJcy5pc0FzeW5jTW9kZSgpIGFsaWFzIGhhcyBiZWVuIGRlcHJlY2F0ZWQsICcgKyAnYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBSZWFjdCAxOCsuJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gaXNDb25jdXJyZW50TW9kZShvYmplY3QpIHtcbiAge1xuICAgIGlmICghaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNDb25jdXJyZW50TW9kZSkge1xuICAgICAgaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNDb25jdXJyZW50TW9kZSA9IHRydWU7IC8vIFVzaW5nIGNvbnNvbGVbJ3dhcm4nXSB0byBldmFkZSBCYWJlbCBhbmQgRVNMaW50XG5cbiAgICAgIGNvbnNvbGVbJ3dhcm4nXSgnVGhlIFJlYWN0SXMuaXNDb25jdXJyZW50TW9kZSgpIGFsaWFzIGhhcyBiZWVuIGRlcHJlY2F0ZWQsICcgKyAnYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBSZWFjdCAxOCsuJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gaXNDb250ZXh0Q29uc3VtZXIob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFO1xufVxuZnVuY3Rpb24gaXNDb250ZXh0UHJvdmlkZXIob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUFJPVklERVJfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzRWxlbWVudChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCAmJiBvYmplY3QuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzRm9yd2FyZFJlZihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFO1xufVxuZnVuY3Rpb24gaXNGcmFnbWVudChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFO1xufVxuZnVuY3Rpb24gaXNMYXp5KG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0xBWllfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzTWVtbyhvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9NRU1PX1RZUEU7XG59XG5mdW5jdGlvbiBpc1BvcnRhbChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9QT1JUQUxfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzUHJvZmlsZXIob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUFJPRklMRVJfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzU3RyaWN0TW9kZShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFO1xufVxuZnVuY3Rpb24gaXNTdXNwZW5zZShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9TVVNQRU5TRV9UWVBFO1xufVxuXG5leHBvcnRzLkNvbnRleHRDb25zdW1lciA9IENvbnRleHRDb25zdW1lcjtcbmV4cG9ydHMuQ29udGV4dFByb3ZpZGVyID0gQ29udGV4dFByb3ZpZGVyO1xuZXhwb3J0cy5FbGVtZW50ID0gRWxlbWVudDtcbmV4cG9ydHMuRm9yd2FyZFJlZiA9IEZvcndhcmRSZWY7XG5leHBvcnRzLkZyYWdtZW50ID0gRnJhZ21lbnQ7XG5leHBvcnRzLkxhenkgPSBMYXp5O1xuZXhwb3J0cy5NZW1vID0gTWVtbztcbmV4cG9ydHMuUG9ydGFsID0gUG9ydGFsO1xuZXhwb3J0cy5Qcm9maWxlciA9IFByb2ZpbGVyO1xuZXhwb3J0cy5TdHJpY3RNb2RlID0gU3RyaWN0TW9kZTtcbmV4cG9ydHMuU3VzcGVuc2UgPSBTdXNwZW5zZTtcbmV4cG9ydHMuaXNBc3luY01vZGUgPSBpc0FzeW5jTW9kZTtcbmV4cG9ydHMuaXNDb25jdXJyZW50TW9kZSA9IGlzQ29uY3VycmVudE1vZGU7XG5leHBvcnRzLmlzQ29udGV4dENvbnN1bWVyID0gaXNDb250ZXh0Q29uc3VtZXI7XG5leHBvcnRzLmlzQ29udGV4dFByb3ZpZGVyID0gaXNDb250ZXh0UHJvdmlkZXI7XG5leHBvcnRzLmlzRWxlbWVudCA9IGlzRWxlbWVudDtcbmV4cG9ydHMuaXNGb3J3YXJkUmVmID0gaXNGb3J3YXJkUmVmO1xuZXhwb3J0cy5pc0ZyYWdtZW50ID0gaXNGcmFnbWVudDtcbmV4cG9ydHMuaXNMYXp5ID0gaXNMYXp5O1xuZXhwb3J0cy5pc01lbW8gPSBpc01lbW87XG5leHBvcnRzLmlzUG9ydGFsID0gaXNQb3J0YWw7XG5leHBvcnRzLmlzUHJvZmlsZXIgPSBpc1Byb2ZpbGVyO1xuZXhwb3J0cy5pc1N0cmljdE1vZGUgPSBpc1N0cmljdE1vZGU7XG5leHBvcnRzLmlzU3VzcGVuc2UgPSBpc1N1c3BlbnNlO1xuZXhwb3J0cy5pc1ZhbGlkRWxlbWVudFR5cGUgPSBpc1ZhbGlkRWxlbWVudFR5cGU7XG5leHBvcnRzLnR5cGVPZiA9IHR5cGVPZjtcbiAgfSkoKTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ2hlY2sgaWYgd2UncmUgcmVxdWlyZWQgdG8gYWRkIGEgcG9ydCBudW1iZXIuXG4gKlxuICogQHNlZSBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RlZmF1bHQtcG9ydFxuICogQHBhcmFtIHtOdW1iZXJ8U3RyaW5nfSBwb3J0IFBvcnQgbnVtYmVyIHdlIG5lZWQgdG8gY2hlY2tcbiAqIEBwYXJhbSB7U3RyaW5nfSBwcm90b2NvbCBQcm90b2NvbCB3ZSBuZWVkIHRvIGNoZWNrIGFnYWluc3QuXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gSXMgaXQgYSBkZWZhdWx0IHBvcnQgZm9yIHRoZSBnaXZlbiBwcm90b2NvbFxuICogQGFwaSBwcml2YXRlXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcmVxdWlyZWQocG9ydCwgcHJvdG9jb2wpIHtcbiAgcHJvdG9jb2wgPSBwcm90b2NvbC5zcGxpdCgnOicpWzBdO1xuICBwb3J0ID0gK3BvcnQ7XG5cbiAgaWYgKCFwb3J0KSByZXR1cm4gZmFsc2U7XG5cbiAgc3dpdGNoIChwcm90b2NvbCkge1xuICAgIGNhc2UgJ2h0dHAnOlxuICAgIGNhc2UgJ3dzJzpcbiAgICByZXR1cm4gcG9ydCAhPT0gODA7XG5cbiAgICBjYXNlICdodHRwcyc6XG4gICAgY2FzZSAnd3NzJzpcbiAgICByZXR1cm4gcG9ydCAhPT0gNDQzO1xuXG4gICAgY2FzZSAnZnRwJzpcbiAgICByZXR1cm4gcG9ydCAhPT0gMjE7XG5cbiAgICBjYXNlICdnb3BoZXInOlxuICAgIHJldHVybiBwb3J0ICE9PSA3MDtcblxuICAgIGNhc2UgJ2ZpbGUnOlxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBwb3J0ICE9PSAwO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5cbnZhciBoYXMgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5XG4gICwgdW5kZWY7XG5cbi8qKlxuICogRGVjb2RlIGEgVVJJIGVuY29kZWQgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgVVJJIGVuY29kZWQgc3RyaW5nLlxuICogQHJldHVybnMge1N0cmluZ3xOdWxsfSBUaGUgZGVjb2RlZCBzdHJpbmcuXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZGVjb2RlKGlucHV0KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChpbnB1dC5yZXBsYWNlKC9cXCsvZywgJyAnKSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG4vKipcbiAqIEF0dGVtcHRzIHRvIGVuY29kZSBhIGdpdmVuIGlucHV0LlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgc3RyaW5nIHRoYXQgbmVlZHMgdG8gYmUgZW5jb2RlZC5cbiAqIEByZXR1cm5zIHtTdHJpbmd8TnVsbH0gVGhlIGVuY29kZWQgc3RyaW5nLlxuICogQGFwaSBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGVuY29kZShpbnB1dCkge1xuICB0cnkge1xuICAgIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoaW5wdXQpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuLyoqXG4gKiBTaW1wbGUgcXVlcnkgc3RyaW5nIHBhcnNlci5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gcXVlcnkgVGhlIHF1ZXJ5IHN0cmluZyB0aGF0IG5lZWRzIHRvIGJlIHBhcnNlZC5cbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5mdW5jdGlvbiBxdWVyeXN0cmluZyhxdWVyeSkge1xuICB2YXIgcGFyc2VyID0gLyhbXj0/IyZdKyk9PyhbXiZdKikvZ1xuICAgICwgcmVzdWx0ID0ge31cbiAgICAsIHBhcnQ7XG5cbiAgd2hpbGUgKHBhcnQgPSBwYXJzZXIuZXhlYyhxdWVyeSkpIHtcbiAgICB2YXIga2V5ID0gZGVjb2RlKHBhcnRbMV0pXG4gICAgICAsIHZhbHVlID0gZGVjb2RlKHBhcnRbMl0pO1xuXG4gICAgLy9cbiAgICAvLyBQcmV2ZW50IG92ZXJyaWRpbmcgb2YgZXhpc3RpbmcgcHJvcGVydGllcy4gVGhpcyBlbnN1cmVzIHRoYXQgYnVpbGQtaW5cbiAgICAvLyBtZXRob2RzIGxpa2UgYHRvU3RyaW5nYCBvciBfX3Byb3RvX18gYXJlIG5vdCBvdmVycmlkZW4gYnkgbWFsaWNpb3VzXG4gICAgLy8gcXVlcnlzdHJpbmdzLlxuICAgIC8vXG4gICAgLy8gSW4gdGhlIGNhc2UgaWYgZmFpbGVkIGRlY29kaW5nLCB3ZSB3YW50IHRvIG9taXQgdGhlIGtleS92YWx1ZSBwYWlyc1xuICAgIC8vIGZyb20gdGhlIHJlc3VsdC5cbiAgICAvL1xuICAgIGlmIChrZXkgPT09IG51bGwgfHwgdmFsdWUgPT09IG51bGwgfHwga2V5IGluIHJlc3VsdCkgY29udGludWU7XG4gICAgcmVzdWx0W2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogVHJhbnNmb3JtIGEgcXVlcnkgc3RyaW5nIHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqIE9iamVjdCB0aGF0IHNob3VsZCBiZSB0cmFuc2Zvcm1lZC5cbiAqIEBwYXJhbSB7U3RyaW5nfSBwcmVmaXggT3B0aW9uYWwgcHJlZml4LlxuICogQHJldHVybnMge1N0cmluZ31cbiAqIEBhcGkgcHVibGljXG4gKi9cbmZ1bmN0aW9uIHF1ZXJ5c3RyaW5naWZ5KG9iaiwgcHJlZml4KSB7XG4gIHByZWZpeCA9IHByZWZpeCB8fCAnJztcblxuICB2YXIgcGFpcnMgPSBbXVxuICAgICwgdmFsdWVcbiAgICAsIGtleTtcblxuICAvL1xuICAvLyBPcHRpb25hbGx5IHByZWZpeCB3aXRoIGEgJz8nIGlmIG5lZWRlZFxuICAvL1xuICBpZiAoJ3N0cmluZycgIT09IHR5cGVvZiBwcmVmaXgpIHByZWZpeCA9ICc/JztcblxuICBmb3IgKGtleSBpbiBvYmopIHtcbiAgICBpZiAoaGFzLmNhbGwob2JqLCBrZXkpKSB7XG4gICAgICB2YWx1ZSA9IG9ialtrZXldO1xuXG4gICAgICAvL1xuICAgICAgLy8gRWRnZSBjYXNlcyB3aGVyZSB3ZSBhY3R1YWxseSB3YW50IHRvIGVuY29kZSB0aGUgdmFsdWUgdG8gYW4gZW1wdHlcbiAgICAgIC8vIHN0cmluZyBpbnN0ZWFkIG9mIHRoZSBzdHJpbmdpZmllZCB2YWx1ZS5cbiAgICAgIC8vXG4gICAgICBpZiAoIXZhbHVlICYmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWYgfHwgaXNOYU4odmFsdWUpKSkge1xuICAgICAgICB2YWx1ZSA9ICcnO1xuICAgICAgfVxuXG4gICAgICBrZXkgPSBlbmNvZGUoa2V5KTtcbiAgICAgIHZhbHVlID0gZW5jb2RlKHZhbHVlKTtcblxuICAgICAgLy9cbiAgICAgIC8vIElmIHdlIGZhaWxlZCB0byBlbmNvZGUgdGhlIHN0cmluZ3MsIHdlIHNob3VsZCBiYWlsIG91dCBhcyB3ZSBkb24ndFxuICAgICAgLy8gd2FudCB0byBhZGQgaW52YWxpZCBzdHJpbmdzIHRvIHRoZSBxdWVyeS5cbiAgICAgIC8vXG4gICAgICBpZiAoa2V5ID09PSBudWxsIHx8IHZhbHVlID09PSBudWxsKSBjb250aW51ZTtcbiAgICAgIHBhaXJzLnB1c2goa2V5ICsnPScrIHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFpcnMubGVuZ3RoID8gcHJlZml4ICsgcGFpcnMuam9pbignJicpIDogJyc7XG59XG5cbi8vXG4vLyBFeHBvc2UgdGhlIG1vZHVsZS5cbi8vXG5leHBvcnRzLnN0cmluZ2lmeSA9IHF1ZXJ5c3RyaW5naWZ5O1xuZXhwb3J0cy5wYXJzZSA9IHF1ZXJ5c3RyaW5nO1xuIiwgIid1c2Ugc3RyaWN0JztcblxudmFyIHJlcXVpcmVkID0gcmVxdWlyZSgncmVxdWlyZXMtcG9ydCcpXG4gICwgcXMgPSByZXF1aXJlKCdxdWVyeXN0cmluZ2lmeScpXG4gICwgY29udHJvbE9yV2hpdGVzcGFjZSA9IC9eW1xceDAwLVxceDIwXFx1MDBhMFxcdTE2ODBcXHUyMDAwLVxcdTIwMGFcXHUyMDI4XFx1MjAyOVxcdTIwMmZcXHUyMDVmXFx1MzAwMFxcdWZlZmZdKy9cbiAgLCBDUkhUTEYgPSAvW1xcblxcclxcdF0vZ1xuICAsIHNsYXNoZXMgPSAvXltBLVphLXpdW0EtWmEtejAtOSstLl0qOlxcL1xcLy9cbiAgLCBwb3J0ID0gLzpcXGQrJC9cbiAgLCBwcm90b2NvbHJlID0gL14oW2Etel1bYS16MC05ListXSo6KT8oXFwvXFwvKT8oW1xcXFwvXSspPyhbXFxTXFxzXSopL2lcbiAgLCB3aW5kb3dzRHJpdmVMZXR0ZXIgPSAvXlthLXpBLVpdOi87XG5cbi8qKlxuICogUmVtb3ZlIGNvbnRyb2wgY2hhcmFjdGVycyBhbmQgd2hpdGVzcGFjZSBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgYSBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHtPYmplY3R8U3RyaW5nfSBzdHIgU3RyaW5nIHRvIHRyaW0uXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBBIG5ldyBzdHJpbmcgcmVwcmVzZW50aW5nIGBzdHJgIHN0cmlwcGVkIG9mIGNvbnRyb2xcbiAqICAgICBjaGFyYWN0ZXJzIGFuZCB3aGl0ZXNwYWNlIGZyb20gaXRzIGJlZ2lubmluZy5cbiAqIEBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gdHJpbUxlZnQoc3RyKSB7XG4gIHJldHVybiAoc3RyID8gc3RyIDogJycpLnRvU3RyaW5nKCkucmVwbGFjZShjb250cm9sT3JXaGl0ZXNwYWNlLCAnJyk7XG59XG5cbi8qKlxuICogVGhlc2UgYXJlIHRoZSBwYXJzZSBydWxlcyBmb3IgdGhlIFVSTCBwYXJzZXIsIGl0IGluZm9ybXMgdGhlIHBhcnNlclxuICogYWJvdXQ6XG4gKlxuICogMC4gVGhlIGNoYXIgaXQgTmVlZHMgdG8gcGFyc2UsIGlmIGl0J3MgYSBzdHJpbmcgaXQgc2hvdWxkIGJlIGRvbmUgdXNpbmdcbiAqICAgIGluZGV4T2YsIFJlZ0V4cCB1c2luZyBleGVjIGFuZCBOYU4gbWVhbnMgc2V0IGFzIGN1cnJlbnQgdmFsdWUuXG4gKiAxLiBUaGUgcHJvcGVydHkgd2Ugc2hvdWxkIHNldCB3aGVuIHBhcnNpbmcgdGhpcyB2YWx1ZS5cbiAqIDIuIEluZGljYXRpb24gaWYgaXQncyBiYWNrd2FyZHMgb3IgZm9yd2FyZCBwYXJzaW5nLCB3aGVuIHNldCBhcyBudW1iZXIgaXQnc1xuICogICAgdGhlIHZhbHVlIG9mIGV4dHJhIGNoYXJzIHRoYXQgc2hvdWxkIGJlIHNwbGl0IG9mZi5cbiAqIDMuIEluaGVyaXQgZnJvbSBsb2NhdGlvbiBpZiBub24gZXhpc3RpbmcgaW4gdGhlIHBhcnNlci5cbiAqIDQuIGB0b0xvd2VyQ2FzZWAgdGhlIHJlc3VsdGluZyB2YWx1ZS5cbiAqL1xudmFyIHJ1bGVzID0gW1xuICBbJyMnLCAnaGFzaCddLCAgICAgICAgICAgICAgICAgICAgICAgIC8vIEV4dHJhY3QgZnJvbSB0aGUgYmFjay5cbiAgWyc/JywgJ3F1ZXJ5J10sICAgICAgICAgICAgICAgICAgICAgICAvLyBFeHRyYWN0IGZyb20gdGhlIGJhY2suXG4gIGZ1bmN0aW9uIHNhbml0aXplKGFkZHJlc3MsIHVybCkgeyAgICAgLy8gU2FuaXRpemUgd2hhdCBpcyBsZWZ0IG9mIHRoZSBhZGRyZXNzXG4gICAgcmV0dXJuIGlzU3BlY2lhbCh1cmwucHJvdG9jb2wpID8gYWRkcmVzcy5yZXBsYWNlKC9cXFxcL2csICcvJykgOiBhZGRyZXNzO1xuICB9LFxuICBbJy8nLCAncGF0aG5hbWUnXSwgICAgICAgICAgICAgICAgICAgIC8vIEV4dHJhY3QgZnJvbSB0aGUgYmFjay5cbiAgWydAJywgJ2F1dGgnLCAxXSwgICAgICAgICAgICAgICAgICAgICAvLyBFeHRyYWN0IGZyb20gdGhlIGZyb250LlxuICBbTmFOLCAnaG9zdCcsIHVuZGVmaW5lZCwgMSwgMV0sICAgICAgIC8vIFNldCBsZWZ0IG92ZXIgdmFsdWUuXG4gIFsvOihcXGQqKSQvLCAncG9ydCcsIHVuZGVmaW5lZCwgMV0sICAgIC8vIFJlZ0V4cCB0aGUgYmFjay5cbiAgW05hTiwgJ2hvc3RuYW1lJywgdW5kZWZpbmVkLCAxLCAxXSAgICAvLyBTZXQgbGVmdCBvdmVyLlxuXTtcblxuLyoqXG4gKiBUaGVzZSBwcm9wZXJ0aWVzIHNob3VsZCBub3QgYmUgY29waWVkIG9yIGluaGVyaXRlZCBmcm9tLiBUaGlzIGlzIG9ubHkgbmVlZGVkXG4gKiBmb3IgYWxsIG5vbiBibG9iIFVSTCdzIGFzIGEgYmxvYiBVUkwgZG9lcyBub3QgaW5jbHVkZSBhIGhhc2gsIG9ubHkgdGhlXG4gKiBvcmlnaW4uXG4gKlxuICogQHR5cGUge09iamVjdH1cbiAqIEBwcml2YXRlXG4gKi9cbnZhciBpZ25vcmUgPSB7IGhhc2g6IDEsIHF1ZXJ5OiAxIH07XG5cbi8qKlxuICogVGhlIGxvY2F0aW9uIG9iamVjdCBkaWZmZXJzIHdoZW4geW91ciBjb2RlIGlzIGxvYWRlZCB0aHJvdWdoIGEgbm9ybWFsIHBhZ2UsXG4gKiBXb3JrZXIgb3IgdGhyb3VnaCBhIHdvcmtlciB1c2luZyBhIGJsb2IuIEFuZCB3aXRoIHRoZSBibG9iYmxlIGJlZ2lucyB0aGVcbiAqIHRyb3VibGUgYXMgdGhlIGxvY2F0aW9uIG9iamVjdCB3aWxsIGNvbnRhaW4gdGhlIFVSTCBvZiB0aGUgYmxvYiwgbm90IHRoZVxuICogbG9jYXRpb24gb2YgdGhlIHBhZ2Ugd2hlcmUgb3VyIGNvZGUgaXMgbG9hZGVkIGluLiBUaGUgYWN0dWFsIG9yaWdpbiBpc1xuICogZW5jb2RlZCBpbiB0aGUgYHBhdGhuYW1lYCBzbyB3ZSBjYW4gdGhhbmtmdWxseSBnZW5lcmF0ZSBhIGdvb2QgXCJkZWZhdWx0XCJcbiAqIGxvY2F0aW9uIGZyb20gaXQgc28gd2UgY2FuIGdlbmVyYXRlIHByb3BlciByZWxhdGl2ZSBVUkwncyBhZ2Fpbi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdHxTdHJpbmd9IGxvYyBPcHRpb25hbCBkZWZhdWx0IGxvY2F0aW9uIG9iamVjdC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IGxvbGNhdGlvbiBvYmplY3QuXG4gKiBAcHVibGljXG4gKi9cbmZ1bmN0aW9uIGxvbGNhdGlvbihsb2MpIHtcbiAgdmFyIGdsb2JhbFZhcjtcblxuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIGdsb2JhbFZhciA9IHdpbmRvdztcbiAgZWxzZSBpZiAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcpIGdsb2JhbFZhciA9IGdsb2JhbDtcbiAgZWxzZSBpZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnKSBnbG9iYWxWYXIgPSBzZWxmO1xuICBlbHNlIGdsb2JhbFZhciA9IHt9O1xuXG4gIHZhciBsb2NhdGlvbiA9IGdsb2JhbFZhci5sb2NhdGlvbiB8fCB7fTtcbiAgbG9jID0gbG9jIHx8IGxvY2F0aW9uO1xuXG4gIHZhciBmaW5hbGRlc3RpbmF0aW9uID0ge31cbiAgICAsIHR5cGUgPSB0eXBlb2YgbG9jXG4gICAgLCBrZXk7XG5cbiAgaWYgKCdibG9iOicgPT09IGxvYy5wcm90b2NvbCkge1xuICAgIGZpbmFsZGVzdGluYXRpb24gPSBuZXcgVXJsKHVuZXNjYXBlKGxvYy5wYXRobmFtZSksIHt9KTtcbiAgfSBlbHNlIGlmICgnc3RyaW5nJyA9PT0gdHlwZSkge1xuICAgIGZpbmFsZGVzdGluYXRpb24gPSBuZXcgVXJsKGxvYywge30pO1xuICAgIGZvciAoa2V5IGluIGlnbm9yZSkgZGVsZXRlIGZpbmFsZGVzdGluYXRpb25ba2V5XTtcbiAgfSBlbHNlIGlmICgnb2JqZWN0JyA9PT0gdHlwZSkge1xuICAgIGZvciAoa2V5IGluIGxvYykge1xuICAgICAgaWYgKGtleSBpbiBpZ25vcmUpIGNvbnRpbnVlO1xuICAgICAgZmluYWxkZXN0aW5hdGlvbltrZXldID0gbG9jW2tleV07XG4gICAgfVxuXG4gICAgaWYgKGZpbmFsZGVzdGluYXRpb24uc2xhc2hlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBmaW5hbGRlc3RpbmF0aW9uLnNsYXNoZXMgPSBzbGFzaGVzLnRlc3QobG9jLmhyZWYpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmaW5hbGRlc3RpbmF0aW9uO1xufVxuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgYSBwcm90b2NvbCBzY2hlbWUgaXMgc3BlY2lhbC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gVGhlIHByb3RvY29sIHNjaGVtZSBvZiB0aGUgVVJMXG4gKiBAcmV0dXJuIHtCb29sZWFufSBgdHJ1ZWAgaWYgdGhlIHByb3RvY29sIHNjaGVtZSBpcyBzcGVjaWFsLCBlbHNlIGBmYWxzZWBcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGlzU3BlY2lhbChzY2hlbWUpIHtcbiAgcmV0dXJuIChcbiAgICBzY2hlbWUgPT09ICdmaWxlOicgfHxcbiAgICBzY2hlbWUgPT09ICdmdHA6JyB8fFxuICAgIHNjaGVtZSA9PT0gJ2h0dHA6JyB8fFxuICAgIHNjaGVtZSA9PT0gJ2h0dHBzOicgfHxcbiAgICBzY2hlbWUgPT09ICd3czonIHx8XG4gICAgc2NoZW1lID09PSAnd3NzOidcbiAgKTtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiBQcm90b2NvbEV4dHJhY3RcbiAqIEB0eXBlIE9iamVjdFxuICogQHByb3BlcnR5IHtTdHJpbmd9IHByb3RvY29sIFByb3RvY29sIG1hdGNoZWQgaW4gdGhlIFVSTCwgaW4gbG93ZXJjYXNlLlxuICogQHByb3BlcnR5IHtCb29sZWFufSBzbGFzaGVzIGB0cnVlYCBpZiBwcm90b2NvbCBpcyBmb2xsb3dlZCBieSBcIi8vXCIsIGVsc2UgYGZhbHNlYC5cbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSByZXN0IFJlc3Qgb2YgdGhlIFVSTCB0aGF0IGlzIG5vdCBwYXJ0IG9mIHRoZSBwcm90b2NvbC5cbiAqL1xuXG4vKipcbiAqIEV4dHJhY3QgcHJvdG9jb2wgaW5mb3JtYXRpb24gZnJvbSBhIFVSTCB3aXRoL3dpdGhvdXQgZG91YmxlIHNsYXNoIChcIi8vXCIpLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBhZGRyZXNzIFVSTCB3ZSB3YW50IHRvIGV4dHJhY3QgZnJvbS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBsb2NhdGlvblxuICogQHJldHVybiB7UHJvdG9jb2xFeHRyYWN0fSBFeHRyYWN0ZWQgaW5mb3JtYXRpb24uXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBleHRyYWN0UHJvdG9jb2woYWRkcmVzcywgbG9jYXRpb24pIHtcbiAgYWRkcmVzcyA9IHRyaW1MZWZ0KGFkZHJlc3MpO1xuICBhZGRyZXNzID0gYWRkcmVzcy5yZXBsYWNlKENSSFRMRiwgJycpO1xuICBsb2NhdGlvbiA9IGxvY2F0aW9uIHx8IHt9O1xuXG4gIHZhciBtYXRjaCA9IHByb3RvY29scmUuZXhlYyhhZGRyZXNzKTtcbiAgdmFyIHByb3RvY29sID0gbWF0Y2hbMV0gPyBtYXRjaFsxXS50b0xvd2VyQ2FzZSgpIDogJyc7XG4gIHZhciBmb3J3YXJkU2xhc2hlcyA9ICEhbWF0Y2hbMl07XG4gIHZhciBvdGhlclNsYXNoZXMgPSAhIW1hdGNoWzNdO1xuICB2YXIgc2xhc2hlc0NvdW50ID0gMDtcbiAgdmFyIHJlc3Q7XG5cbiAgaWYgKGZvcndhcmRTbGFzaGVzKSB7XG4gICAgaWYgKG90aGVyU2xhc2hlcykge1xuICAgICAgcmVzdCA9IG1hdGNoWzJdICsgbWF0Y2hbM10gKyBtYXRjaFs0XTtcbiAgICAgIHNsYXNoZXNDb3VudCA9IG1hdGNoWzJdLmxlbmd0aCArIG1hdGNoWzNdLmxlbmd0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdCA9IG1hdGNoWzJdICsgbWF0Y2hbNF07XG4gICAgICBzbGFzaGVzQ291bnQgPSBtYXRjaFsyXS5sZW5ndGg7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChvdGhlclNsYXNoZXMpIHtcbiAgICAgIHJlc3QgPSBtYXRjaFszXSArIG1hdGNoWzRdO1xuICAgICAgc2xhc2hlc0NvdW50ID0gbWF0Y2hbM10ubGVuZ3RoO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN0ID0gbWF0Y2hbNF1cbiAgICB9XG4gIH1cblxuICBpZiAocHJvdG9jb2wgPT09ICdmaWxlOicpIHtcbiAgICBpZiAoc2xhc2hlc0NvdW50ID49IDIpIHtcbiAgICAgIHJlc3QgPSByZXN0LnNsaWNlKDIpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc1NwZWNpYWwocHJvdG9jb2wpKSB7XG4gICAgcmVzdCA9IG1hdGNoWzRdO1xuICB9IGVsc2UgaWYgKHByb3RvY29sKSB7XG4gICAgaWYgKGZvcndhcmRTbGFzaGVzKSB7XG4gICAgICByZXN0ID0gcmVzdC5zbGljZSgyKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoc2xhc2hlc0NvdW50ID49IDIgJiYgaXNTcGVjaWFsKGxvY2F0aW9uLnByb3RvY29sKSkge1xuICAgIHJlc3QgPSBtYXRjaFs0XTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcHJvdG9jb2w6IHByb3RvY29sLFxuICAgIHNsYXNoZXM6IGZvcndhcmRTbGFzaGVzIHx8IGlzU3BlY2lhbChwcm90b2NvbCksXG4gICAgc2xhc2hlc0NvdW50OiBzbGFzaGVzQ291bnQsXG4gICAgcmVzdDogcmVzdFxuICB9O1xufVxuXG4vKipcbiAqIFJlc29sdmUgYSByZWxhdGl2ZSBVUkwgcGF0aG5hbWUgYWdhaW5zdCBhIGJhc2UgVVJMIHBhdGhuYW1lLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSByZWxhdGl2ZSBQYXRobmFtZSBvZiB0aGUgcmVsYXRpdmUgVVJMLlxuICogQHBhcmFtIHtTdHJpbmd9IGJhc2UgUGF0aG5hbWUgb2YgdGhlIGJhc2UgVVJMLlxuICogQHJldHVybiB7U3RyaW5nfSBSZXNvbHZlZCBwYXRobmFtZS5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmUocmVsYXRpdmUsIGJhc2UpIHtcbiAgaWYgKHJlbGF0aXZlID09PSAnJykgcmV0dXJuIGJhc2U7XG5cbiAgdmFyIHBhdGggPSAoYmFzZSB8fCAnLycpLnNwbGl0KCcvJykuc2xpY2UoMCwgLTEpLmNvbmNhdChyZWxhdGl2ZS5zcGxpdCgnLycpKVxuICAgICwgaSA9IHBhdGgubGVuZ3RoXG4gICAgLCBsYXN0ID0gcGF0aFtpIC0gMV1cbiAgICAsIHVuc2hpZnQgPSBmYWxzZVxuICAgICwgdXAgPSAwO1xuXG4gIHdoaWxlIChpLS0pIHtcbiAgICBpZiAocGF0aFtpXSA9PT0gJy4nKSB7XG4gICAgICBwYXRoLnNwbGljZShpLCAxKTtcbiAgICB9IGVsc2UgaWYgKHBhdGhbaV0gPT09ICcuLicpIHtcbiAgICAgIHBhdGguc3BsaWNlKGksIDEpO1xuICAgICAgdXArKztcbiAgICB9IGVsc2UgaWYgKHVwKSB7XG4gICAgICBpZiAoaSA9PT0gMCkgdW5zaGlmdCA9IHRydWU7XG4gICAgICBwYXRoLnNwbGljZShpLCAxKTtcbiAgICAgIHVwLS07XG4gICAgfVxuICB9XG5cbiAgaWYgKHVuc2hpZnQpIHBhdGgudW5zaGlmdCgnJyk7XG4gIGlmIChsYXN0ID09PSAnLicgfHwgbGFzdCA9PT0gJy4uJykgcGF0aC5wdXNoKCcnKTtcblxuICByZXR1cm4gcGF0aC5qb2luKCcvJyk7XG59XG5cbi8qKlxuICogVGhlIGFjdHVhbCBVUkwgaW5zdGFuY2UuIEluc3RlYWQgb2YgcmV0dXJuaW5nIGFuIG9iamVjdCB3ZSd2ZSBvcHRlZC1pbiB0b1xuICogY3JlYXRlIGFuIGFjdHVhbCBjb25zdHJ1Y3RvciBhcyBpdCdzIG11Y2ggbW9yZSBtZW1vcnkgZWZmaWNpZW50IGFuZFxuICogZmFzdGVyIGFuZCBpdCBwbGVhc2VzIG15IE9DRC5cbiAqXG4gKiBJdCBpcyB3b3J0aCBub3RpbmcgdGhhdCB3ZSBzaG91bGQgbm90IHVzZSBgVVJMYCBhcyBjbGFzcyBuYW1lIHRvIHByZXZlbnRcbiAqIGNsYXNoZXMgd2l0aCB0aGUgZ2xvYmFsIFVSTCBpbnN0YW5jZSB0aGF0IGdvdCBpbnRyb2R1Y2VkIGluIGJyb3dzZXJzLlxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtTdHJpbmd9IGFkZHJlc3MgVVJMIHdlIHdhbnQgdG8gcGFyc2UuXG4gKiBAcGFyYW0ge09iamVjdHxTdHJpbmd9IFtsb2NhdGlvbl0gTG9jYXRpb24gZGVmYXVsdHMgZm9yIHJlbGF0aXZlIHBhdGhzLlxuICogQHBhcmFtIHtCb29sZWFufEZ1bmN0aW9ufSBbcGFyc2VyXSBQYXJzZXIgZm9yIHRoZSBxdWVyeSBzdHJpbmcuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBVcmwoYWRkcmVzcywgbG9jYXRpb24sIHBhcnNlcikge1xuICBhZGRyZXNzID0gdHJpbUxlZnQoYWRkcmVzcyk7XG4gIGFkZHJlc3MgPSBhZGRyZXNzLnJlcGxhY2UoQ1JIVExGLCAnJyk7XG5cbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFVybCkpIHtcbiAgICByZXR1cm4gbmV3IFVybChhZGRyZXNzLCBsb2NhdGlvbiwgcGFyc2VyKTtcbiAgfVxuXG4gIHZhciByZWxhdGl2ZSwgZXh0cmFjdGVkLCBwYXJzZSwgaW5zdHJ1Y3Rpb24sIGluZGV4LCBrZXlcbiAgICAsIGluc3RydWN0aW9ucyA9IHJ1bGVzLnNsaWNlKClcbiAgICAsIHR5cGUgPSB0eXBlb2YgbG9jYXRpb25cbiAgICAsIHVybCA9IHRoaXNcbiAgICAsIGkgPSAwO1xuXG4gIC8vXG4gIC8vIFRoZSBmb2xsb3dpbmcgaWYgc3RhdGVtZW50cyBhbGxvd3MgdGhpcyBtb2R1bGUgdHdvIGhhdmUgY29tcGF0aWJpbGl0eSB3aXRoXG4gIC8vIDIgZGlmZmVyZW50IEFQSTpcbiAgLy9cbiAgLy8gMS4gTm9kZS5qcydzIGB1cmwucGFyc2VgIGFwaSB3aGljaCBhY2NlcHRzIGEgVVJMLCBib29sZWFuIGFzIGFyZ3VtZW50c1xuICAvLyAgICB3aGVyZSB0aGUgYm9vbGVhbiBpbmRpY2F0ZXMgdGhhdCB0aGUgcXVlcnkgc3RyaW5nIHNob3VsZCBhbHNvIGJlIHBhcnNlZC5cbiAgLy9cbiAgLy8gMi4gVGhlIGBVUkxgIGludGVyZmFjZSBvZiB0aGUgYnJvd3NlciB3aGljaCBhY2NlcHRzIGEgVVJMLCBvYmplY3QgYXNcbiAgLy8gICAgYXJndW1lbnRzLiBUaGUgc3VwcGxpZWQgb2JqZWN0IHdpbGwgYmUgdXNlZCBhcyBkZWZhdWx0IHZhbHVlcyAvIGZhbGwtYmFja1xuICAvLyAgICBmb3IgcmVsYXRpdmUgcGF0aHMuXG4gIC8vXG4gIGlmICgnb2JqZWN0JyAhPT0gdHlwZSAmJiAnc3RyaW5nJyAhPT0gdHlwZSkge1xuICAgIHBhcnNlciA9IGxvY2F0aW9uO1xuICAgIGxvY2F0aW9uID0gbnVsbDtcbiAgfVxuXG4gIGlmIChwYXJzZXIgJiYgJ2Z1bmN0aW9uJyAhPT0gdHlwZW9mIHBhcnNlcikgcGFyc2VyID0gcXMucGFyc2U7XG5cbiAgbG9jYXRpb24gPSBsb2xjYXRpb24obG9jYXRpb24pO1xuXG4gIC8vXG4gIC8vIEV4dHJhY3QgcHJvdG9jb2wgaW5mb3JtYXRpb24gYmVmb3JlIHJ1bm5pbmcgdGhlIGluc3RydWN0aW9ucy5cbiAgLy9cbiAgZXh0cmFjdGVkID0gZXh0cmFjdFByb3RvY29sKGFkZHJlc3MgfHwgJycsIGxvY2F0aW9uKTtcbiAgcmVsYXRpdmUgPSAhZXh0cmFjdGVkLnByb3RvY29sICYmICFleHRyYWN0ZWQuc2xhc2hlcztcbiAgdXJsLnNsYXNoZXMgPSBleHRyYWN0ZWQuc2xhc2hlcyB8fCByZWxhdGl2ZSAmJiBsb2NhdGlvbi5zbGFzaGVzO1xuICB1cmwucHJvdG9jb2wgPSBleHRyYWN0ZWQucHJvdG9jb2wgfHwgbG9jYXRpb24ucHJvdG9jb2wgfHwgJyc7XG4gIGFkZHJlc3MgPSBleHRyYWN0ZWQucmVzdDtcblxuICAvL1xuICAvLyBXaGVuIHRoZSBhdXRob3JpdHkgY29tcG9uZW50IGlzIGFic2VudCB0aGUgVVJMIHN0YXJ0cyB3aXRoIGEgcGF0aFxuICAvLyBjb21wb25lbnQuXG4gIC8vXG4gIGlmIChcbiAgICBleHRyYWN0ZWQucHJvdG9jb2wgPT09ICdmaWxlOicgJiYgKFxuICAgICAgZXh0cmFjdGVkLnNsYXNoZXNDb3VudCAhPT0gMiB8fCB3aW5kb3dzRHJpdmVMZXR0ZXIudGVzdChhZGRyZXNzKSkgfHxcbiAgICAoIWV4dHJhY3RlZC5zbGFzaGVzICYmXG4gICAgICAoZXh0cmFjdGVkLnByb3RvY29sIHx8XG4gICAgICAgIGV4dHJhY3RlZC5zbGFzaGVzQ291bnQgPCAyIHx8XG4gICAgICAgICFpc1NwZWNpYWwodXJsLnByb3RvY29sKSkpXG4gICkge1xuICAgIGluc3RydWN0aW9uc1szXSA9IFsvKC4qKS8sICdwYXRobmFtZSddO1xuICB9XG5cbiAgZm9yICg7IGkgPCBpbnN0cnVjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICBpbnN0cnVjdGlvbiA9IGluc3RydWN0aW9uc1tpXTtcblxuICAgIGlmICh0eXBlb2YgaW5zdHJ1Y3Rpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGFkZHJlc3MgPSBpbnN0cnVjdGlvbihhZGRyZXNzLCB1cmwpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgcGFyc2UgPSBpbnN0cnVjdGlvblswXTtcbiAgICBrZXkgPSBpbnN0cnVjdGlvblsxXTtcblxuICAgIGlmIChwYXJzZSAhPT0gcGFyc2UpIHtcbiAgICAgIHVybFtrZXldID0gYWRkcmVzcztcbiAgICB9IGVsc2UgaWYgKCdzdHJpbmcnID09PSB0eXBlb2YgcGFyc2UpIHtcbiAgICAgIGluZGV4ID0gcGFyc2UgPT09ICdAJ1xuICAgICAgICA/IGFkZHJlc3MubGFzdEluZGV4T2YocGFyc2UpXG4gICAgICAgIDogYWRkcmVzcy5pbmRleE9mKHBhcnNlKTtcblxuICAgICAgaWYgKH5pbmRleCkge1xuICAgICAgICBpZiAoJ251bWJlcicgPT09IHR5cGVvZiBpbnN0cnVjdGlvblsyXSkge1xuICAgICAgICAgIHVybFtrZXldID0gYWRkcmVzcy5zbGljZSgwLCBpbmRleCk7XG4gICAgICAgICAgYWRkcmVzcyA9IGFkZHJlc3Muc2xpY2UoaW5kZXggKyBpbnN0cnVjdGlvblsyXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdXJsW2tleV0gPSBhZGRyZXNzLnNsaWNlKGluZGV4KTtcbiAgICAgICAgICBhZGRyZXNzID0gYWRkcmVzcy5zbGljZSgwLCBpbmRleCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKChpbmRleCA9IHBhcnNlLmV4ZWMoYWRkcmVzcykpKSB7XG4gICAgICB1cmxba2V5XSA9IGluZGV4WzFdO1xuICAgICAgYWRkcmVzcyA9IGFkZHJlc3Muc2xpY2UoMCwgaW5kZXguaW5kZXgpO1xuICAgIH1cblxuICAgIHVybFtrZXldID0gdXJsW2tleV0gfHwgKFxuICAgICAgcmVsYXRpdmUgJiYgaW5zdHJ1Y3Rpb25bM10gPyBsb2NhdGlvbltrZXldIHx8ICcnIDogJydcbiAgICApO1xuXG4gICAgLy9cbiAgICAvLyBIb3N0bmFtZSwgaG9zdCBhbmQgcHJvdG9jb2wgc2hvdWxkIGJlIGxvd2VyY2FzZWQgc28gdGhleSBjYW4gYmUgdXNlZCB0b1xuICAgIC8vIGNyZWF0ZSBhIHByb3BlciBgb3JpZ2luYC5cbiAgICAvL1xuICAgIGlmIChpbnN0cnVjdGlvbls0XSkgdXJsW2tleV0gPSB1cmxba2V5XS50b0xvd2VyQ2FzZSgpO1xuICB9XG5cbiAgLy9cbiAgLy8gQWxzbyBwYXJzZSB0aGUgc3VwcGxpZWQgcXVlcnkgc3RyaW5nIGluIHRvIGFuIG9iamVjdC4gSWYgd2UncmUgc3VwcGxpZWRcbiAgLy8gd2l0aCBhIGN1c3RvbSBwYXJzZXIgYXMgZnVuY3Rpb24gdXNlIHRoYXQgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBidWlsZC1pblxuICAvLyBwYXJzZXIuXG4gIC8vXG4gIGlmIChwYXJzZXIpIHVybC5xdWVyeSA9IHBhcnNlcih1cmwucXVlcnkpO1xuXG4gIC8vXG4gIC8vIElmIHRoZSBVUkwgaXMgcmVsYXRpdmUsIHJlc29sdmUgdGhlIHBhdGhuYW1lIGFnYWluc3QgdGhlIGJhc2UgVVJMLlxuICAvL1xuICBpZiAoXG4gICAgICByZWxhdGl2ZVxuICAgICYmIGxvY2F0aW9uLnNsYXNoZXNcbiAgICAmJiB1cmwucGF0aG5hbWUuY2hhckF0KDApICE9PSAnLydcbiAgICAmJiAodXJsLnBhdGhuYW1lICE9PSAnJyB8fCBsb2NhdGlvbi5wYXRobmFtZSAhPT0gJycpXG4gICkge1xuICAgIHVybC5wYXRobmFtZSA9IHJlc29sdmUodXJsLnBhdGhuYW1lLCBsb2NhdGlvbi5wYXRobmFtZSk7XG4gIH1cblxuICAvL1xuICAvLyBEZWZhdWx0IHRvIGEgLyBmb3IgcGF0aG5hbWUgaWYgbm9uZSBleGlzdHMuIFRoaXMgbm9ybWFsaXplcyB0aGUgVVJMXG4gIC8vIHRvIGFsd2F5cyBoYXZlIGEgL1xuICAvL1xuICBpZiAodXJsLnBhdGhuYW1lLmNoYXJBdCgwKSAhPT0gJy8nICYmIGlzU3BlY2lhbCh1cmwucHJvdG9jb2wpKSB7XG4gICAgdXJsLnBhdGhuYW1lID0gJy8nICsgdXJsLnBhdGhuYW1lO1xuICB9XG5cbiAgLy9cbiAgLy8gV2Ugc2hvdWxkIG5vdCBhZGQgcG9ydCBudW1iZXJzIGlmIHRoZXkgYXJlIGFscmVhZHkgdGhlIGRlZmF1bHQgcG9ydCBudW1iZXJcbiAgLy8gZm9yIGEgZ2l2ZW4gcHJvdG9jb2wuIEFzIHRoZSBob3N0IGFsc28gY29udGFpbnMgdGhlIHBvcnQgbnVtYmVyIHdlJ3JlIGdvaW5nXG4gIC8vIG92ZXJyaWRlIGl0IHdpdGggdGhlIGhvc3RuYW1lIHdoaWNoIGNvbnRhaW5zIG5vIHBvcnQgbnVtYmVyLlxuICAvL1xuICBpZiAoIXJlcXVpcmVkKHVybC5wb3J0LCB1cmwucHJvdG9jb2wpKSB7XG4gICAgdXJsLmhvc3QgPSB1cmwuaG9zdG5hbWU7XG4gICAgdXJsLnBvcnQgPSAnJztcbiAgfVxuXG4gIC8vXG4gIC8vIFBhcnNlIGRvd24gdGhlIGBhdXRoYCBmb3IgdGhlIHVzZXJuYW1lIGFuZCBwYXNzd29yZC5cbiAgLy9cbiAgdXJsLnVzZXJuYW1lID0gdXJsLnBhc3N3b3JkID0gJyc7XG5cbiAgaWYgKHVybC5hdXRoKSB7XG4gICAgaW5kZXggPSB1cmwuYXV0aC5pbmRleE9mKCc6Jyk7XG5cbiAgICBpZiAofmluZGV4KSB7XG4gICAgICB1cmwudXNlcm5hbWUgPSB1cmwuYXV0aC5zbGljZSgwLCBpbmRleCk7XG4gICAgICB1cmwudXNlcm5hbWUgPSBlbmNvZGVVUklDb21wb25lbnQoZGVjb2RlVVJJQ29tcG9uZW50KHVybC51c2VybmFtZSkpO1xuXG4gICAgICB1cmwucGFzc3dvcmQgPSB1cmwuYXV0aC5zbGljZShpbmRleCArIDEpO1xuICAgICAgdXJsLnBhc3N3b3JkID0gZW5jb2RlVVJJQ29tcG9uZW50KGRlY29kZVVSSUNvbXBvbmVudCh1cmwucGFzc3dvcmQpKVxuICAgIH0gZWxzZSB7XG4gICAgICB1cmwudXNlcm5hbWUgPSBlbmNvZGVVUklDb21wb25lbnQoZGVjb2RlVVJJQ29tcG9uZW50KHVybC5hdXRoKSk7XG4gICAgfVxuXG4gICAgdXJsLmF1dGggPSB1cmwucGFzc3dvcmQgPyB1cmwudXNlcm5hbWUgKyc6JysgdXJsLnBhc3N3b3JkIDogdXJsLnVzZXJuYW1lO1xuICB9XG5cbiAgdXJsLm9yaWdpbiA9IHVybC5wcm90b2NvbCAhPT0gJ2ZpbGU6JyAmJiBpc1NwZWNpYWwodXJsLnByb3RvY29sKSAmJiB1cmwuaG9zdFxuICAgID8gdXJsLnByb3RvY29sICsnLy8nKyB1cmwuaG9zdFxuICAgIDogJ251bGwnO1xuXG4gIC8vXG4gIC8vIFRoZSBocmVmIGlzIGp1c3QgdGhlIGNvbXBpbGVkIHJlc3VsdC5cbiAgLy9cbiAgdXJsLmhyZWYgPSB1cmwudG9TdHJpbmcoKTtcbn1cblxuLyoqXG4gKiBUaGlzIGlzIGNvbnZlbmllbmNlIG1ldGhvZCBmb3IgY2hhbmdpbmcgcHJvcGVydGllcyBpbiB0aGUgVVJMIGluc3RhbmNlIHRvXG4gKiBpbnN1cmUgdGhhdCB0aGV5IGFsbCBwcm9wYWdhdGUgY29ycmVjdGx5LlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBwYXJ0ICAgICAgICAgIFByb3BlcnR5IHdlIG5lZWQgdG8gYWRqdXN0LlxuICogQHBhcmFtIHtNaXhlZH0gdmFsdWUgICAgICAgICAgVGhlIG5ld2x5IGFzc2lnbmVkIHZhbHVlLlxuICogQHBhcmFtIHtCb29sZWFufEZ1bmN0aW9ufSBmbiAgV2hlbiBzZXR0aW5nIHRoZSBxdWVyeSwgaXQgd2lsbCBiZSB0aGUgZnVuY3Rpb25cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWQgdG8gcGFyc2UgdGhlIHF1ZXJ5LlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hlbiBzZXR0aW5nIHRoZSBwcm90b2NvbCwgZG91YmxlIHNsYXNoIHdpbGwgYmVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZWQgZnJvbSB0aGUgZmluYWwgdXJsIGlmIGl0IGlzIHRydWUuXG4gKiBAcmV0dXJucyB7VVJMfSBVUkwgaW5zdGFuY2UgZm9yIGNoYWluaW5nLlxuICogQHB1YmxpY1xuICovXG5mdW5jdGlvbiBzZXQocGFydCwgdmFsdWUsIGZuKSB7XG4gIHZhciB1cmwgPSB0aGlzO1xuXG4gIHN3aXRjaCAocGFydCkge1xuICAgIGNhc2UgJ3F1ZXJ5JzpcbiAgICAgIGlmICgnc3RyaW5nJyA9PT0gdHlwZW9mIHZhbHVlICYmIHZhbHVlLmxlbmd0aCkge1xuICAgICAgICB2YWx1ZSA9IChmbiB8fCBxcy5wYXJzZSkodmFsdWUpO1xuICAgICAgfVxuXG4gICAgICB1cmxbcGFydF0gPSB2YWx1ZTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAncG9ydCc6XG4gICAgICB1cmxbcGFydF0gPSB2YWx1ZTtcblxuICAgICAgaWYgKCFyZXF1aXJlZCh2YWx1ZSwgdXJsLnByb3RvY29sKSkge1xuICAgICAgICB1cmwuaG9zdCA9IHVybC5ob3N0bmFtZTtcbiAgICAgICAgdXJsW3BhcnRdID0gJyc7XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlKSB7XG4gICAgICAgIHVybC5ob3N0ID0gdXJsLmhvc3RuYW1lICsnOicrIHZhbHVlO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2hvc3RuYW1lJzpcbiAgICAgIHVybFtwYXJ0XSA9IHZhbHVlO1xuXG4gICAgICBpZiAodXJsLnBvcnQpIHZhbHVlICs9ICc6JysgdXJsLnBvcnQ7XG4gICAgICB1cmwuaG9zdCA9IHZhbHVlO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdob3N0JzpcbiAgICAgIHVybFtwYXJ0XSA9IHZhbHVlO1xuXG4gICAgICBpZiAocG9ydC50ZXN0KHZhbHVlKSkge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLnNwbGl0KCc6Jyk7XG4gICAgICAgIHVybC5wb3J0ID0gdmFsdWUucG9wKCk7XG4gICAgICAgIHVybC5ob3N0bmFtZSA9IHZhbHVlLmpvaW4oJzonKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVybC5ob3N0bmFtZSA9IHZhbHVlO1xuICAgICAgICB1cmwucG9ydCA9ICcnO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3Byb3RvY29sJzpcbiAgICAgIHVybC5wcm90b2NvbCA9IHZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gICAgICB1cmwuc2xhc2hlcyA9ICFmbjtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAncGF0aG5hbWUnOlxuICAgIGNhc2UgJ2hhc2gnOlxuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIHZhciBjaGFyID0gcGFydCA9PT0gJ3BhdGhuYW1lJyA/ICcvJyA6ICcjJztcbiAgICAgICAgdXJsW3BhcnRdID0gdmFsdWUuY2hhckF0KDApICE9PSBjaGFyID8gY2hhciArIHZhbHVlIDogdmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB1cmxbcGFydF0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAndXNlcm5hbWUnOlxuICAgIGNhc2UgJ3Bhc3N3b3JkJzpcbiAgICAgIHVybFtwYXJ0XSA9IGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2F1dGgnOlxuICAgICAgdmFyIGluZGV4ID0gdmFsdWUuaW5kZXhPZignOicpO1xuXG4gICAgICBpZiAofmluZGV4KSB7XG4gICAgICAgIHVybC51c2VybmFtZSA9IHZhbHVlLnNsaWNlKDAsIGluZGV4KTtcbiAgICAgICAgdXJsLnVzZXJuYW1lID0gZW5jb2RlVVJJQ29tcG9uZW50KGRlY29kZVVSSUNvbXBvbmVudCh1cmwudXNlcm5hbWUpKTtcblxuICAgICAgICB1cmwucGFzc3dvcmQgPSB2YWx1ZS5zbGljZShpbmRleCArIDEpO1xuICAgICAgICB1cmwucGFzc3dvcmQgPSBlbmNvZGVVUklDb21wb25lbnQoZGVjb2RlVVJJQ29tcG9uZW50KHVybC5wYXNzd29yZCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdXJsLnVzZXJuYW1lID0gZW5jb2RlVVJJQ29tcG9uZW50KGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkpO1xuICAgICAgfVxuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBydWxlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBpbnMgPSBydWxlc1tpXTtcblxuICAgIGlmIChpbnNbNF0pIHVybFtpbnNbMV1dID0gdXJsW2luc1sxXV0udG9Mb3dlckNhc2UoKTtcbiAgfVxuXG4gIHVybC5hdXRoID0gdXJsLnBhc3N3b3JkID8gdXJsLnVzZXJuYW1lICsnOicrIHVybC5wYXNzd29yZCA6IHVybC51c2VybmFtZTtcblxuICB1cmwub3JpZ2luID0gdXJsLnByb3RvY29sICE9PSAnZmlsZTonICYmIGlzU3BlY2lhbCh1cmwucHJvdG9jb2wpICYmIHVybC5ob3N0XG4gICAgPyB1cmwucHJvdG9jb2wgKycvLycrIHVybC5ob3N0XG4gICAgOiAnbnVsbCc7XG5cbiAgdXJsLmhyZWYgPSB1cmwudG9TdHJpbmcoKTtcblxuICByZXR1cm4gdXJsO1xufVxuXG4vKipcbiAqIFRyYW5zZm9ybSB0aGUgcHJvcGVydGllcyBiYWNrIGluIHRvIGEgdmFsaWQgYW5kIGZ1bGwgVVJMIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdHJpbmdpZnkgT3B0aW9uYWwgcXVlcnkgc3RyaW5naWZ5IGZ1bmN0aW9uLlxuICogQHJldHVybnMge1N0cmluZ30gQ29tcGlsZWQgdmVyc2lvbiBvZiB0aGUgVVJMLlxuICogQHB1YmxpY1xuICovXG5mdW5jdGlvbiB0b1N0cmluZyhzdHJpbmdpZnkpIHtcbiAgaWYgKCFzdHJpbmdpZnkgfHwgJ2Z1bmN0aW9uJyAhPT0gdHlwZW9mIHN0cmluZ2lmeSkgc3RyaW5naWZ5ID0gcXMuc3RyaW5naWZ5O1xuXG4gIHZhciBxdWVyeVxuICAgICwgdXJsID0gdGhpc1xuICAgICwgaG9zdCA9IHVybC5ob3N0XG4gICAgLCBwcm90b2NvbCA9IHVybC5wcm90b2NvbDtcblxuICBpZiAocHJvdG9jb2wgJiYgcHJvdG9jb2wuY2hhckF0KHByb3RvY29sLmxlbmd0aCAtIDEpICE9PSAnOicpIHByb3RvY29sICs9ICc6JztcblxuICB2YXIgcmVzdWx0ID1cbiAgICBwcm90b2NvbCArXG4gICAgKCh1cmwucHJvdG9jb2wgJiYgdXJsLnNsYXNoZXMpIHx8IGlzU3BlY2lhbCh1cmwucHJvdG9jb2wpID8gJy8vJyA6ICcnKTtcblxuICBpZiAodXJsLnVzZXJuYW1lKSB7XG4gICAgcmVzdWx0ICs9IHVybC51c2VybmFtZTtcbiAgICBpZiAodXJsLnBhc3N3b3JkKSByZXN1bHQgKz0gJzonKyB1cmwucGFzc3dvcmQ7XG4gICAgcmVzdWx0ICs9ICdAJztcbiAgfSBlbHNlIGlmICh1cmwucGFzc3dvcmQpIHtcbiAgICByZXN1bHQgKz0gJzonKyB1cmwucGFzc3dvcmQ7XG4gICAgcmVzdWx0ICs9ICdAJztcbiAgfSBlbHNlIGlmIChcbiAgICB1cmwucHJvdG9jb2wgIT09ICdmaWxlOicgJiZcbiAgICBpc1NwZWNpYWwodXJsLnByb3RvY29sKSAmJlxuICAgICFob3N0ICYmXG4gICAgdXJsLnBhdGhuYW1lICE9PSAnLydcbiAgKSB7XG4gICAgLy9cbiAgICAvLyBBZGQgYmFjayB0aGUgZW1wdHkgdXNlcmluZm8sIG90aGVyd2lzZSB0aGUgb3JpZ2luYWwgaW52YWxpZCBVUkxcbiAgICAvLyBtaWdodCBiZSB0cmFuc2Zvcm1lZCBpbnRvIGEgdmFsaWQgb25lIHdpdGggYHVybC5wYXRobmFtZWAgYXMgaG9zdC5cbiAgICAvL1xuICAgIHJlc3VsdCArPSAnQCc7XG4gIH1cblxuICAvL1xuICAvLyBUcmFpbGluZyBjb2xvbiBpcyByZW1vdmVkIGZyb20gYHVybC5ob3N0YCB3aGVuIGl0IGlzIHBhcnNlZC4gSWYgaXQgc3RpbGxcbiAgLy8gZW5kcyB3aXRoIGEgY29sb24sIHRoZW4gYWRkIGJhY2sgdGhlIHRyYWlsaW5nIGNvbG9uIHRoYXQgd2FzIHJlbW92ZWQuIFRoaXNcbiAgLy8gcHJldmVudHMgYW4gaW52YWxpZCBVUkwgZnJvbSBiZWluZyB0cmFuc2Zvcm1lZCBpbnRvIGEgdmFsaWQgb25lLlxuICAvL1xuICBpZiAoaG9zdFtob3N0Lmxlbmd0aCAtIDFdID09PSAnOicgfHwgKHBvcnQudGVzdCh1cmwuaG9zdG5hbWUpICYmICF1cmwucG9ydCkpIHtcbiAgICBob3N0ICs9ICc6JztcbiAgfVxuXG4gIHJlc3VsdCArPSBob3N0ICsgdXJsLnBhdGhuYW1lO1xuXG4gIHF1ZXJ5ID0gJ29iamVjdCcgPT09IHR5cGVvZiB1cmwucXVlcnkgPyBzdHJpbmdpZnkodXJsLnF1ZXJ5KSA6IHVybC5xdWVyeTtcbiAgaWYgKHF1ZXJ5KSByZXN1bHQgKz0gJz8nICE9PSBxdWVyeS5jaGFyQXQoMCkgPyAnPycrIHF1ZXJ5IDogcXVlcnk7XG5cbiAgaWYgKHVybC5oYXNoKSByZXN1bHQgKz0gdXJsLmhhc2g7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuVXJsLnByb3RvdHlwZSA9IHsgc2V0OiBzZXQsIHRvU3RyaW5nOiB0b1N0cmluZyB9O1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBVUkwgcGFyc2VyIGFuZCBzb21lIGFkZGl0aW9uYWwgcHJvcGVydGllcyB0aGF0IG1pZ2h0IGJlIHVzZWZ1bCBmb3Jcbi8vIG90aGVycyBvciB0ZXN0aW5nLlxuLy9cblVybC5leHRyYWN0UHJvdG9jb2wgPSBleHRyYWN0UHJvdG9jb2w7XG5VcmwubG9jYXRpb24gPSBsb2xjYXRpb247XG5VcmwudHJpbUxlZnQgPSB0cmltTGVmdDtcblVybC5xcyA9IHFzO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFVybDtcbiIsICIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuXHR2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5cbnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KCk7XG5cbnZhciBfcmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xuXG52YXIgX3JlYWN0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3JlYWN0KTtcblxudmFyIF9wcm9wVHlwZXMgPSByZXF1aXJlKCdwcm9wLXR5cGVzJyk7XG5cbnZhciBfcHJvcFR5cGVzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Byb3BUeXBlcyk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhvYmosIGtleXMpIHsgdmFyIHRhcmdldCA9IHt9OyBmb3IgKHZhciBpIGluIG9iaikgeyBpZiAoa2V5cy5pbmRleE9mKGkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGkpKSBjb250aW51ZTsgdGFyZ2V0W2ldID0gb2JqW2ldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSA/IGNhbGwgOiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxuXG52YXIgc2l6ZXJTdHlsZSA9IHtcblx0cG9zaXRpb246ICdhYnNvbHV0ZScsXG5cdHRvcDogMCxcblx0bGVmdDogMCxcblx0dmlzaWJpbGl0eTogJ2hpZGRlbicsXG5cdGhlaWdodDogMCxcblx0b3ZlcmZsb3c6ICdzY3JvbGwnLFxuXHR3aGl0ZVNwYWNlOiAncHJlJ1xufTtcblxudmFyIElOUFVUX1BST1BTX0JMQUNLTElTVCA9IFsnZXh0cmFXaWR0aCcsICdpbmplY3RTdHlsZXMnLCAnaW5wdXRDbGFzc05hbWUnLCAnaW5wdXRSZWYnLCAnaW5wdXRTdHlsZScsICdtaW5XaWR0aCcsICdvbkF1dG9zaXplJywgJ3BsYWNlaG9sZGVySXNNaW5XaWR0aCddO1xuXG52YXIgY2xlYW5JbnB1dFByb3BzID0gZnVuY3Rpb24gY2xlYW5JbnB1dFByb3BzKGlucHV0UHJvcHMpIHtcblx0SU5QVVRfUFJPUFNfQkxBQ0tMSVNULmZvckVhY2goZnVuY3Rpb24gKGZpZWxkKSB7XG5cdFx0cmV0dXJuIGRlbGV0ZSBpbnB1dFByb3BzW2ZpZWxkXTtcblx0fSk7XG5cdHJldHVybiBpbnB1dFByb3BzO1xufTtcblxudmFyIGNvcHlTdHlsZXMgPSBmdW5jdGlvbiBjb3B5U3R5bGVzKHN0eWxlcywgbm9kZSkge1xuXHRub2RlLnN0eWxlLmZvbnRTaXplID0gc3R5bGVzLmZvbnRTaXplO1xuXHRub2RlLnN0eWxlLmZvbnRGYW1pbHkgPSBzdHlsZXMuZm9udEZhbWlseTtcblx0bm9kZS5zdHlsZS5mb250V2VpZ2h0ID0gc3R5bGVzLmZvbnRXZWlnaHQ7XG5cdG5vZGUuc3R5bGUuZm9udFN0eWxlID0gc3R5bGVzLmZvbnRTdHlsZTtcblx0bm9kZS5zdHlsZS5sZXR0ZXJTcGFjaW5nID0gc3R5bGVzLmxldHRlclNwYWNpbmc7XG5cdG5vZGUuc3R5bGUudGV4dFRyYW5zZm9ybSA9IHN0eWxlcy50ZXh0VHJhbnNmb3JtO1xufTtcblxudmFyIGlzSUUgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cubmF2aWdhdG9yID8gL01TSUUgfFRyaWRlbnRcXC98RWRnZVxcLy8udGVzdCh3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCkgOiBmYWxzZTtcblxudmFyIGdlbmVyYXRlSWQgPSBmdW5jdGlvbiBnZW5lcmF0ZUlkKCkge1xuXHQvLyB3ZSBvbmx5IG5lZWQgYW4gYXV0by1nZW5lcmF0ZWQgSUQgZm9yIHN0eWxlc2hlZXQgaW5qZWN0aW9uLCB3aGljaCBpcyBvbmx5XG5cdC8vIHVzZWQgZm9yIElFLiBzbyBpZiB0aGUgYnJvd3NlciBpcyBub3QgSUUsIHRoaXMgc2hvdWxkIHJldHVybiB1bmRlZmluZWQuXG5cdHJldHVybiBpc0lFID8gJ18nICsgTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDIsIDEyKSA6IHVuZGVmaW5lZDtcbn07XG5cbnZhciBBdXRvc2l6ZUlucHV0ID0gZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcblx0X2luaGVyaXRzKEF1dG9zaXplSW5wdXQsIF9Db21wb25lbnQpO1xuXG5cdF9jcmVhdGVDbGFzcyhBdXRvc2l6ZUlucHV0LCBudWxsLCBbe1xuXHRcdGtleTogJ2dldERlcml2ZWRTdGF0ZUZyb21Qcm9wcycsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhwcm9wcywgc3RhdGUpIHtcblx0XHRcdHZhciBpZCA9IHByb3BzLmlkO1xuXG5cdFx0XHRyZXR1cm4gaWQgIT09IHN0YXRlLnByZXZJZCA/IHsgaW5wdXRJZDogaWQgfHwgZ2VuZXJhdGVJZCgpLCBwcmV2SWQ6IGlkIH0gOiBudWxsO1xuXHRcdH1cblx0fV0pO1xuXG5cdGZ1bmN0aW9uIEF1dG9zaXplSW5wdXQocHJvcHMpIHtcblx0XHRfY2xhc3NDYWxsQ2hlY2sodGhpcywgQXV0b3NpemVJbnB1dCk7XG5cblx0XHR2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoQXV0b3NpemVJbnB1dC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKEF1dG9zaXplSW5wdXQpKS5jYWxsKHRoaXMsIHByb3BzKSk7XG5cblx0XHRfdGhpcy5pbnB1dFJlZiA9IGZ1bmN0aW9uIChlbCkge1xuXHRcdFx0X3RoaXMuaW5wdXQgPSBlbDtcblx0XHRcdGlmICh0eXBlb2YgX3RoaXMucHJvcHMuaW5wdXRSZWYgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0X3RoaXMucHJvcHMuaW5wdXRSZWYoZWwpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRfdGhpcy5wbGFjZUhvbGRlclNpemVyUmVmID0gZnVuY3Rpb24gKGVsKSB7XG5cdFx0XHRfdGhpcy5wbGFjZUhvbGRlclNpemVyID0gZWw7XG5cdFx0fTtcblxuXHRcdF90aGlzLnNpemVyUmVmID0gZnVuY3Rpb24gKGVsKSB7XG5cdFx0XHRfdGhpcy5zaXplciA9IGVsO1xuXHRcdH07XG5cblx0XHRfdGhpcy5zdGF0ZSA9IHtcblx0XHRcdGlucHV0V2lkdGg6IHByb3BzLm1pbldpZHRoLFxuXHRcdFx0aW5wdXRJZDogcHJvcHMuaWQgfHwgZ2VuZXJhdGVJZCgpLFxuXHRcdFx0cHJldklkOiBwcm9wcy5pZFxuXHRcdH07XG5cdFx0cmV0dXJuIF90aGlzO1xuXHR9XG5cblx0X2NyZWF0ZUNsYXNzKEF1dG9zaXplSW5wdXQsIFt7XG5cdFx0a2V5OiAnY29tcG9uZW50RGlkTW91bnQnLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcblx0XHRcdHRoaXMubW91bnRlZCA9IHRydWU7XG5cdFx0XHR0aGlzLmNvcHlJbnB1dFN0eWxlcygpO1xuXHRcdFx0dGhpcy51cGRhdGVJbnB1dFdpZHRoKCk7XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAnY29tcG9uZW50RGlkVXBkYXRlJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKSB7XG5cdFx0XHRpZiAocHJldlN0YXRlLmlucHV0V2lkdGggIT09IHRoaXMuc3RhdGUuaW5wdXRXaWR0aCkge1xuXHRcdFx0XHRpZiAodHlwZW9mIHRoaXMucHJvcHMub25BdXRvc2l6ZSA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHRcdHRoaXMucHJvcHMub25BdXRvc2l6ZSh0aGlzLnN0YXRlLmlucHV0V2lkdGgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnVwZGF0ZUlucHV0V2lkdGgoKTtcblx0XHR9XG5cdH0sIHtcblx0XHRrZXk6ICdjb21wb25lbnRXaWxsVW5tb3VudCcsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuXHRcdFx0dGhpcy5tb3VudGVkID0gZmFsc2U7XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAnY29weUlucHV0U3R5bGVzJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gY29weUlucHV0U3R5bGVzKCkge1xuXHRcdFx0aWYgKCF0aGlzLm1vdW50ZWQgfHwgIXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdHZhciBpbnB1dFN0eWxlcyA9IHRoaXMuaW5wdXQgJiYgd2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5pbnB1dCk7XG5cdFx0XHRpZiAoIWlucHV0U3R5bGVzKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGNvcHlTdHlsZXMoaW5wdXRTdHlsZXMsIHRoaXMuc2l6ZXIpO1xuXHRcdFx0aWYgKHRoaXMucGxhY2VIb2xkZXJTaXplcikge1xuXHRcdFx0XHRjb3B5U3R5bGVzKGlucHV0U3R5bGVzLCB0aGlzLnBsYWNlSG9sZGVyU2l6ZXIpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSwge1xuXHRcdGtleTogJ3VwZGF0ZUlucHV0V2lkdGgnLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiB1cGRhdGVJbnB1dFdpZHRoKCkge1xuXHRcdFx0aWYgKCF0aGlzLm1vdW50ZWQgfHwgIXRoaXMuc2l6ZXIgfHwgdHlwZW9mIHRoaXMuc2l6ZXIuc2Nyb2xsV2lkdGggPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdHZhciBuZXdJbnB1dFdpZHRoID0gdm9pZCAwO1xuXHRcdFx0aWYgKHRoaXMucHJvcHMucGxhY2Vob2xkZXIgJiYgKCF0aGlzLnByb3BzLnZhbHVlIHx8IHRoaXMucHJvcHMudmFsdWUgJiYgdGhpcy5wcm9wcy5wbGFjZWhvbGRlcklzTWluV2lkdGgpKSB7XG5cdFx0XHRcdG5ld0lucHV0V2lkdGggPSBNYXRoLm1heCh0aGlzLnNpemVyLnNjcm9sbFdpZHRoLCB0aGlzLnBsYWNlSG9sZGVyU2l6ZXIuc2Nyb2xsV2lkdGgpICsgMjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG5ld0lucHV0V2lkdGggPSB0aGlzLnNpemVyLnNjcm9sbFdpZHRoICsgMjtcblx0XHRcdH1cblx0XHRcdC8vIGFkZCBleHRyYVdpZHRoIHRvIHRoZSBkZXRlY3RlZCB3aWR0aC4gZm9yIG51bWJlciB0eXBlcywgdGhpcyBkZWZhdWx0cyB0byAxNiB0byBhbGxvdyBmb3IgdGhlIHN0ZXBwZXIgVUlcblx0XHRcdHZhciBleHRyYVdpZHRoID0gdGhpcy5wcm9wcy50eXBlID09PSAnbnVtYmVyJyAmJiB0aGlzLnByb3BzLmV4dHJhV2lkdGggPT09IHVuZGVmaW5lZCA/IDE2IDogcGFyc2VJbnQodGhpcy5wcm9wcy5leHRyYVdpZHRoKSB8fCAwO1xuXHRcdFx0bmV3SW5wdXRXaWR0aCArPSBleHRyYVdpZHRoO1xuXHRcdFx0aWYgKG5ld0lucHV0V2lkdGggPCB0aGlzLnByb3BzLm1pbldpZHRoKSB7XG5cdFx0XHRcdG5ld0lucHV0V2lkdGggPSB0aGlzLnByb3BzLm1pbldpZHRoO1xuXHRcdFx0fVxuXHRcdFx0aWYgKG5ld0lucHV0V2lkdGggIT09IHRoaXMuc3RhdGUuaW5wdXRXaWR0aCkge1xuXHRcdFx0XHR0aGlzLnNldFN0YXRlKHtcblx0XHRcdFx0XHRpbnB1dFdpZHRoOiBuZXdJbnB1dFdpZHRoXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fSwge1xuXHRcdGtleTogJ2dldElucHV0Jyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gZ2V0SW5wdXQoKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5pbnB1dDtcblx0XHR9XG5cdH0sIHtcblx0XHRrZXk6ICdmb2N1cycsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGZvY3VzKCkge1xuXHRcdFx0dGhpcy5pbnB1dC5mb2N1cygpO1xuXHRcdH1cblx0fSwge1xuXHRcdGtleTogJ2JsdXInLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiBibHVyKCkge1xuXHRcdFx0dGhpcy5pbnB1dC5ibHVyKCk7XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAnc2VsZWN0Jyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gc2VsZWN0KCkge1xuXHRcdFx0dGhpcy5pbnB1dC5zZWxlY3QoKTtcblx0XHR9XG5cdH0sIHtcblx0XHRrZXk6ICdyZW5kZXJTdHlsZXMnLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiByZW5kZXJTdHlsZXMoKSB7XG5cdFx0XHQvLyB0aGlzIG1ldGhvZCBpbmplY3RzIHN0eWxlcyB0byBoaWRlIElFJ3MgY2xlYXIgaW5kaWNhdG9yLCB3aGljaCBtZXNzZXNcblx0XHRcdC8vIHdpdGggaW5wdXQgc2l6ZSBkZXRlY3Rpb24uIHRoZSBzdHlsZXNoZWV0IGlzIG9ubHkgaW5qZWN0ZWQgd2hlbiB0aGVcblx0XHRcdC8vIGJyb3dzZXIgaXMgSUUsIGFuZCBjYW4gYWxzbyBiZSBkaXNhYmxlZCBieSB0aGUgYGluamVjdFN0eWxlc2AgcHJvcC5cblx0XHRcdHZhciBpbmplY3RTdHlsZXMgPSB0aGlzLnByb3BzLmluamVjdFN0eWxlcztcblxuXHRcdFx0cmV0dXJuIGlzSUUgJiYgaW5qZWN0U3R5bGVzID8gX3JlYWN0Mi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJywgeyBkYW5nZXJvdXNseVNldElubmVySFRNTDoge1xuXHRcdFx0XHRcdF9faHRtbDogJ2lucHV0IycgKyB0aGlzLnN0YXRlLmlucHV0SWQgKyAnOjotbXMtY2xlYXIge2Rpc3BsYXk6IG5vbmU7fSdcblx0XHRcdFx0fSB9KSA6IG51bGw7XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAncmVuZGVyJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuXHRcdFx0dmFyIHNpemVyVmFsdWUgPSBbdGhpcy5wcm9wcy5kZWZhdWx0VmFsdWUsIHRoaXMucHJvcHMudmFsdWUsICcnXS5yZWR1Y2UoZnVuY3Rpb24gKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRWYWx1ZSkge1xuXHRcdFx0XHRpZiAocHJldmlvdXNWYWx1ZSAhPT0gbnVsbCAmJiBwcmV2aW91c1ZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRyZXR1cm4gcHJldmlvdXNWYWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gY3VycmVudFZhbHVlO1xuXHRcdFx0fSk7XG5cblx0XHRcdHZhciB3cmFwcGVyU3R5bGUgPSBfZXh0ZW5kcyh7fSwgdGhpcy5wcm9wcy5zdHlsZSk7XG5cdFx0XHRpZiAoIXdyYXBwZXJTdHlsZS5kaXNwbGF5KSB3cmFwcGVyU3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtYmxvY2snO1xuXG5cdFx0XHR2YXIgaW5wdXRTdHlsZSA9IF9leHRlbmRzKHtcblx0XHRcdFx0Ym94U2l6aW5nOiAnY29udGVudC1ib3gnLFxuXHRcdFx0XHR3aWR0aDogdGhpcy5zdGF0ZS5pbnB1dFdpZHRoICsgJ3B4J1xuXHRcdFx0fSwgdGhpcy5wcm9wcy5pbnB1dFN0eWxlKTtcblxuXHRcdFx0dmFyIGlucHV0UHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXModGhpcy5wcm9wcywgW10pO1xuXG5cdFx0XHRjbGVhbklucHV0UHJvcHMoaW5wdXRQcm9wcyk7XG5cdFx0XHRpbnB1dFByb3BzLmNsYXNzTmFtZSA9IHRoaXMucHJvcHMuaW5wdXRDbGFzc05hbWU7XG5cdFx0XHRpbnB1dFByb3BzLmlkID0gdGhpcy5zdGF0ZS5pbnB1dElkO1xuXHRcdFx0aW5wdXRQcm9wcy5zdHlsZSA9IGlucHV0U3R5bGU7XG5cblx0XHRcdHJldHVybiBfcmVhY3QyLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcblx0XHRcdFx0J2RpdicsXG5cdFx0XHRcdHsgY2xhc3NOYW1lOiB0aGlzLnByb3BzLmNsYXNzTmFtZSwgc3R5bGU6IHdyYXBwZXJTdHlsZSB9LFxuXHRcdFx0XHR0aGlzLnJlbmRlclN0eWxlcygpLFxuXHRcdFx0XHRfcmVhY3QyLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgnaW5wdXQnLCBfZXh0ZW5kcyh7fSwgaW5wdXRQcm9wcywgeyByZWY6IHRoaXMuaW5wdXRSZWYgfSkpLFxuXHRcdFx0XHRfcmVhY3QyLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcblx0XHRcdFx0XHQnZGl2Jyxcblx0XHRcdFx0XHR7IHJlZjogdGhpcy5zaXplclJlZiwgc3R5bGU6IHNpemVyU3R5bGUgfSxcblx0XHRcdFx0XHRzaXplclZhbHVlXG5cdFx0XHRcdCksXG5cdFx0XHRcdHRoaXMucHJvcHMucGxhY2Vob2xkZXIgPyBfcmVhY3QyLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcblx0XHRcdFx0XHQnZGl2Jyxcblx0XHRcdFx0XHR7IHJlZjogdGhpcy5wbGFjZUhvbGRlclNpemVyUmVmLCBzdHlsZTogc2l6ZXJTdHlsZSB9LFxuXHRcdFx0XHRcdHRoaXMucHJvcHMucGxhY2Vob2xkZXJcblx0XHRcdFx0KSA6IG51bGxcblx0XHRcdCk7XG5cdFx0fVxuXHR9XSk7XG5cblx0cmV0dXJuIEF1dG9zaXplSW5wdXQ7XG59KF9yZWFjdC5Db21wb25lbnQpO1xuXG5BdXRvc2l6ZUlucHV0LnByb3BUeXBlcyA9IHtcblx0Y2xhc3NOYW1lOiBfcHJvcFR5cGVzMi5kZWZhdWx0LnN0cmluZywgLy8gY2xhc3NOYW1lIGZvciB0aGUgb3V0ZXIgZWxlbWVudFxuXHRkZWZhdWx0VmFsdWU6IF9wcm9wVHlwZXMyLmRlZmF1bHQuYW55LCAvLyBkZWZhdWx0IGZpZWxkIHZhbHVlXG5cdGV4dHJhV2lkdGg6IF9wcm9wVHlwZXMyLmRlZmF1bHQub25lT2ZUeXBlKFsvLyBhZGRpdGlvbmFsIHdpZHRoIGZvciBpbnB1dCBlbGVtZW50XG5cdF9wcm9wVHlwZXMyLmRlZmF1bHQubnVtYmVyLCBfcHJvcFR5cGVzMi5kZWZhdWx0LnN0cmluZ10pLFxuXHRpZDogX3Byb3BUeXBlczIuZGVmYXVsdC5zdHJpbmcsIC8vIGlkIHRvIHVzZSBmb3IgdGhlIGlucHV0LCBjYW4gYmUgc2V0IGZvciBjb25zaXN0ZW50IHNuYXBzaG90c1xuXHRpbmplY3RTdHlsZXM6IF9wcm9wVHlwZXMyLmRlZmF1bHQuYm9vbCwgLy8gaW5qZWN0IHRoZSBjdXN0b20gc3R5bGVzaGVldCB0byBoaWRlIGNsZWFyIFVJLCBkZWZhdWx0cyB0byB0cnVlXG5cdGlucHV0Q2xhc3NOYW1lOiBfcHJvcFR5cGVzMi5kZWZhdWx0LnN0cmluZywgLy8gY2xhc3NOYW1lIGZvciB0aGUgaW5wdXQgZWxlbWVudFxuXHRpbnB1dFJlZjogX3Byb3BUeXBlczIuZGVmYXVsdC5mdW5jLCAvLyByZWYgY2FsbGJhY2sgZm9yIHRoZSBpbnB1dCBlbGVtZW50XG5cdGlucHV0U3R5bGU6IF9wcm9wVHlwZXMyLmRlZmF1bHQub2JqZWN0LCAvLyBjc3Mgc3R5bGVzIGZvciB0aGUgaW5wdXQgZWxlbWVudFxuXHRtaW5XaWR0aDogX3Byb3BUeXBlczIuZGVmYXVsdC5vbmVPZlR5cGUoWy8vIG1pbmltdW0gd2lkdGggZm9yIGlucHV0IGVsZW1lbnRcblx0X3Byb3BUeXBlczIuZGVmYXVsdC5udW1iZXIsIF9wcm9wVHlwZXMyLmRlZmF1bHQuc3RyaW5nXSksXG5cdG9uQXV0b3NpemU6IF9wcm9wVHlwZXMyLmRlZmF1bHQuZnVuYywgLy8gb25BdXRvc2l6ZSBoYW5kbGVyOiBmdW5jdGlvbihuZXdXaWR0aCkge31cblx0b25DaGFuZ2U6IF9wcm9wVHlwZXMyLmRlZmF1bHQuZnVuYywgLy8gb25DaGFuZ2UgaGFuZGxlcjogZnVuY3Rpb24oZXZlbnQpIHt9XG5cdHBsYWNlaG9sZGVyOiBfcHJvcFR5cGVzMi5kZWZhdWx0LnN0cmluZywgLy8gcGxhY2Vob2xkZXIgdGV4dFxuXHRwbGFjZWhvbGRlcklzTWluV2lkdGg6IF9wcm9wVHlwZXMyLmRlZmF1bHQuYm9vbCwgLy8gZG9uJ3QgY29sbGFwc2Ugc2l6ZSB0byBsZXNzIHRoYW4gdGhlIHBsYWNlaG9sZGVyXG5cdHN0eWxlOiBfcHJvcFR5cGVzMi5kZWZhdWx0Lm9iamVjdCwgLy8gY3NzIHN0eWxlcyBmb3IgdGhlIG91dGVyIGVsZW1lbnRcblx0dmFsdWU6IF9wcm9wVHlwZXMyLmRlZmF1bHQuYW55IC8vIGZpZWxkIHZhbHVlXG59O1xuQXV0b3NpemVJbnB1dC5kZWZhdWx0UHJvcHMgPSB7XG5cdG1pbldpZHRoOiAxLFxuXHRpbmplY3RTdHlsZXM6IHRydWVcbn07XG5cbmV4cG9ydHMuZGVmYXVsdCA9IEF1dG9zaXplSW5wdXQ7IiwgImltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuXG5pbXBvcnQgeyBPbHNBcGkgfSBmcm9tIFwiLi4vLi4vLi4vYXBpL09sc0FwaVwiO1xuaW1wb3J0IHsgRXVpQ29tYm9Cb3hPcHRpb25PcHRpb24gfSBmcm9tIFwiQGVsYXN0aWMvZXVpL3NyYy9jb21wb25lbnRzL2NvbWJvX2JveC90eXBlc1wiO1xuaW1wb3J0IHtcbiAgICBFdWlDb21ib0JveCxcbiAgICBldWlQYWxldHRlQ29sb3JCbGluZEJlaGluZFRleHQsXG4gICAgZXVpUGFsZXR0ZUNvbG9yQmxpbmQsXG4gICAgRXVpSGlnaGxpZ2h0LFxuICAgIEV1aUhlYWx0aCxcbiAgICBFdWlQcm92aWRlclxufSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQge1F1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyLCB1c2VRdWVyeX0gZnJvbSBcInJlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQge0JyZWFkY3J1bWJXaWRnZXR9IGZyb20gXCIuLi9NZXRhZGF0YVdpZGdldFwiO1xuaW1wb3J0IHtBdXRvY29tcGxldGVXaWRnZXRQcm9wc30gZnJvbSBcIi4uLy4uLy4uL2FwcC90eXBlc1wiO1xuXG4vKipcbiAqIEEgUmVhY3QgY29tcG9uZW50IHRvIHByb3ZpZGUgQXV0b3N1Z2dlc3Rpb24gYmFzZWQgb24gU2VtTG9va1AuXG4gKi9cbmZ1bmN0aW9uIEF1dG9jb21wbGV0ZVdpZGdldChwcm9wczogQXV0b2NvbXBsZXRlV2lkZ2V0UHJvcHMpIHtcbiAgICBjb25zdCB7IGFwaSwgcGFyYW1ldGVyLCBoYXNTaG9ydFNlbGVjdGVkTGFiZWwsIGFsbG93Q3VzdG9tVGVybXMsIHNlbGVjdGlvbkNoYW5nZWRFdmVudCwgcHJlc2VsZWN0ZWQsIHBsYWNlaG9sZGVyLCBzaW5nbGVTZWxlY3Rpb24sIC4uLnJlc3QgfSA9IHByb3BzO1xuXG4gICAgY29uc3Qgb2xzQXBpID0gbmV3IE9sc0FwaShhcGkpO1xuXG4gICAgY29uc3QgdmlzQ29sb3JzID0gZXVpUGFsZXR0ZUNvbG9yQmxpbmQoKTtcbiAgICBjb25zdCB2aXNDb2xvcnNCZWhpbmRUZXh0ID0gZXVpUGFsZXR0ZUNvbG9yQmxpbmRCZWhpbmRUZXh0KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBzZWFyY2ggdmFsdWVcbiAgICAgKi9cbiAgICBjb25zdCBbc2VhcmNoVmFsdWUsIHNldFNlYXJjaFZhbHVlXSA9IHVzZVN0YXRlPHN0cmluZz4oXCJcIik7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2V0IG9mIGF2YWlsYWJsZSBvcHRpb25zLnNcbiAgICAgKi9cbiAgICBjb25zdCBbb3B0aW9ucywgc2V0T3B0aW9uc10gPSB1c2VTdGF0ZTxBcnJheTxFdWlDb21ib0JveE9wdGlvbk9wdGlvbjxhbnk+Pj4oW10pO1xuXG4gICAgLyoqXG4gICAgICogU3RvcmUgY3VycmVudCBzZXQgb2Ygc2VsZWN0IE9wdGlvbnMuIEEgc3Vic2V0IG9mIG9wdGlvbnMuXG4gICAgICovXG4gICAgY29uc3QgW3NlbGVjdGVkT3B0aW9ucywgc2V0U2VsZWN0ZWRPcHRpb25zXSA9IHVzZVN0YXRlPEFycmF5PEV1aUNvbWJvQm94T3B0aW9uT3B0aW9uPGFueT4+PihbXSk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAvLyBAdHMtaWdub3JlXG4gIGNvbnN0IHJlbmRlck9wdGlvbiA9IChvcHRpb24sIHNlYXJjaFZhbHVlKSA9PiB7XG4gICAgY29uc3QgeyBsYWJlbCwgdmFsdWUgfSA9IG9wdGlvbjtcbiAgICBpZiAoYWxsb3dDdXN0b21UZXJtcyAmJiB2YWx1ZS5pcmkgPT0gXCJcIikgey8vIGlmIHdlIGhhdmUgYSBjdXN0b20gdGVybSwganVzdCBzaG93IHRoZSBsYWJlbFxuICAgICAgcmV0dXJuIGxhYmVsO1xuICAgIH0gZWxzZSB7IC8vIG90aGVyd2lzZSBjYW4gd2UgY2FuIHVzZSB0aGUgc2VtYW50aWMgaW5mb3JtYXRpb24gdG8gc2hvdyBzb21lIGNvbnRleHQgaW5mb3JtYXRpb24gbGlrZSBvbnRvbG9neSBuYW1lXG4gICAgICBsZXQgY29sb3IgPSBcIlwiO1xuICAgICAgaWYgKHZhbHVlLnR5cGUgPT09IFwiY2xhc3NcIikge1xuICAgICAgICBjb2xvciA9IHZpc0NvbG9yc0JlaGluZFRleHRbNV07XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlLnR5cGUgPT09IFwiaW5kaXZpZHVhbFwiKSB7XG4gICAgICAgIGNvbG9yID0gdmlzQ29sb3JzQmVoaW5kVGV4dFszXTtcbiAgICAgIH0gZWxzZSBpZiAodmFsdWUudHlwZSA9PT0gXCJwcm9wZXJ0eVwiKSB7XG4gICAgICAgIGNvbG9yID0gdmlzQ29sb3JzQmVoaW5kVGV4dFsxXTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRvdENvbG9yID0gdmlzQ29sb3JzW3Zpc0NvbG9yc0JlaGluZFRleHQuaW5kZXhPZihjb2xvcildO1xuICAgICAgaWYgKHZhbHVlLmRlc2NyaXB0aW9uICE9IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodmFsdWUudHlwZSA9PT0gXCJvbnRvbG9neVwiKSB7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxFdWlIZWFsdGhcbiAgICAgICAgICAgICAgdGl0bGU9e1widHlwZTogXCIgKyB2YWx1ZS50eXBlICsgXCJcXG5cXG5sYWJlbDogXCIgKyB2YWx1ZS5sYWJlbCArIFwiXFxuXFxucHJlZml4OiBcIiArIHZhbHVlLm9udG9sb2d5X25hbWUgKyBcIlxcblxcbmRlc2NyaXB0aW9uOiBcIiArIHZhbHVlLmRlc2NyaXB0aW9ufVxuICAgICAgICAgICAgICBjb2xvcj17ZG90Q29sb3J9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEV1aUhpZ2hsaWdodCBzZWFyY2g9e3NlYXJjaFZhbHVlfT57dmFsdWUubGFiZWx9PC9FdWlIaWdobGlnaHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt2YWx1ZS5kZXNjcmlwdGlvbn1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvRXVpSGVhbHRoPlxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8c3BhbiBzdHlsZT17eyBoZWlnaHQ6IDIwMCArIFwicHhcIiB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxFdWlIZWFsdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9e1widHlwZTogXCIgKyB2YWx1ZS50eXBlICsgXCJcXG5cXG5sYWJlbDogXCIgKyB2YWx1ZS5sYWJlbCArIFwiXFxuXFxucHJlZml4ID4gc2hvcnRfZm9ybTogXCIgKyB2YWx1ZS5vbnRvbG9neV9uYW1lICsgXCIgPiBcIiArIHZhbHVlLnNob3J0X2Zvcm0gKyBcIlxcblxcbmRlc2NyaXB0aW9uOiBcIiArIHZhbHVlLmRlc2NyaXB0aW9ufVxuICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj17ZG90Q29sb3J9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RXVpSGlnaGxpZ2h0IHNlYXJjaD17c2VhcmNoVmFsdWV9Pnt2YWx1ZS5sYWJlbH08L0V1aUhpZ2hsaWdodD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJyZWFkY3J1bWJXaWRnZXQgYXBpPXthcGl9IGVudGl0eVR5cGU9e3ZhbHVlLnR5cGV9IG9udG9sb2d5SWQ9e3ZhbHVlLm9udG9sb2d5X25hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcmk9e3ZhbHVlLmlyaX0gY29sb3JGaXJzdD17XCJwcmltYXJ5XCJ9IGNvbG9yU2Vjb25kPXtcInN1Y2Nlc3NcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcj17dmFsdWUucGFyYW1ldGVyfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2YWx1ZS5kZXNjcmlwdGlvbi5zdWJzdHJpbmcoMCwgNDApICsgXCIuLi5cIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0V1aUhlYWx0aD5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodmFsdWUudHlwZSA9PT0gXCJvbnRvbG9neVwiKSB7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxFdWlIZWFsdGhcbiAgICAgICAgICAgICAgdGl0bGU9e1widHlwZTogXCIgKyB2YWx1ZS50eXBlICsgXCJcXG5cXG5sYWJlbDogXCIgKyB2YWx1ZS5sYWJlbCArIFwiXFxuXFxucHJlZml4OiBcIiArIHZhbHVlLm9udG9sb2d5X25hbWV9XG4gICAgICAgICAgICAgIGNvbG9yPXtkb3RDb2xvcn0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxFdWlIaWdobGlnaHQgc2VhcmNoPXtzZWFyY2hWYWx1ZX0+e3ZhbHVlLmxhYmVsfTwvRXVpSGlnaGxpZ2h0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvRXVpSGVhbHRoPlxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8RXVpSGVhbHRoXG4gICAgICAgICAgICB0aXRsZT17XCJ0eXBlOiBcIiArIHZhbHVlLnR5cGUgKyBcIlxcblxcbmxhYmVsOiBcIiArIHZhbHVlLmxhYmVsICsgXCJcXG5cXG5wcmVmaXggPiBzaG9ydF9mb3JtOiBcIiArIHZhbHVlLm9udG9sb2d5X25hbWUgKyBcIiA+IFwiICsgdmFsdWUuc2hvcnRfZm9ybX1cbiAgICAgICAgICAgIGNvbG9yPXtkb3RDb2xvcn0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEV1aUhpZ2hsaWdodCBzZWFyY2g9e3NlYXJjaFZhbHVlfT57dmFsdWUubGFiZWx9PC9FdWlIaWdobGlnaHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8QnJlYWRjcnVtYldpZGdldCBhcGk9e2FwaX0gZW50aXR5VHlwZT17dmFsdWUudHlwZX0gb250b2xvZ3lJZD17dmFsdWUub250b2xvZ3lfbmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXJpPXt2YWx1ZS5pcml9IGNvbG9yRmlyc3Q9e1wicHJpbWFyeVwifSBjb2xvclNlY29uZD17XCJzdWNjZXNzXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcj17dmFsdWUucGFyYW1ldGVyfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvRXVpSGVhbHRoPlxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgfVxuICB9O1xuXG4gICAgLyoqXG4gICAgICogb24gbW91bnQ6IGZldGNoZXMgdGVybSBmb3Igc2VsZWN0T3B0aW9uIGFuZCBzZXRzIGl0J3MgbGFiZWwgb3Igc2V0cyBhIGdpdmVuIGxhYmVsIGlmIG5vIGlyaSBpcyBwcm92aWRlZCBvciB0aGUgZ2l2ZW4gaXJpIGNhbm5vdCBiZSByZXNvbHZlZCBvbmx5IGlmIGFsbG93Q3VzdG9tVGVybXMgaXMgdHJ1ZVxuICAgICAqL1xuICAgIGNvbnN0IHtcbiAgICAgICAgaXNMb2FkaW5nOiBpc0xvYWRpbmdPbk1vdW50XG4gICAgfSA9IHVzZVF1ZXJ5KFxuICAgICAgICBbXG4gICAgICAgICAgICBcIm9uTW91bnRcIiwgLy8gbm8gZGVwZW5kZW5jaWVzIC0gZG9lcyBvbmx5IG5lZWQgdG8gYmUgZXhlY3V0ZWQgb25jZSB3aGVuIG1vdW50aW5nIHRoZSBjb21wb25lbnRcbiAgICAgICAgICAgIHByZXNlbGVjdGVkXG4gICAgICAgIF0sXG4gICAgICAgIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHByZXNlbGVjdGVkVmFsdWVzOiBFdWlDb21ib0JveE9wdGlvbk9wdGlvbjxhbnk+W10gPSBbXTtcblxuICAgICAgICAgICAgbGV0IHVuaXF1ZVZhbHVlcyA9IFsuLi5uZXcgU2V0KHByZXNlbGVjdGVkKV1cbiAgICAgICAgICAgICAgICAuZmlsdGVyKChvcHRpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChhbGxvd0N1c3RvbVRlcm1zICYmIG9wdGlvbi5sYWJlbCkgfHwgb3B0aW9uLmlyaTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYodW5pcXVlVmFsdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBpZiAoc2luZ2xlU2VsZWN0aW9uKSB1bmlxdWVWYWx1ZXMgPSBbdW5pcXVlVmFsdWVzWzBdXTtcblxuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIHVuaXF1ZVZhbHVlcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9uLmlyaSAmJiBvcHRpb24uaXJpLnN0YXJ0c1dpdGgoXCJodHRwXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBvbHNBcGkuc2VsZWN0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtxdWVyeTogb3B0aW9uLmlyaX0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICApLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnJlc3BvbnNlICYmIHJlc3BvbnNlLnJlc3BvbnNlLmRvY3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UucmVzcG9uc2UuZG9jcy5tYXAoKHNlbGVjdGlvbjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9uLmlyaSA9PT0gc2VsZWN0aW9uLmlyaSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlbGVjdGVkVmFsdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsYWJlbCB0byBkaXNwbGF5IHdpdGhpbiB0aGUgY29tYm9ib3ggZWl0aGVyIHJhdyB2YWx1ZSBvciBnZW5lcmF0ZWQgb25lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICNyZW5kZXJPcHRpb24oKSBpcyB1c2VkIHRvIGRpc3BsYXkgZHVyaW5nIHNlbGVjdGlvbi5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGhhc1Nob3J0U2VsZWN0ZWRMYWJlbCA/IHNlbGVjdGlvbi5sYWJlbCA6IGdlbmVyYXRlRGlzcGxheUxhYmVsKHNlbGVjdGlvbiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGtleSB0byBkaXN0aW5ndWlzaCB0aGUgb3B0aW9ucyAoZXNwZWNpYWxseSB0aG9zZSB3aXRoIHNhbWUgbGFiZWwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogc2VsZWN0aW9uLmlyaSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlyaTogc2VsZWN0aW9uLmlyaSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBzZWxlY3Rpb24ubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbnRvbG9neV9uYW1lOiBzZWxlY3Rpb24ub250b2xvZ3lfbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHNlbGVjdGlvbi50eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnRfZm9ybTogc2VsZWN0aW9uLnNob3J0X2Zvcm0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogc2VsZWN0aW9uLmRlc2NyaXB0aW9uPy5qb2luKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcHRpb24ubGFiZWwgJiYgYWxsb3dDdXN0b21UZXJtcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJlc2VsZWN0ZWRWYWx1ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IG9wdGlvbi5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IG9wdGlvbi5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcmk6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbnRvbG9neV9uYW1lOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydF9mb3JtOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgc2V0T3B0aW9ucyhwcmVzZWxlY3RlZFZhbHVlcyk7XG4gICAgICAgICAgICAgICAgc2V0U2VsZWN0ZWRPcHRpb25zKHByZXNlbGVjdGVkVmFsdWVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIClcblxuICAvKipcbiAgICogZmV0Y2hlcyBuZXcgb3B0aW9ucyB3aGVuIHNlYXJjaFZhbHVlIGNoYW5nZXNcbiAgICovXG4gIGNvbnN0IHtcbiAgICBpc0xvYWRpbmc6IGlzTG9hZGluZ1Rlcm1zXG4gIH0gPSB1c2VRdWVyeShcbiAgICBbXG4gICAgICBcIm9uU2VhcmNoQ2hhbmdlXCIsXG4gICAgICBzZWFyY2hWYWx1ZVxuICAgIF0sXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKHNlYXJjaFZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIG9sc0FwaS5zZWxlY3QoXG4gICAgICAgICAgeyBxdWVyeTogc2VhcmNoVmFsdWUgfSxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIHBhcmFtZXRlclxuICAgICAgICApLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgaWYgKHJlc3BvbnNlLnJlc3BvbnNlICYmIHJlc3BvbnNlLnJlc3BvbnNlLmRvY3MpIHtcbiAgICAgICAgICAgIHNldE9wdGlvbnMocmVzcG9uc2UucmVzcG9uc2UuZG9jcy5tYXAoKHNlbGVjdGlvbjogYW55KSA9PiAoXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBsYWJlbCB0byBkaXNwbGF5IHdpdGhpbiB0aGUgY29tYm9ib3ggZWl0aGVyIHJhdyB2YWx1ZSBvciBnZW5lcmF0ZWQgb25lXG4gICAgICAgICAgICAgICAgLy8gI3JlbmRlck9wdGlvbigpIGlzIHVzZWQgdG8gZGlzcGxheSBkdXJpbmcgc2VsZWN0aW9uLlxuICAgICAgICAgICAgICAgIGxhYmVsOiBoYXNTaG9ydFNlbGVjdGVkTGFiZWwgPyBzZWxlY3Rpb24ubGFiZWwgOiBnZW5lcmF0ZURpc3BsYXlMYWJlbChzZWxlY3Rpb24pLFxuICAgICAgICAgICAgICAgIC8vIGtleSB0byBkaXN0aW5ndWlzaCB0aGUgb3B0aW9ucyAoZXNwZWNpYWxseSB0aG9zZSB3aXRoIHNhbWUgbGFiZWwpXG4gICAgICAgICAgICAgICAga2V5OiBzZWxlY3Rpb24uaXJpLFxuICAgICAgICAgICAgICAgIC8vIHZhbHVlcyB0byBwYXNzIHRvIGNsaWVudHNcbiAgICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgICAgaXJpOiBzZWxlY3Rpb24uaXJpLFxuICAgICAgICAgICAgICAgICAgbGFiZWw6IHNlbGVjdGlvbi5sYWJlbCxcbiAgICAgICAgICAgICAgICAgIG9udG9sb2d5X25hbWU6IHNlbGVjdGlvbi5vbnRvbG9neV9uYW1lLFxuICAgICAgICAgICAgICAgICAgdHlwZTogc2VsZWN0aW9uLnR5cGUsXG4gICAgICAgICAgICAgICAgICBzaG9ydF9mb3JtOiBzZWxlY3Rpb24uc2hvcnRfZm9ybSxcbiAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBzZWxlY3Rpb24uZGVzY3JpcHRpb24/LmpvaW4oKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICApO1xuXG4gIC8qKlxuICAgKiBPbmNlIHRoZSBzZXQgb2Ygc2VsZWN0ZWQgb3B0aW9ucyBjaGFuZ2VzLCBwYXNzIHRoZSBldmVudCBieSBpbnZva2luZyB0aGUgcGFzc2VkIGZ1bmN0aW9uLlxuICAgKi9cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZWxlY3Rpb25DaGFuZ2VkRXZlbnQoXG4gICAgICBzZWxlY3RlZE9wdGlvbnMubWFwKCh4KSA9PiB7XG4gICAgICAgIC8vIHJldHVybiB0aGUgdmFsdWUgb2JqZWN0IHdpdGggdGhlIHJhdyB2YWx1ZXMgZnJvbSBPTFMgdG8gYSBjbGllbnRcbiAgICAgICAgaWYgKGFsbG93Q3VzdG9tVGVybXMgJiYgeC52YWx1ZS5pcmkgPT0gXCJcIikge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpcmk6IFwiXCIsXG4gICAgICAgICAgICBsYWJlbDogeC5sYWJlbCxcbiAgICAgICAgICAgIG9udG9sb2d5X25hbWU6IFwiXCIsXG4gICAgICAgICAgICB0eXBlOiBcIlwiLFxuICAgICAgICAgICAgc2hvcnRfZm9ybTogeC52YWx1ZS5zaG9ydF9mb3JtLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IHgudmFsdWUuZGVzY3JpcHRpb25cbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKHgudmFsdWUuaXJpID09IFwiXCIpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaXJpOiBcIlwiLFxuICAgICAgICAgICAgbGFiZWw6IFwiXCIsXG4gICAgICAgICAgICBvbnRvbG9neV9uYW1lOiBcIlwiLFxuICAgICAgICAgICAgdHlwZTogXCJcIixcbiAgICAgICAgICAgIHNob3J0X2Zvcm06IFwiXCIsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJcIlxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlyaTogeC52YWx1ZS5pcmksXG4gICAgICAgICAgICBsYWJlbDogeC52YWx1ZS5sYWJlbCxcbiAgICAgICAgICAgIG9udG9sb2d5X25hbWU6IHgudmFsdWUub250b2xvZ3lfbmFtZSxcbiAgICAgICAgICAgIHR5cGU6IHgudmFsdWUudHlwZSxcbiAgICAgICAgICAgIHNob3J0X2Zvcm06IHgudmFsdWUuc2hvcnRfZm9ybSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB4LnZhbHVlLmRlc2NyaXB0aW9uXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9LCBbc2VsZWN0ZWRPcHRpb25zXSk7XG5cbiAgZnVuY3Rpb24gZ2VuZXJhdGVEaXNwbGF5TGFiZWwoaXRlbTogYW55KSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGl0ZW0ubGFiZWwgK1xuICAgICAgXCIgKFwiICtcbiAgICAgIGl0ZW0ub250b2xvZ3lfbmFtZS50b1VwcGVyQ2FzZSgpICtcbiAgICAgIFwiIFwiICtcbiAgICAgIGl0ZW0uc2hvcnRfZm9ybSArXG4gICAgICBcIilcIlxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBvbkNoYW5nZUhhbmRsZXIob3B0aW9uczogQXJyYXk8YW55Pik6IHZvaWQge1xuICAgIHNldFNlbGVjdGVkT3B0aW9ucyhvcHRpb25zKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uQ3JlYXRlT3B0aW9uSGFuZGxlcihzZWFyY2hWYWx1ZTogc3RyaW5nKSB7XG4gICAgY29uc3QgbmV3T3B0aW9uID0ge1xuICAgICAgbGFiZWw6IHNlYXJjaFZhbHVlLFxuICAgICAgdmFsdWU6IHtcbiAgICAgICAgaXJpOiBcIlwiLFxuICAgICAgICBsYWJlbDogXCJcIixcbiAgICAgICAgb250b2xvZ3lfbmFtZTogXCJcIixcbiAgICAgICAgdHlwZTogXCJcIixcbiAgICAgICAgc2hvcnRfZm9ybTogXCJcIixcbiAgICAgICAgZGVzY3JpcHRpb246IFwiXCJcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgc2V0T3B0aW9ucyhbLi4ub3B0aW9ucywgbmV3T3B0aW9uXSk7XG4gICAgc2V0U2VsZWN0ZWRPcHRpb25zKFsuLi5zZWxlY3RlZE9wdGlvbnMsIG5ld09wdGlvbl0pO1xuICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8RXVpQ29tYm9Cb3hcbiAgICAgICAgICAgIGlzQ2xlYXJhYmxlXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwic2VhcmNoQmFyXCJcbiAgICAgICAgICAgIGZ1bGxXaWR0aD17dHJ1ZX1cbiAgICAgICAgICAgIHsuLi5yZXN0fSAvLyBpdGVtcyBhYm92ZSBjYW4gYmUgb3ZlcnJpZGVuIGJ5IGEgY2xpZW50XG4gICAgICAgICAgICBhc3luYz17dHJ1ZX1cbiAgICAgICAgICAgIGlzTG9hZGluZz17aXNMb2FkaW5nVGVybXMgfHwgaXNMb2FkaW5nT25Nb3VudH1cbiAgICAgICAgICAgIHNpbmdsZVNlbGVjdGlvbj17c2luZ2xlU2VsZWN0aW9uID8geyBhc1BsYWluVGV4dDogdHJ1ZSB9IDogZmFsc2V9XG4gICAgICAgICAgICBwbGFjZWhvbGRlcj17XG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXIgPyBwbGFjZWhvbGRlciA6IFwiU2VhcmNoIGZvciBhIENvbmNlcHRcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3B0aW9ucz17b3B0aW9uc31cbiAgICAgICAgICAgIHNlbGVjdGVkT3B0aW9ucz17c2VsZWN0ZWRPcHRpb25zfVxuICAgICAgICAgICAgb25TZWFyY2hDaGFuZ2U9e3NldFNlYXJjaFZhbHVlfVxuICAgICAgICAgICAgb25DaGFuZ2U9e29uQ2hhbmdlSGFuZGxlcn1cbiAgICAgICAgICAgIHJlbmRlck9wdGlvbj17cmVuZGVyT3B0aW9ufVxuICAgICAgICAgICAgb25DcmVhdGVPcHRpb249e2FsbG93Q3VzdG9tVGVybXMgPyBvbkNyZWF0ZU9wdGlvbkhhbmRsZXIgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICByb3dIZWlnaHQ9ezUwfVxuICAgICAgICAvPlxuICAgICk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUF1dG9jb21wbGV0ZShwcm9wczogQXV0b2NvbXBsZXRlV2lkZ2V0UHJvcHMsIGNvbnRhaW5lcjogYW55LCBjYWxsYmFjaz86ICgpPT52b2lkKSB7XG4gIFJlYWN0RE9NLnJlbmRlcihXcmFwcGVkQXV0b2NvbXBsZXRlV2lkZ2V0KHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIFdyYXBwZWRBdXRvY29tcGxldGVXaWRnZXQocHJvcHM6IEF1dG9jb21wbGV0ZVdpZGdldFByb3BzKSB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7XG4gIHJldHVybiAoXG4gICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCI+XG4gICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgPEF1dG9jb21wbGV0ZVdpZGdldFxuICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgIHBhcmFtZXRlcj17cHJvcHMucGFyYW1ldGVyfVxuICAgICAgICAgIHNlbGVjdGlvbkNoYW5nZWRFdmVudD17cHJvcHMuc2VsZWN0aW9uQ2hhbmdlZEV2ZW50fVxuICAgICAgICAgIHByZXNlbGVjdGVkPXtwcm9wcy5wcmVzZWxlY3RlZH1cbiAgICAgICAgICBzaW5nbGVTZWxlY3Rpb249e3Byb3BzLnNpbmdsZVNlbGVjdGlvbn1cbiAgICAgICAgICBwbGFjZWhvbGRlcj17cHJvcHMucGxhY2Vob2xkZXJ9XG4gICAgICAgICAgaGFzU2hvcnRTZWxlY3RlZExhYmVsPXtwcm9wcy5oYXNTaG9ydFNlbGVjdGVkTGFiZWx9XG4gICAgICAgICAgYWxsb3dDdXN0b21UZXJtcz17cHJvcHMuYWxsb3dDdXN0b21UZXJtc31cbiAgICAgICAgLz5cbiAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICA8L0V1aVByb3ZpZGVyPlxuICApXG59XG5cbmV4cG9ydCB7IEF1dG9jb21wbGV0ZVdpZGdldCwgY3JlYXRlQXV0b2NvbXBsZXRlIH07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBiaW5kKGZuLCB0aGlzQXJnKSB7XG4gIHJldHVybiBmdW5jdGlvbiB3cmFwKCkge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGlzQXJnLCBhcmd1bWVudHMpO1xuICB9O1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IGJpbmQgZnJvbSAnLi9oZWxwZXJzL2JpbmQuanMnO1xuXG4vLyB1dGlscyBpcyBhIGxpYnJhcnkgb2YgZ2VuZXJpYyBoZWxwZXIgZnVuY3Rpb25zIG5vbi1zcGVjaWZpYyB0byBheGlvc1xuXG5jb25zdCB7dG9TdHJpbmd9ID0gT2JqZWN0LnByb3RvdHlwZTtcbmNvbnN0IHtnZXRQcm90b3R5cGVPZn0gPSBPYmplY3Q7XG5cbmNvbnN0IGtpbmRPZiA9IChjYWNoZSA9PiB0aGluZyA9PiB7XG4gICAgY29uc3Qgc3RyID0gdG9TdHJpbmcuY2FsbCh0aGluZyk7XG4gICAgcmV0dXJuIGNhY2hlW3N0cl0gfHwgKGNhY2hlW3N0cl0gPSBzdHIuc2xpY2UoOCwgLTEpLnRvTG93ZXJDYXNlKCkpO1xufSkoT2JqZWN0LmNyZWF0ZShudWxsKSk7XG5cbmNvbnN0IGtpbmRPZlRlc3QgPSAodHlwZSkgPT4ge1xuICB0eXBlID0gdHlwZS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gKHRoaW5nKSA9PiBraW5kT2YodGhpbmcpID09PSB0eXBlXG59XG5cbmNvbnN0IHR5cGVPZlRlc3QgPSB0eXBlID0+IHRoaW5nID0+IHR5cGVvZiB0aGluZyA9PT0gdHlwZTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBBcnJheVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBBcnJheSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IHtpc0FycmF5fSA9IEFycmF5O1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIHVuZGVmaW5lZFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHZhbHVlIGlzIHVuZGVmaW5lZCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzVW5kZWZpbmVkID0gdHlwZU9mVGVzdCgndW5kZWZpbmVkJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCdWZmZXJcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNCdWZmZXIodmFsKSB7XG4gIHJldHVybiB2YWwgIT09IG51bGwgJiYgIWlzVW5kZWZpbmVkKHZhbCkgJiYgdmFsLmNvbnN0cnVjdG9yICE9PSBudWxsICYmICFpc1VuZGVmaW5lZCh2YWwuY29uc3RydWN0b3IpXG4gICAgJiYgaXNGdW5jdGlvbih2YWwuY29uc3RydWN0b3IuaXNCdWZmZXIpICYmIHZhbC5jb25zdHJ1Y3Rvci5pc0J1ZmZlcih2YWwpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBBcnJheUJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzQXJyYXlCdWZmZXIgPSBraW5kT2ZUZXN0KCdBcnJheUJ1ZmZlcicpO1xuXG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIHZpZXcgb24gYW4gQXJyYXlCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5QnVmZmVyVmlldyh2YWwpIHtcbiAgbGV0IHJlc3VsdDtcbiAgaWYgKCh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnKSAmJiAoQXJyYXlCdWZmZXIuaXNWaWV3KSkge1xuICAgIHJlc3VsdCA9IEFycmF5QnVmZmVyLmlzVmlldyh2YWwpO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdCA9ICh2YWwpICYmICh2YWwuYnVmZmVyKSAmJiAoaXNBcnJheUJ1ZmZlcih2YWwuYnVmZmVyKSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmluZ1xuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBTdHJpbmcsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1N0cmluZyA9IHR5cGVPZlRlc3QoJ3N0cmluZycpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGdW5jdGlvbiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRnVuY3Rpb24gPSB0eXBlT2ZUZXN0KCdmdW5jdGlvbicpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgTnVtYmVyXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIE51bWJlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzTnVtYmVyID0gdHlwZU9mVGVzdCgnbnVtYmVyJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gT2JqZWN0XG4gKlxuICogQHBhcmFtIHsqfSB0aGluZyBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIE9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzT2JqZWN0ID0gKHRoaW5nKSA9PiB0aGluZyAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpbmcgPT09ICdvYmplY3QnO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQm9vbGVhblxuICpcbiAqIEBwYXJhbSB7Kn0gdGhpbmcgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQm9vbGVhbiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzQm9vbGVhbiA9IHRoaW5nID0+IHRoaW5nID09PSB0cnVlIHx8IHRoaW5nID09PSBmYWxzZTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIHBsYWluIE9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBwbGFpbiBPYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1BsYWluT2JqZWN0ID0gKHZhbCkgPT4ge1xuICBpZiAoa2luZE9mKHZhbCkgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgcHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YodmFsKTtcbiAgcmV0dXJuIChwcm90b3R5cGUgPT09IG51bGwgfHwgcHJvdG90eXBlID09PSBPYmplY3QucHJvdG90eXBlIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90b3R5cGUpID09PSBudWxsKSAmJiAhKFN5bWJvbC50b1N0cmluZ1RhZyBpbiB2YWwpICYmICEoU3ltYm9sLml0ZXJhdG9yIGluIHZhbCk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBEYXRlXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIERhdGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0RhdGUgPSBraW5kT2ZUZXN0KCdEYXRlJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGaWxlXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZpbGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0ZpbGUgPSBraW5kT2ZUZXN0KCdGaWxlJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCbG9iXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJsb2IsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0Jsb2IgPSBraW5kT2ZUZXN0KCdCbG9iJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGaWxlTGlzdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGaWxlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNGaWxlTGlzdCA9IGtpbmRPZlRlc3QoJ0ZpbGVMaXN0Jyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBTdHJlYW1cbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyZWFtLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNTdHJlYW0gPSAodmFsKSA9PiBpc09iamVjdCh2YWwpICYmIGlzRnVuY3Rpb24odmFsLnBpcGUpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRm9ybURhdGFcbiAqXG4gKiBAcGFyYW0geyp9IHRoaW5nIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gRm9ybURhdGEsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0Zvcm1EYXRhID0gKHRoaW5nKSA9PiB7XG4gIGxldCBraW5kO1xuICByZXR1cm4gdGhpbmcgJiYgKFxuICAgICh0eXBlb2YgRm9ybURhdGEgPT09ICdmdW5jdGlvbicgJiYgdGhpbmcgaW5zdGFuY2VvZiBGb3JtRGF0YSkgfHwgKFxuICAgICAgaXNGdW5jdGlvbih0aGluZy5hcHBlbmQpICYmIChcbiAgICAgICAgKGtpbmQgPSBraW5kT2YodGhpbmcpKSA9PT0gJ2Zvcm1kYXRhJyB8fFxuICAgICAgICAvLyBkZXRlY3QgZm9ybS1kYXRhIGluc3RhbmNlXG4gICAgICAgIChraW5kID09PSAnb2JqZWN0JyAmJiBpc0Z1bmN0aW9uKHRoaW5nLnRvU3RyaW5nKSAmJiB0aGluZy50b1N0cmluZygpID09PSAnW29iamVjdCBGb3JtRGF0YV0nKVxuICAgICAgKVxuICAgIClcbiAgKVxufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBVUkxTZWFyY2hQYXJhbXMgb2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNVUkxTZWFyY2hQYXJhbXMgPSBraW5kT2ZUZXN0KCdVUkxTZWFyY2hQYXJhbXMnKTtcblxuLyoqXG4gKiBUcmltIGV4Y2VzcyB3aGl0ZXNwYWNlIG9mZiB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyIFRoZSBTdHJpbmcgdG8gdHJpbVxuICpcbiAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBTdHJpbmcgZnJlZWQgb2YgZXhjZXNzIHdoaXRlc3BhY2VcbiAqL1xuY29uc3QgdHJpbSA9IChzdHIpID0+IHN0ci50cmltID9cbiAgc3RyLnRyaW0oKSA6IHN0ci5yZXBsYWNlKC9eW1xcc1xcdUZFRkZcXHhBMF0rfFtcXHNcXHVGRUZGXFx4QTBdKyQvZywgJycpO1xuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBhbiBBcnJheSBvciBhbiBPYmplY3QgaW52b2tpbmcgYSBmdW5jdGlvbiBmb3IgZWFjaCBpdGVtLlxuICpcbiAqIElmIGBvYmpgIGlzIGFuIEFycmF5IGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHBhc3NpbmdcbiAqIHRoZSB2YWx1ZSwgaW5kZXgsIGFuZCBjb21wbGV0ZSBhcnJheSBmb3IgZWFjaCBpdGVtLlxuICpcbiAqIElmICdvYmonIGlzIGFuIE9iamVjdCBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBwYXNzaW5nXG4gKiB0aGUgdmFsdWUsIGtleSwgYW5kIGNvbXBsZXRlIG9iamVjdCBmb3IgZWFjaCBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdHxBcnJheX0gb2JqIFRoZSBvYmplY3QgdG8gaXRlcmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGNhbGxiYWNrIHRvIGludm9rZSBmb3IgZWFjaCBpdGVtXG4gKlxuICogQHBhcmFtIHtCb29sZWFufSBbYWxsT3duS2V5cyA9IGZhbHNlXVxuICogQHJldHVybnMge2FueX1cbiAqL1xuZnVuY3Rpb24gZm9yRWFjaChvYmosIGZuLCB7YWxsT3duS2V5cyA9IGZhbHNlfSA9IHt9KSB7XG4gIC8vIERvbid0IGJvdGhlciBpZiBubyB2YWx1ZSBwcm92aWRlZFxuICBpZiAob2JqID09PSBudWxsIHx8IHR5cGVvZiBvYmogPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IGk7XG4gIGxldCBsO1xuXG4gIC8vIEZvcmNlIGFuIGFycmF5IGlmIG5vdCBhbHJlYWR5IHNvbWV0aGluZyBpdGVyYWJsZVxuICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgICBvYmogPSBbb2JqXTtcbiAgfVxuXG4gIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAvLyBJdGVyYXRlIG92ZXIgYXJyYXkgdmFsdWVzXG4gICAgZm9yIChpID0gMCwgbCA9IG9iai5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGZuLmNhbGwobnVsbCwgb2JqW2ldLCBpLCBvYmopO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBJdGVyYXRlIG92ZXIgb2JqZWN0IGtleXNcbiAgICBjb25zdCBrZXlzID0gYWxsT3duS2V5cyA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaikgOiBPYmplY3Qua2V5cyhvYmopO1xuICAgIGNvbnN0IGxlbiA9IGtleXMubGVuZ3RoO1xuICAgIGxldCBrZXk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGtleSA9IGtleXNbaV07XG4gICAgICBmbi5jYWxsKG51bGwsIG9ialtrZXldLCBrZXksIG9iaik7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmRLZXkob2JqLCBrZXkpIHtcbiAga2V5ID0ga2V5LnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuICBsZXQgaSA9IGtleXMubGVuZ3RoO1xuICBsZXQgX2tleTtcbiAgd2hpbGUgKGktLSA+IDApIHtcbiAgICBfa2V5ID0ga2V5c1tpXTtcbiAgICBpZiAoa2V5ID09PSBfa2V5LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgIHJldHVybiBfa2V5O1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuY29uc3QgX2dsb2JhbCA9ICgoKSA9PiB7XG4gIC8qZXNsaW50IG5vLXVuZGVmOjAqL1xuICBpZiAodHlwZW9mIGdsb2JhbFRoaXMgIT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBnbG9iYWxUaGlzO1xuICByZXR1cm4gdHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgPyBzZWxmIDogKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogZ2xvYmFsKVxufSkoKTtcblxuY29uc3QgaXNDb250ZXh0RGVmaW5lZCA9IChjb250ZXh0KSA9PiAhaXNVbmRlZmluZWQoY29udGV4dCkgJiYgY29udGV4dCAhPT0gX2dsb2JhbDtcblxuLyoqXG4gKiBBY2NlcHRzIHZhcmFyZ3MgZXhwZWN0aW5nIGVhY2ggYXJndW1lbnQgdG8gYmUgYW4gb2JqZWN0LCB0aGVuXG4gKiBpbW11dGFibHkgbWVyZ2VzIHRoZSBwcm9wZXJ0aWVzIG9mIGVhY2ggb2JqZWN0IGFuZCByZXR1cm5zIHJlc3VsdC5cbiAqXG4gKiBXaGVuIG11bHRpcGxlIG9iamVjdHMgY29udGFpbiB0aGUgc2FtZSBrZXkgdGhlIGxhdGVyIG9iamVjdCBpblxuICogdGhlIGFyZ3VtZW50cyBsaXN0IHdpbGwgdGFrZSBwcmVjZWRlbmNlLlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIHZhciByZXN1bHQgPSBtZXJnZSh7Zm9vOiAxMjN9LCB7Zm9vOiA0NTZ9KTtcbiAqIGNvbnNvbGUubG9nKHJlc3VsdC5mb28pOyAvLyBvdXRwdXRzIDQ1NlxuICogYGBgXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iajEgT2JqZWN0IHRvIG1lcmdlXG4gKlxuICogQHJldHVybnMge09iamVjdH0gUmVzdWx0IG9mIGFsbCBtZXJnZSBwcm9wZXJ0aWVzXG4gKi9cbmZ1bmN0aW9uIG1lcmdlKC8qIG9iajEsIG9iajIsIG9iajMsIC4uLiAqLykge1xuICBjb25zdCB7Y2FzZWxlc3N9ID0gaXNDb250ZXh0RGVmaW5lZCh0aGlzKSAmJiB0aGlzIHx8IHt9O1xuICBjb25zdCByZXN1bHQgPSB7fTtcbiAgY29uc3QgYXNzaWduVmFsdWUgPSAodmFsLCBrZXkpID0+IHtcbiAgICBjb25zdCB0YXJnZXRLZXkgPSBjYXNlbGVzcyAmJiBmaW5kS2V5KHJlc3VsdCwga2V5KSB8fCBrZXk7XG4gICAgaWYgKGlzUGxhaW5PYmplY3QocmVzdWx0W3RhcmdldEtleV0pICYmIGlzUGxhaW5PYmplY3QodmFsKSkge1xuICAgICAgcmVzdWx0W3RhcmdldEtleV0gPSBtZXJnZShyZXN1bHRbdGFyZ2V0S2V5XSwgdmFsKTtcbiAgICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3QodmFsKSkge1xuICAgICAgcmVzdWx0W3RhcmdldEtleV0gPSBtZXJnZSh7fSwgdmFsKTtcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkodmFsKSkge1xuICAgICAgcmVzdWx0W3RhcmdldEtleV0gPSB2YWwuc2xpY2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0W3RhcmdldEtleV0gPSB2YWw7XG4gICAgfVxuICB9XG5cbiAgZm9yIChsZXQgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgYXJndW1lbnRzW2ldICYmIGZvckVhY2goYXJndW1lbnRzW2ldLCBhc3NpZ25WYWx1ZSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBFeHRlbmRzIG9iamVjdCBhIGJ5IG11dGFibHkgYWRkaW5nIHRvIGl0IHRoZSBwcm9wZXJ0aWVzIG9mIG9iamVjdCBiLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBhIFRoZSBvYmplY3QgdG8gYmUgZXh0ZW5kZWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBiIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIGZyb21cbiAqIEBwYXJhbSB7T2JqZWN0fSB0aGlzQXJnIFRoZSBvYmplY3QgdG8gYmluZCBmdW5jdGlvbiB0b1xuICpcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW2FsbE93bktleXNdXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgcmVzdWx0aW5nIHZhbHVlIG9mIG9iamVjdCBhXG4gKi9cbmNvbnN0IGV4dGVuZCA9IChhLCBiLCB0aGlzQXJnLCB7YWxsT3duS2V5c309IHt9KSA9PiB7XG4gIGZvckVhY2goYiwgKHZhbCwga2V5KSA9PiB7XG4gICAgaWYgKHRoaXNBcmcgJiYgaXNGdW5jdGlvbih2YWwpKSB7XG4gICAgICBhW2tleV0gPSBiaW5kKHZhbCwgdGhpc0FyZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFba2V5XSA9IHZhbDtcbiAgICB9XG4gIH0sIHthbGxPd25LZXlzfSk7XG4gIHJldHVybiBhO1xufVxuXG4vKipcbiAqIFJlbW92ZSBieXRlIG9yZGVyIG1hcmtlci4gVGhpcyBjYXRjaGVzIEVGIEJCIEJGICh0aGUgVVRGLTggQk9NKVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50IHdpdGggQk9NXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gY29udGVudCB2YWx1ZSB3aXRob3V0IEJPTVxuICovXG5jb25zdCBzdHJpcEJPTSA9IChjb250ZW50KSA9PiB7XG4gIGlmIChjb250ZW50LmNoYXJDb2RlQXQoMCkgPT09IDB4RkVGRikge1xuICAgIGNvbnRlbnQgPSBjb250ZW50LnNsaWNlKDEpO1xuICB9XG4gIHJldHVybiBjb250ZW50O1xufVxuXG4vKipcbiAqIEluaGVyaXQgdGhlIHByb3RvdHlwZSBtZXRob2RzIGZyb20gb25lIGNvbnN0cnVjdG9yIGludG8gYW5vdGhlclxuICogQHBhcmFtIHtmdW5jdGlvbn0gY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHN1cGVyQ29uc3RydWN0b3JcbiAqIEBwYXJhbSB7b2JqZWN0fSBbcHJvcHNdXG4gKiBAcGFyYW0ge29iamVjdH0gW2Rlc2NyaXB0b3JzXVxuICpcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5jb25zdCBpbmhlcml0cyA9IChjb25zdHJ1Y3Rvciwgc3VwZXJDb25zdHJ1Y3RvciwgcHJvcHMsIGRlc2NyaXB0b3JzKSA9PiB7XG4gIGNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIGRlc2NyaXB0b3JzKTtcbiAgY29uc3RydWN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY29uc3RydWN0b3I7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb25zdHJ1Y3RvciwgJ3N1cGVyJywge1xuICAgIHZhbHVlOiBzdXBlckNvbnN0cnVjdG9yLnByb3RvdHlwZVxuICB9KTtcbiAgcHJvcHMgJiYgT2JqZWN0LmFzc2lnbihjb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3BzKTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIG9iamVjdCB3aXRoIGRlZXAgcHJvdG90eXBlIGNoYWluIHRvIGEgZmxhdCBvYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2VPYmogc291cmNlIG9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IFtkZXN0T2JqXVxuICogQHBhcmFtIHtGdW5jdGlvbnxCb29sZWFufSBbZmlsdGVyXVxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3Byb3BGaWx0ZXJdXG4gKlxuICogQHJldHVybnMge09iamVjdH1cbiAqL1xuY29uc3QgdG9GbGF0T2JqZWN0ID0gKHNvdXJjZU9iaiwgZGVzdE9iaiwgZmlsdGVyLCBwcm9wRmlsdGVyKSA9PiB7XG4gIGxldCBwcm9wcztcbiAgbGV0IGk7XG4gIGxldCBwcm9wO1xuICBjb25zdCBtZXJnZWQgPSB7fTtcblxuICBkZXN0T2JqID0gZGVzdE9iaiB8fCB7fTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVxLW51bGwsZXFlcWVxXG4gIGlmIChzb3VyY2VPYmogPT0gbnVsbCkgcmV0dXJuIGRlc3RPYmo7XG5cbiAgZG8ge1xuICAgIHByb3BzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoc291cmNlT2JqKTtcbiAgICBpID0gcHJvcHMubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgICBwcm9wID0gcHJvcHNbaV07XG4gICAgICBpZiAoKCFwcm9wRmlsdGVyIHx8IHByb3BGaWx0ZXIocHJvcCwgc291cmNlT2JqLCBkZXN0T2JqKSkgJiYgIW1lcmdlZFtwcm9wXSkge1xuICAgICAgICBkZXN0T2JqW3Byb3BdID0gc291cmNlT2JqW3Byb3BdO1xuICAgICAgICBtZXJnZWRbcHJvcF0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBzb3VyY2VPYmogPSBmaWx0ZXIgIT09IGZhbHNlICYmIGdldFByb3RvdHlwZU9mKHNvdXJjZU9iaik7XG4gIH0gd2hpbGUgKHNvdXJjZU9iaiAmJiAoIWZpbHRlciB8fCBmaWx0ZXIoc291cmNlT2JqLCBkZXN0T2JqKSkgJiYgc291cmNlT2JqICE9PSBPYmplY3QucHJvdG90eXBlKTtcblxuICByZXR1cm4gZGVzdE9iajtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgYSBzdHJpbmcgZW5kcyB3aXRoIHRoZSBjaGFyYWN0ZXJzIG9mIGEgc3BlY2lmaWVkIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBzZWFyY2hTdHJpbmdcbiAqIEBwYXJhbSB7TnVtYmVyfSBbcG9zaXRpb249IDBdXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmNvbnN0IGVuZHNXaXRoID0gKHN0ciwgc2VhcmNoU3RyaW5nLCBwb3NpdGlvbikgPT4ge1xuICBzdHIgPSBTdHJpbmcoc3RyKTtcbiAgaWYgKHBvc2l0aW9uID09PSB1bmRlZmluZWQgfHwgcG9zaXRpb24gPiBzdHIubGVuZ3RoKSB7XG4gICAgcG9zaXRpb24gPSBzdHIubGVuZ3RoO1xuICB9XG4gIHBvc2l0aW9uIC09IHNlYXJjaFN0cmluZy5sZW5ndGg7XG4gIGNvbnN0IGxhc3RJbmRleCA9IHN0ci5pbmRleE9mKHNlYXJjaFN0cmluZywgcG9zaXRpb24pO1xuICByZXR1cm4gbGFzdEluZGV4ICE9PSAtMSAmJiBsYXN0SW5kZXggPT09IHBvc2l0aW9uO1xufVxuXG5cbi8qKlxuICogUmV0dXJucyBuZXcgYXJyYXkgZnJvbSBhcnJheSBsaWtlIG9iamVjdCBvciBudWxsIGlmIGZhaWxlZFxuICpcbiAqIEBwYXJhbSB7Kn0gW3RoaW5nXVxuICpcbiAqIEByZXR1cm5zIHs/QXJyYXl9XG4gKi9cbmNvbnN0IHRvQXJyYXkgPSAodGhpbmcpID0+IHtcbiAgaWYgKCF0aGluZykgcmV0dXJuIG51bGw7XG4gIGlmIChpc0FycmF5KHRoaW5nKSkgcmV0dXJuIHRoaW5nO1xuICBsZXQgaSA9IHRoaW5nLmxlbmd0aDtcbiAgaWYgKCFpc051bWJlcihpKSkgcmV0dXJuIG51bGw7XG4gIGNvbnN0IGFyciA9IG5ldyBBcnJheShpKTtcbiAgd2hpbGUgKGktLSA+IDApIHtcbiAgICBhcnJbaV0gPSB0aGluZ1tpXTtcbiAgfVxuICByZXR1cm4gYXJyO1xufVxuXG4vKipcbiAqIENoZWNraW5nIGlmIHRoZSBVaW50OEFycmF5IGV4aXN0cyBhbmQgaWYgaXQgZG9lcywgaXQgcmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIGlmIHRoZVxuICogdGhpbmcgcGFzc2VkIGluIGlzIGFuIGluc3RhbmNlIG9mIFVpbnQ4QXJyYXlcbiAqXG4gKiBAcGFyYW0ge1R5cGVkQXJyYXl9XG4gKlxuICogQHJldHVybnMge0FycmF5fVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuY29uc3QgaXNUeXBlZEFycmF5ID0gKFR5cGVkQXJyYXkgPT4ge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICByZXR1cm4gdGhpbmcgPT4ge1xuICAgIHJldHVybiBUeXBlZEFycmF5ICYmIHRoaW5nIGluc3RhbmNlb2YgVHlwZWRBcnJheTtcbiAgfTtcbn0pKHR5cGVvZiBVaW50OEFycmF5ICE9PSAndW5kZWZpbmVkJyAmJiBnZXRQcm90b3R5cGVPZihVaW50OEFycmF5KSk7XG5cbi8qKlxuICogRm9yIGVhY2ggZW50cnkgaW4gdGhlIG9iamVjdCwgY2FsbCB0aGUgZnVuY3Rpb24gd2l0aCB0aGUga2V5IGFuZCB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdDxhbnksIGFueT59IG9iaiAtIFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gLSBUaGUgZnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCBlbnRyeS5cbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuY29uc3QgZm9yRWFjaEVudHJ5ID0gKG9iaiwgZm4pID0+IHtcbiAgY29uc3QgZ2VuZXJhdG9yID0gb2JqICYmIG9ialtTeW1ib2wuaXRlcmF0b3JdO1xuXG4gIGNvbnN0IGl0ZXJhdG9yID0gZ2VuZXJhdG9yLmNhbGwob2JqKTtcblxuICBsZXQgcmVzdWx0O1xuXG4gIHdoaWxlICgocmVzdWx0ID0gaXRlcmF0b3IubmV4dCgpKSAmJiAhcmVzdWx0LmRvbmUpIHtcbiAgICBjb25zdCBwYWlyID0gcmVzdWx0LnZhbHVlO1xuICAgIGZuLmNhbGwob2JqLCBwYWlyWzBdLCBwYWlyWzFdKTtcbiAgfVxufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgcmVndWxhciBleHByZXNzaW9uIGFuZCBhIHN0cmluZywgYW5kIHJldHVybnMgYW4gYXJyYXkgb2YgYWxsIHRoZSBtYXRjaGVzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHJlZ0V4cCAtIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2ggYWdhaW5zdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgLSBUaGUgc3RyaW5nIHRvIHNlYXJjaC5cbiAqXG4gKiBAcmV0dXJucyB7QXJyYXk8Ym9vbGVhbj59XG4gKi9cbmNvbnN0IG1hdGNoQWxsID0gKHJlZ0V4cCwgc3RyKSA9PiB7XG4gIGxldCBtYXRjaGVzO1xuICBjb25zdCBhcnIgPSBbXTtcblxuICB3aGlsZSAoKG1hdGNoZXMgPSByZWdFeHAuZXhlYyhzdHIpKSAhPT0gbnVsbCkge1xuICAgIGFyci5wdXNoKG1hdGNoZXMpO1xuICB9XG5cbiAgcmV0dXJuIGFycjtcbn1cblxuLyogQ2hlY2tpbmcgaWYgdGhlIGtpbmRPZlRlc3QgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gcGFzc2VkIGFuIEhUTUxGb3JtRWxlbWVudC4gKi9cbmNvbnN0IGlzSFRNTEZvcm0gPSBraW5kT2ZUZXN0KCdIVE1MRm9ybUVsZW1lbnQnKTtcblxuY29uc3QgdG9DYW1lbENhc2UgPSBzdHIgPT4ge1xuICByZXR1cm4gc3RyLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvWy1fXFxzXShbYS16XFxkXSkoXFx3KikvZyxcbiAgICBmdW5jdGlvbiByZXBsYWNlcihtLCBwMSwgcDIpIHtcbiAgICAgIHJldHVybiBwMS50b1VwcGVyQ2FzZSgpICsgcDI7XG4gICAgfVxuICApO1xufTtcblxuLyogQ3JlYXRpbmcgYSBmdW5jdGlvbiB0aGF0IHdpbGwgY2hlY2sgaWYgYW4gb2JqZWN0IGhhcyBhIHByb3BlcnR5LiAqL1xuY29uc3QgaGFzT3duUHJvcGVydHkgPSAoKHtoYXNPd25Qcm9wZXJ0eX0pID0+IChvYmosIHByb3ApID0+IGhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkoT2JqZWN0LnByb3RvdHlwZSk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBSZWdFeHAgb2JqZWN0XG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFJlZ0V4cCBvYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1JlZ0V4cCA9IGtpbmRPZlRlc3QoJ1JlZ0V4cCcpO1xuXG5jb25zdCByZWR1Y2VEZXNjcmlwdG9ycyA9IChvYmosIHJlZHVjZXIpID0+IHtcbiAgY29uc3QgZGVzY3JpcHRvcnMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhvYmopO1xuICBjb25zdCByZWR1Y2VkRGVzY3JpcHRvcnMgPSB7fTtcblxuICBmb3JFYWNoKGRlc2NyaXB0b3JzLCAoZGVzY3JpcHRvciwgbmFtZSkgPT4ge1xuICAgIGxldCByZXQ7XG4gICAgaWYgKChyZXQgPSByZWR1Y2VyKGRlc2NyaXB0b3IsIG5hbWUsIG9iaikpICE9PSBmYWxzZSkge1xuICAgICAgcmVkdWNlZERlc2NyaXB0b3JzW25hbWVdID0gcmV0IHx8IGRlc2NyaXB0b3I7XG4gICAgfVxuICB9KTtcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhvYmosIHJlZHVjZWREZXNjcmlwdG9ycyk7XG59XG5cbi8qKlxuICogTWFrZXMgYWxsIG1ldGhvZHMgcmVhZC1vbmx5XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKi9cblxuY29uc3QgZnJlZXplTWV0aG9kcyA9IChvYmopID0+IHtcbiAgcmVkdWNlRGVzY3JpcHRvcnMob2JqLCAoZGVzY3JpcHRvciwgbmFtZSkgPT4ge1xuICAgIC8vIHNraXAgcmVzdHJpY3RlZCBwcm9wcyBpbiBzdHJpY3QgbW9kZVxuICAgIGlmIChpc0Z1bmN0aW9uKG9iaikgJiYgWydhcmd1bWVudHMnLCAnY2FsbGVyJywgJ2NhbGxlZSddLmluZGV4T2YobmFtZSkgIT09IC0xKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWUgPSBvYmpbbmFtZV07XG5cbiAgICBpZiAoIWlzRnVuY3Rpb24odmFsdWUpKSByZXR1cm47XG5cbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBmYWxzZTtcblxuICAgIGlmICgnd3JpdGFibGUnIGluIGRlc2NyaXB0b3IpIHtcbiAgICAgIGRlc2NyaXB0b3Iud3JpdGFibGUgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWRlc2NyaXB0b3Iuc2V0KSB7XG4gICAgICBkZXNjcmlwdG9yLnNldCA9ICgpID0+IHtcbiAgICAgICAgdGhyb3cgRXJyb3IoJ0NhbiBub3QgcmV3cml0ZSByZWFkLW9ubHkgbWV0aG9kIFxcJycgKyBuYW1lICsgJ1xcJycpO1xuICAgICAgfTtcbiAgICB9XG4gIH0pO1xufVxuXG5jb25zdCB0b09iamVjdFNldCA9IChhcnJheU9yU3RyaW5nLCBkZWxpbWl0ZXIpID0+IHtcbiAgY29uc3Qgb2JqID0ge307XG5cbiAgY29uc3QgZGVmaW5lID0gKGFycikgPT4ge1xuICAgIGFyci5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgIG9ialt2YWx1ZV0gPSB0cnVlO1xuICAgIH0pO1xuICB9XG5cbiAgaXNBcnJheShhcnJheU9yU3RyaW5nKSA/IGRlZmluZShhcnJheU9yU3RyaW5nKSA6IGRlZmluZShTdHJpbmcoYXJyYXlPclN0cmluZykuc3BsaXQoZGVsaW1pdGVyKSk7XG5cbiAgcmV0dXJuIG9iajtcbn1cblxuY29uc3Qgbm9vcCA9ICgpID0+IHt9XG5cbmNvbnN0IHRvRmluaXRlTnVtYmVyID0gKHZhbHVlLCBkZWZhdWx0VmFsdWUpID0+IHtcbiAgdmFsdWUgPSArdmFsdWU7XG4gIHJldHVybiBOdW1iZXIuaXNGaW5pdGUodmFsdWUpID8gdmFsdWUgOiBkZWZhdWx0VmFsdWU7XG59XG5cbmNvbnN0IEFMUEhBID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6J1xuXG5jb25zdCBESUdJVCA9ICcwMTIzNDU2Nzg5JztcblxuY29uc3QgQUxQSEFCRVQgPSB7XG4gIERJR0lULFxuICBBTFBIQSxcbiAgQUxQSEFfRElHSVQ6IEFMUEhBICsgQUxQSEEudG9VcHBlckNhc2UoKSArIERJR0lUXG59XG5cbmNvbnN0IGdlbmVyYXRlU3RyaW5nID0gKHNpemUgPSAxNiwgYWxwaGFiZXQgPSBBTFBIQUJFVC5BTFBIQV9ESUdJVCkgPT4ge1xuICBsZXQgc3RyID0gJyc7XG4gIGNvbnN0IHtsZW5ndGh9ID0gYWxwaGFiZXQ7XG4gIHdoaWxlIChzaXplLS0pIHtcbiAgICBzdHIgKz0gYWxwaGFiZXRbTWF0aC5yYW5kb20oKSAqIGxlbmd0aHwwXVxuICB9XG5cbiAgcmV0dXJuIHN0cjtcbn1cblxuLyoqXG4gKiBJZiB0aGUgdGhpbmcgaXMgYSBGb3JtRGF0YSBvYmplY3QsIHJldHVybiB0cnVlLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxuICpcbiAqIEBwYXJhbSB7dW5rbm93bn0gdGhpbmcgLSBUaGUgdGhpbmcgdG8gY2hlY2suXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzU3BlY0NvbXBsaWFudEZvcm0odGhpbmcpIHtcbiAgcmV0dXJuICEhKHRoaW5nICYmIGlzRnVuY3Rpb24odGhpbmcuYXBwZW5kKSAmJiB0aGluZ1tTeW1ib2wudG9TdHJpbmdUYWddID09PSAnRm9ybURhdGEnICYmIHRoaW5nW1N5bWJvbC5pdGVyYXRvcl0pO1xufVxuXG5jb25zdCB0b0pTT05PYmplY3QgPSAob2JqKSA9PiB7XG4gIGNvbnN0IHN0YWNrID0gbmV3IEFycmF5KDEwKTtcblxuICBjb25zdCB2aXNpdCA9IChzb3VyY2UsIGkpID0+IHtcblxuICAgIGlmIChpc09iamVjdChzb3VyY2UpKSB7XG4gICAgICBpZiAoc3RhY2suaW5kZXhPZihzb3VyY2UpID49IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZighKCd0b0pTT04nIGluIHNvdXJjZSkpIHtcbiAgICAgICAgc3RhY2tbaV0gPSBzb3VyY2U7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGlzQXJyYXkoc291cmNlKSA/IFtdIDoge307XG5cbiAgICAgICAgZm9yRWFjaChzb3VyY2UsICh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVkdWNlZFZhbHVlID0gdmlzaXQodmFsdWUsIGkgKyAxKTtcbiAgICAgICAgICAhaXNVbmRlZmluZWQocmVkdWNlZFZhbHVlKSAmJiAodGFyZ2V0W2tleV0gPSByZWR1Y2VkVmFsdWUpO1xuICAgICAgICB9KTtcblxuICAgICAgICBzdGFja1tpXSA9IHVuZGVmaW5lZDtcblxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzb3VyY2U7XG4gIH1cblxuICByZXR1cm4gdmlzaXQob2JqLCAwKTtcbn1cblxuY29uc3QgaXNBc3luY0ZuID0ga2luZE9mVGVzdCgnQXN5bmNGdW5jdGlvbicpO1xuXG5jb25zdCBpc1RoZW5hYmxlID0gKHRoaW5nKSA9PlxuICB0aGluZyAmJiAoaXNPYmplY3QodGhpbmcpIHx8IGlzRnVuY3Rpb24odGhpbmcpKSAmJiBpc0Z1bmN0aW9uKHRoaW5nLnRoZW4pICYmIGlzRnVuY3Rpb24odGhpbmcuY2F0Y2gpO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGlzQXJyYXksXG4gIGlzQXJyYXlCdWZmZXIsXG4gIGlzQnVmZmVyLFxuICBpc0Zvcm1EYXRhLFxuICBpc0FycmF5QnVmZmVyVmlldyxcbiAgaXNTdHJpbmcsXG4gIGlzTnVtYmVyLFxuICBpc0Jvb2xlYW4sXG4gIGlzT2JqZWN0LFxuICBpc1BsYWluT2JqZWN0LFxuICBpc1VuZGVmaW5lZCxcbiAgaXNEYXRlLFxuICBpc0ZpbGUsXG4gIGlzQmxvYixcbiAgaXNSZWdFeHAsXG4gIGlzRnVuY3Rpb24sXG4gIGlzU3RyZWFtLFxuICBpc1VSTFNlYXJjaFBhcmFtcyxcbiAgaXNUeXBlZEFycmF5LFxuICBpc0ZpbGVMaXN0LFxuICBmb3JFYWNoLFxuICBtZXJnZSxcbiAgZXh0ZW5kLFxuICB0cmltLFxuICBzdHJpcEJPTSxcbiAgaW5oZXJpdHMsXG4gIHRvRmxhdE9iamVjdCxcbiAga2luZE9mLFxuICBraW5kT2ZUZXN0LFxuICBlbmRzV2l0aCxcbiAgdG9BcnJheSxcbiAgZm9yRWFjaEVudHJ5LFxuICBtYXRjaEFsbCxcbiAgaXNIVE1MRm9ybSxcbiAgaGFzT3duUHJvcGVydHksXG4gIGhhc093blByb3A6IGhhc093blByb3BlcnR5LCAvLyBhbiBhbGlhcyB0byBhdm9pZCBFU0xpbnQgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIGRldGVjdGlvblxuICByZWR1Y2VEZXNjcmlwdG9ycyxcbiAgZnJlZXplTWV0aG9kcyxcbiAgdG9PYmplY3RTZXQsXG4gIHRvQ2FtZWxDYXNlLFxuICBub29wLFxuICB0b0Zpbml0ZU51bWJlcixcbiAgZmluZEtleSxcbiAgZ2xvYmFsOiBfZ2xvYmFsLFxuICBpc0NvbnRleHREZWZpbmVkLFxuICBBTFBIQUJFVCxcbiAgZ2VuZXJhdGVTdHJpbmcsXG4gIGlzU3BlY0NvbXBsaWFudEZvcm0sXG4gIHRvSlNPTk9iamVjdCxcbiAgaXNBc3luY0ZuLFxuICBpc1RoZW5hYmxlXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcblxuLyoqXG4gKiBDcmVhdGUgYW4gRXJyb3Igd2l0aCB0aGUgc3BlY2lmaWVkIG1lc3NhZ2UsIGNvbmZpZywgZXJyb3IgY29kZSwgcmVxdWVzdCBhbmQgcmVzcG9uc2UuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2NvZGVdIFRoZSBlcnJvciBjb2RlIChmb3IgZXhhbXBsZSwgJ0VDT05OQUJPUlRFRCcpLlxuICogQHBhcmFtIHtPYmplY3R9IFtjb25maWddIFRoZSBjb25maWcuXG4gKiBAcGFyYW0ge09iamVjdH0gW3JlcXVlc3RdIFRoZSByZXF1ZXN0LlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXNwb25zZV0gVGhlIHJlc3BvbnNlLlxuICpcbiAqIEByZXR1cm5zIHtFcnJvcn0gVGhlIGNyZWF0ZWQgZXJyb3IuXG4gKi9cbmZ1bmN0aW9uIEF4aW9zRXJyb3IobWVzc2FnZSwgY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSkge1xuICBFcnJvci5jYWxsKHRoaXMpO1xuXG4gIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuc3RhY2sgPSAobmV3IEVycm9yKCkpLnN0YWNrO1xuICB9XG5cbiAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgdGhpcy5uYW1lID0gJ0F4aW9zRXJyb3InO1xuICBjb2RlICYmICh0aGlzLmNvZGUgPSBjb2RlKTtcbiAgY29uZmlnICYmICh0aGlzLmNvbmZpZyA9IGNvbmZpZyk7XG4gIHJlcXVlc3QgJiYgKHRoaXMucmVxdWVzdCA9IHJlcXVlc3QpO1xuICByZXNwb25zZSAmJiAodGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlKTtcbn1cblxudXRpbHMuaW5oZXJpdHMoQXhpb3NFcnJvciwgRXJyb3IsIHtcbiAgdG9KU09OOiBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIFN0YW5kYXJkXG4gICAgICBtZXNzYWdlOiB0aGlzLm1lc3NhZ2UsXG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAvLyBNaWNyb3NvZnRcbiAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmRlc2NyaXB0aW9uLFxuICAgICAgbnVtYmVyOiB0aGlzLm51bWJlcixcbiAgICAgIC8vIE1vemlsbGFcbiAgICAgIGZpbGVOYW1lOiB0aGlzLmZpbGVOYW1lLFxuICAgICAgbGluZU51bWJlcjogdGhpcy5saW5lTnVtYmVyLFxuICAgICAgY29sdW1uTnVtYmVyOiB0aGlzLmNvbHVtbk51bWJlcixcbiAgICAgIHN0YWNrOiB0aGlzLnN0YWNrLFxuICAgICAgLy8gQXhpb3NcbiAgICAgIGNvbmZpZzogdXRpbHMudG9KU09OT2JqZWN0KHRoaXMuY29uZmlnKSxcbiAgICAgIGNvZGU6IHRoaXMuY29kZSxcbiAgICAgIHN0YXR1czogdGhpcy5yZXNwb25zZSAmJiB0aGlzLnJlc3BvbnNlLnN0YXR1cyA/IHRoaXMucmVzcG9uc2Uuc3RhdHVzIDogbnVsbFxuICAgIH07XG4gIH1cbn0pO1xuXG5jb25zdCBwcm90b3R5cGUgPSBBeGlvc0Vycm9yLnByb3RvdHlwZTtcbmNvbnN0IGRlc2NyaXB0b3JzID0ge307XG5cbltcbiAgJ0VSUl9CQURfT1BUSU9OX1ZBTFVFJyxcbiAgJ0VSUl9CQURfT1BUSU9OJyxcbiAgJ0VDT05OQUJPUlRFRCcsXG4gICdFVElNRURPVVQnLFxuICAnRVJSX05FVFdPUksnLFxuICAnRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUycsXG4gICdFUlJfREVQUkVDQVRFRCcsXG4gICdFUlJfQkFEX1JFU1BPTlNFJyxcbiAgJ0VSUl9CQURfUkVRVUVTVCcsXG4gICdFUlJfQ0FOQ0VMRUQnLFxuICAnRVJSX05PVF9TVVBQT1JUJyxcbiAgJ0VSUl9JTlZBTElEX1VSTCdcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5dLmZvckVhY2goY29kZSA9PiB7XG4gIGRlc2NyaXB0b3JzW2NvZGVdID0ge3ZhbHVlOiBjb2RlfTtcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhBeGlvc0Vycm9yLCBkZXNjcmlwdG9ycyk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkocHJvdG90eXBlLCAnaXNBeGlvc0Vycm9yJywge3ZhbHVlOiB0cnVlfSk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5BeGlvc0Vycm9yLmZyb20gPSAoZXJyb3IsIGNvZGUsIGNvbmZpZywgcmVxdWVzdCwgcmVzcG9uc2UsIGN1c3RvbVByb3BzKSA9PiB7XG4gIGNvbnN0IGF4aW9zRXJyb3IgPSBPYmplY3QuY3JlYXRlKHByb3RvdHlwZSk7XG5cbiAgdXRpbHMudG9GbGF0T2JqZWN0KGVycm9yLCBheGlvc0Vycm9yLCBmdW5jdGlvbiBmaWx0ZXIob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAhPT0gRXJyb3IucHJvdG90eXBlO1xuICB9LCBwcm9wID0+IHtcbiAgICByZXR1cm4gcHJvcCAhPT0gJ2lzQXhpb3NFcnJvcic7XG4gIH0pO1xuXG4gIEF4aW9zRXJyb3IuY2FsbChheGlvc0Vycm9yLCBlcnJvci5tZXNzYWdlLCBjb2RlLCBjb25maWcsIHJlcXVlc3QsIHJlc3BvbnNlKTtcblxuICBheGlvc0Vycm9yLmNhdXNlID0gZXJyb3I7XG5cbiAgYXhpb3NFcnJvci5uYW1lID0gZXJyb3IubmFtZTtcblxuICBjdXN0b21Qcm9wcyAmJiBPYmplY3QuYXNzaWduKGF4aW9zRXJyb3IsIGN1c3RvbVByb3BzKTtcblxuICByZXR1cm4gYXhpb3NFcnJvcjtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEF4aW9zRXJyb3I7XG4iLCAiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHN0cmljdFxuZXhwb3J0IGRlZmF1bHQgbnVsbDtcbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuLy8gdGVtcG9yYXJ5IGhvdGZpeCB0byBhdm9pZCBjaXJjdWxhciByZWZlcmVuY2VzIHVudGlsIEF4aW9zVVJMU2VhcmNoUGFyYW1zIGlzIHJlZmFjdG9yZWRcbmltcG9ydCBQbGF0Zm9ybUZvcm1EYXRhIGZyb20gJy4uL3BsYXRmb3JtL25vZGUvY2xhc3Nlcy9Gb3JtRGF0YS5qcyc7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgZ2l2ZW4gdGhpbmcgaXMgYSBhcnJheSBvciBqcyBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRoaW5nIC0gVGhlIG9iamVjdCBvciBhcnJheSB0byBiZSB2aXNpdGVkLlxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc1Zpc2l0YWJsZSh0aGluZykge1xuICByZXR1cm4gdXRpbHMuaXNQbGFpbk9iamVjdCh0aGluZykgfHwgdXRpbHMuaXNBcnJheSh0aGluZyk7XG59XG5cbi8qKlxuICogSXQgcmVtb3ZlcyB0aGUgYnJhY2tldHMgZnJvbSB0aGUgZW5kIG9mIGEgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIHBhcmFtZXRlci5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSB0aGUga2V5IHdpdGhvdXQgdGhlIGJyYWNrZXRzLlxuICovXG5mdW5jdGlvbiByZW1vdmVCcmFja2V0cyhrZXkpIHtcbiAgcmV0dXJuIHV0aWxzLmVuZHNXaXRoKGtleSwgJ1tdJykgPyBrZXkuc2xpY2UoMCwgLTIpIDoga2V5O1xufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgcGF0aCwgYSBrZXksIGFuZCBhIGJvb2xlYW4sIGFuZCByZXR1cm5zIGEgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBUaGUgcGF0aCB0byB0aGUgY3VycmVudCBrZXkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgY3VycmVudCBvYmplY3QgYmVpbmcgaXRlcmF0ZWQgb3Zlci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBkb3RzIC0gSWYgdHJ1ZSwgdGhlIGtleSB3aWxsIGJlIHJlbmRlcmVkIHdpdGggZG90cyBpbnN0ZWFkIG9mIGJyYWNrZXRzLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBwYXRoIHRvIHRoZSBjdXJyZW50IGtleS5cbiAqL1xuZnVuY3Rpb24gcmVuZGVyS2V5KHBhdGgsIGtleSwgZG90cykge1xuICBpZiAoIXBhdGgpIHJldHVybiBrZXk7XG4gIHJldHVybiBwYXRoLmNvbmNhdChrZXkpLm1hcChmdW5jdGlvbiBlYWNoKHRva2VuLCBpKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgdG9rZW4gPSByZW1vdmVCcmFja2V0cyh0b2tlbik7XG4gICAgcmV0dXJuICFkb3RzICYmIGkgPyAnWycgKyB0b2tlbiArICddJyA6IHRva2VuO1xuICB9KS5qb2luKGRvdHMgPyAnLicgOiAnJyk7XG59XG5cbi8qKlxuICogSWYgdGhlIGFycmF5IGlzIGFuIGFycmF5IGFuZCBub25lIG9mIGl0cyBlbGVtZW50cyBhcmUgdmlzaXRhYmxlLCB0aGVuIGl0J3MgYSBmbGF0IGFycmF5LlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gYXJyIC0gVGhlIGFycmF5IHRvIGNoZWNrXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzRmxhdEFycmF5KGFycikge1xuICByZXR1cm4gdXRpbHMuaXNBcnJheShhcnIpICYmICFhcnIuc29tZShpc1Zpc2l0YWJsZSk7XG59XG5cbmNvbnN0IHByZWRpY2F0ZXMgPSB1dGlscy50b0ZsYXRPYmplY3QodXRpbHMsIHt9LCBudWxsLCBmdW5jdGlvbiBmaWx0ZXIocHJvcCkge1xuICByZXR1cm4gL15pc1tBLVpdLy50ZXN0KHByb3ApO1xufSk7XG5cbi8qKlxuICogQ29udmVydCBhIGRhdGEgb2JqZWN0IHRvIEZvcm1EYXRhXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHBhcmFtIHs/T2JqZWN0fSBbZm9ybURhdGFdXG4gKiBAcGFyYW0gez9PYmplY3R9IFtvcHRpb25zXVxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdGlvbnMudmlzaXRvcl1cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMubWV0YVRva2VucyA9IHRydWVdXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLmRvdHMgPSBmYWxzZV1cbiAqIEBwYXJhbSB7P0Jvb2xlYW59IFtvcHRpb25zLmluZGV4ZXMgPSBmYWxzZV1cbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICoqL1xuXG4vKipcbiAqIEl0IGNvbnZlcnRzIGFuIG9iamVjdCBpbnRvIGEgRm9ybURhdGEgb2JqZWN0XG4gKlxuICogQHBhcmFtIHtPYmplY3Q8YW55LCBhbnk+fSBvYmogLSBUaGUgb2JqZWN0IHRvIGNvbnZlcnQgdG8gZm9ybSBkYXRhLlxuICogQHBhcmFtIHtzdHJpbmd9IGZvcm1EYXRhIC0gVGhlIEZvcm1EYXRhIG9iamVjdCB0byBhcHBlbmQgdG8uXG4gKiBAcGFyYW0ge09iamVjdDxzdHJpbmcsIGFueT59IG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJuc1xuICovXG5mdW5jdGlvbiB0b0Zvcm1EYXRhKG9iaiwgZm9ybURhdGEsIG9wdGlvbnMpIHtcbiAgaWYgKCF1dGlscy5pc09iamVjdChvYmopKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndGFyZ2V0IG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgZm9ybURhdGEgPSBmb3JtRGF0YSB8fCBuZXcgKFBsYXRmb3JtRm9ybURhdGEgfHwgRm9ybURhdGEpKCk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIG9wdGlvbnMgPSB1dGlscy50b0ZsYXRPYmplY3Qob3B0aW9ucywge1xuICAgIG1ldGFUb2tlbnM6IHRydWUsXG4gICAgZG90czogZmFsc2UsXG4gICAgaW5kZXhlczogZmFsc2VcbiAgfSwgZmFsc2UsIGZ1bmN0aW9uIGRlZmluZWQob3B0aW9uLCBzb3VyY2UpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXEtbnVsbCxlcWVxZXFcbiAgICByZXR1cm4gIXV0aWxzLmlzVW5kZWZpbmVkKHNvdXJjZVtvcHRpb25dKTtcbiAgfSk7XG5cbiAgY29uc3QgbWV0YVRva2VucyA9IG9wdGlvbnMubWV0YVRva2VucztcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gIGNvbnN0IHZpc2l0b3IgPSBvcHRpb25zLnZpc2l0b3IgfHwgZGVmYXVsdFZpc2l0b3I7XG4gIGNvbnN0IGRvdHMgPSBvcHRpb25zLmRvdHM7XG4gIGNvbnN0IGluZGV4ZXMgPSBvcHRpb25zLmluZGV4ZXM7XG4gIGNvbnN0IF9CbG9iID0gb3B0aW9ucy5CbG9iIHx8IHR5cGVvZiBCbG9iICE9PSAndW5kZWZpbmVkJyAmJiBCbG9iO1xuICBjb25zdCB1c2VCbG9iID0gX0Jsb2IgJiYgdXRpbHMuaXNTcGVjQ29tcGxpYW50Rm9ybShmb3JtRGF0YSk7XG5cbiAgaWYgKCF1dGlscy5pc0Z1bmN0aW9uKHZpc2l0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndmlzaXRvciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbnZlcnRWYWx1ZSh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuICcnO1xuXG4gICAgaWYgKHV0aWxzLmlzRGF0ZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZS50b0lTT1N0cmluZygpO1xuICAgIH1cblxuICAgIGlmICghdXNlQmxvYiAmJiB1dGlscy5pc0Jsb2IodmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcignQmxvYiBpcyBub3Qgc3VwcG9ydGVkLiBVc2UgYSBCdWZmZXIgaW5zdGVhZC4nKTtcbiAgICB9XG5cbiAgICBpZiAodXRpbHMuaXNBcnJheUJ1ZmZlcih2YWx1ZSkgfHwgdXRpbHMuaXNUeXBlZEFycmF5KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHVzZUJsb2IgJiYgdHlwZW9mIEJsb2IgPT09ICdmdW5jdGlvbicgPyBuZXcgQmxvYihbdmFsdWVdKSA6IEJ1ZmZlci5mcm9tKHZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogRGVmYXVsdCB2aXNpdG9yLlxuICAgKlxuICAgKiBAcGFyYW0geyp9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfE51bWJlcn0ga2V5XG4gICAqIEBwYXJhbSB7QXJyYXk8U3RyaW5nfE51bWJlcj59IHBhdGhcbiAgICogQHRoaXMge0Zvcm1EYXRhfVxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gcmV0dXJuIHRydWUgdG8gdmlzaXQgdGhlIGVhY2ggcHJvcCBvZiB0aGUgdmFsdWUgcmVjdXJzaXZlbHlcbiAgICovXG4gIGZ1bmN0aW9uIGRlZmF1bHRWaXNpdG9yKHZhbHVlLCBrZXksIHBhdGgpIHtcbiAgICBsZXQgYXJyID0gdmFsdWU7XG5cbiAgICBpZiAodmFsdWUgJiYgIXBhdGggJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgaWYgKHV0aWxzLmVuZHNXaXRoKGtleSwgJ3t9JykpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIGtleSA9IG1ldGFUb2tlbnMgPyBrZXkgOiBrZXkuc2xpY2UoMCwgLTIpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgdmFsdWUgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAodXRpbHMuaXNBcnJheSh2YWx1ZSkgJiYgaXNGbGF0QXJyYXkodmFsdWUpKSB8fFxuICAgICAgICAoKHV0aWxzLmlzRmlsZUxpc3QodmFsdWUpIHx8IHV0aWxzLmVuZHNXaXRoKGtleSwgJ1tdJykpICYmIChhcnIgPSB1dGlscy50b0FycmF5KHZhbHVlKSlcbiAgICAgICAgKSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAga2V5ID0gcmVtb3ZlQnJhY2tldHMoa2V5KTtcblxuICAgICAgICBhcnIuZm9yRWFjaChmdW5jdGlvbiBlYWNoKGVsLCBpbmRleCkge1xuICAgICAgICAgICEodXRpbHMuaXNVbmRlZmluZWQoZWwpIHx8IGVsID09PSBudWxsKSAmJiBmb3JtRGF0YS5hcHBlbmQoXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmVzdGVkLXRlcm5hcnlcbiAgICAgICAgICAgIGluZGV4ZXMgPT09IHRydWUgPyByZW5kZXJLZXkoW2tleV0sIGluZGV4LCBkb3RzKSA6IChpbmRleGVzID09PSBudWxsID8ga2V5IDoga2V5ICsgJ1tdJyksXG4gICAgICAgICAgICBjb252ZXJ0VmFsdWUoZWwpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNWaXNpdGFibGUodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQocmVuZGVyS2V5KHBhdGgsIGtleSwgZG90cyksIGNvbnZlcnRWYWx1ZSh2YWx1ZSkpO1xuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3Qgc3RhY2sgPSBbXTtcblxuICBjb25zdCBleHBvc2VkSGVscGVycyA9IE9iamVjdC5hc3NpZ24ocHJlZGljYXRlcywge1xuICAgIGRlZmF1bHRWaXNpdG9yLFxuICAgIGNvbnZlcnRWYWx1ZSxcbiAgICBpc1Zpc2l0YWJsZVxuICB9KTtcblxuICBmdW5jdGlvbiBidWlsZCh2YWx1ZSwgcGF0aCkge1xuICAgIGlmICh1dGlscy5pc1VuZGVmaW5lZCh2YWx1ZSkpIHJldHVybjtcblxuICAgIGlmIChzdGFjay5pbmRleE9mKHZhbHVlKSAhPT0gLTEpIHtcbiAgICAgIHRocm93IEVycm9yKCdDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgaW4gJyArIHBhdGguam9pbignLicpKTtcbiAgICB9XG5cbiAgICBzdGFjay5wdXNoKHZhbHVlKTtcblxuICAgIHV0aWxzLmZvckVhY2godmFsdWUsIGZ1bmN0aW9uIGVhY2goZWwsIGtleSkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gISh1dGlscy5pc1VuZGVmaW5lZChlbCkgfHwgZWwgPT09IG51bGwpICYmIHZpc2l0b3IuY2FsbChcbiAgICAgICAgZm9ybURhdGEsIGVsLCB1dGlscy5pc1N0cmluZyhrZXkpID8ga2V5LnRyaW0oKSA6IGtleSwgcGF0aCwgZXhwb3NlZEhlbHBlcnNcbiAgICAgICk7XG5cbiAgICAgIGlmIChyZXN1bHQgPT09IHRydWUpIHtcbiAgICAgICAgYnVpbGQoZWwsIHBhdGggPyBwYXRoLmNvbmNhdChrZXkpIDogW2tleV0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgc3RhY2sucG9wKCk7XG4gIH1cblxuICBpZiAoIXV0aWxzLmlzT2JqZWN0KG9iaikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdkYXRhIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gIH1cblxuICBidWlsZChvYmopO1xuXG4gIHJldHVybiBmb3JtRGF0YTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdG9Gb3JtRGF0YTtcbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB0b0Zvcm1EYXRhIGZyb20gJy4vdG9Gb3JtRGF0YS5qcyc7XG5cbi8qKlxuICogSXQgZW5jb2RlcyBhIHN0cmluZyBieSByZXBsYWNpbmcgYWxsIGNoYXJhY3RlcnMgdGhhdCBhcmUgbm90IGluIHRoZSB1bnJlc2VydmVkIHNldCB3aXRoXG4gKiB0aGVpciBwZXJjZW50LWVuY29kZWQgZXF1aXZhbGVudHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyIC0gVGhlIHN0cmluZyB0byBlbmNvZGUuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGVuY29kZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBlbmNvZGUoc3RyKSB7XG4gIGNvbnN0IGNoYXJNYXAgPSB7XG4gICAgJyEnOiAnJTIxJyxcbiAgICBcIidcIjogJyUyNycsXG4gICAgJygnOiAnJTI4JyxcbiAgICAnKSc6ICclMjknLFxuICAgICd+JzogJyU3RScsXG4gICAgJyUyMCc6ICcrJyxcbiAgICAnJTAwJzogJ1xceDAwJ1xuICB9O1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHN0cikucmVwbGFjZSgvWyEnKCl+XXwlMjB8JTAwL2csIGZ1bmN0aW9uIHJlcGxhY2VyKG1hdGNoKSB7XG4gICAgcmV0dXJuIGNoYXJNYXBbbWF0Y2hdO1xuICB9KTtcbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIHBhcmFtcyBvYmplY3QgYW5kIGNvbnZlcnRzIGl0IHRvIGEgRm9ybURhdGEgb2JqZWN0XG4gKlxuICogQHBhcmFtIHtPYmplY3Q8c3RyaW5nLCBhbnk+fSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyB0byBiZSBjb252ZXJ0ZWQgdG8gYSBGb3JtRGF0YSBvYmplY3QuXG4gKiBAcGFyYW0ge09iamVjdDxzdHJpbmcsIGFueT59IG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBvYmplY3QgcGFzc2VkIHRvIHRoZSBBeGlvcyBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gQXhpb3NVUkxTZWFyY2hQYXJhbXMocGFyYW1zLCBvcHRpb25zKSB7XG4gIHRoaXMuX3BhaXJzID0gW107XG5cbiAgcGFyYW1zICYmIHRvRm9ybURhdGEocGFyYW1zLCB0aGlzLCBvcHRpb25zKTtcbn1cblxuY29uc3QgcHJvdG90eXBlID0gQXhpb3NVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlO1xuXG5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24gYXBwZW5kKG5hbWUsIHZhbHVlKSB7XG4gIHRoaXMuX3BhaXJzLnB1c2goW25hbWUsIHZhbHVlXSk7XG59O1xuXG5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyhlbmNvZGVyKSB7XG4gIGNvbnN0IF9lbmNvZGUgPSBlbmNvZGVyID8gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gZW5jb2Rlci5jYWxsKHRoaXMsIHZhbHVlLCBlbmNvZGUpO1xuICB9IDogZW5jb2RlO1xuXG4gIHJldHVybiB0aGlzLl9wYWlycy5tYXAoZnVuY3Rpb24gZWFjaChwYWlyKSB7XG4gICAgcmV0dXJuIF9lbmNvZGUocGFpclswXSkgKyAnPScgKyBfZW5jb2RlKHBhaXJbMV0pO1xuICB9LCAnJykuam9pbignJicpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgQXhpb3NVUkxTZWFyY2hQYXJhbXM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IEF4aW9zVVJMU2VhcmNoUGFyYW1zIGZyb20gJy4uL2hlbHBlcnMvQXhpb3NVUkxTZWFyY2hQYXJhbXMuanMnO1xuXG4vKipcbiAqIEl0IHJlcGxhY2VzIGFsbCBpbnN0YW5jZXMgb2YgdGhlIGNoYXJhY3RlcnMgYDpgLCBgJGAsIGAsYCwgYCtgLCBgW2AsIGFuZCBgXWAgd2l0aCB0aGVpclxuICogVVJJIGVuY29kZWQgY291bnRlcnBhcnRzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbCBUaGUgdmFsdWUgdG8gYmUgZW5jb2RlZC5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZW5jb2RlZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gZW5jb2RlKHZhbCkge1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHZhbCkuXG4gICAgcmVwbGFjZSgvJTNBL2dpLCAnOicpLlxuICAgIHJlcGxhY2UoLyUyNC9nLCAnJCcpLlxuICAgIHJlcGxhY2UoLyUyQy9naSwgJywnKS5cbiAgICByZXBsYWNlKC8lMjAvZywgJysnKS5cbiAgICByZXBsYWNlKC8lNUIvZ2ksICdbJykuXG4gICAgcmVwbGFjZSgvJTVEL2dpLCAnXScpO1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgVVJMIGJ5IGFwcGVuZGluZyBwYXJhbXMgdG8gdGhlIGVuZFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIGJhc2Ugb2YgdGhlIHVybCAoZS5nLiwgaHR0cDovL3d3dy5nb29nbGUuY29tKVxuICogQHBhcmFtIHtvYmplY3R9IFtwYXJhbXNdIFRoZSBwYXJhbXMgdG8gYmUgYXBwZW5kZWRcbiAqIEBwYXJhbSB7P29iamVjdH0gb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBmb3JtYXR0ZWQgdXJsXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkVVJMKHVybCwgcGFyYW1zLCBvcHRpb25zKSB7XG4gIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICBpZiAoIXBhcmFtcykge1xuICAgIHJldHVybiB1cmw7XG4gIH1cbiAgXG4gIGNvbnN0IF9lbmNvZGUgPSBvcHRpb25zICYmIG9wdGlvbnMuZW5jb2RlIHx8IGVuY29kZTtcblxuICBjb25zdCBzZXJpYWxpemVGbiA9IG9wdGlvbnMgJiYgb3B0aW9ucy5zZXJpYWxpemU7XG5cbiAgbGV0IHNlcmlhbGl6ZWRQYXJhbXM7XG5cbiAgaWYgKHNlcmlhbGl6ZUZuKSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHNlcmlhbGl6ZUZuKHBhcmFtcywgb3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHV0aWxzLmlzVVJMU2VhcmNoUGFyYW1zKHBhcmFtcykgP1xuICAgICAgcGFyYW1zLnRvU3RyaW5nKCkgOlxuICAgICAgbmV3IEF4aW9zVVJMU2VhcmNoUGFyYW1zKHBhcmFtcywgb3B0aW9ucykudG9TdHJpbmcoX2VuY29kZSk7XG4gIH1cblxuICBpZiAoc2VyaWFsaXplZFBhcmFtcykge1xuICAgIGNvbnN0IGhhc2htYXJrSW5kZXggPSB1cmwuaW5kZXhPZihcIiNcIik7XG5cbiAgICBpZiAoaGFzaG1hcmtJbmRleCAhPT0gLTEpIHtcbiAgICAgIHVybCA9IHVybC5zbGljZSgwLCBoYXNobWFya0luZGV4KTtcbiAgICB9XG4gICAgdXJsICs9ICh1cmwuaW5kZXhPZignPycpID09PSAtMSA/ICc/JyA6ICcmJykgKyBzZXJpYWxpemVkUGFyYW1zO1xuICB9XG5cbiAgcmV0dXJuIHVybDtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLy4uL3V0aWxzLmpzJztcblxuY2xhc3MgSW50ZXJjZXB0b3JNYW5hZ2VyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5oYW5kbGVycyA9IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIG5ldyBpbnRlcmNlcHRvciB0byB0aGUgc3RhY2tcbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVsZmlsbGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHRoZW5gIGZvciBhIGBQcm9taXNlYFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWplY3RlZCBUaGUgZnVuY3Rpb24gdG8gaGFuZGxlIGByZWplY3RgIGZvciBhIGBQcm9taXNlYFxuICAgKlxuICAgKiBAcmV0dXJuIHtOdW1iZXJ9IEFuIElEIHVzZWQgdG8gcmVtb3ZlIGludGVyY2VwdG9yIGxhdGVyXG4gICAqL1xuICB1c2UoZnVsZmlsbGVkLCByZWplY3RlZCwgb3B0aW9ucykge1xuICAgIHRoaXMuaGFuZGxlcnMucHVzaCh7XG4gICAgICBmdWxmaWxsZWQsXG4gICAgICByZWplY3RlZCxcbiAgICAgIHN5bmNocm9ub3VzOiBvcHRpb25zID8gb3B0aW9ucy5zeW5jaHJvbm91cyA6IGZhbHNlLFxuICAgICAgcnVuV2hlbjogb3B0aW9ucyA/IG9wdGlvbnMucnVuV2hlbiA6IG51bGxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVycy5sZW5ndGggLSAxO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhbiBpbnRlcmNlcHRvciBmcm9tIHRoZSBzdGFja1xuICAgKlxuICAgKiBAcGFyYW0ge051bWJlcn0gaWQgVGhlIElEIHRoYXQgd2FzIHJldHVybmVkIGJ5IGB1c2VgXG4gICAqXG4gICAqIEByZXR1cm5zIHtCb29sZWFufSBgdHJ1ZWAgaWYgdGhlIGludGVyY2VwdG9yIHdhcyByZW1vdmVkLCBgZmFsc2VgIG90aGVyd2lzZVxuICAgKi9cbiAgZWplY3QoaWQpIHtcbiAgICBpZiAodGhpcy5oYW5kbGVyc1tpZF0pIHtcbiAgICAgIHRoaXMuaGFuZGxlcnNbaWRdID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgYWxsIGludGVyY2VwdG9ycyBmcm9tIHRoZSBzdGFja1xuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGNsZWFyKCkge1xuICAgIGlmICh0aGlzLmhhbmRsZXJzKSB7XG4gICAgICB0aGlzLmhhbmRsZXJzID0gW107XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEl0ZXJhdGUgb3ZlciBhbGwgdGhlIHJlZ2lzdGVyZWQgaW50ZXJjZXB0b3JzXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIHNraXBwaW5nIG92ZXIgYW55XG4gICAqIGludGVyY2VwdG9ycyB0aGF0IG1heSBoYXZlIGJlY29tZSBgbnVsbGAgY2FsbGluZyBgZWplY3RgLlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCBpbnRlcmNlcHRvclxuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGZvckVhY2goZm4pIHtcbiAgICB1dGlscy5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsIGZ1bmN0aW9uIGZvckVhY2hIYW5kbGVyKGgpIHtcbiAgICAgIGlmIChoICE9PSBudWxsKSB7XG4gICAgICAgIGZuKGgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEludGVyY2VwdG9yTWFuYWdlcjtcbiIsICIndXNlIHN0cmljdCc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgc2lsZW50SlNPTlBhcnNpbmc6IHRydWUsXG4gIGZvcmNlZEpTT05QYXJzaW5nOiB0cnVlLFxuICBjbGFyaWZ5VGltZW91dEVycm9yOiBmYWxzZVxufTtcbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBBeGlvc1VSTFNlYXJjaFBhcmFtcyBmcm9tICcuLi8uLi8uLi9oZWxwZXJzL0F4aW9zVVJMU2VhcmNoUGFyYW1zLmpzJztcbmV4cG9ydCBkZWZhdWx0IHR5cGVvZiBVUkxTZWFyY2hQYXJhbXMgIT09ICd1bmRlZmluZWQnID8gVVJMU2VhcmNoUGFyYW1zIDogQXhpb3NVUkxTZWFyY2hQYXJhbXM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnQgZGVmYXVsdCB0eXBlb2YgRm9ybURhdGEgIT09ICd1bmRlZmluZWQnID8gRm9ybURhdGEgOiBudWxsO1xuIiwgIid1c2Ugc3RyaWN0J1xuXG5leHBvcnQgZGVmYXVsdCB0eXBlb2YgQmxvYiAhPT0gJ3VuZGVmaW5lZCcgPyBCbG9iIDogbnVsbFxuIiwgImltcG9ydCBVUkxTZWFyY2hQYXJhbXMgZnJvbSAnLi9jbGFzc2VzL1VSTFNlYXJjaFBhcmFtcy5qcydcbmltcG9ydCBGb3JtRGF0YSBmcm9tICcuL2NsYXNzZXMvRm9ybURhdGEuanMnXG5pbXBvcnQgQmxvYiBmcm9tICcuL2NsYXNzZXMvQmxvYi5qcydcblxuZXhwb3J0IGRlZmF1bHQge1xuICBpc0Jyb3dzZXI6IHRydWUsXG4gIGNsYXNzZXM6IHtcbiAgICBVUkxTZWFyY2hQYXJhbXMsXG4gICAgRm9ybURhdGEsXG4gICAgQmxvYlxuICB9LFxuICBwcm90b2NvbHM6IFsnaHR0cCcsICdodHRwcycsICdmaWxlJywgJ2Jsb2InLCAndXJsJywgJ2RhdGEnXVxufTtcbiIsICJjb25zdCBoYXNCcm93c2VyRW52ID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJztcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgd2UncmUgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgZW52aXJvbm1lbnRcbiAqXG4gKiBUaGlzIGFsbG93cyBheGlvcyB0byBydW4gaW4gYSB3ZWIgd29ya2VyLCBhbmQgcmVhY3QtbmF0aXZlLlxuICogQm90aCBlbnZpcm9ubWVudHMgc3VwcG9ydCBYTUxIdHRwUmVxdWVzdCwgYnV0IG5vdCBmdWxseSBzdGFuZGFyZCBnbG9iYWxzLlxuICpcbiAqIHdlYiB3b3JrZXJzOlxuICogIHR5cGVvZiB3aW5kb3cgLT4gdW5kZWZpbmVkXG4gKiAgdHlwZW9mIGRvY3VtZW50IC0+IHVuZGVmaW5lZFxuICpcbiAqIHJlYWN0LW5hdGl2ZTpcbiAqICBuYXZpZ2F0b3IucHJvZHVjdCAtPiAnUmVhY3ROYXRpdmUnXG4gKiBuYXRpdmVzY3JpcHRcbiAqICBuYXZpZ2F0b3IucHJvZHVjdCAtPiAnTmF0aXZlU2NyaXB0JyBvciAnTlMnXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmNvbnN0IGhhc1N0YW5kYXJkQnJvd3NlckVudiA9IChcbiAgKHByb2R1Y3QpID0+IHtcbiAgICByZXR1cm4gaGFzQnJvd3NlckVudiAmJiBbJ1JlYWN0TmF0aXZlJywgJ05hdGl2ZVNjcmlwdCcsICdOUyddLmluZGV4T2YocHJvZHVjdCkgPCAwXG4gIH0pKHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci5wcm9kdWN0KTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgd2UncmUgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgd2ViV29ya2VyIGVudmlyb25tZW50XG4gKlxuICogQWx0aG91Z2ggdGhlIGBpc1N0YW5kYXJkQnJvd3NlckVudmAgbWV0aG9kIGluZGljYXRlcyB0aGF0XG4gKiBgYWxsb3dzIGF4aW9zIHRvIHJ1biBpbiBhIHdlYiB3b3JrZXJgLCB0aGUgV2ViV29ya2VyIHdpbGwgc3RpbGwgYmVcbiAqIGZpbHRlcmVkIG91dCBkdWUgdG8gaXRzIGp1ZGdtZW50IHN0YW5kYXJkXG4gKiBgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJ2AuXG4gKiBUaGlzIGxlYWRzIHRvIGEgcHJvYmxlbSB3aGVuIGF4aW9zIHBvc3QgYEZvcm1EYXRhYCBpbiB3ZWJXb3JrZXJcbiAqL1xuY29uc3QgaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52ID0gKCgpID0+IHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2YgV29ya2VyR2xvYmFsU2NvcGUgIT09ICd1bmRlZmluZWQnICYmXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gICAgc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlICYmXG4gICAgdHlwZW9mIHNlbGYuaW1wb3J0U2NyaXB0cyA9PT0gJ2Z1bmN0aW9uJ1xuICApO1xufSkoKTtcblxuZXhwb3J0IHtcbiAgaGFzQnJvd3NlckVudixcbiAgaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52LFxuICBoYXNTdGFuZGFyZEJyb3dzZXJFbnZcbn1cbiIsICJpbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi9ub2RlL2luZGV4LmpzJztcbmltcG9ydCAqIGFzIHV0aWxzIGZyb20gJy4vY29tbW9uL3V0aWxzLmpzJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICAuLi51dGlscyxcbiAgLi4ucGxhdGZvcm1cbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgdG9Gb3JtRGF0YSBmcm9tICcuL3RvRm9ybURhdGEuanMnO1xuaW1wb3J0IHBsYXRmb3JtIGZyb20gJy4uL3BsYXRmb3JtL2luZGV4LmpzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdG9VUkxFbmNvZGVkRm9ybShkYXRhLCBvcHRpb25zKSB7XG4gIHJldHVybiB0b0Zvcm1EYXRhKGRhdGEsIG5ldyBwbGF0Zm9ybS5jbGFzc2VzLlVSTFNlYXJjaFBhcmFtcygpLCBPYmplY3QuYXNzaWduKHtcbiAgICB2aXNpdG9yOiBmdW5jdGlvbih2YWx1ZSwga2V5LCBwYXRoLCBoZWxwZXJzKSB7XG4gICAgICBpZiAocGxhdGZvcm0uaXNOb2RlICYmIHV0aWxzLmlzQnVmZmVyKHZhbHVlKSkge1xuICAgICAgICB0aGlzLmFwcGVuZChrZXksIHZhbHVlLnRvU3RyaW5nKCdiYXNlNjQnKSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGhlbHBlcnMuZGVmYXVsdFZpc2l0b3IuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG4gIH0sIG9wdGlvbnMpKTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5cbi8qKlxuICogSXQgdGFrZXMgYSBzdHJpbmcgbGlrZSBgZm9vW3hdW3ldW3pdYCBhbmQgcmV0dXJucyBhbiBhcnJheSBsaWtlIGBbJ2ZvbycsICd4JywgJ3knLCAneiddXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICpcbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHN0cmluZ3MuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlUHJvcFBhdGgobmFtZSkge1xuICAvLyBmb29beF1beV1bel1cbiAgLy8gZm9vLngueS56XG4gIC8vIGZvby14LXktelxuICAvLyBmb28geCB5IHpcbiAgcmV0dXJuIHV0aWxzLm1hdGNoQWxsKC9cXHcrfFxcWyhcXHcqKV0vZywgbmFtZSkubWFwKG1hdGNoID0+IHtcbiAgICByZXR1cm4gbWF0Y2hbMF0gPT09ICdbXScgPyAnJyA6IG1hdGNoWzFdIHx8IG1hdGNoWzBdO1xuICB9KTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGFuIGFycmF5IHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PGFueT59IGFyciAtIFRoZSBhcnJheSB0byBjb252ZXJ0IHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAcmV0dXJucyBBbiBvYmplY3Qgd2l0aCB0aGUgc2FtZSBrZXlzIGFuZCB2YWx1ZXMgYXMgdGhlIGFycmF5LlxuICovXG5mdW5jdGlvbiBhcnJheVRvT2JqZWN0KGFycikge1xuICBjb25zdCBvYmogPSB7fTtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGFycik7XG4gIGxldCBpO1xuICBjb25zdCBsZW4gPSBrZXlzLmxlbmd0aDtcbiAgbGV0IGtleTtcbiAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAga2V5ID0ga2V5c1tpXTtcbiAgICBvYmpba2V5XSA9IGFycltrZXldO1xuICB9XG4gIHJldHVybiBvYmo7XG59XG5cbi8qKlxuICogSXQgdGFrZXMgYSBGb3JtRGF0YSBvYmplY3QgYW5kIHJldHVybnMgYSBKYXZhU2NyaXB0IG9iamVjdFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtRGF0YSBUaGUgRm9ybURhdGEgb2JqZWN0IHRvIGNvbnZlcnQgdG8gSlNPTi5cbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0PHN0cmluZywgYW55PiB8IG51bGx9IFRoZSBjb252ZXJ0ZWQgb2JqZWN0LlxuICovXG5mdW5jdGlvbiBmb3JtRGF0YVRvSlNPTihmb3JtRGF0YSkge1xuICBmdW5jdGlvbiBidWlsZFBhdGgocGF0aCwgdmFsdWUsIHRhcmdldCwgaW5kZXgpIHtcbiAgICBsZXQgbmFtZSA9IHBhdGhbaW5kZXgrK107XG5cbiAgICBpZiAobmFtZSA9PT0gJ19fcHJvdG9fXycpIHJldHVybiB0cnVlO1xuXG4gICAgY29uc3QgaXNOdW1lcmljS2V5ID0gTnVtYmVyLmlzRmluaXRlKCtuYW1lKTtcbiAgICBjb25zdCBpc0xhc3QgPSBpbmRleCA+PSBwYXRoLmxlbmd0aDtcbiAgICBuYW1lID0gIW5hbWUgJiYgdXRpbHMuaXNBcnJheSh0YXJnZXQpID8gdGFyZ2V0Lmxlbmd0aCA6IG5hbWU7XG5cbiAgICBpZiAoaXNMYXN0KSB7XG4gICAgICBpZiAodXRpbHMuaGFzT3duUHJvcCh0YXJnZXQsIG5hbWUpKSB7XG4gICAgICAgIHRhcmdldFtuYW1lXSA9IFt0YXJnZXRbbmFtZV0sIHZhbHVlXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRhcmdldFtuYW1lXSA9IHZhbHVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gIWlzTnVtZXJpY0tleTtcbiAgICB9XG5cbiAgICBpZiAoIXRhcmdldFtuYW1lXSB8fCAhdXRpbHMuaXNPYmplY3QodGFyZ2V0W25hbWVdKSkge1xuICAgICAgdGFyZ2V0W25hbWVdID0gW107XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gYnVpbGRQYXRoKHBhdGgsIHZhbHVlLCB0YXJnZXRbbmFtZV0sIGluZGV4KTtcblxuICAgIGlmIChyZXN1bHQgJiYgdXRpbHMuaXNBcnJheSh0YXJnZXRbbmFtZV0pKSB7XG4gICAgICB0YXJnZXRbbmFtZV0gPSBhcnJheVRvT2JqZWN0KHRhcmdldFtuYW1lXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuICFpc051bWVyaWNLZXk7XG4gIH1cblxuICBpZiAodXRpbHMuaXNGb3JtRGF0YShmb3JtRGF0YSkgJiYgdXRpbHMuaXNGdW5jdGlvbihmb3JtRGF0YS5lbnRyaWVzKSkge1xuICAgIGNvbnN0IG9iaiA9IHt9O1xuXG4gICAgdXRpbHMuZm9yRWFjaEVudHJ5KGZvcm1EYXRhLCAobmFtZSwgdmFsdWUpID0+IHtcbiAgICAgIGJ1aWxkUGF0aChwYXJzZVByb3BQYXRoKG5hbWUpLCB2YWx1ZSwgb2JqLCAwKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZm9ybURhdGFUb0pTT047XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi4vY29yZS9BeGlvc0Vycm9yLmpzJztcbmltcG9ydCB0cmFuc2l0aW9uYWxEZWZhdWx0cyBmcm9tICcuL3RyYW5zaXRpb25hbC5qcyc7XG5pbXBvcnQgdG9Gb3JtRGF0YSBmcm9tICcuLi9oZWxwZXJzL3RvRm9ybURhdGEuanMnO1xuaW1wb3J0IHRvVVJMRW5jb2RlZEZvcm0gZnJvbSAnLi4vaGVscGVycy90b1VSTEVuY29kZWRGb3JtLmpzJztcbmltcG9ydCBwbGF0Zm9ybSBmcm9tICcuLi9wbGF0Zm9ybS9pbmRleC5qcyc7XG5pbXBvcnQgZm9ybURhdGFUb0pTT04gZnJvbSAnLi4vaGVscGVycy9mb3JtRGF0YVRvSlNPTi5qcyc7XG5cbi8qKlxuICogSXQgdGFrZXMgYSBzdHJpbmcsIHRyaWVzIHRvIHBhcnNlIGl0LCBhbmQgaWYgaXQgZmFpbHMsIGl0IHJldHVybnMgdGhlIHN0cmluZ2lmaWVkIHZlcnNpb25cbiAqIG9mIHRoZSBpbnB1dFxuICpcbiAqIEBwYXJhbSB7YW55fSByYXdWYWx1ZSAtIFRoZSB2YWx1ZSB0byBiZSBzdHJpbmdpZmllZC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHBhcnNlciAtIEEgZnVuY3Rpb24gdGhhdCBwYXJzZXMgYSBzdHJpbmcgaW50byBhIEphdmFTY3JpcHQgb2JqZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZW5jb2RlciAtIEEgZnVuY3Rpb24gdGhhdCB0YWtlcyBhIHZhbHVlIGFuZCByZXR1cm5zIGEgc3RyaW5nLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IEEgc3RyaW5naWZpZWQgdmVyc2lvbiBvZiB0aGUgcmF3VmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHN0cmluZ2lmeVNhZmVseShyYXdWYWx1ZSwgcGFyc2VyLCBlbmNvZGVyKSB7XG4gIGlmICh1dGlscy5pc1N0cmluZyhyYXdWYWx1ZSkpIHtcbiAgICB0cnkge1xuICAgICAgKHBhcnNlciB8fCBKU09OLnBhcnNlKShyYXdWYWx1ZSk7XG4gICAgICByZXR1cm4gdXRpbHMudHJpbShyYXdWYWx1ZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGUubmFtZSAhPT0gJ1N5bnRheEVycm9yJykge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAoZW5jb2RlciB8fCBKU09OLnN0cmluZ2lmeSkocmF3VmFsdWUpO1xufVxuXG5jb25zdCBkZWZhdWx0cyA9IHtcblxuICB0cmFuc2l0aW9uYWw6IHRyYW5zaXRpb25hbERlZmF1bHRzLFxuXG4gIGFkYXB0ZXI6IFsneGhyJywgJ2h0dHAnXSxcblxuICB0cmFuc2Zvcm1SZXF1ZXN0OiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVxdWVzdChkYXRhLCBoZWFkZXJzKSB7XG4gICAgY29uc3QgY29udGVudFR5cGUgPSBoZWFkZXJzLmdldENvbnRlbnRUeXBlKCkgfHwgJyc7XG4gICAgY29uc3QgaGFzSlNPTkNvbnRlbnRUeXBlID0gY29udGVudFR5cGUuaW5kZXhPZignYXBwbGljYXRpb24vanNvbicpID4gLTE7XG4gICAgY29uc3QgaXNPYmplY3RQYXlsb2FkID0gdXRpbHMuaXNPYmplY3QoZGF0YSk7XG5cbiAgICBpZiAoaXNPYmplY3RQYXlsb2FkICYmIHV0aWxzLmlzSFRNTEZvcm0oZGF0YSkpIHtcbiAgICAgIGRhdGEgPSBuZXcgRm9ybURhdGEoZGF0YSk7XG4gICAgfVxuXG4gICAgY29uc3QgaXNGb3JtRGF0YSA9IHV0aWxzLmlzRm9ybURhdGEoZGF0YSk7XG5cbiAgICBpZiAoaXNGb3JtRGF0YSkge1xuICAgICAgcmV0dXJuIGhhc0pTT05Db250ZW50VHlwZSA/IEpTT04uc3RyaW5naWZ5KGZvcm1EYXRhVG9KU09OKGRhdGEpKSA6IGRhdGE7XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzLmlzQXJyYXlCdWZmZXIoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzQnVmZmVyKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc1N0cmVhbShkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNGaWxlKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0Jsb2IoZGF0YSlcbiAgICApIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgICBpZiAodXRpbHMuaXNBcnJheUJ1ZmZlclZpZXcoZGF0YSkpIHtcbiAgICAgIHJldHVybiBkYXRhLmJ1ZmZlcjtcbiAgICB9XG4gICAgaWYgKHV0aWxzLmlzVVJMU2VhcmNoUGFyYW1zKGRhdGEpKSB7XG4gICAgICBoZWFkZXJzLnNldENvbnRlbnRUeXBlKCdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCcsIGZhbHNlKTtcbiAgICAgIHJldHVybiBkYXRhLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgbGV0IGlzRmlsZUxpc3Q7XG5cbiAgICBpZiAoaXNPYmplY3RQYXlsb2FkKSB7XG4gICAgICBpZiAoY29udGVudFR5cGUuaW5kZXhPZignYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJykgPiAtMSkge1xuICAgICAgICByZXR1cm4gdG9VUkxFbmNvZGVkRm9ybShkYXRhLCB0aGlzLmZvcm1TZXJpYWxpemVyKS50b1N0cmluZygpO1xuICAgICAgfVxuXG4gICAgICBpZiAoKGlzRmlsZUxpc3QgPSB1dGlscy5pc0ZpbGVMaXN0KGRhdGEpKSB8fCBjb250ZW50VHlwZS5pbmRleE9mKCdtdWx0aXBhcnQvZm9ybS1kYXRhJykgPiAtMSkge1xuICAgICAgICBjb25zdCBfRm9ybURhdGEgPSB0aGlzLmVudiAmJiB0aGlzLmVudi5Gb3JtRGF0YTtcblxuICAgICAgICByZXR1cm4gdG9Gb3JtRGF0YShcbiAgICAgICAgICBpc0ZpbGVMaXN0ID8geydmaWxlc1tdJzogZGF0YX0gOiBkYXRhLFxuICAgICAgICAgIF9Gb3JtRGF0YSAmJiBuZXcgX0Zvcm1EYXRhKCksXG4gICAgICAgICAgdGhpcy5mb3JtU2VyaWFsaXplclxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc09iamVjdFBheWxvYWQgfHwgaGFzSlNPTkNvbnRlbnRUeXBlICkge1xuICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZSgnYXBwbGljYXRpb24vanNvbicsIGZhbHNlKTtcbiAgICAgIHJldHVybiBzdHJpbmdpZnlTYWZlbHkoZGF0YSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1dLFxuXG4gIHRyYW5zZm9ybVJlc3BvbnNlOiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVzcG9uc2UoZGF0YSkge1xuICAgIGNvbnN0IHRyYW5zaXRpb25hbCA9IHRoaXMudHJhbnNpdGlvbmFsIHx8IGRlZmF1bHRzLnRyYW5zaXRpb25hbDtcbiAgICBjb25zdCBmb3JjZWRKU09OUGFyc2luZyA9IHRyYW5zaXRpb25hbCAmJiB0cmFuc2l0aW9uYWwuZm9yY2VkSlNPTlBhcnNpbmc7XG4gICAgY29uc3QgSlNPTlJlcXVlc3RlZCA9IHRoaXMucmVzcG9uc2VUeXBlID09PSAnanNvbic7XG5cbiAgICBpZiAoZGF0YSAmJiB1dGlscy5pc1N0cmluZyhkYXRhKSAmJiAoKGZvcmNlZEpTT05QYXJzaW5nICYmICF0aGlzLnJlc3BvbnNlVHlwZSkgfHwgSlNPTlJlcXVlc3RlZCkpIHtcbiAgICAgIGNvbnN0IHNpbGVudEpTT05QYXJzaW5nID0gdHJhbnNpdGlvbmFsICYmIHRyYW5zaXRpb25hbC5zaWxlbnRKU09OUGFyc2luZztcbiAgICAgIGNvbnN0IHN0cmljdEpTT05QYXJzaW5nID0gIXNpbGVudEpTT05QYXJzaW5nICYmIEpTT05SZXF1ZXN0ZWQ7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoc3RyaWN0SlNPTlBhcnNpbmcpIHtcbiAgICAgICAgICBpZiAoZS5uYW1lID09PSAnU3ludGF4RXJyb3InKSB7XG4gICAgICAgICAgICB0aHJvdyBBeGlvc0Vycm9yLmZyb20oZSwgQXhpb3NFcnJvci5FUlJfQkFEX1JFU1BPTlNFLCB0aGlzLCBudWxsLCB0aGlzLnJlc3BvbnNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XSxcblxuICAvKipcbiAgICogQSB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyB0byBhYm9ydCBhIHJlcXVlc3QuIElmIHNldCB0byAwIChkZWZhdWx0KSBhXG4gICAqIHRpbWVvdXQgaXMgbm90IGNyZWF0ZWQuXG4gICAqL1xuICB0aW1lb3V0OiAwLFxuXG4gIHhzcmZDb29raWVOYW1lOiAnWFNSRi1UT0tFTicsXG4gIHhzcmZIZWFkZXJOYW1lOiAnWC1YU1JGLVRPS0VOJyxcblxuICBtYXhDb250ZW50TGVuZ3RoOiAtMSxcbiAgbWF4Qm9keUxlbmd0aDogLTEsXG5cbiAgZW52OiB7XG4gICAgRm9ybURhdGE6IHBsYXRmb3JtLmNsYXNzZXMuRm9ybURhdGEsXG4gICAgQmxvYjogcGxhdGZvcm0uY2xhc3Nlcy5CbG9iXG4gIH0sXG5cbiAgdmFsaWRhdGVTdGF0dXM6IGZ1bmN0aW9uIHZhbGlkYXRlU3RhdHVzKHN0YXR1cykge1xuICAgIHJldHVybiBzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMDtcbiAgfSxcblxuICBoZWFkZXJzOiB7XG4gICAgY29tbW9uOiB7XG4gICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKicsXG4gICAgICAnQ29udGVudC1UeXBlJzogdW5kZWZpbmVkXG4gICAgfVxuICB9XG59O1xuXG51dGlscy5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10sIChtZXRob2QpID0+IHtcbiAgZGVmYXVsdHMuaGVhZGVyc1ttZXRob2RdID0ge307XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgZGVmYXVsdHM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5cbi8vIFJhd0F4aW9zSGVhZGVycyB3aG9zZSBkdXBsaWNhdGVzIGFyZSBpZ25vcmVkIGJ5IG5vZGVcbi8vIGMuZi4gaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9odHRwLmh0bWwjaHR0cF9tZXNzYWdlX2hlYWRlcnNcbmNvbnN0IGlnbm9yZUR1cGxpY2F0ZU9mID0gdXRpbHMudG9PYmplY3RTZXQoW1xuICAnYWdlJywgJ2F1dGhvcml6YXRpb24nLCAnY29udGVudC1sZW5ndGgnLCAnY29udGVudC10eXBlJywgJ2V0YWcnLFxuICAnZXhwaXJlcycsICdmcm9tJywgJ2hvc3QnLCAnaWYtbW9kaWZpZWQtc2luY2UnLCAnaWYtdW5tb2RpZmllZC1zaW5jZScsXG4gICdsYXN0LW1vZGlmaWVkJywgJ2xvY2F0aW9uJywgJ21heC1mb3J3YXJkcycsICdwcm94eS1hdXRob3JpemF0aW9uJyxcbiAgJ3JlZmVyZXInLCAncmV0cnktYWZ0ZXInLCAndXNlci1hZ2VudCdcbl0pO1xuXG4vKipcbiAqIFBhcnNlIGhlYWRlcnMgaW50byBhbiBvYmplY3RcbiAqXG4gKiBgYGBcbiAqIERhdGU6IFdlZCwgMjcgQXVnIDIwMTQgMDg6NTg6NDkgR01UXG4gKiBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb25cbiAqIENvbm5lY3Rpb246IGtlZXAtYWxpdmVcbiAqIFRyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gcmF3SGVhZGVycyBIZWFkZXJzIG5lZWRpbmcgdG8gYmUgcGFyc2VkXG4gKlxuICogQHJldHVybnMge09iamVjdH0gSGVhZGVycyBwYXJzZWQgaW50byBhbiBvYmplY3RcbiAqL1xuZXhwb3J0IGRlZmF1bHQgcmF3SGVhZGVycyA9PiB7XG4gIGNvbnN0IHBhcnNlZCA9IHt9O1xuICBsZXQga2V5O1xuICBsZXQgdmFsO1xuICBsZXQgaTtcblxuICByYXdIZWFkZXJzICYmIHJhd0hlYWRlcnMuc3BsaXQoJ1xcbicpLmZvckVhY2goZnVuY3Rpb24gcGFyc2VyKGxpbmUpIHtcbiAgICBpID0gbGluZS5pbmRleE9mKCc6Jyk7XG4gICAga2V5ID0gbGluZS5zdWJzdHJpbmcoMCwgaSkudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFsID0gbGluZS5zdWJzdHJpbmcoaSArIDEpLnRyaW0oKTtcblxuICAgIGlmICgha2V5IHx8IChwYXJzZWRba2V5XSAmJiBpZ25vcmVEdXBsaWNhdGVPZltrZXldKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdzZXQtY29va2llJykge1xuICAgICAgaWYgKHBhcnNlZFtrZXldKSB7XG4gICAgICAgIHBhcnNlZFtrZXldLnB1c2godmFsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnNlZFtrZXldID0gW3ZhbF07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcnNlZFtrZXldID0gcGFyc2VkW2tleV0gPyBwYXJzZWRba2V5XSArICcsICcgKyB2YWwgOiB2YWw7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcGFyc2VkO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgcGFyc2VIZWFkZXJzIGZyb20gJy4uL2hlbHBlcnMvcGFyc2VIZWFkZXJzLmpzJztcblxuY29uc3QgJGludGVybmFscyA9IFN5bWJvbCgnaW50ZXJuYWxzJyk7XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUhlYWRlcihoZWFkZXIpIHtcbiAgcmV0dXJuIGhlYWRlciAmJiBTdHJpbmcoaGVhZGVyKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplVmFsdWUodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09PSBmYWxzZSB8fCB2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIHV0aWxzLmlzQXJyYXkodmFsdWUpID8gdmFsdWUubWFwKG5vcm1hbGl6ZVZhbHVlKSA6IFN0cmluZyh2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVG9rZW5zKHN0cikge1xuICBjb25zdCB0b2tlbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBjb25zdCB0b2tlbnNSRSA9IC8oW15cXHMsOz1dKylcXHMqKD86PVxccyooW14sO10rKSk/L2c7XG4gIGxldCBtYXRjaDtcblxuICB3aGlsZSAoKG1hdGNoID0gdG9rZW5zUkUuZXhlYyhzdHIpKSkge1xuICAgIHRva2Vuc1ttYXRjaFsxXV0gPSBtYXRjaFsyXTtcbiAgfVxuXG4gIHJldHVybiB0b2tlbnM7XG59XG5cbmNvbnN0IGlzVmFsaWRIZWFkZXJOYW1lID0gKHN0cikgPT4gL15bLV9hLXpBLVowLTleYHx+LCEjJCUmJyorLl0rJC8udGVzdChzdHIudHJpbSgpKTtcblxuZnVuY3Rpb24gbWF0Y2hIZWFkZXJWYWx1ZShjb250ZXh0LCB2YWx1ZSwgaGVhZGVyLCBmaWx0ZXIsIGlzSGVhZGVyTmFtZUZpbHRlcikge1xuICBpZiAodXRpbHMuaXNGdW5jdGlvbihmaWx0ZXIpKSB7XG4gICAgcmV0dXJuIGZpbHRlci5jYWxsKHRoaXMsIHZhbHVlLCBoZWFkZXIpO1xuICB9XG5cbiAgaWYgKGlzSGVhZGVyTmFtZUZpbHRlcikge1xuICAgIHZhbHVlID0gaGVhZGVyO1xuICB9XG5cbiAgaWYgKCF1dGlscy5pc1N0cmluZyh2YWx1ZSkpIHJldHVybjtcblxuICBpZiAodXRpbHMuaXNTdHJpbmcoZmlsdGVyKSkge1xuICAgIHJldHVybiB2YWx1ZS5pbmRleE9mKGZpbHRlcikgIT09IC0xO1xuICB9XG5cbiAgaWYgKHV0aWxzLmlzUmVnRXhwKGZpbHRlcikpIHtcbiAgICByZXR1cm4gZmlsdGVyLnRlc3QodmFsdWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZvcm1hdEhlYWRlcihoZWFkZXIpIHtcbiAgcmV0dXJuIGhlYWRlci50cmltKClcbiAgICAudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC8oW2EtelxcZF0pKFxcdyopL2csICh3LCBjaGFyLCBzdHIpID0+IHtcbiAgICAgIHJldHVybiBjaGFyLnRvVXBwZXJDYXNlKCkgKyBzdHI7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkQWNjZXNzb3JzKG9iaiwgaGVhZGVyKSB7XG4gIGNvbnN0IGFjY2Vzc29yTmFtZSA9IHV0aWxzLnRvQ2FtZWxDYXNlKCcgJyArIGhlYWRlcik7XG5cbiAgWydnZXQnLCAnc2V0JywgJ2hhcyddLmZvckVhY2gobWV0aG9kTmFtZSA9PiB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgbWV0aG9kTmFtZSArIGFjY2Vzc29yTmFtZSwge1xuICAgICAgdmFsdWU6IGZ1bmN0aW9uKGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbbWV0aG9kTmFtZV0uY2FsbCh0aGlzLCBoZWFkZXIsIGFyZzEsIGFyZzIsIGFyZzMpO1xuICAgICAgfSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9KTtcbn1cblxuY2xhc3MgQXhpb3NIZWFkZXJzIHtcbiAgY29uc3RydWN0b3IoaGVhZGVycykge1xuICAgIGhlYWRlcnMgJiYgdGhpcy5zZXQoaGVhZGVycyk7XG4gIH1cblxuICBzZXQoaGVhZGVyLCB2YWx1ZU9yUmV3cml0ZSwgcmV3cml0ZSkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuXG4gICAgZnVuY3Rpb24gc2V0SGVhZGVyKF92YWx1ZSwgX2hlYWRlciwgX3Jld3JpdGUpIHtcbiAgICAgIGNvbnN0IGxIZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoX2hlYWRlcik7XG5cbiAgICAgIGlmICghbEhlYWRlcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2hlYWRlciBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGtleSA9IHV0aWxzLmZpbmRLZXkoc2VsZiwgbEhlYWRlcik7XG5cbiAgICAgIGlmKCFrZXkgfHwgc2VsZltrZXldID09PSB1bmRlZmluZWQgfHwgX3Jld3JpdGUgPT09IHRydWUgfHwgKF9yZXdyaXRlID09PSB1bmRlZmluZWQgJiYgc2VsZltrZXldICE9PSBmYWxzZSkpIHtcbiAgICAgICAgc2VsZltrZXkgfHwgX2hlYWRlcl0gPSBub3JtYWxpemVWYWx1ZShfdmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHNldEhlYWRlcnMgPSAoaGVhZGVycywgX3Jld3JpdGUpID0+XG4gICAgICB1dGlscy5mb3JFYWNoKGhlYWRlcnMsIChfdmFsdWUsIF9oZWFkZXIpID0+IHNldEhlYWRlcihfdmFsdWUsIF9oZWFkZXIsIF9yZXdyaXRlKSk7XG5cbiAgICBpZiAodXRpbHMuaXNQbGFpbk9iamVjdChoZWFkZXIpIHx8IGhlYWRlciBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3IpIHtcbiAgICAgIHNldEhlYWRlcnMoaGVhZGVyLCB2YWx1ZU9yUmV3cml0ZSlcbiAgICB9IGVsc2UgaWYodXRpbHMuaXNTdHJpbmcoaGVhZGVyKSAmJiAoaGVhZGVyID0gaGVhZGVyLnRyaW0oKSkgJiYgIWlzVmFsaWRIZWFkZXJOYW1lKGhlYWRlcikpIHtcbiAgICAgIHNldEhlYWRlcnMocGFyc2VIZWFkZXJzKGhlYWRlciksIHZhbHVlT3JSZXdyaXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGVhZGVyICE9IG51bGwgJiYgc2V0SGVhZGVyKHZhbHVlT3JSZXdyaXRlLCBoZWFkZXIsIHJld3JpdGUpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZ2V0KGhlYWRlciwgcGFyc2VyKSB7XG4gICAgaGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKGhlYWRlcik7XG5cbiAgICBpZiAoaGVhZGVyKSB7XG4gICAgICBjb25zdCBrZXkgPSB1dGlscy5maW5kS2V5KHRoaXMsIGhlYWRlcik7XG5cbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzW2tleV07XG5cbiAgICAgICAgaWYgKCFwYXJzZXIpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFyc2VyID09PSB0cnVlKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlVG9rZW5zKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1dGlscy5pc0Z1bmN0aW9uKHBhcnNlcikpIHtcbiAgICAgICAgICByZXR1cm4gcGFyc2VyLmNhbGwodGhpcywgdmFsdWUsIGtleSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXRpbHMuaXNSZWdFeHAocGFyc2VyKSkge1xuICAgICAgICAgIHJldHVybiBwYXJzZXIuZXhlYyh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdwYXJzZXIgbXVzdCBiZSBib29sZWFufHJlZ2V4cHxmdW5jdGlvbicpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGhhcyhoZWFkZXIsIG1hdGNoZXIpIHtcbiAgICBoZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoaGVhZGVyKTtcblxuICAgIGlmIChoZWFkZXIpIHtcbiAgICAgIGNvbnN0IGtleSA9IHV0aWxzLmZpbmRLZXkodGhpcywgaGVhZGVyKTtcblxuICAgICAgcmV0dXJuICEhKGtleSAmJiB0aGlzW2tleV0gIT09IHVuZGVmaW5lZCAmJiAoIW1hdGNoZXIgfHwgbWF0Y2hIZWFkZXJWYWx1ZSh0aGlzLCB0aGlzW2tleV0sIGtleSwgbWF0Y2hlcikpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBkZWxldGUoaGVhZGVyLCBtYXRjaGVyKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgbGV0IGRlbGV0ZWQgPSBmYWxzZTtcblxuICAgIGZ1bmN0aW9uIGRlbGV0ZUhlYWRlcihfaGVhZGVyKSB7XG4gICAgICBfaGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKF9oZWFkZXIpO1xuXG4gICAgICBpZiAoX2hlYWRlcikge1xuICAgICAgICBjb25zdCBrZXkgPSB1dGlscy5maW5kS2V5KHNlbGYsIF9oZWFkZXIpO1xuXG4gICAgICAgIGlmIChrZXkgJiYgKCFtYXRjaGVyIHx8IG1hdGNoSGVhZGVyVmFsdWUoc2VsZiwgc2VsZltrZXldLCBrZXksIG1hdGNoZXIpKSkge1xuICAgICAgICAgIGRlbGV0ZSBzZWxmW2tleV07XG5cbiAgICAgICAgICBkZWxldGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh1dGlscy5pc0FycmF5KGhlYWRlcikpIHtcbiAgICAgIGhlYWRlci5mb3JFYWNoKGRlbGV0ZUhlYWRlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZUhlYWRlcihoZWFkZXIpO1xuICAgIH1cblxuICAgIHJldHVybiBkZWxldGVkO1xuICB9XG5cbiAgY2xlYXIobWF0Y2hlcikge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh0aGlzKTtcbiAgICBsZXQgaSA9IGtleXMubGVuZ3RoO1xuICAgIGxldCBkZWxldGVkID0gZmFsc2U7XG5cbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICBjb25zdCBrZXkgPSBrZXlzW2ldO1xuICAgICAgaWYoIW1hdGNoZXIgfHwgbWF0Y2hIZWFkZXJWYWx1ZSh0aGlzLCB0aGlzW2tleV0sIGtleSwgbWF0Y2hlciwgdHJ1ZSkpIHtcbiAgICAgICAgZGVsZXRlIHRoaXNba2V5XTtcbiAgICAgICAgZGVsZXRlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlbGV0ZWQ7XG4gIH1cblxuICBub3JtYWxpemUoZm9ybWF0KSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3QgaGVhZGVycyA9IHt9O1xuXG4gICAgdXRpbHMuZm9yRWFjaCh0aGlzLCAodmFsdWUsIGhlYWRlcikgPT4ge1xuICAgICAgY29uc3Qga2V5ID0gdXRpbHMuZmluZEtleShoZWFkZXJzLCBoZWFkZXIpO1xuXG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIHNlbGZba2V5XSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKTtcbiAgICAgICAgZGVsZXRlIHNlbGZbaGVhZGVyXTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBub3JtYWxpemVkID0gZm9ybWF0ID8gZm9ybWF0SGVhZGVyKGhlYWRlcikgOiBTdHJpbmcoaGVhZGVyKS50cmltKCk7XG5cbiAgICAgIGlmIChub3JtYWxpemVkICE9PSBoZWFkZXIpIHtcbiAgICAgICAgZGVsZXRlIHNlbGZbaGVhZGVyXTtcbiAgICAgIH1cblxuICAgICAgc2VsZltub3JtYWxpemVkXSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKTtcblxuICAgICAgaGVhZGVyc1tub3JtYWxpemVkXSA9IHRydWU7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGNvbmNhdCguLi50YXJnZXRzKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IuY29uY2F0KHRoaXMsIC4uLnRhcmdldHMpO1xuICB9XG5cbiAgdG9KU09OKGFzU3RyaW5ncykge1xuICAgIGNvbnN0IG9iaiA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICB1dGlscy5mb3JFYWNoKHRoaXMsICh2YWx1ZSwgaGVhZGVyKSA9PiB7XG4gICAgICB2YWx1ZSAhPSBudWxsICYmIHZhbHVlICE9PSBmYWxzZSAmJiAob2JqW2hlYWRlcl0gPSBhc1N0cmluZ3MgJiYgdXRpbHMuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5qb2luKCcsICcpIDogdmFsdWUpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIFtTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKVtTeW1ib2wuaXRlcmF0b3JdKCk7XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSkubWFwKChbaGVhZGVyLCB2YWx1ZV0pID0+IGhlYWRlciArICc6ICcgKyB2YWx1ZSkuam9pbignXFxuJyk7XG4gIH1cblxuICBnZXQgW1N5bWJvbC50b1N0cmluZ1RhZ10oKSB7XG4gICAgcmV0dXJuICdBeGlvc0hlYWRlcnMnO1xuICB9XG5cbiAgc3RhdGljIGZyb20odGhpbmcpIHtcbiAgICByZXR1cm4gdGhpbmcgaW5zdGFuY2VvZiB0aGlzID8gdGhpbmcgOiBuZXcgdGhpcyh0aGluZyk7XG4gIH1cblxuICBzdGF0aWMgY29uY2F0KGZpcnN0LCAuLi50YXJnZXRzKSB7XG4gICAgY29uc3QgY29tcHV0ZWQgPSBuZXcgdGhpcyhmaXJzdCk7XG5cbiAgICB0YXJnZXRzLmZvckVhY2goKHRhcmdldCkgPT4gY29tcHV0ZWQuc2V0KHRhcmdldCkpO1xuXG4gICAgcmV0dXJuIGNvbXB1dGVkO1xuICB9XG5cbiAgc3RhdGljIGFjY2Vzc29yKGhlYWRlcikge1xuICAgIGNvbnN0IGludGVybmFscyA9IHRoaXNbJGludGVybmFsc10gPSAodGhpc1skaW50ZXJuYWxzXSA9IHtcbiAgICAgIGFjY2Vzc29yczoge31cbiAgICB9KTtcblxuICAgIGNvbnN0IGFjY2Vzc29ycyA9IGludGVybmFscy5hY2Nlc3NvcnM7XG4gICAgY29uc3QgcHJvdG90eXBlID0gdGhpcy5wcm90b3R5cGU7XG5cbiAgICBmdW5jdGlvbiBkZWZpbmVBY2Nlc3NvcihfaGVhZGVyKSB7XG4gICAgICBjb25zdCBsSGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKF9oZWFkZXIpO1xuXG4gICAgICBpZiAoIWFjY2Vzc29yc1tsSGVhZGVyXSkge1xuICAgICAgICBidWlsZEFjY2Vzc29ycyhwcm90b3R5cGUsIF9oZWFkZXIpO1xuICAgICAgICBhY2Nlc3NvcnNbbEhlYWRlcl0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHV0aWxzLmlzQXJyYXkoaGVhZGVyKSA/IGhlYWRlci5mb3JFYWNoKGRlZmluZUFjY2Vzc29yKSA6IGRlZmluZUFjY2Vzc29yKGhlYWRlcik7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxufVxuXG5BeGlvc0hlYWRlcnMuYWNjZXNzb3IoWydDb250ZW50LVR5cGUnLCAnQ29udGVudC1MZW5ndGgnLCAnQWNjZXB0JywgJ0FjY2VwdC1FbmNvZGluZycsICdVc2VyLUFnZW50JywgJ0F1dGhvcml6YXRpb24nXSk7XG5cbi8vIHJlc2VydmVkIG5hbWVzIGhvdGZpeFxudXRpbHMucmVkdWNlRGVzY3JpcHRvcnMoQXhpb3NIZWFkZXJzLnByb3RvdHlwZSwgKHt2YWx1ZX0sIGtleSkgPT4ge1xuICBsZXQgbWFwcGVkID0ga2V5WzBdLnRvVXBwZXJDYXNlKCkgKyBrZXkuc2xpY2UoMSk7IC8vIG1hcCBgc2V0YCA9PiBgU2V0YFxuICByZXR1cm4ge1xuICAgIGdldDogKCkgPT4gdmFsdWUsXG4gICAgc2V0KGhlYWRlclZhbHVlKSB7XG4gICAgICB0aGlzW21hcHBlZF0gPSBoZWFkZXJWYWx1ZTtcbiAgICB9XG4gIH1cbn0pO1xuXG51dGlscy5mcmVlemVNZXRob2RzKEF4aW9zSGVhZGVycyk7XG5cbmV4cG9ydCBkZWZhdWx0IEF4aW9zSGVhZGVycztcbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLy4uL3V0aWxzLmpzJztcbmltcG9ydCBkZWZhdWx0cyBmcm9tICcuLi9kZWZhdWx0cy9pbmRleC5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gJy4uL2NvcmUvQXhpb3NIZWFkZXJzLmpzJztcblxuLyoqXG4gKiBUcmFuc2Zvcm0gdGhlIGRhdGEgZm9yIGEgcmVxdWVzdCBvciBhIHJlc3BvbnNlXG4gKlxuICogQHBhcmFtIHtBcnJheXxGdW5jdGlvbn0gZm5zIEEgc2luZ2xlIGZ1bmN0aW9uIG9yIEFycmF5IG9mIGZ1bmN0aW9uc1xuICogQHBhcmFtIHs/T2JqZWN0fSByZXNwb25zZSBUaGUgcmVzcG9uc2Ugb2JqZWN0XG4gKlxuICogQHJldHVybnMgeyp9IFRoZSByZXN1bHRpbmcgdHJhbnNmb3JtZWQgZGF0YVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0cmFuc2Zvcm1EYXRhKGZucywgcmVzcG9uc2UpIHtcbiAgY29uc3QgY29uZmlnID0gdGhpcyB8fCBkZWZhdWx0cztcbiAgY29uc3QgY29udGV4dCA9IHJlc3BvbnNlIHx8IGNvbmZpZztcbiAgY29uc3QgaGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKGNvbnRleHQuaGVhZGVycyk7XG4gIGxldCBkYXRhID0gY29udGV4dC5kYXRhO1xuXG4gIHV0aWxzLmZvckVhY2goZm5zLCBmdW5jdGlvbiB0cmFuc2Zvcm0oZm4pIHtcbiAgICBkYXRhID0gZm4uY2FsbChjb25maWcsIGRhdGEsIGhlYWRlcnMubm9ybWFsaXplKCksIHJlc3BvbnNlID8gcmVzcG9uc2Uuc3RhdHVzIDogdW5kZWZpbmVkKTtcbiAgfSk7XG5cbiAgaGVhZGVycy5ub3JtYWxpemUoKTtcblxuICByZXR1cm4gZGF0YTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzQ2FuY2VsKHZhbHVlKSB7XG4gIHJldHVybiAhISh2YWx1ZSAmJiB2YWx1ZS5fX0NBTkNFTF9fKTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4uL2NvcmUvQXhpb3NFcnJvci5qcyc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuXG4vKipcbiAqIEEgYENhbmNlbGVkRXJyb3JgIGlzIGFuIG9iamVjdCB0aGF0IGlzIHRocm93biB3aGVuIGFuIG9wZXJhdGlvbiBpcyBjYW5jZWxlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZz19IG1lc3NhZ2UgVGhlIG1lc3NhZ2UuXG4gKiBAcGFyYW0ge09iamVjdD19IGNvbmZpZyBUaGUgY29uZmlnLlxuICogQHBhcmFtIHtPYmplY3Q9fSByZXF1ZXN0IFRoZSByZXF1ZXN0LlxuICpcbiAqIEByZXR1cm5zIHtDYW5jZWxlZEVycm9yfSBUaGUgY3JlYXRlZCBlcnJvci5cbiAqL1xuZnVuY3Rpb24gQ2FuY2VsZWRFcnJvcihtZXNzYWdlLCBjb25maWcsIHJlcXVlc3QpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVxLW51bGwsZXFlcWVxXG4gIEF4aW9zRXJyb3IuY2FsbCh0aGlzLCBtZXNzYWdlID09IG51bGwgPyAnY2FuY2VsZWQnIDogbWVzc2FnZSwgQXhpb3NFcnJvci5FUlJfQ0FOQ0VMRUQsIGNvbmZpZywgcmVxdWVzdCk7XG4gIHRoaXMubmFtZSA9ICdDYW5jZWxlZEVycm9yJztcbn1cblxudXRpbHMuaW5oZXJpdHMoQ2FuY2VsZWRFcnJvciwgQXhpb3NFcnJvciwge1xuICBfX0NBTkNFTF9fOiB0cnVlXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgQ2FuY2VsZWRFcnJvcjtcbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4vQXhpb3NFcnJvci5qcyc7XG5cbi8qKlxuICogUmVzb2x2ZSBvciByZWplY3QgYSBQcm9taXNlIGJhc2VkIG9uIHJlc3BvbnNlIHN0YXR1cy5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZXNvbHZlIEEgZnVuY3Rpb24gdGhhdCByZXNvbHZlcyB0aGUgcHJvbWlzZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlamVjdCBBIGZ1bmN0aW9uIHRoYXQgcmVqZWN0cyB0aGUgcHJvbWlzZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSByZXNwb25zZSBUaGUgcmVzcG9uc2UuXG4gKlxuICogQHJldHVybnMge29iamVjdH0gVGhlIHJlc3BvbnNlLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCByZXNwb25zZSkge1xuICBjb25zdCB2YWxpZGF0ZVN0YXR1cyA9IHJlc3BvbnNlLmNvbmZpZy52YWxpZGF0ZVN0YXR1cztcbiAgaWYgKCFyZXNwb25zZS5zdGF0dXMgfHwgIXZhbGlkYXRlU3RhdHVzIHx8IHZhbGlkYXRlU3RhdHVzKHJlc3BvbnNlLnN0YXR1cykpIHtcbiAgICByZXNvbHZlKHJlc3BvbnNlKTtcbiAgfSBlbHNlIHtcbiAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoXG4gICAgICAnUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAnICsgcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgW0F4aW9zRXJyb3IuRVJSX0JBRF9SRVFVRVNULCBBeGlvc0Vycm9yLkVSUl9CQURfUkVTUE9OU0VdW01hdGguZmxvb3IocmVzcG9uc2Uuc3RhdHVzIC8gMTAwKSAtIDRdLFxuICAgICAgcmVzcG9uc2UuY29uZmlnLFxuICAgICAgcmVzcG9uc2UucmVxdWVzdCxcbiAgICAgIHJlc3BvbnNlXG4gICAgKSk7XG4gIH1cbn1cbiIsICJpbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5pbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi4vcGxhdGZvcm0vaW5kZXguanMnO1xuXG5leHBvcnQgZGVmYXVsdCBwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJFbnYgP1xuXG4gIC8vIFN0YW5kYXJkIGJyb3dzZXIgZW52cyBzdXBwb3J0IGRvY3VtZW50LmNvb2tpZVxuICB7XG4gICAgd3JpdGUobmFtZSwgdmFsdWUsIGV4cGlyZXMsIHBhdGgsIGRvbWFpbiwgc2VjdXJlKSB7XG4gICAgICBjb25zdCBjb29raWUgPSBbbmFtZSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSldO1xuXG4gICAgICB1dGlscy5pc051bWJlcihleHBpcmVzKSAmJiBjb29raWUucHVzaCgnZXhwaXJlcz0nICsgbmV3IERhdGUoZXhwaXJlcykudG9HTVRTdHJpbmcoKSk7XG5cbiAgICAgIHV0aWxzLmlzU3RyaW5nKHBhdGgpICYmIGNvb2tpZS5wdXNoKCdwYXRoPScgKyBwYXRoKTtcblxuICAgICAgdXRpbHMuaXNTdHJpbmcoZG9tYWluKSAmJiBjb29raWUucHVzaCgnZG9tYWluPScgKyBkb21haW4pO1xuXG4gICAgICBzZWN1cmUgPT09IHRydWUgJiYgY29va2llLnB1c2goJ3NlY3VyZScpO1xuXG4gICAgICBkb2N1bWVudC5jb29raWUgPSBjb29raWUuam9pbignOyAnKTtcbiAgICB9LFxuXG4gICAgcmVhZChuYW1lKSB7XG4gICAgICBjb25zdCBtYXRjaCA9IGRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCcoXnw7XFxcXHMqKSgnICsgbmFtZSArICcpPShbXjtdKiknKSk7XG4gICAgICByZXR1cm4gKG1hdGNoID8gZGVjb2RlVVJJQ29tcG9uZW50KG1hdGNoWzNdKSA6IG51bGwpO1xuICAgIH0sXG5cbiAgICByZW1vdmUobmFtZSkge1xuICAgICAgdGhpcy53cml0ZShuYW1lLCAnJywgRGF0ZS5ub3coKSAtIDg2NDAwMDAwKTtcbiAgICB9XG4gIH1cblxuICA6XG5cbiAgLy8gTm9uLXN0YW5kYXJkIGJyb3dzZXIgZW52ICh3ZWIgd29ya2VycywgcmVhY3QtbmF0aXZlKSBsYWNrIG5lZWRlZCBzdXBwb3J0LlxuICB7XG4gICAgd3JpdGUoKSB7fSxcbiAgICByZWFkKCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSxcbiAgICByZW1vdmUoKSB7fVxuICB9O1xuXG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgc3BlY2lmaWVkIFVSTCBpcyBhYnNvbHV0ZVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIFVSTCB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0Fic29sdXRlVVJMKHVybCkge1xuICAvLyBBIFVSTCBpcyBjb25zaWRlcmVkIGFic29sdXRlIGlmIGl0IGJlZ2lucyB3aXRoIFwiPHNjaGVtZT46Ly9cIiBvciBcIi8vXCIgKHByb3RvY29sLXJlbGF0aXZlIFVSTCkuXG4gIC8vIFJGQyAzOTg2IGRlZmluZXMgc2NoZW1lIG5hbWUgYXMgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIGJlZ2lubmluZyB3aXRoIGEgbGV0dGVyIGFuZCBmb2xsb3dlZFxuICAvLyBieSBhbnkgY29tYmluYXRpb24gb2YgbGV0dGVycywgZGlnaXRzLCBwbHVzLCBwZXJpb2QsIG9yIGh5cGhlbi5cbiAgcmV0dXJuIC9eKFthLXpdW2EtelxcZCtcXC0uXSo6KT9cXC9cXC8vaS50ZXN0KHVybCk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgVVJMIGJ5IGNvbWJpbmluZyB0aGUgc3BlY2lmaWVkIFVSTHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSTCBUaGUgYmFzZSBVUkxcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGl2ZVVSTCBUaGUgcmVsYXRpdmUgVVJMXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbWJpbmVkIFVSTFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb21iaW5lVVJMcyhiYXNlVVJMLCByZWxhdGl2ZVVSTCkge1xuICByZXR1cm4gcmVsYXRpdmVVUkxcbiAgICA/IGJhc2VVUkwucmVwbGFjZSgvXFwvP1xcLyQvLCAnJykgKyAnLycgKyByZWxhdGl2ZVVSTC5yZXBsYWNlKC9eXFwvKy8sICcnKVxuICAgIDogYmFzZVVSTDtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBpc0Fic29sdXRlVVJMIGZyb20gJy4uL2hlbHBlcnMvaXNBYnNvbHV0ZVVSTC5qcyc7XG5pbXBvcnQgY29tYmluZVVSTHMgZnJvbSAnLi4vaGVscGVycy9jb21iaW5lVVJMcy5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBVUkwgYnkgY29tYmluaW5nIHRoZSBiYXNlVVJMIHdpdGggdGhlIHJlcXVlc3RlZFVSTCxcbiAqIG9ubHkgd2hlbiB0aGUgcmVxdWVzdGVkVVJMIGlzIG5vdCBhbHJlYWR5IGFuIGFic29sdXRlIFVSTC5cbiAqIElmIHRoZSByZXF1ZXN0VVJMIGlzIGFic29sdXRlLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHJlcXVlc3RlZFVSTCB1bnRvdWNoZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVUkwgVGhlIGJhc2UgVVJMXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVxdWVzdGVkVVJMIEFic29sdXRlIG9yIHJlbGF0aXZlIFVSTCB0byBjb21iaW5lXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbWJpbmVkIGZ1bGwgcGF0aFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBidWlsZEZ1bGxQYXRoKGJhc2VVUkwsIHJlcXVlc3RlZFVSTCkge1xuICBpZiAoYmFzZVVSTCAmJiAhaXNBYnNvbHV0ZVVSTChyZXF1ZXN0ZWRVUkwpKSB7XG4gICAgcmV0dXJuIGNvbWJpbmVVUkxzKGJhc2VVUkwsIHJlcXVlc3RlZFVSTCk7XG4gIH1cbiAgcmV0dXJuIHJlcXVlc3RlZFVSTDtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLy4uL3V0aWxzLmpzJztcbmltcG9ydCBwbGF0Zm9ybSBmcm9tICcuLi9wbGF0Zm9ybS9pbmRleC5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlckVudiA/XG5cbi8vIFN0YW5kYXJkIGJyb3dzZXIgZW52cyBoYXZlIGZ1bGwgc3VwcG9ydCBvZiB0aGUgQVBJcyBuZWVkZWQgdG8gdGVzdFxuLy8gd2hldGhlciB0aGUgcmVxdWVzdCBVUkwgaXMgb2YgdGhlIHNhbWUgb3JpZ2luIGFzIGN1cnJlbnQgbG9jYXRpb24uXG4gIChmdW5jdGlvbiBzdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgY29uc3QgbXNpZSA9IC8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG4gICAgY29uc3QgdXJsUGFyc2luZ05vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgbGV0IG9yaWdpblVSTDtcblxuICAgIC8qKlxuICAgICogUGFyc2UgYSBVUkwgdG8gZGlzY292ZXIgaXRzIGNvbXBvbmVudHNcbiAgICAqXG4gICAgKiBAcGFyYW0ge1N0cmluZ30gdXJsIFRoZSBVUkwgdG8gYmUgcGFyc2VkXG4gICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgICovXG4gICAgZnVuY3Rpb24gcmVzb2x2ZVVSTCh1cmwpIHtcbiAgICAgIGxldCBocmVmID0gdXJsO1xuXG4gICAgICBpZiAobXNpZSkge1xuICAgICAgICAvLyBJRSBuZWVkcyBhdHRyaWJ1dGUgc2V0IHR3aWNlIHRvIG5vcm1hbGl6ZSBwcm9wZXJ0aWVzXG4gICAgICAgIHVybFBhcnNpbmdOb2RlLnNldEF0dHJpYnV0ZSgnaHJlZicsIGhyZWYpO1xuICAgICAgICBocmVmID0gdXJsUGFyc2luZ05vZGUuaHJlZjtcbiAgICAgIH1cblxuICAgICAgdXJsUGFyc2luZ05vZGUuc2V0QXR0cmlidXRlKCdocmVmJywgaHJlZik7XG5cbiAgICAgIC8vIHVybFBhcnNpbmdOb2RlIHByb3ZpZGVzIHRoZSBVcmxVdGlscyBpbnRlcmZhY2UgLSBodHRwOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jdXJsdXRpbHNcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGhyZWY6IHVybFBhcnNpbmdOb2RlLmhyZWYsXG4gICAgICAgIHByb3RvY29sOiB1cmxQYXJzaW5nTm9kZS5wcm90b2NvbCA/IHVybFBhcnNpbmdOb2RlLnByb3RvY29sLnJlcGxhY2UoLzokLywgJycpIDogJycsXG4gICAgICAgIGhvc3Q6IHVybFBhcnNpbmdOb2RlLmhvc3QsXG4gICAgICAgIHNlYXJjaDogdXJsUGFyc2luZ05vZGUuc2VhcmNoID8gdXJsUGFyc2luZ05vZGUuc2VhcmNoLnJlcGxhY2UoL15cXD8vLCAnJykgOiAnJyxcbiAgICAgICAgaGFzaDogdXJsUGFyc2luZ05vZGUuaGFzaCA/IHVybFBhcnNpbmdOb2RlLmhhc2gucmVwbGFjZSgvXiMvLCAnJykgOiAnJyxcbiAgICAgICAgaG9zdG5hbWU6IHVybFBhcnNpbmdOb2RlLmhvc3RuYW1lLFxuICAgICAgICBwb3J0OiB1cmxQYXJzaW5nTm9kZS5wb3J0LFxuICAgICAgICBwYXRobmFtZTogKHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nKSA/XG4gICAgICAgICAgdXJsUGFyc2luZ05vZGUucGF0aG5hbWUgOlxuICAgICAgICAgICcvJyArIHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lXG4gICAgICB9O1xuICAgIH1cblxuICAgIG9yaWdpblVSTCA9IHJlc29sdmVVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuXG4gICAgLyoqXG4gICAgKiBEZXRlcm1pbmUgaWYgYSBVUkwgc2hhcmVzIHRoZSBzYW1lIG9yaWdpbiBhcyB0aGUgY3VycmVudCBsb2NhdGlvblxuICAgICpcbiAgICAqIEBwYXJhbSB7U3RyaW5nfSByZXF1ZXN0VVJMIFRoZSBVUkwgdG8gdGVzdFxuICAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgVVJMIHNoYXJlcyB0aGUgc2FtZSBvcmlnaW4sIG90aGVyd2lzZSBmYWxzZVxuICAgICovXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGlzVVJMU2FtZU9yaWdpbihyZXF1ZXN0VVJMKSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSAodXRpbHMuaXNTdHJpbmcocmVxdWVzdFVSTCkpID8gcmVzb2x2ZVVSTChyZXF1ZXN0VVJMKSA6IHJlcXVlc3RVUkw7XG4gICAgICByZXR1cm4gKHBhcnNlZC5wcm90b2NvbCA9PT0gb3JpZ2luVVJMLnByb3RvY29sICYmXG4gICAgICAgICAgcGFyc2VkLmhvc3QgPT09IG9yaWdpblVSTC5ob3N0KTtcbiAgICB9O1xuICB9KSgpIDpcblxuICAvLyBOb24gc3RhbmRhcmQgYnJvd3NlciBlbnZzICh3ZWIgd29ya2VycywgcmVhY3QtbmF0aXZlKSBsYWNrIG5lZWRlZCBzdXBwb3J0LlxuICAoZnVuY3Rpb24gbm9uU3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgIHJldHVybiBmdW5jdGlvbiBpc1VSTFNhbWVPcmlnaW4oKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICB9KSgpO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGFyc2VQcm90b2NvbCh1cmwpIHtcbiAgY29uc3QgbWF0Y2ggPSAvXihbLStcXHddezEsMjV9KSg6P1xcL1xcL3w6KS8uZXhlYyh1cmwpO1xuICByZXR1cm4gbWF0Y2ggJiYgbWF0Y2hbMV0gfHwgJyc7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIENhbGN1bGF0ZSBkYXRhIG1heFJhdGVcbiAqIEBwYXJhbSB7TnVtYmVyfSBbc2FtcGxlc0NvdW50PSAxMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSBbbWluPSAxMDAwXVxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiBzcGVlZG9tZXRlcihzYW1wbGVzQ291bnQsIG1pbikge1xuICBzYW1wbGVzQ291bnQgPSBzYW1wbGVzQ291bnQgfHwgMTA7XG4gIGNvbnN0IGJ5dGVzID0gbmV3IEFycmF5KHNhbXBsZXNDb3VudCk7XG4gIGNvbnN0IHRpbWVzdGFtcHMgPSBuZXcgQXJyYXkoc2FtcGxlc0NvdW50KTtcbiAgbGV0IGhlYWQgPSAwO1xuICBsZXQgdGFpbCA9IDA7XG4gIGxldCBmaXJzdFNhbXBsZVRTO1xuXG4gIG1pbiA9IG1pbiAhPT0gdW5kZWZpbmVkID8gbWluIDogMTAwMDtcblxuICByZXR1cm4gZnVuY3Rpb24gcHVzaChjaHVua0xlbmd0aCkge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgICBjb25zdCBzdGFydGVkQXQgPSB0aW1lc3RhbXBzW3RhaWxdO1xuXG4gICAgaWYgKCFmaXJzdFNhbXBsZVRTKSB7XG4gICAgICBmaXJzdFNhbXBsZVRTID0gbm93O1xuICAgIH1cblxuICAgIGJ5dGVzW2hlYWRdID0gY2h1bmtMZW5ndGg7XG4gICAgdGltZXN0YW1wc1toZWFkXSA9IG5vdztcblxuICAgIGxldCBpID0gdGFpbDtcbiAgICBsZXQgYnl0ZXNDb3VudCA9IDA7XG5cbiAgICB3aGlsZSAoaSAhPT0gaGVhZCkge1xuICAgICAgYnl0ZXNDb3VudCArPSBieXRlc1tpKytdO1xuICAgICAgaSA9IGkgJSBzYW1wbGVzQ291bnQ7XG4gICAgfVxuXG4gICAgaGVhZCA9IChoZWFkICsgMSkgJSBzYW1wbGVzQ291bnQ7XG5cbiAgICBpZiAoaGVhZCA9PT0gdGFpbCkge1xuICAgICAgdGFpbCA9ICh0YWlsICsgMSkgJSBzYW1wbGVzQ291bnQ7XG4gICAgfVxuXG4gICAgaWYgKG5vdyAtIGZpcnN0U2FtcGxlVFMgPCBtaW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYXNzZWQgPSBzdGFydGVkQXQgJiYgbm93IC0gc3RhcnRlZEF0O1xuXG4gICAgcmV0dXJuIHBhc3NlZCA/IE1hdGgucm91bmQoYnl0ZXNDb3VudCAqIDEwMDAgLyBwYXNzZWQpIDogdW5kZWZpbmVkO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBzcGVlZG9tZXRlcjtcbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLy4uL3V0aWxzLmpzJztcbmltcG9ydCBzZXR0bGUgZnJvbSAnLi8uLi9jb3JlL3NldHRsZS5qcyc7XG5pbXBvcnQgY29va2llcyBmcm9tICcuLy4uL2hlbHBlcnMvY29va2llcy5qcyc7XG5pbXBvcnQgYnVpbGRVUkwgZnJvbSAnLi8uLi9oZWxwZXJzL2J1aWxkVVJMLmpzJztcbmltcG9ydCBidWlsZEZ1bGxQYXRoIGZyb20gJy4uL2NvcmUvYnVpbGRGdWxsUGF0aC5qcyc7XG5pbXBvcnQgaXNVUkxTYW1lT3JpZ2luIGZyb20gJy4vLi4vaGVscGVycy9pc1VSTFNhbWVPcmlnaW4uanMnO1xuaW1wb3J0IHRyYW5zaXRpb25hbERlZmF1bHRzIGZyb20gJy4uL2RlZmF1bHRzL3RyYW5zaXRpb25hbC5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuaW1wb3J0IENhbmNlbGVkRXJyb3IgZnJvbSAnLi4vY2FuY2VsL0NhbmNlbGVkRXJyb3IuanMnO1xuaW1wb3J0IHBhcnNlUHJvdG9jb2wgZnJvbSAnLi4vaGVscGVycy9wYXJzZVByb3RvY29sLmpzJztcbmltcG9ydCBwbGF0Zm9ybSBmcm9tICcuLi9wbGF0Zm9ybS9pbmRleC5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gJy4uL2NvcmUvQXhpb3NIZWFkZXJzLmpzJztcbmltcG9ydCBzcGVlZG9tZXRlciBmcm9tICcuLi9oZWxwZXJzL3NwZWVkb21ldGVyLmpzJztcblxuZnVuY3Rpb24gcHJvZ3Jlc3NFdmVudFJlZHVjZXIobGlzdGVuZXIsIGlzRG93bmxvYWRTdHJlYW0pIHtcbiAgbGV0IGJ5dGVzTm90aWZpZWQgPSAwO1xuICBjb25zdCBfc3BlZWRvbWV0ZXIgPSBzcGVlZG9tZXRlcig1MCwgMjUwKTtcblxuICByZXR1cm4gZSA9PiB7XG4gICAgY29uc3QgbG9hZGVkID0gZS5sb2FkZWQ7XG4gICAgY29uc3QgdG90YWwgPSBlLmxlbmd0aENvbXB1dGFibGUgPyBlLnRvdGFsIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHByb2dyZXNzQnl0ZXMgPSBsb2FkZWQgLSBieXRlc05vdGlmaWVkO1xuICAgIGNvbnN0IHJhdGUgPSBfc3BlZWRvbWV0ZXIocHJvZ3Jlc3NCeXRlcyk7XG4gICAgY29uc3QgaW5SYW5nZSA9IGxvYWRlZCA8PSB0b3RhbDtcblxuICAgIGJ5dGVzTm90aWZpZWQgPSBsb2FkZWQ7XG5cbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgbG9hZGVkLFxuICAgICAgdG90YWwsXG4gICAgICBwcm9ncmVzczogdG90YWwgPyAobG9hZGVkIC8gdG90YWwpIDogdW5kZWZpbmVkLFxuICAgICAgYnl0ZXM6IHByb2dyZXNzQnl0ZXMsXG4gICAgICByYXRlOiByYXRlID8gcmF0ZSA6IHVuZGVmaW5lZCxcbiAgICAgIGVzdGltYXRlZDogcmF0ZSAmJiB0b3RhbCAmJiBpblJhbmdlID8gKHRvdGFsIC0gbG9hZGVkKSAvIHJhdGUgOiB1bmRlZmluZWQsXG4gICAgICBldmVudDogZVxuICAgIH07XG5cbiAgICBkYXRhW2lzRG93bmxvYWRTdHJlYW0gPyAnZG93bmxvYWQnIDogJ3VwbG9hZCddID0gdHJ1ZTtcblxuICAgIGxpc3RlbmVyKGRhdGEpO1xuICB9O1xufVxuXG5jb25zdCBpc1hIUkFkYXB0ZXJTdXBwb3J0ZWQgPSB0eXBlb2YgWE1MSHR0cFJlcXVlc3QgIT09ICd1bmRlZmluZWQnO1xuXG5leHBvcnQgZGVmYXVsdCBpc1hIUkFkYXB0ZXJTdXBwb3J0ZWQgJiYgZnVuY3Rpb24gKGNvbmZpZykge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gZGlzcGF0Y2hYaHJSZXF1ZXN0KHJlc29sdmUsIHJlamVjdCkge1xuICAgIGxldCByZXF1ZXN0RGF0YSA9IGNvbmZpZy5kYXRhO1xuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzID0gQXhpb3NIZWFkZXJzLmZyb20oY29uZmlnLmhlYWRlcnMpLm5vcm1hbGl6ZSgpO1xuICAgIGxldCB7cmVzcG9uc2VUeXBlLCB3aXRoWFNSRlRva2VufSA9IGNvbmZpZztcbiAgICBsZXQgb25DYW5jZWxlZDtcbiAgICBmdW5jdGlvbiBkb25lKCkge1xuICAgICAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgICAgICBjb25maWcuY2FuY2VsVG9rZW4udW5zdWJzY3JpYmUob25DYW5jZWxlZCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcuc2lnbmFsKSB7XG4gICAgICAgIGNvbmZpZy5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbkNhbmNlbGVkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgY29udGVudFR5cGU7XG5cbiAgICBpZiAodXRpbHMuaXNGb3JtRGF0YShyZXF1ZXN0RGF0YSkpIHtcbiAgICAgIGlmIChwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJFbnYgfHwgcGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52KSB7XG4gICAgICAgIHJlcXVlc3RIZWFkZXJzLnNldENvbnRlbnRUeXBlKGZhbHNlKTsgLy8gTGV0IHRoZSBicm93c2VyIHNldCBpdFxuICAgICAgfSBlbHNlIGlmICgoY29udGVudFR5cGUgPSByZXF1ZXN0SGVhZGVycy5nZXRDb250ZW50VHlwZSgpKSAhPT0gZmFsc2UpIHtcbiAgICAgICAgLy8gZml4IHNlbWljb2xvbiBkdXBsaWNhdGlvbiBpc3N1ZSBmb3IgUmVhY3ROYXRpdmUgRm9ybURhdGEgaW1wbGVtZW50YXRpb25cbiAgICAgICAgY29uc3QgW3R5cGUsIC4uLnRva2Vuc10gPSBjb250ZW50VHlwZSA/IGNvbnRlbnRUeXBlLnNwbGl0KCc7JykubWFwKHRva2VuID0+IHRva2VuLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pIDogW107XG4gICAgICAgIHJlcXVlc3RIZWFkZXJzLnNldENvbnRlbnRUeXBlKFt0eXBlIHx8ICdtdWx0aXBhcnQvZm9ybS1kYXRhJywgLi4udG9rZW5zXS5qb2luKCc7ICcpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgcmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuXG4gICAgLy8gSFRUUCBiYXNpYyBhdXRoZW50aWNhdGlvblxuICAgIGlmIChjb25maWcuYXV0aCkge1xuICAgICAgY29uc3QgdXNlcm5hbWUgPSBjb25maWcuYXV0aC51c2VybmFtZSB8fCAnJztcbiAgICAgIGNvbnN0IHBhc3N3b3JkID0gY29uZmlnLmF1dGgucGFzc3dvcmQgPyB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoY29uZmlnLmF1dGgucGFzc3dvcmQpKSA6ICcnO1xuICAgICAgcmVxdWVzdEhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgJ0Jhc2ljICcgKyBidG9hKHVzZXJuYW1lICsgJzonICsgcGFzc3dvcmQpKTtcbiAgICB9XG5cbiAgICBjb25zdCBmdWxsUGF0aCA9IGJ1aWxkRnVsbFBhdGgoY29uZmlnLmJhc2VVUkwsIGNvbmZpZy51cmwpO1xuXG4gICAgcmVxdWVzdC5vcGVuKGNvbmZpZy5tZXRob2QudG9VcHBlckNhc2UoKSwgYnVpbGRVUkwoZnVsbFBhdGgsIGNvbmZpZy5wYXJhbXMsIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyKSwgdHJ1ZSk7XG5cbiAgICAvLyBTZXQgdGhlIHJlcXVlc3QgdGltZW91dCBpbiBNU1xuICAgIHJlcXVlc3QudGltZW91dCA9IGNvbmZpZy50aW1lb3V0O1xuXG4gICAgZnVuY3Rpb24gb25sb2FkZW5kKCkge1xuICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIFByZXBhcmUgdGhlIHJlc3BvbnNlXG4gICAgICBjb25zdCByZXNwb25zZUhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShcbiAgICAgICAgJ2dldEFsbFJlc3BvbnNlSGVhZGVycycgaW4gcmVxdWVzdCAmJiByZXF1ZXN0LmdldEFsbFJlc3BvbnNlSGVhZGVycygpXG4gICAgICApO1xuICAgICAgY29uc3QgcmVzcG9uc2VEYXRhID0gIXJlc3BvbnNlVHlwZSB8fCByZXNwb25zZVR5cGUgPT09ICd0ZXh0JyB8fCByZXNwb25zZVR5cGUgPT09ICdqc29uJyA/XG4gICAgICAgIHJlcXVlc3QucmVzcG9uc2VUZXh0IDogcmVxdWVzdC5yZXNwb25zZTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0ge1xuICAgICAgICBkYXRhOiByZXNwb25zZURhdGEsXG4gICAgICAgIHN0YXR1czogcmVxdWVzdC5zdGF0dXMsXG4gICAgICAgIHN0YXR1c1RleHQ6IHJlcXVlc3Quc3RhdHVzVGV4dCxcbiAgICAgICAgaGVhZGVyczogcmVzcG9uc2VIZWFkZXJzLFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlcXVlc3RcbiAgICAgIH07XG5cbiAgICAgIHNldHRsZShmdW5jdGlvbiBfcmVzb2x2ZSh2YWx1ZSkge1xuICAgICAgICByZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSwgZnVuY3Rpb24gX3JlamVjdChlcnIpIHtcbiAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0sIHJlc3BvbnNlKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKCdvbmxvYWRlbmQnIGluIHJlcXVlc3QpIHtcbiAgICAgIC8vIFVzZSBvbmxvYWRlbmQgaWYgYXZhaWxhYmxlXG4gICAgICByZXF1ZXN0Lm9ubG9hZGVuZCA9IG9ubG9hZGVuZDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTGlzdGVuIGZvciByZWFkeSBzdGF0ZSB0byBlbXVsYXRlIG9ubG9hZGVuZFxuICAgICAgcmVxdWVzdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiBoYW5kbGVMb2FkKCkge1xuICAgICAgICBpZiAoIXJlcXVlc3QgfHwgcmVxdWVzdC5yZWFkeVN0YXRlICE9PSA0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlIHJlcXVlc3QgZXJyb3JlZCBvdXQgYW5kIHdlIGRpZG4ndCBnZXQgYSByZXNwb25zZSwgdGhpcyB3aWxsIGJlXG4gICAgICAgIC8vIGhhbmRsZWQgYnkgb25lcnJvciBpbnN0ZWFkXG4gICAgICAgIC8vIFdpdGggb25lIGV4Y2VwdGlvbjogcmVxdWVzdCB0aGF0IHVzaW5nIGZpbGU6IHByb3RvY29sLCBtb3N0IGJyb3dzZXJzXG4gICAgICAgIC8vIHdpbGwgcmV0dXJuIHN0YXR1cyBhcyAwIGV2ZW4gdGhvdWdoIGl0J3MgYSBzdWNjZXNzZnVsIHJlcXVlc3RcbiAgICAgICAgaWYgKHJlcXVlc3Quc3RhdHVzID09PSAwICYmICEocmVxdWVzdC5yZXNwb25zZVVSTCAmJiByZXF1ZXN0LnJlc3BvbnNlVVJMLmluZGV4T2YoJ2ZpbGU6JykgPT09IDApKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIHJlYWR5c3RhdGUgaGFuZGxlciBpcyBjYWxsaW5nIGJlZm9yZSBvbmVycm9yIG9yIG9udGltZW91dCBoYW5kbGVycyxcbiAgICAgICAgLy8gc28gd2Ugc2hvdWxkIGNhbGwgb25sb2FkZW5kIG9uIHRoZSBuZXh0ICd0aWNrJ1xuICAgICAgICBzZXRUaW1lb3V0KG9ubG9hZGVuZCk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBicm93c2VyIHJlcXVlc3QgY2FuY2VsbGF0aW9uIChhcyBvcHBvc2VkIHRvIGEgbWFudWFsIGNhbmNlbGxhdGlvbilcbiAgICByZXF1ZXN0Lm9uYWJvcnQgPSBmdW5jdGlvbiBoYW5kbGVBYm9ydCgpIHtcbiAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcignUmVxdWVzdCBhYm9ydGVkJywgQXhpb3NFcnJvci5FQ09OTkFCT1JURUQsIGNvbmZpZywgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIGxvdyBsZXZlbCBuZXR3b3JrIGVycm9yc1xuICAgIHJlcXVlc3Qub25lcnJvciA9IGZ1bmN0aW9uIGhhbmRsZUVycm9yKCkge1xuICAgICAgLy8gUmVhbCBlcnJvcnMgYXJlIGhpZGRlbiBmcm9tIHVzIGJ5IHRoZSBicm93c2VyXG4gICAgICAvLyBvbmVycm9yIHNob3VsZCBvbmx5IGZpcmUgaWYgaXQncyBhIG5ldHdvcmsgZXJyb3JcbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcignTmV0d29yayBFcnJvcicsIEF4aW9zRXJyb3IuRVJSX05FVFdPUkssIGNvbmZpZywgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIHRpbWVvdXRcbiAgICByZXF1ZXN0Lm9udGltZW91dCA9IGZ1bmN0aW9uIGhhbmRsZVRpbWVvdXQoKSB7XG4gICAgICBsZXQgdGltZW91dEVycm9yTWVzc2FnZSA9IGNvbmZpZy50aW1lb3V0ID8gJ3RpbWVvdXQgb2YgJyArIGNvbmZpZy50aW1lb3V0ICsgJ21zIGV4Y2VlZGVkJyA6ICd0aW1lb3V0IGV4Y2VlZGVkJztcbiAgICAgIGNvbnN0IHRyYW5zaXRpb25hbCA9IGNvbmZpZy50cmFuc2l0aW9uYWwgfHwgdHJhbnNpdGlvbmFsRGVmYXVsdHM7XG4gICAgICBpZiAoY29uZmlnLnRpbWVvdXRFcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSA9IGNvbmZpZy50aW1lb3V0RXJyb3JNZXNzYWdlO1xuICAgICAgfVxuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICB0aW1lb3V0RXJyb3JNZXNzYWdlLFxuICAgICAgICB0cmFuc2l0aW9uYWwuY2xhcmlmeVRpbWVvdXRFcnJvciA/IEF4aW9zRXJyb3IuRVRJTUVET1VUIDogQXhpb3NFcnJvci5FQ09OTkFCT1JURUQsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gICAgLy8gVGhpcyBpcyBvbmx5IGRvbmUgaWYgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgZW52aXJvbm1lbnQuXG4gICAgLy8gU3BlY2lmaWNhbGx5IG5vdCBpZiB3ZSdyZSBpbiBhIHdlYiB3b3JrZXIsIG9yIHJlYWN0LW5hdGl2ZS5cbiAgICBpZihwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJFbnYpIHtcbiAgICAgIHdpdGhYU1JGVG9rZW4gJiYgdXRpbHMuaXNGdW5jdGlvbih3aXRoWFNSRlRva2VuKSAmJiAod2l0aFhTUkZUb2tlbiA9IHdpdGhYU1JGVG9rZW4oY29uZmlnKSk7XG5cbiAgICAgIGlmICh3aXRoWFNSRlRva2VuIHx8ICh3aXRoWFNSRlRva2VuICE9PSBmYWxzZSAmJiBpc1VSTFNhbWVPcmlnaW4oZnVsbFBhdGgpKSkge1xuICAgICAgICAvLyBBZGQgeHNyZiBoZWFkZXJcbiAgICAgICAgY29uc3QgeHNyZlZhbHVlID0gY29uZmlnLnhzcmZIZWFkZXJOYW1lICYmIGNvbmZpZy54c3JmQ29va2llTmFtZSAmJiBjb29raWVzLnJlYWQoY29uZmlnLnhzcmZDb29raWVOYW1lKTtcblxuICAgICAgICBpZiAoeHNyZlZhbHVlKSB7XG4gICAgICAgICAgcmVxdWVzdEhlYWRlcnMuc2V0KGNvbmZpZy54c3JmSGVhZGVyTmFtZSwgeHNyZlZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJlbW92ZSBDb250ZW50LVR5cGUgaWYgZGF0YSBpcyB1bmRlZmluZWRcbiAgICByZXF1ZXN0RGF0YSA9PT0gdW5kZWZpbmVkICYmIHJlcXVlc3RIZWFkZXJzLnNldENvbnRlbnRUeXBlKG51bGwpO1xuXG4gICAgLy8gQWRkIGhlYWRlcnMgdG8gdGhlIHJlcXVlc3RcbiAgICBpZiAoJ3NldFJlcXVlc3RIZWFkZXInIGluIHJlcXVlc3QpIHtcbiAgICAgIHV0aWxzLmZvckVhY2gocmVxdWVzdEhlYWRlcnMudG9KU09OKCksIGZ1bmN0aW9uIHNldFJlcXVlc3RIZWFkZXIodmFsLCBrZXkpIHtcbiAgICAgICAgcmVxdWVzdC5zZXRSZXF1ZXN0SGVhZGVyKGtleSwgdmFsKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEFkZCB3aXRoQ3JlZGVudGlhbHMgdG8gcmVxdWVzdCBpZiBuZWVkZWRcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZy53aXRoQ3JlZGVudGlhbHMpKSB7XG4gICAgICByZXF1ZXN0LndpdGhDcmVkZW50aWFscyA9ICEhY29uZmlnLndpdGhDcmVkZW50aWFscztcbiAgICB9XG5cbiAgICAvLyBBZGQgcmVzcG9uc2VUeXBlIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgaWYgKHJlc3BvbnNlVHlwZSAmJiByZXNwb25zZVR5cGUgIT09ICdqc29uJykge1xuICAgICAgcmVxdWVzdC5yZXNwb25zZVR5cGUgPSBjb25maWcucmVzcG9uc2VUeXBlO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBwcm9ncmVzcyBpZiBuZWVkZWRcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5vbkRvd25sb2FkUHJvZ3Jlc3MgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBwcm9ncmVzc0V2ZW50UmVkdWNlcihjb25maWcub25Eb3dubG9hZFByb2dyZXNzLCB0cnVlKSk7XG4gICAgfVxuXG4gICAgLy8gTm90IGFsbCBicm93c2VycyBzdXBwb3J0IHVwbG9hZCBldmVudHNcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5vblVwbG9hZFByb2dyZXNzID09PSAnZnVuY3Rpb24nICYmIHJlcXVlc3QudXBsb2FkKSB7XG4gICAgICByZXF1ZXN0LnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHByb2dyZXNzRXZlbnRSZWR1Y2VyKGNvbmZpZy5vblVwbG9hZFByb2dyZXNzKSk7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbiB8fCBjb25maWcuc2lnbmFsKSB7XG4gICAgICAvLyBIYW5kbGUgY2FuY2VsbGF0aW9uXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgICAgb25DYW5jZWxlZCA9IGNhbmNlbCA9PiB7XG4gICAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoIWNhbmNlbCB8fCBjYW5jZWwudHlwZSA/IG5ldyBDYW5jZWxlZEVycm9yKG51bGwsIGNvbmZpZywgcmVxdWVzdCkgOiBjYW5jZWwpO1xuICAgICAgICByZXF1ZXN0LmFib3J0KCk7XG4gICAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgICAgfTtcblxuICAgICAgY29uZmlnLmNhbmNlbFRva2VuICYmIGNvbmZpZy5jYW5jZWxUb2tlbi5zdWJzY3JpYmUob25DYW5jZWxlZCk7XG4gICAgICBpZiAoY29uZmlnLnNpZ25hbCkge1xuICAgICAgICBjb25maWcuc2lnbmFsLmFib3J0ZWQgPyBvbkNhbmNlbGVkKCkgOiBjb25maWcuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25DYW5jZWxlZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcHJvdG9jb2wgPSBwYXJzZVByb3RvY29sKGZ1bGxQYXRoKTtcblxuICAgIGlmIChwcm90b2NvbCAmJiBwbGF0Zm9ybS5wcm90b2NvbHMuaW5kZXhPZihwcm90b2NvbCkgPT09IC0xKSB7XG4gICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoJ1Vuc3VwcG9ydGVkIHByb3RvY29sICcgKyBwcm90b2NvbCArICc6JywgQXhpb3NFcnJvci5FUlJfQkFEX1JFUVVFU1QsIGNvbmZpZykpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG4gICAgLy8gU2VuZCB0aGUgcmVxdWVzdFxuICAgIHJlcXVlc3Quc2VuZChyZXF1ZXN0RGF0YSB8fCBudWxsKTtcbiAgfSk7XG59XG4iLCAiaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBodHRwQWRhcHRlciBmcm9tICcuL2h0dHAuanMnO1xuaW1wb3J0IHhockFkYXB0ZXIgZnJvbSAnLi94aHIuanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSBcIi4uL2NvcmUvQXhpb3NFcnJvci5qc1wiO1xuXG5jb25zdCBrbm93bkFkYXB0ZXJzID0ge1xuICBodHRwOiBodHRwQWRhcHRlcixcbiAgeGhyOiB4aHJBZGFwdGVyXG59XG5cbnV0aWxzLmZvckVhY2goa25vd25BZGFwdGVycywgKGZuLCB2YWx1ZSkgPT4ge1xuICBpZiAoZm4pIHtcbiAgICB0cnkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZuLCAnbmFtZScsIHt2YWx1ZX0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lbXB0eVxuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZm4sICdhZGFwdGVyTmFtZScsIHt2YWx1ZX0pO1xuICB9XG59KTtcblxuY29uc3QgcmVuZGVyUmVhc29uID0gKHJlYXNvbikgPT4gYC0gJHtyZWFzb259YDtcblxuY29uc3QgaXNSZXNvbHZlZEhhbmRsZSA9IChhZGFwdGVyKSA9PiB1dGlscy5pc0Z1bmN0aW9uKGFkYXB0ZXIpIHx8IGFkYXB0ZXIgPT09IG51bGwgfHwgYWRhcHRlciA9PT0gZmFsc2U7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZ2V0QWRhcHRlcjogKGFkYXB0ZXJzKSA9PiB7XG4gICAgYWRhcHRlcnMgPSB1dGlscy5pc0FycmF5KGFkYXB0ZXJzKSA/IGFkYXB0ZXJzIDogW2FkYXB0ZXJzXTtcblxuICAgIGNvbnN0IHtsZW5ndGh9ID0gYWRhcHRlcnM7XG4gICAgbGV0IG5hbWVPckFkYXB0ZXI7XG4gICAgbGV0IGFkYXB0ZXI7XG5cbiAgICBjb25zdCByZWplY3RlZFJlYXNvbnMgPSB7fTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIG5hbWVPckFkYXB0ZXIgPSBhZGFwdGVyc1tpXTtcbiAgICAgIGxldCBpZDtcblxuICAgICAgYWRhcHRlciA9IG5hbWVPckFkYXB0ZXI7XG5cbiAgICAgIGlmICghaXNSZXNvbHZlZEhhbmRsZShuYW1lT3JBZGFwdGVyKSkge1xuICAgICAgICBhZGFwdGVyID0ga25vd25BZGFwdGVyc1soaWQgPSBTdHJpbmcobmFtZU9yQWRhcHRlcikpLnRvTG93ZXJDYXNlKCldO1xuXG4gICAgICAgIGlmIChhZGFwdGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihgVW5rbm93biBhZGFwdGVyICcke2lkfSdgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoYWRhcHRlcikge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgcmVqZWN0ZWRSZWFzb25zW2lkIHx8ICcjJyArIGldID0gYWRhcHRlcjtcbiAgICB9XG5cbiAgICBpZiAoIWFkYXB0ZXIpIHtcblxuICAgICAgY29uc3QgcmVhc29ucyA9IE9iamVjdC5lbnRyaWVzKHJlamVjdGVkUmVhc29ucylcbiAgICAgICAgLm1hcCgoW2lkLCBzdGF0ZV0pID0+IGBhZGFwdGVyICR7aWR9IGAgK1xuICAgICAgICAgIChzdGF0ZSA9PT0gZmFsc2UgPyAnaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZW52aXJvbm1lbnQnIDogJ2lzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJ1aWxkJylcbiAgICAgICAgKTtcblxuICAgICAgbGV0IHMgPSBsZW5ndGggP1xuICAgICAgICAocmVhc29ucy5sZW5ndGggPiAxID8gJ3NpbmNlIDpcXG4nICsgcmVhc29ucy5tYXAocmVuZGVyUmVhc29uKS5qb2luKCdcXG4nKSA6ICcgJyArIHJlbmRlclJlYXNvbihyZWFzb25zWzBdKSkgOlxuICAgICAgICAnYXMgbm8gYWRhcHRlciBzcGVjaWZpZWQnO1xuXG4gICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgYFRoZXJlIGlzIG5vIHN1aXRhYmxlIGFkYXB0ZXIgdG8gZGlzcGF0Y2ggdGhlIHJlcXVlc3QgYCArIHMsXG4gICAgICAgICdFUlJfTk9UX1NVUFBPUlQnXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBhZGFwdGVyO1xuICB9LFxuICBhZGFwdGVyczoga25vd25BZGFwdGVyc1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHRyYW5zZm9ybURhdGEgZnJvbSAnLi90cmFuc2Zvcm1EYXRhLmpzJztcbmltcG9ydCBpc0NhbmNlbCBmcm9tICcuLi9jYW5jZWwvaXNDYW5jZWwuanMnO1xuaW1wb3J0IGRlZmF1bHRzIGZyb20gJy4uL2RlZmF1bHRzL2luZGV4LmpzJztcbmltcG9ydCBDYW5jZWxlZEVycm9yIGZyb20gJy4uL2NhbmNlbC9DYW5jZWxlZEVycm9yLmpzJztcbmltcG9ydCBBeGlvc0hlYWRlcnMgZnJvbSAnLi4vY29yZS9BeGlvc0hlYWRlcnMuanMnO1xuaW1wb3J0IGFkYXB0ZXJzIGZyb20gXCIuLi9hZGFwdGVycy9hZGFwdGVycy5qc1wiO1xuXG4vKipcbiAqIFRocm93cyBhIGBDYW5jZWxlZEVycm9yYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZyB0aGF0IGlzIHRvIGJlIHVzZWQgZm9yIHRoZSByZXF1ZXN0XG4gKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKSB7XG4gIGlmIChjb25maWcuY2FuY2VsVG9rZW4pIHtcbiAgICBjb25maWcuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpO1xuICB9XG5cbiAgaWYgKGNvbmZpZy5zaWduYWwgJiYgY29uZmlnLnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgdGhyb3cgbmV3IENhbmNlbGVkRXJyb3IobnVsbCwgY29uZmlnKTtcbiAgfVxufVxuXG4vKipcbiAqIERpc3BhdGNoIGEgcmVxdWVzdCB0byB0aGUgc2VydmVyIHVzaW5nIHRoZSBjb25maWd1cmVkIGFkYXB0ZXIuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnIHRoYXQgaXMgdG8gYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3RcbiAqXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gVGhlIFByb21pc2UgdG8gYmUgZnVsZmlsbGVkXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRpc3BhdGNoUmVxdWVzdChjb25maWcpIHtcbiAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gIGNvbmZpZy5oZWFkZXJzID0gQXhpb3NIZWFkZXJzLmZyb20oY29uZmlnLmhlYWRlcnMpO1xuXG4gIC8vIFRyYW5zZm9ybSByZXF1ZXN0IGRhdGFcbiAgY29uZmlnLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoXG4gICAgY29uZmlnLFxuICAgIGNvbmZpZy50cmFuc2Zvcm1SZXF1ZXN0XG4gICk7XG5cbiAgaWYgKFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXS5pbmRleE9mKGNvbmZpZy5tZXRob2QpICE9PSAtMSkge1xuICAgIGNvbmZpZy5oZWFkZXJzLnNldENvbnRlbnRUeXBlKCdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLCBmYWxzZSk7XG4gIH1cblxuICBjb25zdCBhZGFwdGVyID0gYWRhcHRlcnMuZ2V0QWRhcHRlcihjb25maWcuYWRhcHRlciB8fCBkZWZhdWx0cy5hZGFwdGVyKTtcblxuICByZXR1cm4gYWRhcHRlcihjb25maWcpLnRoZW4oZnVuY3Rpb24gb25BZGFwdGVyUmVzb2x1dGlvbihyZXNwb25zZSkge1xuICAgIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgcmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICAgIGNvbmZpZyxcbiAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZSxcbiAgICAgIHJlc3BvbnNlXG4gICAgKTtcblxuICAgIHJlc3BvbnNlLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShyZXNwb25zZS5oZWFkZXJzKTtcblxuICAgIHJldHVybiByZXNwb25zZTtcbiAgfSwgZnVuY3Rpb24gb25BZGFwdGVyUmVqZWN0aW9uKHJlYXNvbikge1xuICAgIGlmICghaXNDYW5jZWwocmVhc29uKSkge1xuICAgICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgICAvLyBUcmFuc2Zvcm0gcmVzcG9uc2UgZGF0YVxuICAgICAgaWYgKHJlYXNvbiAmJiByZWFzb24ucmVzcG9uc2UpIHtcbiAgICAgICAgcmVhc29uLnJlc3BvbnNlLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZSxcbiAgICAgICAgICByZWFzb24ucmVzcG9uc2VcbiAgICAgICAgKTtcbiAgICAgICAgcmVhc29uLnJlc3BvbnNlLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShyZWFzb24ucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlYXNvbik7XG4gIH0pO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBBeGlvc0hlYWRlcnMgZnJvbSBcIi4vQXhpb3NIZWFkZXJzLmpzXCI7XG5cbmNvbnN0IGhlYWRlcnNUb09iamVjdCA9ICh0aGluZykgPT4gdGhpbmcgaW5zdGFuY2VvZiBBeGlvc0hlYWRlcnMgPyB7IC4uLnRoaW5nIH0gOiB0aGluZztcblxuLyoqXG4gKiBDb25maWctc3BlY2lmaWMgbWVyZ2UtZnVuY3Rpb24gd2hpY2ggY3JlYXRlcyBhIG5ldyBjb25maWctb2JqZWN0XG4gKiBieSBtZXJnaW5nIHR3byBjb25maWd1cmF0aW9uIG9iamVjdHMgdG9nZXRoZXIuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZzFcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcyXG4gKlxuICogQHJldHVybnMge09iamVjdH0gTmV3IG9iamVjdCByZXN1bHRpbmcgZnJvbSBtZXJnaW5nIGNvbmZpZzIgdG8gY29uZmlnMVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtZXJnZUNvbmZpZyhjb25maWcxLCBjb25maWcyKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBjb25maWcyID0gY29uZmlnMiB8fCB7fTtcbiAgY29uc3QgY29uZmlnID0ge307XG5cbiAgZnVuY3Rpb24gZ2V0TWVyZ2VkVmFsdWUodGFyZ2V0LCBzb3VyY2UsIGNhc2VsZXNzKSB7XG4gICAgaWYgKHV0aWxzLmlzUGxhaW5PYmplY3QodGFyZ2V0KSAmJiB1dGlscy5pc1BsYWluT2JqZWN0KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiB1dGlscy5tZXJnZS5jYWxsKHtjYXNlbGVzc30sIHRhcmdldCwgc291cmNlKTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzLmlzUGxhaW5PYmplY3Qoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHV0aWxzLm1lcmdlKHt9LCBzb3VyY2UpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNBcnJheShzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gc291cmNlLnNsaWNlKCk7XG4gICAgfVxuICAgIHJldHVybiBzb3VyY2U7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gbWVyZ2VEZWVwUHJvcGVydGllcyhhLCBiLCBjYXNlbGVzcykge1xuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoYikpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZShhLCBiLCBjYXNlbGVzcyk7XG4gICAgfSBlbHNlIGlmICghdXRpbHMuaXNVbmRlZmluZWQoYSkpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGEsIGNhc2VsZXNzKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gdmFsdWVGcm9tQ29uZmlnMihhLCBiKSB7XG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChiKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYik7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIGRlZmF1bHRUb0NvbmZpZzIoYSwgYikge1xuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoYikpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGIpO1xuICAgIH0gZWxzZSBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGEpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBhKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gbWVyZ2VEaXJlY3RLZXlzKGEsIGIsIHByb3ApIHtcbiAgICBpZiAocHJvcCBpbiBjb25maWcyKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUoYSwgYik7XG4gICAgfSBlbHNlIGlmIChwcm9wIGluIGNvbmZpZzEpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGEpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG1lcmdlTWFwID0ge1xuICAgIHVybDogdmFsdWVGcm9tQ29uZmlnMixcbiAgICBtZXRob2Q6IHZhbHVlRnJvbUNvbmZpZzIsXG4gICAgZGF0YTogdmFsdWVGcm9tQ29uZmlnMixcbiAgICBiYXNlVVJMOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRyYW5zZm9ybVJlcXVlc3Q6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdHJhbnNmb3JtUmVzcG9uc2U6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgcGFyYW1zU2VyaWFsaXplcjogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0aW1lb3V0OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRpbWVvdXRNZXNzYWdlOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHdpdGhDcmVkZW50aWFsczogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB3aXRoWFNSRlRva2VuOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGFkYXB0ZXI6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgcmVzcG9uc2VUeXBlOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHhzcmZDb29raWVOYW1lOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHhzcmZIZWFkZXJOYW1lOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIG9uVXBsb2FkUHJvZ3Jlc3M6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgb25Eb3dubG9hZFByb2dyZXNzOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGRlY29tcHJlc3M6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgbWF4Q29udGVudExlbmd0aDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBtYXhCb2R5TGVuZ3RoOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGJlZm9yZVJlZGlyZWN0OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRyYW5zcG9ydDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBodHRwQWdlbnQ6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgaHR0cHNBZ2VudDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBjYW5jZWxUb2tlbjogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBzb2NrZXRQYXRoOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHJlc3BvbnNlRW5jb2Rpbmc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdmFsaWRhdGVTdGF0dXM6IG1lcmdlRGlyZWN0S2V5cyxcbiAgICBoZWFkZXJzOiAoYSwgYikgPT4gbWVyZ2VEZWVwUHJvcGVydGllcyhoZWFkZXJzVG9PYmplY3QoYSksIGhlYWRlcnNUb09iamVjdChiKSwgdHJ1ZSlcbiAgfTtcblxuICB1dGlscy5mb3JFYWNoKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sIGNvbmZpZzEsIGNvbmZpZzIpKSwgZnVuY3Rpb24gY29tcHV0ZUNvbmZpZ1ZhbHVlKHByb3ApIHtcbiAgICBjb25zdCBtZXJnZSA9IG1lcmdlTWFwW3Byb3BdIHx8IG1lcmdlRGVlcFByb3BlcnRpZXM7XG4gICAgY29uc3QgY29uZmlnVmFsdWUgPSBtZXJnZShjb25maWcxW3Byb3BdLCBjb25maWcyW3Byb3BdLCBwcm9wKTtcbiAgICAodXRpbHMuaXNVbmRlZmluZWQoY29uZmlnVmFsdWUpICYmIG1lcmdlICE9PSBtZXJnZURpcmVjdEtleXMpIHx8IChjb25maWdbcHJvcF0gPSBjb25maWdWYWx1ZSk7XG4gIH0pO1xuXG4gIHJldHVybiBjb25maWc7XG59XG4iLCAiZXhwb3J0IGNvbnN0IFZFUlNJT04gPSBcIjEuNi44XCI7IiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHtWRVJTSU9OfSBmcm9tICcuLi9lbnYvZGF0YS5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuXG5jb25zdCB2YWxpZGF0b3JzID0ge307XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5bJ29iamVjdCcsICdib29sZWFuJywgJ251bWJlcicsICdmdW5jdGlvbicsICdzdHJpbmcnLCAnc3ltYm9sJ10uZm9yRWFjaCgodHlwZSwgaSkgPT4ge1xuICB2YWxpZGF0b3JzW3R5cGVdID0gZnVuY3Rpb24gdmFsaWRhdG9yKHRoaW5nKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGluZyA9PT0gdHlwZSB8fCAnYScgKyAoaSA8IDEgPyAnbiAnIDogJyAnKSArIHR5cGU7XG4gIH07XG59KTtcblxuY29uc3QgZGVwcmVjYXRlZFdhcm5pbmdzID0ge307XG5cbi8qKlxuICogVHJhbnNpdGlvbmFsIG9wdGlvbiB2YWxpZGF0b3JcbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufGJvb2xlYW4/fSB2YWxpZGF0b3IgLSBzZXQgdG8gZmFsc2UgaWYgdGhlIHRyYW5zaXRpb25hbCBvcHRpb24gaGFzIGJlZW4gcmVtb3ZlZFxuICogQHBhcmFtIHtzdHJpbmc/fSB2ZXJzaW9uIC0gZGVwcmVjYXRlZCB2ZXJzaW9uIC8gcmVtb3ZlZCBzaW5jZSB2ZXJzaW9uXG4gKiBAcGFyYW0ge3N0cmluZz99IG1lc3NhZ2UgLSBzb21lIG1lc3NhZ2Ugd2l0aCBhZGRpdGlvbmFsIGluZm9cbiAqXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259XG4gKi9cbnZhbGlkYXRvcnMudHJhbnNpdGlvbmFsID0gZnVuY3Rpb24gdHJhbnNpdGlvbmFsKHZhbGlkYXRvciwgdmVyc2lvbiwgbWVzc2FnZSkge1xuICBmdW5jdGlvbiBmb3JtYXRNZXNzYWdlKG9wdCwgZGVzYykge1xuICAgIHJldHVybiAnW0F4aW9zIHYnICsgVkVSU0lPTiArICddIFRyYW5zaXRpb25hbCBvcHRpb24gXFwnJyArIG9wdCArICdcXCcnICsgZGVzYyArIChtZXNzYWdlID8gJy4gJyArIG1lc3NhZ2UgOiAnJyk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICByZXR1cm4gKHZhbHVlLCBvcHQsIG9wdHMpID0+IHtcbiAgICBpZiAodmFsaWRhdG9yID09PSBmYWxzZSkge1xuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoXG4gICAgICAgIGZvcm1hdE1lc3NhZ2Uob3B0LCAnIGhhcyBiZWVuIHJlbW92ZWQnICsgKHZlcnNpb24gPyAnIGluICcgKyB2ZXJzaW9uIDogJycpKSxcbiAgICAgICAgQXhpb3NFcnJvci5FUlJfREVQUkVDQVRFRFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodmVyc2lvbiAmJiAhZGVwcmVjYXRlZFdhcm5pbmdzW29wdF0pIHtcbiAgICAgIGRlcHJlY2F0ZWRXYXJuaW5nc1tvcHRdID0gdHJ1ZTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGZvcm1hdE1lc3NhZ2UoXG4gICAgICAgICAgb3B0LFxuICAgICAgICAgICcgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2JyArIHZlcnNpb24gKyAnIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlJ1xuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0b3IgPyB2YWxpZGF0b3IodmFsdWUsIG9wdCwgb3B0cykgOiB0cnVlO1xuICB9O1xufTtcblxuLyoqXG4gKiBBc3NlcnQgb2JqZWN0J3MgcHJvcGVydGllcyB0eXBlXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAqIEBwYXJhbSB7b2JqZWN0fSBzY2hlbWFcbiAqIEBwYXJhbSB7Ym9vbGVhbj99IGFsbG93VW5rbm93blxuICpcbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cblxuZnVuY3Rpb24gYXNzZXJ0T3B0aW9ucyhvcHRpb25zLCBzY2hlbWEsIGFsbG93VW5rbm93bikge1xuICBpZiAodHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ29wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QnLCBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtcbiAgfVxuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob3B0aW9ucyk7XG4gIGxldCBpID0ga2V5cy5sZW5ndGg7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgY29uc3Qgb3B0ID0ga2V5c1tpXTtcbiAgICBjb25zdCB2YWxpZGF0b3IgPSBzY2hlbWFbb3B0XTtcbiAgICBpZiAodmFsaWRhdG9yKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IG9wdGlvbnNbb3B0XTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsaWRhdG9yKHZhbHVlLCBvcHQsIG9wdGlvbnMpO1xuICAgICAgaWYgKHJlc3VsdCAhPT0gdHJ1ZSkge1xuICAgICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcignb3B0aW9uICcgKyBvcHQgKyAnIG11c3QgYmUgJyArIHJlc3VsdCwgQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTl9WQUxVRSk7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGFsbG93VW5rbm93biAhPT0gdHJ1ZSkge1xuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ1Vua25vd24gb3B0aW9uICcgKyBvcHQsIEF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT04pO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGFzc2VydE9wdGlvbnMsXG4gIHZhbGlkYXRvcnNcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5pbXBvcnQgYnVpbGRVUkwgZnJvbSAnLi4vaGVscGVycy9idWlsZFVSTC5qcyc7XG5pbXBvcnQgSW50ZXJjZXB0b3JNYW5hZ2VyIGZyb20gJy4vSW50ZXJjZXB0b3JNYW5hZ2VyLmpzJztcbmltcG9ydCBkaXNwYXRjaFJlcXVlc3QgZnJvbSAnLi9kaXNwYXRjaFJlcXVlc3QuanMnO1xuaW1wb3J0IG1lcmdlQ29uZmlnIGZyb20gJy4vbWVyZ2VDb25maWcuanMnO1xuaW1wb3J0IGJ1aWxkRnVsbFBhdGggZnJvbSAnLi9idWlsZEZ1bGxQYXRoLmpzJztcbmltcG9ydCB2YWxpZGF0b3IgZnJvbSAnLi4vaGVscGVycy92YWxpZGF0b3IuanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tICcuL0F4aW9zSGVhZGVycy5qcyc7XG5cbmNvbnN0IHZhbGlkYXRvcnMgPSB2YWxpZGF0b3IudmFsaWRhdG9ycztcblxuLyoqXG4gKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VDb25maWcgVGhlIGRlZmF1bHQgY29uZmlnIGZvciB0aGUgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJuIHtBeGlvc30gQSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqL1xuY2xhc3MgQXhpb3Mge1xuICBjb25zdHJ1Y3RvcihpbnN0YW5jZUNvbmZpZykge1xuICAgIHRoaXMuZGVmYXVsdHMgPSBpbnN0YW5jZUNvbmZpZztcbiAgICB0aGlzLmludGVyY2VwdG9ycyA9IHtcbiAgICAgIHJlcXVlc3Q6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIoKSxcbiAgICAgIHJlc3BvbnNlOiBuZXcgSW50ZXJjZXB0b3JNYW5hZ2VyKClcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3BhdGNoIGEgcmVxdWVzdFxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ3xPYmplY3R9IGNvbmZpZ09yVXJsIFRoZSBjb25maWcgc3BlY2lmaWMgZm9yIHRoaXMgcmVxdWVzdCAobWVyZ2VkIHdpdGggdGhpcy5kZWZhdWx0cylcbiAgICogQHBhcmFtIHs/T2JqZWN0fSBjb25maWdcbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2V9IFRoZSBQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZFxuICAgKi9cbiAgYXN5bmMgcmVxdWVzdChjb25maWdPclVybCwgY29uZmlnKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9yZXF1ZXN0KGNvbmZpZ09yVXJsLCBjb25maWcpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIGxldCBkdW1teTtcblxuICAgICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSA/IEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKGR1bW15ID0ge30pIDogKGR1bW15ID0gbmV3IEVycm9yKCkpO1xuXG4gICAgICAgIC8vIHNsaWNlIG9mZiB0aGUgRXJyb3I6IC4uLiBsaW5lXG4gICAgICAgIGNvbnN0IHN0YWNrID0gZHVtbXkuc3RhY2sgPyBkdW1teS5zdGFjay5yZXBsYWNlKC9eLitcXG4vLCAnJykgOiAnJztcblxuICAgICAgICBpZiAoIWVyci5zdGFjaykge1xuICAgICAgICAgIGVyci5zdGFjayA9IHN0YWNrO1xuICAgICAgICAgIC8vIG1hdGNoIHdpdGhvdXQgdGhlIDIgdG9wIHN0YWNrIGxpbmVzXG4gICAgICAgIH0gZWxzZSBpZiAoc3RhY2sgJiYgIVN0cmluZyhlcnIuc3RhY2spLmVuZHNXaXRoKHN0YWNrLnJlcGxhY2UoL14uK1xcbi4rXFxuLywgJycpKSkge1xuICAgICAgICAgIGVyci5zdGFjayArPSAnXFxuJyArIHN0YWNrXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfVxuXG4gIF9yZXF1ZXN0KGNvbmZpZ09yVXJsLCBjb25maWcpIHtcbiAgICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgICAvLyBBbGxvdyBmb3IgYXhpb3MoJ2V4YW1wbGUvdXJsJ1ssIGNvbmZpZ10pIGEgbGEgZmV0Y2ggQVBJXG4gICAgaWYgKHR5cGVvZiBjb25maWdPclVybCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbmZpZyA9IGNvbmZpZyB8fCB7fTtcbiAgICAgIGNvbmZpZy51cmwgPSBjb25maWdPclVybDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uZmlnID0gY29uZmlnT3JVcmwgfHwge307XG4gICAgfVxuXG4gICAgY29uZmlnID0gbWVyZ2VDb25maWcodGhpcy5kZWZhdWx0cywgY29uZmlnKTtcblxuICAgIGNvbnN0IHt0cmFuc2l0aW9uYWwsIHBhcmFtc1NlcmlhbGl6ZXIsIGhlYWRlcnN9ID0gY29uZmlnO1xuXG4gICAgaWYgKHRyYW5zaXRpb25hbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YWxpZGF0b3IuYXNzZXJ0T3B0aW9ucyh0cmFuc2l0aW9uYWwsIHtcbiAgICAgICAgc2lsZW50SlNPTlBhcnNpbmc6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbiksXG4gICAgICAgIGZvcmNlZEpTT05QYXJzaW5nOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pLFxuICAgICAgICBjbGFyaWZ5VGltZW91dEVycm9yOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pXG4gICAgICB9LCBmYWxzZSk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtc1NlcmlhbGl6ZXIgIT0gbnVsbCkge1xuICAgICAgaWYgKHV0aWxzLmlzRnVuY3Rpb24ocGFyYW1zU2VyaWFsaXplcikpIHtcbiAgICAgICAgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIgPSB7XG4gICAgICAgICAgc2VyaWFsaXplOiBwYXJhbXNTZXJpYWxpemVyXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbGlkYXRvci5hc3NlcnRPcHRpb25zKHBhcmFtc1NlcmlhbGl6ZXIsIHtcbiAgICAgICAgICBlbmNvZGU6IHZhbGlkYXRvcnMuZnVuY3Rpb24sXG4gICAgICAgICAgc2VyaWFsaXplOiB2YWxpZGF0b3JzLmZ1bmN0aW9uXG4gICAgICAgIH0sIHRydWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNldCBjb25maWcubWV0aG9kXG4gICAgY29uZmlnLm1ldGhvZCA9IChjb25maWcubWV0aG9kIHx8IHRoaXMuZGVmYXVsdHMubWV0aG9kIHx8ICdnZXQnKS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgLy8gRmxhdHRlbiBoZWFkZXJzXG4gICAgbGV0IGNvbnRleHRIZWFkZXJzID0gaGVhZGVycyAmJiB1dGlscy5tZXJnZShcbiAgICAgIGhlYWRlcnMuY29tbW9uLFxuICAgICAgaGVhZGVyc1tjb25maWcubWV0aG9kXVxuICAgICk7XG5cbiAgICBoZWFkZXJzICYmIHV0aWxzLmZvckVhY2goXG4gICAgICBbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdwb3N0JywgJ3B1dCcsICdwYXRjaCcsICdjb21tb24nXSxcbiAgICAgIChtZXRob2QpID0+IHtcbiAgICAgICAgZGVsZXRlIGhlYWRlcnNbbWV0aG9kXTtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgY29uZmlnLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuY29uY2F0KGNvbnRleHRIZWFkZXJzLCBoZWFkZXJzKTtcblxuICAgIC8vIGZpbHRlciBvdXQgc2tpcHBlZCBpbnRlcmNlcHRvcnNcbiAgICBjb25zdCByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbiA9IFtdO1xuICAgIGxldCBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgPSB0cnVlO1xuICAgIHRoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbiB1bnNoaWZ0UmVxdWVzdEludGVyY2VwdG9ycyhpbnRlcmNlcHRvcikge1xuICAgICAgaWYgKHR5cGVvZiBpbnRlcmNlcHRvci5ydW5XaGVuID09PSAnZnVuY3Rpb24nICYmIGludGVyY2VwdG9yLnJ1bldoZW4oY29uZmlnKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgPSBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgJiYgaW50ZXJjZXB0b3Iuc3luY2hyb25vdXM7XG5cbiAgICAgIHJlcXVlc3RJbnRlcmNlcHRvckNoYWluLnVuc2hpZnQoaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gICAgfSk7XG5cbiAgICBjb25zdCByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4gPSBbXTtcbiAgICB0aGlzLmludGVyY2VwdG9ycy5yZXNwb25zZS5mb3JFYWNoKGZ1bmN0aW9uIHB1c2hSZXNwb25zZUludGVyY2VwdG9ycyhpbnRlcmNlcHRvcikge1xuICAgICAgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluLnB1c2goaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gICAgfSk7XG5cbiAgICBsZXQgcHJvbWlzZTtcbiAgICBsZXQgaSA9IDA7XG4gICAgbGV0IGxlbjtcblxuICAgIGlmICghc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzKSB7XG4gICAgICBjb25zdCBjaGFpbiA9IFtkaXNwYXRjaFJlcXVlc3QuYmluZCh0aGlzKSwgdW5kZWZpbmVkXTtcbiAgICAgIGNoYWluLnVuc2hpZnQuYXBwbHkoY2hhaW4sIHJlcXVlc3RJbnRlcmNlcHRvckNoYWluKTtcbiAgICAgIGNoYWluLnB1c2guYXBwbHkoY2hhaW4sIHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbik7XG4gICAgICBsZW4gPSBjaGFpbi5sZW5ndGg7XG5cbiAgICAgIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoY29uZmlnKTtcblxuICAgICAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICAgICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihjaGFpbltpKytdLCBjaGFpbltpKytdKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfVxuXG4gICAgbGVuID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4ubGVuZ3RoO1xuXG4gICAgbGV0IG5ld0NvbmZpZyA9IGNvbmZpZztcblxuICAgIGkgPSAwO1xuXG4gICAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICAgIGNvbnN0IG9uRnVsZmlsbGVkID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW5baSsrXTtcbiAgICAgIGNvbnN0IG9uUmVqZWN0ZWQgPSByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbltpKytdO1xuICAgICAgdHJ5IHtcbiAgICAgICAgbmV3Q29uZmlnID0gb25GdWxmaWxsZWQobmV3Q29uZmlnKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIG9uUmVqZWN0ZWQuY2FsbCh0aGlzLCBlcnJvcik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBwcm9taXNlID0gZGlzcGF0Y2hSZXF1ZXN0LmNhbGwodGhpcywgbmV3Q29uZmlnKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgICB9XG5cbiAgICBpID0gMDtcbiAgICBsZW4gPSByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4ubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4ocmVzcG9uc2VJbnRlcmNlcHRvckNoYWluW2krK10sIHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbltpKytdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfVxuXG4gIGdldFVyaShjb25maWcpIHtcbiAgICBjb25maWcgPSBtZXJnZUNvbmZpZyh0aGlzLmRlZmF1bHRzLCBjb25maWcpO1xuICAgIGNvbnN0IGZ1bGxQYXRoID0gYnVpbGRGdWxsUGF0aChjb25maWcuYmFzZVVSTCwgY29uZmlnLnVybCk7XG4gICAgcmV0dXJuIGJ1aWxkVVJMKGZ1bGxQYXRoLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplcik7XG4gIH1cbn1cblxuLy8gUHJvdmlkZSBhbGlhc2VzIGZvciBzdXBwb3J0ZWQgcmVxdWVzdCBtZXRob2RzXG51dGlscy5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ29wdGlvbnMnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZE5vRGF0YShtZXRob2QpIHtcbiAgLyplc2xpbnQgZnVuYy1uYW1lczowKi9cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbih1cmwsIGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QobWVyZ2VDb25maWcoY29uZmlnIHx8IHt9LCB7XG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICBkYXRhOiAoY29uZmlnIHx8IHt9KS5kYXRhXG4gICAgfSkpO1xuICB9O1xufSk7XG5cbnV0aWxzLmZvckVhY2goWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kV2l0aERhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG5cbiAgZnVuY3Rpb24gZ2VuZXJhdGVIVFRQTWV0aG9kKGlzRm9ybSkge1xuICAgIHJldHVybiBmdW5jdGlvbiBodHRwTWV0aG9kKHVybCwgZGF0YSwgY29uZmlnKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1lcmdlQ29uZmlnKGNvbmZpZyB8fCB7fSwge1xuICAgICAgICBtZXRob2QsXG4gICAgICAgIGhlYWRlcnM6IGlzRm9ybSA/IHtcbiAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ211bHRpcGFydC9mb3JtLWRhdGEnXG4gICAgICAgIH0gOiB7fSxcbiAgICAgICAgdXJsLFxuICAgICAgICBkYXRhXG4gICAgICB9KSk7XG4gICAgfTtcbiAgfVxuXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZ2VuZXJhdGVIVFRQTWV0aG9kKCk7XG5cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZCArICdGb3JtJ10gPSBnZW5lcmF0ZUhUVFBNZXRob2QodHJ1ZSk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgQXhpb3M7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgQ2FuY2VsZWRFcnJvciBmcm9tICcuL0NhbmNlbGVkRXJyb3IuanMnO1xuXG4vKipcbiAqIEEgYENhbmNlbFRva2VuYCBpcyBhbiBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCB0byByZXF1ZXN0IGNhbmNlbGxhdGlvbiBvZiBhbiBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXhlY3V0b3IgVGhlIGV4ZWN1dG9yIGZ1bmN0aW9uLlxuICpcbiAqIEByZXR1cm5zIHtDYW5jZWxUb2tlbn1cbiAqL1xuY2xhc3MgQ2FuY2VsVG9rZW4ge1xuICBjb25zdHJ1Y3RvcihleGVjdXRvcikge1xuICAgIGlmICh0eXBlb2YgZXhlY3V0b3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2V4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4nKTtcbiAgICB9XG5cbiAgICBsZXQgcmVzb2x2ZVByb21pc2U7XG5cbiAgICB0aGlzLnByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiBwcm9taXNlRXhlY3V0b3IocmVzb2x2ZSkge1xuICAgICAgcmVzb2x2ZVByb21pc2UgPSByZXNvbHZlO1xuICAgIH0pO1xuXG4gICAgY29uc3QgdG9rZW4gPSB0aGlzO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICB0aGlzLnByb21pc2UudGhlbihjYW5jZWwgPT4ge1xuICAgICAgaWYgKCF0b2tlbi5fbGlzdGVuZXJzKSByZXR1cm47XG5cbiAgICAgIGxldCBpID0gdG9rZW4uX2xpc3RlbmVycy5sZW5ndGg7XG5cbiAgICAgIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgICAgIHRva2VuLl9saXN0ZW5lcnNbaV0oY2FuY2VsKTtcbiAgICAgIH1cbiAgICAgIHRva2VuLl9saXN0ZW5lcnMgPSBudWxsO1xuICAgIH0pO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICB0aGlzLnByb21pc2UudGhlbiA9IG9uZnVsZmlsbGVkID0+IHtcbiAgICAgIGxldCBfcmVzb2x2ZTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgIHRva2VuLnN1YnNjcmliZShyZXNvbHZlKTtcbiAgICAgICAgX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgICAgfSkudGhlbihvbmZ1bGZpbGxlZCk7XG5cbiAgICAgIHByb21pc2UuY2FuY2VsID0gZnVuY3Rpb24gcmVqZWN0KCkge1xuICAgICAgICB0b2tlbi51bnN1YnNjcmliZShfcmVzb2x2ZSk7XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9O1xuXG4gICAgZXhlY3V0b3IoZnVuY3Rpb24gY2FuY2VsKG1lc3NhZ2UsIGNvbmZpZywgcmVxdWVzdCkge1xuICAgICAgaWYgKHRva2VuLnJlYXNvbikge1xuICAgICAgICAvLyBDYW5jZWxsYXRpb24gaGFzIGFscmVhZHkgYmVlbiByZXF1ZXN0ZWRcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0b2tlbi5yZWFzb24gPSBuZXcgQ2FuY2VsZWRFcnJvcihtZXNzYWdlLCBjb25maWcsIHJlcXVlc3QpO1xuICAgICAgcmVzb2x2ZVByb21pc2UodG9rZW4ucmVhc29uKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaHJvd3MgYSBgQ2FuY2VsZWRFcnJvcmAgaWYgY2FuY2VsbGF0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZC5cbiAgICovXG4gIHRocm93SWZSZXF1ZXN0ZWQoKSB7XG4gICAgaWYgKHRoaXMucmVhc29uKSB7XG4gICAgICB0aHJvdyB0aGlzLnJlYXNvbjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3Vic2NyaWJlIHRvIHRoZSBjYW5jZWwgc2lnbmFsXG4gICAqL1xuXG4gIHN1YnNjcmliZShsaXN0ZW5lcikge1xuICAgIGlmICh0aGlzLnJlYXNvbikge1xuICAgICAgbGlzdGVuZXIodGhpcy5yZWFzb24pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9saXN0ZW5lcnMpIHtcbiAgICAgIHRoaXMuX2xpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbGlzdGVuZXJzID0gW2xpc3RlbmVyXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVW5zdWJzY3JpYmUgZnJvbSB0aGUgY2FuY2VsIHNpZ25hbFxuICAgKi9cblxuICB1bnN1YnNjcmliZShsaXN0ZW5lcikge1xuICAgIGlmICghdGhpcy5fbGlzdGVuZXJzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fbGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMuX2xpc3RlbmVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIGEgbmV3IGBDYW5jZWxUb2tlbmAgYW5kIGEgZnVuY3Rpb24gdGhhdCwgd2hlbiBjYWxsZWQsXG4gICAqIGNhbmNlbHMgdGhlIGBDYW5jZWxUb2tlbmAuXG4gICAqL1xuICBzdGF0aWMgc291cmNlKCkge1xuICAgIGxldCBjYW5jZWw7XG4gICAgY29uc3QgdG9rZW4gPSBuZXcgQ2FuY2VsVG9rZW4oZnVuY3Rpb24gZXhlY3V0b3IoYykge1xuICAgICAgY2FuY2VsID0gYztcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgdG9rZW4sXG4gICAgICBjYW5jZWxcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENhbmNlbFRva2VuO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBTeW50YWN0aWMgc3VnYXIgZm9yIGludm9raW5nIGEgZnVuY3Rpb24gYW5kIGV4cGFuZGluZyBhbiBhcnJheSBmb3IgYXJndW1lbnRzLlxuICpcbiAqIENvbW1vbiB1c2UgY2FzZSB3b3VsZCBiZSB0byB1c2UgYEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseWAuXG4gKlxuICogIGBgYGpzXG4gKiAgZnVuY3Rpb24gZih4LCB5LCB6KSB7fVxuICogIHZhciBhcmdzID0gWzEsIDIsIDNdO1xuICogIGYuYXBwbHkobnVsbCwgYXJncyk7XG4gKiAgYGBgXG4gKlxuICogV2l0aCBgc3ByZWFkYCB0aGlzIGV4YW1wbGUgY2FuIGJlIHJlLXdyaXR0ZW4uXG4gKlxuICogIGBgYGpzXG4gKiAgc3ByZWFkKGZ1bmN0aW9uKHgsIHksIHopIHt9KShbMSwgMiwgM10pO1xuICogIGBgYFxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKlxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzcHJlYWQoY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoYXJyKSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFycik7XG4gIH07XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBwYXlsb2FkIGlzIGFuIGVycm9yIHRocm93biBieSBBeGlvc1xuICpcbiAqIEBwYXJhbSB7Kn0gcGF5bG9hZCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBwYXlsb2FkIGlzIGFuIGVycm9yIHRocm93biBieSBBeGlvcywgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzQXhpb3NFcnJvcihwYXlsb2FkKSB7XG4gIHJldHVybiB1dGlscy5pc09iamVjdChwYXlsb2FkKSAmJiAocGF5bG9hZC5pc0F4aW9zRXJyb3IgPT09IHRydWUpO1xufVxuIiwgImNvbnN0IEh0dHBTdGF0dXNDb2RlID0ge1xuICBDb250aW51ZTogMTAwLFxuICBTd2l0Y2hpbmdQcm90b2NvbHM6IDEwMSxcbiAgUHJvY2Vzc2luZzogMTAyLFxuICBFYXJseUhpbnRzOiAxMDMsXG4gIE9rOiAyMDAsXG4gIENyZWF0ZWQ6IDIwMSxcbiAgQWNjZXB0ZWQ6IDIwMixcbiAgTm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uOiAyMDMsXG4gIE5vQ29udGVudDogMjA0LFxuICBSZXNldENvbnRlbnQ6IDIwNSxcbiAgUGFydGlhbENvbnRlbnQ6IDIwNixcbiAgTXVsdGlTdGF0dXM6IDIwNyxcbiAgQWxyZWFkeVJlcG9ydGVkOiAyMDgsXG4gIEltVXNlZDogMjI2LFxuICBNdWx0aXBsZUNob2ljZXM6IDMwMCxcbiAgTW92ZWRQZXJtYW5lbnRseTogMzAxLFxuICBGb3VuZDogMzAyLFxuICBTZWVPdGhlcjogMzAzLFxuICBOb3RNb2RpZmllZDogMzA0LFxuICBVc2VQcm94eTogMzA1LFxuICBVbnVzZWQ6IDMwNixcbiAgVGVtcG9yYXJ5UmVkaXJlY3Q6IDMwNyxcbiAgUGVybWFuZW50UmVkaXJlY3Q6IDMwOCxcbiAgQmFkUmVxdWVzdDogNDAwLFxuICBVbmF1dGhvcml6ZWQ6IDQwMSxcbiAgUGF5bWVudFJlcXVpcmVkOiA0MDIsXG4gIEZvcmJpZGRlbjogNDAzLFxuICBOb3RGb3VuZDogNDA0LFxuICBNZXRob2ROb3RBbGxvd2VkOiA0MDUsXG4gIE5vdEFjY2VwdGFibGU6IDQwNixcbiAgUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOiA0MDcsXG4gIFJlcXVlc3RUaW1lb3V0OiA0MDgsXG4gIENvbmZsaWN0OiA0MDksXG4gIEdvbmU6IDQxMCxcbiAgTGVuZ3RoUmVxdWlyZWQ6IDQxMSxcbiAgUHJlY29uZGl0aW9uRmFpbGVkOiA0MTIsXG4gIFBheWxvYWRUb29MYXJnZTogNDEzLFxuICBVcmlUb29Mb25nOiA0MTQsXG4gIFVuc3VwcG9ydGVkTWVkaWFUeXBlOiA0MTUsXG4gIFJhbmdlTm90U2F0aXNmaWFibGU6IDQxNixcbiAgRXhwZWN0YXRpb25GYWlsZWQ6IDQxNyxcbiAgSW1BVGVhcG90OiA0MTgsXG4gIE1pc2RpcmVjdGVkUmVxdWVzdDogNDIxLFxuICBVbnByb2Nlc3NhYmxlRW50aXR5OiA0MjIsXG4gIExvY2tlZDogNDIzLFxuICBGYWlsZWREZXBlbmRlbmN5OiA0MjQsXG4gIFRvb0Vhcmx5OiA0MjUsXG4gIFVwZ3JhZGVSZXF1aXJlZDogNDI2LFxuICBQcmVjb25kaXRpb25SZXF1aXJlZDogNDI4LFxuICBUb29NYW55UmVxdWVzdHM6IDQyOSxcbiAgUmVxdWVzdEhlYWRlckZpZWxkc1Rvb0xhcmdlOiA0MzEsXG4gIFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOiA0NTEsXG4gIEludGVybmFsU2VydmVyRXJyb3I6IDUwMCxcbiAgTm90SW1wbGVtZW50ZWQ6IDUwMSxcbiAgQmFkR2F0ZXdheTogNTAyLFxuICBTZXJ2aWNlVW5hdmFpbGFibGU6IDUwMyxcbiAgR2F0ZXdheVRpbWVvdXQ6IDUwNCxcbiAgSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6IDUwNSxcbiAgVmFyaWFudEFsc29OZWdvdGlhdGVzOiA1MDYsXG4gIEluc3VmZmljaWVudFN0b3JhZ2U6IDUwNyxcbiAgTG9vcERldGVjdGVkOiA1MDgsXG4gIE5vdEV4dGVuZGVkOiA1MTAsXG4gIE5ldHdvcmtBdXRoZW50aWNhdGlvblJlcXVpcmVkOiA1MTEsXG59O1xuXG5PYmplY3QuZW50cmllcyhIdHRwU3RhdHVzQ29kZSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gIEh0dHBTdGF0dXNDb2RlW3ZhbHVlXSA9IGtleTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBIdHRwU3RhdHVzQ29kZTtcbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzLmpzJztcbmltcG9ydCBiaW5kIGZyb20gJy4vaGVscGVycy9iaW5kLmpzJztcbmltcG9ydCBBeGlvcyBmcm9tICcuL2NvcmUvQXhpb3MuanMnO1xuaW1wb3J0IG1lcmdlQ29uZmlnIGZyb20gJy4vY29yZS9tZXJnZUNvbmZpZy5qcyc7XG5pbXBvcnQgZGVmYXVsdHMgZnJvbSAnLi9kZWZhdWx0cy9pbmRleC5qcyc7XG5pbXBvcnQgZm9ybURhdGFUb0pTT04gZnJvbSAnLi9oZWxwZXJzL2Zvcm1EYXRhVG9KU09OLmpzJztcbmltcG9ydCBDYW5jZWxlZEVycm9yIGZyb20gJy4vY2FuY2VsL0NhbmNlbGVkRXJyb3IuanMnO1xuaW1wb3J0IENhbmNlbFRva2VuIGZyb20gJy4vY2FuY2VsL0NhbmNlbFRva2VuLmpzJztcbmltcG9ydCBpc0NhbmNlbCBmcm9tICcuL2NhbmNlbC9pc0NhbmNlbC5qcyc7XG5pbXBvcnQge1ZFUlNJT059IGZyb20gJy4vZW52L2RhdGEuanMnO1xuaW1wb3J0IHRvRm9ybURhdGEgZnJvbSAnLi9oZWxwZXJzL3RvRm9ybURhdGEuanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuaW1wb3J0IHNwcmVhZCBmcm9tICcuL2hlbHBlcnMvc3ByZWFkLmpzJztcbmltcG9ydCBpc0F4aW9zRXJyb3IgZnJvbSAnLi9oZWxwZXJzL2lzQXhpb3NFcnJvci5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gXCIuL2NvcmUvQXhpb3NIZWFkZXJzLmpzXCI7XG5pbXBvcnQgYWRhcHRlcnMgZnJvbSAnLi9hZGFwdGVycy9hZGFwdGVycy5qcyc7XG5pbXBvcnQgSHR0cFN0YXR1c0NvZGUgZnJvbSAnLi9oZWxwZXJzL0h0dHBTdGF0dXNDb2RlLmpzJztcblxuLyoqXG4gKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZGVmYXVsdENvbmZpZyBUaGUgZGVmYXVsdCBjb25maWcgZm9yIHRoZSBpbnN0YW5jZVxuICpcbiAqIEByZXR1cm5zIHtBeGlvc30gQSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2UoZGVmYXVsdENvbmZpZykge1xuICBjb25zdCBjb250ZXh0ID0gbmV3IEF4aW9zKGRlZmF1bHRDb25maWcpO1xuICBjb25zdCBpbnN0YW5jZSA9IGJpbmQoQXhpb3MucHJvdG90eXBlLnJlcXVlc3QsIGNvbnRleHQpO1xuXG4gIC8vIENvcHkgYXhpb3MucHJvdG90eXBlIHRvIGluc3RhbmNlXG4gIHV0aWxzLmV4dGVuZChpbnN0YW5jZSwgQXhpb3MucHJvdG90eXBlLCBjb250ZXh0LCB7YWxsT3duS2V5czogdHJ1ZX0pO1xuXG4gIC8vIENvcHkgY29udGV4dCB0byBpbnN0YW5jZVxuICB1dGlscy5leHRlbmQoaW5zdGFuY2UsIGNvbnRleHQsIG51bGwsIHthbGxPd25LZXlzOiB0cnVlfSk7XG5cbiAgLy8gRmFjdG9yeSBmb3IgY3JlYXRpbmcgbmV3IGluc3RhbmNlc1xuICBpbnN0YW5jZS5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoaW5zdGFuY2VDb25maWcpIHtcbiAgICByZXR1cm4gY3JlYXRlSW5zdGFuY2UobWVyZ2VDb25maWcoZGVmYXVsdENvbmZpZywgaW5zdGFuY2VDb25maWcpKTtcbiAgfTtcblxuICByZXR1cm4gaW5zdGFuY2U7XG59XG5cbi8vIENyZWF0ZSB0aGUgZGVmYXVsdCBpbnN0YW5jZSB0byBiZSBleHBvcnRlZFxuY29uc3QgYXhpb3MgPSBjcmVhdGVJbnN0YW5jZShkZWZhdWx0cyk7XG5cbi8vIEV4cG9zZSBBeGlvcyBjbGFzcyB0byBhbGxvdyBjbGFzcyBpbmhlcml0YW5jZVxuYXhpb3MuQXhpb3MgPSBBeGlvcztcblxuLy8gRXhwb3NlIENhbmNlbCAmIENhbmNlbFRva2VuXG5heGlvcy5DYW5jZWxlZEVycm9yID0gQ2FuY2VsZWRFcnJvcjtcbmF4aW9zLkNhbmNlbFRva2VuID0gQ2FuY2VsVG9rZW47XG5heGlvcy5pc0NhbmNlbCA9IGlzQ2FuY2VsO1xuYXhpb3MuVkVSU0lPTiA9IFZFUlNJT047XG5heGlvcy50b0Zvcm1EYXRhID0gdG9Gb3JtRGF0YTtcblxuLy8gRXhwb3NlIEF4aW9zRXJyb3IgY2xhc3NcbmF4aW9zLkF4aW9zRXJyb3IgPSBBeGlvc0Vycm9yO1xuXG4vLyBhbGlhcyBmb3IgQ2FuY2VsZWRFcnJvciBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuYXhpb3MuQ2FuY2VsID0gYXhpb3MuQ2FuY2VsZWRFcnJvcjtcblxuLy8gRXhwb3NlIGFsbC9zcHJlYWRcbmF4aW9zLmFsbCA9IGZ1bmN0aW9uIGFsbChwcm9taXNlcykge1xuICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xufTtcblxuYXhpb3Muc3ByZWFkID0gc3ByZWFkO1xuXG4vLyBFeHBvc2UgaXNBeGlvc0Vycm9yXG5heGlvcy5pc0F4aW9zRXJyb3IgPSBpc0F4aW9zRXJyb3I7XG5cbi8vIEV4cG9zZSBtZXJnZUNvbmZpZ1xuYXhpb3MubWVyZ2VDb25maWcgPSBtZXJnZUNvbmZpZztcblxuYXhpb3MuQXhpb3NIZWFkZXJzID0gQXhpb3NIZWFkZXJzO1xuXG5heGlvcy5mb3JtVG9KU09OID0gdGhpbmcgPT4gZm9ybURhdGFUb0pTT04odXRpbHMuaXNIVE1MRm9ybSh0aGluZykgPyBuZXcgRm9ybURhdGEodGhpbmcpIDogdGhpbmcpO1xuXG5heGlvcy5nZXRBZGFwdGVyID0gYWRhcHRlcnMuZ2V0QWRhcHRlcjtcblxuYXhpb3MuSHR0cFN0YXR1c0NvZGUgPSBIdHRwU3RhdHVzQ29kZTtcblxuYXhpb3MuZGVmYXVsdCA9IGF4aW9zO1xuXG4vLyB0aGlzIG1vZHVsZSBzaG91bGQgb25seSBoYXZlIGEgZGVmYXVsdCBleHBvcnRcbmV4cG9ydCBkZWZhdWx0IGF4aW9zXG4iLCAiaW1wb3J0IGF4aW9zIGZyb20gJy4vbGliL2F4aW9zLmpzJztcblxuLy8gVGhpcyBtb2R1bGUgaXMgaW50ZW5kZWQgdG8gdW53cmFwIEF4aW9zIGRlZmF1bHQgZXhwb3J0IGFzIG5hbWVkLlxuLy8gS2VlcCB0b3AtbGV2ZWwgZXhwb3J0IHNhbWUgd2l0aCBzdGF0aWMgcHJvcGVydGllc1xuLy8gc28gdGhhdCBpdCBjYW4ga2VlcCBzYW1lIHdpdGggZXMgbW9kdWxlIG9yIGNqc1xuY29uc3Qge1xuICBBeGlvcyxcbiAgQXhpb3NFcnJvcixcbiAgQ2FuY2VsZWRFcnJvcixcbiAgaXNDYW5jZWwsXG4gIENhbmNlbFRva2VuLFxuICBWRVJTSU9OLFxuICBhbGwsXG4gIENhbmNlbCxcbiAgaXNBeGlvc0Vycm9yLFxuICBzcHJlYWQsXG4gIHRvRm9ybURhdGEsXG4gIEF4aW9zSGVhZGVycyxcbiAgSHR0cFN0YXR1c0NvZGUsXG4gIGZvcm1Ub0pTT04sXG4gIGdldEFkYXB0ZXIsXG4gIG1lcmdlQ29uZmlnXG59ID0gYXhpb3M7XG5cbmV4cG9ydCB7XG4gIGF4aW9zIGFzIGRlZmF1bHQsXG4gIEF4aW9zLFxuICBBeGlvc0Vycm9yLFxuICBDYW5jZWxlZEVycm9yLFxuICBpc0NhbmNlbCxcbiAgQ2FuY2VsVG9rZW4sXG4gIFZFUlNJT04sXG4gIGFsbCxcbiAgQ2FuY2VsLFxuICBpc0F4aW9zRXJyb3IsXG4gIHNwcmVhZCxcbiAgdG9Gb3JtRGF0YSxcbiAgQXhpb3NIZWFkZXJzLFxuICBIdHRwU3RhdHVzQ29kZSxcbiAgZm9ybVRvSlNPTixcbiAgZ2V0QWRhcHRlcixcbiAgbWVyZ2VDb25maWdcbn1cbiIsICJpbXBvcnQge0V1aUxpbmtDb2xvcn0gZnJvbSBcIkBlbGFzdGljL2V1aS9zcmMvY29tcG9uZW50cy9saW5rL2xpbmtcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGFzQXJyYXk8VD4ob2JqOiBUIHwgVFtdKTogVFtdIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfSBlbHNlIGlmIChvYmopIHtcbiAgICAgICAgcmV0dXJuIFtvYmpdO1xuICAgIH1cbiAgICByZXR1cm4gW10gYXMgVFtdO1xufVxuXG5jb25zdCBERUZBVUxUX1VTRV9MRUdBQ1kgPSB0cnVlO1xuLyoqXG4gKiBSZXR1cm5zIGB1c2VMZWdhY3lgIGlmIHVuZGVmaW5lZCwgb3RoZXJ3aXNlIHJldHVybnMgZGVmYXVsdCB2YWx1ZSBmb3IgdXNlTGVnYWN5XG4gKiBAcGFyYW0gdXNlTGVnYWN5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRVc2VMZWdhY3kodXNlTGVnYWN5PzogYm9vbGVhbikgOiBib29sZWFuIHtcbiAgICByZXR1cm4gKHVzZUxlZ2FjeSAhPT0gdW5kZWZpbmVkKSA/IHVzZUxlZ2FjeSA6IERFRkFVTFRfVVNFX0xFR0FDWTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHtAbGluayB0eXBlfS4gSWYge0BsaW5rIHR5cGV9IGVxdWFscyAndGVybScsICdjbGFzcycgZ2V0cyByZXR1cm5lZCBpbnN0ZWFkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW50aXR5VHlwZU5hbWUodHlwZTogc3RyaW5nKSA6IHN0cmluZyB7XG4gICAgcmV0dXJuIHR5cGUgPT09IFwidGVybVwiID8gXCJjbGFzc1wiIDogdHlwZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhcGl0YWxpemUoc3RyOiBzdHJpbmcpIDogc3RyaW5nIHtcbiAgICByZXR1cm4gc3RyLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3RyLnNsaWNlKDEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVDYW1lbENhc2Uoc3RyOiBzdHJpbmcpIDogc3RyaW5nIHtcbiAgICByZXR1cm4gY2FwaXRhbGl6ZShzdHIpLnNwbGl0KC8oPz1bQS1aXVthLXpdKS8pLmpvaW4oXCIgXCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVVbmRlcnNjb3JlKHN0cjogc3RyaW5nKSA6IHN0cmluZyB7XG4gICAgcmV0dXJuIGNhcGl0YWxpemUoc3RyKS5yZXBsYWNlKFwiX1wiLCBcIiBcIik7XG59XG5cbi8qKlxuICogUmV0dXJucyB0cmltbWVkIGFwaSAob21pdHMgL2FwaS92MiBhdCB0aGUgZW5kKVxuICogQHBhcmFtIGFwaVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RnJvbnRFbmRBcGkoYXBpOiBzdHJpbmcpIDogc3RyaW5nIHtcbiAgICByZXR1cm4gYXBpLnJlcGxhY2UoXCIvYXBpL1wiLCBcIlwiKS5yZXBsYWNlKFwiL2FwaVwiLCBcIlwiKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIFwiL29udG9sb2dpZXMve29udG9sb2d5SWR9L3tlbnRpdHlUeXBlfT9pcmk9e3Rlcm1Jcml9XCIsIHdoaWNoIGNhbiBiZSBjb25jYXRlbmF0ZWQgd2l0aCBmcm9udGVuZEFwaSB0byBnZXQgZnVsbCBsaW5rXG4gKiBAcGFyYW0gb250b2xvZ3lJZCB0aGUgZW50aXRpZXMnIG9udG9sb2d5SWRcbiAqIEBwYXJhbSB0ZXJtSXJpIHRoZSBlbnRpdGllcycgaXJpXG4gKiBAcGFyYW0gZW50aXR5VHlwZUFycmF5IHRoZSBlbnRpdGllcycgdHlwZSBhcnJheSAoZnJvbSBhcGkgSlNPTiBsaW5rZWRFbnRpdGllcylcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRlcm1Jbk9udG9sb2d5U3VmZml4KG9udG9sb2d5SWQ6IHN0cmluZywgdGVybUlyaTogc3RyaW5nLCBlbnRpdHlUeXBlQXJyYXk6IHN0cmluZ1tdKSA6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiL29udG9sb2dpZXMvXCIgKyBvbnRvbG9neUlkICsgXCIvXCIgKyBwbHVyYWxpemVUeXBlKGVudGl0eVR5cGVBcnJheSkgKyBcIj9pcmk9XCIgKyB0ZXJtSXJpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGx1cmFsaXplVHlwZSh0eXBlQXJyYXk6IHN0cmluZ1tdIHwgc3RyaW5nLCB1c2VMZWdhY3k/OiBib29sZWFuKSA6IFwidGVybXNcIiB8IFwiY2xhc3Nlc1wiIHwgXCJwcm9wZXJ0aWVzXCIgfCBcImluZGl2aWR1YWxzXCIgfCB1bmRlZmluZWQge1xuICAgIGZvcihjb25zdCB0eXBlIG9mIGFzQXJyYXkodHlwZUFycmF5KSkge1xuICAgICAgICBzd2l0Y2ggKHR5cGUpe1xuICAgICAgICAgICAgY2FzZSBcImNsYXNzXCI6IGNhc2UgXCJ0ZXJtXCI6IC8vIGFsbG93IGJvdGhcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0VXNlTGVnYWN5KHVzZUxlZ2FjeSkgPyBcInRlcm1zXCIgOiBcImNsYXNzZXNcIjtcbiAgICAgICAgICAgIGNhc2UgXCJwcm9wZXJ0eVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcInByb3BlcnRpZXNcIlxuICAgICAgICAgICAgY2FzZSBcImluZGl2aWR1YWxcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJpbmRpdmlkdWFsc1wiXG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgcmFuZG9tIHN0cmluZyB1c2VkIG1haW5seSBmb3IgY29tcG9uZW50IGtleXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByYW5kb21TdHJpbmcoKSB7XG4gICAgcmV0dXJuIChNYXRoLnJhbmRvbSgpICogTWF0aC5wb3coMiwgNTQpKS50b1N0cmluZygzNik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0hleENvbG9yKHN0cjogc3RyaW5nKSA6IGJvb2xlYW4ge1xuICAgIHJldHVybiAvXiNbMC05QS1GXXs2fSQvaS50ZXN0KHN0cik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1JnYkNvbG9yKHN0cjogc3RyaW5nKSA6IGJvb2xlYW4ge1xuICAgIHJldHVybiAvXihyZ2J8aHNsKShhPylbKF1cXHMqKFtcXGQuXStcXHMqJT8pXFxzKixcXHMqKFtcXGQuXStcXHMqJT8pXFxzKixcXHMqKFtcXGQuXStcXHMqJT8pXFxzKig/OixcXHMqKFtcXGQuXSspXFxzKik/WyldJC9pLnRlc3Qoc3RyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRXVpTGlua0NvbG9yKHN0cjogc3RyaW5nKSA6IHN0ciBpcyBFdWlMaW5rQ29sb3Ige1xuICAgIHJldHVybiBbXCJwcmltYXJ5XCIsIFwic3ViZHVlZFwiLCBcInN1Y2Nlc3NcIiwgXCJhY2NlbnRcIiwgXCJkYW5nZXJcIiwgXCJ3YXJuaW5nXCIsIFwidGV4dFwiLCBcImdob3N0XCJdLmluY2x1ZGVzKHN0cik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkoZXJyb3I6IGFueSwgbWVzc2FnZVBsYWNlaG9sZGVyID0gXCJpbmZvcm1hdGlvblwiKTogc3RyaW5nIHtcbiAgICBjb25zdCBlcnJvcl9tc2cgOiBzdHJpbmcgPSBlcnJvci5tZXNzYWdlO1xuICAgIGlmKGVycm9yX21zZyA9PT0gKFwiUmVzcG9uc2UgY29udGFpbnMgMCBlbGVtZW50c1wiKSkge1xuICAgICAgICByZXR1cm4gXCJObyBlbGVtZW50cyBmb3VuZFwiO1xuICAgIH1cbiAgICBlbHNlIHJldHVybiBgTm8gJHttZXNzYWdlUGxhY2Vob2xkZXJ9IGF2YWlsYWJsZWA7XG59IiwgImV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlaWZpZWQ8VD4ge1xuICB2YWx1ZTogVDtcbiAgYXhpb21zOiBhbnlbXSB8IG51bGw7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcih2YWx1ZTogVCwgYXhpb21zOiBhbnlbXSB8IG51bGwpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5heGlvbXMgPSBheGlvbXM7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGZyb21Kc29uPFQ+KGpzb25Ob2RlOiBhbnkpOiBSZWlmaWVkPFQ+W10ge1xuICAgIGlmICghanNvbk5vZGUpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoanNvbk5vZGUpKSB7XG4gICAgICBqc29uTm9kZSA9IFtqc29uTm9kZV07XG4gICAgfVxuXG4gICAgcmV0dXJuIGpzb25Ob2RlLm1hcCgodmFsdWU6IGFueSkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgQXJyYXkuaXNBcnJheSh2YWx1ZS50eXBlKSAmJlxuICAgICAgICB2YWx1ZS50eXBlLmluZGV4T2YoXCJyZWlmaWNhdGlvblwiKSAhPT0gLTFcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gbmV3IFJlaWZpZWQ8VD4odmFsdWUudmFsdWUsIHZhbHVlLmF4aW9tcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbmV3IFJlaWZpZWQ8VD4odmFsdWUsIG51bGwpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgaGFzTWV0YWRhdGEoKSB7XG4gICAgcmV0dXJuIHRoaXMuYXhpb21zICE9IG51bGw7XG4gIH1cblxuICAvLyBDb21iaW5lIGFsbCBvZiB0aGUgYXhpb21zIGludG8gb25lIG1ldGFkYXRhIG9iamVjdCBmb3IgdGhlIHByb3BlcnR5LlxuICAvL1xuICAvLyBub3RlOiBUaGlzIG1lYW5zIHRoYXQgaWYgdGhlIHNhbWUgcHJvcGVydHkgaXMgcmVpZmllZCBtdWx0aXBsZSB0aW1lcyB3aXRoXG4gIC8vIGRpZmZlcmVudCBtZXRhZGF0YSwgaXQgd2lsbCBhbGwgYmUgY29tYmluZWQgaW4gdGhlIFVJLiBXaGV0aGVyIHRoaXMgaXNcbiAgLy8gdGhlIGRlc2lyZWQgYmVoYXZpb3VyIGlzIFRCRC5cbiAgLy9cbiAgZ2V0TWV0YWRhdGEoKTogYW55IHwgbnVsbCB7XG4gICAgaWYgKCF0aGlzLmF4aW9tcykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcHJvcGVydGllczogYW55ID0ge307XG5cbiAgICBmb3IgKGNvbnN0IGF4aW9tIG9mIHRoaXMuYXhpb21zKSB7XG4gICAgICBmb3IgKGNvbnN0IGsgb2YgT2JqZWN0LmtleXMoYXhpb20pKSB7XG4gICAgICAgIGNvbnN0IHYgPSBheGlvbVtrXTtcbiAgICAgICAgY29uc3QgZXhpc3Rpbmc6IGFueVtdIHwgdW5kZWZpbmVkID0gcHJvcGVydGllc1trXTtcbiAgICAgICAgaWYgKGV4aXN0aW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBleGlzdGluZy5wdXNoKHYpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByb3BlcnRpZXNba10gPSBbdl07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcHJvcGVydGllcztcbiAgfVxufVxuIiwgImltcG9ydCBSZWlmaWVkIGZyb20gXCIuL1JlaWZpZWRcIlxuXG5leHBvcnQgaW50ZXJmYWNlIExpbmtlZEVudGl0eSB7XG5cdGRlZmluZWRCeT86c3RyaW5nW11cblx0aXJpPzpzdHJpbmdcblx0dXJsPzpzdHJpbmdcblx0bnVtQXBwZWFyc0luOnN0cmluZ1xuXHRoYXNMb2NhbERlZmluaXRpb246Ym9vbGVhblxuXHRsYWJlbDpzdHJpbmd8c3RyaW5nW11cblx0dHlwZTpzdHJpbmdbXVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMaW5rZWRFbnRpdGllcyB7XG5cblx0bGlua2VkRW50aXRpZXM6eyBba2V5OnN0cmluZ106TGlua2VkRW50aXR5IH1cblxuXHRjb25zdHJ1Y3RvcihsaW5rZWRFbnRpdGllczphbnkpIHtcblx0XHRpZihsaW5rZWRFbnRpdGllcylcblx0XHRcdHRoaXMubGlua2VkRW50aXRpZXMgPSB7Li4ubGlua2VkRW50aXRpZXN9XG5cdFx0ZWxzZVxuXHRcdFx0dGhpcy5saW5rZWRFbnRpdGllcyA9IHt9XG5cdH1cblxuXHRtZXJnZVdpdGgobGlua2VkRW50aXRpZXM6YW55KTpMaW5rZWRFbnRpdGllcyB7XG5cdFx0aWYobGlua2VkRW50aXRpZXMpXG5cdFx0XHRyZXR1cm4gbmV3IExpbmtlZEVudGl0aWVzKHsgLi4udGhpcy5saW5rZWRFbnRpdGllcywgbGlua2VkRW50aXRpZXMgfSlcblx0XHRlbHNlXG5cdFx0XHRyZXR1cm4gbmV3IExpbmtlZEVudGl0aWVzKHsgLi4udGhpcy5saW5rZWRFbnRpdGllcyB9KVxuXHR9XG5cblx0Z2V0TGFiZWxGb3JJcmkoaXJpOnN0cmluZyk6c3RyaW5nfHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgbGlua2VkRW50aXR5ID0gdGhpcy5saW5rZWRFbnRpdGllc1tpcmldXG5cblx0XHRpZihsaW5rZWRFbnRpdHkpIHtcblx0XHRcdGNvbnN0IGxhYmVsID0gUmVpZmllZC5mcm9tSnNvbjxzdHJpbmc+KCBsaW5rZWRFbnRpdHkubGFiZWwgKVxuXHRcdFx0aWYobGFiZWwgJiYgbGFiZWwubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRyZXR1cm4gbGFiZWxbMF0udmFsdWVcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRnZXQoaXJpOnN0cmluZyk6TGlua2VkRW50aXR5fHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMubGlua2VkRW50aXRpZXNbaXJpXVxuXHR9XG59XG4iLCAiaW1wb3J0IHtUaGluZ30gZnJvbSBcIi4uL2ludGVyZmFjZXNcIjtcblxuaW1wb3J0IExpbmtlZEVudGl0aWVzIGZyb20gXCIuLi9MaW5rZWRFbnRpdGllc1wiO1xuaW1wb3J0IFJlaWZpZWQgZnJvbSBcIi4uL1JlaWZpZWRcIjtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE9MUzNUaGluZyBpbXBsZW1lbnRzIFRoaW5nIHtcbiAgcHJvcGVydGllczogYW55O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BlcnRpZXM6IGFueSkge1xuICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG4gIH1cblxuICBnZXRMYWJlbCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJsYWJlbFwiXTtcbiAgfVxuXG4gIC8vIFRPRE86IElzIGN1cmllIC8gb2JvX2lkIG1lYW50PyBcImlkXCIgb25seSBleGlzdHMgaW4gc3RhbmRhcmQ/IChodHRwOi8vd3d3LmViaS5hYy51ay9vbHM0L2FwaS9vbnRvbG9naWVzL2Fkby9wcm9wZXJ0aWVzP2lyaT1odHRwOi8vcHVybC5vYm9saWJyYXJ5Lm9yZy9vYm8vUk9fMDAwMjE3NSlcbiAgZ2V0SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaWRcIl07XG4gIH1cblxuICBnZXRJcmkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaXJpXCJdO1xuICB9XG5cbiAgLy8gc3RhbmRhcmQgcmVzcG9uc2VzIGRvbid0IGhhdmUgXCJ0eXBlXCIga2V5IC0+IGltcGxlbWVudCBzdGF0aWNhbGx5IGluIHN1YnR5cGVzXG4gIGFic3RyYWN0IGdldFR5cGUoKTogXCJvbnRvbG9neVwiIHwgXCJjbGFzc1wiIHwgXCJwcm9wZXJ0eVwiIHwgXCJpbmRpdmlkdWFsXCI7XG5cbiAgLy8gc3RhbmRhcmQgcmVzcG9uc2VzIGRvbid0IGhhdmUgXCJ0eXBlXCIga2V5IC0+IGltcGxlbWVudCBzdGF0aWNhbGx5IGluIHN1YnR5cGVzXG4gIGFic3RyYWN0IGdldFR5cGVQbHVyYWwoKTogXCJvbnRvbG9naWVzXCIgfCBcImNsYXNzZXNcIiB8IFwicHJvcGVydGllc1wiIHwgXCJpbmRpdmlkdWFsc1wiO1xuXG4gIC8vIG5vdCBhdmFpbGFibGUgaW4gc3RhbmRhcmQgcmVzcG9uc2VzXG4gIGdldFJkZlR5cGVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBnZXROYW1lKCk6IHN0cmluZyB7XG5cdHJldHVybiB0aGlzLmdldE5hbWVzKClbMF07XG4gIH1cblxuICAvLyBoYXMgYWRkaXRpb25hbCBrZXkgXCJzaG9ydGhhbmRcIj8gKGh0dHA6Ly93d3cuZWJpLmFjLnVrL29sczQvYXBpL29udG9sb2dpZXMvYWRvL3Byb3BlcnRpZXM/aXJpPWh0dHA6Ly9wdXJsLm9ib2xpYnJhcnkub3JnL29iby9ST18wMDAyMTc1KVxuICBnZXROYW1lcygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgbGFiZWxzID0gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wibGFiZWxcIl1cbiAgICApO1xuICAgIGlmIChsYWJlbHMgJiYgbGFiZWxzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBsYWJlbHMubWFwKGxhYmVsID0+IGxhYmVsLnZhbHVlKVxuICAgIH1cbiAgICByZXR1cm4gW3RoaXMuZ2V0SXJpKCldO1xuICB9XG5cbiAgZ2V0RGVzY3JpcHRpb24oKTogc3RyaW5nIHtcbiAgICBjb25zdCBkZWZpbml0aW9uID0gUmVpZmllZC5mcm9tSnNvbjxhbnk+KHRoaXMucHJvcGVydGllc1tcImRlc2NyaXB0aW9uXCJdKTtcbiAgICBpZiAoZGVmaW5pdGlvbiAmJiBkZWZpbml0aW9uLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBkZWZpbml0aW9uLm1hcCgoZGVmKSA9PiBkZWYudmFsdWUgfHwgXCJcIikuam9pbihcIiBcIik7XG4gICAgfVxuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgZ2V0T250b2xvZ3lJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJvbnRvbG9neV9uYW1lXCJdO1xuICB9XG5cbiAgLy8gVE9ETzogbm90IGFwcGxpY2FibGUgLyBuZWNlc3NhcnkgaW4gc3RhbmRhcmQgYXMgdGhlcmUgYXJlIG5vIGxpbmtlZCBlbnRpdGllc1xuICBnZXRMYWJlbEZvcklyaShpZDogc3RyaW5nKSB7XG4gICAgY29uc3QgbGlua2VkRW50aXRpZXMgPSB0aGlzLnByb3BlcnRpZXNbXCJsaW5rZWRFbnRpdGllc1wiXTtcbiAgICBpZiAobGlua2VkRW50aXRpZXMpIHtcbiAgICAgIGNvbnN0IGxhYmVsOlJlaWZpZWQ8c3RyaW5nPltdID0gUmVpZmllZC5mcm9tSnNvbjxzdHJpbmc+KCBsaW5rZWRFbnRpdGllc1tpZF0/LmxhYmVsICk7XG4gICAgICByZXR1cm4gbGFiZWxbMF0/LnZhbHVlIHx8IGlkXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBpZDtcbiAgICB9XG4gIH1cblxuICBhYnN0cmFjdCBnZXRBbm5vdGF0aW9uUHJlZGljYXRlcygpOiBzdHJpbmdbXTtcbiAgYWJzdHJhY3QgZ2V0QW5ub3RhdGlvblRpdGxlQnlJZChpZDogc3RyaW5nKTogc3RyaW5nO1xuICBhYnN0cmFjdCBnZXRBbm5vdGF0aW9uQnlJZChpZDogc3RyaW5nKTpSZWlmaWVkPGFueT5bXTtcblxuICAvLyBUT0RPOiBub3QgYXBwbGljYWJsZSAvIG5lY2Vzc2FyeSBpbiBzdGFuZGFyZFxuICBnZXRMaW5rZWRFbnRpdGllcygpOiBMaW5rZWRFbnRpdGllcyB7XG4gICAgcmV0dXJuIG5ldyBMaW5rZWRFbnRpdGllcyh0aGlzLnByb3BlcnRpZXNbXCJsaW5rZWRFbnRpdGllc1wiXSB8fCB7fSk7XG4gIH1cbn1cbiIsICJpbXBvcnQge0VudGl0eX0gZnJvbSBcIi4uL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7T0xTM1RoaW5nfSBmcm9tIFwiLi9PTFMzVGhpbmdcIjtcblxuaW1wb3J0IFJlaWZpZWQgZnJvbSBcIi4uL1JlaWZpZWRcIjtcblxuaW1wb3J0IHthc0FycmF5LCBkZVVuZGVyc2NvcmV9IGZyb20gXCIuLi8uLi9hcHAvdXRpbFwiO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgT0xTM0VudGl0eSBleHRlbmRzIE9MUzNUaGluZyBpbXBsZW1lbnRzIEVudGl0eXtcbiAgYWJzdHJhY3QgZ2V0UGFyZW50cygpOiBSZWlmaWVkPGFueT5bXTtcbiAgYWJzdHJhY3QgZ2V0U3VwZXJFbnRpdGllcygpOiBSZWlmaWVkPGFueT5bXTtcbiAgYWJzdHJhY3QgZ2V0RXF1aXZhbGVudHMoKTogUmVpZmllZDxhbnk+W107XG5cbiAgaXNDYW5vbmljYWwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImlzX2RlZmluaW5nX29udG9sb2d5XCJdID09PSB0cnVlO1xuICB9XG5cbiAgLy8gVE9ETzogZG9lcyBub3Qgc2VlbSB0byBvY2N1ciBpbiBzdGFuZGFyZCAoaHR0cDovL3d3dy5lYmkuYWMudWsvb2xzNC9hcGkvdjIvZW50aXRpZXM/aXJpPWh0dHA6Ly9wdXJsLm9ib2xpYnJhcnkub3JnL29iby9GT09ET05fMDAwMDQ0NzQpXG4gIC8vICAgICAgIHYyIGhhcyBkZXByZWNhdGVkIGluZm9ybWF0aW9uLCBzdGFuZGFyZCBoYXMgbm90XG4gIGlzRGVwcmVjYXRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjZGVwcmVjYXRlZFwiXSA9PT0gXCJ0cnVlXCJcbiAgICApO1xuICB9XG5cbiAgZ2V0RGVwcmVjYXRpb25WZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgLy8gb25seSBzdXBwb3J0cyBFRk8gZm9yIG5vd1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LmViaS5hYy51ay9lZm8vb2Jzb2xldGVkX2luX3ZlcnNpb25cIl07XG4gIH1cblxuICBnZXREZXByZWNhdGlvblJlYXNvbigpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly9wdXJsLm9ib2xpYnJhcnkub3JnL29iby9JQU9fMDAwMDIzMVwiXVxuICAgICkuY29uY2F0KFxuICAgICAgUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LmViaS5hYy51ay9lZm8vcmVhc29uX2Zvcl9vYnNvbGVzY2VuY2VcIl1cbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgZ2V0RGVwcmVjYXRpb25SZXBsYWNlbWVudCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vcHVybC5vYm9saWJyYXJ5Lm9yZy9vYm8vSUFPXzAxMDAwMDFcIl07XG4gIH1cblxuICAvLyBUT0RPOiBub3QgZXhpc3RlbnQgaW4gc3RhbmRhcmQuIENhbiBiZSBleHRyYWN0ZWQgZnJvbSBcImxpbmtzXCItPlwiZ3JhcGhcIlxuICAvLyAgICAgICAoaHR0cDovL3d3dy5lYmkuYWMudWsvb2xzNC9hcGkvdGVybXM/aXJpPWh0dHA6Ly9wdXJsLm9ib2xpYnJhcnkub3JnL29iby9BR1JPXzAwMDAwMDAyKVxuICBnZXRSZWxhdGVkRnJvbSgpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55Pih0aGlzLnByb3BlcnRpZXNbXCJyZWxhdGVkRnJvbVwiXSk7XG4gIH1cblxuICBnZXREZXNjcmlwdGlvbkFzQXJyYXkoKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4odGhpcy5wcm9wZXJ0aWVzW1wiZGVzY3JpcHRpb25cIl0pO1xuICB9XG5cbiAgLy8gVE9ETzogbm90IGV4aXN0ZW50IGluIHN0YW5kYXJkLiBDYW4gYmUgZXh0cmFjdGVkIGZyb20gXCJsaW5rc1wiLT5cImNoaWxkcmVuXCJcbiAgaGFzRGlyZWN0Q2hpbGRyZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImhhc0RpcmVjdENoaWxkcmVuXCJdID09PSBcInRydWVcIjtcbiAgfVxuXG4gIC8vIC8vIFRPRE86IG5vdCBleGlzdGVudCBpbiBzdGFuZGFyZC4gQ2FuIGJlIGV4dHJhY3RlZCBmcm9tIFwibGlua3NcIi0+XCJoaWVyYXJjaGljYWxDaGlsZHJlblwiXG4gIGhhc0hpZXJhcmNoaWNhbENoaWxkcmVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJoYXNIaWVyYXJjaGljYWxDaGlsZHJlblwiXSA9PT0gXCJ0cnVlXCI7XG4gIH1cblxuICBoYXNDaGlsZHJlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaGFzX2NoaWxkcmVuXCJdXG4gIH1cblxuICAvLyBUT0RPOiBjb3VsZCBub3QgZmluZCBleGFtcGxlcyBvZiBhbmNlc3RvcnMgaW4gbmV3IGFwaSBzbyBmYXJcbiAgZ2V0QW5jZXN0b3JJcmlzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJhbmNlc3RvclwiXSk7XG4gIH1cblxuICAvLyBUT0RPOiBjYW4gYmUgaW5mZXJyZWQgdmlhIFwibGlua3NcIi0+XCJoaWVyYXJjaGljYWxBbmNlc3RvcnNcIlxuICBnZXRIaWVyYXJjaGljYWxBbmNlc3RvcklyaXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImhpZXJhcmNoaWNhbEFuY2VzdG9yXCJdKTtcbiAgfVxuXG4gIGdldFN5bm9ueW1zKCkge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4odGhpcy5wcm9wZXJ0aWVzW1wic3lub255bXNcIl0pO1xuICB9XG5cbiAgLy8gVE9ETzogbm90IGV4aXN0ZW50IGluIHN0YW5kYXJkLiBDYW4gYmUgZXh0cmFjdGVkIHZpYSBzZWFyY2hpbmcgZm9yIGVudGl0eSB3aXRob3V0IHNwZWNpZmljIG9udG9sb2d5IC0+IGdpdmVzIGFsbCBvY2N1cnJlbmNlc1xuICBnZXRBcHBlYXJzSW4oKTogc3RyaW5nW10ge1xuICAgIHJldHVybiAodGhpcy5wcm9wZXJ0aWVzW1wiYXBwZWFyc0luXCJdIHx8IFtdKSBhcyBzdHJpbmdbXTtcbiAgfVxuXG4gIGdldENyb3NzUmVmZXJlbmNlcygpOiBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImFubm90YXRpb25cIl1bXCJoYXNfZGJ4cmVmXCJdIHx8IFtdO1xuICB9XG5cbiAgLy8gVE9ETzogbm90IGV4aXN0ZW50IGluIHN0YW5kYXJkLiBTdGFuZGFyZCBzZWVtcyB0byBoYXZlIHByb2JsZW1zIHdpdGggaXNfZGVmaW5pbmdfb250b2xvZ3kgYXMgd2VsbFxuICAvLyAgICAgICAoaHR0cDovL3d3dy5lYmkuYWMudWsvb2xzNC9hcGkvdjIvb250b2xvZ2llcy9yby9wcm9wZXJ0aWVzP2lyaT1odHRwOi8vcHVybC5vYm9saWJyYXJ5Lm9yZy9vYm8vUk9fMDAwMjE3NSlcbiAgZ2V0RGVmaW5lZEJ5KCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gKHRoaXMucHJvcGVydGllc1tcImRlZmluZWRCeVwiXSB8fCBbXSkgYXMgc3RyaW5nW107XG4gIH1cblxuICBnZXRJc0RlZmluaW5nT250b2xvZ3koKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICh0aGlzLnByb3BlcnRpZXNbXCJpc19kZWZpbmluZ19vbnRvbG9neVwiXSB8fCB1bmRlZmluZWQgKSBhcyBib29sZWFuO1xuICB9XG5cbiAgZ2V0U2hvcnRGb3JtKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcIm9ib19pZFwiXSB8fCB0aGlzLnByb3BlcnRpZXNbXCJzaG9ydEZvcm1cIl07XG4gIH1cblxuICAvLyBUT0RPOiBhcmUgdGhlIGZvbGxvd2luZyAzIG5lZWRlZD9cbiAgZ2V0RGVwaWN0ZWRCeSgpOiBSZWlmaWVkPHN0cmluZz5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248c3RyaW5nPihcbiAgICAgIFsgLi4uYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8veG1sbnMuY29tL2ZvYWYvMC4xL2RlcGljdGVkX2J5XCJdIHx8IFtdKSxcbiAgICAgICAgLi4uYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8veG1sbnMuY29tL2ZvYWYvMC4xL2RlcGljdGlvblwiXSB8fCBbXSkgXVxuICAgICk7XG4gIH1cblxuICBpc1ByZWRpY2F0ZUZyb21JbmZvcm1hbFZvY2FidWxhcnkocHJlZGljYXRlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gcHJlZGljYXRlLnN0YXJ0c1dpdGgoXCJodHRwOi8vd3d3LnczLm9yZy8yMDA0LzAyL3Nrb3MvY29yZSNcIikgfHxcbiAgICAgICAgcHJlZGljYXRlLnN0YXJ0c1dpdGgoXCJodHRwOi8vcHVybC5vcmcvZGMvdGVybXMvXCIpIHx8XG4gICAgICAgIHByZWRpY2F0ZS5zdGFydHNXaXRoKFwiaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS9cIikgfHxcbiAgICAgICAgcHJlZGljYXRlLnN0YXJ0c1dpdGgoXCJodHRwOi8vc2NoZW1hLm9yZy9cIilcbiAgfVxuXG4gIC8qKiBDYW4gYmUganVzdCBmb3VuZCB1bmRlciBgcHJvcGVydGllc1tcImFubm90YXRpb25cIl1gLlxuICAgKiAgTm90IHByZXNlbnQgaW4gb2xzNC9hcGksXG4gICAqICBidXQgaW4gc2VtYW50aWNsb29rdXAuemJtZWQuZGUvYXBpLlxuICAgKi9cbiAgZ2V0QW5ub3RhdGlvblByZWRpY2F0ZXMoKTogc3RyaW5nW10ge1xuICAgIC8qIG9sczQgZXhjbHVkZXMgXCJoYXMgcHJlZmVycmVkIHJvb3QgdGVybVwiLFxuICAgICAgIHByb3BlcnRpZXMgd2l0aG91dCBhbiBJUkkgYW5kIGFueXRoaW5nIGluIHJkZiwgcmRmcyBhbmQgb3dsIG5hbWVzcGFjZXMsXG4gICAgICAgYnV0IHRoaXMgaXMgbm90IHBvc3NpYmxlIGhlcmUgYXMgdGhlIGxhYmVscyBhcmUga2V5cyBoZXJlLCBub3QgdGhlIElSSSdzICovXG4gICAgcmV0dXJuIGFzQXJyYXk8c3RyaW5nPihPYmplY3Qua2V5cyh0aGlzLnByb3BlcnRpZXNbXCJhbm5vdGF0aW9uXCJdKSk7XG4gIH1cblxuICBnZXRBbm5vdGF0aW9uVGl0bGVCeUlkKGlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBkZVVuZGVyc2NvcmUoaWQpO1xuICB9XG5cbiAgZ2V0QW5ub3RhdGlvbkJ5SWQoaWQ6IHN0cmluZyk6UmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uKGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiYW5ub3RhdGlvblwiXVtpZF0pKVxuICB9XG5cbiAgLy8gVE9ETzogQ2FuIGJlIGluZmVycmVkIHZpYSBcImxpbmtzXCItPlwiaGllcmFyY2hpY2FsRGVzY2VuZGFudHNcIlxuICBnZXROdW1IaWVyYXJjaGljYWxEZXNjZW5kYW50cygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJudW1IaWVyYXJjaGljYWxEZXNjZW5kYW50c1wiXVxuICAgICAgPyBwYXJzZUludCh0aGlzLnByb3BlcnRpZXNbXCJudW1IaWVyYXJjaGljYWxEZXNjZW5kYW50c1wiXSlcbiAgICAgIDogMDtcbiAgfVxuXG4gIC8vIFRPRE86IENhbiBiZSBpbmZlcnJlZCB2aWEgXCJsaW5rc1wiLT5cImRlc2NlbmRhbnRzXCJcbiAgZ2V0TnVtRGVzY2VuZGFudHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wibnVtRGVzY2VuZGFudHNcIl1cbiAgICAgID8gcGFyc2VJbnQodGhpcy5wcm9wZXJ0aWVzW1wibnVtRGVzY2VuZGFudHNcIl0pXG4gICAgICA6IDA7XG4gIH1cblxuICAvLyBUT0RPOiBDYW4gYmUgaW5mZXJyZWQgdmlhIFwibGlua3NcIi0+XCJoaWVyYXJjaGljYWxQYXJlbnRzXCJcbiAgZ2V0SGllcmFyY2hpY2FsUGFyZW50UmVpZmljYXRpb25BeGlvbXMocGFyZW50SXJpOiBzdHJpbmcpOiBhbnkge1xuICAgIGNvbnN0IGhpZXJhcmNoaWNhbFBhcmVudHMgPSBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJoaWVyYXJjaGljYWxQYXJlbnRcIl1cbiAgICApO1xuXG4gICAgZm9yIChjb25zdCBwIG9mIGhpZXJhcmNoaWNhbFBhcmVudHMpIHtcbiAgICAgIGlmIChwLnZhbHVlID09PSBwYXJlbnRJcmkpIHtcbiAgICAgICAgcmV0dXJuIHAuZ2V0TWV0YWRhdGEoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXRUeXBlUGx1cmFsKCk6IFwiY2xhc3Nlc1wiIHwgXCJwcm9wZXJ0aWVzXCIgfCBcImluZGl2aWR1YWxzXCIge1xuICAgIGNvbnN0IHR5cGUgPSB0aGlzLmdldFR5cGUoKTtcblxuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBcImNsYXNzXCI6XG4gICAgICAgIHJldHVybiBcImNsYXNzZXNcIjtcbiAgICAgIGNhc2UgXCJwcm9wZXJ0eVwiOlxuICAgICAgICByZXR1cm4gXCJwcm9wZXJ0aWVzXCI7XG4gICAgICBjYXNlIFwiaW5kaXZpZHVhbFwiOlxuICAgICAgICByZXR1cm4gXCJpbmRpdmlkdWFsc1wiO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidW5rbm93biB0eXBlXCIpO1xuICAgIH1cbiAgfVxufVxuIiwgImltcG9ydCB7Q2xhc3N9IGZyb20gXCIuLi9pbnRlcmZhY2VzXCI7XG5pbXBvcnQge09MUzNFbnRpdHl9IGZyb20gXCIuL09MUzNFbnRpdHlcIjtcblxuaW1wb3J0IFJlaWZpZWQgZnJvbSBcIi4uL1JlaWZpZWRcIjtcblxuaW1wb3J0IHsgYXNBcnJheSB9IGZyb20gXCIuLi8uLi9hcHAvdXRpbFwiO1xuXG5leHBvcnQgY2xhc3MgT0xTM0NsYXNzIGV4dGVuZHMgT0xTM0VudGl0eSBpbXBsZW1lbnRzIENsYXNzIHtcblxuICBnZXRUeXBlKCk6IFwib250b2xvZ3lcIiB8IFwiY2xhc3NcIiB8IFwicHJvcGVydHlcIiB8IFwiaW5kaXZpZHVhbFwiIHtcbiAgICByZXR1cm4gXCJjbGFzc1wiXG4gIH1cblxuICBnZXRUeXBlUGx1cmFsKCk6IFwiY2xhc3Nlc1wiIHwgXCJwcm9wZXJ0aWVzXCIgfCBcImluZGl2aWR1YWxzXCIge1xuICAgIHJldHVybiBcImNsYXNzZXNcIlxuICB9XG5cbiAgLy8gVE9ETzogY2FuIGJlIGluZmVycmVkIHZpYSBcImxpbmtzXCItPlwiaGllcmFyY2hpY2FsUGFyZW50c1wiXG4gIGdldFBhcmVudHMoKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJoaWVyYXJjaGljYWxQYXJlbnRcIl1cbiAgICApO1xuICB9XG5cbiAgLy8gVE9ETzogY2FuIGJlIGluZmVycmVkIHZpYSBcImxpbmtzXCItPlwicGFyZW50c1wiXG4gIGdldFN1cGVyRW50aXRpZXMoKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjc3ViQ2xhc3NPZlwiXVxuICAgICk7XG4gIH1cblxuXG4gIC8vIFRPRE86IGNhbiB0aGlzIGJlIGluZmVycmVkP1xuICBnZXRFcXVpdmFsZW50cygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2VxdWl2YWxlbnRDbGFzc1wiXVxuICAgICk7XG4gIH1cblxuXG4gIC8vIFRPRE86IGNhbiB0aGlzIGJlIGluZmVycmVkP1xuICBnZXREaXNqb2ludFdpdGgoKSB7XG5cdHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1snaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjZGlzam9pbnRXaXRoJ10pXG4gIH1cblxuICAvLyBUT0RPOiBjYW4gdGhpcyBiZSBpbmZlcnJlZD9cbiAgZ2V0SGFzS2V5KCkge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1snaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjaGFzS2V5J10pXG4gIH1cblxuICBnZXRTdWJzZXRzKCk6IGFueVtdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJpbl9zdWJzZXRcIl0pIHx8IFtdO1xuICB9XG59XG4iLCAiaW1wb3J0IHtQcm9wZXJ0eX0gZnJvbSBcIi4uL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7T0xTM0VudGl0eX0gZnJvbSBcIi4vT0xTM0VudGl0eVwiO1xuXG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi4vUmVpZmllZFwiO1xuXG5pbXBvcnQgeyBhc0FycmF5IH0gZnJvbSBcIi4uLy4uL2FwcC91dGlsXCI7XG5cbmV4cG9ydCBjbGFzcyBPTFMzUHJvcGVydHkgZXh0ZW5kcyBPTFMzRW50aXR5IGltcGxlbWVudHMgUHJvcGVydHl7XG5cbiAgZ2V0VHlwZSgpOiBcIm9udG9sb2d5XCIgfCBcImNsYXNzXCIgfCBcInByb3BlcnR5XCIgfCBcImluZGl2aWR1YWxcIiB7XG4gICAgcmV0dXJuIFwicHJvcGVydHlcIjtcbiAgfVxuXG4gIGdldFR5cGVQbHVyYWwoKTogXCJjbGFzc2VzXCIgfCBcInByb3BlcnRpZXNcIiB8IFwiaW5kaXZpZHVhbHNcIiB7XG4gICAgcmV0dXJuIFwicHJvcGVydGllc1wiO1xuICB9XG5cbiAgZ2V0UGFyZW50cygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNzdWJQcm9wZXJ0eU9mXCJdXG4gICAgKTtcbiAgfVxuICBnZXRTdXBlckVudGl0aWVzKCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI3N1YlByb3BlcnR5T2ZcIl1cbiAgICApO1xuICB9XG4gIGdldEVxdWl2YWxlbnRzKCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjZXF1aXZhbGVudFByb3BlcnR5XCJdXG4gICAgKTtcbiAgfVxuXG5cbiAgZ2V0RGlzam9pbnRXaXRoKCkge1xuXHRyZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbJ2h0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI3Byb3BlcnR5RGlzam9pbnRXaXRoJ10pXG4gIH1cblxuICBnZXRJbnZlcnNlT2YoKSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjaW52ZXJzZU9mXCJdKTtcbiAgfVxuXG4gIGdldERvbWFpbigpIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNkb21haW4nXSlcbiAgfVxuXG4gIGdldFJhbmdlKCkge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1snaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI3JhbmdlJ10pXG4gIH1cblxuICBnZXRQcm9wZXJ0eUNoYWlucygpOlJlaWZpZWQ8YW55PltdIHtcblx0cmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55Pihcblx0XHR0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNwcm9wZXJ0eUNoYWluQXhpb21cIl1cblx0KVxuICB9XG5cbn1cbiIsICJpbXBvcnQge0luZGl2aWR1YWx9IGZyb20gXCIuLi9pbnRlcmZhY2VzXCI7XG5pbXBvcnQge09MUzNFbnRpdHl9IGZyb20gXCIuL09MUzNFbnRpdHlcIjtcblxuaW1wb3J0IFJlaWZpZWQgZnJvbSBcIi4uL1JlaWZpZWRcIjtcblxuaW1wb3J0IHsgYXNBcnJheSB9IGZyb20gXCIuLi8uLi9hcHAvdXRpbFwiO1xuXG5leHBvcnQgY2xhc3MgT0xTM0luZGl2aWR1YWwgZXh0ZW5kcyBPTFMzRW50aXR5IGltcGxlbWVudHMgSW5kaXZpZHVhbHtcblxuICBnZXRUeXBlKCk6IFwib250b2xvZ3lcIiB8IFwiY2xhc3NcIiB8IFwicHJvcGVydHlcIiB8IFwiaW5kaXZpZHVhbFwiIHtcbiAgICByZXR1cm4gXCJpbmRpdmlkdWFsXCI7XG4gIH1cblxuICBnZXRUeXBlUGx1cmFsKCk6IFwiY2xhc3Nlc1wiIHwgXCJwcm9wZXJ0aWVzXCIgfCBcImluZGl2aWR1YWxzXCIge1xuICAgIHJldHVybiBcImluZGl2aWR1YWxzXCI7XG4gIH1cblxuICBnZXRQYXJlbnRzKCkge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJkaXJlY3RQYXJlbnRcIl1cbiAgICApO1xuICB9XG4gIGdldEVxdWl2YWxlbnRzKCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBnZXRTdXBlckVudGl0aWVzKCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFtdKVxuICB9XG5cbiAgZ2V0RGlmZmVyZW50RnJvbSgpIHtcbiAgICByZXR1cm4gYXNBcnJheShcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2RpZmZlcmVudEZyb21cIl1cbiAgICApO1xuICB9XG5cbiAgZ2V0U2FtZUFzKCkge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI3NhbWVBc1wiXSk7XG4gIH1cblxuICBnZXRJbmRpdmlkdWFsVHlwZXMoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHJkZlR5cGVzOiBhbnkgPSB0aGlzLmdldFJkZlR5cGVzKCk7XG5cbiAgICBpZiAoIXJkZlR5cGVzIHx8ICFBcnJheS5pc0FycmF5KHJkZlR5cGVzKSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHJldHVybiByZGZUeXBlcy5maWx0ZXIoXG4gICAgICAodDogYW55KSA9PlxuICAgICAgICB0ICE9PSBcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI05hbWVkSW5kaXZpZHVhbFwiICYmXG5cdFx0KCAoISAodHlwZW9mIHQgPT09ICdzdHJpbmcnKSB8fCAhdC5zdGFydHNXaXRoKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI1wiKSkpXG4gICAgKTtcbiAgfVxufVxuIiwgImltcG9ydCB7T250b2xvZ3l9IGZyb20gXCIuLi9pbnRlcmZhY2VzXCI7XG5pbXBvcnQge09MUzNUaGluZ30gZnJvbSBcIi4vT0xTM1RoaW5nXCI7XG5cbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuLi9SZWlmaWVkXCI7XG5cbmltcG9ydCB7YXNBcnJheSwgZGVDYW1lbENhc2V9IGZyb20gXCIuLi8uLi9hcHAvdXRpbFwiO1xuXG5leHBvcnQgY2xhc3MgT0xTM09udG9sb2d5IGV4dGVuZHMgT0xTM1RoaW5nIGltcGxlbWVudHMgT250b2xvZ3l7XG5cbiAgZ2V0VHlwZSgpOiBcIm9udG9sb2d5XCIgfCBcImNsYXNzXCIgfCBcInByb3BlcnR5XCIgfCBcImluZGl2aWR1YWxcIiB7XG4gICAgcmV0dXJuIFwib250b2xvZ3lcIjtcbiAgfVxuXG4gIGdldFR5cGVQbHVyYWwoKTogXCJvbnRvbG9naWVzXCIgfCBcImNsYXNzZXNcIiB8IFwicHJvcGVydGllc1wiIHwgXCJpbmRpdmlkdWFsc1wiIHtcbiAgICByZXR1cm4gXCJvbnRvbG9naWVzXCI7XG4gIH1cblxuICBnZXRPbnRvbG9neUlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcIm9udG9sb2d5SWRcIl07XG4gIH1cbiAgZ2V0TmFtZSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IG5hbWVzID0gUmVpZmllZC5mcm9tSnNvbjxzdHJpbmc+KFxuICAgICAgICB0aGlzLnByb3BlcnRpZXNbXCJjb25maWdcIl1bXCJ0aXRsZVwiXSB8fCBcIlwiXG4gICAgKTtcbiAgICByZXR1cm4gKG5hbWVzWzBdICYmIG5hbWVzWzBdLnZhbHVlKSB8fCB0aGlzLmdldE9udG9sb2d5SWQoKTtcbiAgfVxuICBnZXREZXNjcmlwdGlvbigpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRlc2NyaXB0aW9ucyA9IFJlaWZpZWQuZnJvbUpzb248c3RyaW5nPihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImNvbmZpZ1wiXVtcImRlc2NyaXB0aW9uXCJdIHx8IFwiXCJcbiAgICApO1xuICAgIHJldHVybiAoZGVzY3JpcHRpb25zWzBdICYmIGRlc2NyaXB0aW9uc1swXS52YWx1ZSkgfHwgXCJcIjtcbiAgfVxuXG4gIGdldENyZWF0b3JzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJjb25maWdcIl1bXCJhbm5vdGF0aW9uc1wiXVtcImNyZWF0b3JcIl0pO1xuICB9XG5cbiAgZ2V0U291cmNlRmlsZVRpbWVzdGFtcCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJ1cGRhdGVkXCJdO1xuICB9XG4gIGdldE51bUVudGl0aWVzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHBhcnNlSW50KHRoaXMucHJvcGVydGllc1tcIm51bWJlck9mRW50aXRpZXNcIl0pO1xuICB9XG4gIGdldE51bUNsYXNzZXMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcGFyc2VJbnQodGhpcy5wcm9wZXJ0aWVzW1wibnVtYmVyT2ZUZXJtc1wiXSk7XG4gIH1cbiAgZ2V0TnVtUHJvcGVydGllcygpOiBudW1iZXIge1xuICAgIHJldHVybiBwYXJzZUludCh0aGlzLnByb3BlcnRpZXNbXCJudW1iZXJPZlByb3BlcnRpZXNcIl0pO1xuICB9XG4gIGdldE51bUluZGl2aWR1YWxzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHBhcnNlSW50KHRoaXMucHJvcGVydGllc1tcIm51bWJlck9mSW5kaXZpZHVhbHNcIl0pO1xuICB9XG4gIGdldExvZ29VUkwoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiY29uZmlnXCJdW1wibG9nb1wiXSB8fCB1bmRlZmluZWQ7XG4gIH1cblxuICAvLyB1c2VkIGFzIElSSVxuICBnZXRPbnRvbG9neVB1cmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiY29uZmlnXCJdW1wiaWRcIl07XG4gIH1cblxuICBnZXRIb21lcGFnZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJjb25maWdcIl1bXCJob21lcGFnZVwiXTtcbiAgfVxuICBnZXRNYWlsaW5nTGlzdCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJjb25maWdcIl1bXCJtYWlsaW5nTGlzdFwiXTtcbiAgfVxuICBnZXRUcmFja2VyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImNvbmZpZ1wiXVtcInRyYWNrZXJcIl07XG4gIH1cbiAgZ2V0VmVyc2lvbklyaSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJjb25maWdcIl1bXCJ2ZXJzaW9uSXJpXCJdO1xuICB9XG4gIGdldFZlcnNpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiY29uZmlnXCJdW1widmVyc2lvblwiXTtcbiAgfVxuICBnZXRWZXJzaW9uRnJvbUlyaSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHZlcnNpb25JcmkgPSB0aGlzLmdldFZlcnNpb25JcmkoKTtcbiAgICBpZiAoIXZlcnNpb25JcmkpIHJldHVybiBcIlwiO1xuICAgIGNvbnN0IHZlcnNpb25Gcm9tRGF0ZSA9IHZlcnNpb25JcmkubWF0Y2goL1xcZHs0fS1cXGR7Mn0tXFxkezJ9Lyk7XG5cbiAgICBpZiAodmVyc2lvbkZyb21EYXRlICYmIHZlcnNpb25Gcm9tRGF0ZS5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gdmVyc2lvbkZyb21EYXRlWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB2ZXJzaW9uRnJvbU51bWJlciA9IHZlcnNpb25JcmkubWF0Y2goL1xcL3ZbZC5dLipcXC8vKTtcbiAgICAgIHJldHVybiB2ZXJzaW9uRnJvbU51bWJlclxuICAgICAgICA/IHZlcnNpb25Gcm9tTnVtYmVyWzBdLnJlcGxhY2VBbGwoXCIvXCIsIFwiXCIpLnJlcGxhY2UoXCJ2XCIsIFwiXCIpXG4gICAgICAgIDogXCJcIjtcbiAgICB9XG4gIH1cbiAgZ2V0TG9hZGVkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImxvYWRlZFwiXTtcbiAgfVxuXG4gIC8qKiBDYW4gYmUganVzdCBmb3VuZCB1bmRlciBgcHJvcGVydGllc1tcImNvbmZpZ1wiXVtcImFubm90YXRpb25zXCJdYC5cbiAgICogIE5vdCBwcmVzZW50IGluIG9sczQvYXBpLFxuICAgKiAgYnV0IGluIHNlbWFudGljbG9va3VwLnpibWVkLmRlL2FwaS5cbiAgICovXG4gIGdldEFubm90YXRpb25QcmVkaWNhdGVzKCk6IHN0cmluZ1tdIHtcbiAgICBpZih0aGlzLnByb3BlcnRpZXNbXCJjb25maWdcIl0gJiYgdGhpcy5wcm9wZXJ0aWVzW1wiY29uZmlnXCJdW1wiYW5ub3RhdGlvbnNcIl0pIHtcbiAgICAgIC8qIG9sczQgZXhjbHVkZXMgXCJoYXMgcHJlZmVycmVkIHJvb3QgdGVybVwiLFxuICAgICAgIHByb3BlcnRpZXMgd2l0aG91dCBhbiBJUkkgYW5kIGFueXRoaW5nIGluIHJkZiwgcmRmcyBhbmQgb3dsIG5hbWVzcGFjZXMsXG4gICAgICAgYnV0IHRoaXMgaXMgbm90IHBvc3NpYmxlIGhlcmUgYXMgdGhlIGxhYmVscyBhcmUga2V5cyBoZXJlLCBub3QgdGhlIElSSSdzICovXG4gICAgICByZXR1cm4gYXNBcnJheTxzdHJpbmc+KE9iamVjdC5rZXlzKHRoaXMucHJvcGVydGllc1tcImNvbmZpZ1wiXVtcImFubm90YXRpb25zXCJdKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgLy8gXCJhbm5vdGF0aW9uc1wiIGtleSBpcyBub3QgcHJlc2VudCBpbiBvbHM0L2FwaVxuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxuXG4gIGdldEFubm90YXRpb25UaXRsZUJ5SWQoaWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGRlQ2FtZWxDYXNlKGlkKTtcbiAgfVxuXG4gIGdldEFubm90YXRpb25CeUlkKGlkOiBzdHJpbmcpOlJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbihhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImNvbmZpZ1wiXVtcImFubm90YXRpb25zXCJdW2lkXSlcbiAgICAgICAgLmZpbHRlcigoZWxlbSkgPT4ge1xuICAgICAgICAgIHJldHVybiB0eXBlb2YgZWxlbSAhPT0gXCJzdHJpbmdcIiB8fCBlbGVtICE9PSBcIlwiXG4gICAgICAgIH0pXG4gICAgKVxuICB9XG5cbiAgZ2V0UHJlZmVycmVkUm9vdHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImhhc1ByZWZlcnJlZFJvb3RcIl0pO1xuICB9XG4gIGdldExhbmd1YWdlcygpOiBzdHJpbmdbXSB7XG4gICAgLy8gbm90IGF2YWlsYWJsZSBpbiBzZW1sb29rcCBBUEksIGJ1dCBpbiBlYmkgQVBJXG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wibGFuZ1wiXSk7XG4gIH1cblxuICAvLyBUT0RPOiBub3QgYXZhaWxhYmxlP1xuICBnZXRJbXBvcnRzRnJvbSgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgLy8gVE9ETzogbm90IGF2YWlsYWJsZT9cbiAgZ2V0RXhwb3J0c1RvKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJleHBvcnRzVG9cIl0pO1xuICB9XG4gIGdldEFsbG93RG93bmxvYWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiY29uZmlnXCJdW1wiYWxsb3dEb3dubG9hZFwiXTtcbiAgfVxufVxuIiwgImltcG9ydCB7T250b2xvZ2llc30gZnJvbSBcIi4uL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7T0xTM09udG9sb2d5fSBmcm9tIFwiLi9PTFMzT250b2xvZ3lcIjtcblxuZXhwb3J0IGNsYXNzIE9MUzNPbnRvbG9naWVzIGltcGxlbWVudHMgT250b2xvZ2llcyB7XG4gIHByb3BlcnRpZXM6IE9MUzNPbnRvbG9neVtdO1xuXG4gIGNvbnN0cnVjdG9yKHByb3BlcnRpZXM6IE9MUzNPbnRvbG9neVtdKSB7XG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcbiAgfVxuXG4gIGdldFRvdGFsT250b2xvZ2llcygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXMubGVuZ3RoO1xuICB9XG5cbiAgZ2V0TnVtRW50aXRpZXMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzLnJlZHVjZSgodG90YWwsIG9udG9sb2d5KSA9PiB0b3RhbCArIG9udG9sb2d5LmdldE51bUVudGl0aWVzKCksIDApO1xuICB9XG5cbiAgZ2V0TnVtQ2xhc3NlcygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXMucmVkdWNlKCh0b3RhbCwgb250b2xvZ3kpID0+IHRvdGFsICsgb250b2xvZ3kuZ2V0TnVtQ2xhc3NlcygpLCAwKTtcbiAgfVxuXG4gIGdldE51bVByb3BlcnRpZXMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzLnJlZHVjZSgodG90YWwsIG9udG9sb2d5KSA9PiB0b3RhbCArIG9udG9sb2d5LmdldE51bVByb3BlcnRpZXMoKSwgMCk7XG4gIH1cblxuICBnZXROdW1JbmRpdmlkdWFscygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXMucmVkdWNlKCh0b3RhbCwgb250b2xvZ3kpID0+IHRvdGFsICsgb250b2xvZ3kuZ2V0TnVtSW5kaXZpZHVhbHMoKSwgMCk7XG4gIH1cbn1cbiIsICJpbXBvcnQge1RoaW5nfSBmcm9tIFwiLi4vaW50ZXJmYWNlc1wiO1xuXG5pbXBvcnQgTGlua2VkRW50aXRpZXMgZnJvbSBcIi4uL0xpbmtlZEVudGl0aWVzXCI7XG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi4vUmVpZmllZFwiO1xuXG5pbXBvcnQgeyBhc0FycmF5IH0gZnJvbSBcIi4uLy4uL2FwcC91dGlsXCI7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBPTFM0VGhpbmcgaW1wbGVtZW50cyBUaGluZyB7XG4gIHByb3BlcnRpZXM6IGFueTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzOiBhbnkpIHtcbiAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzO1xuICB9XG5cbiAgZ2V0TGFiZWwoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wibGFiZWxcIl07XG4gIH1cblxuICAvLyBUT0RPOiBJcyBjdXJpZSAvIG9ib19pZCBtZWFudD9cbiAgZ2V0SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaWRcIl07XG4gIH1cblxuICBnZXRJcmkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaXJpXCJdO1xuICB9XG5cbiAgZ2V0VHlwZSgpOiBcIm9udG9sb2d5XCIgfCBcImNsYXNzXCIgfCBcInByb3BlcnR5XCIgfCBcImluZGl2aWR1YWxcIiB7XG4gICAgY29uc3QgdHlwZXMgPSB0aGlzLnByb3BlcnRpZXNbXCJ0eXBlXCJdIGFzIHN0cmluZ1tdO1xuXG4gICAgZm9yIChjb25zdCB0eXBlIG9mIHR5cGVzKSB7XG4gICAgICBpZiAoXG4gICAgICAgIFtcIm9udG9sb2d5XCIsIFwiY2xhc3NcIiwgXCJwcm9wZXJ0eVwiLCBcImluZGl2aWR1YWxcIl0uaW5kZXhPZih0eXBlKSAhPT0gLTFcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gdHlwZSBhcyBhbnk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKFwidW5rbm93biB0eXBlXCIpO1xuICB9XG5cbiAgZ2V0VHlwZVBsdXJhbCgpOiBcIm9udG9sb2dpZXNcIiB8IFwiY2xhc3Nlc1wiIHwgXCJwcm9wZXJ0aWVzXCIgfCBcImluZGl2aWR1YWxzXCIgfCBcImVudGl0aWVzXCIge1xuICAgIGNvbnN0IHR5cGUgPSB0aGlzLmdldFR5cGUoKTtcblxuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBcIm9udG9sb2d5XCI6XG4gICAgICAgIHJldHVybiBcIm9udG9sb2dpZXNcIjtcbiAgICAgIGNhc2UgXCJjbGFzc1wiOlxuICAgICAgICByZXR1cm4gXCJjbGFzc2VzXCI7XG4gICAgICBjYXNlIFwicHJvcGVydHlcIjpcbiAgICAgICAgcmV0dXJuIFwicHJvcGVydGllc1wiO1xuICAgICAgY2FzZSBcImluZGl2aWR1YWxcIjpcbiAgICAgICAgcmV0dXJuIFwiaW5kaXZpZHVhbHNcIjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcInVua25vd24gdHlwZVwiKTtcbiAgICB9XG4gIH1cblxuICBnZXRSZGZUeXBlcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1xuICAgICAgXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjdHlwZVwiXG4gICAgXSlcbiAgfVxuXG4gIGdldE5hbWUoKTogc3RyaW5nIHtcblx0cmV0dXJuIHRoaXMuZ2V0TmFtZXMoKVswXTtcbiAgfVxuXG4gIGdldE5hbWVzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBsYWJlbHMgPSBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJsYWJlbFwiXVxuICAgICk7XG4gICAgaWYgKGxhYmVscyAmJiBsYWJlbHMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIGxhYmVscy5tYXAobGFiZWwgPT4gbGFiZWwudmFsdWUpXG4gICAgfVxuICAgIHJldHVybiBbdGhpcy5nZXRJcmkoKV07XG4gIH1cblxuICBnZXREZXNjcmlwdGlvbigpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRlZmluaXRpb24gPSBSZWlmaWVkLmZyb21Kc29uPGFueT4odGhpcy5wcm9wZXJ0aWVzW1wiZGVmaW5pdGlvblwiXSk7XG4gICAgaWYgKGRlZmluaXRpb24gJiYgZGVmaW5pdGlvbi5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gZGVmaW5pdGlvbi5tYXAoKGRlZikgPT4gZGVmLnZhbHVlIHx8IFwiXCIpLmpvaW4oXCIgXCIpO1xuICAgIH1cbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIGdldE9udG9sb2d5SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wib250b2xvZ3lJZFwiXTtcbiAgfVxuXG4gIGdldExhYmVsRm9ySXJpKGlkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBsaW5rZWRFbnRpdGllcyA9IHRoaXMucHJvcGVydGllc1tcImxpbmtlZEVudGl0aWVzXCJdO1xuICAgIGlmIChsaW5rZWRFbnRpdGllcykge1xuICAgICAgY29uc3QgbGFiZWw6UmVpZmllZDxzdHJpbmc+W10gPSBSZWlmaWVkLmZyb21Kc29uPHN0cmluZz4oIGxpbmtlZEVudGl0aWVzW2lkXT8ubGFiZWwgKTtcbiAgICAgIHJldHVybiBsYWJlbFswXT8udmFsdWUgfHwgaWRcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGlkO1xuICAgIH1cbiAgfVxuXG4gIGFic3RyYWN0IGdldEFubm90YXRpb25QcmVkaWNhdGVzKCk6IHN0cmluZ1tdO1xuXG4gIGdldEFubm90YXRpb25CeUlkKGlkOiBzdHJpbmcpOlJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbihhc0FycmF5KHRoaXMucHJvcGVydGllc1tpZF0pKVxuICB9XG5cbiAgZ2V0QW5ub3RhdGlvblRpdGxlQnlJZChpZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMYWJlbEZvcklyaShpZCk7XG4gIH1cblxuICBnZXRMaW5rZWRFbnRpdGllcygpOiBMaW5rZWRFbnRpdGllcyB7XG4gICAgcmV0dXJuIG5ldyBMaW5rZWRFbnRpdGllcyh0aGlzLnByb3BlcnRpZXNbXCJsaW5rZWRFbnRpdGllc1wiXSB8fCB7fSk7XG4gIH1cbn1cbiIsICJpbXBvcnQge0VudGl0eX0gZnJvbSBcIi4uL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7T0xTNFRoaW5nfSBmcm9tIFwiLi9PTFM0VGhpbmdcIjtcblxuaW1wb3J0IFJlaWZpZWQgZnJvbSBcIi4uL1JlaWZpZWRcIjtcblxuaW1wb3J0IHsgYXNBcnJheSB9IGZyb20gXCIuLi8uLi9hcHAvdXRpbFwiO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgT0xTNEVudGl0eSBleHRlbmRzIE9MUzRUaGluZyBpbXBsZW1lbnRzIEVudGl0eXtcbiAgYWJzdHJhY3QgZ2V0UGFyZW50cygpOiBSZWlmaWVkPGFueT5bXTtcbiAgYWJzdHJhY3QgZ2V0U3VwZXJFbnRpdGllcygpOiBSZWlmaWVkPGFueT5bXTtcbiAgYWJzdHJhY3QgZ2V0RXF1aXZhbGVudHMoKTogUmVpZmllZDxhbnk+W107XG5cbiAgaXNDYW5vbmljYWwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImlzRGVmaW5pbmdPbnRvbG9neVwiXSA9PT0gdHJ1ZTtcbiAgfVxuXG4gIGlzRGVwcmVjYXRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjZGVwcmVjYXRlZFwiXSA9PT0gXCJ0cnVlXCJcbiAgICApO1xuICB9XG5cbiAgZ2V0RGVwcmVjYXRpb25WZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgLy8gb25seSBzdXBwb3J0cyBFRk8gZm9yIG5vd1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LmViaS5hYy51ay9lZm8vb2Jzb2xldGVkX2luX3ZlcnNpb25cIl07XG4gIH1cblxuICBnZXREZXByZWNhdGlvblJlYXNvbigpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly9wdXJsLm9ib2xpYnJhcnkub3JnL29iby9JQU9fMDAwMDIzMVwiXVxuICAgICkuY29uY2F0KFxuICAgICAgUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LmViaS5hYy51ay9lZm8vcmVhc29uX2Zvcl9vYnNvbGVzY2VuY2VcIl1cbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgZ2V0RGVwcmVjYXRpb25SZXBsYWNlbWVudCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vcHVybC5vYm9saWJyYXJ5Lm9yZy9vYm8vSUFPXzAxMDAwMDFcIl07XG4gIH1cblxuICBnZXRSZWxhdGVkRnJvbSgpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55Pih0aGlzLnByb3BlcnRpZXNbXCJyZWxhdGVkRnJvbVwiXSk7XG4gIH1cblxuICBnZXREZXNjcmlwdGlvbkFzQXJyYXkoKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4odGhpcy5wcm9wZXJ0aWVzW1wiZGVmaW5pdGlvblwiXSk7XG4gIH1cblxuICBoYXNEaXJlY3RDaGlsZHJlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaGFzRGlyZWN0Q2hpbGRyZW5cIl0gPT09IFwidHJ1ZVwiO1xuICB9XG5cbiAgaGFzSGllcmFyY2hpY2FsQ2hpbGRyZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImhhc0hpZXJhcmNoaWNhbENoaWxkcmVuXCJdID09PSBcInRydWVcIjtcbiAgfVxuXG4gIGhhc0NoaWxkcmVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmhhc0RpcmVjdENoaWxkcmVuKCkgfHwgdGhpcy5oYXNIaWVyYXJjaGljYWxDaGlsZHJlbigpO1xuICB9XG5cbiAgZ2V0QW5jZXN0b3JJcmlzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJhbmNlc3RvclwiXSk7XG4gIH1cblxuICBnZXRIaWVyYXJjaGljYWxBbmNlc3RvcklyaXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImhpZXJhcmNoaWNhbEFuY2VzdG9yXCJdKTtcbiAgfVxuXG4gIGdldFN5bm9ueW1zKCkge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4odGhpcy5wcm9wZXJ0aWVzW1wic3lub255bVwiXSk7XG4gIH1cblxuICBnZXRBcHBlYXJzSW4oKTogc3RyaW5nW10ge1xuICAgIHJldHVybiAodGhpcy5wcm9wZXJ0aWVzW1wiYXBwZWFyc0luXCJdIHx8IFtdKSBhcyBzdHJpbmdbXTtcbiAgfVxuXG4gIGdldENyb3NzUmVmZXJlbmNlcygpOiBhbnlbXSB7XG4gICAgcmV0dXJuICh0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LmdlbmVvbnRvbG9neS5vcmcvZm9ybWF0cy9vYm9Jbk93bCNoYXNEYlhyZWZcIl0gfHwgW10pIGFzIHN0cmluZ1tdO1xuICB9XG5cbiAgZ2V0RGVmaW5lZEJ5KCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gKHRoaXMucHJvcGVydGllc1tcImRlZmluZWRCeVwiXSB8fCBbXSkgYXMgc3RyaW5nW107XG4gIH1cblxuICBnZXRJc0RlZmluaW5nT250b2xvZ3koKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICh0aGlzLnByb3BlcnRpZXNbXCJpc19kZWZpbmluZ19vbnRvbG9neVwiXSB8fCB1bmRlZmluZWQgKSBhcyBib29sZWFuO1xuICB9XG5cbiAgZ2V0U2hvcnRGb3JtKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImN1cmllXCJdIHx8IHRoaXMucHJvcGVydGllc1tcInNob3J0Rm9ybVwiXTtcbiAgfVxuXG4gIGdldERlcGljdGVkQnkoKTogUmVpZmllZDxzdHJpbmc+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPHN0cmluZz4oXG4gICAgICBbIC4uLmFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3htbG5zLmNvbS9mb2FmLzAuMS9kZXBpY3RlZF9ieVwiXSB8fCBbXSksXG4gICAgICAgIC4uLmFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3htbG5zLmNvbS9mb2FmLzAuMS9kZXBpY3Rpb25cIl0gfHwgW10pIF1cbiAgICApO1xuICB9XG5cbiAgaXNQcmVkaWNhdGVGcm9tSW5mb3JtYWxWb2NhYnVsYXJ5KHByZWRpY2F0ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHByZWRpY2F0ZS5zdGFydHNXaXRoKFwiaHR0cDovL3d3dy53My5vcmcvMjAwNC8wMi9za29zL2NvcmUjXCIpIHx8XG4gICAgICAgIHByZWRpY2F0ZS5zdGFydHNXaXRoKFwiaHR0cDovL3B1cmwub3JnL2RjL3Rlcm1zL1wiKSB8fFxuICAgICAgICBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvXCIpIHx8XG4gICAgICAgIHByZWRpY2F0ZS5zdGFydHNXaXRoKFwiaHR0cDovL3NjaGVtYS5vcmcvXCIpXG4gIH1cbiAgZ2V0QW5ub3RhdGlvblByZWRpY2F0ZXMoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGRlZmluaXRpb25Qcm9wZXJ0aWVzID0gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJkZWZpbml0aW9uUHJvcGVydHlcIl0pO1xuICAgIGNvbnN0IHN5bm9ueW1Qcm9wZXJ0aWVzID0gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJzeW5vbnltUHJvcGVydHlcIl0pO1xuICAgIGNvbnN0IGhpZXJhcmNoaWNhbFByb3BlcnRpZXMgPSBhc0FycmF5KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaGllcmFyY2hpY2FsUHJvcGVydHlcIl1cbiAgICApO1xuICAgIGNvbnN0IGFubm90YXRpb25QcmVkaWNhdGVzID0gbmV3IFNldCgpO1xuXG4gICAgZm9yIChjb25zdCBwcmVkaWNhdGUgb2YgT2JqZWN0LmtleXModGhpcy5wcm9wZXJ0aWVzKSkge1xuICAgICAgLy8gcHJvcGVydGllcyB3aXRob3V0IGFuIElSSSBhcmUgdGhpbmdzIHRoYXQgd2VyZSBhZGRlZCBieSByZGYyanNvbiBzbyBzaG91bGQgbm90XG4gICAgICAvLyBiZSBpbmNsdWRlZCBhcyBhbm5vdGF0aW9uc1xuICAgICAgaWYgKHByZWRpY2F0ZS5pbmRleE9mKFwiOi8vXCIpID09PSAtMSkgY29udGludWU7XG5cbiAgICAgIC8vIHRoaXMgaXMgaGFuZGxlZCBleHBsaWNpdGx5IGluIEVudGl0eVBhZ2VcbiAgICAgIGlmIChwcmVkaWNhdGUuc3RhcnRzV2l0aChcIm5lZ2F0aXZlUHJvcGVydHlBc3NlcnRpb24rXCIpKSBjb250aW51ZTtcblxuICAgICAgLy8gdGhpcyBpcyBoYW5kbGVkIGV4cGxpY2l0bHkgaW4gRW50aXR5UGFnZVxuICAgICAgaWYgKHByZWRpY2F0ZSA9PT0gXCJodHRwOi8veG1sbnMuY29tL2ZvYWYvMC4xL2RlcGljdGVkX2J5XCIpIGNvbnRpbnVlO1xuICAgICAgaWYgKHByZWRpY2F0ZSA9PT0gXCJodHRwOi8veG1sbnMuY29tL2ZvYWYvMC4xL2RlcGljdGlvblwiKSBjb250aW51ZTtcblxuICAgICAgLy8gT2JqZWN0IHByb3BlcnRpZXMgYW5kIGRhdGEgcHJvcGVydGllcyBhcmUgbm90IGFubm90YXRpb24gcHJvcGVydGllcywgZXhjZXB0IGluIHRoZSBjYXNlIG9mIGluZm9ybWFsIHZvY2FidWxhcmllcy5cbiAgICAgIGlmICghdGhpcy5pc1ByZWRpY2F0ZUZyb21JbmZvcm1hbFZvY2FidWxhcnkocHJlZGljYXRlKSkge1xuICAgICAgICBjb25zdCBsaW5rZWRFbnRpdHkgPSB0aGlzLmdldExpbmtlZEVudGl0aWVzKCkuZ2V0KHByZWRpY2F0ZSlcbiAgICAgICAgaWYgKGxpbmtlZEVudGl0eSAhPSB1bmRlZmluZWQgJiYgbGlua2VkRW50aXR5LnR5cGUuaW5kZXhPZihcIm9iamVjdFByb3BlcnR5XCIpICE9PSAtMSkgY29udGludWU7XG4gICAgICAgIGlmIChsaW5rZWRFbnRpdHkgIT0gdW5kZWZpbmVkICYmIGxpbmtlZEVudGl0eS50eXBlLmluZGV4T2YoXCJkYXRhUHJvcGVydHlcIikgIT09IC0xKSBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgdGhlIHZhbHVlIHdhcyBhbHJlYWR5IGludGVycHJldGVkIGFzIGRlZmluaXRpb24vc3lub255bS9oaWVyYXJjaGljYWwsIGRvXG4gICAgICAvLyBub3QgaW5jbHVkZSBpdCBhcyBhbiBhbm5vdGF0aW9uXG4gICAgICBpZiAoXG4gICAgICAgIGRlZmluaXRpb25Qcm9wZXJ0aWVzLmluZGV4T2YocHJlZGljYXRlKSAhPT0gLTEgfHxcbiAgICAgICAgc3lub255bVByb3BlcnRpZXMuaW5kZXhPZihwcmVkaWNhdGUpICE9PSAtMSB8fFxuICAgICAgICBoaWVyYXJjaGljYWxQcm9wZXJ0aWVzLmluZGV4T2YocHJlZGljYXRlKSAhPT0gLTFcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gYW55dGhpbmcgaW4gdGhlIHJkZiwgcmRmcywgb3dsIG5hbWVzcGFjZXMgYXJlbid0IGRpc3BsYXllZCBpbiB0aGUgYW5ub3RhdGlvbnMgc2VjdGlvbi4uLlxuICAgICAgaWYgKFxuICAgICAgICBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNcIikgfHxcbiAgICAgICAgcHJlZGljYXRlLnN0YXJ0c1dpdGgoXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjXCIpIHx8XG4gICAgICAgIHByZWRpY2F0ZS5zdGFydHNXaXRoKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjXCIpXG4gICAgICApIHtcbiAgICAgICAgLy8gLi4uYXBhcnQgZnJvbSB0aGVzZSBvbmVzXG4gICAgICAgIGlmIChcbiAgICAgICAgICBwcmVkaWNhdGUgIT09IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI2NvbW1lbnRcIiAmJlxuICAgICAgICAgIHByZWRpY2F0ZSAhPT0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjc2VlQWxzb1wiICYmXG4gICAgICAgICAgLy8gcHJlZGljYXRlICE9PSBcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2hhc0tleVwiICYmXG4gICAgICAgICAgcHJlZGljYXRlICE9PSBcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2Rpc2pvaW50VW5pb25PZlwiXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIHdoaWxlIGluIGdlbmVyYWwgb2JvSW5Pd2wgbmFtZXNwYWNlIHByb3BlcnRpZXMgYXJlIGFubm90YXRpb25zLCBzb21lXG4gICAgICAvLyBvZiB0aGVtIHdlIGRvbid0IHdhbnQgdG8gZGlzcGxheVxuICAgICAgLy9cbiAgICAgIGlmIChcbiAgICAgICAgcHJlZGljYXRlID09PSBcImh0dHA6Ly93d3cuZ2VuZW9udG9sb2d5Lm9yZy9mb3JtYXRzL29ib0luT3dsI2luU3Vic2V0XCIgfHxcbiAgICAgICAgcHJlZGljYXRlID09PSBcImh0dHA6Ly93d3cuZ2VuZW9udG9sb2d5Lm9yZy9mb3JtYXRzL29ib0luT3dsI2lkXCJcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgYW5ub3RhdGlvblByZWRpY2F0ZXMuYWRkKHByZWRpY2F0ZSk7XG4gICAgfVxuXG4gICAgLy8gY29uc29sZS5sb2coXCJBUHNcIik7XG4gICAgLy8gY29uc29sZS5kaXIoQXJyYXkuZnJvbShhbm5vdGF0aW9uUHJlZGljYXRlcykpO1xuXG4gICAgcmV0dXJuIEFycmF5LmZyb20oYW5ub3RhdGlvblByZWRpY2F0ZXMpIGFzIHN0cmluZ1tdO1xuICB9XG5cbiAgZ2V0TnVtSGllcmFyY2hpY2FsRGVzY2VuZGFudHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wibnVtSGllcmFyY2hpY2FsRGVzY2VuZGFudHNcIl1cbiAgICAgID8gcGFyc2VJbnQodGhpcy5wcm9wZXJ0aWVzW1wibnVtSGllcmFyY2hpY2FsRGVzY2VuZGFudHNcIl0pXG4gICAgICA6IDA7XG4gIH1cblxuICBnZXROdW1EZXNjZW5kYW50cygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJudW1EZXNjZW5kYW50c1wiXVxuICAgICAgPyBwYXJzZUludCh0aGlzLnByb3BlcnRpZXNbXCJudW1EZXNjZW5kYW50c1wiXSlcbiAgICAgIDogMDtcbiAgfVxuXG4gIGdldEhpZXJhcmNoaWNhbFBhcmVudFJlaWZpY2F0aW9uQXhpb21zKHBhcmVudElyaTogc3RyaW5nKTogYW55IHtcbiAgICBjb25zdCBoaWVyYXJjaGljYWxQYXJlbnRzID0gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaGllcmFyY2hpY2FsUGFyZW50XCJdXG4gICAgKTtcblxuICAgIGZvciAoY29uc3QgcCBvZiBoaWVyYXJjaGljYWxQYXJlbnRzKSB7XG4gICAgICBpZiAocC52YWx1ZSA9PT0gcGFyZW50SXJpKSB7XG4gICAgICAgIHJldHVybiBwLmdldE1ldGFkYXRhKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgICBnZXRUeXBlUGx1cmFsKCk6IFwiY2xhc3Nlc1wiIHwgXCJwcm9wZXJ0aWVzXCIgfCBcImluZGl2aWR1YWxzXCIgfCBcImVudGl0aWVzXCIge1xuICAgICAgY29uc3QgdHlwZSA9IHRoaXMuZ2V0VHlwZSgpO1xuXG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIFwiY2xhc3NcIjpcbiAgICAgICAgcmV0dXJuIFwiY2xhc3Nlc1wiO1xuICAgICAgY2FzZSBcInByb3BlcnR5XCI6XG4gICAgICAgIHJldHVybiBcInByb3BlcnRpZXNcIjtcbiAgICAgIGNhc2UgXCJpbmRpdmlkdWFsXCI6XG4gICAgICAgIHJldHVybiBcImluZGl2aWR1YWxzXCI7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIHR5cGVcIik7XG4gICAgfVxuICB9XG59XG4iLCAiaW1wb3J0IHtDbGFzc30gZnJvbSBcIi4uL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7T0xTNEVudGl0eX0gZnJvbSBcIi4vT0xTNEVudGl0eVwiO1xuXG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi4vUmVpZmllZFwiO1xuXG5pbXBvcnQgeyBhc0FycmF5IH0gZnJvbSBcIi4uLy4uL2FwcC91dGlsXCI7XG5cbmV4cG9ydCBjbGFzcyBPTFM0Q2xhc3MgZXh0ZW5kcyBPTFM0RW50aXR5IGltcGxlbWVudHMgQ2xhc3Mge1xuICBnZXRQYXJlbnRzKCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaGllcmFyY2hpY2FsUGFyZW50XCJdXG4gICAgKTtcbiAgfVxuICBnZXRTdXBlckVudGl0aWVzKCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI3N1YkNsYXNzT2ZcIl1cbiAgICApO1xuICB9XG4gIGdldEVxdWl2YWxlbnRzKCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjZXF1aXZhbGVudENsYXNzXCJdXG4gICAgKTtcbiAgfVxuXG4gIGdldERpc2pvaW50V2l0aCgpIHtcblx0cmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzWydodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNkaXNqb2ludFdpdGgnXSk7XG4gIH1cblxuICBnZXRIYXNLZXkoKSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzWydodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNoYXNLZXknXSk7XG4gIH1cblxuICBnZXRTdWJzZXRzKCk6IGFueVtdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LmdlbmVvbnRvbG9neS5vcmcvZm9ybWF0cy9vYm9Jbk93bCNpblN1YnNldFwiXSkgfHwgW107XG4gIH1cbn1cbiIsICJpbXBvcnQge1Byb3BlcnR5fSBmcm9tIFwiLi4vaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHtPTFM0RW50aXR5fSBmcm9tIFwiLi9PTFM0RW50aXR5XCI7XG5cbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuLi9SZWlmaWVkXCI7XG5cbmltcG9ydCB7IGFzQXJyYXkgfSBmcm9tIFwiLi4vLi4vYXBwL3V0aWxcIjtcblxuZXhwb3J0IGNsYXNzIE9MUzRQcm9wZXJ0eSBleHRlbmRzIE9MUzRFbnRpdHkgaW1wbGVtZW50cyBQcm9wZXJ0eXtcbiAgZ2V0UGFyZW50cygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNzdWJQcm9wZXJ0eU9mXCJdXG4gICAgKTtcbiAgfVxuICBnZXRTdXBlckVudGl0aWVzKCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI3N1YlByb3BlcnR5T2ZcIl1cbiAgICApO1xuICB9XG4gIGdldEVxdWl2YWxlbnRzKCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjZXF1aXZhbGVudFByb3BlcnR5XCJdXG4gICAgKTtcbiAgfVxuXG5cbiAgZ2V0RGlzam9pbnRXaXRoKCkge1xuXHRyZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbJ2h0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI3Byb3BlcnR5RGlzam9pbnRXaXRoJ10pXG4gIH1cblxuICBnZXRJbnZlcnNlT2YoKSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjaW52ZXJzZU9mXCJdKTtcbiAgfVxuXG4gIGdldERvbWFpbigpIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNkb21haW4nXSlcbiAgfVxuXG4gIGdldFJhbmdlKCkge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1snaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI3JhbmdlJ10pXG4gIH1cblxuICBnZXRQcm9wZXJ0eUNoYWlucygpOlJlaWZpZWQ8YW55PltdIHtcblx0cmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55Pihcblx0XHR0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNwcm9wZXJ0eUNoYWluQXhpb21cIl1cblx0KVxuICB9XG5cbn1cbiIsICJpbXBvcnQge0luZGl2aWR1YWx9IGZyb20gXCIuLi9pbnRlcmZhY2VzXCI7XG5pbXBvcnQge09MUzRFbnRpdHl9IGZyb20gXCIuL09MUzRFbnRpdHlcIjtcblxuaW1wb3J0IFJlaWZpZWQgZnJvbSBcIi4uL1JlaWZpZWRcIjtcblxuaW1wb3J0IHsgYXNBcnJheSB9IGZyb20gXCIuLi8uLi9hcHAvdXRpbFwiO1xuXG5leHBvcnQgY2xhc3MgT0xTNEluZGl2aWR1YWwgZXh0ZW5kcyBPTFM0RW50aXR5IGltcGxlbWVudHMgSW5kaXZpZHVhbHtcbiAgZ2V0UGFyZW50cygpIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiZGlyZWN0UGFyZW50XCJdXG4gICAgKTtcbiAgfVxuICBnZXRFcXVpdmFsZW50cygpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgZ2V0U3VwZXJFbnRpdGllcygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihbXSlcbiAgfVxuXG4gIGdldERpZmZlcmVudEZyb20oKSB7XG4gICAgcmV0dXJuIGFzQXJyYXkoXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNkaWZmZXJlbnRGcm9tXCJdXG4gICAgKTtcbiAgfVxuXG4gIGdldFNhbWVBcygpIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNzYW1lQXNcIl0pO1xuICB9XG5cbiAgZ2V0SW5kaXZpZHVhbFR5cGVzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCByZGZUeXBlczogYW55ID0gdGhpcy5nZXRSZGZUeXBlcygpO1xuXG4gICAgaWYgKCFyZGZUeXBlcyB8fCAhQXJyYXkuaXNBcnJheShyZGZUeXBlcykpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmRmVHlwZXMuZmlsdGVyKFxuICAgICAgKHQ6IGFueSkgPT5cbiAgICAgICAgdCAhPT0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNOYW1lZEluZGl2aWR1YWxcIiAmJlxuXHRcdCggKCEgKHR5cGVvZiB0ID09PSAnc3RyaW5nJykgfHwgIXQuc3RhcnRzV2l0aChcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNcIikpKVxuICAgICk7XG4gIH1cblxufVxuIiwgImltcG9ydCB7T250b2xvZ3l9IGZyb20gXCIuLi9pbnRlcmZhY2VzXCI7XG5pbXBvcnQge09MUzRUaGluZ30gZnJvbSBcIi4vT0xTNFRoaW5nXCI7XG5cbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuLi9SZWlmaWVkXCI7XG5cbmltcG9ydCB7IGFzQXJyYXkgfSBmcm9tIFwiLi4vLi4vYXBwL3V0aWxcIjtcblxuZXhwb3J0IGNsYXNzIE9MUzRPbnRvbG9neSBleHRlbmRzIE9MUzRUaGluZyBpbXBsZW1lbnRzIE9udG9sb2d5e1xuICBnZXRPbnRvbG9neUlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcIm9udG9sb2d5SWRcIl07XG4gIH1cbiAgZ2V0TmFtZSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IG5hbWVzID0gUmVpZmllZC5mcm9tSnNvbjxzdHJpbmc+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wibGFiZWxcIl0gfHwgdGhpcy5wcm9wZXJ0aWVzW1widGl0bGVcIl0gfHwgXCJcIlxuICAgICk7XG4gICAgcmV0dXJuIChuYW1lc1swXSAmJiBuYW1lc1swXS52YWx1ZSkgfHwgdGhpcy5nZXRPbnRvbG9neUlkKCk7XG4gIH1cbiAgZ2V0RGVzY3JpcHRpb24oKTogc3RyaW5nIHtcbiAgICBjb25zdCBkZXNjcmlwdGlvbnMgPSBSZWlmaWVkLmZyb21Kc29uPHN0cmluZz4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJkZWZpbml0aW9uXCJdIHx8IHRoaXMucHJvcGVydGllc1tcImRlc2NyaXB0aW9uXCJdIHx8IFwiXCJcbiAgICApO1xuICAgIHJldHVybiAoZGVzY3JpcHRpb25zWzBdICYmIGRlc2NyaXB0aW9uc1swXS52YWx1ZSkgfHwgXCJcIjtcbiAgfVxuXG4gIGdldENyZWF0b3JzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xL2NyZWF0b3JcIl0pO1xuICB9XG5cbiAgZ2V0U291cmNlRmlsZVRpbWVzdGFtcCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJzb3VyY2VGaWxlVGltZXN0YW1wXCJdO1xuICB9XG4gIGdldE51bUVudGl0aWVzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHBhcnNlSW50KHRoaXMucHJvcGVydGllc1tcIm51bWJlck9mRW50aXRpZXNcIl0pO1xuICB9XG4gIGdldE51bUNsYXNzZXMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcGFyc2VJbnQodGhpcy5wcm9wZXJ0aWVzW1wibnVtYmVyT2ZDbGFzc2VzXCJdKTtcbiAgfVxuICBnZXROdW1Qcm9wZXJ0aWVzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHBhcnNlSW50KHRoaXMucHJvcGVydGllc1tcIm51bWJlck9mUHJvcGVydGllc1wiXSk7XG4gIH1cbiAgZ2V0TnVtSW5kaXZpZHVhbHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcGFyc2VJbnQodGhpcy5wcm9wZXJ0aWVzW1wibnVtYmVyT2ZJbmRpdmlkdWFsc1wiXSk7XG4gIH1cbiAgZ2V0TG9nb1VSTCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJkZXBpY3RlZF9ieVwiXSB8fCB1bmRlZmluZWQ7XG4gIH1cbiAgZ2V0T250b2xvZ3lQdXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcIm9udG9sb2d5X3B1cmxcIl07XG4gIH1cbiAgZ2V0SG9tZXBhZ2UoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaG9tZXBhZ2VcIl07XG4gIH1cbiAgZ2V0TWFpbGluZ0xpc3QoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wibWFpbGluZ19saXN0XCJdO1xuICB9XG4gIGdldFRyYWNrZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1widHJhY2tlclwiXTtcbiAgfVxuICBnZXRWZXJzaW9uSXJpKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI3ZlcnNpb25JUklcIl07XG4gIH1cbiAgZ2V0VmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCN2ZXJzaW9uSW5mb1wiXTtcbiAgfVxuICBnZXRWZXJzaW9uRnJvbUlyaSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHZlcnNpb25JcmkgPSB0aGlzLmdldFZlcnNpb25JcmkoKTtcbiAgICBpZiAoIXZlcnNpb25JcmkpIHJldHVybiBcIlwiO1xuICAgIGNvbnN0IHZlcnNpb25Gcm9tRGF0ZSA9IHZlcnNpb25JcmkubWF0Y2goL1xcZHs0fS1cXGR7Mn0tXFxkezJ9Lyk7XG5cbiAgICBpZiAodmVyc2lvbkZyb21EYXRlICYmIHZlcnNpb25Gcm9tRGF0ZS5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gdmVyc2lvbkZyb21EYXRlWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB2ZXJzaW9uRnJvbU51bWJlciA9IHZlcnNpb25JcmkubWF0Y2goL1xcL3ZbZC5dLipcXC8vKTtcbiAgICAgIHJldHVybiB2ZXJzaW9uRnJvbU51bWJlclxuICAgICAgICA/IHZlcnNpb25Gcm9tTnVtYmVyWzBdLnJlcGxhY2VBbGwoXCIvXCIsIFwiXCIpLnJlcGxhY2UoXCJ2XCIsIFwiXCIpXG4gICAgICAgIDogXCJcIjtcbiAgICB9XG4gIH1cbiAgZ2V0TG9hZGVkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImxvYWRlZFwiXTtcbiAgfVxuICBnZXRBbm5vdGF0aW9uUHJlZGljYXRlcygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgYW5ub3RhdGlvblByZWRpY2F0ZXMgPSBuZXcgU2V0KCk7XG5cbiAgICBmb3IgKGNvbnN0IHByZWRpY2F0ZSBvZiBPYmplY3Qua2V5cyh0aGlzLnByb3BlcnRpZXMpKSB7XG4gICAgICAvLyBwcm9wZXJ0aWVzIHdpdGhvdXQgYW4gSVJJIGFyZSB0aGluZ3MgdGhhdCB3ZXJlIGFkZGVkIGJ5IHJkZjJqc29uIHNvIHNob3VsZCBub3RcbiAgICAgIC8vIGJlIGluY2x1ZGVkIGFzIGFubm90YXRpb25zXG4gICAgICBpZiAocHJlZGljYXRlLmluZGV4T2YoXCI6Ly9cIikgPT09IC0xKSBjb250aW51ZTtcblxuICAgICAgaWYgKHByZWRpY2F0ZSA9PT0gXCJodHRwOi8vcHVybC5vYm9saWJyYXJ5Lm9yZy9vYm8vSUFPXzAwMDA3MDBcIikge1xuICAgICAgICAvLyBcImhhcyBwcmVmZXJyZWQgcm9vdCB0ZXJtXCJcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIGFueXRoaW5nIGluIHRoZSByZGYsIHJkZnMsIG93bCBuYW1lc3BhY2VzIGFyZW4ndCBjb25zaWRlcmVkIGFubm90YXRpb25zXG4gICAgICBpZiAoXG4gICAgICAgICEoXG4gICAgICAgICAgcHJlZGljYXRlLnN0YXJ0c1dpdGgoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjXCIpIHx8XG4gICAgICAgICAgcHJlZGljYXRlLnN0YXJ0c1dpdGgoXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjXCIpIHx8XG4gICAgICAgICAgcHJlZGljYXRlLnN0YXJ0c1dpdGgoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNcIilcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIGFubm90YXRpb25QcmVkaWNhdGVzLmFkZChwcmVkaWNhdGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBBcnJheS5mcm9tKGFubm90YXRpb25QcmVkaWNhdGVzKSBhcyBzdHJpbmdbXTtcbiAgfVxuICBnZXRQcmVmZXJyZWRSb290cygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiaGFzUHJlZmVycmVkUm9vdFwiXSk7XG4gIH1cbiAgZ2V0TGFuZ3VhZ2VzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJsYW5ndWFnZVwiXSk7XG4gIH1cbiAgZ2V0SW1wb3J0c0Zyb20oKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImltcG9ydHNGcm9tXCJdKTtcbiAgfVxuICBnZXRFeHBvcnRzVG8oKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImV4cG9ydHNUb1wiXSk7XG4gIH1cblxuICAvLyBUT0RPOiBub3QgYXZhaWxhYmxlP1xuICBnZXRBbGxvd0Rvd25sb2FkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImFsbG93RG93bmxvYWRcIl07XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBUaGluZywgRW50aXR5LCBDbGFzcywgUHJvcGVydHksIEluZGl2aWR1YWwsIE9udG9sb2d5IH0gZnJvbSBcIi4vaW50ZXJmYWNlc1wiO1xuXG4vLyBSRUFET05MWSBhcnJheXMgY29udGFpbmluZyB0aGUgc3RyaW5ncyBkZWZpbmluZyBhIE1vZGVsIE9iamVjdCBUeXBlXG5jb25zdCBjbGFzc1R5cGVOYW1lcyA9IFtcImNsYXNzXCIgLCBcInRlcm1cIl0gYXMgY29uc3Q7XG5jb25zdCBwcm9wZXJ0eVR5cGVOYW1lcyA9IFtcInByb3BlcnR5XCJdIGFzIGNvbnN0O1xuY29uc3QgaW5kaXZpZHVhbFR5cGVOYW1lcyA9IFtcImluZGl2aWR1YWxcIl0gYXMgY29uc3Q7XG5leHBvcnQgY29uc3Qgb250b2xvZ3lUeXBlTmFtZXMgPSBbXCJvbnRvbG9neVwiXSBhcyBjb25zdDtcbmV4cG9ydCBjb25zdCBlbnRpdHlUeXBlTmFtZXMgPSBbLi4uY2xhc3NUeXBlTmFtZXMsIC4uLmluZGl2aWR1YWxUeXBlTmFtZXMsIC4uLnByb3BlcnR5VHlwZU5hbWVzXSBhcyBjb25zdDtcbmV4cG9ydCBjb25zdCB0aGluZ1R5cGVOYW1lcyA9IFsuLi5lbnRpdHlUeXBlTmFtZXMsIC4uLm9udG9sb2d5VHlwZU5hbWVzXSBhcyBjb25zdDtcblxuLy8gVHlwZS1jcmVhdGlvbiBvdXQgb2YgUkVBRE9OTFkgYXJyYXlzXG5leHBvcnQgdHlwZSBDbGFzc1R5cGVOYW1lID0gdHlwZW9mIGNsYXNzVHlwZU5hbWVzW251bWJlcl07XG5leHBvcnQgdHlwZSBQcm9wZXJ0eVR5cGVOYW1lID0gdHlwZW9mIHByb3BlcnR5VHlwZU5hbWVzW251bWJlcl07XG5leHBvcnQgdHlwZSBJbmRpdmlkdWFsVHlwZU5hbWUgPSB0eXBlb2YgaW5kaXZpZHVhbFR5cGVOYW1lc1tudW1iZXJdO1xuZXhwb3J0IHR5cGUgT250b2xvZ3lUeXBlTmFtZSA9IHR5cGVvZiBvbnRvbG9neVR5cGVOYW1lc1tudW1iZXJdO1xuZXhwb3J0IHR5cGUgRW50aXR5VHlwZU5hbWUgPSB0eXBlb2YgZW50aXR5VHlwZU5hbWVzW251bWJlcl07XG5leHBvcnQgdHlwZSBUaGluZ1R5cGVOYW1lID0gdHlwZW9mIHRoaW5nVHlwZU5hbWVzW251bWJlcl07XG5cbi8vIEZ1bmN0aW9ucyBjaGVja2luZyBzdHJpbmcgYWdhaW5zdCB0eXBlIG5hbWVzLCByZXR1cm5pbmcgc3RyaW5nIGFzIHR5cGUgbmFtZSBpZiBjaGVjayBwYXNzZXNcbmV4cG9ydCBmdW5jdGlvbiBpc0NsYXNzVHlwZU5hbWUodHlwZTogc3RyaW5nKSA6IHR5cGUgaXMgQ2xhc3NUeXBlTmFtZSB7XG4gICAgcmV0dXJuIGNsYXNzVHlwZU5hbWVzLmluY2x1ZGVzKHR5cGUgYXMgQ2xhc3NUeXBlTmFtZSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNQcm9wZXJ0eVR5cGVOYW1lKHR5cGU6IHN0cmluZykgOiB0eXBlIGlzIFByb3BlcnR5VHlwZU5hbWUge1xuICAgIHJldHVybiBwcm9wZXJ0eVR5cGVOYW1lcy5pbmNsdWRlcyh0eXBlIGFzIFByb3BlcnR5VHlwZU5hbWUpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzSW5kaXZpZHVhbFR5cGVOYW1lKHR5cGU6IHN0cmluZykgOiB0eXBlIGlzIEluZGl2aWR1YWxUeXBlTmFtZSB7XG4gICAgcmV0dXJuIGluZGl2aWR1YWxUeXBlTmFtZXMuaW5jbHVkZXModHlwZSBhcyBJbmRpdmlkdWFsVHlwZU5hbWUpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzT250b2xvZ3lUeXBlTmFtZSh0eXBlOiBzdHJpbmcpIDogdHlwZSBpcyBPbnRvbG9neVR5cGVOYW1lIHtcbiAgICByZXR1cm4gb250b2xvZ3lUeXBlTmFtZXMuaW5jbHVkZXModHlwZSBhcyBPbnRvbG9neVR5cGVOYW1lKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0VudGl0eVR5cGVOYW1lKHR5cGU6IHN0cmluZykgOiB0eXBlIGlzIEVudGl0eVR5cGVOYW1lIHtcbiAgICByZXR1cm4gZW50aXR5VHlwZU5hbWVzLmluY2x1ZGVzKHR5cGUgYXMgRW50aXR5VHlwZU5hbWUpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzVGhpbmdUeXBlTmFtZSh0eXBlOiBzdHJpbmcpIDogdHlwZSBpcyBUaGluZ1R5cGVOYW1lIHtcbiAgICByZXR1cm4gdGhpbmdUeXBlTmFtZXMuaW5jbHVkZXModHlwZSBhcyBUaGluZ1R5cGVOYW1lKTtcbn1cblxuLy8gRnVuY3Rpb25zIGNoZWNraW5nIFRoaW5nIG9iamVjdHMgYWdhaW5zdCBzcGVjaWZpYyB0eXBlICh2aWEgY2hlY2tpbmcgZ2V0VHlwZSgpIGFnYWluc3QgdHlwZSBuYW1lcyksIHJldHVybmluZyBvYmplY3QgYXMgc3BlY2lmaWMgdHlwZSBpZiBjaGVjayBwYXNzZXNcbmV4cG9ydCBmdW5jdGlvbiBpc0NsYXNzKHRoaW5nOiBUaGluZykgOiB0aGluZyBpcyBDbGFzcyB7XG4gICAgcmV0dXJuIGlzQ2xhc3NUeXBlTmFtZSh0aGluZy5nZXRUeXBlKCkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzUHJvcGVydHkodGhpbmc6IFRoaW5nKSA6IHRoaW5nIGlzIFByb3BlcnR5IHtcbiAgICByZXR1cm4gaXNQcm9wZXJ0eVR5cGVOYW1lKHRoaW5nLmdldFR5cGUoKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNJbmRpdmlkdWFsKHRoaW5nOiBUaGluZykgOiB0aGluZyBpcyBJbmRpdmlkdWFsIHtcbiAgICByZXR1cm4gaXNJbmRpdmlkdWFsVHlwZU5hbWUodGhpbmcuZ2V0VHlwZSgpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0VudGl0eSh0aGluZzogVGhpbmcpIDogdGhpbmcgaXMgRW50aXR5IHtcbiAgICByZXR1cm4gaXNFbnRpdHlUeXBlTmFtZSh0aGluZy5nZXRUeXBlKCkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzT250b2xvZ3kodGhpbmc6IFRoaW5nKSA6IHRoaW5nIGlzIE9udG9sb2d5IHtcbiAgICByZXR1cm4gaXNPbnRvbG9neVR5cGVOYW1lKHRoaW5nLmdldFR5cGUoKSk7XG59IiwgImltcG9ydCB7T0xTM09udG9sb2d5LCBPTFMzQ2xhc3MsIE9MUzNQcm9wZXJ0eSwgT0xTM0luZGl2aWR1YWx9IGZyb20gXCIuL29sczMtbW9kZWxcIjtcbmltcG9ydCB7T0xTNE9udG9sb2d5LCBPTFM0Q2xhc3MsIE9MUzRQcm9wZXJ0eSwgT0xTNEluZGl2aWR1YWx9IGZyb20gXCIuL29sczQtbW9kZWxcIjtcbmltcG9ydCB7VGhpbmd9IGZyb20gXCIuL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7VGhpbmdUeXBlTmFtZSwgaXNUaGluZ1R5cGVOYW1lfSBmcm9tIFwiLi9Nb2RlbFR5cGVDaGVja1wiO1xuaW1wb3J0IHthc0FycmF5fSBmcm9tIFwiLi4vYXBwL3V0aWxcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vZGVsT2JqZWN0KHJlc3BvbnNlOiBhbnkpIHtcbiAgICBsZXQgdXNlTGVnYWN5IDogYm9vbGVhbjtcbiAgICBpZihyZXNwb25zZVtcIl9lbWJlZGRlZFwiXSAhPT0gdW5kZWZpbmVkIHx8IHJlc3BvbnNlW1wibnVtYmVyT2ZUZXJtc1wiXSAhPT0gdW5kZWZpbmVkKSB1c2VMZWdhY3kgPSB0cnVlO1xuICAgIGVsc2UgaWYocmVzcG9uc2VbXCJlbGVtZW50c1wiXSAhPT0gdW5kZWZpbmVkIHx8IHJlc3BvbnNlW1wibnVtYmVyT2ZDbGFzc2VzXCJdICE9PSB1bmRlZmluZWQpIHVzZUxlZ2FjeSA9IGZhbHNlO1xuICAgIGVsc2UgdGhyb3cgRXJyb3IoXCJSZXNwb25zZSBzdHJ1Y3R1cmUgZG9lcyBub3QgY29ycmVsYXRlIHRvIGFueSBvZiB0aGUgZmVhdHVyZWQgcmVzcG9uc2Ugc3RydWN0dXJlczogXFxuICR7cmVzcG9uc2UudG9TdHJpbmcoKX1cIik7XG5cbiAgICBsZXQgZW50aXR5VHlwZSA6IFRoaW5nVHlwZU5hbWUgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgaWYodXNlTGVnYWN5KSB7XG4gICAgICAgIGlmKHJlc3BvbnNlW1wiX2VtYmVkZGVkXCJdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGVudGl0eVR5cGUgPSBcIm9udG9sb2d5XCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZihyZXNwb25zZVtcIl9lbWJlZGRlZFwiXVtcInRlcm1zXCJdICE9PSB1bmRlZmluZWQpIGVudGl0eVR5cGUgPSBcInRlcm1cIjtcbiAgICAgICAgICAgIGVsc2UgaWYocmVzcG9uc2VbXCJfZW1iZWRkZWRcIl1bXCJwcm9wZXJ0aWVzXCJdICE9PSB1bmRlZmluZWQpIGVudGl0eVR5cGUgPSBcInByb3BlcnR5XCI7XG4gICAgICAgICAgICBlbHNlIGlmKHJlc3BvbnNlW1wiX2VtYmVkZGVkXCJdW1wiaW5kaXZpZHVhbHNcIl0gIT09IHVuZGVmaW5lZCkgZW50aXR5VHlwZSA9IFwiaW5kaXZpZHVhbFwiO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZihyZXNwb25zZVtcImVsZW1lbnRzXCJdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGVudGl0eVR5cGUgPSBcIm9udG9sb2d5XCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBsZXQgdHlwZXMgOiBzdHJpbmdbXSA9IHJlc3BvbnNlW1wiZWxlbWVudHNcIl1bMF1bXCJ0eXBlXCJdO1xuICAgICAgICAgICAgdHlwZXMgPSB0eXBlcy5maWx0ZXIoKGVsZW0gOiBzdHJpbmcpID0+IGlzVGhpbmdUeXBlTmFtZShlbGVtKSk7IC8vIGZpbHRlciBub3QgbWF0Y2hpbmcgc3RyaW5nc1xuICAgICAgICAgICAgdHlwZXMgPSBbLi4ubmV3IFNldDxzdHJpbmc+KHR5cGVzKV07IC8vIHJlbW92ZSBkdXBsaWNhdGVzXG5cbiAgICAgICAgICAgIGlmKHR5cGVzLmxlbmd0aCA9PT0gMSkgZW50aXR5VHlwZSA9IHR5cGVzWzBdIGFzIFRoaW5nVHlwZU5hbWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZihlbnRpdHlUeXBlID09PSB1bmRlZmluZWQpIHRocm93IEVycm9yKFwiRW50aXR5IHR5cGUgY291bGQgbm90IGJlIGNvcnJlY3RseSBpbmZlcnJlZC5cIik7XG5cbiAgICByZXR1cm4gY3JlYXRlTW9kZWxPYmplY3RXaXRoRW50aXR5VHlwZVdpdGhVc2VMZWdhY3kocmVzcG9uc2UsIGVudGl0eVR5cGUsIHVzZUxlZ2FjeSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU1vZGVsT2JqZWN0V2l0aEVudGl0eVR5cGVXaXRoVXNlTGVnYWN5KHJlc3BvbnNlOiBhbnksIGVudGl0eVR5cGU6IHN0cmluZywgdXNlTGVnYWN5OiBib29sZWFuKTogVGhpbmcge1xuICAgIHN3aXRjaCAoZW50aXR5VHlwZSkge1xuICAgICAgICBjYXNlIFwib250b2xvZ3lcIjpcbiAgICAgICAgICAgIHJldHVybiB1c2VMZWdhY3kgPyBuZXcgT0xTM09udG9sb2d5KHJlc3BvbnNlKSA6IG5ldyBPTFM0T250b2xvZ3kocmVzcG9uc2UpO1xuXG4gICAgICAgIGNhc2UgXCJ0ZXJtXCIgOlxuICAgICAgICBjYXNlIFwiY2xhc3NcIjogLy8gYWxsb3cgQk9USCwgZXZlbiBpZiBpdCBzaG91bGQgYWN0dWFsbHkgYmUgXCJ0ZXJtXCJcbiAgICAgICAgICAgIHJldHVybiB1c2VMZWdhY3kgPyBuZXcgT0xTM0NsYXNzKGdldFByZWZlcnJlZE9udG9sb2d5SlNPTihhc0FycmF5KHJlc3BvbnNlW1wiX2VtYmVkZGVkXCJdW1widGVybXNcIl0pLCB1c2VMZWdhY3kpKSA6IG5ldyBPTFM0Q2xhc3MoZ2V0UHJlZmVycmVkT250b2xvZ3lKU09OKGFzQXJyYXkocmVzcG9uc2VbXCJlbGVtZW50c1wiXSksIHVzZUxlZ2FjeSkpO1xuXG4gICAgICAgIGNhc2UgXCJwcm9wZXJ0eVwiOlxuICAgICAgICAgICAgcmV0dXJuIHVzZUxlZ2FjeSA/IG5ldyBPTFMzUHJvcGVydHkoZ2V0UHJlZmVycmVkT250b2xvZ3lKU09OKGFzQXJyYXkocmVzcG9uc2VbXCJfZW1iZWRkZWRcIl1bXCJwcm9wZXJ0aWVzXCJdKSwgdXNlTGVnYWN5KSkgOiBuZXcgT0xTNFByb3BlcnR5KGdldFByZWZlcnJlZE9udG9sb2d5SlNPTihhc0FycmF5KHJlc3BvbnNlW1wiZWxlbWVudHNcIl0pLCB1c2VMZWdhY3kpKTtcblxuICAgICAgICBjYXNlIFwiaW5kaXZpZHVhbFwiOlxuICAgICAgICAgICAgcmV0dXJuIHVzZUxlZ2FjeSA/IG5ldyBPTFMzSW5kaXZpZHVhbChnZXRQcmVmZXJyZWRPbnRvbG9neUpTT04oYXNBcnJheShyZXNwb25zZVtcIl9lbWJlZGRlZFwiXVtcImluZGl2aWR1YWxzXCJdKSwgdXNlTGVnYWN5KSkgOiBuZXcgT0xTNEluZGl2aWR1YWwoZ2V0UHJlZmVycmVkT250b2xvZ3lKU09OKGFzQXJyYXkocmVzcG9uc2VbXCJlbGVtZW50c1wiXSksIHVzZUxlZ2FjeSkpO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBFcnJvcignSW52YWxpZCBlbnRpdHkgdHlwZSBcIicgKyBlbnRpdHlUeXBlICsgJ1wiLiBNdXN0IGJlIG9uZSBvZiB7XCJ0ZXJtXCIsIFwiY2xhc3NcIiwgXCJvbnRvbG9neVwiLCBcInByb3BlcnR5XCIsIFwiaW5kaXZpZHVhbFwifScpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBKU09OIG9mIHRoZSBlbnRpdHkgaW4gaXRzIGRlZmluaW5nIG9udG9sb2d5LCBvciwgaWYgbm90IGF2YWlsYWJsZSwganVzdCB0aGUgZmlyc3QgSlNPTiBpbiB0aGUgYXJyYXkuXG4gKiBJZiBvbnRvbG9neUlkIHdhcyBwcm92aWRlZCBpbiB0aGUgcmVzcG9uc2UgcmVxdWVzdCwgdGhlIGFycmF5IHNob3VsZCBvbmx5IGNvbnRhaW4gb25lIGVsZW1lbnQsIHRodXMgdGhlIGZ1bmN0aW9uYWxpdHkgaXMgYXMgZXhwZWN0ZWQgYXMgd2VsbFxuICogQHBhcmFtIGVudGl0eUFycmF5UmVzcG9uc2UgdGhlIHN1Yi1yZXNwb25zZSBvZiB0aGUgaW5pdGlhbCBxdWVyeSByZXNwb25zZSBjb250YWluaW5nIGp1c3QgdGhlIGVudGl0eSBhcnJheVxuICogQHBhcmFtIHVzZUxlZ2FjeSBhcGkgdmVyc2lvbiAobmVlZGVkIGJlY2F1c2Uga2V5IGdpdmluZyBpbmZvcm1hdGlvbiBhYm91dCBkZWZpbmluZyBvbnRvbG9neSBoYXMgZGlmZmVyZW50IG5hbWVzIGluIGJvdGggdmVyc2lvbnMpXG4gKi9cbmZ1bmN0aW9uIGdldFByZWZlcnJlZE9udG9sb2d5SlNPTihlbnRpdHlBcnJheVJlc3BvbnNlOiBhbnlbXSwgdXNlTGVnYWN5OiBib29sZWFuKSB7XG4gICAgY29uc3QgZGVmaW5pbmdPbnRvbG9neUFyciA9IGFzQXJyYXkoZW50aXR5QXJyYXlSZXNwb25zZSkuZmlsdGVyKChlbnRpdHkpID0+IHVzZUxlZ2FjeSA/IGVudGl0eVtcImlzX2RlZmluaW5nX29udG9sb2d5XCJdIDogZW50aXR5W1wiaXNEZWZpbmluZ09udG9sb2d5XCJdKTtcbiAgICBpZihkZWZpbmluZ09udG9sb2d5QXJyLmxlbmd0aCA+IDApIHJldHVybiBkZWZpbmluZ09udG9sb2d5QXJyWzBdO1xuICAgIGVsc2UgcmV0dXJuIGVudGl0eUFycmF5UmVzcG9uc2VbMF07XG59IiwgImltcG9ydCBheGlvcywge0F4aW9zSW5zdGFuY2UsIEF4aW9zUmVxdWVzdENvbmZpZ30gZnJvbSBcImF4aW9zXCI7XG5pbXBvcnQge2dldFVzZUxlZ2FjeX0gZnJvbSBcIi4uL2FwcC91dGlsXCI7XG5pbXBvcnQge2NyZWF0ZU1vZGVsT2JqZWN0fSBmcm9tIFwiLi4vbW9kZWwvTW9kZWxPYmplY3RDcmVhdG9yXCI7XG5pbXBvcnQge09udG9sb2d5LCBPbnRvbG9naWVzLCBFbnRpdHksIFRoaW5nfSBmcm9tIFwiLi4vbW9kZWwvaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHtPTFMzT250b2xvZ2llc30gZnJvbSBcIi4uL21vZGVsL29sczMtbW9kZWxcIjtcbmltcG9ydCB7XG4gIEVudGl0eVR5cGVOYW1lLFxuICBlbnRpdHlUeXBlTmFtZXMsXG4gIGlzRW50aXR5VHlwZU5hbWUsXG4gIGlzT250b2xvZ3lUeXBlTmFtZSxcbiAgb250b2xvZ3lUeXBlTmFtZXMsIFRoaW5nVHlwZU5hbWUsIHRoaW5nVHlwZU5hbWVzXG59IGZyb20gXCIuLi9tb2RlbC9Nb2RlbFR5cGVDaGVja1wiO1xuXG5pbnRlcmZhY2UgUGFnaW5hdGlvblBhcmFtcyB7XG4gIHNpemU/OiBzdHJpbmc7XG4gIHBhZ2U/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBTb3J0aW5nUGFyYW1zIHtcbiAgc29ydEZpZWxkOiBzdHJpbmcgfCBudW1iZXI7XG4gIHNvcnREaXI/OiBcImFzY1wiIHwgXCJkZXNjXCI7XG59XG5cbmludGVyZmFjZSBDb250ZW50UGFyYW1zIHtcbiAgb250b2xvZ3lJZD86IHN0cmluZztcbiAgdGVybUlyaT86IHN0cmluZztcbiAgcHJvcGVydHlJcmk/OiBzdHJpbmc7XG4gIGluZGl2aWR1YWxJcmk/OiBzdHJpbmc7XG4gIHF1ZXJ5U3RyaW5nPzogc3RyaW5nO1xuXG59XG5cbmV4cG9ydCB0eXBlIGFwaUNhbGxGbiA9IChwYWdpbmF0aW9uUGFyYW1zPzogUGFnaW5hdGlvblBhcmFtcywgc29ydGluZ1BhcmFtcz86IFNvcnRpbmdQYXJhbXMsIGNvbnRlbnRQYXJhbXM/OiBDb250ZW50UGFyYW1zLCBwYXJhbWV0ZXI/OiBzdHJpbmcsIHVzZUxlZ2FjeT86IGJvb2xlYW4sIGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWwpID0+IFByb21pc2U8YW55PjtcblxuaW50ZXJmYWNlIFNlYXJjaFF1ZXJ5UGFyYW1zIHtcbiAgcXVlcnk6IHN0cmluZztcbiAgZXhhY3RNYXRjaD86IGJvb2xlYW47XG4gIHNob3dPYnNvbGV0ZVRlcm1zPzogYm9vbGVhbjtcbiAgdHlwZXM/OiBzdHJpbmc7XG4gIG9udG9sb2d5Pzogc3RyaW5nO1xuICBncm91cEJ5SXJpPzogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIFNlbGVjdFF1ZXJ5UGFyYW1zIHtcbiAgcXVlcnk6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFN1Z2dlc3RRdWVyeVBhcmFtcyB7XG4gIHF1ZXJ5OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBKc1RyZWVQYXJhbXMge1xuICB2aWV3TW9kZT86IHN0cmluZztcbiAgc2libGluZ3M/OiBib29sZWFuO1xuICBjaGlsZD86IHN0cmluZztcbn1cblxuY29uc3QgREVGQVVMVF9TRUFSQ0hfUkVTVUxUU19QRVJfUEFHRSA9IDEwO1xuXG5leHBvcnQgY2xhc3MgT2xzQXBpIHtcbiAgcHJpdmF0ZSBheGlvc0luc3RhbmNlOiBBeGlvc0luc3RhbmNlO1xuXG4gIGNvbnN0cnVjdG9yKGFwaTogc3RyaW5nKSB7XG4gICAgdGhpcy5heGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKHtcbiAgICAgIGJhc2VVUkw6IGFwaSxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgQWNjZXB0OiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgQ29udGVudF9UeXBlOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkUGFyYW1zRm9yR2V0KHBhZ2luYXRpb25QYXJhbXM/OiBQYWdpbmF0aW9uUGFyYW1zLCBzb3J0aW5nUGFyYW1zPzogU29ydGluZ1BhcmFtcywgY29udGVudFBhcmFtcz86IENvbnRlbnRQYXJhbXMsIHBhcmFtZXRlcj86IHN0cmluZykge1xuICAgIGlmIChzb3J0aW5nUGFyYW1zKSB7XG4gICAgICByZXR1cm4geyAuLi5wYWdpbmF0aW9uUGFyYW1zLCBzb3J0OiBgJHtzb3J0aW5nUGFyYW1zLnNvcnRGaWVsZH0sJHtzb3J0aW5nUGFyYW1zLnNvcnREaXJ9YCwgLi4uY29udGVudFBhcmFtcywgLi4udGhpcy5idWlsZE90aGVyUGFyYW1zKHBhcmFtZXRlcil9O1xuICAgIH1cbiAgICByZXR1cm4geyAuLi5wYWdpbmF0aW9uUGFyYW1zLCAuLi5jb250ZW50UGFyYW1zLCAuLi50aGlzLmJ1aWxkT3RoZXJQYXJhbXMocGFyYW1ldGVyKSB9O1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFBhZ2luYXRpb25QYXJhbXMocGFnaW5hdGlvblBhcmFtcz86IFBhZ2luYXRpb25QYXJhbXMpIHtcbiAgICBjb25zdCBwYXJhbXM6IGFueSA9IHtcbiAgICAgIHJvd3M6IHBhZ2luYXRpb25QYXJhbXM/LnNpemUsXG4gICAgfTtcblxuICAgIGlmIChwYWdpbmF0aW9uUGFyYW1zPy5wYWdlKSB7XG4gICAgICBpZiAocGFnaW5hdGlvblBhcmFtcy5zaXplKSB7XG4gICAgICAgIHBhcmFtcy5zdGFydCA9ICgrcGFnaW5hdGlvblBhcmFtcy5wYWdlICogK3BhZ2luYXRpb25QYXJhbXMuc2l6ZSkudG9TdHJpbmcoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcmFtcy5zdGFydCA9ICgrcGFnaW5hdGlvblBhcmFtcy5wYWdlICogREVGQVVMVF9TRUFSQ0hfUkVTVUxUU19QRVJfUEFHRSkudG9TdHJpbmcoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcGFyYW1zO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFBhcmFtc0ZvclNlYXJjaChxdWVyeVBhcmFtczogU2VhcmNoUXVlcnlQYXJhbXMsIHBhZ2luYXRpb25QYXJhbXM6IFBhZ2luYXRpb25QYXJhbXMsIGNvbnRlbnRQYXJhbXM/OiBDb250ZW50UGFyYW1zLCBwYXJhbWV0ZXI/OiBzdHJpbmcpIHtcbiAgICBjb25zdCBwYXJhbXM6IGFueSA9IHtcbiAgICAgIHE6IHF1ZXJ5UGFyYW1zLnF1ZXJ5LFxuICAgICAgZXhhY3Q6IHF1ZXJ5UGFyYW1zLmV4YWN0TWF0Y2gsXG4gICAgICBvYnNvbGV0ZXM6IHF1ZXJ5UGFyYW1zLnNob3dPYnNvbGV0ZVRlcm1zLFxuICAgIH07XG5cbiAgICBpZiAocXVlcnlQYXJhbXMuZ3JvdXBCeUlyaSkge1xuICAgICAgcGFyYW1zLmdyb3VwRmllbGQgPSBxdWVyeVBhcmFtcy5ncm91cEJ5SXJpO1xuICAgIH1cblxuICAgIGlmIChxdWVyeVBhcmFtcy50eXBlcykge1xuICAgICAgcGFyYW1zLnR5cGUgPSBxdWVyeVBhcmFtcy50eXBlcztcbiAgICB9XG5cbiAgICBpZiAocXVlcnlQYXJhbXMub250b2xvZ3kpIHtcbiAgICAgIHBhcmFtcy5vbnRvbG9neSA9IHF1ZXJ5UGFyYW1zLm9udG9sb2d5O1xuICAgIH1cblxuICAgIHJldHVybiB7IC4uLnBhcmFtcywgLi4udGhpcy5idWlsZFBhZ2luYXRpb25QYXJhbXMocGFnaW5hdGlvblBhcmFtcyksIC4uLmNvbnRlbnRQYXJhbXMsIC4uLnRoaXMuYnVpbGRPdGhlclBhcmFtcyhwYXJhbWV0ZXIpIH07XG4gIH1cblxuICAvKipcbiAgICogRnVuY3Rpb24gZm9yIGNyZWF0aW5nIGFuIG9iamVjdCBmcm9tIHN0cmluZyBvZiBwYXJhbWV0ZXJzIGZvciBheGlvcyBpbnB1dCBwYXJhbXNcbiAgICogQHBhcmFtIHBhcmFtZXRlclxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBidWlsZE90aGVyUGFyYW1zKHBhcmFtZXRlcj86IHN0cmluZyl7XG4gICAgY29uc3QgcmVzdWx0OiBhbnkgPSB7fTtcbiAgICBpZiAocGFyYW1ldGVyKSB7XG4gICAgICBjb25zdCBwYXJhbXNTcGxpdHRlZCA9IHBhcmFtZXRlci5zcGxpdChcIiZcIilcblxuICAgICAgcGFyYW1zU3BsaXR0ZWQuZm9yRWFjaCgocGFyYW06IHN0cmluZykgPT4ge1xuICAgICAgY29uc3Qga2V5OiBzdHJpbmcgPSBwYXJhbS5zcGxpdChcIj1cIilbMF1cbiAgICAgIGNvbnN0IHZhbHVlOiBzdHJpbmcgPSBwYXJhbS5zcGxpdChcIj1cIilbMV1cbiAgICAgIHJlc3VsdFtrZXldID0gdmFsdWV9KVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkUGFyYW1zRm9yU2VsZWN0KHF1ZXJ5UGFyYW1zOiBTdWdnZXN0UXVlcnlQYXJhbXMsIHBhZ2luYXRpb25QYXJhbXM/OiBQYWdpbmF0aW9uUGFyYW1zLCBjb250ZW50UGFyYW1zPzogQ29udGVudFBhcmFtcywgcGFyYW1ldGVycz86IHN0cmluZykge1xuICAgIGNvbnN0IHBhcmFtczogYW55ID0ge1xuICAgICAgcTogcXVlcnlQYXJhbXMucXVlcnksXG4gICAgfTtcblxuICAgIHJldHVybiB7IC4uLnBhcmFtcywgLi4udGhpcy5idWlsZFBhZ2luYXRpb25QYXJhbXMocGFnaW5hdGlvblBhcmFtcyksIC4uLmNvbnRlbnRQYXJhbXMsICAuLi50aGlzLmJ1aWxkT3RoZXJQYXJhbXMocGFyYW1ldGVycykgfTtcbiAgfVxuXG5cbiAgcHJpdmF0ZSBidWlsZFBhcmFtc0ZvclN1Z2dlc3QocXVlcnlQYXJhbXM6IFN1Z2dlc3RRdWVyeVBhcmFtcywgcGFnaW5hdGlvblBhcmFtcz86IFBhZ2luYXRpb25QYXJhbXMsIGNvbnRlbnRQYXJhbXM/OiBDb250ZW50UGFyYW1zLCBwYXJhbWV0ZXJzPzogc3RyaW5nKSB7XG4gICAgY29uc3QgcGFyYW1zOiBhbnkgPSB7XG4gICAgICBxOiBxdWVyeVBhcmFtcy5xdWVyeSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHsgLi4ucGFyYW1zLCAuLi50aGlzLmJ1aWxkUGFnaW5hdGlvblBhcmFtcyhwYWdpbmF0aW9uUGFyYW1zKSwgLi4uY29udGVudFBhcmFtcywgIC4uLnRoaXMuYnVpbGRPdGhlclBhcmFtcyhwYXJhbWV0ZXJzKSB9O1xuICB9XG5cbiAgcHVibGljIGNoZWNrX2Zvcl9lcnJvcnMocmVzcG9uc2U6IGFueSk6IGFueSB7XG4gICAgLy8gcmVzb3VyY2Ugbm90IGZvdW5kL2lsbGVnYWwgYXJndW1lbnQgZXhjZXB0aW9uIGluIHNlbWFudGljbG9va3VwXG4gICAgaWYocmVzcG9uc2VbXCJlcnJvclwiXSkge1xuICAgICAgdGhyb3cgRXJyb3IocmVzcG9uc2VbXCJzdGF0dXNcIl0gKyBcIiBcIiArIHJlc3BvbnNlW1wiZXJyb3JcIl0gKyBcIiAtIFwiICsgcmVzcG9uc2VbXCJtZXNzYWdlXCJdICsgXCIgLSBcIiArIHJlc3BvbnNlW1wiZXhjZXB0aW9uXCJdICsgXCIgYXQgXCIgKyByZXNwb25zZVtcInBhdGhcIl0pO1xuICAgIH1cbiAgICAvLyBlbXB0eSByZXNwb25zZSAtIGNhbiBiZSBjYXVnaHQgaWYgdGhpcyBpcyBleHBlY3RlZCwgZS5nLiBmb3IgZmV0Y2hpbmcgaW5zdGFuY2VzXG4gICAgaWYocmVzcG9uc2VbXCJwYWdlXCJdICE9PSB1bmRlZmluZWQgJiYgcmVzcG9uc2VbXCJwYWdlXCJdW1widG90YWxFbGVtZW50c1wiXSA9PT0gMCkge1xuICAgICAgdGhyb3cgRXJyb3IoXCJSZXNwb25zZSBjb250YWlucyAwIGVsZW1lbnRzXCIpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzcG9uc2U7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbWFrZUNhbGwodXJsOiBzdHJpbmcsIGNvbmZpZzogQXhpb3NSZXF1ZXN0Q29uZmlnPGFueT4gfCB1bmRlZmluZWQsIHVzZUxlZ2FjeTogYm9vbGVhbikge1xuICAgIGNvbnN0IGFwaVZlcnNpb25QcmVmaXggPSBnZXRVc2VMZWdhY3kodXNlTGVnYWN5KSA/IFwiXCIgOiBcInYyL1wiO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gKGF3YWl0IHRoaXMuYXhpb3NJbnN0YW5jZS5nZXQoYXBpVmVyc2lvblByZWZpeCArIHVybCwgY29uZmlnKSkuZGF0YTtcbiAgICByZXR1cm4gdGhpcy5jaGVja19mb3JfZXJyb3JzKHJlc3BvbnNlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRPbnRvbG9naWVzOiBhcGlDYWxsRm4gPSBhc3luYyAocGFnaW5hdGlvblBhcmFtcywgc29ydGluZ1BhcmFtcywgY29udGVudFBhcmFtcywgcGFyYW1ldGVyKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMubWFrZUNhbGwoXCJvbnRvbG9naWVzXCIsIHsgcGFyYW1zOiB0aGlzLmJ1aWxkUGFyYW1zRm9yR2V0KHBhZ2luYXRpb25QYXJhbXMsIHNvcnRpbmdQYXJhbXMsIGNvbnRlbnRQYXJhbXMsIHBhcmFtZXRlcikgfSwgdHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggYWxsIG9udG9sb2dpZXMuIEN1cnJlbnRseSBvbmx5IGF2YWlsYWJsZSBmb3IgdXNlTGVnYWN5IHNpbmNlIHBhcmFtZXRlcnMgYXJlbid0IGFsbG93ZWQgaW4gdGhlIE9MUyB2MiBBUEkgb250b2xvZ2llcyBlbmRwb2ludFxuICAgKiBAcGFyYW0gcGFyYW1ldGVyXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0T250b2xvZ2llc0RhdGEocGFyYW1ldGVyPzogc3RyaW5nKTogUHJvbWlzZTxPbnRvbG9naWVzPiB7XG4gICAgbGV0IHJlc3BvbnNlO1xuICAgIGxldCBvbnRvbG9naWVzRGF0YTogT250b2xvZ3lbXSA9IFtdO1xuXG4gICAgbGV0IHBhZ2VOdW0gPSAwO1xuICAgIGNvbnN0IHBhZ2VTaXplID0gNTAwO1xuXG4gICAgZG8ge1xuICAgICAgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdldE9udG9sb2dpZXMoeyBzaXplOiBwYWdlU2l6ZS50b1N0cmluZygpLCBwYWdlOiBwYWdlTnVtLnRvU3RyaW5nKCkgfSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHBhcmFtZXRlcik7IC8vIGFzc3VtaW5nIHRoZXJlIGFyZSBubyBtb3JlIHRoYW4gNTAwIG9udG9sb2dpZXNcbiAgICAgIGlmICghcmVzcG9uc2UgfHwgIXJlc3BvbnNlW1wiX2VtYmVkZGVkXCJdIHx8ICFyZXNwb25zZVtcIl9lbWJlZGRlZFwiXVtcIm9udG9sb2dpZXNcIl0pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiT250b2xvZ2llcyBkYXRhIG5vdCBmb3VuZFwiKTsgLy9UT0RPIGNvbnNpc3RlbnQgZXJyb3IgaGFuZGxpbmdcbiAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgb250b2xvZ2llc0RhdGEgPSBvbnRvbG9naWVzRGF0YS5jb25jYXQocmVzcG9uc2VbXCJfZW1iZWRkZWRcIl1bXCJvbnRvbG9naWVzXCJdLm1hcCgob250b2xvZ3lEYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlTW9kZWxPYmplY3Qob250b2xvZ3lEYXRhKTtcbiAgICAgICAgfSkpO1xuICAgICAgfVxuXG4gICAgICBwYWdlTnVtICs9IDE7XG4gICAgfSB3aGlsZShwYWdlTnVtIDwgcmVzcG9uc2VbXCJwYWdlXCJdW1widG90YWxQYWdlc1wiXSk7XG5cbiAgICByZXR1cm4gbmV3IE9MUzNPbnRvbG9naWVzKG9udG9sb2dpZXNEYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJcyB1c2VkIHRvIGZldGNoIGFsbCB0ZXJtcyBmcm9tIHRoZSBhcGlcbiAgICogQHBhcmFtIHBhZ2luYXRpb25QYXJhbXNcbiAgICogQHBhcmFtIHNvcnRpbmdQYXJhbXNcbiAgICogQHBhcmFtIGNvbnRlbnRQYXJhbXNcbiAgICogQHBhcmFtIHBhcmFtZXRlclxuICAgKiBAcGFyYW0gYHVzZUxlZ2FjeWAgRGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZiBgdXNlTGVnYWN5YCwgYFwidGVybXNcImAgKGB1c2VMZWdhY3kgPT0gdHJ1ZWApIG9yIGBcImNsYXNzZXNcImAgKGB1c2VMZWdhY3kgPT0gZmFsc2VgKSB3aWxsIGJlIHVzZWQgaW4gdGhlIHF1ZXJ5IHVybFxuICAgKi9cbiAgcHVibGljIGdldFRlcm1zOiBhcGlDYWxsRm4gPSBhc3luYyAocGFnaW5hdGlvblBhcmFtcywgc29ydGluZ1BhcmFtcywgY29udGVudFBhcmFtcywgcGFyYW1ldGVyLCB1c2VMZWdhY3k/OiBib29sZWFuKSA9PiB7XG4gICAgY29uc3QgdHlwZVByZWZpeCA9IGdldFVzZUxlZ2FjeSh1c2VMZWdhY3kpID8gXCJ0ZXJtc1wiIDogXCJjbGFzc2VzXCI7XG4gICAgcmV0dXJuIHRoaXMubWFrZUNhbGwodHlwZVByZWZpeCwgeyBwYXJhbXM6IHRoaXMuYnVpbGRQYXJhbXNGb3JHZXQocGFnaW5hdGlvblBhcmFtcywgc29ydGluZ1BhcmFtcywgY29udGVudFBhcmFtcykgfSwgZ2V0VXNlTGVnYWN5KHVzZUxlZ2FjeSkpO1xuICB9XG5cbiAgcHVibGljIGdldFByb3BlcnRpZXM6IGFwaUNhbGxGbiA9IGFzeW5jIChwYWdpbmF0aW9uUGFyYW1zLCBzb3J0aW5nUGFyYW1zLCBjb250ZW50UGFyYW1zLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeT86IGJvb2xlYW4pID0+IHtcbiAgICByZXR1cm4gdGhpcy5tYWtlQ2FsbChcInByb3BlcnRpZXNcIiwgeyBwYXJhbXM6IHRoaXMuYnVpbGRQYXJhbXNGb3JHZXQocGFnaW5hdGlvblBhcmFtcywgc29ydGluZ1BhcmFtcywgY29udGVudFBhcmFtcykgfSwgZ2V0VXNlTGVnYWN5KHVzZUxlZ2FjeSkpO1xuICB9XG5cbiAgcHVibGljIGdldEluZGl2aWR1YWxzOiBhcGlDYWxsRm4gPSBhc3luYyAocGFnaW5hdGlvblBhcmFtcywgc29ydGluZ1BhcmFtcywgY29udGVudFBhcmFtcywgcGFyYW1ldGVyLCB1c2VMZWdhY3k/OiBib29sZWFuKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMubWFrZUNhbGwoXCJpbmRpdmlkdWFsc1wiLCB7IHBhcmFtczogdGhpcy5idWlsZFBhcmFtc0ZvckdldChwYWdpbmF0aW9uUGFyYW1zLCBzb3J0aW5nUGFyYW1zLCBjb250ZW50UGFyYW1zKSB9LCBnZXRVc2VMZWdhY3kodXNlTGVnYWN5KSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0T250b2xvZ3k6IGFwaUNhbGxGbiA9IGFzeW5jIChwYWdpbmF0aW9uUGFyYW1zLCBzb3J0aW5nUGFyYW1zLCBjb250ZW50UGFyYW1zLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeT86IGJvb2xlYW4pID0+IHtcbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAuLi50aGlzLmJ1aWxkT3RoZXJQYXJhbXMocGFyYW1ldGVyKVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMubWFrZUNhbGwoXCJvbnRvbG9naWVzL1wiK2NvbnRlbnRQYXJhbXM/Lm9udG9sb2d5SWQsIHBhcmFtcywgZ2V0VXNlTGVnYWN5KHVzZUxlZ2FjeSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIElzIHVzZWQgdG8gZmV0Y2ggYW4gZW50aXR5IGZyb20gdGhlIC9lbnRpdGllcyBlbmRwb2ludCBpbiB0aGUgYXBpIGluIG9sczQuXG4gICAqIEFsd2F5cyByZXF1aXJlcyB0aGUgcmVzcGVjdGl2ZSBvYmplY3QgSVJJIGluIGNvbnRlbnRQYXJhbXMgdG8gYmUgc2V0XG4gICAqIElmIG9udG9sb2d5SWQgaXMgdW5kZWZpbmVkIGluIGNvbnRlbnRQYXJhbXMsIHRoZSBvYmplY3Qgd2lsbCBiZSBxdWVyaWVkIGZyb20gYWxsIG9udG9sb2dpZXMsIGNvbnRhaW5pbmcgYSBsaXN0IG9mIHJlc3VsdHNcbiAgICogSWYgYW4gb250b2xvZ3lJZCBpcyBwcm92aWRlZCBpbiBjb250ZW50UGFyYW1zLCB0aGUgcmV0dXJuZWQgbGlzdCB3aWxsIG9ubHkgY29udGFpbiB0aGUgb2JqZWN0IGZyb20gdGhhdCBzcGVjaWZpYyBvbnRvbG9neVxuICAgKi9cbiAgcHVibGljIGdldEVudGl0eTogYXBpQ2FsbEZuID0gYXN5bmMgKHBhZ2luYXRpb25QYXJhbXMsIHNvcnRpbmdQYXJhbXMsIGNvbnRlbnRQYXJhbXMsIHBhcmFtZXRlciwgdXNlTGVnYWN5PzogYm9vbGVhbikgPT4ge1xuICAgIGNvbnN0IHF1ZXJ5UHJlZml4ID0gY29udGVudFBhcmFtcz8ub250b2xvZ3lJZCA/IFwib250b2xvZ2llcy9cIitjb250ZW50UGFyYW1zPy5vbnRvbG9neUlkK1wiL1wiIDogXCJcIlxuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIGlyaTogY29udGVudFBhcmFtcz8udGVybUlyaSxcbiAgICAgIC4uLnRoaXMuYnVpbGRPdGhlclBhcmFtcyhwYXJhbWV0ZXIpXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5tYWtlQ2FsbChxdWVyeVByZWZpeCtcImVudGl0aWVzXCIsIHsgcGFyYW1zOiBwYXJhbXMgfSwgZ2V0VXNlTGVnYWN5KHVzZUxlZ2FjeSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIElzIHVzZWQgdG8gZmV0Y2ggYSB0ZXJtIGZyb20gdGhlIGFwaVxuICAgKiBAcGFyYW0gcGFnaW5hdGlvblBhcmFtc1xuICAgKiBAcGFyYW0gc29ydGluZ1BhcmFtc1xuICAgKiBAcGFyYW0gYGNvbnRlbnRQYXJhbXNgIEFsd2F5cyByZXF1aXJlcyB0aGUgcmVzcGVjdGl2ZSBvYmplY3QgSVJJIGluIGBjb250ZW50UGFyYW1zYCB0byBiZSBzZXQuXG4gICAqICAgICAgICAgICAgICAgICAgICAgIElmIG9udG9sb2d5SWQgaXMgdW5kZWZpbmVkIGluIGNvbnRlbnRQYXJhbXMsIHRoZSBvYmplY3Qgd2lsbCBiZSBxdWVyaWVkIGZyb20gYWxsIG9udG9sb2dpZXMsIGNvbnRhaW5pbmcgYSBsaXN0IG9mIHJlc3VsdHMuXG4gICAqICAgICAgICAgICAgICAgICAgICAgIElmIGFuIG9udG9sb2d5SWQgaXMgcHJvdmlkZWQgaW4gY29udGVudFBhcmFtcywgdGhlIHJldHVybmVkIGxpc3Qgd2lsbCBvbmx5IGNvbnRhaW4gdGhlIG9iamVjdCBmcm9tIHRoYXQgc3BlY2lmaWMgb250b2xvZ3kuXG4gICAqIEBwYXJhbSBwYXJhbWV0ZXJcbiAgICogQHBhcmFtIGB1c2VMZWdhY3lgIERlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgYHVzZUxlZ2FjeWAsIGBcInRlcm1zXCJgIChgdXNlTGVnYWN5ID09IHRydWVgKSBvciBgXCJjbGFzc2VzXCJgIChgdXNlTGVnYWN5ID09IGZhbHNlYCkgd2lsbCBiZSB1c2VkIGluIHRoZSBxdWVyeSB1cmxcbiAgICogQHBhcmFtIGFib3J0U2lnbmFsXG4gICAqL1xuICBwdWJsaWMgZ2V0VGVybTogYXBpQ2FsbEZuID0gYXN5bmMgKHBhZ2luYXRpb25QYXJhbXMsIHNvcnRpbmdQYXJhbXMsIGNvbnRlbnRQYXJhbXMsIHBhcmFtZXRlciwgdXNlTGVnYWN5PzogYm9vbGVhbiwgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbCkgPT4ge1xuICAgIGNvbnN0IG9udG9sb2d5UHJlZml4ID0gY29udGVudFBhcmFtcz8ub250b2xvZ3lJZCA/IFwib250b2xvZ2llcy9cIitjb250ZW50UGFyYW1zPy5vbnRvbG9neUlkK1wiL1wiIDogXCJcIlxuICAgIGNvbnN0IHR5cGVQcmVmaXggPSBnZXRVc2VMZWdhY3kodXNlTGVnYWN5KSA/IFwidGVybXNcIiA6IFwiY2xhc3Nlc1wiO1xuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIGlyaTogY29udGVudFBhcmFtcz8udGVybUlyaSxcbiAgICAgIC4uLnRoaXMuYnVpbGRPdGhlclBhcmFtcyhwYXJhbWV0ZXIpXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5tYWtlQ2FsbChvbnRvbG9neVByZWZpeCArIHR5cGVQcmVmaXgsIHsgcGFyYW1zOiBwYXJhbXMsIHNpZ25hbDogYWJvcnRTaWduYWwgfSwgZ2V0VXNlTGVnYWN5KHVzZUxlZ2FjeSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIElzIHVzZWQgdG8gZmV0Y2ggYSBwcm9wZXJ0eSBmcm9tIHRoZSBhcGkgaW4gb2xzMy5cbiAgICogQWx3YXlzIHJlcXVpcmVzIHRoZSByZXNwZWN0aXZlIG9iamVjdCBJUkkgaW4gY29udGVudFBhcmFtcyB0byBiZSBzZXRcbiAgICogSWYgb250b2xvZ3lJZCBpcyB1bmRlZmluZWQgaW4gY29udGVudFBhcmFtcywgdGhlIG9iamVjdCB3aWxsIGJlIHF1ZXJpZWQgZnJvbSBhbGwgb250b2xvZ2llcywgY29udGFpbmluZyBhIGxpc3Qgb2YgcmVzdWx0c1xuICAgKiBJZiBhbiBvbnRvbG9neUlkIGlzIHByb3ZpZGVkIGluIGNvbnRlbnRQYXJhbXMsIHRoZSByZXR1cm5lZCBsaXN0IHdpbGwgb25seSBjb250YWluIHRoZSBvYmplY3QgZnJvbSB0aGF0IHNwZWNpZmljIG9udG9sb2d5XG4gICAqL1xuICBwdWJsaWMgZ2V0UHJvcGVydHk6IGFwaUNhbGxGbiA9IGFzeW5jIChwYWdpbmF0aW9uUGFyYW1zLCBzb3J0aW5nUGFyYW1zLCBjb250ZW50UGFyYW1zLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeT86IGJvb2xlYW4sIGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWwpID0+IHtcbiAgICBjb25zdCBxdWVyeVByZWZpeCA9IGNvbnRlbnRQYXJhbXM/Lm9udG9sb2d5SWQgPyBcIm9udG9sb2dpZXMvXCIrY29udGVudFBhcmFtcz8ub250b2xvZ3lJZCtcIi9cIiA6IFwiXCJcbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICBpcmk6IGNvbnRlbnRQYXJhbXM/LnByb3BlcnR5SXJpLFxuICAgICAgLi4udGhpcy5idWlsZE90aGVyUGFyYW1zKHBhcmFtZXRlcilcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLm1ha2VDYWxsKHF1ZXJ5UHJlZml4K1wicHJvcGVydGllc1wiLCB7IHBhcmFtczogcGFyYW1zLCBzaWduYWw6IGFib3J0U2lnbmFsIH0sIGdldFVzZUxlZ2FjeSh1c2VMZWdhY3kpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJcyB1c2VkIHRvIGZldGNoIGFuIGluZGl2aWR1YWwgZnJvbSB0aGUgYXBpIGluIG9sczMuXG4gICAqIEFsd2F5cyByZXF1aXJlcyB0aGUgcmVzcGVjdGl2ZSBvYmplY3QgSVJJIGluIGNvbnRlbnRQYXJhbXMgdG8gYmUgc2V0XG4gICAqIElmIG9udG9sb2d5SWQgaXMgdW5kZWZpbmVkIGluIGNvbnRlbnRQYXJhbXMsIHRoZSBvYmplY3Qgd2lsbCBiZSBxdWVyaWVkIGZyb20gYWxsIG9udG9sb2dpZXMsIGNvbnRhaW5pbmcgYSBsaXN0IG9mIHJlc3VsdHNcbiAgICogSWYgYW4gb250b2xvZ3lJZCBpcyBwcm92aWRlZCBpbiBjb250ZW50UGFyYW1zLCB0aGUgcmV0dXJuZWQgbGlzdCB3aWxsIG9ubHkgY29udGFpbiB0aGUgb2JqZWN0IGZyb20gdGhhdCBzcGVjaWZpYyBvbnRvbG9neVxuICAgKi9cbiAgcHVibGljIGdldEluZGl2aWR1YWw6IGFwaUNhbGxGbiA9IGFzeW5jIChwYWdpbmF0aW9uUGFyYW1zLCBzb3J0aW5nUGFyYW1zLCBjb250ZW50UGFyYW1zLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeT86IGJvb2xlYW4sIGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWwpID0+IHtcbiAgICBjb25zdCBxdWVyeVByZWZpeCA9IGNvbnRlbnRQYXJhbXM/Lm9udG9sb2d5SWQgPyBcIm9udG9sb2dpZXMvXCIrY29udGVudFBhcmFtcz8ub250b2xvZ3lJZCtcIi9cIiA6IFwiXCJcbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICBpcmk6IGNvbnRlbnRQYXJhbXM/LmluZGl2aWR1YWxJcmksXG4gICAgICAuLi50aGlzLmJ1aWxkT3RoZXJQYXJhbXMocGFyYW1ldGVyKVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMubWFrZUNhbGwocXVlcnlQcmVmaXgrXCJpbmRpdmlkdWFsc1wiLCB7IHBhcmFtczogcGFyYW1zLCBzaWduYWw6IGFib3J0U2lnbmFsIH0sIGdldFVzZUxlZ2FjeSh1c2VMZWdhY3kpKTtcbiAgfVxuXG4gIHB1YmxpYyBzZWFyY2ggPSBhc3luYyAocXVlcnlQYXJhbXM6IFNlYXJjaFF1ZXJ5UGFyYW1zLCBwYWdpbmF0aW9uUGFyYW1zOiBQYWdpbmF0aW9uUGFyYW1zLCBjb250ZW50UGFyYW1zPzogQ29udGVudFBhcmFtcywgcGFyYW1ldGVyPzogc3RyaW5nLCBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxhbnk+ID0+IHtcbiAgICByZXR1cm4gdGhpcy5tYWtlQ2FsbChcInNlYXJjaFwiLCB7IHBhcmFtczogdGhpcy5idWlsZFBhcmFtc0ZvclNlYXJjaChxdWVyeVBhcmFtcywgcGFnaW5hdGlvblBhcmFtcywgY29udGVudFBhcmFtcywgcGFyYW1ldGVyKSwgc2lnbmFsOiBhYm9ydFNpZ25hbCB9LCB0cnVlKTtcbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3QgPSBhc3luYyhxdWVyeVBhcmFtczogU2VsZWN0UXVlcnlQYXJhbXMsIHBhZ2luYXRpb25QYXJhbXM/OiBQYWdpbmF0aW9uUGFyYW1zLCBjb250ZW50UGFyYW1zPzogQ29udGVudFBhcmFtcywgcGFyYW1ldGVyPzogc3RyaW5nKTogUHJvbWlzZTxhbnk+ID0+IHtcbiAgICByZXR1cm4gdGhpcy5tYWtlQ2FsbChcInNlbGVjdFwiLCB7cGFyYW1zOiB0aGlzLmJ1aWxkUGFyYW1zRm9yU2VsZWN0KHF1ZXJ5UGFyYW1zLCBwYWdpbmF0aW9uUGFyYW1zLCBjb250ZW50UGFyYW1zLCBwYXJhbWV0ZXIpIH0sIHRydWUpO1xuICB9XG5cbiAgcHVibGljIHN1Z2dlc3QgPSBhc3luYyhxdWVyeVBhcmFtczogU3VnZ2VzdFF1ZXJ5UGFyYW1zLCBwYWdpbmF0aW9uUGFyYW1zPzogUGFnaW5hdGlvblBhcmFtcywgY29udGVudFBhcmFtcz86IENvbnRlbnRQYXJhbXMsIHBhcmFtZXRlcj86IHN0cmluZyk6IFByb21pc2U8YW55PiA9PiB7XG4gICAgcmV0dXJuIHRoaXMubWFrZUNhbGwoXCJzdWdnZXN0XCIsIHsgcGFyYW1zOiB0aGlzLmJ1aWxkUGFyYW1zRm9yU3VnZ2VzdChxdWVyeVBhcmFtcywgcGFnaW5hdGlvblBhcmFtcywgY29udGVudFBhcmFtcywgcGFyYW1ldGVyKSB9LCB0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBnZXRUZXJtVHJlZTpcbiAgICogVGhpcyBtZXRob2QgYWx3YXlzIHJlcXVpcmVzIGFuIG9udG9sb2d5SWQgaW4gY29udGVudFBhcmFtc1xuICAgKiAxKSBJZiBubyB0ZXJtSXJpIGlzIGRlZmluZWQgaW4gY29udGVudFBhcmFtcywgdGhlIG9udG9sb2d5IHJvb3RzIHdpbGwgYmUgcXVlcmllZFxuICAgKiAyKSBJZiBhIHRlcm1JcmkgaXMgZGVmaW5lZCBidXQgbm8gY2hpbGQgaW4ganNUcmVlUGFyYW1zLCB0aGUgaGllcmFyY2h5IGNvbnRhaW5pbmcgdGhhdCB0ZXJtIHdpbGwgYmUgcXVlcmllZFxuICAgKiAzKSBJZiBhIHRlcm1JcmkgaXMgZGVmaW5lZCBhbmQgYWxzbyBhIGNoaWxkIGluIGpzVHJlZVBhcmFtcywgdGhlIHN1YmhpZXJhcmNoeSBvZiB0aGF0IGNoaWxkIHdpbGwgYmUgcXVlcmllZFxuICAgKi9cbiAgcHVibGljIGdldFRlcm1UcmVlID0gYXN5bmMgKGNvbnRlbnRQYXJhbXM6IENvbnRlbnRQYXJhbXMsIHRyZWVQYXJhbXM6IEpzVHJlZVBhcmFtcywgcGFnaW5hdGlvblBhcmFtcz86IFBhZ2luYXRpb25QYXJhbXMsIHNvcnRpbmdQYXJhbXM/OiBTb3J0aW5nUGFyYW1zICkgPT4ge1xuICAgIGxldCBiYXNlUmVxdWVzdCA9IFwib250b2xvZ2llcy9cIitjb250ZW50UGFyYW1zPy5vbnRvbG9neUlkK1wiL3Rlcm1zXCJcbiAgICBpZiAoIWNvbnRlbnRQYXJhbXMudGVybUlyaSkgcmV0dXJuIChhd2FpdCB0aGlzLmF4aW9zSW5zdGFuY2UuZ2V0KGJhc2VSZXF1ZXN0K1wiL3Jvb3RzXCIpKS5kYXRhOyAvLzEpXG4gICAgYmFzZVJlcXVlc3QgPSBiYXNlUmVxdWVzdCtcIi9cIitlbmNvZGVVUklDb21wb25lbnQoZW5jb2RlVVJJQ29tcG9uZW50KGNvbnRlbnRQYXJhbXM/LnRlcm1JcmkpKStcIi9qc3RyZWVcIlxuICAgIGlmICh0cmVlUGFyYW1zLmNoaWxkKSByZXR1cm4gKGF3YWl0IHRoaXMuYXhpb3NJbnN0YW5jZS5nZXQoYmFzZVJlcXVlc3QrXCIvY2hpbGRyZW4vXCIrdHJlZVBhcmFtcy5jaGlsZCkpLmRhdGE7IC8vMylcbiAgICBlbHNlIHJldHVybiAoYXdhaXQgdGhpcy5heGlvc0luc3RhbmNlLmdldChiYXNlUmVxdWVzdCwgeyBwYXJhbXM6IHRyZWVQYXJhbXMgfSkpLmRhdGE7IC8vMilcbiAgfVxuXG4gIHB1YmxpYyBnZXRUZXJtUmVsYXRpb25zID0gYXN5bmMgKGNvbnRlbnRQYXJhbXM6IENvbnRlbnRQYXJhbXMsIHBhZ2luYXRpb25QYXJhbXM/OiBQYWdpbmF0aW9uUGFyYW1zLCBzb3J0aW5nUGFyYW1zPzogU29ydGluZ1BhcmFtcyApID0+IHtcbiAgICBsZXQgYmFzZVJlcXVlc3QgPSBcIm9udG9sb2dpZXMvXCIrY29udGVudFBhcmFtcz8ub250b2xvZ3lJZCtcIi90ZXJtc1wiXG4gICAgaWYgKCFjb250ZW50UGFyYW1zLnRlcm1JcmkpIHJldHVybiAoYXdhaXQgdGhpcy5heGlvc0luc3RhbmNlLmdldChiYXNlUmVxdWVzdCtcIi9yb290c1wiKSkuZGF0YTsgLy8xKVxuICAgIGJhc2VSZXF1ZXN0ID0gYmFzZVJlcXVlc3QrXCIvXCIrZW5jb2RlVVJJQ29tcG9uZW50KGVuY29kZVVSSUNvbXBvbmVudChjb250ZW50UGFyYW1zPy50ZXJtSXJpKSkrXCIvZ3JhcGhcIlxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gRW50aXR5IG9iamVjdCAoaW1wbGVtZW50aW5nICdDbGFzcycsICdQcm9wZXJ0eScgb3IgJ0luZGl2aWR1YWwnKS5cbiAgICogSW5kaXJlY3RseSBmZXRjaGVzIHRoZSByZXNwb25zZSBKU09OIGZvciB0aGUgc3BlY2lmaWVkIGVudGl0eVR5cGUsIGlyaSwgb250b2xvZ3lJZCwgcGFyYW1ldGVyIGFuZCBBUEkgdmVyc2lvbiAodXNlTGVnYWN5KS5cbiAgICpcbiAgICogQHBhcmFtIGVudGl0eVR5cGVcbiAgICogQHBhcmFtIGlyaVxuICAgKiBAcGFyYW0gb250b2xvZ3lJZFxuICAgKiBAcGFyYW0gcGFyYW1ldGVyXG4gICAqIEBwYXJhbSB1c2VMZWdhY3lcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRFbnRpdHlPYmplY3QoaXJpOiBzdHJpbmcsIGVudGl0eVR5cGU/OiBFbnRpdHlUeXBlTmFtZSwgb250b2xvZ3lJZD86IHN0cmluZywgcGFyYW1ldGVyPzogc3RyaW5nLCB1c2VMZWdhY3k/OiBib29sZWFuKSA6IFByb21pc2U8RW50aXR5PiB7XG4gICAgbGV0IHJlc3BvbnNlO1xuXG4gICAgaWYoZW50aXR5VHlwZSkge1xuICAgICAgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdldEVudGl0eVdpdGhFbnRpdHlUeXBlUHJvdmlkZWQoaXJpLCBlbnRpdHlUeXBlLCBvbnRvbG9neUlkLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgaWYoZ2V0VXNlTGVnYWN5KHVzZUxlZ2FjeSkpIHtcbiAgICAgICAgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdldEVudGl0eVdpdGhJbmZlcnJlZEVudGl0eVR5cGUoaXJpLCBvbnRvbG9neUlkLCBwYXJhbWV0ZXIpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHJlc3BvbnNlID0gYXdhaXQgdGhpcy5nZXRFbnRpdHkodW5kZWZpbmVkLCB1bmRlZmluZWQsIHtvbnRvbG9neUlkOiBvbnRvbG9neUlkLCB0ZXJtSXJpOiBpcml9LCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNyZWF0ZU1vZGVsT2JqZWN0KHJlc3BvbnNlKSBhcyBFbnRpdHk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBPbnRvbG9neSBvYmplY3QuXG4gICAqIEluZGlyZWN0bHkgZmV0Y2hlcyB0aGUgcmVzcG9uc2UgSlNPTiBmb3IgdGhlIHNwZWNpZmllZCBvbnRvbG9neUlkLCBwYXJhbWV0ZXIgYW5kIEFQSSB2ZXJzaW9uICh1c2VMZWdhY3kpLlxuICAgKlxuICAgKiBAcGFyYW0gb250b2xvZ3lJZFxuICAgKiBAcGFyYW0gcGFyYW1ldGVyXG4gICAqIEBwYXJhbSB1c2VMZWdhY3lcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRPbnRvbG9neU9iamVjdChvbnRvbG9neUlkOiBzdHJpbmcsIHBhcmFtZXRlcj86IHN0cmluZywgdXNlTGVnYWN5PzogYm9vbGVhbikgOiBQcm9taXNlPE9udG9sb2d5PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdldE9udG9sb2d5KHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB7b250b2xvZ3lJZDogb250b2xvZ3lJZH0sIHBhcmFtZXRlciwgdXNlTGVnYWN5KTtcblxuICAgIHJldHVybiBjcmVhdGVNb2RlbE9iamVjdChyZXNwb25zZSkgYXMgT250b2xvZ3k7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0VGhpbmdPYmplY3QoaXJpPzogc3RyaW5nLCB0aGluZ1R5cGU/OiBUaGluZ1R5cGVOYW1lLCBvbnRvbG9neUlkPzogc3RyaW5nLCBwYXJhbWV0ZXI/OiBzdHJpbmcsIHVzZUxlZ2FjeT86IGJvb2xlYW4pIDogUHJvbWlzZTxUaGluZz4ge1xuICAgIGlmKHRoaW5nVHlwZSkge1xuICAgICAgaWYoaXNPbnRvbG9neVR5cGVOYW1lKHRoaW5nVHlwZSkpIHtcbiAgICAgICAgaWYoIW9udG9sb2d5SWQpIHRocm93IG5ldyBFcnJvcihgb250b2xvZ3lJZCBoYXMgdG8gYmUgcHJvdmlkZWQgaWYgdGhpbmdUeXBlIGluIHtcIiR7b250b2xvZ3lUeXBlTmFtZXMuam9pbignXCIsIFwiJyl9XCJ9LmApO1xuICAgICAgICBlbHNlIHJldHVybiBhd2FpdCB0aGlzLmdldE9udG9sb2d5T2JqZWN0KG9udG9sb2d5SWQsIHBhcmFtZXRlciwgdXNlTGVnYWN5KTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYoaXNFbnRpdHlUeXBlTmFtZSh0aGluZ1R5cGUpKSB7XG4gICAgICAgIGlmKCFpcmkpIHRocm93IG5ldyBFcnJvcihgaXJpIGhhcyB0byBiZSBwcm92aWRlZCBpZiB0aGluZ1R5cGUgaW4ge1wiJHtlbnRpdHlUeXBlTmFtZXMuam9pbignXCIsIFwiJyl9XCJ9LmApO1xuICAgICAgICBlbHNlIHJldHVybiBhd2FpdCB0aGlzLmdldEVudGl0eU9iamVjdChpcmksIHRoaW5nVHlwZSwgb250b2xvZ3lJZCwgcGFyYW1ldGVyLCB1c2VMZWdhY3kpO1xuICAgICAgfVxuICAgICAgZWxzZSB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIHRoaW5nVHlwZSBcIiR7dGhpbmdUeXBlfVwiIHByb3ZpZGVkLiBNdXN0IGJlIGluIHtcIiR7dGhpbmdUeXBlTmFtZXMuam9pbignXCIsIFwiJyl9XCJ9LmApO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGlmKCFpcmkgJiYgb250b2xvZ3lJZCkge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRPbnRvbG9neU9iamVjdChvbnRvbG9neUlkLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmKGlyaSkge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRFbnRpdHlPYmplY3QoaXJpLCB0aGluZ1R5cGUsIG9udG9sb2d5SWQsIHBhcmFtZXRlciwgdXNlTGVnYWN5KTtcbiAgICAgIH1cbiAgICAgIGVsc2UgdGhyb3cgbmV3IEVycm9yKGBpcmkgb3Igb250b2xvZ3lJZCBoYXMgdG8gYmUgcHJvdmlkZWQgaWYgdGhpbmdUeXBlIGlzIG5vdCBwcm92aWRlZC5gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSXMgdXNlZCB0byBmZXRjaCBhIGNsYXNzZXMgaW5zdGFuY2VzIGZyb20gdGhlIGFwaS5cbiAgICogQWx3YXlzIHJlcXVpcmVzIHRoZSByZXNwZWN0aXZlIG9iamVjdCBJUkkgaW4gY29udGVudFBhcmFtcyB0byBiZSBzZXRcbiAgICogSWYgb250b2xvZ3lJZCBpcyB1bmRlZmluZWQgaW4gY29udGVudFBhcmFtcywgdGhlIG9iamVjdCB3aWxsIGJlIHF1ZXJpZWQgZnJvbSBhbGwgb250b2xvZ2llcywgY29udGFpbmluZyBhIGxpc3Qgb2YgcmVzdWx0c1xuICAgKiBJZiBhbiBvbnRvbG9neUlkIGlzIHByb3ZpZGVkIGluIGNvbnRlbnRQYXJhbXMsIHRoZSByZXR1cm5lZCBsaXN0IHdpbGwgb25seSBjb250YWluIHRoZSBvYmplY3QgZnJvbSB0aGF0IHNwZWNpZmljIG9udG9sb2d5XG4gICAqL1xuICBwdWJsaWMgZ2V0Q2xhc3NJbnN0YW5jZXM6IGFwaUNhbGxGbiA9IGFzeW5jIChwYWdpbmF0aW9uUGFyYW1zLCBzb3J0aW5nUGFyYW1zLCBjb250ZW50UGFyYW1zLCBwYXJhbWV0ZXIpID0+IHtcbiAgICBjb25zdCBxdWVyeVByZWZpeCA9IGNvbnRlbnRQYXJhbXM/Lm9udG9sb2d5SWQgPyBcIm9udG9sb2dpZXMvXCIrY29udGVudFBhcmFtcz8ub250b2xvZ3lJZCtcIi9cIiA6IFwiXCJcbiAgICByZXR1cm4gdGhpcy5tYWtlQ2FsbChxdWVyeVByZWZpeCtcImNsYXNzZXMvXCIrY29udGVudFBhcmFtcz8udGVybUlyaStcIi9pbnN0YW5jZXNcIiwgeyBwYXJhbXM6IHsgcGFyYW1ldGVyOiB0aGlzLmJ1aWxkT3RoZXJQYXJhbXMocGFyYW1ldGVyKX0gfSwgZmFsc2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRFbnRpdHlXaXRoRW50aXR5VHlwZVByb3ZpZGVkKGlyaTogc3RyaW5nLCBlbnRpdHlUeXBlOiBFbnRpdHlUeXBlTmFtZSwgb250b2xvZ3lJZD86IHN0cmluZywgcGFyYW1ldGVyPzogc3RyaW5nLCB1c2VMZWdhY3k/OiBib29sZWFuKSA6IFByb21pc2U8YW55PiB7XG4gICAgc3dpdGNoIChlbnRpdHlUeXBlKSB7XG4gICAgICBjYXNlICd0ZXJtJzogY2FzZSAnY2xhc3MnOiAvLyBhbHNvIGFsbG93IFwiY2xhc3NcIiBldmVuIGlmIGl0IHNob3VsZCBhY3R1YWxseSBiZSBcInRlcm1cIlxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRUZXJtKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB7b250b2xvZ3lJZDogb250b2xvZ3lJZCwgdGVybUlyaTogaXJpfSwgcGFyYW1ldGVyLCB1c2VMZWdhY3kpO1xuXG4gICAgICBjYXNlICdwcm9wZXJ0eSc6XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmdldFByb3BlcnR5KHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB7b250b2xvZ3lJZDogb250b2xvZ3lJZCwgcHJvcGVydHlJcmk6IGlyaX0sIHBhcmFtZXRlciwgdXNlTGVnYWN5KTtcblxuICAgICAgY2FzZSAnaW5kaXZpZHVhbCc6XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmdldEluZGl2aWR1YWwodW5kZWZpbmVkLCB1bmRlZmluZWQsIHtvbnRvbG9neUlkOiBvbnRvbG9neUlkLCBpbmRpdmlkdWFsSXJpOiBpcml9LCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSk7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IEVycm9yKCdJbnZhbGlkIGVudGl0eSB0eXBlIFwiJyArIGVudGl0eVR5cGUgKyAnXCIuIE11c3QgYmUgb25lIG9mIHtcInRlcm1cIiwgXCJjbGFzc1wiLCBcInByb3BlcnR5XCIsIFwiaW5kaXZpZHVhbFwifScpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0RW50aXR5V2l0aEluZmVycmVkRW50aXR5VHlwZShpcmk6IHN0cmluZywgb250b2xvZ3lJZD86IHN0cmluZywgcGFyYW1ldGVyPzogc3RyaW5nKSA6IFByb21pc2U8YW55PiB7XG4gICAgLypcbiAgICAgICAgICAgIFRlc3QgYWxsIHR5cGVzIG9mIGVudGl0aWVzICh0ZXJtLCBwcm9wZXJ0eSwgaW5kaXZpZHVhbCkgbWFudWFsbHkgd2l0aCBzZXBhcmF0ZSBxdWVyaWVzIChhcyAvZW50aXRpZXMgZG9lcyBub3QgZXhpc3QgZm9yIGxlZ2FjeSBBUEkpXG4gICAgICAgICAgICAtPiByZXR1cm4gdGhlIHJlc3BvbnNlIG9iamVjdCB3aGljaCByZXNvbHZlcyB3aXRoIGEgY29udGFpbmVkIGVudGl0eVxuICAgICAgICAgICAgLT4gdGhyb3cgZXJyb3IgaWYgbm9uZSBvZiB0aGUgdHlwZXMgY29udGFpbnMgYW4gZW50aXR5XG4gICAgICAgICAgKi9cbiAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgIGNvbnN0IHNpZ25hbCA9IGNvbnRyb2xsZXIuc2lnbmFsO1xuXG4gICAgbGV0IHJlc3BvbnNlOyAvLyBzdG9yZXMgdGhlIGVudGl0eSB0byBiZSByZXR1cm5lZCBpbiB0aGUgZW5kXG5cbiAgICBmdW5jdGlvbiBzZXRBbmRTdG9wKHJlczogYW55KSB7XG4gICAgICBpZiAocmVzW1wiX2VtYmVkZGVkXCJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmVzcG9uc2UgPSByZXM7XG4gICAgICAgIGNvbnRyb2xsZXIuYWJvcnQoKTsgLy8gYWJvcnQgcXVlcmllcyBmb3Igb3RoZXIgZW50aXR5VHlwZXNcbiAgICAgIH1cbiAgICB9XG5cbiAgICBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoXG4gICAgICAgIFtcbiAgICAgICAgICB0aGlzLmdldFRlcm0odW5kZWZpbmVkLCB1bmRlZmluZWQsIHtvbnRvbG9neUlkOiBvbnRvbG9neUlkLCB0ZXJtSXJpOiBpcml9LCBwYXJhbWV0ZXIsIHRydWUsIHNpZ25hbClcbiAgICAgICAgICAgICAgLnRoZW4oKHJlczogYW55KSA9PiB7c2V0QW5kU3RvcChyZXMpfSksXG4gICAgICAgICAgdGhpcy5nZXRQcm9wZXJ0eSh1bmRlZmluZWQsIHVuZGVmaW5lZCwge29udG9sb2d5SWQ6IG9udG9sb2d5SWQsIHByb3BlcnR5SXJpOiBpcml9LCBwYXJhbWV0ZXIsIHRydWUsIHNpZ25hbClcbiAgICAgICAgICAgICAgLnRoZW4oKHJlczogYW55KSA9PiB7c2V0QW5kU3RvcChyZXMpfSksXG4gICAgICAgICAgdGhpcy5nZXRJbmRpdmlkdWFsKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB7b250b2xvZ3lJZDogb250b2xvZ3lJZCwgaW5kaXZpZHVhbElyaTogaXJpfSwgcGFyYW1ldGVyLCB0cnVlLCBzaWduYWwpXG4gICAgICAgICAgICAgIC50aGVuKChyZXM6IGFueSkgPT4ge3NldEFuZFN0b3AocmVzKX0pXG4gICAgICAgIF1cbiAgICApO1xuXG4gICAgaWYocmVzcG9uc2UgIT09IHVuZGVmaW5lZCkgcmV0dXJuIHJlc3BvbnNlO1xuICAgIGVsc2UgdGhyb3cgRXJyb3IoXCJJcmkgXCIgKyBpcmkgKyBcIiBjb3VsZCBub3QgYmUgcmVzb2x2ZWQuXCIpO1xuICB9XG59XG4iLCAiZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHsgdmFyIF9pID0gYXJyID09IG51bGwgPyBudWxsIDogdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBhcnJbU3ltYm9sLml0ZXJhdG9yXSB8fCBhcnJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAoX2kgPT0gbnVsbCkgcmV0dXJuOyB2YXIgX2FyciA9IFtdOyB2YXIgX24gPSB0cnVlOyB2YXIgX2QgPSBmYWxzZTsgdmFyIF9zLCBfZTsgdHJ5IHsgZm9yIChfaSA9IF9pLmNhbGwoYXJyKTsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkgeyBfYXJyLnB1c2goX3MudmFsdWUpOyBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7IH0gfSBjYXRjaCAoZXJyKSB7IF9kID0gdHJ1ZTsgX2UgPSBlcnI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTsgfSBmaW5hbGx5IHsgaWYgKF9kKSB0aHJvdyBfZTsgfSB9IHJldHVybiBfYXJyOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IEV1aVNjcmVlblJlYWRlck9ubHkgfSBmcm9tICcuLi9zY3JlZW5fcmVhZGVyX29ubHknO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpU2NyZWVuUmVhZGVyTGl2ZSA9IGZ1bmN0aW9uIEV1aVNjcmVlblJlYWRlckxpdmUoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgX3JlZiRpc0FjdGl2ZSA9IF9yZWYuaXNBY3RpdmUsXG4gICAgICBpc0FjdGl2ZSA9IF9yZWYkaXNBY3RpdmUgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJGlzQWN0aXZlLFxuICAgICAgX3JlZiRyb2xlID0gX3JlZi5yb2xlLFxuICAgICAgcm9sZSA9IF9yZWYkcm9sZSA9PT0gdm9pZCAwID8gJ3N0YXR1cycgOiBfcmVmJHJvbGUsXG4gICAgICBfcmVmJGFyaWFMaXZlID0gX3JlZlsnYXJpYS1saXZlJ10sXG4gICAgICBhcmlhTGl2ZSA9IF9yZWYkYXJpYUxpdmUgPT09IHZvaWQgMCA/ICdwb2xpdGUnIDogX3JlZiRhcmlhTGl2ZSxcbiAgICAgIF9yZWYkZm9jdXNSZWdpb25PblRleCA9IF9yZWYuZm9jdXNSZWdpb25PblRleHRDaGFuZ2UsXG4gICAgICBmb2N1c1JlZ2lvbk9uVGV4dENoYW5nZSA9IF9yZWYkZm9jdXNSZWdpb25PblRleCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGZvY3VzUmVnaW9uT25UZXg7XG5cbiAgdmFyIF91c2VTdGF0ZSA9IHVzZVN0YXRlKGZhbHNlKSxcbiAgICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgICAgdG9nZ2xlID0gX3VzZVN0YXRlMlswXSxcbiAgICAgIHNldFRvZ2dsZSA9IF91c2VTdGF0ZTJbMV07XG5cbiAgdmFyIGZvY3VzUmVmID0gdXNlUmVmKG51bGwpO1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHNldFRvZ2dsZShmdW5jdGlvbiAodG9nZ2xlKSB7XG4gICAgICByZXR1cm4gIXRvZ2dsZTtcbiAgICB9KTtcbiAgfSwgW2NoaWxkcmVuXSk7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGZvY3VzUmVmLmN1cnJlbnQgIT09IG51bGwgJiYgZm9jdXNSZWdpb25PblRleHRDaGFuZ2UpIHtcbiAgICAgIGZvY3VzUmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICB9XG4gIH0sIFt0b2dnbGUsIGZvY3VzUmVnaW9uT25UZXh0Q2hhbmdlXSk7XG4gIHJldHVybiAoXG4gICAgLyoqXG4gICAgICogSW50ZW50aW9uYWxseSB1c2VzIHR3byBwZXJzaXN0ZW50IGxpdmUgcmVnaW9ucyB3aXRoIG9zY2lsbGF0aW5nIGNvbnRlbnQgdXBkYXRlcy5cbiAgICAgKiBUaGlzIHJlc29sdmVzIHRoZSBwcm9ibGVtIG9mIGR1cGxpY2F0ZSBzY3JlZW4gcmVhZGVyIGFubm91bmNlbWVudHMgaW4gcmFwaWQgc3VjY2Vzc2lvblxuICAgICAqIGNhdXNlZCBieSBSZWFjdCdzIHZpcnR1YWwgRE9NIGJlaGF2aW91ciAoaHR0cHM6Ly9naXRodWIuY29tL252YWNjZXNzL252ZGEvaXNzdWVzLzc5OTYjaXNzdWVjb21tZW50LTQxMzY0MTcwOSlcbiAgICAgKlxuICAgICAqIEFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vYWxwaGFnb3YvYWNjZXNzaWJsZS1hdXRvY29tcGxldGUvYmxvYi9hNzEwNmYwMzE1MDk0MWZjMTVlNmMxY2ViMGE5MGU4ODcyZmE4NmVmL3NyYy9zdGF0dXMuanNcbiAgICAgKiBEZWJvdW5jaW5nIHdhcyBub3QgbmVlZGVkIGZvciB0aGlzIGNhc2UsIGJ1dCBjb3VsZCBwcm92ZSB0byBiZSB1c2VmdWwgZm9yIGZ1dHVyZSB1c2UgY2FzZXMuXG4gICAgICogU2VlIGFsc28gaHR0cHM6Ly9naXRodWIuY29tL0FsbWVyb1N0ZXluL3JlYWN0LWFyaWEtbGl2ZSBhbmQgaHR0cHM6Ly9naXRodWIuY29tL2RlcXVlbGFicy9uZ0ExMXlcbiAgICAgKiBmb3IgbW9yZSBleGFtcGxlcyBvZiB0aGUgZG91YmxlIHJlZ2lvbiBhcHByb2FjaC5cbiAgICAgKi9cbiAgICBfX19FbW90aW9uSlNYKEV1aVNjcmVlblJlYWRlck9ubHksIG51bGwsIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgcmVmOiBmb2N1c1JlZixcbiAgICAgIHRhYkluZGV4OiBmb2N1c1JlZ2lvbk9uVGV4dENoYW5nZSA/IC0xIDogdW5kZWZpbmVkXG4gICAgfSwgX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICByb2xlOiByb2xlLFxuICAgICAgXCJhcmlhLWF0b21pY1wiOiBcInRydWVcIiAvLyBTZXR0aW5nIGBhcmlhLWhpZGRlbmAgYW5kIHNldHRpbmcgYGFyaWEtbGl2ZWAgdG8gXCJvZmZcIiBwcmV2ZW50c1xuICAgICAgLy8gZG91YmxlIGFubm91bmNlbWVudHMgZnJvbSBWTyB3aGVuIGBmb2N1c1JlZ2lvbk9uVGV4dENoYW5nZWAgaXMgdHJ1ZVxuICAgICAgLFxuICAgICAgXCJhcmlhLWhpZGRlblwiOiB0b2dnbGUgPyB1bmRlZmluZWQgOiAndHJ1ZScsXG4gICAgICBcImFyaWEtbGl2ZVwiOiBmb2N1c1JlZ2lvbk9uVGV4dENoYW5nZSA/ICdvZmYnIDogYXJpYUxpdmVcbiAgICB9LCBpc0FjdGl2ZSAmJiB0b2dnbGUgPyBjaGlsZHJlbiA6ICcnKSwgX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICByb2xlOiByb2xlLFxuICAgICAgXCJhcmlhLWF0b21pY1wiOiBcInRydWVcIixcbiAgICAgIFwiYXJpYS1oaWRkZW5cIjogIXRvZ2dsZSA/IHVuZGVmaW5lZCA6ICd0cnVlJyxcbiAgICAgIFwiYXJpYS1saXZlXCI6IGZvY3VzUmVnaW9uT25UZXh0Q2hhbmdlID8gJ29mZicgOiBhcmlhTGl2ZVxuICAgIH0sIGlzQWN0aXZlICYmICF0b2dnbGUgPyBjaGlsZHJlbiA6ICcnKSkpXG4gICk7XG59O1xuRXVpU2NyZWVuUmVhZGVyTGl2ZS5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gbWFrZSBzY3JlZW4gcmVhZGVycyBhd2FyZSBvZiB0aGUgY29udGVudFxuICAgICAqL1xuICBpc0FjdGl2ZTogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogQ29udGVudCBmb3Igc2NyZWVuIHJlYWRlcnMgdG8gYW5ub3VuY2VcbiAgICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgICAqIGByb2xlYCBhdHRyaWJ1dGUgZm9yIGJvdGggbGl2ZSByZWdpb25zLlxuICAgICAqXG4gICAgICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQWNjZXNzaWJpbGl0eS9BUklBL0FSSUFfTGl2ZV9SZWdpb25zI3JvbGVzX3dpdGhfaW1wbGljaXRfbGl2ZV9yZWdpb25fYXR0cmlidXRlc1xuICAgICAqL1xuICByb2xlOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIGBhcmlhLWxpdmVgIGF0dHJpYnV0ZSBmb3IgYm90aCBsaXZlIHJlZ2lvbnNcbiAgICAgKi9cbiAgXCJhcmlhLWxpdmVcIjogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBPbiBgY2hpbGRyZW5gL3RleHQgY2hhbmdlLCB0aGUgcmVnaW9uIHdpbGwgYXV0by1mb2N1cyBpdHNlbGYsIGNhdXNpbmcgc2NyZWVuIHJlYWRlcnNcbiAgICAgKiB0byBhdXRvbWF0aWNhbGx5IHJlYWQgb3V0IHRoZSB0ZXh0IGNvbnRlbnQuIFRoaXMgcHJvcCBzaG91bGQgcHJpbWFyaWx5IGJlIHVzZWQgZm9yXG4gICAgICogbmF2aWdhdGlvbiBvciBwYWdlIGNoYW5nZXMsIHdoZXJlIHByb2dyYW1tYXRpY2FsbHkgcmVzZXR0aW5nIGZvY3VzIGxvY2F0aW9uIGJhY2sgdG9cbiAgICAgKiBhIGNlcnRhaW4gcGFydCBvZiB0aGUgcGFnZSBpcyBkZXNpcmVkLlxuICAgICAqL1xuICBmb2N1c1JlZ2lvbk9uVGV4dENoYW5nZTogUHJvcFR5cGVzLmJvb2xcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IGNsb25lRWxlbWVudFdpdGhDc3MgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy90aGVtZS9jbG9uZV9lbGVtZW50JztcbmltcG9ydCB7IGV1aVNjcmVlblJlYWRlck9ubHlTdHlsZXMgfSBmcm9tICcuL3NjcmVlbl9yZWFkZXJfb25seS5zdHlsZXMnO1xuZXhwb3J0IHZhciBFdWlTY3JlZW5SZWFkZXJPbmx5ID0gZnVuY3Rpb24gRXVpU2NyZWVuUmVhZGVyT25seShfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIHNob3dPbkZvY3VzID0gX3JlZi5zaG93T25Gb2N1cztcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKGNsYXNzTmFtZSwgY2hpbGRyZW4ucHJvcHMuY2xhc3NOYW1lKTtcbiAgdmFyIHN0eWxlcyA9IGV1aVNjcmVlblJlYWRlck9ubHlTdHlsZXMoc2hvd09uRm9jdXMpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlTY3JlZW5SZWFkZXJPbmx5XTtcbiAgdmFyIHByb3BzID0ge1xuICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5sZW5ndGggPyBjbGFzc2VzIDogdW5kZWZpbmVkLFxuICAgIGNzczogY3NzU3R5bGVzXG4gIH07XG4gIHJldHVybiBjbG9uZUVsZW1lbnRXaXRoQ3NzKGNoaWxkcmVuLCBwcm9wcyk7XG59O1xuRXVpU2NyZWVuUmVhZGVyT25seS5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgICAqIFJlYWN0RWxlbWVudCB0byByZW5kZXIgYXMgdGhpcyBjb21wb25lbnQncyBjb250ZW50XG4gICAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgICAqIEZvciBrZXlib2FyZCBuYXZpZ2F0aW9uLCBmb3JjZSBjb250ZW50IHRvIGRpc3BsYXkgdmlzdWFsbHkgdXBvbiBmb2N1cy5cbiAgICAgKi9cbiAgc2hvd09uRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmdcbn07IiwgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUNvbnRleHQsIGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY3JlYXRlQ2FjaGUgZnJvbSAnQGVtb3Rpb24vY2FjaGUnO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHMnO1xuaW1wb3J0IHdlYWtNZW1vaXplIGZyb20gJ0BlbW90aW9uL3dlYWstbWVtb2l6ZSc7XG5pbXBvcnQgaG9pc3ROb25SZWFjdFN0YXRpY3MgZnJvbSAnLi4vX2lzb2xhdGVkLWhucnMvZGlzdC9lbW90aW9uLXJlYWN0LV9pc29sYXRlZC1obnJzLmJyb3dzZXIuZXNtLmpzJztcbmltcG9ydCB7IGdldFJlZ2lzdGVyZWRTdHlsZXMsIHJlZ2lzdGVyU3R5bGVzLCBpbnNlcnRTdHlsZXMgfSBmcm9tICdAZW1vdGlvbi91dGlscyc7XG5pbXBvcnQgeyBzZXJpYWxpemVTdHlsZXMgfSBmcm9tICdAZW1vdGlvbi9zZXJpYWxpemUnO1xuaW1wb3J0IHsgdXNlSW5zZXJ0aW9uRWZmZWN0QWx3YXlzV2l0aFN5bmNGYWxsYmFjayB9IGZyb20gJ0BlbW90aW9uL3VzZS1pbnNlcnRpb24tZWZmZWN0LXdpdGgtZmFsbGJhY2tzJztcblxudmFyIGlzQnJvd3NlciA9IFwib2JqZWN0XCIgIT09ICd1bmRlZmluZWQnO1xudmFyIGhhc093biA9IHt9Lmhhc093blByb3BlcnR5O1xuXG52YXIgRW1vdGlvbkNhY2hlQ29udGV4dCA9IC8qICNfX1BVUkVfXyAqL1JlYWN0LmNyZWF0ZUNvbnRleHQoIC8vIHdlJ3JlIGRvaW5nIHRoaXMgdG8gYXZvaWQgcHJlY29uc3RydWN0J3MgZGVhZCBjb2RlIGVsaW1pbmF0aW9uIGluIHRoaXMgb25lIGNhc2Vcbi8vIGJlY2F1c2UgdGhpcyBtb2R1bGUgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciB0aGUgYnJvd3NlciBhbmQgbm9kZVxuLy8gYnV0IGl0J3MgYWxzbyByZXF1aXJlZCBpbiByZWFjdCBuYXRpdmUgYW5kIHNpbWlsYXIgZW52aXJvbm1lbnRzIHNvbWV0aW1lc1xuLy8gYW5kIHdlIGNvdWxkIGhhdmUgYSBzcGVjaWFsIGJ1aWxkIGp1c3QgZm9yIHRoYXRcbi8vIGJ1dCB0aGlzIGlzIG11Y2ggZWFzaWVyIGFuZCB0aGUgbmF0aXZlIHBhY2thZ2VzXG4vLyBtaWdodCB1c2UgYSBkaWZmZXJlbnQgdGhlbWUgY29udGV4dCBpbiB0aGUgZnV0dXJlIGFueXdheVxudHlwZW9mIEhUTUxFbGVtZW50ICE9PSAndW5kZWZpbmVkJyA/IC8qICNfX1BVUkVfXyAqL2NyZWF0ZUNhY2hlKHtcbiAga2V5OiAnY3NzJ1xufSkgOiBudWxsKTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgRW1vdGlvbkNhY2hlQ29udGV4dC5kaXNwbGF5TmFtZSA9ICdFbW90aW9uQ2FjaGVDb250ZXh0Jztcbn1cblxudmFyIENhY2hlUHJvdmlkZXIgPSBFbW90aW9uQ2FjaGVDb250ZXh0LlByb3ZpZGVyO1xudmFyIF9fdW5zYWZlX3VzZUVtb3Rpb25DYWNoZSA9IGZ1bmN0aW9uIHVzZUVtb3Rpb25DYWNoZSgpIHtcbiAgcmV0dXJuIHVzZUNvbnRleHQoRW1vdGlvbkNhY2hlQ29udGV4dCk7XG59O1xuXG52YXIgd2l0aEVtb3Rpb25DYWNoZSA9IGZ1bmN0aW9uIHdpdGhFbW90aW9uQ2FjaGUoZnVuYykge1xuICAvLyAkRmxvd0ZpeE1lXG4gIHJldHVybiAvKiNfX1BVUkVfXyovZm9yd2FyZFJlZihmdW5jdGlvbiAocHJvcHMsIHJlZikge1xuICAgIC8vIHRoZSBjYWNoZSB3aWxsIG5ldmVyIGJlIG51bGwgaW4gdGhlIGJyb3dzZXJcbiAgICB2YXIgY2FjaGUgPSB1c2VDb250ZXh0KEVtb3Rpb25DYWNoZUNvbnRleHQpO1xuICAgIHJldHVybiBmdW5jKHByb3BzLCBjYWNoZSwgcmVmKTtcbiAgfSk7XG59O1xuXG5pZiAoIWlzQnJvd3Nlcikge1xuICB3aXRoRW1vdGlvbkNhY2hlID0gZnVuY3Rpb24gd2l0aEVtb3Rpb25DYWNoZShmdW5jKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChwcm9wcykge1xuICAgICAgdmFyIGNhY2hlID0gdXNlQ29udGV4dChFbW90aW9uQ2FjaGVDb250ZXh0KTtcblxuICAgICAgaWYgKGNhY2hlID09PSBudWxsKSB7XG4gICAgICAgIC8vIHllcywgd2UncmUgcG90ZW50aWFsbHkgY3JlYXRpbmcgdGhpcyBvbiBldmVyeSByZW5kZXJcbiAgICAgICAgLy8gaXQgZG9lc24ndCBhY3R1YWxseSBtYXR0ZXIgdGhvdWdoIHNpbmNlIGl0J3Mgb25seSBvbiB0aGUgc2VydmVyXG4gICAgICAgIC8vIHNvIHRoZXJlIHdpbGwgb25seSBldmVyeSBiZSBhIHNpbmdsZSByZW5kZXJcbiAgICAgICAgLy8gdGhhdCBjb3VsZCBjaGFuZ2UgaW4gdGhlIGZ1dHVyZSBiZWNhdXNlIG9mIHN1c3BlbnNlIGFuZCBldGMuIGJ1dCBmb3Igbm93LFxuICAgICAgICAvLyB0aGlzIHdvcmtzIGFuZCBpIGRvbid0IHdhbnQgdG8gb3B0aW1pc2UgZm9yIGEgZnV0dXJlIHRoaW5nIHRoYXQgd2UgYXJlbid0IHN1cmUgYWJvdXRcbiAgICAgICAgY2FjaGUgPSBjcmVhdGVDYWNoZSh7XG4gICAgICAgICAga2V5OiAnY3NzJ1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEVtb3Rpb25DYWNoZUNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgICAgICB2YWx1ZTogY2FjaGVcbiAgICAgICAgfSwgZnVuYyhwcm9wcywgY2FjaGUpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmdW5jKHByb3BzLCBjYWNoZSk7XG4gICAgICB9XG4gICAgfTtcbiAgfTtcbn1cblxudmFyIFRoZW1lQ29udGV4dCA9IC8qICNfX1BVUkVfXyAqL1JlYWN0LmNyZWF0ZUNvbnRleHQoe30pO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBUaGVtZUNvbnRleHQuZGlzcGxheU5hbWUgPSAnRW1vdGlvblRoZW1lQ29udGV4dCc7XG59XG5cbnZhciB1c2VUaGVtZSA9IGZ1bmN0aW9uIHVzZVRoZW1lKCkge1xuICByZXR1cm4gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xufTtcblxudmFyIGdldFRoZW1lID0gZnVuY3Rpb24gZ2V0VGhlbWUob3V0ZXJUaGVtZSwgdGhlbWUpIHtcbiAgaWYgKHR5cGVvZiB0aGVtZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciBtZXJnZWRUaGVtZSA9IHRoZW1lKG91dGVyVGhlbWUpO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgKG1lcmdlZFRoZW1lID09IG51bGwgfHwgdHlwZW9mIG1lcmdlZFRoZW1lICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KG1lcmdlZFRoZW1lKSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignW1RoZW1lUHJvdmlkZXJdIFBsZWFzZSByZXR1cm4gYW4gb2JqZWN0IGZyb20geW91ciB0aGVtZSBmdW5jdGlvbiwgaS5lLiB0aGVtZT17KCkgPT4gKHt9KX0hJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lcmdlZFRoZW1lO1xuICB9XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgKHRoZW1lID09IG51bGwgfHwgdHlwZW9mIHRoZW1lICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KHRoZW1lKSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1tUaGVtZVByb3ZpZGVyXSBQbGVhc2UgbWFrZSB5b3VyIHRoZW1lIHByb3AgYSBwbGFpbiBvYmplY3QnKTtcbiAgfVxuXG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgb3V0ZXJUaGVtZSwgdGhlbWUpO1xufTtcblxudmFyIGNyZWF0ZUNhY2hlV2l0aFRoZW1lID0gLyogI19fUFVSRV9fICovd2Vha01lbW9pemUoZnVuY3Rpb24gKG91dGVyVGhlbWUpIHtcbiAgcmV0dXJuIHdlYWtNZW1vaXplKGZ1bmN0aW9uICh0aGVtZSkge1xuICAgIHJldHVybiBnZXRUaGVtZShvdXRlclRoZW1lLCB0aGVtZSk7XG4gIH0pO1xufSk7XG52YXIgVGhlbWVQcm92aWRlciA9IGZ1bmN0aW9uIFRoZW1lUHJvdmlkZXIocHJvcHMpIHtcbiAgdmFyIHRoZW1lID0gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xuXG4gIGlmIChwcm9wcy50aGVtZSAhPT0gdGhlbWUpIHtcbiAgICB0aGVtZSA9IGNyZWF0ZUNhY2hlV2l0aFRoZW1lKHRoZW1lKShwcm9wcy50aGVtZSk7XG4gIH1cblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVGhlbWVDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IHRoZW1lXG4gIH0sIHByb3BzLmNoaWxkcmVuKTtcbn07XG5mdW5jdGlvbiB3aXRoVGhlbWUoQ29tcG9uZW50KSB7XG4gIHZhciBjb21wb25lbnROYW1lID0gQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8IENvbXBvbmVudC5uYW1lIHx8ICdDb21wb25lbnQnO1xuXG4gIHZhciByZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIocHJvcHMsIHJlZikge1xuICAgIHZhciB0aGVtZSA9IFJlYWN0LnVzZUNvbnRleHQoVGhlbWVDb250ZXh0KTtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ29tcG9uZW50LCBfZXh0ZW5kcyh7XG4gICAgICB0aGVtZTogdGhlbWUsXG4gICAgICByZWY6IHJlZlxuICAgIH0sIHByb3BzKSk7XG4gIH07IC8vICRGbG93Rml4TWVcblxuXG4gIHZhciBXaXRoVGhlbWUgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihyZW5kZXIpO1xuICBXaXRoVGhlbWUuZGlzcGxheU5hbWUgPSBcIldpdGhUaGVtZShcIiArIGNvbXBvbmVudE5hbWUgKyBcIilcIjtcbiAgcmV0dXJuIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKFdpdGhUaGVtZSwgQ29tcG9uZW50KTtcbn1cblxudmFyIGdldExhc3RQYXJ0ID0gZnVuY3Rpb24gZ2V0TGFzdFBhcnQoZnVuY3Rpb25OYW1lKSB7XG4gIC8vIFRoZSBtYXRjaCBtYXkgYmUgc29tZXRoaW5nIGxpa2UgJ09iamVjdC5jcmVhdGVFbW90aW9uUHJvcHMnIG9yXG4gIC8vICdMb2FkZXIucHJvdG90eXBlLnJlbmRlcidcbiAgdmFyIHBhcnRzID0gZnVuY3Rpb25OYW1lLnNwbGl0KCcuJyk7XG4gIHJldHVybiBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXTtcbn07XG5cbnZhciBnZXRGdW5jdGlvbk5hbWVGcm9tU3RhY2tUcmFjZUxpbmUgPSBmdW5jdGlvbiBnZXRGdW5jdGlvbk5hbWVGcm9tU3RhY2tUcmFjZUxpbmUobGluZSkge1xuICAvLyBWOFxuICB2YXIgbWF0Y2ggPSAvXlxccythdFxccysoW0EtWmEtejAtOSQuXSspXFxzLy5leGVjKGxpbmUpO1xuICBpZiAobWF0Y2gpIHJldHVybiBnZXRMYXN0UGFydChtYXRjaFsxXSk7IC8vIFNhZmFyaSAvIEZpcmVmb3hcblxuICBtYXRjaCA9IC9eKFtBLVphLXowLTkkLl0rKUAvLmV4ZWMobGluZSk7XG4gIGlmIChtYXRjaCkgcmV0dXJuIGdldExhc3RQYXJ0KG1hdGNoWzFdKTtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbnZhciBpbnRlcm5hbFJlYWN0RnVuY3Rpb25OYW1lcyA9IC8qICNfX1BVUkVfXyAqL25ldyBTZXQoWydyZW5kZXJXaXRoSG9va3MnLCAncHJvY2Vzc0NoaWxkJywgJ2ZpbmlzaENsYXNzQ29tcG9uZW50JywgJ3JlbmRlclRvU3RyaW5nJ10pOyAvLyBUaGVzZSBpZGVudGlmaWVycyBjb21lIGZyb20gZXJyb3Igc3RhY2tzLCBzbyB0aGV5IGhhdmUgdG8gYmUgdmFsaWQgSlNcbi8vIGlkZW50aWZpZXJzLCB0aHVzIHdlIG9ubHkgbmVlZCB0byByZXBsYWNlIHdoYXQgaXMgYSB2YWxpZCBjaGFyYWN0ZXIgZm9yIEpTLFxuLy8gYnV0IG5vdCBmb3IgQ1NTLlxuXG52YXIgc2FuaXRpemVJZGVudGlmaWVyID0gZnVuY3Rpb24gc2FuaXRpemVJZGVudGlmaWVyKGlkZW50aWZpZXIpIHtcbiAgcmV0dXJuIGlkZW50aWZpZXIucmVwbGFjZSgvXFwkL2csICctJyk7XG59O1xuXG52YXIgZ2V0TGFiZWxGcm9tU3RhY2tUcmFjZSA9IGZ1bmN0aW9uIGdldExhYmVsRnJvbVN0YWNrVHJhY2Uoc3RhY2tUcmFjZSkge1xuICBpZiAoIXN0YWNrVHJhY2UpIHJldHVybiB1bmRlZmluZWQ7XG4gIHZhciBsaW5lcyA9IHN0YWNrVHJhY2Uuc3BsaXQoJ1xcbicpO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZnVuY3Rpb25OYW1lID0gZ2V0RnVuY3Rpb25OYW1lRnJvbVN0YWNrVHJhY2VMaW5lKGxpbmVzW2ldKTsgLy8gVGhlIGZpcnN0IGxpbmUgb2YgVjggc3RhY2sgdHJhY2VzIGlzIGp1c3QgXCJFcnJvclwiXG5cbiAgICBpZiAoIWZ1bmN0aW9uTmFtZSkgY29udGludWU7IC8vIElmIHdlIHJlYWNoIG9uZSBvZiB0aGVzZSwgd2UgaGF2ZSBnb25lIHRvbyBmYXIgYW5kIHNob3VsZCBxdWl0XG5cbiAgICBpZiAoaW50ZXJuYWxSZWFjdEZ1bmN0aW9uTmFtZXMuaGFzKGZ1bmN0aW9uTmFtZSkpIGJyZWFrOyAvLyBUaGUgY29tcG9uZW50IG5hbWUgaXMgdGhlIGZpcnN0IGZ1bmN0aW9uIGluIHRoZSBzdGFjayB0aGF0IHN0YXJ0cyB3aXRoIGFuXG4gICAgLy8gdXBwZXJjYXNlIGxldHRlclxuXG4gICAgaWYgKC9eW0EtWl0vLnRlc3QoZnVuY3Rpb25OYW1lKSkgcmV0dXJuIHNhbml0aXplSWRlbnRpZmllcihmdW5jdGlvbk5hbWUpO1xuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbnZhciB0eXBlUHJvcE5hbWUgPSAnX19FTU9USU9OX1RZUEVfUExFQVNFX0RPX05PVF9VU0VfXyc7XG52YXIgbGFiZWxQcm9wTmFtZSA9ICdfX0VNT1RJT05fTEFCRUxfUExFQVNFX0RPX05PVF9VU0VfXyc7XG52YXIgY3JlYXRlRW1vdGlvblByb3BzID0gZnVuY3Rpb24gY3JlYXRlRW1vdGlvblByb3BzKHR5cGUsIHByb3BzKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHR5cGVvZiBwcm9wcy5jc3MgPT09ICdzdHJpbmcnICYmIC8vIGNoZWNrIGlmIHRoZXJlIGlzIGEgY3NzIGRlY2xhcmF0aW9uXG4gIHByb3BzLmNzcy5pbmRleE9mKCc6JykgIT09IC0xKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiU3RyaW5ncyBhcmUgbm90IGFsbG93ZWQgYXMgY3NzIHByb3AgdmFsdWVzLCBwbGVhc2Ugd3JhcCBpdCBpbiBhIGNzcyB0ZW1wbGF0ZSBsaXRlcmFsIGZyb20gJ0BlbW90aW9uL3JlYWN0JyBsaWtlIHRoaXM6IGNzc2BcIiArIHByb3BzLmNzcyArIFwiYFwiKTtcbiAgfVxuXG4gIHZhciBuZXdQcm9wcyA9IHt9O1xuXG4gIGZvciAodmFyIGtleSBpbiBwcm9wcykge1xuICAgIGlmIChoYXNPd24uY2FsbChwcm9wcywga2V5KSkge1xuICAgICAgbmV3UHJvcHNba2V5XSA9IHByb3BzW2tleV07XG4gICAgfVxuICB9XG5cbiAgbmV3UHJvcHNbdHlwZVByb3BOYW1lXSA9IHR5cGU7IC8vIEZvciBwZXJmb3JtYW5jZSwgb25seSBjYWxsIGdldExhYmVsRnJvbVN0YWNrVHJhY2UgaW4gZGV2ZWxvcG1lbnQgYW5kIHdoZW5cbiAgLy8gdGhlIGxhYmVsIGhhc24ndCBhbHJlYWR5IGJlZW4gY29tcHV0ZWRcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhIXByb3BzLmNzcyAmJiAodHlwZW9mIHByb3BzLmNzcyAhPT0gJ29iamVjdCcgfHwgdHlwZW9mIHByb3BzLmNzcy5uYW1lICE9PSAnc3RyaW5nJyB8fCBwcm9wcy5jc3MubmFtZS5pbmRleE9mKCctJykgPT09IC0xKSkge1xuICAgIHZhciBsYWJlbCA9IGdldExhYmVsRnJvbVN0YWNrVHJhY2UobmV3IEVycm9yKCkuc3RhY2spO1xuICAgIGlmIChsYWJlbCkgbmV3UHJvcHNbbGFiZWxQcm9wTmFtZV0gPSBsYWJlbDtcbiAgfVxuXG4gIHJldHVybiBuZXdQcm9wcztcbn07XG5cbnZhciBJbnNlcnRpb24gPSBmdW5jdGlvbiBJbnNlcnRpb24oX3JlZikge1xuICB2YXIgY2FjaGUgPSBfcmVmLmNhY2hlLFxuICAgICAgc2VyaWFsaXplZCA9IF9yZWYuc2VyaWFsaXplZCxcbiAgICAgIGlzU3RyaW5nVGFnID0gX3JlZi5pc1N0cmluZ1RhZztcbiAgcmVnaXN0ZXJTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQsIGlzU3RyaW5nVGFnKTtcbiAgdXNlSW5zZXJ0aW9uRWZmZWN0QWx3YXlzV2l0aFN5bmNGYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGluc2VydFN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgaXNTdHJpbmdUYWcpO1xuICB9KTtcblxuICByZXR1cm4gbnVsbDtcbn07XG5cbnZhciBFbW90aW9uID0gLyogI19fUFVSRV9fICovd2l0aEVtb3Rpb25DYWNoZShmdW5jdGlvbiAocHJvcHMsIGNhY2hlLCByZWYpIHtcbiAgdmFyIGNzc1Byb3AgPSBwcm9wcy5jc3M7IC8vIHNvIHRoYXQgdXNpbmcgYGNzc2AgZnJvbSBgZW1vdGlvbmAgYW5kIHBhc3NpbmcgdGhlIHJlc3VsdCB0byB0aGUgY3NzIHByb3Agd29ya3NcbiAgLy8gbm90IHBhc3NpbmcgdGhlIHJlZ2lzdGVyZWQgY2FjaGUgdG8gc2VyaWFsaXplU3R5bGVzIGJlY2F1c2UgaXQgd291bGRcbiAgLy8gbWFrZSBjZXJ0YWluIGJhYmVsIG9wdGltaXNhdGlvbnMgbm90IHBvc3NpYmxlXG5cbiAgaWYgKHR5cGVvZiBjc3NQcm9wID09PSAnc3RyaW5nJyAmJiBjYWNoZS5yZWdpc3RlcmVkW2Nzc1Byb3BdICE9PSB1bmRlZmluZWQpIHtcbiAgICBjc3NQcm9wID0gY2FjaGUucmVnaXN0ZXJlZFtjc3NQcm9wXTtcbiAgfVxuXG4gIHZhciBXcmFwcGVkQ29tcG9uZW50ID0gcHJvcHNbdHlwZVByb3BOYW1lXTtcbiAgdmFyIHJlZ2lzdGVyZWRTdHlsZXMgPSBbY3NzUHJvcF07XG4gIHZhciBjbGFzc05hbWUgPSAnJztcblxuICBpZiAodHlwZW9mIHByb3BzLmNsYXNzTmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICBjbGFzc05hbWUgPSBnZXRSZWdpc3RlcmVkU3R5bGVzKGNhY2hlLnJlZ2lzdGVyZWQsIHJlZ2lzdGVyZWRTdHlsZXMsIHByb3BzLmNsYXNzTmFtZSk7XG4gIH0gZWxzZSBpZiAocHJvcHMuY2xhc3NOYW1lICE9IG51bGwpIHtcbiAgICBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUgKyBcIiBcIjtcbiAgfVxuXG4gIHZhciBzZXJpYWxpemVkID0gc2VyaWFsaXplU3R5bGVzKHJlZ2lzdGVyZWRTdHlsZXMsIHVuZGVmaW5lZCwgUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpKTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBzZXJpYWxpemVkLm5hbWUuaW5kZXhPZignLScpID09PSAtMSkge1xuICAgIHZhciBsYWJlbEZyb21TdGFjayA9IHByb3BzW2xhYmVsUHJvcE5hbWVdO1xuXG4gICAgaWYgKGxhYmVsRnJvbVN0YWNrKSB7XG4gICAgICBzZXJpYWxpemVkID0gc2VyaWFsaXplU3R5bGVzKFtzZXJpYWxpemVkLCAnbGFiZWw6JyArIGxhYmVsRnJvbVN0YWNrICsgJzsnXSk7XG4gICAgfVxuICB9XG5cbiAgY2xhc3NOYW1lICs9IGNhY2hlLmtleSArIFwiLVwiICsgc2VyaWFsaXplZC5uYW1lO1xuICB2YXIgbmV3UHJvcHMgPSB7fTtcblxuICBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHtcbiAgICBpZiAoaGFzT3duLmNhbGwocHJvcHMsIGtleSkgJiYga2V5ICE9PSAnY3NzJyAmJiBrZXkgIT09IHR5cGVQcm9wTmFtZSAmJiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJyB8fCBrZXkgIT09IGxhYmVsUHJvcE5hbWUpKSB7XG4gICAgICBuZXdQcm9wc1trZXldID0gcHJvcHNba2V5XTtcbiAgICB9XG4gIH1cblxuICBuZXdQcm9wcy5yZWYgPSByZWY7XG4gIG5ld1Byb3BzLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJbnNlcnRpb24sIHtcbiAgICBjYWNoZTogY2FjaGUsXG4gICAgc2VyaWFsaXplZDogc2VyaWFsaXplZCxcbiAgICBpc1N0cmluZ1RhZzogdHlwZW9mIFdyYXBwZWRDb21wb25lbnQgPT09ICdzdHJpbmcnXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChXcmFwcGVkQ29tcG9uZW50LCBuZXdQcm9wcykpO1xufSk7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIEVtb3Rpb24uZGlzcGxheU5hbWUgPSAnRW1vdGlvbkNzc1Byb3BJbnRlcm5hbCc7XG59XG5cbnZhciBFbW90aW9uJDEgPSBFbW90aW9uO1xuXG5leHBvcnQgeyBDYWNoZVByb3ZpZGVyIGFzIEMsIEVtb3Rpb24kMSBhcyBFLCBUaGVtZUNvbnRleHQgYXMgVCwgX191bnNhZmVfdXNlRW1vdGlvbkNhY2hlIGFzIF8sIFRoZW1lUHJvdmlkZXIgYXMgYSwgd2l0aFRoZW1lIGFzIGIsIGNyZWF0ZUVtb3Rpb25Qcm9wcyBhcyBjLCBoYXNPd24gYXMgaCwgaXNCcm93c2VyIGFzIGksIHVzZVRoZW1lIGFzIHUsIHdpdGhFbW90aW9uQ2FjaGUgYXMgdyB9O1xuIiwgIi8qXG5cbkJhc2VkIG9mZiBnbGFtb3IncyBTdHlsZVNoZWV0LCB0aGFua3MgU3VuaWwgXHUyNzY0XHVGRTBGXG5cbmhpZ2ggcGVyZm9ybWFuY2UgU3R5bGVTaGVldCBmb3IgY3NzLWluLWpzIHN5c3RlbXNcblxuLSB1c2VzIG11bHRpcGxlIHN0eWxlIHRhZ3MgYmVoaW5kIHRoZSBzY2VuZXMgZm9yIG1pbGxpb25zIG9mIHJ1bGVzXG4tIHVzZXMgYGluc2VydFJ1bGVgIGZvciBhcHBlbmRpbmcgaW4gcHJvZHVjdGlvbiBmb3IgKm11Y2gqIGZhc3RlciBwZXJmb3JtYW5jZVxuXG4vLyB1c2FnZVxuXG5pbXBvcnQgeyBTdHlsZVNoZWV0IH0gZnJvbSAnQGVtb3Rpb24vc2hlZXQnXG5cbmxldCBzdHlsZVNoZWV0ID0gbmV3IFN0eWxlU2hlZXQoeyBrZXk6ICcnLCBjb250YWluZXI6IGRvY3VtZW50LmhlYWQgfSlcblxuc3R5bGVTaGVldC5pbnNlcnQoJyNib3ggeyBib3JkZXI6IDFweCBzb2xpZCByZWQ7IH0nKVxuLSBhcHBlbmRzIGEgY3NzIHJ1bGUgaW50byB0aGUgc3R5bGVzaGVldFxuXG5zdHlsZVNoZWV0LmZsdXNoKClcbi0gZW1wdGllcyB0aGUgc3R5bGVzaGVldCBvZiBhbGwgaXRzIGNvbnRlbnRzXG5cbiovXG4vLyAkRmxvd0ZpeE1lXG5mdW5jdGlvbiBzaGVldEZvclRhZyh0YWcpIHtcbiAgaWYgKHRhZy5zaGVldCkge1xuICAgIC8vICRGbG93Rml4TWVcbiAgICByZXR1cm4gdGFnLnNoZWV0O1xuICB9IC8vIHRoaXMgd2VpcmRuZXNzIGJyb3VnaHQgdG8geW91IGJ5IGZpcmVmb3hcblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBkb2N1bWVudC5zdHlsZVNoZWV0cy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChkb2N1bWVudC5zdHlsZVNoZWV0c1tpXS5vd25lck5vZGUgPT09IHRhZykge1xuICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgcmV0dXJuIGRvY3VtZW50LnN0eWxlU2hlZXRzW2ldO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVTdHlsZUVsZW1lbnQob3B0aW9ucykge1xuICB2YXIgdGFnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgdGFnLnNldEF0dHJpYnV0ZSgnZGF0YS1lbW90aW9uJywgb3B0aW9ucy5rZXkpO1xuXG4gIGlmIChvcHRpb25zLm5vbmNlICE9PSB1bmRlZmluZWQpIHtcbiAgICB0YWcuc2V0QXR0cmlidXRlKCdub25jZScsIG9wdGlvbnMubm9uY2UpO1xuICB9XG5cbiAgdGFnLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKSk7XG4gIHRhZy5zZXRBdHRyaWJ1dGUoJ2RhdGEtcycsICcnKTtcbiAgcmV0dXJuIHRhZztcbn1cblxudmFyIFN0eWxlU2hlZXQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICAvLyBVc2luZyBOb2RlIGluc3RlYWQgb2YgSFRNTEVsZW1lbnQgc2luY2UgY29udGFpbmVyIG1heSBiZSBhIFNoYWRvd1Jvb3RcbiAgZnVuY3Rpb24gU3R5bGVTaGVldChvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMuX2luc2VydFRhZyA9IGZ1bmN0aW9uICh0YWcpIHtcbiAgICAgIHZhciBiZWZvcmU7XG5cbiAgICAgIGlmIChfdGhpcy50YWdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBpZiAoX3RoaXMuaW5zZXJ0aW9uUG9pbnQpIHtcbiAgICAgICAgICBiZWZvcmUgPSBfdGhpcy5pbnNlcnRpb25Qb2ludC5uZXh0U2libGluZztcbiAgICAgICAgfSBlbHNlIGlmIChfdGhpcy5wcmVwZW5kKSB7XG4gICAgICAgICAgYmVmb3JlID0gX3RoaXMuY29udGFpbmVyLmZpcnN0Q2hpbGQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYmVmb3JlID0gX3RoaXMuYmVmb3JlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBiZWZvcmUgPSBfdGhpcy50YWdzW190aGlzLnRhZ3MubGVuZ3RoIC0gMV0ubmV4dFNpYmxpbmc7XG4gICAgICB9XG5cbiAgICAgIF90aGlzLmNvbnRhaW5lci5pbnNlcnRCZWZvcmUodGFnLCBiZWZvcmUpO1xuXG4gICAgICBfdGhpcy50YWdzLnB1c2godGFnKTtcbiAgICB9O1xuXG4gICAgdGhpcy5pc1NwZWVkeSA9IG9wdGlvbnMuc3BlZWR5ID09PSB1bmRlZmluZWQgPyBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nIDogb3B0aW9ucy5zcGVlZHk7XG4gICAgdGhpcy50YWdzID0gW107XG4gICAgdGhpcy5jdHIgPSAwO1xuICAgIHRoaXMubm9uY2UgPSBvcHRpb25zLm5vbmNlOyAvLyBrZXkgaXMgdGhlIHZhbHVlIG9mIHRoZSBkYXRhLWVtb3Rpb24gYXR0cmlidXRlLCBpdCdzIHVzZWQgdG8gaWRlbnRpZnkgZGlmZmVyZW50IHNoZWV0c1xuXG4gICAgdGhpcy5rZXkgPSBvcHRpb25zLmtleTtcbiAgICB0aGlzLmNvbnRhaW5lciA9IG9wdGlvbnMuY29udGFpbmVyO1xuICAgIHRoaXMucHJlcGVuZCA9IG9wdGlvbnMucHJlcGVuZDtcbiAgICB0aGlzLmluc2VydGlvblBvaW50ID0gb3B0aW9ucy5pbnNlcnRpb25Qb2ludDtcbiAgICB0aGlzLmJlZm9yZSA9IG51bGw7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gU3R5bGVTaGVldC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmh5ZHJhdGUgPSBmdW5jdGlvbiBoeWRyYXRlKG5vZGVzKSB7XG4gICAgbm9kZXMuZm9yRWFjaCh0aGlzLl9pbnNlcnRUYWcpO1xuICB9O1xuXG4gIF9wcm90by5pbnNlcnQgPSBmdW5jdGlvbiBpbnNlcnQocnVsZSkge1xuICAgIC8vIHRoZSBtYXggbGVuZ3RoIGlzIGhvdyBtYW55IHJ1bGVzIHdlIGhhdmUgcGVyIHN0eWxlIHRhZywgaXQncyA2NTAwMCBpbiBzcGVlZHkgbW9kZVxuICAgIC8vIGl0J3MgMSBpbiBkZXYgYmVjYXVzZSB3ZSBpbnNlcnQgc291cmNlIG1hcHMgdGhhdCBtYXAgYSBzaW5nbGUgcnVsZSB0byBhIGxvY2F0aW9uXG4gICAgLy8gYW5kIHlvdSBjYW4gb25seSBoYXZlIG9uZSBzb3VyY2UgbWFwIHBlciBzdHlsZSB0YWdcbiAgICBpZiAodGhpcy5jdHIgJSAodGhpcy5pc1NwZWVkeSA/IDY1MDAwIDogMSkgPT09IDApIHtcbiAgICAgIHRoaXMuX2luc2VydFRhZyhjcmVhdGVTdHlsZUVsZW1lbnQodGhpcykpO1xuICAgIH1cblxuICAgIHZhciB0YWcgPSB0aGlzLnRhZ3NbdGhpcy50YWdzLmxlbmd0aCAtIDFdO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHZhciBpc0ltcG9ydFJ1bGUgPSBydWxlLmNoYXJDb2RlQXQoMCkgPT09IDY0ICYmIHJ1bGUuY2hhckNvZGVBdCgxKSA9PT0gMTA1O1xuXG4gICAgICBpZiAoaXNJbXBvcnRSdWxlICYmIHRoaXMuX2FscmVhZHlJbnNlcnRlZE9yZGVySW5zZW5zaXRpdmVSdWxlKSB7XG4gICAgICAgIC8vIHRoaXMgd291bGQgb25seSBjYXVzZSBwcm9ibGVtIGluIHNwZWVkeSBtb2RlXG4gICAgICAgIC8vIGJ1dCB3ZSBkb24ndCB3YW50IGVuYWJsaW5nIHNwZWVkeSB0byBhZmZlY3QgdGhlIG9ic2VydmFibGUgYmVoYXZpb3JcbiAgICAgICAgLy8gc28gd2UgcmVwb3J0IHRoaXMgZXJyb3IgYXQgYWxsIHRpbWVzXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJZb3UncmUgYXR0ZW1wdGluZyB0byBpbnNlcnQgdGhlIGZvbGxvd2luZyBydWxlOlxcblwiICsgcnVsZSArICdcXG5cXG5gQGltcG9ydGAgcnVsZXMgbXVzdCBiZSBiZWZvcmUgYWxsIG90aGVyIHR5cGVzIG9mIHJ1bGVzIGluIGEgc3R5bGVzaGVldCBidXQgb3RoZXIgcnVsZXMgaGF2ZSBhbHJlYWR5IGJlZW4gaW5zZXJ0ZWQuIFBsZWFzZSBlbnN1cmUgdGhhdCBgQGltcG9ydGAgcnVsZXMgYXJlIGJlZm9yZSBhbGwgb3RoZXIgcnVsZXMuJyk7XG4gICAgICB9XG4gICAgICB0aGlzLl9hbHJlYWR5SW5zZXJ0ZWRPcmRlckluc2Vuc2l0aXZlUnVsZSA9IHRoaXMuX2FscmVhZHlJbnNlcnRlZE9yZGVySW5zZW5zaXRpdmVSdWxlIHx8ICFpc0ltcG9ydFJ1bGU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNTcGVlZHkpIHtcbiAgICAgIHZhciBzaGVldCA9IHNoZWV0Rm9yVGFnKHRhZyk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIHRoaXMgaXMgdGhlIHVsdHJhZmFzdCB2ZXJzaW9uLCB3b3JrcyBhY3Jvc3MgYnJvd3NlcnNcbiAgICAgICAgLy8gdGhlIGJpZyBkcmF3YmFjayBpcyB0aGF0IHRoZSBjc3Mgd29uJ3QgYmUgZWRpdGFibGUgaW4gZGV2dG9vbHNcbiAgICAgICAgc2hlZXQuaW5zZXJ0UnVsZShydWxlLCBzaGVldC5jc3NSdWxlcy5sZW5ndGgpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhLzooLW1vei1wbGFjZWhvbGRlcnwtbW96LWZvY3VzLWlubmVyfC1tb3otZm9jdXNyaW5nfC1tcy1pbnB1dC1wbGFjZWhvbGRlcnwtbW96LXJlYWQtd3JpdGV8LW1vei1yZWFkLW9ubHl8LW1zLWNsZWFyfC1tcy1leHBhbmR8LW1zLXJldmVhbCl7Ly50ZXN0KHJ1bGUpKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcIlRoZXJlIHdhcyBhIHByb2JsZW0gaW5zZXJ0aW5nIHRoZSBmb2xsb3dpbmcgcnVsZTogXFxcIlwiICsgcnVsZSArIFwiXFxcIlwiLCBlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0YWcuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocnVsZSkpO1xuICAgIH1cblxuICAgIHRoaXMuY3RyKys7XG4gIH07XG5cbiAgX3Byb3RvLmZsdXNoID0gZnVuY3Rpb24gZmx1c2goKSB7XG4gICAgLy8gJEZsb3dGaXhNZVxuICAgIHRoaXMudGFncy5mb3JFYWNoKGZ1bmN0aW9uICh0YWcpIHtcbiAgICAgIHJldHVybiB0YWcucGFyZW50Tm9kZSAmJiB0YWcucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0YWcpO1xuICAgIH0pO1xuICAgIHRoaXMudGFncyA9IFtdO1xuICAgIHRoaXMuY3RyID0gMDtcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB0aGlzLl9hbHJlYWR5SW5zZXJ0ZWRPcmRlckluc2Vuc2l0aXZlUnVsZSA9IGZhbHNlO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gU3R5bGVTaGVldDtcbn0oKTtcblxuZXhwb3J0IHsgU3R5bGVTaGVldCB9O1xuIiwgImV4cG9ydCB2YXIgTVMgPSAnLW1zLSdcbmV4cG9ydCB2YXIgTU9aID0gJy1tb3otJ1xuZXhwb3J0IHZhciBXRUJLSVQgPSAnLXdlYmtpdC0nXG5cbmV4cG9ydCB2YXIgQ09NTUVOVCA9ICdjb21tJ1xuZXhwb3J0IHZhciBSVUxFU0VUID0gJ3J1bGUnXG5leHBvcnQgdmFyIERFQ0xBUkFUSU9OID0gJ2RlY2wnXG5cbmV4cG9ydCB2YXIgUEFHRSA9ICdAcGFnZSdcbmV4cG9ydCB2YXIgTUVESUEgPSAnQG1lZGlhJ1xuZXhwb3J0IHZhciBJTVBPUlQgPSAnQGltcG9ydCdcbmV4cG9ydCB2YXIgQ0hBUlNFVCA9ICdAY2hhcnNldCdcbmV4cG9ydCB2YXIgVklFV1BPUlQgPSAnQHZpZXdwb3J0J1xuZXhwb3J0IHZhciBTVVBQT1JUUyA9ICdAc3VwcG9ydHMnXG5leHBvcnQgdmFyIERPQ1VNRU5UID0gJ0Bkb2N1bWVudCdcbmV4cG9ydCB2YXIgTkFNRVNQQUNFID0gJ0BuYW1lc3BhY2UnXG5leHBvcnQgdmFyIEtFWUZSQU1FUyA9ICdAa2V5ZnJhbWVzJ1xuZXhwb3J0IHZhciBGT05UX0ZBQ0UgPSAnQGZvbnQtZmFjZSdcbmV4cG9ydCB2YXIgQ09VTlRFUl9TVFlMRSA9ICdAY291bnRlci1zdHlsZSdcbmV4cG9ydCB2YXIgRk9OVF9GRUFUVVJFX1ZBTFVFUyA9ICdAZm9udC1mZWF0dXJlLXZhbHVlcydcbmV4cG9ydCB2YXIgTEFZRVIgPSAnQGxheWVyJ1xuIiwgIi8qKlxuICogQHBhcmFtIHtudW1iZXJ9XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCB2YXIgYWJzID0gTWF0aC5hYnNcblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn1cbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IHZhciBmcm9tID0gU3RyaW5nLmZyb21DaGFyQ29kZVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fVxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgdmFyIGFzc2lnbiA9IE9iamVjdC5hc3NpZ25cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGhcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc2ggKHZhbHVlLCBsZW5ndGgpIHtcblx0cmV0dXJuIGNoYXJhdCh2YWx1ZSwgMCkgXiA0NSA/ICgoKCgoKChsZW5ndGggPDwgMikgXiBjaGFyYXQodmFsdWUsIDApKSA8PCAyKSBeIGNoYXJhdCh2YWx1ZSwgMSkpIDw8IDIpIF4gY2hhcmF0KHZhbHVlLCAyKSkgPDwgMikgXiBjaGFyYXQodmFsdWUsIDMpIDogMFxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdHJpbSAodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlLnRyaW0oKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtSZWdFeHB9IHBhdHRlcm5cbiAqIEByZXR1cm4ge3N0cmluZz99XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXRjaCAodmFsdWUsIHBhdHRlcm4pIHtcblx0cmV0dXJuICh2YWx1ZSA9IHBhdHRlcm4uZXhlYyh2YWx1ZSkpID8gdmFsdWVbMF0gOiB2YWx1ZVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHsoc3RyaW5nfFJlZ0V4cCl9IHBhdHRlcm5cbiAqIEBwYXJhbSB7c3RyaW5nfSByZXBsYWNlbWVudFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZSAodmFsdWUsIHBhdHRlcm4sIHJlcGxhY2VtZW50KSB7XG5cdHJldHVybiB2YWx1ZS5yZXBsYWNlKHBhdHRlcm4sIHJlcGxhY2VtZW50KVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IHNlYXJjaFxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5kZXhvZiAodmFsdWUsIHNlYXJjaCkge1xuXHRyZXR1cm4gdmFsdWUuaW5kZXhPZihzZWFyY2gpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoYXJhdCAodmFsdWUsIGluZGV4KSB7XG5cdHJldHVybiB2YWx1ZS5jaGFyQ29kZUF0KGluZGV4KSB8IDBcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBiZWdpblxuICogQHBhcmFtIHtudW1iZXJ9IGVuZFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3Vic3RyICh2YWx1ZSwgYmVnaW4sIGVuZCkge1xuXHRyZXR1cm4gdmFsdWUuc2xpY2UoYmVnaW4sIGVuZClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmxlbiAodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlLmxlbmd0aFxufVxuXG4vKipcbiAqIEBwYXJhbSB7YW55W119IHZhbHVlXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaXplb2YgKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZS5sZW5ndGhcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2FueX0gdmFsdWVcbiAqIEBwYXJhbSB7YW55W119IGFycmF5XG4gKiBAcmV0dXJuIHthbnl9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmQgKHZhbHVlLCBhcnJheSkge1xuXHRyZXR1cm4gYXJyYXkucHVzaCh2YWx1ZSksIHZhbHVlXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmdbXX0gYXJyYXlcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lIChhcnJheSwgY2FsbGJhY2spIHtcblx0cmV0dXJuIGFycmF5Lm1hcChjYWxsYmFjaykuam9pbignJylcbn1cbiIsICJpbXBvcnQge2Zyb20sIHRyaW0sIGNoYXJhdCwgc3RybGVuLCBzdWJzdHIsIGFwcGVuZCwgYXNzaWdufSBmcm9tICcuL1V0aWxpdHkuanMnXG5cbmV4cG9ydCB2YXIgbGluZSA9IDFcbmV4cG9ydCB2YXIgY29sdW1uID0gMVxuZXhwb3J0IHZhciBsZW5ndGggPSAwXG5leHBvcnQgdmFyIHBvc2l0aW9uID0gMFxuZXhwb3J0IHZhciBjaGFyYWN0ZXIgPSAwXG5leHBvcnQgdmFyIGNoYXJhY3RlcnMgPSAnJ1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtvYmplY3QgfCBudWxsfSByb290XG4gKiBAcGFyYW0ge29iamVjdCB8IG51bGx9IHBhcmVudFxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7c3RyaW5nW10gfCBzdHJpbmd9IHByb3BzXG4gKiBAcGFyYW0ge29iamVjdFtdIHwgc3RyaW5nfSBjaGlsZHJlblxuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9kZSAodmFsdWUsIHJvb3QsIHBhcmVudCwgdHlwZSwgcHJvcHMsIGNoaWxkcmVuLCBsZW5ndGgpIHtcblx0cmV0dXJuIHt2YWx1ZTogdmFsdWUsIHJvb3Q6IHJvb3QsIHBhcmVudDogcGFyZW50LCB0eXBlOiB0eXBlLCBwcm9wczogcHJvcHMsIGNoaWxkcmVuOiBjaGlsZHJlbiwgbGluZTogbGluZSwgY29sdW1uOiBjb2x1bW4sIGxlbmd0aDogbGVuZ3RoLCByZXR1cm46ICcnfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSByb290XG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHNcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvcHkgKHJvb3QsIHByb3BzKSB7XG5cdHJldHVybiBhc3NpZ24obm9kZSgnJywgbnVsbCwgbnVsbCwgJycsIG51bGwsIG51bGwsIDApLCByb290LCB7bGVuZ3RoOiAtcm9vdC5sZW5ndGh9LCBwcm9wcylcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGFyICgpIHtcblx0cmV0dXJuIGNoYXJhY3RlclxufVxuXG4vKipcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZXYgKCkge1xuXHRjaGFyYWN0ZXIgPSBwb3NpdGlvbiA+IDAgPyBjaGFyYXQoY2hhcmFjdGVycywgLS1wb3NpdGlvbikgOiAwXG5cblx0aWYgKGNvbHVtbi0tLCBjaGFyYWN0ZXIgPT09IDEwKVxuXHRcdGNvbHVtbiA9IDEsIGxpbmUtLVxuXG5cdHJldHVybiBjaGFyYWN0ZXJcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBuZXh0ICgpIHtcblx0Y2hhcmFjdGVyID0gcG9zaXRpb24gPCBsZW5ndGggPyBjaGFyYXQoY2hhcmFjdGVycywgcG9zaXRpb24rKykgOiAwXG5cblx0aWYgKGNvbHVtbisrLCBjaGFyYWN0ZXIgPT09IDEwKVxuXHRcdGNvbHVtbiA9IDEsIGxpbmUrK1xuXG5cdHJldHVybiBjaGFyYWN0ZXJcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwZWVrICgpIHtcblx0cmV0dXJuIGNoYXJhdChjaGFyYWN0ZXJzLCBwb3NpdGlvbilcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYXJldCAoKSB7XG5cdHJldHVybiBwb3NpdGlvblxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSBiZWdpblxuICogQHBhcmFtIHtudW1iZXJ9IGVuZFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2xpY2UgKGJlZ2luLCBlbmQpIHtcblx0cmV0dXJuIHN1YnN0cihjaGFyYWN0ZXJzLCBiZWdpbiwgZW5kKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2tlbiAodHlwZSkge1xuXHRzd2l0Y2ggKHR5cGUpIHtcblx0XHQvLyBcXDAgXFx0IFxcbiBcXHIgXFxzIHdoaXRlc3BhY2UgdG9rZW5cblx0XHRjYXNlIDA6IGNhc2UgOTogY2FzZSAxMDogY2FzZSAxMzogY2FzZSAzMjpcblx0XHRcdHJldHVybiA1XG5cdFx0Ly8gISArICwgLyA+IEAgfiBpc29sYXRlIHRva2VuXG5cdFx0Y2FzZSAzMzogY2FzZSA0MzogY2FzZSA0NDogY2FzZSA0NzogY2FzZSA2MjogY2FzZSA2NDogY2FzZSAxMjY6XG5cdFx0Ly8gOyB7IH0gYnJlYWtwb2ludCB0b2tlblxuXHRcdGNhc2UgNTk6IGNhc2UgMTIzOiBjYXNlIDEyNTpcblx0XHRcdHJldHVybiA0XG5cdFx0Ly8gOiBhY2NvbXBhbmllZCB0b2tlblxuXHRcdGNhc2UgNTg6XG5cdFx0XHRyZXR1cm4gM1xuXHRcdC8vIFwiICcgKCBbIG9wZW5pbmcgZGVsaW1pdCB0b2tlblxuXHRcdGNhc2UgMzQ6IGNhc2UgMzk6IGNhc2UgNDA6IGNhc2UgOTE6XG5cdFx0XHRyZXR1cm4gMlxuXHRcdC8vICkgXSBjbG9zaW5nIGRlbGltaXQgdG9rZW5cblx0XHRjYXNlIDQxOiBjYXNlIDkzOlxuXHRcdFx0cmV0dXJuIDFcblx0fVxuXG5cdHJldHVybiAwXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHthbnlbXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFsbG9jICh2YWx1ZSkge1xuXHRyZXR1cm4gbGluZSA9IGNvbHVtbiA9IDEsIGxlbmd0aCA9IHN0cmxlbihjaGFyYWN0ZXJzID0gdmFsdWUpLCBwb3NpdGlvbiA9IDAsIFtdXG59XG5cbi8qKlxuICogQHBhcmFtIHthbnl9IHZhbHVlXG4gKiBAcmV0dXJuIHthbnl9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWFsbG9jICh2YWx1ZSkge1xuXHRyZXR1cm4gY2hhcmFjdGVycyA9ICcnLCB2YWx1ZVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWxpbWl0ICh0eXBlKSB7XG5cdHJldHVybiB0cmltKHNsaWNlKHBvc2l0aW9uIC0gMSwgZGVsaW1pdGVyKHR5cGUgPT09IDkxID8gdHlwZSArIDIgOiB0eXBlID09PSA0MCA/IHR5cGUgKyAxIDogdHlwZSkpKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7c3RyaW5nW119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2tlbml6ZSAodmFsdWUpIHtcblx0cmV0dXJuIGRlYWxsb2ModG9rZW5pemVyKGFsbG9jKHZhbHVlKSkpXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHR5cGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdoaXRlc3BhY2UgKHR5cGUpIHtcblx0d2hpbGUgKGNoYXJhY3RlciA9IHBlZWsoKSlcblx0XHRpZiAoY2hhcmFjdGVyIDwgMzMpXG5cdFx0XHRuZXh0KClcblx0XHRlbHNlXG5cdFx0XHRicmVha1xuXG5cdHJldHVybiB0b2tlbih0eXBlKSA+IDIgfHwgdG9rZW4oY2hhcmFjdGVyKSA+IDMgPyAnJyA6ICcgJ1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nW119IGNoaWxkcmVuXG4gKiBAcmV0dXJuIHtzdHJpbmdbXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRva2VuaXplciAoY2hpbGRyZW4pIHtcblx0d2hpbGUgKG5leHQoKSlcblx0XHRzd2l0Y2ggKHRva2VuKGNoYXJhY3RlcikpIHtcblx0XHRcdGNhc2UgMDogYXBwZW5kKGlkZW50aWZpZXIocG9zaXRpb24gLSAxKSwgY2hpbGRyZW4pXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHRjYXNlIDI6IGFwcGVuZChkZWxpbWl0KGNoYXJhY3RlciksIGNoaWxkcmVuKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0ZGVmYXVsdDogYXBwZW5kKGZyb20oY2hhcmFjdGVyKSwgY2hpbGRyZW4pXG5cdFx0fVxuXG5cdHJldHVybiBjaGlsZHJlblxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHBhcmFtIHtudW1iZXJ9IGNvdW50XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGluZyAoaW5kZXgsIGNvdW50KSB7XG5cdHdoaWxlICgtLWNvdW50ICYmIG5leHQoKSlcblx0XHQvLyBub3QgMC05IEEtRiBhLWZcblx0XHRpZiAoY2hhcmFjdGVyIDwgNDggfHwgY2hhcmFjdGVyID4gMTAyIHx8IChjaGFyYWN0ZXIgPiA1NyAmJiBjaGFyYWN0ZXIgPCA2NSkgfHwgKGNoYXJhY3RlciA+IDcwICYmIGNoYXJhY3RlciA8IDk3KSlcblx0XHRcdGJyZWFrXG5cblx0cmV0dXJuIHNsaWNlKGluZGV4LCBjYXJldCgpICsgKGNvdW50IDwgNiAmJiBwZWVrKCkgPT0gMzIgJiYgbmV4dCgpID09IDMyKSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVsaW1pdGVyICh0eXBlKSB7XG5cdHdoaWxlIChuZXh0KCkpXG5cdFx0c3dpdGNoIChjaGFyYWN0ZXIpIHtcblx0XHRcdC8vIF0gKSBcIiAnXG5cdFx0XHRjYXNlIHR5cGU6XG5cdFx0XHRcdHJldHVybiBwb3NpdGlvblxuXHRcdFx0Ly8gXCIgJ1xuXHRcdFx0Y2FzZSAzNDogY2FzZSAzOTpcblx0XHRcdFx0aWYgKHR5cGUgIT09IDM0ICYmIHR5cGUgIT09IDM5KVxuXHRcdFx0XHRcdGRlbGltaXRlcihjaGFyYWN0ZXIpXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHQvLyAoXG5cdFx0XHRjYXNlIDQwOlxuXHRcdFx0XHRpZiAodHlwZSA9PT0gNDEpXG5cdFx0XHRcdFx0ZGVsaW1pdGVyKHR5cGUpXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHQvLyBcXFxuXHRcdFx0Y2FzZSA5Mjpcblx0XHRcdFx0bmV4dCgpXG5cdFx0XHRcdGJyZWFrXG5cdFx0fVxuXG5cdHJldHVybiBwb3NpdGlvblxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbW1lbnRlciAodHlwZSwgaW5kZXgpIHtcblx0d2hpbGUgKG5leHQoKSlcblx0XHQvLyAvL1xuXHRcdGlmICh0eXBlICsgY2hhcmFjdGVyID09PSA0NyArIDEwKVxuXHRcdFx0YnJlYWtcblx0XHQvLyAvKlxuXHRcdGVsc2UgaWYgKHR5cGUgKyBjaGFyYWN0ZXIgPT09IDQyICsgNDIgJiYgcGVlaygpID09PSA0Nylcblx0XHRcdGJyZWFrXG5cblx0cmV0dXJuICcvKicgKyBzbGljZShpbmRleCwgcG9zaXRpb24gLSAxKSArICcqJyArIGZyb20odHlwZSA9PT0gNDcgPyB0eXBlIDogbmV4dCgpKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpZmllciAoaW5kZXgpIHtcblx0d2hpbGUgKCF0b2tlbihwZWVrKCkpKVxuXHRcdG5leHQoKVxuXG5cdHJldHVybiBzbGljZShpbmRleCwgcG9zaXRpb24pXG59XG4iLCAiaW1wb3J0IHtDT01NRU5ULCBSVUxFU0VULCBERUNMQVJBVElPTn0gZnJvbSAnLi9FbnVtLmpzJ1xuaW1wb3J0IHthYnMsIGNoYXJhdCwgdHJpbSwgZnJvbSwgc2l6ZW9mLCBzdHJsZW4sIHN1YnN0ciwgYXBwZW5kLCByZXBsYWNlLCBpbmRleG9mfSBmcm9tICcuL1V0aWxpdHkuanMnXG5pbXBvcnQge25vZGUsIGNoYXIsIHByZXYsIG5leHQsIHBlZWssIGNhcmV0LCBhbGxvYywgZGVhbGxvYywgZGVsaW1pdCwgd2hpdGVzcGFjZSwgZXNjYXBpbmcsIGlkZW50aWZpZXIsIGNvbW1lbnRlcn0gZnJvbSAnLi9Ub2tlbml6ZXIuanMnXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHtvYmplY3RbXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXBpbGUgKHZhbHVlKSB7XG5cdHJldHVybiBkZWFsbG9jKHBhcnNlKCcnLCBudWxsLCBudWxsLCBudWxsLCBbJyddLCB2YWx1ZSA9IGFsbG9jKHZhbHVlKSwgMCwgWzBdLCB2YWx1ZSkpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge29iamVjdH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3Q/fSBwYXJlbnRcbiAqIEBwYXJhbSB7c3RyaW5nW119IHJ1bGVcbiAqIEBwYXJhbSB7c3RyaW5nW119IHJ1bGVzXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBydWxlc2V0c1xuICogQHBhcmFtIHtudW1iZXJbXX0gcHNldWRvXG4gKiBAcGFyYW0ge251bWJlcltdfSBwb2ludHNcbiAqIEBwYXJhbSB7c3RyaW5nW119IGRlY2xhcmF0aW9uc1xuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2UgKHZhbHVlLCByb290LCBwYXJlbnQsIHJ1bGUsIHJ1bGVzLCBydWxlc2V0cywgcHNldWRvLCBwb2ludHMsIGRlY2xhcmF0aW9ucykge1xuXHR2YXIgaW5kZXggPSAwXG5cdHZhciBvZmZzZXQgPSAwXG5cdHZhciBsZW5ndGggPSBwc2V1ZG9cblx0dmFyIGF0cnVsZSA9IDBcblx0dmFyIHByb3BlcnR5ID0gMFxuXHR2YXIgcHJldmlvdXMgPSAwXG5cdHZhciB2YXJpYWJsZSA9IDFcblx0dmFyIHNjYW5uaW5nID0gMVxuXHR2YXIgYW1wZXJzYW5kID0gMVxuXHR2YXIgY2hhcmFjdGVyID0gMFxuXHR2YXIgdHlwZSA9ICcnXG5cdHZhciBwcm9wcyA9IHJ1bGVzXG5cdHZhciBjaGlsZHJlbiA9IHJ1bGVzZXRzXG5cdHZhciByZWZlcmVuY2UgPSBydWxlXG5cdHZhciBjaGFyYWN0ZXJzID0gdHlwZVxuXG5cdHdoaWxlIChzY2FubmluZylcblx0XHRzd2l0Y2ggKHByZXZpb3VzID0gY2hhcmFjdGVyLCBjaGFyYWN0ZXIgPSBuZXh0KCkpIHtcblx0XHRcdC8vIChcblx0XHRcdGNhc2UgNDA6XG5cdFx0XHRcdGlmIChwcmV2aW91cyAhPSAxMDggJiYgY2hhcmF0KGNoYXJhY3RlcnMsIGxlbmd0aCAtIDEpID09IDU4KSB7XG5cdFx0XHRcdFx0aWYgKGluZGV4b2YoY2hhcmFjdGVycyArPSByZXBsYWNlKGRlbGltaXQoY2hhcmFjdGVyKSwgJyYnLCAnJlxcZicpLCAnJlxcZicpICE9IC0xKVxuXHRcdFx0XHRcdFx0YW1wZXJzYW5kID0gLTFcblx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHR9XG5cdFx0XHQvLyBcIiAnIFtcblx0XHRcdGNhc2UgMzQ6IGNhc2UgMzk6IGNhc2UgOTE6XG5cdFx0XHRcdGNoYXJhY3RlcnMgKz0gZGVsaW1pdChjaGFyYWN0ZXIpXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHQvLyBcXHQgXFxuIFxcciBcXHNcblx0XHRcdGNhc2UgOTogY2FzZSAxMDogY2FzZSAxMzogY2FzZSAzMjpcblx0XHRcdFx0Y2hhcmFjdGVycyArPSB3aGl0ZXNwYWNlKHByZXZpb3VzKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8gXFxcblx0XHRcdGNhc2UgOTI6XG5cdFx0XHRcdGNoYXJhY3RlcnMgKz0gZXNjYXBpbmcoY2FyZXQoKSAtIDEsIDcpXG5cdFx0XHRcdGNvbnRpbnVlXG5cdFx0XHQvLyAvXG5cdFx0XHRjYXNlIDQ3OlxuXHRcdFx0XHRzd2l0Y2ggKHBlZWsoKSkge1xuXHRcdFx0XHRcdGNhc2UgNDI6IGNhc2UgNDc6XG5cdFx0XHRcdFx0XHRhcHBlbmQoY29tbWVudChjb21tZW50ZXIobmV4dCgpLCBjYXJldCgpKSwgcm9vdCwgcGFyZW50KSwgZGVjbGFyYXRpb25zKVxuXHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0Y2hhcmFjdGVycyArPSAnLydcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8ge1xuXHRcdFx0Y2FzZSAxMjMgKiB2YXJpYWJsZTpcblx0XHRcdFx0cG9pbnRzW2luZGV4KytdID0gc3RybGVuKGNoYXJhY3RlcnMpICogYW1wZXJzYW5kXG5cdFx0XHQvLyB9IDsgXFwwXG5cdFx0XHRjYXNlIDEyNSAqIHZhcmlhYmxlOiBjYXNlIDU5OiBjYXNlIDA6XG5cdFx0XHRcdHN3aXRjaCAoY2hhcmFjdGVyKSB7XG5cdFx0XHRcdFx0Ly8gXFwwIH1cblx0XHRcdFx0XHRjYXNlIDA6IGNhc2UgMTI1OiBzY2FubmluZyA9IDBcblx0XHRcdFx0XHQvLyA7XG5cdFx0XHRcdFx0Y2FzZSA1OSArIG9mZnNldDogaWYgKGFtcGVyc2FuZCA9PSAtMSkgY2hhcmFjdGVycyA9IHJlcGxhY2UoY2hhcmFjdGVycywgL1xcZi9nLCAnJylcblx0XHRcdFx0XHRcdGlmIChwcm9wZXJ0eSA+IDAgJiYgKHN0cmxlbihjaGFyYWN0ZXJzKSAtIGxlbmd0aCkpXG5cdFx0XHRcdFx0XHRcdGFwcGVuZChwcm9wZXJ0eSA+IDMyID8gZGVjbGFyYXRpb24oY2hhcmFjdGVycyArICc7JywgcnVsZSwgcGFyZW50LCBsZW5ndGggLSAxKSA6IGRlY2xhcmF0aW9uKHJlcGxhY2UoY2hhcmFjdGVycywgJyAnLCAnJykgKyAnOycsIHJ1bGUsIHBhcmVudCwgbGVuZ3RoIC0gMiksIGRlY2xhcmF0aW9ucylcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0Ly8gQCA7XG5cdFx0XHRcdFx0Y2FzZSA1OTogY2hhcmFjdGVycyArPSAnOydcblx0XHRcdFx0XHQvLyB7IHJ1bGUvYXQtcnVsZVxuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRhcHBlbmQocmVmZXJlbmNlID0gcnVsZXNldChjaGFyYWN0ZXJzLCByb290LCBwYXJlbnQsIGluZGV4LCBvZmZzZXQsIHJ1bGVzLCBwb2ludHMsIHR5cGUsIHByb3BzID0gW10sIGNoaWxkcmVuID0gW10sIGxlbmd0aCksIHJ1bGVzZXRzKVxuXG5cdFx0XHRcdFx0XHRpZiAoY2hhcmFjdGVyID09PSAxMjMpXG5cdFx0XHRcdFx0XHRcdGlmIChvZmZzZXQgPT09IDApXG5cdFx0XHRcdFx0XHRcdFx0cGFyc2UoY2hhcmFjdGVycywgcm9vdCwgcmVmZXJlbmNlLCByZWZlcmVuY2UsIHByb3BzLCBydWxlc2V0cywgbGVuZ3RoLCBwb2ludHMsIGNoaWxkcmVuKVxuXHRcdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdFx0c3dpdGNoIChhdHJ1bGUgPT09IDk5ICYmIGNoYXJhdChjaGFyYWN0ZXJzLCAzKSA9PT0gMTEwID8gMTAwIDogYXRydWxlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBkIGwgbSBzXG5cdFx0XHRcdFx0XHRcdFx0XHRjYXNlIDEwMDogY2FzZSAxMDg6IGNhc2UgMTA5OiBjYXNlIDExNTpcblx0XHRcdFx0XHRcdFx0XHRcdFx0cGFyc2UodmFsdWUsIHJlZmVyZW5jZSwgcmVmZXJlbmNlLCBydWxlICYmIGFwcGVuZChydWxlc2V0KHZhbHVlLCByZWZlcmVuY2UsIHJlZmVyZW5jZSwgMCwgMCwgcnVsZXMsIHBvaW50cywgdHlwZSwgcnVsZXMsIHByb3BzID0gW10sIGxlbmd0aCksIGNoaWxkcmVuKSwgcnVsZXMsIGNoaWxkcmVuLCBsZW5ndGgsIHBvaW50cywgcnVsZSA/IHByb3BzIDogY2hpbGRyZW4pXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRwYXJzZShjaGFyYWN0ZXJzLCByZWZlcmVuY2UsIHJlZmVyZW5jZSwgcmVmZXJlbmNlLCBbJyddLCBjaGlsZHJlbiwgMCwgcG9pbnRzLCBjaGlsZHJlbilcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpbmRleCA9IG9mZnNldCA9IHByb3BlcnR5ID0gMCwgdmFyaWFibGUgPSBhbXBlcnNhbmQgPSAxLCB0eXBlID0gY2hhcmFjdGVycyA9ICcnLCBsZW5ndGggPSBwc2V1ZG9cblx0XHRcdFx0YnJlYWtcblx0XHRcdC8vIDpcblx0XHRcdGNhc2UgNTg6XG5cdFx0XHRcdGxlbmd0aCA9IDEgKyBzdHJsZW4oY2hhcmFjdGVycyksIHByb3BlcnR5ID0gcHJldmlvdXNcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGlmICh2YXJpYWJsZSA8IDEpXG5cdFx0XHRcdFx0aWYgKGNoYXJhY3RlciA9PSAxMjMpXG5cdFx0XHRcdFx0XHQtLXZhcmlhYmxlXG5cdFx0XHRcdFx0ZWxzZSBpZiAoY2hhcmFjdGVyID09IDEyNSAmJiB2YXJpYWJsZSsrID09IDAgJiYgcHJldigpID09IDEyNSlcblx0XHRcdFx0XHRcdGNvbnRpbnVlXG5cblx0XHRcdFx0c3dpdGNoIChjaGFyYWN0ZXJzICs9IGZyb20oY2hhcmFjdGVyKSwgY2hhcmFjdGVyICogdmFyaWFibGUpIHtcblx0XHRcdFx0XHQvLyAmXG5cdFx0XHRcdFx0Y2FzZSAzODpcblx0XHRcdFx0XHRcdGFtcGVyc2FuZCA9IG9mZnNldCA+IDAgPyAxIDogKGNoYXJhY3RlcnMgKz0gJ1xcZicsIC0xKVxuXHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHQvLyAsXG5cdFx0XHRcdFx0Y2FzZSA0NDpcblx0XHRcdFx0XHRcdHBvaW50c1tpbmRleCsrXSA9IChzdHJsZW4oY2hhcmFjdGVycykgLSAxKSAqIGFtcGVyc2FuZCwgYW1wZXJzYW5kID0gMVxuXHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHQvLyBAXG5cdFx0XHRcdFx0Y2FzZSA2NDpcblx0XHRcdFx0XHRcdC8vIC1cblx0XHRcdFx0XHRcdGlmIChwZWVrKCkgPT09IDQ1KVxuXHRcdFx0XHRcdFx0XHRjaGFyYWN0ZXJzICs9IGRlbGltaXQobmV4dCgpKVxuXG5cdFx0XHRcdFx0XHRhdHJ1bGUgPSBwZWVrKCksIG9mZnNldCA9IGxlbmd0aCA9IHN0cmxlbih0eXBlID0gY2hhcmFjdGVycyArPSBpZGVudGlmaWVyKGNhcmV0KCkpKSwgY2hhcmFjdGVyKytcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0Ly8gLVxuXHRcdFx0XHRcdGNhc2UgNDU6XG5cdFx0XHRcdFx0XHRpZiAocHJldmlvdXMgPT09IDQ1ICYmIHN0cmxlbihjaGFyYWN0ZXJzKSA9PSAyKVxuXHRcdFx0XHRcdFx0XHR2YXJpYWJsZSA9IDBcblx0XHRcdFx0fVxuXHRcdH1cblxuXHRyZXR1cm4gcnVsZXNldHNcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7b2JqZWN0fSByb290XG4gKiBAcGFyYW0ge29iamVjdD99IHBhcmVudFxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0XG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBydWxlc1xuICogQHBhcmFtIHtudW1iZXJbXX0gcG9pbnRzXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtzdHJpbmdbXX0gcHJvcHNcbiAqIEBwYXJhbSB7c3RyaW5nW119IGNoaWxkcmVuXG4gKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydWxlc2V0ICh2YWx1ZSwgcm9vdCwgcGFyZW50LCBpbmRleCwgb2Zmc2V0LCBydWxlcywgcG9pbnRzLCB0eXBlLCBwcm9wcywgY2hpbGRyZW4sIGxlbmd0aCkge1xuXHR2YXIgcG9zdCA9IG9mZnNldCAtIDFcblx0dmFyIHJ1bGUgPSBvZmZzZXQgPT09IDAgPyBydWxlcyA6IFsnJ11cblx0dmFyIHNpemUgPSBzaXplb2YocnVsZSlcblxuXHRmb3IgKHZhciBpID0gMCwgaiA9IDAsIGsgPSAwOyBpIDwgaW5kZXg7ICsraSlcblx0XHRmb3IgKHZhciB4ID0gMCwgeSA9IHN1YnN0cih2YWx1ZSwgcG9zdCArIDEsIHBvc3QgPSBhYnMoaiA9IHBvaW50c1tpXSkpLCB6ID0gdmFsdWU7IHggPCBzaXplOyArK3gpXG5cdFx0XHRpZiAoeiA9IHRyaW0oaiA+IDAgPyBydWxlW3hdICsgJyAnICsgeSA6IHJlcGxhY2UoeSwgLyZcXGYvZywgcnVsZVt4XSkpKVxuXHRcdFx0XHRwcm9wc1trKytdID0gelxuXG5cdHJldHVybiBub2RlKHZhbHVlLCByb290LCBwYXJlbnQsIG9mZnNldCA9PT0gMCA/IFJVTEVTRVQgOiB0eXBlLCBwcm9wcywgY2hpbGRyZW4sIGxlbmd0aClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEBwYXJhbSB7b2JqZWN0fSByb290XG4gKiBAcGFyYW0ge29iamVjdD99IHBhcmVudFxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tbWVudCAodmFsdWUsIHJvb3QsIHBhcmVudCkge1xuXHRyZXR1cm4gbm9kZSh2YWx1ZSwgcm9vdCwgcGFyZW50LCBDT01NRU5ULCBmcm9tKGNoYXIoKSksIHN1YnN0cih2YWx1ZSwgMiwgLTIpLCAwKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtvYmplY3R9IHJvb3RcbiAqIEBwYXJhbSB7b2JqZWN0P30gcGFyZW50XG4gKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNsYXJhdGlvbiAodmFsdWUsIHJvb3QsIHBhcmVudCwgbGVuZ3RoKSB7XG5cdHJldHVybiBub2RlKHZhbHVlLCByb290LCBwYXJlbnQsIERFQ0xBUkFUSU9OLCBzdWJzdHIodmFsdWUsIDAsIGxlbmd0aCksIHN1YnN0cih2YWx1ZSwgbGVuZ3RoICsgMSwgLTEpLCBsZW5ndGgpXG59XG4iLCAiaW1wb3J0IHtJTVBPUlQsIExBWUVSLCBDT01NRU5ULCBSVUxFU0VULCBERUNMQVJBVElPTiwgS0VZRlJBTUVTfSBmcm9tICcuL0VudW0uanMnXG5pbXBvcnQge3N0cmxlbiwgc2l6ZW9mfSBmcm9tICcuL1V0aWxpdHkuanMnXG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3RbXX0gY2hpbGRyZW5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemUgKGNoaWxkcmVuLCBjYWxsYmFjaykge1xuXHR2YXIgb3V0cHV0ID0gJydcblx0dmFyIGxlbmd0aCA9IHNpemVvZihjaGlsZHJlbilcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKVxuXHRcdG91dHB1dCArPSBjYWxsYmFjayhjaGlsZHJlbltpXSwgaSwgY2hpbGRyZW4sIGNhbGxiYWNrKSB8fCAnJ1xuXG5cdHJldHVybiBvdXRwdXRcbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZWxlbWVudFxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcGFyYW0ge29iamVjdFtdfSBjaGlsZHJlblxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ2lmeSAoZWxlbWVudCwgaW5kZXgsIGNoaWxkcmVuLCBjYWxsYmFjaykge1xuXHRzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xuXHRcdGNhc2UgTEFZRVI6IGlmIChlbGVtZW50LmNoaWxkcmVuLmxlbmd0aCkgYnJlYWtcblx0XHRjYXNlIElNUE9SVDogY2FzZSBERUNMQVJBVElPTjogcmV0dXJuIGVsZW1lbnQucmV0dXJuID0gZWxlbWVudC5yZXR1cm4gfHwgZWxlbWVudC52YWx1ZVxuXHRcdGNhc2UgQ09NTUVOVDogcmV0dXJuICcnXG5cdFx0Y2FzZSBLRVlGUkFNRVM6IHJldHVybiBlbGVtZW50LnJldHVybiA9IGVsZW1lbnQudmFsdWUgKyAneycgKyBzZXJpYWxpemUoZWxlbWVudC5jaGlsZHJlbiwgY2FsbGJhY2spICsgJ30nXG5cdFx0Y2FzZSBSVUxFU0VUOiBlbGVtZW50LnZhbHVlID0gZWxlbWVudC5wcm9wcy5qb2luKCcsJylcblx0fVxuXG5cdHJldHVybiBzdHJsZW4oY2hpbGRyZW4gPSBzZXJpYWxpemUoZWxlbWVudC5jaGlsZHJlbiwgY2FsbGJhY2spKSA/IGVsZW1lbnQucmV0dXJuID0gZWxlbWVudC52YWx1ZSArICd7JyArIGNoaWxkcmVuICsgJ30nIDogJydcbn1cbiIsICJpbXBvcnQge01TLCBNT1osIFdFQktJVCwgUlVMRVNFVCwgS0VZRlJBTUVTLCBERUNMQVJBVElPTn0gZnJvbSAnLi9FbnVtLmpzJ1xuaW1wb3J0IHttYXRjaCwgY2hhcmF0LCBzdWJzdHIsIHN0cmxlbiwgc2l6ZW9mLCByZXBsYWNlLCBjb21iaW5lfSBmcm9tICcuL1V0aWxpdHkuanMnXG5pbXBvcnQge2NvcHksIHRva2VuaXplfSBmcm9tICcuL1Rva2VuaXplci5qcydcbmltcG9ydCB7c2VyaWFsaXplfSBmcm9tICcuL1NlcmlhbGl6ZXIuanMnXG5pbXBvcnQge3ByZWZpeH0gZnJvbSAnLi9QcmVmaXhlci5qcydcblxuLyoqXG4gKiBAcGFyYW0ge2Z1bmN0aW9uW119IGNvbGxlY3Rpb25cbiAqIEByZXR1cm4ge2Z1bmN0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWlkZGxld2FyZSAoY29sbGVjdGlvbikge1xuXHR2YXIgbGVuZ3RoID0gc2l6ZW9mKGNvbGxlY3Rpb24pXG5cblx0cmV0dXJuIGZ1bmN0aW9uIChlbGVtZW50LCBpbmRleCwgY2hpbGRyZW4sIGNhbGxiYWNrKSB7XG5cdFx0dmFyIG91dHB1dCA9ICcnXG5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKVxuXHRcdFx0b3V0cHV0ICs9IGNvbGxlY3Rpb25baV0oZWxlbWVudCwgaW5kZXgsIGNoaWxkcmVuLCBjYWxsYmFjaykgfHwgJydcblxuXHRcdHJldHVybiBvdXRwdXRcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtmdW5jdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1bGVzaGVldCAoY2FsbGJhY2spIHtcblx0cmV0dXJuIGZ1bmN0aW9uIChlbGVtZW50KSB7XG5cdFx0aWYgKCFlbGVtZW50LnJvb3QpXG5cdFx0XHRpZiAoZWxlbWVudCA9IGVsZW1lbnQucmV0dXJuKVxuXHRcdFx0XHRjYWxsYmFjayhlbGVtZW50KVxuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGVsZW1lbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHBhcmFtIHtvYmplY3RbXX0gY2hpbGRyZW5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmVmaXhlciAoZWxlbWVudCwgaW5kZXgsIGNoaWxkcmVuLCBjYWxsYmFjaykge1xuXHRpZiAoZWxlbWVudC5sZW5ndGggPiAtMSlcblx0XHRpZiAoIWVsZW1lbnQucmV0dXJuKVxuXHRcdFx0c3dpdGNoIChlbGVtZW50LnR5cGUpIHtcblx0XHRcdFx0Y2FzZSBERUNMQVJBVElPTjogZWxlbWVudC5yZXR1cm4gPSBwcmVmaXgoZWxlbWVudC52YWx1ZSwgZWxlbWVudC5sZW5ndGgsIGNoaWxkcmVuKVxuXHRcdFx0XHRcdHJldHVyblxuXHRcdFx0XHRjYXNlIEtFWUZSQU1FUzpcblx0XHRcdFx0XHRyZXR1cm4gc2VyaWFsaXplKFtjb3B5KGVsZW1lbnQsIHt2YWx1ZTogcmVwbGFjZShlbGVtZW50LnZhbHVlLCAnQCcsICdAJyArIFdFQktJVCl9KV0sIGNhbGxiYWNrKVxuXHRcdFx0XHRjYXNlIFJVTEVTRVQ6XG5cdFx0XHRcdFx0aWYgKGVsZW1lbnQubGVuZ3RoKVxuXHRcdFx0XHRcdFx0cmV0dXJuIGNvbWJpbmUoZWxlbWVudC5wcm9wcywgZnVuY3Rpb24gKHZhbHVlKSB7XG5cdFx0XHRcdFx0XHRcdHN3aXRjaCAobWF0Y2godmFsdWUsIC8oOjpwbGFjXFx3K3w6cmVhZC1cXHcrKS8pKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gOnJlYWQtKG9ubHl8d3JpdGUpXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSAnOnJlYWQtb25seSc6IGNhc2UgJzpyZWFkLXdyaXRlJzpcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBzZXJpYWxpemUoW2NvcHkoZWxlbWVudCwge3Byb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocmVhZC1cXHcrKS8sICc6JyArIE1PWiArICckMScpXX0pXSwgY2FsbGJhY2spXG5cdFx0XHRcdFx0XHRcdFx0Ly8gOnBsYWNlaG9sZGVyXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSAnOjpwbGFjZWhvbGRlcic6XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gc2VyaWFsaXplKFtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29weShlbGVtZW50LCB7cHJvcHM6IFtyZXBsYWNlKHZhbHVlLCAvOihwbGFjXFx3KykvLCAnOicgKyBXRUJLSVQgKyAnaW5wdXQtJDEnKV19KSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29weShlbGVtZW50LCB7cHJvcHM6IFtyZXBsYWNlKHZhbHVlLCAvOihwbGFjXFx3KykvLCAnOicgKyBNT1ogKyAnJDEnKV19KSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29weShlbGVtZW50LCB7cHJvcHM6IFtyZXBsYWNlKHZhbHVlLCAvOihwbGFjXFx3KykvLCBNUyArICdpbnB1dC0kMScpXX0pXG5cdFx0XHRcdFx0XHRcdFx0XHRdLCBjYWxsYmFjaylcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdHJldHVybiAnJ1xuXHRcdFx0XHRcdFx0fSlcblx0XHRcdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZWxlbWVudFxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcGFyYW0ge29iamVjdFtdfSBjaGlsZHJlblxuICovXG5leHBvcnQgZnVuY3Rpb24gbmFtZXNwYWNlIChlbGVtZW50KSB7XG5cdHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XG5cdFx0Y2FzZSBSVUxFU0VUOlxuXHRcdFx0ZWxlbWVudC5wcm9wcyA9IGVsZW1lbnQucHJvcHMubWFwKGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRcdFx0XHRyZXR1cm4gY29tYmluZSh0b2tlbml6ZSh2YWx1ZSksIGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGNoaWxkcmVuKSB7XG5cdFx0XHRcdFx0c3dpdGNoIChjaGFyYXQodmFsdWUsIDApKSB7XG5cdFx0XHRcdFx0XHQvLyBcXGZcblx0XHRcdFx0XHRcdGNhc2UgMTI6XG5cdFx0XHRcdFx0XHRcdHJldHVybiBzdWJzdHIodmFsdWUsIDEsIHN0cmxlbih2YWx1ZSkpXG5cdFx0XHRcdFx0XHQvLyBcXDAgKCArID4gflxuXHRcdFx0XHRcdFx0Y2FzZSAwOiBjYXNlIDQwOiBjYXNlIDQzOiBjYXNlIDYyOiBjYXNlIDEyNjpcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHZhbHVlXG5cdFx0XHRcdFx0XHQvLyA6XG5cdFx0XHRcdFx0XHRjYXNlIDU4OlxuXHRcdFx0XHRcdFx0XHRpZiAoY2hpbGRyZW5bKytpbmRleF0gPT09ICdnbG9iYWwnKVxuXHRcdFx0XHRcdFx0XHRcdGNoaWxkcmVuW2luZGV4XSA9ICcnLCBjaGlsZHJlblsrK2luZGV4XSA9ICdcXGYnICsgc3Vic3RyKGNoaWxkcmVuW2luZGV4XSwgaW5kZXggPSAxLCAtMSlcblx0XHRcdFx0XHRcdC8vIFxcc1xuXHRcdFx0XHRcdFx0Y2FzZSAzMjpcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGluZGV4ID09PSAxID8gJycgOiB2YWx1ZVxuXHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0c3dpdGNoIChpbmRleCkge1xuXHRcdFx0XHRcdFx0XHRcdGNhc2UgMDogZWxlbWVudCA9IHZhbHVlXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gc2l6ZW9mKGNoaWxkcmVuKSA+IDEgPyAnJyA6IHZhbHVlXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBpbmRleCA9IHNpemVvZihjaGlsZHJlbikgLSAxOiBjYXNlIDI6XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gaW5kZXggPT09IDIgPyB2YWx1ZSArIGVsZW1lbnQgKyBlbGVtZW50IDogdmFsdWUgKyBlbGVtZW50XG5cdFx0XHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0fSlcblx0fVxufVxuIiwgImZ1bmN0aW9uIG1lbW9pemUoZm4pIHtcbiAgdmFyIGNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChhcmcpIHtcbiAgICBpZiAoY2FjaGVbYXJnXSA9PT0gdW5kZWZpbmVkKSBjYWNoZVthcmddID0gZm4oYXJnKTtcbiAgICByZXR1cm4gY2FjaGVbYXJnXTtcbiAgfTtcbn1cblxuZXhwb3J0IHsgbWVtb2l6ZSBhcyBkZWZhdWx0IH07XG4iLCAiaW1wb3J0IHsgU3R5bGVTaGVldCB9IGZyb20gJ0BlbW90aW9uL3NoZWV0JztcbmltcG9ydCB7IGRlYWxsb2MsIGFsbG9jLCBuZXh0LCB0b2tlbiwgZnJvbSwgcGVlaywgZGVsaW1pdCwgc2xpY2UsIHBvc2l0aW9uLCBSVUxFU0VULCBjb21iaW5lLCBtYXRjaCwgc2VyaWFsaXplLCBjb3B5LCByZXBsYWNlLCBXRUJLSVQsIE1PWiwgTVMsIEtFWUZSQU1FUywgREVDTEFSQVRJT04sIGhhc2gsIGNoYXJhdCwgc3RybGVuLCBpbmRleG9mLCBzdHJpbmdpZnksIENPTU1FTlQsIHJ1bGVzaGVldCwgbWlkZGxld2FyZSwgY29tcGlsZSB9IGZyb20gJ3N0eWxpcyc7XG5pbXBvcnQgJ0BlbW90aW9uL3dlYWstbWVtb2l6ZSc7XG5pbXBvcnQgJ0BlbW90aW9uL21lbW9pemUnO1xuXG52YXIgaWRlbnRpZmllcldpdGhQb2ludFRyYWNraW5nID0gZnVuY3Rpb24gaWRlbnRpZmllcldpdGhQb2ludFRyYWNraW5nKGJlZ2luLCBwb2ludHMsIGluZGV4KSB7XG4gIHZhciBwcmV2aW91cyA9IDA7XG4gIHZhciBjaGFyYWN0ZXIgPSAwO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgcHJldmlvdXMgPSBjaGFyYWN0ZXI7XG4gICAgY2hhcmFjdGVyID0gcGVlaygpOyAvLyAmXFxmXG5cbiAgICBpZiAocHJldmlvdXMgPT09IDM4ICYmIGNoYXJhY3RlciA9PT0gMTIpIHtcbiAgICAgIHBvaW50c1tpbmRleF0gPSAxO1xuICAgIH1cblxuICAgIGlmICh0b2tlbihjaGFyYWN0ZXIpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBuZXh0KCk7XG4gIH1cblxuICByZXR1cm4gc2xpY2UoYmVnaW4sIHBvc2l0aW9uKTtcbn07XG5cbnZhciB0b1J1bGVzID0gZnVuY3Rpb24gdG9SdWxlcyhwYXJzZWQsIHBvaW50cykge1xuICAvLyBwcmV0ZW5kIHdlJ3ZlIHN0YXJ0ZWQgd2l0aCBhIGNvbW1hXG4gIHZhciBpbmRleCA9IC0xO1xuICB2YXIgY2hhcmFjdGVyID0gNDQ7XG5cbiAgZG8ge1xuICAgIHN3aXRjaCAodG9rZW4oY2hhcmFjdGVyKSkge1xuICAgICAgY2FzZSAwOlxuICAgICAgICAvLyAmXFxmXG4gICAgICAgIGlmIChjaGFyYWN0ZXIgPT09IDM4ICYmIHBlZWsoKSA9PT0gMTIpIHtcbiAgICAgICAgICAvLyB0aGlzIGlzIG5vdCAxMDAlIGNvcnJlY3QsIHdlIGRvbid0IGFjY291bnQgZm9yIGxpdGVyYWwgc2VxdWVuY2VzIGhlcmUgLSBsaWtlIGZvciBleGFtcGxlIHF1b3RlZCBzdHJpbmdzXG4gICAgICAgICAgLy8gc3R5bGlzIGluc2VydHMgXFxmIGFmdGVyICYgdG8ga25vdyB3aGVuICYgd2hlcmUgaXQgc2hvdWxkIHJlcGxhY2UgdGhpcyBzZXF1ZW5jZSB3aXRoIHRoZSBjb250ZXh0IHNlbGVjdG9yXG4gICAgICAgICAgLy8gYW5kIHdoZW4gaXQgc2hvdWxkIGp1c3QgY29uY2F0ZW5hdGUgdGhlIG91dGVyIGFuZCBpbm5lciBzZWxlY3RvcnNcbiAgICAgICAgICAvLyBpdCdzIHZlcnkgdW5saWtlbHkgZm9yIHRoaXMgc2VxdWVuY2UgdG8gYWN0dWFsbHkgYXBwZWFyIGluIGEgZGlmZmVyZW50IGNvbnRleHQsIHNvIHdlIGp1c3QgbGV2ZXJhZ2UgdGhpcyBmYWN0IGhlcmVcbiAgICAgICAgICBwb2ludHNbaW5kZXhdID0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBhcnNlZFtpbmRleF0gKz0gaWRlbnRpZmllcldpdGhQb2ludFRyYWNraW5nKHBvc2l0aW9uIC0gMSwgcG9pbnRzLCBpbmRleCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDI6XG4gICAgICAgIHBhcnNlZFtpbmRleF0gKz0gZGVsaW1pdChjaGFyYWN0ZXIpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSA0OlxuICAgICAgICAvLyBjb21tYVxuICAgICAgICBpZiAoY2hhcmFjdGVyID09PSA0NCkge1xuICAgICAgICAgIC8vIGNvbG9uXG4gICAgICAgICAgcGFyc2VkWysraW5kZXhdID0gcGVlaygpID09PSA1OCA/ICcmXFxmJyA6ICcnO1xuICAgICAgICAgIHBvaW50c1tpbmRleF0gPSBwYXJzZWRbaW5kZXhdLmxlbmd0aDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAvLyBmYWxsdGhyb3VnaFxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBwYXJzZWRbaW5kZXhdICs9IGZyb20oY2hhcmFjdGVyKTtcbiAgICB9XG4gIH0gd2hpbGUgKGNoYXJhY3RlciA9IG5leHQoKSk7XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn07XG5cbnZhciBnZXRSdWxlcyA9IGZ1bmN0aW9uIGdldFJ1bGVzKHZhbHVlLCBwb2ludHMpIHtcbiAgcmV0dXJuIGRlYWxsb2ModG9SdWxlcyhhbGxvYyh2YWx1ZSksIHBvaW50cykpO1xufTsgLy8gV2Vha1NldCB3b3VsZCBiZSBtb3JlIGFwcHJvcHJpYXRlLCBidXQgb25seSBXZWFrTWFwIGlzIHN1cHBvcnRlZCBpbiBJRTExXG5cblxudmFyIGZpeGVkRWxlbWVudHMgPSAvKiAjX19QVVJFX18gKi9uZXcgV2Vha01hcCgpO1xudmFyIGNvbXBhdCA9IGZ1bmN0aW9uIGNvbXBhdChlbGVtZW50KSB7XG4gIGlmIChlbGVtZW50LnR5cGUgIT09ICdydWxlJyB8fCAhZWxlbWVudC5wYXJlbnQgfHwgLy8gcG9zaXRpdmUgLmxlbmd0aCBpbmRpY2F0ZXMgdGhhdCB0aGlzIHJ1bGUgY29udGFpbnMgcHNldWRvXG4gIC8vIG5lZ2F0aXZlIC5sZW5ndGggaW5kaWNhdGVzIHRoYXQgdGhpcyBydWxlIGhhcyBiZWVuIGFscmVhZHkgcHJlZml4ZWRcbiAgZWxlbWVudC5sZW5ndGggPCAxKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHZhbHVlID0gZWxlbWVudC52YWx1ZSxcbiAgICAgIHBhcmVudCA9IGVsZW1lbnQucGFyZW50O1xuICB2YXIgaXNJbXBsaWNpdFJ1bGUgPSBlbGVtZW50LmNvbHVtbiA9PT0gcGFyZW50LmNvbHVtbiAmJiBlbGVtZW50LmxpbmUgPT09IHBhcmVudC5saW5lO1xuXG4gIHdoaWxlIChwYXJlbnQudHlwZSAhPT0gJ3J1bGUnKSB7XG4gICAgcGFyZW50ID0gcGFyZW50LnBhcmVudDtcbiAgICBpZiAoIXBhcmVudCkgcmV0dXJuO1xuICB9IC8vIHNob3J0LWNpcmN1aXQgZm9yIHRoZSBzaW1wbGVzdCBjYXNlXG5cblxuICBpZiAoZWxlbWVudC5wcm9wcy5sZW5ndGggPT09IDEgJiYgdmFsdWUuY2hhckNvZGVBdCgwKSAhPT0gNThcbiAgLyogY29sb24gKi9cbiAgJiYgIWZpeGVkRWxlbWVudHMuZ2V0KHBhcmVudCkpIHtcbiAgICByZXR1cm47XG4gIH0gLy8gaWYgdGhpcyBpcyBhbiBpbXBsaWNpdGx5IGluc2VydGVkIHJ1bGUgKHRoZSBvbmUgZWFnZXJseSBpbnNlcnRlZCBhdCB0aGUgZWFjaCBuZXcgbmVzdGVkIGxldmVsKVxuICAvLyB0aGVuIHRoZSBwcm9wcyBoYXMgYWxyZWFkeSBiZWVuIG1hbmlwdWxhdGVkIGJlZm9yZWhhbmQgYXMgdGhleSB0aGF0IGFycmF5IGlzIHNoYXJlZCBiZXR3ZWVuIGl0IGFuZCBpdHMgXCJydWxlIHBhcmVudFwiXG5cblxuICBpZiAoaXNJbXBsaWNpdFJ1bGUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBmaXhlZEVsZW1lbnRzLnNldChlbGVtZW50LCB0cnVlKTtcbiAgdmFyIHBvaW50cyA9IFtdO1xuICB2YXIgcnVsZXMgPSBnZXRSdWxlcyh2YWx1ZSwgcG9pbnRzKTtcbiAgdmFyIHBhcmVudFJ1bGVzID0gcGFyZW50LnByb3BzO1xuXG4gIGZvciAodmFyIGkgPSAwLCBrID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBwYXJlbnRSdWxlcy5sZW5ndGg7IGorKywgaysrKSB7XG4gICAgICBlbGVtZW50LnByb3BzW2tdID0gcG9pbnRzW2ldID8gcnVsZXNbaV0ucmVwbGFjZSgvJlxcZi9nLCBwYXJlbnRSdWxlc1tqXSkgOiBwYXJlbnRSdWxlc1tqXSArIFwiIFwiICsgcnVsZXNbaV07XG4gICAgfVxuICB9XG59O1xudmFyIHJlbW92ZUxhYmVsID0gZnVuY3Rpb24gcmVtb3ZlTGFiZWwoZWxlbWVudCkge1xuICBpZiAoZWxlbWVudC50eXBlID09PSAnZGVjbCcpIHtcbiAgICB2YXIgdmFsdWUgPSBlbGVtZW50LnZhbHVlO1xuXG4gICAgaWYgKCAvLyBjaGFyY29kZSBmb3IgbFxuICAgIHZhbHVlLmNoYXJDb2RlQXQoMCkgPT09IDEwOCAmJiAvLyBjaGFyY29kZSBmb3IgYlxuICAgIHZhbHVlLmNoYXJDb2RlQXQoMikgPT09IDk4KSB7XG4gICAgICAvLyB0aGlzIGlnbm9yZXMgbGFiZWxcbiAgICAgIGVsZW1lbnRbXCJyZXR1cm5cIl0gPSAnJztcbiAgICAgIGVsZW1lbnQudmFsdWUgPSAnJztcbiAgICB9XG4gIH1cbn07XG52YXIgaWdub3JlRmxhZyA9ICdlbW90aW9uLWRpc2FibGUtc2VydmVyLXJlbmRlcmluZy11bnNhZmUtc2VsZWN0b3Itd2FybmluZy1wbGVhc2UtZG8tbm90LXVzZS10aGlzLXRoZS13YXJuaW5nLWV4aXN0cy1mb3ItYS1yZWFzb24nO1xuXG52YXIgaXNJZ25vcmluZ0NvbW1lbnQgPSBmdW5jdGlvbiBpc0lnbm9yaW5nQ29tbWVudChlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50LnR5cGUgPT09ICdjb21tJyAmJiBlbGVtZW50LmNoaWxkcmVuLmluZGV4T2YoaWdub3JlRmxhZykgPiAtMTtcbn07XG5cbnZhciBjcmVhdGVVbnNhZmVTZWxlY3RvcnNBbGFybSA9IGZ1bmN0aW9uIGNyZWF0ZVVuc2FmZVNlbGVjdG9yc0FsYXJtKGNhY2hlKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZWxlbWVudCwgaW5kZXgsIGNoaWxkcmVuKSB7XG4gICAgaWYgKGVsZW1lbnQudHlwZSAhPT0gJ3J1bGUnIHx8IGNhY2hlLmNvbXBhdCkgcmV0dXJuO1xuICAgIHZhciB1bnNhZmVQc2V1ZG9DbGFzc2VzID0gZWxlbWVudC52YWx1ZS5tYXRjaCgvKDpmaXJzdHw6bnRofDpudGgtbGFzdCktY2hpbGQvZyk7XG5cbiAgICBpZiAodW5zYWZlUHNldWRvQ2xhc3Nlcykge1xuICAgICAgdmFyIGlzTmVzdGVkID0gISFlbGVtZW50LnBhcmVudDsgLy8gaW4gbmVzdGVkIHJ1bGVzIGNvbW1lbnRzIGJlY29tZSBjaGlsZHJlbiBvZiB0aGUgXCJhdXRvLWluc2VydGVkXCIgcnVsZSBhbmQgdGhhdCdzIGFsd2F5cyB0aGUgYGVsZW1lbnQucGFyZW50YFxuICAgICAgLy9cbiAgICAgIC8vIGNvbnNpZGVyaW5nIHRoaXMgaW5wdXQ6XG4gICAgICAvLyAuYSB7XG4gICAgICAvLyAgIC5iIC8qIGNvbW0gKi8ge31cbiAgICAgIC8vICAgY29sb3I6IGhvdHBpbms7XG4gICAgICAvLyB9XG4gICAgICAvLyB3ZSBnZXQgb3V0cHV0IGNvcnJlc3BvbmRpbmcgdG8gdGhpczpcbiAgICAgIC8vIC5hIHtcbiAgICAgIC8vICAgJiB7XG4gICAgICAvLyAgICAgLyogY29tbSAqL1xuICAgICAgLy8gICAgIGNvbG9yOiBob3RwaW5rO1xuICAgICAgLy8gICB9XG4gICAgICAvLyAgIC5iIHt9XG4gICAgICAvLyB9XG5cbiAgICAgIHZhciBjb21tZW50Q29udGFpbmVyID0gaXNOZXN0ZWQgPyBlbGVtZW50LnBhcmVudC5jaGlsZHJlbiA6IC8vIGdsb2JhbCBydWxlIGF0IHRoZSByb290IGxldmVsXG4gICAgICBjaGlsZHJlbjtcblxuICAgICAgZm9yICh2YXIgaSA9IGNvbW1lbnRDb250YWluZXIubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgdmFyIG5vZGUgPSBjb21tZW50Q29udGFpbmVyW2ldO1xuXG4gICAgICAgIGlmIChub2RlLmxpbmUgPCBlbGVtZW50LmxpbmUpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSAvLyBpdCBpcyBxdWl0ZSB3ZWlyZCBidXQgY29tbWVudHMgYXJlICp1c3VhbGx5KiBwdXQgYXQgYGNvbHVtbjogZWxlbWVudC5jb2x1bW4gLSAxYFxuICAgICAgICAvLyBzbyB3ZSBzZWVrICpmcm9tIHRoZSBlbmQqIGZvciB0aGUgbm9kZSB0aGF0IGlzIGVhcmxpZXIgdGhhbiB0aGUgcnVsZSdzIGBlbGVtZW50YCBhbmQgY2hlY2sgdGhhdFxuICAgICAgICAvLyB0aGlzIHdpbGwgYWxzbyBtYXRjaCBpbnB1dHMgbGlrZSB0aGlzOlxuICAgICAgICAvLyAuYSB7XG4gICAgICAgIC8vICAgLyogY29tbSAqL1xuICAgICAgICAvLyAgIC5iIHt9XG4gICAgICAgIC8vIH1cbiAgICAgICAgLy9cbiAgICAgICAgLy8gYnV0IHRoYXQgaXMgZmluZVxuICAgICAgICAvL1xuICAgICAgICAvLyBpdCB3b3VsZCBiZSB0aGUgZWFzaWVzdCB0byBjaGFuZ2UgdGhlIHBsYWNlbWVudCBvZiB0aGUgY29tbWVudCB0byBiZSB0aGUgZmlyc3QgY2hpbGQgb2YgdGhlIHJ1bGU6XG4gICAgICAgIC8vIC5hIHtcbiAgICAgICAgLy8gICAuYiB7IC8qIGNvbW0gKi8gfVxuICAgICAgICAvLyB9XG4gICAgICAgIC8vIHdpdGggc3VjaCBpbnB1dHMgd2Ugd291bGRuJ3QgaGF2ZSB0byBzZWFyY2ggZm9yIHRoZSBjb21tZW50IGF0IGFsbFxuICAgICAgICAvLyBUT0RPOiBjb25zaWRlciBjaGFuZ2luZyB0aGlzIGNvbW1lbnQgcGxhY2VtZW50IGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb25cblxuXG4gICAgICAgIGlmIChub2RlLmNvbHVtbiA8IGVsZW1lbnQuY29sdW1uKSB7XG4gICAgICAgICAgaWYgKGlzSWdub3JpbmdDb21tZW50KG5vZGUpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdW5zYWZlUHNldWRvQ2xhc3Nlcy5mb3JFYWNoKGZ1bmN0aW9uICh1bnNhZmVQc2V1ZG9DbGFzcykge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiVGhlIHBzZXVkbyBjbGFzcyBcXFwiXCIgKyB1bnNhZmVQc2V1ZG9DbGFzcyArIFwiXFxcIiBpcyBwb3RlbnRpYWxseSB1bnNhZmUgd2hlbiBkb2luZyBzZXJ2ZXItc2lkZSByZW5kZXJpbmcuIFRyeSBjaGFuZ2luZyBpdCB0byBcXFwiXCIgKyB1bnNhZmVQc2V1ZG9DbGFzcy5zcGxpdCgnLWNoaWxkJylbMF0gKyBcIi1vZi10eXBlXFxcIi5cIik7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG59O1xuXG52YXIgaXNJbXBvcnRSdWxlID0gZnVuY3Rpb24gaXNJbXBvcnRSdWxlKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnQudHlwZS5jaGFyQ29kZUF0KDEpID09PSAxMDUgJiYgZWxlbWVudC50eXBlLmNoYXJDb2RlQXQoMCkgPT09IDY0O1xufTtcblxudmFyIGlzUHJlcGVuZGVkV2l0aFJlZ3VsYXJSdWxlcyA9IGZ1bmN0aW9uIGlzUHJlcGVuZGVkV2l0aFJlZ3VsYXJSdWxlcyhpbmRleCwgY2hpbGRyZW4pIHtcbiAgZm9yICh2YXIgaSA9IGluZGV4IC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBpZiAoIWlzSW1wb3J0UnVsZShjaGlsZHJlbltpXSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn07IC8vIHVzZSB0aGlzIHRvIHJlbW92ZSBpbmNvcnJlY3QgZWxlbWVudHMgZnJvbSBmdXJ0aGVyIHByb2Nlc3Npbmdcbi8vIHNvIHRoZXkgZG9uJ3QgZ2V0IGhhbmRlZCB0byB0aGUgYHNoZWV0YCAob3IgYW55dGhpbmcgZWxzZSlcbi8vIGFzIHRoYXQgY291bGQgcG90ZW50aWFsbHkgbGVhZCB0byBhZGRpdGlvbmFsIGxvZ3Mgd2hpY2ggaW4gdHVybiBjb3VsZCBiZSBvdmVyaGVsbWluZyB0byB0aGUgdXNlclxuXG5cbnZhciBudWxsaWZ5RWxlbWVudCA9IGZ1bmN0aW9uIG51bGxpZnlFbGVtZW50KGVsZW1lbnQpIHtcbiAgZWxlbWVudC50eXBlID0gJyc7XG4gIGVsZW1lbnQudmFsdWUgPSAnJztcbiAgZWxlbWVudFtcInJldHVyblwiXSA9ICcnO1xuICBlbGVtZW50LmNoaWxkcmVuID0gJyc7XG4gIGVsZW1lbnQucHJvcHMgPSAnJztcbn07XG5cbnZhciBpbmNvcnJlY3RJbXBvcnRBbGFybSA9IGZ1bmN0aW9uIGluY29ycmVjdEltcG9ydEFsYXJtKGVsZW1lbnQsIGluZGV4LCBjaGlsZHJlbikge1xuICBpZiAoIWlzSW1wb3J0UnVsZShlbGVtZW50KSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChlbGVtZW50LnBhcmVudCkge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJgQGltcG9ydGAgcnVsZXMgY2FuJ3QgYmUgbmVzdGVkIGluc2lkZSBvdGhlciBydWxlcy4gUGxlYXNlIG1vdmUgaXQgdG8gdGhlIHRvcCBsZXZlbCBhbmQgcHV0IGl0IGJlZm9yZSByZWd1bGFyIHJ1bGVzLiBLZWVwIGluIG1pbmQgdGhhdCB0aGV5IGNhbiBvbmx5IGJlIHVzZWQgd2l0aGluIGdsb2JhbCBzdHlsZXMuXCIpO1xuICAgIG51bGxpZnlFbGVtZW50KGVsZW1lbnQpO1xuICB9IGVsc2UgaWYgKGlzUHJlcGVuZGVkV2l0aFJlZ3VsYXJSdWxlcyhpbmRleCwgY2hpbGRyZW4pKSB7XG4gICAgY29uc29sZS5lcnJvcihcImBAaW1wb3J0YCBydWxlcyBjYW4ndCBiZSBhZnRlciBvdGhlciBydWxlcy4gUGxlYXNlIHB1dCB5b3VyIGBAaW1wb3J0YCBydWxlcyBiZWZvcmUgeW91ciBvdGhlciBydWxlcy5cIik7XG4gICAgbnVsbGlmeUVsZW1lbnQoZWxlbWVudCk7XG4gIH1cbn07XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLWZhbGx0aHJvdWdoICovXG5cbmZ1bmN0aW9uIHByZWZpeCh2YWx1ZSwgbGVuZ3RoKSB7XG4gIHN3aXRjaCAoaGFzaCh2YWx1ZSwgbGVuZ3RoKSkge1xuICAgIC8vIGNvbG9yLWFkanVzdFxuICAgIGNhc2UgNTEwMzpcbiAgICAgIHJldHVybiBXRUJLSVQgKyAncHJpbnQtJyArIHZhbHVlICsgdmFsdWU7XG4gICAgLy8gYW5pbWF0aW9uLCBhbmltYXRpb24tKGRlbGF5fGRpcmVjdGlvbnxkdXJhdGlvbnxmaWxsLW1vZGV8aXRlcmF0aW9uLWNvdW50fG5hbWV8cGxheS1zdGF0ZXx0aW1pbmctZnVuY3Rpb24pXG5cbiAgICBjYXNlIDU3Mzc6XG4gICAgY2FzZSA0MjAxOlxuICAgIGNhc2UgMzE3NzpcbiAgICBjYXNlIDM0MzM6XG4gICAgY2FzZSAxNjQxOlxuICAgIGNhc2UgNDQ1NzpcbiAgICBjYXNlIDI5MjE6IC8vIHRleHQtZGVjb3JhdGlvbiwgZmlsdGVyLCBjbGlwLXBhdGgsIGJhY2tmYWNlLXZpc2liaWxpdHksIGNvbHVtbiwgYm94LWRlY29yYXRpb24tYnJlYWtcblxuICAgIGNhc2UgNTU3MjpcbiAgICBjYXNlIDYzNTY6XG4gICAgY2FzZSA1ODQ0OlxuICAgIGNhc2UgMzE5MTpcbiAgICBjYXNlIDY2NDU6XG4gICAgY2FzZSAzMDA1OiAvLyBtYXNrLCBtYXNrLWltYWdlLCBtYXNrLShtb2RlfGNsaXB8c2l6ZSksIG1hc2stKHJlcGVhdHxvcmlnaW4pLCBtYXNrLXBvc2l0aW9uLCBtYXNrLWNvbXBvc2l0ZSxcblxuICAgIGNhc2UgNjM5MTpcbiAgICBjYXNlIDU4Nzk6XG4gICAgY2FzZSA1NjIzOlxuICAgIGNhc2UgNjEzNTpcbiAgICBjYXNlIDQ1OTk6XG4gICAgY2FzZSA0ODU1OiAvLyBiYWNrZ3JvdW5kLWNsaXAsIGNvbHVtbnMsIGNvbHVtbi0oY291bnR8ZmlsbHxnYXB8cnVsZXxydWxlLWNvbG9yfHJ1bGUtc3R5bGV8cnVsZS13aWR0aHxzcGFufHdpZHRoKVxuXG4gICAgY2FzZSA0MjE1OlxuICAgIGNhc2UgNjM4OTpcbiAgICBjYXNlIDUxMDk6XG4gICAgY2FzZSA1MzY1OlxuICAgIGNhc2UgNTYyMTpcbiAgICBjYXNlIDM4Mjk6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyB2YWx1ZTtcbiAgICAvLyBhcHBlYXJhbmNlLCB1c2VyLXNlbGVjdCwgdHJhbnNmb3JtLCBoeXBoZW5zLCB0ZXh0LXNpemUtYWRqdXN0XG5cbiAgICBjYXNlIDUzNDk6XG4gICAgY2FzZSA0MjQ2OlxuICAgIGNhc2UgNDgxMDpcbiAgICBjYXNlIDY5Njg6XG4gICAgY2FzZSAyNzU2OlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTU9aICsgdmFsdWUgKyBNUyArIHZhbHVlICsgdmFsdWU7XG4gICAgLy8gZmxleCwgZmxleC1kaXJlY3Rpb25cblxuICAgIGNhc2UgNjgyODpcbiAgICBjYXNlIDQyNjg6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHZhbHVlICsgdmFsdWU7XG4gICAgLy8gb3JkZXJcblxuICAgIGNhc2UgNjE2NTpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgJ2ZsZXgtJyArIHZhbHVlICsgdmFsdWU7XG4gICAgLy8gYWxpZ24taXRlbXNcblxuICAgIGNhc2UgNTE4NzpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIHJlcGxhY2UodmFsdWUsIC8oXFx3KykuKyg6W15dKykvLCBXRUJLSVQgKyAnYm94LSQxJDInICsgTVMgKyAnZmxleC0kMSQyJykgKyB2YWx1ZTtcbiAgICAvLyBhbGlnbi1zZWxmXG5cbiAgICBjYXNlIDU0NDM6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArICdmbGV4LWl0ZW0tJyArIHJlcGxhY2UodmFsdWUsIC9mbGV4LXwtc2VsZi8sICcnKSArIHZhbHVlO1xuICAgIC8vIGFsaWduLWNvbnRlbnRcblxuICAgIGNhc2UgNDY3NTpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgJ2ZsZXgtbGluZS1wYWNrJyArIHJlcGxhY2UodmFsdWUsIC9hbGlnbi1jb250ZW50fGZsZXgtfC1zZWxmLywgJycpICsgdmFsdWU7XG4gICAgLy8gZmxleC1zaHJpbmtcblxuICAgIGNhc2UgNTU0ODpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgJ3NocmluaycsICduZWdhdGl2ZScpICsgdmFsdWU7XG4gICAgLy8gZmxleC1iYXNpc1xuXG4gICAgY2FzZSA1MjkyOlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAnYmFzaXMnLCAncHJlZmVycmVkLXNpemUnKSArIHZhbHVlO1xuICAgIC8vIGZsZXgtZ3Jvd1xuXG4gICAgY2FzZSA2MDYwOlxuICAgICAgcmV0dXJuIFdFQktJVCArICdib3gtJyArIHJlcGxhY2UodmFsdWUsICctZ3JvdycsICcnKSArIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAnZ3JvdycsICdwb3NpdGl2ZScpICsgdmFsdWU7XG4gICAgLy8gdHJhbnNpdGlvblxuXG4gICAgY2FzZSA0NTU0OlxuICAgICAgcmV0dXJuIFdFQktJVCArIHJlcGxhY2UodmFsdWUsIC8oW14tXSkodHJhbnNmb3JtKS9nLCAnJDEnICsgV0VCS0lUICsgJyQyJykgKyB2YWx1ZTtcbiAgICAvLyBjdXJzb3JcblxuICAgIGNhc2UgNjE4NzpcbiAgICAgIHJldHVybiByZXBsYWNlKHJlcGxhY2UocmVwbGFjZSh2YWx1ZSwgLyh6b29tLXxncmFiKS8sIFdFQktJVCArICckMScpLCAvKGltYWdlLXNldCkvLCBXRUJLSVQgKyAnJDEnKSwgdmFsdWUsICcnKSArIHZhbHVlO1xuICAgIC8vIGJhY2tncm91bmQsIGJhY2tncm91bmQtaW1hZ2VcblxuICAgIGNhc2UgNTQ5NTpcbiAgICBjYXNlIDM5NTk6XG4gICAgICByZXR1cm4gcmVwbGFjZSh2YWx1ZSwgLyhpbWFnZS1zZXRcXChbXl0qKS8sIFdFQktJVCArICckMScgKyAnJGAkMScpO1xuICAgIC8vIGp1c3RpZnktY29udGVudFxuXG4gICAgY2FzZSA0OTY4OlxuICAgICAgcmV0dXJuIHJlcGxhY2UocmVwbGFjZSh2YWx1ZSwgLyguKzopKGZsZXgtKT8oLiopLywgV0VCS0lUICsgJ2JveC1wYWNrOiQzJyArIE1TICsgJ2ZsZXgtcGFjazokMycpLCAvcy4rLWJbXjtdKy8sICdqdXN0aWZ5JykgKyBXRUJLSVQgKyB2YWx1ZSArIHZhbHVlO1xuICAgIC8vIChtYXJnaW58cGFkZGluZyktaW5saW5lLShzdGFydHxlbmQpXG5cbiAgICBjYXNlIDQwOTU6XG4gICAgY2FzZSAzNTgzOlxuICAgIGNhc2UgNDA2ODpcbiAgICBjYXNlIDI1MzI6XG4gICAgICByZXR1cm4gcmVwbGFjZSh2YWx1ZSwgLyguKyktaW5saW5lKC4rKS8sIFdFQktJVCArICckMSQyJykgKyB2YWx1ZTtcbiAgICAvLyAobWlufG1heCk/KHdpZHRofGhlaWdodHxpbmxpbmUtc2l6ZXxibG9jay1zaXplKVxuXG4gICAgY2FzZSA4MTE2OlxuICAgIGNhc2UgNzA1OTpcbiAgICBjYXNlIDU3NTM6XG4gICAgY2FzZSA1NTM1OlxuICAgIGNhc2UgNTQ0NTpcbiAgICBjYXNlIDU3MDE6XG4gICAgY2FzZSA0OTMzOlxuICAgIGNhc2UgNDY3NzpcbiAgICBjYXNlIDU1MzM6XG4gICAgY2FzZSA1Nzg5OlxuICAgIGNhc2UgNTAyMTpcbiAgICBjYXNlIDQ3NjU6XG4gICAgICAvLyBzdHJldGNoLCBtYXgtY29udGVudCwgbWluLWNvbnRlbnQsIGZpbGwtYXZhaWxhYmxlXG4gICAgICBpZiAoc3RybGVuKHZhbHVlKSAtIDEgLSBsZW5ndGggPiA2KSBzd2l0Y2ggKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgMSkpIHtcbiAgICAgICAgLy8gKG0pYXgtY29udGVudCwgKG0paW4tY29udGVudFxuICAgICAgICBjYXNlIDEwOTpcbiAgICAgICAgICAvLyAtXG4gICAgICAgICAgaWYgKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgNCkgIT09IDQ1KSBicmVhaztcbiAgICAgICAgLy8gKGYpaWxsLWF2YWlsYWJsZSwgKGYpaXQtY29udGVudFxuXG4gICAgICAgIGNhc2UgMTAyOlxuICAgICAgICAgIHJldHVybiByZXBsYWNlKHZhbHVlLCAvKC4rOikoLispLShbXl0rKS8sICckMScgKyBXRUJLSVQgKyAnJDItJDMnICsgJyQxJyArIE1PWiArIChjaGFyYXQodmFsdWUsIGxlbmd0aCArIDMpID09IDEwOCA/ICckMycgOiAnJDItJDMnKSkgKyB2YWx1ZTtcbiAgICAgICAgLy8gKHMpdHJldGNoXG5cbiAgICAgICAgY2FzZSAxMTU6XG4gICAgICAgICAgcmV0dXJuIH5pbmRleG9mKHZhbHVlLCAnc3RyZXRjaCcpID8gcHJlZml4KHJlcGxhY2UodmFsdWUsICdzdHJldGNoJywgJ2ZpbGwtYXZhaWxhYmxlJyksIGxlbmd0aCkgKyB2YWx1ZSA6IHZhbHVlO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgLy8gcG9zaXRpb246IHN0aWNreVxuXG4gICAgY2FzZSA0OTQ5OlxuICAgICAgLy8gKHMpdGlja3k/XG4gICAgICBpZiAoY2hhcmF0KHZhbHVlLCBsZW5ndGggKyAxKSAhPT0gMTE1KSBicmVhaztcbiAgICAvLyBkaXNwbGF5OiAoZmxleHxpbmxpbmUtZmxleClcblxuICAgIGNhc2UgNjQ0NDpcbiAgICAgIHN3aXRjaCAoY2hhcmF0KHZhbHVlLCBzdHJsZW4odmFsdWUpIC0gMyAtICh+aW5kZXhvZih2YWx1ZSwgJyFpbXBvcnRhbnQnKSAmJiAxMCkpKSB7XG4gICAgICAgIC8vIHN0aWMoayl5XG4gICAgICAgIGNhc2UgMTA3OlxuICAgICAgICAgIHJldHVybiByZXBsYWNlKHZhbHVlLCAnOicsICc6JyArIFdFQktJVCkgKyB2YWx1ZTtcbiAgICAgICAgLy8gKGlubGluZS0pP2ZsKGUpeFxuXG4gICAgICAgIGNhc2UgMTAxOlxuICAgICAgICAgIHJldHVybiByZXBsYWNlKHZhbHVlLCAvKC4rOikoW147IV0rKSg7fCEuKyk/LywgJyQxJyArIFdFQktJVCArIChjaGFyYXQodmFsdWUsIDE0KSA9PT0gNDUgPyAnaW5saW5lLScgOiAnJykgKyAnYm94JDMnICsgJyQxJyArIFdFQktJVCArICckMiQzJyArICckMScgKyBNUyArICckMmJveCQzJykgKyB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG4gICAgLy8gd3JpdGluZy1tb2RlXG5cbiAgICBjYXNlIDU5MzY6XG4gICAgICBzd2l0Y2ggKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgMTEpKSB7XG4gICAgICAgIC8vIHZlcnRpY2FsLWwocilcbiAgICAgICAgY2FzZSAxMTQ6XG4gICAgICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAvW3N2aF1cXHcrLVt0YmxyXXsyfS8sICd0YicpICsgdmFsdWU7XG4gICAgICAgIC8vIHZlcnRpY2FsLXIobClcblxuICAgICAgICBjYXNlIDEwODpcbiAgICAgICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsIC9bc3ZoXVxcdystW3RibHJdezJ9LywgJ3RiLXJsJykgKyB2YWx1ZTtcbiAgICAgICAgLy8gaG9yaXpvbnRhbCgtKXRiXG5cbiAgICAgICAgY2FzZSA0NTpcbiAgICAgICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsIC9bc3ZoXVxcdystW3RibHJdezJ9LywgJ2xyJykgKyB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyB2YWx1ZSArIHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG52YXIgcHJlZml4ZXIgPSBmdW5jdGlvbiBwcmVmaXhlcihlbGVtZW50LCBpbmRleCwgY2hpbGRyZW4sIGNhbGxiYWNrKSB7XG4gIGlmIChlbGVtZW50Lmxlbmd0aCA+IC0xKSBpZiAoIWVsZW1lbnRbXCJyZXR1cm5cIl0pIHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XG4gICAgY2FzZSBERUNMQVJBVElPTjpcbiAgICAgIGVsZW1lbnRbXCJyZXR1cm5cIl0gPSBwcmVmaXgoZWxlbWVudC52YWx1ZSwgZWxlbWVudC5sZW5ndGgpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIEtFWUZSQU1FUzpcbiAgICAgIHJldHVybiBzZXJpYWxpemUoW2NvcHkoZWxlbWVudCwge1xuICAgICAgICB2YWx1ZTogcmVwbGFjZShlbGVtZW50LnZhbHVlLCAnQCcsICdAJyArIFdFQktJVClcbiAgICAgIH0pXSwgY2FsbGJhY2spO1xuXG4gICAgY2FzZSBSVUxFU0VUOlxuICAgICAgaWYgKGVsZW1lbnQubGVuZ3RoKSByZXR1cm4gY29tYmluZShlbGVtZW50LnByb3BzLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgc3dpdGNoIChtYXRjaCh2YWx1ZSwgLyg6OnBsYWNcXHcrfDpyZWFkLVxcdyspLykpIHtcbiAgICAgICAgICAvLyA6cmVhZC0ob25seXx3cml0ZSlcbiAgICAgICAgICBjYXNlICc6cmVhZC1vbmx5JzpcbiAgICAgICAgICBjYXNlICc6cmVhZC13cml0ZSc6XG4gICAgICAgICAgICByZXR1cm4gc2VyaWFsaXplKFtjb3B5KGVsZW1lbnQsIHtcbiAgICAgICAgICAgICAgcHJvcHM6IFtyZXBsYWNlKHZhbHVlLCAvOihyZWFkLVxcdyspLywgJzonICsgTU9aICsgJyQxJyldXG4gICAgICAgICAgICB9KV0sIGNhbGxiYWNrKTtcbiAgICAgICAgICAvLyA6cGxhY2Vob2xkZXJcblxuICAgICAgICAgIGNhc2UgJzo6cGxhY2Vob2xkZXInOlxuICAgICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZShbY29weShlbGVtZW50LCB7XG4gICAgICAgICAgICAgIHByb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocGxhY1xcdyspLywgJzonICsgV0VCS0lUICsgJ2lucHV0LSQxJyldXG4gICAgICAgICAgICB9KSwgY29weShlbGVtZW50LCB7XG4gICAgICAgICAgICAgIHByb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocGxhY1xcdyspLywgJzonICsgTU9aICsgJyQxJyldXG4gICAgICAgICAgICB9KSwgY29weShlbGVtZW50LCB7XG4gICAgICAgICAgICAgIHByb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocGxhY1xcdyspLywgTVMgKyAnaW5wdXQtJDEnKV1cbiAgICAgICAgICAgIH0pXSwgY2FsbGJhY2spO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfSk7XG4gIH1cbn07XG5cbnZhciBkZWZhdWx0U3R5bGlzUGx1Z2lucyA9IFtwcmVmaXhlcl07XG5cbnZhciBjcmVhdGVDYWNoZSA9IGZ1bmN0aW9uIGNyZWF0ZUNhY2hlKG9wdGlvbnMpIHtcbiAgdmFyIGtleSA9IG9wdGlvbnMua2V5O1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICFrZXkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJZb3UgaGF2ZSB0byBjb25maWd1cmUgYGtleWAgZm9yIHlvdXIgY2FjaGUuIFBsZWFzZSBtYWtlIHN1cmUgaXQncyB1bmlxdWUgKGFuZCBub3QgZXF1YWwgdG8gJ2NzcycpIGFzIGl0J3MgdXNlZCBmb3IgbGlua2luZyBzdHlsZXMgdG8geW91ciBjYWNoZS5cXG5cIiArIFwiSWYgbXVsdGlwbGUgY2FjaGVzIHNoYXJlIHRoZSBzYW1lIGtleSB0aGV5IG1pZ2h0IFxcXCJmaWdodFxcXCIgZm9yIGVhY2ggb3RoZXIncyBzdHlsZSBlbGVtZW50cy5cIik7XG4gIH1cblxuICBpZiAoa2V5ID09PSAnY3NzJykge1xuICAgIHZhciBzc3JTdHlsZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwic3R5bGVbZGF0YS1lbW90aW9uXTpub3QoW2RhdGEtc10pXCIpOyAvLyBnZXQgU1NSZWQgc3R5bGVzIG91dCBvZiB0aGUgd2F5IG9mIFJlYWN0J3MgaHlkcmF0aW9uXG4gICAgLy8gZG9jdW1lbnQuaGVhZCBpcyBhIHNhZmUgcGxhY2UgdG8gbW92ZSB0aGVtIHRvKHRob3VnaCBub3RlIGRvY3VtZW50LmhlYWQgaXMgbm90IG5lY2Vzc2FyaWx5IHRoZSBsYXN0IHBsYWNlIHRoZXkgd2lsbCBiZSlcbiAgICAvLyBub3RlIHRoaXMgdmVyeSB2ZXJ5IGludGVudGlvbmFsbHkgdGFyZ2V0cyBhbGwgc3R5bGUgZWxlbWVudHMgcmVnYXJkbGVzcyBvZiB0aGUga2V5IHRvIGVuc3VyZVxuICAgIC8vIHRoYXQgY3JlYXRpbmcgYSBjYWNoZSB3b3JrcyBpbnNpZGUgb2YgcmVuZGVyIG9mIGEgUmVhY3QgY29tcG9uZW50XG5cbiAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKHNzclN0eWxlcywgZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIC8vIHdlIHdhbnQgdG8gb25seSBtb3ZlIGVsZW1lbnRzIHdoaWNoIGhhdmUgYSBzcGFjZSBpbiB0aGUgZGF0YS1lbW90aW9uIGF0dHJpYnV0ZSB2YWx1ZVxuICAgICAgLy8gYmVjYXVzZSB0aGF0IGluZGljYXRlcyB0aGF0IGl0IGlzIGFuIEVtb3Rpb24gMTEgc2VydmVyLXNpZGUgcmVuZGVyZWQgc3R5bGUgZWxlbWVudHNcbiAgICAgIC8vIHdoaWxlIHdlIHdpbGwgYWxyZWFkeSBpZ25vcmUgRW1vdGlvbiAxMSBjbGllbnQtc2lkZSBpbnNlcnRlZCBzdHlsZXMgYmVjYXVzZSBvZiB0aGUgOm5vdChbZGF0YS1zXSkgcGFydCBpbiB0aGUgc2VsZWN0b3JcbiAgICAgIC8vIEVtb3Rpb24gMTAgY2xpZW50LXNpZGUgaW5zZXJ0ZWQgc3R5bGVzIGRpZCBub3QgaGF2ZSBkYXRhLXMgKGJ1dCBpbXBvcnRhbnRseSBkaWQgbm90IGhhdmUgYSBzcGFjZSBpbiB0aGVpciBkYXRhLWVtb3Rpb24gYXR0cmlidXRlcylcbiAgICAgIC8vIHNvIGNoZWNraW5nIGZvciB0aGUgc3BhY2UgZW5zdXJlcyB0aGF0IGxvYWRpbmcgRW1vdGlvbiAxMSBhZnRlciBFbW90aW9uIDEwIGhhcyBpbnNlcnRlZCBzb21lIHN0eWxlc1xuICAgICAgLy8gd2lsbCBub3QgcmVzdWx0IGluIHRoZSBFbW90aW9uIDEwIHN0eWxlcyBiZWluZyBkZXN0cm95ZWRcbiAgICAgIHZhciBkYXRhRW1vdGlvbkF0dHJpYnV0ZSA9IG5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLWVtb3Rpb24nKTtcblxuICAgICAgaWYgKGRhdGFFbW90aW9uQXR0cmlidXRlLmluZGV4T2YoJyAnKSA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChub2RlKTtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdkYXRhLXMnLCAnJyk7XG4gICAgfSk7XG4gIH1cblxuICB2YXIgc3R5bGlzUGx1Z2lucyA9IG9wdGlvbnMuc3R5bGlzUGx1Z2lucyB8fCBkZWZhdWx0U3R5bGlzUGx1Z2lucztcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIC8vICRGbG93Rml4TWVcbiAgICBpZiAoL1teYS16LV0vLnRlc3Qoa2V5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRW1vdGlvbiBrZXkgbXVzdCBvbmx5IGNvbnRhaW4gbG93ZXIgY2FzZSBhbHBoYWJldGljYWwgY2hhcmFjdGVycyBhbmQgLSBidXQgXFxcIlwiICsga2V5ICsgXCJcXFwiIHdhcyBwYXNzZWRcIik7XG4gICAgfVxuICB9XG5cbiAgdmFyIGluc2VydGVkID0ge307XG4gIHZhciBjb250YWluZXI7XG4gIHZhciBub2Rlc1RvSHlkcmF0ZSA9IFtdO1xuXG4gIHtcbiAgICBjb250YWluZXIgPSBvcHRpb25zLmNvbnRhaW5lciB8fCBkb2N1bWVudC5oZWFkO1xuICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoIC8vIHRoaXMgbWVhbnMgd2Ugd2lsbCBpZ25vcmUgZWxlbWVudHMgd2hpY2ggZG9uJ3QgaGF2ZSBhIHNwYWNlIGluIHRoZW0gd2hpY2hcbiAgICAvLyBtZWFucyB0aGF0IHRoZSBzdHlsZSBlbGVtZW50cyB3ZSdyZSBsb29raW5nIGF0IGFyZSBvbmx5IEVtb3Rpb24gMTEgc2VydmVyLXJlbmRlcmVkIHN0eWxlIGVsZW1lbnRzXG4gICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcInN0eWxlW2RhdGEtZW1vdGlvbl49XFxcIlwiICsga2V5ICsgXCIgXFxcIl1cIiksIGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICB2YXIgYXR0cmliID0gbm9kZS5nZXRBdHRyaWJ1dGUoXCJkYXRhLWVtb3Rpb25cIikuc3BsaXQoJyAnKTsgLy8gJEZsb3dGaXhNZVxuXG4gICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGF0dHJpYi5sZW5ndGg7IGkrKykge1xuICAgICAgICBpbnNlcnRlZFthdHRyaWJbaV1dID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgbm9kZXNUb0h5ZHJhdGUucHVzaChub2RlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhciBfaW5zZXJ0O1xuXG4gIHZhciBvbW5pcHJlc2VudFBsdWdpbnMgPSBbY29tcGF0LCByZW1vdmVMYWJlbF07XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBvbW5pcHJlc2VudFBsdWdpbnMucHVzaChjcmVhdGVVbnNhZmVTZWxlY3RvcnNBbGFybSh7XG4gICAgICBnZXQgY29tcGF0KCkge1xuICAgICAgICByZXR1cm4gY2FjaGUuY29tcGF0O1xuICAgICAgfVxuXG4gICAgfSksIGluY29ycmVjdEltcG9ydEFsYXJtKTtcbiAgfVxuXG4gIHtcbiAgICB2YXIgY3VycmVudFNoZWV0O1xuICAgIHZhciBmaW5hbGl6aW5nUGx1Z2lucyA9IFtzdHJpbmdpZnksIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgaWYgKCFlbGVtZW50LnJvb3QpIHtcbiAgICAgICAgaWYgKGVsZW1lbnRbXCJyZXR1cm5cIl0pIHtcbiAgICAgICAgICBjdXJyZW50U2hlZXQuaW5zZXJ0KGVsZW1lbnRbXCJyZXR1cm5cIl0pO1xuICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQudmFsdWUgJiYgZWxlbWVudC50eXBlICE9PSBDT01NRU5UKSB7XG4gICAgICAgICAgLy8gaW5zZXJ0IGVtcHR5IHJ1bGUgaW4gbm9uLXByb2R1Y3Rpb24gZW52aXJvbm1lbnRzXG4gICAgICAgICAgLy8gc28gQGVtb3Rpb24vamVzdCBjYW4gZ3JhYiBga2V5YCBmcm9tIHRoZSAoSlMpRE9NIGZvciBjYWNoZXMgd2l0aG91dCBhbnkgcnVsZXMgaW5zZXJ0ZWQgeWV0XG4gICAgICAgICAgY3VycmVudFNoZWV0Lmluc2VydChlbGVtZW50LnZhbHVlICsgXCJ7fVwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gOiBydWxlc2hlZXQoZnVuY3Rpb24gKHJ1bGUpIHtcbiAgICAgIGN1cnJlbnRTaGVldC5pbnNlcnQocnVsZSk7XG4gICAgfSldO1xuICAgIHZhciBzZXJpYWxpemVyID0gbWlkZGxld2FyZShvbW5pcHJlc2VudFBsdWdpbnMuY29uY2F0KHN0eWxpc1BsdWdpbnMsIGZpbmFsaXppbmdQbHVnaW5zKSk7XG5cbiAgICB2YXIgc3R5bGlzID0gZnVuY3Rpb24gc3R5bGlzKHN0eWxlcykge1xuICAgICAgcmV0dXJuIHNlcmlhbGl6ZShjb21waWxlKHN0eWxlcyksIHNlcmlhbGl6ZXIpO1xuICAgIH07XG5cbiAgICBfaW5zZXJ0ID0gZnVuY3Rpb24gaW5zZXJ0KHNlbGVjdG9yLCBzZXJpYWxpemVkLCBzaGVldCwgc2hvdWxkQ2FjaGUpIHtcbiAgICAgIGN1cnJlbnRTaGVldCA9IHNoZWV0O1xuXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBzZXJpYWxpemVkLm1hcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGN1cnJlbnRTaGVldCA9IHtcbiAgICAgICAgICBpbnNlcnQ6IGZ1bmN0aW9uIGluc2VydChydWxlKSB7XG4gICAgICAgICAgICBzaGVldC5pbnNlcnQocnVsZSArIHNlcmlhbGl6ZWQubWFwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHN0eWxpcyhzZWxlY3RvciA/IHNlbGVjdG9yICsgXCJ7XCIgKyBzZXJpYWxpemVkLnN0eWxlcyArIFwifVwiIDogc2VyaWFsaXplZC5zdHlsZXMpO1xuXG4gICAgICBpZiAoc2hvdWxkQ2FjaGUpIHtcbiAgICAgICAgY2FjaGUuaW5zZXJ0ZWRbc2VyaWFsaXplZC5uYW1lXSA9IHRydWU7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHZhciBjYWNoZSA9IHtcbiAgICBrZXk6IGtleSxcbiAgICBzaGVldDogbmV3IFN0eWxlU2hlZXQoe1xuICAgICAga2V5OiBrZXksXG4gICAgICBjb250YWluZXI6IGNvbnRhaW5lcixcbiAgICAgIG5vbmNlOiBvcHRpb25zLm5vbmNlLFxuICAgICAgc3BlZWR5OiBvcHRpb25zLnNwZWVkeSxcbiAgICAgIHByZXBlbmQ6IG9wdGlvbnMucHJlcGVuZCxcbiAgICAgIGluc2VydGlvblBvaW50OiBvcHRpb25zLmluc2VydGlvblBvaW50XG4gICAgfSksXG4gICAgbm9uY2U6IG9wdGlvbnMubm9uY2UsXG4gICAgaW5zZXJ0ZWQ6IGluc2VydGVkLFxuICAgIHJlZ2lzdGVyZWQ6IHt9LFxuICAgIGluc2VydDogX2luc2VydFxuICB9O1xuICBjYWNoZS5zaGVldC5oeWRyYXRlKG5vZGVzVG9IeWRyYXRlKTtcbiAgcmV0dXJuIGNhY2hlO1xufTtcblxuZXhwb3J0IHsgY3JlYXRlQ2FjaGUgYXMgZGVmYXVsdCB9O1xuIiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9leHRlbmRzKCkge1xuICBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcbiAgICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH07XG4gIHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufSIsICJ2YXIgaXNCcm93c2VyID0gXCJvYmplY3RcIiAhPT0gJ3VuZGVmaW5lZCc7XG5mdW5jdGlvbiBnZXRSZWdpc3RlcmVkU3R5bGVzKHJlZ2lzdGVyZWQsIHJlZ2lzdGVyZWRTdHlsZXMsIGNsYXNzTmFtZXMpIHtcbiAgdmFyIHJhd0NsYXNzTmFtZSA9ICcnO1xuICBjbGFzc05hbWVzLnNwbGl0KCcgJykuZm9yRWFjaChmdW5jdGlvbiAoY2xhc3NOYW1lKSB7XG4gICAgaWYgKHJlZ2lzdGVyZWRbY2xhc3NOYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZWdpc3RlcmVkU3R5bGVzLnB1c2gocmVnaXN0ZXJlZFtjbGFzc05hbWVdICsgXCI7XCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICByYXdDbGFzc05hbWUgKz0gY2xhc3NOYW1lICsgXCIgXCI7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJhd0NsYXNzTmFtZTtcbn1cbnZhciByZWdpc3RlclN0eWxlcyA9IGZ1bmN0aW9uIHJlZ2lzdGVyU3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLCBpc1N0cmluZ1RhZykge1xuICB2YXIgY2xhc3NOYW1lID0gY2FjaGUua2V5ICsgXCItXCIgKyBzZXJpYWxpemVkLm5hbWU7XG5cbiAgaWYgKCAvLyB3ZSBvbmx5IG5lZWQgdG8gYWRkIHRoZSBzdHlsZXMgdG8gdGhlIHJlZ2lzdGVyZWQgY2FjaGUgaWYgdGhlXG4gIC8vIGNsYXNzIG5hbWUgY291bGQgYmUgdXNlZCBmdXJ0aGVyIGRvd25cbiAgLy8gdGhlIHRyZWUgYnV0IGlmIGl0J3MgYSBzdHJpbmcgdGFnLCB3ZSBrbm93IGl0IHdvbid0XG4gIC8vIHNvIHdlIGRvbid0IGhhdmUgdG8gYWRkIGl0IHRvIHJlZ2lzdGVyZWQgY2FjaGUuXG4gIC8vIHRoaXMgaW1wcm92ZXMgbWVtb3J5IHVzYWdlIHNpbmNlIHdlIGNhbiBhdm9pZCBzdG9yaW5nIHRoZSB3aG9sZSBzdHlsZSBzdHJpbmdcbiAgKGlzU3RyaW5nVGFnID09PSBmYWxzZSB8fCAvLyB3ZSBuZWVkIHRvIGFsd2F5cyBzdG9yZSBpdCBpZiB3ZSdyZSBpbiBjb21wYXQgbW9kZSBhbmRcbiAgLy8gaW4gbm9kZSBzaW5jZSBlbW90aW9uLXNlcnZlciByZWxpZXMgb24gd2hldGhlciBhIHN0eWxlIGlzIGluXG4gIC8vIHRoZSByZWdpc3RlcmVkIGNhY2hlIHRvIGtub3cgd2hldGhlciBhIHN0eWxlIGlzIGdsb2JhbCBvciBub3RcbiAgLy8gYWxzbywgbm90ZSB0aGF0IHRoaXMgY2hlY2sgd2lsbCBiZSBkZWFkIGNvZGUgZWxpbWluYXRlZCBpbiB0aGUgYnJvd3NlclxuICBpc0Jyb3dzZXIgPT09IGZhbHNlICkgJiYgY2FjaGUucmVnaXN0ZXJlZFtjbGFzc05hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICBjYWNoZS5yZWdpc3RlcmVkW2NsYXNzTmFtZV0gPSBzZXJpYWxpemVkLnN0eWxlcztcbiAgfVxufTtcbnZhciBpbnNlcnRTdHlsZXMgPSBmdW5jdGlvbiBpbnNlcnRTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQsIGlzU3RyaW5nVGFnKSB7XG4gIHJlZ2lzdGVyU3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLCBpc1N0cmluZ1RhZyk7XG4gIHZhciBjbGFzc05hbWUgPSBjYWNoZS5rZXkgKyBcIi1cIiArIHNlcmlhbGl6ZWQubmFtZTtcblxuICBpZiAoY2FjaGUuaW5zZXJ0ZWRbc2VyaWFsaXplZC5uYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdmFyIGN1cnJlbnQgPSBzZXJpYWxpemVkO1xuXG4gICAgZG8ge1xuICAgICAgY2FjaGUuaW5zZXJ0KHNlcmlhbGl6ZWQgPT09IGN1cnJlbnQgPyBcIi5cIiArIGNsYXNzTmFtZSA6ICcnLCBjdXJyZW50LCBjYWNoZS5zaGVldCwgdHJ1ZSk7XG5cbiAgICAgIGN1cnJlbnQgPSBjdXJyZW50Lm5leHQ7XG4gICAgfSB3aGlsZSAoY3VycmVudCAhPT0gdW5kZWZpbmVkKTtcbiAgfVxufTtcblxuZXhwb3J0IHsgZ2V0UmVnaXN0ZXJlZFN0eWxlcywgaW5zZXJ0U3R5bGVzLCByZWdpc3RlclN0eWxlcyB9O1xuIiwgIi8qIGVzbGludC1kaXNhYmxlICovXG4vLyBJbnNwaXJlZCBieSBodHRwczovL2dpdGh1Yi5jb20vZ2FyeWNvdXJ0L211cm11cmhhc2gtanNcbi8vIFBvcnRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9hYXBwbGVieS9zbWhhc2hlci9ibG9iLzYxYTA1MzBmMjgyNzdmMmU4NTBiZmMzOTYwMGNlNjFkMDJiNTE4ZGUvc3JjL011cm11ckhhc2gyLmNwcCNMMzctTDg2XG5mdW5jdGlvbiBtdXJtdXIyKHN0cikge1xuICAvLyAnbScgYW5kICdyJyBhcmUgbWl4aW5nIGNvbnN0YW50cyBnZW5lcmF0ZWQgb2ZmbGluZS5cbiAgLy8gVGhleSdyZSBub3QgcmVhbGx5ICdtYWdpYycsIHRoZXkganVzdCBoYXBwZW4gdG8gd29yayB3ZWxsLlxuICAvLyBjb25zdCBtID0gMHg1YmQxZTk5NTtcbiAgLy8gY29uc3QgciA9IDI0O1xuICAvLyBJbml0aWFsaXplIHRoZSBoYXNoXG4gIHZhciBoID0gMDsgLy8gTWl4IDQgYnl0ZXMgYXQgYSB0aW1lIGludG8gdGhlIGhhc2hcblxuICB2YXIgayxcbiAgICAgIGkgPSAwLFxuICAgICAgbGVuID0gc3RyLmxlbmd0aDtcblxuICBmb3IgKDsgbGVuID49IDQ7ICsraSwgbGVuIC09IDQpIHtcbiAgICBrID0gc3RyLmNoYXJDb2RlQXQoaSkgJiAweGZmIHwgKHN0ci5jaGFyQ29kZUF0KCsraSkgJiAweGZmKSA8PCA4IHwgKHN0ci5jaGFyQ29kZUF0KCsraSkgJiAweGZmKSA8PCAxNiB8IChzdHIuY2hhckNvZGVBdCgrK2kpICYgMHhmZikgPDwgMjQ7XG4gICAgayA9XG4gICAgLyogTWF0aC5pbXVsKGssIG0pOiAqL1xuICAgIChrICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUgKyAoKGsgPj4+IDE2KSAqIDB4ZTk5NSA8PCAxNik7XG4gICAgayBePVxuICAgIC8qIGsgPj4+IHI6ICovXG4gICAgayA+Pj4gMjQ7XG4gICAgaCA9XG4gICAgLyogTWF0aC5pbXVsKGssIG0pOiAqL1xuICAgIChrICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUgKyAoKGsgPj4+IDE2KSAqIDB4ZTk5NSA8PCAxNikgXlxuICAgIC8qIE1hdGguaW11bChoLCBtKTogKi9cbiAgICAoaCAmIDB4ZmZmZikgKiAweDViZDFlOTk1ICsgKChoID4+PiAxNikgKiAweGU5OTUgPDwgMTYpO1xuICB9IC8vIEhhbmRsZSB0aGUgbGFzdCBmZXcgYnl0ZXMgb2YgdGhlIGlucHV0IGFycmF5XG5cblxuICBzd2l0Y2ggKGxlbikge1xuICAgIGNhc2UgMzpcbiAgICAgIGggXj0gKHN0ci5jaGFyQ29kZUF0KGkgKyAyKSAmIDB4ZmYpIDw8IDE2O1xuXG4gICAgY2FzZSAyOlxuICAgICAgaCBePSAoc3RyLmNoYXJDb2RlQXQoaSArIDEpICYgMHhmZikgPDwgODtcblxuICAgIGNhc2UgMTpcbiAgICAgIGggXj0gc3RyLmNoYXJDb2RlQXQoaSkgJiAweGZmO1xuICAgICAgaCA9XG4gICAgICAvKiBNYXRoLmltdWwoaCwgbSk6ICovXG4gICAgICAoaCAmIDB4ZmZmZikgKiAweDViZDFlOTk1ICsgKChoID4+PiAxNikgKiAweGU5OTUgPDwgMTYpO1xuICB9IC8vIERvIGEgZmV3IGZpbmFsIG1peGVzIG9mIHRoZSBoYXNoIHRvIGVuc3VyZSB0aGUgbGFzdCBmZXdcbiAgLy8gYnl0ZXMgYXJlIHdlbGwtaW5jb3Jwb3JhdGVkLlxuXG5cbiAgaCBePSBoID4+PiAxMztcbiAgaCA9XG4gIC8qIE1hdGguaW11bChoLCBtKTogKi9cbiAgKGggJiAweGZmZmYpICogMHg1YmQxZTk5NSArICgoaCA+Pj4gMTYpICogMHhlOTk1IDw8IDE2KTtcbiAgcmV0dXJuICgoaCBeIGggPj4+IDE1KSA+Pj4gMCkudG9TdHJpbmcoMzYpO1xufVxuXG5leHBvcnQgeyBtdXJtdXIyIGFzIGRlZmF1bHQgfTtcbiIsICJ2YXIgdW5pdGxlc3NLZXlzID0ge1xuICBhbmltYXRpb25JdGVyYXRpb25Db3VudDogMSxcbiAgYXNwZWN0UmF0aW86IDEsXG4gIGJvcmRlckltYWdlT3V0c2V0OiAxLFxuICBib3JkZXJJbWFnZVNsaWNlOiAxLFxuICBib3JkZXJJbWFnZVdpZHRoOiAxLFxuICBib3hGbGV4OiAxLFxuICBib3hGbGV4R3JvdXA6IDEsXG4gIGJveE9yZGluYWxHcm91cDogMSxcbiAgY29sdW1uQ291bnQ6IDEsXG4gIGNvbHVtbnM6IDEsXG4gIGZsZXg6IDEsXG4gIGZsZXhHcm93OiAxLFxuICBmbGV4UG9zaXRpdmU6IDEsXG4gIGZsZXhTaHJpbms6IDEsXG4gIGZsZXhOZWdhdGl2ZTogMSxcbiAgZmxleE9yZGVyOiAxLFxuICBncmlkUm93OiAxLFxuICBncmlkUm93RW5kOiAxLFxuICBncmlkUm93U3BhbjogMSxcbiAgZ3JpZFJvd1N0YXJ0OiAxLFxuICBncmlkQ29sdW1uOiAxLFxuICBncmlkQ29sdW1uRW5kOiAxLFxuICBncmlkQ29sdW1uU3BhbjogMSxcbiAgZ3JpZENvbHVtblN0YXJ0OiAxLFxuICBtc0dyaWRSb3c6IDEsXG4gIG1zR3JpZFJvd1NwYW46IDEsXG4gIG1zR3JpZENvbHVtbjogMSxcbiAgbXNHcmlkQ29sdW1uU3BhbjogMSxcbiAgZm9udFdlaWdodDogMSxcbiAgbGluZUhlaWdodDogMSxcbiAgb3BhY2l0eTogMSxcbiAgb3JkZXI6IDEsXG4gIG9ycGhhbnM6IDEsXG4gIHRhYlNpemU6IDEsXG4gIHdpZG93czogMSxcbiAgekluZGV4OiAxLFxuICB6b29tOiAxLFxuICBXZWJraXRMaW5lQ2xhbXA6IDEsXG4gIC8vIFNWRy1yZWxhdGVkIHByb3BlcnRpZXNcbiAgZmlsbE9wYWNpdHk6IDEsXG4gIGZsb29kT3BhY2l0eTogMSxcbiAgc3RvcE9wYWNpdHk6IDEsXG4gIHN0cm9rZURhc2hhcnJheTogMSxcbiAgc3Ryb2tlRGFzaG9mZnNldDogMSxcbiAgc3Ryb2tlTWl0ZXJsaW1pdDogMSxcbiAgc3Ryb2tlT3BhY2l0eTogMSxcbiAgc3Ryb2tlV2lkdGg6IDFcbn07XG5cbmV4cG9ydCB7IHVuaXRsZXNzS2V5cyBhcyBkZWZhdWx0IH07XG4iLCAiaW1wb3J0IGhhc2hTdHJpbmcgZnJvbSAnQGVtb3Rpb24vaGFzaCc7XG5pbXBvcnQgdW5pdGxlc3MgZnJvbSAnQGVtb3Rpb24vdW5pdGxlc3MnO1xuaW1wb3J0IG1lbW9pemUgZnJvbSAnQGVtb3Rpb24vbWVtb2l6ZSc7XG5cbnZhciBJTExFR0FMX0VTQ0FQRV9TRVFVRU5DRV9FUlJPUiA9IFwiWW91IGhhdmUgaWxsZWdhbCBlc2NhcGUgc2VxdWVuY2UgaW4geW91ciB0ZW1wbGF0ZSBsaXRlcmFsLCBtb3N0IGxpa2VseSBpbnNpZGUgY29udGVudCdzIHByb3BlcnR5IHZhbHVlLlxcbkJlY2F1c2UgeW91IHdyaXRlIHlvdXIgQ1NTIGluc2lkZSBhIEphdmFTY3JpcHQgc3RyaW5nIHlvdSBhY3R1YWxseSBoYXZlIHRvIGRvIGRvdWJsZSBlc2NhcGluZywgc28gZm9yIGV4YW1wbGUgXFxcImNvbnRlbnQ6ICdcXFxcMDBkNyc7XFxcIiBzaG91bGQgYmVjb21lIFxcXCJjb250ZW50OiAnXFxcXFxcXFwwMGQ3JztcXFwiLlxcbllvdSBjYW4gcmVhZCBtb3JlIGFib3V0IHRoaXMgaGVyZTpcXG5odHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9UZW1wbGF0ZV9saXRlcmFscyNFUzIwMThfcmV2aXNpb25fb2ZfaWxsZWdhbF9lc2NhcGVfc2VxdWVuY2VzXCI7XG52YXIgVU5ERUZJTkVEX0FTX09CSkVDVF9LRVlfRVJST1IgPSBcIllvdSBoYXZlIHBhc3NlZCBpbiBmYWxzeSB2YWx1ZSBhcyBzdHlsZSBvYmplY3QncyBrZXkgKGNhbiBoYXBwZW4gd2hlbiBpbiBleGFtcGxlIHlvdSBwYXNzIHVuZXhwb3J0ZWQgY29tcG9uZW50IGFzIGNvbXB1dGVkIGtleSkuXCI7XG52YXIgaHlwaGVuYXRlUmVnZXggPSAvW0EtWl18Xm1zL2c7XG52YXIgYW5pbWF0aW9uUmVnZXggPSAvX0VNT18oW15fXSs/KV8oW15dKj8pX0VNT18vZztcblxudmFyIGlzQ3VzdG9tUHJvcGVydHkgPSBmdW5jdGlvbiBpc0N1c3RvbVByb3BlcnR5KHByb3BlcnR5KSB7XG4gIHJldHVybiBwcm9wZXJ0eS5jaGFyQ29kZUF0KDEpID09PSA0NTtcbn07XG5cbnZhciBpc1Byb2Nlc3NhYmxlVmFsdWUgPSBmdW5jdGlvbiBpc1Byb2Nlc3NhYmxlVmFsdWUodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlICE9PSAnYm9vbGVhbic7XG59O1xuXG52YXIgcHJvY2Vzc1N0eWxlTmFtZSA9IC8qICNfX1BVUkVfXyAqL21lbW9pemUoZnVuY3Rpb24gKHN0eWxlTmFtZSkge1xuICByZXR1cm4gaXNDdXN0b21Qcm9wZXJ0eShzdHlsZU5hbWUpID8gc3R5bGVOYW1lIDogc3R5bGVOYW1lLnJlcGxhY2UoaHlwaGVuYXRlUmVnZXgsICctJCYnKS50b0xvd2VyQ2FzZSgpO1xufSk7XG5cbnZhciBwcm9jZXNzU3R5bGVWYWx1ZSA9IGZ1bmN0aW9uIHByb2Nlc3NTdHlsZVZhbHVlKGtleSwgdmFsdWUpIHtcbiAgc3dpdGNoIChrZXkpIHtcbiAgICBjYXNlICdhbmltYXRpb24nOlxuICAgIGNhc2UgJ2FuaW1hdGlvbk5hbWUnOlxuICAgICAge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKGFuaW1hdGlvblJlZ2V4LCBmdW5jdGlvbiAobWF0Y2gsIHAxLCBwMikge1xuICAgICAgICAgICAgY3Vyc29yID0ge1xuICAgICAgICAgICAgICBuYW1lOiBwMSxcbiAgICAgICAgICAgICAgc3R5bGVzOiBwMixcbiAgICAgICAgICAgICAgbmV4dDogY3Vyc29yXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIHAxO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gIH1cblxuICBpZiAodW5pdGxlc3Nba2V5XSAhPT0gMSAmJiAhaXNDdXN0b21Qcm9wZXJ0eShrZXkpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgIT09IDApIHtcbiAgICByZXR1cm4gdmFsdWUgKyAncHgnO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFyIGNvbnRlbnRWYWx1ZVBhdHRlcm4gPSAvKHZhcnxhdHRyfGNvdW50ZXJzP3x1cmx8ZWxlbWVudHwoKChyZXBlYXRpbmctKT8obGluZWFyfHJhZGlhbCkpfGNvbmljKS1ncmFkaWVudClcXCh8KG5vLSk/KG9wZW58Y2xvc2UpLXF1b3RlLztcbiAgdmFyIGNvbnRlbnRWYWx1ZXMgPSBbJ25vcm1hbCcsICdub25lJywgJ2luaXRpYWwnLCAnaW5oZXJpdCcsICd1bnNldCddO1xuICB2YXIgb2xkUHJvY2Vzc1N0eWxlVmFsdWUgPSBwcm9jZXNzU3R5bGVWYWx1ZTtcbiAgdmFyIG1zUGF0dGVybiA9IC9eLW1zLS87XG4gIHZhciBoeXBoZW5QYXR0ZXJuID0gLy0oLikvZztcbiAgdmFyIGh5cGhlbmF0ZWRDYWNoZSA9IHt9O1xuXG4gIHByb2Nlc3NTdHlsZVZhbHVlID0gZnVuY3Rpb24gcHJvY2Vzc1N0eWxlVmFsdWUoa2V5LCB2YWx1ZSkge1xuICAgIGlmIChrZXkgPT09ICdjb250ZW50Jykge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycgfHwgY29udGVudFZhbHVlcy5pbmRleE9mKHZhbHVlKSA9PT0gLTEgJiYgIWNvbnRlbnRWYWx1ZVBhdHRlcm4udGVzdCh2YWx1ZSkgJiYgKHZhbHVlLmNoYXJBdCgwKSAhPT0gdmFsdWUuY2hhckF0KHZhbHVlLmxlbmd0aCAtIDEpIHx8IHZhbHVlLmNoYXJBdCgwKSAhPT0gJ1wiJyAmJiB2YWx1ZS5jaGFyQXQoMCkgIT09IFwiJ1wiKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJZb3Ugc2VlbSB0byBiZSB1c2luZyBhIHZhbHVlIGZvciAnY29udGVudCcgd2l0aG91dCBxdW90ZXMsIHRyeSByZXBsYWNpbmcgaXQgd2l0aCBgY29udGVudDogJ1xcXCJcIiArIHZhbHVlICsgXCJcXFwiJ2BcIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHByb2Nlc3NlZCA9IG9sZFByb2Nlc3NTdHlsZVZhbHVlKGtleSwgdmFsdWUpO1xuXG4gICAgaWYgKHByb2Nlc3NlZCAhPT0gJycgJiYgIWlzQ3VzdG9tUHJvcGVydHkoa2V5KSAmJiBrZXkuaW5kZXhPZignLScpICE9PSAtMSAmJiBoeXBoZW5hdGVkQ2FjaGVba2V5XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBoeXBoZW5hdGVkQ2FjaGVba2V5XSA9IHRydWU7XG4gICAgICBjb25zb2xlLmVycm9yKFwiVXNpbmcga2ViYWItY2FzZSBmb3IgY3NzIHByb3BlcnRpZXMgaW4gb2JqZWN0cyBpcyBub3Qgc3VwcG9ydGVkLiBEaWQgeW91IG1lYW4gXCIgKyBrZXkucmVwbGFjZShtc1BhdHRlcm4sICdtcy0nKS5yZXBsYWNlKGh5cGhlblBhdHRlcm4sIGZ1bmN0aW9uIChzdHIsIF9jaGFyKSB7XG4gICAgICAgIHJldHVybiBfY2hhci50b1VwcGVyQ2FzZSgpO1xuICAgICAgfSkgKyBcIj9cIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb2Nlc3NlZDtcbiAgfTtcbn1cblxudmFyIG5vQ29tcG9uZW50U2VsZWN0b3JNZXNzYWdlID0gJ0NvbXBvbmVudCBzZWxlY3RvcnMgY2FuIG9ubHkgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoICcgKyAnQGVtb3Rpb24vYmFiZWwtcGx1Z2luLCB0aGUgc3djIEVtb3Rpb24gcGx1Z2luLCBvciBhbm90aGVyIEVtb3Rpb24tYXdhcmUgJyArICdjb21waWxlciB0cmFuc2Zvcm0uJztcblxuZnVuY3Rpb24gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgaW50ZXJwb2xhdGlvbikge1xuICBpZiAoaW50ZXJwb2xhdGlvbiA9PSBudWxsKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgaWYgKGludGVycG9sYXRpb24uX19lbW90aW9uX3N0eWxlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgaW50ZXJwb2xhdGlvbi50b1N0cmluZygpID09PSAnTk9fQ09NUE9ORU5UX1NFTEVDVE9SJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKG5vQ29tcG9uZW50U2VsZWN0b3JNZXNzYWdlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW50ZXJwb2xhdGlvbjtcbiAgfVxuXG4gIHN3aXRjaCAodHlwZW9mIGludGVycG9sYXRpb24pIHtcbiAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuXG4gICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgIHtcbiAgICAgICAgaWYgKGludGVycG9sYXRpb24uYW5pbSA9PT0gMSkge1xuICAgICAgICAgIGN1cnNvciA9IHtcbiAgICAgICAgICAgIG5hbWU6IGludGVycG9sYXRpb24ubmFtZSxcbiAgICAgICAgICAgIHN0eWxlczogaW50ZXJwb2xhdGlvbi5zdHlsZXMsXG4gICAgICAgICAgICBuZXh0OiBjdXJzb3JcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiBpbnRlcnBvbGF0aW9uLm5hbWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW50ZXJwb2xhdGlvbi5zdHlsZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHZhciBuZXh0ID0gaW50ZXJwb2xhdGlvbi5uZXh0O1xuXG4gICAgICAgICAgaWYgKG5leHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gbm90IHRoZSBtb3N0IGVmZmljaWVudCB0aGluZyBldmVyIGJ1dCB0aGlzIGlzIGEgcHJldHR5IHJhcmUgY2FzZVxuICAgICAgICAgICAgLy8gYW5kIHRoZXJlIHdpbGwgYmUgdmVyeSBmZXcgaXRlcmF0aW9ucyBvZiB0aGlzIGdlbmVyYWxseVxuICAgICAgICAgICAgd2hpbGUgKG5leHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBjdXJzb3IgPSB7XG4gICAgICAgICAgICAgICAgbmFtZTogbmV4dC5uYW1lLFxuICAgICAgICAgICAgICAgIHN0eWxlczogbmV4dC5zdHlsZXMsXG4gICAgICAgICAgICAgICAgbmV4dDogY3Vyc29yXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIG5leHQgPSBuZXh0Lm5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIHN0eWxlcyA9IGludGVycG9sYXRpb24uc3R5bGVzICsgXCI7XCI7XG5cbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBpbnRlcnBvbGF0aW9uLm1hcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzdHlsZXMgKz0gaW50ZXJwb2xhdGlvbi5tYXA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHN0eWxlcztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjcmVhdGVTdHJpbmdGcm9tT2JqZWN0KG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCBpbnRlcnBvbGF0aW9uKTtcbiAgICAgIH1cblxuICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgIHtcbiAgICAgICAgaWYgKG1lcmdlZFByb3BzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB2YXIgcHJldmlvdXNDdXJzb3IgPSBjdXJzb3I7XG4gICAgICAgICAgdmFyIHJlc3VsdCA9IGludGVycG9sYXRpb24obWVyZ2VkUHJvcHMpO1xuICAgICAgICAgIGN1cnNvciA9IHByZXZpb3VzQ3Vyc29yO1xuICAgICAgICAgIHJldHVybiBoYW5kbGVJbnRlcnBvbGF0aW9uKG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCByZXN1bHQpO1xuICAgICAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdGdW5jdGlvbnMgdGhhdCBhcmUgaW50ZXJwb2xhdGVkIGluIGNzcyBjYWxscyB3aWxsIGJlIHN0cmluZ2lmaWVkLlxcbicgKyAnSWYgeW91IHdhbnQgdG8gaGF2ZSBhIGNzcyBjYWxsIGJhc2VkIG9uIHByb3BzLCBjcmVhdGUgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBjc3MgY2FsbCBsaWtlIHRoaXNcXG4nICsgJ2xldCBkeW5hbWljU3R5bGUgPSAocHJvcHMpID0+IGNzc2Bjb2xvcjogJHtwcm9wcy5jb2xvcn1gXFxuJyArICdJdCBjYW4gYmUgY2FsbGVkIGRpcmVjdGx5IHdpdGggcHJvcHMgb3IgaW50ZXJwb2xhdGVkIGluIGEgc3R5bGVkIGNhbGwgbGlrZSB0aGlzXFxuJyArIFwibGV0IFNvbWVDb21wb25lbnQgPSBzdHlsZWQoJ2RpdicpYCR7ZHluYW1pY1N0eWxlfWBcIik7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICB2YXIgbWF0Y2hlZCA9IFtdO1xuICAgICAgICB2YXIgcmVwbGFjZWQgPSBpbnRlcnBvbGF0aW9uLnJlcGxhY2UoYW5pbWF0aW9uUmVnZXgsIGZ1bmN0aW9uIChtYXRjaCwgcDEsIHAyKSB7XG4gICAgICAgICAgdmFyIGZha2VWYXJOYW1lID0gXCJhbmltYXRpb25cIiArIG1hdGNoZWQubGVuZ3RoO1xuICAgICAgICAgIG1hdGNoZWQucHVzaChcImNvbnN0IFwiICsgZmFrZVZhck5hbWUgKyBcIiA9IGtleWZyYW1lc2BcIiArIHAyLnJlcGxhY2UoL15Aa2V5ZnJhbWVzIGFuaW1hdGlvbi1cXHcrLywgJycpICsgXCJgXCIpO1xuICAgICAgICAgIHJldHVybiBcIiR7XCIgKyBmYWtlVmFyTmFtZSArIFwifVwiO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAobWF0Y2hlZC5sZW5ndGgpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdga2V5ZnJhbWVzYCBvdXRwdXQgZ290IGludGVycG9sYXRlZCBpbnRvIHBsYWluIHN0cmluZywgcGxlYXNlIHdyYXAgaXQgd2l0aCBgY3NzYC5cXG5cXG4nICsgJ0luc3RlYWQgb2YgZG9pbmcgdGhpczpcXG5cXG4nICsgW10uY29uY2F0KG1hdGNoZWQsIFtcImBcIiArIHJlcGxhY2VkICsgXCJgXCJdKS5qb2luKCdcXG4nKSArICdcXG5cXG5Zb3Ugc2hvdWxkIHdyYXAgaXQgd2l0aCBgY3NzYCBsaWtlIHRoaXM6XFxuXFxuJyArIChcImNzc2BcIiArIHJlcGxhY2VkICsgXCJgXCIpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBicmVhaztcbiAgfSAvLyBmaW5hbGl6ZSBzdHJpbmcgdmFsdWVzIChyZWd1bGFyIHN0cmluZ3MgYW5kIGZ1bmN0aW9ucyBpbnRlcnBvbGF0ZWQgaW50byBjc3MgY2FsbHMpXG5cblxuICBpZiAocmVnaXN0ZXJlZCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGludGVycG9sYXRpb247XG4gIH1cblxuICB2YXIgY2FjaGVkID0gcmVnaXN0ZXJlZFtpbnRlcnBvbGF0aW9uXTtcbiAgcmV0dXJuIGNhY2hlZCAhPT0gdW5kZWZpbmVkID8gY2FjaGVkIDogaW50ZXJwb2xhdGlvbjtcbn1cblxuZnVuY3Rpb24gY3JlYXRlU3RyaW5nRnJvbU9iamVjdChtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgb2JqKSB7XG4gIHZhciBzdHJpbmcgPSAnJztcblxuICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmoubGVuZ3RoOyBpKyspIHtcbiAgICAgIHN0cmluZyArPSBoYW5kbGVJbnRlcnBvbGF0aW9uKG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCBvYmpbaV0pICsgXCI7XCI7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIF9rZXkgaW4gb2JqKSB7XG4gICAgICB2YXIgdmFsdWUgPSBvYmpbX2tleV07XG5cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIGlmIChyZWdpc3RlcmVkICE9IG51bGwgJiYgcmVnaXN0ZXJlZFt2YWx1ZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHN0cmluZyArPSBfa2V5ICsgXCJ7XCIgKyByZWdpc3RlcmVkW3ZhbHVlXSArIFwifVwiO1xuICAgICAgICB9IGVsc2UgaWYgKGlzUHJvY2Vzc2FibGVWYWx1ZSh2YWx1ZSkpIHtcbiAgICAgICAgICBzdHJpbmcgKz0gcHJvY2Vzc1N0eWxlTmFtZShfa2V5KSArIFwiOlwiICsgcHJvY2Vzc1N0eWxlVmFsdWUoX2tleSwgdmFsdWUpICsgXCI7XCI7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChfa2V5ID09PSAnTk9fQ09NUE9ORU5UX1NFTEVDVE9SJyAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG5vQ29tcG9uZW50U2VsZWN0b3JNZXNzYWdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB0eXBlb2YgdmFsdWVbMF0gPT09ICdzdHJpbmcnICYmIChyZWdpc3RlcmVkID09IG51bGwgfHwgcmVnaXN0ZXJlZFt2YWx1ZVswXV0gPT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgdmFsdWUubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBpZiAoaXNQcm9jZXNzYWJsZVZhbHVlKHZhbHVlW19pXSkpIHtcbiAgICAgICAgICAgICAgc3RyaW5nICs9IHByb2Nlc3NTdHlsZU5hbWUoX2tleSkgKyBcIjpcIiArIHByb2Nlc3NTdHlsZVZhbHVlKF9rZXksIHZhbHVlW19pXSkgKyBcIjtcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIGludGVycG9sYXRlZCA9IGhhbmRsZUludGVycG9sYXRpb24obWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIHZhbHVlKTtcblxuICAgICAgICAgIHN3aXRjaCAoX2tleSkge1xuICAgICAgICAgICAgY2FzZSAnYW5pbWF0aW9uJzpcbiAgICAgICAgICAgIGNhc2UgJ2FuaW1hdGlvbk5hbWUnOlxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3RyaW5nICs9IHByb2Nlc3NTdHlsZU5hbWUoX2tleSkgKyBcIjpcIiArIGludGVycG9sYXRlZCArIFwiO1wiO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBfa2V5ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihVTkRFRklORURfQVNfT0JKRUNUX0tFWV9FUlJPUik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgc3RyaW5nICs9IF9rZXkgKyBcIntcIiArIGludGVycG9sYXRlZCArIFwifVwiO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0cmluZztcbn1cblxudmFyIGxhYmVsUGF0dGVybiA9IC9sYWJlbDpcXHMqKFteXFxzO1xcbntdKylcXHMqKDt8JCkvZztcbnZhciBzb3VyY2VNYXBQYXR0ZXJuO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBzb3VyY2VNYXBQYXR0ZXJuID0gL1xcL1xcKiNcXHNzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb25cXC9qc29uO1xcUytcXHMrXFwqXFwvL2c7XG59IC8vIHRoaXMgaXMgdGhlIGN1cnNvciBmb3Iga2V5ZnJhbWVzXG4vLyBrZXlmcmFtZXMgYXJlIHN0b3JlZCBvbiB0aGUgU2VyaWFsaXplZFN0eWxlcyBvYmplY3QgYXMgYSBsaW5rZWQgbGlzdFxuXG5cbnZhciBjdXJzb3I7XG52YXIgc2VyaWFsaXplU3R5bGVzID0gZnVuY3Rpb24gc2VyaWFsaXplU3R5bGVzKGFyZ3MsIHJlZ2lzdGVyZWQsIG1lcmdlZFByb3BzKSB7XG4gIGlmIChhcmdzLmxlbmd0aCA9PT0gMSAmJiB0eXBlb2YgYXJnc1swXSA9PT0gJ29iamVjdCcgJiYgYXJnc1swXSAhPT0gbnVsbCAmJiBhcmdzWzBdLnN0eWxlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGFyZ3NbMF07XG4gIH1cblxuICB2YXIgc3RyaW5nTW9kZSA9IHRydWU7XG4gIHZhciBzdHlsZXMgPSAnJztcbiAgY3Vyc29yID0gdW5kZWZpbmVkO1xuICB2YXIgc3RyaW5ncyA9IGFyZ3NbMF07XG5cbiAgaWYgKHN0cmluZ3MgPT0gbnVsbCB8fCBzdHJpbmdzLnJhdyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgc3RyaW5nTW9kZSA9IGZhbHNlO1xuICAgIHN0eWxlcyArPSBoYW5kbGVJbnRlcnBvbGF0aW9uKG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCBzdHJpbmdzKTtcbiAgfSBlbHNlIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBzdHJpbmdzWzBdID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoSUxMRUdBTF9FU0NBUEVfU0VRVUVOQ0VfRVJST1IpO1xuICAgIH1cblxuICAgIHN0eWxlcyArPSBzdHJpbmdzWzBdO1xuICB9IC8vIHdlIHN0YXJ0IGF0IDEgc2luY2Ugd2UndmUgYWxyZWFkeSBoYW5kbGVkIHRoZSBmaXJzdCBhcmdcblxuXG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgIHN0eWxlcyArPSBoYW5kbGVJbnRlcnBvbGF0aW9uKG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCBhcmdzW2ldKTtcblxuICAgIGlmIChzdHJpbmdNb2RlKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBzdHJpbmdzW2ldID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihJTExFR0FMX0VTQ0FQRV9TRVFVRU5DRV9FUlJPUik7XG4gICAgICB9XG5cbiAgICAgIHN0eWxlcyArPSBzdHJpbmdzW2ldO1xuICAgIH1cbiAgfVxuXG4gIHZhciBzb3VyY2VNYXA7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBzdHlsZXMgPSBzdHlsZXMucmVwbGFjZShzb3VyY2VNYXBQYXR0ZXJuLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgIHNvdXJjZU1hcCA9IG1hdGNoO1xuICAgICAgcmV0dXJuICcnO1xuICAgIH0pO1xuICB9IC8vIHVzaW5nIGEgZ2xvYmFsIHJlZ2V4IHdpdGggLmV4ZWMgaXMgc3RhdGVmdWwgc28gbGFzdEluZGV4IGhhcyB0byBiZSByZXNldCBlYWNoIHRpbWVcblxuXG4gIGxhYmVsUGF0dGVybi5sYXN0SW5kZXggPSAwO1xuICB2YXIgaWRlbnRpZmllck5hbWUgPSAnJztcbiAgdmFyIG1hdGNoOyAvLyBodHRwczovL2VzYmVuY2guY29tL2JlbmNoLzViODA5YzJjZjI5NDk4MDBhMGY2MWZiNVxuXG4gIHdoaWxlICgobWF0Y2ggPSBsYWJlbFBhdHRlcm4uZXhlYyhzdHlsZXMpKSAhPT0gbnVsbCkge1xuICAgIGlkZW50aWZpZXJOYW1lICs9ICctJyArIC8vICRGbG93Rml4TWUgd2Uga25vdyBpdCdzIG5vdCBudWxsXG4gICAgbWF0Y2hbMV07XG4gIH1cblxuICB2YXIgbmFtZSA9IGhhc2hTdHJpbmcoc3R5bGVzKSArIGlkZW50aWZpZXJOYW1lO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gJEZsb3dGaXhNZSBTZXJpYWxpemVkU3R5bGVzIHR5cGUgZG9lc24ndCBoYXZlIHRvU3RyaW5nIHByb3BlcnR5IChhbmQgd2UgZG9uJ3Qgd2FudCB0byBhZGQgaXQpXG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IG5hbWUsXG4gICAgICBzdHlsZXM6IHN0eWxlcyxcbiAgICAgIG1hcDogc291cmNlTWFwLFxuICAgICAgbmV4dDogY3Vyc29yLFxuICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbmFtZTogbmFtZSxcbiAgICBzdHlsZXM6IHN0eWxlcyxcbiAgICBuZXh0OiBjdXJzb3JcbiAgfTtcbn07XG5cbmV4cG9ydCB7IHNlcmlhbGl6ZVN0eWxlcyB9O1xuIiwgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcblxudmFyIHN5bmNGYWxsYmFjayA9IGZ1bmN0aW9uIHN5bmNGYWxsYmFjayhjcmVhdGUpIHtcbiAgcmV0dXJuIGNyZWF0ZSgpO1xufTtcblxudmFyIHVzZUluc2VydGlvbkVmZmVjdCA9IFJlYWN0Wyd1c2VJbnNlcnRpb24nICsgJ0VmZmVjdCddID8gUmVhY3RbJ3VzZUluc2VydGlvbicgKyAnRWZmZWN0J10gOiBmYWxzZTtcbnZhciB1c2VJbnNlcnRpb25FZmZlY3RBbHdheXNXaXRoU3luY0ZhbGxiYWNrID0gdXNlSW5zZXJ0aW9uRWZmZWN0IHx8IHN5bmNGYWxsYmFjaztcbnZhciB1c2VJbnNlcnRpb25FZmZlY3RXaXRoTGF5b3V0RmFsbGJhY2sgPSB1c2VJbnNlcnRpb25FZmZlY3QgfHwgUmVhY3QudXNlTGF5b3V0RWZmZWN0O1xuXG5leHBvcnQgeyB1c2VJbnNlcnRpb25FZmZlY3RBbHdheXNXaXRoU3luY0ZhbGxiYWNrLCB1c2VJbnNlcnRpb25FZmZlY3RXaXRoTGF5b3V0RmFsbGJhY2sgfTtcbiIsICJpbXBvcnQgeyBoIGFzIGhhc093biwgRSBhcyBFbW90aW9uLCBjIGFzIGNyZWF0ZUVtb3Rpb25Qcm9wcywgdyBhcyB3aXRoRW1vdGlvbkNhY2hlLCBUIGFzIFRoZW1lQ29udGV4dCwgaSBhcyBpc0Jyb3dzZXIkMSB9IGZyb20gJy4vZW1vdGlvbi1lbGVtZW50LTQzYzZmZWEwLmJyb3dzZXIuZXNtLmpzJztcbmV4cG9ydCB7IEMgYXMgQ2FjaGVQcm92aWRlciwgVCBhcyBUaGVtZUNvbnRleHQsIGEgYXMgVGhlbWVQcm92aWRlciwgXyBhcyBfX3Vuc2FmZV91c2VFbW90aW9uQ2FjaGUsIHUgYXMgdXNlVGhlbWUsIHcgYXMgd2l0aEVtb3Rpb25DYWNoZSwgYiBhcyB3aXRoVGhlbWUgfSBmcm9tICcuL2Vtb3Rpb24tZWxlbWVudC00M2M2ZmVhMC5icm93c2VyLmVzbS5qcyc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBpbnNlcnRTdHlsZXMsIHJlZ2lzdGVyU3R5bGVzLCBnZXRSZWdpc3RlcmVkU3R5bGVzIH0gZnJvbSAnQGVtb3Rpb24vdXRpbHMnO1xuaW1wb3J0IHsgdXNlSW5zZXJ0aW9uRWZmZWN0V2l0aExheW91dEZhbGxiYWNrLCB1c2VJbnNlcnRpb25FZmZlY3RBbHdheXNXaXRoU3luY0ZhbGxiYWNrIH0gZnJvbSAnQGVtb3Rpb24vdXNlLWluc2VydGlvbi1lZmZlY3Qtd2l0aC1mYWxsYmFja3MnO1xuaW1wb3J0IHsgc2VyaWFsaXplU3R5bGVzIH0gZnJvbSAnQGVtb3Rpb24vc2VyaWFsaXplJztcbmltcG9ydCAnQGVtb3Rpb24vY2FjaGUnO1xuaW1wb3J0ICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2V4dGVuZHMnO1xuaW1wb3J0ICdAZW1vdGlvbi93ZWFrLW1lbW9pemUnO1xuaW1wb3J0ICcuLi9faXNvbGF0ZWQtaG5ycy9kaXN0L2Vtb3Rpb24tcmVhY3QtX2lzb2xhdGVkLWhucnMuYnJvd3Nlci5lc20uanMnO1xuaW1wb3J0ICdob2lzdC1ub24tcmVhY3Qtc3RhdGljcyc7XG5cbnZhciBwa2cgPSB7XG5cdG5hbWU6IFwiQGVtb3Rpb24vcmVhY3RcIixcblx0dmVyc2lvbjogXCIxMS4xMS40XCIsXG5cdG1haW46IFwiZGlzdC9lbW90aW9uLXJlYWN0LmNqcy5qc1wiLFxuXHRtb2R1bGU6IFwiZGlzdC9lbW90aW9uLXJlYWN0LmVzbS5qc1wiLFxuXHRicm93c2VyOiB7XG5cdFx0XCIuL2Rpc3QvZW1vdGlvbi1yZWFjdC5lc20uanNcIjogXCIuL2Rpc3QvZW1vdGlvbi1yZWFjdC5icm93c2VyLmVzbS5qc1wiXG5cdH0sXG5cdGV4cG9ydHM6IHtcblx0XHRcIi5cIjoge1xuXHRcdFx0bW9kdWxlOiB7XG5cdFx0XHRcdHdvcmtlcjogXCIuL2Rpc3QvZW1vdGlvbi1yZWFjdC53b3JrZXIuZXNtLmpzXCIsXG5cdFx0XHRcdGJyb3dzZXI6IFwiLi9kaXN0L2Vtb3Rpb24tcmVhY3QuYnJvd3Nlci5lc20uanNcIixcblx0XHRcdFx0XCJkZWZhdWx0XCI6IFwiLi9kaXN0L2Vtb3Rpb24tcmVhY3QuZXNtLmpzXCJcblx0XHRcdH0sXG5cdFx0XHRcImltcG9ydFwiOiBcIi4vZGlzdC9lbW90aW9uLXJlYWN0LmNqcy5tanNcIixcblx0XHRcdFwiZGVmYXVsdFwiOiBcIi4vZGlzdC9lbW90aW9uLXJlYWN0LmNqcy5qc1wiXG5cdFx0fSxcblx0XHRcIi4vanN4LXJ1bnRpbWVcIjoge1xuXHRcdFx0bW9kdWxlOiB7XG5cdFx0XHRcdHdvcmtlcjogXCIuL2pzeC1ydW50aW1lL2Rpc3QvZW1vdGlvbi1yZWFjdC1qc3gtcnVudGltZS53b3JrZXIuZXNtLmpzXCIsXG5cdFx0XHRcdGJyb3dzZXI6IFwiLi9qc3gtcnVudGltZS9kaXN0L2Vtb3Rpb24tcmVhY3QtanN4LXJ1bnRpbWUuYnJvd3Nlci5lc20uanNcIixcblx0XHRcdFx0XCJkZWZhdWx0XCI6IFwiLi9qc3gtcnVudGltZS9kaXN0L2Vtb3Rpb24tcmVhY3QtanN4LXJ1bnRpbWUuZXNtLmpzXCJcblx0XHRcdH0sXG5cdFx0XHRcImltcG9ydFwiOiBcIi4vanN4LXJ1bnRpbWUvZGlzdC9lbW90aW9uLXJlYWN0LWpzeC1ydW50aW1lLmNqcy5tanNcIixcblx0XHRcdFwiZGVmYXVsdFwiOiBcIi4vanN4LXJ1bnRpbWUvZGlzdC9lbW90aW9uLXJlYWN0LWpzeC1ydW50aW1lLmNqcy5qc1wiXG5cdFx0fSxcblx0XHRcIi4vX2lzb2xhdGVkLWhucnNcIjoge1xuXHRcdFx0bW9kdWxlOiB7XG5cdFx0XHRcdHdvcmtlcjogXCIuL19pc29sYXRlZC1obnJzL2Rpc3QvZW1vdGlvbi1yZWFjdC1faXNvbGF0ZWQtaG5ycy53b3JrZXIuZXNtLmpzXCIsXG5cdFx0XHRcdGJyb3dzZXI6IFwiLi9faXNvbGF0ZWQtaG5ycy9kaXN0L2Vtb3Rpb24tcmVhY3QtX2lzb2xhdGVkLWhucnMuYnJvd3Nlci5lc20uanNcIixcblx0XHRcdFx0XCJkZWZhdWx0XCI6IFwiLi9faXNvbGF0ZWQtaG5ycy9kaXN0L2Vtb3Rpb24tcmVhY3QtX2lzb2xhdGVkLWhucnMuZXNtLmpzXCJcblx0XHRcdH0sXG5cdFx0XHRcImltcG9ydFwiOiBcIi4vX2lzb2xhdGVkLWhucnMvZGlzdC9lbW90aW9uLXJlYWN0LV9pc29sYXRlZC1obnJzLmNqcy5tanNcIixcblx0XHRcdFwiZGVmYXVsdFwiOiBcIi4vX2lzb2xhdGVkLWhucnMvZGlzdC9lbW90aW9uLXJlYWN0LV9pc29sYXRlZC1obnJzLmNqcy5qc1wiXG5cdFx0fSxcblx0XHRcIi4vanN4LWRldi1ydW50aW1lXCI6IHtcblx0XHRcdG1vZHVsZToge1xuXHRcdFx0XHR3b3JrZXI6IFwiLi9qc3gtZGV2LXJ1bnRpbWUvZGlzdC9lbW90aW9uLXJlYWN0LWpzeC1kZXYtcnVudGltZS53b3JrZXIuZXNtLmpzXCIsXG5cdFx0XHRcdGJyb3dzZXI6IFwiLi9qc3gtZGV2LXJ1bnRpbWUvZGlzdC9lbW90aW9uLXJlYWN0LWpzeC1kZXYtcnVudGltZS5icm93c2VyLmVzbS5qc1wiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogXCIuL2pzeC1kZXYtcnVudGltZS9kaXN0L2Vtb3Rpb24tcmVhY3QtanN4LWRldi1ydW50aW1lLmVzbS5qc1wiXG5cdFx0XHR9LFxuXHRcdFx0XCJpbXBvcnRcIjogXCIuL2pzeC1kZXYtcnVudGltZS9kaXN0L2Vtb3Rpb24tcmVhY3QtanN4LWRldi1ydW50aW1lLmNqcy5tanNcIixcblx0XHRcdFwiZGVmYXVsdFwiOiBcIi4vanN4LWRldi1ydW50aW1lL2Rpc3QvZW1vdGlvbi1yZWFjdC1qc3gtZGV2LXJ1bnRpbWUuY2pzLmpzXCJcblx0XHR9LFxuXHRcdFwiLi9wYWNrYWdlLmpzb25cIjogXCIuL3BhY2thZ2UuanNvblwiLFxuXHRcdFwiLi90eXBlcy9jc3MtcHJvcFwiOiBcIi4vdHlwZXMvY3NzLXByb3AuZC50c1wiLFxuXHRcdFwiLi9tYWNyb1wiOiB7XG5cdFx0XHR0eXBlczoge1xuXHRcdFx0XHRcImltcG9ydFwiOiBcIi4vbWFjcm8uZC5tdHNcIixcblx0XHRcdFx0XCJkZWZhdWx0XCI6IFwiLi9tYWNyby5kLnRzXCJcblx0XHRcdH0sXG5cdFx0XHRcImRlZmF1bHRcIjogXCIuL21hY3JvLmpzXCJcblx0XHR9XG5cdH0sXG5cdHR5cGVzOiBcInR5cGVzL2luZGV4LmQudHNcIixcblx0ZmlsZXM6IFtcblx0XHRcInNyY1wiLFxuXHRcdFwiZGlzdFwiLFxuXHRcdFwianN4LXJ1bnRpbWVcIixcblx0XHRcImpzeC1kZXYtcnVudGltZVwiLFxuXHRcdFwiX2lzb2xhdGVkLWhucnNcIixcblx0XHRcInR5cGVzLyouZC50c1wiLFxuXHRcdFwibWFjcm8uKlwiXG5cdF0sXG5cdHNpZGVFZmZlY3RzOiBmYWxzZSxcblx0YXV0aG9yOiBcIkVtb3Rpb24gQ29udHJpYnV0b3JzXCIsXG5cdGxpY2Vuc2U6IFwiTUlUXCIsXG5cdHNjcmlwdHM6IHtcblx0XHRcInRlc3Q6dHlwZXNjcmlwdFwiOiBcImR0c2xpbnQgdHlwZXNcIlxuXHR9LFxuXHRkZXBlbmRlbmNpZXM6IHtcblx0XHRcIkBiYWJlbC9ydW50aW1lXCI6IFwiXjcuMTguM1wiLFxuXHRcdFwiQGVtb3Rpb24vYmFiZWwtcGx1Z2luXCI6IFwiXjExLjExLjBcIixcblx0XHRcIkBlbW90aW9uL2NhY2hlXCI6IFwiXjExLjExLjBcIixcblx0XHRcIkBlbW90aW9uL3NlcmlhbGl6ZVwiOiBcIl4xLjEuM1wiLFxuXHRcdFwiQGVtb3Rpb24vdXNlLWluc2VydGlvbi1lZmZlY3Qtd2l0aC1mYWxsYmFja3NcIjogXCJeMS4wLjFcIixcblx0XHRcIkBlbW90aW9uL3V0aWxzXCI6IFwiXjEuMi4xXCIsXG5cdFx0XCJAZW1vdGlvbi93ZWFrLW1lbW9pemVcIjogXCJeMC4zLjFcIixcblx0XHRcImhvaXN0LW5vbi1yZWFjdC1zdGF0aWNzXCI6IFwiXjMuMy4xXCJcblx0fSxcblx0cGVlckRlcGVuZGVuY2llczoge1xuXHRcdHJlYWN0OiBcIj49MTYuOC4wXCJcblx0fSxcblx0cGVlckRlcGVuZGVuY2llc01ldGE6IHtcblx0XHRcIkB0eXBlcy9yZWFjdFwiOiB7XG5cdFx0XHRvcHRpb25hbDogdHJ1ZVxuXHRcdH1cblx0fSxcblx0ZGV2RGVwZW5kZW5jaWVzOiB7XG5cdFx0XCJAZGVmaW5pdGVseXR5cGVkL2R0c2xpbnRcIjogXCIwLjAuMTEyXCIsXG5cdFx0XCJAZW1vdGlvbi9jc3NcIjogXCIxMS4xMS4yXCIsXG5cdFx0XCJAZW1vdGlvbi9jc3MtcHJldHRpZmllclwiOiBcIjEuMS4zXCIsXG5cdFx0XCJAZW1vdGlvbi9zZXJ2ZXJcIjogXCIxMS4xMS4wXCIsXG5cdFx0XCJAZW1vdGlvbi9zdHlsZWRcIjogXCIxMS4xMS4wXCIsXG5cdFx0XCJodG1sLXRhZy1uYW1lc1wiOiBcIl4xLjEuMlwiLFxuXHRcdHJlYWN0OiBcIjE2LjE0LjBcIixcblx0XHRcInN2Zy10YWctbmFtZXNcIjogXCJeMS4xLjFcIixcblx0XHR0eXBlc2NyaXB0OiBcIl40LjUuNVwiXG5cdH0sXG5cdHJlcG9zaXRvcnk6IFwiaHR0cHM6Ly9naXRodWIuY29tL2Vtb3Rpb24tanMvZW1vdGlvbi90cmVlL21haW4vcGFja2FnZXMvcmVhY3RcIixcblx0cHVibGlzaENvbmZpZzoge1xuXHRcdGFjY2VzczogXCJwdWJsaWNcIlxuXHR9LFxuXHRcInVtZDptYWluXCI6IFwiZGlzdC9lbW90aW9uLXJlYWN0LnVtZC5taW4uanNcIixcblx0cHJlY29uc3RydWN0OiB7XG5cdFx0ZW50cnlwb2ludHM6IFtcblx0XHRcdFwiLi9pbmRleC5qc1wiLFxuXHRcdFx0XCIuL2pzeC1ydW50aW1lLmpzXCIsXG5cdFx0XHRcIi4vanN4LWRldi1ydW50aW1lLmpzXCIsXG5cdFx0XHRcIi4vX2lzb2xhdGVkLWhucnMuanNcIlxuXHRcdF0sXG5cdFx0dW1kTmFtZTogXCJlbW90aW9uUmVhY3RcIixcblx0XHRleHBvcnRzOiB7XG5cdFx0XHRlbnZDb25kaXRpb25zOiBbXG5cdFx0XHRcdFwiYnJvd3NlclwiLFxuXHRcdFx0XHRcIndvcmtlclwiXG5cdFx0XHRdLFxuXHRcdFx0ZXh0cmE6IHtcblx0XHRcdFx0XCIuL3R5cGVzL2Nzcy1wcm9wXCI6IFwiLi90eXBlcy9jc3MtcHJvcC5kLnRzXCIsXG5cdFx0XHRcdFwiLi9tYWNyb1wiOiB7XG5cdFx0XHRcdFx0dHlwZXM6IHtcblx0XHRcdFx0XHRcdFwiaW1wb3J0XCI6IFwiLi9tYWNyby5kLm10c1wiLFxuXHRcdFx0XHRcdFx0XCJkZWZhdWx0XCI6IFwiLi9tYWNyby5kLnRzXCJcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFwiZGVmYXVsdFwiOiBcIi4vbWFjcm8uanNcIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG52YXIganN4ID0gZnVuY3Rpb24ganN4KHR5cGUsIHByb3BzKSB7XG4gIHZhciBhcmdzID0gYXJndW1lbnRzO1xuXG4gIGlmIChwcm9wcyA9PSBudWxsIHx8ICFoYXNPd24uY2FsbChwcm9wcywgJ2NzcycpKSB7XG4gICAgLy8gJEZsb3dGaXhNZVxuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50LmFwcGx5KHVuZGVmaW5lZCwgYXJncyk7XG4gIH1cblxuICB2YXIgYXJnc0xlbmd0aCA9IGFyZ3MubGVuZ3RoO1xuICB2YXIgY3JlYXRlRWxlbWVudEFyZ0FycmF5ID0gbmV3IEFycmF5KGFyZ3NMZW5ndGgpO1xuICBjcmVhdGVFbGVtZW50QXJnQXJyYXlbMF0gPSBFbW90aW9uO1xuICBjcmVhdGVFbGVtZW50QXJnQXJyYXlbMV0gPSBjcmVhdGVFbW90aW9uUHJvcHModHlwZSwgcHJvcHMpO1xuXG4gIGZvciAodmFyIGkgPSAyOyBpIDwgYXJnc0xlbmd0aDsgaSsrKSB7XG4gICAgY3JlYXRlRWxlbWVudEFyZ0FycmF5W2ldID0gYXJnc1tpXTtcbiAgfSAvLyAkRmxvd0ZpeE1lXG5cblxuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudC5hcHBseShudWxsLCBjcmVhdGVFbGVtZW50QXJnQXJyYXkpO1xufTtcblxudmFyIHdhcm5lZEFib3V0Q3NzUHJvcEZvckdsb2JhbCA9IGZhbHNlOyAvLyBtYWludGFpbiBwbGFjZSBvdmVyIHJlcmVuZGVycy5cbi8vIGluaXRpYWwgcmVuZGVyIGZyb20gYnJvd3NlciwgaW5zZXJ0QmVmb3JlIGNvbnRleHQuc2hlZXQudGFnc1swXSBvciBpZiBhIHN0eWxlIGhhc24ndCBiZWVuIGluc2VydGVkIHRoZXJlIHlldCwgYXBwZW5kQ2hpbGRcbi8vIGluaXRpYWwgY2xpZW50LXNpZGUgcmVuZGVyIGZyb20gU1NSLCB1c2UgcGxhY2Ugb2YgaHlkcmF0aW5nIHRhZ1xuXG52YXIgR2xvYmFsID0gLyogI19fUFVSRV9fICovd2l0aEVtb3Rpb25DYWNoZShmdW5jdGlvbiAocHJvcHMsIGNhY2hlKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICF3YXJuZWRBYm91dENzc1Byb3BGb3JHbG9iYWwgJiYgKCAvLyBjaGVjayBmb3IgY2xhc3NOYW1lIGFzIHdlbGwgc2luY2UgdGhlIHVzZXIgaXNcbiAgLy8gcHJvYmFibHkgdXNpbmcgdGhlIGN1c3RvbSBjcmVhdGVFbGVtZW50IHdoaWNoXG4gIC8vIG1lYW5zIGl0IHdpbGwgYmUgdHVybmVkIGludG8gYSBjbGFzc05hbWUgcHJvcFxuICAvLyAkRmxvd0ZpeE1lIEkgZG9uJ3QgcmVhbGx5IHdhbnQgdG8gYWRkIGl0IHRvIHRoZSB0eXBlIHNpbmNlIGl0IHNob3VsZG4ndCBiZSB1c2VkXG4gIHByb3BzLmNsYXNzTmFtZSB8fCBwcm9wcy5jc3MpKSB7XG4gICAgY29uc29sZS5lcnJvcihcIkl0IGxvb2tzIGxpa2UgeW91J3JlIHVzaW5nIHRoZSBjc3MgcHJvcCBvbiBHbG9iYWwsIGRpZCB5b3UgbWVhbiB0byB1c2UgdGhlIHN0eWxlcyBwcm9wIGluc3RlYWQ/XCIpO1xuICAgIHdhcm5lZEFib3V0Q3NzUHJvcEZvckdsb2JhbCA9IHRydWU7XG4gIH1cblxuICB2YXIgc3R5bGVzID0gcHJvcHMuc3R5bGVzO1xuICB2YXIgc2VyaWFsaXplZCA9IHNlcmlhbGl6ZVN0eWxlcyhbc3R5bGVzXSwgdW5kZWZpbmVkLCBSZWFjdC51c2VDb250ZXh0KFRoZW1lQ29udGV4dCkpO1xuXG4gIGlmICghaXNCcm93c2VyJDEpIHtcbiAgICB2YXIgX3JlZjtcblxuICAgIHZhciBzZXJpYWxpemVkTmFtZXMgPSBzZXJpYWxpemVkLm5hbWU7XG4gICAgdmFyIHNlcmlhbGl6ZWRTdHlsZXMgPSBzZXJpYWxpemVkLnN0eWxlcztcbiAgICB2YXIgbmV4dCA9IHNlcmlhbGl6ZWQubmV4dDtcblxuICAgIHdoaWxlIChuZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHNlcmlhbGl6ZWROYW1lcyArPSAnICcgKyBuZXh0Lm5hbWU7XG4gICAgICBzZXJpYWxpemVkU3R5bGVzICs9IG5leHQuc3R5bGVzO1xuICAgICAgbmV4dCA9IG5leHQubmV4dDtcbiAgICB9XG5cbiAgICB2YXIgc2hvdWxkQ2FjaGUgPSBjYWNoZS5jb21wYXQgPT09IHRydWU7XG4gICAgdmFyIHJ1bGVzID0gY2FjaGUuaW5zZXJ0KFwiXCIsIHtcbiAgICAgIG5hbWU6IHNlcmlhbGl6ZWROYW1lcyxcbiAgICAgIHN0eWxlczogc2VyaWFsaXplZFN0eWxlc1xuICAgIH0sIGNhY2hlLnNoZWV0LCBzaG91bGRDYWNoZSk7XG5cbiAgICBpZiAoc2hvdWxkQ2FjaGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN0eWxlXCIsIChfcmVmID0ge30sIF9yZWZbXCJkYXRhLWVtb3Rpb25cIl0gPSBjYWNoZS5rZXkgKyBcIi1nbG9iYWwgXCIgKyBzZXJpYWxpemVkTmFtZXMsIF9yZWYuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgPSB7XG4gICAgICBfX2h0bWw6IHJ1bGVzXG4gICAgfSwgX3JlZi5ub25jZSA9IGNhY2hlLnNoZWV0Lm5vbmNlLCBfcmVmKSk7XG4gIH0gLy8geWVzLCBpIGtub3cgdGhlc2UgaG9va3MgYXJlIHVzZWQgY29uZGl0aW9uYWxseVxuICAvLyBidXQgaXQgaXMgYmFzZWQgb24gYSBjb25zdGFudCB0aGF0IHdpbGwgbmV2ZXIgY2hhbmdlIGF0IHJ1bnRpbWVcbiAgLy8gaXQncyBlZmZlY3RpdmVseSBsaWtlIGhhdmluZyB0d28gaW1wbGVtZW50YXRpb25zIGFuZCBzd2l0Y2hpbmcgdGhlbSBvdXRcbiAgLy8gc28gaXQncyBub3QgYWN0dWFsbHkgYnJlYWtpbmcgYW55dGhpbmdcblxuXG4gIHZhciBzaGVldFJlZiA9IFJlYWN0LnVzZVJlZigpO1xuICB1c2VJbnNlcnRpb25FZmZlY3RXaXRoTGF5b3V0RmFsbGJhY2soZnVuY3Rpb24gKCkge1xuICAgIHZhciBrZXkgPSBjYWNoZS5rZXkgKyBcIi1nbG9iYWxcIjsgLy8gdXNlIGNhc2Ugb2YgaHR0cHM6Ly9naXRodWIuY29tL2Vtb3Rpb24tanMvZW1vdGlvbi9pc3N1ZXMvMjY3NVxuXG4gICAgdmFyIHNoZWV0ID0gbmV3IGNhY2hlLnNoZWV0LmNvbnN0cnVjdG9yKHtcbiAgICAgIGtleToga2V5LFxuICAgICAgbm9uY2U6IGNhY2hlLnNoZWV0Lm5vbmNlLFxuICAgICAgY29udGFpbmVyOiBjYWNoZS5zaGVldC5jb250YWluZXIsXG4gICAgICBzcGVlZHk6IGNhY2hlLnNoZWV0LmlzU3BlZWR5XG4gICAgfSk7XG4gICAgdmFyIHJlaHlkcmF0aW5nID0gZmFsc2U7IC8vICRGbG93Rml4TWVcblxuICAgIHZhciBub2RlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcInN0eWxlW2RhdGEtZW1vdGlvbj1cXFwiXCIgKyBrZXkgKyBcIiBcIiArIHNlcmlhbGl6ZWQubmFtZSArIFwiXFxcIl1cIik7XG5cbiAgICBpZiAoY2FjaGUuc2hlZXQudGFncy5sZW5ndGgpIHtcbiAgICAgIHNoZWV0LmJlZm9yZSA9IGNhY2hlLnNoZWV0LnRhZ3NbMF07XG4gICAgfVxuXG4gICAgaWYgKG5vZGUgIT09IG51bGwpIHtcbiAgICAgIHJlaHlkcmF0aW5nID0gdHJ1ZTsgLy8gY2xlYXIgdGhlIGhhc2ggc28gdGhpcyBub2RlIHdvbid0IGJlIHJlY29nbml6YWJsZSBhcyByZWh5ZHJhdGFibGUgYnkgb3RoZXIgPEdsb2JhbC8+c1xuXG4gICAgICBub2RlLnNldEF0dHJpYnV0ZSgnZGF0YS1lbW90aW9uJywga2V5KTtcbiAgICAgIHNoZWV0Lmh5ZHJhdGUoW25vZGVdKTtcbiAgICB9XG5cbiAgICBzaGVldFJlZi5jdXJyZW50ID0gW3NoZWV0LCByZWh5ZHJhdGluZ107XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNoZWV0LmZsdXNoKCk7XG4gICAgfTtcbiAgfSwgW2NhY2hlXSk7XG4gIHVzZUluc2VydGlvbkVmZmVjdFdpdGhMYXlvdXRGYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNoZWV0UmVmQ3VycmVudCA9IHNoZWV0UmVmLmN1cnJlbnQ7XG4gICAgdmFyIHNoZWV0ID0gc2hlZXRSZWZDdXJyZW50WzBdLFxuICAgICAgICByZWh5ZHJhdGluZyA9IHNoZWV0UmVmQ3VycmVudFsxXTtcblxuICAgIGlmIChyZWh5ZHJhdGluZykge1xuICAgICAgc2hlZXRSZWZDdXJyZW50WzFdID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHNlcmlhbGl6ZWQubmV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBpbnNlcnQga2V5ZnJhbWVzXG4gICAgICBpbnNlcnRTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQubmV4dCwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgaWYgKHNoZWV0LnRhZ3MubGVuZ3RoKSB7XG4gICAgICAvLyBpZiB0aGlzIGRvZXNuJ3QgZXhpc3QgdGhlbiBpdCB3aWxsIGJlIG51bGwgc28gdGhlIHN0eWxlIGVsZW1lbnQgd2lsbCBiZSBhcHBlbmRlZFxuICAgICAgdmFyIGVsZW1lbnQgPSBzaGVldC50YWdzW3NoZWV0LnRhZ3MubGVuZ3RoIC0gMV0ubmV4dEVsZW1lbnRTaWJsaW5nO1xuICAgICAgc2hlZXQuYmVmb3JlID0gZWxlbWVudDtcbiAgICAgIHNoZWV0LmZsdXNoKCk7XG4gICAgfVxuXG4gICAgY2FjaGUuaW5zZXJ0KFwiXCIsIHNlcmlhbGl6ZWQsIHNoZWV0LCBmYWxzZSk7XG4gIH0sIFtjYWNoZSwgc2VyaWFsaXplZC5uYW1lXSk7XG4gIHJldHVybiBudWxsO1xufSk7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIEdsb2JhbC5kaXNwbGF5TmFtZSA9ICdFbW90aW9uR2xvYmFsJztcbn1cblxuZnVuY3Rpb24gY3NzKCkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgcmV0dXJuIHNlcmlhbGl6ZVN0eWxlcyhhcmdzKTtcbn1cblxudmFyIGtleWZyYW1lcyA9IGZ1bmN0aW9uIGtleWZyYW1lcygpIHtcbiAgdmFyIGluc2VydGFibGUgPSBjc3MuYXBwbHkodm9pZCAwLCBhcmd1bWVudHMpO1xuICB2YXIgbmFtZSA9IFwiYW5pbWF0aW9uLVwiICsgaW5zZXJ0YWJsZS5uYW1lOyAvLyAkRmxvd0ZpeE1lXG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBuYW1lLFxuICAgIHN0eWxlczogXCJAa2V5ZnJhbWVzIFwiICsgbmFtZSArIFwie1wiICsgaW5zZXJ0YWJsZS5zdHlsZXMgKyBcIn1cIixcbiAgICBhbmltOiAxLFxuICAgIHRvU3RyaW5nOiBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICAgIHJldHVybiBcIl9FTU9fXCIgKyB0aGlzLm5hbWUgKyBcIl9cIiArIHRoaXMuc3R5bGVzICsgXCJfRU1PX1wiO1xuICAgIH1cbiAgfTtcbn07XG5cbnZhciBjbGFzc25hbWVzID0gZnVuY3Rpb24gY2xhc3NuYW1lcyhhcmdzKSB7XG4gIHZhciBsZW4gPSBhcmdzLmxlbmd0aDtcbiAgdmFyIGkgPSAwO1xuICB2YXIgY2xzID0gJyc7XG5cbiAgZm9yICg7IGkgPCBsZW47IGkrKykge1xuICAgIHZhciBhcmcgPSBhcmdzW2ldO1xuICAgIGlmIChhcmcgPT0gbnVsbCkgY29udGludWU7XG4gICAgdmFyIHRvQWRkID0gdm9pZCAwO1xuXG4gICAgc3dpdGNoICh0eXBlb2YgYXJnKSB7XG4gICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG4gICAgICAgICAgICB0b0FkZCA9IGNsYXNzbmFtZXMoYXJnKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgYXJnLnN0eWxlcyAhPT0gdW5kZWZpbmVkICYmIGFyZy5uYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignWW91IGhhdmUgcGFzc2VkIHN0eWxlcyBjcmVhdGVkIHdpdGggYGNzc2AgZnJvbSBgQGVtb3Rpb24vcmVhY3RgIHBhY2thZ2UgdG8gdGhlIGBjeGAuXFxuJyArICdgY3hgIGlzIG1lYW50IHRvIGNvbXBvc2UgY2xhc3MgbmFtZXMgKHN0cmluZ3MpIHNvIHlvdSBzaG91bGQgY29udmVydCB0aG9zZSBzdHlsZXMgdG8gYSBjbGFzcyBuYW1lIGJ5IHBhc3NpbmcgdGhlbSB0byB0aGUgYGNzc2AgcmVjZWl2ZWQgZnJvbSA8Q2xhc3NOYW1lcy8+IGNvbXBvbmVudC4nKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdG9BZGQgPSAnJztcblxuICAgICAgICAgICAgZm9yICh2YXIgayBpbiBhcmcpIHtcbiAgICAgICAgICAgICAgaWYgKGFyZ1trXSAmJiBrKSB7XG4gICAgICAgICAgICAgICAgdG9BZGQgJiYgKHRvQWRkICs9ICcgJyk7XG4gICAgICAgICAgICAgICAgdG9BZGQgKz0gaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHtcbiAgICAgICAgICB0b0FkZCA9IGFyZztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0b0FkZCkge1xuICAgICAgY2xzICYmIChjbHMgKz0gJyAnKTtcbiAgICAgIGNscyArPSB0b0FkZDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY2xzO1xufTtcblxuZnVuY3Rpb24gbWVyZ2UocmVnaXN0ZXJlZCwgY3NzLCBjbGFzc05hbWUpIHtcbiAgdmFyIHJlZ2lzdGVyZWRTdHlsZXMgPSBbXTtcbiAgdmFyIHJhd0NsYXNzTmFtZSA9IGdldFJlZ2lzdGVyZWRTdHlsZXMocmVnaXN0ZXJlZCwgcmVnaXN0ZXJlZFN0eWxlcywgY2xhc3NOYW1lKTtcblxuICBpZiAocmVnaXN0ZXJlZFN0eWxlcy5sZW5ndGggPCAyKSB7XG4gICAgcmV0dXJuIGNsYXNzTmFtZTtcbiAgfVxuXG4gIHJldHVybiByYXdDbGFzc05hbWUgKyBjc3MocmVnaXN0ZXJlZFN0eWxlcyk7XG59XG5cbnZhciBJbnNlcnRpb24gPSBmdW5jdGlvbiBJbnNlcnRpb24oX3JlZikge1xuICB2YXIgY2FjaGUgPSBfcmVmLmNhY2hlLFxuICAgICAgc2VyaWFsaXplZEFyciA9IF9yZWYuc2VyaWFsaXplZEFycjtcbiAgdXNlSW5zZXJ0aW9uRWZmZWN0QWx3YXlzV2l0aFN5bmNGYWxsYmFjayhmdW5jdGlvbiAoKSB7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlcmlhbGl6ZWRBcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgIGluc2VydFN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZEFycltpXSwgZmFsc2UpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG52YXIgQ2xhc3NOYW1lcyA9IC8qICNfX1BVUkVfXyAqL3dpdGhFbW90aW9uQ2FjaGUoZnVuY3Rpb24gKHByb3BzLCBjYWNoZSkge1xuICB2YXIgaGFzUmVuZGVyZWQgPSBmYWxzZTtcbiAgdmFyIHNlcmlhbGl6ZWRBcnIgPSBbXTtcblxuICB2YXIgY3NzID0gZnVuY3Rpb24gY3NzKCkge1xuICAgIGlmIChoYXNSZW5kZXJlZCAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NzcyBjYW4gb25seSBiZSB1c2VkIGR1cmluZyByZW5kZXInKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgdmFyIHNlcmlhbGl6ZWQgPSBzZXJpYWxpemVTdHlsZXMoYXJncywgY2FjaGUucmVnaXN0ZXJlZCk7XG4gICAgc2VyaWFsaXplZEFyci5wdXNoKHNlcmlhbGl6ZWQpOyAvLyByZWdpc3RyYXRpb24gaGFzIHRvIGhhcHBlbiBoZXJlIGFzIHRoZSByZXN1bHQgb2YgdGhpcyBtaWdodCBnZXQgY29uc3VtZWQgYnkgYGN4YFxuXG4gICAgcmVnaXN0ZXJTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQsIGZhbHNlKTtcbiAgICByZXR1cm4gY2FjaGUua2V5ICsgXCItXCIgKyBzZXJpYWxpemVkLm5hbWU7XG4gIH07XG5cbiAgdmFyIGN4ID0gZnVuY3Rpb24gY3goKSB7XG4gICAgaWYgKGhhc1JlbmRlcmVkICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY3ggY2FuIG9ubHkgYmUgdXNlZCBkdXJpbmcgcmVuZGVyJyk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4yKSwgX2tleTIgPSAwOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICBhcmdzW19rZXkyXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lcmdlKGNhY2hlLnJlZ2lzdGVyZWQsIGNzcywgY2xhc3NuYW1lcyhhcmdzKSk7XG4gIH07XG5cbiAgdmFyIGNvbnRlbnQgPSB7XG4gICAgY3NzOiBjc3MsXG4gICAgY3g6IGN4LFxuICAgIHRoZW1lOiBSZWFjdC51c2VDb250ZXh0KFRoZW1lQ29udGV4dClcbiAgfTtcbiAgdmFyIGVsZSA9IHByb3BzLmNoaWxkcmVuKGNvbnRlbnQpO1xuICBoYXNSZW5kZXJlZCA9IHRydWU7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoSW5zZXJ0aW9uLCB7XG4gICAgY2FjaGU6IGNhY2hlLFxuICAgIHNlcmlhbGl6ZWRBcnI6IHNlcmlhbGl6ZWRBcnJcbiAgfSksIGVsZSk7XG59KTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgQ2xhc3NOYW1lcy5kaXNwbGF5TmFtZSA9ICdFbW90aW9uQ2xhc3NOYW1lcyc7XG59XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBpc0Jyb3dzZXIgPSBcIm9iamVjdFwiICE9PSAndW5kZWZpbmVkJzsgLy8gIzE3MjcsICMyOTA1IGZvciBzb21lIHJlYXNvbiBKZXN0IGFuZCBWaXRlc3QgZXZhbHVhdGUgbW9kdWxlcyB0d2ljZSBpZiBzb21lIGNvbnN1bWluZyBtb2R1bGUgZ2V0cyBtb2NrZWRcblxuICB2YXIgaXNUZXN0RW52ID0gdHlwZW9mIGplc3QgIT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiB2aSAhPT0gJ3VuZGVmaW5lZCc7XG5cbiAgaWYgKGlzQnJvd3NlciAmJiAhaXNUZXN0RW52KSB7XG4gICAgLy8gZ2xvYmFsVGhpcyBoYXMgd2lkZSBicm93c2VyIHN1cHBvcnQgLSBodHRwczovL2Nhbml1c2UuY29tLz9zZWFyY2g9Z2xvYmFsVGhpcywgTm9kZS5qcyAxMiBhbmQgbGF0ZXJcbiAgICB2YXIgZ2xvYmFsQ29udGV4dCA9IC8vICRGbG93SWdub3JlXG4gICAgdHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsVGhpcyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG4gICAgOiBpc0Jyb3dzZXIgPyB3aW5kb3cgOiBnbG9iYWw7XG4gICAgdmFyIGdsb2JhbEtleSA9IFwiX19FTU9USU9OX1JFQUNUX1wiICsgcGtnLnZlcnNpb24uc3BsaXQoJy4nKVswXSArIFwiX19cIjtcblxuICAgIGlmIChnbG9iYWxDb250ZXh0W2dsb2JhbEtleV0pIHtcbiAgICAgIGNvbnNvbGUud2FybignWW91IGFyZSBsb2FkaW5nIEBlbW90aW9uL3JlYWN0IHdoZW4gaXQgaXMgYWxyZWFkeSBsb2FkZWQuIFJ1bm5pbmcgJyArICdtdWx0aXBsZSBpbnN0YW5jZXMgbWF5IGNhdXNlIHByb2JsZW1zLiBUaGlzIGNhbiBoYXBwZW4gaWYgbXVsdGlwbGUgJyArICd2ZXJzaW9ucyBhcmUgdXNlZCwgb3IgaWYgbXVsdGlwbGUgYnVpbGRzIG9mIHRoZSBzYW1lIHZlcnNpb24gYXJlICcgKyAndXNlZC4nKTtcbiAgICB9XG5cbiAgICBnbG9iYWxDb250ZXh0W2dsb2JhbEtleV0gPSB0cnVlO1xuICB9XG59XG5cbmV4cG9ydCB7IENsYXNzTmFtZXMsIEdsb2JhbCwganN4IGFzIGNyZWF0ZUVsZW1lbnQsIGNzcywganN4LCBrZXlmcmFtZXMgfTtcbiIsICJmdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBqc3ggfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG4vKipcbiAqIFJlYWN0LmNsb25lRWxlbWVudCBkb2VzIG5vdCB3b3JrIGlmIHRoZSBjbG9uZWQgZWxlbWVudCBkb2VzIG5vdCBhbHJlYWR5IGhhdmUgdGhlXG4gKiBgY3NzYCBwcm9wIC0gYXMgYSByZXN1bHQsIHdlIG5lZWQgdG8gdXNlIGBqc3goKWAgdG8gbWFudWFsbHkgY2xvbmUgdGhlIGVsZW1lbnRcbiAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZW1vdGlvbi1qcy9lbW90aW9uL2lzc3Vlcy8xNDA0XG4gKlxuICogTk9URTogV2UncmUgc3RpbGwgdXNpbmcvdGVzdGluZyB0aGlzIHV0aWxpdHkgaW50ZXJuYWxseSwgc28gdGhpcyBpcyBub3QgeWV0IGEgcHVibGljIEFQSVxuICovXG5cbmV4cG9ydCB2YXIgY2xvbmVFbGVtZW50V2l0aENzcyA9IGZ1bmN0aW9uIGNsb25lRWxlbWVudFdpdGhDc3MoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIGNsb25lZEVsZW1lbnQgPSBlbGVtZW50LnByb3BzLl9fRU1PVElPTl9UWVBFX1BMRUFTRV9ET19OT1RfVVNFX18gfHwgZWxlbWVudC50eXBlOyAvLyBFTU9USU9OX1RZUEUgaGFuZGxlcyBub24tUmVhY3QgZWxlbWVudHMgKG5hdGl2ZSBKU1gvSFRNTCBub2RlcylcblxuICB2YXIgY2xvbmVkUHJvcHMgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe1xuICAgIGtleTogZWxlbWVudC5rZXksXG4gICAgcmVmOiBlbGVtZW50LnJlZlxuICB9LCBlbGVtZW50LnByb3BzKSwgcHJvcHMpO1xuXG4gIGlmIChwcm9wcy5jc3MgfHwgZWxlbWVudC5wcm9wcy5jc3MpIHtcbiAgICBjbG9uZWRQcm9wcy5jc3MgPSBbZWxlbWVudC5wcm9wcy5jc3MsIHByb3BzLmNzc107XG4gIH1cblxuICByZXR1cm4ganN4KGNsb25lZEVsZW1lbnQsIGNsb25lZFByb3BzKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG4vKlxuICogTWl4aW4gdGhhdCBoaWRlcyBlbGVtZW50cyBvZmZzY3JlZW4gdG8gb25seSBiZSByZWFkIGJ5IHNjcmVlbiByZWFkZXJcbiAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZWxhc3RpYy9ldWkvcHVsbC81MTMwIGFuZCBodHRwczovL2dpdGh1Yi5jb20vZWxhc3RpYy9ldWkvcHVsbC81MTUyIGZvciBtb3JlIGluZm9cbiAqL1xuXG5leHBvcnQgdmFyIGV1aVNjcmVlblJlYWRlck9ubHkgPSBmdW5jdGlvbiBldWlTY3JlZW5SZWFkZXJPbmx5KCkge1xuICByZXR1cm4gXCJcXG4gIC8vIFRha2UgdGhlIGVsZW1lbnQgb3V0IG9mIHRoZSBsYXlvdXRcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIC8vIEtlZXAgaXQgdmVydGljYWxseSBpbmxpbmVcXG4gIHRvcDogYXV0bztcXG4gIC8vIENocm9tZSByZXF1aXJlcyBhIGxlZnQgdmFsdWUsIGFuZCBTZWxlbml1bSAodXNlZCBieSBLaWJhbmEncyBGVFIpIHJlcXVpcmVzIGFuIG9mZi1zY3JlZW4gcG9zaXRpb24gZm9yIGl0cyAuZ2V0VmlzaWJsZVRleHQoKSB0byBub3QgcmVnaXN0ZXIgU1Itb25seSB0ZXh0XFxuICBsZWZ0OiAtMTAwMDBweDtcXG4gIC8vIFRoZSBlbGVtZW50IG11c3QgaGF2ZSBhIHNpemUgKGZvciBzb21lIHNjcmVlbiByZWFkZXJzKVxcbiAgd2lkdGg6IDFweDtcXG4gIGhlaWdodDogMXB4O1xcbiAgLy8gQnV0IHJlZHVjZSB0aGUgdmlzaWJsZSBzaXplIHRvIG5vdGhpbmdcXG4gIGNsaXA6IHJlY3QoMCAwIDAgMCk7XFxuICBjbGlwLXBhdGg6IGluc2V0KDUwJSk7XFxuICAvLyBBbmQgZW5zdXJlIG5vIG92ZXJmbG93cyBvY2N1clxcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIC8vIENocm9tZSByZXF1aXJlcyB0aGUgbmVnYXRpdmUgbWFyZ2luIHRvIG5vdCBjYXVzZSBvdmVyZmxvd3Mgb2YgcGFyZW50IGNvbnRhaW5lcnNcXG4gIG1hcmdpbjogLTFweDtcXG5cIjtcbn07XG4vKlxuICogU3R5bGVzXG4gKi9cblxuZXhwb3J0IHZhciBldWlTY3JlZW5SZWFkZXJPbmx5U3R5bGVzID0gZnVuY3Rpb24gZXVpU2NyZWVuUmVhZGVyT25seVN0eWxlcyhzaG93T25Gb2N1cykge1xuICByZXR1cm4ge1xuICAgIGV1aVNjcmVlblJlYWRlck9ubHk6IHNob3dPbkZvY3VzID8gLyojX19QVVJFX18qL2NzcyhcIiY6bm90KDpmb2N1cyk6bm90KDphY3RpdmUpe1wiLCBldWlTY3JlZW5SZWFkZXJPbmx5KCksIFwiO307bGFiZWw6ZXVpU2NyZWVuUmVhZGVyT25seTtcIikgOiAvKiNfX1BVUkVfXyovY3NzKGV1aVNjcmVlblJlYWRlck9ubHkoKSwgXCI7bGFiZWw6ZXVpU2NyZWVuUmVhZGVyT25seTtcIilcbiAgfTtcbn07IiwgImNvbnN0IGNhbmRpZGF0ZVNlbGVjdG9ycyA9IFtcbiAgJ2lucHV0JyxcbiAgJ3NlbGVjdCcsXG4gICd0ZXh0YXJlYScsXG4gICdhW2hyZWZdJyxcbiAgJ2J1dHRvbicsXG4gICdbdGFiaW5kZXhdOm5vdChzbG90KScsXG4gICdhdWRpb1tjb250cm9sc10nLFxuICAndmlkZW9bY29udHJvbHNdJyxcbiAgJ1tjb250ZW50ZWRpdGFibGVdOm5vdChbY29udGVudGVkaXRhYmxlPVwiZmFsc2VcIl0pJyxcbiAgJ2RldGFpbHM+c3VtbWFyeTpmaXJzdC1vZi10eXBlJyxcbiAgJ2RldGFpbHMnLFxuXTtcbmNvbnN0IGNhbmRpZGF0ZVNlbGVjdG9yID0gLyogI19fUFVSRV9fICovIGNhbmRpZGF0ZVNlbGVjdG9ycy5qb2luKCcsJyk7XG5cbmNvbnN0IE5vRWxlbWVudCA9IHR5cGVvZiBFbGVtZW50ID09PSAndW5kZWZpbmVkJztcblxuY29uc3QgbWF0Y2hlcyA9IE5vRWxlbWVudFxuICA/IGZ1bmN0aW9uICgpIHt9XG4gIDogRWxlbWVudC5wcm90b3R5cGUubWF0Y2hlcyB8fFxuICAgIEVsZW1lbnQucHJvdG90eXBlLm1zTWF0Y2hlc1NlbGVjdG9yIHx8XG4gICAgRWxlbWVudC5wcm90b3R5cGUud2Via2l0TWF0Y2hlc1NlbGVjdG9yO1xuXG5jb25zdCBnZXRSb290Tm9kZSA9XG4gICFOb0VsZW1lbnQgJiYgRWxlbWVudC5wcm90b3R5cGUuZ2V0Um9vdE5vZGVcbiAgICA/IChlbGVtZW50KSA9PiBlbGVtZW50LmdldFJvb3ROb2RlKClcbiAgICA6IChlbGVtZW50KSA9PiBlbGVtZW50Lm93bmVyRG9jdW1lbnQ7XG5cbi8qKlxuICogQHBhcmFtIHtFbGVtZW50fSBlbCBjb250YWluZXIgdG8gY2hlY2sgaW5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5jbHVkZUNvbnRhaW5lciBhZGQgY29udGFpbmVyIHRvIGNoZWNrXG4gKiBAcGFyYW0geyhub2RlOiBFbGVtZW50KSA9PiBib29sZWFufSBmaWx0ZXIgZmlsdGVyIGNhbmRpZGF0ZXNcbiAqIEByZXR1cm5zIHtFbGVtZW50W119XG4gKi9cbmNvbnN0IGdldENhbmRpZGF0ZXMgPSBmdW5jdGlvbiAoZWwsIGluY2x1ZGVDb250YWluZXIsIGZpbHRlcikge1xuICBsZXQgY2FuZGlkYXRlcyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5hcHBseShcbiAgICBlbC5xdWVyeVNlbGVjdG9yQWxsKGNhbmRpZGF0ZVNlbGVjdG9yKVxuICApO1xuICBpZiAoaW5jbHVkZUNvbnRhaW5lciAmJiBtYXRjaGVzLmNhbGwoZWwsIGNhbmRpZGF0ZVNlbGVjdG9yKSkge1xuICAgIGNhbmRpZGF0ZXMudW5zaGlmdChlbCk7XG4gIH1cbiAgY2FuZGlkYXRlcyA9IGNhbmRpZGF0ZXMuZmlsdGVyKGZpbHRlcik7XG4gIHJldHVybiBjYW5kaWRhdGVzO1xufTtcblxuLyoqXG4gKiBAY2FsbGJhY2sgR2V0U2hhZG93Um9vdFxuICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IHRvIGNoZWNrIGZvciBzaGFkb3cgcm9vdFxuICogQHJldHVybnMge1NoYWRvd1Jvb3R8Ym9vbGVhbn0gU2hhZG93Um9vdCBpZiBhdmFpbGFibGUgb3IgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIGEgc2hhZG93Um9vdCBpcyBhdHRhY2hlZCBidXQgbm90IGF2YWlsYWJsZS5cbiAqL1xuXG4vKipcbiAqIEBjYWxsYmFjayBTaGFkb3dSb290RmlsdGVyXG4gKiBAcGFyYW0ge0VsZW1lbnR9IHNoYWRvd0hvc3ROb2RlIHRoZSBlbGVtZW50IHdoaWNoIGNvbnRhaW5zIHNoYWRvdyBjb250ZW50XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiBhIHNoYWRvdyByb290IGNvdWxkIHBvdGVudGlhbGx5IGNvbnRhaW4gdmFsaWQgY2FuZGlkYXRlcy5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IENhbmRpZGF0ZXNTY29wZVxuICogQHByb3BlcnR5IHtFbGVtZW50fSBzY29wZSBjb250YWlucyBpbm5lciBjYW5kaWRhdGVzXG4gKiBAcHJvcGVydHkge0VsZW1lbnRbXX0gY2FuZGlkYXRlc1xuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gSXRlcmF0aXZlT3B0aW9uc1xuICogQHByb3BlcnR5IHtHZXRTaGFkb3dSb290fGJvb2xlYW59IGdldFNoYWRvd1Jvb3QgdHJ1ZSBpZiBzaGFkb3cgc3VwcG9ydCBpcyBlbmFibGVkOyBmYWxzeSBpZiBub3Q7XG4gKiAgaWYgYSBmdW5jdGlvbiwgaW1wbGllcyBzaGFkb3cgc3VwcG9ydCBpcyBlbmFibGVkIGFuZCBlaXRoZXIgcmV0dXJucyB0aGUgc2hhZG93IHJvb3Qgb2YgYW4gZWxlbWVudFxuICogIG9yIGEgYm9vbGVhbiBzdGF0aW5nIGlmIGl0IGhhcyBhbiB1bmRpc2Nsb3NlZCBzaGFkb3cgcm9vdFxuICogQHByb3BlcnR5IHsobm9kZTogRWxlbWVudCkgPT4gYm9vbGVhbn0gZmlsdGVyIGZpbHRlciBjYW5kaWRhdGVzXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGZsYXR0ZW4gaWYgdHJ1ZSB0aGVuIHJlc3VsdCB3aWxsIGZsYXR0ZW4gYW55IENhbmRpZGF0ZXNTY29wZSBpbnRvIHRoZSByZXR1cm5lZCBsaXN0XG4gKiBAcHJvcGVydHkge1NoYWRvd1Jvb3RGaWx0ZXJ9IHNoYWRvd1Jvb3RGaWx0ZXIgZmlsdGVyIHNoYWRvdyByb290cztcbiAqL1xuXG4vKipcbiAqIEBwYXJhbSB7RWxlbWVudFtdfSBlbGVtZW50cyBsaXN0IG9mIGVsZW1lbnQgY29udGFpbmVycyB0byBtYXRjaCBjYW5kaWRhdGVzIGZyb21cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5jbHVkZUNvbnRhaW5lciBhZGQgY29udGFpbmVyIGxpc3QgdG8gY2hlY2tcbiAqIEBwYXJhbSB7SXRlcmF0aXZlT3B0aW9uc30gb3B0aW9uc1xuICogQHJldHVybnMge0FycmF5LjxFbGVtZW50fENhbmRpZGF0ZXNTY29wZT59XG4gKi9cbmNvbnN0IGdldENhbmRpZGF0ZXNJdGVyYXRpdmVseSA9IGZ1bmN0aW9uIChcbiAgZWxlbWVudHMsXG4gIGluY2x1ZGVDb250YWluZXIsXG4gIG9wdGlvbnNcbikge1xuICBjb25zdCBjYW5kaWRhdGVzID0gW107XG4gIGNvbnN0IGVsZW1lbnRzVG9DaGVjayA9IEFycmF5LmZyb20oZWxlbWVudHMpO1xuICB3aGlsZSAoZWxlbWVudHNUb0NoZWNrLmxlbmd0aCkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBlbGVtZW50c1RvQ2hlY2suc2hpZnQoKTtcbiAgICBpZiAoZWxlbWVudC50YWdOYW1lID09PSAnU0xPVCcpIHtcbiAgICAgIC8vIGFkZCBzaGFkb3cgZG9tIHNsb3Qgc2NvcGUgKHNsb3QgaXRzZWxmIGNhbm5vdCBiZSBmb2N1c2FibGUpXG4gICAgICBjb25zdCBhc3NpZ25lZCA9IGVsZW1lbnQuYXNzaWduZWRFbGVtZW50cygpO1xuICAgICAgY29uc3QgY29udGVudCA9IGFzc2lnbmVkLmxlbmd0aCA/IGFzc2lnbmVkIDogZWxlbWVudC5jaGlsZHJlbjtcbiAgICAgIGNvbnN0IG5lc3RlZENhbmRpZGF0ZXMgPSBnZXRDYW5kaWRhdGVzSXRlcmF0aXZlbHkoY29udGVudCwgdHJ1ZSwgb3B0aW9ucyk7XG4gICAgICBpZiAob3B0aW9ucy5mbGF0dGVuKSB7XG4gICAgICAgIGNhbmRpZGF0ZXMucHVzaCguLi5uZXN0ZWRDYW5kaWRhdGVzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhbmRpZGF0ZXMucHVzaCh7XG4gICAgICAgICAgc2NvcGU6IGVsZW1lbnQsXG4gICAgICAgICAgY2FuZGlkYXRlczogbmVzdGVkQ2FuZGlkYXRlcyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGNoZWNrIGNhbmRpZGF0ZSBlbGVtZW50XG4gICAgICBjb25zdCB2YWxpZENhbmRpZGF0ZSA9IG1hdGNoZXMuY2FsbChlbGVtZW50LCBjYW5kaWRhdGVTZWxlY3Rvcik7XG4gICAgICBpZiAoXG4gICAgICAgIHZhbGlkQ2FuZGlkYXRlICYmXG4gICAgICAgIG9wdGlvbnMuZmlsdGVyKGVsZW1lbnQpICYmXG4gICAgICAgIChpbmNsdWRlQ29udGFpbmVyIHx8ICFlbGVtZW50cy5pbmNsdWRlcyhlbGVtZW50KSlcbiAgICAgICkge1xuICAgICAgICBjYW5kaWRhdGVzLnB1c2goZWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIC8vIGl0ZXJhdGUgb3ZlciBzaGFkb3cgY29udGVudCBpZiBwb3NzaWJsZVxuICAgICAgY29uc3Qgc2hhZG93Um9vdCA9XG4gICAgICAgIGVsZW1lbnQuc2hhZG93Um9vdCB8fFxuICAgICAgICAvLyBjaGVjayBmb3IgYW4gdW5kaXNjbG9zZWQgc2hhZG93XG4gICAgICAgICh0eXBlb2Ygb3B0aW9ucy5nZXRTaGFkb3dSb290ID09PSAnZnVuY3Rpb24nICYmXG4gICAgICAgICAgb3B0aW9ucy5nZXRTaGFkb3dSb290KGVsZW1lbnQpKTtcblxuICAgICAgY29uc3QgdmFsaWRTaGFkb3dSb290ID1cbiAgICAgICAgIW9wdGlvbnMuc2hhZG93Um9vdEZpbHRlciB8fCBvcHRpb25zLnNoYWRvd1Jvb3RGaWx0ZXIoZWxlbWVudCk7XG5cbiAgICAgIGlmIChzaGFkb3dSb290ICYmIHZhbGlkU2hhZG93Um9vdCkge1xuICAgICAgICAvLyBhZGQgc2hhZG93IGRvbSBzY29wZSBJSUYgYSBzaGFkb3cgcm9vdCBub2RlIHdhcyBnaXZlbjsgb3RoZXJ3aXNlLCBhbiB1bmRpc2Nsb3NlZFxuICAgICAgICAvLyAgc2hhZG93IGV4aXN0cywgc28gbG9vayBhdCBsaWdodCBkb20gY2hpbGRyZW4gYXMgZmFsbGJhY2sgQlVUIGNyZWF0ZSBhIHNjb3BlIGZvciBhbnlcbiAgICAgICAgLy8gIGNoaWxkIGNhbmRpZGF0ZXMgZm91bmQgYmVjYXVzZSB0aGV5J3JlIGxpa2VseSBzbG90dGVkIGVsZW1lbnRzIChlbGVtZW50cyB0aGF0IGFyZVxuICAgICAgICAvLyAgY2hpbGRyZW4gb2YgdGhlIHdlYiBjb21wb25lbnQgZWxlbWVudCAod2hpY2ggaGFzIHRoZSBzaGFkb3cpLCBpbiB0aGUgbGlnaHQgZG9tLCBidXRcbiAgICAgICAgLy8gIHNsb3R0ZWQgc29tZXdoZXJlIF9pbnNpZGVfIHRoZSB1bmRpc2Nsb3NlZCBzaGFkb3cpIC0tIHRoZSBzY29wZSBpcyBjcmVhdGVkIGJlbG93LFxuICAgICAgICAvLyAgX2FmdGVyXyB3ZSByZXR1cm4gZnJvbSB0aGlzIHJlY3Vyc2l2ZSBjYWxsXG4gICAgICAgIGNvbnN0IG5lc3RlZENhbmRpZGF0ZXMgPSBnZXRDYW5kaWRhdGVzSXRlcmF0aXZlbHkoXG4gICAgICAgICAgc2hhZG93Um9vdCA9PT0gdHJ1ZSA/IGVsZW1lbnQuY2hpbGRyZW4gOiBzaGFkb3dSb290LmNoaWxkcmVuLFxuICAgICAgICAgIHRydWUsXG4gICAgICAgICAgb3B0aW9uc1xuICAgICAgICApO1xuXG4gICAgICAgIGlmIChvcHRpb25zLmZsYXR0ZW4pIHtcbiAgICAgICAgICBjYW5kaWRhdGVzLnB1c2goLi4ubmVzdGVkQ2FuZGlkYXRlcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FuZGlkYXRlcy5wdXNoKHtcbiAgICAgICAgICAgIHNjb3BlOiBlbGVtZW50LFxuICAgICAgICAgICAgY2FuZGlkYXRlczogbmVzdGVkQ2FuZGlkYXRlcyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdGhlcmUncyBub3Qgc2hhZG93IHNvIGp1c3QgZGlnIGludG8gdGhlIGVsZW1lbnQncyAobGlnaHQgZG9tKSBjaGlsZHJlblxuICAgICAgICAvLyAgX193aXRob3V0X18gZ2l2aW5nIHRoZSBlbGVtZW50IHNwZWNpYWwgc2NvcGUgdHJlYXRtZW50XG4gICAgICAgIGVsZW1lbnRzVG9DaGVjay51bnNoaWZ0KC4uLmVsZW1lbnQuY2hpbGRyZW4pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gY2FuZGlkYXRlcztcbn07XG5cbmNvbnN0IGdldFRhYmluZGV4ID0gZnVuY3Rpb24gKG5vZGUsIGlzU2NvcGUpIHtcbiAgaWYgKG5vZGUudGFiSW5kZXggPCAwKSB7XG4gICAgLy8gaW4gQ2hyb21lLCA8ZGV0YWlscy8+LCA8YXVkaW8gY29udHJvbHMvPiBhbmQgPHZpZGVvIGNvbnRyb2xzLz4gZWxlbWVudHMgZ2V0IGEgZGVmYXVsdFxuICAgIC8vIGB0YWJJbmRleGAgb2YgLTEgd2hlbiB0aGUgJ3RhYmluZGV4JyBhdHRyaWJ1dGUgaXNuJ3Qgc3BlY2lmaWVkIGluIHRoZSBET00sXG4gICAgLy8geWV0IHRoZXkgYXJlIHN0aWxsIHBhcnQgb2YgdGhlIHJlZ3VsYXIgdGFiIG9yZGVyOyBpbiBGRiwgdGhleSBnZXQgYSBkZWZhdWx0XG4gICAgLy8gYHRhYkluZGV4YCBvZiAwOyBzaW5jZSBDaHJvbWUgc3RpbGwgcHV0cyB0aG9zZSBlbGVtZW50cyBpbiB0aGUgcmVndWxhciB0YWJcbiAgICAvLyBvcmRlciwgY29uc2lkZXIgdGhlaXIgdGFiIGluZGV4IHRvIGJlIDAuXG4gICAgLy8gQWxzbyBicm93c2VycyBkbyBub3QgcmV0dXJuIGB0YWJJbmRleGAgY29ycmVjdGx5IGZvciBjb250ZW50RWRpdGFibGUgbm9kZXM7XG4gICAgLy8gc28gaWYgdGhleSBkb24ndCBoYXZlIGEgdGFiaW5kZXggYXR0cmlidXRlIHNwZWNpZmljYWxseSBzZXQsIGFzc3VtZSBpdCdzIDAuXG4gICAgLy9cbiAgICAvLyBpc1Njb3BlIGlzIHBvc2l0aXZlIGZvciBjdXN0b20gZWxlbWVudCB3aXRoIHNoYWRvdyByb290IG9yIHNsb3QgdGhhdCBieSBkZWZhdWx0XG4gICAgLy8gaGF2ZSB0YWJJbmRleCAtMSwgYnV0IG5lZWQgdG8gYmUgc29ydGVkIGJ5IGRvY3VtZW50IG9yZGVyIGluIG9yZGVyIGZvciB0aGVpclxuICAgIC8vIGNvbnRlbnQgdG8gYmUgaW5zZXJ0ZWQgaW4gdGhlIGNvcnJlY3QgcG9zaXRpb25cbiAgICBpZiAoXG4gICAgICAoaXNTY29wZSB8fFxuICAgICAgICAvXihBVURJT3xWSURFT3xERVRBSUxTKSQvLnRlc3Qobm9kZS50YWdOYW1lKSB8fFxuICAgICAgICBub2RlLmlzQ29udGVudEVkaXRhYmxlKSAmJlxuICAgICAgaXNOYU4ocGFyc2VJbnQobm9kZS5nZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JyksIDEwKSlcbiAgICApIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBub2RlLnRhYkluZGV4O1xufTtcblxuY29uc3Qgc29ydE9yZGVyZWRUYWJiYWJsZXMgPSBmdW5jdGlvbiAoYSwgYikge1xuICByZXR1cm4gYS50YWJJbmRleCA9PT0gYi50YWJJbmRleFxuICAgID8gYS5kb2N1bWVudE9yZGVyIC0gYi5kb2N1bWVudE9yZGVyXG4gICAgOiBhLnRhYkluZGV4IC0gYi50YWJJbmRleDtcbn07XG5cbmNvbnN0IGlzSW5wdXQgPSBmdW5jdGlvbiAobm9kZSkge1xuICByZXR1cm4gbm9kZS50YWdOYW1lID09PSAnSU5QVVQnO1xufTtcblxuY29uc3QgaXNIaWRkZW5JbnB1dCA9IGZ1bmN0aW9uIChub2RlKSB7XG4gIHJldHVybiBpc0lucHV0KG5vZGUpICYmIG5vZGUudHlwZSA9PT0gJ2hpZGRlbic7XG59O1xuXG5jb25zdCBpc0RldGFpbHNXaXRoU3VtbWFyeSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gIGNvbnN0IHIgPVxuICAgIG5vZGUudGFnTmFtZSA9PT0gJ0RFVEFJTFMnICYmXG4gICAgQXJyYXkucHJvdG90eXBlLnNsaWNlXG4gICAgICAuYXBwbHkobm9kZS5jaGlsZHJlbilcbiAgICAgIC5zb21lKChjaGlsZCkgPT4gY2hpbGQudGFnTmFtZSA9PT0gJ1NVTU1BUlknKTtcbiAgcmV0dXJuIHI7XG59O1xuXG5jb25zdCBnZXRDaGVja2VkUmFkaW8gPSBmdW5jdGlvbiAobm9kZXMsIGZvcm0pIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChub2Rlc1tpXS5jaGVja2VkICYmIG5vZGVzW2ldLmZvcm0gPT09IGZvcm0pIHtcbiAgICAgIHJldHVybiBub2Rlc1tpXTtcbiAgICB9XG4gIH1cbn07XG5cbmNvbnN0IGlzVGFiYmFibGVSYWRpbyA9IGZ1bmN0aW9uIChub2RlKSB7XG4gIGlmICghbm9kZS5uYW1lKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgY29uc3QgcmFkaW9TY29wZSA9IG5vZGUuZm9ybSB8fCBnZXRSb290Tm9kZShub2RlKTtcbiAgY29uc3QgcXVlcnlSYWRpb3MgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHJldHVybiByYWRpb1Njb3BlLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAnaW5wdXRbdHlwZT1cInJhZGlvXCJdW25hbWU9XCInICsgbmFtZSArICdcIl0nXG4gICAgKTtcbiAgfTtcblxuICBsZXQgcmFkaW9TZXQ7XG4gIGlmIChcbiAgICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIHR5cGVvZiB3aW5kb3cuQ1NTICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIHR5cGVvZiB3aW5kb3cuQ1NTLmVzY2FwZSA9PT0gJ2Z1bmN0aW9uJ1xuICApIHtcbiAgICByYWRpb1NldCA9IHF1ZXJ5UmFkaW9zKHdpbmRvdy5DU1MuZXNjYXBlKG5vZGUubmFtZSkpO1xuICB9IGVsc2Uge1xuICAgIHRyeSB7XG4gICAgICByYWRpb1NldCA9IHF1ZXJ5UmFkaW9zKG5vZGUubmFtZSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgJ0xvb2tzIGxpa2UgeW91IGhhdmUgYSByYWRpbyBidXR0b24gd2l0aCBhIG5hbWUgYXR0cmlidXRlIGNvbnRhaW5pbmcgaW52YWxpZCBDU1Mgc2VsZWN0b3IgY2hhcmFjdGVycyBhbmQgbmVlZCB0aGUgQ1NTLmVzY2FwZSBwb2x5ZmlsbDogJXMnLFxuICAgICAgICBlcnIubWVzc2FnZVxuICAgICAgKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBjaGVja2VkID0gZ2V0Q2hlY2tlZFJhZGlvKHJhZGlvU2V0LCBub2RlLmZvcm0pO1xuICByZXR1cm4gIWNoZWNrZWQgfHwgY2hlY2tlZCA9PT0gbm9kZTtcbn07XG5cbmNvbnN0IGlzUmFkaW8gPSBmdW5jdGlvbiAobm9kZSkge1xuICByZXR1cm4gaXNJbnB1dChub2RlKSAmJiBub2RlLnR5cGUgPT09ICdyYWRpbyc7XG59O1xuXG5jb25zdCBpc05vblRhYmJhYmxlUmFkaW8gPSBmdW5jdGlvbiAobm9kZSkge1xuICByZXR1cm4gaXNSYWRpbyhub2RlKSAmJiAhaXNUYWJiYWJsZVJhZGlvKG5vZGUpO1xufTtcblxuY29uc3QgaXNaZXJvQXJlYSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gbm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgcmV0dXJuIHdpZHRoID09PSAwICYmIGhlaWdodCA9PT0gMDtcbn07XG5jb25zdCBpc0hpZGRlbiA9IGZ1bmN0aW9uIChub2RlLCB7IGRpc3BsYXlDaGVjaywgZ2V0U2hhZG93Um9vdCB9KSB7XG4gIC8vIE5PVEU6IHZpc2liaWxpdHkgd2lsbCBiZSBgdW5kZWZpbmVkYCBpZiBub2RlIGlzIGRldGFjaGVkIGZyb20gdGhlIGRvY3VtZW50XG4gIC8vICAoc2VlIG5vdGVzIGFib3V0IHRoaXMgZnVydGhlciBkb3duKSwgd2hpY2ggbWVhbnMgd2Ugd2lsbCBjb25zaWRlciBpdCB2aXNpYmxlXG4gIC8vICAodGhpcyBpcyBsZWdhY3kgYmVoYXZpb3IgZnJvbSBhIHZlcnkgbG9uZyB3YXkgYmFjaylcbiAgLy8gTk9URTogd2UgY2hlY2sgdGhpcyByZWdhcmRsZXNzIG9mIGBkaXNwbGF5Q2hlY2s9XCJub25lXCJgIGJlY2F1c2UgdGhpcyBpcyBhXG4gIC8vICBfdmlzaWJpbGl0eV8gY2hlY2ssIG5vdCBhIF9kaXNwbGF5XyBjaGVja1xuICBpZiAoZ2V0Q29tcHV0ZWRTdHlsZShub2RlKS52aXNpYmlsaXR5ID09PSAnaGlkZGVuJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY29uc3QgaXNEaXJlY3RTdW1tYXJ5ID0gbWF0Y2hlcy5jYWxsKG5vZGUsICdkZXRhaWxzPnN1bW1hcnk6Zmlyc3Qtb2YtdHlwZScpO1xuICBjb25zdCBub2RlVW5kZXJEZXRhaWxzID0gaXNEaXJlY3RTdW1tYXJ5ID8gbm9kZS5wYXJlbnRFbGVtZW50IDogbm9kZTtcbiAgaWYgKG1hdGNoZXMuY2FsbChub2RlVW5kZXJEZXRhaWxzLCAnZGV0YWlsczpub3QoW29wZW5dKSAqJykpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIFRoZSByb290IG5vZGUgaXMgdGhlIHNoYWRvdyByb290IGlmIHRoZSBub2RlIGlzIGluIGEgc2hhZG93IERPTTsgc29tZSBkb2N1bWVudCBvdGhlcndpc2VcbiAgLy8gIChidXQgTk9UIF90aGVfIGRvY3VtZW50OyBzZWUgc2Vjb25kICdJZicgY29tbWVudCBiZWxvdyBmb3IgbW9yZSkuXG4gIC8vIElmIHJvb3ROb2RlIGlzIHNoYWRvdyByb290LCBpdCdsbCBoYXZlIGEgaG9zdCwgd2hpY2ggaXMgdGhlIGVsZW1lbnQgdG8gd2hpY2ggdGhlIHNoYWRvd1xuICAvLyAgaXMgYXR0YWNoZWQsIGFuZCB0aGUgb25lIHdlIG5lZWQgdG8gY2hlY2sgaWYgaXQncyBpbiB0aGUgZG9jdW1lbnQgb3Igbm90IChiZWNhdXNlIHRoZVxuICAvLyAgc2hhZG93LCBhbmQgYWxsIG5vZGVzIGl0IGNvbnRhaW5zLCBpcyBuZXZlciBjb25zaWRlcmVkIGluIHRoZSBkb2N1bWVudCBzaW5jZSBzaGFkb3dzXG4gIC8vICBiZWhhdmUgbGlrZSBzZWxmLWNvbnRhaW5lZCBET01zOyBidXQgaWYgdGhlIHNoYWRvdydzIEhPU1QsIHdoaWNoIGlzIHBhcnQgb2YgdGhlIGRvY3VtZW50LFxuICAvLyAgaXMgaGlkZGVuLCBvciBpcyBub3QgaW4gdGhlIGRvY3VtZW50IGl0c2VsZiBidXQgaXMgZGV0YWNoZWQsIGl0IHdpbGwgYWZmZWN0IHRoZSBzaGFkb3cnc1xuICAvLyAgdmlzaWJpbGl0eSwgaW5jbHVkaW5nIGFsbCB0aGUgbm9kZXMgaXQgY29udGFpbnMpLiBUaGUgaG9zdCBjb3VsZCBiZSBhbnkgbm9ybWFsIG5vZGUsXG4gIC8vICBvciBhIGN1c3RvbSBlbGVtZW50IChpLmUuIHdlYiBjb21wb25lbnQpLiBFaXRoZXIgd2F5LCB0aGF0J3MgdGhlIG9uZSB0aGF0IGlzIGNvbnNpZGVyZWRcbiAgLy8gIHBhcnQgb2YgdGhlIGRvY3VtZW50LCBub3QgdGhlIHNoYWRvdyByb290LCBub3IgYW55IG9mIGl0cyBjaGlsZHJlbiAoaS5lLiB0aGUgbm9kZSBiZWluZ1xuICAvLyAgdGVzdGVkKS5cbiAgLy8gSWYgcm9vdE5vZGUgaXMgbm90IGEgc2hhZG93IHJvb3QsIGl0IHdvbid0IGhhdmUgYSBob3N0LCBhbmQgc28gcm9vdE5vZGUgc2hvdWxkIGJlIHRoZVxuICAvLyAgZG9jdW1lbnQgKHBlciB0aGUgZG9jcykgYW5kIHdoaWxlIGl0J3MgYSBEb2N1bWVudC10eXBlIG9iamVjdCwgdGhhdCBkb2N1bWVudCBkb2VzIG5vdFxuICAvLyAgYXBwZWFyIHRvIGJlIHRoZSBzYW1lIGFzIHRoZSBub2RlJ3MgYG93bmVyRG9jdW1lbnRgIGZvciBzb21lIHJlYXNvbiwgc28gaXQncyBzYWZlclxuICAvLyAgdG8gaWdub3JlIHRoZSByb290Tm9kZSBhdCB0aGlzIHBvaW50LCBhbmQgdXNlIGBub2RlLm93bmVyRG9jdW1lbnRgLiBPdGhlcndpc2UsXG4gIC8vICB1c2luZyBgcm9vdE5vZGUuY29udGFpbnMobm9kZSlgIHdpbGwgX2Fsd2F5c18gYmUgdHJ1ZSB3ZSdsbCBnZXQgZmFsc2UtcG9zaXRpdmVzIHdoZW5cbiAgLy8gIG5vZGUgaXMgYWN0dWFsbHkgZGV0YWNoZWQuXG4gIGNvbnN0IG5vZGVSb290SG9zdCA9IGdldFJvb3ROb2RlKG5vZGUpLmhvc3Q7XG4gIGNvbnN0IG5vZGVJc0F0dGFjaGVkID1cbiAgICBub2RlUm9vdEhvc3Q/Lm93bmVyRG9jdW1lbnQuY29udGFpbnMobm9kZVJvb3RIb3N0KSB8fFxuICAgIG5vZGUub3duZXJEb2N1bWVudC5jb250YWlucyhub2RlKTtcblxuICBpZiAoIWRpc3BsYXlDaGVjayB8fCBkaXNwbGF5Q2hlY2sgPT09ICdmdWxsJykge1xuICAgIGlmICh0eXBlb2YgZ2V0U2hhZG93Um9vdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gZmlndXJlIG91dCBpZiB3ZSBzaG91bGQgY29uc2lkZXIgdGhlIG5vZGUgdG8gYmUgaW4gYW4gdW5kaXNjbG9zZWQgc2hhZG93IGFuZCB1c2UgdGhlXG4gICAgICAvLyAgJ25vbi16ZXJvLWFyZWEnIGZhbGxiYWNrXG4gICAgICBjb25zdCBvcmlnaW5hbE5vZGUgPSBub2RlO1xuICAgICAgd2hpbGUgKG5vZGUpIHtcbiAgICAgICAgY29uc3QgcGFyZW50RWxlbWVudCA9IG5vZGUucGFyZW50RWxlbWVudDtcbiAgICAgICAgY29uc3Qgcm9vdE5vZGUgPSBnZXRSb290Tm9kZShub2RlKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHBhcmVudEVsZW1lbnQgJiZcbiAgICAgICAgICAhcGFyZW50RWxlbWVudC5zaGFkb3dSb290ICYmXG4gICAgICAgICAgZ2V0U2hhZG93Um9vdChwYXJlbnRFbGVtZW50KSA9PT0gdHJ1ZSAvLyBjaGVjayBpZiB0aGVyZSdzIGFuIHVuZGlzY2xvc2VkIHNoYWRvd1xuICAgICAgICApIHtcbiAgICAgICAgICAvLyBub2RlIGhhcyBhbiB1bmRpc2Nsb3NlZCBzaGFkb3cgd2hpY2ggbWVhbnMgd2UgY2FuIG9ubHkgdHJlYXQgaXQgYXMgYSBibGFjayBib3gsIHNvIHdlXG4gICAgICAgICAgLy8gIGZhbGwgYmFjayB0byBhIG5vbi16ZXJvLWFyZWEgdGVzdFxuICAgICAgICAgIHJldHVybiBpc1plcm9BcmVhKG5vZGUpO1xuICAgICAgICB9IGVsc2UgaWYgKG5vZGUuYXNzaWduZWRTbG90KSB7XG4gICAgICAgICAgLy8gaXRlcmF0ZSB1cCBzbG90XG4gICAgICAgICAgbm9kZSA9IG5vZGUuYXNzaWduZWRTbG90O1xuICAgICAgICB9IGVsc2UgaWYgKCFwYXJlbnRFbGVtZW50ICYmIHJvb3ROb2RlICE9PSBub2RlLm93bmVyRG9jdW1lbnQpIHtcbiAgICAgICAgICAvLyBjcm9zcyBzaGFkb3cgYm91bmRhcnlcbiAgICAgICAgICBub2RlID0gcm9vdE5vZGUuaG9zdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBpdGVyYXRlIHVwIG5vcm1hbCBkb21cbiAgICAgICAgICBub2RlID0gcGFyZW50RWxlbWVudDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBub2RlID0gb3JpZ2luYWxOb2RlO1xuICAgIH1cbiAgICAvLyBlbHNlLCBgZ2V0U2hhZG93Um9vdGAgbWlnaHQgYmUgdHJ1ZSwgYnV0IGFsbCB0aGF0IGRvZXMgaXMgZW5hYmxlIHNoYWRvdyBET00gc3VwcG9ydFxuICAgIC8vICAoaS5lLiBpdCBkb2VzIG5vdCBhbHNvIHByZXN1bWUgdGhhdCBhbGwgbm9kZXMgbWlnaHQgaGF2ZSB1bmRpc2Nsb3NlZCBzaGFkb3dzKTsgb3JcbiAgICAvLyAgaXQgbWlnaHQgYmUgYSBmYWxzeSB2YWx1ZSwgd2hpY2ggbWVhbnMgc2hhZG93IERPTSBzdXBwb3J0IGlzIGRpc2FibGVkXG5cbiAgICAvLyBTaW5jZSB3ZSBkaWRuJ3QgZmluZCBpdCBzaXR0aW5nIGluIGFuIHVuZGlzY2xvc2VkIHNoYWRvdyAob3Igc2hhZG93cyBhcmUgZGlzYWJsZWQpXG4gICAgLy8gIG5vdyB3ZSBjYW4ganVzdCB0ZXN0IHRvIHNlZSBpZiBpdCB3b3VsZCBub3JtYWxseSBiZSB2aXNpYmxlIG9yIG5vdCwgcHJvdmlkZWQgaXQnc1xuICAgIC8vICBhdHRhY2hlZCB0byB0aGUgbWFpbiBkb2N1bWVudC5cbiAgICAvLyBOT1RFOiBXZSBtdXN0IGNvbnNpZGVyIGNhc2Ugd2hlcmUgbm9kZSBpcyBpbnNpZGUgYSBzaGFkb3cgRE9NIGFuZCBnaXZlbiBkaXJlY3RseSB0b1xuICAgIC8vICBgaXNUYWJiYWJsZSgpYCBvciBgaXNGb2N1c2FibGUoKWAgLS0gcmVnYXJkbGVzcyBvZiBgZ2V0U2hhZG93Um9vdGAgb3B0aW9uIHNldHRpbmcuXG5cbiAgICBpZiAobm9kZUlzQXR0YWNoZWQpIHtcbiAgICAgIC8vIHRoaXMgd29ya3Mgd2hlcmV2ZXIgdGhlIG5vZGUgaXM6IGlmIHRoZXJlJ3MgYXQgbGVhc3Qgb25lIGNsaWVudCByZWN0LCBpdCdzXG4gICAgICAvLyAgc29tZWhvdyBkaXNwbGF5ZWQ7IGl0IGFsc28gY292ZXJzIHRoZSBDU1MgJ2Rpc3BsYXk6IGNvbnRlbnRzJyBjYXNlIHdoZXJlIHRoZVxuICAgICAgLy8gIG5vZGUgaXRzZWxmIGlzIGhpZGRlbiBpbiBwbGFjZSBvZiBpdHMgY29udGVudHM7IGFuZCB0aGVyZSdzIG5vIG5lZWQgdG8gc2VhcmNoXG4gICAgICAvLyAgdXAgdGhlIGhpZXJhcmNoeSBlaXRoZXJcbiAgICAgIHJldHVybiAhbm9kZS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aDtcbiAgICB9XG5cbiAgICAvLyBFbHNlLCB0aGUgbm9kZSBpc24ndCBhdHRhY2hlZCB0byB0aGUgZG9jdW1lbnQsIHdoaWNoIG1lYW5zIHRoZSBgZ2V0Q2xpZW50UmVjdHMoKWBcbiAgICAvLyAgQVBJIHdpbGwgX19hbHdheXNfXyByZXR1cm4gemVybyByZWN0cyAodGhpcyBjYW4gaGFwcGVuLCBmb3IgZXhhbXBsZSwgaWYgUmVhY3RcbiAgICAvLyAgaXMgdXNlZCB0byByZW5kZXIgbm9kZXMgb250byBhIGRldGFjaGVkIHRyZWUsIGFzIGNvbmZpcm1lZCBpbiB0aGlzIHRocmVhZDpcbiAgICAvLyAgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy85MTE3I2lzc3VlY29tbWVudC0yODQyMjg4NzApXG4gICAgLy9cbiAgICAvLyBJdCBhbHNvIG1lYW5zIHRoYXQgZXZlbiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShub2RlKS5kaXNwbGF5IHdpbGwgcmV0dXJuIGB1bmRlZmluZWRgXG4gICAgLy8gIGJlY2F1c2Ugc3R5bGVzIGFyZSBvbmx5IGNvbXB1dGVkIGZvciBub2RlcyB0aGF0IGFyZSBpbiB0aGUgZG9jdW1lbnQuXG4gICAgLy9cbiAgICAvLyBOT1RFOiBUSElTIEhBUyBCRUVOIFRIRSBDQVNFIEZPUiBZRUFSUy4gSXQgaXMgbm90IG5ldywgbm9yIGlzIGl0IGNhdXNlZCBieSB0YWJiYWJsZVxuICAgIC8vICBzb21laG93LiBUaG91Z2ggaXQgd2FzIG5ldmVyIHN0YXRlZCBvZmZpY2lhbGx5LCBhbnlvbmUgd2hvIGhhcyBldmVyIHVzZWQgdGFiYmFibGVcbiAgICAvLyAgQVBJcyBvbiBub2RlcyBpbiBkZXRhY2hlZCBjb250YWluZXJzIGhhcyBhY3R1YWxseSBpbXBsaWNpdGx5IHVzZWQgdGFiYmFibGUgaW4gd2hhdFxuICAgIC8vICB3YXMgbGF0ZXIgKGFzIG9mIHY1LjIuMCBvbiBBcHIgOSwgMjAyMSkgY2FsbGVkIGBkaXNwbGF5Q2hlY2s9XCJub25lXCJgIG1vZGUgLS0gZXNzZW50aWFsbHlcbiAgICAvLyAgY29uc2lkZXJpbmcgX19ldmVyeXRoaW5nX18gdG8gYmUgdmlzaWJsZSBiZWNhdXNlIG9mIHRoZSBpbm5hYmlsaXR5IHRvIGRldGVybWluZSBzdHlsZXMuXG4gIH0gZWxzZSBpZiAoZGlzcGxheUNoZWNrID09PSAnbm9uLXplcm8tYXJlYScpIHtcbiAgICAvLyBOT1RFOiBFdmVuIHRob3VnaCB0aGlzIHRlc3RzIHRoYXQgdGhlIG5vZGUncyBjbGllbnQgcmVjdCBpcyBub24temVybyB0byBkZXRlcm1pbmVcbiAgICAvLyAgd2hldGhlciBpdCdzIGRpc3BsYXllZCwgYW5kIHRoYXQgYSBkZXRhY2hlZCBub2RlIHdpbGwgX19hbHdheXNfXyBoYXZlIGEgemVyby1hcmVhXG4gICAgLy8gIGNsaWVudCByZWN0LCB3ZSBkb24ndCBzcGVjaWFsLWNhc2UgZm9yIHdoZXRoZXIgdGhlIG5vZGUgaXMgYXR0YWNoZWQgb3Igbm90LiBJblxuICAgIC8vICB0aGlzIG1vZGUsIHdlIGRvIHdhbnQgdG8gY29uc2lkZXIgbm9kZXMgdGhhdCBoYXZlIGEgemVybyBhcmVhIHRvIGJlIGhpZGRlbiBhdCBhbGxcbiAgICAvLyAgdGltZXMsIGFuZCB0aGF0IGluY2x1ZGVzIGF0dGFjaGVkIG9yIG5vdC5cbiAgICByZXR1cm4gaXNaZXJvQXJlYShub2RlKTtcbiAgfVxuXG4gIC8vIHZpc2libGUsIGFzIGZhciBhcyB3ZSBjYW4gdGVsbCwgb3IgcGVyIGN1cnJlbnQgYGRpc3BsYXlDaGVja2AgbW9kZVxuICByZXR1cm4gZmFsc2U7XG59O1xuXG4vLyBmb3JtIGZpZWxkcyAobmVzdGVkKSBpbnNpZGUgYSBkaXNhYmxlZCBmaWVsZHNldCBhcmUgbm90IGZvY3VzYWJsZS90YWJiYWJsZVxuLy8gIHVubGVzcyB0aGV5IGFyZSBpbiB0aGUgX2ZpcnN0XyA8bGVnZW5kPiBlbGVtZW50IG9mIHRoZSB0b3AtbW9zdCBkaXNhYmxlZFxuLy8gIGZpZWxkc2V0XG5jb25zdCBpc0Rpc2FibGVkRnJvbUZpZWxkc2V0ID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgaWYgKC9eKElOUFVUfEJVVFRPTnxTRUxFQ1R8VEVYVEFSRUEpJC8udGVzdChub2RlLnRhZ05hbWUpKSB7XG4gICAgbGV0IHBhcmVudE5vZGUgPSBub2RlLnBhcmVudEVsZW1lbnQ7XG4gICAgLy8gY2hlY2sgaWYgYG5vZGVgIGlzIGNvbnRhaW5lZCBpbiBhIGRpc2FibGVkIDxmaWVsZHNldD5cbiAgICB3aGlsZSAocGFyZW50Tm9kZSkge1xuICAgICAgaWYgKHBhcmVudE5vZGUudGFnTmFtZSA9PT0gJ0ZJRUxEU0VUJyAmJiBwYXJlbnROb2RlLmRpc2FibGVkKSB7XG4gICAgICAgIC8vIGxvb2sgZm9yIHRoZSBmaXJzdCA8bGVnZW5kPiBhbW9uZyB0aGUgY2hpbGRyZW4gb2YgdGhlIGRpc2FibGVkIDxmaWVsZHNldD5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJlbnROb2RlLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgY2hpbGQgPSBwYXJlbnROb2RlLmNoaWxkcmVuLml0ZW0oaSk7XG4gICAgICAgICAgLy8gd2hlbiB0aGUgZmlyc3QgPGxlZ2VuZD4gKGluIGRvY3VtZW50IG9yZGVyKSBpcyBmb3VuZFxuICAgICAgICAgIGlmIChjaGlsZC50YWdOYW1lID09PSAnTEVHRU5EJykge1xuICAgICAgICAgICAgLy8gaWYgaXRzIHBhcmVudCA8ZmllbGRzZXQ+IGlzIG5vdCBuZXN0ZWQgaW4gYW5vdGhlciBkaXNhYmxlZCA8ZmllbGRzZXQ+LFxuICAgICAgICAgICAgLy8gcmV0dXJuIHdoZXRoZXIgYG5vZGVgIGlzIGEgZGVzY2VuZGFudCBvZiBpdHMgZmlyc3QgPGxlZ2VuZD5cbiAgICAgICAgICAgIHJldHVybiBtYXRjaGVzLmNhbGwocGFyZW50Tm9kZSwgJ2ZpZWxkc2V0W2Rpc2FibGVkXSAqJylcbiAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgIDogIWNoaWxkLmNvbnRhaW5zKG5vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyB0aGUgZGlzYWJsZWQgPGZpZWxkc2V0PiBjb250YWluaW5nIGBub2RlYCBoYXMgbm8gPGxlZ2VuZD5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBwYXJlbnROb2RlID0gcGFyZW50Tm9kZS5wYXJlbnRFbGVtZW50O1xuICAgIH1cbiAgfVxuXG4gIC8vIGVsc2UsIG5vZGUncyB0YWJiYWJsZS9mb2N1c2FibGUgc3RhdGUgc2hvdWxkIG5vdCBiZSBhZmZlY3RlZCBieSBhIGZpZWxkc2V0J3NcbiAgLy8gIGVuYWJsZWQvZGlzYWJsZWQgc3RhdGVcbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuY29uc3QgaXNOb2RlTWF0Y2hpbmdTZWxlY3RvckZvY3VzYWJsZSA9IGZ1bmN0aW9uIChvcHRpb25zLCBub2RlKSB7XG4gIGlmIChcbiAgICBub2RlLmRpc2FibGVkIHx8XG4gICAgaXNIaWRkZW5JbnB1dChub2RlKSB8fFxuICAgIGlzSGlkZGVuKG5vZGUsIG9wdGlvbnMpIHx8XG4gICAgLy8gRm9yIGEgZGV0YWlscyBlbGVtZW50IHdpdGggYSBzdW1tYXJ5LCB0aGUgc3VtbWFyeSBlbGVtZW50IGdldHMgdGhlIGZvY3VzXG4gICAgaXNEZXRhaWxzV2l0aFN1bW1hcnkobm9kZSkgfHxcbiAgICBpc0Rpc2FibGVkRnJvbUZpZWxkc2V0KG5vZGUpXG4gICkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmNvbnN0IGlzTm9kZU1hdGNoaW5nU2VsZWN0b3JUYWJiYWJsZSA9IGZ1bmN0aW9uIChvcHRpb25zLCBub2RlKSB7XG4gIGlmIChcbiAgICBpc05vblRhYmJhYmxlUmFkaW8obm9kZSkgfHxcbiAgICBnZXRUYWJpbmRleChub2RlKSA8IDAgfHxcbiAgICAhaXNOb2RlTWF0Y2hpbmdTZWxlY3RvckZvY3VzYWJsZShvcHRpb25zLCBub2RlKVxuICApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5jb25zdCBpc1ZhbGlkU2hhZG93Um9vdFRhYmJhYmxlID0gZnVuY3Rpb24gKHNoYWRvd0hvc3ROb2RlKSB7XG4gIGNvbnN0IHRhYkluZGV4ID0gcGFyc2VJbnQoc2hhZG93SG9zdE5vZGUuZ2V0QXR0cmlidXRlKCd0YWJpbmRleCcpLCAxMCk7XG4gIGlmIChpc05hTih0YWJJbmRleCkgfHwgdGFiSW5kZXggPj0gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIC8vIElmIGEgY3VzdG9tIGVsZW1lbnQgaGFzIGFuIGV4cGxpY2l0IG5lZ2F0aXZlIHRhYmluZGV4LFxuICAvLyBicm93c2VycyB3aWxsIG5vdCBhbGxvdyB0YWIgdGFyZ2V0aW5nIHNhaWQgZWxlbWVudCdzIGNoaWxkcmVuLlxuICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7QXJyYXkuPEVsZW1lbnR8Q2FuZGlkYXRlc1Njb3BlPn0gY2FuZGlkYXRlc1xuICogQHJldHVybnMgRWxlbWVudFtdXG4gKi9cbmNvbnN0IHNvcnRCeU9yZGVyID0gZnVuY3Rpb24gKGNhbmRpZGF0ZXMpIHtcbiAgY29uc3QgcmVndWxhclRhYmJhYmxlcyA9IFtdO1xuICBjb25zdCBvcmRlcmVkVGFiYmFibGVzID0gW107XG4gIGNhbmRpZGF0ZXMuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSwgaSkge1xuICAgIGNvbnN0IGlzU2NvcGUgPSAhIWl0ZW0uc2NvcGU7XG4gICAgY29uc3QgZWxlbWVudCA9IGlzU2NvcGUgPyBpdGVtLnNjb3BlIDogaXRlbTtcbiAgICBjb25zdCBjYW5kaWRhdGVUYWJpbmRleCA9IGdldFRhYmluZGV4KGVsZW1lbnQsIGlzU2NvcGUpO1xuICAgIGNvbnN0IGVsZW1lbnRzID0gaXNTY29wZSA/IHNvcnRCeU9yZGVyKGl0ZW0uY2FuZGlkYXRlcykgOiBlbGVtZW50O1xuICAgIGlmIChjYW5kaWRhdGVUYWJpbmRleCA9PT0gMCkge1xuICAgICAgaXNTY29wZVxuICAgICAgICA/IHJlZ3VsYXJUYWJiYWJsZXMucHVzaCguLi5lbGVtZW50cylcbiAgICAgICAgOiByZWd1bGFyVGFiYmFibGVzLnB1c2goZWxlbWVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9yZGVyZWRUYWJiYWJsZXMucHVzaCh7XG4gICAgICAgIGRvY3VtZW50T3JkZXI6IGksXG4gICAgICAgIHRhYkluZGV4OiBjYW5kaWRhdGVUYWJpbmRleCxcbiAgICAgICAgaXRlbTogaXRlbSxcbiAgICAgICAgaXNTY29wZTogaXNTY29wZSxcbiAgICAgICAgY29udGVudDogZWxlbWVudHMsXG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBvcmRlcmVkVGFiYmFibGVzXG4gICAgLnNvcnQoc29ydE9yZGVyZWRUYWJiYWJsZXMpXG4gICAgLnJlZHVjZSgoYWNjLCBzb3J0YWJsZSkgPT4ge1xuICAgICAgc29ydGFibGUuaXNTY29wZVxuICAgICAgICA/IGFjYy5wdXNoKC4uLnNvcnRhYmxlLmNvbnRlbnQpXG4gICAgICAgIDogYWNjLnB1c2goc29ydGFibGUuY29udGVudCk7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIFtdKVxuICAgIC5jb25jYXQocmVndWxhclRhYmJhYmxlcyk7XG59O1xuXG5jb25zdCB0YWJiYWJsZSA9IGZ1bmN0aW9uIChlbCwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICBsZXQgY2FuZGlkYXRlcztcbiAgaWYgKG9wdGlvbnMuZ2V0U2hhZG93Um9vdCkge1xuICAgIGNhbmRpZGF0ZXMgPSBnZXRDYW5kaWRhdGVzSXRlcmF0aXZlbHkoW2VsXSwgb3B0aW9ucy5pbmNsdWRlQ29udGFpbmVyLCB7XG4gICAgICBmaWx0ZXI6IGlzTm9kZU1hdGNoaW5nU2VsZWN0b3JUYWJiYWJsZS5iaW5kKG51bGwsIG9wdGlvbnMpLFxuICAgICAgZmxhdHRlbjogZmFsc2UsXG4gICAgICBnZXRTaGFkb3dSb290OiBvcHRpb25zLmdldFNoYWRvd1Jvb3QsXG4gICAgICBzaGFkb3dSb290RmlsdGVyOiBpc1ZhbGlkU2hhZG93Um9vdFRhYmJhYmxlLFxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGNhbmRpZGF0ZXMgPSBnZXRDYW5kaWRhdGVzKFxuICAgICAgZWwsXG4gICAgICBvcHRpb25zLmluY2x1ZGVDb250YWluZXIsXG4gICAgICBpc05vZGVNYXRjaGluZ1NlbGVjdG9yVGFiYmFibGUuYmluZChudWxsLCBvcHRpb25zKVxuICAgICk7XG4gIH1cbiAgcmV0dXJuIHNvcnRCeU9yZGVyKGNhbmRpZGF0ZXMpO1xufTtcblxuY29uc3QgZm9jdXNhYmxlID0gZnVuY3Rpb24gKGVsLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gIGxldCBjYW5kaWRhdGVzO1xuICBpZiAob3B0aW9ucy5nZXRTaGFkb3dSb290KSB7XG4gICAgY2FuZGlkYXRlcyA9IGdldENhbmRpZGF0ZXNJdGVyYXRpdmVseShbZWxdLCBvcHRpb25zLmluY2x1ZGVDb250YWluZXIsIHtcbiAgICAgIGZpbHRlcjogaXNOb2RlTWF0Y2hpbmdTZWxlY3RvckZvY3VzYWJsZS5iaW5kKG51bGwsIG9wdGlvbnMpLFxuICAgICAgZmxhdHRlbjogdHJ1ZSxcbiAgICAgIGdldFNoYWRvd1Jvb3Q6IG9wdGlvbnMuZ2V0U2hhZG93Um9vdCxcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBjYW5kaWRhdGVzID0gZ2V0Q2FuZGlkYXRlcyhcbiAgICAgIGVsLFxuICAgICAgb3B0aW9ucy5pbmNsdWRlQ29udGFpbmVyLFxuICAgICAgaXNOb2RlTWF0Y2hpbmdTZWxlY3RvckZvY3VzYWJsZS5iaW5kKG51bGwsIG9wdGlvbnMpXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBjYW5kaWRhdGVzO1xufTtcblxuY29uc3QgaXNUYWJiYWJsZSA9IGZ1bmN0aW9uIChub2RlLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBpZiAoIW5vZGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIG5vZGUgcHJvdmlkZWQnKTtcbiAgfVxuICBpZiAobWF0Y2hlcy5jYWxsKG5vZGUsIGNhbmRpZGF0ZVNlbGVjdG9yKSA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGlzTm9kZU1hdGNoaW5nU2VsZWN0b3JUYWJiYWJsZShvcHRpb25zLCBub2RlKTtcbn07XG5cbmNvbnN0IGZvY3VzYWJsZUNhbmRpZGF0ZVNlbGVjdG9yID0gLyogI19fUFVSRV9fICovIGNhbmRpZGF0ZVNlbGVjdG9yc1xuICAuY29uY2F0KCdpZnJhbWUnKVxuICAuam9pbignLCcpO1xuXG5jb25zdCBpc0ZvY3VzYWJsZSA9IGZ1bmN0aW9uIChub2RlLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBpZiAoIW5vZGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIG5vZGUgcHJvdmlkZWQnKTtcbiAgfVxuICBpZiAobWF0Y2hlcy5jYWxsKG5vZGUsIGZvY3VzYWJsZUNhbmRpZGF0ZVNlbGVjdG9yKSA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGlzTm9kZU1hdGNoaW5nU2VsZWN0b3JGb2N1c2FibGUob3B0aW9ucywgbm9kZSk7XG59O1xuXG5leHBvcnQgeyB0YWJiYWJsZSwgZm9jdXNhYmxlLCBpc1RhYmJhYmxlLCBpc0ZvY3VzYWJsZSB9O1xuIiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5leHBvcnQgdmFyIEVOVEVSID0gJ0VudGVyJztcbmV4cG9ydCB2YXIgU1BBQ0UgPSAnICc7XG5leHBvcnQgdmFyIEVTQ0FQRSA9ICdFc2NhcGUnO1xuZXhwb3J0IHZhciBUQUIgPSAnVGFiJztcbmV4cG9ydCB2YXIgQkFDS1NQQUNFID0gJ0JhY2tzcGFjZSc7XG5leHBvcnQgdmFyIEYyID0gJ0YyJztcbmV4cG9ydCB2YXIgQUxUID0gJ0FsdCc7XG5leHBvcnQgdmFyIFNISUZUID0gJ1NoaWZ0JztcbmV4cG9ydCB2YXIgQ1RSTCA9ICdDb250cm9sJztcbmV4cG9ydCB2YXIgTUVUQSA9ICdNZXRhJzsgLy8gV2luZG93cywgQ29tbWFuZCwgT3B0aW9uXG5cbmV4cG9ydCB2YXIgQVJST1dfRE9XTiA9ICdBcnJvd0Rvd24nO1xuZXhwb3J0IHZhciBBUlJPV19VUCA9ICdBcnJvd1VwJztcbmV4cG9ydCB2YXIgQVJST1dfTEVGVCA9ICdBcnJvd0xlZnQnO1xuZXhwb3J0IHZhciBBUlJPV19SSUdIVCA9ICdBcnJvd1JpZ2h0JztcbmV4cG9ydCB2YXIgUEFHRV9VUCA9ICdQYWdlVXAnO1xuZXhwb3J0IHZhciBQQUdFX0RPV04gPSAnUGFnZURvd24nO1xuZXhwb3J0IHZhciBFTkQgPSAnRW5kJztcbmV4cG9ydCB2YXIgSE9NRSA9ICdIb21lJztcbmV4cG9ydCB2YXIga2V5cztcblxuKGZ1bmN0aW9uIChrZXlzKSB7XG4gIGtleXNbXCJFTlRFUlwiXSA9IFwiRW50ZXJcIjtcbiAga2V5c1tcIlNQQUNFXCJdID0gXCIgXCI7XG4gIGtleXNbXCJFU0NBUEVcIl0gPSBcIkVzY2FwZVwiO1xuICBrZXlzW1wiVEFCXCJdID0gXCJUYWJcIjtcbiAga2V5c1tcIkJBQ0tTUEFDRVwiXSA9IFwiQmFja3NwYWNlXCI7XG4gIGtleXNbXCJGMlwiXSA9IFwiRjJcIjtcbiAga2V5c1tcIkFMVFwiXSA9IFwiQWx0XCI7XG4gIGtleXNbXCJTSElGVFwiXSA9IFwiU2hpZnRcIjtcbiAga2V5c1tcIkNUUkxcIl0gPSBcIkNvbnRyb2xcIjtcbiAga2V5c1tcIk1FVEFcIl0gPSBcIk1ldGFcIjtcbiAga2V5c1tcIkFSUk9XX0RPV05cIl0gPSBcIkFycm93RG93blwiO1xuICBrZXlzW1wiQVJST1dfVVBcIl0gPSBcIkFycm93VXBcIjtcbiAga2V5c1tcIkFSUk9XX0xFRlRcIl0gPSBcIkFycm93TGVmdFwiO1xuICBrZXlzW1wiQVJST1dfUklHSFRcIl0gPSBcIkFycm93UmlnaHRcIjtcbiAga2V5c1tcIlBBR0VfVVBcIl0gPSBcIlBhZ2VVcFwiO1xuICBrZXlzW1wiUEFHRV9ET1dOXCJdID0gXCJQYWdlRG93blwiO1xuICBrZXlzW1wiRU5EXCJdID0gXCJFbmRcIjtcbiAga2V5c1tcIkhPTUVcIl0gPSBcIkhvbWVcIjtcbn0pKGtleXMgfHwgKGtleXMgPSB7fSkpOyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vKipcbiAqIFRoZXNlIGtleXMgYXJlIHVzZWQgZm9yIG5hdmlnYXRpbmcgY2FzY2FkaW5nIG1lbnUgVUkgY29tcG9uZW50cy5cbiAqXG4gKiBBUlJPV19ET1dOOiBTZWxlY3QgdGhlIG5leHQgaXRlbSBpbiB0aGUgbGlzdC5cbiAqIEFSUk9XX0xFRlQ6IFNob3cgdGhlIHByZXZpb3VzIG1lbnUuXG4gKiBBUlJPV19SSUdIVDogU2hvdyB0aGUgbmV4dCBtZW51IGZvciB0aGUgc2VsZWN0ZWQgaXRlbS5cbiAqIEFSUk9XX1VQOiBTZWxlY3QgdGhlIHByZXZpb3VzIGl0ZW0gaW4gdGhlIGxpc3QuXG4gKiBFU0M6IERlc2VsZWN0IHRoZSBjdXJyZW50IHNlbGVjdGlvbiBhbmQgaGlkZSB0aGUgbGlzdC5cbiAqIFRBQjogTm9ybWFsIHRhYmJpbmcgbmF2aWdhdGlvbiBpcyBzdGlsbCBzdXBwb3J0ZWQuXG4gKi9cbmltcG9ydCB7IEFSUk9XX0RPV04sIEFSUk9XX0xFRlQsIEFSUk9XX1JJR0hULCBBUlJPV19VUCwgRVNDQVBFLCBUQUIgfSBmcm9tICcuLi9rZXlzJztcbmV4cG9ydCB2YXIgY2FzY2FkaW5nTWVudUtleXMgPSB7XG4gIEFSUk9XX0RPV046IEFSUk9XX0RPV04sXG4gIEFSUk9XX0xFRlQ6IEFSUk9XX0xFRlQsXG4gIEFSUk9XX1JJR0hUOiBBUlJPV19SSUdIVCxcbiAgQVJST1dfVVA6IEFSUk9XX1VQLFxuICBFU0NBUEU6IEVTQ0FQRSxcbiAgVEFCOiBUQUJcbn07IiwgIi8vIFVuaXF1ZSBJRCBjcmVhdGlvbiByZXF1aXJlcyBhIGhpZ2ggcXVhbGl0eSByYW5kb20gIyBnZW5lcmF0b3IuIEluIHRoZSBicm93c2VyIHdlIHRoZXJlZm9yZVxuLy8gcmVxdWlyZSB0aGUgY3J5cHRvIEFQSSBhbmQgZG8gbm90IHN1cHBvcnQgYnVpbHQtaW4gZmFsbGJhY2sgdG8gbG93ZXIgcXVhbGl0eSByYW5kb20gbnVtYmVyXG4vLyBnZW5lcmF0b3JzIChsaWtlIE1hdGgucmFuZG9tKCkpLlxudmFyIGdldFJhbmRvbVZhbHVlcztcbnZhciBybmRzOCA9IG5ldyBVaW50OEFycmF5KDE2KTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJuZygpIHtcbiAgLy8gbGF6eSBsb2FkIHNvIHRoYXQgZW52aXJvbm1lbnRzIHRoYXQgbmVlZCB0byBwb2x5ZmlsbCBoYXZlIGEgY2hhbmNlIHRvIGRvIHNvXG4gIGlmICghZ2V0UmFuZG9tVmFsdWVzKSB7XG4gICAgLy8gZ2V0UmFuZG9tVmFsdWVzIG5lZWRzIHRvIGJlIGludm9rZWQgaW4gYSBjb250ZXh0IHdoZXJlIFwidGhpc1wiIGlzIGEgQ3J5cHRvIGltcGxlbWVudGF0aW9uLiBBbHNvLFxuICAgIC8vIGZpbmQgdGhlIGNvbXBsZXRlIGltcGxlbWVudGF0aW9uIG9mIGNyeXB0byAobXNDcnlwdG8pIG9uIElFMTEuXG4gICAgZ2V0UmFuZG9tVmFsdWVzID0gdHlwZW9mIGNyeXB0byAhPT0gJ3VuZGVmaW5lZCcgJiYgY3J5cHRvLmdldFJhbmRvbVZhbHVlcyAmJiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzLmJpbmQoY3J5cHRvKSB8fCB0eXBlb2YgbXNDcnlwdG8gIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBtc0NyeXB0by5nZXRSYW5kb21WYWx1ZXMgPT09ICdmdW5jdGlvbicgJiYgbXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzLmJpbmQobXNDcnlwdG8pO1xuXG4gICAgaWYgKCFnZXRSYW5kb21WYWx1ZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY3J5cHRvLmdldFJhbmRvbVZhbHVlcygpIG5vdCBzdXBwb3J0ZWQuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdXVpZGpzL3V1aWQjZ2V0cmFuZG9tdmFsdWVzLW5vdC1zdXBwb3J0ZWQnKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZ2V0UmFuZG9tVmFsdWVzKHJuZHM4KTtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgL14oPzpbMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMS01XVswLTlhLWZdezN9LVs4OWFiXVswLTlhLWZdezN9LVswLTlhLWZdezEyfXwwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDApJC9pOyIsICJpbXBvcnQgUkVHRVggZnJvbSAnLi9yZWdleC5qcyc7XG5cbmZ1bmN0aW9uIHZhbGlkYXRlKHV1aWQpIHtcbiAgcmV0dXJuIHR5cGVvZiB1dWlkID09PSAnc3RyaW5nJyAmJiBSRUdFWC50ZXN0KHV1aWQpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB2YWxpZGF0ZTsiLCAiaW1wb3J0IHZhbGlkYXRlIGZyb20gJy4vdmFsaWRhdGUuanMnO1xuLyoqXG4gKiBDb252ZXJ0IGFycmF5IG9mIDE2IGJ5dGUgdmFsdWVzIHRvIFVVSUQgc3RyaW5nIGZvcm1hdCBvZiB0aGUgZm9ybTpcbiAqIFhYWFhYWFhYLVhYWFgtWFhYWC1YWFhYLVhYWFhYWFhYWFhYWFxuICovXG5cbnZhciBieXRlVG9IZXggPSBbXTtcblxuZm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7ICsraSkge1xuICBieXRlVG9IZXgucHVzaCgoaSArIDB4MTAwKS50b1N0cmluZygxNikuc3Vic3RyKDEpKTtcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5KGFycikge1xuICB2YXIgb2Zmc2V0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAwO1xuICAvLyBOb3RlOiBCZSBjYXJlZnVsIGVkaXRpbmcgdGhpcyBjb2RlISAgSXQncyBiZWVuIHR1bmVkIGZvciBwZXJmb3JtYW5jZVxuICAvLyBhbmQgd29ya3MgaW4gd2F5cyB5b3UgbWF5IG5vdCBleHBlY3QuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdXVpZGpzL3V1aWQvcHVsbC80MzRcbiAgdmFyIHV1aWQgPSAoYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAwXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDFdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMl1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAzXV0gKyAnLScgKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDRdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgNV1dICsgJy0nICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA2XV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDddXSArICctJyArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgOF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA5XV0gKyAnLScgKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDEwXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDExXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDEyXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDEzXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDE0XV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDE1XV0pLnRvTG93ZXJDYXNlKCk7IC8vIENvbnNpc3RlbmN5IGNoZWNrIGZvciB2YWxpZCBVVUlELiAgSWYgdGhpcyB0aHJvd3MsIGl0J3MgbGlrZWx5IGR1ZSB0byBvbmVcbiAgLy8gb2YgdGhlIGZvbGxvd2luZzpcbiAgLy8gLSBPbmUgb3IgbW9yZSBpbnB1dCBhcnJheSB2YWx1ZXMgZG9uJ3QgbWFwIHRvIGEgaGV4IG9jdGV0IChsZWFkaW5nIHRvXG4gIC8vIFwidW5kZWZpbmVkXCIgaW4gdGhlIHV1aWQpXG4gIC8vIC0gSW52YWxpZCBpbnB1dCB2YWx1ZXMgZm9yIHRoZSBSRkMgYHZlcnNpb25gIG9yIGB2YXJpYW50YCBmaWVsZHNcblxuICBpZiAoIXZhbGlkYXRlKHV1aWQpKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKCdTdHJpbmdpZmllZCBVVUlEIGlzIGludmFsaWQnKTtcbiAgfVxuXG4gIHJldHVybiB1dWlkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBzdHJpbmdpZnk7IiwgImltcG9ydCBybmcgZnJvbSAnLi9ybmcuanMnO1xuaW1wb3J0IHN0cmluZ2lmeSBmcm9tICcuL3N0cmluZ2lmeS5qcyc7IC8vICoqYHYxKClgIC0gR2VuZXJhdGUgdGltZS1iYXNlZCBVVUlEKipcbi8vXG4vLyBJbnNwaXJlZCBieSBodHRwczovL2dpdGh1Yi5jb20vTGlvc0svVVVJRC5qc1xuLy8gYW5kIGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvbGlicmFyeS91dWlkLmh0bWxcblxudmFyIF9ub2RlSWQ7XG5cbnZhciBfY2xvY2tzZXE7IC8vIFByZXZpb3VzIHV1aWQgY3JlYXRpb24gdGltZVxuXG5cbnZhciBfbGFzdE1TZWNzID0gMDtcbnZhciBfbGFzdE5TZWNzID0gMDsgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS91dWlkanMvdXVpZCBmb3IgQVBJIGRldGFpbHNcblxuZnVuY3Rpb24gdjEob3B0aW9ucywgYnVmLCBvZmZzZXQpIHtcbiAgdmFyIGkgPSBidWYgJiYgb2Zmc2V0IHx8IDA7XG4gIHZhciBiID0gYnVmIHx8IG5ldyBBcnJheSgxNik7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICB2YXIgbm9kZSA9IG9wdGlvbnMubm9kZSB8fCBfbm9kZUlkO1xuICB2YXIgY2xvY2tzZXEgPSBvcHRpb25zLmNsb2Nrc2VxICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmNsb2Nrc2VxIDogX2Nsb2Nrc2VxOyAvLyBub2RlIGFuZCBjbG9ja3NlcSBuZWVkIHRvIGJlIGluaXRpYWxpemVkIHRvIHJhbmRvbSB2YWx1ZXMgaWYgdGhleSdyZSBub3RcbiAgLy8gc3BlY2lmaWVkLiAgV2UgZG8gdGhpcyBsYXppbHkgdG8gbWluaW1pemUgaXNzdWVzIHJlbGF0ZWQgdG8gaW5zdWZmaWNpZW50XG4gIC8vIHN5c3RlbSBlbnRyb3B5LiAgU2VlICMxODlcblxuICBpZiAobm9kZSA9PSBudWxsIHx8IGNsb2Nrc2VxID09IG51bGwpIHtcbiAgICB2YXIgc2VlZEJ5dGVzID0gb3B0aW9ucy5yYW5kb20gfHwgKG9wdGlvbnMucm5nIHx8IHJuZykoKTtcblxuICAgIGlmIChub2RlID09IG51bGwpIHtcbiAgICAgIC8vIFBlciA0LjUsIGNyZWF0ZSBhbmQgNDgtYml0IG5vZGUgaWQsICg0NyByYW5kb20gYml0cyArIG11bHRpY2FzdCBiaXQgPSAxKVxuICAgICAgbm9kZSA9IF9ub2RlSWQgPSBbc2VlZEJ5dGVzWzBdIHwgMHgwMSwgc2VlZEJ5dGVzWzFdLCBzZWVkQnl0ZXNbMl0sIHNlZWRCeXRlc1szXSwgc2VlZEJ5dGVzWzRdLCBzZWVkQnl0ZXNbNV1dO1xuICAgIH1cblxuICAgIGlmIChjbG9ja3NlcSA9PSBudWxsKSB7XG4gICAgICAvLyBQZXIgNC4yLjIsIHJhbmRvbWl6ZSAoMTQgYml0KSBjbG9ja3NlcVxuICAgICAgY2xvY2tzZXEgPSBfY2xvY2tzZXEgPSAoc2VlZEJ5dGVzWzZdIDw8IDggfCBzZWVkQnl0ZXNbN10pICYgMHgzZmZmO1xuICAgIH1cbiAgfSAvLyBVVUlEIHRpbWVzdGFtcHMgYXJlIDEwMCBuYW5vLXNlY29uZCB1bml0cyBzaW5jZSB0aGUgR3JlZ29yaWFuIGVwb2NoLFxuICAvLyAoMTU4Mi0xMC0xNSAwMDowMCkuICBKU051bWJlcnMgYXJlbid0IHByZWNpc2UgZW5vdWdoIGZvciB0aGlzLCBzb1xuICAvLyB0aW1lIGlzIGhhbmRsZWQgaW50ZXJuYWxseSBhcyAnbXNlY3MnIChpbnRlZ2VyIG1pbGxpc2Vjb25kcykgYW5kICduc2VjcydcbiAgLy8gKDEwMC1uYW5vc2Vjb25kcyBvZmZzZXQgZnJvbSBtc2Vjcykgc2luY2UgdW5peCBlcG9jaCwgMTk3MC0wMS0wMSAwMDowMC5cblxuXG4gIHZhciBtc2VjcyA9IG9wdGlvbnMubXNlY3MgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubXNlY3MgOiBEYXRlLm5vdygpOyAvLyBQZXIgNC4yLjEuMiwgdXNlIGNvdW50IG9mIHV1aWQncyBnZW5lcmF0ZWQgZHVyaW5nIHRoZSBjdXJyZW50IGNsb2NrXG4gIC8vIGN5Y2xlIHRvIHNpbXVsYXRlIGhpZ2hlciByZXNvbHV0aW9uIGNsb2NrXG5cbiAgdmFyIG5zZWNzID0gb3B0aW9ucy5uc2VjcyAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5uc2VjcyA6IF9sYXN0TlNlY3MgKyAxOyAvLyBUaW1lIHNpbmNlIGxhc3QgdXVpZCBjcmVhdGlvbiAoaW4gbXNlY3MpXG5cbiAgdmFyIGR0ID0gbXNlY3MgLSBfbGFzdE1TZWNzICsgKG5zZWNzIC0gX2xhc3ROU2VjcykgLyAxMDAwMDsgLy8gUGVyIDQuMi4xLjIsIEJ1bXAgY2xvY2tzZXEgb24gY2xvY2sgcmVncmVzc2lvblxuXG4gIGlmIChkdCA8IDAgJiYgb3B0aW9ucy5jbG9ja3NlcSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY2xvY2tzZXEgPSBjbG9ja3NlcSArIDEgJiAweDNmZmY7XG4gIH0gLy8gUmVzZXQgbnNlY3MgaWYgY2xvY2sgcmVncmVzc2VzIChuZXcgY2xvY2tzZXEpIG9yIHdlJ3ZlIG1vdmVkIG9udG8gYSBuZXdcbiAgLy8gdGltZSBpbnRlcnZhbFxuXG5cbiAgaWYgKChkdCA8IDAgfHwgbXNlY3MgPiBfbGFzdE1TZWNzKSAmJiBvcHRpb25zLm5zZWNzID09PSB1bmRlZmluZWQpIHtcbiAgICBuc2VjcyA9IDA7XG4gIH0gLy8gUGVyIDQuMi4xLjIgVGhyb3cgZXJyb3IgaWYgdG9vIG1hbnkgdXVpZHMgYXJlIHJlcXVlc3RlZFxuXG5cbiAgaWYgKG5zZWNzID49IDEwMDAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwidXVpZC52MSgpOiBDYW4ndCBjcmVhdGUgbW9yZSB0aGFuIDEwTSB1dWlkcy9zZWNcIik7XG4gIH1cblxuICBfbGFzdE1TZWNzID0gbXNlY3M7XG4gIF9sYXN0TlNlY3MgPSBuc2VjcztcbiAgX2Nsb2Nrc2VxID0gY2xvY2tzZXE7IC8vIFBlciA0LjEuNCAtIENvbnZlcnQgZnJvbSB1bml4IGVwb2NoIHRvIEdyZWdvcmlhbiBlcG9jaFxuXG4gIG1zZWNzICs9IDEyMjE5MjkyODAwMDAwOyAvLyBgdGltZV9sb3dgXG5cbiAgdmFyIHRsID0gKChtc2VjcyAmIDB4ZmZmZmZmZikgKiAxMDAwMCArIG5zZWNzKSAlIDB4MTAwMDAwMDAwO1xuICBiW2krK10gPSB0bCA+Pj4gMjQgJiAweGZmO1xuICBiW2krK10gPSB0bCA+Pj4gMTYgJiAweGZmO1xuICBiW2krK10gPSB0bCA+Pj4gOCAmIDB4ZmY7XG4gIGJbaSsrXSA9IHRsICYgMHhmZjsgLy8gYHRpbWVfbWlkYFxuXG4gIHZhciB0bWggPSBtc2VjcyAvIDB4MTAwMDAwMDAwICogMTAwMDAgJiAweGZmZmZmZmY7XG4gIGJbaSsrXSA9IHRtaCA+Pj4gOCAmIDB4ZmY7XG4gIGJbaSsrXSA9IHRtaCAmIDB4ZmY7IC8vIGB0aW1lX2hpZ2hfYW5kX3ZlcnNpb25gXG5cbiAgYltpKytdID0gdG1oID4+PiAyNCAmIDB4ZiB8IDB4MTA7IC8vIGluY2x1ZGUgdmVyc2lvblxuXG4gIGJbaSsrXSA9IHRtaCA+Pj4gMTYgJiAweGZmOyAvLyBgY2xvY2tfc2VxX2hpX2FuZF9yZXNlcnZlZGAgKFBlciA0LjIuMiAtIGluY2x1ZGUgdmFyaWFudClcblxuICBiW2krK10gPSBjbG9ja3NlcSA+Pj4gOCB8IDB4ODA7IC8vIGBjbG9ja19zZXFfbG93YFxuXG4gIGJbaSsrXSA9IGNsb2Nrc2VxICYgMHhmZjsgLy8gYG5vZGVgXG5cbiAgZm9yICh2YXIgbiA9IDA7IG4gPCA2OyArK24pIHtcbiAgICBiW2kgKyBuXSA9IG5vZGVbbl07XG4gIH1cblxuICByZXR1cm4gYnVmIHx8IHN0cmluZ2lmeShiKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdjE7IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyB2MSBhcyB1dWlkdjEgfSBmcm9tICd1dWlkJztcbmltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIGlkcy5cbiAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gZ2VuZXJhdGUgdW5pcXVlLCBidXQgcHJlZGljdGFibGUgaWRzIHRvIHBhaXIgbGFiZWxzXG4gKiB3aXRoIHRoZWlyIGlucHV0cy4gSXQgdGFrZXMgYW4gb3B0aW9uYWwgcHJlZml4IGFzIGEgcGFyYW1ldGVyLiBJZiB5b3UgZG9uJ3RcbiAqIHNwZWNpZnkgaXQsIGl0IGdlbmVyYXRlcyBhIHJhbmRvbSBpZCBwcmVmaXguIElmIHlvdSBzcGVjaWZ5IGEgY3VzdG9tIHByZWZpeFxuICogaXQgc2hvdWxkIGJlZ2luIHdpdGggYW4gbGV0dGVyIHRvIGJlIEhUTUw0IGNvbXBsaWFudC5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaHRtbElkR2VuZXJhdG9yKCkge1xuICB2YXIgaWRQcmVmaXggPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6ICcnO1xuICB2YXIgc3RhdGljVXVpZCA9IHV1aWR2MSgpO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBpZFN1ZmZpeCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogJyc7XG4gICAgdmFyIHByZWZpeCA9IFwiXCIuY29uY2F0KGlkUHJlZml4KS5jb25jYXQoaWRQcmVmaXggIT09ICcnID8gJ18nIDogJ2knKTtcbiAgICB2YXIgc3VmZml4ID0gaWRTdWZmaXggPyBcIl9cIi5jb25jYXQoaWRTdWZmaXgpIDogJyc7XG4gICAgcmV0dXJuIFwiXCIuY29uY2F0KHByZWZpeCkuY29uY2F0KHN1ZmZpeCA/IHN0YXRpY1V1aWQgOiB1dWlkdjEoKSkuY29uY2F0KHN1ZmZpeCk7XG4gIH07XG59XG4vKipcbiAqIEdlbmVyYXRlcyBhIG1lbW9pemVkIElEIHRoYXQgcmVtYWlucyBzdGF0aWMgdW50aWwgY29tcG9uZW50IHVubW91bnQuXG4gKiBUaGlzIHByZXZlbnRzIElEcyBmcm9tIGJlaW5nIHJlLXJhbmRvbWl6ZWQgb24gZXZlcnkgY29tcG9uZW50IHVwZGF0ZS5cbiAqL1xuXG5leHBvcnQgdmFyIHVzZUdlbmVyYXRlZEh0bWxJZCA9IGZ1bmN0aW9uIHVzZUdlbmVyYXRlZEh0bWxJZCgpIHtcbiAgdmFyIF9yZWYgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9LFxuICAgICAgcHJlZml4ID0gX3JlZi5wcmVmaXgsXG4gICAgICBzdWZmaXggPSBfcmVmLnN1ZmZpeCxcbiAgICAgIGNvbmRpdGlvbmFsSWQgPSBfcmVmLmNvbmRpdGlvbmFsSWQ7XG5cbiAgcmV0dXJuIHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBjb25kaXRpb25hbElkIHx8IGh0bWxJZEdlbmVyYXRvcihwcmVmaXgpKHN1ZmZpeCk7XG4gIH0sIFtjb25kaXRpb25hbElkLCBwcmVmaXgsIHN1ZmZpeF0pO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmV4cG9ydCB2YXIgTEVGVF9BTElHTk1FTlQgPSAnbGVmdCc7XG5leHBvcnQgdmFyIFJJR0hUX0FMSUdOTUVOVCA9ICdyaWdodCc7XG5leHBvcnQgdmFyIENFTlRFUl9BTElHTk1FTlQgPSAnY2VudGVyJzsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmV4cG9ydCB2YXIgYXNzZXJ0TmV2ZXIgPSBmdW5jdGlvbiBhc3NlcnROZXZlcih4KSB7XG4gIHRocm93IG5ldyBFcnJvcihcIlVuZXhwZWN0ZWQgdmFsdWUgXCIuY29uY2F0KHgpKTtcbn07IC8vIHV0aWxpdHkgdHlwZXM6XG5cbi8qKlxuICogWE9SIGZvciBzb21lIHByb3BlcnRpZXMgYXBwbGllZCB0byBhIHR5cGVcbiAqIChYT1IgaXMgb25lIG9mIHRoZXNlIGJ1dCBub3QgYm90aCBvciBuZWl0aGVyKVxuICpcbiAqIFVzYWdlOiBPbmVPZjx0eXBlVG9FeHRlbmQsIG9uZSB8IGJ1dCB8IG5vdCB8IG11bHRpcGxlIHwgb2YgfCB0aGVzZSB8IGFyZSB8IHJlcXVpcmVkPlxuICpcbiAqIFRvIHJlcXVpcmUgYXJpYS1sYWJlbCBvciBhcmlhLWxhYmVsbGVkYnkgYnV0IG5vdCBib3RoXG4gKiBFeGFtcGxlOiBPbmVPZjxUeXBlLCAnYXJpYS1sYWJlbCcgfCAnYXJpYS1sYWJlbGxlZGJ5Jz5cbiAqL1xuXG4vKipcbiAqIFdyYXBzIE9iamVjdC5rZXlzIHdpdGggcHJvcGVyIHR5cGVzY3JpcHQgZGVmaW5pdGlvbiBvZiB0aGUgcmVzdWx0aW5nIGFycmF5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBrZXlzT2Yob2JqKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopO1xufVxuLyoqXG4gKiBMaWtlIGBrZXlvZiB0eXBlb2ZgLCBidXQgZm9yIGdldHRpbmcgdmFsdWVzIGluc3RlYWQgb2Yga2V5c1xuICogVmFsdWVPZjx0eXBlb2Yge2tleTE6ICd2YWx1ZTEnLCBrZXkyOiAndmFsdWUyJ30+XG4gKiBSZXN1bHRzIGluIGAndmFsdWUxJyB8ICd2YWx1ZTInYFxuICovIiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5leHBvcnQgdmFyIGJyZWFrcG9pbnQgPSB7XG4gIHhsOiAxMjAwLFxuICBsOiA5OTIsXG4gIG06IDc2OCxcbiAgczogNTc1LFxuICB4czogMFxufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IGtleXNPZiB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvY29tbW9uJztcbmltcG9ydCB7IGJyZWFrcG9pbnQgfSBmcm9tICcuLi8uLi90aGVtZXMvYW1zdGVyZGFtL2dsb2JhbF9zdHlsaW5nL3ZhcmlhYmxlcy9fYnJlYWtwb2ludCc7XG5leHBvcnQgdmFyIEJSRUFLUE9JTlRTID0gYnJlYWtwb2ludDtcbmV4cG9ydCB2YXIgQlJFQUtQT0lOVF9LRVlTID0ga2V5c09mKEJSRUFLUE9JTlRTKTtcbi8qKlxuICogR2l2ZW4gdGhlIGN1cnJlbnQgYHdpZHRoYCBhbmQgYW4gb2JqZWN0IG9mIGBFdWlCcmVha3BvaW50c2AsXG4gKiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHN0cmluZyB0aGF0IGlzIHRoZSBuYW1lIG9mIHRoZSBicmVha3BvaW50IGtleVxuICogdGhhdCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHdpZHRoXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIENhbiBlaXRoZXIgYmUgdGhlIGZ1bGwgd2luZG93IHdpZHRoIG9yIGFueSB3aWR0aFxuICogQHBhcmFtIHtFdWlCcmVha3BvaW50c30gYnJlYWtwb2ludHMgQW4gb2JqZWN0IHdpdGgga2V5cyBmb3Igc2l6aW5nIGFuZCB2YWx1ZXMgZm9yIG1pbmltdW0gd2lkdGhcbiAqIEByZXR1cm5zIHtzdHJpbmcgfCB1bmRlZmluZWR9IE5hbWUgb2YgdGhlIGJyZWFrcG9pbnQga2V5IG9yIGB1bmRlZmluZWRgIGlmIGEga2V5IGRvZXNuJ3QgZXhpc3RcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QnJlYWtwb2ludCh3aWR0aCkge1xuICB2YXIgYnJlYWtwb2ludHMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IEJSRUFLUE9JTlRTO1xuICAvLyBGaW5kIHRoZSBicmVha3BvaW50IChrZXkpIHdob3NlIHZhbHVlIGlzIDw9IHdpbmRvd1dpZHRoIHN0YXJ0aW5nIHdpdGggbGFyZ2VzdCBmaXJzdFxuICByZXR1cm4gQlJFQUtQT0lOVF9LRVlTLmZpbmQoZnVuY3Rpb24gKGtleSkge1xuICAgIHJldHVybiBicmVha3BvaW50c1trZXldIDw9IHdpZHRoO1xuICB9KTtcbn1cbi8qKlxuICogR2l2ZW4gdGhlIGN1cnJlbnQgYHdpZHRoYCBhbmQgYSBtYXggYnJlYWtwb2ludCBrZXksXG4gKiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBvciBmYWxzZSBpZiB0aGUgYHdpZHRoYCBmYWxscyB3aXRoaW4gdGhlIG1heFxuICogYnJlYWtwb2ludCBvciBhbnkgYnJlYWtwb2ludHMgYmVsb3dcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gd2lkdGggQ2FuIGVpdGhlciBiZSB0aGUgZnVsbCB3aW5kb3cgd2lkdGggb3IgYW55IHdpZHRoXG4gKiBAcGFyYW0ge0V1aUJyZWFrcG9pbnRTaXplIHwgbnVtYmVyfSBtYXggVGhlIG5hbWVkIGJyZWFrcG9pbnQgb3IgY3VzdG9tIG51bWJlciB0byBjaGVjayBhZ2FpbnN0XG4gKiBAcGFyYW0ge0V1aUJyZWFrcG9pbnRzfSBicmVha3BvaW50cyBBbiBvYmplY3Qgd2l0aCBrZXlzIGZvciBzaXppbmcgYW5kIHZhbHVlcyBmb3IgbWluaW11bSB3aWR0aFxuICogQHJldHVybnMge2Jvb2xlYW59IFdpbGwgcmV0dXJuIGBmYWxzZWAgaWYgaXQgY2FuJ3QgZmluZCBhIHZhbHVlIGZvciB0aGUgYG1heGAgYnJlYWtwb2ludFxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBpc1dpdGhpbk1heEJyZWFrcG9pbnQod2lkdGgsIG1heCkge1xuICB2YXIgYnJlYWtwb2ludHMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IEJSRUFLUE9JTlRTO1xuXG4gIGlmICh0eXBlb2YgbWF4ID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiB3aWR0aCA8PSBtYXg7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGN1cnJlbnRCcmVha3BvaW50ID0gZ2V0QnJlYWtwb2ludCh3aWR0aCwgYnJlYWtwb2ludHMpO1xuICAgIHJldHVybiBjdXJyZW50QnJlYWtwb2ludCA/IGJyZWFrcG9pbnRzW2N1cnJlbnRCcmVha3BvaW50XSA8PSBicmVha3BvaW50c1ttYXhdIDogZmFsc2U7XG4gIH1cbn1cbi8qKlxuICogR2l2ZW4gdGhlIGN1cnJlbnQgYHdpZHRoYCBhbmQgYSBtaW4gYnJlYWtwb2ludCBrZXksXG4gKiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBvciBmYWxzZSBpZiB0aGUgYHdpZHRoYCBmYWxscyB3aXRoaW4gdGhlIG1pblxuICogYnJlYWtwb2ludCBvciBhbnkgYnJlYWtwb2ludHMgYWJvdmVcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gd2lkdGggQ2FuIGVpdGhlciBiZSB0aGUgZnVsbCB3aW5kb3cgd2lkdGggb3IgYW55IHdpZHRoXG4gKiBAcGFyYW0ge0V1aUJyZWFrcG9pbnRTaXplIHwgbnVtYmVyfSBtaW4gVGhlIG5hbWVkIGJyZWFrcG9pbnQgb3IgY3VzdG9tIG51bWJlciB0byBjaGVjayBhZ2FpbnN0XG4gKiBAcGFyYW0ge0V1aUJyZWFrcG9pbnRzfSBicmVha3BvaW50cyBBbiBvYmplY3Qgd2l0aCBrZXlzIGZvciBzaXppbmcgYW5kIHZhbHVlcyBmb3IgbWluaW11bSB3aWR0aFxuICogQHJldHVybnMge2Jvb2xlYW59IFdpbGwgcmV0dXJuIGBmYWxzZWAgaWYgaXQgY2FuJ3QgZmluZCBhIHZhbHVlIGZvciB0aGUgYG1pbmAgYnJlYWtwb2ludFxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBpc1dpdGhpbk1pbkJyZWFrcG9pbnQod2lkdGgsIG1pbikge1xuICB2YXIgYnJlYWtwb2ludHMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IEJSRUFLUE9JTlRTO1xuXG4gIGlmICh0eXBlb2YgbWluID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiB3aWR0aCA+PSBtaW47XG4gIH0gZWxzZSB7XG4gICAgdmFyIGN1cnJlbnRCcmVha3BvaW50ID0gZ2V0QnJlYWtwb2ludCh3aWR0aCwgYnJlYWtwb2ludHMpO1xuICAgIHJldHVybiBjdXJyZW50QnJlYWtwb2ludCA/IGJyZWFrcG9pbnRzW2N1cnJlbnRCcmVha3BvaW50XSA+PSBicmVha3BvaW50c1ttaW5dIDogZmFsc2U7XG4gIH1cbn1cbi8qKlxuICogR2l2ZW4gdGhlIGN1cnJlbnQgYHdpZHRoYCBhbmQgYW4gYXJyYXkgb2YgYnJlYWtwb2ludCBrZXlzLFxuICogdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRydWUgb3IgZmFsc2UgaWYgdGhlIGB3aWR0aGAgZmFsbHMgd2l0aGluXG4gKiBhbnkgb2YgdGhlIG5hbWVkIGJyZWFrcG9pbnRzXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIENhbiBlaXRoZXIgYmUgdGhlIGZ1bGwgd2luZG93IHdpZHRoIG9yIGFueSB3aWR0aFxuICogQHBhcmFtIHtFdWlCcmVha3BvaW50U2l6ZVtdfSBzaXplcyBBbiBhcnJheSBvZiBuYW1lZCBicmVha3BvaW50c1xuICogQHBhcmFtIHtFdWlCcmVha3BvaW50c30gYnJlYWtwb2ludHMgQW4gb2JqZWN0IHdpdGgga2V5cyBmb3Igc2l6aW5nIGFuZCB2YWx1ZXMgZm9yIG1pbmltdW0gd2lkdGhcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBjdXJyZW50IGJyZWFrcG9pbnQgbmFtZSBpcyBpbmNsdWRlZCBpbiBgc2l6ZXNgXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGlzV2l0aGluQnJlYWtwb2ludHMod2lkdGgsIHNpemVzKSB7XG4gIHZhciBicmVha3BvaW50cyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogQlJFQUtQT0lOVFM7XG4gIHZhciBjdXJyZW50QnJlYWtwb2ludCA9IGdldEJyZWFrcG9pbnQod2lkdGgsIGJyZWFrcG9pbnRzKTtcbiAgcmV0dXJuIGN1cnJlbnRCcmVha3BvaW50ID8gc2l6ZXMuaW5jbHVkZXMoY3VycmVudEJyZWFrcG9pbnQpIDogZmFsc2U7XG59IiwgImZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7IHZhciBfaSA9IGFyciA9PSBudWxsID8gbnVsbCA6IHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgYXJyW1N5bWJvbC5pdGVyYXRvcl0gfHwgYXJyW1wiQEBpdGVyYXRvclwiXTsgaWYgKF9pID09IG51bGwpIHJldHVybjsgdmFyIF9hcnIgPSBbXTsgdmFyIF9uID0gdHJ1ZTsgdmFyIF9kID0gZmFsc2U7IHZhciBfcywgX2U7IHRyeSB7IGZvciAoX2kgPSBfaS5jYWxsKGFycik7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHsgX2Fyci5wdXNoKF9zLnZhbHVlKTsgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOyB9IH0gY2F0Y2ggKGVycikgeyBfZCA9IHRydWU7IF9lID0gZXJyOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7IH0gZmluYWxseSB7IGlmIChfZCkgdGhyb3cgX2U7IH0gfSByZXR1cm4gX2FycjsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBjcmVhdGVDb250ZXh0LCB1c2VTdGF0ZSwgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi90aGVtZSc7XG5pbXBvcnQgeyB0aHJvdHRsZSB9IGZyb20gJy4uL3Rocm90dGxlJztcbmltcG9ydCB7IGdldEJyZWFrcG9pbnQgfSBmcm9tICcuL2JyZWFrcG9pbnQnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgQ3VycmVudEV1aUJyZWFrcG9pbnRDb250ZXh0ID0gLyojX19QVVJFX18qL2NyZWF0ZUNvbnRleHQodW5kZWZpbmVkKTtcbi8qKlxuICogVG9wIGxldmVsIHByb3ZpZGVyIChuZXN0ZWQgd2l0aGluIEV1aVByb3ZpZGVyKSB3aGljaCBwcm92aWRlcyBhIHNpbmdsZVxuICogcmVzaXplIGxpc3RlbmVyIHRoYXQgcmV0dXJucyB0aGUgY3VycmVudCBicmVha3BvaW50IGJhc2VkIG9uIHdpbmRvdyB3aWR0aFxuICovXG5cbmV4cG9ydCB2YXIgQ3VycmVudEV1aUJyZWFrcG9pbnRQcm92aWRlciA9IGZ1bmN0aW9uIEN1cnJlbnRFdWlCcmVha3BvaW50UHJvdmlkZXIoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuO1xuXG4gIHZhciBfdXNlRXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpLFxuICAgICAgYnJlYWtwb2ludHMgPSBfdXNlRXVpVGhlbWUuZXVpVGhlbWUuYnJlYWtwb2ludDtcblxuICB2YXIgX3VzZVN0YXRlID0gdXNlU3RhdGUodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyBnZXRCcmVha3BvaW50KHdpbmRvdy5pbm5lcldpZHRoLCBicmVha3BvaW50cykgOiB1bmRlZmluZWQpLFxuICAgICAgX3VzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZSwgMiksXG4gICAgICBjdXJyZW50QnJlYWtwb2ludCA9IF91c2VTdGF0ZTJbMF0sXG4gICAgICBzZXRDdXJyZW50QnJlYWtwb2ludCA9IF91c2VTdGF0ZTJbMV07XG5cbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgb25XaW5kb3dSZXNpemUgPSB0aHJvdHRsZShmdW5jdGlvbiAoKSB7XG4gICAgICBzZXRDdXJyZW50QnJlYWtwb2ludChnZXRCcmVha3BvaW50KHdpbmRvdy5pbm5lcldpZHRoLCBicmVha3BvaW50cykpO1xuICAgIH0sIDUwKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgb25XaW5kb3dSZXNpemUpO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIG9uV2luZG93UmVzaXplKTtcbiAgICB9O1xuICB9LCBbYnJlYWtwb2ludHNdKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goQ3VycmVudEV1aUJyZWFrcG9pbnRDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IGN1cnJlbnRCcmVha3BvaW50XG4gIH0sIGNoaWxkcmVuKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgRXVpVGhlbWVBbXN0ZXJkYW0gfSBmcm9tICcuLi8uLi90aGVtZXMvYW1zdGVyZGFtL3RoZW1lJztcbmltcG9ydCB7IERFRkFVTFRfQ09MT1JfTU9ERSwgZ2V0Q29tcHV0ZWQgfSBmcm9tICcuL3V0aWxzJztcbmV4cG9ydCB2YXIgRXVpU3lzdGVtQ29udGV4dCA9IC8qI19fUFVSRV9fKi9jcmVhdGVDb250ZXh0KEV1aVRoZW1lQW1zdGVyZGFtKTtcbmV4cG9ydCB2YXIgRXVpTW9kaWZpY2F0aW9uc0NvbnRleHQgPSAvKiNfX1BVUkVfXyovY3JlYXRlQ29udGV4dCh7fSk7XG5leHBvcnQgdmFyIEV1aUNvbG9yTW9kZUNvbnRleHQgPSAvKiNfX1BVUkVfXyovY3JlYXRlQ29udGV4dChERUZBVUxUX0NPTE9SX01PREUpO1xuZXhwb3J0IHZhciBFdWlUaGVtZUNvbnRleHQgPSAvKiNfX1BVUkVfXyovY3JlYXRlQ29udGV4dChnZXRDb21wdXRlZChFdWlUaGVtZUFtc3RlcmRhbSwge30sIERFRkFVTFRfQ09MT1JfTU9ERSkpOyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuZXhwb3J0IHZhciBDT0xPUl9NT0RFU19TVEFOREFSRCA9IHtcbiAgbGlnaHQ6ICdMSUdIVCcsXG4gIGRhcms6ICdEQVJLJ1xufTtcbmV4cG9ydCB2YXIgQ09MT1JfTU9ERVNfSU5WRVJTRSA9ICdJTlZFUlNFJzsiLCAiZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7IHJldHVybiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5KGFycikgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFycikgfHwgX25vbkl0ZXJhYmxlU3ByZWFkKCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7IGlmICh0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGl0ZXJbU3ltYm9sLml0ZXJhdG9yXSAhPSBudWxsIHx8IGl0ZXJbXCJAQGl0ZXJhdG9yXCJdICE9IG51bGwpIHJldHVybiBBcnJheS5mcm9tKGl0ZXIpOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KGFycik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgQ09MT1JfTU9ERVNfU1RBTkRBUkQsIENPTE9SX01PREVTX0lOVkVSU0UgfSBmcm9tICcuL3R5cGVzJztcbmV4cG9ydCB2YXIgREVGQVVMVF9DT0xPUl9NT0RFID0gQ09MT1JfTU9ERVNfU1RBTkRBUkQubGlnaHQ7XG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGUgcGFyYW1ldGVyIGlzIGFuIG9iamVjdFxuICogQHBhcmFtIHthbnl9IG9iaiAtIEFueXRoaW5nXG4gKi9cblxudmFyIGlzT2JqZWN0ID0gZnVuY3Rpb24gaXNPYmplY3Qob2JqKSB7XG4gIHJldHVybiBvYmogJiYgX3R5cGVvZihvYmopID09PSAnb2JqZWN0Jztcbn07XG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGUgcHJvdmlkZWQgY29sb3IgbW9kZSBpcyBgaW52ZXJzZWBcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvck1vZGUgLSBgbGlnaHRgLCBgZGFya2AsIG9yIGBpbnZlcnNlYFxuICovXG5cblxuZXhwb3J0IHZhciBpc0ludmVyc2VDb2xvck1vZGUgPSBmdW5jdGlvbiBpc0ludmVyc2VDb2xvck1vZGUoY29sb3JNb2RlKSB7XG4gIHJldHVybiBjb2xvck1vZGUgPT09IENPTE9SX01PREVTX0lOVkVSU0U7XG59O1xuLyoqXG4gKiBSZXR1cm5zIHRoZSBjb2xvciBtb2RlIGNvbmZpZ3VyZWQgaW4gdGhlIGN1cnJlbnQgRXVpVGhlbWVQcm92aWRlci5cbiAqIFJldHVybnMgdGhlIHBhcmVudCBjb2xvciBtb2RlIGlmIG5vbmUgaXMgZXhwbGljaXR5IHNldC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvTW9kZSAtIGBsaWdodGAsIGBkYXJrYCwgb3IgYGludmVyc2VgXG4gKiBAcGFyYW0ge3N0cmluZ30gcGFyZW50Q29sb3JNb2RlIC0gYExJR0hUYCBvciBgREFSS2A7IHVzZWQgYXMgdGhlIGZhbGxiYWNrXG4gKi9cblxuZXhwb3J0IHZhciBnZXRDb2xvck1vZGUgPSBmdW5jdGlvbiBnZXRDb2xvck1vZGUoY29sb3JNb2RlLCBwYXJlbnRDb2xvck1vZGUpIHtcbiAgaWYgKGNvbG9yTW9kZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHBhcmVudENvbG9yTW9kZSB8fCBERUZBVUxUX0NPTE9SX01PREU7XG4gIH1cblxuICB2YXIgbW9kZSA9IGNvbG9yTW9kZS50b1VwcGVyQ2FzZSgpO1xuXG4gIGlmIChpc0ludmVyc2VDb2xvck1vZGUobW9kZSkpIHtcbiAgICByZXR1cm4gcGFyZW50Q29sb3JNb2RlID09PSBDT0xPUl9NT0RFU19TVEFOREFSRC5kYXJrIHx8IHBhcmVudENvbG9yTW9kZSA9PT0gdW5kZWZpbmVkID8gQ09MT1JfTU9ERVNfU1RBTkRBUkQubGlnaHQgOiBDT0xPUl9NT0RFU19TVEFOREFSRC5kYXJrO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBtb2RlO1xuICB9XG59O1xuLyoqXG4gKiBSZXR1cm5zIGEgdmFsdWUgYXQgYSBnaXZlbiBwYXRoIG9uIGFuIG9iamVjdC5cbiAqIElmIGBjb2xvck1vZGVgIGlzIHByb3ZpZGVkLCB3aWxsIHNjb3BlIHRoZSB2YWx1ZSB0byB0aGUgYXBwcm9wcmlhdGUgY29sb3IgbW9kZSBrZXkgKExJR0hUXFxEQVJLKVxuICogQHBhcmFtIHtvYmplY3R9IG1vZGVsIC0gT2JqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ30gX3BhdGggLSBEb3Qtbm90YXRlZCBzdHJpbmcgdG8gYSBwYXRoIG9uIHRoZSBvYmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvck1vZGUgLSBgbGlnaHRgIG9yIGBkYXJrYFxuICovXG5cbmV4cG9ydCB2YXIgZ2V0T24gPSBmdW5jdGlvbiBnZXRPbihtb2RlbCwgX3BhdGgsIGNvbG9yTW9kZSkge1xuICB2YXIgcGF0aCA9IF9wYXRoLnNwbGl0KCcuJyk7XG5cbiAgdmFyIG5vZGUgPSBtb2RlbDtcblxuICB3aGlsZSAocGF0aC5sZW5ndGgpIHtcbiAgICB2YXIgc2VnbWVudCA9IHBhdGguc2hpZnQoKTtcblxuICAgIGlmIChub2RlLmhhc093blByb3BlcnR5KHNlZ21lbnQpID09PSBmYWxzZSkge1xuICAgICAgaWYgKGNvbG9yTW9kZSAmJiBub2RlLmhhc093blByb3BlcnR5KGNvbG9yTW9kZSkgPT09IHRydWUgJiYgbm9kZVtjb2xvck1vZGVdLmhhc093blByb3BlcnR5KHNlZ21lbnQpID09PSB0cnVlKSB7XG4gICAgICAgIGlmIChub2RlW2NvbG9yTW9kZV1bc2VnbWVudF0gaW5zdGFuY2VvZiBDb21wdXRlZCkge1xuICAgICAgICAgIG5vZGUgPSBub2RlW2NvbG9yTW9kZV1bc2VnbWVudF0uZ2V0VmFsdWUobnVsbCwgbnVsbCwgbm9kZSwgY29sb3JNb2RlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBub2RlID0gbm9kZVtjb2xvck1vZGVdW3NlZ21lbnRdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAobm9kZVtzZWdtZW50XSBpbnN0YW5jZW9mIENvbXB1dGVkKSB7XG4gICAgICAgIG5vZGUgPSBub2RlW3NlZ21lbnRdLmdldFZhbHVlKG51bGwsIG51bGwsIG5vZGUsIGNvbG9yTW9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlID0gbm9kZVtzZWdtZW50XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbm9kZTtcbn07XG4vKipcbiAqIFNldHMgYSB2YWx1ZSBhdCBhIGdpdmVuIHBhdGggb24gYW4gb2JqZWN0LlxuICogQHBhcmFtIHtvYmplY3R9IG1vZGVsIC0gT2JqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ30gX3BhdGggLSBEb3Qtbm90YXRlZCBzdHJpbmcgdG8gYSBwYXRoIG9uIHRoZSBvYmplY3RcbiAqIEBwYXJhbSB7YW55fSBzdHJpbmcgLSAgVGhlIHZhbHVlIHRvIHNldFxuICovXG5cbmV4cG9ydCB2YXIgc2V0T24gPSBmdW5jdGlvbiBzZXRPbihtb2RlbCwgX3BhdGgsIHZhbHVlKSB7XG4gIHZhciBwYXRoID0gX3BhdGguc3BsaXQoJy4nKTtcblxuICB2YXIgcHJvcGVydHlOYW1lID0gcGF0aC5wb3AoKTtcbiAgdmFyIG5vZGUgPSBtb2RlbDtcblxuICB3aGlsZSAocGF0aC5sZW5ndGgpIHtcbiAgICB2YXIgc2VnbWVudCA9IHBhdGguc2hpZnQoKTtcblxuICAgIGlmIChub2RlLmhhc093blByb3BlcnR5KHNlZ21lbnQpID09PSBmYWxzZSkge1xuICAgICAgbm9kZVtzZWdtZW50XSA9IHt9O1xuICAgIH1cblxuICAgIG5vZGUgPSBub2RlW3NlZ21lbnRdO1xuICB9XG5cbiAgbm9kZVtwcm9wZXJ0eU5hbWVdID0gdmFsdWU7XG4gIHJldHVybiB0cnVlO1xufTtcbi8qKlxuICogQ3JlYXRlcyBhIGNsYXNzIHRvIHN0b3JlIHRoZSBgY29tcHV0ZXJgIG1ldGhvZCBhbmQgaXRzIGV2ZW50dWFsIHBhcmFtZXRlcnMuXG4gKiBBbGxvd3MgZm9yIG9uLWRlbWFuZCBjb21wdXRhdGlvbiB3aXRoIHVwLXRvLWRhdGUgcGFyYW1ldGVycyB2aWEgYGdldFZhbHVlYCBtZXRob2QuXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNvbXB1dGVyIC0gRnVuY3Rpb24gdG8gYmUgY29tcHV0ZWRcbiAqIEBwYXJhbSB7c3RyaW5nIHwgYXJyYXl9IGRlcGVuZGVuY2llcyAtIERlcGVuZGVuY2llcyBwYXNzZWQgdG8gdGhlIGBjb21wdXRlcmAgYXMgcGFyYW1ldGVyc1xuICovXG5cbmV4cG9ydCB2YXIgQ29tcHV0ZWQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBDb21wdXRlZChjb21wdXRlcikge1xuICAgIHZhciBkZXBlbmRlbmNpZXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IFtdO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIENvbXB1dGVkKTtcblxuICAgIHRoaXMuY29tcHV0ZXIgPSBjb21wdXRlcjtcbiAgICB0aGlzLmRlcGVuZGVuY2llcyA9IGRlcGVuZGVuY2llcztcbiAgfVxuICAvKipcbiAgICogRXhlY3V0ZXMgdGhlIGBjb21wdXRlcmAgbWV0aG9kIHdpdGggdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHRoZW1lXG4gICAqIGJ5IHRha2luZyBpbnRvIGFjY291bnQgcHJldmlvdXNseSBjb21wdXRlZCB2YWx1ZXMgYW5kIG1vZGlmaWNhdGlvbnMuXG4gICAqIEBwYXJhbSB7UHJveHkgfCBvYmplY3R9IGJhc2UgLSBDb21wdXRlZCBvciB1bmNvbXB1dGVkIHRoZW1lXG4gICAqIEBwYXJhbSB7UHJveHkgfCBvYmplY3R9IG1vZGlmaWNhdGlvbnMgLSBUaGVtZSB2YWx1ZSBvdmVycmlkZXNcbiAgICogQHBhcmFtIHtvYmplY3R9IHdvcmtpbmcgLSBQYXJ0aWFsbHkgY29tcHV0ZWQgdGhlbWVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yTW9kZSAtIGBsaWdodGAgb3IgYGRhcmtgXG4gICAqL1xuXG5cbiAgX2NyZWF0ZUNsYXNzKENvbXB1dGVkLCBbe1xuICAgIGtleTogXCJnZXRWYWx1ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRWYWx1ZShiYXNlKSB7XG4gICAgICB2YXIgbW9kaWZpY2F0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgICB2YXIgd29ya2luZyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkO1xuICAgICAgdmFyIGNvbG9yTW9kZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAzID8gYXJndW1lbnRzWzNdIDogdW5kZWZpbmVkO1xuXG4gICAgICBpZiAoIXRoaXMuZGVwZW5kZW5jaWVzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb21wdXRlcih3b3JraW5nKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRoaXMuZGVwZW5kZW5jaWVzKSkge1xuICAgICAgICB2YXIgX3JlZiwgX2dldE9uO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmNvbXB1dGVyKChfcmVmID0gKF9nZXRPbiA9IGdldE9uKHdvcmtpbmcsIHRoaXMuZGVwZW5kZW5jaWVzKSkgIT09IG51bGwgJiYgX2dldE9uICE9PSB2b2lkIDAgPyBfZ2V0T24gOiBnZXRPbihtb2RpZmljYXRpb25zLCB0aGlzLmRlcGVuZGVuY2llcywgY29sb3JNb2RlKSkgIT09IG51bGwgJiYgX3JlZiAhPT0gdm9pZCAwID8gX3JlZiA6IGdldE9uKGJhc2UsIHRoaXMuZGVwZW5kZW5jaWVzLCBjb2xvck1vZGUpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuY29tcHV0ZXIodGhpcy5kZXBlbmRlbmNpZXMubWFwKGZ1bmN0aW9uIChkZXBlbmRlbmN5KSB7XG4gICAgICAgIHZhciBfcmVmMiwgX2dldE9uMjtcblxuICAgICAgICByZXR1cm4gKF9yZWYyID0gKF9nZXRPbjIgPSBnZXRPbih3b3JraW5nLCBkZXBlbmRlbmN5KSkgIT09IG51bGwgJiYgX2dldE9uMiAhPT0gdm9pZCAwID8gX2dldE9uMiA6IGdldE9uKG1vZGlmaWNhdGlvbnMsIGRlcGVuZGVuY3ksIGNvbG9yTW9kZSkpICE9PSBudWxsICYmIF9yZWYyICE9PSB2b2lkIDAgPyBfcmVmMiA6IGdldE9uKGJhc2UsIGRlcGVuZGVuY3ksIGNvbG9yTW9kZSk7XG4gICAgICB9KSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIENvbXB1dGVkO1xufSgpO1xuLyoqXG4gKiBSZXR1cm5zIGEgQ2xhc3MgKGBDb21wdXRlZGApIHRoYXQgc3RvcmVzIHRoZSBhcmJpdHJhcnkgY29tcHV0ZXIgbWV0aG9kXG4gKiBhbmQgcmVmZXJlbmNlcyB0byBpdHMgb3B0aW9uYWwgZGVwZW5kZWNpZXMuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjb21wdXRlciAtIEFyYml0cmFyeSBtZXRob2QgdG8gYmUgY2FsbGVkIGF0IGNvbXB1dGUgdGltZS5cbiAqIEBwYXJhbSB7c3RyaW5nIHwgYXJyYXl9IGRlcGVuZGVuY2llcyAtIFZhbHVlcyB0aGF0IHdpbGwgYmUgcHJvdmlkZWQgdG8gYGNvbXB1dGVyYCBhdCBjb21wdXRlIHRpbWUuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVkKGNvbXAsIGRlcCkge1xuICByZXR1cm4gbmV3IENvbXB1dGVkKGNvbXAsIGRlcCk7XG59XG4vKipcbiAqIFRha2VzIGFuIHVuY29tcHV0ZWQgdGhlbWUsIGFuZCBjb21wdXRlcyBhbmQgcmV0dXJucyBhbGwgdmFsdWVzIHRha2luZ1xuICogaW50byBjb25zaWRlcmF0aW9uIHZhbHVlIG92ZXJyaWRlcyBhbmQgY29uZmlndXJlZCBjb2xvciBtb2RlLlxuICogT3ZlcnJpZGVzIHRha2UgcHJlY2VkZW5jZSwgYW5kIG9ubHkgdmFsdWVzIGluIHRoZSBjdXJyZW50IGNvbG9yIG1vZGVcbiAqIGFyZSBjb21wdXRlZCBhbmQgcmV0dXJuZWQuXG4gKiBAcGFyYW0ge1Byb3h5fSBiYXNlIC0gT2JqZWN0IHRvIHRyYW5zZm9ybSBpbnRvIFByb3h5XG4gKiBAcGFyYW0ge1Byb3h5IHwgb2JqZWN0fSBvdmVyIC0gVW5pcXVlIGlkZW50aWZpZXIgb3IgbmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yTW9kZSAtIGBsaWdodGAgb3IgYGRhcmtgXG4gKi9cblxuZXhwb3J0IHZhciBnZXRDb21wdXRlZCA9IGZ1bmN0aW9uIGdldENvbXB1dGVkKGJhc2UsIG92ZXIsIGNvbG9yTW9kZSkge1xuICB2YXIgb3V0cHV0ID0ge1xuICAgIHRoZW1lTmFtZTogYmFzZS5rZXlcbiAgfTtcblxuICBmdW5jdGlvbiBsb29wKGJhc2UsIG92ZXIpIHtcbiAgICB2YXIgY2hlY2tFeGlzdGluZyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogZmFsc2U7XG4gICAgdmFyIHBhdGggPSBhcmd1bWVudHMubGVuZ3RoID4gMyA/IGFyZ3VtZW50c1szXSA6IHVuZGVmaW5lZDtcbiAgICBPYmplY3Qua2V5cyhiYXNlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHZhciBuZXdQYXRoID0gcGF0aCA/IFwiXCIuY29uY2F0KHBhdGgsIFwiLlwiKS5jb25jYXQoa2V5KSA6IFwiXCIuY29uY2F0KGtleSk7IC8vIEB0cy1leHBlY3QtZXJyb3IgYGtleWAgaXMgbm90IG5lY2Vzc2FyaWx5IGEgY29sb3JNb2RlIGtleVxuXG4gICAgICBpZiAoW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShPYmplY3QudmFsdWVzKENPTE9SX01PREVTX1NUQU5EQVJEKSksIFtjb2xvck1vZGVdKS5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgIGlmIChrZXkgIT09IGNvbG9yTW9kZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgY29sb3JNb2RlU2VnbWVudCA9IG5ldyBSZWdFeHAoXCIoXFxcXC5cIi5jb25jYXQoY29sb3JNb2RlLCBcIlxcXFxiKXwoXFxcXGJcIikuY29uY2F0KGNvbG9yTW9kZSwgXCJcXFxcLilcIikpO1xuICAgICAgICAgIG5ld1BhdGggPSBuZXdQYXRoLnJlcGxhY2UoY29sb3JNb2RlU2VnbWVudCwgJycpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBleGlzdGluZyA9IGNoZWNrRXhpc3RpbmcgJiYgZ2V0T24ob3V0cHV0LCBuZXdQYXRoKTtcblxuICAgICAgaWYgKCFleGlzdGluZyB8fCBpc09iamVjdChleGlzdGluZykpIHtcbiAgICAgICAgdmFyIGJhc2VWYWx1ZSA9IGJhc2Vba2V5XSBpbnN0YW5jZW9mIENvbXB1dGVkID8gYmFzZVtrZXldLmdldFZhbHVlKGJhc2Uucm9vdCwgb3Zlci5yb290LCBvdXRwdXQsIGNvbG9yTW9kZSkgOiBiYXNlW2tleV07XG4gICAgICAgIHZhciBvdmVyVmFsdWUgPSBvdmVyW2tleV0gaW5zdGFuY2VvZiBDb21wdXRlZCA/IG92ZXJba2V5XS5nZXRWYWx1ZShiYXNlLnJvb3QsIG92ZXIucm9vdCwgb3V0cHV0LCBjb2xvck1vZGUpIDogb3ZlcltrZXldO1xuXG4gICAgICAgIGlmIChpc09iamVjdChiYXNlVmFsdWUpICYmICFBcnJheS5pc0FycmF5KGJhc2VWYWx1ZSkpIHtcbiAgICAgICAgICBsb29wKGJhc2VWYWx1ZSwgb3ZlclZhbHVlICE9PSBudWxsICYmIG92ZXJWYWx1ZSAhPT0gdm9pZCAwID8gb3ZlclZhbHVlIDoge30sIGNoZWNrRXhpc3RpbmcsIG5ld1BhdGgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNldE9uKG91dHB1dCwgbmV3UGF0aCwgb3ZlclZhbHVlICE9PSBudWxsICYmIG92ZXJWYWx1ZSAhPT0gdm9pZCAwID8gb3ZlclZhbHVlIDogYmFzZVZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9IC8vIENvbXB1dGUgc3RhbmRhcmQgdGhlbWUgdmFsdWVzIGFuZCBhcHBseSBvdmVycmlkZXNcblxuXG4gIGxvb3AoYmFzZSwgb3Zlcik7IC8vIENvbXB1dGUgYW5kIGFwcGx5IGV4dGVuc2lvbiB2YWx1ZXMgb25seVxuXG4gIGxvb3Aob3Zlciwge30sIHRydWUpO1xuICByZXR1cm4gb3V0cHV0O1xufTtcbi8qKlxuICogQnVpbGRzIGEgUHJveHkgd2l0aCBhIGN1c3RvbSBgaGFuZGxlcmAgZGVzaWduZWQgdG8gc2VsZi1yZWZlcmVuY2UgdmFsdWVzXG4gKiBhbmQgcHJldmVudCBhcmJpdHJhcnkgdmFsdWUgb3ZlcnJpZGVzLlxuICogQHBhcmFtIHtvYmplY3R9IG1vZGVsIC0gT2JqZWN0IHRvIHRyYW5zZm9ybSBpbnRvIFByb3h5XG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVW5pcXVlIGlkZW50aWZpZXIgb3IgbmFtZVxuICovXG5cbmV4cG9ydCB2YXIgYnVpbGRUaGVtZSA9IGZ1bmN0aW9uIGJ1aWxkVGhlbWUobW9kZWwsIGtleSkge1xuICB2YXIgaGFuZGxlciA9IHtcbiAgICBnZXRQcm90b3R5cGVPZjogZnVuY3Rpb24gZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSB7XG4gICAgICByZXR1cm4gUmVmbGVjdC5nZXRQcm90b3R5cGVPZih0YXJnZXQubW9kZWwpO1xuICAgIH0sXG4gICAgc2V0UHJvdG90eXBlT2Y6IGZ1bmN0aW9uIHNldFByb3RvdHlwZU9mKHRhcmdldCwgcHJvdG90eXBlKSB7XG4gICAgICByZXR1cm4gUmVmbGVjdC5zZXRQcm90b3R5cGVPZih0YXJnZXQubW9kZWwsIHByb3RvdHlwZSk7XG4gICAgfSxcbiAgICBpc0V4dGVuc2libGU6IGZ1bmN0aW9uIGlzRXh0ZW5zaWJsZSh0YXJnZXQpIHtcbiAgICAgIHJldHVybiBSZWZsZWN0LmlzRXh0ZW5zaWJsZSh0YXJnZXQpO1xuICAgIH0sXG4gICAgcHJldmVudEV4dGVuc2lvbnM6IGZ1bmN0aW9uIHByZXZlbnRFeHRlbnNpb25zKHRhcmdldCkge1xuICAgICAgcmV0dXJuIFJlZmxlY3QucHJldmVudEV4dGVuc2lvbnModGFyZ2V0Lm1vZGVsKTtcbiAgICB9LFxuICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSB7XG4gICAgICByZXR1cm4gUmVmbGVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0Lm1vZGVsLCBrZXkpO1xuICAgIH0sXG4gICAgZGVmaW5lUHJvcGVydHk6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHksIGF0dHJpYnV0ZXMpIHtcbiAgICAgIHJldHVybiBSZWZsZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldC5tb2RlbCwgcHJvcGVydHksIGF0dHJpYnV0ZXMpO1xuICAgIH0sXG4gICAgaGFzOiBmdW5jdGlvbiBoYXModGFyZ2V0LCBwcm9wZXJ0eSkge1xuICAgICAgcmV0dXJuIFJlZmxlY3QuaGFzKHRhcmdldC5tb2RlbCwgcHJvcGVydHkpO1xuICAgIH0sXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoX3RhcmdldCwgcHJvcGVydHkpIHtcbiAgICAgIGlmIChwcm9wZXJ0eSA9PT0gJ2tleScpIHtcbiAgICAgICAgcmV0dXJuIF90YXJnZXRbcHJvcGVydHldO1xuICAgICAgfSAvLyBwcmV2ZW50IFNhZmFyaSBmcm9tIGxvY2tpbmcgdXAgd2hlbiB0aGUgcHJveHkgaXMgdXNlZCBpbiBkZXYgdG9vbHNcbiAgICAgIC8vIGFzIGl0IGRvZXNuJ3Qgc3VwcG9ydCBnZXRQcm90b3R5cGVPZlxuXG5cbiAgICAgIGlmIChwcm9wZXJ0eSA9PT0gJ19fcHJvdG9fXycpIHJldHVybiB7fTtcbiAgICAgIHZhciB0YXJnZXQgPSBwcm9wZXJ0eSA9PT0gJ3Jvb3QnID8gX3RhcmdldCA6IF90YXJnZXQubW9kZWwgfHwgX3RhcmdldDsgLy8gQHRzLWlnbm9yZSBgc3RyaW5nYCBpbmRleCBzaWduYXR1cmVcblxuICAgICAgdmFyIHZhbHVlID0gdGFyZ2V0W3Byb3BlcnR5XTtcblxuICAgICAgaWYgKGlzT2JqZWN0KHZhbHVlKSAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm94eSh7XG4gICAgICAgICAgbW9kZWw6IHZhbHVlLFxuICAgICAgICAgIHJvb3Q6IF90YXJnZXQucm9vdCxcbiAgICAgICAgICBrZXk6IFwiX1wiLmNvbmNhdChfdGFyZ2V0LmtleSlcbiAgICAgICAgfSwgaGFuZGxlcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uIHNldCh0YXJnZXQpIHtcbiAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfSxcbiAgICBkZWxldGVQcm9wZXJ0eTogZnVuY3Rpb24gZGVsZXRlUHJvcGVydHkodGFyZ2V0KSB7XG4gICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH0sXG4gICAgb3duS2V5czogZnVuY3Rpb24gb3duS2V5cyh0YXJnZXQpIHtcbiAgICAgIHJldHVybiBSZWZsZWN0Lm93bktleXModGFyZ2V0Lm1vZGVsKTtcbiAgICB9LFxuICAgIGFwcGx5OiBmdW5jdGlvbiBhcHBseSh0YXJnZXQpIHtcbiAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfSxcbiAgICBjb25zdHJ1Y3Q6IGZ1bmN0aW9uIGNvbnN0cnVjdCh0YXJnZXQpIHtcbiAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfVxuICB9O1xuICB2YXIgdGhlbWVQcm94eSA9IG5ldyBQcm94eSh7XG4gICAgbW9kZWw6IG1vZGVsLFxuICAgIHJvb3Q6IG1vZGVsLFxuICAgIGtleToga2V5XG4gIH0sIGhhbmRsZXIpO1xuICByZXR1cm4gdGhlbWVQcm94eTtcbn07XG4vKipcbiAqIERlZXBseSBtZXJnZXMgdHdvIG9iamVjdHMsIHVzaW5nIGBzb3VyY2VgIHZhbHVlcyB3aGVuZXZlciBwb3NzaWJsZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBfdGFyZ2V0IC0gT2JqZWN0IHdpdGggZmFsbGJhY2sgdmFsdWVzXG4gKiBAcGFyYW0ge29iamVjdH0gc291cmNlIC0gT2JqZWN0IHdpdGggZGVzaXJlZCB2YWx1ZXNcbiAqL1xuXG5leHBvcnQgdmFyIG1lcmdlRGVlcCA9IGZ1bmN0aW9uIG1lcmdlRGVlcChfdGFyZ2V0KSB7XG4gIHZhciBzb3VyY2UgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuXG4gIHZhciB0YXJnZXQgPSBfb2JqZWN0U3ByZWFkKHt9LCBfdGFyZ2V0KTtcblxuICBpZiAoIWlzT2JqZWN0KHRhcmdldCkgfHwgIWlzT2JqZWN0KHNvdXJjZSkpIHtcbiAgICByZXR1cm4gc291cmNlO1xuICB9XG5cbiAgT2JqZWN0LmtleXMoc291cmNlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgdGFyZ2V0VmFsdWUgPSB0YXJnZXRba2V5XTtcbiAgICB2YXIgc291cmNlVmFsdWUgPSBzb3VyY2Vba2V5XTtcblxuICAgIGlmIChpc09iamVjdCh0YXJnZXRWYWx1ZSkgJiYgaXNPYmplY3Qoc291cmNlVmFsdWUpKSB7XG4gICAgICB0YXJnZXRba2V5XSA9IG1lcmdlRGVlcChfb2JqZWN0U3ByZWFkKHt9LCB0YXJnZXRWYWx1ZSksIF9vYmplY3RTcHJlYWQoe30sIHNvdXJjZVZhbHVlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhcmdldFtrZXldID0gc291cmNlVmFsdWU7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHRhcmdldDtcbn07IiwgImZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7IHZhciBfaSA9IGFyciA9PSBudWxsID8gbnVsbCA6IHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgYXJyW1N5bWJvbC5pdGVyYXRvcl0gfHwgYXJyW1wiQEBpdGVyYXRvclwiXTsgaWYgKF9pID09IG51bGwpIHJldHVybjsgdmFyIF9hcnIgPSBbXTsgdmFyIF9uID0gdHJ1ZTsgdmFyIF9kID0gZmFsc2U7IHZhciBfcywgX2U7IHRyeSB7IGZvciAoX2kgPSBfaS5jYWxsKGFycik7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHsgX2Fyci5wdXNoKF9zLnZhbHVlKTsgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOyB9IH0gY2F0Y2ggKGVycikgeyBfZCA9IHRydWU7IF9lID0gZXJyOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7IH0gZmluYWxseSB7IGlmIChfZCkgdGhyb3cgX2U7IH0gfSByZXR1cm4gX2FycjsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGNhbGN1bGF0ZXMgaWYgdGhlIHNwZWNpZmllZCBjb2xvciBpcyBcImRhcmtcIiwgd2hpY2ggdXN1YWxseSBtZWFuc1xuICogeW91IG5lZWQgbGlnaHQgdGV4dCBpZiB5b3UgdXNlIGl0IGFzIGEgYmFja2dyb3VuZCBjb2xvciB0byBmdWxmaWxsIFdDQUcgY29udHJhc3RcbiAqIHJlcXVpcmVtZW50LlxuICogVGhlIGNvbG9yIG11c3QgYmUgc3BlY2lmaWVkIHZpYSBpdHMgcmVkLCBncmVlbiBhbmQgYmx1ZSB2YWx1ZSBpbiB0aGUgcmFuZ2Ugb2ZcbiAqIDAgdG8gMjU1LlxuICogVGhlIGZvcm11bGEgaXMgYmFzZWQgb24gdGhpcyBTdGFja292ZXJmbG93IGFuc3dlcjogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzM5NDMwMjNcbiAqIHdoaWNoIGl0c2VsZiBpcyBiYXNlZCB1cG9uIHRoZSBXQ0FHIHJlY29tbWVuZGF0aW9uIGZvciBjb2xvciBjb250cmFzdC5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gcmVkIFRoZSByZWQgY29tcG9uZW50IGluIHRoZSByYW5nZSAwIHRvIDI1NVxuICogQHBhcmFtIHtudW1iZXJ9IGdyZWVuIFRoZSBncmVlbiBjb21wb25lbnQgaW4gdGhlIHJhbmdlIDAgdG8gMjU1XG4gKiBAcGFyYW0ge251bWJlcn0gYmx1ZSBUaGUgYmx1ZSBjb21wb25lbnQgaW4gdGhlIHJhbmdlIDAgdG8gMjU1XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgY29sb3IgaXMgZGFyaywgZmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNDb2xvckRhcmsocmVkLCBncmVlbiwgYmx1ZSkge1xuICB2YXIgX21hcCRtYXAgPSBbcmVkLCBncmVlbiwgYmx1ZV0ubWFwKGZ1bmN0aW9uIChjKSB7XG4gICAgcmV0dXJuIGMgLyAyNTUuMDtcbiAgfSkubWFwKGZ1bmN0aW9uIChjKSB7XG4gICAgcmV0dXJuIGMgPD0gMC4wMzkyOCA/IGMgLyAxMi45MiA6IE1hdGgucG93KChjICsgMC4wNTUpIC8gMS4wNTUsIDIuNCk7XG4gIH0pLFxuICAgICAgX21hcCRtYXAyID0gX3NsaWNlZFRvQXJyYXkoX21hcCRtYXAsIDMpLFxuICAgICAgciA9IF9tYXAkbWFwMlswXSxcbiAgICAgIGcgPSBfbWFwJG1hcDJbMV0sXG4gICAgICBiID0gX21hcCRtYXAyWzJdO1xuXG4gIHZhciBsdW1pbmFuY2UgPSAwLjIxMjYgKiByICsgMC43MTUyICogZyArIDAuMDcyMiAqIGI7XG4gIHJldHVybiBsdW1pbmFuY2UgPD0gMC4xNzk7XG59IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZEhleChoZXgpIHtcbiAgcmV0dXJuIC8oXiNbMC05QS1GXXs2fSQpfCheI1swLTlBLUZdezN9JCkvaS50ZXN0KGhleCk7XG59IiwgImZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHsgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHsgaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgaXRlcltTeW1ib2wuaXRlcmF0b3JdICE9IG51bGwgfHwgaXRlcltcIkBAaXRlcmF0b3JcIl0gIT0gbnVsbCkgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkoYXJyKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBjaHJvbWEgZnJvbSAnY2hyb21hLWpzJztcbmltcG9ydCB7IGNvbG9yUGFsZXR0ZSB9IGZyb20gJy4vY29sb3JfcGFsZXR0ZSc7XG5cbnZhciBmbGF0dGVuID0gZnVuY3Rpb24gZmxhdHRlbihhcnIpIHtcbiAgdmFyIF9yZWY7XG5cbiAgcmV0dXJuIChfcmVmID0gW10pLmNvbmNhdC5hcHBseShfcmVmLCBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSk7XG59O1xuXG52YXIgZXVpUGFsZXR0ZSA9IGZ1bmN0aW9uIGV1aVBhbGV0dGUoY29sb3JzLCBzdGVwcykge1xuICB2YXIgZGl2ZXJnZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogZmFsc2U7XG4gIHZhciBjYXRlZ29yaWNhbCA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDogdHJ1ZTtcblxuICAvLyBUaGlzIGZ1bmN0aW9uIGFsc28gdHJpbXMgdGhlIGZpcnN0IGNvbG9yIHNvIHdoaXRlL2JsYWNrIGlzIG5ldmVyIGEgY29sb3JcbiAgaWYgKCFkaXZlcmdlICYmIHN0ZXBzID4gMSkge1xuICAgIHZhciBwYWxldHRlID0gY29sb3JQYWxldHRlKGNvbG9ycywgc3RlcHMgKyAxKTtcbiAgICBwYWxldHRlLnNoaWZ0KCk7XG4gICAgcmV0dXJuIHBhbGV0dGU7XG4gIH1cblxuICByZXR1cm4gY29sb3JQYWxldHRlKGNvbG9ycywgc3RlcHMsIGRpdmVyZ2UsIGNhdGVnb3JpY2FsKTtcbn07XG5cbmV4cG9ydCB2YXIgZXVpUGFsZXR0ZUNvbG9yQmxpbmQgPSBmdW5jdGlvbiBldWlQYWxldHRlQ29sb3JCbGluZCgpIHtcbiAgdmFyIF9yZWYyID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fSxcbiAgICAgIF9yZWYyJHJvdGF0aW9ucyA9IF9yZWYyLnJvdGF0aW9ucyxcbiAgICAgIHJvdGF0aW9ucyA9IF9yZWYyJHJvdGF0aW9ucyA9PT0gdm9pZCAwID8gMSA6IF9yZWYyJHJvdGF0aW9ucyxcbiAgICAgIF9yZWYyJG9yZGVyID0gX3JlZjIub3JkZXIsXG4gICAgICBvcmRlciA9IF9yZWYyJG9yZGVyID09PSB2b2lkIDAgPyAnYXBwZW5kJyA6IF9yZWYyJG9yZGVyLFxuICAgICAgX3JlZjIkZGlyZWN0aW9uID0gX3JlZjIuZGlyZWN0aW9uLFxuICAgICAgZGlyZWN0aW9uID0gX3JlZjIkZGlyZWN0aW9uID09PSB2b2lkIDAgPyAnbGlnaHRlcicgOiBfcmVmMiRkaXJlY3Rpb24sXG4gICAgICBfcmVmMiRzb3J0QnkgPSBfcmVmMi5zb3J0QnksXG4gICAgICBzb3J0QnkgPSBfcmVmMiRzb3J0QnkgPT09IHZvaWQgMCA/ICdkZWZhdWx0JyA6IF9yZWYyJHNvcnRCeSxcbiAgICAgIF9yZWYyJHNvcnRTaGlmdCA9IF9yZWYyLnNvcnRTaGlmdCxcbiAgICAgIHNvcnRTaGlmdCA9IF9yZWYyJHNvcnRTaGlmdCA9PT0gdm9pZCAwID8gJy0xMDAnIDogX3JlZjIkc29ydFNoaWZ0O1xuXG4gIHZhciBjb2xvcnMgPSBbXTtcbiAgdmFyIGJhc2UgPSBbJyM1NEIzOTknLCAvLyAwIGdyZWVuXG4gICcjNjA5MkMwJywgLy8gMSBibHVlXG4gICcjRDM2MDg2JywgLy8gMiBkYXJrIHBpbmtcbiAgJyM5MTcwQjgnLCAvLyAzIHB1cnBsZVxuICAnI0NBOEVBRScsIC8vIDQgbGlnaHQgcGlua1xuICAnI0Q2QkY1NycsIC8vIDUgeWVsbG93XG4gICcjQjlBODg4JywgLy8gNiB0YW5cbiAgJyNEQThCNDUnLCAvLyA3IG9yYW5nZVxuICAnI0FBNjU1NicsIC8vIDggYnJvd25cbiAgJyNFNzY2NEMnIC8vIDkgcmVkXG4gIF07XG5cbiAgaWYgKHNvcnRCeSA9PT0gJ25hdHVyYWwnKSB7XG4gICAgLy8gU29ydCB0aGUgY29sb3JzIGJhc2VkIG9uIHRoZSBjb2xvciB3aGVlbCwgYnV0IHNoaWZ0aW5nIHRoZSB2YWx1ZXMgYmFzZWQgb24gc29ydFNoaWZ0XG4gICAgYmFzZSA9IF90b0NvbnN1bWFibGVBcnJheShiYXNlKS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gY2hyb21hKGEpLnNldCgnaHNsLmgnLCBzb3J0U2hpZnQpLmhzbCgpWzBdIC0gY2hyb21hKGIpLnNldCgnaHNsLmgnLCBzb3J0U2hpZnQpLmhzbCgpWzBdO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKHJvdGF0aW9ucyA+IDEpIHtcbiAgICB2YXIgcGFsZXR0ZXMgPSBiYXNlLm1hcChmdW5jdGlvbiAoY29sb3IpIHtcbiAgICAgIC8vIENyZWF0ZSB0aGUgZGFya2VzdCBhbmQgbGlnaHRlc3QgdmVyc2lvbnMgb2YgZWFjaCBjb2xvciB1c2luZyBibGFjayBhbmQgd2hpdGVcbiAgICAgIHZhciBwYWxldHRlID0gY29sb3JQYWxldHRlKFsnYmxhY2snLCBjb2xvciwgJ3doaXRlJ10sIDUsIGZhbHNlLCB0cnVlKTsgLy8gVGhlbiByZW1vdmluZyB0aGUgZXh0cmVtZXNcblxuICAgICAgcGFsZXR0ZS5wb3AoKTtcbiAgICAgIHBhbGV0dGUuc2hpZnQoKTtcblxuICAgICAgc3dpdGNoIChkaXJlY3Rpb24pIHtcbiAgICAgICAgY2FzZSAnbGlnaHRlcic6XG4gICAgICAgICAgcmV0dXJuIGNvbG9yUGFsZXR0ZShbcGFsZXR0ZVsxXSwgcGFsZXR0ZVsyXV0sIHJvdGF0aW9ucywgZmFsc2UsIHRydWUpO1xuXG4gICAgICAgIGNhc2UgJ2Rhcmtlcic6XG4gICAgICAgICAgcmV0dXJuIGNvbG9yUGFsZXR0ZShbcGFsZXR0ZVsxXSwgcGFsZXR0ZVswXV0sIHJvdGF0aW9ucywgZmFsc2UsIHRydWUpO1xuXG4gICAgICAgIGNhc2UgJ2JvdGgnOlxuICAgICAgICAgIHJldHVybiBjb2xvclBhbGV0dGUocGFsZXR0ZSwgcm90YXRpb25zLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAob3JkZXIgPT09ICdncm91cCcpIHtcbiAgICAgIGNvbG9ycyA9IGZsYXR0ZW4ocGFsZXR0ZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgX2xvb3AgPSBmdW5jdGlvbiBfbG9vcChpKSB7XG4gICAgICAgIHZhciBfY29sb3JzO1xuXG4gICAgICAgIHZhciByb3RhdGlvbiA9IHBhbGV0dGVzLm1hcChmdW5jdGlvbiAocGFsZXR0ZSkge1xuICAgICAgICAgIHJldHVybiBwYWxldHRlW2ldO1xuICAgICAgICB9KTtcblxuICAgICAgICAoX2NvbG9ycyA9IGNvbG9ycykucHVzaC5hcHBseShfY29sb3JzLCBfdG9Db25zdW1hYmxlQXJyYXkocm90YXRpb24pKTtcbiAgICAgIH07XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm90YXRpb25zOyBpKyspIHtcbiAgICAgICAgX2xvb3AoaSk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNvbG9ycyA9IGJhc2U7XG4gIH1cblxuICByZXR1cm4gY29sb3JzO1xufTtcbi8qKlxuICogQ29sb3IgYmxpbmQgcGFsZXR0ZSB3aXRoIHRleHQgaXMgbWVhbnQgZm9yIHVzZSB3aGVuIHRleHQgaXMgYXBwbGllZCBvbiB0b3Agb2YgdGhlIGNvbG9yLlxuICogSXQgaW5jcmVhc2VzIHRoZSBicmlnaHRuZXNzIG9mIHRoZSBjb2xvciB0byBnaXZlIHRoZSB0ZXh0IG1vcmUgY29udHJhc3QuXG4gKi9cblxuZXhwb3J0IHZhciBldWlQYWxldHRlQ29sb3JCbGluZEJlaGluZFRleHQgPSBmdW5jdGlvbiBldWlQYWxldHRlQ29sb3JCbGluZEJlaGluZFRleHQoKSB7XG4gIHZhciBwYWxldHRlUHJvcHMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICB2YXIgb3JpZ2luYWxQYWxldHRlID0gZXVpUGFsZXR0ZUNvbG9yQmxpbmQocGFsZXR0ZVByb3BzKTtcbiAgdmFyIG5ld1BhbGV0dGUgPSBvcmlnaW5hbFBhbGV0dGUubWFwKGZ1bmN0aW9uIChjb2xvcikge1xuICAgIHJldHVybiBjaHJvbWEoY29sb3IpLmJyaWdodGVuKDAuNSkuaGV4KCk7XG4gIH0pO1xuICByZXR1cm4gbmV3UGFsZXR0ZTtcbn07XG5leHBvcnQgdmFyIGV1aVBhbGV0dGVGb3JMaWdodEJhY2tncm91bmQgPSBmdW5jdGlvbiBldWlQYWxldHRlRm9yTGlnaHRCYWNrZ3JvdW5kKCkge1xuICByZXR1cm4gWycjMDA2QkI0JywgJyMwMTdENzMnLCAnI0Y1QTcwMCcsICcjQkQyNzFFJywgJyNERDBBNzMnXTtcbn07XG5leHBvcnQgdmFyIGV1aVBhbGV0dGVGb3JEYXJrQmFja2dyb3VuZCA9IGZ1bmN0aW9uIGV1aVBhbGV0dGVGb3JEYXJrQmFja2dyb3VuZCgpIHtcbiAgcmV0dXJuIFsnIzFCQTlGNScsICcjN0RFMkQxJywgJyNGOTkwQzAnLCAnI0Y2NicsICcjRkZDRTdBJ107XG59O1xudmFyIHBvc2l0aXZlQ29sb3IgPSAnIzIwOTI4MCc7XG52YXIgbmVnYXRpdmVDb2xvciA9ICcjQ0M1NjQyJztcbnZhciBsaWdodE5lZ2F0aXZlQ29sb3IgPSBldWlQYWxldHRlQ29sb3JCbGluZCgpWzldO1xudmFyIGNvb2xBcnJheSA9IFtldWlQYWxldHRlQ29sb3JCbGluZCgpWzFdLCAnIzYwOTJDMCddO1xudmFyIHdhcm1BcnJheSA9IFtldWlQYWxldHRlQ29sb3JCbGluZCgpWzddLCBldWlQYWxldHRlQ29sb3JCbGluZCgpWzldXTtcbmV4cG9ydCB2YXIgZXVpUGFsZXR0ZUZvclN0YXR1cyA9IGZ1bmN0aW9uIGV1aVBhbGV0dGVGb3JTdGF0dXMoc3RlcHMpIHtcbiAgaWYgKHN0ZXBzID09PSAxKSB7XG4gICAgcmV0dXJuIFtwb3NpdGl2ZUNvbG9yXTtcbiAgfVxuXG4gIGlmIChzdGVwcyA8PSAzKSB7XG4gICAgcmV0dXJuIGV1aVBhbGV0dGUoW3Bvc2l0aXZlQ29sb3IsIGV1aVBhbGV0dGVDb2xvckJsaW5kKClbNV0sIG5lZ2F0aXZlQ29sb3JdLCBzdGVwcywgdHJ1ZSk7XG4gIH1cblxuICByZXR1cm4gZXVpUGFsZXR0ZShbcG9zaXRpdmVDb2xvciwgZXVpUGFsZXR0ZUNvbG9yQmxpbmQoKVswXSwgZXVpUGFsZXR0ZUNvbG9yQmxpbmQoKVs1XSwgbGlnaHROZWdhdGl2ZUNvbG9yLCBuZWdhdGl2ZUNvbG9yXSwgc3RlcHMsIHRydWUpO1xufTtcbmV4cG9ydCB2YXIgZXVpUGFsZXR0ZUZvclRlbXBlcmF0dXJlID0gZnVuY3Rpb24gZXVpUGFsZXR0ZUZvclRlbXBlcmF0dXJlKHN0ZXBzKSB7XG4gIHZhciBjb29scyA9IGNvbG9yUGFsZXR0ZShbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGNvb2xBcnJheS5zbGljZSgpLnJldmVyc2UoKSksIFsnI0VCRUZGNSddKSwgMyk7XG4gIHZhciB3YXJtcyA9IGNvbG9yUGFsZXR0ZShbJyNGNEYzREInXS5jb25jYXQod2FybUFycmF5KSwgMyk7XG5cbiAgaWYgKHN0ZXBzID09PSAxKSB7XG4gICAgcmV0dXJuIFtjb29sc1swXV07XG4gIH0gZWxzZSBpZiAoc3RlcHMgPD0gMykge1xuICAgIHJldHVybiBldWlQYWxldHRlKFtjb29sc1swXSwgbGlnaHROZWdhdGl2ZUNvbG9yXSwgc3RlcHMsIHRydWUpO1xuICB9XG5cbiAgcmV0dXJuIGV1aVBhbGV0dGUoW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShjb29scyksIF90b0NvbnN1bWFibGVBcnJheSh3YXJtcykpLCBzdGVwcywgdHJ1ZSk7XG59O1xuZXhwb3J0IHZhciBldWlQYWxldHRlQ29tcGxpbWVudGFyeSA9IGZ1bmN0aW9uIGV1aVBhbGV0dGVDb21wbGltZW50YXJ5KHN0ZXBzKSB7XG4gIGlmIChzdGVwcyA9PT0gMSkge1xuICAgIHJldHVybiBbZXVpUGFsZXR0ZUNvbG9yQmxpbmQoKVsxXV07XG4gIH1cblxuICByZXR1cm4gZXVpUGFsZXR0ZShbZXVpUGFsZXR0ZUNvbG9yQmxpbmQoKVsxXSwgZXVpUGFsZXR0ZUNvbG9yQmxpbmQoKVs3XV0sIHN0ZXBzLCB0cnVlKTtcbn07XG5leHBvcnQgdmFyIGV1aVBhbGV0dGVOZWdhdGl2ZSA9IGZ1bmN0aW9uIGV1aVBhbGV0dGVOZWdhdGl2ZShzdGVwcykge1xuICBpZiAoc3RlcHMgPT09IDEpIHtcbiAgICByZXR1cm4gW2xpZ2h0TmVnYXRpdmVDb2xvcl07XG4gIH1cblxuICByZXR1cm4gZXVpUGFsZXR0ZShbJ3doaXRlJywgbmVnYXRpdmVDb2xvcl0sIHN0ZXBzKTtcbn07XG5leHBvcnQgdmFyIGV1aVBhbGV0dGVQb3NpdGl2ZSA9IGZ1bmN0aW9uIGV1aVBhbGV0dGVQb3NpdGl2ZShzdGVwcykge1xuICBpZiAoc3RlcHMgPT09IDEpIHtcbiAgICByZXR1cm4gW2V1aVBhbGV0dGVDb2xvckJsaW5kKClbMF1dO1xuICB9XG5cbiAgcmV0dXJuIGV1aVBhbGV0dGUoWyd3aGl0ZScsIHBvc2l0aXZlQ29sb3JdLCBzdGVwcyk7XG59O1xuZXhwb3J0IHZhciBldWlQYWxldHRlQ29vbCA9IGZ1bmN0aW9uIGV1aVBhbGV0dGVDb29sKHN0ZXBzKSB7XG4gIGlmIChzdGVwcyA9PT0gMSkge1xuICAgIHJldHVybiBbY29vbEFycmF5WzFdXTtcbiAgfVxuXG4gIHJldHVybiBldWlQYWxldHRlKFsnd2hpdGUnXS5jb25jYXQoY29vbEFycmF5KSwgc3RlcHMpO1xufTtcbmV4cG9ydCB2YXIgZXVpUGFsZXR0ZVdhcm0gPSBmdW5jdGlvbiBldWlQYWxldHRlV2FybShzdGVwcykge1xuICBpZiAoc3RlcHMgPT09IDEpIHtcbiAgICByZXR1cm4gW2xpZ2h0TmVnYXRpdmVDb2xvcl07XG4gIH1cblxuICByZXR1cm4gZXVpUGFsZXR0ZShbJyNGQkZCREMnXS5jb25jYXQod2FybUFycmF5KSwgc3RlcHMpO1xufTtcbmV4cG9ydCB2YXIgZXVpUGFsZXR0ZUdyYXkgPSBmdW5jdGlvbiBldWlQYWxldHRlR3JheShzdGVwcykge1xuICBpZiAoc3RlcHMgPT09IDEpIHtcbiAgICByZXR1cm4gWycjOThhMmIzJ107XG4gIH1cblxuICByZXR1cm4gZXVpUGFsZXR0ZShbJ3doaXRlJywgJyNkM2RhZTYnLCAnIzk4YTJiMycsICcjNjk3MDdkJywgJyMzNDM3NDEnXSwgc3RlcHMsIGZhbHNlKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgY2hyb21hIGZyb20gJ2Nocm9tYS1qcyc7XG5leHBvcnQgdmFyIE1JRF9DT0xPUl9TVE9QID0gJyNFQkVGRjUnO1xuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHRha2VzIGFuIGFycmF5IG9mIGNvbG9ycyBhbmQgcmV0dXJucyBhbiBhcnJheSBvZiBpbnRlcnBvbGF0ZWRcbiAqIGNvbG9ycyBiYXNlZCBvbiB0aGUgbnVtYmVyIG9mIHN0ZXBzL2xlbiBuZWVkZWQgZm9yIHVzZSBpbiBVSSBlbGVtZW50cyBzdWNoIGFzIGNoYXJ0cy5cbiAqIERlcml2ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZ2thL3BhbGV0dGVzIChVbmxpY2Vuc2VkKVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjb2xvclBhbGV0dGUoXG4vKipcbiAqIFRoZSBtYWluIGNvbG9yIGNvZGUgb3IgYXJyYXkgb2YgY29kZXNcbiAqL1xuY29sb3JzKSB7XG4gIHZhciBsZW4gPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IDEwO1xuICB2YXIgZGl2ZXJnaW5nID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBmYWxzZTtcbiAgdmFyIGNhdGVnb3JpY2FsID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiBmYWxzZTtcbiAgdmFyIGhleFN0YXJ0ID0gY29sb3JzLnNsaWNlKCk7XG4gIHZhciBoZXhFbmQgPSBbXTtcbiAgdmFyIGV2ZW4gPSBsZW4gJSAyID09PSAwO1xuICB2YXIgbnVtQ29sb3JzTGVmdCA9IGRpdmVyZ2luZyA/IE1hdGguY2VpbChsZW4gLyAyKSArIChldmVuID8gMSA6IDApIDogbGVuO1xuICB2YXIgbnVtQ29sb3JzUmlnaHQgPSBkaXZlcmdpbmcgPyBNYXRoLmNlaWwobGVuIC8gMikgKyAoZXZlbiA/IDEgOiAwKSA6IDA7IC8vIElmIG9ubHkgYSBzaW5nbGUgY29sb3IgaXMgcHJvdmlkZWQgcHJlcGVuZCB0aGUgbWlkLXBvaW50IGNvbG9yXG5cbiAgaWYgKGhleFN0YXJ0Lmxlbmd0aCA9PT0gMSkge1xuICAgIGhleFN0YXJ0LnVuc2hpZnQoTUlEX0NPTE9SX1NUT1ApO1xuICB9IC8vIElmIGRpdmVyZ2luZywgc3BsaXQgdGhlIHN0YXJ0IGFycmF5IGFuZCBkdXBsaWNhdGUgdGhlIG1pZCBjb2xvclxuXG5cbiAgaWYgKGRpdmVyZ2luZykge1xuICAgIC8vIElmIHRoZXJlJ3Mgbm8gbWlkcG9pbnQsIGNyZWF0ZSBvbmVcbiAgICBpZiAoaGV4U3RhcnQubGVuZ3RoIDwgMykge1xuICAgICAgaGV4U3RhcnRbMl0gPSBoZXhTdGFydFsxXTtcbiAgICAgIGhleFN0YXJ0WzFdID0gTUlEX0NPTE9SX1NUT1A7XG4gICAgfVxuXG4gICAgdmFyIG51bUNvbG9yc0hhbGYgPSBNYXRoLmNlaWwoaGV4U3RhcnQubGVuZ3RoIC8gMik7XG4gICAgdmFyIGNvbG9yc0xlZnQgPSBoZXhTdGFydC5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0sIGluZGV4KSB7XG4gICAgICBpZiAoaW5kZXggPCBudW1Db2xvcnNIYWxmKSB7XG4gICAgICAgIHJldHVybiB0cnVlOyAvLyBrZWVwIGl0XG4gICAgICB9XG4gICAgfSk7XG4gICAgdmFyIGNvbG9yc1JpZ2h0ID0gaGV4U3RhcnQucmV2ZXJzZSgpLmZpbHRlcihmdW5jdGlvbiAoaXRlbSwgaW5kZXgpIHtcbiAgICAgIGlmIChpbmRleCA8IG51bUNvbG9yc0hhbGYpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7IC8vIGtlZXAgaXRcbiAgICAgIH1cbiAgICB9KS5yZXZlcnNlKCk7XG4gICAgaGV4U3RhcnQgPSBjb2xvcnNMZWZ0O1xuICAgIGhleEVuZCA9IGNvbG9yc1JpZ2h0O1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlU3RlcHMoY29sb3JzLCBzdGVwcykge1xuICAgIGlmICghY29sb3JzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGNvbG9ycztcbiAgICB9XG5cbiAgICBpZiAoIWNhdGVnb3JpY2FsKSB7XG4gICAgICByZXR1cm4gY2hyb21hLmJlemllcihjb2xvcnMpLnNjYWxlKCkuY29ycmVjdExpZ2h0bmVzcygpLmNvbG9ycyhzdGVwcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBjaHJvbWEuc2NhbGUoY29sb3JzKS5jb2xvcnMoc3RlcHMpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBzdGVwc0xlZnQgPSBjcmVhdGVTdGVwcyhoZXhTdGFydCwgbnVtQ29sb3JzTGVmdCk7XG4gIHZhciBzdGVwc1JpZ2h0ID0gY3JlYXRlU3RlcHMoaGV4RW5kLCBudW1Db2xvcnNSaWdodCk7XG4gIHJldHVybiAoZXZlbiAmJiBkaXZlcmdpbmcgPyBzdGVwc0xlZnQuc2xpY2UoMCwgc3RlcHNMZWZ0Lmxlbmd0aCAtIDEpIDogc3RlcHNMZWZ0KS5jb25jYXQoc3RlcHNSaWdodC5zbGljZSgxKSk7XG59IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgY2hyb21hIGZyb20gJ2Nocm9tYS1qcyc7XG5pbXBvcnQgeyBpc1ZhbGlkSGV4IH0gZnJvbSAnLi9pc192YWxpZF9oZXgnO1xuXG52YXIgaW5PcmlnaW5hbEZvcm1hdCA9IGZ1bmN0aW9uIGluT3JpZ2luYWxGb3JtYXQob3JpZ2luYWxDb2xvciwgbmV3Q29sb3IpIHtcbiAgcmV0dXJuIGlzVmFsaWRIZXgob3JpZ2luYWxDb2xvcikgPyBuZXdDb2xvci5oZXgoKSA6IG5ld0NvbG9yLmNzcygpO1xufTtcbi8qKlxuICogTWFrZXMgYSBjb2xvciBtb3JlIHRyYW5zcGFyZW50LlxuICogQHBhcmFtIGNvbG9yIC0gQ29sb3IgdG8gbWFuaXB1bGF0ZVxuICogQHBhcmFtIGFscGhhIC0gYWxwaGEgY2hhbm5lbCB2YWx1ZS4gRnJvbSAwLTEuXG4gKi9cblxuXG5leHBvcnQgdmFyIHRyYW5zcGFyZW50aXplID0gZnVuY3Rpb24gdHJhbnNwYXJlbnRpemUoY29sb3IsIGFscGhhKSB7XG4gIHJldHVybiBjaHJvbWEoY29sb3IpLmFscGhhKGFscGhhKS5jc3MoKTtcbn07XG4vKipcbiAqIE1peGVzIGEgcHJvdmlkZWQgY29sb3Igd2l0aCB3aGl0ZS5cbiAqIEBwYXJhbSBjb2xvciAtIENvbG9yIHRvIG1peCB3aXRoIHdoaXRlXG4gKiBAcGFyYW0gcmF0aW8gLSBNaXggd2VpZ2h0LiBGcm9tIDAtMS4gTGFyZ2VyIHZhbHVlIGluZGljYXRlcyBtb3JlIHdoaXRlLlxuICovXG5cbmV4cG9ydCB2YXIgdGludCA9IGZ1bmN0aW9uIHRpbnQoY29sb3IsIHJhdGlvKSB7XG4gIHZhciB0aW50ID0gY2hyb21hLm1peChjb2xvciwgJyNmZmYnLCByYXRpbywgJ3JnYicpO1xuICByZXR1cm4gaW5PcmlnaW5hbEZvcm1hdChjb2xvciwgdGludCk7XG59O1xuLyoqXG4gKiBNaXhlcyBhIHByb3ZpZGVkIGNvbG9yIHdpdGggYmxhY2suXG4gKiBAcGFyYW0gY29sb3IgLSBDb2xvciB0byBtaXggd2l0aCBibGFja1xuICogQHBhcmFtIHJhdGlvIC0gTWl4IHdlaWdodC4gRnJvbSAwLTEuIExhcmdlciB2YWx1ZSBpbmRpY2F0ZXMgbW9yZSBibGFjay5cbiAqL1xuXG5leHBvcnQgdmFyIHNoYWRlID0gZnVuY3Rpb24gc2hhZGUoY29sb3IsIHJhdGlvKSB7XG4gIHZhciBzaGFkZSA9IGNocm9tYS5taXgoY29sb3IsICcjMDAwJywgcmF0aW8sICdyZ2InKTtcbiAgcmV0dXJuIGluT3JpZ2luYWxGb3JtYXQoY29sb3IsIHNoYWRlKTtcbn07XG4vKipcbiAqIFJldHVybnMgdGhlIHRpbnRlZCBjb2xvciBmb3IgbGlnaHQgbW9kZSBhbmQgc2hhZGVkIGNvbG9yIGZvciBkYXJrIG1vZGVcbiAqIEBwYXJhbSBjb2xvciAtIENvbG9yIHRvIG1peCB3aXRoIHdoaXRlXG4gKiBAcGFyYW0gcmF0aW8gLSBNaXggd2VpZ2h0LiBGcm9tIDAtMS4gTGFyZ2VyIHZhbHVlIGluZGljYXRlcyBtb3JlIHdoaXRlLlxuICogQHBhcmFtIGNvbG9yTW9kZSAtIExpZ2h0IG9yIGRhcmsgb25seVxuICovXG5cbmV4cG9ydCB2YXIgdGludE9yU2hhZGUgPSBmdW5jdGlvbiB0aW50T3JTaGFkZShjb2xvciwgcmF0aW8sIGNvbG9yTW9kZSkge1xuICByZXR1cm4gY29sb3JNb2RlID09PSAnREFSSycgPyBzaGFkZShjb2xvciwgcmF0aW8pIDogdGludChjb2xvciwgcmF0aW8pO1xufTtcbi8qKlxuICogUmV0dXJucyB0aGUgc2hhZGVkIGNvbG9yIGZvciBsaWdodCBtb2RlIGFuZCB0aW50ZWQgY29sb3IgZm9yIGRhcmsgbW9kZVxuICogQHBhcmFtIGNvbG9yIC0gQ29sb3IgdG8gbWl4IHdpdGggd2hpdGVcbiAqIEBwYXJhbSByYXRpbyAtIE1peCB3ZWlnaHQuIEZyb20gMC0xLiBMYXJnZXIgdmFsdWUgaW5kaWNhdGVzIG1vcmUgd2hpdGUuXG4gKiBAcGFyYW0gY29sb3JNb2RlIC0gTGlnaHQgb3IgZGFyayBvbmx5XG4gKi9cblxuZXhwb3J0IHZhciBzaGFkZU9yVGludCA9IGZ1bmN0aW9uIHNoYWRlT3JUaW50KGNvbG9yLCByYXRpbywgY29sb3JNb2RlKSB7XG4gIHJldHVybiBjb2xvck1vZGUgPT09ICdEQVJLJyA/IHRpbnQoY29sb3IsIHJhdGlvKSA6IHNoYWRlKGNvbG9yLCByYXRpbyk7XG59O1xuLyoqXG4gKiBJbmNyZWFzZXMgdGhlIHNhdHVyYXRpb24gb2YgYSBjb2xvciBieSBtYW5pcHVsYXRpbmcgdGhlIGhzbCBzYXR1cmF0aW9uLlxuICogQHBhcmFtIGNvbG9yIC0gQ29sb3IgdG8gbWFuaXB1bGF0ZVxuICogQHBhcmFtIGFtb3VudCAtIEFtb3VudCB0byBjaGFuZ2UgaW4gYWJzb2x1dGUgdGVybXMuIDAtMS5cbiAqL1xuXG5leHBvcnQgdmFyIHNhdHVyYXRlID0gZnVuY3Rpb24gc2F0dXJhdGUoY29sb3IsIGFtb3VudCkge1xuICB2YXIgc2F0dXJhdGUgPSBjaHJvbWEoY29sb3IpLnNldCgnaHNsLnMnLCBcIitcIi5jb25jYXQoYW1vdW50KSk7XG4gIHJldHVybiBpbk9yaWdpbmFsRm9ybWF0KGNvbG9yLCBzYXR1cmF0ZSk7XG59O1xuLyoqXG4gKiBEZWNyZWFzZXMgdGhlIHNhdHVyYXRpb24gb2YgYSBjb2xvciBieSBtYW5pcHVsYXRpbmcgdGhlIGhzbCBzYXR1cmF0aW9uLlxuICogQHBhcmFtIGNvbG9yIC0gQ29sb3IgdG8gbWFuaXB1bGF0ZVxuICogQHBhcmFtIGFtb3VudCAtIEFtb3VudCB0byBjaGFuZ2UgaW4gYWJzb2x1dGUgdGVybXMuIDAtMS5cbiAqL1xuXG5leHBvcnQgdmFyIGRlc2F0dXJhdGUgPSBmdW5jdGlvbiBkZXNhdHVyYXRlKGNvbG9yLCBhbW91bnQpIHtcbiAgdmFyIGRlc2F0dXJhdGUgPSBjaHJvbWEoY29sb3IpLnNldCgnaHNsLnMnLCBcIi1cIi5jb25jYXQoYW1vdW50KSk7XG4gIHJldHVybiBpbk9yaWdpbmFsRm9ybWF0KGNvbG9yLCBkZXNhdHVyYXRlKTtcbn07XG4vKipcbiAqIFJldHVybnMgdGhlIGxpZ2h0bmVzcyB2YWx1ZSBvZiBhIGNvbG9yLiAwLTEwMFxuICogQHBhcmFtIGNvbG9yXG4gKi9cblxuZXhwb3J0IHZhciBsaWdodG5lc3MgPSBmdW5jdGlvbiBsaWdodG5lc3MoY29sb3IpIHtcbiAgcmV0dXJuIGNocm9tYShjb2xvcikuZ2V0KCdoc2wubCcpICogMTAwO1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IGNocm9tYSBmcm9tICdjaHJvbWEtanMnO1xuaW1wb3J0IHsgc2hhZGUsIHRpbnQsIGxpZ2h0bmVzcyBhcyBnZXRMaWdodG5lc3MgfSBmcm9tICcuL21hbmlwdWxhdGlvbic7XG5pbXBvcnQgeyBnZXRPbiB9IGZyb20gJy4uL3RoZW1lL3V0aWxzJztcbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBjb2xvciB0aGF0IG1lZXRzIG9yIGV4Y2VlZHMgV0NBRyBsZXZlbCBBQVxuICogQHBhcmFtIGZvcmVncm91bmQgLSBDb2xvciB0byBtYW5pcHVsYXRlXG4gKiBAcGFyYW0gcmF0aW8gLSBBbW91bnQgdG8gY2hhbmdlIGluIGFic29sdXRlIHRlcm1zLiAwLTEwLlxuICogKlxuICogQHBhcmFtIHRoZW1lT3JCYWNrZ3JvdW5kIC0gQ29sb3IgdG8gdXNlIGFzIHRoZSBjb250cmFzdCBiYXNpcyBvciBqdXN0IHBhc3MgRXVpVGhlbWVcbiAqL1xuXG5leHBvcnQgdmFyIG1ha2VIaWdoQ29udHJhc3RDb2xvciA9IGZ1bmN0aW9uIG1ha2VIaWdoQ29udHJhc3RDb2xvcihfZm9yZWdyb3VuZCkge1xuICB2YXIgcmF0aW8gPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IDQuODU7XG4gIHJldHVybiBmdW5jdGlvbiAodGhlbWVPckJhY2tncm91bmQpIHtcbiAgICB2YXIgX2dldE9uO1xuXG4gICAgdmFyIGZvcmVncm91bmQgPSBfdHlwZW9mKHRoZW1lT3JCYWNrZ3JvdW5kKSA9PT0gJ29iamVjdCcgPyAoX2dldE9uID0gZ2V0T24odGhlbWVPckJhY2tncm91bmQsIF9mb3JlZ3JvdW5kKSkgIT09IG51bGwgJiYgX2dldE9uICE9PSB2b2lkIDAgPyBfZ2V0T24gOiBfZm9yZWdyb3VuZCA6IF9mb3JlZ3JvdW5kO1xuICAgIHZhciBiYWNrZ3JvdW5kID0gX3R5cGVvZih0aGVtZU9yQmFja2dyb3VuZCkgPT09ICdvYmplY3QnID8gdGhlbWVPckJhY2tncm91bmQuY29sb3JzLmJvZHkgOiB0aGVtZU9yQmFja2dyb3VuZDtcblxuICAgIGlmIChjaHJvbWEoZm9yZWdyb3VuZCkuYWxwaGEoKSA8IDEgfHwgY2hyb21hKGJhY2tncm91bmQpLmFscGhhKCkgPCAxKSB7XG4gICAgICBjb25zb2xlLndhcm4oXCJDb250cmFzdCBjYW5ub3QgYmUgYWNjdXJhdGVseSBjYWxjdWxhdGVkIHdoZW4gY29sb3JzIGhhdmUgYWxwaGEgY2hhbm5lbCBvcGFjaXR5LiBNYWtlIHN1cmUgdGhlIHByb3ZpZGVkIGZvcmVncm91bmQgYW5kIGJhY2tncm91bmQgY29sb3JzIGhhdmUgbm8gdHJhbnNwYXJlbmN5OlxcblxcbkZvcmVncm91bmQ6IFwiLmNvbmNhdChmb3JlZ3JvdW5kLCBcIlxcbkJhY2tncm91bmQ6IFwiKS5jb25jYXQoYmFja2dyb3VuZCkpO1xuICAgIH1cblxuICAgIHZhciBjb250cmFzdCA9IGNocm9tYS5jb250cmFzdChmb3JlZ3JvdW5kLCBiYWNrZ3JvdW5kKTsgLy8gRGV0ZXJtaW5lIHRoZSBsaWdodG5lc3MgZmFjdG9yIG9mIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIGZpcnN0IHRvXG4gICAgLy8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gc2hhZGUgb3IgdGludCB0aGUgZm9yZWdyb3VuZC5cblxuICAgIHZhciBicmlnaHRuZXNzID0gZ2V0TGlnaHRuZXNzKGJhY2tncm91bmQpO1xuICAgIHZhciBoaWdoQ29udHJhc3RUZXh0Q29sb3IgPSBmb3JlZ3JvdW5kO1xuXG4gICAgd2hpbGUgKGNvbnRyYXN0IDwgcmF0aW8pIHtcbiAgICAgIGlmIChicmlnaHRuZXNzID4gNTApIHtcbiAgICAgICAgaGlnaENvbnRyYXN0VGV4dENvbG9yID0gc2hhZGUoaGlnaENvbnRyYXN0VGV4dENvbG9yLCAwLjA1KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhpZ2hDb250cmFzdFRleHRDb2xvciA9IHRpbnQoaGlnaENvbnRyYXN0VGV4dENvbG9yLCAwLjA1KTtcbiAgICAgIH1cblxuICAgICAgY29udHJhc3QgPSBjaHJvbWEuY29udHJhc3QoaGlnaENvbnRyYXN0VGV4dENvbG9yLCBiYWNrZ3JvdW5kKTtcbiAgICAgIHZhciBsaWdodG5lc3MgPSBnZXRMaWdodG5lc3MoaGlnaENvbnRyYXN0VGV4dENvbG9yKTtcblxuICAgICAgaWYgKGxpZ2h0bmVzcyA8IDUpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdIaWdoIGVub3VnaCBjb250cmFzdCBjb3VsZCBub3QgYmUgZGV0ZXJtaW5lZC4gTW9zdCBsaWtlbHkgeW91ciBiYWNrZ3JvdW5kIGNvbG9yIGRvZXMgbm90IGFkanVzdCBmb3IgbGlnaHQgbW9kZS4nKTtcbiAgICAgICAgcmV0dXJuIGhpZ2hDb250cmFzdFRleHRDb2xvcjtcbiAgICAgIH1cblxuICAgICAgaWYgKGxpZ2h0bmVzcyA+IDk1KSB7XG4gICAgICAgIGNvbnNvbGUud2FybignSGlnaCBlbm91Z2ggY29udHJhc3QgY291bGQgbm90IGJlIGRldGVybWluZWQuIE1vc3QgbGlrZWx5IHlvdXIgYmFja2dyb3VuZCBjb2xvciBkb2VzIG5vdCBhZGp1c3QgZm9yIGRhcmsgbW9kZS4nKTtcbiAgICAgICAgcmV0dXJuIGhpZ2hDb250cmFzdFRleHRDb2xvcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY2hyb21hKGhpZ2hDb250cmFzdFRleHRDb2xvcikuaGV4KCk7XG4gIH07XG59O1xuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IGNvbG9yIHdpdGggaW5jcmVhc2VkIGNvbnRyYXN0XG4gKiBEaXNhYmxlZCBjb250ZW50IG9ubHkgbmVlZHMgYSBjb250cmFzdCBvZiBhdCBsZWFzdCAyIGJlY2F1c2UgdGhlcmUgaXMgbm8gaW50ZXJhY3Rpb24gYXZhaWxhYmxlXG4gKiBAcGFyYW0gZm9yZWdyb3VuZCAtIENvbG9yIHRvIG1hbmlwdWxhdGVcbiAqIEBwYXJhbSByYXRpbyAtIEFtb3VudCB0byBjaGFuZ2UgaW4gYWJzb2x1dGUgdGVybXMuIDAtMTAuXG4gKiAqXG4gKiBAcGFyYW0gdGhlbWVPckJhY2tncm91bmQgLSBDb2xvciB0byB1c2UgYXMgdGhlIGNvbnRyYXN0IGJhc2lzXG4gKi9cblxuZXhwb3J0IHZhciBtYWtlRGlzYWJsZWRDb250cmFzdENvbG9yID0gZnVuY3Rpb24gbWFrZURpc2FibGVkQ29udHJhc3RDb2xvcihjb2xvcikge1xuICB2YXIgcmF0aW8gPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IDI7XG4gIHJldHVybiBmdW5jdGlvbiAodGhlbWVPckJhY2tncm91bmQpIHtcbiAgICByZXR1cm4gbWFrZUhpZ2hDb250cmFzdENvbG9yKGNvbG9yLCByYXRpbykodGhlbWVPckJhY2tncm91bmQpO1xuICB9O1xufTsiLCAiZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgeyB2YXIgX2kgPSBhcnIgPT0gbnVsbCA/IG51bGwgOiB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGFycltTeW1ib2wuaXRlcmF0b3JdIHx8IGFycltcIkBAaXRlcmF0b3JcIl07IGlmIChfaSA9PSBudWxsKSByZXR1cm47IHZhciBfYXJyID0gW107IHZhciBfbiA9IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIgX3MsIF9lOyB0cnkgeyBmb3IgKF9pID0gX2kuY2FsbChhcnIpOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7IF9hcnIucHVzaChfcy52YWx1ZSk7IGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhazsgfSB9IGNhdGNoIChlcnIpIHsgX2QgPSB0cnVlOyBfZSA9IGVycjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSAhPSBudWxsKSBfaVtcInJldHVyblwiXSgpOyB9IGZpbmFsbHkgeyBpZiAoX2QpIHRocm93IF9lOyB9IH0gcmV0dXJuIF9hcnI7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBzaGFkZSwgdGludCB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL2NvbG9yJztcbmltcG9ydCB7IGNvbXB1dGVkIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvdGhlbWUvdXRpbHMnO1xuaW1wb3J0IHsgbWFrZUhpZ2hDb250cmFzdENvbG9yLCBtYWtlRGlzYWJsZWRDb250cmFzdENvbG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvY29sb3IvY29udHJhc3QnO1xuXG4vKlxuICogTElHSFQgVEhFTUVcbiAqIE9ubHkgc3BsaXQgdXAgaW4gdGhlIGxpZ2h0IHRoZW1lIHRvIGFjY2VzcyB0aGUga2V5cyBieSBzZWN0aW9uIGluIHRoZSBkb2NzXG4gKi9cbmV4cG9ydCB2YXIgYnJhbmRfY29sb3JzID0ge1xuICBwcmltYXJ5OiAnIzA3QycsXG4gIGFjY2VudDogJyNGMDRFOTgnLFxuICBzdWNjZXNzOiAnIzAwQkZCMycsXG4gIHdhcm5pbmc6ICcjRkVDNTE0JyxcbiAgZGFuZ2VyOiAnI0JEMjcxRSdcbn07XG5leHBvcnQgdmFyIGJyYW5kX3RleHRfY29sb3JzID0ge1xuICBwcmltYXJ5VGV4dDogY29tcHV0ZWQobWFrZUhpZ2hDb250cmFzdENvbG9yKCdjb2xvcnMucHJpbWFyeScpKSxcbiAgYWNjZW50VGV4dDogY29tcHV0ZWQobWFrZUhpZ2hDb250cmFzdENvbG9yKCdjb2xvcnMuYWNjZW50JykpLFxuICBzdWNjZXNzVGV4dDogY29tcHV0ZWQobWFrZUhpZ2hDb250cmFzdENvbG9yKCdjb2xvcnMuc3VjY2VzcycpKSxcbiAgd2FybmluZ1RleHQ6IGNvbXB1dGVkKG1ha2VIaWdoQ29udHJhc3RDb2xvcignY29sb3JzLndhcm5pbmcnKSksXG4gIGRhbmdlclRleHQ6IGNvbXB1dGVkKG1ha2VIaWdoQ29udHJhc3RDb2xvcignY29sb3JzLmRhbmdlcicpKVxufTtcbmV4cG9ydCB2YXIgc2hhZGVfY29sb3JzID0ge1xuICBlbXB0eVNoYWRlOiAnI0ZGRicsXG4gIGxpZ2h0ZXN0U2hhZGU6ICcjRjFGNEZBJyxcbiAgbGlnaHRTaGFkZTogJyNEM0RBRTYnLFxuICBtZWRpdW1TaGFkZTogJyM5OEEyQjMnLFxuICBkYXJrU2hhZGU6ICcjNjk3MDdEJyxcbiAgZGFya2VzdFNoYWRlOiAnIzM0Mzc0MScsXG4gIGZ1bGxTaGFkZTogJyMwMDAnXG59O1xuZXhwb3J0IHZhciBzcGVjaWFsX2NvbG9ycyA9IHtcbiAgYm9keTogY29tcHV0ZWQoZnVuY3Rpb24gKF9yZWYpIHtcbiAgICB2YXIgX3JlZjIgPSBfc2xpY2VkVG9BcnJheShfcmVmLCAxKSxcbiAgICAgICAgbGlnaHRlc3RTaGFkZSA9IF9yZWYyWzBdO1xuXG4gICAgcmV0dXJuIHRpbnQobGlnaHRlc3RTaGFkZSwgMC40KTtcbiAgfSwgWydjb2xvcnMubGlnaHRlc3RTaGFkZSddKSxcbiAgaGlnaGxpZ2h0OiBjb21wdXRlZChmdW5jdGlvbiAoX3JlZjMpIHtcbiAgICB2YXIgX3JlZjQgPSBfc2xpY2VkVG9BcnJheShfcmVmMywgMSksXG4gICAgICAgIHdhcm5pbmcgPSBfcmVmNFswXTtcblxuICAgIHJldHVybiB0aW50KHdhcm5pbmcsIDAuOSk7XG4gIH0sIFsnY29sb3JzLndhcm5pbmcnXSksXG4gIGRpc2FibGVkOiAnI0FCQjRDNCcsXG4gIGRpc2FibGVkVGV4dDogY29tcHV0ZWQobWFrZURpc2FibGVkQ29udHJhc3RDb2xvcignY29sb3JzLmRpc2FibGVkJykpLFxuICBzaGFkb3c6IGNvbXB1dGVkKGZ1bmN0aW9uIChfcmVmNSkge1xuICAgIHZhciBjb2xvcnMgPSBfcmVmNS5jb2xvcnM7XG4gICAgcmV0dXJuIGNvbG9ycy5pbms7XG4gIH0pXG59O1xuZXhwb3J0IHZhciB0ZXh0X2NvbG9ycyA9IHtcbiAgdGV4dDogY29tcHV0ZWQoZnVuY3Rpb24gKF9yZWY2KSB7XG4gICAgdmFyIF9yZWY3ID0gX3NsaWNlZFRvQXJyYXkoX3JlZjYsIDEpLFxuICAgICAgICBkYXJrZXN0U2hhZGUgPSBfcmVmN1swXTtcblxuICAgIHJldHVybiBkYXJrZXN0U2hhZGU7XG4gIH0sIFsnY29sb3JzLmRhcmtlc3RTaGFkZSddKSxcbiAgdGl0bGU6IGNvbXB1dGVkKGZ1bmN0aW9uIChfcmVmOCkge1xuICAgIHZhciBfcmVmOSA9IF9zbGljZWRUb0FycmF5KF9yZWY4LCAxKSxcbiAgICAgICAgdGV4dCA9IF9yZWY5WzBdO1xuXG4gICAgcmV0dXJuIHNoYWRlKHRleHQsIDAuNSk7XG4gIH0sIFsnY29sb3JzLnRleHQnXSksXG4gIHN1YmR1ZWRUZXh0OiBjb21wdXRlZChtYWtlSGlnaENvbnRyYXN0Q29sb3IoJ2NvbG9ycy5kYXJrU2hhZGUnKSksXG4gIGxpbms6IGNvbXB1dGVkKGZ1bmN0aW9uIChfcmVmMTApIHtcbiAgICB2YXIgX3JlZjExID0gX3NsaWNlZFRvQXJyYXkoX3JlZjEwLCAxKSxcbiAgICAgICAgcHJpbWFyeVRleHQgPSBfcmVmMTFbMF07XG5cbiAgICByZXR1cm4gcHJpbWFyeVRleHQ7XG4gIH0sIFsnY29sb3JzLnByaW1hcnlUZXh0J10pXG59O1xuZXhwb3J0IHZhciBsaWdodF9jb2xvcnMgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGJyYW5kX2NvbG9ycyksIHNoYWRlX2NvbG9ycyksIHNwZWNpYWxfY29sb3JzKSwgYnJhbmRfdGV4dF9jb2xvcnMpLCB0ZXh0X2NvbG9ycyk7XG4vKlxuICogREFSSyBUSEVNRVxuICovXG5cbmV4cG9ydCB2YXIgZGFya19zaGFkZXMgPSB7XG4gIGVtcHR5U2hhZGU6ICcjMUQxRTI0JyxcbiAgbGlnaHRlc3RTaGFkZTogJyMyNTI2MkUnLFxuICBsaWdodFNoYWRlOiAnIzM0Mzc0MScsXG4gIG1lZGl1bVNoYWRlOiAnIzUzNTk2NicsXG4gIGRhcmtTaGFkZTogJyM5OEEyQjMnLFxuICBkYXJrZXN0U2hhZGU6ICcjRDREQUU1JyxcbiAgZnVsbFNoYWRlOiAnI0ZGRidcbn07XG5leHBvcnQgdmFyIGRhcmtfY29sb3JzX2FtcyA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHtcbiAgLy8gQnJhbmRcbiAgcHJpbWFyeTogJyMzNkEyRUYnLFxuICBhY2NlbnQ6ICcjRjY4RkJFJyxcbiAgc3VjY2VzczogJyM3RERFRDgnLFxuICB3YXJuaW5nOiAnI0YzRDM3MScsXG4gIGRhbmdlcjogJyNGODZCNjMnXG59LCBkYXJrX3NoYWRlcyksIHt9LCB7XG4gIC8vIFNwZWNpYWxcbiAgYm9keTogY29tcHV0ZWQoZnVuY3Rpb24gKF9yZWYxMikge1xuICAgIHZhciBfcmVmMTMgPSBfc2xpY2VkVG9BcnJheShfcmVmMTIsIDEpLFxuICAgICAgICBsaWdodGVzdFNoYWRlID0gX3JlZjEzWzBdO1xuXG4gICAgcmV0dXJuIHNoYWRlKGxpZ2h0ZXN0U2hhZGUsIDAuNDUpO1xuICB9LCBbJ2NvbG9ycy5saWdodGVzdFNoYWRlJ10pLFxuICBoaWdobGlnaHQ6ICcjMkUyRDI1JyxcbiAgZGlzYWJsZWQ6ICcjNTE1NzYxJyxcbiAgZGlzYWJsZWRUZXh0OiBjb21wdXRlZChtYWtlRGlzYWJsZWRDb250cmFzdENvbG9yKCdjb2xvcnMuZGlzYWJsZWQnKSksXG4gIHNoYWRvdzogY29tcHV0ZWQoZnVuY3Rpb24gKF9yZWYxNCkge1xuICAgIHZhciBjb2xvcnMgPSBfcmVmMTQuY29sb3JzO1xuICAgIHJldHVybiBjb2xvcnMuaW5rO1xuICB9KVxufSwgYnJhbmRfdGV4dF9jb2xvcnMpLCB7fSwge1xuICAvLyBUZXh0XG4gIHRleHQ6ICcjREZFNUVGJyxcbiAgdGl0bGU6IGNvbXB1dGVkKGZ1bmN0aW9uIChfcmVmMTUpIHtcbiAgICB2YXIgX3JlZjE2ID0gX3NsaWNlZFRvQXJyYXkoX3JlZjE1LCAxKSxcbiAgICAgICAgdGV4dCA9IF9yZWYxNlswXTtcblxuICAgIHJldHVybiB0ZXh0O1xuICB9LCBbJ2NvbG9ycy50ZXh0J10pLFxuICBzdWJkdWVkVGV4dDogY29tcHV0ZWQobWFrZUhpZ2hDb250cmFzdENvbG9yKCdjb2xvcnMubWVkaXVtU2hhZGUnKSksXG4gIGxpbms6IGNvbXB1dGVkKGZ1bmN0aW9uIChfcmVmMTcpIHtcbiAgICB2YXIgX3JlZjE4ID0gX3NsaWNlZFRvQXJyYXkoX3JlZjE3LCAxKSxcbiAgICAgICAgcHJpbWFyeVRleHQgPSBfcmVmMThbMF07XG5cbiAgICByZXR1cm4gcHJpbWFyeVRleHQ7XG4gIH0sIFsnY29sb3JzLnByaW1hcnlUZXh0J10pXG59KTtcbi8qXG4gKiBGVUxMXG4gKi9cblxuZXhwb3J0IHZhciBjb2xvcnMgPSB7XG4gIGdob3N0OiAnI0ZGRicsXG4gIGluazogJyMwMDAnLFxuICBMSUdIVDogbGlnaHRfY29sb3JzLFxuICBEQVJLOiBkYXJrX2NvbG9yc19hbXNcbn07IiwgImZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmV4cG9ydCB2YXIgYW5pbWF0aW9uX3NwZWVkID0ge1xuICBleHRyYUZhc3Q6ICc5MG1zJyxcbiAgZmFzdDogJzE1MG1zJyxcbiAgbm9ybWFsOiAnMjUwbXMnLFxuICBzbG93OiAnMzUwbXMnLFxuICBleHRyYVNsb3c6ICc1MDBtcydcbn07XG5leHBvcnQgdmFyIGFuaW1hdGlvbl9lYXNlID0ge1xuICBib3VuY2U6ICdjdWJpYy1iZXppZXIoLjM0LCAxLjYxLCAuNywgMSknLFxuICByZXNpc3RhbmNlOiAnY3ViaWMtYmV6aWVyKC42OTQsIC4wNDgyLCAuMzM1LCAxKSdcbn07XG5leHBvcnQgdmFyIGFuaW1hdGlvbiA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgYW5pbWF0aW9uX3NwZWVkKSwgYW5pbWF0aW9uX2Vhc2UpOyIsICJmdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBrZXlzT2YgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2NvbW1vbic7XG4vKipcbiAqIEVVSSB1dGlsaXplcyBsb2dpY2FsIENTUyBwcm9wZXJ0aWVzIHRvIGVuYWJsZSBkaXJlY3Rpb25hbCB3cml0aW5nLW1vZGVzLlxuICogVG8gZW5jb3VyYWdlIHVzZSBvZiBsb2dpY2FsIHByb3BlcnRpZXMsIHdlIHByb3ZpZGUgYSBmZXcgaGVscGVyIHV0aWxpdGllcyB0b1xuICogY29udmVydCBjZXJ0YWluIGRpcmVjdGlvbmFsIHByb3BlcnRpZXMgdG8gbG9naWNhbCBwcm9wZXJ0aWVzLlxuICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL0NTU19Mb2dpY2FsX1Byb3BlcnRpZXNcbiAqL1xuXG5leHBvcnQgdmFyIGxvZ2ljYWxTaWRlID0ge1xuICBsZWZ0OiAnaW5saW5lLXN0YXJ0JyxcbiAgcmlnaHQ6ICdpbmxpbmUtZW5kJyxcbiAgdG9wOiAnYmxvY2stc3RhcnQnLFxuICBib3R0b206ICdibG9jay1lbmQnLFxuICBob3Jpem9udGFsOiAnaW5saW5lJyxcbiAgdmVydGljYWw6ICdibG9jaydcbn07XG5leHBvcnQgdmFyIExPR0lDQUxfU0lERVMgPSBrZXlzT2YobG9naWNhbFNpZGUpO1xudmFyIGxvZ2ljYWxNYXJnaW5zID0ge1xuICAnbWFyZ2luLWxlZnQnOiAnbWFyZ2luLWlubGluZS1zdGFydCcsXG4gICdtYXJnaW4tcmlnaHQnOiAnbWFyZ2luLWlubGluZS1lbmQnLFxuICAnbWFyZ2luLXRvcCc6ICdtYXJnaW4tYmxvY2stc3RhcnQnLFxuICAnbWFyZ2luLWJvdHRvbSc6ICdtYXJnaW4tYmxvY2stZW5kJyxcbiAgJ21hcmdpbi1ob3Jpem9udGFsJzogJ21hcmdpbi1pbmxpbmUnLFxuICAnbWFyZ2luLXZlcnRpY2FsJzogJ21hcmdpbi1ibG9jaydcbn07XG52YXIgbG9naWNhbFBhZGRpbmdzID0ge1xuICAncGFkZGluZy1sZWZ0JzogJ3BhZGRpbmctaW5saW5lLXN0YXJ0JyxcbiAgJ3BhZGRpbmctcmlnaHQnOiAncGFkZGluZy1pbmxpbmUtZW5kJyxcbiAgJ3BhZGRpbmctdG9wJzogJ3BhZGRpbmctYmxvY2stc3RhcnQnLFxuICAncGFkZGluZy1ib3R0b20nOiAncGFkZGluZy1ibG9jay1lbmQnLFxuICAncGFkZGluZy1ob3Jpem9udGFsJzogJ3BhZGRpbmctaW5saW5lJyxcbiAgJ3BhZGRpbmctdmVydGljYWwnOiAncGFkZGluZy1ibG9jaydcbn07XG52YXIgbG9naWNhbFBvc2l0aW9uID0ge1xuICB0b3A6ICdpbnNldC1ibG9jay1zdGFydCcsXG4gIHJpZ2h0OiAnaW5zZXQtaW5saW5lLWVuZCcsXG4gIGJvdHRvbTogJ2luc2V0LWJsb2NrLWVuZCcsXG4gIGxlZnQ6ICdpbnNldC1pbmxpbmUtc3RhcnQnLFxuICBob3Jpem9udGFsOiAnaW5zZXQtYmxvY2snLFxuICB2ZXJ0aWNhbDogJ2luc2V0LWlubGluZScsXG4gIGluc2V0OiAnaW5zZXQnXG59O1xudmFyIGxvZ2ljYWxTaXplID0ge1xuICBoZWlnaHQ6ICdibG9jay1zaXplJyxcbiAgd2lkdGg6ICdpbmxpbmUtc2l6ZScsXG4gICdtYXgtaGVpZ2h0JzogJ21heC1ibG9jay1zaXplJyxcbiAgJ21heC13aWR0aCc6ICdtYXgtaW5saW5lLXNpemUnLFxuICAnbWluLWhlaWdodCc6ICdtaW4tYmxvY2stc2l6ZScsXG4gICdtaW4td2lkdGgnOiAnbWluLWlubGluZS1zaXplJ1xufTtcbnZhciBsb2dpY2FsT3ZlcmZsb3cgPSB7XG4gICdvdmVyZmxvdy14JzogJ292ZXJmbG93LWJsb2NrJyxcbiAgJ292ZXJmbG93LXknOiAnb3ZlcmZsb3ctaW5saW5lJ1xufTtcbnZhciBsb2dpY2FsQm9yZGVycyA9IHtcbiAgJ2JvcmRlci1ob3Jpem9udGFsJzogJ2JvcmRlci1pbmxpbmUnLFxuICAnYm9yZGVyLWhvcml6b250YWwtY29sb3InOiAnYm9yZGVyLWlubGluZS1jb2xvcicsXG4gICdib3JkZXItaG9yaXpvbnRhbC13aWR0aCc6ICdib3JkZXItaW5saW5lLXdpZHRoJyxcbiAgJ2JvcmRlci1ob3Jpem9udGFsLXN0eWxlJzogJ2JvcmRlci1pbmxpbmUtc3R5bGUnLFxuICAnYm9yZGVyLXZlcnRpY2FsJzogJ2JvcmRlci1ibG9jaycsXG4gICdib3JkZXItdmVydGljYWwtY29sb3InOiAnYm9yZGVyLWJsb2NrLWNvbG9yJyxcbiAgJ2JvcmRlci12ZXJ0aWNhbC13aWR0aCc6ICdib3JkZXItYmxvY2std2lkdGgnLFxuICAnYm9yZGVyLXZlcnRpY2FsLXN0eWxlJzogJ2JvcmRlci1ibG9jay1zdHlsZScsXG4gICdib3JkZXItYm90dG9tJzogJ2JvcmRlci1ibG9jay1lbmQnLFxuICAnYm9yZGVyLWJvdHRvbS1jb2xvcic6ICdib3JkZXItYmxvY2stZW5kLWNvbG9yJyxcbiAgJ2JvcmRlci1ib3R0b20tc3R5bGUnOiAnYm9yZGVyLWJsb2NrLWVuZC1zdHlsZScsXG4gICdib3JkZXItYm90dG9tLXdpZHRoJzogJ2JvcmRlci1ibG9jay1lbmQtd2lkdGgnLFxuICAnYm9yZGVyLXRvcCc6ICdib3JkZXItYmxvY2stc3RhcnQnLFxuICAnYm9yZGVyLXRvcC1jb2xvcic6ICdib3JkZXItYmxvY2stc3RhcnQtY29sb3InLFxuICAnYm9yZGVyLXRvcC1zdHlsZSc6ICdib3JkZXItYmxvY2stc3RhcnQtc3R5bGUnLFxuICAnYm9yZGVyLXRvcC13aWR0aCc6ICdib3JkZXItYmxvY2stc3RhcnQtd2lkdGgnLFxuICAnYm9yZGVyLXJpZ2h0JzogJ2JvcmRlci1pbmxpbmUtZW5kJyxcbiAgJ2JvcmRlci1yaWdodC1jb2xvcic6ICdib3JkZXItaW5saW5lLWVuZC1jb2xvcicsXG4gICdib3JkZXItcmlnaHQtc3R5bGUnOiAnYm9yZGVyLWlubGluZS1lbmQtc3R5bGUnLFxuICAnYm9yZGVyLXJpZ2h0LXdpZHRoJzogJ2JvcmRlci1pbmxpbmUtZW5kLXdpZHRoJyxcbiAgJ2JvcmRlci1sZWZ0JzogJ2JvcmRlci1pbmxpbmUtc3RhcnQnLFxuICAnYm9yZGVyLWxlZnQtY29sb3InOiAnYm9yZGVyLWlubGluZS1zdGFydC1jb2xvcicsXG4gICdib3JkZXItbGVmdC1zdHlsZSc6ICdib3JkZXItaW5saW5lLXN0YXJ0LXN0eWxlJyxcbiAgJ2JvcmRlci1sZWZ0LXdpZHRoJzogJ2JvcmRlci1pbmxpbmUtc3RhcnQtd2lkdGgnLFxuICAnYm9yZGVyLXRvcC1sZWZ0LXJhZGl1cyc6ICdib3JkZXItc3RhcnQtc3RhcnQtcmFkaXVzJyxcbiAgJ2JvcmRlci10b3AtcmlnaHQtcmFkaXVzJzogJ2JvcmRlci1zdGFydC1lbmQtcmFkaXVzJyxcbiAgJ2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXMnOiAnYm9yZGVyLWVuZC1zdGFydC1yYWRpdXMnLFxuICAnYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXMnOiAnYm9yZGVyLWVuZC1lbmQtcmFkaXVzJ1xufTtcbmV4cG9ydCB2YXIgbG9naWNhbHMgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgbG9naWNhbE1hcmdpbnMpLCBsb2dpY2FsUGFkZGluZ3MpLCBsb2dpY2FsUG9zaXRpb24pLCBsb2dpY2FsU2l6ZSksIGxvZ2ljYWxPdmVyZmxvdyksIGxvZ2ljYWxCb3JkZXJzKTtcbmV4cG9ydCB2YXIgTE9HSUNBTF9QUk9QRVJUSUVTID0ga2V5c09mKGxvZ2ljYWxzKTtcblxuLyoqXG4gKlxuICogQHBhcmFtIHByb3BlcnR5IEEgc3RyaW5nIHRoYXQgaXMgYSB2YWxpZCBDU1MgbG9naWNhbCBwcm9wZXJ0eVxuICogQHBhcmFtIHZhbHVlIFN0cmluZyB0byBvdXRwdXQgYXMgdGhlIHByb3BlcnR5IHZhbHVlXG4gKiBAcmV0dXJucyBgc3RyaW5nYCBSZXR1cm5zIHRoZSBsb2dpY2FsIENTUyBwcm9wZXJ0eSB2ZXJzaW9uIGZvciB0aGUgZ2l2ZW4gYHByb3BlcnR5OiB2YWx1ZWAgcGFpclxuICovXG5leHBvcnQgdmFyIGxvZ2ljYWxDU1MgPSBmdW5jdGlvbiBsb2dpY2FsQ1NTKHByb3BlcnR5LCB2YWx1ZSkge1xuICByZXR1cm4gXCJcIi5jb25jYXQobG9naWNhbHNbcHJvcGVydHldLCBcIjogXCIpLmNvbmNhdCh2YWx1ZSwgXCI7XCIpO1xufTtcbi8qKlxuICpcbiAqIEBwYXJhbSBwcm9wZXJ0eSBBIHN0cmluZyB0aGF0IGlzIGEgdmFsaWQgQ1NTIGxvZ2ljYWwgcHJvcGVydHlcbiAqIEBwYXJhbSB2YWx1ZSBTdHJpbmcgdG8gb3V0cHV0IGFzIHRoZSBwcm9wZXJ0eSB2YWx1ZVxuICogQHJldHVybnMgYG9iamVjdGAgUmV0dXJucyB0aGUgbG9naWNhbCBDU1MgcHJvcGVydHkgdmVyc2lvbiBmb3IgdGhlIGdpdmVuIGBwcm9wZXJ0eTogdmFsdWVgIHBhaXJcbiAqL1xuXG5leHBvcnQgdmFyIGxvZ2ljYWxTdHlsZSA9IGZ1bmN0aW9uIGxvZ2ljYWxTdHlsZShwcm9wZXJ0eSwgdmFsdWUpIHtcbiAgLy8gU3RyaXAgaHlwaGVucyBhbmQgY2FtZWxDYXNlIHRoZSBDU1MgbG9naWNhbCBwcm9wZXJ0eSBzbyBSZWFjdCBkb2Vzbid0IHRocm93IGVycm9yc1xuICB2YXIgY2FtZWxDYXNlZFByb3BlcnR5ID0gbG9naWNhbHNbcHJvcGVydHldLnJlcGxhY2UoLy1cXHcvZywgZnVuY3Rpb24gKHN0cikge1xuICAgIHJldHVybiBzdHIuY2hhckF0KDEpLnRvVXBwZXJDYXNlKCk7XG4gIH0pO1xuICByZXR1cm4gX2RlZmluZVByb3BlcnR5KHt9LCBjYW1lbENhc2VkUHJvcGVydHksIFwiXCIuY29uY2F0KHZhbHVlKSk7XG59O1xuLyoqXG4gKlxuICogQHBhcmFtIHdpZHRoIEEgc3RyaW5nIHZhbHVlIGZvciB0aGUgTFRSIHdpZHRoXG4gKiBAcGFyYW0gaGVpZ2h0IEEgc3RyaW5nIHZhbHVlIGZvciB0aGUgTFRSIGhlaWdodFxuICogQHJldHVybnMgYHN0cmluZ2AgUmV0dXJucyB0aGUgbG9naWNhbCBDU1MgcHJvcGVydGllcyBmb3IgaGVpZ2h0IGFuZCB3aWR0aFxuICovXG5cbmV4cG9ydCB2YXIgbG9naWNhbFNpemVDU1MgPSBmdW5jdGlvbiBsb2dpY2FsU2l6ZUNTUyh3aWR0aCwgaGVpZ2h0KSB7XG4gIHJldHVybiBcIlxcbiAgICBcIi5jb25jYXQobG9naWNhbHMud2lkdGgsIFwiOiBcIikuY29uY2F0KHdpZHRoLCBcIjtcXG4gICAgXCIpLmNvbmNhdChsb2dpY2Fscy5oZWlnaHQsIFwiOiBcIikuY29uY2F0KGhlaWdodCwgXCI7XFxuICBcIik7XG59O1xuLyoqXG4gKlxuICogQHBhcmFtIHdpZHRoIEEgc3RyaW5nIHZhbHVlIGZvciB0aGUgTFRSIHdpZHRoXG4gKiBAcGFyYW0gaGVpZ2h0IEEgc3RyaW5nIHZhbHVlIGZvciB0aGUgTFRSIGhlaWdodFxuICogQHJldHVybnMgYG9iamVjdGAgUmV0dXJucyB0aGUgbG9naWNhbCBDU1MgcHJvcGVydGllcyBmb3IgaGVpZ2h0IGFuZCB3aWR0aFxuICovXG5cbmV4cG9ydCB2YXIgbG9naWNhbFNpemVTdHlsZSA9IGZ1bmN0aW9uIGxvZ2ljYWxTaXplU3R5bGUod2lkdGgsIGhlaWdodCkge1xuICB2YXIgX3JlZjI7XG5cbiAgcmV0dXJuIF9yZWYyID0ge30sIF9kZWZpbmVQcm9wZXJ0eShfcmVmMiwgbG9naWNhbHMud2lkdGgsIHdpZHRoKSwgX2RlZmluZVByb3BlcnR5KF9yZWYyLCBsb2dpY2Fscy5oZWlnaHQsIGhlaWdodCksIF9yZWYyO1xufTsgLy8gVGV4dCBhbGlnbm1lbnQgaXMgc2VwYXJhdGUgYmVjYXVzZSBpdHMgdGhlIHZhbHVlIHRoYXQgY2hhbmdlcyBub3QgdGhlIHByb3BlcnR5XG5cbmV4cG9ydCB2YXIgbG9naWNhbFRleHQgPSB7XG4gICd0ZXh0LWFsaWduJzoge1xuICAgIGxlZnQ6ICdzdGFydCcsXG4gICAgY2VudGVyOiAnY2VudGVyJyxcbiAgICByaWdodDogJ2VuZCdcbiAgfVxufTtcbmV4cG9ydCB2YXIgTE9HSUNBTF9URVhUX0FMSUdOTUVOVCA9IGtleXNPZihsb2dpY2FsVGV4dFsndGV4dC1hbGlnbiddKTtcblxuLyoqXG4gKlxuICogQHBhcmFtIHByb3BlcnR5IEEgc3RyaW5nIHRoYXQgaXMgYSB2YWxpZCBDU1MgbG9naWNhbCBwcm9wZXJ0eVxuICogQHBhcmFtIHZhbHVlIFN0cmluZyB0byBvdXRwdXQgYXMgdGhlIHByb3BlcnR5IHZhbHVlXG4gKiBAcmV0dXJucyBgc3RyaW5nYCBSZXR1cm5zIHRoZSBsb2dpY2FsIENTUyBwcm9wZXJ0eSB2ZXJzaW9uIGZvciB0aGUgZ2l2ZW4gYHByb3BlcnR5OiB2YWx1ZWAgcGFpclxuICovXG5leHBvcnQgdmFyIGxvZ2ljYWxUZXh0QWxpZ25DU1MgPSBmdW5jdGlvbiBsb2dpY2FsVGV4dEFsaWduQ1NTKHZhbHVlKSB7XG4gIHJldHVybiBcInRleHQtYWxpZ246IFwiLmNvbmNhdChsb2dpY2FsVGV4dFsndGV4dC1hbGlnbiddW3ZhbHVlXSwgXCI7XCIpO1xufTtcbi8qKlxuICpcbiAqIEBwYXJhbSBwcm9wZXJ0eSBBIHN0cmluZyB0aGF0IGlzIGEgdmFsaWQgQ1NTIGxvZ2ljYWwgcHJvcGVydHlcbiAqIEBwYXJhbSB2YWx1ZSBTdHJpbmcgdG8gb3V0cHV0IGFzIHRoZSBwcm9wZXJ0eSB2YWx1ZVxuICogQHJldHVybnMgYG9iamVjdGAgUmV0dXJucyB0aGUgbG9naWNhbCBDU1MgcHJvcGVydHkgdmVyc2lvbiBmb3IgdGhlIGdpdmVuIGBwcm9wZXJ0eTogdmFsdWVgIHBhaXJcbiAqL1xuXG5leHBvcnQgdmFyIGxvZ2ljYWxUZXh0QWxpZ25TdHlsZSA9IGZ1bmN0aW9uIGxvZ2ljYWxUZXh0QWxpZ25TdHlsZSh2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIHRleHRBbGlnbjogbG9naWNhbFRleHRbJ3RleHQtYWxpZ24nXVt2YWx1ZV1cbiAgfTtcbn07IiwgImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBgcHhgIHZhbHVlIGJhc2VkIG9uIGEgc2NhbGUgbXVsdGlwbGllclxuICogQHBhcmFtIHNjYWxlIC0gVGhlIGZvbnQgc2NhbGUgbXVsdGlwbGllclxuICogKlxuICogQHBhcmFtIHRoZW1lT3JCYXNlIC0gVGhlbWUgYmFzZSB2YWx1ZVxuICogKlxuICogQHJldHVybnMgc3RyaW5nIC0gUmVtIHVuaXQgYWxpZ25lZCB0byBiYXNlbGluZVxuICovXG5leHBvcnQgdmFyIHNpemVUb1BpeGVsID0gZnVuY3Rpb24gc2l6ZVRvUGl4ZWwoKSB7XG4gIHZhciBzY2FsZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogMTtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0aGVtZU9yQmFzZSkge1xuICAgIHZhciBiYXNlID0gX3R5cGVvZih0aGVtZU9yQmFzZSkgPT09ICdvYmplY3QnID8gdGhlbWVPckJhc2UuYmFzZSA6IHRoZW1lT3JCYXNlO1xuICAgIHJldHVybiBcIlwiLmNvbmNhdChiYXNlICogc2NhbGUsIFwicHhcIik7XG4gIH07XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGZvbnQtc2l6ZSB2YWx1ZSBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgc2NhbGUga2V5XG4gKiBAcGFyYW0gc2NhbGUgLSBUaGUgZm9udCBzY2FsZSBrZXlcbiAqIEBwYXJhbSB0aGVtZSAtIFJlcXVpcmVzIHRoZSBgYmFzZWAgYW5kIGBmb250YCBrZXlzXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIHBhcmFtZXRlcnMgLSBzZWUgX0ZvbnRTY2FsZU9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBzdHJpbmcgLSBDYWxjdWxhdGVkIGZvbnQtc2l6ZSB2YWx1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZXVpRm9udFNpemVGcm9tU2NhbGUoc2NhbGUsIF9yZWYpIHtcbiAgdmFyIGJhc2UgPSBfcmVmLmJhc2UsXG4gICAgICBmb250ID0gX3JlZi5mb250O1xuXG4gIHZhciBfcmVmMiA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDoge30sXG4gICAgICBfcmVmMiRtZWFzdXJlbWVudCA9IF9yZWYyLm1lYXN1cmVtZW50LFxuICAgICAgbWVhc3VyZW1lbnQgPSBfcmVmMiRtZWFzdXJlbWVudCA9PT0gdm9pZCAwID8gJ3JlbScgOiBfcmVmMiRtZWFzdXJlbWVudCxcbiAgICAgIGN1c3RvbVNjYWxlID0gX3JlZjIuY3VzdG9tU2NhbGU7XG5cbiAgaWYgKG1lYXN1cmVtZW50ID09PSAnZW0nKSB7XG4gICAgcmV0dXJuIFwiXCIuY29uY2F0KGZvbnQuc2NhbGVbc2NhbGVdLCBcImVtXCIpO1xuICB9XG5cbiAgdmFyIG51bWVyYXRvciA9IGJhc2UgKiBmb250LnNjYWxlW3NjYWxlXTtcbiAgaWYgKGN1c3RvbVNjYWxlKSBudW1lcmF0b3IgKj0gZm9udC5zY2FsZVtjdXN0b21TY2FsZV07XG4gIHZhciBkZW5vbWluYXRvciA9IGJhc2UgKiBmb250LnNjYWxlW2ZvbnQuYm9keS5zY2FsZV07XG4gIHJldHVybiBtZWFzdXJlbWVudCA9PT0gJ3B4JyA/IFwiXCIuY29uY2F0KG51bWVyYXRvciwgXCJweFwiKSA6IFwiXCIuY29uY2F0KChudW1lcmF0b3IgLyBkZW5vbWluYXRvcikudG9GaXhlZCg0KSwgXCJyZW1cIik7XG59XG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGxpbmUtaGVpZ2h0IHRvIHRoZSBjbG9zZXN0IG11bHRpcGxlIG9mIHRoZSBiYXNlbGluZVxuICogRVg6IEEgcHJvcGVyIGxpbmUtaGVpZ2h0IGZvciB0ZXh0IGlzIDEuNSB0aW1lcyB0aGUgZm9udC1zaXplLlxuICogICAgIElmIG91ciBiYXNlIGZvbnQgc2l6ZSAoZXVpRm9udFNpemUpIGlzIDE2LCBhbmQgb3VyIGJhc2VsaW5lIGlzIDQuIFRvIGVuc3VyZSB0aGVcbiAqICAgICB0ZXh0IHN0YXlzIG9uIHRoZSBiYXNlbGluZSwgd2UgcGFzcyBhIG11bHRpcGxpZXIgdG8gY2FsY3VsYXRlIGEgbGluZS1oZWlnaHQuXG4gKiBAcGFyYW0gc2NhbGUgLSBUaGUgZm9udCBzY2FsZSBrZXlcbiAqIEBwYXJhbSB0aGVtZSAtIFJlcXVpcmVzIHRoZSBgYmFzZWAgYW5kIGBmb250YCBrZXlzXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIHBhcmFtZXRlcnMgLSBzZWUgX0ZvbnRTY2FsZU9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBzdHJpbmcgLSBDYWxjdWxhdGVkIGxpbmUtaGVpZ2h0IHZhbHVlIGFsaWduZWQgdG8gYmFzZWxpbmVcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZXVpTGluZUhlaWdodEZyb21CYXNlbGluZShzY2FsZSwgX3JlZjMpIHtcbiAgdmFyIGJhc2UgPSBfcmVmMy5iYXNlLFxuICAgICAgZm9udCA9IF9yZWYzLmZvbnQ7XG5cbiAgdmFyIF9yZWY0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiB7fSxcbiAgICAgIF9yZWY0JG1lYXN1cmVtZW50ID0gX3JlZjQubWVhc3VyZW1lbnQsXG4gICAgICBtZWFzdXJlbWVudCA9IF9yZWY0JG1lYXN1cmVtZW50ID09PSB2b2lkIDAgPyAncmVtJyA6IF9yZWY0JG1lYXN1cmVtZW50LFxuICAgICAgY3VzdG9tU2NhbGUgPSBfcmVmNC5jdXN0b21TY2FsZTtcblxuICB2YXIgYmFzZWxpbmUgPSBmb250LmJhc2VsaW5lLFxuICAgICAgbGluZUhlaWdodE11bHRpcGxpZXIgPSBmb250LmxpbmVIZWlnaHRNdWx0aXBsaWVyO1xuICB2YXIgbnVtZXJhdG9yID0gYmFzZSAqIGZvbnQuc2NhbGVbc2NhbGVdO1xuICBpZiAoY3VzdG9tU2NhbGUpIG51bWVyYXRvciAqPSBmb250LnNjYWxlW2N1c3RvbVNjYWxlXTtcbiAgdmFyIGRlbm9taW5hdG9yID0gYmFzZSAqIGZvbnQuc2NhbGVbZm9udC5ib2R5LnNjYWxlXTtcblxuICB2YXIgX2xpbmVIZWlnaHRNdWx0aXBsaWVyID0gbnVtZXJhdG9yIDw9IGJhc2UgPyBsaW5lSGVpZ2h0TXVsdGlwbGllciA6IGxpbmVIZWlnaHRNdWx0aXBsaWVyICogMC44MzM7XG5cbiAgaWYgKG1lYXN1cmVtZW50ID09PSAnZW0nKSB7XG4gICAgLy8gRXZlbiB0aG91Z2ggdGhlIGxpbmUtaGVpZ2h0IHZpYSBgZW1gIGNhbm5vdCBiZSBkZXRlcm1pbmVkIGFnYWluc3QgdGhlIHBpeGVsIGJhc2VsaW5lIGdyaWQ7XG4gICAgLy8gd2Ugd2lsbCBhc3N1bWUgdGhhdCB0eXBpY2FsbHkgbGFyZ2VyIHNjYWxlIGZvbnQtc2l6ZXMgc2hvdWxkIGhhdmUgYSBzaG9ydGVyIGxpbmUtaGVpZ2h0O1xuICAgIHJldHVybiBfbGluZUhlaWdodE11bHRpcGxpZXIudG9GaXhlZCg0KS50b1N0cmluZygpO1xuICB9XG5cbiAgdmFyIHBpeGVsVmFsdWUgPSBNYXRoLmZsb29yKE1hdGgucm91bmQobnVtZXJhdG9yICogX2xpbmVIZWlnaHRNdWx0aXBsaWVyKSAvIGJhc2VsaW5lKSAqIGJhc2VsaW5lO1xuICByZXR1cm4gbWVhc3VyZW1lbnQgPT09ICdweCcgPyBcIlwiLmNvbmNhdChwaXhlbFZhbHVlLCBcInB4XCIpIDogXCJcIi5jb25jYXQoKHBpeGVsVmFsdWUgLyBkZW5vbWluYXRvcikudG9GaXhlZCg0KSwgXCJyZW1cIik7XG59XG4vKipcbiAqIFRleHQgd2VpZ2h0IHNoaWZ0aW5nXG4gKlxuICogV2hlbiBjaGFuZ2luZyB0aGUgZm9udC13ZWlnaHQgYmFzZWQgb24gdGhlIHN0YXRlIG9mIHRoZSBjb21wb25lbnQsXG4gKiB0aGlzIG1peGluIHdpbGwgZW5zdXJlIHRoYXQgdGhlIHNpemluZyBpcyBkZXBlbmRlbnQgb24gdGhlIGJvbGRlc3RcbiAqIHdlaWdodCBzbyBpdCBkb2Vzbid0IHNoaWZ0IHNpYmxpbmcgY29udGVudC5cbiAqL1xuXG5leHBvcnQgdmFyIGV1aVRleHRTaGlmdCA9IGZ1bmN0aW9uIGV1aVRleHRTaGlmdCgpIHtcbiAgdmFyIGZvbnRXZWlnaHQgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6ICdib2xkJztcbiAgdmFyIGF0dHJpYnV0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogJ2RhdGEtdGV4dCc7XG4gIHZhciBldWlUaGVtZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkO1xuICByZXR1cm4gXCJcXG4gICY6OmFmdGVyIHtcXG4gICAgZGlzcGxheTogYmxvY2s7XFxuICAgIGNvbnRlbnQ6IGF0dHIoXCIuY29uY2F0KGF0dHJpYnV0ZSwgXCIpO1xcbiAgICBmb250LXdlaWdodDogXCIpLmNvbmNhdChldWlUaGVtZS5mb250LndlaWdodFtmb250V2VpZ2h0XSwgXCI7XFxuICAgIGhlaWdodDogMDtcXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gICAgdmlzaWJpbGl0eTogaGlkZGVuO1xcbiAgfVwiKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBzaXplVG9QaXhlbCB9IGZyb20gJy4uLy4uLy4uLy4uL2dsb2JhbF9zdHlsaW5nL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBjb21wdXRlZCB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL3RoZW1lL3V0aWxzJztcbmV4cG9ydCB2YXIgYmFzZSA9IDE2O1xuZXhwb3J0IHZhciBzaXplID0ge1xuICB4eHM6IGNvbXB1dGVkKHNpemVUb1BpeGVsKDAuMTI1KSksXG4gIHhzOiBjb21wdXRlZChzaXplVG9QaXhlbCgwLjI1KSksXG4gIHM6IGNvbXB1dGVkKHNpemVUb1BpeGVsKDAuNSkpLFxuICBtOiBjb21wdXRlZChzaXplVG9QaXhlbCgwLjc1KSksXG4gIGJhc2U6IGNvbXB1dGVkKHNpemVUb1BpeGVsKCkpLFxuICBsOiBjb21wdXRlZChzaXplVG9QaXhlbCgxLjUpKSxcbiAgeGw6IGNvbXB1dGVkKHNpemVUb1BpeGVsKDIpKSxcbiAgeHhsOiBjb21wdXRlZChzaXplVG9QaXhlbCgyLjUpKSxcbiAgeHh4bDogY29tcHV0ZWQoc2l6ZVRvUGl4ZWwoMykpLFxuICB4eHh4bDogY29tcHV0ZWQoc2l6ZVRvUGl4ZWwoNCkpXG59OyIsICJmdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgeyB2YXIgX2kgPSBhcnIgPT0gbnVsbCA/IG51bGwgOiB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGFycltTeW1ib2wuaXRlcmF0b3JdIHx8IGFycltcIkBAaXRlcmF0b3JcIl07IGlmIChfaSA9PSBudWxsKSByZXR1cm47IHZhciBfYXJyID0gW107IHZhciBfbiA9IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIgX3MsIF9lOyB0cnkgeyBmb3IgKF9pID0gX2kuY2FsbChhcnIpOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7IF9hcnIucHVzaChfcy52YWx1ZSk7IGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhazsgfSB9IGNhdGNoIChlcnIpIHsgX2QgPSB0cnVlOyBfZSA9IGVycjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSAhPSBudWxsKSBfaVtcInJldHVyblwiXSgpOyB9IGZpbmFsbHkgeyBpZiAoX2QpIHRocm93IF9lOyB9IH0gcmV0dXJuIF9hcnI7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBzaXplVG9QaXhlbCB9IGZyb20gJy4uLy4uLy4uLy4uL2dsb2JhbF9zdHlsaW5nL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBjb21wdXRlZCB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL3RoZW1lL3V0aWxzJztcbmV4cG9ydCB2YXIgYm9yZGVyID0ge1xuICBjb2xvcjogY29tcHV0ZWQoZnVuY3Rpb24gKF9yZWYpIHtcbiAgICB2YXIgX3JlZjIgPSBfc2xpY2VkVG9BcnJheShfcmVmLCAxKSxcbiAgICAgICAgbGlnaHRTaGFkZSA9IF9yZWYyWzBdO1xuXG4gICAgcmV0dXJuIGxpZ2h0U2hhZGU7XG4gIH0sIFsnY29sb3JzLmxpZ2h0U2hhZGUnXSksXG4gIHdpZHRoOiB7XG4gICAgdGhpbjogJzFweCcsXG4gICAgdGhpY2s6ICcycHgnXG4gIH0sXG4gIHJhZGl1czoge1xuICAgIG1lZGl1bTogY29tcHV0ZWQoc2l6ZVRvUGl4ZWwoMC4zNzUpKSxcbiAgICBzbWFsbDogY29tcHV0ZWQoc2l6ZVRvUGl4ZWwoMC4yNSkpXG4gIH0sXG4gIHRoaW46IGNvbXB1dGVkKGZ1bmN0aW9uIChfcmVmMykge1xuICAgIHZhciBfcmVmNCA9IF9zbGljZWRUb0FycmF5KF9yZWYzLCAyKSxcbiAgICAgICAgd2lkdGggPSBfcmVmNFswXSxcbiAgICAgICAgY29sb3IgPSBfcmVmNFsxXTtcblxuICAgIHJldHVybiBcIlwiLmNvbmNhdCh3aWR0aC50aGluLCBcIiBzb2xpZCBcIikuY29uY2F0KGNvbG9yKTtcbiAgfSwgWydib3JkZXIud2lkdGgnLCAnYm9yZGVyLmNvbG9yJ10pLFxuICB0aGljazogY29tcHV0ZWQoZnVuY3Rpb24gKF9yZWY1KSB7XG4gICAgdmFyIF9yZWY2ID0gX3NsaWNlZFRvQXJyYXkoX3JlZjUsIDIpLFxuICAgICAgICB3aWR0aCA9IF9yZWY2WzBdLFxuICAgICAgICBjb2xvciA9IF9yZWY2WzFdO1xuXG4gICAgcmV0dXJuIFwiXCIuY29uY2F0KHdpZHRoLnRoaWNrLCBcIiBzb2xpZCBcIikuY29uY2F0KGNvbG9yKTtcbiAgfSwgWydib3JkZXIud2lkdGgnLCAnYm9yZGVyLmNvbG9yJ10pLFxuICBlZGl0YWJsZTogY29tcHV0ZWQoZnVuY3Rpb24gKF9yZWY3KSB7XG4gICAgdmFyIF9yZWY4ID0gX3NsaWNlZFRvQXJyYXkoX3JlZjcsIDIpLFxuICAgICAgICB3aWR0aCA9IF9yZWY4WzBdLFxuICAgICAgICBjb2xvciA9IF9yZWY4WzFdO1xuXG4gICAgcmV0dXJuIFwiXCIuY29uY2F0KHdpZHRoLnRoaWNrLCBcIiBkb3R0ZWQgXCIpLmNvbmNhdChjb2xvcik7XG4gIH0sIFsnYm9yZGVyLndpZHRoJywgJ2JvcmRlci5jb2xvciddKVxufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmV4cG9ydCB2YXIgbGV2ZWxzID0ge1xuICB0b2FzdDogOTAwMCxcbiAgbW9kYWw6IDgwMDAsXG4gIG1hc2s6IDYwMDAsXG4gIG5hdmlnYXRpb246IDYwMDAsXG4gIG1lbnU6IDIwMDAsXG4gIGhlYWRlcjogMTAwMCxcbiAgZmx5b3V0OiAxMDAwLFxuICBtYXNrQmVsb3dIZWFkZXI6IDEwMDAsXG4gIGNvbnRlbnQ6IDBcbn07IiwgImZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHsgdmFyIF9pID0gYXJyID09IG51bGwgPyBudWxsIDogdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBhcnJbU3ltYm9sLml0ZXJhdG9yXSB8fCBhcnJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAoX2kgPT0gbnVsbCkgcmV0dXJuOyB2YXIgX2FyciA9IFtdOyB2YXIgX24gPSB0cnVlOyB2YXIgX2QgPSBmYWxzZTsgdmFyIF9zLCBfZTsgdHJ5IHsgZm9yIChfaSA9IF9pLmNhbGwoYXJyKTsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkgeyBfYXJyLnB1c2goX3MudmFsdWUpOyBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7IH0gfSBjYXRjaCAoZXJyKSB7IF9kID0gdHJ1ZTsgX2UgPSBlcnI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTsgfSBmaW5hbGx5IHsgaWYgKF9kKSB0aHJvdyBfZTsgfSB9IHJldHVybiBfYXJyOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgY29tcHV0ZWQgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy90aGVtZS91dGlscyc7XG4vLyBUeXBvZ3JhcGhpYyBzY2FsZSAtLSBsb29zZWx5IGJhc2VkIG9uIE1ham9yIFRoaXJkICgxLjI1MClcbmV4cG9ydCB2YXIgZm9udFNjYWxlID0ge1xuICB4eHhzOiAwLjU2MjUsXG4gIHh4czogMC42ODc1LFxuICB4czogMC43NSxcbiAgczogMC44NzUsXG4gIG06IDEsXG4gIGw6IDEuMzc1LFxuICB4bDogMS42ODc1LFxuICB4eGw6IDIuMTI1XG59OyAvLyBGYW1pbGllcyAmIGJhc2UgZm9udCBzZXR0aW5nc1xuXG5leHBvcnQgdmFyIGZvbnRCYXNlID0ge1xuICBmYW1pbHk6IFwiJ0ludGVyJywgQmxpbmtNYWNTeXN0ZW1Gb250LCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmXCIsXG4gIGZhbWlseUNvZGU6IFwiJ1JvYm90byBNb25vJywgTWVubG8sIENvdXJpZXIsIG1vbm9zcGFjZVwiLFxuICBmYW1pbHlTZXJpZjogJ0dlb3JnaWEsIFRpbWVzLCBUaW1lcyBOZXcgUm9tYW4sIHNlcmlmJyxcbiAgLy8gQ2FyZWZ1bCB1c2luZyBsaWdhdHVyZXMuIENvZGUgZWRpdG9ycyBsaWtlIEFDRSB3aWxsIG9mdGVuIGVycm9yIGJlY2F1c2Ugb2Ygd2lkdGggY2FsY3VsYXRpb25zXG4gIGZlYXR1cmVTZXR0aW5nczogXCInY2FsdCcgMSwgJ2tlcm4nIDEsICdsaWdhJyAxXCIsXG4gIGJhc2VsaW5lOiBjb21wdXRlZChmdW5jdGlvbiAoX3JlZikge1xuICAgIHZhciBfcmVmMiA9IF9zbGljZWRUb0FycmF5KF9yZWYsIDEpLFxuICAgICAgICBiYXNlID0gX3JlZjJbMF07XG5cbiAgICByZXR1cm4gYmFzZSAvIDQ7XG4gIH0sIFsnYmFzZSddKSxcbiAgbGluZUhlaWdodE11bHRpcGxpZXI6IDEuNVxufTtcbmV4cG9ydCB2YXIgZm9udFdlaWdodCA9IHtcbiAgbGlnaHQ6IDMwMCxcbiAgcmVndWxhcjogNDAwLFxuICBtZWRpdW06IDUwMCxcbiAgc2VtaUJvbGQ6IDYwMCxcbiAgYm9sZDogNzAwXG59O1xuZXhwb3J0IHZhciBmb250ID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBmb250QmFzZSksIHt9LCB7XG4gIHNjYWxlOiBmb250U2NhbGUsXG4gIHdlaWdodDogZm9udFdlaWdodCxcbiAgYm9keToge1xuICAgIHNjYWxlOiAncycsXG4gICAgd2VpZ2h0OiAncmVndWxhcidcbiAgfSxcbiAgdGl0bGU6IHtcbiAgICB3ZWlnaHQ6ICdib2xkJ1xuICB9XG59KTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLyoqXG4gKiBOT1RFOiBUaGVzZSB3ZXJlIHF1aWNrIGNvbnZlcnNpb25zIG9mIHRoZWlyIFNhc3MgY291bnRlcnBhcnRzLlxuICogICAgICAgVGhlIGNvbW1lbnRlZCBvdXQga2V5cyBoYXZlIG5vdCBiZWVuIGVzdGFibGlzaGVkIGFzIG5lY2Vzc2FyeSB5ZXQuXG4gKi9cbmltcG9ydCB7IGNvbXB1dGVkIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvdGhlbWUvdXRpbHMnO1xuaW1wb3J0IHsgc2l6ZVRvUGl4ZWwgfSBmcm9tICcuLi8uLi8uLi8uLi9nbG9iYWxfc3R5bGluZy9mdW5jdGlvbnMvc2l6ZSc7XG5leHBvcnQgdmFyIGZvY3VzID0ge1xuICBjb2xvcjogJ2N1cnJlbnRDb2xvcicsXG4gIHdpZHRoOiBjb21wdXRlZChzaXplVG9QaXhlbCgwLjEyNSkpIC8vIHRyYW5zcGFyZW5jeTogeyBMSUdIVDogMC45LCBEQVJLOiAwLjcgfSxcbiAgLy8gYmFja2dyb3VuZENvbG9yOiBjb21wdXRlZCgoeyBjb2xvcnMsIGZvY3VzIH0pID0+XG4gIC8vICAgdHJhbnNwYXJlbnRpemUoY29sb3JzLnByaW1hcnksIGZvY3VzIS50cmFuc3BhcmVuY3kpXG4gIC8vICksXG4gIC8vIE91dGxpbmVcbiAgLy8gb3V0bGluZToge1xuICAvLyAgIG91dGxpbmU6IGNvbXB1dGVkKCh7IGZvY3VzIH0pID0+IGAke2ZvY3VzIS53aWR0aH0gc29saWQgJHtmb2N1cyEuY29sb3J9YCksXG4gIC8vIH0sXG5cbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBidWlsZFRoZW1lIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGhlbWUvdXRpbHMnO1xuaW1wb3J0IHsgY29sb3JzIH0gZnJvbSAnLi9nbG9iYWxfc3R5bGluZy92YXJpYWJsZXMvX2NvbG9ycyc7XG5pbXBvcnQgeyBhbmltYXRpb24gfSBmcm9tICcuL2dsb2JhbF9zdHlsaW5nL3ZhcmlhYmxlcy9fYW5pbWF0aW9uJztcbmltcG9ydCB7IGJyZWFrcG9pbnQgfSBmcm9tICcuL2dsb2JhbF9zdHlsaW5nL3ZhcmlhYmxlcy9fYnJlYWtwb2ludCc7XG5pbXBvcnQgeyBiYXNlLCBzaXplIH0gZnJvbSAnLi9nbG9iYWxfc3R5bGluZy92YXJpYWJsZXMvX3NpemUnO1xuaW1wb3J0IHsgYm9yZGVyIH0gZnJvbSAnLi9nbG9iYWxfc3R5bGluZy92YXJpYWJsZXMvX2JvcmRlcnMnO1xuaW1wb3J0IHsgbGV2ZWxzIH0gZnJvbSAnLi9nbG9iYWxfc3R5bGluZy92YXJpYWJsZXMvX2xldmVscyc7XG5pbXBvcnQgeyBmb250IH0gZnJvbSAnLi9nbG9iYWxfc3R5bGluZy92YXJpYWJsZXMvX3R5cG9ncmFwaHknO1xuaW1wb3J0IHsgZm9jdXMgfSBmcm9tICcuL2dsb2JhbF9zdHlsaW5nL3ZhcmlhYmxlcy9fc3RhdGVzJztcbmV4cG9ydCB2YXIgQU1TVEVSREFNX05BTUVfS0VZID0gJ0VVSV9USEVNRV9BTVNURVJEQU0nO1xuZXhwb3J0IHZhciBldWlUaGVtZUFtc3RlcmRhbSA9IHtcbiAgY29sb3JzOiBjb2xvcnMsXG4gIGJhc2U6IGJhc2UsXG4gIHNpemU6IHNpemUsXG4gIGJvcmRlcjogYm9yZGVyLFxuICBmb250OiBmb250LFxuICBhbmltYXRpb246IGFuaW1hdGlvbixcbiAgYnJlYWtwb2ludDogYnJlYWtwb2ludCxcbiAgbGV2ZWxzOiBsZXZlbHMsXG4gIGZvY3VzOiBmb2N1c1xufTtcbmV4cG9ydCB2YXIgRXVpVGhlbWVBbXN0ZXJkYW0gPSBidWlsZFRoZW1lKGV1aVRoZW1lQW1zdGVyZGFtLCBBTVNURVJEQU1fTkFNRV9LRVkpOyIsICJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYsIHVzZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBFdWlUaGVtZUNvbnRleHQsIEV1aU1vZGlmaWNhdGlvbnNDb250ZXh0LCBFdWlDb2xvck1vZGVDb250ZXh0IH0gZnJvbSAnLi9jb250ZXh0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIHVzZUV1aVRoZW1lID0gZnVuY3Rpb24gdXNlRXVpVGhlbWUoKSB7XG4gIHZhciB0aGVtZSA9IHVzZUNvbnRleHQoRXVpVGhlbWVDb250ZXh0KTtcbiAgdmFyIGNvbG9yTW9kZSA9IHVzZUNvbnRleHQoRXVpQ29sb3JNb2RlQ29udGV4dCk7XG4gIHZhciBtb2RpZmljYXRpb25zID0gdXNlQ29udGV4dChFdWlNb2RpZmljYXRpb25zQ29udGV4dCk7XG4gIHJldHVybiB7XG4gICAgZXVpVGhlbWU6IHRoZW1lLFxuICAgIGNvbG9yTW9kZTogY29sb3JNb2RlLFxuICAgIG1vZGlmaWNhdGlvbnM6IG1vZGlmaWNhdGlvbnNcbiAgfTtcbn07XG4vLyBQcm92aWRlIHRoZSBjb21wb25lbnQgcHJvcHMgaW50ZXJmYWNlIGFzIHRoZSBnZW5lcmljIHRvIGFsbG93IHRoZSBkb2NzIHByb3BzIHRhYmxlIHRvIHBvcHVsYXRlLlxuLy8gZS5nLiwgYGNvbnN0IEV1aUNvbXBvbmVudCA9IHdpdGhFdWlUaGVtZTxFdWlDb21wb25lbnRQcm9wcz4oX0V1aUNvbXBvbmVudClgXG5leHBvcnQgdmFyIHdpdGhFdWlUaGVtZSA9IGZ1bmN0aW9uIHdpdGhFdWlUaGVtZShDb21wb25lbnQpIHtcbiAgdmFyIGNvbXBvbmVudE5hbWUgPSBDb21wb25lbnQuZGlzcGxheU5hbWUgfHwgQ29tcG9uZW50Lm5hbWUgfHwgJ0NvbXBvbmVudFdpdGhUaGVtZSc7XG5cbiAgdmFyIFJlbmRlciA9IGZ1bmN0aW9uIFJlbmRlcihwcm9wcywgcmVmKSB7XG4gICAgdmFyIF91c2VFdWlUaGVtZSA9IHVzZUV1aVRoZW1lKCksXG4gICAgICAgIGV1aVRoZW1lID0gX3VzZUV1aVRoZW1lLmV1aVRoZW1lLFxuICAgICAgICBjb2xvck1vZGUgPSBfdXNlRXVpVGhlbWUuY29sb3JNb2RlLFxuICAgICAgICBtb2RpZmljYXRpb25zID0gX3VzZUV1aVRoZW1lLm1vZGlmaWNhdGlvbnM7XG5cbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChDb21wb25lbnQsIF9leHRlbmRzKHtcbiAgICAgIHRoZW1lOiB7XG4gICAgICAgIGV1aVRoZW1lOiBldWlUaGVtZSxcbiAgICAgICAgY29sb3JNb2RlOiBjb2xvck1vZGUsXG4gICAgICAgIG1vZGlmaWNhdGlvbnM6IG1vZGlmaWNhdGlvbnNcbiAgICAgIH0sXG4gICAgICByZWY6IHJlZlxuICAgIH0sIHByb3BzKSk7XG4gIH07XG5cbiAgdmFyIFdpdGhFdWlUaGVtZSA9IC8qI19fUFVSRV9fKi9mb3J3YXJkUmVmKFJlbmRlcik7XG4gIFdpdGhFdWlUaGVtZS5kaXNwbGF5TmFtZSA9IGNvbXBvbmVudE5hbWU7XG4gIHJldHVybiBXaXRoRXVpVGhlbWU7XG59OyIsICJmdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgeyB2YXIgX2kgPSBhcnIgPT0gbnVsbCA/IG51bGwgOiB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGFycltTeW1ib2wuaXRlcmF0b3JdIHx8IGFycltcIkBAaXRlcmF0b3JcIl07IGlmIChfaSA9PSBudWxsKSByZXR1cm47IHZhciBfYXJyID0gW107IHZhciBfbiA9IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIgX3MsIF9lOyB0cnkgeyBmb3IgKF9pID0gX2kuY2FsbChhcnIpOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7IF9hcnIucHVzaChfcy52YWx1ZSk7IGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhazsgfSB9IGNhdGNoIChlcnIpIHsgX2QgPSB0cnVlOyBfZSA9IGVycjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSAhPSBudWxsKSBfaVtcInJldHVyblwiXSgpOyB9IGZpbmFsbHkgeyBpZiAoX2QpIHRocm93IF9lOyB9IH0gcmV0dXJuIF9hcnI7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ29udGV4dCwgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IGlzRXF1YWwgZnJvbSAnbG9kYXNoL2lzRXF1YWwnO1xuaW1wb3J0IHsgRXVpU3lzdGVtQ29udGV4dCwgRXVpVGhlbWVDb250ZXh0LCBFdWlNb2RpZmljYXRpb25zQ29udGV4dCwgRXVpQ29sb3JNb2RlQ29udGV4dCB9IGZyb20gJy4vY29udGV4dCc7XG5pbXBvcnQgeyBidWlsZFRoZW1lLCBnZXRDb2xvck1vZGUsIGdldENvbXB1dGVkLCBtZXJnZURlZXAgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVRoZW1lUHJvdmlkZXIgPSBmdW5jdGlvbiBFdWlUaGVtZVByb3ZpZGVyKF9yZWYpIHtcbiAgdmFyIF9zeXN0ZW0gPSBfcmVmLnRoZW1lLFxuICAgICAgX2NvbG9yTW9kZSA9IF9yZWYuY29sb3JNb2RlLFxuICAgICAgX21vZGlmaWNhdGlvbnMgPSBfcmVmLm1vZGlmeSxcbiAgICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbjtcbiAgdmFyIHBhcmVudFN5c3RlbSA9IHVzZUNvbnRleHQoRXVpU3lzdGVtQ29udGV4dCk7XG4gIHZhciBwYXJlbnRNb2RpZmljYXRpb25zID0gdXNlQ29udGV4dChFdWlNb2RpZmljYXRpb25zQ29udGV4dCk7XG4gIHZhciBwYXJlbnRDb2xvck1vZGUgPSB1c2VDb250ZXh0KEV1aUNvbG9yTW9kZUNvbnRleHQpO1xuICB2YXIgcGFyZW50VGhlbWUgPSB1c2VDb250ZXh0KEV1aVRoZW1lQ29udGV4dCk7XG5cbiAgdmFyIF91c2VTdGF0ZSA9IHVzZVN0YXRlKF9zeXN0ZW0gfHwgcGFyZW50U3lzdGVtKSxcbiAgICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgICAgc3lzdGVtID0gX3VzZVN0YXRlMlswXSxcbiAgICAgIHNldFN5c3RlbSA9IF91c2VTdGF0ZTJbMV07XG5cbiAgdmFyIHByZXZTeXN0ZW1LZXkgPSB1c2VSZWYoc3lzdGVtLmtleSk7XG5cbiAgdmFyIF91c2VTdGF0ZTMgPSB1c2VTdGF0ZShtZXJnZURlZXAocGFyZW50TW9kaWZpY2F0aW9ucywgX21vZGlmaWNhdGlvbnMpKSxcbiAgICAgIF91c2VTdGF0ZTQgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUzLCAyKSxcbiAgICAgIG1vZGlmaWNhdGlvbnMgPSBfdXNlU3RhdGU0WzBdLFxuICAgICAgc2V0TW9kaWZpY2F0aW9ucyA9IF91c2VTdGF0ZTRbMV07XG5cbiAgdmFyIHByZXZNb2RpZmljYXRpb25zID0gdXNlUmVmKG1vZGlmaWNhdGlvbnMpO1xuXG4gIHZhciBfdXNlU3RhdGU1ID0gdXNlU3RhdGUoZ2V0Q29sb3JNb2RlKF9jb2xvck1vZGUsIHBhcmVudENvbG9yTW9kZSkpLFxuICAgICAgX3VzZVN0YXRlNiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZTUsIDIpLFxuICAgICAgY29sb3JNb2RlID0gX3VzZVN0YXRlNlswXSxcbiAgICAgIHNldENvbG9yTW9kZSA9IF91c2VTdGF0ZTZbMV07XG5cbiAgdmFyIHByZXZDb2xvck1vZGUgPSB1c2VSZWYoY29sb3JNb2RlKTtcbiAgdmFyIGlzUGFyZW50VGhlbWUgPSB1c2VSZWYocHJldlN5c3RlbUtleS5jdXJyZW50ID09PSBwYXJlbnRTeXN0ZW0ua2V5ICYmIGNvbG9yTW9kZSA9PT0gcGFyZW50Q29sb3JNb2RlICYmIGlzRXF1YWwocGFyZW50TW9kaWZpY2F0aW9ucywgbW9kaWZpY2F0aW9ucykpO1xuXG4gIHZhciBfdXNlU3RhdGU3ID0gdXNlU3RhdGUoaXNQYXJlbnRUaGVtZS5jdXJyZW50ICYmIE9iamVjdC5rZXlzKHBhcmVudFRoZW1lKS5sZW5ndGggPyBwYXJlbnRUaGVtZSA6IGdldENvbXB1dGVkKHN5c3RlbSwgYnVpbGRUaGVtZShtb2RpZmljYXRpb25zLCBcIl9cIi5jb25jYXQoc3lzdGVtLmtleSkpLCBjb2xvck1vZGUpKSxcbiAgICAgIF91c2VTdGF0ZTggPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGU3LCAyKSxcbiAgICAgIHRoZW1lID0gX3VzZVN0YXRlOFswXSxcbiAgICAgIHNldFRoZW1lID0gX3VzZVN0YXRlOFsxXTtcblxuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHZhciBuZXdTeXN0ZW0gPSBfc3lzdGVtIHx8IHBhcmVudFN5c3RlbTtcblxuICAgIGlmIChwcmV2U3lzdGVtS2V5LmN1cnJlbnQgIT09IG5ld1N5c3RlbS5rZXkpIHtcbiAgICAgIHNldFN5c3RlbShuZXdTeXN0ZW0pO1xuICAgICAgcHJldlN5c3RlbUtleS5jdXJyZW50ID0gbmV3U3lzdGVtLmtleTtcbiAgICAgIGlzUGFyZW50VGhlbWUuY3VycmVudCA9IGZhbHNlO1xuICAgIH1cbiAgfSwgW19zeXN0ZW0sIHBhcmVudFN5c3RlbV0pO1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHZhciBuZXdNb2RpZmljYXRpb25zID0gbWVyZ2VEZWVwKHBhcmVudE1vZGlmaWNhdGlvbnMsIF9tb2RpZmljYXRpb25zKTtcblxuICAgIGlmICghaXNFcXVhbChwcmV2TW9kaWZpY2F0aW9ucy5jdXJyZW50LCBuZXdNb2RpZmljYXRpb25zKSkge1xuICAgICAgc2V0TW9kaWZpY2F0aW9ucyhuZXdNb2RpZmljYXRpb25zKTtcbiAgICAgIHByZXZNb2RpZmljYXRpb25zLmN1cnJlbnQgPSBuZXdNb2RpZmljYXRpb25zO1xuICAgICAgaXNQYXJlbnRUaGVtZS5jdXJyZW50ID0gZmFsc2U7XG4gICAgfVxuICB9LCBbX21vZGlmaWNhdGlvbnMsIHBhcmVudE1vZGlmaWNhdGlvbnNdKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbmV3Q29sb3JNb2RlID0gZ2V0Q29sb3JNb2RlKF9jb2xvck1vZGUsIHBhcmVudENvbG9yTW9kZSk7XG5cbiAgICBpZiAoIWlzRXF1YWwobmV3Q29sb3JNb2RlLCBwcmV2Q29sb3JNb2RlLmN1cnJlbnQpKSB7XG4gICAgICBzZXRDb2xvck1vZGUobmV3Q29sb3JNb2RlKTtcbiAgICAgIHByZXZDb2xvck1vZGUuY3VycmVudCA9IG5ld0NvbG9yTW9kZTtcbiAgICAgIGlzUGFyZW50VGhlbWUuY3VycmVudCA9IGZhbHNlO1xuICAgIH1cbiAgfSwgW19jb2xvck1vZGUsIHBhcmVudENvbG9yTW9kZV0pO1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmICghaXNQYXJlbnRUaGVtZS5jdXJyZW50KSB7XG4gICAgICBzZXRUaGVtZShnZXRDb21wdXRlZChzeXN0ZW0sIGJ1aWxkVGhlbWUobW9kaWZpY2F0aW9ucywgXCJfXCIuY29uY2F0KHN5c3RlbS5rZXkpKSwgY29sb3JNb2RlKSk7XG4gICAgfVxuICB9LCBbY29sb3JNb2RlLCBzeXN0ZW0sIG1vZGlmaWNhdGlvbnNdKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpQ29sb3JNb2RlQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBjb2xvck1vZGVcbiAgfSwgX19fRW1vdGlvbkpTWChFdWlTeXN0ZW1Db250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IHN5c3RlbVxuICB9LCBfX19FbW90aW9uSlNYKEV1aU1vZGlmaWNhdGlvbnNDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IG1vZGlmaWNhdGlvbnNcbiAgfSwgX19fRW1vdGlvbkpTWChFdWlUaGVtZUNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogdGhlbWVcbiAgfSwgY2hpbGRyZW4pKSkpO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmV4cG9ydCB2YXIgdGhyb3R0bGUgPSBmdW5jdGlvbiB0aHJvdHRsZShmbikge1xuICB2YXIgd2FpdCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogNTA7XG4gIHZhciB0aW1lID0gRGF0ZS5ub3coKTtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGltZSArIHdhaXQgLSBEYXRlLm5vdygpIDwgMCkge1xuICAgICAgZm4uYXBwbHkodm9pZCAwLCBhcmd1bWVudHMpO1xuICAgICAgdGltZSA9IERhdGUubm93KCk7XG4gICAgfVxuICB9O1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IHVzZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBDdXJyZW50RXVpQnJlYWtwb2ludENvbnRleHQgfSBmcm9tICcuL2N1cnJlbnRfYnJlYWtwb2ludCc7XG4vKipcbiAqIEhvb2sgdXRpbCAvIHN5bnRhY3RpY2FsIHN1Z2FyIGZvciB1c2VDb250ZXh0KClcbiAqXG4gKiBUaGlzIGhvb2sgaXMgaW4gaXRzIG93biBzZXBhcmF0ZSBmaWxlIHRvIG1ha2UgbW9ja2luZyBpdFxuICogYXMgYSB0ZXN0ZW52IGVhc3kgZm9yIEplc3QgdW5pdCB0ZXN0c1xuICovXG5cbmV4cG9ydCB2YXIgdXNlQ3VycmVudEV1aUJyZWFrcG9pbnQgPSBmdW5jdGlvbiB1c2VDdXJyZW50RXVpQnJlYWtwb2ludCgpIHtcbiAgdmFyIGN1cnJlbnRCcmVha3BvaW50ID0gdXNlQ29udGV4dChDdXJyZW50RXVpQnJlYWtwb2ludENvbnRleHQpO1xuICByZXR1cm4gY3VycmVudEJyZWFrcG9pbnQ7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgdXNlQ3VycmVudEV1aUJyZWFrcG9pbnQgfSBmcm9tICcuL2N1cnJlbnRfYnJlYWtwb2ludF9ob29rJztcbi8qKlxuICogR2l2ZW4gdGhlIGN1cnJlbnQgd2luZG93LmlubmVyV2lkdGggYW5kIGFuIGFycmF5IG9mIGJyZWFrcG9pbnQga2V5cyxcbiAqIHRoaXMgaG9vayBzdG9yZXMgc3RhdGUgYW5kIHJldHVybnMgdHJ1ZSBvciBmYWxzZSBpZiB0aGUgd2luZG93LmlubmVyV2lkdGhcbiAqIGZhbGxzIHdpdGhpbiBhbnkgb2YgdGhlIG5hbWVkIGJyZWFrcG9pbnRzLlxuICpcbiAqIEBwYXJhbSB7X0V1aVRoZW1lQnJlYWtwb2ludFtdfSBzaXplcyBBbiBhcnJheSBvZiBuYW1lZCBFVUkgYnJlYWtwb2ludHNcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNSZXNwb25zaXZlIFNvbWUgY29tcG9uZW50cyBoYXZlIHRoZSBvcHRpb24gdG8gdHVybiBvZmYgcmVzcG9uc2l2ZSBiZWhhdmlvci5cbiAqICAgU2luY2UgaG9va3MgY2FuJ3QgYmUgY2FsbGVkIGNvbmRpdGlvbmFsbHksIGl0J3MgZWFzaWVyIHRvIHBhc3MgdGhlIGNvbmRpdGlvbiBpbnRvIHRoZSBob29rXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgY3VycmVudCBicmVha3BvaW50IG5hbWUgaXMgaW5jbHVkZWQgaW4gYHNpemVzYFxuICovXG5cbmV4cG9ydCB2YXIgdXNlSXNXaXRoaW5CcmVha3BvaW50cyA9IGZ1bmN0aW9uIHVzZUlzV2l0aGluQnJlYWtwb2ludHMoc2l6ZXMpIHtcbiAgdmFyIGlzUmVzcG9uc2l2ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogdHJ1ZTtcbiAgdmFyIGN1cnJlbnRCcmVha3BvaW50ID0gdXNlQ3VycmVudEV1aUJyZWFrcG9pbnQoKTtcbiAgcmV0dXJuIGN1cnJlbnRCcmVha3BvaW50ICYmIGlzUmVzcG9uc2l2ZSA/IHNpemVzLmluY2x1ZGVzKGN1cnJlbnRCcmVha3BvaW50KSA6IGZhbHNlO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLyoqXG4gKiBBIERPTSBub2RlLCBhIHNlbGVjdG9yIHN0cmluZyAod2hpY2ggd2lsbCBiZSBwYXNzZWQgdG9cbiAqIGBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKClgIHRvIGZpbmQgdGhlIERPTSBub2RlKSwgb3IgYSBmdW5jdGlvbiB0aGF0XG4gKiByZXR1cm5zIGEgRE9NIG5vZGUuXG4gKi9cbmV4cG9ydCB2YXIgZmluZEVsZW1lbnRCeVNlbGVjdG9yT3JSZWYgPSBmdW5jdGlvbiBmaW5kRWxlbWVudEJ5U2VsZWN0b3JPclJlZihlbGVtZW50VGFyZ2V0KSB7XG4gIHZhciBub2RlID0gZWxlbWVudFRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ID8gZWxlbWVudFRhcmdldCA6IG51bGw7XG5cbiAgaWYgKHR5cGVvZiBlbGVtZW50VGFyZ2V0ID09PSAnc3RyaW5nJykge1xuICAgIG5vZGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGVsZW1lbnRUYXJnZXQpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBlbGVtZW50VGFyZ2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgbm9kZSA9IGVsZW1lbnRUYXJnZXQoKTtcbiAgfVxuXG4gIHJldHVybiBub2RlO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmV4cG9ydCB2YXIgYWx3YXlzID0gZnVuY3Rpb24gYWx3YXlzKF92YWx1ZSkge1xuICByZXR1cm4gdHJ1ZTtcbn07XG5leHBvcnQgdmFyIG5ldmVyID0gZnVuY3Rpb24gbmV2ZXIoX3ZhbHVlKSB7XG4gIHJldHVybiBmYWxzZTtcbn07XG5leHBvcnQgdmFyIGlzVW5kZWZpbmVkID0gZnVuY3Rpb24gaXNVbmRlZmluZWQodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQ7XG59O1xuZXhwb3J0IHZhciBpc051bGwgPSBmdW5jdGlvbiBpc051bGwodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09PSBudWxsO1xufTtcbmV4cG9ydCB2YXIgaXNOaWwgPSBmdW5jdGlvbiBpc05pbCh2YWx1ZSkge1xuICByZXR1cm4gaXNVbmRlZmluZWQodmFsdWUpIHx8IGlzTnVsbCh2YWx1ZSk7XG59O1xuZXhwb3J0IHZhciBpc01vbWVudCA9IGZ1bmN0aW9uIGlzTW9tZW50KHZhbHVlKSB7XG4gIHJldHVybiBtb21lbnQuaXNNb21lbnQodmFsdWUpO1xufTtcbmV4cG9ydCB2YXIgaXNEYXRlID0gZnVuY3Rpb24gaXNEYXRlKHZhbHVlKSB7XG4gIHJldHVybiBtb21lbnQuaXNEYXRlKHZhbHVlKTtcbn07XG5leHBvcnQgdmFyIGlzRGF0ZUxpa2UgPSBmdW5jdGlvbiBpc0RhdGVMaWtlKHZhbHVlKSB7XG4gIHJldHVybiBpc01vbWVudCh2YWx1ZSkgfHwgaXNEYXRlKHZhbHVlKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgX2lzRnVuY3Rpb24gZnJvbSAnbG9kYXNoL2lzRnVuY3Rpb24nO1xuaW1wb3J0IF9pc0FycmF5IGZyb20gJ2xvZGFzaC9pc0FycmF5JztcbmltcG9ydCBfaXNTdHJpbmcgZnJvbSAnbG9kYXNoL2lzU3RyaW5nJztcbmltcG9ydCBfaXNCb29sZWFuIGZyb20gJ2xvZGFzaC9pc0Jvb2xlYW4nO1xuaW1wb3J0IF9pc051bWJlciBmcm9tICdsb2Rhc2gvaXNOdW1iZXInO1xuaW1wb3J0IF9pc05hTiBmcm9tICdsb2Rhc2gvaXNOYU4nO1xuaW1wb3J0IF9pc09iamVjdCBmcm9tICdsb2Rhc2gvaXNPYmplY3QnOyAvLyB3cmFwIHRoZSBsb2Rhc2ggZnVuY3Rpb25zIHRvIGF2b2lkIGhhdmluZyBsb2Rhc2gncyBUUyB0eXBlIGRlZmluaXRpb24gZnJvbSBiZWluZ1xuLy8gZXhwb3J0ZWQsIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIHRoZSBsb2Rhc2ggbmFtZXNwYWNlIGlmIG90aGVyIHZlcnNpb25zIGFyZSB1c2VkXG5cbmV4cG9ydCB2YXIgaXNGdW5jdGlvbiA9IGZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIF9pc0Z1bmN0aW9uKHZhbHVlKTtcbn07XG5leHBvcnQgdmFyIGlzQXJyYXkgPSBmdW5jdGlvbiBpc0FycmF5KHZhbHVlKSB7XG4gIHJldHVybiBfaXNBcnJheSh2YWx1ZSk7XG59O1xuZXhwb3J0IHZhciBpc1N0cmluZyA9IGZ1bmN0aW9uIGlzU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiBfaXNTdHJpbmcodmFsdWUpO1xufTtcbmV4cG9ydCB2YXIgaXNCb29sZWFuID0gZnVuY3Rpb24gaXNCb29sZWFuKHZhbHVlKSB7XG4gIHJldHVybiBfaXNCb29sZWFuKHZhbHVlKTtcbn07XG5leHBvcnQgdmFyIGlzTnVtYmVyID0gZnVuY3Rpb24gaXNOdW1iZXIodmFsdWUpIHtcbiAgcmV0dXJuIF9pc051bWJlcih2YWx1ZSk7XG59O1xuZXhwb3J0IHZhciBpc05hTiA9IGZ1bmN0aW9uIGlzTmFOKHZhbHVlKSB7XG4gIHJldHVybiBfaXNOYU4odmFsdWUpO1xufTtcbmV4cG9ydCB2YXIgaXNPYmplY3QgPSBmdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xuICByZXR1cm4gX2lzT2JqZWN0KHZhbHVlKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBpc05pbCB9IGZyb20gJy4uL3ByZWRpY2F0ZSc7XG5leHBvcnQgdmFyIGZvcm1hdEJvb2xlYW4gPSBmdW5jdGlvbiBmb3JtYXRCb29sZWFuKHZhbHVlKSB7XG4gIHZhciBfcmVmID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcbiAgICAgIF9yZWYkeWVzID0gX3JlZi55ZXMsXG4gICAgICB5ZXMgPSBfcmVmJHllcyA9PT0gdm9pZCAwID8gJ1llcycgOiBfcmVmJHllcyxcbiAgICAgIF9yZWYkbm8gPSBfcmVmLm5vLFxuICAgICAgbm8gPSBfcmVmJG5vID09PSB2b2lkIDAgPyAnTm8nIDogX3JlZiRubyxcbiAgICAgIF9yZWYkbmlsID0gX3JlZi5uaWwsXG4gICAgICBuaWwgPSBfcmVmJG5pbCA9PT0gdm9pZCAwID8gJycgOiBfcmVmJG5pbDtcblxuICBpZiAoaXNOaWwodmFsdWUpKSB7XG4gICAgcmV0dXJuIG5pbDtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZSA/IHllcyA6IG5vO1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBpc05pbCwgaXNGdW5jdGlvbiwgaXNTdHJpbmcgfSBmcm9tICcuLi9wcmVkaWNhdGUnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuXG52YXIgY2FsZW5kYXIgPSBmdW5jdGlvbiBjYWxlbmRhcih2YWx1ZSkge1xuICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gIHZhciByZWZUaW1lID0gb3B0aW9ucy5yZWZUaW1lO1xuICByZXR1cm4gbW9tZW50KHZhbHVlKS5jYWxlbmRhcihyZWZUaW1lLCBvcHRpb25zKTtcbn07XG5cbmV4cG9ydCB2YXIgZGF0ZUZvcm1hdEFsaWFzZXMgPSB7XG4gIGRhdGU6ICdEIE1NTSBZWVlZJyxcbiAgbG9uZ0RhdGU6ICdERCBNTU1NIFlZWVknLFxuICBzaG9ydERhdGU6ICdEIE1NTSBZWScsXG4gIGRhdGVUaW1lOiAnRCBNTU0gWVlZWSBISDptbScsXG4gIGxvbmdEYXRlVGltZTogJ0REIE1NTU0gWVlZWSBISDptbTpzcycsXG4gIHNob3J0RGF0ZVRpbWU6ICdEIE1NTSBZWSBISDptbScsXG4gIGRvYlNob3J0OiAnRG8gTU1NIFlZJyxcbiAgZG9iTG9uZzogJ0RvIE1NTU0gWVlZWScsXG4gIGlzbzg2MDE6ICdZWVlZLU1NLUREVEhIOm1tOnNzLlNTU1onLFxuICBjYWxlbmRhcjogY2FsZW5kYXIsXG4gIGNhbGVuZGFyRGF0ZVRpbWU6IGZ1bmN0aW9uIGNhbGVuZGFyRGF0ZVRpbWUodmFsdWUsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gY2FsZW5kYXIodmFsdWUsIF9vYmplY3RTcHJlYWQoe1xuICAgICAgc2FtZURheTogJ1tUb2RheSBhdF0gSDptbUEnLFxuICAgICAgbmV4dERheTogJ1tUb21vcnJvdyBhdF0gSDptbUEnLFxuICAgICAgbmV4dFdlZWs6ICdkZGRkIFthdF0gSDptbUEnLFxuICAgICAgbGFzdERheTogJ1tZZXN0ZXJkYXkgYXRdIEg6bW1BJyxcbiAgICAgIGxhc3RXZWVrOiAnW0xhc3RdIGRkZGQgW2F0XSBIOm1tQScsXG4gICAgICBzYW1lRWxzZTogJ0RvIE1NTSBZWVlZIFthdF0gSDptbUEnXG4gICAgfSwgb3B0aW9ucykpO1xuICB9LFxuICBjYWxlbmRhckRhdGU6IGZ1bmN0aW9uIGNhbGVuZGFyRGF0ZSh2YWx1ZSwgb3B0aW9ucykge1xuICAgIHJldHVybiBjYWxlbmRhcih2YWx1ZSwgX29iamVjdFNwcmVhZCh7XG4gICAgICBzYW1lRGF5OiAnW1RvZGF5XScsXG4gICAgICBuZXh0RGF5OiAnW1RvbW9ycm93XScsXG4gICAgICBuZXh0V2VlazogJ2RkZGQnLFxuICAgICAgbGFzdERheTogJ1tZZXN0ZXJkYXldJyxcbiAgICAgIGxhc3RXZWVrOiAnW0xhc3RdIGRkZGQnLFxuICAgICAgc2FtZUVsc2U6ICdEbyBNTU0gWVlZWSdcbiAgICB9LCBvcHRpb25zKSk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGlzU3RyaW5nQURhdGVGb3JtYXQoeCkge1xuICByZXR1cm4gZGF0ZUZvcm1hdEFsaWFzZXMuaGFzT3duUHJvcGVydHkoeCk7XG59XG5cbmZ1bmN0aW9uIGluc3RhbmNlT2ZGb3JtYXREYXRlQ29uZmlnKHgpIHtcbiAgcmV0dXJuIF90eXBlb2YoeCkgPT09ICdvYmplY3QnICYmICh4Lmhhc093blByb3BlcnR5KCdmb3JtYXQnKSB8fCB4Lmhhc093blByb3BlcnR5KCduaWwnKSB8fCB4Lmhhc093blByb3BlcnR5KCdvcHRpb25zJykpO1xufVxuXG5leHBvcnQgdmFyIGZvcm1hdERhdGUgPSBmdW5jdGlvbiBmb3JtYXREYXRlKHZhbHVlKSB7XG4gIHZhciBkYXRlRm9ybWF0S2V5T3JDb25maWcgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6ICdkYXRlVGltZSc7XG5cbiAgaWYgKGlzU3RyaW5nKGRhdGVGb3JtYXRLZXlPckNvbmZpZykpIHtcbiAgICBpZiAoaXNOaWwodmFsdWUpKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgdmFyIGRhdGVGb3JtYXRTdHJPckZ1bmMgPSBpc1N0cmluZ0FEYXRlRm9ybWF0KGRhdGVGb3JtYXRLZXlPckNvbmZpZykgPyBkYXRlRm9ybWF0QWxpYXNlc1tkYXRlRm9ybWF0S2V5T3JDb25maWddIDogZGF0ZUZvcm1hdEtleU9yQ29uZmlnO1xuXG4gICAgaWYgKGlzRnVuY3Rpb24oZGF0ZUZvcm1hdFN0ck9yRnVuYykpIHtcbiAgICAgIHJldHVybiBkYXRlRm9ybWF0U3RyT3JGdW5jKHZhbHVlLCB7fSk7XG4gICAgfVxuXG4gICAgaWYgKGlzU3RyaW5nKGRhdGVGb3JtYXRTdHJPckZ1bmMpKSB7XG4gICAgICByZXR1cm4gbW9tZW50KHZhbHVlKS5mb3JtYXQoZGF0ZUZvcm1hdFN0ck9yRnVuYyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGluc3RhbmNlT2ZGb3JtYXREYXRlQ29uZmlnKGRhdGVGb3JtYXRLZXlPckNvbmZpZykpIHtcbiAgICB2YXIgX2RhdGVGb3JtYXRLZXlPckNvbmZpID0gZGF0ZUZvcm1hdEtleU9yQ29uZmlnLmZvcm1hdCxcbiAgICAgICAgZm9ybWF0ID0gX2RhdGVGb3JtYXRLZXlPckNvbmZpID09PSB2b2lkIDAgPyAnZGF0ZVRpbWUnIDogX2RhdGVGb3JtYXRLZXlPckNvbmZpLFxuICAgICAgICBfZGF0ZUZvcm1hdEtleU9yQ29uZmkyID0gZGF0ZUZvcm1hdEtleU9yQ29uZmlnLm5pbCxcbiAgICAgICAgbmlsID0gX2RhdGVGb3JtYXRLZXlPckNvbmZpMiA9PT0gdm9pZCAwID8gJycgOiBfZGF0ZUZvcm1hdEtleU9yQ29uZmkyLFxuICAgICAgICBvcHRpb25zID0gZGF0ZUZvcm1hdEtleU9yQ29uZmlnLm9wdGlvbnM7XG4gICAgdmFyIGRhdGVGb3JtYXQgPSBkYXRlRm9ybWF0QWxpYXNlc1tmb3JtYXRdIHx8IGZvcm1hdDtcblxuICAgIGlmIChpc05pbCh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBuaWw7XG4gICAgfVxuXG4gICAgaWYgKGlzRnVuY3Rpb24oZGF0ZUZvcm1hdCkpIHtcbiAgICAgIHJldHVybiBkYXRlRm9ybWF0KHZhbHVlLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBpZiAoaXNTdHJpbmcoZGF0ZUZvcm1hdCkpIHtcbiAgICAgIHJldHVybiBtb21lbnQodmFsdWUpLmZvcm1hdChkYXRlRm9ybWF0KTtcbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gZm9ybWF0IHZhbHVlIHVzaW5nIGRhdGVGb3JtYXRLZXlPckNvbmZpZzogXCIuY29uY2F0KGRhdGVGb3JtYXRLZXlPckNvbmZpZykpO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBudW1lcmFsIGZyb20gJ251bWVyYWwnO1xuaW1wb3J0IHsgaXNOaWwsIGlzU3RyaW5nIH0gZnJvbSAnLi4vcHJlZGljYXRlJztcbnZhciBudW1iZXJGb3JtYXRBbGlhc2VzID0ge1xuICBkZWNpbWFsMTogJzAsMC4wJyxcbiAgZGVjaW1hbDI6ICcwLDAuMDAnLFxuICBkZWNpbWFsMzogJzAsMC4wMDAnLFxuICBvcmRpbmFsOiAnMG8nLFxuICBpbnRlZ2VyOiAnMCwwJ1xufTtcbmV4cG9ydCB2YXIgZm9ybWF0TnVtYmVyID0gZnVuY3Rpb24gZm9ybWF0TnVtYmVyKHZhbHVlKSB7XG4gIHZhciBudW1iZXJGb3JtYXRPckNvbmZpZyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gIHZhciBmb3JtYXQ7XG4gIHZhciBuaWwgPSAnJztcbiAgdmFyIHJvdW5kO1xuXG4gIGlmIChpc1N0cmluZyhudW1iZXJGb3JtYXRPckNvbmZpZykpIHtcbiAgICBmb3JtYXQgPSBudW1iZXJGb3JtYXRPckNvbmZpZztcbiAgfSBlbHNlIHtcbiAgICBmb3JtYXQgPSBudW1iZXJGb3JtYXRPckNvbmZpZy5mb3JtYXQ7XG4gICAgbmlsID0gbnVtYmVyRm9ybWF0T3JDb25maWcubmlsIHx8ICcnO1xuICAgIHJvdW5kID0gbnVtYmVyRm9ybWF0T3JDb25maWcucm91bmQ7XG4gIH1cblxuICBpZiAoIWZvcm1hdCkge1xuICAgIHJldHVybiBpc05pbCh2YWx1ZSkgPyBuaWwgOiB2YWx1ZS50b1N0cmluZygpO1xuICB9XG5cbiAgdmFyIHJvdW5kaW5nRnVuYyA9IHJvdW5kID8gTWF0aC5yb3VuZCA6IE1hdGguZmxvb3I7XG4gIHZhciBudW1iZXJGb3JtYXQgPSBudW1iZXJGb3JtYXRBbGlhc2VzW2Zvcm1hdF0gfHwgZm9ybWF0O1xuICByZXR1cm4gaXNOaWwodmFsdWUpID8gbmlsIDogbnVtZXJhbCh2YWx1ZSkuZm9ybWF0KG51bWJlckZvcm1hdCwgcm91bmRpbmdGdW5jKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBpc05pbCB9IGZyb20gJy4uL3ByZWRpY2F0ZSc7XG5leHBvcnQgdmFyIGZvcm1hdFRleHQgPSBmdW5jdGlvbiBmb3JtYXRUZXh0KHZhbHVlKSB7XG4gIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7XG4gICAgbmlsOiAnJ1xuICB9O1xuICByZXR1cm4gaXNOaWwodmFsdWUpID8gb3B0aW9ucy5uaWwgOiB2YWx1ZS50b1N0cmluZygpO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IGlzTmlsLCBpc0FycmF5LCBpc0Jvb2xlYW4sIGlzRGF0ZSwgaXNOYU4sIGlzTnVtYmVyLCBpc1N0cmluZyB9IGZyb20gJy4uL3ByZWRpY2F0ZSc7XG5pbXBvcnQgeyBmb3JtYXRCb29sZWFuIH0gZnJvbSAnLi9mb3JtYXRfYm9vbGVhbic7XG5pbXBvcnQgeyBmb3JtYXREYXRlIH0gZnJvbSAnLi9mb3JtYXRfZGF0ZSc7XG5pbXBvcnQgeyBmb3JtYXROdW1iZXIgfSBmcm9tICcuL2Zvcm1hdF9udW1iZXInO1xuaW1wb3J0IHsgZm9ybWF0VGV4dCB9IGZyb20gJy4vZm9ybWF0X3RleHQnO1xuZXhwb3J0IHZhciBmb3JtYXRBdXRvID0gZnVuY3Rpb24gZm9ybWF0QXV0byh2YWx1ZSkge1xuICBpZiAoaXNOaWwodmFsdWUpIHx8IGlzTmFOKHZhbHVlKSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZm9ybWF0VGV4dCh2YWx1ZSk7XG4gIH1cblxuICBpZiAoaXNEYXRlKHZhbHVlKSkge1xuICAgIHJldHVybiBmb3JtYXREYXRlKHZhbHVlKTtcbiAgfVxuXG4gIGlmIChpc0Jvb2xlYW4odmFsdWUpKSB7XG4gICAgcmV0dXJuIGZvcm1hdEJvb2xlYW4odmFsdWUpO1xuICB9XG5cbiAgaWYgKGlzTnVtYmVyKHZhbHVlKSkge1xuICAgIHJldHVybiBmb3JtYXROdW1iZXIodmFsdWUpO1xuICB9XG5cbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICByZXR1cm4gZm9ybWF0QXV0byhpdGVtKTtcbiAgICB9KS5qb2luKCcsICcpIDogZm9ybWF0QXV0byh2YWx1ZSk7XG4gIH0gLy8gVE9ETyBub3Qgc3VyZSBpZiB3ZSB3YW50IHRoYXQuLiB0aGUgKCspIGlzIHRoYXQgd2Ugc2hvdyBzb21ldGhpbmcsIHRoZSAoLSkgaXMgdGhhdCBpdCdzIHZlcnkgdGVjaG5pY2FsXG5cblxuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbnZhciBpc0VsYXN0aWNIb3N0ID0gL14oW2EtekEtWjAtOV0rXFwuKSplbGFzdGljXFwuY28kLzsgLy8gSW4gb3JkZXIgZm9yIHRoZSBkb21haW4gdG8gYmUgc2VjdXJlIGl0IG5lZWRzIHRvIGJlIGluIGEgcGFyc2FibGUgZm9ybWF0LFxuLy8gd2l0aCB0aGUgcHJvdG9jb2wgb2YgaHR0cDogb3IgaHR0cHM6IGFuZCB0aGUgaG9zdCBtYXRjaGluZyBlbGFzdGljLmNvIG9yXG4vLyBvZiBvbmUgaXRzIHN1YmRvbWFpbnNcblxuZXhwb3J0IHZhciBpc0RvbWFpblNlY3VyZSA9IGZ1bmN0aW9uIGlzRG9tYWluU2VjdXJlKCkge1xuICB2YXIgdXJsID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiAnJztcblxuICB0cnkge1xuICAgIHZhciBwYXJzZWQgPSBuZXcgVVJMKHVybCk7XG4gICAgdmFyIHByb3RvY29sTWF0Y2hlcyA9IHBhcnNlZC5wcm90b2NvbCA9PT0gJ2h0dHA6JyB8fCBwYXJzZWQucHJvdG9jb2wgPT09ICdodHRwczonO1xuICAgIHZhciBkb21haW5NYXRjaGVzID0gISFwYXJzZWQuaG9zdC5tYXRjaChpc0VsYXN0aWNIb3N0KTtcbiAgICByZXR1cm4gcHJvdG9jb2xNYXRjaGVzICYmIGRvbWFpbk1hdGNoZXM7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8qKlxuICogU2VjdXJlcyBvdXRib3VuZCBsaW5rcy4gRm9yIG1vcmUgaW5mbzpcbiAqIGh0dHBzOi8vd3d3LmppdGJpdC5jb20vYWxleGJsb2cvMjU2LXRhcmdldGJsYW5rLS0tdGhlLW1vc3QtdW5kZXJlc3RpbWF0ZWQtdnVsbmVyYWJpbGl0eS1ldmVyL1xuICovXG5pbXBvcnQgeyBpc0RvbWFpblNlY3VyZSB9IGZyb20gJy4uL3VybCc7XG5leHBvcnQgdmFyIGdldFNlY3VyZVJlbEZvclRhcmdldCA9IGZ1bmN0aW9uIGdldFNlY3VyZVJlbEZvclRhcmdldChfcmVmKSB7XG4gIHZhciBocmVmID0gX3JlZi5ocmVmLFxuICAgICAgX3JlZiR0YXJnZXQgPSBfcmVmLnRhcmdldCxcbiAgICAgIHRhcmdldCA9IF9yZWYkdGFyZ2V0ID09PSB2b2lkIDAgPyAnJyA6IF9yZWYkdGFyZ2V0LFxuICAgICAgcmVsID0gX3JlZi5yZWw7XG4gIHZhciBpc0VsYXN0aWNIcmVmID0gISFocmVmICYmIGlzRG9tYWluU2VjdXJlKGhyZWYpO1xuICB2YXIgcmVsUGFydHMgPSAhIXJlbCA/IHJlbC5zcGxpdCgnICcpLmZpbHRlcihmdW5jdGlvbiAocGFydCkge1xuICAgIHJldHVybiAhIXBhcnQubGVuZ3RoICYmIHBhcnQgIT09ICdub3JlZmVycmVyJztcbiAgfSkgOiBbXTtcblxuICBpZiAoIWlzRWxhc3RpY0hyZWYpIHtcbiAgICByZWxQYXJ0cy5wdXNoKCdub3JlZmVycmVyJyk7XG4gIH1cblxuICBpZiAodGFyZ2V0LmluY2x1ZGVzKCdfYmxhbmsnKSAmJiByZWxQYXJ0cy5pbmRleE9mKCdub29wZW5lcicpID09PSAtMSkge1xuICAgIHJlbFBhcnRzLnB1c2goJ25vb3BlbmVyJyk7XG4gIH1cblxuICByZXR1cm4gcmVsUGFydHMuc29ydCgpLmpvaW4oJyAnKS50cmltKCk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBBU0MgPSAnYXNjJztcbnZhciBERVNDID0gJ2Rlc2MnO1xuZXhwb3J0IHZhciBTb3J0RGlyZWN0aW9uID0gT2JqZWN0LmZyZWV6ZSh7XG4gIEFTQzogQVNDLFxuICBERVNDOiBERVNDLFxuICBpc0FzYzogZnVuY3Rpb24gaXNBc2MoZGlyZWN0aW9uKSB7XG4gICAgcmV0dXJuIGRpcmVjdGlvbiA9PT0gQVNDO1xuICB9LFxuICByZXZlcnNlOiBmdW5jdGlvbiByZXZlcnNlKGRpcmVjdGlvbikge1xuICAgIHJldHVybiB0aGlzLmlzQXNjKGRpcmVjdGlvbikgPyBERVNDIDogQVNDO1xuICB9XG59KTtcbmV4cG9ydCB2YXIgU29ydERpcmVjdGlvblR5cGUgPSBQcm9wVHlwZXMub25lT2YoW0FTQywgREVTQ10pOyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IF9nZXQgZnJvbSAnbG9kYXNoL2dldCc7XG5pbXBvcnQgX29taXQgZnJvbSAnbG9kYXNoL29taXQnOyAvLyB3cmFwIHRoZSBsb2Rhc2ggZnVuY3Rpb25zIHRvIGF2b2lkIGhhdmluZyBsb2Rhc2gncyBUUyB0eXBlIGRlZmluaXRpb24gZnJvbSBiZWluZ1xuLy8gZXhwb3J0ZWQsIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIHRoZSBsb2Rhc2ggbmFtZXNwYWNlIGlmIG90aGVyIHZlcnNpb25zIGFyZSB1c2VkXG5cbmV4cG9ydCB2YXIgZ2V0ID0gZnVuY3Rpb24gZ2V0KG9iamVjdCwgcGF0aCwgZGVmYXVsdFZhbHVlKSB7XG4gIHJldHVybiBfZ2V0KG9iamVjdCwgcGF0aCwgZGVmYXVsdFZhbHVlKTtcbn07XG5leHBvcnQgdmFyIG9taXQgPSBmdW5jdGlvbiBvbWl0KG9iamVjdCwgcGF0aHMpIHtcbiAgcmV0dXJuIF9vbWl0KG9iamVjdCwgcGF0aHMpO1xufTsiLCAiZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHsgdmFyIF9pID0gYXJyID09IG51bGwgPyBudWxsIDogdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBhcnJbU3ltYm9sLml0ZXJhdG9yXSB8fCBhcnJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAoX2kgPT0gbnVsbCkgcmV0dXJuOyB2YXIgX2FyciA9IFtdOyB2YXIgX24gPSB0cnVlOyB2YXIgX2QgPSBmYWxzZTsgdmFyIF9zLCBfZTsgdHJ5IHsgZm9yIChfaSA9IF9pLmNhbGwoYXJyKTsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkgeyBfYXJyLnB1c2goX3MudmFsdWUpOyBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7IH0gfSBjYXRjaCAoZXJyKSB7IF9kID0gdHJ1ZTsgX2UgPSBlcnI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTsgfSBmaW5hbGx5IHsgaWYgKF9kKSB0aHJvdyBfZTsgfSB9IHJldHVybiBfYXJyOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuZXhwb3J0IHZhciBQT1NJVElPTlMgPSBbJ3RvcCcsICdyaWdodCcsICdib3R0b20nLCAnbGVmdCddO1xudmFyIHJlbGF0ZWREaW1lbnNpb24gPSB7XG4gIHRvcDogJ2hlaWdodCcsXG4gIHJpZ2h0OiAnd2lkdGgnLFxuICBib3R0b206ICdoZWlnaHQnLFxuICBsZWZ0OiAnd2lkdGgnXG59O1xudmFyIGRpbWVuc2lvblBvc2l0aW9uQXR0cmlidXRlID0ge1xuICBoZWlnaHQ6ICd0b3AnLFxuICB3aWR0aDogJ2xlZnQnXG59O1xudmFyIHBvc2l0aW9uQ29tcGxlbWVudHMgPSB7XG4gIHRvcDogJ2JvdHRvbScsXG4gIHJpZ2h0OiAnbGVmdCcsXG4gIGJvdHRvbTogJ3RvcCcsXG4gIGxlZnQ6ICdyaWdodCdcbn07IC8vIGFsd2F5cyByZXNvbHZpbmcgdG8gdG9wL2xlZnQgaXMgdGFrZW4gYWR2YW50YWdlIG9mIGJ5IGtub3dpbmcgdGhleSBhcmUgdGhlXG4vLyBtaW5pbXVtIGVkZ2VzIG9mIHRoZSBib3VuZGluZyBib3hcblxudmFyIHBvc2l0aW9uU3Vic3RpdHV0ZXMgPSB7XG4gIHRvcDogJ2xlZnQnLFxuICByaWdodDogJ3RvcCcsXG4gIGJvdHRvbTogJ2xlZnQnLFxuICBsZWZ0OiAndG9wJ1xufTtcblxudmFyIGdldEJ1ZmZlclZhbHVlcyA9IGZ1bmN0aW9uIGdldEJ1ZmZlclZhbHVlcyhidWZmZXIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYnVmZmVyKSkge1xuICAgIHZhciBfYnVmZmVyID0gX3NsaWNlZFRvQXJyYXkoYnVmZmVyLCA0KSxcbiAgICAgICAgdG9wQnVmZmVyID0gX2J1ZmZlclswXSxcbiAgICAgICAgcmlnaHRCdWZmZXIgPSBfYnVmZmVyWzFdLFxuICAgICAgICBib3R0b21CdWZmZXIgPSBfYnVmZmVyWzJdLFxuICAgICAgICBsZWZ0QnVmZmVyID0gX2J1ZmZlclszXTtcblxuICAgIHJldHVybiBbdG9wQnVmZmVyLCByaWdodEJ1ZmZlciwgYm90dG9tQnVmZmVyLCBsZWZ0QnVmZmVyXTtcbiAgfVxuXG4gIHJldHVybiBbYnVmZmVyLCBidWZmZXIsIGJ1ZmZlciwgYnVmZmVyXTtcbn07XG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGFic29sdXRlIHBvc2l0aW9uaW5nIChyZWxhdGl2ZSB0byBkb2N1bWVudC5ib2R5KSB0byBwbGFjZSBhIHBvcG92ZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBhbmNob3Ige0hUTUxFbGVtZW50fSBFbGVtZW50IHRvIGFuY2hvciB0aGUgcG9wb3ZlciB0b1xuICogQHBhcmFtIHBvcG92ZXIge0hUTUxFbGVtZW50fSBFbGVtZW50IGNvbnRhaW5pbmcgdGhlIHBvcG92ZXIgY29udGVudFxuICogQHBhcmFtIHBvc2l0aW9uIHtzdHJpbmd9IFBvc2l0aW9uIHRoZSB1c2VyIHdhbnRzLiBPbmUgb2YgW1widG9wXCIsIFwicmlnaHRcIiwgXCJib3R0b21cIiwgXCJsZWZ0XCJdXG4gKiBAcGFyYW0gW2ZvcmNlUG9zaXRpb25dIHtib29sZWFufSBJZiB0cnVlLCB1c2Ugb25seSB0aGUgcHJvdmlkZWQgYHBvc2l0aW9uYCB2YWx1ZSBhbmQgZG9uJ3QgdHJ5IGFueSBvdGhlciBwb3NpdGlvblxuICogQHBhcmFtIFthbGlnbl0ge3N0cmluZ30gQ3Jvc3MtYXhpcyBhbGlnbm1lbnQuIE9uZSBvZiBbXCJ0b3BcIiwgXCJyaWdodFwiLCBcImJvdHRvbVwiLCBcImxlZnRcIl1cbiAqIEBwYXJhbSBbYnVmZmVyPTE2XSB7bnVtYmVyfSBNaW5pbXVtIGRpc3RhbmNlIGJldHdlZW4gdGhlIHBvcG92ZXIgYW5kIHRoZSBib3VuZGluZyBjb250YWluZXJcbiAqIEBwYXJhbSBbb2Zmc2V0PTBdIHtudW1iZXJ9IERpc3RhbmNlIGJldHdlZW4gdGhlIHBvcG92ZXIgYW5kIHRoZSBhbmNob3JcbiAqIEBwYXJhbSBbYWxsb3dDcm9zc0F4aXM9dHJ1ZV0ge2Jvb2xlYW59IFdoZXRoZXIgdG8gYWxsb3cgdGhlIHBvcG92ZXIgdG8gYmUgcG9zaXRpb25lZCBvbiB0aGUgY3Jvc3MtYXhpc1xuICogQHBhcmFtIFtjb250YWluZXJdIHtIVE1MRWxlbWVudH0gRWxlbWVudCB0aGUgcG9wb3ZlciBtdXN0IGJlIGNvbnN0cmFpbmVkIHRvIGZpdCB3aXRoaW5cbiAqIEBwYXJhbSBbYXJyb3dDb25maWddIHt7YXJyb3dXaWR0aDogbnVtYmVyLCBhcnJvd0J1ZmZlcjogbnVtYmVyfX0gSWZcbiAqICBwcmVzZW50LCBkZXNjcmliZXMgdGhlIHNpemUgJiBjb25zdHJhaW50cyBmb3IgYW4gYXJyb3cgZWxlbWVudCwgYW5kIHRoZVxuICogIGZ1bmN0aW9uIHJldHVybiB2YWx1ZSB3aWxsIGluY2x1ZGUgYW4gYGFycm93YCBwYXJhbSB3aXRoIHBvc2l0aW9uIGRldGFpbHNcbiAqXG4gKiBAcmV0dXJucyB7RmluZFBvcG92ZXJQb3NpdGlvblJlc3VsdH0gYWJzb2x1dGUgcGFnZSBjb29yZGluYXRlcyBmb3IgdGhlXG4gKiBwb3BvdmVyLCBhbmQgdGhlIHBsYWNlbWVudCdzIHJlbGF0aW9uIHRvIHRoZSBhbmNob3Igb3IgdW5kZWZpbmVkXG4gKiB0aGVyZSdzIG5vIHJvb20uXG4gKi9cblxuXG5leHBvcnQgZnVuY3Rpb24gZmluZFBvcG92ZXJQb3NpdGlvbihfcmVmKSB7XG4gIHZhciBhbmNob3IgPSBfcmVmLmFuY2hvcixcbiAgICAgIHBvcG92ZXIgPSBfcmVmLnBvcG92ZXIsXG4gICAgICBhbGlnbiA9IF9yZWYuYWxpZ24sXG4gICAgICBwb3NpdGlvbiA9IF9yZWYucG9zaXRpb24sXG4gICAgICBmb3JjZVBvc2l0aW9uID0gX3JlZi5mb3JjZVBvc2l0aW9uLFxuICAgICAgX3JlZiRidWZmZXIgPSBfcmVmLmJ1ZmZlcixcbiAgICAgIGJ1ZmZlciA9IF9yZWYkYnVmZmVyID09PSB2b2lkIDAgPyAxNiA6IF9yZWYkYnVmZmVyLFxuICAgICAgX3JlZiRvZmZzZXQgPSBfcmVmLm9mZnNldCxcbiAgICAgIG9mZnNldCA9IF9yZWYkb2Zmc2V0ID09PSB2b2lkIDAgPyAwIDogX3JlZiRvZmZzZXQsXG4gICAgICBfcmVmJGFsbG93Q3Jvc3NBeGlzID0gX3JlZi5hbGxvd0Nyb3NzQXhpcyxcbiAgICAgIGFsbG93Q3Jvc3NBeGlzID0gX3JlZiRhbGxvd0Nyb3NzQXhpcyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYkYWxsb3dDcm9zc0F4aXMsXG4gICAgICBjb250YWluZXIgPSBfcmVmLmNvbnRhaW5lcixcbiAgICAgIGFycm93Q29uZmlnID0gX3JlZi5hcnJvd0NvbmZpZyxcbiAgICAgIHJldHVybkJvdW5kaW5nQm94ID0gX3JlZi5yZXR1cm5Cb3VuZGluZ0JveDtcbiAgLy8gZmluZCB0aGUgc2NyZWVuLXJlbGF0aXZlIGJvdW5kaW5nIGJveGVzIG9mIHRoZSBhbmNob3IsIHBvcG92ZXIsIGFuZCBjb250YWluZXJcbiAgdmFyIGFuY2hvckJvdW5kaW5nQm94ID0gZ2V0RWxlbWVudEJvdW5kaW5nQm94KGFuY2hvcik7XG4gIHZhciBwb3BvdmVyQm91bmRpbmdCb3ggPSBnZXRFbGVtZW50Qm91bmRpbmdCb3gocG9wb3Zlcik7IC8vIGNhbGN1bGF0ZSB0aGUgd2luZG93J3MgYm91bmRzXG4gIC8vIHdpbmRvdy4oaW5uZXJXaWR0aHxpbm5lckhlaWdodCkgZG8gbm90IGFjY291bnQgZm9yIHNjcm9sbGJhcnNcbiAgLy8gc28gcHJlZmVyIHRoZSBjbGllbnRXaWR0aC9jbGllbnRIZWlnaHQgb2YgdGhlIERPTSBpZiBhdmFpbGFibGVcblxuICB2YXIgZG9jdW1lbnRXaWR0aCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCB8fCB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgdmFyIGRvY3VtZW50SGVpZ2h0ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCB8fCB3aW5kb3cuaW5uZXJIZWlnaHQ7XG4gIHZhciB3aW5kb3dCb3VuZGluZ0JveCA9IHtcbiAgICB0b3A6IDAsXG4gICAgcmlnaHQ6IGRvY3VtZW50V2lkdGgsXG4gICAgYm90dG9tOiBkb2N1bWVudEhlaWdodCxcbiAgICBsZWZ0OiAwLFxuICAgIGhlaWdodDogZG9jdW1lbnRIZWlnaHQsXG4gICAgd2lkdGg6IGRvY3VtZW50V2lkdGhcbiAgfTsgLy8gaWYgbm8gY29udGFpbmVyIGVsZW1lbnQgaXMgZ2l2ZW4gZmFsbCBiYWNrIHRvIHVzaW5nIHRoZSB3aW5kb3cgdmlld3BvcnRcblxuICB2YXIgY29udGFpbmVyQm91bmRpbmdCb3ggPSBjb250YWluZXIgPyBnZXRFbGVtZW50Qm91bmRpbmdCb3goY29udGFpbmVyKSA6IHdpbmRvd0JvdW5kaW5nQm94O1xuICAvKipcbiAgICogYHBvc2l0aW9uYCB3YXMgc3BlY2lmaWVkIGJ5IHRoZSBmdW5jdGlvbiBjYWxsZXIgYW5kIGlzIGEgc3Ryb25nIGhpbnRcbiAgICogYXMgdG8gdGhlIHByZWZlcnJlZCBsb2NhdGlvbiBvZiB0aGUgcG9wb3ZlciByZWxhdGl2ZSB0byB0aGUgYW5jaG9yLlxuICAgKiBIb3dldmVyLCB3ZSBzdHJvbmdseSBwcmVmZXIgc2hvd2luZyBhbGwgb2YgdGhlIHBvcG92ZXIgY29udGVudCB3aXRoaW5cbiAgICogdGhlIHdpbmRvdytjb250YWluZXIgYm91bmRhcnkgYW5kIHdpbGwgaXRlcmF0ZSBvdmVyIHRoZSBmb3VyXG4gICAqIHBvc3NpYmxlIHNpZGVzIHVudGlsIGEgcGVyZmVjdCBmaXQgaXMgbG9jYXRlZC4gSWYgbm9uZSBvZiB0aGUgbG9jYXRpb25zXG4gICAqIGZ1bGx5IGNvbnRhaW4gcG9wb3ZlciwgdGhlIGxvY2F0aW9uIHdpdGggdGhlIGJlc3QgZml0IGlzIHNlbGVjdGVkLlxuICAgKlxuICAgKiBUaGlzIGFwcHJvYWNoIGZpcnN0IGNoZWNrcyB0aGUgcHJlZmVycmVkIGBwb3NpdGlvbmAsIHRoZW4gaXRzIG9wcG9zaXRlXG4gICAqIGFsb25nIHRoZSBzYW1lIGF4aXMsIG5leHQgYSBsb2NhdGlvbiBvbiB0aGUgY3Jvc3MtYXhpcywgYW5kIGZpbmFsbHkgaXRcbiAgICogdGVzdHMgdGhlIHJlbWFpbmluZyBwb3NpdGlvbi5cbiAgICpcbiAgICogZS5nLlxuICAgKiBpZiBwb3NpdGlvbiA9IFwidG9wXCIgdGhlIG9yZGVyIGlzIHRvcCwgYm90dG9tLCBsZWZ0IHJpZ2h0XG4gICAqIGlmIHBvc2l0aW9uID0gXCJyaWdodFwiIHRoZSBvcmRlciBpcyByaWdodCwgbGVmdCwgdG9wLCBib3R0b21cbiAgICovXG4gIC8vIFRyeSB0aGUgdXNlci1kZXNpcmVkIHBvc2l0aW9uIGZpcnN0LlxuXG4gIHZhciBpdGVyYXRpb25Qb3NpdGlvbnMgPSBbcG9zaXRpb25dOyAvLyBrZWVwIHVzZXItZGVmaW5lZCBhbGlnbm1lbnQgaW4gdGhlIG9yaWdpbmFsIHBvc2l0aW9ucy5cblxuICB2YXIgaXRlcmF0aW9uQWxpZ25tZW50cyA9IFthbGlnbl07XG5cbiAgaWYgKGZvcmNlUG9zaXRpb24gIT09IHRydWUpIHtcbiAgICBpdGVyYXRpb25Qb3NpdGlvbnMucHVzaChwb3NpdGlvbkNvbXBsZW1lbnRzW3Bvc2l0aW9uXSk7IC8vIFRyeSB0aGUgY29tcGxlbWVudGFyeSBwb3NpdGlvbi5cblxuICAgIGl0ZXJhdGlvbkFsaWdubWVudHMucHVzaChhbGlnbik7IC8vIGtlZXAgdXNlci1kZWZpbmVkIGFsaWdubWVudCBpbiB0aGUgY29tcGxlbWVudGFyeSBwb3NpdGlvbi5cblxuICAgIGlmIChhbGxvd0Nyb3NzQXhpcykge1xuICAgICAgaXRlcmF0aW9uUG9zaXRpb25zLnB1c2gocG9zaXRpb25TdWJzdGl0dXRlc1twb3NpdGlvbl0sIC8vIFN3aXRjaCB0byB0aGUgY3Jvc3MgYXhpcy5cbiAgICAgIHBvc2l0aW9uQ29tcGxlbWVudHNbcG9zaXRpb25TdWJzdGl0dXRlc1twb3NpdGlvbl1dIC8vIFRyeSB0aGUgY29tcGxlbWVudGFyeSBwb3NpdGlvbiBvbiB0aGUgY3Jvc3MgYXhpcy5cbiAgICAgICk7XG4gICAgICBpdGVyYXRpb25BbGlnbm1lbnRzLnB1c2godW5kZWZpbmVkLCB1bmRlZmluZWQpOyAvLyBkaXNjYXJkIGRlc2lyZWQgYWxpZ25tZW50IG9uIGNyb3NzLWF4aXNcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gcG9zaXRpb24gaXMgZm9yY2VkLCBpZiBpdCBjb25mbGljdHMgd2l0aCB0aGUgYWxpZ25tZW50IHRoZW4gcmVzZXQgYWxpZ24gdG8gYG51bGxgXG4gICAgLy8gZS5nLiBvcmlnaW5hbCBwbGFjZW1lbnQgcmVxdWVzdCBmb3IgYGRvd25MZWZ0YCBpcyBtb3ZlZCB0byB0aGUgYGxlZnRgIHNpZGUsIGZ1dHVyZSBjYWxsc1xuICAgIC8vIHdpbGwgcG9zaXRpb24gYW5kIGFsaWduIGBsZWZ0YCwgYW5kIGBsZWZ0TGVmdGAgaXMgbm90IGEgdmFsaWQgcGxhY2VtZW50XG4gICAgaWYgKHBvc2l0aW9uID09PSBhbGlnbiB8fCBhbGlnbiAhPT0gdW5kZWZpbmVkICYmIHBvc2l0aW9uID09PSBwb3NpdGlvbkNvbXBsZW1lbnRzW2FsaWduXSkge1xuICAgICAgaXRlcmF0aW9uQWxpZ25tZW50c1swXSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICB2YXIgYmVzdEZpdCA9IHVuZGVmaW5lZDtcbiAgdmFyIGJlc3RQb3NpdGlvbiA9IG51bGw7XG5cbiAgZm9yICh2YXIgaWR4ID0gMDsgaWR4IDwgaXRlcmF0aW9uUG9zaXRpb25zLmxlbmd0aDsgaWR4KyspIHtcbiAgICB2YXIgaXRlcmF0aW9uUG9zaXRpb24gPSBpdGVyYXRpb25Qb3NpdGlvbnNbaWR4XTsgLy8gU2VlIGlmIHdlIGNhbiBmaW5kIGEgcG9zaXRpb24gd2l0aCBhIGJldHRlciBmaXQgdGhhbiB3ZSd2ZSBmb3VuZCBzbyBmYXIuXG5cbiAgICB2YXIgc2NyZWVuQ29vcmRpbmF0ZXMgPSBnZXRQb3BvdmVyU2NyZWVuQ29vcmRpbmF0ZXMoe1xuICAgICAgcG9zaXRpb246IGl0ZXJhdGlvblBvc2l0aW9uLFxuICAgICAgYWxpZ246IGl0ZXJhdGlvbkFsaWdubWVudHNbaWR4XSxcbiAgICAgIGFuY2hvckJvdW5kaW5nQm94OiBhbmNob3JCb3VuZGluZ0JveCxcbiAgICAgIHBvcG92ZXJCb3VuZGluZ0JveDogcG9wb3ZlckJvdW5kaW5nQm94LFxuICAgICAgd2luZG93Qm91bmRpbmdCb3g6IHdpbmRvd0JvdW5kaW5nQm94LFxuICAgICAgY29udGFpbmVyQm91bmRpbmdCb3g6IGNvbnRhaW5lckJvdW5kaW5nQm94LFxuICAgICAgb2Zmc2V0OiBvZmZzZXQsXG4gICAgICBidWZmZXI6IGJ1ZmZlcixcbiAgICAgIGFycm93Q29uZmlnOiBhcnJvd0NvbmZpZ1xuICAgIH0pO1xuXG4gICAgaWYgKGJlc3RGaXQgPT09IHVuZGVmaW5lZCB8fCBzY3JlZW5Db29yZGluYXRlcy5maXQgPiBiZXN0Rml0KSB7XG4gICAgICBiZXN0Rml0ID0gc2NyZWVuQ29vcmRpbmF0ZXMuZml0O1xuICAgICAgYmVzdFBvc2l0aW9uID0ge1xuICAgICAgICBmaXQ6IHNjcmVlbkNvb3JkaW5hdGVzLmZpdCxcbiAgICAgICAgcG9zaXRpb246IGl0ZXJhdGlvblBvc2l0aW9uLFxuICAgICAgICB0b3A6IHNjcmVlbkNvb3JkaW5hdGVzLnRvcCArIHdpbmRvdy5wYWdlWU9mZnNldCxcbiAgICAgICAgbGVmdDogc2NyZWVuQ29vcmRpbmF0ZXMubGVmdCArIHdpbmRvdy5wYWdlWE9mZnNldCxcbiAgICAgICAgYXJyb3c6IHNjcmVlbkNvb3JkaW5hdGVzLmFycm93XG4gICAgICB9OyAvLyBJZiB3ZSd2ZSBhbHJlYWR5IGZvdW5kIHRoZSBpZGVhbCBmaXQsIHVzZSB0aGF0IHBvc2l0aW9uLlxuXG4gICAgICBpZiAoYmVzdEZpdCA9PT0gMSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9IC8vIElmIHdlIGhhdmVuJ3QgaW1wcm92ZWQgdGhlIGZpdCwgdGhlbiBjb250aW51ZSBvbiBhbmQgdHJ5IGEgbmV3IHBvc2l0aW9uLlxuXG4gIH1cblxuICBpZiAoYmVzdFBvc2l0aW9uID09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBjYWxjdWxhdGUgYmVzdFBvc2l0aW9uJyk7XG4gIH1cblxuICBpZiAocmV0dXJuQm91bmRpbmdCb3gpIHtcbiAgICBiZXN0UG9zaXRpb24uYW5jaG9yQm91bmRpbmdCb3ggPSBhbmNob3JCb3VuZGluZ0JveDtcbiAgfVxuXG4gIHJldHVybiBiZXN0UG9zaXRpb247XG59XG5cbi8qKlxuICogR2l2ZW4gYSB0YXJnZXQgcG9zaXRpb24gYW5kIHRoZSBwb3BvdmVyJ3Mgc3Vycm91bmRpbmcgY29udGV4dCwgcmV0dXJucyBlaXRoZXIgYW5cbiAqIG9iamVjdCB3aXRoIHt0b3AsIGxlZnR9IHNjcmVlbiBjb29yZGluYXRlcyBvciBgbnVsbGAgaWYgaXQncyBub3QgcG9zc2libGUgdG8gc2hvd1xuICogY29udGVudCBpbiB0aGUgdGFyZ2V0IHBvc2l0aW9uXG4gKiBAcGFyYW0gcG9zaXRpb24ge3N0cmluZ30gdGhlIHRhcmdldCBwb3NpdGlvbiwgb25lIG9mIFtcInRvcFwiLCBcInJpZ2h0XCIsIFwiYm90dG9tXCIsIFwibGVmdFwiXVxuICogQHBhcmFtIGFsaWduIHtzdHJpbmd9IHRhcmdldCBhbGlnbm1lbnQgb24gdGhlIGNyb3NzLWF4aXMsIG9uZSBvZiBbXCJ0b3BcIiwgXCJyaWdodFwiLCBcImJvdHRvbVwiLCBcImxlZnRcIl1cbiAqIEBwYXJhbSBhbmNob3JCb3VuZGluZ0JveCB7T2JqZWN0fSBib3VuZGluZyBib3ggb2YgdGhlIGFuY2hvciBlbGVtZW50XG4gKiBAcGFyYW0gcG9wb3ZlckJvdW5kaW5nQm94IHtPYmplY3R9IGJvdW5kaW5nIGJveCBvZiB0aGUgcG9wb3ZlciBlbGVtZW50XG4gKiBAcGFyYW0gd2luZG93Qm91bmRpbmdCb3gge09iamVjdH0gYm91bmRpbmcgYm94IG9mIHRoZSB3aW5kb3dcbiAqIEBwYXJhbSBjb250YWluZXJCb3VuZGluZ0JveCB7T2JqZWN0fSBib3VuZGluZyBib3ggb2YgdGhlIGNvbnRhaW5lclxuICogQHBhcmFtIFthcnJvd0NvbmZpZ10ge3thcnJvd1dpZHRoOiBudW1iZXIsIGFycm93QnVmZmVyOiBudW1iZXJ9fSBJZiBwcmVzZW50LCBkZXNjcmliZXMgdGhlIHNpemUgJlxuICogIGNvbnN0cmFpbnRzIGZvciBhbiBhcnJvdyBlbGVtZW50LCBhbmQgdGhlIGZ1bmN0aW9uIHJldHVybiB2YWx1ZSB3aWxsIGluY2x1ZGUgYW4gYGFycm93YCBwYXJhbVxuICogIHdpdGggcG9zaXRpb24gZGV0YWlsc1xuICogQHBhcmFtIFtvZmZzZXQ9MF0ge251bWJlcn0gRGlzdGFuY2UgYmV0d2VlbiB0aGUgcG9wb3ZlciBhbmQgdGhlIGFuY2hvclxuICogQHBhcmFtIFtidWZmZXI9MF0ge251bWJlcn0gTWluaW11bSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBwb3BvdmVyJ3NcbiAqICBwbGFjZW1lbnQgYW5kIHRoZSBjb250YWluZXIgZWRnZVxuICpcbiAqIEByZXR1cm5zIHtHZXRQb3BvdmVyU2NyZWVuQ29vcmRpbmF0ZXNSZXN1bHR9XG4gKiAgb2JqZWN0IHdpdGggdG9wL2xlZnQgY29vcmRpbmF0ZXMsIHRoZSBwb3BvdmVyJ3MgcmVsYXRpdmUgcG9zaXRpb24gdG8gdGhlIGFuY2hvciwgYW5kIGhvdyB3ZWxsIHRoZVxuICogIHBvcG92ZXIgZml0cyBpbiB0aGUgbG9jYXRpb24gKDAuMCAtPiAxLjApIGNvb3JkaW5hdGVzIGFuZCB0aGUgcG9wb3ZlcidzIHJlbGF0aXZlIHBvc2l0aW9uLCBpZlxuICogIHRoZXJlIGlzIG5vIHJvb20gaW4gdGhpcyBwbGFjZW1lbnQgdGhlbiBudWxsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQb3BvdmVyU2NyZWVuQ29vcmRpbmF0ZXMoX3JlZjIpIHtcbiAgdmFyIF9wb3BvdmVyUGxhY2VtZW50LCBfcmVmMztcblxuICB2YXIgcG9zaXRpb24gPSBfcmVmMi5wb3NpdGlvbixcbiAgICAgIGFsaWduID0gX3JlZjIuYWxpZ24sXG4gICAgICBhbmNob3JCb3VuZGluZ0JveCA9IF9yZWYyLmFuY2hvckJvdW5kaW5nQm94LFxuICAgICAgcG9wb3ZlckJvdW5kaW5nQm94ID0gX3JlZjIucG9wb3ZlckJvdW5kaW5nQm94LFxuICAgICAgd2luZG93Qm91bmRpbmdCb3ggPSBfcmVmMi53aW5kb3dCb3VuZGluZ0JveCxcbiAgICAgIGNvbnRhaW5lckJvdW5kaW5nQm94ID0gX3JlZjIuY29udGFpbmVyQm91bmRpbmdCb3gsXG4gICAgICBhcnJvd0NvbmZpZyA9IF9yZWYyLmFycm93Q29uZmlnLFxuICAgICAgX3JlZjIkb2Zmc2V0ID0gX3JlZjIub2Zmc2V0LFxuICAgICAgb2Zmc2V0ID0gX3JlZjIkb2Zmc2V0ID09PSB2b2lkIDAgPyAwIDogX3JlZjIkb2Zmc2V0LFxuICAgICAgX3JlZjIkYnVmZmVyID0gX3JlZjIuYnVmZmVyLFxuICAgICAgYnVmZmVyID0gX3JlZjIkYnVmZmVyID09PSB2b2lkIDAgPyAwIDogX3JlZjIkYnVmZmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgZ29hbCBpcyB0byBmaW5kIHRoZSBiZXN0IHdheSB0byBhbGlnbiB0aGUgcG9wb3ZlciBjb250ZW50XG4gICAqIG9uIHRoZSBnaXZlbiBzaWRlIG9mIHRoZSBhbmNob3IgZWxlbWVudC4gVGhlIHBvcG92ZXIgcHJlZmVyc1xuICAgKiBjZW50ZXJpbmcgb24gdGhlIGFuY2hvciBidXQgY2FuIHNoaWZ0IGFsb25nIHRoZSBjcm9zcy1heGlzIGFzIG5lZWRlZC5cbiAgICpcbiAgICogV2UgcmV0dXJuIHRoZSB0b3AvbGVmdCBjb29yZGluYXRlcyB0aGF0IGJlc3QgZml0IHRoZSBwb3BvdmVyIGluc2lkZVxuICAgKiB0aGUgZ2l2ZW4gYm91bmRhcmllcywgYW5kIGFsc28gcmV0dXJuIHRoZSBgZml0YCB2YWx1ZSB3aGljaCBpbmRpY2F0ZXNcbiAgICogd2hhdCBwZXJjZW50YWdlIG9mIHRoZSBwb3BvdmVyIGlzIHdpdGhpbiB0aGUgYm91bmRzLlxuICAgKlxuICAgKiBlLmcuIGZpbmRpbmcgYSBsb2NhdGlvbiB3aGVuIHBvc2l0aW9uPXRvcFxuICAgKiB0aGUgcHJlZmVycmVkIGxvY2F0aW9uIGlzIGRpcmVjdGx5IG92ZXIgdGhlIGFuY2hvclxuICAgKlxuICAgKiAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICAqICAgICAgICB8ICAgICAgIHBvcG92ZXIgICAgICAgIHxcbiAgICogICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgKiAgICAgICAgICAgICAgICAgICB2XG4gICAqICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tK1xuICAgKiAgICAgICAgICAgIHwgICAgYW5jaG9yICAgIHxcbiAgICogICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0rXG4gICAqXG4gICAqIGJ1dCBpZiBhbmNob3IgZG9lc24ndCBoYXZlIG11Y2ggKG9yIGFueSkgcm9vbSBvbiBpdHMgcmlkZSBzaWRlXG4gICAqIHRoZSBwb3BvdmVyIHdpbGwgc2hpZnQgdG8gdGhlIGxlZnRcbiAgICpcbiAgICogICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICAqICAgIHwgICAgICAgcG9wb3ZlciAgICAgICAgfFxuICAgKiAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgICogICAgICAgICAgICAgICAgICAgdlxuICAgKiAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLStcbiAgICogICAgICAgICAgICB8ICAgIGFuY2hvciAgICB8XG4gICAqICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tK1xuICAgKlxuICAgKi9cbiAgdmFyIGNyb3NzQXhpc0ZpcnN0U2lkZSA9IHBvc2l0aW9uU3Vic3RpdHV0ZXNbcG9zaXRpb25dOyAvLyBcInRvcFwiIC0+IFwibGVmdFwiXG5cbiAgdmFyIGNyb3NzQXhpc1NlY29uZFNpZGUgPSBwb3NpdGlvbkNvbXBsZW1lbnRzW2Nyb3NzQXhpc0ZpcnN0U2lkZV07IC8vIFwibGVmdFwiIC0+IFwicmlnaHRcIlxuXG4gIHZhciBjcm9zc0F4aXNEaW1lbnNpb24gPSByZWxhdGVkRGltZW5zaW9uW2Nyb3NzQXhpc0ZpcnN0U2lkZV07IC8vIFwibGVmdFwiIC0+IFwid2lkdGhcIlxuXG4gIHZhciBfZ2V0QnVmZmVyVmFsdWVzID0gZ2V0QnVmZmVyVmFsdWVzKGJ1ZmZlciksXG4gICAgICBfZ2V0QnVmZmVyVmFsdWVzMiA9IF9zbGljZWRUb0FycmF5KF9nZXRCdWZmZXJWYWx1ZXMsIDQpLFxuICAgICAgdG9wQnVmZmVyID0gX2dldEJ1ZmZlclZhbHVlczJbMF0sXG4gICAgICByaWdodEJ1ZmZlciA9IF9nZXRCdWZmZXJWYWx1ZXMyWzFdLFxuICAgICAgYm90dG9tQnVmZmVyID0gX2dldEJ1ZmZlclZhbHVlczJbMl0sXG4gICAgICBsZWZ0QnVmZmVyID0gX2dldEJ1ZmZlclZhbHVlczJbM107XG5cbiAgdmFyIF9nZXRDcm9zc0F4aXNQb3NpdGlvbiA9IGdldENyb3NzQXhpc1Bvc2l0aW9uKHtcbiAgICBjcm9zc0F4aXNGaXJzdFNpZGU6IGNyb3NzQXhpc0ZpcnN0U2lkZSxcbiAgICBjcm9zc0F4aXNTZWNvbmRTaWRlOiBjcm9zc0F4aXNTZWNvbmRTaWRlLFxuICAgIGNyb3NzQXhpc0RpbWVuc2lvbjogY3Jvc3NBeGlzRGltZW5zaW9uLFxuICAgIHBvc2l0aW9uOiBwb3NpdGlvbixcbiAgICBhbGlnbjogYWxpZ24sXG4gICAgYnVmZmVyOiBidWZmZXIsXG4gICAgb2Zmc2V0OiBvZmZzZXQsXG4gICAgd2luZG93Qm91bmRpbmdCb3g6IHdpbmRvd0JvdW5kaW5nQm94LFxuICAgIGNvbnRhaW5lckJvdW5kaW5nQm94OiBjb250YWluZXJCb3VuZGluZ0JveCxcbiAgICBwb3BvdmVyQm91bmRpbmdCb3g6IHBvcG92ZXJCb3VuZGluZ0JveCxcbiAgICBhbmNob3JCb3VuZGluZ0JveDogYW5jaG9yQm91bmRpbmdCb3gsXG4gICAgYXJyb3dDb25maWc6IGFycm93Q29uZmlnXG4gIH0pLFxuICAgICAgY3Jvc3NBeGlzUG9zaXRpb24gPSBfZ2V0Q3Jvc3NBeGlzUG9zaXRpb24uY3Jvc3NBeGlzUG9zaXRpb24sXG4gICAgICBjcm9zc0F4aXNBcnJvd1Bvc2l0aW9uID0gX2dldENyb3NzQXhpc1Bvc2l0aW9uLmNyb3NzQXhpc0Fycm93UG9zaXRpb247XG5cbiAgdmFyIHByaW1hcnlBeGlzRGltZW5zaW9uID0gcmVsYXRlZERpbWVuc2lvbltwb3NpdGlvbl07IC8vIFwidG9wXCIgLT4gXCJoZWlnaHRcIlxuXG4gIHZhciBwcmltYXJ5QXhpc1Bvc2l0aW9uTmFtZSA9IGRpbWVuc2lvblBvc2l0aW9uQXR0cmlidXRlW3ByaW1hcnlBeGlzRGltZW5zaW9uXTsgLy8gXCJoZWlnaHRcIiAtPiBcInRvcFwiXG5cbiAgdmFyIF9nZXRQcmltYXJ5QXhpc1Bvc2l0aSA9IGdldFByaW1hcnlBeGlzUG9zaXRpb24oe1xuICAgIHBvc2l0aW9uOiBwb3NpdGlvbixcbiAgICBvZmZzZXQ6IG9mZnNldCxcbiAgICBwb3BvdmVyQm91bmRpbmdCb3g6IHBvcG92ZXJCb3VuZGluZ0JveCxcbiAgICBhbmNob3JCb3VuZGluZ0JveDogYW5jaG9yQm91bmRpbmdCb3gsXG4gICAgYXJyb3dDb25maWc6IGFycm93Q29uZmlnXG4gIH0pLFxuICAgICAgcHJpbWFyeUF4aXNQb3NpdGlvbiA9IF9nZXRQcmltYXJ5QXhpc1Bvc2l0aS5wcmltYXJ5QXhpc1Bvc2l0aW9uLFxuICAgICAgcHJpbWFyeUF4aXNBcnJvd1Bvc2l0aW9uID0gX2dldFByaW1hcnlBeGlzUG9zaXRpLnByaW1hcnlBeGlzQXJyb3dQb3NpdGlvbjtcblxuICB2YXIgcG9wb3ZlclBsYWNlbWVudCA9IChfcG9wb3ZlclBsYWNlbWVudCA9IHt9LCBfZGVmaW5lUHJvcGVydHkoX3BvcG92ZXJQbGFjZW1lbnQsIGNyb3NzQXhpc0ZpcnN0U2lkZSwgY3Jvc3NBeGlzUG9zaXRpb24pLCBfZGVmaW5lUHJvcGVydHkoX3BvcG92ZXJQbGFjZW1lbnQsIHByaW1hcnlBeGlzUG9zaXRpb25OYW1lLCBwcmltYXJ5QXhpc1Bvc2l0aW9uKSwgX3BvcG92ZXJQbGFjZW1lbnQpOyAvLyBjYWxjdWxhdGUgdGhlIGZpdCBvZiB0aGUgcG9wb3ZlciBpbiB0aGlzIGxvY2F0aW9uXG4gIC8vIGZpdCBpcyBpbiByYW5nZSAwLjAgLT4gMS4wIGFuZCBpcyB0aGUgcGVyY2VudGFnZSBvZiB0aGUgcG9wb3ZlciB3aGljaCBpcyB2aXNpYmxlIGluIHRoaXMgbG9jYXRpb25cblxuICB2YXIgY29tYmluZWRCb3VuZGluZ0JveCA9IGludGVyc2VjdEJvdW5kaW5nQm94ZXMod2luZG93Qm91bmRpbmdCb3gsIGNvbnRhaW5lckJvdW5kaW5nQm94KTsgLy8gc2hyaW5rIHRoZSB2aXNpYmxlIGJvdW5kaW5nIGJveCBieSBgYnVmZmVyYFxuICAvLyB0byBjb21wdXRlIGEgZml0IHZhbHVlXG5cbiAgY29tYmluZWRCb3VuZGluZ0JveC50b3AgKz0gdG9wQnVmZmVyO1xuICBjb21iaW5lZEJvdW5kaW5nQm94LnJpZ2h0IC09IHJpZ2h0QnVmZmVyO1xuICBjb21iaW5lZEJvdW5kaW5nQm94LmJvdHRvbSAtPSBib3R0b21CdWZmZXI7XG4gIGNvbWJpbmVkQm91bmRpbmdCb3gubGVmdCArPSBsZWZ0QnVmZmVyO1xuICB2YXIgZml0ID0gZ2V0VmlzaWJsZUZpdCh7XG4gICAgdG9wOiBwb3BvdmVyUGxhY2VtZW50LnRvcCxcbiAgICByaWdodDogcG9wb3ZlclBsYWNlbWVudC5sZWZ0ICsgcG9wb3ZlckJvdW5kaW5nQm94LndpZHRoLFxuICAgIGJvdHRvbTogcG9wb3ZlclBsYWNlbWVudC50b3AgKyBwb3BvdmVyQm91bmRpbmdCb3guaGVpZ2h0LFxuICAgIGxlZnQ6IHBvcG92ZXJQbGFjZW1lbnQubGVmdCxcbiAgICB3aWR0aDogcG9wb3ZlckJvdW5kaW5nQm94LndpZHRoLFxuICAgIGhlaWdodDogcG9wb3ZlckJvdW5kaW5nQm94LmhlaWdodFxuICB9LCBjb21iaW5lZEJvdW5kaW5nQm94KTtcbiAgdmFyIGFycm93ID0gYXJyb3dDb25maWcgPyAoX3JlZjMgPSB7fSwgX2RlZmluZVByb3BlcnR5KF9yZWYzLCBjcm9zc0F4aXNGaXJzdFNpZGUsIGNyb3NzQXhpc0Fycm93UG9zaXRpb24gLSBwb3BvdmVyUGxhY2VtZW50W2Nyb3NzQXhpc0ZpcnN0U2lkZV0pLCBfZGVmaW5lUHJvcGVydHkoX3JlZjMsIHByaW1hcnlBeGlzUG9zaXRpb25OYW1lLCBwcmltYXJ5QXhpc0Fycm93UG9zaXRpb24pLCBfcmVmMykgOiB1bmRlZmluZWQ7XG4gIHJldHVybiB7XG4gICAgZml0OiBmaXQsXG4gICAgdG9wOiBwb3BvdmVyUGxhY2VtZW50LnRvcCxcbiAgICBsZWZ0OiBwb3BvdmVyUGxhY2VtZW50LmxlZnQsXG4gICAgYXJyb3c6IGFycm93ID8ge1xuICAgICAgbGVmdDogYXJyb3cubGVmdCxcbiAgICAgIHRvcDogYXJyb3cudG9wXG4gICAgfSA6IHVuZGVmaW5lZFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRDcm9zc0F4aXNQb3NpdGlvbihfcmVmNCkge1xuICB2YXIgY3Jvc3NBeGlzRmlyc3RTaWRlID0gX3JlZjQuY3Jvc3NBeGlzRmlyc3RTaWRlLFxuICAgICAgY3Jvc3NBeGlzU2Vjb25kU2lkZSA9IF9yZWY0LmNyb3NzQXhpc1NlY29uZFNpZGUsXG4gICAgICBjcm9zc0F4aXNEaW1lbnNpb24gPSBfcmVmNC5jcm9zc0F4aXNEaW1lbnNpb24sXG4gICAgICBwb3NpdGlvbiA9IF9yZWY0LnBvc2l0aW9uLFxuICAgICAgYWxpZ24gPSBfcmVmNC5hbGlnbixcbiAgICAgIGJ1ZmZlciA9IF9yZWY0LmJ1ZmZlcixcbiAgICAgIG9mZnNldCA9IF9yZWY0Lm9mZnNldCxcbiAgICAgIHdpbmRvd0JvdW5kaW5nQm94ID0gX3JlZjQud2luZG93Qm91bmRpbmdCb3gsXG4gICAgICBjb250YWluZXJCb3VuZGluZ0JveCA9IF9yZWY0LmNvbnRhaW5lckJvdW5kaW5nQm94LFxuICAgICAgcG9wb3ZlckJvdW5kaW5nQm94ID0gX3JlZjQucG9wb3ZlckJvdW5kaW5nQm94LFxuICAgICAgYW5jaG9yQm91bmRpbmdCb3ggPSBfcmVmNC5hbmNob3JCb3VuZGluZ0JveCxcbiAgICAgIGFycm93Q29uZmlnID0gX3JlZjQuYXJyb3dDb25maWc7XG4gIC8vIGhvdyBtdWNoIG9mIHRoZSBwb3BvdmVyIG92ZXJmbG93cyBwYXN0IGVpdGhlciBzaWRlIG9mIHRoZSBhbmNob3IgaWYgaXRzIGNlbnRlcmVkXG4gIHZhciBwb3BvdmVyU2l6ZU9uQ3Jvc3NBeGlzID0gcG9wb3ZlckJvdW5kaW5nQm94W2Nyb3NzQXhpc0RpbWVuc2lvbl07XG4gIHZhciBhbmNob3JTaXplT25Dcm9zc0F4aXMgPSBhbmNob3JCb3VuZGluZ0JveFtjcm9zc0F4aXNEaW1lbnNpb25dO1xuICB2YXIgYW5jaG9ySGFsZlNpemUgPSBhbmNob3JTaXplT25Dcm9zc0F4aXMgLyAyOyAvLyB0aGUgcG9wb3ZlcidzIG9yaWdpbmFsIHBvc2l0aW9uIG9uIHRoZSBjcm9zcy1heGlzIGlzIGRldGVybWluZWQgYnk6XG5cbiAgdmFyIGNyb3NzQXhpc1Bvc2l0aW9uT3JpZ2luYWwgPSBhbmNob3JCb3VuZGluZ0JveFtjcm9zc0F4aXNGaXJzdFNpZGVdICsgLy8gd2hlcmUgdGhlIGFuY2hvciBpcyBsb2NhdGVkXG4gIGFuY2hvckhhbGZTaXplIC0gLy8gcGx1cyBoYWxmIGFuY2hvciBkaW1lbnNpb25cbiAgcG9wb3ZlclNpemVPbkNyb3NzQXhpcyAvIDI7IC8vIGxlc3MgaGFsZiB0aGUgcG9wb3ZlciBkaW1lbnNpb25cbiAgLy8gVG8gZml0IHRoZSBjb250ZW50IHdpdGhpbiBib3RoIHRoZSB3aW5kb3cgYW5kIGNvbnRhaW5lcixcbiAgLy8gY29tcHV0ZSB0aGUgc21hbGxlciBvZiB0aGUgdHdvIHNwYWNlcyBhbG9uZyBlYWNoIGVkZ2VcblxuICB2YXIgY29tYmluZWRCb3VuZGluZ0JveCA9IGludGVyc2VjdEJvdW5kaW5nQm94ZXMod2luZG93Qm91bmRpbmdCb3gsIGNvbnRhaW5lckJvdW5kaW5nQm94KTtcbiAgdmFyIGF2YWlsYWJsZVNwYWNlID0gZ2V0QXZhaWxhYmxlU3BhY2UoYW5jaG9yQm91bmRpbmdCb3gsIGNvbWJpbmVkQm91bmRpbmdCb3gsIGJ1ZmZlciwgb2Zmc2V0LCBwb3NpdGlvbik7XG4gIHZhciBtaW5pbXVtU3BhY2UgPSBhcnJvd0NvbmZpZyA/IGFycm93Q29uZmlnLmFycm93QnVmZmVyIDogMDtcbiAgdmFyIGNvbnRlbnRPdmVyZmxvd1NpemUgPSAocG9wb3ZlclNpemVPbkNyb3NzQXhpcyAtIGFuY2hvclNpemVPbkNyb3NzQXhpcykgLyAyO1xuICB2YXIgYWxpZ25BbW91bnQgPSAwO1xuICB2YXIgYWxpZ25EaXJlY3Rpb24gPSAxO1xuICB2YXIgYW1vdW50T2ZTaGlmdE5lZWRlZCA9IDA7XG4gIHZhciBzaGlmdERpcmVjdGlvbiA9IDE7XG5cbiAgaWYgKGFsaWduICE9IG51bGwpIHtcbiAgICAvLyBubyBhbGlnbm1lbnQsIGZpbmQgaG93IG11Y2ggdGhlIGNvbnRhaW5lciBib3VuZGFyeSByZXF1aXJlcyB0aGUgY29udGVudCB0byBzaGlmdFxuICAgIGFsaWduRGlyZWN0aW9uID0gYWxpZ24gPT09ICd0b3AnIHx8IGFsaWduID09PSAnbGVmdCcgPyAxIDogLTE7XG4gICAgYWxpZ25BbW91bnQgPSBjb250ZW50T3ZlcmZsb3dTaXplO1xuICAgIHZhciBhbGlnbmVkT3ZlcmZsb3dBbW91bnQgPSBjb250ZW50T3ZlcmZsb3dTaXplICsgYWxpZ25BbW91bnQ7XG4gICAgdmFyIG5lZWRzU2hpZnQgPSBhbGlnbmVkT3ZlcmZsb3dBbW91bnQgPiBhdmFpbGFibGVTcGFjZVtwb3NpdGlvbkNvbXBsZW1lbnRzW2FsaWduXV07XG4gICAgYW1vdW50T2ZTaGlmdE5lZWRlZCA9IG5lZWRzU2hpZnQgPyBhbGlnbmVkT3ZlcmZsb3dBbW91bnQgLSBhdmFpbGFibGVTcGFjZVtwb3NpdGlvbkNvbXBsZW1lbnRzW2FsaWduXV0gOiAwO1xuICAgIHNoaWZ0RGlyZWN0aW9uID0gLTEgKiBhbGlnbkRpcmVjdGlvbjtcbiAgfSBlbHNlIHtcbiAgICAvLyBzaGlmdGluZyB0aGUgcG9wb3ZlciB0byBvbmUgc2lkZSBtYXkgeWllbGQgYSBiZXR0ZXIgZml0XG4gICAgdmFyIHNwYWNlQXZhaWxhYmxlT25GaXJzdFNpZGUgPSBhdmFpbGFibGVTcGFjZVtjcm9zc0F4aXNGaXJzdFNpZGVdO1xuICAgIHZhciBzcGFjZUF2YWlsYWJsZU9uU2Vjb25kU2lkZSA9IGF2YWlsYWJsZVNwYWNlW2Nyb3NzQXhpc1NlY29uZFNpZGVdO1xuICAgIHZhciBpc1NoaWZ0VG93YXJkRmlyc3RTaWRlID0gc3BhY2VBdmFpbGFibGVPbkZpcnN0U2lkZSA+IHNwYWNlQXZhaWxhYmxlT25TZWNvbmRTaWRlO1xuICAgIHNoaWZ0RGlyZWN0aW9uID0gaXNTaGlmdFRvd2FyZEZpcnN0U2lkZSA/IC0xIDogMTsgLy8gZGV0ZXJtaW5lIHdoaWNoIGRpcmVjdGlvbiBoYXMgbW9yZSByb29tIGFuZCB0aGUgcG9wb3ZlciBzaG91bGQgc2hpZnQgdG9cblxuICAgIHZhciBsZWFzdEF2YWlsYWJsZVNwYWNlID0gTWF0aC5taW4oc3BhY2VBdmFpbGFibGVPbkZpcnN0U2lkZSwgc3BhY2VBdmFpbGFibGVPblNlY29uZFNpZGUpO1xuXG4gICAgdmFyIF9uZWVkc1NoaWZ0ID0gY29udGVudE92ZXJmbG93U2l6ZSA+IGxlYXN0QXZhaWxhYmxlU3BhY2U7XG5cbiAgICBhbW91bnRPZlNoaWZ0TmVlZGVkID0gX25lZWRzU2hpZnQgPyBjb250ZW50T3ZlcmZsb3dTaXplIC0gbGVhc3RBdmFpbGFibGVTcGFjZSA6IDA7XG4gIH0gLy8gc2hpZnQgb3ZlciB0aGUgcG9wb3ZlciBpZiBuZWNlc3NhcnlcblxuXG4gIHZhciBzaGlmdEFtb3VudCA9IGFtb3VudE9mU2hpZnROZWVkZWQgKiBzaGlmdERpcmVjdGlvbjtcbiAgdmFyIGNyb3NzQXhpc1Bvc2l0aW9uID0gY3Jvc3NBeGlzUG9zaXRpb25PcmlnaW5hbCArIHNoaWZ0QW1vdW50ICsgYWxpZ25BbW91bnQgKiBhbGlnbkRpcmVjdGlvbjsgLy8gaWYgYW4gYGFycm93Q29uZmlnYCBpcyBzcGVjaWZpZWQsIGZpbmQgd2hlcmUgdG8gcG9zaXRpb24gdGhlIGFycm93XG5cbiAgdmFyIGNyb3NzQXhpc0Fycm93UG9zaXRpb247XG5cbiAgaWYgKGFycm93Q29uZmlnKSB7XG4gICAgdmFyIGFycm93V2lkdGggPSBhcnJvd0NvbmZpZy5hcnJvd1dpZHRoO1xuICAgIGNyb3NzQXhpc0Fycm93UG9zaXRpb24gPSBhbmNob3JCb3VuZGluZ0JveFtjcm9zc0F4aXNGaXJzdFNpZGVdICsgYW5jaG9ySGFsZlNpemUgLSBhcnJvd1dpZHRoIC8gMjsgLy8gbWFrZSBzdXJlIHRoZXJlJ3MgZW5vdWdoIGJ1ZmZlciBhcm91bmQgdGhlIGFycm93XG4gICAgLy8gYnkgY2FsY3VsYXRpbmcgaG93IGhvdyBtdWNoIHRoZSBhcnJvdyB3b3VsZCBuZWVkIHRvIG1vdmVcbiAgICAvLyBidXQgaW5zdGVhZCBvZiBtb3ZpbmcgdGhlIGFycm93LCBzaGlmdCB0aGUgcG9wb3ZlciBjb250ZW50XG5cbiAgICBpZiAoY3Jvc3NBeGlzQXJyb3dQb3NpdGlvbiA8IGNyb3NzQXhpc1Bvc2l0aW9uICsgbWluaW11bVNwYWNlKSB7XG4gICAgICAvLyBhcnJvdyBpcyB0b28gY2xvc2UgdG8gdGhlIG1pbmltdW0gc2lkZVxuICAgICAgdmFyIGRpZmZlcmVuY2UgPSBjcm9zc0F4aXNQb3NpdGlvbiArIG1pbmltdW1TcGFjZSAtIGNyb3NzQXhpc0Fycm93UG9zaXRpb247XG4gICAgICBjcm9zc0F4aXNQb3NpdGlvbiAtPSBkaWZmZXJlbmNlO1xuICAgIH0gZWxzZSBpZiAoY3Jvc3NBeGlzQXJyb3dQb3NpdGlvbiArIG1pbmltdW1TcGFjZSArIGFycm93V2lkdGggPiBjcm9zc0F4aXNQb3NpdGlvbiArIHBvcG92ZXJTaXplT25Dcm9zc0F4aXMpIHtcbiAgICAgIC8vIGFycm93IGlzIHRvbyBjbG9zZSB0byB0aGUgbWF4aW11bSBzaWRlXG4gICAgICB2YXIgZWRnZSA9IGNyb3NzQXhpc1Bvc2l0aW9uICsgcG9wb3ZlclNpemVPbkNyb3NzQXhpcztcblxuICAgICAgdmFyIF9kaWZmZXJlbmNlID0gY3Jvc3NBeGlzQXJyb3dQb3NpdGlvbiAtIChlZGdlIC0gbWluaW11bVNwYWNlIC0gYXJyb3dXaWR0aCk7XG5cbiAgICAgIGNyb3NzQXhpc1Bvc2l0aW9uICs9IF9kaWZmZXJlbmNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgY3Jvc3NBeGlzUG9zaXRpb246IGNyb3NzQXhpc1Bvc2l0aW9uLFxuICAgIGNyb3NzQXhpc0Fycm93UG9zaXRpb246IGNyb3NzQXhpc0Fycm93UG9zaXRpb25cbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0UHJpbWFyeUF4aXNQb3NpdGlvbihfcmVmNSkge1xuICB2YXIgcG9zaXRpb24gPSBfcmVmNS5wb3NpdGlvbixcbiAgICAgIG9mZnNldCA9IF9yZWY1Lm9mZnNldCxcbiAgICAgIHBvcG92ZXJCb3VuZGluZ0JveCA9IF9yZWY1LnBvcG92ZXJCb3VuZGluZ0JveCxcbiAgICAgIGFuY2hvckJvdW5kaW5nQm94ID0gX3JlZjUuYW5jaG9yQm91bmRpbmdCb3gsXG4gICAgICBhcnJvd0NvbmZpZyA9IF9yZWY1LmFycm93Q29uZmlnO1xuICAvLyBpZiBwb3NpdGlvbmluZyB0byB0aGUgdG9wIG9yIGxlZnQsIHRoZSB0YXJnZXQgcG9zaXRpb24gZGVjcmVhc2VzXG4gIC8vIGZyb20gdGhlIGFuY2hvcidzIHRvcCBvciBsZWZ0LCBvdGhlcndpc2UgdGhlIHBvc2l0aW9uIGFkZHMgdG8gdGhlIGFuY2hvcidzXG4gIHZhciBpc09mZnNldERlY3JlYXNpbmcgPSBwb3NpdGlvbiA9PT0gJ3RvcCcgfHwgcG9zaXRpb24gPT09ICdsZWZ0JztcbiAgdmFyIHByaW1hcnlBeGlzRGltZW5zaW9uID0gcmVsYXRlZERpbWVuc2lvbltwb3NpdGlvbl07IC8vIFwidG9wXCIgLT4gXCJoZWlnaHRcIlxuXG4gIHZhciBwb3BvdmVyU2l6ZU9uUHJpbWFyeUF4aXMgPSBwb3BvdmVyQm91bmRpbmdCb3hbcHJpbWFyeUF4aXNEaW1lbnNpb25dOyAvLyBzdGFydCBhdCB0aGUgdG9wIG9yIGxlZnQgZWRnZSBvZiB0aGUgYW5jaG9yIGVsZW1lbnRcblxuICB2YXIgcHJpbWFyeUF4aXNQb3NpdGlvbk5hbWUgPSBkaW1lbnNpb25Qb3NpdGlvbkF0dHJpYnV0ZVtwcmltYXJ5QXhpc0RpbWVuc2lvbl07IC8vIFwiaGVpZ2h0XCIgLT4gXCJ0b3BcIlxuXG4gIHZhciBhbmNob3JFZGdlT3JpZ2luID0gYW5jaG9yQm91bmRpbmdCb3hbcHJpbWFyeUF4aXNQb3NpdGlvbk5hbWVdOyAvLyBmaW5kIHRoZSBwb3BvdmVyIHBvc2l0aW9uIG9uIHRoZSBwcmltYXJ5IGF4aXNcblxuICB2YXIgYW5jaG9yU2l6ZU9uUHJpbWFyeUF4aXMgPSBhbmNob3JCb3VuZGluZ0JveFtwcmltYXJ5QXhpc0RpbWVuc2lvbl07XG4gIHZhciBwcmltYXJ5QXhpc09mZnNldCA9IGlzT2Zmc2V0RGVjcmVhc2luZyA/IHBvcG92ZXJTaXplT25QcmltYXJ5QXhpcyA6IGFuY2hvclNpemVPblByaW1hcnlBeGlzO1xuICB2YXIgY29udGVudE9mZnNldCA9IChvZmZzZXQgKyBwcmltYXJ5QXhpc09mZnNldCkgKiAoaXNPZmZzZXREZWNyZWFzaW5nID8gLTEgOiAxKTtcbiAgdmFyIHByaW1hcnlBeGlzUG9zaXRpb24gPSBhbmNob3JFZGdlT3JpZ2luICsgY29udGVudE9mZnNldDtcbiAgdmFyIHByaW1hcnlBeGlzQXJyb3dQb3NpdGlvbjtcblxuICBpZiAoYXJyb3dDb25maWcpIHtcbiAgICBwcmltYXJ5QXhpc0Fycm93UG9zaXRpb24gPSBpc09mZnNldERlY3JlYXNpbmcgPyBwb3BvdmVyU2l6ZU9uUHJpbWFyeUF4aXMgOiAwO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBwcmltYXJ5QXhpc1Bvc2l0aW9uOiBwcmltYXJ5QXhpc1Bvc2l0aW9uLFxuICAgIHByaW1hcnlBeGlzQXJyb3dQb3NpdGlvbjogcHJpbWFyeUF4aXNBcnJvd1Bvc2l0aW9uXG4gIH07XG59XG4vKipcbiAqIEZpbmRzIHRoZSBjbGllbnQgcGl4ZWwgY29vcmRpbmF0ZSBvZiBlYWNoIGVkZ2UgZm9yIHRoZSBlbGVtZW50J3MgYm91bmRpbmcgYm94LFxuICogYW5kIHRoZSBib3VuZGluZyBib3gncyB3aWR0aCAmIGhlaWdodFxuICpcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEByZXR1cm5zIHt7dG9wOiBudW1iZXIsIHJpZ2h0OiBudW1iZXIsIGJvdHRvbTogbnVtYmVyLCBsZWZ0OiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCB3aWR0aDogbnVtYmVyfX1cbiAqL1xuXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbGVtZW50Qm91bmRpbmdCb3goZWxlbWVudCkge1xuICB2YXIgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIHJldHVybiB7XG4gICAgdG9wOiByZWN0LnRvcCxcbiAgICByaWdodDogcmVjdC5yaWdodCxcbiAgICBib3R0b206IHJlY3QuYm90dG9tLFxuICAgIGxlZnQ6IHJlY3QubGVmdCxcbiAgICBoZWlnaHQ6IHJlY3QuaGVpZ2h0LFxuICAgIHdpZHRoOiByZWN0LndpZHRoXG4gIH07XG59XG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGF2YWlsYWJsZSBjb250ZW50IHNwYWNlIGJldHdlZW4gYW5jaG9yIGFuZCBjb250YWluZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gYW5jaG9yQm91bmRpbmdCb3ggQ2xpZW50IGJvdW5kaW5nIGJveCBvZiB0aGUgYW5jaG9yIGVsZW1lbnRcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250YWluZXJCb3VuZGluZ0JveCBDbGllbnQgYm91bmRpbmcgYm94IG9mIHRoZSBjb250YWluZXIgZWxlbWVudFxuICogQHBhcmFtIHtudW1iZXJ9IGJ1ZmZlciBNaW5pbXVtIGRpc3RhbmNlIGJldHdlZW4gdGhlIHBvcG92ZXIgYW5kIHRoZSBib3VuZGluZyBjb250YWluZXJcbiAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXQgRGlzdGFuY2UgYmV0d2VlbiB0aGUgcG9wb3ZlciBhbmQgdGhlIGFuY2hvclxuICogQHBhcmFtIHtzdHJpbmd9IG9mZnNldFNpZGUgU2lkZSB0aGUgb2Zmc2V0IG5lZWRzIHRvIGJlIGFwcGxpZWQgdG8sIG9uZVxuICogIG9mIFtcInRvcFwiLCBcInJpZ2h0XCIsIFwiYm90dG9tXCIsIFwibGVmdFwiXVxuICogQHJldHVybnMge3t0b3A6IG51bWJlciwgcmlnaHQ6IG51bWJlciwgYm90dG9tOiBudW1iZXIsIGxlZnQ6IG51bWJlcn19XG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEF2YWlsYWJsZVNwYWNlKGFuY2hvckJvdW5kaW5nQm94LCBjb250YWluZXJCb3VuZGluZ0JveCwgYnVmZmVyLCBvZmZzZXQsIG9mZnNldFNpZGUpIHtcbiAgdmFyIF9nZXRCdWZmZXJWYWx1ZXMzID0gZ2V0QnVmZmVyVmFsdWVzKGJ1ZmZlciksXG4gICAgICBfZ2V0QnVmZmVyVmFsdWVzNCA9IF9zbGljZWRUb0FycmF5KF9nZXRCdWZmZXJWYWx1ZXMzLCA0KSxcbiAgICAgIHRvcEJ1ZmZlciA9IF9nZXRCdWZmZXJWYWx1ZXM0WzBdLFxuICAgICAgcmlnaHRCdWZmZXIgPSBfZ2V0QnVmZmVyVmFsdWVzNFsxXSxcbiAgICAgIGJvdHRvbUJ1ZmZlciA9IF9nZXRCdWZmZXJWYWx1ZXM0WzJdLFxuICAgICAgbGVmdEJ1ZmZlciA9IF9nZXRCdWZmZXJWYWx1ZXM0WzNdO1xuXG4gIHJldHVybiB7XG4gICAgdG9wOiBhbmNob3JCb3VuZGluZ0JveC50b3AgLSBjb250YWluZXJCb3VuZGluZ0JveC50b3AgLSB0b3BCdWZmZXIgLSAob2Zmc2V0U2lkZSA9PT0gJ3RvcCcgPyBvZmZzZXQgOiAwKSxcbiAgICByaWdodDogY29udGFpbmVyQm91bmRpbmdCb3gucmlnaHQgLSBhbmNob3JCb3VuZGluZ0JveC5yaWdodCAtIHJpZ2h0QnVmZmVyIC0gKG9mZnNldFNpZGUgPT09ICdyaWdodCcgPyBvZmZzZXQgOiAwKSxcbiAgICBib3R0b206IGNvbnRhaW5lckJvdW5kaW5nQm94LmJvdHRvbSAtIGFuY2hvckJvdW5kaW5nQm94LmJvdHRvbSAtIGJvdHRvbUJ1ZmZlciAtIChvZmZzZXRTaWRlID09PSAnYm90dG9tJyA/IG9mZnNldCA6IDApLFxuICAgIGxlZnQ6IGFuY2hvckJvdW5kaW5nQm94LmxlZnQgLSBjb250YWluZXJCb3VuZGluZ0JveC5sZWZ0IC0gbGVmdEJ1ZmZlciAtIChvZmZzZXRTaWRlID09PSAnbGVmdCcgPyBvZmZzZXQgOiAwKVxuICB9O1xufVxuLyoqXG4gKiBDb21wdXRlcyB0aGUgZml0IChvdmVybGFwKSBvZiB0aGUgY29udGVudCB3aXRoaW4gdGhlIGNvbnRhaW5lciwgZml0IGlzIGluIHJhbmdlIDAuMCA9PiAxLjBcbiAqIEBwYXJhbSBjb250ZW50Qm91bmRpbmdCb3ggYm91bmRpbmcgYm94IG9mIGNvbnRlbnQgdG8gY2FsY3VsYXRlIGZpdCBmb3JcbiAqIEBwYXJhbSBjb250YWluZXJCb3VuZGluZ0JveCBib3VuZGluZyBib3ggb2YgY29udGFpbmVyXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaXNpYmxlRml0KGNvbnRlbnRCb3VuZGluZ0JveCwgY29udGFpbmVyQm91bmRpbmdCb3gpIHtcbiAgdmFyIGludGVyc2VjdGlvbiA9IGludGVyc2VjdEJvdW5kaW5nQm94ZXMoY29udGVudEJvdW5kaW5nQm94LCBjb250YWluZXJCb3VuZGluZ0JveCk7XG5cbiAgaWYgKGludGVyc2VjdGlvbi5sZWZ0ID4gaW50ZXJzZWN0aW9uLnJpZ2h0IHx8IGludGVyc2VjdGlvbi50b3AgPiBpbnRlcnNlY3Rpb24udG9wKSB7XG4gICAgLy8gdGhlcmUgaXMgbm8gaW50ZXJzZWN0aW9uLCB0aGUgYm94ZXMgYXJlIGNvbXBsZXRlbHkgc2VwYXJhdGVkIG9uIGF0IGxlYXN0IG9uZSBheGlzXG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICB2YXIgaW50ZXJzZWN0aW9uQXJlYSA9IChpbnRlcnNlY3Rpb24ucmlnaHQgLSBpbnRlcnNlY3Rpb24ubGVmdCkgKiAoaW50ZXJzZWN0aW9uLmJvdHRvbSAtIGludGVyc2VjdGlvbi50b3ApO1xuICB2YXIgY29udGVudEFyZWEgPSAoY29udGVudEJvdW5kaW5nQm94LnJpZ2h0IC0gY29udGVudEJvdW5kaW5nQm94LmxlZnQpICogKGNvbnRlbnRCb3VuZGluZ0JveC5ib3R0b20gLSBjb250ZW50Qm91bmRpbmdCb3gudG9wKTtcbiAgcmV0dXJuIGludGVyc2VjdGlvbkFyZWEgLyBjb250ZW50QXJlYTtcbn1cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgaW50ZXJzZWN0aW9uIHNwYWNlIGJldHdlZW4gdHdvIGJvdW5kaW5nIGJveGVzXG4gKlxuICogQHBhcmFtIGZpcnN0Qm94XG4gKiBAcGFyYW0gc2Vjb25kQm94XG4gKiBAcmV0dXJucyB7RXVpQ2xpZW50UmVjdH1cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaW50ZXJzZWN0Qm91bmRpbmdCb3hlcyhmaXJzdEJveCwgc2Vjb25kQm94KSB7XG4gIHZhciB0b3AgPSBNYXRoLm1heChmaXJzdEJveC50b3AsIHNlY29uZEJveC50b3ApO1xuICB2YXIgcmlnaHQgPSBNYXRoLm1pbihmaXJzdEJveC5yaWdodCwgc2Vjb25kQm94LnJpZ2h0KTtcbiAgdmFyIGJvdHRvbSA9IE1hdGgubWluKGZpcnN0Qm94LmJvdHRvbSwgc2Vjb25kQm94LmJvdHRvbSk7XG4gIHZhciBsZWZ0ID0gTWF0aC5tYXgoZmlyc3RCb3gubGVmdCwgc2Vjb25kQm94LmxlZnQpO1xuICB2YXIgaGVpZ2h0ID0gTWF0aC5tYXgoYm90dG9tIC0gdG9wLCAwKTtcbiAgdmFyIHdpZHRoID0gTWF0aC5tYXgocmlnaHQgLSBsZWZ0LCAwKTtcbiAgcmV0dXJuIHtcbiAgICB0b3A6IHRvcCxcbiAgICByaWdodDogcmlnaHQsXG4gICAgYm90dG9tOiBib3R0b20sXG4gICAgbGVmdDogbGVmdCxcbiAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICB3aWR0aDogd2lkdGhcbiAgfTtcbn1cbi8qKlxuICogUmV0dXJucyB0aGUgdG9wLW1vc3QgZGVmaW5lZCB6LWluZGV4IGluIHRoZSBlbGVtZW50J3MgYW5jZXN0b3IgaGllcmFyY2h5XG4gKiByZWxhdGl2ZSB0byB0aGUgYHRhcmdldGAgZWxlbWVudDsgaWYgbm8gei1pbmRleCBpcyBkZWZpbmVkLCByZXR1cm5zIDBcbiAqIEBwYXJhbSBlbGVtZW50IHtIVE1MRWxlbWVudH1cbiAqIEBwYXJhbSBjb3VzaW4ge0hUTUxFbGVtZW50fVxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RWxlbWVudFpJbmRleChlbGVtZW50LCBjb3VzaW4pIHtcbiAgLyoqXG4gICAqIGZpbmRpbmcgdGhlIHotaW5kZXggb2YgYGVsZW1lbnRgIGlzIG5vdCB0aGUgZnVsbCBzdG9yeVxuICAgKiBpdHMgdGhlIENTUyBzdGFja2luZyBjb250ZXh0IHRoYXQgaXMgaW1wb3J0YW50XG4gICAqIHRha2UgdGhpcyBET00gZm9yIGV4YW1wbGU6XG4gICAqIGJvZHlcbiAgICogICBzZWN0aW9uW3otaW5kZXg6IDEwMDBdXG4gICAqICAgICBwW3otaW5kZXg6IDUwMF1cbiAgICogICAgICAgYnV0dG9uXG4gICAqICAgZGl2XG4gICAqXG4gICAqIHdoYXQgei1pbmRleCBkb2VzIHRoZSBgZGl2YCBuZWVkIHRvIGRpc3BsYXkgbmV4dCB0byBgYnV0dG9uYD9cbiAgICogdGhlIGBkaXZgIGFuZCBgc2VjdGlvbmAgYXJlIHdoZXJlIHRoZSBzdGFja2luZyBjb250ZXh0IHNwbGl0c1xuICAgKiBzbyBgZGl2YCBuZWVkcyB0byBjb3B5IGBzZWN0aW9uYCdzIHotaW5kZXggaW4gb3JkZXIgdG9cbiAgICogYXBwZWFyIG5leHQgdG8gLyBvdmVyIGBidXR0b25gXG4gICAqXG4gICAqIGNhbGN1bGF0ZSB0aGlzIGJ5IHN0YXJ0aW5nIGF0IGBidXR0b25gIGFuZCBmaW5kaW5nIGl0cyBvZmZzZXRQYXJlbnRzXG4gICAqIHRoZW4gd2FsayB0aGUgcGFyZW50cyBmcm9tIHRvcCAtPiBkb3duIHVudGlsIHRoZSBzdGFja2luZyBjb250ZXh0XG4gICAqIHNwbGl0IGlzIGZvdW5kLCBvciBpZiB0aGVyZSBpcyBubyBzcGxpdCB0aGVuIGEgc3BlY2lmaWMgei1pbmRleCBpcyB1bmltcG9ydGFudFxuICAgKi9cbiAgLy8gYnVpbGQgdGhlIGFycmF5IG9mIHRoZSBlbGVtZW50ICsgaXRzIG9mZnNldCBwYXJlbnRzXG4gIHZhciBub2Rlc1RvSW5zcGVjdCA9IFtdO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgbm9kZXNUb0luc3BlY3QucHVzaChlbGVtZW50KTsgLy8gQUZBSUNUIHRoaXMgaXMgYSB2YWxpZCBjYXN0IC0gdGhlIGxpYmRlZnMgYXBwZWFyIHdyb25nXG5cbiAgICBlbGVtZW50ID0gZWxlbWVudC5vZmZzZXRQYXJlbnQ7IC8vIHN0b3AgaWYgdGhlcmUgaXMgbm8gcGFyZW50XG5cbiAgICBpZiAoZWxlbWVudCA9PSBudWxsKSB7XG4gICAgICBicmVhaztcbiAgICB9IC8vIHN0b3AgaWYgdGhlIHBhcmVudCBjb250YWlucyB0aGUgcmVsYXRlZCBlbGVtZW50XG4gICAgLy8gYXMgdGhpcyBpcyB0aGUgei1pbmRleCBhbmNlc3RvclxuXG5cbiAgICBpZiAoZWxlbWVudC5jb250YWlucyhjb3VzaW4pKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH0gLy8gcmV2ZXJzZSB0aGUgbm9kZXMgdG8gd2FsayBmcm9tIHRvcCAtPiBlbGVtZW50XG5cblxuICBub2Rlc1RvSW5zcGVjdC5yZXZlcnNlKCk7XG5cbiAgZm9yICh2YXIgX2kyID0gMCwgX25vZGVzVG9JbnNwZWN0ID0gbm9kZXNUb0luc3BlY3Q7IF9pMiA8IF9ub2Rlc1RvSW5zcGVjdC5sZW5ndGg7IF9pMisrKSB7XG4gICAgdmFyIG5vZGUgPSBfbm9kZXNUb0luc3BlY3RbX2kyXTtcbiAgICAvLyBnZXQgdGhpcyBub2RlJ3Mgei1pbmRleCBjc3MgdmFsdWVcbiAgICB2YXIgekluZGV4ID0gd2luZG93LmRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUobm9kZSkuZ2V0UHJvcGVydHlWYWx1ZSgnei1pbmRleCcpOyAvLyBpZiB0aGUgei1pbmRleCBpcyBub3QgYSBudW1iZXIgKGUuZy4gXCJhdXRvXCIpIHJldHVybiBudWxsLCBlbHNlIHRoZSB2YWx1ZVxuXG4gICAgdmFyIHBhcnNlZFpJbmRleCA9IHBhcnNlSW50KHpJbmRleCwgMTApO1xuXG4gICAgaWYgKCFpc05hTihwYXJzZWRaSW5kZXgpKSB7XG4gICAgICByZXR1cm4gcGFyc2VkWkluZGV4O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAwO1xufSIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xudmFyIEdST1VQX05VTUVSSUMgPSAvXihbXFxkLl0rKShzfG1zKS87XG5cbmZ1bmN0aW9uIGdldE1pbGxpc2Vjb25kcyh2YWx1ZSwgdW5pdCkge1xuICAvLyBHaXZlbiB0aGUgcmVnZXggbWF0Y2ggYW5kIGNhcHR1cmUgZ3JvdXBzLCB3ZSBjYW4gYXNzdW1lIGB1bml0YCB0byBiZSBlaXRoZXIgJ3MnIG9yICdtcydcbiAgdmFyIG11bHRpcGxpZXIgPSB1bml0ID09PSAncycgPyAxMDAwIDogMTtcbiAgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUpICogbXVsdGlwbGllcjtcbn0gLy8gRmluZCBDU1MgYHRyYW5zaXRpb24tZHVyYXRpb25gIGFuZCBgdHJhbnNpdGlvbi1kZWxheWAgaW50ZXJ2YWxzXG4vLyBhbmQgcmV0dXJuIHRoZSB2YWx1ZSBvZiBlYWNoIGNvbXB1dGVkIHByb3BlcnR5IGluICdtcydcblxuXG5leHBvcnQgdmFyIGdldFRyYW5zaXRpb25UaW1pbmdzID0gZnVuY3Rpb24gZ2V0VHJhbnNpdGlvblRpbWluZ3MoZWxlbWVudCkge1xuICB2YXIgY29tcHV0ZWRTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuICB2YXIgY29tcHV0ZWREdXJhdGlvbiA9IGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgndHJhbnNpdGlvbi1kdXJhdGlvbicpO1xuICB2YXIgZHVyYXRpb25NYXRjaEFycmF5ID0gY29tcHV0ZWREdXJhdGlvbi5tYXRjaChHUk9VUF9OVU1FUklDKTtcbiAgdmFyIGR1cmF0aW9uTWF0Y2ggPSBkdXJhdGlvbk1hdGNoQXJyYXkgPyBnZXRNaWxsaXNlY29uZHMoZHVyYXRpb25NYXRjaEFycmF5WzFdLCBkdXJhdGlvbk1hdGNoQXJyYXlbMl0pIDogMDtcbiAgdmFyIGNvbXB1dGVkRGVsYXkgPSBjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ3RyYW5zaXRpb24tZGVsYXknKTtcbiAgdmFyIGRlbGF5TWF0Y2hBcnJheSA9IGNvbXB1dGVkRGVsYXkubWF0Y2goR1JPVVBfTlVNRVJJQyk7XG4gIHZhciBkZWxheU1hdGNoID0gZGVsYXlNYXRjaEFycmF5ID8gZ2V0TWlsbGlzZWNvbmRzKGRlbGF5TWF0Y2hBcnJheVsxXSwgZGVsYXlNYXRjaEFycmF5WzJdKSA6IDA7XG4gIHJldHVybiB7XG4gICAgZHVyYXRpb25NYXRjaDogZHVyYXRpb25NYXRjaCxcbiAgICBkZWxheU1hdGNoOiBkZWxheU1hdGNoXG4gIH07XG59O1xuXG5mdW5jdGlvbiBpc0VsZW1lbnROb2RlKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnQubm9kZVR5cGUgPT09IGRvY3VtZW50LkVMRU1FTlRfTk9ERTtcbn0gLy8gVXNlcyBgZ2V0VHJhbnNpdGlvblRpbWluZ3NgIHRvIGZpbmQgdGhlIHRvdGFsIHRyYW5zaXRpb24gdGltZSBmb3Jcbi8vIGFsbCBlbGVtZW50cyB0YXJnZXRlZCBieSBhIE11dGF0aW9uT2JzZXJ2ZXIgY2FsbGJhY2tcblxuXG5leHBvcnQgdmFyIGdldFdhaXREdXJhdGlvbiA9IGZ1bmN0aW9uIGdldFdhaXREdXJhdGlvbihyZWNvcmRzKSB7XG4gIHJldHVybiByZWNvcmRzLnJlZHVjZShmdW5jdGlvbiAod2FpdER1cmF0aW9uLCByZWNvcmQpIHtcbiAgICAvLyBvbmx5IGNoZWNrIGZvciBDU1MgdHJhbnNpdGlvbiB2YWx1ZXMgZm9yIEVMRU1FTlQgbm9kZXNcbiAgICBpZiAoaXNFbGVtZW50Tm9kZShyZWNvcmQudGFyZ2V0KSkge1xuICAgICAgdmFyIF9nZXRUcmFuc2l0aW9uVGltaW5ncyA9IGdldFRyYW5zaXRpb25UaW1pbmdzKHJlY29yZC50YXJnZXQpLFxuICAgICAgICAgIGR1cmF0aW9uTWF0Y2ggPSBfZ2V0VHJhbnNpdGlvblRpbWluZ3MuZHVyYXRpb25NYXRjaCxcbiAgICAgICAgICBkZWxheU1hdGNoID0gX2dldFRyYW5zaXRpb25UaW1pbmdzLmRlbGF5TWF0Y2g7XG5cbiAgICAgIHdhaXREdXJhdGlvbiA9IE1hdGgubWF4KHdhaXREdXJhdGlvbiwgZHVyYXRpb25NYXRjaCArIGRlbGF5TWF0Y2gpO1xuICAgIH1cblxuICAgIHJldHVybiB3YWl0RHVyYXRpb247XG4gIH0sIDApO1xufTsgLy8gVXNlcyBgcmVxdWVzdEFuaW1hdGlvbkZyYW1lYCB0byBwZXJmb3JtIGEgZ2l2ZW4gY2FsbGJhY2sgYWZ0ZXIgYSBzcGVjaWZpZWQgd2FpdGluZyBwZXJpb2RcblxuZXhwb3J0IHZhciBwZXJmb3JtT25GcmFtZSA9IGZ1bmN0aW9uIHBlcmZvcm1PbkZyYW1lKHdhaXREdXJhdGlvbiwgdG9QZXJmb3JtKSB7XG4gIGlmICh3YWl0RHVyYXRpb24gPiAwKSB7XG4gICAgdmFyIHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgdmFyIGVuZFRpbWUgPSBzdGFydFRpbWUgKyB3YWl0RHVyYXRpb247XG5cbiAgICB2YXIgb25GcmFtZSA9IGZ1bmN0aW9uIG9uRnJhbWUoKSB7XG4gICAgICB0b1BlcmZvcm0oKTtcblxuICAgICAgaWYgKGVuZFRpbWUgPiBEYXRlLm5vdygpKSB7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShvbkZyYW1lKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKG9uRnJhbWUpO1xuICB9XG59OyAvLyBDb252ZW5pZW5jZSBtZXRob2QgZm9yIGNvbWJpbmluZyB0aGUgcmVzdWx0IG9mICdnZXRXYWl0RHVyYXRpb24nIGRpcmVjdGx5IHdpdGggJ3BlcmZvcm1PbkZyYW1lJ1xuXG5leHBvcnQgdmFyIGdldER1cmF0aW9uQW5kUGVyZm9ybU9uRnJhbWUgPSBmdW5jdGlvbiBnZXREdXJhdGlvbkFuZFBlcmZvcm1PbkZyYW1lKHJlY29yZHMsIHRvUGVyZm9ybSkge1xuICBwZXJmb3JtT25GcmFtZShnZXRXYWl0RHVyYXRpb24ocmVjb3JkcyksIHRvUGVyZm9ybSk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG4vKlxuICogRm9yIHVzZSB3aGVuIGEgY29tcG9uZW50IG5lZWRzIHRvIHNldCBgcmVmYCBvYmplY3RzIGZyb20gbXVsdGlwbGUgc291cmNlcy5cbiAqIEZvciBpbnN0YW5jZSwgaWYgYSBjb21wb25lbnQgYWNjZXB0cyBhIGByZWZgIHByb3AgYnV0IGFsc28gbmVlZHMgaXRzIG93blxuICogbG9jYWwgcmVmZXJlbmNlIGZvciBjYWxjdWxhdGlvbnMsIGV0Yy5cbiAqIFRoaXMgaG9vayBoYW5kbGVzIHNldHRpbmcgbXVsdGlwbGUgYHJlZmBzIG9mIGFueSBhdmFpbGFibGUgYHJlZmAgdHlwZVxuICogaW4gYSBzaW5nbGUgY2FsbGJhY2sgZnVuY3Rpb24uXG4gKi9cblxuZXhwb3J0IHZhciB1c2VDb21iaW5lZFJlZnMgPSBmdW5jdGlvbiB1c2VDb21iaW5lZFJlZnMocmVmcykge1xuICByZXR1cm4gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKG5vZGUpIHtcbiAgICByZXR1cm4gcmVmcy5mb3JFYWNoKGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgIGlmICghcmVmKSByZXR1cm47XG5cbiAgICAgIGlmICh0eXBlb2YgcmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJlZihub2RlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlZi5jdXJyZW50ID0gbm9kZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSwgW3JlZnNdKTtcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJpc0Rpc2FibGVkXCIsIFwiZGlzYWJsZWRcIiwgXCJocmVmXCIsIFwidGFyZ2V0XCIsIFwicmVsXCIsIFwidHlwZVwiLCBcImJ1dHRvblJlZlwiXSxcbiAgICBfZXhjbHVkZWQyID0gW1wiZWxlbWVudFwiLCBcImJhc2VDbGFzc05hbWVcIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImljb25UeXBlXCIsIFwiaWNvblNpZGVcIiwgXCJjb2xvclwiLCBcInNpemVcIiwgXCJmaWxsXCIsIFwiaXNEaXNhYmxlZFwiLCBcImlzTG9hZGluZ1wiLCBcImlzU2VsZWN0ZWRcIiwgXCJjb250ZW50UHJvcHNcIiwgXCJ0ZXh0UHJvcHNcIiwgXCJmdWxsV2lkdGhcIiwgXCJtaW5XaWR0aFwiLCBcInN0eWxlXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsga2V5c09mIH0gZnJvbSAnLi4vY29tbW9uJztcbmltcG9ydCB7IGdldFNlY3VyZVJlbEZvclRhcmdldCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aUJ1dHRvbkNvbnRlbnREZXByZWNhdGVkIGFzIEV1aUJ1dHRvbkNvbnRlbnQgfSBmcm9tICcuL19idXR0b25fY29udGVudF9kZXByZWNhdGVkJztcbmltcG9ydCB7IHZhbGlkYXRlSHJlZiB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3NlY3VyaXR5L2hyZWZfdmFsaWRhdG9yJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIGNvbG9yVG9DbGFzc05hbWVNYXAgPSB7XG4gIHByaW1hcnk6ICctLXByaW1hcnknLFxuICBhY2NlbnQ6ICctLWFjY2VudCcsXG4gIHN1Y2Nlc3M6ICctLXN1Y2Nlc3MnLFxuICB3YXJuaW5nOiAnLS13YXJuaW5nJyxcbiAgZGFuZ2VyOiAnLS1kYW5nZXInLFxuICBnaG9zdDogJy0tZ2hvc3QnLFxuICB0ZXh0OiAnLS10ZXh0J1xufTtcbmV4cG9ydCB2YXIgQ09MT1JTID0ga2V5c09mKGNvbG9yVG9DbGFzc05hbWVNYXApO1xuZXhwb3J0IHZhciBzaXplVG9DbGFzc05hbWVNYXAgPSB7XG4gIHM6ICctLXNtYWxsJyxcbiAgbTogbnVsbFxufTtcbmV4cG9ydCB2YXIgU0laRVMgPSBrZXlzT2Yoc2l6ZVRvQ2xhc3NOYW1lTWFwKTtcbi8qKlxuICogRXh0ZW5kcyBFdWlCdXR0b25Db250ZW50UHJvcHMgd2hpY2ggcHJvdmlkZXNcbiAqIGBpY29uVHlwZWAsIGBpY29uU2lkZWAsIGFuZCBgdGV4dFByb3BzYFxuICovXG5cbi8qKlxuICogRXVpQnV0dG9uIGlzIGxhcmdlbHkgcmVzcG9uc2libGUgZm9yIHByb3ZpZGluZyByZWxldmFudCBwcm9wc1xuICogYW5kIHRoZSBsb2dpYyBmb3IgZWxlbWVudC1zcGVjaWZpYyBhdHRyaWJ1dGVzXG4gKi9cbmV4cG9ydCB2YXIgRXVpQnV0dG9uID0gZnVuY3Rpb24gRXVpQnV0dG9uKF9yZWYpIHtcbiAgdmFyIF9pc0Rpc2FibGVkID0gX3JlZi5pc0Rpc2FibGVkLFxuICAgICAgX2Rpc2FibGVkID0gX3JlZi5kaXNhYmxlZCxcbiAgICAgIGhyZWYgPSBfcmVmLmhyZWYsXG4gICAgICB0YXJnZXQgPSBfcmVmLnRhcmdldCxcbiAgICAgIHJlbCA9IF9yZWYucmVsLFxuICAgICAgX3JlZiR0eXBlID0gX3JlZi50eXBlLFxuICAgICAgdHlwZSA9IF9yZWYkdHlwZSA9PT0gdm9pZCAwID8gJ2J1dHRvbicgOiBfcmVmJHR5cGUsXG4gICAgICBidXR0b25SZWYgPSBfcmVmLmJ1dHRvblJlZixcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgaXNIcmVmVmFsaWQgPSAhaHJlZiB8fCB2YWxpZGF0ZUhyZWYoaHJlZik7XG4gIHZhciBkaXNhYmxlZCA9IF9kaXNhYmxlZCB8fCAhaXNIcmVmVmFsaWQ7XG4gIHZhciBpc0Rpc2FibGVkID0gX2lzRGlzYWJsZWQgfHwgIWlzSHJlZlZhbGlkO1xuICB2YXIgYnV0dG9uSXNEaXNhYmxlZCA9IHJlc3QuaXNMb2FkaW5nIHx8IGlzRGlzYWJsZWQgfHwgZGlzYWJsZWQ7XG4gIHZhciBlbGVtZW50ID0gaHJlZiAmJiAhaXNEaXNhYmxlZCA/ICdhJyA6ICdidXR0b24nO1xuICB2YXIgZWxlbWVudFByb3BzID0ge307IC8vIFByb3BzIGZvciBhbGwgZWxlbWVudHNcblxuICBlbGVtZW50UHJvcHMgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGVsZW1lbnRQcm9wcyksIHt9LCB7XG4gICAgaXNEaXNhYmxlZDogYnV0dG9uSXNEaXNhYmxlZFxuICB9KTsgLy8gRWxlbWVudC1zcGVjaWZpYyBhdHRyaWJ1dGVzXG5cbiAgaWYgKGVsZW1lbnQgPT09ICdidXR0b24nKSB7XG4gICAgZWxlbWVudFByb3BzID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBlbGVtZW50UHJvcHMpLCB7fSwge1xuICAgICAgZGlzYWJsZWQ6IGJ1dHRvbklzRGlzYWJsZWRcbiAgICB9KTtcbiAgfVxuXG4gIHZhciByZWxPYmogPSB7fTtcblxuICBpZiAoaHJlZiAmJiAhYnV0dG9uSXNEaXNhYmxlZCkge1xuICAgIHJlbE9iai5ocmVmID0gaHJlZjtcbiAgICByZWxPYmoucmVsID0gZ2V0U2VjdXJlUmVsRm9yVGFyZ2V0KHtcbiAgICAgIGhyZWY6IGhyZWYsXG4gICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgIHJlbDogcmVsXG4gICAgfSk7XG4gICAgcmVsT2JqLnRhcmdldCA9IHRhcmdldDtcbiAgfSBlbHNlIHtcbiAgICByZWxPYmoudHlwZSA9IHR5cGU7XG4gIH1cblxuICByZXR1cm4gKC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9qc3gtcGFzY2FsLWNhc2VcbiAgICBfX19FbW90aW9uSlNYKEV1aUJ1dHRvbkRpc3BsYXlEZXByZWNhdGVkLCBfZXh0ZW5kcyh7XG4gICAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgICAgYmFzZUNsYXNzTmFtZTogXCJldWlCdXR0b25cIixcbiAgICAgIHJlZjogYnV0dG9uUmVmXG4gICAgfSwgZWxlbWVudFByb3BzLCByZWxPYmosIHJlc3QpKVxuICApO1xufTtcbkV1aUJ1dHRvbi5wcm9wVHlwZXMgPSB7XG4gIGhyZWY6IFByb3BUeXBlcy5zdHJpbmcsXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAgICogTWFrZSBidXR0b24gYSBzb2xpZCBjb2xvciBmb3IgcHJvbWluZW5jZVxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIE1ha2UgYnV0dG9uIGEgc29saWQgY29sb3IgZm9yIHByb21pbmVuY2VcbiAgICAgKi9cbiAgZmlsbDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogQW55IG9mIG91ciBuYW1lZCBjb2xvcnMuXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogQW55IG9mIG91ciBuYW1lZCBjb2xvcnMuXG4gICAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMub25lT2YoW1wicHJpbWFyeVwiLCBcImFjY2VudFwiLCBcInN1Y2Nlc3NcIiwgXCJ3YXJuaW5nXCIsIFwiZGFuZ2VyXCIsIFwiZ2hvc3RcIiwgXCJ0ZXh0XCJdKSxcblxuICAvKipcbiAgICAgKiBVc2Ugc2l6ZSBgc2AgaW4gY29uZmluZWQgc3BhY2VzXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogVXNlIHNpemUgYHNgIGluIGNvbmZpbmVkIHNwYWNlc1xuICAgICAqL1xuICBzaXplOiBQcm9wVHlwZXMub25lT2YoW1wic1wiLCBcIm1cIl0pLFxuXG4gIC8qKlxuICAgICAqIGBkaXNhYmxlZGAgaXMgYWxzbyBhbGxvd2VkXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogYGRpc2FibGVkYCBpcyBhbHNvIGFsbG93ZWRcbiAgICAgKi9cbiAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogQXBwbGllcyB0aGUgYm9vbGVhbiBzdGF0ZSBhcyB0aGUgYGFyaWEtcHJlc3NlZGAgcHJvcGVydHkgdG8gY3JlYXRlIGEgdG9nZ2xlIGJ1dHRvbi5cbiAgICAgKiAqT25seSB1c2Ugd2hlbiB0aGUgcmVhZGFibGUgdGV4dCBkb2VzIG5vdCBjaGFuZ2UgYmV0d2VlbiBzdGF0ZXMuKlxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIEFwcGxpZXMgdGhlIGJvb2xlYW4gc3RhdGUgYXMgdGhlIGBhcmlhLXByZXNzZWRgIHByb3BlcnR5IHRvIGNyZWF0ZSBhIHRvZ2dsZSBidXR0b24uXG4gICAgICogKk9ubHkgdXNlIHdoZW4gdGhlIHJlYWRhYmxlIHRleHQgZG9lcyBub3QgY2hhbmdlIGJldHdlZW4gc3RhdGVzLipcbiAgICAgKi9cbiAgaXNTZWxlY3RlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogRXh0ZW5kcyB0aGUgYnV0dG9uIHRvIDEwMCUgd2lkdGhcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBFeHRlbmRzIHRoZSBidXR0b24gdG8gMTAwJSB3aWR0aFxuICAgICAqL1xuICBmdWxsV2lkdGg6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIE92ZXJyaWRlIHRoZSBkZWZhdWx0IG1pbmltdW0gd2lkdGhcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBPdmVycmlkZSB0aGUgZGVmYXVsdCBtaW5pbXVtIHdpZHRoXG4gICAgICovXG4gIG1pbldpZHRoOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIEZvcmNlIGRpc2FibGVzIHRoZSBidXR0b24gYW5kIGNoYW5nZXMgdGhlIGljb24gdG8gYSBsb2FkaW5nIHNwaW5uZXJcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBGb3JjZSBkaXNhYmxlcyB0aGUgYnV0dG9uIGFuZCBjaGFuZ2VzIHRoZSBpY29uIHRvIGEgbG9hZGluZyBzcGlubmVyXG4gICAgICovXG4gIGlzTG9hZGluZzogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogT2JqZWN0IG9mIHByb3BzIHBhc3NlZCB0byB0aGUgPHNwYW4vPiB3cmFwcGluZyB0aGUgYnV0dG9uJ3MgY29udGVudFxuICAgICAqL1xuICBjb250ZW50UHJvcHM6IFByb3BUeXBlcy5hbnksXG4gIHN0eWxlOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIEFueSBgdHlwZWAgYWNjZXB0ZWQgYnkgRXVpSWNvblxuICAgICAqL1xuICBpY29uVHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYWxlcnRcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhc3Rlcmlza1wiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJib2x0XCIsIFwiYm94ZXNIb3Jpem9udGFsXCIsIFwiYm94ZXNWZXJ0aWNhbFwiLCBcImJyYW5jaFwiLCBcImJyYW5jaFVzZXJcIiwgXCJicm9vbVwiLCBcImJydXNoXCIsIFwiYnVnXCIsIFwiYnVsbHNleWVcIiwgXCJjYWxlbmRhclwiLCBcImNhbnZhc0FwcFwiLCBcImNhc2VzQXBwXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsb2NrXCIsIFwiY2xvdWREcml6emxlXCIsIFwiY2xvdWRTdG9ybXlcIiwgXCJjbG91ZFN1bm55XCIsIFwiY2x1c3RlclwiLCBcImNvZGVBcHBcIiwgXCJjb2xvclwiLCBcImNvbXB1dGVcIiwgXCJjb25zb2xlXCIsIFwiY29uc29sZUFwcFwiLCBcImNvbnRhaW5lclwiLCBcImNvbnRpbnVpdHlBYm92ZVwiLCBcImNvbnRpbnVpdHlBYm92ZUJlbG93XCIsIFwiY29udGludWl0eUJlbG93XCIsIFwiY29udGludWl0eVdpdGhpblwiLCBcImNvbnRyb2xzSG9yaXpvbnRhbFwiLCBcImNvbnRyb2xzVmVydGljYWxcIiwgXCJjb3B5XCIsIFwiY29weUNsaXBib2FyZFwiLCBcImNyZWF0ZUFkdmFuY2VkSm9iXCIsIFwiY3JlYXRlTXVsdGlNZXRyaWNKb2JcIiwgXCJjcmVhdGVQb3B1bGF0aW9uSm9iXCIsIFwiY3JlYXRlU2luZ2xlTWV0cmljSm9iXCIsIFwiY3Jvc3NcIiwgXCJjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcFwiLCBcImNyb3NzSW5BQ2lyY2xlRmlsbGVkXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpc2NvdmVyQXBwXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG91YmxlQXJyb3dMZWZ0XCIsIFwiZG91YmxlQXJyb3dSaWdodFwiLCBcImRvd25sb2FkXCIsIFwiZWRpdG9yQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JBbGlnbkxlZnRcIiwgXCJlZGl0b3JBbGlnblJpZ2h0XCIsIFwiZWRpdG9yQm9sZFwiLCBcImVkaXRvckNoZWNrbGlzdFwiLCBcImVkaXRvckNvZGVCbG9ja1wiLCBcImVkaXRvckNvbW1lbnRcIiwgXCJlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbFwiLCBcImVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbFwiLCBcImVkaXRvckhlYWRpbmdcIiwgXCJlZGl0b3JJdGFsaWNcIiwgXCJlZGl0b3JJdGVtQWxpZ25Cb3R0b21cIiwgXCJlZGl0b3JJdGVtQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JJdGVtQWxpZ25MZWZ0XCIsIFwiZWRpdG9ySXRlbUFsaWduTWlkZGxlXCIsIFwiZWRpdG9ySXRlbUFsaWduUmlnaHRcIiwgXCJlZGl0b3JJdGVtQWxpZ25Ub3BcIiwgXCJlZGl0b3JMaW5rXCIsIFwiZWRpdG9yT3JkZXJlZExpc3RcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnRcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BMZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BSaWdodFwiLCBcImVkaXRvclJlZG9cIiwgXCJlZGl0b3JTdHJpa2VcIiwgXCJlZGl0b3JUYWJsZVwiLCBcImVkaXRvclVuZGVybGluZVwiLCBcImVkaXRvclVuZG9cIiwgXCJlZGl0b3JVbm9yZGVyZWRMaXN0XCIsIFwiZW1haWxcIiwgXCJlbXB0eVwiLCBcImVtc0FwcFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibW9iaWxlXCIsIFwibW9uaXRvcmluZ0FwcFwiLCBcIm1vb25cIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFwZXJDbGlwXCIsIFwicGFydGlhbFwiLCBcInBhdXNlXCIsIFwicGF5bWVudFwiLCBcInBlbmNpbFwiLCBcInBlcmNlbnRcIiwgXCJwaW5cIiwgXCJwaW5GaWxsZWRcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBsYXlcIiwgXCJwbGF5RmlsbGVkXCIsIFwicGx1c1wiLCBcInBsdXNJbkNpcmNsZVwiLCBcInBsdXNJbkNpcmNsZUZpbGxlZFwiLCBcInBvcG91dFwiLCBcInB1c2hcIiwgXCJxdWVzdGlvbkluQ2lyY2xlXCIsIFwicXVvdGVcIiwgXCJyZWNlbnRseVZpZXdlZEFwcFwiLCBcInJlZnJlc2hcIiwgXCJyZWdyZXNzaW9uSm9iXCIsIFwicmVwb3J0ZXJcIiwgXCJyZXBvcnRpbmdBcHBcIiwgXCJyZXR1cm5LZXlcIiwgXCJzYXZlXCIsIFwic2F2ZWRPYmplY3RzQXBwXCIsIFwic2NhbGVcIiwgXCJzZWFyY2hcIiwgXCJzZWFyY2hQcm9maWxlckFwcFwiLCBcInNlY3VyaXR5QW5hbHl0aWNzQXBwXCIsIFwic2VjdXJpdHlBcHBcIiwgXCJzZWN1cml0eVNpZ25hbFwiLCBcInNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWRcIiwgXCJzZWN1cml0eVNpZ25hbFJlc29sdmVkXCIsIFwic2Vzc2lvblZpZXdlclwiLCBcInNoYXJkXCIsIFwic2hhcmVcIiwgXCJzbm93Zmxha2VcIiwgXCJzb3J0RG93blwiLCBcInNvcnRMZWZ0XCIsIFwic29ydFJpZ2h0XCIsIFwic29ydFVwXCIsIFwic29ydGFibGVcIiwgXCJzcGFjZXNBcHBcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EZW5zZVZlY3RvclwiLCBcInRva2VuRWxlbWVudFwiLCBcInRva2VuRW51bVwiLCBcInRva2VuRW51bU1lbWJlclwiLCBcInRva2VuRXZlbnRcIiwgXCJ0b2tlbkV4Y2VwdGlvblwiLCBcInRva2VuRmllbGRcIiwgXCJ0b2tlbkZpbGVcIiwgXCJ0b2tlbkZsYXR0ZW5lZFwiLCBcInRva2VuRnVuY3Rpb25cIiwgXCJ0b2tlbkdlb1wiLCBcInRva2VuSGlzdG9ncmFtXCIsIFwidG9rZW5JbnRlcmZhY2VcIiwgXCJ0b2tlbklQXCIsIFwidG9rZW5Kb2luXCIsIFwidG9rZW5LZXlcIiwgXCJ0b2tlbktleXdvcmRcIiwgXCJ0b2tlbk1ldGhvZFwiLCBcInRva2VuTWV0cmljQ291bnRlclwiLCBcInRva2VuTWV0cmljR2F1Z2VcIiwgXCJ0b2tlbk1vZHVsZVwiLCBcInRva2VuTmFtZXNwYWNlXCIsIFwidG9rZW5OZXN0ZWRcIiwgXCJ0b2tlbk51bGxcIiwgXCJ0b2tlbk51bWJlclwiLCBcInRva2VuT2JqZWN0XCIsIFwidG9rZW5PcGVyYXRvclwiLCBcInRva2VuUGFja2FnZVwiLCBcInRva2VuUGFyYW1ldGVyXCIsIFwidG9rZW5QZXJjb2xhdG9yXCIsIFwidG9rZW5Qcm9wZXJ0eVwiLCBcInRva2VuUmFuZ2VcIiwgXCJ0b2tlblJhbmtGZWF0dXJlXCIsIFwidG9rZW5SYW5rRmVhdHVyZXNcIiwgXCJ0b2tlblJlcG9cIiwgXCJ0b2tlblNlYXJjaFR5cGVcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkXSksXG5cbiAgLyoqXG4gICAgICogQ2FuIG9ubHkgYmUgb25lIHNpZGUgYGxlZnRgIG9yIGByaWdodGBcbiAgICAgKi9cbiAgaWNvblNpZGU6IFByb3BUeXBlcy5vbmVPZihbXCJsZWZ0XCIsIFwicmlnaHRcIl0pLFxuXG4gIC8qKlxuICAgICAqIE9iamVjdCBvZiBwcm9wcyBwYXNzZWQgdG8gdGhlIDxzcGFuLz4gd3JhcHBpbmcgdGhlIGNvbnRlbnQncyB0ZXh0IChvbmx5IGlmIHRoZSBjaGlsZHJlbiBpcyBhIGBzdHJpbmdgKVxuICAgICAqIEl0IGRvZXNuJ3QgYXBwbHkgdG8gdGhlIGljb24uXG4gICAgICovXG4gIHRleHRQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHJlZjogUHJvcFR5cGVzLmFueSxcbiAgICBcImRhdGEtdGV4dFwiOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLFxuICBpY29uU2l6ZTogUHJvcFR5cGVzLm9uZU9mKFtcInNcIiwgXCJtXCJdKSxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBidXR0b25SZWY6IFByb3BUeXBlcy5hbnlcbn07XG5FdWlCdXR0b24uZGlzcGxheU5hbWUgPSAnRXVpQnV0dG9uJztcblxuLyoqXG4gKiAqREVQUkVDQVRFRCpcbiAqIEV1aUJ1dHRvbkRpc3BsYXkgaXMgYW4gaW50ZXJuYWwtb25seSBjb21wb25lbnQgdXNlZCBmb3IgZGlzcGxheWluZ1xuICogYW55IGVsZW1lbnQgYXMgYSBidXR0b24uXG4gKiBOT1RFOiBUaGlzIGNvbXBvbmVudCAqbXVzdCogYmUgYmVsb3cgRXVpQnV0dG9uIGluIHRoZSBmaWxlIGFuZFxuICogRXVpQnV0dG9uIG11c3QgYWxzbyBzZXQgYSBkaXNwbGF5TmFtZSBmb3IgcmVhY3QtZG9jZ2VuLXR5cGVzY3JpcHRcbiAqIHRvIGNvcnJlY3RseSBzZXQgRXVpQnV0dG9uJ3MgZG9jZ2VuSW5mbyBhbmQgZGlzcGxheSBhIHByb3BzIHRhYmxlLlxuICogVGhpcyBjb21wb25lbnQgaGFzIGJlZW4gZGVwcmVjYXRlZCBpbiBmYXZvciBvZiB0aGUgbmV3IEV1aUJ1dHRvbkRpc3BsYXlcbiAqIHRoYXQgY2FuIGJlIGZvdW5kIGluIGBzcmMvY29tcG9uZW50cy9idXR0b24vYnV0dG9uX2Rpc3BsYXkvX2J1dHRvbl9kaXNwbGF5LnRzeGBcbiAqL1xuZXhwb3J0IHZhciBFdWlCdXR0b25EaXNwbGF5RGVwcmVjYXRlZCA9IC8qI19fUFVSRV9fKi9mb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmMiwgcmVmKSB7XG4gIHZhciBfcmVmMiRlbGVtZW50ID0gX3JlZjIuZWxlbWVudCxcbiAgICAgIGVsZW1lbnQgPSBfcmVmMiRlbGVtZW50ID09PSB2b2lkIDAgPyAnYnV0dG9uJyA6IF9yZWYyJGVsZW1lbnQsXG4gICAgICBiYXNlQ2xhc3NOYW1lID0gX3JlZjIuYmFzZUNsYXNzTmFtZSxcbiAgICAgIGNoaWxkcmVuID0gX3JlZjIuY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUgPSBfcmVmMi5jbGFzc05hbWUsXG4gICAgICBpY29uVHlwZSA9IF9yZWYyLmljb25UeXBlLFxuICAgICAgX3JlZjIkaWNvblNpZGUgPSBfcmVmMi5pY29uU2lkZSxcbiAgICAgIGljb25TaWRlID0gX3JlZjIkaWNvblNpZGUgPT09IHZvaWQgMCA/ICdsZWZ0JyA6IF9yZWYyJGljb25TaWRlLFxuICAgICAgX3JlZjIkY29sb3IgPSBfcmVmMi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZjIkY29sb3IgPT09IHZvaWQgMCA/ICdwcmltYXJ5JyA6IF9yZWYyJGNvbG9yLFxuICAgICAgX3JlZjIkc2l6ZSA9IF9yZWYyLnNpemUsXG4gICAgICBzaXplID0gX3JlZjIkc2l6ZSA9PT0gdm9pZCAwID8gJ20nIDogX3JlZjIkc2l6ZSxcbiAgICAgIF9yZWYyJGZpbGwgPSBfcmVmMi5maWxsLFxuICAgICAgZmlsbCA9IF9yZWYyJGZpbGwgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZjIkZmlsbCxcbiAgICAgIGlzRGlzYWJsZWQgPSBfcmVmMi5pc0Rpc2FibGVkLFxuICAgICAgaXNMb2FkaW5nID0gX3JlZjIuaXNMb2FkaW5nLFxuICAgICAgaXNTZWxlY3RlZCA9IF9yZWYyLmlzU2VsZWN0ZWQsXG4gICAgICBjb250ZW50UHJvcHMgPSBfcmVmMi5jb250ZW50UHJvcHMsXG4gICAgICB0ZXh0UHJvcHMgPSBfcmVmMi50ZXh0UHJvcHMsXG4gICAgICBmdWxsV2lkdGggPSBfcmVmMi5mdWxsV2lkdGgsXG4gICAgICBtaW5XaWR0aCA9IF9yZWYyLm1pbldpZHRoLFxuICAgICAgc3R5bGUgPSBfcmVmMi5zdHlsZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZjIsIF9leGNsdWRlZDIpO1xuXG4gIHZhciBidXR0b25Jc0Rpc2FibGVkID0gaXNMb2FkaW5nIHx8IGlzRGlzYWJsZWQ7XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcyhiYXNlQ2xhc3NOYW1lLCBjb2xvciAmJiBjb2xvclRvQ2xhc3NOYW1lTWFwW2NvbG9yXSA/IFwiXCIuY29uY2F0KGJhc2VDbGFzc05hbWUpLmNvbmNhdChjb2xvclRvQ2xhc3NOYW1lTWFwW2NvbG9yXSkgOiBcIlwiLmNvbmNhdChiYXNlQ2xhc3NOYW1lKS5jb25jYXQoY29sb3JUb0NsYXNzTmFtZU1hcC5wcmltYXJ5KSwgc2l6ZSAmJiBzaXplVG9DbGFzc05hbWVNYXBbc2l6ZV0gPyBcIlwiLmNvbmNhdChiYXNlQ2xhc3NOYW1lKS5jb25jYXQoc2l6ZVRvQ2xhc3NOYW1lTWFwW3NpemVdKSA6IG51bGwsIGZpbGwgJiYgXCJcIi5jb25jYXQoYmFzZUNsYXNzTmFtZSwgXCItLWZpbGxcIiksIGZ1bGxXaWR0aCAmJiBcIlwiLmNvbmNhdChiYXNlQ2xhc3NOYW1lLCBcIi0tZnVsbFdpZHRoXCIpLCBidXR0b25Jc0Rpc2FibGVkICYmIFwiXCIuY29uY2F0KGJhc2VDbGFzc05hbWUsIFwiLWlzRGlzYWJsZWRcIiksIGNsYXNzTmFtZSk7XG4gIC8qKlxuICAgKiBOb3QgY2hhbmdpbmcgdGhlIGNvbnRlbnQgb3IgdGV4dCBjbGFzcyBuYW1lcyB0byBtYXRjaCBiYXNlQ2xhc3NOYW1lIHlldCxcbiAgICogYXMgaXQgaXMgYSBtYWpvciBicmVha2luZyBjaGFuZ2UuXG4gICAqL1xuXG4gIHZhciBjb250ZW50Q2xhc3NOYW1lcyA9IGNsYXNzTmFtZXMoJ2V1aUJ1dHRvbl9fY29udGVudCcsIGNvbnRlbnRQcm9wcyAmJiBjb250ZW50UHJvcHMuY2xhc3NOYW1lKTtcbiAgdmFyIHRleHRDbGFzc05hbWVzID0gY2xhc3NOYW1lcygnZXVpQnV0dG9uX190ZXh0JywgdGV4dFByb3BzICYmIHRleHRQcm9wcy5jbGFzc05hbWUpO1xuXG4gIHZhciBpbm5lck5vZGUgPSBfX19FbW90aW9uSlNYKEV1aUJ1dHRvbkNvbnRlbnQsIF9leHRlbmRzKHtcbiAgICBpc0xvYWRpbmc6IGlzTG9hZGluZyxcbiAgICBpY29uVHlwZTogaWNvblR5cGUsXG4gICAgaWNvblNpZGU6IGljb25TaWRlLFxuICAgIHRleHRQcm9wczogX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCB0ZXh0UHJvcHMpLCB7fSwge1xuICAgICAgY2xhc3NOYW1lOiB0ZXh0Q2xhc3NOYW1lc1xuICAgIH0pXG4gIH0sIGNvbnRlbnRQcm9wcywge1xuICAgIC8vIGNsYXNzTmFtZSBoYXMgdG8gY29tZSBsYXN0IHRvIG92ZXJyaWRlIGNvbnRlbnRQcm9wcy5jbGFzc05hbWVcbiAgICBjbGFzc05hbWU6IGNvbnRlbnRDbGFzc05hbWVzXG4gIH0pLCBjaGlsZHJlbik7XG5cbiAgdmFyIGNhbGN1bGF0ZWRTdHlsZSA9IHN0eWxlO1xuXG4gIGlmIChtaW5XaWR0aCAhPT0gdW5kZWZpbmVkIHx8IG1pbldpZHRoICE9PSBudWxsKSB7XG4gICAgY2FsY3VsYXRlZFN0eWxlID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBjYWxjdWxhdGVkU3R5bGUpLCB7fSwge1xuICAgICAgbWluV2lkdGg6IG1pbldpZHRoXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoZWxlbWVudCwgX29iamVjdFNwcmVhZCh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIHN0eWxlOiBjYWxjdWxhdGVkU3R5bGUsXG4gICAgZGlzYWJsZWQ6IGVsZW1lbnQgPT09ICdidXR0b24nICYmIGJ1dHRvbklzRGlzYWJsZWQsXG4gICAgJ2FyaWEtcHJlc3NlZCc6IGVsZW1lbnQgPT09ICdidXR0b24nID8gaXNTZWxlY3RlZCA6IHVuZGVmaW5lZCxcbiAgICByZWY6IHJlZlxuICB9LCByZXN0KSwgaW5uZXJOb2RlKTtcbn0pO1xuRXVpQnV0dG9uRGlzcGxheURlcHJlY2F0ZWQucHJvcFR5cGVzID0ge1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAgICogTWFrZSBidXR0b24gYSBzb2xpZCBjb2xvciBmb3IgcHJvbWluZW5jZVxuICAgICAqL1xuICBmaWxsOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBBbnkgb2Ygb3VyIG5hbWVkIGNvbG9ycy5cbiAgICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcy5vbmVPZihbXCJwcmltYXJ5XCIsIFwiYWNjZW50XCIsIFwic3VjY2Vzc1wiLCBcIndhcm5pbmdcIiwgXCJkYW5nZXJcIiwgXCJnaG9zdFwiLCBcInRleHRcIl0pLFxuXG4gIC8qKlxuICAgICAqIFVzZSBzaXplIGBzYCBpbiBjb25maW5lZCBzcGFjZXNcbiAgICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mKFtcInNcIiwgXCJtXCJdKSxcblxuICAvKipcbiAgICAgKiBgZGlzYWJsZWRgIGlzIGFsc28gYWxsb3dlZFxuICAgICAqL1xuICBpc0Rpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBBcHBsaWVzIHRoZSBib29sZWFuIHN0YXRlIGFzIHRoZSBgYXJpYS1wcmVzc2VkYCBwcm9wZXJ0eSB0byBjcmVhdGUgYSB0b2dnbGUgYnV0dG9uLlxuICAgICAqICpPbmx5IHVzZSB3aGVuIHRoZSByZWFkYWJsZSB0ZXh0IGRvZXMgbm90IGNoYW5nZSBiZXR3ZWVuIHN0YXRlcy4qXG4gICAgICovXG4gIGlzU2VsZWN0ZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIEV4dGVuZHMgdGhlIGJ1dHRvbiB0byAxMDAlIHdpZHRoXG4gICAgICovXG4gIGZ1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogT3ZlcnJpZGUgdGhlIGRlZmF1bHQgbWluaW11bSB3aWR0aFxuICAgICAqL1xuICBtaW5XaWR0aDogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBGb3JjZSBkaXNhYmxlcyB0aGUgYnV0dG9uIGFuZCBjaGFuZ2VzIHRoZSBpY29uIHRvIGEgbG9hZGluZyBzcGlubmVyXG4gICAgICovXG4gIGlzTG9hZGluZzogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogT2JqZWN0IG9mIHByb3BzIHBhc3NlZCB0byB0aGUgPHNwYW4vPiB3cmFwcGluZyB0aGUgYnV0dG9uJ3MgY29udGVudFxuICAgICAqL1xuICBjb250ZW50UHJvcHM6IFByb3BUeXBlcy5hbnksXG4gIHN0eWxlOiBQcm9wVHlwZXMuYW55LFxuICBpY29uVHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYWxlcnRcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhc3Rlcmlza1wiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJib2x0XCIsIFwiYm94ZXNIb3Jpem9udGFsXCIsIFwiYm94ZXNWZXJ0aWNhbFwiLCBcImJyYW5jaFwiLCBcImJyYW5jaFVzZXJcIiwgXCJicm9vbVwiLCBcImJydXNoXCIsIFwiYnVnXCIsIFwiYnVsbHNleWVcIiwgXCJjYWxlbmRhclwiLCBcImNhbnZhc0FwcFwiLCBcImNhc2VzQXBwXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsb2NrXCIsIFwiY2xvdWREcml6emxlXCIsIFwiY2xvdWRTdG9ybXlcIiwgXCJjbG91ZFN1bm55XCIsIFwiY2x1c3RlclwiLCBcImNvZGVBcHBcIiwgXCJjb2xvclwiLCBcImNvbXB1dGVcIiwgXCJjb25zb2xlXCIsIFwiY29uc29sZUFwcFwiLCBcImNvbnRhaW5lclwiLCBcImNvbnRpbnVpdHlBYm92ZVwiLCBcImNvbnRpbnVpdHlBYm92ZUJlbG93XCIsIFwiY29udGludWl0eUJlbG93XCIsIFwiY29udGludWl0eVdpdGhpblwiLCBcImNvbnRyb2xzSG9yaXpvbnRhbFwiLCBcImNvbnRyb2xzVmVydGljYWxcIiwgXCJjb3B5XCIsIFwiY29weUNsaXBib2FyZFwiLCBcImNyZWF0ZUFkdmFuY2VkSm9iXCIsIFwiY3JlYXRlTXVsdGlNZXRyaWNKb2JcIiwgXCJjcmVhdGVQb3B1bGF0aW9uSm9iXCIsIFwiY3JlYXRlU2luZ2xlTWV0cmljSm9iXCIsIFwiY3Jvc3NcIiwgXCJjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcFwiLCBcImNyb3NzSW5BQ2lyY2xlRmlsbGVkXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpc2NvdmVyQXBwXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG91YmxlQXJyb3dMZWZ0XCIsIFwiZG91YmxlQXJyb3dSaWdodFwiLCBcImRvd25sb2FkXCIsIFwiZWRpdG9yQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JBbGlnbkxlZnRcIiwgXCJlZGl0b3JBbGlnblJpZ2h0XCIsIFwiZWRpdG9yQm9sZFwiLCBcImVkaXRvckNoZWNrbGlzdFwiLCBcImVkaXRvckNvZGVCbG9ja1wiLCBcImVkaXRvckNvbW1lbnRcIiwgXCJlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbFwiLCBcImVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbFwiLCBcImVkaXRvckhlYWRpbmdcIiwgXCJlZGl0b3JJdGFsaWNcIiwgXCJlZGl0b3JJdGVtQWxpZ25Cb3R0b21cIiwgXCJlZGl0b3JJdGVtQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JJdGVtQWxpZ25MZWZ0XCIsIFwiZWRpdG9ySXRlbUFsaWduTWlkZGxlXCIsIFwiZWRpdG9ySXRlbUFsaWduUmlnaHRcIiwgXCJlZGl0b3JJdGVtQWxpZ25Ub3BcIiwgXCJlZGl0b3JMaW5rXCIsIFwiZWRpdG9yT3JkZXJlZExpc3RcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnRcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BMZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BSaWdodFwiLCBcImVkaXRvclJlZG9cIiwgXCJlZGl0b3JTdHJpa2VcIiwgXCJlZGl0b3JUYWJsZVwiLCBcImVkaXRvclVuZGVybGluZVwiLCBcImVkaXRvclVuZG9cIiwgXCJlZGl0b3JVbm9yZGVyZWRMaXN0XCIsIFwiZW1haWxcIiwgXCJlbXB0eVwiLCBcImVtc0FwcFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibW9iaWxlXCIsIFwibW9uaXRvcmluZ0FwcFwiLCBcIm1vb25cIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFwZXJDbGlwXCIsIFwicGFydGlhbFwiLCBcInBhdXNlXCIsIFwicGF5bWVudFwiLCBcInBlbmNpbFwiLCBcInBlcmNlbnRcIiwgXCJwaW5cIiwgXCJwaW5GaWxsZWRcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBsYXlcIiwgXCJwbGF5RmlsbGVkXCIsIFwicGx1c1wiLCBcInBsdXNJbkNpcmNsZVwiLCBcInBsdXNJbkNpcmNsZUZpbGxlZFwiLCBcInBvcG91dFwiLCBcInB1c2hcIiwgXCJxdWVzdGlvbkluQ2lyY2xlXCIsIFwicXVvdGVcIiwgXCJyZWNlbnRseVZpZXdlZEFwcFwiLCBcInJlZnJlc2hcIiwgXCJyZWdyZXNzaW9uSm9iXCIsIFwicmVwb3J0ZXJcIiwgXCJyZXBvcnRpbmdBcHBcIiwgXCJyZXR1cm5LZXlcIiwgXCJzYXZlXCIsIFwic2F2ZWRPYmplY3RzQXBwXCIsIFwic2NhbGVcIiwgXCJzZWFyY2hcIiwgXCJzZWFyY2hQcm9maWxlckFwcFwiLCBcInNlY3VyaXR5QW5hbHl0aWNzQXBwXCIsIFwic2VjdXJpdHlBcHBcIiwgXCJzZWN1cml0eVNpZ25hbFwiLCBcInNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWRcIiwgXCJzZWN1cml0eVNpZ25hbFJlc29sdmVkXCIsIFwic2Vzc2lvblZpZXdlclwiLCBcInNoYXJkXCIsIFwic2hhcmVcIiwgXCJzbm93Zmxha2VcIiwgXCJzb3J0RG93blwiLCBcInNvcnRMZWZ0XCIsIFwic29ydFJpZ2h0XCIsIFwic29ydFVwXCIsIFwic29ydGFibGVcIiwgXCJzcGFjZXNBcHBcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EZW5zZVZlY3RvclwiLCBcInRva2VuRWxlbWVudFwiLCBcInRva2VuRW51bVwiLCBcInRva2VuRW51bU1lbWJlclwiLCBcInRva2VuRXZlbnRcIiwgXCJ0b2tlbkV4Y2VwdGlvblwiLCBcInRva2VuRmllbGRcIiwgXCJ0b2tlbkZpbGVcIiwgXCJ0b2tlbkZsYXR0ZW5lZFwiLCBcInRva2VuRnVuY3Rpb25cIiwgXCJ0b2tlbkdlb1wiLCBcInRva2VuSGlzdG9ncmFtXCIsIFwidG9rZW5JbnRlcmZhY2VcIiwgXCJ0b2tlbklQXCIsIFwidG9rZW5Kb2luXCIsIFwidG9rZW5LZXlcIiwgXCJ0b2tlbktleXdvcmRcIiwgXCJ0b2tlbk1ldGhvZFwiLCBcInRva2VuTWV0cmljQ291bnRlclwiLCBcInRva2VuTWV0cmljR2F1Z2VcIiwgXCJ0b2tlbk1vZHVsZVwiLCBcInRva2VuTmFtZXNwYWNlXCIsIFwidG9rZW5OZXN0ZWRcIiwgXCJ0b2tlbk51bGxcIiwgXCJ0b2tlbk51bWJlclwiLCBcInRva2VuT2JqZWN0XCIsIFwidG9rZW5PcGVyYXRvclwiLCBcInRva2VuUGFja2FnZVwiLCBcInRva2VuUGFyYW1ldGVyXCIsIFwidG9rZW5QZXJjb2xhdG9yXCIsIFwidG9rZW5Qcm9wZXJ0eVwiLCBcInRva2VuUmFuZ2VcIiwgXCJ0b2tlblJhbmtGZWF0dXJlXCIsIFwidG9rZW5SYW5rRmVhdHVyZXNcIiwgXCJ0b2tlblJlcG9cIiwgXCJ0b2tlblNlYXJjaFR5cGVcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkXSksXG4gIGljb25TaWRlOiBQcm9wVHlwZXMub25lT2YoW1wibGVmdFwiLCBcInJpZ2h0XCJdKSxcbiAgdGV4dFByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgcmVmOiBQcm9wVHlwZXMuYW55LFxuICAgIFwiZGF0YS10ZXh0XCI6IFByb3BUeXBlcy5zdHJpbmdcbiAgfSksXG4gIGljb25TaXplOiBQcm9wVHlwZXMub25lT2YoW1wic1wiLCBcIm1cIl0pLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICAgKiBQcm92aWRlIGEgdmFsaWQgZWxlbWVudCB0byByZW5kZXIgdGhlIGVsZW1lbnQgYXNcbiAgICAgICAqL1xuICBlbGVtZW50OiBQcm9wVHlwZXMub25lT2YoW1wiYVwiLCBcImJ1dHRvblwiLCBcInNwYW5cIiwgXCJsYWJlbFwiXSkuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICAgICAqIFByb3ZpZGUgdGhlIGNvbXBvbmVudCdzIGJhc2UgY2xhc3MgbmFtZSB0byBidWlsZCB0aGUgY2xhc3MgbGlzdCBvblxuICAgICAgICovXG4gIGJhc2VDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZFxufTtcbkV1aUJ1dHRvbkRpc3BsYXlEZXByZWNhdGVkLmRpc3BsYXlOYW1lID0gJ0V1aUJ1dHRvbkRpc3BsYXknOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJ0ZXh0UHJvcHNcIiwgXCJpc0xvYWRpbmdcIiwgXCJpY29uVHlwZVwiLCBcImljb25TaXplXCIsIFwiaWNvblNpZGVcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBrZXlzT2YgfSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IHsgRXVpTG9hZGluZ1NwaW5uZXIgfSBmcm9tICcuLi9sb2FkaW5nJztcbmltcG9ydCB7IEV1aUljb24gfSBmcm9tICcuLi9pY29uJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgaWNvblNpZGVUb0NsYXNzTmFtZU1hcCA9IHtcbiAgbGVmdDogbnVsbCxcbiAgcmlnaHQ6ICdldWlCdXR0b25Db250ZW50LS1pY29uUmlnaHQnXG59O1xuZXhwb3J0IHZhciBJQ09OX1NJREVTID0ga2V5c09mKGljb25TaWRlVG9DbGFzc05hbWVNYXApO1xuZXhwb3J0IHZhciBFdWlCdXR0b25Db250ZW50RGVwcmVjYXRlZCA9IGZ1bmN0aW9uIEV1aUJ1dHRvbkNvbnRlbnREZXByZWNhdGVkKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIHRleHRQcm9wcyA9IF9yZWYudGV4dFByb3BzLFxuICAgICAgX3JlZiRpc0xvYWRpbmcgPSBfcmVmLmlzTG9hZGluZyxcbiAgICAgIGlzTG9hZGluZyA9IF9yZWYkaXNMb2FkaW5nID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkaXNMb2FkaW5nLFxuICAgICAgaWNvblR5cGUgPSBfcmVmLmljb25UeXBlLFxuICAgICAgX3JlZiRpY29uU2l6ZSA9IF9yZWYuaWNvblNpemUsXG4gICAgICBpY29uU2l6ZSA9IF9yZWYkaWNvblNpemUgPT09IHZvaWQgMCA/ICdtJyA6IF9yZWYkaWNvblNpemUsXG4gICAgICBfcmVmJGljb25TaWRlID0gX3JlZi5pY29uU2lkZSxcbiAgICAgIGljb25TaWRlID0gX3JlZiRpY29uU2lkZSA9PT0gdm9pZCAwID8gJ2xlZnQnIDogX3JlZiRpY29uU2lkZSxcbiAgICAgIGNvbnRlbnRQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIC8vIEFkZCBhbiBpY29uIHRvIHRoZSBidXR0b24gaWYgb25lIGV4aXN0cy5cbiAgdmFyIGJ1dHRvbkljb247XG5cbiAgaWYgKGlzTG9hZGluZykge1xuICAgIGJ1dHRvbkljb24gPSBfX19FbW90aW9uSlNYKEV1aUxvYWRpbmdTcGlubmVyLCB7XG4gICAgICBjbGFzc05hbWU6IFwiZXVpQnV0dG9uQ29udGVudF9fc3Bpbm5lclwiLFxuICAgICAgc2l6ZTogaWNvblNpemVcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChpY29uVHlwZSkge1xuICAgIGJ1dHRvbkljb24gPSBfX19FbW90aW9uSlNYKEV1aUljb24sIHtcbiAgICAgIGNsYXNzTmFtZTogXCJldWlCdXR0b25Db250ZW50X19pY29uXCIsXG4gICAgICB0eXBlOiBpY29uVHlwZSxcbiAgICAgIHNpemU6IGljb25TaXplLFxuICAgICAgY29sb3I6IFwiaW5oZXJpdFwiIC8vIGZvcmNlcyB0aGUgaWNvbiB0byBpbmhlcml0IGl0cyBwYXJlbnQgY29sb3JcblxuICAgIH0pO1xuICB9XG5cbiAgdmFyIGNvbnRlbnRDbGFzc05hbWVzID0gY2xhc3NOYW1lcygnZXVpQnV0dG9uQ29udGVudCcsIGljb25TaWRlID8gaWNvblNpZGVUb0NsYXNzTmFtZU1hcFtpY29uU2lkZV0gOiBudWxsLCBjb250ZW50UHJvcHMgJiYgY29udGVudFByb3BzLmNsYXNzTmFtZSk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3BhblwiLCBfZXh0ZW5kcyh7fSwgY29udGVudFByb3BzLCB7XG4gICAgY2xhc3NOYW1lOiBjb250ZW50Q2xhc3NOYW1lc1xuICB9KSwgYnV0dG9uSWNvbiwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwgdGV4dFByb3BzLCBjaGlsZHJlbikpO1xufTtcbkV1aUJ1dHRvbkNvbnRlbnREZXByZWNhdGVkLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAgICogQW55IGB0eXBlYCBhY2NlcHRlZCBieSBFdWlJY29uXG4gICAgICovXG4gIGljb25UeXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbGVydFwiLCBcImFuYWx5emVFdmVudFwiLCBcImFubm90YXRpb25cIiwgXCJhcG1BcHBcIiwgXCJhcG1UcmFjZVwiLCBcImFwcFNlYXJjaEFwcFwiLCBcImFwcHNcIiwgXCJhcnJvd0Rvd25cIiwgXCJhcnJvd0xlZnRcIiwgXCJhcnJvd1JpZ2h0XCIsIFwiYXJyb3dVcFwiLCBcImFycm93U3RhcnRcIiwgXCJhcnJvd0VuZFwiLCBcImFzdGVyaXNrXCIsIFwiYXVkaXRiZWF0QXBwXCIsIFwiYmVha2VyXCIsIFwiYmVsbFwiLCBcImJlbGxTbGFzaFwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGVja1wiLCBcImNoZWNrSW5DaXJjbGVGaWxsZWRcIiwgXCJjaGVlclwiLCBcImNsYXNzaWZpY2F0aW9uSm9iXCIsIFwiY2xvY2tcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkFDaXJjbGVGaWxsZWRcIiwgXCJjcm9zc2hhaXJzXCIsIFwiY3VycmVuY3lcIiwgXCJjdXRcIiwgXCJkYXNoYm9hcmRBcHBcIiwgXCJkYXRhVmlzdWFsaXplclwiLCBcImRhdGFiYXNlXCIsIFwiZGVza3RvcFwiLCBcImRldlRvb2xzQXBwXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZXFsXCIsIFwiZXJhc2VyXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZsYWdcIiwgXCJmbGVldEFwcFwiLCBcImZvbGRcIiwgXCJmb2xkZXJDaGVja1wiLCBcImZvbGRlckNsb3NlZFwiLCBcImZvbGRlckV4Y2xhbWF0aW9uXCIsIFwiZm9sZGVyT3BlblwiLCBcImZyYW1lTmV4dFwiLCBcImZyYW1lUHJldmlvdXNcIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFNjcmVlbkV4aXRcIiwgXCJmdW5jdGlvblwiLCBcImdlYXJcIiwgXCJnaXNBcHBcIiwgXCJnbGFzc2VzXCIsIFwiZ2xvYmVcIiwgXCJncmFiXCIsIFwiZ3JhYkhvcml6b250YWxcIiwgXCJncmFwaEFwcFwiLCBcImdyaWRcIiwgXCJncm9rQXBwXCIsIFwiaGVhcnRcIiwgXCJoZWFydGJlYXRBcHBcIiwgXCJoZWF0bWFwXCIsIFwiaGVscFwiLCBcImhvbWVcIiwgXCJpSW5DaXJjbGVcIiwgXCJpbWFnZVwiLCBcImltcG9ydEFjdGlvblwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5wdXRPdXRwdXRcIiwgXCJpbnNwZWN0XCIsIFwiaW52ZXJ0XCIsIFwiaXBcIiwgXCJrZXlib2FyZFwiLCBcImtxbEZpZWxkXCIsIFwia3FsRnVuY3Rpb25cIiwgXCJrcWxPcGVyYW5kXCIsIFwia3FsU2VsZWN0b3JcIiwgXCJrcWxWYWx1ZVwiLCBcImt1YmVybmV0ZXNOb2RlXCIsIFwia3ViZXJuZXRlc1BvZFwiLCBcImxheWVyc1wiLCBcImxlbnNBcHBcIiwgXCJsZXR0ZXJpbmdcIiwgXCJsaW5lRGFzaGVkXCIsIFwibGluZURvdHRlZFwiLCBcImxpbmVTb2xpZFwiLCBcImxpbmtcIiwgXCJsaXN0XCIsIFwibGlzdEFkZFwiLCBcImxvY2tcIiwgXCJsb2NrT3BlblwiLCBcImxvZ29BV1NcIiwgXCJsb2dvQVdTTW9ub1wiLCBcImxvZ29BZXJvc3Bpa2VcIiwgXCJsb2dvQXBhY2hlXCIsIFwibG9nb0FwcFNlYXJjaFwiLCBcImxvZ29BenVyZVwiLCBcImxvZ29BenVyZU1vbm9cIiwgXCJsb2dvQmVhdHNcIiwgXCJsb2dvQnVzaW5lc3NBbmFseXRpY3NcIiwgXCJsb2dvQ2VwaFwiLCBcImxvZ29DbG91ZFwiLCBcImxvZ29DbG91ZEVudGVycHJpc2VcIiwgXCJsb2dvQ29kZVwiLCBcImxvZ29Db2Rlc2FuZGJveFwiLCBcImxvZ29Db3VjaGJhc2VcIiwgXCJsb2dvRG9ja2VyXCIsIFwibG9nb0Ryb3B3aXphcmRcIiwgXCJsb2dvRWxhc3RpY1wiLCBcImxvZ29FbGFzdGljU3RhY2tcIiwgXCJsb2dvRWxhc3RpY3NlYXJjaFwiLCBcImxvZ29FbnRlcnByaXNlU2VhcmNoXCIsIFwibG9nb0V0Y2RcIiwgXCJsb2dvR0NQXCIsIFwibG9nb0dDUE1vbm9cIiwgXCJsb2dvR2l0aHViXCIsIFwibG9nb0dtYWlsXCIsIFwibG9nb0dvbGFuZ1wiLCBcImxvZ29Hb29nbGVHXCIsIFwibG9nb0hBcHJveHlcIiwgXCJsb2dvSUJNXCIsIFwibG9nb0lCTU1vbm9cIiwgXCJsb2dvS2Fma2FcIiwgXCJsb2dvS2liYW5hXCIsIFwibG9nb0t1YmVybmV0ZXNcIiwgXCJsb2dvTG9nZ2luZ1wiLCBcImxvZ29Mb2dzdGFzaFwiLCBcImxvZ29NYXBzXCIsIFwibG9nb01lbWNhY2hlZFwiLCBcImxvZ29NZXRyaWNzXCIsIFwibG9nb01vbmdvZGJcIiwgXCJsb2dvTXlTUUxcIiwgXCJsb2dvTmdpbnhcIiwgXCJsb2dvT2JzZXJ2YWJpbGl0eVwiLCBcImxvZ29Pc3F1ZXJ5XCIsIFwibG9nb1BocFwiLCBcImxvZ29Qb3N0Z3Jlc1wiLCBcImxvZ29Qcm9tZXRoZXVzXCIsIFwibG9nb1JhYmJpdG1xXCIsIFwibG9nb1JlZGlzXCIsIFwibG9nb1NlY3VyaXR5XCIsIFwibG9nb1NpdGVTZWFyY2hcIiwgXCJsb2dvU2tldGNoXCIsIFwibG9nb1NsYWNrXCIsIFwibG9nb1VwdGltZVwiLCBcImxvZ29XZWJob29rXCIsIFwibG9nb1dpbmRvd3NcIiwgXCJsb2dvV29ya3BsYWNlU2VhcmNoXCIsIFwibG9nc0FwcFwiLCBcImxvZ3N0YXNoRmlsdGVyXCIsIFwibG9nc3Rhc2hJZlwiLCBcImxvZ3N0YXNoSW5wdXRcIiwgXCJsb2dzdGFzaE91dHB1dFwiLCBcImxvZ3N0YXNoUXVldWVcIiwgXCJtYWNoaW5lTGVhcm5pbmdBcHBcIiwgXCJtYWduZXRcIiwgXCJtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uXCIsIFwibWFnbmlmeVdpdGhNaW51c1wiLCBcIm1hZ25pZnlXaXRoUGx1c1wiLCBcIm1hbmFnZW1lbnRBcHBcIiwgXCJtYXBNYXJrZXJcIiwgXCJtZW1vcnlcIiwgXCJtZW51XCIsIFwibWVudURvd25cIiwgXCJtZW51TGVmdFwiLCBcIm1lbnVSaWdodFwiLCBcIm1lbnVVcFwiLCBcIm1lcmdlXCIsIFwibWV0cmljYmVhdEFwcFwiLCBcIm1ldHJpY3NBcHBcIiwgXCJtaW5pbWl6ZVwiLCBcIm1pbnVzXCIsIFwibWludXNJbkNpcmNsZVwiLCBcIm1pbnVzSW5DaXJjbGVGaWxsZWRcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5vZGVcIiwgXCJub3RlYm9va0FwcFwiLCBcIm51bWJlclwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIiwgXCJvdXRsaWVyRGV0ZWN0aW9uSm9iXCIsIFwicGFja2FnZVwiLCBcInBhY2tldGJlYXRBcHBcIiwgXCJwYWdlU2VsZWN0XCIsIFwicGFnZXNTZWxlY3RcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVsaW5lQXBwXCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNub3dmbGFrZVwiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc0FwcFwiLCBcInNxbEFwcFwiLCBcInN0YXJFbXB0eVwiLCBcInN0YXJFbXB0eVNwYWNlXCIsIFwic3RhckZpbGxlZFwiLCBcInN0YXJGaWxsZWRTcGFjZVwiLCBcInN0YXJNaW51c0VtcHR5XCIsIFwic3Rhck1pbnVzRmlsbGVkXCIsIFwic3RhclBsdXNFbXB0eVwiLCBcInN0YXJQbHVzRmlsbGVkXCIsIFwic3RhdHNcIiwgXCJzdG9wXCIsIFwic3RvcEZpbGxlZFwiLCBcInN0b3BTbGFzaFwiLCBcInN0b3JhZ2VcIiwgXCJzdHJpbmdcIiwgXCJzdWJtb2R1bGVcIiwgXCJzdW5cIiwgXCJzd2F0Y2hJbnB1dFwiLCBcInN5bWxpbmtcIiwgXCJ0YWJsZURlbnNpdHlDb21wYWN0XCIsIFwidGFibGVEZW5zaXR5RXhwYW5kZWRcIiwgXCJ0YWJsZURlbnNpdHlOb3JtYWxcIiwgXCJ0YWJsZU9mQ29udGVudHNcIiwgXCJ0YWdcIiwgXCJ0ZWFyXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJ0aW1lbGluZVwiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFzaFwiLCBcInVuZm9sZFwiLCBcInVubGlua1wiLCBcInVwZ3JhZGVBc3Npc3RhbnRBcHBcIiwgXCJ1cHRpbWVBcHBcIiwgXCJ1c2VyXCIsIFwidXNlckF2YXRhclwiLCBcInVzZXJzXCIsIFwidXNlcnNSb2xlc0FwcFwiLCBcInZlY3RvclwiLCBcInZpZGVvUGxheWVyXCIsIFwidmlzQXJlYVwiLCBcInZpc0FyZWFTdGFja2VkXCIsIFwidmlzQmFySG9yaXpvbnRhbFwiLCBcInZpc0Jhckhvcml6b250YWxTdGFja2VkXCIsIFwidmlzQmFyVmVydGljYWxcIiwgXCJ2aXNCYXJWZXJ0aWNhbFN0YWNrZWRcIiwgXCJ2aXNHYXVnZVwiLCBcInZpc0dvYWxcIiwgXCJ2aXNMaW5lXCIsIFwidmlzTWFwQ29vcmRpbmF0ZVwiLCBcInZpc01hcFJlZ2lvblwiLCBcInZpc01ldHJpY1wiLCBcInZpc1BpZVwiLCBcInZpc1RhYmxlXCIsIFwidmlzVGFnQ2xvdWRcIiwgXCJ2aXNUZXh0XCIsIFwidmlzVGltZWxpb25cIiwgXCJ2aXNWZWdhXCIsIFwidmlzVmlzdWFsQnVpbGRlclwiLCBcInZpc3VhbGl6ZUFwcFwiLCBcIndhdGNoZXNBcHBcIiwgXCJ3b3JkV3JhcFwiLCBcIndvcmRXcmFwRGlzYWJsZWRcIiwgXCJ3b3JrcGxhY2VTZWFyY2hBcHBcIiwgXCJ3cmVuY2hcIiwgXCJ0b2tlbkFsaWFzXCIsIFwidG9rZW5Bbm5vdGF0aW9uXCIsIFwidG9rZW5BcnJheVwiLCBcInRva2VuQmluYXJ5XCIsIFwidG9rZW5Cb29sZWFuXCIsIFwidG9rZW5DbGFzc1wiLCBcInRva2VuQ29tcGxldGlvblN1Z2dlc3RlclwiLCBcInRva2VuQ29uc3RhbnRcIiwgXCJ0b2tlbkRhdGVcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2hhcGVcIiwgXCJ0b2tlblN0cmluZ1wiLCBcInRva2VuU3RydWN0XCIsIFwidG9rZW5TeW1ib2xcIiwgXCJ0b2tlblRhZ1wiLCBcInRva2VuVGV4dFwiLCBcInRva2VuVG9rZW5Db3VudFwiLCBcInRva2VuVmFyaWFibGVcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWRdKSxcblxuICAvKipcbiAgICAgKiBDYW4gb25seSBiZSBvbmUgc2lkZSBgbGVmdGAgb3IgYHJpZ2h0YFxuICAgICAqL1xuICBpY29uU2lkZTogUHJvcFR5cGVzLm9uZU9mKFtcImxlZnRcIiwgXCJyaWdodFwiXSksXG4gIGlzTG9hZGluZzogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogT2JqZWN0IG9mIHByb3BzIHBhc3NlZCB0byB0aGUgPHNwYW4vPiB3cmFwcGluZyB0aGUgY29udGVudCdzIHRleHQgKG9ubHkgaWYgdGhlIGNoaWxkcmVuIGlzIGEgYHN0cmluZ2ApXG4gICAgICogSXQgZG9lc24ndCBhcHBseSB0byB0aGUgaWNvbi5cbiAgICAgKi9cbiAgdGV4dFByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgcmVmOiBQcm9wVHlwZXMuYW55LFxuICAgIFwiZGF0YS10ZXh0XCI6IFByb3BUeXBlcy5zdHJpbmdcbiAgfSksXG4gIGljb25TaXplOiBQcm9wVHlwZXMub25lT2YoW1wic1wiLCBcIm1cIl0pLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFjY2Vzc2liaWxpdHkgPSBmdW5jdGlvbiBFdWlJY29uQWNjZXNzaWJpbGl0eShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggMGE4IDggMCAxMTAgMTZBOCA4IDAgMDE4IDB6bTAgMWE3IDcgMCAxMDAgMTRBNyA3IDAgMDA4IDF6bTMuOTc0IDQuMzQyYS41LjUgMCAwMS0uMjMzLjU5NmwtLjA4My4wMzZMOSA2Ljg2djIuNTU5bC45NzQgMi45MjNhLjUuNSAwIDAxLS4yMzMuNTk2bC0uMDgzLjAzNmEuNS41IDAgMDEtLjU5Ni0uMjMzbC0uMDM2LS4wODMtMS0zTDggOS41bC0uMDI2LjE1OC0xIDNhLjUuNSAwIDAxLS45Ny0uMjI4bC4wMjItLjA4OEw3IDkuNDE2VjYuODZsLTIuNjU4LS44ODZhLjUuNSAwIDAxLjIyOC0uOTdsLjA4OC4wMjJMNy41ODMgNmguODMzbDIuOTI2LS45NzRhLjUuNSAwIDAxLjYzMi4zMTZ6TTggM2ExIDEgMCAxMTAgMiAxIDEgMCAwMTAtMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQWNjZXNzaWJpbGl0eTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQWdncmVnYXRlID0gZnVuY3Rpb24gRXVpSWNvbkFnZ3JlZ2F0ZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0yLjUgMmEuNS41IDAgMTAwIDEgLjUuNSAwIDAwMC0xem0wLTFhMS41IDEuNSAwIDAxMS40MTUgMWgxLjkwOGExLjUgMS41IDAgMDExLjM5My45NDNMOC44MzkgN0gxMi41YS41LjUgMCAwMTAgMUg4LjgzOWwtMS42MjMgNC4wNTdBMS41IDEuNSAwIDAxNS44MjMgMTNIMy45MTVhMS41IDEuNSAwIDExMC0xaDEuOTA4YS41LjUgMCAwMC40NjQtLjMxNEw3Ljc2MSA4SDMuOTE1YTEuNSAxLjUgMCAxMTAtMUg3Ljc2TDYuMjg3IDMuMzE0QS41LjUgMCAwMDUuODIzIDNIMy45MTVBMS41IDEuNSAwIDExMi41IDF6bTAgMTFhLjUuNSAwIDExMCAxIC41LjUgMCAwMTAtMXpNMyA3LjVhLjUuNSAwIDEwLTEgMCAuNS41IDAgMDAxIDB6bTkuMzU0LTMuMzU0YS41LjUgMCAwMC0uNzA4LjcwOEwxMy43OTMgN2EuNzA3LjcwNyAwIDAxMCAxbC0yLjE0NyAyLjE0NmEuNS41IDAgMDAuNzA4LjcwOEwxNC41IDguNzA3YTEuNzA3IDEuNzA3IDAgMDAwLTIuNDE0bC0yLjE0Ni0yLjE0N3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQWdncmVnYXRlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BbGVydCA9IGZ1bmN0aW9uIEV1aUljb25BbGVydChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk03LjU5IDEwLjA1OUw3LjM1IDUuMThoMS4zTDguNCAxMC4wNmgtLjgxem0uMzk0IDEuOTAxYS42MS42MSAwIDAxLS40NDgtLjE4Ni42MDYuNjA2IDAgMDEtLjE4Ni0uNDQ0YzAtLjE3NC4wNjItLjMyMy4xODYtLjQ0NmEuNjE0LjYxNCAwIDAxLjQ0OC0uMTg0Yy4xNjkgMCAuMzE1LjA2LjQ0LjE4Mi4xMjQuMTIyLjE4Ni4yNy4xODYuNDQ4YS42LjYgMCAwMS0uMTg5LjQ0Ni42MDcuNjA3IDAgMDEtLjQzNy4xODR6TTIgMTRhMSAxIDAgMDEtLjg3OC0xLjQ3OWw2LTExYTEgMSAwIDAxMS43NTYgMGw2IDExQTEgMSAwIDAxMTQgMTRIMnptMC0xaDEyTDggMiAyIDEzelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BbGVydDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQW5hbHl6ZUV2ZW50ID0gZnVuY3Rpb24gRXVpSWNvbkFuYWx5emVFdmVudChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOCA5LjE2OUwyIDUuMjV2Ni4xN2w2IDMuNDI4IDYtMy40MjhWNS4yNUw4IDkuMTd6TTE1IDR2OGwtNyA0LTctNFY0bDctNCA3IDR6bS0xLjQyOC4zMzZMOCAxLjE1MiAyLjQyOCA0LjMzNiA4IDcuOTc0bDUuNTcyLTMuNjM4elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BbmFseXplRXZlbnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFuYWx5emVFdmVudCA9IGZ1bmN0aW9uIEV1aUljb25BbmFseXplRXZlbnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE0LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTMuOTI0IDQuMDEzYS42MDUuNjA1IDAgMDAtLjIyOC0uMjM2TDcuMzA0LjA4MmEuNjA3LjYwNyAwIDAwLS42MDggMEwuMzA0IDMuNzc3QS42Mi42MiAwIDAwMCA0LjMwNHY3LjM5MmMwIC4yMTcuMTE2LjQxOC4zMDQuNTI3bDYuMzkyIDMuNjk1Yy4xODguMTEuNDIuMTEuNjA4IDBsNi4zOTItMy42OTVhLjYwOS42MDkgMCAwMC4zMDQtLjUyN1Y0LjMwNGEuNjA3LjYwNyAwIDAwLS4wNzYtLjI5MXpNMSA1LjA3OXY2LjM5MWw2IDMuNDcgNi0zLjQ3VjUuMDhMNy4yNTIgOC40MzIgNyA4LjU3OWwtLjI1Mi0uMTQ3TDEgNS4wNzl6bTExLjQ3Ni0uODUyTDcgMS4wNiAxLjUyNCA0LjIyNyA3IDcuNDJsNS40NzYtMy4xOTR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFuYWx5emVFdmVudDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQW5ub3RhdGlvbiA9IGZ1bmN0aW9uIEV1aUljb25Bbm5vdGF0aW9uKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMyA2LjVhNC41IDQuNSAwIDExNSA0LjQ3M1YxNkg3di01LjAyN0E0LjUgNC41IDAgMDEzIDYuNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQW5ub3RhdGlvbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBtVHJhY2UgPSBmdW5jdGlvbiBFdWlJY29uQXBtVHJhY2UoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yIDBoMTJhMiAyIDAgMDEyIDJ2MTJhMiAyIDAgMDEtMiAySDJhMiAyIDAgMDEtMi0yVjJhMiAyIDAgMDEyLTJ6bTAgMWExIDEgMCAwMC0xIDF2MTJhMSAxIDAgMDAxIDFoMTJhMSAxIDAgMDAxLTFWMmExIDEgMCAwMC0xLTFIMnptLjUgMmgxMGEuNS41IDAgMTEwIDFoLTEwYS41LjUgMCAwMTAtMXptMSAzaDZhLjUuNSAwIDAxMCAxaC02YS41LjUgMCAwMTAtMXptMiAzaDRhLjUuNSAwIDAxMCAxaC00YS41LjUgMCAwMTAtMXptMyAzaDVhLjUuNSAwIDExMCAxaC01YS41LjUgMCAxMTAtMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBtVHJhY2U7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcEFkZERhdGEgPSBmdW5jdGlvbiBFdWlJY29uQXBwQWRkRGF0YShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMyIDMwSDBWM2gxMi41N2wzIDVIMzJ2MjJ6TTIgMjhoMjhWMTBIMTQuNDNsLTMtNUgydjIzelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0yMSAxOGgtNHYtNGgtMnY0aC00djJoNHY0aDJ2LTRoNHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwQWRkRGF0YTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwQWR2YW5jZWRTZXR0aW5ncyA9IGZ1bmN0aW9uIEV1aUljb25BcHBBZHZhbmNlZFNldHRpbmdzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0yLjkwOSAyNi4xODJoMS45Mzl2NC44NDhIMi45MDl6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00Ljg0OCAxNi42MlYwSDIuOTF2MTYuNjJhMy44NzkgMy44NzkgMCAxMDEuOTQgMHptLS45NyA1LjY4M2ExLjk0IDEuOTQgMCAxMTAtMy44NzkgMS45NCAxLjk0IDAgMDEwIDMuODc5elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0xNC41NDUgMTYuNDg1aDEuOTM5VjMxLjAzaC0xLjkzOXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2LjQ4NSA2LjkyNFYwaC0xLjk0djYuOTI0YTMuODc5IDMuODc5IDAgMTAxLjk0IDB6bS0uOTcgNS42ODJhMS45NCAxLjk0IDAgMTEwLTMuODc5IDEuOTQgMS45NCAwIDAxMCAzLjg4elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0yNi4xODIgMjYuMTgyaDEuOTM5djQuODQ4aC0xLjkzOXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI4LjEyMSAxNi42MlYwaC0xLjk0djE2LjYyYTMuODc5IDMuODc5IDAgMTAxLjk0IDB6bS0uOTcgNS42ODNhMS45NCAxLjk0IDAgMTEwLTMuODc5IDEuOTQgMS45NCAwIDAxMCAzLjg3OXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwQWR2YW5jZWRTZXR0aW5nczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwQWdlbnQgPSBmdW5jdGlvbiBFdWlJY29uQXBwQWdlbnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTIxIDIuODJMMTYgLjAzOCAxMSAyLjgydjIuMjg5bDUtMi43ODIgNSAyLjc4MnYtMi4yOXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMjEgNy4yODJMMTYgNC41bC01IDIuNzgyVjkuNTdsNS0yLjc4MSA1IDIuNzgxVjcuMjgyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNyA1LjA0NUwyIDcuODI3djE1LjU3N2wxNCA3Ljc4OCAxNC03Ljc4OFY3LjgyN2wtNS0yLjc4MnYyLjI4OWwzIDEuNjY5djEzLjIyNWwtMTIgNi42NzYtMTItNi42NzZWOS4wMDNsMy0xLjY2OVY1LjA0NXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0yMiAxMi41TDE2IDlsLTYgMy41djdsNiAzLjUgNi0zLjV2LTd6bS05Ljk3NCAxLjIwNUwxNiAxMS4zODdsMy45NzQgMi4zMTh2NC41OUwxNiAyMC42MTNsLTMuOTc0LTIuMzE4di00LjU5elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBBZ2VudDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwQXBtID0gZnVuY3Rpb24gRXVpSWNvbkFwcEFwbShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMgMTBoNHYySDFWMWgzMHY2aC0yVjNIM3Y3em0yNiAxOXYtNmgydjhIMTh2LThoMnY2aDl6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTMxIDEwSDl2MTFoMTJjNS41MjMgMCAxMC00LjQ3NyAxMC0xMHYtMXptLTEwIDlIMTF2LTdoMTcuOTM4QTguMDAxIDguMDAxIDAgMDEyMSAxOXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwQXBtOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBBcHBTZWFyY2ggPSBmdW5jdGlvbiBFdWlJY29uQXBwQXBwU2VhcmNoKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTE1LjUgMTEuOTE1TDI3IDUuMjc5IDE5LjUuOTM4YTcuMDAyIDcuMDAyIDAgMDAtNyAwbC04IDQuNjJBNyA3IDAgMDAxIDExLjYydjkuMjM3YTcgNyAwIDAwMy41IDYuMDYxbDcuNSA0LjMzVjE3Ljk4YTcgNyAwIDAxMy41LTYuMDYzek0xMCAyNy43ODV2LTkuODA4YTkgOSAwIDAxNC41LTcuNzkzbDguNTAzLTQuOTFMMTguNSAyLjY3MmE1LjAwMyA1LjAwMyAwIDAwLTUgMGwtOCA0LjYxOUE1IDUgMCAwMDMgMTEuNjJ2OS4yMzhhNSA1IDAgMDAyLjUgNC4zM2w0LjUgMi41OTh6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0xOC40MDkgMTMuNTVhNy4wODkgNy4wODkgMCAwMTEuMDM1IDEuNzExQTYuOTMgNi45MyAwIDAxMjAgMTcuOTh2MTMuMjdsNy41LTQuMzNhNyA3IDAgMDAzLjUtNi4wNjF2LTkuMjM5YTYuOTkyIDYuOTkyIDAgMDAtMS41ODctNC40MjFMMTguNDA5IDEzLjU1em0yLjc3Ny43MDVBOC45MzMgOC45MzMgMCAwMTIyIDE3Ljk3OXY5LjgwN2w0LjUtMi41OThhNSA1IDAgMDAyLjUtNC4zM1YxMS42MmMwLS41ODgtLjEwNi0xLjE2MS0uMzAzLTEuN2wtNy41MTEgNC4zMzV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcEFwcFNlYXJjaDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwQXVkaXRiZWF0ID0gZnVuY3Rpb24gRXVpSWNvbkFwcEF1ZGl0YmVhdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMTUgMGgydjMyaC0yelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMCAzMmgxM3YtMkgyVjJoMTFWMEgwek0xOSAwdjJoMTF2MjhIMTl2MmgxM1YwelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBBdWRpdGJlYXQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcENhbnZhcyA9IGZ1bmN0aW9uIEV1aUljb25BcHBDYW52YXMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTcgMTdoMnY3SDd6TTEyIDE0aDJ2MTBoLTJ6TTE3IDE2aDJ2OGgtMnpNMjIgMTRoM3YyaC0zek0yMiAxOGgzdjJoLTN6TTIyIDIyaDN2MmgtM3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMwLjczIDI0YTYuNDcgNi40NyAwIDAxLjQ1LTIuMTljLjMzNy0uOS41Mi0xLjg1LjU0LTIuODFhOC41NSA4LjU1IDAgMDAtLjU0LTIuODEgNi40NyA2LjQ3IDAgMDEtLjQ1LTIuMTkgOS4yIDkuMiAwIDAxLjYyLTIuNDljLjUzLTEuNTcgMS4wOC0zLjE5LjA4LTQuMi0xLTEuMDEtMi40MS0uNDQtMy41Mi4wNWE1LjU5IDUuNTkgMCAwMS0yLjA5LjY0IDUuMyA1LjMgMCAwMS0uNTkgMEwxNiAuMjggNi43NyA4YTUuMyA1LjMgMCAwMS0uNTkgMCA1LjU5IDUuNTkgMCAwMS0yLjA5LS42NUMzIDYuODcgMS42IDYuMjUuNTcgNy4zMWMtMS4wMyAxLjA2LS40NSAyLjYzLjA4IDQuMkE5LjIgOS4yIDAgMDExLjI3IDE0YTYuNDcgNi40NyAwIDAxLS40NSAyLjE5QTguNTUgOC41NSAwIDAwLjI4IDE5Yy4wMi45Ni4yMDMgMS45MS41NCAyLjgxQTYuNDcgNi40NyAwIDAxMS4yNyAyNGE5LjIgOS4yIDAgMDEtLjYyIDIuNDljLS41MyAxLjU3LTEuMDggMy4xOS0uMDggNC4yLjM1My4zOC44NTIuNTkgMS4zNy41OGE1LjY3IDUuNjcgMCAwMDIuMTUtLjYzQTUuNTkgNS41OSAwIDAxNi4xOCAzMGE3LjEzIDcuMTMgMCAwMTIuMjkuNDcgOCA4IDAgMDAyLjYyLjUzIDcuMzcgNy4zNyAwIDAwMi40Ny0uNTFBNy4xNCA3LjE0IDAgMDExNiAzMGE2LjI0IDYuMjQgMCAwMTIuMTQuNDUgOCA4IDAgMDAyLjc3LjU1IDguMDggOC4wOCAwIDAwMi43Ny0uNTUgNi4yNCA2LjI0IDAgMDEyLjE0LS40NSA1LjU5IDUuNTkgMCAwMTIuMDkuNjVjMS4xMS40OSAyLjQ5IDEuMTEgMy41Mi4wNSAxLjAzLTEuMDYuNDUtMi42My0uMDgtNC4yYTkuMiA5LjIgMCAwMS0uNjItMi41ek0yMS4xNyA3aC0uMjZhOCA4IDAgMDAtMi43Ny41NUE2LjI0IDYuMjQgMCAwMTE2IDhhNi4yNCA2LjI0IDAgMDEtMi4xNC0uNDVBOCA4IDAgMDAxMS4wOSA3aC0uMjZMMTYgMi43MiAyMS4xNyA3em04Ljg5IDIyLjI3YTQuNDIgNC40MiAwIDAxLTEuMzQtLjQ2IDcuMDggNy4wOCAwIDAwLTIuOS0uODIgOC4xNCA4LjE0IDAgMDAtMi43OC41NSA2LjEzIDYuMTMgMCAwMS0yLjEzLjQ1IDYuMjQgNi4yNCAwIDAxLTIuMTQtLjQ1QTggOCAwIDAwMTYgMjhhOSA5IDAgMDAtMy4wOC42IDUuNzQgNS43NCAwIDAxLTEuODMuNCA2LjM2IDYuMzYgMCAwMS0yLS40M0E4LjcyIDguNzIgMCAwMDYuMTggMjhhNy4wOCA3LjA4IDAgMDAtMi45LjgyIDkuNjUgOS42NSAwIDAxLTEuMjguNTIgNi4wOCA2LjA4IDAgMDEuNTItMi4yMWMuNDAzLTEgLjY1LTIuMDU1LjczLTMuMTNhOC41NSA4LjU1IDAgMDAtLjU0LTIuODFBNi40NyA2LjQ3IDAgMDEyLjI3IDE5YTYuNDcgNi40NyAwIDAxLjQ0LTIuMTljLjMzNy0uOS41Mi0xLjg1LjU0LTIuODFhMTAuNDggMTAuNDggMCAwMC0uNzItMy4xMyA5IDkgMCAwMS0uNTktMi4xNkgyYy40NDcuMS44OC4yNTUgMS4yOS40NmE3LjA4IDcuMDggMCAwMDIuOS44MkE4LjE0IDguMTQgMCAwMDkgOS40NCA2LjEzIDYuMTMgMCAwMTExLjA5IDlhNi4xMyA2LjEzIDAgMDEyLjEzLjQ1QTguMTQgOC4xNCAwIDAwMTYgMTBhOC4xNCA4LjE0IDAgMDAyLjc4LS41NUE2LjEzIDYuMTMgMCAwMTIwLjkxIDlhNi4xMyA2LjEzIDAgMDEyLjA5LjQ0IDguMTQgOC4xNCAwIDAwMi43OC41NSA3LjA4IDcuMDggMCAwMDIuOS0uODJBOS42NSA5LjY1IDAgMDEzMCA4LjY2YTYuMDggNi4wOCAwIDAxLS41MiAyLjIxYy0uNDAzIDEtLjY1IDIuMDU1LS43MyAzLjEzLjAyLjk2LjIwMyAxLjkxLjU0IDIuODFhNi40NyA2LjQ3IDAgMDEuNDQgMi4xOSA2LjQ3IDYuNDcgMCAwMS0uNDQgMi4xOSA4LjU1IDguNTUgMCAwMC0uNTQgMi44MWMuMDc4IDEuMDc0LjMyIDIuMTMuNzIgMy4xM2E5IDkgMCAwMS41OSAyLjE2di0uMDJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcENhbnZhczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwQ2FzZXMgPSBmdW5jdGlvbiBFdWlJY29uQXBwQ2FzZXMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMjIuNSAyNGE1LjUgNS41IDAgMTAwLTExIDUuNSA1LjUgMCAwMDAgMTF6bTAgMmE3LjUgNy41IDAgMTAwLTE1IDcuNSA3LjUgMCAwMDAgMTV6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zMC4yOTMgMjcuNzA3bC00LTQgMS40MTQtMS40MTQgNCA0LTEuNDE0IDEuNDE0ek02IDRIMnYyN2gyNXYtM2gtMnYxSDRWNmgyVjR6bTE5IDZoMlY0aC00djJoMnY0elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTE2LjM4MSAzLjAyNGwuNTM4IDEuMTU4aDIuMjc0bC42MzYgMi41NDVIOS42OGwuNjM3LTIuNTQ1aDIuNTU4bC41MzgtMS4xNThjLjI5Mi0uNjMuOTU1LTEuMDI0IDEuNDg0LTEuMDI0LjUzIDAgMS4xOTMuMzk0IDEuNDg1IDEuMDI0em02LjAxIDUuNzAzbC0xLjYzNi02LjU0NWgtMi41NkMxNy42Ljg5OCAxNi4yNjIgMCAxNC44OTcgMGMtMS4zNjQgMC0yLjcwMy44OTgtMy4yOTkgMi4xODJIOC43NTVMNy4xMTggOC43MjdoMTUuMjczek03IDE1aDZ2LTJIN3Yyem02IDVIN3YtMmg2djJ6bS02IDVoNnYtMkg3djJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcENhc2VzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBDb2RlID0gZnVuY3Rpb24gRXVpSWNvbkFwcENvZGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMS4yNzYgMjlsLjU5NCAySDBsNy42MjEtMTQuMjkuODExIDIuNzNMMy4zMzMgMjloNy45NDN6TTI4LjkyIDMxbC00Ljk4Ny0xNi41OThBMTYgMTYgMCAwMDguNjg4IDNsMS44IDZIOC40TDYgMWgyLjYwN2ExOCAxOCAwIDAxMTcuMjQxIDEyLjgyOEwzMSAzMWgtMi4wOHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMTIuMDM3IDE0LjAyTDE2LjQ5MiAyOWg2LjgyN2wtMi4zMzMtNy44NDlhMTAgMTAgMCAwMC04Ljk0OS03LjEzek05LjM1IDEyaDIuMDVhMTIgMTIgMCAwMTExLjUwMyA4LjU4MUwyNiAzMUgxNUw5LjM1IDEyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBDb2RlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBDb25zb2xlID0gZnVuY3Rpb24gRXVpSWNvbkFwcENvbnNvbGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yOSA5SDNhMyAzIDAgMDEtMy0zVjNhMyAzIDAgMDEzLTNoMjZhMyAzIDAgMDEzIDN2M2EzIDMgMCAwMS0zIDN6TTMgMmExIDEgMCAwMC0xIDF2M2ExIDEgMCAwMDEgMWgyNmExIDEgMCAwMDEtMVYzYTEgMSAwIDAwLTEtMUgzelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0yOSAzMkgzYTMgMyAwIDAxLTMtM1YxNGEzIDMgMCAwMTMtM2gyNmEzIDMgMCAwMTMgM3YxNWEzIDMgMCAwMS0zIDN6TTMgMTNhMSAxIDAgMDAtMSAxdjE1YTEgMSAwIDAwMSAxaDI2YTEgMSAwIDAwMS0xVjE0YTEgMSAwIDAwLTEtMUgzelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNy4yOSAxNy43MWwzLjMgMy4yOS0zLjMgMy4yOSAxLjQyIDEuNDIgNC43LTQuNzEtNC43LTQuNzF6TTE1IDI0aDl2MmgtOXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwQ29uc29sZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwQ3Jvc3NDbHVzdGVyUmVwbGljYXRpb24gPSBmdW5jdGlvbiBFdWlJY29uQXBwQ3Jvc3NDbHVzdGVyUmVwbGljYXRpb24oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0wIDB2MTZoOC43bDUuMy02VjBIMHptMiAyaDEwdjdIN3Y1SDJWMnptOC40NSA5TDkgMTIuNjRWMTFoMS40NXpNMTggMTZ2MTZoOC43bDUuMy02VjE2SDE4em0yIDJoMTB2N2gtNXY1aC01VjE4em04LjQ1IDlMMjcgMjguNjRWMjdoMS40NXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNNSAxOEgzYzAgNi4wNzUgNC45MjUgMTEgMTEgMTFoMnYtMmgtMmE5IDkgMCAwMS05LTl6TTE4IDNoLTJ2MmgyYTkgOSAwIDAxOSA5aDJjMC02LjA3NS00LjkyNS0xMS0xMS0xMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwQ3Jvc3NDbHVzdGVyUmVwbGljYXRpb247IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcERhc2hib2FyZCA9IGZ1bmN0aW9uIEV1aUljb25BcHBEYXNoYm9hcmQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yOSA5SDNhMyAzIDAgMDEtMy0zVjNhMyAzIDAgMDEzLTNoMjZhMyAzIDAgMDEzIDN2M2EzIDMgMCAwMS0zIDN6TTMgMmExIDEgMCAwMC0xIDF2M2ExIDEgMCAwMDEgMWgyNmExIDEgMCAwMDEtMVYzYTEgMSAwIDAwLTEtMUgzelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0xMiAyMEgzYTMgMyAwIDAxLTMtM3YtM2EzIDMgMCAwMTMtM2g5YTMgMyAwIDAxMyAzdjNhMyAzIDAgMDEtMyAzem0tOS03YTEgMSAwIDAwLTEgMXYzYTEgMSAwIDAwMSAxaDlhMSAxIDAgMDAxLTF2LTNhMSAxIDAgMDAtMS0xSDN6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMiAzMUgzYTMgMyAwIDAxLTMtM3YtM2EzIDMgMCAwMTMtM2g5YTMgMyAwIDAxMyAzdjNhMyAzIDAgMDEtMyAzem0tOS03YTEgMSAwIDAwLTEgMXYzYTEgMSAwIDAwMSAxaDlhMSAxIDAgMDAxLTF2LTNhMSAxIDAgMDAtMS0xSDN6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTI5IDMxaC05YTMgMyAwIDAxLTMtM1YxNGEzIDMgMCAwMTMtM2g5YTMgMyAwIDAxMyAzdjE0YTMgMyAwIDAxLTMgM3ptLTktMThhMSAxIDAgMDAtMSAxdjE0YTEgMSAwIDAwMSAxaDlhMSAxIDAgMDAxLTFWMTRhMSAxIDAgMDAtMS0xaC05elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBEYXNoYm9hcmQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcERldnRvb2xzID0gZnVuY3Rpb24gRXVpSWNvbkFwcERldnRvb2xzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjEgMjhoLTJ2LTguNDlsLjYtLjI2QTkgOSAwIDAwMjEgMy41MlYxMUgxMVYzLjUyYTkgOSAwIDAwMS40IDE1LjczbC42LjI2VjI4aC0ydi03LjIxQTExIDExIDAgMDExMS42LjkyTDEzIC4zMVY5aDZWLjMxbDEuNC42MWExMSAxMSAwIDAxLjYgMTkuODdWMjh6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTExIDMwaDEwdjJIMTF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcERldnRvb2xzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBEaXNjb3ZlciA9IGZ1bmN0aW9uIEV1aUljb25BcHBEaXNjb3ZlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNOC4zMyAyMy42N2w0Ljc5LTEwLjU1IDEwLjU1LTQuNzktNC43OSAxMC41NS0xMC41NSA0Ljc5em02LjMtOWwtMi4yOCA1IDUtMi4yOCAyLjI4LTUtNSAyLjI4elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYgMEM3LjE2MyAwIDAgNy4xNjMgMCAxNnM3LjE2MyAxNiAxNiAxNiAxNi03LjE2MyAxNi0xNkExNiAxNiAwIDAwMTYgMHptMSAyOS45NVYyOGgtMnYxLjk1QTE0IDE0IDAgMDEyLjA1IDE3SDR2LTJIMi4wNUExNCAxNCAwIDAxMTUgMi4wNVY0aDJWMi4wNUExNCAxNCAwIDAxMjkuOTUgMTVIMjh2MmgxLjk1QTE0IDE0IDAgMDExNyAyOS45NXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwRGlzY292ZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcEVtcyA9IGZ1bmN0aW9uIEV1aUljb25BcHBFbXMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTMgMjJoM3YySDFWMWgyM3Y1aC0yVjNIM3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE1LjIyOCAyOWMxLjQ5Mi0xLjY3OCAxLjM1My0yLjg1OS4wMDktNS42NTQtLjA0OS0uMS0uMDQ5LS4xLS4wOTctLjIwMy0xLjM2OS0yLjg1NS0xLjYyNi00LjQ5MS0uMzI1LTYuNTgyIDIuNzk2LTQuNDk4IDkuNTE0LTIuNjQyIDE0LjE4NSAyLjMxN1YxMEgxMHYxOWg1LjIyOHptMi40NyAwSDI5di02Ljk4M2MtMy44OC01LjQwNi0xMC4zNzYtNy43OTUtMTIuNDg3LTQuNC0uODMgMS4zMzYtLjY2OSAyLjM3LjQzIDQuNjYybC4wOTcuMmMxLjM1MiAyLjgxNCAxLjczMSA0LjYzLjY1OSA2LjUyMXpNMzEgOHYyM0g4VjhoMjN6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcEVtczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwRmlsZWJlYXQgPSBmdW5jdGlvbiBFdWlJY29uQXBwRmlsZWJlYXQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTggMThoMTZ2Mkg4ek04IDEzaDl2Mkg4ek04IDIzaDE2djJIOHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIxLjQxIDBINWEzIDMgMCAwMC0zIDN2MjZhMyAzIDAgMDAzIDNoMjJhMyAzIDAgMDAzLTNWOC41OUwyMS40MSAwek0yMiAzLjQxTDI2LjU5IDhIMjJWMy40MXpNMjcgMzBINWExIDEgMCAwMS0xLTFWM2ExIDEgMCAwMTEtMWgxNXY4aDh2MTlhMSAxIDAgMDEtMSAxelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBGaWxlYmVhdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwRmxlZXQgPSBmdW5jdGlvbiBFdWlJY29uQXBwRmxlZXQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yLjk5NiAxOC42MzZMMCAyMC40MzR2Ni4xMzJsNiAzLjYgNS0zIDUgMyA1LTMgNSAzIDYtMy42di02LjEzMmwtNS0zdi01bC01LTN2LTVsLTYtMy42LTYgMy42djIuODMybDIgLjAzM1Y1LjU2Nmw0LTIuNCA0IDIuNHYzLjg2OGwtMS45OTYgMS4xOTcgMSAxLjczM0wyMSAxMS4xNjZsNCAyLjR2My44NjhsLTQgMi40LTIuMjU3LTEuMzU0LS45NzEgMS43NUwyMCAyMS41NjV2My44NjhsLTQgMi40LTQtMi40di0xLjdsLTItLjAzM3YxLjczM2wtNCAyLjQtNC0yLjR2LTMuODY4bDEuOTk2LTEuMTk3LTEtMS43MzN6TTIyIDI1LjQzNHYtMy44NjhsNC0yLjQgNCAyLjR2My44NjhsLTQgMi40LTQtMi40elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0xMSAyMi4xNjZsLTYtMy42di02LjEzMmw2LTMuNiA2IDMuNnY2LjEzMmwtNiAzLjZ6bTQtNC43MzJ2LTMuODY4bC00LTIuNC00IDIuNHYzLjg2OGw0IDIuNCA0LTIuNHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwRmxlZXQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcEdpcyA9IGZ1bmN0aW9uIEV1aUljb25BcHBHaXMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTI5LjAxNCAyMy44OWwyLjI5NiAxLjE0NUwxNiAzMi4xMDEuNTMgMjQuOTYxbDIuNDktMS4wNTYgMi40NTMgMS4xMzItLjAwMy4wMDJMMTYgMjkuODk5bDEwLjY5LTQuOTM0LS4wMDMtLjAwMSAyLjMyNy0xLjA3NHptLTQuOTcyLTcuNDgybDcuMjY4IDMuNjI3TDE2IDI3LjEwMS41MyAxOS45NjFsNy42NjgtMy4yNTJjLjM5Mi40ODYuODM4IDEuMDIgMS4zNCAxLjYwNEw1LjQ3IDIwLjAzOSAxNiAyNC44OTlsMTAuNjktNC45MzQtMy45NTQtMS45NzNjLjQ5My0uNTguOTI4LTEuMTA3IDEuMzA2LTEuNTg0elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTggOWEyIDIgMCAxMC00IDAgMiAyIDAgMDA0IDB6bTIgMGE0IDQgMCAxMS04IDAgNCA0IDAgMDE4IDB6bS0zLjI2OCAxMi42ODFsLS43MzIuNzg3LS43MzItLjc4N2MtMy41NTctMy44MjQtNS44MTctNi40NjItNi44MS03Ljk2QTguNzQ2IDguNzQ2IDAgMDE3IDguODc1QzcgMy45NyAxMS4wMzMgMCAxNiAwczkgMy45NyA5IDguODc1YTguNzQ2IDguNzQ2IDAgMDEtMS40NTkgNC44NDZjLS45OTIgMS40OTgtMy4yNTIgNC4xMzYtNi44MDkgNy45NnptNS4xNDItOS4wNjRBNi43NDcgNi43NDcgMCAwMDIzIDguODc1QzIzIDUuMDgxIDE5Ljg3IDIgMTYgMlM5IDUuMDgxIDkgOC44NzVjMCAxLjM0OS4zOTQgMi42MzYgMS4xMjYgMy43NDIuODQ2IDEuMjc3IDIuODEyIDMuNTkzIDUuODc0IDYuOTEyIDMuMDYyLTMuMzIgNS4wMjgtNS42MzUgNS44NzQtNi45MTJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcEdpczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwR3JhcGggPSBmdW5jdGlvbiBFdWlJY29uQXBwR3JhcGgoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTI0IDIwYTQgNCAwIDExMC04IDQgNCAwIDAxMCA4em0wLTZhMiAyIDAgMTAwIDQgMiAyIDAgMDAwLTR6bS04LjItNS42MkE0IDQgMCAxMTE4IDEuMDZhNCA0IDAgMDEtMi4yIDcuMzJ6bTAtNmEyIDIgMCAxMC4wMSAwaC0uMDF6bS4wMSAyOS4yNGE0IDQgMCAxMS0uMDgzLTggNCA0IDAgMDEuMDgzIDh6bTAtNmEyIDIgMCAxMC4zOSAwIDIgMiAwIDAwLS40IDBoLjAxelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTggMTd2LTJoLTYuMTRhNCA0IDAgMDAtLjg2LTEuNjRsMi4zMS0zLjQ0LTEuNjgtMS4xMi0yLjMxIDMuNDRBNCA0IDAgMDA4IDEyYTQgNCAwIDEwMCA4IDQgNCAwIDAwMS4zMi0uMjRsMi4zMSAzLjQ0IDEuNjYtMS4xMkwxMSAxOC42NGE0IDQgMCAwMC44Ni0xLjY0SDE4ek02IDE2YTIgMiAwIDExNCAwIDIgMiAwIDAxLTQgMHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwR3JhcGg7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcEdyb2sgPSBmdW5jdGlvbiBFdWlJY29uQXBwR3JvayhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuNzI3IDIuOTFWLjk3Yy0xLjM1NyAwLTQuMTggMC01LjgxOCAxLjk0LS45NyAxLjE4Mi0xLjMyOCAyLjkwOC0uOTcgNC45ODMuNTYzIDMuMzA3Ljk3IDYuMzMyLjMwMSA3LjE1Ny0uMy4zMS0uOTcuNDY1LTIuMjQuNDY1djEuOTRjMS4yNyAwIDEuOTQuMTU1IDIuMjUuNDk0LjY5OC44MjQuMjYyIDMuODc5LS4zIDcuMTU2LS4zNSAyLjEyNC0uMDEgMy44MDIuOTYgNC45NTZDNS41MjcgMzIgOC4zNSAzMiA5LjcyNiAzMnYtMS45NGMtMS4xNDQgMC0zLjI4NyAwLTQuMzE1LTEuMjIxYTQuMTEyIDQuMTEyIDAgMDEtLjUzMy0zLjQxNGMuODQzLTUuMDQyLjk3LTcuMzctLjEzNi04LjcyNy0uMDY4LS4wNzctLjE0NS0uMTM2LS4yMTMtLjIwMy0uMDY4LS4wNjguMTQ1LS4xMjcuMjEzLS4yMDQgMS4xNDQtMS4zNjcuOTctMy42OTUuMTM2LTguNzI3YTQuMTEyIDQuMTEyIDAgMDEuNTQzLTMuNDE0QzYuNDQgMi45MSA4LjU4MyAyLjkxIDkuNzI3IDIuOTF6TTMyLjAzIDE3LjQ1NHYtMS45NGMtMS4yNyAwLTEuOTQtLjE1NS0yLjI1LS40OTQtLjY5OC0uODI1LS4yNjEtMy44OC4zMDEtNy4xNTcuMzUtMi4xMjMgMC0zLjgwMS0uOTctNC45ODRDMjcuNDkzLjk0IDI0LjY3Mi45NCAyMy4yOTQuOTR2MS45N2MxLjE0NSAwIDMuMjg4IDAgNC4zMTUgMS4yMmE0LjExMiA0LjExMiAwIDAxLjU0NCAzLjQxNGMtLjg0NCA1LjA0My0uOTcgNy4zNy4xMzUgOC43MjguMDY4LjA3Ny4xNDYuMTM1LjIxNC4yMDMuMDY3LjA2OC0uMTQ2LjEyNi0uMjE0LjIwNC0xLjE0NCAxLjM2Ny0uOTcgMy42OTQtLjEzNSA4LjcyNy4zMjkgMS4xNjIuMTMgMi40MS0uNTQ0IDMuNDEzLTEuMDE4IDEuMjQyLTMuMTYgMS4yNDItNC4zMDUgMS4yNDJWMzJjMS4zNTggMCA0LjE4IDAgNS44MTgtMS45NC45Ny0xLjE4MiAxLjMyOS0yLjkwOC45Ny00Ljk4NC0uNTYzLTMuMzA2LS45Ny02LjMzMi0uMy03LjE1Ni4zLS4zMS45NjktLjQ2NSAyLjI0LS40NjV6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTI2LjIxMiAxNS41MTVoLTIuMDA3YTcuNzU4IDcuNzU4IDAgMDAtNi43Mi02LjcyVjYuNzg4aC0xLjk0djIuMDA3YTcuNzU4IDcuNzU4IDAgMDAtNi43MiA2LjcySDYuODE4djEuOTRoMi4wMDdhNy43NTggNy43NTggMCAwMDYuNzIgNi43MnYyLjAwN2gxLjk0di0yLjAwN2E3Ljc1OCA3Ljc1OCAwIDAwNi43Mi02LjcyaDIuMDA3di0xLjk0em0tOC43MjcgNi43di0xLjg1MWgtMS45NHYxLjg1MmE1LjgxOCA1LjgxOCAwIDAxLTQuNzYtNC43NjFoMS44NTF2LTEuOTRoLTEuODUyYTUuODE4IDUuODE4IDAgMDE0Ljc2MS00Ljc2MXYxLjg1MmgxLjk0di0xLjg1MmE1LjgxOCA1LjgxOCAwIDAxNC43NjEgNC43NjFoLTEuODUydjEuOTRoMS44NTJhNS44MTggNS44MTggMCAwMS00Ljc2MSA0Ljc2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBHcm9rOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBIZWFydGJlYXQgPSBmdW5jdGlvbiBFdWlJY29uQXBwSGVhcnRiZWF0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk00LjE0IDE1LjM5YTguMDU4IDguMDU4IDAgMDEtMi4yLTQuMDQzQTYuNzg4IDYuNzg4IDAgMDE0LjE5OCA1LjQ3YTYuNzMgNi43MyAwIDAxOC43MjctLjIxM2wxLjI2LTEuNDY0YTguNjUgOC42NSAwIDAwLTExLjI3Ny4yMzJBOC43MjcgOC43MjcgMCAwMC4wNjggMTEuNmExMC4xNzIgMTAuMTcyIDAgMDAyLjc5MyA1LjI3NWwxLjI4LTEuNDg0elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTUuNTE1IDMxLjI3NEw0LjU0OCAxOC40NTQgMTUuODU1IDQuNzYzYTguNjcgOC42NyAwIDAxMTIuMjY2LS43NDYgOC43MjcgOC43MjcgMCAwMTIuOTEgNy4yMDVjLS4yNDMgMi42OTUtMi4wMzcgNC43MzItMy40ODIgNi4zN0wxNS41MTUgMzEuMjc1em0tOC40MjctMTIuODJsOC40MjcgOS44NjIgMTAuNTUtMTEuOTk1YzEuMzItMS41MDMgMi44MjItMy4yMSAzLjAwNy01LjI2NWE2Ljc4OCA2Ljc4OCAwIDAwLTIuMjQtNS41ODYgNi43MyA2LjczIDAgMDAtOS41MDQuNTYzTDcuMDg4IDE4LjQ1NXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwSGVhcnRiZWF0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBJbmRleE1hbmFnZW1lbnQgPSBmdW5jdGlvbiBFdWlJY29uQXBwSW5kZXhNYW5hZ2VtZW50KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTcgMTh2LTJoLTJ2MkgzdjZoMnYtNGgxMHY0aDJ2LTRoMTB2NGgydi02elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk00IDMyYTMgMyAwIDExMC02IDMgMyAwIDAxMCA2em0wLTRhMSAxIDAgMTAwIDIgMSAxIDAgMDAwLTJ6bTEyIDRhMyAzIDAgMTEwLTYgMyAzIDAgMDEwIDZ6bTAtNGExIDEgMCAxMDAgMiAxIDEgMCAwMDAtMnptMTIgNGEzIDMgMCAxMTAtNiAzIDMgMCAwMTAgNnptMC00YTEgMSAwIDEwMCAyIDEgMSAwIDAwMC0yek0yMyA4VjZoLTIuMWE1IDUgMCAwMC0uNzMtMS43NWwxLjQ5LTEuNDktMS40Mi0xLjQyLTEuNDkgMS40OUE1IDUgMCAwMDE3IDIuMVYwaC0ydjIuMWE1IDUgMCAwMC0xLjc1LjczbC0xLjQ5LTEuNDktMS40MiAxLjQyIDEuNDkgMS40OUE1IDUgMCAwMDExLjEgNkg5djJoMi4xYTUgNSAwIDAwLjczIDEuNzVsLTEuNDkgMS40OSAxLjQxIDEuNDEgMS40OS0xLjQ5YTUgNSAwIDAwMS43Ni43NFYxNGgydi0yLjFhNSA1IDAgMDAxLjc1LS43M2wxLjQ5IDEuNDkgMS40MS0xLjQxLTEuNDgtMS41QTUgNSAwIDAwMjAuOSA4SDIzem0tNyAyYTMgMyAwIDExMC02IDMgMyAwIDAxMCA2elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYgOGExIDEgMCAwMS0xLTEgMS4zOSAxLjM5IDAgMDEwLS4yLjY1LjY1IDAgMDEuMDYtLjE4Ljc0Ljc0IDAgMDEuMDktLjE4IDEuNjEgMS42MSAwIDAxLjEyLS4xNS45My45MyAwIDAxLjMzLS4yMSAxIDEgMCAwMTEuMDkuMjFsLjEyLjE1YS43OC43OCAwIDAxLjA5LjE4LjYyLjYyIDAgMDEuMS4xOCAxLjI3IDEuMjcgMCAwMTAgLjIgMSAxIDAgMDEtMSAxelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBJbmRleE1hbmFnZW1lbnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcEluZGV4UGF0dGVybiA9IGZ1bmN0aW9uIEV1aUljb25BcHBJbmRleFBhdHRlcm4oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMCAxNGgtOGEzIDMgMCAwMS0zLTNWM2EzIDMgMCAwMTMtM2g4YTMgMyAwIDAxMyAzdjhhMyAzIDAgMDEtMyAzek0xMiAyYTEgMSAwIDAwLTEgMXY4YTEgMSAwIDAwMSAxaDhhMSAxIDAgMDAxLTFWM2ExIDEgMCAwMC0xLTFoLTh6TTE3IDE4di0yaC0ydjJIM3Y2aDJ2LTRoMTB2NGgydi00aDEwdjRoMnYtNnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNNCAzMmEzIDMgMCAxMTAtNiAzIDMgMCAwMTAgNnptMC00YTEgMSAwIDEwMCAyIDEgMSAwIDAwMC0yem0xMiA0YTMgMyAwIDExMC02IDMgMyAwIDAxMCA2em0wLTRhMSAxIDAgMTAwIDIgMSAxIDAgMDAwLTJ6bTEyIDRhMyAzIDAgMTEwLTYgMyAzIDAgMDEwIDZ6bTAtNGExIDEgMCAxMDAgMiAxIDEgMCAwMDAtMnpNMTMgNGg2djJoLTZ6TTEzIDhoNnYyaC02elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBJbmRleFBhdHRlcm47IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcEluZGV4Um9sbHVwID0gZnVuY3Rpb24gRXVpSWNvbkFwcEluZGV4Um9sbHVwKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMzIgMjZ2LTJoLTIuMWE1IDUgMCAwMC0uNzMtMS43NWwxLjQ5LTEuNDktMS40MS0xLjQxLTEuNDkgMS40OUE1IDUgMCAwMDI2IDIwLjFWMThoLTJ2Mi4xYTUgNSAwIDAwLTEuNzUuNzNsLTEuNDktMS40OS0xLjQxIDEuNDEgMS40OSAxLjQ5QTUgNSAwIDAwMjAuMSAyNEgxOHYyaDIuMWE1IDUgMCAwMC43MyAxLjc1bC0xLjQ5IDEuNDkgMS40MSAxLjQxIDEuNDktMS40OWE1IDUgMCAwMDEuNzYuNzRWMzJoMnYtMi4xYTUgNSAwIDAwMS43NS0uNzNsMS40OSAxLjQ5IDEuNDEtMS40MS0xLjQ5LTEuNDlBNSA1IDAgMDAyOS45IDI2SDMyem0tNyAyYTMgMyAwIDExMC02IDMgMyAwIDAxMCA2elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjUuNzEgMjQuMjlhMSAxIDAgMDAtMS4wOS0uMjEgMS4xNSAxLjE1IDAgMDAtLjMzLjIxLjkzLjkzIDAgMDAtLjIxLjMzIDEgMSAwIDAwMS4zIDEuMyAxLjE1IDEuMTUgMCAwMC4zMy0uMjEgMSAxIDAgMDAuMjEtMS4wOS45NC45NCAwIDAwLS4yMS0uMzN6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTUgNmgxNnYySDV6TTUgMTJoMTZ2Mkg1ek01IDE4aDEwdjJINXpNNSAyNGg4djJINXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDMySDNhMyAzIDAgMDEtMy0zVjNhMyAzIDAgMDEzLTNoMjBhMyAzIDAgMDEzIDN2MTNoLTJWM2ExIDEgMCAwMC0xLTFIM2ExIDEgMCAwMC0xIDF2MjZhMSAxIDAgMDAxIDFoMTN2MnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwSW5kZXhSb2xsdXA7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcExlbnMgPSBmdW5jdGlvbiBFdWlJY29uQXBwTGVucyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMjMuNzkzIDE0LjI5M2wxLjQxNCAxLjQxNC02LjQwOCA2LjQwOS0zLjc1LTMuMjUtNC4zNDIgNC4zNDEtMS40MTQtMS40MTQgNS42NTgtNS42NTkgMy43NSAzLjI1IDUuMDkyLTUuMDkxek0xMiAxMXY1bC0yIDJ2LTdoMnptMTAtNnY4bC0yIDJWNWgyem0tNSAzdjdsLTItMlY4aDJ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNyAwYzguMjg0IDAgMTUgNi43MTYgMTUgMTUgMCA4LjI4NC02LjcxNiAxNS0xNSAxNS0zLjc4MiAwLTcuMjM4LTEuNC05Ljg3Ni0zLjcxbC01LjQxNyA1LjQxNy0xLjQxNC0xLjQxNCA1LjQxNy01LjQxN0ExNC45NDMgMTQuOTQzIDAgMDEyIDE1YzAtMS4wNS4xMDgtMi4wNzQuMzEzLTMuMDYybDEuOTA2LjY3MkM0LjA3NSAxMy4zODUgNCAxNC4xODQgNCAxNWMwIDcuMTggNS44MiAxMyAxMyAxM3MxMy01LjgyIDEzLTEzUzI0LjE4IDIgMTcgMmMtMS4wMDIgMC0xLjk3OC4xMTMtMi45MTUuMzI4bC0uNzUtMS44NzdBMTUuMDMxIDE1LjAzMSAwIDAxMTcgMHpNOS42MjEgMS45MzdsLjc1IDEuODc3YTEzLjA2MiAxMy4wNjIgMCAwMC00LjgyIDUuMDI0bC0xLjkwNy0uNjczYTE1LjA2OCAxNS4wNjggMCAwMTUuOTc3LTYuMjI4elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBMZW5zOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBMb2dzID0gZnVuY3Rpb24gRXVpSWNvbkFwcExvZ3MoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xIDhjMy45ODMgMCA3LjczMiAxLjAxMyAxMS4wMDEgMi43OTd2Mi4zMTJBMjAuODg3IDIwLjg4NyAwIDAwMiAxMC4wMjN2MTEuMDI1YzQuODUuNDYyIDkuMjcgNC4xODMgOS45NTUgOC42OTFsLjAzNS4yNjFIMTJ2MmgtMS45MzhsLS4wMTgtMS4yMzZjLS4xMTYtNC4wMTUtNC4zMzYtNy42MzEtOC43OTMtNy43NkwwIDIyLjk4NlY4aDF6bTEzLThoMWM5LjI4IDAgMTYuODI1IDcuNDM3IDE2Ljk5NyAxNi42NzdMMzIgMTd2MTVoLTJWMTdjMC03Ljg0LTYuMDE0LTE0LjI3NC0xMy42OC0xNC45NDNMMTYgMi4wMzN2Ny42ODFsLTItMS4xNDNWMGgxLTF6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTI2Ljk5NyAzMC42MzZMMjcuMDA5IDMySDE0VjExLjMwNWwxLjQ4My44MmM2Ljk5NCAzLjg2MSAxMS4zODIgMTAuNzM1IDExLjUxNCAxOC41MXptLTIuMDQ4LTEuMDRDMjQuNTA1IDIzLjU1NiAyMS4yMDUgMTguMiAxNiAxNC43NzFWMzBoOC45NzRsLS4wMjUtLjQwNHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwTG9nczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwTWFuYWdlbWVudCA9IGZ1bmN0aW9uIEV1aUljb25BcHBNYW5hZ2VtZW50KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0xNiAyMWE1IDUgMCAxMTAtMTAgNSA1IDAgMDEwIDEwem0wLThhMyAzIDAgMTAwIDYgMyAzIDAgMDAwLTZ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMCAzMmgtOHYtNC4wNmExIDEgMCAwMC0xLjYxLS42N2wtMi44OCAyLjg3LTUuNjUtNS42NSAyLjg3LTIuODdhLjkyLjkyIDAgMDAuMi0xIC45My45MyAwIDAwLS44Ni0uNkgwVjEyaDQuMDZhLjkyLjkyIDAgMDAuODUtLjU4Ljk0Ljk0IDAgMDAtLjE5LTFMMS44NiA3LjUxbDUuNjUtNS42NSAyLjg3IDIuODdBMSAxIDAgMDAxMiA0LjA2VjBoOHY0LjA2YTEgMSAwIDAwMS42MS42N2wyLjg3LTIuODcgNS42NiA1LjY2LTIuODcgMi44N2EuOTIuOTIgMCAwMC0uMiAxIC45My45MyAwIDAwLjg2LjZIMzJ2OGgtNC4wNmEuOTIuOTIgMCAwMC0uODUuNTguOTQuOTQgMCAwMC4xOSAxbDIuODcgMi44Ny01LjY2IDUuNjYtMi44Ny0yLjg3YTEgMSAwIDAwLTEuNjEuNjdMMjAgMzJ6bS02LTJoNHYtMi4wNmEzIDMgMCAwMTUtMi4wOGwxLjQ2IDEuNDYgMi44My0yLjgzTDI1Ljg2IDIzYTMgMyAwIDAxMi4wOC01SDMwdi00aC0yLjA2YTMgMyAwIDAxLTIuMDgtNWwxLjQ2LTEuNDYtMi44My0yLjg1TDIzIDYuMTRhMyAzIDAgMDEtNS0yLjA4VjJoLTR2Mi4wNmEzIDMgMCAwMS01IDIuMDhMNy41MSA0LjY5IDQuNjkgNy41MSA2LjE0IDlhMyAzIDAgMDEtMi4wOCA1SDJ2NGgyLjA2YTMgMyAwIDAxMi4wOCA1bC0xLjQ1IDEuNDkgMi44MyAyLjgzTDkgMjUuODZhMyAzIDAgMDE1IDIuMDhWMzB6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcE1hbmFnZW1lbnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcE1ldHJpY2JlYXQgPSBmdW5jdGlvbiBFdWlJY29uQXBwTWV0cmljYmVhdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDMyQzcuMTYzIDMyIDAgMjQuODM3IDAgMTZTNy4xNjMgMCAxNiAwczE2IDcuMTYzIDE2IDE2YTE2IDE2IDAgMDEtMTYgMTZ6bTAtMzBDOC4yNjggMiAyIDguMjY4IDIgMTZzNi4yNjggMTQgMTQgMTQgMTQtNi4yNjggMTQtMTRBMTQgMTQgMCAwMDE2IDJ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTI4IDE2aC0yYzAtNS41MjMtNC40NzctMTAtMTAtMTBTNiAxMC40NzcgNiAxNkg0QzQgOS4zNzMgOS4zNzMgNCAxNiA0czEyIDUuMzczIDEyIDEyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjEuNzEgMTEuNzFMMjAuMyAxMC4zIDE4IDEyLjU3YTQgNCAwIDAwLTItLjU3IDQgNCAwIDEwNCA0IDQgNCAwIDAwLS41Ny0ybDIuMjgtMi4yOXpNMTYgMThhMiAyIDAgMTEwLTQgMiAyIDAgMDEwIDR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcE1ldHJpY2JlYXQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcE1ldHJpY3MgPSBmdW5jdGlvbiBFdWlJY29uQXBwTWV0cmljcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMwIDE5LjA5MnYxMi44OEgydi01LjM4Nmw2Ljc0Ny02Ljc0Ny43MDguNzA4Yy4yMzYuMjM2LjQ4LjQ2My43MzMuNjhMNCAyNy40MTR2Mi41NThoMjR2LTguOTFjLjE4Ni0uMTY2LjM2OS0uMzM5LjU0Ni0uNTE2TDMwIDE5LjA5MnptLTIwLjg1LTMuMTlBMTAuOTU1IDEwLjk1NSAwIDAxOCAxMUM4IDQuOTI1IDEyLjkyNSAwIDE5IDBzMTEgNC45MjUgMTEgMTFjMCAxLjc2LS40MTQgMy40MjUtMS4xNSA0LjlsLTEuNTEtMS41MUE4Ljk3MyA4Ljk3MyAwIDAwMjggMTFhOSA5IDAgMTAtMTcuMzQgMy4zOTFsLTEuNTEgMS41MXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMTkgMjBhOC45NiA4Ljk2IDAgMDA1LjYxOC0xLjk2OGwtNC4yMDItNC4yMDRhMiAyIDAgMDAtMi44MjggMGwtNC4yMDUgNC4yMDVBOC45NiA4Ljk2IDAgMDAxOSAyMHptLTIuODI2LTcuNTg2YTQgNCAwIDAxNS42NTYgMGw1LjY1NiA1LjY1Ny0uNzA3LjcwN0ExMC45NjcgMTAuOTY3IDAgMDExOSAyMmExMC45NjcgMTAuOTY3IDAgMDEtNy43NzgtMy4yMjFsLS43MDctLjcwNyA1LjY1OS01LjY1OHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwTWV0cmljczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwTWwgPSBmdW5jdGlvbiBFdWlJY29uQXBwTWwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTEwIDE4di41NmExIDEgMCAwMS0uNjguOTVMMyAyMS42MVYxMGExIDEgMCAwMS40LS44bDMuMi0yLjQtMS4yLTEuNi0zLjIgMi40QTMgMyAwIDAwMSAxMHYxMmEzIDMgMCAwMDEuMiAyLjRsMy4yIDIuNCAxLjItMS42LTIuNDctMS44NSA1LjgyLTEuOTVBMyAzIDAgMDAxMiAxOC41NlYxOGgtMnpNMjkuOCA3LjZsLTMuMi0yLjQtMS4yIDEuNiAzLjIgMi40YTEgMSAwIDAxLjQuOHYxMS42MWwtNi4zMi0yLjExYTEgMSAwIDAxLS42OC0uOTVWMThoLTJ2LjU2YTMgMyAwIDAwMi4wNSAyLjg1bDUuODIgMS45NC0yLjQ3IDEuODUgMS4yIDEuNiAzLjItMi40QTMgMyAwIDAwMzEgMjJWMTBhMyAzIDAgMDAtMS4yLTIuNHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTExIDZBMyAzIDAgMDE4Ljg4Ljg4YTMuMDcgMy4wNyAwIDAxNC4yNCAwQTMgMyAwIDAxMTEgNnptMC00YTEgMSAwIDEwLS4wMTIgMkExIDEgMCAwMDExIDJ6bTAgMzBhMyAzIDAgMDEtMi4xMi01LjEyIDMuMDcgMy4wNyAwIDAxNC4yNCAwQTMgMyAwIDAxMTEgMzJ6bTAtNGExIDEgMCAxMC0uMDEyIDJBMSAxIDAgMDAxMSAyOHptMC0xMmEzIDMgMCAwMS0yLjEyLTUuMTIgMy4wNyAzLjA3IDAgMDE0LjI0IDBBMyAzIDAgMDExMSAxNnptMC00YTEgMSAwIDEwLS4wMTIgMkExIDEgMCAwMDExIDEyem0xMC02QTMgMyAwIDAxMTguODguODhhMy4wNyAzLjA3IDAgMDE0LjI0IDBBMyAzIDAgMDEyMSA2em0wLTRhMSAxIDAgMTAtLjAxMiAyQTEgMSAwIDAwMjEgMnptMCAzMGEzIDMgMCAwMS0yLjEyLTUuMTIgMy4wNyAzLjA3IDAgMDE0LjI0IDBBMyAzIDAgMDEyMSAzMnptMC00YTEgMSAwIDEwLS4wMTIgMkExIDEgMCAwMDIxIDI4em0wLTEyYTMgMyAwIDAxLTIuMTItNS4xMiAzLjA3IDMuMDcgMCAwMTQuMjQgMEEzIDMgMCAwMTIxIDE2em0wLTRhMSAxIDAgMTAtLjAxMiAyQTEgMSAwIDAwMjEgMTJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcE1sOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBNb25pdG9yaW5nID0gZnVuY3Rpb24gRXVpSWNvbkFwcE1vbml0b3JpbmcoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xLjgxIDE1LjE5QTguOTQgOC45NCAwIDAxMTUuNjIgMy44NmwuMzguNDIuMzgtLjQyYTguOTQgOC45NCAwIDAxMTQuMjYgMTAuNjhsLTEuNy0xLjA3YTYuOTQgNi45NCAwIDAwLTExLjA3LTguMjhMMTYgNy4yOWwtMS44Ny0yLjFBNi45NCA2Ljk0IDAgMDAzLjQxIDE0bC0xLjYgMS4xOXpNMTYgMzEuMThsLTcuNzQtOC41MSAxLjQ4LTEuMzRMMTYgMjguMjFsNi4yNi02Ljg4IDEuNDggMS4zNHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMTYuMTYgMjMuMjlsLTQuMS03LjE3TDEwLjYyIDE5SDB2LTJoOS4zOGwyLjU2LTUuMTIgMy45IDYuODMgNC4xMy0xMC4zMkwyMy42NiAxN0gzMnYyaC05LjY2bC0yLjMxLTUuMzl6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcE1vbml0b3Jpbmc7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcE5vdGVib29rID0gZnVuY3Rpb24gRXVpSWNvbkFwcE5vdGVib29rKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjUgMmgtNVYwaC0ydjJoLTNWMGgtMnYyaC0zVjBIOHYySDN2MjZoMjJWMnptLTIgMjRINVY0aDN2MmgyVjRoM3YyaDJWNGgzdjJoMlY0aDN2MjJ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yNyA3djIzSDh2MmgyMVY3elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk04IDEyaDEydjJIOHpNOCAxN2gxMnYySDh6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcE5vdGVib29rOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBQYWNrZXRiZWF0ID0gZnVuY3Rpb24gRXVpSWNvbkFwcFBhY2tldGJlYXQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTE2IDIwYTQgNCAwIDExMC04IDQgNCAwIDAxMCA4em0wLTZhMiAyIDAgMTAwIDQgMiAyIDAgMDAwLTR6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDRhNCA0IDAgMTAtNCA0IDQgNCAwIDAwMi0uNTdsNS4yNyA1LjI3IDEuNDEtMS40MUw3LjQzIDZBNCA0IDAgMDA4IDR6TTQgNmEyIDIgMCAxMTAtNCAyIDIgMCAwMTAgNHptMTYuNzEgNi43MUwyNiA3LjQzQTQgNCAwIDAwMjggOGE0IDQgMCAxMC00LTQgNCA0IDAgMDAuNTcgMmwtNS4yNyA1LjI3IDEuNDEgMS40NHpNMjggMmEyIDIgMCAxMTAgNCAyIDIgMCAwMTAtNHpNMTEuMjkgMTkuMjlMNiAyNC41N0E0IDQgMCAwMDQgMjRhNCA0IDAgMTA0IDQgNCA0IDAgMDAtLjU3LTJsNS4yNy01LjI3LTEuNDEtMS40NHpNNCAzMGEyIDIgMCAxMTAtNCAyIDIgMCAwMTAgNHptMjQtNmE0IDQgMCAwMC0yIC41N2wtNS4yNy01LjI3LTEuNDEgMS40MUwyNC41NyAyNmE0IDQgMCAwMC0uNTcgMiA0IDQgMCAxMDQtNHptMCA2YTIgMiAwIDExMC00IDIgMiAwIDAxMCA0elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBQYWNrZXRiZWF0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBQaXBlbGluZSA9IGZ1bmN0aW9uIEV1aUljb25BcHBQaXBlbGluZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI5IDEyYTMgMyAwIDAwLTMgM2gtNGEzIDMgMCAwMC0zLTNoLTZhMyAzIDAgMDAtMyAzSDZhMyAzIDAgMDAtMy0zSDB2MTRoM2EzIDMgMCAwMDMtM2g0YTMgMyAwIDAwMyAzaDZhMyAzIDAgMDAzLTNoNGEzIDMgMCAwMDMgM2gzVjEyaC0zek0zIDI0SDJWMTRoMWExIDEgMCAwMTEgMXY4YTEgMSAwIDAxLTEgMXptMTctM3YyYTEgMSAwIDAxLTEgMWgtNmExIDEgMCAwMS0xLTF2LTJINnYtNGg2di0yYTEgMSAwIDAxMS0xaDZhMSAxIDAgMDExIDF2Mmg2djRoLTZ6bTEwIDNoLTFhMSAxIDAgMDEtMS0xdi04YTEgMSAwIDAxMS0xaDF2MTB6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTIyIDZIMTB2Mmg1djJoMlY4aDV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcFBpcGVsaW5lOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBSZWNlbnRseVZpZXdlZCA9IGZ1bmN0aW9uIEV1aUljb25BcHBSZWNlbnRseVZpZXdlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDMyQzcuMTYzIDMyIDAgMjQuODM3IDAgMTZTNy4xNjMgMCAxNiAwczE2IDcuMTYzIDE2IDE2YTE2IDE2IDAgMDEtMTYgMTZ6bTAtMzBDOC4yNjggMiAyIDguMjY4IDIgMTZzNi4yNjggMTQgMTQgMTQgMTQtNi4yNjggMTQtMTRBMTQgMTQgMCAwMDE2IDJ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTE1IDRoMnY5LjE3QTMuMDA5IDMuMDA5IDAgMDExOC44MyAxNUgyNnYyaC03LjE3QTMuMDAxIDMuMDAxIDAgMTExNSAxMy4xN1Y0em0xIDEzYTEgMSAwIDEwMC0yIDEgMSAwIDAwMCAyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBSZWNlbnRseVZpZXdlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwUmVwb3J0aW5nID0gZnVuY3Rpb24gRXVpSWNvbkFwcFJlcG9ydGluZyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI1IDVoLS4xN3YySDI1YTEgMSAwIDAxMSAxdjIwYTEgMSAwIDAxLTEgMUg3YTEgMSAwIDAxLTEtMVY4YTEgMSAwIDAxMS0xaC4xN1Y1SDdhMyAzIDAgMDAtMyAzdjIwYTMgMyAwIDAwMyAzaDE4YTMgMyAwIDAwMy0zVjhhMyAzIDAgMDAtMy0zelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjMgM2gtM1YwaC04djNIOXY2aDE0VjN6bS0yIDRIMTFWNWgzVjJoNHYzaDN2MnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMTAgMTNoMTJ2MkgxMHpNMTAgMThoMTJ2MkgxMHpNMTAgMjNoMTJ2MkgxMHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwUmVwb3J0aW5nOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBTYXZlZE9iamVjdHMgPSBmdW5jdGlvbiBFdWlJY29uQXBwU2F2ZWRPYmplY3RzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0yMC4zOCA3LjAwMUwxNyA5LjYxOVYwaC0ydjkuNjE5bC0zLjM3LTIuNjE4LTEuMjUgMS41MTNMMTYgMTIuODc4bDUuNjMtNC4zNjR6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMS4wNi4xNjVsLTEuMTEgMS42MSA5LjI1IDUuOTgzTDE2IDE2LjI5IDIuOCA3Ljc1OGw5LjI1LTUuOTgzLTEuMS0xLjYxTDAgNy4yMzR2MTMuNjUzbDE2IDEwLjMzNyAxNi0xMC4zMzdWNy4yMzRMMjEuMDYuMTY0ek0yIDkuNTdsMTMgOC40MDd2MTAuMjc5TDIgMTkuODRWOS41N3ptMTUgMTguNjc2VjE3Ljk3OGwxMy04LjQwN1YxOS44NWwtMTMgOC4zOTd6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcFNhdmVkT2JqZWN0czsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwU2VhcmNoUHJvZmlsZXIgPSBmdW5jdGlvbiBFdWlJY29uQXBwU2VhcmNoUHJvZmlsZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTExLjYzIDhoNy4zOHYyaC03LjM4elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNyA4aDMuMTl2Mkg3elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk03IDE2aDcuMzh2Mkg3elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTUuODEgMTZIMTl2MmgtMy4xOXpNNyAxMmg5djJIN3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEzIDBDNS44MiAwIDAgNS44MiAwIDEzczUuODIgMTMgMTMgMTMgMTMtNS44MiAxMy0xM0ExMyAxMyAwIDAwMTMgMHptMCAyNEM2LjkyNSAyNCAyIDE5LjA3NSAyIDEzUzYuOTI1IDIgMTMgMnMxMSA0LjkyNSAxMSAxMS00LjkyNSAxMS0xMSAxMXpNMjIuNTgxIDIzLjk5M2wxLjQxNC0xLjQxNCA3LjcwOCA3LjcwOC0xLjQxNCAxLjQxNHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwU2VhcmNoUHJvZmlsZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcFNlY3VyaXR5ID0gZnVuY3Rpb24gRXVpSWNvbkFwcFNlY3VyaXR5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTQgMzJsLS4zNi0uMTRBMjEuMDcgMjEuMDcgMCAwMTAgMTIuMDdWNS40NEwxNCAuMDZsMTQgNS4zOHY2LjYzYTIxLjA3IDIxLjA3IDAgMDEtMTMuNjQgMTkuNzhMMTQgMzJ6TTIgNi44MnY1LjI1YTE5LjA4IDE5LjA4IDAgMDAxMiAxNy43NyAxOS4wOCAxOS4wOCAwIDAwMTItMTcuNzdWNi44MkwxNCAyLjIgMiA2LjgyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk05IDE3LjgzaDJWMjNIOXpNMTEgMTAuMThWN0g5djMuMThhMyAzIDAgMTAyIDB6TTEwIDE0YTEgMSAwIDExMC0yIDEgMSAwIDAxMCAyek0xNyA3aDJ2NS4xN2gtMnpNMjEgMTdhMyAzIDAgMTAtNCAyLjgyVjIzaDJ2LTMuMThBMyAzIDAgMDAyMSAxN3ptLTMgMWExIDEgMCAxMTAtMiAxIDEgMCAwMTAgMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwU2VjdXJpdHk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcFNlY3VyaXR5QW5hbHl0aWNzID0gZnVuY3Rpb24gRXVpSWNvbkFwcFNlY3VyaXR5QW5hbHl0aWNzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMyAxMGg0djJINXY3LjkyOGMwIDEuMjk5LjgwOCAyLjc5NSAyLjg4IDQuNDggMS44MyAxLjQ4OSA0LjUyNCAzLjAyIDguMTIgNC41ODRWMjZoMnY1Ljk5MmwtMS4zOC0uNTY3Yy00LjM3Mi0xLjc5Ny03LjcyNC0zLjYxMy0xMC01LjQ2NUM0LjM1OCAyNC4xMjIgMyAyMi4xMTQgMyAxOS45MjhWMTB6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTkgMTBoOXYxNGwtMS4yNzItLjQ1OGMtMS4zNjctLjQ5NC0zLjIzLTEuMzE0LTQuNzY4LTIuMzlDMTAuNDg0IDIwLjExOCA5IDE4LjYzNiA5IDE2Ljc2MVYxMHptMS44OTUgMS44NzZ2NC44ODdjMCAuODc3Ljc0NCAxLjg2NyAyLjE1OCAyLjg1Ni45MzcuNjU2IDIuMDM4IDEuMjE5IDMuMDUyIDEuNjU3di05LjRoLTUuMjF6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yOSAxSDl2N2gyVjIuOTY2aDE2VjE2LjczYzAgLjU1OC0uMjQ1IDEuMTI4LS43NTYgMS43Mi0uNTE1LjU5Ni0xLjI1NiAxLjE1OC0yLjEyIDEuNjY4LTEuMzgxLjgxOC0yLjk2MSAxLjQzNC00LjEyNCAxLjgxN1YyNGMxLjI2LS4zNzggMy4zMzQtMS4xMiA1LjE1NS0yLjE5Ny45NjUtLjU3IDEuOTA1LTEuMjYxIDIuNjEyLTIuMDguNzEyLS44MjIgMS4yMzMtMS44MjcgMS4yMzMtMi45OTJWMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwU2VjdXJpdHlBbmFseXRpY3M7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcFNwYWNlcyA9IGZ1bmN0aW9uIEV1aUljb25BcHBTcGFjZXMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTQgNGg2djJINHpNMjIgNGg2djJoLTZ6TTQgMjJoNnYySDR6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0wIDE0aDE0VjBIMHYxNHpNMiAyaDEwdjEwSDJWMnptMTYtMnYxNGgxNFYwSDE4em0xMiAxMkgyMFYyaDEwdjEwek0wIDMyaDE0VjE4SDB2MTR6bTItMTJoMTB2MTBIMlYyMHptMTYgMTJoMTRWMThIMTh2MTR6bTItMTJoMTB2MTBIMjBWMjB6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTIyIDIyaDZ2MmgtNnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwU3BhY2VzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBTcWwgPSBmdW5jdGlvbiBFdWlJY29uQXBwU3FsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0xOCA2aDl2MmgtOXpNNSA2aDl2Mkg1ek01IDEyaDl2Mkg1ek0xOCAxMmg5djJoLTl6TTUgMThoOXYySDV6TTE4IDE4aDl2MmgtOXpNMTggMjRoOXYyaC05ek01IDI0aDl2Mkg1elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjkgMzJIM2EzIDMgMCAwMS0zLTNWM2EzIDMgMCAwMTMtM2gyNmEzIDMgMCAwMTMgM3YyNmEzIDMgMCAwMS0zIDN6TTMgMmExIDEgMCAwMC0xIDF2MjZhMSAxIDAgMDAxIDFoMjZhMSAxIDAgMDAxLTFWM2ExIDEgMCAwMC0xLTFIM3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwU3FsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBUaW1lbGlvbiA9IGZ1bmN0aW9uIEV1aUljb25BcHBUaW1lbGlvbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQgNHYyMC4zNEwxNiAzMmwxMi03LjY0VjRINHptMjIgMnY0aC00YTMgMyAwIDAwLTMgM3Y1aC02di01YTMgMyAwIDAwLTMtM0g2VjZoMjB6bS03Ljg3IDE0TDE2IDIyLjUyIDEzLjg3IDIwaDQuMjZ6TTYgMTJoNGExIDEgMCAwMTEgMXY2LjdsMy42OSA0LjM3LTIuNTggMy4wNkw2IDIzLjI0VjEyem03LjgxIDE2LjIybDIuMTktMi42IDIuMTkgMi42TDE2IDI5LjYxbC0yLjE5LTEuMzl6bTYuMDgtMS4wOWwtMi41OC0zLjA2TDIxIDE5LjdWMTNhMSAxIDAgMDExLTFoNHYxMS4yNGwtNi4xMSAzLjg5elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk00IDBoMjR2Mkg0elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBUaW1lbGlvbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwVXBncmFkZUFzc2lzdGFudCA9IGZ1bmN0aW9uIEV1aUljb25BcHBVcGdyYWRlQXNzaXN0YW50KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0xNiAyMWE1IDUgMCAxMTAtMTAgNSA1IDAgMDEwIDEwem0wLThhMyAzIDAgMTAwIDYgMyAzIDAgMDAwLTZ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yNy40MiAxOS42OWExMiAxMiAwIDAxLTIzLjExLTFsMi4yNy0uNDUtNC4zMi00LjQ3TDAgMTkuNTVsMi4zOS0uNDdhMTQgMTQgMCAwMDI3IDEuMjNsLTEuOTctLjYyem0yLjIzLTYuNzdhMTQgMTQgMCAwMC0yNy0xLjIzbDEuOS42MmExMiAxMiAwIDAxMjMuMTEgMWwtMi4yNy40NSA0LjMyIDQuNDZMMzIgMTIuNDVsLTIuMzUuNDd6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcFVwZ3JhZGVBc3Npc3RhbnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcFVwdGltZSA9IGZ1bmN0aW9uIEV1aUljb25BcHBVcHRpbWUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTQuMjE2IDEyLjM3N0ExMC45NDggMTAuOTQ4IDAgMDAyLjE4MSAxN0guMTUzYTEyLjk0MSAxMi45NDEgMCAwMTIuNjkzLTYuMTE4bDEuMzcgMS40OTV6bTIuOTQ4LTIuNzAzbC0xLjM3LTEuNDk1QTEyLjk0IDEyLjk0IDAgMDExMyA2djJjLTIuMTQ0IDAtNC4xNDQuNjEzLTUuODM2IDEuNjc0elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjYgNC40MTRWMTljMCA3LjE4LTUuODIgMTMtMTMgMTNDNi41IDMyIDEuMTE1IDI3LjIzLjE1MyAyMUgyLjE4Yy45NCA1LjEyIDUuNDI3IDkgMTAuODE5IDkgNi4wNzUgMCAxMS00LjkyNSAxMS0xMVY0LjQxNGwtNC4yOTMgNC4yOTMtMS40MTQtMS40MTRMMjUgLjU4Nmw2LjcwNyA2LjcwNy0xLjQxNCAxLjQxNEwyNiA0LjQxNHptLTcuODM2IDkuOTA5bDEuNDcyIDEuMzU0LTcuNTc3IDguMjM1LTQuODM1LTQuNDQyIDEuMzUzLTEuNDczIDMuMzY0IDMuMDkgNi4yMjMtNi43NjR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcFVwdGltZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwVXNlcnNSb2xlcyA9IGZ1bmN0aW9uIEV1aUljb25BcHBVc2Vyc1JvbGVzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTkuMzA3IDMuMjFhMi45MSAyLjkxIDAgMTAtLjIyMyAxLjk0IDExLjYzNiAxMS42MzYgMCAwMTguMjMyIDcuMDQ5bDEuNzc1LS42OThhMTMuNTc2IDEzLjU3NiAwIDAwLTkuNzg0LTguMjkxem0tMi44MjIgMS42MzhhLjk3Ljk3IDAgMTEwLTEuOTM5Ljk3Ljk3IDAgMDEwIDEuOTR6bS00LjI2Ny44MDVsLS43MTctMS43NzRhMTMuNTc2IDEzLjU3NiAwIDAwLTguMjkxIDkuNzg0IDIuOTEgMi45MSAwIDEwMS45NC4yMjMgMTEuNjM2IDExLjYzNiAwIDAxNy4wNjgtOC4yMzN6bS04LjM0IDExLjgwMmEuOTcuOTcgMCAxMTAtMS45NC45Ny45NyAwIDAxMCAxLjk0em0xMi42MDcgOC43MjdhMi45MSAyLjkxIDAgMDAtMi41OTkgMS42MiAxMS42MzYgMTEuNjM2IDAgMDEtOC4yMzMtNy4wNWwtMS43NzQuNzE3YTEzLjU3NiAxMy41NzYgMCAwMDkuODEzIDguMjkxIDIuOTEgMi45MSAwIDEwMi43OTMtMy41Nzh6bTAgMy44NzlhLjk3Ljk3IDAgMTEwLTEuOTQuOTcuOTcgMCAwMTAgMS45NHpNMzIgMTYuNDg1YTIuOTEgMi45MSAwIDEwLTQuMTk5IDIuNTk5IDExLjYzNiAxMS42MzYgMCAwMS03LjA1IDguMjMybC43MTggMS43NzVhMTMuNTc2IDEzLjU3NiAwIDAwOC4yOTEtOS44MTNBMi45MSAyLjkxIDAgMDAzMiAxNi40ODV6bS0yLjkxLjk3YS45Ny45NyAwIDExMC0xLjk0Ljk3Ljk3IDAgMDEwIDEuOTR6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTE5LjE5IDE2LjM1YTMuODc5IDMuODc5IDAgMTAtNS40MiAwIDQuODQ4IDQuODQ4IDAgMDAtMi4xMzQgNC4wMTR2MS45MzloOS42OTd2LTEuOTRhNC44NDggNC44NDggMCAwMC0yLjE0My00LjAxNHptLTQuNjQ1LTIuNzc0YTEuOTQgMS45NCAwIDExMy44OCAwIDEuOTQgMS45NCAwIDAxLTMuODggMHptLS45NyA2Ljc4OGEyLjkxIDIuOTEgMCAxMTUuODE5IDBoLTUuODE4elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBVc2Vyc1JvbGVzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBWaXN1YWxpemUgPSBmdW5jdGlvbiBFdWlJY29uQXBwVmlzdWFsaXplKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0zMiAzMkg0YTQgNCAwIDAxLTQtNFYwaDJ2MjhhMiAyIDAgMDAyIDJoMjh2MnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYgMjBoMnY3SDZ6TTE2IDEyaDJ2MTVoLTJ6TTI2IDE3aDJ2MTBoLTJ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yNyA2YTMgMyAwIDAwLTIuMDguODRMMjAgNC4zNkEyLjIgMi4yIDAgMDAyMCA0YTMgMyAwIDAwLTYgMGMuMDAxLjM0MS4wNjIuNjguMTggMWwtNS42IDQuNDZBMyAzIDAgMDA3IDlhMyAzIDAgMTAzIDMgMi45MyAyLjkzIDAgMDAtLjE4LTFsNS42LTQuNDhBMyAzIDAgMDAxNyA3YTMgMyAwIDAwMi4wOC0uODRsNSAyLjQ4QTIuMiAyLjIgMCAwMDI0IDlhMyAzIDAgMTAzLTN6TTcgMTNhMSAxIDAgMTEwLTIgMSAxIDAgMDEwIDJ6bTEwLThhMSAxIDAgMTEwLTIgMSAxIDAgMDEwIDJ6bTEwIDVhMSAxIDAgMTEwLTIgMSAxIDAgMDEwIDJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcFZpc3VhbGl6ZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwV2F0Y2hlcyA9IGZ1bmN0aW9uIEV1aUljb25BcHBXYXRjaGVzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS43NCA3LjczbC0xLjUtMS4zMmExMyAxMyAwIDAwMCAxNy4xOWwxLjUtMS4zMmExMSAxMSAwIDAxMC0xNC41NHYtLjAxelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNi41MSAzLjY2TDUgMi4zNGMtNi4zNzcgNy4yNC02LjM3NyAxOC4wOSAwIDI1LjMzbDEuNS0xLjMyQy43OTIgMTkuODY3Ljc5MiAxMC4xNTMgNi41IDMuNjdsLjAxLS4wMXptMTcuMjUgMi43NWwtMS41IDEuMzJhMTEgMTEgMCAwMTAgMTQuNTRsMS41IDEuMzJhMTMgMTMgMCAwMDAtMTcuMTl2LjAxelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjcgMi4zNGwtMS41IDEuMzJjNS43MDggNi40ODMgNS43MDggMTYuMTk3IDAgMjIuNjhsMS41IDEuMzNjNi4zNzctNy4yNCA2LjM3Ny0xOC4wOSAwLTI1LjMzelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0yMSAxNWE1IDUgMCAxMC02IDQuOVYzMWgyVjE5LjlhNSA1IDAgMDA0LTQuOXptLTUgM2EzIDMgMCAxMTAtNiAzIDMgMCAwMTAgNnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwV2F0Y2hlczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwV29ya3BsYWNlU2VhcmNoID0gZnVuY3Rpb24gRXVpSWNvbkFwcFdvcmtwbGFjZVNlYXJjaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk03LjgxIDFIMnYzMGg1LjgxNWMxLjcwNSAwIDMuMzQzLS43ODMgNC4zOC0yLjA5NGwzLjE4Mi00LjAyMy4wMDYuMDA2IDIuNjA3LTMuMTM3LjAxLS4wMTRhOS40MiA5LjQyIDAgMDAxLjk1My00LjgyNiA5LjExMiA5LjExMiAwIDAwLTEuODkxLTYuNTIybC0uMDEtLjAxMi0yLjYwMy0zLjE1NkwxMi4xOTcgMy4xQzExLjE2IDEuNzg2IDkuNTIgMSA3LjgxIDF6bTYuMTE4IDcuNTIzbC0zLjMxLTQuMTk1QzkuOTY4IDMuNTEyIDguOTE3IDMgNy44MSAzSDR2MjZoMy44MTVjMS4xIDAgMi4xNS0uNTA4IDIuOC0xLjMybDMuMzMtNC4yMS0xLjc5Ni0xLjc3LS4wMjctLjAzM2MtMi44NC0zLjMxNy0yLjgzLTguMTk1LjAyOC0xMS4yODdsLjAwNC0uMDA0YTk4Ljg5MyA5OC44OTMgMCAwMTEuNzc0LTEuODUzem00LjA0MyA4LjA5OWMtLjEyIDEuMjc5LS42MTYgMi41MzctMS40OSAzLjY0bC0xLjI4OCAxLjYzLTEuNTc4LTEuNTU2Yy0yLjE5LTIuNTktMi4xMTgtNi4zLjAwMS04LjU5Ni42LS42NCAxLjExOS0xLjE4MyAxLjU2MS0xLjYzNWwxLjI5MyAxLjYzOHYuMDAybC4wMTQuMDE2Yy45NDIgMS4xOTIgMS40NDYgMi41NjQgMS41MSAzLjk0OWE3LjA5IDcuMDkgMCAwMS0uMDIzLjkxMnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTIzLjgwMSAzYy0uMzgyIDAtMS4wNTIuMjMxLTEuOTI1LjgxMi0uNjM2LjQyMi0xLjIyOC45MjgtMS42NzcgMS4zNTdsMS43NzEgMi4yNDUuMDA1LjAwNy4wMjQuMDMuMDA4LjAxYzQuMDAzIDUuMDk5IDMuOTkgMTIuMDU3LS4wMzUgMTcuMTQ1bC0xLjc5MyAyLjI2N2E4LjIwNiA4LjIwNiAwIDAwMS43NjkgMS40OThjLjY5OC40MjcgMS4zMzcuNjI5IDEuODUyLjYyOUgyOFYzaC00LjE5OXptLTYuMTQ4IDIzLjg0MmwuNzY1IDEuMDUzLjAyMy4wMjdjLjcxNy44NTEgMS41NjYgMS42MDcgMi40NjQgMi4xNTYuODkuNTQ0IDEuODkuOTIyIDIuODk1LjkyMkgzMFYxaC02LjE5OWMtLjk4NyAwLTIuMDY2LjUwNS0zLjAzMiAxLjE0NmExNC45MzQgMTQuOTM0IDAgMDAtMi4zNTIgMS45NzRsLS4yNzYuMjg4LS41OTUuNjI4IDIuODU1IDMuNjE5LjAwNi4wMDZjMy40NTkgNC4zNzUgMy40NTcgMTAuMzI5LS4wMDQgMTQuNzA0bC0yLjc1IDMuNDc3elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBXb3JrcGxhY2VTZWFyY2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcHMgPSBmdW5jdGlvbiBFdWlJY29uQXBwcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIgNFYyaDJ2Mkgyem01IDBWMmgydjJIN3ptNSAwVjJoMnYyaC0yek0yIDlWN2gydjJIMnptNSAwVjdoMnYySDd6bTUgMFY3aDJ2MmgtMnpNMiAxNHYtMmgydjJIMnptNSAwdi0yaDJ2Mkg3em01IDB2LTJoMnYyaC0yelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcnJvd0VuZCA9IGZ1bmN0aW9uIEV1aUljb25BcnJvd0VuZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMi44NTcgMTQuMDQzYS43NS43NSAwIDAxLS4wMjUtMS4wNmw0LjU5MS00LjgxYS4yNS4yNSAwIDAwMC0uMzQ2bC00LjU5LTQuODFhLjc1Ljc1IDAgMDExLjA4NS0xLjAzNWw0LjU5IDQuODFhMS43NSAxLjc1IDAgMDEwIDIuNDE2bC00LjU5IDQuODFhLjc1Ljc1IDAgMDEtMS4wNi4wMjR6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMC41IDIuNzVhLjc1Ljc1IDAgMDExLjUgMHYxMC41YS43NS43NSAwIDAxLTEuNSAwVjIuNzV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFycm93RW5kOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcnJvd1N0YXJ0ID0gZnVuY3Rpb24gRXVpSWNvbkFycm93U3RhcnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00IDIuNzVhLjc1Ljc1IDAgMDExLjUgMHYxMC41YS43NS43NSAwIDAxLTEuNSAwVjIuNzV6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEzLjEzNSAxNC4wNDNhLjc1Ljc1IDAgMDAuMDI1LTEuMDZsLTQuNTktNC44MWEuMjUuMjUgMCAwMTAtLjM0Nmw0LjU5LTQuODFhLjc1Ljc1IDAgMDAtMS4wODUtMS4wMzVsLTQuNTkgNC44MWExLjc1IDEuNzUgMCAwMDAgMi40MTZsNC41OSA0LjgxYy4yODYuMy43Ni4zMSAxLjA2LjAyNHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXJyb3dTdGFydDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXJyb3dEb3duID0gZnVuY3Rpb24gRXVpSWNvbkFycm93RG93bihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMS45NTcgNC45ODJhLjc1Ljc1IDAgMDExLjA2LS4wMjVsNC44MSA0LjU5MWEuMjUuMjUgMCAwMC4zNDYgMGw0LjgxLTQuNTlhLjc1Ljc1IDAgMDExLjAzNSAxLjA4NWwtNC44MSA0LjU5YTEuNzUgMS43NSAwIDAxLTIuNDE2IDBsLTQuODEtNC41OWEuNzUuNzUgMCAwMS0uMDI1LTEuMDZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFycm93RG93bjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXJyb3dMZWZ0ID0gZnVuY3Rpb24gRXVpSWNvbkFycm93TGVmdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTEuMDE4IDE0LjA0M2EuNzUuNzUgMCAwMC4wMjQtMS4wNmwtNC41OS00LjgxYS4yNS4yNSAwIDAxMC0uMzQ2bDQuNTktNC44MWEuNzUuNzUgMCAxMC0xLjA4NS0xLjAzNWwtNC41OSA0LjgxYTEuNzUgMS43NSAwIDAwMCAyLjQxNmw0LjU5IDQuODFjLjI4Ni4zLjc2MS4zMSAxLjA2LjAyNHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXJyb3dMZWZ0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcnJvd1JpZ2h0ID0gZnVuY3Rpb24gRXVpSWNvbkFycm93UmlnaHQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTQuOTgyIDE0LjA0M2EuNzUuNzUgMCAwMS0uMDI1LTEuMDZsNC41OTEtNC44MWEuMjUuMjUgMCAwMDAtLjM0NmwtNC41OS00LjgxYS43NS43NSAwIDAxMS4wODUtMS4wMzVsNC41OSA0LjgxYTEuNzUgMS43NSAwIDAxMCAyLjQxNmwtNC41OSA0LjgxYS43NS43NSAwIDAxLTEuMDYuMDI0elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcnJvd1JpZ2h0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcnJvd1VwID0gZnVuY3Rpb24gRXVpSWNvbkFycm93VXAoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEuOTU3IDExLjAxOGMuMjg2LjMuNzYxLjMxIDEuMDYuMDI0bDQuODEtNC41OWEuMjUuMjUgMCAwMS4zNDYgMGw0LjgxIDQuNTlhLjc1Ljc1IDAgMDAxLjAzNS0xLjA4NWwtNC44MS00LjU5YTEuNzUgMS43NSAwIDAwLTIuNDE2IDBsLTQuODEgNC41OWEuNzUuNzUgMCAwMC0uMDI1IDEuMDZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFycm93VXA7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFzdGVyaXNrID0gZnVuY3Rpb24gRXVpSWNvbkFzdGVyaXNrKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNi45MjggOC40NjhMNCA3LjYxOGwuNDQ2LTEuNDI3TDcuMzc1IDcuMjUgNy4yODcgNGgxLjQ4NGwtLjA5NyAzLjI5NiAyLjg4LTEuMDM5TDEyIDcuNjkzbC0yLjk3Ny44NiAxLjkyIDIuNTZMOS43NDEgMTIgNy45MzcgOS4yOGwtMS43NDUgMi42NTQtMS4yMTMtLjg2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Bc3RlcmlzazsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQmVha2VyID0gZnVuY3Rpb24gRXVpSWNvbkJlYWtlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUuMjc3IDEwLjA4OGMuMDIuMDE0LjA0LjAzLjA1Ny4wNDcuNTgyLjU1IDEuMTM0LjgxMiAxLjY2Ni44MTIuNTg2IDAgMS44NC0uMjkzIDMuNzEzLS44OEw5IDYuMjEyVjJIN3Y0LjIxMmwtMS43MjMgMy44NzZ6bS0uNDM4Ljk4N0wzLjUzOSAxNGg4LjkyMmwtMS4zMi0yLjk2OUM5LjA5NiAxMS42NzcgNy43MzMgMTIgNyAxMmMtLjc0IDAtMS40NjMtLjMxNS0yLjE2MS0uOTI1ek02IDJINVYxaDZ2MWgtMXY0bDMuMzc1IDcuNTk0QTEgMSAwIDAxMTIuNDYxIDE1SDMuNTRhMSAxIDAgMDEtLjkxNC0xLjQwNkw2IDZWMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQmVha2VyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25CZWxsID0gZnVuY3Rpb24gRXVpSWNvbkJlbGwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMi4zMTYgMTJoMTAuMzY4Yy0uMTg4LS43MDQtLjI4LTEuNjkxLS4zNDgtMy4wMzctLjA3LTEuMzgyLS4xMDMtMS44ODgtLjE5LTIuNjEyLS4wMjgtLjIzNi0uMDYtLjQ2Mi0uMDk2LS42OC0uMzEtMS44OTItMS41MDYtMi45MjMtMy43MDgtMy4xMzFhMSAxIDAgMTAtMS42ODQgMGMtMi4yMDIuMjA4LTMuMzk3IDEuMjQtMy43MDggMy4xM2ExNi4wMSAxNi4wMSAwIDAwLS4wOTYuNjhjLS4wODcuNzI1LS4xMiAxLjIzLS4xOSAyLjYxMy0uMDY4IDEuMzQ2LS4xNiAyLjMzMy0uMzQ4IDMuMDM3em0xMC44NDMgMUgxLjg0Yy0uMzA4LjM1My0uNzM3LjUtMS4zNDEuNWEuNS41IDAgMTEwLTFjLjc4NiAwIDEuMDI0LS43ODMgMS4xNjYtMy41ODcuMDctMS40MDcuMTA1LTEuOTI2LjE5Ni0yLjY4MS4wMy0uMjUuMDYzLS40OS4xMDItLjcyNC4zMzQtMi4wNDEgMS41NDYtMy4zMTMgMy41NTYtMy43OTJhMiAyIDAgMDEzLjk2IDBjMi4wMS40NzkgMy4yMjIgMS43NSAzLjU1NyAzLjc5MmExNyAxNyAwIDAxLjEwMi43MjRjLjA5Ljc1NS4xMjUgMS4yNzQuMTk2IDIuNjgxLjE0IDIuODA0LjM3OSAzLjU4NyAxLjE2NSAzLjU4N2EuNS41IDAgMTEwIDFjLS42MDQgMC0xLjAzMy0uMTQ3LTEuMzQxLS41ek01LjUgMTRoNGEyIDIgMCAxMS00IDB6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkJlbGw7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkJlbGxTbGFzaCA9IGZ1bmN0aW9uIEV1aUljb25CZWxsU2xhc2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05LjUgMTRsLS4wMDUuMTVhMiAyIDAgMDEtMy45NzIuMTUzbC0uMDE4LS4xNTRMNS41IDE0aDR6bTUuMzgtMTIuODI1YS41LjUgMCAwMS4wMDguNjRsLS4wNjMuMDY1LTE0IDEyYS41LjUgMCAwMS0uNzEzLS42OTVsLjA2My0uMDY1IDE0LTEyYS41LjUgMCAwMS43MDUuMDU1ek0xMy4wMzYgNS41MWwuMDU1LjM1My4wNDguMzY4Yy4wNjYuNTU0LjEwMy45OC4xNDUgMS43MjRsLjA4IDEuNDkxYy4xNDYgMi4zNzEuNDAyIDMuMDUzIDEuMTM2IDMuMDUzYS41LjUgMCAxMTAgMWMtLjYwMyAwLTEuMDMxLS4xNDYtMS4zNC0uNDk5SDQuMTg1bDEuMTgyLTFoNy4zMTdjLS4xNzItLjY0NC0uMjY0LTEuNTI4LS4zMy0yLjcwOGwtLjA5LTEuNjM4Yy0uMDMzLS41MTQtLjA2Ni0uODctLjExOC0xLjMwNGwtLjAxMS0uMDc3LjkwMS0uNzYzek03LjUgMGEyIDIgMCAwMTEuOTggMS43MTdjLjQ3Ni4xMTMuOTA3LjI3IDEuMjkyLjQ3MmwtLjgzOC43MWE1LjcyOCA1LjcyOCAwIDAwLTEuNTkxLS4zNiAxIDEgMCAxMC0xLjY4NCAwQzQuNDU1IDIuNzUgMy4yNiAzLjc4IDIuOTUgNS42NzFsLS4wNS4zMzQtLjA0Ni4zNDdjLS4wOC42NzYtLjExNSAxLjE2MS0uMTc2IDIuMzQ3bC0uMDE0LjI2NS0uMDA1LjA5LTEuMDU4Ljg5N2MuMDE4LS4yMzQuMDM1LS40ODguMDUtLjc2M2wuMDc3LTEuNDI3Yy4wMzgtLjYyNi4wNzMtMS4wMjUuMTM0LTEuNTI4LjAzLS4yNS4wNjMtLjQ5LjEwMi0uNzI0LjMzNC0yLjA0IDEuNTQ2LTMuMzEzIDMuNTU1LTMuNzkybC4wMDQtLjAxOUEyIDIgMCAwMTcuNSAwelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25CZWxsU2xhc2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkJvbHQgPSBmdW5jdGlvbiBFdWlJY29uQm9sdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuMDQgMTMuMjc0YS41LjUgMCAxMC44OTIuNDUzbDMuMDE0LTUuOTMxYS41LjUgMCAwMC0uNDQ1LS43MjdINS4zMTZMOC4wMyAxLjcyN2EuNS41IDAgMTAtLjg5Mi0uNDUzTDQuMDU1IDcuMzQzYS41LjUgMCAwMC40NDYuNzI2aDUuMTg1TDcuMDQgMTMuMjc0elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Cb2x0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Cb3hlc0hvcml6b250YWwgPSBmdW5jdGlvbiBFdWlJY29uQm94ZXNIb3Jpem9udGFsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMCA2aDR2NEgwVjZ6bTEgMXYyaDJWN0gxem01LTFoNHY0SDZWNnptMSAxdjJoMlY3SDd6bTUtMWg0djRoLTRWNnptMSAzaDJWN2gtMnYyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Cb3hlc0hvcml6b250YWw7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkJveGVzVmVydGljYWwgPSBmdW5jdGlvbiBFdWlJY29uQm94ZXNWZXJ0aWNhbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcgMXYyaDJWMUg3ek02IDBoNHY0SDZWMHptMCA2aDR2NEg2VjZ6bTEgMXYyaDJWN0g3em0tMSA1aDR2NEg2di00em0xIDF2Mmgydi0ySDd6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkJveGVzVmVydGljYWw7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkJyYW5jaCA9IGZ1bmN0aW9uIEV1aUljb25CcmFuY2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01IDEwLjAzOGEzLjQ5IDMuNDkgMCAwMTIuNS0xLjA1aDJhMi41IDIuNSAwIDAwMi40NjItMi4wNjEgMiAyIDAgMTExLjAwOC4wMTdBMy41IDMuNSAwIDAxOS41IDkuOTg3aC0yYTIuNSAyLjUgMCAwMC0yLjQ2NiAyLjA4NUEyIDIgMCAxMTQgMTIuMDYzVjMuOTM3YTIgMiAwIDExMSAwdjYuMXpNNC41IDNhMSAxIDAgMTAwLTIgMSAxIDAgMDAwIDJ6bTAgMTJhMSAxIDAgMTAwLTIgMSAxIDAgMDAwIDJ6bTgtOWExIDEgMCAxMDAtMiAxIDEgMCAwMDAgMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQnJhbmNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25CcmFuY2hVc2VyID0gZnVuY3Rpb24gRXVpSWNvbkJyYW5jaFVzZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNiA3Ljk4N2EzLjQ5IDMuNDkgMCAwMC0yLjUgMS4wNXYtNC4xYTIgMiAwIDEwLTEgMHY2LjEyNmEyIDIgMCAxMDEuMDM0LjAxQTIuNSAyLjUgMCAwMTYgOC45ODZoMWEzLjUgMy41IDAgMDAzLjQ3LTMuMDQzIDIgMiAwIDEwLTEuMDA5LS4wMTdBMi41IDIuNSAwIDAxNyA3Ljk4N0g2ek00IDNhMSAxIDAgMTEtMiAwIDEgMSAwIDAxMiAwem0wIDEwYTEgMSAwIDExLTIgMCAxIDEgMCAwMTIgMHptNy05YTEgMSAwIDExLTIgMCAxIDEgMCAwMTIgMHpcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMy41IDEwLjVhMS41IDEuNSAwIDExLTMgMCAxLjUgMS41IDAgMDEzIDB6TTkgMTVjLjI4NC0xLjIyMyAxLjUxOS0yLjE0MyAzLTIuMTQzczIuNzE2LjkyIDMgMi4xNDNIOXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQnJhbmNoVXNlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQnJvb20gPSBmdW5jdGlvbiBFdWlJY29uQnJvb20oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zLjczMiAxMy4wOTZsLS4xOTctLjE5NyAyLjgzLTIuODI4LjcwNi43MDctMi44MjkgMi44MjguNzA4LjcwOCAyLjgyOC0yLjgyOGExIDEgMCAwMDAtMS40MTRMNS42NTggNy45NWEuOTkzLjk5MyAwIDAwLS43MDgtLjI5My45OTQuOTk0IDAgMDAtLjcwOC4yOTNsLTIuODI4IDIuODI5LjcwNy43MDcgMi44MjktMi44My43MDcuNzA4LTIuODI5IDIuODI5LjkwNC45MDN6bTEuMjE4LTYuNDRjLjUxMiAwIDEuMDIzLjE5NiAxLjQxNC41ODdsMi4xMjEgMi4xMmEyIDIgMCAwMTAgMi44M0w0Ljk1IDE1LjcyOCAwIDEwLjc3OGwzLjUzNS0zLjUzNWExLjk5MyAxLjk5MyAwIDAxMS40MTUtLjU4NnpNMTQuMDIgMWwuNzA4LjcwNy02Ljk1IDYuOTUtLjcwNy0uNzA3TDE0LjAyMSAxelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ccm9vbTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQnJ1c2ggPSBmdW5jdGlvbiBFdWlJY29uQnJ1c2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMS45OTMgOC4xN2MwIC44My0uNjczIDEuNTA3LTEuNDk5IDEuNTA3SDUuNDk4QTEuNTA1IDEuNTA1IDAgMDEzLjk5OSA4LjE3VjYuNjYyaDcuOTk0VjguMTd6bS0yLjk5OCA1Ljk5OGMwIC40NTUtLjQ0OC44MjctLjk5OS44MjctLjU1IDAtMS0uMzcyLTEtLjgyN3YtMy40ODZoMnYzLjQ4NnpNNCA1LjY1OFYxLjAwNWgxLjI2MnY0LjY1M0g0em0yLjI2MSAwVjEuMDA1aDEuMjQ0djQuNjUzSDYuMjZ6bTIuMjQ0IDBWMS4wMDVoMS4yMzV2NC42NTNIOC41MDR6bTIuMjM0IDBWMS4wMDVoMS4yNTR2NC42NTNoLTEuMjU0ek0zLjAwOCAwTDMgOC4xN2EyLjUwOSAyLjUwOSAwIDAwMi40OTggMi41MTJoLjV2My40ODZjMCAxLjAxLjg5NiAxLjgzMiAxLjk5OCAxLjgzMiAxLjEwMiAwIDEuOTk4LS44MjIgMS45OTgtMS44MzJ2LTMuNDg2aC41YTIuNTA5IDIuNTA5IDAgMDAyLjQ5OC0yLjUxMkwxMyAwSDMuMDA4elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25CcnVzaDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQnVnID0gZnVuY3Rpb24gRXVpSWNvbkJ1ZyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEwLjY1MSA1LjEyNmwuOTIyLS40NTUuODg0LTIuMzQzYS41LjUgMCAwMS45MzkuMzQ0TDEyLjM3NCA1LjM5bC0xLjQ1LjcxN0E1LjMgNS4zIDAgMDExMSA3aDEuMDQzbDIuMyAyLjE5OGEuNS41IDAgMDEtLjY5Mi43MjNMMTEuNjQyIDhoLS43MzdjLS4wOS40NjYtLjI0Ljg5OS0uNDQxIDEuMjgzbC44OTIuNDkgMS4yNzggMy41NTRhLjUuNSAwIDAxLS45NC4zNDJsLTEuMTUtMy4yLS42NTUtLjM2QzkuMzczIDEwLjY2NSA4LjcxNiAxMSA4IDExcy0xLjM3NC0uMzM1LTEuODktLjg5M2wtLjY1OC4zNjEtMS4xNSAzLjIwMWEuNS41IDAgMTEtLjk0LS4zNDJsMS4yNzktMy41NTQuODk1LS40OTFBNC43IDQuNyAwIDAxNS4wOTUgOGgtLjc0bC0yLjAxIDEuOTJhLjUuNSAwIDAxLS42OS0uNzIyTDMuOTUyIDdINWE1LjMgNS4zIDAgMDEuMDc1LS44OTJMMy42MjMgNS4zOSAyLjYgMi42NzJhLjUuNSAwIDExLjkzOS0uMzQ0bC44ODQgMi4zNDMuOTI0LjQ1N2MuMTctLjQyOC4zOTctLjgxLjY2OC0xLjEyOGguNTdhMS41IDEuNSAwIDExMi44MyAwaC41NjhjLjI3LjMxOC40OTcuNjk5LjY2NyAxLjEyNnpNOCA0YS41LjUgMCAxMDAtMSAuNS41IDAgMDAwIDF6bTEuNzUxIDEuNTcxQTMuMzI2IDMuMzI2IDAgMDA5LjQ3NiA1SDYuNTI0Yy0uMTA3LjE3NS0uMi4zNjctLjI3Ni41NzMtLjExLjI5NS0uMTg2LjYxOC0uMjIzLjk1N2E0LjM1NCA0LjM1NCAwIDAwLjA5IDEuNDY1Yy4wNzEuMjk0LjE3Mi41NjUuMjk1LjgwNi4xNjguMzI4LjM4LjYwMS42MTYuODAzLjI5NS4yNTMuNjMxLjM5Ni45NzQuMzk2LjM0MiAwIC42NzgtLjE0Mi45NzMtLjM5NC4yMzctLjIwMy40NDgtLjQ3Ni42MTYtLjgwM2EzLjYyIDMuNjIgMCAwMC4yOTYtLjgwNyA0LjI2MyA0LjI2MyAwIDAwLjA5LTEuNDY2IDMuOTg4IDMuOTg4IDAgMDAtLjIyNC0uOTU5elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25CdWc7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkJ1bGxzZXllID0gZnVuY3Rpb24gRXVpSWNvbkJ1bGxzZXllKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCAxNEE2IDYgMCAxMDggMmE2IDYgMCAwMDAgMTJ6bTAgMUE3IDcgMCAxMTggMWE3IDcgMCAwMTAgMTR6bTAtM2E0IDQgMCAxMDAtOCA0IDQgMCAwMDAgOHptMC0xYTMgMyAwIDExMC02IDMgMyAwIDAxMCA2em0wLTJhMSAxIDAgMTAwLTIgMSAxIDAgMDAwIDJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkJ1bGxzZXllOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25DYWxlbmRhciA9IGZ1bmN0aW9uIEV1aUljb25DYWxlbmRhcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE0IDR2LS45OTRDMTQgMi40NSAxMy41NSAyIDEyLjk5NCAySDExdjFoLTFWMkg2djFINVYySDMuMDA2QzIuNDUgMiAyIDIuNDUgMiAzLjAwNnY5Ljk4OEMyIDEzLjU1IDIuNDUgMTQgMy4wMDYgMTRoOS45ODhDMTMuNTUgMTQgMTQgMTMuNTUgMTQgMTIuOTk0VjVIMlY0aDEyem0tMy0zaDEuOTk0QzE0LjEwMiAxIDE1IDEuODk3IDE1IDMuMDA2djkuOTg4QTIuMDA1IDIuMDA1IDAgMDExMi45OTQgMTVIMy4wMDZBMi4wMDUgMi4wMDUgMCAwMTEgMTIuOTk0VjMuMDA2QzEgMS44OTggMS44OTcgMSAzLjAwNiAxSDVWMGgxdjFoNFYwaDF2MXpNNCA3aDJ2MUg0Vjd6bTMgMGgydjFIN1Y3em0zIDBoMnYxaC0yVjd6TTQgOWgydjFINFY5em0zIDBoMnYxSDdWOXptMyAwaDJ2MWgtMlY5em0tNiAyaDJ2MUg0di0xem0zIDBoMnYxSDd2LTF6bTMgMGgydjFoLTJ2LTF6XCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25DYWxlbmRhcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQ2hlY2sgPSBmdW5jdGlvbiBFdWlJY29uQ2hlY2soX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNi41IDEyYS41MDIuNTAyIDAgMDEtLjM1NC0uMTQ2bC00LTRhLjUwMi41MDIgMCAwMS43MDgtLjcwOEw2LjUgMTAuNzkzbDYuNjQ2LTYuNjQ3YS41MDIuNTAyIDAgMDEuNzA4LjcwOGwtNyA3QS41MDIuNTAyIDAgMDE2LjUgMTJcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ2hlY2s7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkNoZWNrSW5DaXJjbGVGaWxsZWQgPSBmdW5jdGlvbiBFdWlJY29uQ2hlY2tJbkNpcmNsZUZpbGxlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk04IDE2QTggOCAwIDExOCAwYTggOCAwIDAxMCAxNnptMy42NS0xMC44NTdMNi45MSA5LjggNC4zNSA3LjI4NmEuNS41IDAgMDAtLjcuNzE0bDIuOTA5IDIuODU3YS41LjUgMCAwMC43IDBsNS4wOTEtNWEuNS41IDAgMTAtLjctLjcxNHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ2hlY2tJbkNpcmNsZUZpbGxlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQ2hlZXIgPSBmdW5jdGlvbiBFdWlJY29uQ2hlZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00LjkzNCAzLjA2M2ExLjUgMS41IDAgMDEuNTQ3LjMyMWwuMTEyLjExNSA2LjA3IDYuOTE1YTEuNSAxLjUgMCAwMS0uNjQ2IDIuNDFsLS4xNDIuMDQtOS4wMzEgMi4wOTdBMS41IDEuNSAwIDAxLjAzNyAxMy4xOWwuMDQzLS4xNTlMMy4wNCA0LjAyYTEuNSAxLjUgMCAwMTEuODkzLS45NTd6TTQuMDI3IDQuMjVsLS4wMzYuMDgzLTIuOTYxIDkuMDExYS41LjUgMCAwMC40OTguNjU2bC4wOS0uMDEzIDIuOTM3LS42ODEtMS4zOTktMS41MDhhLjUuNSAwIDAxLjY2Ni0uNzRsLjA2Ny4wNiAxLjc4OCAxLjkyNyAyLjYzNC0uNjExLTMuMTk4LTMuNjAxYS41LjUgMCAwMS42ODItLjcyNmwuMDY2LjA2MiAzLjU1OSA0LjAwNyAxLjIyOS0uMjg0YS41LjUgMCAwMC4xNS0uMDYzbC4wNjctLjA0OWEuNS41IDAgMDAuMDk5LS42MzJsLS4wNTMtLjA3My02LjA3LTYuOTE2YS41LjUgMCAwMC0uMTM4LS4xMWwtLjA4Mi0uMDM1LS4wODgtLjAyYS41LjUgMCAwMC0uNTA3LjI1NnptMTEuNjYgNS4wMzlhMi41IDIuNSAwIDAxLS45NzUgMy4zOTkuNS41IDAgMDEtLjQ4NS0uODc1IDEuNSAxLjUgMCAwMC0xLjQ1NC0yLjYyNC41LjUgMCAwMS0uNDg1LS44NzUgMi41IDIuNSAwIDAxMy4zOTkuOTc1em0tNS4wMy02LjIwNmEuNS41IDAgMDEuMzM4LjU0NGwtLjAyLjA4OC0uNjc3IDIuMDM1IDIuMDY4LS43MjFhLjUuNSAwIDAxLjYuMjI1bC4wMzYuMDgyYS41LjUgMCAwMS0uMjI1LjZsLS4wODIuMDM3TDkuNjcgNy4wMjhhLjUuNSAwIDAxLS42NTktLjU1bC4wMi0uMDguOTk1LTNhLjUuNSAwIDAxLjYzMi0uMzE2ek0xNC41IDRhLjUuNSAwIDExMCAxIC41LjUgMCAwMTAtMXpNNy44NjIuNDAzYTIuNSAyLjUgMCAwMS43MzUgMy40NTkuNS41IDAgMDEtLjgzOS0uNTQ1IDEuNSAxLjUgMCAxMC0yLjUxNi0xLjYzNC41LjUgMCAwMS0uODM5LS41NDVBMi41IDIuNSAwIDAxNy44NjIuNDAzek0xMy41IDJhLjUuNSAwIDExMCAxIC41LjUgMCAwMTAtMXptLTMtMWEuNS41IDAgMTEwIDEgLjUuNSAwIDAxMC0xem00LTFhLjUuNSAwIDExMCAxIC41LjUgMCAwMTAtMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ2hlZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkNsb2NrID0gZnVuY3Rpb24gRXVpSWNvbkNsb2NrKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTcuNSAxM0E1LjUwNiA1LjUwNiAwIDAxMiA3LjVDMiA0LjQ2NyA0LjQ2NyAyIDcuNSAyUzEzIDQuNDY3IDEzIDcuNSAxMC41MzMgMTMgNy41IDEzbTAtMTJhNi41IDYuNSAwIDEwMCAxMyA2LjUgNi41IDAgMDAwLTEzbTMgNkg4VjMuNWEuNS41IDAgMDAtMSAwdjRhLjUuNSAwIDAwLjUuNWgzYS41LjUgMCAwMDAtMVwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25DbG9jazsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQ2xvdWREcml6emxlID0gZnVuY3Rpb24gRXVpSWNvbkNsb3VkRHJpenpsZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuMzQ4IDMuNzYxQTMuOTk1IDMuOTk1IDAgMDE4IDdhLjUuNSAwIDAxLTEgMCAzIDMgMCAxMC00Ljg3OCAyLjM0LjUuNSAwIDAxLS42MjcuNzc5IDQgNCAwIDAxMy45NzMtNi44NCA1LjUwMiA1LjUwMiAwIDAxMTAuMDk2IDQuMzcuNS41IDAgMTEtLjkyLS4zOSA0LjUgNC41IDAgMTAtOC4yOTYtMy40OTd6bS0xLjYxIDQuOTM1YS41LjUgMCAxMS43NzUuNjMzbC0xLjQ2NiAxLjc5MmEuNS41IDAgMTEtLjc3NC0uNjMzbDEuNDY2LTEuNzkyem0tMy4xMiAzLjY0N2EuNS41IDAgMDEuNzc0LjYzNGwtMS41MDUgMS44NGEuNS41IDAgMDEtLjc3NC0uNjM0bDEuNTA1LTEuODR6bTcuNjItMy42NDdhLjUuNSAwIDAxLjc3NS42MzNsLTEuNDY2IDEuNzkyYS41LjUgMCAxMS0uNzc0LS42MzNsMS40NjYtMS43OTJ6bS0zLjEyIDMuNjQ3YS41LjUgMCAwMS43NzQuNjM0bC0xLjUwNSAxLjg0YS41LjUgMCAwMS0uNzc0LS42MzRsMS41MDUtMS44NHptNy42Mi0zLjY0N2EuNS41IDAgMTEuNzc1LjYzM2wtMS40NjYgMS43OTJhLjUuNSAwIDExLS43NzQtLjYzM2wxLjQ2Ni0xLjc5MnptLTMuMTIgMy42NDdhLjUuNSAwIDAxLjc3NC42MzRsLTEuNTA1IDEuODRhLjUuNSAwIDAxLS43NzQtLjYzNGwxLjUwNS0xLjg0elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25DbG91ZERyaXp6bGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkNsb3VkU3Rvcm15ID0gZnVuY3Rpb24gRXVpSWNvbkNsb3VkU3Rvcm15KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNy40MjEgNC45M2EuNS41IDAgMTEtLjg3LjQ5IDMgMyAwIDEwLTQuNDMgMy45MTguNS41IDAgMDEtLjYyNi43OCA0IDQgMCAwMTMuOTczLTYuODRsLjAzMi4wMThWMy4yOGE1LjUgNS41IDAgMTE3LjAwMyA3LjM1Ny41LjUgMCAxMS0uMzYtLjkzNCA0LjUgNC41IDAgMTAtNS43Ny01LjkyM2MuNDIuMzEuNzc4LjcwMSAxLjA1IDEuMTVoLS4wMDJ6TTkuNiAxMWMuNjY5LjAwMi43OTQuNjcuMzYgMS4wMDNsLTQuNjggMy44ODJjLS40NTcuMzc4LTEuMDUzLS4yNi0uNjQzLS42ODlsMy4wOC0zLjE5M0E1NDExLjcgNTQxMS43IDAgMDE1LjExMyAxMmMtLjY2OC0uMDAxLS43OTMtLjY2OS0uMzYtMS4wMDNsNC42OC0zLjg4MWMuNDU4LS4zNzkgMS4wNTMuMjYuNjQzLjY4OGwtMy4wOCAzLjE5M0w5LjYgMTF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNsb3VkU3Rvcm15OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25DbG91ZFN1bm55ID0gZnVuY3Rpb24gRXVpSWNvbkNsb3VkU3VubnkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMC43NDYgNS4wMDVBNS41IDUuNSAwIDAxMTAuNSAxNkg0YTQgNCAwIDAxLTEuNjEtNy42NjNBNC40NzMgNC40NzMgMCAwMTIuMDI5IDdILjVhLjUuNSAwIDAxMC0xaDEuNTI3YTQuNDc5IDQuNDc5IDAgMDEuOTU3LTIuMzA5TDEuNjQ2IDIuMzU0YS41LjUgMCAxMS43MDgtLjcwOEwzLjY5IDIuOTg0QTQuNDc5IDQuNDc5IDAgMDE2IDIuMDI3Vi41YS41LjUgMCAwMTEgMHYxLjUyOGE0LjQ5MyA0LjQ5MyAwIDAxMi4zMDkuOTU2bDEuMzM3LTEuMzM4YS41LjUgMCAwMS43MDguNzA4TDEwLjAxNiAzLjY5Yy4zMTEuMzg4LjU2LjgzMS43MyAxLjMxNHpNNCAxNWg2LjVhNC41IDQuNSAwIDEwLTQuMTUyLTYuMjM5QTMuOTk1IDMuOTk1IDAgMDE4IDEyYS41LjUgMCAxMS0xIDAgMyAzIDAgMTAtMyAzem01LjY5MS05Ljk0YTMuNSAzLjUgMCAxMC02LjMzIDIuOTkxIDQuMDI5IDQuMDI5IDAgMDEyLjEwNi4yMjcgNS41MDUgNS41MDUgMCAwMTQuMjI0LTMuMjE5elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25DbG91ZFN1bm55OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25DbHVzdGVyID0gZnVuY3Rpb24gRXVpSWNvbkNsdXN0ZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTQuNSA3YTIuNSAyLjUgMCAxMDAtNSAyLjUgMi41IDAgMDAwIDV6bTAtNmEzLjUgMy41IDAgMDEzLjQ2NSAzaDMuMTJhMS41IDEuNSAwIDExMCAxaC0zLjEyYTMuNDgyIDMuNDgyIDAgMDEtLjY2MiAxLjU5NmwyLjEgMi4xQTMuNSAzLjUgMCAxMTguMDM2IDEyaC0zLjEyYTEuNSAxLjUgMCAxMTAtLjk5OWgzLjEyYTMuNDgyIDMuNDgyIDAgMDEuNjYyLTEuNTk2bC0yLjEtMi4xQTMuNSAzLjUgMCAxMTQuNSAxek0xMiA0LjVhLjUuNSAwIDEwMSAwIC41LjUgMCAwMC0xIDB6bS0uNSA5LjVhMi41IDIuNSAwIDExMC01IDIuNSAyLjUgMCAwMTAgNXpNNCAxMS41YS41LjUgMCAxMS0xIDAgLjUuNSAwIDAxMSAwelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25DbHVzdGVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Db2xvciA9IGZ1bmN0aW9uIEV1aUljb25Db2xvcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEzIDExYzEuMzM0IDEuMzkzIDIgMi40MzUgMiAzLjEyNUMxNSAxNS4xNjEgMTQuMTA1IDE2IDEzIDE2Yy0xLjEwNCAwLTItLjg0LTItMS44NzUgMC0uNjkuNjY3LTEuNzMyIDItMy4xMjV6TTUuODU3LjE1bDYuMzQgNi40NS4wMTYuMDIuMzI0LjMyMWExLjUgMS41IDAgMDEuMTEgMi4wMDZsLS4xMDMuMTE0LTQuNDc0IDQuNTEzYTEuNSAxLjUgMCAwMS0yLjEyMy4wMDhMMS40NjQgOS4wNmExLjUgMS41IDAgMDEuMDA3LTIuMTJsNC40NzItNC40NWMuMTQ1LS4xNDYuMzEzLS4yNTQuNDkyLS4zMjdMNS4xNDQuODVhLjUuNSAwIDAxLjcxMy0uN3ptMS40OTYgMy4wNDlhLjUuNSAwIDAwLS43MDUgMEwyLjE3NyA3LjY1YS40OTguNDk4IDAgMDAtLjE0OC4zNWg5Ljk1YS40OTguNDk4IDAgMDAtLjE0OC0uMzVMNy4zNTMgMy4yelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Db2xvcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQ29tcHV0ZSA9IGZ1bmN0aW9uIEV1aUljb25Db21wdXRlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNCAzYTEgMSAwIDAwLTEgMXY4YTEgMSAwIDAwMSAxaDhhMSAxIDAgMDAxLTFWNGExIDEgMCAwMC0xLTFINHptMTAgOHYxYTIgMiAwIDAxLTIgMmgtMXYyaC0xdi0ySDguNXYyaC0xdi0ySDZ2Mkg1di0ySDRhMiAyIDAgMDEtMi0ydi0xSDB2LTFoMlY4LjVIMHYtMWgyVjZIMFY1aDJWNGEyIDIgMCAwMTItMmgxVjBoMXYyaDEuNVYwaDF2MkgxMFYwaDF2MmgxYTIgMiAwIDAxMiAydjFoMnYxaC0ydjEuNWgydjFoLTJWMTBoMnYxaC0yelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicmVjdFwiLCB7XG4gICAgd2lkdGg6IDYsXG4gICAgaGVpZ2h0OiA2LFxuICAgIHg6IDUsXG4gICAgeTogNSxcbiAgICByeDogMVxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ29tcHV0ZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQ29uc29sZSA9IGZ1bmN0aW9uIEV1aUljb25Db25zb2xlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMS4xNTcgMTIuMjI0TDUuNzY4IDguMzJhLjQwNC40MDQgMCAwMDAtLjY0bC00LjYxLTMuOTA0YS40MDcuNDA3IDAgMDEwLS42NDMuNjA4LjYwOCAwIDAxLjc1OSAwbDQuNjEgMy45MDRjLjYzMS41MzQuNjMgMS4zOTMgMCAxLjkyNmwtNC42MSAzLjkwNGEuNjA4LjYwOCAwIDAxLS43NiAwIC40MDcuNDA3IDAgMDEwLS42NDN6TTkgMTJoNnYxSDl2LTF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNvbnNvbGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkNvbnRhaW5lciA9IGZ1bmN0aW9uIEV1aUljb25Db250YWluZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTAgMi41QS41LjUgMCAwMS41IDJoMTVhLjUuNSAwIDAxMCAxSDE1djEwaC41YS41LjUgMCAwMTAgMUguNWEuNS41IDAgMDEwLTFIMVYzSC41YS41LjUgMCAwMS0uNS0uNXpNMiAzaDEydjEwSDJWM3ptMyAyYS41LjUgMCAwMC0uNS41djVhLjUuNSAwIDAwMSAwdi01QS41LjUgMCAwMDUgNXptNS41LjVhLjUuNSAwIDAxMSAwdjVhLjUuNSAwIDAxLTEgMHYtNXpNOCA1YS41LjUgMCAwMC0uNS41djVhLjUuNSAwIDAwMSAwdi01QS41LjUgMCAwMDggNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ29udGFpbmVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Db250aW51aXR5QWJvdmUgPSBmdW5jdGlvbiBFdWlJY29uQ29udGludWl0eUFib3ZlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMS41IDNhLjUuNSAwIDAwLS41LjV2OWEuNS41IDAgMDAxIDB2LTlhLjUuNSAwIDAwLS41LS41em0zIDBhLjUuNSAwIDAwLS41LjV2OWEuNS41IDAgMDAxIDBWOWg2djEuNWEuNS41IDAgMDAuODIuMzg0bDMtMi41YS41LjUgMCAwMDAtLjc2OGwtMy0yLjVBLjUuNSAwIDAwMTEgNS41VjdINVYzLjVhLjUuNSAwIDAwLS41LS41elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Db250aW51aXR5QWJvdmU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkNvbnRpbnVpdHlBYm92ZUJlbG93ID0gZnVuY3Rpb24gRXVpSWNvbkNvbnRpbnVpdHlBYm92ZUJlbG93KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNi41IDNhLjUuNSAwIDAxLjUuNXY5YS41LjUgMCAwMS0xIDBWOUg0djEuNWEuNS41IDAgMDEtLjgyLjM4NGwtMy0yLjVhLjUuNSAwIDAxMC0uNzY4bDMtMi41QS41LjUgMCAwMTQgNS41VjdoMlYzLjVhLjUuNSAwIDAxLjUtLjV6bTMgMGEuNS41IDAgMDAtLjUuNXY5YS41LjUgMCAwMDEgMFY5aDJ2MS41YS41LjUgMCAwMC44Mi4zODRsMy0yLjVhLjUuNSAwIDAwMC0uNzY4bC0zLTIuNUEuNS41IDAgMDAxMiA1LjVWN2gtMlYzLjVhLjUuNSAwIDAwLS41LS41elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Db250aW51aXR5QWJvdmVCZWxvdzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQ29udGludWl0eUJlbG93ID0gZnVuY3Rpb24gRXVpSWNvbkNvbnRpbnVpdHlCZWxvdyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTExLjUgM2EuNS41IDAgMDEuNS41djlhLjUuNSAwIDAxLTEgMFY5SDV2MS41YS41LjUgMCAwMS0uODIuMzg0bC0zLTIuNWEuNS41IDAgMDEwLS43NjhsMy0yLjVBLjUuNSAwIDAxNSA1LjVWN2g2VjMuNWEuNS41IDAgMDEuNS0uNXptMyAwYS41LjUgMCAwMS41LjV2OWEuNS41IDAgMDEtMSAwdi05YS41LjUgMCAwMS41LS41elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Db250aW51aXR5QmVsb3c7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkNvbnRpbnVpdHlXaXRoaW4gPSBmdW5jdGlvbiBFdWlJY29uQ29udGludWl0eVdpdGhpbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTS41IDNhLjUuNSAwIDAwLS41LjV2OWEuNS41IDAgMDAxIDB2LTlBLjUuNSAwIDAwLjUgM3ptMTQuNS41YS41LjUgMCAwMTEgMHY5YS41LjUgMCAwMS0xIDB2LTl6bS00LjcxMiAxLjU0N2EuNS41IDAgMDEuNTMyLjA2OWwzIDIuNWEuNS41IDAgMDEwIC43NjhsLTMgMi41QS41LjUgMCAwMTEwIDEwLjVWOUg2djEuNWEuNS41IDAgMDEtLjgyLjM4NGwtMy0yLjVhLjUuNSAwIDAxMC0uNzY4bDMtMi41QS41LjUgMCAwMTYgNS41VjdoNFY1LjVhLjUuNSAwIDAxLjI4OC0uNDUzelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Db250aW51aXR5V2l0aGluOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Db250cm9sc0hvcml6b250YWwgPSBmdW5jdGlvbiBFdWlJY29uQ29udHJvbHNIb3Jpem9udGFsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTguMDUgMTBhMi41IDIuNSAwIDAxNC45IDBoMS41NWEuNS41IDAgMTEwIDFoLTEuNTVhMi41IDIuNSAwIDAxLTQuOSAwSDEuNWEuNS41IDAgMTEwLTFoNi41NXptLS4xLTRhMi41IDIuNSAwIDAxLTQuOSAwSDEuNWEuNS41IDAgMDEwLTFoMS41NWEyLjUgMi41IDAgMDE0LjkgMGg2LjU1YS41LjUgMCAxMTAgMUg3Ljk1ek00IDUuNWExLjUgMS41IDAgMTAzIDAgMS41IDEuNSAwIDAwLTMgMHptOCA1YTEuNSAxLjUgMCAxMC0zIDAgMS41IDEuNSAwIDAwMyAwelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Db250cm9sc0hvcml6b250YWw7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkNvbnRyb2xzVmVydGljYWwgPSBmdW5jdGlvbiBFdWlJY29uQ29udHJvbHNWZXJ0aWNhbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMCA3Ljk1YTIuNSAyLjUgMCAwMTAtNC45VjEuNWEuNS41IDAgMTExIDB2MS41NWEyLjUgMi41IDAgMDEwIDQuOXY2LjU1YS41LjUgMCAxMS0xIDBWNy45NXptLTQgLjFhMi41IDIuNSAwIDAxMCA0Ljl2MS41NWEuNS41IDAgMTEtMSAwdi0xLjU1YTIuNSAyLjUgMCAwMTAtNC45VjEuNWEuNS41IDAgMDExIDB2Ni41NXpNNS41IDEyYTEuNSAxLjUgMCAxMDAtMyAxLjUgMS41IDAgMDAwIDN6bTUtOGExLjUgMS41IDAgMTAwIDMgMS41IDEuNSAwIDAwMC0zelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Db250cm9sc1ZlcnRpY2FsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Db3B5ID0gZnVuY3Rpb24gRXVpSWNvbkNvcHkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMS40IDBjLjIzNSAwIC40Ni4wOTkuNjIyLjI3M2wyLjc0MyAzYy4xNTEuMTYyLjIzNS4zNzguMjM1LjYwMnY5LjI1YS44NjcuODY3IDAgMDEtLjg1Ny44NzVIMy44NTdBLjg2Ny44NjcgMCAwMTMgMTMuMTI1Vi44NzVDMyAuMzkyIDMuMzg0IDAgMy44NTcgMEgxMS40ek0xNCA0aC0yLjZhLjQuNCAwIDAxLS40LS40VjFINHYxMmgxMFY0elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMyAxSDJhMSAxIDAgMDAtMSAxdjEzYTEgMSAwIDAwMSAxaDEwYTEgMSAwIDAwMS0xdi0xaC0xdjFIMlYyaDFWMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ29weTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQ29weUNsaXBib2FyZCA9IGZ1bmN0aW9uIEV1aUljb25Db3B5Q2xpcGJvYXJkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMiAyLjcyOVYyYTEgMSAwIDAxMS0xaDJ2MUgzdjEyaDR2MUgzYTEgMSAwIDAxLTEtMVYyLjcyOXpNMTQgNVYyYTEgMSAwIDAwLTEtMWgtMnYxaDJ2M2gxem0tMSAxaDJ2OUg4VjZoNVY1SDhhMSAxIDAgMDAtMSAxdjlhMSAxIDAgMDAxIDFoN2ExIDEgMCAwMDEtMVY2YTEgMSAwIDAwLTEtMWgtMnYxelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOSAxMGg1VjlIOXYxem0wLTJoNVY3SDl2MXptMCA0aDV2LTFIOXYxem0wIDJoNXYtMUg5djF6bTItMTJWMWExIDEgMCAwMC0xLTFINmExIDEgMCAwMC0xIDF2MWgxVjFoNHYxaDF6TTUgM2g2VjJINXYxelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Db3B5Q2xpcGJvYXJkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Dcm9zcyA9IGZ1bmN0aW9uIEV1aUljb25Dcm9zcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuMjkzIDhMMy4xNDYgMy44NTRhLjUuNSAwIDExLjcwOC0uNzA4TDggNy4yOTNsNC4xNDYtNC4xNDdhLjUuNSAwIDAxLjcwOC43MDhMOC43MDcgOGw0LjE0NyA0LjE0NmEuNS41IDAgMDEtLjcwOC43MDhMOCA4LjcwN2wtNC4xNDYgNC4xNDdhLjUuNSAwIDAxLS43MDgtLjcwOEw3LjI5MyA4elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Dcm9zczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQ3Jvc3NJbkFDaXJjbGVGaWxsZWQgPSBmdW5jdGlvbiBFdWlJY29uQ3Jvc3NJbkFDaXJjbGVGaWxsZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04Ljc0NiA4bDMuMS0zLjFhLjUyNy41MjcgMCAxMC0uNzQ2LS43NDZMOCA3LjI1NGwtMy4xLTMuMWEuNTI3LjUyNyAwIDEwLS43NDYuNzQ2bDMuMSAzLjEtMy4xIDMuMWEuNTI3LjUyNyAwIDEwLjc0Ni43NDZsMy4xLTMuMSAzLjEgMy4xYS41MjcuNTI3IDAgMTAuNzQ2LS43NDZMOC43NDYgOHpNOCAxNkE4IDggMCAxMTggMGE4IDggMCAwMTAgMTZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNyb3NzSW5BQ2lyY2xlRmlsbGVkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Dcm9zc2hhaXJzID0gZnVuY3Rpb24gRXVpSWNvbkNyb3NzaGFpcnMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01LjgyMiAxLjg3NGEuNS41IDAgMTEuMzM1Ljk0MiA1LjUxNyA1LjUxNyAwIDAwLTMuMzQgMy4zNDEuNS41IDAgMTEtLjk0My0uMzM1IDYuNTE3IDYuNTE3IDAgMDEzLjk0OC0zLjk0OHpNMS44NjQgMTAuMTVhLjUuNSAwIDExLjk0NC0uMzMgNS41MTcgNS41MTcgMCAwMDMuMzY1IDMuMzcuNS41IDAgMDEtLjMzMy45NDMgNi41MTcgNi41MTcgMCAwMS0zLjk3Ni0zLjk4M3ptOC4zMDIgMy45ODFhLjUuNSAwIDExLS4zMzMtLjk0MyA1LjUxNyA1LjUxNyAwIDAwMy4zNDctMy4zMzIuNS41IDAgMTEuOTQxLjMzNyA2LjUxNyA2LjUxNyAwIDAxLTMuOTU1IDMuOTM4em0zLjk2OC04LjI4NWEuNS41IDAgMTEtLjk0My4zMzFBNS41MTcgNS41MTcgMCAwMDkuODUgMi44MmEuNS41IDAgMDEuMzM3LS45NDIgNi41MTcgNi41MTcgMCAwMTMuOTQ2IDMuOTY4ek04LjUgMy41YS41LjUgMCAwMS0xIDBWLjk5N2EuNS41IDAgMDExIDBWMy41em0tNC45OTcgNGEuNS41IDAgMDEwIDFIMWEuNS41IDAgMDEwLTFoMi41MDN6TTcuNSAxMi40OTdhLjUuNSAwIDAxMSAwVjE1YS41LjUgMCAxMS0xIDB2LTIuNTAzek0xMi40OTcgOC41YS41LjUgMCAwMTAtMUgxNWEuNS41IDAgMTEwIDFoLTIuNTAzek04IDlhMSAxIDAgMTEwLTIgMSAxIDAgMDEwIDJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNyb3NzaGFpcnM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkN1cnJlbmN5ID0gZnVuY3Rpb24gRXVpSWNvbkN1cnJlbmN5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIuOTUgMS42MzZsMS40MTQgMS40MTQtMi4xOTIgMi4xOTNDMTIuNjk1IDYuMDMzIDEzIDYuOTggMTMgOGMwIDEuMDItLjMwNSAxLjk2Ny0uODI4IDIuNzU3bDIuMTkyIDIuMTkzLTEuNDE0IDEuNDE0LTIuMTkzLTIuMTkyQTQuOTc3IDQuOTc3IDAgMDE4IDEzYTQuOTc3IDQuOTc3IDAgMDEtMi43NTctLjgyOEwzLjA1IDE0LjM2NCAxLjYzNiAxMi45NWwyLjE5Mi0yLjE5M0E0Ljk3NyA0Ljk3NyAwIDAxMyA4YzAtMS4wMi4zMDUtMS45NjcuODI4LTIuNzU3TDEuNjM2IDMuMDUgMy4wNSAxLjYzNmwyLjE5MyAyLjE5MkE0Ljk3NyA0Ljk3NyAwIDAxOCAzYzEuMDIgMCAxLjk2Ny4zMDUgMi43NTcuODI4bDIuMTkzLTIuMTkyek04IDVhMi45OSAyLjk5IDAgMDAtMS4xNjguMjM2bC0uMTI2LjA1Ny0uMjE4LjExNi0uMTMyLjA4MS0uMDczLjA1YTMuMDEzIDMuMDEzIDAgMDAtLjI0MS4xODdsLS4xMTMuMTAzLS4xNDcuMTVjLS4wNS4wNTQtLjA5Ny4xMS0uMTQyLjE2OGwtLjEuMTM1LS4wNS4wNzMtLjA2LjA5N2MtLjA1LjA4Mi0uMDk2LjE2Ni0uMTM3LjI1M2wtLjA1Ny4xMjZBMi45OSAyLjk5IDAgMDA1IDhjMCAuNDE0LjA4NC44MDkuMjM2IDEuMTY4bC4wNTcuMTI2LjExNi4yMTguMDgxLjEzMmMuMDU5LjA4OS4xMjEuMTc1LjE4OS4yNTdsLjE1LjE3LjE1MS4xNDdjLjA1Ni4wNTEuMTE0LjEuMTc0LjE0N2wuMTQyLjEwNWMuMDU0LjAzNy4xMDkuMDcyLjE2NS4xMDZsLS4xMjQtLjA3OS4wOTIuMDYuMDk0LjA1NWMuNDM2LjI0Ny45NC4zODggMS40NzcuMzg4YTIuOTkgMi45OSAwIDAwMS4xNjgtLjIzNmwuMTI1LS4wNTYuMjEzLS4xMTMuMTUxLS4wOTQuMDUtLjAzNGEzLjAxMSAzLjAxMSAwIDAwLjMyMy0uMjU4bC0uMTUuMTI5LjA5LS4wNzUuMTY4LS4xNTkuMDgtLjA4NGMuMDUxLS4wNTYuMS0uMTE0LjE0Ny0uMTc0bC4xMDUtLjE0Mi4xMDYtLjE2NWMuMDQ3LS4wOC4wOTEtLjE2MS4xMzEtLjI0NWwuMDU3LS4xMjZBMi45OSAyLjk5IDAgMDAxMSA4YTIuOTkgMi45OSAwIDAwLS4yMzYtMS4xNjhsLS4wNTYtLjEyNS0uMTEyLS4yMTEtLjA5Ni0uMTU1LS4wMzMtLjA0OWEzLjAxMSAzLjAxMSAwIDAwLS4yNTgtLjMyMmwuMTI5LjE1LS4wNzUtLjA5LS4xNTktLjE2OC0uMDg0LS4wOGEzLjAxNSAzLjAxNSAwIDAwLS4xNzQtLjE0N2wtLjE4My0uMTMyLS4xMjQtLjA3OWEyLjk5MyAyLjk5MyAwIDAwLS4yNDUtLjEzMWwtLjEyNi0uMDU3QTIuOTkgMi45OSAwIDAwOCA1elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25DdXJyZW5jeTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQ3V0ID0gZnVuY3Rpb24gRXVpSWNvbkN1dChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk01LjE0MiAxMS4wNzRsLTEuOTEyLjU0OGEyLjUzMiAyLjUzMiAwIDExLTEuMzk1LTQuODY3bDEuOTQ3LS41NTlhMi41MzIgMi41MzIgMCAwMTIuNTU1LjcxM2wxLjUzLTUuMzM1Yy4xMzktLjQ4NS42LS44OTcgMS4xNTktMS4yMzguMjctLjE2NC41Mi0uMjc4Ljc3OS0uMzIuODE0LS4xMzIgMS41MDMuNTU4IDEuMjYxIDEuNDIyTDkuNTc0IDYuNjQzbDQuOTg4LTEuNDNjLjg2NC0uMjQyIDEuNTU0LjQ0NyAxLjQyMiAxLjI2LS4wNDIuMjYtLjE1Ni41MS0uMzIuNzgtLjM0MS41Ni0uNzUzIDEuMDItMS4yMzggMS4xNkw5LjUyMyA5LjgxN2EyLjUzIDIuNTMgMCAwMS41NiAyLjRsLS41NiAxLjk0N2EyLjUzMiAyLjUzMiAwIDExLTQuODY3LTEuMzk1bC40ODYtMS42OTZ6bS4zMy0xLjE0OGwuNDgtMS42NzNhMS41MiAxLjUyIDAgMDAtMS44OS0xLjA4M2wtMS45NDguNTU4YTEuNTIgMS41MiAwIDAwLjgzNyAyLjkybDIuNTItLjcyMnptMy43NzMtMi4xMzVsLS4zMyAxLjE0OCA1LjIzMi0xLjVjLjMyNC0uMDkzIDEuMTgyLTEuMzkuNjk0LTEuMjUzTDkuMjQ1IDcuNzkxek01LjYzIDEzLjA0OWExLjUyIDEuNTIgMCAwMDIuOTIuODM3bC41NTktMS45NDdhMS41MiAxLjUyIDAgMDAtMS41NTMtMS45MzVsMi41MzctOC44NDVjLjEzNi0uNDg4LTEuMTYuMzctMS4yNTMuNjk0TDUuNjMgMTMuMDV6bS45NzMuMjc5bC41NTktMS45NDdhLjUwNi41MDYgMCAxMS45NzMuMjc5bC0uNTU4IDEuOTQ3YS41MDYuNTA2IDAgMTEtLjk3NC0uMjh6bS0zLjkzLTMuNjUzYS41MDYuNTA2IDAgMTEtLjI4LS45NzNsMS45NDctLjU1OGEuNTA2LjUwNiAwIDAxLjI4Ljk3M2wtMS45NDguNTU4elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25DdXQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkRhdGFiYXNlID0gZnVuY3Rpb24gRXVpSWNvbkRhdGFiYXNlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMiAxMmgxMnYtMS45N2MtMS4yMjUuNTgyLTMuNDU0Ljk3LTYgLjk3cy00Ljc3NS0uMzg4LTYtLjk3VjEyem0tMSAwVjNjMC0xLjEwNSAzLjEzNC0yIDctMnM3IC44OTUgNyAydjljMCAxLjEwNS0zLjEzNCAyLTcgMnMtNy0uODk1LTctMnptMS0zaDEyVjcuMDNjLTEuMjI1LjU4Mi0zLjQ1NC45Ny02IC45N3MtNC43NzUtLjM4OC02LS45N1Y5em0wLTQuOTdWNmgxMlY0LjAzYy0xLjIyNS41ODItMy40NTQuOTctNiAuOTdzLTQuNzc1LS4zODgtNi0uOTd6bTEwLjY3NS0xLjQ4M0MxMS40NjcgMi4yMDIgOS43OTUgMiA4IDJjLTEuNzk0IDAtMy40NjcuMjAyLTQuNjc1LjU0Ny0uNDkyLjE0LS44OC4yOTgtMS4xMzYuNDUzLjI1Ni4xNTUuNjQ0LjMxMiAxLjEzNi40NTNDNC41MzMgMy43OTggNi4yMDUgNCA4IDRjMS43OTQgMCAzLjQ2Ny0uMjAyIDQuNjc1LS41NDcuNDkyLS4xNC44OC0uMjk4IDEuMTM2LS40NTMtLjI1Ni0uMTU1LS42NDQtLjMxMi0xLjEzNi0uNDUzek0yIDZjLjI1Ny4xNTUuODMzLjMxMiAxLjMyNS40NTNDNC41MzMgNi43OTggNi4yMDUgNyA4IDdjMS43OTQgMCAzLjQ2Ny0uMjAyIDQuNjc1LS41NDcuNDkyLS4xNCAxLjA3LS4yOTggMS4zMjctLjQ1M0gyem0wIDNjLjI1Ny4xNTUuODMzLjMxMiAxLjMyNS40NTNDNC41MzMgOS43OTggNi4yMDUgMTAgOCAxMGMxLjc5NCAwIDMuNDY3LS4yMDIgNC42NzUtLjU0Ny40OTItLjE0IDEuMDctLjI5OCAxLjMyNy0uNDUzSDJ6bTAgM2MuMjU3LjE1NS44MzMuMzEyIDEuMzI1LjQ1M0M0LjUzMyAxMi43OTggNi4yMDUgMTMgOCAxM2MxLjc5NCAwIDMuNDY3LS4yMDIgNC42NzUtLjU0Ny40OTItLjE0IDEuMDctLjI5OCAxLjMyNy0uNDUzSDJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkRhdGFiYXNlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25EZXNrdG9wID0gZnVuY3Rpb24gRXVpSWNvbkRlc2t0b3AoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMiAyYTEgMSAwIDAwLTEgMXY3YTEgMSAwIDAwMSAxaDRsLTEgM0gzLjVhLjUuNSAwIDAwMCAxaDlhLjUuNSAwIDAwMC0xSDExbC0xLTNoNGExIDEgMCAwMDEtMVYzYTEgMSAwIDAwLTEtMUgyem0wIDhWM2gxMnY3SDJ6bTUgMWgybDEgM0g2bDEtM3pcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00LjUgNmEuNS41IDAgMDAwIDFoMWEuNS41IDAgMDAwLTFoLTF6bTMgMGEuNS41IDAgMDAwIDFoMWEuNS41IDAgMDAwLTFoLTF6bTIuNS41YS41LjUgMCAwMS41LS41aDFhLjUuNSAwIDAxMCAxaC0xYS41LjUgMCAwMS0uNS0uNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRGVza3RvcDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRG9jdW1lbnQgPSBmdW5jdGlvbiBFdWlJY29uRG9jdW1lbnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMC44IDBjLjI3NCAwIC41MzcuMTEzLjcyNi4zMTJsMy4yIDMuNDI4Yy4xNzYuMTg2LjI3NC40MzMuMjc0LjY4OVYxNWExIDEgMCAwMS0xIDFIMmExIDEgMCAwMS0xLTFWMWExIDEgMCAwMTEtMWg4Ljh6TTE0IDVoLTMuNWEuNS41IDAgMDEtLjUtLjVWMUgydjE0aDEyVjV6bS04LjUgN2EuNS41IDAgMTEwLTFoNWEuNS41IDAgMTEwIDFoLTV6bTAtM2EuNS41IDAgMDEwLTFoNWEuNS41IDAgMTEwIDFoLTV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkRvY3VtZW50OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Eb2N1bWVudEVkaXQgPSBmdW5jdGlvbiBFdWlJY29uRG9jdW1lbnRFZGl0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOC41MDUgOC45OTVsNi40NTMtNi40NC0xLjUtMS41LTYuNDUzIDYuNDQgMS41IDEuNXpNMTIuOTY4LjE5Yy4yNTgtLjIzOC42NTctLjI2LjkxIDBsMS45MjggMS45MjlhLjY0Mi42NDIgMCAwMTAgLjkwOWwtNi43OCA2Ljc4NEEuNjQxLjY0MSAwIDAxOC41NyAxMEg2LjY0M0EuNjQzLjY0MyAwIDAxNiA5LjM1N1Y3LjQzYzAtLjE3LjA2Ny0uMzM1LjE4OC0uNDU1TDEyLjk2OC4xOXpNNC41IDEzYS41LjUgMCAxMTAtMWg3YS41LjUgMCAxMTAgMWgtN3ptNC0xMmEuNS41IDAgMDEwIDFIMnYxM2gxMlY3LjVhLjUuNSAwIDExMSAwVjE1YTEgMSAwIDAxLTEgMUgyYTEgMSAwIDAxLTEtMVYyYTEgMSAwIDAxMS0xaDYuNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRG9jdW1lbnRFZGl0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Eb2N1bWVudGF0aW9uID0gZnVuY3Rpb24gRXVpSWNvbkRvY3VtZW50YXRpb24oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05IDMuNWEuNS41IDAgMTEtMSAwIC41LjUgMCAwMTEgMHpNOSA1djNoMXYxSDhWNkg3VjVoMnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEzLjg1NSAxNC4xNDdhMS4zNCAxLjM0IDAgMDEtLjE1OC0uMjQ2QTEuOTk4IDEuOTk4IDAgMDExMy41IDEzYzAtLjQxNC4xMDMtLjcxMy4xOTctLjkwMWExLjM0IDEuMzQgMCAwMS4xNTgtLjI0NmwuMDAzLS4wMDVBLjUuNSAwIDAwMTQgMTEuNVYuNWEuNS41IDAgMDAtLjUtLjVIMy40NjFsLS4wODMuMDA1YTIuOTU3IDIuOTU3IDAgMDAtMS4xMDIuMjk4IDIuMjU3IDIuMjU3IDAgMDAtLjg4Ljc2M0MxLjE0OCAxLjQ0IDEgMS45MTMgMSAyLjVWMTNjMCAuNDYzLjExNy44NDMuMzE4IDEuMTQ1LjIuMjk4LjQ2Mi40OTEuNzA4LjYxNWEyLjM0NCAyLjM0NCAwIDAwLjk0LjI0SDN2LTFjLS4wMDUgMC0uMDE1IDAtLjAyOS0uMDAyYTEuMzQ0IDEuMzQ0IDAgMDEtLjQ5OC0uMTMzLjgxNy44MTcgMCAwMS0uMzIzLS4yNzVDMi4wNyAxMy40NyAyIDEzLjI4NyAyIDEzcy4wNy0uNDcuMTUtLjU5YS44MTcuODE3IDAgMDEuMzI0LS4yNzVBMS4zNDQgMS4zNDQgMCAwMTMgMTJoOS42NThjLS4wOTEuMjctLjE1OC42MDUtLjE1OCAxcy4wNjcuNzMuMTU4IDFIOHYxaDUuNWEuNS41IDAgMDAuMzU5LS44NDhsLS4wMDQtLjAwNXptLS4wMDEgMGwuMDAyLjAwMi0uMDAyLS4wMDJ6TTIuNzI0IDEuMTk3Yy4wOTItLjA0Ni4xODYtLjA4Mi4yNzYtLjExQzMgMi45MTggMy4wMDEgMTEgMi45OTkgMTFoLS4wMzNhMS45NzcgMS45NzcgMCAwMC0uMjgzLjAzIDIuMzQ0IDIuMzQ0IDAgMDAtLjY1Ny4yMUwyIDExLjI1NFYyLjVjMC0uNDEzLjEwMi0uNjg5LjIyOS0uODc5LjEyOC0uMTkzLjMwNC0uMzI4LjQ5NS0uNDI0ek00IDExVjFoOXYxMEg0elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNyAxM0g0djIuNWEuNS41IDAgMDAuODU0LjM1NGwuNjQ2LS42NDcuNjQ2LjY0N0EuNS41IDAgMDA3IDE1LjVWMTN6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkRvY3VtZW50YXRpb247IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkRvY3VtZW50cyA9IGZ1bmN0aW9uIEV1aUljb25Eb2N1bWVudHMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04LjggMGMuMjc0IDAgLjUzNy4xMTMuNzI2LjMxMmwzLjIgMy40MjhjLjE3Ni4xODYuMjc0LjQzMy4yNzQuNjg5VjEzYTEgMSAwIDAxLTEgMUgyYTEgMSAwIDAxLTEtMVYxYTEgMSAwIDAxMS0xaDYuOHpNMTIgNUg4LjVhLjUuNSAwIDAxLS41LS41VjFIMnYxMmgxMFY1em0tNy41IDZhLjUuNSAwIDExMC0xaDVhLjUuNSAwIDExMCAxaC01em0wLTNhLjUuNSAwIDAxMC0xaDVhLjUuNSAwIDExMCAxaC01em0xIDhhLjUuNSAwIDExMC0xSDE0VjYuNWEuNS41IDAgMTExIDBWMTVhMSAxIDAgMDEtMSAxSDUuNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRG9jdW1lbnRzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Eb3QgPSBmdW5jdGlvbiBFdWlJY29uRG90KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiY2lyY2xlXCIsIHtcbiAgICBjeDogOCxcbiAgICBjeTogOCxcbiAgICByOiA0XG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Eb3Q7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkRvdWJsZUFycm93TGVmdCA9IGZ1bmN0aW9uIEV1aUljb25Eb3VibGVBcnJvd0xlZnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTguMTM1IDE0LjA0M2EuNzUuNzUgMCAwMC4wMjUtMS4wNmwtNC41OTEtNC44MWEuMjUuMjUgMCAwMTAtLjM0Nmw0LjU5LTQuODFhLjc1Ljc1IDAgMTAtMS4wODQtMS4wMzVsLTQuNTkxIDQuODFhMS43NSAxLjc1IDAgMDAwIDIuNDE2bDQuNTkgNC44MWMuMjg3LjMuNzYxLjMxIDEuMDYxLjAyNHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTQuMTM1IDE0LjA0M2EuNzUuNzUgMCAwMC4wMjUtMS4wNmwtNC41OTEtNC44MWEuMjUuMjUgMCAwMTAtLjM0Nmw0LjU5LTQuODFhLjc1Ljc1IDAgMTAtMS4wODQtMS4wMzVsLTQuNTkxIDQuODFhMS43NSAxLjc1IDAgMDAwIDIuNDE2bDQuNTkgNC44MWMuMjg3LjMuNzYxLjMxIDEuMDYxLjAyNHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRG91YmxlQXJyb3dMZWZ0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Eb3VibGVBcnJvd1JpZ2h0ID0gZnVuY3Rpb24gRXVpSWNvbkRvdWJsZUFycm93UmlnaHQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTIuMjMyIDE0LjA0M2EuNzUuNzUgMCAwMS0uMDI1LTEuMDZsNC41OTEtNC44MWEuMjUuMjUgMCAwMDAtLjM0NmwtNC41OS00LjgxYS43NS43NSAwIDAxMS4wODUtMS4wMzVsNC41OSA0LjgxYTEuNzUgMS43NSAwIDAxMCAyLjQxNmwtNC41OSA0LjgxYS43NS43NSAwIDAxLTEuMDYuMDI0elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk04LjIzMiAxNC4wNDNhLjc1Ljc1IDAgMDEtLjAyNS0xLjA2bDQuNTkxLTQuODFhLjI1LjI1IDAgMDAwLS4zNDZsLTQuNTktNC44MWEuNzUuNzUgMCAwMTEuMDg1LTEuMDM1bDQuNTkgNC44MWExLjc1IDEuNzUgMCAwMTAgMi40MTZsLTQuNTkgNC44MWEuNzUuNzUgMCAwMS0xLjA2LjAyNHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRG91YmxlQXJyb3dSaWdodDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRG93bmxvYWQgPSBmdW5jdGlvbiBFdWlJY29uRG93bmxvYWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05IDkuMTE0bDEuODUtMS45NDNhLjUyLjUyIDAgMDEuNzcgMGMuMjE0LjIyOC4yMTQuNiAwIC44MjlsLTEuOTUgMi4wNWExLjU1MiAxLjU1MiAwIDAxLTIuMzEgMEw1LjQxIDhhLjYxNy42MTcgMCAwMTAtLjgyOS41Mi41MiAwIDAxLjc3IDBMOCA5LjA4MlYuNTU2QzggLjI0OSA4LjIyNCAwIDguNSAwcy41LjI0OS41LjU1NnY4LjU1OHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDEzLjAwNlYxMGgtMXYzLjAwNmEuOTk1Ljk5NSAwIDAxLS45OTQuOTk0SDMuMDFhLjk5NS45OTUgMCAwMS0uOTk0LS45OTRWMTBoLTF2My4wMDZjMCAxLjEuODkyIDEuOTk0IDEuOTk0IDEuOTk0aDEwLjk5NmMxLjEgMCAxLjk5NC0uODkzIDEuOTk0LTEuOTk0elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Eb3dubG9hZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWwgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03IDJoMmEyIDIgMCAwMTIgMnY4YTIgMiAwIDAxLTIgMkg3YTIgMiAwIDAxLTItMlY0YTIgMiAwIDAxMi0yek0xLjUgMWEuNS41IDAgMDEuNS41djEzYS41LjUgMCAxMS0xIDB2LTEzYS41LjUgMCAwMS41LS41em0xMyAwYS41LjUgMCAwMS41LjV2MTNhLjUuNSAwIDExLTEgMHYtMTNhLjUuNSAwIDAxLjUtLjV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25FZGl0b3JEaXN0cmlidXRlVmVydGljYWwgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNCA1aDhhMiAyIDAgMDEyIDJ2MmEyIDIgMCAwMS0yIDJINGEyIDIgMCAwMS0yLTJWN2EyIDIgMCAwMTItMnpNMS41IDFoMTNhLjUuNSAwIDExMCAxaC0xM2EuNS41IDAgMDEwLTF6bTAgMTNoMTNhLjUuNSAwIDExMCAxaC0xM2EuNS41IDAgMTEwLTF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9ySXRlbUFsaWduQm90dG9tID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckl0ZW1BbGlnbkJvdHRvbShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcgMWgyYTIgMiAwIDAxMiAydjhhMiAyIDAgMDEtMiAySDdhMiAyIDAgMDEtMi0yVjNhMiAyIDAgMDEyLTJ6TTEuNSAxNGgxM2EuNS41IDAgMTEwIDFoLTEzYS41LjUgMCAxMTAtMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9ySXRlbUFsaWduQm90dG9tOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25FZGl0b3JJdGVtQWxpZ25DZW50ZXIgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9ySXRlbUFsaWduQ2VudGVyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCA0SDdWMS41YS41LjUgMCAwMTEgMFY0em0wIDh2Mi41YS41LjUgMCAxMS0xIDBWMTJoMXpNMyA1aDlhMiAyIDAgMDEyIDJ2MmEyIDIgMCAwMS0yIDJIM2EyIDIgMCAwMS0yLTJWN2EyIDIgMCAwMTItMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9ySXRlbUFsaWduQ2VudGVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25FZGl0b3JJdGVtQWxpZ25MZWZ0ID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckl0ZW1BbGlnbkxlZnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01IDVoOGEyIDIgMCAwMTIgMnYyYTIgMiAwIDAxLTIgMkg1YTIgMiAwIDAxLTItMlY3YTIgMiAwIDAxMi0yek0xLjUgMWEuNS41IDAgMDEuNS41djEzYS41LjUgMCAxMS0xIDB2LTEzYS41LjUgMCAwMS41LS41elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JJdGVtQWxpZ25MZWZ0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25FZGl0b3JJdGVtQWxpZ25NaWRkbGUgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9ySXRlbUFsaWduTWlkZGxlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNCA3djFIMS41YS41LjUgMCAwMTAtMUg0em04IDBoMi41YS41LjUgMCAxMTAgMUgxMlY3ek03IDFoMmEyIDIgMCAwMTIgMnY5YTIgMiAwIDAxLTIgMkg3YTIgMiAwIDAxLTItMlYzYTIgMiAwIDAxMi0yelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JJdGVtQWxpZ25NaWRkbGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkVkaXRvckl0ZW1BbGlnblJpZ2h0ID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckl0ZW1BbGlnblJpZ2h0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMyA1aDhhMiAyIDAgMDEyIDJ2MmEyIDIgMCAwMS0yIDJIM2EyIDIgMCAwMS0yLTJWN2EyIDIgMCAwMTItMnptMTEuNS00YS41LjUgMCAwMS41LjV2MTNhLjUuNSAwIDExLTEgMHYtMTNhLjUuNSAwIDAxLjUtLjV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvckl0ZW1BbGlnblJpZ2h0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25FZGl0b3JJdGVtQWxpZ25Ub3AgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9ySXRlbUFsaWduVG9wKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNyAzaDJhMiAyIDAgMDEyIDJ2OGEyIDIgMCAwMS0yIDJIN2EyIDIgMCAwMS0yLTJWNWEyIDIgMCAwMTItMnpNMS41IDFoMTNhLjUuNSAwIDExMCAxaC0xM2EuNS41IDAgMDEwLTF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvckl0ZW1BbGlnblRvcDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0ID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvclBvc2l0aW9uQm90dG9tTGVmdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIgOGg1YTEgMSAwIDAxMSAxdjVIM2ExIDEgMCAwMS0xLTFWOHptMS03aDEwYTIgMiAwIDAxMiAydjEwYTIgMiAwIDAxLTIgMkgzYTIgMiAwIDAxLTItMlYzYTIgMiAwIDAxMi0yem0wIDFhMSAxIDAgMDAtMSAxdjEwYTEgMSAwIDAwMSAxaDEwYTEgMSAwIDAwMS0xVjNhMSAxIDAgMDAtMS0xSDN6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvclBvc2l0aW9uQm90dG9tTGVmdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodCA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOSA4aDV2NWExIDEgMCAwMS0xIDFIOFY5YTEgMSAwIDAxMS0xek0zIDFoMTBhMiAyIDAgMDEyIDJ2MTBhMiAyIDAgMDEtMiAySDNhMiAyIDAgMDEtMi0yVjNhMiAyIDAgMDEyLTJ6bTAgMWExIDEgMCAwMC0xIDF2MTBhMSAxIDAgMDAxIDFoMTBhMSAxIDAgMDAxLTFWM2ExIDEgMCAwMC0xLTFIM3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9yUG9zaXRpb25Ub3BMZWZ0ID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvclBvc2l0aW9uVG9wTGVmdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMgMmg1djVhMSAxIDAgMDEtMSAxSDJWM2ExIDEgMCAwMTEtMXptMC0xaDEwYTIgMiAwIDAxMiAydjEwYTIgMiAwIDAxLTIgMkgzYTIgMiAwIDAxLTItMlYzYTIgMiAwIDAxMi0yem0wIDFhMSAxIDAgMDAtMSAxdjEwYTEgMSAwIDAwMSAxaDEwYTEgMSAwIDAwMS0xVjNhMSAxIDAgMDAtMS0xSDN6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvclBvc2l0aW9uVG9wTGVmdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9yUG9zaXRpb25Ub3BSaWdodCA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JQb3NpdGlvblRvcFJpZ2h0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCAyaDVhMSAxIDAgMDExIDF2NUg5YTEgMSAwIDAxLTEtMVYyek0zIDFoMTBhMiAyIDAgMDEyIDJ2MTBhMiAyIDAgMDEtMiAySDNhMiAyIDAgMDEtMi0yVjNhMiAyIDAgMDEyLTJ6bTAgMWExIDEgMCAwMC0xIDF2MTBhMSAxIDAgMDAxIDFoMTBhMSAxIDAgMDAxLTFWM2ExIDEgMCAwMC0xLTFIM3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9yUG9zaXRpb25Ub3BSaWdodDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9yQWxpZ25DZW50ZXIgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yQWxpZ25DZW50ZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01IDRWM2g2djFINXpNMyA3VjZoMTB2MUgzem0yIDNWOWg2djFINXptLTIgM3YtMWgxMHYxSDN6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvckFsaWduQ2VudGVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25FZGl0b3JBbGlnbkxlZnQgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yQWxpZ25MZWZ0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMiA0VjNoNnYxSDJ6bTAgM1Y2aDEwdjFIMnptMCAzVjloNnYxSDJ6bTAgM3YtMWgxMHYxSDJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvckFsaWduTGVmdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9yQWxpZ25SaWdodCA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JBbGlnblJpZ2h0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCA0VjNoNnYxSDh6TTQgN1Y2aDEwdjFINHptNCAzVjloNnYxSDh6bS00IDN2LTFoMTB2MUg0elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JBbGlnblJpZ2h0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25FZGl0b3JCb2xkID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckJvbGQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04LjE5MyAxM0g0VjNoNC4xNTFjMS44MTYgMCAyLjk4Ny45NzcgMi45ODcgMi40OTUgMCAxLjA3NC0uNzk3IDIuMDEtMS44MjMgMi4xNzZ2LjA1NWMxLjM1OS4xMzIgMi4zMDggMS4xMSAyLjMwOCAyLjQzMyAwIDEuNzYtMS4yOTYgMi44NDEtMy40MyAyLjg0MXpNNS43ODggNC4zOTN2Mi44MmgxLjYzNWMxLjI0OCAwIDEuOTQ4LS41MjYgMS45NDgtMS40NTUgMC0uODczLS42MDMtMS4zNjUtMS42Ny0xLjM2NUg1Ljc4OHptMCA3LjIxNGgxLjk5NmMxLjMxNiAwIDIuMDE2LS41NDcgMi4wMTYtMS41NzMgMC0xLjAxOS0uNzItMS41NTItMi4wOTItMS41NTJoLTEuOTJ2My4xMjV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvckJvbGQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkVkaXRvckNoZWNrbGlzdCA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JDaGVja2xpc3QoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00LjU5NyAzYS40MTEuNDExIDAgMDAtLjI5OS4xMzJsLTEuODUgMS45OTMtLjc1Ni0uN2EuNDEyLjQxMiAwIDAwLS4yOC0uMTI0LjQyLjQyIDAgMDAtLjI5Mi4wOTguMzMzLjMzMyAwIDAwLS4xMi4yNTcuMzM1LjMzNSAwIDAwLjEyNy4yNTRsMS4wNjQuOTgyQS40MTguNDE4IDAgMDAyLjQ4OCA2YS40MTEuNDExIDAgMDAuMjg4LS4xMjZMNC45MDQgMy41OGEuMzI4LjMyOCAwIDAwLjA5NS0uMjUuMzM3LjMzNyAwIDAwLS4xMjYtLjIzOEEuNDIxLjQyMSAwIDAwNC41OTcgM3ptLS4yOTkgNC4xMzJBLjQxMS40MTEgMCAwMTQuNTk3IDdhLjQyMS40MjEgMCAwMS4yNzYuMDkzYy4wNzYuMDYyLjEyLjE0Ny4xMjYuMjM4YS4zMjguMzI4IDAgMDEtLjA5NS4yNUwyLjc3NiA5Ljg3NGEuNDExLjQxMSAwIDAxLS4yODguMTI2LjQxOC40MTggMCAwMS0uMjk3LS4xMDhMMS4xMjcgOC45MUEuMzM1LjMzNSAwIDAxMSA4LjY1NmEuMzMzLjMzMyAwIDAxLjEyLS4yNTcuNDIuNDIgMCAwMS4yOTItLjA5OGMuMTA4LjAwNS4yMS4wNS4yOC4xMjNsLjc1Ny43MDEgMS44NDktMS45OTN6TTQuNTk3IDExYS40MTEuNDExIDAgMDAtLjI5OS4xMzJsLTEuODUgMS45OTMtLjc1Ni0uN2EuNDEyLjQxMiAwIDAwLS4yOC0uMTI0LjQyMS40MjEgMCAwMC0uMjkyLjA5OC4zMzMuMzMzIDAgMDAtLjEyLjI1Ny4zMzUuMzM1IDAgMDAuMTI3LjI1NGwxLjA2NC45ODJhLjQxOC40MTggMCAwMC4yOTcuMTA4LjQxMS40MTEgMCAwMC4yODgtLjEyNmwyLjEyOC0yLjI5M2EuMzI4LjMyOCAwIDAwLjA5NS0uMjUuMzM3LjMzNyAwIDAwLS4xMjYtLjIzOC40MjEuNDIxIDAgMDAtLjI3Ni0uMDkzek02LjUgNGEuNS41IDAgMDAwIDFoN2EuNS41IDAgMDAwLTFoLTd6TTYgOC41YS41LjUgMCAwMS41LS41aDdhLjUuNSAwIDAxMCAxaC03YS41LjUgMCAwMS0uNS0uNXptLjUgMy41YS41LjUgMCAwMDAgMWg3YS41LjUgMCAwMDAtMWgtN3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9yQ2hlY2tsaXN0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25FZGl0b3JDb2RlQmxvY2sgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yQ29kZUJsb2NrKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMi40MTQgOC4wMzZMNC44OSAxMC41MWEuNS41IDAgMDEtLjcwNy43MDhMMS4zNTQgOC4zODlhLjUuNSAwIDAxMC0uNzA3bDIuODI4LTIuODI4YS41LjUgMCAxMS43MDcuNzA3TDIuNDE0IDguMDM2em04Ljc2OCAyLjQ3NGwyLjQ3NS0yLjQ3NC0yLjQ3NS0yLjQ3NWEuNS41IDAgMDEuNzA3LS43MDdsMi44MjkgMi44MjhhLjUuNSAwIDAxMCAuNzA3bC0yLjgyOSAyLjgyOWEuNS41IDAgMTEtLjcwNy0uNzA4ek04LjU1OSAyLjUwNmEuNS41IDAgMDEuOTgxLjE5TDcuNDQxIDEzLjQ5NGEuNS41IDAgMDEtLjk4MS0uMTlMOC41NTkgMi41MDZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvckNvZGVCbG9jazsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9yQ29tbWVudCA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JDb21tZW50KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNi4xMTEgMTBIMTJhMSAxIDAgMDAxLTFWNWExIDEgMCAwMC0xLTFINGExIDEgMCAwMC0xIDF2NGExIDEgMCAwMDEgMWgxdjEuMjk3TDYuMTExIDEwem0uNDYgMUw0IDE0di0zYTIgMiAwIDAxLTItMlY1YTIgMiAwIDAxMi0yaDhhMiAyIDAgMDEyIDJ2NGEyIDIgMCAwMS0yIDJINi41NzF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvckNvbW1lbnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkVkaXRvckhlYWRpbmcgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9ySGVhZGluZyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYgMTFhMSAxIDAgMDEwIDJINGExIDEgMCAwMTAtMlY1YTEgMSAwIDExMC0yaDJhMSAxIDAgMTEwIDJ2Mmg0VjVhMSAxIDAgMTEwLTJoMmExIDEgMCAwMTAgMnY2YTEgMSAwIDAxMCAyaC0yYTEgMSAwIDAxMC0yVjlINnYyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JIZWFkaW5nOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25FZGl0b3JJdGFsaWMgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9ySXRhbGljKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOC4xNiAxMkg5LjVhLjUuNSAwIDExMCAxaC00YS41LjUgMCAxMTAtMWgxLjYzOWwxLjctOEg3LjVhLjUuNSAwIDAxMC0xaDRhLjUuNSAwIDExMCAxSDkuODYxbC0xLjcgOHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9ySXRhbGljOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25FZGl0b3JMaW5rID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckxpbmsoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjU1NiA1LjA1MWEuNDUuNDUgMCAwMC42MzcuNjM3bDEuNTAzLTEuNTA0Yy40MzItLjQzMSAxLjI3OC0uMzgyIDEuODkuMjMuNjEyLjYxMi42NjIgMS40NTguMjMgMS44OUw5LjUxOSA4LjZjLS40MzIuNDMyLTEuMjc4LjM4My0xLjg5LS4yM2EuNDUuNDUgMCAxMC0uNjM2LjYzN2MuOTE0LjkxNCAyLjMzIDEuMDYzIDMuMTYyLjIzbDIuMjk3LTIuMjk3Yy44MzMtLjgzMy42ODQtMi4yNDgtLjIzLTMuMTYyLS45MTQtLjkxNS0yLjMzLTEuMDYzLTMuMTYyLS4yM0w3LjU1NiA1LjA1MXptLjg4OCA1LjI2MWEuNDUuNDUgMCAwMC0uNjM3IDBsLTEuNTAzIDEuNTA0Yy0uNDMyLjQzMS0xLjI3OC4zODItMS44OS0uMjMtLjYxMi0uNjEyLS42NjEtMS40NTgtLjIzLTEuODlMNi40ODEgNy40Yy40MzItLjQzMiAxLjI3OC0uMzgzIDEuODkuMjNhLjQ1LjQ1IDAgMDAuNjM2LS42MzdjLS45MTQtLjkxNC0yLjMzLTEuMDYzLTMuMTYyLS4yM0wzLjU0OCA5LjA2Yy0uODMzLjgzMy0uNjg1IDIuMjQ4LjIzIDMuMTYyLjkxNC45MTUgMi4zMyAxLjA2MyAzLjE2Mi4yM2wxLjUwNC0xLjUwM2EuNDUuNDUgMCAwMDAtLjYzN3pNNy44NzcgNS43NmEuMzkuMzkgMCAwMC4yNzQtLjExNGwxLjUwMy0xLjUwNC0xLjUwMyAxLjUwNGEuMzkuMzkgMCAwMS0uMjc0LjExNHptLjkxMiAzLjE4M2MtLjQuMDAzLS44NDMtLjE3Mi0xLjIwMi0uNTMuMzU5LjM1OC44MDIuNTMzIDEuMjAyLjUzek0xMi4xOCAzLjgyYy0uNTAyLS41MDMtMS4xNTUtLjc2Ni0xLjc3My0uNzYuNjE4LS4wMDYgMS4yNy4yNTcgMS43NzMuNzYuODk4Ljg5OCAxLjAzNCAyLjI3NS4yMyAzLjA3OGwtMi4yOTcgMi4yOTcgMi4yOTctMi4yOTdjLjgwNC0uODAzLjY2OC0yLjE4LS4yMy0zLjA3OHptLTQuMDYyIDYuNDJhLjM5LjM5IDAgMDEuMjg0LjY2N0w2Ljg5OCAxMi40MWwxLjUwNC0xLjUwM2EuMzkuMzkgMCAwMC0uMjg0LS42Njd6bS0uOTI2LTMuOTY1Yy42MTgtLjAwNiAxLjI3LjI1NyAxLjc3My43Ni0uNTAyLS41MDMtMS4xNTUtLjc2Ni0xLjc3My0uNzZ6TTUuNDE0IDEyLjE1YTEuNzYyIDEuNzYyIDAgMDEtMS4wNDItLjUyMmMtLjYyNi0uNjI3LS42OTItMS41MTEtLjIzLTEuOTc0TDYuNDQgNy4zNTggNC4xNDIgOS42NTRjLS40NjIuNDYzLS4zOTYgMS4zNDguMjMgMS45NzQuMzExLjMxMS42ODcuNDg0IDEuMDQyLjUyMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9yTGluazsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9yT3JkZXJlZExpc3QgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yT3JkZXJlZExpc3QoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zIDh2MWgxdjFIMVY5aDFWOEgxVjdoM3YxSDN6bTEgNHYySDF2LTFoMXYtMUgxdi0xaDN2MXpNMyA1aDF2MUgxVjVoMVY0SDFWM2gydjJ6bTIuNS0xaDhhLjUuNSAwIDExMCAxaC04YS41LjUgMCAwMTAtMXptMCA0aDhhLjUuNSAwIDExMCAxaC04YS41LjUgMCAwMTAtMXptMCA0aDhhLjUuNSAwIDExMCAxaC04YS41LjUgMCAxMTAtMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9yT3JkZXJlZExpc3Q7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkVkaXRvclJlZG8gPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yUmVkbyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEwIDZINUMzLjA1NyA2IDIgNy4wNTcgMiA5czEuMDU3IDMgMyAzaDEuNXYtMUg1Yy0xLjM5IDAtMi0uNjEtMi0yIDAtMS4zOS42MS0yIDItMmg1djNsMy41LTMuNUwxMCAzdjN6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvclJlZG87IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkVkaXRvclN0cmlrZSA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JTdHJpa2UoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMC4wMjMgMTBoMS4yNzRjLjAwNi4wOC4wMS4xNjQuMDEuMjVhMi41NTcgMi41NTcgMCAwMS0uODgzIDEuOTQ5Yy0uMjg0LjI1LS42MjcuNDQ2LTEuMDMuNTg4QTQuMDg3IDQuMDg3IDAgMDE4LjAyOCAxM2E0LjYxNiA0LjYxNiAwIDAxLTMuMzgyLTEuNDI2Yy0uMTkzLS4yNTktLjE5My0uNSAwLS43MjQuMTkzLS4yMjMuNDM4LS4yNjYuNzM1LS4xMy4zNDMuMzYzLjc0OC42NTUgMS4yMTMuODc2LjQ2Ni4yMi45NDkuMzMgMS40NDkuMzMuNjM3IDAgMS4xMzItLjE0NCAxLjQ4NS0uNDMzLjM1My0uMjkuNTMtLjY3LjUzLTEuMTRhMS43MiAxLjcyIDAgMDAtLjAzNC0uMzUzek01LjU4NiA3YTIuNDkgMi40OSAwIDAxLS4yOTQtLjUwNyAyLjMxNiAyLjMxNiAwIDAxLS4xNzctLjkzNGMwLS4zNjMuMDc2LS43MDEuMjI4LTEuMDE1LjE1Mi0uMzE0LjM2My0uNTg2LjYzMy0uODE2LjI3LS4yMy41ODgtLjQxLjk1NS0uNTM3QTMuNjgzIDMuNjgzIDAgMDE4LjE0NSAzYy41NzggMCAxLjExMi4xMSAxLjYwMy4zMy40OS4yMjEuOTA3LjUwOCAxLjI1Ljg2MS4xNi4yODIuMTYuNTEyIDAgLjY5Mi0uMTYuMTgtLjM4LjIxNC0uNjYyLjEwMmEzLjQzOCAzLjQzOCAwIDAwLS45NzgtLjY2OSAyLjkxNCAyLjkxNCAwIDAwLTEuMjEzLS4yNDJjLS41NCAwLS45NzMuMTI1LTEuMzAyLjM3NS0uMzI4LjI1LS40OTIuNTk1LS40OTIgMS4wMzYgMCAuMjM2LjA0Ni40MzQuMTQuNTk2LjA5Mi4xNjIuMjE3LjMwNC4zNzQuNDI2LjE1Ny4xMjMuMzI5LjIzLjUxNS4zMjQuMTE5LjA2LjI0LjExNi4zNjIuMTY5SDUuNTg2ek0yLjUgOGgxMWEuNS41IDAgMTEwIDFoLTExYS41LjUgMCAwMTAtMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9yU3RyaWtlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25FZGl0b3JUYWJsZSA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JUYWJsZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE0IDN2MkgyVjN2MTBoMTJWM3pNMiAyaDEyYy41NTIgMCAxIC40MTMgMSAuOTIzdjEwLjE1NGMwIC41MS0uNDQ4LjkyMy0xIC45MjNIMmMtLjU1MiAwLTEtLjQxMy0xLS45MjNWMi45MjNDMSAyLjQxMyAxLjQ0OCAyIDIgMnptMCA1aDEydjFIMlY3em0wIDNoMTJ2MUgydi0xelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JUYWJsZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9yVW5kZXJsaW5lID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvclVuZGVybGluZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUgMy41MzZWNy44YzAgMS42MjggMS4yMjQgMi42IDMgMi42IDEuNzgzIDAgMy0uOTcyIDMtMi42VjMuNTM2YzAtLjM1Ny4xNjctLjUzNi41LS41MzYuMzMzIDAgLjUuMTc5LjUuNTM2djQuMzE4YzAgMi4wOTMtMS42NjUgMy41NDYtNCAzLjU0NlM0IDkuODkzIDQgNy44VjMuNTM2QzQgMy4xNzkgNC4xNjcgMyA0LjUgM2MuMzMzIDAgLjUuMTc5LjUuNTM2ek0yLjUgMTNoMTFhLjUuNSAwIDExMCAxaC0xMWEuNS41IDAgMTEwLTF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvclVuZGVybGluZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9yVW5kbyA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JVbmRvKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNS41IDZoNWMxLjk0MyAwIDMgMS4wNTcgMyAzcy0xLjA1NyAzLTMgM0g5di0xaDEuNWMxLjM5IDAgMi0uNjEgMi0yIDAtMS4zOS0uNjEtMi0yLTJoLTV2M0wyIDYuNSA1LjUgM3YzelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JVbmRvOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25FZGl0b3JVbm9yZGVyZWRMaXN0ID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvclVub3JkZXJlZExpc3QoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01LjUgNGg4YS41LjUgMCAxMTAgMWgtOGEuNS41IDAgMDEwLTF6bTAgNGg4YS41LjUgMCAxMTAgMWgtOGEuNS41IDAgMDEwLTF6bTAgNGg4YS41LjUgMCAxMTAgMWgtOGEuNS41IDAgMTEwLTF6bS0zLTdhLjUuNSAwIDExMC0xIC41LjUgMCAwMTAgMXptMCA0YS41LjUgMCAxMTAtMSAuNS41IDAgMDEwIDF6bTAgNGEuNS41IDAgMTEwLTEgLjUuNSAwIDAxMCAxelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JVbm9yZGVyZWRMaXN0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25FbWFpbCA9IGZ1bmN0aW9uIEV1aUljb25FbWFpbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xNC45NSAzLjY4NEw4LjYzNyA4LjkxMmExIDEgMCAwMS0xLjI3NiAwTDEuMDUxIDMuNjg0QS45OTkuOTk5IDAgMDAxIDR2OGExIDEgMCAwMDEgMWgxMmExIDEgMCAwMDEtMVY0YS45OTkuOTk5IDAgMDAtLjA1LS4zMTZ6TTIgMmgxMmEyIDIgMCAwMTIgMnY4YTIgMiAwIDAxLTIgMkgyYTIgMiAwIDAxLTItMlY0YTIgMiAwIDAxMi0yem0tLjIxIDFsNS41NzYgNC42MDNhMSAxIDAgMDAxLjI3LjAwM0wxNC4yNjggM0gxLjc5elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FbWFpbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRW1wdHkgPSBmdW5jdGlvbiBFdWlJY29uRW1wdHkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRW1wdHk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkVxbCA9IGZ1bmN0aW9uIEV1aUljb25FcWwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNS44NjIgMTQuMTh2LjAwMWEuNDgyLjQ4MiAwIDAxLjEuNTIxLjUuNSAwIDAxLS40NDcuMjk5aC0zLjE0OWMtLjA3IDAtLjEzNiAwLS4yLS4wMDNhLjY2NC42NjQgMCAwMS0uNDE0LS4xNGMtLjM1LS4zMS0uNjg0LS42MzctMS4wMDEtLjk4MWwtMS43NzItMS43MzhhNS45NDEgNS45NDEgMCAwMS0zLjgwMi4xNGwtLjA0NS0uMDEyYTUuODkgNS44OSAwIDAxLTIuNjgyLTEuNzEyQTUuNzE1IDUuNzE1IDAgMDExLjA4IDcuNzJhNS42NiA1LjY2IDAgMDEuMzQ4LTMuMTE4QTUuNzggNS43OCAwIDAxMy4zOSAyLjEyNGE1Ljk3OSA1Ljk3OSAwIDAxNi4xMzYtLjUwNSA1LjgzNiA1LjgzNiAwIDAxMi4zNTYgMi4xMjMgNS42NyA1LjY3IDAgMDEuODczIDMuMDE3bC4wMDEuMDAzYzAgLjEyOC0uMDUxLjI1LS4xNDMuMzRhLjQ5NS40OTUgMCAwMS0uNjk0IDAgLjQ3Ni40NzYgMCAwMS0uMTQzLS4zNGMwLS45NS0uMjg4LTEuODc4LS44MjYtMi42NjhhNC44OCA0Ljg4IDAgMDAtMi4xOTgtMS43NjkgNC45OSA0Ljk5IDAgMDAtMi44My0uMjczIDQuOTMgNC45MyAwIDAwLTIuNTA5IDEuMzE0IDQuNzc0IDQuNzc0IDAgMDAtMS4zNCAyLjQ2QTQuNzE1IDQuNzE1IDAgMDAyLjM1MiA4LjZhNC44MiA0LjgyIDAgMDAxLjgwNCAyLjE1NWMuODA1LjUyOCAxLjc1Mi44MSAyLjcyMS44MWE0Ljg5OSA0Ljg5OSAwIDAwMS4yOTYtLjE5NGwuMDMyLS4wMDkuNzE3LS4yMTFhLjUwNi41MDYgMCAwMS40ODMuMTExbDEuMTEgMS4wMjYgMS43ODggMS43NTJoMi4wM2wtMy42NTctMy41ODNhLjQ3NS40NzUgMCAwMS4wMTQtLjY2Ni40OTUuNDk1IDAgMDEuNjc5LS4wMTNsNC40OTMgNC40MDJ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjA5NyAzLjQ2OEw5LjY3OSA0LjkzYS40MzMuNDMzIDAgMDEuMjE4LjM3djIuOTI0YS40MjIuNDIyIDAgMDEtLjIxOC4zN2wtMi41ODIgMS40NjFhLjQzOC40MzggMCAwMS0uNDM3IDBMNC4wNzcgOC41OTRhLjQzMy40MzMgMCAwMS0uMjE4LS4zN1Y1LjNhLjQyMi40MjIgMCAwMS4yMTgtLjM3TDYuNjYgMy40NjdhLjQ0Ni40NDYgMCAwMS40MzcgMHptMS44NDUgNC4yN1Y1Ljc4NGEuMzI4LjMyOCAwIDAwLS4xNy0uMjg3TDcuMDQ3IDQuNTJhLjM0Mi4zNDIgMCAwMC0uMzM4IDBsLTEuNzI2Ljk3N2EuMzM2LjMzNiAwIDAwLS4xNjguMjg3djEuOTUzYS4zMjYuMzI2IDAgMDAuMTcuMjg3bDEuNzI0Ljk3N2EuMzQyLjM0MiAwIDAwLjMzOCAwbDEuNzI2LS45NzhhLjMzNC4zMzQgMCAwMC4xNjktLjI4N3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRXFsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25FcmFzZXIgPSBmdW5jdGlvbiBFdWlJY29uRXJhc2VyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMi42NDggOS45MzdsNy4yOS03LjI4OGEyLjIxIDIuMjEgMCAwMTMuMTI0IDBsMi4yOSAyLjI4OGEyLjIxIDIuMjEgMCAwMTAgMy4xMjZMMTAuNDEzIDEzSDEyLjVhLjUuNSAwIDAxMCAxSDQuNTAxYTIuMjEgMi4yMSAwIDAxLTEuNTYzLS42NDdsLjcwNy0uNzA3Yy4yMjcuMjI2LjUzNS4zNTQuODU2LjM1NGg0LjAwNWExLjIxIDEuMjEgMCAwMC44NDgtLjM1NGwxLjI5Mi0xLjI5My00LTQtMy4yOSAzLjI5MWExLjIxIDEuMjEgMCAwMDAgMS43MTJsLjI5LjI5LS43MDguNzA3LS4yOS0uMjlhMi4yMSAyLjIxIDAgMDEwLTMuMTI2ek04IDZoNi44OWExLjIwOCAxLjIwOCAwIDAwLS4yNDYtLjM1NkwxNCA1SDlMOCA2em0yLTJoM2wtLjY0NS0uNjQ0YTEuMjEgMS4yMSAwIDAwLTEuNzEgMEwxMCA0em00Ljg5IDNINy43MDhsMSAxSDE0bC42NDQtLjY0NEExLjIyIDEuMjIgMCAwMDE0Ljg5MSA3ek05LjcwOCA5bDEuNjQ2IDEuNjQ2TDEzIDlIOS43MDd6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNCAxMS41YS41LjUgMCAxMS0xIDAgLjUuNSAwIDAxMSAwem0xLjUtLjVhLjUuNSAwIDEwMC0xIC41LjUgMCAwMDAgMXptLTEgMmEuNS41IDAgMDAwIDFoMWEuNS41IDAgMDAwLTFoLTF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVyYXNlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRXhpdCA9IGZ1bmN0aW9uIEV1aUljb25FeGl0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEyLjUzNSAxMi40OTNhLjQ3LjQ3IDAgMDEuNDY4LjQ2OHYyLjU2NGEuNDczLjQ3MyAwIDAxLS40NjYuNDc1SDNWMEgxMi41OTVhLjQ1LjQ1IDAgMDEuMzk4LjQ2M3YyLjU2NWEuNDY5LjQ2OSAwIDAxLS40NjguNDY3aC0uMDY1YS40NjguNDY4IDAgMDEtLjQ2Ny0uNDY3VjFINHYxNGg4LjAxbC0uMDA3LTIuMDRjMC0uMjU3LjIxLS40NjcuNDY3LS40NjdoLjA2NXptLTEuMDk2LTcuNTlsMi4xMjEgMi4xMjJhMS41IDEuNSAwIDAxMCAyLjEyMWwtMi4xMiAyLjEyMmEuNS41IDAgMTEtLjcwOC0uNzA4bDIuMTIxLTIuMTJhLjUuNSAwIDAwMC0uNzA4bC0yLjEyMS0yLjEyMWEuNS41IDAgMDEuNzA3LS43MDd6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkV4aXQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkV4cGFuZCA9IGZ1bmN0aW9uIEV1aUljb25FeHBhbmQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNC4zNTQgMTIuMzU0bDgtOGEuNS41IDAgMDAtLjcwOC0uNzA4bC04IDhhLjUuNSAwIDAwLjcwOC43MDh6TTEgMTAuNWEuNS41IDAgMTExIDB2M2EuNS41IDAgMDAuNS41aDNhLjUuNSAwIDExMCAxaC0zQTEuNSAxLjUgMCAwMTEgMTMuNXYtM3ptMTQtNWEuNS41IDAgMTEtMSAwdi0zYS41LjUgMCAwMC0uNS0uNWgtM2EuNS41IDAgMTEwLTFoM0ExLjUgMS41IDAgMDExNSAyLjV2M3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRXhwYW5kOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25FeHBhbmRNaW5pID0gZnVuY3Rpb24gRXVpSWNvbkV4cGFuZE1pbmkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNi43MDcgMTBMMTAgNi43MDdBLjUuNSAwIDAwOS4yOTMgNkw2IDkuMjkzYS41LjUgMCAxMC43MDcuNzA3ek00IDkuNWEuNS41IDAgMDExIDB2MWEuNS41IDAgMDAuNS41aDFhLjUuNSAwIDExMCAxaC0xQTEuNSAxLjUgMCAwMTQgMTAuNXYtMXptOC0zYS41LjUgMCAxMS0xIDB2LTFhLjUuNSAwIDAwLS41LS41aC0xYS41LjUgMCAwMTAtMWgxQTEuNSAxLjUgMCAwMTEyIDUuNXYxelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FeHBhbmRNaW5pOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25FeHBvcnQgPSBmdW5jdGlvbiBFdWlJY29uRXhwb3J0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOC41MDUgMWMuNDIyLS4wMDMuODQ0LjE3IDEuMTY2LjUxNmwxLjk1IDIuMDVjLjIxMy4yMjguMjEzLjYgMCAuODI4YS41Mi41MiAwIDAxLS43NzEgMEw5IDIuNDUxdjcuOTkzYzAgLjMwNy0uMjI0LjU1Ni0uNS41NTZzLS41LS4yNDktLjUtLjU1NnYtNy45NmwtMS44MiAxLjkxYS41Mi41MiAwIDAxLS43NyAwIC42MTcuNjE3IDAgMDEwLS44MjlsMS45NS0yLjA1QTEuNTc1IDEuNTc1IDAgMDE4LjUgMWguMDA1ek00LjE4IDdjLS40NzMgMC0uODguMjk0LS45NzIuNzAzbC0xLjE4OSA1LjI1YS43NzYuNzc2IDAgMDAtLjAxOS4xNzJjMCAuNDgzLjQ0NC44NzUuOTkuODc1SDE0LjAxYy4wNjUgMCAuMTMtLjAwNi4xOTQtLjAxNy41MzctLjA5NS44ODUtLjU1Ni43NzgtMS4wM2wtMS4xOS01LjI1QzEzLjcgNy4yOTQgMTMuMjkzIDcgMTIuODIyIDdINC4xOHpNNiA2djFoNVY2aDEuODI1Yy45NDYgMCAxLjc2LjYwNiAxLjk0NiAxLjQ0N2wxLjE5IDUuNGMuMjE1Ljk3NS0uNDgyIDEuOTIzLTEuNTU2IDIuMTE4YTIuMTggMi4xOCAwIDAxLS4zOS4wMzVIMi45ODVDMS44ODggMTUgMSAxNC4xOTQgMSAxMy4yYzAtLjExOS4wMTMtLjIzNy4wMzktLjM1M2wxLjE5LTUuNEMyLjQxNCA2LjYwNiAzLjIyOSA2IDQuMTc0IDZINnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRXhwb3J0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25FeWUgPSBmdW5jdGlvbiBFdWlJY29uRXllKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTUuOTggNy44NzNjLjAxMy4wMy4wMi4wNjQuMDIuMDk4di4wNmEuMjQuMjQgMCAwMS0uMDIuMDk3QzE1Ljk1MiA4LjE4OCAxMy4yOTEgMTQgOCAxNFMuMDQ3IDguMTg4LjAyIDguMTI4QS4yNC4yNCAwIDAxMCA4LjAzdi0uMDU5YzAtLjAzNC4wMDctLjA2OC4wMi0uMDk4Qy4wNDggNy44MTMgMi43MDkgMiA4IDJzNy45NTMgNS44MTMgNy45OCA1Ljg3M3ptLTEuMzctLjQyNGExMi4wOTcgMTIuMDk3IDAgMDAtMS4zODUtMS44NjJDMTEuNzM5IDMuOTU2IDkuOTk5IDMgOCAzYy0yIDAtMy43NC45NTYtNS4yMjUgMi41ODdhMTIuMDk4IDEyLjA5OCAwIDAwLTEuNzAxIDIuNDE0IDEyLjA5NSAxMi4wOTUgMCAwMDEuNyAyLjQxM0M0LjI2IDEyLjA0MyA2LjAwMiAxMyA4IDEzczMuNzQtLjk1NiA1LjIyNS0yLjU4N0ExMi4wOTcgMTIuMDk3IDAgMDAxNC45MjYgOGMtLjA4LS4xNS0uMTg5LS4zNDMtLjMxNS0uNTUxek04IDQuNzVBMy4yNTMgMy4yNTMgMCAwMTExLjI1IDggMy4yNTQgMy4yNTQgMCAwMTggMTEuMjUgMy4yNTMgMy4yNTMgMCAwMTQuNzUgOCAzLjI1MiAzLjI1MiAwIDAxOCA0Ljc1em0wIDFDNi43NiA1Ljc1IDUuNzUgNi43NiA1Ljc1IDhTNi43NiAxMC4yNSA4IDEwLjI1IDEwLjI1IDkuMjQgMTAuMjUgOCA5LjI0IDUuNzUgOCA1Ljc1em0wIDEuNWEuNzUuNzUgMCAxMDAgMS41Ljc1Ljc1IDAgMDAwLTEuNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRXllOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25FeWVDbG9zZWQgPSBmdW5jdGlvbiBFdWlJY29uRXllQ2xvc2VkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNS4zMTggMTMuNDdsLjc3Ni0uNzc2QTYuMDQgNi4wNCAwIDAwOCAxM2MxLjk5OSAwIDMuNzQtLjk1NiA1LjIyNS0yLjU4N0ExMi4wOTcgMTIuMDk3IDAgMDAxNC45MjYgOGExMi4wOTcgMTIuMDk3IDAgMDAtMS43MDEtMi40MTNsLS4wMTEtLjAxMi43MDctLjcwOGMxLjM1OSAxLjQ3NiAyLjA0NSAyLjk3NiAyLjA1OCAzLjAwNi4wMTQuMDMuMDIxLjA2NC4wMjEuMDk4di4wNmEuMjQuMjQgMCAwMS0uMDIuMDk3QzE1Ljk1MiA4LjE4OCAxMy4yOTEgMTQgOCAxNGE3LjAzIDcuMDMgMCAwMS0yLjY4Mi0uNTN6TTIuMDQgMTEuMDkyQy43MDcgOS42MjkuMDM0IDguMTU4LjAyIDguMTI4QS4yNC4yNCAwIDAxMCA4LjAzdi0uMDU5YzAtLjAzNC4wMDctLjA2OC4wMi0uMDk4Qy4wNDggNy44MTMgMi43MDkgMiA4IDJjLjk2MiAwIDEuODM3LjE5MiAyLjYyNS41MDdsLS43OC43OEE2LjAzOSA2LjAzOSAwIDAwOCAzYy0yIDAtMy43NC45NTYtNS4yMjUgMi41ODdhMTIuMDk4IDEyLjA5OCAwIDAwLTEuNzAxIDIuNDE0IDEyLjExIDEyLjExIDAgMDAxLjY3NCAyLjM4M2wtLjcwOC43MDh6TTguMzYyIDQuNzdMNy4yNTUgNS44NzdhMi4yNjIgMi4yNjIgMCAwMC0xLjM3OCAxLjM3OEw0Ljc3IDguMzYyQTMuMjUyIDMuMjUyIDAgMDE4LjM2MiA0Ljc3em0yLjg2IDIuNzk3YTMuMjU0IDMuMjU0IDAgMDEtMy42NTQgMy42NTRsMS4wNi0xLjA2YTIuMjYyIDIuMjYyIDAgMDAxLjUzMy0xLjUzM2wxLjA2LTEuMDZ6bS05LjM2OCA3LjI4N2EuNS41IDAgMDEtLjcwOC0uNzA4bDEzLTEzYS41LjUgMCAwMS43MDguNzA4bC0xMyAxM3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRXllQ2xvc2VkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25GYWNlSGFwcHkgPSBmdW5jdGlvbiBFdWlJY29uRmFjZUhhcHB5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCAxNkE4IDggMCAxMTggMGE4IDggMCAwMTAgMTZ6bTAtMS4wNjdBNi45MzMgNi45MzMgMCAxMDggMS4wNjdhNi45MzMgNi45MzMgMCAwMDAgMTMuODY2ek01LjMzMyA2LjRhMS4wNjcgMS4wNjcgMCAxMTAtMi4xMzMgMS4wNjcgMS4wNjcgMCAwMTAgMi4xMzN6bTUuMzM0IDBhMS4wNjcgMS4wNjcgMCAxMTAtMi4xMzMgMS4wNjcgMS4wNjcgMCAwMTAgMi4xMzN6TTIuNzM5IDguODAyYS41MzMuNTMzIDAgMDEuOTIyLS41MzdDNC44MTUgMTAuMjQ1IDYuMjQ5IDExLjIgOCAxMS4yYzEuNzUgMCAzLjE4NS0uOTU2IDQuMzQtMi45MzVhLjUzMy41MzMgMCAwMS45Mi41MzdjLTEuMzMzIDIuMjg3LTMuMSAzLjQ2NS01LjI2IDMuNDY1LTIuMTYgMC0zLjkyNy0xLjE3OC01LjI2LTMuNDY1elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25GYWNlSGFwcHk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkZhY2VOZXV0cmFsID0gZnVuY3Rpb24gRXVpSWNvbkZhY2VOZXV0cmFsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCAxNkE4IDggMCAxMTggMGE4IDggMCAwMTAgMTZ6bTAtMS4wNjdBNi45MzMgNi45MzMgMCAxMDggMS4wNjdhNi45MzMgNi45MzMgMCAwMDAgMTMuODY2ek01LjMzMyA2LjRhMS4wNjcgMS4wNjcgMCAxMTAtMi4xMzMgMS4wNjcgMS4wNjcgMCAwMTAgMi4xMzN6bTUuMzM0IDBhMS4wNjcgMS4wNjcgMCAxMTAtMi4xMzMgMS4wNjcgMS4wNjcgMCAwMTAgMi4xMzN6TTMuMiAxMC42NjdhLjUzMy41MzMgMCAwMTAtMS4wNjdoOS42YS41MzMuNTMzIDAgMTEwIDEuMDY3SDMuMnpcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkZhY2VOZXV0cmFsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25GYWNlU2FkID0gZnVuY3Rpb24gRXVpSWNvbkZhY2VTYWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDE2QTggOCAwIDExOCAwYTggOCAwIDAxMCAxNnptMC0xLjA2N0E2LjkzMyA2LjkzMyAwIDEwOCAxLjA2N2E2LjkzMyA2LjkzMyAwIDAwMCAxMy44NjZ6TTUuMzMzIDYuNGExLjA2NyAxLjA2NyAwIDExMC0yLjEzMyAxLjA2NyAxLjA2NyAwIDAxMCAyLjEzM3ptNS4zMzQgMGExLjA2NyAxLjA2NyAwIDExMC0yLjEzMyAxLjA2NyAxLjA2NyAwIDAxMCAyLjEzM3ptMi40ODcgMy44NjhhLjUzMy41MzMgMCAxMS0uNzA4Ljc5N0MxMC45MzYgOS43MjUgOS40NTggOS4wNjcgOCA5LjA2N2MtMS40NTggMC0yLjkzNy42NTctNC40NDYgMS45OThhLjUzMy41MzMgMCAxMS0uNzA4LS43OTdDNC41MzYgOC43NjUgNi4yNTggOCA4IDhzMy40NjMuNzY1IDUuMTU0IDIuMjY4elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25GYWNlU2FkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25GaWx0ZXIgPSBmdW5jdGlvbiBFdWlJY29uRmlsdGVyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTcuOTk5IDE1Ljk5OWE4IDggMCAxMTAtMTYgOCA4IDAgMDEwIDE2ek04IDE1QTcgNyAwIDEwOCAxYTcgNyAwIDAwMCAxNHpNMy41IDVoOWEuNS41IDAgMTEwIDFoLTlhLjUuNSAwIDAxMC0xem0yIDNoNWEuNS41IDAgMTEwIDFoLTVhLjUuNSAwIDAxMC0xem0yIDNoMWEuNS41IDAgMTEwIDFoLTFhLjUuNSAwIDExMC0xelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25GaWx0ZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkZsYWcgPSBmdW5jdGlvbiBFdWlJY29uRmxhZyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuNjg2IDguNDY0YzEuNTQ3LS42MTkgMy4wOC0uNjE5IDQuNjI4IDBBLjUuNSAwIDAwMTMgOFYyYS41LjUgMCAwMC0uMjc2LS40NDdDMTEuMjU5LjgyIDkuNDU4LjgyIDcuMzQyIDEuNTI2Yy0xLjg4NC42MjgtMy40MTcuNjI4LTQuNjE4LjAyN0EuNS41IDAgMDAyIDJ2MTIuNWEuNS41IDAgMTAxIDBWOC41NTNjMS40MTEuNjI3IDIuOTgzLjU5MiA0LjY4Ni0uMDg5ek0zIDIuNzQxYzEuMzIyLjQyIDIuODc4LjMyNyA0LjY1OC0uMjY3QzkuNCAxLjg5NCAxMC44NDMgMS44NSAxMiAyLjMyMnY0Ljk3NWMtMS41Ni0uNDY0LTMuMTI4LS4zODQtNC42ODYuMjM5LTEuNTQuNjE2LTIuODkyLjYxNi00LjA5LjAxN0EuNDk4LjQ5OCAwIDAwMyA3LjVWMi43NHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRmxhZzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRm9sZCA9IGZ1bmN0aW9uIEV1aUljb25Gb2xkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNS4xNC4xOTJMNy41MyAyLjQ5YS42Ny42NyAwIDAwLjk0MiAwTDEwLjg2LjE5MmEuNjc3LjY3NyAwIDAxLjk0NCAwIC42NS42NSAwIDAxMCAuOTNsLTIuMzg4IDIuM2EyLjAyIDIuMDIgMCAwMS0yLjgzMiAwbC0yLjM4OC0yLjNhLjY1LjY1IDAgMDEwLS45My42NzcuNjc3IDAgMDEuOTQ0IDB6bTAgMTUuNjE2bDIuMzktMi4yOThhLjY3LjY3IDAgMDEuOTQyIDBsMi4zODkgMi4yOThjLjI2LjI1Ni42ODUuMjU2Ljk0NCAwYS42NS42NSAwIDAwMC0uOTNsLTIuMzg4LTIuM2EyLjAyIDIuMDIgMCAwMC0yLjgzMiAwbC0yLjM4OCAyLjNhLjY1LjY1IDAgMDAwIC45M2MuMjYuMjU2LjY4My4yNTYuOTQ0IDB6TTE2IDZIMHY0aDE2VjZ6TTEgOVY3aDE0djJIMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRm9sZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRm9sZGVyQ2hlY2sgPSBmdW5jdGlvbiBFdWlJY29uRm9sZGVyQ2hlY2soX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNiAySDF2MTFoNi4xYy4wNy4zNDguMTc3LjY4Mi4zMTYgMUgxYTEgMSAwIDAxLTEtMVYyYTEgMSAwIDAxMS0xaDUuMjVhLjc1Ljc1IDAgMDEuNzUuNzV2MS4xMjVjMCAuMDY5LjA1Ni4xMjUuMTI1LjEyNUgxM2ExIDEgMCAwMTEgMXYzLjQxNmE0Ljk2MiA0Ljk2MiAwIDAwLTEtLjMxNlY0SDcuMTI1QTEuMTI1IDEuMTI1IDAgMDE2IDIuODc1VjJ6bTEwIDEwYTQgNCAwIDExLTggMCA0IDQgMCAwMTggMHptLTEuNjQ2LTEuMzU0YS41LjUgMCAwMTAgLjcwOGwtMi41IDIuNWEuNS41IDAgMDEtLjcwOCAwbC0xLTFhLjUuNSAwIDAxLjcwOC0uNzA4bC42NDYuNjQ3IDIuMTQ2LTIuMTQ3YS41LjUgMCAwMS43MDggMHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRm9sZGVyQ2hlY2s7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkZvbGRlckNsb3NlZCA9IGZ1bmN0aW9uIEV1aUljb25Gb2xkZXJDbG9zZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03IDJIMnYxMWgxMlY0SDguMTI1QTEuMTI1IDEuMTI1IDAgMDE3IDIuODc1VjJ6bS4yNS0xYS43NS43NSAwIDAxLjc1Ljc1djEuMTI1YzAgLjA2OS4wNTYuMTI1LjEyNS4xMjVIMTRhMSAxIDAgMDExIDF2OWExIDEgMCAwMS0xIDFIMmExIDEgMCAwMS0xLTFWMmExIDEgMCAwMTEtMWg1LjI1elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Gb2xkZXJDbG9zZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkZvbGRlckV4Y2xhbWF0aW9uID0gZnVuY3Rpb24gRXVpSWNvbkZvbGRlckV4Y2xhbWF0aW9uKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEgOS41bC44MjYtMy43MTdBMSAxIDAgMDEyLjgwMiA1SDEzVjRINy4xMjVBMS4xMjUgMS4xMjUgMCAwMTYgMi44NzVWMkgxdjcuNXptLjI0NyAzLjVINy4xYy4wNy4zNDguMTc3LjY4Mi4zMTYgMUgxYTEgMSAwIDAxLTEtMVYyYTEgMSAwIDAxMS0xaDUuMjVhLjc1Ljc1IDAgMDEuNzUuNzV2MS4xMjVjMCAuMDY5LjA1Ni4xMjUuMTI1LjEyNUgxM2ExIDEgMCAwMTEgMXYxaC43NTNhMSAxIDAgMDEuOTc3IDEuMjE3bC0uNDQ3IDIuMDExYTUuMDE1IDUuMDE1IDAgMDAtLjg4Ny0uNjE4TDE0Ljc1MyA2SDIuODAzbC0xLjU1NiA3ek0xNiAxMmE0IDQgMCAxMS04IDAgNCA0IDAgMDE4IDB6bS00IC41YS41NzcuNTc3IDAgMDEtLjU3LS40OTVsLS4yOS0yLjAxNWEuODY3Ljg2NyAwIDExMS43MTggMGwtLjI4OCAyLjAxNWEuNTc3LjU3NyAwIDAxLS41Ny40OTV6bTAgMi41YTEgMSAwIDEwMC0yIDEgMSAwIDAwMCAyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Gb2xkZXJFeGNsYW1hdGlvbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRm9sZGVyT3BlbiA9IGZ1bmN0aW9uIEV1aUljb25Gb2xkZXJPcGVuKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMSA5LjVsLjgyNi0zLjcxN0ExIDEgMCAwMTIuODAyIDVIMTNWNEg3LjEyNUExLjEyNSAxLjEyNSAwIDAxNiAyLjg3NVYySDF2Ny41em0uMjQ3IDMuNWgxMS45NWwxLjU1Ni03SDIuODAzbC0xLjU1NiA3ek0xMyAxNEgxYTEgMSAwIDAxLTEtMVYyYTEgMSAwIDAxMS0xaDUuMjVhLjc1Ljc1IDAgMDEuNzUuNzV2MS4xMjVjMCAuMDY5LjA1Ni4xMjUuMTI1LjEyNUgxM2ExIDEgMCAwMTEgMXYxaC43NTNhMSAxIDAgMDEuOTc3IDEuMjE3bC0xLjU1NiA3YTEgMSAwIDAxLS45NzYuNzgzSDEzelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Gb2xkZXJPcGVuOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25GcmFtZU5leHQgPSBmdW5jdGlvbiBFdWlJY29uRnJhbWVOZXh0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMyAyYTEgMSAwIDAwLTEgMXYxMGExIDEgMCAxMDIgMFYzYTEgMSAwIDAwLTEtMXptNS4xNDYuMjJsNy4yIDQuNTgxYTEuNDI1IDEuNDI1IDAgMDEwIDIuMzk4bC03LjIgNC41ODFDNy4yMSAxNC4zNzUgNiAxMy42OTIgNiAxMi41ODFWMy40MmMwLTEuMTEyIDEuMjEtMS43OTUgMi4xNDYtMS4yelwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRnJhbWVOZXh0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25GcmFtZVByZXZpb3VzID0gZnVuY3Rpb24gRXVpSWNvbkZyYW1lUHJldmlvdXMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMyAyYTEgMSAwIDAxMSAxdjEwYTEgMSAwIDExLTIgMFYzYTEgMSAwIDAxMS0xem0tNS4xNDYuMjJsLTcuMiA0LjU4MWExLjQyNSAxLjQyNSAwIDAwMCAyLjM5OGw3LjIgNC41ODFjLjkzNi41OTUgMi4xNDYtLjA4OCAyLjE0Ni0xLjE5OVYzLjQyYzAtMS4xMTEtMS4yMS0xLjc5NC0yLjE0Ni0xLjE5OXpcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkZyYW1lUHJldmlvdXM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkZ1bGxTY3JlZW5FeGl0ID0gZnVuY3Rpb24gRXVpSWNvbkZ1bGxTY3JlZW5FeGl0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOSA3VjNoMXYzaDN2MUg5ek03IDdIM1Y2aDNWM2gxdjR6bTIgMmg0djFoLTN2M0g5Vjl6TTcgOXY0SDZ2LTNIM1Y5aDR6TTAgMS45OTRDMCAuODkzLjg5NSAwIDEuOTk0IDBoMTIuMDEyQzE1LjEwNyAwIDE2IC44OTUgMTYgMS45OTR2MTIuMDEyQTEuOTk1IDEuOTk1IDAgMDExNC4wMDYgMTZIMS45OTRBMS45OTUgMS45OTUgMCAwMTAgMTQuMDA2VjEuOTk0em0xIDB2MTIuMDEyYzAgLjU0OC40NDYuOTk0Ljk5NC45OTRoMTIuMDEyYS45OTUuOTk1IDAgMDAuOTk0LS45OTRWMS45OTRBLjk5NS45OTUgMCAwMDE0LjAwNiAxSDEuOTk0QS45OTUuOTk1IDAgMDAxIDEuOTk0elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25GdWxsU2NyZWVuRXhpdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRnVsbFNjcmVlbiA9IGZ1bmN0aW9uIEV1aUljb25GdWxsU2NyZWVuKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTMgM3Y0aC0xVjRIOVYzaDR6TTMgM2g0djFINHYzSDNWM3ptMTAgMTBIOXYtMWgzVjloMXY0ek0zIDEzVjloMXYzaDN2MUgzek0wIDEuOTk0QzAgLjg5My44OTUgMCAxLjk5NCAwaDEyLjAxMkMxNS4xMDcgMCAxNiAuODk1IDE2IDEuOTk0djEyLjAxMkExLjk5NSAxLjk5NSAwIDAxMTQuMDA2IDE2SDEuOTk0QTEuOTk1IDEuOTk1IDAgMDEwIDE0LjAwNlYxLjk5NHptMSAwdjEyLjAxMmMwIC41NDguNDQ2Ljk5NC45OTQuOTk0aDEyLjAxMmEuOTk1Ljk5NSAwIDAwLjk5NC0uOTk0VjEuOTk0QS45OTUuOTk1IDAgMDAxNC4wMDYgMUgxLjk5NEEuOTk1Ljk5NSAwIDAwMSAxLjk5NHpcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkZ1bGxTY3JlZW47IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkZ1bmN0aW9uID0gZnVuY3Rpb24gRXVpSWNvbkZ1bmN0aW9uKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTMgMi4yMjZ2Mi4yMThjLS4zNTktLjE0My0uODQ1LS4yMTgtMS4zMTUtLjIxOC0xLjA1OSAwLTEuNjMxLjUxOS0xLjgwMiAxLjU2NWwtLjE2OC45MzdoMi43OTh2Mi4xNTlIOS40MWwtLjMxMyAxLjY3NEM4LjY5NiAxMi45ODcgNy4yNjEgMTQgNC43ODUgMTRjLS43MTggMC0xLjM1LS4wOTItMS43ODUtLjI1MXYtMi4yNDNjLjQxOC4xNzYuOTA1LjI2OCAxLjM4My4yNjggMS4wMDggMCAxLjU0Ni0uNDM1IDEuNzI1LTEuNTIzbC4yNC0xLjM2NEgzLjc4N1Y2LjcyOGgyLjgxMmwuMjg4LTEuMjY0QzcuMjg2IDMuMDcxIDguNjYyIDIgMTEuMzUyIDJjLjU5OCAwIDEuMzA2LjEgMS42NDguMjI2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25GdW5jdGlvbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uR2VhciA9IGZ1bmN0aW9uIEV1aUljb25HZWFyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNLjE2NCAxMC4zMjlMMS44NyA4IC4xNjMgNS42N2MuMTgtLjYwMS40My0xLjE5Ljc1OC0xLjc1N2E4LjE5NyA4LjE5NyAwIDAxMS4xNDItMS41MzVsMi44NzIuMzEzTDYuMDk5LjA1YTguMTY2IDguMTY2IDAgMDEzLjgtLjAwM2wxLjE2NiAyLjY0NCAyLjg3Mi0uMzEzYTguMTY2IDguMTY2IDAgMDExLjg5OSAzLjI5M0wxNC4xMyA4bDEuNzA2IDIuMzNjLS4xOC42MDEtLjQzIDEuMTktLjc1OCAxLjc1N2E4LjE5NyA4LjE5NyAwIDAxLTEuMTQyIDEuNTM1bC0yLjg3Mi0uMzEzLTEuMTY0IDIuNjQxYTguMTY2IDguMTY2IDAgMDEtMy44LjAwM2wtMS4xNjYtMi42NDQtMi44NzIuMzEzYTguMTY2IDguMTY2IDAgMDEtMS44OTktMy4yOTN6bTQuNjYzIDEuOTg2YTEgMSAwIDAxMS4wMjMuNTkxbC45NTcgMi4xN2MuNzkuMTM0IDEuNTk3LjEzMiAyLjM4Ny0uMDAxbC45NTYtMi4xNjlhMSAxIDAgMDExLjAyMy0uNTlsMi4zNTguMjU2YTcuMjMgNy4yMyAwIDAwMS4xOTQtMi4wNjhsLTEuNDAxLTEuOTEzYTEgMSAwIDAxMC0xLjE4MmwxLjQtMS45MTJhNy4xNjUgNy4xNjUgMCAwMC0xLjE5Mi0yLjA2OWwtMi4zNTkuMjU3YTEgMSAwIDAxLTEuMDIzLS41OTFMOS4xOTMuOTI0YTcuMTY1IDcuMTY1IDAgMDAtMi4zODcuMDAxTDUuODUgMy4wOTRhMSAxIDAgMDEtMS4wMjMuNTlsLTIuMzU4LS4yNTZhNy4yMyA3LjIzIDAgMDAtMS4xOTQgMi4wNjhsMS40MDEgMS45MTNhMSAxIDAgMDEwIDEuMTgybC0xLjQgMS45MTJjLjI4Ljc1MS42ODEgMS40NSAxLjE5MiAyLjA2OWwyLjM1OS0uMjU3ek04IDExYTMgMyAwIDExMC02IDMgMyAwIDAxMCA2em0wLTFhMiAyIDAgMTAwLTQgMiAyIDAgMDAwIDR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkdlYXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkdsYXNzZXMgPSBmdW5jdGlvbiBFdWlJY29uR2xhc3NlcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuMDM1IDlBMy41IDMuNSAwIDAxMTUgNy4wNVY0LjVjMC0xLjA3Mi0uNjQ4LTEuNzItMi4wOTgtMi4wMWEuNS41IDAgMDEuMTk2LS45OEMxNC45ODEgMS44ODYgMTYgMi45MDUgMTYgNC41djQuMjVjMCAuMDcyLS4wMTUuMTQtLjA0My4yMDJBMy41IDMuNSAwIDExOS4wMzUgMTBoLTIuMDdBMy41IDMuNSAwIDExLjA0MyA4Ljk1Mi40OTguNDk4IDAgMDEwIDguNzVWNC41YzAtMS41OTUgMS4wMTktMi42MTQgMi45MDItMi45OWEuNS41IDAgMDEuMTk2Ljk4QzEuNjQ4IDIuNzggMSAzLjQyOCAxIDQuNXYyLjU1QTMuNSAzLjUgMCAwMTYuOTY1IDloMi4wN3pNMy41IDEyYTIuNSAyLjUgMCAxMDAtNSAyLjUgMi41IDAgMDAwIDV6bTkgMGEyLjUgMi41IDAgMTAwLTUgMi41IDIuNSAwIDAwMCA1elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25HbGFzc2VzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25HbG9iZSA9IGZ1bmN0aW9uIEV1aUljb25HbG9iZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEuMDE5IDhhNi40NjIgNi40NjIgMCAwMDEuMDAzIDNoMi4zODJhMTQuNDY5IDE0LjQ2OSAwIDAxLS4zOTYtM2gtMi45OXptMC0xaDIuOTg5Yy4wMzMtMS4wNzguMTcyLTIuMDk0LjM5Ni0zSDIuMDIyYTYuNDYyIDYuNDYyIDAgMDAtMS4wMDMgM3pNMTMuOTggOGgtMi45ODlhMTQuNDY5IDE0LjQ2OSAwIDAxLS4zOTYgM2gyLjM4MmE2LjQ2MiA2LjQ2MiAwIDAwMS4wMDMtM3ptMC0xYTYuNDYyIDYuNDYyIDAgMDAtMS4wMDMtM2gtMi4zODJjLjIyNC45MDYuMzYzIDEuOTIyLjM5NiAzaDIuOTl6TTUuMDA4IDhjLjAzNyAxLjEwNy4xOTUgMi4xMjcuNDI5IDNoNC4xMjZjLjIzNC0uODczLjM5Mi0xLjg5My40MjktM0g1LjAwOHptMC0xaDQuOTg0YTEzLjQyMiAxMy40MjIgMCAwMC0uNDI5LTNINS40MzdhMTMuNDIyIDEzLjQyMiAwIDAwLS40MjkgM3pNLjAxNiA4SDBWN2guMDE2YTcuNSA3LjUgMCAwMTE0Ljk2OCAwSDE1djFoLS4wMTZBNy41IDcuNSAwIDAxLjAxNiA4em0yLjc5NCA0YTYuNTAxIDYuNTAxIDAgMDAyLjcxNyAxLjY5NUE3LjMxNSA3LjMxNSAwIDAxNC43IDEySDIuODF6bTkuMzggMEgxMC4zYy0uMjMuNjU3LS41MSAxLjIzLS44MjcgMS42OTVBNi41MDEgNi41MDEgMCAwMDEyLjE5IDEyem0tNi40MjggMGMuNDg0IDEuMjQgMS4xMzIgMiAxLjczOCAyIC42MDYgMCAxLjI1NC0uNzYgMS43MzgtMkg1Ljc2MnpNMi44MSAzSDQuN2MuMjMtLjY1Ny41MS0xLjIzLjgyNy0xLjY5NUE2LjUwMSA2LjUwMSAwIDAwMi44MSAzem05LjM4IDBhNi41MDEgNi41MDEgMCAwMC0yLjcxNy0xLjY5NWMuMzE3LjQ2NS41OTcgMS4wMzguODI3IDEuNjk1aDEuODl6TTUuNzYyIDNoMy40NzZDOC43NTQgMS43NiA4LjEwNiAxIDcuNSAxYy0uNjA2IDAtMS4yNTQuNzYtMS43MzggMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uR2xvYmU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkdyYWIgPSBmdW5jdGlvbiBFdWlJY29uR3JhYihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMy41IDZjLjI3NiAwIC41LjIzMi41LjUgMCAuMjc2LS4yMjkuNS0uNS41aC0xMWEuNTA1LjUwNSAwIDAxLS41LS41YzAtLjI3Ni4yMjktLjUuNS0uNWgxMXptMCAzYy4yNzYgMCAuNS4yMzIuNS41IDAgLjI3Ni0uMjI5LjUtLjUuNWgtMTFhLjUwNS41MDUgMCAwMS0uNS0uNWMwLS4yNzYuMjI5LS41LjUtLjVoMTF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkdyYWI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkdyYWJIb3Jpem9udGFsID0gZnVuY3Rpb24gRXVpSWNvbkdyYWJIb3Jpem9udGFsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTYgMi41YzAtLjI3Ni4yMzItLjUuNS0uNS4yNzYgMCAuNS4yMjkuNS41djExYzAgLjI3Ni0uMjMyLjUtLjUuNWEuNTAzLjUwMyAwIDAxLS41LS41di0xMXptMyAwYzAtLjI3Ni4yMzItLjUuNS0uNS4yNzYgMCAuNS4yMjkuNS41djExYzAgLjI3Ni0uMjMyLjUtLjUuNWEuNTAzLjUwMyAwIDAxLS41LS41di0xMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uR3JhYkhvcml6b250YWw7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkdyaWQgPSBmdW5jdGlvbiBFdWlJY29uR3JpZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEgNVYxaDR2NEgxem0zLTFWMkgydjJoMnptMiAxVjFoNHY0SDZ6bTMtMVYySDd2Mmgyem0yIDFWMWg0djRoLTR6bTEtMWgyVjJoLTJ2MnpNMSAxMFY2aDR2NEgxem0zLTFWN0gydjJoMnptMiAxVjZoNHY0SDZ6bTMtMVY3SDd2Mmgyem0yIDFWNmg0djRoLTR6bTMtMVY3aC0ydjJoMnpNMSAxNXYtNGg0djRIMXptMS0xaDJ2LTJIMnYyem00IDF2LTRoNHY0SDZ6bTEtMWgydi0ySDd2MnptNCAxdi00aDR2NGgtNHptMS0xaDJ2LTJoLTJ2MnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uR3JpZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uSGVhcnQgPSBmdW5jdGlvbiBFdWlJY29uSGVhcnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjQwMiAzLjA5OGEzLjc1IDMuNzUgMCAwMC01LjMwNCA1LjMwNGw1LjU1OCA1LjI3TDggMTRsNS44OTItNS41ODhhMy43NSAzLjc1IDAgMTAtNS4yOTQtNS4zMTNMOCAzLjY5N2wtLjU5OC0uNTk5ek0yLjc5NiA3LjY4NWEyLjc0NyAyLjc0NyAwIDAxLjAxLTMuODggMi43NSAyLjc1IDAgMDEzLjg4OSAwTDggNS4xMTFsMS4zMDUtMS4zMDZhMi43NSAyLjc1IDAgMTEzLjg5IDMuODlMOCAxMi42MiAyLjc5NiA3LjY4NXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uSGVhcnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkhlYXRtYXAgPSBmdW5jdGlvbiBFdWlJY29uSGVhdG1hcChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyIDlhMyAzIDAgMTEwIDYgMyAzIDAgMDEwLTZ6bTAgMWEyIDIgMCAxMDAgNCAyIDIgMCAwMDAtNHpNNCAyYTIgMiAwIDExMCA0IDIgMiAwIDAxMC00em0wIDFhMSAxIDAgMTAwIDIgMSAxIDAgMDAwLTJ6bTAgNWE0IDQgMCAxMTAgOCA0IDQgMCAwMTAtOHptMCAxYTMgMyAwIDEwMCA2IDMgMyAwIDAwMC02em04LTlhNCA0IDAgMTEwIDggNCA0IDAgMDEwLTh6bTAgMWEzIDMgMCAxMDAgNiAzIDMgMCAwMDAtNnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uSGVhdG1hcDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uSGVscCA9IGZ1bmN0aW9uIEV1aUljb25IZWxwKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEzLjYgMTIuMTg2bC0xLjM1Ny0xLjM1OGMtLjAyNS0uMDI1LS4wNTgtLjAzNC0uMDg0LS4wNTYuNTMtLjc5NC44NC0xLjc0Ni44NC0yLjc3M2E0Ljk3NyA0Ljk3NyAwIDAwLS44NC0yLjc3MmMuMDI2LS4wMi4wNTktLjAzLjA4NC0uMDU2TDEzLjYgMy44MTNhNi45NiA2Ljk2IDAgMDEwIDguMzczek04IDE1QTYuOTU2IDYuOTU2IDAgMDEzLjgxNCAxMy42bDEuMzU4LTEuMzU4Yy4wMjUtLjAyNS4wMzQtLjA1Ny4wNTUtLjA4NEM2LjAyIDEyLjY4OCA2Ljk3NCAxMyA4IDEzYTQuOTc4IDQuOTc4IDAgMDAyLjc3My0uODRjLjAyLjAyNi4wMy4wNTguMDU2LjA4M2wxLjM1NyAxLjM1OEE2Ljk1NiA2Ljk1NiAwIDAxOCAxNXptLTUuNjAxLTIuODEzYTYuOTYzIDYuOTYzIDAgMDEwLTguMzczbDEuMzU5IDEuMzU4Yy4wMjQuMDI1LjA1Ny4wMzUuMDg0LjA1NkE0Ljk3IDQuOTcgMCAwMDMgOGMwIDEuMDI3LjMxIDEuOTguODQyIDIuNzczLS4wMjcuMDIyLS4wNi4wMzEtLjA4NC4wNTZsLTEuMzYgMS4zNTh6bTUuNi0uMTg3QTQgNCAwIDExOCA0YTQgNCAwIDAxMCA4ek04IDFjMS41NzMgMCAzLjAxOS41MjUgNC4xODcgMS40bC0xLjM1NyAxLjM1OGMtLjAyNS4wMjUtLjAzNS4wNTctLjA1Ni4wODRBNC45NzkgNC45NzkgMCAwMDggM2E0Ljk3OSA0Ljk3OSAwIDAwLTIuNzczLjg0MmMtLjAyMS0uMDI3LS4wMy0uMDU5LS4wNTUtLjA4NEwzLjgxNCAyLjRBNi45NTcgNi45NTcgMCAwMTggMXptMC0xYTguMDAxIDguMDAxIDAgMTAuMDAzIDE2LjAwMkE4LjAwMSA4LjAwMSAwIDAwOCAwelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25IZWxwOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ib21lID0gZnVuY3Rpb24gRXVpSWNvbkhvbWUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04LjEzIDEuMjI5bDUuNSA0LjQ3YTEgMSAwIDAxLjM3Ljc3N1YxNGExIDEgMCAwMS0xIDFIMmExIDEgMCAwMS0xLTFWNi40NzZhMSAxIDAgMDEuMzctLjc3Nmw1LjUtNC40NzFhMSAxIDAgMDExLjI2IDB6TTEzIDYuNDc2TDcuNSAyLjAwNSAyIDYuNDc1VjE0aDExVjYuNDc2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ib21lOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25JSW5DaXJjbGUgPSBmdW5jdGlvbiBFdWlJY29uSUluQ2lyY2xlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTcuNSAxMS41MDhMNy40NjggOEg2LjI1VjdoMi40MDFsLjAzIDMuNTA4SDkuOHYxSDcuNXptLS4yNS02LjIwMmEuODMuODMgMCAwMS4yMDctLjU3N2MuMTM3LS4xNTMuMzM0LS4yMjkuNTktLjIyOS4yNTYgMCAuNDU0LjA3Ni41OTQuMjMuMTQuMTUyLjIwOS4zNDUuMjA5LjU3NiAwIC4yMjgtLjA3LjQxNy0uMjEuNTY4LS4xNC4xNS0uMzM3LjIyNi0uNTkzLjIyNi0uMjU2IDAtLjQ1My0uMDc1LS41OS0uMjI2YS44MS44MSAwIDAxLS4yMDctLjU2OHpNOCAxM0E1IDUgMCAxMDggM2E1IDUgMCAwMDAgMTB6bTAgMUE2IDYgMCAxMTggMmE2IDYgMCAwMTAgMTJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbklJbkNpcmNsZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uSW1hZ2UgPSBmdW5jdGlvbiBFdWlJY29uSW1hZ2UoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02IDVhMiAyIDAgMTEtNCAwIDIgMiAwIDAxNCAwem05LTRhMSAxIDAgMDExIDF2MTJhMSAxIDAgMDEtMSAxSDFhMSAxIDAgMDEtMS0xVjJhMSAxIDAgMDExLTF6bS0zLjQ0OCA2LjEzNGwtMy43NiAyLjc2OWEuNS41IDAgMDEtLjQzNi4wNzdsLS4wODctLjAzNC0xLjcxMy0uODdMMSAxMS44VjE0aDE0VjkuNzUxbC0zLjQ0OC0yLjYxN3pNMTUgMkgxdjguNjM1bDQuMjgtMi41NThhLjUuNSAwIDAxLjM4OS0uMDU0bC4wOTQuMDM3IDEuNjg0Ljg1NSAzLjgxMy0yLjgwN2EuNS41IDAgMDEuNTItLjA0NWwuMDc5LjA1TDE1IDguNDk1VjJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkltYWdlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25JbXBvcnQgPSBmdW5jdGlvbiBFdWlJY29uSW1wb3J0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOSAxMC4xMTRsMS44NS0xLjk0M2EuNTIuNTIgMCAwMS43NyAwYy4yMTQuMjI4LjIxNC42IDAgLjgyOWwtMS45NSAyLjA1YTEuNTUyIDEuNTUyIDAgMDEtMi4zMSAwTDUuNDEgOWEuNjE3LjYxNyAwIDAxMC0uODI5LjUyLjUyIDAgMDEuNzcgMEw4IDEwLjA4MlYxLjU1NkM4IDEuMjQ5IDguMjI0IDEgOC41IDFzLjUuMjQ5LjUuNTU2djguNTU4ek00LjE4IDZhLjk5My45OTMgMCAwMC0uOTcyLjgwNGwtMS4xODkgNkEuOTk1Ljk5NSAwIDAwMi45OTEgMTRoMTEuMDE4YTEgMSAwIDAwLjk3Mi0xLjE5NmwtMS4xOS02YS45OTMuOTkzIDAgMDAtLjk3LS44MDRINC4xOHpNNiA1djFoNVY1aDEuODI1Yy45NDYgMCAxLjc2LjY3MyAxLjk0NiAxLjYwOGwxLjE5IDZBMiAyIDAgMDExNC4wMTYgMTVIMi45ODRhMS45OTIgMS45OTIgMCAwMS0xLjk0NS0yLjM5MmwxLjE5LTZDMi40MTQgNS42NzMgMy4yMjkgNSA0LjE3NCA1SDZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkltcG9ydDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uSW5kZXhDbG9zZSA9IGZ1bmN0aW9uIEV1aUljb25JbmRleENsb3NlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIgMkgydjExaDZ2MUgxVjFoMTJ2NmgtMVYyek01IDVoNS45OTlWNEg1djF6TTMgNVY0aDF2MUgzem0yIDNWN2gzdjFINXpNMyA4VjdoMXYxSDN6bTIgM3YtMWgydjFINXptNS41LTEuMjA3TDkuMDg2IDguMzc5bC0uNzA3LjcwN0w5Ljc5MyAxMC41bC0xLjQxNCAxLjQxNC43MDcuNzA3IDEuNDE0LTEuNDE0IDEuNDE0IDEuNDE0LjcwNy0uNzA3LTEuNDE0LTEuNDE0IDEuNDE0LTEuNDE0LS43MDctLjcwN0wxMC41IDkuNzkzek0zIDExdi0xaDF2MUgzem03LjUtNWE0LjUgNC41IDAgMTEwIDkgNC41IDQuNSAwIDAxMC05elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25JbmRleENsb3NlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25JbmRleEVkaXQgPSBmdW5jdGlvbiBFdWlJY29uSW5kZXhFZGl0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIgMkgydjExaDR2MUgxVjFoMTJ2NWgtMVYyek01IDVoNS45OTlWNEg1djF6TTMgNVY0aDF2MUgzem0yIDNWN2g2djFINXpNMyA4VjdoMXYxSDN6bTIgM3YtMWgzdjFINXptLTIgMHYtMWgxdjFIM3ptNC41MDIgMS40MUwxMi45MTMgNyAxNSA5LjA4N2wtNS40MSA1LjQxTDcgMTVsLjUwMi0yLjU5elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25JbmRleEVkaXQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkluZGV4Rmx1c2ggPSBmdW5jdGlvbiBFdWlJY29uSW5kZXhGbHVzaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xNC41MTYgOUgxMC41YS41LjUgMCAwMTAtMWg0LjAxNkwxMy4xMSA1Ljk0OGMtLjE3MS0uMjUyLS4xMzctLjYyLjA3OS0uODIxLjIxNy0uMi41MzEtLjE1OS43MDMuMDkybDIgMi45MTZhLjY0OC42NDggMCAwMS4xMDguMzk3LjY0My42NDMgMCAwMS0uMTA4LjMzMmwtMiAyLjkxOEEuNDc4LjQ3OCAwIDAxMTMuNSAxMmEuNDU3LjQ1NyAwIDAxLS4zMTItLjEyN2MtLjIxNi0uMjAyLS4yNS0uNTctLjA3OS0uODJMMTQuNTE2IDl6TTMgMTVIMWExIDEgMCAwMS0xLTFWMmExIDEgMCAwMTEtMWg3LjhjLjI3NCAwIC41MzcuMTEzLjcyNi4zMTJsMi4yIDIuNDI4Yy4xNzYuMTg2LjI3NC40MzMuMjc0LjY4OVY3aC0xVjVIOC41YS41LjUgMCAwMS0uNS0uNVYySDN2MTJoOHYtNGgxdjRhMSAxIDAgMDEtMSAxSDN6bS0xLTFWMkgxdjEyaDF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkluZGV4Rmx1c2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkluZGV4TWFwcGluZyA9IGZ1bmN0aW9uIEV1aUljb25JbmRleE1hcHBpbmcoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDhINC45MTVhMS41IDEuNSAwIDExMC0xSDhWMi41QTEuNSAxLjUgMCAwMTkuNSAxaDIuNTg1YTEuNSAxLjUgMCAxMTAgMUg5LjVhLjUuNSAwIDAwLS41LjV2MTBhLjUuNSAwIDAwLjUuNWgyLjU4NWExLjUgMS41IDAgMTEwIDFIOS41QTEuNSAxLjUgMCAwMTggMTIuNVY4ek0zLjUgM2ExLjUgMS41IDAgMTEwLTMgMS41IDEuNSAwIDAxMCAzem0wIDEyYTEuNSAxLjUgMCAxMTAtMyAxLjUgMS41IDAgMDEwIDN6bTEwLTZhMS41IDEuNSAwIDExMC0zIDEuNSAxLjUgMCAwMTAgM3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uSW5kZXhNYXBwaW5nOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25JbmRleE9wZW4gPSBmdW5jdGlvbiBFdWlJY29uSW5kZXhPcGVuKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIgMkgydjExaDZ2MUgxVjFoMTJ2NmgtMVYyek01IDVoNS45OTlWNEg1djF6TTMgNVY0aDF2MUgzem0yIDNWN2gzdjFINXpNMyA4VjdoMXYxSDN6bTIgM3YtMWgydjFINXptNS0xSDh2MWgydjJoMXYtMmgydi0xaC0yVjhoLTF2MnptLTcgMXYtMWgxdjFIM3ptNy41LTVhNC41IDQuNSAwIDExMCA5IDQuNSA0LjUgMCAwMTAtOXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uSW5kZXhPcGVuOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25JbmRleFJ1bnRpbWUgPSBmdW5jdGlvbiBFdWlJY29uSW5kZXhSdW50aW1lKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIgMkgydjExaDZ2MUgxVjFoMTJ2Ni44MzlsLTEtLjcwN1YyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCAxMXYtMUg1djFoM3ptMC0zLjA1NWMwLS4zNDIuMDgyLS42NjQuMjMtLjk0NUg1djFoM3YtLjA1NXpNNSA1aDUuOTk5VjRINXYxek0zIDR2MWgxVjRIM3ptMCAzdjFoMVY3SDN6bTAgM3YxaDF2LTFIM3ptMTEuNjA3LjJsLTQuMzItMy4wNTVDOS43MjcgNi43NSA5IDcuMjA0IDkgNy45NDV2Ni4xMDhjMCAuNzQuNzI2IDEuMTk2IDEuMjg3LjhsNC4zMi0zLjA1NWMuNTI0LS4zNy41MjQtMS4yMjggMC0xLjU5OHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uSW5kZXhSdW50aW1lOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25JbmRleFNldHRpbmdzID0gZnVuY3Rpb24gRXVpSWNvbkluZGV4U2V0dGluZ3MoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01IDVoNS45OTlWNEg1djF6TTMgNWgxVjRIM3Yxem0wIDNoMVY3SDN2MXptNi4wMjItMWwtLjE1LjMzMy0uNzM3LS4wNzgtLjQ2Ny0uMDUtLjMzLjM0MkE1LjEzIDUuMTMgMCAwMDYuOTQ4IDhINVY3aDQuMDIyem0tMy4wMDUgM0w2IDEwLjA1NmwuMzA2LjQxMS4zOTkuNTMzSDV2LTFoMS4wMTd6TTMgMTFoMXYtMUgzdjF6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMyA3LjA1bC0uMTYyLS4zNTktLjItLjQ0Ny0uNDctLjExQTUuMDE5IDUuMDE5IDAgMDAxMiA2LjA5OFYySDJ2MTFoNC4zNmMuMTU3LjM1NC4zNTUuNjkuNTkgMUgxVjFoMTJ2Ni4wNXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTExLjAwNCA3Yy4zMjIgMCAuNjQ2LjAzNi45NjYuMTA5bC41OTUgMS4yOTMgMS40NjUtLjE1MmMuNDU3LjQ2Mi43ODYgMS4wMTYuOTY5IDEuNjFsLS44NyAxLjE0Ljg3MSAxLjE0MWEzLjk0IDMuOTQgMCAwMS0uMzg3Ljg1OSA0LjA1OCA0LjA1OCAwIDAxLS41ODMuNzVsLTEuNDY1LS4xNTItLjU5NCAxLjI5MmE0LjM3IDQuMzcgMCAwMS0xLjk0MS4wMDFsLS41OTQtMS4yOTMtMS40NjYuMTUyYTMuOTU0IDMuOTU0IDAgMDEtLjk2OS0xLjYxbC44Ny0xLjE0TDcgOS44NmEzLjk0NyAzLjk0NyAwIDAxLjk3LTEuNjFsMS40NjYuMTUyLjU5My0xLjI5MmE0LjM3IDQuMzcgMCAwMS45NzUtLjExek0xMSAxMmExIDEgMCAxMC4wMDItMS45OThBMSAxIDAgMDAxMSAxMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uSW5kZXhTZXR0aW5nczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uSW5wdXRPdXRwdXQgPSBmdW5jdGlvbiBFdWlJY29uSW5wdXRPdXRwdXQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMCAxMy45OTl2LTIuOTloMVYxNUgwVjFoMTF2My45OTloLTFWMi4wMDFIMXYxMS45OTh6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00LjUgMTBWOUgxMXYxek0xMyA5LjVsMy0zLTMtM3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUuNSA2LjV2NmwtMy0zek03IDdWNmg2LjV2MXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uSW5wdXRPdXRwdXQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkluc3BlY3QgPSBmdW5jdGlvbiBFdWlJY29uSW5zcGVjdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE1LjM2MyAxNC42NThhLjUuNSAwIDExLS43MTMuN2wtMi45Ny0zLjAyM2EuNS41IDAgMDEuMDAxLS43QTMuOSAzLjkgMCAxMDguOSAxMi44YS41LjUgMCAxMTAgLjk5OSA0LjkgNC45IDAgMTEzLjgyMS0xLjgzM2wyLjY0MiAyLjY5MXpNMy4wOTQgMTNhLjUuNSAwIDExMCAxSDIuNUEyLjUgMi41IDAgMDEwIDExLjV2LTlBMi41IDIuNSAwIDAxMi41IDBoOUEyLjUgMi41IDAgMDExNCAyLjV2LjU5OWEuNS41IDAgMTEtMSAwVjIuNUExLjUgMS41IDAgMDAxMS41IDFoLTlBMS41IDEuNSAwIDAwMSAyLjV2OUExLjUgMS41IDAgMDAyLjUgMTNoLjU5NHpNMi41IDNhLjUuNSAwIDExMC0xIC41LjUgMCAwMTAgMXptMiAwYS41LjUgMCAxMTAtMSAuNS41IDAgMDEwIDF6bTIgMGEuNS41IDAgMTEwLTEgLjUuNSAwIDAxMCAxem0tNCAyYS41LjUgMCAxMTAtMSAuNS41IDAgMDEwIDF6bTIgMGEuNS41IDAgMTEwLTEgLjUuNSAwIDAxMCAxem0tMiAxYS41LjUgMCAxMTAgMSAuNS41IDAgMDEwLTF6bTAgM2EuNS41IDAgMTEwLTEgLjUuNSAwIDAxMCAxem02LTZhLjUuNSAwIDExMC0xIC41LjUgMCAwMTAgMXptMiAwYS41LjUgMCAxMTAtMSAuNS41IDAgMDEwIDF6bS04IDhhLjUuNSAwIDExMC0xIC41LjUgMCAwMTAgMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uSW5zcGVjdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uSW52ZXJ0ID0gZnVuY3Rpb24gRXVpSWNvbkludmVydChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggMTMuMjVhNS4yNSA1LjI1IDAgMTAwLTEwLjUgNS4yNSA1LjI1IDAgMDAwIDEwLjV6TTggMTRBNiA2IDAgMTE4IDJhNiA2IDAgMDEwIDEyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCAyYTYgNiAwIDEwMCAxMlYyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25JbnZlcnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbklwID0gZnVuY3Rpb24gRXVpSWNvbklwKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIgMmEyIDIgMCAwMTIgMnY4YTIgMiAwIDAxLTIgMkg0YTIgMiAwIDAxLTItMlY0YTIgMiAwIDAxMi0yaDh6bS0yIDNIOHY2aDFWOS4wMTRoMWMuMjk4LS4wMTMgMiAwIDItMi4wMTggMC0xLjc0LTEuMzE0LTEuOTUyLTEuODI1LTEuOTg3TDEwIDV6TTYgNUg1djZoMVY1em00IC45ODRjLjY2NyAwIDEgLjMzNiAxIDEuMDA4QzExIDcuNjY0IDEwLjY2NyA4IDEwIDhIOVY1Ljk4NHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uSXA7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbktleWJvYXJkID0gZnVuY3Rpb24gRXVpSWNvbktleWJvYXJkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0wIDNoMTZ2MTFIMFYzem0xNSAxMFY0SDF2OWgxNHpNMiA1aDJ2MUgyVjV6bTIgN3YtMUgydjFoMnptMTAtMXYxaC0ydi0xaDJ6bS0zIDF2LTFINXYxaDZ6TTUgNWgxdjFINVY1ek0zIDdIMnYxaDFWN3ptMyAwaDF2MUg2Vjd6TTMgOUgydjFoMVY5em0zIDBoMXYxSDZWOXptMi00SDd2MWgxVjV6TTQgN2gxdjFINFY3em01IDBIOHYxaDFWN3ptMSAwaDF2MWgtMVY3ek01IDlINHYxaDFWOXptMyAwaDF2MUg4Vjl6bTMgMGgtMXYxaDFWOXpNOSA1aDF2MUg5VjV6bTMgMGgtMXYxaDFWNXptMSAwaDF2MWgtMVY1em0xIDJoLTJ2M2gyVjd6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbktleWJvYXJkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25LcWxGaWVsZCA9IGZ1bmN0aW9uIEV1aUljb25LcWxGaWVsZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxMCxcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxMFwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggOWE1IDUgMCAxMTAtOCA1IDUgMCAxMTAgOHptLjc1LS42OTJhNCA0IDAgMTAwLTYuNjE1QTQuOTgxIDQuOTgxIDAgMDExMCA1YTQuOTgxIDQuOTgxIDAgMDEtMS4yNSAzLjMwOHpNNC4xMzMgOFY1LjU1OWgyLjQ5NnYtLjYyNUg0LjEzM1YyLjk5NmgyLjcxOXYtLjYzM0gzLjQzVjhoLjcwM3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uS3FsRmllbGQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbktxbEZ1bmN0aW9uID0gZnVuY3Rpb24gRXVpSWNvbktxbEZ1bmN0aW9uKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNyA3SDN2Mmg0djJsMy0zLTMtM3Yyek02IDZWNWExIDEgMCAwMTEuNzA3LS43MDdsMyAzYTEgMSAwIDAxMCAxLjQxNGwtMyAzQTEgMSAwIDAxNiAxMXYtMUgzYTEgMSAwIDAxLTEtMVY3YTEgMSAwIDAxMS0xaDN6bTcuNS0zYS41LjUgMCAwMS41LjV2OWEuNS41IDAgMTEtMSAwdi05YS41LjUgMCAwMS41LS41elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25LcWxGdW5jdGlvbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uS3FsT3BlcmFuZCA9IGZ1bmN0aW9uIEV1aUljb25LcWxPcGVyYW5kKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTEuMTkyIDEwLjE0NWwyLjI5OC0xLjc5MmMuMjU5LS4xOTYuMjU5LS41MDkgMC0uNzA2bC0yLjI5OC0xLjc5MmMtLjI1Ni0uMTk2LS4yNTYtLjUxMyAwLS43MDhhLjgxLjgxIDAgMDEuOTMgMGwyLjMgMS43OTFjLjc3Mi41OS43NyAxLjUzNyAwIDIuMTI0bC0yLjMgMS43OTFhLjgxLjgxIDAgMDEtLjkzIDBjLS4yNTYtLjE5NS0uMjU2LS41MTIgMC0uNzA4em0tNi4zODQtNC4yOUwyLjUxIDcuNjQ3Yy0uMjU5LjE5Ni0uMjU5LjUwOSAwIC43MDZsMi4yOTggMS43OTJjLjI1Ni4xOTYuMjU2LjUxMyAwIC43MDhhLjgxLjgxIDAgMDEtLjkzIDBsLTIuMy0xLjc5MWMtLjc3Mi0uNTktLjc3LTEuNTM3IDAtMi4xMjRsMi4zLTEuNzkxYS44MS44MSAwIDAxLjkzIDBjLjI1Ni4xOTUuMjU2LjUxMiAwIC43MDh6TTYuNSA2aDNhLjUuNSAwIDAxMCAxaC0zYS41LjUgMCAwMTAtMXptMCAzaDNhLjUuNSAwIDAxMCAxaC0zYS41LjUgMCAwMTAtMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uS3FsT3BlcmFuZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uS3FsU2VsZWN0b3IgPSBmdW5jdGlvbiBFdWlJY29uS3FsU2VsZWN0b3IoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01IDEyYTQgNCAwIDEwMC04IDQgNCAwIDAwMCA4em0wIDFBNSA1IDAgMTE1IDNhNSA1IDAgMDEwIDEwem02LTFhNCA0IDAgMTAwLTggNCA0IDAgMDAwIDh6bTAgMWE1IDUgMCAxMTAtMTAgNSA1IDAgMDEwIDEwelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25LcWxTZWxlY3RvcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uS3FsVmFsdWUgPSBmdW5jdGlvbiBFdWlJY29uS3FsVmFsdWUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDRhNSA1IDAgMTEwIDggNSA1IDAgMTEwLTh6bS0uNzUuNjkyYTQgNCAwIDEwMCA2LjYxNUE0Ljk4MSA0Ljk4MSAwIDAxNiA4YzAtMS4yNjguNDcyLTIuNDI2IDEuMjUtMy4zMDh6TTExLjM0OCAxMWwyLjA3OC01LjYzN2gtLjczOWwtMS42NTYgNC43MjdoLS4wNjJMOS4zMTMgNS4zNjNoLS43MzlMMTAuNjUyIDExaC42OTZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbktxbFZhbHVlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25LdWJlcm5ldGVzTm9kZSA9IGZ1bmN0aW9uIEV1aUljb25LdWJlcm5ldGVzTm9kZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTQgMTEuNDJWNC41OEw4IDEuMTUyIDIgNC41OHY2Ljg0bDYgMy40MjggNi0zLjQyOHpNOCAxNmw3LTRWNEw4IDAgMSA0djhsNyA0ek04IDQuNjA3bDMgMS43MTRWOS42OGwtMyAxLjcxNC0zLTEuNzE0VjYuMzJsMy0xLjcxNHptNCAxLjEzNHY0LjUxOGwtNCAyLjI4Ni00LTIuMjg2VjUuNzQxbDQtMi4yODYgNCAyLjI4NnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uS3ViZXJuZXRlc05vZGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkt1YmVybmV0ZXNQb2QgPSBmdW5jdGlvbiBFdWlJY29uS3ViZXJuZXRlc1BvZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTQgNS4xNTF2Ni4yNjlsLTUuNSAzLjE0MlY4LjI5TDE0IDUuMTUxem0tLjUwOC0uODYxTDggMS4xNTIgMi41MDggNC4yOSA4IDcuNDI0bDUuNDkyLTMuMTM0ek0yIDUuMTUxbDUuNSAzLjE0djYuMjcyTDIgMTEuNDJWNS4xNXpNMTUgMTJsLTcgNC03LTRWNGw3LTQgNyA0djh6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkt1YmVybmV0ZXNQb2Q7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxheWVycyA9IGZ1bmN0aW9uIEV1aUljb25MYXllcnMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjI3NiAxLjA1M2EuNS41IDAgMDEuNDQ4IDBsNiAzYS41LjUgMCAwMTAgLjg5NGwtNiAzYS41LjUgMCAwMS0uNDQ4IDBsLTYtM2EuNS41IDAgMDEwLS44OTRsNi0zek0yLjYxOCA0LjVMNy41IDYuOTQxIDEyLjM4MiA0LjUgNy41IDIuMDU5IDIuNjE4IDQuNXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEuMDUzIDcuMjc2YS41LjUgMCAwMS42Ny0uMjIzTDcuNSA5Ljk0bDUuNzc2LTIuODg4YS41LjUgMCAxMS40NDguODk0bC02IDNhLjUuNSAwIDAxLS40NDggMGwtNi0zYS41LjUgMCAwMS0uMjIzLS42N3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEuNzI0IDEwLjA1M2EuNS41IDAgMTAtLjQ0OC44OTRsNiAzYS41LjUgMCAwMC40NDggMGw2LTNhLjUuNSAwIDEwLS40NDgtLjg5NEw3LjUgMTIuOTRsLTUuNzc2LTIuODg4elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25MYXllcnM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxldHRlcmluZyA9IGZ1bmN0aW9uIEV1aUljb25MZXR0ZXJpbmcoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNSAzbDMgOUg3TDYgOUgzbC0xIDNIMWwzLTloMXptLS41IDEuNUw1LjY2NyA4SDMuMzMzTDQuNSA0LjV6bTcuOTkgMS42NDdDMTIuMTYgNi4wMDUgMTEuNzYgNiAxMS41IDZjLS4zNTkgMC0xLjAyMi4xNzUtMS42MzIuODM4bC0uNzM2LS42NzZDOS45MjkgNS4yOTQgMTAuODU5IDUgMTEuNSA1aC4wMTZjLjI1IDAgLjgzNiAwIDEuMzY5LjIyOC4yODEuMTIuNTY4LjMxMy43ODIuNjE3LjIxNi4zMDcuMzMzLjY5My4zMzMgMS4xNTV2NWgtMXYtLjM1NGEyLjEwMSAyLjEwMSAwIDAxLS4wNjQuMDM4Yy0uNTU0LjMxNy0xLjE2Ni4zMTYtMS40Mi4zMTZoLS4wMzJjLS4yNSAwLS44MzYgMC0xLjM2OC0uMjI4YTEuODEgMS44MSAwIDAxLS43ODMtLjYxN0M5LjExNyAxMC44NDggOSAxMC40NjIgOSAxMGMwLS40NjIuMTE3LS44NDguMzMzLTEuMTU1LjIxNC0uMzA0LjUtLjQ5Ni43ODMtLjYxN0MxMC42NDggOCAxMS4yMzMgOCAxMS40ODQgOGguMDE2Yy4yNTggMCAuNjktLjAwMyAxLjA1LS4xMDZhLjg4OS44ODkgMCAwMC4zNjQtLjE3OWMuMDUzLS4wNS4wODYtLjEwOC4wODYtLjIxNVY3YzAtLjI4OC0uMDctLjQ2NS0uMTUxLS41OGEuODE0LjgxNCAwIDAwLS4zNTgtLjI3M3pNMTMgOC44Yy0uMDYuMDIyLS4xMTguMDQtLjE3NS4wNTdDMTIuMzIgOSAxMS43NjIgOSAxMS41MTMgOUgxMS41Yy0uMjU5IDAtLjY2LjAwNS0uOTkuMTQ3YS44MTQuODE0IDAgMDAtLjM1OS4yNzRjLS4wOC4xMTQtLjE1MS4yOTEtLjE1MS41NzlzLjA3LjQ2NS4xNTEuNThhLjgxMy44MTMgMCAwMC4zNTguMjczYy4zMzEuMTQyLjczMi4xNDcuOTkxLjE0Ny4yNTcgMCAuNjMtLjAwOC45NC0uMTg0LjI1NS0uMTQ2LjU2LS40NjMuNTYtMS4zMTZ2LS43MDF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxldHRlcmluZzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTGluZURhc2hlZCA9IGZ1bmN0aW9uIEV1aUljb25MaW5lRGFzaGVkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIuNzA3IDQuNzA3YTEgMSAwIDExLTEuNDE0LTEuNDE0bDItMmExIDEgMCAxMTEuNDE0IDEuNDE0bC0yIDJ6bS02LjQxNCA1YTEgMSAwIDAwMS40MTQgMGwyLTJhMSAxIDAgMTAtMS40MTQtMS40MTRsLTIgMmExIDEgMCAwMDAgMS40MTR6bS01IDVhMSAxIDAgMDAxLjQxNCAwbDItMmExIDEgMCAxMC0xLjQxNC0xLjQxNGwtMiAyYTEgMSAwIDAwMCAxLjQxNHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTGluZURhc2hlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTGluZURvdHRlZCA9IGZ1bmN0aW9uIEV1aUljb25MaW5lRG90dGVkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTMuNSAzYTEuNSAxLjUgMCAxMDAtMyAxLjUgMS41IDAgMDAwIDN6TTExIDUuNWExLjUgMS41IDAgMTEtMyAwIDEuNSAxLjUgMCAwMTMgMHpNNS41IDExYTEuNSAxLjUgMCAxMDAtMyAxLjUgMS41IDAgMDAwIDN6bS00IDRhMS41IDEuNSAwIDEwMC0zIDEuNSAxLjUgMCAwMDAgM3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTGluZURvdHRlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTGluZVNvbGlkID0gZnVuY3Rpb24gRXVpSWNvbkxpbmVTb2xpZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEuMjkzIDE0LjcwN2ExIDEgMCAwMDEuNDE0IDBsMTItMTJhMSAxIDAgMTAtMS40MTQtMS40MTRsLTEyIDEyYTEgMSAwIDAwMCAxLjQxNHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTGluZVNvbGlkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25MaW5rID0gZnVuY3Rpb24gRXVpSWNvbkxpbmsoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjY2IDMuODAzYS41LjUgMCAxMS0uNzA2LS43MDdMOS4yNjguNzhjMS4xODctMS4xODcgMy4yNDItMSA0LjU5Ni4zNTRzMS41NCAzLjQwOS4zNTQgNC41OTZsLTMuNTM2IDMuNTM2Yy0xLjE4NyAxLjE4Ny0zLjI0MiAxLTQuNTk2LS4zNTRhLjUuNSAwIDExLjcwNy0uNzA3Yy45OS45OSAyLjQxNyAxLjExOSAzLjE4Mi4zNTRsMy41MzYtMy41MzZjLjc2NS0uNzY1LjYzNS0yLjE5My0uMzU0LTMuMTgyLS45OS0uOTktMi40MTctMS4xMTktMy4xODItLjM1NEw3LjY2MSAzLjgwM3ptLS4zMiA3LjM5MmEuNS41IDAgMTEuNzA3LjcwN2wtMi4zMTUgMi4zMTRjLTEuMTg3IDEuMTg4LTMuMjQyIDEtNC41OTYtLjM1My0xLjM1NC0xLjM1NC0xLjU0LTMuNDEtLjM1My00LjU5Nkw0LjMxOCA1LjczYzEuMTg3LTEuMTg3IDMuMjQyLTEgNC41OTYuMzU0YS41LjUgMCAwMS0uNzA3LjcwN2MtLjk4OS0uOTktMi40MTYtMS4xMi0zLjE4Mi0uMzU0TDEuNDkgOS45NzRjLS43NjYuNzY1LS42MzYgMi4xOTMuMzUzIDMuMTgyLjk5Ljk4OSAyLjQxNyAxLjExOSAzLjE4Mi4zNTNsMi4zMTUtMi4zMTR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxpbms7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxpc3QgPSBmdW5jdGlvbiBFdWlJY29uTGlzdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIgNFYzaDJ2MUgyem00IDBWM2g4djFINnptMCAzVjZoOHYxSDZ6bTAgM1Y5aDh2MUg2ek0yIDdWNmgydjFIMnptMCAzVjloMnYxSDJ6bTQgM3YtMWg4djFINnptLTQgMHYtMWgydjFIMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTGlzdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTGlzdEFkZCA9IGZ1bmN0aW9uIEV1aUljb25MaXN0QWRkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTEgMTFIOXYxaDJ2Mmgxdi0yaDJ2LTFoLTJWOWgtMXYyek03Ljc1OCA5YTQuNSA0LjUgMCAxMS0uNTAyIDRINnYtMWgxLjAyN2E0LjU0OCA0LjU0OCAwIDAxLjIzLTJINlY5aDEuNzU4ek0yIDRWM2gydjFIMnptNCAwVjNoOHYxSDZ6bTAgM1Y2aDh2MUg2ek0yIDdWNmgydjFIMnptMCAzVjloMnYxSDJ6bTAgM3YtMWgydjFIMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTGlzdEFkZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9jayA9IGZ1bmN0aW9uIEV1aUljb25Mb2NrKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNCA1di0uOEM0IDEuODggNS43OSAwIDggMHM0IDEuODggNCA0LjJWNWgxLjE0M2MuNDczIDAgLjg1Ny40NDguODU3IDF2OWMwIC41NTItLjM4NCAxLS44NTcgMUgyLjg1N0MyLjM4NCAxNiAyIDE1LjU1MiAyIDE1VjZjMC0uNTUyLjM4NC0xIC44NTctMUg0ek0zIDE1aDEwVjZIM3Y5em01Ljk5OC0zLjcwNkw5LjUgMTIuNWgtM2wuNTAyLTEuMjA2QTEuNjQ0IDEuNjQ0IDAgMDE2LjUgMTAuMWMwLS44ODMuNjcyLTEuNiAxLjUtMS42czEuNS43MTcgMS41IDEuNmMwIC40NzUtLjE5NC45MDEtLjUwMiAxLjE5NHpNMTEgNC4zNkMxMSAyLjUwNCA5LjY1NyAxIDggMVM1IDIuNTA0IDUgNC4zNlY1aDZ2LS42NHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9jazsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9ja09wZW4gPSBmdW5jdGlvbiBFdWlJY29uTG9ja09wZW4oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMS4xNDMgNWMuNDczIDAgLjg1Ny40NDguODU3IDF2OWMwIC41NTItLjM4NCAxLS44NTcgMUguODU3Qy4zODQgMTYgMCAxNS41NTIgMCAxNVY2YzAtLjU1Mi4zODQtMSAuODU3LTFIOHYtLjhDOCAxLjg4IDkuNzkgMCAxMiAwczQgMS44OCA0IDQuMlY1aC0xdi0uNjRDMTUgMi41MDQgMTMuNjU3IDEgMTIgMVM5IDIuNTA0IDkgNC4zNlY1aDIuMTQzek0xIDE1aDEwVjZIMXY5em01Ljk5OC0zLjcwNkw3LjUgMTIuNWgtM2wuNTAyLTEuMjA2QTEuNjQ0IDEuNjQ0IDAgMDE0LjUgMTAuMWMwLS44ODMuNjcyLTEuNiAxLjUtMS42czEuNS43MTcgMS41IDEuNmMwIC40NzUtLjE5NC45MDEtLjUwMiAxLjE5NHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9ja09wZW47IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29BZXJvc3Bpa2UgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0Flcm9zcGlrZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGw6IFwibm9uZVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNDNDM3M0FcIixcbiAgICBkOiBcIk0wIDMxLjgwNmgzMlYuNzc2SDB6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRkZcIixcbiAgICBkOiBcIk0xOS40NDggMTIuNTA4bC04Ljk4NiAzLjg2IDguOTg2IDMuODgzdi03Ljc0M3ptLTExLjMwNCA0LjczbC0yLjA5NC0uODYzIDIuMDk0LS45MzEgMTcuNzQ5LTcuNzQxdjIuMDYybC00LjY1NCAxLjk5djkuMjVsNC42NTQgMi4wMXYxLjk2OEw4LjE0MyAxNy4yNHpcIlxuICB9KSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29BZXJvc3Bpa2U7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBodG1sSWRHZW5lcmF0b3IgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29BcGFjaGUgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0FwYWNoZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgZ2VuZXJhdGVJZCA9IGh0bWxJZEdlbmVyYXRvcignbG9nb19hcGFjaGUnKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJkZWZzXCIsIG51bGwsIF9fX0Vtb3Rpb25KU1goXCJsaW5lYXJHcmFkaWVudFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2EnKSxcbiAgICB4MTogXCIyMS45MDIlXCIsXG4gICAgeDI6IFwiMTQxLjg3OSVcIixcbiAgICB5MTogXCI2My45MDUlXCIsXG4gICAgeTI6IFwiMjAuMjEzJVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0Y2OTkyM1wiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjMxLjIzJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjRjc5QTIzXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiODMuODMlXCIsXG4gICAgc3RvcENvbG9yOiBcIiNFOTc4MjZcIlxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJsaW5lYXJHcmFkaWVudFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2InKSxcbiAgICB4MTogXCItMjE3LjY1MSVcIixcbiAgICB4MjogXCI3NC43NDMlXCIsXG4gICAgeTE6IFwiMTc3LjEyNyVcIixcbiAgICB5MjogXCIzNi42NjUlXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIzMi4zMyVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzlFMjA2NFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjYzLjAyJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjQzkyMDM3XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiNzUuMTQlXCIsXG4gICAgc3RvcENvbG9yOiBcIiNDRDIzMzVcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIxMDAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiNFOTc4MjZcIlxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJsaW5lYXJHcmFkaWVudFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2MnKSxcbiAgICB4MTogXCItODAuMDQ0JVwiLFxuICAgIHgyOiBcIjE0Ni4yNCVcIixcbiAgICB5MTogXCI3My41NzQlXCIsXG4gICAgeTI6IFwiMzEuNTM5JVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMzIuMzMlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM5RTIwNjRcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCI2My4wMiVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0M5MjAzN1wiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjc1LjE0JVwiLFxuICAgIHN0b3BDb2xvcjogXCIjQ0QyMzM1XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMTAwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjRTk3ODI2XCJcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwibGluZWFyR3JhZGllbnRcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdkJyksXG4gICAgeDE6IFwiLTE4LjMxNiVcIixcbiAgICB4MjogXCIxNjUuMDAyJVwiLFxuICAgIHkxOiBcIjUyLjQ5NyVcIixcbiAgICB5MjogXCI0MS42NTYlXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjMjgyNjYyXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiOS41NDglXCIsXG4gICAgc3RvcENvbG9yOiBcIiM2NjJFOERcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCI3OC44MiVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzlGMjA2NFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjk0Ljg3JVwiLFxuICAgIHN0b3BDb2xvcjogXCIjQ0QyMDMyXCJcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwibGluZWFyR3JhZGllbnRcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdlJyksXG4gICAgeDE6IFwiLTEwOS43MDElXCIsXG4gICAgeDI6IFwiNjQuNjE3JVwiLFxuICAgIHkxOiBcIjQ2My43MTUlXCIsXG4gICAgeTI6IFwiMTcuMTklXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIzMi4zMyVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzlFMjA2NFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjYzLjAyJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjQzkyMDM3XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiNzUuMTQlXCIsXG4gICAgc3RvcENvbG9yOiBcIiNDRDIzMzVcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIxMDAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiNFOTc4MjZcIlxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJsaW5lYXJHcmFkaWVudFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2YnKSxcbiAgICB4MTogXCItMzQuODglXCIsXG4gICAgeDI6IFwiMTEwLjU5OSVcIixcbiAgICB5MTogXCIxMzAuNTIyJVwiLFxuICAgIHkyOiBcIi05LjExOCVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjMyLjMzJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjOUUyMDY0XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiNjMuMDIlXCIsXG4gICAgc3RvcENvbG9yOiBcIiNDOTIwMzdcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCI3NS4xNCVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0NEMjMzNVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjEwMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0U5NzgyNlwiXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImxpbmVhckdyYWRpZW50XCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnZycpLFxuICAgIHgxOiBcIi0xMy42NzMlXCIsXG4gICAgeDI6IFwiMTE3Ljg1OCVcIixcbiAgICB5MTogXCIxOTIuNTY0JVwiLFxuICAgIHkyOiBcIi0xMzYuOTA2JVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzI4MjY2MlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjkuNTQ4JVwiLFxuICAgIHN0b3BDb2xvcjogXCIjNjYyRThEXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiNzguODIlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM5RjIwNjRcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCI5NC44NyVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0NEMjAzMlwiXG4gIH0pKSksIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdhJyksIFwiKVwiKSxcbiAgICBkOiBcIk0xMy42MjguMThjLS40OTguMjkzLTEuMzMyIDEuMTM0LTIuMzI4IDIuMzQ4di4wNzRsLjg3MSAxLjYxMy4wNDQuMDNjLjY0MS0uOTE0IDEuMjg5LTEuNzQyIDEuOTQ4LTIuNDQ2LjA1LS4wNTYuMDc1LS4wOC4wNzUtLjA4LS4wMjUuMDI0LS4wNS4wNTUtLjA3NS4wOC0uMjExLjIzNy0uODU5Ljk4NC0xLjgzIDIuNDc4bC4xMTIuMDI1czIuMjczLS4yMjQgMy4zNjgtLjQxbC4wNjItLjA1N2MuMzUtMS45NTUtLjM0Mi0yLjg1MS0uMzQyLTIuODUxUzE0LjY2MS0uNDIzIDEzLjYyOC4xOHpcIixcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDgpXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2InKSwgXCIpXCIpLFxuICAgIGQ6IFwiTTkuNTI1IDguNjk3Yy4yOC0uNTE2LjU2LTEuMDI3Ljg0LTEuNTE5LjI5My0uNTEuNTkyLTEuMDA4Ljg5Ny0xLjQ4OGEuMzk3LjM5NyAwIDAwLjA1LS4wODdjLjI5OS0uNDczLjU5OC0uOTIxLjkwMy0xLjM1N0wxMS4zIDIuNTJjLS4wNjkuMDgxLS4xMzcuMTY4LS4yMDYuMjU2LS4yNjEuMzMtLjUzNS42NzgtLjgxNSAxLjA1MmE1MS43ODMgNTEuNzgzIDAgMDAtMS44OTMgMi43MDhjLS4yNjEuNDA1LS41My44MTYtLjc5IDEuMjQ1bC0uMDMyLjA1VjcuOWwxLjE0IDIuMjYuMDUuMDE5Yy4yNTUtLjQ5OC41MS0uOTk2Ljc3MS0xLjQ4MnpcIixcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDgpXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2MnKSwgXCIpXCIpLFxuICAgIGQ6IFwiTTQuNTYzIDE5Ljc2Yy4yMDYtLjUzNS40MjQtMS4wNzcuNjQyLTEuNjI1LjIxMS0uNTIzLjQyMy0xLjA1Mi42NDctMS41OC4yMTgtLjUzLjQ0OC0xLjA2LjY3OS0xLjU5NS4yMzYtLjU0MS40NzMtMS4wODMuNzE2LTEuNjE4LjI0Mi0uNTMuNDg1LTEuMDU5LjczNC0xLjU4Mi4wODctLjE4Ni4xOC0uMzguMjc0LS41NjYuMTU2LS4zMjQuMzE4LS42NDguNDczLS45NjUuMDA3LS4wMTkuMDItLjAzMS4wMjUtLjA1TDcuNTY0IDcuODMybC0uMDU2LjA5M2MtLjI3NC40NTUtLjU1NC45MTUtLjgyMiAxLjM4OWE1NC41MzUgNTQuNTM1IDAgMDAtMS40NSAyLjcxNGMtLjA0NC4wODctLjA4MS4xNjgtLjEyNS4yNTVhMzIuMTUgMzIuMTUgMCAwMC0uNzAzIDEuNTQ0Yy0uMjM3LjU2LS40NDggMS4wOTYtLjYzNSAxLjYwNi0uMTI1LjMzNy0uMjMuNjU0LS4zMzYuOTY1LS4wODEuMjYyLS4xNjIuNTMtLjIzNy43OTEtLjE4LjYyMy0uMzMgMS4yMzktLjQ1NCAxLjg2MmwuMDE4LjA3NCAxLjE0IDIuMjY2LjAzNy4wMmMuMTU1LS40MjQuMzE3LS44NDguNDg1LTEuMjgzLjA0NC0uMTI1LjA5NC0uMjQzLjEzNy0uMzY4elwiLFxuICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoOClcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnZCcpLCBcIilcIiksXG4gICAgZDogXCJNMi43MzMgMTkuMTMyYTE4Ljg0IDE4Ljg0IDAgMDAtLjMxMSAyLjI1M2MwIC4wMjUtLjAwNi4wNS0uMDA2LjA4MS0uMzc0LS41OTgtMS4zNy0xLjE3Ny0xLjM3LTEuMTc3LjcxNiAxLjAzNCAxLjI1OCAyLjA2MSAxLjMzOCAzLjA3LS4zOC4wOC0uOTAyLS4wMzgtMS41MTItLjI1NS42MjguNTc4IDEuMTAyLjc0IDEuMjg4Ljc4NC0uNTc5LjAzNy0xLjE4My40MzYtMS43OTMuODkuODktLjM2IDEuNjA3LS41MDQgMi4xMjMtLjM5Mi0uODE1IDIuMzEtMS42MyA0Ljg2Mi0yLjQ1MyA3LjU2NC4yNS0uMDc1LjM5OS0uMjQzLjQ4Ni0uNDczLjE0My0uNDkyIDEuMTE0LTMuNzA0IDIuNjI3LTcuOTMxLjA0NC0uMTE5LjA4Ny0uMjQzLjEzLS4zNjIuMDEzLS4wMy4wMjYtLjA2OC4wMzgtLjEuMTYyLS40NDEuMzI0LS44OTYuNDk4LTEuMzU2LjAzOC0uMTA2LjA4MS0uMjEyLjExOS0uMzE4di0uMDA2bC0xLjE5LTIuMzUzYzAgLjAzLS4wMDYuMDU2LS4wMTIuMDh6XCIsXG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSg4KVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdlJyksIFwiKVwiKSxcbiAgICBkOiBcIk0xMi4zMzMgNC4yODNjLS4yNjguNDExLS41Ni44NzgtLjg3OCAxLjQwNy0uMDE4LjAyNS0uMDMuMDU2LS4wNS4wODFhNjIuNTM4IDYyLjUzOCAwIDAwLTEuNjg3IDMuMDVjLS4yNDkuNDgtLjUwNC45ODQtLjc2NSAxLjUyNmwuMDU2LjAyNSAyLjg5NS0uMzExLjA2OC0uMDVjLjg3OC0uNDA1IDEuMjctLjc3MiAxLjY1LTEuMzAxLjEtLjE0My4yMDUtLjMuMzA1LS40NTUuMzExLS40ODUuNjE2LTEuMDE1Ljg4NC0xLjU0NC4yNjEtLjUxLjQ5Mi0xLjAyLjY3Mi0xLjQ3NWE2LjU2IDYuNTYgMCAwMC4zOTgtMS4zOTVjLTEuMTcuMjA2LTIuNjA4LjM5OS0zLjU0OC40NDJ6XCIsXG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSg4KVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdmJyksIFwiKVwiKSxcbiAgICBkOiBcIk04Ljg0IDEwLjU5Yy0uMS4yMTItLjIwNS40My0uMzEuNjQ3LS4xMTMuMjM3LS4yMzEuNDg2LS4zNDMuNzM1LS4wNTYuMTI0LS4xMTkuMjU1LS4xNzUuMzgtLjE4LjM4Ni0uMzU0Ljc4NC0uNTQxIDEuMTk1YTEwNy4wMzUgMTA3LjAzNSAwIDAwLTEuMzU3IDMuMTk0Yy0uMjE4LjUyOS0uNDM2IDEuMDc3LS42NTQgMS42MzctLjIuNTA0LS4zOTkgMS4wMTUtLjU5OCAxLjU1LS4wMTIuMDI1LS4wMTguMDUtLjAzLjA3NS0uMi41My0uMzk0IDEuMDY4LS42IDEuNjIyLS4wMDYuMDEyLS4wMTcuMDQ1LS4wMjMuMDU3bC4wNDMuMDEuODY2LS4wOTQuMDQ4LS4wMmMtLjAxOC0uMDA2LS4wMy0uMDMtLjA0OC0uMDM3IDEuMTQ1LS4xNDMgMi42Ny0xLjAwMiAzLjY2LTIuMDYuNDU1LS40ODYuODY2LTEuMDY1IDEuMjUyLTEuNzM4LjI4Ni0uNTA0LjU0Ny0xLjA1OC44MDMtMS42NzUuMjI0LS41MzUuNDM1LTEuMTIuNjQtMS43NDlhMy40NTcgMy40NTcgMCAwMS0uODk2LjMxMSA4Ljk3NyA4Ljk3NyAwIDAxLS4xOC4wMzhjLS4wNjIuMDEyLS4xMjUuMDE4LS4xOC4wMyAxLjA3LS40MSAxLjc0My0xLjIwNyAyLjIzNC0yLjE3OC0uMjguMTkzLS43NC40NDItMS4yODguNTY2YTIuNTIgMi41MiAwIDAxLS4yMy4wNDRjLS4wMiAwLS4wMzguMDA2LS4wNTcuMDA2LjM3NC0uMTU1LjY4NS0uMzMuOTU5LS41MzUuMDU2LS4wNDQuMTEyLS4wODcuMTY4LS4xMzcuMDgxLS4wNzUuMTYyLS4xNS4yMzctLjIyNC4wNS0uMDUuMDkzLS4xLjE0My0uMTU2LjEwNi0uMTI0LjIwNS0uMjYxLjI5OS0uNDEuMDMtLjA0NC4wNTYtLjA5NC4wODctLjEzOC4wMzctLjA2OC4wNjgtLjEzNy4xLS4yMDUuMTQ5LS4zLjI2Ny0uNTY3LjM2LS44MDMuMDUtLjExOS4wODgtLjIyNC4xMjUtLjMzLjAxMy0uMDM4LjAyNS0uMDgxLjA0NC0uMTE5LjAzNy0uMTEyLjA2OC0uMjExLjA5My0uMzA1LjAzNy0uMTMuMDU2LS4yMzYuMDY5LS4zMTFhMS4wNzcgMS4wNzcgMCAwMS0uMTI1LjA4N2MtLjMyNC4xOTMtLjg3OC4zNjgtMS4zMjYuNDQ4bC44ODQtLjEtLjg4NC4xYy0uMDYyLjAxMy0uMTA2LjAyLS4xNTYuMDMyLjAwNC0uMDA1LS45OTQuMTAxLTIuOTk1LjMxNmEyLjMxMyAyLjMxMyAwIDAwLS4xMTguMjQ0elwiLFxuICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoOClcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnZycpLCBcIilcIiksXG4gICAgZDogXCJNNC4xMTUgMjEuOTE0Yy0uMTU1LjQzLS4zMTcuODcyLS40NzMgMS4zMiAwIC4wMDYtLjAwNi4wMTMtLjAwNi4wMTktLjAyNS4wNjItLjA0NC4xMjQtLjA2OS4xOTMtLjEwNi4zMDUtLjE5OS41NzMtLjQxIDEuMTk1LjM0OC4xNjIuNjI4LjU4Ljg5NiAxLjA1OWExLjg3NiAxLjg3NiAwIDAwLS42MjMtMS4zMTRjMS43MjUuMDc1IDMuMjEzLS4zNjEgMy45NzktMS42MTkuMDY4LS4xMTIuMTMtLjIzLjE4Ni0uMzU1LS4zNDguNDQyLS43ODQuNjMtMS41OTMuNTg2aC0uMDA3LjAwN2MxLjIwMS0uNTM2IDEuNzk5LTEuMDUyIDIuMzM0LTEuOTA1LjEyNS0uMjA2LjI1LS40MjQuMzc0LS42NjctMS4wNTIgMS4wNzgtMi4yNjYgMS4zODMtMy41NDMgMS4xNTJsLS45NTguMTA2Yy0uMDMyLjA2OS0uMDYzLjE1LS4wOTQuMjN6XCIsXG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSg4KVwiXG4gIH0pKSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0FwYWNoZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0FwcFNlYXJjaCA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvQXBwU2VhcmNoKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDA4MEQ1XCIsXG4gICAgZDogXCJNMTkuNS45MzhhNy4wMDIgNy4wMDIgMCAwMC03IDBsLTggNC42MTlBNyA3IDAgMDAxIDExLjYydjkuMjM3YTcgNyAwIDAwMy41IDYuMDYybDcuNSA0LjMzVjE3Ljk3OWE3IDcgMCAwMTMuNS02LjA2MkwyNyA1LjI3NiAxOS41LjkzOXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsTmVnYXRpdmVcIixcbiAgICBkOiBcIk0xOS41LjkzOGE3LjAwMiA3LjAwMiAwIDAwLTcgMEw1IDUuMjc3bDExIDYuMzUgMTEtNi4zNS03LjUtNC4zNHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZBNzQ0RVwiLFxuICAgIGQ6IFwiTTI4LjQzNSA3Ljc2bC0xMC4wMjYgNS43OWE2Ljk5NCA2Ljk5NCAwIDAxMS41OSA0LjQyOHYxMy4yN2w3LjUtNC4zM2E3IDcgMCAwMDMuNS02LjA2MXYtOS4yMzhhNi45OTIgNi45OTIgMCAwMC0xLjU4Ni00LjQyMmwtLjk3OC41NjR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29BcHBTZWFyY2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29Bd3MgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0F3cyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxOZWdhdGl2ZVwiLFxuICAgIGQ6IFwiTTkuMDE5IDEzLjg3OGMwIC4zOS4wNDIuNzA1LjExNy45MzYuMDg1LjIzMi4xOTEuNDg0LjM0Ljc1OGEuNDU0LjQ1NCAwIDAxLjA3NS4yNDJjMCAuMTA1LS4wNjQuMjEtLjIwMi4zMTVsLS42Ny40NDJhLjUxNC41MTQgMCAwMS0uMjc3LjA5NWMtLjEwNyAwLS4yMTMtLjA1My0uMzItLjE0OGEzLjI1OCAzLjI1OCAwIDAxLS4zODMtLjQ5NCA4LjEwOSA4LjEwOSAwIDAxLS4zMy0uNjJjLS44My45NjctMS44NzMgMS40NS0zLjEyOCAxLjQ1LS44OTQgMC0xLjYwNy0uMjUyLTIuMTI5LS43NTYtLjUyMS0uNTA1LS43ODctMS4xNzgtLjc4Ny0yLjAyIDAtLjg5NC4zMTktMS42Mi45NjgtMi4xNjYuNjUtLjU0NyAxLjUxMS0uODIgMi42MDctLjgyLjM2MiAwIC43MzUuMDMgMS4xMjguMDgzLjM5NC4wNTMuNzk5LjEzNyAxLjIyNC4yMzJ2LS43NjhjMC0uOC0uMTctMS4zNTctLjUtMS42ODMtLjM0LS4zMjYtLjkxNS0uNDg0LTEuNzM1LS40ODQtLjM3MiAwLS43NTUuMDQzLTEuMTQ5LjEzNy0uMzk0LjA5NS0uNzc3LjIxLTEuMTUuMzU4LS4xNy4wNzMtLjI5Ny4xMTUtLjM3Mi4xMzZhLjY2LjY2IDAgMDEtLjE3LjAzMmMtLjE0OSAwLS4yMjMtLjEwNS0uMjIzLS4zMjZ2LS41MTVjMC0uMTY5LjAyLS4yOTUuMDc0LS4zNjhhLjc5Ni43OTYgMCAwMS4yOTgtLjIyMWMuMzczLS4xOS44Mi0uMzQ3IDEuMzQtLjQ3NGE2LjUyNCA2LjUyNCAwIDAxMS42NjEtLjJjMS4yNjYgMCAyLjE5Mi4yODUgMi43ODguODUyLjU4Ni41NjguODg0IDEuNDMuODg0IDIuNTg4djMuNDA3aC4wMnptLTQuMzIgMS42Yy4zNSAwIC43MTItLjA2NCAxLjA5NS0uMTlhMi4zNzMgMi4zNzMgMCAwMDEuMDExLS42NzNjLjE3LS4yLjI5OC0uNDIxLjM2Mi0uNjczLjA2NC0uMjUzLjEwNy0uNTU4LjEwNy0uOTE2di0uNDQxYTguOTgyIDguOTgyIDAgMDAtLjk4LS4xNzkgOC4xMTMgOC4xMTMgMCAwMC0xLS4wNjNjLS43MTMgMC0xLjIzNC4xMzctMS41ODYuNDItLjM1LjI4NS0uNTIxLjY4NC0uNTIxIDEuMjEgMCAuNDk0LjEyOC44NjIuMzk0IDEuMTE1LjI1NS4yNjMuNjI4LjM5IDEuMTE3LjM5em04LjU0NSAxLjEzNWMtLjE5MiAwLS4zMi0uMDMyLS40MDUtLjEwNS0uMDg1LS4wNjMtLjE2LS4yMS0uMjIzLS40MWwtMi41MDEtOC4xM2MtLjA2NC0uMjEtLjA5Ni0uMzQ3LS4wOTYtLjQyMSAwLS4xNjguMDg1LS4yNjMuMjU2LS4yNjNoMS4wNDNjLjIwMiAwIC4zNC4wMzIuNDE1LjEwNS4wODUuMDYzLjE0OS4yMS4yMTIuNDFsMS43ODggNi45NjMgMS42Ni02Ljk2M2MuMDU0LS4yMS4xMTctLjM0Ny4yMDMtLjQxLjA4NS0uMDYzLjIzNC0uMTA1LjQyNS0uMTA1aC44NTJjLjIwMiAwIC4zNC4wMzIuNDI1LjEwNS4wODUuMDYzLjE2LjIxLjIwMy40MWwxLjY4MSA3LjA0NyAxLjg0MS03LjA0N2MuMDY0LS4yMS4xMzgtLjM0Ny4yMTMtLjQxLjA4NS0uMDYzLjIyMy0uMTA1LjQxNS0uMTA1aC45OWMuMTcgMCAuMjY2LjA4NC4yNjYuMjYzIDAgLjA1Mi0uMDExLjEwNS0uMDIyLjE2OC0uMDEuMDYzLS4wMzIuMTQ3LS4wNzQuMjYzbC0yLjU2NSA4LjEzYy0uMDY0LjIxLS4xMzguMzQ3LS4yMjMuNDEtLjA4NS4wNjMtLjIyNC4xMDUtLjQwNS4xMDVoLS45MTVjLS4yMDIgMC0uMzQtLjAzMS0uNDI2LS4xMDUtLjA4NS0uMDczLS4xNi0uMjEtLjIwMi0uNDJsLTEuNjUtNi43ODQtMS42MzggNi43NzNjLS4wNTMuMjEtLjExNy4zNDctLjIwMi40Mi0uMDg2LjA3NC0uMjM1LjEwNi0uNDI2LjEwNmgtLjkxNXptMTMuNjc1LjI4NGE3LjEyMiA3LjEyMiAwIDAxLTEuNjQtLjE5Yy0uNTMxLS4xMjYtLjk0Ni0uMjYyLTEuMjIzLS40Mi0uMTctLjA5NS0uMjg3LS4yLS4zMy0uMjk1YS43MzUuNzM1IDAgMDEtLjA2NC0uMjk0di0uNTM2YzAtLjIyMS4wODUtLjMyNy4yNDUtLjMyN2EuNjEuNjEgMCAwMS4xOTIuMDMyYy4wNjMuMDIxLjE2LjA2My4yNjYuMTA1LjM2MS4xNTguNzU1LjI4NCAxLjE3LjM2OC40MjYuMDg0Ljg0LjEyNyAxLjI2Ny4xMjcuNjcgMCAxLjE5Mi0uMTE2IDEuNTUzLS4zNDhhMS4xMyAxLjEzIDAgMDAuNTU0LS45OTljMC0uMjk0LS4wOTYtLjUzNi0uMjg4LS43MzYtLjE5MS0uMi0uNTUzLS4zNzktMS4wNzQtLjU0N2wtMS41NDQtLjQ3M2MtLjc3Ni0uMjQyLTEuMzUxLS42LTEuNzAyLTEuMDczYTIuNDg3IDIuNDg3IDAgMDEtLjUzMi0xLjUyNWMwLS40NDIuMDk1LS44My4yODctMS4xNjcuMTkyLS4zMzcuNDQ3LS42MzEuNzY2LS44NjMuMzItLjI0Mi42ODEtLjQyIDEuMTA3LS41NDdhNC42OSA0LjY5IDAgMDExLjM0LS4xNzhjLjIzNSAwIC40OC4wMS43MTQuMDQyLjI0NS4wMzEuNDY4LjA3My42OTIuMTE1LjIxMi4wNTMuNDE1LjEwNS42MDYuMTY5LjE5Mi4wNjMuMzQuMTI2LjQ0Ny4xODlhLjkxOC45MTggMCAwMS4zMi4yNjNjLjA2My4wODQuMDk1LjIuMDk1LjM0N3YuNDk0YzAgLjIyMS0uMDg1LjMzNy0uMjQ1LjMzNy0uMDg1IDAtLjIyMy0uMDQyLS40MDQtLjEyNi0uNjA3LS4yNzQtMS4yODgtLjQxLTIuMDQzLS40MS0uNjA3IDAtMS4wODYuMDk0LTEuNDE2LjI5NC0uMzMuMi0uNS41MDUtLjUuOTM2IDAgLjI5NC4xMDcuNTQ3LjMyLjc0Ny4yMTIuMi42MDYuNCAxLjE3LjU3OGwxLjUxMS40NzNjLjc2Ni4yNDIgMS4zMi41NzkgMS42NSAxLjAxLjMzLjQzMS40OS45MjYuNDkgMS40NzMgMCAuNDUyLS4wOTYuODYyLS4yNzcgMS4yMmEyLjgzNiAyLjgzNiAwIDAxLS43NzcuOTI1Yy0uMzMuMjYzLS43MjQuNDUyLTEuMTgyLjU5LS40NzguMTQ2LS45NzkuMjItMS41MjEuMjJ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIiNGOTBcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjguOTMgMjIuMDA5Yy0zLjUwMSAyLjU1Ni04LjU4OCAzLjkxMi0xMi45NjIgMy45MTItNi4xMyAwLTExLjY1My0yLjI0LTE1LjgyNS01Ljk2My0uMzMtLjI5NS0uMDMyLS42OTQuMzYyLS40NjMgNC41MTIgMi41ODcgMTAuMDc4IDQuMTU1IDE1LjgzNiA0LjE1NSAzLjg4NCAwIDguMTUxLS44IDEyLjA3OC0yLjQ0LjU4Ni0uMjYzIDEuMDg2LjM3OC41MTEuNzk5elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMzAuMzg4IDIwLjM2OGMtLjQ0Ny0uNTY4LTIuOTU4LS4yNzMtNC4wOTctLjEzNy0uMzQuMDQyLS4zOTQtLjI1Mi0uMDg1LS40NzMgMi0xLjM4OCA1LjI4OS0uOTg5IDUuNjcyLS41MjYuMzgzLjQ3NC0uMTA3IDMuNzIzLTEuOTggNS4yOC0uMjg3LjI0Mi0uNTY0LjExNi0uNDM2LS4yLjQyNi0xLjA0MSAxLjM3My0zLjM4Ni45MjYtMy45NDR6XCJcbiAgfSkpKSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0F3czsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0F3c01vbm8gPSBmdW5jdGlvbiBFdWlJY29uTG9nb0F3c01vbm8oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcIm5vbnplcm9cIixcbiAgICBkOiBcIk05LjAxOSAxMy44NzhjMCAuMzkuMDQyLjcwNS4xMTcuOTM2LjA4NS4yMzIuMTkxLjQ4NC4zNC43NThhLjQ1NC40NTQgMCAwMS4wNzUuMjQyYzAgLjEwNS0uMDY0LjIxLS4yMDIuMzE1bC0uNjcuNDQyYS41MTQuNTE0IDAgMDEtLjI3Ny4wOTVjLS4xMDcgMC0uMjEzLS4wNTMtLjMyLS4xNDhhMy4yNTggMy4yNTggMCAwMS0uMzgzLS40OTQgOC4xMDkgOC4xMDkgMCAwMS0uMzMtLjYyYy0uODMuOTY3LTEuODczIDEuNDUtMy4xMjggMS40NS0uODk0IDAtMS42MDctLjI1Mi0yLjEyOS0uNzU2LS41MjEtLjUwNS0uNzg3LTEuMTc4LS43ODctMi4wMiAwLS44OTQuMzE5LTEuNjIuOTY4LTIuMTY2LjY1LS41NDcgMS41MTEtLjgyIDIuNjA3LS44Mi4zNjIgMCAuNzM1LjAzIDEuMTI4LjA4My4zOTQuMDUzLjc5OS4xMzcgMS4yMjQuMjMydi0uNzY4YzAtLjgtLjE3LTEuMzU3LS41LTEuNjgzLS4zNC0uMzI2LS45MTUtLjQ4NC0xLjczNS0uNDg0LS4zNzIgMC0uNzU1LjA0My0xLjE0OS4xMzctLjM5NC4wOTUtLjc3Ny4yMS0xLjE1LjM1OC0uMTcuMDczLS4yOTcuMTE1LS4zNzIuMTM2YS42Ni42NiAwIDAxLS4xNy4wMzJjLS4xNDkgMC0uMjIzLS4xMDUtLjIyMy0uMzI2di0uNTE1YzAtLjE2OS4wMi0uMjk1LjA3NC0uMzY4YS43OTYuNzk2IDAgMDEuMjk4LS4yMjFjLjM3My0uMTkuODItLjM0NyAxLjM0LS40NzRhNi41MjQgNi41MjQgMCAwMTEuNjYxLS4yYzEuMjY2IDAgMi4xOTIuMjg1IDIuNzg4Ljg1Mi41ODYuNTY4Ljg4NCAxLjQzLjg4NCAyLjU4OHYzLjQwN2guMDJ6bS00LjMyIDEuNmMuMzUgMCAuNzEyLS4wNjQgMS4wOTUtLjE5YTIuMzczIDIuMzczIDAgMDAxLjAxMS0uNjczYy4xNy0uMi4yOTgtLjQyMS4zNjItLjY3My4wNjQtLjI1My4xMDctLjU1OC4xMDctLjkxNnYtLjQ0MWE4Ljk4MiA4Ljk4MiAwIDAwLS45OC0uMTc5IDguMTEzIDguMTEzIDAgMDAtMS0uMDYzYy0uNzEzIDAtMS4yMzQuMTM3LTEuNTg2LjQyLS4zNS4yODUtLjUyMS42ODQtLjUyMSAxLjIxIDAgLjQ5NC4xMjguODYyLjM5NCAxLjExNS4yNTUuMjYzLjYyOC4zOSAxLjExNy4zOXptOC41NDUgMS4xMzVjLS4xOTIgMC0uMzItLjAzMi0uNDA1LS4xMDUtLjA4NS0uMDYzLS4xNi0uMjEtLjIyMy0uNDFsLTIuNTAxLTguMTNjLS4wNjQtLjIxLS4wOTYtLjM0Ny0uMDk2LS40MjEgMC0uMTY4LjA4NS0uMjYzLjI1Ni0uMjYzaDEuMDQzYy4yMDIgMCAuMzQuMDMyLjQxNS4xMDUuMDg1LjA2My4xNDkuMjEuMjEyLjQxbDEuNzg4IDYuOTYzIDEuNjYtNi45NjNjLjA1NC0uMjEuMTE3LS4zNDcuMjAzLS40MS4wODUtLjA2My4yMzQtLjEwNS40MjUtLjEwNWguODUyYy4yMDIgMCAuMzQuMDMyLjQyNS4xMDUuMDg1LjA2My4xNi4yMS4yMDMuNDFsMS42ODEgNy4wNDcgMS44NDEtNy4wNDdjLjA2NC0uMjEuMTM4LS4zNDcuMjEzLS40MS4wODUtLjA2My4yMjMtLjEwNS40MTUtLjEwNWguOTljLjE3IDAgLjI2Ni4wODQuMjY2LjI2MyAwIC4wNTItLjAxMS4xMDUtLjAyMi4xNjgtLjAxLjA2My0uMDMyLjE0Ny0uMDc0LjI2M2wtMi41NjUgOC4xM2MtLjA2NC4yMS0uMTM4LjM0Ny0uMjIzLjQxLS4wODUuMDYzLS4yMjQuMTA1LS40MDUuMTA1aC0uOTE1Yy0uMjAyIDAtLjM0LS4wMzEtLjQyNi0uMTA1LS4wODUtLjA3My0uMTYtLjIxLS4yMDItLjQybC0xLjY1LTYuNzg0LTEuNjM4IDYuNzczYy0uMDUzLjIxLS4xMTcuMzQ3LS4yMDIuNDItLjA4Ni4wNzQtLjIzNS4xMDYtLjQyNi4xMDZoLS45MTV6bTEzLjY3NS4yODRhNy4xMjIgNy4xMjIgMCAwMS0xLjY0LS4xOWMtLjUzMS0uMTI2LS45NDYtLjI2Mi0xLjIyMy0uNDItLjE3LS4wOTUtLjI4Ny0uMi0uMzMtLjI5NWEuNzM1LjczNSAwIDAxLS4wNjQtLjI5NHYtLjUzNmMwLS4yMjEuMDg1LS4zMjcuMjQ1LS4zMjdhLjYxLjYxIDAgMDEuMTkyLjAzMmMuMDYzLjAyMS4xNi4wNjMuMjY2LjEwNS4zNjEuMTU4Ljc1NS4yODQgMS4xNy4zNjguNDI2LjA4NC44NC4xMjcgMS4yNjcuMTI3LjY3IDAgMS4xOTItLjExNiAxLjU1My0uMzQ4YTEuMTMgMS4xMyAwIDAwLjU1NC0uOTk5YzAtLjI5NC0uMDk2LS41MzYtLjI4OC0uNzM2LS4xOTEtLjItLjU1My0uMzc5LTEuMDc0LS41NDdsLTEuNTQ0LS40NzNjLS43NzYtLjI0Mi0xLjM1MS0uNi0xLjcwMi0xLjA3M2EyLjQ4NyAyLjQ4NyAwIDAxLS41MzItMS41MjVjMC0uNDQyLjA5NS0uODMuMjg3LTEuMTY3LjE5Mi0uMzM3LjQ0Ny0uNjMxLjc2Ni0uODYzLjMyLS4yNDIuNjgxLS40MiAxLjEwNy0uNTQ3YTQuNjkgNC42OSAwIDAxMS4zNC0uMTc4Yy4yMzUgMCAuNDguMDEuNzE0LjA0Mi4yNDUuMDMxLjQ2OC4wNzMuNjkyLjExNS4yMTIuMDUzLjQxNS4xMDUuNjA2LjE2OS4xOTIuMDYzLjM0LjEyNi40NDcuMTg5YS45MTguOTE4IDAgMDEuMzIuMjYzYy4wNjMuMDg0LjA5NS4yLjA5NS4zNDd2LjQ5NGMwIC4yMjEtLjA4NS4zMzctLjI0NS4zMzctLjA4NSAwLS4yMjMtLjA0Mi0uNDA0LS4xMjYtLjYwNy0uMjc0LTEuMjg4LS40MS0yLjA0My0uNDEtLjYwNyAwLTEuMDg2LjA5NC0xLjQxNi4yOTQtLjMzLjItLjUuNTA1LS41LjkzNiAwIC4yOTQuMTA3LjU0Ny4zMi43NDcuMjEyLjIuNjA2LjQgMS4xNy41NzhsMS41MTEuNDczYy43NjYuMjQyIDEuMzIuNTc5IDEuNjUgMS4wMS4zMy40MzEuNDkuOTI2LjQ5IDEuNDczIDAgLjQ1Mi0uMDk2Ljg2Mi0uMjc3IDEuMjJhMi44MzYgMi44MzYgMCAwMS0uNzc3LjkyNWMtLjMzLjI2My0uNzI0LjQ1Mi0xLjE4Mi41OS0uNDc4LjE0Ni0uOTc5LjIyLTEuNTIxLjIyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjguOTMgMjIuMDA5Yy0zLjUwMSAyLjU1Ni04LjU4OCAzLjkxMi0xMi45NjIgMy45MTItNi4xMyAwLTExLjY1My0yLjI0LTE1LjgyNS01Ljk2My0uMzMtLjI5NS0uMDMyLS42OTQuMzYyLS40NjMgNC41MTIgMi41ODcgMTAuMDc4IDQuMTU1IDE1LjgzNiA0LjE1NSAzLjg4NCAwIDguMTUxLS44IDEyLjA3OC0yLjQ0LjU4Ni0uMjYzIDEuMDg2LjM3OC41MTEuNzk5elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMzAuMzg4IDIwLjM2OGMtLjQ0Ny0uNTY4LTIuOTU4LS4yNzMtNC4wOTctLjEzNy0uMzQuMDQyLS4zOTQtLjI1Mi0uMDg1LS40NzMgMi0xLjM4OCA1LjI4OS0uOTg5IDUuNjcyLS41MjYuMzgzLjQ3NC0uMTA3IDMuNzIzLTEuOTggNS4yOC0uMjg3LjI0Mi0uNTY0LjExNi0uNDM2LS4yLjQyNi0xLjA0MSAxLjM3My0zLjM4Ni45MjYtMy45NDR6XCJcbiAgfSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvQXdzTW9ubzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0F6dXJlID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29BenVyZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwNzJDNlwiLFxuICAgIGQ6IFwiTTE3LjQ0OCA0bC05LjQxNCA4LjAxTDAgMjYuMTU3aDcuMjQzTDE3LjQ0OCA0ek0xOC43IDUuODc0bC00LjAxOCAxMS4xMSA3LjcwNCA5LjQ5N0w3LjQ0MSAyOWgyNC40OTRMMTguNyA1Ljg3NHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0F6dXJlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvQXp1cmVNb25vID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29BenVyZU1vbm8oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNy40NDggNGwtOS40MTQgOC4wMUwwIDI2LjE1N2g3LjI0M0wxNy40NDggNHpNMTguNyA1Ljg3NGwtNC4wMTggMTEuMTEgNy43MDQgOS40OTdMNy40NDEgMjloMjQuNDk0TDE4LjcgNS44NzR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29BenVyZU1vbm87IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29CZWF0cyA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvQmVhdHMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMDgwRDVcIixcbiAgICBkOiBcIk0xNSAyMEg0VjBoMTFjNS41MjIgMCAxMCA0LjQ3OCAxMCAxMHMtNC40NzggMTAtMTAgMTBcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwQzJCM1wiLFxuICAgIGQ6IFwiTTI2LjcwMiAxNS42MjRDMjQuNiAxOS45NzkgMjAuMTUyIDIzIDE1IDIzSDR2OWgxNWM1LjUyMiAwIDEwLTQuNDc4IDEwLTEwYTkuOTUyIDkuOTUyIDAgMDAtMi4yOTgtNi4zNzZcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsTmVnYXRpdmVcIixcbiAgICBkOiBcIk0yNC4zMzggMTMuNTU0QTkuOTQyIDkuOTQyIDAgMDAxOSAxMkg0djhoMTFjNC4yNyAwIDcuOTAzLTIuNjggOS4zMzgtNi40NDZcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0JlYXRzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvQnVzaW5lc3NBbmFseXRpY3MgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0J1c2luZXNzQW5hbHl0aWNzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMEJGQjNcIixcbiAgICBkOiBcIk0wIDIyYzAgNS41MjIgNC40NzggMTAgMTAgMTBWMTJDNC40NzggMTIgMCAxNi40NzggMCAyMlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxOZWdhdGl2ZVwiLFxuICAgIGQ6IFwiTTEwIDEydjEwaDEwYzAtNS41MjItNC40NzgtMTAtMTAtMTBcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0YwNEU5OFwiLFxuICAgIGQ6IFwiTTEwIDB2OWM3LjE2OCAwIDEzIDUuODMyIDEzIDEzaDlDMzIgOS44NSAyMi4xNSAwIDEwIDBcIlxuICB9KSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29CdXNpbmVzc0FuYWx5dGljczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0NlcGggPSBmdW5jdGlvbiBFdWlJY29uTG9nb0NlcGgoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yNS40NzEgMjcuNTZjLTEuMDYtLjU2Ny0xLjY3Ni0xLjIwNi0xLjgxMS0xLjkwMi0uMTMtLjY3My4xNy0xLjQyMS45MTgtMi4yODhhMTEuMjkgMTEuMjkgMCAwMDIuNzczLTcuNDJBMTEuMzI0IDExLjMyNCAwIDAwMTYuMDQyIDQuNjRsLS4wNS4wMDFoLS4wNUExMS4zMjQgMTEuMzI0IDAgMDA0LjYzMiAxNS45NDlhMTEuMjkxIDExLjI5MSAwIDAwMi43NzQgNy40MjJjLjc1My44NzIgMS4wNDcgMS41OTEuOTI4IDIuMjU3LS4xMy42OTQtLjc0IDEuMzQyLTEuODE3IDEuOTMtMS42NTctMS4zNzUtMy4xMTYtMy4yMTItNC4wMS01LjA1NmExNC45NDMgMTQuOTQzIDAgMDEtMS4xMTctMy4xMzlBMTQuOTk3IDE0Ljk5NyAwIDAxMSAxNS45NWExNC45MDEgMTQuOTAxIDAgMDE0LjM3OC0xMC41NyAxNC45MjQgMTQuOTI0IDAgMDE0Ljc1Mi0zLjIwNEMxMS45NyAxLjM5NSAxMy45NS45OTYgMTUuOTQ4IDFoLjEwMWExNC44ODggMTQuODg4IDAgMDExMC41NyA0LjM3OCAxNC45MTIgMTQuOTEyIDAgMDEzLjk4MiAxMy45ODUgMTQuODcxIDE0Ljg3MSAwIDAxLTEuMTE4IDMuMTRjLS45IDEuODQzLTIuMzU4IDMuNjgxLTQuMDEgNS4wNTdoLS4wMDN6bS01LjUyMyAyLjc5OGMtLjE3My0uMTEtLjc2Ny0uNTUtMS4zNDUtMS4zNTNhNi4xMjIgNi4xMjIgMCAwMS0xLjE3NC0zLjczOCA4LjI2IDguMjYgMCAwMS42MTEtMi45NjQgOC40MiA4LjQyIDAgMDExLjYyNy0yLjU0bC4wMDQtLjAwOC4xNTQtLjE3OGMuMjYzLS4zMDUuNTM2LS42MjIuNzUzLS45OS4yNjgtLjQ1NC40NjItLjkzMS41NzgtMS40Mi4xNzgtLjc1OC4xODgtMS41NDcuMDI5LTIuMzFhNS4zIDUuMyAwIDAwLS44NTgtMS45NTYgNS4yNjQgNS4yNjQgMCAwMC00LjI5LTIuMjE3aC0uMTA4YTUuMjUgNS4yNSAwIDAwLTQuMjkgMi4yMTYgNS4zMSA1LjMxIDAgMDAtLjg1NiAxLjk1NmMtLjE2Ljc2My0uMTUgMS41NTIuMDMgMi4zMTEuMTE1LjQ4OC4zMS45NjUuNTc2IDEuNDE5LjIxOS4zNy40OS42ODQuNzUzLjk5bC4xNTUuMTc5LjAwMy4wMDdhOC4zODQgOC4zODQgMCAwMTEuNjI4IDIuNTQgOC4yNCA4LjI0IDAgMDEuNjEgMi45NjQgNi4xMjMgNi4xMjMgMCAwMS0xLjE3MyAzLjczOGMtLjU4Ljc5NS0xLjE3NCAxLjI0My0xLjM0NiAxLjM1MmwtLjg2Ny0uMjZhMTUuNDM0IDE1LjQzNCAwIDAxLTIuNDktMS4wOTggNC4yNDUgNC4yNDUgMCAwMDIuMjM0LTMuNzM2YzAtMS4wMzQtLjQwMy0yLjAyOC0xLjE5NS0yLjk1bC0uMDM0LS4wMzQtLjIzNy0uMjYtLjYzNi0uNzQ2YTguOTI0IDguOTI0IDAgMDEtMS41MjUtMy4yNiA4Ljk4MyA4Ljk4MyAwIDAxLS4wNS0zLjkwNSA4LjkwNiA4LjkwNiAwIDAxMS40Ni0zLjMxM0E4Ljk5MyA4Ljk5MyAwIDAxMTEuMjMgOC4zOWE4LjkzNyA4LjkzNyAwIDAxNC43MDItMS4zNDRoLjExMmMuNDIgMCAuODQuMDI5IDEuMjU1LjA4OGE4LjkzOCA4LjkzOCAwIDAxMy40NDggMS4yNTYgOS4wMDMgOS4wMDMgMCAwMTIuNTU0IDIuNDA0IDkuMDkzIDkuMDkzIDAgMDExLjQ1OSAzLjMxMyA5LjA0MyA5LjA0MyAwIDAxLS4wNSAzLjkxMiA4LjkyNSA4LjkyNSAwIDAxLTEuNTI2IDMuMjZjLS4yLjI2NS0uNDA5LjQ5NS0uNjM3Ljc0NWwtLjIzLjI1NGMtLjAxNy4wMTYtLjAzLjAyNy0uMDQuMDQzLS44MDQuOTYxLTEuMTk1IDEuOTI3LTEuMTk1IDIuOTQ4YTQuMjUgNC4yNSAwIDAwMi4yMzcgMy43MzVjLS43OTUuNDQxLTEuNjMuODA5LTIuNDkxIDEuMDk4bC0uODYyLjI2LS4wMTgtLjAwNHptLTMuOTU2LTExLjMxNGEyLjk1NyAyLjk1NyAwIDAxLTIuOTUyLTIuOTUyIDIuOTU3IDIuOTU3IDAgMDEyLjk1Mi0yLjk1MiAyLjk1NiAyLjk1NiAwIDAxMi45NSAyLjk1MiAyLjk1NyAyLjk1NyAwIDAxLTIuOTUgMi45NTJcIixcbiAgICBmaWxsOiBcIiNGMDVDNTZcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0NlcGg7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29DbG91ZCA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvQ2xvdWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsTmVnYXRpdmVcIixcbiAgICBkOiBcIk0xMi4zNyAxOC4zNTJjLjAzMi0uMDEuMDY2LS4wMTQuMS0uMDIzQTYgNiAwIDAxMTggMTBWMEM5LjE2MyAwIDIgNy4xNjQgMiAxNmMwIDIuNzkzLjcyIDUuNDE3IDEuOTc2IDcuNzAyYTE4Ljk0NyAxOC45NDcgMCAwMTguMzkzLTUuMzQ5XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMDgwRDVcIixcbiAgICBkOiBcIk0xOCAwQTE1Ljk1OSAxNS45NTkgMCAwMDUuNzE3IDUuNzVhMTYuMDA2IDE2LjAwNiAwIDAwNy41NDEgNS4wMzJjLjcxLjIyIDEuNDc3LjEzNSAyLjE0Ni0uMTg4QTUuOTQgNS45NCAwIDAxMTggMTBhNS45NCA1Ljk0IDAgMDEyLjU5Ni41OTRjLjY2OS4zMjMgMS40MzYuNDA4IDIuMTQ2LjE4OGExNi4wMSAxNi4wMSAwIDAwNy41NDEtNS4wMzJBMTUuOTU5IDE1Ljk1OSAwIDAwMTggMFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDBCRkIzXCIsXG4gICAgZDogXCJNMjIuNzQyIDIxLjIxOGMtLjcxLS4yMi0xLjQ3OC0uMTM1LTIuMTQ2LjE4OEE1Ljk0NyA1Ljk0NyAwIDAxMTggMjJhNS45NCA1Ljk0IDAgMDEtMi41OTYtLjU5NGMtLjY2OS0uMzIzLTEuNDM2LS40MDgtMi4xNDYtLjE4OGExNi4wMDYgMTYuMDA2IDAgMDAtNy41NCA1LjAzMkExNS45NTkgMTUuOTU5IDAgMDAxOCAzMmM0LjkzNiAwIDkuMzQ4LTIuMjM2IDEyLjI4My01Ljc1YTE2LjAxNiAxNi4wMTYgMCAwMC03LjU0LTUuMDMyXCJcbiAgfSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvQ2xvdWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29DbG91ZEVjZSA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvQ2xvdWRFY2UoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCIsXG4gICAgZDogXCJNMTggMHYxMGE2IDYgMCAwMC01LjUzIDguMzNjLS4wMzQuMDA5LS4wNjguMDEyLS4xLjAyM0ExOC45NDcgMTguOTQ3IDAgMDAzLjk3NSAyMy43IDE1LjkzNCAxNS45MzQgMCAwMTIgMTZDMiA3LjE2NCA5LjE2MyAwIDE4IDB6bTAgMTNhMyAzIDAgMTEwIDYgMyAzIDAgMDEwLTZ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMEFFRkFcIixcbiAgICBkOiBcIk0yMi43NDIgMjEuMjE4Yy0uNzEtLjIyLTEuNDc4LS4xMzUtMi4xNDYuMTg4QTUuOTQ3IDUuOTQ3IDAgMDExOCAyMmE1Ljk0IDUuOTQgMCAwMS0yLjU5Ni0uNTk0Yy0uNjY5LS4zMjMtMS40MzYtLjQwOC0yLjE0Ni0uMTg4YTE2LjAwNiAxNi4wMDYgMCAwMC03LjU0IDUuMDMyQTE1Ljk1OSAxNS45NTkgMCAwMDE4IDMyYzQuOTM2IDAgOS4zNDgtMi4yMzYgMTIuMjgzLTUuNzVhMTYuMDE2IDE2LjAxNiAwIDAwLTcuNTQtNS4wMzJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwODBENVwiLFxuICAgIGQ6IFwiTTE4IDBBMTUuOTU5IDE1Ljk1OSAwIDAwNS43MTcgNS43NWExNi4wMDYgMTYuMDA2IDAgMDA3LjU0MSA1LjAzMmMuNzEuMjIgMS40NzcuMTM1IDIuMTQ2LS4xODhBNS45NCA1Ljk0IDAgMDExOCAxMGE1Ljk0IDUuOTQgMCAwMTIuNTk2LjU5NGMuNjY5LjMyMyAxLjQzNi40MDggMi4xNDYuMTg4YTE2LjAxIDE2LjAxIDAgMDA3LjU0MS01LjAzMkExNS45NTkgMTUuOTU5IDAgMDAxOCAwXCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29DbG91ZEVjZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0NvZGUgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0NvZGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCIsXG4gICAgZDogXCJNOS43NSAxMkwxNiAzMmgxMGwtMy40LTEwLjg4QTEzIDEzIDAgMDAxMC4xOSAxMmgtLjQ0elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMjJBN0YzXCIsXG4gICAgZDogXCJNMjUuNzI1IDExLjkzQTE3IDE3IDAgMDA5LjUgMEg2bDMuNzUgMTJoLjQ0YTEzIDEzIDAgMDExMi40MSA5LjEyTDI2IDMyaDZsLTYuMjc1LTIwLjA3elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDM3N0NBXCIsXG4gICAgZDogXCJNNy45MSAxNi4xNzVMMCAzMmgxMi44NTV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29Db2RlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvQ29kZXNhbmRib3ggPSBmdW5jdGlvbiBFdWlJY29uTG9nb0NvZGVzYW5kYm94KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTQuNzM4IDI4LjA0NFYxNi42ODFMMy4xNzIgMTAuOTE5djYuNDZsNS4zMiAyLjY3djQuODg5bDYuMjQ2IDMuMTA2em0yLjM0NC4wNjZsNi4zNTctMy4xN3YtNS4wMDJsNS4zNTMtMi42ODZWMTAuODdsLTExLjcxIDUuODU0VjI4LjExek0yNy4zMDYgOC45OTNsLTYuMDAzLTMuMDEyLTUuMjg2IDIuNjU2LTUuMzI1LTIuNjU5TDQuNjM3IDkuMDNsMTEuMzE3IDUuNjM4IDExLjM1Mi01LjY3NXpNLjgyOCAyMy43NDRWOC4zMjRMMTUuOTgxLjY4OWwxNS4xNTUgNy42MDRWMjMuNzJMMTUuOTggMzEuMjguODI4IDIzLjc0M3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0NvZGVzYW5kYm94OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvQ291Y2hiYXNlID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Db3VjaGJhc2UoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNFRDIyMjZcIixcbiAgICBkOiBcIk0xNi4wNzIuMDI0QzcuMjkuMDI0LjE0NCA3LjE0Ni4xNDQgMTUuOTUyYzAgOC43ODIgNy4xMjIgMTUuOTI4IDE1LjkyOCAxNS45MjhDMjQuODU0IDMxLjg4IDMyIDI0Ljc1OCAzMiAxNS45NTIgMzIgNy4xNDYgMjQuODU0LjAyNCAxNi4wNzIuMDI0em0xMC43NTUgMTguNzE5YzAgLjk2Mi0uNTUzIDEuODA0LTEuNjM2IDEuOTk3LTEuODc3LjMzNi01LjgyMy41My05LjExOS41My0zLjI5NiAwLTcuMjQyLS4xOTQtOS4xMTktLjUzLTEuMDgyLS4xOTMtMS42MzYtMS4wMzUtMS42MzYtMS45OTd2LTYuMjA4YzAtLjk2Mi43NDYtMS44NTIgMS42MzYtMS45OTcuNTU0LS4wOTYgMS44NTMtLjE5MiAyLjg2NC0uMTkyLjM4NSAwIC42OTcuMjg5LjY5Ny43NDZ2NC4zNTVsNS41ODItLjEyIDUuNTgyLjEydi00LjM1NWMwLS40NTcuMzEzLS43NDYuNjk4LS43NDYgMS4wMSAwIDIuMzEuMDk2IDIuODYzLjE5Mi45MTQuMTQ1IDEuNjM2IDEuMDM1IDEuNjM2IDEuOTk3LS4wNDggMi4wNDUtLjA0OCA0LjEzOS0uMDQ4IDYuMjA4elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvQ291Y2hiYXNlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvRG9ja2VyID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Eb2NrZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xOC4wOTkgMTUuMTA4aDMuMzA0di0yLjk3M0gxOC4xdjIuOTczem0tMy45MDUgMGgzLjMwNHYtMi45NzNoLTMuMzA0djIuOTczem0tMy45MDUgMGgzLjMwNHYtMi45NzNIMTAuMjl2Mi45NzN6bS0zLjkwNSAwSDkuNjl2LTIuOTczSDYuMzg0djIuOTczem0tMy45MDQgMGgzLjMwNHYtMi45NzNIMi40OHYyLjk3M3ptMy45MDQtMy41NjhIOS42OVY4LjU2OEg2LjM4NHYyLjk3MnptMy45MDUgMGgzLjMwNFY4LjU2OEgxMC4yOXYyLjk3MnptMy45MDUgMGgzLjMwNFY4LjU2OGgtMy4zMDR2Mi45NzJ6bTAtMy41NjdoMy4zMDRWNWgtMy4zMDR2Mi45NzN6bTE3LjEzOSA1LjQwMmMtLjcyMi0uNDc4LTIuMzgtLjY1My0zLjY1Ni0uNDE1LS4xNjQtMS4xOS0uODM0LTIuMjIxLTIuMDUyLTMuMTUzbC0uNy0uNDYzLS40NjguNjk0Yy0uNTk4Ljg5My0uODk3IDIuMTMtLjggMy4zMTcuMDQ1LjQxOC4xODMgMS4xNjQuNjE3IDEuODItLjQzMy4yMzEtMS4yOS41NDktMi40Mi41MjhILjEyNGwtLjA0My4yNDdjLS4yMDQgMS4xOTMtLjIgNC45MTQgMi4yNCA3Ljc3NEM0LjE3OCAyNS44OTggNi45NiAyNyAxMC41OSAyN2M3Ljg3IDAgMTMuNjkzLTMuNTg2IDE2LjQyLTEwLjEwNCAxLjA3My4wMiAzLjM4MS4wMDYgNC41NjctMi4yMzcuMDMxLS4wNTEuMTAyLS4xODYuMzEtLjYxbC4xMTMtLjIzNC0uNjY3LS40NHpcIixcbiAgICBmaWxsOiBcIiMxMzZFQTNcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29Eb2NrZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBodG1sSWRHZW5lcmF0b3IgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29Ecm9wd2l6YXJkID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Ecm9wd2l6YXJkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBnZW5lcmF0ZUlkID0gaHRtbElkR2VuZXJhdG9yKCdsb2dvX2Ryb3B3aXphcmQnKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDI5LjYxczkuNTUgNC43NCAxNi44NTYtLjg5M2MtMS45MDUtNS4xMTQtNS4yNS0xOS44NjctNy4yMjYtMjYuMzgzLS40MjItMS4zODktLjQ5LTEuNTI3LS42NjMtMS45MDktLjk2NC0yLjEzNC0xLjk3OCA0LjE0Mi0zLjYyOCAxMC40NTlDMTIuNzQ5IDEzLjE0OCA4IDI5LjYxIDggMjkuNjFcIixcbiAgICBmaWxsOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2EnKSwgXCIpXCIpXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS45MjYgMjguNTYzczguMTcgNC43OTQgMTQuOTMuMTU0Yy0uMTgtLjgwNy0uNjQyLTIuMTAzLS45NTUtMy4zMTEtMS42NjQtNi40MTYtNC42NzYtMTcuMjQ4LTYuMTQ0LTIyLjYyNi0xLjU5LTUuODIyLTIuMTA1Ljk4Ni0zLjk2MSA4LjIzLS41NjQgMi4yMDQtMy44NyAxNy41NTMtMy44NyAxNy41NTNcIixcbiAgICBmaWxsOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2InKSwgXCIpXCIpXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIuMTQgMjQuNDFsLjg1LTEuNDY2Ljc5MyAxLjU0NC0uOTA4IDEuOTktLjczNS0yLjA2OXptNi45MzQtNS41NDVsLjg1LTEuNDY1Ljc5MyAxLjU0My0uOTA4IDEuOTktLjczNS0yLjA2OHptLTQuNzQ3LTUuODUxbC44NS0xLjQ2NS43OTIgMS41NDMtLjkwOCAxLjk5LS43MzQtMi4wNjhcIixcbiAgICBmaWxsOiBcIiNGOUE3MkJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyLjE0IDI0LjQxbC44NS0xLjcxNi43OTMgMS43OTQtLjkwNyAxLjQ2OC0uNzM2LTEuNTQ2em02LjkzNC01LjU0NWwuODUxLTEuNzE2Ljc5MiAxLjc5NC0uOTA2IDEuNDY4LS43MzctMS41NDZ6bS00Ljc0Ny01Ljg1MWwuODUtMS43MTYuNzkyIDEuNzk0LS45MDYgMS40NjgtLjczNi0xLjU0NlwiLFxuICAgIGZpbGw6IFwiI0ZGRjIwMFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIuOTg3IDI4LjQyMnM2LjA4MiAxLjAxNSAxMC4wODYtMS41NDljLS41MDIgMS41NS00Ljk5MSAzLjMxNC0xMC4wODYgMS41NVwiLFxuICAgIGZpbGw6IFwiIzI0MjY1RFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwiZGVmc1wiLCBudWxsLCBfX19FbW90aW9uSlNYKFwibGluZWFyR3JhZGllbnRcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdhJyksXG4gICAgeDE6IDMzLjQ3MyxcbiAgICB5MTogNy42NzQsXG4gICAgeDI6IDcuNzUxLFxuICAgIHkyOiAyMS4zMzEsXG4gICAgZ3JhZGllbnRVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBzdG9wQ29sb3I6IFwiIzM4NzFDMVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiAwLjUxNSxcbiAgICBzdG9wQ29sb3I6IFwiIzJDMzc5MlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiAwLjg2NSxcbiAgICBzdG9wQ29sb3I6IFwiIzI0MjY1RFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiAxLFxuICAgIHN0b3BDb2xvcjogXCIjMjUyNzYxXCJcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwibGluZWFyR3JhZGllbnRcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdiJyksXG4gICAgeDE6IDIxLjAyOCxcbiAgICB5MTogMTQuOTI4LFxuICAgIHgyOiA2LjAxNyxcbiAgICB5MjogMTguODQ0LFxuICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgc3RvcENvbG9yOiBcIiMzODcxQzFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogMC41MTUsXG4gICAgc3RvcENvbG9yOiBcIiMyQzM3OTJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogMC44NjUsXG4gICAgc3RvcENvbG9yOiBcIiMyNDI2NURcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogMSxcbiAgICBzdG9wQ29sb3I6IFwiIzI1Mjc2MVwiXG4gIH0pKSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29Ecm9wd2l6YXJkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvRWxhc3RpYyA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvRWxhc3RpYyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgXCJkYXRhLXR5cGVcIjogXCJsb2dvRWxhc3RpY1wiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwib3V0bGluZVwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMzAuODYgMTMuMTI5QTYuMzMzIDYuMzMzIDAgMDEzMiAxNi43N2E2LjQxOSA2LjQxOSAwIDAxLTEuMTYyIDMuNjUyIDYuMzgyIDYuMzgyIDAgMDEtMy4wMzIgMi4zMzEgNC44MzMgNC44MzMgMCAwMS0xLjY3MiA1LjU0MiA0Ljc4OSA0Ljc4OSAwIDAxLTUuNzctLjA3NCA5LjAxNiA5LjAxNiAwIDAxLTQuNSAzLjMyMiA4Ljk4MiA4Ljk4MiAwIDAxLTUuNTg3LjAyMyA5LjAxNCA5LjAxNCAwIDAxLTQuNTI2LTMuMjg3IDkuMDY3IDkuMDY3IDAgMDEtMS43MjctNS4zMzNjMC0uNTc5LjA1My0xLjE1Ni4xNi0xLjcyNUE2LjMwNSA2LjMwNSAwIDAxMS4xNDUgMTguOSA2LjM0MSA2LjM0MSAwIDAxMCAxNS4yNDJhNi40MiA2LjQyIDAgMDExLjE2My0zLjY1MiA2LjM4NCA2LjM4NCAwIDAxMy4wMzUtMi4zMyA0LjgzMyA0LjgzMyAwIDAxMS42NTgtNS41NTcgNC43ODkgNC43ODkgMCAwMTUuNzguMDcgOS4wMzcgOS4wMzcgMCAwMTQuOTMtMy40NDYgOS4wMDcgOS4wMDcgMCAwMTUuOTk0LjQxOSA5LjA1IDkuMDUgMCAwMTQuNDA3IDQuMDk4IDkuMDk3IDkuMDk3IDAgMDEuODczIDUuOTY1IDYuMjk4IDYuMjk4IDAgMDEzLjAyIDIuMzJ6bS0xOC4yOC42NThsNy4wMDIgMy4yMTEgNy4wNjYtNi4yMTNhNy44NSA3Ljg1IDAgMDAuMTUyLTEuNTU3YzAtMS42OTItLjUzOS0zLjM0LTEuNTQtNC43MDRhNy44OTcgNy44OTcgMCAwMC00LjAyLTIuODY5IDcuODcgNy44NyAwIDAwLTQuOTMyLjA4NiA3LjkgNy45IDAgMDAtMy45MiAzLjAwN2wtMS4xNzQgNi4xMTggMS4zNjcgMi45Mi0uMDAxLjAwMXptLTcuMjQ3IDcuNDQxQTcuOTY0IDcuOTY0IDAgMDA2LjcyIDI3LjUzYTcuOTE4IDcuOTE4IDAgMDA0LjA0IDIuODc0IDcuODkgNy44OSAwIDAwNC45NS0uMDk3IDcuOTIgNy45MiAwIDAwMy45MjYtMy4wM2wxLjE2Ni02LjEwMi0xLjU1NS0yLjk4NS03LjAzLTMuMjExLTYuODg1IDYuMjQ4LjAwMS4wMDF6bTQuNzU1LTExLjAyNGwtNC44LTEuMTM3LjAwMi0uMDAyYTMuODIgMy44MiAwIDAxMS4zMTItNC4zNTggMy43ODUgMy43ODUgMCAwMTQuNTM4LjAyM2wtMS4wNTIgNS40NzR6bS01LjIxNi4wMWE1LjI5NCA1LjI5NCAwIDAwLTIuNTk1IDEuODgyIDUuMzI0IDUuMzI0IDAgMDAtLjE0MiA2LjEyNCA1LjI4NyA1LjI4NyAwIDAwMi41MDUgMmw2LjczMy02LjEwMS0xLjIzNS0yLjY1LTUuMjY2LTEuMjU1em0xOC4yODYgMTcuODQ4YTMuNzM3IDMuNzM3IDAgMDEtMi4yODUtLjc4NWwxLjAzNy01LjQ1NCA0LjggMS4xMjVhMy44MTIgMy44MTIgMCAwMS0xLjgwMSA0LjY4Yy0uNTQuMjgzLTEuMTQuNDMyLTEuNzUxLjQzNHptLTEuMzEtNy40OTlsNS4yOCAxLjIzOGE1LjM0IDUuMzQgMCAwMDIuNjIyLTEuOTM4IDUuMzcgNS4zNyAwIDAwMS4wMTMtMy4xMDYgNS4zMTEgNS4zMTEgMCAwMC0uOTM2LTMuMDEgNS4yODIgNS4yODIgMCAwMC0yLjQ3NS0xLjk0NGwtNi45MDQgNi4wNyAxLjQgMi42OXpcIixcbiAgICBmaWxsOiBcIiNmZmZcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyLjU4IDEzLjc4N2w3LjAwMiAzLjIxMSA3LjA2Ni02LjIxM2E3Ljg0OSA3Ljg0OSAwIDAwLjE1Mi0xLjU1N2MwLTEuNjkyLS41MzktMy4zNC0xLjU0LTQuNzA0YTcuODk3IDcuODk3IDAgMDAtNC4wMi0yLjg2OSA3Ljg3IDcuODcgMCAwMC00LjkzMi4wODYgNy45IDcuOSAwIDAwLTMuOTIgMy4wMDdsLTEuMTc0IDYuMTE4IDEuMzY3IDIuOTItLjAwMS4wMDF6XCIsXG4gICAgZmlsbDogXCIjRkVDNTE0XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01LjMzMyAyMS4yMjhBNy45NjQgNy45NjQgMCAwMDYuNzIgMjcuNTNhNy45MTggNy45MTggMCAwMDQuMDQgMi44NzQgNy44OSA3Ljg5IDAgMDA0Ljk1LS4wOTcgNy45MiA3LjkyIDAgMDAzLjkyNi0zLjAzbDEuMTY2LTYuMTAyLTEuNTU1LTIuOTg1LTcuMDMtMy4yMTEtNi44ODUgNi4yNDguMDAxLjAwMXpcIixcbiAgICBmaWxsOiBcIiMwMEJGQjNcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUuMjg4IDkuMDY3bDQuOCAxLjEzN0wxMS4xNCA0LjczYTMuNzg1IDMuNzg1IDAgMDAtNS45MTQgMS45NCAzLjgyIDMuODIgMCAwMC4wNjQgMi4zOTVcIixcbiAgICBmaWxsOiBcIiNGMDRFOThcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQuODcyIDEwLjIxNGE1LjI5NCA1LjI5NCAwIDAwLTIuNTk1IDEuODgyIDUuMzI0IDUuMzI0IDAgMDAtLjE0MiA2LjEyNCA1LjI4NyA1LjI4NyAwIDAwMi41MDUgMmw2LjczMy02LjEwMS0xLjIzNS0yLjY1LTUuMjY2LTEuMjU1elwiLFxuICAgIGZpbGw6IFwiIzFCQTlGNVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjAuODczIDI3LjI3N2EzLjczNiAzLjczNiAwIDAwMi4yODUuNzg1IDMuNzgzIDMuNzgzIDAgMDAzLjEwMS0xLjYzIDMuODEyIDMuODEyIDAgMDAuNDUxLTMuNDg0bC00LjgtMS4xMjUtMS4wMzcgNS40NTR6XCIsXG4gICAgZmlsbDogXCIjOTNDOTBFXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMS44NDggMjAuNTYzbDUuMjggMS4yMzhhNS4zNCA1LjM0IDAgMDAyLjYyMi0xLjkzOCA1LjM3IDUuMzcgMCAwMDEuMDEzLTMuMTA2IDUuMzEyIDUuMzEyIDAgMDAtLjkzNi0zLjAxIDUuMjgzIDUuMjgzIDAgMDAtMi40NzUtMS45NDRsLTYuOTA0IDYuMDcgMS40IDIuNjl6XCIsXG4gICAgZmlsbDogXCIjMDdDXCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29FbGFzdGljOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvRWxhc3RpY1N0YWNrID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29FbGFzdGljU3RhY2soX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0YwNEU5OFwiLFxuICAgIGQ6IFwiTTMyIDlWMi41QTIuNSAyLjUgMCAwMDI5LjUgMGgtMjdBMi41IDIuNSAwIDAwMCAyLjVWOWgzMnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwQkZCM1wiLFxuICAgIGQ6IFwiTTAgMjBoMzJ2LThIMHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwODBENVwiLFxuICAgIGQ6IFwiTTE0LjUgMjNIMHY2LjVBMi41IDIuNSAwIDAwMi41IDMyaDEydi05elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkVDNTE0XCIsXG4gICAgZDogXCJNMTcuNSAyM3Y5aDEyYTIuNSAyLjUgMCAwMDIuNS0yLjVWMjNIMTcuNXpcIlxuICB9KSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29FbGFzdGljU3RhY2s7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29FbGFzdGljc2VhcmNoID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29FbGFzdGljc2VhcmNoKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCIsXG4gICAgZDogXCJNMiAxNmMwIDEuMzg0LjE5NCAyLjcyLjUyNCA0SDIyYTQgNCAwIDAwMC04SDIuNTI0QTE1Ljk4NCAxNS45ODQgMCAwMDIgMTZcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZFQzUxNFwiLFxuICAgIGQ6IFwiTTI4LjkyNCA3LjY2MkExNS4zODEgMTUuMzgxIDAgMDAzMC40OCA2QzI3LjU0NyAyLjM0NiAyMy4wNSAwIDE4IDAgMTEuNjc5IDAgNi4yMzkgMy42NzggMy42NDQgOUgyNS41MWE1LjAzOSA1LjAzOSAwIDAwMy40MTMtMS4zMzhcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwQkZCM1wiLFxuICAgIGQ6IFwiTTI1LjUxIDIzSDMuNjQ1QzYuMjQgMjguMzIzIDExLjY3OSAzMiAxOCAzMmM1LjA1IDAgOS41NDctMi4zNDYgMTIuNDgtNmExNS4zODEgMTUuMzgxIDAgMDAtMS41NTYtMS42NjJBNS4wMzQgNS4wMzQgMCAwMDI1LjUxIDIzXCJcbiAgfSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvRWxhc3RpY3NlYXJjaDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0VudGVycHJpc2VTZWFyY2ggPSBmdW5jdGlvbiBFdWlJY29uTG9nb0VudGVycHJpc2VTZWFyY2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMEJGQjNcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTYgMGMtMi45MTggMC01LjY0NS43OTQtOCAyLjE1OCA0Ljc3NyAyLjc2OCA4IDcuOTIzIDggMTMuODQyIDAgNS45MTktMy4yMjMgMTEuMDc0LTggMTMuODQyQTE1LjkwNyAxNS45MDcgMCAwMDE2IDMyYzguODM3IDAgMTYtNy4xNjMgMTYtMTZTMjQuODM3IDAgMTYgMHpcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRUM1MTRcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOCAyNGgyLjIyMkExMi45OTYgMTIuOTk2IDAgMDAxMyAxNmMwLTIuOTM1LTEuMDEyLTUuNzQ0LTIuNzc4LThIOGE4IDggMCAwMDAgMTZ6XCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxOZWdhdGl2ZVwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xNiA4aC0yLjE1MkExNS44NzcgMTUuODc3IDAgMDExNiAxNmMwIDIuOTE4LS43ODYgNS42NDctMi4xNTIgOEgxNmE4IDggMCAwMDAtMTZ6XCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvRW50ZXJwcmlzZVNlYXJjaDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0V0Y2QgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0V0Y2QoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIiM0MTlFREFcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTQuNjUgMTQuMTY0YzAgMS4xODktLjkzMyAyLjE1LTIuMDgzIDIuMTUtMS4xNTIgMC0yLjA4Mi0uOTYxLTIuMDgyLTIuMTUgMC0xLjE4NS45My0yLjE1IDIuMDgyLTIuMTUgMS4xNSAwIDIuMDgzLjk2NSAyLjA4MyAyLjE1em0yLjY5MyAwYzAgMS4xODkuOTM0IDIuMTUgMi4wODQgMi4xNXMyLjA4My0uOTYxIDIuMDgzLTIuMTVjMC0xLjE4NS0uOTMzLTIuMTUtMi4wODMtMi4xNS0xLjE1IDAtMi4wODQuOTY1LTIuMDg0IDIuMTV6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zMS41MjIgMTYuNDk1YTUuODQ1IDUuODQ1IDAgMDEtMy4xMDUtLjYxOGMuMjcyLTEuNjAzLjM4Ny0zLjIxOC4zNTctNC44MjdhMjQuODk2IDI0Ljg5NiAwIDAwLTMuMDI3LTMuNzAzIDYuMTM3IDYuMTM3IDAgMDEyLjEzMy0yLjM2bC4zOTEtLjI1LS4zMDQtLjM1NGMtMS41Ny0xLjgyNS0zLjQ0NC0zLjIzNS01LjU2OC00LjE5M0wyMS45NzUgMGwtLjEwNy40NjJhNi4yNDggNi4yNDggMCAwMS0xLjUxIDIuODI5IDIzLjc3IDIzLjc3IDAgMDAtNC4zNjItMS44NTUgMjMuNzkgMjMuNzkgMCAwMC00LjM1NSAxLjg1MUE2LjI0NiA2LjI0NiAwIDAxMTAuMTM3LjQ2NWwtLjEwOC0uNDYyLS40MjMuMTg5Yy0yLjA5Ny45NDMtNC4wMjIgMi4zOTItNS41NjYgNC4xOWwtLjMwNi4zNTUuMzkuMjVhNi4xMjUgNi4xMjUgMCAwMTIuMTI5IDIuMzQ3IDI1LjAwMSAyNS4wMDEgMCAwMC0zLjAyMiAzLjY4OSAyNi4wNjggMjYuMDY4IDAgMDAuMzQ3IDQuODYgNS44MzIgNS44MzIgMCAwMS0zLjA5LjYxMkwuMDMgMTYuNDZsLjA0My40NzNhMTYuNzIzIDE2LjcyMyAwIDAwMi4xNCA2Ljc2NWwuMjM0LjQxLjM1LS4zMDhhNS45MTQgNS45MTQgMCAwMTIuODM3LTEuMzcyIDI1LjI1NSAyNS4yNTUgMCAwMDIuNDI5IDQuMDgzYzEuNDc1LjUzMyAzLjAxMy45MyA0LjYwMSAxLjE2N2E2LjM1OSA2LjM1OSAwIDAxLS4zODMgMy4yNDNsLS4xNzUuNDM5LjQ1LjEwMmMxLjE1LjI2MSAyLjMxLjM5NCAzLjQ0Ny4zOTRsMy40NDctLjM5NC40NS0uMTAyLS4xNzUtLjQ0YTYuMzc2IDYuMzc2IDAgMDEtLjM4My0zLjI0NCAyMy45MDUgMjMuOTA1IDAgMDA0LjU4NS0xLjE2NSAyNS4yODYgMjUuMjg2IDAgMDAyLjQzLTQuMDg2IDUuOTQgNS45NCAwIDAxMi44NTEgMS4zNzNsLjM1LjMwNi4yMzMtLjQwOGExNi42NjEgMTYuNjYxIDAgMDAyLjE0LTYuNzY0bC4wNDItLjQ3Mi0uNDUuMDM2ek0yMC45MyAyMi4yNzhjLTEuNjMuNDU4LTMuMjg3LjY4OS00LjkzMy42ODktMS42NSAwLTMuMzA0LS4yMzEtNC45MzYtLjY5YTIwLjAyOCAyMC4wMjggMCAwMS0yLjExMy00LjU5NCAyMC4wNzIgMjAuMDcyIDAgMDEtLjg5LTUuMDQgMTkuMDc2IDE5LjA3NiAwIDAxMy41NzYtMy41MTYgMTguODY3IDE4Ljg2NyAwIDAxNC4zNjMtMi40NDggMTguOTQ0IDE4Ljk0NCAwIDAxNC4zNTUgMi40NDMgMTkuMTkgMTkuMTkgMCAwMTMuNTkyIDMuNTM4Yy0uMDkgMS43My0uMzkgMy40MS0uODk5IDUuMDE5YTE5Ljk2NSAxOS45NjUgMCAwMS0yLjExNSA0LjU5OXpcIlxuICB9KSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29FdGNkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaHRtbElkR2VuZXJhdG9yIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvR2NwID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29HY3AoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGdlbmVyYXRlSWQgPSBodG1sSWRHZW5lcmF0b3IoJ2xvZ29fZ2NwJyk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHhtbG5zWGxpbms6IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZGVmc1wiLCBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2EnKSxcbiAgICBkOiBcIk0uMDg1LjFoNC41NDl2Ni4yOTFILjA4NXpcIlxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0RCNDQzN1wiLFxuICAgIGZpbGxSdWxlOiBcIm5vbnplcm9cIixcbiAgICBkOiBcIk0yMi41NyAyOS45ODJoLTUuNzQ5Yy41MjcgMCAuOTg3LS4yODIgMS4yMzMtLjdMMjUuODU3IDE2IDIwLjkzIDcuNjFsNS43NDguMDAxYy40OTIgMCAuOTcuMjUxIDEuMjMyLjdsMy42OTggNi4yOTFjLjQ5LjgzNy41MjYgMS45IDAgMi43OTdsLTYuNTcyIDExLjE4NWEyLjg1MyAyLjg1MyAwIDAxLTIuNDY0IDEuMzk4em0tLjcxLTIuNzk2YzAgLjM4Ni4zMTguNy43MS43YS43MDUuNzA1IDAgMDAuNzEyLS43YzAtLjM4Ni0uMzE4LS43LS43MTEtLjdhLjcwNS43MDUgMCAwMC0uNzEyLjd6bTYuOTI3LTEwLjU4Yy4zNC4xOTMuNzc1LjA3OC45NzEtLjI1NmEuNjkyLjY5MiAwIDAwLS4yNi0uOTU1LjcxOC43MTggMCAwMC0uOTcyLjI1Ni42OTIuNjkyIDAgMDAuMjYuOTU1elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjNDI4NUY0XCIsXG4gICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiLFxuICAgIGQ6IFwiTTI1LjAzNiAzLjQxNmwyLjg3MyA0Ljg5NGExLjQyNyAxLjQyNyAwIDAwLTEuMjMyLS42OTlIMTEuMDcxbC00LjkyOCA4LjM4OC0yLjg3NC00Ljg5MmExLjM3NyAxLjM3NyAwIDAxMC0xLjM5OWwzLjY5Ni02LjI5MmEyLjg1MyAyLjg1MyAwIDAxMi40NjQtMS4zOThoMTMuMTQzYy45ODIgMCAxLjkzNy41MDIgMi40NjQgMS4zOTh6TTEwLjE0IDQuODE0YzAtLjM4Ni0uMzE4LS43LS43MS0uN2EuNzA1LjcwNSAwIDAwLS43MTIuN2MwIC4zODYuMzE4LjcuNzExLjdhLjcwNS43MDUgMCAwMC43MTEtLjd6bTEyLjc4Ny42MDZhLjY5Mi42OTIgMCAwMC4yNi0uOTU1LjcxOC43MTggMCAwMC0uOTcxLS4yNTYuNjkyLjY5MiAwIDAwLS4yNi45NTUuNzE4LjcxOCAwIDAwLjk3MS4yNTZ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGNEI0MDBcIixcbiAgICBmaWxsUnVsZTogXCJub256ZXJvXCIsXG4gICAgZDogXCJNLjM5NCAxNC42MDFsMi44NzUtNC44OTNjLS4yNjMuNDQ5LS4yNDUuOTggMCAxLjM5OUwxMS4wNyAyNC4zOWg5Ljg1N2wtMi44NzQgNC44OTJjLS4yNDYuNDE4LS43MDYuNy0xLjIzMy43SDkuNDI4YTIuODU0IDIuODU0IDAgMDEtMi40NjQtMS4zOThMLjM5NCAxNy4zOThhMi43NTQgMi43NTQgMCAwMTAtMi43OTd6bTIuODIuNzkzYS43MTguNzE4IDAgMDAtLjk3Mi4yNTYuNjkzLjY5MyAwIDAwLjI2Ljk1NWMuMzQuMTkzLjc3NS4wNzguOTcxLS4yNTZhLjY5Mi42OTIgMCAwMC0uMjYtLjk1NXpNOS4wNzIgMjYuNThhLjY5Mi42OTIgMCAwMC0uMjYuOTU1LjcxOC43MTggMCAwMC45NzEuMjU2LjY5Mi42OTIgMCAwMC4yNi0uOTU1LjcxOC43MTggMCAwMC0uOTcxLS4yNTZ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMDBcIixcbiAgICBkOiBcIk0xOC4wNTQgMjkuMjgybDIuODc1LTQuODkySDE3Ljk2bC0xLjEzOCA1LjU5MWMuNTI2IDAgLjk4Ni0uMjggMS4yMzItLjY5OU0yNi42NzggNy42MTFoLTUuNzQ5bDEuNDg0IDIuNTI3TDI3LjkxIDguMzFhMS40MjcgMS40MjcgMCAwMC0xLjIzMi0uN1wiLFxuICAgIG9wYWNpdHk6IDAuMVxuICB9KSwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIG9wYWNpdHk6IDAuMSxcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDIuOTk0IDkuNjA5KVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJtYXNrXCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnYicpLFxuICAgIGZpbGw6IFwiI2ZmZlwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJ1c2VcIiwge1xuICAgIHhsaW5rSHJlZjogXCIjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2EnKSlcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDAwXCIsXG4gICAgZDogXCJNLjI3NSAxLjQ5OEwzLjE1IDYuMzkxbDEuNDg1LTIuNTI3TC4yNzUuMWMtLjI2My40NDgtLjI0NS45OCAwIDEuMzk4XCIsXG4gICAgbWFzazogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdiJyksIFwiKVwiKVxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNDQ0NcIixcbiAgICBmaWxsUnVsZTogXCJub256ZXJvXCIsXG4gICAgZDogXCJNMTEuMDcxIDI0LjM5TDYuMTQzIDE2bDQuOTI4LTguMzloOS44NThMMjUuODU3IDE2bC00LjkyOCA4LjM5SDExLjA3ek0yMC4yNjggMTZjMC0yLjMxNy0xLjkxLTQuMTk0LTQuMjY4LTQuMTk0LTIuMzU3IDAtNC4yNjggMS44NzctNC4yNjggNC4xOTQgMCAyLjMxNiAxLjkxIDQuMTk0IDQuMjY4IDQuMTk0IDIuMzU3IDAgNC4yNjgtMS44NzggNC4yNjgtNC4xOTR6XCJcbiAgfSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvR2NwOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvR2NwTW9ubyA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvR2NwTW9ubyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIwLjI1NiAxNS45ODJjMC0yLjMxNi0xLjkxLTQuMTk0LTQuMjY4LTQuMTk0LTIuMzU3IDAtNC4yNjggMS44NzgtNC4yNjggNC4xOTQgMCAyLjMxNyAxLjkxMSA0LjE5NSA0LjI2OCA0LjE5NSAyLjM1NyAwIDQuMjY4LTEuODc4IDQuMjY4LTQuMTk1XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yOS44NyAxNi41NDNhLjg2Mi44NjIgMCAwMS0xLjE2Ny4zMDguODMyLjgzMiAwIDAxLS4zMTItMS4xNDcuODYyLjg2MiAwIDAxMS4xNjctLjMwOC44MzIuODMyIDAgMDEuMzEyIDEuMTQ3TTIyLjU2IDI4LjE1YS44NDcuODQ3IDAgMDEtLjg1NS0uODRjMC0uNDY0LjM4My0uODQuODU1LS44NHMuODU0LjM3Ni44NTQuODRjMCAuNDY0LS4zODIuODQtLjg1NC44NG0tMTIuNzE1LS4xMTNhLjg2My44NjMgMCAwMS0xLjE2Ny0uMzA4LjgzMi44MzIgMCAwMS4zMTItMS4xNDcuODYyLjg2MiAwIDAxMS4xNjcuMzA4LjgzMi44MzIgMCAwMS0uMzEyIDEuMTQ3TTMuNTg2IDE2LjU0MmEuODYzLjg2MyAwIDAxLTEuMTY3LjMwOC44MzIuODMyIDAgMDEtLjMxMy0xLjE0Ny44NjIuODYyIDAgMDExLjE2Ny0uMzA4LjgzMi44MzIgMCAwMS4zMTMgMS4xNDdNMjIuOTg3IDUuNjY1YS44NjIuODYyIDAgMDEtMS4xNjctLjMwOC44MzIuODMyIDAgMDEuMzEyLTEuMTQ3Ljg2My44NjMgMCAwMTEuMTY4LjMwOC44MzIuODMyIDAgMDEtLjMxMyAxLjE0N20tMTMuNTcuMTEyYS44NDcuODQ3IDAgMDEtLjg1NC0uODRjMC0uNDY0LjM4Mi0uODQuODU0LS44NHMuODU1LjM3Ni44NTUuODRjMCAuNDY0LS4zODMuODQtLjg1NS44NG0yMi4xNzggOC43OTdsLTMuNjk3LTYuMjkyYy0uMDE0LS4wMjMtLjAzLS4wNDMtLjA0NS0uMDY1bC0yLjgzLTQuODE4QTIuODU0IDIuODU0IDAgMDAyMi41NiAySDkuNDE3YTIuODUzIDIuODUzIDAgMDAtMi40NjQgMS4zOThMMy4yNTcgOS42OWwzLjI4NCA1LjU5IDQuNTE5LTcuNjloMTUuNjA1Yy40OTEgMCAuOTY5LjI1MSAxLjIzMi42OTloLTYuNTY1bDQuNTEzIDcuNjgyLTQuOTM1IDguNC0yLjg3IDQuODgzYTEuNDI2IDEuNDI2IDAgMDEtMS4yMy42OTlsMy4yNzktNS41ODJoLTkuMDNsLTQuNTQ0LTcuNzM4LS4zODQtLjY1My0yLjg3NC00Ljg5M2ExLjM3NyAxLjM3NyAwIDAxLS4wMDMtMS4zOTFMLjM4MiAxNC41ODRhMi43NTQgMi43NTQgMCAwMDAgMi43OTZsNi41NyAxMS4xODZhMi44NTQgMi44NTQgMCAwMDIuNDY1IDEuMzk4aDcuMzkyYy4wNTQgMCAuMTA3LS4wMDUuMTYtLjAxMWg1LjU5YTIuODUzIDIuODUzIDAgMDAyLjQ2NC0xLjM5N2w2LjU3Mi0xMS4xODZjLjUyNi0uODk2LjQ5LTEuOTYgMC0yLjc5NlwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvR2NwTW9ubzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0dpdGh1YiA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvR2l0aHViKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYgMEM3LjE2NCAwIDAgNy4zNDMgMCAxNi40YzAgNy4yNDggNC41ODQgMTMuMzk0IDEwLjk0MiAxNS41NjIuOC4xNSAxLjA5Mi0uMzU2IDEuMDkyLS43ODkgMC0uMzktLjAxNC0xLjY4NC0uMDIyLTMuMDUzLTQuNDUuOTkxLTUuMzktMS45MzQtNS4zOS0xLjkzNC0uNzI4LTEuODk0LTEuNzc2LTIuMzk4LTEuNzc2LTIuMzk4LTEuNDU0LTEuMDE3LjExLS45OTcuMTEtLjk5NyAxLjYwNi4xMTQgMi40NTIgMS42OSAyLjQ1MiAxLjY5IDEuNDI4IDIuNTA2IDMuNzQ2IDEuNzgxIDQuNjU2IDEuMzYuMTQ2LTEuMDU2LjU2LTEuNzggMS4wMTYtMi4xOS0zLjU1Mi0uNDE0LTcuMjg4LTEuODIxLTcuMjg4LTguMTA1IDAtMS43OTIuNjI0LTMuMjU0IDEuNjQ2LTQuNDAyLS4xNjQtLjQxNi0uNzE0LTIuMDg1LjE1OC00LjM0MiAwIDAgMS4zNDEtLjQ0IDQuNCAxLjY4MUExNC44ODIgMTQuODgyIDAgMDExNiA3LjkzMmMxLjM2LjAwNiAyLjcyOC4xODggNC4wMDYuNTUzIDMuMDUzLTIuMTI0IDQuMzk2LTEuNjgxIDQuMzk2LTEuNjgxLjg3NSAyLjI1OS4zMjUgMy45MjYuMTYgNC4zNCAxLjAyNiAxLjE0OCAxLjY0NSAyLjYxIDEuNjQ1IDQuNDAyIDAgNi4zLTMuNzQyIDcuNjg3LTcuMzA3IDguMDk0LjU3Ny41MDggMS4wODYgMS41MDUgMS4wODYgMy4wMzUgMCAyLjE5Mi0uMDIxIDMuOTYtLjAyMSA0LjUgMCAuNDM3LjI5Ljk0NyAxLjEwMS43ODdDMjcuNDIgMjkuNzkgMzIgMjMuNjQ0IDMyIDE2LjQgMzIgNy4zNDMgMjQuODM2IDAgMTYgMHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0dpdGh1YjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0dtYWlsID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29HbWFpbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGw6IFwibm9uZVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNFNjVBNERcIixcbiAgICBkOiBcIk0yOS4xNjIgNC4xNDljLjI5LS4xNzUuNTg4LS4wNzguODczIDBhMi42MTYgMi42MTYgMCAwMTEuOTA3IDIuNDc2Yy4wMDYuMjktLjAwNy41ODEtLjAwNy44NjYtLjA4NCAwLS4xMzUuMDUyLS4yLjA5Ny0uODE1LjU4Mi0xLjY0MiAxLjE2NC0yLjQ1IDEuNzUyLS4zMy4yMzktLjY5Mi40MjYtLjk3LjczLS4xMTYgMC0uMi4wNzgtLjI4NC4xMzYtMi42OSAxLjg1NS01LjM3OSAzLjcwNC04LjA2MiA1LjU2LTEuMzMxLjkxOC0yLjY2MyAxLjg0OS0zLjk5NSAyLjc3M2gtLjExYy0uMDU4LS4wNDUtLjExLS4xMDMtLjE2OC0uMTQyTDUuODYzIDExLjU1Yy0uNjcyLS40NjYtMS4zNDQtLjkzOC0yLjAxNy0xLjQwMy0uMDc3LS4wNTItLjE0OC0uMTYyLS4yNDUtLjEwNC0uMDkuMDUyLS4wMzMuMTc1LS4wNDUuMjcyLS4wMDcuMDMyIDAgLjA2NSAwIC4wOTd2MTYuMTk0YzAgLjExNi4wMDYuMjQuMDEyLjM1NSAwIC4wNjUtLjAwNi4xMjMtLjAwNi4xODgtMS4yMjguMTQ5LTIuMzQ3LS4wMi0zLjExNi0xLjEzMWEyLjM4MSAyLjM4MSAwIDAxLS40NC0xLjM2NGMwLTYuMDMyLS4wMDYtMTIuMDU3LjAwNy0xOC4wODkgMC0xLjIyOC45OTUtMi4zMTQgMi4yMTctMi40ODguMTk0LS4wMjYuMzg4LS4wNTIuNTU2LjA3Ny4wNC4wMzkuMDcxLjA3OC4xMTcuMTEgNC4yNzMgMy4xNjggOC41NDYgNi4zMzUgMTIuODE5IDkuNTEuMTY4LjEyMi4yNzguMTE2LjQ0Ni0uMDA3IDMuNDEzLTIuNTIxIDYuODMzLTUuMDM2IDEwLjI0Ny03LjU1LjkwNS0uNjkyIDEuODIzLTEuMzg0IDIuNzQ3LTIuMDd6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGNkY0RUNcIixcbiAgICBkOiBcIk0yOS4xNjIgNC4xNDljLS45MjQuNjg1LTEuODQyIDEuMzc3LTIuNzY3IDIuMDYyLTMuNDEzIDIuNTIxLTYuODMzIDUuMDMtMTAuMjQ2IDcuNTUtLjE2OC4xMjMtLjI3Mi4xMy0uNDQ2LjAwNy00LjI2Ny0zLjE3NC04LjU0LTYuMzM1LTEyLjgxMy05LjUxLS4wNDYtLjAzMi0uMDc4LS4wNy0uMTE3LS4xMS4wNzgtLjEyOS4yMTQtLjA4My4zMjQtLjA4M2gyNS43NDJjLjExIDAgLjIzOS0uMDQ2LjMyMy4wODR6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNFNkUzRDZcIixcbiAgICBkOiBcIk0zLjU1NiAyNi45NWE2LjUzMyA2LjUzMyAwIDAxLS4wMTMtLjM1NlYxMC40YzAtLjAzMi0uMDA3LS4wNjUgMC0uMDk3LjAxMy0uMDktLjA0Ni0uMjEzLjA0NS0uMjcxLjA5Ny0uMDU5LjE3NC4wNTEuMjQ2LjEwMy42NzIuNDY1IDEuMzQ0LjkzNyAyLjAxNyAxLjQwM2w5LjgzMiA2Ljg0NmMuMDU4LjA0NS4xMTcuMDk3LjE2OC4xNDItLjAyNi4wMjYtLjA1OC4wNDUtLjA4NC4wNzFsLS4wNjQuMDY1Yy0uMDUyIDAtLjEwNC4wMTMtLjEzLjA2NGwtLjA2NC4wNjVjLS4wMDcuMDEzLS4wMi4wMi0uMDI2LjAzMi4wMTMtLjAwNi4wMi0uMDE5LjAzMi0uMDI1bC4wNjUtLjA2NWMuMDUyIDAgLjEwMy0uMDEzLjEzLS4wNjUuMDE4LS4wMi4wNDQtLjA0NS4wNjQtLjA2NC4wNjQgMCAuMTI5LS4wMDcuMTk0LS4wMDcuODk4LjYyNyAxLjgwMyAxLjI0OCAyLjcwMiAxLjg3NSAyLjY3NiAxLjg1NSA1LjM1MyAzLjcwNCA4LjAyMyA1LjU3Mi40NzguMzM3IDEuMDAyLjYyOCAxLjQyOCAxLjAzNS0uMTE2LjExLS4yNTguMDM5LS4zODguMDU4LjAwNy0uMTQ5LS4xMjItLjE4OC0uMjItLjI1Mi0uNDktLjM0My0uOTk1LS42NzItMS40NzMtMS4wMjgtLjgwMi0uNTg4LTEuNjE3LTEuMTUtMi40MzEtMS43Mi0uNjc5LS40NzItMS4zNTEtLjk2My0yLjA1LTEuNDA5LS42MDctLjM4OC0xLjE3LS44NTMtMS43NzctMS4yNDgtLjY4NS0uNDQtMS4zMzItLjkzLTIuMDEtMS4zNzctLjU2My0uMzY4LTEuMTEzLS43NjItMS42NjItMS4xNS0uMTEtLjA3OC0uMjA3LS4xMS0uMzIzLS4wMzMtLjIzMy4xNjgtLjUzLjI3OC0uNzI0LjQ2LS41NTYuNTEtMS4yMzUuODQtMS44MTcgMS4zMDUtLjc0My41ODktMS41NDUgMS4xMTItMi4zNCAxLjYzNi0xLjMxOS44NzMtMi41OTkgMS44MTYtMy45MTEgMi42OTZhNDMuNjk3IDQzLjY5NyAwIDAwLTIuMzA4IDEuNjI5Yy0uMjA3LjE1NS0uNDg1LjIyNi0uNjE0LjQ4NS0uMTMtLjAxMy0uMjcyLjAzOC0uMzk1LS4wNDYgMi4zMTUtMS42MTYgNC42My0zLjIyNiA2LjkzNy00Ljg0Mi4zMDQtLjIxMy42NDYtLjM4MS44OTktLjY2Ni4wNDUtLjAxMy4xMDMtLjAxOS4wOTctLjA4NCAwLS4wMDYtLjAxMy0uMDItLjAyLS4wMi0uMDY1LS4wMDYtLjA3Ny4wNDYtLjA5LjA5MS0uMjMzLjAxMy0uMzc1LjE5NC0uNTUuMzEtMi40NjMgMS43LTQuOTMyIDMuMzg4LTcuMzk1IDUuMDc1em0xMS4xMTktNy41NjRsLjA2NC0uMDY1Yy4wNTIgMCAuMTA0LS4wMTMuMTMtLjA2NGwuMDY0LS4wNjVjLjA1MiAwIC4xMDQtLjAxMy4xMy0uMDY1LjAwNi0uMDEzLjAxOS0uMDIuMDI1LS4wMzItLjAxMi4wMDYtLjAxOS4wMi0uMDMyLjAyNi0uMDUyIDAtLjEwMy4wMTMtLjEzLjA2NGwtLjA2NC4wNjVjLS4wNTEgMC0uMTAzLjAxMy0uMTMuMDY1LS4wMTguMDI2LS4wMzguMDQ1LS4wNTcuMDctLjAxMy4wMDctLjAyNi4wMTQtLjAzMy4wMjcuMDEzLS4wMDcuMDI2LS4wMTMuMDMzLS4wMjZ6bS0uODQuNTc1Yy0uMDUyIDAtLjEwNC4wMTMtLjEzLjA2NS0uMDM5LjAwNi0uMDkuMDA2LS4wOTcuMDY1IDAgLjAxMi4wMjYuMDM4LjAzOS4wMzguMDUyLS4wMDYuMDU4LS4wNTEuMDY1LS4wOS4wNTEtLjAwNy4wOTYtLjAxMy4xMjItLjA3OGEuMzExLjMxMSAwIDAwLjA3MS0uMDU4Yy4wNTIgMCAuMTA0LS4wMTMuMTMtLjA2NWwuMDY0LS4wNjRjLjA1MiAwIC4xMDQtLjAxMy4xMy0uMDY1LjAwNi0uMDEzLjAyLS4wMi4wMjYtLjAzMi0uMDEzLjAwNi0uMDIuMDItLjAzMy4wMjYtLjA1MSAwLS4xMDMuMDEzLS4xMy4wNjQtLjAxOC4wMi0uMDQ0LjA0Ni0uMDY0LjA2NS0uMDUxIDAtLjEwMy4wMTMtLjEyOS4wNjVsLS4wNjUuMDY0em0tLjg0MS41ODhjLS4wNTIgMC0uMTAzLjAxMy0uMTMuMDY1LS4wNTEuMDA3LS4xMDMuMDEzLS4wOTYuMDg0IDAgLjAwNy4wMTMuMDIuMDIuMDIuMDcuMDA2LjA3Ny0uMDQ2LjA4My0uMDk3LjA1Mi0uMDA3LjA5Ny0uMDIuMTIzLS4wNzIuMDI2LS4wMTIuMDQ1LS4wMzguMDcxLS4wNTguMDUyIDAgLjEwMy0uMDEzLjEzLS4wNjRsLjA2NC0uMDY1Yy4wNTIgMCAuMTAzLS4wMTMuMTMtLjA2NS4wMDYtLjAxMy4wMTktLjAxOS4wMjUtLjAzMi0uMDEzLjAwNy0uMDIuMDItLjAzMi4wMjYtLjA1MiAwLS4xMDQuMDEzLS4xMy4wNjVsLS4wNjQuMDY0Yy0uMDUyIDAtLjEwNC4wMTMtLjEzLjA2NWEuMzA2LjMwNiAwIDAwLS4wNjQuMDY0em0tLjY0Ny40NmMuMDUyLS4wMDcuMTA0LS4wMTMuMDk3LS4wODUgMC0uMDA2LS4wMTItLjAxOS0uMDE5LS4wMTktLjA3MS0uMDA2LS4wNzguMDQ1LS4wODQuMDk3LS4wNTIgMC0uMDk3LjAxMy0uMTMuMDY1YS4yMjMuMjIzIDAgMDAtLjE5My4xMjljLS4wNDUuMDEzLS4xMDQuMDEzLS4wOTcuMDg0IDAgLjAwNi4wMTMuMDIuMDIuMDIuMDY0LjAwNi4wNzctLjA0Ni4wODMtLjA5OC4wOSAwIC4xODEtLjAwNi4xOTQtLjEyOS4wNTgtLjAwNi4xMDQtLjAyLjEzLS4wNjV6bTIuMTI4LTEuNTMzYy0uMDA4LjAyNy0uMDI1LjA1NC0uMDMzLjA3Mi4wMjUuMDA5LjA1LjAzNS4wNjcuMDI3LjAxNi0uMDEuMDI1LS4wNDUuMDMzLS4wNzJhLjU1LjU1IDAgMDEtLjA2Ny0uMDI3em0tMS44MSAxLjM1Yy0uMDA4LS4wMjQtLjAxNS0uMDU2LS4wMy0uMDU2LS4wMTUtLjAwOC0uMDUyLjAwOC0uMDYuMDI0LS4wMjIuMDMzLS4wMDcuMDc0LjAzLjA3NC4wMjIgMCAuMDM3LS4wMjUuMDYtLjA0MXpNMTUuMzU1IDE5YS4xODUuMTg1IDAgMDEuMDM0LS4wNzJjLS4wMjUtLjAwOS0uMDUtLjAzNS0uMDY3LS4wMjYtLjAxNi4wMDgtLjAyNS4wNDQtLjAzMy4wNy4wMTcuMDEuMDQyLjAxOS4wNjcuMDI4em0tMy41MjYgMi40MDJjLS4wMTYtLjAyNC0uMDMxLS4wNS0uMDQtLjA1Ny0uMDE1IDAtLjA1NS4wMTYtLjA1NS4wMzMtLjAxNi4wNC4wMDguMDc0LjA0OC4wNjUuMDE2IDAgLjAzMS0uMDI0LjA0Ny0uMDR6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNCNkI1QUNcIixcbiAgICBkOiBcIk0yOC4xMjEgMjcuMDg1Yy0uNDI2LS40MTMtLjk0NC0uNjk4LTEuNDI4LTEuMDM0LTIuNjctMS44NjItNS4zNDctMy43MTctOC4wMjMtNS41NzMtLjg5OS0uNjI3LTEuODA0LTEuMjQ3LTIuNzAyLTEuODc0IDAtLjAyLS4wMDctLjA0Ni0uMDA3LS4wNjVsMy45OTUtMi43NzNjMi42OS0xLjg1NiA1LjM3OS0zLjcwNSA4LjA2Mi01LjU2LjA4NC0uMDU4LjE2OC0uMTM2LjI4NC0uMTM2djE3LjA3M2MtLjA1MS0uMDE5LS4xMTYtLjAzOC0uMTgtLjA1OHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0U2RTNENlwiLFxuICAgIGQ6IFwiTTQuMDczIDI3LjE0M2MuMTIzLS4yNTguNDA3LS4zMy42MTQtLjQ4NGE0Ny44NDUgNDcuODQ1IDAgMDEyLjMwOC0xLjYzYzEuMzEyLS44ODUgMi41OTItMS44MjMgMy45MS0yLjY5NS43OTYtLjUyNCAxLjU5OC0xLjA0OCAyLjM0MS0xLjYzNi41ODgtLjQ2NSAxLjI2LS43OTUgMS44MTctMS4zMDYuMi0uMTguNDktLjI5LjcyNC0uNDU5LjExLS4wODQuMjA3LS4wNTEuMzIzLjAzMy41NS4zODggMS4wOTkuNzgyIDEuNjYxIDEuMTUuNjguNDQ2IDEuMzI2Ljk0NCAyLjAxIDEuMzc3LjYwOC4zODggMS4xNy44NTQgMS43NzkgMS4yNDguNjk4LjQ0NiAxLjM3LjkzNyAyLjA0OSAxLjQxLjgxNC41NjggMS42MzUgMS4xMyAyLjQzIDEuNzE5LjQ4NS4zNTUuOTgzLjY4NSAxLjQ3NSAxLjAyOC4wOS4wNjQuMjI2LjEwMy4yMi4yNTItNy44ODgtLjAwNy0xNS43NzQtLjAwNy0yMy42NjEtLjAwN3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0IxMzkyRlwiLFxuICAgIGQ6IFwiTTI4LjMxNSAyNy4xNDNWMTAuMDdjLjI3OC0uMzA0LjY0LS40OTEuOTctLjczLjgxNC0uNTk1IDEuNjM1LTEuMTcgMi40NS0xLjc1Mi4wNTgtLjA0NS4xMTYtLjA5Ny4yLS4wOTcuMDA3LjExLjAxMy4yMTMuMDEzLjMyMyAwIDUuNTAyIDAgMTEuMDEuMDA3IDE2LjUxIDAgLjM3Ni0uMDEzLjc1LS4xMDQgMS4xMjYtLjE2MS42OTEtLjU3NSAxLjE3LTEuMjQ3IDEuNDA5LS43NDQuMjU5LTEuNTEzLjMzLTIuMjg5LjI4NHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0JFQkRCM1wiLFxuICAgIGQ6IFwiTTExLjUxNCAyMS41OWMtLjI1My4yODUtLjU5NS40NTMtLjkuNjY2YTI2NTAuMDc4IDI2NTAuMDc4IDAgMDEtNi45MzYgNC44NDJsLS4xMjkuMDM5YzAtLjA2NS4wMDctLjEyMy4wMDctLjE4OCAyLjQ3LTEuNjg3IDQuOTMyLTMuMzc0IDcuNDAyLTUuMDYxLjE3NC0uMTE3LjMxLS4zMDQuNTUtLjMxbC4wMDYuMDEyelwiXG4gIH0pKSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0dtYWlsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvR29sYW5nID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Hb2xhbmcoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00LjMxNSAxNy4zMDFjLjA0NS45NDYgMSAuNSAxLjQxNi4yMS40MTUtLjI5LjUtLjA0NS41Ni0uNmE5LjA3IDkuMDcgMCAwMC4wNDUtMS4wOSAyLjY3NiAyLjY3NiAwIDAwLTEuNzg2LjQ1NWMtLjI2LjE5LS43NDUuNzktLjI0IDFcIixcbiAgICBmaWxsOiBcIiNGNkQyQTJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQuODA1IDE3Ljk4N2EuNi42IDAgMDEtLjI3LS4wNi42Mi42MiAwIDAxLS4zMS0uNTVBLjQxLjQxIDAgMDE0IDE3LjA1YTEuMTUgMS4xNSAwIDAxLjUtLjgzIDIuNzUyIDIuNzUyIDAgMDExLjg0Ni0uNDdoLjA3NXYuMDc0Yy4wMS4yODYuMDAzLjU3Mi0uMDI1Ljg1NnYuMjVjLS4wMjUuMzktLjEuNDUtLjMuNWExLjExOCAxLjExOCAwIDAwLS4zLjE0NWMtLjI4OC4yMjMtLjYzLjM2NC0uOTkuNDF6bTEuMjcxLTIuMDY3YTIuNTAyIDIuNTAyIDAgMDAtMS40Ny40NSAxIDEgMCAwMC0uNDIuNjcxLjI1LjI1IDAgMDAuMTcuMjA1aC4wNXYuMDU1YS41LjUgMCAwMC4yMS40NSAxLjMxIDEuMzEgMCAwMDEuMDY1LS4zMSAxLjI5IDEuMjkgMCAwMS4zNC0uMTdjLjEzLS4wNDUuMTYtLjA1NS4xOC0uMzY1di0uMjVjLjAyNC0uMjUuMDM0LS41LjAzLS43NWgtLjE1NXYuMDE0elwiLFxuICAgIGZpbGw6IFwiIzAxMDEwMVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNC4zMTUgMTcuM2EuNzQ1Ljc0NSAwIDAwLjM3Ni0uMjF6XCIsXG4gICAgZmlsbDogXCIjQzdCMTk5XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00LjMxNSAxNy4zOTFhLjA5Mi4wOTIgMCAxMS0uMDU1LS4xNzVoLjA2YS41NC41NCAwIDAwLjI3NS0uMTYuMDkyLjA5MiAwIDAxLjA2LS4wMzUuMDkuMDkgMCAwMS4wNjguMDE3LjA5LjA5IDAgMDEuMDM1LjA2LjA5MS4wOTEgMCAwMS0uMDE4LjA2OC43LjcgMCAwMS0uMzYuMjJoLS4wNjV2LjAwNXpcIixcbiAgICBmaWxsOiBcIiMwMTAxMDFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuNDk2IDYuMDVDMi44OCA1LjA0OSA1LjU3MS40MyA4LjQ5OCAyLjMyMkw2LjQ5NiA2LjA1elwiLFxuICAgIGZpbGw6IFwiIzc0Q0RERFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNi41NDEgNi4xNTRoLS4wN2MtMS4wMy0uMjktMS42NjYtLjktMS43ODYtMS43MTZhMi4zOTYgMi4zOTYgMCAwMTEuMTE2LTIuMjYgMi40MjEgMi40MjEgMCAwMTIuNzIyLjA5bC4wNy4wNDRMNi41NCA2LjE1NHptLjUtNC4xOTJjLS40MSAwLS44MTEuMTItMS4xNTUuMzQ1QTIuMjExIDIuMjExIDAgMDA0Ljg1IDQuMzkzYy4xMS43MjYuNjcgMS4yNzYgMS41ODYgMS41NTFsMS45MDEtMy41ODdhMi41MDEgMi41MDEgMCAwMC0xLjI4LS4zOGwtLjAxNS0uMDE1elwiLFxuICAgIGZpbGw6IFwiIzAxMDEwMVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjIuNTY2IDEuOTc3YzIuODYyLTIuMDAxIDUuNDQ4IDIuNTAyIDIuMTIxIDMuNjY3bC0yLjEyMS0zLjY2N3pcIixcbiAgICBmaWxsOiBcIiM3NENERERcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI0LjY0NyA1Ljc1NGwtMi4yMDEtMy44MDIuMDY1LS4wNDVhMi4zNjIgMi4zNjIgMCAwMTIuNjI2LS4yMiAyLjQyNyAyLjQyNyAwIDAxMS4xOTYgMi4yNDFjLS4wNS41LS4zMiAxLjM1Ni0xLjYxNiAxLjgwMWwtLjA3LjAyNXptLTEuOTYxLTMuNzUybDIuMDQxIDMuNTMyYTEuOTU2IDEuOTU2IDAgMDAxLjQyNi0xLjYyIDIuMjQgMi4yNCAwIDAwLTEuMTA2LTIuMDc3IDIuMTI2IDIuMTI2IDAgMDAtMi4zNjEuMTY1elwiLFxuICAgIGZpbGw6IFwiIzAxMDEwMVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjMuMTgxIDI4LjkyOGMuNzI2LjQ1IDIuMDU2IDEuODExLjk2NiAyLjQ3MS0xLjA0Ni45NjEtMS42MzYtMS4wNTUtMi41NTctMS4zM2EyLjU0OSAyLjU0OSAwIDAxMS41OTEtMS4xNDF6XCIsXG4gICAgZmlsbDogXCIjRjZEMkEyXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMy41OTIgMzEuNzQ1aC0uMDRjLS40MTYtLjAyNS0uNzU2LS40My0xLjA4Ni0uODE2YTIuMzMgMi4zMyAwIDAwLS45LS43NzVsLS4xMi0uMDM1LjA3NC0uMTI1YTIuNjU2IDIuNjU2IDAgMDExLjY0Ni0xLjE3NmguMDY1Yy40NjYuMjkgMS40MjYgMS4xMyAxLjQyMSAxLjg5MWEuODM1LjgzNSAwIDAxLS40NS43MjUuOTA1LjkwNSAwIDAxLS42MS4zMXptLTEuODYxLTEuNzIxYy4zMzkuMi42MzMuNDY3Ljg2NS43ODUuMjE5LjM2LjU2LjYyOC45Ni43NTVhLjcxNi43MTYgMCAwMC41LS4yMzUuNjYxLjY2MSAwIDAwLjM3MS0uNThjMC0uNjEtLjc3LTEuMzc2LTEuMzA2LTEuNzIxYTIuMzUxIDIuMzUxIDAgMDAtMS4zODYuOTk2aC0uMDA1elwiLFxuICAgIGZpbGw6IFwiIzAxMDEwMVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjQuMTQ3IDMxLjQ5NGEuMDkuMDkgMCAwMS0uMDgtLjA1Yy0uMDUzLS4xMS0uMS0uMjI0LS4xNC0uMzRhMS41IDEuNSAwIDAwLS4zMy0uNjEuMDkxLjA5MSAwIDAxLS4wMjItLjA5OC4wOS4wOSAwIDAxLjE0Ny0uMDMyYy4xNzIuMTg4LjMuNDE0LjM3LjY2LjAzOS4xMS4wODQuMjE2LjEzNS4zMmEuMDkuMDkgMCAwMS0uMDQuMTJsLS4wNC4wM3pcIixcbiAgICBmaWxsOiBcIiMwMTAxMDFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEwLjE4OSAzMC40NjRjLS44NTYuMTMtMS4zMzYuOS0yLjA0NiAxLjI5YS42Mi42MiAwIDAxLTEuMDAxLS4yMzUuMzI1LjMyNSAwIDAxLS4yNi0uMTJjLS42Mi0xIC42NDUtMS42OTYgMS4zMS0yLjE4Ni45MzYtLjE4IDEuNTExLjYxNSAxLjk5NyAxLjI1elwiLFxuICAgIGZpbGw6IFwiI0Y2RDJBMlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNy42OTIgMzEuOTk1YS42MTMuNjEzIDAgMDEtLjE2IDAgLjc0Ljc0IDAgMDEtLjQzNS0uMzc1LjMwMS4zMDEgMCAwMS0uMjQ1LS4xM2MtLjYtLjk0Ni40Mi0xLjY2MiAxLjA5Ni0yLjEzN2wuMjM1LS4xN2MuOTQ1LS4xOSAxLjU0Ni41OSAyLjAyNiAxLjIybC4xMzUuMTgxaC0uMTVhMi41ODYgMi41ODYgMCAwMC0xLjI2Ni43MjVjLS4yMy4yMTItLjQ4Mi40LS43NS41NmExLjAwMSAxLjAwMSAwIDAxLS40ODYuMTI2em0tLjYtLjU4YS4yNDUuMjQ1IDAgMDEuMTA1IDBoLjAyNWwuMDQuMDhhLjU4LjU4IDAgMDAuMzM1LjMwNS42ODYuNjg2IDAgMDAuNS0uMTJjLjI2LS4xNTUuNTAzLS4zMzcuNzI2LS41NGEzIDMgMCAwMTEuMjA2LS43MzZjLS40Ni0uNi0xLTEuMjUtMS43ODYtMS4xbC0uMjI1LjE2Yy0uNjkuNS0xLjU0NiAxLjA5LTEuMDUxIDEuODg1YS4xNDYuMTQ2IDAgMDAuMTA1LjA3bC4wMi0uMDA1elwiLFxuICAgIGZpbGw6IFwiIzAxMDEwMVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNy4xNTcgMzEuNjE0YS4wOS4wOSAwIDAxLS4wOS0uMTJjLjAzNy0uMjQuMTM3LS40NjYuMjktLjY1NS4wNzItLjEuMTM2LS4yMDUuMTktLjMxNWEuMDkuMDkgMCAxMS4xNjUuMDc1Yy0uMDU4LjEyLS4xMjcuMjM2LS4yMDUuMzQ1LS4xMzIuMTctLjIxNy4zNzItLjI0NS41ODVhLjA5LjA5IDAgMDEtLjA2Ny4wODQuMDkuMDkgMCAwMS0uMDM4LjAwMnpNNi42NDcgNC43OGMtLjUtLjI1LS44MjYtLjU5Ni0uNTM2LTEuMTQ2LjI5LS41NS43Ny0uNDU1IDEuMjUxLS4yMDVsLS43MTUgMS4zNXptMTcuMjg1LS40OGMuNS0uMjUuODI1LS41OTYuNTM1LTEuMTQ2LS4yOS0uNTUtLjc3LS40NTYtMS4yNS0uMjA1bC43MTUgMS4zNXpcIixcbiAgICBmaWxsOiBcIiMwMTAxMDFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI3LjIxOSAxNy4xODFjLS4wNDUuOTQ2LTEuMDAxLjUtMS40MTYuMjEtLjQxNi0uMjktLjUtLjA0NS0uNTYtLjZhOS4wNjggOS4wNjggMCAwMS0uMDQ2LTEuMDkgMi42NzcgMi42NzcgMCAwMTEuNzg3LjQ1NGMuMjYuMTkuNzQ1Ljc5LjI0IDEuMDAxXCIsXG4gICAgZmlsbDogXCIjRjZEMkEyXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yNi43MjggMTcuODQ2YTIuMDQ2IDIuMDQ2IDAgMDEtLjk1NS0uMzYgMS4xMTcgMS4xMTcgMCAwMC0uMy0uMTQ1Yy0uMi0uMDctLjI3NS0uMTMtLjMtLjV2LS4yNWE2LjUxNiA2LjUxNiAwIDAxLS4wMjYtLjg1NnYtLjEyaC4wNzZhMi43NTEgMi43NTEgMCAwMTEuODQ2LjQ3IDEuMTUgMS4xNSAwIDAxLjUuODMuNDEyLjQxMiAwIDAxLS4yMjUuMzI2LjYyLjYyIDAgMDEtLjMxLjU1LjYwNS42MDUgMCAwMS0uMzA2LjA1NXptLTEuNDU2LTIuMDZjLS4wMDMuMjUuMDA3LjUuMDMuNzV2LjI1YzAgLjMwNS4wNDYuMzE1LjE4LjM2NS4xMjIuMDQuMjM2LjA5Ny4zNC4xN2ExLjMwNyAxLjMwNyAwIDAwMS4wNjcuMzEuNTAyLjUwMiAwIDAwLjIxLS40NXYtLjA2aC4wNWEuMjUuMjUgMCAwMC4xNy0uMjA1IDEuMDAyIDEuMDAyIDAgMDAtLjQyLS42NyAyLjU1MiAyLjU1MiAwIDAwLTEuNjI3LS40NnpcIixcbiAgICBmaWxsOiBcIiMwMTAxMDFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI3LjIxOCAxNy4xODFhLjc0Ni43NDYgMCAwMS0uMzc1LS4xOTV6XCIsXG4gICAgZmlsbDogXCIjQzdCMTk5XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yNy4yMTkgMTcuMjcxaC0uMDk1YS43LjcgMCAwMS0uMzUtLjI1LjA5LjA5IDAgMDEtLjAwNy0uMTAxLjA5MS4wOTEgMCAwMS4xNTItLjAxLjU0LjU0IDAgMDAuMjc1LjE2aC4wNmEuMTAxLjEwMSAwIDExLS4wMzUuMjAxelwiLFxuICAgIGZpbGw6IFwiIzAxMDEwMVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTUuNDA3LjA2NmMzLjYyMiAwIDcuMDA0LjUgOC43ODUgNC4wMDIgMS41ODYgMy44OTggMSA4LjEwNSAxLjI2NiAxMi4yMjMuMjEgMy41MzcuNjcgNy42MjQtLjk3IDEwLjkwNi0xLjcxNyAzLjQ0Mi02LjA1IDQuMjk3LTkuNjAxIDQuMTgyLTIuNzkyLS4xLTYuMTY0LTEtNy43NC0zLjU2Mi0xLjg1MS0zLjAwMi0uOTc2LTcuNDQ0LS44NC0xMC43NzEuMTYtMy45NDItMS4wNzEtNy45LjIyNS0xMS43NjJDNy44NzcgMS4yODIgMTEuNS4zNzYgMTUuNDAyLjA2NlwiLFxuICAgIGZpbGw6IFwiIzc0Q0RERFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTUuNTAyIDMxLjQ5NGgtLjYyYTEzLjIwMiAxMy4yMDIgMCAwMS00LjM1OC0uODcgNi45NjkgNi45NjkgMCAwMS0zLjQ1Ny0yLjczN2MtMS41MDEtMi40MjEtMS4yMy01Ljc2My0xLTguNzE1LjA2LS43NC4xMTQtMS40NDYuMTQtMi4xMDYuMDI2LTEuNC0uMDM0LTIuOC0uMTgtNC4xOTItLjIxMS0yLjUwMi0uNDMxLTUuMDg5LjQxLTcuNTk1YTYuNjQ0IDYuNjQ0IDAgMDEzLjUwMS00LjA0N0MxMS4yOS41NzIgMTIuOTQuMTkgMTUuMzY3IDBjMy41NzItLjAyNSA3LjA5NC40NzUgOC45MDUgNC4wMjIgMS4xNiAyLjg1MiAxLjE3NiA1LjkxNCAxLjE5NiA4Ljg3NiAwIDEuMTEgMCAyLjI1Ni4wOCAzLjM3NyAwIC4zNC4wNC42ODUuMDY1IDEuMDMuMjEgMy4yNDcuNDUgNi45MzQtMS4wNDYgOS45MTYtMS44NzEgMy43MzItNi41NzQgNC4yNzItOS4wNjUgNC4yNzJ6TTE1LjQwNy4xNTZjLTMuNzY4LjMyLTcuNDQgMS4xMy04Ljc5IDUuMTU4LS44MzEgMi40NzEtLjYxIDUuMDM4LS40MDYgNy41MDQuMTQ3IDEuNC4yMDcgMi44MDYuMTggNC4yMTMtLjAyNS42NjUtLjA4NSAxLjM3LS4xNCAyLjExNi0uMjMgMi45MjItLjUgNi4yMzkuOTY2IDguNjA1LjYxNSAxIDIuNTk2IDMuMzM3IDcuNjcgMy41MDIgMi4xOTYuMDggNy41MDQtLjE3IDkuNTA1LTQuMTQyIDEuNDctMi45NDIgMS4yMzYtNi41OTkgMS4wMjYtOS44MjYgMC0uMzUtLjA0NS0uNjk1LS4wNjUtMS4wM2E2Ny40NTEgNjcuNDUxIDAgMDEtLjA4LTMuMzUzYzAtMi45NDEtLjAzLTYuMDAzLTEuMTgxLTguODA1QTYuNDM4IDYuNDM4IDAgMDAyMC40NDUuODQxYTE0Ljk2IDE0Ljk2IDAgMDAtNS4wMzgtLjY4NXpcIixcbiAgICBmaWxsOiBcIiMwMTAxMDFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2LjA0MiA0LjkyNGMuNjUgMy43NzcgNi44MjQgMi43ODEgNS45MzgtMS4wMy0uNzk1LTMuNDE4LTYuMTUzLTIuNDcyLTUuOTM4IDEuMDN6XCIsXG4gICAgZmlsbDogXCIjZmZmXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xOC45NzkgNy4zOWEzLjQ1NyAzLjQ1NyAwIDAxLTEuMTMtLjE4NSAyLjc5NyAyLjc5NyAwIDAxLTEuODkyLTIuMjY2IDIuODgyIDIuODgyIDAgMDEuNzgtMi4yMjIgMy40MDcgMy40MDcgMCAwMTIuMDAyLTEgMy4yMDIgMy4yMDIgMCAwMTIuMDMxLjM1IDIuNzI3IDIuNzI3IDAgMDExLjI5NiAxLjgwNiAyLjY0MyAyLjY0MyAwIDAxLS43NyAyLjY4MiAzLjUwMiAzLjUwMiAwIDAxLTIuMzE3LjgzNXptLTIuODQ3LTIuNDc2YTIuNjI2IDIuNjI2IDAgMDAxLjc3NiAyLjEyNiAzLjQxNyAzLjQxNyAwIDAwMy4yNzctLjYyIDIuNTAyIDIuNTAyIDAgMDAuNzE2LTIuNTAyIDIuNjcyIDIuNjcyIDAgMDAtMy4xMzItMi4wMzEgMi44ODcgMi44ODcgMCAwMC0yLjYzNyAzLjAyN3pcIixcbiAgICBmaWxsOiBcIiMwMTAxMDFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguNjYzIDUuNTM5Yy44NCAzLjI4NyA2LjEwMyAyLjQ0MSA1LjkwOC0uODU1LS4yMzUtMy45NTMtNi43MTQtMy4yMDctNS45MDguODU1elwiLFxuICAgIGZpbGw6IFwiI2ZmZlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTEuNDc0IDcuNzA1YTMuMjMyIDMuMjMyIDAgMDEtMS41MzYtLjM3NSAyLjcyNyAyLjcyNyAwIDAxLTEuMzU1LTEuNzc2IDIuNzU3IDIuNzU3IDAgMDEuOTQtMi44MjcgMy41NTIgMy41NTIgMCAwMTMuNTMyLS40NSAyLjY3MiAyLjY3MiAwIDAxMS42MDEgMi40MDJjLjEwNSAxLjc1LTEuMjg2IDIuNzcxLTIuNjE3IDMuMDAxYTMuNjU3IDMuNjU3IDAgMDEtLjU2NS4wMjV6TTguNzYzIDUuNTJBMi43MzIgMi43MzIgMCAwMDEyLjAzIDcuNTJjMS4yNi0uMiAyLjU3Ni0xLjE2IDIuNDc2LTIuODA2YTIuNTAxIDIuNTAxIDAgMDAtMS41LTIuMjYyIDMuMzc3IDMuMzc3IDAgMDAtMy4zNTguNDMgMi41OTcgMi41OTcgMCAwMC0uODg1IDIuNjM3elwiLFxuICAgIGZpbGw6IFwiIzAxMDEwMVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYuNzY3IDkuNDgxYy4wNDkuNTIxLjA0OSAxLjA0NiAwIDEuNTY2YTEgMSAwIDAxLS41ODUuMzYuODYxLjg2MSAwIDAxLS42NTUtLjVjLS4wMzItLjU5LS4wMTctMS4xODMuMDQ1LTEuNzdsMS4xOTUuMzQ0elwiLFxuICAgIGZpbGw6IFwiI2ZmZlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYuMjM3IDExLjQ4M2gtLjAyNWEuOTQ0Ljk0NCAwIDAxLS43MjUtLjU2NiA1Ljk1IDUuOTUgMCAwMTAtMS4yMTVjMC0uMTg1LjAzLS4zOC4wMzUtLjU3di0uMTVsMS4zNS40MTR2LjA4NWMwIC4xNiAwIC4zMy4wMjYuNS4wNDUuMzU4LjA0NS43MiAwIDEuMDc2di4wMjVhLjc1Ljc1IDAgMDEtLjQ3Ni4zNGwtLjE1NS4wNmgtLjAzem0tLjU4LS42M2EuNzY2Ljc2NiAwIDAwLjU2LjQ0NWwuMTQtLjA1NmEuNi42IDAgMDAuMzY2LS4yNmMuMDQtLjMzMi4wNC0uNjY4IDAtMSAwLS4xNTUgMC0uMzA1LS4wMjYtLjQ1NWwtMS0uMzA2YzAgLjE1NSAwIC4zMS0uMDMuNDYtLjA0NC4zODgtLjA1Ljc3OC0uMDE1IDEuMTY2bC4wMDUuMDA1ek0xMC4xMTQgNS45NjRjLjQ5MSAwIC44OS0uNDMyLjg5LS45NjUgMC0uNTM0LS4zOTktLjk2Ni0uODktLjk2Ni0uNDkyIDAtLjg5LjQzMi0uODkuOTY2IDAgLjUzMy4zOTguOTY1Ljg5Ljk2NXpcIixcbiAgICBmaWxsOiBcIiMwMTAxMDFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEwLjUxOSA1LjQ2NGMuMTE2IDAgLjIxLS4xMS4yMS0uMjQ1cy0uMDk0LS4yNDUtLjIxLS4yNDVjLS4xMTYgMC0uMjEuMTEtLjIxLjI0NXMuMDk0LjI0NS4yMS4yNDV6XCIsXG4gICAgZmlsbDogXCIjZmZmXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNy41NjggNS43MjRjLjQ4MyAwIC44NzUtLjQzMi44NzUtLjk2NSAwLS41MzMtLjM5Mi0uOTY2LS44NzUtLjk2Ni0uNDg0IDAtLjg3Ni40MzMtLjg3Ni45NjYgMCAuNTMzLjM5Mi45NjUuODc2Ljk2NXpcIixcbiAgICBmaWxsOiBcIiMwMTAxMDFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE3Ljk2MyA1LjIyNGMuMTE0IDAgLjIwNi0uMTEuMjA2LS4yNDUgMC0uMTM2LS4wOTItLjI0NS0uMjA2LS4yNDUtLjExMyAwLS4yMDUuMTEtLjIwNS4yNDVzLjA5Mi4yNDUuMjA1LjI0NXpNMTQuMjY2IDkuNDA2Yy0uMzkuOTQxLjIxNSAyLjgyMiAxLjI3IDEuNDM2YTExLjEyIDExLjEyIDAgMDEuMDQ2LTEuNzdsLTEuMzE2LjMzNHpcIixcbiAgICBmaWxsOiBcIiNmZmZcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE0LjgxMiAxMS40MjhhLjUuNSAwIDAxLS4yNi0uMDdjLS40MjYtLjI0Ni0uNjkxLTEuMjUxLS4zOS0yLjAwMnYtLjA0bDEuNS0uMzh2LjEyYzAgLjE5NSAwIC4zOS0uMDM1LjU3NWE1LjcxIDUuNzEgMCAwMDAgMS4xODF2LjA2NWExLjA1NiAxLjA1NiAwIDAxLS44MTUuNTV6bS0uNDk2LTEuOTQ3Yy0uMjE1LjU4Ni0uMDQ1IDEuNTAxLjMzIDEuNzE2LjI3LjE1NS41Ny0uMTE1Ljc4LS4zODVhNi4xMjggNi4xMjggMCAwMTAtMS4xOGMwLS4xNDYgMC0uMy4wMzEtLjQ1bC0xLjE0LjN6XCIsXG4gICAgZmlsbDogXCIjMDEwMTAxXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNC4zOCA3LjU5NWExLjE0NiAxLjE0NiAwIDAwLS45NCAxLjYwMWMuNS45IDEuNjExLS4wOCAyLjMwMiAwIC43OTUgMCAxLjQ1Ljg0IDIuMDkuMTUuNzExLS43Ny0uMzA0LTEuNS0xLjEtMS44NTZsLTIuMzUxLjEwNXpcIixcbiAgICBmaWxsOiBcIiNGNkQyQTJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE3LjI2OCA5LjcyN2EyIDIgMCAwMS0uNzMtLjIwNiAyLjIwNyAyLjIwNyAwIDAwLS43OTEtLjIyYy0uMjg3IDAtLjU3LjA2Mi0uODMuMTgtLjU2MS4xOTUtMS4xOTYuNDE2LTEuNTU3LS4yM2ExLjA4IDEuMDggMCAwMTAtMS4wNSAxLjI4MSAxLjI4MSAwIDAxMS4wMDEtLjY4NmwyLjQwNi0uMTA1Yy41OS4yNSAxLjI2Ni43MDYgMS4zODEgMS4yMzZhLjk1NS45NTUgMCAwMS0uODggMS4wOHptLTEuNTAxLS42MDZjLjI5Ni4wMjQuNTg0LjEwNC44NS4yMzUuNDUuMTkuODA2LjMzNSAxLjE2Ni0uMDU1YS42NjQuNjY0IDAgMDAuMjA1LS42MDVjLS4xLS40Ni0uNzM1LS44OC0xLjI1Ni0xLjFsLTIuMzI2LjA5NGExLjExIDEuMTEgMCAwMC0uODUuNTkuOTA2LjkwNiAwIDAwMCAuODc2Yy4yODUuNS43OTUuMzM1IDEuMzQuMTUuMjc0LS4xMjIuNTctLjE4NS44Ny0uMTg1elwiLFxuICAgIGZpbGw6IFwiIzIzMUYyMFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTQuMjY2IDcuNTZjLS4wNTUtMS4yNSAyLjMzNi0xLjQxIDIuNjE3LS4zNi4yOCAxLjA1LTIuNTAyIDEuMjktMi42MTcuMzZ6XCIsXG4gICAgZmlsbDogXCIjMDEwMTAxXCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29Hb2xhbmc7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBodG1sSWRHZW5lcmF0b3IgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29Hb29nbGVHID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Hb29nbGVHKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBnZW5lcmF0ZUlkID0gaHRtbElkR2VuZXJhdG9yKCdsb2dvX2dvb2dsZV9nJyk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHhtbG5zWGxpbms6IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZGVmc1wiLCBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2EnKSxcbiAgICBkOiBcIk0xNS4zMTkgMy4yNzhjMC0xLjEzMS0uMTAyLTIuMjItLjI5LTMuMjY0SDB2Ni4xNzJoOC41ODdjLS4zNyAxLjk5NS0xLjQ5NCAzLjY4NS0zLjE4NCA0LjgxNnY0LjAwNGg1LjE1N2MzLjAxNy0yLjc3OCA0Ljc1OC02Ljg2OSA0Ljc1OC0xMS43Mjh6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnYycpLFxuICAgIGQ6IFwiTTE0LjM0MyAxMi45NTZjNC4zMDggMCA3LjkyLTEuNDMgMTAuNTYtMy44NjZsLTUuMTU3LTQuMDA0Yy0xLjQyOS45NTgtMy4yNTYgMS41MjMtNS40MDMgMS41MjMtNC4xNTYgMC03LjY3NC0yLjgwNi04LjkyOC02LjU3OEguMDg0djQuMTM0YzIuNjI1IDUuMjE1IDguMDIxIDguNzkgMTQuMjU5IDguNzl6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnZScpLFxuICAgIGQ6IFwiTTcuMDI4IDEwLjI1YTkuNTkgOS41OSAwIDAxLS41LTMuMDMyIDkuNTkgOS41OSAwIDAxLjUtMy4wMzJWLjA1MmgtNS4zM0ExNS45NSAxNS45NSAwIDAwMCA3LjIxOGMwIDIuNTc1LjYxNyA1LjAxMiAxLjY5NyA3LjE2Nmw1LjMzMS00LjEzNHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdnJyksXG4gICAgZDogXCJNMTQuMzQzIDYuMzkyYzIuMzQyIDAgNC40NDYuODA1IDYuMSAyLjM4Nmw0LjU3Ni00LjU3NkMyMi4yNTYgMS42MjcgMTguNjQ0LjA0NiAxNC4zNDMuMDQ2IDguMTA1LjA0NiAyLjcwOSAzLjYyMi4wODMgOC44MzZsNS4zMzIgNC4xMzRjMS4yNTQtMy43NyA0Ljc3Mi02LjU3OCA4LjkyOC02LjU3OHpcIlxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoMTUuOTU1IDEzLjA4NylcIlxuICB9LCBfX19FbW90aW9uSlNYKFwibWFza1wiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2InKSxcbiAgICBmaWxsOiBcIiNmZmZcIlxuICB9LCBfX19FbW90aW9uSlNYKFwidXNlXCIsIHtcbiAgICB4bGlua0hyZWY6IFwiI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdhJykpXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzQyODVGNFwiLFxuICAgIGZpbGxSdWxlOiBcIm5vbnplcm9cIixcbiAgICBtYXNrOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2InKSwgXCIpXCIpLFxuICAgIGQ6IFwiTS4wMDEgMTUuMDA2aDE1LjMxOFYuMDE0SC4wMDF6XCJcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgxLjYxMyAxOS4wMDMpXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcIm1hc2tcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdkJyksXG4gICAgZmlsbDogXCIjZmZmXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInVzZVwiLCB7XG4gICAgeGxpbmtIcmVmOiBcIiNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnYycpKVxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMzNEE4NTNcIixcbiAgICBmaWxsUnVsZTogXCJub256ZXJvXCIsXG4gICAgbWFzazogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdkJyksIFwiKVwiKSxcbiAgICBkOiBcIk0uMDg0IDEyLjk1NmgyNC44MTlWLjAzMUguMDg0elwiXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoMCA4Ljc4NClcIlxuICB9LCBfX19FbW90aW9uSlNYKFwibWFza1wiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2YnKSxcbiAgICBmaWxsOiBcIiNmZmZcIlxuICB9LCBfX19FbW90aW9uSlNYKFwidXNlXCIsIHtcbiAgICB4bGlua0hyZWY6IFwiI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdlJykpXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZCQkMwNFwiLFxuICAgIGZpbGxSdWxlOiBcIm5vbnplcm9cIixcbiAgICBtYXNrOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2YnKSwgXCIpXCIpLFxuICAgIGQ6IFwiTTAgMTQuMzg0aDcuMDI4Vi4wNTJIMHpcIlxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDEuNjEzKVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJtYXNrXCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnaCcpLFxuICAgIGZpbGw6IFwiI2ZmZlwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJ1c2VcIiwge1xuICAgIHhsaW5rSHJlZjogXCIjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2cnKSlcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRUE0MzM1XCIsXG4gICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiLFxuICAgIG1hc2s6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnaCcpLCBcIilcIiksXG4gICAgZDogXCJNLjA4NCAxMi45N2gyNC45MzVWLjA0NkguMDg0elwiXG4gIH0pKSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29Hb29nbGVHOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaHRtbElkR2VuZXJhdG9yIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvSGFwcm94eSA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvSGFwcm94eShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgZ2VuZXJhdGVJZCA9IGh0bWxJZEdlbmVyYXRvcignbG9nb19oYXByb3h5Jyk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgY2xpcFBhdGg6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnY2xpcDAnKSwgXCIpXCIpXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNi4wNSAxMy4yMzdsLTMuMTEtMy42MTJcIixcbiAgICBzdHJva2U6IFwiIzA1NDg2RFwiLFxuICAgIHN0cm9rZVdpZHRoOiAwLjEyLFxuICAgIHN0cm9rZU1pdGVybGltaXQ6IDEwXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNi4xMTcgMTAuNTI4bDIuNTA5IDMuNTEyXCIsXG4gICAgc3Ryb2tlOiBcIiMwNTQ4NkRcIixcbiAgICBzdHJva2VXaWR0aDogMC4wNixcbiAgICBzdHJva2VNaXRlcmxpbWl0OiAxMFxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2LjA1IDEzLjIzN2wzLjExLTMuNjEyTTE5Ljg2MyAxNy4xNWwzLjcxMi0zLjExTTE5Ljg2MyAxNy4xNWwzLjcxMiAzLjMxMU0xOS4xNiAyNC41NzVsLTMuMTEtMy41MTFNMTIuOTQgMjQuNTc1bDMuMTEtMy41MTFNOC42MjUgMjAuMjZsMy41MTItMy4xMU04LjYyNSAxNC4wNGwzLjUxMiAzLjExTTE2LjA1IDEzLjIzOGwtNy40MjUuODAyTTE2LjA1IDEzLjIzOGw3LjUyNS44MDJNMTkuODYzIDE3LjE1bC0uNzAyLTcuNTI1TTE5Ljg2MyAxNy4xNWwtLjcwMiA3LjQyNU0yMy41NzUgMjAuNDYxbC03LjUyNS42MDJNOC42MjUgMjAuMjYxbDcuNDI1LjgwM00xMi45NCAyNC41NzVsLS44MDMtNy40MjVNMTIuOTQgOS42MjVsLS44MDMgNy41MjVcIixcbiAgICBzdHJva2U6IFwiIzA1NDg2RFwiLFxuICAgIHN0cm9rZVdpZHRoOiAwLjEyLFxuICAgIHN0cm9rZU1pdGVybGltaXQ6IDEwXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNS4xMTQgMTUuMDQzbDMuNTExLTEuMDAzTTkuMzI4IDcuMTE3bDMuNjEyIDIuNTA5TTEzLjc0MyA1LjUxMmwtLjgwMyA0LjExM00xMy43NDMgNS41MTJsNS40MTggNC4xMTNNMTguMzU4IDUuNTEybC44MDMgNC4xMTNNMjIuNzczIDcuMTE3TDE5LjE2IDkuNjI2TTI1Ljk4MyAxMC41MjhsLTYuODIyLS45MDNNMjMuNTc1IDE0LjA0bDIuNDA4LTMuNTEyTTIzLjU3NSAxNC4wNGwzLjQxMiAxLjAwM00yMy41NzUgMTQuMDRsMy40MTIgNS4yMTdNMTguMzU4IDUuNTEyTDEyLjk0IDkuNjI1TTIzLjU3NiAxNC4wNGwtLjgwMy02LjkyM00yMy41NzUgMjAuNDYybDMuNDEyLTEuMjA0TTIzLjU3NSAyMC40NjJsMy40MTItNS40MThNMjMuNTc1IDIwLjQ2MWwyLjQwOCAzLjMxMk0yMy41NzYgMjAuNDYxbC0uODAzIDYuNzIzTTE5LjE2IDI0LjU3NWwzLjYxMyAyLjYwOU0xOS4xNiAyNC41NzVsNi44MjMtLjgwMk0xOS4xNiAyNC41NzVsLS44MDIgNC4yMTRNMTkuMTYgMjQuNTc1bC01LjQxNyA0LjIxNE0xMi45NCAyNC41NzVsLjgwMyA0LjIxNE0xMi45NCAyNC41NzVsNS40MTggNC4yMTRNMTIuOTQgMjQuNTc1bC0zLjYxMiAyLjYwOU0xMi45NCAyNC41NzVsLTYuODIzLS44MDJNOC42MjYgMjAuMjYxbC0yLjUwOSAzLjUxMk04LjYyNSAyMC4yNjFsLjcwMyA2LjkyM004LjYyNSAyMC4yNmwtMy41MTEtMS4wMDJNOC42MjUgMTQuMDRsLTMuNTExIDUuMjE3TTguNjI1IDIwLjI2bC0zLjUxMS01LjIxN005LjMyOCA3LjExN2wtLjcwMyA2LjkyM002LjExNyAxMC41MjhsNi44MjMtLjkwM1wiLFxuICAgIHN0cm9rZTogXCIjMDU0ODZEXCIsXG4gICAgc3Ryb2tlV2lkdGg6IDAuMDYsXG4gICAgc3Ryb2tlTWl0ZXJsaW1pdDogMTBcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05LjMyNyA3LjExN0w2LjcyIDUuODEzTTkuMzI4IDcuMTE3bC0uMjAxLTIuOTFNMTMuNzQyIDUuNTEyTDkuMTI3IDQuMjA3TTEzLjc0MiA1LjUxMmwtMi4wMDYtMi41MDlNMTMuNzQzIDUuNTEybC44MDItMi45MU05LjMyOCA3LjExN2wyLjQwOC00LjExNE0xOC4zNTggNS41MTJsLTMuODEzLTIuOTFNMTguMzU4IDUuNTEybC0uODAzLTMuMDFNMTMuNzQzIDUuNTEybDMuODEyLTMuMDFNMTguMzU4IDUuNTEybDIuMDA3LTIuNTA5TTIyLjc3MyA3LjExN2wtMi40MDgtNC4xMTRNMjIuNzczIDcuMTE3bC4zMDEtMi45MU0xOC4zNTggNS41MTJsNC43MTYtMS4zMDVNMjIuNzczIDcuMTE3bDIuNzA5LTEuNDA1TTIyLjc3MyA3LjExN2w0LjcxNi43MDNNMjUuOTgzIDEwLjUyOGwxLjUwNS0yLjcwOU0yNS45ODQgMTAuNTI4bC0uNTAyLTQuODE2TTI1Ljk4MyAxMC41MjhsMy4xMS0uM00yNS45ODMgMTAuNTI4bDQuMjE0IDIuMzA4TTI2Ljk4NyAxNS4wNDRsMi4xMDctNC44MTdNMjYuOTg3IDE1LjA0M2wzLjIxLTIuMjA3TTI2Ljk4NyAxNS4wNDNsMy42MTIuNzAzTTI2Ljk4NyAxOS4yNThsMy42MTItMy41MTJNMjYuOTg3IDE5LjI1OGwzLjcxMi0uNzAzTTI2Ljk4NyAxNS4wNDNsMy43MTIgMy41MTJNMjYuOTg3IDE5LjI1OGwzLjExIDIuMTA3TTI1Ljk4MyAyMy43NzNsNC4xMTQtMi40MDlNMjUuOTgzIDIzLjc3M2wzLjExLjNNMjYuOTg3IDE5LjI1OGwyLjEwNyA0LjgxNk0yNS45ODMgMjMuNzczbDEuNTA1IDIuNzA5TTI1Ljk4NCAyMy43NzNsLS41MDIgNC43MTVNMjUuNDgyIDI4LjQ4OGwtMi43MS0xLjMwNE0yMi43NzMgMjcuMTg0bC4yIDIuOTFNMjIuNzczIDI3LjE4NGw0LjcxNi0uNzAzTTIyLjc3MyAyNy4xODRsLTIuNDA4IDQuMTE0TTE4LjM1OCAyOC43OWwyLjAwNyAyLjUwOE0xOC4zNTggMjguNzlsNC42MTUgMS4zMDRNMTguMzU4IDI4Ljc5bC0uODAzIDMuMDFNMTguMzU4IDI4Ljc5bC0zLjgxMyAzLjAxTTEzLjc0MyAyOC43OWwuODAyIDMuMDFNMTMuNzQzIDI4Ljc5bDMuODEyIDMuMDFNMTMuNzQyIDI4Ljc5bC0yLjAwNiAyLjUwOE05LjMyOCAyNy4xODRsMi40MDggNC4xMTRNMTMuNzQyIDI4Ljc5bC00LjYxNSAxLjQwNE05LjMyOCAyNy4xODRsLS4yMDEgMy4wMU05LjMyOCAyNy4xODRsLTIuNzEgMS40MDRNNi4xMTcgMjMuNzczbC41MDIgNC44MTZNOS4zMjggMjcuMTg0bC00LjcxNi0uNzAzTTYuMTE3IDIzLjc3M2wtMS41MDUgMi43MDlNNi4xMTcgMjMuNzczbC0zLjExLjNNNi4xMTcgMjMuNzczbC00LjIxNC0yLjQwOU01LjExNCAxOS4yNThsLTMuMjEgMi4xMDdNNS4xMTQgMTkuMjU4TDEuNCAxOC41NTVNNS4xMTQgMTkuMjU4bC0yLjEwNyA0LjgxNk01LjExNCAxNS4wNDNMMS40IDE4LjU1NU01LjExNCAxOS4yNThMMS40IDE1Ljc0Nk01LjExNCAxNS4wNDNsLTMuMTEtMi4xMDZNNS4xMTQgMTUuMDQzbC0zLjcxMy43MDNNNS4xMTQgMTUuMDQ0bC0yLjAwNy00LjgxN002LjExNyAxMC41MjhsLTMuMDEtLjNNNi4xMTcgMTAuNTI4bC00LjExNCAyLjQwOE02LjExNyAxMC41MjhMNC43MTIgNy45Mk02LjExNyAxMC41MjhsLjYwMi00LjcxNU05LjMyOCA3LjExN2wtNC42MTYuODAzXCIsXG4gICAgc3Ryb2tlOiBcIiMwODNENUZcIixcbiAgICBzdHJva2VXaWR0aDogMC4wNSxcbiAgICBzdHJva2VNaXRlcmxpbWl0OiAxMFxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEzLjk0MyAxNS4yNDRoLTMuNjEydjMuNTkyaDMuNjEydi0zLjU5MnpNMTcuNzU2IDExLjMzMWgtMy42MTJ2My41OTJoMy42MTJ2LTMuNTkyek0xNy43NTYgMTkuMTU3aC0zLjYxMnYzLjU5MmgzLjYxMnYtMy41OTJ6TTIxLjY2OSAxNS4yNDRoLTMuNjEydjMuNTkyaDMuNjEydi0zLjU5MnpcIixcbiAgICBmaWxsOiBcIiMwMDZEQThcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIwLjM2NSA4LjQyMWgtMi41MDlWMTAuOWgyLjUwOVY4LjQyek0xNC4xNDQgOC4zMjFoLTIuNTA5djIuNDc4aDIuNTA5VjguMzIxek05LjgzIDEyLjgzNkg3LjMydjIuNDc4SDkuODN2LTIuNDc4ek05LjgzIDE4Ljk1Nkg3LjMydjIuNDc5SDkuODN2LTIuNDc5ek0yNC42NzkgMTguOTU2SDIyLjE3djIuNDc5aDIuNTA5di0yLjQ3OXpNMjQuNjc5IDEyLjczNkgyMi4xN3YyLjQ3OGgyLjUwOXYtMi40Nzh6XCIsXG4gICAgZmlsbDogXCIjMkY3N0JDXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02LjkyIDkuNjI1SDUuMzE0djEuNjc2SDYuOTJWOS42MjV6TTEwLjEzIDYuMjE0SDguNTI2djEuNjc1aDEuNjA2VjYuMjE0ek0xNC40NDUgNC42MDloLTEuNjA2djEuNjc1aDEuNjA2VjQuNjF6TTUuOTE2IDE0LjE0SDQuMzExdjEuNjc2aDEuNjA1VjE0LjE0ek0yNi43ODYgOS44MjZIMjUuMDh2MS42NDZoMS43MDZWOS44MjZ6TTIzLjU3NSA2LjQxNUgyMS44N1Y4LjA2aDEuNzA1VjYuNDE1ek0xOS4yNiA0LjgxaC0xLjcwNXYxLjY0NWgxLjcwNlY0LjgwOXpNMjcuNjg5IDE0LjQ0MWgtMS42MDV2MS42NDZoMS42MDVWMTQuNDR6XCIsXG4gICAgZmlsbDogXCIjMTM5QkQ3XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNC4xNDQgMjMuMjdoLTIuNTA5djIuNDc5aDIuNTA5di0yLjQ3OHpNMjAuMjY0IDIzLjI3aC0yLjUwOHYyLjQ3OWgyLjUwOHYtMi40Nzh6XCIsXG4gICAgZmlsbDogXCIjMkY3N0JDXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yNi42ODUgMjIuNzdIMjUuMDh2MS42NzVoMS42MDV2LTEuNjc2ek0yMy4zNzUgMjYuMDhIMjEuNzd2MS42NzZoMS42MDVWMjYuMDh6TTE5LjA2IDI3LjY4NmgtMS42MDV2MS42NzVoMS42MDV2LTEuNjc1ek0yNy41ODkgMTguMjU0aC0xLjYwNnYxLjY3NmgxLjYwNnYtMS42NzZ6TTYuOTIgMjIuOTdINS4yMTR2MS42NDZINi45MlYyMi45N3pNMTAuMDMgMjYuMzgxSDguMzI1djEuNjQ2aDEuNzA1VjI2LjM4ek0xNC40NDUgMjcuOTg3aC0xLjcwNnYxLjY0NWgxLjcwNnYtMS42NDV6TTUuODE2IDE4LjM1NUg0LjIxVjIwaDEuNjA2di0xLjY0NXpcIixcbiAgICBmaWxsOiBcIiMxMzlCRDdcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuMTIgNS4zMTFoLS45MDN2LjkzM2guOTAzdi0uOTMzek0xLjkwMyAxNS4yNDRIMXYuOTMzaC45MDN2LS45MzN6TTI1Ljc4MiA1LjIxaC0uOTAzdi45MzRoLjkwM1Y1LjIxek0yLjUwNSAxMi4zMzVoLS45MDN2LjkzM2guOTAzdi0uOTM0ek0xMi4xMzcgMi41MDJoLS45MDN2LjkzM2guOTAzdi0uOTMzek0zLjUwOCA5LjcyNmgtLjkwM3YuOTMzaC45MDN2LS45MzN6TTUuMTEzIDcuMzE4SDQuMjF2LjkzM2guOTAzdi0uOTMzek05LjYyOSAzLjgwNmgtLjkwM3YuOTAzaC45MDN2LS45MDN6TTE1LjA0NyAyLjFoLS45MDN2LjkwM2guOTAzVjIuMXpNMjMuMzc0IDMuNjA1aC0uOTAzdi45MzNoLjkwM3YtLjkzM3pNMjkuMjk1IDkuNzI2aC0uOTAzdi45MzNoLjkwM3YtLjkzM3pNMzAuNDk4IDEyLjMzNWgtLjkwM3YuOTMzaC45MDN2LS45MzR6TTI3LjY5IDcuMzE4aC0uOTA0di45MzNoLjkwM3YtLjkzM3pNMzAuOSAxNS4xNDRoLS45MDN2LjkzM2guOTAzdi0uOTMzek0xNy44NTYgMmgtLjkwM3YuOTMzaC45MDNWMnpNMjAuNjY1IDIuNjAyaC0uOTAzdi45MzNoLjkwM3YtLjkzM3pcIixcbiAgICBmaWxsOiBcIiMwM0E5REFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuMTIgNS4zMTFoLS45MDN2LjkzM2guOTAzdi0uOTMzek0xLjkwMyAxNS4yNDRIMXYuOTMzaC45MDN2LS45MzN6TTI1Ljc4MiA1LjIxaC0uOTAzdi45MzRoLjkwM1Y1LjIxek0yLjUwNSAxMi4zMzVoLS45MDN2LjkzM2guOTAzdi0uOTM0ek0xMi4xMzcgMi41MDJoLS45MDN2LjkzM2guOTAzdi0uOTMzek0zLjUwOCA5LjcyNmgtLjkwM3YuOTMzaC45MDN2LS45MzN6TTUuMTEzIDcuMzE4SDQuMjF2LjkzM2guOTAzdi0uOTMzek05LjYyOSAzLjgwNmgtLjkwM3YuOTAzaC45MDN2LS45MDN6TTE1LjA0NyAyLjFoLS45MDN2LjkwM2guOTAzVjIuMXpNMjMuMzc0IDMuNjA1aC0uOTAzdi45MzNoLjkwM3YtLjkzM3pNMjkuMjk1IDkuNzI2aC0uOTAzdi45MzNoLjkwM3YtLjkzM3pNMzAuNDk4IDEyLjMzNWgtLjkwM3YuOTMzaC45MDN2LS45MzR6TTI3LjY5IDcuMzE4aC0uOTA0di45MzNoLjkwM3YtLjkzM3pNMzAuOSAxNS4xNDRoLS45MDN2LjkzM2guOTAzdi0uOTMzek0xNy44NTYgMmgtLjkwM3YuOTMzaC45MDNWMnpNMjAuNjY1IDIuNjAyaC0uOTAzdi45MzNoLjkwM3YtLjkzM3pNMjUuNjgyIDI3Ljg4NmgtLjkwM3YuOTMzaC45MDN2LS45MzN6TTMxIDE3Ljk1M2gtLjkwM3YuOTMzSDMxdi0uOTMzek03LjEyIDI3Ljk4N2gtLjkwM3YuOTMzaC45MDN2LS45MzN6TTMwLjM5OCAyMC43NjNoLS45MDN2LjkzM2guOTAzdi0uOTMzek0yMC42NjUgMzAuNTk2aC0uOTAzdi45MzNoLjkwM3YtLjkzM3pNMjkuMjk1IDIzLjM3MWgtLjkwM3YuOTMzaC45MDN2LS45MzN6TTI3LjY5IDI1Ljc4aC0uOTA0di45MzJoLjkwM3YtLjkzM3pNMjMuMjc0IDI5Ljc5M2gtLjkwM3YuOTAyaC45MDN2LS45MDJ6TTE3Ljc1NiAzMS40OThoLS45MDN2LjkwM2guOTAzdi0uOTAzek05LjQyOCAyOS40OTJoLS45MDN2LjkzM2guOTAzdi0uOTMzek0zLjUwOCAyMy40NzJoLS45MDN2LjkzM2guOTAzdi0uOTMzek0yLjMwNCAyMC44NjNoLS45MDN2LjkzM2guOTAzdi0uOTMzek01LjAxMyAyNS44OEg0LjExdi45MzNoLjkwM3YtLjkzM3pNMS45MDMgMTcuOTUzSDF2LjkzM2guOTAzdi0uOTMzek0xNC45NDcgMzEuNDk4aC0uOTAzdi45MzNoLjkwMnYtLjkzM3pNMTIuMTM3IDMwLjU5NmgtLjkwM3YuOTMzaC45MDN2LS45MzN6XCIsXG4gICAgZmlsbDogXCIjMDNBOURBXCJcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwiZGVmc1wiLCBudWxsLCBfX19FbW90aW9uSlNYKFwiY2xpcFBhdGhcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdjbGlwMCcpXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0wIDBoMzJ2MzJIMFYwelwiLFxuICAgIGZpbGw6IFwiI2ZmZlwiXG4gIH0pKSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29IYXByb3h5OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaHRtbElkR2VuZXJhdG9yIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvSWJtID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29JYm0oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGdlbmVyYXRlSWQgPSBodG1sSWRHZW5lcmF0b3IoJ2xvZ29faWJtJyk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZGVmc1wiLCBudWxsLCBfX19FbW90aW9uSlNYKFwibGluZWFyR3JhZGllbnRcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdhJyksXG4gICAgeDE6IFwiOC4wMDUlXCIsXG4gICAgeDI6IFwiNTMuMzMlXCIsXG4gICAgeTE6IFwiNzkuMzIzJVwiLFxuICAgIHkyOiBcIjc5LjMyNCVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiMzQkRBREVcIixcbiAgICBzdG9wT3BhY2l0eTogMFxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIzMC40NzYlXCIsXG4gICAgc3RvcENvbG9yOiBcIiMzNkNFRTFcIixcbiAgICBzdG9wT3BhY2l0eTogMC4zODNcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMTAwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjMjFBMkVGXCJcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwibGluZWFyR3JhZGllbnRcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdiJyksXG4gICAgeDE6IFwiMTkuNDk2JVwiLFxuICAgIHgyOiBcIjcxLjMwOSVcIixcbiAgICB5MTogXCI4My4zNDQlXCIsXG4gICAgeTI6IFwiMTcuNjM4JVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzIwN0ZGQVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjEwMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzZFQUZGMVwiLFxuICAgIHN0b3BPcGFjaXR5OiAwXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImxpbmVhckdyYWRpZW50XCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnYycpLFxuICAgIHgxOiBcIjIxLjkwOSVcIixcbiAgICB4MjogXCIyMS45MDklXCIsXG4gICAgeTE6IFwiOTYuMzE0JVwiLFxuICAgIHkyOiBcIjI5LjQ1NCVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM0MkMxRTZcIixcbiAgICBzdG9wT3BhY2l0eTogMFxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCI1Ny4wNzYlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM2RkI5RUZcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCI4Ni43MTYlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM2MENCRTdcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIxMDAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM1Q0NGRTVcIixcbiAgICBzdG9wT3BhY2l0eTogMFxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJsaW5lYXJHcmFkaWVudFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2QnKSxcbiAgICB4MTogXCI5Ni4yMDUlXCIsXG4gICAgeDI6IFwiLTEuMTcyJVwiLFxuICAgIHkxOiBcIjEyLjY2NyVcIixcbiAgICB5MjogXCItMjIuMjUyJVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzZGQjlFRlwiLFxuICAgIHN0b3BPcGFjaXR5OiAwXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjIyLjQyNyVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzM4RDJFMFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjkxLjIwMyVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzZBQkZFQ1wiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjEwMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzVDQ0ZFNVwiLFxuICAgIHN0b3BPcGFjaXR5OiAwXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImxpbmVhckdyYWRpZW50XCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnZScpLFxuICAgIHgxOiBcIjkuNDA4JVwiLFxuICAgIHgyOiBcIjgwLjU4OSVcIixcbiAgICB5MTogXCI4Ny43NjQlXCIsXG4gICAgeTI6IFwiODMuMTM4JVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzEyNkNGRFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjEwMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzIxQTFFRlwiXG4gIH0pKSksIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzM4RDJFMFwiLFxuICAgIGQ6IFwiTTQuMjYyIDEzLjEyMmEuNjA0LjYwNCAwIDAxLS4zLS4wOGwtMi44NDQtMS42MjVhLjYxNy42MTcgMCAwMS0uMjk1LS43MzQuNjA4LjYwOCAwIDAxLjg2OC0uMzE1bDIuODQzIDEuNjI1Yy4yOS4xNTkuNDA1LjUxNC4yNjEuODFhLjYwMy42MDMgMCAwMS0uNTMzLjMyem00LjkxNC00Ljg2NGEuNjAzLjYwMyAwIDAxLS41MjItLjI5OEw3LjAxMiA1LjE0NGEuNjE1LjYxNSAwIDAxLjExNS0uNzgyLjYwNi42MDYgMCAwMS45MS4xNTdsMS42NCAyLjgxM2EuNjE3LjYxNyAwIDAxLS4xNTguODE5Yy0uMS4wNy0uMjIuMTA3LS4zNDMuMTA3em02LjEwNy0yLjQxNlYyLjYzNWEuNjI0LjYyNCAwIDAxLjU3NS0uNjM0LjYwNS42MDUgMCAwMS40NDMuMTY0LjU5My41OTMgMCAwMS4xODYuNDMxdjMuMjg1YS41OTMuNTkzIDAgMDEtLjE4Ni40My42MDUuNjA1IDAgMDEtLjQ0My4xNjUuNjI0LjYyNCAwIDAxLS41NzUtLjYzNHptNy4zMTIgMi40MTZhLjYwNC42MDQgMCAwMS0uMzQzLS4xMDcuNjE3LjYxNyAwIDAxLS4xNTktLjgybDEuNjQtMi44MTJhLjYwMi42MDIgMCAwMS45MTEtLjE1N2MuMjIzLjIuMjcxLjUyOC4xMTUuNzgyTDIzLjExNyA3Ljk2YS42MDMuNjAzIDAgMDEtLjUyMi4yOTh6bTQuOTE0IDQuODY0YS42MDIuNjAyIDAgMDEtLjUzNC0uMzE5LjYxNi42MTYgMCAwMS4yNjItLjgxbDIuODE4LTEuNjExYS42MjYuNjI2IDAgMDEuNzgzLjExMi41OTIuNTkyIDAgMDEtLjE1Ni45MDZsLTIuODczIDEuNjQzYS42MDQuNjA0IDAgMDEtLjMuMDh6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2EnKSwgXCIpXCIpLFxuICAgIGQ6IFwiTTE2LjUzNiAxOS42NDVsLTEuMjA0LS4wMDljLjAyNi0zLjM3NyAyLjE0Ni02LjM5MSA1LjMzNy03LjU4NWE4LjMwOCA4LjMwOCAwIDAxOS4wNjggMi4xOTdsLS44OTcuNzk1YTcuMDk3IDcuMDk3IDAgMDAtNy43NDUtMS44NzZjLTIuNzI2IDEuMDE5LTQuNTM3IDMuNTkzLTQuNTU5IDYuNDc4elwiLFxuICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoMCAyKVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdiJyksIFwiKVwiKSxcbiAgICBkOiBcIk0uMDI5IDIwLjkwOWMuMDIyLTMuMzU0IDIuNDc1LTYuMjA4IDUuODE1LTYuNzY0bC4yMDEgMS4xNzZjLTIuNzY0LjQ2LTQuNzk0IDIuODItNC44MTIgNS41OTZMLjAyOSAyMC45MXpcIixcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDAgMilcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnYycpLCBcIilcIiksXG4gICAgZDogXCJNOC4yNDYgMjQuNzM3YTEwLjYyNSAxMC42MjUgMCAwMTAtMTUuMTMxYzQuMjE5LTQuMTc4IDExLjA2LTQuMTc4IDE1LjI3OSAwYTEwLjg5IDEwLjg5IDAgMDExLjM4NCAxLjY3OGwtMS4wMDQuNjU3YTkuNTE3IDkuNTE3IDAgMDAtMS4yMzEtMS40OTJjLTMuNzUtMy43MTMtOS44MjgtMy43MTMtMTMuNTc3IDBhOS40NDIgOS40NDIgMCAwMDAgMTMuNDQ1bC0uODUxLjg0M3pcIixcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDAgMilcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnZCcpLCBcIilcIiksXG4gICAgZDogXCJNNS44MzYgMTMuMjM0Yy40MDQtMS4zMzIgMS4zMy0yLjU2IDIuNDEtMy42MjggNC4yMTktNC4xNzggMTEuMDYtNC4xNzggMTUuMjc5IDBhMTAuODkgMTAuODkgMCAwMTEuMzg0IDEuNjc4bC0xLjAwNC42NTdhOS41MTcgOS41MTcgMCAwMC0xLjIzMS0xLjQ5MmMtMy43NS0zLjcxMy05LjgyOC0zLjcxMy0xMy41NzcgMGE5LjQ3NCA5LjQ3NCAwIDAwLTIuMDc0IDMuMDZjLTEuNDUyIDMuNDUtMi4zNTggMy41OTMtMS4xODctLjI3NXpcIixcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDAgMilcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnZScpLCBcIilcIiksXG4gICAgZDogXCJNMjMuNTI0IDI3Ljg3SDYuOTZhNy4wMTIgNy4wMTIgMCAwMS00LjkyMi0yLjA1OUE2Ljg3NiA2Ljg3NiAwIDAxLjAyOSAyMC45MWwxLjIwNC4wMDlhNS42OSA1LjY5IDAgMDAxLjY2IDQuMDU1IDUuODAyIDUuODAyIDAgMDA0LjA3MSAxLjcwNWgxNi42MThjMi43OC4wMDIgNS4zMDItMS42MTYgNi40MzgtNC4xM2E2LjkyOSA2LjkyOSAwIDAwLTEuMTgtNy41MDVsLjg5Ny0uNzk1YTguMTEyIDguMTEyIDAgMDExLjM4NCA4Ljc4NWMtMS4zMjkgMi45NDMtNC4yNzkgNC44MzctNy41MzQgNC44MzhoLS4wNjN6XCIsXG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgwIDIpXCJcbiAgfSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvSWJtOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvSWJtTW9ubyA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvSWJtTW9ubyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0uMDQ3IDIyLjkwOWwxLjE4Ni4wMDlhNS42OSA1LjY5IDAgMDAxLjY2IDQuMDU1IDUuODAyIDUuODAyIDAgMDA0LjA3MSAxLjcwNWgxNi42MThjMi43OC4wMDIgNS4zMDItMS42MTYgNi40MzgtNC4xM2E2LjkyOSA2LjkyOSAwIDAwLTEuMTgtNy41MDVsLjg5Ny0uNzk1YTguMTEyIDguMTEyIDAgMDExLjM4NCA4Ljc4NWMtMS4zMjkgMi45NDMtNC4yNzkgNC44MzctNy41MzQgNC44MzhINi45NmE3LjAxMiA3LjAxMiAwIDAxLTQuOTIyLTIuMDZBNi44NzYgNi44NzYgMCAwMS4wMjkgMjIuOTFoLjAxOC0uMDE4Yy4wMTctMi43MSAxLjYyLTUuMDkxIDMuOTk3LTYuMi4xMTQtLjA1NC4zMi4yOS42MTkgMS4wM2E1LjcxIDUuNzEgMCAwMC0zLjQxMiA1LjE4bC0xLjE4Ni0uMDF6bTQuMjE1LTkuNzg3YS42MDQuNjA0IDAgMDEtLjMtLjA4bC0yLjg0NC0xLjYyNWEuNjE3LjYxNyAwIDAxLS4yOTUtLjczNC42MDguNjA4IDAgMDEuODY4LS4zMTVsMi44NDMgMS42MjVjLjI5LjE1OS40MDUuNTE0LjI2MS44MWEuNjAzLjYwMyAwIDAxLS41MzMuMzJ6bTQuOTE0LTQuODY0YS42MDMuNjAzIDAgMDEtLjUyMi0uMjk4TDcuMDEyIDUuMTQ0YS42MTUuNjE1IDAgMDEuMTE1LS43ODIuNjA2LjYwNiAwIDAxLjkxLjE1N2wxLjY0IDIuODEzYS42MTcuNjE3IDAgMDEtLjE1OC44MTljLS4xLjA3LS4yMi4xMDctLjM0My4xMDd6bTYuMTA3LTIuNDE2VjIuNjM1YS42MjQuNjI0IDAgMDEuNTc1LS42MzQuNjA1LjYwNSAwIDAxLjQ0My4xNjQuNTkzLjU5MyAwIDAxLjE4Ni40MzF2My4yODVhLjU5My41OTMgMCAwMS0uMTg2LjQzLjYwNS42MDUgMCAwMS0uNDQzLjE2NS42MjQuNjI0IDAgMDEtLjU3NS0uNjM0em03LjMxMiAyLjQxNmEuNjA0LjYwNCAwIDAxLS4zNDMtLjEwNy42MTcuNjE3IDAgMDEtLjE1OS0uODJsMS42NC0yLjgxMmEuNjAyLjYwMiAwIDAxLjkxMS0uMTU3Yy4yMjMuMi4yNzEuNTI4LjExNS43ODJMMjMuMTE3IDcuOTZhLjYwMy42MDMgMCAwMS0uNTIyLjI5OHptNC45MTQgNC44NjRhLjYwMi42MDIgMCAwMS0uNTM0LS4zMTkuNjE2LjYxNiAwIDAxLjI2Mi0uODFsMi44MTgtMS42MTFhLjYyNi42MjYgMCAwMS43ODMuMTEyLjU5Mi41OTIgMCAwMS0uMTU2LjkwNmwtMi44NzMgMS42NDNhLjYwNC42MDQgMCAwMS0uMy4wOHpNMTYuMzY2IDE5Ljc4SDE2YTIuMzIyIDIuMzIyIDAgMDEtLjMwMiAwYy0uMDktLjAxMS0uMTUyLjA1LS4wODYtLjE5NmE4LjIwNCA4LjIwNCAwIDAxNS4wNTctNS41MzMgOC4zMDggOC4zMDggMCAwMTkuMDY4IDIuMTk3bC0uODk3Ljc5NWE3LjA5NyA3LjA5NyAwIDAwLTcuNzQ1LTEuODc2IDcuMDA5IDcuMDA5IDAgMDAtNC4yODggNC42MTNjLS4xMTUuMzk5LS4xMTUuMzk5IDAgMGgtLjQ0ek02LjE1NCAyMy44MjZhMTAuNjI2IDEwLjYyNiAwIDAxMi4wOTItMTIuMjJjNC4yMTktNC4xNzggMTEuMDYtNC4xNzggMTUuMjc5IDBsLS44NTEuODQzYy0zLjc1LTMuNzEzLTkuODI4LTMuNzEzLTEzLjU3NyAwQTkuNDQyIDkuNDQyIDAgMDA3LjI2NCAyMy4zNmE2Ljk5IDYuOTkgMCAwMC0uNDE4LjE3MmwtLjIxMi4wOTQtLjE2Mi4wNzctLjA5NC4wMy0uMDkuMDM5Yy42NDgtLjI4Mi45NjUtLjQyLjk1LS40MTItLjAyNi4wMTUtMS4wNzMuNDg5LTEuMDg0LjQ2NnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0libU1vbm87IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29LYWZrYSA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvS2Fma2EoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMS41NjUgMTcuNjIzYy0xLjE3MyAwLTIuMjI1LjUyLTIuOTQ1IDEuMzM3bC0xLjg0NS0xLjMwNmMuMTk2LS41NC4zMDktMS4xMTguMzA5LTEuNzI0IDAtLjU5Ni0uMTA5LTEuMTY1LS4yOTgtMS42OTZsMS44NC0xLjI5M2EzLjkxNCAzLjkxNCAwIDAwMi45MzkgMS4zMzEgMy45MyAzLjkzIDAgMDAzLjkyNi0zLjkyNiAzLjkzIDMuOTMgMCAwMC0zLjkyNi0zLjkyNiAzLjkzIDMuOTMgMCAwMC0zLjkyNiAzLjkyNmMwIC4zODcuMDU4Ljc2MS4xNjMgMS4xMTVsLTEuODQyIDEuMjkzYTUuMDY4IDUuMDY4IDAgMDAtMy4xNC0xLjgyNVY4LjcxYTMuOTMyIDMuOTMyIDAgMDAzLjExOS0zLjg0MkEzLjkzIDMuOTMgMCAwMDEyLjAxMi45NDFhMy45MyAzLjkzIDAgMDAtMy45MjYgMy45MjYgMy45MyAzLjkzIDAgMDAzLjA0OCAzLjgyNHYyLjI0OWE1LjA3NSA1LjA3NSAwIDAwLTQuMTkzIDQuOTkgNS4wNzUgNS4wNzUgMCAwMDQuMjI5IDQuOTk1VjIzLjNhMy45MzEgMy45MzEgMCAwMC0zLjA4NCAzLjgzMyAzLjkzIDMuOTMgMCAwMDMuOTI2IDMuOTI2IDMuOTMgMy45MyAwIDAwMy45MjctMy45MjYgMy45MzEgMy45MzEgMCAwMC0zLjA4NC0zLjgzM3YtMi4zNzVhNS4wNyA1LjA3IDAgMDAzLjA4Ny0xLjc5NWwxLjg1NyAxLjMxNGMtLjEwMy4zNTEtLjE2LjcyMS0uMTYgMS4xMDVhMy45MyAzLjkzIDAgMDAzLjkyNiAzLjkyNiAzLjkzIDMuOTMgMCAwMDMuOTI2LTMuOTI2IDMuOTMgMy45MyAwIDAwLTMuOTI2LTMuOTI2em0wLTkuMThjMS4wNSAwIDEuOTAzLjg1MyAxLjkwMyAxLjkwM3MtLjg1NCAxLjkwMy0xLjkwMyAxLjkwM2ExLjkwNiAxLjkwNiAwIDAxLTEuOTA0LTEuOTAzYzAtMS4wNS44NTQtMS45MDQgMS45MDQtMS45MDR6TTEwLjEwOSA0Ljg2NmMwLTEuMDUuODU0LTEuOTAzIDEuOTAzLTEuOTAzIDEuMDUgMCAxLjkwNC44NTQgMS45MDQgMS45MDMgMCAxLjA1LS44NTQgMS45MDQtMS45MDQgMS45MDRhMS45MDYgMS45MDYgMCAwMS0xLjkwMy0xLjkwNHptMy44MDcgMjIuMjY2YzAgMS4wNS0uODU0IDEuOTAzLTEuOTA0IDEuOTAzYTEuOTA2IDEuOTA2IDAgMDEtMS45MDMtMS45MDNjMC0xLjA1Ljg1NC0xLjkwNCAxLjkwMy0xLjkwNCAxLjA1IDAgMS45MDQuODU0IDEuOTA0IDEuOTA0em0tMS45MDQtOC41NDhhMi42NTggMi42NTggMCAwMS0yLjY1NS0yLjY1NSAyLjY1OCAyLjY1OCAwIDAxMi42NTUtMi42NTUgMi42NTggMi42NTggMCAwMTIuNjU1IDIuNjU1IDIuNjU4IDIuNjU4IDAgMDEtMi42NTUgMi42NTV6bTkuNTUzIDQuODY3YTEuOTA2IDEuOTA2IDAgMDEtMS45MDQtMS45MDNjMC0xLjA1Ljg1NC0xLjkwNCAxLjkwNC0xLjkwNCAxLjA1IDAgMS45MDMuODU0IDEuOTAzIDEuOTA0IDAgMS4wNS0uODU0IDEuOTAzLTEuOTAzIDEuOTAzelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvS2Fma2E7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29LaWJhbmEgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0tpYmFuYShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRjA0RTk4XCIsXG4gICAgZDogXCJNNCAwdjI4Ljc4OUwyOC45MzUuMDE3elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxOZWdhdGl2ZVwiLFxuICAgIGQ6IFwiTTQgMTJ2MTYuNzg5bDExLjkwNi0xMy43MzhBMjQuNzIxIDI0LjcyMSAwIDAwNCAxMlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDBCRkIzXCIsXG4gICAgZDogXCJNMTguNDc5IDE2LjY2NEw2LjI2OCAzMC43NTRsLTEuMDczIDEuMjM3aDIzLjE5MWMtMS4yNTItNi4yOTItNC44ODMtMTEuNzE5LTkuOTA4LTE1LjMyN1wiXG4gIH0pKSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0tpYmFuYTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0t1YmVybmV0ZXMgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0t1YmVybmV0ZXMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNS44OS4wMDNhMi4xNCAyLjE0IDAgMDExLjAzLjIwNmwxMS4xMjcgNS4zMDRhMi4xMSAyLjExIDAgMDExLjE1IDEuNDI5bDIuNzUgMTEuOTIxYTIuMDkgMi4wOSAwIDAxLS40MTIgMS43ODNsLTcuNjk3IDkuNTZjLS40MDQuNS0xLjAxNi43OTItMS42NjMuNzkxTDkuODI3IDMxYy0uNjQ4IDAtMS4yNi0uMjkyLTEuNjY0LS43OTNsLTcuNy05LjU1OGEyLjEwNyAyLjEwNyAwIDAxLS40MS0xLjc4M0wyLjc5OCA2Ljk0NWEyLjExIDIuMTEgMCAwMTEuMTUxLTEuNDNMMTUuMDc0LjIxYy4yNTUtLjEyMi41MzItLjE5Mi44MTUtLjIwNnpNMTYgNC4wNmMtLjM2OCAwLS42NjcuMzMtLjY2Ny43MzhsLjAwMi4wMTljMCAuMDU1LS4wMDMuMTIyLS4wMDIuMTcuMDEuMjM2LjA2LjQxNi4wOTEuNjMyLjA1Ny40NjQuMTAzLjg0OS4wNzQgMS4yMDYtLjAyOC4xMzUtLjEyNy4yNTgtLjIxNi4zNDRsLS4wMTUuMjgxYTguNTY5IDguNTY5IDAgMDAtNS41NTUgMi42NjYgOS45OCA5Ljk4IDAgMDEtLjI0LS4xN2MtLjEyLjAxNi0uMjQuMDUzLS4zOTYtLjAzOC0uMjk4LS4yLS41Ny0uNDc3LS44OTgtLjgxLS4xNS0uMTYtLjI2LS4zMS0uNDM4LS40NjQtLjA0LS4wMzUtLjEwMy0uMDgyLS4xNDgtLjExOGEuNzkzLjc5MyAwIDAwLS40NjQtLjE3NS42NDIuNjQyIDAgMDAtLjUzLjIzNGMtLjIzLjI4OC0uMTU2LjcyNi4xNjMuOThsLjAxLjAwOGMuMDQ0LjAzNS4wOTguMDguMTM4LjExLjE5LjE0LjM2My4yMTIuNTUyLjMyMy4zOTguMjQ2LjcyOS40NS45OS42OTUuMTAzLjEwOC4xMi4zLjEzNC4zODNsLjIxNC4xOWE4LjU5MiA4LjU5MiAwIDAwLTEuMzYgNS45OThsLS4yNzguMDhjLS4wNzQuMDk2LS4xNzcuMjQ1LS4yODYuMjktLjM0My4xMDctLjcyOC4xNDctMS4xOTQuMTk1LS4yMTguMDE4LS40MDcuMDA4LS42MzkuMDUxLS4wNS4wMS0uMTIyLjAyOS0uMTc3LjA0MmwtLjAwNi4wMDEtLjAxLjAwM2MtLjM5My4wOTUtLjY0NS40NTUtLjU2NC44MS4wODIuMzU1LjQ2NS41Ny44Ni40ODVsLjAxLS4wMDEuMDEzLS4wMDRjLjA1NS0uMDEyLjEyNC0uMDI2LjE3Mi0uMDM5LjIyOC0uMDYuMzkzLS4xNS41OTctLjIyOC40NC0uMTU4LjgwNi0uMjkgMS4xNjEtLjM0MS4xNDktLjAxMi4zMDUuMDkxLjM4My4xMzVsLjI5LS4wNWE4LjY1NCA4LjY1NCAwIDAwMy44NCA0Ljc4N2wtLjEyLjI5Yy4wNDMuMTEzLjA5MS4yNjUuMDU5LjM3Ni0uMTMuMzM0LS4zNS42ODgtLjYwMyAxLjA4MS0uMTIyLjE4Mi0uMjQ3LjMyNC0uMzU3LjUzMi0uMDI2LjA1LS4wNi4xMjYtLjA4Ni4xNzktLjE3LjM2NS0uMDQ1Ljc4Ni4yODQuOTQ0LjMzLjE2Ljc0MS0uMDA4LjkxOS0uMzc1bC4wMDEtLjAwMXYtLjAwMmMuMDI1LS4wNTEuMDYxLS4xMi4wODMtLjE2OS4wOTQtLjIxNS4xMjUtLjQuMTkyLS42MDkuMTc2LS40NDIuMjczLS45MDUuNTE1LTEuMTk0LjA2Ny0uMDguMTc1LS4xMS4yODctLjE0bC4xNTEtLjI3M2E4LjYxNiA4LjYxNiAwIDAwNi4xNDUuMDE2bC4xNDIuMjU2Yy4xMTQuMDM3LjIzOS4wNTYuMzQuMjA2LjE4Mi4zMS4zMDYuNjc1LjQ1NyAxLjExOC4wNjYuMjA4LjEuMzkzLjE5NC42MS4wMjEuMDQ4LjA1Ny4xMTcuMDgyLjE3LjE3Ny4zNjcuNTkuNTM1LjkyLjM3Ni4zMy0uMTU4LjQ1NS0uNTguMjg0LS45NDUtLjAyNi0uMDUyLS4wNi0uMTI5LS4wODctLjE3OS0uMTEtLjIwOC0uMjM1LS4zNDgtLjM1Ny0uNTMtLjI1Mi0uMzkzLS40NjEtLjcyLS41OS0xLjA1NS0uMDU1LS4xNzMuMDA5LS4yOC4wNS0uMzkyLS4wMjUtLjAyOS0uMDc5LS4xOTItLjExLS4yNjhhOC42NTQgOC42NTQgMCAwMDMuODM4LTQuODIyYy4wODYuMDE0LjIzNi4wNC4yODUuMDUuMS0uMDY2LjE5Mi0uMTUyLjM3My0uMTM4LjM1NS4wNTIuNzIuMTgzIDEuMTYuMzQxLjIwNS4wNzguMzcuMTcuNTk4LjIzLjA0OC4wMTMuMTE3LjAyNS4xNzIuMDM3bC4wMTMuMDA0LjAxLjAwMmMuMzk1LjA4NS43NzgtLjEzMS44Ni0uNDg2LjA4LS4zNTUtLjE3MS0uNzE1LS41NjQtLjgxLS4wNTctLjAxMy0uMTM4LS4wMzUtLjE5My0uMDQ1LS4yMzItLjA0NC0uNDItLjAzMy0uNjQtLjA1MS0uNDY1LS4wNDktLjg1LS4wODktMS4xOTMtLjE5Ni0uMTQtLjA1NC0uMjM5LS4yMi0uMjg3LS4yODlsLS4yNy0uMDc4YTguNTcyIDguNTcyIDAgMDAtLjEzOS0zLjEwNCA4LjU5OSA4LjU5OSAwIDAwLTEuMjQ3LTIuODhjLjA2OC0uMDYyLjE5OS0uMTc3LjIzNi0uMjEuMDEtLjEyLjAwMS0uMjQ1LjEyNS0uMzc3LjI2Mi0uMjQ2LjU5Mi0uNDUuOTktLjY5NS4xOS0uMTEuMzY0LS4xODIuNTU0LS4zMjIuMDQzLS4wMzIuMTAxLS4wODIuMTQ2LS4xMTguMzItLjI1NS4zOTMtLjY5My4xNjQtLjk4LS4yMy0uMjg3LS42NzQtLjMxNC0uOTkzLS4wNi0uMDQ2LjAzNi0uMTA3LjA4My0uMTQ4LjExOC0uMTc5LjE1My0uMjkuMzA1LS40NC40NjQtLjMyOC4zMzMtLjYuNjExLS44OTguODEyLS4xMjkuMDc1LS4zMTguMDQ5LS40MDQuMDQ0bC0uMjUzLjE4YTguNzMyIDguNzMyIDAgMDAtNS41MjgtMi42NjYgMTYuMDM2IDE2LjAzNiAwIDAxLS4wMTUtLjI5N2MtLjA4Ny0uMDgzLS4xOTItLjE1NC0uMjE4LS4zMzMtLjAyOS0uMzU3LjAyLS43NDIuMDc2LTEuMjA2LjAzLS4yMTYuMDgyLS4zOTYuMDktLjYzMi4wMDMtLjA1MyAwLS4xMyAwLS4xODkgMC0uNDA4LS4yOTktLjczOC0uNjY3LS43Mzh6bS0uODM0IDUuMTU2bC0uMTk4IDMuNDg4LS4wMTQuMDA3YS41ODcuNTg3IDAgMDEtLjkzMi40NDlsLS4wMDYuMDAyLTIuODY0LTIuMDI3YTYuODYyIDYuODYyIDAgMDE0LjAxNC0xLjkxOXptMS42NjggMGE2LjkyMiA2LjkyMiAwIDAxMy45OSAxLjkybC0yLjg0NiAyLjAxNS0uMDEtLjAwNGEuNTg4LjU4OCAwIDAxLS45MzMtLjQ0OGwtLjAwMy0uMDAxLS4xOTgtMy40ODJ6bS02LjcyIDMuMjIybDIuNjE0IDIuMzM1LS4wMDMuMDE0YS41ODUuNTg1IDAgMDEtLjIzIDEuMDA4bC0uMDAzLjAxLTMuMzUyLjk2N2E2LjgzOCA2LjgzOCAwIDAxLjk3My00LjMzNHptMTEuNzUzLjAwMWMuMzg4LjYzLjY4MyAxLjMzMS44NTggMi4wOTNhNi45MSA2LjkxIDAgMDEuMTQ1IDIuMjI5bC0zLjM3LS45Ny0uMDAyLS4wMTNhLjU4Ni41ODYgMCAwMS0uMjMtMS4wMDhsLS4wMDItLjAwNyAyLjYtMi4zMjR6bS02LjQwNCAyLjUxNWgxLjA3MWwuNjY2LjgzLS4yMzkgMS4wMzgtLjk2Mi40NjEtLjk2NC0uNDYzLS4yNC0xLjAzNy42NjgtLjgzem0zLjQzNSAyLjg0NGEuNTg1LjU4NSAwIDAxLjEzNS4wMWwuMDA1LS4wMDggMy40NjguNTg2YTYuODU4IDYuODU4IDAgMDEtMi43NzYgMy40ODFsLTEuMzQ2LTMuMjQ2LjAwNC0uMDA1YS41ODYuNTg2IDAgMDEuNTEtLjgxOHptLTUuODI0LjAxNGEuNTg3LjU4NyAwIDAxLjUzLjgxN2wuMDEuMDEyLTEuMzMxIDMuMjE0YTYuODg2IDYuODg2IDAgMDEtMi43NjctMy40NThsMy40MzctLjU4Mi4wMDYuMDA3YS41OTUuNTk1IDAgMDEuMTE1LS4wMXptMi45MDQgMS40MDdhLjU4Mi41ODIgMCAwMS4yNzUuMDU5LjU4My41ODMgMCAwMS4yNjMuMjVoLjAxM2wxLjY5NCAzLjA1N2MtLjIyLjA3My0uNDQ2LjEzNi0uNjc3LjE4OWE2Ljg5NiA2Ljg5NiAwIDAxLTMuNzU4LS4xOTRsMS42OS0zLjA1aC4wMDNhLjU4OC41ODggMCAwMS40OTctLjMxelwiLFxuICAgIGZpbGw6IFwiIzMyNkNFNVwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvS3ViZXJuZXRlczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0xvZ2dpbmcgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0xvZ2dpbmcoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMDgwRDVcIixcbiAgICBkOiBcIk0yIDEwdjEzYTkgOSAwIDAxOSA5aDEzYzAtMTIuMTUtOS44NS0yMi0yMi0yMlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxOZWdhdGl2ZVwiLFxuICAgIGQ6IFwiTTE0IDEzLjU2NVYzMmgxMGMwLTcuNzIyLTMuOTgxLTE0LjUxLTEwLTE4LjQzNlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDBCRkIzXCIsXG4gICAgZDogXCJNMTQgMHYxMC4yMjZDMjEuNjY2IDE0LjQ2OCAyNi44NjkgMjIuNjM2IDI2Ljg2OSAzMkgzMFYxNmMwLTguODM3LTcuMTYzLTE2LTE2LTE2XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29Mb2dnaW5nOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvTG9nc3Rhc2ggPSBmdW5jdGlvbiBFdWlJY29uTG9nb0xvZ3N0YXNoKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjM0VCRUIwXCIsXG4gICAgZDogXCJNMTkgMzJoMTFWMjBIMTl6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRUM1MTRcIixcbiAgICBkOiBcIk00IDBIM3YyMGgxM3YtOEMxNiA1LjM3MyAxMC42MjcgMCA0IDBcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsTmVnYXRpdmVcIixcbiAgICBkOiBcIk0zIDIwYzAgNi42MjcgNS4zNzMgMTIgMTIgMTJoMVYyMEgzelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvTG9nc3Rhc2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29NYXBzID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29NYXBzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMjJBN0YzXCIsXG4gICAgZDogXCJNMjUuNSA5LjVjMCA2LjY1LTkuNSAxMS40MjUtOS41IDExLjQyNVM2LjUgMTYuMTUgNi41IDkuNUE5LjUgOS41IDAgMDExNiAwYTkuNSA5LjUgMCAwMTkuNSA5LjVcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsTmVnYXRpdmVcIixcbiAgICBkOiBcIk0xNiAyMC45MjVzNC4zMjYtMi4xODMgNy4xNDEtNS42NDVsLTIuNTA1LTEuODc4YTcuNzI1IDcuNzI1IDAgMDAtOS4yNzIgMEw4Ljg1OSAxNS4yOEMxMS42NzQgMTguNzQyIDE2IDIwLjkyNSAxNiAyMC45MjVcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZBNzQ0RVwiLFxuICAgIGQ6IFwiTTI1LjUzIDE3LjA3M2EyMS4xMjQgMjEuMTI0IDAgMDEtMi44MzQgMi45MTZjLTIuNjIgMi4yMzUtNS4yMzkgMy41NjEtNS4zNDkgMy42MTZMMTYgMjQuMjgybC0xLjM0OC0uNjc3Yy0uMTA5LS4wNTUtMi43MjgtMS4zODEtNS4zNDktMy42MTZhMjEuMTgyIDIxLjE4MiAwIDAxLTIuODM0LTIuOTE2TDAgMjEuOTI1bDExLjM2NCA4LjUyM2E3LjcyNCA3LjcyNCAwIDAwOS4yNzEgMEwzMiAyMS45MjVsLTYuNDctNC44NTJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29NYXBzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaHRtbElkR2VuZXJhdG9yIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvTWVtY2FjaGVkID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29NZW1jYWNoZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGdlbmVyYXRlSWQgPSBodG1sSWRHZW5lcmF0b3IoJ2xvZ29fbWVtY2FjaGVkJyk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZGVmc1wiLCBudWxsLCBfX19FbW90aW9uSlNYKFwicmFkaWFsR3JhZGllbnRcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdjJyksXG4gICAgY3g6IFwiNDEuNDA2JVwiLFxuICAgIGN5OiBcIjQyLjcwOCVcIixcbiAgICByOiBcIjAlXCIsXG4gICAgZng6IFwiNDEuNDA2JVwiLFxuICAgIGZ5OiBcIjQyLjcwOCVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiNEQjdDN0NcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIxMDAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiNDODM3MzdcIlxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJyYWRpYWxHcmFkaWVudFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2QnKSxcbiAgICBjeDogXCI0NC4yNzElXCIsXG4gICAgY3k6IFwiNDIuNzA4JVwiLFxuICAgIHI6IFwiMCVcIixcbiAgICBmeDogXCI0NC4yNzElXCIsXG4gICAgZnk6IFwiNDIuNzA4JVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0RCN0M3Q1wiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjEwMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0M4MzczN1wiXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImxpbmVhckdyYWRpZW50XCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnYScpLFxuICAgIHgxOiBcIjUwJVwiLFxuICAgIHgyOiBcIjUwJVwiLFxuICAgIHkxOiBcIjEwMCVcIixcbiAgICB5MjogXCIwJVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzU3NEM0QVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjEwMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzgwNzE2RFwiXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImxpbmVhckdyYWRpZW50XCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnYicpLFxuICAgIHgxOiBcIjg4Ljc3OCVcIixcbiAgICB4MjogXCIzMC4xNDklXCIsXG4gICAgeTE6IFwiOTguMzQyJVwiLFxuICAgIHkyOiBcIi04LjY4JVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzI2OEQ4M1wiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjEwMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzJFQTE5RVwiXG4gIH0pKSksIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdhJyksIFwiKVwiKSxcbiAgICBkOiBcIk0wIDIxLjU2N1YxMC4zNTJDMCAxLjI5NCAxLjI5MyAwIDEwLjM0MiAwaDExLjIzNmM5LjA0OSAwIDEwLjM0MSAxLjI5NCAxMC4zNDEgMTAuMzUydjExLjIxNWMwIDkuMDU5LTEuMjkyIDEwLjM1Mi0xMC4zNDEgMTAuMzUySDEwLjM0MkMxLjI5MiAzMS45MiAwIDMwLjYyNiAwIDIxLjU2N3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnYicpLCBcIilcIiksXG4gICAgZDogXCJNNi44ODkgNi4wMTZDNS4zMiAxNS45NiA2LjE0IDI1LjI3IDYuMTQgMjUuMjdoNC45MDRjLS40NjYtMi40ODMtMi4xNC0xMy44MjQtLjc0OC0xMy44NjEuNzQ2LjExOCA0LjE1NiA5LjYyMSA0LjE1NiA5LjYyMXMuNzUxLS4wOTMgMS41MDctLjA5M2MuNzU1IDAgMS41MDYuMDkzIDEuNTA2LjA5M3MzLjQxLTkuNTAzIDQuMTU3LTkuNjIxYzEuMzkyLjAzNy0uMjgyIDExLjM3OC0uNzQ4IDEzLjg2aDQuOTA0cy44Mi05LjMxLS43NDgtMTkuMjUzaC00LjU0Yy0uODY1LjAxLTQuMTUzIDUuNzc3LTQuNTMxIDUuNzc3LS4zNzggMC0zLjY2Ni01Ljc2Ny00LjUzLTUuNzc3SDYuODg5elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdjJyksIFwiKVwiKSxcbiAgICBkOiBcIk0xNC45OTMgMjQuMTA5YTEuMTYgMS4xNiAwIDExLTIuMzIyIDAgMS4xNiAxLjE2IDAgMDEyLjMyMiAwelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdkJyksIFwiKVwiKSxcbiAgICBkOiBcIk0xOS4yNDkgMjQuMTA5YTEuMTYgMS4xNiAwIDExLTIuMzIyIDAgMS4xNiAxLjE2IDAgMDEyLjMyMiAwelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDAwXCIsXG4gICAgZDogXCJNMjQuOCA2LjM0NWMuNzA3IDQuNzkuODczIDkuMzg4Ljg2IDEyLjgxMy0uMDEzIDMuNTAzLS4yMTQgNS43OC0uMjE0IDUuNzhoLTQuMTI4bC0uNDQzLjMzMmg0LjkwNHMuODItOS4zMS0uNzQ4LTE5LjI1NGwtLjIzMi4zMjl6bS0xMi45OTYtLjEyMWMxLjI4OCAxLjQzMyAzLjUxNiA1LjIzNyAzLjgyMyA1LjIzNy0uODE3LTEuMDQ1LTIuODIzLTQuMzc4LTMuODIzLTUuMjM3em0tMS44NCA0Ljg1MmMtMS4zOTIuMDM4LjI4MiAxMS4zNzkuNzQ5IDEzLjg2MUg2LjQzbC0uMjkuMzMzaDQuOTA0Yy0uNDY0LTIuNDctMi4xMjMtMTMuNzEtLjc2OS0xMy44NjEtLjEyNi0uMTktLjIzNS0uMzItLjMxMS0uMzMzem0xMS4zMjYgMGMtLjc0Ni4xMTktNC4xNTYgOS42MjItNC4xNTYgOS42MjJzLS43NTEtLjA5NC0xLjUwNy0uMDk0Yy0uNDQ3IDAtLjgzMi4wMjgtMS4wOTIuMDUybC0uMDgyLjM3NHMuNzUxLS4wOTMgMS41MDctLjA5M2MuNzU1IDAgMS41MDYuMDkzIDEuNTA2LjA5M3MzLjM4NS05LjQ0IDQuMTQ2LTkuNjIxYy0uMDgyLS4yMDgtLjE4My0uMzMtLjMyMi0uMzMzelwiLFxuICAgIG9wYWNpdHk6IDAuMVxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZGRlwiLFxuICAgIGQ6IFwiTTYuODg5IDYuMDE2QzUuMzIgMTUuOTYgNi4xNCAyNS4yNyA2LjE0IDI1LjI3bC4yODktLjMyNWMtLjE0OC0yLjE5Ny0uNTQzLTEwLjE0Ljc5MS0xOC41OTdoNC41NDFjLjA5Ni4wMDIuMjI1LjA4LjM3NC4yMDgtLjI5Ny0uMzMtLjU0NC0uNTM4LS43MDYtLjU0SDYuODg5em0xMy42MDEgMGMtLjg2NC4wMS00LjE1MiA1Ljc3Ny00LjUzIDUuNzc3LjE1NC4xOTcuMjc5LjMzMy4zMzIuMzMzLjM3OCAwIDMuNjY2LTUuNzY3IDQuNTMtNS43NzdoNC4wMDhsLjItLjMzM2gtNC41NHptLTkuODgxIDUuNzI1YzEuMTAzIDEuNjU3IDMuODQ0IDkuMjkgMy44NDQgOS4yOWwuMDgtLjM3M2MtLjY3Ni0xLjg1Ni0zLjI1Ni04LjgxNC0zLjkwMy04LjkxN2gtLjAyMXptMTEuMzQ2IDBjLjc0IDEuODg3LS42NiAxMS4yOTUtMS4wOCAxMy41MjlsLjQ0NC0uMzQ4Yy41NjgtMy4zMzEgMS45MzYtMTMuMTQ2LjYzNi0xMy4xOHpcIixcbiAgICBvcGFjaXR5OiAwLjNcbiAgfSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvTWVtY2FjaGVkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvTWV0cmljcyA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvTWV0cmljcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRjA0RTk4XCIsXG4gICAgZDogXCJNMiAzMmgyOFYyMGwtNi40NjUtNi40NjVhNSA1IDAgMDAtNy4wNyAwTDIgMjh2NHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsTmVnYXRpdmVcIixcbiAgICBkOiBcIk0xNi40NjUgMTMuNTM1bC0zLjUzNiAzLjUzNmE5Ljk2NSA5Ljk2NSAwIDAwNy4wNyAyLjkzIDkuOTY1IDkuOTY1IDAgMDA3LjA3Mi0yLjkzbC0zLjUzNi0zLjUzNmE1IDUgMCAwMC03LjA3IDBcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZFQzUxNFwiLFxuICAgIGQ6IFwiTTE0LjM0MyAxMS40MTRBNy45NTEgNy45NTEgMCAwMTIwIDkuMDcxYzIuMTM3IDAgNC4xNDYuODMyIDUuNjU3IDIuMzQzbDMuMjA3IDMuMjA3QTkuOTU1IDkuOTU1IDAgMDAzMCAxMC4wMDFjMC01LjUyNC00LjQ3Ny0xMC0xMC0xMC01LjUyMiAwLTEwIDQuNDc2LTEwIDEwIDAgMS42NjcuNDE0IDMuMjM3IDEuMTM3IDQuNjJsMy4yMDYtMy4yMDd6XCJcbiAgfSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvTWV0cmljczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb01vbmdvZGIgPSBmdW5jdGlvbiBFdWlJY29uTG9nb01vbmdvZGIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkZGXCIsXG4gICAgZDogXCJNMTYuODQ0IDMxLjg0N2wtLjg0Ny0uMjlzLjEwNC00LjMxNS0xLjQ0NS00LjYyNWMtMS4wMzItMS4xOTguMTY1LTUwLjggMy44ODItLjE2NSAwIDAtMS4yOC42NC0xLjUwNyAxLjczNS0uMjQ4IDEuMDc0LS4wODMgMy4zNDUtLjA4MyAzLjM0NXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0E2QTM4NVwiLFxuICAgIGQ6IFwiTTE2Ljg0NCAzMS44NDdsLS44NDctLjI5cy4xMDQtNC4zMTUtMS40NDUtNC42MjVjLTEuMDMyLTEuMTk4LjE2NS01MC44IDMuODgyLS4xNjUgMCAwLTEuMjguNjQtMS41MDcgMS43MzUtLjI0OCAxLjA3NC0uMDgzIDMuMzQ1LS4wODMgMy4zNDV6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRkZcIixcbiAgICBkOiBcIk0xNy4yOTkgMjcuNjc2czcuNDEzLTQuODc0IDUuNjc4LTE1LjAxM2MtMS42NzItNy4zNzItNS42MTYtOS43ODgtNi4wNS0xMC43MTgtLjQ3NS0uNjYtLjkzLTEuODE3LS45My0xLjgxN2wuMzEgMjAuNTA2YzAgLjAyLS42NCA2LjI3OC45OTIgNy4wNDJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzQ5OUQ0QVwiLFxuICAgIGQ6IFwiTTE3LjI5OSAyNy42NzZzNy40MTMtNC44NzQgNS42NzgtMTUuMDEzYy0xLjY3Mi03LjM3Mi01LjYxNi05Ljc4OC02LjA1LTEwLjcxOC0uNDc1LS42Ni0uOTMtMS44MTctLjkzLTEuODE3bC4zMSAyMC41MDZjMCAuMDItLjY0IDYuMjc4Ljk5MiA3LjA0MlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkZGXCIsXG4gICAgZDogXCJNMTUuNTY0IDI3Ljk0NHMtNi45Ni00Ljc1LTYuNTQ2LTEzLjExM2MuMzkyLTguMzYzIDUuMzA3LTEyLjQ3MyA2LjI1Ny0xMy4yMTYuNjItLjY2LjY0LS45MDkuNjgxLTEuNTcuNDM0LjkzLjM1MSAxMy44OTguNDEzIDE1LjQyNi4xODYgNS44ODYtLjMzIDExLjM1OC0uODA1IDEyLjQ3M3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzU4QUE1MFwiLFxuICAgIGQ6IFwiTTE1LjU2NCAyNy45NDRzLTYuOTYtNC43NS02LjU0Ni0xMy4xMTNjLjM5Mi04LjM2MyA1LjMwNy0xMi40NzMgNi4yNTctMTMuMjE2LjYyLS42Ni42NC0uOTA5LjY4MS0xLjU3LjQzNC45My4zNTEgMTMuODk4LjQxMyAxNS40MjYuMTg2IDUuODg2LS4zMyAxMS4zNTgtLjgwNSAxMi40NzN6XCJcbiAgfSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvTW9uZ29kYjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb015c3FsID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29NeXNxbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGw6IFwiIzAwNTQ2QlwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yOS40NTYgMjQuMjc2Yy0xLjc0LS4wNDMtMy4wODguMTMxLTQuMjE5LjYxLS4zMjYuMTMtLjg0OC4xMy0uODkyLjU0My4xNzQuMTc0LjE5Ni40NTcuMzQ4LjY5Ni4yNjEuNDM1LjcxOCAxLjAyMiAxLjEzMSAxLjMyNy40NTcuMzQ4LjkxNC42OTYgMS4zOTIgMSAuODQ4LjUyMiAxLjgwNS44MjcgMi42MzEgMS4zNDkuNDguMzA0Ljk1Ny42OTUgMS40MzYgMS4wMjIuMjQuMTczLjM5MS40NTYuNjk2LjU2NXYtLjA2NWMtLjE1My0uMTk2LS4xOTYtLjQ3OS0uMzQ4LS42OTYtLjIxOC0uMjE4LS40MzUtLjQxMy0uNjUzLS42M2ExMC4zMTYgMTAuMzE2IDAgMDAtMi4yNjEtMi4xOTdjLS42OTYtLjQ3OS0yLjIxOS0xLjEzMS0yLjUwMS0xLjkzNmwtLjA0NC0uMDQzYy40NzktLjA0NCAxLjA0NC0uMjE4IDEuNS0uMzQ4Ljc0LS4xOTYgMS40MTQtLjE1MyAyLjE3NS0uMzQ4LjM0OC0uMDg3LjY5Ni0uMTk2IDEuMDQ0LS4zMDV2LS4xOTVjLS4zOTEtLjM5Mi0uNjc0LS45MTQtMS4wODctMS4yODQtMS4xMS0uOTU3LTIuMzI3LTEuODkyLTMuNTg4LTIuNjc0LS42NzUtLjQzNS0xLjU0NS0uNzE4LTIuMjYyLTEuMDg4LS4yNjEtLjEzLS42OTYtLjE5Ni0uODQ4LS40MTMtLjM5Mi0uNDc5LS42MS0xLjExLS44OTItMS42NzVhNTQuOTIyIDU0LjkyMiAwIDAxLTEuNzgzLTMuNzg0Yy0uMzkyLS44NDgtLjYzLTEuNjk2LTEuMTEtMi40NzktMi4yNC0zLjY5Ny00LjY3NS01LjkzNy04LjQxNi04LjEzNC0uODA0LS40NTYtMS43NjEtLjY1Mi0yLjc4My0uODkxLS41NDQtLjAyMi0xLjA4OC0uMDY1LTEuNjMxLS4wODctLjM0OC0uMTUyLS42OTYtLjU2Ni0xLS43NjEtMS4yNC0uNzgzLTQuNDM3LTIuNDgtNS4zNS0uMjQtLjU4OCAxLjQxNC44NyAyLjgwNiAxLjM3IDMuNTI0LjM3LjUuODQ4IDEuMDY1IDEuMTA5IDEuNjMuMTUyLjM3LjE5NS43NjIuMzQ3IDEuMTUzLjM0OC45NTcuNjc1IDIuMDIzIDEuMTMxIDIuOTE0LjI0LjQ1Ny41LjkzNi44MDUgMS4zNDkuMTc0LjIzOS40NzguMzQ4LjU0NC43NC0uMzA1LjQzNC0uMzI3IDEuMDg3LS41IDEuNjMtLjc4MyAyLjQ1OC0uNDc5IDUuNTAyLjYzIDcuMzA3LjM0OC41NDQgMS4xNzUgMS43NCAyLjI4NCAxLjI4NC45NzgtLjM5Mi43Ni0xLjYzMiAxLjA0My0yLjcxOS4wNjYtLjI2MS4wMjItLjQzNS4xNTMtLjYwOXYuMDQ0Yy4zMDQuNjA5LjYwOSAxLjE5Ni44OTEgMS44MDUuNjc1IDEuMDY1IDEuODQ5IDIuMTc0IDIuODI4IDIuOTE0LjUyMi4zOTEuOTM1IDEuMDY1IDEuNTg3IDEuMzA1di0uMDY2aC0uMDQzYy0uMTMtLjE5NS0uMzI3LS4yODItLjUtLjQzNS0uMzkyLS4zOS0uODI3LS44Ny0xLjEzMS0xLjMwNC0uOTE0LTEuMjE4LTEuNzE5LTIuNTY3LTIuNDM2LTMuOTU4LS4zNDgtLjY3NS0uNjUzLTEuNDE0LS45MzUtMi4wODgtLjEzLS4yNjEtLjEzLS42NTMtLjM0OC0uNzgzLS4zMjcuNDc4LS44MDUuODkyLTEuMDQ0IDEuNDc5LS40MTMuOTM1LS40NTcgMi4wODgtLjYxIDMuMjg0LS4wODYuMDIxLS4wNDMgMC0uMDg2LjA0My0uNjk2LS4xNzQtLjkzNS0uODkxLTEuMTk2LTEuNS0uNjUzLTEuNTQ1LS43NjEtNC4wMjQtLjE5Ni01LjgwNy4xNTItLjQ1Ny44MDUtMS44OTIuNTQ0LTIuMzI3LS4xMy0uNDEzLS41NjYtLjY1Mi0uODA1LS45NzlhOC43NjQgOC43NjQgMCAwMS0uNzgzLTEuMzkyYy0uNTIyLTEuMjE3LS43ODMtMi41NjYtMS4zNDgtMy43ODQtLjI2MS0uNTY1LS43MTgtMS4xNTItMS4wODctMS42NzQtLjQxNC0uNTg3LS44Ny0xLTEuMTk3LTEuNjk3LS4xMDgtLjIzOS0uMjYtLjYzLS4wODctLjg5MS4wNDQtLjE3NC4xMy0uMjQuMzA1LS4yODMuMjgzLS4yNCAxLjA4Ny4wNjUgMS4zNy4xOTYuODA1LjMyNiAxLjQ3OS42MyAyLjE1MyAxLjA4Ny4zMDQuMjE4LjYzLjYzMSAxLjAyMi43NGguNDU3Yy42OTYuMTUyIDEuNDc5LjA0MyAyLjEzMS4yMzkgMS4xNTMuMzcgMi4xOTYuOTEzIDMuMTMyIDEuNWExOS4yOTQgMTkuMjk0IDAgMDE2Ljc4NSA3LjQzOGMuMjYxLjUuMzcuOTU3LjYwOSAxLjQ3OS40NTcgMS4wNjYgMS4wMjIgMi4xNTMgMS40NzkgMy4xOTcuNDU2IDEuMDIyLjg5MSAyLjA2NiAxLjU0NCAyLjkxNC4zMjYuNDU3IDEuNjMuNjk2IDIuMjE4LjkzNS40MzUuMTk2IDEuMTEuMzcgMS41LjYxLjc0LjQ1NiAxLjQ4Ljk3OCAyLjE3NSAxLjQ3OC4zNDguMjYgMS40MzYuODA1IDEuNTAxIDEuMjR6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjI3MyA1LjM3OGMtLjM3IDAtLjYzLjA0My0uODkxLjEwOXYuMDQzaC4wNDNjLjE3NC4zNDguNDc5LjU4Ny42OTYuODkyLjE3NC4zNDguMzI2LjY5Ni41IDEuMDQ0bC4wNDQtLjA0NGMuMzA0LS4yMTcuNDU3LS41NjUuNDU3LTEuMDg3LS4xMzEtLjE1Mi0uMTUzLS4zMDUtLjI2MS0uNDU3LS4xMy0uMjE4LS40MTQtLjMyNi0uNTg4LS41elwiXG4gIH0pKSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb015c3FsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvTmdpbnggPSBmdW5jdGlvbiBFdWlJY29uTG9nb05naW54KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMxMTk2MzlcIixcbiAgICBkOiBcIk0xNiAwbDEzLjg1NiA4djE2TDE2IDMyIDIuMTQ0IDI0Vjh6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRkZcIixcbiAgICBmaWxsUnVsZTogXCJub256ZXJvXCIsXG4gICAgZDogXCJNMTEuMTcgMTMuNTEydjguMzc2YTEuNjA3IDEuNjA3IDAgMTEtMy4yMTUgMFY5LjYzMmMwLTEuNDMyIDEuNzMxLTIuMTQ5IDIuNzQ0LTEuMTM2bDkuNTEgOS41MTJWOS42MzJhMS42MDcgMS42MDcgMCAwMTMuMjE1IDB2MTIuMjU2YzAgMS40MzItMS43MzEgMi4xNDktMi43NDQgMS4xMzZsLTkuNTEtOS41MTJ6XCJcbiAgfSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvTmdpbng7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29PYnNlcnZhYmlsaXR5ID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29PYnNlcnZhYmlsaXR5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAgMzJINy4yMzhDMy43OTMgMzIgMSAyOC44NjUgMSAyNC45OThWMTVoOXYxN3pcIixcbiAgICBmaWxsOiBcIiNGMDRFOThcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsTmVnYXRpdmVcIixcbiAgICBkOiBcIk0xMCAzMmg5VjhoLTl6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zMSAzMmgtOVYwbDEuOTczLjAyNEMyNy44NjYuMDcyIDMxIDMuNzMxIDMxIDguMjI4VjMyelwiLFxuICAgIGZpbGw6IFwiIzA3Q1wiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvT2JzZXJ2YWJpbGl0eTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb09zcXVlcnkgPSBmdW5jdGlvbiBFdWlJY29uTG9nb09zcXVlcnkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjQTU5NkZGXCIsXG4gICAgZDogXCJNMzEuOTA3LjAzMnY3Ljk2OWwtNy45NTIgNy45NTFWNy45NjdMMzEuOTA3LjAzMlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMzMzXCIsXG4gICAgZDogXCJNMTYuMDAzLjAzMnY3Ljk2OWw3Ljk1MiA3Ljk1MVY3Ljk2N0wxNi4wMDMuMDMyXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNBNTk2RkZcIixcbiAgICBkOiBcIk0zMS45MjMgMzEuODU1aC03Ljk2OGwtNy45NTItNy45NTFoNy45ODVsNy45MzUgNy45NTFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzMzM1wiLFxuICAgIGQ6IFwiTTMxLjkyMyAxNS45NTJoLTcuOTY4bC03Ljk1MiA3Ljk1Mmg3Ljk4NWw3LjkzNS03Ljk1MlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjQTU5NkZGXCIsXG4gICAgZDogXCJNLjEgMzEuODcydi03Ljk2OGw3Ljk1Mi03Ljk1MnY3Ljk4NUwuMSAzMS44NzJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzMzM1wiLFxuICAgIGQ6IFwiTTE2LjAwNCAzMS44NzJ2LTcuOTY4bC03Ljk1Mi03Ljk1MnY3Ljk4NWw3Ljk1MiA3LjkzNVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjQTU5NkZGXCIsXG4gICAgZDogXCJNLjA4NC4wNDhoNy45NjhMMTYuMDA0IDhIOC4wMTlMLjA4NC4wNDhcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzMzM1wiLFxuICAgIGQ6IFwiTS4wODQgMTUuOTUyaDcuOTY4TDE2LjAwNCA4SDguMDE5TC4wODQgMTUuOTUyXCJcbiAgfSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvT3NxdWVyeTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGh0bWxJZEdlbmVyYXRvciB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb1BocCA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvUGhwKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBnZW5lcmF0ZUlkID0gaHRtbElkR2VuZXJhdG9yKCdsb2dvX3BocCcpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB4bWxuc1hsaW5rOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImRlZnNcIiwgbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdhJyksXG4gICAgZDogXCJNLjAyOCA3Ljg1NEMuMDI4IDMuNTM0IDYuNjg4LjAzIDE0LjkwMi4wM3MxNC44NzQgMy41MDMgMTQuODc0IDcuODI0YzAgNC4zMjItNi42NiA3LjgyNS0xNC44NzQgNy44MjUtOC4yMTUgMC0xNC44NzQtMy41MDMtMTQuODc0LTcuODI1XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnZCcpLFxuICAgIGQ6IFwiTTAgMTcuNDNoMzAuOTg3VjBIMHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdmJyksXG4gICAgZDogXCJNMCAxNy40M2gzMC45ODdWMEgwelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicmFkaWFsR3JhZGllbnRcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdiJyksXG4gICAgY3g6IFwiMzAuMDIlXCIsXG4gICAgY3k6IFwiODIuNDIyJVwiLFxuICAgIHI6IFwiMTI0LjgxNCVcIixcbiAgICBmeDogXCIzMC4wMiVcIixcbiAgICBmeTogXCI4Mi40MjIlXCIsXG4gICAgZ3JhZGllbnRUcmFuc2Zvcm06IFwibWF0cml4KC41MjYwNCAwIDAgMSAuMTQyIDApXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjQUVCMkQ1XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMzAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiNBRUIyRDVcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCI3NSVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzQ4NEM4OVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjEwMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzQ4NEM4OVwiXG4gIH0pKSksIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgdHJhbnNmb3JtOiBcIm1hdHJpeCgxIDAgMCAtMSAuMDI2IDI1LjQxMylcIlxuICB9LCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSguNTkyIC44NilcIlxuICB9LCBfX19FbW90aW9uSlNYKFwibWFza1wiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2MnKSxcbiAgICBmaWxsOiBcIiNmZmZcIlxuICB9LCBfX19FbW90aW9uSlNYKFwidXNlXCIsIHtcbiAgICB4bGlua0hyZWY6IFwiI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdhJykpXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnYicpLCBcIilcIiksXG4gICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiLFxuICAgIG1hc2s6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnYycpLCBcIilcIilcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTS4wMjggNy44NTRDLjAyOCAzLjUzNCA2LjY4OC4wMyAxNC45MDIuMDNzMTQuODc0IDMuNTAzIDE0Ljg3NCA3LjgyNGMwIDQuMzIyLTYuNjYgNy44MjUtMTQuODc0IDcuODI1LTguMjE1IDAtMTQuODc0LTMuNTAzLTE0Ljg3NC03LjgyNVwiXG4gIH0pKSksIF9fX0Vtb3Rpb25KU1goXCJtYXNrXCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnZScpLFxuICAgIGZpbGw6IFwiI2ZmZlwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJ1c2VcIiwge1xuICAgIHhsaW5rSHJlZjogXCIjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2QnKSlcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgbWFzazogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdlJyksIFwiKVwiKVxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjNzc3QkIzXCIsXG4gICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiLFxuICAgIGQ6IFwiTTE1LjQ5NCAxLjQ3MmM3Ljg5NCAwIDE0LjI5MyAzLjI0MyAxNC4yOTMgNy4yNDNzLTYuNCA3LjI0NC0xNC4yOTMgNy4yNDRjLTcuODk0IDAtMTQuMjkzLTMuMjQzLTE0LjI5My03LjI0NCAwLTQgNi40LTcuMjQzIDE0LjI5My03LjI0M1wiXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcIm1hc2tcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdnJyksXG4gICAgZmlsbDogXCIjZmZmXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInVzZVwiLCB7XG4gICAgeGxpbmtIcmVmOiBcIiNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnZicpKVxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsUnVsZTogXCJub256ZXJvXCIsXG4gICAgbWFzazogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdnJyksIFwiKVwiKVxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDAwXCIsXG4gICAgZDogXCJNOC43MDEgNy44MTdjLjY1IDAgMS4xMzQuMTIgMS40NC4zNTYuMzA0LjIzMy41MTMuNjM4LjYyMyAxLjIwMi4xMDMuNTI4LjA2NC44OTYtLjExNiAxLjA5NS0uMTgzLjIwMy0uNTguMzA2LTEuMTc3LjMwNkg4LjQzM2wtLjU3NS0yLjk1OWguODQzek01LjMxIDQuMTcyYS4xNjEuMTYxIDAgMDAtLjE1OS4xOTNsMS41MjQgNy44NGMuMDE1LjA3Ni4wODIuMTMxLjE1OS4xMzFoMy4yODRjMS4wMzMgMCAxLjgwMS0uMjggMi4yODQtLjgzMy40ODUtLjU1Ni42MzUtMS4zMzMuNDQ2LTIuMzA5YTMuNjg2IDMuNjg2IDAgMDAtLjM5NS0xLjA5OCAzLjY3NiAzLjY3NiAwIDAwLS43MjctLjkxIDMuMTg5IDMuMTg5IDAgMDAtMS4xOTctLjcxOGMtLjQzLS4xNC0uOTgzLS4yMS0xLjY0My0uMjFoLTEuMzNsLS4zOC0xLjk1NWEuMTYxLjE2MSAwIDAwLS4xNTgtLjEzSDUuMzA5elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkZGXCIsXG4gICAgZDogXCJNOC41NjYgMTAuNjE1aC45MDVjLjcyMiAwIC45NzItLjE1OCAxLjA1OC0uMjUzLjE0MS0uMTU3LjE2OC0uNDg3LjA3Ny0uOTU2LS4xMDItLjUyNC0uMjkxLS44OTYtLjU2My0xLjEwNS0uMjc3LS4yMTQtLjcyOS0uMzIyLTEuMzQxLS4zMjJoLS42NDhsLjUxMiAyLjYzNnptMS41NTEgMS44ODNINi44MzNhLjMyMy4zMjMgMCAwMS0uMzE3LS4yNjFMNC45OTIgNC4zOTZhLjMyMy4zMjMgMCAwMS4zMTctLjM4NWgxLjcwOGMuMTU1IDAgLjI4Ny4xMS4zMTcuMjYybC4zNTQgMS44MjNoMS4xOTdjLjY3NyAwIDEuMjQ3LjA3NCAxLjY5NC4yMi40Ni4xNDkuODgyLjQwMiAxLjI1Ni43NTIuMzEuMjg0LjU2NC42MDQuNzU4Ljk1LjE5My4zNDUuMzMxLjczMS40MTIgMS4xNDYuMiAxLjAyNy4wMzggMS44NS0uNDgyIDIuNDQ2LS41MTUuNTktMS4zMjUuODg4LTIuNDA2Ljg4OHpNNy42NjMgNy42NTZoMS4wMzljLjY4OCAwIDEuMjAxLjEzIDEuNTM4LjM5LjMzNy4yNTkuNTY1LjY5Mi42ODMgMS4yOTkuMTEzLjU4My4wNjEuOTk0LS4xNTUgMS4yMzMtLjIxNi4yNC0uNjQ4LjM2LTEuMjk3LjM2SDguM2wtLjYzOC0zLjI4MnptMi40NTQgNC41MmMuOTg5IDAgMS43MS0uMjYgMi4xNjItLjc3OS40NTMtLjUxOC41OS0xLjI0Mi40MS0yLjE3MmEzLjUxIDMuNTEgMCAwMC0uMzc4LTEuMDUgMy41MDIgMy41MDIgMCAwMC0uNjk1LS44NyAzLjAxNyAzLjAxNyAwIDAwLTEuMTM3LS42ODNjLS40MTctLjEzNS0uOTQ4LS4yMDMtMS41OTQtLjIwM0g3LjQyMmwtLjQwNS0yLjA4NUg1LjMwOWwxLjUyNCA3Ljg0MWgzLjI4NHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwMFwiLFxuICAgIGQ6IFwiTTE2Ljc2MyA2LjI1N2EuMTYxLjE2MSAwIDAwLS4xNTkuMTkybC42NzQgMy40N2MuMDY0LjMzLjA0OS41NjYtLjA0NC42NjYtLjA1Ny4wNjEtLjIyOC4xNjQtLjczMi4xNjRIMTUuMjhsLS44NDctNC4zNjFhLjE2MS4xNjEgMCAwMC0uMTU5LS4xMzFIMTIuNThhLjE2MS4xNjEgMCAwMC0uMTU5LjE5MmwxLjUyNCA3Ljg0MWMuMDE1LjA3Ni4wODIuMTMuMTU5LjEzaDEuNjk0YS4xNjEuMTYxIDAgMDAuMTU5LS4xOTFsLS4zNjgtMS44OTNoMS4zMTRjMSAwIDEuNjgtLjE3NiAyLjA3NS0uNTQuNDAzLS4zNy41MjktLjk2Mi4zNzQtMS43NmwtLjcxLTMuNjQ4YS4xNjEuMTYxIDAgMDAtLjE1OC0uMTMxaC0xLjcyMXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZGRlwiLFxuICAgIGQ6IFwiTTE1Ljc5OSAxNC41ODJoLTEuNjk1YS4zMjMuMzIzIDAgMDEtLjMxNy0uMjYxTDEyLjI2MyA2LjQ4YS4zMjMuMzIzIDAgMDEuMzE3LS4zODVoMS42OTVjLjE1NCAwIC4yODcuMTEuMzE3LjI2MmwuODIyIDQuMjNoMS4wODhjLjUwNCAwIC42MS0uMTA3LjYxNC0uMTEyLjAzLS4wMzMuMDctLjE4NS4wMDQtLjUyNmwtLjY3NC0zLjQ3YS4zMjMuMzIzIDAgMDEuMzE3LS4zODRoMS43MjFjLjE1NSAwIC4yODguMTEuMzE3LjI2MmwuNzEgMy42NDhjLjE2Ni44NTcuMDIzIDEuNS0uNDI0IDEuOTEtLjQyNi4zOTItMS4xNC41ODItMi4xODQuNTgyaC0xLjExOGwuMzMgMS43YS4zMjMuMzIzIDAgMDEtLjMxNi4zODVtMC0uMzIzbC0uNDA2LTIuMDg0aDEuNTFjLjk1IDAgMS42MDUtLjE2NiAxLjk2Ni0uNDk3LjM2LS4zMzIuNDY4LS44NjkuMzI0LTEuNjExbC0uNzA5LTMuNjQ5aC0xLjcyMWwuNjc0IDMuNDdjLjA3Ny4zOTQuMDQ4LjY2My0uMDg1LjgwNy0uMTMzLjE0My0uNDE2LjIxNS0uODUuMjE1aC0xLjM1NGwtLjg3My00LjQ5MkgxMi41OGwxLjUyNCA3Ljg0MWgxLjY5NVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDAwXCIsXG4gICAgZDogXCJNMjIuMDMzIDcuODE3Yy42NSAwIDEuMTM0LjEyIDEuNDQuMzU2LjMwNC4yMzMuNTEzLjYzOC42MjMgMS4yMDIuMTAzLjUyOC4wNjQuODk2LS4xMTYgMS4wOTUtLjE4My4yMDMtLjU4LjMwNi0xLjE3Ny4zMDZoLTEuMDM4bC0uNTc1LTIuOTU5aC44NDN6bS0zLjM5Mi0zLjY0NWEuMTYxLjE2MSAwIDAwLS4xNTkuMTkzbDEuNTI0IDcuODRjLjAxNS4wNzYuMDgyLjEzMS4xNTkuMTMxaDMuMjg0YzEuMDMzIDAgMS44MDEtLjI4IDIuMjg0LS44MzMuNDg1LS41NTYuNjM1LTEuMzMzLjQ0Ni0yLjMwOWEzLjY4OSAzLjY4OSAwIDAwLS4zOTUtMS4wOTggMy42NzYgMy42NzYgMCAwMC0uNzI3LS45MSAzLjE4OSAzLjE4OSAwIDAwLTEuMTk3LS43MThjLS40My0uMTQtLjk4My0uMjEtMS42NDMtLjIxaC0xLjMzbC0uMzgtMS45NTVhLjE2MS4xNjEgMCAwMC0uMTU4LS4xM0gxOC42NHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZGRlwiLFxuICAgIGQ6IFwiTTIxLjg5OCAxMC42MTVoLjkwNWMuNzIyIDAgLjk3Mi0uMTU4IDEuMDU4LS4yNTMuMTQxLS4xNTcuMTY4LS40ODcuMDc3LS45NTYtLjEwMi0uNTI0LS4yOTItLjg5Ni0uNTYzLTEuMTA1LS4yNzctLjIxNC0uNzI5LS4zMjItMS4zNDEtLjMyMmgtLjY0OGwuNTEyIDIuNjM2em0xLjU1MSAxLjg4M2gtMy4yODRhLjMyMy4zMjMgMCAwMS0uMzE3LS4yNjFsLTEuNTI0LTcuODQxYS4zMjMuMzIzIDAgMDEuMzE3LS4zODVoMS43MDhjLjE1NSAwIC4yODcuMTEuMzE3LjI2MmwuMzU0IDEuODIzaDEuMTk3Yy42NzcgMCAxLjI0Ny4wNzQgMS42OTQuMjIuNDYuMTQ5Ljg4Mi40MDIgMS4yNTYuNzUyLjMxLjI4NC41NjQuNjA0Ljc1OC45NS4xOTMuMzQ1LjMzMS43MzEuNDEyIDEuMTQ2LjIgMS4wMjcuMDM4IDEuODUtLjQ4MiAyLjQ0Ni0uNTE1LjU5LTEuMzI1Ljg4OC0yLjQwNi44ODh6bS0yLjQ1NC00Ljg0MmgxLjAzOWMuNjg4IDAgMS4yMDEuMTMgMS41MzguMzkuMzM3LjI1OS41NjUuNjkyLjY4MyAxLjI5OS4xMTMuNTgzLjA2MS45OTQtLjE1NSAxLjIzMy0uMjE2LjI0LS42NDguMzYtMS4yOTcuMzZoLTEuMTdsLS42MzgtMy4yODJ6bTIuNDU0IDQuNTJjLjk4OSAwIDEuNzEtLjI2IDIuMTYyLS43NzkuNDU0LS41MTguNTktMS4yNDIuNDEtMi4xNzJhMy41MSAzLjUxIDAgMDAtLjM3OC0xLjA1IDMuNTAyIDMuNTAyIDAgMDAtLjY5NS0uODcgMy4wMTcgMy4wMTcgMCAwMC0xLjEzNy0uNjgzYy0uNDE3LS4xMzUtLjk0OC0uMjAzLTEuNTk0LS4yMDNoLTEuNDYzbC0uNDA1LTIuMDg1aC0xLjcwOGwxLjUyNCA3Ljg0MWgzLjI4NHpcIlxuICB9KSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvUGhwOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvUG9zdGdyZXMgPSBmdW5jdGlvbiBFdWlJY29uTG9nb1Bvc3RncmVzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwMFwiLFxuICAgIGQ6IFwiTTMxLjg3NiAxOS4xNjJjLS4xOTItLjU2NC0uNjk1LS45NTYtMS4zNDUtMS4wNS0uMzA2LS4wNDUtLjY1Ny0uMDI2LTEuMDcyLjA1Ny0uNzI0LjE0NS0xLjI2MS4yLTEuNjU0LjIxMSAxLjQ4LTIuNDIyIDIuNjgzLTUuMTg1IDMuMzc2LTcuNzg1IDEuMTItNC4yMDUuNTIxLTYuMTItLjE3OC02Ljk4Ny0xLjg1LTIuMjkzLTQuNTUxLTMuNTI1LTcuODA5LTMuNTYzYTE0LjIzOSAxNC4yMzkgMCAwMC00LjA2LjU1MSAxNS41NzMgMTUuNTczIDAgMDAtMi4zNzMtLjIxYy0xLjU2Ny0uMDI0LTIuOTUyLjMwNy00LjEzNS45ODhhMTkuMzM0IDE5LjMzNCAwIDAwLTIuOTItLjcxMUM2Ljg1LjIwOCA0LjU0OS41NjMgMi44NjYgMS43MTYuODI4IDMuMTEyLS4xMTcgNS41MzcuMDU4IDguOTI2LjExMyAxMCAuNzM0IDEzLjI3MyAxLjcxIDE2LjM3NmMuNTYxIDEuNzg0IDEuMTYgMy4yNjYgMS43OCA0LjQwNC44NzggMS42MTQgMS44MTggMi41NjQgMi44NzMgMi45MDYuNTkxLjE5IDEuNjY2LjMyNSAyLjc5Ni0uNTg4LjE0My4xNjguMzM0LjMzNS41ODguNDkuMzIyLjE5OC43MTYuMzU5IDEuMTA5LjQ1NCAxLjQxOC4zNDQgMi43NDUuMjU4IDMuODc4LS4yMjQuMDA3LjE5NS4wMTMuMzgyLjAxNy41NDMuMDA4LjI2Mi4wMTUuNTE4LjAyNS43NTguMDY3IDEuNjIuMTgxIDIuODgxLjUxOCAzLjc2M2wuMDcuMjAxYy4xNjguNS40NDkgMS4zMzUgMS4xNjQgMS45OS43NC42NzcgMS42MzcuODg1IDIuNDU3Ljg4NS40MTIgMCAuODA0LS4wNTIgMS4xNDktLjEyNCAxLjIyNy0uMjU1IDIuNjIxLS42NDMgMy42My0yLjAzNi45NTMtMS4zMTYgMS40MTctMy4yOTkgMS41LTYuNDIzbC4wMzEtLjI1My4wMi0uMTY1LjIyNS4wMTkuMDU4LjAwNGMxLjI1LjA1NSAyLjc3OS0uMjAyIDMuNzE4LS42MjUuNzQxLS4zMzQgMy4xMTktMS41NSAyLjU1OS0zLjE5NFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMzM2NzkxXCIsXG4gICAgZDogXCJNMjkuNzM4IDE5LjQ4MWMtMy43MTcuNzQ0LTMuOTczLS40NzYtMy45NzMtLjQ3NiAzLjkyNS01LjY0OCA1LjU2Ni0xMi44MTcgNC4xNS0xNC41NzFDMjYuMDUyLS4zNTIgMTkuMzY1IDEuOTEgMTkuMjU0IDEuOTdsLS4wMzYuMDA2YTEzLjY1NyAxMy42NTcgMCAwMC0yLjQ4LS4yNWMtMS42ODItLjAyNy0yLjk1OC40MjctMy45MjcgMS4xNCAwIDAtMTEuOTI4LTQuNzY2LTExLjM3NCA1Ljk5Mi4xMTggMi4yODkgMy4zODMgMTcuMzE4IDcuMjc4IDEyLjc3OWE3MC40NDMgNzAuNDQzIDAgMDEyLjc5OC0zLjA2NGMuNjgzLjQ0IDEuNTAxLjY2NSAyLjM1OC41ODRsLjA2Ny0uMDU1Yy0uMDIuMjA2LS4wMTEuNDA4LjAyNy42NDctMS4wMDQgMS4wODctLjcwOSAxLjI3Ny0yLjcxNCAxLjY3OC0yLjAzLjQwNS0uODM3IDEuMTI3LS4wNiAxLjMxNi45NDQuMjI5IDMuMTI3LjU1MyA0LjYwMi0xLjQ1bC0uMDU4LjIzYy4zOTMuMzA0LjY2OSAxLjk4NS42MjMgMy41MDgtLjA0NyAxLjUyNC0uMDc4IDIuNTcuMjMyIDMuMzg3LjMxLjgxNy42MTkgMi42NTUgMy4yNTUgMi4xMDcgMi4yMDMtLjQ1OCAzLjM0NS0xLjY0NCAzLjUwMy0zLjYyMy4xMTMtMS40MDcuMzY4LTEuMTk5LjM4NC0yLjQ1N2wuMjA1LS41OTVjLjIzNi0xLjkwNy4wMzctMi41MjIgMS4zOTQtMi4yMzZsLjMzLjAyOGMxIC4wNDQgMi4zMDctLjE1NiAzLjA3NC0uNTAyIDEuNjUyLS43NDMgMi42MzItMS45ODUgMS4wMDMtMS42NTlcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZGRlwiLFxuICAgIGQ6IFwiTTEzLjUxIDkuODgyYy0uMzM1LS4wNDUtLjYzOS0uMDA0LS43OTIuMTFhLjI4LjI4IDAgMDAtLjEyLjE4N2MtLjAyLjEzMy4wNzcuMjgyLjEzNi4zNTguMTY5LjIxNi40MTQuMzY1LjY1OC4zOTguMDM1LjAwNC4wNy4wMDcuMTA1LjAwNy40MDUgMCAuNzc0LS4zMDcuODA3LS41MzMuMDQtLjI4My0uMzgzLS40NzItLjc5NS0uNTI3bTExLjA5OS4wMDljLS4wMzItLjIyMi0uNDQtLjI4NS0uODI2LS4yMzMtLjM4Ni4wNTItLjc2LjIyLS43My40NDMuMDI2LjE3My4zNDguNDY4LjczLjQ2OGEuNzE4LjcxOCAwIDAwLjA5Ny0uMDA2Ljk0Ny45NDcgMCAwMC41My0uMjgxYy4xMzUtLjEzOC4yMTMtLjI5MS4xOTktLjM5MVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkZGXCIsXG4gICAgZDogXCJNMzAuOTc1IDE5LjM5N2MtLjE0Mi0uNDE2LS41OTgtLjU1LTEuMzU2LS4zOTgtMi4yNS40NS0zLjA1Ni4xMzktMy4zMjEtLjA1IDEuNzUtMi41ODQgMy4xODktNS43MDggMy45NjUtOC42MjMuMzY4LTEuMzguNTctMi42NjMuNTg3LTMuNzA4LjAxOS0xLjE0Ny0uMTgzLTEuOTktLjU5OC0yLjUwNS0xLjY3NS0yLjA3NS00LjEzNC0zLjE4OS03LjExLTMuMjItMi4wNDctLjAyMi0zLjc3NS40ODYtNC4xMS42MjlhMTAuNTQ5IDEwLjU0OSAwIDAwLTIuMzEzLS4yODhjLTEuNTM2LS4wMjQtMi44NjQuMzMyLTMuOTYzIDEuMDZhMTguMTMxIDE4LjEzMSAwIDAwLTMuMjItLjgyYy0yLjYxLS40MDctNC42ODMtLjA5OC02LjE2My45MThDMS42MDggMy42MDUuNzkzIDUuNzczLjk1MSA4LjgzNmMuMDUzIDEuMDMuNjU4IDQuMiAxLjYxNCA3LjIzNiAxLjI1OCAzLjk5NiAyLjYyNSA2LjI1NyA0LjA2MyA2LjcyMy4xNjkuMDU0LjM2My4wOTIuNTc3LjA5Mi41MjUgMCAxLjE2OC0uMjMgMS44MzgtMS4wMWE2NC44OTQgNjQuODk0IDAgMDEyLjUzMi0yLjc3OCA0LjE4IDQuMTggMCAwMDEuODIyLjQ3NWwuMDA1LjA0OGMtLjExLjEyNy0uMjE3LjI1NS0uMzIxLjM4NS0uNDQuNTQyLS41MzIuNjU1LTEuOTUuOTM4LS40MDMuMDgtMS40NzMuMjk0LTEuNDg5IDEuMDIyLS4wMTcuNzk1IDEuMjY2IDEuMTMgMS40MTIgMS4xNjUuNTA5LjEyMyAxIC4xODQgMS40NjcuMTg0IDEuMTM4IDAgMi4xNC0uMzYzIDIuOTQtMS4wNjQtLjAyNSAyLjgzNC4wOTcgNS42MjguNDQ4IDYuNDc5LjI4OC42OTYuOTkgMi40IDMuMjA4IDIuMzk5YTUuMyA1LjMgMCAwMDEuMDc4LS4xMTljMi4zMTUtLjQ4IDMuMzItMS40NzMgMy43MS0zLjY2LjIwOC0xLjE3LjU2NS0zLjk2MS43MzMtNS40NTkuMzU0LjEwNy44MS4xNTYgMS4zMDQuMTU2IDEuMDI5IDAgMi4yMTYtLjIxMiAyLjk2MS0uNTQ3LjgzNy0uMzc3IDIuMzQ2LTEuMyAyLjA3Mi0yLjEwNHpNMjUuNDYyIDkuMjc4Yy0uMDA4LjQ0Mi0uMDcuODQ0LS4xMzcgMS4yNjItLjA3Mi40NTEtLjE0NS45MTctLjE2NCAxLjQ4Mi0uMDE5LjU1LjA1MiAxLjEyMy4xMiAxLjY3Ni4xNCAxLjExOC4yODIgMi4yNjgtLjI2OSAzLjQwM2E0LjM3IDQuMzcgMCAwMS0uMjQzLS40ODVjLS4wNjktLjE2MS0uMjE3LS40Mi0uNDIzLS43NzctLjgtMS4zOS0yLjY3My00LjY0OC0xLjcxNC01Ljk3Ny4yODYtLjM5NiAxLjAxLS44MDMgMi44My0uNTg0em0tMi4yMDYtNy40OWMyLjY2Ny4wNTggNC43NzcgMS4wMjUgNi4yNyAyLjg3NiAxLjE0NiAxLjQyLS4xMTYgNy44NzktMy43NjcgMTMuNDVsLS4xMTEtLjEzNS0uMDQ2LS4wNTZjLjk0My0xLjUxLjc1OS0zLjAwNi41OTUtNC4zMzEtLjA2OC0uNTQ0LS4xMzItMS4wNTgtLjExNS0xLjU0MS4wMTYtLjUxMS4wODYtLjk1LjE1NC0xLjM3NS4wODItLjUyMi4xNjctMS4wNjMuMTQ0LTEuNzAxYS42ODQuNjg0IDAgMDAuMDE1LS4yNGMtLjA2LS42MTEtLjc4LTIuNDQxLTIuMjQ3LTQuMDk4YTEwLjA5NCAxMC4wOTQgMCAwMC0zLjU3Mi0yLjYwNCAxMi40MDcgMTIuNDA3IDAgMDEyLjY4LS4yNDR6TTguMzM0IDIxLjMwN2MtLjczNy44Ni0xLjI0Ni42OTUtMS40MTQuNjQxLTEuMDkxLS4zNTMtMi4zNTctMi41OS0zLjQ3NC02LjEzNi0uOTY2LTMuMDY5LTEuNTMtNi4xNTUtMS41NzUtNy4wMi0uMTQxLTIuNzM3LjU0My00LjY0NCAyLjAzMy01LjY2OSAyLjQyNi0xLjY2OCA2LjQxNC0uNjcgOC4wMTYtLjE2My0uMDIzLjAyMi0uMDQ3LjA0Mi0uMDcuMDY1LTIuNjMgMi41NzUtMi41NjcgNi45NzQtMi41NiA3LjI0MyAwIC4xMDQuMDA4LjI1MS4wMi40NTMuMDQ2Ljc0LjEzIDIuMTE3LS4wOTUgMy42NzctLjIwOSAxLjQ1LjI1MiAyLjg2OCAxLjI2NCAzLjg5Mi4xMDQuMTA1LjIxMy4yMDUuMzI3LjMtLjQ1LjQ2Ny0xLjQzIDEuNTAyLTIuNDcyIDIuNzE3em0yLjgxLTMuNjM1Yy0uODE2LS44MjYtMS4xODYtMS45NzQtMS4wMTctMy4xNS4yMzgtMS42NDguMTUtMy4wODMuMTAzLTMuODU0bC0uMDE2LS4yNzdjLjM4NC0uMzMgMi4xNjUtMS4yNTUgMy40MzQtLjk3My41OC4xMjkuOTMyLjUxMSAxLjA4IDEuMTcuNzU5IDMuNDA2LjEgNC44MjUtLjQzIDUuOTY2LS4xMDkuMjM1LS4yMTIuNDU4LS4zLjY4N2wtLjA2OC4xNzhjLS4xNzMuNDUtLjMzNC44NjctLjQzNCAxLjI2NGEzLjMyNSAzLjMyNSAwIDAxLTIuMzUyLTEuMDExem0uMTMzIDQuNTk0YTIuMDcgMi4wNyAwIDAxLS42MTQtLjI1NmMuMTExLS4wNTEuMzEtLjEyLjY1NC0uMTkgMS42NjgtLjMzMiAxLjkyNS0uNTY3IDIuNDg3LTEuMjYuMTMtLjE1OC4yNzUtLjMzOC40NzgtLjU1Ny4zMDEtLjMyOC40NC0uMjcyLjY5LS4xNzIuMjAyLjA4Mi40LjMyOC40OC41OTkuMDM3LjEyOC4wOC4zNy0uMDYuNTYtMS4xNzQgMS41OTUtMi44ODYgMS41NzQtNC4xMTUgMS4yNzZ6bTguNzI1IDcuODczYy0yLjA0LjQyNC0yLjc2MS0uNTg2LTMuMjM3LTEuNzQtLjMwOC0uNzQ0LS40NTktNC4xMDItLjM1MS03LjgxYS40MzQuNDM0IDAgMDAtLjAyLS4xNDMgMS44MjMgMS44MjMgMCAwMC0uMDU3LS4yNjJjLS4xNi0uNTQtLjU0OC0uOTktMS4wMTMtMS4xNzgtLjE4NS0uMDc0LS41MjUtLjIxLS45MzMtLjExLjA4Ny0uMzQ3LjIzOC0uNzQuNDAyLTEuMTY1bC4wNjgtLjE3OGMuMDc4LS4yMDIuMTc1LS40MS4yNzctLjYzMi41NTQtMS4xOTQgMS4zMTMtMi44MjkuNDktNi41MjItLjMwOS0xLjM4NC0xLjM0LTIuMDYtMi45MDEtMS45MDMtLjkzNi4wOTQtMS43OTMuNDYtMi4yMi42N2E3LjI1NSA3LjI1NSAwIDAwLS4yNTUuMTMyYy4xMi0xLjM5NC41Ny00IDIuMjU1LTUuNjQ3IDEuMDYyLTEuMDM4IDIuNDc1LTEuNTUgNC4xOTYtMS41MjMgMy4zOTMuMDU0IDUuNTY5IDEuNzQyIDYuNzk2IDMuMTUgMS4wNTggMS4yMTEgMS42MzEgMi40MzMgMS44NiAzLjA5MS0xLjcyLS4xNy0yLjg4OS4xNi0zLjQ4Mi45ODItMS4yOSAxLjc4Ny43MDYgNS4yNTcgMS42NjUgNi45MjQuMTc1LjMwNi4zMjcuNTcuMzc1LjY4Mi4zMTIuNzM0LjcxNiAxLjIyNCAxLjAxMiAxLjU4Mi4wOS4xMS4xNzguMjE1LjI0NS4zMDgtLjUyMS4xNDYtMS40NTYuNDgyLTEuMzcxIDIuMTY0LS4wNjkuODQzLS41NTggNC43OTMtLjgwNiA2LjE4OS0uMzI4IDEuODQzLTEuMDI4IDIuNTMtMi45OTUgMi45Mzl6bTguNTEzLTkuNDQ3Yy0uNTMyLjI0LTEuNDI0LjQyLTIuMjcuNDU4LS45MzUuMDQzLTEuNDExLS4xMDEtMS41MjMtLjE5LS4wNTMtMS4wNDguMzUtMS4xNTcuNzc1LTEuMjczYTMuMzUgMy4zNSAwIDAwLjE5NS0uMDU4Yy4wNC4wMzEuMDgyLjA2Mi4xMy4wOTIuNzUuNDgxIDIuMDkxLjUzMyAzLjk4NC4xNTRsLjAyLS4wMDRjLS4yNTUuMjMyLS42OTIuNTQyLTEuMzEuODIxelwiXG4gIH0pKSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb1Bvc3RncmVzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvUHJvbWV0aGV1cyA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvUHJvbWV0aGV1cyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0U2NTIyQ1wiLFxuICAgIGQ6IFwiTTE1LjkwNy4xODdDNy4xMjIuMTg3IDAgNy4zMDggMCAxNi4wOTNTNy4xMjIgMzIgMTUuOTA3IDMyYzguNzg0IDAgMTUuOTA2LTcuMTIxIDE1LjkwNi0xNS45MDZTMjQuNjkuMTg3IDE1LjkwNy4xODd6bTAgMjkuNzdjLTIuNSAwLTQuNTI2LTEuNjctNC41MjYtMy43MjloOS4wNTFjMCAyLjA2LTIuMDI2IDMuNzMtNC41MjUgMy43M3ptNy40NzUtNC45NjNIOC40M3YtMi43MTFoMTQuOTV2Mi43MXptLS4wNTQtNC4xMDdIOC40NzNjLS4wNS0uMDU3LS4xLS4xMTMtLjE0Ny0uMTctMS41My0xLjg1OS0xLjg5MS0yLjgyOS0yLjI0MS0zLjgxOC0uMDA2LS4wMzIgMS44NTUuMzggMy4xNzYuNjc4IDAgMCAuNjc5LjE1NyAxLjY3Mi4zMzgtLjk1My0xLjExOC0xLjUyLTIuNTM5LTEuNTItMy45OTEgMC0zLjE4OSAyLjQ0Ni01Ljk3NSAxLjU2NC04LjIyNy44NTguMDcgMS43NzcgMS44MTIgMS44MzkgNC41MzcuOTEzLTEuMjYyIDEuMjk1LTMuNTY2IDEuMjk1LTQuOTc4IDAtMS40NjMuOTYzLTMuMTYxIDEuOTI3LTMuMjItLjg2IDEuNDE3LjIyMyAyLjYzIDEuMTg0IDUuNjQyLjM2MSAxLjEzMi4zMTUgMy4wMzUuNTk0IDQuMjQzLjA5Mi0yLjUwOC41MjMtNi4xNjcgMi4xMTQtNy40My0uNzAyIDEuNTkxLjEwNCAzLjU4MS42NTUgNC41MzguODg5IDEuNTQ0IDEuNDI4IDIuNzE0IDEuNDI4IDQuOTI2IDAgMS40ODMtLjU0OCAyLjg4LTEuNDcyIDMuOTcxIDEuMDUtLjE5NyAxLjc3Ni0uMzc0IDEuNzc2LS4zNzRsMy40MTEtLjY2NnMtLjQ5NSAyLjAzOC0yLjQgNC4wMDF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29Qcm9tZXRoZXVzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvUmFiYml0bXEgPSBmdW5jdGlvbiBFdWlJY29uTG9nb1JhYmJpdG1xKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRjYwXCIsXG4gICAgZDogXCJNMzAuMDgzIDEzLjE5N2gtOS44NzhjLS43OS0uMDg4LTEuMzkxLS43NC0xLjM5MS0xLjUwOFYxLjk3YzAtLjgzLS43MTgtMS40OTUtMS41OTUtMS40OTVoLTMuNDU2Yy0uODg1IDAtMS41OTUuNjcyLTEuNTk1IDEuNDk1djkuODJjLS4wNDMuNzQtLjY5NiAxLjMzOC0xLjQ3OCAxLjQwNkg4LjEwMmMtLjc2LS4wODgtMS4zNDgtLjY4Ni0xLjM5OC0xLjQwNlYxLjk3YzAtLjgzLS43MTgtMS40OTUtMS41OTUtMS40OTVIMS42NTJDLjc2OC40NzYuMDU4IDEuMTQ4LjA1OCAxLjk3djI4LjM1OGMwIC44My43MTcgMS40OTUgMS41OTQgMS40OTVoMjguNDM5Yy44ODQgMCAxLjU5NC0uNjczIDEuNTk0LTEuNDk1VjE0LjY5MmMtLjAwNy0uODI5LS43MTgtMS40OTUtMS42MDItMS40OTV6bS00LjU1IDEwLjcyNGMwIC44MjktLjcxOCAxLjQ5NS0xLjU5NSAxLjQ5NUgyMC40OGMtLjg4NCAwLTEuNTk1LS42NzMtMS41OTUtMS40OTV2LTMuMDU4YzAtLjgzLjcxOC0xLjQ5NSAxLjU5NS0xLjQ5NWgzLjQ1N2MuODg0IDAgMS41OTQuNjcyIDEuNTk0IDEuNDk1djMuMDU4elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvUmFiYml0bXE7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29SZWRpcyA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvUmVkaXMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDAgMylcIixcbiAgICBmaWxsOiBcIm5vbmVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMzAuNTk0IDIwLjc5MWMtMS42ODkuODc1LTEwLjQzOCA0LjQ1MS0xMi4zIDUuNDE2LTEuODYzLjk2Ni0yLjg5OC45NTYtNC4zNy4yNTctMS40NzEtLjY5OS0xMC43ODItNC40MzctMTIuNDYtNS4yMzQtLjgzOC0uMzk5LTEuMjc4LS43MzUtMS4yNzgtMS4wNTJ2LTMuMThzMTIuMTIxLTIuNjIzIDE0LjA3OC0zLjMyYzEuOTU3LS42OTkgMi42MzYtLjcyNCA0LjMwMS0uMTE4IDEuNjY2LjYwNyAxMS42MjMgMi4zOTMgMTMuMjcgMi45OTJsLS4wMDEgMy4xMzVjMCAuMzE0LS4zOC42NTktMS4yNCAxLjEwNHpcIixcbiAgICBmaWxsOiBcIiNBNDFFMTFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMwLjU5NCAxNy42MWMtMS42ODkuODc1LTEwLjQzOCA0LjQ1MS0xMi4zIDUuNDE3LTEuODYzLjk2NS0yLjg5OC45NTYtNC4zNy4yNTYtMS40NzEtLjY5OC0xMC43ODItNC40MzgtMTIuNDYtNS4yMzQtMS42NzYtLjc5Ny0xLjcxMi0xLjM0NS0uMDY0LTEuOTg3IDEuNjQ3LS42NDEgMTAuOTA3LTQuMjUyIDEyLjg2NC00Ljk1IDEuOTU3LS42OTggMi42MzYtLjcyMyA0LjMwMS0uMTE3IDEuNjY2LjYwNyAxMC4zNjMgNC4wNDggMTIuMDA5IDQuNjQ3IDEuNjQ2LjYgMS43MSAxLjA5My4wMiAxLjk2OHpcIixcbiAgICBmaWxsOiBcIiNEODJDMjBcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMwLjU5NCAxNS42MDZjLTEuNjg5Ljg3NS0xMC40MzggNC40NS0xMi4zIDUuNDE2LTEuODYzLjk2NS0yLjg5OC45NTYtNC4zNy4yNTctMS40NzEtLjctMTAuNzgyLTQuNDM4LTEyLjQ2LTUuMjM1LS44MzgtLjM5OC0xLjI3OC0uNzM0LTEuMjc4LTEuMDUxdi0zLjE4UzEyLjMwNyA5LjE5IDE0LjI2NCA4LjQ5MmMxLjk1Ny0uNjk4IDIuNjM2LS43MjMgNC4zMDEtLjExNyAxLjY2Ni42MDYgMTEuNjIzIDIuMzkyIDEzLjI3IDIuOTkxbC0uMDAxIDMuMTM1YzAgLjMxNS0uMzguNjYtMS4yNCAxLjEwNXpcIixcbiAgICBmaWxsOiBcIiNBNDFFMTFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMwLjU5NCAxMi40MjVjLTEuNjg5Ljg3NS0xMC40MzggNC40NS0xMi4zIDUuNDE2LTEuODYzLjk2Ni0yLjg5OC45NTYtNC4zNy4yNTctMS40NzEtLjY5OS0xMC43ODItNC40MzgtMTIuNDYtNS4yMzUtMS42NzYtLjc5Ni0xLjcxMi0xLjM0NS0uMDY0LTEuOTg2IDEuNjQ3LS42NDEgMTAuOTA3LTQuMjUzIDEyLjg2NC00Ljk1IDEuOTU3LS42OTggMi42MzYtLjcyNCA0LjMwMS0uMTE3IDEuNjY2LjYwNiAxMC4zNjMgNC4wNDcgMTIuMDA5IDQuNjQ2IDEuNjQ2LjYgMS43MSAxLjA5NC4wMiAxLjk2OXpcIixcbiAgICBmaWxsOiBcIiNEODJDMjBcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMwLjU5NCAxMC4yMjhjLTEuNjg5Ljg3NS0xMC40MzggNC40NTEtMTIuMyA1LjQxNy0xLjg2My45NjUtMi44OTguOTU1LTQuMzcuMjU2LTEuNDcxLS42OTktMTAuNzgyLTQuNDM4LTEyLjQ2LTUuMjM0Qy42MjcgMTAuMjY4LjE4NyA5LjkzMi4xODcgOS42MTV2LTMuMThzMTIuMTIxLTIuNjIzIDE0LjA3OC0zLjMyYzEuOTU3LS42OTkgMi42MzYtLjcyNCA0LjMwMS0uMTE3IDEuNjY2LjYwNiAxMS42MjMgMi4zOTEgMTMuMjcgMi45OWwtLjAwMSAzLjEzNmMwIC4zMTQtLjM4LjY1OS0xLjI0IDEuMTA0elwiLFxuICAgIGZpbGw6IFwiI0E0MUUxMVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMzAuNTk0IDcuMDQ3Yy0xLjY4OS44NzUtMTAuNDM4IDQuNDUxLTEyLjMgNS40MTctMS44NjMuOTY1LTIuODk4Ljk1NS00LjM3LjI1Ni0xLjQ3MS0uNjk5LTEwLjc4Mi00LjQzNy0xMi40Ni01LjIzNEMtLjIxMSA2LjY4OS0uMjQ3IDYuMTQgMS40IDUuNDk5UzEyLjMwNyAxLjI0NyAxNC4yNjQuNTVjMS45NTctLjcgMi42MzYtLjcyNCA0LjMwMS0uMTE4IDEuNjY2LjYwNyAxMC4zNjMgNC4wNDggMTIuMDA5IDQuNjQ3IDEuNjQ2LjYgMS43MSAxLjA5My4wMiAxLjk2OHpcIixcbiAgICBmaWxsOiBcIiNEODJDMjBcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZGRlwiLFxuICAgIGQ6IFwiTTIwLjE1NyAzLjk4NWwtMi43NDIuMjgzLS42MTQgMS40NjgtLjk5Mi0xLjYzOC0zLjE2Ni0uMjgzIDIuMzYyLS44NDctLjcwOC0xLjMgMi4yMTIuODYgMi4wODUtLjY4LS41NjMgMS4zNDV6bS0zLjUyIDcuMTIzbC01LjExOC0yLjExIDcuMzM0LTEuMTE5elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwiZWxsaXBzZVwiLCB7XG4gICAgZmlsbDogXCIjRkZGXCIsXG4gICAgY3g6IDkuNTQxLFxuICAgIGN5OiA2LjMxMSxcbiAgICByeDogMy45MixcbiAgICByeTogMS41MVxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzdBMEMwMFwiLFxuICAgIGQ6IFwiTTIzLjM5OCA0LjM4Nmw0LjM0IDEuNzA1LTQuMzM2IDEuNzAzelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjQUQyMTE1XCIsXG4gICAgZDogXCJNMTguNTk2IDYuMjc0bDQuODAyLTEuODg4LjAwNCAzLjQwOC0uNDcxLjE4M3pcIlxuICB9KSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29SZWRpczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb1NlY3VyaXR5ID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29TZWN1cml0eShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkgNy4wMDhWMGgyMHYxNi43NDRjMCAzLjkxMy02LjM3OCA2LjQ3Ny05LjAxNSA3LjI1NlY3LjAwOEg5elwiLFxuICAgIGZpbGw6IFwiI0ZBNzQ0RVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMyAyMC4wNzNWMTBoMTR2MjJDNy42NjcgMjcuOTggMyAyNC4wMDQgMyAyMC4wNzN6XCIsXG4gICAgZmlsbDogXCIjMURCQUIwXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05IDEwaDh2MTRjLTIuOTgzLTEuMTQtOC0zLjc1Ni04LTcuMDQzVjEwelwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsTmVnYXRpdmVcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb1NlY3VyaXR5OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvU2l0ZVNlYXJjaCA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvU2l0ZVNlYXJjaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkE3NDRFXCIsXG4gICAgZDogXCJNMjcuMDUgMTBoLTcuMzRsLTExIDIyczE1LjY5Ni00Ljk2IDIxLjg1NS0xNi4wNzZDMzIuMDM3IDEzLjI2NiAzMC4wODggMTAgMjcuMDUgMTBcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwQkZCM1wiLFxuICAgIGQ6IFwiTTIxLjM1NSAwSDcuNTMzTC40MjcgMTQuMjExQy0uOTAzIDE2Ljg3MSAxLjAzMiAyMCA0LjAwNCAyMGg3LjM1MWwxMC0yMHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsTmVnYXRpdmVcIixcbiAgICBkOiBcIk0yLjUzMyAxMEwuNDI4IDE0LjIxMUMtLjkwMyAxNi44NzEgMS4wMzIgMjAgNC4wMDUgMjBoNy4zNWw1LTEwSDIuNTMzelwiXG4gIH0pKSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb1NpdGVTZWFyY2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29Ta2V0Y2ggPSBmdW5jdGlvbiBFdWlJY29uTG9nb1NrZXRjaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGw6IFwibm9uZVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRkFFMDBcIixcbiAgICBkOiBcIk0xNiAzMkwwIDExLjQ1NGw2LjkzMS0xMC4zOEwxNiAwbDkuMDY5IDEuMDc0TDMyIDExLjQ1NHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0VDNkMwMFwiLFxuICAgIGQ6IFwiTTE2IDMyTDAgMTEuNDU0aDMyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkZBRTAwXCIsXG4gICAgZDogXCJNMTYgMzJMNi40NzcgMTEuNDU0aDE5LjA0NXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZGRUZCNFwiLFxuICAgIGQ6IFwiTTE2IDBMNi40NzcgMTEuNDU0aDE5LjA0NXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZGQUUwMFwiLFxuICAgIGQ6IFwiTTYuOTMyIDEuMDc0TDMuMzY5IDYuMy4wMDEgMTEuNDU0aDYuNTQyek0yNS4wNjkgMS4wNzRMMjguNjMyIDYuMyAzMiAxMS40NTRoLTYuNTQyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkVEMzA1XCIsXG4gICAgZDogXCJNNi45MzEgMS4wNzRsLS40NTMgMTAuMzhMMTYgMHpNMjUuMDY5IDEuMDc0bC40NTMgMTAuMzhMMTYgMHpcIlxuICB9KSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29Ta2V0Y2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29TbGFjayA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvU2xhY2soX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRTAxRTVBXCIsXG4gICAgZDogXCJNNi44MTMgMjAuMThhMy4zMzcgMy4zMzcgMCAwMS0zLjMzIDMuMzMgMy4zMzcgMy4zMzcgMCAwMS0zLjMyOC0zLjMzIDMuMzM3IDMuMzM3IDAgMDEzLjMyOS0zLjMyOWgzLjMyOXYzLjMzem0xLjY3NyAwYTMuMzM3IDMuMzM3IDAgMDEzLjMzLTMuMzI5IDMuMzM3IDMuMzM3IDAgMDEzLjMyOCAzLjMzdjguMzM1YTMuMzM3IDMuMzM3IDAgMDEtMy4zMjkgMy4zMjkgMy4zMzcgMy4zMzcgMCAwMS0zLjMyOS0zLjMzVjIwLjE4elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMzZDNUYwXCIsXG4gICAgZDogXCJNMTEuODIgNi44MTNhMy4zMzcgMy4zMzcgMCAwMS0zLjMzLTMuMzNBMy4zMzcgMy4zMzcgMCAwMTExLjgyLjE1NmEzLjMzNyAzLjMzNyAwIDAxMy4zMjggMy4zMjl2My4zMjlIMTEuODJ6bTAgMS42NzdhMy4zMzcgMy4zMzcgMCAwMTMuMzI4IDMuMzMgMy4zMzcgMy4zMzcgMCAwMS0zLjMyOSAzLjMyOEgzLjQ4NGEzLjMzNyAzLjMzNyAwIDAxLTMuMzMtMy4zMjkgMy4zMzcgMy4zMzcgMCAwMTMuMzMtMy4zMjloOC4zMzV6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMyRUI2N0RcIixcbiAgICBkOiBcIk0yNS4xODcgMTEuODJhMy4zMzcgMy4zMzcgMCAwMTMuMzI5LTMuMzMgMy4zMzcgMy4zMzcgMCAwMTMuMzI5IDMuMzMgMy4zMzcgMy4zMzcgMCAwMS0zLjMzIDMuMzI4aC0zLjMyOFYxMS44MnptLTEuNjc4IDBhMy4zMzcgMy4zMzcgMCAwMS0zLjMyOSAzLjMyOCAzLjMzNyAzLjMzNyAwIDAxLTMuMzI5LTMuMzI5VjMuNDg0YTMuMzM3IDMuMzM3IDAgMDEzLjMzLTMuMzMgMy4zMzcgMy4zMzcgMCAwMTMuMzI4IDMuMzN2OC4zMzV6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNFQ0IyMkVcIixcbiAgICBkOiBcIk0yMC4xOCAyNS4xODdhMy4zMzcgMy4zMzcgMCAwMTMuMzMgMy4zMjkgMy4zMzcgMy4zMzcgMCAwMS0zLjMzIDMuMzI5IDMuMzM3IDMuMzM3IDAgMDEtMy4zMjktMy4zM3YtMy4zMjhoMy4zM3ptMC0xLjY3OGEzLjMzNyAzLjMzNyAwIDAxLTMuMzI5LTMuMzI5IDMuMzM3IDMuMzM3IDAgMDEzLjMzLTMuMzI5aDguMzM1YTMuMzM3IDMuMzM3IDAgMDEzLjMyOSAzLjMzIDMuMzM3IDMuMzM3IDAgMDEtMy4zMyAzLjMyOEgyMC4xOHpcIlxuICB9KSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29TbGFjazsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb1VwdGltZSA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvVXB0aW1lKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjM0VCRUIwXCIsXG4gICAgZDogXCJNMTkgMTVjMCA3LjA2Mi00Ljg4OCAxMi45NjktMTEuNDYgMTQuNTYzQTE1LjkxNCAxNS45MTQgMCAwMDE2IDMyYzguODM2IDAgMTYtNy4xNjMgMTYtMTZ2LTNsLTYuNS02LTYuNSA2djJ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwN0NcIixcbiAgICBkOiBcIk02LjgzMyAyNi42NDZhMTEuOTU0IDExLjk1NCAwIDAwOC41NDQtNy44MzRBMTIuNDMgMTIuNDMgMCAwMTEzIDExLjVWLjI5MkM1LjYgMS42OTYgMCA4LjE5IDAgMTYuMDAyYzAgNC4zNTggMS43NSA4LjMwNiA0LjU3NyAxMS4xOTJsMi4yNTYtLjU0N3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsTmVnYXRpdmVcIixcbiAgICBkOiBcIk0zMC4zNjIgMjMuMDJjLTEuNDk0LjYzLTMuMTM3Ljk4LTQuODYxLjk4YTEyLjQ0MyAxMi40NDMgMCAwMS03Ljg1Mi0yLjc4IDE1LjA0MiAxNS4wNDIgMCAwMS0xMC4xMSA4LjM0M0ExNS45MSAxNS45MSAwIDAwMTYuMDAyIDMyYzYuMzE0IDAgMTEuNzU4LTMuNjY5IDE0LjM2LTguOThcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb1VwdGltZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb1dlYmhvb2sgPSBmdW5jdGlvbiBFdWlJY29uTG9nb1dlYmhvb2soX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjQzczQTYzXCIsXG4gICAgZDogXCJNMTQuOTQzIDEzLjU2M2MtMS4zMjcgMi4yMy0yLjU5NyA0LjM4OC0zLjg5NCA2LjUzMS0uMzM0LjU1LS40OTguOTk4LS4yMzIgMS42OTguNzM0IDEuOTMxLS4zMDIgMy44MTEtMi4yNSA0LjMyMS0xLjgzNy40ODItMy42MjctLjcyNi0zLjk5Mi0yLjY5Mi0uMzIzLTEuNzQxIDEuMDI4LTMuNDQ4IDIuOTQ4LTMuNzIuMTYtLjAyMy4zMjUtLjAyNi41OTUtLjA0NmwyLjkyLTQuODk2QzkuMiAxMi45MzMgOC4xMDggMTAuOCA4LjM1IDguMTU0Yy4xNzEtMS44Ny45MDctMy40ODYgMi4yNS00LjgxYTcuNjM5IDcuNjM5IDAgMDE5LjUzMS0xYzIuOTEgMS44NyA0LjI0NCA1LjUxMiAzLjEwNyA4LjYyOWwtMi42NjgtLjcyNGMuMzU3LTEuNzMzLjA5My0zLjI5LTEuMDc2LTQuNjIzLS43NzItLjg4LTEuNzYzLTEuMzQxLTIuODktMS41MTEtMi4yNTgtLjM0MS00LjQ3NiAxLjExLTUuMTM0IDMuMzI3LS43NDggMi41MTYuMzgzIDQuNTcyIDMuNDczIDYuMTIxelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjNEI0QjRCXCIsXG4gICAgZDogXCJNMTguNzMgMTAuOTI2bDIuODIzIDQuOThjNC43NTMtMS40NyA4LjMzNiAxLjE2IDkuNjIyIDMuOTc3IDEuNTUyIDMuNDAyLjQ5MSA3LjQzMi0yLjU1OCA5LjUzMS0zLjEzIDIuMTU1LTcuMDg5IDEuNzg3LTkuODYyLS45ODFsMi4xNzYtMS44MjFjMi43MzkgMS43NzQgNS4xMzUgMS42OSA2LjkxMy0uNDFhNC43NjYgNC43NjYgMCAwMC0uMDc3LTYuMjE5Yy0xLjgtMi4wMjUtNC4yMTMtMi4wODYtNy4xMy0uMTQzLTEuMjA5LTIuMTQ2LTIuNDQtNC4yNzUtMy42MS02LjQzNi0uMzk2LS43MjktLjgzMi0xLjE1Mi0xLjcyMi0xLjMwNi0xLjQ4Ny0uMjU3LTIuNDQ2LTEuNTM0LTIuNTA0LTIuOTY0YTMuMjU4IDMuMjU4IDAgMDEyLjA4LTMuMTkyIDMuMjQzIDMuMjQzIDAgMDEzLjY3MSAxLjAwMmMuNzEuODk2LjkzNSAxLjkwNS41NjIgMy4wMS0uMTA0LjMwOS0uMjM4LjYwNy0uMzg0Ljk3MnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzRBNEE0QVwiLFxuICAgIGQ6IFwiTTIwLjk2MyAyNC40MDFoLTUuNzJjLS41NSAyLjI1Ni0xLjczNCA0LjA3Ny0zLjc3NSA1LjIzNS0xLjU4Ni45LTMuMjk2IDEuMjA1LTUuMTE2LjkxMUMzIDMwLjAwNy4yNiAyNi45OS4wMTkgMjMuNTkzYy0uMjczLTMuODQ4IDIuMzcyLTcuMjY4IDUuODk4LTguMDM2bC43MzIgMi42NThjLTMuMjM0IDEuNjUtNC4zNTMgMy43My0zLjQ0OCA2LjMzLjc5NyAyLjI4NyAzLjA2IDMuNTQxIDUuNTE4IDMuMDU2IDIuNTEtLjQ5NSAzLjc3Ni0yLjU4MSAzLjYyMS01LjkyOSAyLjM4IDAgNC43NjEtLjAyNCA3LjE0LjAxMi45My4wMTUgMS42NDgtLjA4MSAyLjM0OC0uOSAxLjE1Mi0xLjM0OSAzLjI3My0xLjIyNyA0LjUxNS4wNDYgMS4yNjggMS4zMDEgMS4yMDcgMy4zOTUtLjEzNSA0LjY0MWEzLjIzNiAzLjIzNiAwIDAxLTQuNTUzLS4xNTdjLS4yNDktLjI2Ny0uNDQ1LS41ODUtLjY5Mi0uOTEzelwiXG4gIH0pKSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb1dlYmhvb2s7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29XaW5kb3dzID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29XaW5kb3dzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDBBREVGXCIsXG4gICAgZDogXCJNMCA0LjUxbDEyLjk3Ny0xLjc2OC4wMDYgMTIuNTE4LTEyLjk3MS4wNzRMMCA0LjUxem0xMi45NyAxMi4xOTJsLjAxMSAxMi41MjktMTIuOTctMS43ODQtLjAwMi0xMC44MjkgMTIuOTYyLjA4NHptMS41NzQtMTQuMTlMMzEuNzUxIDB2MTUuMWwtMTcuMjA3LjEzN1YyLjUxMXptMTcuMjEgMTQuMzA4bC0uMDAzIDE1LjAzMy0xNy4yMDctMi40MjktLjAyNC0xMi42MzIgMTcuMjM1LjAyOHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb1dpbmRvd3M7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29Xb3JrcGxhY2VTZWFyY2ggPSBmdW5jdGlvbiBFdWlJY29uTG9nb1dvcmtwbGFjZVNlYXJjaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE3LjU1NyA1LjA1Yy4xNy0uMjAyLjQ1Ny0uNTEyLjg2LS45M0MxOS40ODMgMy4wMTcgMjEuODI4IDEgMjMuODAxIDFIMzB2MzBoLTYuMmMtMS45NzIgMC0zLjk5NS0xLjQ0OS01LjM4My0zLjEwNmwtLjc2NC0xLjA1MiAyLjc1LTMuNDc3YzMuNDYyLTQuMzc2IDMuNDYzLTEwLjMzMi4wMDEtMTQuNzA3TDE3LjU1NyA1LjA1elwiLFxuICAgIGZpbGw6IFwiI0ZFQzUxNFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMiAzMVYxaDUuODFjMS43MSAwIDMuMzUuNzg2IDQuMzg3IDIuMWw1Ljg1NSA3LjQyYzIuNTk4IDMuMjgzIDIuNTk4IDcuNjk4LS4wMDIgMTAuOTgzbC01Ljg1NSA3LjQwM0MxMS4xNTggMzAuMjE3IDkuNTIgMzEgNy44MTUgMzFIMnpcIixcbiAgICBmaWxsOiBcIiNGMDRFOThcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE1LjM4NCAyNC44OUwxMi4xNSAyMS43Yy0yLjg2OC0zLjMxOC0yLjg2OC04LjIyLjAwMi0xMS4zMjIgMS41MzUtMS42MzkgMi42MTEtMi43MTggMy4yMy0zLjIzOGwyLjY3IDMuMjM4YzIuNjM3IDMuMzg1IDIuNTc1IDcuOTg3LS4wNjIgMTEuMzc0bC0yLjYwNyAzLjEzN3pcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29Xb3JrcGxhY2VTZWFyY2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ3N0YXNoRmlsdGVyID0gZnVuY3Rpb24gRXVpSWNvbkxvZ3N0YXNoRmlsdGVyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNy45MTQgMWMtMy42IDAtNS44OTcgMS4xMTEtNS44OTcgMS44NzYgMCAuNzY2IDIuMjk3IDEuODc3IDUuODk3IDEuODc3czUuODk3LTEuMTExIDUuODk3LTEuODc3QzEzLjgxMSAyLjExMSAxMS41MTQgMSA3LjkxNCAxbTMuOTggNy45ODhjLTEuMTg3LjMzMS0yLjYwMS41MDItMy45OC41MDItMS4zODMgMC0yLjgwMS0uMTcyLTMuOTkxLS41MDVsMi44NjMgMy4yNDJ2Mi41MTVjLjEzNi4wOC41MTUuMjE0IDEuMTI4LjIxNC42MSAwIC45ODktLjEzMyAxLjEyNi0uMjEzdi0yLjUxNWwyLjg1NC0zLjI0em0yLjM5NC0xLjIwNmwtNC4yNDggNC44MjN2Mi4yNDZoLjAwNGMwIC43NjMtMS4wNjkgMS4xMDUtMi4xMyAxLjEwNS0xLjA2IDAtMi4xMy0uMzQyLTIuMTMtMS4xMDVoLjAwMnYtMi4yNDVMMS4zMjEgNy41NWwuMDEtLjAwOEExLjUzIDEuNTMgMCAwMTEgNi42MDdWMi43OGguMDJDMS4xNC45NzMgNC42MjcgMCA3LjkxMyAwYzMuMjg2IDAgNi43NzQuOTczIDYuODk0IDIuNzhoLjAydjMuODI3YzAgLjM0My0uMTIuNjU3LS4zMzUuOTQxbC0uMDAzLjAwNGMtLjA2LjA3OS0uMTI4LjE1NS0uMjAyLjIzem0tLjU3OC0uODU2YS41Ni41NiAwIDAwLjExOC0uMzE5VjQuNDExYy0xLjI4OC44NzktMy42NDkgMS4zNDItNS45MTQgMS4zNDJDNS42NSA1Ljc1MyAzLjI4OCA1LjI5IDIgNC40MTF2Mi4xOTZDMiA3LjM3NSA0LjMwNCA4LjQ5IDcuOTE0IDguNDljMi44NzkgMCA0LjkyNy0uNzA5IDUuNjM5LTEuMzg1bC4xNTctLjE4elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dzdGFzaEZpbHRlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nc3Rhc2hJZiA9IGZ1bmN0aW9uIEV1aUljb25Mb2dzdGFzaElmKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNi45MTggOS43OTlsLTQuODIgNC44MTkgMi44OC0uNDMuMTQ4Ljk4N0wwIDE1Ljk0M2wuNzY4LTUuMTI2Ljk4OC4xNDgtLjQ1MyAzLjAzMyA0LjkzNi00LjkzNWEyLjAwMyAyLjAwMyAwIDAxMS4yNjUtMi44ODVWMGgxdjYuMTc4YTIuMDAzIDIuMDAzIDAgMDExLjI2MyAyLjg4NGw0Ljg2NSA0Ljg2Ni0uNDQzLTIuOTYzLjk4OC0uMTQ3Ljc2OCA1LjEyNi01LjEyNy0uNzY5LjE1LS45ODggMi45NS40NDEtNC44My00LjgzYy0uMzEyLjIwMy0uNjg1LjMyLTEuMDg1LjMyLS40IDAtLjc3My0uMTE3LTEuMDg1LS4zMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nc3Rhc2hJZjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nc3Rhc2hJbnB1dCA9IGZ1bmN0aW9uIEV1aUljb25Mb2dzdGFzaElucHV0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMS43NDcgMTAuOTkyaDEzLjFhLjEyMy4xMjMgMCAwMC4xMjItLjEyM1Y4LjUxYS4xMjIuMTIyIDAgMDAtLjEyMi0uMTIySDEuMTIyQS4xMjIuMTIyIDAgMDAxIDguNTF2Mi4zNmMwIC4wNjYuMDU1LjEyMi4xMjIuMTIyaC42MjV6bTEyLjAxMSAxSDIuMjFWMTZoLTF2LTQuMDA4aC0uMDg4QTEuMTI0IDEuMTI0IDAgMDEwIDEwLjg3VjguNTFjMC0uNjIuNTAzLTEuMTIyIDEuMTIyLTEuMTIyaDEzLjcyNWMuNjIgMCAxLjEyMi41MDIgMS4xMjIgMS4xMjJ2Mi4zNmMwIC42MTgtLjUwMyAxLjEyMi0xLjEyMiAxLjEyMmgtLjA4OVYxNmgtMXYtNC4wMDh6bS02LjI3LTcuNDg3VjBoMXY0LjUyOWwyLjQwNy0yLjI2Mi42ODUuNzNMOCA2LjM1NiA0LjQyIDIuOTk1bC42ODUtLjcyOSAyLjM4MyAyLjI0elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dzdGFzaElucHV0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dzdGFzaE91dHB1dCA9IGZ1bmN0aW9uIEV1aUljb25Mb2dzdGFzaE91dHB1dChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIuMjEgNC4wMDhIMTMuNzZWMGgxdjQuMDA4aC4wODhjLjYxOSAwIDEuMTIyLjUwNCAxLjEyMiAxLjEyM1Y3LjQ5YzAgLjYyLS41MDMgMS4xMjItMS4xMjIgMS4xMjJIMS4xMjJBMS4xMjIgMS4xMjIgMCAwMTAgNy40OVY1LjEzYzAtLjYxOC41MDMtMS4xMjIgMS4xMjItMS4xMjJoLjA4OVYwaDF2NC4wMDh6bTExLjU0OSAxSDEuMTJBLjEyMy4xMjMgMCAwMDEgNS4xM1Y3LjQ5YzAgLjA2OC4wNTUuMTIyLjEyMi4xMjJoMTMuNzI1YS4xMjIuMTIyIDAgMDAuMTIyLS4xMjJWNS4xM2EuMTIzLjEyMyAwIDAwLS4xMjItLjEyMmgtMS4wODh6bS01LjMwMSA5LjA5N2wyLjQwNS0yLjI2LjY4Ni43MjgtMy41OCAzLjM2My0zLjU4LTMuMzYzLjY4Ni0uNzI4IDIuMzgzIDIuMjRWOS41NzdoMXY0LjUyOHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nc3Rhc2hPdXRwdXQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ3N0YXNoUXVldWUgPSBmdW5jdGlvbiBFdWlJY29uTG9nc3Rhc2hRdWV1ZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTExLjMzOSAxNS40NjRINC43N2EzLjI0OCAzLjI0OCAwIDAxLTMuMjQ1LTMuMjQ0VjQuNTQ5SDB2LTFoMi41MjZ2OC42N2EyLjI0NyAyLjI0NyAwIDAwMi4yNDUgMi4yNDVoNi41NjhhMi4yNDcgMi4yNDcgMCAwMDIuMjQ0LTIuMjQ0VjMuNTQ5aDIuNDU1djFoLTEuNDU1djcuNjdhMy4yNDcgMy4yNDcgMCAwMS0zLjI0NCAzLjI0NXptLjUxMy01Ljk2MnYxLjA5NWwtMy44NDggMS43Mi0zLjg1LTEuNzJWOS41MDJsMy44NSAxLjcyIDMuODQ4LTEuNzJ6bTAtNC4yNTF2MS4wOTVsLTMuODQ4IDEuNzItMy44NS0xLjcyVjUuMjVsMy44NSAxLjcyIDMuODQ4LTEuNzJ6bTAtNC4yNTF2MS4wOTVsLTMuODQ4IDEuNzItMy44NS0xLjcyVjFsMy44NSAxLjcyTDExLjg1MiAxelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dzdGFzaFF1ZXVlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25NYWduZXQgPSBmdW5jdGlvbiBFdWlJY29uTWFnbmV0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNC41NTIgMTAuNzFhMy4wMDggMy4wMDggMCAwMDQuMTkuNzM4bDEuNjQyLTEuMTUgMS4xNSAxLjY0Mi0xLjY0MyAxLjE1YTUuMDEzIDUuMDEzIDAgMTEtNS43NS04LjIxMmwxLjY0Mi0xLjE1IDEuMTUgMS42NDMtMS42NDIgMS4xNWEzLjAwNyAzLjAwNyAwIDAwLS43MzkgNC4xODl6bTguMjk2LTIuMTM3bDEuMTUgMS42NDMtMS42NDMgMS4xNDktMS4xNS0xLjY0MiAxLjY0My0xLjE1em0tNC42LTYuNTcxbDEuMTUgMS42NDMtMS42NDMgMS4xNS0xLjE1LTEuNjQyIDEuNjQyLTEuMTUxem0xLjk3IDEuMDY4TDkuMDcgMS40MjhhMS4wMDMgMS4wMDMgMCAwMC0xLjM5Ny0uMjQ2TDMuNTY2IDQuMDU3QTUuOTk1IDUuOTk1IDAgMDAxLjA5MiA3Ljk0YTUuOTkzIDUuOTkzIDAgMDAuOTk2IDQuNDk1IDUuOTkgNS45OSAwIDAwMy44ODMgMi40NzMgNS45OTEgNS45OTEgMCAwMDQuNDk1LS45OTZsNC4xMDctMi44NzVjLjQ1NC0uMzE4LjU2My0uOTQzLjI0Ni0xLjM5NmwtMS4xNS0xLjY0M2ExLjAwMiAxLjAwMiAwIDAwLTEuMzk2LS4yNDZsLTQuMTA3IDIuODc1YTIuMDAyIDIuMDAyIDAgMDEtMS40OTguMzMyIDIgMiAwIDAxLTEuNjI3LTIuMzIzYy4wOS0uNTA1LjM3MS0uOTc2LjgyNC0xLjI5NGw0LjEwNy0yLjg3NmMuNDU0LS4zMTcuNTY0LS45NDIuMjQ2LTEuMzk2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25NYWduZXQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbk1hZ25pZnlXaXRoRXhjbGFtYXRpb24gPSBmdW5jdGlvbiBFdWlJY29uTWFnbmlmeVdpdGhFeGNsYW1hdGlvbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE1LjE0MyAxNS44NWwtMy44NzItMy44NzJhLjUuNSAwIDAxLS4wMzQtLjczOCA2LjAxIDYuMDEgMCAwMDAtOC40ODYgNi4wMDQgNi4wMDQgMCAwMC04LjQ4NCAwIDYuMDEgNi4wMSAwIDAwMCA4LjQ4NiA1Ljk2IDUuOTYgMCAwMDQuMjQyIDEuNzU3LjUuNSAwIDAxMCAxIDYuOTU1IDYuOTU1IDAgMDEtNC45NDktMi4wNWMtMi43MjgtMi43My0yLjcyOC03LjE3MSAwLTkuOSAyLjcyOC0yLjczIDcuMTY4LTIuNzMgOS44OTggMCAyLjYwOSAyLjYxIDIuNzIzIDYuNzg1LjM0MiA5LjUzMmwzLjU2NSAzLjU2NGEuNTAyLjUwMiAwIDAxLS43MDguNzA4ek02LjI1NCAzbC4yNzcgNS4wNjNoLjkzNUw3Ljc1NCAzaC0xLjV6bS4yMjIgNy41NDhhLjcyNy43MjcgMCAwMC41MzMuMjIyLjcxNy43MTcgMCAwMC41Mi0uMjIuNzE1LjcxNSAwIDAwLjIyNS0uNTMuNzE2LjcxNiAwIDAwLS4yMjItLjUzNC43MjQuNzI0IDAgMDAtLjUyMy0uMjE2LjczMS43MzEgMCAwMC0uNTMzLjIxOS43MTkuNzE5IDAgMDAtLjIyMi41M2MwIC4yMDUuMDc0LjM4LjIyMi41Mjl6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1hZ25pZnlXaXRoRXhjbGFtYXRpb247IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbk1hZ25pZnlXaXRoTWludXMgPSBmdW5jdGlvbiBFdWlJY29uTWFnbmlmeVdpdGhNaW51cyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuNSA2YS41LjUgMCAwMTAgMWgtNmEuNS41IDAgMDEwLTFoNnptLjc0IDQuNzRjMC0uMTE3LjA0LS4yMjUuMTA3LS4zMUE1LjQ3OCA1LjQ3OCAwIDAwMTIgNi41IDUuNSA1LjUgMCAxMDYuNSAxMmEuNS41IDAgMTEwIDEgNi41IDYuNSAwIDExNC45MzYtMi4yN2w0LjQxOSA0LjQxOGEuNS41IDAgMDEtLjcwNy43MDdsLTQuNzY4LTQuNzY4YS40OTkuNDk5IDAgMDEtLjE0LS4zNDd6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1hZ25pZnlXaXRoTWludXM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbk1hZ25pZnlXaXRoUGx1cyA9IGZ1bmN0aW9uIEV1aUljb25NYWduaWZ5V2l0aFBsdXMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03IDZoMi41YS41LjUgMCAwMTAgMUg3djIuNWEuNS41IDAgMDEtMSAwVjdIMy41YS41LjUgMCAwMTAtMUg2VjMuNWEuNS41IDAgMDExIDBWNnptMy4yNCA0Ljc0YzAtLjExNy4wNC0uMjI1LjEwNy0uMzFBNS40NzggNS40NzggMCAwMDEyIDYuNSA1LjUgNS41IDAgMTA2LjUgMTJhLjUuNSAwIDExMCAxIDYuNSA2LjUgMCAxMTQuOTM2LTIuMjdsNC40MTkgNC40MThhLjUuNSAwIDAxLS43MDcuNzA3bC00Ljc2OC00Ljc2OGEuNDk5LjQ5OSAwIDAxLS4xNC0uMzQ3elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25NYWduaWZ5V2l0aFBsdXM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbk1hcE1hcmtlciA9IGZ1bmN0aW9uIEV1aUljb25NYXBNYXJrZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjU1IDE0LjIyNGEuNTAyLjUwMiAwIDAwLjg5NyAwbDQtOGEuNS41IDAgMDAuMDUzLS4yMzUgNC42NzIgNC42NzIgMCAwMC0uMDg0LS43MDUgNS41MzggNS41MzggMCAwMC0uNTA1LTEuNTEyQzExLjE4OSAyLjM2MiA5LjkwNiAxLjUgOCAxLjVjLTEuOTA2IDAtMy4xOS44NjItMy45MSAyLjI3Mi0uMjQ4LjQ4NS0uNDEuOTk4LS41MDYgMS41MTItLjA1OC4zMS0uMDguNTU0LS4wODQuNzA1YS41LjUgMCAwMC4wNTMuMjM1bDMuOTk3IDh6TTggNWExIDEgMCAxMDAgMiAxIDEgMCAwMDAtMnptLTMuNDkzLjg5NWMuMDA5LS4xMDYuMDI3LS4yNTMuMDYtLjQyOS4wNzktLjQyNC4yMTMtLjg0OC40MTMtMS4yMzhDNS41MzcgMy4xMzggNi40ODcgMi41IDggMi41YzEuNTEzIDAgMi40NjMuNjM4IDMuMDIgMS43MjguMi4zOS4zMzQuODE0LjQxMyAxLjIzOC4wMzMuMTc2LjA1MS4zMjMuMDYuNDNMOCAxMi44ODEgNC41MDcgNS44OTV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1hcE1hcmtlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTWVtb3J5ID0gZnVuY3Rpb24gRXVpSWNvbk1lbW9yeShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcgMTBoMlY2SDd6TTMgMTBoMlY2SDN6TTExLjAyNSAxMGgyVjZoLTJ6TTMuNSAxMy43NWgxdi0yLjRoLTF6TTYuMTc1IDEzLjc1aDEuMDAxdi0yLjRINi4xNzV6TTguODUgMTMuNzVoMXYtMi40aC0xek0xMS41MjUgMTMuNzVoMXYtMi40aC0xelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMCAzdjcuMDVoMXYzLjY5OGgxdi0zLjY5OWgxMnYzLjY5OWgxdi0zLjY5OWgxVjNIMHptMSA2aDE0VjRIMXY1elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25NZW1vcnk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbk1lbnUgPSBmdW5jdGlvbiBFdWlJY29uTWVudShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTAgMmgxNnYySDBWMnptMCA1aDE2djJIMFY3em0xNiA1SDB2MmgxNnYtMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWVudTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTWVudURvd24gPSBmdW5jdGlvbiBFdWlJY29uTWVudURvd24oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02IDcuNWMwIC4yNzYtLjIxNi41LS40OTUuNWgtMi4wMWEuNTAzLjUwMyAwIDAxLS40ODctLjQxMkwzIDcuNWMwLS4yNzYuMjE2LS41LjQ5NS0uNWgyLjAxYy4yNDMgMCAuNDQ1LjE4My40ODcuNDEyTDYgNy41ek0zLjUxIDRhLjUxMy41MTMgMCAwMS0uNTAyLS40MTJMMyAzLjVjMC0uMjc2LjIyOC0uNS41MS0uNWg4Ljk4Yy4yNSAwIC40NTkuMTgzLjUwMi40MTJMMTMgMy41YzAgLjI3Ni0uMjI4LjUtLjUxLjVIOC40OTN2Ny43OTJsMi4wNi0yLjA2YS41LjUgMCAxMS43MDcuNzA3TDkuMTQgMTIuNTZBMS40OTYgMS40OTYgMCAwMTguMDI2IDEzTDcuOTkzIDEzYS41MDEuNTAxIDAgMDEtLjExOC0uMDE0IDEuNDkzIDEuNDkzIDAgMDEtLjg1Ny0uNDI2bC0yLjEyMi0yLjEyYS41LjUgMCAwMS43MDgtLjcwOGwxLjg4OSAxLjg5VjRIMy41MXpNMTMgNy41YzAgLjI3Ni0uMjE2LjUtLjQ5NS41aC0yLjAxYS41MDMuNTAzIDAgMDEtLjQ4Ny0uNDEyTDEwIDcuNWMwLS4yNzYuMjE2LS41LjQ5NS0uNWgyLjAxYy4yNDMgMCAuNDQ1LjE4My40ODcuNDEyTDEzIDcuNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWVudURvd247IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbk1lbnVMZWZ0ID0gZnVuY3Rpb24gRXVpSWNvbk1lbnVMZWZ0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMS4wMTQgNy4zODJhLjUwMS41MDEgMCAwMC0uMDEzLjE1MmMtLjAxNC40LjEzMy44MDYuNDM5IDEuMTEybDIuMTIgMi4xMjJhLjUuNSAwIDEwLjcwOC0uNzA4TDIuMjA4IDhIMTQuNWEuNS41IDAgMDAwLTFIMi4zNzlsMS44ODktMS44OWEuNS41IDAgMDAtLjcwNy0uNzA2TDEuNDQgNi41MjRjLS4yNDEuMjQyLS4zODMuNTQ0LS40MjYuODU4ek0xNC41IDNoLTdhLjUuNSAwIDAwMCAxaDdhLjUuNSAwIDAwMC0xem0wIDhoLTdhLjUuNSAwIDEwMCAxaDdhLjUuNSAwIDEwMC0xelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25NZW51TGVmdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTWVudVJpZ2h0ID0gZnVuY3Rpb24gRXVpSWNvbk1lbnVSaWdodChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE0Ljk4NiA3LjM4MmEuNTAxLjUwMSAwIDAxLjAxMy4xNTJjLjAxNC40LS4xMzMuODA2LS40MzkgMS4xMTJsLTIuMTIgMi4xMjJhLjUuNSAwIDExLS43MDgtLjcwOEwxMy43OTIgOEgxLjVhLjUuNSAwIDAxMC0xaDEyLjEyMWwtMS44ODktMS44OWEuNS41IDAgMDEuNzA3LS43MDZsMi4xMjEgMi4xMmMuMjQxLjI0Mi4zODMuNTQ0LjQyNi44NTh6TTEuNSAzaDdhLjUuNSAwIDAxMCAxaC03YS41LjUgMCAwMTAtMXptMCA4aDdhLjUuNSAwIDExMCAxaC03YS41LjUgMCAxMTAtMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWVudVJpZ2h0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25NZW51VXAgPSBmdW5jdGlvbiBFdWlJY29uTWVudVVwKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAuMDEgOC41YzAtLjI3Ni4yMTYtLjUuNDk1LS41aDIuMDFjLjI0MyAwIC40NDUuMTgzLjQ4Ny40MTJsLjAwOC4wODhjMCAuMjc2LS4yMTYuNS0uNDk1LjVoLTIuMDFhLjUwMy41MDMgMCAwMS0uNDg3LS40MTJMMTAuMDEgOC41ek0xMi41IDEyYy4yNSAwIC40NTkuMTgzLjUwMi40MTJsLjAwOC4wODhjMCAuMjc2LS4yMjguNS0uNTEuNUgzLjUyYS41MTMuNTEzIDAgMDEtLjUwMi0uNDEyTDMuMDEgMTIuNWMwLS4yNzYuMjI4LS41LjUxLS41aDMuOTg3VjQuMjA4bC0yLjA2IDIuMDZhLjUuNSAwIDExLS43MDctLjcwN0w2Ljg2IDMuNDRBMS40OTYgMS40OTYgMCAwMTcuOTc0IDNMOC4wMDcgM2MuMDQgMCAuMDguMDA1LjExOC4wMTQuMzE0LjA0My42MTYuMTg1Ljg1Ny40MjZsMi4xMjIgMi4xMmEuNS41IDAgMDEtLjcwOC43MDhsLTEuODg5LTEuODlWMTJIMTIuNXpNMyA4LjVjMC0uMjc2LjIxNi0uNS40OTUtLjVoMi4wMWMuMjQzIDAgLjQ0NS4xODMuNDg3LjQxMkw2IDguNWMwIC4yNzYtLjIxNi41LS40OTUuNWgtMi4wMWEuNTAzLjUwMyAwIDAxLS40ODctLjQxMkwzIDguNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWVudVVwOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25NZXJnZSA9IGZ1bmN0aW9uIEV1aUljb25NZXJnZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuMzUyIDZIMi41YS41LjUgMCAwMTAtMWg0Ljg1Mkw1LjEyIDIuNzIxYy0uMTgtLjE4My0uMTU1LS40Ni4wNTUtLjYxNmEuNTUxLjU1MSAwIDAxLjcwNS4wNDhsMyAzLjA2MmMuMTYuMTY0LjE2LjQwNSAwIC41N2wtMyAzLjA2MkEuNTMyLjUzMiAwIDAxNS41IDlhLjU0LjU0IDAgMDEtLjMyNS0uMTA2Yy0uMjEtLjE1Ny0uMjM1LS40MzMtLjA1NS0uNjE2TDcuMzUyIDZ6bTEuMjk2IDRIMTMuNWEuNS41IDAgMDEwIDFIOC42NDhsMi4yMzIgMi4yNzhjLjE4LjE4My4xNTUuNDYtLjA1NS42MTdBLjU0LjU0IDAgMDExMC41IDE0YS41MzIuNTMyIDAgMDEtLjM4LS4xNTNsLTMtMy4wNjNhLjM5Ny4zOTcgMCAwMTAtLjU2OGwzLTMuMDYzYS41NTEuNTUxIDAgMDEuNzA1LS4wNDdjLjIxLjE1Ni4yMzUuNDMzLjA1NS42MTZMOC42NDggMTB6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1lcmdlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25NaW5pbWl6ZSA9IGZ1bmN0aW9uIEV1aUljb25NaW5pbWl6ZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEuMTQ2IDE0LjE0Nmw0LTRhLjUuNSAwIDAxLjc2NS42MzhsLS4wNTcuMDctNCA0YS41LjUgMCAwMS0uNzY1LS42MzhsLjA1Ny0uMDcgNC00LTQgNHpNNi41IDhBMS41IDEuNSAwIDAxOCA5LjV2M2EuNS41IDAgMTEtMSAwdi0zYS41LjUgMCAwMC0uNS0uNWgtM2EuNS41IDAgMDEwLTFoM3ptMi01YS41LjUgMCAwMS41LjV2M2EuNS41IDAgMDAuNS41aDNhLjUuNSAwIDExMCAxaC0zQTEuNSAxLjUgMCAwMTggNi41di0zYS41LjUgMCAwMS41LS41em0xLjY1MSAyLjE0Nmw0LTRhLjUuNSAwIDAxLjc2NS42MzhsLS4wNTcuMDctNCA0YS41LjUgMCAwMS0uNzY1LS42MzhsLjA1Ny0uMDcgNC00LTQgNHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWluaW1pemU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbk1pbnVzID0gZnVuY3Rpb24gRXVpSWNvbk1pbnVzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicmVjdFwiLCB7XG4gICAgd2lkdGg6IDEwLFxuICAgIGhlaWdodDogMS41LFxuICAgIHg6IDMsXG4gICAgeTogNy4yNSxcbiAgICByeDogMC41XG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25NaW51czsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTWludXNJbkNpcmNsZSA9IGZ1bmN0aW9uIEV1aUljb25NaW51c0luQ2lyY2xlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTcuNSAwQzExLjYzNiAwIDE1IDMuMzY0IDE1IDcuNVMxMS42MzYgMTUgNy41IDE1IDAgMTEuNjM2IDAgNy41IDMuMzY0IDAgNy41IDB6bTAgLjg4MmE2LjYxOCA2LjYxOCAwIDEwMCAxMy4yMzZBNi42MTggNi42MTggMCAwMDcuNS44ODJ6TTMuNSA3aDhhLjUuNSAwIDExMCAxaC04YS41LjUgMCAwMTAtMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWludXNJbkNpcmNsZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTWludXNJbkNpcmNsZUZpbGxlZCA9IGZ1bmN0aW9uIEV1aUljb25NaW51c0luQ2lyY2xlRmlsbGVkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTcuNSAwQzExLjYzNiAwIDE1IDMuMzY0IDE1IDcuNVMxMS42MzYgMTUgNy41IDE1IDAgMTEuNjM2IDAgNy41IDMuMzY0IDAgNy41IDB6bS00IDdhLjUuNSAwIDAwMCAxaDhhLjUuNSAwIDEwMC0xaC04elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25NaW51c0luQ2lyY2xlRmlsbGVkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25NbENsYXNzaWZpY2F0aW9uSm9iID0gZnVuY3Rpb24gRXVpSWNvbk1sQ2xhc3NpZmljYXRpb25Kb2IoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03IDE2djVoMi4wMzhhMTMuMTc5IDEzLjE3OSAwIDAwMCAySDd2NUg1di01SDB2LTJoNXYtNWgyek03IDB2NWg1djJIN3Y1SDVWN0gwVjVoNVYwaDJ6bTE2IDB2NWg1djJoLTV2Mi4wMzhhMTMuMTc5IDEzLjE3OSAwIDAwLTIgMFY3aC01VjVoNVYwaDJ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTIyIDEwYzMuMDczIDAgNS44NzcgMS4xNTUgOCAzLjA1NnYzLjI1MkE5LjgyIDkuODIgMCAxMDE2LjMwNyAzMGgtMy4yNTFBMTEuOTU1IDExLjk1NSAwIDAxMTAgMjJjMC02LjYyNyA1LjM3My0xMiAxMi0xMnptMSA4djNoM3YyaC0zdjNoLTJ2LTNoLTN2LTJoM3YtM2gyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25NbENsYXNzaWZpY2F0aW9uSm9iOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25NbENyZWF0ZUFkdmFuY2VkSm9iID0gZnVuY3Rpb24gRXVpSWNvbk1sQ3JlYXRlQWR2YW5jZWRKb2IoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNiAzMkM3LjE2MyAzMiAwIDI0LjgzNyAwIDE2UzcuMTYzIDAgMTYgMHMxNiA3LjE2MyAxNiAxNmgtMmMwLTcuNzMyLTYuMjY4LTE0LTE0LTE0UzIgOC4yNjggMiAxNnM2LjI2OCAxNCAxNCAxNHYyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0yNyAyMHYxMmgtMlYyMGgyem0tNSA0djhoLTJ2LThoMnptMTAtMnYxMGgtMlYyMmgyek0xNyA5djZoNnYyaC02djZoLTJ2LTZIOXYtMmg2VjloMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWxDcmVhdGVBZHZhbmNlZEpvYjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTWxDcmVhdGVNdWx0aU1ldHJpY0pvYiA9IGZ1bmN0aW9uIEV1aUljb25NbENyZWF0ZU11bHRpTWV0cmljSm9iKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk00IDI0YTQgNCAwIDExMCA4IDQgNCAwIDAxMC04em0yNCAwYTQgNCAwIDExMCA4IDQgNCAwIDAxMC04ek00IDI2YTIgMiAwIDEwMCA0IDIgMiAwIDAwMC00em0yNCAwYTIgMiAwIDEwMCA0IDIgMiAwIDAwMC00ek0xNyA5djZoNnYyaC02djZoLTJ2LTZIOXYtMmg2VjloMnpNNCAwYTQgNCAwIDExMCA4IDQgNCAwIDAxMC04em0yNCAwYTQgNCAwIDExMCA4IDQgNCAwIDAxMC04em0wIDJhMiAyIDAgMTAwIDQgMiAyIDAgMDAwLTR6TTQgMmEyIDIgMCAxMDAgNCAyIDIgMCAwMDAtNHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIxLjA3OCAyOS4wNWMuMTAyLjY3Ny4zIDEuMzIyLjU4MiAxLjkyQTE1Ljk2MyAxNS45NjMgMCAwMTE2IDMyYy0xLjk5MyAwLTMuOS0uMzY0LTUuNjYtMS4wMy4yODEtLjU5OC40OC0xLjI0My41ODItMS45MiAxLjU3NC42MTQgMy4yODcuOTUgNS4wNzguOTUgMS43OTEgMCAzLjUwNC0uMzM2IDUuMDc4LS45NXptOS44OTItMTguNzFBMTUuOTYzIDE1Ljk2MyAwIDAxMzIgMTZjMCAxLjk5My0uMzY0IDMuOS0xLjAzIDUuNjZhNi45NDggNi45NDggMCAwMC0xLjkyLS41ODJjLjYxNC0xLjU3NC45NS0zLjI4Ny45NS01LjA3OCAwLTEuNzkxLS4zMzYtMy41MDQtLjk1LTUuMDc4YTYuOTQ4IDYuOTQ4IDAgMDAxLjkyLS41ODJ6bS0yOS45NCAwYy41OTguMjgxIDEuMjQzLjQ4IDEuOTIuNTgyQTEzLjk2NSAxMy45NjUgMCAwMDIgMTZjMCAxLjc5MS4zMzYgMy41MDQuOTUgNS4wNzgtLjY3Ny4xMDItMS4zMjIuMy0xLjkyLjU4MkExNS45NjQgMTUuOTY0IDAgMDEwIDE2YzAtMS45OTMuMzY0LTMuOSAxLjAzLTUuNjZ6TTE2IDBjMS45OTMgMCAzLjkuMzY0IDUuNjYgMS4wM2E2Ljk0OCA2Ljk0OCAwIDAwLS41ODIgMS45MkExMy45NjUgMTMuOTY1IDAgMDAxNiAyYy0xLjc5MSAwLTMuNTA0LjMzNi01LjA3OC45NWE2Ljk0OCA2Ljk0OCAwIDAwLS41ODItMS45MkExNS45NjQgMTUuOTY0IDAgMDExNiAwelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25NbENyZWF0ZU11bHRpTWV0cmljSm9iOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25NbENyZWF0ZVBvcHVsYXRpb25Kb2IgPSBmdW5jdGlvbiBFdWlJY29uTWxDcmVhdGVQb3B1bGF0aW9uSm9iKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYgMGM1LjUyMyAwIDEwIDQuNDc3IDEwIDEwcy00LjQ3NyAxMC0xMCAxMFM2IDE1LjUyMyA2IDEwIDEwLjQ3NyAwIDE2IDB6bTAgMmE4IDggMCAxMDAgMTYgOCA4IDAgMDAwLTE2elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk04LjQgMTkuMjg4Yy40OTIuNDAyIDEuMDE1Ljc2NiAxLjU2NiAxLjA4N0w3LjI2IDIzLjY4MmE0IDQgMCAxMS0xLjQzNy0xLjI0M2wyLjU3OC0zLjE1MXptMTUuMiAwbDIuNTc3IDMuMTVhNCA0IDAgMTEtMS40MzcgMS4yNDNsLTIuNzA2LTMuMzA2YTEyLjAzMiAxMi4wMzIgMCAwMDEuNTY1LTEuMDg3ek00IDI0YTIgMiAwIDEwMCA0IDIgMiAwIDAwMC00em0yNCAwYTIgMiAwIDEwMCA0IDIgMiAwIDAwMC00ek0xNyA2djNoM3YyaC0zdjNoLTJ2LTNoLTNWOWgzVjZoMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWxDcmVhdGVQb3B1bGF0aW9uSm9iOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25NbENyZWF0ZVNpbmdsZU1ldHJpY0pvYiA9IGZ1bmN0aW9uIEV1aUljb25NbENyZWF0ZVNpbmdsZU1ldHJpY0pvYihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDMyQzcuMTYzIDMyIDAgMjQuODM3IDAgMTZTNy4xNjMgMCAxNiAwczE2IDcuMTYzIDE2IDE2YTE2IDE2IDAgMDEtMTYgMTZ6bTAtMzBDOC4yNjggMiAyIDguMjY4IDIgMTZzNi4yNjggMTQgMTQgMTQgMTQtNi4yNjggMTQtMTRBMTQgMTQgMCAwMDE2IDJ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTIzIDE1aC02VjloLTJ2Nkg5djJoNnY2aDJ2LTZoNnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWxDcmVhdGVTaW5nbGVNZXRyaWNKb2I7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbk1sRGF0YVZpc3VhbGl6ZXIgPSBmdW5jdGlvbiBFdWlJY29uTWxEYXRhVmlzdWFsaXplcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIgMjB2MTBoMTB2MkgwVjIwaDJ6bTMwIDB2MTJIMjB2LTJoMTBWMjBoMnpNMTIgNGE4IDggMCAxMTAgMTYgOCA4IDAgMDEwLTE2em0wIDJhNiA2IDAgMTAwIDEyIDYgNiAwIDAwMC0xMnptMC02djJIMnYxMEgwVjBoMTJ6bTIwIDB2MTJoLTJWMkgyMFYwaDEyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0yMS45OTcgMTIuMjUxYy0uMDE3LjY4OS0uMTA0IDEuMzYtLjI1MyAyLjAwNmE2IDYgMCAxMS03LjQ4NyA3LjQ4N2MtLjY0Ni4xNS0xLjMxNy4yMzYtMi4wMDYuMjUzYTggOCAwIDEwOS43NDYtOS43NDZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1sRGF0YVZpc3VhbGl6ZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbk1sT3V0bGllckRldGVjdGlvbkpvYiA9IGZ1bmN0aW9uIEV1aUljb25NbE91dGxpZXJEZXRlY3Rpb25Kb2IoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yIDEydjZoNnYySDB2LThoMnptMTggMHY4aC04di0yaDZ2LTZoMnpNOCAwdjJIMnY2SDBWMGg4em0xMiAwdjhoLTJWMmgtNlYwaDh6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTE2IDI0YTQgNCAwIDExMCA4IDQgNCAwIDAxMC04em0xMiAwYTQgNCAwIDExMCA4IDQgNCAwIDAxMC04em0tMTIgMS43NWEyLjI1IDIuMjUgMCAxMDAgNC41IDIuMjUgMi4yNSAwIDAwMC00LjV6bTEyIDBhMi4yNSAyLjI1IDAgMTAwIDQuNSAyLjI1IDIuMjUgMCAwMDAtNC41ek0yOCAxMmE0IDQgMCAxMTAgOCA0IDQgMCAwMTAtOHptMCAxLjc1YTIuMjUgMi4yNSAwIDEwMCA0LjUgMi4yNSAyLjI1IDAgMDAwLTQuNXpNMTAgNmE0IDQgMCAxMTAgOCA0IDQgMCAwMTAtOHptMCAxLjc1YTIuMjUgMi4yNSAwIDEwMCA0LjUgMi4yNSAyLjI1IDAgMDAwLTQuNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWxPdXRsaWVyRGV0ZWN0aW9uSm9iOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25NbFJlZ3Jlc3Npb25Kb2IgPSBmdW5jdGlvbiBFdWlJY29uTWxSZWdyZXNzaW9uSm9iKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjQgMGE4IDggMCAxMS00LjkwNiAxNC4zMmwtNC43NzQgNC43NzRhOCA4IDAgMTEtMS40MTQtMS40MTRsNC43NzQtNC43NzRBOCA4IDAgMDEyNCAwek04IDE4YTYgNiAwIDEwMCAxMiA2IDYgMCAwMDAtMTJ6TTI0IDJhNiA2IDAgMTAwIDEyIDYgNiAwIDAwMC0xMnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMzIgMjB2MTJIMjBWMjBoMTJ6bS0yIDJoLTh2OGg4di04ek0xMiAwdjEySDBWMGgxMnptLTIgMkgydjhoOFYyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25NbFJlZ3Jlc3Npb25Kb2I7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbk1vYmlsZSA9IGZ1bmN0aW9uIEV1aUljb25Nb2JpbGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02IDIuNWEuNS41IDAgMDEuNS0uNWgzYS41LjUgMCAwMTAgMWgtM2EuNS41IDAgMDEtLjUtLjV6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTQuNSAwQTEuNSAxLjUgMCAwMDMgMS41djEzQTEuNSAxLjUgMCAwMDQuNSAxNmg3YTEuNSAxLjUgMCAwMDEuNS0xLjV2LTEzQTEuNSAxLjUgMCAwMDExLjUgMGgtN3pNNCAxLjVhLjUuNSAwIDAxLjUtLjVoN2EuNS41IDAgMDEuNS41VjRINFYxLjV6TTQgMTN2MS41YS41LjUgMCAwMC41LjVoN2EuNS41IDAgMDAuNS0uNVYxM0g0em0wLTFoOFY1SDR2N3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTW9iaWxlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Nb29uID0gZnVuY3Rpb24gRXVpSWNvbk1vb24oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04Ljc5NiA5LjA0OGMtMS41NTItMi4yMzgtMS4xOTktNS4zMjMuNjEtOC4xLTMuNDctLjEyLTYuNiAyLjIzMi03LjI2OSA1LjY3Mi0uNzQyIDMuODIgMS44MyA3LjUzMyA1Ljc0OSA4LjI5NGE3LjIyNiA3LjIyNiAwIDAwNy41MjYtMy4yMThjLTIuNzk0LjE3Ny01LjI3LS43MTEtNi42MTYtMi42NDh6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1vb247IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbk5hbWVzcGFjZSA9IGZ1bmN0aW9uIEV1aUljb25OYW1lc3BhY2UoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEgMWgxNHYxNEgxVjF6bTEzIDEydjFIMlYyaDEydjExek02IDZoNHY0SDZWNnptLTEgNVY1aDZ2Nkg1elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25OYW1lc3BhY2U7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbk5lc3RlZCA9IGZ1bmN0aW9uIEV1aUljb25OZXN0ZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01LjUgMWEuNS41IDAgMDEwIDFIMy4wMDZDMi40NSAyIDIgMi40NSAyIDMuMDA2djkuOTg4QzIgMTMuNTUgMi40NSAxNCAzLjAwNiAxNEg1LjVhLjUuNSAwIDExMCAxSDMuMDA2QTIuMDA1IDIuMDA1IDAgMDExIDEyLjk5NFYzLjAwNkMxIDEuODk4IDEuODk3IDEgMy4wMDYgMUg1LjV6bTcuNDk0IDBjMS4wNTkgMCAxLjkyNC44MTggMiAxLjg1NmwuMDA2LjE1djkuOTg4YTIuMDA1IDIuMDA1IDAgMDEtMS44NTYgMmwtLjE1LjAwNkgxMC41YS41LjUgMCAwMS0uMDktLjk5MkwxMC41IDE0aDIuNDk0Yy41MTYgMCAuOTQxLS4zODggMS0uODg4bC4wMDYtLjExOFYzLjAwNmMwLS41MTYtLjM4OC0uOTQxLS44ODgtMUwxMi45OTQgMkgxMC41YS41LjUgMCAwMS0uMDktLjk5MkwxMC41IDFoMi40OTR6TTUgN2ExIDEgMCAxMTAgMiAxIDEgMCAwMTAtMnptMyAwYTEgMSAwIDExMCAyIDEgMSAwIDAxMC0yem0zIDBhMSAxIDAgMTEwIDIgMSAxIDAgMDEwLTJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk5lc3RlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTm9kZSA9IGZ1bmN0aW9uIEV1aUljb25Ob2RlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOC41IDEuNDQzYTEgMSAwIDAwLTEgMEwyLjU3MiA0LjI5YTEgMSAwIDAwLS41Ljg2NnY1LjY5YTEgMSAwIDAwLjUuODY2TDcuNSAxNC41NTdhMSAxIDAgMDAxIDBsNC45MjgtMi44NDZhMSAxIDAgMDAuNS0uODY2di01LjY5YTEgMSAwIDAwLS41LS44NjZMOC41IDEuNDQzek05IC41NzdsNC45MjggMi44NDZhMiAyIDAgMDExIDEuNzMydjUuNjlhMiAyIDAgMDEtMSAxLjczMkw5IDE1LjQyM2EyIDIgMCAwMS0yIDBsLTQuOTI4LTIuODQ2YTIgMiAwIDAxLTEtMS43MzJ2LTUuNjlhMiAyIDAgMDExLTEuNzMyTDcgLjU3N2EyIDIgMCAwMTIgMHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTm9kZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTnVtYmVyID0gZnVuY3Rpb24gRXVpSWNvbk51bWJlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuODA4IDEwLjE5N0g2Ljc5Nkw1Ljg1OSAxM0g0LjQ4NWwuOTM3LTIuODAzSDMuOTY2bC4yMTktMS4yNWgxLjY0N2wuNjA4LTEuODA1SDQuOTkxbC4yMjYtMS4yNTFoMS42NGwuOTUtMi44NDRoMS4zNjhsLS45NSAyLjg0NGgxLjAxOGwuOTUtMi44NDRoMS4zNzRsLS45NSAyLjg0NGgxLjUxbC0uMjE4IDEuMjVoLTEuNzAybC0uNjA4IDEuODA1aDEuNDk3bC0uMjE5IDEuMjUxSDkuMTgyTDguMjUyIDEzSDYuODc4bC45My0yLjgwM3ptLS42MDItMS4yNWgxLjAxMmwuNjE1LTEuODA1SDcuODE0bC0uNjA4IDEuODA0elwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTnVtYmVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25PZmZsaW5lID0gZnVuY3Rpb24gRXVpSWNvbk9mZmxpbmUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02LjUxNyAxMi4yNzFsMS4yNTQtMS4yNTRhMS41IDEuNSAwIDExLTEuMjU0IDEuMjU0em0yLjk0NS0yLjk0NGwuNzQtLjc0Yy4zNjEuMjA4LjY5NC40NjcuOTg3Ljc3MmEuNS41IDAgMDEtLjcyMS42OTMgMy40MjQgMy40MjQgMCAwMC0xLjAwNi0uNzI1em0yLjE2Mi0yLjE2M2wuNzE2LS43MTVjLjMwOC4yMzIuNTk5LjQ5Ljg3Ljc3MmEuNS41IDAgMTEtLjcyMi42OTIgNi4yNiA2LjI2IDAgMDAtLjg2NC0uNzQ5ek03LjA2MSA2LjA3QTYuMTk4IDYuMTk4IDAgMDAzLjU0IDcuODg1YS41LjUgMCAwMS0uNzE3LS42OTcgNy4xOTkgNy4xOTkgMCAwMTUuMzA5LTIuMTg3bC0xLjA3IDEuMDd6bTYuNjcyLTEuMDE0bC43MS0uNzFjLjI3NC4yMy41MzYuNDc2Ljc4Ni43MzZhLjUuNSAwIDAxLS43MjEuNjkyIDkuMSA5LjEgMCAwMC0uNzc1LS43MTh6bS0zLjgwNy0xLjg1QTkuMDYgOS4wNiAwIDAwOCAzYTguOTkgOC45OSAwIDAwLTYuNDY5IDIuNzM0LjUuNSAwIDExLS43MTctLjY5N0E5Ljk5IDkuOTkgMCAwMTggMmMuOTQ0IDAgMS44NjguMTMxIDIuNzUuMzgybC0uODI0LjgyNHpNOCAxM2EuNS41IDAgMTAwLTEgLjUuNSAwIDAwMCAxem0tNS40MjQgMWEuNS41IDAgMDEtLjcwNy0uNzA3TDE0LjE0NiAxLjE0NmEuNS41IDAgMDEuNzA4LjcwOEwyLjU3NiAxNHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uT2ZmbGluZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uT25saW5lID0gZnVuY3Rpb24gRXVpSWNvbk9ubGluZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggMTRhMS41IDEuNSAwIDExMC0zIDEuNSAxLjUgMCAwMTAgM3ptMC0xYS41LjUgMCAxMDAtMSAuNS41IDAgMDAwIDF6bTMuMTg5LTMuNjRhLjUuNSAwIDAxLS43MjEuNjkyQTMuNDA4IDMuNDA4IDAgMDA4IDljLS45MzcgMC0xLjgxMy4zNzgtMi40NTMgMS4wMzdhLjUuNSAwIDAxLS43MTctLjY5N0E0LjQwOCA0LjQwOCAwIDAxOCA4YzEuMjIgMCAyLjM2MS40OTcgMy4xODkgMS4zNnptMi4wMi0yLjE0YS41LjUgMCAxMS0uNzIxLjY5M0E2LjIgNi4yIDAgMDA4IDZhNi4xOTkgNi4xOTkgMCAwMC00LjQ2IDEuODg1LjUuNSAwIDAxLS43MTgtLjY5N0E3LjE5OSA3LjE5OSAwIDAxOCA1YTcuMiA3LjIgMCAwMTUuMjEgMi4yMnptMi4wMi0yLjEzOGEuNS41IDAgMDEtLjcyMS42OTJBOC45OSA4Ljk5IDAgMDA4IDNhOC45OSA4Ljk5IDAgMDAtNi40NjkgMi43MzQuNS41IDAgMTEtLjcxNy0uNjk3QTkuOTkgOS45OSAwIDAxOCAyYTkuOTkgOS45OSAwIDAxNy4yMyAzLjA4MnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uT25saW5lOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25QYWNrYWdlID0gZnVuY3Rpb24gRXVpSWNvblBhY2thZ2UoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNC40NDcgMy43MjRsLTYtM2ExIDEgMCAwMC0uODk0IDBsLTYgM0ExIDEgMCAwMDEgNC42MTh2Ni43NjRhMSAxIDAgMDAuNTUzLjg5NGw2IDNhMSAxIDAgMDAuODk0IDBsNi0zYTEgMSAwIDAwLjU1My0uODk0VjQuNjE4YTEgMSAwIDAwLS41NTMtLjg5NHpNNS44NzEgNS44OTdsNS4zNDMtMi42NzIgMi4xNTggMS4wNzlMOCA2Ljk0M3pNOCAxLjYxOGwyLjA5NiAxLjA0OC01LjM1MyAyLjY3Ny0yLjExNS0xLjAzOXpNMiA1LjExbDIuMjUgMS4xMDVWOWEuNS41IDAgMDAxIDBWNi43MDZMNy41IDcuODExdjYuMzIxTDIgMTEuMzgyem02LjUgOS4wMjJ2LTYuMzJMMTQgNS4xMXY2LjI3MnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUGFja2FnZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uUGFnZVNlbGVjdCA9IGZ1bmN0aW9uIEV1aUljb25QYWdlU2VsZWN0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTMgMWExIDEgMCAwMC0xIDF2MTJhMSAxIDAgMDAxIDFoNWE0Ljk5NSA0Ljk5NSAwIDAxLS41ODQtMUgzVjJoN3YyYTEgMSAwIDAwMSAxaDJ2Mi4xYy4zNDguMDcuNjgyLjE3NyAxIC4zMTZWNGExIDEgMCAwMC0uMjkzLS43MDdsLTItMkExIDEgMCAwMDExIDFIM3ptMTMgMTFhNCA0IDAgMTEtOCAwIDQgNCAwIDAxOCAwem0tMS42NDYtMS4zNTRhLjUuNSAwIDAxMCAuNzA4bC0yLjUgMi41YS41LjUgMCAwMS0uNzA4IDBsLTEtMWEuNS41IDAgMDEuNzA4LS43MDhsLjY0Ni42NDcgMi4xNDYtMi4xNDdhLjUuNSAwIDAxLjcwOCAwelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QYWdlU2VsZWN0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25QYWdlc1NlbGVjdCA9IGZ1bmN0aW9uIEV1aUljb25QYWdlc1NlbGVjdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0zIDFhMSAxIDAgMDExLTFoOGExIDEgMCAwMS43MDcuMjkzbDIgMkExIDEgMCAwMTE1IDN2NWE0Ljk5NSA0Ljk5NSAwIDAwLTEtLjU4NFY0aC0yYTEgMSAwIDAxLTEtMVYxSDR2MTJoMy4xYy4wNy4zNDguMTc3LjY4Mi4zMTYgMUg0YTEgMSAwIDAxLTEtMVYxem01IDE0SDJWMmExIDEgMCAwMC0xIDF2MTJhMSAxIDAgMDAxIDFoN2E1LjAyOSA1LjAyOSAwIDAxLTEtMXptOC0zYTQgNCAwIDExLTggMCA0IDQgMCAwMTggMHptLTEuNjQ2LTEuMzU0YS41LjUgMCAwMTAgLjcwOGwtMi41IDIuNWEuNS41IDAgMDEtLjcwOCAwbC0xLTFhLjUuNSAwIDAxLjcwOC0uNzA4bC42NDYuNjQ3IDIuMTQ2LTIuMTQ3YS41LjUgMCAwMS43MDggMHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUGFnZXNTZWxlY3Q7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblBhaW50ID0gZnVuY3Rpb24gRXVpSWNvblBhaW50KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTEuOTkzIDguMTdjMCAuODMtLjY3MyAxLjUwNy0xLjQ5OSAxLjUwN0g1LjQ5OEExLjUwNSAxLjUwNSAwIDAxMy45OTkgOC4xN1Y2LjY2Mmg3Ljk5NFY4LjE3em0tMi45OTggNS45OThjMCAuNDU1LS40NDguODI3LS45OTkuODI3LS41NSAwLTEtLjM3Mi0xLS44Mjd2LTMuNDg2aDJ2My40ODZ6TTQgNS42NThoMS4yNjJWMS4wMDVINHY0LjY1M3ptMi4yNjEgMGgxLjI0NFYxLjAwNUg2LjI2djQuNjUzem0yLjI0NCAwaDEuMjM1VjEuMDA1SDguNTA0djQuNjUzem0yLjIzNCAwaDEuMjU0VjEuMDA1aC0xLjI1NHY0LjY1M3pNMy4wMDggMEwzIDguMTdhMi41MDkgMi41MDkgMCAwMDIuNDk4IDIuNTEyaC41djMuNDg2YzAgMS4wMS44OTYgMS44MzIgMS45OTggMS44MzIgMS4xMDIgMCAxLjk5OC0uODIyIDEuOTk4LTEuODMydi0zLjQ4NmguNWEyLjUwOSAyLjUwOSAwIDAwMi40OTgtMi41MTJMMTMgMEgzLjAwOHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUGFpbnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblBhcGVyQ2xpcCA9IGZ1bmN0aW9uIEV1aUljb25QYXBlckNsaXAoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05Ljg0IDIuMDE5TDMuMDQ2IDguNTdjLS45ODcuOTUyLTEuMTMzIDIuNTE3LS4xOTkgMy41MTYuOTUxIDEuMDIxIDIuNTggMS4xMDYgMy42NC4xOS4wMzQtLjAzLjA2OC0uMDYxLjEtLjA5Mmw1LjY1NS01LjQ1MmEuNDg0LjQ4NCAwIDAwMC0uNzAzLjUzLjUzIDAgMDAtLjcyOSAwTDUuOTIgMTEuNDIxYy0uNTcyLjU1MS0xLjUwNS42NTctMi4xMzEuMTYzYTEuNDU1IDEuNDU1IDAgMDEtLjExOC0yLjIxMWw2Ljg5OS02LjY1MWEyLjY0NiAyLjY0NiAwIDAxMy42NDQgMCAyLjQyMiAyLjQyMiAwIDAxMCAzLjUxM0w3LjMgMTIuOTAxYy0xLjMzMyAxLjI4NS0zLjQ5NyAxLjQ5My00Ljk1LjMzNi0xLjU0LTEuMjItMS43NjQtMy40MTEtLjUtNC44OTdhMy4zMyAzLjMzIDAgMDEuMjM4LS4yNTJsNS43OC01LjU3MmEuNDg0LjQ4NCAwIDAwMC0uNzAzLjUzLjUzIDAgMDAtLjczIDBsLTUuNzggNS41NzJhNC4zNiA0LjM2IDAgMDAwIDYuMzI0YzIuMTg4IDIuMTA5IDUuMjAyIDEuMzEgNi42Ni0uMDk1bDYuOTI1LTYuNjc2YTMuMzkgMy4zOSAwIDAwMC00LjkyQzEzLjUzNC42NiAxMS4yNS42NiA5Ljg0MSAyLjAxOXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUGFwZXJDbGlwOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25QYXJ0aWFsID0gZnVuY3Rpb24gRXVpSWNvblBhcnRpYWwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02LjY2NCAxNC44NzFhNyA3IDAgMDEtMi40Mi0xMi43NzguNS41IDAgMDEuNjEyLjA2Yy40NTYuNDMxIDguMjE2IDguMjEyIDguOTggOS4wMDJhLjUuNSAwIDAxLjA2My42MTggNy4wMDIgNy4wMDIgMCAwMS03LjIzNSAzLjA5OHptNi4xNjgtMy4zMTJhMTk2MS43MzMgMTk2MS43MzMgMCAwMC04LjM3Ny04LjQgNiA2IDAgMTA4LjM3OCA4LjR6bTIuMDk1LTIuNTQ4YS41LjUgMCAxMS0uOTktLjE0NGMuMDEtLjA2Ni4wMS0uMDY2LjAxOC0uMTMzYTYuMDA3IDYuMDA3IDAgMDAtLjAzNC0xLjcxNC41LjUgMCAxMS45ODctLjE2M2MuMTA4LjY1NS4xMjIgMS4zMjYuMDQgMS45OTlsLS4wMjEuMTU1em0tMS4yNzMtNS4xMzhhLjUuNSAwIDExLS44MDguNTkgNi4wMjYgNi4wMjYgMCAwMC0xLjMwNC0xLjMwOC41LjUgMCAwMS41OS0uODA2IDcuMDI2IDcuMDI2IDAgMDExLjUyMiAxLjUyNHpNOS4xNjkgMS4wOThhLjUuNSAwIDExLS4xNjYuOTg2IDYuMTA1IDYuMTA1IDAgMDAtMS44NDktLjAyNi41LjUgMCAwMS0uMTQtLjk5IDcuMDIgNy4wMiAwIDAxMi4xNTUuMDN6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBhcnRpYWw7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblBhdXNlID0gZnVuY3Rpb24gRXVpSWNvblBhdXNlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNSAyYTEgMSAwIDAwLTEgMXYxMGExIDEgMCAxMDIgMFYzYTEgMSAwIDAwLTEtMXptNiAwYTEgMSAwIDAwLTEgMXYxMGExIDEgMCAxMDIgMFYzYTEgMSAwIDAwLTEtMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUGF1c2U7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblBheW1lbnQgPSBmdW5jdGlvbiBFdWlJY29uUGF5bWVudChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTS41ODYgMi41ODZBMiAyIDAgMDAwIDRoMWExIDEgMCAwMTEtMVYyYTIgMiAwIDAwLTEuNDE0LjU4NnpNMiAyaDEwLjVhLjUuNSAwIDAxMCAxSDJWMnpNMCA0aDF2Ni41YS41LjUgMCAwMS0xIDBWNHptMi41ODYuNTg2QTIgMiAwIDAwMiA2aDFhMSAxIDAgMDExLTFWNGEyIDIgMCAwMC0xLjQxNC41ODZ6bTAgOC44MjhBMiAyIDAgMDEyIDEyaDFhMSAxIDAgMDAxIDF2MWEyIDIgMCAwMS0xLjQxNC0uNTg2em0xMi44MjgtOC44MjhBMiAyIDAgMDExNiA2aC0xYTEgMSAwIDAwLTEtMVY0YTIgMiAwIDAxMS40MTQuNTg2em0wIDguODI4QTIgMiAwIDAwMTYgMTJoLTFhMSAxIDAgMDEtMSAxdjFhMiAyIDAgMDAxLjQxNC0uNTg2ek00IDRoMTB2MUg0ek0zIDdoMTJ2MUgzem0xIDZoMTB2MUg0ek0yIDZoMXY2SDJ6bTEzIDBoMXY2aC0xem0tNS41IDRhLjUuNSAwIDAxMCAxSDcuNDk2YS41LjUgMCAwMTAtMUg5LjV6bTQgMGEuNS41IDAgMDEwIDFoLTIuMDA0YS41LjUgMCAwMTAtMUgxMy41elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QYXltZW50OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25QZW5jaWwgPSBmdW5jdGlvbiBFdWlJY29uUGVuY2lsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIuMTQ4IDMuMTQ4TDExIDJsLTkgOXYzaDNsOS05LTEuMTQ0LTEuMTQ0LTguMDAyIDcuOTk4YS41MDIuNTAyIDAgMDEtLjcwOCAwIC41MDIuNTAyIDAgMDEwLS43MDhsOC4wMDItNy45OTh6TTExIDFjLjI1NiAwIC41MTIuMDk4LjcwNy4yOTNsMyAzYS45OTkuOTk5IDAgMDEwIDEuNDE0bC05IDlBLjk5Ny45OTcgMCAwMTUgMTVIMmExIDEgMCAwMS0xLTF2LTNjMC0uMjY1LjEwNS0uNTIuMjkzLS43MDdsOS05QS45OTcuOTk3IDAgMDExMSAxek01IDE0SDJ2LTNsMyAzelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QZW5jaWw7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblBlcmNlbnQgPSBmdW5jdGlvbiBFdWlJY29uUGVyY2VudChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk01IDhjMS4xMDUgMCAyLTEuMTIgMi0yLjVTNi4xMDUgMyA1IDMgMyA0LjEyIDMgNS41IDMuODk1IDggNSA4em0wLTFjLjM1NiAwIDEtLjQ1MiAxLTEuNVM1LjM1NiA0IDUgNHMtMSAuNDUyLTEgMS41UzQuNjQ0IDcgNSA3elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAuNSAzSDEyTDUuNSAxM0g0bDYuNS0xMHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMyAxMC41YzAgMS4zOC0uODk1IDIuNS0yIDIuNXMtMi0xLjEyLTItMi41UzkuODk1IDggMTEgOHMyIDEuMTIgMiAyLjV6bS0xIDBjMCAxLjA0OC0uNjQ0IDEuNS0xIDEuNXMtMS0uNDUyLTEtMS41LjY0NC0xLjUgMS0xLjUgMSAuNDUyIDEgMS41elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QZXJjZW50OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25QaW4gPSBmdW5jdGlvbiBFdWlJY29uUGluKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTggMTFoNC41YS41LjUgMCAxMDAtMWgtMTBhLjUuNSAwIDAwMCAxSDd2NC4yNWMwIC40MTQuMjI0Ljc1LjUuNzVzLjUtLjMzNi41LS43NVYxMXpNNCA0aDF2Nkg0VjR6bTYgMGgxdjZoLTFWNHpNNC4yODYgMkM0LjA4IDIgNCAyLjA2MyA0IDJ2MWMwLS4wNjMuMDggMCAuMjg2IDBoNi40MjhDMTAuOTIgMyAxMSAyLjkzNyAxMSAzVjJjMCAuMDYzLS4wOCAwLS4yODYgMEg0LjI4NnptMC0xaDYuNDI4QzExLjQyNCAxIDEyIDEuNDQ4IDEyIDJ2MWMwIC41NTItLjU3NiAxLTEuMjg2IDFINC4yODZDMy41NzYgNCAzIDMuNTUyIDMgM1YyYzAtLjU1Mi41NzYtMSAxLjI4Ni0xelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QaW47IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblBpbkZpbGxlZCA9IGZ1bmN0aW9uIEV1aUljb25QaW5GaWxsZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05IDExaDQuNWEuNS41IDAgMTAwLTFoLTEwYS41LjUgMCAxMDAgMUg4djQuMjVjMCAuNDE0LjIyNC43NS41Ljc1cy41LS4zMzYuNS0uNzVWMTF6TTUgNGg3djZINVY0em0uMjg2LTNoNi40MjhDMTIuNDI0IDEgMTMgMS40NDggMTMgMnYxYzAgLjU1Mi0uNTc2IDEtMS4yODYgMUg1LjI4NkM0LjU3NiA0IDQgMy41NTIgNCAzVjJjMC0uNTUyLjU3Ni0xIDEuMjg2LTF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBpbkZpbGxlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uUGxheSA9IGZ1bmN0aW9uIEV1aUljb25QbGF5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNC42MDggMy4wNjNDNC4zNDUgMi44OTUgNCAzLjA4OSA0IDMuNDE4djkuMTY3YzAgLjMyOS4zNDUuNTIzLjYwOC4zNTZsNy4yLTQuNTg0YS40MjYuNDI2IDAgMDAwLS43MTFsLTcuMi00LjU4M3ptLjUzOC0uODQ0bDcuMiA0LjU4M2ExLjQyNiAxLjQyNiAwIDAxMCAyLjM5OWwtNy4yIDQuNTgzQzQuMjEgMTQuMzggMyAxMy42OTYgMyAxMi41ODVWMy40MThDMyAyLjMwNyA0LjIxIDEuNjI0IDUuMTQ2IDIuMjJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBsYXk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblBsYXlGaWxsZWQgPSBmdW5jdGlvbiBFdWlJY29uUGxheUZpbGxlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyLjM0NSA2LjgwMWwtNy4yLTQuNTgxQzQuMjEgMS42MjUgMyAyLjMwOCAzIDMuNDE5djkuMTYyYzAgMS4xMTEgMS4yMSAxLjc5NCAyLjE0NiAxLjE5OWw3LjItNC41ODFhMS40MjUgMS40MjUgMCAwMDAtMi4zOTh6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBsYXlGaWxsZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblBsdXMgPSBmdW5jdGlvbiBFdWlJY29uUGx1cyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguMjUgM2EuNS41IDAgMDEuNS41djMuNzVoMy43NWEuNS41IDAgMDEuNS41di41YS41LjUgMCAwMS0uNS41SDguNzV2My43NWEuNS41IDAgMDEtLjUuNWgtLjVhLjUuNSAwIDAxLS41LS41VjguNzVIMy41YS41LjUgMCAwMS0uNS0uNXYtLjVhLjUuNSAwIDAxLjUtLjVoMy43NVYzLjVhLjUuNSAwIDAxLjUtLjVoLjV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBsdXM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblBsdXNJbkNpcmNsZSA9IGZ1bmN0aW9uIEV1aUljb25QbHVzSW5DaXJjbGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOCA3aDMuNWEuNS41IDAgMTEwIDFIOHYzLjVhLjUuNSAwIDExLTEgMFY4SDMuNWEuNS41IDAgMDEwLTFIN1YzLjVhLjUuNSAwIDAxMSAwVjd6bS0uNS03QzExLjYzNiAwIDE1IDMuMzY0IDE1IDcuNVMxMS42MzYgMTUgNy41IDE1IDAgMTEuNjM2IDAgNy41IDMuMzY0IDAgNy41IDB6bTAgLjg4MmE2LjYxOCA2LjYxOCAwIDEwMCAxMy4yMzZBNi42MTggNi42MTggMCAwMDcuNS44ODJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBsdXNJbkNpcmNsZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uUGx1c0luQ2lyY2xlRmlsbGVkID0gZnVuY3Rpb24gRXVpSWNvblBsdXNJbkNpcmNsZUZpbGxlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggN1YzLjVhLjUuNSAwIDAwLTEgMFY3SDMuNWEuNS41IDAgMDAwIDFIN3YzLjVhLjUuNSAwIDEwMSAwVjhoMy41YS41LjUgMCAxMDAtMUg4em0tLjUgOGE3LjUgNy41IDAgMTEwLTE1IDcuNSA3LjUgMCAwMTAgMTV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBsdXNJbkNpcmNsZUZpbGxlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uUG9wb3V0ID0gZnVuY3Rpb24gRXVpSWNvblBvcG91dChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEzIDguNWEuNS41IDAgMTExIDBWMTJhMiAyIDAgMDEtMiAySDRhMiAyIDAgMDEtMi0yVjRhMiAyIDAgMDEyLTJoMy41YS41LjUgMCAwMTAgMUg0YTEgMSAwIDAwLTEgMXY4YTEgMSAwIDAwMSAxaDhhMSAxIDAgMDAxLTFWOC41em0tNS4xMi4zMzlhLjUuNSAwIDExLS43MDYtLjcwN0wxMy4zMDUgMkgxMC41YS41LjUgMCAxMTAtMUgxNGExIDEgMCAwMTEgMXYzLjVhLjUuNSAwIDExLTEgMFYyLjcyTDcuODggOC44Mzh6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBvcG91dDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uUHVzaCA9IGZ1bmN0aW9uIEV1aUljb25QdXNoKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOC4xNzEgNS4xNUwxMC4xMTQgN0gxLjU1NkMxLjI0OSA3IDEgNy4yMjQgMSA3LjVzLjI0OS41LjU1Ni41aDguNTI2bC0xLjkxIDEuODJhLjUyLjUyIDAgMDAwIC43N2MuMjI3LjIxMy42LjIxMy44MjggMGwyLjA1LTEuOTVhMS41NTIgMS41NTIgMCAwMDAtMi4zMUw5IDQuMzhhLjYxNy42MTcgMCAwMC0uODI5IDAgLjUyLjUyIDAgMDAwIC43N3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuODA0IDEyLjc5MkEuOTkzLjk5MyAwIDAxNiAxMS44MlYxMEg1djEuODI2YzAgLjk0NS42NzMgMS43NiAxLjYwOCAxLjk0NWw2IDEuMTlBMS45OTIgMS45OTIgMCAwMDE1IDEzLjAxNlYxLjk4NEEyIDIgMCAwMDEyLjYwOC4wNGwtNiAxLjE5QzUuNjczIDEuNDE1IDUgMi4yMyA1IDMuMTc1VjVoMVYzLjE4YzAtLjQ3Mi4zMzYtLjg3OS44MDQtLjk3Mmw2LTEuMTg5QTEgMSAwIDAxMTQgMS45OTF2MTEuMDE4YS45OTUuOTk1IDAgMDEtMS4xOTYuOTcybC02LTEuMTl6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblB1c2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblF1ZXN0aW9uSW5DaXJjbGUgPSBmdW5jdGlvbiBFdWlJY29uUXVlc3Rpb25JbkNpcmNsZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggMTRBNiA2IDAgMTE4IDJhNiA2IDAgMDEwIDEyem0wLTFBNSA1IDAgMTA4IDNhNSA1IDAgMDAwIDEwem0tLjE4Ni0xLjA2NUEuNzg1Ljc4NSAwIDAxNyAxMS4xMmMwLS40OC4zNC0uODIuODE0LS44Mi40NzUgMCAuODA5LjM0LjgwOS44MiAwIC40NzUtLjMzNC44MTUtLjgwOS44MTV6TTUuOSA2LjMxN0M1Ljk2IDUuMTY4IDYuNzU1IDQuNCA4LjA0OCA0LjRjMS4yMTggMCAyLjA5MS43NTkgMi4wOTEgMS44IDAgLjczNi0uMzYgMS4zMDQtMS4wMyAxLjcwNy0uNTYuMzMtLjcxNy41Ni0uNzE3IDEuMDIydi4zMDVsLS4xLjFINy40N2wtLjEtLjF2LS40MzFjLS4wMDUtLjY0Ni4zMDItMS4xMDQuOTg3LTEuNTE0LjUyNy0uMzIyLjcwOC0uNTkuNzA4LTEuMDQ3IDAtLjUzNi0uNDE2LS45MS0xLjA1LS45MS0uNjUyIDAtMS4wNjQuMzc0LTEuMTEyLjk5OGwtLjEuMDkySDZsLS4xLS4xMDV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblF1ZXN0aW9uSW5DaXJjbGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblF1b3RlID0gZnVuY3Rpb24gRXVpSWNvblF1b3RlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNi44NDggMi40N2ExIDEgMCAwMS0uMzE4IDEuMzc4QTcuMjg0IDcuMjg0IDAgMDAzLjc1IDcuMDEgMyAzIDAgMTExIDEwdi0uMDI3YTMuNTIxIDMuNTIxIDAgMDEuMDEtLjIzMmMuMDA5LS4xNS4wMjctLjM2LjA2Mi0uNjE4LjA3LS41MTMuMjA3LTEuMjIuNDg0LTIuMDE0LjU1Mi0xLjU5IDEuNjctMy41NTUgMy45MTQtNC45NTdhMSAxIDAgMDExLjM3OC4zMTh6bTcgMGExIDEgMCAwMS0uMzE4IDEuMzc4IDcuMjgzIDcuMjgzIDAgMDAtMi43OCAzLjE2MkEzIDMgMCAxMTggMTB2LS4wMjdhMy41MjEgMy41MjEgMCAwMS4wMS0uMjMyYy4wMDktLjE1LjAyNy0uMzYuMDYyLS42MTguMDctLjUxMy4yMDctMS4yMi40ODQtMi4wMTQuNTUyLTEuNTkgMS42Ny0zLjU1NSAzLjkxNC00Ljk1N2ExIDEgMCAwMTEuMzc4LjMxOHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUXVvdGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblJlZnJlc2ggPSBmdW5jdGlvbiBFdWlJY29uUmVmcmVzaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTExLjIyOCAyLjk0MmEuNS41IDAgMTEtLjUzOC44NDJBNSA1IDAgMTAxMyA4YS41LjUgMCAxMTEgMCA2IDYgMCAxMS0yLjc3Mi01LjA1OHpNMTQgMS41djNBMS41IDEuNSAwIDAxMTIuNSA2aC0zYS41LjUgMCAwMTAtMWgzYS41LjUgMCAwMC41LS41di0zYS41LjUgMCAxMTEgMHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUmVmcmVzaDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uUmVwb3J0ZXIgPSBmdW5jdGlvbiBFdWlJY29uUmVwb3J0ZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNy42ODQuODk1TDYuMDc0LjM1OGExIDEgMCAwMC0xLjI5Ni43NTNMNC4yIDRIMi41YS41LjUgMCAwMDAgMWgxLjYyNmE0LjAwNyA0LjAwNyAwIDAwLjExIDIuMzU5bC0yLjA3Mi0uMzQ1QTEgMSAwIDAwMSA4djFjLjM2NCAwIC43MDYuMDk3IDEgLjI2OFY4bDEgLjE2NyAxLjg1OS4zMSAyLjE2My4zNi40NzguMDh2NkwyIDE0di0xLjI2OEExLjk5IDEuOTkgMCAwMTEgMTN2MWExIDEgMCAwMC44MzYuOTg2bDYgMWMuMTA4LjAxOC4yMi4wMTguMzI4IDBsNi0xQTEgMSAwIDAwMTUgMTR2LTFhMS45OSAxLjk5IDAgMDEtMS0uMjY4VjE0bC01LjUuOTE3di02bC40NzgtLjA4IDIuMTYzLS4zNkwxMyA4LjE2NiAxNCA4djEuMjY4QTEuOTkgMS45OSAwIDAxMTUgOVY4YTEgMSAwIDAwLTEuMTY0LS45ODZsLTIuMDczLjM0NUEzLjk5MSAzLjk5MSAwIDAwMTEuODc0IDVIMTMuNWEuNS41IDAgMDAwLTFoLTEuN2wtLjU3OC0yLjg5QTEgMSAwIDAwOS45MjUuMzU5TDguMzE2Ljg5NWExIDEgMCAwMS0uNjMyIDB6bTIuODggNi42NjRBMy4wMTMgMy4wMTMgMCAwMDEwLjgzIDVINS4xN2EzLjAxMyAzLjAxMyAwIDAwLjI2NiAyLjU1OUw4IDcuOTg2bDIuNTY0LS40Mjd6TTEwLjggNEg5LjJMOSAzbDEuNS0uNS4zIDEuNXpNMSAxMmExIDEgMCAxMDAtMiAxIDEgMCAwMDAgMnptMTQgMGExIDEgMCAxMDAtMiAxIDEgMCAwMDAgMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUmVwb3J0ZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblJldHVybktleSA9IGZ1bmN0aW9uIEV1aUljb25SZXR1cm5LZXkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMS45OTQgNGMxLjA1OSAwIDEuOTI0LjgxOCAyIDEuODU2bC4wMDYuMTV2MS45ODhhMi4wMDUgMi4wMDUgMCAwMS0xLjg1NiAyTDEyIDEwSDMuNDg0bDEuOTEgMS44MmEuNTIuNTIgMCAwMTAgLjc3LjYxNi42MTYgMCAwMS0uODI5IDBsLTIuMDUtMS45NWExLjU1MSAxLjU1MSAwIDAxMC0yLjMxbDIuMDUtMS45NWEuNjE3LjYxNyAwIDAxLjgzIDAgLjUyLjUyIDAgMDEwIC43N0wzLjQ1IDlIMTJjLjUxNC0uMDAzLjkzNS0uMzkuOTkzLS44ODhMMTMgNy45OTRWNi4wMDZjMC0uNTE2LS4zODgtLjk0MS0uODg4LTFMMTEuOTk0IDVIOS41YS41LjUgMCAwMS0uMDktLjk5Mkw5LjUgNGgyLjQ5NHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUmV0dXJuS2V5OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25TYXZlID0gZnVuY3Rpb24gRXVpSWNvblNhdmUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01LjAwOCAySDIuMjgyYy0uMTgxIDAtLjI0NS4wMDItLjI3NS4wMDctLjAwNS4wMy0uMDA3LjA5NC0uMDA3LjI3NXYxMS40MzZjMCAuMTgxLjAwMi4yNDUuMDA3LjI3NS4wMy4wMDUuMDk0LjAwNy4yNzUuMDA3aDExLjQzNmMuMTgxIDAgLjI0NS0uMDAyLjI3NS0uMDA3LjAwNS0uMDMuMDA3LS4wOTQuMDA3LS4yNzVWNC42MmMwLS4xMy0uMDAxLS4xOC0uMDA0LS4yMDRhMi42NTQgMi42NTQgMCAwMC0uMTQxLS4xNDdMMTEuNzMgMi4xNDVhMi42NTQgMi42NTQgMCAwMC0uMTQ3LS4xNDFBMi42NTQgMi42NTQgMCAwMDExLjM4IDJoLS4zODhjLjAwNS4wOC4wMDguMTcyLjAwOC4yODJ2Mi40MzZjMCAuNDQ2LS4wNDYuNjA3LS4xMzQuNzdhLjkwOS45MDkgMCAwMS0uMzc4LjM3OGMtLjE2My4wODgtLjMyNC4xMzQtLjc3LjEzNEg2LjI4MmMtLjQ0NiAwLS42MDctLjA0Ni0uNzctLjEzNGEuOTA5LjkwOSAwIDAxLS4zNzgtLjM3OEM1LjA0NiA1LjMyNSA1IDUuMTY0IDUgNC43MThWMi4yODJjMC0uMTEuMDAzLS4yMDIuMDA4LS4yODJ6TTIuMjgyIDFoOS4wOThjLjI1OSAwIC4zNDguMDEuNDQ3LjAzMmEuODcuODcgMCAwMS4yNzMuMTEzYy4wODYuMDU0LjE1Ni4xMS4zMzguMjkzbDIuMTI0IDIuMTI0Yy4xODIuMTgyLjIzOS4yNTIuMjkzLjMzOGEuODcuODcgMCAwMS4xMTMuMjczYy4wMjMuMS4wMzIuMTg4LjAzMi40NDd2OS4wOThjMCAuNDQ2LS4wNDYuNjA3LS4xMzQuNzdhLjkwOS45MDkgMCAwMS0uMzc4LjM3OGMtLjE2My4wODgtLjMyNC4xMzQtLjc3LjEzNEgyLjI4MmMtLjQ0NiAwLS42MDctLjA0Ni0uNzctLjEzNGEuOTA5LjkwOSAwIDAxLS4zNzgtLjM3OGMtLjA4OC0uMTYzLS4xMzQtLjMyNC0uMTM0LS43N1YyLjI4MmMwLS40NDYuMDQ2LS42MDcuMTM0LS43N2EuOTA5LjkwOSAwIDAxLjM3OC0uMzc4Yy4xNjMtLjA4OC4zMjQtLjEzNC43Ny0uMTM0ek02IDIuMjgydjIuNDM2YzAgLjE4MS4wMDIuMjQ1LjAwNy4yNzUuMDMuMDA1LjA5NC4wMDcuMjc1LjAwN2gzLjQzNmMuMTgxIDAgLjI0NS0uMDAyLjI3NS0uMDA3LjAwNS0uMDMuMDA3LS4wOTQuMDA3LS4yNzVWMi4yODJjMC0uMTgxLS4wMDItLjI0NS0uMDA3LS4yNzVBMi4yNDggMi4yNDggMCAwMDkuNzE4IDJINi4yODJjLS4xODEgMC0uMjQ1LjAwMi0uMjc1LjAwNy0uMDA1LjAzLS4wMDcuMDk0LS4wMDcuMjc1ek04IDEyYTIgMiAwIDExMC00IDIgMiAwIDAxMCA0em0wLTFhMSAxIDAgMTAwLTIgMSAxIDAgMDAwIDJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblNhdmU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblNjYWxlID0gZnVuY3Rpb24gRXVpSWNvblNjYWxlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEyLjUgMTJhLjUuNSAwIDExMCAxIC41LjUgMCAwMTAtMXptLTIgMGEuNS41IDAgMTEwIDEgLjUuNSAwIDAxMC0xem0tMiAwYS41LjUgMCAxMTAgMSAuNS41IDAgMDEwLTF6bTQtMmEuNS41IDAgMTEwIDEgLjUuNSAwIDAxMC0xem0tMiAwYS41LjUgMCAxMTAgMSAuNS41IDAgMDEwLTF6bTItMWEuNS41IDAgMTEwLTEgLjUuNSAwIDAxMCAxem0wLTNhLjUuNSAwIDExMCAxIC41LjUgMCAwMTAtMXptLTIgMmEuNS41IDAgMTEwIDEgLjUuNSAwIDAxMC0xem0tMiAwYS41LjUgMCAxMTAgMSAuNS41IDAgMDEwLTF6bTAgMmEuNS41IDAgMTEwIDEgLjUuNSAwIDAxMC0xem0tMiAyYS41LjUgMCAxMTAgMSAuNS41IDAgMDEwLTF6bS0yIDBhLjUuNSAwIDExMCAxIC41LjUgMCAwMTAtMXptMi0yYS41LjUgMCAxMTAgMSAuNS41IDAgMDEwLTF6bTYtNmEuNS41IDAgMTEwIDEgLjUuNSAwIDAxMC0xem0tMiAyYS41LjUgMCAxMTAgMSAuNS41IDAgMDEwLTF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblNjYWxlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25TZWFyY2ggPSBmdW5jdGlvbiBFdWlJY29uU2VhcmNoKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTEuMjcxIDExLjk3OGwzLjg3MiAzLjg3M2EuNTAyLjUwMiAwIDAwLjcwOCAwIC41MDIuNTAyIDAgMDAwLS43MDhsLTMuNTY1LTMuNTY0YzIuMzgtMi43NDcgMi4yNjctNi45MjMtLjM0Mi05LjUzMi0yLjczLTIuNzMtNy4xNy0yLjczLTkuODk4IDAtMi43MjggMi43MjktMi43MjggNy4xNyAwIDkuOWE2Ljk1NSA2Ljk1NSAwIDAwNC45NDkgMi4wNS41LjUgMCAwMDAtMSA1Ljk2IDUuOTYgMCAwMS00LjI0Mi0xLjc1NyA2LjAxIDYuMDEgMCAwMTAtOC40ODZjMi4zMzctMi4zNCA2LjE0My0yLjM0IDguNDg0IDBhNi4wMSA2LjAxIDAgMDEwIDguNDg2LjUuNSAwIDAwLjAzNC43Mzh6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblNlYXJjaDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uU2VjdXJpdHlTaWduYWwgPSBmdW5jdGlvbiBFdWlJY29uU2VjdXJpdHlTaWduYWwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTEuODc1IDMuNDE4YTYgNiAwIDEwLjcwNy43MDdsLTIuNDYgMi40Ni0xLjE1NiAxLjE1NmExIDEgMCAxMS0uNzA3LS43MDdsLjc1Ny0uNzU3YTIgMiAwIDAwLTIuNDMgMy4xMzcuNS41IDAgMTEtLjcwNy43MDcgMyAzIDAgMDEzLjg2LTQuNTY3bC43MTQtLjcxNEE0IDQgMCAxMDggMTJhLjUuNSAwIDExMCAxIDUgNSAwIDExMy4xNjQtOC44NzFsLjcxLS43MXptLjcwOS0uNzA5YTcgNyAwIDEwLjcwNy43MDdsLjM2Ni0uMzY2YS41LjUgMCAxMC0uNzA3LS43MDdsLS4zNjYuMzY2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TZWN1cml0eVNpZ25hbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uU2VjdXJpdHlTaWduYWxEZXRlY3RlZCA9IGZ1bmN0aW9uIEV1aUljb25TZWN1cml0eVNpZ25hbERldGVjdGVkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEzLjY1NyAzLjA1YS41LjUgMCAwMC0uNzA3LS43MDdsLS4zNjYuMzY2QTcgNyAwIDEwOCAxNWE0Ljk5NCA0Ljk5NCAwIDAxLS41OTctMS4wMyA2IDYgMCAxMTQuNDcxLTEwLjU1MmwtLjcxLjcxYTUgNSAwIDEwLTQuMDggOC43ODggNS4wMjcgNS4wMjcgMCAwMS0uMDgyLTEuMDQyQTQuMDAyIDQuMDAyIDAgMDE4IDRhMy45OCAzLjk4IDAgMDEyLjQ1My44NGwtLjcxNS43MTRhMyAzIDAgMDAtMy44NiA0LjU2Ny41LjUgMCAxMC43MDgtLjcwNyAyIDIgMCAwMTIuNDMtMy4xMzdsLS43NTcuNzU3YTEgMSAwIDEwLjcwNy43MDdsMS4xNTUtMS4xNTUgMi40Ni0yLjQ2YTUuOTcyIDUuOTcyIDAgMDExLjM5IDMuMjc3Yy4zNjcuMTU4LjcxMy4zNiAxLjAyOS41OTcgMC0xLjYzNi0uNTctMy4yNzEtMS43MS00LjU4NGwuMzY3LS4zNjZ6TTE2IDEyYTQgNCAwIDExLTggMCA0IDQgMCAwMTggMHptLTQgLjVhLjU3Ny41NzcgMCAwMS0uNTctLjQ5NWwtLjI5LTIuMDE1YS44NjcuODY3IDAgMTExLjcxOCAwbC0uMjg4IDIuMDE1YS41NzcuNTc3IDAgMDEtLjU3LjQ5NXptMCAyLjVhMSAxIDAgMTAwLTIgMSAxIDAgMDAwIDJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblNlY3VyaXR5U2lnbmFsUmVzb2x2ZWQgPSBmdW5jdGlvbiBFdWlJY29uU2VjdXJpdHlTaWduYWxSZXNvbHZlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMy42NTcgMy4wNWEuNS41IDAgMTAtLjcwNy0uNzA3bC0uMzY2LjM2NkE3IDcgMCAxMDggMTVhNC45OTQgNC45OTQgMCAwMS0uNTk3LTEuMDMgNiA2IDAgMTE0LjQ3MS0xMC41NTJsLS43MS43MWE1IDUgMCAxMC00LjA4IDguNzg4IDUuMDI4IDUuMDI4IDAgMDEtLjA4Mi0xLjA0MkE0LjAwMiA0LjAwMiAwIDAxOCA0YTMuOTggMy45OCAwIDAxMi40NTMuODRsLS43MTUuNzE0YTMgMyAwIDAwLTMuODYgNC41NjcuNS41IDAgMTAuNzA4LS43MDcgMiAyIDAgMDEyLjQzLTMuMTM3bC0uNzU3Ljc1N2ExIDEgMCAxMC43MDcuNzA3bDEuMTU1LTEuMTU1IDIuNDYtMi40NmE1Ljk3MiA1Ljk3MiAwIDAxMS4zOSAzLjI3N2MuMzY3LjE1OC43MTMuMzYgMS4wMjkuNTk3IDAtMS42MzYtLjU3LTMuMjcxLTEuNzEtNC41ODRsLjM2Ny0uMzY2ek0xNiAxMmE0IDQgMCAxMS04IDAgNCA0IDAgMDE4IDB6bS0xLjY0Ni0xLjM1NGEuNS41IDAgMDEwIC43MDdsLTIuNSAyLjVhLjUuNSAwIDAxLS43MDggMGwtMS0xYS41LjUgMCAwMS43MDgtLjcwN2wuNjQ2LjY0NyAyLjE0Ni0yLjE0N2EuNS41IDAgMDEuNzA4IDB6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblNlY3VyaXR5U2lnbmFsUmVzb2x2ZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblNlc3Npb25WaWV3ZXIgPSBmdW5jdGlvbiBFdWlJY29uU2Vzc2lvblZpZXdlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQgNmgxdjFINFY2em0yIDJINVY3aDF2MXptMCAxVjhoMXYxSDZ6bS0xIDFWOWgxdjFINXptMCAwdjFINHYtMWgxem0yIDBoNHYxSDd2LTF6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMSAzYTEgMSAwIDAxMS0xaDEyYTEgMSAwIDAxMSAxdjEwYTEgMSAwIDAxLTEgMUgyYTEgMSAwIDAxLTEtMVYzem0xIDFoMTJ2OUgyVjR6XCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TZXNzaW9uVmlld2VyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25TaGFyZCA9IGZ1bmN0aW9uIEV1aUljb25TaGFyZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUuMTM0IDcuMDMxTDggMTIuNzY0bDIuODY2LTUuNzMzTDggMi4wMTYgNS4xMzQgNy4wM3pNOCAwbDQgNy00IDgtNC04IDQtN3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU2hhcmQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblNoYXJlID0gZnVuY3Rpb24gRXVpSWNvblNoYXJlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMyA2LjgxdjYuMzhjMCAuNDkzLjQ0OC45Ljk5Mi45aDcuMDE2Yy41NDMgMCAuOTkyLS40MDYuOTkyLS45VjYuODFjMC0uNDkzLS40NDgtLjktLjk5Mi0uOUgzLjk5MmMtLjU0MyAwLS45OTIuNDA2LS45OTIuOXpNNiA1di45MWgzVjVoMi4wMDhDMTIuMTA4IDUgMTMgNS44MTggMTMgNi44MXY2LjM4YzAgMS0uOSAxLjgxLTEuOTkyIDEuODFIMy45OTJDMi44OTIgMTUgMiAxNC4xODIgMiAxMy4xOVY2LjgxQzIgNS44MSAyLjkgNSAzLjk5MiA1SDZ6bTEuOTk3LTMuNTUyQS41MDYuNTA2IDAgMDE4IDEuNXY4YS41LjUgMCAwMS0xIDB2LThhLjUxLjUxIDAgMDEwLS4wMTdMNS4xOCAzLjM5NGEuNTIuNTIgMCAwMS0uNzcgMCAuNjE3LjYxNyAwIDAxMC0uODI5TDYuMzYuNTE1YTEuNTUyIDEuNTUyIDAgMDEyLjMxIDBsMS45NSAyLjA1Yy4yMTQuMjI5LjIxNC42MDEgMCAuODNhLjUyLjUyIDAgMDEtLjc3IDBMNy45OTcgMS40NDd6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblNoYXJlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Tbm93Zmxha2UgPSBmdW5jdGlvbiBFdWlJY29uU25vd2ZsYWtlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTcuMDA3LjVhLjUuNSAwIDAxMSAwdjIuMDI0YS45OTkuOTk5IDAgMDAuMjY4LS4yMjdsMS4wMjctMS4yMzNhLjUuNSAwIDAxLjc2OS42NEw4LjI3NSAzLjg2YS45OTkuOTk5IDAgMDEtLjI2OC4yMjd2Mi41NDhsMi4yMDctMS4yNzRjMC0uMTE0LjAyLS4yMzEuMDYyLS4zNDZsLjk2OC0yLjYzMmEuNS41IDAgMTEuOTM4LjM0NWwtLjU1NCAxLjUwNmEuOTk4Ljk5OCAwIDAwLS4wNjIuMzQ2bDEuNzUzLTEuMDEyYS41LjUgMCAxMS41Ljg2NmwtMS43NTMgMS4wMTJjLjEuMDU3LjIxLjA5OC4zMy4xMTlsMS41ODIuMjczYS41LjUgMCAxMS0uMTcuOTg2bC0yLjc2NC0uNDc4YTEgMSAwIDAxLS4zMy0uMTJMOC41MDYgNy41bDIuMjA3IDEuMjc0YTEgMSAwIDAxLjMzLS4xMTlsMi43NjQtLjQ3OGEuNS41IDAgMTEuMTcuOTg2bC0xLjU4Mi4yNzNhLjk5OS45OTkgMCAwMC0uMzMuMTJsMS43NTMgMS4wMTFhLjUuNSAwIDExLS41Ljg2NmwtMS43NTMtMS4wMTJjMCAuMTE1LjAyLjIzMS4wNjIuMzQ2bC41NTQgMS41MDZhLjUuNSAwIDAxLS45MzguMzQ1bC0uOTY4LTIuNjMyYS45OTkuOTk5IDAgMDEtLjA2Mi0uMzQ2TDguMDA3IDguMzY2djIuNTQ4Yy4wOTguMDU4LjE5LjEzMy4yNjguMjI3bDEuNzk2IDIuMTU1YS41LjUgMCAwMS0uNzY5LjY0bC0xLjAyNy0xLjIzM2EuOTk5Ljk5OSAwIDAwLS4yNjgtLjIyNlYxNC41YS41LjUgMCAwMS0xIDB2LTIuMDI0YS45OTkuOTk5IDAgMDAtLjI2OS4yMjdsLTEuMDI3IDEuMjMzYS41LjUgMCAwMS0uNzY4LS42NGwxLjc5NS0yLjE1NWEuOTk5Ljk5OSAwIDAxLjI2OS0uMjI3VjguMzY2TDQuOCA5LjY0YzAgLjExNC0uMDIuMjMxLS4wNjIuMzQ2bC0uOTY5IDIuNjMyYS41LjUgMCAxMS0uOTM4LS4zNDVsLjU1NC0xLjUwNmExIDEgMCAwMC4wNjItLjM0NmwtMS43NTMgMS4wMTJhLjUuNSAwIDAxLS41LS44NjZsMS43NTMtMS4wMTJhLjk5OS45OTkgMCAwMC0uMzMtLjExOWwtMS41ODItLjI3M2EuNS41IDAgMDEuMTctLjk4NmwyLjc2NC40NzhjLjEyLjAyLjIzMi4wNjIuMzMuMTJMNi41MDggNy41IDQuMyA2LjIyNmEuOTk5Ljk5OSAwIDAxLS4zMy4xMTlsLTIuNzY1LjQ3OGEuNS41IDAgMTEtLjE3LS45ODZsMS41ODItLjI3M2EuOTk5Ljk5OSAwIDAwLjMzLS4xMkwxLjE5NCA0LjQzNGEuNS41IDAgMTEuNS0uODY2bDEuNzUzIDEuMDEyYzAtLjExNC0uMDItLjIzMS0uMDYyLS4zNDZMMi44MyAyLjcyN2EuNS41IDAgMTEuOTM4LS4zNDVsLjk2OSAyLjYzMmEuOTk5Ljk5OSAwIDAxLjA2Mi4zNDZsMi4yMDcgMS4yNzRWNC4wODZhMSAxIDAgMDEtLjI2OS0uMjI3TDQuOTQzIDEuNzA0YS41LjUgMCAwMS43NjgtLjY0bDEuMDI3IDEuMjMzYy4wNzkuMDk0LjE3LjE3LjI2OS4yMjdWLjV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblNub3dmbGFrZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uU29ydExlZnQgPSBmdW5jdGlvbiBFdWlJY29uU29ydExlZnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00LjMwOCA3aDguMTM2Yy4zMDcgMCAuNTU2LjIyNC41NTYuNXMtLjI0OS41LS41NTYuNUg0LjMwOGw0LjA5NiA0LjA5NmEuNS41IDAgMDEtLjcwNy43MDdMMy40NTQgOC41NjFhMS40OTQgMS40OTQgMCAwMS0uNDMzLS45MjUuNDU0LjQ1NCAwIDAxMC0uMjcyYy4wMy0uMzM4LjE3NS0uNjY2LjQzMy0uOTI1bDQuMjQzLTQuMjQyYS41LjUgMCAxMS43MDcuNzA3TDQuMzA4IDd6XCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Tb3J0TGVmdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uU29ydFJpZ2h0ID0gZnVuY3Rpb24gRXVpSWNvblNvcnRSaWdodChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTExLjY5MiA3SDMuNTU2QzMuMjQ5IDcgMyA3LjIyNCAzIDcuNXMuMjQ5LjUuNTU2LjVoOC4xMzZsLTQuMDk2IDQuMDk2YS41LjUgMCAwMC43MDcuNzA3bDQuMjQzLTQuMjQyYy4yNTgtLjI1OS40MDMtLjU4Ny40MzMtLjkyNWEuNDU0LjQ1NCAwIDAwMC0uMjcyIDEuNDk0IDEuNDk0IDAgMDAtLjQzMy0uOTI1TDguMzAzIDIuMTk3YS41LjUgMCAxMC0uNzA3LjcwN0wxMS42OTIgN3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU29ydFJpZ2h0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Tb3J0RG93biA9IGZ1bmN0aW9uIEV1aUljb25Tb3J0RG93bihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcgMTEuNjkyVjMuNTU2QzcgMy4yNDkgNy4yMjQgMyA3LjUgM3MuNS4yNDkuNS41NTZ2OC4xMzZsNC4wOTYtNC4wOTZhLjUuNSAwIDAxLjcwNy43MDdsLTQuMjQyIDQuMjQzYTEuNDk0IDEuNDk0IDAgMDEtLjkyNS40MzMuNDU0LjQ1NCAwIDAxLS4yNzIgMCAxLjQ5NCAxLjQ5NCAwIDAxLS45MjUtLjQzM0wyLjE5NyA4LjMwM2EuNS41IDAgMTEuNzA3LS43MDdMNyAxMS42OTJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblNvcnREb3duOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Tb3J0VXAgPSBmdW5jdGlvbiBFdWlJY29uU29ydFVwKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCA0LjIwN3Y4LjIzN2MwIC4zMDctLjIyNC41NTYtLjUuNTU2cy0uNS0uMjQ5LS41LS41NTZWNC4yMDdMMi45MDQgOC4zMDNhLjUuNSAwIDAxLS43MDctLjcwN2w0LjI0Mi00LjI0MmExLjUgMS41IDAgMDEyLjEyMiAwbDQuMjQyIDQuMjQyYS41LjUgMCAxMS0uNzA3LjcwN0w4IDQuMjA3elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Tb3J0VXA7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblNvcnRhYmxlID0gZnVuY3Rpb24gRXVpSWNvblNvcnRhYmxlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNyAxMi43ODZWMy4yTDMuNjA0IDYuNTk2YS41LjUgMCAwMS0uNzA4LS43MDdsMy41MzYtMy41MzVhMS41IDEuNSAwIDAxMi4xMjEgMGwzLjUzNiAzLjUzNWEuNS41IDAgMDEtLjcwNy43MDdMOCAzLjIxNHY5LjU1N2wzLjM4Mi0zLjM4MmEuNS41IDAgMDEuNzA3LjcwN2wtMy41MzYgMy41MzZhMS41IDEuNSAwIDAxLTIuMTIxIDBsLTMuNTM2LTMuNTM2YS41LjUgMCAwMS43MDgtLjcwN0w3IDEyLjc4NnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU29ydGFibGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblN0YXJQbHVzRW1wdHkgPSBmdW5jdGlvbiBFdWlJY29uU3RhclBsdXNFbXB0eShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk02IDJhLjg2Ljg2IDAgMDAtLjc5Mi41MTFsLTEuMzMgMi45MjQtMy4xMjguNDQ2Yy0uNzEuMTAyLTEuMDAxLjk3Ni0uNDk2IDEuNDg3bDIuMzEzIDIuMzM2LS41NjMgMy4yNjhBLjg3Ny44NzcgMCAwMDIuODY0IDE0Yy4xNDIgMCAuMjg5LS4wMzYuNDI5LS4xMTZMNiAxMi4zNDJsMi43MDcgMS41NDJjLjE0LjA4LjI4Ny4xMTYuNDMuMTE2YS44NzcuODc3IDAgMDAuODU5LTEuMDI3bC0uNTYzLTMuMjY5IDIuMzEzLTIuMzM2Yy41MDUtLjUxMS4yMTQtMS4zODUtLjQ5Ni0xLjQ4N2wtMy4xMjgtLjQ0Ni0xLjMzLTIuOTIzQS44Ni44NiAwIDAwNiAybTggOGgydjFoLTJ2MmgtMXYtMmgtMnYtMWgyVjhoMXYyek02IDNjLjA3MyAwIC4wOTUuMDQ5LjEwNC4wN2wxLjI2NyAyLjc4My4xNjIuMzU2LjM4Ny4wNTUgMi45NzguNDI1Yy4wMTcuMDAyLjA3MS4wMS4wOTUuMDhhLjExNi4xMTYgMCAwMS0uMDI5LjEyNkw4Ljc2MiA5LjEyMWwtLjI1OS4yNjEuMDYzLjM2Mi41MzUgMy4xMTJjLjAwNy4wNCAwIC4wNy0uMDIzLjA5OGEuMTI3LjEyNyAwIDAxLS4wOTEuMDQ2LjEwNi4xMDYgMCAwMS0uMDU1LS4wMTZsLTIuNTc4LTEuNDY5TDYgMTEuMzE0bC0uMzU0LjIwMS0yLjU3OSAxLjQ2OWEuMTAzLjEwMyAwIDAxLS4wNTQuMDE2LjEyNy4xMjcgMCAwMS0uMDkxLS4wNDZjLS4wMjMtLjAyOC0uMDMtLjA1OC0uMDI0LS4wOThsLjUzNi0zLjExMi4wNjMtLjM2Mi0uMjU5LS4yNjEtMi4yMDItMi4yMjZhLjExNi4xMTYgMCAwMS0uMDI5LS4xMjYuMTA4LjEwOCAwIDAxLjA5NC0uMDhsMi45OC0uNDI1LjM4Ni0uMDU1LjE2Mi0uMzU2IDEuMjY3LTIuNzg2QzUuOTA1IDMuMDUgNS45MjcgMyA2IDN6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblN0YXJQbHVzRW1wdHk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblN0YXJQbHVzRmlsbGVkID0gZnVuY3Rpb24gRXVpSWNvblN0YXJQbHVzRmlsbGVkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTE0IDEwaDJ2MWgtMnYyaC0xdi0yaC0ydi0xaDJWOGgxdjJ6TTYgMmEuODYuODYgMCAwMC0uNzkyLjUxMWwtMS4zMyAyLjkyNC0zLjEyOC40NDZjLS43MS4xMDItMS4wMDEuOTc2LS40OTYgMS40ODdsMi4zMTMgMi4zMzYtLjU2MyAzLjI2OEEuODc3Ljg3NyAwIDAwMi44NjQgMTRjLjE0MiAwIC4yODktLjAzNi40MjktLjExNkw2IDEyLjM0MmwyLjcwNyAxLjU0MmMuMTQuMDguMjg3LjExNi40My4xMTZhLjg3Ny44NzcgMCAwMC44NTktMS4wMjdsLS41NjMtMy4yNjkgMi4zMTMtMi4zMzZjLjUwNS0uNTExLjIxNC0xLjM4NS0uNDk2LTEuNDg3bC0zLjEyOC0uNDQ2LTEuMzMtMi45MjNBLjg2Ljg2IDAgMDA2IDJcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU3RhclBsdXNGaWxsZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblN0YXJFbXB0eSA9IGZ1bmN0aW9uIEV1aUljb25TdGFyRW1wdHkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOCAyYS44Ni44NiAwIDAwLS43OTIuNTExbC0xLjMzIDIuOTI0LTMuMTI4LjQ0NmMtLjcxLjEwMi0xLjAwMS45NzYtLjQ5NiAxLjQ4N2wyLjMxMyAyLjMzNi0uNTYzIDMuMjY4QS44NzcuODc3IDAgMDA0Ljg2NCAxNGMuMTQyIDAgLjI4OS0uMDM2LjQyOS0uMTE2TDggMTIuMzQybDIuNzA3IDEuNTQyYy4xNC4wOC4yODcuMTE2LjQzLjExNmEuODc3Ljg3NyAwIDAwLjg1OS0xLjAyN2wtLjU2My0zLjI2OSAyLjMxMy0yLjMzNmMuNTA1LS41MTEuMjE0LTEuMzg1LS40OTYtMS40ODdsLTMuMTI4LS40NDYtMS4zMy0yLjkyM0EuODYuODYgMCAwMDggMm0wIDFjLjA3MyAwIC4wOTUuMDQ5LjEwNC4wN2wxLjI2NyAyLjc4My4xNjIuMzU2LjM4Ny4wNTUgMi45NzguNDI1Yy4wMTcuMDAyLjA3MS4wMS4wOTUuMDhhLjExNi4xMTYgMCAwMS0uMDI5LjEyNmwtMi4yMDIgMi4yMjYtLjI1OS4yNjEuMDYzLjM2Mi41MzUgMy4xMTJjLjAwNy4wNCAwIC4wNy0uMDIzLjA5OGEuMTI3LjEyNyAwIDAxLS4wOTEuMDQ2LjEwNi4xMDYgMCAwMS0uMDU1LS4wMTZsLTIuNTc4LTEuNDY5TDggMTEuMzE0bC0uMzU0LjIwMS0yLjU3OSAxLjQ2OWEuMTAzLjEwMyAwIDAxLS4wNTQuMDE2LjEyNy4xMjcgMCAwMS0uMDkxLS4wNDZjLS4wMjMtLjAyOC0uMDMtLjA1OC0uMDI0LS4wOThsLjUzNi0zLjExMi4wNjMtLjM2Mi0uMjU5LS4yNjEtMi4yMDItMi4yMjZhLjExNi4xMTYgMCAwMS0uMDI5LS4xMjYuMTA4LjEwOCAwIDAxLjA5NC0uMDhsMi45OC0uNDI1LjM4Ni0uMDU1LjE2Mi0uMzU2IDEuMjY3LTIuNzg2QzcuOTA1IDMuMDUgNy45MjcgMyA4IDNcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU3RhckVtcHR5OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25TdGFyRW1wdHlTcGFjZSA9IGZ1bmN0aW9uIEV1aUljb25TdGFyRW1wdHlTcGFjZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk02IDJhLjg2Ljg2IDAgMDAtLjc5Mi41MTFsLTEuMzMgMi45MjQtMy4xMjguNDQ2Yy0uNzEuMTAyLTEuMDAxLjk3Ni0uNDk2IDEuNDg3bDIuMzEzIDIuMzM2LS41NjMgMy4yNjhBLjg3Ny44NzcgMCAwMDIuODY0IDE0Yy4xNDIgMCAuMjg5LS4wMzYuNDI5LS4xMTZMNiAxMi4zNDJsMi43MDcgMS41NDJjLjE0LjA4LjI4Ny4xMTYuNDMuMTE2YS44NzcuODc3IDAgMDAuODU5LTEuMDI3bC0uNTYzLTMuMjY5IDIuMzEzLTIuMzM2Yy41MDUtLjUxMS4yMTQtMS4zODUtLjQ5Ni0xLjQ4N2wtMy4xMjgtLjQ0Ni0xLjMzLTIuOTIzQS44Ni44NiAwIDAwNiAybTAgMWMuMDczIDAgLjA5NS4wNDkuMTA0LjA3bDEuMjY3IDIuNzgzLjE2Mi4zNTYuMzg3LjA1NSAyLjk3OC40MjVjLjAxNy4wMDIuMDcxLjAxLjA5NS4wOGEuMTE2LjExNiAwIDAxLS4wMjkuMTI2TDguNzYyIDkuMTIxbC0uMjU5LjI2MS4wNjMuMzYyLjUzNSAzLjExMmMuMDA3LjA0IDAgLjA3LS4wMjMuMDk4YS4xMjcuMTI3IDAgMDEtLjA5MS4wNDYuMTA2LjEwNiAwIDAxLS4wNTUtLjAxNmwtMi41NzgtMS40NjlMNiAxMS4zMTRsLS4zNTQuMjAxLTIuNTc5IDEuNDY5YS4xMDMuMTAzIDAgMDEtLjA1NC4wMTYuMTI3LjEyNyAwIDAxLS4wOTEtLjA0NmMtLjAyMy0uMDI4LS4wMy0uMDU4LS4wMjQtLjA5OGwuNTM2LTMuMTEyLjA2My0uMzYyLS4yNTktLjI2MS0yLjIwMi0yLjIyNmEuMTE2LjExNiAwIDAxLS4wMjktLjEyNi4xMDguMTA4IDAgMDEuMDk0LS4wOGwyLjk4LS40MjUuMzg2LS4wNTUuMTYyLS4zNTYgMS4yNjctMi43ODZDNS45MDUgMy4wNSA1LjkyNyAzIDYgM1wiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TdGFyRW1wdHlTcGFjZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uU3RhckZpbGxlZCA9IGZ1bmN0aW9uIEV1aUljb25TdGFyRmlsbGVkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTggMmEuODYuODYgMCAwMC0uNzkyLjUxMWwtMS4zMyAyLjkyNC0zLjEyOC40NDZjLS43MS4xMDItMS4wMDEuOTc2LS40OTYgMS40ODdsMi4zMTMgMi4zMzYtLjU2MyAzLjI2OEEuODc3Ljg3NyAwIDAwNC44NjQgMTRjLjE0MiAwIC4yODktLjAzNi40MjktLjExNkw4IDEyLjM0MmwyLjcwNyAxLjU0MmMuMTQuMDguMjg3LjExNi40My4xMTZhLjg3Ny44NzcgMCAwMC44NTktMS4wMjdsLS41NjMtMy4yNjkgMi4zMTMtMi4zMzZjLjUwNS0uNTExLjIxNC0xLjM4NS0uNDk2LTEuNDg3bC0zLjEyOC0uNDQ2LTEuMzMtMi45MjNBLjg2Ljg2IDAgMDA4IDJcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU3RhckZpbGxlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uU3RhckZpbGxlZFNwYWNlID0gZnVuY3Rpb24gRXVpSWNvblN0YXJGaWxsZWRTcGFjZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk02IDJhLjg2Ljg2IDAgMDAtLjc5Mi41MTFsLTEuMzMgMi45MjQtMy4xMjguNDQ2Yy0uNzEuMTAyLTEuMDAxLjk3Ni0uNDk2IDEuNDg3bDIuMzEzIDIuMzM2LS41NjMgMy4yNjhBLjg3Ny44NzcgMCAwMDIuODY0IDE0Yy4xNDIgMCAuMjg5LS4wMzYuNDI5LS4xMTZMNiAxMi4zNDJsMi43MDcgMS41NDJjLjE0LjA4LjI4Ny4xMTYuNDMuMTE2YS44NzcuODc3IDAgMDAuODU5LTEuMDI3bC0uNTYzLTMuMjY5IDIuMzEzLTIuMzM2Yy41MDUtLjUxMS4yMTQtMS4zODUtLjQ5Ni0xLjQ4N2wtMy4xMjgtLjQ0Ni0xLjMzLTIuOTIzQS44Ni44NiAwIDAwNiAyXCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblN0YXJGaWxsZWRTcGFjZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uU3Rhck1pbnVzRW1wdHkgPSBmdW5jdGlvbiBFdWlJY29uU3Rhck1pbnVzRW1wdHkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNiAyYS44Ni44NiAwIDAwLS43OTIuNTExbC0xLjMzIDIuOTI0LTMuMTI4LjQ0NmMtLjcxLjEwMi0xLjAwMS45NzYtLjQ5NiAxLjQ4N2wyLjMxMyAyLjMzNi0uNTYzIDMuMjY4QS44NzcuODc3IDAgMDAyLjg2NCAxNGMuMTQyIDAgLjI4OS0uMDM2LjQyOS0uMTE2TDYgMTIuMzQybDIuNzA3IDEuNTQyYy4xNC4wOC4yODcuMTE2LjQzLjExNmEuODc3Ljg3NyAwIDAwLjg1OS0xLjAyN2wtLjU2My0zLjI2OSAyLjMxMy0yLjMzNmMuNTA1LS41MTEuMjE0LTEuMzg1LS40OTYtMS40ODdsLTMuMTI4LS40NDYtMS4zMy0yLjkyM0EuODYuODYgMCAwMDYgMm0wIDFjLjA3MyAwIC4wOTUuMDQ5LjEwNC4wN2wxLjI2NyAyLjc4My4xNjIuMzU2LjM4Ny4wNTUgMi45NzguNDI1Yy4wMTcuMDAyLjA3MS4wMS4wOTUuMDhhLjExNi4xMTYgMCAwMS0uMDI5LjEyNkw4Ljc2MiA5LjEyMWwtLjI1OS4yNjEuMDYzLjM2Mi41MzUgMy4xMTJjLjAwNy4wNCAwIC4wNy0uMDIzLjA5OGEuMTI3LjEyNyAwIDAxLS4wOTEuMDQ2LjEwNi4xMDYgMCAwMS0uMDU1LS4wMTZsLTIuNTc4LTEuNDY5TDYgMTEuMzE0bC0uMzU0LjIwMS0yLjU3OSAxLjQ2OWEuMTAzLjEwMyAwIDAxLS4wNTQuMDE2LjEyNy4xMjcgMCAwMS0uMDkxLS4wNDZjLS4wMjMtLjAyOC0uMDMtLjA1OC0uMDI0LS4wOThsLjUzNi0zLjExMi4wNjMtLjM2Mi0uMjU5LS4yNjEtMi4yMDItMi4yMjZhLjExNi4xMTYgMCAwMS0uMDI5LS4xMjYuMTA4LjEwOCAwIDAxLjA5NC0uMDhsMi45OC0uNDI1LjM4Ni0uMDU1LjE2Mi0uMzU2IDEuMjY3LTIuNzg2QzUuOTA1IDMuMDUgNS45MjcgMyA2IDN6bTEwIDd2MWgtNXYtMWg1elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TdGFyTWludXNFbXB0eTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uU3Rhck1pbnVzRmlsbGVkID0gZnVuY3Rpb24gRXVpSWNvblN0YXJNaW51c0ZpbGxlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk02IDJhLjg2Ljg2IDAgMDEuNzkyLjUxMWwxLjMzIDIuOTI0IDMuMTI4LjQ0NmMuNzEuMTAyIDEuMDAxLjk3Ni40OTYgMS40ODdMOS40MzMgOS43MDRsLjU2MyAzLjI2OEEuODc3Ljg3NyAwIDAxOS4xMzYgMTRhLjg2Mi44NjIgMCAwMS0uNDI5LS4xMTZMNiAxMi4zNDJsLTIuNzA3IDEuNTQyYS44NjIuODYyIDAgMDEtLjQzLjExNi44NzcuODc3IDAgMDEtLjg1OS0xLjAyN2wuNTYzLTMuMjY5TC4yNTQgNy4zNjhDLS4yNSA2Ljg1Ny4wNCA1Ljk4My43NSA1Ljg4bDMuMTI4LS40NDYgMS4zMy0yLjkyM0EuODYuODYgMCAwMTYgMnptMTAgOHYxaC01di0xaDV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblN0YXJNaW51c0ZpbGxlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uU3RhdHMgPSBmdW5jdGlvbiBFdWlJY29uU3RhdHMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOCAxNHYtNGgxdjRoNVY1aDF2OWExIDEgMCAwMS0xIDFIMmExIDEgMCAwMS0xLTF2LTJoMXYyaDZ6bTQuODUzLTEwLjE0NmwtMi45OTkgM2ExLjUgMS41IDAgMDEtMi41MzggMS41NjhsLTIuNzE0LjkwNEw0IDkuNTI3YTEuNSAxLjUgMCAxMS0uMzE2LS45NDhMNyA3LjQ3M2ExLjUgMS41IDAgMDEyLjE0Ni0xLjMyN2wzLTNhMS41IDEuNSAwIDExLjcwNy43MDd6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblN0YXRzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25TdG9wID0gZnVuY3Rpb24gRXVpSWNvblN0b3AoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00IDJoOGEyIDIgMCAwMTIgMnY4YTIgMiAwIDAxLTIgMkg0YTIgMiAwIDAxLTItMlY0YTIgMiAwIDAxMi0yem0wIDFhMSAxIDAgMDAtMSAxdjhhMSAxIDAgMDAxIDFoOGExIDEgMCAwMDEtMVY0YTEgMSAwIDAwLTEtMUg0elwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU3RvcDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uU3RvcEZpbGxlZCA9IGZ1bmN0aW9uIEV1aUljb25TdG9wRmlsbGVkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicmVjdFwiLCB7XG4gICAgd2lkdGg6IDEyLFxuICAgIGhlaWdodDogMTIsXG4gICAgeDogMixcbiAgICB5OiAyLFxuICAgIHJ4OiAyLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU3RvcEZpbGxlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uU3RvcFNsYXNoID0gZnVuY3Rpb24gRXVpSWNvblN0b3BTbGFzaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyLjI1OSAzLjAzNEExLjAwMSAxLjAwMSAwIDAwMTIgM0g0YTEgMSAwIDAwLTEgMXY4YzAgLjA5LjAxMi4xNzYuMDM0LjI1OWw5LjIyNS05LjIyNXptLjcwNy43MDdsLTkuMjI1IDkuMjI1Yy4wODMuMDIyLjE3LjAzNC4yNTkuMDM0aDhhMSAxIDAgMDAxLTFWNGMwLS4wOS0uMDEyLS4xNzYtLjAzNC0uMjU5ek00IDJoOGEyIDIgMCAwMTIgMnY4YTIgMiAwIDAxLTIgMkg0YTIgMiAwIDAxLTItMlY0YTIgMiAwIDAxMi0yelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TdG9wU2xhc2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblN0b3JhZ2UgPSBmdW5jdGlvbiBFdWlJY29uU3RvcmFnZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDAgMilcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiLFxuICAgIGQ6IFwiTTIgNmExIDEgMCAwMS0xLTFWMmExIDEgMCAwMTEtMWgxMmExIDEgMCAwMTEgMXYzYTEgMSAwIDAxLTEgMUgyem0xMyAydjNhMSAxIDAgMDEtMSAxSDJhMSAxIDAgMDEtMS0xVjhhMSAxIDAgMDExLTFoMTJhMSAxIDAgMDExIDF6bTEtM1YyYTIgMiAwIDAwLTItMkgyYTIgMiAwIDAwLTIgMnYzYzAgLjYwMS4yNzEgMS4xMzMuNjkgMS41Qy4yNzEgNi44NjcgMCA3LjM5OSAwIDh2M2EyIDIgMCAwMDIgMmgxMmEyIDIgMCAwMDItMlY4YzAtLjYwMS0uMjcxLTEuMTMzLS42ODktMS41LjQxOC0uMzY3LjY4OS0uODk5LjY4OS0xLjV6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJjaXJjbGVcIiwge1xuICAgIGN4OiA0LjUsXG4gICAgY3k6IDkuNSxcbiAgICByOiAxLjVcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJjaXJjbGVcIiwge1xuICAgIGN4OiA0LjUsXG4gICAgY3k6IDMuNSxcbiAgICByOiAxLjVcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMiA4aDF2M2gtMXpNMTAgOGgxdjNoLTF6TTEyIDJoMXYzaC0xek0xMCAyaDF2M2gtMXpcIlxuICB9KSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblN0b3JhZ2U7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblN0cmluZyA9IGZ1bmN0aW9uIEV1aUljb25TdHJpbmcoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOS4yOTcgM0w4LjkzIDUuMTAyaDEuMzUxbC0uMzIgMS44MjhIOC42MDlsLS42NTYgMy44ODNjLS4wMzYuMjY1LS4wMi40NjYuMDUuNjAxLjA3MS4xMzUuMjQ3LjIwOC41MjguMjE5LjExLjAwNS4zMzQtLjAwOC42NzItLjA0TDkuMDE2IDEzLjVhNC4xNiA0LjE2IDAgMDEtMS4zODMuMTk1Yy0uNzk3LS4wMS0xLjM5My0uMjQ0LTEuNzktLjcwMy0uMzk1LS40NTgtLjU1Ny0xLjA4LS40ODQtMS44NjdsLjY4OC00LjE5NUg1bC4zMTMtMS44MjhoMS4wNDZMNi43MjcgM2gyLjU3elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TdHJpbmc7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblN1Ym1vZHVsZSA9IGZ1bmN0aW9uIEV1aUljb25TdWJtb2R1bGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTYgMkgxdjEyaDNWN2ExIDEgMCAwMTEtMWg1YTEgMSAwIDAxMSAxdjFoNFY0SDdjLS42MjEgMC0xLS4zNzktMS0xVjJ6bTEwIDZ2NmExIDEgMCAwMS0xIDFIMWExIDEgMCAwMS0xLTFWMmExIDEgMCAwMTEtMWg1LjI1YS43NS43NSAwIDAxLjc1Ljc1bC0uMDA0LjIwNkM2Ljk5IDIuMzE3IDYuOTc0IDMgNyAzaDhhMSAxIDAgMDExIDF2NHptLTEgMWgtNGExIDEgMCAwMS0xLTFWN0g1djdoMTBWOXpNMiA0LjVhLjUuNSAwIDAxLjUtLjVoMmEuNS41IDAgMDEwIDFoLTJhLjUuNSAwIDAxLS41LS41ek02LjUgOWEuNS41IDAgMDAwIDFoMmEuNS41IDAgMDAwLTFoLTJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblN1Ym1vZHVsZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uU3VuID0gZnVuY3Rpb24gRXVpSWNvblN1bihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyIDhhNCA0IDAgMTEtOCAwIDQgNCAwIDAxOCAwek03LjI1Ljc1YS43NS43NSAwIDAxMS41IDB2MS41YS43NS43NSAwIDExLTEuNSAwVi43NXptMCAxM2EuNzUuNzUgMCAwMTEuNSAwdjEuNWEuNzUuNzUgMCAwMS0xLjUgMHYtMS41em01LjM0Ni0xMS40MDdhLjc1Ljc1IDAgMDExLjA2IDEuMDZsLTEuMDYgMS4wNjFhLjc1Ljc1IDAgMDEtMS4wNi0xLjA2bDEuMDYtMS4wNnptLTkuMTkyIDkuMTkzYS43NS43NSAwIDExMS4wNiAxLjA2bC0xLjA2IDEuMDZhLjc1Ljc1IDAgMDEtMS4wNi0xLjA2bDEuMDYtMS4wNnpNLjc1IDguNzVhLjc1Ljc1IDAgMDEwLTEuNWgxLjVhLjc1Ljc1IDAgMTEwIDEuNUguNzV6bTEzIDBhLjc1Ljc1IDAgMDEwLTEuNWgxLjVhLjc1Ljc1IDAgMDEwIDEuNWgtMS41ek0yLjM0MyAzLjQwNGEuNzUuNzUgMCAxMTEuMDYtMS4wNmwxLjA2MSAxLjA2YS43NS43NSAwIDAxLTEuMDYgMS4wNmwtMS4wNi0xLjA2em05LjE5MyA5LjE5MmEuNzUuNzUgMCAwMTEuMDYtMS4wNmwxLjA2IDEuMDZhLjc1Ljc1IDAgMDEtMS4wNiAxLjA2bC0xLjA2LTEuMDZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblN1bjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uU3dhdGNoSW5wdXQgPSBmdW5jdGlvbiBFdWlJY29uU3dhdGNoSW5wdXQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJyZWN0XCIsIHtcbiAgICB4OiAyLFxuICAgIHk6IDIsXG4gICAgd2lkdGg6IDEyLFxuICAgIGhlaWdodDogMTIsXG4gICAgcng6IDNcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJyZWN0XCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpU3dhdGNoSW5wdXRfX3N0cm9rZVwiLFxuICAgIHg6IDIuNSxcbiAgICB5OiAyLjUsXG4gICAgd2lkdGg6IDExLFxuICAgIGhlaWdodDogMTEsXG4gICAgcng6IDJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblN3YXRjaElucHV0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25TeW1saW5rID0gZnVuY3Rpb24gRXVpSWNvblN5bWxpbmsoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEwLjggMEgyYTEgMSAwIDAwLTEgMXY4bDEtMVYxaDh2My41YS41LjUgMCAwMC41LjVIMTR2MTBIMnYtMWEzLjUgMy41IDAgMDEzLjUtMy41SDhWMTNsMy0zLTMtM3YyLjVINS41QTQuNSA0LjUgMCAwMDEgMTR2MWExIDEgMCAwMDEgMWgxMmExIDEgMCAwMDEtMVY0LjQyOWMwLS4yNTYtLjA5OC0uNTAzLS4yNzQtLjY4OWwtMy4yLTMuNDI4QTEuMDAyIDEuMDAyIDAgMDAxMC44IDB6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblN5bWxpbms7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRhYmxlT2ZDb250ZW50cyA9IGZ1bmN0aW9uIEV1aUljb25UYWJsZU9mQ29udGVudHMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xIDF2MTRoMTRWMUgxek0wIDBoMTZ2MTZIMFYwem05IDF2MTRoMVYxSDl6TTMgMy41aDR2LTFIM3Yxem0wIDNoNHYtMUgzdjF6bTAgM2g0di0xSDN2MXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVGFibGVPZkNvbnRlbnRzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25UYWJsZURlbnNpdHlDb21wYWN0ID0gZnVuY3Rpb24gRXVpSWNvblRhYmxlRGVuc2l0eUNvbXBhY3QoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNiAzdjExYTIgMiAwIDAxLTIgMkgyYTIgMiAwIDAxLTItMlYyYTIgMiAwIDAxMi0yaDEyYTIgMiAwIDAxMiAydjF6bS0xIDBWMmExIDEgMCAwMC0xLTFIMmExIDEgMCAwMC0xIDF2MWgxNHptMCAxSDF2MTBhMSAxIDAgMDAxIDFoMTJhMSAxIDAgMDAxLTFWNHpNNC40OTYgN2EuNS41IDAgMDEwIDFIMi40OTVhLjUuNSAwIDAxMC0xaDIuMDAxem01LjIxOCAwYy4xNTggMCAuMjg2LjIyNC4yODYuNXMtLjEyOC41LS4yODYuNUg2LjI4NkM2LjEyOCA4IDYgNy43NzYgNiA3LjVzLjEyOC0uNS4yODYtLjVoMy40Mjh6TTQuNDk2IDVhLjUuNSAwIDAxMCAxSDIuNDk1YS41LjUgMCAwMTAtMWgyLjAwMXptNS4yMTggMGMuMTU4IDAgLjI4Ni4yMjQuMjg2LjVzLS4xMjguNS0uMjg2LjVINi4yODZDNi4xMjggNiA2IDUuNzc2IDYgNS41cy4xMjgtLjUuMjg2LS41aDMuNDI4ek00LjQ5NiA5YS41LjUgMCAwMTAgMUgyLjQ5NWEuNS41IDAgMDEwLTFoMi4wMDF6bTUuMjE4IDBjLjE1OCAwIC4yODYuMjI0LjI4Ni41cy0uMTI4LjUtLjI4Ni41SDYuMjg2QzYuMTI4IDEwIDYgOS43NzYgNiA5LjVzLjEyOC0uNS4yODYtLjVoMy40Mjh6bS01LjIxOCAyYS41LjUgMCAwMTAgMUgyLjQ5NWEuNS41IDAgMDEwLTFoMi4wMDF6bTUuMjE4IDBjLjE1OCAwIC4yODYuMjI0LjI4Ni41cy0uMTI4LjUtLjI4Ni41SDYuMjg2QzYuMTI4IDEyIDYgMTEuNzc2IDYgMTEuNXMuMTI4LS41LjI4Ni0uNWgzLjQyOHptLTUuMjE4IDJhLjUuNSAwIDAxMCAxSDIuNDk1YS41LjUgMCAwMTAtMWgyLjAwMXptOS02YS41LjUgMCAwMTAgMWgtMi4wMDFhLjUuNSAwIDAxMC0xaDIuMDAxem0wLTJhLjUuNSAwIDAxMCAxaC0yLjAwMWEuNS41IDAgMDEwLTFoMi4wMDF6bTAgNGEuNS41IDAgMDEwIDFoLTIuMDAxYS41LjUgMCAwMTAtMWgyLjAwMXptMCAyYS41LjUgMCAwMTAgMWgtMi4wMDFhLjUuNSAwIDAxMC0xaDIuMDAxem0wIDJhLjUuNSAwIDAxMCAxaC0yLjAwMWEuNS41IDAgMDEwLTFoMi4wMDF6bS0zLjc4MiAwYy4xNTggMCAuMjg2LjIyNC4yODYuNXMtLjEyOC41LS4yODYuNUg2LjI4NkM2LjEyOCAxNCA2IDEzLjc3NiA2IDEzLjVzLjEyOC0uNS4yODYtLjVoMy40Mjh6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRhYmxlRGVuc2l0eUNvbXBhY3Q7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRhYmxlRGVuc2l0eUV4cGFuZGVkID0gZnVuY3Rpb24gRXVpSWNvblRhYmxlRGVuc2l0eUV4cGFuZGVkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYgM3YxMWEyIDIgMCAwMS0yIDJIMmEyIDIgMCAwMS0yLTJWMmEyIDIgMCAwMTItMmgxMmEyIDIgMCAwMTIgMnYxem0tMSAwVjJhMSAxIDAgMDAtMS0xSDJhMSAxIDAgMDAtMSAxdjFoMTR6bTAgMUgxdjEwYTEgMSAwIDAwMSAxaDEyYTEgMSAwIDAwMS0xVjR6TTQuNSA3YS41LjUgMCAwMTAgMUgyLjQ5NmEuNS41IDAgMTEwLTFINC41em05IDBhLjUuNSAwIDExMCAxaC02YS41LjUgMCAwMTAtMWg2em0tOSA0YS41LjUgMCAxMTAgMUgyLjQ5NmEuNS41IDAgMTEwLTFINC41em05IDBhLjUuNSAwIDExMCAxaC02YS41LjUgMCAxMTAtMWg2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25UYWJsZURlbnNpdHlFeHBhbmRlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVGFibGVEZW5zaXR5Tm9ybWFsID0gZnVuY3Rpb24gRXVpSWNvblRhYmxlRGVuc2l0eU5vcm1hbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDN2MTFhMiAyIDAgMDEtMiAySDJhMiAyIDAgMDEtMi0yVjJhMiAyIDAgMDEyLTJoMTJhMiAyIDAgMDEyIDJ2MXptLTEgMFYyYTEgMSAwIDAwLTEtMUgyYTEgMSAwIDAwLTEgMXYxaDE0em0wIDFIMXYxMGExIDEgMCAwMDEgMWgxMmExIDEgMCAwMDEtMVY0ek00LjUgNmEuNS41IDAgMDEwIDFIMi40OTZhLjUuNSAwIDExMC0xSDQuNXptNS4yMTQgMGMuMTU4IDAgLjI4Ni4yMjQuMjg2LjVzLS4xMjguNS0uMjg2LjVINi4yODZDNi4xMjggNyA2IDYuNzc2IDYgNi41cy4xMjgtLjUuMjg2LS41aDMuNDI4ek00LjUgOWEuNS41IDAgMDEwIDFIMi40OTZhLjUuNSAwIDExMC0xSDQuNXptNS4yMTQgMGMuMTU4IDAgLjI4Ni4yMjQuMjg2LjVzLS4xMjguNS0uMjg2LjVINi4yODZDNi4xMjggMTAgNiA5Ljc3NiA2IDkuNXMuMTI4LS41LjI4Ni0uNWgzLjQyOHpNNC41IDEyYS41LjUgMCAxMTAgMUgyLjQ5NmEuNS41IDAgMTEwLTFINC41em05LTZhLjUuNSAwIDExMCAxaC0yLjAwNGEuNS41IDAgMDEwLTFIMTMuNXptMCAzYS41LjUgMCAxMTAgMWgtMi4wMDRhLjUuNSAwIDAxMC0xSDEzLjV6bTAgM2EuNS41IDAgMTEwIDFoLTIuMDA0YS41LjUgMCAwMTAtMUgxMy41em0tMy43ODYgMGMuMTU4IDAgLjI4Ni4yMjQuMjg2LjVzLS4xMjguNS0uMjg2LjVINi4yODZDNi4xMjggMTMgNiAxMi43NzYgNiAxMi41cy4xMjgtLjUuMjg2LS41aDMuNDI4elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25UYWJsZURlbnNpdHlOb3JtYWw7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRhZyA9IGZ1bmN0aW9uIEV1aUljb25UYWcoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02LjI1NCAxNC45N0wuOTk2IDkuNzEyYy0uMzE1LS4zMTYtLjM5Ny0uNDYzLS40NS0uNjRhLjkwOS45MDkgMCAwMTAtLjUzNGMuMDUzLS4xNzcuMTM1LS4zMjQuNDUtLjY0TDcuNDMgMS40NjZjLjE4Mi0uMTgzLjI1Mi0uMjQuMzM4LS4yOTNhLjg3Ljg3IDAgMDEuMjczLS4xMTNjLjA5OS0uMDIzLjE4OC0uMDMyLjQ0Ni0uMDMyaDUuMTczYy40NDUgMCAuNjA3LjA0Ni43Ny4xMzMuMTYyLjA4Ny4yOS4yMTQuMzc3LjM3Ny4wODguMTYyLjEzNC4zMjQuMTM2Ljc2OWwuMDE1IDUuMTVjMCAuMjU5LS4wMDkuMzQ4LS4wMzIuNDQ4YS44Ny44NyAwIDAxLS4xMTIuMjczYy0uMDU0LjA4Ny0uMTExLjE1Ny0uMjk0LjM0TDguMDY3IDE0Ljk3Yy0uMzE1LjMxNS0uNDYyLjM5Ni0uNjM5LjQ1YS45MDkuOTA5IDAgMDEtLjUzNSAwYy0uMTc2LS4wNTQtLjMyNC0uMTM1LS42MzktLjQ1em0xLjEwNi0uNzA3bDYuNDUzLTYuNDUzYy4wOTItLjA5Mi4xMjYtLjEyOC4xNDEtLjE0Ny4wMDMtLjAyNS4wMDQtLjA3NC4wMDQtLjIwNGwtLjAxNS01LjE1YzAtLjE4MS0uMDAzLS4yNDUtLjAwOS0uMjc1YTIuMjQ3IDIuMjQ3IDAgMDAtLjI3NC0uMDA3SDguNDg3Yy0uMTMgMC0uMTc5LjAwMS0uMjAzLjAwNC0uMDIuMDE1LS4wNTUuMDUtLjE0Ny4xNDFMMS43MDMgOC42MDZhMi4yNDggMi4yNDggMCAwMC0uMTg5LjJjLjAxNy4wMjQuMDYxLjA3LjE5LjE5OGw1LjI1NyA1LjI1OWMuMTI4LjEyOC4xNzUuMTcxLjIuMTg4LjAyNC0uMDE3LjA3MS0uMDYuMi0uMTg4em00Ljk3Mi0xMC42MDdhMiAyIDAgMTEtMi44MjggMi44MjggMiAyIDAgMDEyLjgyOC0yLjgyOHptLS43MDcuNzA3YTEgMSAwIDEwLTEuNDE0IDEuNDE0IDEgMSAwIDAwMS40MTQtMS40MTR6TTYuODA3IDExLjI4TDQuNjg2IDkuMTU5YS41LjUgMCAxMS43MDctLjcwN2wyLjEyMSAyLjEyYS41LjUgMCAxMS0uNzA3LjcwOHptMS40MTQtMS40MTRsLTIuMTItMi4xMjJhLjUuNSAwIDExLjcwNi0uNzA3TDguOTI4IDkuMTZhLjUuNSAwIDExLS43MDcuNzA3elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25UYWc7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRlYXIgPSBmdW5jdGlvbiBFdWlJY29uVGVhcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuNTUzIDEuNzc2YS41LjUgMCAwMS44OTQgMGw0IDhhLjUuNSAwIDAxLjA1My4yMzVjLS4wMDQuMTUtLjAyNi4zOTYtLjA4NC43MDVhNS41MzggNS41MzggMCAwMS0uNTA1IDEuNTEyQzExLjE4OSAxMy42MzggOS45MDYgMTQuNSA4IDE0LjVjLTEuOTA2IDAtMy4xOS0uODYyLTMuOTEtMi4yNzJhNS41MzggNS41MzggMCAwMS0uNTA2LTEuNTEyIDQuNjcyIDQuNjcyIDAgMDEtLjA4NC0uNzA1LjUuNSAwIDAxLjA1My0uMjM1bDQtOHptLTMuMDQ2IDguMzI5Yy4wMDkuMTA2LjAyNy4yNTMuMDYuNDI5LjA3OS40MjQuMjEzLjg0OC40MTMgMS4yMzhDNS41MzcgMTIuODYyIDYuNDg3IDEzLjUgOCAxMy41YzEuNTEzIDAgMi40NjMtLjYzOCAzLjAyLTEuNzI4LjItLjM5LjMzNC0uODE0LjQxMy0xLjIzOC4wMzMtLjE3Ni4wNTEtLjMyMy4wNi0uNDNMOCAzLjExOWwtMy40OTMgNi45ODd6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRlYXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRlbXBlcmF0dXJlID0gZnVuY3Rpb24gRXVpSWNvblRlbXBlcmF0dXJlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOC41IDE1YTMuNSAzLjUgMCAwMS0xLjc1LTYuNTMyTDcgOC4zMjRWMi41QTEuNDk2IDEuNDk2IDAgMDE5LjkwOCAySDguNXYxSDEwdjFIOC41djFIMTB2MUg4LjV2MUgxMHYxLjMyNGwuMjUuMTQ0QTMuNSAzLjUgMCAwMTguNSAxNU0xMSA3Ljc1OFYyLjVhMi41IDIuNSAwIDEwLTUgMHY1LjI1OGE0LjUgNC41IDAgMTA1IDBcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguNSA5YTIuNSAyLjUgMCAxMTAgNSAyLjUgMi41IDAgMDEwLTVcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVGVtcGVyYXR1cmU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRpbWVSZWZyZXNoID0gZnVuY3Rpb24gRXVpSWNvblRpbWVSZWZyZXNoKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMi44MDkgOC44MDdhNC41IDQuNSAwIDAxLTUuNTcyLTUuNzVBNSA1IDAgMDAzLjA0IDkuMzFhLjUuNSAwIDAxLS45NjYuMjU5IDYgNiAwIDAxNS42NzItNy41NTMgNC41IDQuNSAwIDExNi4xMTcgNi4zMTMgNi4wMDIgNi4wMDIgMCAwMS03LjgwMyA1LjQwOS41LjUgMCAxMS4zMDMtLjk1NCA1LjAwMSA1LjAwMSAwIDAwNi40NDUtMy45Nzl6TTExLjg1OSA1SDEzLjVhLjUuNSAwIDAwMC0xSDEyVjEuNWEuNS41IDAgMDAtMSAwdjNhLjUuNSAwIDAwLjUuNWguMzZ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zLjc1NyAxNS44NDhsLS43NzYtMi44OTdhMS41IDEuNSAwIDAxMS4wNi0xLjgzOGwyLjg5OC0uNzc2YS41LjUgMCAxMS4yNTkuOTY2bC0yLjg5OC43NzZhLjUuNSAwIDAwLS4zNTMuNjEzbC43NzYgMi44OThhLjUuNSAwIDAxLS45NjYuMjU4elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25UaW1lUmVmcmVzaDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVGltZWxpbmUgPSBmdW5jdGlvbiBFdWlJY29uVGltZWxpbmUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNyA0LjVhLjUuNSAwIDAwMSAwVjRoMWExIDEgMCAwMDEtMVYxYTEgMSAwIDAwLTEtMUg2YTEgMSAwIDAwLTEgMXYyYTEgMSAwIDAwMSAxaDF2LjV6TTkgMUg2djJoM1Yxek0yIDcuNWEuNS41IDAgMTExIDAgLjUuNSAwIDAxLTEgMHpNMi41IDlhMS41IDEuNSAwIDAxLTEuNDE1LTFILjVhLjUuNSAwIDAxMC0xaC41ODVhMS41IDEuNSAwIDAxMi44MyAwaDIuMTdhMS41IDEuNSAwIDAxMi44MyAwaDIuMTdhMS41IDEuNSAwIDAxMi44MyAwaC41ODVhLjUuNSAwIDAxMCAxaC0uNTg1YTEuNSAxLjUgMCAwMS0yLjgzIDBoLTIuMTdhMS41IDEuNSAwIDAxLTIuODMgMGgtMi4xN0ExLjUgMS41IDAgMDEyLjUgOXpNMTMgNy41YS41LjUgMCAxMC0xIDAgLjUuNSAwIDAwMSAwem0tNSAwYS41LjUgMCAxMC0xIDAgLjUuNSAwIDAwMSAwek0yLjUgMTBhLjUuNSAwIDAwLS41LjV2LjVIMWExIDEgMCAwMC0xIDF2MmExIDEgMCAwMDEgMWgzYTEgMSAwIDAwMS0xdi0yYTEgMSAwIDAwLTEtMUgzdi0uNWEuNS41IDAgMDAtLjUtLjV6TTQgMTR2LTJIMXYyaDN6bTgtMy41YS41LjUgMCAwMTEgMHYuNWgxYTEgMSAwIDAxMSAxdjJhMSAxIDAgMDEtMSAxaC0zYTEgMSAwIDAxLTEtMXYtMmExIDEgMCAwMTEtMWgxdi0uNXptMiAyLjV2MWgtM3YtMmgzdjF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRpbWVsaW5lOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25UaW1lc2xpZGVyID0gZnVuY3Rpb24gRXVpSWNvblRpbWVzbGlkZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMy45MjMgOEE1LjkzIDUuOTMgMCAwMDggMi4wNzcgNS45MyA1LjkzIDAgMDAyLjA3NyA4YTUuOTMgNS45MyAwIDAwNi4yOTYgNS45MTJjLjMyOC0uMDIxLjYyNS4yMjcuNjI1LjU1NmEuNTA0LjUwNCAwIDAxLS40NTguNTExIDcgNyAwIDExNi40My02LjMzM2MtLjAzNi4zOTgtLjQ4Ny41OC0uODE3LjM1NGEuNTk1LjU5NSAwIDAxLS4yNDgtLjU0Yy4wMTItLjE1Mi4wMTgtLjMwNS4wMTgtLjQ2em0xLjY4NCAzLjJsLTQuMzItMy4wNTVjLS41Ni0uMzk2LTEuMjg3LjA1OS0xLjI4Ny44djYuMTA4YzAgLjc0LjcyNiAxLjE5NiAxLjI4Ny44bDQuMzItMy4wNTVjLjUyNC0uMzcuNTI0LTEuMjI4IDAtMS41OTh6TTcuNDYyIDcuNDYySDQuNzY5YS41MzkuNTM5IDAgMDAwIDEuMDc2SDhBLjUzOS41MzkgMCAwMDguNTM4IDhWMy42OTJhLjUzOS41MzkgMCAwMC0xLjA3NiAwdjMuNzd6XCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25UaW1lc2xpZGVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlbkFsaWFzID0gZnVuY3Rpb24gRXVpSWNvblRva2VuQWxpYXMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOS4wNzUgNi45NTNhLjUuNSAwIDExLS43MDcuNzA3IDEuNSAxLjUgMCAwMC0yLjEyMiAwTDQuMTI1IDkuNzgyYTEuNSAxLjUgMCAxMDIuMTIxIDIuMTIxbDEuMTQ1LTEuMTQ0YS41LjUgMCAwMS43MDcuNzA3TDYuOTUzIDEyLjYxYTIuNSAyLjUgMCAxMS0zLjUzNS0zLjUzNWwyLjEyMS0yLjEyMmEyLjUgMi41IDAgMDEzLjUzNiAwem0zLjUzNS0zLjUzNWEyLjUgMi41IDAgMDEwIDMuNTM1TDEwLjQ5IDkuMDc1YTIuNSAyLjUgMCAwMS0zLjUzNiAwIC41LjUgMCAxMS43MDctLjcwOCAxLjUgMS41IDAgMDAyLjEyMiAwbDIuMTIxLTIuMTJhMS41IDEuNSAwIDEwLTIuMTIxLTIuMTIyTDguNjM3IDUuMjY5YS41LjUgMCAxMS0uNzA3LS43MDdsMS4xNDUtMS4xNDRhMi41IDIuNSAwIDAxMy41MzUgMHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5BbGlhczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5Bbm5vdGF0aW9uID0gZnVuY3Rpb24gRXVpSWNvblRva2VuQW5ub3RhdGlvbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk04LjE1IDMuMzkyYzIuNzk3IDAgNC41MjQgMS42NDQgNC41MTcgNC4yODkuMDA3IDEuODE2LS43MDggMi44OTMtMi4yMSAzLjAwNC0uOTA4LjA3Ni0xLjA4MS0uMjg3LTEuMTU3LS43MjVoLS4wNDFjLS4xNjMuNDItLjk2NC43MzItMS43NDQuNjgzLTEuMDUzLS4wNjUtMi4wODItLjg0Mi0yLjA5LTIuNTcyLjAwOC0xLjcyIDEuMDcxLTIuNDQxIDEuOTU5LTIuNTg2LjgwNC0uMTM1IDEuNTk4LjE1OCAxLjcyMy40NjJoLjA1MXYtLjM4NmgxLjE5NXYzLjQ1MmMuMDA3LjMuMTI4LjQyNS4zMDQuNDI1LjQgMCAuNjc3LS41ODMuNjczLTEuODYxLjAwNC0yLjM3Ni0xLjcwNS0yLjkxNC0zLjE4Ny0yLjkxNC0yLjM0IDAtMy40MTUgMS41MjItMy40MjIgMy4zODcuMDA3IDIuMTI3IDEuMjIgMy4yNzcgMy40MzMgMy4yNzcuODA4IDAgMS41OTgtLjE3NiAyLjAwNi0uMzQ5bC4zOTMgMS4xMjJjLS40MzUuMjctMS40MTkuNTA4LTIuNDkzLjUwOC0yLjk4IDAtNC43MjMtMS42Ni00LjcyNy00LjQ5Ni4wMDQtMi44MDQgMS43NDgtNC43MiA0LjgxNy00Ljcyek03Ljk2NCA2Ljc5Yy0uNzYgMC0xLjE4NS40NTktMS4xODggMS4yNC4wMDMuNjgzLjMgMS4zMzIgMS4yMDIgMS4zMzIuODIxIDAgMS4wOTQtLjQ3MyAxLjA3Ny0xLjM0My0uMDA0LS43MTgtLjIwNC0xLjIzLTEuMDkxLTEuMjN6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuQW5ub3RhdGlvbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5BcnJheSA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkFycmF5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTQuMzkyIDEyVjRoMi43MTN2MS4xNGgtMS4yMXY1LjcyaDEuMjFWMTJINC4zOTJ6bTcuNjkyLTh2OEg5LjM3di0xLjE0aDEuMjA5VjUuMTRIOS4zN1Y0aDIuNzE0elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkFycmF5OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlbkJpbmFyeSA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkJpbmFyeShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMiA0SDR2OGg4VjR6TTguNSA1LjVoLTN2NWgzdi01elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkJpbmFyeTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5Cb29sZWFuID0gZnVuY3Rpb24gRXVpSWNvblRva2VuQm9vbGVhbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk04IDEzQTUgNSAwIDExOCAzYTUgNSAwIDAxMCAxMHptLTIuODI4LTIuMTcyYTQgNCAwIDAxNS42NTYtNS42NTZjLjAwNC4wMTMtNS42NDUgNS42NzQtNS42NTYgNS42NTZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuQm9vbGVhbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5DbGFzcyA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkNsYXNzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTExLjMzMyA3LjAyN0g5LjM3NWMtLjA1Ni0uNzA4LS40OC0xLjE4Ny0xLjIyMi0xLjE4Ny0uOTcyIDAtMS41LjgwNi0xLjUgMi4xNiAwIDEuNDMuNTQ1IDIuMTYgMS40ODYgMi4xNi43MDggMCAxLjEzOS0uNDE1IDEuMjM2LTEuMDhsMS45NTguMDE1QzExLjIzNiAxMC40MTggMTAuMTgxIDEyIDguMDk3IDEyYy0xLjk1OCAwLTMuNDMtMS40MS0zLjQzLTQgMC0yLjYgMS41MTQtNCAzLjQzLTQgMS43OTIgMCAzLjA4NCAxLjA5NSAzLjIzNiAzLjAyN3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5DbGFzczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyID0gZnVuY3Rpb24gRXVpSWNvblRva2VuQ29tcGxldGlvblN1Z2dlc3RlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0zIDRhMSAxIDAgMDExLTFoOGExIDEgMCAwMTEgMXY1Ljk5NmExIDEgMCAwMS0xIDFoLTEuNjYxTDcuNCAxMy4yQS4yNS4yNSAwIDAxNyAxM3YtMi4wMDRINGExIDEgMCAwMS0xLTFWNHptMS41IDFhLjUuNSAwIDAxLjUtLjVoNmEuNS41IDAgMDEuNS41djRhLjUuNSAwIDAxLS41LjVoLS45TDggMTFWOS41SDVhLjUuNSAwIDAxLS41LS41VjV6XCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNi43NSA2YTEgMSAwIDEwMCAyIDEgMSAwIDAwMC0yem0yLjUgMGExIDEgMCAxMDAgMiAxIDEgMCAwMDAtMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlbkNvbnN0YW50ID0gZnVuY3Rpb24gRXVpSWNvblRva2VuQ29uc3RhbnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOS40MTQgMy43NTdsMi44MjkgMi44MjlhMiAyIDAgMDEwIDIuODI4bC0yLjgyOSAyLjgyOWEyIDIgMCAwMS0yLjgyOCAwTDMuNzU3IDkuNDE0YTIgMiAwIDAxMC0yLjgyOGwyLjgyOS0yLjgyOWEyIDIgMCAwMTIuODI4IDB6bS0xLjc0NyAyLjkxYTEgMSAwIDAwLTEgMXYuNjY2YTEgMSAwIDAwMSAxaC42NjZhMSAxIDAgMDAxLTF2LS42NjZhMSAxIDAgMDAtMS0xaC0uNjY2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkNvbnN0YW50OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlbkRhdGUgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5EYXRlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEzIDExLjU2N0MxMyAxMi4zNiAxMi4zNiAxMyAxMS41NjcgMTNINC40MzNDMy42NCAxMyAzIDEyLjM2IDMgMTEuNTY3VjQuNDMzQzMgMy42NCAzLjY0IDMgNC40MzMgM0g2di0uNDk1YS41MS41MSAwIDAxLjQxMi0uNDk3TDYuNSAyYy4yNzYgMCAuNS4yMTQuNS41MDVWM2gydi0uNDk1YS41MS41MSAwIDAxLjQxMi0uNDk3TDkuNSAyYy4yNzYgMCAuNS4yMTQuNS41MDVWM2gxLjU2N0MxMi4zNiAzIDEzIDMuNjQgMTMgNC40MzN2Ny4xMzR6TTQgNnY1LjMzYzAgLjM3LjMuNjcuNjcuNjdoNi42NmMuMzcgMCAuNjctLjMuNjctLjY3VjZINHptMS41IDRjLjI0NSAwIC40NS4xODMuNDkyLjQxMkw2IDEwLjVjMCAuMjQ1LS4xODMuNDUtLjQxMi40OTJMNS41IDExYS41MDUuNTA1IDAgMDEtLjUtLjVjMC0uMjQ1LjE4My0uNDUuNDEyLS40OTJMNS41IDEwek04IDEwYy4yNDUgMCAuNDUuMTgzLjQ5Mi40MTJsLjAwOC4wODhjMCAuMjQ1LS4xODMuNDUtLjQxMi40OTJMOCAxMWEuNTA1LjUwNSAwIDAxLS41LS41YzAtLjI0NS4xODMtLjQ1LjQxMi0uNDkyTDggMTB6bTIuNSAwYy4yNDUgMCAuNDUuMTgzLjQ5Mi40MTJMMTEgMTAuNWMwIC4yNDUtLjE4My40NS0uNDEyLjQ5MkwxMC41IDExYS41MDUuNTA1IDAgMDEtLjUtLjVjMC0uMjQ1LjE4My0uNDUuNDEyLS40OTJMMTAuNSAxMHptLTUtMS41Yy4yNDUgMCAuNDUuMTgzLjQ5Mi40MTJMNiA5YzAgLjI0NS0uMTgzLjQ1LS40MTIuNDkyTDUuNSA5LjVBLjUwNS41MDUgMCAwMTUgOWMwLS4yNDUuMTgzLS40NS40MTItLjQ5Mkw1LjUgOC41em0yLjUgMGMuMjQ1IDAgLjQ1LjE4My40OTIuNDEyTDguNSA5YzAgLjI0NS0uMTgzLjQ1LS40MTIuNDkyTDggOS41YS41MDUuNTA1IDAgMDEtLjUtLjVjMC0uMjQ1LjE4My0uNDUuNDEyLS40OTJMOCA4LjV6bTIuNSAwYy4yNDUgMCAuNDUuMTgzLjQ5Mi40MTJMMTEgOWMwIC4yNDUtLjE4My40NS0uNDEyLjQ5MkwxMC41IDkuNUEuNTA1LjUwNSAwIDAxMTAgOWMwLS4yNDUuMTgzLS40NS40MTItLjQ5MkwxMC41IDguNXpNNS41IDdjLjI0NSAwIC40NS4xODMuNDkyLjQxMkw2IDcuNWMwIC4yNDUtLjE4My40NS0uNDEyLjQ5Mkw1LjUgOGEuNTA1LjUwNSAwIDAxLS41LS41YzAtLjI0NS4xODMtLjQ1LjQxMi0uNDkyTDUuNSA3ek04IDdjLjI0NSAwIC40NS4xODMuNDkyLjQxMkw4LjUgNy41YzAgLjI0NS0uMTgzLjQ1LS40MTIuNDkyTDggOGEuNTA1LjUwNSAwIDAxLS41LS41YzAtLjI0NS4xODMtLjQ1LjQxMi0uNDkyTDggN3ptMi41IDBjLjI0NSAwIC40NS4xODMuNDkyLjQxMkwxMSA3LjVjMCAuMjQ1LS4xODMuNDUtLjQxMi40OTJMMTAuNSA4YS41MDUuNTA1IDAgMDEtLjUtLjVjMC0uMjQ1LjE4My0uNDUuNDEyLS40OTJMMTAuNSA3ek00IDVoOHYtLjMzYzAtLjM3LS4zLS42Ny0uNjctLjY3SDQuNjdDNC4zIDQgNCA0LjMgNCA0LjY3VjV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuRGF0ZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5EZW5zZVZlY3RvciA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkRlbnNlVmVjdG9yKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNC4xNTQgMTJWNGgyLjcxM3YxLjE0SDUuNjU4djUuNzJoMS4yMVYxMkg0LjE1M3ptNy42OTItOHY4SDkuMTMzdi0xLjE0aDEuMjA5VjUuMTRoLTEuMjFWNGgyLjcxNHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5EZW5zZVZlY3RvcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5FbGVtZW50ID0gZnVuY3Rpb24gRXVpSWNvblRva2VuRWxlbWVudChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk03LjM5IDkuNzM2bC0xLjA0MS45NEwzLjI1OCA4bDMuMDktMi42NzcgMS4wNDEuOTQtMi4wMzIgMS43MjJ2LjAzbDIuMDMyIDEuNzIxem0yLjc3Ny45NGwtMS4wNC0uOTQgMi4wMzItMS43MjF2LS4wM0w5LjEyNiA2LjI2NGwxLjA0LS45NEwxMy4yNTkgOGwtMy4wOTEgMi42Nzd6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuRWxlbWVudDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5FbnVtID0gZnVuY3Rpb24gRXVpSWNvblRva2VuRW51bShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk01LjIxMSAxMlY0aDUuNTc4djEuNTdINy4xNDV2MS42NDFoMy4zNTl2MS41NzRINy4xNDV2MS42NDVoMy42NDRWMTJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuRW51bTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5FbnVtTWVtYmVyID0gZnVuY3Rpb24gRXVpSWNvblRva2VuRW51bU1lbWJlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk03LjY4MiAxMlY5LjI0N2wxLjAyMy0uODYxYS41LjUgMCAwMC0uMDAzLS43NjhsLTEuMDItLjg0NFY0aDUuNTc4djEuNTdIOS42MTV2MS42NGgzLjM2djEuNTc1aC0zLjM2djEuNjQ1aDMuNjQ1VjEySDcuNjgyem0uNzQzLTQuMTAzYS4xMzguMTM4IDAgMDEwIC4yMDZMNi4xNTggOS45N2EuMTMzLjEzMyAwIDAxLS4yMTgtLjEwM3YtLjkzNEgyLjg3M0EuMTMzLjEzMyAwIDAxMi43NCA4LjhWNy4yYzAtLjA3NC4wNi0uMTMzLjEzMy0uMTMzSDUuOTR2LS45MzRhLjEzMy4xMzMgMCAwMS4yMTgtLjEwM2wyLjI2NyAxLjg2N3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5FbnVtTWVtYmVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlbkV2ZW50ID0gZnVuY3Rpb24gRXVpSWNvblRva2VuRXZlbnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTEuMjI1IDUuNjU2YzAgLjQyMy0uMTA2Ljc5LS4zMTggMS4xMDItLjIxMS4zMTEtLjUxLjU3LS44OTguNzc1YTUuNDM1IDUuNDM1IDAgMDEtMS4zOTIuNDg1Yy0uNTQuMTE3LTEuMTQuMTkzLTEuNzk4LjIyOWE2LjA0NyA2LjA0NyAwIDAwLS4wMzUuNjdjMCAuMjU4LjAyLjUxLjA2Mi43NTcuMDQuMjQ3LjExNC40NjQuMjIuNjUycy4yNS4zNC40MzIuNDU4LjQxNC4xNzYuNjk2LjE3NmMuMjExIDAgLjQ2Ny0uMDQ0Ljc2Ni0uMTMyLjMtLjA4OC42Mi0uMjQ0Ljk2LS40NjcuMTA2LS4wNy4xOTItLjEyOS4yNTYtLjE3NmEuMzY1LjM2NSAwIDAxLjIyLS4wN2MuMTE4IDAgLjE5Ny4wNjEuMjM4LjE4NWEuOTkuOTkgMCAwMS4wNjIuMjU1IDcuMSA3LjEgMCAwMS0uNTczLjQ2NyA0LjkzIDQuOTMgMCAwMS0uNzc1LjQ2N2MtLjI4OC4xNDEtLjYuMjYxLS45MzQuMzYxLS4zMzUuMS0uNjc4LjE1LTEuMDMuMTUtLjU0MSAwLS45ODItLjA4OC0xLjMyMi0uMjY0YTIuMDcyIDIuMDcyIDAgMDEtLjc5My0uNjg4IDIuNjI2IDIuNjI2IDAgMDEtLjM4OC0uOTMzIDQuOTQ5IDQuOTQ5IDAgMDEtLjEwNi0xLjAwNWMwLS42MzQuMTAzLTEuMjU3LjMwOS0xLjg2OC4yMDUtLjYxLjQ5OS0xLjE1Ny44OC0xLjYzOC4zODMtLjQ4Mi44MzgtLjg3IDEuMzY2LTEuMTYzQTMuNTY3IDMuNTY3IDAgMDE5LjA5MyA0Yy41OTkgMCAxLjEwNC4xMjYgMS41MTUuMzc5LjQxMS4yNTIuNjE3LjY3OC42MTcgMS4yNzd6bS0yLjQ2Ny0uOTUxYy0uMjIzIDAtLjQzNS4wOC0uNjM1LjIzOC0uMi4xNTgtLjM4MS4zNzMtLjU0Ni42NDMtLjE2NC4yNy0uMzA1LjU3OC0uNDIzLjkyNWE2LjQyIDYuNDIgMCAwMC0uMjY0IDEuMTAxYy40Ny0uMDQ3Ljg2My0uMTM1IDEuMTgtLjI2NC4zMTgtLjEzLjU3LS4yODUuNzU4LS40NjcuMTg4LS4xODIuMzIzLS4zODguNDA1LS42MTcuMDgzLS4yMjkuMTI0LS40NjcuMTI0LS43MTMgMC0uMjctLjA1Ni0uNDc5LS4xNjgtLjYyNmEuNTE5LjUxOSAwIDAwLS40MzEtLjIyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkV2ZW50OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlbkV4Y2VwdGlvbiA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkV4Y2VwdGlvbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuNDYxIDcuMzFoMy4wNTVhLjc0Ljc0IDAgMDEuNjYgMS4wNzRsLTIuMTQxIDQuMjExYS43NC43NCAwIDExLTEuMzE5LS42N0w5LjMxIDguNzlINi4yNTZhLjc0Ljc0IDAgMDEtLjY2LTEuMDc1bDIuMTktNC4zMWEuNzQuNzQgMCAwMTEuMzE5LjY3TDcuNDYxIDcuMzF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuRXhjZXB0aW9uOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlbkZpZWxkID0gZnVuY3Rpb24gRXVpSWNvblRva2VuRmllbGQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNS4yNyAxMlY0aDUuNDZ2MS41N0g3LjIwM3YxLjY0MWgzLjE4djEuNTc0aC0zLjE4VjEyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkZpZWxkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlbkZpbGUgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5GaWxlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS44NjcgMi42NjdINGEuNjY3LjY2NyAwIDAwLS42NjcuNjY2djkuMzM0YzAgLjM2OC4yOTkuNjY2LjY2Ny42NjZoOGEuNjY3LjY2NyAwIDAwLjY2Ny0uNjY2VjUuNjE5YS42NjkuNjY5IDAgMDAtLjE4My0uNDU5bC0yLjEzMy0yLjI4NWEuNjY4LjY2OCAwIDAwLS40ODQtLjIwOG0xLjQ2NiA0VjEySDQuNjY3VjRoNHYyLjMzM2MwIC4xODQuMTQ5LjMzNC4zMzMuMzM0aDIuMzMzelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkZpbGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuRmxhdHRlbmVkID0gZnVuY3Rpb24gRXVpSWNvblRva2VuRmxhdHRlbmVkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMy4yNSAzYS4yNS4yNSAwIDAwLS4yNS4yNXYyYzAgLjEzOC4xMTIuMjUuMjUuMjVoOS41YS4yNS4yNSAwIDAwLjI1LS4yNXYtMmEuMjUuMjUgMCAwMC0uMjUtLjI1aC05LjV6bTAgMy43NUEuMjUuMjUgMCAwMDMgN3YyYzAgLjEzOC4xMTIuMjUuMjUuMjVINS41QS4yNS4yNSAwIDAwNS43NSA5VjdhLjI1LjI1IDAgMDAtLjI1LS4yNUgzLjI1em0tLjI1IDRhLjI1LjI1IDAgMDEuMjUtLjI1SDUuNWEuMjUuMjUgMCAwMS4yNS4yNXYyYS4yNS4yNSAwIDAxLS4yNS4yNUgzLjI1YS4yNS4yNSAwIDAxLS4yNS0uMjV2LTJ6bTMuMzEtLjcyN2MtLjA4Mi0uMDczLS4wODItLjIyNCAwLS4yOTZsMy4wNTQtMi42ODNhLjE3LjE3IDAgMDEuMTktLjAyNmMuMDY0LjAzMi4xMDQuMS4xMDQuMTc0djEuMzQxbDMuMTYxLS4wMTZjLjEgMCAuMTguMDg2LjE4LjE5MnYyLjNjMCAuMTA1LS4wOC4xOTEtLjE4LjE5MWwtMy4xNjEuMDE3djEuMzQxYzAgLjA3NC0uMDQuMTQyLS4xMDMuMTc0YS4xNy4xNyAwIDAxLS4xOS0uMDI1TDYuMzEgMTAuMDIzelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkZsYXR0ZW5lZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5GdW5jdGlvbiA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkZ1bmN0aW9uKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTExLjI2NiA0LjE1VjUuNjNhMi40MSAyLjQxIDAgMDAtLjg1OS0uMTQ1Yy0uNjkyIDAtMS4wNjUuMzQ2LTEuMTc3IDEuMDQzbC0uMTEuNjI1aDEuODI4djEuNDRIOC45MjFsLS4yMDQgMS4xMTVDOC40NTUgMTEuMzI1IDcuNTE3IDEyIDUuOSAxMmMtLjQ2OSAwLS44ODItLjA2MS0xLjE2Ni0uMTY3di0xLjQ5NWMuMjczLjExNy41OTEuMTc4LjkwMy4xNzguNjU5IDAgMS4wMS0uMjkgMS4xMjctMS4wMTVsLjE1Ny0uOTFINS4yNDdWNy4xNTJoMS44MzdsLjE4OC0uODQyQzcuNTM0IDQuNzE0IDguNDMyIDQgMTAuMTkgNGMuMzkgMCAuODUzLjA2NyAxLjA3Ni4xNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5GdW5jdGlvbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5HZW8gPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5HZW8oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOCAzYzEuNjM2IDAgMy4wODguNzg1IDQgMiAuNjI4LjgzNiAxIDEuODc1IDEgM2E0Ljk3OCA0Ljk3OCAwIDAxLS45OTkgM0gxMmE0Ljk5MiA0Ljk5MiAwIDAxLTQgMiA0Ljk5MiA0Ljk5MiAwIDAxLTQtMS45OTlWMTFhNSA1IDAgMDE0LTh6bS45NDggOEg3LjA1MmMuMjc3LjYyNi42MjMgMSAuOTQ4IDEgLjMyNSAwIC42Ny0uMzc0Ljk0OC0xek02IDExbC0uNjQ1LjAwMWMuMjc0LjI0Mi41ODEuNDQ2LjkxNC42MDZBNS40NDUgNS40NDUgMCAwMTYgMTEuMDAxem00LjY0NS4wMDFIMTBhNS41MSA1LjUxIDAgMDEtLjI2OS42MDZjLjMzMy0uMTYuNjQtLjM2NC45MTQtLjYwNnptLTUuMTMzLTIuNUg0LjAzMWMuMDY4LjU0LjI0MyAxLjA0OC41MDUgMS41aDEuMTcyYTkuMTg2IDkuMTg2IDAgMDEtLjE5Ni0xLjV6bTMuOTc1IDBINi41MTNjLjAzLjU0NC4xMDQgMS4wNS4yMSAxLjVoMi41NTNjLjEwNy0uNDUuMTgyLS45NTYuMjEtMS41em0yLjQ4MiAwaC0xLjQ4MWE5LjE4NiA5LjE4NiAwIDAxLS4xOTYgMS41aDEuMTcyYy4yNjItLjQ1Mi40MzctLjk2LjUwNS0xLjV6TTUuNzA4IDZMNC41MzUgNmMtLjI2MS40NTItLjQzNy45Ni0uNTA0IDEuNWgxLjQ4MUE5LjE4NyA5LjE4NyAwIDAxNS43MDggNnptMy41NjggMEg2LjcyNGMtLjEwNy40NDktLjE4Mi45NTUtLjIxIDEuNDk5aDIuOTczYTguNDc5IDguNDc5IDAgMDAtLjIxLTEuNXpNMTEuNDY1IDZoLTEuMTczYy4xMDIuNDY3LjE3Ljk3Mi4xOTYgMS41aDEuNDgxYTMuOTc0IDMuOTc0IDAgMDAtLjUwNC0xLjV6TTYuMjY5IDQuMzkzbC0uMTI0LjA2MmMtLjI4Ni4xNS0uNTUxLjMzMy0uNzkuNTQ1SDZhNS41MSA1LjUxIDAgMDEuMjY5LS42MDd6TTggNGMtLjMyNiAwLS42NzEuMzc1LS45NDggMWgxLjg5NkM4LjY3MSA0LjM3NiA4LjMyNiA0IDggNHptMS43My4zOTNsLjAzOC4wNzFjLjA4My4xNjguMTYxLjM0Ny4yMzIuNTM2aC42NDZhNC4wMDYgNC4wMDYgMCAwMC0uOTE1LS42MDd6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuR2VvOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlbkhpc3RvZ3JhbSA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkhpc3RvZ3JhbShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMgM2g0djVoMlY1LjVoNFYxM0gzLjAwMXYtMUgzVjN6bTEgOWgyVjRINHY4em0zIDBoMlY5SDd2M3ptMyAwaDJWNi41aC0yVjEyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkhpc3RvZ3JhbTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5JUCA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbklQKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTExIDNhMiAyIDAgMDEyIDJ2NmEyIDIgMCAwMS0yIDJINWEyIDIgMCAwMS0yLTJWNWEyIDIgMCAwMTItMmg2em0tMSAySDh2NmgxVjkuMDE0aDFjLjI5OC0uMDEzIDIgMCAyLTIuMDE4IDAtMS43NC0xLjMxNC0xLjk1Mi0xLjgyNS0xLjk4N0wxMCA1ek02IDVINXY2aDFWNXptNCAuOTg0Yy42NjcgMCAxIC4zMzYgMSAxLjAwOEMxMSA3LjY2NCAxMC42NjcgOCAxMCA4SDlWNS45ODR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuSVA7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuSW50ZXJmYWNlID0gZnVuY3Rpb24gRXVpSWNvblRva2VuSW50ZXJmYWNlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTguOTY3IDEwLjY1M2gxLjcyN1YxMkg1LjMwNnYtMS4zNDdoMS43MjdWNS4zNDdINS4zMDZWNGg1LjM4OHYxLjM0N0g4Ljk2N3Y1LjMwNnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5JbnRlcmZhY2U7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuSm9pbiA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkpvaW4oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTcuNSA0LjV2MS4wMjVjMCAxLjI2OS0xLjE4NSAxLjkwOC0yLjExMiAxLjczN2EuNzUuNzUgMCAxMDAgMS40NzVjLjkyNy0uMTcgMi4xMTIuNDcgMi4xMTIgMS43Mzl2MS4wMjNoNHYtMS4wMDVhMi41IDIuNSAwIDAxMC00Ljk4OFY0LjVoLTR6TTEzIDRhMSAxIDAgMDAtMS0xSDdhMSAxIDAgMDAtMSAxdjEuNTI1YzAgLjE3Mi0uMTcyLjI5My0uMzQxLjI2MmEyLjI1IDIuMjUgMCAxMDAgNC40MjZjLjE3LS4wMzEuMzQxLjA5LjM0MS4yNjJWMTJhMSAxIDAgMDAxIDFoNWExIDEgMCAwMDEtMVY5LjAwNGEuMTYuMTYgMCAwMC0uMDQtLjEwNWMtLjEwOS0uMTI1LS41OTQtLjE2LS43MzItLjA2OGExIDEgMCAxMTAtMS42NjJjLjEzOC4wOTIuNjIzLjA1Ny43MzItLjA2OGEuMTYuMTYgMCAwMC4wNC0uMTA1VjR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuSm9pbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5LZXkgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5LZXkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTIuNjY3IDYuNTQyQTMuMjA4IDMuMjA4IDAgMDE4Ljg2IDkuNjk0bC0uNDM4LjQ5MmEuNDM3LjQzNyAwIDAxLS4zMjcuMTQ3aC0uNjc4di43M2EuNDM3LjQzNyAwIDAxLS40MzguNDM3SDYuMjV2LjczYS40MzcuNDM3IDAgMDEtLjQzOC40MzdIMy43NzJhLjQzNy40MzcgMCAwMS0uNDM4LS40Mzh2LTEuNDIzYzAtLjExNi4wNDYtLjIyNy4xMjgtLjMxbDIuOTUtMi45NDlhMy4yMDggMy4yMDggMCAwMTMuMDQ3LTQuMjE0IDMuMjAyIDMuMjAyIDAgMDEzLjIwOSAzLjIwOXptLTMuMjA5LS44NzVhLjg3NS44NzUgMCAxMDEuNzUgMCAuODc1Ljg3NSAwIDAwLTEuNzUgMHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5LZXk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuS2V5d29yZCA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbktleXdvcmQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMC4zMyAxMC4yOGMtLjEyLjA0LS4yOS4wNy0uNDIuMDctLjIzIDAtLjQzLS4wOC0uNTMtLjNsLS42My0xLjM0IDIuMzItMi44MUg5LjNMNy43NiA3LjkzaC0uMDlMOC4yMiA0SDYuNTlsLTEuMDUgNy41aDEuNjNsLjI3LTEuOTRoLjFsLjQzIDEuMTJjLjI3LjcxLjc0LjkyIDEuMzMuOTIuMjMgMCAuNi0uMDQuODYtLjExbC4xNy0xLjIxelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbktleXdvcmQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuTWV0aG9kID0gZnVuY3Rpb24gRXVpSWNvblRva2VuTWV0aG9kKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTMuMzMzIDExLjAyN1Y1LjA1aDIuMDU5djEuMTM2aC4wNjNjLjI1LS43NDcuODkxLTEuMjE0IDEuNzI4LTEuMjE0Ljg0OCAwIDEuNTI0LjQ4MyAxLjY1IDEuMjE0aC4wNjNjLjIwNC0uNzMxLjkyNy0xLjIxNCAxLjgyMi0xLjIxNCAxLjE1NSAwIDEuOTQ5Ljc5OCAxLjk0OSAyLjAyM3Y0LjAzaC0yLjE2OVY3LjU0MmMwLS41MjEtLjI5LS44NC0uNzM4LS44NHMtLjcyMy4zMTktLjcyMy44NHYzLjQ4Nkg2Ljk2M1Y3LjU0YzAtLjUyMS0uMjktLjg0LS43MzktLjg0LS40NDcgMC0uNzIyLjMxOS0uNzIyLjg0djMuNDg2SDMuMzMzelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbk1ldGhvZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5NZXRyaWNDb3VudGVyID0gZnVuY3Rpb24gRXVpSWNvblRva2VuTWV0cmljQ291bnRlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTExIDNhMSAxIDAgMDAtMSAxdjFIOWExIDEgMCAwMDAgMmgxdjFhMSAxIDAgMTAyIDBWN2gxYTEgMSAwIDEwMC0yaC0xVjRhMSAxIDAgMDAtMS0xek01IDdhMSAxIDAgMDAtMSAxdjFIM2ExIDEgMCAwMDAgMmgxdjFhMSAxIDAgMTAyIDB2LTFoMWExIDEgMCAxMDAtMkg2VjhhMSAxIDAgMDAtMS0xelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbk1ldHJpY0NvdW50ZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuTWV0cmljR2F1Z2UgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5NZXRyaWNHYXVnZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUgNGgtLjVhLjUuNSAwIDAxMC0xaDFhLjUuNSAwIDAxLjUuNXY5YS41LjUgMCAwMS0uNS41aC0xYS41LjUgMCAwMTAtMUg1di0yaC0uNWEuNS41IDAgMDEwLTFINVY3aC0uNWEuNS41IDAgMDEwLTFINVY0em0zIDFhMSAxIDAgMDAtMSAxdjZhMSAxIDAgMDAxIDFoMmExIDEgMCAwMDEtMVY2YTEgMSAwIDAwLTEtMUg4elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbk1ldHJpY0dhdWdlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlbk1vZHVsZSA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbk1vZHVsZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggMmw1LjE5NiAzdi4xNzhsLS44NjYuNDY4VjUuNUw4IDMgMy42NyA1LjV2NUw4IDEzbDQuMzMtMi41VjUuNzdsLjg2Ni0uNDc0VjExTDggMTRsLTUuMTk2LTNWNUw4IDJ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01LjI0MyA0LjQyOUw5LjU5NyA3LjA0IDggNy45MjggMy43NDMgNS41NjNhLjUuNSAwIDEwLS40ODYuODc0TDcuNSA4Ljc5NFYxMy41aDFWOC43OTRsNC4yNDMtMi4zNTdhLjUwOC41MDggMCAwMC4wNi0uMDRsLjM5Mi0uMjAyVjUuMDQ3bC0uOTE3LjUwNWEuNTczLjU3MyAwIDAwLS4wMi4wMWwtLjEwNi4wNi0uMTkxLjEwNS0xLjM1NS43NTMtNC44NDktMi45MDktLjUxNC44NTh6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuTW9kdWxlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlbk5hbWVzcGFjZSA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbk5hbWVzcGFjZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuNTU2IDguNDE2bC0uODA0LTEuNjhoLS4wMzZ2NS42NEg1VjRoMS45OTJsMi4yOTIgMy45Ni44MDQgMS42OGguMDM2VjRoMS43MTZ2OC4zNzZIOS44NDhsLTIuMjkyLTMuOTZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuTmFtZXNwYWNlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlbk5lc3RlZCA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbk5lc3RlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTEgM2MxLjA0NCAwIDEuOTEzLjc1NyAxLjk5NCAxLjczNmwuMDA2LjE0OXY2LjIzYzAgMS0uODIgMS44MDUtMS44NDUgMS44OEwxMSAxM0g5LjUwMWEuNS41IDAgMDEtLjA5LS45OTJsLjA5LS4wMDhIMTFjLjUyIDAgLjkzNy0uMzUuOTkzLS43ODNsLjAwNy0uMTAydi02LjIzYzAtLjQ0NS0uMzc5LS44MjctLjg4Mi0uODc5TDExIDRIOS41YS41LjUgMCAwMS0uMDktLjk5Mkw5LjUgM0gxMXpNNi41IDNhLjUuNSAwIDAxLjA5Ljk5Mkw2LjUgNEg1Yy0uNTIgMC0uOTM3LjM1LS45OTMuNzgzTDQgNC44ODV2Ni4yM2MwIC40NDUuMzc5LjgyNy44ODIuODc5TDUgMTJoMS41YS41LjUgMCAwMS4wOS45OTJMNi41IDEzSDVjLTEuMDQ0IDAtMS45MTMtLjc1Ny0xLjk5NC0xLjczNkwzIDExLjExNXYtNi4yM2MwLTEgLjgyLTEuODA1IDEuODQ1LTEuODhMNSAzaDEuNXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUuODY0IDcuMjVhLjcxNC43MTQgMCAxMTAgMS40MjkuNzE0LjcxNCAwIDAxMC0xLjQyOXptMi4xNDMgMGEuNzE0LjcxNCAwIDExMCAxLjQyOS43MTQuNzE0IDAgMDEwLTEuNDI5em0yLjE0MyAwYS43MTQuNzE0IDAgMTEwIDEuNDI5LjcxNC43MTQgMCAwMTAtMS40Mjl6XCJcbiAgfSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbk5lc3RlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5OdWxsID0gZnVuY3Rpb24gRXVpSWNvblRva2VuTnVsbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUuMDAyIDEyLjQxMmwtLjk2Mi45NjJhMSAxIDAgMDEtMS40MTQtMS40MTRsLjk2Mi0uOTYyYTUuMzMzIDUuMzMzIDAgMDE3LjQxLTcuNDFsLjk2Mi0uOTYyYTEgMSAwIDExMS40MTQgMS40MTRsLS45NjIuOTYyYTUuMzMzIDUuMzMzIDAgMDEtNy40MSA3LjQxem0uOTY2LS45NjZhNCA0IDAgMDA1LjQ3OC01LjQ3OGwtNS40NzggNS40Nzh6bS0xLjQxNC0xLjQxNGw1LjQ3OC01LjQ3OGE0IDQgMCAwMC01LjQ3OCA1LjQ3OHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5OdWxsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlbk51bWJlciA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbk51bWJlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuOCA5LjgxMmgtLjg0MmwtLjc4IDIuMzM1SDUuMDMxbC43OC0yLjMzNUg0LjZsLjE4Mi0xLjA0M2gxLjM3M2wuNTA3LTEuNTA0SDUuNDU0bC4xODgtMS4wNDJoMS4zNjdsLjc5Mi0yLjM3SDguOTRsLS43OTIgMi4zN2guODQ5bC43OTItMi4zN2gxLjE0NWwtLjc5MiAyLjM3SDExLjRsLS4xODIgMS4wNDJIOS44TDkuMjkzIDguNzdoMS4yNDhsLS4xODMgMS4wNDNIOC45NDZsLS43NzUgMi4zMzVINy4wMjZMNy44IDkuODEyem0tLjUtMS4wNDNoLjg0MmwuNTEzLTEuNTA0aC0uODQ5TDcuMyA4Ljc3elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbk51bWJlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5PYmplY3QgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5PYmplY3QoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNi42MyAxMmMtMS4yOTQgMC0yLjM4My0uMTA1LTIuMzgzLTEuODAyVjkuNmMwLS42MzgtLjI0Ny0uOTE0LS45OC0uOTE0di0xLjM3Yy43MzMgMCAuOTgtLjI4Ljk4LS45MTV2LS42QzQuMjQ3IDQuMTA1IDUuMzM2IDQgNi42MzEgNHYxLjE0Yy0uNzU5IDAtLjg4Ni4yNzItLjg4Ni44NDN2LjgxM2MwIC40NzktLjIyNS45MzYtMS4yMTIgMS4xMzN2LjE0MmMuOTg3LjE5NyAxLjIxMi42NTQgMS4yMTIgMS4xMzN2LjgxM2MwIC41Ny4xMjcuODQ0Ljg4Ni44NDRWMTJ6bTIuMjY2LThjMS4yOTUgMCAyLjM4NC4xMDUgMi4zODQgMS44MDJWNi40YzAgLjYzOC4yNDcuOTE0Ljk4LjkxNHYxLjM3Yy0uNzMzIDAtLjk4LjI4LS45OC45MTV2LjZDMTEuMjggMTEuODk1IDEwLjE5IDEyIDguODk2IDEydi0xLjE0Yy43NTkgMCAuODg2LS4yNzIuODg2LS44NDN2LS44MTNjMC0uNDc5LjIyNS0uOTM2IDEuMjEyLTEuMTMzVjcuOTNjLS45ODctLjE5Ny0xLjIxMi0uNjU0LTEuMjEyLTEuMTMzdi0uODEzYzAtLjU3LS4xMjctLjg0NC0uODg2LS44NDRWNHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5PYmplY3Q7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuT3BlcmF0b3IgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5PcGVyYXRvcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0yLjY2NyA4LjAwMmMwLTEuNS4zOTQtMi43NDMgMS4yNDgtMy44MjJoMS40MzdjLS42NTIuOC0xLjE0IDIuMzg4LTEuMTQgMy44MjIgMCAxLjQzLjQ4OCAzLjAxOCAxLjE0IDMuODE4SDMuOTE1Yy0uODU0LTEuMDgtMS4yNDgtMi4zMjItMS4yNDgtMy44MTh6TTYuNzcgOS45OThsLS44MTgtLjgwMyAxLjIzLTEuMTk3LTEuMjMtMS4yMDMuODMtLjc5MyAxLjIyMSAxLjE5M0w5LjIzIDYuMDAybC44MTguNzkzLTEuMjI3IDEuMiAxLjIyNyAxLjItLjgxOC44MDNMOCA4Ljc5NSA2Ljc3IDkuOTk4em02LjU2My0yYzAgMS41LS4zOTQgMi43NDMtMS4yNDggMy44MjJoLTEuNDM3Yy42NTItLjggMS4xNC0yLjM4OCAxLjE0LTMuODIyIDAtMS40My0uNDg4LTMuMDE4LTEuMTQtMy44MThoMS40MzdjLjg1NCAxLjA4IDEuMjQ4IDIuMzIyIDEuMjQ4IDMuODE4elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbk9wZXJhdG9yOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlblBhY2thZ2UgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5QYWNrYWdlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTguMDQ5IDMuNzg1bDMuODUyIDEuMDA2LTQuMDQ5IDEuMTAzTDQgNC43OTFsMy45NTEtMS4wMDZhLjE5LjE5IDAgMDEuMDk4IDB6bS4wNzMgMi42NTRsNC41NDUtMS4zMDZ2NS40NWwtLjEzMS4xODQtNC40MTQgMS40NTVWNi40Mzl6bS00Ljc4OSA0LjE0NVY1LjE4OEw3LjQ5OCA2LjQxdjUuODFsLTQuMDM0LTEuNDUzLS4xMy0uMTgzelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlblBhY2thZ2U7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuUGFyYW1ldGVyID0gZnVuY3Rpb24gRXVpSWNvblRva2VuUGFyYW1ldGVyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTQuODg5IDEyVjRoMy4zMDRjMS43OTcgMCAyLjkyMiAxLjExNyAyLjkxOCAyLjc3LjAwNCAxLjY1Mi0xLjE0NCAyLjc0Ni0yLjk3NiAyLjc0Nkg2LjgyMlYxMkg0Ljg5em0xLjkzMy00LjAwOGguOTUzYy44NjggMCAxLjMzNi0uNDcyIDEuMzMyLTEuMjIyLjAwNC0uNzMtLjQ2NC0xLjIxMS0xLjMzMi0xLjIxMWgtLjk1M3YyLjQzM3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5QYXJhbWV0ZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuUGVyY29sYXRvciA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlblBlcmNvbGF0b3IoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTUuNSA3YTEuNSAxLjUgMCAxMDAtMyAxLjUgMS41IDAgMDAwIDN6bTAgMWEyLjUgMi41IDAgMTAwLTUgMi41IDIuNSAwIDAwMCA1ek0xMSA5YTEgMSAwIDEwMC0yIDEgMSAwIDAwMCAyem0wIDFhMiAyIDAgMTAwLTQgMiAyIDAgMDAwIDR6bS0yLjUgMS41YS41LjUgMCAxMS0xIDAgLjUuNSAwIDAxMSAwem0xIDBhMS41IDEuNSAwIDExLTMgMCAxLjUgMS41IDAgMDEzIDB6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuUGVyY29sYXRvcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5Qcm9wZXJ0eSA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlblByb3BlcnR5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTQuODg5IDEyVjRoMy4zMDRjMS43OTcgMCAyLjkyMiAxLjExNyAyLjkxOCAyLjc3LjAwNCAxLjY1Mi0xLjE0NCAyLjc0Ni0yLjk3NiAyLjc0Nkg2LjgyMlYxMkg0Ljg5em0xLjkzMy00LjAwOGguOTUzYy44NjggMCAxLjMzNi0uNDcyIDEuMzMyLTEuMjIyLjAwNC0uNzMtLjQ2NC0xLjIxMS0xLjMzMi0xLjIxMWgtLjk1M3YyLjQzM3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5Qcm9wZXJ0eTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5SYW5nZSA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlblJhbmdlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05LjgyIDUuMTE2YS41LjUgMCAwMC0uNzA0LjcwNGwuMDY0LjA2NEwxMS43MTkgOGwtMi41NCAyLjExNmEuNS41IDAgMDAtLjExNC42M2wuMDUuMDc0YS41LjUgMCAwMC42My4xMTVsLjA3NS0uMDUgMy0yLjVhLjUuNSAwIDAwLjA3MS0uNjk3bC0uMDctLjA3Mi0zLTIuNXpNNi4xOCA1LjExNmEuNS41IDAgMDEuNzA0LjcwNGwtLjA2NC4wNjRMNC4yODEgOGwyLjU0IDIuMTE2YS41LjUgMCAwMS4xMTQuNjNsLS4wNS4wNzRhLjUuNSAwIDAxLS42My4xMTVsLS4wNzUtLjA1LTMtMi41YS41LjUgMCAwMS0uMDcxLS42OTdsLjA3LS4wNzIgMy0yLjV6XCJcbiAgfSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlblJhbmdlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlblJhbmtGZWF0dXJlID0gZnVuY3Rpb24gRXVpSWNvblRva2VuUmFua0ZlYXR1cmUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMyA0djhoLTJWNkg5djRINXYySDNWOGg0VjRoNnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5SYW5rRmVhdHVyZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5SYW5rRmVhdHVyZXMgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5SYW5rRmVhdHVyZXMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMyA0djhoLTJWNkg5djRINXYySDNWOGg0VjRoNnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5SYW5rRmVhdHVyZXM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuUmVwbyA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlblJlcG8oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOC41MzMgOS4wNjdjLTEuNzkyIDAtMi4zNzguNzItMi41NyAxLjE5NGExLjYwMSAxLjYwMSAwIDExLTEuMTYzLS4wMzdWNS43NzZhMS41OTUgMS41OTUgMCAwMS0xLjA2Ny0xLjUxYzAtLjg4NS43MTUtMS42IDEuNi0xLjYuODg2IDAgMS42LjcxNSAxLjYgMS42IDAgLjctLjQ0MiAxLjI5MS0xLjA2NiAxLjUxdjIuODIxQzYuMzM2IDguMjUxIDcuMDE5IDggOCA4YzEuNDI0IDAgMS44OTktLjcxNSAyLjA1My0xLjE5YTEuNjAzIDEuNjAzIDAgMDEtLjk4Ni0xLjQ3N2MwLS44ODUuNzE0LTEuNiAxLjYtMS42Ljg4NSAwIDEuNi43MTUgMS42IDEuNmExLjU5IDEuNTkgMCAwMS0xLjExNSAxLjUyNmMtLjEzOS43NjItLjY1NiAyLjIwOC0yLjYxOSAyLjIwOHptLTMuMiAyLjEzM2EuNTM1LjUzNSAwIDAwLS41MzMuNTMzYzAgLjI5NC4yNC41MzQuNTMzLjUzNGEuNTM1LjUzNSAwIDAwMC0xLjA2N3ptMC03LjQ2N2EuNTM1LjUzNSAwIDAwLS41MzMuNTM0YzAgLjI5My4yNC41MzMuNTMzLjUzMy4yOTQgMCAuNTM0LS4yNC41MzQtLjUzM2EuNTM1LjUzNSAwIDAwLS41MzQtLjUzNHpNMTAuNjY3IDQuOGEuNTM1LjUzNSAwIDAwLS41MzQuNTMzLjUzNS41MzUgMCAwMDEuMDY3IDAgLjUzNS41MzUgMCAwMC0uNTMzLS41MzN6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuUmVwbzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5TZWFyY2hUeXBlID0gZnVuY3Rpb24gRXVpSWNvblRva2VuU2VhcmNoVHlwZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuMjcgNy41YTEgMSAwIDExMiAwIDEgMSAwIDAxLTIgMHpNOC43NyA3LjVhMSAxIDAgMTEyIDAgMSAxIDAgMDEtMiAwelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMS43MDIgMTAuNjgyYTQuNTAxIDQuNTAxIDAgMDEtNS43OTYuNDgyTDQuMjggMTIuNzg5YS43NS43NSAwIDAxLTEuMDYtMS4wNkw0Ljg0NyAxMC4xYTQuNTAxIDQuNTAxIDAgMTE2Ljg1NS41ODF6bS01LjMwNC0xLjA2YTMgMyAwIDEwNC4yNDMtNC4yNDNBMyAzIDAgMDA2LjM5OCA5LjYyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlblNlYXJjaFR5cGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuU2hhcGUgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5TaGFwZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMyAxMHYzaC0zdi0xSDZ2MUgzdi0zaDFWNkgzVjNoM3YxaDRWM2gzdjNoLTF2NGgxem0tOCAxSDR2MWgxdi0xem03IDBoLTF2MWgxdi0xek01IDRINHYxaDFWNHptNyAwaC0xdjFoMVY0em0tMSAyaC0xVjVINnYxSDV2NGgxdjFoNHYtMWgxVjZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuU2hhcGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuU3RyaW5nID0gZnVuY3Rpb24gRXVpSWNvblRva2VuU3RyaW5nKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS4xNDcgNC4yOTdsLS4yNTUgMS40NTVoLjkzNmwtLjIyMiAxLjI2NmgtLjkzNWwtLjQ1NSAyLjY4OGMtLjAyNS4xODQtLjAxMy4zMjMuMDM2LjQxNy4wNDguMDkzLjE3LjE0NC4zNjUuMTUxLjA3NS4wMDQuMjMtLjAwNS40NjUtLjAyN2wtLjEzIDEuMzJjLS4zLjA5Ny0uNjE4LjE0Mi0uOTU3LjEzNS0uNTUyLS4wMDctLjk2NS0uMTctMS4yMzktLjQ4Ny0uMjc0LS4zMTctLjM4Ni0uNzQ4LS4zMzUtMS4yOTNsLjQ3Ni0yLjkwNGgtLjcyNWwuMjE2LTEuMjY2aC43MjVsLjI1NC0xLjQ1NWgxLjc4elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlblN0cmluZzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5TdHJ1Y3QgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5TdHJ1Y3QoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNC42NjcgNC42NjdoMi42NjZ2Mi42NjZINC42NjdWNC42Njd6bTAgNGgyLjY2NnYyLjY2Nkg0LjY2N1Y4LjY2N3ptNC00aDIuNjY2djIuNjY2SDguNjY3VjQuNjY3em0wIDRoMi42NjZ2Mi42NjZIOC42NjdWOC42Njd6TTMuMzMzIDMuMzMzdjkuMzM0aDkuMzM0VjMuMzMzSDMuMzMzem0wLTEuMzMzaDkuMzM0QzEzLjQwMyAyIDE0IDIuNTk3IDE0IDMuMzMzdjkuMzM0YzAgLjczNi0uNTk3IDEuMzMzLTEuMzMzIDEuMzMzSDMuMzMzQTEuMzMzIDEuMzMzIDAgMDEyIDEyLjY2N1YzLjMzM0MyIDIuNTk3IDIuNTk3IDIgMy4zMzMgMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5TdHJ1Y3Q7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuU3ltYm9sID0gZnVuY3Rpb24gRXVpSWNvblRva2VuU3ltYm9sKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOC4zMTYgMTRhNiA2IDAgMTEwLTEyIDYgNiAwIDAxMCAxMnptMC0xLjMzM2E0LjY2NyA0LjY2NyAwIDEwMC05LjMzNCA0LjY2NyA0LjY2NyAwIDAwMCA5LjMzNHptMi4xOS01LjcyaDEuMTQzYy4wMTkgMS40NDgtLjc5MyAyLjMzOC0xLjkyMiAyLjMzOC0uNjMyIDAtMS4xOTQtLjI2Ny0xLjcwNi0uODExLS4zNi0uMzk3LS42MzYtLjU3Ni0xLS41NzYtLjUxNyAwLS44NDkuMzU1LS44ODUgMS4wODNINC45ODNjLjAxNC0xLjQ3Ljg1OC0yLjMxNCAxLjk1LTIuMzE0LjU5NSAwIDEuMTI1LjI0OSAxLjY3OC44MDIuMzkyLjM4Mi42NDEuNTk1IDEuMDM4LjU5NS40ODQgMCAuODU3LS4zMjMuODU3LTEuMTE2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlblN5bWJvbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5UYWcgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5UYWcoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMCA4YTEgMSAwIDExLTIgMCAxIDEgMCAwMTIgMHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk00IDRhMSAxIDAgMDAtMSAxdjZhMSAxIDAgMDAxIDFoNi45ODlhMSAxIDAgMDAuODI1LS40MzZsMi4wNS0zYTEgMSAwIDAwMC0xLjEyOGwtMi4wNS0zQTEgMSAwIDAwMTAuOTkgNEg0em0uNzUgMS4yNWEuNS41IDAgMDAtLjUuNXY0LjVhLjUuNSAwIDAwLjUuNWg1Ljc0NWEuNS41IDAgMDAuNDA1LS4yMDZsMS42MzYtMi4yNWEuNS41IDAgMDAwLS41ODhMMTAuOSA1LjQ1NmEuNS41IDAgMDAtLjQwNS0uMjA2SDQuNzV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuVGFnOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlblRleHQgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5UZXh0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS4xNDcgNC4yOTdsLS4yNTUgMS40NTVoLjkzNmwtLjIyMiAxLjI2NmgtLjkzNWwtLjQ1NSAyLjY4OGMtLjAyNS4xODQtLjAxMy4zMjMuMDM2LjQxNy4wNDguMDkzLjE3LjE0NC4zNjUuMTUxLjA3NS4wMDQuMjMtLjAwNS40NjUtLjAyN2wtLjEzIDEuMzJjLS4zLjA5Ny0uNjE4LjE0Mi0uOTU3LjEzNS0uNTUyLS4wMDctLjk2NS0uMTctMS4yMzktLjQ4Ny0uMjc0LS4zMTctLjM4Ni0uNzQ4LS4zMzUtMS4yOTNsLjQ3Ni0yLjkwNGgtLjcyNWwuMjE2LTEuMjY2aC43MjVsLjI1NC0xLjQ1NWgxLjc4elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlblRleHQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuVG9rZW5Db3VudCA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlblRva2VuQ291bnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDRIM3YzaDVWNHpNMTMgOUg4djNoNVY5ek0xMCA0aDN2M2gtM1Y0ek02IDlIM3YzaDNWOXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5Ub2tlbkNvdW50OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlblZhcmlhYmxlID0gZnVuY3Rpb24gRXVpSWNvblRva2VuVmFyaWFibGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNi42NDkgNC42NjdsMS4zMjYgNC43aC4wNWwxLjMyNi00LjdoMS45ODJsLTIuMTM0IDYuNjY2SDYuODAxTDQuNjY3IDQuNjY3elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlblZhcmlhYmxlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25UcmFpbmluZyA9IGZ1bmN0aW9uIEV1aUljb25UcmFpbmluZyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEwLjM4NiA5LjgzNmEyLjUgMi41IDAgMTEzLjYxMS42NjdDMTUuMjEyIDExLjE3MyAxNiAxMi40NiAxNiAxNHYxLjVhLjUuNSAwIDExLTEgMFYxNGMwLTEuNzI0LTEuMjc2LTMtMy0zLS45MSAwLTEuMjk4LS4wMi0xLjgwNS0uMTIyLTEuMjUtLjI1NC0yLjMzMy0xLTMuNTg1LTIuNTY2YS41LjUgMCAxMS43OC0uNjI0Yy45IDEuMTI0IDEuNjUzIDEuNzQgMi40MzQgMi4wNDMuMTU1LjA1Mi4zNDUuMDgzLjU2Mi4xMDV6bTEuNzg1LjEyOGMuMDgzLjAxLjE2Ny4wMjEuMjUxLjAzNEwxMi41IDEwYTEuNSAxLjUgMCAxMC0uMzMtLjAzNnpNOS43OCAxMS45N2EuNS41IDAgMDEuNS41YzAgLjA3Ni0uMDQ3LjIyNi0uMDUuMjMxLS4xNzkuMzgtLjIzLjc3NC0uMjMgMS4zMDJ2MS41YS41LjUgMCAxMS0xIDB2LTEuNWMwLS42NTcuMDcyLTEuMTg2LjMwNy0xLjY5NmEuNS41IDAgMDEuNDczLS4zMzd6TTUuOTU4IDUuNzcyYS41LjUgMCAwMS0uNzguNjI1TDMuMTEgMy44MTJhLjUuNSAwIDExLjc4LS42MjRsMi4wNjggMi41ODR6TTEgMTFoNS41YS41LjUgMCAxMTAgMWgtNmEuNS41IDAgMDEtLjUtLjVWLjVBLjUuNSAwIDAxLjUgMGgxMmEuNS41IDAgMDEuNS41djNhLjUuNSAwIDExLTEgMFYxSDF2MTB6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRyYWluaW5nOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25UcmFzaCA9IGZ1bmN0aW9uIEV1aUljb25UcmFzaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTExIDNoNXYxSDBWM2g1VjFhMSAxIDAgMDExLTFoNGExIDEgMCAwMTEgMXYyem0tNy4wNTYgOEg3djFINC4xbC4zOTIgMi41MTljLjA0Mi4yNjkuMjU0LjQ1OC40OTMuNDU4aDYuMDNjLjIzOSAwIC40NTEtLjE4OS40OTMtLjQ1OGwxLjQ5OC05LjU3NkgxNGwtMS41MDQgOS43M2MtLjExNi43NDctLjc0IDEuMzA0LTEuNDgxIDEuMzA0aC02LjAzYy0uNzQxIDAtMS4zNjUtLjU1Ny0xLjQ4MS0xLjMwNGwtMS41MTEtOS43M0g5VjUuOTVIMy4xNTdMMy40NzYgOEg4djFIMy42MzJsLjMxMiAyek02IDNoNFYxSDZ2MnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVHJhc2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblVuZm9sZCA9IGZ1bmN0aW9uIEV1aUljb25VbmZvbGQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01LjE0IDMuODA4TDcuNTMgMS41MWEuNjcuNjcgMCAwMS45NDIgMGwyLjM4OSAyLjI5OGMuMjYuMjU2LjY4NS4yNTYuOTQ0IDBhLjY1LjY1IDAgMDAwLS45M0w5LjQxNi41NzhhMi4wMiAyLjAyIDAgMDAtMi44MzIgMGwtMi4zODggMi4zYS42NS42NSAwIDAwMCAuOTNjLjI2LjI1Ni42ODMuMjU2Ljk0NCAwem0wIDguMzg0bDIuMzkgMi4yOThhLjY3LjY3IDAgMDAuOTQyIDBsMi4zODktMi4yOThhLjY3Ny42NzcgMCAwMS45NDQgMCAuNjUuNjUgMCAwMTAgLjkzbC0yLjM4OCAyLjNhMi4wMiAyLjAyIDAgMDEtMi44MzIgMGwtMi4zODgtMi4zYS42NS42NSAwIDAxMC0uOTMuNjc3LjY3NyAwIDAxLjk0NCAwek0xNiA2SDB2NGgxNlY2ek0xIDlWN2gxNHYySDF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblVuZm9sZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVW5saW5rID0gZnVuY3Rpb24gRXVpSWNvblVubGluayhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuNTY1IDEwLjgzYS41LjUgMCAxMS44MTkuNTczbC0xLjg3NyAyLjY4Yy0uOTYzIDEuMzc2LTMuMDIgMS41NS00LjU4OC40NUMuMzUgMTMuNDM2LS4xOTEgMTEuNDQ1Ljc3MyAxMC4wN0wzLjY0IDUuOTczYy45NjMtMS4zNzUgMy4wMTktMS41NDggNC41ODctLjQ1YS41LjUgMCAxMS0uNTczLjgyQzYuNTA5IDUuNTQgNS4wOCA1LjY2IDQuNDYgNi41NDZsLTIuODY4IDQuMDk1Yy0uNjIxLjg4Ny0uMjQ1IDIuMjcuOSAzLjA3MyAxLjE0Ni44MDIgMi41NzUuNjgyIDMuMTk2LS4yMDVsMS44NzctMi42OHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuODkyIDMuNDNhLjUuNSAwIDExLS41NzQtLjgxOUwxMCAuNzM0YzEuMzc2LS45NjMgMy4zNjctLjQyMiA0LjQ2NSAxLjE0NiAxLjA5OCAxLjU2OS45MjYgMy42MjUtLjQ1IDQuNTg4TDkuOTE4IDkuMzM2Yy0xLjM3NS45NjMtMy4zNjYuNDIyLTQuNDY0LTEuMTQ2YS41LjUgMCAxMS44MTktLjU3NGMuODAyIDEuMTQ2IDIuMTg1IDEuNTIyIDMuMDcyLjlMMTMuNDQgNS42NWMuODg2LS42MjEgMS4wMDYtMi4wNS4yMDQtMy4xOTUtLjgwMi0xLjE0Ni0yLjE4Ni0xLjUyMi0zLjA3Mi0uOUw3Ljg5MiAzLjQzek02IC41djNhLjUuNSAwIDAxLTEgMHYtM2EuNS41IDAgMDExIDB6TTEuMDU4IDIuMjNsMi40NTggMS43MmEuNS41IDAgMDEtLjU3NC44MkwuNDg0IDMuMDVhLjUuNSAwIDExLjU3NC0uODJ6bTEyIDcuMDkzbDIuNDU3IDEuNzJhLjUuNSAwIDExLS41NzMuODJsLTIuNDU3LTEuNzJhLjUuNSAwIDExLjU3My0uODJ6bS0yLjA5OSAxLjE4MXYzYS41LjUgMCAxMS0xIDB2LTNhLjUuNSAwIDExMSAwelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Vbmxpbms7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblVzZXIgPSBmdW5jdGlvbiBFdWlJY29uVXNlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk04IDlhNCA0IDAgMTAwLTggNCA0IDAgMDAwIDh6bTAtMWEzIDMgMCAxMDAtNiAzIDMgMCAwMDAgNnpcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNSAxNC4yOTFBOS4wNTMgOS4wNTMgMCAwMDggMTFhOS4wNTMgOS4wNTMgMCAwMC03IDMuMjkxbC43MTUuNzFBOC4wNDcgOC4wNDcgMCAwMTggMTEuOTk2IDguMDQ3IDguMDQ3IDAgMDExNC4yODYgMTVsLjcxNC0uNzF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblVzZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblVzZXJBdmF0YXIgPSBmdW5jdGlvbiBFdWlJY29uVXNlckF2YXRhcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTgsXG4gICAgaGVpZ2h0OiAxOCxcbiAgICB2aWV3Qm94OiBcIjAgMCAxOCAxOFwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTMuNjg5IDExLjEzMmMxLjE1NSAxLjIyMiAxLjk1MyAyLjg3OSAyLjE4MyA0Ljc0OGExLjAwNyAxLjAwNyAwIDAxLTEgMS4xMkgzLjAwN2ExLjAwNSAxLjAwNSAwIDAxLTEtMS4xMmMuMjMtMS44NyAxLjAyOC0zLjUyNiAyLjE4My00Ljc0OC4yNDcuMjI4LjUwNS40NDIuNzgyLjYzMy0xLjAzOCAxLjA2OS0xLjc2NSAyLjU1LTEuOTcyIDQuMjM3TDE0Ljg3MiAxNmMtLjIwNC0xLjY4Ni0uOTMtMy4xNjYtMS45NjYtNC4yMzVhNy4wMSA3LjAxIDAgMDAuNzgzLS42MzN6TTguOTM5IDFjMS45IDAgMyAyIDQuMzggMi42MzNhMi40ODMgMi40ODMgMCAwMS0xLjg4Ljg2N2MtLjI5OCAwLS41NzktLjA2LS44NDQtLjE1N0EzLjcyNiAzLjcyNiAwIDAxNy42OSA1Ljc1Yy0xLjM5NSAwLTMuNzUuMjUtMy4yNDUtMS45MDNDNS45NCAzIDYuOTUyIDEgOC45NCAxelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOC45NCAyYzIuMjA1IDAgNCAxLjc5NCA0IDRzLTEuNzk1IDQtNCA0Yy0yLjIwNyAwLTQtMS43OTQtNC00czEuNzkzLTQgNC00bTAgOUE1IDUgMCAxMDguOTM3Ljk5OSA1IDUgMCAwMDguOTQgMTFcIlxuICB9KSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblVzZXJBdmF0YXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblVzZXJzID0gZnVuY3Rpb24gRXVpSWNvblVzZXJzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTUuNDgyIDQuMzQ0YTIgMiAwIDEwLTIuOTYzIDBjLS4wOC4wNDItLjE1Ni4wODctLjIzLjEzNi0uNDU3LjMwNS0uNzUuNzA0LS45MzMgMS4wNzNBMy40NTcgMy40NTcgMCAwMDEgNi45NzhWOWExIDEgMCAwMDEgMWgyLjVhMy42OSAzLjY5IDAgMDEuNjg0LS45NjJMNS4xNzEgOUgyVjdzMC0yIDItMmMxLjAwNyAwIDEuNTA3LjUwNyAxLjc1NSAxLjAxLjIyNS0uMjU0LjQ5My0uNDcuNzkzLS42MzZhMi43MTcgMi43MTcgMCAwMC0xLjA2Ni0xLjAzek00IDRhMSAxIDAgMTAwLTIgMSAxIDAgMDAwIDJ6bTEwIDZoLTIuNWEzLjY4NCAzLjY4NCAwIDAwLS42ODQtLjk2MkwxMC44MjkgOUgxNFY3czAtMi0yLTJjLTEuMDA3IDAtMS41MDcuNTA3LTEuNzU1IDEuMDFhMy4wMTIgMy4wMTIgMCAwMC0uNzkzLS42MzYgMi43MTYgMi43MTYgMCAwMTEuMDY2LTEuMDMgMiAyIDAgMTEyLjk2MyAwYy4wOC4wNDIuMTU2LjA4Ny4yMy4xMzYuNDU3LjMwNS43NS43MDQuOTMzIDEuMDczQTMuNDUzIDMuNDUzIDAgMDExNSA2Ljk0NFY5YTEgMSAwIDAxLTEgMXptLTItNmExIDEgMCAxMDAtMiAxIDEgMCAwMDAgMnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMCA4YzAgLjUxNy0uMTk2Ljk4OS0uNTE4IDEuMzQ0YTIuNzU1IDIuNzU1IDAgMDExLjE2MyAxLjIxQTMuNDUzIDMuNDUzIDAgMDExMSAxMS45NzdWMTRhMSAxIDAgMDEtMSAxSDZhMSAxIDAgMDEtMS0xdi0yLjAyMmEyLjAwNSAyLjAwNSAwIDAxLjAwNi0uMTM1IDMuNDU2IDMuNDU2IDAgMDEuMzUtMS4yOSAyLjc1NSAyLjc1NSAwIDAxMS4xNjItMS4yMUEyIDIgMCAxMTEwIDh6bS00IDR2Mmg0di0yczAtMi0yLTItMiAyLTIgMnptMy00YTEgMSAwIDExLTIgMCAxIDEgMCAwMTIgMHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVXNlcnM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblZlY3RvciA9IGZ1bmN0aW9uIEV1aUljb25WZWN0b3IoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMi41IDExVjVIMTFWMy41SDVWNUgzLjV2Nkg1djEuNWg2VjExaDEuNXptMSAwSDE1djRoLTR2LTEuNUg1VjE1SDF2LTRoMS41VjVIMVYxaDR2MS41aDZWMWg0djRoLTEuNXY2ek00IDRWMkgydjJoMnptOCAwaDJWMmgtMnYyek0yIDE0aDJ2LTJIMnYyem0xMCAwaDJ2LTJoLTJ2MnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmVjdG9yOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25WaWRlb1BsYXllciA9IGZ1bmN0aW9uIEV1aUljb25WaWRlb1BsYXllcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTAgMS45OTRDMCAuODkzLjg5NSAwIDEuOTk0IDBoMTIuMDEyQzE1LjEwNyAwIDE2IC44OTUgMTYgMS45OTR2MTIuMDEyQTEuOTk1IDEuOTk1IDAgMDExNC4wMDYgMTZIMS45OTRBMS45OTUgMS45OTUgMCAwMTAgMTQuMDA2VjEuOTk0em0xIDB2MTIuMDEyYzAgLjU0OC40NDYuOTk0Ljk5NC45OTRoMTIuMDEyYS45OTUuOTk1IDAgMDAuOTk0LS45OTRWMS45OTRBLjk5NS45OTUgMCAwMDE0LjAwNiAxSDEuOTk0QS45OTUuOTk1IDAgMDAxIDEuOTk0ek0xIDRoMTR2MUgxVjR6bTEuNS0xYS41LjUgMCAwMTAtMWgxYS41LjUgMCAwMTAgMWgtMXptMyAwYS41LjUgMCAwMTAtMWgxYS41LjUgMCAwMTAgMWgtMXptNC45NDcgNi4xMDZhMSAxIDAgMDEwIDEuNzg4bC0zIDJBMSAxIDAgMDE2IDEyVjhhMSAxIDAgMDExLjQ0Ny0uODk0bDMgMnpNMTAgMTBMNyA4djRsMy0yelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaWRlb1BsYXllcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVmlzQXJlYSA9IGZ1bmN0aW9uIEV1aUljb25WaXNBcmVhKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMyAxM2gxMFY5LjkxM2wtMi41NzEtMi44MjZMOC41NiA4Ljc1M2EuNS41IDAgMDEtLjcyOC0uMDY3TDQuNDQ4IDQuMzE3IDMgNi4xOTFWMTN6bTUuMjk1LTUuMzVsMS44MzctMS42NGEuNS41IDAgMDEuNzAzLjAzN2wzLjAzNSAzLjMzNmEuNS41IDAgMDEuMTMuMzM3djMuNzhhLjUuNSAwIDAxLS41LjVoLTExYS41LjUgMCAwMS0uNS0uNVY2LjAyYS41LjUgMCAwMS4xMDQtLjMwNWwxLjk0Ny0yLjUyYS41LjUgMCAwMS43OTEtLjAwMUw4LjI5NSA3LjY1ek0xIDE1aDEzLjVhLjUuNSAwIDExMCAxSC41YS41LjUgMCAwMS0uNS0uNXYtMTRhLjUuNSAwIDAxMSAwVjE1elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaXNBcmVhOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25WaXNBcmVhU3RhY2tlZCA9IGZ1bmN0aW9uIEV1aUljb25WaXNBcmVhU3RhY2tlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTS41IDFhLjUuNSAwIDAxLjUuNVYxNWgxMy41YS41LjUgMCAxMTAgMUguNWEuNS41IDAgMDEtLjUtLjV2LTE0QS41LjUgMCAwMS41IDF6bTQuMzQyIDIuMTk0TDguMjk1IDcuNjVsMS44MzctMS42NGEuNS41IDAgMDEuNzAzLjAzN2wzLjAzNSAzLjMzNmEuNS41IDAgMDEuMTMuMzM3djMuNzhhLjUuNSAwIDAxLS41LjVoLTExYS41LjUgMCAwMS0uNS0uNVY2LjAyYS41LjUgMCAwMS4xMDQtLjMwNWwxLjk0Ny0yLjUyYS41LjUgMCAwMS43OTEtLjAwMXptLS4zOTQgMS4xMjNMMyA2LjE5MXY0LjEwMWwxLjE0Ni0xLjE0NmEuNS41IDAgMDEuNDkzLS4xMjZsLjA4NS4wMzNMOC41IDEwLjk0bDEuNzc2LS44ODhhLjUuNSAwIDAxLjM2LS4wMzRsLjA4OC4wMzRMMTMgMTEuMTlWOS45MTNsLTIuNTcxLTIuODI2TDguNTYgOC43NTNhLjUuNSAwIDAxLS43MjgtLjA2N0w0LjQ0OCA0LjMxN3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmlzQXJlYVN0YWNrZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblZpc0Jhckhvcml6b250YWwgPSBmdW5jdGlvbiBFdWlJY29uVmlzQmFySG9yaXpvbnRhbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguNSAxMGgtNmEuNS41IDAgMDEwLTFIOFY2SDIuNWEuNS41IDAgMDEwLTFIMTNWMkgyLjVhLjUuNSAwIDAxMC0xaDExYS41LjUgMCAwMS41LjV2NGEuNS41IDAgMDEtLjUuNUg5djNoMi41YS41LjUgMCAwMS41LjV2NGEuNS41IDAgMDEtLjUuNWgtOWEuNS41IDAgMTEwLTFIMTF2LTNIOC41ek0wIC41YS41LjUgMCAxMTEgMHYxNGEuNS41IDAgMTEtMSAwVi41elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaXNCYXJIb3Jpem9udGFsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25WaXNCYXJIb3Jpem9udGFsU3RhY2tlZCA9IGZ1bmN0aW9uIEV1aUljb25WaXNCYXJIb3Jpem9udGFsU3RhY2tlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTS41IDBhLjUuNSAwIDAxLjUuNXYxNGEuNS41IDAgMTEtMSAwVi41QS41LjUgMCAwMS41IDB6bTEzIDFhLjUuNSAwIDAxLjUuNXY0YS41LjUgMCAwMS0uNS41SDl2M2gyLjVhLjUuNSAwIDAxLjUuNXY0YS41LjUgMCAwMS0uNS41aC05YS41LjUgMCAxMTAtMUg5di0zSDIuNWEuNS41IDAgMDEwLTFINlY2SDIuNWEuNS41IDAgMDEwLTFIMTBWMkgyLjVhLjUuNSAwIDAxMC0xaDExelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaXNCYXJIb3Jpem9udGFsU3RhY2tlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVmlzQmFyVmVydGljYWwgPSBmdW5jdGlvbiBFdWlJY29uVmlzQmFyVmVydGljYWwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMCA3LjV2NmEuNS41IDAgMTEtMSAwVjhINnY1LjVhLjUuNSAwIDExLTEgMFYzSDJ2MTAuNWEuNS41IDAgMTEtMSAwdi0xMWEuNS41IDAgMDEuNS0uNWg0YS41LjUgMCAwMS41LjVWN2gzVjQuNWEuNS41IDAgMDEuNS0uNWg0YS41LjUgMCAwMS41LjV2OWEuNS41IDAgMTEtMSAwVjVoLTN2Mi41ek0uNSAxNmEuNS41IDAgMTEwLTFoMTRhLjUuNSAwIDExMCAxSC41elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaXNCYXJWZXJ0aWNhbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVmlzQmFyVmVydGljYWxTdGFja2VkID0gZnVuY3Rpb24gRXVpSWNvblZpc0JhclZlcnRpY2FsU3RhY2tlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE0LjUgMTVhLjUuNSAwIDExMCAxSC41YS41LjUgMCAxMTAtMWgxNHptLTktMTNhLjUuNSAwIDAxLjUuNUw1Ljk5OSA3SDlWNC41YS41LjUgMCAwMS41LS41aDRhLjUuNSAwIDAxLjUuNXY5YS41LjUgMCAxMS0xIDBWN2gtM3Y2LjVhLjUuNSAwIDAxLS40MS40OTJMOS41IDE0YS41LjUgMCAwMS0uNS0uNVYxMEg2djMuNWEuNS41IDAgMDEtLjk5Mi4wOUw1IDEzLjVWNkgydjcuNWEuNS41IDAgMTEtMSAwdi0xMWEuNS41IDAgMDEuNS0uNWg0elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaXNCYXJWZXJ0aWNhbFN0YWNrZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblZpc0dhdWdlID0gZnVuY3Rpb24gRXVpSWNvblZpc0dhdWdlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIuODc3IDUuODQ3bC0xLjAyIDEuMDJhLjUuNSAwIDAxLS43MDgtLjcwN2wxLjEtMS4wOTljLS4wNS0uMDUzLS4xLS4xMDYtLjE1Mi0uMTU3QTYuNDcxIDYuNDcxIDAgMDA4IDMuMDE5VjQuNWEuNS41IDAgMDEtMSAwVjMuMDE5YTYuNDcgNi40NyAwIDAwLTQuMjYxIDIuMDU1bDEuMDcgMS4wNzFhLjUuNSAwIDAxLS43MDYuNzA3bC0uOTktLjk5QTYuNDYgNi40NiAwIDAwMS4wMTggMTBIMi41YS41LjUgMCAxMTAgMUgxLjE3NGMuMDgzLjM1My4xOTYuNjk3LjMzNyAxLjAzYS41LjUgMCAxMS0uOTIyLjM5QTcuNDg3IDcuNDg3IDAgMDEwIDkuNWE3LjQ4MyA3LjQ4MyAwIDAxMi4xOTctNS4zMDRBNy40ODcgNy40ODcgMCAwMTcuNSAyYTcuNDg3IDcuNDg3IDAgMDE1LjMwNCAyLjE5N0E3LjQ4MyA3LjQ4MyAwIDAxMTUgOS41YTcuNDg3IDcuNDg3IDAgMDEtLjU5IDIuOTIuNS41IDAgMDEtLjkyLS4zOWMuMTQtLjMzMy4yNTMtLjY3Ny4zMzYtMS4wM0gxMi41YS41LjUgMCAxMTAtMWgxLjQ4MWE2LjQ4MyA2LjQ4MyAwIDAwLTEuMTA0LTQuMTUzem0tNi4wNDEgNS4zMTdhLjk5My45OTMgMCAwMS0uMDEtMS40MDRjLjM4NC0uMzg1IDIuODgyLTIuMDAyIDMuMTQ5LTEuNzM1LjI2Ny4yNjctMS4zNSAyLjc2NS0xLjczNSAzLjE1YS45OTMuOTkzIDAgMDEtMS40MDQtLjAxelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaXNHYXVnZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVmlzR29hbCA9IGZ1bmN0aW9uIEV1aUljb25WaXNHb2FsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAuNzI1IDMuNjUzYTYgNiAwIDAxMi44NDcgNy41NzYuNS41IDAgMDEtLjkyOC0uMzcyIDUgNSAwIDEwLTkuMjkzLS4wMTQuNS41IDAgMDEtLjIxOC42MTlMMS4zOSAxMi40N2EuNS41IDAgMDEtLjcwOC0uMjNBNy45OSA3Ljk5IDAgMDEwIDlhOCA4IDAgMDExMS4yMTItNy4zMjkuNS41IDAgMDEuMjM0LjcwNGwtLjcyMSAxLjI3OHptLS45MzMtLjM4bC41LS44ODlhNyA3IDAgMDAtOC45MDIgOC45M2wuODg2LS41MTFhNiA2IDAgMDE3LjUxNi03LjUzek02LjczIDkuNDY3YTEuNzUgMS43NSAwIDExMi41MzkgMCAyIDIgMCAxMS0yLjUzOSAwek04IDEyLjAxM2ExIDEgMCAxMDAtMiAxIDEgMCAwMDAgMnptMC0zYS43NS43NSAwIDEwMC0xLjUuNzUuNzUgMCAwMDAgMS41elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaXNHb2FsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25WaXNMaW5lID0gZnVuY3Rpb24gRXVpSWNvblZpc0xpbmUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMi42NTQgMy40OGMuMjQ4LjIyNS41NTIuMzg5Ljg4OC40NjdMMTEuMjQgOS40M2ExLjk5IDEuOTkgMCAwMC0uOTE1LS40MDRsMi4zMy01LjU0N3pNOS4xNDYgOS4xOWEyLjAwOCAyLjAwOCAwIDAwLS43NjkuNjRsLTEuNTcyLTJjLjMxMS0uMTM2LjU4MS0uMzUuNzg1LS42MThsMS41NTYgMS45Nzh6TTUuNTgxIDcuOTU2bC0yLjEzNCA0LjI2OGEuNS41IDAgMDEtLjg5NC0uNDQ4bDIuMTM0LTQuMjY4Yy4yNS4yMi41NTcuMzc2Ljg5NC40NDh6TTEgMTVoMTMuNWEuNS41IDAgMTEwIDFILjVhLjUuNSAwIDAxLS41LS41di0xNGEuNS41IDAgMDExIDBWMTV6bTUtOGExIDEgMCAxMTAtMiAxIDEgMCAwMTAgMnptNCA1YTEgMSAwIDExMC0yIDEgMSAwIDAxMCAyem00LTlhMSAxIDAgMTEwLTIgMSAxIDAgMDEwIDJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblZpc0xpbmU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblZpc01hcENvb3JkaW5hdGUgPSBmdW5jdGlvbiBFdWlJY29uVmlzTWFwQ29vcmRpbmF0ZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuNSAxNUM1Ljc3IDE1IDIgOS45NyAyIDYuNTk1IDIgMy41MDcgNC40NiAxIDcuNSAxUzEzIDMuNTA3IDEzIDYuNTk1QzEzIDkuOTcgOS4yMyAxNSA3LjUgMTV6bTAtMWMuMjg2IDAgMS40OC0xLjA0NCAyLjQ1OS0yLjM1QzExLjIxOSA5Ljk2OSAxMiA4LjE1MyAxMiA2LjU5NiAxMiA0LjA1NSA5Ljk4MyAyIDcuNSAyUzMgNC4wNTUgMyA2LjU5NWMwIDEuNTU3Ljc4IDMuMzczIDIuMDQxIDUuMDU2QzYuMDIgMTIuOTU2IDcuMjE0IDE0IDcuNSAxNHptMC00Ljk5NmEyLjUgMi41IDAgMTEwLTUgMi41IDIuNSAwIDAxMCA1em0wLTFhMS41IDEuNSAwIDEwMC0zIDEuNSAxLjUgMCAwMDAgM3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmlzTWFwQ29vcmRpbmF0ZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVmlzTWFwUmVnaW9uID0gZnVuY3Rpb24gRXVpSWNvblZpc01hcFJlZ2lvbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuNSAyLjMwOXY4LjY5YS40OTkuNDk5IDAgMDEtLjAzMi4xNzZMOS41IDEyLjY5MVYzLjgwOWwtMy0xLjV6bS0xLS4wNEwyIDMuODI1djguOTA2bDMuNTI3LTEuNTY4YS41LjUgMCAwMS0uMDI3LS4xNjRWMi4yN3ptLjI3NC0xLjIxNmEuNDk4LjQ5OCAwIDAxLjQ3MS4wMWwzLjc2OCAxLjg4NCA0LjI4NC0xLjkwNEEuNS41IDAgMDExNSAxLjV2MTBhLjUuNSAwIDAxLS4yOTcuNDU3bC00LjUgMmEuNS41IDAgMDEtLjQyNy0uMDFsLTMuNzg5LTEuODk0LTQuMjgzIDEuOTA0YS41LjUgMCAwMS0uNzAzLS40NTd2LTEwYS41LjUgMCAwMS4yOTctLjQ1N2w0LjQ3Ni0xLjk5ek0xMC41IDMuODI1djguOTA2bDMuNS0xLjU1NlYyLjI3bC0zLjUgMS41NTZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblZpc01hcFJlZ2lvbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVmlzTWV0cmljID0gZnVuY3Rpb24gRXVpSWNvblZpc01ldHJpYyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuNTMyIDcuMzRhMi4xNjEgMi4xNjEgMCAxMTIuOTM2IDAgMi43NDYgMi43NDYgMCAxMS0yLjkzNiAwek0yIDBoMTJhMiAyIDAgMDEyIDJ2MTJhMiAyIDAgMDEtMiAySDJhMiAyIDAgMDEtMi0yVjJhMiAyIDAgMDEyLTJ6bTAgMWExIDEgMCAwMC0xIDF2MTJhMSAxIDAgMDAxIDFoMTJhMSAxIDAgMDAxLTFWMmExIDEgMCAwMC0xLTFIMnptNiA1LjkxNWExLjE2MSAxLjE2MSAwIDEwMC0yLjMyMiAxLjE2MSAxLjE2MSAwIDAwMCAyLjMyMnptMCA0LjQ5MmExLjc0NiAxLjc0NiAwIDEwMC0zLjQ5MiAxLjc0NiAxLjc0NiAwIDAwMCAzLjQ5MnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmlzTWV0cmljOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25WaXNQaWUgPSBmdW5jdGlvbiBFdWlJY29uVmlzUGllKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNi41IDlhLjUuNSAwIDAxLS41LS41VjMuMDIzQTUuNSA1LjUgMCAxMDExLjk3OCA5SDYuNXpNNyA4aDUuNWEuNS41IDAgMDEuNS41QTYuNSA2LjUgMCAxMTYuNSAyYS41LjUgMCAwMS41LjVWOHptMi02Ljk3MlY2aDQuOTcyQzEzLjY5NiAzLjU1MiAxMS40NDggMS4zMDQgOSAxLjAyOHpNMTQuNSA3aC02YS41LjUgMCAwMS0uNS0uNXYtNmEuNS41IDAgMDEuNS0uNUMxMS44NTMgMCAxNSAzLjE0NyAxNSA2LjVhLjUuNSAwIDAxLS41LjV6TTYuMTQ2IDguODU0YS41LjUgMCAxMS43MDgtLjcwOGw0IDRhLjUuNSAwIDAxLS43MDguNzA4bC00LTR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblZpc1BpZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVmlzVGFibGUgPSBmdW5jdGlvbiBFdWlJY29uVmlzVGFibGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNiAzdjExYTIgMiAwIDAxLTIgMkgyYTIgMiAwIDAxLTItMlYyYTIgMiAwIDAxMi0yaDEyYTIgMiAwIDAxMiAydjF6bS0xIDBWMmExIDEgMCAwMC0xLTFIMmExIDEgMCAwMC0xIDF2MWgxNHptMCAxSDF2MTBhMSAxIDAgMDAxIDFoMTJhMSAxIDAgMDAxLTFWNHpNNC41IDZhLjUuNSAwIDAxMCAxSDIuNDk2YS41LjUgMCAxMTAtMUg0LjV6bTkgMGEuNS41IDAgMTEwIDFoLTZhLjUuNSAwIDAxMC0xaDZ6bS05IDNhLjUuNSAwIDAxMCAxSDIuNDk2YS41LjUgMCAxMTAtMUg0LjV6bTkgMGEuNS41IDAgMTEwIDFoLTZhLjUuNSAwIDAxMC0xaDZ6bS05IDNhLjUuNSAwIDExMCAxSDIuNDk2YS41LjUgMCAxMTAtMUg0LjV6bTkgMGEuNS41IDAgMTEwIDFoLTZhLjUuNSAwIDExMC0xaDZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblZpc1RhYmxlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25WaXNUYWdDbG91ZCA9IGZ1bmN0aW9uIEV1aUljb25WaXNUYWdDbG91ZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEuNSA5LjA0N2EuNS41IDAgMTAwIDFoMTNhLjUuNSAwIDAwMC0xaC0xM3ptMC0xaDEzYTEuNSAxLjUgMCAwMTAgM2gtMTNhMS41IDEuNSAwIDAxMC0zek0xMCAxM2EuNS41IDAgMTEwIDFINGEuNS41IDAgMTEwLTFoNnpNOC4wMDEgMi4wMTVhLjUuNSAwIDExLS4wMDIgMWwtNS0uMDE1YS41LjUgMCAxMS4wMDMtMWw1IC4wMTV6TTE0IDVhLjUuNSAwIDExMCAxSDZhLjUuNSAwIDAxMC0xaDh6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblZpc1RhZ0Nsb3VkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25WaXNUZXh0ID0gZnVuY3Rpb24gRXVpSWNvblZpc1RleHQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04LjUgNXY2aDJhLjUuNSAwIDExMCAxaC01YS41LjUgMCAxMTAtMWgyVjVINXYuNWEuNS41IDAgMDEtMSAwdi0xYS41LjUgMCAwMS41LS41aDdhLjUuNSAwIDAxLjUuNTFsLS4wMjEgMWEuNS41IDAgMTEtMS0uMDJsLjAxLS40OUg4LjV6TTEgMTVoMS41YS41LjUgMCAxMTAgMWgtMmEuNS41IDAgMDEtLjUtLjV2LTEuOTk2YS41LjUgMCAwMTEgMFYxNXpNMSAxdjEuNDk3YS41LjUgMCAxMS0xIDBWLjVBLjUuNSAwIDAxLjUgMGgyYS41LjUgMCAwMTAgMUgxem0xNCAwaC0xLjQ5NWEuNS41IDAgMDEwLTFIMTUuNWEuNS41IDAgMDEuNS41djJhLjUuNSAwIDExLTEgMFYxem0wIDE0di0xLjVhLjUuNSAwIDExMSAwdjJhLjUuNSAwIDAxLS41LjVoLTJhLjUuNSAwIDExMC0xSDE1ek0wIDYuNWEuNS41IDAgMDExIDB2M2EuNS41IDAgMDEtMSAwdi0zek05LjUgMGEuNS41IDAgMDEwIDFoLTNhLjUuNSAwIDAxMC0xaDN6TTE1IDYuNWEuNS41IDAgMTExIDB2M2EuNS41IDAgMTEtMSAwdi0zek05LjUgMTVhLjUuNSAwIDExMCAxaC0zYS41LjUgMCAxMTAtMWgzelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaXNUZXh0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25WaXNUaW1lbGlvbiA9IGZ1bmN0aW9uIEV1aUljb25WaXNUaW1lbGlvbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEwLjg4NCAxLjgwMmMxLjE3MS0uMzA5IDIuMjItLjI0IDMuMTAzLjA3LjI5NS4xMDQuNTA3LjIxMi42MzEuMjkybC4xNjQuMTA2LjA0OC4xODhjLjI3OCAxLjA2Ni4yIDIuMTc1LS4wOTEgMy4yM2E2LjcyOCA2LjcyOCAwIDAxLS4xOTQuNTk4Yy4wMzUuMTIuMDc0LjI3My4xMTIuNDU0LjIyNyAxLjA2NS4yNDcgMi4xOTMtLjA4IDMuMjY3YTQuODU1IDQuODU1IDAgMDEtLjUzNCAxLjE3NWMtLjMyNC41MTQtLjcuOTU0LTEuMTE3IDEuMzIzLS44MDYuNzEyLTEuNjE2IDEuMDcxLTIuMjM1IDEuMjA2LS4xNC4xNzktLjM0Ni4zODEtLjYyOS41NzgtLjY0My40NDctMS40OTMuNzExLTIuNTYxLjcxMS0xLjA3IDAtMS45Mi0uMjY0LTIuNTYzLS43MTFhMi44NzQgMi44NzQgMCAwMS0uNjI5LS41NzhjLS42MTgtLjEzNC0xLjQyOC0uNDkzLTIuMjMyLTEuMjAzLS40MTktLjM3LS43OTYtLjgxLTEuMTItMS4zMjZhNC44NTUgNC44NTUgMCAwMS0uNTM0LTEuMTc1Qy4wOTYgOC45MzMuMTE2IDcuODA1LjM0MyA2Ljc0YTYuNzQgNi43NCAwIDAxLjExMi0uNDU0IDYuNzI4IDYuNzI4IDAgMDEtLjE5NC0uNTk4Qy0uMDMgNC42MzMtLjEwOCAzLjUyNC4xNyAyLjQ1OGwuMDQ4LS4xODguMTY0LS4xMDZjLjEyNC0uMDguMzM2LS4xODguNjMtLjI5MS44ODUtLjMxIDEuOTMzLS4zOCAzLjEwNC0uMDcuMTg0LS4xMDguNDM0LS4yMy43NDgtLjM0OEM1LjYxNiAxLjE3IDYuNDk3IDEgNy41MDEgMWMxLjAwMiAwIDEuODgzLjE3IDIuNjM0LjQ1NS4zMTUuMTE5LjU2NS4yNC43NS4zNDd6bTMuMDI3IDEuMTE2YTMuMTMgMy4xMyAwIDAwLS4yNTUtLjEwMmMtLjc0OS0uMjYzLTEuNjYtLjMwOS0yLjcwOC4wMDdsLS4yMzguMDcyLS4yMDEtLjE0N2MtLjExLS4wOC0uMzU0LS4yMTctLjcyOC0uMzU4QzkuMTQgMi4xNDcgOC4zOCAyIDcuNTAxIDJjLS44OCAwLTEuNjQxLjE0Ny0yLjI4My4zOS0uMzczLjE0MS0uNjE3LjI3OC0uNzI3LjM1OGwtLjIuMTQ3LS4yNC0uMDcyYy0xLjA0OC0uMzE2LTEuOTU4LS4yNy0yLjcwNy0uMDA3YTMuMTMgMy4xMyAwIDAwLS4yNTUuMTAyYy0uMTY3LjgxMi0uMDk0IDEuNjc0LjEzNiAyLjUwMy4wODQuMzAzLjE2Ni41MjQuMjE3LjYzN2wuMDgyLjE4Mi0uMDY2LjE5Yy0uMDMyLjA5LS4wODQuMjctLjEzNy41MTgtLjE5NS45MTQtLjIxMiAxLjg4LjA1OSAyLjc2Ny4xLjMzMy4yNDEuNjQ1LjQyMy45MzUuMjczLjQzNC41ODguODAxLjkzNiAxLjEwOC40MzQuMzgzLjg5OC42NTUgMS4zNi44MzQuMjcuMTA1LjQ3NC4xNTUuNTc1LjE3bC4yNDguMDM0LjEyLjIyYy4wNTEuMDkxLjE5OS4yNjYuNDY2LjQ1Mi40NzYuMzMgMS4xMjcuNTMyIDEuOTkzLjUzMi44NjUgMCAxLjUxNi0uMjAyIDEuOTktLjUzMi4yNjgtLjE4Ni40MTYtLjM2LjQ2Ni0uNDUybC4xMjEtLjIyLjI0OC0uMDM0Yy4xMDEtLjAxNS4zMDUtLjA2NS41NzYtLjE3LjQ2Mi0uMTguOTI3LS40NTIgMS4zNjItLjgzNi4zNDctLjMwNy42Ni0uNjc0LjkzMy0xLjEwNy4xODItLjI5LjMyMi0uNjAxLjQyMy0uOTM0LjI3MS0uODg3LjI1NC0xLjg1My4wNi0yLjc2N2E0LjU5NyA0LjU5NyAwIDAwLS4xMzgtLjUxOWwtLjA2Ni0uMTg5LjA4Mi0uMTgyYy4wNS0uMTEzLjEzMy0uMzM0LjIxNy0uNjM3LjIzLS44MjkuMzAzLTEuNjkxLjEzNi0yLjUwM3pNNSA1LjAwOGMuMDA0LjE4MS0uMDQ4LjM2NC0uMjY0LjYxNi0uNDI4LjQ5OC0uOTg1LjQ4OC0xLjQzMS4wNDktLjMyNi0uMzIxLS4zMjUtLjczMi0uMjktMS4wNDcuMDg1LS43Ni43NDgtLjcyMiAxLjI2Mi0uNDQuNDg2LjI3LjcxNy42MTYuNzIzLjgyM3ptNSAwYy4wMDYtLjIwNi4yMzctLjU1My43MjQtLjgyMS41MTQtLjI4MyAxLjE3Ni0uMzIxIDEuMjYuNDQuMDM2LjMxNC4wMzguNzI1LS4yODggMS4wNDYtLjQ0Ni40NC0xLjAwNS40NDktMS40MzMtLjA1LS4yMTctLjI1LS4yNjctLjQzNC0uMjYzLS42MTR6TTcuNSA4Yy0uNTAzIDAtLjk3Ni0uMjQtMS4zNzUtLjY3Mi0uMzk4LS40MzItLjU5Mi0xLjEyNiAwLTEuNTI4LjM4NC0uMjU5IDEuMDgyLS4zIDEuMzc1LS4zLjI5NCAwIC45OTEuMDQxIDEuMzc1LjMuNTkzLjQwMi4zOTcgMS4wOTYgMCAxLjUyOEM4LjQ3NyA3Ljc2IDguMDAyIDggNy41IDh6bTAgMWMuODA4IDAgMi42NTYuOTk0IDIuNDkgMi4wNzQtLjE1My45OTMtMi4xMTQuOTI1LTIuNDkuOTI1LS4zNzQgMC0yLjMzNi4wNjgtMi40OS0uOTI1QzQuODQ1IDkuOTk0IDYuNjkzIDkgNy41IDl6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblZpc1RpbWVsaW9uOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25WaXNWZWdhID0gZnVuY3Rpb24gRXVpSWNvblZpc1ZlZ2EoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yLjQxNCA4LjAzNkw0Ljg5IDEwLjUxYS41LjUgMCAwMS0uNzA3LjcwOEwxLjM1NCA4LjM4OWEuNS41IDAgMDEwLS43MDdsMi44MjgtMi44MjhhLjUuNSAwIDExLjcwNy43MDdMMi40MTQgOC4wMzZ6bTguNzY4IDIuNDc0bDIuNDc1LTIuNDc0LTIuNDc1LTIuNDc1YS41LjUgMCAwMS43MDctLjcwN2wyLjgyOSAyLjgyOGEuNS41IDAgMDEwIC43MDdsLTIuODI5IDIuODI5YS41LjUgMCAxMS0uNzA3LS43MDh6TTguNTU5IDIuNTA2YS41LjUgMCAwMS45ODEuMTlMNy40NDEgMTMuNDk0YS41LjUgMCAwMS0uOTgxLS4xOUw4LjU1OSAyLjUwNnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmlzVmVnYTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVmlzVmlzdWFsQnVpbGRlciA9IGZ1bmN0aW9uIEV1aUljb25WaXNWaXN1YWxCdWlsZGVyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS44MzcgN2MuMTEuOTMuMTY1IDEuODg2LjE2NSAyLjg2OVYxMy41YS41LjUgMCAxMS0xIDBWOS44NjlBMjMuMyAyMy4zIDAgMDA4LjgzIDdINy4yOWMtLjE5NSAxLjA0LS4yOTIgMS45ODUtLjI5MiAyLjgzNVYxMy41YS41LjUgMCAxMS0xIDBWOS44MzVjMC0uODY0LjA5Mi0xLjgwOS4yNzYtMi44MzVIMi41YS41LjUgMCAwMS0uNDk1LS41N2MuMjg1LTIuMDIzIDEuNjI2LTMuMzU4IDMuOTMxLTMuOTYgMS45NjctLjUxNCA0LjIyLS42MDYgNi43NTYtLjI3OEExLjUgMS41IDAgMDExNCAzLjY3OVY1LjVBMS41IDEuNSAwIDAxMTIuNSA3SDkuODM3em0tLjU2OS0xSDEyLjVhLjUuNSAwIDAwLjUtLjVWMy42OGEuNS41IDAgMDAtLjQzNi0uNDk3Yy0yLjQxNi0uMzExLTQuNTQtLjIyNS02LjM3NS4yNTRDNC40OTQgMy44OCAzLjQ5MSA0LjcyNCAzLjExNyA2SDkuMjY4ek0yIDEwdjMuNWEuNS41IDAgMTEtMSAwdi00YS41LjUgMCAwMS41LS41aDNhLjUuNSAwIDAxLjUuNXY0YS41LjUgMCAxMS0xIDBWMTBIMnptMTAgMy41YS41LjUgMCAxMS0xIDB2LTJhLjUuNSAwIDAxLjUtLjVoM2EuNS41IDAgMDEuNS41djJhLjUuNSAwIDExLTEgMFYxMmgtMnYxLjV6TTEuMDE2IDE2LjAyNmEuNS41IDAgMDEwLTFIMTVhLjUuNSAwIDExMCAxSDEuMDE2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaXNWaXN1YWxCdWlsZGVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Xb3JkV3JhcCA9IGZ1bmN0aW9uIEV1aUljb25Xb3JkV3JhcChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIgM2gxMnYxSDJWM3ptMCA4aDZ2MUgydi0xelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMiA3aDkuNXYuNVY3aC4wMzlsLjA4My4wMDVhMi45NTggMi45NTggMCAwMTEuMTAyLjI5OGMuMzA5LjE1NC42MzMuMzk0Ljg4Ljc2My4yNDguMzczLjM5Ni44NDcuMzk2IDEuNDM0IDAgLjU4OC0uMTQ4IDEuMDYxLS4zOTYgMS40MzRhMi4yNTcgMi4yNTcgMCAwMS0uODguNzYzIDIuOTU3IDIuOTU3IDAgMDEtMS4xODUuMzAyaC0uMDI1bC0uMDA5LjAwMWgtLjAwM3MtLjAwMiAwLS4wMDItLjV2LjVIMTF2MWwtMi0xLjUgMi0xLjV2MWguNTA2bC4wNDQtLjAwM2ExLjk1OSAxLjk1OSAwIDAwLjcyNi0uMTk1Yy4xOTEtLjA5NS4zNjctLjIzLjQ5NS0uNDIzLjEyNy0uMTkuMjI5LS40NjYuMjI5LS44NzlzLS4xMDItLjY4OS0uMjI5LS44NzlhMS4yNTYgMS4yNTYgMCAwMC0uNDk1LS40MjQgMS45NTggMS45NTggMCAwMC0uNzctLjE5N0gyVjd6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbldvcmRXcmFwOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Xb3JkV3JhcERpc2FibGVkID0gZnVuY3Rpb24gRXVpSWNvbldvcmRXcmFwRGlzYWJsZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNCAzLjVMMTIgMnYxSDJ2MWgxMHYxbDItMS41ek0xMiA5VjhIMlY3aDEwVjZsMiAxLjVMMTIgOXptMCAzdjFsMi0xLjUtMi0xLjV2MUgydjFoMTB6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbldvcmRXcmFwRGlzYWJsZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbldyZW5jaCA9IGZ1bmN0aW9uIEV1aUljb25XcmVuY2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02LjkxOCA5Ljc0Nmw0LjUzNyA0LjUzN2EyIDIgMCAxMDIuODI4LTIuODI5bC0zLjE1Ny0zLjE1NmEuNS41IDAgMDEuNzA4LS43MDhsMy4xNTYgMy4xNTdhMyAzIDAgMTEtNC4yNDMgNC4yNDNsLTQuOTQ5LTQuOTVhNS4wMDEgNS4wMDEgMCAwMS01LjIyLTcuMTA2LjUuNSAwIDAxLjgwNS0uMTM4TDMuNjc2IDUuMDlhMSAxIDAgMTAxLjQxNS0xLjQxNEwyLjc5NyAxLjM4MmEuNS41IDAgMDEuMTM4LS44MDUgNS4wMDEgNS4wMDEgMCAxMTMuOTgzIDkuMTY5ek0xLjIyNiA0LjA1NGE0LjAwMiA0LjAwMiAwIDAwNi42OTMgMy44NjUgNCA0IDAgMDAtMy44NjUtNi42OTNsMS43NDQgMS43NDNhMiAyIDAgMTEtMi44MjkgMi44MjhMMS4yMjYgNC4wNTR6bTEwLjIyOSA4LjgxNGExIDEgMCAxMTEuNDE0LTEuNDE0IDEgMSAwIDAxLTEuNDE0IDEuNDE0elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25XcmVuY2g7IiwgImltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMCBmcm9tICcuL2Fzc2V0cy9hY2Nlc3NpYmlsaXR5LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMSBmcm9tICcuL2Fzc2V0cy9hZ2dyZWdhdGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyIGZyb20gJy4vYXNzZXRzL2FsZXJ0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMyBmcm9tICcuL2Fzc2V0cy9hbmFseXplRXZlbnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0IGZyb20gJy4vYXNzZXRzL2FuYWx5emVfZXZlbnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1IGZyb20gJy4vYXNzZXRzL2Fubm90YXRpb24uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2IGZyb20gJy4vYXNzZXRzL2FwbV90cmFjZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcgZnJvbSAnLi9hc3NldHMvYXBwX2FkZF9kYXRhLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOCBmcm9tICcuL2Fzc2V0cy9hcHBfYWR2YW5jZWRfc2V0dGluZ3MuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5IGZyb20gJy4vYXNzZXRzL2FwcF9hZ2VudC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEwIGZyb20gJy4vYXNzZXRzL2FwcF9hcG0uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMSBmcm9tICcuL2Fzc2V0cy9hcHBfYXBwX3NlYXJjaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEyIGZyb20gJy4vYXNzZXRzL2FwcF9hdWRpdGJlYXQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMyBmcm9tICcuL2Fzc2V0cy9hcHBfY2FudmFzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTQgZnJvbSAnLi9hc3NldHMvYXBwX2Nhc2VzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTUgZnJvbSAnLi9hc3NldHMvYXBwX2NvZGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNiBmcm9tICcuL2Fzc2V0cy9hcHBfY29uc29sZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE3IGZyb20gJy4vYXNzZXRzL2FwcF9jcm9zc19jbHVzdGVyX3JlcGxpY2F0aW9uLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTggZnJvbSAnLi9hc3NldHMvYXBwX2Rhc2hib2FyZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE5IGZyb20gJy4vYXNzZXRzL2FwcF9kZXZ0b29scy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIwIGZyb20gJy4vYXNzZXRzL2FwcF9kaXNjb3Zlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIxIGZyb20gJy4vYXNzZXRzL2FwcF9lbXMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMiBmcm9tICcuL2Fzc2V0cy9hcHBfZmlsZWJlYXQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMyBmcm9tICcuL2Fzc2V0cy9hcHBfZmxlZXQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNCBmcm9tICcuL2Fzc2V0cy9hcHBfZ2lzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjUgZnJvbSAnLi9hc3NldHMvYXBwX2dyYXBoLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjYgZnJvbSAnLi9hc3NldHMvYXBwX2dyb2suanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNyBmcm9tICcuL2Fzc2V0cy9hcHBfaGVhcnRiZWF0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjggZnJvbSAnLi9hc3NldHMvYXBwX2luZGV4X21hbmFnZW1lbnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyOSBmcm9tICcuL2Fzc2V0cy9hcHBfaW5kZXhfcGF0dGVybi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMwIGZyb20gJy4vYXNzZXRzL2FwcF9pbmRleF9yb2xsdXAuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMSBmcm9tICcuL2Fzc2V0cy9hcHBfbGVucy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMyIGZyb20gJy4vYXNzZXRzL2FwcF9sb2dzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzMgZnJvbSAnLi9hc3NldHMvYXBwX21hbmFnZW1lbnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNCBmcm9tICcuL2Fzc2V0cy9hcHBfbWV0cmljYmVhdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM1IGZyb20gJy4vYXNzZXRzL2FwcF9tZXRyaWNzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzYgZnJvbSAnLi9hc3NldHMvYXBwX21sLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzcgZnJvbSAnLi9hc3NldHMvYXBwX21vbml0b3JpbmcuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzOCBmcm9tICcuL2Fzc2V0cy9hcHBfbm90ZWJvb2suanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzOSBmcm9tICcuL2Fzc2V0cy9hcHBfcGFja2V0YmVhdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQwIGZyb20gJy4vYXNzZXRzL2FwcF9waXBlbGluZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQxIGZyb20gJy4vYXNzZXRzL2FwcF9yZWNlbnRseV92aWV3ZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MiBmcm9tICcuL2Fzc2V0cy9hcHBfcmVwb3J0aW5nLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDMgZnJvbSAnLi9hc3NldHMvYXBwX3NhdmVkX29iamVjdHMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NCBmcm9tICcuL2Fzc2V0cy9hcHBfc2VhcmNoX3Byb2ZpbGVyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDUgZnJvbSAnLi9hc3NldHMvYXBwX3NlY3VyaXR5LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDYgZnJvbSAnLi9hc3NldHMvYXBwX3NlY3VyaXR5X2FuYWx5dGljcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ3IGZyb20gJy4vYXNzZXRzL2FwcF9zcGFjZXMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0OCBmcm9tICcuL2Fzc2V0cy9hcHBfc3FsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDkgZnJvbSAnLi9hc3NldHMvYXBwX3RpbWVsaW9uLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTAgZnJvbSAnLi9hc3NldHMvYXBwX3VwZ3JhZGVfYXNzaXN0YW50LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTEgZnJvbSAnLi9hc3NldHMvYXBwX3VwdGltZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUyIGZyb20gJy4vYXNzZXRzL2FwcF91c2Vyc19yb2xlcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUzIGZyb20gJy4vYXNzZXRzL2FwcF92aXN1YWxpemUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NCBmcm9tICcuL2Fzc2V0cy9hcHBfd2F0Y2hlcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU1IGZyb20gJy4vYXNzZXRzL2FwcF93b3JrcGxhY2Vfc2VhcmNoLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTYgZnJvbSAnLi9hc3NldHMvYXBwcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU3IGZyb20gJy4vYXNzZXRzL2Fycm93RW5kLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTggZnJvbSAnLi9hc3NldHMvYXJyb3dTdGFydC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU5IGZyb20gJy4vYXNzZXRzL2Fycm93X2Rvd24uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MCBmcm9tICcuL2Fzc2V0cy9hcnJvd19sZWZ0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjEgZnJvbSAnLi9hc3NldHMvYXJyb3dfcmlnaHQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MiBmcm9tICcuL2Fzc2V0cy9hcnJvd191cC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYzIGZyb20gJy4vYXNzZXRzL2FzdGVyaXNrLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjQgZnJvbSAnLi9hc3NldHMvYmVha2VyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjUgZnJvbSAnLi9hc3NldHMvYmVsbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY2IGZyb20gJy4vYXNzZXRzL2JlbGxTbGFzaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY3IGZyb20gJy4vYXNzZXRzL2JvbHQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2OCBmcm9tICcuL2Fzc2V0cy9ib3hlc19ob3Jpem9udGFsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjkgZnJvbSAnLi9hc3NldHMvYm94ZXNfdmVydGljYWwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MCBmcm9tICcuL2Fzc2V0cy9icmFuY2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MSBmcm9tICcuL2Fzc2V0cy9icmFuY2hVc2VyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzIgZnJvbSAnLi9hc3NldHMvYnJvb20uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MyBmcm9tICcuL2Fzc2V0cy9icnVzaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc0IGZyb20gJy4vYXNzZXRzL2J1Zy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc1IGZyb20gJy4vYXNzZXRzL2J1bGxzZXllLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzYgZnJvbSAnLi9hc3NldHMvY2FsZW5kYXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NyBmcm9tICcuL2Fzc2V0cy9jaGVjay5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc4IGZyb20gJy4vYXNzZXRzL2NoZWNrSW5DaXJjbGVGaWxsZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3OSBmcm9tICcuL2Fzc2V0cy9jaGVlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgwIGZyb20gJy4vYXNzZXRzL2Nsb2NrLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODEgZnJvbSAnLi9hc3NldHMvY2xvdWREcml6emxlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODIgZnJvbSAnLi9hc3NldHMvY2xvdWRTdG9ybXkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MyBmcm9tICcuL2Fzc2V0cy9jbG91ZFN1bm55LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODQgZnJvbSAnLi9hc3NldHMvY2x1c3Rlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg1IGZyb20gJy4vYXNzZXRzL2NvbG9yLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODYgZnJvbSAnLi9hc3NldHMvY29tcHV0ZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg3IGZyb20gJy4vYXNzZXRzL2NvbnNvbGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4OCBmcm9tICcuL2Fzc2V0cy9jb250YWluZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4OSBmcm9tICcuL2Fzc2V0cy9jb250aW51aXR5QWJvdmUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MCBmcm9tICcuL2Fzc2V0cy9jb250aW51aXR5QWJvdmVCZWxvdy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkxIGZyb20gJy4vYXNzZXRzL2NvbnRpbnVpdHlCZWxvdy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkyIGZyb20gJy4vYXNzZXRzL2NvbnRpbnVpdHlXaXRoaW4uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MyBmcm9tICcuL2Fzc2V0cy9jb250cm9sc19ob3Jpem9udGFsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTQgZnJvbSAnLi9hc3NldHMvY29udHJvbHNfdmVydGljYWwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5NSBmcm9tICcuL2Fzc2V0cy9jb3B5LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTYgZnJvbSAnLi9hc3NldHMvY29weV9jbGlwYm9hcmQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5NyBmcm9tICcuL2Fzc2V0cy9jcm9zcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk4IGZyb20gJy4vYXNzZXRzL2Nyb3NzSW5BQ2lyY2xlRmlsbGVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTkgZnJvbSAnLi9hc3NldHMvY3Jvc3NoYWlycy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEwMCBmcm9tICcuL2Fzc2V0cy9jdXJyZW5jeS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEwMSBmcm9tICcuL2Fzc2V0cy9jdXQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDIgZnJvbSAnLi9hc3NldHMvZGF0YWJhc2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDMgZnJvbSAnLi9hc3NldHMvZGVza3RvcC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEwNCBmcm9tICcuL2Fzc2V0cy9kb2N1bWVudC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEwNSBmcm9tICcuL2Fzc2V0cy9kb2N1bWVudEVkaXQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDYgZnJvbSAnLi9hc3NldHMvZG9jdW1lbnRhdGlvbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEwNyBmcm9tICcuL2Fzc2V0cy9kb2N1bWVudHMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDggZnJvbSAnLi9hc3NldHMvZG90LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTA5IGZyb20gJy4vYXNzZXRzL2RvdWJsZUFycm93TGVmdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTExMCBmcm9tICcuL2Fzc2V0cy9kb3VibGVBcnJvd1JpZ2h0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTExIGZyb20gJy4vYXNzZXRzL2Rvd25sb2FkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTEyIGZyb20gJy4vYXNzZXRzL2VkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTEzIGZyb20gJy4vYXNzZXRzL2VkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTExNCBmcm9tICcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25Cb3R0b20uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMTUgZnJvbSAnLi9hc3NldHMvZWRpdG9ySXRlbUFsaWduQ2VudGVyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTE2IGZyb20gJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnbkxlZnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMTcgZnJvbSAnLi9hc3NldHMvZWRpdG9ySXRlbUFsaWduTWlkZGxlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTE4IGZyb20gJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnblJpZ2h0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTE5IGZyb20gJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnblRvcC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEyMCBmcm9tICcuL2Fzc2V0cy9lZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMjEgZnJvbSAnLi9hc3NldHMvZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEyMiBmcm9tICcuL2Fzc2V0cy9lZGl0b3JQb3NpdGlvblRvcExlZnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMjMgZnJvbSAnLi9hc3NldHMvZWRpdG9yUG9zaXRpb25Ub3BSaWdodC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEyNCBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfYWxpZ25fY2VudGVyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTI1IGZyb20gJy4vYXNzZXRzL2VkaXRvcl9hbGlnbl9sZWZ0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTI2IGZyb20gJy4vYXNzZXRzL2VkaXRvcl9hbGlnbl9yaWdodC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEyNyBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfYm9sZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEyOCBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfY2hlY2tsaXN0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTI5IGZyb20gJy4vYXNzZXRzL2VkaXRvcl9jb2RlX2Jsb2NrLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTMwIGZyb20gJy4vYXNzZXRzL2VkaXRvcl9jb21tZW50LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTMxIGZyb20gJy4vYXNzZXRzL2VkaXRvcl9oZWFkaW5nLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTMyIGZyb20gJy4vYXNzZXRzL2VkaXRvcl9pdGFsaWMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMzMgZnJvbSAnLi9hc3NldHMvZWRpdG9yX2xpbmsuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMzQgZnJvbSAnLi9hc3NldHMvZWRpdG9yX29yZGVyZWRfbGlzdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEzNSBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfcmVkby5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEzNiBmcm9tICcuL2Fzc2V0cy9lZGl0b3Jfc3RyaWtlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTM3IGZyb20gJy4vYXNzZXRzL2VkaXRvcl90YWJsZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEzOCBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfdW5kZXJsaW5lLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTM5IGZyb20gJy4vYXNzZXRzL2VkaXRvcl91bmRvLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTQwIGZyb20gJy4vYXNzZXRzL2VkaXRvcl91bm9yZGVyZWRfbGlzdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE0MSBmcm9tICcuL2Fzc2V0cy9lbWFpbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE0MiBmcm9tICcuL2Fzc2V0cy9lbXB0eS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE0MyBmcm9tICcuL2Fzc2V0cy9lcWwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNDQgZnJvbSAnLi9hc3NldHMvZXJhc2VyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTQ1IGZyb20gJy4vYXNzZXRzL2V4aXQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNDYgZnJvbSAnLi9hc3NldHMvZXhwYW5kLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTQ3IGZyb20gJy4vYXNzZXRzL2V4cGFuZE1pbmkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNDggZnJvbSAnLi9hc3NldHMvZXhwb3J0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTQ5IGZyb20gJy4vYXNzZXRzL2V5ZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE1MCBmcm9tICcuL2Fzc2V0cy9leWVfY2xvc2VkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTUxIGZyb20gJy4vYXNzZXRzL2ZhY2VfaGFwcHkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNTIgZnJvbSAnLi9hc3NldHMvZmFjZV9uZXV0cmFsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTUzIGZyb20gJy4vYXNzZXRzL2ZhY2Vfc2FkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTU0IGZyb20gJy4vYXNzZXRzL2ZpbHRlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE1NSBmcm9tICcuL2Fzc2V0cy9mbGFnLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTU2IGZyb20gJy4vYXNzZXRzL2ZvbGQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNTcgZnJvbSAnLi9hc3NldHMvZm9sZGVyX2NoZWNrLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTU4IGZyb20gJy4vYXNzZXRzL2ZvbGRlcl9jbG9zZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNTkgZnJvbSAnLi9hc3NldHMvZm9sZGVyX2V4Y2xhbWF0aW9uLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTYwIGZyb20gJy4vYXNzZXRzL2ZvbGRlcl9vcGVuLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTYxIGZyb20gJy4vYXNzZXRzL2ZyYW1lTmV4dC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE2MiBmcm9tICcuL2Fzc2V0cy9mcmFtZVByZXZpb3VzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTYzIGZyb20gJy4vYXNzZXRzL2Z1bGxTY3JlZW5FeGl0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTY0IGZyb20gJy4vYXNzZXRzL2Z1bGxfc2NyZWVuLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTY1IGZyb20gJy4vYXNzZXRzL2Z1bmN0aW9uLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTY2IGZyb20gJy4vYXNzZXRzL2dlYXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNjcgZnJvbSAnLi9hc3NldHMvZ2xhc3Nlcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE2OCBmcm9tICcuL2Fzc2V0cy9nbG9iZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE2OSBmcm9tICcuL2Fzc2V0cy9ncmFiLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTcwIGZyb20gJy4vYXNzZXRzL2dyYWJfaG9yaXpvbnRhbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE3MSBmcm9tICcuL2Fzc2V0cy9ncmlkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTcyIGZyb20gJy4vYXNzZXRzL2hlYXJ0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTczIGZyb20gJy4vYXNzZXRzL2hlYXRtYXAuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNzQgZnJvbSAnLi9hc3NldHMvaGVscC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE3NSBmcm9tICcuL2Fzc2V0cy9ob21lLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTc2IGZyb20gJy4vYXNzZXRzL2lJbkNpcmNsZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE3NyBmcm9tICcuL2Fzc2V0cy9pbWFnZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE3OCBmcm9tICcuL2Fzc2V0cy9pbXBvcnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNzkgZnJvbSAnLi9hc3NldHMvaW5kZXhfY2xvc2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxODAgZnJvbSAnLi9hc3NldHMvaW5kZXhfZWRpdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE4MSBmcm9tICcuL2Fzc2V0cy9pbmRleF9mbHVzaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE4MiBmcm9tICcuL2Fzc2V0cy9pbmRleF9tYXBwaW5nLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTgzIGZyb20gJy4vYXNzZXRzL2luZGV4X29wZW4uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxODQgZnJvbSAnLi9hc3NldHMvaW5kZXhfcnVudGltZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE4NSBmcm9tICcuL2Fzc2V0cy9pbmRleF9zZXR0aW5ncy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE4NiBmcm9tICcuL2Fzc2V0cy9pbnB1dE91dHB1dC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE4NyBmcm9tICcuL2Fzc2V0cy9pbnNwZWN0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTg4IGZyb20gJy4vYXNzZXRzL2ludmVydC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE4OSBmcm9tICcuL2Fzc2V0cy9pcC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE5MCBmcm9tICcuL2Fzc2V0cy9rZXlib2FyZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE5MSBmcm9tICcuL2Fzc2V0cy9rcWxfZmllbGQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxOTIgZnJvbSAnLi9hc3NldHMva3FsX2Z1bmN0aW9uLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTkzIGZyb20gJy4vYXNzZXRzL2txbF9vcGVyYW5kLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTk0IGZyb20gJy4vYXNzZXRzL2txbF9zZWxlY3Rvci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE5NSBmcm9tICcuL2Fzc2V0cy9rcWxfdmFsdWUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxOTYgZnJvbSAnLi9hc3NldHMva3ViZXJuZXRlc05vZGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxOTcgZnJvbSAnLi9hc3NldHMva3ViZXJuZXRlc1BvZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE5OCBmcm9tICcuL2Fzc2V0cy9sYXllcnMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxOTkgZnJvbSAnLi9hc3NldHMvbGV0dGVyaW5nLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjAwIGZyb20gJy4vYXNzZXRzL2xpbmVEYXNoZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMDEgZnJvbSAnLi9hc3NldHMvbGluZURvdHRlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIwMiBmcm9tICcuL2Fzc2V0cy9saW5lU29saWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMDMgZnJvbSAnLi9hc3NldHMvbGluay5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIwNCBmcm9tICcuL2Fzc2V0cy9saXN0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjA1IGZyb20gJy4vYXNzZXRzL2xpc3RfYWRkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjA2IGZyb20gJy4vYXNzZXRzL2xvY2suanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMDcgZnJvbSAnLi9hc3NldHMvbG9ja09wZW4uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMDggZnJvbSAnLi9hc3NldHMvbG9nb19hZXJvc3Bpa2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMDkgZnJvbSAnLi9hc3NldHMvbG9nb19hcGFjaGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMTAgZnJvbSAnLi9hc3NldHMvbG9nb19hcHBfc2VhcmNoLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjExIGZyb20gJy4vYXNzZXRzL2xvZ29fYXdzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjEyIGZyb20gJy4vYXNzZXRzL2xvZ29fYXdzX21vbm8uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMTMgZnJvbSAnLi9hc3NldHMvbG9nb19henVyZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIxNCBmcm9tICcuL2Fzc2V0cy9sb2dvX2F6dXJlX21vbm8uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMTUgZnJvbSAnLi9hc3NldHMvbG9nb19iZWF0cy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIxNiBmcm9tICcuL2Fzc2V0cy9sb2dvX2J1c2luZXNzX2FuYWx5dGljcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIxNyBmcm9tICcuL2Fzc2V0cy9sb2dvX2NlcGguanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMTggZnJvbSAnLi9hc3NldHMvbG9nb19jbG91ZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIxOSBmcm9tICcuL2Fzc2V0cy9sb2dvX2Nsb3VkX2VjZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIyMCBmcm9tICcuL2Fzc2V0cy9sb2dvX2NvZGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMjEgZnJvbSAnLi9hc3NldHMvbG9nb19jb2Rlc2FuZGJveC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIyMiBmcm9tICcuL2Fzc2V0cy9sb2dvX2NvdWNoYmFzZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIyMyBmcm9tICcuL2Fzc2V0cy9sb2dvX2RvY2tlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIyNCBmcm9tICcuL2Fzc2V0cy9sb2dvX2Ryb3B3aXphcmQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMjUgZnJvbSAnLi9hc3NldHMvbG9nb19lbGFzdGljLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjI2IGZyb20gJy4vYXNzZXRzL2xvZ29fZWxhc3RpY19zdGFjay5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIyNyBmcm9tICcuL2Fzc2V0cy9sb2dvX2VsYXN0aWNzZWFyY2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMjggZnJvbSAnLi9hc3NldHMvbG9nb19lbnRlcnByaXNlX3NlYXJjaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIyOSBmcm9tICcuL2Fzc2V0cy9sb2dvX2V0Y2QuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMzAgZnJvbSAnLi9hc3NldHMvbG9nb19nY3AuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMzEgZnJvbSAnLi9hc3NldHMvbG9nb19nY3BfbW9uby5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIzMiBmcm9tICcuL2Fzc2V0cy9sb2dvX2dpdGh1Yi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIzMyBmcm9tICcuL2Fzc2V0cy9sb2dvX2dtYWlsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjM0IGZyb20gJy4vYXNzZXRzL2xvZ29fZ29sYW5nLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjM1IGZyb20gJy4vYXNzZXRzL2xvZ29fZ29vZ2xlX2cuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMzYgZnJvbSAnLi9hc3NldHMvbG9nb19oYXByb3h5LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjM3IGZyb20gJy4vYXNzZXRzL2xvZ29faWJtLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjM4IGZyb20gJy4vYXNzZXRzL2xvZ29faWJtX21vbm8uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMzkgZnJvbSAnLi9hc3NldHMvbG9nb19rYWZrYS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI0MCBmcm9tICcuL2Fzc2V0cy9sb2dvX2tpYmFuYS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI0MSBmcm9tICcuL2Fzc2V0cy9sb2dvX2t1YmVybmV0ZXMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNDIgZnJvbSAnLi9hc3NldHMvbG9nb19sb2dnaW5nLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjQzIGZyb20gJy4vYXNzZXRzL2xvZ29fbG9nc3Rhc2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNDQgZnJvbSAnLi9hc3NldHMvbG9nb19tYXBzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjQ1IGZyb20gJy4vYXNzZXRzL2xvZ29fbWVtY2FjaGVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjQ2IGZyb20gJy4vYXNzZXRzL2xvZ29fbWV0cmljcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI0NyBmcm9tICcuL2Fzc2V0cy9sb2dvX21vbmdvZGIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNDggZnJvbSAnLi9hc3NldHMvbG9nb19teXNxbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI0OSBmcm9tICcuL2Fzc2V0cy9sb2dvX25naW54LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjUwIGZyb20gJy4vYXNzZXRzL2xvZ29fb2JzZXJ2YWJpbGl0eS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI1MSBmcm9tICcuL2Fzc2V0cy9sb2dvX29zcXVlcnkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNTIgZnJvbSAnLi9hc3NldHMvbG9nb19waHAuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNTMgZnJvbSAnLi9hc3NldHMvbG9nb19wb3N0Z3Jlcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI1NCBmcm9tICcuL2Fzc2V0cy9sb2dvX3Byb21ldGhldXMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNTUgZnJvbSAnLi9hc3NldHMvbG9nb19yYWJiaXRtcS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI1NiBmcm9tICcuL2Fzc2V0cy9sb2dvX3JlZGlzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjU3IGZyb20gJy4vYXNzZXRzL2xvZ29fc2VjdXJpdHkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNTggZnJvbSAnLi9hc3NldHMvbG9nb19zaXRlX3NlYXJjaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI1OSBmcm9tICcuL2Fzc2V0cy9sb2dvX3NrZXRjaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI2MCBmcm9tICcuL2Fzc2V0cy9sb2dvX3NsYWNrLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjYxIGZyb20gJy4vYXNzZXRzL2xvZ29fdXB0aW1lLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjYyIGZyb20gJy4vYXNzZXRzL2xvZ29fd2ViaG9vay5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI2MyBmcm9tICcuL2Fzc2V0cy9sb2dvX3dpbmRvd3MuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNjQgZnJvbSAnLi9hc3NldHMvbG9nb193b3JrcGxhY2Vfc2VhcmNoLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjY1IGZyb20gJy4vYXNzZXRzL2xvZ3N0YXNoX2ZpbHRlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI2NiBmcm9tICcuL2Fzc2V0cy9sb2dzdGFzaF9pZi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI2NyBmcm9tICcuL2Fzc2V0cy9sb2dzdGFzaF9pbnB1dC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI2OCBmcm9tICcuL2Fzc2V0cy9sb2dzdGFzaF9vdXRwdXQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNjkgZnJvbSAnLi9hc3NldHMvbG9nc3Rhc2hfcXVldWUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNzAgZnJvbSAnLi9hc3NldHMvbWFnbmV0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjcxIGZyb20gJy4vYXNzZXRzL21hZ25pZnlXaXRoRXhjbGFtYXRpb24uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNzIgZnJvbSAnLi9hc3NldHMvbWFnbmlmeVdpdGhNaW51cy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI3MyBmcm9tICcuL2Fzc2V0cy9tYWduaWZ5V2l0aFBsdXMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNzQgZnJvbSAnLi9hc3NldHMvbWFwX21hcmtlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI3NSBmcm9tICcuL2Fzc2V0cy9tZW1vcnkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNzYgZnJvbSAnLi9hc3NldHMvbWVudS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI3NyBmcm9tICcuL2Fzc2V0cy9tZW51RG93bi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI3OCBmcm9tICcuL2Fzc2V0cy9tZW51TGVmdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI3OSBmcm9tICcuL2Fzc2V0cy9tZW51UmlnaHQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyODAgZnJvbSAnLi9hc3NldHMvbWVudVVwLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjgxIGZyb20gJy4vYXNzZXRzL21lcmdlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjgyIGZyb20gJy4vYXNzZXRzL21pbmltaXplLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjgzIGZyb20gJy4vYXNzZXRzL21pbnVzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjg0IGZyb20gJy4vYXNzZXRzL21pbnVzX2luX2NpcmNsZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI4NSBmcm9tICcuL2Fzc2V0cy9taW51c19pbl9jaXJjbGVfZmlsbGVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjg2IGZyb20gJy4vYXNzZXRzL21sX2NsYXNzaWZpY2F0aW9uX2pvYi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI4NyBmcm9tICcuL2Fzc2V0cy9tbF9jcmVhdGVfYWR2YW5jZWRfam9iLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjg4IGZyb20gJy4vYXNzZXRzL21sX2NyZWF0ZV9tdWx0aV9tZXRyaWNfam9iLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjg5IGZyb20gJy4vYXNzZXRzL21sX2NyZWF0ZV9wb3B1bGF0aW9uX2pvYi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI5MCBmcm9tICcuL2Fzc2V0cy9tbF9jcmVhdGVfc2luZ2xlX21ldHJpY19qb2IuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyOTEgZnJvbSAnLi9hc3NldHMvbWxfZGF0YV92aXN1YWxpemVyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjkyIGZyb20gJy4vYXNzZXRzL21sX291dGxpZXJfZGV0ZWN0aW9uX2pvYi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI5MyBmcm9tICcuL2Fzc2V0cy9tbF9yZWdyZXNzaW9uX2pvYi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI5NCBmcm9tICcuL2Fzc2V0cy9tb2JpbGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyOTUgZnJvbSAnLi9hc3NldHMvbW9vbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI5NiBmcm9tICcuL2Fzc2V0cy9uYW1lc3BhY2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyOTcgZnJvbSAnLi9hc3NldHMvbmVzdGVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjk4IGZyb20gJy4vYXNzZXRzL25vZGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyOTkgZnJvbSAnLi9hc3NldHMvbnVtYmVyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzAwIGZyb20gJy4vYXNzZXRzL29mZmxpbmUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMDEgZnJvbSAnLi9hc3NldHMvb25saW5lLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzAyIGZyb20gJy4vYXNzZXRzL3BhY2thZ2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMDMgZnJvbSAnLi9hc3NldHMvcGFnZVNlbGVjdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMwNCBmcm9tICcuL2Fzc2V0cy9wYWdlc1NlbGVjdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMwNSBmcm9tICcuL2Fzc2V0cy9wYWludC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMwNiBmcm9tICcuL2Fzc2V0cy9wYXBlcl9jbGlwLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzA3IGZyb20gJy4vYXNzZXRzL3BhcnRpYWwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMDggZnJvbSAnLi9hc3NldHMvcGF1c2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMDkgZnJvbSAnLi9hc3NldHMvcGF5bWVudC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMxMCBmcm9tICcuL2Fzc2V0cy9wZW5jaWwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMTEgZnJvbSAnLi9hc3NldHMvcGVyY2VudC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMxMiBmcm9tICcuL2Fzc2V0cy9waW4uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMTMgZnJvbSAnLi9hc3NldHMvcGluX2ZpbGxlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMxNCBmcm9tICcuL2Fzc2V0cy9wbGF5LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzE1IGZyb20gJy4vYXNzZXRzL3BsYXlGaWxsZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMTYgZnJvbSAnLi9hc3NldHMvcGx1cy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMxNyBmcm9tICcuL2Fzc2V0cy9wbHVzX2luX2NpcmNsZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMxOCBmcm9tICcuL2Fzc2V0cy9wbHVzX2luX2NpcmNsZV9maWxsZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMTkgZnJvbSAnLi9hc3NldHMvcG9wb3V0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzIwIGZyb20gJy4vYXNzZXRzL3B1c2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMjEgZnJvbSAnLi9hc3NldHMvcXVlc3Rpb25faW5fY2lyY2xlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzIyIGZyb20gJy4vYXNzZXRzL3F1b3RlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzIzIGZyb20gJy4vYXNzZXRzL3JlZnJlc2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMjQgZnJvbSAnLi9hc3NldHMvcmVwb3J0ZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMjUgZnJvbSAnLi9hc3NldHMvcmV0dXJuX2tleS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMyNiBmcm9tICcuL2Fzc2V0cy9zYXZlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzI3IGZyb20gJy4vYXNzZXRzL3NjYWxlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzI4IGZyb20gJy4vYXNzZXRzL3NlYXJjaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMyOSBmcm9tICcuL2Fzc2V0cy9zZWN1cml0eVNpZ25hbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMzMCBmcm9tICcuL2Fzc2V0cy9zZWN1cml0eVNpZ25hbERldGVjdGVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzMxIGZyb20gJy4vYXNzZXRzL3NlY3VyaXR5U2lnbmFsUmVzb2x2ZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMzIgZnJvbSAnLi9hc3NldHMvc2Vzc2lvblZpZXdlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMzMyBmcm9tICcuL2Fzc2V0cy9zaGFyZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMzNCBmcm9tICcuL2Fzc2V0cy9zaGFyZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMzNSBmcm9tICcuL2Fzc2V0cy9zbm93Zmxha2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMzYgZnJvbSAnLi9hc3NldHMvc29ydExlZnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMzcgZnJvbSAnLi9hc3NldHMvc29ydFJpZ2h0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzM4IGZyb20gJy4vYXNzZXRzL3NvcnRfZG93bi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMzOSBmcm9tICcuL2Fzc2V0cy9zb3J0X3VwLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzQwIGZyb20gJy4vYXNzZXRzL3NvcnRhYmxlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzQxIGZyb20gJy4vYXNzZXRzL3N0YXJQbHVzRW1wdHkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNDIgZnJvbSAnLi9hc3NldHMvc3RhclBsdXNGaWxsZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNDMgZnJvbSAnLi9hc3NldHMvc3Rhcl9lbXB0eS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM0NCBmcm9tICcuL2Fzc2V0cy9zdGFyX2VtcHR5X3NwYWNlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzQ1IGZyb20gJy4vYXNzZXRzL3N0YXJfZmlsbGVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzQ2IGZyb20gJy4vYXNzZXRzL3N0YXJfZmlsbGVkX3NwYWNlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzQ3IGZyb20gJy4vYXNzZXRzL3N0YXJfbWludXNfZW1wdHkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNDggZnJvbSAnLi9hc3NldHMvc3Rhcl9taW51c19maWxsZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNDkgZnJvbSAnLi9hc3NldHMvc3RhdHMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNTAgZnJvbSAnLi9hc3NldHMvc3RvcC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM1MSBmcm9tICcuL2Fzc2V0cy9zdG9wX2ZpbGxlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM1MiBmcm9tICcuL2Fzc2V0cy9zdG9wX3NsYXNoLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzUzIGZyb20gJy4vYXNzZXRzL3N0b3JhZ2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNTQgZnJvbSAnLi9hc3NldHMvc3RyaW5nLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzU1IGZyb20gJy4vYXNzZXRzL3N1Ym1vZHVsZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM1NiBmcm9tICcuL2Fzc2V0cy9zdW4uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNTcgZnJvbSAnLi9hc3NldHMvc3dhdGNoX2lucHV0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzU4IGZyb20gJy4vYXNzZXRzL3N5bWxpbmsuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNTkgZnJvbSAnLi9hc3NldHMvdGFibGVPZkNvbnRlbnRzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzYwIGZyb20gJy4vYXNzZXRzL3RhYmxlX2RlbnNpdHlfY29tcGFjdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM2MSBmcm9tICcuL2Fzc2V0cy90YWJsZV9kZW5zaXR5X2V4cGFuZGVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzYyIGZyb20gJy4vYXNzZXRzL3RhYmxlX2RlbnNpdHlfbm9ybWFsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzYzIGZyb20gJy4vYXNzZXRzL3RhZy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM2NCBmcm9tICcuL2Fzc2V0cy90ZWFyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzY1IGZyb20gJy4vYXNzZXRzL3RlbXBlcmF0dXJlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzY2IGZyb20gJy4vYXNzZXRzL3RpbWVSZWZyZXNoLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzY3IGZyb20gJy4vYXNzZXRzL3RpbWVsaW5lLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzY4IGZyb20gJy4vYXNzZXRzL3RpbWVzbGlkZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNjkgZnJvbSAnLi9hc3NldHMvdG9rZW5BbGlhcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM3MCBmcm9tICcuL2Fzc2V0cy90b2tlbkFubm90YXRpb24uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNzEgZnJvbSAnLi9hc3NldHMvdG9rZW5BcnJheS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM3MiBmcm9tICcuL2Fzc2V0cy90b2tlbkJpbmFyeS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM3MyBmcm9tICcuL2Fzc2V0cy90b2tlbkJvb2xlYW4uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNzQgZnJvbSAnLi9hc3NldHMvdG9rZW5DbGFzcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM3NSBmcm9tICcuL2Fzc2V0cy90b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNzYgZnJvbSAnLi9hc3NldHMvdG9rZW5Db25zdGFudC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM3NyBmcm9tICcuL2Fzc2V0cy90b2tlbkRhdGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNzggZnJvbSAnLi9hc3NldHMvdG9rZW5EZW5zZVZlY3Rvci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM3OSBmcm9tICcuL2Fzc2V0cy90b2tlbkVsZW1lbnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzODAgZnJvbSAnLi9hc3NldHMvdG9rZW5FbnVtLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzgxIGZyb20gJy4vYXNzZXRzL3Rva2VuRW51bU1lbWJlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM4MiBmcm9tICcuL2Fzc2V0cy90b2tlbkV2ZW50LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzgzIGZyb20gJy4vYXNzZXRzL3Rva2VuRXhjZXB0aW9uLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzg0IGZyb20gJy4vYXNzZXRzL3Rva2VuRmllbGQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzODUgZnJvbSAnLi9hc3NldHMvdG9rZW5GaWxlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzg2IGZyb20gJy4vYXNzZXRzL3Rva2VuRmxhdHRlbmVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzg3IGZyb20gJy4vYXNzZXRzL3Rva2VuRnVuY3Rpb24uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzODggZnJvbSAnLi9hc3NldHMvdG9rZW5HZW8uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzODkgZnJvbSAnLi9hc3NldHMvdG9rZW5IaXN0b2dyYW0uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzOTAgZnJvbSAnLi9hc3NldHMvdG9rZW5JUC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM5MSBmcm9tICcuL2Fzc2V0cy90b2tlbkludGVyZmFjZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM5MiBmcm9tICcuL2Fzc2V0cy90b2tlbkpvaW4uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzOTMgZnJvbSAnLi9hc3NldHMvdG9rZW5LZXkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzOTQgZnJvbSAnLi9hc3NldHMvdG9rZW5LZXl3b3JkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzk1IGZyb20gJy4vYXNzZXRzL3Rva2VuTWV0aG9kLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzk2IGZyb20gJy4vYXNzZXRzL3Rva2VuTWV0cmljQ291bnRlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM5NyBmcm9tICcuL2Fzc2V0cy90b2tlbk1ldHJpY0dhdWdlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzk4IGZyb20gJy4vYXNzZXRzL3Rva2VuTW9kdWxlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzk5IGZyb20gJy4vYXNzZXRzL3Rva2VuTmFtZXNwYWNlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDAwIGZyb20gJy4vYXNzZXRzL3Rva2VuTmVzdGVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDAxIGZyb20gJy4vYXNzZXRzL3Rva2VuTnVsbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQwMiBmcm9tICcuL2Fzc2V0cy90b2tlbk51bWJlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQwMyBmcm9tICcuL2Fzc2V0cy90b2tlbk9iamVjdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQwNCBmcm9tICcuL2Fzc2V0cy90b2tlbk9wZXJhdG9yLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDA1IGZyb20gJy4vYXNzZXRzL3Rva2VuUGFja2FnZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQwNiBmcm9tICcuL2Fzc2V0cy90b2tlblBhcmFtZXRlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQwNyBmcm9tICcuL2Fzc2V0cy90b2tlblBlcmNvbGF0b3IuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MDggZnJvbSAnLi9hc3NldHMvdG9rZW5Qcm9wZXJ0eS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQwOSBmcm9tICcuL2Fzc2V0cy90b2tlblJhbmdlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDEwIGZyb20gJy4vYXNzZXRzL3Rva2VuUmFua0ZlYXR1cmUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MTEgZnJvbSAnLi9hc3NldHMvdG9rZW5SYW5rRmVhdHVyZXMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MTIgZnJvbSAnLi9hc3NldHMvdG9rZW5SZXBvLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDEzIGZyb20gJy4vYXNzZXRzL3Rva2VuU2VhcmNoVHlwZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQxNCBmcm9tICcuL2Fzc2V0cy90b2tlblNoYXBlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDE1IGZyb20gJy4vYXNzZXRzL3Rva2VuU3RyaW5nLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDE2IGZyb20gJy4vYXNzZXRzL3Rva2VuU3RydWN0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDE3IGZyb20gJy4vYXNzZXRzL3Rva2VuU3ltYm9sLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDE4IGZyb20gJy4vYXNzZXRzL3Rva2VuVGFnLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDE5IGZyb20gJy4vYXNzZXRzL3Rva2VuVGV4dC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQyMCBmcm9tICcuL2Fzc2V0cy90b2tlblRva2VuQ291bnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MjEgZnJvbSAnLi9hc3NldHMvdG9rZW5WYXJpYWJsZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQyMiBmcm9tICcuL2Fzc2V0cy90cmFpbmluZy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQyMyBmcm9tICcuL2Fzc2V0cy90cmFzaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQyNCBmcm9tICcuL2Fzc2V0cy91bmZvbGQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MjUgZnJvbSAnLi9hc3NldHMvdW5saW5rLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDI2IGZyb20gJy4vYXNzZXRzL3VzZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MjcgZnJvbSAnLi9hc3NldHMvdXNlckF2YXRhci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQyOCBmcm9tICcuL2Fzc2V0cy91c2Vycy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQyOSBmcm9tICcuL2Fzc2V0cy92ZWN0b3IuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MzAgZnJvbSAnLi9hc3NldHMvdmlkZW9QbGF5ZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MzEgZnJvbSAnLi9hc3NldHMvdmlzX2FyZWEuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MzIgZnJvbSAnLi9hc3NldHMvdmlzX2FyZWFfc3RhY2tlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQzMyBmcm9tICcuL2Fzc2V0cy92aXNfYmFyX2hvcml6b250YWwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MzQgZnJvbSAnLi9hc3NldHMvdmlzX2Jhcl9ob3Jpem9udGFsX3N0YWNrZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MzUgZnJvbSAnLi9hc3NldHMvdmlzX2Jhcl92ZXJ0aWNhbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQzNiBmcm9tICcuL2Fzc2V0cy92aXNfYmFyX3ZlcnRpY2FsX3N0YWNrZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MzcgZnJvbSAnLi9hc3NldHMvdmlzX2dhdWdlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDM4IGZyb20gJy4vYXNzZXRzL3Zpc19nb2FsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDM5IGZyb20gJy4vYXNzZXRzL3Zpc19saW5lLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDQwIGZyb20gJy4vYXNzZXRzL3Zpc19tYXBfY29vcmRpbmF0ZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ0MSBmcm9tICcuL2Fzc2V0cy92aXNfbWFwX3JlZ2lvbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ0MiBmcm9tICcuL2Fzc2V0cy92aXNfbWV0cmljLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDQzIGZyb20gJy4vYXNzZXRzL3Zpc19waWUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NDQgZnJvbSAnLi9hc3NldHMvdmlzX3RhYmxlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDQ1IGZyb20gJy4vYXNzZXRzL3Zpc190YWdfY2xvdWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NDYgZnJvbSAnLi9hc3NldHMvdmlzX3RleHQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NDcgZnJvbSAnLi9hc3NldHMvdmlzX3RpbWVsaW9uLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDQ4IGZyb20gJy4vYXNzZXRzL3Zpc192ZWdhLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDQ5IGZyb20gJy4vYXNzZXRzL3Zpc192aXN1YWxfYnVpbGRlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ1MCBmcm9tICcuL2Fzc2V0cy93b3JkV3JhcC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ1MSBmcm9tICcuL2Fzc2V0cy93b3JkV3JhcERpc2FibGVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDUyIGZyb20gJy4vYXNzZXRzL3dyZW5jaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ1MyBmcm9tICcuL2Fzc2V0cy9hY2Nlc3NpYmlsaXR5JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDU0IGZyb20gJy4vYXNzZXRzL2FnZ3JlZ2F0ZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ1NSBmcm9tICcuL2Fzc2V0cy9hbGVydCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ1NiBmcm9tICcuL2Fzc2V0cy9hbmFseXplRXZlbnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NTcgZnJvbSAnLi9hc3NldHMvYW5hbHl6ZV9ldmVudCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ1OCBmcm9tICcuL2Fzc2V0cy9hbm5vdGF0aW9uJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDU5IGZyb20gJy4vYXNzZXRzL2FwbV90cmFjZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ2MCBmcm9tICcuL2Fzc2V0cy9hcHBfYWRkX2RhdGEnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NjEgZnJvbSAnLi9hc3NldHMvYXBwX2FkdmFuY2VkX3NldHRpbmdzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDYyIGZyb20gJy4vYXNzZXRzL2FwcF9hZ2VudCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ2MyBmcm9tICcuL2Fzc2V0cy9hcHBfYXBtJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDY0IGZyb20gJy4vYXNzZXRzL2FwcF9hcHBfc2VhcmNoJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDY1IGZyb20gJy4vYXNzZXRzL2FwcF9hdWRpdGJlYXQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NjYgZnJvbSAnLi9hc3NldHMvYXBwX2NhbnZhcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ2NyBmcm9tICcuL2Fzc2V0cy9hcHBfY2FzZXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NjggZnJvbSAnLi9hc3NldHMvYXBwX2NvZGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NjkgZnJvbSAnLi9hc3NldHMvYXBwX2NvbnNvbGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NzAgZnJvbSAnLi9hc3NldHMvYXBwX2Nyb3NzX2NsdXN0ZXJfcmVwbGljYXRpb24nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NzEgZnJvbSAnLi9hc3NldHMvYXBwX2Rhc2hib2FyZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ3MiBmcm9tICcuL2Fzc2V0cy9hcHBfZGV2dG9vbHMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NzMgZnJvbSAnLi9hc3NldHMvYXBwX2Rpc2NvdmVyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDc0IGZyb20gJy4vYXNzZXRzL2FwcF9lbXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NzUgZnJvbSAnLi9hc3NldHMvYXBwX2ZpbGViZWF0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDc2IGZyb20gJy4vYXNzZXRzL2FwcF9mbGVldCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ3NyBmcm9tICcuL2Fzc2V0cy9hcHBfZ2lzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDc4IGZyb20gJy4vYXNzZXRzL2FwcF9ncmFwaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ3OSBmcm9tICcuL2Fzc2V0cy9hcHBfZ3Jvayc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ4MCBmcm9tICcuL2Fzc2V0cy9hcHBfaGVhcnRiZWF0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDgxIGZyb20gJy4vYXNzZXRzL2FwcF9pbmRleF9tYW5hZ2VtZW50JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDgyIGZyb20gJy4vYXNzZXRzL2FwcF9pbmRleF9wYXR0ZXJuJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDgzIGZyb20gJy4vYXNzZXRzL2FwcF9pbmRleF9yb2xsdXAnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0ODQgZnJvbSAnLi9hc3NldHMvYXBwX2xlbnMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0ODUgZnJvbSAnLi9hc3NldHMvYXBwX2xvZ3MnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0ODYgZnJvbSAnLi9hc3NldHMvYXBwX21hbmFnZW1lbnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0ODcgZnJvbSAnLi9hc3NldHMvYXBwX21ldHJpY2JlYXQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0ODggZnJvbSAnLi9hc3NldHMvYXBwX21ldHJpY3MnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0ODkgZnJvbSAnLi9hc3NldHMvYXBwX21sJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDkwIGZyb20gJy4vYXNzZXRzL2FwcF9tb25pdG9yaW5nJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDkxIGZyb20gJy4vYXNzZXRzL2FwcF9ub3RlYm9vayc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ5MiBmcm9tICcuL2Fzc2V0cy9hcHBfcGFja2V0YmVhdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ5MyBmcm9tICcuL2Fzc2V0cy9hcHBfcGlwZWxpbmUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0OTQgZnJvbSAnLi9hc3NldHMvYXBwX3JlY2VudGx5X3ZpZXdlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ5NSBmcm9tICcuL2Fzc2V0cy9hcHBfcmVwb3J0aW5nJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDk2IGZyb20gJy4vYXNzZXRzL2FwcF9zYXZlZF9vYmplY3RzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDk3IGZyb20gJy4vYXNzZXRzL2FwcF9zZWFyY2hfcHJvZmlsZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0OTggZnJvbSAnLi9hc3NldHMvYXBwX3NlY3VyaXR5JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDk5IGZyb20gJy4vYXNzZXRzL2FwcF9zZWN1cml0eV9hbmFseXRpY3MnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MDAgZnJvbSAnLi9hc3NldHMvYXBwX3NwYWNlcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUwMSBmcm9tICcuL2Fzc2V0cy9hcHBfc3FsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTAyIGZyb20gJy4vYXNzZXRzL2FwcF90aW1lbGlvbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUwMyBmcm9tICcuL2Fzc2V0cy9hcHBfdXBncmFkZV9hc3Npc3RhbnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MDQgZnJvbSAnLi9hc3NldHMvYXBwX3VwdGltZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUwNSBmcm9tICcuL2Fzc2V0cy9hcHBfdXNlcnNfcm9sZXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MDYgZnJvbSAnLi9hc3NldHMvYXBwX3Zpc3VhbGl6ZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUwNyBmcm9tICcuL2Fzc2V0cy9hcHBfd2F0Y2hlcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUwOCBmcm9tICcuL2Fzc2V0cy9hcHBfd29ya3BsYWNlX3NlYXJjaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUwOSBmcm9tICcuL2Fzc2V0cy9hcHBzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTEwIGZyb20gJy4vYXNzZXRzL2Fycm93RW5kJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTExIGZyb20gJy4vYXNzZXRzL2Fycm93U3RhcnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MTIgZnJvbSAnLi9hc3NldHMvYXJyb3dfZG93bic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUxMyBmcm9tICcuL2Fzc2V0cy9hcnJvd19sZWZ0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTE0IGZyb20gJy4vYXNzZXRzL2Fycm93X3JpZ2h0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTE1IGZyb20gJy4vYXNzZXRzL2Fycm93X3VwJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTE2IGZyb20gJy4vYXNzZXRzL2FzdGVyaXNrJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTE3IGZyb20gJy4vYXNzZXRzL2JlYWtlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUxOCBmcm9tICcuL2Fzc2V0cy9iZWxsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTE5IGZyb20gJy4vYXNzZXRzL2JlbGxTbGFzaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUyMCBmcm9tICcuL2Fzc2V0cy9ib2x0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTIxIGZyb20gJy4vYXNzZXRzL2JveGVzX2hvcml6b250YWwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MjIgZnJvbSAnLi9hc3NldHMvYm94ZXNfdmVydGljYWwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MjMgZnJvbSAnLi9hc3NldHMvYnJhbmNoJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTI0IGZyb20gJy4vYXNzZXRzL2JyYW5jaFVzZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MjUgZnJvbSAnLi9hc3NldHMvYnJvb20nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MjYgZnJvbSAnLi9hc3NldHMvYnJ1c2gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MjcgZnJvbSAnLi9hc3NldHMvYnVnJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTI4IGZyb20gJy4vYXNzZXRzL2J1bGxzZXllJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTI5IGZyb20gJy4vYXNzZXRzL2NhbGVuZGFyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTMwIGZyb20gJy4vYXNzZXRzL2NoZWNrJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTMxIGZyb20gJy4vYXNzZXRzL2NoZWNrSW5DaXJjbGVGaWxsZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MzIgZnJvbSAnLi9hc3NldHMvY2hlZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MzMgZnJvbSAnLi9hc3NldHMvY2xvY2snO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MzQgZnJvbSAnLi9hc3NldHMvY2xvdWREcml6emxlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTM1IGZyb20gJy4vYXNzZXRzL2Nsb3VkU3Rvcm15JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTM2IGZyb20gJy4vYXNzZXRzL2Nsb3VkU3VubnknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MzcgZnJvbSAnLi9hc3NldHMvY2x1c3Rlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUzOCBmcm9tICcuL2Fzc2V0cy9jb2xvcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUzOSBmcm9tICcuL2Fzc2V0cy9jb21wdXRlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTQwIGZyb20gJy4vYXNzZXRzL2NvbnNvbGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NDEgZnJvbSAnLi9hc3NldHMvY29udGFpbmVyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTQyIGZyb20gJy4vYXNzZXRzL2NvbnRpbnVpdHlBYm92ZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU0MyBmcm9tICcuL2Fzc2V0cy9jb250aW51aXR5QWJvdmVCZWxvdyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU0NCBmcm9tICcuL2Fzc2V0cy9jb250aW51aXR5QmVsb3cnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NDUgZnJvbSAnLi9hc3NldHMvY29udGludWl0eVdpdGhpbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU0NiBmcm9tICcuL2Fzc2V0cy9jb250cm9sc19ob3Jpem9udGFsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTQ3IGZyb20gJy4vYXNzZXRzL2NvbnRyb2xzX3ZlcnRpY2FsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTQ4IGZyb20gJy4vYXNzZXRzL2NvcHknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NDkgZnJvbSAnLi9hc3NldHMvY29weV9jbGlwYm9hcmQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NTAgZnJvbSAnLi9hc3NldHMvY3Jvc3MnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NTEgZnJvbSAnLi9hc3NldHMvY3Jvc3NJbkFDaXJjbGVGaWxsZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NTIgZnJvbSAnLi9hc3NldHMvY3Jvc3NoYWlycyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU1MyBmcm9tICcuL2Fzc2V0cy9jdXJyZW5jeSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU1NCBmcm9tICcuL2Fzc2V0cy9jdXQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NTUgZnJvbSAnLi9hc3NldHMvZGF0YWJhc2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NTYgZnJvbSAnLi9hc3NldHMvZGVza3RvcCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU1NyBmcm9tICcuL2Fzc2V0cy9kb2N1bWVudCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU1OCBmcm9tICcuL2Fzc2V0cy9kb2N1bWVudEVkaXQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NTkgZnJvbSAnLi9hc3NldHMvZG9jdW1lbnRhdGlvbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU2MCBmcm9tICcuL2Fzc2V0cy9kb2N1bWVudHMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NjEgZnJvbSAnLi9hc3NldHMvZG90JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTYyIGZyb20gJy4vYXNzZXRzL2RvdWJsZUFycm93TGVmdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU2MyBmcm9tICcuL2Fzc2V0cy9kb3VibGVBcnJvd1JpZ2h0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTY0IGZyb20gJy4vYXNzZXRzL2Rvd25sb2FkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTY1IGZyb20gJy4vYXNzZXRzL2VkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTY2IGZyb20gJy4vYXNzZXRzL2VkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU2NyBmcm9tICcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25Cb3R0b20nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NjggZnJvbSAnLi9hc3NldHMvZWRpdG9ySXRlbUFsaWduQ2VudGVyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTY5IGZyb20gJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnbkxlZnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NzAgZnJvbSAnLi9hc3NldHMvZWRpdG9ySXRlbUFsaWduTWlkZGxlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTcxIGZyb20gJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnblJpZ2h0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTcyIGZyb20gJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnblRvcCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU3MyBmcm9tICcuL2Fzc2V0cy9lZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NzQgZnJvbSAnLi9hc3NldHMvZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU3NSBmcm9tICcuL2Fzc2V0cy9lZGl0b3JQb3NpdGlvblRvcExlZnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NzYgZnJvbSAnLi9hc3NldHMvZWRpdG9yUG9zaXRpb25Ub3BSaWdodCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU3NyBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfYWxpZ25fY2VudGVyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTc4IGZyb20gJy4vYXNzZXRzL2VkaXRvcl9hbGlnbl9sZWZ0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTc5IGZyb20gJy4vYXNzZXRzL2VkaXRvcl9hbGlnbl9yaWdodCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU4MCBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfYm9sZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU4MSBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfY2hlY2tsaXN0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTgyIGZyb20gJy4vYXNzZXRzL2VkaXRvcl9jb2RlX2Jsb2NrJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTgzIGZyb20gJy4vYXNzZXRzL2VkaXRvcl9jb21tZW50JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTg0IGZyb20gJy4vYXNzZXRzL2VkaXRvcl9oZWFkaW5nJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTg1IGZyb20gJy4vYXNzZXRzL2VkaXRvcl9pdGFsaWMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1ODYgZnJvbSAnLi9hc3NldHMvZWRpdG9yX2xpbmsnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1ODcgZnJvbSAnLi9hc3NldHMvZWRpdG9yX29yZGVyZWRfbGlzdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU4OCBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfcmVkbyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU4OSBmcm9tICcuL2Fzc2V0cy9lZGl0b3Jfc3RyaWtlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTkwIGZyb20gJy4vYXNzZXRzL2VkaXRvcl90YWJsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU5MSBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfdW5kZXJsaW5lJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTkyIGZyb20gJy4vYXNzZXRzL2VkaXRvcl91bmRvJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTkzIGZyb20gJy4vYXNzZXRzL2VkaXRvcl91bm9yZGVyZWRfbGlzdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU5NCBmcm9tICcuL2Fzc2V0cy9lbWFpbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU5NSBmcm9tICcuL2Fzc2V0cy9lbXB0eSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU5NiBmcm9tICcuL2Fzc2V0cy9lcWwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1OTcgZnJvbSAnLi9hc3NldHMvZXJhc2VyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTk4IGZyb20gJy4vYXNzZXRzL2V4aXQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1OTkgZnJvbSAnLi9hc3NldHMvZXhwYW5kJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjAwIGZyb20gJy4vYXNzZXRzL2V4cGFuZE1pbmknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MDEgZnJvbSAnLi9hc3NldHMvZXhwb3J0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjAyIGZyb20gJy4vYXNzZXRzL2V5ZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYwMyBmcm9tICcuL2Fzc2V0cy9leWVfY2xvc2VkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjA0IGZyb20gJy4vYXNzZXRzL2ZhY2VfaGFwcHknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MDUgZnJvbSAnLi9hc3NldHMvZmFjZV9uZXV0cmFsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjA2IGZyb20gJy4vYXNzZXRzL2ZhY2Vfc2FkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjA3IGZyb20gJy4vYXNzZXRzL2ZpbHRlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYwOCBmcm9tICcuL2Fzc2V0cy9mbGFnJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjA5IGZyb20gJy4vYXNzZXRzL2ZvbGQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MTAgZnJvbSAnLi9hc3NldHMvZm9sZGVyX2NoZWNrJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjExIGZyb20gJy4vYXNzZXRzL2ZvbGRlcl9jbG9zZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MTIgZnJvbSAnLi9hc3NldHMvZm9sZGVyX2V4Y2xhbWF0aW9uJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjEzIGZyb20gJy4vYXNzZXRzL2ZvbGRlcl9vcGVuJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjE0IGZyb20gJy4vYXNzZXRzL2ZyYW1lTmV4dCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYxNSBmcm9tICcuL2Fzc2V0cy9mcmFtZVByZXZpb3VzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjE2IGZyb20gJy4vYXNzZXRzL2Z1bGxTY3JlZW5FeGl0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjE3IGZyb20gJy4vYXNzZXRzL2Z1bGxfc2NyZWVuJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjE4IGZyb20gJy4vYXNzZXRzL2Z1bmN0aW9uJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjE5IGZyb20gJy4vYXNzZXRzL2dlYXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MjAgZnJvbSAnLi9hc3NldHMvZ2xhc3Nlcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYyMSBmcm9tICcuL2Fzc2V0cy9nbG9iZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYyMiBmcm9tICcuL2Fzc2V0cy9ncmFiJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjIzIGZyb20gJy4vYXNzZXRzL2dyYWJfaG9yaXpvbnRhbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYyNCBmcm9tICcuL2Fzc2V0cy9ncmlkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjI1IGZyb20gJy4vYXNzZXRzL2hlYXJ0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjI2IGZyb20gJy4vYXNzZXRzL2hlYXRtYXAnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MjcgZnJvbSAnLi9hc3NldHMvaGVscCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYyOCBmcm9tICcuL2Fzc2V0cy9ob21lJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjI5IGZyb20gJy4vYXNzZXRzL2lJbkNpcmNsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYzMCBmcm9tICcuL2Fzc2V0cy9pbWFnZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYzMSBmcm9tICcuL2Fzc2V0cy9pbXBvcnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MzIgZnJvbSAnLi9hc3NldHMvaW5kZXhfY2xvc2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MzMgZnJvbSAnLi9hc3NldHMvaW5kZXhfZWRpdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYzNCBmcm9tICcuL2Fzc2V0cy9pbmRleF9mbHVzaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYzNSBmcm9tICcuL2Fzc2V0cy9pbmRleF9tYXBwaW5nJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjM2IGZyb20gJy4vYXNzZXRzL2luZGV4X29wZW4nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MzcgZnJvbSAnLi9hc3NldHMvaW5kZXhfcnVudGltZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYzOCBmcm9tICcuL2Fzc2V0cy9pbmRleF9zZXR0aW5ncyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYzOSBmcm9tICcuL2Fzc2V0cy9pbnB1dE91dHB1dCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY0MCBmcm9tICcuL2Fzc2V0cy9pbnNwZWN0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjQxIGZyb20gJy4vYXNzZXRzL2ludmVydCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY0MiBmcm9tICcuL2Fzc2V0cy9pcCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY0MyBmcm9tICcuL2Fzc2V0cy9rZXlib2FyZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY0NCBmcm9tICcuL2Fzc2V0cy9rcWxfZmllbGQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NDUgZnJvbSAnLi9hc3NldHMva3FsX2Z1bmN0aW9uJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjQ2IGZyb20gJy4vYXNzZXRzL2txbF9vcGVyYW5kJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjQ3IGZyb20gJy4vYXNzZXRzL2txbF9zZWxlY3Rvcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY0OCBmcm9tICcuL2Fzc2V0cy9rcWxfdmFsdWUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NDkgZnJvbSAnLi9hc3NldHMva3ViZXJuZXRlc05vZGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NTAgZnJvbSAnLi9hc3NldHMva3ViZXJuZXRlc1BvZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY1MSBmcm9tICcuL2Fzc2V0cy9sYXllcnMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NTIgZnJvbSAnLi9hc3NldHMvbGV0dGVyaW5nJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjUzIGZyb20gJy4vYXNzZXRzL2xpbmVEYXNoZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NTQgZnJvbSAnLi9hc3NldHMvbGluZURvdHRlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY1NSBmcm9tICcuL2Fzc2V0cy9saW5lU29saWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NTYgZnJvbSAnLi9hc3NldHMvbGluayc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY1NyBmcm9tICcuL2Fzc2V0cy9saXN0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjU4IGZyb20gJy4vYXNzZXRzL2xpc3RfYWRkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjU5IGZyb20gJy4vYXNzZXRzL2xvY2snO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NjAgZnJvbSAnLi9hc3NldHMvbG9ja09wZW4nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NjEgZnJvbSAnLi9hc3NldHMvbG9nb19hZXJvc3Bpa2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NjIgZnJvbSAnLi9hc3NldHMvbG9nb19hcGFjaGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NjMgZnJvbSAnLi9hc3NldHMvbG9nb19hcHBfc2VhcmNoJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjY0IGZyb20gJy4vYXNzZXRzL2xvZ29fYXdzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjY1IGZyb20gJy4vYXNzZXRzL2xvZ29fYXdzX21vbm8nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NjYgZnJvbSAnLi9hc3NldHMvbG9nb19henVyZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY2NyBmcm9tICcuL2Fzc2V0cy9sb2dvX2F6dXJlX21vbm8nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NjggZnJvbSAnLi9hc3NldHMvbG9nb19iZWF0cyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY2OSBmcm9tICcuL2Fzc2V0cy9sb2dvX2J1c2luZXNzX2FuYWx5dGljcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY3MCBmcm9tICcuL2Fzc2V0cy9sb2dvX2NlcGgnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NzEgZnJvbSAnLi9hc3NldHMvbG9nb19jbG91ZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY3MiBmcm9tICcuL2Fzc2V0cy9sb2dvX2Nsb3VkX2VjZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY3MyBmcm9tICcuL2Fzc2V0cy9sb2dvX2NvZGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NzQgZnJvbSAnLi9hc3NldHMvbG9nb19jb2Rlc2FuZGJveCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY3NSBmcm9tICcuL2Fzc2V0cy9sb2dvX2NvdWNoYmFzZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY3NiBmcm9tICcuL2Fzc2V0cy9sb2dvX2RvY2tlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY3NyBmcm9tICcuL2Fzc2V0cy9sb2dvX2Ryb3B3aXphcmQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NzggZnJvbSAnLi9hc3NldHMvbG9nb19lbGFzdGljJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjc5IGZyb20gJy4vYXNzZXRzL2xvZ29fZWxhc3RpY19zdGFjayc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY4MCBmcm9tICcuL2Fzc2V0cy9sb2dvX2VsYXN0aWNzZWFyY2gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2ODEgZnJvbSAnLi9hc3NldHMvbG9nb19lbnRlcnByaXNlX3NlYXJjaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY4MiBmcm9tICcuL2Fzc2V0cy9sb2dvX2V0Y2QnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2ODMgZnJvbSAnLi9hc3NldHMvbG9nb19nY3AnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2ODQgZnJvbSAnLi9hc3NldHMvbG9nb19nY3BfbW9ubyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY4NSBmcm9tICcuL2Fzc2V0cy9sb2dvX2dpdGh1Yic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY4NiBmcm9tICcuL2Fzc2V0cy9sb2dvX2dtYWlsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjg3IGZyb20gJy4vYXNzZXRzL2xvZ29fZ29sYW5nJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjg4IGZyb20gJy4vYXNzZXRzL2xvZ29fZ29vZ2xlX2cnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2ODkgZnJvbSAnLi9hc3NldHMvbG9nb19oYXByb3h5JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjkwIGZyb20gJy4vYXNzZXRzL2xvZ29faWJtJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjkxIGZyb20gJy4vYXNzZXRzL2xvZ29faWJtX21vbm8nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2OTIgZnJvbSAnLi9hc3NldHMvbG9nb19rYWZrYSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY5MyBmcm9tICcuL2Fzc2V0cy9sb2dvX2tpYmFuYSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY5NCBmcm9tICcuL2Fzc2V0cy9sb2dvX2t1YmVybmV0ZXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2OTUgZnJvbSAnLi9hc3NldHMvbG9nb19sb2dnaW5nJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjk2IGZyb20gJy4vYXNzZXRzL2xvZ29fbG9nc3Rhc2gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2OTcgZnJvbSAnLi9hc3NldHMvbG9nb19tYXBzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjk4IGZyb20gJy4vYXNzZXRzL2xvZ29fbWVtY2FjaGVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjk5IGZyb20gJy4vYXNzZXRzL2xvZ29fbWV0cmljcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcwMCBmcm9tICcuL2Fzc2V0cy9sb2dvX21vbmdvZGInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MDEgZnJvbSAnLi9hc3NldHMvbG9nb19teXNxbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcwMiBmcm9tICcuL2Fzc2V0cy9sb2dvX25naW54JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzAzIGZyb20gJy4vYXNzZXRzL2xvZ29fb2JzZXJ2YWJpbGl0eSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcwNCBmcm9tICcuL2Fzc2V0cy9sb2dvX29zcXVlcnknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MDUgZnJvbSAnLi9hc3NldHMvbG9nb19waHAnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MDYgZnJvbSAnLi9hc3NldHMvbG9nb19wb3N0Z3Jlcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcwNyBmcm9tICcuL2Fzc2V0cy9sb2dvX3Byb21ldGhldXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MDggZnJvbSAnLi9hc3NldHMvbG9nb19yYWJiaXRtcSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcwOSBmcm9tICcuL2Fzc2V0cy9sb2dvX3JlZGlzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzEwIGZyb20gJy4vYXNzZXRzL2xvZ29fc2VjdXJpdHknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MTEgZnJvbSAnLi9hc3NldHMvbG9nb19zaXRlX3NlYXJjaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcxMiBmcm9tICcuL2Fzc2V0cy9sb2dvX3NrZXRjaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcxMyBmcm9tICcuL2Fzc2V0cy9sb2dvX3NsYWNrJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzE0IGZyb20gJy4vYXNzZXRzL2xvZ29fdXB0aW1lJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzE1IGZyb20gJy4vYXNzZXRzL2xvZ29fd2ViaG9vayc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcxNiBmcm9tICcuL2Fzc2V0cy9sb2dvX3dpbmRvd3MnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MTcgZnJvbSAnLi9hc3NldHMvbG9nb193b3JrcGxhY2Vfc2VhcmNoJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzE4IGZyb20gJy4vYXNzZXRzL2xvZ3N0YXNoX2ZpbHRlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcxOSBmcm9tICcuL2Fzc2V0cy9sb2dzdGFzaF9pZic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcyMCBmcm9tICcuL2Fzc2V0cy9sb2dzdGFzaF9pbnB1dCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcyMSBmcm9tICcuL2Fzc2V0cy9sb2dzdGFzaF9vdXRwdXQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MjIgZnJvbSAnLi9hc3NldHMvbG9nc3Rhc2hfcXVldWUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MjMgZnJvbSAnLi9hc3NldHMvbWFnbmV0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzI0IGZyb20gJy4vYXNzZXRzL21hZ25pZnlXaXRoRXhjbGFtYXRpb24nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MjUgZnJvbSAnLi9hc3NldHMvbWFnbmlmeVdpdGhNaW51cyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcyNiBmcm9tICcuL2Fzc2V0cy9tYWduaWZ5V2l0aFBsdXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MjcgZnJvbSAnLi9hc3NldHMvbWFwX21hcmtlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcyOCBmcm9tICcuL2Fzc2V0cy9tZW1vcnknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MjkgZnJvbSAnLi9hc3NldHMvbWVudSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTczMCBmcm9tICcuL2Fzc2V0cy9tZW51RG93bic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTczMSBmcm9tICcuL2Fzc2V0cy9tZW51TGVmdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTczMiBmcm9tICcuL2Fzc2V0cy9tZW51UmlnaHQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MzMgZnJvbSAnLi9hc3NldHMvbWVudVVwJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzM0IGZyb20gJy4vYXNzZXRzL21lcmdlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzM1IGZyb20gJy4vYXNzZXRzL21pbmltaXplJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzM2IGZyb20gJy4vYXNzZXRzL21pbnVzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzM3IGZyb20gJy4vYXNzZXRzL21pbnVzX2luX2NpcmNsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTczOCBmcm9tICcuL2Fzc2V0cy9taW51c19pbl9jaXJjbGVfZmlsbGVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzM5IGZyb20gJy4vYXNzZXRzL21sX2NsYXNzaWZpY2F0aW9uX2pvYic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc0MCBmcm9tICcuL2Fzc2V0cy9tbF9jcmVhdGVfYWR2YW5jZWRfam9iJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzQxIGZyb20gJy4vYXNzZXRzL21sX2NyZWF0ZV9tdWx0aV9tZXRyaWNfam9iJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzQyIGZyb20gJy4vYXNzZXRzL21sX2NyZWF0ZV9wb3B1bGF0aW9uX2pvYic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc0MyBmcm9tICcuL2Fzc2V0cy9tbF9jcmVhdGVfc2luZ2xlX21ldHJpY19qb2InO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NDQgZnJvbSAnLi9hc3NldHMvbWxfZGF0YV92aXN1YWxpemVyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzQ1IGZyb20gJy4vYXNzZXRzL21sX291dGxpZXJfZGV0ZWN0aW9uX2pvYic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc0NiBmcm9tICcuL2Fzc2V0cy9tbF9yZWdyZXNzaW9uX2pvYic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc0NyBmcm9tICcuL2Fzc2V0cy9tb2JpbGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NDggZnJvbSAnLi9hc3NldHMvbW9vbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc0OSBmcm9tICcuL2Fzc2V0cy9uYW1lc3BhY2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NTAgZnJvbSAnLi9hc3NldHMvbmVzdGVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzUxIGZyb20gJy4vYXNzZXRzL25vZGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NTIgZnJvbSAnLi9hc3NldHMvbnVtYmVyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzUzIGZyb20gJy4vYXNzZXRzL29mZmxpbmUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NTQgZnJvbSAnLi9hc3NldHMvb25saW5lJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzU1IGZyb20gJy4vYXNzZXRzL3BhY2thZ2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NTYgZnJvbSAnLi9hc3NldHMvcGFnZVNlbGVjdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc1NyBmcm9tICcuL2Fzc2V0cy9wYWdlc1NlbGVjdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc1OCBmcm9tICcuL2Fzc2V0cy9wYWludCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc1OSBmcm9tICcuL2Fzc2V0cy9wYXBlcl9jbGlwJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzYwIGZyb20gJy4vYXNzZXRzL3BhcnRpYWwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NjEgZnJvbSAnLi9hc3NldHMvcGF1c2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NjIgZnJvbSAnLi9hc3NldHMvcGF5bWVudCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc2MyBmcm9tICcuL2Fzc2V0cy9wZW5jaWwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NjQgZnJvbSAnLi9hc3NldHMvcGVyY2VudCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc2NSBmcm9tICcuL2Fzc2V0cy9waW4nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NjYgZnJvbSAnLi9hc3NldHMvcGluX2ZpbGxlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc2NyBmcm9tICcuL2Fzc2V0cy9wbGF5JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzY4IGZyb20gJy4vYXNzZXRzL3BsYXlGaWxsZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NjkgZnJvbSAnLi9hc3NldHMvcGx1cyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc3MCBmcm9tICcuL2Fzc2V0cy9wbHVzX2luX2NpcmNsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc3MSBmcm9tICcuL2Fzc2V0cy9wbHVzX2luX2NpcmNsZV9maWxsZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NzIgZnJvbSAnLi9hc3NldHMvcG9wb3V0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzczIGZyb20gJy4vYXNzZXRzL3B1c2gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NzQgZnJvbSAnLi9hc3NldHMvcXVlc3Rpb25faW5fY2lyY2xlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzc1IGZyb20gJy4vYXNzZXRzL3F1b3RlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzc2IGZyb20gJy4vYXNzZXRzL3JlZnJlc2gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NzcgZnJvbSAnLi9hc3NldHMvcmVwb3J0ZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NzggZnJvbSAnLi9hc3NldHMvcmV0dXJuX2tleSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc3OSBmcm9tICcuL2Fzc2V0cy9zYXZlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzgwIGZyb20gJy4vYXNzZXRzL3NjYWxlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzgxIGZyb20gJy4vYXNzZXRzL3NlYXJjaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc4MiBmcm9tICcuL2Fzc2V0cy9zZWN1cml0eVNpZ25hbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc4MyBmcm9tICcuL2Fzc2V0cy9zZWN1cml0eVNpZ25hbERldGVjdGVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzg0IGZyb20gJy4vYXNzZXRzL3NlY3VyaXR5U2lnbmFsUmVzb2x2ZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3ODUgZnJvbSAnLi9hc3NldHMvc2Vzc2lvblZpZXdlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc4NiBmcm9tICcuL2Fzc2V0cy9zaGFyZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc4NyBmcm9tICcuL2Fzc2V0cy9zaGFyZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc4OCBmcm9tICcuL2Fzc2V0cy9zbm93Zmxha2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3ODkgZnJvbSAnLi9hc3NldHMvc29ydExlZnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3OTAgZnJvbSAnLi9hc3NldHMvc29ydFJpZ2h0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzkxIGZyb20gJy4vYXNzZXRzL3NvcnRfZG93bic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc5MiBmcm9tICcuL2Fzc2V0cy9zb3J0X3VwJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzkzIGZyb20gJy4vYXNzZXRzL3NvcnRhYmxlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzk0IGZyb20gJy4vYXNzZXRzL3N0YXJQbHVzRW1wdHknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3OTUgZnJvbSAnLi9hc3NldHMvc3RhclBsdXNGaWxsZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3OTYgZnJvbSAnLi9hc3NldHMvc3Rhcl9lbXB0eSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc5NyBmcm9tICcuL2Fzc2V0cy9zdGFyX2VtcHR5X3NwYWNlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzk4IGZyb20gJy4vYXNzZXRzL3N0YXJfZmlsbGVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzk5IGZyb20gJy4vYXNzZXRzL3N0YXJfZmlsbGVkX3NwYWNlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODAwIGZyb20gJy4vYXNzZXRzL3N0YXJfbWludXNfZW1wdHknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MDEgZnJvbSAnLi9hc3NldHMvc3Rhcl9taW51c19maWxsZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MDIgZnJvbSAnLi9hc3NldHMvc3RhdHMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MDMgZnJvbSAnLi9hc3NldHMvc3RvcCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgwNCBmcm9tICcuL2Fzc2V0cy9zdG9wX2ZpbGxlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgwNSBmcm9tICcuL2Fzc2V0cy9zdG9wX3NsYXNoJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODA2IGZyb20gJy4vYXNzZXRzL3N0b3JhZ2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MDcgZnJvbSAnLi9hc3NldHMvc3RyaW5nJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODA4IGZyb20gJy4vYXNzZXRzL3N1Ym1vZHVsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgwOSBmcm9tICcuL2Fzc2V0cy9zdW4nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MTAgZnJvbSAnLi9hc3NldHMvc3dhdGNoX2lucHV0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODExIGZyb20gJy4vYXNzZXRzL3N5bWxpbmsnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MTIgZnJvbSAnLi9hc3NldHMvdGFibGVPZkNvbnRlbnRzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODEzIGZyb20gJy4vYXNzZXRzL3RhYmxlX2RlbnNpdHlfY29tcGFjdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgxNCBmcm9tICcuL2Fzc2V0cy90YWJsZV9kZW5zaXR5X2V4cGFuZGVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODE1IGZyb20gJy4vYXNzZXRzL3RhYmxlX2RlbnNpdHlfbm9ybWFsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODE2IGZyb20gJy4vYXNzZXRzL3RhZyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgxNyBmcm9tICcuL2Fzc2V0cy90ZWFyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODE4IGZyb20gJy4vYXNzZXRzL3RlbXBlcmF0dXJlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODE5IGZyb20gJy4vYXNzZXRzL3RpbWVSZWZyZXNoJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODIwIGZyb20gJy4vYXNzZXRzL3RpbWVsaW5lJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODIxIGZyb20gJy4vYXNzZXRzL3RpbWVzbGlkZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MjIgZnJvbSAnLi9hc3NldHMvdG9rZW5BbGlhcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgyMyBmcm9tICcuL2Fzc2V0cy90b2tlbkFubm90YXRpb24nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MjQgZnJvbSAnLi9hc3NldHMvdG9rZW5BcnJheSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgyNSBmcm9tICcuL2Fzc2V0cy90b2tlbkJpbmFyeSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgyNiBmcm9tICcuL2Fzc2V0cy90b2tlbkJvb2xlYW4nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MjcgZnJvbSAnLi9hc3NldHMvdG9rZW5DbGFzcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgyOCBmcm9tICcuL2Fzc2V0cy90b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MjkgZnJvbSAnLi9hc3NldHMvdG9rZW5Db25zdGFudCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgzMCBmcm9tICcuL2Fzc2V0cy90b2tlbkRhdGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MzEgZnJvbSAnLi9hc3NldHMvdG9rZW5EZW5zZVZlY3Rvcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgzMiBmcm9tICcuL2Fzc2V0cy90b2tlbkVsZW1lbnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MzMgZnJvbSAnLi9hc3NldHMvdG9rZW5FbnVtJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODM0IGZyb20gJy4vYXNzZXRzL3Rva2VuRW51bU1lbWJlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgzNSBmcm9tICcuL2Fzc2V0cy90b2tlbkV2ZW50JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODM2IGZyb20gJy4vYXNzZXRzL3Rva2VuRXhjZXB0aW9uJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODM3IGZyb20gJy4vYXNzZXRzL3Rva2VuRmllbGQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MzggZnJvbSAnLi9hc3NldHMvdG9rZW5GaWxlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODM5IGZyb20gJy4vYXNzZXRzL3Rva2VuRmxhdHRlbmVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODQwIGZyb20gJy4vYXNzZXRzL3Rva2VuRnVuY3Rpb24nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NDEgZnJvbSAnLi9hc3NldHMvdG9rZW5HZW8nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NDIgZnJvbSAnLi9hc3NldHMvdG9rZW5IaXN0b2dyYW0nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NDMgZnJvbSAnLi9hc3NldHMvdG9rZW5JUCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg0NCBmcm9tICcuL2Fzc2V0cy90b2tlbkludGVyZmFjZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg0NSBmcm9tICcuL2Fzc2V0cy90b2tlbkpvaW4nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NDYgZnJvbSAnLi9hc3NldHMvdG9rZW5LZXknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NDcgZnJvbSAnLi9hc3NldHMvdG9rZW5LZXl3b3JkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODQ4IGZyb20gJy4vYXNzZXRzL3Rva2VuTWV0aG9kJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODQ5IGZyb20gJy4vYXNzZXRzL3Rva2VuTWV0cmljQ291bnRlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg1MCBmcm9tICcuL2Fzc2V0cy90b2tlbk1ldHJpY0dhdWdlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODUxIGZyb20gJy4vYXNzZXRzL3Rva2VuTW9kdWxlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODUyIGZyb20gJy4vYXNzZXRzL3Rva2VuTmFtZXNwYWNlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODUzIGZyb20gJy4vYXNzZXRzL3Rva2VuTmVzdGVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODU0IGZyb20gJy4vYXNzZXRzL3Rva2VuTnVsbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg1NSBmcm9tICcuL2Fzc2V0cy90b2tlbk51bWJlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg1NiBmcm9tICcuL2Fzc2V0cy90b2tlbk9iamVjdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg1NyBmcm9tICcuL2Fzc2V0cy90b2tlbk9wZXJhdG9yJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODU4IGZyb20gJy4vYXNzZXRzL3Rva2VuUGFja2FnZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg1OSBmcm9tICcuL2Fzc2V0cy90b2tlblBhcmFtZXRlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg2MCBmcm9tICcuL2Fzc2V0cy90b2tlblBlcmNvbGF0b3InO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NjEgZnJvbSAnLi9hc3NldHMvdG9rZW5Qcm9wZXJ0eSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg2MiBmcm9tICcuL2Fzc2V0cy90b2tlblJhbmdlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODYzIGZyb20gJy4vYXNzZXRzL3Rva2VuUmFua0ZlYXR1cmUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NjQgZnJvbSAnLi9hc3NldHMvdG9rZW5SYW5rRmVhdHVyZXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NjUgZnJvbSAnLi9hc3NldHMvdG9rZW5SZXBvJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODY2IGZyb20gJy4vYXNzZXRzL3Rva2VuU2VhcmNoVHlwZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg2NyBmcm9tICcuL2Fzc2V0cy90b2tlblNoYXBlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODY4IGZyb20gJy4vYXNzZXRzL3Rva2VuU3RyaW5nJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODY5IGZyb20gJy4vYXNzZXRzL3Rva2VuU3RydWN0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODcwIGZyb20gJy4vYXNzZXRzL3Rva2VuU3ltYm9sJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODcxIGZyb20gJy4vYXNzZXRzL3Rva2VuVGFnJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODcyIGZyb20gJy4vYXNzZXRzL3Rva2VuVGV4dCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg3MyBmcm9tICcuL2Fzc2V0cy90b2tlblRva2VuQ291bnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NzQgZnJvbSAnLi9hc3NldHMvdG9rZW5WYXJpYWJsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg3NSBmcm9tICcuL2Fzc2V0cy90cmFpbmluZyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg3NiBmcm9tICcuL2Fzc2V0cy90cmFzaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg3NyBmcm9tICcuL2Fzc2V0cy91bmZvbGQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NzggZnJvbSAnLi9hc3NldHMvdW5saW5rJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODc5IGZyb20gJy4vYXNzZXRzL3VzZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4ODAgZnJvbSAnLi9hc3NldHMvdXNlckF2YXRhcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg4MSBmcm9tICcuL2Fzc2V0cy91c2Vycyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg4MiBmcm9tICcuL2Fzc2V0cy92ZWN0b3InO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4ODMgZnJvbSAnLi9hc3NldHMvdmlkZW9QbGF5ZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4ODQgZnJvbSAnLi9hc3NldHMvdmlzX2FyZWEnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4ODUgZnJvbSAnLi9hc3NldHMvdmlzX2FyZWFfc3RhY2tlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg4NiBmcm9tICcuL2Fzc2V0cy92aXNfYmFyX2hvcml6b250YWwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4ODcgZnJvbSAnLi9hc3NldHMvdmlzX2Jhcl9ob3Jpem9udGFsX3N0YWNrZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4ODggZnJvbSAnLi9hc3NldHMvdmlzX2Jhcl92ZXJ0aWNhbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg4OSBmcm9tICcuL2Fzc2V0cy92aXNfYmFyX3ZlcnRpY2FsX3N0YWNrZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4OTAgZnJvbSAnLi9hc3NldHMvdmlzX2dhdWdlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODkxIGZyb20gJy4vYXNzZXRzL3Zpc19nb2FsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODkyIGZyb20gJy4vYXNzZXRzL3Zpc19saW5lJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODkzIGZyb20gJy4vYXNzZXRzL3Zpc19tYXBfY29vcmRpbmF0ZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg5NCBmcm9tICcuL2Fzc2V0cy92aXNfbWFwX3JlZ2lvbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg5NSBmcm9tICcuL2Fzc2V0cy92aXNfbWV0cmljJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODk2IGZyb20gJy4vYXNzZXRzL3Zpc19waWUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4OTcgZnJvbSAnLi9hc3NldHMvdmlzX3RhYmxlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODk4IGZyb20gJy4vYXNzZXRzL3Zpc190YWdfY2xvdWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4OTkgZnJvbSAnLi9hc3NldHMvdmlzX3RleHQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MDAgZnJvbSAnLi9hc3NldHMvdmlzX3RpbWVsaW9uJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTAxIGZyb20gJy4vYXNzZXRzL3Zpc192ZWdhJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTAyIGZyb20gJy4vYXNzZXRzL3Zpc192aXN1YWxfYnVpbGRlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkwMyBmcm9tICcuL2Fzc2V0cy93b3JkV3JhcCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkwNCBmcm9tICcuL2Fzc2V0cy93b3JkV3JhcERpc2FibGVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTA1IGZyb20gJy4vYXNzZXRzL3dyZW5jaCc7XG5jb25zdCBfRHluYW1pY0ltcG9ydE1vZHVsZU1hcCA9IHsnLi9hc3NldHMvYWNjZXNzaWJpbGl0eS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUwLCcuL2Fzc2V0cy9hZ2dyZWdhdGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMSwnLi9hc3NldHMvYWxlcnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMiwnLi9hc3NldHMvYW5hbHl6ZUV2ZW50LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMsJy4vYXNzZXRzL2FuYWx5emVfZXZlbnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNCwnLi9hc3NldHMvYW5ub3RhdGlvbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1LCcuL2Fzc2V0cy9hcG1fdHJhY2UuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNiwnLi9hc3NldHMvYXBwX2FkZF9kYXRhLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcsJy4vYXNzZXRzL2FwcF9hZHZhbmNlZF9zZXR0aW5ncy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4LCcuL2Fzc2V0cy9hcHBfYWdlbnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlOSwnLi9hc3NldHMvYXBwX2FwbS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMCwnLi9hc3NldHMvYXBwX2FwcF9zZWFyY2guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTEsJy4vYXNzZXRzL2FwcF9hdWRpdGJlYXQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTIsJy4vYXNzZXRzL2FwcF9jYW52YXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTMsJy4vYXNzZXRzL2FwcF9jYXNlcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNCwnLi9hc3NldHMvYXBwX2NvZGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTUsJy4vYXNzZXRzL2FwcF9jb25zb2xlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE2LCcuL2Fzc2V0cy9hcHBfY3Jvc3NfY2x1c3Rlcl9yZXBsaWNhdGlvbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNywnLi9hc3NldHMvYXBwX2Rhc2hib2FyZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxOCwnLi9hc3NldHMvYXBwX2RldnRvb2xzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE5LCcuL2Fzc2V0cy9hcHBfZGlzY292ZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjAsJy4vYXNzZXRzL2FwcF9lbXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjEsJy4vYXNzZXRzL2FwcF9maWxlYmVhdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMiwnLi9hc3NldHMvYXBwX2ZsZWV0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIzLCcuL2Fzc2V0cy9hcHBfZ2lzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI0LCcuL2Fzc2V0cy9hcHBfZ3JhcGguanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjUsJy4vYXNzZXRzL2FwcF9ncm9rLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI2LCcuL2Fzc2V0cy9hcHBfaGVhcnRiZWF0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI3LCcuL2Fzc2V0cy9hcHBfaW5kZXhfbWFuYWdlbWVudC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyOCwnLi9hc3NldHMvYXBwX2luZGV4X3BhdHRlcm4uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjksJy4vYXNzZXRzL2FwcF9pbmRleF9yb2xsdXAuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzAsJy4vYXNzZXRzL2FwcF9sZW5zLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMxLCcuL2Fzc2V0cy9hcHBfbG9ncy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMiwnLi9hc3NldHMvYXBwX21hbmFnZW1lbnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzMsJy4vYXNzZXRzL2FwcF9tZXRyaWNiZWF0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM0LCcuL2Fzc2V0cy9hcHBfbWV0cmljcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNSwnLi9hc3NldHMvYXBwX21sLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM2LCcuL2Fzc2V0cy9hcHBfbW9uaXRvcmluZy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNywnLi9hc3NldHMvYXBwX25vdGVib29rLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM4LCcuL2Fzc2V0cy9hcHBfcGFja2V0YmVhdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzOSwnLi9hc3NldHMvYXBwX3BpcGVsaW5lLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQwLCcuL2Fzc2V0cy9hcHBfcmVjZW50bHlfdmlld2VkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQxLCcuL2Fzc2V0cy9hcHBfcmVwb3J0aW5nLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQyLCcuL2Fzc2V0cy9hcHBfc2F2ZWRfb2JqZWN0cy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MywnLi9hc3NldHMvYXBwX3NlYXJjaF9wcm9maWxlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NCwnLi9hc3NldHMvYXBwX3NlY3VyaXR5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ1LCcuL2Fzc2V0cy9hcHBfc2VjdXJpdHlfYW5hbHl0aWNzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ2LCcuL2Fzc2V0cy9hcHBfc3BhY2VzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ3LCcuL2Fzc2V0cy9hcHBfc3FsLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ4LCcuL2Fzc2V0cy9hcHBfdGltZWxpb24uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDksJy4vYXNzZXRzL2FwcF91cGdyYWRlX2Fzc2lzdGFudC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MCwnLi9hc3NldHMvYXBwX3VwdGltZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MSwnLi9hc3NldHMvYXBwX3VzZXJzX3JvbGVzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUyLCcuL2Fzc2V0cy9hcHBfdmlzdWFsaXplLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUzLCcuL2Fzc2V0cy9hcHBfd2F0Y2hlcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NCwnLi9hc3NldHMvYXBwX3dvcmtwbGFjZV9zZWFyY2guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTUsJy4vYXNzZXRzL2FwcHMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTYsJy4vYXNzZXRzL2Fycm93RW5kLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU3LCcuL2Fzc2V0cy9hcnJvd1N0YXJ0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU4LCcuL2Fzc2V0cy9hcnJvd19kb3duLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU5LCcuL2Fzc2V0cy9hcnJvd19sZWZ0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYwLCcuL2Fzc2V0cy9hcnJvd19yaWdodC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MSwnLi9hc3NldHMvYXJyb3dfdXAuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjIsJy4vYXNzZXRzL2FzdGVyaXNrLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYzLCcuL2Fzc2V0cy9iZWFrZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjQsJy4vYXNzZXRzL2JlbGwuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjUsJy4vYXNzZXRzL2JlbGxTbGFzaC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NiwnLi9hc3NldHMvYm9sdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NywnLi9hc3NldHMvYm94ZXNfaG9yaXpvbnRhbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2OCwnLi9hc3NldHMvYm94ZXNfdmVydGljYWwuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjksJy4vYXNzZXRzL2JyYW5jaC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MCwnLi9hc3NldHMvYnJhbmNoVXNlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MSwnLi9hc3NldHMvYnJvb20uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzIsJy4vYXNzZXRzL2JydXNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTczLCcuL2Fzc2V0cy9idWcuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzQsJy4vYXNzZXRzL2J1bGxzZXllLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc1LCcuL2Fzc2V0cy9jYWxlbmRhci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NiwnLi9hc3NldHMvY2hlY2suanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzcsJy4vYXNzZXRzL2NoZWNrSW5DaXJjbGVGaWxsZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzgsJy4vYXNzZXRzL2NoZWVyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc5LCcuL2Fzc2V0cy9jbG9jay5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MCwnLi9hc3NldHMvY2xvdWREcml6emxlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgxLCcuL2Fzc2V0cy9jbG91ZFN0b3JteS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MiwnLi9hc3NldHMvY2xvdWRTdW5ueS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MywnLi9hc3NldHMvY2x1c3Rlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NCwnLi9hc3NldHMvY29sb3IuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlODUsJy4vYXNzZXRzL2NvbXB1dGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlODYsJy4vYXNzZXRzL2NvbnNvbGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlODcsJy4vYXNzZXRzL2NvbnRhaW5lci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4OCwnLi9hc3NldHMvY29udGludWl0eUFib3ZlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg5LCcuL2Fzc2V0cy9jb250aW51aXR5QWJvdmVCZWxvdy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MCwnLi9hc3NldHMvY29udGludWl0eUJlbG93LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTkxLCcuL2Fzc2V0cy9jb250aW51aXR5V2l0aGluLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTkyLCcuL2Fzc2V0cy9jb250cm9sc19ob3Jpem9udGFsLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTkzLCcuL2Fzc2V0cy9jb250cm9sc192ZXJ0aWNhbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5NCwnLi9hc3NldHMvY29weS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5NSwnLi9hc3NldHMvY29weV9jbGlwYm9hcmQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTYsJy4vYXNzZXRzL2Nyb3NzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk3LCcuL2Fzc2V0cy9jcm9zc0luQUNpcmNsZUZpbGxlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5OCwnLi9hc3NldHMvY3Jvc3NoYWlycy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5OSwnLi9hc3NldHMvY3VycmVuY3kuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTAwLCcuL2Fzc2V0cy9jdXQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTAxLCcuL2Fzc2V0cy9kYXRhYmFzZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMDIsJy4vYXNzZXRzL2Rlc2t0b3AuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTAzLCcuL2Fzc2V0cy9kb2N1bWVudC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMDQsJy4vYXNzZXRzL2RvY3VtZW50RWRpdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMDUsJy4vYXNzZXRzL2RvY3VtZW50YXRpb24uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTA2LCcuL2Fzc2V0cy9kb2N1bWVudHMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTA3LCcuL2Fzc2V0cy9kb3QuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTA4LCcuL2Fzc2V0cy9kb3VibGVBcnJvd0xlZnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTA5LCcuL2Fzc2V0cy9kb3VibGVBcnJvd1JpZ2h0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTExMCwnLi9hc3NldHMvZG93bmxvYWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTExLCcuL2Fzc2V0cy9lZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMTIsJy4vYXNzZXRzL2VkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMTMsJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnbkJvdHRvbS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMTQsJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnbkNlbnRlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMTUsJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnbkxlZnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTE2LCcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25NaWRkbGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTE3LCcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25SaWdodC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMTgsJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnblRvcC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMTksJy4vYXNzZXRzL2VkaXRvclBvc2l0aW9uQm90dG9tTGVmdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMjAsJy4vYXNzZXRzL2VkaXRvclBvc2l0aW9uQm90dG9tUmlnaHQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTIxLCcuL2Fzc2V0cy9lZGl0b3JQb3NpdGlvblRvcExlZnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTIyLCcuL2Fzc2V0cy9lZGl0b3JQb3NpdGlvblRvcFJpZ2h0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEyMywnLi9hc3NldHMvZWRpdG9yX2FsaWduX2NlbnRlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMjQsJy4vYXNzZXRzL2VkaXRvcl9hbGlnbl9sZWZ0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEyNSwnLi9hc3NldHMvZWRpdG9yX2FsaWduX3JpZ2h0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEyNiwnLi9hc3NldHMvZWRpdG9yX2JvbGQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTI3LCcuL2Fzc2V0cy9lZGl0b3JfY2hlY2tsaXN0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEyOCwnLi9hc3NldHMvZWRpdG9yX2NvZGVfYmxvY2suanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTI5LCcuL2Fzc2V0cy9lZGl0b3JfY29tbWVudC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMzAsJy4vYXNzZXRzL2VkaXRvcl9oZWFkaW5nLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEzMSwnLi9hc3NldHMvZWRpdG9yX2l0YWxpYy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMzIsJy4vYXNzZXRzL2VkaXRvcl9saW5rLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEzMywnLi9hc3NldHMvZWRpdG9yX29yZGVyZWRfbGlzdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMzQsJy4vYXNzZXRzL2VkaXRvcl9yZWRvLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEzNSwnLi9hc3NldHMvZWRpdG9yX3N0cmlrZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMzYsJy4vYXNzZXRzL2VkaXRvcl90YWJsZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMzcsJy4vYXNzZXRzL2VkaXRvcl91bmRlcmxpbmUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTM4LCcuL2Fzc2V0cy9lZGl0b3JfdW5kby5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMzksJy4vYXNzZXRzL2VkaXRvcl91bm9yZGVyZWRfbGlzdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNDAsJy4vYXNzZXRzL2VtYWlsLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE0MSwnLi9hc3NldHMvZW1wdHkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTQyLCcuL2Fzc2V0cy9lcWwuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTQzLCcuL2Fzc2V0cy9lcmFzZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTQ0LCcuL2Fzc2V0cy9leGl0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE0NSwnLi9hc3NldHMvZXhwYW5kLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE0NiwnLi9hc3NldHMvZXhwYW5kTWluaS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNDcsJy4vYXNzZXRzL2V4cG9ydC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNDgsJy4vYXNzZXRzL2V5ZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNDksJy4vYXNzZXRzL2V5ZV9jbG9zZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTUwLCcuL2Fzc2V0cy9mYWNlX2hhcHB5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE1MSwnLi9hc3NldHMvZmFjZV9uZXV0cmFsLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE1MiwnLi9hc3NldHMvZmFjZV9zYWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTUzLCcuL2Fzc2V0cy9maWx0ZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTU0LCcuL2Fzc2V0cy9mbGFnLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE1NSwnLi9hc3NldHMvZm9sZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNTYsJy4vYXNzZXRzL2ZvbGRlcl9jaGVjay5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNTcsJy4vYXNzZXRzL2ZvbGRlcl9jbG9zZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTU4LCcuL2Fzc2V0cy9mb2xkZXJfZXhjbGFtYXRpb24uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTU5LCcuL2Fzc2V0cy9mb2xkZXJfb3Blbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNjAsJy4vYXNzZXRzL2ZyYW1lTmV4dC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNjEsJy4vYXNzZXRzL2ZyYW1lUHJldmlvdXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTYyLCcuL2Fzc2V0cy9mdWxsU2NyZWVuRXhpdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNjMsJy4vYXNzZXRzL2Z1bGxfc2NyZWVuLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE2NCwnLi9hc3NldHMvZnVuY3Rpb24uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTY1LCcuL2Fzc2V0cy9nZWFyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE2NiwnLi9hc3NldHMvZ2xhc3Nlcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNjcsJy4vYXNzZXRzL2dsb2JlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE2OCwnLi9hc3NldHMvZ3JhYi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNjksJy4vYXNzZXRzL2dyYWJfaG9yaXpvbnRhbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNzAsJy4vYXNzZXRzL2dyaWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTcxLCcuL2Fzc2V0cy9oZWFydC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNzIsJy4vYXNzZXRzL2hlYXRtYXAuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTczLCcuL2Fzc2V0cy9oZWxwLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE3NCwnLi9hc3NldHMvaG9tZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNzUsJy4vYXNzZXRzL2lJbkNpcmNsZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNzYsJy4vYXNzZXRzL2ltYWdlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE3NywnLi9hc3NldHMvaW1wb3J0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE3OCwnLi9hc3NldHMvaW5kZXhfY2xvc2UuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTc5LCcuL2Fzc2V0cy9pbmRleF9lZGl0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE4MCwnLi9hc3NldHMvaW5kZXhfZmx1c2guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTgxLCcuL2Fzc2V0cy9pbmRleF9tYXBwaW5nLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE4MiwnLi9hc3NldHMvaW5kZXhfb3Blbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxODMsJy4vYXNzZXRzL2luZGV4X3J1bnRpbWUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTg0LCcuL2Fzc2V0cy9pbmRleF9zZXR0aW5ncy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxODUsJy4vYXNzZXRzL2lucHV0T3V0cHV0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE4NiwnLi9hc3NldHMvaW5zcGVjdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxODcsJy4vYXNzZXRzL2ludmVydC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxODgsJy4vYXNzZXRzL2lwLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE4OSwnLi9hc3NldHMva2V5Ym9hcmQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTkwLCcuL2Fzc2V0cy9rcWxfZmllbGQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTkxLCcuL2Fzc2V0cy9rcWxfZnVuY3Rpb24uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTkyLCcuL2Fzc2V0cy9rcWxfb3BlcmFuZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxOTMsJy4vYXNzZXRzL2txbF9zZWxlY3Rvci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxOTQsJy4vYXNzZXRzL2txbF92YWx1ZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxOTUsJy4vYXNzZXRzL2t1YmVybmV0ZXNOb2RlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE5NiwnLi9hc3NldHMva3ViZXJuZXRlc1BvZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxOTcsJy4vYXNzZXRzL2xheWVycy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxOTgsJy4vYXNzZXRzL2xldHRlcmluZy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxOTksJy4vYXNzZXRzL2xpbmVEYXNoZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjAwLCcuL2Fzc2V0cy9saW5lRG90dGVkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIwMSwnLi9hc3NldHMvbGluZVNvbGlkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIwMiwnLi9hc3NldHMvbGluay5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMDMsJy4vYXNzZXRzL2xpc3QuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjA0LCcuL2Fzc2V0cy9saXN0X2FkZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMDUsJy4vYXNzZXRzL2xvY2suanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjA2LCcuL2Fzc2V0cy9sb2NrT3Blbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMDcsJy4vYXNzZXRzL2xvZ29fYWVyb3NwaWtlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIwOCwnLi9hc3NldHMvbG9nb19hcGFjaGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjA5LCcuL2Fzc2V0cy9sb2dvX2FwcF9zZWFyY2guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjEwLCcuL2Fzc2V0cy9sb2dvX2F3cy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMTEsJy4vYXNzZXRzL2xvZ29fYXdzX21vbm8uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjEyLCcuL2Fzc2V0cy9sb2dvX2F6dXJlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIxMywnLi9hc3NldHMvbG9nb19henVyZV9tb25vLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIxNCwnLi9hc3NldHMvbG9nb19iZWF0cy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMTUsJy4vYXNzZXRzL2xvZ29fYnVzaW5lc3NfYW5hbHl0aWNzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIxNiwnLi9hc3NldHMvbG9nb19jZXBoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIxNywnLi9hc3NldHMvbG9nb19jbG91ZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMTgsJy4vYXNzZXRzL2xvZ29fY2xvdWRfZWNlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIxOSwnLi9hc3NldHMvbG9nb19jb2RlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIyMCwnLi9hc3NldHMvbG9nb19jb2Rlc2FuZGJveC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMjEsJy4vYXNzZXRzL2xvZ29fY291Y2hiYXNlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIyMiwnLi9hc3NldHMvbG9nb19kb2NrZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjIzLCcuL2Fzc2V0cy9sb2dvX2Ryb3B3aXphcmQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjI0LCcuL2Fzc2V0cy9sb2dvX2VsYXN0aWMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjI1LCcuL2Fzc2V0cy9sb2dvX2VsYXN0aWNfc3RhY2suanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjI2LCcuL2Fzc2V0cy9sb2dvX2VsYXN0aWNzZWFyY2guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjI3LCcuL2Fzc2V0cy9sb2dvX2VudGVycHJpc2Vfc2VhcmNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIyOCwnLi9hc3NldHMvbG9nb19ldGNkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIyOSwnLi9hc3NldHMvbG9nb19nY3AuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjMwLCcuL2Fzc2V0cy9sb2dvX2djcF9tb25vLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIzMSwnLi9hc3NldHMvbG9nb19naXRodWIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjMyLCcuL2Fzc2V0cy9sb2dvX2dtYWlsLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIzMywnLi9hc3NldHMvbG9nb19nb2xhbmcuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjM0LCcuL2Fzc2V0cy9sb2dvX2dvb2dsZV9nLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIzNSwnLi9hc3NldHMvbG9nb19oYXByb3h5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIzNiwnLi9hc3NldHMvbG9nb19pYm0uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjM3LCcuL2Fzc2V0cy9sb2dvX2libV9tb25vLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIzOCwnLi9hc3NldHMvbG9nb19rYWZrYS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMzksJy4vYXNzZXRzL2xvZ29fa2liYW5hLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI0MCwnLi9hc3NldHMvbG9nb19rdWJlcm5ldGVzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI0MSwnLi9hc3NldHMvbG9nb19sb2dnaW5nLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI0MiwnLi9hc3NldHMvbG9nb19sb2dzdGFzaC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNDMsJy4vYXNzZXRzL2xvZ29fbWFwcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNDQsJy4vYXNzZXRzL2xvZ29fbWVtY2FjaGVkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI0NSwnLi9hc3NldHMvbG9nb19tZXRyaWNzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI0NiwnLi9hc3NldHMvbG9nb19tb25nb2RiLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI0NywnLi9hc3NldHMvbG9nb19teXNxbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNDgsJy4vYXNzZXRzL2xvZ29fbmdpbnguanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjQ5LCcuL2Fzc2V0cy9sb2dvX29ic2VydmFiaWxpdHkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjUwLCcuL2Fzc2V0cy9sb2dvX29zcXVlcnkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjUxLCcuL2Fzc2V0cy9sb2dvX3BocC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNTIsJy4vYXNzZXRzL2xvZ29fcG9zdGdyZXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjUzLCcuL2Fzc2V0cy9sb2dvX3Byb21ldGhldXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjU0LCcuL2Fzc2V0cy9sb2dvX3JhYmJpdG1xLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI1NSwnLi9hc3NldHMvbG9nb19yZWRpcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNTYsJy4vYXNzZXRzL2xvZ29fc2VjdXJpdHkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjU3LCcuL2Fzc2V0cy9sb2dvX3NpdGVfc2VhcmNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI1OCwnLi9hc3NldHMvbG9nb19za2V0Y2guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjU5LCcuL2Fzc2V0cy9sb2dvX3NsYWNrLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI2MCwnLi9hc3NldHMvbG9nb191cHRpbWUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjYxLCcuL2Fzc2V0cy9sb2dvX3dlYmhvb2suanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjYyLCcuL2Fzc2V0cy9sb2dvX3dpbmRvd3MuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjYzLCcuL2Fzc2V0cy9sb2dvX3dvcmtwbGFjZV9zZWFyY2guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjY0LCcuL2Fzc2V0cy9sb2dzdGFzaF9maWx0ZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjY1LCcuL2Fzc2V0cy9sb2dzdGFzaF9pZi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNjYsJy4vYXNzZXRzL2xvZ3N0YXNoX2lucHV0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI2NywnLi9hc3NldHMvbG9nc3Rhc2hfb3V0cHV0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI2OCwnLi9hc3NldHMvbG9nc3Rhc2hfcXVldWUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjY5LCcuL2Fzc2V0cy9tYWduZXQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjcwLCcuL2Fzc2V0cy9tYWduaWZ5V2l0aEV4Y2xhbWF0aW9uLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI3MSwnLi9hc3NldHMvbWFnbmlmeVdpdGhNaW51cy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNzIsJy4vYXNzZXRzL21hZ25pZnlXaXRoUGx1cy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNzMsJy4vYXNzZXRzL21hcF9tYXJrZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjc0LCcuL2Fzc2V0cy9tZW1vcnkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjc1LCcuL2Fzc2V0cy9tZW51LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI3NiwnLi9hc3NldHMvbWVudURvd24uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjc3LCcuL2Fzc2V0cy9tZW51TGVmdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNzgsJy4vYXNzZXRzL21lbnVSaWdodC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNzksJy4vYXNzZXRzL21lbnVVcC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyODAsJy4vYXNzZXRzL21lcmdlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI4MSwnLi9hc3NldHMvbWluaW1pemUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjgyLCcuL2Fzc2V0cy9taW51cy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyODMsJy4vYXNzZXRzL21pbnVzX2luX2NpcmNsZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyODQsJy4vYXNzZXRzL21pbnVzX2luX2NpcmNsZV9maWxsZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjg1LCcuL2Fzc2V0cy9tbF9jbGFzc2lmaWNhdGlvbl9qb2IuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjg2LCcuL2Fzc2V0cy9tbF9jcmVhdGVfYWR2YW5jZWRfam9iLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI4NywnLi9hc3NldHMvbWxfY3JlYXRlX211bHRpX21ldHJpY19qb2IuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjg4LCcuL2Fzc2V0cy9tbF9jcmVhdGVfcG9wdWxhdGlvbl9qb2IuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjg5LCcuL2Fzc2V0cy9tbF9jcmVhdGVfc2luZ2xlX21ldHJpY19qb2IuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjkwLCcuL2Fzc2V0cy9tbF9kYXRhX3Zpc3VhbGl6ZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjkxLCcuL2Fzc2V0cy9tbF9vdXRsaWVyX2RldGVjdGlvbl9qb2IuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjkyLCcuL2Fzc2V0cy9tbF9yZWdyZXNzaW9uX2pvYi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyOTMsJy4vYXNzZXRzL21vYmlsZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyOTQsJy4vYXNzZXRzL21vb24uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjk1LCcuL2Fzc2V0cy9uYW1lc3BhY2UuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjk2LCcuL2Fzc2V0cy9uZXN0ZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjk3LCcuL2Fzc2V0cy9ub2RlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI5OCwnLi9hc3NldHMvbnVtYmVyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI5OSwnLi9hc3NldHMvb2ZmbGluZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMDAsJy4vYXNzZXRzL29ubGluZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMDEsJy4vYXNzZXRzL3BhY2thZ2UuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzAyLCcuL2Fzc2V0cy9wYWdlU2VsZWN0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMwMywnLi9hc3NldHMvcGFnZXNTZWxlY3QuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzA0LCcuL2Fzc2V0cy9wYWludC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMDUsJy4vYXNzZXRzL3BhcGVyX2NsaXAuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzA2LCcuL2Fzc2V0cy9wYXJ0aWFsLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMwNywnLi9hc3NldHMvcGF1c2UuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzA4LCcuL2Fzc2V0cy9wYXltZW50LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMwOSwnLi9hc3NldHMvcGVuY2lsLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMxMCwnLi9hc3NldHMvcGVyY2VudC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMTEsJy4vYXNzZXRzL3Bpbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMTIsJy4vYXNzZXRzL3Bpbl9maWxsZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzEzLCcuL2Fzc2V0cy9wbGF5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMxNCwnLi9hc3NldHMvcGxheUZpbGxlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMTUsJy4vYXNzZXRzL3BsdXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzE2LCcuL2Fzc2V0cy9wbHVzX2luX2NpcmNsZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMTcsJy4vYXNzZXRzL3BsdXNfaW5fY2lyY2xlX2ZpbGxlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMTgsJy4vYXNzZXRzL3BvcG91dC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMTksJy4vYXNzZXRzL3B1c2guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzIwLCcuL2Fzc2V0cy9xdWVzdGlvbl9pbl9jaXJjbGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzIxLCcuL2Fzc2V0cy9xdW90ZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMjIsJy4vYXNzZXRzL3JlZnJlc2guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzIzLCcuL2Fzc2V0cy9yZXBvcnRlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMjQsJy4vYXNzZXRzL3JldHVybl9rZXkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzI1LCcuL2Fzc2V0cy9zYXZlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMyNiwnLi9hc3NldHMvc2NhbGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzI3LCcuL2Fzc2V0cy9zZWFyY2guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzI4LCcuL2Fzc2V0cy9zZWN1cml0eVNpZ25hbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMjksJy4vYXNzZXRzL3NlY3VyaXR5U2lnbmFsRGV0ZWN0ZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzMwLCcuL2Fzc2V0cy9zZWN1cml0eVNpZ25hbFJlc29sdmVkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMzMSwnLi9hc3NldHMvc2Vzc2lvblZpZXdlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMzIsJy4vYXNzZXRzL3NoYXJkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMzMywnLi9hc3NldHMvc2hhcmUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzM0LCcuL2Fzc2V0cy9zbm93Zmxha2UuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzM1LCcuL2Fzc2V0cy9zb3J0TGVmdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMzYsJy4vYXNzZXRzL3NvcnRSaWdodC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMzcsJy4vYXNzZXRzL3NvcnRfZG93bi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMzgsJy4vYXNzZXRzL3NvcnRfdXAuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzM5LCcuL2Fzc2V0cy9zb3J0YWJsZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNDAsJy4vYXNzZXRzL3N0YXJQbHVzRW1wdHkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzQxLCcuL2Fzc2V0cy9zdGFyUGx1c0ZpbGxlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNDIsJy4vYXNzZXRzL3N0YXJfZW1wdHkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzQzLCcuL2Fzc2V0cy9zdGFyX2VtcHR5X3NwYWNlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM0NCwnLi9hc3NldHMvc3Rhcl9maWxsZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzQ1LCcuL2Fzc2V0cy9zdGFyX2ZpbGxlZF9zcGFjZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNDYsJy4vYXNzZXRzL3N0YXJfbWludXNfZW1wdHkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzQ3LCcuL2Fzc2V0cy9zdGFyX21pbnVzX2ZpbGxlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNDgsJy4vYXNzZXRzL3N0YXRzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM0OSwnLi9hc3NldHMvc3RvcC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNTAsJy4vYXNzZXRzL3N0b3BfZmlsbGVkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM1MSwnLi9hc3NldHMvc3RvcF9zbGFzaC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNTIsJy4vYXNzZXRzL3N0b3JhZ2UuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzUzLCcuL2Fzc2V0cy9zdHJpbmcuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzU0LCcuL2Fzc2V0cy9zdWJtb2R1bGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzU1LCcuL2Fzc2V0cy9zdW4uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzU2LCcuL2Fzc2V0cy9zd2F0Y2hfaW5wdXQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzU3LCcuL2Fzc2V0cy9zeW1saW5rLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM1OCwnLi9hc3NldHMvdGFibGVPZkNvbnRlbnRzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM1OSwnLi9hc3NldHMvdGFibGVfZGVuc2l0eV9jb21wYWN0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM2MCwnLi9hc3NldHMvdGFibGVfZGVuc2l0eV9leHBhbmRlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNjEsJy4vYXNzZXRzL3RhYmxlX2RlbnNpdHlfbm9ybWFsLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM2MiwnLi9hc3NldHMvdGFnLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM2MywnLi9hc3NldHMvdGVhci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNjQsJy4vYXNzZXRzL3RlbXBlcmF0dXJlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM2NSwnLi9hc3NldHMvdGltZVJlZnJlc2guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzY2LCcuL2Fzc2V0cy90aW1lbGluZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNjcsJy4vYXNzZXRzL3RpbWVzbGlkZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzY4LCcuL2Fzc2V0cy90b2tlbkFsaWFzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM2OSwnLi9hc3NldHMvdG9rZW5Bbm5vdGF0aW9uLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM3MCwnLi9hc3NldHMvdG9rZW5BcnJheS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNzEsJy4vYXNzZXRzL3Rva2VuQmluYXJ5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM3MiwnLi9hc3NldHMvdG9rZW5Cb29sZWFuLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM3MywnLi9hc3NldHMvdG9rZW5DbGFzcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNzQsJy4vYXNzZXRzL3Rva2VuQ29tcGxldGlvblN1Z2dlc3Rlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNzUsJy4vYXNzZXRzL3Rva2VuQ29uc3RhbnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzc2LCcuL2Fzc2V0cy90b2tlbkRhdGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzc3LCcuL2Fzc2V0cy90b2tlbkRlbnNlVmVjdG9yLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM3OCwnLi9hc3NldHMvdG9rZW5FbGVtZW50LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM3OSwnLi9hc3NldHMvdG9rZW5FbnVtLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM4MCwnLi9hc3NldHMvdG9rZW5FbnVtTWVtYmVyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM4MSwnLi9hc3NldHMvdG9rZW5FdmVudC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzODIsJy4vYXNzZXRzL3Rva2VuRXhjZXB0aW9uLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM4MywnLi9hc3NldHMvdG9rZW5GaWVsZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzODQsJy4vYXNzZXRzL3Rva2VuRmlsZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzODUsJy4vYXNzZXRzL3Rva2VuRmxhdHRlbmVkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM4NiwnLi9hc3NldHMvdG9rZW5GdW5jdGlvbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzODcsJy4vYXNzZXRzL3Rva2VuR2VvLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM4OCwnLi9hc3NldHMvdG9rZW5IaXN0b2dyYW0uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzg5LCcuL2Fzc2V0cy90b2tlbklQLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM5MCwnLi9hc3NldHMvdG9rZW5JbnRlcmZhY2UuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzkxLCcuL2Fzc2V0cy90b2tlbkpvaW4uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzkyLCcuL2Fzc2V0cy90b2tlbktleS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzOTMsJy4vYXNzZXRzL3Rva2VuS2V5d29yZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzOTQsJy4vYXNzZXRzL3Rva2VuTWV0aG9kLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM5NSwnLi9hc3NldHMvdG9rZW5NZXRyaWNDb3VudGVyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM5NiwnLi9hc3NldHMvdG9rZW5NZXRyaWNHYXVnZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzOTcsJy4vYXNzZXRzL3Rva2VuTW9kdWxlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM5OCwnLi9hc3NldHMvdG9rZW5OYW1lc3BhY2UuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzk5LCcuL2Fzc2V0cy90b2tlbk5lc3RlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MDAsJy4vYXNzZXRzL3Rva2VuTnVsbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MDEsJy4vYXNzZXRzL3Rva2VuTnVtYmVyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQwMiwnLi9hc3NldHMvdG9rZW5PYmplY3QuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDAzLCcuL2Fzc2V0cy90b2tlbk9wZXJhdG9yLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQwNCwnLi9hc3NldHMvdG9rZW5QYWNrYWdlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQwNSwnLi9hc3NldHMvdG9rZW5QYXJhbWV0ZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDA2LCcuL2Fzc2V0cy90b2tlblBlcmNvbGF0b3IuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDA3LCcuL2Fzc2V0cy90b2tlblByb3BlcnR5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQwOCwnLi9hc3NldHMvdG9rZW5SYW5nZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MDksJy4vYXNzZXRzL3Rva2VuUmFua0ZlYXR1cmUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDEwLCcuL2Fzc2V0cy90b2tlblJhbmtGZWF0dXJlcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MTEsJy4vYXNzZXRzL3Rva2VuUmVwby5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MTIsJy4vYXNzZXRzL3Rva2VuU2VhcmNoVHlwZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MTMsJy4vYXNzZXRzL3Rva2VuU2hhcGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDE0LCcuL2Fzc2V0cy90b2tlblN0cmluZy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MTUsJy4vYXNzZXRzL3Rva2VuU3RydWN0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQxNiwnLi9hc3NldHMvdG9rZW5TeW1ib2wuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDE3LCcuL2Fzc2V0cy90b2tlblRhZy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MTgsJy4vYXNzZXRzL3Rva2VuVGV4dC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MTksJy4vYXNzZXRzL3Rva2VuVG9rZW5Db3VudC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MjAsJy4vYXNzZXRzL3Rva2VuVmFyaWFibGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDIxLCcuL2Fzc2V0cy90cmFpbmluZy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MjIsJy4vYXNzZXRzL3RyYXNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQyMywnLi9hc3NldHMvdW5mb2xkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQyNCwnLi9hc3NldHMvdW5saW5rLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQyNSwnLi9hc3NldHMvdXNlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MjYsJy4vYXNzZXRzL3VzZXJBdmF0YXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDI3LCcuL2Fzc2V0cy91c2Vycy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MjgsJy4vYXNzZXRzL3ZlY3Rvci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MjksJy4vYXNzZXRzL3ZpZGVvUGxheWVyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQzMCwnLi9hc3NldHMvdmlzX2FyZWEuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDMxLCcuL2Fzc2V0cy92aXNfYXJlYV9zdGFja2VkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQzMiwnLi9hc3NldHMvdmlzX2Jhcl9ob3Jpem9udGFsLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQzMywnLi9hc3NldHMvdmlzX2Jhcl9ob3Jpem9udGFsX3N0YWNrZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDM0LCcuL2Fzc2V0cy92aXNfYmFyX3ZlcnRpY2FsLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQzNSwnLi9hc3NldHMvdmlzX2Jhcl92ZXJ0aWNhbF9zdGFja2VkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQzNiwnLi9hc3NldHMvdmlzX2dhdWdlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQzNywnLi9hc3NldHMvdmlzX2dvYWwuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDM4LCcuL2Fzc2V0cy92aXNfbGluZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MzksJy4vYXNzZXRzL3Zpc19tYXBfY29vcmRpbmF0ZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NDAsJy4vYXNzZXRzL3Zpc19tYXBfcmVnaW9uLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ0MSwnLi9hc3NldHMvdmlzX21ldHJpYy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NDIsJy4vYXNzZXRzL3Zpc19waWUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDQzLCcuL2Fzc2V0cy92aXNfdGFibGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDQ0LCcuL2Fzc2V0cy92aXNfdGFnX2Nsb3VkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ0NSwnLi9hc3NldHMvdmlzX3RleHQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDQ2LCcuL2Fzc2V0cy92aXNfdGltZWxpb24uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDQ3LCcuL2Fzc2V0cy92aXNfdmVnYS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NDgsJy4vYXNzZXRzL3Zpc192aXN1YWxfYnVpbGRlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NDksJy4vYXNzZXRzL3dvcmRXcmFwLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ1MCwnLi9hc3NldHMvd29yZFdyYXBEaXNhYmxlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NTEsJy4vYXNzZXRzL3dyZW5jaC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NTIsJy4vYXNzZXRzL2FjY2Vzc2liaWxpdHknOl9EeW5hbWljSW1wb3J0TW9kdWxlNDUzLCcuL2Fzc2V0cy9hZ2dyZWdhdGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDU0LCcuL2Fzc2V0cy9hbGVydCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NTUsJy4vYXNzZXRzL2FuYWx5emVFdmVudCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NTYsJy4vYXNzZXRzL2FuYWx5emVfZXZlbnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDU3LCcuL2Fzc2V0cy9hbm5vdGF0aW9uJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ1OCwnLi9hc3NldHMvYXBtX3RyYWNlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ1OSwnLi9hc3NldHMvYXBwX2FkZF9kYXRhJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ2MCwnLi9hc3NldHMvYXBwX2FkdmFuY2VkX3NldHRpbmdzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ2MSwnLi9hc3NldHMvYXBwX2FnZW50JzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ2MiwnLi9hc3NldHMvYXBwX2FwbSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NjMsJy4vYXNzZXRzL2FwcF9hcHBfc2VhcmNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ2NCwnLi9hc3NldHMvYXBwX2F1ZGl0YmVhdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NjUsJy4vYXNzZXRzL2FwcF9jYW52YXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDY2LCcuL2Fzc2V0cy9hcHBfY2FzZXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDY3LCcuL2Fzc2V0cy9hcHBfY29kZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NjgsJy4vYXNzZXRzL2FwcF9jb25zb2xlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ2OSwnLi9hc3NldHMvYXBwX2Nyb3NzX2NsdXN0ZXJfcmVwbGljYXRpb24nOl9EeW5hbWljSW1wb3J0TW9kdWxlNDcwLCcuL2Fzc2V0cy9hcHBfZGFzaGJvYXJkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ3MSwnLi9hc3NldHMvYXBwX2RldnRvb2xzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ3MiwnLi9hc3NldHMvYXBwX2Rpc2NvdmVyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ3MywnLi9hc3NldHMvYXBwX2Vtcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NzQsJy4vYXNzZXRzL2FwcF9maWxlYmVhdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NzUsJy4vYXNzZXRzL2FwcF9mbGVldCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NzYsJy4vYXNzZXRzL2FwcF9naXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDc3LCcuL2Fzc2V0cy9hcHBfZ3JhcGgnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDc4LCcuL2Fzc2V0cy9hcHBfZ3Jvayc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NzksJy4vYXNzZXRzL2FwcF9oZWFydGJlYXQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDgwLCcuL2Fzc2V0cy9hcHBfaW5kZXhfbWFuYWdlbWVudCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0ODEsJy4vYXNzZXRzL2FwcF9pbmRleF9wYXR0ZXJuJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ4MiwnLi9hc3NldHMvYXBwX2luZGV4X3JvbGx1cCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0ODMsJy4vYXNzZXRzL2FwcF9sZW5zJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ4NCwnLi9hc3NldHMvYXBwX2xvZ3MnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDg1LCcuL2Fzc2V0cy9hcHBfbWFuYWdlbWVudCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0ODYsJy4vYXNzZXRzL2FwcF9tZXRyaWNiZWF0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ4NywnLi9hc3NldHMvYXBwX21ldHJpY3MnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDg4LCcuL2Fzc2V0cy9hcHBfbWwnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDg5LCcuL2Fzc2V0cy9hcHBfbW9uaXRvcmluZyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0OTAsJy4vYXNzZXRzL2FwcF9ub3RlYm9vayc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0OTEsJy4vYXNzZXRzL2FwcF9wYWNrZXRiZWF0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ5MiwnLi9hc3NldHMvYXBwX3BpcGVsaW5lJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ5MywnLi9hc3NldHMvYXBwX3JlY2VudGx5X3ZpZXdlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0OTQsJy4vYXNzZXRzL2FwcF9yZXBvcnRpbmcnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDk1LCcuL2Fzc2V0cy9hcHBfc2F2ZWRfb2JqZWN0cyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0OTYsJy4vYXNzZXRzL2FwcF9zZWFyY2hfcHJvZmlsZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlNDk3LCcuL2Fzc2V0cy9hcHBfc2VjdXJpdHknOl9EeW5hbWljSW1wb3J0TW9kdWxlNDk4LCcuL2Fzc2V0cy9hcHBfc2VjdXJpdHlfYW5hbHl0aWNzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ5OSwnLi9hc3NldHMvYXBwX3NwYWNlcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MDAsJy4vYXNzZXRzL2FwcF9zcWwnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTAxLCcuL2Fzc2V0cy9hcHBfdGltZWxpb24nOl9EeW5hbWljSW1wb3J0TW9kdWxlNTAyLCcuL2Fzc2V0cy9hcHBfdXBncmFkZV9hc3Npc3RhbnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTAzLCcuL2Fzc2V0cy9hcHBfdXB0aW1lJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUwNCwnLi9hc3NldHMvYXBwX3VzZXJzX3JvbGVzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUwNSwnLi9hc3NldHMvYXBwX3Zpc3VhbGl6ZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MDYsJy4vYXNzZXRzL2FwcF93YXRjaGVzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUwNywnLi9hc3NldHMvYXBwX3dvcmtwbGFjZV9zZWFyY2gnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTA4LCcuL2Fzc2V0cy9hcHBzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUwOSwnLi9hc3NldHMvYXJyb3dFbmQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTEwLCcuL2Fzc2V0cy9hcnJvd1N0YXJ0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTUxMSwnLi9hc3NldHMvYXJyb3dfZG93bic6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MTIsJy4vYXNzZXRzL2Fycm93X2xlZnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTEzLCcuL2Fzc2V0cy9hcnJvd19yaWdodCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MTQsJy4vYXNzZXRzL2Fycm93X3VwJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUxNSwnLi9hc3NldHMvYXN0ZXJpc2snOl9EeW5hbWljSW1wb3J0TW9kdWxlNTE2LCcuL2Fzc2V0cy9iZWFrZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlNTE3LCcuL2Fzc2V0cy9iZWxsJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUxOCwnLi9hc3NldHMvYmVsbFNsYXNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUxOSwnLi9hc3NldHMvYm9sdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MjAsJy4vYXNzZXRzL2JveGVzX2hvcml6b250YWwnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTIxLCcuL2Fzc2V0cy9ib3hlc192ZXJ0aWNhbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MjIsJy4vYXNzZXRzL2JyYW5jaCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MjMsJy4vYXNzZXRzL2JyYW5jaFVzZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlNTI0LCcuL2Fzc2V0cy9icm9vbSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MjUsJy4vYXNzZXRzL2JydXNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUyNiwnLi9hc3NldHMvYnVnJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUyNywnLi9hc3NldHMvYnVsbHNleWUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTI4LCcuL2Fzc2V0cy9jYWxlbmRhcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MjksJy4vYXNzZXRzL2NoZWNrJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUzMCwnLi9hc3NldHMvY2hlY2tJbkNpcmNsZUZpbGxlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MzEsJy4vYXNzZXRzL2NoZWVyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUzMiwnLi9hc3NldHMvY2xvY2snOl9EeW5hbWljSW1wb3J0TW9kdWxlNTMzLCcuL2Fzc2V0cy9jbG91ZERyaXp6bGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTM0LCcuL2Fzc2V0cy9jbG91ZFN0b3JteSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MzUsJy4vYXNzZXRzL2Nsb3VkU3VubnknOl9EeW5hbWljSW1wb3J0TW9kdWxlNTM2LCcuL2Fzc2V0cy9jbHVzdGVyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUzNywnLi9hc3NldHMvY29sb3InOl9EeW5hbWljSW1wb3J0TW9kdWxlNTM4LCcuL2Fzc2V0cy9jb21wdXRlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUzOSwnLi9hc3NldHMvY29uc29sZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NDAsJy4vYXNzZXRzL2NvbnRhaW5lcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NDEsJy4vYXNzZXRzL2NvbnRpbnVpdHlBYm92ZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NDIsJy4vYXNzZXRzL2NvbnRpbnVpdHlBYm92ZUJlbG93JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU0MywnLi9hc3NldHMvY29udGludWl0eUJlbG93JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU0NCwnLi9hc3NldHMvY29udGludWl0eVdpdGhpbic6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NDUsJy4vYXNzZXRzL2NvbnRyb2xzX2hvcml6b250YWwnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTQ2LCcuL2Fzc2V0cy9jb250cm9sc192ZXJ0aWNhbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NDcsJy4vYXNzZXRzL2NvcHknOl9EeW5hbWljSW1wb3J0TW9kdWxlNTQ4LCcuL2Fzc2V0cy9jb3B5X2NsaXBib2FyZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NDksJy4vYXNzZXRzL2Nyb3NzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU1MCwnLi9hc3NldHMvY3Jvc3NJbkFDaXJjbGVGaWxsZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTUxLCcuL2Fzc2V0cy9jcm9zc2hhaXJzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU1MiwnLi9hc3NldHMvY3VycmVuY3knOl9EeW5hbWljSW1wb3J0TW9kdWxlNTUzLCcuL2Fzc2V0cy9jdXQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTU0LCcuL2Fzc2V0cy9kYXRhYmFzZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NTUsJy4vYXNzZXRzL2Rlc2t0b3AnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTU2LCcuL2Fzc2V0cy9kb2N1bWVudCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NTcsJy4vYXNzZXRzL2RvY3VtZW50RWRpdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NTgsJy4vYXNzZXRzL2RvY3VtZW50YXRpb24nOl9EeW5hbWljSW1wb3J0TW9kdWxlNTU5LCcuL2Fzc2V0cy9kb2N1bWVudHMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTYwLCcuL2Fzc2V0cy9kb3QnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTYxLCcuL2Fzc2V0cy9kb3VibGVBcnJvd0xlZnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTYyLCcuL2Fzc2V0cy9kb3VibGVBcnJvd1JpZ2h0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU2MywnLi9hc3NldHMvZG93bmxvYWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTY0LCcuL2Fzc2V0cy9lZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NjUsJy4vYXNzZXRzL2VkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NjYsJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnbkJvdHRvbSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NjcsJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnbkNlbnRlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NjgsJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnbkxlZnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTY5LCcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25NaWRkbGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTcwLCcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25SaWdodCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NzEsJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnblRvcCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NzIsJy4vYXNzZXRzL2VkaXRvclBvc2l0aW9uQm90dG9tTGVmdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NzMsJy4vYXNzZXRzL2VkaXRvclBvc2l0aW9uQm90dG9tUmlnaHQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTc0LCcuL2Fzc2V0cy9lZGl0b3JQb3NpdGlvblRvcExlZnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTc1LCcuL2Fzc2V0cy9lZGl0b3JQb3NpdGlvblRvcFJpZ2h0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU3NiwnLi9hc3NldHMvZWRpdG9yX2FsaWduX2NlbnRlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NzcsJy4vYXNzZXRzL2VkaXRvcl9hbGlnbl9sZWZ0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU3OCwnLi9hc3NldHMvZWRpdG9yX2FsaWduX3JpZ2h0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU3OSwnLi9hc3NldHMvZWRpdG9yX2JvbGQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTgwLCcuL2Fzc2V0cy9lZGl0b3JfY2hlY2tsaXN0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU4MSwnLi9hc3NldHMvZWRpdG9yX2NvZGVfYmxvY2snOl9EeW5hbWljSW1wb3J0TW9kdWxlNTgyLCcuL2Fzc2V0cy9lZGl0b3JfY29tbWVudCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1ODMsJy4vYXNzZXRzL2VkaXRvcl9oZWFkaW5nJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU4NCwnLi9hc3NldHMvZWRpdG9yX2l0YWxpYyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1ODUsJy4vYXNzZXRzL2VkaXRvcl9saW5rJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU4NiwnLi9hc3NldHMvZWRpdG9yX29yZGVyZWRfbGlzdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1ODcsJy4vYXNzZXRzL2VkaXRvcl9yZWRvJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU4OCwnLi9hc3NldHMvZWRpdG9yX3N0cmlrZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1ODksJy4vYXNzZXRzL2VkaXRvcl90YWJsZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1OTAsJy4vYXNzZXRzL2VkaXRvcl91bmRlcmxpbmUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTkxLCcuL2Fzc2V0cy9lZGl0b3JfdW5kbyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1OTIsJy4vYXNzZXRzL2VkaXRvcl91bm9yZGVyZWRfbGlzdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1OTMsJy4vYXNzZXRzL2VtYWlsJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU5NCwnLi9hc3NldHMvZW1wdHknOl9EeW5hbWljSW1wb3J0TW9kdWxlNTk1LCcuL2Fzc2V0cy9lcWwnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTk2LCcuL2Fzc2V0cy9lcmFzZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlNTk3LCcuL2Fzc2V0cy9leGl0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU5OCwnLi9hc3NldHMvZXhwYW5kJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU5OSwnLi9hc3NldHMvZXhwYW5kTWluaSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MDAsJy4vYXNzZXRzL2V4cG9ydCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MDEsJy4vYXNzZXRzL2V5ZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MDIsJy4vYXNzZXRzL2V5ZV9jbG9zZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjAzLCcuL2Fzc2V0cy9mYWNlX2hhcHB5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTYwNCwnLi9hc3NldHMvZmFjZV9uZXV0cmFsJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYwNSwnLi9hc3NldHMvZmFjZV9zYWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjA2LCcuL2Fzc2V0cy9maWx0ZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlNjA3LCcuL2Fzc2V0cy9mbGFnJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYwOCwnLi9hc3NldHMvZm9sZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MDksJy4vYXNzZXRzL2ZvbGRlcl9jaGVjayc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MTAsJy4vYXNzZXRzL2ZvbGRlcl9jbG9zZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjExLCcuL2Fzc2V0cy9mb2xkZXJfZXhjbGFtYXRpb24nOl9EeW5hbWljSW1wb3J0TW9kdWxlNjEyLCcuL2Fzc2V0cy9mb2xkZXJfb3Blbic6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MTMsJy4vYXNzZXRzL2ZyYW1lTmV4dCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MTQsJy4vYXNzZXRzL2ZyYW1lUHJldmlvdXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjE1LCcuL2Fzc2V0cy9mdWxsU2NyZWVuRXhpdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MTYsJy4vYXNzZXRzL2Z1bGxfc2NyZWVuJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYxNywnLi9hc3NldHMvZnVuY3Rpb24nOl9EeW5hbWljSW1wb3J0TW9kdWxlNjE4LCcuL2Fzc2V0cy9nZWFyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYxOSwnLi9hc3NldHMvZ2xhc3Nlcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MjAsJy4vYXNzZXRzL2dsb2JlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYyMSwnLi9hc3NldHMvZ3JhYic6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MjIsJy4vYXNzZXRzL2dyYWJfaG9yaXpvbnRhbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MjMsJy4vYXNzZXRzL2dyaWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjI0LCcuL2Fzc2V0cy9oZWFydCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MjUsJy4vYXNzZXRzL2hlYXRtYXAnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjI2LCcuL2Fzc2V0cy9oZWxwJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYyNywnLi9hc3NldHMvaG9tZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MjgsJy4vYXNzZXRzL2lJbkNpcmNsZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MjksJy4vYXNzZXRzL2ltYWdlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYzMCwnLi9hc3NldHMvaW1wb3J0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTYzMSwnLi9hc3NldHMvaW5kZXhfY2xvc2UnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjMyLCcuL2Fzc2V0cy9pbmRleF9lZGl0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTYzMywnLi9hc3NldHMvaW5kZXhfZmx1c2gnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjM0LCcuL2Fzc2V0cy9pbmRleF9tYXBwaW5nJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYzNSwnLi9hc3NldHMvaW5kZXhfb3Blbic6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MzYsJy4vYXNzZXRzL2luZGV4X3J1bnRpbWUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjM3LCcuL2Fzc2V0cy9pbmRleF9zZXR0aW5ncyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MzgsJy4vYXNzZXRzL2lucHV0T3V0cHV0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTYzOSwnLi9hc3NldHMvaW5zcGVjdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NDAsJy4vYXNzZXRzL2ludmVydCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NDEsJy4vYXNzZXRzL2lwJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY0MiwnLi9hc3NldHMva2V5Ym9hcmQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjQzLCcuL2Fzc2V0cy9rcWxfZmllbGQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjQ0LCcuL2Fzc2V0cy9rcWxfZnVuY3Rpb24nOl9EeW5hbWljSW1wb3J0TW9kdWxlNjQ1LCcuL2Fzc2V0cy9rcWxfb3BlcmFuZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NDYsJy4vYXNzZXRzL2txbF9zZWxlY3Rvcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NDcsJy4vYXNzZXRzL2txbF92YWx1ZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NDgsJy4vYXNzZXRzL2t1YmVybmV0ZXNOb2RlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY0OSwnLi9hc3NldHMva3ViZXJuZXRlc1BvZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NTAsJy4vYXNzZXRzL2xheWVycyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NTEsJy4vYXNzZXRzL2xldHRlcmluZyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NTIsJy4vYXNzZXRzL2xpbmVEYXNoZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjUzLCcuL2Fzc2V0cy9saW5lRG90dGVkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY1NCwnLi9hc3NldHMvbGluZVNvbGlkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY1NSwnLi9hc3NldHMvbGluayc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NTYsJy4vYXNzZXRzL2xpc3QnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjU3LCcuL2Fzc2V0cy9saXN0X2FkZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NTgsJy4vYXNzZXRzL2xvY2snOl9EeW5hbWljSW1wb3J0TW9kdWxlNjU5LCcuL2Fzc2V0cy9sb2NrT3Blbic6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NjAsJy4vYXNzZXRzL2xvZ29fYWVyb3NwaWtlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY2MSwnLi9hc3NldHMvbG9nb19hcGFjaGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjYyLCcuL2Fzc2V0cy9sb2dvX2FwcF9zZWFyY2gnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjYzLCcuL2Fzc2V0cy9sb2dvX2F3cyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NjQsJy4vYXNzZXRzL2xvZ29fYXdzX21vbm8nOl9EeW5hbWljSW1wb3J0TW9kdWxlNjY1LCcuL2Fzc2V0cy9sb2dvX2F6dXJlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY2NiwnLi9hc3NldHMvbG9nb19henVyZV9tb25vJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY2NywnLi9hc3NldHMvbG9nb19iZWF0cyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NjgsJy4vYXNzZXRzL2xvZ29fYnVzaW5lc3NfYW5hbHl0aWNzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY2OSwnLi9hc3NldHMvbG9nb19jZXBoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY3MCwnLi9hc3NldHMvbG9nb19jbG91ZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NzEsJy4vYXNzZXRzL2xvZ29fY2xvdWRfZWNlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY3MiwnLi9hc3NldHMvbG9nb19jb2RlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY3MywnLi9hc3NldHMvbG9nb19jb2Rlc2FuZGJveCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NzQsJy4vYXNzZXRzL2xvZ29fY291Y2hiYXNlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY3NSwnLi9hc3NldHMvbG9nb19kb2NrZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlNjc2LCcuL2Fzc2V0cy9sb2dvX2Ryb3B3aXphcmQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjc3LCcuL2Fzc2V0cy9sb2dvX2VsYXN0aWMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjc4LCcuL2Fzc2V0cy9sb2dvX2VsYXN0aWNfc3RhY2snOl9EeW5hbWljSW1wb3J0TW9kdWxlNjc5LCcuL2Fzc2V0cy9sb2dvX2VsYXN0aWNzZWFyY2gnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjgwLCcuL2Fzc2V0cy9sb2dvX2VudGVycHJpc2Vfc2VhcmNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY4MSwnLi9hc3NldHMvbG9nb19ldGNkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY4MiwnLi9hc3NldHMvbG9nb19nY3AnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjgzLCcuL2Fzc2V0cy9sb2dvX2djcF9tb25vJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY4NCwnLi9hc3NldHMvbG9nb19naXRodWInOl9EeW5hbWljSW1wb3J0TW9kdWxlNjg1LCcuL2Fzc2V0cy9sb2dvX2dtYWlsJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY4NiwnLi9hc3NldHMvbG9nb19nb2xhbmcnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjg3LCcuL2Fzc2V0cy9sb2dvX2dvb2dsZV9nJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY4OCwnLi9hc3NldHMvbG9nb19oYXByb3h5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTY4OSwnLi9hc3NldHMvbG9nb19pYm0nOl9EeW5hbWljSW1wb3J0TW9kdWxlNjkwLCcuL2Fzc2V0cy9sb2dvX2libV9tb25vJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY5MSwnLi9hc3NldHMvbG9nb19rYWZrYSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2OTIsJy4vYXNzZXRzL2xvZ29fa2liYW5hJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY5MywnLi9hc3NldHMvbG9nb19rdWJlcm5ldGVzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY5NCwnLi9hc3NldHMvbG9nb19sb2dnaW5nJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY5NSwnLi9hc3NldHMvbG9nb19sb2dzdGFzaCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2OTYsJy4vYXNzZXRzL2xvZ29fbWFwcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2OTcsJy4vYXNzZXRzL2xvZ29fbWVtY2FjaGVkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY5OCwnLi9hc3NldHMvbG9nb19tZXRyaWNzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY5OSwnLi9hc3NldHMvbG9nb19tb25nb2RiJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcwMCwnLi9hc3NldHMvbG9nb19teXNxbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MDEsJy4vYXNzZXRzL2xvZ29fbmdpbngnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzAyLCcuL2Fzc2V0cy9sb2dvX29ic2VydmFiaWxpdHknOl9EeW5hbWljSW1wb3J0TW9kdWxlNzAzLCcuL2Fzc2V0cy9sb2dvX29zcXVlcnknOl9EeW5hbWljSW1wb3J0TW9kdWxlNzA0LCcuL2Fzc2V0cy9sb2dvX3BocCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MDUsJy4vYXNzZXRzL2xvZ29fcG9zdGdyZXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzA2LCcuL2Fzc2V0cy9sb2dvX3Byb21ldGhldXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzA3LCcuL2Fzc2V0cy9sb2dvX3JhYmJpdG1xJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcwOCwnLi9hc3NldHMvbG9nb19yZWRpcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MDksJy4vYXNzZXRzL2xvZ29fc2VjdXJpdHknOl9EeW5hbWljSW1wb3J0TW9kdWxlNzEwLCcuL2Fzc2V0cy9sb2dvX3NpdGVfc2VhcmNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcxMSwnLi9hc3NldHMvbG9nb19za2V0Y2gnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzEyLCcuL2Fzc2V0cy9sb2dvX3NsYWNrJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcxMywnLi9hc3NldHMvbG9nb191cHRpbWUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzE0LCcuL2Fzc2V0cy9sb2dvX3dlYmhvb2snOl9EeW5hbWljSW1wb3J0TW9kdWxlNzE1LCcuL2Fzc2V0cy9sb2dvX3dpbmRvd3MnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzE2LCcuL2Fzc2V0cy9sb2dvX3dvcmtwbGFjZV9zZWFyY2gnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzE3LCcuL2Fzc2V0cy9sb2dzdGFzaF9maWx0ZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlNzE4LCcuL2Fzc2V0cy9sb2dzdGFzaF9pZic6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MTksJy4vYXNzZXRzL2xvZ3N0YXNoX2lucHV0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTcyMCwnLi9hc3NldHMvbG9nc3Rhc2hfb3V0cHV0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTcyMSwnLi9hc3NldHMvbG9nc3Rhc2hfcXVldWUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzIyLCcuL2Fzc2V0cy9tYWduZXQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzIzLCcuL2Fzc2V0cy9tYWduaWZ5V2l0aEV4Y2xhbWF0aW9uJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcyNCwnLi9hc3NldHMvbWFnbmlmeVdpdGhNaW51cyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MjUsJy4vYXNzZXRzL21hZ25pZnlXaXRoUGx1cyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MjYsJy4vYXNzZXRzL21hcF9tYXJrZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlNzI3LCcuL2Fzc2V0cy9tZW1vcnknOl9EeW5hbWljSW1wb3J0TW9kdWxlNzI4LCcuL2Fzc2V0cy9tZW51JzpfRHluYW1pY0ltcG9ydE1vZHVsZTcyOSwnLi9hc3NldHMvbWVudURvd24nOl9EeW5hbWljSW1wb3J0TW9kdWxlNzMwLCcuL2Fzc2V0cy9tZW51TGVmdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MzEsJy4vYXNzZXRzL21lbnVSaWdodCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MzIsJy4vYXNzZXRzL21lbnVVcCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MzMsJy4vYXNzZXRzL21lcmdlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTczNCwnLi9hc3NldHMvbWluaW1pemUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzM1LCcuL2Fzc2V0cy9taW51cyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MzYsJy4vYXNzZXRzL21pbnVzX2luX2NpcmNsZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MzcsJy4vYXNzZXRzL21pbnVzX2luX2NpcmNsZV9maWxsZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzM4LCcuL2Fzc2V0cy9tbF9jbGFzc2lmaWNhdGlvbl9qb2InOl9EeW5hbWljSW1wb3J0TW9kdWxlNzM5LCcuL2Fzc2V0cy9tbF9jcmVhdGVfYWR2YW5jZWRfam9iJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc0MCwnLi9hc3NldHMvbWxfY3JlYXRlX211bHRpX21ldHJpY19qb2InOl9EeW5hbWljSW1wb3J0TW9kdWxlNzQxLCcuL2Fzc2V0cy9tbF9jcmVhdGVfcG9wdWxhdGlvbl9qb2InOl9EeW5hbWljSW1wb3J0TW9kdWxlNzQyLCcuL2Fzc2V0cy9tbF9jcmVhdGVfc2luZ2xlX21ldHJpY19qb2InOl9EeW5hbWljSW1wb3J0TW9kdWxlNzQzLCcuL2Fzc2V0cy9tbF9kYXRhX3Zpc3VhbGl6ZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlNzQ0LCcuL2Fzc2V0cy9tbF9vdXRsaWVyX2RldGVjdGlvbl9qb2InOl9EeW5hbWljSW1wb3J0TW9kdWxlNzQ1LCcuL2Fzc2V0cy9tbF9yZWdyZXNzaW9uX2pvYic6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NDYsJy4vYXNzZXRzL21vYmlsZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NDcsJy4vYXNzZXRzL21vb24nOl9EeW5hbWljSW1wb3J0TW9kdWxlNzQ4LCcuL2Fzc2V0cy9uYW1lc3BhY2UnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzQ5LCcuL2Fzc2V0cy9uZXN0ZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzUwLCcuL2Fzc2V0cy9ub2RlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc1MSwnLi9hc3NldHMvbnVtYmVyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc1MiwnLi9hc3NldHMvb2ZmbGluZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NTMsJy4vYXNzZXRzL29ubGluZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NTQsJy4vYXNzZXRzL3BhY2thZ2UnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzU1LCcuL2Fzc2V0cy9wYWdlU2VsZWN0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTc1NiwnLi9hc3NldHMvcGFnZXNTZWxlY3QnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzU3LCcuL2Fzc2V0cy9wYWludCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NTgsJy4vYXNzZXRzL3BhcGVyX2NsaXAnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzU5LCcuL2Fzc2V0cy9wYXJ0aWFsJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc2MCwnLi9hc3NldHMvcGF1c2UnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzYxLCcuL2Fzc2V0cy9wYXltZW50JzpfRHluYW1pY0ltcG9ydE1vZHVsZTc2MiwnLi9hc3NldHMvcGVuY2lsJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc2MywnLi9hc3NldHMvcGVyY2VudCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NjQsJy4vYXNzZXRzL3Bpbic6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NjUsJy4vYXNzZXRzL3Bpbl9maWxsZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzY2LCcuL2Fzc2V0cy9wbGF5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTc2NywnLi9hc3NldHMvcGxheUZpbGxlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NjgsJy4vYXNzZXRzL3BsdXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzY5LCcuL2Fzc2V0cy9wbHVzX2luX2NpcmNsZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NzAsJy4vYXNzZXRzL3BsdXNfaW5fY2lyY2xlX2ZpbGxlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NzEsJy4vYXNzZXRzL3BvcG91dCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NzIsJy4vYXNzZXRzL3B1c2gnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzczLCcuL2Fzc2V0cy9xdWVzdGlvbl9pbl9jaXJjbGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzc0LCcuL2Fzc2V0cy9xdW90ZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NzUsJy4vYXNzZXRzL3JlZnJlc2gnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzc2LCcuL2Fzc2V0cy9yZXBvcnRlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NzcsJy4vYXNzZXRzL3JldHVybl9rZXknOl9EeW5hbWljSW1wb3J0TW9kdWxlNzc4LCcuL2Fzc2V0cy9zYXZlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc3OSwnLi9hc3NldHMvc2NhbGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzgwLCcuL2Fzc2V0cy9zZWFyY2gnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzgxLCcuL2Fzc2V0cy9zZWN1cml0eVNpZ25hbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3ODIsJy4vYXNzZXRzL3NlY3VyaXR5U2lnbmFsRGV0ZWN0ZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzgzLCcuL2Fzc2V0cy9zZWN1cml0eVNpZ25hbFJlc29sdmVkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc4NCwnLi9hc3NldHMvc2Vzc2lvblZpZXdlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU3ODUsJy4vYXNzZXRzL3NoYXJkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc4NiwnLi9hc3NldHMvc2hhcmUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzg3LCcuL2Fzc2V0cy9zbm93Zmxha2UnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzg4LCcuL2Fzc2V0cy9zb3J0TGVmdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3ODksJy4vYXNzZXRzL3NvcnRSaWdodCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3OTAsJy4vYXNzZXRzL3NvcnRfZG93bic6X0R5bmFtaWNJbXBvcnRNb2R1bGU3OTEsJy4vYXNzZXRzL3NvcnRfdXAnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzkyLCcuL2Fzc2V0cy9zb3J0YWJsZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3OTMsJy4vYXNzZXRzL3N0YXJQbHVzRW1wdHknOl9EeW5hbWljSW1wb3J0TW9kdWxlNzk0LCcuL2Fzc2V0cy9zdGFyUGx1c0ZpbGxlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3OTUsJy4vYXNzZXRzL3N0YXJfZW1wdHknOl9EeW5hbWljSW1wb3J0TW9kdWxlNzk2LCcuL2Fzc2V0cy9zdGFyX2VtcHR5X3NwYWNlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc5NywnLi9hc3NldHMvc3Rhcl9maWxsZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzk4LCcuL2Fzc2V0cy9zdGFyX2ZpbGxlZF9zcGFjZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3OTksJy4vYXNzZXRzL3N0YXJfbWludXNfZW1wdHknOl9EeW5hbWljSW1wb3J0TW9kdWxlODAwLCcuL2Fzc2V0cy9zdGFyX21pbnVzX2ZpbGxlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MDEsJy4vYXNzZXRzL3N0YXRzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgwMiwnLi9hc3NldHMvc3RvcCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MDMsJy4vYXNzZXRzL3N0b3BfZmlsbGVkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgwNCwnLi9hc3NldHMvc3RvcF9zbGFzaCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MDUsJy4vYXNzZXRzL3N0b3JhZ2UnOl9EeW5hbWljSW1wb3J0TW9kdWxlODA2LCcuL2Fzc2V0cy9zdHJpbmcnOl9EeW5hbWljSW1wb3J0TW9kdWxlODA3LCcuL2Fzc2V0cy9zdWJtb2R1bGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlODA4LCcuL2Fzc2V0cy9zdW4nOl9EeW5hbWljSW1wb3J0TW9kdWxlODA5LCcuL2Fzc2V0cy9zd2F0Y2hfaW5wdXQnOl9EeW5hbWljSW1wb3J0TW9kdWxlODEwLCcuL2Fzc2V0cy9zeW1saW5rJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgxMSwnLi9hc3NldHMvdGFibGVPZkNvbnRlbnRzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgxMiwnLi9hc3NldHMvdGFibGVfZGVuc2l0eV9jb21wYWN0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTgxMywnLi9hc3NldHMvdGFibGVfZGVuc2l0eV9leHBhbmRlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MTQsJy4vYXNzZXRzL3RhYmxlX2RlbnNpdHlfbm9ybWFsJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgxNSwnLi9hc3NldHMvdGFnJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgxNiwnLi9hc3NldHMvdGVhcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MTcsJy4vYXNzZXRzL3RlbXBlcmF0dXJlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgxOCwnLi9hc3NldHMvdGltZVJlZnJlc2gnOl9EeW5hbWljSW1wb3J0TW9kdWxlODE5LCcuL2Fzc2V0cy90aW1lbGluZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MjAsJy4vYXNzZXRzL3RpbWVzbGlkZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlODIxLCcuL2Fzc2V0cy90b2tlbkFsaWFzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgyMiwnLi9hc3NldHMvdG9rZW5Bbm5vdGF0aW9uJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgyMywnLi9hc3NldHMvdG9rZW5BcnJheSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MjQsJy4vYXNzZXRzL3Rva2VuQmluYXJ5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTgyNSwnLi9hc3NldHMvdG9rZW5Cb29sZWFuJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgyNiwnLi9hc3NldHMvdG9rZW5DbGFzcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MjcsJy4vYXNzZXRzL3Rva2VuQ29tcGxldGlvblN1Z2dlc3Rlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MjgsJy4vYXNzZXRzL3Rva2VuQ29uc3RhbnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlODI5LCcuL2Fzc2V0cy90b2tlbkRhdGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlODMwLCcuL2Fzc2V0cy90b2tlbkRlbnNlVmVjdG9yJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgzMSwnLi9hc3NldHMvdG9rZW5FbGVtZW50JzpfRHluYW1pY0ltcG9ydE1vZHVsZTgzMiwnLi9hc3NldHMvdG9rZW5FbnVtJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgzMywnLi9hc3NldHMvdG9rZW5FbnVtTWVtYmVyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgzNCwnLi9hc3NldHMvdG9rZW5FdmVudCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MzUsJy4vYXNzZXRzL3Rva2VuRXhjZXB0aW9uJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgzNiwnLi9hc3NldHMvdG9rZW5GaWVsZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MzcsJy4vYXNzZXRzL3Rva2VuRmlsZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MzgsJy4vYXNzZXRzL3Rva2VuRmxhdHRlbmVkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgzOSwnLi9hc3NldHMvdG9rZW5GdW5jdGlvbic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NDAsJy4vYXNzZXRzL3Rva2VuR2VvJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg0MSwnLi9hc3NldHMvdG9rZW5IaXN0b2dyYW0nOl9EeW5hbWljSW1wb3J0TW9kdWxlODQyLCcuL2Fzc2V0cy90b2tlbklQJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg0MywnLi9hc3NldHMvdG9rZW5JbnRlcmZhY2UnOl9EeW5hbWljSW1wb3J0TW9kdWxlODQ0LCcuL2Fzc2V0cy90b2tlbkpvaW4nOl9EeW5hbWljSW1wb3J0TW9kdWxlODQ1LCcuL2Fzc2V0cy90b2tlbktleSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NDYsJy4vYXNzZXRzL3Rva2VuS2V5d29yZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NDcsJy4vYXNzZXRzL3Rva2VuTWV0aG9kJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg0OCwnLi9hc3NldHMvdG9rZW5NZXRyaWNDb3VudGVyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg0OSwnLi9hc3NldHMvdG9rZW5NZXRyaWNHYXVnZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NTAsJy4vYXNzZXRzL3Rva2VuTW9kdWxlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg1MSwnLi9hc3NldHMvdG9rZW5OYW1lc3BhY2UnOl9EeW5hbWljSW1wb3J0TW9kdWxlODUyLCcuL2Fzc2V0cy90b2tlbk5lc3RlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NTMsJy4vYXNzZXRzL3Rva2VuTnVsbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NTQsJy4vYXNzZXRzL3Rva2VuTnVtYmVyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg1NSwnLi9hc3NldHMvdG9rZW5PYmplY3QnOl9EeW5hbWljSW1wb3J0TW9kdWxlODU2LCcuL2Fzc2V0cy90b2tlbk9wZXJhdG9yJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg1NywnLi9hc3NldHMvdG9rZW5QYWNrYWdlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg1OCwnLi9hc3NldHMvdG9rZW5QYXJhbWV0ZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlODU5LCcuL2Fzc2V0cy90b2tlblBlcmNvbGF0b3InOl9EeW5hbWljSW1wb3J0TW9kdWxlODYwLCcuL2Fzc2V0cy90b2tlblByb3BlcnR5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTg2MSwnLi9hc3NldHMvdG9rZW5SYW5nZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NjIsJy4vYXNzZXRzL3Rva2VuUmFua0ZlYXR1cmUnOl9EeW5hbWljSW1wb3J0TW9kdWxlODYzLCcuL2Fzc2V0cy90b2tlblJhbmtGZWF0dXJlcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NjQsJy4vYXNzZXRzL3Rva2VuUmVwbyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NjUsJy4vYXNzZXRzL3Rva2VuU2VhcmNoVHlwZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NjYsJy4vYXNzZXRzL3Rva2VuU2hhcGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlODY3LCcuL2Fzc2V0cy90b2tlblN0cmluZyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NjgsJy4vYXNzZXRzL3Rva2VuU3RydWN0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTg2OSwnLi9hc3NldHMvdG9rZW5TeW1ib2wnOl9EeW5hbWljSW1wb3J0TW9kdWxlODcwLCcuL2Fzc2V0cy90b2tlblRhZyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NzEsJy4vYXNzZXRzL3Rva2VuVGV4dCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NzIsJy4vYXNzZXRzL3Rva2VuVG9rZW5Db3VudCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NzMsJy4vYXNzZXRzL3Rva2VuVmFyaWFibGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlODc0LCcuL2Fzc2V0cy90cmFpbmluZyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NzUsJy4vYXNzZXRzL3RyYXNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg3NiwnLi9hc3NldHMvdW5mb2xkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg3NywnLi9hc3NldHMvdW5saW5rJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg3OCwnLi9hc3NldHMvdXNlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NzksJy4vYXNzZXRzL3VzZXJBdmF0YXInOl9EeW5hbWljSW1wb3J0TW9kdWxlODgwLCcuL2Fzc2V0cy91c2Vycyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4ODEsJy4vYXNzZXRzL3ZlY3Rvcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4ODIsJy4vYXNzZXRzL3ZpZGVvUGxheWVyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg4MywnLi9hc3NldHMvdmlzX2FyZWEnOl9EeW5hbWljSW1wb3J0TW9kdWxlODg0LCcuL2Fzc2V0cy92aXNfYXJlYV9zdGFja2VkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg4NSwnLi9hc3NldHMvdmlzX2Jhcl9ob3Jpem9udGFsJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg4NiwnLi9hc3NldHMvdmlzX2Jhcl9ob3Jpem9udGFsX3N0YWNrZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlODg3LCcuL2Fzc2V0cy92aXNfYmFyX3ZlcnRpY2FsJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg4OCwnLi9hc3NldHMvdmlzX2Jhcl92ZXJ0aWNhbF9zdGFja2VkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg4OSwnLi9hc3NldHMvdmlzX2dhdWdlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg5MCwnLi9hc3NldHMvdmlzX2dvYWwnOl9EeW5hbWljSW1wb3J0TW9kdWxlODkxLCcuL2Fzc2V0cy92aXNfbGluZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4OTIsJy4vYXNzZXRzL3Zpc19tYXBfY29vcmRpbmF0ZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4OTMsJy4vYXNzZXRzL3Zpc19tYXBfcmVnaW9uJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg5NCwnLi9hc3NldHMvdmlzX21ldHJpYyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4OTUsJy4vYXNzZXRzL3Zpc19waWUnOl9EeW5hbWljSW1wb3J0TW9kdWxlODk2LCcuL2Fzc2V0cy92aXNfdGFibGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlODk3LCcuL2Fzc2V0cy92aXNfdGFnX2Nsb3VkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg5OCwnLi9hc3NldHMvdmlzX3RleHQnOl9EeW5hbWljSW1wb3J0TW9kdWxlODk5LCcuL2Fzc2V0cy92aXNfdGltZWxpb24nOl9EeW5hbWljSW1wb3J0TW9kdWxlOTAwLCcuL2Fzc2V0cy92aXNfdmVnYSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MDEsJy4vYXNzZXRzL3Zpc192aXN1YWxfYnVpbGRlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MDIsJy4vYXNzZXRzL3dvcmRXcmFwJzpfRHluYW1pY0ltcG9ydE1vZHVsZTkwMywnLi9hc3NldHMvd29yZFdyYXBEaXNhYmxlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MDQsJy4vYXNzZXRzL3dyZW5jaCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MDV9O1xuZnVuY3Rpb24gX0R5bmFtaWNJbXBvcnQocGF0aCkge2NvbnN0IG1vZD1fRHluYW1pY0ltcG9ydE1vZHVsZU1hcFtwYXRoXTtpZighbW9kW1N5bWJvbC50b1N0cmluZ1RhZ10pIG1vZFtTeW1ib2wudG9TdHJpbmdUYWddPSdNb2R1bGUnO3JldHVybiBQcm9taXNlLnJlc29sdmUobW9kKTsgfVxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG52YXIgX2V4Y2x1ZGVkID0gW1widHlwZVwiLCBcInNpemVcIiwgXCJjb2xvclwiLCBcImNsYXNzTmFtZVwiLCBcInRhYkluZGV4XCIsIFwidGl0bGVcIiwgXCJvbkljb25Mb2FkXCIsIFwidGhlbWVcIiwgXCJzdHlsZVwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBQdXJlQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBrZXlzT2YgfSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IHsgdHlwZVRvUGF0aE1hcCB9IGZyb20gJy4vaWNvbl9tYXAnO1xuaW1wb3J0IHsgaWNvbiBhcyBlbXB0eSB9IGZyb20gJy4vYXNzZXRzL2VtcHR5JztcbmltcG9ydCB7IGVucXVldWVTdGF0ZUNoYW5nZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3JlYWN0JztcbmltcG9ydCB7IGh0bWxJZEdlbmVyYXRvciwgd2l0aEV1aVRoZW1lIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuZXhwb3J0IHsgQ09MT1JTIH0gZnJvbSAnLi9uYW1lZF9jb2xvcnMnO1xuaW1wb3J0IHsgaXNOYW1lZENvbG9yIH0gZnJvbSAnLi9uYW1lZF9jb2xvcnMnO1xuaW1wb3J0IHsgZXVpSWNvblN0eWxlcyB9IGZyb20gJy4vaWNvbi5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIGdldElzQXBwSWNvbiA9IGZ1bmN0aW9uIGdldElzQXBwSWNvbihpY29uVHlwZSkge1xuICBpZiAodHlwZW9mIGljb25UeXBlICE9PSAnc3RyaW5nJykgcmV0dXJuIGZhbHNlO1xuICBpZiAoaWNvblR5cGUgPT09ICdkYXRhVmlzdWFsaXplcicpIHJldHVybiB0cnVlOyAvLyBTcGVjaWFsIGNhc2VcblxuICBpZiAoaWNvblR5cGUuaW5kZXhPZignZGF0YTonKSA9PT0gMCkgcmV0dXJuIGZhbHNlOyAvLyBJbmxpbmUgZGF0YSBVUklzIHNob3VsZCBiZSBzaG9ydC1jaXJjdWl0ZWQgZm9yIHBlcmZvcm1hbmNlXG5cbiAgcmV0dXJuIGljb25UeXBlLmVuZHNXaXRoKCdBcHAnKSB8fCBpY29uVHlwZS5lbmRzV2l0aCgnSm9iJyk7XG59O1xuXG5leHBvcnQgdmFyIFRZUEVTID0ga2V5c09mKHR5cGVUb1BhdGhNYXApO1xuZXhwb3J0IHZhciBTSVpFUyA9IFsnb3JpZ2luYWwnLCAncycsICdtJywgJ2wnLCAneGwnLCAneHhsJ107XG5cbmZ1bmN0aW9uIGlzRXVpSWNvblR5cGUoeCkge1xuICByZXR1cm4gdHlwZW9mIHggPT09ICdzdHJpbmcnICYmIHR5cGVUb1BhdGhNYXAuaGFzT3duUHJvcGVydHkoeCk7XG59XG5cbmZ1bmN0aW9uIGdldEluaXRpYWxJY29uKGljb24pIHtcbiAgaWYgKGljb24gPT0gbnVsbCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAoaXNFdWlJY29uVHlwZShpY29uKSkge1xuICAgIGlmIChpY29uQ29tcG9uZW50Q2FjaGUuaGFzT3duUHJvcGVydHkoaWNvbikpIHtcbiAgICAgIHJldHVybiBpY29uQ29tcG9uZW50Q2FjaGVbaWNvbl07XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiBpY29uO1xufVxuXG52YXIgZ2VuZXJhdGVJZCA9IGh0bWxJZEdlbmVyYXRvcigpO1xudmFyIGljb25Db21wb25lbnRDYWNoZSA9IHt9O1xuZXhwb3J0IHZhciBjbGVhckljb25Db21wb25lbnRDYWNoZSA9IGZ1bmN0aW9uIGNsZWFySWNvbkNvbXBvbmVudENhY2hlKGljb25UeXBlKSB7XG4gIGlmIChpY29uVHlwZSAhPSBudWxsKSB7XG4gICAgZGVsZXRlIGljb25Db21wb25lbnRDYWNoZVtpY29uVHlwZV07XG4gIH0gZWxzZSB7XG4gICAgaWNvbkNvbXBvbmVudENhY2hlID0ge307XG4gIH1cbn07XG5leHBvcnQgdmFyIGFwcGVuZEljb25Db21wb25lbnRDYWNoZSA9IGZ1bmN0aW9uIGFwcGVuZEljb25Db21wb25lbnRDYWNoZShpY29uVHlwZVRvSWNvbkNvbXBvbmVudE1hcCkge1xuICBmb3IgKHZhciBfaWNvblR5cGUgaW4gaWNvblR5cGVUb0ljb25Db21wb25lbnRNYXApIHtcbiAgICBpZiAoaWNvblR5cGVUb0ljb25Db21wb25lbnRNYXAuaGFzT3duUHJvcGVydHkoX2ljb25UeXBlKSkge1xuICAgICAgaWNvbkNvbXBvbmVudENhY2hlW19pY29uVHlwZV0gPSBpY29uVHlwZVRvSWNvbkNvbXBvbmVudE1hcFtfaWNvblR5cGVdO1xuICAgIH1cbiAgfVxufTtcbmV4cG9ydCB2YXIgRXVpSWNvbkNsYXNzID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUHVyZUNvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoRXVpSWNvbkNsYXNzLCBfUHVyZUNvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihFdWlJY29uQ2xhc3MpO1xuXG4gIGZ1bmN0aW9uIEV1aUljb25DbGFzcyhwcm9wcykge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlJY29uQ2xhc3MpO1xuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBwcm9wcyk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaXNNb3VudGVkXCIsIHRydWUpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImxvYWRJY29uQ29tcG9uZW50XCIsIGZ1bmN0aW9uIChpY29uVHlwZSkge1xuICAgICAgaWYgKGljb25Db21wb25lbnRDYWNoZS5oYXNPd25Qcm9wZXJ0eShpY29uVHlwZSkpIHtcbiAgICAgICAgLy8gZXhpc3RzIGluIGNhY2hlXG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgIG5lZWRlZExvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgIGljb246IGljb25Db21wb25lbnRDYWNoZVtpY29uVHlwZV1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgX3RoaXMub25JY29uTG9hZCgpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgX0R5bmFtaWNJbXBvcnQoYC4vYXNzZXRzLyR7dHlwZVRvUGF0aE1hcFtpY29uVHlwZV19YCkudGhlbihmdW5jdGlvbiAoX3JlZikge1xuICAgICAgICB2YXIgaWNvbiA9IF9yZWYuaWNvbjtcbiAgICAgICAgaWNvbkNvbXBvbmVudENhY2hlW2ljb25UeXBlXSA9IGljb247XG4gICAgICAgIGVucXVldWVTdGF0ZUNoYW5nZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKF90aGlzLmlzTW91bnRlZCAmJiBfdGhpcy5wcm9wcy50eXBlID09PSBpY29uVHlwZSkge1xuICAgICAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICBpY29uOiBpY29uLFxuICAgICAgICAgICAgICBpY29uVGl0bGU6IGljb25UeXBlLFxuICAgICAgICAgICAgICBpc0xvYWRpbmc6IGZhbHNlXG4gICAgICAgICAgICB9LCBfdGhpcy5vbkljb25Mb2FkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25JY29uTG9hZFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgb25JY29uTG9hZCA9IF90aGlzLnByb3BzLm9uSWNvbkxvYWQ7XG5cbiAgICAgIGlmIChvbkljb25Mb2FkKSB7XG4gICAgICAgIG9uSWNvbkxvYWQoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHZhciB0eXBlID0gcHJvcHMudHlwZTtcbiAgICB2YXIgaW5pdGlhbEljb24gPSBnZXRJbml0aWFsSWNvbih0eXBlKTtcbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGljb246IGluaXRpYWxJY29uLFxuICAgICAgaWNvblRpdGxlOiB1bmRlZmluZWQsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgbmVlZGVkTG9hZGluZzogZmFsc2VcbiAgICB9O1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdWlJY29uQ2xhc3MsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdmFyIHR5cGUgPSB0aGlzLnByb3BzLnR5cGU7XG5cbiAgICAgIGlmIChpc0V1aUljb25UeXBlKHR5cGUpICYmIHRoaXMuc3RhdGUuaWNvbiA9PSBudWxsKSB7XG4gICAgICAgIC8vZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L25vLWRpZC1tb3VudC1zZXQtc3RhdGVcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgbmVlZGVkTG9hZGluZzogdHJ1ZSxcbiAgICAgICAgICBpc0xvYWRpbmc6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubG9hZEljb25Db21wb25lbnQodHlwZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9uSWNvbkxvYWQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkVXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgICAgIHZhciB0eXBlID0gdGhpcy5wcm9wcy50eXBlO1xuXG4gICAgICBpZiAodHlwZSAhPT0gcHJldlByb3BzLnR5cGUpIHtcbiAgICAgICAgaWYgKGlzRXVpSWNvblR5cGUodHlwZSkpIHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3Qvbm8tZGlkLXVwZGF0ZS1zZXQtc3RhdGVcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIG5lZWRlZExvYWRpbmc6IGljb25Db21wb25lbnRDYWNoZS5oYXNPd25Qcm9wZXJ0eSh0eXBlKSxcbiAgICAgICAgICAgIGlzTG9hZGluZzogdHJ1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMubG9hZEljb25Db21wb25lbnQodHlwZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L25vLWRpZC11cGRhdGUtc2V0LXN0YXRlXG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBpY29uOiB0eXBlLFxuICAgICAgICAgICAgbmVlZGVkTG9hZGluZzogdHJ1ZSxcbiAgICAgICAgICAgIGlzTG9hZGluZzogZmFsc2VcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIHRoaXMuaXNNb3VudGVkID0gZmFsc2U7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIHR5cGUgPSBfdGhpcyRwcm9wcy50eXBlLFxuICAgICAgICAgIF90aGlzJHByb3BzJHNpemUgPSBfdGhpcyRwcm9wcy5zaXplLFxuICAgICAgICAgIHNpemUgPSBfdGhpcyRwcm9wcyRzaXplID09PSB2b2lkIDAgPyAnbScgOiBfdGhpcyRwcm9wcyRzaXplLFxuICAgICAgICAgIGNvbG9yID0gX3RoaXMkcHJvcHMuY29sb3IsXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMuY2xhc3NOYW1lLFxuICAgICAgICAgIHRhYkluZGV4ID0gX3RoaXMkcHJvcHMudGFiSW5kZXgsXG4gICAgICAgICAgdGl0bGUgPSBfdGhpcyRwcm9wcy50aXRsZSxcbiAgICAgICAgICBvbkljb25Mb2FkID0gX3RoaXMkcHJvcHMub25JY29uTG9hZCxcbiAgICAgICAgICB0aGVtZSA9IF90aGlzJHByb3BzLnRoZW1lLFxuICAgICAgICAgIHN0eWxlID0gX3RoaXMkcHJvcHMuc3R5bGUsXG4gICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wcywgX2V4Y2x1ZGVkKTtcblxuICAgICAgdmFyIF90aGlzJHN0YXRlID0gdGhpcy5zdGF0ZSxcbiAgICAgICAgICBpc0xvYWRpbmcgPSBfdGhpcyRzdGF0ZS5pc0xvYWRpbmcsXG4gICAgICAgICAgbmVlZGVkTG9hZGluZyA9IF90aGlzJHN0YXRlLm5lZWRlZExvYWRpbmcsXG4gICAgICAgICAgaWNvblRpdGxlID0gX3RoaXMkc3RhdGUuaWNvblRpdGxlO1xuICAgICAgdmFyIGlzTG9hZGVkID0gIWlzTG9hZGluZyAmJiBuZWVkZWRMb2FkaW5nO1xuICAgICAgdmFyIGlzQ3VzdG9tQ29sb3IgPSBjb2xvciAmJiAhaXNOYW1lZENvbG9yKGNvbG9yKTtcbiAgICAgIHZhciBvcHRpb25hbEN1c3RvbVN0eWxlcyA9IGlzQ3VzdG9tQ29sb3IgPyBfb2JqZWN0U3ByZWFkKHtcbiAgICAgICAgY29sb3I6IGNvbG9yXG4gICAgICB9LCBzdHlsZSkgOiBzdHlsZTsgLy8gVGhlc2UgaWNvbnMgYXJlIGEgbGl0dGxlIHNwZWNpYWwgYW5kIGdldCBzb21lIGV4dHJhIENTUyBmbGV4aWJpbGl0eVxuXG4gICAgICB2YXIgaXNBcHBJY29uID0gZ2V0SXNBcHBJY29uKHR5cGUpOyAvLyBBcHAgY29sb3Igc3R5bGVzIGFyZSBvbmx5IGFwcGxpZWQgaWYgbm8gY29sb3IgaXMgcGFzc2VkIG9yIGlmIGNvbG9yPVwiZGVmYXVsdFwiIGlzIHBhc3NlZFxuXG4gICAgICB2YXIgYXBwSWNvbkhhc0NvbG9yID0gY29sb3IgJiYgY29sb3IgIT09ICdkZWZhdWx0JzsgLy8gVGhlIEVsYXN0aWMgbG9nbyBzaG91bGQgYmUgYW4gb3V0bGluZSBpbiB0ZXh0IGFuZCBnaG9zdCBtb2RlXG5cbiAgICAgIHZhciBpc0VsYXN0aWNMb2dvT3V0bGluZSA9IHR5cGUgPT09ICdsb2dvRWxhc3RpYycgJiYgKGNvbG9yID09PSAnZ2hvc3QnIHx8IGNvbG9yID09PSAndGV4dCcpO1xuICAgICAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlJY29uJywgY2xhc3NOYW1lKTsgLy8gRW1vdGlvbiBzdHlsZXNcblxuICAgICAgdmFyIHN0eWxlcyA9IGV1aUljb25TdHlsZXModGhlbWUpO1xuICAgICAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpSWNvbiwgc3R5bGVzW3NpemVdLCBjb2xvciAmJiBpc05hbWVkQ29sb3IoY29sb3IpICYmIHN0eWxlc1tjb2xvcl0sIGlzQ3VzdG9tQ29sb3IgJiYgc3R5bGVzLmN1c3RvbUNvbG9yLCBpc0VsYXN0aWNMb2dvT3V0bGluZSAmJiBzdHlsZXMubG9nb0VsYXN0aWNPdXRsaW5lLCBpc0FwcEljb24gJiYgIWFwcEljb25IYXNDb2xvciAmJiBzdHlsZXMuYXBwLCBpc0xvYWRpbmcgJiYgc3R5bGVzLmlzTG9hZGluZywgIWlzTG9hZGluZyAmJiBuZWVkZWRMb2FkaW5nICYmIHN0eWxlcy5pc0xvYWRlZF07XG4gICAgICB2YXIgaWNvbiA9IHRoaXMuc3RhdGUuaWNvbiB8fCBlbXB0eTsgLy8gVGhpcyBpcyBhIGZpeCBmb3IgSUUgYW5kIEVkZ2UsIHdoaWNoIGlnbm9yZXMgdGFiaW5kZXg9XCItMVwiIG9uIGFuIFNWRywgYnV0IHJlc3BlY3RzXG4gICAgICAvLyBmb2N1c2FibGU9XCJmYWxzZVwiLlxuICAgICAgLy8gICAtIElmIHRoZXJlJ3Mgbm8gdGFiaW5kZXggc3BlY2lmaWVkLCB3ZSdsbCBkZWZhdWx0IHRoZSBpY29uIHRvIG5vdCBiZSBmb2N1c2FibGUsXG4gICAgICAvLyAgICAgd2hpY2ggaXMgaG93IFNWR3MgYmVoYXZlIGluIENocm9tZSwgU2FmYXJpLCBhbmQgRkYuXG4gICAgICAvLyAgIC0gSWYgdGFiaW5kZXggaXMgLTEsIHRoZW4gdGhlIGNvbnN1bWVyIHdhbnRzIHRoZSBpY29uIHRvIGJlIGZvY3VzYWJsZSBieSBKYXZhU2NyaXB0IG9ubHkuXG4gICAgICAvLyAgIC0gSWYgdGhlIHRhYmluZGV4IGlzIDAsIHRoZSBjb25zdW1lciB3YW50cyB0aGUgaWNvbiB0byBiZSBrZXlib2FyZCBmb2N1c2FibGUuXG5cbiAgICAgIHZhciBmb2N1c2FibGUgPSB0YWJJbmRleCA9PSBudWxsIHx8IHRhYkluZGV4ID09PSAtMSA/ICdmYWxzZScgOiAndHJ1ZSc7XG5cbiAgICAgIGlmICh0eXBlb2YgaWNvbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJpbWdcIiwgX2V4dGVuZHMoe1xuICAgICAgICAgIGFsdDogdGl0bGUgPyB0aXRsZSA6ICcnLFxuICAgICAgICAgIHNyYzogaWNvbixcbiAgICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgICAgICAgdGFiSW5kZXg6IHRhYkluZGV4XG4gICAgICAgIH0sIHJlc3QpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBTdmcgPSBpY29uOyAvLyBJZiBpdCdzIGFuIGVtcHR5IGljb24sIG9yIGlmIHRoZXJlIGlzIG5vIGFyaWEtbGFiZWwsIGFyaWEtbGFiZWxsZWRieSwgb3IgdGl0bGUgaXQgZ2V0cyBhcmlhLWhpZGRlbiB0cnVlXG5cbiAgICAgICAgdmFyIGlzQXJpYUhpZGRlbiA9IGljb24gPT09IGVtcHR5IHx8ICEodGhpcy5wcm9wc1snYXJpYS1sYWJlbCddIHx8IHRoaXMucHJvcHNbJ2FyaWEtbGFiZWxsZWRieSddIHx8IHRoaXMucHJvcHMudGl0bGUpO1xuICAgICAgICB2YXIgaGlkZUljb25FbXB0eSA9IGlzQXJpYUhpZGRlbiAmJiB7XG4gICAgICAgICAgJ2FyaWEtaGlkZGVuJzogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgICB2YXIgdGl0bGVJZDsgLy8gSWYgbm8gYXJpYS1sYWJlbCBvciBhcmlhLWxhYmVsbGVkYnkgaXMgcHJvdmlkZWQgYnV0IHRoZXJlJ3MgYSB0aXRsZSwgYSB0aXRsZUlkIGlzIGdlbmVyYXRlZFxuICAgICAgICAvLyAgVGhlIHN2ZyBhcmlhLWxhYmVsbGVkYnkgYXR0cmlidXRlIGdldHMgdGhpcyB0aXRsZUlkXG4gICAgICAgIC8vICBUaGUgc3ZnIHRpdGxlIGVsZW1lbnQgZ2V0cyB0aGlzIHRpdGxlSWQgYXMgYW4gaWRcblxuICAgICAgICBpZiAoIXRoaXMucHJvcHNbJ2FyaWEtbGFiZWwnXSAmJiAhdGhpcy5wcm9wc1snYXJpYS1sYWJlbGxlZGJ5J10gJiYgdGl0bGUpIHtcbiAgICAgICAgICB0aXRsZUlkID0ge1xuICAgICAgICAgICAgdGl0bGVJZDogZ2VuZXJhdGVJZCgpXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFN2ZywgX2V4dGVuZHMoe1xuICAgICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgICBzdHlsZTogb3B0aW9uYWxDdXN0b21TdHlsZXMsXG4gICAgICAgICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgICAgICAgdGFiSW5kZXg6IHRhYkluZGV4LFxuICAgICAgICAgIGZvY3VzYWJsZTogZm9jdXNhYmxlLFxuICAgICAgICAgIHJvbGU6IFwiaW1nXCIsXG4gICAgICAgICAgdGl0bGU6IHRpdGxlLFxuICAgICAgICAgIFwiZGF0YS1pY29uLXR5cGVcIjogaWNvblRpdGxlLFxuICAgICAgICAgIFwiZGF0YS1pcy1sb2FkZWRcIjogaXNMb2FkZWQgfHwgdW5kZWZpbmVkLFxuICAgICAgICAgIFwiZGF0YS1pcy1sb2FkaW5nXCI6IGlzTG9hZGluZyB8fCB1bmRlZmluZWRcbiAgICAgICAgfSwgdGl0bGVJZCwgcmVzdCwgaGlkZUljb25FbXB0eSkpO1xuICAgICAgfVxuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlJY29uQ2xhc3M7XG59KFB1cmVDb21wb25lbnQpO1xuRXVpSWNvbkNsYXNzLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAgICogYEVudW1gIGlzIGFueSBvZiB0aGUgbmFtZWQgaWNvbnMgbGlzdGVkIGluIHRoZSBkb2NzLCBgc3RyaW5nYCBpcyB1c3VhbGx5IGEgVVJMIHRvIGFuIFNWRyBmaWxlLCBhbmQgYGVsZW1lbnRUeXBlYCBpcyBhbnkgUmVhY3QgU1ZHIGNvbXBvbmVudFxuICAgICAgICovXG4gIHR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhY2Nlc3NpYmlsaXR5XCIsIFwiYWRkRGF0YUFwcFwiLCBcImFkdmFuY2VkU2V0dGluZ3NBcHBcIiwgXCJhZ2VudEFwcFwiLCBcImFnZ3JlZ2F0ZVwiLCBcImFsZXJ0XCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbG9ja1wiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQUNpcmNsZUZpbGxlZFwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRvY3VtZW50XCIsIFwiZG9jdW1lbnRFZGl0XCIsIFwiZG9jdW1lbnRhdGlvblwiLCBcImRvY3VtZW50c1wiLCBcImRvdFwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJleGl0XCIsIFwiZXhwYW5kXCIsIFwiZXhwYW5kTWluaVwiLCBcImV4cG9ydEFjdGlvblwiLCBcImV5ZVwiLCBcImV5ZUNsb3NlZFwiLCBcImZhY2VIYXBweVwiLCBcImZhY2VOZXV0cmFsXCIsIFwiZmFjZVNhZFwiLCBcImZpbGViZWF0QXBwXCIsIFwiZmlsdGVyXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhDbG9zZVwiLCBcImluZGV4RWRpdFwiLCBcImluZGV4Rmx1c2hcIiwgXCJpbmRleE1hbmFnZW1lbnRBcHBcIiwgXCJpbmRleE1hcHBpbmdcIiwgXCJpbmRleE9wZW5cIiwgXCJpbmRleFBhdHRlcm5BcHBcIiwgXCJpbmRleFJvbGx1cEFwcFwiLCBcImluZGV4UnVudGltZVwiLCBcImluZGV4U2V0dGluZ3NcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibmFtZXNwYWNlXCIsIFwibmVzdGVkXCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZWxpbmVBcHBcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzQXBwXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpb25BcHBcIiwgXCJ0aW1lUmVmcmVzaFwiLCBcInRpbWVzbGlkZXJcIiwgXCJ0cmFpbmluZ1wiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsXG5cbiAgLyoqXG4gICAgICAgKiBPbmUgb2YgRVVJJ3MgY29sb3IgcGFsZXR0ZSBvciBhIHZhbGlkIENTUyBjb2xvciB2YWx1ZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvY29sb3JfdmFsdWUuXG4gICAgICAgKiBOb3RlIHRoYXQgY29sb3Jpbmcgb25seSB3b3JrcyBpZiB5b3VyIFNWRyBpcyByZW1vdmVkIG9mIGZpbGwgYXR0cmlidXRlcy5cbiAgICAgICAqL1xuICBjb2xvcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWRdKSxcblxuICAvKipcbiAgICAgICAqIE5vdGUgdGhhdCBldmVyeSBzaXplIG90aGVyIHRoYW4gYG9yaWdpbmFsYCBhc3N1bWVzIHRoZSBwcm92aWRlZCBTVkcgc2l0cyBvbiBhIHNxdWFyZSB2aWV3Ym94LlxuICAgICAgICovXG4gIHNpemU6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICAgKiBEZXNjcmlwdGl2ZSB0aXRsZSBmb3IgbmFtaW5nIHRoZSBpY29uIGJhc2VkIG9uIGl0cyB1c2VcbiAgICAgICAqL1xuICB0aXRsZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgICAqIEEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSB0aXRsZSBlbGVtZW50XG4gICAgICAgKi9cbiAgdGl0bGVJZDogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgICAqIEl0cyB2YWx1ZSBzaG91bGQgYmUgb25lIG9yIG1vcmUgZWxlbWVudCBJRHNcbiAgICAgICAqL1xuICBcImFyaWEtbGFiZWxsZWRieVwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAgICogQ2FsbGJhY2sgd2hlbiB0aGUgaWNvbiBoYXMgYmVlbiBsb2FkZWQgJiByZW5kZXJlZFxuICAgICAgICovXG4gIG9uSWNvbkxvYWQ6IFByb3BUeXBlcy5mdW5jXG59O1xuZXhwb3J0IHZhciBFdWlJY29uID0gd2l0aEV1aVRoZW1lKEV1aUljb25DbGFzcyk7IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5leHBvcnQgdmFyIHR5cGVUb1BhdGhNYXAgPSB7XG4gIGFjY2Vzc2liaWxpdHk6ICdhY2Nlc3NpYmlsaXR5JyxcbiAgYWRkRGF0YUFwcDogJ2FwcF9hZGRfZGF0YScsXG4gIGFkdmFuY2VkU2V0dGluZ3NBcHA6ICdhcHBfYWR2YW5jZWRfc2V0dGluZ3MnLFxuICBhZ2VudEFwcDogJ2FwcF9mbGVldCcsXG4gIGFnZ3JlZ2F0ZTogJ2FnZ3JlZ2F0ZScsXG4gIGFsZXJ0OiAnYWxlcnQnLFxuICBhbmFseXplRXZlbnQ6ICdhbmFseXplRXZlbnQnLFxuICBhbm5vdGF0aW9uOiAnYW5ub3RhdGlvbicsXG4gIGFwbUFwcDogJ2FwcF9hcG0nLFxuICBhcG1UcmFjZTogJ2FwbV90cmFjZScsXG4gIGFwcFNlYXJjaEFwcDogJ2FwcF9hcHBfc2VhcmNoJyxcbiAgYXBwczogJ2FwcHMnLFxuICBhcnJvd0Rvd246ICdhcnJvd19kb3duJyxcbiAgYXJyb3dMZWZ0OiAnYXJyb3dfbGVmdCcsXG4gIGFycm93UmlnaHQ6ICdhcnJvd19yaWdodCcsXG4gIGFycm93VXA6ICdhcnJvd191cCcsXG4gIGFycm93U3RhcnQ6ICdhcnJvd1N0YXJ0JyxcbiAgYXJyb3dFbmQ6ICdhcnJvd0VuZCcsXG4gIGFzdGVyaXNrOiAnYXN0ZXJpc2snLFxuICBhdWRpdGJlYXRBcHA6ICdhcHBfYXVkaXRiZWF0JyxcbiAgYmVha2VyOiAnYmVha2VyJyxcbiAgYmVsbDogJ2JlbGwnLFxuICBiZWxsU2xhc2g6ICdiZWxsU2xhc2gnLFxuICBib2x0OiAnYm9sdCcsXG4gIGJveGVzSG9yaXpvbnRhbDogJ2JveGVzX2hvcml6b250YWwnLFxuICBib3hlc1ZlcnRpY2FsOiAnYm94ZXNfdmVydGljYWwnLFxuICBicmFuY2g6ICdicmFuY2gnLFxuICBicmFuY2hVc2VyOiAnYnJhbmNoVXNlcicsXG4gIGJyb29tOiAnYnJvb20nLFxuICBicnVzaDogJ2JydXNoJyxcbiAgYnVnOiAnYnVnJyxcbiAgYnVsbHNleWU6ICdidWxsc2V5ZScsXG4gIGNhbGVuZGFyOiAnY2FsZW5kYXInLFxuICBjYW52YXNBcHA6ICdhcHBfY2FudmFzJyxcbiAgY2FzZXNBcHA6ICdhcHBfY2FzZXMnLFxuICBjaGVjazogJ2NoZWNrJyxcbiAgY2hlY2tJbkNpcmNsZUZpbGxlZDogJ2NoZWNrSW5DaXJjbGVGaWxsZWQnLFxuICBjaGVlcjogJ2NoZWVyJyxcbiAgY2xhc3NpZmljYXRpb25Kb2I6ICdtbF9jbGFzc2lmaWNhdGlvbl9qb2InLFxuICBjbG9jazogJ2Nsb2NrJyxcbiAgY2xvdWREcml6emxlOiAnY2xvdWREcml6emxlJyxcbiAgY2xvdWRTdG9ybXk6ICdjbG91ZFN0b3JteScsXG4gIGNsb3VkU3Vubnk6ICdjbG91ZFN1bm55JyxcbiAgY2x1c3RlcjogJ2NsdXN0ZXInLFxuICBjb2RlQXBwOiAnYXBwX2NvZGUnLFxuICBjb2xvcjogJ2NvbG9yJyxcbiAgY29tcHV0ZTogJ2NvbXB1dGUnLFxuICBjb25zb2xlOiAnY29uc29sZScsXG4gIGNvbnNvbGVBcHA6ICdhcHBfY29uc29sZScsXG4gIGNvbnRhaW5lcjogJ2NvbnRhaW5lcicsXG4gIGNvbnRpbnVpdHlBYm92ZTogJ2NvbnRpbnVpdHlBYm92ZScsXG4gIGNvbnRpbnVpdHlBYm92ZUJlbG93OiAnY29udGludWl0eUFib3ZlQmVsb3cnLFxuICBjb250aW51aXR5QmVsb3c6ICdjb250aW51aXR5QmVsb3cnLFxuICBjb250aW51aXR5V2l0aGluOiAnY29udGludWl0eVdpdGhpbicsXG4gIGNvbnRyb2xzSG9yaXpvbnRhbDogJ2NvbnRyb2xzX2hvcml6b250YWwnLFxuICBjb250cm9sc1ZlcnRpY2FsOiAnY29udHJvbHNfdmVydGljYWwnLFxuICBjb3B5OiAnY29weScsXG4gIGNvcHlDbGlwYm9hcmQ6ICdjb3B5X2NsaXBib2FyZCcsXG4gIGNyZWF0ZUFkdmFuY2VkSm9iOiAnbWxfY3JlYXRlX2FkdmFuY2VkX2pvYicsXG4gIGNyZWF0ZU11bHRpTWV0cmljSm9iOiAnbWxfY3JlYXRlX211bHRpX21ldHJpY19qb2InLFxuICBjcmVhdGVQb3B1bGF0aW9uSm9iOiAnbWxfY3JlYXRlX3BvcHVsYXRpb25fam9iJyxcbiAgY3JlYXRlU2luZ2xlTWV0cmljSm9iOiAnbWxfY3JlYXRlX3NpbmdsZV9tZXRyaWNfam9iJyxcbiAgY3Jvc3M6ICdjcm9zcycsXG4gIGNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwOiAnYXBwX2Nyb3NzX2NsdXN0ZXJfcmVwbGljYXRpb24nLFxuICBjcm9zc0luQUNpcmNsZUZpbGxlZDogJ2Nyb3NzSW5BQ2lyY2xlRmlsbGVkJyxcbiAgY3Jvc3NoYWlyczogJ2Nyb3NzaGFpcnMnLFxuICBjdXJyZW5jeTogJ2N1cnJlbmN5JyxcbiAgY3V0OiAnY3V0JyxcbiAgZGFzaGJvYXJkQXBwOiAnYXBwX2Rhc2hib2FyZCcsXG4gIGRhdGFWaXN1YWxpemVyOiAnbWxfZGF0YV92aXN1YWxpemVyJyxcbiAgZGF0YWJhc2U6ICdkYXRhYmFzZScsXG4gIGRlc2t0b3A6ICdkZXNrdG9wJyxcbiAgZGV2VG9vbHNBcHA6ICdhcHBfZGV2dG9vbHMnLFxuICBkaXNjb3ZlckFwcDogJ2FwcF9kaXNjb3ZlcicsXG4gIGRvY3VtZW50OiAnZG9jdW1lbnQnLFxuICBkb2N1bWVudEVkaXQ6ICdkb2N1bWVudEVkaXQnLFxuICBkb2N1bWVudGF0aW9uOiAnZG9jdW1lbnRhdGlvbicsXG4gIGRvY3VtZW50czogJ2RvY3VtZW50cycsXG4gIGRvdDogJ2RvdCcsXG4gIGRvdWJsZUFycm93TGVmdDogJ2RvdWJsZUFycm93TGVmdCcsXG4gIGRvdWJsZUFycm93UmlnaHQ6ICdkb3VibGVBcnJvd1JpZ2h0JyxcbiAgZG93bmxvYWQ6ICdkb3dubG9hZCcsXG4gIGVkaXRvckFsaWduQ2VudGVyOiAnZWRpdG9yX2FsaWduX2NlbnRlcicsXG4gIGVkaXRvckFsaWduTGVmdDogJ2VkaXRvcl9hbGlnbl9sZWZ0JyxcbiAgZWRpdG9yQWxpZ25SaWdodDogJ2VkaXRvcl9hbGlnbl9yaWdodCcsXG4gIGVkaXRvckJvbGQ6ICdlZGl0b3JfYm9sZCcsXG4gIGVkaXRvckNoZWNrbGlzdDogJ2VkaXRvcl9jaGVja2xpc3QnLFxuICBlZGl0b3JDb2RlQmxvY2s6ICdlZGl0b3JfY29kZV9ibG9jaycsXG4gIGVkaXRvckNvbW1lbnQ6ICdlZGl0b3JfY29tbWVudCcsXG4gIGVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsOiAnZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWwnLFxuICBlZGl0b3JEaXN0cmlidXRlVmVydGljYWw6ICdlZGl0b3JEaXN0cmlidXRlVmVydGljYWwnLFxuICBlZGl0b3JIZWFkaW5nOiAnZWRpdG9yX2hlYWRpbmcnLFxuICBlZGl0b3JJdGFsaWM6ICdlZGl0b3JfaXRhbGljJyxcbiAgZWRpdG9ySXRlbUFsaWduQm90dG9tOiAnZWRpdG9ySXRlbUFsaWduQm90dG9tJyxcbiAgZWRpdG9ySXRlbUFsaWduQ2VudGVyOiAnZWRpdG9ySXRlbUFsaWduQ2VudGVyJyxcbiAgZWRpdG9ySXRlbUFsaWduTGVmdDogJ2VkaXRvckl0ZW1BbGlnbkxlZnQnLFxuICBlZGl0b3JJdGVtQWxpZ25NaWRkbGU6ICdlZGl0b3JJdGVtQWxpZ25NaWRkbGUnLFxuICBlZGl0b3JJdGVtQWxpZ25SaWdodDogJ2VkaXRvckl0ZW1BbGlnblJpZ2h0JyxcbiAgZWRpdG9ySXRlbUFsaWduVG9wOiAnZWRpdG9ySXRlbUFsaWduVG9wJyxcbiAgZWRpdG9yTGluazogJ2VkaXRvcl9saW5rJyxcbiAgZWRpdG9yT3JkZXJlZExpc3Q6ICdlZGl0b3Jfb3JkZXJlZF9saXN0JyxcbiAgZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0OiAnZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0JyxcbiAgZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodDogJ2VkaXRvclBvc2l0aW9uQm90dG9tUmlnaHQnLFxuICBlZGl0b3JQb3NpdGlvblRvcExlZnQ6ICdlZGl0b3JQb3NpdGlvblRvcExlZnQnLFxuICBlZGl0b3JQb3NpdGlvblRvcFJpZ2h0OiAnZWRpdG9yUG9zaXRpb25Ub3BSaWdodCcsXG4gIGVkaXRvclJlZG86ICdlZGl0b3JfcmVkbycsXG4gIGVkaXRvclN0cmlrZTogJ2VkaXRvcl9zdHJpa2UnLFxuICBlZGl0b3JUYWJsZTogJ2VkaXRvcl90YWJsZScsXG4gIGVkaXRvclVuZGVybGluZTogJ2VkaXRvcl91bmRlcmxpbmUnLFxuICBlZGl0b3JVbmRvOiAnZWRpdG9yX3VuZG8nLFxuICBlZGl0b3JVbm9yZGVyZWRMaXN0OiAnZWRpdG9yX3Vub3JkZXJlZF9saXN0JyxcbiAgZW1haWw6ICdlbWFpbCcsXG4gIGVtcHR5OiAnZW1wdHknLFxuICBlbXNBcHA6ICdhcHBfZW1zJyxcbiAgZXFsOiAnZXFsJyxcbiAgZXJhc2VyOiAnZXJhc2VyJyxcbiAgZXhpdDogJ2V4aXQnLFxuICBleHBhbmQ6ICdleHBhbmQnLFxuICBleHBhbmRNaW5pOiAnZXhwYW5kTWluaScsXG4gIGV4cG9ydEFjdGlvbjogJ2V4cG9ydCcsXG4gIGV5ZTogJ2V5ZScsXG4gIGV5ZUNsb3NlZDogJ2V5ZV9jbG9zZWQnLFxuICBmYWNlSGFwcHk6ICdmYWNlX2hhcHB5JyxcbiAgZmFjZU5ldXRyYWw6ICdmYWNlX25ldXRyYWwnLFxuICBmYWNlU2FkOiAnZmFjZV9zYWQnLFxuICBmaWxlYmVhdEFwcDogJ2FwcF9maWxlYmVhdCcsXG4gIGZpbHRlcjogJ2ZpbHRlcicsXG4gIGZsYWc6ICdmbGFnJyxcbiAgZmxlZXRBcHA6ICdhcHBfYWdlbnQnLFxuICBmb2xkOiAnZm9sZCcsXG4gIGZvbGRlckNoZWNrOiAnZm9sZGVyX2NoZWNrJyxcbiAgZm9sZGVyQ2xvc2VkOiAnZm9sZGVyX2Nsb3NlZCcsXG4gIGZvbGRlckV4Y2xhbWF0aW9uOiAnZm9sZGVyX2V4Y2xhbWF0aW9uJyxcbiAgZm9sZGVyT3BlbjogJ2ZvbGRlcl9vcGVuJyxcbiAgZnJhbWVOZXh0OiAnZnJhbWVOZXh0JyxcbiAgZnJhbWVQcmV2aW91czogJ2ZyYW1lUHJldmlvdXMnLFxuICBmdWxsU2NyZWVuOiAnZnVsbF9zY3JlZW4nLFxuICBmdWxsU2NyZWVuRXhpdDogJ2Z1bGxTY3JlZW5FeGl0JyxcbiAgZnVuY3Rpb246ICdmdW5jdGlvbicsXG4gIGdlYXI6ICdnZWFyJyxcbiAgZ2lzQXBwOiAnYXBwX2dpcycsXG4gIGdsYXNzZXM6ICdnbGFzc2VzJyxcbiAgZ2xvYmU6ICdnbG9iZScsXG4gIGdyYWI6ICdncmFiJyxcbiAgZ3JhYkhvcml6b250YWw6ICdncmFiX2hvcml6b250YWwnLFxuICBncmFwaEFwcDogJ2FwcF9ncmFwaCcsXG4gIGdyaWQ6ICdncmlkJyxcbiAgZ3Jva0FwcDogJ2FwcF9ncm9rJyxcbiAgaGVhcnQ6ICdoZWFydCcsXG4gIGhlYXJ0YmVhdEFwcDogJ2FwcF9oZWFydGJlYXQnLFxuICBoZWF0bWFwOiAnaGVhdG1hcCcsXG4gIGhlbHA6ICdoZWxwJyxcbiAgaG9tZTogJ2hvbWUnLFxuICBpSW5DaXJjbGU6ICdpSW5DaXJjbGUnLFxuICBpbWFnZTogJ2ltYWdlJyxcbiAgaW1wb3J0QWN0aW9uOiAnaW1wb3J0JyxcbiAgaW5kZXhDbG9zZTogJ2luZGV4X2Nsb3NlJyxcbiAgaW5kZXhFZGl0OiAnaW5kZXhfZWRpdCcsXG4gIGluZGV4Rmx1c2g6ICdpbmRleF9mbHVzaCcsXG4gIGluZGV4TWFuYWdlbWVudEFwcDogJ2FwcF9pbmRleF9tYW5hZ2VtZW50JyxcbiAgaW5kZXhNYXBwaW5nOiAnaW5kZXhfbWFwcGluZycsXG4gIGluZGV4T3BlbjogJ2luZGV4X29wZW4nLFxuICBpbmRleFBhdHRlcm5BcHA6ICdhcHBfaW5kZXhfcGF0dGVybicsXG4gIGluZGV4Um9sbHVwQXBwOiAnYXBwX2luZGV4X3JvbGx1cCcsXG4gIGluZGV4UnVudGltZTogJ2luZGV4X3J1bnRpbWUnLFxuICBpbmRleFNldHRpbmdzOiAnaW5kZXhfc2V0dGluZ3MnLFxuICBpbnB1dE91dHB1dDogJ2lucHV0T3V0cHV0JyxcbiAgaW5zcGVjdDogJ2luc3BlY3QnLFxuICBpbnZlcnQ6ICdpbnZlcnQnLFxuICBpcDogJ2lwJyxcbiAga2V5Ym9hcmQ6ICdrZXlib2FyZCcsXG4gIGtxbEZpZWxkOiAna3FsX2ZpZWxkJyxcbiAga3FsRnVuY3Rpb246ICdrcWxfZnVuY3Rpb24nLFxuICBrcWxPcGVyYW5kOiAna3FsX29wZXJhbmQnLFxuICBrcWxTZWxlY3RvcjogJ2txbF9zZWxlY3RvcicsXG4gIGtxbFZhbHVlOiAna3FsX3ZhbHVlJyxcbiAga3ViZXJuZXRlc05vZGU6ICdrdWJlcm5ldGVzTm9kZScsXG4gIGt1YmVybmV0ZXNQb2Q6ICdrdWJlcm5ldGVzUG9kJyxcbiAgbGF5ZXJzOiAnbGF5ZXJzJyxcbiAgbGVuc0FwcDogJ2FwcF9sZW5zJyxcbiAgbGV0dGVyaW5nOiAnbGV0dGVyaW5nJyxcbiAgbGluZURhc2hlZDogJ2xpbmVEYXNoZWQnLFxuICBsaW5lRG90dGVkOiAnbGluZURvdHRlZCcsXG4gIGxpbmVTb2xpZDogJ2xpbmVTb2xpZCcsXG4gIGxpbms6ICdsaW5rJyxcbiAgbGlzdDogJ2xpc3QnLFxuICBsaXN0QWRkOiAnbGlzdF9hZGQnLFxuICBsb2NrOiAnbG9jaycsXG4gIGxvY2tPcGVuOiAnbG9ja09wZW4nLFxuICBsb2dvQVdTOiAnbG9nb19hd3MnLFxuICBsb2dvQVdTTW9ubzogJ2xvZ29fYXdzX21vbm8nLFxuICBsb2dvQWVyb3NwaWtlOiAnbG9nb19hZXJvc3Bpa2UnLFxuICBsb2dvQXBhY2hlOiAnbG9nb19hcGFjaGUnLFxuICBsb2dvQXBwU2VhcmNoOiAnbG9nb19hcHBfc2VhcmNoJyxcbiAgbG9nb0F6dXJlOiAnbG9nb19henVyZScsXG4gIGxvZ29BenVyZU1vbm86ICdsb2dvX2F6dXJlX21vbm8nLFxuICBsb2dvQmVhdHM6ICdsb2dvX2JlYXRzJyxcbiAgbG9nb0J1c2luZXNzQW5hbHl0aWNzOiAnbG9nb19idXNpbmVzc19hbmFseXRpY3MnLFxuICBsb2dvQ2VwaDogJ2xvZ29fY2VwaCcsXG4gIGxvZ29DbG91ZDogJ2xvZ29fY2xvdWQnLFxuICBsb2dvQ2xvdWRFbnRlcnByaXNlOiAnbG9nb19jbG91ZF9lY2UnLFxuICBsb2dvQ29kZTogJ2xvZ29fY29kZScsXG4gIGxvZ29Db2Rlc2FuZGJveDogJ2xvZ29fY29kZXNhbmRib3gnLFxuICBsb2dvQ291Y2hiYXNlOiAnbG9nb19jb3VjaGJhc2UnLFxuICBsb2dvRG9ja2VyOiAnbG9nb19kb2NrZXInLFxuICBsb2dvRHJvcHdpemFyZDogJ2xvZ29fZHJvcHdpemFyZCcsXG4gIGxvZ29FbGFzdGljOiAnbG9nb19lbGFzdGljJyxcbiAgbG9nb0VsYXN0aWNTdGFjazogJ2xvZ29fZWxhc3RpY19zdGFjaycsXG4gIGxvZ29FbGFzdGljc2VhcmNoOiAnbG9nb19lbGFzdGljc2VhcmNoJyxcbiAgbG9nb0VudGVycHJpc2VTZWFyY2g6ICdsb2dvX2VudGVycHJpc2Vfc2VhcmNoJyxcbiAgbG9nb0V0Y2Q6ICdsb2dvX2V0Y2QnLFxuICBsb2dvR0NQOiAnbG9nb19nY3AnLFxuICBsb2dvR0NQTW9ubzogJ2xvZ29fZ2NwX21vbm8nLFxuICBsb2dvR2l0aHViOiAnbG9nb19naXRodWInLFxuICBsb2dvR21haWw6ICdsb2dvX2dtYWlsJyxcbiAgbG9nb0dvbGFuZzogJ2xvZ29fZ29sYW5nJyxcbiAgbG9nb0dvb2dsZUc6ICdsb2dvX2dvb2dsZV9nJyxcbiAgbG9nb0hBcHJveHk6ICdsb2dvX2hhcHJveHknLFxuICBsb2dvSUJNOiAnbG9nb19pYm0nLFxuICBsb2dvSUJNTW9ubzogJ2xvZ29faWJtX21vbm8nLFxuICBsb2dvS2Fma2E6ICdsb2dvX2thZmthJyxcbiAgbG9nb0tpYmFuYTogJ2xvZ29fa2liYW5hJyxcbiAgbG9nb0t1YmVybmV0ZXM6ICdsb2dvX2t1YmVybmV0ZXMnLFxuICBsb2dvTG9nZ2luZzogJ2xvZ29fbG9nZ2luZycsXG4gIGxvZ29Mb2dzdGFzaDogJ2xvZ29fbG9nc3Rhc2gnLFxuICBsb2dvTWFwczogJ2xvZ29fbWFwcycsXG4gIGxvZ29NZW1jYWNoZWQ6ICdsb2dvX21lbWNhY2hlZCcsXG4gIGxvZ29NZXRyaWNzOiAnbG9nb19tZXRyaWNzJyxcbiAgbG9nb01vbmdvZGI6ICdsb2dvX21vbmdvZGInLFxuICBsb2dvTXlTUUw6ICdsb2dvX215c3FsJyxcbiAgbG9nb05naW54OiAnbG9nb19uZ2lueCcsXG4gIGxvZ29PYnNlcnZhYmlsaXR5OiAnbG9nb19vYnNlcnZhYmlsaXR5JyxcbiAgbG9nb09zcXVlcnk6ICdsb2dvX29zcXVlcnknLFxuICBsb2dvUGhwOiAnbG9nb19waHAnLFxuICBsb2dvUG9zdGdyZXM6ICdsb2dvX3Bvc3RncmVzJyxcbiAgbG9nb1Byb21ldGhldXM6ICdsb2dvX3Byb21ldGhldXMnLFxuICBsb2dvUmFiYml0bXE6ICdsb2dvX3JhYmJpdG1xJyxcbiAgbG9nb1JlZGlzOiAnbG9nb19yZWRpcycsXG4gIGxvZ29TZWN1cml0eTogJ2xvZ29fc2VjdXJpdHknLFxuICBsb2dvU2l0ZVNlYXJjaDogJ2xvZ29fc2l0ZV9zZWFyY2gnLFxuICBsb2dvU2tldGNoOiAnbG9nb19za2V0Y2gnLFxuICBsb2dvU2xhY2s6ICdsb2dvX3NsYWNrJyxcbiAgbG9nb1VwdGltZTogJ2xvZ29fdXB0aW1lJyxcbiAgbG9nb1dlYmhvb2s6ICdsb2dvX3dlYmhvb2snLFxuICBsb2dvV2luZG93czogJ2xvZ29fd2luZG93cycsXG4gIGxvZ29Xb3JrcGxhY2VTZWFyY2g6ICdsb2dvX3dvcmtwbGFjZV9zZWFyY2gnLFxuICBsb2dzQXBwOiAnYXBwX2xvZ3MnLFxuICBsb2dzdGFzaEZpbHRlcjogJ2xvZ3N0YXNoX2ZpbHRlcicsXG4gIGxvZ3N0YXNoSWY6ICdsb2dzdGFzaF9pZicsXG4gIGxvZ3N0YXNoSW5wdXQ6ICdsb2dzdGFzaF9pbnB1dCcsXG4gIGxvZ3N0YXNoT3V0cHV0OiAnbG9nc3Rhc2hfb3V0cHV0JyxcbiAgbG9nc3Rhc2hRdWV1ZTogJ2xvZ3N0YXNoX3F1ZXVlJyxcbiAgbWFjaGluZUxlYXJuaW5nQXBwOiAnYXBwX21sJyxcbiAgbWFnbmV0OiAnbWFnbmV0JyxcbiAgbWFnbmlmeVdpdGhFeGNsYW1hdGlvbjogJ21hZ25pZnlXaXRoRXhjbGFtYXRpb24nLFxuICBtYWduaWZ5V2l0aE1pbnVzOiAnbWFnbmlmeVdpdGhNaW51cycsXG4gIG1hZ25pZnlXaXRoUGx1czogJ21hZ25pZnlXaXRoUGx1cycsXG4gIG1hbmFnZW1lbnRBcHA6ICdhcHBfbWFuYWdlbWVudCcsXG4gIG1hcE1hcmtlcjogJ21hcF9tYXJrZXInLFxuICBtZW1vcnk6ICdtZW1vcnknLFxuICBtZW51OiAnbWVudScsXG4gIG1lbnVEb3duOiAnbWVudURvd24nLFxuICBtZW51TGVmdDogJ21lbnVMZWZ0JyxcbiAgbWVudVJpZ2h0OiAnbWVudVJpZ2h0JyxcbiAgbWVudVVwOiAnbWVudVVwJyxcbiAgbWVyZ2U6ICdtZXJnZScsXG4gIG1ldHJpY2JlYXRBcHA6ICdhcHBfbWV0cmljYmVhdCcsXG4gIG1ldHJpY3NBcHA6ICdhcHBfbWV0cmljcycsXG4gIG1pbmltaXplOiAnbWluaW1pemUnLFxuICBtaW51czogJ21pbnVzJyxcbiAgbWludXNJbkNpcmNsZTogJ21pbnVzX2luX2NpcmNsZScsXG4gIG1pbnVzSW5DaXJjbGVGaWxsZWQ6ICdtaW51c19pbl9jaXJjbGVfZmlsbGVkJyxcbiAgbW9iaWxlOiAnbW9iaWxlJyxcbiAgbW9uaXRvcmluZ0FwcDogJ2FwcF9tb25pdG9yaW5nJyxcbiAgbW9vbjogJ21vb24nLFxuICBuYW1lc3BhY2U6ICduYW1lc3BhY2UnLFxuICBuZXN0ZWQ6ICduZXN0ZWQnLFxuICBub2RlOiAnbm9kZScsXG4gIG5vdGVib29rQXBwOiAnYXBwX25vdGVib29rJyxcbiAgbnVtYmVyOiAnbnVtYmVyJyxcbiAgb2ZmbGluZTogJ29mZmxpbmUnLFxuICBvbmxpbmU6ICdvbmxpbmUnLFxuICBvdXRsaWVyRGV0ZWN0aW9uSm9iOiAnbWxfb3V0bGllcl9kZXRlY3Rpb25fam9iJyxcbiAgcGFja2FnZTogJ3BhY2thZ2UnLFxuICBwYWNrZXRiZWF0QXBwOiAnYXBwX3BhY2tldGJlYXQnLFxuICBwYWdlU2VsZWN0OiAncGFnZVNlbGVjdCcsXG4gIHBhZ2VzU2VsZWN0OiAncGFnZXNTZWxlY3QnLFxuICBwYXBlckNsaXA6ICdwYXBlcl9jbGlwJyxcbiAgcGFydGlhbDogJ3BhcnRpYWwnLFxuICBwYXVzZTogJ3BhdXNlJyxcbiAgcGF5bWVudDogJ3BheW1lbnQnLFxuICBwZW5jaWw6ICdwZW5jaWwnLFxuICBwZXJjZW50OiAncGVyY2VudCcsXG4gIHBpbjogJ3BpbicsXG4gIHBpbkZpbGxlZDogJ3Bpbl9maWxsZWQnLFxuICBwaXBlbGluZUFwcDogJ2FwcF9waXBlbGluZScsXG4gIHBsYXk6ICdwbGF5JyxcbiAgcGxheUZpbGxlZDogJ3BsYXlGaWxsZWQnLFxuICBwbHVzOiAncGx1cycsXG4gIHBsdXNJbkNpcmNsZTogJ3BsdXNfaW5fY2lyY2xlJyxcbiAgcGx1c0luQ2lyY2xlRmlsbGVkOiAncGx1c19pbl9jaXJjbGVfZmlsbGVkJyxcbiAgcG9wb3V0OiAncG9wb3V0JyxcbiAgcHVzaDogJ3B1c2gnLFxuICBxdWVzdGlvbkluQ2lyY2xlOiAncXVlc3Rpb25faW5fY2lyY2xlJyxcbiAgcXVvdGU6ICdxdW90ZScsXG4gIHJlY2VudGx5Vmlld2VkQXBwOiAnYXBwX3JlY2VudGx5X3ZpZXdlZCcsXG4gIHJlZnJlc2g6ICdyZWZyZXNoJyxcbiAgcmVncmVzc2lvbkpvYjogJ21sX3JlZ3Jlc3Npb25fam9iJyxcbiAgcmVwb3J0ZXI6ICdyZXBvcnRlcicsXG4gIHJlcG9ydGluZ0FwcDogJ2FwcF9yZXBvcnRpbmcnLFxuICByZXR1cm5LZXk6ICdyZXR1cm5fa2V5JyxcbiAgc2F2ZTogJ3NhdmUnLFxuICBzYXZlZE9iamVjdHNBcHA6ICdhcHBfc2F2ZWRfb2JqZWN0cycsXG4gIHNjYWxlOiAnc2NhbGUnLFxuICBzZWFyY2g6ICdzZWFyY2gnLFxuICBzZWFyY2hQcm9maWxlckFwcDogJ2FwcF9zZWFyY2hfcHJvZmlsZXInLFxuICBzZWN1cml0eUFuYWx5dGljc0FwcDogJ2FwcF9zZWN1cml0eV9hbmFseXRpY3MnLFxuICBzZWN1cml0eUFwcDogJ2FwcF9zZWN1cml0eScsXG4gIHNlY3VyaXR5U2lnbmFsOiAnc2VjdXJpdHlTaWduYWwnLFxuICBzZWN1cml0eVNpZ25hbERldGVjdGVkOiAnc2VjdXJpdHlTaWduYWxEZXRlY3RlZCcsXG4gIHNlY3VyaXR5U2lnbmFsUmVzb2x2ZWQ6ICdzZWN1cml0eVNpZ25hbFJlc29sdmVkJyxcbiAgc2Vzc2lvblZpZXdlcjogJ3Nlc3Npb25WaWV3ZXInLFxuICBzaGFyZDogJ3NoYXJkJyxcbiAgc2hhcmU6ICdzaGFyZScsXG4gIHNub3dmbGFrZTogJ3Nub3dmbGFrZScsXG4gIHNvcnREb3duOiAnc29ydF9kb3duJyxcbiAgc29ydExlZnQ6ICdzb3J0TGVmdCcsXG4gIHNvcnRSaWdodDogJ3NvcnRSaWdodCcsXG4gIHNvcnRVcDogJ3NvcnRfdXAnLFxuICBzb3J0YWJsZTogJ3NvcnRhYmxlJyxcbiAgc3BhY2VzQXBwOiAnYXBwX3NwYWNlcycsXG4gIHNxbEFwcDogJ2FwcF9zcWwnLFxuICBzdGFyRW1wdHk6ICdzdGFyX2VtcHR5JyxcbiAgc3RhckVtcHR5U3BhY2U6ICdzdGFyX2VtcHR5X3NwYWNlJyxcbiAgc3RhckZpbGxlZDogJ3N0YXJfZmlsbGVkJyxcbiAgc3RhckZpbGxlZFNwYWNlOiAnc3Rhcl9maWxsZWRfc3BhY2UnLFxuICBzdGFyTWludXNFbXB0eTogJ3N0YXJfbWludXNfZW1wdHknLFxuICBzdGFyTWludXNGaWxsZWQ6ICdzdGFyX21pbnVzX2ZpbGxlZCcsXG4gIHN0YXJQbHVzRW1wdHk6ICdzdGFyUGx1c0VtcHR5JyxcbiAgc3RhclBsdXNGaWxsZWQ6ICdzdGFyUGx1c0ZpbGxlZCcsXG4gIHN0YXRzOiAnc3RhdHMnLFxuICBzdG9wOiAnc3RvcCcsXG4gIHN0b3BGaWxsZWQ6ICdzdG9wX2ZpbGxlZCcsXG4gIHN0b3BTbGFzaDogJ3N0b3Bfc2xhc2gnLFxuICBzdG9yYWdlOiAnc3RvcmFnZScsXG4gIHN0cmluZzogJ3N0cmluZycsXG4gIHN1Ym1vZHVsZTogJ3N1Ym1vZHVsZScsXG4gIHN1bjogJ3N1bicsXG4gIHN3YXRjaElucHV0OiAnc3dhdGNoX2lucHV0JyxcbiAgLy8gVW5kb2N1bWVudGVkIG9uIHB1cnBvc2UuIEhhcyBhbiBleHRyYSBzdHJva2UgZm9yIEV1aUNvbG9yUGlja2VyXG4gIHN5bWxpbms6ICdzeW1saW5rJyxcbiAgdGFibGVEZW5zaXR5Q29tcGFjdDogJ3RhYmxlX2RlbnNpdHlfY29tcGFjdCcsXG4gIHRhYmxlRGVuc2l0eUV4cGFuZGVkOiAndGFibGVfZGVuc2l0eV9leHBhbmRlZCcsXG4gIHRhYmxlRGVuc2l0eU5vcm1hbDogJ3RhYmxlX2RlbnNpdHlfbm9ybWFsJyxcbiAgdGFibGVPZkNvbnRlbnRzOiAndGFibGVPZkNvbnRlbnRzJyxcbiAgdGFnOiAndGFnJyxcbiAgdGVhcjogJ3RlYXInLFxuICB0ZW1wZXJhdHVyZTogJ3RlbXBlcmF0dXJlJyxcbiAgdGltZWxpbmU6ICd0aW1lbGluZScsXG4gIHRpbWVsaW9uQXBwOiAnYXBwX3RpbWVsaW9uJyxcbiAgdGltZVJlZnJlc2g6ICd0aW1lUmVmcmVzaCcsXG4gIHRpbWVzbGlkZXI6ICd0aW1lc2xpZGVyJyxcbiAgdHJhaW5pbmc6ICd0cmFpbmluZycsXG4gIHRyYXNoOiAndHJhc2gnLFxuICB1bmZvbGQ6ICd1bmZvbGQnLFxuICB1bmxpbms6ICd1bmxpbmsnLFxuICB1cGdyYWRlQXNzaXN0YW50QXBwOiAnYXBwX3VwZ3JhZGVfYXNzaXN0YW50JyxcbiAgdXB0aW1lQXBwOiAnYXBwX3VwdGltZScsXG4gIHVzZXI6ICd1c2VyJyxcbiAgdXNlckF2YXRhcjogJ3VzZXJBdmF0YXInLFxuICB1c2VyczogJ3VzZXJzJyxcbiAgdXNlcnNSb2xlc0FwcDogJ2FwcF91c2Vyc19yb2xlcycsXG4gIHZlY3RvcjogJ3ZlY3RvcicsXG4gIHZpZGVvUGxheWVyOiAndmlkZW9QbGF5ZXInLFxuICB2aXNBcmVhOiAndmlzX2FyZWEnLFxuICB2aXNBcmVhU3RhY2tlZDogJ3Zpc19hcmVhX3N0YWNrZWQnLFxuICB2aXNCYXJIb3Jpem9udGFsOiAndmlzX2Jhcl9ob3Jpem9udGFsJyxcbiAgdmlzQmFySG9yaXpvbnRhbFN0YWNrZWQ6ICd2aXNfYmFyX2hvcml6b250YWxfc3RhY2tlZCcsXG4gIHZpc0JhclZlcnRpY2FsOiAndmlzX2Jhcl92ZXJ0aWNhbCcsXG4gIHZpc0JhclZlcnRpY2FsU3RhY2tlZDogJ3Zpc19iYXJfdmVydGljYWxfc3RhY2tlZCcsXG4gIHZpc0dhdWdlOiAndmlzX2dhdWdlJyxcbiAgdmlzR29hbDogJ3Zpc19nb2FsJyxcbiAgdmlzTGluZTogJ3Zpc19saW5lJyxcbiAgdmlzTWFwQ29vcmRpbmF0ZTogJ3Zpc19tYXBfY29vcmRpbmF0ZScsXG4gIHZpc01hcFJlZ2lvbjogJ3Zpc19tYXBfcmVnaW9uJyxcbiAgdmlzTWV0cmljOiAndmlzX21ldHJpYycsXG4gIHZpc1BpZTogJ3Zpc19waWUnLFxuICB2aXNUYWJsZTogJ3Zpc190YWJsZScsXG4gIHZpc1RhZ0Nsb3VkOiAndmlzX3RhZ19jbG91ZCcsXG4gIHZpc1RleHQ6ICd2aXNfdGV4dCcsXG4gIHZpc1RpbWVsaW9uOiAndmlzX3RpbWVsaW9uJyxcbiAgdmlzVmVnYTogJ3Zpc192ZWdhJyxcbiAgdmlzVmlzdWFsQnVpbGRlcjogJ3Zpc192aXN1YWxfYnVpbGRlcicsXG4gIHZpc3VhbGl6ZUFwcDogJ2FwcF92aXN1YWxpemUnLFxuICB3YXRjaGVzQXBwOiAnYXBwX3dhdGNoZXMnLFxuICB3b3JkV3JhcDogJ3dvcmRXcmFwJyxcbiAgd29yZFdyYXBEaXNhYmxlZDogJ3dvcmRXcmFwRGlzYWJsZWQnLFxuICB3b3JrcGxhY2VTZWFyY2hBcHA6ICdhcHBfd29ya3BsYWNlX3NlYXJjaCcsXG4gIHdyZW5jaDogJ3dyZW5jaCcsXG4gIC8vIFRva2VuIEljb24gSW1wb3J0c1xuICB0b2tlbkFsaWFzOiAndG9rZW5BbGlhcycsXG4gIHRva2VuQW5ub3RhdGlvbjogJ3Rva2VuQW5ub3RhdGlvbicsXG4gIHRva2VuQXJyYXk6ICd0b2tlbkFycmF5JyxcbiAgdG9rZW5CaW5hcnk6ICd0b2tlbkJpbmFyeScsXG4gIHRva2VuQm9vbGVhbjogJ3Rva2VuQm9vbGVhbicsXG4gIHRva2VuQ2xhc3M6ICd0b2tlbkNsYXNzJyxcbiAgdG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyOiAndG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyJyxcbiAgdG9rZW5Db25zdGFudDogJ3Rva2VuQ29uc3RhbnQnLFxuICB0b2tlbkRhdGU6ICd0b2tlbkRhdGUnLFxuICB0b2tlbkRlbnNlVmVjdG9yOiAndG9rZW5EZW5zZVZlY3RvcicsXG4gIHRva2VuRWxlbWVudDogJ3Rva2VuRWxlbWVudCcsXG4gIHRva2VuRW51bTogJ3Rva2VuRW51bScsXG4gIHRva2VuRW51bU1lbWJlcjogJ3Rva2VuRW51bU1lbWJlcicsXG4gIHRva2VuRXZlbnQ6ICd0b2tlbkV2ZW50JyxcbiAgdG9rZW5FeGNlcHRpb246ICd0b2tlbkV4Y2VwdGlvbicsXG4gIHRva2VuRmllbGQ6ICd0b2tlbkZpZWxkJyxcbiAgdG9rZW5GaWxlOiAndG9rZW5GaWxlJyxcbiAgdG9rZW5GbGF0dGVuZWQ6ICd0b2tlbkZsYXR0ZW5lZCcsXG4gIHRva2VuRnVuY3Rpb246ICd0b2tlbkZ1bmN0aW9uJyxcbiAgdG9rZW5HZW86ICd0b2tlbkdlbycsXG4gIHRva2VuSGlzdG9ncmFtOiAndG9rZW5IaXN0b2dyYW0nLFxuICB0b2tlbkludGVyZmFjZTogJ3Rva2VuSW50ZXJmYWNlJyxcbiAgdG9rZW5JUDogJ3Rva2VuSVAnLFxuICB0b2tlbkpvaW46ICd0b2tlbkpvaW4nLFxuICB0b2tlbktleTogJ3Rva2VuS2V5JyxcbiAgdG9rZW5LZXl3b3JkOiAndG9rZW5LZXl3b3JkJyxcbiAgdG9rZW5NZXRob2Q6ICd0b2tlbk1ldGhvZCcsXG4gIHRva2VuTWV0cmljQ291bnRlcjogJ3Rva2VuTWV0cmljQ291bnRlcicsXG4gIHRva2VuTWV0cmljR2F1Z2U6ICd0b2tlbk1ldHJpY0dhdWdlJyxcbiAgdG9rZW5Nb2R1bGU6ICd0b2tlbk1vZHVsZScsXG4gIHRva2VuTmFtZXNwYWNlOiAndG9rZW5OYW1lc3BhY2UnLFxuICB0b2tlbk5lc3RlZDogJ3Rva2VuTmVzdGVkJyxcbiAgdG9rZW5OdWxsOiAndG9rZW5OdWxsJyxcbiAgdG9rZW5OdW1iZXI6ICd0b2tlbk51bWJlcicsXG4gIHRva2VuT2JqZWN0OiAndG9rZW5PYmplY3QnLFxuICB0b2tlbk9wZXJhdG9yOiAndG9rZW5PcGVyYXRvcicsXG4gIHRva2VuUGFja2FnZTogJ3Rva2VuUGFja2FnZScsXG4gIHRva2VuUGFyYW1ldGVyOiAndG9rZW5QYXJhbWV0ZXInLFxuICB0b2tlblBlcmNvbGF0b3I6ICd0b2tlblBlcmNvbGF0b3InLFxuICB0b2tlblByb3BlcnR5OiAndG9rZW5Qcm9wZXJ0eScsXG4gIHRva2VuUmFuZ2U6ICd0b2tlblJhbmdlJyxcbiAgdG9rZW5SYW5rRmVhdHVyZTogJ3Rva2VuUmFua0ZlYXR1cmUnLFxuICB0b2tlblJhbmtGZWF0dXJlczogJ3Rva2VuUmFua0ZlYXR1cmVzJyxcbiAgdG9rZW5SZXBvOiAndG9rZW5SZXBvJyxcbiAgdG9rZW5TZWFyY2hUeXBlOiAndG9rZW5TZWFyY2hUeXBlJyxcbiAgdG9rZW5TaGFwZTogJ3Rva2VuU2hhcGUnLFxuICB0b2tlblN0cmluZzogJ3Rva2VuU3RyaW5nJyxcbiAgdG9rZW5TdHJ1Y3Q6ICd0b2tlblN0cnVjdCcsXG4gIHRva2VuU3ltYm9sOiAndG9rZW5TeW1ib2wnLFxuICB0b2tlblRhZzogJ3Rva2VuVGFnJyxcbiAgdG9rZW5UZXh0OiAndG9rZW5UZXh0JyxcbiAgdG9rZW5Ub2tlbkNvdW50OiAndG9rZW5Ub2tlbkNvdW50JyxcbiAgdG9rZW5WYXJpYWJsZTogJ3Rva2VuVmFyaWFibGUnXG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgdW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMgfSBmcm9tICdyZWFjdC1kb20nO1xudmFyIF9xdWV1ZSA9IFtdO1xuXG5mdW5jdGlvbiBwcm9jZXNzUXVldWUoKSB7XG4gIC8vIHRoZSBxdWV1ZWQgZnVuY3Rpb25zIHRyaWdnZXIgcmVhY3Qgc2V0U3RhdGVzIHdoaWNoLCBpZiB1bmJhdGNoZWQsXG4gIC8vIGVhY2ggY2F1c2UgYSBmdWxsIHVwZGF0ZS0+cmVuZGVyLT5kb20gcGFzcyBfcGVyIGZ1bmN0aW9uX1xuICAvLyBpbnN0ZWFkLCB0ZWxsIFJlYWN0IHRvIHdhaXQgdW50aWwgYWxsIHVwZGF0ZXMgYXJlIGZpbmlzaGVkIGJlZm9yZSByZS1yZW5kZXJpbmdcbiAgdW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMoZnVuY3Rpb24gKCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgX3F1ZXVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICBfcXVldWVbaV0oKTtcbiAgICB9XG5cbiAgICBfcXVldWUubGVuZ3RoID0gMDtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnF1ZXVlU3RhdGVDaGFuZ2UoZm4pIHtcbiAgaWYgKF9xdWV1ZS5sZW5ndGggPT09IDApIHtcbiAgICBzZXRUaW1lb3V0KHByb2Nlc3NRdWV1ZSk7XG4gIH1cblxuICBfcXVldWUucHVzaChmbik7XG59IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5leHBvcnQgdmFyIENPTE9SUyA9IFsnZGVmYXVsdCcsICdwcmltYXJ5JywgJ3N1Y2Nlc3MnLCAnYWNjZW50JywgJ3dhcm5pbmcnLCAnZGFuZ2VyJywgJ3RleHQnLCAnc3ViZHVlZCcsICdnaG9zdCcsICdpbmhlcml0J107XG5leHBvcnQgZnVuY3Rpb24gaXNOYW1lZENvbG9yKG5hbWUpIHtcbiAgcmV0dXJuIENPTE9SUy5pbmNsdWRlcyhuYW1lKTtcbn0iLCAiZnVuY3Rpb24gX29iamVjdERlc3RydWN0dXJpbmdFbXB0eShvYmopIHsgaWYgKG9iaiA9PSBudWxsKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGRlc3RydWN0dXJlIHVuZGVmaW5lZFwiKTsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEdsb2JhbCwgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgZXVpRm9jdXNSaW5nLCBldWlTY3JvbGxCYXJTdHlsZXMgfSBmcm9tICcuLi9taXhpbnMnO1xuaW1wb3J0IHsgc2hhZGUsIHRpbnQsIHRyYW5zcGFyZW50aXplIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29sb3InO1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90aGVtZSc7XG5pbXBvcnQgeyByZXNldFN0eWxlcyBhcyByZXNldCB9IGZyb20gJy4vcmVzZXQnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpR2xvYmFsU3R5bGVzID0gZnVuY3Rpb24gRXVpR2xvYmFsU3R5bGVzKF9yZWYpIHtcbiAgX29iamVjdERlc3RydWN0dXJpbmdFbXB0eShfcmVmKTtcblxuICB2YXIgZXVpVGhlbWVDb250ZXh0ID0gdXNlRXVpVGhlbWUoKTtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lLFxuICAgICAgY29sb3JNb2RlID0gZXVpVGhlbWVDb250ZXh0LmNvbG9yTW9kZTtcbiAgdmFyIGJhc2UgPSBldWlUaGVtZS5iYXNlLFxuICAgICAgY29sb3JzID0gZXVpVGhlbWUuY29sb3JzLFxuICAgICAgZm9udCA9IGV1aVRoZW1lLmZvbnQ7XG4gIC8qKlxuICAgKiBEZWNsYXJpbmcgdGhlIHRvcCBsZXZlbCBzY3JvbGxiYXIgY29sb3JzIHRvIG1hdGNoIHRoZSB0aGVtZSBhbHNvIHJlcXVpcmVzIHNldHRpbmcgdGhlIHNpemVzIG9uIENocm9tZVxuICAgKiBzbyB0aGF0IGl0IGtub3dzIHRvIHVzZSBjdXN0b20gc3R5bGVzLiBUaGVyZWZvcmUsIHdlIGp1c3QgcmV1c2UgdGhlIHNhbWUgc2Nyb2xsYmFyIG1peGluIHdpdGggdGhpY2sgc2l6ZS5cbiAgICovXG5cbiAgdmFyIHNjcm9sbGJhclN0eWxlcyA9IGV1aVNjcm9sbEJhclN0eWxlcyhldWlUaGVtZUNvbnRleHQsIHtcbiAgICB0cmFja0NvbG9yOiBjb2xvck1vZGUgPT09ICdMSUdIVCcgPyBzaGFkZShjb2xvcnMuYm9keSwgMC4wMykgOiB0aW50KGNvbG9ycy5ib2R5LCAwLjA3KSxcbiAgICB3aWR0aDogJ2F1dG8nXG4gIH0pO1xuICAvKipcbiAgICogVGhpcyBmb250IHJlc2V0IHNldHMgYWxsIG91ciBiYXNlIGZvbnQvdHlwb2dyYXBoeSByZWxhdGVkIHByb3BlcnRpZXNcbiAgICogdGhhdCBhcmUgbmVlZGVkIHRvIG92ZXJyaWRlIGJyb3dzZXItc3BlY2lmaWMgZWxlbWVudCBzZXR0aW5ncy5cbiAgICovXG5cbiAgdmFyIGZvbnRSZXNldCA9IFwiXFxuICAgIGZvbnQtZmFtaWx5OiBcIi5jb25jYXQoZm9udC5mYW1pbHksIFwiO1xcbiAgICBmb250LXNpemU6IFwiLCBcIlwiLmNvbmNhdChmb250LnNjYWxlW2ZvbnQuYm9keS5zY2FsZV0gKiBiYXNlLCBcInB4XCIpLCBcIjtcXG4gICAgbGluZS1oZWlnaHQ6IFwiKS5jb25jYXQoYmFzZSAvIChmb250LnNjYWxlW2ZvbnQuYm9keS5zY2FsZV0gKiBiYXNlKSwgXCI7XFxuICAgIGZvbnQtd2VpZ2h0OiBcIikuY29uY2F0KGZvbnQud2VpZ2h0W2ZvbnQuYm9keS53ZWlnaHRdLCBcIjtcXG4gIFwiKTtcbiAgLyoqXG4gICAqIEZpbmFsIHN0eWxlc1xuICAgKi9cblxuICB2YXIgc3R5bGVzID0gLyojX19QVVJFX18qL2NzcyhyZXNldCwgXCIgaHRtbHtcIiwgc2Nyb2xsYmFyU3R5bGVzLCBcIiBcIiwgZm9udFJlc2V0LCBcIiB0ZXh0LXNpemUtYWRqdXN0OjEwMCU7Zm9udC1rZXJuaW5nOm5vcm1hbDtoZWlnaHQ6MTAwJTtiYWNrZ3JvdW5kLWNvbG9yOlwiLCBjb2xvcnMuYm9keSwgXCI7Y29sb3I6XCIsIGNvbG9ycy50ZXh0LCBcIjt9Y29kZSxwcmUsa2JkLHNhbXB7Zm9udC1mYW1pbHk6XCIsIGZvbnQuZmFtaWx5Q29kZSwgXCI7fWlucHV0LHRleHRhcmVhLHNlbGVjdHtcIiwgZm9udFJlc2V0LCBcIjt9YnV0dG9ue2ZvbnQtZmFtaWx5OlwiLCBmb250LmZhbWlseSwgXCI7fWVte2ZvbnQtc3R5bGU6aXRhbGljO31zdHJvbmd7Zm9udC13ZWlnaHQ6XCIsIGZvbnQud2VpZ2h0LmJvbGQsIFwiO30qOmZvY3Vze1wiLCBldWlGb2N1c1JpbmcoZXVpVGhlbWUpLCBcIjt9OjpzZWxlY3Rpb257YmFja2dyb3VuZDpcIiwgdHJhbnNwYXJlbnRpemUoY29sb3JzLnByaW1hcnksIGNvbG9yTW9kZSA9PT0gJ0xJR0hUJyA/IDAuMSA6IDAuMiksIFwiO31he2NvbG9yOlwiLCBjb2xvcnMucHJpbWFyeVRleHQsIFwiOyYsJjpob3ZlciwmOmZvY3Vze3RleHQtZGVjb3JhdGlvbjpub25lO319LmV1aUJvZHktaGFzUG9ydGFsQ29udGVudHtwb3NpdGlvbjpyZWxhdGl2ZTt9O2xhYmVsOnN0eWxlcztcIik7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEdsb2JhbCwge1xuICAgIHN0eWxlczogc3R5bGVzXG4gIH0pO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IHNoYWRlLCB0aW50LCB0cmFuc3BhcmVudGl6ZSwgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5leHBvcnQgdmFyIEJBQ0tHUk9VTkRfQ09MT1JTID0gWyd0cmFuc3BhcmVudCcsICdwbGFpbicsICdzdWJkdWVkJywgJ2FjY2VudCcsICdwcmltYXJ5JywgJ3N1Y2Nlc3MnLCAnd2FybmluZycsICdkYW5nZXInXTtcbmV4cG9ydCB2YXIgZXVpQmFja2dyb3VuZENvbG9yID0gZnVuY3Rpb24gZXVpQmFja2dyb3VuZENvbG9yKF9yZWYsIGNvbG9yKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYuZXVpVGhlbWUsXG4gICAgICBjb2xvck1vZGUgPSBfcmVmLmNvbG9yTW9kZTtcblxuICB2YXIgX3JlZjIgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHt9LFxuICAgICAgbWV0aG9kID0gX3JlZjIubWV0aG9kO1xuXG4gIGlmIChjb2xvciA9PT0gJ3RyYW5zcGFyZW50JykgcmV0dXJuICd0cmFuc3BhcmVudCc7XG5cbiAgaWYgKG1ldGhvZCA9PT0gJ3RyYW5zcGFyZW50Jykge1xuICAgIGlmIChjb2xvciA9PT0gJ3BsYWluJykge1xuICAgICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKGV1aVRoZW1lLmNvbG9ycy5naG9zdCwgMC4yKTtcbiAgICB9IGVsc2UgaWYgKGNvbG9yID09PSAnc3ViZHVlZCcpIHtcbiAgICAgIHJldHVybiB0cmFuc3BhcmVudGl6ZShldWlUaGVtZS5jb2xvcnMubGlnaHRTaGFkZSwgMC4yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKGV1aVRoZW1lLmNvbG9yc1tjb2xvcl0sIDAuMSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciB0aW50T3JTaGFkZSA9IGZ1bmN0aW9uIHRpbnRPclNoYWRlKGNvbG9yKSB7XG4gICAgICByZXR1cm4gY29sb3JNb2RlID09PSAnREFSSycgPyBzaGFkZShjb2xvciwgMC44KSA6IHRpbnQoY29sb3IsIDAuOSk7XG4gICAgfTtcblxuICAgIHN3aXRjaCAoY29sb3IpIHtcbiAgICAgIGNhc2UgJ3BsYWluJzpcbiAgICAgICAgcmV0dXJuIGV1aVRoZW1lLmNvbG9ycy5lbXB0eVNoYWRlO1xuXG4gICAgICBjYXNlICdzdWJkdWVkJzpcbiAgICAgICAgcmV0dXJuIGV1aVRoZW1lLmNvbG9ycy5ib2R5O1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdGludE9yU2hhZGUoZXVpVGhlbWUuY29sb3JzW2NvbG9yXSk7XG4gICAgfVxuICB9XG59O1xuZXhwb3J0IHZhciB1c2VFdWlCYWNrZ3JvdW5kQ29sb3IgPSBmdW5jdGlvbiB1c2VFdWlCYWNrZ3JvdW5kQ29sb3IoY29sb3IpIHtcbiAgdmFyIF9yZWYzID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcbiAgICAgIG1ldGhvZCA9IF9yZWYzLm1ldGhvZDtcblxuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICByZXR1cm4gZXVpQmFja2dyb3VuZENvbG9yKGV1aVRoZW1lLCBjb2xvciwge1xuICAgIG1ldGhvZDogbWV0aG9kXG4gIH0pO1xufTtcbmV4cG9ydCB2YXIgdXNlRXVpQmFja2dyb3VuZENvbG9yQ1NTID0gZnVuY3Rpb24gdXNlRXVpQmFja2dyb3VuZENvbG9yQ1NTKCkge1xuICByZXR1cm4ge1xuICAgIHRyYW5zcGFyZW50OiAvKiNfX1BVUkVfXyovY3NzKFwiYmFja2dyb3VuZC1jb2xvcjpcIiwgdXNlRXVpQmFja2dyb3VuZENvbG9yKCd0cmFuc3BhcmVudCcpLCBcIjs7bGFiZWw6dHJhbnNwYXJlbnQ7XCIpLFxuICAgIHBsYWluOiAvKiNfX1BVUkVfXyovY3NzKFwiYmFja2dyb3VuZC1jb2xvcjpcIiwgdXNlRXVpQmFja2dyb3VuZENvbG9yKCdwbGFpbicpLCBcIjs7bGFiZWw6cGxhaW47XCIpLFxuICAgIHN1YmR1ZWQ6IC8qI19fUFVSRV9fKi9jc3MoXCJiYWNrZ3JvdW5kLWNvbG9yOlwiLCB1c2VFdWlCYWNrZ3JvdW5kQ29sb3IoJ3N1YmR1ZWQnKSwgXCI7O2xhYmVsOnN1YmR1ZWQ7XCIpLFxuICAgIGFjY2VudDogLyojX19QVVJFX18qL2NzcyhcImJhY2tncm91bmQtY29sb3I6XCIsIHVzZUV1aUJhY2tncm91bmRDb2xvcignYWNjZW50JyksIFwiOztsYWJlbDphY2NlbnQ7XCIpLFxuICAgIHByaW1hcnk6IC8qI19fUFVSRV9fKi9jc3MoXCJiYWNrZ3JvdW5kLWNvbG9yOlwiLCB1c2VFdWlCYWNrZ3JvdW5kQ29sb3IoJ3ByaW1hcnknKSwgXCI7O2xhYmVsOnByaW1hcnk7XCIpLFxuICAgIHN1Y2Nlc3M6IC8qI19fUFVSRV9fKi9jc3MoXCJiYWNrZ3JvdW5kLWNvbG9yOlwiLCB1c2VFdWlCYWNrZ3JvdW5kQ29sb3IoJ3N1Y2Nlc3MnKSwgXCI7O2xhYmVsOnN1Y2Nlc3M7XCIpLFxuICAgIHdhcm5pbmc6IC8qI19fUFVSRV9fKi9jc3MoXCJiYWNrZ3JvdW5kLWNvbG9yOlwiLCB1c2VFdWlCYWNrZ3JvdW5kQ29sb3IoJ3dhcm5pbmcnKSwgXCI7O2xhYmVsOndhcm5pbmc7XCIpLFxuICAgIGRhbmdlcjogLyojX19QVVJFX18qL2NzcyhcImJhY2tncm91bmQtY29sb3I6XCIsIHVzZUV1aUJhY2tncm91bmRDb2xvcignZGFuZ2VyJyksIFwiOztsYWJlbDpkYW5nZXI7XCIpXG4gIH07XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90aGVtZSc7XG5pbXBvcnQgeyB0cmFuc3BhcmVudGl6ZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NvbG9yJztcbi8qKlxuICogU2V0IHNjcm9sbCBiYXIgYXBwZWFyYW5jZSBvbiBDaHJvbWUgKGFuZCBmaXJlZm94KS5cbiAqIEFsbCBwYXJhbWV0ZXJzIGFyZSBvcHRpb25hbCBhbmQgZGVmYXVsdCB0byBzcGVjaWZpYyBnbG9iYWwgc2V0dGluZ3MuXG4gKi9cblxuZXhwb3J0IHZhciBldWlTY3JvbGxCYXJTdHlsZXMgPSBmdW5jdGlvbiBldWlTY3JvbGxCYXJTdHlsZXMoX3JlZikge1xuICB2YXIgX3JlZiRldWlUaGVtZSA9IF9yZWYuZXVpVGhlbWUsXG4gICAgICBjb2xvcnMgPSBfcmVmJGV1aVRoZW1lLmNvbG9ycyxcbiAgICAgIHNpemUgPSBfcmVmJGV1aVRoZW1lLnNpemU7XG5cbiAgdmFyIF9yZWYyID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcbiAgICAgIF90aHVtYkNvbG9yID0gX3JlZjIudGh1bWJDb2xvcixcbiAgICAgIF9yZWYyJHRyYWNrQ29sb3IgPSBfcmVmMi50cmFja0NvbG9yLFxuICAgICAgdHJhY2tDb2xvciA9IF9yZWYyJHRyYWNrQ29sb3IgPT09IHZvaWQgMCA/ICd0cmFuc3BhcmVudCcgOiBfcmVmMiR0cmFja0NvbG9yLFxuICAgICAgX3JlZjIkd2lkdGggPSBfcmVmMi53aWR0aCxcbiAgICAgIHdpZHRoID0gX3JlZjIkd2lkdGggPT09IHZvaWQgMCA/ICd0aGluJyA6IF9yZWYyJHdpZHRoLFxuICAgICAgX3NpemUgPSBfcmVmMi5zaXplLFxuICAgICAgX2Nvcm5lciA9IF9yZWYyLmNvcm5lcjtcblxuICAvLyBTZXQgZGVmYXVsdHMgZnJvbSB0aGVtZVxuICB2YXIgdGh1bWJDb2xvciA9IF90aHVtYkNvbG9yIHx8IHRyYW5zcGFyZW50aXplKGNvbG9ycy5kYXJrU2hhZGUsIDAuNSk7XG5cbiAgdmFyIHNjcm9sbEJhclNpemUgPSBfc2l6ZSB8fCBzaXplLmJhc2U7XG4gIHZhciBzY3JvbGxCYXJDb3JuZXIgPSBfY29ybmVyIHx8IHdpZHRoID09PSAndGhpbicgPyBcImNhbGMoXCIuY29uY2F0KHNpemUucywgXCIgKiAwLjc1KVwiKSA6IHNpemUueHM7IC8vIEZpcmVmb3gncyBzY3JvbGxiYXIgY29sb3JpbmcgY2FzY2FkZXMsIGJ1dCB0aGUgc2l6aW5nIGRvZXMgbm90LFxuICAvLyBzbyBpdCdzIGJlaW5nIGFkZGVkIHRvIHRoaXMgbWl4aW4gZm9yIGFsbG93aW5nIHN1cHBvcnQgd2hlcmV2ZXIgY3VzdG9tIHNjcm9sbGJhcnMgYXJlXG5cbiAgdmFyIGZpcmVmb3hTdXBwb3J0ID0gXCJzY3JvbGxiYXItY29sb3I6IFwiLmNvbmNhdCh0aHVtYkNvbG9yLCBcIiBcIikuY29uY2F0KHRyYWNrQ29sb3IsIFwiO1wiKTtcbiAgcmV0dXJuIFwic2Nyb2xsYmFyLXdpZHRoOiBcIi5jb25jYXQod2lkdGgsIFwiO1xcblxcbiAgICAmOjotd2Via2l0LXNjcm9sbGJhciB7XFxuICAgICAgd2lkdGg6IFwiKS5jb25jYXQoc2Nyb2xsQmFyU2l6ZSwgXCI7XFxuICAgICAgaGVpZ2h0OiBcIikuY29uY2F0KHNjcm9sbEJhclNpemUsIFwiO1xcbiAgICB9XFxuXFxuICAgICY6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBcIikuY29uY2F0KHRodW1iQ29sb3IsIFwiO1xcbiAgICAgIGJhY2tncm91bmQtY2xpcDogY29udGVudC1ib3g7XFxuICAgICAgYm9yZGVyLXJhZGl1czogXCIpLmNvbmNhdChzY3JvbGxCYXJTaXplLCBcIjtcXG4gICAgICBib3JkZXI6IFwiKS5jb25jYXQoc2Nyb2xsQmFyQ29ybmVyLCBcIiBzb2xpZCBcIikuY29uY2F0KHRyYWNrQ29sb3IsIFwiO1xcbiAgICB9XFxuXFxuICAgICY6Oi13ZWJraXQtc2Nyb2xsYmFyLWNvcm5lcixcXG4gICAgJjo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sge1xcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IFwiKS5jb25jYXQodHJhY2tDb2xvciwgXCI7XFxuICAgIH1cXG5cXG4gICAgXCIpLmNvbmNhdChmaXJlZm94U3VwcG9ydCwgXCJcXG4gIFwiKTtcbn07XG5leHBvcnQgdmFyIHVzZUV1aVNjcm9sbEJhciA9IGZ1bmN0aW9uIHVzZUV1aVNjcm9sbEJhcihvcHRpb25zKSB7XG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHJldHVybiBldWlTY3JvbGxCYXJTdHlsZXMoZXVpVGhlbWUsIG9wdGlvbnMpO1xufTtcbi8qKlxuICogKklOVEVSTkFMKlxuICogT3ZlcmZsb3cgc2hhZG93IG1hc2tzIGZvciB1c2UgaW4gWVNjcm9sbCBhbmQgWFNjcm9sbCBoZWxwZXJzXG4gKi9cblxudmFyIGV1aU92ZXJmbG93U2hhZG93U3R5bGVzID0gZnVuY3Rpb24gZXVpT3ZlcmZsb3dTaGFkb3dTdHlsZXMoX3JlZjMpIHtcbiAgdmFyIHNpemUgPSBfcmVmMy5ldWlUaGVtZS5zaXplO1xuXG4gIHZhciBfcmVmNCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge30sXG4gICAgICBfZGlyZWN0aW9uID0gX3JlZjQuZGlyZWN0aW9uLFxuICAgICAgX3NpZGUgPSBfcmVmNC5zaWRlO1xuXG4gIHZhciBkaXJlY3Rpb24gPSBfZGlyZWN0aW9uIHx8ICd5JztcbiAgdmFyIHNpZGUgPSBfc2lkZSB8fCAnYm90aCc7XG4gIHZhciBoaWRlSGVpZ2h0ID0gXCJjYWxjKFwiLmNvbmNhdChzaXplLmJhc2UsIFwiICogMC43NSAqIDEuMjUpXCIpO1xuICB2YXIgZ3JhZGllbnRTdGFydCA9IFwiXFxuICBcIi5jb25jYXQodHJhbnNwYXJlbnRpemUoJ3JlZCcsIDAuMSksIFwiIDAlLFxcbiAgXCIpLmNvbmNhdCh0cmFuc3BhcmVudGl6ZSgncmVkJywgMSksIFwiIFwiKS5jb25jYXQoaGlkZUhlaWdodCwgXCJcXG4gIFwiKTtcbiAgdmFyIGdyYWRpZW50RW5kID0gXCJcXG4gIFwiLmNvbmNhdCh0cmFuc3BhcmVudGl6ZSgncmVkJywgMSksIFwiIGNhbGMoMTAwJSAtIFwiKS5jb25jYXQoaGlkZUhlaWdodCwgXCIpLFxcbiAgXCIpLmNvbmNhdCh0cmFuc3BhcmVudGl6ZSgncmVkJywgMC4xKSwgXCIgMTAwJVxcbiAgXCIpO1xuICB2YXIgZ3JhZGllbnQgPSAnJztcblxuICBpZiAoc2lkZSkge1xuICAgIGlmIChzaWRlID09PSAnYm90aCcpIHtcbiAgICAgIGdyYWRpZW50ID0gXCJcIi5jb25jYXQoZ3JhZGllbnRTdGFydCwgXCIsIFwiKS5jb25jYXQoZ3JhZGllbnRFbmQpO1xuICAgIH0gZWxzZSBpZiAoc2lkZSA9PT0gJ3N0YXJ0Jykge1xuICAgICAgZ3JhZGllbnQgPSBcIlwiLmNvbmNhdChncmFkaWVudFN0YXJ0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZ3JhZGllbnQgPSBcIlwiLmNvbmNhdChncmFkaWVudEVuZCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGRpcmVjdGlvbiA9PT0gJ3knKSB7XG4gICAgcmV0dXJuIFwibWFzay1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgXCIuY29uY2F0KGdyYWRpZW50LCBcIik7XCIpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBcIm1hc2staW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgXCIuY29uY2F0KGdyYWRpZW50LCBcIik7XCIpO1xuICB9XG59O1xuLyoqXG4gKiAxLiBGb2N1cyByaW5ncyBzaG91bGRuJ3QgYmUgdmlzaWJsZSBvbiBzY3JvbGxhYmxlIHJlZ2lvbnMsIGJ1dCBhMTF5IHJlcXVpcmVzIHRoZW0gdG8gYmUgZm9jdXNhYmxlLlxuICogICAgQnJvd3NlcidzIHN1cHBvcnRpbmcgYDpmb2N1cy12aXNpYmxlYCB3aWxsIHN0aWxsIHNob3cgb3V0bGluZSBvbiBrZXlib2FyZCBmb2N1cyBvbmx5LlxuICogICAgT3RoZXJzIGxpa2UgU2FmYXJpLCB3b24ndCBzaG93IGFueXRoaW5nIGF0IGFsbC5cbiAqL1xuLy8gVE9ETzogSG93IGRvIHdlIHVzZSBFbW90aW9uIHRvIG91dHB1dCB0aGUgQ1NTIGNsYXNzIHV0aWxpdGllcyBpbnN0ZWFkP1xuXG5cbmV4cG9ydCB2YXIgZXVpWVNjcm9sbCA9IGZ1bmN0aW9uIGV1aVlTY3JvbGwoZXVpVGhlbWUpIHtcbiAgcmV0dXJuIFwiXFxuICBcIi5jb25jYXQoZXVpU2Nyb2xsQmFyU3R5bGVzKGV1aVRoZW1lKSwgXCJcXG4gIGhlaWdodDogMTAwJTtcXG4gIG92ZXJmbG93LXk6IGF1dG87XFxuICBvdmVyZmxvdy14OiBoaWRkZW47XFxuICAmOmZvY3VzIHtcXG4gICAgb3V0bGluZTogbm9uZTsgLyogMSAqL1xcbiAgfVxcblwiKTtcbn07XG5leHBvcnQgdmFyIHVzZUV1aVlTY3JvbGwgPSBmdW5jdGlvbiB1c2VFdWlZU2Nyb2xsKCkge1xuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICByZXR1cm4gZXVpWVNjcm9sbChldWlUaGVtZSk7XG59O1xuZXhwb3J0IHZhciBldWlZU2Nyb2xsV2l0aFNoYWRvd3MgPSBmdW5jdGlvbiBldWlZU2Nyb2xsV2l0aFNoYWRvd3MoZXVpVGhlbWUpIHtcbiAgcmV0dXJuIFwiXFxuICBcIi5jb25jYXQoZXVpWVNjcm9sbChldWlUaGVtZSksIFwiXFxuICBcIikuY29uY2F0KGV1aU92ZXJmbG93U2hhZG93U3R5bGVzKGV1aVRoZW1lLCB7XG4gICAgZGlyZWN0aW9uOiAneSdcbiAgfSksIFwiXFxuXCIpO1xufTtcbmV4cG9ydCB2YXIgdXNlRXVpWVNjcm9sbFdpdGhTaGFkb3dzID0gZnVuY3Rpb24gdXNlRXVpWVNjcm9sbFdpdGhTaGFkb3dzKCkge1xuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICByZXR1cm4gZXVpWVNjcm9sbFdpdGhTaGFkb3dzKGV1aVRoZW1lKTtcbn07XG5leHBvcnQgdmFyIGV1aVhTY3JvbGwgPSBmdW5jdGlvbiBldWlYU2Nyb2xsKGV1aVRoZW1lKSB7XG4gIHJldHVybiBcIlxcbiAgXCIuY29uY2F0KGV1aVNjcm9sbEJhclN0eWxlcyhldWlUaGVtZSksIFwiXFxuICBvdmVyZmxvdy14OiBhdXRvO1xcbiAgJjpmb2N1cyB7XFxuICAgIG91dGxpbmU6IG5vbmU7IC8qIDEgKi9cXG4gIH1cXG5cIik7XG59O1xuZXhwb3J0IHZhciB1c2VFdWlYU2Nyb2xsID0gZnVuY3Rpb24gdXNlRXVpWFNjcm9sbCgpIHtcbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgcmV0dXJuIGV1aVhTY3JvbGwoZXVpVGhlbWUpO1xufTtcbmV4cG9ydCB2YXIgZXVpWFNjcm9sbFdpdGhTaGFkb3dzID0gZnVuY3Rpb24gZXVpWFNjcm9sbFdpdGhTaGFkb3dzKGV1aVRoZW1lKSB7XG4gIHJldHVybiBcIlxcbiAgXCIuY29uY2F0KGV1aVhTY3JvbGwoZXVpVGhlbWUpLCBcIlxcbiAgXCIpLmNvbmNhdChldWlPdmVyZmxvd1NoYWRvd1N0eWxlcyhldWlUaGVtZSwge1xuICAgIGRpcmVjdGlvbjogJ3gnXG4gIH0pLCBcIlxcblwiKTtcbn07XG5leHBvcnQgdmFyIHVzZUV1aVhTY3JvbGxXaXRoU2hhZG93cyA9IGZ1bmN0aW9uIHVzZUV1aVhTY3JvbGxXaXRoU2hhZG93cygpIHtcbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgcmV0dXJuIGV1aVhTY3JvbGxXaXRoU2hhZG93cyhldWlUaGVtZSk7XG59O1xuZXhwb3J0IHZhciBldWlPdmVyZmxvd1Njcm9sbCA9IGZ1bmN0aW9uIGV1aU92ZXJmbG93U2Nyb2xsKGV1aVRoZW1lKSB7XG4gIHZhciBfcmVmNSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge30sXG4gICAgICBkaXJlY3Rpb24gPSBfcmVmNS5kaXJlY3Rpb24sXG4gICAgICBfcmVmNSRtYXNrID0gX3JlZjUubWFzayxcbiAgICAgIG1hc2sgPSBfcmVmNSRtYXNrID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWY1JG1hc2s7XG5cbiAgc3dpdGNoIChkaXJlY3Rpb24pIHtcbiAgICBjYXNlICd5JzpcbiAgICAgIHJldHVybiBtYXNrID8gZXVpWVNjcm9sbFdpdGhTaGFkb3dzKGV1aVRoZW1lKSA6IGV1aVlTY3JvbGwoZXVpVGhlbWUpO1xuXG4gICAgY2FzZSAneCc6XG4gICAgICByZXR1cm4gbWFzayA/IGV1aVhTY3JvbGxXaXRoU2hhZG93cyhldWlUaGVtZSkgOiBldWlYU2Nyb2xsKGV1aVRoZW1lKTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICBjb25zb2xlLndhcm4oJ1BsZWFzZSBwcm92aWRlIGEgdmFsaWQgZGlyZWN0aW9uIG9wdGlvbiB0byB1c2VFdWlPdmVyZmxvd1Njcm9sbCcpO1xuICAgICAgcmV0dXJuICcnO1xuICB9XG59O1xuZXhwb3J0IHZhciB1c2VFdWlPdmVyZmxvd1Njcm9sbCA9IGZ1bmN0aW9uIHVzZUV1aU92ZXJmbG93U2Nyb2xsKGRpcmVjdGlvbikge1xuICB2YXIgbWFzayA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZmFsc2U7XG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHJldHVybiBldWlPdmVyZmxvd1Njcm9sbChldWlUaGVtZSwge1xuICAgIGRpcmVjdGlvbjogZGlyZWN0aW9uLFxuICAgIG1hc2s6IG1hc2tcbiAgfSk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90aGVtZSc7XG5pbXBvcnQgeyBsb2dpY2FsU2lkZSB9IGZyb20gJy4uL2Z1bmN0aW9ucyc7XG5leHBvcnQgdmFyIFBBRERJTkdfU0laRVMgPSBbJ25vbmUnLCAneHMnLCAncycsICdtJywgJ2wnLCAneGwnXTtcbmV4cG9ydCB2YXIgZXVpUGFkZGluZ1NpemUgPSBmdW5jdGlvbiBldWlQYWRkaW5nU2l6ZShfcmVmLCBzaXplKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYuZXVpVGhlbWU7XG5cbiAgc3dpdGNoIChzaXplKSB7XG4gICAgY2FzZSAnbm9uZSc6XG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIGNhc2UgJ20nOlxuICAgICAgcmV0dXJuIGV1aVRoZW1lLnNpemUuYmFzZTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZXVpVGhlbWUuc2l6ZVtzaXplXTtcbiAgfVxufTtcbmV4cG9ydCB2YXIgdXNlRXVpUGFkZGluZ1NpemUgPSBmdW5jdGlvbiB1c2VFdWlQYWRkaW5nU2l6ZShzaXplKSB7XG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHJldHVybiBldWlQYWRkaW5nU2l6ZShldWlUaGVtZSwgc2l6ZSk7XG59O1xuZXhwb3J0IHZhciB1c2VFdWlQYWRkaW5nQ1NTID0gZnVuY3Rpb24gdXNlRXVpUGFkZGluZ0NTUyhzaWRlKSB7XG4gIHZhciBwcm9wZXJ0eSA9IHNpZGUgPyBcInBhZGRpbmctXCIuY29uY2F0KGxvZ2ljYWxTaWRlW3NpZGVdKSA6ICdwYWRkaW5nJztcbiAgcmV0dXJuIHtcbiAgICBub25lOiBudWxsLFxuICAgIHhzOiAvKiNfX1BVUkVfXyovY3NzKHByb3BlcnR5LCBcIjpcIiwgdXNlRXVpUGFkZGluZ1NpemUoJ3hzJyksIFwiOztsYWJlbDp4cztcIiksXG4gICAgczogLyojX19QVVJFX18qL2Nzcyhwcm9wZXJ0eSwgXCI6XCIsIHVzZUV1aVBhZGRpbmdTaXplKCdzJyksIFwiOztsYWJlbDpzO1wiKSxcbiAgICBtOiAvKiNfX1BVUkVfXyovY3NzKHByb3BlcnR5LCBcIjpcIiwgdXNlRXVpUGFkZGluZ1NpemUoJ20nKSwgXCI7O2xhYmVsOm07XCIpLFxuICAgIGw6IC8qI19fUFVSRV9fKi9jc3MocHJvcGVydHksIFwiOlwiLCB1c2VFdWlQYWRkaW5nU2l6ZSgnbCcpLCBcIjs7bGFiZWw6bDtcIiksXG4gICAgeGw6IC8qI19fUFVSRV9fKi9jc3MocHJvcGVydHksIFwiOlwiLCB1c2VFdWlQYWRkaW5nU2l6ZSgneGwnKSwgXCI7O2xhYmVsOnhsO1wiKVxuICB9O1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IHVzZUV1aVRoZW1lIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuXG4vKipcbiAqIEl0IGlzIGJlc3QgcHJhY3RpY2UgdG8gdXRpbGl6ZSB0aGUgYnJvd3NlcidzIGRlZmF1bHQgYG91dGxpbmVgIHByb3BlcnR5IGZvciBoYW5kbGluZyBmb2N1cyByaW5ncy5cbiAqIEhvd2V2ZXIsIHNvbWUgY29tcG9uZW50cyBuZWVkIHRvIGJlIGZvcmNlZCB0byBoYXZlIHRoZSBzYW1lIGJlaGF2aW9yLCBvciBhZGp1c3QgdGhlIGRpc3BsYXkuXG4gKiBUaGlzIGZ1bmN0aW9uIHJlLWFwcGxpZXMgdGhlIHNhbWUgZGVmYXVsdCBvdXRsaW5lIHdpdGggYSBjb3VwbGUgcGFyYW1ldGVyc1xuICogQHBhcmFtIGV1aVRoZW1lIFVzZUV1aVRoZW1lLmV1aVRoZW1lXG4gKiBAcGFyYW0gb2Zmc2V0IEFjY2VwdHMgYSBzcGVjaWZpYyBtZWFzdXJlbWVudCBvciAnaW5zZXQnLCAnb3V0c2V0JyBvciAnY2VudGVyJyB0byBhZGp1c3Qgb3V0bGluZSBwb3NpdGlvblxuICogQHBhcmFtIGNvbG9yIEFjY2VwdHMgYW55IENTUyBjb2xvciwgKipOb3RlOiBvbmx5IHdvcmtzIGluIC13ZWJraXQtKipcbiAqL1xuZXhwb3J0IHZhciBldWlGb2N1c1JpbmcgPSBmdW5jdGlvbiBldWlGb2N1c1JpbmcoZXVpVGhlbWUpIHtcbiAgdmFyIG9mZnNldCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogJ2NlbnRlcic7XG4gIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gIC8vIFdpZHRoIGlzIGVuZm9yY2VkIGFzIGEgY29uc3RhbnQgYXQgdGhlIGdsb2JhbCB0aGVtZSBsYXllclxuICB2YXIgb3V0bGluZVdpZHRoID0gZXVpVGhlbWUuZm9jdXMud2lkdGg7XG4gIHZhciBvdXRsaW5lQ29sb3IgPSAob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmNvbG9yKSB8fCBldWlUaGVtZS5mb2N1cy5jb2xvcjtcbiAgdmFyIG91dGxpbmVPZmZzZXQgPSBvZmZzZXQ7XG5cbiAgaWYgKG9mZnNldCA9PT0gJ2luc2V0Jykge1xuICAgIG91dGxpbmVPZmZzZXQgPSBcIi1cIi5jb25jYXQob3V0bGluZVdpZHRoKTtcbiAgfSBlbHNlIGlmIChvZmZzZXQgPT09ICdvdXRzZXQnKSB7XG4gICAgb3V0bGluZU9mZnNldCA9IFwiXCIuY29uY2F0KG91dGxpbmVXaWR0aCk7XG4gIH0gZWxzZSBpZiAob2Zmc2V0ID09PSAnY2VudGVyJykge1xuICAgIG91dGxpbmVPZmZzZXQgPSBcImNhbGMoXCIuY29uY2F0KG91dGxpbmVXaWR0aCwgXCIgLyAtMik7XCIpO1xuICB9IC8vIFRoaXMgZnVuY3Rpb24gdXRpbGl6ZXMgYGZvY3VzLXZpc2libGVgIHRvIHR1cm4gb24gZm9jdXMgb3V0bGluZXMuXG4gIC8vIEJ1dCB0aGlzIGlzIGJyb3dzZXItZGVwZW5kZW5kOlxuICAvLyBcdUQ4M0RcdURDNDkgU2FmYXJpIGFuZCBGaXJlZm94IGlubmF0ZWx5IHJlc3BlY3Qgb25seSBzaG93aW5nIHRoZSBvdXRsaW5lIHdpdGgga2V5Ym9hcmQgb25seVxuICAvLyBcdUQ4M0RcdURDOTQgQnV0IHRoZXkgZG9uJ3QgYWxsb3cgY29sb3Jpbmcgb2YgdGhlICdhdXRvJy9kZWZhdWx0IG91dGxpbmUsIHNvIGNvbnRyYXN0IGlzIG5vIGdvb2QgaW4gZGFyayBtb2RlLlxuICAvLyBcdUQ4M0RcdURDNDkgRm9yIHRoZXNlIGJyb3dzZXJzIHdlIHVzZSB0aGUgc29saWQgdHlwZSBpbiBvcmRlciB0byBtYXRjaCB3aXRoIGBjdXJyZW50Q29sb3IuXG4gIC8vIFx1RDgzRFx1REUyNiBXaGljaCBkb2VzIG1lYW5zIHRoZSBvdXRsaW5lIHdpbGwgYmUgc3F1YXJlXG5cblxuICByZXR1cm4gXCJcXG4gICAgb3V0bGluZTogXCIuY29uY2F0KG91dGxpbmVXaWR0aCwgXCIgc29saWQgXCIpLmNvbmNhdChvdXRsaW5lQ29sb3IsIFwiO1xcbiAgICBvdXRsaW5lLW9mZnNldDogXCIpLmNvbmNhdChvdXRsaW5lT2Zmc2V0LCBcIjtcXG5cXG4gICAgLy8gXFx1RDgzRFxcdURDNDAgQ2hyb21lIHJlc3BlY3RzIDpmb2N1cy12aXNpYmxlIGFuZCBhbGxvd3MgY29sb3JpbmcgdGhlIGBhdXRvYCBzdHlsZVxcbiAgICAmOmZvY3VzLXZpc2libGUge1xcbiAgICAgIG91dGxpbmUtc3R5bGU6IGF1dG87XFxuICAgIH1cXG5cXG4gICAgLy8gXFx1RDgzRFxcdURFNDVcXHUyMDBEXFx1MjY0MFxcdUZFMEYgQnV0IENocm9tZSBhbHNvIG5lZWRzIHRvIGhhdmUgdGhlIG91dGxpbmUgZm9yY2VmdWxseSByZW1vdmVkIGZyb20gcmVndWxhciBgOmZvY3VzYCBzdGF0ZVxcbiAgICAmOm5vdCg6Zm9jdXMtdmlzaWJsZSkge1xcbiAgICAgIG91dGxpbmU6IG5vbmU7XFxuICAgIH1cXG4gIFwiKTtcbn07XG5leHBvcnQgdmFyIHVzZUV1aUZvY3VzUmluZyA9IGZ1bmN0aW9uIHVzZUV1aUZvY3VzUmluZyhvZmZzZXQsIGNvbG9yKSB7XG4gIHZhciBfdXNlRXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpLFxuICAgICAgZXVpVGhlbWUgPSBfdXNlRXVpVGhlbWUuZXVpVGhlbWU7XG5cbiAgcmV0dXJuIGV1aUZvY3VzUmluZyhldWlUaGVtZSwgb2Zmc2V0LCB7XG4gICAgY29sb3I6IGNvbG9yXG4gIH0pO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IGV1aUxpbmVIZWlnaHRGcm9tQmFzZWxpbmUsIGV1aUZvbnRTaXplRnJvbVNjYWxlIH0gZnJvbSAnLi4vZnVuY3Rpb25zL3R5cG9ncmFwaHknO1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90aGVtZS9ob29rcyc7XG5cbi8qKlxuICogUmV0dXJucyBmb250LXNpemUgYW5kIGxpbmUtaGVpZ2h0XG4gKi9cbmV4cG9ydCB2YXIgZXVpRm9udFNpemUgPSBmdW5jdGlvbiBldWlGb250U2l6ZShfcmVmLCBzY2FsZSwgb3B0aW9ucykge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmLmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIGZvbnRTaXplOiBldWlGb250U2l6ZUZyb21TY2FsZShzY2FsZSwgZXVpVGhlbWUsIG9wdGlvbnMpLFxuICAgIGxpbmVIZWlnaHQ6IGV1aUxpbmVIZWlnaHRGcm9tQmFzZWxpbmUoc2NhbGUsIGV1aVRoZW1lLCBvcHRpb25zKVxuICB9O1xufTtcbmV4cG9ydCB2YXIgdXNlRXVpRm9udFNpemUgPSBmdW5jdGlvbiB1c2VFdWlGb250U2l6ZShzY2FsZSwgb3B0aW9ucykge1xuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICByZXR1cm4gZXVpRm9udFNpemUoZXVpVGhlbWUsIHNjYWxlLCBvcHRpb25zKTtcbn07XG4vKipcbiAqIEZvcmNlIHRleHQgdG8gd3JhcCBvbiBuYXR1cmFsIHdvcmQgYnJlYWtzIChlLmcuIHNwYWNlcyAmIGh5cGhlbnMpXG4gKiBodHRwczovL2Nzcy10cmlja3MuY29tL3NuaXBwZXRzL2Nzcy9wcmV2ZW50LWxvbmctdXJscy1mcm9tLWJyZWFraW5nLW91dC1vZi1jb250YWluZXIvXG4gKi9cblxuZXhwb3J0IHZhciBldWlUZXh0QnJlYWtXb3JkID0gZnVuY3Rpb24gZXVpVGV4dEJyZWFrV29yZCgpIHtcbiAgcmV0dXJuIFwiXFxuICBvdmVyZmxvdy13cmFwOiBicmVhay13b3JkICFpbXBvcnRhbnQ7IC8vIG1ha2VzIHN1cmUgdGhlIGxvbmcgc3RyaW5nIHdpbGwgd3JhcCBhbmQgbm90IGJ1c3Qgb3V0IG9mIHRoZSBjb250YWluZXJcXG4gIHdvcmQtd3JhcDogYnJlYWstd29yZCAhaW1wb3J0YW50OyAvLyBzcGVjIHNheXMsIHRoZXkgYXJlIGxpdGVyYWxseSBqdXN0IGFsdGVybmF0ZSBuYW1lcyBmb3IgZWFjaCBvdGhlciBidXQgc29tZSBicm93c2VycyBzdXBwb3J0IG9uZSBhbmQgbm90IHRoZSBvdGhlclxcbiAgd29yZC1icmVhazogYnJlYWstd29yZDsgLy8gSUUgZG9lc24ndCB1bmRlcnN0YW5kIGJ1dCB0aGF0J3Mgb2tcXG5cIjtcbn07XG4vKipcbiAqIFByZXZlbnQgdGV4dCBmcm9tIHdyYXBwaW5nIG9udG8gbXVsdGlwbGUgbGluZXMsIGFuZCB0cnVuY2F0ZSB3aXRoIGFuIGVsbGlwc2lzLlxuICovXG5cbmV4cG9ydCB2YXIgZXVpVGV4dFRydW5jYXRlID0gZnVuY3Rpb24gZXVpVGV4dFRydW5jYXRlKCkge1xuICB2YXIgbWF4V2lkdGggPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6ICcxMDAlJztcbiAgcmV0dXJuIFwiXFxuICBtYXgtd2lkdGg6IFwiLmNvbmNhdChtYXhXaWR0aCwgXCI7IC8vIEVuc3VyZSB0aGF0IHRoZSBub2RlIGhhcyBhIG1heGltdW0gd2lkdGggYWZ0ZXIgd2hpY2ggdHJ1bmNhdGlvbiBjYW4gb2NjdXJcXG4gIG92ZXJmbG93OiBoaWRkZW4gIWltcG9ydGFudDtcXG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzICFpbXBvcnRhbnQ7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwICFpbXBvcnRhbnQ7XFxuXCIpO1xufTtcbi8qKlxuICogRml4ZWQtd2lkdGggbnVtYmVycyBmb3IgdGFidWxhciBkYXRhXG4gKi9cblxuZXhwb3J0IHZhciBldWlOdW1iZXJGb3JtYXQgPSBmdW5jdGlvbiBldWlOdW1iZXJGb3JtYXQoX3JlZjIpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZjIuZXVpVGhlbWU7XG4gIHJldHVybiBcIlxcbiAgZm9udC1mZWF0dXJlLXNldHRpbmdzOiBcIi5jb25jYXQoZXVpVGhlbWUuZm9udC5mZWF0dXJlU2V0dGluZ3MsIFwiLCAndG51bScgMTtcXG5cIik7XG59O1xuZXhwb3J0IHZhciB1c2VFdWlOdW1iZXJGb3JtYXQgPSBmdW5jdGlvbiB1c2VFdWlOdW1iZXJGb3JtYXQoKSB7XG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHJldHVybiBldWlOdW1iZXJGb3JtYXQoZXVpVGhlbWUpO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLyoqXG4gKiBBIGNvbnN0YW50IHN0b3JpbmcgdGhlIGBwcmVmZXJzLXJlZHVjZWQtbW90aW9uYCBtZWRpYSBxdWVyeVxuICogc28gdGhhdCB3aGVuIGl0IGlzIHR1cm5lZCBvZmYsIGFuaW1hdGlvbnMgYXJlIG5vdCBydW4uXG4gKi9cbmV4cG9ydCB2YXIgZXVpQ2FuQW5pbWF0ZSA9ICdAbWVkaWEgc2NyZWVuIGFuZCAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogbm8tcHJlZmVyZW5jZSknO1xuLyoqXG4gKiBBIGNvbnN0YW50IHN0b3JpbmcgdGhlIGBwcmVmZXJzLXJlZHVjZWQtbW90aW9uYCBtZWRpYSBxdWVyeSB0aGF0IHdpbGxcbiAqIG9ubHkgYXBwbHkgdGhlIGNvbnRlbnQgaWYgdGhlIHNldHRpbmcgaXMgb2ZmIChyZWR1Y2UpLlxuICovXG5cbmV4cG9ydCB2YXIgZXVpQ2FudEFuaW1hdGUgPSAnQG1lZGlhIHNjcmVlbiBhbmQgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSknO1xuLyoqXG4gKiBTcGVlZHMgLyBEdXJhdGlvbnMgLyBEZWxheXNcbiAqL1xuXG5leHBvcnQgdmFyIEV1aVRoZW1lQW5pbWF0aW9uU3BlZWRzID0gWydleHRyYUZhc3QnLCAnZmFzdCcsICdub3JtYWwnLCAnc2xvdycsICdleHRyYVNsb3cnXTtcblxuLyoqXG4gKiBFYXNpbmdzIC8gVGltaW5nIGZ1bmN0aW9uc1xuICovXG5leHBvcnQgdmFyIEV1aVRoZW1lQW5pbWF0aW9uRWFzaW5ncyA9IFsnYm91bmNlJywgJ3Jlc2lzdGFuY2UnXTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmV4cG9ydCB2YXIgcmVzZXRTdHlsZXMgPSBcIlxcbi8qIC8vIEFkYXB0ZWQgZnJvbSBFcmljIE1leWVyJ3MgcmVzZXQgKGh0dHA6Ly9tZXllcndlYi5jb20vZXJpYy90b29scy9jc3MvcmVzZXQvLCB2Mi4wIHwgMjAxMTAxMjYpLiAqL1xcblxcblxcbiosICo6YmVmb3JlLCAqOmFmdGVyIHtcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxufVxcblxcbmh0bWwsIGJvZHksIGRpdiwgc3BhbiwgYXBwbGV0LCBvYmplY3QsIGlmcmFtZSxcXG5oMSwgaDIsIGgzLCBoNCwgaDUsIGg2LCBwLCBibG9ja3F1b3RlLCBwcmUsXFxuYSwgYWJiciwgYWNyb255bSwgYWRkcmVzcywgYmlnLCBjaXRlLCBjb2RlLFxcbmRlbCwgZGZuLCBlbSwgaW1nLCBpbnMsIGtiZCwgcSwgcywgc2FtcCxcXG5zbWFsbCwgc3RyaWtlLCBzdHJvbmcsIHN1Yiwgc3VwLCB0dCwgdmFyLFxcbmIsIHUsIGksIGNlbnRlcixcXG5kbCwgZHQsIGRkLCBvbCwgdWwsIGxpLFxcbmZpZWxkc2V0LCBmb3JtLCBsYWJlbCwgbGVnZW5kLFxcbnRhYmxlLCBjYXB0aW9uLCB0Ym9keSwgdGZvb3QsIHRoZWFkLCB0ciwgdGgsIHRkLFxcbmFydGljbGUsIGFzaWRlLCBjYW52YXMsIGRldGFpbHMsIGVtYmVkLFxcbmZpZ3VyZSwgZmlnY2FwdGlvbiwgZm9vdGVyLCBoZWFkZXIsIGhncm91cCxcXG5tZW51LCBuYXYsIG91dHB1dCwgcnVieSwgc2VjdGlvbiwgc3VtbWFyeSxcXG50aW1lLCBtYXJrLCBhdWRpbywgdmlkZW8ge1xcbiAgbWFyZ2luOiAwO1xcbiAgcGFkZGluZzogMDtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTtcXG59XFxuXFxuaDEsIGgyLCBoMywgaDQsIGg1LCBoNiwgcCB7XFxuICBmb250LWZhbWlseTogaW5oZXJpdDtcXG4gIGZvbnQtd2VpZ2h0OiBpbmhlcml0O1xcbiAgZm9udC1zaXplOiBpbmhlcml0O1xcbn1cXG5cXG4vKiBIVE1MNSBkaXNwbGF5LXJvbGUgcmVzZXQgZm9yIG9sZGVyIGJyb3dzZXJzICovXFxuYXJ0aWNsZSwgYXNpZGUsIGRldGFpbHMsIGZpZ2NhcHRpb24sIGZpZ3VyZSxcXG5mb290ZXIsIGhlYWRlciwgaGdyb3VwLCBtZW51LCBuYXYsIHNlY3Rpb24ge1xcbiAgZGlzcGxheTogYmxvY2s7XFxufVxcblxcbmFbaHJlZl0sXFxuYnV0dG9uLFxcbltyb2xlPSdidXR0b24nXSB7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcblxcbmJ1dHRvbiB7XFxuICBiYWNrZ3JvdW5kOiBub25lO1xcbiAgYm9yZGVyOiBub25lO1xcbiAgcGFkZGluZzogMDtcXG4gIG1hcmdpbjogMDtcXG4gIGNvbG9yOiBpbmhlcml0O1xcbiAgYm9yZGVyLXJhZGl1czogMDtcXG4gIGZvbnQtc2l6ZTogaW5oZXJpdDtcXG59XFxuXFxuaW5wdXQge1xcbiAgbWFyZ2luOiAwO1xcbiAgcGFkZGluZzogMDtcXG59XFxuXFxuaW5wdXQ6ZGlzYWJsZWQge1xcbiAgb3BhY2l0eTogMTsgLyogcmVxdWlyZWQgb24gaU9TICovXFxufVxcblxcbm9sLFxcbnVsIHtcXG4gIGxpc3Qtc3R5bGU6IG5vbmU7XFxufVxcblxcbmJsb2NrcXVvdGUsXFxucSB7XFxuICBxdW90ZXM6IG5vbmU7XFxufVxcblxcbmJsb2NrcXVvdGU6YmVmb3JlLFxcbmJsb2NrcXVvdGU6YWZ0ZXIsXFxucTpiZWZvcmUsXFxucTphZnRlciB7XFxuICBjb250ZW50OiAnJztcXG59XFxuXFxudGFibGUge1xcbiAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcXG4gIGJvcmRlci1zcGFjaW5nOiAwO1xcbn1cXG5cXG5ociB7XFxuICBtYXJnaW46IDA7XFxufVxcblxcbmZpZWxkc2V0IHtcXG4gIG1pbi1pbmxpbmUtc2l6ZTogYXV0bztcXG59XFxuXFxuLyogQ2hyb21lIGhhcyBhbiBpc3N1ZSBhcm91bmQgUlRMIGxhbmd1YWdlcyBpbiBTVkdzIHdoZW4gbGV0dGVyLXNwYWNpbmcgaXMgbmVnYXRpdmVcXG4gKiBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD05NjY0ODBcXG4gKi9cXG5zdmcgdGV4dCB7XFxuICBsZXR0ZXItc3BhY2luZzogbm9ybWFsICFpbXBvcnRhbnQ7XFxufVwiOyIsICJ2YXIgX3RlbXBsYXRlT2JqZWN0O1xuXG5mdW5jdGlvbiBfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsKHN0cmluZ3MsIHJhdykgeyBpZiAoIXJhdykgeyByYXcgPSBzdHJpbmdzLnNsaWNlKDApOyB9IHJldHVybiBPYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHN0cmluZ3MsIHsgcmF3OiB7IHZhbHVlOiBPYmplY3QuZnJlZXplKHJhdykgfSB9KSk7IH1cblxuZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgY3NzLCBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBsb2dpY2FsQ1NTLCBldWlDYW5BbmltYXRlIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuXG52YXIgaWNvblNpemUgPSBmdW5jdGlvbiBpY29uU2l6ZShzaXplKSB7XG4gIHJldHVybiBcIlxcbiAgICBcIi5jb25jYXQobG9naWNhbENTUygnd2lkdGgnLCBzaXplKSwgXCI7XFxuICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnaGVpZ2h0Jywgc2l6ZSksIFwiO1xcbiAgXCIpO1xufTtcblxuZXhwb3J0IHZhciBpY29uTG9hZGluZ09wYWNpdHkgPSAwLjA1O1xudmFyIGljb25Mb2FkaW5nID0ga2V5ZnJhbWVzKF90ZW1wbGF0ZU9iamVjdCB8fCAoX3RlbXBsYXRlT2JqZWN0ID0gX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbChbXCJcXG4gIDAlIHtcXG4gICAgb3BhY2l0eTogXCIsIFwiO1xcbiAgfVxcblxcbiAgMTAwJSB7XFxuICAgIG9wYWNpdHk6IDE7XFxuICB9XFxuXCJdKSksIGljb25Mb2FkaW5nT3BhY2l0eSk7XG5cbnZhciBfcmVmID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIm5qZDc0OS1sb2dvRWxhc3RpY091dGxpbmVcIixcbiAgc3R5bGVzOiBcIipbZmlsbF17ZmlsbDpub25lIWltcG9ydGFudDt9Lm91dGxpbmV7ZmlsbDpjdXJyZW50Q29sb3IhaW1wb3J0YW50O307bGFiZWw6bG9nb0VsYXN0aWNPdXRsaW5lO1wiXG59IDoge1xuICBuYW1lOiBcIm5qZDc0OS1sb2dvRWxhc3RpY091dGxpbmVcIixcbiAgc3R5bGVzOiBcIipbZmlsbF17ZmlsbDpub25lIWltcG9ydGFudDt9Lm91dGxpbmV7ZmlsbDpjdXJyZW50Q29sb3IhaW1wb3J0YW50O307bGFiZWw6bG9nb0VsYXN0aWNPdXRsaW5lO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5cbnZhciBfcmVmMiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCJ1YWNqYzUtaW5oZXJpdFwiLFxuICBzdHlsZXM6IFwiY29sb3I6aW5oZXJpdDtsYWJlbDppbmhlcml0O1wiXG59IDoge1xuICBuYW1lOiBcInVhY2pjNS1pbmhlcml0XCIsXG4gIHN0eWxlczogXCJjb2xvcjppbmhlcml0O2xhYmVsOmluaGVyaXQ7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcblxuZXhwb3J0IHZhciBldWlJY29uU3R5bGVzID0gZnVuY3Rpb24gZXVpSWNvblN0eWxlcyhfcmVmMykge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmMy5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICAvLyBCYXNlXG4gICAgZXVpSWNvbjogLyojX19QVVJFX18qL2NzcyhcImZsZXgtc2hyaW5rOjA7ZGlzcGxheTppbmxpbmUtYmxvY2s7dmVydGljYWwtYWxpZ246bWlkZGxlO2ZpbGw6Y3VycmVudENvbG9yO3RyYW5zZm9ybTp0cmFuc2xhdGUoMCwgMCk7LmV1aUljb25fX2ZpbGxOZWdhdGl2ZXtmaWxsOlwiLCBldWlUaGVtZS5jb2xvcnMuZGFya2VzdFNoYWRlLCBcIjt9O2xhYmVsOmV1aUljb247XCIpLFxuICAgIC8vIENvbG9yc1xuICAgIGFjY2VudDogLyojX19QVVJFX18qL2NzcyhcImNvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMuYWNjZW50VGV4dCwgXCI7O2xhYmVsOmFjY2VudDtcIiksXG4gICAgZGFuZ2VyOiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5kYW5nZXJUZXh0LCBcIjs7bGFiZWw6ZGFuZ2VyO1wiKSxcbiAgICBnaG9zdDogLyojX19QVVJFX18qL2NzcyhcImNvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMuZ2hvc3QsIFwiOypbZmlsbF0sLmV1aUljb25fX2ZpbGxOZWdhdGl2ZXtmaWxsOmN1cnJlbnRDb2xvciFpbXBvcnRhbnQ7fTtsYWJlbDpnaG9zdDtcIiksXG4gICAgcHJpbWFyeTogLyojX19QVVJFX18qL2NzcyhcImNvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMucHJpbWFyeVRleHQsIFwiOztsYWJlbDpwcmltYXJ5O1wiKSxcbiAgICBzdWNjZXNzOiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5zdWNjZXNzVGV4dCwgXCI7O2xhYmVsOnN1Y2Nlc3M7XCIpLFxuICAgIHN1YmR1ZWQ6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLnN1YmR1ZWRUZXh0LCBcIjs7bGFiZWw6c3ViZHVlZDtcIiksXG4gICAgdGV4dDogLyojX19QVVJFX18qL2NzcyhcImNvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMudGl0bGUsIFwiOypbZmlsbF0sLmV1aUljb25fX2ZpbGxOZWdhdGl2ZXtmaWxsOmN1cnJlbnRDb2xvciFpbXBvcnRhbnQ7fTtsYWJlbDp0ZXh0O1wiKSxcbiAgICB3YXJuaW5nOiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy53YXJuaW5nVGV4dCwgXCI7O2xhYmVsOndhcm5pbmc7XCIpLFxuICAgIGluaGVyaXQ6IF9yZWYyLFxuICAgIGRlZmF1bHQ6IC8qI19fUFVSRV9fKi9jc3MoXCI7bGFiZWw6ZGVmYXVsdDtcIiksXG4gICAgY3VzdG9tQ29sb3I6IC8qI19fUFVSRV9fKi9jc3MoXCI7bGFiZWw6Y3VzdG9tQ29sb3I7XCIpLFxuICAgIGxvZ29FbGFzdGljT3V0bGluZTogX3JlZixcbiAgICAvLyBTaXplc1xuICAgIG9yaWdpbmFsOiAvKiNfX1BVUkVfXyovY3NzKFwiO2xhYmVsOm9yaWdpbmFsO1wiKSxcbiAgICBzOiAvKiNfX1BVUkVfXyovY3NzKGljb25TaXplKGV1aVRoZW1lLnNpemUubSksIFwiO2xhYmVsOnM7XCIpLFxuICAgIG06IC8qI19fUFVSRV9fKi9jc3MoaWNvblNpemUoZXVpVGhlbWUuc2l6ZS5iYXNlKSwgXCI7bGFiZWw6bTtcIiksXG4gICAgbDogLyojX19QVVJFX18qL2NzcyhpY29uU2l6ZShldWlUaGVtZS5zaXplLmwpLCBcIjtsYWJlbDpsO1wiKSxcbiAgICB4bDogLyojX19QVVJFX18qL2NzcyhpY29uU2l6ZShldWlUaGVtZS5zaXplLnhsKSwgXCI7bGFiZWw6eGw7XCIpLFxuICAgIHh4bDogLyojX19QVVJFX18qL2NzcyhpY29uU2l6ZShldWlUaGVtZS5zaXplLnh4bCksIFwiO2xhYmVsOnh4bDtcIiksXG4gICAgLy8gVmFyaWFudHNcbiAgICAvLyBBcHAgaWNvbnMgYXJlIHR3by10b25lZC4gVGhpcyBwcm92aWRlcyB0aGUgYmFzZSBjb2xvci5cbiAgICBhcHA6IC8qI19fUFVSRV9fKi9jc3MoXCJmaWxsOlwiLCBldWlUaGVtZS5jb2xvcnMudGV4dCwgXCI7LmV1aUljb25fX2ZpbGxTZWNvbmRhcnl7ZmlsbDpcIiwgZXVpVGhlbWUuY29sb3JzLnN1Y2Nlc3NUZXh0LCBcIjt9O2xhYmVsOmFwcDtcIiksXG4gICAgbG9nbzogLyojX19QVVJFX18qL2NzcyhcIjtsYWJlbDpsb2dvO1wiKSxcbiAgICAvLyBMb2FkaW5nIHN0YXRlc1xuICAgIGlzTG9hZGluZzogLyojX19QVVJFX18qL2NzcyhcIm9wYWNpdHk6XCIsIGljb25Mb2FkaW5nT3BhY2l0eSwgXCI7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3I7Ym9yZGVyLXJhZGl1czpcIiwgZXVpVGhlbWUuYm9yZGVyLnJhZGl1cy5zbWFsbCwgXCI7O2xhYmVsOmlzTG9hZGluZztcIiksXG4gICAgaXNMb2FkZWQ6IC8qI19fUFVSRV9fKi9jc3MoZXVpQ2FuQW5pbWF0ZSwgXCJ7YW5pbWF0aW9uOlwiLCBpY29uTG9hZGluZywgXCIgXCIsIGV1aVRoZW1lLmFuaW1hdGlvbi5ub3JtYWwsIFwiIGVhc2UtaW4gMHMgMSBmb3J3YXJkczt9O2xhYmVsOmlzTG9hZGVkO1wiKVxuICB9O1xufTsiLCAiZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHsgdmFyIF9pID0gYXJyID09IG51bGwgPyBudWxsIDogdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBhcnJbU3ltYm9sLml0ZXJhdG9yXSB8fCBhcnJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAoX2kgPT0gbnVsbCkgcmV0dXJuOyB2YXIgX2FyciA9IFtdOyB2YXIgX24gPSB0cnVlOyB2YXIgX2QgPSBmYWxzZTsgdmFyIF9zLCBfZTsgdHJ5IHsgZm9yIChfaSA9IF9pLmNhbGwoYXJyKTsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkgeyBfYXJyLnB1c2goX3MudmFsdWUpOyBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7IH0gfSBjYXRjaCAoZXJyKSB7IF9kID0gdHJ1ZTsgX2UgPSBlcnI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTsgfSBmaW5hbGx5IHsgaWYgKF9kKSB0aHJvdyBfZTsgfSB9IHJldHVybiBfYXJyOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IEZyYWdtZW50LCB1c2VDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgRXVpSTE4bkNvbnN1bWVyIH0gZnJvbSAnLi4vY29udGV4dCc7XG5pbXBvcnQgeyBJMThuQ29udGV4dCB9IGZyb20gJy4uL2NvbnRleHQvY29udGV4dCc7XG5pbXBvcnQgeyBwcm9jZXNzU3RyaW5nVG9DaGlsZHJlbiB9IGZyb20gJy4vaTE4bl91dGlsJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbmZ1bmN0aW9uIGVycm9yT25NaXNzaW5nVmFsdWVzKHRva2VuKSB7XG4gIHRocm93IG5ldyBFcnJvcihcIkkxOG4gbWFwcGluZyBmb3IgdG9rZW4gXFxcIlwiLmNvbmNhdCh0b2tlbiwgXCJcXFwiIGlzIGEgZm9ybWF0dGluZyBmdW5jdGlvbiBidXQgbm8gdmFsdWVzIHdlcmUgcHJvdmlkZWQuXCIpKTtcbn1cblxuZnVuY3Rpb24gbG9va3VwVG9rZW4ob3B0aW9ucykge1xuICB2YXIgdG9rZW4gPSBvcHRpb25zLnRva2VuLFxuICAgICAgaTE4bk1hcHBpbmcgPSBvcHRpb25zLmkxOG5NYXBwaW5nLFxuICAgICAgdmFsdWVEZWZhdWx0ID0gb3B0aW9ucy52YWx1ZURlZmF1bHQsXG4gICAgICBpMThuTWFwcGluZ0Z1bmMgPSBvcHRpb25zLmkxOG5NYXBwaW5nRnVuYyxcbiAgICAgIHZhbHVlcyA9IG9wdGlvbnMudmFsdWVzLFxuICAgICAgcmVuZGVyID0gb3B0aW9ucy5yZW5kZXI7XG4gIHZhciByZW5kZXJhYmxlID0gaTE4bk1hcHBpbmcgJiYgaTE4bk1hcHBpbmdbdG9rZW5dIHx8IHZhbHVlRGVmYXVsdDtcblxuICBpZiAodHlwZW9mIHJlbmRlcmFibGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpZiAodmFsdWVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBlcnJvck9uTWlzc2luZ1ZhbHVlcyh0b2tlbik7XG4gICAgfSAvLyBAdHMtaWdub3JlIFR5cGVTY3JpcHQgY29tcGxhaW5zIHRoYXQgYERFRkFVTFRgIGRvZXNuJ3QgaGF2ZSBhIGNhbGwgc2lnbmF0dXJlIGJ1dCB3ZSB2ZXJpZmllZCBgcmVuZGVyYWJsZWAgaXMgYSBmdW5jdGlvblxuXG5cbiAgICB2YXIgcmVuZGVyZWQgPSByZW5kZXJhYmxlKHZhbHVlcyk7XG4gICAgcmV0dXJuIGkxOG5NYXBwaW5nRnVuYyAmJiB0eXBlb2YgcmVuZGVyZWQgPT09ICdzdHJpbmcnID8gaTE4bk1hcHBpbmdGdW5jKHJlbmRlcmVkKSA6IHJlbmRlcmVkO1xuICB9IGVsc2UgaWYgKHZhbHVlcyA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiByZW5kZXJhYmxlICE9PSAnc3RyaW5nJykge1xuICAgIGlmIChpMThuTWFwcGluZ0Z1bmMgJiYgdHlwZW9mIHZhbHVlRGVmYXVsdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJlbmRlcmFibGUgPSBpMThuTWFwcGluZ0Z1bmModmFsdWVEZWZhdWx0KTtcbiAgICB9IC8vIHRoZXJlJ3MgYSBob2xlIGluIHRoZSB0eXBpbmdzIGhlcmUgYXMgdGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgaTE4bk1hcHBpbmdGdW5jXG4gICAgLy8gcmV0dXJuZWQgdGhlIHNhbWUgdHlwZSBvZiB0aGUgZGVmYXVsdCB2YWx1ZSwgYnV0IHdlIG5lZWQgdG8ga2VlcCB0aGF0IGFzc3VtcHRpb25cblxuXG4gICAgcmV0dXJuIHJlbmRlcmFibGU7XG4gIH1cblxuICB2YXIgY2hpbGRyZW4gPSBwcm9jZXNzU3RyaW5nVG9DaGlsZHJlbihyZW5kZXJhYmxlLCB2YWx1ZXMsIGkxOG5NYXBwaW5nRnVuYyk7XG5cbiAgaWYgKHR5cGVvZiBjaGlsZHJlbiA9PT0gJ3N0cmluZycpIHtcbiAgICAvLyBsaWtld2lzZSwgYHByb2Nlc3NTdHJpbmdUb0NoaWxkcmVuYCByZXR1cm5zIGEgc3RyaW5nIG9yIFJlYWN0Q2hpbGRbXSBkZXBlbmRpbmcgb25cbiAgICAvLyB0aGUgdHlwZSBvZiBgdmFsdWVzYCwgc28gd2Ugd2lsbCBtYWtlIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIGRlZmF1bHQgdmFsdWUgaXMgY29ycmVjdC5cbiAgICByZXR1cm4gY2hpbGRyZW47XG4gIH1cblxuICB2YXIgQ29tcG9uZW50ID0gcmVuZGVyID8gcmVuZGVyKGNoaWxkcmVuKSA6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChGcmFnbWVudCwgbnVsbCwgY2hpbGRyZW4pO1xuICB9OyAvLyBzYW1lIHJlYXNvbnMgYXMgYWJvdmUsIHdlIGNhbid0IHByb21pc2UgdGhlIHRyYW5zZm9ybXMgbWF0Y2ggdGhlIGRlZmF1bHQncyB0eXBlXG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KENvbXBvbmVudCwgdmFsdWVzKTtcbn1cblxuZnVuY3Rpb24gaXNJMThuVG9rZW5zU2hhcGUoeCkge1xuICByZXR1cm4geC50b2tlbnMgIT0gbnVsbDtcbn0gLy8gTXVzdCB1c2UgdGhlIGdlbmVyaWNzIDxUIGV4dGVuZHMge30+XG4vLyBJZiBpbnN0ZWFkIHR5cGVkIHdpdGggUmVhY3QuRnVuY3Rpb25Db21wb25lbnQgdGhlcmUgaXNuJ3QgZmVlZGJhY2sgZ2l2ZW4gYmFjayB0byB0aGUgZGV2XG4vLyB3aGVuIHVzaW5nIGEgYHZhbHVlc2Agb2JqZWN0IHdpdGggYSByZW5kZXJlciBjYWxsYmFjay5cblxuXG52YXIgRXVpSTE4biA9IGZ1bmN0aW9uIEV1aUkxOG4ocHJvcHMpIHtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpSTE4bkNvbnN1bWVyLCBudWxsLCBmdW5jdGlvbiAoaTE4bkNvbmZpZykge1xuICAgIHZhciBtYXBwaW5nID0gaTE4bkNvbmZpZy5tYXBwaW5nLFxuICAgICAgICBtYXBwaW5nRnVuYyA9IGkxOG5Db25maWcubWFwcGluZ0Z1bmMsXG4gICAgICAgIHJlbmRlciA9IGkxOG5Db25maWcucmVuZGVyO1xuXG4gICAgaWYgKGlzSTE4blRva2Vuc1NoYXBlKHByb3BzKSkge1xuICAgICAgcmV0dXJuIHByb3BzLmNoaWxkcmVuKHByb3BzLnRva2Vucy5tYXAoZnVuY3Rpb24gKHRva2VuLCBpZHgpIHtcbiAgICAgICAgcmV0dXJuIGxvb2t1cFRva2VuKHtcbiAgICAgICAgICB0b2tlbjogdG9rZW4sXG4gICAgICAgICAgaTE4bk1hcHBpbmc6IG1hcHBpbmcsXG4gICAgICAgICAgaTE4bk1hcHBpbmdGdW5jOiBtYXBwaW5nRnVuYyxcbiAgICAgICAgICB2YWx1ZURlZmF1bHQ6IHByb3BzLmRlZmF1bHRzW2lkeF0sXG4gICAgICAgICAgcmVuZGVyOiByZW5kZXJcbiAgICAgICAgfSk7XG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgdmFyIHRva2VuVmFsdWUgPSBsb29rdXBUb2tlbih7XG4gICAgICB0b2tlbjogcHJvcHMudG9rZW4sXG4gICAgICBpMThuTWFwcGluZzogbWFwcGluZyxcbiAgICAgIHZhbHVlRGVmYXVsdDogcHJvcHMuZGVmYXVsdCxcbiAgICAgIGkxOG5NYXBwaW5nRnVuYzogbWFwcGluZ0Z1bmMsXG4gICAgICB2YWx1ZXM6IHByb3BzLnZhbHVlcyxcbiAgICAgIHJlbmRlcjogcmVuZGVyXG4gICAgfSk7XG5cbiAgICBpZiAocHJvcHMuY2hpbGRyZW4pIHtcbiAgICAgIHJldHVybiBwcm9wcy5jaGlsZHJlbih0b2tlblZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRva2VuVmFsdWU7XG4gICAgfVxuICB9KTtcbn07IC8vIEEgc2luZ2xlIGRlZmF1bHQgY291bGQgYmUgYSBzdHJpbmcsIHJlYWN0IGNoaWxkLCBvciByZW5kZXIgZnVuY3Rpb25cblxuXG5mdW5jdGlvbiB1c2VFdWlJMThuKCkge1xuICB2YXIgaTE4bkNvbmZpZyA9IHVzZUNvbnRleHQoSTE4bkNvbnRleHQpO1xuICB2YXIgbWFwcGluZyA9IGkxOG5Db25maWcubWFwcGluZyxcbiAgICAgIG1hcHBpbmdGdW5jID0gaTE4bkNvbmZpZy5tYXBwaW5nRnVuYyxcbiAgICAgIHJlbmRlciA9IGkxOG5Db25maWcucmVuZGVyO1xuXG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBwcm9wcyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICBwcm9wc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgcHJvcHNbMF0gPT09ICdzdHJpbmcnKSB7XG4gICAgdmFyIF90b2tlbiA9IHByb3BzWzBdLFxuICAgICAgICBfZGVmYXVsdFZhbHVlID0gcHJvcHNbMV0sXG4gICAgICAgIF92YWx1ZXMgPSBwcm9wc1syXTtcbiAgICByZXR1cm4gbG9va3VwVG9rZW4oe1xuICAgICAgdG9rZW46IF90b2tlbixcbiAgICAgIGkxOG5NYXBwaW5nOiBtYXBwaW5nLFxuICAgICAgdmFsdWVEZWZhdWx0OiBfZGVmYXVsdFZhbHVlLFxuICAgICAgaTE4bk1hcHBpbmdGdW5jOiBtYXBwaW5nRnVuYyxcbiAgICAgIHZhbHVlczogX3ZhbHVlcyxcbiAgICAgIHJlbmRlcjogcmVuZGVyXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIF9yZWYgPSBwcm9wcyxcbiAgICAgICAgX3JlZjIgPSBfc2xpY2VkVG9BcnJheShfcmVmLCAyKSxcbiAgICAgICAgX3Rva2VucyA9IF9yZWYyWzBdLFxuICAgICAgICBfZGVmYXVsdFZhbHVlcyA9IF9yZWYyWzFdO1xuXG4gICAgcmV0dXJuIF90b2tlbnMubWFwKGZ1bmN0aW9uICh0b2tlbiwgaWR4KSB7XG4gICAgICByZXR1cm4gbG9va3VwVG9rZW4oe1xuICAgICAgICB0b2tlbjogdG9rZW4sXG4gICAgICAgIGkxOG5NYXBwaW5nOiBtYXBwaW5nLFxuICAgICAgICB2YWx1ZURlZmF1bHQ6IF9kZWZhdWx0VmFsdWVzW2lkeF0sXG4gICAgICAgIGkxOG5NYXBwaW5nRnVuYzogbWFwcGluZ0Z1bmMsXG4gICAgICAgIHJlbmRlcjogcmVuZGVyXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgeyBFdWlJMThuLCB1c2VFdWlJMThuIH07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgY3JlYXRlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgSTE4bkNvbnRleHQgPSAvKiNfX1BVUkVfXyovY3JlYXRlQ29udGV4dCh7fSk7XG52YXIgRXVpSTE4blByb3ZpZGVyID0gSTE4bkNvbnRleHQuUHJvdmlkZXIsXG4gICAgRXVpSTE4bkNvbnN1bWVyID0gSTE4bkNvbnRleHQuQ29uc3VtZXI7XG5cbnZhciBFdWlDb250ZXh0ID0gZnVuY3Rpb24gRXVpQ29udGV4dChfcmVmKSB7XG4gIHZhciBfcmVmJGkxOG4gPSBfcmVmLmkxOG4sXG4gICAgICBpMThuID0gX3JlZiRpMThuID09PSB2b2lkIDAgPyB7fSA6IF9yZWYkaTE4bixcbiAgICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbjtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpSTE4blByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IGkxOG5cbiAgfSwgY2hpbGRyZW4pO1xufTtcblxuRXVpQ29udGV4dC5wcm9wVHlwZXMgPSB7XG4gIGkxOG46IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgbWFwcGluZzogUHJvcFR5cGVzLnNoYXBlKHt9KSxcbiAgICBtYXBwaW5nRnVuYzogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgICAvKipcbiAgICAgICAqIFNvbWUgYnJvd3NlcnMnIHRyYW5zbGF0aW9uIGZlYXR1cmVzIGRvbid0IHdvcmsgd2l0aCBhIHJlbmRlcmVkIGA8RnJhZ21lbnQ+YCBjb21wb25lbnQuXG4gICAgICAgKiBUaGUgYHJlbmRlcmAgZnVuY3Rpb24gYWxsb3dzIHlvdSB0byBwYXNzIGluIGFub3RoZXIgY29tcG9uZW50IGluc3RlYWQsIGUuZy4gYDxkaXY+YFxuICAgICAgICovXG4gICAgcmVuZGVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBmb3JtYXROdW1iZXI6IFByb3BUeXBlcy5mdW5jLFxuICAgIGZvcm1hdERhdGVUaW1lOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBsb2NhbGU6IFByb3BUeXBlcy5zdHJpbmdcbiAgfSkuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICAgKiBSZWFjdE5vZGUgdG8gcmVuZGVyIGFzIHRoaXMgY29tcG9uZW50J3MgY29udGVudFxuICAgICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZFxufTtcbmV4cG9ydCB7IEV1aUNvbnRleHQsIEV1aUkxOG5Db25zdW1lciwgSTE4bkNvbnRleHQgfTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgY2xvbmVFbGVtZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaXNCb29sZWFuLCBpc1N0cmluZywgaXNOdW1iZXIsIGlzVW5kZWZpbmVkIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcHJlZGljYXRlJztcbmltcG9ydCB7IGlzRWxlbWVudCB9IGZyb20gJ3JlYWN0LWlzJztcblxuZnVuY3Rpb24gaXNQcmltaXRpdmUodmFsdWUpIHtcbiAgcmV0dXJuIGlzQm9vbGVhbih2YWx1ZSkgfHwgaXNTdHJpbmcodmFsdWUpIHx8IGlzTnVtYmVyKHZhbHVlKSB8fCBpc1VuZGVmaW5lZCh2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIGhhc1Byb3BOYW1lKGNoaWxkKSB7XG4gIHJldHVybiBjaGlsZCA/IF90eXBlb2YoY2hpbGQpID09PSAnb2JqZWN0JyAmJiBjaGlsZC5oYXNPd25Qcm9wZXJ0eSgncHJvcE5hbWUnKSA6IGZhbHNlO1xufVxuLyoqXG4gKiBSZXBsYWNlcyBwbGFjZWhvbGRlciB2YWx1ZXMgaW4gYGlucHV0YCB3aXRoIHRoZWlyIG1hdGNoaW5nIHZhbHVlIGluIGB2YWx1ZXNgXG4gKiBlLmcuIGlucHV0OidIZWxsbywge25hbWV9JyB3aWxsIHJlcGxhY2UgYHtuYW1lfWAgd2l0aCBgdmFsdWVzW25hbWVdYFxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0XG4gKiBAcGFyYW0ge1JlbmRlcmFibGVWYWx1ZXN9IHZhbHVlc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gaTE4bk1hcHBpbmdGdW5jXG4gKiBAcmV0dXJucyB7c3RyaW5nIHwgUmVhY3QuUmVhY3RDaGlsZFtdfVxuICovXG5cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NTdHJpbmdUb0NoaWxkcmVuKGlucHV0LCB2YWx1ZXMsIGkxOG5NYXBwaW5nRnVuYykge1xuICB2YXIgY2hpbGRyZW4gPSBbXTtcbiAgdmFyIGNoaWxkO1xuXG4gIGZ1bmN0aW9uIGFwcGVuZENoYXJUb0NoaWxkKGNoYXIpIHtcbiAgICBpZiAoY2hpbGQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gc3RhcnRpbmcgYSBuZXcgc3RyaW5nIGxpdGVyYWxcbiAgICAgIGNoaWxkID0gY2hhcjtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBjaGlsZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIGV4aXN0aW5nIHN0cmluZyBsaXRlcmFsXG4gICAgICBjaGlsZCA9IGNoaWxkICsgY2hhcjtcbiAgICB9IGVsc2UgaWYgKGhhc1Byb3BOYW1lKGNoaWxkKSkge1xuICAgICAgLy8gYWRkaW5nIHRvIHRoZSBwcm9wTmFtZSBvZiBhIHZhbHVlcyBsb29rdXBcbiAgICAgIGNoaWxkLnByb3BOYW1lID0gY2hpbGQucHJvcE5hbWUgKyBjaGFyO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGFwcGVuZFZhbHVlVG9DaGlsZHJlbih2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmIChpc0VsZW1lbnQodmFsdWUpKSB7XG4gICAgICAvLyBhbiBhcnJheSB3aXRoIGFueSBSZWFjdEVsZW1lbnRzIHdpbGwgYmUga2VwdCBhcyBhbiBhcnJheVxuICAgICAgLy8gc28gdGhleSBuZWVkIHRvIGJlIGFzc2lnbmVkIGEga2V5XG4gICAgICBjaGlsZHJlbi5wdXNoKCAvKiNfX1BVUkVfXyovY2xvbmVFbGVtZW50KHZhbHVlLCB7XG4gICAgICAgIGtleTogY2hpbGRyZW4ubGVuZ3RoXG4gICAgICB9KSk7XG4gICAgfSBlbHNlIGlmIChoYXNQcm9wTmFtZSh2YWx1ZSkpIHsvLyB0aGlzIHdvbid0IGJlIGNhbGxlZCwgcHJvcE5hbWUgY2hpbGRyZW4gYXJlIGNvbnZlcnRlZCB0byBhIFJlYWN0Q2hpbGQgYmVmb3JlIGNhbGxpbmcgdGhpc1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBldmVyeXRoaW5nIGVsc2UgY2FuIGdvIHN0cmFpZ2h0IGluXG4gICAgICBpZiAoaTE4bk1hcHBpbmdGdW5jICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICB2YWx1ZSA9IGkxOG5NYXBwaW5nRnVuYyh2YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIGNoaWxkcmVuLnB1c2godmFsdWUpO1xuICAgIH1cbiAgfSAvLyBpZiB3ZSBkb24ndCBlbmNvdW50ZXIgYSBub24tcHJpbWl0aXZlXG4gIC8vIHRoZW4gYGNoaWxkcmVuYCBjYW4gYmUgY29uY2F0ZW5hdGVkIHRvZ2V0aGVyIGF0IHRoZSBlbmRcblxuXG4gIHZhciBlbmNvdW50ZXJlZE5vblByaW1pdGl2ZSA9IGZhbHNlO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgaW5wdXQubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgY2hhciA9IGlucHV0W2ldO1xuXG4gICAgaWYgKGNoYXIgPT09ICdcXFxcJykge1xuICAgICAgLy8gcGVlayBhdCB0aGUgbmV4dCBjaGFyYWN0ZXIgdG8ga25vdyBpZiB0aGlzIGlzIGFuIGVzY2FwZVxuICAgICAgdmFyIG5leHRDaGFyID0gaW5wdXRbaSArIDFdO1xuICAgICAgdmFyIGNoYXJUb0FkZCA9IGNoYXI7IC8vIGlmIHRoaXMgaXNuJ3QgYW4gZXNjYXBlIHNlcXVlbmNlIHRoZW4gd2Ugd2lsbCBhZGQgdGhlIGJhY2tzbGFzaFxuXG4gICAgICBpZiAobmV4dENoYXIgPT09ICd7JyB8fCBuZXh0Q2hhciA9PT0gJ30nKSB7XG4gICAgICAgIC8vIGVzY2FwaW5nIGEgYnJhY2VcbiAgICAgICAgaSArPSAxOyAvLyBhZHZhbmNlIHBhc3NlZCB0aGUgYnJhY2VcblxuICAgICAgICBjaGFyVG9BZGQgPSBpbnB1dFtpXTtcbiAgICAgIH1cblxuICAgICAgYXBwZW5kQ2hhclRvQ2hpbGQoY2hhclRvQWRkKTtcbiAgICB9IGVsc2UgaWYgKGNoYXIgPT09ICd7Jykge1xuICAgICAgYXBwZW5kVmFsdWVUb0NoaWxkcmVuKGNoaWxkKTtcbiAgICAgIGNoaWxkID0ge1xuICAgICAgICBwcm9wTmFtZTogJydcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChjaGFyID09PSAnfScpIHtcbiAgICAgIHZhciBwcm9wTmFtZSA9IGNoaWxkLnByb3BOYW1lO1xuXG4gICAgICBpZiAoIXZhbHVlcy5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiS2V5IFxcXCJcIi5jb25jYXQocHJvcE5hbWUsIFwiXFxcIiBub3QgZm91bmQgaW4gXCIpLmNvbmNhdChKU09OLnN0cmluZ2lmeSh2YWx1ZXMsIG51bGwsIDIpKSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBwcm9wVmFsdWUgPSB2YWx1ZXNbcHJvcE5hbWVdO1xuICAgICAgZW5jb3VudGVyZWROb25QcmltaXRpdmUgPSBlbmNvdW50ZXJlZE5vblByaW1pdGl2ZSB8fCAhaXNQcmltaXRpdmUocHJvcFZhbHVlKTtcbiAgICAgIGFwcGVuZFZhbHVlVG9DaGlsZHJlbihwcm9wVmFsdWUpO1xuICAgICAgY2hpbGQgPSB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFwcGVuZENoYXJUb0NoaWxkKGNoYXIpO1xuICAgIH1cbiAgfSAvLyBpbmNsdWRlIGFueSByZW1haW5pbmcgY2hpbGQgdmFsdWVcblxuXG4gIGFwcGVuZFZhbHVlVG9DaGlsZHJlbihjaGlsZCk7XG4gIHJldHVybiBlbmNvdW50ZXJlZE5vblByaW1pdGl2ZSA/IGNoaWxkcmVuIDogY2hpbGRyZW4uam9pbignJyk7XG59IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyB1c2VFdWlJMThuIH0gZnJvbSAnLi4vaTE4bic7XG5leHBvcnQgdmFyIHVzZUxvYWRpbmdBcmlhTGFiZWwgPSBmdW5jdGlvbiB1c2VMb2FkaW5nQXJpYUxhYmVsKCkge1xuICByZXR1cm4gdXNlRXVpSTE4bignZXVpTG9hZGluZ1N0cmluZ3MuYXJpYUxhYmVsJywgJ0xvYWRpbmcnKTtcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJzaXplXCIsIFwiY2xhc3NOYW1lXCIsIFwiYXJpYS1sYWJlbFwiLCBcImNvbG9yXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi8vc2VydmljZXMnO1xuaW1wb3J0IHsgdXNlTG9hZGluZ0FyaWFMYWJlbCB9IGZyb20gJy4vX2xvYWRpbmdfc3RyaW5ncyc7XG5pbXBvcnQgeyBldWlMb2FkaW5nU3Bpbm5lclN0eWxlcyB9IGZyb20gJy4vbG9hZGluZ19zcGlubmVyLnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBTSVpFUyA9IFsncycsICdtJywgJ2wnLCAneGwnLCAneHhsJ107XG5leHBvcnQgdmFyIEV1aUxvYWRpbmdTcGlubmVyID0gZnVuY3Rpb24gRXVpTG9hZGluZ1NwaW5uZXIoX3JlZikge1xuICB2YXIgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gJ20nIDogX3JlZiRzaXplLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBhcmlhTGFiZWwgPSBfcmVmWydhcmlhLWxhYmVsJ10sXG4gICAgICBjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgdmFyIHN0eWxlcyA9IGV1aUxvYWRpbmdTcGlubmVyU3R5bGVzKGV1aVRoZW1lLCBjb2xvcik7XG4gIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aUxvYWRpbmdTcGlubmVyLCBzdHlsZXNbc2l6ZV1dO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUxvYWRpbmdTcGlubmVyJywgY2xhc3NOYW1lKTtcbiAgdmFyIGRlZmF1bHRMYWJlbCA9IHVzZUxvYWRpbmdBcmlhTGFiZWwoKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgcm9sZTogXCJwcm9ncmVzc2JhclwiLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBhcmlhTGFiZWwgfHwgZGVmYXVsdExhYmVsXG4gIH0sIHJlc3QpKTtcbn07XG5FdWlMb2FkaW5nU3Bpbm5lci5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgICAqIFNldHMgdGhlIGNvbG9yIG9mIHRoZSBib3JkZXIgYW5kIGhpZ2hsaWdodC5cbiAgICAgICAqIEVhY2gga2V5IGFjY2VwdHMgYW55IHZhbGlkIENTUyBjb2xvciB2YWx1ZSBhcyBhIGBzdHJpbmdgXG4gICAgICAgKiBTZWUgI0V1aUxvYWRpbmdTcGlubmVyQ29sb3JcbiAgICAgICAqL1xuICBjb2xvcjogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBib3JkZXI6IFByb3BUeXBlcy5hbnksXG4gICAgaGlnaGxpZ2h0OiBQcm9wVHlwZXMuYW55XG4gIH0pXG59OyIsICJ2YXIgX3RlbXBsYXRlT2JqZWN0O1xuXG5mdW5jdGlvbiBfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsKHN0cmluZ3MsIHJhdykgeyBpZiAoIXJhdykgeyByYXcgPSBzdHJpbmdzLnNsaWNlKDApOyB9IHJldHVybiBPYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHN0cmluZ3MsIHsgcmF3OiB7IHZhbHVlOiBPYmplY3QuZnJlZXplKHJhdykgfSB9KSk7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IGNzcywga2V5ZnJhbWVzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgZXVpQ2FuQW5pbWF0ZSB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcblxudmFyIF9sb2FkaW5nU3Bpbm5lciA9IGtleWZyYW1lcyhfdGVtcGxhdGVPYmplY3QgfHwgKF90ZW1wbGF0ZU9iamVjdCA9IF90YWdnZWRUZW1wbGF0ZUxpdGVyYWwoW1wiXFxuICBmcm9tIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XFxuICB9XFxuXFxuICB0byB7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDM1OWRlZyk7XFxuICB9XFxuXCJdKSkpO1xuXG52YXIgc3Bpbm5lclNpemVzID0ge1xuICBzOiAnbScsXG4gIG06ICdiYXNlJyxcbiAgbDogJ2wnLFxuICB4bDogJ3hsJyxcbiAgeHhsOiAneHhsJ1xufTtcblxudmFyIHNwaW5uZXJDb2xvcnNDU1MgPSBmdW5jdGlvbiBzcGlubmVyQ29sb3JzQ1NTKGJvcmRlciwgaGlnaGxpZ2h0KSB7XG4gIHJldHVybiBcIlxcbiAgICBib3JkZXItY29sb3I6IFwiLmNvbmNhdChoaWdobGlnaHQsIFwiIFwiKS5jb25jYXQoYm9yZGVyLCBcIiBcIikuY29uY2F0KGJvcmRlciwgXCIgXCIpLmNvbmNhdChib3JkZXIsIFwiO1xcbiAgXCIpO1xufTtcblxuZXhwb3J0IHZhciBldWlMb2FkaW5nU3Bpbm5lclN0eWxlcyA9IGZ1bmN0aW9uIGV1aUxvYWRpbmdTcGlubmVyU3R5bGVzKF9yZWYsIGNvbG9yKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYuZXVpVGhlbWU7XG4gIHJldHVybiB7XG4gICAgZXVpTG9hZGluZ1NwaW5uZXI6IC8qI19fUFVSRV9fKi9jc3MoXCJmbGV4LXNocmluazowO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2JvcmRlci1yYWRpdXM6NTAlO2JvcmRlcjpcIiwgZXVpVGhlbWUuYm9yZGVyLnRoaWNrLCBcIjtcIiwgc3Bpbm5lckNvbG9yc0NTUygoY29sb3IgPT09IG51bGwgfHwgY29sb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbG9yLmJvcmRlcikgfHwgZXVpVGhlbWUuY29sb3JzLmxpZ2h0U2hhZGUsIChjb2xvciA9PT0gbnVsbCB8fCBjb2xvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogY29sb3IuaGlnaGxpZ2h0KSB8fCBldWlUaGVtZS5jb2xvcnMucHJpbWFyeSksIFwiO1wiLCBldWlDYW5BbmltYXRlLCBcInthbmltYXRpb246XCIsIF9sb2FkaW5nU3Bpbm5lciwgXCIgMC42cyBpbmZpbml0ZSBsaW5lYXI7fTtsYWJlbDpldWlMb2FkaW5nU3Bpbm5lcjtcIiksXG4gICAgLy8gU2l6ZXNcbiAgICBzOiAvKiNfX1BVUkVfXyovY3NzKFwid2lkdGg6XCIsIGV1aVRoZW1lLnNpemVbc3Bpbm5lclNpemVzLnNdLCBcIjtoZWlnaHQ6XCIsIGV1aVRoZW1lLnNpemVbc3Bpbm5lclNpemVzLnNdLCBcIjtib3JkZXItd2lkdGg6Y2FsYyhcIiwgZXVpVGhlbWUuYm9yZGVyLndpZHRoLnRoaW4sIFwiICogMS41KTs7bGFiZWw6cztcIiksXG4gICAgbTogLyojX19QVVJFX18qL2NzcyhcIndpZHRoOlwiLCBldWlUaGVtZS5zaXplW3NwaW5uZXJTaXplcy5tXSwgXCI7aGVpZ2h0OlwiLCBldWlUaGVtZS5zaXplW3NwaW5uZXJTaXplcy5tXSwgXCI7Ym9yZGVyLXdpZHRoOmNhbGMoXCIsIGV1aVRoZW1lLmJvcmRlci53aWR0aC50aGluLCBcIiAqIDEuNSk7O2xhYmVsOm07XCIpLFxuICAgIGw6IC8qI19fUFVSRV9fKi9jc3MoXCJ3aWR0aDpcIiwgZXVpVGhlbWUuc2l6ZVtzcGlubmVyU2l6ZXMubF0sIFwiO2hlaWdodDpcIiwgZXVpVGhlbWUuc2l6ZVtzcGlubmVyU2l6ZXMubF0sIFwiOztsYWJlbDpsO1wiKSxcbiAgICB4bDogLyojX19QVVJFX18qL2NzcyhcIndpZHRoOlwiLCBldWlUaGVtZS5zaXplW3NwaW5uZXJTaXplcy54bF0sIFwiO2hlaWdodDpcIiwgZXVpVGhlbWUuc2l6ZVtzcGlubmVyU2l6ZXMueGxdLCBcIjs7bGFiZWw6eGw7XCIpLFxuICAgIHh4bDogLyojX19QVVJFX18qL2NzcyhcIndpZHRoOlwiLCBldWlUaGVtZS5zaXplW3NwaW5uZXJTaXplcy54eGxdLCBcIjtoZWlnaHQ6XCIsIGV1aVRoZW1lLnNpemVbc3Bpbm5lclNpemVzLnh4bF0sIFwiOztsYWJlbDp4eGw7XCIpXG4gIH07XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFVSTCBmcm9tICd1cmwtcGFyc2UnO1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlSHJlZihocmVmKSB7XG4gIC8vIGNoZWNrIGhyZWYgYW5kIHRyZWF0IGl0IGFzIGludmFsaWQgaWYgaXQgdXNlcyB0aGUgamF2YXNjcmlwdDogcHJvdG9jb2xcbiAgdmFyIHBhcnRzID0gbmV3IFVSTChocmVmKTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNjcmlwdC11cmxcblxuICByZXR1cm4gcGFydHMucHJvdG9jb2wgIT09ICdqYXZhc2NyaXB0Oic7XG59IiwgImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHsgdmFyIF9pID0gYXJyID09IG51bGwgPyBudWxsIDogdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBhcnJbU3ltYm9sLml0ZXJhdG9yXSB8fCBhcnJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAoX2kgPT0gbnVsbCkgcmV0dXJuOyB2YXIgX2FyciA9IFtdOyB2YXIgX24gPSB0cnVlOyB2YXIgX2QgPSBmYWxzZTsgdmFyIF9zLCBfZTsgdHJ5IHsgZm9yIChfaSA9IF9pLmNhbGwoYXJyKTsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkgeyBfYXJyLnB1c2goX3MudmFsdWUpOyBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7IH0gfSBjYXRjaCAoZXJyKSB7IF9kID0gdHJ1ZTsgX2UgPSBlcnI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTsgfSBmaW5hbGx5IHsgaWYgKF9kKSB0aHJvdyBfZTsgfSB9IHJldHVybiBfYXJyOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgRXVpT2JzZXJ2ZXIgfSBmcm9tICcuLi9vYnNlcnZlcic7XG5leHBvcnQgdmFyIGhhc1Jlc2l6ZU9ic2VydmVyID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdy5SZXNpemVPYnNlcnZlciAhPT0gJ3VuZGVmaW5lZCc7XG5leHBvcnQgdmFyIEV1aVJlc2l6ZU9ic2VydmVyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfRXVpT2JzZXJ2ZXIpIHtcbiAgX2luaGVyaXRzKEV1aVJlc2l6ZU9ic2VydmVyLCBfRXVpT2JzZXJ2ZXIpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoRXVpUmVzaXplT2JzZXJ2ZXIpO1xuXG4gIGZ1bmN0aW9uIEV1aVJlc2l6ZU9ic2VydmVyKCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlSZXNpemVPYnNlcnZlcik7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbC5hcHBseShfc3VwZXIsIFt0aGlzXS5jb25jYXQoYXJncykpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm5hbWVcIiwgJ0V1aVJlc2l6ZU9ic2VydmVyJyk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic3RhdGVcIiwge1xuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgd2lkdGg6IDBcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvblJlc2l6ZVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBgZW50cnkuY29udGVudFJlY3RgIHByb3ZpZGVzIGluY29tcGxldGUgYGhlaWdodGAgYW5kIGB3aWR0aGAgZGF0YS5cbiAgICAgIC8vIFVzZSBgZ2V0Qm91bmRpbmdDbGllbnRSZWN0YCB0byBhY2NvdW50IGZvciBwYWRkaW5nIGFuZCBib3JkZXIuXG4gICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRE9NUmVjdFJlYWRPbmx5XG4gICAgICBpZiAoIV90aGlzLmNoaWxkTm9kZSkgcmV0dXJuO1xuXG4gICAgICB2YXIgX3RoaXMkY2hpbGROb2RlJGdldEJvID0gX3RoaXMuY2hpbGROb2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFxuICAgICAgICAgIGhlaWdodCA9IF90aGlzJGNoaWxkTm9kZSRnZXRCby5oZWlnaHQsXG4gICAgICAgICAgd2lkdGggPSBfdGhpcyRjaGlsZE5vZGUkZ2V0Qm8ud2lkdGg7IC8vIENoZWNrIGZvciBhY3R1YWwgcmVzaXplIGV2ZW50XG5cblxuICAgICAgaWYgKF90aGlzLnN0YXRlLmhlaWdodCA9PT0gaGVpZ2h0ICYmIF90aGlzLnN0YXRlLndpZHRoID09PSB3aWR0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIF90aGlzLnByb3BzLm9uUmVzaXplKHtcbiAgICAgICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgICAgIHdpZHRoOiB3aWR0aFxuICAgICAgfSk7XG5cbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgICAgIHdpZHRoOiB3aWR0aFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiYmVnaW5PYnNlcnZlXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFRoZSBzdXBlcmNsYXNzIGNoZWNrcyB0aGF0IGNoaWxkTm9kZSBpcyBub3QgbnVsbCBiZWZvcmUgaW52b2tpbmdcbiAgICAgIC8vIGJlZ2luT2JzZXJ2ZSgpXG4gICAgICB2YXIgY2hpbGROb2RlID0gX3RoaXMuY2hpbGROb2RlO1xuICAgICAgX3RoaXMub2JzZXJ2ZXIgPSBtYWtlUmVzaXplT2JzZXJ2ZXIoY2hpbGROb2RlLCBfdGhpcy5vblJlc2l6ZSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICByZXR1cm4gRXVpUmVzaXplT2JzZXJ2ZXI7XG59KEV1aU9ic2VydmVyKTtcblxudmFyIG1ha2VSZXNpemVPYnNlcnZlciA9IGZ1bmN0aW9uIG1ha2VSZXNpemVPYnNlcnZlcihub2RlLCBjYWxsYmFjaykge1xuICB2YXIgb2JzZXJ2ZXI7XG5cbiAgaWYgKGhhc1Jlc2l6ZU9ic2VydmVyKSB7XG4gICAgb2JzZXJ2ZXIgPSBuZXcgd2luZG93LlJlc2l6ZU9ic2VydmVyKGNhbGxiYWNrKTtcbiAgICBvYnNlcnZlci5vYnNlcnZlKG5vZGUpO1xuICB9XG5cbiAgcmV0dXJuIG9ic2VydmVyO1xufTtcblxuZXhwb3J0IHZhciB1c2VSZXNpemVPYnNlcnZlciA9IGZ1bmN0aW9uIHVzZVJlc2l6ZU9ic2VydmVyKGNvbnRhaW5lciwgZGltZW5zaW9uKSB7XG4gIHZhciBfdXNlU3RhdGUgPSB1c2VTdGF0ZSh7XG4gICAgd2lkdGg6IDAsXG4gICAgaGVpZ2h0OiAwXG4gIH0pLFxuICAgICAgX3VzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZSwgMiksXG4gICAgICBzaXplID0gX3VzZVN0YXRlMlswXSxcbiAgICAgIF9zZXRTaXplID0gX3VzZVN0YXRlMlsxXTsgLy8gX2N1cnJlbnREaW1lbnNpb25zIGFuZCBfc2V0U2l6ZSBhcmUgdXNlZCB0byBvbmx5IHN0b3JlIHRoZVxuICAvLyBuZXcgc3RhdGUgKGFuZCB0cmlnZ2VyIGEgcmUtcmVuZGVyKSB3aGVuIHRoZSBuZXcgZGltZW5zaW9ucyBhY3R1YWxseSBkaWZmZXJcblxuXG4gIHZhciBfY3VycmVudERpbWVuc2lvbnMgPSB1c2VSZWYoc2l6ZSk7XG5cbiAgdmFyIHNldFNpemUgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoZGltZW5zaW9ucykge1xuICAgIHZhciBkb2VzV2lkdGhNYXR0ZXIgPSBkaW1lbnNpb24gIT09ICdoZWlnaHQnO1xuICAgIHZhciBkb2VzSGVpZ2h0TWF0dGVyID0gZGltZW5zaW9uICE9PSAnd2lkdGgnO1xuXG4gICAgaWYgKGRvZXNXaWR0aE1hdHRlciAmJiBfY3VycmVudERpbWVuc2lvbnMuY3VycmVudC53aWR0aCAhPT0gZGltZW5zaW9ucy53aWR0aCB8fCBkb2VzSGVpZ2h0TWF0dGVyICYmIF9jdXJyZW50RGltZW5zaW9ucy5jdXJyZW50LmhlaWdodCAhPT0gZGltZW5zaW9ucy5oZWlnaHQpIHtcbiAgICAgIF9jdXJyZW50RGltZW5zaW9ucy5jdXJyZW50ID0gZGltZW5zaW9ucztcblxuICAgICAgX3NldFNpemUoZGltZW5zaW9ucyk7XG4gICAgfVxuICB9LCBbZGltZW5zaW9uXSk7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGNvbnRhaW5lciAhPSBudWxsKSB7XG4gICAgICAvLyBSZXNpemVPYnNlcnZlcidzIGZpcnN0IGNhbGwgdG8gdGhlIG9ic2VydmF0aW9uIGNhbGxiYWNrIGlzIHNjaGVkdWxlZCBpbiB0aGUgZnV0dXJlXG4gICAgICAvLyBzbyBmaW5kIHRoZSBjb250YWluZXIncyBpbml0aWFsIGRpbWVuc2lvbnMgbm93XG4gICAgICB2YXIgYm91bmRpbmdSZWN0ID0gY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgc2V0U2l6ZSh7XG4gICAgICAgIHdpZHRoOiBib3VuZGluZ1JlY3Qud2lkdGgsXG4gICAgICAgIGhlaWdodDogYm91bmRpbmdSZWN0LmhlaWdodFxuICAgICAgfSk7XG4gICAgICB2YXIgb2JzZXJ2ZXIgPSBtYWtlUmVzaXplT2JzZXJ2ZXIoY29udGFpbmVyLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIGBlbnRyeS5jb250ZW50UmVjdGAgcHJvdmlkZXMgaW5jb21wbGV0ZSBgaGVpZ2h0YCBhbmQgYHdpZHRoYCBkYXRhLlxuICAgICAgICAvLyBVc2UgYGdldEJvdW5kaW5nQ2xpZW50UmVjdGAgdG8gYWNjb3VudCBmb3IgcGFkZGluZyBhbmQgYm9yZGVyLlxuICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRE9NUmVjdFJlYWRPbmx5XG4gICAgICAgIHZhciBfY29udGFpbmVyJGdldEJvdW5kaW4gPSBjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksXG4gICAgICAgICAgICBoZWlnaHQgPSBfY29udGFpbmVyJGdldEJvdW5kaW4uaGVpZ2h0LFxuICAgICAgICAgICAgd2lkdGggPSBfY29udGFpbmVyJGdldEJvdW5kaW4ud2lkdGg7XG5cbiAgICAgICAgc2V0U2l6ZSh7XG4gICAgICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgICAgIGhlaWdodDogaGVpZ2h0XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gb2JzZXJ2ZXIgJiYgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0U2l6ZSh7XG4gICAgICAgIHdpZHRoOiAwLFxuICAgICAgICBoZWlnaHQ6IDBcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwgW2NvbnRhaW5lciwgc2V0U2l6ZV0pO1xuICByZXR1cm4gc2l6ZTtcbn07IiwgImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5leHBvcnQgdmFyIEV1aU9ic2VydmVyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhFdWlPYnNlcnZlciwgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihFdWlPYnNlcnZlcik7XG5cbiAgZnVuY3Rpb24gRXVpT2JzZXJ2ZXIoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aU9ic2VydmVyKTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsLmFwcGx5KF9zdXBlciwgW3RoaXNdLmNvbmNhdChhcmdzKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwibmFtZVwiLCAnRXVpT2JzZXJ2ZXInKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJjaGlsZE5vZGVcIiwgbnVsbCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib2JzZXJ2ZXJcIiwgbnVsbCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwidXBkYXRlQ2hpbGROb2RlXCIsIGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgIGlmIChfdGhpcy5jaGlsZE5vZGUgPT09IHJlZikgcmV0dXJuOyAvLyBub2RlIGhhc24ndCBjaGFuZ2VkXG4gICAgICAvLyBpZiB0aGVyZSdzIGFuIGV4aXN0aW5nIG9ic2VydmVyIGRpc2Nvbm5lY3QgaXRcblxuICAgICAgaWYgKF90aGlzLm9ic2VydmVyICE9IG51bGwpIHtcbiAgICAgICAgX3RoaXMub2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuXG4gICAgICAgIF90aGlzLm9ic2VydmVyID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgX3RoaXMuY2hpbGROb2RlID0gcmVmO1xuXG4gICAgICBpZiAoX3RoaXMuY2hpbGROb2RlICE9IG51bGwpIHtcbiAgICAgICAgX3RoaXMuYmVnaW5PYnNlcnZlKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiYmVnaW5PYnNlcnZlXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXVpT2JzZXJ2ZXIgaGFzIG5vIGRlZmF1bHQgb2JzZXJ2YXRpb24gbWV0aG9kJyk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoRXVpT2JzZXJ2ZXIsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgaWYgKHRoaXMuY2hpbGROb2RlID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiXCIuY29uY2F0KHRoaXMubmFtZSwgXCIgZGlkIG5vdCByZWNlaXZlIGEgcmVmXCIpKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50V2lsbFVubW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICBpZiAodGhpcy5vYnNlcnZlciAhPSBudWxsKSB7XG4gICAgICAgIHRoaXMub2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIHByb3BzID0gdGhpcy5wcm9wcztcbiAgICAgIHJldHVybiBwcm9wcy5jaGlsZHJlbih0aGlzLnVwZGF0ZUNoaWxkTm9kZSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEV1aU9ic2VydmVyO1xufShDb21wb25lbnQpOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wic2l6ZVwiLCBcImNvbG9yXCIsIFwiZ3Jvd1wiLCBcInRleHRBbGlnblwiLCBcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBldWlUZXh0U3R5bGVzIH0gZnJvbSAnLi90ZXh0LnN0eWxlcyc7XG5pbXBvcnQgeyBFdWlUZXh0Q29sb3IgfSBmcm9tICcuL3RleHRfY29sb3InO1xuaW1wb3J0IHsgRXVpVGV4dEFsaWduIH0gZnJvbSAnLi90ZXh0X2FsaWduJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIFRFWFRfU0laRVMgPSBbJ3hzJywgJ3MnLCAnbScsICdyZWxhdGl2ZSddO1xuZXhwb3J0IHZhciBFdWlUZXh0ID0gZnVuY3Rpb24gRXVpVGV4dChfcmVmKSB7XG4gIHZhciBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAnbScgOiBfcmVmJHNpemUsXG4gICAgICBjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBfcmVmJGdyb3cgPSBfcmVmLmdyb3csXG4gICAgICBncm93ID0gX3JlZiRncm93ID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRncm93LFxuICAgICAgdGV4dEFsaWduID0gX3JlZi50ZXh0QWxpZ24sXG4gICAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICB2YXIgc3R5bGVzID0gZXVpVGV4dFN0eWxlcyhldWlUaGVtZSk7XG4gIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aVRleHQsICFncm93ID8gc3R5bGVzLmNvbnN0cmFpbmVkV2lkdGggOiB1bmRlZmluZWQsIHN0eWxlc1tzaXplXV07XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpVGV4dCcsIGNsYXNzTmFtZSk7XG5cbiAgdmFyIHRleHQgPSBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgfSwgcmVzdCksIGNoaWxkcmVuKTtcblxuICBpZiAoY29sb3IpIHtcbiAgICB0ZXh0ID0gX19fRW1vdGlvbkpTWChFdWlUZXh0Q29sb3IsIHtcbiAgICAgIGNvbG9yOiBjb2xvcixcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgIGNsb25lRWxlbWVudDogdHJ1ZVxuICAgIH0sIHRleHQpO1xuICB9XG5cbiAgaWYgKHRleHRBbGlnbikge1xuICAgIHRleHQgPSBfX19FbW90aW9uSlNYKEV1aVRleHRBbGlnbiwge1xuICAgICAgdGV4dEFsaWduOiB0ZXh0QWxpZ24sXG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICBjbG9uZUVsZW1lbnQ6IHRydWVcbiAgICB9LCB0ZXh0KTtcbiAgfVxuXG4gIHJldHVybiB0ZXh0O1xufTtcbkV1aVRleHQucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHRleHRBbGlnbjogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgICAqIERldGVybWluZXMgdGhlIHRleHQgc2l6ZS4gQ2hvb3NlIGByZWxhdGl2ZWAgdG8gY29udHJvbCB0aGUgYGZvbnQtc2l6ZWAgYmFzZWQgb24gdGhlIHZhbHVlIG9mIGEgcGFyZW50IGNvbnRhaW5lci5cbiAgICAgICAqL1xuICBzaXplOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAgICogQW55IG9mIG91ciBuYW1lZCBjb2xvcnMgb3IgYSBgaGV4YCwgYHJnYmAgb3IgYHJnYmFgIHZhbHVlLlxuICAgICAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZF0pLFxuICBncm93OiBQcm9wVHlwZXMuYm9vbFxufTsiLCAiZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgZXVpRm9jdXNSaW5nLCBsb2dpY2FsQ1NTIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuXG52YXIgX2NvbG9yQ1NTID0gZnVuY3Rpb24gX2NvbG9yQ1NTKGNvbG9yKSB7XG4gIHJldHVybiBcIlxcbiAgICBjb2xvcjogXCIuY29uY2F0KGNvbG9yLCBcIjtcXG5cXG4gICAgJjpob3ZlcixcXG4gICAgJjpmb2N1cyxcXG4gICAgJjp0YXJnZXQge1xcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xcbiAgICB9XFxuXFxuICAgICY6dGFyZ2V0IHtcXG4gICAgICBjb2xvcjogZGFya2VuKFwiKS5jb25jYXQoY29sb3IsIFwiLCAxMCUpO1xcbiAgICB9XFxuICBcIik7XG59O1xuXG5leHBvcnQgdmFyIGV1aUxpbmtIb3ZlckNTUyA9IGZ1bmN0aW9uIGV1aUxpbmtIb3ZlckNTUygpIHtcbiAgcmV0dXJuIFwiXFxuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xcbiAgXCI7XG59O1xuZXhwb3J0IHZhciBldWlMaW5rRm9jdXNDU1MgPSBmdW5jdGlvbiBldWlMaW5rRm9jdXNDU1MoZXVpVGhlbWUpIHtcbiAgcmV0dXJuIFwiXFxuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xcbiAgICB0ZXh0LWRlY29yYXRpb24tdGhpY2tuZXNzOiBcIi5jb25jYXQoZXVpVGhlbWUuYm9yZGVyLndpZHRoLnRoaWNrLCBcIiAhaW1wb3J0YW50O1xcbiAgXCIpO1xufTtcbmV4cG9ydCB2YXIgZXVpTGlua0NTUyA9IGZ1bmN0aW9uIGV1aUxpbmtDU1MoZXVpVGhlbWUpIHtcbiAgcmV0dXJuIFwiXFxuICAgIGZvbnQtd2VpZ2h0OiBcIi5jb25jYXQoZXVpVGhlbWUuZm9udC53ZWlnaHQubWVkaXVtLCBcIjtcXG4gICAgdGV4dC1hbGlnbjogbGVmdDtcXG5cXG4gICAgJjpob3ZlciB7XFxuICAgICAgXCIpLmNvbmNhdChldWlMaW5rSG92ZXJDU1MoKSwgXCJcXG4gICAgfVxcblxcbiAgICAmOmZvY3VzIHtcXG4gICAgICBcIikuY29uY2F0KGV1aUZvY3VzUmluZyhldWlUaGVtZSwgJ291dHNldCcpLCBcIlxcbiAgICAgIFwiKS5jb25jYXQoZXVpTGlua0ZvY3VzQ1NTKGV1aVRoZW1lKSwgXCJcXG4gICAgfVxcbiAgXCIpO1xufTtcblxudmFyIF9yZWYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiOW5qYmk1LWRpc2FibGVkXCIsXG4gIHN0eWxlczogXCJmb250LXdlaWdodDppbmhlcml0OyY6aG92ZXJ7Y3Vyc29yOmF1dG87fSY6aG92ZXIsJjpmb2N1cywmOnRhcmdldHt0ZXh0LWRlY29yYXRpb246bm9uZTt9O2xhYmVsOmRpc2FibGVkO1wiXG59IDoge1xuICBuYW1lOiBcIjluamJpNS1kaXNhYmxlZFwiLFxuICBzdHlsZXM6IFwiZm9udC13ZWlnaHQ6aW5oZXJpdDsmOmhvdmVye2N1cnNvcjphdXRvO30mOmhvdmVyLCY6Zm9jdXMsJjp0YXJnZXR7dGV4dC1kZWNvcmF0aW9uOm5vbmU7fTtsYWJlbDpkaXNhYmxlZDtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xuXG5leHBvcnQgdmFyIGV1aUxpbmtTdHlsZXMgPSBmdW5jdGlvbiBldWlMaW5rU3R5bGVzKF9yZWYyKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYyLmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIGV1aUxpbms6IC8qI19fUFVSRV9fKi9jc3MoZXVpTGlua0NTUyhldWlUaGVtZSksIFwiIHVzZXItc2VsZWN0OnRleHQ7Jlt0YXJnZXQ9J19ibGFuaydde3Bvc2l0aW9uOnJlbGF0aXZlO307bGFiZWw6ZXVpTGluaztcIiksXG4gICAgZGlzYWJsZWQ6IF9yZWYsXG4gICAgLy8gQ29sb3Igc3R5bGVzXG4gICAgcHJpbWFyeTogLyojX19QVVJFX18qL2NzcyhfY29sb3JDU1MoZXVpVGhlbWUuY29sb3JzLnByaW1hcnlUZXh0KSwgXCI7bGFiZWw6cHJpbWFyeTtcIiksXG4gICAgc3ViZHVlZDogLyojX19QVVJFX18qL2NzcyhfY29sb3JDU1MoZXVpVGhlbWUuY29sb3JzLnN1YmR1ZWRUZXh0KSwgXCI7bGFiZWw6c3ViZHVlZDtcIiksXG4gICAgc3VjY2VzczogLyojX19QVVJFX18qL2NzcyhfY29sb3JDU1MoZXVpVGhlbWUuY29sb3JzLnN1Y2Nlc3NUZXh0KSwgXCI7bGFiZWw6c3VjY2VzcztcIiksXG4gICAgYWNjZW50OiAvKiNfX1BVUkVfXyovY3NzKF9jb2xvckNTUyhldWlUaGVtZS5jb2xvcnMuYWNjZW50VGV4dCksIFwiO2xhYmVsOmFjY2VudDtcIiksXG4gICAgZGFuZ2VyOiAvKiNfX1BVUkVfXyovY3NzKF9jb2xvckNTUyhldWlUaGVtZS5jb2xvcnMuZGFuZ2VyVGV4dCksIFwiO2xhYmVsOmRhbmdlcjtcIiksXG4gICAgd2FybmluZzogLyojX19QVVJFX18qL2NzcyhfY29sb3JDU1MoZXVpVGhlbWUuY29sb3JzLndhcm5pbmdUZXh0KSwgXCI7bGFiZWw6d2FybmluZztcIiksXG4gICAgZ2hvc3Q6IC8qI19fUFVSRV9fKi9jc3MoX2NvbG9yQ1NTKGV1aVRoZW1lLmNvbG9ycy5naG9zdCksIFwiO2xhYmVsOmdob3N0O1wiKSxcbiAgICB0ZXh0OiAvKiNfX1BVUkVfXyovY3NzKF9jb2xvckNTUyhldWlUaGVtZS5jb2xvcnMudGV4dCksIFwiO2xhYmVsOnRleHQ7XCIpLFxuICAgIC8vIENoaWxkcmVuXG4gICAgZXVpTGlua19fc2NyZWVuUmVhZGVyVGV4dDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCdsZWZ0JywgJzBweCcpLCBcIjs7bGFiZWw6ZXVpTGlua19fc2NyZWVuUmVhZGVyVGV4dDtcIiksXG4gICAgZXVpTGlua19fZXh0ZXJuYWxJY29uOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ21hcmdpbi1sZWZ0JywgZXVpVGhlbWUuc2l6ZS54cyksIFwiOztsYWJlbDpldWlMaW5rX19leHRlcm5hbEljb247XCIpXG4gIH07XG59OyIsICJmdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fKCkgeyByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IHVzZUV1aVRoZW1lIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgZXVpVGV4dEJyZWFrV29yZCwgZXVpRm9udFNpemUgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5leHBvcnQgdmFyIGV1aVRpdGxlID0gZnVuY3Rpb24gZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBzY2FsZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogJ20nO1xuICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkO1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHZhciB0aXRsZVNjYWxlVG9Gb250U2l6ZVNjYWxlTWFwID0ge1xuICAgIHh4eHM6ICd4cycsXG4gICAgeHhzOiAncycsXG4gICAgeHM6ICdtJyxcbiAgICBzOiAnbCcsXG4gICAgbTogJ3hsJyxcbiAgICBsOiAneHhsJ1xuICB9O1xuICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBldWlGb250U2l6ZShldWlUaGVtZUNvbnRleHQsIHRpdGxlU2NhbGVUb0ZvbnRTaXplU2NhbGVNYXBbc2NhbGVdLCBvcHRpb25zKSksIHt9LCB7XG4gICAgZm9udFdlaWdodDogZXVpVGhlbWUuZm9udC53ZWlnaHRbZXVpVGhlbWUuZm9udC50aXRsZS53ZWlnaHRdLFxuICAgIGNvbG9yOiBldWlUaGVtZS5jb2xvcnMudGl0bGVcbiAgfSk7XG59OyAvLyBIb29rIHZlcnNpb25cblxuZXhwb3J0IHZhciB1c2VFdWlUaXRsZSA9IGZ1bmN0aW9uIHVzZUV1aVRpdGxlKHNjYWxlLCBvcHRpb25zKSB7XG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHJldHVybiBldWlUaXRsZShldWlUaGVtZSwgc2NhbGUsIG9wdGlvbnMpO1xufTtcbi8qKlxuICogU3R5bGVzXG4gKi9cblxudmFyIF9yZWYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMXgycXNiMS11cHBlcmNhc2VcIixcbiAgc3R5bGVzOiBcInRleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtsYWJlbDp1cHBlcmNhc2U7XCJcbn0gOiB7XG4gIG5hbWU6IFwiMXgycXNiMS11cHBlcmNhc2VcIixcbiAgc3R5bGVzOiBcInRleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtsYWJlbDp1cHBlcmNhc2U7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcblxuZXhwb3J0IHZhciBldWlUaXRsZVN0eWxlcyA9IGZ1bmN0aW9uIGV1aVRpdGxlU3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICByZXR1cm4ge1xuICAgIGV1aVRpdGxlOiAvKiNfX1BVUkVfXyovY3NzKGV1aVRleHRCcmVha1dvcmQoKSwgXCIgJisme21hcmdpbi10b3A6XCIsIGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZS5zaXplLmwsIFwiO307bGFiZWw6ZXVpVGl0bGU7XCIpLFxuICAgIHVwcGVyY2FzZTogX3JlZixcbiAgICAvLyBTaXplc1xuICAgIHh4eHM6IC8qI19fUFVSRV9fKi9jc3MoZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAneHh4cycpLCBcIjs7bGFiZWw6eHh4cztcIiksXG4gICAgeHhzOiAvKiNfX1BVUkVfXyovY3NzKGV1aVRpdGxlKGV1aVRoZW1lQ29udGV4dCwgJ3h4cycpLCBcIjs7bGFiZWw6eHhzO1wiKSxcbiAgICB4czogLyojX19QVVJFX18qL2NzcyhldWlUaXRsZShldWlUaGVtZUNvbnRleHQsICd4cycpLCBcIjs7bGFiZWw6eHM7XCIpLFxuICAgIHM6IC8qI19fUFVSRV9fKi9jc3MoZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAncycpLCBcIjs7bGFiZWw6cztcIiksXG4gICAgbTogLyojX19QVVJFX18qL2NzcyhldWlUaXRsZShldWlUaGVtZUNvbnRleHQsICdtJyksIFwiOztsYWJlbDptO1wiKSxcbiAgICBsOiAvKiNfX1BVUkVfXyovY3NzKGV1aVRpdGxlKGV1aVRoZW1lQ29udGV4dCwgJ2wnKSwgXCI7O2xhYmVsOmw7XCIpXG4gIH07XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgbG9naWNhbENTUywgbG9naWNhbFRleHRBbGlnbkNTUywgZXVpRm9udFNpemUsIGV1aUJhY2tncm91bmRDb2xvciB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmltcG9ydCB7IGV1aUxpbmtDU1MgfSBmcm9tICcuLi9saW5rL2xpbmsuc3R5bGVzJztcbmltcG9ydCB7IGV1aVRpdGxlIH0gZnJvbSAnLi4vdGl0bGUvdGl0bGUuc3R5bGVzJztcbi8qKlxuICogVE9ETzogTWFrZSB0aGlzIGEgZ2xvYmFsIHZhbHVlIHNvIGl0IGNhbiBiZSBzZXQgYnkgdGhlbWU/XG4gKi9cblxuZXhwb3J0IHZhciBldWlUZXh0Q29uc3RyYWluZWRNYXhXaWR0aCA9ICdtYXgoNjRjaCwgNzUlKSc7XG4vKipcbiAqIE1peGluc1xuICovXG5cbmV4cG9ydCB2YXIgZXVpVGV4dCA9IGZ1bmN0aW9uIGV1aVRleHQoZXVpVGhlbWUpIHtcbiAgdmFyIGluaGVyaXRDb2xvciA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZmFsc2U7XG4gIHJldHVybiB7XG4gICAgY29sb3I6IGluaGVyaXRDb2xvciA/ICdpbmhlcml0JyA6IGV1aVRoZW1lLmNvbG9ycy50ZXh0LFxuICAgIGZvbnRXZWlnaHQ6IGV1aVRoZW1lLmZvbnQud2VpZ2h0LnJlZ3VsYXJcbiAgfTtcbn07IC8vIEludGVybmFsIHV0aWxpdHkgZm9yIEV1aVRleHQgc2NhbGVzL3NpemVzXG5cbnZhciBldWlTY2FsZVRleHQgPSBmdW5jdGlvbiBldWlTY2FsZVRleHQoZXVpVGhlbWVDb250ZXh0LCBvcHRpb25zKSB7XG4gIHZhciBfZXVpRm9udFNpemUgPSBldWlGb250U2l6ZShldWlUaGVtZUNvbnRleHQsICdtJywgb3B0aW9ucyksXG4gICAgICBmb250U2l6ZSA9IF9ldWlGb250U2l6ZS5mb250U2l6ZSxcbiAgICAgIGxpbmVIZWlnaHQgPSBfZXVpRm9udFNpemUubGluZUhlaWdodDtcblxuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHZhciBtZWFzdXJlbWVudCA9IG9wdGlvbnMubWVhc3VyZW1lbnQsXG4gICAgICBfY3VzdG9tU2NhbGUgPSBvcHRpb25zLmN1c3RvbVNjYWxlO1xuICB2YXIgbGluZUhlaWdodFNpemUgPSBtZWFzdXJlbWVudCA9PT0gJ2VtJyA/IFwiXCIuY29uY2F0KGxpbmVIZWlnaHQsIFwiZW1cIikgOiBsaW5lSGVpZ2h0O1xuICB2YXIgaGVhZGluZ3MgPSB7XG4gICAgaDE6IGV1aVRpdGxlKGV1aVRoZW1lQ29udGV4dCwgJ2wnLCBvcHRpb25zKSxcbiAgICBoMjogZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAnbScsIG9wdGlvbnMpLFxuICAgIGgzOiBldWlUaXRsZShldWlUaGVtZUNvbnRleHQsICdzJywgb3B0aW9ucyksXG4gICAgaDQ6IGV1aVRpdGxlKGV1aVRoZW1lQ29udGV4dCwgJ3hzJywgb3B0aW9ucyksXG4gICAgaDU6IGV1aVRpdGxlKGV1aVRoZW1lQ29udGV4dCwgJ3h4cycsIG9wdGlvbnMpLFxuICAgIGg2OiBldWlUaXRsZShldWlUaGVtZUNvbnRleHQsICd4eHhzJywgb3B0aW9ucylcbiAgfTsgLy8gR2VuZXJhdGUgbWFyZ2lucyBmb3IgaGVhZGluZ3MgYmFzZWQgb24gY3VzdG9tU2NhbGUgKG5vdCBvbiBoZWFkaW5nIGxldmVsKVxuXG4gIHZhciBjdXN0b21TY2FsZSA9IF9jdXN0b21TY2FsZSA9PT0gJ3h4eHMnID8gJ3h4cycgOiBfY3VzdG9tU2NhbGUgfHwgJ20nO1xuICB2YXIgaGVhZGluZ01hcmdpblRvcCA9IFwiXCIuY29uY2F0KHBhcnNlRmxvYXQoZXVpVGhlbWUuc2l6ZVtjdXN0b21TY2FsZV0pICogMiwgXCJweFwiKTtcbiAgdmFyIGhlYWRpbmdNYXJnaW5Cb3R0b20gPSBldWlUaGVtZS5zaXplW2N1c3RvbVNjYWxlXTtcbiAgcmV0dXJuIFwiXFxuICAgIGZvbnQtc2l6ZTogXCIuY29uY2F0KGZvbnRTaXplLCBcIjtcXG4gICAgbGluZS1oZWlnaHQ6IFwiKS5jb25jYXQobGluZUhlaWdodCwgXCI7XFxuXFxuICAgIGgxIHtcXG4gICAgICBmb250LXNpemU6IFwiKS5jb25jYXQoaGVhZGluZ3MuaDEuZm9udFNpemUsIFwiO1xcbiAgICAgIGxpbmUtaGVpZ2h0OiBcIikuY29uY2F0KGhlYWRpbmdzLmgxLmxpbmVIZWlnaHQsIFwiO1xcbiAgICB9XFxuICAgIGgxOm5vdCg6bGFzdC1jaGlsZCkge1xcbiAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnbWFyZ2luLWJvdHRvbScsIGhlYWRpbmdNYXJnaW5Cb3R0b20pLCBcIlxcbiAgICB9XFxuXFxuICAgIGgyIHtcXG4gICAgICBmb250LXNpemU6IFwiKS5jb25jYXQoaGVhZGluZ3MuaDIuZm9udFNpemUsIFwiO1xcbiAgICAgIGxpbmUtaGVpZ2h0OiBcIikuY29uY2F0KGhlYWRpbmdzLmgyLmxpbmVIZWlnaHQsIFwiO1xcblxcbiAgICAgICY6bm90KDpmaXJzdC1jaGlsZCkge1xcbiAgICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdtYXJnaW4tdG9wJywgaGVhZGluZ01hcmdpblRvcCksIFwiXFxuICAgICAgfVxcblxcbiAgICAgICY6bm90KDpsYXN0LWNoaWxkKSB7XFxuICAgICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ21hcmdpbi1ib3R0b20nLCBoZWFkaW5nTWFyZ2luQm90dG9tKSwgXCJcXG4gICAgICB9XFxuICAgIH1cXG5cXG4gICAgaDMge1xcbiAgICAgIGZvbnQtc2l6ZTogXCIpLmNvbmNhdChoZWFkaW5ncy5oMy5mb250U2l6ZSwgXCI7XFxuICAgICAgbGluZS1oZWlnaHQ6IFwiKS5jb25jYXQoaGVhZGluZ3MuaDMubGluZUhlaWdodCwgXCI7XFxuXFxuICAgICAgJjpub3QoOmZpcnN0LWNoaWxkKSB7XFxuICAgICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ21hcmdpbi10b3AnLCBoZWFkaW5nTWFyZ2luVG9wKSwgXCJcXG4gICAgICB9XFxuXFxuICAgICAgJjpub3QoOmxhc3QtY2hpbGQpIHtcXG4gICAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnbWFyZ2luLWJvdHRvbScsIGhlYWRpbmdNYXJnaW5Cb3R0b20pLCBcIlxcbiAgICAgIH1cXG4gICAgfVxcblxcbiAgICBoNCB7XFxuICAgICAgZm9udC1zaXplOiBcIikuY29uY2F0KGhlYWRpbmdzLmg0LmZvbnRTaXplLCBcIjtcXG4gICAgICBsaW5lLWhlaWdodDogXCIpLmNvbmNhdChoZWFkaW5ncy5oNC5saW5lSGVpZ2h0LCBcIjtcXG5cXG4gICAgICAmOm5vdCg6Zmlyc3QtY2hpbGQpIHtcXG4gICAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnbWFyZ2luLXRvcCcsIGhlYWRpbmdNYXJnaW5Ub3ApLCBcIlxcbiAgICAgIH1cXG5cXG4gICAgICAmOm5vdCg6bGFzdC1jaGlsZCkge1xcbiAgICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdtYXJnaW4tYm90dG9tJywgaGVhZGluZ01hcmdpbkJvdHRvbSksIFwiXFxuICAgICAgfVxcbiAgICB9XFxuXFxuICAgIGg1IHtcXG4gICAgICBmb250LXNpemU6IFwiKS5jb25jYXQoaGVhZGluZ3MuaDUuZm9udFNpemUsIFwiO1xcbiAgICAgIGxpbmUtaGVpZ2h0OiBcIikuY29uY2F0KGhlYWRpbmdzLmg1LmxpbmVIZWlnaHQsIFwiO1xcblxcbiAgICAgICY6bm90KDpmaXJzdC1jaGlsZCkge1xcbiAgICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdtYXJnaW4tdG9wJywgaGVhZGluZ01hcmdpblRvcCksIFwiXFxuICAgICAgfVxcblxcbiAgICAgICY6bm90KDpsYXN0LWNoaWxkKSB7XFxuICAgICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ21hcmdpbi1ib3R0b20nLCBoZWFkaW5nTWFyZ2luQm90dG9tKSwgXCJcXG4gICAgICB9XFxuICAgIH1cXG5cXG4gICAgaDYge1xcbiAgICAgIGZvbnQtc2l6ZTogXCIpLmNvbmNhdChoZWFkaW5ncy5oNi5mb250U2l6ZSwgXCI7XFxuICAgICAgbGluZS1oZWlnaHQ6IFwiKS5jb25jYXQoaGVhZGluZ3MuaDYubGluZUhlaWdodCwgXCI7XFxuXFxuICAgICAgJjpub3QoOmZpcnN0LWNoaWxkKSB7XFxuICAgICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ21hcmdpbi10b3AnLCBoZWFkaW5nTWFyZ2luVG9wKSwgXCJcXG4gICAgICB9XFxuXFxuICAgICAgJjpub3QoOmxhc3QtY2hpbGQpIHtcXG4gICAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnbWFyZ2luLWJvdHRvbScsIGhlYWRpbmdNYXJnaW5Cb3R0b20pLCBcIlxcbiAgICAgIH1cXG4gICAgfVxcblxcbiAgICBwLFxcbiAgICB1bCxcXG4gICAgb2wsXFxuICAgIGRsLFxcbiAgICBibG9ja3F1b3RlLFxcbiAgICBpbWcsXFxuICAgIHByZSB7XFxuICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdtYXJnaW4tYm90dG9tJywgbGluZUhlaWdodFNpemUpLCBcIlxcbiAgICB9XFxuXFxuICAgIHVsLFxcbiAgICBvbCB7XFxuICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdtYXJnaW4tbGVmdCcsIGxpbmVIZWlnaHRTaXplKSwgXCJcXG4gICAgfVxcbiAgXFxuICAgIGJsb2NrcXVvdGUge1xcbiAgICAgIGZvbnQtc2l6ZTogXCIpLmNvbmNhdChmb250U2l6ZSwgXCI7XFxuICAgICAgcGFkZGluZzogXCIpLmNvbmNhdChsaW5lSGVpZ2h0U2l6ZSwgXCI7XFxuICAgIH1cXG5cXG4gICAgZGQgKyBkdCB7XFxuICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdtYXJnaW4tdG9wJywgZm9udFNpemUpLCBcIlxcbiAgICB9XFxuXFxuICAgIGR0LFxcbiAgICAuZXVpLWRlZmluaXRpb25MaXN0UmV2ZXJzZSBkZCB7XFxuICAgICAgZm9udC1zaXplOiBcIikuY29uY2F0KGZvbnRTaXplLCBcIjtcXG4gICAgICBsaW5lLWhlaWdodDogXCIpLmNvbmNhdChsaW5lSGVpZ2h0LCBcIjtcXG4gICAgfVxcblxcbiAgICAuZXVpLWRlZmluaXRpb25MaXN0UmV2ZXJzZSBkdCB7XFxuICAgICAgZm9udC1zaXplOiBcIikuY29uY2F0KGV1aUZvbnRTaXplKGV1aVRoZW1lQ29udGV4dCwgJ3hzJywgb3B0aW9ucykuZm9udFNpemUsIFwiO1xcbiAgICAgIGNvbG9yOiBcIikuY29uY2F0KGV1aVRoZW1lLmNvbG9ycy50ZXh0LCBcIjtcXG4gICAgfVxcblxcbiAgICBzbWFsbCB7XFxuICAgICAgZm9udC1zaXplOiBcIikuY29uY2F0KGV1aUZvbnRTaXplKGV1aVRoZW1lQ29udGV4dCwgJ3MnLCBvcHRpb25zKS5mb250U2l6ZSwgXCI7XFxuICAgIH1cXG5cXG4gICAgcHJlOm5vdCguZXVpQ29kZUJsb2NrX19wcmUpIHtcXG4gICAgICBwYWRkaW5nOiBcIikuY29uY2F0KGxpbmVIZWlnaHRTaXplLCBcIjtcXG4gICAgfVxcblxcbiAgICBjb2RlOm5vdCguZXVpQ29kZSk6bm90KC5ldWlDb2RlQmxvY2tfX2NvZGUpICB7XFxuICAgICAgZm9udC1zaXplOiAuOWVtOyAvLyA5MCUgb2YgcGFyZW50IGZvbnQgc2l6ZVxcbiAgICB9XFxuICAgIFwiKS5jb25jYXQoIC8vIHdoZW4gdGV4dFNpemUgaXMgJ20nLCB0aGUgJ2tiZCcgZWxlbWVudCBnZXRzIGEgbGluZSBiZXR3ZWVuIHRoZSB0ZXh0IGFuZCB0aGUgYm9yZGVyLWJvdHRvbVxuICBfY3VzdG9tU2NhbGUgPT09ICdtJyA/IFwiXFxuICAgIGtiZCB7XFxuICAgICAgXCIuY29uY2F0KGxvZ2ljYWxDU1MoJ3BhZGRpbmctYm90dG9tJywgZXVpVGhlbWUuc2l6ZS54cyksIFwiXFxuICAgICAgLy8gZW5zdXJlcyB3aGVuIG9ubHkgb25lIGNoYXJhY3RlciB0aGUgc2hhcGUgbG9va3MgbGlrZSBhIHNxdWFyZVxcbiAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnbWluLXdpZHRoJywgZXVpVGhlbWUuc2l6ZS5sKSwgXCJcXG4gICAgICBcIikuY29uY2F0KGxvZ2ljYWxUZXh0QWxpZ25DU1MoJ2NlbnRlcicpLCBcIlxcbiAgICB9XFxuICAgIFxcbiAgICBrYmQ6OmFmdGVyIHtcXG4gICAgICBjb250ZW50OiAnJztcXG4gICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ2JvcmRlci1ib3R0b20nLCBcIlwiLmNvbmNhdChldWlUaGVtZS5ib3JkZXIud2lkdGgudGhpbiwgXCIgc29saWQgXCIpLmNvbmNhdChldWlUaGVtZS5jb2xvcnMudGV4dCkpLCBcIlxcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ2JvdHRvbScsIGV1aVRoZW1lLnNpemUueHhzKSwgXCJcXG4gICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ2xlZnQnLCAwKSwgXCJcXG4gICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ3dpZHRoJywgJzEwMCUnKSwgXCJcXG4gICAgfVwiKSA6ICcnLCBcIlxcbiAgXCIpO1xufTtcbi8qKlxuICogU3R5bGVzXG4gKi9cblxuXG5leHBvcnQgdmFyIGV1aVRleHRTdHlsZXMgPSBmdW5jdGlvbiBldWlUZXh0U3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHJldHVybiB7XG4gICAgZXVpVGV4dDogLyojX19QVVJFX18qL2NzcyhldWlUZXh0KGV1aVRoZW1lLCB0cnVlKSwgXCI7Y2xlYXI6Ym90aDthOm5vdChbY2xhc3NdKXtcIiwgZXVpTGlua0NTUyhldWlUaGVtZSksIFwiO31pbWd7ZGlzcGxheTpibG9jaztcIiwgbG9naWNhbENTUygnbWF4LXdpZHRoJywgJzEwMCUnKSwgXCI7fXVse2xpc3Qtc3R5bGU6ZGlzYzt9b2x7bGlzdC1zdHlsZTpkZWNpbWFsO31ibG9ja3F1b3RlOm5vdCguZXVpTWFya2Rvd25Gb3JtYXRfX2Jsb2NrcXVvdGUpe3Bvc2l0aW9uOnJlbGF0aXZlO1wiLCBsb2dpY2FsVGV4dEFsaWduQ1NTKCdjZW50ZXInKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ21hcmdpbi1ob3Jpem9udGFsJywgJ2F1dG8nKSwgXCIgZm9udC1mYW1pbHk6XCIsIGV1aVRoZW1lLmZvbnQuZmFtaWx5U2VyaWYsIFwiO2ZvbnQtc3R5bGU6aXRhbGljO2xldHRlci1zcGFjaW5nOm5vcm1hbDtwOmxhc3QtY2hpbGR7XCIsIGxvZ2ljYWxDU1MoJ21hcmdpbi1ib3R0b20nLCAnMCcpLCBcIjt9JjpiZWZvcmUsJjphZnRlcntwb3NpdGlvbjphYnNvbHV0ZTtjb250ZW50OicnO1wiLCBsb2dpY2FsQ1NTKCdoZWlnaHQnLCBldWlUaGVtZS5ib3JkZXIud2lkdGgudGhpY2spLCBcIiBcIiwgbG9naWNhbENTUygnd2lkdGgnLCAnNTAlJyksIFwiIFwiLCBsb2dpY2FsQ1NTKCdsZWZ0JywgJzI1JScpLCBcIiBcIiwgbG9naWNhbENTUygncmlnaHQnLCAnMjUlJyksIFwiIGJhY2tncm91bmQ6XCIsIGV1aVRoZW1lLmNvbG9ycy5kYXJrU2hhZGUsIFwiO30mOmJlZm9yZXtcIiwgbG9naWNhbENTUygndG9wJywgJzAnKSwgXCI7fSY6YWZ0ZXJ7XCIsIGxvZ2ljYWxDU1MoJ2JvdHRvbScsICcwJyksIFwiO319aDF7XCIsIGV1aVRpdGxlKGV1aVRoZW1lQ29udGV4dCwgJ2wnKSwgXCI7fWgye1wiLCBldWlUaXRsZShldWlUaGVtZUNvbnRleHQsICdtJyksIFwiO31oM3tcIiwgZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAncycpLCBcIjt9aDQsZHR7XCIsIGV1aVRpdGxlKGV1aVRoZW1lQ29udGV4dCwgJ3hzJyksIFwiO31oNXtcIiwgZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAneHhzJyksIFwiO31oNntcIiwgZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAneHh4cycpLCBcIiB0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7fWgxLGgyLGgzLGg0LGg1LGg2LGR0e2NvbG9yOmluaGVyaXQ7fXByZTpub3QoLmV1aUNvZGVCbG9ja19fcHJlKXt3aGl0ZS1zcGFjZTpwcmUtd3JhcDtiYWNrZ3JvdW5kOlwiLCBldWlCYWNrZ3JvdW5kQ29sb3IoZXVpVGhlbWVDb250ZXh0LCAnc3ViZHVlZCcpLCBcIjtjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLnRleHQsIFwiO31wcmU6bm90KC5ldWlDb2RlQmxvY2tfX3ByZSkscHJlOm5vdCguZXVpQ29kZUJsb2NrX19wcmUpIGNvZGV7ZGlzcGxheTpibG9jazt9PjpsYXN0LWNoaWxke1wiLCBsb2dpY2FsQ1NTKCdtYXJnaW4tYm90dG9tJywgJzAgIWltcG9ydGFudCcpLCBcIjt9a2Jke3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6aW5saW5lLWJsb2NrO1wiLCBsb2dpY2FsQ1NTKCdwYWRkaW5nLXZlcnRpY2FsJywgZXVpVGhlbWUuc2l6ZS54eHMpLCBcIiBcIiwgbG9naWNhbENTUygncGFkZGluZy1ob3Jpem9udGFsJywgZXVpVGhlbWUuc2l6ZS54cyksIFwiIGxpbmUtaGVpZ2h0OjE7Ym9yZGVyOlwiLCBldWlUaGVtZS5ib3JkZXIud2lkdGgudGhpbiwgXCIgc29saWQgXCIsIGV1aVRoZW1lLmNvbG9ycy50ZXh0LCBcIjtib3JkZXItcmFkaXVzOmNhbGMoXCIsIGV1aVRoZW1lLmJvcmRlci5yYWRpdXMuc21hbGwsIFwiIC8gMik7fTtsYWJlbDpldWlUZXh0O1wiKSxcbiAgICBjb25zdHJhaW5lZFdpZHRoOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ21heC13aWR0aCcsIGV1aVRleHRDb25zdHJhaW5lZE1heFdpZHRoKSwgXCI7O2xhYmVsOmNvbnN0cmFpbmVkV2lkdGg7XCIpLFxuICAgIC8vIFNpemVzXG4gICAgbTogLyojX19QVVJFX18qL2NzcyhldWlTY2FsZVRleHQoZXVpVGhlbWVDb250ZXh0LCB7XG4gICAgICBtZWFzdXJlbWVudDogJ3JlbScsXG4gICAgICBjdXN0b21TY2FsZTogJ20nXG4gICAgfSksIFwiOztsYWJlbDptO1wiKSxcbiAgICBzOiAvKiNfX1BVUkVfXyovY3NzKGV1aVNjYWxlVGV4dChldWlUaGVtZUNvbnRleHQsIHtcbiAgICAgIG1lYXN1cmVtZW50OiAncmVtJyxcbiAgICAgIGN1c3RvbVNjYWxlOiAncydcbiAgICB9KSwgXCI7O2xhYmVsOnM7XCIpLFxuICAgIHhzOiAvKiNfX1BVUkVfXyovY3NzKGV1aVNjYWxlVGV4dChldWlUaGVtZUNvbnRleHQsIHtcbiAgICAgIG1lYXN1cmVtZW50OiAncmVtJyxcbiAgICAgIGN1c3RvbVNjYWxlOiAneHMnXG4gICAgfSksIFwiOztsYWJlbDp4cztcIiksXG4gICAgcmVsYXRpdmU6IC8qI19fUFVSRV9fKi9jc3MoZXVpU2NhbGVUZXh0KGV1aVRoZW1lQ29udGV4dCwge1xuICAgICAgbWVhc3VyZW1lbnQ6ICdlbSdcbiAgICB9KSwgXCI7O2xhYmVsOnJlbGF0aXZlO1wiKVxuICB9O1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY29sb3JcIiwgXCJjb21wb25lbnRcIiwgXCJjbG9uZUVsZW1lbnRcIiwgXCJzdHlsZVwiXTtcblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IGlzVmFsaWRFbGVtZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgY2xvbmVFbGVtZW50V2l0aENzcyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RoZW1lL2Nsb25lX2VsZW1lbnQnO1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBldWlUZXh0Q29sb3JTdHlsZXMgfSBmcm9tICcuL3RleHRfY29sb3Iuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIENPTE9SUyA9IFsnZGVmYXVsdCcsICdzdWJkdWVkJywgJ3N1Y2Nlc3MnLCAnYWNjZW50JywgJ2RhbmdlcicsICd3YXJuaW5nJywgJ2dob3N0JywgJ2luaGVyaXQnXTtcbmV4cG9ydCB2YXIgRXVpVGV4dENvbG9yID0gZnVuY3Rpb24gRXVpVGV4dENvbG9yKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnZGVmYXVsdCcgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRjb21wb25lbnQgPSBfcmVmLmNvbXBvbmVudCxcbiAgICAgIGNvbXBvbmVudCA9IF9yZWYkY29tcG9uZW50ID09PSB2b2lkIDAgPyAnc3BhbicgOiBfcmVmJGNvbXBvbmVudCxcbiAgICAgIF9yZWYkY2xvbmVFbGVtZW50ID0gX3JlZi5jbG9uZUVsZW1lbnQsXG4gICAgICBjbG9uZUVsZW1lbnQgPSBfcmVmJGNsb25lRWxlbWVudCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGNsb25lRWxlbWVudCxcbiAgICAgIHN0eWxlID0gX3JlZi5zdHlsZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgaXNOYW1lZENvbG9yID0gQ09MT1JTLmluY2x1ZGVzKGNvbG9yKTtcbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgdmFyIHN0eWxlcyA9IGV1aVRleHRDb2xvclN0eWxlcyhldWlUaGVtZSk7XG4gIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aVRleHRDb2xvciwgaXNOYW1lZENvbG9yID8gc3R5bGVzW2NvbG9yXSA6IHN0eWxlcy5jdXN0b21Db2xvcl07IC8vIFdlJ3JlIGNoZWNraW5nIGlmIGlzIGEgY3VzdG9tIGNvbG9yLlxuICAvLyBJZiBpdCBpcyBhIGN1c3RvbSBjb2xvciB3ZSBzZXQgdGhlIGBjb2xvcmAgb2YgdGhlIGAuZXVpVGV4dENvbG9yYCBkaXYgdG8gdGhhdCBjdXN0b20gY29sb3IuXG4gIC8vIFRoaXMgd2F5IHRoZSBjaGlsZHJlbiB0ZXh0IGVsZW1lbnRzIGNhbiBgaW5oZXJpdGAgdGhhdCBjb2xvciBhbmQgYm9yZGVyIGFuZCBiYWNrZ3JvdW5kcyBjYW4gZ2V0IHRoYXQgYGN1cnJlbnRDb2xvcmAuXG5cbiAgdmFyIGV1aVRleHRTdHlsZSA9ICFpc05hbWVkQ29sb3IgPyBfb2JqZWN0U3ByZWFkKHtcbiAgICBjb2xvcjogY29sb3JcbiAgfSwgc3R5bGUpIDogX29iamVjdFNwcmVhZCh7fSwgc3R5bGUpO1xuXG4gIHZhciBwcm9wcyA9IF9vYmplY3RTcHJlYWQoe1xuICAgIGNzczogY3NzU3R5bGVzLFxuICAgIHN0eWxlOiBldWlUZXh0U3R5bGVcbiAgfSwgcmVzdCk7XG5cbiAgaWYgKCAvKiNfX1BVUkVfXyovaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pICYmIGNsb25lRWxlbWVudCkge1xuICAgIHZhciBjaGlsZHJlblN0eWxlID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBjaGlsZHJlbi5wcm9wcy5zdHlsZSksIGV1aVRleHRTdHlsZSk7XG5cbiAgICByZXR1cm4gY2xvbmVFbGVtZW50V2l0aENzcyhjaGlsZHJlbiwgX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBwcm9wcyksIHt9LCB7XG4gICAgICBzdHlsZTogY2hpbGRyZW5TdHlsZVxuICAgIH0pKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgQ29tcG9uZW50ID0gY29tcG9uZW50O1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKENvbXBvbmVudCwgcHJvcHMsIGNoaWxkcmVuKTtcbiAgfVxufTtcbkV1aVRleHRDb2xvci5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgICAqIEFueSBvZiBvdXIgbmFtZWQgY29sb3JzIG9yIGEgYGhleGAsIGByZ2JgIG9yIGByZ2JhYCB2YWx1ZS5cbiAgICAgICAqL1xuICBjb2xvcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWRdKSxcblxuICAvKipcbiAgICAgICAqIERldGVybWluZXMgdGhlIHJvb3QgZWxlbWVudFxuICAgICAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLm9uZU9mKFtcImRpdlwiLCBcInNwYW5cIl0pLFxuXG4gIC8qKlxuICAgICAgICogQXBwbGllcyB0ZXh0IHN0eWxpbmcgdG8gdGhlIGNoaWxkIGVsZW1lbnQgaW5zdGVhZCBvZiByZW5kZXJpbmcgYSBwYXJlbnQgd3JhcHBlciBgc3BhbmAvYGRpdmAuXG4gICAgICAgKiBDYW4gb25seSBiZSB1c2VkIHdoZW4gd3JhcHBpbmcgYSAqc2luZ2xlKiBjaGlsZCBlbGVtZW50L3RhZywgYW5kIG5vdCByYXcgdGV4dC5cbiAgICAgICAqL1xuICBjbG9uZUVsZW1lbnQ6IFByb3BUeXBlcy5ib29sXG59OyIsICJmdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5cbnZhciBfcmVmID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcInVhY2pjNS1pbmhlcml0XCIsXG4gIHN0eWxlczogXCJjb2xvcjppbmhlcml0O2xhYmVsOmluaGVyaXQ7XCJcbn0gOiB7XG4gIG5hbWU6IFwidWFjamM1LWluaGVyaXRcIixcbiAgc3R5bGVzOiBcImNvbG9yOmluaGVyaXQ7bGFiZWw6aW5oZXJpdDtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xuXG5leHBvcnQgdmFyIGV1aVRleHRDb2xvclN0eWxlcyA9IGZ1bmN0aW9uIGV1aVRleHRDb2xvclN0eWxlcyhfcmVmMikge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmMi5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICBldWlUZXh0Q29sb3I6IC8qI19fUFVSRV9fKi9jc3MoXCI7bGFiZWw6ZXVpVGV4dENvbG9yO1wiKSxcbiAgICBkZWZhdWx0OiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy50ZXh0LCBcIjs7bGFiZWw6ZGVmYXVsdDtcIiksXG4gICAgc3ViZHVlZDogLyojX19QVVJFX18qL2NzcyhcImNvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMuc3ViZHVlZFRleHQsIFwiOztsYWJlbDpzdWJkdWVkO1wiKSxcbiAgICBzdWNjZXNzOiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5zdWNjZXNzVGV4dCwgXCI7O2xhYmVsOnN1Y2Nlc3M7XCIpLFxuICAgIGFjY2VudDogLyojX19QVVJFX18qL2NzcyhcImNvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMuYWNjZW50VGV4dCwgXCI7O2xhYmVsOmFjY2VudDtcIiksXG4gICAgZGFuZ2VyOiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5kYW5nZXJUZXh0LCBcIjs7bGFiZWw6ZGFuZ2VyO1wiKSxcbiAgICB3YXJuaW5nOiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy53YXJuaW5nVGV4dCwgXCI7O2xhYmVsOndhcm5pbmc7XCIpLFxuICAgIGdob3N0OiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5naG9zdCwgXCIhaW1wb3J0YW50OztsYWJlbDpnaG9zdDtcIiksXG4gICAgaW5oZXJpdDogX3JlZixcbiAgICBjdXN0b21Db2xvcjogLyojX19QVVJFX18qL2NzcyhcIjtsYWJlbDpjdXN0b21Db2xvcjtcIikgLy8gSGFuZGxlZCBieSBgc3R5bGVgIHRhZyAtIHRoaXMgaXMganVzdCBoZXJlIGZvciBhIGNsYXNzTmFtZSBob29rXG5cbiAgfTtcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcInRleHRBbGlnblwiLCBcImNsb25lRWxlbWVudFwiXTtcblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IGlzVmFsaWRFbGVtZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgY2xvbmVFbGVtZW50V2l0aENzcyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RoZW1lL2Nsb25lX2VsZW1lbnQnO1xuaW1wb3J0IHsgZXVpVGV4dEFsaWduU3R5bGVzIH0gZnJvbSAnLi90ZXh0X2FsaWduLnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBBTElHTk1FTlRTID0gWydsZWZ0JywgJ3JpZ2h0JywgJ2NlbnRlciddO1xuZXhwb3J0IHZhciBFdWlUZXh0QWxpZ24gPSBmdW5jdGlvbiBFdWlUZXh0QWxpZ24oX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgX3JlZiR0ZXh0QWxpZ24gPSBfcmVmLnRleHRBbGlnbixcbiAgICAgIHRleHRBbGlnbiA9IF9yZWYkdGV4dEFsaWduID09PSB2b2lkIDAgPyAnbGVmdCcgOiBfcmVmJHRleHRBbGlnbixcbiAgICAgIF9yZWYkY2xvbmVFbGVtZW50ID0gX3JlZi5jbG9uZUVsZW1lbnQsXG4gICAgICBjbG9uZUVsZW1lbnQgPSBfcmVmJGNsb25lRWxlbWVudCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGNsb25lRWxlbWVudCxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgc3R5bGVzID0gZXVpVGV4dEFsaWduU3R5bGVzKCk7XG4gIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aVRleHRBbGlnbiwgc3R5bGVzW3RleHRBbGlnbl1dO1xuXG4gIHZhciBwcm9wcyA9IF9vYmplY3RTcHJlYWQoe1xuICAgIGNzczogY3NzU3R5bGVzXG4gIH0sIHJlc3QpO1xuXG4gIGlmICggLyojX19QVVJFX18qL2lzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSAmJiBjbG9uZUVsZW1lbnQpIHtcbiAgICByZXR1cm4gY2xvbmVFbGVtZW50V2l0aENzcyhjaGlsZHJlbiwgcHJvcHMpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHByb3BzLCBjaGlsZHJlbik7XG4gIH1cbn07XG5FdWlUZXh0QWxpZ24ucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHRleHRBbGlnbjogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgICAqIEFwcGxpZXMgdGV4dCBzdHlsaW5nIHRvIHRoZSBjaGlsZCBlbGVtZW50IGluc3RlYWQgb2YgcmVuZGVyaW5nIGEgcGFyZW50IHdyYXBwZXIgYGRpdmAuXG4gICAgICAgKiBDYW4gb25seSBiZSB1c2VkIHdoZW4gd3JhcHBpbmcgYSAqc2luZ2xlKiBjaGlsZCBlbGVtZW50L3RhZywgYW5kIG5vdCByYXcgdGV4dC5cbiAgICAgICAqL1xuICBjbG9uZUVsZW1lbnQ6IFByb3BUeXBlcy5ib29sXG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgbG9naWNhbFRleHRBbGlnbkNTUyB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmV4cG9ydCB2YXIgZXVpVGV4dEFsaWduU3R5bGVzID0gZnVuY3Rpb24gZXVpVGV4dEFsaWduU3R5bGVzKCkge1xuICByZXR1cm4ge1xuICAgIGV1aVRleHRBbGlnbjogLyojX19QVVJFX18qL2NzcyhcIjtsYWJlbDpldWlUZXh0QWxpZ247XCIpLFxuICAgIGxlZnQ6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbFRleHRBbGlnbkNTUygnbGVmdCcpLCBcIjs7bGFiZWw6bGVmdDtcIiksXG4gICAgcmlnaHQ6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbFRleHRBbGlnbkNTUygncmlnaHQnKSwgXCI7O2xhYmVsOnJpZ2h0O1wiKSxcbiAgICBjZW50ZXI6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbFRleHRBbGlnbkNTUygnY2VudGVyJyksIFwiOztsYWJlbDpjZW50ZXI7XCIpXG4gIH07XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJpY29uVHlwZVwiLCBcImljb25TaWRlXCIsIFwiaWNvblNpemVcIiwgXCJjb2xvclwiLCBcInNpemVcIiwgXCJmbHVzaFwiLCBcImlzRGlzYWJsZWRcIiwgXCJkaXNhYmxlZFwiLCBcImlzTG9hZGluZ1wiLCBcImhyZWZcIiwgXCJ0YXJnZXRcIiwgXCJyZWxcIiwgXCJ0eXBlXCIsIFwiYnV0dG9uUmVmXCIsIFwiY29udGVudFByb3BzXCIsIFwidGV4dFByb3BzXCIsIFwiaXNTZWxlY3RlZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsga2V5c09mIH0gZnJvbSAnLi4vLi4vY29tbW9uJztcbmltcG9ydCB7IGdldFNlY3VyZVJlbEZvclRhcmdldCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aUJ1dHRvbkNvbnRlbnREZXByZWNhdGVkIGFzIEV1aUJ1dHRvbkNvbnRlbnQgfSBmcm9tICcuLi9fYnV0dG9uX2NvbnRlbnRfZGVwcmVjYXRlZCc7XG5pbXBvcnQgeyB2YWxpZGF0ZUhyZWYgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9zZWN1cml0eS9ocmVmX3ZhbGlkYXRvcic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIGNvbG9yVG9DbGFzc05hbWVNYXAgPSB7XG4gIHByaW1hcnk6ICdldWlCdXR0b25FbXB0eS0tcHJpbWFyeScsXG4gIGRhbmdlcjogJ2V1aUJ1dHRvbkVtcHR5LS1kYW5nZXInLFxuICB0ZXh0OiAnZXVpQnV0dG9uRW1wdHktLXRleHQnLFxuICBnaG9zdDogJ2V1aUJ1dHRvbkVtcHR5LS1naG9zdCcsXG4gIHN1Y2Nlc3M6ICdldWlCdXR0b25FbXB0eS0tc3VjY2VzcycsXG4gIHdhcm5pbmc6ICdldWlCdXR0b25FbXB0eS0td2FybmluZydcbn07XG5leHBvcnQgdmFyIENPTE9SUyA9IGtleXNPZihjb2xvclRvQ2xhc3NOYW1lTWFwKTtcbnZhciBzaXplVG9DbGFzc05hbWVNYXAgPSB7XG4gIHhzOiAnZXVpQnV0dG9uRW1wdHktLXhTbWFsbCcsXG4gIHM6ICdldWlCdXR0b25FbXB0eS0tc21hbGwnLFxuICBtOiBudWxsXG59O1xuZXhwb3J0IHZhciBTSVpFUyA9IGtleXNPZihzaXplVG9DbGFzc05hbWVNYXApO1xudmFyIGZsdXNoVHlwZVRvQ2xhc3NOYW1lTWFwID0ge1xuICBsZWZ0OiAnZXVpQnV0dG9uRW1wdHktLWZsdXNoTGVmdCcsXG4gIHJpZ2h0OiAnZXVpQnV0dG9uRW1wdHktLWZsdXNoUmlnaHQnLFxuICBib3RoOiAnZXVpQnV0dG9uRW1wdHktLWZsdXNoQm90aCdcbn07XG5leHBvcnQgdmFyIEZMVVNIX1RZUEVTID0ga2V5c09mKGZsdXNoVHlwZVRvQ2xhc3NOYW1lTWFwKTtcbi8qKlxuICogRXh0ZW5kcyBFdWlCdXR0b25Db250ZW50UHJvcHMgd2hpY2ggcHJvdmlkZXNcbiAqIGBpY29uVHlwZWAsIGBpY29uU2lkZWAsIGFuZCBgdGV4dFByb3BzYFxuICovXG5cbmV4cG9ydCB2YXIgRXVpQnV0dG9uRW1wdHkgPSBmdW5jdGlvbiBFdWlCdXR0b25FbXB0eShfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIGljb25UeXBlID0gX3JlZi5pY29uVHlwZSxcbiAgICAgIF9yZWYkaWNvblNpZGUgPSBfcmVmLmljb25TaWRlLFxuICAgICAgaWNvblNpZGUgPSBfcmVmJGljb25TaWRlID09PSB2b2lkIDAgPyAnbGVmdCcgOiBfcmVmJGljb25TaWRlLFxuICAgICAgX3JlZiRpY29uU2l6ZSA9IF9yZWYuaWNvblNpemUsXG4gICAgICBpY29uU2l6ZSA9IF9yZWYkaWNvblNpemUgPT09IHZvaWQgMCA/ICdtJyA6IF9yZWYkaWNvblNpemUsXG4gICAgICBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ3ByaW1hcnknIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/ICdtJyA6IF9yZWYkc2l6ZSxcbiAgICAgIGZsdXNoID0gX3JlZi5mbHVzaCxcbiAgICAgIF9pc0Rpc2FibGVkID0gX3JlZi5pc0Rpc2FibGVkLFxuICAgICAgX2Rpc2FibGVkID0gX3JlZi5kaXNhYmxlZCxcbiAgICAgIGlzTG9hZGluZyA9IF9yZWYuaXNMb2FkaW5nLFxuICAgICAgaHJlZiA9IF9yZWYuaHJlZixcbiAgICAgIHRhcmdldCA9IF9yZWYudGFyZ2V0LFxuICAgICAgcmVsID0gX3JlZi5yZWwsXG4gICAgICBfcmVmJHR5cGUgPSBfcmVmLnR5cGUsXG4gICAgICB0eXBlID0gX3JlZiR0eXBlID09PSB2b2lkIDAgPyAnYnV0dG9uJyA6IF9yZWYkdHlwZSxcbiAgICAgIGJ1dHRvblJlZiA9IF9yZWYuYnV0dG9uUmVmLFxuICAgICAgY29udGVudFByb3BzID0gX3JlZi5jb250ZW50UHJvcHMsXG4gICAgICB0ZXh0UHJvcHMgPSBfcmVmLnRleHRQcm9wcyxcbiAgICAgIGlzU2VsZWN0ZWQgPSBfcmVmLmlzU2VsZWN0ZWQsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGlzSHJlZlZhbGlkID0gIWhyZWYgfHwgdmFsaWRhdGVIcmVmKGhyZWYpO1xuICB2YXIgZGlzYWJsZWQgPSBfZGlzYWJsZWQgfHwgIWlzSHJlZlZhbGlkO1xuICB2YXIgaXNEaXNhYmxlZCA9IF9pc0Rpc2FibGVkIHx8ICFpc0hyZWZWYWxpZDsgLy8gSWYgaW4gdGhlIGxvYWRpbmcgc3RhdGUsIGZvcmNlIGRpc2FibGVkIHRvIHRydWVcblxuICB2YXIgYnV0dG9uSXNEaXNhYmxlZCA9IGlzTG9hZGluZyB8fCBpc0Rpc2FibGVkIHx8IGRpc2FibGVkO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUJ1dHRvbkVtcHR5JywgY29sb3JUb0NsYXNzTmFtZU1hcFtjb2xvcl0sIHNpemUgPyBzaXplVG9DbGFzc05hbWVNYXBbc2l6ZV0gOiBudWxsLCBmbHVzaCA/IGZsdXNoVHlwZVRvQ2xhc3NOYW1lTWFwW2ZsdXNoXSA6IG51bGwsIHtcbiAgICAnZXVpQnV0dG9uRW1wdHktaXNEaXNhYmxlZCc6IGJ1dHRvbklzRGlzYWJsZWRcbiAgfSwgY2xhc3NOYW1lKTtcbiAgdmFyIGNvbnRlbnRDbGFzc05hbWVzID0gY2xhc3NOYW1lcygnZXVpQnV0dG9uRW1wdHlfX2NvbnRlbnQnLCBjb250ZW50UHJvcHMgJiYgY29udGVudFByb3BzLmNsYXNzTmFtZSk7XG4gIHZhciB0ZXh0Q2xhc3NOYW1lcyA9IGNsYXNzTmFtZXMoJ2V1aUJ1dHRvbkVtcHR5X190ZXh0JywgdGV4dFByb3BzICYmIHRleHRQcm9wcy5jbGFzc05hbWUpO1xuXG4gIHZhciBpbm5lck5vZGUgPSBfX19FbW90aW9uSlNYKEV1aUJ1dHRvbkNvbnRlbnQsIF9leHRlbmRzKHtcbiAgICBpc0xvYWRpbmc6IGlzTG9hZGluZyxcbiAgICBpY29uVHlwZTogaWNvblR5cGUsXG4gICAgaWNvblNpZGU6IGljb25TaWRlLFxuICAgIGljb25TaXplOiBzaXplID09PSAneHMnID8gJ3MnIDogaWNvblNpemUsXG4gICAgdGV4dFByb3BzOiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHRleHRQcm9wcyksIHt9LCB7XG4gICAgICBjbGFzc05hbWU6IHRleHRDbGFzc05hbWVzXG4gICAgfSlcbiAgfSwgY29udGVudFByb3BzLCB7XG4gICAgLy8gY2xhc3NOYW1lIGhhcyB0byBjb21lIGxhc3QgdG8gb3ZlcnJpZGUgY29udGVudFByb3BzLmNsYXNzTmFtZVxuICAgIGNsYXNzTmFtZTogY29udGVudENsYXNzTmFtZXNcbiAgfSksIGNoaWxkcmVuKTsgLy8gPGE+IGVsZW1lbnRzIGRvbid0IHJlc3BlY3QgdGhlIGBkaXNhYmxlZGAgYXR0cmlidXRlLiBTbyBpZiB3ZSdyZSBkaXNhYmxlZCwgd2UnbGwganVzdCBwcmV0ZW5kXG4gIC8vIHRoaXMgaXMgYSBidXR0b24gYW5kIHBpZ2d5YmFjayBvZmYgaXRzIGRpc2FibGVkIHN0eWxlcy5cblxuXG4gIGlmIChocmVmICYmICFidXR0b25Jc0Rpc2FibGVkKSB7XG4gICAgdmFyIHNlY3VyZVJlbCA9IGdldFNlY3VyZVJlbEZvclRhcmdldCh7XG4gICAgICBocmVmOiBocmVmLFxuICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICByZWw6IHJlbFxuICAgIH0pO1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwiYVwiLCBfZXh0ZW5kcyh7XG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICBocmVmOiBocmVmLFxuICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICByZWw6IHNlY3VyZVJlbCxcbiAgICAgIHJlZjogYnV0dG9uUmVmXG4gICAgfSwgcmVzdCksIGlubmVyTm9kZSk7XG4gIH1cblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcImJ1dHRvblwiLCBfZXh0ZW5kcyh7XG4gICAgZGlzYWJsZWQ6IGJ1dHRvbklzRGlzYWJsZWQsXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIHR5cGU6IHR5cGUsXG4gICAgcmVmOiBidXR0b25SZWYsXG4gICAgXCJhcmlhLXByZXNzZWRcIjogaXNTZWxlY3RlZFxuICB9LCByZXN0KSwgaW5uZXJOb2RlKTtcbn07XG5FdWlCdXR0b25FbXB0eS5wcm9wVHlwZXMgPSB7XG4gIGhyZWY6IFByb3BUeXBlcy5zdHJpbmcsXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgICAqIEFueSBvZiBvdXIgbmFtZWQgY29sb3JzXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogQW55IG9mIG91ciBuYW1lZCBjb2xvcnNcbiAgICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcy5vbmVPZihbXCJwcmltYXJ5XCIsIFwiZGFuZ2VyXCIsIFwidGV4dFwiLCBcImdob3N0XCIsIFwic3VjY2Vzc1wiLCBcIndhcm5pbmdcIl0pLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2YoW1wieHNcIiwgXCJzXCIsIFwibVwiXSksXG5cbiAgLyoqXG4gICAgICogRW5zdXJlIHRoZSB0ZXh0IG9mIHRoZSBidXR0b24gc2l0cyBmbHVzaCB0byB0aGUgbGVmdCwgcmlnaHQsIG9yIGJvdGggc2lkZXMgb2YgaXRzIGNvbnRhaW5lclxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIEVuc3VyZSB0aGUgdGV4dCBvZiB0aGUgYnV0dG9uIHNpdHMgZmx1c2ggdG8gdGhlIGxlZnQsIHJpZ2h0LCBvciBib3RoIHNpZGVzIG9mIGl0cyBjb250YWluZXJcbiAgICAgKi9cbiAgZmx1c2g6IFByb3BUeXBlcy5vbmVPZihbXCJsZWZ0XCIsIFwicmlnaHRcIiwgXCJib3RoXCJdKSxcblxuICAvKipcbiAgICAgKiBgZGlzYWJsZWRgIGlzIGFsc28gYWxsb3dlZFxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIGBkaXNhYmxlZGAgaXMgYWxzbyBhbGxvd2VkXG4gICAgICovXG4gIGlzRGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIEZvcmNlIGRpc2FibGVzIHRoZSBidXR0b24gYW5kIGNoYW5nZXMgdGhlIGljb24gdG8gYSBsb2FkaW5nIHNwaW5uZXJcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBGb3JjZSBkaXNhYmxlcyB0aGUgYnV0dG9uIGFuZCBjaGFuZ2VzIHRoZSBpY29uIHRvIGEgbG9hZGluZyBzcGlubmVyXG4gICAgICovXG4gIGlzTG9hZGluZzogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogQXBwbGllcyB0aGUgYm9vbGVhbiBzdGF0ZSBhcyB0aGUgYGFyaWEtcHJlc3NlZGAgcHJvcGVydHkgdG8gY3JlYXRlIGEgdG9nZ2xlIGJ1dHRvbi5cbiAgICAgKiAqT25seSB1c2Ugd2hlbiB0aGUgcmVhZGFibGUgdGV4dCBkb2VzIG5vdCBjaGFuZ2UgYmV0d2VlbiBzdGF0ZXMuKlxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIEFwcGxpZXMgdGhlIGJvb2xlYW4gc3RhdGUgYXMgdGhlIGBhcmlhLXByZXNzZWRgIHByb3BlcnR5IHRvIGNyZWF0ZSBhIHRvZ2dsZSBidXR0b24uXG4gICAgICogKk9ubHkgdXNlIHdoZW4gdGhlIHJlYWRhYmxlIHRleHQgZG9lcyBub3QgY2hhbmdlIGJldHdlZW4gc3RhdGVzLipcbiAgICAgKi9cbiAgaXNTZWxlY3RlZDogUHJvcFR5cGVzLmJvb2wsXG4gIHRhcmdldDogUHJvcFR5cGVzLnN0cmluZyxcbiAgcmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICB0eXBlOiBQcm9wVHlwZXMub25lT2YoW1wiYnV0dG9uXCIsIFwic3VibWl0XCJdKSxcbiAgYnV0dG9uUmVmOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIE9iamVjdCBvZiBwcm9wcyBwYXNzZWQgdG8gdGhlIDxzcGFuLz4gd3JhcHBpbmcgdGhlIGJ1dHRvbidzIGNvbnRlbnRcbiAgICAgKi9cbiAgY29udGVudFByb3BzOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIEFueSBgdHlwZWAgYWNjZXB0ZWQgYnkgRXVpSWNvblxuICAgICAqL1xuICBpY29uVHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYWxlcnRcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhc3Rlcmlza1wiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJib2x0XCIsIFwiYm94ZXNIb3Jpem9udGFsXCIsIFwiYm94ZXNWZXJ0aWNhbFwiLCBcImJyYW5jaFwiLCBcImJyYW5jaFVzZXJcIiwgXCJicm9vbVwiLCBcImJydXNoXCIsIFwiYnVnXCIsIFwiYnVsbHNleWVcIiwgXCJjYWxlbmRhclwiLCBcImNhbnZhc0FwcFwiLCBcImNhc2VzQXBwXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsb2NrXCIsIFwiY2xvdWREcml6emxlXCIsIFwiY2xvdWRTdG9ybXlcIiwgXCJjbG91ZFN1bm55XCIsIFwiY2x1c3RlclwiLCBcImNvZGVBcHBcIiwgXCJjb2xvclwiLCBcImNvbXB1dGVcIiwgXCJjb25zb2xlXCIsIFwiY29uc29sZUFwcFwiLCBcImNvbnRhaW5lclwiLCBcImNvbnRpbnVpdHlBYm92ZVwiLCBcImNvbnRpbnVpdHlBYm92ZUJlbG93XCIsIFwiY29udGludWl0eUJlbG93XCIsIFwiY29udGludWl0eVdpdGhpblwiLCBcImNvbnRyb2xzSG9yaXpvbnRhbFwiLCBcImNvbnRyb2xzVmVydGljYWxcIiwgXCJjb3B5XCIsIFwiY29weUNsaXBib2FyZFwiLCBcImNyZWF0ZUFkdmFuY2VkSm9iXCIsIFwiY3JlYXRlTXVsdGlNZXRyaWNKb2JcIiwgXCJjcmVhdGVQb3B1bGF0aW9uSm9iXCIsIFwiY3JlYXRlU2luZ2xlTWV0cmljSm9iXCIsIFwiY3Jvc3NcIiwgXCJjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcFwiLCBcImNyb3NzSW5BQ2lyY2xlRmlsbGVkXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpc2NvdmVyQXBwXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG91YmxlQXJyb3dMZWZ0XCIsIFwiZG91YmxlQXJyb3dSaWdodFwiLCBcImRvd25sb2FkXCIsIFwiZWRpdG9yQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JBbGlnbkxlZnRcIiwgXCJlZGl0b3JBbGlnblJpZ2h0XCIsIFwiZWRpdG9yQm9sZFwiLCBcImVkaXRvckNoZWNrbGlzdFwiLCBcImVkaXRvckNvZGVCbG9ja1wiLCBcImVkaXRvckNvbW1lbnRcIiwgXCJlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbFwiLCBcImVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbFwiLCBcImVkaXRvckhlYWRpbmdcIiwgXCJlZGl0b3JJdGFsaWNcIiwgXCJlZGl0b3JJdGVtQWxpZ25Cb3R0b21cIiwgXCJlZGl0b3JJdGVtQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JJdGVtQWxpZ25MZWZ0XCIsIFwiZWRpdG9ySXRlbUFsaWduTWlkZGxlXCIsIFwiZWRpdG9ySXRlbUFsaWduUmlnaHRcIiwgXCJlZGl0b3JJdGVtQWxpZ25Ub3BcIiwgXCJlZGl0b3JMaW5rXCIsIFwiZWRpdG9yT3JkZXJlZExpc3RcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnRcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BMZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BSaWdodFwiLCBcImVkaXRvclJlZG9cIiwgXCJlZGl0b3JTdHJpa2VcIiwgXCJlZGl0b3JUYWJsZVwiLCBcImVkaXRvclVuZGVybGluZVwiLCBcImVkaXRvclVuZG9cIiwgXCJlZGl0b3JVbm9yZGVyZWRMaXN0XCIsIFwiZW1haWxcIiwgXCJlbXB0eVwiLCBcImVtc0FwcFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibW9iaWxlXCIsIFwibW9uaXRvcmluZ0FwcFwiLCBcIm1vb25cIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFwZXJDbGlwXCIsIFwicGFydGlhbFwiLCBcInBhdXNlXCIsIFwicGF5bWVudFwiLCBcInBlbmNpbFwiLCBcInBlcmNlbnRcIiwgXCJwaW5cIiwgXCJwaW5GaWxsZWRcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBsYXlcIiwgXCJwbGF5RmlsbGVkXCIsIFwicGx1c1wiLCBcInBsdXNJbkNpcmNsZVwiLCBcInBsdXNJbkNpcmNsZUZpbGxlZFwiLCBcInBvcG91dFwiLCBcInB1c2hcIiwgXCJxdWVzdGlvbkluQ2lyY2xlXCIsIFwicXVvdGVcIiwgXCJyZWNlbnRseVZpZXdlZEFwcFwiLCBcInJlZnJlc2hcIiwgXCJyZWdyZXNzaW9uSm9iXCIsIFwicmVwb3J0ZXJcIiwgXCJyZXBvcnRpbmdBcHBcIiwgXCJyZXR1cm5LZXlcIiwgXCJzYXZlXCIsIFwic2F2ZWRPYmplY3RzQXBwXCIsIFwic2NhbGVcIiwgXCJzZWFyY2hcIiwgXCJzZWFyY2hQcm9maWxlckFwcFwiLCBcInNlY3VyaXR5QW5hbHl0aWNzQXBwXCIsIFwic2VjdXJpdHlBcHBcIiwgXCJzZWN1cml0eVNpZ25hbFwiLCBcInNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWRcIiwgXCJzZWN1cml0eVNpZ25hbFJlc29sdmVkXCIsIFwic2Vzc2lvblZpZXdlclwiLCBcInNoYXJkXCIsIFwic2hhcmVcIiwgXCJzbm93Zmxha2VcIiwgXCJzb3J0RG93blwiLCBcInNvcnRMZWZ0XCIsIFwic29ydFJpZ2h0XCIsIFwic29ydFVwXCIsIFwic29ydGFibGVcIiwgXCJzcGFjZXNBcHBcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EZW5zZVZlY3RvclwiLCBcInRva2VuRWxlbWVudFwiLCBcInRva2VuRW51bVwiLCBcInRva2VuRW51bU1lbWJlclwiLCBcInRva2VuRXZlbnRcIiwgXCJ0b2tlbkV4Y2VwdGlvblwiLCBcInRva2VuRmllbGRcIiwgXCJ0b2tlbkZpbGVcIiwgXCJ0b2tlbkZsYXR0ZW5lZFwiLCBcInRva2VuRnVuY3Rpb25cIiwgXCJ0b2tlbkdlb1wiLCBcInRva2VuSGlzdG9ncmFtXCIsIFwidG9rZW5JbnRlcmZhY2VcIiwgXCJ0b2tlbklQXCIsIFwidG9rZW5Kb2luXCIsIFwidG9rZW5LZXlcIiwgXCJ0b2tlbktleXdvcmRcIiwgXCJ0b2tlbk1ldGhvZFwiLCBcInRva2VuTWV0cmljQ291bnRlclwiLCBcInRva2VuTWV0cmljR2F1Z2VcIiwgXCJ0b2tlbk1vZHVsZVwiLCBcInRva2VuTmFtZXNwYWNlXCIsIFwidG9rZW5OZXN0ZWRcIiwgXCJ0b2tlbk51bGxcIiwgXCJ0b2tlbk51bWJlclwiLCBcInRva2VuT2JqZWN0XCIsIFwidG9rZW5PcGVyYXRvclwiLCBcInRva2VuUGFja2FnZVwiLCBcInRva2VuUGFyYW1ldGVyXCIsIFwidG9rZW5QZXJjb2xhdG9yXCIsIFwidG9rZW5Qcm9wZXJ0eVwiLCBcInRva2VuUmFuZ2VcIiwgXCJ0b2tlblJhbmtGZWF0dXJlXCIsIFwidG9rZW5SYW5rRmVhdHVyZXNcIiwgXCJ0b2tlblJlcG9cIiwgXCJ0b2tlblNlYXJjaFR5cGVcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkXSksXG5cbiAgLyoqXG4gICAgICogQ2FuIG9ubHkgYmUgb25lIHNpZGUgYGxlZnRgIG9yIGByaWdodGBcbiAgICAgKi9cbiAgaWNvblNpZGU6IFByb3BUeXBlcy5vbmVPZihbXCJsZWZ0XCIsIFwicmlnaHRcIl0pLFxuXG4gIC8qKlxuICAgICAqIE9iamVjdCBvZiBwcm9wcyBwYXNzZWQgdG8gdGhlIDxzcGFuLz4gd3JhcHBpbmcgdGhlIGNvbnRlbnQncyB0ZXh0IChvbmx5IGlmIHRoZSBjaGlsZHJlbiBpcyBhIGBzdHJpbmdgKVxuICAgICAqIEl0IGRvZXNuJ3QgYXBwbHkgdG8gdGhlIGljb24uXG4gICAgICovXG4gIHRleHRQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHJlZjogUHJvcFR5cGVzLmFueSxcbiAgICBcImRhdGEtdGV4dFwiOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLFxuICBpY29uU2l6ZTogUHJvcFR5cGVzLm9uZU9mKFtcInNcIiwgXCJtXCJdKSxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nXG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwiaWNvblR5cGVcIiwgXCJpY29uU2l6ZVwiLCBcImNvbG9yXCIsIFwiaXNEaXNhYmxlZFwiLCBcImRpc2FibGVkXCIsIFwiaHJlZlwiLCBcInR5cGVcIiwgXCJkaXNwbGF5XCIsIFwidGFyZ2V0XCIsIFwicmVsXCIsIFwic2l6ZVwiLCBcImJ1dHRvblJlZlwiLCBcImlzU2VsZWN0ZWRcIiwgXCJpc0xvYWRpbmdcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBnZXRTZWN1cmVSZWxGb3JUYXJnZXQgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBrZXlzT2YgfSBmcm9tICcuLi8uLi9jb21tb24nO1xuaW1wb3J0IHsgRXVpSWNvbiB9IGZyb20gJy4uLy4uL2ljb24nO1xuaW1wb3J0IHsgRXVpTG9hZGluZ1NwaW5uZXIgfSBmcm9tICcuLi8uLi9sb2FkaW5nJztcbmltcG9ydCB7IHZhbGlkYXRlSHJlZiB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3NlY3VyaXR5L2hyZWZfdmFsaWRhdG9yJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgZGlzcGxheVRvQ2xhc3NOYW1lTWFwID0ge1xuICBiYXNlOiBudWxsLFxuICBlbXB0eTogJ2V1aUJ1dHRvbkljb24tLWVtcHR5JyxcbiAgZmlsbDogJ2V1aUJ1dHRvbkljb24tLWZpbGwnXG59O1xuZXhwb3J0IHZhciBESVNQTEFZUyA9IGtleXNPZihkaXNwbGF5VG9DbGFzc05hbWVNYXApO1xudmFyIGNvbG9yVG9DbGFzc05hbWVNYXAgPSB7XG4gIGFjY2VudDogJ2V1aUJ1dHRvbkljb24tLWFjY2VudCcsXG4gIGRhbmdlcjogJ2V1aUJ1dHRvbkljb24tLWRhbmdlcicsXG4gIGdob3N0OiAnZXVpQnV0dG9uSWNvbi0tZ2hvc3QnLFxuICBwcmltYXJ5OiAnZXVpQnV0dG9uSWNvbi0tcHJpbWFyeScsXG4gIHN1Y2Nlc3M6ICdldWlCdXR0b25JY29uLS1zdWNjZXNzJyxcbiAgdGV4dDogJ2V1aUJ1dHRvbkljb24tLXRleHQnLFxuICB3YXJuaW5nOiAnZXVpQnV0dG9uSWNvbi0td2FybmluZydcbn07XG5leHBvcnQgdmFyIENPTE9SUyA9IGtleXNPZihjb2xvclRvQ2xhc3NOYW1lTWFwKTtcbnZhciBzaXplVG9DbGFzc05hbWVNYXAgPSB7XG4gIHhzOiAnZXVpQnV0dG9uSWNvbi0teFNtYWxsJyxcbiAgczogJ2V1aUJ1dHRvbkljb24tLXNtYWxsJyxcbiAgbTogJ2V1aUJ1dHRvbkljb24tLW1lZGl1bSdcbn07XG5leHBvcnQgdmFyIFNJWkVTID0ga2V5c09mKHNpemVUb0NsYXNzTmFtZU1hcCk7XG5leHBvcnQgdmFyIEV1aUJ1dHRvbkljb24gPSBmdW5jdGlvbiBFdWlCdXR0b25JY29uKF9yZWYpIHtcbiAgdmFyIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgaWNvblR5cGUgPSBfcmVmLmljb25UeXBlLFxuICAgICAgX3JlZiRpY29uU2l6ZSA9IF9yZWYuaWNvblNpemUsXG4gICAgICBpY29uU2l6ZSA9IF9yZWYkaWNvblNpemUgPT09IHZvaWQgMCA/ICdtJyA6IF9yZWYkaWNvblNpemUsXG4gICAgICBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ3ByaW1hcnknIDogX3JlZiRjb2xvcixcbiAgICAgIF9pc0Rpc2FibGVkID0gX3JlZi5pc0Rpc2FibGVkLFxuICAgICAgZGlzYWJsZWQgPSBfcmVmLmRpc2FibGVkLFxuICAgICAgaHJlZiA9IF9yZWYuaHJlZixcbiAgICAgIF9yZWYkdHlwZSA9IF9yZWYudHlwZSxcbiAgICAgIHR5cGUgPSBfcmVmJHR5cGUgPT09IHZvaWQgMCA/ICdidXR0b24nIDogX3JlZiR0eXBlLFxuICAgICAgX3JlZiRkaXNwbGF5ID0gX3JlZi5kaXNwbGF5LFxuICAgICAgZGlzcGxheSA9IF9yZWYkZGlzcGxheSA9PT0gdm9pZCAwID8gJ2VtcHR5JyA6IF9yZWYkZGlzcGxheSxcbiAgICAgIHRhcmdldCA9IF9yZWYudGFyZ2V0LFxuICAgICAgcmVsID0gX3JlZi5yZWwsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAneHMnIDogX3JlZiRzaXplLFxuICAgICAgYnV0dG9uUmVmID0gX3JlZi5idXR0b25SZWYsXG4gICAgICBpc1NlbGVjdGVkID0gX3JlZi5pc1NlbGVjdGVkLFxuICAgICAgaXNMb2FkaW5nID0gX3JlZi5pc0xvYWRpbmcsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGlzSHJlZlZhbGlkID0gIWhyZWYgfHwgdmFsaWRhdGVIcmVmKGhyZWYpO1xuICB2YXIgaXNEaXNhYmxlZCA9IF9pc0Rpc2FibGVkIHx8IGRpc2FibGVkIHx8ICFpc0hyZWZWYWxpZCB8fCBpc0xvYWRpbmc7XG4gIHZhciBhcmlhSGlkZGVuID0gcmVzdFsnYXJpYS1oaWRkZW4nXTtcbiAgdmFyIGlzQXJpYUhpZGRlbiA9IGFyaWFIaWRkZW4gPT09ICd0cnVlJyB8fCBhcmlhSGlkZGVuID09PSB0cnVlO1xuXG4gIGlmICghcmVzdFsnYXJpYS1sYWJlbCddICYmICFyZXN0WydhcmlhLWxhYmVsbGVkYnknXSAmJiAhaXNBcmlhSGlkZGVuKSB7XG4gICAgY29uc29sZS53YXJuKFwiRXVpQnV0dG9uSWNvbiByZXF1aXJlcyBhcmlhLWxhYmVsIG9yIGFyaWEtbGFiZWxsZWRieSB0byBiZSBzcGVjaWZpZWQgYmVjYXVzZSBpY29uLW9ubHlcXG4gICAgICBidXR0b25zIGFyZSBzY3JlZW4tcmVhZGVyLWluYWNjZXNzaWJsZSB3aXRob3V0IHRoZW0uXCIpO1xuICB9XG5cbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlCdXR0b25JY29uJywge1xuICAgICdldWlCdXR0b25JY29uLWlzRGlzYWJsZWQnOiBpc0Rpc2FibGVkXG4gIH0sIGNvbG9yVG9DbGFzc05hbWVNYXBbY29sb3JdLCBkaXNwbGF5ICYmIGRpc3BsYXlUb0NsYXNzTmFtZU1hcFtkaXNwbGF5XSwgc2l6ZSAmJiBzaXplVG9DbGFzc05hbWVNYXBbc2l6ZV0sIGNsYXNzTmFtZSk7IC8vIEFkZCBhbiBpY29uIHRvIHRoZSBidXR0b24gaWYgb25lIGV4aXN0cy5cblxuICB2YXIgYnV0dG9uSWNvbjtcblxuICBpZiAoaWNvblR5cGUgJiYgIWlzTG9hZGluZykge1xuICAgIGJ1dHRvbkljb24gPSBfX19FbW90aW9uSlNYKEV1aUljb24sIHtcbiAgICAgIGNsYXNzTmFtZTogXCJldWlCdXR0b25JY29uX19pY29uXCIsXG4gICAgICB0eXBlOiBpY29uVHlwZSxcbiAgICAgIHNpemU6IGljb25TaXplLFxuICAgICAgXCJhcmlhLWhpZGRlblwiOiBcInRydWVcIixcbiAgICAgIGNvbG9yOiBcImluaGVyaXRcIiAvLyBmb3JjZXMgdGhlIGljb24gdG8gaW5oZXJpdCBpdHMgcGFyZW50IGNvbG9yXG5cbiAgICB9KTtcbiAgfSAvLyBgb3JpZ2luYWxgIHNpemUgZG9lc24ndCBleGlzdCBpbiBgRXVpTG9hZGluZ1NwaW5uZXJgXG4gIC8vIHdoZW4gdGhlIGBpY29uU2l6ZWAgaXMgYG9yaWdpbmFsYCB3ZSBkb24ndCBwYXNzIGFueSBzaXplIHRvIHRoZSBgRXVpTG9hZGluZ1NwaW5uZXJgXG4gIC8vIHNvIGl0IGdldHMgdGhlIGRlZmF1bHQgc2l6ZVxuXG5cbiAgdmFyIGxvYWRpbmdTaXplID0gaWNvblNpemUgPT09ICdvcmlnaW5hbCcgPyB1bmRlZmluZWQgOiBpY29uU2l6ZTtcblxuICBpZiAoaWNvblR5cGUgJiYgaXNMb2FkaW5nKSB7XG4gICAgYnV0dG9uSWNvbiA9IF9fX0Vtb3Rpb25KU1goRXVpTG9hZGluZ1NwaW5uZXIsIHtcbiAgICAgIHNpemU6IGxvYWRpbmdTaXplXG4gICAgfSk7XG4gIH0gLy8gPGE+IGVsZW1lbnRzIGRvbid0IHJlc3BlY3QgdGhlIGBkaXNhYmxlZGAgYXR0cmlidXRlLiBTbyBpZiB3ZSdyZSBkaXNhYmxlZCwgd2UnbGwganVzdCBwcmV0ZW5kXG4gIC8vIHRoaXMgaXMgYSBidXR0b24gYW5kIHBpZ2d5YmFjayBvZmYgaXRzIGRpc2FibGVkIHN0eWxlcy5cblxuXG4gIGlmIChocmVmICYmICFpc0Rpc2FibGVkKSB7XG4gICAgdmFyIHNlY3VyZVJlbCA9IGdldFNlY3VyZVJlbEZvclRhcmdldCh7XG4gICAgICBocmVmOiBocmVmLFxuICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICByZWw6IHJlbFxuICAgIH0pO1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwiYVwiLCBfZXh0ZW5kcyh7XG4gICAgICB0YWJJbmRleDogaXNBcmlhSGlkZGVuID8gLTEgOiB1bmRlZmluZWQsXG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICBocmVmOiBocmVmLFxuICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICByZWw6IHNlY3VyZVJlbCxcbiAgICAgIHJlZjogYnV0dG9uUmVmXG4gICAgfSwgcmVzdCksIGJ1dHRvbkljb24pO1xuICB9XG5cbiAgdmFyIGJ1dHRvblR5cGU7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiYnV0dG9uXCIsIF9leHRlbmRzKHtcbiAgICB0YWJJbmRleDogaXNBcmlhSGlkZGVuID8gLTEgOiB1bmRlZmluZWQsXG4gICAgZGlzYWJsZWQ6IGlzRGlzYWJsZWQsXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIFwiYXJpYS1wcmVzc2VkXCI6IGlzU2VsZWN0ZWQsXG4gICAgdHlwZTogdHlwZSxcbiAgICByZWY6IGJ1dHRvblJlZlxuICB9LCByZXN0KSwgYnV0dG9uSWNvbik7XG59O1xuRXVpQnV0dG9uSWNvbi5wcm9wVHlwZXMgPSB7XG4gIHR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5vbmVPZihbXCJzdWJtaXRcIiwgXCJyZXNldFwiLCBcImJ1dHRvblwiXSldKSxcbiAgaHJlZjogUHJvcFR5cGVzLnN0cmluZyxcbiAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG4gIGljb25UeXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbGVydFwiLCBcImFuYWx5emVFdmVudFwiLCBcImFubm90YXRpb25cIiwgXCJhcG1BcHBcIiwgXCJhcG1UcmFjZVwiLCBcImFwcFNlYXJjaEFwcFwiLCBcImFwcHNcIiwgXCJhcnJvd0Rvd25cIiwgXCJhcnJvd0xlZnRcIiwgXCJhcnJvd1JpZ2h0XCIsIFwiYXJyb3dVcFwiLCBcImFycm93U3RhcnRcIiwgXCJhcnJvd0VuZFwiLCBcImFzdGVyaXNrXCIsIFwiYXVkaXRiZWF0QXBwXCIsIFwiYmVha2VyXCIsIFwiYmVsbFwiLCBcImJlbGxTbGFzaFwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGVja1wiLCBcImNoZWNrSW5DaXJjbGVGaWxsZWRcIiwgXCJjaGVlclwiLCBcImNsYXNzaWZpY2F0aW9uSm9iXCIsIFwiY2xvY2tcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkFDaXJjbGVGaWxsZWRcIiwgXCJjcm9zc2hhaXJzXCIsIFwiY3VycmVuY3lcIiwgXCJjdXRcIiwgXCJkYXNoYm9hcmRBcHBcIiwgXCJkYXRhVmlzdWFsaXplclwiLCBcImRhdGFiYXNlXCIsIFwiZGVza3RvcFwiLCBcImRldlRvb2xzQXBwXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZXFsXCIsIFwiZXJhc2VyXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZsYWdcIiwgXCJmbGVldEFwcFwiLCBcImZvbGRcIiwgXCJmb2xkZXJDaGVja1wiLCBcImZvbGRlckNsb3NlZFwiLCBcImZvbGRlckV4Y2xhbWF0aW9uXCIsIFwiZm9sZGVyT3BlblwiLCBcImZyYW1lTmV4dFwiLCBcImZyYW1lUHJldmlvdXNcIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFNjcmVlbkV4aXRcIiwgXCJmdW5jdGlvblwiLCBcImdlYXJcIiwgXCJnaXNBcHBcIiwgXCJnbGFzc2VzXCIsIFwiZ2xvYmVcIiwgXCJncmFiXCIsIFwiZ3JhYkhvcml6b250YWxcIiwgXCJncmFwaEFwcFwiLCBcImdyaWRcIiwgXCJncm9rQXBwXCIsIFwiaGVhcnRcIiwgXCJoZWFydGJlYXRBcHBcIiwgXCJoZWF0bWFwXCIsIFwiaGVscFwiLCBcImhvbWVcIiwgXCJpSW5DaXJjbGVcIiwgXCJpbWFnZVwiLCBcImltcG9ydEFjdGlvblwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5wdXRPdXRwdXRcIiwgXCJpbnNwZWN0XCIsIFwiaW52ZXJ0XCIsIFwiaXBcIiwgXCJrZXlib2FyZFwiLCBcImtxbEZpZWxkXCIsIFwia3FsRnVuY3Rpb25cIiwgXCJrcWxPcGVyYW5kXCIsIFwia3FsU2VsZWN0b3JcIiwgXCJrcWxWYWx1ZVwiLCBcImt1YmVybmV0ZXNOb2RlXCIsIFwia3ViZXJuZXRlc1BvZFwiLCBcImxheWVyc1wiLCBcImxlbnNBcHBcIiwgXCJsZXR0ZXJpbmdcIiwgXCJsaW5lRGFzaGVkXCIsIFwibGluZURvdHRlZFwiLCBcImxpbmVTb2xpZFwiLCBcImxpbmtcIiwgXCJsaXN0XCIsIFwibGlzdEFkZFwiLCBcImxvY2tcIiwgXCJsb2NrT3BlblwiLCBcImxvZ29BV1NcIiwgXCJsb2dvQVdTTW9ub1wiLCBcImxvZ29BZXJvc3Bpa2VcIiwgXCJsb2dvQXBhY2hlXCIsIFwibG9nb0FwcFNlYXJjaFwiLCBcImxvZ29BenVyZVwiLCBcImxvZ29BenVyZU1vbm9cIiwgXCJsb2dvQmVhdHNcIiwgXCJsb2dvQnVzaW5lc3NBbmFseXRpY3NcIiwgXCJsb2dvQ2VwaFwiLCBcImxvZ29DbG91ZFwiLCBcImxvZ29DbG91ZEVudGVycHJpc2VcIiwgXCJsb2dvQ29kZVwiLCBcImxvZ29Db2Rlc2FuZGJveFwiLCBcImxvZ29Db3VjaGJhc2VcIiwgXCJsb2dvRG9ja2VyXCIsIFwibG9nb0Ryb3B3aXphcmRcIiwgXCJsb2dvRWxhc3RpY1wiLCBcImxvZ29FbGFzdGljU3RhY2tcIiwgXCJsb2dvRWxhc3RpY3NlYXJjaFwiLCBcImxvZ29FbnRlcnByaXNlU2VhcmNoXCIsIFwibG9nb0V0Y2RcIiwgXCJsb2dvR0NQXCIsIFwibG9nb0dDUE1vbm9cIiwgXCJsb2dvR2l0aHViXCIsIFwibG9nb0dtYWlsXCIsIFwibG9nb0dvbGFuZ1wiLCBcImxvZ29Hb29nbGVHXCIsIFwibG9nb0hBcHJveHlcIiwgXCJsb2dvSUJNXCIsIFwibG9nb0lCTU1vbm9cIiwgXCJsb2dvS2Fma2FcIiwgXCJsb2dvS2liYW5hXCIsIFwibG9nb0t1YmVybmV0ZXNcIiwgXCJsb2dvTG9nZ2luZ1wiLCBcImxvZ29Mb2dzdGFzaFwiLCBcImxvZ29NYXBzXCIsIFwibG9nb01lbWNhY2hlZFwiLCBcImxvZ29NZXRyaWNzXCIsIFwibG9nb01vbmdvZGJcIiwgXCJsb2dvTXlTUUxcIiwgXCJsb2dvTmdpbnhcIiwgXCJsb2dvT2JzZXJ2YWJpbGl0eVwiLCBcImxvZ29Pc3F1ZXJ5XCIsIFwibG9nb1BocFwiLCBcImxvZ29Qb3N0Z3Jlc1wiLCBcImxvZ29Qcm9tZXRoZXVzXCIsIFwibG9nb1JhYmJpdG1xXCIsIFwibG9nb1JlZGlzXCIsIFwibG9nb1NlY3VyaXR5XCIsIFwibG9nb1NpdGVTZWFyY2hcIiwgXCJsb2dvU2tldGNoXCIsIFwibG9nb1NsYWNrXCIsIFwibG9nb1VwdGltZVwiLCBcImxvZ29XZWJob29rXCIsIFwibG9nb1dpbmRvd3NcIiwgXCJsb2dvV29ya3BsYWNlU2VhcmNoXCIsIFwibG9nc0FwcFwiLCBcImxvZ3N0YXNoRmlsdGVyXCIsIFwibG9nc3Rhc2hJZlwiLCBcImxvZ3N0YXNoSW5wdXRcIiwgXCJsb2dzdGFzaE91dHB1dFwiLCBcImxvZ3N0YXNoUXVldWVcIiwgXCJtYWNoaW5lTGVhcm5pbmdBcHBcIiwgXCJtYWduZXRcIiwgXCJtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uXCIsIFwibWFnbmlmeVdpdGhNaW51c1wiLCBcIm1hZ25pZnlXaXRoUGx1c1wiLCBcIm1hbmFnZW1lbnRBcHBcIiwgXCJtYXBNYXJrZXJcIiwgXCJtZW1vcnlcIiwgXCJtZW51XCIsIFwibWVudURvd25cIiwgXCJtZW51TGVmdFwiLCBcIm1lbnVSaWdodFwiLCBcIm1lbnVVcFwiLCBcIm1lcmdlXCIsIFwibWV0cmljYmVhdEFwcFwiLCBcIm1ldHJpY3NBcHBcIiwgXCJtaW5pbWl6ZVwiLCBcIm1pbnVzXCIsIFwibWludXNJbkNpcmNsZVwiLCBcIm1pbnVzSW5DaXJjbGVGaWxsZWRcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5vZGVcIiwgXCJub3RlYm9va0FwcFwiLCBcIm51bWJlclwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIiwgXCJvdXRsaWVyRGV0ZWN0aW9uSm9iXCIsIFwicGFja2FnZVwiLCBcInBhY2tldGJlYXRBcHBcIiwgXCJwYWdlU2VsZWN0XCIsIFwicGFnZXNTZWxlY3RcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVsaW5lQXBwXCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNub3dmbGFrZVwiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc0FwcFwiLCBcInNxbEFwcFwiLCBcInN0YXJFbXB0eVwiLCBcInN0YXJFbXB0eVNwYWNlXCIsIFwic3RhckZpbGxlZFwiLCBcInN0YXJGaWxsZWRTcGFjZVwiLCBcInN0YXJNaW51c0VtcHR5XCIsIFwic3Rhck1pbnVzRmlsbGVkXCIsIFwic3RhclBsdXNFbXB0eVwiLCBcInN0YXJQbHVzRmlsbGVkXCIsIFwic3RhdHNcIiwgXCJzdG9wXCIsIFwic3RvcEZpbGxlZFwiLCBcInN0b3BTbGFzaFwiLCBcInN0b3JhZ2VcIiwgXCJzdHJpbmdcIiwgXCJzdWJtb2R1bGVcIiwgXCJzdW5cIiwgXCJzd2F0Y2hJbnB1dFwiLCBcInN5bWxpbmtcIiwgXCJ0YWJsZURlbnNpdHlDb21wYWN0XCIsIFwidGFibGVEZW5zaXR5RXhwYW5kZWRcIiwgXCJ0YWJsZURlbnNpdHlOb3JtYWxcIiwgXCJ0YWJsZU9mQ29udGVudHNcIiwgXCJ0YWdcIiwgXCJ0ZWFyXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJ0aW1lbGluZVwiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFzaFwiLCBcInVuZm9sZFwiLCBcInVubGlua1wiLCBcInVwZ3JhZGVBc3Npc3RhbnRBcHBcIiwgXCJ1cHRpbWVBcHBcIiwgXCJ1c2VyXCIsIFwidXNlckF2YXRhclwiLCBcInVzZXJzXCIsIFwidXNlcnNSb2xlc0FwcFwiLCBcInZlY3RvclwiLCBcInZpZGVvUGxheWVyXCIsIFwidmlzQXJlYVwiLCBcInZpc0FyZWFTdGFja2VkXCIsIFwidmlzQmFySG9yaXpvbnRhbFwiLCBcInZpc0Jhckhvcml6b250YWxTdGFja2VkXCIsIFwidmlzQmFyVmVydGljYWxcIiwgXCJ2aXNCYXJWZXJ0aWNhbFN0YWNrZWRcIiwgXCJ2aXNHYXVnZVwiLCBcInZpc0dvYWxcIiwgXCJ2aXNMaW5lXCIsIFwidmlzTWFwQ29vcmRpbmF0ZVwiLCBcInZpc01hcFJlZ2lvblwiLCBcInZpc01ldHJpY1wiLCBcInZpc1BpZVwiLCBcInZpc1RhYmxlXCIsIFwidmlzVGFnQ2xvdWRcIiwgXCJ2aXNUZXh0XCIsIFwidmlzVGltZWxpb25cIiwgXCJ2aXNWZWdhXCIsIFwidmlzVmlzdWFsQnVpbGRlclwiLCBcInZpc3VhbGl6ZUFwcFwiLCBcIndhdGNoZXNBcHBcIiwgXCJ3b3JkV3JhcFwiLCBcIndvcmRXcmFwRGlzYWJsZWRcIiwgXCJ3b3JrcGxhY2VTZWFyY2hBcHBcIiwgXCJ3cmVuY2hcIiwgXCJ0b2tlbkFsaWFzXCIsIFwidG9rZW5Bbm5vdGF0aW9uXCIsIFwidG9rZW5BcnJheVwiLCBcInRva2VuQmluYXJ5XCIsIFwidG9rZW5Cb29sZWFuXCIsIFwidG9rZW5DbGFzc1wiLCBcInRva2VuQ29tcGxldGlvblN1Z2dlc3RlclwiLCBcInRva2VuQ29uc3RhbnRcIiwgXCJ0b2tlbkRhdGVcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2hhcGVcIiwgXCJ0b2tlblN0cmluZ1wiLCBcInRva2VuU3RydWN0XCIsIFwidG9rZW5TeW1ib2xcIiwgXCJ0b2tlblRhZ1wiLCBcInRva2VuVGV4dFwiLCBcInRva2VuVG9rZW5Db3VudFwiLCBcInRva2VuVmFyaWFibGVcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgICAqIEFueSBvZiB0aGUgbmFtZWQgY29sb3IgcGFsZXR0ZSBvcHRpb25zLlxuICAgICAqL1xuICBjb2xvcjogUHJvcFR5cGVzLm9uZU9mKFtcInByaW1hcnlcIiwgXCJhY2NlbnRcIiwgXCJzdWNjZXNzXCIsIFwid2FybmluZ1wiLCBcImRhbmdlclwiLCBcImdob3N0XCIsIFwidGV4dFwiXSksXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxsZWRieVwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBpc0Rpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBPdmVyYWxsIHNpemUgb2YgYnV0dG9uLlxuICAgICAqIE1hdGNoZXMgdGhlIHNpemVzIG9mIG90aGVyIEV1aUJ1dHRvbnNcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBPdmVyYWxsIHNpemUgb2YgYnV0dG9uLlxuICAgICAqIE1hdGNoZXMgdGhlIHNpemVzIG9mIG90aGVyIEV1aUJ1dHRvbnNcbiAgICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mKFtcInhzXCIsIFwic1wiLCBcIm1cIl0pLFxuXG4gIC8qKlxuICAgICAqIFNpemUgb2YgdGhlIGljb24gb25seS5cbiAgICAgKiBUaGlzIHdpbGwgbm90IGFmZmVjdCB0aGUgb3ZlcmFsbCBzaXplIG9mIHRoZSBidXR0b25cbiAgICAgKi9cbiAgaWNvblNpemU6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogQXBwbGllcyB0aGUgYm9vbGVhbiBzdGF0ZSBhcyB0aGUgYGFyaWEtcHJlc3NlZGAgcHJvcGVydHkgdG8gY3JlYXRlIGEgdG9nZ2xlIGJ1dHRvbi5cbiAgICAgKiAqT25seSB1c2Ugd2hlbiB0aGUgcmVhZGFibGUgdGV4dCBkb2VzIG5vdCBjaGFuZ2UgYmV0d2VlbiBzdGF0ZXMuKlxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIEFwcGxpZXMgdGhlIGJvb2xlYW4gc3RhdGUgYXMgdGhlIGBhcmlhLXByZXNzZWRgIHByb3BlcnR5IHRvIGNyZWF0ZSBhIHRvZ2dsZSBidXR0b24uXG4gICAgICogKk9ubHkgdXNlIHdoZW4gdGhlIHJlYWRhYmxlIHRleHQgZG9lcyBub3QgY2hhbmdlIGJldHdlZW4gc3RhdGVzLipcbiAgICAgKi9cbiAgaXNTZWxlY3RlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogU2V0cyB0aGUgZGlzcGxheSBzdHlsZSBmb3IgbWF0Y2hpbmcgb3RoZXIgRXVpQnV0dG9uIHR5cGVzLlxuICAgICAqIGBiYXNlYCBpcyBlcXVpdmFsZW50IHRvIGEgdHlwaWNhbCBFdWlCdXR0b25cbiAgICAgKiBgZmlsbGAgaXMgZXF1aXZhbGVudCB0byBhIGZpbGxlZCBFdWlCdXR0b25cbiAgICAgKiBgZW1wdHlgIChkZWZhdWx0KSBpcyBlcXVpdmFsZW50IHRvIGFuIEV1aUJ1dHRvbkVtcHR5XG4gICAgICovXG5cbiAgLyoqXG4gICAgICogU2V0cyB0aGUgZGlzcGxheSBzdHlsZSBmb3IgbWF0Y2hpbmcgb3RoZXIgRXVpQnV0dG9uIHR5cGVzLlxuICAgICAqIGBiYXNlYCBpcyBlcXVpdmFsZW50IHRvIGEgdHlwaWNhbCBFdWlCdXR0b25cbiAgICAgKiBgZmlsbGAgaXMgZXF1aXZhbGVudCB0byBhIGZpbGxlZCBFdWlCdXR0b25cbiAgICAgKiBgZW1wdHlgIChkZWZhdWx0KSBpcyBlcXVpdmFsZW50IHRvIGFuIEV1aUJ1dHRvbkVtcHR5XG4gICAgICovXG4gIGRpc3BsYXk6IFByb3BUeXBlcy5vbmVPZihbXCJiYXNlXCIsIFwiZW1wdHlcIiwgXCJmaWxsXCJdKSxcblxuICAvKipcbiAgICAgKiBEaXNhYmxlcyB0aGUgYnV0dG9uIGFuZCBjaGFuZ2VzIHRoZSBpY29uIHRvIGEgbG9hZGluZyBzcGlubmVyXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogRGlzYWJsZXMgdGhlIGJ1dHRvbiBhbmQgY2hhbmdlcyB0aGUgaWNvbiB0byBhIGxvYWRpbmcgc3Bpbm5lclxuICAgICAqL1xuICBpc0xvYWRpbmc6IFByb3BUeXBlcy5ib29sLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgYnV0dG9uUmVmOiBQcm9wVHlwZXMuYW55XG59OyIsICJmdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7IHZhciBfaSA9IGFyciA9PSBudWxsID8gbnVsbCA6IHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgYXJyW1N5bWJvbC5pdGVyYXRvcl0gfHwgYXJyW1wiQEBpdGVyYXRvclwiXTsgaWYgKF9pID09IG51bGwpIHJldHVybjsgdmFyIF9hcnIgPSBbXTsgdmFyIF9uID0gdHJ1ZTsgdmFyIF9kID0gZmFsc2U7IHZhciBfcywgX2U7IHRyeSB7IGZvciAoX2kgPSBfaS5jYWxsKGFycik7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHsgX2Fyci5wdXNoKF9zLnZhbHVlKTsgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOyB9IH0gY2F0Y2ggKGVycikgeyBfZCA9IHRydWU7IF9lID0gZXJyOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7IH0gZmluYWxseSB7IGlmIChfZCkgdGhyb3cgX2U7IH0gfSByZXR1cm4gX2FycjsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUlubmVyVGV4dChpbm5lclRleHRGYWxsYmFjaykge1xuICB2YXIgX3VzZVN0YXRlID0gdXNlU3RhdGUobnVsbCksXG4gICAgICBfdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlLCAyKSxcbiAgICAgIHJlZiA9IF91c2VTdGF0ZTJbMF0sXG4gICAgICBzZXRSZWYgPSBfdXNlU3RhdGUyWzFdO1xuXG4gIHZhciBfdXNlU3RhdGUzID0gdXNlU3RhdGUoaW5uZXJUZXh0RmFsbGJhY2spLFxuICAgICAgX3VzZVN0YXRlNCA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZTMsIDIpLFxuICAgICAgaW5uZXJUZXh0ID0gX3VzZVN0YXRlNFswXSxcbiAgICAgIHNldElubmVyVGV4dCA9IF91c2VTdGF0ZTRbMV07XG5cbiAgdmFyIHVwZGF0ZUlubmVyVGV4dCA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgaWYgKCFub2RlKSByZXR1cm47XG4gICAgc2V0SW5uZXJUZXh0KCAvLyBDaGVjayBmb3IgYGlubmVyVGV4dGAgaW1wbGVtZW50YXRpb24gcmF0aGVyIHRoYW4gYSBzaW1wbGUgT1IgY2hlY2tcbiAgICAvLyBiZWNhdXNlIGluIHJlYWwgY2FzZXMgdGhlIHJlc3VsdCBvZiBgaW5uZXJUZXh0YCBjb3VsZCBjb3JyZWN0bHkgYmUgYG51bGxgXG4gICAgLy8gd2hpbGUgdGhlIHJlc3VsdCBvZiBgdGV4dENvbnRlbnRgIGNvdWxkIGNvcnJlY3RseSBiZSBub24tYG51bGxgIGR1ZSB0b1xuICAgIC8vIGRpZmZlcmluZyByZWxpYW5jZSBvbiBicm93c2VyIGxheW91dCBjYWxjdWxhdGlvbnMuXG4gICAgLy8gV2UgcHJlZmVyIHRoZSByZXN1bHQgb2YgYGlubmVyVGV4dGAsIGlmIGF2YWlsYWJsZS5cbiAgICAnaW5uZXJUZXh0JyBpbiBub2RlID8gbm9kZS5pbm5lclRleHQgOiBub2RlLnRleHRDb250ZW50IHx8IGlubmVyVGV4dEZhbGxiYWNrKTtcbiAgfSwgW2lubmVyVGV4dEZhbGxiYWNrXSk7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24gKG11dGF0aW9uc0xpc3QpIHtcbiAgICAgIGlmIChtdXRhdGlvbnNMaXN0Lmxlbmd0aCkgdXBkYXRlSW5uZXJUZXh0KHJlZik7XG4gICAgfSk7XG5cbiAgICBpZiAocmVmKSB7XG4gICAgICB1cGRhdGVJbm5lclRleHQocmVmKTtcbiAgICAgIG9ic2VydmVyLm9ic2VydmUocmVmLCB7XG4gICAgICAgIGNoYXJhY3RlckRhdGE6IHRydWUsXG4gICAgICAgIHN1YnRyZWU6IHRydWUsXG4gICAgICAgIGNoaWxkTGlzdDogdHJ1ZVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICB9O1xuICB9LCBbcmVmLCB1cGRhdGVJbm5lclRleHRdKTtcbiAgcmV0dXJuIFtzZXRSZWYsIGlubmVyVGV4dF07XG59XG5leHBvcnQgdmFyIEV1aUlubmVyVGV4dCA9IGZ1bmN0aW9uIEV1aUlubmVyVGV4dChfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBmYWxsYmFjayA9IF9yZWYuZmFsbGJhY2s7XG5cbiAgdmFyIF91c2VJbm5lclRleHQgPSB1c2VJbm5lclRleHQoZmFsbGJhY2spLFxuICAgICAgX3VzZUlubmVyVGV4dDIgPSBfc2xpY2VkVG9BcnJheShfdXNlSW5uZXJUZXh0LCAyKSxcbiAgICAgIHJlZiA9IF91c2VJbm5lclRleHQyWzBdLFxuICAgICAgaW5uZXJUZXh0ID0gX3VzZUlubmVyVGV4dDJbMV07XG5cbiAgcmV0dXJuIGNoaWxkcmVuKHJlZiwgaW5uZXJUZXh0KTtcbn07XG5FdWlJbm5lclRleHQucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICAgKiBSZWFjdE5vZGUgdG8gcmVuZGVyIGFzIHRoaXMgY29tcG9uZW50J3MgY29udGVudFxuICAgICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgZmFsbGJhY2s6IFByb3BUeXBlcy5zdHJpbmdcbn07IiwgImltcG9ydCB7IENvbXBvbmVudCwgY3JlYXRlRWxlbWVudCB9IGZyb20gJ3JlYWN0JztcblxuLyoqXG4gKiBEZXRlY3QgRWxlbWVudCBSZXNpemUuXG4gKiBodHRwczovL2dpdGh1Yi5jb20vc2RlY2ltYS9qYXZhc2NyaXB0LWRldGVjdC1lbGVtZW50LXJlc2l6ZVxuICogU2ViYXN0aWFuIERlY2ltYVxuICpcbiAqIEZvcmtlZCBmcm9tIHZlcnNpb24gMC41LjM7IGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcgbW9kaWZpY2F0aW9uczpcbiAqIDEpIEd1YXJkIGFnYWluc3QgdW5zYWZlICd3aW5kb3cnIGFuZCAnZG9jdW1lbnQnIHJlZmVyZW5jZXMgKHRvIHN1cHBvcnQgU1NSKS5cbiAqIDIpIERlZmVyIGluaXRpYWxpemF0aW9uIGNvZGUgdmlhIGEgdG9wLWxldmVsIGZ1bmN0aW9uIHdyYXBwZXIgKHRvIHN1cHBvcnQgU1NSKS5cbiAqIDMpIEF2b2lkIHVubmVjZXNzYXJ5IHJlZmxvd3MgYnkgbm90IG1lYXN1cmluZyBzaXplIGZvciBzY3JvbGwgZXZlbnRzIGJ1YmJsaW5nIGZyb20gY2hpbGRyZW4uXG4gKiA0KSBBZGQgbm9uY2UgZm9yIHN0eWxlIGVsZW1lbnQuXG4gKiA1KSBVc2UgJ2V4cG9ydCcgc3RhdGVtZW50IG92ZXIgJ21vZHVsZS5leHBvcnRzJyBhc3NpZ25tZW50XG4gKiovXG5cbi8vIENoZWNrIGBkb2N1bWVudGAgYW5kIGB3aW5kb3dgIGluIGNhc2Ugb2Ygc2VydmVyLXNpZGUgcmVuZGVyaW5nXG5sZXQgd2luZG93T2JqZWN0O1xuaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgd2luZG93T2JqZWN0ID0gd2luZG93O1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHNcbn0gZWxzZSBpZiAodHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFsc1xuICB3aW5kb3dPYmplY3QgPSBzZWxmO1xufSBlbHNlIHtcbiAgd2luZG93T2JqZWN0ID0gZ2xvYmFsO1xufVxubGV0IGNhbmNlbEZyYW1lID0gbnVsbDtcbmxldCByZXF1ZXN0RnJhbWUgPSBudWxsO1xuY29uc3QgVElNRU9VVF9EVVJBVElPTiA9IDIwO1xuY29uc3QgY2xlYXJUaW1lb3V0Rm4gPSB3aW5kb3dPYmplY3QuY2xlYXJUaW1lb3V0O1xuY29uc3Qgc2V0VGltZW91dEZuID0gd2luZG93T2JqZWN0LnNldFRpbWVvdXQ7XG5jb25zdCBjYW5jZWxBbmltYXRpb25GcmFtZUZuID0gd2luZG93T2JqZWN0LmNhbmNlbEFuaW1hdGlvbkZyYW1lIHx8IHdpbmRvd09iamVjdC5tb3pDYW5jZWxBbmltYXRpb25GcmFtZSB8fCB3aW5kb3dPYmplY3Qud2Via2l0Q2FuY2VsQW5pbWF0aW9uRnJhbWU7XG5jb25zdCByZXF1ZXN0QW5pbWF0aW9uRnJhbWVGbiA9IHdpbmRvd09iamVjdC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHwgd2luZG93T2JqZWN0Lm1velJlcXVlc3RBbmltYXRpb25GcmFtZSB8fCB3aW5kb3dPYmplY3Qud2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lO1xuaWYgKGNhbmNlbEFuaW1hdGlvbkZyYW1lRm4gPT0gbnVsbCB8fCByZXF1ZXN0QW5pbWF0aW9uRnJhbWVGbiA9PSBudWxsKSB7XG4gIC8vIEZvciBlbnZpcm9ubWVudHMgdGhhdCBkb24ndCBzdXBwb3J0IGFuaW1hdGlvbiBmcmFtZSxcbiAgLy8gZmFsbGJhY2sgdG8gYSBzZXRUaW1lb3V0IGJhc2VkIGFwcHJvYWNoLlxuICBjYW5jZWxGcmFtZSA9IGNsZWFyVGltZW91dEZuO1xuICByZXF1ZXN0RnJhbWUgPSBmdW5jdGlvbiByZXF1ZXN0QW5pbWF0aW9uRnJhbWVWaWFTZXRUaW1lb3V0KGNhbGxiYWNrKSB7XG4gICAgcmV0dXJuIHNldFRpbWVvdXRGbihjYWxsYmFjaywgVElNRU9VVF9EVVJBVElPTik7XG4gIH07XG59IGVsc2Uge1xuICAvLyBDb3VudGVyIGludHVpdGl2ZWx5LCBlbnZpcm9ubWVudHMgdGhhdCBzdXBwb3J0IGFuaW1hdGlvbiBmcmFtZXMgY2FuIGJlIHRyaWNraWVyLlxuICAvLyBDaHJvbWUncyBcIlRocm90dGxlIG5vbi12aXNpYmxlIGNyb3NzLW9yaWdpbiBpZnJhbWVzXCIgZmxhZyBjYW4gcHJldmVudCByQUZzIGZyb20gYmVpbmcgY2FsbGVkLlxuICAvLyBJbiB0aGlzIGNhc2UsIHdlIHNob3VsZCBmYWxsYmFjayB0byBhIHNldFRpbWVvdXQoKSBpbXBsZW1lbnRhdGlvbi5cbiAgY2FuY2VsRnJhbWUgPSBmdW5jdGlvbiBjYW5jZWxGcmFtZShbYW5pbWF0aW9uRnJhbWVJRCwgdGltZW91dElEXSkge1xuICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lRm4oYW5pbWF0aW9uRnJhbWVJRCk7XG4gICAgY2xlYXJUaW1lb3V0Rm4odGltZW91dElEKTtcbiAgfTtcbiAgcmVxdWVzdEZyYW1lID0gZnVuY3Rpb24gcmVxdWVzdEFuaW1hdGlvbkZyYW1lV2l0aFNldFRpbWVvdXRGYWxsYmFjayhjYWxsYmFjaykge1xuICAgIGNvbnN0IGFuaW1hdGlvbkZyYW1lSUQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWVGbihmdW5jdGlvbiBhbmltYXRpb25GcmFtZUNhbGxiYWNrKCkge1xuICAgICAgY2xlYXJUaW1lb3V0Rm4odGltZW91dElEKTtcbiAgICAgIGNhbGxiYWNrKCk7XG4gICAgfSk7XG4gICAgY29uc3QgdGltZW91dElEID0gc2V0VGltZW91dEZuKGZ1bmN0aW9uIHRpbWVvdXRDYWxsYmFjaygpIHtcbiAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lRm4oYW5pbWF0aW9uRnJhbWVJRCk7XG4gICAgICBjYWxsYmFjaygpO1xuICAgIH0sIFRJTUVPVVRfRFVSQVRJT04pO1xuICAgIHJldHVybiBbYW5pbWF0aW9uRnJhbWVJRCwgdGltZW91dElEXTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZURldGVjdEVsZW1lbnRSZXNpemUobm9uY2UpIHtcbiAgbGV0IGFuaW1hdGlvbktleWZyYW1lcztcbiAgbGV0IGFuaW1hdGlvbk5hbWU7XG4gIGxldCBhbmltYXRpb25TdGFydEV2ZW50O1xuICBsZXQgYW5pbWF0aW9uU3R5bGU7XG4gIGxldCBjaGVja1RyaWdnZXJzO1xuICBsZXQgcmVzZXRUcmlnZ2VycztcbiAgbGV0IHNjcm9sbExpc3RlbmVyO1xuICBjb25zdCBhdHRhY2hFdmVudCA9IHR5cGVvZiBkb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkb2N1bWVudC5hdHRhY2hFdmVudDtcbiAgaWYgKCFhdHRhY2hFdmVudCkge1xuICAgIHJlc2V0VHJpZ2dlcnMgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgY29uc3QgdHJpZ2dlcnMgPSBlbGVtZW50Ll9fcmVzaXplVHJpZ2dlcnNfXyxcbiAgICAgICAgZXhwYW5kID0gdHJpZ2dlcnMuZmlyc3RFbGVtZW50Q2hpbGQsXG4gICAgICAgIGNvbnRyYWN0ID0gdHJpZ2dlcnMubGFzdEVsZW1lbnRDaGlsZCxcbiAgICAgICAgZXhwYW5kQ2hpbGQgPSBleHBhbmQuZmlyc3RFbGVtZW50Q2hpbGQ7XG4gICAgICBjb250cmFjdC5zY3JvbGxMZWZ0ID0gY29udHJhY3Quc2Nyb2xsV2lkdGg7XG4gICAgICBjb250cmFjdC5zY3JvbGxUb3AgPSBjb250cmFjdC5zY3JvbGxIZWlnaHQ7XG4gICAgICBleHBhbmRDaGlsZC5zdHlsZS53aWR0aCA9IGV4cGFuZC5vZmZzZXRXaWR0aCArIDEgKyBcInB4XCI7XG4gICAgICBleHBhbmRDaGlsZC5zdHlsZS5oZWlnaHQgPSBleHBhbmQub2Zmc2V0SGVpZ2h0ICsgMSArIFwicHhcIjtcbiAgICAgIGV4cGFuZC5zY3JvbGxMZWZ0ID0gZXhwYW5kLnNjcm9sbFdpZHRoO1xuICAgICAgZXhwYW5kLnNjcm9sbFRvcCA9IGV4cGFuZC5zY3JvbGxIZWlnaHQ7XG4gICAgfTtcbiAgICBjaGVja1RyaWdnZXJzID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBlbGVtZW50Lm9mZnNldFdpZHRoICE9PSBlbGVtZW50Ll9fcmVzaXplTGFzdF9fLndpZHRoIHx8IGVsZW1lbnQub2Zmc2V0SGVpZ2h0ICE9PSBlbGVtZW50Ll9fcmVzaXplTGFzdF9fLmhlaWdodDtcbiAgICB9O1xuICAgIHNjcm9sbExpc3RlbmVyID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgIC8vIERvbid0IG1lYXN1cmUgKHdoaWNoIGZvcmNlcykgcmVmbG93IGZvciBzY3JvbGxzIHRoYXQgaGFwcGVuIGluc2lkZSBvZiBjaGlsZHJlbiFcbiAgICAgIGlmIChlLnRhcmdldC5jbGFzc05hbWUgJiYgdHlwZW9mIGUudGFyZ2V0LmNsYXNzTmFtZS5pbmRleE9mID09PSBcImZ1bmN0aW9uXCIgJiYgZS50YXJnZXQuY2xhc3NOYW1lLmluZGV4T2YoXCJjb250cmFjdC10cmlnZ2VyXCIpIDwgMCAmJiBlLnRhcmdldC5jbGFzc05hbWUuaW5kZXhPZihcImV4cGFuZC10cmlnZ2VyXCIpIDwgMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBlbGVtZW50ID0gdGhpcztcbiAgICAgIHJlc2V0VHJpZ2dlcnModGhpcyk7XG4gICAgICBpZiAodGhpcy5fX3Jlc2l6ZVJBRl9fKSB7XG4gICAgICAgIGNhbmNlbEZyYW1lKHRoaXMuX19yZXNpemVSQUZfXyk7XG4gICAgICB9XG4gICAgICB0aGlzLl9fcmVzaXplUkFGX18gPSByZXF1ZXN0RnJhbWUoZnVuY3Rpb24gYW5pbWF0aW9uRnJhbWUoKSB7XG4gICAgICAgIGlmIChjaGVja1RyaWdnZXJzKGVsZW1lbnQpKSB7XG4gICAgICAgICAgZWxlbWVudC5fX3Jlc2l6ZUxhc3RfXy53aWR0aCA9IGVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgICAgICAgZWxlbWVudC5fX3Jlc2l6ZUxhc3RfXy5oZWlnaHQgPSBlbGVtZW50Lm9mZnNldEhlaWdodDtcbiAgICAgICAgICBlbGVtZW50Ll9fcmVzaXplTGlzdGVuZXJzX18uZm9yRWFjaChmdW5jdGlvbiBmb3JFYWNoUmVzaXplTGlzdGVuZXIoZm4pIHtcbiAgICAgICAgICAgIGZuLmNhbGwoZWxlbWVudCwgZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICAvKiBEZXRlY3QgQ1NTIEFuaW1hdGlvbnMgc3VwcG9ydCB0byBkZXRlY3QgZWxlbWVudCBkaXNwbGF5L3JlLWF0dGFjaCAqL1xuICAgIGxldCBhbmltYXRpb24gPSBmYWxzZTtcbiAgICBsZXQga2V5ZnJhbWVwcmVmaXggPSBcIlwiO1xuICAgIGFuaW1hdGlvblN0YXJ0RXZlbnQgPSBcImFuaW1hdGlvbnN0YXJ0XCI7XG4gICAgY29uc3QgZG9tUHJlZml4ZXMgPSBcIldlYmtpdCBNb3ogTyBtc1wiLnNwbGl0KFwiIFwiKTtcbiAgICBsZXQgc3RhcnRFdmVudHMgPSBcIndlYmtpdEFuaW1hdGlvblN0YXJ0IGFuaW1hdGlvbnN0YXJ0IG9BbmltYXRpb25TdGFydCBNU0FuaW1hdGlvblN0YXJ0XCIuc3BsaXQoXCIgXCIpO1xuICAgIGxldCBwZnggPSBcIlwiO1xuICAgIHtcbiAgICAgIGNvbnN0IGVsbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJmYWtlZWxlbWVudFwiKTtcbiAgICAgIGlmIChlbG0uc3R5bGUuYW5pbWF0aW9uTmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGFuaW1hdGlvbiA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAoYW5pbWF0aW9uID09PSBmYWxzZSkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRvbVByZWZpeGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKGVsbS5zdHlsZVtkb21QcmVmaXhlc1tpXSArIFwiQW5pbWF0aW9uTmFtZVwiXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBwZnggPSBkb21QcmVmaXhlc1tpXTtcbiAgICAgICAgICAgIGtleWZyYW1lcHJlZml4ID0gXCItXCIgKyBwZngudG9Mb3dlckNhc2UoKSArIFwiLVwiO1xuICAgICAgICAgICAgYW5pbWF0aW9uU3RhcnRFdmVudCA9IHN0YXJ0RXZlbnRzW2ldO1xuICAgICAgICAgICAgYW5pbWF0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBhbmltYXRpb25OYW1lID0gXCJyZXNpemVhbmltXCI7XG4gICAgYW5pbWF0aW9uS2V5ZnJhbWVzID0gXCJAXCIgKyBrZXlmcmFtZXByZWZpeCArIFwia2V5ZnJhbWVzIFwiICsgYW5pbWF0aW9uTmFtZSArIFwiIHsgZnJvbSB7IG9wYWNpdHk6IDA7IH0gdG8geyBvcGFjaXR5OiAwOyB9IH0gXCI7XG4gICAgYW5pbWF0aW9uU3R5bGUgPSBrZXlmcmFtZXByZWZpeCArIFwiYW5pbWF0aW9uOiAxbXMgXCIgKyBhbmltYXRpb25OYW1lICsgXCI7IFwiO1xuICB9XG4gIGNvbnN0IGNyZWF0ZVN0eWxlcyA9IGZ1bmN0aW9uIChkb2MpIHtcbiAgICBpZiAoIWRvYy5nZXRFbGVtZW50QnlJZChcImRldGVjdEVsZW1lbnRSZXNpemVcIikpIHtcbiAgICAgIC8vb3BhY2l0eTowIHdvcmtzIGFyb3VuZCBhIGNocm9tZSBidWcgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTI4NjM2MFxuICAgICAgY29uc3QgY3NzID0gKGFuaW1hdGlvbktleWZyYW1lcyA/IGFuaW1hdGlvbktleWZyYW1lcyA6IFwiXCIpICsgXCIucmVzaXplLXRyaWdnZXJzIHsgXCIgKyAoYW5pbWF0aW9uU3R5bGUgPyBhbmltYXRpb25TdHlsZSA6IFwiXCIpICsgXCJ2aXNpYmlsaXR5OiBoaWRkZW47IG9wYWNpdHk6IDA7IH0gXCIgKyAnLnJlc2l6ZS10cmlnZ2VycywgLnJlc2l6ZS10cmlnZ2VycyA+IGRpdiwgLmNvbnRyYWN0LXRyaWdnZXI6YmVmb3JlIHsgY29udGVudDogXCIgXCI7IGRpc3BsYXk6IGJsb2NrOyBwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogMDsgbGVmdDogMDsgaGVpZ2h0OiAxMDAlOyB3aWR0aDogMTAwJTsgb3ZlcmZsb3c6IGhpZGRlbjsgei1pbmRleDogLTE7IH0gLnJlc2l6ZS10cmlnZ2VycyA+IGRpdiB7IGJhY2tncm91bmQ6ICNlZWU7IG92ZXJmbG93OiBhdXRvOyB9IC5jb250cmFjdC10cmlnZ2VyOmJlZm9yZSB7IHdpZHRoOiAyMDAlOyBoZWlnaHQ6IDIwMCU7IH0nLFxuICAgICAgICBoZWFkID0gZG9jLmhlYWQgfHwgZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaGVhZFwiKVswXSxcbiAgICAgICAgc3R5bGUgPSBkb2MuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO1xuICAgICAgc3R5bGUuaWQgPSBcImRldGVjdEVsZW1lbnRSZXNpemVcIjtcbiAgICAgIHN0eWxlLnR5cGUgPSBcInRleHQvY3NzXCI7XG4gICAgICBpZiAobm9uY2UgIT0gbnVsbCkge1xuICAgICAgICBzdHlsZS5zZXRBdHRyaWJ1dGUoXCJub25jZVwiLCBub25jZSk7XG4gICAgICB9XG4gICAgICBpZiAoc3R5bGUuc3R5bGVTaGVldCkge1xuICAgICAgICBzdHlsZS5zdHlsZVNoZWV0LmNzc1RleHQgPSBjc3M7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdHlsZS5hcHBlbmRDaGlsZChkb2MuY3JlYXRlVGV4dE5vZGUoY3NzKSk7XG4gICAgICB9XG4gICAgICBoZWFkLmFwcGVuZENoaWxkKHN0eWxlKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGFkZFJlc2l6ZUxpc3RlbmVyID0gZnVuY3Rpb24gKGVsZW1lbnQsIGZuKSB7XG4gICAgaWYgKGF0dGFjaEV2ZW50KSB7XG4gICAgICBlbGVtZW50LmF0dGFjaEV2ZW50KFwib25yZXNpemVcIiwgZm4pO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWVsZW1lbnQuX19yZXNpemVUcmlnZ2Vyc19fKSB7XG4gICAgICAgIGNvbnN0IGRvYyA9IGVsZW1lbnQub3duZXJEb2N1bWVudDtcbiAgICAgICAgY29uc3QgZWxlbWVudFN0eWxlID0gd2luZG93T2JqZWN0LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gICAgICAgIGlmIChlbGVtZW50U3R5bGUgJiYgZWxlbWVudFN0eWxlLnBvc2l0aW9uID09PSBcInN0YXRpY1wiKSB7XG4gICAgICAgICAgZWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9IFwicmVsYXRpdmVcIjtcbiAgICAgICAgfVxuICAgICAgICBjcmVhdGVTdHlsZXMoZG9jKTtcbiAgICAgICAgZWxlbWVudC5fX3Jlc2l6ZUxhc3RfXyA9IHt9O1xuICAgICAgICBlbGVtZW50Ll9fcmVzaXplTGlzdGVuZXJzX18gPSBbXTtcbiAgICAgICAgKGVsZW1lbnQuX19yZXNpemVUcmlnZ2Vyc19fID0gZG9jLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikpLmNsYXNzTmFtZSA9IFwicmVzaXplLXRyaWdnZXJzXCI7XG4gICAgICAgIGNvbnN0IGV4cGFuZFRyaWdnZXIgPSBkb2MuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgZXhwYW5kVHJpZ2dlci5jbGFzc05hbWUgPSBcImV4cGFuZC10cmlnZ2VyXCI7XG4gICAgICAgIGV4cGFuZFRyaWdnZXIuYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikpO1xuICAgICAgICBjb25zdCBjb250cmFjdFRyaWdnZXIgPSBkb2MuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgY29udHJhY3RUcmlnZ2VyLmNsYXNzTmFtZSA9IFwiY29udHJhY3QtdHJpZ2dlclwiO1xuICAgICAgICBlbGVtZW50Ll9fcmVzaXplVHJpZ2dlcnNfXy5hcHBlbmRDaGlsZChleHBhbmRUcmlnZ2VyKTtcbiAgICAgICAgZWxlbWVudC5fX3Jlc2l6ZVRyaWdnZXJzX18uYXBwZW5kQ2hpbGQoY29udHJhY3RUcmlnZ2VyKTtcbiAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZChlbGVtZW50Ll9fcmVzaXplVHJpZ2dlcnNfXyk7XG4gICAgICAgIHJlc2V0VHJpZ2dlcnMoZWxlbWVudCk7XG4gICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCBzY3JvbGxMaXN0ZW5lciwgdHJ1ZSk7XG5cbiAgICAgICAgLyogTGlzdGVuIGZvciBhIGNzcyBhbmltYXRpb24gdG8gZGV0ZWN0IGVsZW1lbnQgZGlzcGxheS9yZS1hdHRhY2ggKi9cbiAgICAgICAgaWYgKGFuaW1hdGlvblN0YXJ0RXZlbnQpIHtcbiAgICAgICAgICBlbGVtZW50Ll9fcmVzaXplVHJpZ2dlcnNfXy5fX2FuaW1hdGlvbkxpc3RlbmVyX18gPSBmdW5jdGlvbiBhbmltYXRpb25MaXN0ZW5lcihlKSB7XG4gICAgICAgICAgICBpZiAoZS5hbmltYXRpb25OYW1lID09PSBhbmltYXRpb25OYW1lKSB7XG4gICAgICAgICAgICAgIHJlc2V0VHJpZ2dlcnMoZWxlbWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgICBlbGVtZW50Ll9fcmVzaXplVHJpZ2dlcnNfXy5hZGRFdmVudExpc3RlbmVyKGFuaW1hdGlvblN0YXJ0RXZlbnQsIGVsZW1lbnQuX19yZXNpemVUcmlnZ2Vyc19fLl9fYW5pbWF0aW9uTGlzdGVuZXJfXyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsZW1lbnQuX19yZXNpemVMaXN0ZW5lcnNfXy5wdXNoKGZuKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IHJlbW92ZVJlc2l6ZUxpc3RlbmVyID0gZnVuY3Rpb24gKGVsZW1lbnQsIGZuKSB7XG4gICAgaWYgKGF0dGFjaEV2ZW50KSB7XG4gICAgICBlbGVtZW50LmRldGFjaEV2ZW50KFwib25yZXNpemVcIiwgZm4pO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbGVtZW50Ll9fcmVzaXplTGlzdGVuZXJzX18uc3BsaWNlKGVsZW1lbnQuX19yZXNpemVMaXN0ZW5lcnNfXy5pbmRleE9mKGZuKSwgMSk7XG4gICAgICBpZiAoIWVsZW1lbnQuX19yZXNpemVMaXN0ZW5lcnNfXy5sZW5ndGgpIHtcbiAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIHNjcm9sbExpc3RlbmVyLCB0cnVlKTtcbiAgICAgICAgaWYgKGVsZW1lbnQuX19yZXNpemVUcmlnZ2Vyc19fLl9fYW5pbWF0aW9uTGlzdGVuZXJfXykge1xuICAgICAgICAgIGVsZW1lbnQuX19yZXNpemVUcmlnZ2Vyc19fLnJlbW92ZUV2ZW50TGlzdGVuZXIoYW5pbWF0aW9uU3RhcnRFdmVudCwgZWxlbWVudC5fX3Jlc2l6ZVRyaWdnZXJzX18uX19hbmltYXRpb25MaXN0ZW5lcl9fKTtcbiAgICAgICAgICBlbGVtZW50Ll9fcmVzaXplVHJpZ2dlcnNfXy5fX2FuaW1hdGlvbkxpc3RlbmVyX18gPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZWxlbWVudC5fX3Jlc2l6ZVRyaWdnZXJzX18gPSAhZWxlbWVudC5yZW1vdmVDaGlsZChlbGVtZW50Ll9fcmVzaXplVHJpZ2dlcnNfXyk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAvLyBQcmVhY3QgY29tcGF0OyBzZWUgZGV2ZWxvcGl0L3ByZWFjdC1jb21wYXQvaXNzdWVzLzIyOFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuICByZXR1cm4ge1xuICAgIGFkZFJlc2l6ZUxpc3RlbmVyLFxuICAgIHJlbW92ZVJlc2l6ZUxpc3RlbmVyXG4gIH07XG59XG5cbmNsYXNzIEF1dG9TaXplciBleHRlbmRzIENvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKC4uLmFyZ3MpIHtcbiAgICBzdXBlciguLi5hcmdzKTtcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgaGVpZ2h0OiB0aGlzLnByb3BzLmRlZmF1bHRIZWlnaHQgfHwgMCxcbiAgICAgIHNjYWxlZEhlaWdodDogdGhpcy5wcm9wcy5kZWZhdWx0SGVpZ2h0IHx8IDAsXG4gICAgICBzY2FsZWRXaWR0aDogdGhpcy5wcm9wcy5kZWZhdWx0V2lkdGggfHwgMCxcbiAgICAgIHdpZHRoOiB0aGlzLnByb3BzLmRlZmF1bHRXaWR0aCB8fCAwXG4gICAgfTtcbiAgICB0aGlzLl9hdXRvU2l6ZXIgPSBudWxsO1xuICAgIHRoaXMuX2RldGVjdEVsZW1lbnRSZXNpemUgPSBudWxsO1xuICAgIHRoaXMuX3BhcmVudE5vZGUgPSBudWxsO1xuICAgIHRoaXMuX3Jlc2l6ZU9ic2VydmVyID0gbnVsbDtcbiAgICB0aGlzLl90aW1lb3V0SWQgPSBudWxsO1xuICAgIHRoaXMuX29uUmVzaXplID0gKCkgPT4ge1xuICAgICAgdGhpcy5fdGltZW91dElkID0gbnVsbDtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgZGlzYWJsZUhlaWdodCxcbiAgICAgICAgZGlzYWJsZVdpZHRoLFxuICAgICAgICBvblJlc2l6ZVxuICAgICAgfSA9IHRoaXMucHJvcHM7XG4gICAgICBpZiAodGhpcy5fcGFyZW50Tm9kZSkge1xuICAgICAgICAvLyBHdWFyZCBhZ2FpbnN0IEF1dG9TaXplciBjb21wb25lbnQgYmVpbmcgcmVtb3ZlZCBmcm9tIHRoZSBET00gaW1tZWRpYXRlbHkgYWZ0ZXIgYmVpbmcgYWRkZWQuXG4gICAgICAgIC8vIFRoaXMgY2FuIHJlc3VsdCBpbiBpbnZhbGlkIHN0eWxlIHZhbHVlcyB3aGljaCBjYW4gcmVzdWx0IGluIE5hTiB2YWx1ZXMgaWYgd2UgZG9uJ3QgaGFuZGxlIHRoZW0uXG4gICAgICAgIC8vIFNlZSBpc3N1ZSAjMTUwIGZvciBtb3JlIGNvbnRleHQuXG5cbiAgICAgICAgY29uc3Qgc3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLl9wYXJlbnROb2RlKSB8fCB7fTtcbiAgICAgICAgY29uc3QgcGFkZGluZ0xlZnQgPSBwYXJzZUZsb2F0KHN0eWxlLnBhZGRpbmdMZWZ0IHx8IFwiMFwiKTtcbiAgICAgICAgY29uc3QgcGFkZGluZ1JpZ2h0ID0gcGFyc2VGbG9hdChzdHlsZS5wYWRkaW5nUmlnaHQgfHwgXCIwXCIpO1xuICAgICAgICBjb25zdCBwYWRkaW5nVG9wID0gcGFyc2VGbG9hdChzdHlsZS5wYWRkaW5nVG9wIHx8IFwiMFwiKTtcbiAgICAgICAgY29uc3QgcGFkZGluZ0JvdHRvbSA9IHBhcnNlRmxvYXQoc3R5bGUucGFkZGluZ0JvdHRvbSB8fCBcIjBcIik7XG4gICAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLl9wYXJlbnROb2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCBzY2FsZWRIZWlnaHQgPSByZWN0LmhlaWdodCAtIHBhZGRpbmdUb3AgLSBwYWRkaW5nQm90dG9tO1xuICAgICAgICBjb25zdCBzY2FsZWRXaWR0aCA9IHJlY3Qud2lkdGggLSBwYWRkaW5nTGVmdCAtIHBhZGRpbmdSaWdodDtcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gdGhpcy5fcGFyZW50Tm9kZS5vZmZzZXRIZWlnaHQgLSBwYWRkaW5nVG9wIC0gcGFkZGluZ0JvdHRvbTtcbiAgICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLl9wYXJlbnROb2RlLm9mZnNldFdpZHRoIC0gcGFkZGluZ0xlZnQgLSBwYWRkaW5nUmlnaHQ7XG4gICAgICAgIGlmICghZGlzYWJsZUhlaWdodCAmJiAodGhpcy5zdGF0ZS5oZWlnaHQgIT09IGhlaWdodCB8fCB0aGlzLnN0YXRlLnNjYWxlZEhlaWdodCAhPT0gc2NhbGVkSGVpZ2h0KSB8fCAhZGlzYWJsZVdpZHRoICYmICh0aGlzLnN0YXRlLndpZHRoICE9PSB3aWR0aCB8fCB0aGlzLnN0YXRlLnNjYWxlZFdpZHRoICE9PSBzY2FsZWRXaWR0aCkpIHtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgc2NhbGVkSGVpZ2h0LFxuICAgICAgICAgICAgc2NhbGVkV2lkdGhcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAodHlwZW9mIG9uUmVzaXplID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIG9uUmVzaXplKHtcbiAgICAgICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgICAgICBzY2FsZWRIZWlnaHQsXG4gICAgICAgICAgICAgIHNjYWxlZFdpZHRoLFxuICAgICAgICAgICAgICB3aWR0aFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLl9zZXRSZWYgPSBhdXRvU2l6ZXIgPT4ge1xuICAgICAgdGhpcy5fYXV0b1NpemVyID0gYXV0b1NpemVyO1xuICAgIH07XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgY29uc3Qge1xuICAgICAgbm9uY2VcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBwYXJlbnROb2RlID0gdGhpcy5fYXV0b1NpemVyID8gdGhpcy5fYXV0b1NpemVyLnBhcmVudE5vZGUgOiBudWxsO1xuICAgIGlmIChwYXJlbnROb2RlICE9IG51bGwgJiYgcGFyZW50Tm9kZS5vd25lckRvY3VtZW50ICYmIHBhcmVudE5vZGUub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyAmJiBwYXJlbnROb2RlIGluc3RhbmNlb2YgcGFyZW50Tm9kZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LkhUTUxFbGVtZW50KSB7XG4gICAgICAvLyBEZWxheSBhY2Nlc3Mgb2YgcGFyZW50Tm9kZSB1bnRpbCBtb3VudC5cbiAgICAgIC8vIFRoaXMgaGFuZGxlcyBlZGdlLWNhc2VzIHdoZXJlIHRoZSBjb21wb25lbnQgaGFzIGFscmVhZHkgYmVlbiB1bm1vdW50ZWQgYmVmb3JlIGl0cyByZWYgaGFzIGJlZW4gc2V0LFxuICAgICAgLy8gQXMgd2VsbCBhcyBsaWJyYXJpZXMgbGlrZSByZWFjdC1saXRlIHdoaWNoIGhhdmUgYSBzbGlnaHRseSBkaWZmZXJlbnQgbGlmZWN5Y2xlLlxuICAgICAgdGhpcy5fcGFyZW50Tm9kZSA9IHBhcmVudE5vZGU7XG5cbiAgICAgIC8vIFVzZSBSZXNpemVPYnNlcnZlciBmcm9tIHRoZSBzYW1lIGNvbnRleHQgd2hlcmUgcGFyZW50Tm9kZSAod2hpY2ggd2Ugd2lsbCBvYnNlcnZlKSB3YXMgZGVmaW5lZFxuICAgICAgLy8gVXNpbmcganVzdCBnbG9iYWwgY2FuIHJlc3VsdCBpbnRvIG9uUmVzaXplIGV2ZW50cyBub3QgYmVpbmcgZW1pdHRlZCBpbiBjYXNlcyB3aXRoIG11bHRpcGxlIHJlYWxtc1xuICAgICAgY29uc3QgUmVzaXplT2JzZXJ2ZXJJbnN0YW5jZSA9IHBhcmVudE5vZGUub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5SZXNpemVPYnNlcnZlcjtcbiAgICAgIGlmIChSZXNpemVPYnNlcnZlckluc3RhbmNlICE9IG51bGwpIHtcbiAgICAgICAgdGhpcy5fcmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXJJbnN0YW5jZSgoKSA9PiB7XG4gICAgICAgICAgLy8gR3VhcmQgYWdhaW5zdCBcIlJlc2l6ZU9ic2VydmVyIGxvb3AgbGltaXQgZXhjZWVkZWRcIiBlcnJvcjtcbiAgICAgICAgICAvLyBjb3VsZCBiZSB0cmlnZ2VyZWQgaWYgdGhlIHN0YXRlIHVwZGF0ZSBjYXVzZXMgdGhlIFJlc2l6ZU9ic2VydmVyIGhhbmRsZXIgdG8gcnVuIGxvbmcuXG4gICAgICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9idmF1Z2huL3JlYWN0LXZpcnR1YWxpemVkLWF1dG8tc2l6ZXIvaXNzdWVzLzU1XG4gICAgICAgICAgdGhpcy5fdGltZW91dElkID0gc2V0VGltZW91dCh0aGlzLl9vblJlc2l6ZSwgMCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9yZXNpemVPYnNlcnZlci5vYnNlcnZlKHBhcmVudE5vZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRGVmZXIgcmVxdWlyaW5nIHJlc2l6ZSBoYW5kbGVyIGluIG9yZGVyIHRvIHN1cHBvcnQgc2VydmVyLXNpZGUgcmVuZGVyaW5nLlxuICAgICAgICAvLyBTZWUgaXNzdWUgIzQxXG4gICAgICAgIHRoaXMuX2RldGVjdEVsZW1lbnRSZXNpemUgPSBjcmVhdGVEZXRlY3RFbGVtZW50UmVzaXplKG5vbmNlKTtcbiAgICAgICAgdGhpcy5fZGV0ZWN0RWxlbWVudFJlc2l6ZS5hZGRSZXNpemVMaXN0ZW5lcihwYXJlbnROb2RlLCB0aGlzLl9vblJlc2l6ZSk7XG4gICAgICB9XG4gICAgICB0aGlzLl9vblJlc2l6ZSgpO1xuICAgIH1cbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBpZiAodGhpcy5fcGFyZW50Tm9kZSkge1xuICAgICAgaWYgKHRoaXMuX2RldGVjdEVsZW1lbnRSZXNpemUpIHtcbiAgICAgICAgdGhpcy5fZGV0ZWN0RWxlbWVudFJlc2l6ZS5yZW1vdmVSZXNpemVMaXN0ZW5lcih0aGlzLl9wYXJlbnROb2RlLCB0aGlzLl9vblJlc2l6ZSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fdGltZW91dElkICE9PSBudWxsKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0SWQpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX3Jlc2l6ZU9ic2VydmVyKSB7XG4gICAgICAgIHRoaXMuX3Jlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgZGVmYXVsdEhlaWdodCxcbiAgICAgIGRlZmF1bHRXaWR0aCxcbiAgICAgIGRpc2FibGVIZWlnaHQgPSBmYWxzZSxcbiAgICAgIGRpc2FibGVXaWR0aCA9IGZhbHNlLFxuICAgICAgZG9Ob3RCYWlsT3V0T25FbXB0eUNoaWxkcmVuID0gZmFsc2UsXG4gICAgICBub25jZSxcbiAgICAgIG9uUmVzaXplLFxuICAgICAgc3R5bGUgPSB7fSxcbiAgICAgIHRhZ05hbWUgPSBcImRpdlwiLFxuICAgICAgLi4ucmVzdFxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHtcbiAgICAgIGhlaWdodCxcbiAgICAgIHNjYWxlZEhlaWdodCxcbiAgICAgIHNjYWxlZFdpZHRoLFxuICAgICAgd2lkdGhcbiAgICB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIC8vIE91dGVyIGRpdiBzaG91bGQgbm90IGZvcmNlIHdpZHRoL2hlaWdodCBzaW5jZSB0aGF0IG1heSBwcmV2ZW50IGNvbnRhaW5lcnMgZnJvbSBzaHJpbmtpbmcuXG4gICAgLy8gSW5uZXIgY29tcG9uZW50IHNob3VsZCBvdmVyZmxvdyBhbmQgdXNlIGNhbGN1bGF0ZWQgd2lkdGgvaGVpZ2h0LlxuICAgIC8vIFNlZSBpc3N1ZSAjNjggZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gICAgY29uc3Qgb3V0ZXJTdHlsZSA9IHtcbiAgICAgIG92ZXJmbG93OiBcInZpc2libGVcIlxuICAgIH07XG4gICAgY29uc3QgY2hpbGRQYXJhbXMgPSB7fTtcblxuICAgIC8vIEF2b2lkIHJlbmRlcmluZyBjaGlsZHJlbiBiZWZvcmUgdGhlIGluaXRpYWwgbWVhc3VyZW1lbnRzIGhhdmUgYmVlbiBjb2xsZWN0ZWQuXG4gICAgLy8gQXQgYmVzdCB0aGlzIHdvdWxkIGp1c3QgYmUgd2FzdGluZyBjeWNsZXMuXG4gICAgbGV0IGJhaWxvdXRPbkNoaWxkcmVuID0gZmFsc2U7XG4gICAgaWYgKCFkaXNhYmxlSGVpZ2h0KSB7XG4gICAgICBpZiAoaGVpZ2h0ID09PSAwKSB7XG4gICAgICAgIGJhaWxvdXRPbkNoaWxkcmVuID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIG91dGVyU3R5bGUuaGVpZ2h0ID0gMDtcbiAgICAgIGNoaWxkUGFyYW1zLmhlaWdodCA9IGhlaWdodDtcbiAgICAgIGNoaWxkUGFyYW1zLnNjYWxlZEhlaWdodCA9IHNjYWxlZEhlaWdodDtcbiAgICB9XG4gICAgaWYgKCFkaXNhYmxlV2lkdGgpIHtcbiAgICAgIGlmICh3aWR0aCA9PT0gMCkge1xuICAgICAgICBiYWlsb3V0T25DaGlsZHJlbiA9IHRydWU7XG4gICAgICB9XG4gICAgICBvdXRlclN0eWxlLndpZHRoID0gMDtcbiAgICAgIGNoaWxkUGFyYW1zLndpZHRoID0gd2lkdGg7XG4gICAgICBjaGlsZFBhcmFtcy5zY2FsZWRXaWR0aCA9IHNjYWxlZFdpZHRoO1xuICAgIH1cbiAgICBpZiAoZG9Ob3RCYWlsT3V0T25FbXB0eUNoaWxkcmVuKSB7XG4gICAgICBiYWlsb3V0T25DaGlsZHJlbiA9IGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlRWxlbWVudCh0YWdOYW1lLCB7XG4gICAgICByZWY6IHRoaXMuX3NldFJlZixcbiAgICAgIHN0eWxlOiB7XG4gICAgICAgIC4uLm91dGVyU3R5bGUsXG4gICAgICAgIC4uLnN0eWxlXG4gICAgICB9LFxuICAgICAgLi4ucmVzdFxuICAgIH0sICFiYWlsb3V0T25DaGlsZHJlbiAmJiBjaGlsZHJlbihjaGlsZFBhcmFtcykpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzSGVpZ2h0QW5kV2lkdGhQcm9wcyhwcm9wcykge1xuICByZXR1cm4gcHJvcHMgJiYgcHJvcHMuZGlzYWJsZUhlaWdodCAhPT0gdHJ1ZSAmJiBwcm9wcy5kaXNhYmxlV2lkdGggIT09IHRydWU7XG59XG5mdW5jdGlvbiBpc0hlaWdodE9ubHlQcm9wcyhwcm9wcykge1xuICByZXR1cm4gcHJvcHMgJiYgcHJvcHMuZGlzYWJsZUhlaWdodCAhPT0gdHJ1ZSAmJiBwcm9wcy5kaXNhYmxlV2lkdGggPT09IHRydWU7XG59XG5mdW5jdGlvbiBpc1dpZHRoT25seVByb3BzKHByb3BzKSB7XG4gIHJldHVybiBwcm9wcyAmJiBwcm9wcy5kaXNhYmxlSGVpZ2h0ID09PSB0cnVlICYmIHByb3BzLmRpc2FibGVXaWR0aCAhPT0gdHJ1ZTtcbn1cblxuZXhwb3J0IHsgQXV0b1NpemVyIGFzIGRlZmF1bHQsIGlzSGVpZ2h0QW5kV2lkdGhQcm9wcywgaXNIZWlnaHRPbmx5UHJvcHMsIGlzV2lkdGhPbmx5UHJvcHMgfTtcbiIsICJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBBdXRvU2l6ZXIgZnJvbSAncmVhY3QtdmlydHVhbGl6ZWQtYXV0by1zaXplcic7XG5leHBvcnQgdmFyIEV1aUF1dG9TaXplciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0F1dG9TaXplcikge1xuICBfaW5oZXJpdHMoRXVpQXV0b1NpemVyLCBfQXV0b1NpemVyKTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aUF1dG9TaXplcik7XG5cbiAgZnVuY3Rpb24gRXVpQXV0b1NpemVyKCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlBdXRvU2l6ZXIpO1xuXG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgcmV0dXJuIEV1aUF1dG9TaXplcjtcbn0oQXV0b1NpemVyKTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY29sb3JcIiwgXCJpY29uVHlwZVwiLCBcImljb25TaWRlXCIsIFwiY2xhc3NOYW1lXCIsIFwiaXNEaXNhYmxlZFwiLCBcIm9uQ2xpY2tcIiwgXCJpY29uT25DbGlja1wiLCBcIm9uQ2xpY2tBcmlhTGFiZWxcIiwgXCJpY29uT25DbGlja0FyaWFMYWJlbFwiLCBcImNsb3NlQnV0dG9uUHJvcHNcIiwgXCJocmVmXCIsIFwicmVsXCIsIFwidGFyZ2V0XCIsIFwic3R5bGVcIl07XG5cbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHsgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHsgaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgaXRlcltTeW1ib2wuaXRlcmF0b3JdICE9IG51bGwgfHwgaXRlcltcIkBAaXRlcmF0b3JcIl0gIT0gbnVsbCkgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkoYXJyKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IGNocm9tYSBmcm9tICdjaHJvbWEtanMnO1xuaW1wb3J0IHsga2V5c09mIH0gZnJvbSAnLi4vY29tbW9uJztcbmltcG9ydCB7IGV1aVBhbGV0dGVDb2xvckJsaW5kQmVoaW5kVGV4dCwgZ2V0U2VjdXJlUmVsRm9yVGFyZ2V0LCBpc0NvbG9yRGFyayB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aUlubmVyVGV4dCB9IGZyb20gJy4uL2lubmVyX3RleHQnO1xuaW1wb3J0IHsgRXVpSWNvbiB9IGZyb20gJy4uL2ljb24nO1xuaW1wb3J0IHsgY2hyb21hVmFsaWQsIHBhcnNlQ29sb3IgfSBmcm9tICcuLi9jb2xvcl9waWNrZXIvdXRpbHMnO1xuaW1wb3J0IHsgdmFsaWRhdGVIcmVmIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2VjdXJpdHkvaHJlZl92YWxpZGF0b3InO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbi8vIFRPRE8gLSByZXBsYWNlIHdpdGggdmFyaWFibGVzIG9uY2UgaHR0cHM6Ly9naXRodWIuY29tL2VsYXN0aWMvZXVpL2lzc3Vlcy8yNzMxIGlzIGNsb3NlZFxudmFyIGNvbG9ySW5rID0gJyMwMDAnO1xudmFyIGNvbG9yR2hvc3QgPSAnI2ZmZic7IC8vIFRoZSBjb2xvciBibGluZCBwYWxldHRlIGhhcyBzb21lIHN0cmljdGVyIGFjY2Vzc2liaWxpdHkgbmVlZHMgd2l0aCByZWdhcmRzIHRvXG4vLyBjaGFydHMgYW5kIGNvbnRyYXN0LiBXZSB1c2UgdGhlIGV1aVBhbGV0dGVDb2xvckJsaW5kQmVoaW5kVGV4dCB2YXJpYW50IGhlcmUgc2luY2Ugb3VyXG4vLyBhY2Nlc3NpYmlsaXR5IGNvbmNlcm5zIHBlcnRhaW4gdG8gZm9yZWdyb3VuZCAodGV4dCkgYW5kIGJhY2tncm91bmQgY29udHJhc3RcblxudmFyIHZpc0NvbG9ycyA9IGV1aVBhbGV0dGVDb2xvckJsaW5kQmVoaW5kVGV4dCgpO1xudmFyIGNvbG9yVG9IZXhNYXAgPSB7XG4gIC8vIFRPRE8gLSByZXBsYWNlIHdpdGggdmFyaWFibGUgb25jZSBodHRwczovL2dpdGh1Yi5jb20vZWxhc3RpYy9ldWkvaXNzdWVzLzI3MzEgaXMgY2xvc2VkXG4gIGRlZmF1bHQ6ICcjZDNkYWU2JyxcbiAgcHJpbWFyeTogdmlzQ29sb3JzWzFdLFxuICBzdWNjZXNzOiB2aXNDb2xvcnNbMF0sXG4gIGFjY2VudDogdmlzQ29sb3JzWzJdLFxuICB3YXJuaW5nOiB2aXNDb2xvcnNbNV0sXG4gIGRhbmdlcjogdmlzQ29sb3JzWzldXG59O1xuZXhwb3J0IHZhciBDT0xPUlMgPSBrZXlzT2YoY29sb3JUb0hleE1hcCk7XG52YXIgaWNvblNpZGVUb0NsYXNzTmFtZU1hcCA9IHtcbiAgbGVmdDogJ2V1aUJhZGdlLS1pY29uTGVmdCcsXG4gIHJpZ2h0OiAnZXVpQmFkZ2UtLWljb25SaWdodCdcbn07XG5leHBvcnQgdmFyIElDT05fU0lERVMgPSBrZXlzT2YoaWNvblNpZGVUb0NsYXNzTmFtZU1hcCk7XG5leHBvcnQgdmFyIEV1aUJhZGdlID0gZnVuY3Rpb24gRXVpQmFkZ2UoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdkZWZhdWx0JyA6IF9yZWYkY29sb3IsXG4gICAgICBpY29uVHlwZSA9IF9yZWYuaWNvblR5cGUsXG4gICAgICBfcmVmJGljb25TaWRlID0gX3JlZi5pY29uU2lkZSxcbiAgICAgIGljb25TaWRlID0gX3JlZiRpY29uU2lkZSA9PT0gdm9pZCAwID8gJ2xlZnQnIDogX3JlZiRpY29uU2lkZSxcbiAgICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgX2lzRGlzYWJsZWQgPSBfcmVmLmlzRGlzYWJsZWQsXG4gICAgICBvbkNsaWNrID0gX3JlZi5vbkNsaWNrLFxuICAgICAgaWNvbk9uQ2xpY2sgPSBfcmVmLmljb25PbkNsaWNrLFxuICAgICAgb25DbGlja0FyaWFMYWJlbCA9IF9yZWYub25DbGlja0FyaWFMYWJlbCxcbiAgICAgIGljb25PbkNsaWNrQXJpYUxhYmVsID0gX3JlZi5pY29uT25DbGlja0FyaWFMYWJlbCxcbiAgICAgIGNsb3NlQnV0dG9uUHJvcHMgPSBfcmVmLmNsb3NlQnV0dG9uUHJvcHMsXG4gICAgICBocmVmID0gX3JlZi5ocmVmLFxuICAgICAgcmVsID0gX3JlZi5yZWwsXG4gICAgICB0YXJnZXQgPSBfcmVmLnRhcmdldCxcbiAgICAgIHN0eWxlID0gX3JlZi5zdHlsZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgaXNIcmVmVmFsaWQgPSAhaHJlZiB8fCB2YWxpZGF0ZUhyZWYoaHJlZik7XG4gIHZhciBpc0Rpc2FibGVkID0gX2lzRGlzYWJsZWQgfHwgIWlzSHJlZlZhbGlkO1xuICB2YXIgb3B0aW9uYWxDdXN0b21TdHlsZXMgPSBzdHlsZTtcbiAgdmFyIHRleHRDb2xvciA9IG51bGw7IC8vIFRPRE8gLSByZXBsYWNlIHdpdGggdmFyaWFibGUgb25jZSBodHRwczovL2dpdGh1Yi5jb20vZWxhc3RpYy9ldWkvaXNzdWVzLzI3MzEgaXMgY2xvc2VkXG5cbiAgdmFyIHdjYWdDb250cmFzdEJhc2UgPSA0LjU7IC8vIFdDQUcgQUEgY29udHJhc3QgbGV2ZWxcblxuICB2YXIgd2NhZ0NvbnRyYXN0ID0gbnVsbDtcbiAgdmFyIGNvbG9ySGV4ID0gbnVsbDsgLy8gQ2hlY2sgaWYgYSB2YWxpZCBjb2xvciBuYW1lIHdhcyBwcm92aWRlZFxuXG4gIHRyeSB7XG4gICAgaWYgKENPTE9SUy5pbmRleE9mKGNvbG9yKSA+IC0xKSB7XG4gICAgICAvLyBHZXQgdGhlIGhleCBlcXVpdmFsZW50IGZvciB0aGUgcHJvdmlkZWQgY29sb3IgbmFtZVxuICAgICAgY29sb3JIZXggPSBjb2xvclRvSGV4TWFwW2NvbG9yXTsgLy8gU2V0IGRhcmsgb3IgbGlnaHQgdGV4dCBjb2xvciBiYXNlZCB1cG9uIGJlc3QgY29udHJhc3RcblxuICAgICAgdGV4dENvbG9yID0gc2V0VGV4dENvbG9yKGNvbG9ySGV4KTtcbiAgICAgIG9wdGlvbmFsQ3VzdG9tU3R5bGVzID0gX29iamVjdFNwcmVhZCh7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogY29sb3JIZXgsXG4gICAgICAgIGNvbG9yOiB0ZXh0Q29sb3JcbiAgICAgIH0sIG9wdGlvbmFsQ3VzdG9tU3R5bGVzKTtcbiAgICB9IGVsc2UgaWYgKGNvbG9yICE9PSAnaG9sbG93Jykge1xuICAgICAgLy8gVGhpcyBpcyBhIGN1c3RvbSBjb2xvciB0aGF0IGlzIG5laXRoZXIgZnJvbSB0aGUgYmFzZSBwYWxldHRlIG5vciBob2xsb3dcbiAgICAgIC8vIExldCdzIGRvIG91ciBiZXN0IHRvIGVuc3VyZSB0aGF0IGl0IHByb3ZpZGVzIHN1ZmZpY2llbnQgY29udHJhc3RcbiAgICAgIC8vIFNldCBkYXJrIG9yIGxpZ2h0IHRleHQgY29sb3IgYmFzZWQgdXBvbiBiZXN0IGNvbnRyYXN0XG4gICAgICB0ZXh0Q29sb3IgPSBzZXRUZXh0Q29sb3IoY29sb3IpOyAvLyBDaGVjayB0aGUgY29udHJhc3RcblxuICAgICAgd2NhZ0NvbnRyYXN0ID0gZ2V0Q29sb3JDb250cmFzdCh0ZXh0Q29sb3IsIGNvbG9yKTtcblxuICAgICAgaWYgKHdjYWdDb250cmFzdCA8IHdjYWdDb250cmFzdEJhc2UpIHtcbiAgICAgICAgLy8gSXQncyBsb3cgY29udHJhc3QsIHNvIGxldHMgc2hvdyBhIHdhcm5pbmcgaW4gdGhlIGNvbnNvbGVcbiAgICAgICAgY29uc29sZS53YXJuKCdXYXJuaW5nOiAnLCBjb2xvciwgJyBiYWRnZSBoYXMgbG93IGNvbnRyYXN0IG9mICcsIHdjYWdDb250cmFzdC50b0ZpeGVkKDIpLCAnLiBTaG91bGQgYmUgYWJvdmUgJywgd2NhZ0NvbnRyYXN0QmFzZSwgJy4nKTtcbiAgICAgIH1cblxuICAgICAgb3B0aW9uYWxDdXN0b21TdHlsZXMgPSBfb2JqZWN0U3ByZWFkKHtcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiBjb2xvcixcbiAgICAgICAgY29sb3I6IHRleHRDb2xvclxuICAgICAgfSwgb3B0aW9uYWxDdXN0b21TdHlsZXMpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaGFuZGxlSW52YWxpZENvbG9yKGNvbG9yKTtcbiAgfVxuXG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpQmFkZ2UnLCB7XG4gICAgJ2V1aUJhZGdlLWlzQ2xpY2thYmxlJzogKG9uQ2xpY2sgfHwgaHJlZikgJiYgIWljb25PbkNsaWNrLFxuICAgICdldWlCYWRnZS1pc0Rpc2FibGVkJzogaXNEaXNhYmxlZCxcbiAgICAnZXVpQmFkZ2UtLWhvbGxvdyc6IGNvbG9yID09PSAnaG9sbG93J1xuICB9LCBpY29uU2lkZVRvQ2xhc3NOYW1lTWFwW2ljb25TaWRlXSwgY2xhc3NOYW1lKTtcbiAgdmFyIGNsb3NlQ2xhc3NOYW1lcyA9IGNsYXNzTmFtZXMoJ2V1aUJhZGdlX19pY29uJywgY2xvc2VCdXR0b25Qcm9wcyAmJiBjbG9zZUJ1dHRvblByb3BzLmNsYXNzTmFtZSk7XG4gIHZhciBFbGVtZW50ID0gaHJlZiAmJiAhaXNEaXNhYmxlZCA/ICdhJyA6ICdidXR0b24nO1xuICB2YXIgcmVsT2JqID0ge307XG5cbiAgaWYgKGhyZWYgJiYgIWlzRGlzYWJsZWQpIHtcbiAgICByZWxPYmouaHJlZiA9IGhyZWY7XG4gICAgcmVsT2JqLnRhcmdldCA9IHRhcmdldDtcbiAgICByZWxPYmoucmVsID0gZ2V0U2VjdXJlUmVsRm9yVGFyZ2V0KHtcbiAgICAgIGhyZWY6IGhyZWYsXG4gICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgIHJlbDogcmVsXG4gICAgfSk7XG4gIH1cblxuICBpZiAob25DbGljaykge1xuICAgIHJlbE9iai5vbkNsaWNrID0gb25DbGljaztcbiAgfVxuXG4gIHZhciBvcHRpb25hbEljb24gPSBudWxsO1xuXG4gIGlmIChpY29uVHlwZSkge1xuICAgIGlmIChpY29uT25DbGljaykge1xuICAgICAgaWYgKCFpY29uT25DbGlja0FyaWFMYWJlbCkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1doZW4gcGFzc2luZyB0aGUgaWNvbk9uQ2xpY2sgcHJvcHMgdG8gRXVpQmFkZ2UsIHlvdSBtdXN0IGFsc28gcHJvdmlkZSBpY29uT25DbGlja0FyaWFMYWJlbCcpO1xuICAgICAgfVxuXG4gICAgICBvcHRpb25hbEljb24gPSBfX19FbW90aW9uSlNYKFwiYnV0dG9uXCIsIHtcbiAgICAgICAgdHlwZTogXCJidXR0b25cIixcbiAgICAgICAgY2xhc3NOYW1lOiBcImV1aUJhZGdlX19pY29uQnV0dG9uXCIsXG4gICAgICAgIFwiYXJpYS1sYWJlbFwiOiBpY29uT25DbGlja0FyaWFMYWJlbCxcbiAgICAgICAgZGlzYWJsZWQ6IGlzRGlzYWJsZWQsXG4gICAgICAgIHRpdGxlOiBpY29uT25DbGlja0FyaWFMYWJlbCxcbiAgICAgICAgb25DbGljazogaWNvbk9uQ2xpY2tcbiAgICAgIH0sIF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwgX2V4dGVuZHMoe1xuICAgICAgICB0eXBlOiBpY29uVHlwZSxcbiAgICAgICAgc2l6ZTogXCJzXCIsXG4gICAgICAgIGNvbG9yOiBcImluaGVyaXRcIiAvLyBmb3JjZXMgdGhlIGljb24gdG8gaW5oZXJpdCBpdHMgcGFyZW50IGNvbG9yXG5cbiAgICAgIH0sIGNsb3NlQnV0dG9uUHJvcHMsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBjbG9zZUNsYXNzTmFtZXNcbiAgICAgIH0pKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbmFsSWNvbiA9IF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgICAgICB0eXBlOiBpY29uVHlwZSxcbiAgICAgICAgc2l6ZTogY2hpbGRyZW4gPyAncycgOiAnbScsXG4gICAgICAgIGNsYXNzTmFtZTogXCJldWlCYWRnZV9faWNvblwiLFxuICAgICAgICBjb2xvcjogXCJpbmhlcml0XCIgLy8gZm9yY2VzIHRoZSBpY29uIHRvIGluaGVyaXQgaXRzIHBhcmVudCBjb2xvclxuXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBpZiAob25DbGljayAmJiAhb25DbGlja0FyaWFMYWJlbCkge1xuICAgIGNvbnNvbGUud2FybignV2hlbiBwYXNzaW5nIG9uQ2xpY2sgdG8gRXVpQmFkZ2UsIHlvdSBtdXN0IGFsc28gcHJvdmlkZSBvbkNsaWNrQXJpYUxhYmVsJyk7XG4gIH1cblxuICB2YXIgY29udGVudCA9IF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpQmFkZ2VfX2NvbnRlbnRcIlxuICB9LCBjaGlsZHJlbiAmJiBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUJhZGdlX190ZXh0XCJcbiAgfSwgY2hpbGRyZW4pLCBvcHRpb25hbEljb24pO1xuXG4gIGlmIChpY29uT25DbGljaykge1xuICAgIHJldHVybiBvbkNsaWNrIHx8IGhyZWYgPyBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICBzdHlsZTogb3B0aW9uYWxDdXN0b21TdHlsZXNcbiAgICB9LCBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgICBjbGFzc05hbWU6IFwiZXVpQmFkZ2VfX2NvbnRlbnRcIlxuICAgIH0sIF9fX0Vtb3Rpb25KU1goRXVpSW5uZXJUZXh0LCBudWxsLCBmdW5jdGlvbiAocmVmLCBpbm5lclRleHQpIHtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEVsZW1lbnQsIF9leHRlbmRzKHtcbiAgICAgICAgY2xhc3NOYW1lOiBcImV1aUJhZGdlX19jaGlsZEJ1dHRvblwiLFxuICAgICAgICBkaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgXCJhcmlhLWxhYmVsXCI6IG9uQ2xpY2tBcmlhTGFiZWwsXG4gICAgICAgIHJlZjogcmVmLFxuICAgICAgICB0aXRsZTogaW5uZXJUZXh0XG4gICAgICB9LCByZWxPYmosIHJlc3QpLCBjaGlsZHJlbik7XG4gICAgfSksIG9wdGlvbmFsSWNvbikpIDogX19fRW1vdGlvbkpTWChFdWlJbm5lclRleHQsIG51bGwsIGZ1bmN0aW9uIChyZWYsIGlubmVyVGV4dCkge1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIF9leHRlbmRzKHtcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICBzdHlsZTogb3B0aW9uYWxDdXN0b21TdHlsZXMsXG4gICAgICAgIHJlZjogcmVmLFxuICAgICAgICB0aXRsZTogaW5uZXJUZXh0XG4gICAgICB9LCByZXN0KSwgY29udGVudCk7XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAob25DbGljayB8fCBocmVmKSB7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpSW5uZXJUZXh0LCBudWxsLCBmdW5jdGlvbiAocmVmLCBpbm5lclRleHQpIHtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEVsZW1lbnQsIF9leHRlbmRzKHtcbiAgICAgICAgZGlzYWJsZWQ6IGlzRGlzYWJsZWQsXG4gICAgICAgIFwiYXJpYS1sYWJlbFwiOiBvbkNsaWNrQXJpYUxhYmVsLFxuICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgIHN0eWxlOiBvcHRpb25hbEN1c3RvbVN0eWxlcyxcbiAgICAgICAgcmVmOiByZWYsXG4gICAgICAgIHRpdGxlOiBpbm5lclRleHRcbiAgICAgIH0sIHJlbE9iaiwgcmVzdCksIGNvbnRlbnQpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUlubmVyVGV4dCwgbnVsbCwgZnVuY3Rpb24gKHJlZiwgaW5uZXJUZXh0KSB7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcInNwYW5cIiwgX2V4dGVuZHMoe1xuICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgIHN0eWxlOiBvcHRpb25hbEN1c3RvbVN0eWxlcyxcbiAgICAgICAgcmVmOiByZWYsXG4gICAgICAgIHRpdGxlOiBpbm5lclRleHRcbiAgICAgIH0sIHJlc3QpLCBjb250ZW50KTtcbiAgICB9KTtcbiAgfVxufTtcbkV1aUJhZGdlLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAgICogQWNjZXB0cyBhbnkgc3RyaW5nIGZyb20gb3VyIGljb24gbGlicmFyeVxuICAgICAqL1xuICBpY29uVHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYWxlcnRcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhc3Rlcmlza1wiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJib2x0XCIsIFwiYm94ZXNIb3Jpem9udGFsXCIsIFwiYm94ZXNWZXJ0aWNhbFwiLCBcImJyYW5jaFwiLCBcImJyYW5jaFVzZXJcIiwgXCJicm9vbVwiLCBcImJydXNoXCIsIFwiYnVnXCIsIFwiYnVsbHNleWVcIiwgXCJjYWxlbmRhclwiLCBcImNhbnZhc0FwcFwiLCBcImNhc2VzQXBwXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsb2NrXCIsIFwiY2xvdWREcml6emxlXCIsIFwiY2xvdWRTdG9ybXlcIiwgXCJjbG91ZFN1bm55XCIsIFwiY2x1c3RlclwiLCBcImNvZGVBcHBcIiwgXCJjb2xvclwiLCBcImNvbXB1dGVcIiwgXCJjb25zb2xlXCIsIFwiY29uc29sZUFwcFwiLCBcImNvbnRhaW5lclwiLCBcImNvbnRpbnVpdHlBYm92ZVwiLCBcImNvbnRpbnVpdHlBYm92ZUJlbG93XCIsIFwiY29udGludWl0eUJlbG93XCIsIFwiY29udGludWl0eVdpdGhpblwiLCBcImNvbnRyb2xzSG9yaXpvbnRhbFwiLCBcImNvbnRyb2xzVmVydGljYWxcIiwgXCJjb3B5XCIsIFwiY29weUNsaXBib2FyZFwiLCBcImNyZWF0ZUFkdmFuY2VkSm9iXCIsIFwiY3JlYXRlTXVsdGlNZXRyaWNKb2JcIiwgXCJjcmVhdGVQb3B1bGF0aW9uSm9iXCIsIFwiY3JlYXRlU2luZ2xlTWV0cmljSm9iXCIsIFwiY3Jvc3NcIiwgXCJjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcFwiLCBcImNyb3NzSW5BQ2lyY2xlRmlsbGVkXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpc2NvdmVyQXBwXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG91YmxlQXJyb3dMZWZ0XCIsIFwiZG91YmxlQXJyb3dSaWdodFwiLCBcImRvd25sb2FkXCIsIFwiZWRpdG9yQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JBbGlnbkxlZnRcIiwgXCJlZGl0b3JBbGlnblJpZ2h0XCIsIFwiZWRpdG9yQm9sZFwiLCBcImVkaXRvckNoZWNrbGlzdFwiLCBcImVkaXRvckNvZGVCbG9ja1wiLCBcImVkaXRvckNvbW1lbnRcIiwgXCJlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbFwiLCBcImVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbFwiLCBcImVkaXRvckhlYWRpbmdcIiwgXCJlZGl0b3JJdGFsaWNcIiwgXCJlZGl0b3JJdGVtQWxpZ25Cb3R0b21cIiwgXCJlZGl0b3JJdGVtQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JJdGVtQWxpZ25MZWZ0XCIsIFwiZWRpdG9ySXRlbUFsaWduTWlkZGxlXCIsIFwiZWRpdG9ySXRlbUFsaWduUmlnaHRcIiwgXCJlZGl0b3JJdGVtQWxpZ25Ub3BcIiwgXCJlZGl0b3JMaW5rXCIsIFwiZWRpdG9yT3JkZXJlZExpc3RcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnRcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BMZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BSaWdodFwiLCBcImVkaXRvclJlZG9cIiwgXCJlZGl0b3JTdHJpa2VcIiwgXCJlZGl0b3JUYWJsZVwiLCBcImVkaXRvclVuZGVybGluZVwiLCBcImVkaXRvclVuZG9cIiwgXCJlZGl0b3JVbm9yZGVyZWRMaXN0XCIsIFwiZW1haWxcIiwgXCJlbXB0eVwiLCBcImVtc0FwcFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibW9iaWxlXCIsIFwibW9uaXRvcmluZ0FwcFwiLCBcIm1vb25cIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFwZXJDbGlwXCIsIFwicGFydGlhbFwiLCBcInBhdXNlXCIsIFwicGF5bWVudFwiLCBcInBlbmNpbFwiLCBcInBlcmNlbnRcIiwgXCJwaW5cIiwgXCJwaW5GaWxsZWRcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBsYXlcIiwgXCJwbGF5RmlsbGVkXCIsIFwicGx1c1wiLCBcInBsdXNJbkNpcmNsZVwiLCBcInBsdXNJbkNpcmNsZUZpbGxlZFwiLCBcInBvcG91dFwiLCBcInB1c2hcIiwgXCJxdWVzdGlvbkluQ2lyY2xlXCIsIFwicXVvdGVcIiwgXCJyZWNlbnRseVZpZXdlZEFwcFwiLCBcInJlZnJlc2hcIiwgXCJyZWdyZXNzaW9uSm9iXCIsIFwicmVwb3J0ZXJcIiwgXCJyZXBvcnRpbmdBcHBcIiwgXCJyZXR1cm5LZXlcIiwgXCJzYXZlXCIsIFwic2F2ZWRPYmplY3RzQXBwXCIsIFwic2NhbGVcIiwgXCJzZWFyY2hcIiwgXCJzZWFyY2hQcm9maWxlckFwcFwiLCBcInNlY3VyaXR5QW5hbHl0aWNzQXBwXCIsIFwic2VjdXJpdHlBcHBcIiwgXCJzZWN1cml0eVNpZ25hbFwiLCBcInNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWRcIiwgXCJzZWN1cml0eVNpZ25hbFJlc29sdmVkXCIsIFwic2Vzc2lvblZpZXdlclwiLCBcInNoYXJkXCIsIFwic2hhcmVcIiwgXCJzbm93Zmxha2VcIiwgXCJzb3J0RG93blwiLCBcInNvcnRMZWZ0XCIsIFwic29ydFJpZ2h0XCIsIFwic29ydFVwXCIsIFwic29ydGFibGVcIiwgXCJzcGFjZXNBcHBcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EZW5zZVZlY3RvclwiLCBcInRva2VuRWxlbWVudFwiLCBcInRva2VuRW51bVwiLCBcInRva2VuRW51bU1lbWJlclwiLCBcInRva2VuRXZlbnRcIiwgXCJ0b2tlbkV4Y2VwdGlvblwiLCBcInRva2VuRmllbGRcIiwgXCJ0b2tlbkZpbGVcIiwgXCJ0b2tlbkZsYXR0ZW5lZFwiLCBcInRva2VuRnVuY3Rpb25cIiwgXCJ0b2tlbkdlb1wiLCBcInRva2VuSGlzdG9ncmFtXCIsIFwidG9rZW5JbnRlcmZhY2VcIiwgXCJ0b2tlbklQXCIsIFwidG9rZW5Kb2luXCIsIFwidG9rZW5LZXlcIiwgXCJ0b2tlbktleXdvcmRcIiwgXCJ0b2tlbk1ldGhvZFwiLCBcInRva2VuTWV0cmljQ291bnRlclwiLCBcInRva2VuTWV0cmljR2F1Z2VcIiwgXCJ0b2tlbk1vZHVsZVwiLCBcInRva2VuTmFtZXNwYWNlXCIsIFwidG9rZW5OZXN0ZWRcIiwgXCJ0b2tlbk51bGxcIiwgXCJ0b2tlbk51bWJlclwiLCBcInRva2VuT2JqZWN0XCIsIFwidG9rZW5PcGVyYXRvclwiLCBcInRva2VuUGFja2FnZVwiLCBcInRva2VuUGFyYW1ldGVyXCIsIFwidG9rZW5QZXJjb2xhdG9yXCIsIFwidG9rZW5Qcm9wZXJ0eVwiLCBcInRva2VuUmFuZ2VcIiwgXCJ0b2tlblJhbmtGZWF0dXJlXCIsIFwidG9rZW5SYW5rRmVhdHVyZXNcIiwgXCJ0b2tlblJlcG9cIiwgXCJ0b2tlblNlYXJjaFR5cGVcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkXSksXG5cbiAgLyoqXG4gICAgICogVGhlIHNpZGUgb2YgdGhlIGJhZGdlIHRoZSBpY29uIHNob3VsZCBzaXRcbiAgICAgKi9cbiAgaWNvblNpZGU6IFByb3BUeXBlcy5vbmVPZihbXCJsZWZ0XCIsIFwicmlnaHRcIl0pLFxuXG4gIC8qKlxuICAgICAqIEFjY2VwdHMgZWl0aGVyIG91ciBwYWxldHRlIGNvbG9ycyAocHJpbWFyeSwgc3VjY2VzcyAuLmV0Yykgb3IgYSBoZXggdmFsdWUgYCNGRkZGRkZgLCBgIzAwMGAuXG4gICAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZF0pLFxuXG4gIC8qKlxuICAgICAqIFdpbGwgb3ZlcnJpZGUgYW55IGNvbG9yIHBhc3NlZCB0aHJvdWdoIHRoZSBgY29sb3JgIHByb3AuXG4gICAgICovXG4gIGlzRGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIFByb3BzIHBhc3NlZCB0byB0aGUgY2xvc2UgYnV0dG9uLlxuICAgICAqL1xuICBjbG9zZUJ1dHRvblByb3BzOiBQcm9wVHlwZXMuYW55LFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogV2lsbCBhcHBseSBhbiBvbmNsaWNrIHRvIGljb24gd2l0aGluIHRoZSBiYWRnZVxuICAgICAqL1xuICBpY29uT25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAgICogQXJpYSBsYWJlbCBhcHBsaWVkIHRvIHRoZSBpY29uT25DbGljayBidXR0b25cbiAgICAgKi9cbiAgaWNvbk9uQ2xpY2tBcmlhTGFiZWw6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogV2lsbCBhcHBseSBhbiBvbmNsaWNrIHRvIHRoZSBiYWRnZSBpdHNlbGZcbiAgICAgKi9cbiAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAgICogQXJpYSBsYWJlbCBhcHBsaWVkIHRvIHRoZSBvbkNsaWNrIGJ1dHRvblxuICAgICAqL1xuICBvbkNsaWNrQXJpYUxhYmVsOiBQcm9wVHlwZXMuYW55LFxuICBocmVmOiBQcm9wVHlwZXMuc3RyaW5nLFxuICB0YXJnZXQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHJlbDogUHJvcFR5cGVzLnN0cmluZ1xufTtcblxuZnVuY3Rpb24gZ2V0Q29sb3JDb250cmFzdCh0ZXh0Q29sb3IsIGNvbG9yKSB7XG4gIHZhciBjb250cmFzdFZhbHVlID0gY2hyb21hLmNvbnRyYXN0KHRleHRDb2xvciwgY29sb3IpO1xuICByZXR1cm4gY29udHJhc3RWYWx1ZTtcbn1cblxuZnVuY3Rpb24gc2V0VGV4dENvbG9yKGJnQ29sb3IpIHtcbiAgdmFyIHRleHRDb2xvciA9IGlzQ29sb3JEYXJrLmFwcGx5KHZvaWQgMCwgX3RvQ29uc3VtYWJsZUFycmF5KGNocm9tYShiZ0NvbG9yKS5yZ2IoKSkpID8gY29sb3JHaG9zdCA6IGNvbG9ySW5rO1xuICByZXR1cm4gdGV4dENvbG9yO1xufVxuXG5mdW5jdGlvbiBoYW5kbGVJbnZhbGlkQ29sb3IoY29sb3IpIHtcbiAgdmFyIGlzTmFtZWRDb2xvciA9IGNvbG9yICYmIENPTE9SUy5pbmNsdWRlcyhjb2xvcikgfHwgY29sb3IgPT09ICdob2xsb3cnO1xuICB2YXIgaXNWYWxpZENvbG9yU3RyaW5nID0gY29sb3IgJiYgY2hyb21hVmFsaWQocGFyc2VDb2xvcihjb2xvcikgfHwgJycpO1xuXG4gIGlmICghaXNOYW1lZENvbG9yICYmICFpc1ZhbGlkQ29sb3JTdHJpbmcpIHtcbiAgICBjb25zb2xlLndhcm4oJ0V1aUJhZGdlIGV4cGVjdHMgYSB2YWxpZCBjb2xvci4gVGhpcyBjYW4gZWl0aGVyIGJlIGEgdGhyZWUgb3Igc2l4ICcgKyBcImNoYXJhY3RlciBoZXggdmFsdWUsIHJnYihhKSB2YWx1ZSwgaHN2IHZhbHVlLCBob2xsb3csIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nOiBcIi5jb25jYXQoQ09MT1JTLCBcIi4gXCIpICsgXCJJbnN0ZWFkIGdvdCBcIi5jb25jYXQoY29sb3IsIFwiLlwiKSk7XG4gIH1cbn0iLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IGNocm9tYSBmcm9tICdjaHJvbWEtanMnO1xuZXhwb3J0IHZhciBnZXRFdmVudFBvc2l0aW9uID0gZnVuY3Rpb24gZ2V0RXZlbnRQb3NpdGlvbihsb2NhdGlvbiwgY29udGFpbmVyKSB7XG4gIHZhciB4ID0gbG9jYXRpb24ueCxcbiAgICAgIHkgPSBsb2NhdGlvbi55O1xuXG4gIHZhciBfY29udGFpbmVyJGdldEJvdW5kaW4gPSBjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksXG4gICAgICB3aWR0aCA9IF9jb250YWluZXIkZ2V0Qm91bmRpbi53aWR0aCxcbiAgICAgIGhlaWdodCA9IF9jb250YWluZXIkZ2V0Qm91bmRpbi5oZWlnaHQsXG4gICAgICBsZWZ0ID0gX2NvbnRhaW5lciRnZXRCb3VuZGluLmxlZnQsXG4gICAgICB0b3AgPSBfY29udGFpbmVyJGdldEJvdW5kaW4udG9wO1xuXG4gIHZhciBsZWZ0UG9zID0geCAtIChsZWZ0ICsgd2luZG93LnBhZ2VYT2Zmc2V0KTtcbiAgdmFyIHRvcFBvcyA9IHkgLSAodG9wICsgd2luZG93LnBhZ2VZT2Zmc2V0KTtcblxuICBpZiAobGVmdFBvcyA8IDApIHtcbiAgICBsZWZ0UG9zID0gMDtcbiAgfSBlbHNlIGlmIChsZWZ0UG9zID4gd2lkdGgpIHtcbiAgICBsZWZ0UG9zID0gd2lkdGg7XG4gIH1cblxuICBpZiAodG9wUG9zIDwgMCkge1xuICAgIHRvcFBvcyA9IDA7XG4gIH0gZWxzZSBpZiAodG9wUG9zID4gaGVpZ2h0KSB7XG4gICAgdG9wUG9zID0gaGVpZ2h0O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBsZWZ0OiBsZWZ0UG9zLFxuICAgIHRvcDogdG9wUG9zLFxuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodFxuICB9O1xufTtcbmV4cG9ydCB2YXIgSEVYX0ZBTExCQUNLID0gJyc7XG5leHBvcnQgdmFyIEhTVl9GQUxMQkFDSyA9IFswLCAwLCAwXTtcbmV4cG9ydCB2YXIgUkdCX0ZBTExCQUNLID0gW05hTiwgTmFOLCBOYU4sIDFdO1xuZXhwb3J0IHZhciBSR0JfSk9JTiA9ICcsICc7IC8vIEdpdmVuIGEgc3RyaW5nLCB0aGlzIGF0dGVtcHRzIHRvIHJldHVybiBhIGZvcm1hdCB0aGF0IGNhbiBiZSBjb25zdW1lZCBieSBjaHJvbWEtanNcblxuZXhwb3J0IHZhciBwYXJzZUNvbG9yID0gZnVuY3Rpb24gcGFyc2VDb2xvcihpbnB1dCkge1xuICB2YXIgcGFyc2VkO1xuICBpZiAoIWlucHV0KSByZXR1cm4gbnVsbDtcblxuICBpZiAoaW5wdXQuaW5kZXhPZignLCcpID4gMCkge1xuICAgIGlmICghL15bXFxzLC4wLTldKiQvLnRlc3QoaW5wdXQpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgcmdiID0gaW5wdXQudHJpbSgpLnNwbGl0KCcsJykuZmlsdGVyKGZ1bmN0aW9uIChuKSB7XG4gICAgICByZXR1cm4gbiAhPT0gJyc7XG4gICAgfSkubWFwKE51bWJlcik7XG4gICAgcGFyc2VkID0gcmdiLmxlbmd0aCA+IDIgJiYgcmdiLmxlbmd0aCA8IDUgPyByZ2IgOiBIRVhfRkFMTEJBQ0s7XG4gIH0gZWxzZSB7XG4gICAgcGFyc2VkID0gaW5wdXQ7XG4gIH1cblxuICByZXR1cm4gcGFyc2VkO1xufTsgLy8gUmV0dXJucyB3aGV0aGVyIHRoZSBnaXZlbiBpbnB1dCB3aWxsIHJldHVybiBhIHZhbGlkIGNocm9tYS1qcyBvYmplY3Qgd2hlbiBkZXNpZ25hdGVkIGFzIG9uZSBvZlxuLy8gdGhlIGFjY2VwdGFibGUgZm9ybWF0czogaGV4LCByZ2IsIHJnYmFcblxuZXhwb3J0IHZhciBjaHJvbWFWYWxpZCA9IGZ1bmN0aW9uIGNocm9tYVZhbGlkKGNvbG9yKSB7XG4gIHZhciBwYXJzZWQgPSBjb2xvcjtcblxuICBpZiAodHlwZW9mIGNvbG9yID09PSAnc3RyaW5nJykge1xuICAgIHBhcnNlZCA9IHBhcnNlQ29sb3IoY29sb3IpO1xuICB9XG5cbiAgaWYgKCFwYXJzZWQpIHJldHVybiBmYWxzZTtcblxuICBpZiAoX3R5cGVvZihwYXJzZWQpID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBjaHJvbWEudmFsaWQocGFyc2VkLCAncmdiJykgfHwgY2hyb21hLnZhbGlkKHBhcnNlZCwgJ3JnYmEnKTtcbiAgfVxuXG4gIHJldHVybiBjaHJvbWEudmFsaWQoY29sb3IsICdoZXgnKTtcbn07IC8vIEdpdmVuIGFuIGlucHV0IGFuZCBvcGFjaXR5IGNvbmZpZ3VyYXRpb24sIHRoaXMgcmV0dXJucyBhIHZhbGlkIGNocm9tYS1qcyBvYmplY3RcblxuZXhwb3J0IHZhciBnZXRDaHJvbWFDb2xvciA9IGZ1bmN0aW9uIGdldENocm9tYUNvbG9yKGlucHV0KSB7XG4gIHZhciBhbGxvd09wYWNpdHkgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZhbHNlO1xuICB2YXIgcGFyc2VkID0gcGFyc2VDb2xvcihpbnB1dCk7XG5cbiAgaWYgKHBhcnNlZCAmJiBjaHJvbWFWYWxpZChwYXJzZWQpKSB7XG4gICAgLy8gdHlwZSBndWFyZCBmb3IgdGhlIGZ1bmN0aW9uIG92ZXJsb2FkXG4gICAgdmFyIGNocm9tYUNvbG9yID0gX3R5cGVvZihwYXJzZWQpID09PSAnb2JqZWN0JyA/IGNocm9tYShwYXJzZWQpIDogY2hyb21hKHBhcnNlZCk7XG5cbiAgICBpZiAoIWFsbG93T3BhY2l0eSAmJiBjaHJvbWFDb2xvci5hbHBoYSgpIDwgMSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNocm9tYUNvbG9yO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59OyAvLyBHaXZlbiBhbiBhcnJheSBvZiBvYmplY3RzIHdpdGgga2V5IHZhbHVlIHBhaXJzIHN0b3AvY29sb3IgcmV0dXJucyBhIGNzcyBsaW5lYXItZ3JhZGllbnRcbi8vIE9yIGdpdmVuIGFuIGFycmF5IG9mIGhleCBjb2xvcnMgcmV0dXJucyBhIGNzcyBsaW5lYXItZ3JhZGllbnRcblxuZXhwb3J0IHZhciBnZXRMaW5lYXJHcmFkaWVudCA9IGZ1bmN0aW9uIGdldExpbmVhckdyYWRpZW50KHBhbGV0dGUpIHtcbiAgdmFyIGxhc3RDb2xvclN0b3BBcnJheVBvc2l0aW9uID0gcGFsZXR0ZS5sZW5ndGggLSAxO1xuICB2YXIgbGluZWFyR3JhZGllbnQ7XG4gIHZhciBwYWxldHRlSGFzU3RvcHMgPSBwYWxldHRlLnNvbWUoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICByZXR1cm4gX3R5cGVvZihpdGVtKSA9PT0gJ29iamVjdCc7XG4gIH0pO1xuXG4gIGlmIChwYWxldHRlSGFzU3RvcHMpIHtcbiAgICB2YXIgcGFsZXR0ZUNvbG9yU3RvcCA9IHBhbGV0dGU7XG4gICAgbGluZWFyR3JhZGllbnQgPSBcImxpbmVhci1ncmFkaWVudCh0byByaWdodCwgXCIuY29uY2F0KHBhbGV0dGVDb2xvclN0b3BbMF0uY29sb3IsIFwiIDAlLFwiKTtcbiAgICB2YXIgbGFzdENvbG9yU3RvcERlY2ltYWwgPSAxMDAgLyBwYWxldHRlQ29sb3JTdG9wW2xhc3RDb2xvclN0b3BBcnJheVBvc2l0aW9uXS5zdG9wO1xuXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBsYXN0Q29sb3JTdG9wQXJyYXlQb3NpdGlvbjsgaSsrKSB7XG4gICAgICBsaW5lYXJHcmFkaWVudCA9IFwiXCIuY29uY2F0KGxpbmVhckdyYWRpZW50LCBcIiBcIikuY29uY2F0KHBhbGV0dGVDb2xvclN0b3BbaV0uY29sb3IsIFwiIFwiKS5jb25jYXQoTWF0aC5mbG9vcihwYWxldHRlQ29sb3JTdG9wW2ldLnN0b3AgKiBsYXN0Q29sb3JTdG9wRGVjaW1hbCksIFwiJSxcIik7XG4gICAgfVxuXG4gICAgdmFyIGxpbmVhckdyYWRpZW50U3R5bGUgPSBcIlwiLmNvbmNhdChsaW5lYXJHcmFkaWVudCwgXCIgXCIpLmNvbmNhdChwYWxldHRlQ29sb3JTdG9wW2xhc3RDb2xvclN0b3BBcnJheVBvc2l0aW9uXS5jb2xvciwgXCIgMTAwJSlcIik7XG4gICAgcmV0dXJuIGxpbmVhckdyYWRpZW50U3R5bGU7XG4gIH0gZWxzZSB7XG4gICAgbGluZWFyR3JhZGllbnQgPSBcImxpbmVhci1ncmFkaWVudCh0byByaWdodCwgXCIuY29uY2F0KHBhbGV0dGVbMF0sIFwiIDAlLFwiKTtcblxuICAgIGZvciAodmFyIF9pID0gMTsgX2kgPCBsYXN0Q29sb3JTdG9wQXJyYXlQb3NpdGlvbjsgX2krKykge1xuICAgICAgbGluZWFyR3JhZGllbnQgPSBcIlwiLmNvbmNhdChsaW5lYXJHcmFkaWVudCwgXCIgXCIpLmNvbmNhdChwYWxldHRlW19pXSwgXCIgXCIpLmNvbmNhdChNYXRoLmZsb29yKDEwMCAqIF9pIC8gbGFzdENvbG9yU3RvcEFycmF5UG9zaXRpb24pLCBcIiUsXCIpO1xuICAgIH1cblxuICAgIHZhciBfbGluZWFyR3JhZGllbnRTdHlsZSA9IFwiXCIuY29uY2F0KGxpbmVhckdyYWRpZW50LCBcIiBcIikuY29uY2F0KHBhbGV0dGVbbGFzdENvbG9yU3RvcEFycmF5UG9zaXRpb25dLCBcIiAxMDAlKVwiKTtcblxuICAgIHJldHVybiBfbGluZWFyR3JhZGllbnRTdHlsZTtcbiAgfVxufTsgLy8gR2l2ZW4gYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoIGtleSB2YWx1ZSBwYWlycyBzdG9wL2NvbG9yIG9yIGFuIGFycmF5IG9mIGhleCBjb2xvcnNcbi8vIHJldHVybnMgYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoIGtleSB2YWx1ZSBwYWlycyBjb2xvci93aWR0aFxuXG5leHBvcnQgdmFyIGdldEZpeGVkTGluZWFyR3JhZGllbnQgPSBmdW5jdGlvbiBnZXRGaXhlZExpbmVhckdyYWRpZW50KHBhbGV0dGUpIHtcbiAgdmFyIHBhbGV0dGVIYXNTdG9wcyA9IHBhbGV0dGUuc29tZShmdW5jdGlvbiAoaXRlbSkge1xuICAgIHJldHVybiBfdHlwZW9mKGl0ZW0pID09PSAnb2JqZWN0JztcbiAgfSk7XG5cbiAgaWYgKHBhbGV0dGVIYXNTdG9wcykge1xuICAgIHZhciBwYWxldHRlQ29sb3JTdG9wID0gcGFsZXR0ZTtcbiAgICB2YXIgZml4ZWRMaW5lYXJHcmFkaWVudFdpdGhTdG9wcyA9IHBhbGV0dGVDb2xvclN0b3AubWFwKGZ1bmN0aW9uIChjb2xvclN0b3AsIGluZGV4KSB7XG4gICAgICB2YXIgbGFzdENvbG9yU3RvcEFycmF5UG9zaXRpb24gPSBwYWxldHRlLmxlbmd0aCAtIDE7XG4gICAgICB2YXIgbGFzdENvbG9yU3RvcERlY2ltYWwgPSAxMDAgLyBwYWxldHRlQ29sb3JTdG9wW2xhc3RDb2xvclN0b3BBcnJheVBvc2l0aW9uXS5zdG9wO1xuICAgICAgdmFyIGlzRmlyc3RDb2xvclN0b3AgPSBpbmRleCA9PT0gMDtcbiAgICAgIHZhciBwcmV2aW91c0NvbG9yU3RvcFdpZHRoO1xuXG4gICAgICBpZiAoaXNGaXJzdENvbG9yU3RvcCkge1xuICAgICAgICBwcmV2aW91c0NvbG9yU3RvcFdpZHRoID0gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByZXZpb3VzQ29sb3JTdG9wV2lkdGggPSBNYXRoLmZsb29yKHBhbGV0dGVDb2xvclN0b3BbaW5kZXggLSAxXS5zdG9wICogbGFzdENvbG9yU3RvcERlY2ltYWwpO1xuICAgICAgfVxuXG4gICAgICB2YXIgY3VycmVudENvbG9yU3RvcFdpZHRoID0gTWF0aC5mbG9vcihjb2xvclN0b3Auc3RvcCAqIGxhc3RDb2xvclN0b3BEZWNpbWFsKTtcbiAgICAgIHZhciBjb2xvclN0b3BXaWR0aCA9IGN1cnJlbnRDb2xvclN0b3BXaWR0aCAtIHByZXZpb3VzQ29sb3JTdG9wV2lkdGg7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb2xvcjogY29sb3JTdG9wLmNvbG9yLFxuICAgICAgICB3aWR0aDogXCJcIi5jb25jYXQoY29sb3JTdG9wV2lkdGgsIFwiJVwiKVxuICAgICAgfTtcbiAgICB9KTtcbiAgICByZXR1cm4gZml4ZWRMaW5lYXJHcmFkaWVudFdpdGhTdG9wcztcbiAgfSBlbHNlIHtcbiAgICB2YXIgX3BhbGV0dGVDb2xvclN0b3AgPSBwYWxldHRlO1xuICAgIHZhciBwYWxldHRlV2lkdGggPSAxMDAgLyBwYWxldHRlLmxlbmd0aDtcblxuICAgIHZhciBmaXhlZExpbmVhckdyYWRpZW50V2lkdGhBdXRvID0gX3BhbGV0dGVDb2xvclN0b3AubWFwKGZ1bmN0aW9uIChoZXhDb2RlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb2xvcjogaGV4Q29kZSxcbiAgICAgICAgd2lkdGg6IFwiXCIuY29uY2F0KHBhbGV0dGVXaWR0aCwgXCIlXCIpXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGZpeGVkTGluZWFyR3JhZGllbnRXaWR0aEF1dG87XG4gIH1cbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJsYWJlbFwiLCBcImNvbG9yXCIsIFwidG9vbHRpcENvbnRlbnRcIiwgXCJ0b29sdGlwUG9zaXRpb25cIiwgXCJ0aXRsZVwiLCBcImljb25UeXBlXCIsIFwib25DbGlja1wiLCBcIm9uQ2xpY2tBcmlhTGFiZWxcIiwgXCJocmVmXCIsIFwicmVsXCIsIFwidGFyZ2V0XCIsIFwic2l6ZVwiXTtcblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IEZyYWdtZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBrZXlzT2YgfSBmcm9tICcuLi8uLi9jb21tb24nO1xuaW1wb3J0IHsgZ2V0U2VjdXJlUmVsRm9yVGFyZ2V0IH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpVG9vbFRpcCB9IGZyb20gJy4uLy4uL3Rvb2xfdGlwJztcbmltcG9ydCB7IEV1aUljb24gfSBmcm9tICcuLi8uLi9pY29uJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgY29sb3JUb0NsYXNzTWFwID0ge1xuICBhY2NlbnQ6ICdldWlCZXRhQmFkZ2UtLWFjY2VudCcsXG4gIHN1YmR1ZWQ6ICdldWlCZXRhQmFkZ2UtLXN1YmR1ZWQnLFxuICBob2xsb3c6ICdldWlCZXRhQmFkZ2UtLWhvbGxvdydcbn07XG5leHBvcnQgdmFyIENPTE9SUyA9IGtleXNPZihjb2xvclRvQ2xhc3NNYXApO1xuZXhwb3J0IHZhciBzaXplVG9DbGFzc01hcCA9IHtcbiAgczogJ2V1aUJldGFCYWRnZS0tc21hbGwnLFxuICBtOiBudWxsXG59O1xuZXhwb3J0IHZhciBTSVpFUyA9IGtleXNPZihzaXplVG9DbGFzc01hcCk7XG5leHBvcnQgdmFyIEV1aUJldGFCYWRnZSA9IGZ1bmN0aW9uIEV1aUJldGFCYWRnZShfcmVmKSB7XG4gIHZhciBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIGxhYmVsID0gX3JlZi5sYWJlbCxcbiAgICAgIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnaG9sbG93JyA6IF9yZWYkY29sb3IsXG4gICAgICB0b29sdGlwQ29udGVudCA9IF9yZWYudG9vbHRpcENvbnRlbnQsXG4gICAgICBfcmVmJHRvb2x0aXBQb3NpdGlvbiA9IF9yZWYudG9vbHRpcFBvc2l0aW9uLFxuICAgICAgdG9vbHRpcFBvc2l0aW9uID0gX3JlZiR0b29sdGlwUG9zaXRpb24gPT09IHZvaWQgMCA/ICd0b3AnIDogX3JlZiR0b29sdGlwUG9zaXRpb24sXG4gICAgICB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICBpY29uVHlwZSA9IF9yZWYuaWNvblR5cGUsXG4gICAgICBvbkNsaWNrID0gX3JlZi5vbkNsaWNrLFxuICAgICAgb25DbGlja0FyaWFMYWJlbCA9IF9yZWYub25DbGlja0FyaWFMYWJlbCxcbiAgICAgIGhyZWYgPSBfcmVmLmhyZWYsXG4gICAgICByZWwgPSBfcmVmLnJlbCxcbiAgICAgIHRhcmdldCA9IF9yZWYudGFyZ2V0LFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gJ20nIDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBzaW5nbGVMZXR0ZXIgPSBmYWxzZTtcblxuICBpZiAodHlwZW9mIGxhYmVsID09PSAnc3RyaW5nJyAmJiBsYWJlbC5sZW5ndGggPT09IDEpIHtcbiAgICBzaW5nbGVMZXR0ZXIgPSB0cnVlO1xuICB9XG5cbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlCZXRhQmFkZ2UnLCB7XG4gICAgJ2V1aUJldGFCYWRnZS0taWNvbk9ubHknOiBpY29uVHlwZSxcbiAgICAnZXVpQmV0YUJhZGdlLS1zaW5nbGVMZXR0ZXInOiBzaW5nbGVMZXR0ZXIsXG4gICAgJ2V1aUJldGFCYWRnZS1pc0NsaWNrYWJsZSc6IG9uQ2xpY2sgfHwgaHJlZlxuICB9LCBjb2xvclRvQ2xhc3NNYXBbY29sb3JdLCBzaXplVG9DbGFzc01hcFtzaXplXSwgY2xhc3NOYW1lKTtcbiAgdmFyIGljb247XG5cbiAgaWYgKGljb25UeXBlKSB7XG4gICAgaWNvbiA9IF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgICAgY2xhc3NOYW1lOiBcImV1aUJldGFCYWRnZV9faWNvblwiLFxuICAgICAgdHlwZTogaWNvblR5cGUsXG4gICAgICBzaXplOiBzaXplID09PSAnbScgPyAnbScgOiAncycsXG4gICAgICBcImFyaWEtaGlkZGVuXCI6IFwidHJ1ZVwiLFxuICAgICAgY29sb3I6IFwiaW5oZXJpdFwiIC8vIGZvcmNlcyB0aGUgaWNvbiB0byBpbmhlcml0IGl0cyBwYXJlbnQgY29sb3JcblxuICAgIH0pO1xuICB9XG5cbiAgdmFyIEVsZW1lbnQgPSBocmVmID8gJ2EnIDogJ2J1dHRvbic7XG4gIHZhciByZWxPYmogPSB7fTtcblxuICBpZiAoaHJlZikge1xuICAgIHJlbE9iai5ocmVmID0gaHJlZjtcbiAgICByZWxPYmoudGFyZ2V0ID0gdGFyZ2V0O1xuICAgIHJlbE9iai5yZWwgPSBnZXRTZWN1cmVSZWxGb3JUYXJnZXQoe1xuICAgICAgaHJlZjogaHJlZixcbiAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgcmVsOiByZWxcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChvbkNsaWNrKSB7XG4gICAgcmVsT2JqLm9uQ2xpY2sgPSBvbkNsaWNrO1xuICB9XG5cbiAgdmFyIGNvbnRlbnQ7XG5cbiAgaWYgKG9uQ2xpY2sgfHwgaHJlZikge1xuICAgIGNvbnRlbnQgPSBfX19FbW90aW9uSlNYKEVsZW1lbnQsIF9leHRlbmRzKHtcbiAgICAgIFwiYXJpYS1sYWJlbFwiOiBvbkNsaWNrQXJpYUxhYmVsLFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgdGl0bGU6IHR5cGVvZiBsYWJlbCA9PT0gJ3N0cmluZycgPyBsYWJlbCA6IHRpdGxlXG4gICAgfSwgcmVsT2JqLCByZXN0KSwgaWNvbiB8fCBsYWJlbCk7XG5cbiAgICBpZiAodG9vbHRpcENvbnRlbnQpIHtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVRvb2xUaXAsIHtcbiAgICAgICAgcG9zaXRpb246IHRvb2x0aXBQb3NpdGlvbixcbiAgICAgICAgY29udGVudDogdG9vbHRpcENvbnRlbnQsXG4gICAgICAgIHRpdGxlOiB0aXRsZSB8fCBsYWJlbFxuICAgICAgfSwgY29udGVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEZyYWdtZW50LCBudWxsLCBjb250ZW50KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKHRvb2x0aXBDb250ZW50KSB7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlUb29sVGlwLCB7XG4gICAgICAgIHBvc2l0aW9uOiB0b29sdGlwUG9zaXRpb24sXG4gICAgICAgIGNvbnRlbnQ6IHRvb2x0aXBDb250ZW50LFxuICAgICAgICB0aXRsZTogdGl0bGUgfHwgbGFiZWxcbiAgICAgIH0sIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIF9leHRlbmRzKHtcbiAgICAgICAgdGFiSW5kZXg6IDAsXG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgcm9sZTogXCJidXR0b25cIlxuICAgICAgfSwgcmVzdCksIGljb24gfHwgbGFiZWwpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHNwYW5UaXRsZSA9IHRpdGxlIHx8IGxhYmVsO1xuXG4gICAgICBpZiAoc3BhblRpdGxlICYmIHR5cGVvZiBzcGFuVGl0bGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcIk9ubHkgc3RyaW5nIHRpdGxlcyBhcmUgcGVybWl0dGVkIG9uIGJhZGdlcyB0aGF0IGRvIG5vdCB1c2UgdG9vbHRpcHMuIEZvdW5kOiBcIi5jb25jYXQoX3R5cGVvZihzcGFuVGl0bGUpKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwic3BhblwiLCBfZXh0ZW5kcyh7XG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgdGl0bGU6IHNwYW5UaXRsZVxuICAgICAgfSwgcmVzdCksIGljb24gfHwgbGFiZWwpO1xuICAgIH1cbiAgfVxufTtcbkV1aUJldGFCYWRnZS5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgKiBXaWxsIGFwcGx5IGFuIG9uY2xpY2sgdG8gdGhlIGJhZGdlIGl0c2VsZlxuICAgICAqL1xuICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICAgKiBBcmlhIGxhYmVsIGFwcGxpZWQgdG8gdGhlIG9uQ2xpY2sgYnV0dG9uXG4gICAgICovXG4gIG9uQ2xpY2tBcmlhTGFiZWw6IFByb3BUeXBlcy5hbnksXG4gIGhyZWY6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHRhcmdldDogUHJvcFR5cGVzLnN0cmluZyxcbiAgcmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAqIFN1cHBseSBhbiBpY29uIHR5cGUgaWYgdGhlIGJhZGdlIHNob3VsZCBqdXN0IGJlIGFuIGljb25cbiAgICAgKi9cbiAgaWNvblR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhY2Nlc3NpYmlsaXR5XCIsIFwiYWRkRGF0YUFwcFwiLCBcImFkdmFuY2VkU2V0dGluZ3NBcHBcIiwgXCJhZ2VudEFwcFwiLCBcImFnZ3JlZ2F0ZVwiLCBcImFsZXJ0XCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbG9ja1wiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQUNpcmNsZUZpbGxlZFwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRvY3VtZW50XCIsIFwiZG9jdW1lbnRFZGl0XCIsIFwiZG9jdW1lbnRhdGlvblwiLCBcImRvY3VtZW50c1wiLCBcImRvdFwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJleGl0XCIsIFwiZXhwYW5kXCIsIFwiZXhwYW5kTWluaVwiLCBcImV4cG9ydEFjdGlvblwiLCBcImV5ZVwiLCBcImV5ZUNsb3NlZFwiLCBcImZhY2VIYXBweVwiLCBcImZhY2VOZXV0cmFsXCIsIFwiZmFjZVNhZFwiLCBcImZpbGViZWF0QXBwXCIsIFwiZmlsdGVyXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhDbG9zZVwiLCBcImluZGV4RWRpdFwiLCBcImluZGV4Rmx1c2hcIiwgXCJpbmRleE1hbmFnZW1lbnRBcHBcIiwgXCJpbmRleE1hcHBpbmdcIiwgXCJpbmRleE9wZW5cIiwgXCJpbmRleFBhdHRlcm5BcHBcIiwgXCJpbmRleFJvbGx1cEFwcFwiLCBcImluZGV4UnVudGltZVwiLCBcImluZGV4U2V0dGluZ3NcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibmFtZXNwYWNlXCIsIFwibmVzdGVkXCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZWxpbmVBcHBcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzQXBwXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpb25BcHBcIiwgXCJ0aW1lUmVmcmVzaFwiLCBcInRpbWVzbGlkZXJcIiwgXCJ0cmFpbmluZ1wiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZF0pLFxuXG4gIC8qKlxuICAgICAqIE9uZSB3b3JkIGxhYmVsIGxpa2UgXCJCZXRhXCIgb3IgXCJMYWJcIlxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIE9uZSB3b3JkIGxhYmVsIGxpa2UgXCJCZXRhXCIgb3IgXCJMYWJcIlxuICAgICAqL1xuICBsYWJlbDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsXG5cbiAgLyoqXG4gICAgICogQ29udGVudCBmb3IgdGhlIHRvb2x0aXBcbiAgICAgKi9cbiAgdG9vbHRpcENvbnRlbnQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ub2RlLCBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubm9kZSwgUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZF0pXSksXG5cbiAgLyoqXG4gICAgICogQ3VzdG9tIHBvc2l0aW9uIG9mIHRoZSB0b29sdGlwXG4gICAgICovXG4gIHRvb2x0aXBQb3NpdGlvbjogUHJvcFR5cGVzLm9uZU9mKFtcInRvcFwiLCBcInJpZ2h0XCIsIFwiYm90dG9tXCIsIFwibGVmdFwiXSksXG5cbiAgLyoqXG4gICAgICogT3B0aW9uYWwgdGl0bGUgd2lsbCBiZSBzdXBwbGllZCBhcyB0b29sdGlwIHRpdGxlIG9yIHRpdGxlIGF0dHJpYnV0ZVxuICAgICAqIG90aGVyd2lzZSB0aGUgbGFiZWwgd2lsbCBiZSB1c2VkXG4gICAgICovXG4gIHRpdGxlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmddKV0pLFxuXG4gIC8qKlxuICAgICAqIEFjY2VwdHMgYWNjZW50LCBzdWJkdWVkIGFuZCBob2xsb3cuXG4gICAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMub25lT2YoW1wiYWNjZW50XCIsIFwic3ViZHVlZFwiLCBcImhvbGxvd1wiXSksXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZihbXCJzXCIsIFwibVwiXSlcbn07IiwgImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxudmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiYW5jaG9yQ2xhc3NOYW1lXCIsIFwiY29udGVudFwiLCBcInRpdGxlXCIsIFwiZGVsYXlcIiwgXCJkaXNwbGF5XCJdO1xuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCwgY2xvbmVFbGVtZW50LCBGcmFnbWVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsga2V5c09mIH0gZnJvbSAnLi4vY29tbW9uJztcbmltcG9ydCB7IEV1aVBvcnRhbCB9IGZyb20gJy4uL3BvcnRhbCc7XG5pbXBvcnQgeyBFdWlUb29sVGlwUG9wb3ZlciB9IGZyb20gJy4vdG9vbF90aXBfcG9wb3Zlcic7XG5pbXBvcnQgeyBlbnF1ZXVlU3RhdGVDaGFuZ2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZWFjdCc7XG5pbXBvcnQgeyBmaW5kUG9wb3ZlclBvc2l0aW9uLCBodG1sSWRHZW5lcmF0b3IgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFdWlSZXNpemVPYnNlcnZlciB9IGZyb20gJy4uL29ic2VydmVyL3Jlc2l6ZV9vYnNlcnZlcic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIHBvc2l0aW9uc1RvQ2xhc3NOYW1lTWFwID0ge1xuICB0b3A6ICdldWlUb29sVGlwLS10b3AnLFxuICByaWdodDogJ2V1aVRvb2xUaXAtLXJpZ2h0JyxcbiAgYm90dG9tOiAnZXVpVG9vbFRpcC0tYm90dG9tJyxcbiAgbGVmdDogJ2V1aVRvb2xUaXAtLWxlZnQnXG59O1xuZXhwb3J0IHZhciBQT1NJVElPTlMgPSBrZXlzT2YocG9zaXRpb25zVG9DbGFzc05hbWVNYXApO1xudmFyIGRlbGF5VG9Nc01hcCA9IHtcbiAgcmVndWxhcjogMjUwLFxuICBsb25nOiAyNTAgKiA1XG59O1xudmFyIGRpc3BsYXlUb0NsYXNzTmFtZU1hcCA9IHtcbiAgaW5saW5lQmxvY2s6IHVuZGVmaW5lZCxcbiAgYmxvY2s6ICdldWlUb29sVGlwQW5jaG9yLS1kaXNwbGF5QmxvY2snXG59O1xudmFyIERFRkFVTFRfVE9PTFRJUF9TVFlMRVMgPSB7XG4gIC8vIHBvc2l0aW9uIHRoZSB0b29sdGlwIGNvbnRlbnQgbmVhciB0aGUgdG9wLWxlZnRcbiAgLy8gY29ybmVyIG9mIHRoZSB3aW5kb3cgc28gaXQgY2FuJ3QgY3JlYXRlIHNjcm9sbGJhcnNcbiAgLy8gNTAsNTAgYmVjYXVzZSB3aG8ga25vd3Mgd2hhdCBuZWdhdGl2ZSBtYXJnaW5zLCBwYWRkaW5nLCBldGNcbiAgdG9wOiA1MCxcbiAgbGVmdDogNTAsXG4gIC8vIGp1c3QgaW4gY2FzZSwgYXZvaWQgYW55IHBvdGVudGlhbCBmbGlja2VyIGJ5IGhpZGluZ1xuICAvLyB0aGUgdG9vbHRpcCBiZWZvcmUgaXQgaXMgcG9zaXRpb25lZFxuICBvcGFjaXR5OiAwLFxuICAvLyBwcmV2ZW50IGFjY2lkZW50YWwgbW91c2UgaW50ZXJhY3Rpb24gd2hpbGUgcG9zaXRpb25pbmdcbiAgdmlzaWJpbGl0eTogJ2hpZGRlbidcbn07XG5leHBvcnQgdmFyIEV1aVRvb2xUaXAgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEV1aVRvb2xUaXAsIF9Db21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoRXVpVG9vbFRpcCk7XG5cbiAgZnVuY3Rpb24gRXVpVG9vbFRpcCgpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpVG9vbFRpcCk7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbC5hcHBseShfc3VwZXIsIFt0aGlzXS5jb25jYXQoYXJncykpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIl9pc01vdW50ZWRcIiwgZmFsc2UpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImFuY2hvclwiLCBudWxsKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJwb3BvdmVyXCIsIG51bGwpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInRpbWVvdXRJZFwiLCB2b2lkIDApO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInN0YXRlXCIsIHtcbiAgICAgIHZpc2libGU6IGZhbHNlLFxuICAgICAgaGFzRm9jdXM6IGZhbHNlLFxuICAgICAgY2FsY3VsYXRlZFBvc2l0aW9uOiBfdGhpcy5wcm9wcy5wb3NpdGlvbixcbiAgICAgIHRvb2xUaXBTdHlsZXM6IERFRkFVTFRfVE9PTFRJUF9TVFlMRVMsXG4gICAgICBhcnJvd1N0eWxlczogdW5kZWZpbmVkLFxuICAgICAgaWQ6IF90aGlzLnByb3BzLmlkIHx8IGh0bWxJZEdlbmVyYXRvcigpKClcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJjbGVhckFuaW1hdGlvblRpbWVvdXRcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKF90aGlzLnRpbWVvdXRJZCkge1xuICAgICAgICBfdGhpcy50aW1lb3V0SWQgPSBjbGVhclRpbWVvdXQoX3RoaXMudGltZW91dElkKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJ0ZXN0QW5jaG9yXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIHdoZW4gdGhlIHRvb2x0aXAgaXMgdmlzaWJsZSwgdGhpcyBjaGVja3MgaWYgdGhlIGFuY2hvciBpcyBzdGlsbCBwYXJ0IG9mIGRvY3VtZW50XG4gICAgICAvLyB0aGlzIGZpeGVzIHdoZW4gdGhlIHJlYWN0IHJvb3QgaXMgcmVtb3ZlZCBmcm9tIHRoZSBkb20gd2l0aG91dCB1bm1vdW50aW5nXG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZWxhc3RpYy9ldWkvaXNzdWVzLzExMDVcbiAgICAgIGlmIChkb2N1bWVudC5ib2R5LmNvbnRhaW5zKF90aGlzLmFuY2hvcikgPT09IGZhbHNlKSB7XG4gICAgICAgIC8vIHRoZSBhbmNob3IgaXMgbm8gbG9uZ2VyIHBhcnQgb2YgYGRvY3VtZW50YFxuICAgICAgICBfdGhpcy5oaWRlVG9vbFRpcCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKF90aGlzLnN0YXRlLnZpc2libGUpIHtcbiAgICAgICAgICAvLyBpZiBzdGlsbCB2aXNpYmxlLCBrZWVwIGNoZWNraW5nXG4gICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKF90aGlzLnRlc3RBbmNob3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic2V0UG9wb3ZlclJlZlwiLCBmdW5jdGlvbiAocmVmKSB7XG4gICAgICBfdGhpcy5wb3BvdmVyID0gcmVmOyAvLyBpZiB0aGUgcG9wb3ZlciBoYXMgYmVlbiB1bm1vdW50ZWQsIGNsZWFyXG4gICAgICAvLyBhbnkgcHJldmlvdXMga25vd2xlZGdlIGFib3V0IGl0cyBzaXplXG5cbiAgICAgIGlmIChyZWYgPT0gbnVsbCkge1xuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgdG9vbFRpcFN0eWxlczogREVGQVVMVF9UT09MVElQX1NUWUxFUyxcbiAgICAgICAgICBhcnJvd1N0eWxlczogdW5kZWZpbmVkXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInNob3dUb29sVGlwXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICghX3RoaXMudGltZW91dElkKSB7XG4gICAgICAgIF90aGlzLnRpbWVvdXRJZCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGVucXVldWVTdGF0ZUNoYW5nZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICB2aXNpYmxlOiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZGVsYXlUb01zTWFwW190aGlzLnByb3BzLmRlbGF5XSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicG9zaXRpb25Ub29sVGlwXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciByZXF1ZXN0ZWRQb3NpdGlvbiA9IF90aGlzLnByb3BzLnBvc2l0aW9uO1xuXG4gICAgICBpZiAoIV90aGlzLmFuY2hvciB8fCAhX3RoaXMucG9wb3Zlcikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBfZmluZFBvcG92ZXJQb3NpdGlvbiA9IGZpbmRQb3BvdmVyUG9zaXRpb24oe1xuICAgICAgICBhbmNob3I6IF90aGlzLmFuY2hvcixcbiAgICAgICAgcG9wb3ZlcjogX3RoaXMucG9wb3ZlcixcbiAgICAgICAgcG9zaXRpb246IHJlcXVlc3RlZFBvc2l0aW9uLFxuICAgICAgICBvZmZzZXQ6IDE2LFxuICAgICAgICAvLyBvZmZzZXQgcG9wb3ZlciAxNnB4IGZyb20gdGhlIGFuY2hvclxuICAgICAgICBhcnJvd0NvbmZpZzoge1xuICAgICAgICAgIGFycm93V2lkdGg6IDEyLFxuICAgICAgICAgIGFycm93QnVmZmVyOiA0XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgICAgIHBvc2l0aW9uID0gX2ZpbmRQb3BvdmVyUG9zaXRpb24ucG9zaXRpb24sXG4gICAgICAgICAgbGVmdCA9IF9maW5kUG9wb3ZlclBvc2l0aW9uLmxlZnQsXG4gICAgICAgICAgdG9wID0gX2ZpbmRQb3BvdmVyUG9zaXRpb24udG9wLFxuICAgICAgICAgIGFycm93ID0gX2ZpbmRQb3BvdmVyUG9zaXRpb24uYXJyb3c7IC8vIElmIGVuY3JvYWNoaW5nIHRoZSByaWdodCBlZGdlIG9mIHRoZSB3aW5kb3c6XG4gICAgICAvLyBXaGVuIGBwcm9wcy5jb250ZW50YCBjaGFuZ2VzIGFuZCBpcyBsb25nZXIgdGhhbiBgcHJldlByb3BzLmNvbnRlbnRgLCB0aGUgdG9vbHRpcCB3aWR0aCByZW1haW5zIGFuZFxuICAgICAgLy8gdGhlIHJlc2l6ZU9ic2VydmVyIGNhbGxiYWNrIHdpbGwgZmlyZSB0d2ljZSAob25jZSBmb3IgdmVydGljYWwgcmVzaXplIGNhdXNlZCBieSB0ZXh0IGxpbmUgd3JhcHBpbmcsXG4gICAgICAvLyBvbmNlIGZvciBhIHN1YnNlcXVlbnQgcG9zaXRpb24gY29ycmVjdGlvbikgYW5kIGNhdXNlIGEgZmxhc2ggcmVyZW5kZXIgYW5kIHJlcG9zaXRpb24uXG4gICAgICAvLyBUbyBwcmV2ZW50IHRoaXMsIHdlIGNhbiBvcmllbnQgZnJvbSB0aGUgcmlnaHQgc28gdGhhdCB0ZXh0IGxpbmUgd3JhcHBpbmcgZG9lcyBub3Qgb2NjdXIsIG5lZ2F0aW5nXG4gICAgICAvLyB0aGUgc2Vjb25kIHJlc2l6ZU9ic2VydmVyIGNhbGxiYWNrIGNhbGwuXG5cblxuICAgICAgdmFyIHdpbmRvd1dpZHRoID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoIHx8IHdpbmRvdy5pbm5lcldpZHRoO1xuICAgICAgdmFyIHVzZVJpZ2h0VmFsdWUgPSB3aW5kb3dXaWR0aCAvIDIgPCBsZWZ0O1xuICAgICAgdmFyIHRvb2xUaXBTdHlsZXMgPSB7XG4gICAgICAgIHRvcDogdG9wLFxuICAgICAgICBsZWZ0OiB1c2VSaWdodFZhbHVlID8gJ2F1dG8nIDogbGVmdCxcbiAgICAgICAgcmlnaHQ6IHVzZVJpZ2h0VmFsdWUgPyB3aW5kb3dXaWR0aCAtIGxlZnQgLSBfdGhpcy5wb3BvdmVyLm9mZnNldFdpZHRoIDogJ2F1dG8nXG4gICAgICB9O1xuXG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHZpc2libGU6IHRydWUsXG4gICAgICAgIGNhbGN1bGF0ZWRQb3NpdGlvbjogcG9zaXRpb24sXG4gICAgICAgIHRvb2xUaXBTdHlsZXM6IHRvb2xUaXBTdHlsZXMsXG4gICAgICAgIGFycm93U3R5bGVzOiBhcnJvd1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGlkZVRvb2xUaXBcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuY2xlYXJBbmltYXRpb25UaW1lb3V0KCk7XG5cbiAgICAgIGVucXVldWVTdGF0ZUNoYW5nZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChfdGhpcy5faXNNb3VudGVkKSB7XG4gICAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgdmlzaWJsZTogZmFsc2VcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25Gb2N1c1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGhhc0ZvY3VzOiB0cnVlXG4gICAgICB9KTtcblxuICAgICAgX3RoaXMuc2hvd1Rvb2xUaXAoKTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkJsdXJcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBoYXNGb2N1czogZmFsc2VcbiAgICAgIH0pO1xuXG4gICAgICBfdGhpcy5oaWRlVG9vbFRpcCgpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uTW91c2VPdXRcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAvLyBQcmV2ZW50IG1vdXNpbmcgb3ZlciBjaGlsZHJlbiBmcm9tIGhpZGluZyB0aGUgdG9vbHRpcCBieSB0ZXN0aW5nIGZvciB3aGV0aGVyIHRoZSBtb3VzZSBoYXNcbiAgICAgIC8vIGxlZnQgdGhlIGFuY2hvciBmb3IgYSBub24tY2hpbGQuXG4gICAgICBpZiAoX3RoaXMuYW5jaG9yID09PSBldmVudC5yZWxhdGVkVGFyZ2V0IHx8IF90aGlzLmFuY2hvciAhPSBudWxsICYmICFfdGhpcy5hbmNob3IuY29udGFpbnMoZXZlbnQucmVsYXRlZFRhcmdldCkpIHtcbiAgICAgICAgaWYgKCFfdGhpcy5zdGF0ZS5oYXNGb2N1cykge1xuICAgICAgICAgIF90aGlzLmhpZGVUb29sVGlwKCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKF90aGlzLnByb3BzLm9uTW91c2VPdXQpIHtcbiAgICAgICAgX3RoaXMucHJvcHMub25Nb3VzZU91dChldmVudCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoRXVpVG9vbFRpcCwgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICB0aGlzLl9pc01vdW50ZWQgPSB0cnVlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIHRoaXMuY2xlYXJBbmltYXRpb25UaW1lb3V0KCk7XG4gICAgICB0aGlzLl9pc01vdW50ZWQgPSBmYWxzZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkVXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSkge1xuICAgICAgaWYgKHByZXZTdGF0ZS52aXNpYmxlID09PSBmYWxzZSAmJiB0aGlzLnN0YXRlLnZpc2libGUgPT09IHRydWUpIHtcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMudGVzdEFuY2hvcik7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzLmNoaWxkcmVuLFxuICAgICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzLmNsYXNzTmFtZSxcbiAgICAgICAgICBhbmNob3JDbGFzc05hbWUgPSBfdGhpcyRwcm9wcy5hbmNob3JDbGFzc05hbWUsXG4gICAgICAgICAgY29udGVudCA9IF90aGlzJHByb3BzLmNvbnRlbnQsXG4gICAgICAgICAgdGl0bGUgPSBfdGhpcyRwcm9wcy50aXRsZSxcbiAgICAgICAgICBkZWxheSA9IF90aGlzJHByb3BzLmRlbGF5LFxuICAgICAgICAgIGRpc3BsYXkgPSBfdGhpcyRwcm9wcy5kaXNwbGF5LFxuICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgICAgIHZhciBfdGhpcyRzdGF0ZSA9IHRoaXMuc3RhdGUsXG4gICAgICAgICAgYXJyb3dTdHlsZXMgPSBfdGhpcyRzdGF0ZS5hcnJvd1N0eWxlcyxcbiAgICAgICAgICBpZCA9IF90aGlzJHN0YXRlLmlkLFxuICAgICAgICAgIHRvb2xUaXBTdHlsZXMgPSBfdGhpcyRzdGF0ZS50b29sVGlwU3R5bGVzLFxuICAgICAgICAgIHZpc2libGUgPSBfdGhpcyRzdGF0ZS52aXNpYmxlO1xuICAgICAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUb29sVGlwJywgcG9zaXRpb25zVG9DbGFzc05hbWVNYXBbdGhpcy5zdGF0ZS5jYWxjdWxhdGVkUG9zaXRpb25dLCBjbGFzc05hbWUpO1xuICAgICAgdmFyIGFuY2hvckNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUb29sVGlwQW5jaG9yJywgZGlzcGxheSA/IGRpc3BsYXlUb0NsYXNzTmFtZU1hcFtkaXNwbGF5XSA6IG51bGwsIGFuY2hvckNsYXNzTmFtZSk7XG4gICAgICB2YXIgdG9vbHRpcDtcblxuICAgICAgaWYgKHZpc2libGUgJiYgKGNvbnRlbnQgfHwgdGl0bGUpKSB7XG4gICAgICAgIHRvb2x0aXAgPSBfX19FbW90aW9uSlNYKEV1aVBvcnRhbCwgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlUb29sVGlwUG9wb3ZlciwgX2V4dGVuZHMoe1xuICAgICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgICBzdHlsZTogdG9vbFRpcFN0eWxlcyxcbiAgICAgICAgICBwb3NpdGlvblRvb2xUaXA6IHRoaXMucG9zaXRpb25Ub29sVGlwLFxuICAgICAgICAgIHBvcG92ZXJSZWY6IHRoaXMuc2V0UG9wb3ZlclJlZixcbiAgICAgICAgICB0aXRsZTogdGl0bGUsXG4gICAgICAgICAgaWQ6IGlkLFxuICAgICAgICAgIHJvbGU6IFwidG9vbHRpcFwiXG4gICAgICAgIH0sIHJlc3QpLCBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgICAgICBzdHlsZTogYXJyb3dTdHlsZXMsXG4gICAgICAgICAgY2xhc3NOYW1lOiBcImV1aVRvb2xUaXBfX2Fycm93XCJcbiAgICAgICAgfSksIF9fX0Vtb3Rpb25KU1goRXVpUmVzaXplT2JzZXJ2ZXIsIHtcbiAgICAgICAgICBvblJlc2l6ZTogdGhpcy5wb3NpdGlvblRvb2xUaXBcbiAgICAgICAgfSwgZnVuY3Rpb24gKHJlc2l6ZVJlZikge1xuICAgICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgICAgICAgIHJlZjogcmVzaXplUmVmXG4gICAgICAgICAgfSwgY29udGVudCk7XG4gICAgICAgIH0pKSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBhbmNob3IgPSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganN4LWExMXkvbW91c2UtZXZlbnRzLWhhdmUta2V5LWV2ZW50c1xuICAgICAgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgICAgICByZWY6IGZ1bmN0aW9uIHJlZihhbmNob3IpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXMyLmFuY2hvciA9IGFuY2hvcjtcbiAgICAgICAgfSxcbiAgICAgICAgY2xhc3NOYW1lOiBhbmNob3JDbGFzc2VzLFxuICAgICAgICBvbk1vdXNlT3ZlcjogdGhpcy5zaG93VG9vbFRpcCxcbiAgICAgICAgb25Nb3VzZU91dDogdGhpcy5vbk1vdXNlT3V0XG4gICAgICB9LCAvKiNfX1BVUkVfXyovY2xvbmVFbGVtZW50KGNoaWxkcmVuLCBfb2JqZWN0U3ByZWFkKHtcbiAgICAgICAgb25Gb2N1czogZnVuY3Rpb24gb25Gb2N1cyhlKSB7XG4gICAgICAgICAgX3RoaXMyLm9uRm9jdXMoKTtcblxuICAgICAgICAgIGNoaWxkcmVuLnByb3BzLm9uRm9jdXMgJiYgY2hpbGRyZW4ucHJvcHMub25Gb2N1cyhlKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25CbHVyOiBmdW5jdGlvbiBvbkJsdXIoZSkge1xuICAgICAgICAgIF90aGlzMi5vbkJsdXIoKTtcblxuICAgICAgICAgIGNoaWxkcmVuLnByb3BzLm9uQmx1ciAmJiBjaGlsZHJlbi5wcm9wcy5vbkJsdXIoZSk7XG4gICAgICAgIH1cbiAgICAgIH0sIHZpc2libGUgJiYge1xuICAgICAgICAnYXJpYS1kZXNjcmliZWRieSc6IHRoaXMuc3RhdGUuaWRcbiAgICAgIH0pKSk7XG5cbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEZyYWdtZW50LCBudWxsLCBhbmNob3IsIHRvb2x0aXApO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlUb29sVGlwO1xufShDb21wb25lbnQpO1xuXG5fZGVmaW5lUHJvcGVydHkoRXVpVG9vbFRpcCwgXCJkZWZhdWx0UHJvcHNcIiwge1xuICBwb3NpdGlvbjogJ3RvcCcsXG4gIGRlbGF5OiAncmVndWxhcicsXG4gIGRpc3BsYXk6ICdpbmxpbmVCbG9jaydcbn0pO1xuXG5FdWlUb29sVGlwLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAgICogUGFzc2VzIG9udG8gdGhlIHRoZSB0cmlnZ2VyLlxuICAgICAqL1xuICBhbmNob3JDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogVGhlIGluLXZpZXcgdHJpZ2dlciBmb3IgeW91ciB0b29sdGlwLlxuICAgICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICAgKiBQYXNzZXMgb250byB0aGUgdG9vbHRpcCBpdHNlbGYsIG5vdCB0aGUgdHJpZ2dlci5cbiAgICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAqIFRoZSBtYWluIGNvbnRlbnQgb2YgeW91ciB0b29sdGlwLlxuICAgICAqL1xuICBjb250ZW50OiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICAgKiBDb21tb24gZGlzcGxheSBhbHRlcm5hdGl2ZXMgZm9yIHRoZSBhbmNob3Igd3JhcHBlclxuICAgICAqL1xuICBkaXNwbGF5OiBQcm9wVHlwZXMub25lT2YoW1wiaW5saW5lQmxvY2tcIiwgXCJibG9ja1wiXSksXG5cbiAgLyoqXG4gICAgICogRGVsYXkgYmVmb3JlIHNob3dpbmcgdG9vbHRpcC4gR29vZCBmb3IgcmVwZWF0YWJsZSBpdGVtcy5cbiAgICAgKi9cbiAgZGVsYXk6IFByb3BUeXBlcy5vbmVPZihbXCJyZWd1bGFyXCIsIFwibG9uZ1wiXSkuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICAgKiBBbiBvcHRpb25hbCB0aXRsZSBmb3IgeW91ciB0b29sdGlwLlxuICAgICAqL1xuICB0aXRsZTogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAgICogVW5sZXNzIHlvdSBwcm92aWRlIG9uZSwgdGhpcyB3aWxsIGJlIHJhbmRvbWx5IGdlbmVyYXRlZC5cbiAgICAgKi9cbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogU3VnZ2VzdGVkIHBvc2l0aW9uLiBJZiB0aGVyZSBpcyBub3QgZW5vdWdoIHJvb20gZm9yIGl0IHRoaXMgd2lsbCBiZSBjaGFuZ2VkLlxuICAgICAqL1xuICBwb3NpdGlvbjogUHJvcFR5cGVzLm9uZU9mKFtcInRvcFwiLCBcInJpZ2h0XCIsIFwiYm90dG9tXCIsIFwibGVmdFwiXSkuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICAgKiBJZiBzdXBwbGllZCwgY2FsbGVkIHdoZW4gbW91c2UgbW92ZW1lbnQgY2F1c2VzIHRoZSB0b29sIHRpcCB0byBiZVxuICAgICAqIGhpZGRlbi5cbiAgICAgKi9cbiAgb25Nb3VzZU91dDogUHJvcFR5cGVzLmZ1bmNcbn07IiwgImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8qKlxuICogTk9URTogV2UgY2FuJ3QgdGVzdCB0aGlzIGNvbXBvbmVudCBiZWNhdXNlIEVuenltZSBkb2Vzbid0IHN1cHBvcnQgcmVuZGVyaW5nXG4gKiBpbnRvIHBvcnRhbHMuXG4gKi9cbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IGNyZWF0ZVBvcnRhbCB9IGZyb20gJ3JlYWN0LWRvbSc7XG5pbXBvcnQgeyBrZXlzT2YgfSBmcm9tICcuLi9jb21tb24nO1xuZXhwb3J0IHZhciBpbnNlcnRQb3NpdGlvbnMgPSB7XG4gIGFmdGVyOiAnYWZ0ZXJlbmQnLFxuICBiZWZvcmU6ICdiZWZvcmViZWdpbidcbn07XG5leHBvcnQgdmFyIElOU0VSVF9QT1NJVElPTlMgPSBrZXlzT2YoaW5zZXJ0UG9zaXRpb25zKTtcbmV4cG9ydCB2YXIgRXVpUG9ydGFsID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhFdWlQb3J0YWwsIF9Db21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoRXVpUG9ydGFsKTtcblxuICBmdW5jdGlvbiBFdWlQb3J0YWwocHJvcHMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpUG9ydGFsKTtcblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgcHJvcHMpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInBvcnRhbE5vZGVcIiwgbnVsbCk7XG5cbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihfdGhpcyk7IC8vIFByZXZlbnQgU1NSIGVycm9yc1xuXG4gICAgdmFyIGluc2VydCA9IF90aGlzLnByb3BzLmluc2VydDtcbiAgICBfdGhpcy5wb3J0YWxOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgX3RoaXMucG9ydGFsTm9kZS5kYXRhc2V0LmV1aXBvcnRhbCA9ICd0cnVlJztcblxuICAgIGlmIChpbnNlcnQgPT0gbnVsbCkge1xuICAgICAgLy8gbm8gaW5zZXJ0aW9uIGRlZmluZWQsIGFwcGVuZCB0byBib2R5XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKF90aGlzLnBvcnRhbE5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpbnNlcnRpbmcgYmVmb3JlIG9yIGFmdGVyIGFuIGVsZW1lbnRcbiAgICAgIHZhciBzaWJsaW5nID0gaW5zZXJ0LnNpYmxpbmcsXG4gICAgICAgICAgcG9zaXRpb24gPSBpbnNlcnQucG9zaXRpb247XG4gICAgICBzaWJsaW5nLmluc2VydEFkamFjZW50RWxlbWVudChpbnNlcnRQb3NpdGlvbnNbcG9zaXRpb25dLCBfdGhpcy5wb3J0YWxOb2RlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoRXVpUG9ydGFsLCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHRoaXMudXBkYXRlUG9ydGFsUmVmKHRoaXMucG9ydGFsTm9kZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgdmFyIF90aGlzJHBvcnRhbE5vZGU7XG5cbiAgICAgIGlmICgoX3RoaXMkcG9ydGFsTm9kZSA9IHRoaXMucG9ydGFsTm9kZSkgIT09IG51bGwgJiYgX3RoaXMkcG9ydGFsTm9kZSAhPT0gdm9pZCAwICYmIF90aGlzJHBvcnRhbE5vZGUucGFyZW50Tm9kZSkge1xuICAgICAgICB0aGlzLnBvcnRhbE5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLnBvcnRhbE5vZGUpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnVwZGF0ZVBvcnRhbFJlZihudWxsKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwidXBkYXRlUG9ydGFsUmVmXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHVwZGF0ZVBvcnRhbFJlZihyZWYpIHtcbiAgICAgIGlmICh0aGlzLnByb3BzLnBvcnRhbFJlZikge1xuICAgICAgICB0aGlzLnByb3BzLnBvcnRhbFJlZihyZWYpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIHRoaXMucG9ydGFsTm9kZSA/IC8qI19fUFVSRV9fKi9jcmVhdGVQb3J0YWwodGhpcy5wcm9wcy5jaGlsZHJlbiwgdGhpcy5wb3J0YWxOb2RlKSA6IG51bGw7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEV1aVBvcnRhbDtcbn0oQ29tcG9uZW50KTtcbkV1aVBvcnRhbC5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgICAqIFJlYWN0Tm9kZSB0byByZW5kZXIgYXMgdGhpcyBjb21wb25lbnQncyBjb250ZW50XG4gICAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLFxuICBpbnNlcnQ6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgc2libGluZzogUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLFxuICAgIHBvc2l0aW9uOiBQcm9wVHlwZXMub25lT2YoW1wiYmVmb3JlXCIsIFwiYWZ0ZXJcIl0pLmlzUmVxdWlyZWRcbiAgfSksXG4gIHBvcnRhbFJlZjogUHJvcFR5cGVzLmZ1bmNcbn07IiwgImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxudmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwidGl0bGVcIiwgXCJjbGFzc05hbWVcIiwgXCJwb3NpdGlvblRvb2xUaXBcIiwgXCJwb3BvdmVyUmVmXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVRvb2xUaXBQb3BvdmVyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhFdWlUb29sVGlwUG9wb3ZlciwgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihFdWlUb29sVGlwUG9wb3Zlcik7XG5cbiAgZnVuY3Rpb24gRXVpVG9vbFRpcFBvcG92ZXIoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aVRvb2xUaXBQb3BvdmVyKTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsLmFwcGx5KF9zdXBlciwgW3RoaXNdLmNvbmNhdChhcmdzKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicG9wb3ZlclwiLCB2b2lkIDApO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInVwZGF0ZURpbWVuc2lvbnNcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gQmVjYXVzZSBvZiB0aGlzIGRlbGF5LCBzb21ldGltZXMgYHBvc2l0aW9uVG9vbFRpcGAgYmVjb21lcyB1bmF2YWlsYWJsZS5cbiAgICAgICAgaWYgKF90aGlzLnBvcG92ZXIpIHtcbiAgICAgICAgICBfdGhpcy5wcm9wcy5wb3NpdGlvblRvb2xUaXAoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic2V0UG9wb3ZlclJlZlwiLCBmdW5jdGlvbiAocmVmKSB7XG4gICAgICBfdGhpcy5wb3BvdmVyID0gcmVmO1xuXG4gICAgICBpZiAoX3RoaXMucHJvcHMucG9wb3ZlclJlZikge1xuICAgICAgICBfdGhpcy5wcm9wcy5wb3BvdmVyUmVmKHJlZik7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoRXVpVG9vbFRpcFBvcG92ZXIsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCdldWlCb2R5LWhhc1BvcnRhbENvbnRlbnQnKTtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLnVwZGF0ZURpbWVuc2lvbnMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSgnZXVpQm9keS1oYXNQb3J0YWxDb250ZW50Jyk7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy51cGRhdGVEaW1lbnNpb25zKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wcy5jaGlsZHJlbixcbiAgICAgICAgICB0aXRsZSA9IF90aGlzJHByb3BzLnRpdGxlLFxuICAgICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzLmNsYXNzTmFtZSxcbiAgICAgICAgICBwb3NpdGlvblRvb2xUaXAgPSBfdGhpcyRwcm9wcy5wb3NpdGlvblRvb2xUaXAsXG4gICAgICAgICAgcG9wb3ZlclJlZiA9IF90aGlzJHByb3BzLnBvcG92ZXJSZWYsXG4gICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wcywgX2V4Y2x1ZGVkKTtcblxuICAgICAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUb29sVGlwUG9wb3ZlcicsIGNsYXNzTmFtZSk7XG4gICAgICB2YXIgb3B0aW9uYWxUaXRsZTtcblxuICAgICAgaWYgKHRpdGxlKSB7XG4gICAgICAgIG9wdGlvbmFsVGl0bGUgPSBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpVG9vbFRpcF9fdGl0bGVcIlxuICAgICAgICB9LCB0aXRsZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICByZWY6IHRoaXMuc2V0UG9wb3ZlclJlZlxuICAgICAgfSwgcmVzdCksIG9wdGlvbmFsVGl0bGUsIGNoaWxkcmVuKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gRXVpVG9vbFRpcFBvcG92ZXI7XG59KENvbXBvbmVudCk7XG5FdWlUb29sVGlwUG9wb3Zlci5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgcG9zaXRpb25Ub29sVGlwOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIHRpdGxlOiBQcm9wVHlwZXMubm9kZSxcbiAgcG9wb3ZlclJlZjogUHJvcFR5cGVzLmZ1bmNcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0eXBlXCIsIFwiYXJpYS1sYWJlbFwiLCBcImNvbG9yXCIsIFwic2l6ZVwiLCBcImljb25Qcm9wc1wiLCBcInBvc2l0aW9uXCIsIFwiZGVsYXlcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgRXVpSWNvbiB9IGZyb20gJy4uL2ljb24nO1xuaW1wb3J0IHsgRXVpVG9vbFRpcCB9IGZyb20gJy4vdG9vbF90aXAnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpSWNvblRpcCA9IGZ1bmN0aW9uIEV1aUljb25UaXAoX3JlZikge1xuICB2YXIgX3JlZiR0eXBlID0gX3JlZi50eXBlLFxuICAgICAgdHlwZSA9IF9yZWYkdHlwZSA9PT0gdm9pZCAwID8gJ3F1ZXN0aW9uSW5DaXJjbGUnIDogX3JlZiR0eXBlLFxuICAgICAgX3JlZiRhcmlhTGFiZWwgPSBfcmVmWydhcmlhLWxhYmVsJ10sXG4gICAgICBhcmlhTGFiZWwgPSBfcmVmJGFyaWFMYWJlbCA9PT0gdm9pZCAwID8gJ0luZm8nIDogX3JlZiRhcmlhTGFiZWwsXG4gICAgICBjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBzaXplID0gX3JlZi5zaXplLFxuICAgICAgaWNvblByb3BzID0gX3JlZi5pY29uUHJvcHMsXG4gICAgICBfcmVmJHBvc2l0aW9uID0gX3JlZi5wb3NpdGlvbixcbiAgICAgIHBvc2l0aW9uID0gX3JlZiRwb3NpdGlvbiA9PT0gdm9pZCAwID8gJ3RvcCcgOiBfcmVmJHBvc2l0aW9uLFxuICAgICAgX3JlZiRkZWxheSA9IF9yZWYuZGVsYXksXG4gICAgICBkZWxheSA9IF9yZWYkZGVsYXkgPT09IHZvaWQgMCA/ICdyZWd1bGFyJyA6IF9yZWYkZGVsYXksXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpVG9vbFRpcCwgX2V4dGVuZHMoe1xuICAgIHBvc2l0aW9uOiBwb3NpdGlvbixcbiAgICBkZWxheTogZGVsYXlcbiAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwgX2V4dGVuZHMoe1xuICAgIHRhYkluZGV4OiAwLFxuICAgIHR5cGU6IHR5cGUsXG4gICAgY29sb3I6IGNvbG9yLFxuICAgIHNpemU6IHNpemUsXG4gICAgXCJhcmlhLWxhYmVsXCI6IGFyaWFMYWJlbFxuICB9LCBpY29uUHJvcHMpKSk7XG59O1xuRXVpSWNvblRpcC5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgICAqIFBhc3NlcyBvbnRvIHRoZSB0aGUgdHJpZ2dlci5cbiAgICAgKi9cbiAgYW5jaG9yQ2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAqIFBhc3NlcyBvbnRvIHRoZSB0b29sdGlwIGl0c2VsZiwgbm90IHRoZSB0cmlnZ2VyLlxuICAgICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogVGhlIG1haW4gY29udGVudCBvZiB5b3VyIHRvb2x0aXAuXG4gICAgICovXG4gIGNvbnRlbnQ6IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgICAqIENvbW1vbiBkaXNwbGF5IGFsdGVybmF0aXZlcyBmb3IgdGhlIGFuY2hvciB3cmFwcGVyXG4gICAgICovXG4gIGRpc3BsYXk6IFByb3BUeXBlcy5vbmVPZihbXCJpbmxpbmVCbG9ja1wiLCBcImJsb2NrXCJdKSxcblxuICAvKipcbiAgICAgKiBBbiBvcHRpb25hbCB0aXRsZSBmb3IgeW91ciB0b29sdGlwLlxuICAgICAqL1xuICB0aXRsZTogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAgICogVW5sZXNzIHlvdSBwcm92aWRlIG9uZSwgdGhpcyB3aWxsIGJlIHJhbmRvbWx5IGdlbmVyYXRlZC5cbiAgICAgKi9cbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogSWYgc3VwcGxpZWQsIGNhbGxlZCB3aGVuIG1vdXNlIG1vdmVtZW50IGNhdXNlcyB0aGUgdG9vbCB0aXAgdG8gYmVcbiAgICAgKiBoaWRkZW4uXG4gICAgICovXG4gIG9uTW91c2VPdXQ6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgICAqIFRoZSBpY29uIGNvbG9yLlxuICAgICAqL1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgKiBUaGUgaWNvbiB0eXBlLlxuICAgICAqL1xuICB0eXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbGVydFwiLCBcImFuYWx5emVFdmVudFwiLCBcImFubm90YXRpb25cIiwgXCJhcG1BcHBcIiwgXCJhcG1UcmFjZVwiLCBcImFwcFNlYXJjaEFwcFwiLCBcImFwcHNcIiwgXCJhcnJvd0Rvd25cIiwgXCJhcnJvd0xlZnRcIiwgXCJhcnJvd1JpZ2h0XCIsIFwiYXJyb3dVcFwiLCBcImFycm93U3RhcnRcIiwgXCJhcnJvd0VuZFwiLCBcImFzdGVyaXNrXCIsIFwiYXVkaXRiZWF0QXBwXCIsIFwiYmVha2VyXCIsIFwiYmVsbFwiLCBcImJlbGxTbGFzaFwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGVja1wiLCBcImNoZWNrSW5DaXJjbGVGaWxsZWRcIiwgXCJjaGVlclwiLCBcImNsYXNzaWZpY2F0aW9uSm9iXCIsIFwiY2xvY2tcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkFDaXJjbGVGaWxsZWRcIiwgXCJjcm9zc2hhaXJzXCIsIFwiY3VycmVuY3lcIiwgXCJjdXRcIiwgXCJkYXNoYm9hcmRBcHBcIiwgXCJkYXRhVmlzdWFsaXplclwiLCBcImRhdGFiYXNlXCIsIFwiZGVza3RvcFwiLCBcImRldlRvb2xzQXBwXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZXFsXCIsIFwiZXJhc2VyXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZsYWdcIiwgXCJmbGVldEFwcFwiLCBcImZvbGRcIiwgXCJmb2xkZXJDaGVja1wiLCBcImZvbGRlckNsb3NlZFwiLCBcImZvbGRlckV4Y2xhbWF0aW9uXCIsIFwiZm9sZGVyT3BlblwiLCBcImZyYW1lTmV4dFwiLCBcImZyYW1lUHJldmlvdXNcIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFNjcmVlbkV4aXRcIiwgXCJmdW5jdGlvblwiLCBcImdlYXJcIiwgXCJnaXNBcHBcIiwgXCJnbGFzc2VzXCIsIFwiZ2xvYmVcIiwgXCJncmFiXCIsIFwiZ3JhYkhvcml6b250YWxcIiwgXCJncmFwaEFwcFwiLCBcImdyaWRcIiwgXCJncm9rQXBwXCIsIFwiaGVhcnRcIiwgXCJoZWFydGJlYXRBcHBcIiwgXCJoZWF0bWFwXCIsIFwiaGVscFwiLCBcImhvbWVcIiwgXCJpSW5DaXJjbGVcIiwgXCJpbWFnZVwiLCBcImltcG9ydEFjdGlvblwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5wdXRPdXRwdXRcIiwgXCJpbnNwZWN0XCIsIFwiaW52ZXJ0XCIsIFwiaXBcIiwgXCJrZXlib2FyZFwiLCBcImtxbEZpZWxkXCIsIFwia3FsRnVuY3Rpb25cIiwgXCJrcWxPcGVyYW5kXCIsIFwia3FsU2VsZWN0b3JcIiwgXCJrcWxWYWx1ZVwiLCBcImt1YmVybmV0ZXNOb2RlXCIsIFwia3ViZXJuZXRlc1BvZFwiLCBcImxheWVyc1wiLCBcImxlbnNBcHBcIiwgXCJsZXR0ZXJpbmdcIiwgXCJsaW5lRGFzaGVkXCIsIFwibGluZURvdHRlZFwiLCBcImxpbmVTb2xpZFwiLCBcImxpbmtcIiwgXCJsaXN0XCIsIFwibGlzdEFkZFwiLCBcImxvY2tcIiwgXCJsb2NrT3BlblwiLCBcImxvZ29BV1NcIiwgXCJsb2dvQVdTTW9ub1wiLCBcImxvZ29BZXJvc3Bpa2VcIiwgXCJsb2dvQXBhY2hlXCIsIFwibG9nb0FwcFNlYXJjaFwiLCBcImxvZ29BenVyZVwiLCBcImxvZ29BenVyZU1vbm9cIiwgXCJsb2dvQmVhdHNcIiwgXCJsb2dvQnVzaW5lc3NBbmFseXRpY3NcIiwgXCJsb2dvQ2VwaFwiLCBcImxvZ29DbG91ZFwiLCBcImxvZ29DbG91ZEVudGVycHJpc2VcIiwgXCJsb2dvQ29kZVwiLCBcImxvZ29Db2Rlc2FuZGJveFwiLCBcImxvZ29Db3VjaGJhc2VcIiwgXCJsb2dvRG9ja2VyXCIsIFwibG9nb0Ryb3B3aXphcmRcIiwgXCJsb2dvRWxhc3RpY1wiLCBcImxvZ29FbGFzdGljU3RhY2tcIiwgXCJsb2dvRWxhc3RpY3NlYXJjaFwiLCBcImxvZ29FbnRlcnByaXNlU2VhcmNoXCIsIFwibG9nb0V0Y2RcIiwgXCJsb2dvR0NQXCIsIFwibG9nb0dDUE1vbm9cIiwgXCJsb2dvR2l0aHViXCIsIFwibG9nb0dtYWlsXCIsIFwibG9nb0dvbGFuZ1wiLCBcImxvZ29Hb29nbGVHXCIsIFwibG9nb0hBcHJveHlcIiwgXCJsb2dvSUJNXCIsIFwibG9nb0lCTU1vbm9cIiwgXCJsb2dvS2Fma2FcIiwgXCJsb2dvS2liYW5hXCIsIFwibG9nb0t1YmVybmV0ZXNcIiwgXCJsb2dvTG9nZ2luZ1wiLCBcImxvZ29Mb2dzdGFzaFwiLCBcImxvZ29NYXBzXCIsIFwibG9nb01lbWNhY2hlZFwiLCBcImxvZ29NZXRyaWNzXCIsIFwibG9nb01vbmdvZGJcIiwgXCJsb2dvTXlTUUxcIiwgXCJsb2dvTmdpbnhcIiwgXCJsb2dvT2JzZXJ2YWJpbGl0eVwiLCBcImxvZ29Pc3F1ZXJ5XCIsIFwibG9nb1BocFwiLCBcImxvZ29Qb3N0Z3Jlc1wiLCBcImxvZ29Qcm9tZXRoZXVzXCIsIFwibG9nb1JhYmJpdG1xXCIsIFwibG9nb1JlZGlzXCIsIFwibG9nb1NlY3VyaXR5XCIsIFwibG9nb1NpdGVTZWFyY2hcIiwgXCJsb2dvU2tldGNoXCIsIFwibG9nb1NsYWNrXCIsIFwibG9nb1VwdGltZVwiLCBcImxvZ29XZWJob29rXCIsIFwibG9nb1dpbmRvd3NcIiwgXCJsb2dvV29ya3BsYWNlU2VhcmNoXCIsIFwibG9nc0FwcFwiLCBcImxvZ3N0YXNoRmlsdGVyXCIsIFwibG9nc3Rhc2hJZlwiLCBcImxvZ3N0YXNoSW5wdXRcIiwgXCJsb2dzdGFzaE91dHB1dFwiLCBcImxvZ3N0YXNoUXVldWVcIiwgXCJtYWNoaW5lTGVhcm5pbmdBcHBcIiwgXCJtYWduZXRcIiwgXCJtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uXCIsIFwibWFnbmlmeVdpdGhNaW51c1wiLCBcIm1hZ25pZnlXaXRoUGx1c1wiLCBcIm1hbmFnZW1lbnRBcHBcIiwgXCJtYXBNYXJrZXJcIiwgXCJtZW1vcnlcIiwgXCJtZW51XCIsIFwibWVudURvd25cIiwgXCJtZW51TGVmdFwiLCBcIm1lbnVSaWdodFwiLCBcIm1lbnVVcFwiLCBcIm1lcmdlXCIsIFwibWV0cmljYmVhdEFwcFwiLCBcIm1ldHJpY3NBcHBcIiwgXCJtaW5pbWl6ZVwiLCBcIm1pbnVzXCIsIFwibWludXNJbkNpcmNsZVwiLCBcIm1pbnVzSW5DaXJjbGVGaWxsZWRcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5vZGVcIiwgXCJub3RlYm9va0FwcFwiLCBcIm51bWJlclwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIiwgXCJvdXRsaWVyRGV0ZWN0aW9uSm9iXCIsIFwicGFja2FnZVwiLCBcInBhY2tldGJlYXRBcHBcIiwgXCJwYWdlU2VsZWN0XCIsIFwicGFnZXNTZWxlY3RcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVsaW5lQXBwXCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNub3dmbGFrZVwiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc0FwcFwiLCBcInNxbEFwcFwiLCBcInN0YXJFbXB0eVwiLCBcInN0YXJFbXB0eVNwYWNlXCIsIFwic3RhckZpbGxlZFwiLCBcInN0YXJGaWxsZWRTcGFjZVwiLCBcInN0YXJNaW51c0VtcHR5XCIsIFwic3Rhck1pbnVzRmlsbGVkXCIsIFwic3RhclBsdXNFbXB0eVwiLCBcInN0YXJQbHVzRmlsbGVkXCIsIFwic3RhdHNcIiwgXCJzdG9wXCIsIFwic3RvcEZpbGxlZFwiLCBcInN0b3BTbGFzaFwiLCBcInN0b3JhZ2VcIiwgXCJzdHJpbmdcIiwgXCJzdWJtb2R1bGVcIiwgXCJzdW5cIiwgXCJzd2F0Y2hJbnB1dFwiLCBcInN5bWxpbmtcIiwgXCJ0YWJsZURlbnNpdHlDb21wYWN0XCIsIFwidGFibGVEZW5zaXR5RXhwYW5kZWRcIiwgXCJ0YWJsZURlbnNpdHlOb3JtYWxcIiwgXCJ0YWJsZU9mQ29udGVudHNcIiwgXCJ0YWdcIiwgXCJ0ZWFyXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJ0aW1lbGluZVwiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFzaFwiLCBcInVuZm9sZFwiLCBcInVubGlua1wiLCBcInVwZ3JhZGVBc3Npc3RhbnRBcHBcIiwgXCJ1cHRpbWVBcHBcIiwgXCJ1c2VyXCIsIFwidXNlckF2YXRhclwiLCBcInVzZXJzXCIsIFwidXNlcnNSb2xlc0FwcFwiLCBcInZlY3RvclwiLCBcInZpZGVvUGxheWVyXCIsIFwidmlzQXJlYVwiLCBcInZpc0FyZWFTdGFja2VkXCIsIFwidmlzQmFySG9yaXpvbnRhbFwiLCBcInZpc0Jhckhvcml6b250YWxTdGFja2VkXCIsIFwidmlzQmFyVmVydGljYWxcIiwgXCJ2aXNCYXJWZXJ0aWNhbFN0YWNrZWRcIiwgXCJ2aXNHYXVnZVwiLCBcInZpc0dvYWxcIiwgXCJ2aXNMaW5lXCIsIFwidmlzTWFwQ29vcmRpbmF0ZVwiLCBcInZpc01hcFJlZ2lvblwiLCBcInZpc01ldHJpY1wiLCBcInZpc1BpZVwiLCBcInZpc1RhYmxlXCIsIFwidmlzVGFnQ2xvdWRcIiwgXCJ2aXNUZXh0XCIsIFwidmlzVGltZWxpb25cIiwgXCJ2aXNWZWdhXCIsIFwidmlzVmlzdWFsQnVpbGRlclwiLCBcInZpc3VhbGl6ZUFwcFwiLCBcIndhdGNoZXNBcHBcIiwgXCJ3b3JkV3JhcFwiLCBcIndvcmRXcmFwRGlzYWJsZWRcIiwgXCJ3b3JrcGxhY2VTZWFyY2hBcHBcIiwgXCJ3cmVuY2hcIiwgXCJ0b2tlbkFsaWFzXCIsIFwidG9rZW5Bbm5vdGF0aW9uXCIsIFwidG9rZW5BcnJheVwiLCBcInRva2VuQmluYXJ5XCIsIFwidG9rZW5Cb29sZWFuXCIsIFwidG9rZW5DbGFzc1wiLCBcInRva2VuQ29tcGxldGlvblN1Z2dlc3RlclwiLCBcInRva2VuQ29uc3RhbnRcIiwgXCJ0b2tlbkRhdGVcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2hhcGVcIiwgXCJ0b2tlblN0cmluZ1wiLCBcInRva2VuU3RydWN0XCIsIFwidG9rZW5TeW1ib2xcIiwgXCJ0b2tlblRhZ1wiLCBcInRva2VuVGV4dFwiLCBcInRva2VuVG9rZW5Db3VudFwiLCBcInRva2VuVmFyaWFibGVcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWRdKSxcblxuICAvKipcbiAgICAgKiBUaGUgaWNvbiBzaXplLlxuICAgICAqL1xuICBzaXplOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIEV4cGxhaW4gd2hhdCB0aGlzIGljb24gbWVhbnMgZm9yIHNjcmVlbiByZWFkZXJzLlxuICAgICAqL1xuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgKiBQYXNzIGNlcnRhaW4gcHJvcHMgZG93biB0byBgRXVpSWNvbmBcbiAgICAgKi9cbiAgLy8gRXVpSWNvblRpcCdzIGB0eXBlYCBpcyBwYXNzZWQgdG8gRXVpSWNvbiwgc28gd2Ugd2FudCB0byBleGNsdWRlIGB0eXBlYCBmcm9tXG4gIC8vIGljb25Qcm9wczsgaG93ZXZlciwgZHVlIHRvIFRTJ3MgYml2YXJpYW50IGZ1bmN0aW9uIGFyZ3VtZW50cyBgdHlwZWAgY291bGQgYmVcbiAgLy8gcGFzc2VkIHdpdGhvdXQgYW55IGVycm9yL2ZlZWRiYWNrIHNvIHdlIGV4cGxpY2l0bHkgc2V0IGl0IHRvIGBuZXZlcmAgdHlwZVxuICBpY29uUHJvcHM6IFByb3BUeXBlcy5hbnksXG4gIC8vIFRoaXMgYXJlIGNvcGllZCBmcm9tIEV1aVRvb2xUaXBQcm9wcywgYnV0IG1hZGUgb3B0aW9uYWwuIERlZmF1bHRzXG4gIC8vIGFyZSBhcHBsaWVkIGJlbG93LlxuICBkZWxheTogUHJvcFR5cGVzLmFueSxcbiAgcG9zaXRpb246IFByb3BUeXBlcy5hbnlcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgY2hyb21hIGZyb20gJ2Nocm9tYS1qcyc7XG5pbXBvcnQgeyBDT0xPUl9NT0RFU19TVEFOREFSRCB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL3RoZW1lL3R5cGVzJzsgLy8gQ3JlYXRlIGEgQ1NTIGNvbG9yIHZhbHVlIHVzaW5nIHdob3NlIG9wYWNpdHkgaXMgZGV0ZXJtaW5lZCBiYXNlZFxuLy8gb24gZWl0aGVyIGEgbGlnaHQgb3IgZGFyayB0aGVtZS4gV2UgdXNlIGEgbXVsdGlwbGllclxuLy8gb2YgMSBmb3IgbGlnaHQgdGhlbWVzIGFuZCAyLjUgZm9yIGRhcmsgdGhlbWVzXG5cbmV4cG9ydCB2YXIgZ2V0U2hhZG93Q29sb3IgPSBmdW5jdGlvbiBnZXRTaGFkb3dDb2xvcihjb2xvciwgb3BhY2l0eSwgY29sb3JNb2RlKSB7XG4gIHZhciB0aGVtZU9wYWNpdHkgPSBjb2xvck1vZGUgPT09IENPTE9SX01PREVTX1NUQU5EQVJELmRhcmsgPyBvcGFjaXR5ICogMy41IDogb3BhY2l0eSAqIDE7XG4gIHJldHVybiBjaHJvbWEoY29sb3IpLmFscGhhKHRoZW1lT3BhY2l0eSkuY3NzKCk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy90aGVtZSc7XG5pbXBvcnQgeyBnZXRTaGFkb3dDb2xvciB9IGZyb20gJy4uL2Z1bmN0aW9ucyc7XG5cbi8qKlxuICogZXVpU2xpZ2h0U2hhZG93XG4gKi9cbmV4cG9ydCB2YXIgZXVpU2hhZG93WFNtYWxsID0gZnVuY3Rpb24gZXVpU2hhZG93WFNtYWxsKF9yZWYpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZi5ldWlUaGVtZSxcbiAgICAgIGNvbG9yTW9kZSA9IF9yZWYuY29sb3JNb2RlO1xuXG4gIHZhciBfcmVmMiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge30sXG4gICAgICBfY29sb3IgPSBfcmVmMi5jb2xvcjtcblxuICB2YXIgY29sb3IgPSBfY29sb3IgfHwgZXVpVGhlbWUuY29sb3JzLnNoYWRvdztcbiAgcmV0dXJuIFwiXFxuYm94LXNoYWRvdzpcXG4gIDAgLjhweCAuOHB4IFwiLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4wNCwgY29sb3JNb2RlKSwgXCIsXFxuICAwIDIuM3B4IDJweCBcIikuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjAzLCBjb2xvck1vZGUpLCBcIjtcXG5cIik7XG59O1xuLyoqXG4gKiBib3R0b21TaGFkb3dTbWFsbFxuICovXG5cbmV4cG9ydCB2YXIgZXVpU2hhZG93U21hbGwgPSBmdW5jdGlvbiBldWlTaGFkb3dTbWFsbChfcmVmMykge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmMy5ldWlUaGVtZSxcbiAgICAgIGNvbG9yTW9kZSA9IF9yZWYzLmNvbG9yTW9kZTtcblxuICB2YXIgX3JlZjQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9LFxuICAgICAgX2NvbG9yID0gX3JlZjQuY29sb3I7XG5cbiAgdmFyIGNvbG9yID0gX2NvbG9yIHx8IGV1aVRoZW1lLmNvbG9ycy5zaGFkb3c7XG4gIHJldHVybiBcIlxcbmJveC1zaGFkb3c6XFxuICAwIC43cHggMS40cHggXCIuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjA3LCBjb2xvck1vZGUpLCBcIixcXG4gIDAgMS45cHggNHB4IFwiKS5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDUsIGNvbG9yTW9kZSksIFwiLFxcbiAgMCA0LjVweCAxMHB4IFwiKS5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDUsIGNvbG9yTW9kZSksIFwiO1xcblwiKTtcbn07XG4vKipcbiAqIGJvdHRvbVNoYWRvd01lZGl1bVxuICovXG5cbmV4cG9ydCB2YXIgZXVpU2hhZG93TWVkaXVtID0gZnVuY3Rpb24gZXVpU2hhZG93TWVkaXVtKF9yZWY1KSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWY1LmV1aVRoZW1lLFxuICAgICAgY29sb3JNb2RlID0gX3JlZjUuY29sb3JNb2RlO1xuXG4gIHZhciBfcmVmNiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge30sXG4gICAgICBfY29sb3IgPSBfcmVmNi5jb2xvcixcbiAgICAgIHByb3BlcnR5ID0gX3JlZjYucHJvcGVydHk7XG5cbiAgdmFyIGNvbG9yID0gX2NvbG9yIHx8IGV1aVRoZW1lLmNvbG9ycy5zaGFkb3c7XG4gIHZhciBhcnJheSA9IFtcIjAgLjlweCA0cHggXCIuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjA4LCBjb2xvck1vZGUpKSwgXCIwIDIuNnB4IDhweCBcIi5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDYsIGNvbG9yTW9kZSkpLCBcIjAgNS43cHggMTJweCBcIi5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDUsIGNvbG9yTW9kZSkpLCBcIjAgMTVweCAxNXB4IFwiLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4wNCwgY29sb3JNb2RlKSldO1xuXG4gIGlmIChwcm9wZXJ0eSA9PT0gJ2ZpbHRlcicpIHtcbiAgICByZXR1cm4gXCJmaWx0ZXI6IFwiLmNvbmNhdChhcnJheS5yZWR1Y2UoZnVuY3Rpb24gKHYsIGkpIHtcbiAgICAgIHJldHVybiBcIlwiLmNvbmNhdCh2LCBcIiBkcm9wLXNoYWRvdyhcIikuY29uY2F0KGksIFwiKVwiKTtcbiAgICB9LCAnJyksIFwiO1wiKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gXCJib3gtc2hhZG93OiBcIi5jb25jYXQoYXJyYXkubWFwKGZ1bmN0aW9uICh2KSB7XG4gICAgICByZXR1cm4gdjtcbiAgICB9KSwgXCI7XCIpO1xuICB9XG59O1xuLyoqXG4gKiBib3R0b21TaGFkb3dcbiAqL1xuXG5leHBvcnQgdmFyIGV1aVNoYWRvd0xhcmdlID0gZnVuY3Rpb24gZXVpU2hhZG93TGFyZ2UoX3JlZjcpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZjcuZXVpVGhlbWUsXG4gICAgICBjb2xvck1vZGUgPSBfcmVmNy5jb2xvck1vZGU7XG5cbiAgdmFyIF9yZWY4ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcbiAgICAgIF9jb2xvciA9IF9yZWY4LmNvbG9yO1xuXG4gIHZhciBjb2xvciA9IF9jb2xvciB8fCBldWlUaGVtZS5jb2xvcnMuc2hhZG93O1xuICByZXR1cm4gXCJcXG5ib3gtc2hhZG93OlxcbiAgMCAxcHggNXB4IFwiLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4xLCBjb2xvck1vZGUpLCBcIixcXG4gIDAgMy42cHggMTNweCBcIikuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjA3LCBjb2xvck1vZGUpLCBcIixcXG4gIDAgOC40cHggMjNweCBcIikuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjA2LCBjb2xvck1vZGUpLCBcIixcXG4gIDAgMjNweCAzNXB4IFwiKS5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDUsIGNvbG9yTW9kZSksIFwiO1xcblwiKTtcbn07XG4vKipcbiAqIGJvdHRvbVNoYWRvd0xhcmdlXG4gKi9cblxuZXhwb3J0IHZhciBldWlTaGFkb3dYTGFyZ2UgPSBmdW5jdGlvbiBldWlTaGFkb3dYTGFyZ2UoX3JlZjkpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZjkuZXVpVGhlbWUsXG4gICAgICBjb2xvck1vZGUgPSBfcmVmOS5jb2xvck1vZGU7XG5cbiAgdmFyIF9yZWYxMCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge30sXG4gICAgICBfY29sb3IgPSBfcmVmMTAuY29sb3IsXG4gICAgICByZXZlcnNlID0gX3JlZjEwLnJldmVyc2U7XG5cbiAgdmFyIGNvbG9yID0gX2NvbG9yIHx8IGV1aVRoZW1lLmNvbG9ycy5zaGFkb3c7XG4gIHJldHVybiBcIlxcbmJveC1zaGFkb3c6XFxuICAwIFwiLmNvbmNhdChyZXZlcnNlID8gJy0nIDogJycsIFwiMi43cHggOXB4IFwiKS5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMTMsIGNvbG9yTW9kZSksIFwiLFxcbiAgMCBcIikuY29uY2F0KHJldmVyc2UgPyAnLScgOiAnJywgXCI5LjRweCAyNHB4IFwiKS5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDksIGNvbG9yTW9kZSksIFwiLFxcbiAgMCBcIikuY29uY2F0KHJldmVyc2UgPyAnLScgOiAnJywgXCIyMS44cHggNDNweCBcIikuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjA4LCBjb2xvck1vZGUpLCBcIjtcXG5cIik7XG59O1xuLyoqXG4gKiBzbGlnaHRTaGFkb3dIb3ZlclxuICogVE9ETzogSSB0aGluayB0aGlzIGlzIG9ubHkgdXNlZCBieSBwYW5lbHMvY2FyZHMgaW4gdGhlIEFtc3RlcmRhbSB0aGVtZSwgbW92ZSB0aGVyZVxuICovXG5cbmV4cG9ydCB2YXIgZXVpU2xpZ2h0U2hhZG93SG92ZXIgPSBmdW5jdGlvbiBldWlTbGlnaHRTaGFkb3dIb3ZlcihfcmVmMTEpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZjExLmV1aVRoZW1lLFxuICAgICAgY29sb3JNb2RlID0gX3JlZjExLmNvbG9yTW9kZTtcblxuICB2YXIgX3JlZjEyID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcbiAgICAgIF9jb2xvciA9IF9yZWYxMi5jb2xvcjtcblxuICB2YXIgY29sb3IgPSBfY29sb3IgfHwgZXVpVGhlbWUuY29sb3JzLnNoYWRvdztcbiAgcmV0dXJuIFwiXFxuYm94LXNoYWRvdzpcXG4gIDAgMXB4IDVweCBcIi5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMSwgY29sb3JNb2RlKSwgXCIsXFxuICAwIDMuNnB4IDEzcHggXCIpLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4wNywgY29sb3JNb2RlKSwgXCIsXFxuICAwIDguNHB4IDIzcHggXCIpLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4wNiwgY29sb3JNb2RlKSwgXCIsXFxuICAwIDIzcHggMzVweCBcIikuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjA1LCBjb2xvck1vZGUpLCBcIjtcXG5cIik7XG59O1xuZXhwb3J0IHZhciB1c2VFdWlTbGlnaHRTaGFkb3dIb3ZlciA9IGZ1bmN0aW9uIHVzZUV1aVNsaWdodFNoYWRvd0hvdmVyKGNvbG9yKSB7XG4gIHZhciBldWlUaGVtZUNvbnRleHQgPSB1c2VFdWlUaGVtZSgpO1xuICByZXR1cm4gZXVpU2xpZ2h0U2hhZG93SG92ZXIoZXVpVGhlbWVDb250ZXh0LCB7XG4gICAgY29sb3I6IGNvbG9yXG4gIH0pO1xufTtcbi8qKlxuICogYm90dG9tU2hhZG93RmxhdFxuICpcbiAqIFNpbWlsYXIgdG8gc2hhZG93IG1lZGl1bSBidXQgd2l0aG91dCB0aGUgYm90dG9tIGRlcHRoLlxuICogVXNlZnVsIGZvciBwb3BvdmVycyB0aGF0IGRyb3AgVVAgcmF0aGVyIHRoYW4gRE9XTi5cbiAqL1xuXG5leHBvcnQgdmFyIGV1aVNoYWRvd0ZsYXQgPSBmdW5jdGlvbiBldWlTaGFkb3dGbGF0KF9yZWYxMykge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmMTMuZXVpVGhlbWUsXG4gICAgICBjb2xvck1vZGUgPSBfcmVmMTMuY29sb3JNb2RlO1xuXG4gIHZhciBfcmVmMTQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9LFxuICAgICAgX2NvbG9yID0gX3JlZjE0LmNvbG9yO1xuXG4gIHZhciBjb2xvciA9IF9jb2xvciB8fCBldWlUaGVtZS5jb2xvcnMuc2hhZG93O1xuICByZXR1cm4gXCJcXG5ib3gtc2hhZG93OlxcbiAgMCAwIC44cHggXCIuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjA2LCBjb2xvck1vZGUpLCBcIixcXG4gIDAgMCAycHggXCIpLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4wNCwgY29sb3JNb2RlKSwgXCIsXFxuICAwIDAgNXB4IFwiKS5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDQsIGNvbG9yTW9kZSksIFwiLFxcbiAgMCAwIDE3cHggXCIpLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4wMywgY29sb3JNb2RlKSwgXCI7XFxuXCIpO1xufTtcbmV4cG9ydCB2YXIgdXNlRXVpU2hhZG93RmxhdCA9IGZ1bmN0aW9uIHVzZUV1aVNoYWRvd0ZsYXQoY29sb3IpIHtcbiAgdmFyIGV1aVRoZW1lQ29udGV4dCA9IHVzZUV1aVRoZW1lKCk7XG4gIHJldHVybiBldWlTaGFkb3dGbGF0KGV1aVRoZW1lQ29udGV4dCwge1xuICAgIGNvbG9yOiBjb2xvclxuICB9KTtcbn07XG5leHBvcnQgdmFyIGV1aVNoYWRvdyA9IGZ1bmN0aW9uIGV1aVNoYWRvdyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIHNpemUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6ICdsJztcblxuICB2YXIgX3JlZjE1ID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiB7fSxcbiAgICAgIGNvbG9yID0gX3JlZjE1LmNvbG9yO1xuXG4gIHN3aXRjaCAoc2l6ZSkge1xuICAgIGNhc2UgJ3hzJzpcbiAgICAgIHJldHVybiBldWlTaGFkb3dYU21hbGwoZXVpVGhlbWVDb250ZXh0LCB7XG4gICAgICAgIGNvbG9yOiBjb2xvclxuICAgICAgfSk7XG5cbiAgICBjYXNlICdzJzpcbiAgICAgIHJldHVybiBldWlTaGFkb3dTbWFsbChldWlUaGVtZUNvbnRleHQsIHtcbiAgICAgICAgY29sb3I6IGNvbG9yXG4gICAgICB9KTtcblxuICAgIGNhc2UgJ20nOlxuICAgICAgcmV0dXJuIGV1aVNoYWRvd01lZGl1bShldWlUaGVtZUNvbnRleHQsIHtcbiAgICAgICAgY29sb3I6IGNvbG9yXG4gICAgICB9KTtcblxuICAgIGNhc2UgJ2wnOlxuICAgICAgcmV0dXJuIGV1aVNoYWRvd0xhcmdlKGV1aVRoZW1lQ29udGV4dCwge1xuICAgICAgICBjb2xvcjogY29sb3JcbiAgICAgIH0pO1xuXG4gICAgY2FzZSAneGwnOlxuICAgICAgcmV0dXJuIGV1aVNoYWRvd1hMYXJnZShldWlUaGVtZUNvbnRleHQsIHtcbiAgICAgICAgY29sb3I6IGNvbG9yXG4gICAgICB9KTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICBjb25zb2xlLndhcm4oJ1BsZWFzZSBwcm92aWRlIGEgdmFsaWQgc2l6ZSBvcHRpb24gdG8gdXNlRXVpU2hhZG93Jyk7XG4gICAgICByZXR1cm4gJyc7XG4gIH1cbn07XG5leHBvcnQgdmFyIHVzZUV1aVNoYWRvdyA9IGZ1bmN0aW9uIHVzZUV1aVNoYWRvdygpIHtcbiAgdmFyIHNpemUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6ICdsJztcbiAgdmFyIGNvbG9yID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gIHZhciBldWlUaGVtZUNvbnRleHQgPSB1c2VFdWlUaGVtZSgpO1xuICByZXR1cm4gZXVpU2hhZG93KGV1aVRoZW1lQ29udGV4dCwgc2l6ZSwge1xuICAgIGNvbG9yOiBjb2xvclxuICB9KTtcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNvbG9yXCIsIFwiY2xhc3NOYW1lXCIsIFwiaHJlZlwiLCBcImV4dGVybmFsXCIsIFwidGFyZ2V0XCIsIFwicmVsXCIsIFwidHlwZVwiLCBcIm9uQ2xpY2tcIiwgXCJkaXNhYmxlZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGdldFNlY3VyZVJlbEZvclRhcmdldCwgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBldWlMaW5rU3R5bGVzIH0gZnJvbSAnLi9saW5rLnN0eWxlcyc7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vaWNvbic7XG5pbXBvcnQgeyBFdWlJMThuLCB1c2VFdWlJMThuIH0gZnJvbSAnLi4vaTE4bic7XG5pbXBvcnQgeyBFdWlTY3JlZW5SZWFkZXJPbmx5IH0gZnJvbSAnLi4vYWNjZXNzaWJpbGl0eSc7XG5pbXBvcnQgeyB2YWxpZGF0ZUhyZWYgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zZWN1cml0eS9ocmVmX3ZhbGlkYXRvcic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBDT0xPUlMgPSBbJ3ByaW1hcnknLCAnc3ViZHVlZCcsICdzdWNjZXNzJywgJ2FjY2VudCcsICdkYW5nZXInLCAnd2FybmluZycsICd0ZXh0JywgJ2dob3N0J107XG52YXIgRXVpTGluayA9IC8qI19fUFVSRV9fKi9mb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAncHJpbWFyeScgOiBfcmVmJGNvbG9yLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBocmVmID0gX3JlZi5ocmVmLFxuICAgICAgZXh0ZXJuYWwgPSBfcmVmLmV4dGVybmFsLFxuICAgICAgdGFyZ2V0ID0gX3JlZi50YXJnZXQsXG4gICAgICByZWwgPSBfcmVmLnJlbCxcbiAgICAgIF9yZWYkdHlwZSA9IF9yZWYudHlwZSxcbiAgICAgIHR5cGUgPSBfcmVmJHR5cGUgPT09IHZvaWQgMCA/ICdidXR0b24nIDogX3JlZiR0eXBlLFxuICAgICAgb25DbGljayA9IF9yZWYub25DbGljayxcbiAgICAgIF9kaXNhYmxlZCA9IF9yZWYuZGlzYWJsZWQsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgdmFyIHN0eWxlcyA9IGV1aUxpbmtTdHlsZXMoZXVpVGhlbWUpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlMaW5rXTtcbiAgdmFyIGNzc1NjcmVlblJlYWRlclRleHRTdHlsZXMgPSBbc3R5bGVzLmV1aUxpbmtfX3NjcmVlblJlYWRlclRleHRdO1xuICB2YXIgY3NzRXh0ZXJuYWxMaW5rSWNvblN0eWxlcyA9IFtzdHlsZXMuZXVpTGlua19fZXh0ZXJuYWxJY29uXTtcbiAgdmFyIGlzSHJlZlZhbGlkID0gIWhyZWYgfHwgdmFsaWRhdGVIcmVmKGhyZWYpO1xuICB2YXIgZGlzYWJsZWQgPSBfZGlzYWJsZWQgfHwgIWlzSHJlZlZhbGlkO1xuXG4gIHZhciBuZXdUYXJnZXRTY3JlZW5yZWFkZXJUZXh0ID0gX19fRW1vdGlvbkpTWChFdWlTY3JlZW5SZWFkZXJPbmx5LCB7XG4gICAgY3NzOiBjc3NTY3JlZW5SZWFkZXJUZXh0U3R5bGVzXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIG51bGwsIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgIHRva2VuOiBcImV1aUxpbmsubmV3VGFyZ2V0LnNjcmVlblJlYWRlck9ubHlUZXh0XCIsXG4gICAgZGVmYXVsdDogXCIob3BlbnMgaW4gYSBuZXcgdGFiIG9yIHdpbmRvdylcIlxuICB9KSkpO1xuXG4gIHZhciBleHRlcm5hbExpbmtJY29uID0gX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgXCJhcmlhLWxhYmVsXCI6IHVzZUV1aUkxOG4oJ2V1aUxpbmsuZXh0ZXJuYWwuYXJpYUxhYmVsJywgJ0V4dGVybmFsIGxpbmsnKSxcbiAgICBzaXplOiBcInNcIixcbiAgICBjc3M6IGNzc0V4dGVybmFsTGlua0ljb25TdHlsZXMsXG4gICAgdHlwZTogXCJwb3BvdXRcIlxuICB9KTtcblxuICBpZiAoaHJlZiA9PT0gdW5kZWZpbmVkIHx8ICFpc0hyZWZWYWxpZCkge1xuICAgIHZhciBidXR0b25Qcm9wcyA9IF9vYmplY3RTcHJlYWQoe1xuICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWVzKCdldWlMaW5rJywgY2xhc3NOYW1lKSxcbiAgICAgIGNzczogW2Nzc1N0eWxlcywgZGlzYWJsZWQgPyBbc3R5bGVzLmRpc2FibGVkXSA6IHN0eWxlc1tjb2xvcl1dLFxuICAgICAgdHlwZTogdHlwZSxcbiAgICAgIG9uQ2xpY2s6IG9uQ2xpY2ssXG4gICAgICBkaXNhYmxlZDogZGlzYWJsZWRcbiAgICB9LCByZXN0KTtcblxuICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwiYnV0dG9uXCIsIF9leHRlbmRzKHtcbiAgICAgIHJlZjogcmVmXG4gICAgfSwgYnV0dG9uUHJvcHMpLCBjaGlsZHJlbik7XG4gIH1cblxuICB2YXIgc2VjdXJlUmVsID0gZ2V0U2VjdXJlUmVsRm9yVGFyZ2V0KHtcbiAgICBocmVmOiBocmVmLFxuICAgIHRhcmdldDogdGFyZ2V0LFxuICAgIHJlbDogcmVsXG4gIH0pO1xuXG4gIHZhciBhbmNob3JQcm9wcyA9IF9vYmplY3RTcHJlYWQoe1xuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lcygnZXVpTGluaycsIGNsYXNzTmFtZSksXG4gICAgY3NzOiBbY3NzU3R5bGVzLCBzdHlsZXNbY29sb3JdXSxcbiAgICBocmVmOiBocmVmLFxuICAgIHRhcmdldDogdGFyZ2V0LFxuICAgIHJlbDogc2VjdXJlUmVsLFxuICAgIG9uQ2xpY2s6IG9uQ2xpY2tcbiAgfSwgcmVzdCk7XG5cbiAgdmFyIHNob3dFeHRlcm5hbExpbmtJY29uID0gdGFyZ2V0ID09PSAnX2JsYW5rJyAmJiBleHRlcm5hbCAhPT0gZmFsc2UgfHwgZXh0ZXJuYWwgPT09IHRydWU7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiYVwiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWZcbiAgfSwgYW5jaG9yUHJvcHMpLCBjaGlsZHJlbiwgc2hvd0V4dGVybmFsTGlua0ljb24gJiYgZXh0ZXJuYWxMaW5rSWNvbiwgdGFyZ2V0ID09PSAnX2JsYW5rJyAmJiBuZXdUYXJnZXRTY3JlZW5yZWFkZXJUZXh0KTtcbn0pO1xuRXVpTGluay5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgdHlwZTogUHJvcFR5cGVzLm9uZU9mKFtcImJ1dHRvblwiLCBcInJlc2V0XCIsIFwic3VibWl0XCJdKSxcblxuICAvKipcbiAgICAgKiBBbnkgb2Ygb3VyIG5hbWVkIGNvbG9ycy5cbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBBbnkgb2Ygb3VyIG5hbWVkIGNvbG9ycy5cbiAgICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcy5hbnksXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgICAqIFNldCB0byB0cnVlIHRvIHNob3cgYW4gaWNvbiBpbmRpY2F0aW5nIHRoYXQgaXQgaXMgYW4gZXh0ZXJuYWwgbGluaztcbiAgICAgKiBEZWZhdWx0cyB0byB0cnVlIGlmIGB0YXJnZXQ9XCJfYmxhbmtcImBcbiAgICAgKi9cbiAgZXh0ZXJuYWw6IFByb3BUeXBlcy5ib29sXG59O1xuRXVpTGluay5kaXNwbGF5TmFtZSA9ICdFdWlMaW5rJztcbmV4cG9ydCB7IEV1aUxpbmsgfTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiZGlzYWJsZUZvY3VzVHJhcFwiLCBcImlucHV0XCIsIFwiZnVsbFdpZHRoXCIsIFwib25QYW5lbFJlc2l6ZVwiLCBcImlucHV0UmVmXCIsIFwicGFuZWxSZWZcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7IHZhciBfaSA9IGFyciA9PSBudWxsID8gbnVsbCA6IHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgYXJyW1N5bWJvbC5pdGVyYXRvcl0gfHwgYXJyW1wiQEBpdGVyYXRvclwiXTsgaWYgKF9pID09IG51bGwpIHJldHVybjsgdmFyIF9hcnIgPSBbXTsgdmFyIF9uID0gdHJ1ZTsgdmFyIF9kID0gZmFsc2U7IHZhciBfcywgX2U7IHRyeSB7IGZvciAoX2kgPSBfaS5jYWxsKGFycik7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHsgX2Fyci5wdXNoKF9zLnZhbHVlKTsgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOyB9IH0gY2F0Y2ggKGVycikgeyBfZCA9IHRydWU7IF9lID0gZXJyOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7IH0gZmluYWxseSB7IGlmIChfZCkgdGhyb3cgX2U7IH0gfSByZXR1cm4gX2FycjsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0LCB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc25hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdGFiYmFibGUgfSBmcm9tICd0YWJiYWJsZSc7XG5pbXBvcnQgeyBFdWlGb2N1c1RyYXAgfSBmcm9tICcuLi9mb2N1c190cmFwJztcbmltcG9ydCB7IEV1aVBvcG92ZXIgfSBmcm9tICcuL3BvcG92ZXInO1xuaW1wb3J0IHsgRXVpUmVzaXplT2JzZXJ2ZXIgfSBmcm9tICcuLi9vYnNlcnZlci9yZXNpemVfb2JzZXJ2ZXInO1xuaW1wb3J0IHsgY2FzY2FkaW5nTWVudUtleXMsIHVzZUNvbWJpbmVkUmVmcywgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBldWlGb3JtTWF4V2lkdGggfSBmcm9tICcuLi9mb3JtL2Zvcm0uc3R5bGVzJztcbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGxvZ2ljYWxDU1MgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlJbnB1dFBvcG92ZXIgPSBmdW5jdGlvbiBFdWlJbnB1dFBvcG92ZXIoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBfcmVmJGRpc2FibGVGb2N1c1RyYXAgPSBfcmVmLmRpc2FibGVGb2N1c1RyYXAsXG4gICAgICBkaXNhYmxlRm9jdXNUcmFwID0gX3JlZiRkaXNhYmxlRm9jdXNUcmFwID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkZGlzYWJsZUZvY3VzVHJhcCxcbiAgICAgIGlucHV0ID0gX3JlZi5pbnB1dCxcbiAgICAgIF9yZWYkZnVsbFdpZHRoID0gX3JlZi5mdWxsV2lkdGgsXG4gICAgICBmdWxsV2lkdGggPSBfcmVmJGZ1bGxXaWR0aCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGZ1bGxXaWR0aCxcbiAgICAgIG9uUGFuZWxSZXNpemUgPSBfcmVmLm9uUGFuZWxSZXNpemUsXG4gICAgICBfaW5wdXRSZWYgPSBfcmVmLmlucHV0UmVmLFxuICAgICAgX3BhbmVsUmVmID0gX3JlZi5wYW5lbFJlZixcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGV1aVRoZW1lQ29udGV4dCA9IHVzZUV1aVRoZW1lKCk7XG5cbiAgdmFyIF91c2VTdGF0ZSA9IHVzZVN0YXRlKG51bGwpLFxuICAgICAgX3VzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZSwgMiksXG4gICAgICBpbnB1dEVsID0gX3VzZVN0YXRlMlswXSxcbiAgICAgIHNldElucHV0RWwgPSBfdXNlU3RhdGUyWzFdO1xuXG4gIHZhciBfdXNlU3RhdGUzID0gdXNlU3RhdGUoKSxcbiAgICAgIF91c2VTdGF0ZTQgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUzLCAyKSxcbiAgICAgIGlucHV0RWxXaWR0aCA9IF91c2VTdGF0ZTRbMF0sXG4gICAgICBzZXRJbnB1dEVsV2lkdGggPSBfdXNlU3RhdGU0WzFdO1xuXG4gIHZhciBfdXNlU3RhdGU1ID0gdXNlU3RhdGUobnVsbCksXG4gICAgICBfdXNlU3RhdGU2ID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlNSwgMiksXG4gICAgICBwYW5lbEVsID0gX3VzZVN0YXRlNlswXSxcbiAgICAgIHNldFBhbmVsRWwgPSBfdXNlU3RhdGU2WzFdO1xuXG4gIHZhciBpbnB1dFJlZiA9IHVzZUNvbWJpbmVkUmVmcyhbc2V0SW5wdXRFbCwgX2lucHV0UmVmXSk7XG4gIHZhciBwYW5lbFJlZiA9IHVzZUNvbWJpbmVkUmVmcyhbc2V0UGFuZWxFbCwgX3BhbmVsUmVmXSk7XG4gIHZhciBzZXRQYW5lbFdpZHRoID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKHdpZHRoKSB7XG4gICAgaWYgKHBhbmVsRWwgJiYgKCEhaW5wdXRFbFdpZHRoIHx8ICEhd2lkdGgpKSB7XG4gICAgICB2YXIgbmV3V2lkdGggPSAhIXdpZHRoID8gd2lkdGggOiBpbnB1dEVsV2lkdGg7XG4gICAgICBwYW5lbEVsLnN0eWxlLndpZHRoID0gXCJcIi5jb25jYXQobmV3V2lkdGgsIFwicHhcIik7XG5cbiAgICAgIGlmIChvblBhbmVsUmVzaXplKSB7XG4gICAgICAgIG9uUGFuZWxSZXNpemUobmV3V2lkdGgpO1xuICAgICAgfVxuICAgIH1cbiAgfSwgW3BhbmVsRWwsIGlucHV0RWxXaWR0aCwgb25QYW5lbFJlc2l6ZV0pO1xuICB2YXIgb25SZXNpemUgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGlucHV0RWwpIHtcbiAgICAgIHZhciBfd2lkdGggPSBpbnB1dEVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgICAgc2V0SW5wdXRFbFdpZHRoKF93aWR0aCk7XG4gICAgICBzZXRQYW5lbFdpZHRoKF93aWR0aCk7XG4gICAgfVxuICB9LCBbaW5wdXRFbCwgc2V0UGFuZWxXaWR0aF0pO1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIG9uUmVzaXplKCk7XG4gIH0sIFtvblJlc2l6ZV0pO1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHNldFBhbmVsV2lkdGgoKTtcbiAgfSwgW3NldFBhbmVsV2lkdGhdKTtcblxuICB2YXIgb25LZXlEb3duID0gZnVuY3Rpb24gb25LZXlEb3duKGV2ZW50KSB7XG4gICAgaWYgKHBhbmVsRWwgJiYgZXZlbnQua2V5ID09PSBjYXNjYWRpbmdNZW51S2V5cy5UQUIpIHtcbiAgICAgIHZhciB0YWJiYWJsZUl0ZW1zID0gdGFiYmFibGUocGFuZWxFbCkuZmlsdGVyKGZ1bmN0aW9uIChlbCkge1xuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShlbC5hdHRyaWJ1dGVzKS5tYXAoZnVuY3Rpb24gKGVsKSB7XG4gICAgICAgICAgcmV0dXJuIGVsLm5hbWU7XG4gICAgICAgIH0pLmluZGV4T2YoJ2RhdGEtZm9jdXMtZ3VhcmQnKSA8IDA7XG4gICAgICB9KTtcblxuICAgICAgaWYgKGRpc2FibGVGb2N1c1RyYXAgfHwgdGFiYmFibGVJdGVtcy5sZW5ndGggJiYgdGFiYmFibGVJdGVtc1t0YWJiYWJsZUl0ZW1zLmxlbmd0aCAtIDFdID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50KSB7XG4gICAgICAgIHByb3BzLmNsb3NlUG9wb3ZlcigpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICB2YXIgY2xhc3NlcyA9IGNsYXNzbmFtZXMoJ2V1aUlucHV0UG9wb3ZlcicsIGNsYXNzTmFtZSk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVBvcG92ZXIsIF9leHRlbmRzKHtcbiAgICBjc3M6IC8qI19fUFVSRV9fKi9jc3MoZnVsbFdpZHRoID8gdW5kZWZpbmVkIDogbG9naWNhbENTUygnbWF4LXdpZHRoJywgZXVpRm9ybU1heFdpZHRoKGV1aVRoZW1lQ29udGV4dCkpLCBcIjtsYWJlbDpFdWlJbnB1dFBvcG92ZXI7XCIpLFxuICAgIG93bkZvY3VzOiBmYWxzZSxcbiAgICBidXR0b246IF9fX0Vtb3Rpb25KU1goRXVpUmVzaXplT2JzZXJ2ZXIsIHtcbiAgICAgIG9uUmVzaXplOiBvblJlc2l6ZVxuICAgIH0sIGZ1bmN0aW9uIChyZXNpemVSZWYpIHtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgICAgcmVmOiByZXNpemVSZWZcbiAgICAgIH0sIGlucHV0KTtcbiAgICB9KSxcbiAgICBidXR0b25SZWY6IGlucHV0UmVmLFxuICAgIHBhbmVsUmVmOiBwYW5lbFJlZixcbiAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgfSwgcHJvcHMpLCBfX19FbW90aW9uSlNYKEV1aUZvY3VzVHJhcCwge1xuICAgIGNsaWNrT3V0c2lkZURpc2FibGVzOiB0cnVlLFxuICAgIGRpc2FibGVkOiBkaXNhYmxlRm9jdXNUcmFwXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgIG9uS2V5RG93bjogb25LZXlEb3duXG4gIH0sIGNoaWxkcmVuKSkpO1xufTtcbkV1aUlucHV0UG9wb3Zlci5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgZGlzYWJsZUZvY3VzVHJhcDogUHJvcFR5cGVzLmJvb2wsXG4gIGZ1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wsXG4gIGlucHV0OiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsXG4gIGlucHV0UmVmOiBQcm9wVHlwZXMuYW55LFxuICBvblBhbmVsUmVzaXplOiBQcm9wVHlwZXMuZnVuY1xufTtcbkV1aUlucHV0UG9wb3Zlci5kZWZhdWx0UHJvcHMgPSB7XG4gIGFuY2hvclBvc2l0aW9uOiAnZG93bkxlZnQnLFxuICBhdHRhY2hUb0FuY2hvcjogdHJ1ZSxcbiAgZGlzcGxheTogJ2Jsb2NrJyxcbiAgcGFuZWxQYWRkaW5nU2l6ZTogJ3MnXG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbnZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsaWNrT3V0c2lkZURpc2FibGVzXCIsIFwiZGlzYWJsZWRcIiwgXCJyZXR1cm5Gb2N1c1wiLCBcIm5vSXNvbGF0aW9uXCIsIFwic2Nyb2xsTG9ja1wiXTtcblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBGb2N1c09uIH0gZnJvbSAncmVhY3QtZm9jdXMtb24nO1xuaW1wb3J0IHsgZmluZEVsZW1lbnRCeVNlbGVjdG9yT3JSZWYgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlGb2N1c1RyYXAgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEV1aUZvY3VzVHJhcCwgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihFdWlGb2N1c1RyYXApO1xuXG4gIGZ1bmN0aW9uIEV1aUZvY3VzVHJhcCgpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpRm9jdXNUcmFwKTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsLmFwcGx5KF9zdXBlciwgW3RoaXNdLmNvbmNhdChhcmdzKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic3RhdGVcIiwge1xuICAgICAgaGFzQmVlbkRpc2FibGVkQnlDbGljazogZmFsc2VcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJsYXN0SW50ZXJjZXB0ZWRFdmVudFwiLCBudWxsKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJwcmV2ZW50Rm9jdXNFeGl0XCIsIGZhbHNlKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzZXRJbml0aWFsRm9jdXNcIiwgZnVuY3Rpb24gKGluaXRpYWxGb2N1cykge1xuICAgICAgaWYgKCFpbml0aWFsRm9jdXMpIHJldHVybjtcbiAgICAgIHZhciBub2RlID0gZmluZEVsZW1lbnRCeVNlbGVjdG9yT3JSZWYoaW5pdGlhbEZvY3VzKTtcbiAgICAgIGlmICghbm9kZSkgcmV0dXJuOyAvLyBgZGF0YS1hdXRvZm9jdXNgIGlzIHBhcnQgb2YgdGhlICdyZWFjdC1mb2N1cy1vbicgQVBJXG5cbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdkYXRhLWF1dG9mb2N1cycsICd0cnVlJyk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25Nb3VzZXVwT3V0c2lkZVwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgX3RoaXMucmVtb3ZlTW91c2V1cExpc3RlbmVyKCk7IC8vIFRpbWVvdXQgZ2l2ZXMgcHJlY2VkZW5jZSB0byB0aGUgY29uc3VtZXIgdG8gaW5pdGlhdGUgY2xvc2UgaWYgaXQgaGFzIHRvZ2dsZSBiZWhhdmlvci5cbiAgICAgIC8vIE90aGVyd2lzZSB0aGlzIGV2ZW50IG1heSBvY2N1ciBmaXJzdCBhbmQgdGhlIGNvbnN1bWVyIHRvZ2dsZSB3aWxsIHJlb3BlbiB0aGUgZmx5b3V0LlxuXG5cbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMkcHJvcHMkb25DbGlja091LCBfdGhpcyRwcm9wcztcblxuICAgICAgICByZXR1cm4gKF90aGlzJHByb3BzJG9uQ2xpY2tPdSA9IChfdGhpcyRwcm9wcyA9IF90aGlzLnByb3BzKS5vbkNsaWNrT3V0c2lkZSkgPT09IG51bGwgfHwgX3RoaXMkcHJvcHMkb25DbGlja091ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRwcm9wcyRvbkNsaWNrT3UuY2FsbChfdGhpcyRwcm9wcywgZSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJhZGRNb3VzZXVwTGlzdGVuZXJcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIF90aGlzLm9uTW91c2V1cE91dHNpZGUpO1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCBfdGhpcy5vbk1vdXNldXBPdXRzaWRlKTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJyZW1vdmVNb3VzZXVwTGlzdGVuZXJcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIF90aGlzLm9uTW91c2V1cE91dHNpZGUpO1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCBfdGhpcy5vbk1vdXNldXBPdXRzaWRlKTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJoYW5kbGVPdXRzaWRlQ2xpY2tcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgb25DbGlja091dHNpZGUgPSBfdGhpcyRwcm9wczIub25DbGlja091dHNpZGUsXG4gICAgICAgICAgY2xpY2tPdXRzaWRlRGlzYWJsZXMgPSBfdGhpcyRwcm9wczIuY2xpY2tPdXRzaWRlRGlzYWJsZXMsXG4gICAgICAgICAgY2xvc2VPbk1vdXNldXAgPSBfdGhpcyRwcm9wczIuY2xvc2VPbk1vdXNldXA7XG5cbiAgICAgIGlmIChjbGlja091dHNpZGVEaXNhYmxlcykge1xuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgaGFzQmVlbkRpc2FibGVkQnlDbGljazogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9uQ2xpY2tPdXRzaWRlKSB7XG4gICAgICAgIGNsb3NlT25Nb3VzZXVwID8gX3RoaXMuYWRkTW91c2V1cExpc3RlbmVyKCkgOiBvbkNsaWNrT3V0c2lkZShldmVudCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoRXVpRm9jdXNUcmFwLCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHRoaXMuc2V0SW5pdGlhbEZvY3VzKHRoaXMucHJvcHMuaW5pdGlhbEZvY3VzKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkVXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgICAgIGlmIChwcmV2UHJvcHMuZGlzYWJsZWQgPT09IHRydWUgJiYgdGhpcy5wcm9wcy5kaXNhYmxlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L25vLWRpZC11cGRhdGUtc2V0LXN0YXRlXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGhhc0JlZW5EaXNhYmxlZEJ5Q2xpY2s6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIHRoaXMucmVtb3ZlTW91c2V1cExpc3RlbmVyKCk7XG4gICAgfSAvLyBQcm9ncmFtbWF0aWNhbGx5IHNldHMgZm9jdXMgb24gYSBuZXN0ZWQgRE9NIG5vZGU7IG9wdGlvbmFsXG5cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzMyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wczMuY2hpbGRyZW4sXG4gICAgICAgICAgY2xpY2tPdXRzaWRlRGlzYWJsZXMgPSBfdGhpcyRwcm9wczMuY2xpY2tPdXRzaWRlRGlzYWJsZXMsXG4gICAgICAgICAgZGlzYWJsZWQgPSBfdGhpcyRwcm9wczMuZGlzYWJsZWQsXG4gICAgICAgICAgcmV0dXJuRm9jdXMgPSBfdGhpcyRwcm9wczMucmV0dXJuRm9jdXMsXG4gICAgICAgICAgbm9Jc29sYXRpb24gPSBfdGhpcyRwcm9wczMubm9Jc29sYXRpb24sXG4gICAgICAgICAgc2Nyb2xsTG9jayA9IF90aGlzJHByb3BzMy5zY3JvbGxMb2NrLFxuICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMzLCBfZXhjbHVkZWQpO1xuXG4gICAgICB2YXIgaXNEaXNhYmxlZCA9IGRpc2FibGVkIHx8IHRoaXMuc3RhdGUuaGFzQmVlbkRpc2FibGVkQnlDbGljaztcblxuICAgICAgdmFyIGZvY3VzT25Qcm9wcyA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7XG4gICAgICAgIHJldHVybkZvY3VzOiByZXR1cm5Gb2N1cyxcbiAgICAgICAgbm9Jc29sYXRpb246IG5vSXNvbGF0aW9uLFxuICAgICAgICBzY3JvbGxMb2NrOiBzY3JvbGxMb2NrLFxuICAgICAgICBlbmFibGVkOiAhaXNEaXNhYmxlZFxuICAgICAgfSwgcmVzdCksIHt9LCB7XG4gICAgICAgIG9uQ2xpY2tPdXRzaWRlOiB0aGlzLmhhbmRsZU91dHNpZGVDbGlja1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEZvY3VzT24sIGZvY3VzT25Qcm9wcywgY2hpbGRyZW4pO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlGb2N1c1RyYXA7XG59KENvbXBvbmVudCk7XG5cbl9kZWZpbmVQcm9wZXJ0eShFdWlGb2N1c1RyYXAsIFwiZGVmYXVsdFByb3BzXCIsIHtcbiAgY2xpY2tPdXRzaWRlRGlzYWJsZXM6IGZhbHNlLFxuICBkaXNhYmxlZDogZmFsc2UsXG4gIHJldHVybkZvY3VzOiB0cnVlLFxuICBub0lzb2xhdGlvbjogdHJ1ZSxcbiAgc2Nyb2xsTG9jazogZmFsc2Vcbn0pO1xuXG5FdWlGb2N1c1RyYXAucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogV2hldGhlciBgb25DbGlja091dHNpZGVgIHNob3VsZCBiZSBjYWxsZWQgb24gbW91c2V1cCBpbnN0ZWFkIG9mIG1vdXNlZG93bi5cbiAgICAgKiBUaGlzIGZsYWcgY2FuIGJlIHVzZWQgdG8gcHJldmVudCBjb25mbGljdHMgd2l0aCBvdXRzaWRlIHRvZ2dsZSBidXR0b25zIGJ5IGRlbGF5aW5nIHRoZSBjbG9zaW5nIGNsaWNrIGNhbGxiYWNrLlxuICAgICAqL1xuICBjbG9zZU9uTW91c2V1cDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogQ2xpY2tpbmcgb3V0c2lkZSB0aGUgdHJhcCBhcmVhIHdpbGwgZGlzYWJsZSB0aGUgdHJhcFxuICAgICAqL1xuICBjbGlja091dHNpZGVEaXNhYmxlczogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogUmVmZXJlbmNlIHRvIGVsZW1lbnQgdGhhdCB3aWxsIGdldCBmb2N1cyB3aGVuIHRoZSB0cmFwIGlzIGluaXRpYXRlZFxuICAgICAqL1xuICBpbml0aWFsRm9jdXM6IFByb3BUeXBlcy5hbnksXG4gIHN0eWxlOiBQcm9wVHlwZXMuYW55LFxuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2xcbn07IiwgIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlLCBTdXBwcmVzc2VkRXJyb3IsIFN5bWJvbCAqL1xuXG52YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQsIGIpIHtcbiAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcbiAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbn1cblxuZXhwb3J0IHZhciBfX2Fzc2lnbiA9IGZ1bmN0aW9uKCkge1xuICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xuICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHQ7XG4gIH1cbiAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3Jlc3QocywgZSkge1xuICB2YXIgdCA9IHt9O1xuICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcbiAgICAgIHRbcF0gPSBzW3BdO1xuICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxuICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcbiAgICAgIH1cbiAgcmV0dXJuIHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2RlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3BhcmFtKHBhcmFtSW5kZXgsIGRlY29yYXRvcikge1xuICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fZXNEZWNvcmF0ZShjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykge1xuICBmdW5jdGlvbiBhY2NlcHQoZikgeyBpZiAoZiAhPT0gdm9pZCAwICYmIHR5cGVvZiBmICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGdW5jdGlvbiBleHBlY3RlZFwiKTsgcmV0dXJuIGY7IH1cbiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5ID0ga2luZCA9PT0gXCJnZXR0ZXJcIiA/IFwiZ2V0XCIgOiBraW5kID09PSBcInNldHRlclwiID8gXCJzZXRcIiA6IFwidmFsdWVcIjtcbiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJbltcInN0YXRpY1wiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7XG4gIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pO1xuICB2YXIgXywgZG9uZSA9IGZhbHNlO1xuICBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIGNvbnRleHQgPSB7fTtcbiAgICAgIGZvciAodmFyIHAgaW4gY29udGV4dEluKSBjb250ZXh0W3BdID0gcCA9PT0gXCJhY2Nlc3NcIiA/IHt9IDogY29udGV4dEluW3BdO1xuICAgICAgZm9yICh2YXIgcCBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0LmFjY2Vzc1twXSA9IGNvbnRleHRJbi5hY2Nlc3NbcF07XG4gICAgICBjb250ZXh0LmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24gKGYpIHsgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWRcIik7IGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGYgfHwgbnVsbCkpOyB9O1xuICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2ldKShraW5kID09PSBcImFjY2Vzc29yXCIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5XSwgY29udGV4dCk7XG4gICAgICBpZiAoa2luZCA9PT0gXCJhY2Nlc3NvclwiKSB7XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTtcbiAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09IFwib2JqZWN0XCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXztcbiAgICAgICAgICBpZiAoXyA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfO1xuICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXyk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChfID0gYWNjZXB0KHJlc3VsdCkpIHtcbiAgICAgICAgICBpZiAoa2luZCA9PT0gXCJmaWVsZFwiKSBpbml0aWFsaXplcnMudW5zaGlmdChfKTtcbiAgICAgICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5XSA9IF87XG4gICAgICB9XG4gIH1cbiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpO1xuICBkb25lID0gdHJ1ZTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3J1bkluaXRpYWxpemVycyh0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlKSB7XG4gIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFsdWUgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpXS5jYWxsKHRoaXNBcmcsIHZhbHVlKSA6IGluaXRpYWxpemVyc1tpXS5jYWxsKHRoaXNBcmcpO1xuICB9XG4gIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlIDogdm9pZCAwO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fcHJvcEtleSh4KSB7XG4gIHJldHVybiB0eXBlb2YgeCA9PT0gXCJzeW1ib2xcIiA/IHggOiBcIlwiLmNvbmNhdCh4KTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3NldEZ1bmN0aW9uTmFtZShmLCBuYW1lLCBwcmVmaXgpIHtcbiAgaWYgKHR5cGVvZiBuYW1lID09PSBcInN5bWJvbFwiKSBuYW1lID0gbmFtZS5kZXNjcmlwdGlvbiA/IFwiW1wiLmNvbmNhdChuYW1lLmRlc2NyaXB0aW9uLCBcIl1cIikgOiBcIlwiO1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGYsIFwibmFtZVwiLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IHByZWZpeCA/IFwiXCIuY29uY2F0KHByZWZpeCwgXCIgXCIsIG5hbWUpIDogbmFtZSB9KTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX21ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XG4gIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XG4gIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XG4gIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xuICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cbiAgZnVuY3Rpb24gc3RlcChvcCkge1xuICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgICAgd2hpbGUgKGcgJiYgKGcgPSAwLCBvcFswXSAmJiAoXyA9IDApKSwgXykgdHJ5IHtcbiAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XG4gICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xuICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcbiAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XG4gICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XG4gICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cbiAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xuICB9XG59XG5cbmV4cG9ydCB2YXIgX19jcmVhdGVCaW5kaW5nID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xuICB9XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICBvW2syXSA9IG1ba107XG59KTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fZXhwb3J0U3RhcihtLCBvKSB7XG4gIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobywgcCkpIF9fY3JlYXRlQmluZGluZyhvLCBtLCBwKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fdmFsdWVzKG8pIHtcbiAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcbiAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XG4gIGlmIChvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xuICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcbiAgICAgIH1cbiAgfTtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihzID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19yZWFkKG8sIG4pIHtcbiAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIW0pIHJldHVybiBvO1xuICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgdHJ5IHtcbiAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICB9XG4gIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxuICBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XG4gICAgICB9XG4gICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgfVxuICByZXR1cm4gYXI7XG59XG5cbi8qKiBAZGVwcmVjYXRlZCAqL1xuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkKCkge1xuICBmb3IgKHZhciBhciA9IFtdLCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKylcbiAgICAgIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNbaV0pKTtcbiAgcmV0dXJuIGFyO1xufVxuXG4vKiogQGRlcHJlY2F0ZWQgKi9cbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5cygpIHtcbiAgZm9yICh2YXIgcyA9IDAsIGkgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSBzICs9IGFyZ3VtZW50c1tpXS5sZW5ndGg7XG4gIGZvciAodmFyIHIgPSBBcnJheShzKSwgayA9IDAsIGkgPSAwOyBpIDwgaWw7IGkrKylcbiAgICAgIGZvciAodmFyIGEgPSBhcmd1bWVudHNbaV0sIGogPSAwLCBqbCA9IGEubGVuZ3RoOyBqIDwgamw7IGorKywgaysrKVxuICAgICAgICAgIHJba10gPSBhW2pdO1xuICByZXR1cm4gcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXkodG8sIGZyb20sIHBhY2spIHtcbiAgaWYgKHBhY2sgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgaSA9IDAsIGwgPSBmcm9tLmxlbmd0aCwgYXI7IGkgPCBsOyBpKyspIHtcbiAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcbiAgICAgICAgICBpZiAoIWFyKSBhciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20sIDAsIGkpO1xuICAgICAgICAgIGFyW2ldID0gZnJvbVtpXTtcbiAgICAgIH1cbiAgfVxuICByZXR1cm4gdG8uY29uY2F0KGFyIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20pKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXQodikge1xuICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBpLCBxID0gW107XG4gIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcbiAgZnVuY3Rpb24gdmVyYihuKSB7IGlmIChnW25dKSBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChhLCBiKSB7IHEucHVzaChbbiwgdiwgYSwgYl0pID4gMSB8fCByZXN1bWUobiwgdik7IH0pOyB9OyB9XG4gIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cbiAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyB9XG4gIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cbiAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxuICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHtcbiAgdmFyIGksIHA7XG4gIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiwgZnVuY3Rpb24gKGUpIHsgdGhyb3cgZTsgfSksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XG4gIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IGZhbHNlIH0gOiBmID8gZih2KSA6IHY7IH0gOiBmOyB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcbiAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xuICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9XG4gIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fbWFrZVRlbXBsYXRlT2JqZWN0KGNvb2tlZCwgcmF3KSB7XG4gIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvb2tlZCwgXCJyYXdcIiwgeyB2YWx1ZTogcmF3IH0pOyB9IGVsc2UgeyBjb29rZWQucmF3ID0gcmF3OyB9XG4gIHJldHVybiBjb29rZWQ7XG59O1xuXG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnRTdGFyKG1vZCkge1xuICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICB2YXIgcmVzdWx0ID0ge307XG4gIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0RGVmYXVsdChtb2QpIHtcbiAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBkZWZhdWx0OiBtb2QgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRHZXQocmVjZWl2ZXIsIHN0YXRlLCBraW5kLCBmKSB7XG4gIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtcbiAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgcmVhZCBwcml2YXRlIG1lbWJlciBmcm9tIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XG4gIHJldHVybiBraW5kID09PSBcIm1cIiA/IGYgOiBraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlcikgOiBmID8gZi52YWx1ZSA6IHN0YXRlLmdldChyZWNlaXZlcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHJlY2VpdmVyLCBzdGF0ZSwgdmFsdWUsIGtpbmQsIGYpIHtcbiAgaWYgKGtpbmQgPT09IFwibVwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBtZXRob2QgaXMgbm90IHdyaXRhYmxlXCIpO1xuICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXJcIik7XG4gIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XG4gIHJldHVybiAoa2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIsIHZhbHVlKSA6IGYgPyBmLnZhbHVlID0gdmFsdWUgOiBzdGF0ZS5zZXQocmVjZWl2ZXIsIHZhbHVlKSksIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEluKHN0YXRlLCByZWNlaXZlcikge1xuICBpZiAocmVjZWl2ZXIgPT09IG51bGwgfHwgKHR5cGVvZiByZWNlaXZlciAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgcmVjZWl2ZXIgIT09IFwiZnVuY3Rpb25cIikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgdXNlICdpbicgb3BlcmF0b3Igb24gbm9uLW9iamVjdFwiKTtcbiAgcmV0dXJuIHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgPT09IHN0YXRlIDogc3RhdGUuaGFzKHJlY2VpdmVyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYWRkRGlzcG9zYWJsZVJlc291cmNlKGVudiwgdmFsdWUsIGFzeW5jKSB7XG4gIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdm9pZCAwKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBleHBlY3RlZC5cIik7XG4gICAgdmFyIGRpc3Bvc2U7XG4gICAgaWYgKGFzeW5jKSB7XG4gICAgICAgIGlmICghU3ltYm9sLmFzeW5jRGlzcG9zZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0Rpc3Bvc2UgaXMgbm90IGRlZmluZWQuXCIpO1xuICAgICAgICBkaXNwb3NlID0gdmFsdWVbU3ltYm9sLmFzeW5jRGlzcG9zZV07XG4gICAgfVxuICAgIGlmIChkaXNwb3NlID09PSB2b2lkIDApIHtcbiAgICAgICAgaWYgKCFTeW1ib2wuZGlzcG9zZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5kaXNwb3NlIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgICAgICAgZGlzcG9zZSA9IHZhbHVlW1N5bWJvbC5kaXNwb3NlXTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkaXNwb3NlICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3Qgbm90IGRpc3Bvc2FibGUuXCIpO1xuICAgIGVudi5zdGFjay5wdXNoKHsgdmFsdWU6IHZhbHVlLCBkaXNwb3NlOiBkaXNwb3NlLCBhc3luYzogYXN5bmMgfSk7XG4gIH1cbiAgZWxzZSBpZiAoYXN5bmMpIHtcbiAgICBlbnYuc3RhY2sucHVzaCh7IGFzeW5jOiB0cnVlIH0pO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxudmFyIF9TdXBwcmVzc2VkRXJyb3IgPSB0eXBlb2YgU3VwcHJlc3NlZEVycm9yID09PSBcImZ1bmN0aW9uXCIgPyBTdXBwcmVzc2VkRXJyb3IgOiBmdW5jdGlvbiAoZXJyb3IsIHN1cHByZXNzZWQsIG1lc3NhZ2UpIHtcbiAgdmFyIGUgPSBuZXcgRXJyb3IobWVzc2FnZSk7XG4gIHJldHVybiBlLm5hbWUgPSBcIlN1cHByZXNzZWRFcnJvclwiLCBlLmVycm9yID0gZXJyb3IsIGUuc3VwcHJlc3NlZCA9IHN1cHByZXNzZWQsIGU7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19kaXNwb3NlUmVzb3VyY2VzKGVudikge1xuICBmdW5jdGlvbiBmYWlsKGUpIHtcbiAgICBlbnYuZXJyb3IgPSBlbnYuaGFzRXJyb3IgPyBuZXcgX1N1cHByZXNzZWRFcnJvcihlLCBlbnYuZXJyb3IsIFwiQW4gZXJyb3Igd2FzIHN1cHByZXNzZWQgZHVyaW5nIGRpc3Bvc2FsLlwiKSA6IGU7XG4gICAgZW52Lmhhc0Vycm9yID0gdHJ1ZTtcbiAgfVxuICBmdW5jdGlvbiBuZXh0KCkge1xuICAgIHdoaWxlIChlbnYuc3RhY2subGVuZ3RoKSB7XG4gICAgICB2YXIgcmVjID0gZW52LnN0YWNrLnBvcCgpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlYy5kaXNwb3NlICYmIHJlYy5kaXNwb3NlLmNhbGwocmVjLnZhbHVlKTtcbiAgICAgICAgaWYgKHJlYy5hc3luYykgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXN1bHQpLnRoZW4obmV4dCwgZnVuY3Rpb24oZSkgeyBmYWlsKGUpOyByZXR1cm4gbmV4dCgpOyB9KTtcbiAgICAgIH1cbiAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgZmFpbChlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGVudi5oYXNFcnJvcikgdGhyb3cgZW52LmVycm9yO1xuICB9XG4gIHJldHVybiBuZXh0KCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19leHRlbmRzLFxuICBfX2Fzc2lnbixcbiAgX19yZXN0LFxuICBfX2RlY29yYXRlLFxuICBfX3BhcmFtLFxuICBfX21ldGFkYXRhLFxuICBfX2F3YWl0ZXIsXG4gIF9fZ2VuZXJhdG9yLFxuICBfX2NyZWF0ZUJpbmRpbmcsXG4gIF9fZXhwb3J0U3RhcixcbiAgX192YWx1ZXMsXG4gIF9fcmVhZCxcbiAgX19zcHJlYWQsXG4gIF9fc3ByZWFkQXJyYXlzLFxuICBfX3NwcmVhZEFycmF5LFxuICBfX2F3YWl0LFxuICBfX2FzeW5jR2VuZXJhdG9yLFxuICBfX2FzeW5jRGVsZWdhdG9yLFxuICBfX2FzeW5jVmFsdWVzLFxuICBfX21ha2VUZW1wbGF0ZU9iamVjdCxcbiAgX19pbXBvcnRTdGFyLFxuICBfX2ltcG9ydERlZmF1bHQsXG4gIF9fY2xhc3NQcml2YXRlRmllbGRHZXQsXG4gIF9fY2xhc3NQcml2YXRlRmllbGRTZXQsXG4gIF9fY2xhc3NQcml2YXRlRmllbGRJbixcbiAgX19hZGREaXNwb3NhYmxlUmVzb3VyY2UsXG4gIF9fZGlzcG9zZVJlc291cmNlcyxcbn07XG4iLCAiaW1wb3J0IHsgX19hc3NpZ24gfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEZvY3VzT24gYXMgUmVhY3RGb2N1c09uIH0gZnJvbSAnLi9VSSc7XG5pbXBvcnQgU2lkZUNhciBmcm9tICcuL3NpZGVjYXInO1xudmFyIFJlcXVpcmVTaWRlQ2FyID0gZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU2lkZUNhciwgX19hc3NpZ24oe30sIHByb3BzKSk7XG59O1xuZXhwb3J0IHZhciBGb2N1c09uID0gUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiAocHJvcHMsIHJlZikgeyByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdEZvY3VzT24sIF9fYXNzaWduKHt9LCBwcm9wcywgeyByZWY6IHJlZiwgc2lkZUNhcjogUmVxdWlyZVNpZGVDYXIgfSkpOyB9KTtcbiIsICJpbXBvcnQgeyBfX2Fzc2lnbiwgX19yZXN0IH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBSZW1vdmVTY3JvbGwgfSBmcm9tICdyZWFjdC1yZW1vdmUtc2Nyb2xsL1VJJztcbmltcG9ydCBSZWFjdEZvY3VzTG9jayBmcm9tICdyZWFjdC1mb2N1cy1sb2NrL1VJJztcbmltcG9ydCB7IGVmZmVjdENhciB9IGZyb20gJy4vbWVkaXVtJztcbnZhciBQUkVWRU5UX1NDUk9MTCA9IHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9O1xuZXhwb3J0IHZhciBGb2N1c09uID0gUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiAocHJvcHMsIHBhcmVudFJlZikge1xuICAgIHZhciBfYSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKSwgbG9ja1Byb3BzID0gX2FbMF0sIHNldExvY2tQcm9wcyA9IF9hWzFdO1xuICAgIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLCBhdXRvRm9jdXMgPSBwcm9wcy5hdXRvRm9jdXMsIHNoYXJkcyA9IHByb3BzLnNoYXJkcywgY3Jvc3NGcmFtZSA9IHByb3BzLmNyb3NzRnJhbWUsIF9iID0gcHJvcHMuZW5hYmxlZCwgZW5hYmxlZCA9IF9iID09PSB2b2lkIDAgPyB0cnVlIDogX2IsIF9jID0gcHJvcHMuc2Nyb2xsTG9jaywgc2Nyb2xsTG9jayA9IF9jID09PSB2b2lkIDAgPyB0cnVlIDogX2MsIF9kID0gcHJvcHMuZm9jdXNMb2NrLCBmb2N1c0xvY2sgPSBfZCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9kLCBfZSA9IHByb3BzLnJldHVybkZvY3VzLCByZXR1cm5Gb2N1cyA9IF9lID09PSB2b2lkIDAgPyB0cnVlIDogX2UsIGluZXJ0ID0gcHJvcHMuaW5lcnQsIGFsbG93UGluY2hab29tID0gcHJvcHMuYWxsb3dQaW5jaFpvb20sIHNpZGVDYXIgPSBwcm9wcy5zaWRlQ2FyLCBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUsIHNob3VsZElnbm9yZSA9IHByb3BzLnNob3VsZElnbm9yZSwgcHJldmVudFNjcm9sbE9uRm9jdXMgPSBwcm9wcy5wcmV2ZW50U2Nyb2xsT25Gb2N1cywgc3R5bGUgPSBwcm9wcy5zdHlsZSwgYXMgPSBwcm9wcy5hcywgZ2FwTW9kZSA9IHByb3BzLmdhcE1vZGUsIHJlc3QgPSBfX3Jlc3QocHJvcHMsIFtcImNoaWxkcmVuXCIsIFwiYXV0b0ZvY3VzXCIsIFwic2hhcmRzXCIsIFwiY3Jvc3NGcmFtZVwiLCBcImVuYWJsZWRcIiwgXCJzY3JvbGxMb2NrXCIsIFwiZm9jdXNMb2NrXCIsIFwicmV0dXJuRm9jdXNcIiwgXCJpbmVydFwiLCBcImFsbG93UGluY2hab29tXCIsIFwic2lkZUNhclwiLCBcImNsYXNzTmFtZVwiLCBcInNob3VsZElnbm9yZVwiLCBcInByZXZlbnRTY3JvbGxPbkZvY3VzXCIsIFwic3R5bGVcIiwgXCJhc1wiLCBcImdhcE1vZGVcIl0pO1xuICAgIHZhciBTaWRlQ2FyID0gc2lkZUNhcjtcbiAgICB2YXIgb25BY3RpdmF0aW9uID0gbG9ja1Byb3BzLm9uQWN0aXZhdGlvbiwgb25EZWFjdGl2YXRpb24gPSBsb2NrUHJvcHMub25EZWFjdGl2YXRpb24sIHJlc3RQcm9wcyA9IF9fcmVzdChsb2NrUHJvcHMsIFtcIm9uQWN0aXZhdGlvblwiLCBcIm9uRGVhY3RpdmF0aW9uXCJdKTtcbiAgICB2YXIgYXBwbGllZExvY2tQcm9wcyA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCByZXN0UHJvcHMpLCB7IGFzOiBhcyxcbiAgICAgICAgc3R5bGU6IHN0eWxlLFxuICAgICAgICBzaWRlQ2FyOiBzaWRlQ2FyLFxuICAgICAgICBzaGFyZHM6IHNoYXJkcyxcbiAgICAgICAgYWxsb3dQaW5jaFpvb206IGFsbG93UGluY2hab29tLFxuICAgICAgICBnYXBNb2RlOiBnYXBNb2RlLFxuICAgICAgICBpbmVydDogaW5lcnQsIGVuYWJsZWQ6IGVuYWJsZWQgJiYgc2Nyb2xsTG9jayB9KTtcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsXG4gICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3RGb2N1c0xvY2ssIHsgcmVmOiBwYXJlbnRSZWYsIHNpZGVDYXI6IHNpZGVDYXIsIGRpc2FibGVkOiAhKGxvY2tQcm9wcyAmJiBlbmFibGVkICYmIGZvY3VzTG9jayksIHJldHVybkZvY3VzOiByZXR1cm5Gb2N1cywgYXV0b0ZvY3VzOiBhdXRvRm9jdXMsIHNoYXJkczogc2hhcmRzLCBjcm9zc0ZyYW1lOiBjcm9zc0ZyYW1lLCBvbkFjdGl2YXRpb246IG9uQWN0aXZhdGlvbiwgb25EZWFjdGl2YXRpb246IG9uRGVhY3RpdmF0aW9uLCBjbGFzc05hbWU6IGNsYXNzTmFtZSwgd2hpdGVMaXN0OiBzaG91bGRJZ25vcmUsIGxvY2tQcm9wczogYXBwbGllZExvY2tQcm9wcywgZm9jdXNPcHRpb25zOiBwcmV2ZW50U2Nyb2xsT25Gb2N1cyA/IFBSRVZFTlRfU0NST0xMIDogdW5kZWZpbmVkLCBhczogUmVtb3ZlU2Nyb2xsIH0sIGNoaWxkcmVuKSxcbiAgICAgICAgZW5hYmxlZCAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChTaWRlQ2FyLCBfX2Fzc2lnbih7fSwgcmVzdCwgeyBzaWRlQ2FyOiBlZmZlY3RDYXIsIHNldExvY2tQcm9wczogc2V0TG9ja1Byb3BzLCBzaGFyZHM6IHNoYXJkcyB9KSkpKSk7XG59KTtcbmV4cG9ydCAqIGZyb20gJy4vcmVFeHBvcnRzJztcbiIsICJpbXBvcnQgeyBfX2Fzc2lnbiwgX19yZXN0IH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBmdWxsV2lkdGhDbGFzc05hbWUsIHplcm9SaWdodENsYXNzTmFtZSB9IGZyb20gJ3JlYWN0LXJlbW92ZS1zY3JvbGwtYmFyL2NvbnN0YW50cyc7XG5pbXBvcnQgeyB1c2VNZXJnZVJlZnMgfSBmcm9tICd1c2UtY2FsbGJhY2stcmVmJztcbmltcG9ydCB7IGVmZmVjdENhciB9IGZyb20gJy4vbWVkaXVtJztcbnZhciBub3RoaW5nID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybjtcbn07XG4vKipcbiAqIFJlbW92ZXMgc2Nyb2xsYmFyIGZyb20gdGhlIHBhZ2UgYW5kIGNvbnRhaW4gdGhlIHNjcm9sbCB3aXRoaW4gdGhlIExvY2tcbiAqL1xudmFyIFJlbW92ZVNjcm9sbCA9IFJlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gKHByb3BzLCBwYXJlbnRSZWYpIHtcbiAgICB2YXIgcmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICAgIHZhciBfYSA9IFJlYWN0LnVzZVN0YXRlKHtcbiAgICAgICAgb25TY3JvbGxDYXB0dXJlOiBub3RoaW5nLFxuICAgICAgICBvbldoZWVsQ2FwdHVyZTogbm90aGluZyxcbiAgICAgICAgb25Ub3VjaE1vdmVDYXB0dXJlOiBub3RoaW5nLFxuICAgIH0pLCBjYWxsYmFja3MgPSBfYVswXSwgc2V0Q2FsbGJhY2tzID0gX2FbMV07XG4gICAgdmFyIGZvcndhcmRQcm9wcyA9IHByb3BzLmZvcndhcmRQcm9wcywgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbiwgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lLCByZW1vdmVTY3JvbGxCYXIgPSBwcm9wcy5yZW1vdmVTY3JvbGxCYXIsIGVuYWJsZWQgPSBwcm9wcy5lbmFibGVkLCBzaGFyZHMgPSBwcm9wcy5zaGFyZHMsIHNpZGVDYXIgPSBwcm9wcy5zaWRlQ2FyLCBub0lzb2xhdGlvbiA9IHByb3BzLm5vSXNvbGF0aW9uLCBpbmVydCA9IHByb3BzLmluZXJ0LCBhbGxvd1BpbmNoWm9vbSA9IHByb3BzLmFsbG93UGluY2hab29tLCBfYiA9IHByb3BzLmFzLCBDb250YWluZXIgPSBfYiA9PT0gdm9pZCAwID8gJ2RpdicgOiBfYiwgZ2FwTW9kZSA9IHByb3BzLmdhcE1vZGUsIHJlc3QgPSBfX3Jlc3QocHJvcHMsIFtcImZvcndhcmRQcm9wc1wiLCBcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwicmVtb3ZlU2Nyb2xsQmFyXCIsIFwiZW5hYmxlZFwiLCBcInNoYXJkc1wiLCBcInNpZGVDYXJcIiwgXCJub0lzb2xhdGlvblwiLCBcImluZXJ0XCIsIFwiYWxsb3dQaW5jaFpvb21cIiwgXCJhc1wiLCBcImdhcE1vZGVcIl0pO1xuICAgIHZhciBTaWRlQ2FyID0gc2lkZUNhcjtcbiAgICB2YXIgY29udGFpbmVyUmVmID0gdXNlTWVyZ2VSZWZzKFtyZWYsIHBhcmVudFJlZl0pO1xuICAgIHZhciBjb250YWluZXJQcm9wcyA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCByZXN0KSwgY2FsbGJhY2tzKTtcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsXG4gICAgICAgIGVuYWJsZWQgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU2lkZUNhciwgeyBzaWRlQ2FyOiBlZmZlY3RDYXIsIHJlbW92ZVNjcm9sbEJhcjogcmVtb3ZlU2Nyb2xsQmFyLCBzaGFyZHM6IHNoYXJkcywgbm9Jc29sYXRpb246IG5vSXNvbGF0aW9uLCBpbmVydDogaW5lcnQsIHNldENhbGxiYWNrczogc2V0Q2FsbGJhY2tzLCBhbGxvd1BpbmNoWm9vbTogISFhbGxvd1BpbmNoWm9vbSwgbG9ja1JlZjogcmVmLCBnYXBNb2RlOiBnYXBNb2RlIH0pKSxcbiAgICAgICAgZm9yd2FyZFByb3BzID8gKFJlYWN0LmNsb25lRWxlbWVudChSZWFjdC5DaGlsZHJlbi5vbmx5KGNoaWxkcmVuKSwgX19hc3NpZ24oX19hc3NpZ24oe30sIGNvbnRhaW5lclByb3BzKSwgeyByZWY6IGNvbnRhaW5lclJlZiB9KSkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ29udGFpbmVyLCBfX2Fzc2lnbih7fSwgY29udGFpbmVyUHJvcHMsIHsgY2xhc3NOYW1lOiBjbGFzc05hbWUsIHJlZjogY29udGFpbmVyUmVmIH0pLCBjaGlsZHJlbikpKSk7XG59KTtcblJlbW92ZVNjcm9sbC5kZWZhdWx0UHJvcHMgPSB7XG4gICAgZW5hYmxlZDogdHJ1ZSxcbiAgICByZW1vdmVTY3JvbGxCYXI6IHRydWUsXG4gICAgaW5lcnQ6IGZhbHNlLFxufTtcblJlbW92ZVNjcm9sbC5jbGFzc05hbWVzID0ge1xuICAgIGZ1bGxXaWR0aDogZnVsbFdpZHRoQ2xhc3NOYW1lLFxuICAgIHplcm9SaWdodDogemVyb1JpZ2h0Q2xhc3NOYW1lLFxufTtcbmV4cG9ydCB7IFJlbW92ZVNjcm9sbCB9O1xuIiwgImV4cG9ydCB2YXIgemVyb1JpZ2h0Q2xhc3NOYW1lID0gJ3JpZ2h0LXNjcm9sbC1iYXItcG9zaXRpb24nO1xuZXhwb3J0IHZhciBmdWxsV2lkdGhDbGFzc05hbWUgPSAnd2lkdGgtYmVmb3JlLXNjcm9sbC1iYXInO1xuZXhwb3J0IHZhciBub1Njcm9sbGJhcnNDbGFzc05hbWUgPSAnd2l0aC1zY3JvbGwtYmFycy1oaWRkZW4nO1xuLyoqXG4gKiBOYW1lIG9mIGEgQ1NTIHZhcmlhYmxlIGNvbnRhaW5pbmcgdGhlIGFtb3VudCBvZiBcImhpZGRlblwiIHNjcm9sbGJhclxuICogISBtaWdodCBiZSB1bmRlZmluZWQgISB1c2Ugd2lsbCBmYWxsYmFjayFcbiAqL1xuZXhwb3J0IHZhciByZW1vdmVkQmFyU2l6ZVZhcmlhYmxlID0gJy0tcmVtb3ZlZC1ib2R5LXNjcm9sbC1iYXItc2l6ZSc7XG4iLCAiLyoqXG4gKiBBc3NpZ25zIGEgdmFsdWUgZm9yIGEgZ2l2ZW4gcmVmLCBubyBtYXR0ZXIgb2YgdGhlIHJlZiBmb3JtYXRcbiAqIEBwYXJhbSB7UmVmT2JqZWN0fSByZWYgLSBhIGNhbGxiYWNrIGZ1bmN0aW9uIG9yIHJlZiBvYmplY3RcbiAqIEBwYXJhbSB2YWx1ZSAtIGEgbmV3IHZhbHVlXG4gKlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vdGhlS2FzaGV5L3VzZS1jYWxsYmFjay1yZWYjYXNzaWducmVmXG4gKiBAZXhhbXBsZVxuICogY29uc3QgcmVmT2JqZWN0ID0gdXNlUmVmKCk7XG4gKiBjb25zdCByZWZGbiA9IChyZWYpID0+IHsuLi4ufVxuICpcbiAqIGFzc2lnblJlZihyZWZPYmplY3QsIFwicmVmVmFsdWVcIik7XG4gKiBhc3NpZ25SZWYocmVmRm4sIFwicmVmVmFsdWVcIik7XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NpZ25SZWYocmVmLCB2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgcmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJlZih2YWx1ZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHJlZikge1xuICAgICAgICByZWYuY3VycmVudCA9IHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gcmVmO1xufVxuIiwgImltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuLyoqXG4gKiBjcmVhdGVzIGEgTXV0YWJsZVJlZiB3aXRoIHJlZiBjaGFuZ2UgY2FsbGJhY2tcbiAqIEBwYXJhbSBpbml0aWFsVmFsdWUgLSBpbml0aWFsIHJlZiB2YWx1ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgLSBhIGNhbGxiYWNrIHRvIHJ1biB3aGVuIHZhbHVlIGNoYW5nZXNcbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgcmVmID0gdXNlQ2FsbGJhY2tSZWYoMCwgKG5ld1ZhbHVlLCBvbGRWYWx1ZSkgPT4gY29uc29sZS5sb2cob2xkVmFsdWUsICctPicsIG5ld1ZhbHVlKTtcbiAqIHJlZi5jdXJyZW50ID0gMTtcbiAqIC8vIHByaW50cyAwIC0+IDFcbiAqXG4gKiBAc2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9ob29rcy1yZWZlcmVuY2UuaHRtbCN1c2VyZWZcbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3RoZUthc2hleS91c2UtY2FsbGJhY2stcmVmI3VzZWNhbGxiYWNrcmVmLS0tdG8tcmVwbGFjZS1yZWFjdHVzZXJlZlxuICogQHJldHVybnMge011dGFibGVSZWZPYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VDYWxsYmFja1JlZihpbml0aWFsVmFsdWUsIGNhbGxiYWNrKSB7XG4gICAgdmFyIHJlZiA9IHVzZVN0YXRlKGZ1bmN0aW9uICgpIHsgcmV0dXJuICh7XG4gICAgICAgIC8vIHZhbHVlXG4gICAgICAgIHZhbHVlOiBpbml0aWFsVmFsdWUsXG4gICAgICAgIC8vIGxhc3QgY2FsbGJhY2tcbiAgICAgICAgY2FsbGJhY2s6IGNhbGxiYWNrLFxuICAgICAgICAvLyBcIm1lbW9pemVkXCIgcHVibGljIGludGVyZmFjZVxuICAgICAgICBmYWNhZGU6IHtcbiAgICAgICAgICAgIGdldCBjdXJyZW50KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZWYudmFsdWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0IGN1cnJlbnQodmFsdWUpIHtcbiAgICAgICAgICAgICAgICB2YXIgbGFzdCA9IHJlZi52YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAobGFzdCAhPT0gdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVmLnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHJlZi5jYWxsYmFjayh2YWx1ZSwgbGFzdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9KTsgfSlbMF07XG4gICAgLy8gdXBkYXRlIGNhbGxiYWNrXG4gICAgcmVmLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgcmV0dXJuIHJlZi5mYWNhZGU7XG59XG4iLCAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgYXNzaWduUmVmIH0gZnJvbSAnLi9hc3NpZ25SZWYnO1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2tSZWYgfSBmcm9tICcuL3VzZVJlZic7XG52YXIgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gUmVhY3QudXNlTGF5b3V0RWZmZWN0IDogUmVhY3QudXNlRWZmZWN0O1xudmFyIGN1cnJlbnRWYWx1ZXMgPSBuZXcgV2Vha01hcCgpO1xuLyoqXG4gKiBNZXJnZXMgdHdvIG9yIG1vcmUgcmVmcyB0b2dldGhlciBwcm92aWRpbmcgYSBzaW5nbGUgaW50ZXJmYWNlIHRvIHNldCB0aGVpciB2YWx1ZVxuICogQHBhcmFtIHtSZWZPYmplY3R8UmVmfSByZWZzXG4gKiBAcmV0dXJucyB7TXV0YWJsZVJlZk9iamVjdH0gLSBhIG5ldyByZWYsIHdoaWNoIHRyYW5zbGF0ZXMgYWxsIGNoYW5nZXMgdG8ge3JlZnN9XG4gKlxuICogQHNlZSB7QGxpbmsgbWVyZ2VSZWZzfSBhIHZlcnNpb24gd2l0aG91dCBidWl0LWluIG1lbW9pemF0aW9uXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS90aGVLYXNoZXkvdXNlLWNhbGxiYWNrLXJlZiN1c2VtZXJnZXJlZnNcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBDb21wb25lbnQgPSBSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgcmVmKSA9PiB7XG4gKiAgIGNvbnN0IG93blJlZiA9IHVzZVJlZigpO1xuICogICBjb25zdCBkb21SZWYgPSB1c2VNZXJnZVJlZnMoW3JlZiwgb3duUmVmXSk7IC8vIFx1RDgzRFx1REM0OCBtZXJnZSB0b2dldGhlclxuICogICByZXR1cm4gPGRpdiByZWY9e2RvbVJlZn0+Li4uPC9kaXY+XG4gKiB9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VNZXJnZVJlZnMocmVmcywgZGVmYXVsdFZhbHVlKSB7XG4gICAgdmFyIGNhbGxiYWNrUmVmID0gdXNlQ2FsbGJhY2tSZWYoZGVmYXVsdFZhbHVlIHx8IG51bGwsIGZ1bmN0aW9uIChuZXdWYWx1ZSkge1xuICAgICAgICByZXR1cm4gcmVmcy5mb3JFYWNoKGZ1bmN0aW9uIChyZWYpIHsgcmV0dXJuIGFzc2lnblJlZihyZWYsIG5ld1ZhbHVlKTsgfSk7XG4gICAgfSk7XG4gICAgLy8gaGFuZGxlIHJlZnMgY2hhbmdlcyAtIGFkZGVkIG9yIHJlbW92ZWRcbiAgICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG9sZFZhbHVlID0gY3VycmVudFZhbHVlcy5nZXQoY2FsbGJhY2tSZWYpO1xuICAgICAgICBpZiAob2xkVmFsdWUpIHtcbiAgICAgICAgICAgIHZhciBwcmV2UmVmc18xID0gbmV3IFNldChvbGRWYWx1ZSk7XG4gICAgICAgICAgICB2YXIgbmV4dFJlZnNfMSA9IG5ldyBTZXQocmVmcyk7XG4gICAgICAgICAgICB2YXIgY3VycmVudF8xID0gY2FsbGJhY2tSZWYuY3VycmVudDtcbiAgICAgICAgICAgIHByZXZSZWZzXzEuZm9yRWFjaChmdW5jdGlvbiAocmVmKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFuZXh0UmVmc18xLmhhcyhyZWYpKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzc2lnblJlZihyZWYsIG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbmV4dFJlZnNfMS5mb3JFYWNoKGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXByZXZSZWZzXzEuaGFzKHJlZikpIHtcbiAgICAgICAgICAgICAgICAgICAgYXNzaWduUmVmKHJlZiwgY3VycmVudF8xKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50VmFsdWVzLnNldChjYWxsYmFja1JlZiwgcmVmcyk7XG4gICAgfSwgW3JlZnNdKTtcbiAgICByZXR1cm4gY2FsbGJhY2tSZWY7XG59XG4iLCAiaW1wb3J0IHsgX19hc3NpZ24gfSBmcm9tIFwidHNsaWJcIjtcbmZ1bmN0aW9uIEl0b0koYSkge1xuICAgIHJldHVybiBhO1xufVxuZnVuY3Rpb24gaW5uZXJDcmVhdGVNZWRpdW0oZGVmYXVsdHMsIG1pZGRsZXdhcmUpIHtcbiAgICBpZiAobWlkZGxld2FyZSA9PT0gdm9pZCAwKSB7IG1pZGRsZXdhcmUgPSBJdG9JOyB9XG4gICAgdmFyIGJ1ZmZlciA9IFtdO1xuICAgIHZhciBhc3NpZ25lZCA9IGZhbHNlO1xuICAgIHZhciBtZWRpdW0gPSB7XG4gICAgICAgIHJlYWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChhc3NpZ25lZCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU2lkZWNhcjogY291bGQgbm90IGByZWFkYCBmcm9tIGFuIGBhc3NpZ25lZGAgbWVkaXVtLiBgcmVhZGAgY291bGQgYmUgdXNlZCBvbmx5IHdpdGggYHVzZU1lZGl1bWAuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYnVmZmVyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBidWZmZXJbYnVmZmVyLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRzO1xuICAgICAgICB9LFxuICAgICAgICB1c2VNZWRpdW06IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICB2YXIgaXRlbSA9IG1pZGRsZXdhcmUoZGF0YSwgYXNzaWduZWQpO1xuICAgICAgICAgICAgYnVmZmVyLnB1c2goaXRlbSk7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGJ1ZmZlciA9IGJ1ZmZlci5maWx0ZXIoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHggIT09IGl0ZW07IH0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAgYXNzaWduU3luY01lZGl1bTogZnVuY3Rpb24gKGNiKSB7XG4gICAgICAgICAgICBhc3NpZ25lZCA9IHRydWU7XG4gICAgICAgICAgICB3aGlsZSAoYnVmZmVyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHZhciBjYnMgPSBidWZmZXI7XG4gICAgICAgICAgICAgICAgYnVmZmVyID0gW107XG4gICAgICAgICAgICAgICAgY2JzLmZvckVhY2goY2IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnVmZmVyID0ge1xuICAgICAgICAgICAgICAgIHB1c2g6IGZ1bmN0aW9uICh4KSB7IHJldHVybiBjYih4KTsgfSxcbiAgICAgICAgICAgICAgICBmaWx0ZXI6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGJ1ZmZlcjsgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICAgIGFzc2lnbk1lZGl1bTogZnVuY3Rpb24gKGNiKSB7XG4gICAgICAgICAgICBhc3NpZ25lZCA9IHRydWU7XG4gICAgICAgICAgICB2YXIgcGVuZGluZ1F1ZXVlID0gW107XG4gICAgICAgICAgICBpZiAoYnVmZmVyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHZhciBjYnMgPSBidWZmZXI7XG4gICAgICAgICAgICAgICAgYnVmZmVyID0gW107XG4gICAgICAgICAgICAgICAgY2JzLmZvckVhY2goY2IpO1xuICAgICAgICAgICAgICAgIHBlbmRpbmdRdWV1ZSA9IGJ1ZmZlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBleGVjdXRlUXVldWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNicyA9IHBlbmRpbmdRdWV1ZTtcbiAgICAgICAgICAgICAgICBwZW5kaW5nUXVldWUgPSBbXTtcbiAgICAgICAgICAgICAgICBjYnMuZm9yRWFjaChjYik7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdmFyIGN5Y2xlID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbihleGVjdXRlUXVldWUpOyB9O1xuICAgICAgICAgICAgY3ljbGUoKTtcbiAgICAgICAgICAgIGJ1ZmZlciA9IHtcbiAgICAgICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICBwZW5kaW5nUXVldWUucHVzaCh4KTtcbiAgICAgICAgICAgICAgICAgICAgY3ljbGUoKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGZpbHRlcjogZnVuY3Rpb24gKGZpbHRlcikge1xuICAgICAgICAgICAgICAgICAgICBwZW5kaW5nUXVldWUgPSBwZW5kaW5nUXVldWUuZmlsdGVyKGZpbHRlcik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBidWZmZXI7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgfTtcbiAgICByZXR1cm4gbWVkaXVtO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1lZGl1bShkZWZhdWx0cywgbWlkZGxld2FyZSkge1xuICAgIGlmIChtaWRkbGV3YXJlID09PSB2b2lkIDApIHsgbWlkZGxld2FyZSA9IEl0b0k7IH1cbiAgICByZXR1cm4gaW5uZXJDcmVhdGVNZWRpdW0oZGVmYXVsdHMsIG1pZGRsZXdhcmUpO1xufVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHlwZXNcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTaWRlY2FyTWVkaXVtKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgIHZhciBtZWRpdW0gPSBpbm5lckNyZWF0ZU1lZGl1bShudWxsKTtcbiAgICBtZWRpdW0ub3B0aW9ucyA9IF9fYXNzaWduKHsgYXN5bmM6IHRydWUsIHNzcjogZmFsc2UgfSwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIG1lZGl1bTtcbn1cbiIsICJpbXBvcnQgeyBfX2Fzc2lnbiwgX19yZXN0IH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG52YXIgU2lkZUNhciA9IGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciBzaWRlQ2FyID0gX2Euc2lkZUNhciwgcmVzdCA9IF9fcmVzdChfYSwgW1wic2lkZUNhclwiXSk7XG4gICAgaWYgKCFzaWRlQ2FyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignU2lkZWNhcjogcGxlYXNlIHByb3ZpZGUgYHNpZGVDYXJgIHByb3BlcnR5IHRvIGltcG9ydCB0aGUgcmlnaHQgY2FyJyk7XG4gICAgfVxuICAgIHZhciBUYXJnZXQgPSBzaWRlQ2FyLnJlYWQoKTtcbiAgICBpZiAoIVRhcmdldCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NpZGVjYXIgbWVkaXVtIG5vdCBmb3VuZCcpO1xuICAgIH1cbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUYXJnZXQsIF9fYXNzaWduKHt9LCByZXN0KSk7XG59O1xuU2lkZUNhci5pc1NpZGVDYXJFeHBvcnQgPSB0cnVlO1xuZXhwb3J0IGZ1bmN0aW9uIGV4cG9ydFNpZGVjYXIobWVkaXVtLCBleHBvcnRlZCkge1xuICAgIG1lZGl1bS51c2VNZWRpdW0oZXhwb3J0ZWQpO1xuICAgIHJldHVybiBTaWRlQ2FyO1xufVxuIiwgImltcG9ydCB7IGNyZWF0ZVNpZGVjYXJNZWRpdW0gfSBmcm9tICd1c2Utc2lkZWNhcic7XG5leHBvcnQgdmFyIGVmZmVjdENhciA9IGNyZWF0ZVNpZGVjYXJNZWRpdW0oKTtcbiIsICJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IG5vZGUsIGJvb2wsIHN0cmluZywgYW55LCBhcnJheU9mLCBvbmVPZlR5cGUsIG9iamVjdCwgZnVuYyB9IGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0ICogYXMgY29uc3RhbnRzIGZyb20gJ2ZvY3VzLWxvY2svY29uc3RhbnRzJztcbmltcG9ydCB7IHVzZU1lcmdlUmVmcyB9IGZyb20gJ3VzZS1jYWxsYmFjay1yZWYnO1xuaW1wb3J0IHsgaGlkZGVuR3VhcmQgfSBmcm9tICcuL0ZvY3VzR3VhcmQnO1xuaW1wb3J0IHsgbWVkaXVtRm9jdXMsIG1lZGl1bUJsdXIsIG1lZGl1bVNpZGVjYXIgfSBmcm9tICcuL21lZGl1bSc7XG5pbXBvcnQgeyBmb2N1c1Njb3BlIH0gZnJvbSAnLi9zY29wZSc7XG52YXIgZW1wdHlBcnJheSA9IFtdO1xudmFyIEZvY3VzTG9jayA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIEZvY3VzTG9ja1VJKHByb3BzLCBwYXJlbnRSZWYpIHtcbiAgdmFyIF9leHRlbmRzMjtcbiAgdmFyIF9SZWFjdCR1c2VTdGF0ZSA9IFJlYWN0LnVzZVN0YXRlKCksXG4gICAgcmVhbE9ic2VydmVkID0gX1JlYWN0JHVzZVN0YXRlWzBdLFxuICAgIHNldE9ic2VydmVkID0gX1JlYWN0JHVzZVN0YXRlWzFdO1xuICB2YXIgb2JzZXJ2ZWQgPSBSZWFjdC51c2VSZWYoKTtcbiAgdmFyIGlzQWN0aXZlID0gUmVhY3QudXNlUmVmKGZhbHNlKTtcbiAgdmFyIG9yaWdpbmFsRm9jdXNlZEVsZW1lbnQgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIHZhciBfUmVhY3QkdXNlU3RhdGUyID0gUmVhY3QudXNlU3RhdGUoe30pLFxuICAgIHVwZGF0ZSA9IF9SZWFjdCR1c2VTdGF0ZTJbMV07XG4gIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLFxuICAgIF9wcm9wcyRkaXNhYmxlZCA9IHByb3BzLmRpc2FibGVkLFxuICAgIGRpc2FibGVkID0gX3Byb3BzJGRpc2FibGVkID09PSB2b2lkIDAgPyBmYWxzZSA6IF9wcm9wcyRkaXNhYmxlZCxcbiAgICBfcHJvcHMkbm9Gb2N1c0d1YXJkcyA9IHByb3BzLm5vRm9jdXNHdWFyZHMsXG4gICAgbm9Gb2N1c0d1YXJkcyA9IF9wcm9wcyRub0ZvY3VzR3VhcmRzID09PSB2b2lkIDAgPyBmYWxzZSA6IF9wcm9wcyRub0ZvY3VzR3VhcmRzLFxuICAgIF9wcm9wcyRwZXJzaXN0ZW50Rm9jdSA9IHByb3BzLnBlcnNpc3RlbnRGb2N1cyxcbiAgICBwZXJzaXN0ZW50Rm9jdXMgPSBfcHJvcHMkcGVyc2lzdGVudEZvY3UgPT09IHZvaWQgMCA/IGZhbHNlIDogX3Byb3BzJHBlcnNpc3RlbnRGb2N1LFxuICAgIF9wcm9wcyRjcm9zc0ZyYW1lID0gcHJvcHMuY3Jvc3NGcmFtZSxcbiAgICBjcm9zc0ZyYW1lID0gX3Byb3BzJGNyb3NzRnJhbWUgPT09IHZvaWQgMCA/IHRydWUgOiBfcHJvcHMkY3Jvc3NGcmFtZSxcbiAgICBfcHJvcHMkYXV0b0ZvY3VzID0gcHJvcHMuYXV0b0ZvY3VzLFxuICAgIGF1dG9Gb2N1cyA9IF9wcm9wcyRhdXRvRm9jdXMgPT09IHZvaWQgMCA/IHRydWUgOiBfcHJvcHMkYXV0b0ZvY3VzLFxuICAgIGFsbG93VGV4dFNlbGVjdGlvbiA9IHByb3BzLmFsbG93VGV4dFNlbGVjdGlvbixcbiAgICBncm91cCA9IHByb3BzLmdyb3VwLFxuICAgIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSxcbiAgICB3aGl0ZUxpc3QgPSBwcm9wcy53aGl0ZUxpc3QsXG4gICAgaGFzUG9zaXRpdmVJbmRpY2VzID0gcHJvcHMuaGFzUG9zaXRpdmVJbmRpY2VzLFxuICAgIF9wcm9wcyRzaGFyZHMgPSBwcm9wcy5zaGFyZHMsXG4gICAgc2hhcmRzID0gX3Byb3BzJHNoYXJkcyA9PT0gdm9pZCAwID8gZW1wdHlBcnJheSA6IF9wcm9wcyRzaGFyZHMsXG4gICAgX3Byb3BzJGFzID0gcHJvcHMuYXMsXG4gICAgQ29udGFpbmVyID0gX3Byb3BzJGFzID09PSB2b2lkIDAgPyAnZGl2JyA6IF9wcm9wcyRhcyxcbiAgICBfcHJvcHMkbG9ja1Byb3BzID0gcHJvcHMubG9ja1Byb3BzLFxuICAgIGNvbnRhaW5lclByb3BzID0gX3Byb3BzJGxvY2tQcm9wcyA9PT0gdm9pZCAwID8ge30gOiBfcHJvcHMkbG9ja1Byb3BzLFxuICAgIFNpZGVDYXIgPSBwcm9wcy5zaWRlQ2FyLFxuICAgIF9wcm9wcyRyZXR1cm5Gb2N1cyA9IHByb3BzLnJldHVybkZvY3VzLFxuICAgIHNob3VsZFJldHVybkZvY3VzID0gX3Byb3BzJHJldHVybkZvY3VzID09PSB2b2lkIDAgPyBmYWxzZSA6IF9wcm9wcyRyZXR1cm5Gb2N1cyxcbiAgICBmb2N1c09wdGlvbnMgPSBwcm9wcy5mb2N1c09wdGlvbnMsXG4gICAgb25BY3RpdmF0aW9uQ2FsbGJhY2sgPSBwcm9wcy5vbkFjdGl2YXRpb24sXG4gICAgb25EZWFjdGl2YXRpb25DYWxsYmFjayA9IHByb3BzLm9uRGVhY3RpdmF0aW9uO1xuICB2YXIgX1JlYWN0JHVzZVN0YXRlMyA9IFJlYWN0LnVzZVN0YXRlKHt9KSxcbiAgICBpZCA9IF9SZWFjdCR1c2VTdGF0ZTNbMF07XG4gIHZhciBvbkFjdGl2YXRpb24gPSBSZWFjdC51c2VDYWxsYmFjayhmdW5jdGlvbiAoX3JlZikge1xuICAgIHZhciBjYXB0dXJlRm9jdXNSZXN0b3JlID0gX3JlZi5jYXB0dXJlRm9jdXNSZXN0b3JlO1xuICAgIGlmICghb3JpZ2luYWxGb2N1c2VkRWxlbWVudC5jdXJyZW50KSB7XG4gICAgICB2YXIgX2RvY3VtZW50O1xuICAgICAgdmFyIGFjdGl2ZUVsZW1lbnQgPSAoX2RvY3VtZW50ID0gZG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICAgIG9yaWdpbmFsRm9jdXNlZEVsZW1lbnQuY3VycmVudCA9IGFjdGl2ZUVsZW1lbnQ7XG4gICAgICBpZiAoYWN0aXZlRWxlbWVudCAhPT0gZG9jdW1lbnQuYm9keSkge1xuICAgICAgICBvcmlnaW5hbEZvY3VzZWRFbGVtZW50LmN1cnJlbnQgPSBjYXB0dXJlRm9jdXNSZXN0b3JlKGFjdGl2ZUVsZW1lbnQpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAob2JzZXJ2ZWQuY3VycmVudCAmJiBvbkFjdGl2YXRpb25DYWxsYmFjaykge1xuICAgICAgb25BY3RpdmF0aW9uQ2FsbGJhY2sob2JzZXJ2ZWQuY3VycmVudCk7XG4gICAgfVxuICAgIGlzQWN0aXZlLmN1cnJlbnQgPSB0cnVlO1xuICAgIHVwZGF0ZSgpO1xuICB9LCBbb25BY3RpdmF0aW9uQ2FsbGJhY2tdKTtcbiAgdmFyIG9uRGVhY3RpdmF0aW9uID0gUmVhY3QudXNlQ2FsbGJhY2soZnVuY3Rpb24gKCkge1xuICAgIGlzQWN0aXZlLmN1cnJlbnQgPSBmYWxzZTtcbiAgICBpZiAob25EZWFjdGl2YXRpb25DYWxsYmFjaykge1xuICAgICAgb25EZWFjdGl2YXRpb25DYWxsYmFjayhvYnNlcnZlZC5jdXJyZW50KTtcbiAgICB9XG4gICAgdXBkYXRlKCk7XG4gIH0sIFtvbkRlYWN0aXZhdGlvbkNhbGxiYWNrXSk7XG4gIHZhciByZXR1cm5Gb2N1cyA9IFJlYWN0LnVzZUNhbGxiYWNrKGZ1bmN0aW9uIChhbGxvd0RlZmVyKSB7XG4gICAgdmFyIGZvY3VzUmVzdG9yZSA9IG9yaWdpbmFsRm9jdXNlZEVsZW1lbnQuY3VycmVudDtcbiAgICBpZiAoZm9jdXNSZXN0b3JlKSB7XG4gICAgICB2YXIgcmV0dXJuRm9jdXNUbyA9ICh0eXBlb2YgZm9jdXNSZXN0b3JlID09PSAnZnVuY3Rpb24nID8gZm9jdXNSZXN0b3JlKCkgOiBmb2N1c1Jlc3RvcmUpIHx8IGRvY3VtZW50LmJvZHk7XG4gICAgICB2YXIgaG93VG9SZXR1cm5Gb2N1cyA9IHR5cGVvZiBzaG91bGRSZXR1cm5Gb2N1cyA9PT0gJ2Z1bmN0aW9uJyA/IHNob3VsZFJldHVybkZvY3VzKHJldHVybkZvY3VzVG8pIDogc2hvdWxkUmV0dXJuRm9jdXM7XG4gICAgICBpZiAoaG93VG9SZXR1cm5Gb2N1cykge1xuICAgICAgICB2YXIgcmV0dXJuRm9jdXNPcHRpb25zID0gdHlwZW9mIGhvd1RvUmV0dXJuRm9jdXMgPT09ICdvYmplY3QnID8gaG93VG9SZXR1cm5Gb2N1cyA6IHVuZGVmaW5lZDtcbiAgICAgICAgb3JpZ2luYWxGb2N1c2VkRWxlbWVudC5jdXJyZW50ID0gbnVsbDtcbiAgICAgICAgaWYgKGFsbG93RGVmZXIpIHtcbiAgICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiByZXR1cm5Gb2N1c1RvLmZvY3VzKHJldHVybkZvY3VzT3B0aW9ucyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuRm9jdXNUby5mb2N1cyhyZXR1cm5Gb2N1c09wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LCBbc2hvdWxkUmV0dXJuRm9jdXNdKTtcbiAgdmFyIG9uRm9jdXMgPSBSZWFjdC51c2VDYWxsYmFjayhmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBpZiAoaXNBY3RpdmUuY3VycmVudCkge1xuICAgICAgbWVkaXVtRm9jdXMudXNlTWVkaXVtKGV2ZW50KTtcbiAgICB9XG4gIH0sIFtdKTtcbiAgdmFyIG9uQmx1ciA9IG1lZGl1bUJsdXIudXNlTWVkaXVtO1xuICB2YXIgc2V0T2JzZXJ2ZU5vZGUgPSBSZWFjdC51c2VDYWxsYmFjayhmdW5jdGlvbiAobmV3T2JzZXJ2ZWQpIHtcbiAgICBpZiAob2JzZXJ2ZWQuY3VycmVudCAhPT0gbmV3T2JzZXJ2ZWQpIHtcbiAgICAgIG9ic2VydmVkLmN1cnJlbnQgPSBuZXdPYnNlcnZlZDtcbiAgICAgIHNldE9ic2VydmVkKG5ld09ic2VydmVkKTtcbiAgICB9XG4gIH0sIFtdKTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAodHlwZW9mIGFsbG93VGV4dFNlbGVjdGlvbiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbnNvbGUud2FybignUmVhY3QtRm9jdXMtTG9jazogYWxsb3dUZXh0U2VsZWN0aW9uIGlzIGRlcHJlY2F0ZWQgYW5kIGVuYWJsZWQgYnkgZGVmYXVsdCcpO1xuICAgIH1cbiAgICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKCFvYnNlcnZlZC5jdXJyZW50ICYmIHR5cGVvZiBDb250YWluZXIgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZvY3VzTG9jazogY291bGQgbm90IG9idGFpbiByZWYgdG8gaW50ZXJuYWwgbm9kZScpO1xuICAgICAgfVxuICAgIH0sIFtdKTtcbiAgfVxuICB2YXIgbG9ja1Byb3BzID0gX2V4dGVuZHMoKF9leHRlbmRzMiA9IHt9LCBfZXh0ZW5kczJbY29uc3RhbnRzLkZPQ1VTX0RJU0FCTEVEXSA9IGRpc2FibGVkICYmICdkaXNhYmxlZCcsIF9leHRlbmRzMltjb25zdGFudHMuRk9DVVNfR1JPVVBdID0gZ3JvdXAsIF9leHRlbmRzMiksIGNvbnRhaW5lclByb3BzKTtcbiAgdmFyIGhhc0xlYWRpbmdHdWFyZHMgPSBub0ZvY3VzR3VhcmRzICE9PSB0cnVlO1xuICB2YXIgaGFzVGFpbGluZ0d1YXJkcyA9IGhhc0xlYWRpbmdHdWFyZHMgJiYgbm9Gb2N1c0d1YXJkcyAhPT0gJ3RhaWwnO1xuICB2YXIgbWVyZ2VkUmVmID0gdXNlTWVyZ2VSZWZzKFtwYXJlbnRSZWYsIHNldE9ic2VydmVOb2RlXSk7XG4gIHZhciBmb2N1c1Njb3BlVmFsdWUgPSBSZWFjdC51c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb2JzZXJ2ZWQ6IG9ic2VydmVkLFxuICAgICAgc2hhcmRzOiBzaGFyZHMsXG4gICAgICBlbmFibGVkOiAhZGlzYWJsZWQsXG4gICAgICBhY3RpdmU6IGlzQWN0aXZlLmN1cnJlbnRcbiAgICB9O1xuICB9LCBbZGlzYWJsZWQsIGlzQWN0aXZlLmN1cnJlbnQsIHNoYXJkcywgcmVhbE9ic2VydmVkXSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCwgaGFzTGVhZGluZ0d1YXJkcyAmJiBbXG4gIC8qI19fUFVSRV9fKi9cbiAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAga2V5OiBcImd1YXJkLWZpcnN0XCIsXG4gICAgXCJkYXRhLWZvY3VzLWd1YXJkXCI6IHRydWUsXG4gICAgdGFiSW5kZXg6IGRpc2FibGVkID8gLTEgOiAwLFxuICAgIHN0eWxlOiBoaWRkZW5HdWFyZFxuICB9KSwgaGFzUG9zaXRpdmVJbmRpY2VzID8gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIGtleTogXCJndWFyZC1uZWFyZXN0XCIsXG4gICAgXCJkYXRhLWZvY3VzLWd1YXJkXCI6IHRydWUsXG4gICAgdGFiSW5kZXg6IGRpc2FibGVkID8gLTEgOiAxLFxuICAgIHN0eWxlOiBoaWRkZW5HdWFyZFxuICB9KSA6IG51bGxdLCAhZGlzYWJsZWQgJiYgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoU2lkZUNhciwge1xuICAgIGlkOiBpZCxcbiAgICBzaWRlQ2FyOiBtZWRpdW1TaWRlY2FyLFxuICAgIG9ic2VydmVkOiByZWFsT2JzZXJ2ZWQsXG4gICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgIHBlcnNpc3RlbnRGb2N1czogcGVyc2lzdGVudEZvY3VzLFxuICAgIGNyb3NzRnJhbWU6IGNyb3NzRnJhbWUsXG4gICAgYXV0b0ZvY3VzOiBhdXRvRm9jdXMsXG4gICAgd2hpdGVMaXN0OiB3aGl0ZUxpc3QsXG4gICAgc2hhcmRzOiBzaGFyZHMsXG4gICAgb25BY3RpdmF0aW9uOiBvbkFjdGl2YXRpb24sXG4gICAgb25EZWFjdGl2YXRpb246IG9uRGVhY3RpdmF0aW9uLFxuICAgIHJldHVybkZvY3VzOiByZXR1cm5Gb2N1cyxcbiAgICBmb2N1c09wdGlvbnM6IGZvY3VzT3B0aW9uc1xuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ29udGFpbmVyLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiBtZXJnZWRSZWZcbiAgfSwgbG9ja1Byb3BzLCB7XG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWUsXG4gICAgb25CbHVyOiBvbkJsdXIsXG4gICAgb25Gb2N1czogb25Gb2N1c1xuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoZm9jdXNTY29wZS5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBmb2N1c1Njb3BlVmFsdWVcbiAgfSwgY2hpbGRyZW4pKSwgaGFzVGFpbGluZ0d1YXJkcyAmJiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgXCJkYXRhLWZvY3VzLWd1YXJkXCI6IHRydWUsXG4gICAgdGFiSW5kZXg6IGRpc2FibGVkID8gLTEgOiAwLFxuICAgIHN0eWxlOiBoaWRkZW5HdWFyZFxuICB9KSk7XG59KTtcbkZvY3VzTG9jay5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIGNoaWxkcmVuOiBub2RlLFxuICBkaXNhYmxlZDogYm9vbCxcbiAgcmV0dXJuRm9jdXM6IG9uZU9mVHlwZShbYm9vbCwgb2JqZWN0LCBmdW5jXSksXG4gIGZvY3VzT3B0aW9uczogb2JqZWN0LFxuICBub0ZvY3VzR3VhcmRzOiBib29sLFxuICBoYXNQb3NpdGl2ZUluZGljZXM6IGJvb2wsXG4gIGFsbG93VGV4dFNlbGVjdGlvbjogYm9vbCxcbiAgYXV0b0ZvY3VzOiBib29sLFxuICBwZXJzaXN0ZW50Rm9jdXM6IGJvb2wsXG4gIGNyb3NzRnJhbWU6IGJvb2wsXG4gIGdyb3VwOiBzdHJpbmcsXG4gIGNsYXNzTmFtZTogc3RyaW5nLFxuICB3aGl0ZUxpc3Q6IGZ1bmMsXG4gIHNoYXJkczogYXJyYXlPZihhbnkpLFxuICBhczogb25lT2ZUeXBlKFtzdHJpbmcsIGZ1bmMsIG9iamVjdF0pLFxuICBsb2NrUHJvcHM6IG9iamVjdCxcbiAgb25BY3RpdmF0aW9uOiBmdW5jLFxuICBvbkRlYWN0aXZhdGlvbjogZnVuYyxcbiAgc2lkZUNhcjogYW55LmlzUmVxdWlyZWRcbn0gOiB7fTtcbmV4cG9ydCBkZWZhdWx0IEZvY3VzTG9jazsiLCAiLyoqXG4gKiBkZWZpbmVzIGEgZm9jdXMgZ3JvdXBcbiAqL1xuZXhwb3J0IHZhciBGT0NVU19HUk9VUCA9ICdkYXRhLWZvY3VzLWxvY2snO1xuLyoqXG4gKiBkaXNhYmxlcyBlbGVtZW50IGRpc2NvdmVyeSBpbnNpZGUgYSBncm91cCBtYXJrZWQgYnkga2V5XG4gKi9cbmV4cG9ydCB2YXIgRk9DVVNfRElTQUJMRUQgPSAnZGF0YS1mb2N1cy1sb2NrLWRpc2FibGVkJztcbi8qKlxuICogYWxsb3dzIHVuY29udHJvbGxlZCBmb2N1cyB3aXRoaW4gdGhlIG1hcmtlZCBhcmVhLCBlZmZlY3RpdmVseSBkaXNhYmxpbmcgZm9jdXMgbG9jayBmb3IgaXQncyBjb250ZW50XG4gKi9cbmV4cG9ydCB2YXIgRk9DVVNfQUxMT1cgPSAnZGF0YS1uby1mb2N1cy1sb2NrJztcbi8qKlxuICogaW5zdHJ1Y3RzIGF1dG9mb2N1cyBlbmdpbmUgdG8gcGljayBkZWZhdWx0IGF1dG9mb2N1cyBpbnNpZGUgYSBnaXZlbiBub2RlXG4gKiBjYW4gYmUgc2V0IG9uIHRoZSBlbGVtZW50IG9yIGNvbnRhaW5lclxuICovXG5leHBvcnQgdmFyIEZPQ1VTX0FVVE8gPSAnZGF0YS1hdXRvZm9jdXMtaW5zaWRlJztcbi8qKlxuICogaW5zdHJ1Y3RzIGF1dG9mb2N1cyB0byBpZ25vcmUgZWxlbWVudHMgd2l0aGluIGEgZ2l2ZW4gbm9kZVxuICogY2FuIGJlIHNldCBvbiB0aGUgZWxlbWVudCBvciBjb250YWluZXJcbiAqL1xuZXhwb3J0IHZhciBGT0NVU19OT19BVVRPRk9DVVMgPSAnZGF0YS1uby1hdXRvZm9jdXMnO1xuIiwgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5leHBvcnQgdmFyIGhpZGRlbkd1YXJkID0ge1xuICB3aWR0aDogJzFweCcsXG4gIGhlaWdodDogJzBweCcsXG4gIHBhZGRpbmc6IDAsXG4gIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgcG9zaXRpb246ICdmaXhlZCcsXG4gIHRvcDogJzFweCcsXG4gIGxlZnQ6ICcxcHgnXG59O1xudmFyIEluRm9jdXNHdWFyZCA9IGZ1bmN0aW9uIEluRm9jdXNHdWFyZChfcmVmKSB7XG4gIHZhciBfcmVmJGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBjaGlsZHJlbiA9IF9yZWYkY2hpbGRyZW4gPT09IHZvaWQgMCA/IG51bGwgOiBfcmVmJGNoaWxkcmVuO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICBrZXk6IFwiZ3VhcmQtZmlyc3RcIixcbiAgICBcImRhdGEtZm9jdXMtZ3VhcmRcIjogdHJ1ZSxcbiAgICBcImRhdGEtZm9jdXMtYXV0by1ndWFyZFwiOiB0cnVlLFxuICAgIHN0eWxlOiBoaWRkZW5HdWFyZFxuICB9KSwgY2hpbGRyZW4sIGNoaWxkcmVuICYmIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICBrZXk6IFwiZ3VhcmQtbGFzdFwiLFxuICAgIFwiZGF0YS1mb2N1cy1ndWFyZFwiOiB0cnVlLFxuICAgIFwiZGF0YS1mb2N1cy1hdXRvLWd1YXJkXCI6IHRydWUsXG4gICAgc3R5bGU6IGhpZGRlbkd1YXJkXG4gIH0pKTtcbn07XG5JbkZvY3VzR3VhcmQucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8ge1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGVcbn0gOiB7fTtcbmV4cG9ydCBkZWZhdWx0IEluRm9jdXNHdWFyZDsiLCAiaW1wb3J0IHsgY3JlYXRlTWVkaXVtLCBjcmVhdGVTaWRlY2FyTWVkaXVtIH0gZnJvbSAndXNlLXNpZGVjYXInO1xuZXhwb3J0IHZhciBtZWRpdW1Gb2N1cyA9IGNyZWF0ZU1lZGl1bSh7fSwgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHRhcmdldCA9IF9yZWYudGFyZ2V0LFxuICAgIGN1cnJlbnRUYXJnZXQgPSBfcmVmLmN1cnJlbnRUYXJnZXQ7XG4gIHJldHVybiB7XG4gICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgY3VycmVudFRhcmdldDogY3VycmVudFRhcmdldFxuICB9O1xufSk7XG5leHBvcnQgdmFyIG1lZGl1bUJsdXIgPSBjcmVhdGVNZWRpdW0oKTtcbmV4cG9ydCB2YXIgbWVkaXVtRWZmZWN0ID0gY3JlYXRlTWVkaXVtKCk7XG5leHBvcnQgdmFyIG1lZGl1bVNpZGVjYXIgPSBjcmVhdGVTaWRlY2FyTWVkaXVtKHtcbiAgYXN5bmM6IHRydWUsXG4gIHNzcjogdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJ1xufSk7IiwgImltcG9ydCB7IGNyZWF0ZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5leHBvcnQgdmFyIGZvY3VzU2NvcGUgPSAvKiNfX1BVUkVfXyovY3JlYXRlQ29udGV4dCh1bmRlZmluZWQpOyIsICJleHBvcnQgZnVuY3Rpb24gZGVmZXJBY3Rpb24oYWN0aW9uKSB7XG4gIHNldFRpbWVvdXQoYWN0aW9uLCAxKTtcbn1cbmV4cG9ydCB2YXIgaW5saW5lUHJvcCA9IGZ1bmN0aW9uIGlubGluZVByb3AobmFtZSwgdmFsdWUpIHtcbiAgdmFyIG9iaiA9IHt9O1xuICBvYmpbbmFtZV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iajtcbn07XG5leHBvcnQgdmFyIGV4dHJhY3RSZWYgPSBmdW5jdGlvbiBleHRyYWN0UmVmKHJlZikge1xuICByZXR1cm4gcmVmICYmICdjdXJyZW50JyBpbiByZWYgPyByZWYuY3VycmVudCA6IHJlZjtcbn07IiwgImltcG9ydCBGb2N1c0xvY2tVSSBmcm9tICcuL0xvY2snO1xuaW1wb3J0IEF1dG9Gb2N1c0luc2lkZSBmcm9tICcuL0F1dG9Gb2N1c0luc2lkZSc7XG5pbXBvcnQgTW92ZUZvY3VzSW5zaWRlLCB7IHVzZUZvY3VzSW5zaWRlIH0gZnJvbSAnLi9Nb3ZlRm9jdXNJbnNpZGUnO1xuaW1wb3J0IEZyZWVGb2N1c0luc2lkZSBmcm9tICcuL0ZyZWVGb2N1c0luc2lkZSc7XG5pbXBvcnQgSW5Gb2N1c0d1YXJkIGZyb20gJy4vRm9jdXNHdWFyZCc7XG5pbXBvcnQgeyB1c2VGb2N1c0NvbnRyb2xsZXIsIHVzZUZvY3VzU2NvcGUgfSBmcm9tICcuL3VzZS1mb2N1cy1zY29wZSc7XG5pbXBvcnQgeyB1c2VGb2N1c1N0YXRlIH0gZnJvbSAnLi91c2UtZm9jdXMtc3RhdGUnO1xuZXhwb3J0IHsgQXV0b0ZvY3VzSW5zaWRlLCBNb3ZlRm9jdXNJbnNpZGUsIEZyZWVGb2N1c0luc2lkZSwgSW5Gb2N1c0d1YXJkLCBGb2N1c0xvY2tVSSwgdXNlRm9jdXNJbnNpZGUsIHVzZUZvY3VzQ29udHJvbGxlciwgdXNlRm9jdXNTY29wZSwgdXNlRm9jdXNTdGF0ZSB9O1xuZXhwb3J0IGRlZmF1bHQgRm9jdXNMb2NrVUk7IiwgImltcG9ydCB7IGNyZWF0ZVNpZGVjYXJNZWRpdW0gfSBmcm9tICd1c2Utc2lkZWNhcic7XG5leHBvcnQgdmFyIGVmZmVjdENhciA9IGNyZWF0ZVNpZGVjYXJNZWRpdW0oKTtcbmV4cG9ydCB2YXIgZm9jdXNIaWRkZW5NYXJrZXIgPSAnZGF0YS1mb2N1cy1vbi1oaWRkZW4nO1xuIiwgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgd2l0aFNpZGVFZmZlY3QgZnJvbSAncmVhY3QtY2xpZW50c2lkZS1lZmZlY3QnO1xuaW1wb3J0IHsgbW92ZUZvY3VzSW5zaWRlLCBmb2N1c0luc2lkZSwgZm9jdXNJc0hpZGRlbiwgZXhwYW5kRm9jdXNhYmxlTm9kZXMsIGZvY3VzTmV4dEVsZW1lbnQsIGZvY3VzUHJldkVsZW1lbnQsIGZvY3VzRmlyc3RFbGVtZW50LCBmb2N1c0xhc3RFbGVtZW50LCBjYXB0dXJlRm9jdXNSZXN0b3JlIH0gZnJvbSAnZm9jdXMtbG9jayc7XG5pbXBvcnQgeyBkZWZlckFjdGlvbiwgZXh0cmFjdFJlZiB9IGZyb20gJy4vdXRpbCc7XG5pbXBvcnQgeyBtZWRpdW1Gb2N1cywgbWVkaXVtQmx1ciwgbWVkaXVtRWZmZWN0IH0gZnJvbSAnLi9tZWRpdW0nO1xudmFyIGZvY3VzT25Cb2R5ID0gZnVuY3Rpb24gZm9jdXNPbkJvZHkoKSB7XG4gIHJldHVybiBkb2N1bWVudCAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBkb2N1bWVudC5ib2R5O1xufTtcbnZhciBpc0ZyZWVGb2N1cyA9IGZ1bmN0aW9uIGlzRnJlZUZvY3VzKCkge1xuICByZXR1cm4gZm9jdXNPbkJvZHkoKSB8fCBmb2N1c0lzSGlkZGVuKCk7XG59O1xudmFyIGxhc3RBY3RpdmVUcmFwID0gbnVsbDtcbnZhciBsYXN0QWN0aXZlRm9jdXMgPSBudWxsO1xudmFyIGxhc3RQb3J0YWxlZEVsZW1lbnQgPSBudWxsO1xudmFyIGZvY3VzV2FzT3V0c2lkZVdpbmRvdyA9IGZhbHNlO1xudmFyIGRlZmF1bHRXaGl0ZWxpc3QgPSBmdW5jdGlvbiBkZWZhdWx0V2hpdGVsaXN0KCkge1xuICByZXR1cm4gdHJ1ZTtcbn07XG52YXIgZm9jdXNXaGl0ZWxpc3RlZCA9IGZ1bmN0aW9uIGZvY3VzV2hpdGVsaXN0ZWQoYWN0aXZlRWxlbWVudCkge1xuICByZXR1cm4gKGxhc3RBY3RpdmVUcmFwLndoaXRlTGlzdCB8fCBkZWZhdWx0V2hpdGVsaXN0KShhY3RpdmVFbGVtZW50KTtcbn07XG52YXIgcmVjb3JkUG9ydGFsID0gZnVuY3Rpb24gcmVjb3JkUG9ydGFsKG9ic2VydmVyTm9kZSwgcG9ydGFsZWRFbGVtZW50KSB7XG4gIGxhc3RQb3J0YWxlZEVsZW1lbnQgPSB7XG4gICAgb2JzZXJ2ZXJOb2RlOiBvYnNlcnZlck5vZGUsXG4gICAgcG9ydGFsZWRFbGVtZW50OiBwb3J0YWxlZEVsZW1lbnRcbiAgfTtcbn07XG52YXIgZm9jdXNJc1BvcnRhbGVkUGFpciA9IGZ1bmN0aW9uIGZvY3VzSXNQb3J0YWxlZFBhaXIoZWxlbWVudCkge1xuICByZXR1cm4gbGFzdFBvcnRhbGVkRWxlbWVudCAmJiBsYXN0UG9ydGFsZWRFbGVtZW50LnBvcnRhbGVkRWxlbWVudCA9PT0gZWxlbWVudDtcbn07XG5mdW5jdGlvbiBhdXRvR3VhcmQoc3RhcnRJbmRleCwgZW5kLCBzdGVwLCBhbGxOb2Rlcykge1xuICB2YXIgbGFzdEd1YXJkID0gbnVsbDtcbiAgdmFyIGkgPSBzdGFydEluZGV4O1xuICBkbyB7XG4gICAgdmFyIGl0ZW0gPSBhbGxOb2Rlc1tpXTtcbiAgICBpZiAoaXRlbS5ndWFyZCkge1xuICAgICAgaWYgKGl0ZW0ubm9kZS5kYXRhc2V0LmZvY3VzQXV0b0d1YXJkKSB7XG4gICAgICAgIGxhc3RHdWFyZCA9IGl0ZW07XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpdGVtLmxvY2tJdGVtKSB7XG4gICAgICBpZiAoaSAhPT0gc3RhcnRJbmRleCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBsYXN0R3VhcmQgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH0gd2hpbGUgKChpICs9IHN0ZXApICE9PSBlbmQpO1xuICBpZiAobGFzdEd1YXJkKSB7XG4gICAgbGFzdEd1YXJkLm5vZGUudGFiSW5kZXggPSAwO1xuICB9XG59XG52YXIgZm9jdXNXYXNPdXRzaWRlID0gZnVuY3Rpb24gZm9jdXNXYXNPdXRzaWRlKGNyb3NzRnJhbWVPcHRpb24pIHtcbiAgaWYgKGNyb3NzRnJhbWVPcHRpb24pIHtcbiAgICByZXR1cm4gQm9vbGVhbihmb2N1c1dhc091dHNpZGVXaW5kb3cpO1xuICB9XG4gIHJldHVybiBmb2N1c1dhc091dHNpZGVXaW5kb3cgPT09ICdtZWFud2hpbGUnO1xufTtcbnZhciBjaGVja0luSG9zdCA9IGZ1bmN0aW9uIGNoZWNrSW5Ib3N0KGNoZWNrLCBlbCwgYm91bmRhcnkpIHtcbiAgcmV0dXJuIGVsICYmIChlbC5ob3N0ID09PSBjaGVjayAmJiAoIWVsLmFjdGl2ZUVsZW1lbnQgfHwgYm91bmRhcnkuY29udGFpbnMoZWwuYWN0aXZlRWxlbWVudCkpIHx8IGVsLnBhcmVudE5vZGUgJiYgY2hlY2tJbkhvc3QoY2hlY2ssIGVsLnBhcmVudE5vZGUsIGJvdW5kYXJ5KSk7XG59O1xudmFyIHdpdGhpbkhvc3QgPSBmdW5jdGlvbiB3aXRoaW5Ib3N0KGFjdGl2ZUVsZW1lbnQsIHdvcmtpbmdBcmVhKSB7XG4gIHJldHVybiB3b3JraW5nQXJlYS5zb21lKGZ1bmN0aW9uIChhcmVhKSB7XG4gICAgcmV0dXJuIGNoZWNrSW5Ib3N0KGFjdGl2ZUVsZW1lbnQsIGFyZWEsIGFyZWEpO1xuICB9KTtcbn07XG52YXIgYWN0aXZhdGVUcmFwID0gZnVuY3Rpb24gYWN0aXZhdGVUcmFwKCkge1xuICB2YXIgcmVzdWx0ID0gZmFsc2U7XG4gIGlmIChsYXN0QWN0aXZlVHJhcCkge1xuICAgIHZhciBfbGFzdEFjdGl2ZVRyYXAgPSBsYXN0QWN0aXZlVHJhcCxcbiAgICAgIG9ic2VydmVkID0gX2xhc3RBY3RpdmVUcmFwLm9ic2VydmVkLFxuICAgICAgcGVyc2lzdGVudEZvY3VzID0gX2xhc3RBY3RpdmVUcmFwLnBlcnNpc3RlbnRGb2N1cyxcbiAgICAgIGF1dG9Gb2N1cyA9IF9sYXN0QWN0aXZlVHJhcC5hdXRvRm9jdXMsXG4gICAgICBzaGFyZHMgPSBfbGFzdEFjdGl2ZVRyYXAuc2hhcmRzLFxuICAgICAgY3Jvc3NGcmFtZSA9IF9sYXN0QWN0aXZlVHJhcC5jcm9zc0ZyYW1lLFxuICAgICAgZm9jdXNPcHRpb25zID0gX2xhc3RBY3RpdmVUcmFwLmZvY3VzT3B0aW9ucztcbiAgICB2YXIgd29ya2luZ05vZGUgPSBvYnNlcnZlZCB8fCBsYXN0UG9ydGFsZWRFbGVtZW50ICYmIGxhc3RQb3J0YWxlZEVsZW1lbnQucG9ydGFsZWRFbGVtZW50O1xuICAgIHZhciBhY3RpdmVFbGVtZW50ID0gZG9jdW1lbnQgJiYgZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICBpZiAod29ya2luZ05vZGUpIHtcbiAgICAgIHZhciB3b3JraW5nQXJlYSA9IFt3b3JraW5nTm9kZV0uY29uY2F0KHNoYXJkcy5tYXAoZXh0cmFjdFJlZikuZmlsdGVyKEJvb2xlYW4pKTtcbiAgICAgIGlmICghYWN0aXZlRWxlbWVudCB8fCBmb2N1c1doaXRlbGlzdGVkKGFjdGl2ZUVsZW1lbnQpKSB7XG4gICAgICAgIGlmIChwZXJzaXN0ZW50Rm9jdXMgfHwgZm9jdXNXYXNPdXRzaWRlKGNyb3NzRnJhbWUpIHx8ICFpc0ZyZWVGb2N1cygpIHx8ICFsYXN0QWN0aXZlRm9jdXMgJiYgYXV0b0ZvY3VzKSB7XG4gICAgICAgICAgaWYgKHdvcmtpbmdOb2RlICYmICEoZm9jdXNJbnNpZGUod29ya2luZ0FyZWEpIHx8IGFjdGl2ZUVsZW1lbnQgJiYgd2l0aGluSG9zdChhY3RpdmVFbGVtZW50LCB3b3JraW5nQXJlYSkgfHwgZm9jdXNJc1BvcnRhbGVkUGFpcihhY3RpdmVFbGVtZW50LCB3b3JraW5nTm9kZSkpKSB7XG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQgJiYgIWxhc3RBY3RpdmVGb2N1cyAmJiBhY3RpdmVFbGVtZW50ICYmICFhdXRvRm9jdXMpIHtcbiAgICAgICAgICAgICAgaWYgKGFjdGl2ZUVsZW1lbnQuYmx1cikge1xuICAgICAgICAgICAgICAgIGFjdGl2ZUVsZW1lbnQuYmx1cigpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuZm9jdXMoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlc3VsdCA9IG1vdmVGb2N1c0luc2lkZSh3b3JraW5nQXJlYSwgbGFzdEFjdGl2ZUZvY3VzLCB7XG4gICAgICAgICAgICAgICAgZm9jdXNPcHRpb25zOiBmb2N1c09wdGlvbnNcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGxhc3RQb3J0YWxlZEVsZW1lbnQgPSB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZm9jdXNXYXNPdXRzaWRlV2luZG93ID0gZmFsc2U7XG4gICAgICAgICAgbGFzdEFjdGl2ZUZvY3VzID0gZG9jdW1lbnQgJiYgZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGRvY3VtZW50ICYmIGFjdGl2ZUVsZW1lbnQgIT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgJiYgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2RhdGEtZm9jdXMtYXV0by1ndWFyZF0nKSkge1xuICAgICAgICB2YXIgbmV3QWN0aXZlRWxlbWVudCA9IGRvY3VtZW50ICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgICAgIHZhciBhbGxOb2RlcyA9IGV4cGFuZEZvY3VzYWJsZU5vZGVzKHdvcmtpbmdBcmVhKTtcbiAgICAgICAgdmFyIGZvY3VzZWRJbmRleCA9IGFsbE5vZGVzLm1hcChmdW5jdGlvbiAoX3JlZikge1xuICAgICAgICAgIHZhciBub2RlID0gX3JlZi5ub2RlO1xuICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICB9KS5pbmRleE9mKG5ld0FjdGl2ZUVsZW1lbnQpO1xuICAgICAgICBpZiAoZm9jdXNlZEluZGV4ID4gLTEpIHtcbiAgICAgICAgICBhbGxOb2Rlcy5maWx0ZXIoZnVuY3Rpb24gKF9yZWYyKSB7XG4gICAgICAgICAgICB2YXIgZ3VhcmQgPSBfcmVmMi5ndWFyZCxcbiAgICAgICAgICAgICAgbm9kZSA9IF9yZWYyLm5vZGU7XG4gICAgICAgICAgICByZXR1cm4gZ3VhcmQgJiYgbm9kZS5kYXRhc2V0LmZvY3VzQXV0b0d1YXJkO1xuICAgICAgICAgIH0pLmZvckVhY2goZnVuY3Rpb24gKF9yZWYzKSB7XG4gICAgICAgICAgICB2YXIgbm9kZSA9IF9yZWYzLm5vZGU7XG4gICAgICAgICAgICByZXR1cm4gbm9kZS5yZW1vdmVBdHRyaWJ1dGUoJ3RhYkluZGV4Jyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYXV0b0d1YXJkKGZvY3VzZWRJbmRleCwgYWxsTm9kZXMubGVuZ3RoLCArMSwgYWxsTm9kZXMpO1xuICAgICAgICAgIGF1dG9HdWFyZChmb2N1c2VkSW5kZXgsIC0xLCAtMSwgYWxsTm9kZXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xudmFyIG9uVHJhcCA9IGZ1bmN0aW9uIG9uVHJhcChldmVudCkge1xuICBpZiAoYWN0aXZhdGVUcmFwKCkgJiYgZXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG59O1xudmFyIG9uQmx1ciA9IGZ1bmN0aW9uIG9uQmx1cigpIHtcbiAgcmV0dXJuIGRlZmVyQWN0aW9uKGFjdGl2YXRlVHJhcCk7XG59O1xudmFyIG9uRm9jdXMgPSBmdW5jdGlvbiBvbkZvY3VzKGV2ZW50KSB7XG4gIHZhciBzb3VyY2UgPSBldmVudC50YXJnZXQ7XG4gIHZhciBjdXJyZW50Tm9kZSA9IGV2ZW50LmN1cnJlbnRUYXJnZXQ7XG4gIGlmICghY3VycmVudE5vZGUuY29udGFpbnMoc291cmNlKSkge1xuICAgIHJlY29yZFBvcnRhbChjdXJyZW50Tm9kZSwgc291cmNlKTtcbiAgfVxufTtcbnZhciBGb2N1c1dhdGNoZXIgPSBmdW5jdGlvbiBGb2N1c1dhdGNoZXIoKSB7XG4gIHJldHVybiBudWxsO1xufTtcbnZhciBGb2N1c1RyYXAgPSBmdW5jdGlvbiBGb2N1c1RyYXAoX3JlZjQpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZjQuY2hpbGRyZW47XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgb25CbHVyOiBvbkJsdXIsXG4gICAgb25Gb2N1czogb25Gb2N1c1xuICB9LCBjaGlsZHJlbik7XG59O1xuRm9jdXNUcmFwLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWRcbn0gOiB7fTtcbnZhciBvbldpbmRvd0JsdXIgPSBmdW5jdGlvbiBvbldpbmRvd0JsdXIoKSB7XG4gIGZvY3VzV2FzT3V0c2lkZVdpbmRvdyA9ICdqdXN0JztcbiAgZGVmZXJBY3Rpb24oZnVuY3Rpb24gKCkge1xuICAgIGZvY3VzV2FzT3V0c2lkZVdpbmRvdyA9ICdtZWFud2hpbGUnO1xuICB9KTtcbn07XG52YXIgYXR0YWNoSGFuZGxlciA9IGZ1bmN0aW9uIGF0dGFjaEhhbmRsZXIoKSB7XG4gIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzaW4nLCBvblRyYXApO1xuICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdmb2N1c291dCcsIG9uQmx1cik7XG4gIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgb25XaW5kb3dCbHVyKTtcbn07XG52YXIgZGV0YWNoSGFuZGxlciA9IGZ1bmN0aW9uIGRldGFjaEhhbmRsZXIoKSB7XG4gIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ZvY3VzaW4nLCBvblRyYXApO1xuICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdmb2N1c291dCcsIG9uQmx1cik7XG4gIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdibHVyJywgb25XaW5kb3dCbHVyKTtcbn07XG5mdW5jdGlvbiByZWR1Y2VQcm9wc1RvU3RhdGUocHJvcHNMaXN0KSB7XG4gIHJldHVybiBwcm9wc0xpc3QuZmlsdGVyKGZ1bmN0aW9uIChfcmVmNSkge1xuICAgIHZhciBkaXNhYmxlZCA9IF9yZWY1LmRpc2FibGVkO1xuICAgIHJldHVybiAhZGlzYWJsZWQ7XG4gIH0pO1xufVxudmFyIGZvY3VzTG9ja0FQSSA9IHtcbiAgbW92ZUZvY3VzSW5zaWRlOiBtb3ZlRm9jdXNJbnNpZGUsXG4gIGZvY3VzSW5zaWRlOiBmb2N1c0luc2lkZSxcbiAgZm9jdXNOZXh0RWxlbWVudDogZm9jdXNOZXh0RWxlbWVudCxcbiAgZm9jdXNQcmV2RWxlbWVudDogZm9jdXNQcmV2RWxlbWVudCxcbiAgZm9jdXNGaXJzdEVsZW1lbnQ6IGZvY3VzRmlyc3RFbGVtZW50LFxuICBmb2N1c0xhc3RFbGVtZW50OiBmb2N1c0xhc3RFbGVtZW50LFxuICBjYXB0dXJlRm9jdXNSZXN0b3JlOiBjYXB0dXJlRm9jdXNSZXN0b3JlXG59O1xuZnVuY3Rpb24gaGFuZGxlU3RhdGVDaGFuZ2VPbkNsaWVudCh0cmFwcykge1xuICB2YXIgdHJhcCA9IHRyYXBzLnNsaWNlKC0xKVswXTtcbiAgaWYgKHRyYXAgJiYgIWxhc3RBY3RpdmVUcmFwKSB7XG4gICAgYXR0YWNoSGFuZGxlcigpO1xuICB9XG4gIHZhciBsYXN0VHJhcCA9IGxhc3RBY3RpdmVUcmFwO1xuICB2YXIgc2FtZVRyYXAgPSBsYXN0VHJhcCAmJiB0cmFwICYmIHRyYXAuaWQgPT09IGxhc3RUcmFwLmlkO1xuICBsYXN0QWN0aXZlVHJhcCA9IHRyYXA7XG4gIGlmIChsYXN0VHJhcCAmJiAhc2FtZVRyYXApIHtcbiAgICBsYXN0VHJhcC5vbkRlYWN0aXZhdGlvbigpO1xuICAgIGlmICghdHJhcHMuZmlsdGVyKGZ1bmN0aW9uIChfcmVmNikge1xuICAgICAgdmFyIGlkID0gX3JlZjYuaWQ7XG4gICAgICByZXR1cm4gaWQgPT09IGxhc3RUcmFwLmlkO1xuICAgIH0pLmxlbmd0aCkge1xuICAgICAgbGFzdFRyYXAucmV0dXJuRm9jdXMoIXRyYXApO1xuICAgIH1cbiAgfVxuICBpZiAodHJhcCkge1xuICAgIGxhc3RBY3RpdmVGb2N1cyA9IG51bGw7XG4gICAgaWYgKCFzYW1lVHJhcCB8fCBsYXN0VHJhcC5vYnNlcnZlZCAhPT0gdHJhcC5vYnNlcnZlZCkge1xuICAgICAgdHJhcC5vbkFjdGl2YXRpb24oZm9jdXNMb2NrQVBJKTtcbiAgICB9XG4gICAgYWN0aXZhdGVUcmFwKHRydWUpO1xuICAgIGRlZmVyQWN0aW9uKGFjdGl2YXRlVHJhcCk7XG4gIH0gZWxzZSB7XG4gICAgZGV0YWNoSGFuZGxlcigpO1xuICAgIGxhc3RBY3RpdmVGb2N1cyA9IG51bGw7XG4gIH1cbn1cbm1lZGl1bUZvY3VzLmFzc2lnblN5bmNNZWRpdW0ob25Gb2N1cyk7XG5tZWRpdW1CbHVyLmFzc2lnbk1lZGl1bShvbkJsdXIpO1xubWVkaXVtRWZmZWN0LmFzc2lnbk1lZGl1bShmdW5jdGlvbiAoY2IpIHtcbiAgcmV0dXJuIGNiKGZvY3VzTG9ja0FQSSk7XG59KTtcbmV4cG9ydCBkZWZhdWx0IHdpdGhTaWRlRWZmZWN0KHJlZHVjZVByb3BzVG9TdGF0ZSwgaGFuZGxlU3RhdGVDaGFuZ2VPbkNsaWVudCkoRm9jdXNXYXRjaGVyKTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgby5fX3Byb3RvX18gPSBwO1xuICAgIHJldHVybiBvO1xuICB9O1xuICByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApO1xufSIsICJpbXBvcnQgc2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vc2V0UHJvdG90eXBlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pbmhlcml0c0xvb3NlKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcy5wcm90b3R5cGUpO1xuICBzdWJDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWJDbGFzcztcbiAgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdHlwZW9mKG8pIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gdHlwZW9mIG87XG4gIH0gOiBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvO1xuICB9LCBfdHlwZW9mKG8pO1xufSIsICJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRvUHJpbWl0aXZlKHQsIHIpIHtcbiAgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7XG4gIHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdO1xuICBpZiAodm9pZCAwICE9PSBlKSB7XG4gICAgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7XG4gICAgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpO1xuICB9XG4gIHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7XG59IiwgImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuaW1wb3J0IHRvUHJpbWl0aXZlIGZyb20gXCIuL3RvUHJpbWl0aXZlLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0b1Byb3BlcnR5S2V5KHQpIHtcbiAgdmFyIGkgPSB0b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTtcbiAgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjtcbn0iLCAiaW1wb3J0IHRvUHJvcGVydHlLZXkgZnJvbSBcIi4vdG9Qcm9wZXJ0eUtleS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBrZXkgPSB0b1Byb3BlcnR5S2V5KGtleSk7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiBvYmo7XG59IiwgImltcG9ydCBfaW5oZXJpdHNMb29zZSBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlJztcbmltcG9ydCBfZGVmaW5lUHJvcGVydHkgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHknO1xuaW1wb3J0IFJlYWN0LCB7IFB1cmVDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5cbmZ1bmN0aW9uIHdpdGhTaWRlRWZmZWN0KHJlZHVjZVByb3BzVG9TdGF0ZSwgaGFuZGxlU3RhdGVDaGFuZ2VPbkNsaWVudCkge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgaWYgKHR5cGVvZiByZWR1Y2VQcm9wc1RvU3RhdGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgcmVkdWNlUHJvcHNUb1N0YXRlIHRvIGJlIGEgZnVuY3Rpb24uJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBoYW5kbGVTdGF0ZUNoYW5nZU9uQ2xpZW50ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIGhhbmRsZVN0YXRlQ2hhbmdlT25DbGllbnQgdG8gYmUgYSBmdW5jdGlvbi4nKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBnZXREaXNwbGF5TmFtZShXcmFwcGVkQ29tcG9uZW50KSB7XG4gICAgcmV0dXJuIFdyYXBwZWRDb21wb25lbnQuZGlzcGxheU5hbWUgfHwgV3JhcHBlZENvbXBvbmVudC5uYW1lIHx8ICdDb21wb25lbnQnO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoV3JhcHBlZENvbXBvbmVudCkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgIGlmICh0eXBlb2YgV3JhcHBlZENvbXBvbmVudCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIFdyYXBwZWRDb21wb25lbnQgdG8gYmUgYSBSZWFjdCBjb21wb25lbnQuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIG1vdW50ZWRJbnN0YW5jZXMgPSBbXTtcbiAgICB2YXIgc3RhdGU7XG5cbiAgICBmdW5jdGlvbiBlbWl0Q2hhbmdlKCkge1xuICAgICAgc3RhdGUgPSByZWR1Y2VQcm9wc1RvU3RhdGUobW91bnRlZEluc3RhbmNlcy5tYXAoZnVuY3Rpb24gKGluc3RhbmNlKSB7XG4gICAgICAgIHJldHVybiBpbnN0YW5jZS5wcm9wcztcbiAgICAgIH0pKTtcbiAgICAgIGhhbmRsZVN0YXRlQ2hhbmdlT25DbGllbnQoc3RhdGUpO1xuICAgIH1cblxuICAgIHZhciBTaWRlRWZmZWN0ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUHVyZUNvbXBvbmVudCkge1xuICAgICAgX2luaGVyaXRzTG9vc2UoU2lkZUVmZmVjdCwgX1B1cmVDb21wb25lbnQpO1xuXG4gICAgICBmdW5jdGlvbiBTaWRlRWZmZWN0KCkge1xuICAgICAgICByZXR1cm4gX1B1cmVDb21wb25lbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgICAgfVxuXG4gICAgICAvLyBUcnkgdG8gdXNlIGRpc3BsYXlOYW1lIG9mIHdyYXBwZWQgY29tcG9uZW50XG4gICAgICBTaWRlRWZmZWN0LnBlZWsgPSBmdW5jdGlvbiBwZWVrKCkge1xuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgICB9O1xuXG4gICAgICB2YXIgX3Byb3RvID0gU2lkZUVmZmVjdC5wcm90b3R5cGU7XG5cbiAgICAgIF9wcm90by5jb21wb25lbnREaWRNb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgICBtb3VudGVkSW5zdGFuY2VzLnB1c2godGhpcyk7XG4gICAgICAgIGVtaXRDaGFuZ2UoKTtcbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5jb21wb25lbnREaWRVcGRhdGUgPSBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUoKSB7XG4gICAgICAgIGVtaXRDaGFuZ2UoKTtcbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5jb21wb25lbnRXaWxsVW5tb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgICB2YXIgaW5kZXggPSBtb3VudGVkSW5zdGFuY2VzLmluZGV4T2YodGhpcyk7XG4gICAgICAgIG1vdW50ZWRJbnN0YW5jZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgZW1pdENoYW5nZSgpO1xuICAgICAgfTtcblxuICAgICAgX3Byb3RvLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFdyYXBwZWRDb21wb25lbnQsIHRoaXMucHJvcHMpO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIFNpZGVFZmZlY3Q7XG4gICAgfShQdXJlQ29tcG9uZW50KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShTaWRlRWZmZWN0LCBcImRpc3BsYXlOYW1lXCIsIFwiU2lkZUVmZmVjdChcIiArIGdldERpc3BsYXlOYW1lKFdyYXBwZWRDb21wb25lbnQpICsgXCIpXCIpO1xuXG4gICAgcmV0dXJuIFNpZGVFZmZlY3Q7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTaWRlRWZmZWN0O1xuIiwgIi8qXG5JRTExIHN1cHBvcnRcbiAqL1xuZXhwb3J0IHZhciB0b0FycmF5ID0gZnVuY3Rpb24gKGEpIHtcbiAgICB2YXIgcmV0ID0gQXJyYXkoYS5sZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYS5sZW5ndGg7ICsraSkge1xuICAgICAgICByZXRbaV0gPSBhW2ldO1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xufTtcbmV4cG9ydCB2YXIgYXNBcnJheSA9IGZ1bmN0aW9uIChhKSB7IHJldHVybiAoQXJyYXkuaXNBcnJheShhKSA/IGEgOiBbYV0pOyB9O1xuZXhwb3J0IHZhciBnZXRGaXJzdCA9IGZ1bmN0aW9uIChhKSB7IHJldHVybiAoQXJyYXkuaXNBcnJheShhKSA/IGFbMF0gOiBhKTsgfTtcbiIsICJpbXBvcnQgeyBGT0NVU19OT19BVVRPRk9DVVMgfSBmcm9tICcuLi9jb25zdGFudHMnO1xudmFyIGlzRWxlbWVudEhpZGRlbiA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgLy8gd2UgY2FuIG1lYXN1cmUgb25seSBcImVsZW1lbnRzXCJcbiAgICAvLyBjb25zaWRlciBvdGhlcnMgYXMgXCJ2aXNpYmxlXCJcbiAgICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB2YXIgY29tcHV0ZWRTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKG5vZGUsIG51bGwpO1xuICAgIGlmICghY29tcHV0ZWRTdHlsZSB8fCAhY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIChjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ2Rpc3BsYXknKSA9PT0gJ25vbmUnIHx8IGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgndmlzaWJpbGl0eScpID09PSAnaGlkZGVuJyk7XG59O1xudmFyIGdldFBhcmVudE5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIC8vIERPQ1VNRU5UX0ZSQUdNRU5UX05PREUgY2FuIGFsc28gcG9pbnQgb24gU2hhZG93Um9vdC4gSW4gdGhpcyBjYXNlIC5ob3N0IHdpbGwgcG9pbnQgb24gdGhlIG5leHQgbm9kZVxuICAgIHJldHVybiBub2RlLnBhcmVudE5vZGUgJiYgbm9kZS5wYXJlbnROb2RlLm5vZGVUeXBlID09PSBOb2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREVcbiAgICAgICAgPyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICAgICAgbm9kZS5wYXJlbnROb2RlLmhvc3RcbiAgICAgICAgOiBub2RlLnBhcmVudE5vZGU7XG59O1xudmFyIGlzVG9wTm9kZSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJldHVybiBub2RlID09PSBkb2N1bWVudCB8fCAobm9kZSAmJiBub2RlLm5vZGVUeXBlID09PSBOb2RlLkRPQ1VNRU5UX05PREUpO1xufTtcbnZhciBpc0luZXJ0ID0gZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIG5vZGUuaGFzQXR0cmlidXRlKCdpbmVydCcpOyB9O1xuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS90ZXN0aW5nLWxpYnJhcnkvamVzdC1kb20vYmxvYi9tYWluL3NyYy90by1iZS12aXNpYmxlLmpzXG4gKi9cbnZhciBpc1Zpc2libGVVbmNhY2hlZCA9IGZ1bmN0aW9uIChub2RlLCBjaGVja1BhcmVudCkge1xuICAgIHJldHVybiAhbm9kZSB8fCBpc1RvcE5vZGUobm9kZSkgfHwgKCFpc0VsZW1lbnRIaWRkZW4obm9kZSkgJiYgIWlzSW5lcnQobm9kZSkgJiYgY2hlY2tQYXJlbnQoZ2V0UGFyZW50Tm9kZShub2RlKSkpO1xufTtcbmV4cG9ydCB2YXIgaXNWaXNpYmxlQ2FjaGVkID0gZnVuY3Rpb24gKHZpc2liaWxpdHlDYWNoZSwgbm9kZSkge1xuICAgIHZhciBjYWNoZWQgPSB2aXNpYmlsaXR5Q2FjaGUuZ2V0KG5vZGUpO1xuICAgIGlmIChjYWNoZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gY2FjaGVkO1xuICAgIH1cbiAgICB2YXIgcmVzdWx0ID0gaXNWaXNpYmxlVW5jYWNoZWQobm9kZSwgaXNWaXNpYmxlQ2FjaGVkLmJpbmQodW5kZWZpbmVkLCB2aXNpYmlsaXR5Q2FjaGUpKTtcbiAgICB2aXNpYmlsaXR5Q2FjaGUuc2V0KG5vZGUsIHJlc3VsdCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgaXNBdXRvRm9jdXNBbGxvd2VkVW5jYWNoZWQgPSBmdW5jdGlvbiAobm9kZSwgY2hlY2tQYXJlbnQpIHtcbiAgICByZXR1cm4gbm9kZSAmJiAhaXNUb3BOb2RlKG5vZGUpID8gKGlzQXV0b0ZvY3VzQWxsb3dlZChub2RlKSA/IGNoZWNrUGFyZW50KGdldFBhcmVudE5vZGUobm9kZSkpIDogZmFsc2UpIDogdHJ1ZTtcbn07XG5leHBvcnQgdmFyIGlzQXV0b0ZvY3VzQWxsb3dlZENhY2hlZCA9IGZ1bmN0aW9uIChjYWNoZSwgbm9kZSkge1xuICAgIHZhciBjYWNoZWQgPSBjYWNoZS5nZXQobm9kZSk7XG4gICAgaWYgKGNhY2hlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBjYWNoZWQ7XG4gICAgfVxuICAgIHZhciByZXN1bHQgPSBpc0F1dG9Gb2N1c0FsbG93ZWRVbmNhY2hlZChub2RlLCBpc0F1dG9Gb2N1c0FsbG93ZWRDYWNoZWQuYmluZCh1bmRlZmluZWQsIGNhY2hlKSk7XG4gICAgY2FjaGUuc2V0KG5vZGUsIHJlc3VsdCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5leHBvcnQgdmFyIGdldERhdGFzZXQgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICByZXR1cm4gbm9kZS5kYXRhc2V0O1xufTtcbmV4cG9ydCB2YXIgaXNIVE1MQnV0dG9uRWxlbWVudCA9IGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiBub2RlLnRhZ05hbWUgPT09ICdCVVRUT04nOyB9O1xuZXhwb3J0IHZhciBpc0hUTUxJbnB1dEVsZW1lbnQgPSBmdW5jdGlvbiAobm9kZSkgeyByZXR1cm4gbm9kZS50YWdOYW1lID09PSAnSU5QVVQnOyB9O1xuZXhwb3J0IHZhciBpc1JhZGlvRWxlbWVudCA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgcmV0dXJuIGlzSFRNTElucHV0RWxlbWVudChub2RlKSAmJiBub2RlLnR5cGUgPT09ICdyYWRpbyc7XG59O1xuZXhwb3J0IHZhciBub3RIaWRkZW5JbnB1dCA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgcmV0dXJuICEoKGlzSFRNTElucHV0RWxlbWVudChub2RlKSB8fCBpc0hUTUxCdXR0b25FbGVtZW50KG5vZGUpKSAmJiAobm9kZS50eXBlID09PSAnaGlkZGVuJyB8fCBub2RlLmRpc2FibGVkKSk7XG59O1xuZXhwb3J0IHZhciBpc0F1dG9Gb2N1c0FsbG93ZWQgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIHZhciBhdHRyaWJ1dGUgPSBub2RlLmdldEF0dHJpYnV0ZShGT0NVU19OT19BVVRPRk9DVVMpO1xuICAgIHJldHVybiAhW3RydWUsICd0cnVlJywgJyddLmluY2x1ZGVzKGF0dHJpYnV0ZSk7XG59O1xuZXhwb3J0IHZhciBpc0d1YXJkID0gZnVuY3Rpb24gKG5vZGUpIHsgdmFyIF9hOyByZXR1cm4gQm9vbGVhbihub2RlICYmICgoX2EgPSBnZXREYXRhc2V0KG5vZGUpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZm9jdXNHdWFyZCkpOyB9O1xuZXhwb3J0IHZhciBpc05vdEFHdWFyZCA9IGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiAhaXNHdWFyZChub2RlKTsgfTtcbmV4cG9ydCB2YXIgaXNEZWZpbmVkID0gZnVuY3Rpb24gKHgpIHsgcmV0dXJuIEJvb2xlYW4oeCk7IH07XG4iLCAiaW1wb3J0IHsgdG9BcnJheSB9IGZyb20gJy4vYXJyYXknO1xuZXhwb3J0IHZhciB0YWJTb3J0ID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICB2YXIgYVRhYiA9IE1hdGgubWF4KDAsIGEudGFiSW5kZXgpO1xuICAgIHZhciBiVGFiID0gTWF0aC5tYXgoMCwgYi50YWJJbmRleCk7XG4gICAgdmFyIHRhYkRpZmYgPSBhVGFiIC0gYlRhYjtcbiAgICB2YXIgaW5kZXhEaWZmID0gYS5pbmRleCAtIGIuaW5kZXg7XG4gICAgaWYgKHRhYkRpZmYpIHtcbiAgICAgICAgaWYgKCFhVGFiKSB7XG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWJUYWIpIHtcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGFiRGlmZiB8fCBpbmRleERpZmY7XG59O1xudmFyIGdldFRhYkluZGV4ID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICBpZiAobm9kZS50YWJJbmRleCA8IDApIHtcbiAgICAgICAgLy8gYWxsIFwiZm9jdXNhYmxlXCIgZWxlbWVudHMgYXJlIGFscmVhZHkgcHJlc2VsZWN0ZWRcbiAgICAgICAgLy8gYnV0IHNvbWUgbWlnaHQgaGF2ZSBpbXBsaWNpdCBuZWdhdGl2ZSB0YWJJbmRleFxuICAgICAgICAvLyByZXR1cm4gMCBmb3IgPGF1ZGlvIHdpdGhvdXQgdGFiSW5kZXggYXR0cmlidXRlIC0gaXQgaXMgXCJ0YWJiYWJsZVwiXG4gICAgICAgIGlmICghbm9kZS5oYXNBdHRyaWJ1dGUoJ3RhYmluZGV4JykpIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBub2RlLnRhYkluZGV4O1xufTtcbmV4cG9ydCB2YXIgb3JkZXJCeVRhYkluZGV4ID0gZnVuY3Rpb24gKG5vZGVzLCBmaWx0ZXJOZWdhdGl2ZSwga2VlcEd1YXJkcykge1xuICAgIHJldHVybiB0b0FycmF5KG5vZGVzKVxuICAgICAgICAubWFwKGZ1bmN0aW9uIChub2RlLCBpbmRleCkge1xuICAgICAgICB2YXIgdGFiSW5kZXggPSBnZXRUYWJJbmRleChub2RlKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5vZGU6IG5vZGUsXG4gICAgICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgICAgICB0YWJJbmRleDoga2VlcEd1YXJkcyAmJiB0YWJJbmRleCA9PT0gLTEgPyAoKG5vZGUuZGF0YXNldCB8fCB7fSkuZm9jdXNHdWFyZCA/IDAgOiAtMSkgOiB0YWJJbmRleCxcbiAgICAgICAgfTtcbiAgICB9KVxuICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChkYXRhKSB7IHJldHVybiAhZmlsdGVyTmVnYXRpdmUgfHwgZGF0YS50YWJJbmRleCA+PSAwOyB9KVxuICAgICAgICAuc29ydCh0YWJTb3J0KTtcbn07XG4iLCAiLyoqXG4gKiBsaXN0IG9mIHRoZSBvYmplY3QgdG8gYmUgY29uc2lkZXJlZCBhcyBmb2N1c2FibGVcbiAqL1xuZXhwb3J0IHZhciB0YWJiYWJsZXMgPSBbXG4gICAgJ2J1dHRvbjplbmFibGVkJyxcbiAgICAnc2VsZWN0OmVuYWJsZWQnLFxuICAgICd0ZXh0YXJlYTplbmFibGVkJyxcbiAgICAnaW5wdXQ6ZW5hYmxlZCcsXG4gICAgLy8gZWxlbWVudHMgd2l0aCBleHBsaWNpdCByb2xlcyB3aWxsIGFsc28gdXNlIGV4cGxpY2l0IHRhYmluZGV4XG4gICAgLy8gJ1tyb2xlPVwiYnV0dG9uXCJdJyxcbiAgICAnYVtocmVmXScsXG4gICAgJ2FyZWFbaHJlZl0nLFxuICAgICdzdW1tYXJ5JyxcbiAgICAnaWZyYW1lJyxcbiAgICAnb2JqZWN0JyxcbiAgICAnZW1iZWQnLFxuICAgICdhdWRpb1tjb250cm9sc10nLFxuICAgICd2aWRlb1tjb250cm9sc10nLFxuICAgICdbdGFiaW5kZXhdJyxcbiAgICAnW2NvbnRlbnRlZGl0YWJsZV0nLFxuICAgICdbYXV0b2ZvY3VzXScsXG5dO1xuIiwgImltcG9ydCB7IEZPQ1VTX0FVVE8gfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgdG9BcnJheSB9IGZyb20gJy4vYXJyYXknO1xuaW1wb3J0IHsgdGFiYmFibGVzIH0gZnJvbSAnLi90YWJiYWJsZXMnO1xudmFyIHF1ZXJ5VGFiYmFibGVzID0gdGFiYmFibGVzLmpvaW4oJywnKTtcbnZhciBxdWVyeUd1YXJkVGFiYmFibGVzID0gXCJcIi5jb25jYXQocXVlcnlUYWJiYWJsZXMsIFwiLCBbZGF0YS1mb2N1cy1ndWFyZF1cIik7XG52YXIgZ2V0Rm9jdXNhYmxlc1dpdGhTaGFkb3dEb20gPSBmdW5jdGlvbiAocGFyZW50LCB3aXRoR3VhcmRzKSB7XG4gICAgcmV0dXJuIHRvQXJyYXkoKHBhcmVudC5zaGFkb3dSb290IHx8IHBhcmVudCkuY2hpbGRyZW4pLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBjaGlsZCkge1xuICAgICAgICByZXR1cm4gYWNjLmNvbmNhdChjaGlsZC5tYXRjaGVzKHdpdGhHdWFyZHMgPyBxdWVyeUd1YXJkVGFiYmFibGVzIDogcXVlcnlUYWJiYWJsZXMpID8gW2NoaWxkXSA6IFtdLCBnZXRGb2N1c2FibGVzV2l0aFNoYWRvd0RvbShjaGlsZCkpO1xuICAgIH0sIFtdKTtcbn07XG52YXIgZ2V0Rm9jdXNhYmxlc1dpdGhJRnJhbWUgPSBmdW5jdGlvbiAocGFyZW50LCB3aXRoR3VhcmRzKSB7XG4gICAgdmFyIF9hO1xuICAgIC8vIGNvbnRlbnREb2N1bWVudCBvZiBpZnJhbWUgd2lsbCBiZSBudWxsIGlmIGN1cnJlbnQgb3JpZ2luIGNhbm5vdCBhY2Nlc3MgaXRcbiAgICBpZiAocGFyZW50IGluc3RhbmNlb2YgSFRNTElGcmFtZUVsZW1lbnQgJiYgKChfYSA9IHBhcmVudC5jb250ZW50RG9jdW1lbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5ib2R5KSkge1xuICAgICAgICByZXR1cm4gZ2V0Rm9jdXNhYmxlcyhbcGFyZW50LmNvbnRlbnREb2N1bWVudC5ib2R5XSwgd2l0aEd1YXJkcyk7XG4gICAgfVxuICAgIHJldHVybiBbcGFyZW50XTtcbn07XG5leHBvcnQgdmFyIGdldEZvY3VzYWJsZXMgPSBmdW5jdGlvbiAocGFyZW50cywgd2l0aEd1YXJkcykge1xuICAgIHJldHVybiBwYXJlbnRzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwYXJlbnQpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB2YXIgZm9jdXNhYmxlV2l0aFNoYWRvd0RvbSA9IGdldEZvY3VzYWJsZXNXaXRoU2hhZG93RG9tKHBhcmVudCwgd2l0aEd1YXJkcyk7XG4gICAgICAgIHZhciBmb2N1c2FibGVXaXRoSWZyYW1lcyA9IChfYSA9IFtdKS5jb25jYXQuYXBwbHkoX2EsIGZvY3VzYWJsZVdpdGhTaGFkb3dEb20ubWFwKGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiBnZXRGb2N1c2FibGVzV2l0aElGcmFtZShub2RlLCB3aXRoR3VhcmRzKTsgfSkpO1xuICAgICAgICByZXR1cm4gYWNjLmNvbmNhdChcbiAgICAgICAgLy8gYWRkIGFsbCB0YWJiYWJsZXMgaW5zaWRlIGFuZCB3aXRoaW4gc2hhZG93IERPTXMgaW4gRE9NIG9yZGVyXG4gICAgICAgIGZvY3VzYWJsZVdpdGhJZnJhbWVzLCBcbiAgICAgICAgLy8gYWRkIGlmIG5vZGUgaXMgdGFiYmFibGUgaXRzZWxmXG4gICAgICAgIHBhcmVudC5wYXJlbnROb2RlXG4gICAgICAgICAgICA/IHRvQXJyYXkocGFyZW50LnBhcmVudE5vZGUucXVlcnlTZWxlY3RvckFsbChxdWVyeVRhYmJhYmxlcykpLmZpbHRlcihmdW5jdGlvbiAobm9kZSkgeyByZXR1cm4gbm9kZSA9PT0gcGFyZW50OyB9KVxuICAgICAgICAgICAgOiBbXSk7XG4gICAgfSwgW10pO1xufTtcbi8qKlxuICogcmV0dXJuIGEgbGlzdCBvZiBmb2N1c2FibGUgbm9kZXMgd2l0aGluIGFuIGFyZWEgbWFya2VkIGFzIFwiYXV0by1mb2N1c2FibGVcIlxuICogQHBhcmFtIHBhcmVudFxuICovXG5leHBvcnQgdmFyIGdldFBhcmVudEF1dG9mb2N1c2FibGVzID0gZnVuY3Rpb24gKHBhcmVudCkge1xuICAgIHZhciBwYXJlbnRGb2N1cyA9IHBhcmVudC5xdWVyeVNlbGVjdG9yQWxsKFwiW1wiLmNvbmNhdChGT0NVU19BVVRPLCBcIl1cIikpO1xuICAgIHJldHVybiB0b0FycmF5KHBhcmVudEZvY3VzKVxuICAgICAgICAubWFwKGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiBnZXRGb2N1c2FibGVzKFtub2RlXSk7IH0pXG4gICAgICAgIC5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgbm9kZXMpIHsgcmV0dXJuIGFjYy5jb25jYXQobm9kZXMpOyB9LCBbXSk7XG59O1xuIiwgImltcG9ydCB7IHRvQXJyYXkgfSBmcm9tICcuL2FycmF5JztcbmltcG9ydCB7IGlzQXV0b0ZvY3VzQWxsb3dlZENhY2hlZCwgaXNWaXNpYmxlQ2FjaGVkLCBub3RIaWRkZW5JbnB1dCB9IGZyb20gJy4vaXMnO1xuaW1wb3J0IHsgb3JkZXJCeVRhYkluZGV4IH0gZnJvbSAnLi90YWJPcmRlcic7XG5pbXBvcnQgeyBnZXRGb2N1c2FibGVzLCBnZXRQYXJlbnRBdXRvZm9jdXNhYmxlcyB9IGZyb20gJy4vdGFiVXRpbHMnO1xuLyoqXG4gKiBnaXZlbiBsaXN0IG9mIGZvY3VzYWJsZSBlbGVtZW50cyBrZWVwcyB0aGUgb25lcyB1c2VyIGNhbiBpbnRlcmFjdCB3aXRoXG4gKiBAcGFyYW0gbm9kZXNcbiAqIEBwYXJhbSB2aXNpYmlsaXR5Q2FjaGVcbiAqL1xuZXhwb3J0IHZhciBmaWx0ZXJGb2N1c2FibGUgPSBmdW5jdGlvbiAobm9kZXMsIHZpc2liaWxpdHlDYWNoZSkge1xuICAgIHJldHVybiB0b0FycmF5KG5vZGVzKVxuICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiBpc1Zpc2libGVDYWNoZWQodmlzaWJpbGl0eUNhY2hlLCBub2RlKTsgfSlcbiAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAobm9kZSkgeyByZXR1cm4gbm90SGlkZGVuSW5wdXQobm9kZSk7IH0pO1xufTtcbmV4cG9ydCB2YXIgZmlsdGVyQXV0b0ZvY3VzYWJsZSA9IGZ1bmN0aW9uIChub2RlcywgY2FjaGUpIHtcbiAgICBpZiAoY2FjaGUgPT09IHZvaWQgMCkgeyBjYWNoZSA9IG5ldyBNYXAoKTsgfVxuICAgIHJldHVybiB0b0FycmF5KG5vZGVzKS5maWx0ZXIoZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIGlzQXV0b0ZvY3VzQWxsb3dlZENhY2hlZChjYWNoZSwgbm9kZSk7IH0pO1xufTtcbi8qKlxuICogIV9fV0FSTklOR19fISBMb3cgbGV2ZWwgQVBJLlxuICogQHJldHVybnMgYWxsIHRhYmJhYmxlIG5vZGVzXG4gKlxuICogQHNlZSB7QGxpbmsgZ2V0Rm9jdXNhYmxlTm9kZXN9IHRvIGdldCBhbnkgZm9jdXNhYmxlIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gdG9wTm9kZXMgLSBhcnJheSBvZiB0b3AgbGV2ZWwgSFRNTEVsZW1lbnRzIHRvIHNlYXJjaCBpbnNpZGVcbiAqIEBwYXJhbSB2aXNpYmlsaXR5Q2FjaGUgLSBhbiBjYWNoZSB0byBzdG9yZSBpbnRlcm1lZGlhdGUgbWVhc3VyZW1lbnRzLiBFeHBlY3RlZCB0byBiZSBhIGZyZXNoIGBuZXcgTWFwYCBvbiBldmVyeSBjYWxsXG4gKi9cbmV4cG9ydCB2YXIgZ2V0VGFiYmFibGVOb2RlcyA9IGZ1bmN0aW9uICh0b3BOb2RlcywgdmlzaWJpbGl0eUNhY2hlLCB3aXRoR3VhcmRzKSB7XG4gICAgcmV0dXJuIG9yZGVyQnlUYWJJbmRleChmaWx0ZXJGb2N1c2FibGUoZ2V0Rm9jdXNhYmxlcyh0b3BOb2Rlcywgd2l0aEd1YXJkcyksIHZpc2liaWxpdHlDYWNoZSksIHRydWUsIHdpdGhHdWFyZHMpO1xufTtcbi8qKlxuICogIV9fV0FSTklOR19fISBMb3cgbGV2ZWwgQVBJLlxuICpcbiAqIEByZXR1cm5zIGFueXRoaW5nIFwiZm9jdXNhYmxlXCIsIG5vdCBvbmx5IHRhYmJhYmxlLiBUaGUgZGlmZmVyZW5jZSBpcyBpbiBgdGFiSW5kZXg9LTFgXG4gKiAod2l0aG91dCBndWFyZHMsIGFzIGxvbmcgYXMgdGhleSBhcmUgbm90IGV4cGVjdGVkIHRvIGJlIGV2ZXIgZm9jdXNlZClcbiAqXG4gKiBAc2VlIHtAbGluayBnZXRUYWJiYWJsZU5vZGVzfSB0byBnZXQgb25seSB0YWJibGUgbm9kZXMgZWxlbWVudFxuICpcbiAqIEBwYXJhbSB0b3BOb2RlcyAtIGFycmF5IG9mIHRvcCBsZXZlbCBIVE1MRWxlbWVudHMgdG8gc2VhcmNoIGluc2lkZVxuICogQHBhcmFtIHZpc2liaWxpdHlDYWNoZSAtIGFuIGNhY2hlIHRvIHN0b3JlIGludGVybWVkaWF0ZSBtZWFzdXJlbWVudHMuIEV4cGVjdGVkIHRvIGJlIGEgZnJlc2ggYG5ldyBNYXBgIG9uIGV2ZXJ5IGNhbGxcbiAqL1xuZXhwb3J0IHZhciBnZXRGb2N1c2FibGVOb2RlcyA9IGZ1bmN0aW9uICh0b3BOb2RlcywgdmlzaWJpbGl0eUNhY2hlKSB7XG4gICAgcmV0dXJuIG9yZGVyQnlUYWJJbmRleChmaWx0ZXJGb2N1c2FibGUoZ2V0Rm9jdXNhYmxlcyh0b3BOb2RlcyksIHZpc2liaWxpdHlDYWNoZSksIGZhbHNlKTtcbn07XG4vKipcbiAqIHJldHVybiBsaXN0IG9mIG5vZGVzIHdoaWNoIGFyZSBleHBlY3RlZCB0byBiZSBhdXRvLWZvY3VzZWRcbiAqIEBwYXJhbSB0b3BOb2RlXG4gKiBAcGFyYW0gdmlzaWJpbGl0eUNhY2hlXG4gKi9cbmV4cG9ydCB2YXIgcGFyZW50QXV0b2ZvY3VzYWJsZXMgPSBmdW5jdGlvbiAodG9wTm9kZSwgdmlzaWJpbGl0eUNhY2hlKSB7XG4gICAgcmV0dXJuIGZpbHRlckZvY3VzYWJsZShnZXRQYXJlbnRBdXRvZm9jdXNhYmxlcyh0b3BOb2RlKSwgdmlzaWJpbGl0eUNhY2hlKTtcbn07XG4vKlxuICogRGV0ZXJtaW5lcyBpZiBlbGVtZW50IGlzIGNvbnRhaW5lZCBpbiBzY29wZSwgaW5jbHVkaW5nIG5lc3RlZCBzaGFkb3cgRE9Nc1xuICovXG5leHBvcnQgdmFyIGNvbnRhaW5zID0gZnVuY3Rpb24gKHNjb3BlLCBlbGVtZW50KSB7XG4gICAgaWYgKHNjb3BlLnNoYWRvd1Jvb3QpIHtcbiAgICAgICAgcmV0dXJuIGNvbnRhaW5zKHNjb3BlLnNoYWRvd1Jvb3QsIGVsZW1lbnQpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKE9iamVjdC5nZXRQcm90b3R5cGVPZihzY29wZSkuY29udGFpbnMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgT2JqZWN0LmdldFByb3RvdHlwZU9mKHNjb3BlKS5jb250YWlucy5jYWxsKHNjb3BlLCBlbGVtZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRvQXJyYXkoc2NvcGUuY2hpbGRyZW4pLnNvbWUoZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBIVE1MSUZyYW1lRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHZhciBpZnJhbWVCb2R5ID0gKF9hID0gY2hpbGQuY29udGVudERvY3VtZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuYm9keTtcbiAgICAgICAgICAgICAgICBpZiAoaWZyYW1lQm9keSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGFpbnMoaWZyYW1lQm9keSwgZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjb250YWlucyhjaGlsZCwgZWxlbWVudCk7XG4gICAgICAgIH0pO1xuICAgIH1cbn07XG4iLCAiaW1wb3J0IHsgRk9DVVNfRElTQUJMRUQsIEZPQ1VTX0dST1VQIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IGFzQXJyYXksIHRvQXJyYXkgfSBmcm9tICcuL2FycmF5Jztcbi8qKlxuICogaW4gY2FzZSBvZiBtdWx0aXBsZSBub2RlcyBuZXN0ZWQgaW5zaWRlIGVhY2ggb3RoZXJcbiAqIGtlZXBzIG9ubHkgdG9wIG9uZXNcbiAqIHRoaXMgaXMgTyhubG9nbilcbiAqIEBwYXJhbSBub2Rlc1xuICogQHJldHVybnMgeyp9XG4gKi9cbnZhciBmaWx0ZXJOZXN0ZWQgPSBmdW5jdGlvbiAobm9kZXMpIHtcbiAgICB2YXIgY29udGFpbmVkID0gbmV3IFNldCgpO1xuICAgIHZhciBsID0gbm9kZXMubGVuZ3RoO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbDsgaSArPSAxKSB7XG4gICAgICAgIGZvciAodmFyIGogPSBpICsgMTsgaiA8IGw7IGogKz0gMSkge1xuICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gbm9kZXNbaV0uY29tcGFyZURvY3VtZW50UG9zaXRpb24obm9kZXNbal0pO1xuICAgICAgICAgICAgLyogZXNsaW50LWRpc2FibGUgbm8tYml0d2lzZSAqL1xuICAgICAgICAgICAgaWYgKChwb3NpdGlvbiAmIE5vZGUuRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTkVEX0JZKSA+IDApIHtcbiAgICAgICAgICAgICAgICBjb250YWluZWQuYWRkKGopO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKChwb3NpdGlvbiAmIE5vZGUuRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTlMpID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lZC5hZGQoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKiBlc2xpbnQtZW5hYmxlICovXG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5vZGVzLmZpbHRlcihmdW5jdGlvbiAoXywgaW5kZXgpIHsgcmV0dXJuICFjb250YWluZWQuaGFzKGluZGV4KTsgfSk7XG59O1xuLyoqXG4gKiBmaW5kcyB0b3AgbW9zdCBwYXJlbnQgZm9yIGEgbm9kZVxuICogQHBhcmFtIG5vZGVcbiAqIEByZXR1cm5zIHsqfVxuICovXG52YXIgZ2V0VG9wUGFyZW50ID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZS5wYXJlbnROb2RlID8gZ2V0VG9wUGFyZW50KG5vZGUucGFyZW50Tm9kZSkgOiBub2RlO1xufTtcbi8qKlxuICogcmV0dXJucyBhbGwgXCJmb2N1cyBjb250YWluZXJzXCIgaW5zaWRlIGEgZ2l2ZW4gbm9kZVxuICogQHBhcmFtIG5vZGUgLSBub2RlIG9yIG5vZGVzIHRvIGxvb2sgaW5zaWRlXG4gKiBAcmV0dXJucyBFbGVtZW50W11cbiAqL1xuZXhwb3J0IHZhciBnZXRBbGxBZmZlY3RlZE5vZGVzID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICB2YXIgbm9kZXMgPSBhc0FycmF5KG5vZGUpO1xuICAgIHJldHVybiBub2Rlcy5maWx0ZXIoQm9vbGVhbikucmVkdWNlKGZ1bmN0aW9uIChhY2MsIGN1cnJlbnROb2RlKSB7XG4gICAgICAgIHZhciBncm91cCA9IGN1cnJlbnROb2RlLmdldEF0dHJpYnV0ZShGT0NVU19HUk9VUCk7XG4gICAgICAgIGFjYy5wdXNoLmFwcGx5KGFjYywgKGdyb3VwXG4gICAgICAgICAgICA/IGZpbHRlck5lc3RlZCh0b0FycmF5KGdldFRvcFBhcmVudChjdXJyZW50Tm9kZSkucXVlcnlTZWxlY3RvckFsbChcIltcIi5jb25jYXQoRk9DVVNfR1JPVVAsIFwiPVxcXCJcIikuY29uY2F0KGdyb3VwLCBcIlxcXCJdOm5vdChbXCIpLmNvbmNhdChGT0NVU19ESVNBQkxFRCwgXCI9XFxcImRpc2FibGVkXFxcIl0pXCIpKSkpXG4gICAgICAgICAgICA6IFtjdXJyZW50Tm9kZV0pKTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBbXSk7XG59O1xuIiwgImV4cG9ydCB2YXIgc2FmZVByb2JlID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGNiKCk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxufTtcbiIsICIvKipcbiAqIHJldHVybnMgYWN0aXZlIGVsZW1lbnQgZnJvbSBkb2N1bWVudCBvciBmcm9tIG5lc3RlZCBzaGFkb3dkb21zXG4gKi9cbmltcG9ydCB7IHNhZmVQcm9iZSB9IGZyb20gJy4vc2FmZSc7XG4vKipcbiAqIHJldHVybnMgY3VycmVudCBhY3RpdmUgZWxlbWVudC4gSWYgdGhlIGFjdGl2ZSBlbGVtZW50IGlzIGEgXCJjb250YWluZXJcIiBpdHNlbGYoc2hhZG93Um9vdCBvciBpZnJhbWUpIHJldHVybnMgYWN0aXZlIGVsZW1lbnQgaW5zaWRlIGl0XG4gKiBAcGFyYW0gW2luRG9jdW1lbnRdXG4gKi9cbmV4cG9ydCB2YXIgZ2V0QWN0aXZlRWxlbWVudCA9IGZ1bmN0aW9uIChpbkRvY3VtZW50KSB7XG4gICAgaWYgKGluRG9jdW1lbnQgPT09IHZvaWQgMCkgeyBpbkRvY3VtZW50ID0gZG9jdW1lbnQ7IH1cbiAgICBpZiAoIWluRG9jdW1lbnQgfHwgIWluRG9jdW1lbnQuYWN0aXZlRWxlbWVudCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB2YXIgYWN0aXZlRWxlbWVudCA9IGluRG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICByZXR1cm4gKGFjdGl2ZUVsZW1lbnQuc2hhZG93Um9vdFxuICAgICAgICA/IGdldEFjdGl2ZUVsZW1lbnQoYWN0aXZlRWxlbWVudC5zaGFkb3dSb290KVxuICAgICAgICA6IGFjdGl2ZUVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MSUZyYW1lRWxlbWVudCAmJiBzYWZlUHJvYmUoZnVuY3Rpb24gKCkgeyByZXR1cm4gYWN0aXZlRWxlbWVudC5jb250ZW50V2luZG93LmRvY3VtZW50OyB9KVxuICAgICAgICAgICAgPyBnZXRBY3RpdmVFbGVtZW50KGFjdGl2ZUVsZW1lbnQuY29udGVudFdpbmRvdy5kb2N1bWVudClcbiAgICAgICAgICAgIDogYWN0aXZlRWxlbWVudCk7XG59O1xuIiwgImltcG9ydCB7IGNvbnRhaW5zIH0gZnJvbSAnLi91dGlscy9ET011dGlscyc7XG5pbXBvcnQgeyBnZXRBbGxBZmZlY3RlZE5vZGVzIH0gZnJvbSAnLi91dGlscy9hbGwtYWZmZWN0ZWQnO1xuaW1wb3J0IHsgZ2V0Rmlyc3QsIHRvQXJyYXkgfSBmcm9tICcuL3V0aWxzL2FycmF5JztcbmltcG9ydCB7IGdldEFjdGl2ZUVsZW1lbnQgfSBmcm9tICcuL3V0aWxzL2dldEFjdGl2ZUVsZW1lbnQnO1xudmFyIGZvY3VzSW5GcmFtZSA9IGZ1bmN0aW9uIChmcmFtZSwgYWN0aXZlRWxlbWVudCkgeyByZXR1cm4gZnJhbWUgPT09IGFjdGl2ZUVsZW1lbnQ7IH07XG52YXIgZm9jdXNJbnNpZGVJZnJhbWUgPSBmdW5jdGlvbiAodG9wTm9kZSwgYWN0aXZlRWxlbWVudCkge1xuICAgIHJldHVybiBCb29sZWFuKHRvQXJyYXkodG9wTm9kZS5xdWVyeVNlbGVjdG9yQWxsKCdpZnJhbWUnKSkuc29tZShmdW5jdGlvbiAobm9kZSkgeyByZXR1cm4gZm9jdXNJbkZyYW1lKG5vZGUsIGFjdGl2ZUVsZW1lbnQpOyB9KSk7XG59O1xuLyoqXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZSwgaWYgdGhlIGN1cnJlbnQgZm9jdXMgaXMgaW5zaWRlIGdpdmVuIG5vZGUgb3Igbm9kZXMuXG4gKiBTdXBwb3J0cyBub2RlcyBoaWRkZW4gaW5zaWRlIHNoYWRvd0RvbVxuICovXG5leHBvcnQgdmFyIGZvY3VzSW5zaWRlID0gZnVuY3Rpb24gKHRvcE5vZGUsIGFjdGl2ZUVsZW1lbnQpIHtcbiAgICAvLyBjb25zdCBhY3RpdmVFbGVtZW50ID0gZG9jdW1lbnQgJiYgZ2V0QWN0aXZlRWxlbWVudCgpO1xuICAgIGlmIChhY3RpdmVFbGVtZW50ID09PSB2b2lkIDApIHsgYWN0aXZlRWxlbWVudCA9IGdldEFjdGl2ZUVsZW1lbnQoZ2V0Rmlyc3QodG9wTm9kZSkub3duZXJEb2N1bWVudCk7IH1cbiAgICBpZiAoIWFjdGl2ZUVsZW1lbnQgfHwgKGFjdGl2ZUVsZW1lbnQuZGF0YXNldCAmJiBhY3RpdmVFbGVtZW50LmRhdGFzZXQuZm9jdXNHdWFyZCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gZ2V0QWxsQWZmZWN0ZWROb2Rlcyh0b3BOb2RlKS5zb21lKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgIHJldHVybiBjb250YWlucyhub2RlLCBhY3RpdmVFbGVtZW50KSB8fCBmb2N1c0luc2lkZUlmcmFtZShub2RlLCBhY3RpdmVFbGVtZW50KTtcbiAgICB9KTtcbn07XG4iLCAiaW1wb3J0IHsgRk9DVVNfQUxMT1cgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBjb250YWlucyB9IGZyb20gJy4vdXRpbHMvRE9NdXRpbHMnO1xuaW1wb3J0IHsgdG9BcnJheSB9IGZyb20gJy4vdXRpbHMvYXJyYXknO1xuaW1wb3J0IHsgZ2V0QWN0aXZlRWxlbWVudCB9IGZyb20gJy4vdXRpbHMvZ2V0QWN0aXZlRWxlbWVudCc7XG4vKipcbiAqIGNoZWNrcyBpZiBmb2N1cyBpcyBoaWRkZW4gRlJPTSB0aGUgZm9jdXMtbG9ja1xuICogaWUgY29udGFpbmVkIGluc2lkZSBhIG5vZGUgZm9jdXMtbG9jayBzaGFsbCBpZ25vcmVcbiAqXG4gKiBUaGlzIGlzIGEgdXRpbGl0eSBmdW5jdGlvbiBjb3VwbGVkIHdpdGgge0BsaW5rIEZPQ1VTX0FMTE9XfSBjb25zdGFudFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBmb2N1cyBpcyBjdXJyZW50bHkgaXMgaW4gXCJhbGxvd1wiIGFyZWFcbiAqL1xuZXhwb3J0IHZhciBmb2N1c0lzSGlkZGVuID0gZnVuY3Rpb24gKGluRG9jdW1lbnQpIHtcbiAgICBpZiAoaW5Eb2N1bWVudCA9PT0gdm9pZCAwKSB7IGluRG9jdW1lbnQgPSBkb2N1bWVudDsgfVxuICAgIHZhciBhY3RpdmVFbGVtZW50ID0gZ2V0QWN0aXZlRWxlbWVudChpbkRvY3VtZW50KTtcbiAgICBpZiAoIWFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyB0aGlzIGRvZXMgbm90IHN1cHBvcnQgc2V0dGluZyBGT0NVU19BTExPVyB3aXRoaW4gc2hhZG93IGRvbVxuICAgIHJldHVybiB0b0FycmF5KGluRG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIltcIi5jb25jYXQoRk9DVVNfQUxMT1csIFwiXVwiKSkpLnNvbWUoZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIGNvbnRhaW5zKG5vZGUsIGFjdGl2ZUVsZW1lbnQpOyB9KTtcbn07XG4iLCAiaW1wb3J0IHsgaXNSYWRpb0VsZW1lbnQgfSBmcm9tICcuL2lzJztcbnZhciBmaW5kU2VsZWN0ZWRSYWRpbyA9IGZ1bmN0aW9uIChub2RlLCBub2Rlcykge1xuICAgIHJldHVybiBub2Rlc1xuICAgICAgICAuZmlsdGVyKGlzUmFkaW9FbGVtZW50KVxuICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChlbCkgeyByZXR1cm4gZWwubmFtZSA9PT0gbm9kZS5uYW1lOyB9KVxuICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChlbCkgeyByZXR1cm4gZWwuY2hlY2tlZDsgfSlbMF0gfHwgbm9kZTtcbn07XG5leHBvcnQgdmFyIGNvcnJlY3ROb2RlID0gZnVuY3Rpb24gKG5vZGUsIG5vZGVzKSB7XG4gICAgaWYgKGlzUmFkaW9FbGVtZW50KG5vZGUpICYmIG5vZGUubmFtZSkge1xuICAgICAgICByZXR1cm4gZmluZFNlbGVjdGVkUmFkaW8obm9kZSwgbm9kZXMpO1xuICAgIH1cbiAgICByZXR1cm4gbm9kZTtcbn07XG4vKipcbiAqIGdpdmluZyBhIHNldCBvZiByYWRpbyBpbnB1dHMga2VlcHMgb25seSBzZWxlY3RlZCAodGFiYmFibGUpIG9uZXNcbiAqIEBwYXJhbSBub2Rlc1xuICovXG5leHBvcnQgdmFyIGNvcnJlY3ROb2RlcyA9IGZ1bmN0aW9uIChub2Rlcykge1xuICAgIC8vIElFMTEgaGFzIG5vIFNldChhcnJheSkgY29uc3RydWN0b3JcbiAgICB2YXIgcmVzdWx0U2V0ID0gbmV3IFNldCgpO1xuICAgIG5vZGVzLmZvckVhY2goZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIHJlc3VsdFNldC5hZGQoY29ycmVjdE5vZGUobm9kZSwgbm9kZXMpKTsgfSk7XG4gICAgLy8gdXNpbmcgZmlsdGVyIHRvIHN1cHBvcnQgSUUxMVxuICAgIHJldHVybiBub2Rlcy5maWx0ZXIoZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIHJlc3VsdFNldC5oYXMobm9kZSk7IH0pO1xufTtcbiIsICJpbXBvcnQgeyBjb3JyZWN0Tm9kZSB9IGZyb20gJy4vY29ycmVjdEZvY3VzJztcbmV4cG9ydCB2YXIgcGlja0ZpcnN0Rm9jdXMgPSBmdW5jdGlvbiAobm9kZXMpIHtcbiAgICBpZiAobm9kZXNbMF0gJiYgbm9kZXMubGVuZ3RoID4gMSkge1xuICAgICAgICByZXR1cm4gY29ycmVjdE5vZGUobm9kZXNbMF0sIG5vZGVzKTtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGVzWzBdO1xufTtcbmV4cG9ydCB2YXIgcGlja0ZvY3VzYWJsZSA9IGZ1bmN0aW9uIChub2Rlcywgbm9kZSkge1xuICAgIHJldHVybiBub2Rlcy5pbmRleE9mKGNvcnJlY3ROb2RlKG5vZGUsIG5vZGVzKSk7XG59O1xuIiwgImltcG9ydCB7IGNvcnJlY3ROb2RlcyB9IGZyb20gJy4vdXRpbHMvY29ycmVjdEZvY3VzJztcbmltcG9ydCB7IHBpY2tGb2N1c2FibGUgfSBmcm9tICcuL3V0aWxzL2ZpcnN0Rm9jdXMnO1xuaW1wb3J0IHsgaXNHdWFyZCB9IGZyb20gJy4vdXRpbHMvaXMnO1xuZXhwb3J0IHZhciBORVdfRk9DVVMgPSAnTkVXX0ZPQ1VTJztcbi8qKlxuICogTWFpbiBzb2x2ZXIgZm9yIHRoZSBcImZpbmQgbmV4dCBmb2N1c1wiIHF1ZXN0aW9uXG4gKiBAcGFyYW0gaW5uZXJOb2RlcyAtIHVzZWQgdG8gY29udHJvbCBcInJldHVybiBmb2N1c1wiXG4gKiBAcGFyYW0gaW5uZXJUYWJiYWJsZXMgLSB1c2VkIHRvIGNvbnRyb2wgXCJhdXRvZm9jdXNcIlxuICogQHBhcmFtIG91dGVyTm9kZXNcbiAqIEBwYXJhbSBhY3RpdmVFbGVtZW50XG4gKiBAcGFyYW0gbGFzdE5vZGVcbiAqIEByZXR1cm5zIHtudW1iZXJ8c3RyaW5nfHVuZGVmaW5lZHwqfVxuICovXG5leHBvcnQgdmFyIG5ld0ZvY3VzID0gZnVuY3Rpb24gKGlubmVyTm9kZXMsIGlubmVyVGFiYmFibGVzLCBvdXRlck5vZGVzLCBhY3RpdmVFbGVtZW50LCBsYXN0Tm9kZSkge1xuICAgIHZhciBjbnQgPSBpbm5lck5vZGVzLmxlbmd0aDtcbiAgICB2YXIgZmlyc3RGb2N1cyA9IGlubmVyTm9kZXNbMF07XG4gICAgdmFyIGxhc3RGb2N1cyA9IGlubmVyTm9kZXNbY250IC0gMV07XG4gICAgdmFyIGlzT25HdWFyZCA9IGlzR3VhcmQoYWN0aXZlRWxlbWVudCk7XG4gICAgLy8gZm9jdXMgaXMgaW5zaWRlXG4gICAgaWYgKGFjdGl2ZUVsZW1lbnQgJiYgaW5uZXJOb2Rlcy5pbmRleE9mKGFjdGl2ZUVsZW1lbnQpID49IDApIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdmFyIGFjdGl2ZUluZGV4ID0gYWN0aXZlRWxlbWVudCAhPT0gdW5kZWZpbmVkID8gb3V0ZXJOb2Rlcy5pbmRleE9mKGFjdGl2ZUVsZW1lbnQpIDogLTE7XG4gICAgdmFyIGxhc3RJbmRleCA9IGxhc3ROb2RlID8gb3V0ZXJOb2Rlcy5pbmRleE9mKGxhc3ROb2RlKSA6IGFjdGl2ZUluZGV4O1xuICAgIHZhciBsYXN0Tm9kZUluc2lkZSA9IGxhc3ROb2RlID8gaW5uZXJOb2Rlcy5pbmRleE9mKGxhc3ROb2RlKSA6IC0xO1xuICAgIC8vIG5vIGFjdGl2ZSBmb2N1cyAob3IgZm9jdXMgaXMgb24gdGhlIGJvZHkpXG4gICAgaWYgKGFjdGl2ZUluZGV4ID09PSAtMSkge1xuICAgICAgICAvLyBrbm93biBmYWxsYmFja1xuICAgICAgICBpZiAobGFzdE5vZGVJbnNpZGUgIT09IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gbGFzdE5vZGVJbnNpZGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE5FV19GT0NVUztcbiAgICB9XG4gICAgLy8gbmV3IGZvY3VzLCBub3RoaW5nIHRvIGNhbGN1bGF0ZVxuICAgIGlmIChsYXN0Tm9kZUluc2lkZSA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIE5FV19GT0NVUztcbiAgICB9XG4gICAgdmFyIGluZGV4RGlmZiA9IGFjdGl2ZUluZGV4IC0gbGFzdEluZGV4O1xuICAgIHZhciBmaXJzdE5vZGVJbmRleCA9IG91dGVyTm9kZXMuaW5kZXhPZihmaXJzdEZvY3VzKTtcbiAgICB2YXIgbGFzdE5vZGVJbmRleCA9IG91dGVyTm9kZXMuaW5kZXhPZihsYXN0Rm9jdXMpO1xuICAgIHZhciBjb3JyZWN0ZWROb2RlcyA9IGNvcnJlY3ROb2RlcyhvdXRlck5vZGVzKTtcbiAgICB2YXIgY29ycmVjdGVkSW5kZXggPSBhY3RpdmVFbGVtZW50ICE9PSB1bmRlZmluZWQgPyBjb3JyZWN0ZWROb2Rlcy5pbmRleE9mKGFjdGl2ZUVsZW1lbnQpIDogLTE7XG4gICAgdmFyIGNvcnJlY3RlZEluZGV4RGlmZiA9IGNvcnJlY3RlZEluZGV4IC0gKGxhc3ROb2RlID8gY29ycmVjdGVkTm9kZXMuaW5kZXhPZihsYXN0Tm9kZSkgOiBhY3RpdmVJbmRleCk7XG4gICAgLy8gb2xkIGZvY3VzXG4gICAgaWYgKCFpbmRleERpZmYgJiYgbGFzdE5vZGVJbnNpZGUgPj0gMCkge1xuICAgICAgICByZXR1cm4gbGFzdE5vZGVJbnNpZGU7XG4gICAgfVxuICAgIC8vIG5vIHRhYmJhYmxlIGVsZW1lbnRzLCBhdXRvZm9jdXMgaXMgbm90IHBvc3NpYmxlXG4gICAgaWYgKGlubmVyVGFiYmFibGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAvLyBhbiBlZGdlIGNhc2Ugd2l0aCBubyB0YWJiYWJsZSBlbGVtZW50c1xuICAgICAgICAvLyByZXR1cm4gdGhlIGxhc3QgZm9jdXNhYmxlIG9uZVxuICAgICAgICAvLyB3aXRoIHNvbWUgcHJvYmFiaWxpdHkgdGhpcyB3aWxsIHByZXZlbnQgZm9jdXMgZnJvbSBjeWNsaW5nIGFjcm9zcyB0aGUgbG9jaywgYnV0IHRoZXJlIGlzIG5vIHRhYmJhbGUgZWxlbWVudHMgdG8gY3ljbGUgdG9cbiAgICAgICAgcmV0dXJuIGxhc3ROb2RlSW5zaWRlO1xuICAgIH1cbiAgICB2YXIgcmV0dXJuRmlyc3ROb2RlID0gcGlja0ZvY3VzYWJsZShpbm5lck5vZGVzLCBpbm5lclRhYmJhYmxlc1swXSk7XG4gICAgdmFyIHJldHVybkxhc3ROb2RlID0gcGlja0ZvY3VzYWJsZShpbm5lck5vZGVzLCBpbm5lclRhYmJhYmxlc1tpbm5lclRhYmJhYmxlcy5sZW5ndGggLSAxXSk7XG4gICAgLy8gZmlyc3QgZWxlbWVudFxuICAgIGlmIChhY3RpdmVJbmRleCA8PSBmaXJzdE5vZGVJbmRleCAmJiBpc09uR3VhcmQgJiYgTWF0aC5hYnMoaW5kZXhEaWZmKSA+IDEpIHtcbiAgICAgICAgcmV0dXJuIHJldHVybkxhc3ROb2RlO1xuICAgIH1cbiAgICAvLyBsYXN0IGVsZW1lbnRcbiAgICBpZiAoYWN0aXZlSW5kZXggPj0gbGFzdE5vZGVJbmRleCAmJiBpc09uR3VhcmQgJiYgTWF0aC5hYnMoaW5kZXhEaWZmKSA+IDEpIHtcbiAgICAgICAgcmV0dXJuIHJldHVybkZpcnN0Tm9kZTtcbiAgICB9XG4gICAgLy8ganVtcCBvdXQsIGJ1dCBub3Qgb24gdGhlIGd1YXJkXG4gICAgaWYgKGluZGV4RGlmZiAmJiBNYXRoLmFicyhjb3JyZWN0ZWRJbmRleERpZmYpID4gMSkge1xuICAgICAgICByZXR1cm4gbGFzdE5vZGVJbnNpZGU7XG4gICAgfVxuICAgIC8vIGZvY3VzIGFib3ZlIGxvY2tcbiAgICBpZiAoYWN0aXZlSW5kZXggPD0gZmlyc3ROb2RlSW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHJldHVybkxhc3ROb2RlO1xuICAgIH1cbiAgICAvLyBmb2N1cyBiZWxvdyBsb2NrXG4gICAgaWYgKGFjdGl2ZUluZGV4ID4gbGFzdE5vZGVJbmRleCkge1xuICAgICAgICByZXR1cm4gcmV0dXJuRmlyc3ROb2RlO1xuICAgIH1cbiAgICAvLyBpbmRleCBpcyBpbnNpZGUgdGFiIG9yZGVyLCBidXQgb3V0c2lkZSBMb2NrXG4gICAgaWYgKGluZGV4RGlmZikge1xuICAgICAgICBpZiAoTWF0aC5hYnMoaW5kZXhEaWZmKSA+IDEpIHtcbiAgICAgICAgICAgIHJldHVybiBsYXN0Tm9kZUluc2lkZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKGNudCArIGxhc3ROb2RlSW5zaWRlICsgaW5kZXhEaWZmKSAlIGNudDtcbiAgICB9XG4gICAgLy8gZG8gbm90aGluZ1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG59O1xuIiwgImltcG9ydCB7IGZpbHRlckF1dG9Gb2N1c2FibGUgfSBmcm9tICcuL0RPTXV0aWxzJztcbmltcG9ydCB7IHBpY2tGaXJzdEZvY3VzIH0gZnJvbSAnLi9maXJzdEZvY3VzJztcbmltcG9ydCB7IGdldERhdGFzZXQgfSBmcm9tICcuL2lzJztcbnZhciBmaW5kQXV0b0ZvY3VzZWQgPSBmdW5jdGlvbiAoYXV0b0ZvY3VzYWJsZXMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB2YXIgYXV0b2ZvY3VzID0gKF9hID0gZ2V0RGF0YXNldChub2RlKSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmF1dG9mb2N1cztcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICBub2RlLmF1dG9mb2N1cyB8fFxuICAgICAgICAgICAgLy9cbiAgICAgICAgICAgIChhdXRvZm9jdXMgIT09IHVuZGVmaW5lZCAmJiBhdXRvZm9jdXMgIT09ICdmYWxzZScpIHx8XG4gICAgICAgICAgICAvL1xuICAgICAgICAgICAgYXV0b0ZvY3VzYWJsZXMuaW5kZXhPZihub2RlKSA+PSAwKTtcbiAgICB9O1xufTtcbmV4cG9ydCB2YXIgcGlja0F1dG9mb2N1cyA9IGZ1bmN0aW9uIChub2Rlc0luZGV4ZXMsIG9yZGVyZWROb2RlcywgZ3JvdXBzKSB7XG4gICAgdmFyIG5vZGVzID0gbm9kZXNJbmRleGVzLm1hcChmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgdmFyIG5vZGUgPSBfYS5ub2RlO1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9KTtcbiAgICB2YXIgYXV0b0ZvY3VzYWJsZSA9IGZpbHRlckF1dG9Gb2N1c2FibGUobm9kZXMuZmlsdGVyKGZpbmRBdXRvRm9jdXNlZChncm91cHMpKSk7XG4gICAgaWYgKGF1dG9Gb2N1c2FibGUgJiYgYXV0b0ZvY3VzYWJsZS5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHBpY2tGaXJzdEZvY3VzKGF1dG9Gb2N1c2FibGUpO1xuICAgIH1cbiAgICByZXR1cm4gcGlja0ZpcnN0Rm9jdXMoZmlsdGVyQXV0b0ZvY3VzYWJsZShvcmRlcmVkTm9kZXMpKTtcbn07XG4iLCAiaW1wb3J0IHsgcGFyZW50QXV0b2ZvY3VzYWJsZXMgfSBmcm9tICcuL0RPTXV0aWxzJztcbmltcG9ydCB7IGNvbnRhaW5zIH0gZnJvbSAnLi9ET011dGlscyc7XG5pbXBvcnQgeyBhc0FycmF5IH0gZnJvbSAnLi9hcnJheSc7XG52YXIgZ2V0UGFyZW50cyA9IGZ1bmN0aW9uIChub2RlLCBwYXJlbnRzKSB7XG4gICAgaWYgKHBhcmVudHMgPT09IHZvaWQgMCkgeyBwYXJlbnRzID0gW107IH1cbiAgICBwYXJlbnRzLnB1c2gobm9kZSk7XG4gICAgaWYgKG5vZGUucGFyZW50Tm9kZSkge1xuICAgICAgICBnZXRQYXJlbnRzKG5vZGUucGFyZW50Tm9kZS5ob3N0IHx8IG5vZGUucGFyZW50Tm9kZSwgcGFyZW50cyk7XG4gICAgfVxuICAgIHJldHVybiBwYXJlbnRzO1xufTtcbi8qKlxuICogZmluZHMgYSBwYXJlbnQgZm9yIGJvdGggbm9kZUEgYW5kIG5vZGVCXG4gKiBAcGFyYW0gbm9kZUFcbiAqIEBwYXJhbSBub2RlQlxuICogQHJldHVybnMge2Jvb2xlYW58Kn1cbiAqL1xuZXhwb3J0IHZhciBnZXRDb21tb25QYXJlbnQgPSBmdW5jdGlvbiAobm9kZUEsIG5vZGVCKSB7XG4gICAgdmFyIHBhcmVudHNBID0gZ2V0UGFyZW50cyhub2RlQSk7XG4gICAgdmFyIHBhcmVudHNCID0gZ2V0UGFyZW50cyhub2RlQik7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnByZWZlci1mb3Itb2ZcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmVudHNBLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIHZhciBjdXJyZW50UGFyZW50ID0gcGFyZW50c0FbaV07XG4gICAgICAgIGlmIChwYXJlbnRzQi5pbmRleE9mKGN1cnJlbnRQYXJlbnQpID49IDApIHtcbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50UGFyZW50O1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5leHBvcnQgdmFyIGdldFRvcENvbW1vblBhcmVudCA9IGZ1bmN0aW9uIChiYXNlQWN0aXZlRWxlbWVudCwgbGVmdEVudHJ5LCByaWdodEVudHJpZXMpIHtcbiAgICB2YXIgYWN0aXZlRWxlbWVudHMgPSBhc0FycmF5KGJhc2VBY3RpdmVFbGVtZW50KTtcbiAgICB2YXIgbGVmdEVudHJpZXMgPSBhc0FycmF5KGxlZnRFbnRyeSk7XG4gICAgdmFyIGFjdGl2ZUVsZW1lbnQgPSBhY3RpdmVFbGVtZW50c1swXTtcbiAgICB2YXIgdG9wQ29tbW9uID0gZmFsc2U7XG4gICAgbGVmdEVudHJpZXMuZmlsdGVyKEJvb2xlYW4pLmZvckVhY2goZnVuY3Rpb24gKGVudHJ5KSB7XG4gICAgICAgIHRvcENvbW1vbiA9IGdldENvbW1vblBhcmVudCh0b3BDb21tb24gfHwgZW50cnksIGVudHJ5KSB8fCB0b3BDb21tb247XG4gICAgICAgIHJpZ2h0RW50cmllcy5maWx0ZXIoQm9vbGVhbikuZm9yRWFjaChmdW5jdGlvbiAoc3ViRW50cnkpIHtcbiAgICAgICAgICAgIHZhciBjb21tb24gPSBnZXRDb21tb25QYXJlbnQoYWN0aXZlRWxlbWVudCwgc3ViRW50cnkpO1xuICAgICAgICAgICAgaWYgKGNvbW1vbikge1xuICAgICAgICAgICAgICAgIGlmICghdG9wQ29tbW9uIHx8IGNvbnRhaW5zKGNvbW1vbiwgdG9wQ29tbW9uKSkge1xuICAgICAgICAgICAgICAgICAgICB0b3BDb21tb24gPSBjb21tb247XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0b3BDb21tb24gPSBnZXRDb21tb25QYXJlbnQoY29tbW9uLCB0b3BDb21tb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgLy8gVE9ETzogYWRkIGFzc2VydCBoZXJlP1xuICAgIHJldHVybiB0b3BDb21tb247XG59O1xuLyoqXG4gKiByZXR1cm4gbGlzdCBvZiBub2RlcyB3aGljaCBhcmUgZXhwZWN0ZWQgdG8gYmUgYXV0b2ZvY3VzZWQgaW5zaWRlIGEgZ2l2ZW4gdG9wIG5vZGVzXG4gKiBAcGFyYW0gZW50cmllc1xuICogQHBhcmFtIHZpc2liaWxpdHlDYWNoZVxuICovXG5leHBvcnQgdmFyIGFsbFBhcmVudEF1dG9mb2N1c2FibGVzID0gZnVuY3Rpb24gKGVudHJpZXMsIHZpc2liaWxpdHlDYWNoZSkge1xuICAgIHJldHVybiBlbnRyaWVzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBub2RlKSB7IHJldHVybiBhY2MuY29uY2F0KHBhcmVudEF1dG9mb2N1c2FibGVzKG5vZGUsIHZpc2liaWxpdHlDYWNoZSkpOyB9LCBbXSk7XG59O1xuIiwgImltcG9ydCB7IE5FV19GT0NVUywgbmV3Rm9jdXMgfSBmcm9tICcuL3NvbHZlcic7XG5pbXBvcnQgeyBnZXRGb2N1c2FibGVOb2RlcyB9IGZyb20gJy4vdXRpbHMvRE9NdXRpbHMnO1xuaW1wb3J0IHsgZ2V0QWxsQWZmZWN0ZWROb2RlcyB9IGZyb20gJy4vdXRpbHMvYWxsLWFmZmVjdGVkJztcbmltcG9ydCB7IGFzQXJyYXksIGdldEZpcnN0IH0gZnJvbSAnLi91dGlscy9hcnJheSc7XG5pbXBvcnQgeyBwaWNrQXV0b2ZvY3VzIH0gZnJvbSAnLi91dGlscy9hdXRvLWZvY3VzJztcbmltcG9ydCB7IGdldEFjdGl2ZUVsZW1lbnQgfSBmcm9tICcuL3V0aWxzL2dldEFjdGl2ZUVsZW1lbnQnO1xuaW1wb3J0IHsgaXNEZWZpbmVkLCBpc05vdEFHdWFyZCB9IGZyb20gJy4vdXRpbHMvaXMnO1xuaW1wb3J0IHsgYWxsUGFyZW50QXV0b2ZvY3VzYWJsZXMsIGdldFRvcENvbW1vblBhcmVudCB9IGZyb20gJy4vdXRpbHMvcGFyZW50aW5nJztcbnZhciByZW9yZGVyTm9kZXMgPSBmdW5jdGlvbiAoc3JjTm9kZXMsIGRzdE5vZGVzKSB7XG4gICAgdmFyIHJlbWFwID0gbmV3IE1hcCgpO1xuICAgIC8vIG5vIFNldChkc3ROb2RlcykgZm9yIElFMTEgOihcbiAgICBkc3ROb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uIChlbnRpdHkpIHsgcmV0dXJuIHJlbWFwLnNldChlbnRpdHkubm9kZSwgZW50aXR5KTsgfSk7XG4gICAgLy8gcmVtYXAgdG8gZHN0Tm9kZXNcbiAgICByZXR1cm4gc3JjTm9kZXMubWFwKGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiByZW1hcC5nZXQobm9kZSk7IH0pLmZpbHRlcihpc0RlZmluZWQpO1xufTtcbi8qKlxuICogY29udGFpbnMgdGhlIG1haW4gbG9naWMgb2YgdGhlIGBmb2N1cy1sb2NrYCBwYWNrYWdlLlxuICpcbiAqICEgeW91IHByb2JhYmx5IGRvbnQgbmVlZCB0aGlzIGZ1bmN0aW9uICFcbiAqXG4gKiBnaXZlbiB0b3Agbm9kZShzKSBhbmQgdGhlIGxhc3QgYWN0aXZlIGVsZW1lbnQgcmV0dXJucyB0aGUgZWxlbWVudCB0byBiZSBmb2N1c2VkIG5leHRcbiAqIEByZXR1cm5zIGVsZW1lbnQgd2hpY2ggc2hvdWxkIGJlIGZvY3VzZWQgdG8gbW92ZSBmb2N1cyBpbnNpZGVcbiAqIEBwYXJhbSB0b3BOb2RlXG4gKiBAcGFyYW0gbGFzdE5vZGVcbiAqL1xuZXhwb3J0IHZhciBmb2N1c1NvbHZlciA9IGZ1bmN0aW9uICh0b3BOb2RlLCBsYXN0Tm9kZSkge1xuICAgIHZhciBhY3RpdmVFbGVtZW50ID0gZ2V0QWN0aXZlRWxlbWVudChhc0FycmF5KHRvcE5vZGUpLmxlbmd0aCA+IDAgPyBkb2N1bWVudCA6IGdldEZpcnN0KHRvcE5vZGUpLm93bmVyRG9jdW1lbnQpO1xuICAgIHZhciBlbnRyaWVzID0gZ2V0QWxsQWZmZWN0ZWROb2Rlcyh0b3BOb2RlKS5maWx0ZXIoaXNOb3RBR3VhcmQpO1xuICAgIHZhciBjb21tb25QYXJlbnQgPSBnZXRUb3BDb21tb25QYXJlbnQoYWN0aXZlRWxlbWVudCB8fCB0b3BOb2RlLCB0b3BOb2RlLCBlbnRyaWVzKTtcbiAgICB2YXIgdmlzaWJpbGl0eUNhY2hlID0gbmV3IE1hcCgpO1xuICAgIHZhciBhbnlGb2N1c2FibGUgPSBnZXRGb2N1c2FibGVOb2RlcyhlbnRyaWVzLCB2aXNpYmlsaXR5Q2FjaGUpO1xuICAgIHZhciBpbm5lckVsZW1lbnRzID0gYW55Rm9jdXNhYmxlLmZpbHRlcihmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgdmFyIG5vZGUgPSBfYS5ub2RlO1xuICAgICAgICByZXR1cm4gaXNOb3RBR3VhcmQobm9kZSk7XG4gICAgfSk7XG4gICAgaWYgKCFpbm5lckVsZW1lbnRzWzBdKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHZhciBvdXRlck5vZGVzID0gZ2V0Rm9jdXNhYmxlTm9kZXMoW2NvbW1vblBhcmVudF0sIHZpc2liaWxpdHlDYWNoZSkubWFwKGZ1bmN0aW9uIChfYSkge1xuICAgICAgICB2YXIgbm9kZSA9IF9hLm5vZGU7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH0pO1xuICAgIHZhciBvcmRlcmVkSW5uZXJFbGVtZW50cyA9IHJlb3JkZXJOb2RlcyhvdXRlck5vZGVzLCBpbm5lckVsZW1lbnRzKTtcbiAgICAvLyBjb2xsZWN0IGlubmVyIGZvY3VzYWJsZSBhbmQgc2VwYXJhdGVseSB0YWJiYWJsZXNcbiAgICB2YXIgaW5uZXJGb2N1c2FibGVzID0gb3JkZXJlZElubmVyRWxlbWVudHMubWFwKGZ1bmN0aW9uIChfYSkge1xuICAgICAgICB2YXIgbm9kZSA9IF9hLm5vZGU7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH0pO1xuICAgIHZhciBpbm5lclRhYmJhYmxlID0gb3JkZXJlZElubmVyRWxlbWVudHMuZmlsdGVyKGZ1bmN0aW9uIChfYSkge1xuICAgICAgICB2YXIgdGFiSW5kZXggPSBfYS50YWJJbmRleDtcbiAgICAgICAgcmV0dXJuIHRhYkluZGV4ID49IDA7XG4gICAgfSkubWFwKGZ1bmN0aW9uIChfYSkge1xuICAgICAgICB2YXIgbm9kZSA9IF9hLm5vZGU7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH0pO1xuICAgIHZhciBuZXdJZCA9IG5ld0ZvY3VzKGlubmVyRm9jdXNhYmxlcywgaW5uZXJUYWJiYWJsZSwgb3V0ZXJOb2RlcywgYWN0aXZlRWxlbWVudCwgbGFzdE5vZGUpO1xuICAgIGlmIChuZXdJZCA9PT0gTkVXX0ZPQ1VTKSB7XG4gICAgICAgIHZhciBmb2N1c05vZGUgPSBcbiAgICAgICAgLy8gZmlyc3QgdHJ5IG9ubHkgdGFiYmFibGUsIGFuZCB0aGUgZmFsbGJhY2sgdG8gYWxsIGZvY3VzYWJsZSwgYXMgbG9uZyBhcyBhdCBsZWFzdCBvbmUgZWxlbWVudCBzaG91bGQgYmUgcGlja2VkIGZvciBmb2N1c1xuICAgICAgICBwaWNrQXV0b2ZvY3VzKGFueUZvY3VzYWJsZSwgaW5uZXJUYWJiYWJsZSwgYWxsUGFyZW50QXV0b2ZvY3VzYWJsZXMoZW50cmllcywgdmlzaWJpbGl0eUNhY2hlKSkgfHxcbiAgICAgICAgICAgIHBpY2tBdXRvZm9jdXMoYW55Rm9jdXNhYmxlLCBpbm5lckZvY3VzYWJsZXMsIGFsbFBhcmVudEF1dG9mb2N1c2FibGVzKGVudHJpZXMsIHZpc2liaWxpdHlDYWNoZSkpO1xuICAgICAgICBpZiAoZm9jdXNOb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4geyBub2RlOiBmb2N1c05vZGUgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignZm9jdXMtbG9jazogY2Fubm90IGZpbmQgYW55IG5vZGUgdG8gbW92ZSBmb2N1cyBpbnRvJyk7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChuZXdJZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBuZXdJZDtcbiAgICB9XG4gICAgcmV0dXJuIG9yZGVyZWRJbm5lckVsZW1lbnRzW25ld0lkXTtcbn07XG4iLCAiaW1wb3J0IHsgZ2V0QWxsQWZmZWN0ZWROb2RlcyB9IGZyb20gJy4vdXRpbHMvYWxsLWFmZmVjdGVkJztcbmltcG9ydCB7IGlzR3VhcmQsIGlzTm90QUd1YXJkIH0gZnJvbSAnLi91dGlscy9pcyc7XG5pbXBvcnQgeyBnZXRUb3BDb21tb25QYXJlbnQgfSBmcm9tICcuL3V0aWxzL3BhcmVudGluZyc7XG5pbXBvcnQgeyBvcmRlckJ5VGFiSW5kZXggfSBmcm9tICcuL3V0aWxzL3RhYk9yZGVyJztcbmltcG9ydCB7IGdldEZvY3VzYWJsZXMgfSBmcm9tICcuL3V0aWxzL3RhYlV0aWxzJztcbi8qKlxuICogdHJhdmVyc2VzIGFsbCByZWxhdGVkIG5vZGVzIChpbmNsdWRpbmcgZ3JvdXBzKSByZXR1cm5pbmcgYSBsaXN0IG9mIGFsbCBub2RlcyhvdXRlciBhbmQgaW50ZXJuYWwpIHdpdGggbWV0YSBpbmZvcm1hdGlvblxuICogVGhpcyBpcyBsb3ctbGV2ZWwgQVBJIVxuICogQHJldHVybnMgbGlzdCBvZiBmb2N1c2FibGUgZWxlbWVudHMgaW5zaWRlIGEgZ2l2ZW4gdG9wKCEpIG5vZGUuXG4gKiBAc2VlIHtAbGluayBnZXRGb2N1c2FibGVOb2Rlc30gcHJvdmlkaW5nIGEgc2ltcGxlciBBUElcbiAqL1xuZXhwb3J0IHZhciBleHBhbmRGb2N1c2FibGVOb2RlcyA9IGZ1bmN0aW9uICh0b3BOb2RlKSB7XG4gICAgdmFyIGVudHJpZXMgPSBnZXRBbGxBZmZlY3RlZE5vZGVzKHRvcE5vZGUpLmZpbHRlcihpc05vdEFHdWFyZCk7XG4gICAgdmFyIGNvbW1vblBhcmVudCA9IGdldFRvcENvbW1vblBhcmVudCh0b3BOb2RlLCB0b3BOb2RlLCBlbnRyaWVzKTtcbiAgICB2YXIgb3V0ZXJOb2RlcyA9IG9yZGVyQnlUYWJJbmRleChnZXRGb2N1c2FibGVzKFtjb21tb25QYXJlbnRdLCB0cnVlKSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgdmFyIGlubmVyRWxlbWVudHMgPSBnZXRGb2N1c2FibGVzKGVudHJpZXMsIGZhbHNlKTtcbiAgICByZXR1cm4gb3V0ZXJOb2Rlcy5tYXAoZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgIHZhciBub2RlID0gX2Eubm9kZSwgaW5kZXggPSBfYS5pbmRleDtcbiAgICAgICAgcmV0dXJuICh7XG4gICAgICAgICAgICBub2RlOiBub2RlLFxuICAgICAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICAgICAgbG9ja0l0ZW06IGlubmVyRWxlbWVudHMuaW5kZXhPZihub2RlKSA+PSAwLFxuICAgICAgICAgICAgZ3VhcmQ6IGlzR3VhcmQobm9kZSksXG4gICAgICAgIH0pO1xuICAgIH0pO1xufTtcbiIsICJleHBvcnQgdmFyIGZvY3VzT24gPSBmdW5jdGlvbiAodGFyZ2V0LCBmb2N1c09wdGlvbnMpIHtcbiAgICBpZiAoIXRhcmdldCkge1xuICAgICAgICAvLyBub3QgY2xlYXIgaG93LCBidXQgaXMgcG9zc2libGUgaHR0cHM6Ly9naXRodWIuY29tL3RoZUthc2hleS9mb2N1cy1sb2NrL2lzc3Vlcy81M1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICgnZm9jdXMnIGluIHRhcmdldCkge1xuICAgICAgICB0YXJnZXQuZm9jdXMoZm9jdXNPcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKCdjb250ZW50V2luZG93JyBpbiB0YXJnZXQgJiYgdGFyZ2V0LmNvbnRlbnRXaW5kb3cpIHtcbiAgICAgICAgdGFyZ2V0LmNvbnRlbnRXaW5kb3cuZm9jdXMoKTtcbiAgICB9XG59O1xuIiwgImltcG9ydCB7IGZvY3VzT24gfSBmcm9tICcuL2NvbW1hbmRzJztcbmltcG9ydCB7IGZvY3VzU29sdmVyIH0gZnJvbSAnLi9mb2N1c1NvbHZlcic7XG52YXIgZ3VhcmRDb3VudCA9IDA7XG52YXIgbG9ja0Rpc2FibGVkID0gZmFsc2U7XG4vKipcbiAqIFRoZSBtYWluIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIGZvY3VzLWxvY2sgcGFja2FnZVxuICpcbiAqIENvbnRhaW5zIGZvY3VzIGF0IGEgZ2l2ZW4gbm9kZS5cbiAqIFRoZSBsYXN0IGZvY3VzZWQgZWxlbWVudCB3aWxsIGhlbHAgdG8gZGV0ZXJtaW5lIHdoaWNoIGVsZW1lbnQoZmlyc3Qgb3IgbGFzdCkgc2hvdWxkIGJlIGZvY3VzZWQuXG4gKiBUaGUgZm91bmQgZWxlbWVudCB3aWxsIGJlIGZvY3VzZWQuXG4gKlxuICogVGhpcyBpcyBvbmUgdGltZSBhY3Rpb24gKG1vdmUpLCBub3QgYSBwZXJzaXN0ZW50IGZvY3VzLWxvY2tcbiAqXG4gKiBIVE1MIG1hcmtlcnMgKHNlZSB7QGxpbmsgaW1wb3J0KCcuL2NvbnN0YW50cycpLkZPQ1VTX0FVVE99IGNvbnN0YW50cykgY2FuIGNvbnRyb2wgYXV0b2ZvY3VzXG4gKiBAc2VlIHtAbGluayBmb2N1c1NvbHZlcn0gZm9yIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHkgd2l0aG91dCBhdXRvZm9jdXNcbiAqL1xuZXhwb3J0IHZhciBtb3ZlRm9jdXNJbnNpZGUgPSBmdW5jdGlvbiAodG9wTm9kZSwgbGFzdE5vZGUsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgIHZhciBmb2N1c2FibGUgPSBmb2N1c1NvbHZlcih0b3BOb2RlLCBsYXN0Tm9kZSk7XG4gICAgLy8gZ2xvYmFsIGxvY2FsIHNpZGUgZWZmZWN0IHRvIGNvdW50YWluIHJlY3Vyc2l2ZSBsb2NrIGFjdGl2YXRpb24gYW5kIHJlc29sdmUgZm9jdXMtZmlnaHRpbmdcbiAgICBpZiAobG9ja0Rpc2FibGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGZvY3VzYWJsZSkge1xuICAgICAgICAvKiogK0ZPQ1VTLUZJR0hUSU5HIHByZXZlbnRpb24gKiovXG4gICAgICAgIGlmIChndWFyZENvdW50ID4gMikge1xuICAgICAgICAgICAgLy8gd2UgaGF2ZSByZWN1cnNpdmUgZW50ZXJlZCBiYWNrIHRoZSBsb2NrIGFjdGl2YXRpb25cbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZvY3VzTG9jazogZm9jdXMtZmlnaHRpbmcgZGV0ZWN0ZWQuIE9ubHkgb25lIGZvY3VzIG1hbmFnZW1lbnQgc3lzdGVtIGNvdWxkIGJlIGFjdGl2ZS4gJyArXG4gICAgICAgICAgICAgICAgJ1NlZSBodHRwczovL2dpdGh1Yi5jb20vdGhlS2FzaGV5L2ZvY3VzLWxvY2svI2ZvY3VzLWZpZ2h0aW5nJyk7XG4gICAgICAgICAgICBsb2NrRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbG9ja0Rpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9LCAxKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBndWFyZENvdW50Kys7XG4gICAgICAgIGZvY3VzT24oZm9jdXNhYmxlLm5vZGUsIG9wdGlvbnMuZm9jdXNPcHRpb25zKTtcbiAgICAgICAgZ3VhcmRDb3VudC0tO1xuICAgIH1cbn07XG4iLCAiaW1wb3J0IHsgZ2V0VGFiYmFibGVOb2RlcyB9IGZyb20gJy4vdXRpbHMvRE9NdXRpbHMnO1xuZnVuY3Rpb24gd2Vha1JlZih2YWx1ZSkge1xuICAgIGlmICghdmFsdWUpXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIHZhciB3ID0gdmFsdWUgPyBuZXcgV2Vha1JlZih2YWx1ZSkgOiBudWxsO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiAodyA9PT0gbnVsbCB8fCB3ID09PSB2b2lkIDAgPyB2b2lkIDAgOiB3LmRlcmVmKCkpIHx8IG51bGw7IH07XG59XG5leHBvcnQgdmFyIHJlY29yZEVsZW1lbnRMb2NhdGlvbiA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB2YXIgc3RhY2sgPSBbXTtcbiAgICB2YXIgY3VycmVudEVsZW1lbnQgPSBlbGVtZW50O1xuICAgIHdoaWxlIChjdXJyZW50RWxlbWVudCAmJiBjdXJyZW50RWxlbWVudCAhPT0gZG9jdW1lbnQuYm9keSkge1xuICAgICAgICBzdGFjay5wdXNoKHtcbiAgICAgICAgICAgIGN1cnJlbnQ6IHdlYWtSZWYoY3VycmVudEVsZW1lbnQpLFxuICAgICAgICAgICAgcGFyZW50OiB3ZWFrUmVmKGN1cnJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQpLFxuICAgICAgICAgICAgbGVmdDogd2Vha1JlZihjdXJyZW50RWxlbWVudC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKSxcbiAgICAgICAgICAgIHJpZ2h0OiB3ZWFrUmVmKGN1cnJlbnRFbGVtZW50Lm5leHRFbGVtZW50U2libGluZyksXG4gICAgICAgIH0pO1xuICAgICAgICBjdXJyZW50RWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIGVsZW1lbnQ6IHdlYWtSZWYoZWxlbWVudCksXG4gICAgICAgIHN0YWNrOiBzdGFjayxcbiAgICAgICAgb3duZXJEb2N1bWVudDogZWxlbWVudC5vd25lckRvY3VtZW50LFxuICAgIH07XG59O1xudmFyIHJlc3RvcmVGb2N1c1RvID0gZnVuY3Rpb24gKGxvY2F0aW9uKSB7XG4gICAgdmFyIF9hLCBfYiwgX2MsIF9kLCBfZTtcbiAgICBpZiAoIWxvY2F0aW9uKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHZhciBzdGFjayA9IGxvY2F0aW9uLnN0YWNrLCBvd25lckRvY3VtZW50ID0gbG9jYXRpb24ub3duZXJEb2N1bWVudDtcbiAgICB2YXIgdmlzaWJpbGl0eUNhY2hlID0gbmV3IE1hcCgpO1xuICAgIGZvciAodmFyIF9pID0gMCwgc3RhY2tfMSA9IHN0YWNrOyBfaSA8IHN0YWNrXzEubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIHZhciBsaW5lID0gc3RhY2tfMVtfaV07XG4gICAgICAgIHZhciBwYXJlbnRfMSA9IChfYSA9IGxpbmUucGFyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbChsaW5lKTtcbiAgICAgICAgLy8gaXMgaXQgc3RpbGwgaGVyZT9cbiAgICAgICAgaWYgKHBhcmVudF8xICYmIG93bmVyRG9jdW1lbnQuY29udGFpbnMocGFyZW50XzEpKSB7XG4gICAgICAgICAgICB2YXIgbGVmdCA9IChfYiA9IGxpbmUubGVmdCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwobGluZSk7XG4gICAgICAgICAgICB2YXIgc2F2ZWRDdXJyZW50ID0gbGluZS5jdXJyZW50KCk7XG4gICAgICAgICAgICB2YXIgY3VycmVudCA9IHBhcmVudF8xLmNvbnRhaW5zKHNhdmVkQ3VycmVudCkgPyBzYXZlZEN1cnJlbnQgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB2YXIgcmlnaHQgPSAoX2MgPSBsaW5lLnJpZ2h0KSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuY2FsbChsaW5lKTtcbiAgICAgICAgICAgIHZhciBmb2N1c2FibGVzID0gZ2V0VGFiYmFibGVOb2RlcyhbcGFyZW50XzFdLCB2aXNpYmlsaXR5Q2FjaGUpO1xuICAgICAgICAgICAgdmFyIGFpbSA9IFxuICAgICAgICAgICAgLy8gdGhhdCBpcyBlbGVtZW50IGl0c2VsZlxuICAgICAgICAgICAgKF9lID0gKF9kID0gY3VycmVudCAhPT0gbnVsbCAmJiBjdXJyZW50ICE9PSB2b2lkIDAgPyBjdXJyZW50IDogXG4gICAgICAgICAgICAvLyBvciBzb21ldGhpbmcgaW4gaXQncyBwbGFjZVxuICAgICAgICAgICAgbGVmdCA9PT0gbnVsbCB8fCBsZWZ0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBsZWZ0Lm5leHRFbGVtZW50U2libGluZykgIT09IG51bGwgJiYgX2QgIT09IHZvaWQgMCA/IF9kIDogXG4gICAgICAgICAgICAvLyBvciBzb21lYm9keSB0byB0aGUgcmlnaHQsIHN0aWxsIGNsb3NlIGVub3VnaFxuICAgICAgICAgICAgcmlnaHQpICE9PSBudWxsICYmIF9lICE9PSB2b2lkIDAgPyBfZSA6IFxuICAgICAgICAgICAgLy8gb3Igc29tZWJvZHkgdG8gdGhlIGxlZnQsIHNvbWV0aGluZz9cbiAgICAgICAgICAgIGxlZnQ7XG4gICAgICAgICAgICB3aGlsZSAoYWltKSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgX2YgPSAwLCBmb2N1c2FibGVzXzEgPSBmb2N1c2FibGVzOyBfZiA8IGZvY3VzYWJsZXNfMS5sZW5ndGg7IF9mKyspIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZvY3VzYWJsZSA9IGZvY3VzYWJsZXNfMVtfZl07XG4gICAgICAgICAgICAgICAgICAgIGlmIChhaW0gPT09IG51bGwgfHwgYWltID09PSB2b2lkIDAgPyB2b2lkIDAgOiBhaW0uY29udGFpbnMoZm9jdXNhYmxlLm5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm9jdXNhYmxlLm5vZGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYWltID0gYWltLm5leHRFbGVtZW50U2libGluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmb2N1c2FibGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIC8vIGlmIHBhcmVudCBjb250YWlucyBhIGZvY3VzYWJsZSAtIG1vdmUgdGhlcmVcbiAgICAgICAgICAgICAgICByZXR1cm4gZm9jdXNhYmxlc1swXS5ub2RlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIG5vdGhpbmcgbWF0Y2hlZFxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59O1xuLyoqXG4gKiBDYXB0dXJlcyB0aGUgY3VycmVudCBmb2N1c2VkIGVsZW1lbnQgdG8gcmVzdG9yZSBmb2N1cyBhcyBjbG9zZSBhcyBwb3NzaWJsZSBpbiB0aGUgZnV0dXJlXG4gKiBIYW5kbGVzIHNpdHVhdGlvbnMgd2hlcmUgdGhlIGZvY3VzZWQgZWxlbWVudCBpcyByZW1vdmVkIGZyb20gdGhlIERPTSBvciBubyBsb25nZXIgZm9jdXNhYmxlXG4gKiBtb3ZpbmcgZm9jdXMgdG8gdGhlIGNsb3Nlc3QgZm9jdXNhYmxlIGVsZW1lbnRcbiAqIEBwYXJhbSB0YXJnZXRFbGVtZW50IC0gZWxlbWVudCB3aGVyZSBmb2N1cyBzaG91bGQgYmUgcmVzdG9yZWRcbiAqIEByZXR1cm5zIGEgZnVuY3Rpb24gcmV0dXJuaW5nIGEgbmV3IGVsZW1lbnQgdG8gZm9jdXNcbiAqL1xuZXhwb3J0IHZhciBjYXB0dXJlRm9jdXNSZXN0b3JlID0gZnVuY3Rpb24gKHRhcmdldEVsZW1lbnQpIHtcbiAgICB2YXIgbG9jYXRpb24gPSByZWNvcmRFbGVtZW50TG9jYXRpb24odGFyZ2V0RWxlbWVudCk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHJlc3RvcmVGb2N1c1RvKGxvY2F0aW9uKTtcbiAgICB9O1xufTtcbiIsICJpbXBvcnQgeyBmb2N1c09uIH0gZnJvbSAnLi9jb21tYW5kcyc7XG5pbXBvcnQgeyBnZXRUYWJiYWJsZU5vZGVzLCBjb250YWlucywgZ2V0Rm9jdXNhYmxlTm9kZXMgfSBmcm9tICcuL3V0aWxzL0RPTXV0aWxzJztcbmltcG9ydCB7IGFzQXJyYXkgfSBmcm9tICcuL3V0aWxzL2FycmF5Jztcbi8qKlxuICogZm9yIGEgZ2l2ZW4gYGVsZW1lbnRgIGluIGEgZ2l2ZW4gYHNjb3BlYCByZXR1cm5zIGZvY3VzYWJsZSBzaWJsaW5nc1xuICogQHBhcmFtIGVsZW1lbnQgLSBiYXNlIGVsZW1lbnRcbiAqIEBwYXJhbSBzY29wZSAtIGNvbW1vbiBwYXJlbnQuIENhbiBiZSBkb2N1bWVudCwgYnV0IGJldHRlciB0byBuYXJyb3cgaXQgZG93biBmb3IgcGVyZm9ybWFuY2UgcmVhc29uc1xuICogQHJldHVybnMge3ByZXYsbmV4dH0gLSByZWZlcmVuY2VzIHRvIGEgZm9jdXNhYmxlIGVsZW1lbnQgYmVmb3JlIGFuZCBhZnRlclxuICogQHJldHVybnMgdW5kZWZpbmVkIC0gaWYgb3BlcmF0aW9uIGlzIG5vdCBhcHBsaWNhYmxlXG4gKi9cbmV4cG9ydCB2YXIgZ2V0UmVsYXRpdmVGb2N1c2FibGUgPSBmdW5jdGlvbiAoZWxlbWVudCwgc2NvcGUsIHVzZVRhYmJhYmxlcykge1xuICAgIGlmICghZWxlbWVudCB8fCAhc2NvcGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignbm8gZWxlbWVudCBvciBzY29wZSBnaXZlbicpO1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIHZhciBzaGFyZHMgPSBhc0FycmF5KHNjb3BlKTtcbiAgICBpZiAoc2hhcmRzLmV2ZXJ5KGZ1bmN0aW9uIChzaGFyZCkgeyByZXR1cm4gIWNvbnRhaW5zKHNoYXJkLCBlbGVtZW50KTsgfSkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignQWN0aXZlIGVsZW1lbnQgaXMgbm90IGNvbnRhaW5lZCBpbiB0aGUgc2NvcGUnKTtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICB2YXIgZm9jdXNhYmxlcyA9IHVzZVRhYmJhYmxlc1xuICAgICAgICA/IGdldFRhYmJhYmxlTm9kZXMoc2hhcmRzLCBuZXcgTWFwKCkpXG4gICAgICAgIDogZ2V0Rm9jdXNhYmxlTm9kZXMoc2hhcmRzLCBuZXcgTWFwKCkpO1xuICAgIHZhciBjdXJyZW50ID0gZm9jdXNhYmxlcy5maW5kSW5kZXgoZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgIHZhciBub2RlID0gX2Eubm9kZTtcbiAgICAgICAgcmV0dXJuIG5vZGUgPT09IGVsZW1lbnQ7XG4gICAgfSk7XG4gICAgaWYgKGN1cnJlbnQgPT09IC0xKSB7XG4gICAgICAgIC8vIGFuIGVkZ2UgY2FzZSwgd2hlbiBhbmNob3IgZWxlbWVudCBpcyBub3QgZm91bmRcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcHJldjogZm9jdXNhYmxlc1tjdXJyZW50IC0gMV0sXG4gICAgICAgIG5leHQ6IGZvY3VzYWJsZXNbY3VycmVudCArIDFdLFxuICAgICAgICBmaXJzdDogZm9jdXNhYmxlc1swXSxcbiAgICAgICAgbGFzdDogZm9jdXNhYmxlc1tmb2N1c2FibGVzLmxlbmd0aCAtIDFdLFxuICAgIH07XG59O1xudmFyIGdldEJvdW5kYXJ5ID0gZnVuY3Rpb24gKHNoYXJkcywgdXNlVGFiYmFibGVzKSB7XG4gICAgdmFyIHNldCA9IHVzZVRhYmJhYmxlc1xuICAgICAgICA/IGdldFRhYmJhYmxlTm9kZXMoYXNBcnJheShzaGFyZHMpLCBuZXcgTWFwKCkpXG4gICAgICAgIDogZ2V0Rm9jdXNhYmxlTm9kZXMoYXNBcnJheShzaGFyZHMpLCBuZXcgTWFwKCkpO1xuICAgIHJldHVybiB7XG4gICAgICAgIGZpcnN0OiBzZXRbMF0sXG4gICAgICAgIGxhc3Q6IHNldFtzZXQubGVuZ3RoIC0gMV0sXG4gICAgfTtcbn07XG52YXIgZGVmYXVsdE9wdGlvbnMgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgc2NvcGU6IGRvY3VtZW50LmJvZHksXG4gICAgICAgIGN5Y2xlOiB0cnVlLFxuICAgICAgICBvbmx5VGFiYmFibGU6IHRydWUsXG4gICAgfSwgb3B0aW9ucyk7XG59O1xudmFyIG1vdmVGb2N1cyA9IGZ1bmN0aW9uIChmcm9tRWxlbWVudCwgb3B0aW9ucywgY2IpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgIHZhciBuZXdPcHRpb25zID0gZGVmYXVsdE9wdGlvbnMob3B0aW9ucyk7XG4gICAgdmFyIHNvbHV0aW9uID0gZ2V0UmVsYXRpdmVGb2N1c2FibGUoZnJvbUVsZW1lbnQsIG5ld09wdGlvbnMuc2NvcGUsIG5ld09wdGlvbnMub25seVRhYmJhYmxlKTtcbiAgICBpZiAoIXNvbHV0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHRhcmdldCA9IGNiKHNvbHV0aW9uLCBuZXdPcHRpb25zLmN5Y2xlKTtcbiAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgIGZvY3VzT24odGFyZ2V0Lm5vZGUsIG5ld09wdGlvbnMuZm9jdXNPcHRpb25zKTtcbiAgICB9XG59O1xuLyoqXG4gKiBmb2N1c2VzIG5leHQgZWxlbWVudCBpbiB0aGUgdGFiLW9yZGVyXG4gKiBAcGFyYW0gZnJvbUVsZW1lbnQgLSBjb21tb24gcGFyZW50IHRvIHNjb3BlIGFjdGl2ZSBlbGVtZW50IHNlYXJjaCBvciB0YWIgY3ljbGUgb3JkZXJcbiAqIEBwYXJhbSB7Rm9jdXNOZXh0T3B0aW9uc30gW29wdGlvbnNdIC0gZm9jdXMgb3B0aW9uc1xuICovXG5leHBvcnQgdmFyIGZvY3VzTmV4dEVsZW1lbnQgPSBmdW5jdGlvbiAoZnJvbUVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgIG1vdmVGb2N1cyhmcm9tRWxlbWVudCwgb3B0aW9ucywgZnVuY3Rpb24gKF9hLCBjeWNsZSkge1xuICAgICAgICB2YXIgbmV4dCA9IF9hLm5leHQsIGZpcnN0ID0gX2EuZmlyc3Q7XG4gICAgICAgIHJldHVybiBuZXh0IHx8IChjeWNsZSAmJiBmaXJzdCk7XG4gICAgfSk7XG59O1xuLyoqXG4gKiBmb2N1c2VzIHByZXYgZWxlbWVudCBpbiB0aGUgdGFiIG9yZGVyXG4gKiBAcGFyYW0gZnJvbUVsZW1lbnQgLSBjb21tb24gcGFyZW50IHRvIHNjb3BlIGFjdGl2ZSBlbGVtZW50IHNlYXJjaCBvciB0YWIgY3ljbGUgb3JkZXJcbiAqIEBwYXJhbSB7Rm9jdXNOZXh0T3B0aW9uc30gW29wdGlvbnNdIC0gZm9jdXMgb3B0aW9uc1xuICovXG5leHBvcnQgdmFyIGZvY3VzUHJldkVsZW1lbnQgPSBmdW5jdGlvbiAoZnJvbUVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgIG1vdmVGb2N1cyhmcm9tRWxlbWVudCwgb3B0aW9ucywgZnVuY3Rpb24gKF9hLCBjeWNsZSkge1xuICAgICAgICB2YXIgcHJldiA9IF9hLnByZXYsIGxhc3QgPSBfYS5sYXN0O1xuICAgICAgICByZXR1cm4gcHJldiB8fCAoY3ljbGUgJiYgbGFzdCk7XG4gICAgfSk7XG59O1xudmFyIHBpY2tCb3VuZGFyeSA9IGZ1bmN0aW9uIChzY29wZSwgb3B0aW9ucywgd2hhdCkge1xuICAgIHZhciBfYTtcbiAgICB2YXIgYm91bmRhcnkgPSBnZXRCb3VuZGFyeShzY29wZSwgKF9hID0gb3B0aW9ucy5vbmx5VGFiYmFibGUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHRydWUpO1xuICAgIHZhciBub2RlID0gYm91bmRhcnlbd2hhdF07XG4gICAgaWYgKG5vZGUpIHtcbiAgICAgICAgZm9jdXNPbihub2RlLm5vZGUsIG9wdGlvbnMuZm9jdXNPcHRpb25zKTtcbiAgICB9XG59O1xuLyoqXG4gKiBmb2N1c2VzIGZpcnN0IGVsZW1lbnQgaW4gdGhlIHRhYi1vcmRlclxuICogQHBhcmFtIHtGb2N1c05leHRPcHRpb25zfSBvcHRpb25zIC0gZm9jdXMgb3B0aW9uc1xuICovXG5leHBvcnQgdmFyIGZvY3VzRmlyc3RFbGVtZW50ID0gZnVuY3Rpb24gKHNjb3BlLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cbiAgICBwaWNrQm91bmRhcnkoc2NvcGUsIG9wdGlvbnMsICdmaXJzdCcpO1xufTtcbi8qKlxuICogZm9jdXNlcyBsYXN0IGVsZW1lbnQgaW4gdGhlIHRhYiBvcmRlclxuICogQHBhcmFtIHtGb2N1c05leHRPcHRpb25zfSBvcHRpb25zIC0gZm9jdXMgb3B0aW9uc1xuICovXG5leHBvcnQgdmFyIGZvY3VzTGFzdEVsZW1lbnQgPSBmdW5jdGlvbiAoc2NvcGUsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgIHBpY2tCb3VuZGFyeShzY29wZSwgb3B0aW9ucywgJ2xhc3QnKTtcbn07XG4iLCAiaW1wb3J0IHsgZXhwb3J0U2lkZWNhciB9IGZyb20gJ3VzZS1zaWRlY2FyJztcbmltcG9ydCBGb2N1c1RyYXAgZnJvbSAnLi9UcmFwJztcbmltcG9ydCB7IG1lZGl1bVNpZGVjYXIgfSBmcm9tICcuL21lZGl1bSc7XG5leHBvcnQgZGVmYXVsdCBleHBvcnRTaWRlY2FyKG1lZGl1bVNpZGVjYXIsIEZvY3VzVHJhcCk7IiwgImltcG9ydCB7IF9fc3ByZWFkQXJyYXkgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFJlbW92ZVNjcm9sbEJhciB9IGZyb20gJ3JlYWN0LXJlbW92ZS1zY3JvbGwtYmFyJztcbmltcG9ydCB7IHN0eWxlU2luZ2xldG9uIH0gZnJvbSAncmVhY3Qtc3R5bGUtc2luZ2xldG9uJztcbmltcG9ydCB7IG5vblBhc3NpdmUgfSBmcm9tICcuL2FnZ3Jlc2l2ZUNhcHR1cmUnO1xuaW1wb3J0IHsgaGFuZGxlU2Nyb2xsLCBsb2NhdGlvbkNvdWxkQmVTY3JvbGxlZCB9IGZyb20gJy4vaGFuZGxlU2Nyb2xsJztcbmV4cG9ydCB2YXIgZ2V0VG91Y2hYWSA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgIHJldHVybiAnY2hhbmdlZFRvdWNoZXMnIGluIGV2ZW50ID8gW2V2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFgsIGV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFldIDogWzAsIDBdO1xufTtcbmV4cG9ydCB2YXIgZ2V0RGVsdGFYWSA9IGZ1bmN0aW9uIChldmVudCkgeyByZXR1cm4gW2V2ZW50LmRlbHRhWCwgZXZlbnQuZGVsdGFZXTsgfTtcbnZhciBleHRyYWN0UmVmID0gZnVuY3Rpb24gKHJlZikge1xuICAgIHJldHVybiByZWYgJiYgJ2N1cnJlbnQnIGluIHJlZiA/IHJlZi5jdXJyZW50IDogcmVmO1xufTtcbnZhciBkZWx0YUNvbXBhcmUgPSBmdW5jdGlvbiAoeCwgeSkgeyByZXR1cm4geFswXSA9PT0geVswXSAmJiB4WzFdID09PSB5WzFdOyB9O1xudmFyIGdlbmVyYXRlU3R5bGUgPSBmdW5jdGlvbiAoaWQpIHsgcmV0dXJuIFwiXFxuICAuYmxvY2staW50ZXJhY3Rpdml0eS1cIi5jb25jYXQoaWQsIFwiIHtwb2ludGVyLWV2ZW50czogbm9uZTt9XFxuICAuYWxsb3ctaW50ZXJhY3Rpdml0eS1cIikuY29uY2F0KGlkLCBcIiB7cG9pbnRlci1ldmVudHM6IGFsbDt9XFxuXCIpOyB9O1xudmFyIGlkQ291bnRlciA9IDA7XG52YXIgbG9ja1N0YWNrID0gW107XG5leHBvcnQgZnVuY3Rpb24gUmVtb3ZlU2Nyb2xsU2lkZUNhcihwcm9wcykge1xuICAgIHZhciBzaG91bGRQcmV2ZW50UXVldWUgPSBSZWFjdC51c2VSZWYoW10pO1xuICAgIHZhciB0b3VjaFN0YXJ0UmVmID0gUmVhY3QudXNlUmVmKFswLCAwXSk7XG4gICAgdmFyIGFjdGl2ZUF4aXMgPSBSZWFjdC51c2VSZWYoKTtcbiAgICB2YXIgaWQgPSBSZWFjdC51c2VTdGF0ZShpZENvdW50ZXIrKylbMF07XG4gICAgdmFyIFN0eWxlID0gUmVhY3QudXNlU3RhdGUoc3R5bGVTaW5nbGV0b24pWzBdO1xuICAgIHZhciBsYXN0UHJvcHMgPSBSZWFjdC51c2VSZWYocHJvcHMpO1xuICAgIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxhc3RQcm9wcy5jdXJyZW50ID0gcHJvcHM7XG4gICAgfSwgW3Byb3BzXSk7XG4gICAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHByb3BzLmluZXJ0KSB7XG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoXCJibG9jay1pbnRlcmFjdGl2aXR5LVwiLmNvbmNhdChpZCkpO1xuICAgICAgICAgICAgdmFyIGFsbG93XzEgPSBfX3NwcmVhZEFycmF5KFtwcm9wcy5sb2NrUmVmLmN1cnJlbnRdLCAocHJvcHMuc2hhcmRzIHx8IFtdKS5tYXAoZXh0cmFjdFJlZiksIHRydWUpLmZpbHRlcihCb29sZWFuKTtcbiAgICAgICAgICAgIGFsbG93XzEuZm9yRWFjaChmdW5jdGlvbiAoZWwpIHsgcmV0dXJuIGVsLmNsYXNzTGlzdC5hZGQoXCJhbGxvdy1pbnRlcmFjdGl2aXR5LVwiLmNvbmNhdChpZCkpOyB9KTtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKFwiYmxvY2staW50ZXJhY3Rpdml0eS1cIi5jb25jYXQoaWQpKTtcbiAgICAgICAgICAgICAgICBhbGxvd18xLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7IHJldHVybiBlbC5jbGFzc0xpc3QucmVtb3ZlKFwiYWxsb3ctaW50ZXJhY3Rpdml0eS1cIi5jb25jYXQoaWQpKTsgfSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICB9LCBbcHJvcHMuaW5lcnQsIHByb3BzLmxvY2tSZWYuY3VycmVudCwgcHJvcHMuc2hhcmRzXSk7XG4gICAgdmFyIHNob3VsZENhbmNlbEV2ZW50ID0gUmVhY3QudXNlQ2FsbGJhY2soZnVuY3Rpb24gKGV2ZW50LCBwYXJlbnQpIHtcbiAgICAgICAgaWYgKCd0b3VjaGVzJyBpbiBldmVudCAmJiBldmVudC50b3VjaGVzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgcmV0dXJuICFsYXN0UHJvcHMuY3VycmVudC5hbGxvd1BpbmNoWm9vbTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdG91Y2ggPSBnZXRUb3VjaFhZKGV2ZW50KTtcbiAgICAgICAgdmFyIHRvdWNoU3RhcnQgPSB0b3VjaFN0YXJ0UmVmLmN1cnJlbnQ7XG4gICAgICAgIHZhciBkZWx0YVggPSAnZGVsdGFYJyBpbiBldmVudCA/IGV2ZW50LmRlbHRhWCA6IHRvdWNoU3RhcnRbMF0gLSB0b3VjaFswXTtcbiAgICAgICAgdmFyIGRlbHRhWSA9ICdkZWx0YVknIGluIGV2ZW50ID8gZXZlbnQuZGVsdGFZIDogdG91Y2hTdGFydFsxXSAtIHRvdWNoWzFdO1xuICAgICAgICB2YXIgY3VycmVudEF4aXM7XG4gICAgICAgIHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG4gICAgICAgIHZhciBtb3ZlRGlyZWN0aW9uID0gTWF0aC5hYnMoZGVsdGFYKSA+IE1hdGguYWJzKGRlbHRhWSkgPyAnaCcgOiAndic7XG4gICAgICAgIC8vIGFsbG93IGhvcml6b250YWwgdG91Y2ggbW92ZSBvbiBSYW5nZSBpbnB1dHMuIFRoZXkgd2lsbCBub3QgY2F1c2UgYW55IHNjcm9sbFxuICAgICAgICBpZiAoJ3RvdWNoZXMnIGluIGV2ZW50ICYmIG1vdmVEaXJlY3Rpb24gPT09ICdoJyAmJiB0YXJnZXQudHlwZSA9PT0gJ3JhbmdlJykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjYW5CZVNjcm9sbGVkSW5NYWluRGlyZWN0aW9uID0gbG9jYXRpb25Db3VsZEJlU2Nyb2xsZWQobW92ZURpcmVjdGlvbiwgdGFyZ2V0KTtcbiAgICAgICAgaWYgKCFjYW5CZVNjcm9sbGVkSW5NYWluRGlyZWN0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2FuQmVTY3JvbGxlZEluTWFpbkRpcmVjdGlvbikge1xuICAgICAgICAgICAgY3VycmVudEF4aXMgPSBtb3ZlRGlyZWN0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY3VycmVudEF4aXMgPSBtb3ZlRGlyZWN0aW9uID09PSAndicgPyAnaCcgOiAndic7XG4gICAgICAgICAgICBjYW5CZVNjcm9sbGVkSW5NYWluRGlyZWN0aW9uID0gbG9jYXRpb25Db3VsZEJlU2Nyb2xsZWQobW92ZURpcmVjdGlvbiwgdGFyZ2V0KTtcbiAgICAgICAgICAgIC8vIG90aGVyIGF4aXMgbWlnaHQgYmUgbm90IHNjcm9sbGFibGVcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNhbkJlU2Nyb2xsZWRJbk1haW5EaXJlY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWFjdGl2ZUF4aXMuY3VycmVudCAmJiAnY2hhbmdlZFRvdWNoZXMnIGluIGV2ZW50ICYmIChkZWx0YVggfHwgZGVsdGFZKSkge1xuICAgICAgICAgICAgYWN0aXZlQXhpcy5jdXJyZW50ID0gY3VycmVudEF4aXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjdXJyZW50QXhpcykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNhbmNlbGluZ0F4aXMgPSBhY3RpdmVBeGlzLmN1cnJlbnQgfHwgY3VycmVudEF4aXM7XG4gICAgICAgIHJldHVybiBoYW5kbGVTY3JvbGwoY2FuY2VsaW5nQXhpcywgcGFyZW50LCBldmVudCwgY2FuY2VsaW5nQXhpcyA9PT0gJ2gnID8gZGVsdGFYIDogZGVsdGFZLCB0cnVlKTtcbiAgICB9LCBbXSk7XG4gICAgdmFyIHNob3VsZFByZXZlbnQgPSBSZWFjdC51c2VDYWxsYmFjayhmdW5jdGlvbiAoX2V2ZW50KSB7XG4gICAgICAgIHZhciBldmVudCA9IF9ldmVudDtcbiAgICAgICAgaWYgKCFsb2NrU3RhY2subGVuZ3RoIHx8IGxvY2tTdGFja1tsb2NrU3RhY2subGVuZ3RoIC0gMV0gIT09IFN0eWxlKSB7XG4gICAgICAgICAgICAvLyBub3QgdGhlIGxhc3QgYWN0aXZlXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGRlbHRhID0gJ2RlbHRhWScgaW4gZXZlbnQgPyBnZXREZWx0YVhZKGV2ZW50KSA6IGdldFRvdWNoWFkoZXZlbnQpO1xuICAgICAgICB2YXIgc291cmNlRXZlbnQgPSBzaG91bGRQcmV2ZW50UXVldWUuY3VycmVudC5maWx0ZXIoZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUubmFtZSA9PT0gZXZlbnQudHlwZSAmJiAoZS50YXJnZXQgPT09IGV2ZW50LnRhcmdldCB8fCBldmVudC50YXJnZXQgPT09IGUuc2hhZG93UGFyZW50KSAmJiBkZWx0YUNvbXBhcmUoZS5kZWx0YSwgZGVsdGEpOyB9KVswXTtcbiAgICAgICAgLy8gc2VsZiBldmVudCwgYW5kIHNob3VsZCBiZSBjYW5jZWxlZFxuICAgICAgICBpZiAoc291cmNlRXZlbnQgJiYgc291cmNlRXZlbnQuc2hvdWxkKSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQuY2FuY2VsYWJsZSkge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gb3V0c2lkZSBvciBzaGFyZCBldmVudFxuICAgICAgICBpZiAoIXNvdXJjZUV2ZW50KSB7XG4gICAgICAgICAgICB2YXIgc2hhcmROb2RlcyA9IChsYXN0UHJvcHMuY3VycmVudC5zaGFyZHMgfHwgW10pXG4gICAgICAgICAgICAgICAgLm1hcChleHRyYWN0UmVmKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiBub2RlLmNvbnRhaW5zKGV2ZW50LnRhcmdldCk7IH0pO1xuICAgICAgICAgICAgdmFyIHNob3VsZFN0b3AgPSBzaGFyZE5vZGVzLmxlbmd0aCA+IDAgPyBzaG91bGRDYW5jZWxFdmVudChldmVudCwgc2hhcmROb2Rlc1swXSkgOiAhbGFzdFByb3BzLmN1cnJlbnQubm9Jc29sYXRpb247XG4gICAgICAgICAgICBpZiAoc2hvdWxkU3RvcCkge1xuICAgICAgICAgICAgICAgIGlmIChldmVudC5jYW5jZWxhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSwgW10pO1xuICAgIHZhciBzaG91bGRDYW5jZWwgPSBSZWFjdC51c2VDYWxsYmFjayhmdW5jdGlvbiAobmFtZSwgZGVsdGEsIHRhcmdldCwgc2hvdWxkKSB7XG4gICAgICAgIHZhciBldmVudCA9IHsgbmFtZTogbmFtZSwgZGVsdGE6IGRlbHRhLCB0YXJnZXQ6IHRhcmdldCwgc2hvdWxkOiBzaG91bGQsIHNoYWRvd1BhcmVudDogZ2V0T3V0ZXJtb3N0U2hhZG93UGFyZW50KHRhcmdldCkgfTtcbiAgICAgICAgc2hvdWxkUHJldmVudFF1ZXVlLmN1cnJlbnQucHVzaChldmVudCk7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2hvdWxkUHJldmVudFF1ZXVlLmN1cnJlbnQgPSBzaG91bGRQcmV2ZW50UXVldWUuY3VycmVudC5maWx0ZXIoZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUgIT09IGV2ZW50OyB9KTtcbiAgICAgICAgfSwgMSk7XG4gICAgfSwgW10pO1xuICAgIHZhciBzY3JvbGxUb3VjaFN0YXJ0ID0gUmVhY3QudXNlQ2FsbGJhY2soZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHRvdWNoU3RhcnRSZWYuY3VycmVudCA9IGdldFRvdWNoWFkoZXZlbnQpO1xuICAgICAgICBhY3RpdmVBeGlzLmN1cnJlbnQgPSB1bmRlZmluZWQ7XG4gICAgfSwgW10pO1xuICAgIHZhciBzY3JvbGxXaGVlbCA9IFJlYWN0LnVzZUNhbGxiYWNrKGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICBzaG91bGRDYW5jZWwoZXZlbnQudHlwZSwgZ2V0RGVsdGFYWShldmVudCksIGV2ZW50LnRhcmdldCwgc2hvdWxkQ2FuY2VsRXZlbnQoZXZlbnQsIHByb3BzLmxvY2tSZWYuY3VycmVudCkpO1xuICAgIH0sIFtdKTtcbiAgICB2YXIgc2Nyb2xsVG91Y2hNb3ZlID0gUmVhY3QudXNlQ2FsbGJhY2soZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHNob3VsZENhbmNlbChldmVudC50eXBlLCBnZXRUb3VjaFhZKGV2ZW50KSwgZXZlbnQudGFyZ2V0LCBzaG91bGRDYW5jZWxFdmVudChldmVudCwgcHJvcHMubG9ja1JlZi5jdXJyZW50KSk7XG4gICAgfSwgW10pO1xuICAgIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxvY2tTdGFjay5wdXNoKFN0eWxlKTtcbiAgICAgICAgcHJvcHMuc2V0Q2FsbGJhY2tzKHtcbiAgICAgICAgICAgIG9uU2Nyb2xsQ2FwdHVyZTogc2Nyb2xsV2hlZWwsXG4gICAgICAgICAgICBvbldoZWVsQ2FwdHVyZTogc2Nyb2xsV2hlZWwsXG4gICAgICAgICAgICBvblRvdWNoTW92ZUNhcHR1cmU6IHNjcm9sbFRvdWNoTW92ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3doZWVsJywgc2hvdWxkUHJldmVudCwgbm9uUGFzc2l2ZSk7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHNob3VsZFByZXZlbnQsIG5vblBhc3NpdmUpO1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0Jywgc2Nyb2xsVG91Y2hTdGFydCwgbm9uUGFzc2l2ZSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsb2NrU3RhY2sgPSBsb2NrU3RhY2suZmlsdGVyKGZ1bmN0aW9uIChpbnN0KSB7IHJldHVybiBpbnN0ICE9PSBTdHlsZTsgfSk7XG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd3aGVlbCcsIHNob3VsZFByZXZlbnQsIG5vblBhc3NpdmUpO1xuICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgc2hvdWxkUHJldmVudCwgbm9uUGFzc2l2ZSk7XG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0Jywgc2Nyb2xsVG91Y2hTdGFydCwgbm9uUGFzc2l2ZSk7XG4gICAgICAgIH07XG4gICAgfSwgW10pO1xuICAgIHZhciByZW1vdmVTY3JvbGxCYXIgPSBwcm9wcy5yZW1vdmVTY3JvbGxCYXIsIGluZXJ0ID0gcHJvcHMuaW5lcnQ7XG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLFxuICAgICAgICBpbmVydCA/IFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGUsIHsgc3R5bGVzOiBnZW5lcmF0ZVN0eWxlKGlkKSB9KSA6IG51bGwsXG4gICAgICAgIHJlbW92ZVNjcm9sbEJhciA/IFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVtb3ZlU2Nyb2xsQmFyLCB7IGdhcE1vZGU6IHByb3BzLmdhcE1vZGUgfSkgOiBudWxsKSk7XG59XG5mdW5jdGlvbiBnZXRPdXRlcm1vc3RTaGFkb3dQYXJlbnQobm9kZSkge1xuICAgIHZhciBzaGFkb3dQYXJlbnQgPSBudWxsO1xuICAgIHdoaWxlIChub2RlICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChub2RlIGluc3RhbmNlb2YgU2hhZG93Um9vdCkge1xuICAgICAgICAgICAgc2hhZG93UGFyZW50ID0gbm9kZS5ob3N0O1xuICAgICAgICAgICAgbm9kZSA9IG5vZGUuaG9zdDtcbiAgICAgICAgfVxuICAgICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICAgIH1cbiAgICByZXR1cm4gc2hhZG93UGFyZW50O1xufVxuIiwgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHN0eWxlU2luZ2xldG9uIH0gZnJvbSAncmVhY3Qtc3R5bGUtc2luZ2xldG9uJztcbmltcG9ydCB7IGZ1bGxXaWR0aENsYXNzTmFtZSwgemVyb1JpZ2h0Q2xhc3NOYW1lLCBub1Njcm9sbGJhcnNDbGFzc05hbWUsIHJlbW92ZWRCYXJTaXplVmFyaWFibGUgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBnZXRHYXBXaWR0aCB9IGZyb20gJy4vdXRpbHMnO1xudmFyIFN0eWxlID0gc3R5bGVTaW5nbGV0b24oKTtcbmV4cG9ydCB2YXIgbG9ja0F0dHJpYnV0ZSA9ICdkYXRhLXNjcm9sbC1sb2NrZWQnO1xuLy8gaW1wb3J0YW50IHRpcCAtIG9uY2Ugd2UgbWVhc3VyZSBzY3JvbGxCYXIgd2lkdGggYW5kIHJlbW92ZSB0aGVtXG4vLyB3ZSBjb3VsZCBub3QgcmVwZWF0IHRoaXMgb3BlcmF0aW9uXG4vLyB0aHVzIHdlIGFyZSB1c2luZyBzdHlsZS1zaW5nbGV0b24gLSBvbmx5IHRoZSBmaXJzdCBcInlldCBjb3JyZWN0XCIgc3R5bGUgd2lsbCBiZSBhcHBsaWVkLlxudmFyIGdldFN0eWxlcyA9IGZ1bmN0aW9uIChfYSwgYWxsb3dSZWxhdGl2ZSwgZ2FwTW9kZSwgaW1wb3J0YW50KSB7XG4gICAgdmFyIGxlZnQgPSBfYS5sZWZ0LCB0b3AgPSBfYS50b3AsIHJpZ2h0ID0gX2EucmlnaHQsIGdhcCA9IF9hLmdhcDtcbiAgICBpZiAoZ2FwTW9kZSA9PT0gdm9pZCAwKSB7IGdhcE1vZGUgPSAnbWFyZ2luJzsgfVxuICAgIHJldHVybiBcIlxcbiAgLlwiLmNvbmNhdChub1Njcm9sbGJhcnNDbGFzc05hbWUsIFwiIHtcXG4gICBvdmVyZmxvdzogaGlkZGVuIFwiKS5jb25jYXQoaW1wb3J0YW50LCBcIjtcXG4gICBwYWRkaW5nLXJpZ2h0OiBcIikuY29uY2F0KGdhcCwgXCJweCBcIikuY29uY2F0KGltcG9ydGFudCwgXCI7XFxuICB9XFxuICBib2R5W1wiKS5jb25jYXQobG9ja0F0dHJpYnV0ZSwgXCJdIHtcXG4gICAgb3ZlcmZsb3c6IGhpZGRlbiBcIikuY29uY2F0KGltcG9ydGFudCwgXCI7XFxuICAgIG92ZXJzY3JvbGwtYmVoYXZpb3I6IGNvbnRhaW47XFxuICAgIFwiKS5jb25jYXQoW1xuICAgICAgICBhbGxvd1JlbGF0aXZlICYmIFwicG9zaXRpb246IHJlbGF0aXZlIFwiLmNvbmNhdChpbXBvcnRhbnQsIFwiO1wiKSxcbiAgICAgICAgZ2FwTW9kZSA9PT0gJ21hcmdpbicgJiZcbiAgICAgICAgICAgIFwiXFxuICAgIHBhZGRpbmctbGVmdDogXCIuY29uY2F0KGxlZnQsIFwicHg7XFxuICAgIHBhZGRpbmctdG9wOiBcIikuY29uY2F0KHRvcCwgXCJweDtcXG4gICAgcGFkZGluZy1yaWdodDogXCIpLmNvbmNhdChyaWdodCwgXCJweDtcXG4gICAgbWFyZ2luLWxlZnQ6MDtcXG4gICAgbWFyZ2luLXRvcDowO1xcbiAgICBtYXJnaW4tcmlnaHQ6IFwiKS5jb25jYXQoZ2FwLCBcInB4IFwiKS5jb25jYXQoaW1wb3J0YW50LCBcIjtcXG4gICAgXCIpLFxuICAgICAgICBnYXBNb2RlID09PSAncGFkZGluZycgJiYgXCJwYWRkaW5nLXJpZ2h0OiBcIi5jb25jYXQoZ2FwLCBcInB4IFwiKS5jb25jYXQoaW1wb3J0YW50LCBcIjtcIiksXG4gICAgXVxuICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgIC5qb2luKCcnKSwgXCJcXG4gIH1cXG4gIFxcbiAgLlwiKS5jb25jYXQoemVyb1JpZ2h0Q2xhc3NOYW1lLCBcIiB7XFxuICAgIHJpZ2h0OiBcIikuY29uY2F0KGdhcCwgXCJweCBcIikuY29uY2F0KGltcG9ydGFudCwgXCI7XFxuICB9XFxuICBcXG4gIC5cIikuY29uY2F0KGZ1bGxXaWR0aENsYXNzTmFtZSwgXCIge1xcbiAgICBtYXJnaW4tcmlnaHQ6IFwiKS5jb25jYXQoZ2FwLCBcInB4IFwiKS5jb25jYXQoaW1wb3J0YW50LCBcIjtcXG4gIH1cXG4gIFxcbiAgLlwiKS5jb25jYXQoemVyb1JpZ2h0Q2xhc3NOYW1lLCBcIiAuXCIpLmNvbmNhdCh6ZXJvUmlnaHRDbGFzc05hbWUsIFwiIHtcXG4gICAgcmlnaHQ6IDAgXCIpLmNvbmNhdChpbXBvcnRhbnQsIFwiO1xcbiAgfVxcbiAgXFxuICAuXCIpLmNvbmNhdChmdWxsV2lkdGhDbGFzc05hbWUsIFwiIC5cIikuY29uY2F0KGZ1bGxXaWR0aENsYXNzTmFtZSwgXCIge1xcbiAgICBtYXJnaW4tcmlnaHQ6IDAgXCIpLmNvbmNhdChpbXBvcnRhbnQsIFwiO1xcbiAgfVxcbiAgXFxuICBib2R5W1wiKS5jb25jYXQobG9ja0F0dHJpYnV0ZSwgXCJdIHtcXG4gICAgXCIpLmNvbmNhdChyZW1vdmVkQmFyU2l6ZVZhcmlhYmxlLCBcIjogXCIpLmNvbmNhdChnYXAsIFwicHg7XFxuICB9XFxuXCIpO1xufTtcbnZhciBnZXRDdXJyZW50VXNlQ291bnRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgY291bnRlciA9IHBhcnNlSW50KGRvY3VtZW50LmJvZHkuZ2V0QXR0cmlidXRlKGxvY2tBdHRyaWJ1dGUpIHx8ICcwJywgMTApO1xuICAgIHJldHVybiBpc0Zpbml0ZShjb3VudGVyKSA/IGNvdW50ZXIgOiAwO1xufTtcbmV4cG9ydCB2YXIgdXNlTG9ja0F0dHJpYnV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICBkb2N1bWVudC5ib2R5LnNldEF0dHJpYnV0ZShsb2NrQXR0cmlidXRlLCAoZ2V0Q3VycmVudFVzZUNvdW50ZXIoKSArIDEpLnRvU3RyaW5nKCkpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIG5ld0NvdW50ZXIgPSBnZXRDdXJyZW50VXNlQ291bnRlcigpIC0gMTtcbiAgICAgICAgICAgIGlmIChuZXdDb3VudGVyIDw9IDApIHtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUF0dHJpYnV0ZShsb2NrQXR0cmlidXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuc2V0QXR0cmlidXRlKGxvY2tBdHRyaWJ1dGUsIG5ld0NvdW50ZXIudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfSwgW10pO1xufTtcbi8qKlxuICogUmVtb3ZlcyBwYWdlIHNjcm9sbGJhciBhbmQgYmxvY2tzIHBhZ2Ugc2Nyb2xsIHdoZW4gbW91bnRlZFxuICovXG5leHBvcnQgdmFyIFJlbW92ZVNjcm9sbEJhciA9IGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciBub1JlbGF0aXZlID0gX2Eubm9SZWxhdGl2ZSwgbm9JbXBvcnRhbnQgPSBfYS5ub0ltcG9ydGFudCwgX2IgPSBfYS5nYXBNb2RlLCBnYXBNb2RlID0gX2IgPT09IHZvaWQgMCA/ICdtYXJnaW4nIDogX2I7XG4gICAgdXNlTG9ja0F0dHJpYnV0ZSgpO1xuICAgIC8qXG4gICAgIGdhcCB3aWxsIGJlIG1lYXN1cmVkIG9uIGV2ZXJ5IGNvbXBvbmVudCBtb3VudFxuICAgICBob3dldmVyIGl0IHdpbGwgYmUgdXNlZCBvbmx5IGJ5IHRoZSBcImZpcnN0XCIgaW52b2NhdGlvblxuICAgICBkdWUgdG8gc2luZ2xldG9uIG5hdHVyZSBvZiA8U3R5bGVcbiAgICAgKi9cbiAgICB2YXIgZ2FwID0gUmVhY3QudXNlTWVtbyhmdW5jdGlvbiAoKSB7IHJldHVybiBnZXRHYXBXaWR0aChnYXBNb2RlKTsgfSwgW2dhcE1vZGVdKTtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZSwgeyBzdHlsZXM6IGdldFN0eWxlcyhnYXAsICFub1JlbGF0aXZlLCBnYXBNb2RlLCAhbm9JbXBvcnRhbnQgPyAnIWltcG9ydGFudCcgOiAnJykgfSk7XG59O1xuIiwgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHN0eWxlc2hlZXRTaW5nbGV0b24gfSBmcm9tICcuL3NpbmdsZXRvbic7XG4vKipcbiAqIGNyZWF0ZXMgYSBob29rIHRvIGNvbnRyb2wgc3R5bGUgc2luZ2xldG9uXG4gKiBAc2VlIHtAbGluayBzdHlsZVNpbmdsZXRvbn0gZm9yIGEgc2FmZXIgY29tcG9uZW50IHZlcnNpb25cbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGNvbnN0IHVzZVN0eWxlID0gc3R5bGVIb29rU2luZ2xldG9uKCk7XG4gKiAvLy9cbiAqIHVzZVN0eWxlKCdib2R5IHsgb3ZlcmZsb3c6IGhpZGRlbn0nKTtcbiAqL1xuZXhwb3J0IHZhciBzdHlsZUhvb2tTaW5nbGV0b24gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNoZWV0ID0gc3R5bGVzaGVldFNpbmdsZXRvbigpO1xuICAgIHJldHVybiBmdW5jdGlvbiAoc3R5bGVzLCBpc0R5bmFtaWMpIHtcbiAgICAgICAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHNoZWV0LmFkZChzdHlsZXMpO1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzaGVldC5yZW1vdmUoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sIFtzdHlsZXMgJiYgaXNEeW5hbWljXSk7XG4gICAgfTtcbn07XG4iLCAidmFyIGN1cnJlbnROb25jZTtcbmV4cG9ydCB2YXIgc2V0Tm9uY2UgPSBmdW5jdGlvbiAobm9uY2UpIHtcbiAgICBjdXJyZW50Tm9uY2UgPSBub25jZTtcbn07XG5leHBvcnQgdmFyIGdldE5vbmNlID0gZnVuY3Rpb24gKCkge1xuICAgIGlmIChjdXJyZW50Tm9uY2UpIHtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnROb25jZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBfX3dlYnBhY2tfbm9uY2VfXyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIF9fd2VicGFja19ub25jZV9fO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufTtcbiIsICJpbXBvcnQgeyBnZXROb25jZSB9IGZyb20gJ2dldC1ub25jZSc7XG5mdW5jdGlvbiBtYWtlU3R5bGVUYWcoKSB7XG4gICAgaWYgKCFkb2N1bWVudClcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgdmFyIHRhZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgdGFnLnR5cGUgPSAndGV4dC9jc3MnO1xuICAgIHZhciBub25jZSA9IGdldE5vbmNlKCk7XG4gICAgaWYgKG5vbmNlKSB7XG4gICAgICAgIHRhZy5zZXRBdHRyaWJ1dGUoJ25vbmNlJywgbm9uY2UpO1xuICAgIH1cbiAgICByZXR1cm4gdGFnO1xufVxuZnVuY3Rpb24gaW5qZWN0U3R5bGVzKHRhZywgY3NzKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGlmICh0YWcuc3R5bGVTaGVldCkge1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHRhZy5zdHlsZVNoZWV0LmNzc1RleHQgPSBjc3M7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0YWcuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKSk7XG4gICAgfVxufVxuZnVuY3Rpb24gaW5zZXJ0U3R5bGVUYWcodGFnKSB7XG4gICAgdmFyIGhlYWQgPSBkb2N1bWVudC5oZWFkIHx8IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF07XG4gICAgaGVhZC5hcHBlbmRDaGlsZCh0YWcpO1xufVxuZXhwb3J0IHZhciBzdHlsZXNoZWV0U2luZ2xldG9uID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBjb3VudGVyID0gMDtcbiAgICB2YXIgc3R5bGVzaGVldCA9IG51bGw7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgYWRkOiBmdW5jdGlvbiAoc3R5bGUpIHtcbiAgICAgICAgICAgIGlmIChjb3VudGVyID09IDApIHtcbiAgICAgICAgICAgICAgICBpZiAoKHN0eWxlc2hlZXQgPSBtYWtlU3R5bGVUYWcoKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5qZWN0U3R5bGVzKHN0eWxlc2hlZXQsIHN0eWxlKTtcbiAgICAgICAgICAgICAgICAgICAgaW5zZXJ0U3R5bGVUYWcoc3R5bGVzaGVldCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY291bnRlcisrO1xuICAgICAgICB9LFxuICAgICAgICByZW1vdmU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvdW50ZXItLTtcbiAgICAgICAgICAgIGlmICghY291bnRlciAmJiBzdHlsZXNoZWV0KSB7XG4gICAgICAgICAgICAgICAgc3R5bGVzaGVldC5wYXJlbnROb2RlICYmIHN0eWxlc2hlZXQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzdHlsZXNoZWV0KTtcbiAgICAgICAgICAgICAgICBzdHlsZXNoZWV0ID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICB9O1xufTtcbiIsICJpbXBvcnQgeyBzdHlsZUhvb2tTaW5nbGV0b24gfSBmcm9tICcuL2hvb2snO1xuLyoqXG4gKiBjcmVhdGUgYSBDb21wb25lbnQgdG8gYWRkIHN0eWxlcyBvbiBkZW1hbmRcbiAqIC0gc3R5bGVzIGFyZSBhZGRlZCB3aGVuIGZpcnN0IGluc3RhbmNlIGlzIG1vdW50ZWRcbiAqIC0gc3R5bGVzIGFyZSByZW1vdmVkIHdoZW4gdGhlIGxhc3QgaW5zdGFuY2UgaXMgdW5tb3VudGVkXG4gKiAtIGNoYW5naW5nIHN0eWxlcyBpbiBydW50aW1lIGRvZXMgbm90aGluZyB1bmxlc3MgZHluYW1pYyBpcyBzZXQuIEJ1dCB3aXRoIG11bHRpcGxlIGNvbXBvbmVudHMgdGhhdCBjYW4gbGVhZCB0byB0aGUgdW5kZWZpbmVkIGJlaGF2aW9yXG4gKi9cbmV4cG9ydCB2YXIgc3R5bGVTaW5nbGV0b24gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHVzZVN0eWxlID0gc3R5bGVIb29rU2luZ2xldG9uKCk7XG4gICAgdmFyIFNoZWV0ID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgIHZhciBzdHlsZXMgPSBfYS5zdHlsZXMsIGR5bmFtaWMgPSBfYS5keW5hbWljO1xuICAgICAgICB1c2VTdHlsZShzdHlsZXMsIGR5bmFtaWMpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICAgIHJldHVybiBTaGVldDtcbn07XG4iLCAiZXhwb3J0IHZhciB6ZXJvR2FwID0ge1xuICAgIGxlZnQ6IDAsXG4gICAgdG9wOiAwLFxuICAgIHJpZ2h0OiAwLFxuICAgIGdhcDogMCxcbn07XG52YXIgcGFyc2UgPSBmdW5jdGlvbiAoeCkgeyByZXR1cm4gcGFyc2VJbnQoeCB8fCAnJywgMTApIHx8IDA7IH07XG52YXIgZ2V0T2Zmc2V0ID0gZnVuY3Rpb24gKGdhcE1vZGUpIHtcbiAgICB2YXIgY3MgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KTtcbiAgICB2YXIgbGVmdCA9IGNzW2dhcE1vZGUgPT09ICdwYWRkaW5nJyA/ICdwYWRkaW5nTGVmdCcgOiAnbWFyZ2luTGVmdCddO1xuICAgIHZhciB0b3AgPSBjc1tnYXBNb2RlID09PSAncGFkZGluZycgPyAncGFkZGluZ1RvcCcgOiAnbWFyZ2luVG9wJ107XG4gICAgdmFyIHJpZ2h0ID0gY3NbZ2FwTW9kZSA9PT0gJ3BhZGRpbmcnID8gJ3BhZGRpbmdSaWdodCcgOiAnbWFyZ2luUmlnaHQnXTtcbiAgICByZXR1cm4gW3BhcnNlKGxlZnQpLCBwYXJzZSh0b3ApLCBwYXJzZShyaWdodCldO1xufTtcbmV4cG9ydCB2YXIgZ2V0R2FwV2lkdGggPSBmdW5jdGlvbiAoZ2FwTW9kZSkge1xuICAgIGlmIChnYXBNb2RlID09PSB2b2lkIDApIHsgZ2FwTW9kZSA9ICdtYXJnaW4nOyB9XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiB6ZXJvR2FwO1xuICAgIH1cbiAgICB2YXIgb2Zmc2V0cyA9IGdldE9mZnNldChnYXBNb2RlKTtcbiAgICB2YXIgZG9jdW1lbnRXaWR0aCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aDtcbiAgICB2YXIgd2luZG93V2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgICByZXR1cm4ge1xuICAgICAgICBsZWZ0OiBvZmZzZXRzWzBdLFxuICAgICAgICB0b3A6IG9mZnNldHNbMV0sXG4gICAgICAgIHJpZ2h0OiBvZmZzZXRzWzJdLFxuICAgICAgICBnYXA6IE1hdGgubWF4KDAsIHdpbmRvd1dpZHRoIC0gZG9jdW1lbnRXaWR0aCArIG9mZnNldHNbMl0gLSBvZmZzZXRzWzBdKSxcbiAgICB9O1xufTtcbiIsICJ2YXIgcGFzc2l2ZVN1cHBvcnRlZCA9IGZhbHNlO1xuaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgdmFyIG9wdGlvbnMgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdwYXNzaXZlJywge1xuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcGFzc2l2ZVN1cHBvcnRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndGVzdCcsIG9wdGlvbnMsIG9wdGlvbnMpO1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCd0ZXN0Jywgb3B0aW9ucywgb3B0aW9ucyk7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgcGFzc2l2ZVN1cHBvcnRlZCA9IGZhbHNlO1xuICAgIH1cbn1cbmV4cG9ydCB2YXIgbm9uUGFzc2l2ZSA9IHBhc3NpdmVTdXBwb3J0ZWQgPyB7IHBhc3NpdmU6IGZhbHNlIH0gOiBmYWxzZTtcbiIsICJ2YXIgYWx3YXlzQ29udGFpbnNTY3JvbGwgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIC8vIHRleHRhcmVhIHdpbGwgYWx3YXlzIF9jb250YWluXyBzY3JvbGwgaW5zaWRlIHNlbGYuIEl0IG9ubHkgY2FuIGJlIGhpZGRlblxuICAgIHJldHVybiBub2RlLnRhZ05hbWUgPT09ICdURVhUQVJFQSc7XG59O1xudmFyIGVsZW1lbnRDYW5CZVNjcm9sbGVkID0gZnVuY3Rpb24gKG5vZGUsIG92ZXJmbG93KSB7XG4gICAgdmFyIHN0eWxlcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKG5vZGUpO1xuICAgIHJldHVybiAoXG4gICAgLy8gbm90LW5vdC1zY3JvbGxhYmxlXG4gICAgc3R5bGVzW292ZXJmbG93XSAhPT0gJ2hpZGRlbicgJiZcbiAgICAgICAgLy8gY29udGFpbnMgc2Nyb2xsIGluc2lkZSBzZWxmXG4gICAgICAgICEoc3R5bGVzLm92ZXJmbG93WSA9PT0gc3R5bGVzLm92ZXJmbG93WCAmJiAhYWx3YXlzQ29udGFpbnNTY3JvbGwobm9kZSkgJiYgc3R5bGVzW292ZXJmbG93XSA9PT0gJ3Zpc2libGUnKSk7XG59O1xudmFyIGVsZW1lbnRDb3VsZEJlVlNjcm9sbGVkID0gZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIGVsZW1lbnRDYW5CZVNjcm9sbGVkKG5vZGUsICdvdmVyZmxvd1knKTsgfTtcbnZhciBlbGVtZW50Q291bGRCZUhTY3JvbGxlZCA9IGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiBlbGVtZW50Q2FuQmVTY3JvbGxlZChub2RlLCAnb3ZlcmZsb3dYJyk7IH07XG5leHBvcnQgdmFyIGxvY2F0aW9uQ291bGRCZVNjcm9sbGVkID0gZnVuY3Rpb24gKGF4aXMsIG5vZGUpIHtcbiAgICB2YXIgb3duZXJEb2N1bWVudCA9IG5vZGUub3duZXJEb2N1bWVudDtcbiAgICB2YXIgY3VycmVudCA9IG5vZGU7XG4gICAgZG8ge1xuICAgICAgICAvLyBTa2lwIG92ZXIgc2hhZG93IHJvb3RcbiAgICAgICAgaWYgKHR5cGVvZiBTaGFkb3dSb290ICE9PSAndW5kZWZpbmVkJyAmJiBjdXJyZW50IGluc3RhbmNlb2YgU2hhZG93Um9vdCkge1xuICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQuaG9zdDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgaXNTY3JvbGxhYmxlID0gZWxlbWVudENvdWxkQmVTY3JvbGxlZChheGlzLCBjdXJyZW50KTtcbiAgICAgICAgaWYgKGlzU2Nyb2xsYWJsZSkge1xuICAgICAgICAgICAgdmFyIF9hID0gZ2V0U2Nyb2xsVmFyaWFibGVzKGF4aXMsIGN1cnJlbnQpLCBzID0gX2FbMV0sIGQgPSBfYVsyXTtcbiAgICAgICAgICAgIGlmIChzID4gZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnBhcmVudE5vZGU7XG4gICAgfSB3aGlsZSAoY3VycmVudCAmJiBjdXJyZW50ICE9PSBvd25lckRvY3VtZW50LmJvZHkpO1xuICAgIHJldHVybiBmYWxzZTtcbn07XG52YXIgZ2V0VlNjcm9sbFZhcmlhYmxlcyA9IGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciBzY3JvbGxUb3AgPSBfYS5zY3JvbGxUb3AsIHNjcm9sbEhlaWdodCA9IF9hLnNjcm9sbEhlaWdodCwgY2xpZW50SGVpZ2h0ID0gX2EuY2xpZW50SGVpZ2h0O1xuICAgIHJldHVybiBbXG4gICAgICAgIHNjcm9sbFRvcCxcbiAgICAgICAgc2Nyb2xsSGVpZ2h0LFxuICAgICAgICBjbGllbnRIZWlnaHQsXG4gICAgXTtcbn07XG52YXIgZ2V0SFNjcm9sbFZhcmlhYmxlcyA9IGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciBzY3JvbGxMZWZ0ID0gX2Euc2Nyb2xsTGVmdCwgc2Nyb2xsV2lkdGggPSBfYS5zY3JvbGxXaWR0aCwgY2xpZW50V2lkdGggPSBfYS5jbGllbnRXaWR0aDtcbiAgICByZXR1cm4gW1xuICAgICAgICBzY3JvbGxMZWZ0LFxuICAgICAgICBzY3JvbGxXaWR0aCxcbiAgICAgICAgY2xpZW50V2lkdGgsXG4gICAgXTtcbn07XG52YXIgZWxlbWVudENvdWxkQmVTY3JvbGxlZCA9IGZ1bmN0aW9uIChheGlzLCBub2RlKSB7XG4gICAgcmV0dXJuIGF4aXMgPT09ICd2JyA/IGVsZW1lbnRDb3VsZEJlVlNjcm9sbGVkKG5vZGUpIDogZWxlbWVudENvdWxkQmVIU2Nyb2xsZWQobm9kZSk7XG59O1xudmFyIGdldFNjcm9sbFZhcmlhYmxlcyA9IGZ1bmN0aW9uIChheGlzLCBub2RlKSB7XG4gICAgcmV0dXJuIGF4aXMgPT09ICd2JyA/IGdldFZTY3JvbGxWYXJpYWJsZXMobm9kZSkgOiBnZXRIU2Nyb2xsVmFyaWFibGVzKG5vZGUpO1xufTtcbnZhciBnZXREaXJlY3Rpb25GYWN0b3IgPSBmdW5jdGlvbiAoYXhpcywgZGlyZWN0aW9uKSB7XG4gICAgLyoqXG4gICAgICogSWYgdGhlIGVsZW1lbnQncyBkaXJlY3Rpb24gaXMgcnRsIChyaWdodC10by1sZWZ0KSwgdGhlbiBzY3JvbGxMZWZ0IGlzIDAgd2hlbiB0aGUgc2Nyb2xsYmFyIGlzIGF0IGl0cyByaWdodG1vc3QgcG9zaXRpb24sXG4gICAgICogYW5kIHRoZW4gaW5jcmVhc2luZ2x5IG5lZ2F0aXZlIGFzIHlvdSBzY3JvbGwgdG93YXJkcyB0aGUgZW5kIG9mIHRoZSBjb250ZW50LlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnQvc2Nyb2xsTGVmdFxuICAgICAqL1xuICAgIHJldHVybiBheGlzID09PSAnaCcgJiYgZGlyZWN0aW9uID09PSAncnRsJyA/IC0xIDogMTtcbn07XG5leHBvcnQgdmFyIGhhbmRsZVNjcm9sbCA9IGZ1bmN0aW9uIChheGlzLCBlbmRUYXJnZXQsIGV2ZW50LCBzb3VyY2VEZWx0YSwgbm9PdmVyc2Nyb2xsKSB7XG4gICAgdmFyIGRpcmVjdGlvbkZhY3RvciA9IGdldERpcmVjdGlvbkZhY3RvcihheGlzLCB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbmRUYXJnZXQpLmRpcmVjdGlvbik7XG4gICAgdmFyIGRlbHRhID0gZGlyZWN0aW9uRmFjdG9yICogc291cmNlRGVsdGE7XG4gICAgLy8gZmluZCBzY3JvbGxhYmxlIHRhcmdldFxuICAgIHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG4gICAgdmFyIHRhcmdldEluTG9jayA9IGVuZFRhcmdldC5jb250YWlucyh0YXJnZXQpO1xuICAgIHZhciBzaG91bGRDYW5jZWxTY3JvbGwgPSBmYWxzZTtcbiAgICB2YXIgaXNEZWx0YVBvc2l0aXZlID0gZGVsdGEgPiAwO1xuICAgIHZhciBhdmFpbGFibGVTY3JvbGwgPSAwO1xuICAgIHZhciBhdmFpbGFibGVTY3JvbGxUb3AgPSAwO1xuICAgIGRvIHtcbiAgICAgICAgdmFyIF9hID0gZ2V0U2Nyb2xsVmFyaWFibGVzKGF4aXMsIHRhcmdldCksIHBvc2l0aW9uID0gX2FbMF0sIHNjcm9sbF8xID0gX2FbMV0sIGNhcGFjaXR5ID0gX2FbMl07XG4gICAgICAgIHZhciBlbGVtZW50U2Nyb2xsID0gc2Nyb2xsXzEgLSBjYXBhY2l0eSAtIGRpcmVjdGlvbkZhY3RvciAqIHBvc2l0aW9uO1xuICAgICAgICBpZiAocG9zaXRpb24gfHwgZWxlbWVudFNjcm9sbCkge1xuICAgICAgICAgICAgaWYgKGVsZW1lbnRDb3VsZEJlU2Nyb2xsZWQoYXhpcywgdGFyZ2V0KSkge1xuICAgICAgICAgICAgICAgIGF2YWlsYWJsZVNjcm9sbCArPSBlbGVtZW50U2Nyb2xsO1xuICAgICAgICAgICAgICAgIGF2YWlsYWJsZVNjcm9sbFRvcCArPSBwb3NpdGlvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgU2hhZG93Um9vdCkge1xuICAgICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0Lmhvc3Q7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0YXJnZXQgPSB0YXJnZXQucGFyZW50Tm9kZTtcbiAgICAgICAgfVxuICAgIH0gd2hpbGUgKFxuICAgIC8vIHBvcnRhbGVkIGNvbnRlbnRcbiAgICAoIXRhcmdldEluTG9jayAmJiB0YXJnZXQgIT09IGRvY3VtZW50LmJvZHkpIHx8XG4gICAgICAgIC8vIHNlbGYgY29udGVudFxuICAgICAgICAodGFyZ2V0SW5Mb2NrICYmIChlbmRUYXJnZXQuY29udGFpbnModGFyZ2V0KSB8fCBlbmRUYXJnZXQgPT09IHRhcmdldCkpKTtcbiAgICAvLyBoYW5kbGUgZXBzaWxvbiBhcm91bmQgMCAobm9uIHN0YW5kYXJkIHpvb20gbGV2ZWxzKVxuICAgIGlmIChpc0RlbHRhUG9zaXRpdmUgJiZcbiAgICAgICAgKChub092ZXJzY3JvbGwgJiYgTWF0aC5hYnMoYXZhaWxhYmxlU2Nyb2xsKSA8IDEpIHx8ICghbm9PdmVyc2Nyb2xsICYmIGRlbHRhID4gYXZhaWxhYmxlU2Nyb2xsKSkpIHtcbiAgICAgICAgc2hvdWxkQ2FuY2VsU2Nyb2xsID0gdHJ1ZTtcbiAgICB9XG4gICAgZWxzZSBpZiAoIWlzRGVsdGFQb3NpdGl2ZSAmJlxuICAgICAgICAoKG5vT3ZlcnNjcm9sbCAmJiBNYXRoLmFicyhhdmFpbGFibGVTY3JvbGxUb3ApIDwgMSkgfHwgKCFub092ZXJzY3JvbGwgJiYgLWRlbHRhID4gYXZhaWxhYmxlU2Nyb2xsVG9wKSkpIHtcbiAgICAgICAgc2hvdWxkQ2FuY2VsU2Nyb2xsID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHNob3VsZENhbmNlbFNjcm9sbDtcbn07XG4iLCAiaW1wb3J0IHsgZXhwb3J0U2lkZWNhciB9IGZyb20gJ3VzZS1zaWRlY2FyJztcbmltcG9ydCB7IFJlbW92ZVNjcm9sbFNpZGVDYXIgfSBmcm9tICcuL1NpZGVFZmZlY3QnO1xuaW1wb3J0IHsgZWZmZWN0Q2FyIH0gZnJvbSAnLi9tZWRpdW0nO1xuZXhwb3J0IGRlZmF1bHQgZXhwb3J0U2lkZWNhcihlZmZlY3RDYXIsIFJlbW92ZVNjcm9sbFNpZGVDYXIpO1xuIiwgImltcG9ydCB7IF9fc3ByZWFkQXJyYXlzIH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBoaWRlT3RoZXJzIH0gZnJvbSAnYXJpYS1oaWRkZW4nO1xuaW1wb3J0IHsgSW50ZXJhY3Rpdml0eURpc2FibGVyIH0gZnJvbSAnLi9JbnRlcmFjdGl2aXR5RGlzYWJsZXInO1xuaW1wb3J0IHsgZm9jdXNIaWRkZW5NYXJrZXIgfSBmcm9tICcuL21lZGl1bSc7XG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG52YXIgZXh0cmFjdFJlZiA9IGZ1bmN0aW9uIChyZWYpIHtcbiAgICByZXR1cm4gJ2N1cnJlbnQnIGluIHJlZiA/IHJlZi5jdXJyZW50IDogcmVmO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBFZmZlY3QoX2EpIHtcbiAgICB2YXIgc2V0TG9ja1Byb3BzID0gX2Euc2V0TG9ja1Byb3BzLCBvbkVzY2FwZUtleSA9IF9hLm9uRXNjYXBlS2V5LCBvbkNsaWNrT3V0c2lkZSA9IF9hLm9uQ2xpY2tPdXRzaWRlLCBzaGFyZHMgPSBfYS5zaGFyZHMsIG9uQWN0aXZhdGlvbiA9IF9hLm9uQWN0aXZhdGlvbiwgb25EZWFjdGl2YXRpb24gPSBfYS5vbkRlYWN0aXZhdGlvbiwgbm9Jc29sYXRpb24gPSBfYS5ub0lzb2xhdGlvbjtcbiAgICB2YXIgX2IgPSB1c2VTdGF0ZSh1bmRlZmluZWQpLCBhY3RpdmVOb2RlID0gX2JbMF0sIHNldEFjdGl2ZU5vZGUgPSBfYlsxXTtcbiAgICB2YXIgbGFzdEV2ZW50VGFyZ2V0ID0gdXNlUmVmKG51bGwpO1xuICAgIHZhciBtb3VzZVRvdWNoZXMgPSB1c2VSZWYoMCk7XG4gICAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG9uS2V5RG93biA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgaWYgKCFldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKChldmVudC5jb2RlID09PSAnRXNjYXBlJyB8fFxuICAgICAgICAgICAgICAgICAgICBldmVudC5rZXkgPT09ICdFc2NhcGUnIHx8XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LmtleUNvZGUgPT09IDI3KSAmJlxuICAgICAgICAgICAgICAgICAgICBvbkVzY2FwZUtleSkge1xuICAgICAgICAgICAgICAgICAgICBvbkVzY2FwZUtleShldmVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB2YXIgb25Nb3VzZURvd24gPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkIHx8XG4gICAgICAgICAgICAgICAgZXZlbnQudGFyZ2V0ID09PSBsYXN0RXZlbnRUYXJnZXQuY3VycmVudCB8fFxuICAgICAgICAgICAgICAgIChldmVudCBpbnN0YW5jZW9mIE1vdXNlRXZlbnQgJiYgZXZlbnQuYnV0dG9uICE9PSAwKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzaGFyZHMgJiZcbiAgICAgICAgICAgICAgICBzaGFyZHNcbiAgICAgICAgICAgICAgICAgICAgLm1hcChleHRyYWN0UmVmKVxuICAgICAgICAgICAgICAgICAgICAuc29tZShmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG5vZGUgJiYgbm9kZS5jb250YWlucyhldmVudC50YXJnZXQpKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSA9PT0gZXZlbnQudGFyZ2V0O1xuICAgICAgICAgICAgICAgIH0pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9uQ2xpY2tPdXRzaWRlKSB7XG4gICAgICAgICAgICAgICAgb25DbGlja091dHNpZGUoZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB2YXIgb25Ub3VjaFN0YXJ0ID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICBvbk1vdXNlRG93bihldmVudCk7XG4gICAgICAgICAgICBtb3VzZVRvdWNoZXMuY3VycmVudCA9IGV2ZW50LnRvdWNoZXMubGVuZ3RoO1xuICAgICAgICB9O1xuICAgICAgICB2YXIgb25Ub3VjaEVuZCA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgbW91c2VUb3VjaGVzLmN1cnJlbnQgPSBldmVudC50b3VjaGVzLmxlbmd0aDtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGFjdGl2ZU5vZGUpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBvbktleURvd24pO1xuICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgb25Nb3VzZURvd24pO1xuICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIG9uVG91Y2hTdGFydCk7XG4gICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIG9uVG91Y2hFbmQpO1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgb25LZXlEb3duKTtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBvbk1vdXNlRG93bik7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIG9uVG91Y2hTdGFydCk7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCBvblRvdWNoRW5kKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9LCBbYWN0aXZlTm9kZSwgb25DbGlja091dHNpZGUsIG9uRXNjYXBlS2V5XSk7XG4gICAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKGFjdGl2ZU5vZGUpIHtcbiAgICAgICAgICAgIGlmIChvbkFjdGl2YXRpb24pIHtcbiAgICAgICAgICAgICAgICBvbkFjdGl2YXRpb24oYWN0aXZlTm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChvbkRlYWN0aXZhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBvbkRlYWN0aXZhdGlvbigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9LCBbISFhY3RpdmVOb2RlXSk7XG4gICAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF91bmRvID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gbnVsbDsgfTtcbiAgICAgICAgdmFyIHVubW91bnRlZCA9IGZhbHNlO1xuICAgICAgICB2YXIgb25Ob2RlQWN0aXZhdGlvbiA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgICAgICBpZiAoIW5vSXNvbGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgX3VuZG8gPSBoaWRlT3RoZXJzKF9fc3ByZWFkQXJyYXlzKFtub2RlXSwgKHNoYXJkcyB8fCBbXSkubWFwKGV4dHJhY3RSZWYpKSwgZG9jdW1lbnQuYm9keSwgZm9jdXNIaWRkZW5NYXJrZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2V0QWN0aXZlTm9kZShmdW5jdGlvbiAoKSB7IHJldHVybiBub2RlOyB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIG9uTm9kZURlYWN0aXZhdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF91bmRvKCk7XG4gICAgICAgICAgICBpZiAoIXVubW91bnRlZCkge1xuICAgICAgICAgICAgICAgIHNldEFjdGl2ZU5vZGUobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHNldExvY2tQcm9wcyh7XG4gICAgICAgICAgICBvbk1vdXNlRG93bjogZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICBsYXN0RXZlbnRUYXJnZXQuY3VycmVudCA9IGUudGFyZ2V0O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uVG91Y2hTdGFydDogZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICBsYXN0RXZlbnRUYXJnZXQuY3VycmVudCA9IGUudGFyZ2V0O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uQWN0aXZhdGlvbjogb25Ob2RlQWN0aXZhdGlvbixcbiAgICAgICAgICAgIG9uRGVhY3RpdmF0aW9uOiBvbk5vZGVEZWFjdGl2YXRpb25cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB1bm1vdW50ZWQgPSB0cnVlO1xuICAgICAgICAgICAgc2V0TG9ja1Byb3BzKGZhbHNlKTtcbiAgICAgICAgfTtcbiAgICB9LCBbXSk7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoSW50ZXJhY3Rpdml0eURpc2FibGVyLCBudWxsKTtcbn1cbiIsICJ2YXIgZ2V0RGVmYXVsdFBhcmVudCA9IGZ1bmN0aW9uIChvcmlnaW5hbFRhcmdldCkge1xuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB2YXIgc2FtcGxlVGFyZ2V0ID0gQXJyYXkuaXNBcnJheShvcmlnaW5hbFRhcmdldCkgPyBvcmlnaW5hbFRhcmdldFswXSA6IG9yaWdpbmFsVGFyZ2V0O1xuICAgIHJldHVybiBzYW1wbGVUYXJnZXQub3duZXJEb2N1bWVudC5ib2R5O1xufTtcbnZhciBjb3VudGVyTWFwID0gbmV3IFdlYWtNYXAoKTtcbnZhciB1bmNvbnRyb2xsZWROb2RlcyA9IG5ldyBXZWFrTWFwKCk7XG52YXIgbWFya2VyTWFwID0ge307XG52YXIgbG9ja0NvdW50ID0gMDtcbnZhciB1bndyYXBIb3N0ID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZSAmJiAobm9kZS5ob3N0IHx8IHVud3JhcEhvc3Qobm9kZS5wYXJlbnROb2RlKSk7XG59O1xudmFyIGNvcnJlY3RUYXJnZXRzID0gZnVuY3Rpb24gKHBhcmVudCwgdGFyZ2V0cykge1xuICAgIHJldHVybiB0YXJnZXRzXG4gICAgICAgIC5tYXAoZnVuY3Rpb24gKHRhcmdldCkge1xuICAgICAgICBpZiAocGFyZW50LmNvbnRhaW5zKHRhcmdldCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNvcnJlY3RlZFRhcmdldCA9IHVud3JhcEhvc3QodGFyZ2V0KTtcbiAgICAgICAgaWYgKGNvcnJlY3RlZFRhcmdldCAmJiBwYXJlbnQuY29udGFpbnMoY29ycmVjdGVkVGFyZ2V0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvcnJlY3RlZFRhcmdldDtcbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLmVycm9yKCdhcmlhLWhpZGRlbicsIHRhcmdldCwgJ2luIG5vdCBjb250YWluZWQgaW5zaWRlJywgcGFyZW50LCAnLiBEb2luZyBub3RoaW5nJyk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH0pXG4gICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIEJvb2xlYW4oeCk7IH0pO1xufTtcbi8qKlxuICogTWFya3MgZXZlcnl0aGluZyBleGNlcHQgZ2l2ZW4gbm9kZShvciBub2RlcykgYXMgYXJpYS1oaWRkZW5cbiAqIEBwYXJhbSB7RWxlbWVudCB8IEVsZW1lbnRbXX0gb3JpZ2luYWxUYXJnZXQgLSBlbGVtZW50cyB0byBrZWVwIG9uIHRoZSBwYWdlXG4gKiBAcGFyYW0gW3BhcmVudE5vZGVdIC0gdG9wIGVsZW1lbnQsIGRlZmF1bHRzIHRvIGRvY3VtZW50LmJvZHlcbiAqIEBwYXJhbSB7U3RyaW5nfSBbbWFya2VyTmFtZV0gLSBhIHNwZWNpYWwgYXR0cmlidXRlIHRvIG1hcmsgZXZlcnkgbm9kZVxuICogQHBhcmFtIHtTdHJpbmd9IFtjb250cm9sQXR0cmlidXRlXSAtIGh0bWwgQXR0cmlidXRlIHRvIGNvbnRyb2xcbiAqIEByZXR1cm4ge1VuZG99IHVuZG8gY29tbWFuZFxuICovXG52YXIgYXBwbHlBdHRyaWJ1dGVUb090aGVycyA9IGZ1bmN0aW9uIChvcmlnaW5hbFRhcmdldCwgcGFyZW50Tm9kZSwgbWFya2VyTmFtZSwgY29udHJvbEF0dHJpYnV0ZSkge1xuICAgIHZhciB0YXJnZXRzID0gY29ycmVjdFRhcmdldHMocGFyZW50Tm9kZSwgQXJyYXkuaXNBcnJheShvcmlnaW5hbFRhcmdldCkgPyBvcmlnaW5hbFRhcmdldCA6IFtvcmlnaW5hbFRhcmdldF0pO1xuICAgIGlmICghbWFya2VyTWFwW21hcmtlck5hbWVdKSB7XG4gICAgICAgIG1hcmtlck1hcFttYXJrZXJOYW1lXSA9IG5ldyBXZWFrTWFwKCk7XG4gICAgfVxuICAgIHZhciBtYXJrZXJDb3VudGVyID0gbWFya2VyTWFwW21hcmtlck5hbWVdO1xuICAgIHZhciBoaWRkZW5Ob2RlcyA9IFtdO1xuICAgIHZhciBlbGVtZW50c1RvS2VlcCA9IG5ldyBTZXQoKTtcbiAgICB2YXIgZWxlbWVudHNUb1N0b3AgPSBuZXcgU2V0KHRhcmdldHMpO1xuICAgIHZhciBrZWVwID0gZnVuY3Rpb24gKGVsKSB7XG4gICAgICAgIGlmICghZWwgfHwgZWxlbWVudHNUb0tlZXAuaGFzKGVsKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGVsZW1lbnRzVG9LZWVwLmFkZChlbCk7XG4gICAgICAgIGtlZXAoZWwucGFyZW50Tm9kZSk7XG4gICAgfTtcbiAgICB0YXJnZXRzLmZvckVhY2goa2VlcCk7XG4gICAgdmFyIGRlZXAgPSBmdW5jdGlvbiAocGFyZW50KSB7XG4gICAgICAgIGlmICghcGFyZW50IHx8IGVsZW1lbnRzVG9TdG9wLmhhcyhwYXJlbnQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChwYXJlbnQuY2hpbGRyZW4sIGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgICAgICBpZiAoZWxlbWVudHNUb0tlZXAuaGFzKG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgZGVlcChub2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhdHRyID0gbm9kZS5nZXRBdHRyaWJ1dGUoY29udHJvbEF0dHJpYnV0ZSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhbHJlYWR5SGlkZGVuID0gYXR0ciAhPT0gbnVsbCAmJiBhdHRyICE9PSAnZmFsc2UnO1xuICAgICAgICAgICAgICAgICAgICB2YXIgY291bnRlclZhbHVlID0gKGNvdW50ZXJNYXAuZ2V0KG5vZGUpIHx8IDApICsgMTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1hcmtlclZhbHVlID0gKG1hcmtlckNvdW50ZXIuZ2V0KG5vZGUpIHx8IDApICsgMTtcbiAgICAgICAgICAgICAgICAgICAgY291bnRlck1hcC5zZXQobm9kZSwgY291bnRlclZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ291bnRlci5zZXQobm9kZSwgbWFya2VyVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBoaWRkZW5Ob2Rlcy5wdXNoKG5vZGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY291bnRlclZhbHVlID09PSAxICYmIGFscmVhZHlIaWRkZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuY29udHJvbGxlZE5vZGVzLnNldChub2RlLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAobWFya2VyVmFsdWUgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKG1hcmtlck5hbWUsICd0cnVlJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFhbHJlYWR5SGlkZGVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShjb250cm9sQXR0cmlidXRlLCAndHJ1ZScpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2FyaWEtaGlkZGVuOiBjYW5ub3Qgb3BlcmF0ZSBvbiAnLCBub2RlLCBlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgZGVlcChwYXJlbnROb2RlKTtcbiAgICBlbGVtZW50c1RvS2VlcC5jbGVhcigpO1xuICAgIGxvY2tDb3VudCsrO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGhpZGRlbk5vZGVzLmZvckVhY2goZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgICAgIHZhciBjb3VudGVyVmFsdWUgPSBjb3VudGVyTWFwLmdldChub2RlKSAtIDE7XG4gICAgICAgICAgICB2YXIgbWFya2VyVmFsdWUgPSBtYXJrZXJDb3VudGVyLmdldChub2RlKSAtIDE7XG4gICAgICAgICAgICBjb3VudGVyTWFwLnNldChub2RlLCBjb3VudGVyVmFsdWUpO1xuICAgICAgICAgICAgbWFya2VyQ291bnRlci5zZXQobm9kZSwgbWFya2VyVmFsdWUpO1xuICAgICAgICAgICAgaWYgKCFjb3VudGVyVmFsdWUpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXVuY29udHJvbGxlZE5vZGVzLmhhcyhub2RlKSkge1xuICAgICAgICAgICAgICAgICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZShjb250cm9sQXR0cmlidXRlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdW5jb250cm9sbGVkTm9kZXMuZGVsZXRlKG5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFtYXJrZXJWYWx1ZSkge1xuICAgICAgICAgICAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKG1hcmtlck5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbG9ja0NvdW50LS07XG4gICAgICAgIGlmICghbG9ja0NvdW50KSB7XG4gICAgICAgICAgICAvLyBjbGVhclxuICAgICAgICAgICAgY291bnRlck1hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgICAgICAgICBjb3VudGVyTWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICAgICAgICAgIHVuY29udHJvbGxlZE5vZGVzID0gbmV3IFdlYWtNYXAoKTtcbiAgICAgICAgICAgIG1hcmtlck1hcCA9IHt9O1xuICAgICAgICB9XG4gICAgfTtcbn07XG4vKipcbiAqIE1hcmtzIGV2ZXJ5dGhpbmcgZXhjZXB0IGdpdmVuIG5vZGUob3Igbm9kZXMpIGFzIGFyaWEtaGlkZGVuXG4gKiBAcGFyYW0ge0VsZW1lbnQgfCBFbGVtZW50W119IG9yaWdpbmFsVGFyZ2V0IC0gZWxlbWVudHMgdG8ga2VlcCBvbiB0aGUgcGFnZVxuICogQHBhcmFtIFtwYXJlbnROb2RlXSAtIHRvcCBlbGVtZW50LCBkZWZhdWx0cyB0byBkb2N1bWVudC5ib2R5XG4gKiBAcGFyYW0ge1N0cmluZ30gW21hcmtlck5hbWVdIC0gYSBzcGVjaWFsIGF0dHJpYnV0ZSB0byBtYXJrIGV2ZXJ5IG5vZGVcbiAqIEByZXR1cm4ge1VuZG99IHVuZG8gY29tbWFuZFxuICovXG5leHBvcnQgdmFyIGhpZGVPdGhlcnMgPSBmdW5jdGlvbiAob3JpZ2luYWxUYXJnZXQsIHBhcmVudE5vZGUsIG1hcmtlck5hbWUpIHtcbiAgICBpZiAobWFya2VyTmFtZSA9PT0gdm9pZCAwKSB7IG1hcmtlck5hbWUgPSAnZGF0YS1hcmlhLWhpZGRlbic7IH1cbiAgICB2YXIgdGFyZ2V0cyA9IEFycmF5LmZyb20oQXJyYXkuaXNBcnJheShvcmlnaW5hbFRhcmdldCkgPyBvcmlnaW5hbFRhcmdldCA6IFtvcmlnaW5hbFRhcmdldF0pO1xuICAgIHZhciBhY3RpdmVQYXJlbnROb2RlID0gcGFyZW50Tm9kZSB8fCBnZXREZWZhdWx0UGFyZW50KG9yaWdpbmFsVGFyZ2V0KTtcbiAgICBpZiAoIWFjdGl2ZVBhcmVudE5vZGUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG51bGw7IH07XG4gICAgfVxuICAgIC8vIHdlIHNob3VsZCBub3QgaGlkZSBhcmlhTGl2ZSBlbGVtZW50cyAtIGh0dHBzOi8vZ2l0aHViLmNvbS90aGVLYXNoZXkvYXJpYS1oaWRkZW4vaXNzdWVzLzEwXG4gICAgdGFyZ2V0cy5wdXNoLmFwcGx5KHRhcmdldHMsIEFycmF5LmZyb20oYWN0aXZlUGFyZW50Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKCdbYXJpYS1saXZlXScpKSk7XG4gICAgcmV0dXJuIGFwcGx5QXR0cmlidXRlVG9PdGhlcnModGFyZ2V0cywgYWN0aXZlUGFyZW50Tm9kZSwgbWFya2VyTmFtZSwgJ2FyaWEtaGlkZGVuJyk7XG59O1xuLyoqXG4gKiBNYXJrcyBldmVyeXRoaW5nIGV4Y2VwdCBnaXZlbiBub2RlKG9yIG5vZGVzKSBhcyBpbmVydFxuICogQHBhcmFtIHtFbGVtZW50IHwgRWxlbWVudFtdfSBvcmlnaW5hbFRhcmdldCAtIGVsZW1lbnRzIHRvIGtlZXAgb24gdGhlIHBhZ2VcbiAqIEBwYXJhbSBbcGFyZW50Tm9kZV0gLSB0b3AgZWxlbWVudCwgZGVmYXVsdHMgdG8gZG9jdW1lbnQuYm9keVxuICogQHBhcmFtIHtTdHJpbmd9IFttYXJrZXJOYW1lXSAtIGEgc3BlY2lhbCBhdHRyaWJ1dGUgdG8gbWFyayBldmVyeSBub2RlXG4gKiBAcmV0dXJuIHtVbmRvfSB1bmRvIGNvbW1hbmRcbiAqL1xuZXhwb3J0IHZhciBpbmVydE90aGVycyA9IGZ1bmN0aW9uIChvcmlnaW5hbFRhcmdldCwgcGFyZW50Tm9kZSwgbWFya2VyTmFtZSkge1xuICAgIGlmIChtYXJrZXJOYW1lID09PSB2b2lkIDApIHsgbWFya2VyTmFtZSA9ICdkYXRhLWluZXJ0LWVkJzsgfVxuICAgIHZhciBhY3RpdmVQYXJlbnROb2RlID0gcGFyZW50Tm9kZSB8fCBnZXREZWZhdWx0UGFyZW50KG9yaWdpbmFsVGFyZ2V0KTtcbiAgICBpZiAoIWFjdGl2ZVBhcmVudE5vZGUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG51bGw7IH07XG4gICAgfVxuICAgIHJldHVybiBhcHBseUF0dHJpYnV0ZVRvT3RoZXJzKG9yaWdpbmFsVGFyZ2V0LCBhY3RpdmVQYXJlbnROb2RlLCBtYXJrZXJOYW1lLCAnaW5lcnQnKTtcbn07XG4vKipcbiAqIEByZXR1cm5zIGlmIGN1cnJlbnQgYnJvd3NlciBzdXBwb3J0cyBpbmVydFxuICovXG5leHBvcnQgdmFyIHN1cHBvcnRzSW5lcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBIVE1MRWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgSFRNTEVsZW1lbnQucHJvdG90eXBlLmhhc093blByb3BlcnR5KCdpbmVydCcpO1xufTtcbi8qKlxuICogQXV0b21hdGljIGZ1bmN0aW9uIHRvIFwic3VwcHJlc3NcIiBET00gZWxlbWVudHMgLSBfaGlkZV8gb3IgX2luZXJ0XyBpbiB0aGUgYmVzdCBwb3NzaWJsZSB3YXlcbiAqIEBwYXJhbSB7RWxlbWVudCB8IEVsZW1lbnRbXX0gb3JpZ2luYWxUYXJnZXQgLSBlbGVtZW50cyB0byBrZWVwIG9uIHRoZSBwYWdlXG4gKiBAcGFyYW0gW3BhcmVudE5vZGVdIC0gdG9wIGVsZW1lbnQsIGRlZmF1bHRzIHRvIGRvY3VtZW50LmJvZHlcbiAqIEBwYXJhbSB7U3RyaW5nfSBbbWFya2VyTmFtZV0gLSBhIHNwZWNpYWwgYXR0cmlidXRlIHRvIG1hcmsgZXZlcnkgbm9kZVxuICogQHJldHVybiB7VW5kb30gdW5kbyBjb21tYW5kXG4gKi9cbmV4cG9ydCB2YXIgc3VwcHJlc3NPdGhlcnMgPSBmdW5jdGlvbiAob3JpZ2luYWxUYXJnZXQsIHBhcmVudE5vZGUsIG1hcmtlck5hbWUpIHtcbiAgICBpZiAobWFya2VyTmFtZSA9PT0gdm9pZCAwKSB7IG1hcmtlck5hbWUgPSAnZGF0YS1zdXBwcmVzc2VkJzsgfVxuICAgIHJldHVybiAoc3VwcG9ydHNJbmVydCgpID8gaW5lcnRPdGhlcnMgOiBoaWRlT3RoZXJzKShvcmlnaW5hbFRhcmdldCwgcGFyZW50Tm9kZSwgbWFya2VyTmFtZSk7XG59O1xuIiwgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHN0eWxlU2luZ2xldG9uIH0gZnJvbSAncmVhY3Qtc3R5bGUtc2luZ2xldG9uJztcbmltcG9ydCB7IGZvY3VzSGlkZGVuTWFya2VyIH0gZnJvbSAnLi9tZWRpdW0nO1xudmFyIFN0eWxlID0gc3R5bGVTaW5nbGV0b24oKTtcbnZhciBzdHlsZXMgPSBcIlxcbiBbXCIgKyBmb2N1c0hpZGRlbk1hcmtlciArIFwiXSB7XFxuICAgcG9pbnRlci1ldmVudHM6IG5vbmUgIWltcG9ydGFudDtcXG4gfVxcblwiO1xuZXhwb3J0IHZhciBJbnRlcmFjdGl2aXR5RGlzYWJsZXIgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN0eWxlLCB7IHN0eWxlczogc3R5bGVzIH0pOyB9O1xuIiwgImltcG9ydCB7IGV4cG9ydFNpZGVjYXIgfSBmcm9tICd1c2Utc2lkZWNhcic7XG5pbXBvcnQgJ3JlYWN0LWZvY3VzLWxvY2svc2lkZWNhcic7XG5pbXBvcnQgJ3JlYWN0LXJlbW92ZS1zY3JvbGwvc2lkZWNhcic7XG5pbXBvcnQgeyBFZmZlY3QgfSBmcm9tICcuL0VmZmVjdCc7XG5pbXBvcnQgeyBlZmZlY3RDYXIgfSBmcm9tICcuL21lZGl1bSc7XG5leHBvcnQgZGVmYXVsdCBleHBvcnRTaWRlY2FyKGVmZmVjdENhciwgRWZmZWN0KTtcbiIsICJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmltcG9ydCB7IGNzcyBhcyBfY3NzIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgX2V4Y2x1ZGVkID0gW1wiYW5jaG9yQ2xhc3NOYW1lXCIsIFwiYW5jaG9yUG9zaXRpb25cIiwgXCJidXR0b25cIiwgXCJidXR0b25SZWZcIiwgXCJpbnNlcnRcIiwgXCJpc09wZW5cIiwgXCJvd25Gb2N1c1wiLCBcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiY2xvc2VQb3BvdmVyXCIsIFwicGFuZWxDbGFzc05hbWVcIiwgXCJwYW5lbFBhZGRpbmdTaXplXCIsIFwicGFuZWxQcm9wc1wiLCBcInBhbmVsUmVmXCIsIFwicGFuZWxTdHlsZVwiLCBcInBvcG92ZXJTY3JlZW5SZWFkZXJUZXh0XCIsIFwicG9wb3ZlclJlZlwiLCBcImhhc0Fycm93XCIsIFwiYXJyb3dDaGlsZHJlblwiLCBcInJlcG9zaXRpb25PblNjcm9sbFwiLCBcInpJbmRleFwiLCBcImF0dGFjaFRvQW5jaG9yXCIsIFwiZGlzcGxheVwiLCBcIm9mZnNldFwiLCBcIm9uVHJhcERlYWN0aXZhdGlvblwiLCBcImJ1ZmZlclwiLCBcImFyaWEtbGFiZWxcIiwgXCJhcmlhLWxhYmVsbGVkYnlcIiwgXCJjb250YWluZXJcIiwgXCJmb2N1c1RyYXBQcm9wc1wiLCBcImluaXRpYWxGb2N1c1wiLCBcInRhYkluZGV4XCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHsgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkoaXRlcikgeyBpZiAodHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBpdGVyW1N5bWJvbC5pdGVyYXRvcl0gIT0gbnVsbCB8fCBpdGVyW1wiQEBpdGVyYXRvclwiXSAhPSBudWxsKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShhcnIpOyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7IHZhciBfaSA9IGFyciA9PSBudWxsID8gbnVsbCA6IHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgYXJyW1N5bWJvbC5pdGVyYXRvcl0gfHwgYXJyW1wiQEBpdGVyYXRvclwiXTsgaWYgKF9pID09IG51bGwpIHJldHVybjsgdmFyIF9hcnIgPSBbXTsgdmFyIF9uID0gdHJ1ZTsgdmFyIF9kID0gZmFsc2U7IHZhciBfcywgX2U7IHRyeSB7IGZvciAoX2kgPSBfaS5jYWxsKGFycik7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHsgX2Fyci5wdXNoKF9zLnZhbHVlKTsgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOyB9IH0gY2F0Y2ggKGVycikgeyBfZCA9IHRydWU7IF9lID0gZXJyOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7IH0gZmluYWxseSB7IGlmIChfZCkgdGhyb3cgX2U7IH0gfSByZXR1cm4gX2FycjsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGZvY3VzYWJsZSB9IGZyb20gJ3RhYmJhYmxlJztcbmltcG9ydCB7IEV1aUZvY3VzVHJhcCB9IGZyb20gJy4uL2ZvY3VzX3RyYXAnO1xuaW1wb3J0IHsgY2FzY2FkaW5nTWVudUtleXMsIGdldFRyYW5zaXRpb25UaW1pbmdzLCBnZXRXYWl0RHVyYXRpb24sIHBlcmZvcm1PbkZyYW1lLCBodG1sSWRHZW5lcmF0b3IgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFdWlTY3JlZW5SZWFkZXJPbmx5IH0gZnJvbSAnLi4vYWNjZXNzaWJpbGl0eSc7XG5pbXBvcnQgeyBFdWlQb3J0YWwgfSBmcm9tICcuLi9wb3J0YWwnO1xuaW1wb3J0IHsgRXVpTXV0YXRpb25PYnNlcnZlciB9IGZyb20gJy4uL29ic2VydmVyL211dGF0aW9uX29ic2VydmVyJztcbmltcG9ydCB7IGZpbmRQb3BvdmVyUG9zaXRpb24sIGdldEVsZW1lbnRaSW5kZXggfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wb3BvdmVyJztcbmltcG9ydCB7IEV1aUkxOG4gfSBmcm9tICcuLi9pMThuJztcbmltcG9ydCB7IEV1aU91dHNpZGVDbGlja0RldGVjdG9yIH0gZnJvbSAnLi4vb3V0c2lkZV9jbGlja19kZXRlY3Rvcic7XG5pbXBvcnQgeyBFdWlQb3BvdmVyQXJyb3cgfSBmcm9tICcuL3BvcG92ZXJfYXJyb3cnO1xuaW1wb3J0IHsgZXVpUG9wb3ZlclN0eWxlcyB9IGZyb20gJy4vcG9wb3Zlci5zdHlsZXMnO1xuaW1wb3J0IHsgRXVpUG9wb3ZlclBhbmVsIH0gZnJvbSAnLi9wb3BvdmVyX3BhbmVsJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIHBvcG92ZXJBbmNob3JQb3NpdGlvbiA9IFsndXBDZW50ZXInLCAndXBMZWZ0JywgJ3VwUmlnaHQnLCAnZG93bkNlbnRlcicsICdkb3duTGVmdCcsICdkb3duUmlnaHQnLCAnbGVmdENlbnRlcicsICdsZWZ0VXAnLCAnbGVmdERvd24nLCAncmlnaHRDZW50ZXInLCAncmlnaHRVcCcsICdyaWdodERvd24nXTtcbnZhciBhbmNob3JQb3NpdGlvblRvUG9wb3ZlclBvc2l0aW9uTWFwID0ge1xuICB1cDogJ3RvcCcsXG4gIHJpZ2h0OiAncmlnaHQnLFxuICBkb3duOiAnYm90dG9tJyxcbiAgbGVmdDogJ2xlZnQnXG59O1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBvcG92ZXJQb3NpdGlvbkZyb21BbmNob3JQb3NpdGlvbihhbmNob3JQb3NpdGlvbikge1xuICAvLyBtYXBzIHRoZSBhbmNob3IgcG9zaXRpb24gdG8gdGhlIG1hdGNoaW5nIHBvcG92ZXIgcG9zaXRpb25cbiAgLy8gZS5nLiBcInVwTGVmdFwiIC0+IFwidG9wXCIsIFwiZG93blJpZ2h0XCIgLT4gXCJib3R0b21cIlxuICAvLyBleHRyYWN0IHRoZSBmaXJzdCBwb3NpdGlvbmFsIHdvcmQgZnJvbSBhbmNob3JQb3NpdGlvbjpcbiAgLy8gc3RhcnRzIGF0IHRoZSBiZWdpbm5pbmcgKFwiIF4gXCIpIG9mIGFuY2hvclBvc2l0aW9uIGFuZFxuICAvLyBjYXB0dXJlcyBhbGwgb2YgdGhlIGNoYXJhY3RlcnMgKFwiICguKj8pIFwiKSB1bnRpbCB0aGVcbiAgLy8gZmlyc3QgY2FwaXRhbCBsZXR0ZXIgKFwiIFtBLVpdIFwiKSBpcyBlbmNvdW50ZXJlZFxuICB2YXIgX3JlZiA9IGFuY2hvclBvc2l0aW9uLm1hdGNoKC9eKC4qPylbQS1aXS8pLFxuICAgICAgX3JlZjIgPSBfc2xpY2VkVG9BcnJheShfcmVmLCAyKSxcbiAgICAgIHByaW1hcnlQb3NpdGlvbiA9IF9yZWYyWzFdO1xuXG4gIHJldHVybiBhbmNob3JQb3NpdGlvblRvUG9wb3ZlclBvc2l0aW9uTWFwW3ByaW1hcnlQb3NpdGlvbl07XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0UG9wb3ZlckFsaWduRnJvbUFuY2hvclBvc2l0aW9uKGFuY2hvclBvc2l0aW9uKSB7XG4gIC8vIG1hcHMgdGhlIGdyYXZpdHkgdG8gdGhlIG1hdGNoaW5nIHBvcG92ZXIgcG9zaXRpb25cbiAgLy8gZS5nLiBcInVwTGVmdFwiIC0+IFwibGVmdFwiLCBcInJpZ2h0RG93blwiIC0+IFwiYm90dG9tXCJcbiAgLy8gZXh0cmFjdCB0aGUgc2Vjb25kIHBvc2l0aW9uYWwgd29yZCBmcm9tIGFuY2hvclBvc2l0aW9uOlxuICAvLyBzdGFydHMgYSBjYXB0dXJlIGdyb3VwIGF0IHRoZSBmaXJzdCBjYXBpdGFsIGxldHRlclxuICAvLyBhbmQgaW5jbHVkZXMgZXZlcnl0aGluZyBhZnRlciBpdFxuICB2YXIgX3JlZjMgPSBhbmNob3JQb3NpdGlvbi5tYXRjaCgvKFtBLVpdLiopLyksXG4gICAgICBfcmVmNCA9IF9zbGljZWRUb0FycmF5KF9yZWYzLCAyKSxcbiAgICAgIGFsaWduID0gX3JlZjRbMV07IC8vIHRoaXMgcGVyZm9ybXMgdHdvIHRhc2tzOlxuICAvLyAxLiBub3JtYWxpemVzIHRoZSBhbGlnbiBwb3NpdGlvbiBieSBsb3dlcmNhc2luZyBpdFxuICAvLyAyLiBgY2VudGVyYCBkb2Vzbid0IGV4aXN0IGluIHRoZSBsb29rdXAgbWFwIHdoaWNoIGNvbnZlcnRzIGl0IHRvIGB1bmRlZmluZWRgIG1lYW5pbmcgbm8gYWxpZ25cblxuXG4gIHJldHVybiBhbmNob3JQb3NpdGlvblRvUG9wb3ZlclBvc2l0aW9uTWFwW2FsaWduLnRvTG93ZXJDYXNlKCldO1xufVxudmFyIERFRkFVTFRfUE9QT1ZFUl9TVFlMRVMgPSB7XG4gIHRvcDogNTAsXG4gIGxlZnQ6IDUwXG59O1xudmFyIHJldHVybkZvY3VzQ29uZmlnID0ge1xuICBwcmV2ZW50U2Nyb2xsOiB0cnVlXG59O1xudmFyIGNsb3NpbmdUcmFuc2l0aW9uVGltZSA9IDI1MDsgLy8gVE9ETzogRFJZIG91dCB2YXIgd2hlbiBjb252ZXJ0aW5nIHRvIENTUy1pbi1KU1xuXG5leHBvcnQgdmFyIEV1aVBvcG92ZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEV1aVBvcG92ZXIsIF9Db21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoRXVpUG9wb3Zlcik7XG5cbiAgZnVuY3Rpb24gRXVpUG9wb3Zlcihwcm9wcykge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlQb3BvdmVyKTtcblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgcHJvcHMpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInJlc3Bvc2l0aW9uVGltZW91dFwiLCB2b2lkIDApO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInN0cmFuZGVkRm9jdXNUaW1lb3V0XCIsIHZvaWQgMCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiY2xvc2luZ1RyYW5zaXRpb25UaW1lb3V0XCIsIHZvaWQgMCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiY2xvc2luZ1RyYW5zaXRpb25BbmltYXRpb25GcmFtZVwiLCB2b2lkIDApO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImJ1dHRvblwiLCBudWxsKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJwYW5lbFwiLCBudWxsKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJkZXNjcmlwdGlvbklkXCIsIGh0bWxJZEdlbmVyYXRvcigpKCkpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImNsb3NlUG9wb3ZlclwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoX3RoaXMucHJvcHMuaXNPcGVuKSB7XG4gICAgICAgIF90aGlzLnByb3BzLmNsb3NlUG9wb3ZlcigpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uRXNjYXBlS2V5XCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKF90aGlzLnByb3BzLmlzT3Blbikge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICBfdGhpcy5jbG9zZVBvcG92ZXIoKTtcblxuICAgICAgICBfdGhpcy5oYW5kbGVTdHJhbmRlZEZvY3VzKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFuZGxlU3RyYW5kZWRGb2N1c1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5zdHJhbmRlZEZvY3VzVGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gSWYgYHJldHVybkZvY3VzYCBmYWlsZWQgYW5kIGZvY3VzIHdhcyBzdHJhbmRlZCBvbiB0aGUgYm9keSxcbiAgICAgICAgLy8gYXR0ZW1wdCB0byBtYW51YWxseSByZXN0b3JlIGZvY3VzIHRvIHRoZSB0b2dnbGUgYnV0dG9uXG4gICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBkb2N1bWVudC5ib2R5KSB7XG4gICAgICAgICAgaWYgKCFfdGhpcy5idXR0b24pIHJldHVybjtcbiAgICAgICAgICB2YXIgZm9jdXNhYmxlSXRlbXMgPSBmb2N1c2FibGUoX3RoaXMuYnV0dG9uKTtcbiAgICAgICAgICBpZiAoIWZvY3VzYWJsZUl0ZW1zLmxlbmd0aCkgcmV0dXJuO1xuICAgICAgICAgIHZhciB0b2dnbGVCdXR0b24gPSBmb2N1c2FibGVJdGVtc1swXTtcbiAgICAgICAgICB0b2dnbGVCdXR0b24uZm9jdXMocmV0dXJuRm9jdXNDb25maWcpO1xuICAgICAgICB9XG4gICAgICB9LCBjbG9zaW5nVHJhbnNpdGlvblRpbWUpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uS2V5RG93blwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGlmIChldmVudC5rZXkgPT09IGNhc2NhZGluZ01lbnVLZXlzLkVTQ0FQRSkge1xuICAgICAgICBfdGhpcy5vbkVzY2FwZUtleShldmVudCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25DbGlja091dHNpZGVcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAvLyBvbmx5IGNsb3NlIHRoZSBwb3BvdmVyIGlmIHRoZSBldmVudCBzb3VyY2UgaXNuJ3QgdGhlIGFuY2hvciBidXR0b25cbiAgICAgIC8vIG90aGVyd2lzZSwgaXQgaXMgdXAgdG8gdGhlIGFuY2hvciB0byB0b2dnbGUgdGhlIHBvcG92ZXIncyBvcGVuIHN0YXR1c1xuICAgICAgaWYgKF90aGlzLmJ1dHRvbiAmJiBfdGhpcy5idXR0b24uY29udGFpbnMoZXZlbnQudGFyZ2V0KSA9PT0gZmFsc2UpIHtcbiAgICAgICAgX3RoaXMuY2xvc2VQb3BvdmVyKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25PcGVuUG9wb3ZlclwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjbGVhclRpbWVvdXQoX3RoaXMuc3RyYW5kZWRGb2N1c1RpbWVvdXQpO1xuICAgICAgY2xlYXJUaW1lb3V0KF90aGlzLmNsb3NpbmdUcmFuc2l0aW9uVGltZW91dCk7XG5cbiAgICAgIGlmIChfdGhpcy5jbG9zaW5nVHJhbnNpdGlvbkFuaW1hdGlvbkZyYW1lKSB7XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKF90aGlzLmNsb3NpbmdUcmFuc2l0aW9uQW5pbWF0aW9uRnJhbWUpO1xuICAgICAgfSAvLyBXZSBuZWVkIHRvIHNldCB0aGlzIHN0YXRlIGEgYmVhdCBhZnRlciB0aGUgcmVuZGVyIHRha2VzIHBsYWNlLCBzbyB0aGF0IHRoZSBDU1NcbiAgICAgIC8vIHRyYW5zaXRpb24gY2FuIHRha2UgZWZmZWN0LlxuXG5cbiAgICAgIF90aGlzLmNsb3NpbmdUcmFuc2l0aW9uQW5pbWF0aW9uRnJhbWUgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGlzT3BlbmluZzogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH0pOyAvLyBmb3IgZWFjaCBjaGlsZCBlbGVtZW50IG9mIGB0aGlzLnBhbmVsYCwgZmluZCBhbnkgdHJhbnNpdGlvbiBkdXJhdGlvbiB3ZSBzaG91bGQgd2FpdCBmb3IgYmVmb3JlIHN0YWJpbGl6aW5nXG5cbiAgICAgIHZhciBfQXJyYXkkcHJvdG90eXBlJHNsaWMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChfdGhpcy5wYW5lbCA/IFtfdGhpcy5wYW5lbF0uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShBcnJheS5mcm9tKF90aGlzLnBhbmVsLmNoaWxkcmVuKSkpIDogW10pLnJlZHVjZShmdW5jdGlvbiAoX3JlZjUsIGVsZW1lbnQpIHtcbiAgICAgICAgdmFyIGR1cmF0aW9uTWF0Y2ggPSBfcmVmNS5kdXJhdGlvbk1hdGNoLFxuICAgICAgICAgICAgZGVsYXlNYXRjaCA9IF9yZWY1LmRlbGF5TWF0Y2g7XG4gICAgICAgIHZhciB0cmFuc2l0aW9uVGltaW5ncyA9IGdldFRyYW5zaXRpb25UaW1pbmdzKGVsZW1lbnQpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGR1cmF0aW9uTWF0Y2g6IE1hdGgubWF4KGR1cmF0aW9uTWF0Y2gsIHRyYW5zaXRpb25UaW1pbmdzLmR1cmF0aW9uTWF0Y2gpLFxuICAgICAgICAgIGRlbGF5TWF0Y2g6IE1hdGgubWF4KGRlbGF5TWF0Y2gsIHRyYW5zaXRpb25UaW1pbmdzLmRlbGF5TWF0Y2gpXG4gICAgICAgIH07XG4gICAgICB9LCB7XG4gICAgICAgIGR1cmF0aW9uTWF0Y2g6IDAsXG4gICAgICAgIGRlbGF5TWF0Y2g6IDBcbiAgICAgIH0pLFxuICAgICAgICAgIGR1cmF0aW9uTWF0Y2ggPSBfQXJyYXkkcHJvdG90eXBlJHNsaWMuZHVyYXRpb25NYXRjaCxcbiAgICAgICAgICBkZWxheU1hdGNoID0gX0FycmF5JHByb3RvdHlwZSRzbGljLmRlbGF5TWF0Y2g7XG5cbiAgICAgIGNsZWFyVGltZW91dChfdGhpcy5yZXNwb3NpdGlvblRpbWVvdXQpO1xuICAgICAgX3RoaXMucmVzcG9zaXRpb25UaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgaXNPcGVuU3RhYmxlOiB0cnVlXG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpcy5wb3NpdGlvblBvcG92ZXJGaXhlZCgpO1xuICAgICAgICB9KTtcbiAgICAgIH0sIGR1cmF0aW9uTWF0Y2ggKyBkZWxheU1hdGNoKTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbk11dGF0aW9uXCIsIGZ1bmN0aW9uIChyZWNvcmRzKSB7XG4gICAgICB2YXIgd2FpdER1cmF0aW9uID0gZ2V0V2FpdER1cmF0aW9uKHJlY29yZHMpO1xuXG4gICAgICBfdGhpcy5wb3NpdGlvblBvcG92ZXJGaXhlZCgpO1xuXG4gICAgICBwZXJmb3JtT25GcmFtZSh3YWl0RHVyYXRpb24sIF90aGlzLnBvc2l0aW9uUG9wb3ZlckZpeGVkKTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJwb3NpdGlvblBvcG92ZXJcIiwgZnVuY3Rpb24gKGFsbG93RW5mb3JjZVBvc2l0aW9uKSB7XG4gICAgICBpZiAoX3RoaXMuYnV0dG9uID09IG51bGwgfHwgX3RoaXMucGFuZWwgPT0gbnVsbCkgcmV0dXJuO1xuICAgICAgdmFyIF9yZWY2ID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgYW5jaG9yUG9zaXRpb24gPSBfcmVmNi5hbmNob3JQb3NpdGlvbjtcbiAgICAgIHZhciBwb3NpdGlvbiA9IGdldFBvcG92ZXJQb3NpdGlvbkZyb21BbmNob3JQb3NpdGlvbihhbmNob3JQb3NpdGlvbik7XG4gICAgICB2YXIgZm9yY2VQb3NpdGlvbiA9IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKGFsbG93RW5mb3JjZVBvc2l0aW9uICYmIF90aGlzLnN0YXRlLmlzT3BlblN0YWJsZSAmJiBfdGhpcy5zdGF0ZS5vcGVuUG9zaXRpb24gIT0gbnVsbCkge1xuICAgICAgICBwb3NpdGlvbiA9IF90aGlzLnN0YXRlLm9wZW5Qb3NpdGlvbjtcbiAgICAgICAgZm9yY2VQb3NpdGlvbiA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIHZhciBfZmluZFBvcG92ZXJQb3NpdGlvbiA9IGZpbmRQb3BvdmVyUG9zaXRpb24oe1xuICAgICAgICBjb250YWluZXI6IF90aGlzLnByb3BzLmNvbnRhaW5lcixcbiAgICAgICAgcG9zaXRpb246IHBvc2l0aW9uLFxuICAgICAgICBmb3JjZVBvc2l0aW9uOiBmb3JjZVBvc2l0aW9uLFxuICAgICAgICBhbGlnbjogZ2V0UG9wb3ZlckFsaWduRnJvbUFuY2hvclBvc2l0aW9uKGFuY2hvclBvc2l0aW9uKSxcbiAgICAgICAgYW5jaG9yOiBfdGhpcy5idXR0b24sXG4gICAgICAgIHBvcG92ZXI6IF90aGlzLnBhbmVsLFxuICAgICAgICBvZmZzZXQ6ICFfdGhpcy5wcm9wcy5hdHRhY2hUb0FuY2hvciAmJiBfdGhpcy5wcm9wcy5oYXNBcnJvdyA/IDE2ICsgKF90aGlzLnByb3BzLm9mZnNldCB8fCAwKSA6IDggKyAoX3RoaXMucHJvcHMub2Zmc2V0IHx8IDApLFxuICAgICAgICBhcnJvd0NvbmZpZzoge1xuICAgICAgICAgIGFycm93V2lkdGg6IDI0LFxuICAgICAgICAgIGFycm93QnVmZmVyOiAxMFxuICAgICAgICB9LFxuICAgICAgICByZXR1cm5Cb3VuZGluZ0JveDogX3RoaXMucHJvcHMuYXR0YWNoVG9BbmNob3IsXG4gICAgICAgIGJ1ZmZlcjogX3RoaXMucHJvcHMuYnVmZmVyXG4gICAgICB9KSxcbiAgICAgICAgICB0b3AgPSBfZmluZFBvcG92ZXJQb3NpdGlvbi50b3AsXG4gICAgICAgICAgbGVmdCA9IF9maW5kUG9wb3ZlclBvc2l0aW9uLmxlZnQsXG4gICAgICAgICAgZm91bmRQb3NpdGlvbiA9IF9maW5kUG9wb3ZlclBvc2l0aW9uLnBvc2l0aW9uLFxuICAgICAgICAgIGFycm93ID0gX2ZpbmRQb3BvdmVyUG9zaXRpb24uYXJyb3csXG4gICAgICAgICAgYW5jaG9yQm91bmRpbmdCb3ggPSBfZmluZFBvcG92ZXJQb3NpdGlvbi5hbmNob3JCb3VuZGluZ0JveDsgLy8gdGhlIHBvcG92ZXIncyB6LWluZGV4IG11c3QgaW5oZXJpdCBmcm9tIHRoZSBidXR0b25cbiAgICAgIC8vIHRoaXMga2VlcHMgYSBidXR0b24ncyBwb3BvdmVyIHVuZGVyIGEgZmx5b3V0IHRoYXQgd291bGQgY292ZXIgdGhlIGJ1dHRvblxuICAgICAgLy8gYnV0IGEgcG9wb3ZlciB0cmlnZ2VyZWQgaW5zaWRlIGEgZmx5b3V0IHdpbGwgYXBwZWFyIG92ZXIgdGhhdCBmbHlvdXRcblxuXG4gICAgICB2YXIgekluZGV4UHJvcCA9IF90aGlzLnByb3BzLnpJbmRleDtcbiAgICAgIHZhciB6SW5kZXggPSB6SW5kZXhQcm9wID09IG51bGwgPyBnZXRFbGVtZW50WkluZGV4KF90aGlzLmJ1dHRvbiwgX3RoaXMucGFuZWwpICsgMjAwMCA6IHpJbmRleFByb3A7XG5cbiAgICAgIHZhciBwb3BvdmVyU3R5bGVzID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBfdGhpcy5wcm9wcy5wYW5lbFN0eWxlKSwge30sIHtcbiAgICAgICAgdG9wOiB0b3AsXG4gICAgICAgIGxlZnQ6IF90aGlzLnByb3BzLmF0dGFjaFRvQW5jaG9yICYmIGFuY2hvckJvdW5kaW5nQm94ID8gYW5jaG9yQm91bmRpbmdCb3gubGVmdCA6IGxlZnQsXG4gICAgICAgIHpJbmRleDogekluZGV4XG4gICAgICB9KTtcblxuICAgICAgdmFyIHdpbGxSZW5kZXJBcnJvdyA9ICFfdGhpcy5wcm9wcy5hdHRhY2hUb0FuY2hvciAmJiBfdGhpcy5wcm9wcy5oYXNBcnJvdztcbiAgICAgIHZhciBhcnJvd1N0eWxlcyA9IHdpbGxSZW5kZXJBcnJvdyA/IGFycm93IDogdW5kZWZpbmVkO1xuICAgICAgdmFyIGFycm93UG9zaXRpb24gPSBmb3VuZFBvc2l0aW9uO1xuXG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHBvcG92ZXJTdHlsZXM6IHBvcG92ZXJTdHlsZXMsXG4gICAgICAgIGFycm93U3R5bGVzOiBhcnJvd1N0eWxlcyxcbiAgICAgICAgYXJyb3dQb3NpdGlvbjogYXJyb3dQb3NpdGlvbixcbiAgICAgICAgb3BlblBvc2l0aW9uOiBmb3VuZFBvc2l0aW9uXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJwb3NpdGlvblBvcG92ZXJGaXhlZFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5wb3NpdGlvblBvcG92ZXIodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicG9zaXRpb25Qb3BvdmVyRmx1aWRcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMucG9zaXRpb25Qb3BvdmVyKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJwYW5lbFJlZlwiLCBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgX3RoaXMucGFuZWwgPSBub2RlO1xuICAgICAgX3RoaXMucHJvcHMucGFuZWxSZWYgJiYgX3RoaXMucHJvcHMucGFuZWxSZWYobm9kZSk7XG5cbiAgICAgIGlmIChub2RlID09IG51bGwpIHtcbiAgICAgICAgLy8gcGFuZWwgaGFzIHVubW91bnRlZCwgcmVzdG9yZSB0aGUgc3RhdGUgZGVmYXVsdHNcbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIHBvcG92ZXJTdHlsZXM6IERFRkFVTFRfUE9QT1ZFUl9TVFlMRVMsXG4gICAgICAgICAgYXJyb3dTdHlsZXM6IHt9LFxuICAgICAgICAgIGFycm93UG9zaXRpb246IG51bGwsXG4gICAgICAgICAgb3BlblBvc2l0aW9uOiBudWxsLFxuICAgICAgICAgIGlzT3BlblN0YWJsZTogZmFsc2VcbiAgICAgICAgfSk7XG5cbiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIF90aGlzLnBvc2l0aW9uUG9wb3ZlckZsdWlkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHBhbmVsIGlzIGNvbWluZyBpbnRvIGV4aXN0ZW5jZVxuICAgICAgICBfdGhpcy5wb3NpdGlvblBvcG92ZXJGbHVpZCgpO1xuXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBfdGhpcy5wb3NpdGlvblBvcG92ZXJGbHVpZCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiYnV0dG9uUmVmXCIsIGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICBfdGhpcy5idXR0b24gPSBub2RlO1xuICAgICAgX3RoaXMucHJvcHMuYnV0dG9uUmVmICYmIF90aGlzLnByb3BzLmJ1dHRvblJlZihub2RlKTtcbiAgICB9KTtcblxuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgcHJldlByb3BzOiB7XG4gICAgICAgIGlzT3BlbjogcHJvcHMuaXNPcGVuXG4gICAgICB9LFxuICAgICAgc3VwcHJlc3NpbmdQb3BvdmVyOiBwcm9wcy5pc09wZW4sXG4gICAgICAvLyBvbmx5IHN1cHByZXNzIGlmIGNyZWF0ZWQgd2l0aCBpc09wZW49dHJ1ZVxuICAgICAgaXNDbG9zaW5nOiBmYWxzZSxcbiAgICAgIGlzT3BlbmluZzogZmFsc2UsXG4gICAgICBwb3BvdmVyU3R5bGVzOiBERUZBVUxUX1BPUE9WRVJfU1RZTEVTLFxuICAgICAgYXJyb3dTdHlsZXM6IHt9LFxuICAgICAgYXJyb3dQb3NpdGlvbjogbnVsbCxcbiAgICAgIG9wZW5Qb3NpdGlvbjogbnVsbCxcbiAgICAgIC8vIG9uY2UgYSBzdGFibGUgcG9zaXRpb24gaGFzIGJlZW4gZm91bmQsIGtlZXAgdGhlIGNvbnRlbnRzIG9uIHRoYXQgc2lkZVxuICAgICAgaXNPcGVuU3RhYmxlOiBmYWxzZSAvLyB3YWl0IGZvciBhbnkgaW5pdGlhbCBvcGVuaW5nIHRyYW5zaXRpb25zIHRvIGZpbmlzaCBiZWZvcmUgbWFya2luZyBhcyBzdGFibGVcblxuICAgIH07XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEV1aVBvcG92ZXIsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIGlmICh0aGlzLnN0YXRlLnN1cHByZXNzaW5nUG9wb3Zlcikge1xuICAgICAgICAvLyBjb21wb25lbnQgd2FzIGNyZWF0ZWQgd2l0aCBpc09wZW49dHJ1ZTsgbm93IHRoYXQgaXQncyBtb3VudGVkXG4gICAgICAgIC8vIHN0b3Agc3VwcHJlc3NpbmcgYW5kIHN0YXJ0IG9wZW5pbmdcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L25vLWRpZC1tb3VudC1zZXQtc3RhdGVcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgc3VwcHJlc3NpbmdQb3BvdmVyOiBmYWxzZSxcbiAgICAgICAgICBpc09wZW5pbmc6IHRydWVcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF90aGlzMi5vbk9wZW5Qb3BvdmVyKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5wcm9wcy5yZXBvc2l0aW9uT25TY3JvbGwpIHtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMucG9zaXRpb25Qb3BvdmVyRml4ZWQsIHRydWUpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnREaWRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcykge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIC8vIFRoZSBwb3BvdmVyIGlzIGJlaW5nIG9wZW5lZC5cbiAgICAgIGlmICghcHJldlByb3BzLmlzT3BlbiAmJiB0aGlzLnByb3BzLmlzT3Blbikge1xuICAgICAgICB0aGlzLm9uT3BlblBvcG92ZXIoKTtcbiAgICAgIH0gLy8gdXBkYXRlIHNjcm9sbCBsaXN0ZW5lclxuXG5cbiAgICAgIGlmIChwcmV2UHJvcHMucmVwb3NpdGlvbk9uU2Nyb2xsICE9PSB0aGlzLnByb3BzLnJlcG9zaXRpb25PblNjcm9sbCkge1xuICAgICAgICBpZiAodGhpcy5wcm9wcy5yZXBvc2l0aW9uT25TY3JvbGwpIHtcbiAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5wb3NpdGlvblBvcG92ZXJGaXhlZCwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMucG9zaXRpb25Qb3BvdmVyRml4ZWQsIHRydWUpO1xuICAgICAgICB9XG4gICAgICB9IC8vIFRoZSBwb3BvdmVyIGlzIGJlaW5nIGNsb3NlZC5cblxuXG4gICAgICBpZiAocHJldlByb3BzLmlzT3BlbiAmJiAhdGhpcy5wcm9wcy5pc09wZW4pIHtcbiAgICAgICAgLy8gSWYgdGhlIHVzZXIgaGFzIGp1c3QgY2xvc2VkIHRoZSBwb3BvdmVyLCBxdWV1ZSB1cCB0aGUgcmVtb3ZhbCBvZiB0aGUgY29udGVudCBhZnRlciB0aGVcbiAgICAgICAgLy8gdHJhbnNpdGlvbiBpcyBjb21wbGV0ZS5cbiAgICAgICAgdGhpcy5jbG9zaW5nVHJhbnNpdGlvblRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgX3RoaXMzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIGlzQ2xvc2luZzogZmFsc2VcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSwgY2xvc2luZ1RyYW5zaXRpb25UaW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50V2lsbFVubW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5wb3NpdGlvblBvcG92ZXJGaXhlZCwgdHJ1ZSk7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5yZXNwb3NpdGlvblRpbWVvdXQpO1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuc3RyYW5kZWRGb2N1c1RpbWVvdXQpO1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuY2xvc2luZ1RyYW5zaXRpb25UaW1lb3V0KTtcbiAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuY2xvc2luZ1RyYW5zaXRpb25BbmltYXRpb25GcmFtZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBhbmNob3JDbGFzc05hbWUgPSBfdGhpcyRwcm9wcy5hbmNob3JDbGFzc05hbWUsXG4gICAgICAgICAgYW5jaG9yUG9zaXRpb24gPSBfdGhpcyRwcm9wcy5hbmNob3JQb3NpdGlvbixcbiAgICAgICAgICBidXR0b24gPSBfdGhpcyRwcm9wcy5idXR0b24sXG4gICAgICAgICAgYnV0dG9uUmVmID0gX3RoaXMkcHJvcHMuYnV0dG9uUmVmLFxuICAgICAgICAgIGluc2VydCA9IF90aGlzJHByb3BzLmluc2VydCxcbiAgICAgICAgICBpc09wZW4gPSBfdGhpcyRwcm9wcy5pc09wZW4sXG4gICAgICAgICAgb3duRm9jdXMgPSBfdGhpcyRwcm9wcy5vd25Gb2N1cyxcbiAgICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzLmNoaWxkcmVuLFxuICAgICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzLmNsYXNzTmFtZSxcbiAgICAgICAgICBjbG9zZVBvcG92ZXIgPSBfdGhpcyRwcm9wcy5jbG9zZVBvcG92ZXIsXG4gICAgICAgICAgcGFuZWxDbGFzc05hbWUgPSBfdGhpcyRwcm9wcy5wYW5lbENsYXNzTmFtZSxcbiAgICAgICAgICBwYW5lbFBhZGRpbmdTaXplID0gX3RoaXMkcHJvcHMucGFuZWxQYWRkaW5nU2l6ZSxcbiAgICAgICAgICBwYW5lbFByb3BzID0gX3RoaXMkcHJvcHMucGFuZWxQcm9wcyxcbiAgICAgICAgICBwYW5lbFJlZiA9IF90aGlzJHByb3BzLnBhbmVsUmVmLFxuICAgICAgICAgIHBhbmVsU3R5bGUgPSBfdGhpcyRwcm9wcy5wYW5lbFN0eWxlLFxuICAgICAgICAgIHBvcG92ZXJTY3JlZW5SZWFkZXJUZXh0ID0gX3RoaXMkcHJvcHMucG9wb3ZlclNjcmVlblJlYWRlclRleHQsXG4gICAgICAgICAgcG9wb3ZlclJlZiA9IF90aGlzJHByb3BzLnBvcG92ZXJSZWYsXG4gICAgICAgICAgaGFzQXJyb3cgPSBfdGhpcyRwcm9wcy5oYXNBcnJvdyxcbiAgICAgICAgICBhcnJvd0NoaWxkcmVuID0gX3RoaXMkcHJvcHMuYXJyb3dDaGlsZHJlbixcbiAgICAgICAgICByZXBvc2l0aW9uT25TY3JvbGwgPSBfdGhpcyRwcm9wcy5yZXBvc2l0aW9uT25TY3JvbGwsXG4gICAgICAgICAgekluZGV4ID0gX3RoaXMkcHJvcHMuekluZGV4LFxuICAgICAgICAgIGF0dGFjaFRvQW5jaG9yID0gX3RoaXMkcHJvcHMuYXR0YWNoVG9BbmNob3IsXG4gICAgICAgICAgZGlzcGxheSA9IF90aGlzJHByb3BzLmRpc3BsYXksXG4gICAgICAgICAgb2Zmc2V0ID0gX3RoaXMkcHJvcHMub2Zmc2V0LFxuICAgICAgICAgIG9uVHJhcERlYWN0aXZhdGlvbiA9IF90aGlzJHByb3BzLm9uVHJhcERlYWN0aXZhdGlvbixcbiAgICAgICAgICBidWZmZXIgPSBfdGhpcyRwcm9wcy5idWZmZXIsXG4gICAgICAgICAgYXJpYUxhYmVsID0gX3RoaXMkcHJvcHNbJ2FyaWEtbGFiZWwnXSxcbiAgICAgICAgICBhcmlhTGFiZWxsZWRCeSA9IF90aGlzJHByb3BzWydhcmlhLWxhYmVsbGVkYnknXSxcbiAgICAgICAgICBjb250YWluZXIgPSBfdGhpcyRwcm9wcy5jb250YWluZXIsXG4gICAgICAgICAgZm9jdXNUcmFwUHJvcHMgPSBfdGhpcyRwcm9wcy5mb2N1c1RyYXBQcm9wcyxcbiAgICAgICAgICBpbml0aWFsRm9jdXNQcm9wID0gX3RoaXMkcHJvcHMuaW5pdGlhbEZvY3VzLFxuICAgICAgICAgIHRhYkluZGV4UHJvcCA9IF90aGlzJHByb3BzLnRhYkluZGV4LFxuICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgICAgIHZhciBzdHlsZXMgPSBldWlQb3BvdmVyU3R5bGVzKCk7XG4gICAgICB2YXIgcG9wb3ZlclN0eWxlcyA9IFtzdHlsZXMuZXVpUG9wb3Zlciwge1xuICAgICAgICBkaXNwbGF5OiBkaXNwbGF5XG4gICAgICB9XTtcbiAgICAgIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpUG9wb3ZlcicsIHtcbiAgICAgICAgJ2V1aVBvcG92ZXItaXNPcGVuJzogdGhpcy5zdGF0ZS5pc09wZW5pbmdcbiAgICAgIH0sIGNsYXNzTmFtZSk7XG4gICAgICB2YXIgYW5jaG9yQ2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVBvcG92ZXJfX2FuY2hvcicsIGFuY2hvckNsYXNzTmFtZSk7XG4gICAgICB2YXIgc2hvd0Fycm93ID0gaGFzQXJyb3cgJiYgIWF0dGFjaFRvQW5jaG9yO1xuICAgICAgdmFyIHBhbmVsO1xuXG4gICAgICBpZiAoIXRoaXMuc3RhdGUuc3VwcHJlc3NpbmdQb3BvdmVyICYmIChpc09wZW4gfHwgdGhpcy5zdGF0ZS5pc0Nsb3NpbmcpKSB7XG4gICAgICAgIHZhciB0YWJJbmRleCA9IHRhYkluZGV4UHJvcDtcbiAgICAgICAgdmFyIGluaXRpYWxGb2N1cyA9IGluaXRpYWxGb2N1c1Byb3A7XG4gICAgICAgIHZhciBhcmlhRGVzY3JpYmVkYnk7XG4gICAgICAgIHZhciBhcmlhTGl2ZTtcbiAgICAgICAgdmFyIHBhbmVsQXJpYU1vZGFsID0gcGFuZWxQcm9wcyAhPT0gbnVsbCAmJiBwYW5lbFByb3BzICE9PSB2b2lkIDAgJiYgcGFuZWxQcm9wcy5oYXNPd25Qcm9wZXJ0eSgnYXJpYS1tb2RhbCcpID8gcGFuZWxQcm9wc1snYXJpYS1tb2RhbCddIDogJ3RydWUnO1xuICAgICAgICB2YXIgcGFuZWxSb2xlID0gcGFuZWxQcm9wcyAhPT0gbnVsbCAmJiBwYW5lbFByb3BzICE9PSB2b2lkIDAgJiYgcGFuZWxQcm9wcy5oYXNPd25Qcm9wZXJ0eSgncm9sZScpID8gcGFuZWxQcm9wcy5yb2xlIDogJ2RpYWxvZyc7XG5cbiAgICAgICAgaWYgKG93bkZvY3VzIHx8IHBhbmVsQXJpYU1vZGFsICE9PSAndHJ1ZScpIHtcbiAgICAgICAgICB0YWJJbmRleCA9IHRhYkluZGV4UHJvcCAhPT0gbnVsbCAmJiB0YWJJbmRleFByb3AgIT09IHZvaWQgMCA/IHRhYkluZGV4UHJvcCA6IDA7XG4gICAgICAgICAgYXJpYUxpdmUgPSAnb2ZmJztcblxuICAgICAgICAgIGlmICghaW5pdGlhbEZvY3VzKSB7XG4gICAgICAgICAgICBpbml0aWFsRm9jdXMgPSBmdW5jdGlvbiBpbml0aWFsRm9jdXMoKSB7XG4gICAgICAgICAgICAgIHJldHVybiBfdGhpczQucGFuZWw7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhcmlhTGl2ZSA9ICdhc3NlcnRpdmUnO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGZvY3VzVHJhcFNjcmVlblJlYWRlclRleHQ7XG5cbiAgICAgICAgaWYgKG93bkZvY3VzIHx8IHBvcG92ZXJTY3JlZW5SZWFkZXJUZXh0KSB7XG4gICAgICAgICAgYXJpYURlc2NyaWJlZGJ5ID0gdGhpcy5kZXNjcmlwdGlvbklkO1xuICAgICAgICAgIGZvY3VzVHJhcFNjcmVlblJlYWRlclRleHQgPSBfX19FbW90aW9uSlNYKEV1aVNjcmVlblJlYWRlck9ubHksIG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwXCIsIHtcbiAgICAgICAgICAgIGlkOiB0aGlzLmRlc2NyaXB0aW9uSWRcbiAgICAgICAgICB9LCBvd25Gb2N1cyAmJiBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICAgIHRva2VuOiBcImV1aVBvcG92ZXIuc2NyZWVuUmVhZGVyQW5ub3VuY2VtZW50XCIsXG4gICAgICAgICAgICBkZWZhdWx0OiBcIllvdSBhcmUgaW4gYSBkaWFsb2cuIFRvIGNsb3NlIHRoaXMgZGlhbG9nLCBoaXQgZXNjYXBlLlwiXG4gICAgICAgICAgfSksIHBvcG92ZXJTY3JlZW5SZWFkZXJUZXh0KSk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmV0dXJuRm9jdXMgPSB0aGlzLnN0YXRlLmlzT3BlblN0YWJsZSA/IHJldHVybkZvY3VzQ29uZmlnIDogZmFsc2U7XG4gICAgICAgIHBhbmVsID0gX19fRW1vdGlvbkpTWChFdWlQb3J0YWwsIHtcbiAgICAgICAgICBpbnNlcnQ6IGluc2VydFxuICAgICAgICB9LCBfX19FbW90aW9uSlNYKEV1aUZvY3VzVHJhcCwgX2V4dGVuZHMoe1xuICAgICAgICAgIGNsaWNrT3V0c2lkZURpc2FibGVzOiB0cnVlXG4gICAgICAgIH0sIGZvY3VzVHJhcFByb3BzLCB7XG4gICAgICAgICAgcmV0dXJuRm9jdXM6IHJldHVybkZvY3VzIC8vIElnbm9yZSB0ZW1wb3Jhcnkgc3RhdGUgb2YgaW5kZWNpc2l2ZSBmb2N1c1xuICAgICAgICAgICxcbiAgICAgICAgICBpbml0aWFsRm9jdXM6IGluaXRpYWxGb2N1cyxcbiAgICAgICAgICBvbkRlYWN0aXZhdGlvbjogb25UcmFwRGVhY3RpdmF0aW9uLFxuICAgICAgICAgIG9uQ2xpY2tPdXRzaWRlOiB0aGlzLm9uQ2xpY2tPdXRzaWRlLFxuICAgICAgICAgIG9uRXNjYXBlS2V5OiB0aGlzLm9uRXNjYXBlS2V5LFxuICAgICAgICAgIGRpc2FibGVkOiAhb3duRm9jdXMgfHwgIXRoaXMuc3RhdGUuaXNPcGVuU3RhYmxlIHx8IHRoaXMuc3RhdGUuaXNDbG9zaW5nXG4gICAgICAgIH0pLCBfX19FbW90aW9uSlNYKEV1aVBvcG92ZXJQYW5lbCwgX2V4dGVuZHMoe30sIHBhbmVsUHJvcHMsIHtcbiAgICAgICAgICBwYW5lbFJlZjogdGhpcy5wYW5lbFJlZixcbiAgICAgICAgICBpc09wZW46IHRoaXMuc3RhdGUuaXNPcGVuaW5nLFxuICAgICAgICAgIHBvc2l0aW9uOiB0aGlzLnN0YXRlLmFycm93UG9zaXRpb24sXG4gICAgICAgICAgaXNBdHRhY2hlZDogYXR0YWNoVG9BbmNob3IsXG4gICAgICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWVzKHBhbmVsQ2xhc3NOYW1lLCBwYW5lbFByb3BzID09PSBudWxsIHx8IHBhbmVsUHJvcHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhbmVsUHJvcHMuY2xhc3NOYW1lKSxcbiAgICAgICAgICBoYXNTaGFkb3c6IGZhbHNlLFxuICAgICAgICAgIHBhZGRpbmdTaXplOiBwYW5lbFBhZGRpbmdTaXplLFxuICAgICAgICAgIHRhYkluZGV4OiB0YWJJbmRleCxcbiAgICAgICAgICBcImFyaWEtbGl2ZVwiOiBhcmlhTGl2ZSxcbiAgICAgICAgICByb2xlOiBwYW5lbFJvbGUsXG4gICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IGFyaWFMYWJlbCxcbiAgICAgICAgICBcImFyaWEtbGFiZWxsZWRieVwiOiBhcmlhTGFiZWxsZWRCeSxcbiAgICAgICAgICBcImFyaWEtbW9kYWxcIjogcGFuZWxBcmlhTW9kYWwsXG4gICAgICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6IGFyaWFEZXNjcmliZWRieSxcbiAgICAgICAgICBzdHlsZTogX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCB0aGlzLnN0YXRlLnBvcG92ZXJTdHlsZXMpLCB7fSwge1xuICAgICAgICAgICAgLy8gQWRkaW5nIGB3aWxsLWNoYW5nZWAgdG8gcmVkdWNlIHJpc2sgb2YgYSBibHVycnkgYW5pbWF0aW9uIGluIENocm9tZSA4NitcbiAgICAgICAgICAgIHdpbGxDaGFuZ2U6ICF0aGlzLnN0YXRlLmlzT3BlblN0YWJsZSA/ICd0cmFuc2Zvcm0sIG9wYWNpdHknIDogdW5kZWZpbmVkXG4gICAgICAgICAgfSlcbiAgICAgICAgfSksIHNob3dBcnJvdyAmJiB0aGlzLnN0YXRlLmFycm93UG9zaXRpb24gJiYgX19fRW1vdGlvbkpTWChFdWlQb3BvdmVyQXJyb3csIHtcbiAgICAgICAgICBwb3NpdGlvbjogdGhpcy5zdGF0ZS5hcnJvd1Bvc2l0aW9uLFxuICAgICAgICAgIHN0eWxlOiB0aGlzLnN0YXRlLmFycm93U3R5bGVzXG4gICAgICAgIH0sIGFycm93Q2hpbGRyZW4pLCBmb2N1c1RyYXBTY3JlZW5SZWFkZXJUZXh0LCBfX19FbW90aW9uSlNYKEV1aU11dGF0aW9uT2JzZXJ2ZXIsIHtcbiAgICAgICAgICBvYnNlcnZlck9wdGlvbnM6IHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHRydWUsXG4gICAgICAgICAgICAvLyBlbGVtZW50IGF0dHJpYnV0ZSBjaGFuZ2VzXG4gICAgICAgICAgICBjaGlsZExpc3Q6IHRydWUsXG4gICAgICAgICAgICAvLyBhZGRlZC9yZW1vdmVkIGVsZW1lbnRzXG4gICAgICAgICAgICBjaGFyYWN0ZXJEYXRhOiB0cnVlLFxuICAgICAgICAgICAgLy8gdGV4dCBjaGFuZ2VzXG4gICAgICAgICAgICBzdWJ0cmVlOiB0cnVlIC8vIHdhdGNoIGFsbCBjaGlsZCBlbGVtZW50c1xuXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbk11dGF0aW9uOiB0aGlzLm9uTXV0YXRpb25cbiAgICAgICAgfSwgZnVuY3Rpb24gKG11dGF0aW9uUmVmKSB7XG4gICAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICAgICAgcmVmOiBtdXRhdGlvblJlZlxuICAgICAgICAgIH0sIGNoaWxkcmVuKTtcbiAgICAgICAgfSkpKSk7XG4gICAgICB9IC8vIHJlYWN0LWZvY3VzLW9uIGFuZCByZWxhdGVkIGRvIG5vdCByZWdpc3RlciBvdXRzaWRlIGNsaWNrIGRldGVjdGlvblxuICAgICAgLy8gd2hlbiBkaXNhYmxlZCwgc28gd2Ugc3RpbGwgbmVlZCB0byBjb25kaXRpb25hbGx5IGNoZWNrIGZvciB0aGF0IG91cnNlbHZlc1xuXG5cbiAgICAgIGlmIChvd25Gb2N1cykge1xuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgY3NzOiBwb3BvdmVyU3R5bGVzLFxuICAgICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgICByZWY6IHBvcG92ZXJSZWZcbiAgICAgICAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICAgIGNzczogLyojX19QVVJFX18qL19jc3Moe1xuICAgICAgICAgICAgZGlzcGxheTogZGlzcGxheVxuICAgICAgICAgIH0sIFwiO2xhYmVsOnJlbmRlcjtcIiksXG4gICAgICAgICAgY2xhc3NOYW1lOiBhbmNob3JDbGFzc2VzLFxuICAgICAgICAgIHJlZjogdGhpcy5idXR0b25SZWZcbiAgICAgICAgfSwgYnV0dG9uIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgPyBudWxsIDogYnV0dG9uKSwgcGFuZWwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpT3V0c2lkZUNsaWNrRGV0ZWN0b3IsIHtcbiAgICAgICAgICBvbk91dHNpZGVDbGljazogdGhpcy5jbG9zZVBvcG92ZXJcbiAgICAgICAgfSwgX19fRW1vdGlvbkpTWChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgY3NzOiBwb3BvdmVyU3R5bGVzLFxuICAgICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgICByZWY6IHBvcG92ZXJSZWYsXG4gICAgICAgICAgb25LZXlEb3duOiB0aGlzLm9uS2V5RG93blxuICAgICAgICB9LCByZXN0KSwgX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICAgICAgY3NzOiAvKiNfX1BVUkVfXyovX2Nzcyh7XG4gICAgICAgICAgICBkaXNwbGF5OiBkaXNwbGF5XG4gICAgICAgICAgfSwgXCI7bGFiZWw6cmVuZGVyO1wiKSxcbiAgICAgICAgICBjbGFzc05hbWU6IGFuY2hvckNsYXNzZXMsXG4gICAgICAgICAgcmVmOiB0aGlzLmJ1dHRvblJlZlxuICAgICAgICB9LCBidXR0b24gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCA/IG51bGwgOiBidXR0b24pLCBwYW5lbCkpO1xuICAgICAgfVxuICAgIH1cbiAgfV0sIFt7XG4gICAga2V5OiBcImdldERlcml2ZWRTdGF0ZUZyb21Qcm9wc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMobmV4dFByb3BzLCBwcmV2U3RhdGUpIHtcbiAgICAgIGlmIChwcmV2U3RhdGUucHJldlByb3BzLmlzT3BlbiAmJiAhbmV4dFByb3BzLmlzT3Blbikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHByZXZQcm9wczoge1xuICAgICAgICAgICAgaXNPcGVuOiBuZXh0UHJvcHMuaXNPcGVuXG4gICAgICAgICAgfSxcbiAgICAgICAgICBpc0Nsb3Npbmc6IHRydWUsXG4gICAgICAgICAgaXNPcGVuaW5nOiBmYWxzZVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBpZiAocHJldlN0YXRlLnByZXZQcm9wcy5pc09wZW4gIT09IG5leHRQcm9wcy5pc09wZW4pIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwcmV2UHJvcHM6IHtcbiAgICAgICAgICAgIGlzT3BlbjogbmV4dFByb3BzLmlzT3BlblxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEV1aVBvcG92ZXI7XG59KENvbXBvbmVudCk7XG5cbl9kZWZpbmVQcm9wZXJ0eShFdWlQb3BvdmVyLCBcImRlZmF1bHRQcm9wc1wiLCB7XG4gIGlzT3BlbjogZmFsc2UsXG4gIG93bkZvY3VzOiB0cnVlLFxuICBhbmNob3JQb3NpdGlvbjogJ2Rvd25DZW50ZXInLFxuICBwYW5lbFBhZGRpbmdTaXplOiAnbScsXG4gIGhhc0Fycm93OiB0cnVlLFxuICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJ1xufSk7XG5cbkV1aVBvcG92ZXIucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICAgKiBDbGFzcyBuYW1lIHBhc3NlZCB0byB0aGUgZGlyZWN0IHBhcmVudCBvZiB0aGUgYnV0dG9uXG4gICAgICovXG4gIGFuY2hvckNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgKiBBbGlnbm1lbnQgb2YgdGhlIHBvcG92ZXIgYW5kIGFycm93IHJlbGF0aXZlIHRvIHRoZSBidXR0b25cbiAgICAgKi9cbiAgYW5jaG9yUG9zaXRpb246IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogU3R5bGUgYW5kIHBvc2l0aW9uIGFsdGVyYXRpb24gZm9yIGFycm93LWxlc3MsIGxlZnQtYWxpZ25lZFxuICAgICAqIGF0dGFjaG1lbnQuIEludGVuZGVkIGZvciB1c2Ugd2l0aCBpbnB1dHMgYXMgYW5jaG9ycywgZS5nLlxuICAgICAqIEV1aUlucHV0UG9wb3ZlclxuICAgICAqL1xuICBhdHRhY2hUb0FuY2hvcjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogVHJpZ2dlcmluZyBlbGVtZW50IGZvciB3aGljaCB0byBhbGlnbiB0aGUgcG9wb3ZlciB0b1xuICAgICAqL1xuICBidXR0b246IFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCxcbiAgYnV0dG9uUmVmOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIENhbGxiYWNrIHRvIGhhbmRsZSBoaWRpbmcgb2YgdGhlIHBvcG92ZXJcbiAgICAgKi9cbiAgY2xvc2VQb3BvdmVyOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgICAqIFJlc3RyaWN0IHRoZSBwb3BvdmVyJ3MgcG9zaXRpb24gd2l0aGluIHRoaXMgZWxlbWVudFxuICAgICAqL1xuICBjb250YWluZXI6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogQ1NTIGRpc3BsYXkgdHlwZSBmb3IgYm90aCB0aGUgcG9wb3ZlciBhbmQgYW5jaG9yXG4gICAgICovXG4gIGRpc3BsYXk6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogT2JqZWN0IG9mIHByb3BzIHBhc3NlZCB0byBFdWlGb2N1c1RyYXBcbiAgICAgKi9cbiAgZm9jdXNUcmFwUHJvcHM6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogU2hvdyBhcnJvdyBpbmRpY2F0aW5nIHRvIG9yaWdpbmF0aW5nIGJ1dHRvblxuICAgICAqL1xuICBoYXNBcnJvdzogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogU3BlY2lmaWVzIHdoYXQgZWxlbWVudCBzaG91bGQgaW5pdGlhbGx5IGhhdmUgZm9jdXM7IENhbiBiZSBhIERPTVxuICAgICAqIG5vZGUsIG9yIGEgc2VsZWN0b3Igc3RyaW5nICh3aGljaCB3aWxsIGJlIHBhc3NlZCB0b1xuICAgICAqIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoKSB0byBmaW5kIHRoZSBET00gbm9kZSksIG9yIGEgZnVuY3Rpb24gdGhhdFxuICAgICAqIHJldHVybnMgYSBET00gbm9kZS5cbiAgICAgKlxuICAgICAqIElmIG5vdCBwYXNzZWQsIGluaXRpYWwgZm9jdXMgZGVmYXVsdHMgdG8gdGhlIHBvcG92ZXIgcGFuZWwuXG4gICAgICovXG4gIGluaXRpYWxGb2N1czogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBQYXNzZWQgZGlyZWN0bHkgdG8gRXVpUG9ydGFsIGZvciBET00gcG9zaXRpb25pbmcuIEJvdGggcHJvcGVydGllcyBhcmVcbiAgICAgKiByZXF1aXJlZCBpZiBwcm9wIGlzIHNwZWNpZmllZFxuICAgICAqL1xuICBpbnNlcnQ6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgc2libGluZzogUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLFxuICAgIHBvc2l0aW9uOiBQcm9wVHlwZXMub25lT2YoW1wiYmVmb3JlXCIsIFwiYWZ0ZXJcIl0pLmlzUmVxdWlyZWRcbiAgfSksXG5cbiAgLyoqXG4gICAgICogVmlzaWJpbGl0eSBzdGF0ZSBvZiB0aGUgcG9wb3ZlclxuICAgICAqL1xuICBpc09wZW46IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIFRyYXBzIHRhYiBmb2N1cyB3aXRoaW4gdGhlIHBvcG92ZXIgY29udGVudHNcbiAgICAgKi9cbiAgb3duRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIEN1c3RvbSBjbGFzcyBhZGRlZCB0byB0aGUgRXVpUGFuZWwgY29udGFpbmluZyB0aGUgcG9wb3ZlciBjb250ZW50c1xuICAgICAqL1xuICBwYW5lbENsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgKiBFdWlQYW5lbCBwYWRkaW5nIG9uIGFsbCBzaWRlc1xuICAgICAqL1xuICBwYW5lbFBhZGRpbmdTaXplOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIFN0YW5kYXJkIERPTSBgc3R5bGVgIGF0dHJpYnV0ZS4gUGFzc2VkIHRvIHRoZSBFdWlQYW5lbFxuICAgICAqL1xuICBwYW5lbFN0eWxlOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIE9iamVjdCBvZiBwcm9wcyBwYXNzZWQgdG8gRXVpUGFuZWwuIFNlZSAjRXVpUG9wb3ZlclBhbmVsUHJvcHNcbiAgICAgKi9cbiAgcGFuZWxQcm9wczogUHJvcFR5cGVzLmFueSxcbiAgcGFuZWxSZWY6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogT3B0aW9uYWwgc2NyZWVuIHJlYWRlciBpbnN0cnVjdGlvbnMgdG8gYW5ub3VuY2UgdXBvbiBwb3BvdmVyIG9wZW4sXG4gICAgICogaW4gYWRkaXRpb24gdG8gRVVJJ3MgZGVmYXVsdCBwb3BvdmVyIGluc3RydWN0aW9ucyBmb3IgRXNjYXBlIG9uIGNsb3NlLlxuICAgICAqIFVzZWZ1bCBmb3IgcG9wb3ZlcnMgdGhhdCBtYXkgaGF2ZSBhZGRpdGlvbmFsIGtleWJvYXJkIGNhcGFiaWxpdGllcyBzdWNoIGFzXG4gICAgICogYXJyb3cgbmF2aWdhdGlvbi5cbiAgICAgKi9cbiAgcG9wb3ZlclNjcmVlblJlYWRlclRleHQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZF0pLFxuICBwb3BvdmVyUmVmOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIFdoZW4gYHRydWVgLCB0aGUgcG9wb3ZlcidzIHBvc2l0aW9uIGlzIHJlLWNhbGN1bGF0ZWQgd2hlbiB0aGUgdXNlclxuICAgICAqIHNjcm9sbHMsIHRoaXMgc3VwcG9ydHMgaGF2aW5nIGZpeGVkLXBvc2l0aW9uIHBvcG92ZXIgYW5jaG9ycy4gV2hlbiBuZXN0aW5nXG4gICAgICogYW4gYEV1aVBvcG92ZXJgIGluIGEgc2Nyb2xsYWJsZSBjb250YWluZXIsIGByZXBvc2l0aW9uT25TY3JvbGxgIHNob3VsZCBiZSBgdHJ1ZWBcbiAgICAgKi9cbiAgcmVwb3NpdGlvbk9uU2Nyb2xsOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBCeSBkZWZhdWx0LCBwb3BvdmVyIGNvbnRlbnQgaW5oZXJpdHMgdGhlIHotaW5kZXggb2YgdGhlIGFuY2hvclxuICAgICAqIGNvbXBvbmVudDsgcGFzcyBgekluZGV4YCB0byBvdmVycmlkZVxuICAgICAqL1xuICB6SW5kZXg6IFByb3BUeXBlcy5udW1iZXIsXG5cbiAgLyoqXG4gICAgICogRnVuY3Rpb24gY2FsbGJhY2sgZm9yIHdoZW4gdGhlIGZvY3VzIHRyYXAgaXMgZGVhY3RpdmF0ZWRcbiAgICAgKi9cbiAgb25UcmFwRGVhY3RpdmF0aW9uOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIERpc3RhbmNlIGF3YXkgZnJvbSB0aGUgYW5jaG9yIHRoYXQgdGhlIHBvcG92ZXIgd2lsbCByZW5kZXJcbiAgICAgKi9cbiAgb2Zmc2V0OiBQcm9wVHlwZXMubnVtYmVyLFxuXG4gIC8qKlxuICAgICAqIE1pbmltdW0gZGlzdGFuY2UgYmV0d2VlbiB0aGUgcG9wb3ZlciBhbmQgdGhlIGJvdW5kaW5nIGNvbnRhaW5lcjtcbiAgICAgKiBQYXNzIGFuIGFycmF5IG9mIDQgdmFsdWVzIHRvIGFkanVzdCBlYWNoIHNpZGUgZGlmZmVyZW50bHk6IGBbdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0XWBcbiAgICAgKiBEZWZhdWx0IGlzIDE2XG4gICAgICovXG4gIGJ1ZmZlcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWRdKSxcblxuICAvKipcbiAgICAgKiBFbGVtZW50IHRvIHBhc3MgYXMgdGhlIGNoaWxkIGVsZW1lbnQgb2YgdGhlIGFycm93O1xuICAgICAqIFVzZSBjYXNlIGlzIHR5cGljYWxseSBsaW1pdGVkIHRvIGFuIGFjY29tcGFueWluZyBgRXVpQmVhY29uYFxuICAgICAqL1xuICBhcnJvd0NoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICAgKiBQcm92aWRlIGEgbmFtZSB0byB0aGUgcG9wb3ZlciBwYW5lbFxuICAgICAqL1xuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgKiBBbHRlcm5hdGl2ZSBvcHRpb24gdG8gYGFyaWEtbGFiZWxgIHRoYXQgdGFrZXMgYW4gYGlkYC5cbiAgICAgKiBVc3VhbGx5IHRha2VzIHRoZSBgaWRgIG9mIHRoZSBwb3BvdmVyIHRpdGxlXG4gICAgICovXG4gIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nXG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgRXVpT2JzZXJ2ZXIgfSBmcm9tICcuLi9vYnNlcnZlcic7XG5leHBvcnQgdmFyIEV1aU11dGF0aW9uT2JzZXJ2ZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9FdWlPYnNlcnZlcikge1xuICBfaW5oZXJpdHMoRXVpTXV0YXRpb25PYnNlcnZlciwgX0V1aU9ic2VydmVyKTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aU11dGF0aW9uT2JzZXJ2ZXIpO1xuXG4gIGZ1bmN0aW9uIEV1aU11dGF0aW9uT2JzZXJ2ZXIoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aU11dGF0aW9uT2JzZXJ2ZXIpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwuYXBwbHkoX3N1cGVyLCBbdGhpc10uY29uY2F0KGFyZ3MpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJuYW1lXCIsICdFdWlNdXRhdGlvbk9ic2VydmVyJyk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25NdXRhdGlvblwiLCBmdW5jdGlvbiAocmVjb3Jkcywgb2JzZXJ2ZXIpIHtcbiAgICAgIF90aGlzLnByb3BzLm9uTXV0YXRpb24ocmVjb3Jkcywgb2JzZXJ2ZXIpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImJlZ2luT2JzZXJ2ZVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgY2hpbGROb2RlID0gX3RoaXMuY2hpbGROb2RlO1xuICAgICAgX3RoaXMub2JzZXJ2ZXIgPSBtYWtlTXV0YXRpb25PYnNlcnZlcihjaGlsZE5vZGUsIF90aGlzLnByb3BzLm9ic2VydmVyT3B0aW9ucywgX3RoaXMub25NdXRhdGlvbik7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICByZXR1cm4gRXVpTXV0YXRpb25PYnNlcnZlcjtcbn0oRXVpT2JzZXJ2ZXIpO1xuXG52YXIgbWFrZU11dGF0aW9uT2JzZXJ2ZXIgPSBmdW5jdGlvbiBtYWtlTXV0YXRpb25PYnNlcnZlcihub2RlLCBfb2JzZXJ2ZXJPcHRpb25zLCBjYWxsYmFjaykge1xuICAvLyBJRTExIGFuZCB0aGUgTXV0YXRpb25PYnNlcnZlciBwb2x5ZmlsbCB1c2VkIGluIEtpYmFuYSAoZm9yIEplc3QpIGltcGxlbWVudFxuICAvLyBhbiBvbGRlciBzcGVjIGluIHdoaWNoIHNwZWNpZnlpbmcgYGF0dHJpYnV0ZU9sZFZhbHVlYCBvciBgYXR0cmlidXRlRmlsdGVyYFxuICAvLyB3aXRob3V0IHNwZWNpZnlpbmcgYGF0dHJpYnV0ZXNgIHJlc3VsdHMgaW4gYSBgU3ludGF4RXJyb3JgLlxuICAvLyBUaGUgZm9sbG93aW5nIGxvZ2ljIHBhdGNoZXMgdGhlIG5ld2VyIHNwZWMgaW4gd2hpY2ggYGF0dHJpYnV0ZXM6IHRydWVgIGNhbiBiZVxuICAvLyBpbXBsaWVkIHdoZW4gYXBwcm9wcmlhdGUgKGBhdHRyaWJ1dGVPbGRWYWx1ZWAgb3IgYGF0dHJpYnV0ZUZpbHRlcmAgaXMgc3BlY2lmaWVkKS5cbiAgdmFyIG9ic2VydmVyT3B0aW9ucyA9IF9vYmplY3RTcHJlYWQoe30sIF9vYnNlcnZlck9wdGlvbnMpO1xuXG4gIHZhciBuZWVkc0F0dHJpYnV0ZXMgPSBvYnNlcnZlck9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2F0dHJpYnV0ZU9sZFZhbHVlJykgfHwgb2JzZXJ2ZXJPcHRpb25zLmhhc093blByb3BlcnR5KCdhdHRyaWJ1dGVGaWx0ZXInKTtcblxuICBpZiAobmVlZHNBdHRyaWJ1dGVzICYmICFvYnNlcnZlck9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2F0dHJpYnV0ZXMnKSkge1xuICAgIG9ic2VydmVyT3B0aW9ucy5hdHRyaWJ1dGVzID0gdHJ1ZTtcbiAgfVxuXG4gIHZhciBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKGNhbGxiYWNrKTtcbiAgb2JzZXJ2ZXIub2JzZXJ2ZShub2RlLCBvYnNlcnZlck9wdGlvbnMpO1xuICByZXR1cm4gb2JzZXJ2ZXI7XG59O1xuXG5leHBvcnQgdmFyIHVzZU11dGF0aW9uT2JzZXJ2ZXIgPSBmdW5jdGlvbiB1c2VNdXRhdGlvbk9ic2VydmVyKGNvbnRhaW5lciwgY2FsbGJhY2ssIG9ic2VydmVyT3B0aW9ucykge1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmIChjb250YWluZXIgIT0gbnVsbCkge1xuICAgICAgdmFyIG9ic2VydmVyID0gbWFrZU11dGF0aW9uT2JzZXJ2ZXIoY29udGFpbmVyLCBvYnNlcnZlck9wdGlvbnMsIGNhbGxiYWNrKTtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBvYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICB9O1xuICAgIH1cbiAgfSwgLy8gaWdub3JlIGNoYW5naW5nIG9ic2VydmVyT3B0aW9uc1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgW2NvbnRhaW5lciwgY2FsbGJhY2tdKTtcbn07IiwgImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IENoaWxkcmVuLCBjbG9uZUVsZW1lbnQsIENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IGh0bWxJZEdlbmVyYXRvciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FjY2Vzc2liaWxpdHknO1xuZXhwb3J0IHZhciBFdWlPdXRzaWRlQ2xpY2tEZXRlY3RvciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoRXVpT3V0c2lkZUNsaWNrRGV0ZWN0b3IsIF9Db21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoRXVpT3V0c2lkZUNsaWNrRGV0ZWN0b3IpO1xuXG4gIC8vIFdlIGFyZSB3b3JraW5nIHdpdGggdGhlIGFzc3VtcHRpb24gdGhhdCBhIGNsaWNrIGV2ZW50IGlzXG4gIC8vIGVxdWl2YWxlbnQgdG8gYSBzZXF1ZW50aWFsLCBjb21wb3VuZCBwcmVzcyBhbmQgcmVsZWFzZSBvZlxuICAvLyB0aGUgcG9pbnRpbmcgZGV2aWNlIChtb3VzZSwgZmluZ2VyLCBzdHlsdXMsIGV0Yy4pLlxuICAvLyBBIGNsaWNrIGV2ZW50J3MgdGFyZ2V0IGNhbiBiZSBpbXByZWNpc2UsIGFzIHRoZSB2YWx1ZSB3aWxsIGJlXG4gIC8vIHRoZSBjbG9zZXN0IGNvbW1vbiBhbmNlc3RvciBvZiB0aGUgcHJlc3MgKG1vdXNlZG93biwgdG91Y2hzdGFydClcbiAgLy8gYW5kIHJlbGVhc2UgKG1vdXNldXAsIHRvdWNoZW5kKSBldmVudHMgKG9mdGVuIDxib2R5IC8+KSBpZlxuICAvLyB0aGUgdGhlIHRhcmdldCBvZiBlYWNoIGV2ZW50IGRpZmZlcnMuXG4gIC8vIFdlIG5lZWQgdGhlIGFjdHVhbCBldmVudCB0YXJnZXRzIHRvIG1ha2UgdGhlIGNvcnJlY3QgZGVjaXNpb25zXG4gIC8vIGFib3V0IHVzZXIgaW50ZW50aW9uLiBTbywgY29uc2lkZXIgdGhlIGRvd24vc3RhcnQgYW5kIHVwL2VuZFxuICAvLyBpdGVtcyBiZWxvdyBhcyB0aGUgZGVjb25zdHJ1Y3Rpb24gb2YgYSBjbGljayBldmVudC5cbiAgZnVuY3Rpb24gRXVpT3V0c2lkZUNsaWNrRGV0ZWN0b3IocHJvcHMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpT3V0c2lkZUNsaWNrRGV0ZWN0b3IpO1xuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBwcm9wcyk7IC8vIHRoZSBpZCBpcyB1c2VkIHRvIGlkZW50aWZ5IHdoaWNoIEV1aU91dHNpZGVDbGlja0RldGVjdG9yXG4gICAgLy8gaXMgdGhlIHNvdXJjZSBvZiBhIGNsaWNrIGV2ZW50OyBhcyB0aGUgY2xpY2sgZXZlbnQgYnViYmxlc1xuICAgIC8vIHVwIGFuZCByZWFjaGVzIHRoZSBjbGljayBkZXRlY3RvcidzIGNoaWxkIGNvbXBvbmVudCB0aGVcbiAgICAvLyBpZCB2YWx1ZSBpcyBzdGFtcGVkIG9uIHRoZSBldmVudC4gVGhpcyBpZCBpcyBpbnNwZWN0ZWRcbiAgICAvLyBpbiB0aGUgZG9jdW1lbnQncyBjbGljayBoYW5kbGVyLCBhbmQgaWYgdGhlIGlkIGRvZXNuJ3RcbiAgICAvLyBleGlzdCBvciBkb2Vzbid0IG1hdGNoIHRoaXMgZGV0ZWN0b3IncyBpZCwgdGhlbiB0cmlnZ2VyXG4gICAgLy8gdGhlIG91dHNpZGVDbGljayBjYWxsYmFjay5cbiAgICAvL1xuICAgIC8vIFRha2luZyB0aGlzIGFwcHJvYWNoIGluc3RlYWQgb2YgY2hlY2tpbmcgaWYgdGhlIGV2ZW50J3NcbiAgICAvLyB0YXJnZXQgZWxlbWVudCBleGlzdHMgaW4gdGhpcyBjb21wb25lbnQncyBET00gc3ViLXRyZWUgaXNcbiAgICAvLyBuZWNlc3NhcnkgZm9yIGhhbmRsaW5nIGNsaWNrcyBvcmlnaW5hdGluZyBmcm9tIGNoaWxkcmVuXG4gICAgLy8gcmVuZGVyZWQgdGhyb3VnaCBSZWFjdCdzIHBvcnRhbHMgKEV1aVBvcnRhbCkuIFRoZSBpZCB0cmFja2luZ1xuICAgIC8vIHdvcmtzIGJlY2F1c2UgUmVhY3QgZ3VhcmFudGVlcyB0aGUgZXZlbnQgYnViYmxlcyB0aHJvdWdoIHRoZVxuICAgIC8vIHZpcnR1YWwgRE9NIGFuZCBleGVjdXRlcyBFdWlDbGlja0RldGVjdG9yJ3Mgb25DbGljayBoYW5kbGVyLFxuICAgIC8vIHN0YW1waW5nIHRoZSBpZCBldmVuIHRob3VnaCB0aGUgZXZlbnQgb3JpZ2luYXRlcyBvdXRzaWRlXG4gICAgLy8gdGhpcyBjb21wb25lbnQncyByZWlmaWVkIERPTSB0cmVlLlxuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImlkXCIsIHZvaWQgMCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiY2FwdHVyZWREb3duSWRzXCIsIHZvaWQgMCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25DbGlja091dHNpZGVcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIGlzRGlzYWJsZWQgPSBfdGhpcyRwcm9wcy5pc0Rpc2FibGVkLFxuICAgICAgICAgIG9uT3V0c2lkZUNsaWNrID0gX3RoaXMkcHJvcHMub25PdXRzaWRlQ2xpY2s7XG5cbiAgICAgIGlmIChpc0Rpc2FibGVkKSB7XG4gICAgICAgIF90aGlzLmNhcHR1cmVkRG93bklkcyA9IFtdO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBldmVudCA9IGU7XG5cbiAgICAgIGlmIChldmVudC5ldWlHZW5lcmF0ZWRCeSAmJiBldmVudC5ldWlHZW5lcmF0ZWRCeS5pbmNsdWRlcyhfdGhpcy5pZCkgfHwgX3RoaXMuY2FwdHVyZWREb3duSWRzLmluY2x1ZGVzKF90aGlzLmlkKSkge1xuICAgICAgICBfdGhpcy5jYXB0dXJlZERvd25JZHMgPSBbXTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5jYXB0dXJlZERvd25JZHMgPSBbXTtcbiAgICAgIHJldHVybiBvbk91dHNpZGVDbGljayhldmVudCk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25DaGlsZENsaWNrXCIsIGZ1bmN0aW9uIChldmVudCwgY2IpIHtcbiAgICAgIC8vIHRvIHN1cHBvcnQgbmVzdGVkIGNsaWNrIGRldGVjdG9ycywgYnVpbGQgYW4gYXJyYXlcbiAgICAgIC8vIG9mIGRldGVjdG9yIGlkcyB0aGF0IGhhdmUgYmVlbiBlbmNvdW50ZXJlZDtcbiAgICAgIGlmIChldmVudC5uYXRpdmVFdmVudC5oYXNPd25Qcm9wZXJ0eSgnZXVpR2VuZXJhdGVkQnknKSkge1xuICAgICAgICBldmVudC5uYXRpdmVFdmVudC5ldWlHZW5lcmF0ZWRCeS5wdXNoKF90aGlzLmlkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV2ZW50Lm5hdGl2ZUV2ZW50LmV1aUdlbmVyYXRlZEJ5ID0gW190aGlzLmlkXTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNiKSBjYihldmVudCk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25DaGlsZE1vdXNlRG93blwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIF90aGlzLm9uQ2hpbGRDbGljayhldmVudCwgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgdmFyIG5hdGl2ZUV2ZW50ID0gZS5uYXRpdmVFdmVudDtcbiAgICAgICAgX3RoaXMuY2FwdHVyZWREb3duSWRzID0gbmF0aXZlRXZlbnQuZXVpR2VuZXJhdGVkQnk7XG4gICAgICAgIGlmIChfdGhpcy5wcm9wcy5vbk1vdXNlRG93bikgX3RoaXMucHJvcHMub25Nb3VzZURvd24oZSk7XG4gICAgICAgIGlmIChfdGhpcy5wcm9wcy5vblRvdWNoU3RhcnQpIF90aGlzLnByb3BzLm9uVG91Y2hTdGFydChlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uQ2hpbGRNb3VzZVVwXCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgX3RoaXMub25DaGlsZENsaWNrKGV2ZW50LCBmdW5jdGlvbiAoZSkge1xuICAgICAgICBpZiAoX3RoaXMucHJvcHMub25Nb3VzZVVwKSBfdGhpcy5wcm9wcy5vbk1vdXNlVXAoZSk7XG4gICAgICAgIGlmIChfdGhpcy5wcm9wcy5vblRvdWNoRW5kKSBfdGhpcy5wcm9wcy5vblRvdWNoRW5kKGUpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfdGhpcy5pZCA9IGh0bWxJZEdlbmVyYXRvcigpKCk7XG4gICAgX3RoaXMuY2FwdHVyZWREb3duSWRzID0gW107XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEV1aU91dHNpZGVDbGlja0RldGVjdG9yLCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLm9uQ2xpY2tPdXRzaWRlKTtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgdGhpcy5vbkNsaWNrT3V0c2lkZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMub25DbGlja091dHNpZGUpO1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCB0aGlzLm9uQ2xpY2tPdXRzaWRlKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBwcm9wcyA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgdGhpcy5wcm9wcy5jaGlsZHJlbi5wcm9wcyksIHtcbiAgICAgICAgb25Nb3VzZURvd246IHRoaXMub25DaGlsZE1vdXNlRG93bixcbiAgICAgICAgb25Ub3VjaFN0YXJ0OiB0aGlzLm9uQ2hpbGRNb3VzZURvd24sXG4gICAgICAgIG9uTW91c2VVcDogdGhpcy5vbkNoaWxkTW91c2VVcCxcbiAgICAgICAgb25Ub3VjaEVuZDogdGhpcy5vbkNoaWxkTW91c2VVcFxuICAgICAgfSk7XG5cbiAgICAgIHZhciBjaGlsZCA9IENoaWxkcmVuLm9ubHkodGhpcy5wcm9wcy5jaGlsZHJlbik7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL2Nsb25lRWxlbWVudChjaGlsZCwgcHJvcHMpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlPdXRzaWRlQ2xpY2tEZXRlY3Rvcjtcbn0oQ29tcG9uZW50KTtcbkV1aU91dHNpZGVDbGlja0RldGVjdG9yLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAgICogUmVhY3ROb2RlIHRvIHJlbmRlciBhcyB0aGlzIGNvbXBvbmVudCdzIGNvbnRlbnRcbiAgICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWQsXG4gIG9uT3V0c2lkZUNsaWNrOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBpc0Rpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgb25Nb3VzZURvd246IFByb3BUeXBlcy5mdW5jLFxuICBvbk1vdXNlVXA6IFByb3BUeXBlcy5mdW5jLFxuICBvblRvdWNoU3RhcnQ6IFByb3BUeXBlcy5mdW5jLFxuICBvblRvdWNoRW5kOiBQcm9wVHlwZXMuZnVuY1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwicG9zaXRpb25cIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgZXVpUG9wb3ZlckFycm93U3R5bGVzIH0gZnJvbSAnLi9fcG9wb3Zlcl9hcnJvdy5zdHlsZXMnO1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBQT1NJVElPTlMgPSBbJ3RvcCcsICdsZWZ0JywgJ3JpZ2h0JywgJ2JvdHRvbSddO1xuZXhwb3J0IHZhciBFdWlQb3BvdmVyQXJyb3cgPSBmdW5jdGlvbiBFdWlQb3BvdmVyQXJyb3coX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgcG9zaXRpb24gPSBfcmVmLnBvc2l0aW9uLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHZhciBzdHlsZXMgPSBldWlQb3BvdmVyQXJyb3dTdHlsZXMoZXVpVGhlbWUpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlQb3BvdmVyQXJyb3csIHN0eWxlc1twb3NpdGlvbl1dO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgXCJkYXRhLXBvcG92ZXItYXJyb3dcIjogcG9zaXRpb24sXG4gICAgY3NzOiBjc3NTdHlsZXNcbiAgfSwgcmVzdCksIGNoaWxkcmVuKTtcbn07XG5FdWlQb3BvdmVyQXJyb3cucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHBvc2l0aW9uOiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWRcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBldWlCYWNrZ3JvdW5kQ29sb3IsIGxvZ2ljYWxzLCBsb2dpY2FsU2l6ZUNTUyB9IGZyb20gJy4uLy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmV4cG9ydCB2YXIgcG9wb3ZlckFycm93U2l6ZSA9ICdtJztcbmV4cG9ydCB2YXIgZXVpUG9wb3ZlckFycm93U3R5bGVzID0gZnVuY3Rpb24gZXVpUG9wb3ZlckFycm93U3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7IC8vIE1hdGNoIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIHBhbmVsc1xuXG4gIHZhciBib3JkZXJDb2xvciA9IGV1aUJhY2tncm91bmRDb2xvcihldWlUaGVtZUNvbnRleHQsICdwbGFpbicpO1xuICB2YXIgYXJyb3dTaXplID0gZXVpVGhlbWUuc2l6ZVtwb3BvdmVyQXJyb3dTaXplXTtcbiAgcmV0dXJuIHtcbiAgICAvLyBCYXNlXG4gICAgZXVpUG9wb3ZlckFycm93OiAvKiNfX1BVUkVfXyovY3NzKFwicG9zaXRpb246YWJzb2x1dGU7XCIsIGxvZ2ljYWxTaXplQ1NTKDAsIDApLCBcIiY6YmVmb3Jle2NvbnRlbnQ6Jyc7cG9zaXRpb246YWJzb2x1dGU7XCIsIGxvZ2ljYWxTaXplQ1NTKDAsIDApLCBcIjt9O2xhYmVsOmV1aVBvcG92ZXJBcnJvdztcIiksXG4gICAgLy8gUE9TSVRJT05TXG4gICAgdG9wOiAvKiNfX1BVUkVfXyovY3NzKFwiJjpiZWZvcmV7XCIsIGxvZ2ljYWxzLmJvdHRvbSwgXCI6LVwiLCBhcnJvd1NpemUsIFwiO1wiLCBsb2dpY2Fsc1snYm9yZGVyLWxlZnQnXSwgXCI6XCIsIGFycm93U2l6ZSwgXCIgc29saWQgdHJhbnNwYXJlbnQ7XCIsIGxvZ2ljYWxzWydib3JkZXItcmlnaHQnXSwgXCI6XCIsIGFycm93U2l6ZSwgXCIgc29saWQgdHJhbnNwYXJlbnQ7XCIsIGxvZ2ljYWxzWydib3JkZXItdG9wJ10sIFwiOlwiLCBhcnJvd1NpemUsIFwiIHNvbGlkIFwiLCBib3JkZXJDb2xvciwgXCI7fTtsYWJlbDp0b3A7XCIpLFxuICAgIGJvdHRvbTogLyojX19QVVJFX18qL2NzcyhcIiY6YmVmb3Jle1wiLCBsb2dpY2Fscy50b3AsIFwiOi1cIiwgYXJyb3dTaXplLCBcIjtcIiwgbG9naWNhbHNbJ2JvcmRlci1sZWZ0J10sIFwiOlwiLCBhcnJvd1NpemUsIFwiIHNvbGlkIHRyYW5zcGFyZW50O1wiLCBsb2dpY2Fsc1snYm9yZGVyLXJpZ2h0J10sIFwiOlwiLCBhcnJvd1NpemUsIFwiIHNvbGlkIHRyYW5zcGFyZW50O1wiLCBsb2dpY2Fsc1snYm9yZGVyLWJvdHRvbSddLCBcIjpcIiwgYXJyb3dTaXplLCBcIiBzb2xpZCBcIiwgYm9yZGVyQ29sb3IsIFwiO307bGFiZWw6Ym90dG9tO1wiKSxcbiAgICBsZWZ0OiAvKiNfX1BVUkVfXyovY3NzKFwiJjpiZWZvcmV7XCIsIGxvZ2ljYWxzLnRvcCwgXCI6NTAlO1wiLCBsb2dpY2Fscy5yaWdodCwgXCI6LVwiLCBhcnJvd1NpemUsIFwiO1wiLCBsb2dpY2Fsc1snYm9yZGVyLXRvcCddLCBcIjpcIiwgYXJyb3dTaXplLCBcIiBzb2xpZCB0cmFuc3BhcmVudDtcIiwgbG9naWNhbHNbJ2JvcmRlci1ib3R0b20nXSwgXCI6XCIsIGFycm93U2l6ZSwgXCIgc29saWQgdHJhbnNwYXJlbnQ7XCIsIGxvZ2ljYWxzWydib3JkZXItbGVmdCddLCBcIjpcIiwgYXJyb3dTaXplLCBcIiBzb2xpZCBcIiwgYm9yZGVyQ29sb3IsIFwiO307bGFiZWw6bGVmdDtcIiksXG4gICAgcmlnaHQ6IC8qI19fUFVSRV9fKi9jc3MoXCImOmJlZm9yZXtcIiwgbG9naWNhbHMudG9wLCBcIjo1MCU7XCIsIGxvZ2ljYWxzLmxlZnQsIFwiOi1cIiwgYXJyb3dTaXplLCBcIjtcIiwgbG9naWNhbHNbJ2JvcmRlci10b3AnXSwgXCI6XCIsIGFycm93U2l6ZSwgXCIgc29saWQgdHJhbnNwYXJlbnQ7XCIsIGxvZ2ljYWxzWydib3JkZXItYm90dG9tJ10sIFwiOlwiLCBhcnJvd1NpemUsIFwiIHNvbGlkIHRyYW5zcGFyZW50O1wiLCBsb2dpY2Fsc1snYm9yZGVyLXJpZ2h0J10sIFwiOlwiLCBhcnJvd1NpemUsIFwiIHNvbGlkIFwiLCBib3JkZXJDb2xvciwgXCI7fTtsYWJlbDpyaWdodDtcIilcbiAgfTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBsb2dpY2FsQ1NTIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuZXhwb3J0IHZhciBldWlQb3BvdmVyU3R5bGVzID0gZnVuY3Rpb24gZXVpUG9wb3ZlclN0eWxlcygpIHtcbiAgcmV0dXJuIHtcbiAgICAvLyBCYXNlIGFuY2hvciB3cmFwcGVyXG4gICAgZXVpUG9wb3ZlcjogLyojX19QVVJFX18qL2NzcyhcInBvc2l0aW9uOnJlbGF0aXZlO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtcIiwgbG9naWNhbENTUygnbWF4LXdpZHRoJywgJzEwMCUnKSwgXCI7O2xhYmVsOmV1aVBvcG92ZXI7XCIpXG4gIH07XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJpc09wZW5cIiwgXCJpc0F0dGFjaGVkXCIsIFwicG9zaXRpb25cIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHsgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHsgaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgaXRlcltTeW1ib2wuaXRlcmF0b3JdICE9IG51bGwgfHwgaXRlcltcIkBAaXRlcmF0b3JcIl0gIT0gbnVsbCkgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkoYXJyKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBjcmVhdGVDb250ZXh0LCB1c2VDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aVBhbmVsIH0gZnJvbSAnLi4vLi4vcGFuZWwvcGFuZWwnO1xuaW1wb3J0IHsgZXVpUG9wb3ZlclBhbmVsU3R5bGVzIH0gZnJvbSAnLi9fcG9wb3Zlcl9wYW5lbC5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpUG9wb3ZlclBhbmVsQ29udGV4dCA9IC8qI19fUFVSRV9fKi9jcmVhdGVDb250ZXh0KHtcbiAgcGFkZGluZ1NpemU6ICdsJ1xufSk7XG5cbi8qKlxuICogKklOVEVSTkFMIE9OTFkqXG4gKiBQdXJlbHkgZm9yIHJlLXVzZSBvZiBzdHlsaW5nXG4gKi9cbmV4cG9ydCB2YXIgRXVpUG9wb3ZlclBhbmVsID0gZnVuY3Rpb24gRXVpUG9wb3ZlclBhbmVsKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgaXNPcGVuID0gX3JlZi5pc09wZW4sXG4gICAgICBpc0F0dGFjaGVkID0gX3JlZi5pc0F0dGFjaGVkLFxuICAgICAgcG9zaXRpb24gPSBfcmVmLnBvc2l0aW9uLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBwYW5lbENvbnRleHQgPSB1c2VDb250ZXh0KEV1aVBvcG92ZXJQYW5lbENvbnRleHQpO1xuICBpZiAocmVzdC5wYWRkaW5nU2l6ZSkgcGFuZWxDb250ZXh0LnBhZGRpbmdTaXplID0gcmVzdC5wYWRkaW5nU2l6ZTtcbiAgdmFyIGV1aVRoZW1lQ29udGV4dCA9IHVzZUV1aVRoZW1lKCk7IC8vIFVzaW5nIEJFTSBjaGlsZCBjbGFzcyBmb3IgQldDXG5cbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlQb3BvdmVyX19wYW5lbCcsIGNsYXNzTmFtZSk7XG4gIHZhciBzdHlsZXMgPSBldWlQb3BvdmVyUGFuZWxTdHlsZXMoZXVpVGhlbWVDb250ZXh0KTtcbiAgdmFyIHBhbmVsQ1NTID0gW3N0eWxlcy5ldWlQb3BvdmVyX19wYW5lbCwgaXNPcGVuICYmIHN0eWxlcy5pc09wZW4sIGlzT3BlbiAmJiBwb3NpdGlvbiAmJiBzdHlsZXNbcG9zaXRpb25dXTtcblxuICBpZiAoaXNBdHRhY2hlZCkge1xuICAgIHBhbmVsQ1NTID0gW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShwYW5lbENTUyksIFtpc09wZW4gJiYgc3R5bGVzLmF0dGFjaGVkLmlzT3BlbiwgcG9zaXRpb24gJiYgc3R5bGVzLmF0dGFjaGVkW3Bvc2l0aW9uXV0pO1xuICB9XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpUG9wb3ZlclBhbmVsQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBwYW5lbENvbnRleHRcbiAgfSwgX19fRW1vdGlvbkpTWChFdWlQYW5lbCwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBjc3M6IHBhbmVsQ1NTLFxuICAgIFwiZGF0YS1wb3BvdmVyLXBhbmVsXCI6IHRydWUsXG4gICAgXCJkYXRhLXBvcG92ZXItb3BlblwiOiBpc09wZW4gfHwgdW5kZWZpbmVkXG4gIH0sIHJlc3QpLCBjaGlsZHJlbikpO1xufTtcbkV1aVBvcG92ZXJQYW5lbC5wcm9wVHlwZXMgPSB7XG4gIGVsZW1lbnQ6IFByb3BUeXBlcy5vbmVPZihbXCJkaXZcIl0pLFxuXG4gIC8qKlxuICAgICAqIEFkZHMgYSBtZWRpdW0gc2hhZG93IHRvIHRoZSBwYW5lbDtcbiAgICAgKiBPbmx5IHdvcmtzIHdoZW4gYGNvbG9yPVwicGxhaW5cImBcbiAgICAgKi9cbiAgaGFzU2hhZG93OiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBBZGRzIGEgc2xpZ2h0IDFweCBib3JkZXIgb24gYWxsIGVkZ2VzLlxuICAgICAqIE9ubHkgd29ya3Mgd2hlbiBgY29sb3I9XCJwbGFpbiB8IHRyYW5zcGFyZW50XCJgXG4gICAgICovXG4gIGhhc0JvcmRlcjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogUGFkZGluZyBmb3IgYWxsIGZvdXIgc2lkZXNcbiAgICAgKi9cbiAgcGFkZGluZ1NpemU6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogQ29ybmVyIGJvcmRlciByYWRpdXNcbiAgICAgKi9cbiAgYm9yZGVyUmFkaXVzOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIFdoZW4gdHJ1ZSB0aGUgcGFuZWwgd2lsbCBncm93IGluIGhlaWdodCB0byBtYXRjaCBgRXVpRmxleEl0ZW1gXG4gICAgICovXG4gIGdyb3c6IFByb3BUeXBlcy5ib29sLFxuICBwYW5lbFJlZjogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBCYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSBwYW5lbDtcbiAgICAgKiBVc3VhbGx5IGEgbGlnaHRlbmVkIGZvcm0gb2YgdGhlIGJyYW5kIGNvbG9yc1xuICAgICAqL1xuICBjb2xvcjogUHJvcFR5cGVzLmFueSxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBpc09wZW46IFByb3BUeXBlcy5ib29sLFxuICBpc0F0dGFjaGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgcG9zaXRpb246IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm9uZU9mKFtudWxsXSldKVxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwicGFkZGluZ1NpemVcIiwgXCJib3JkZXJSYWRpdXNcIiwgXCJjb2xvclwiLCBcImhhc1NoYWRvd1wiLCBcImhhc0JvcmRlclwiLCBcImdyb3dcIiwgXCJwYW5lbFJlZlwiLCBcImVsZW1lbnRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IHVzZUV1aUJhY2tncm91bmRDb2xvckNTUywgdXNlRXVpUGFkZGluZ0NTUywgQkFDS0dST1VORF9DT0xPUlMsIFBBRERJTkdfU0laRVMgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5pbXBvcnQgeyBrZXlzT2YgfSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IHsgZXVpUGFuZWxTdHlsZXMgfSBmcm9tICcuL3BhbmVsLnN0eWxlJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIFNJWkVTID0gUEFERElOR19TSVpFUzsgLy8gRXhwb3J0ZWQgcGFkZGluZyBzaXplcyBhbmQgY2xhc3MgbmFtZXMgbmVjZXNzYXJ5IGZvciBFdWlQb3BvdmVyIGFuZCBFdWlDYXJkLlxuLy8gV2hpY2ggY3VycmVudGx5IHdpbGwgb25seSBtYWludGFpbiBzdXBwb3J0IGZvciB0aGUgb3JpZ2luYWwgdmFsdWVzIHVudGlsIGNvbnZlcnNpb24uXG5cbnZhciBwYWRkaW5nU2l6ZVRvQ2xhc3NOYW1lTWFwID0ge1xuICBub25lOiBudWxsLFxuICBzOiAncGFkZGluZ1NtYWxsJyxcbiAgbTogJ3BhZGRpbmdNZWRpdW0nLFxuICBsOiAncGFkZGluZ0xhcmdlJ1xufTtcblxudmFyIF9TSVpFUyA9IGtleXNPZihwYWRkaW5nU2l6ZVRvQ2xhc3NOYW1lTWFwKTtcblxuZXhwb3J0IHZhciBCT1JERVJfUkFESUkgPSBbJ25vbmUnLCAnbSddO1xuZXhwb3J0IHZhciBDT0xPUlMgPSBCQUNLR1JPVU5EX0NPTE9SUztcbmV4cG9ydCB2YXIgRXVpUGFuZWwgPSBmdW5jdGlvbiBFdWlQYW5lbChfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIF9yZWYkcGFkZGluZ1NpemUgPSBfcmVmLnBhZGRpbmdTaXplLFxuICAgICAgcGFkZGluZ1NpemUgPSBfcmVmJHBhZGRpbmdTaXplID09PSB2b2lkIDAgPyAnbScgOiBfcmVmJHBhZGRpbmdTaXplLFxuICAgICAgX3JlZiRib3JkZXJSYWRpdXMgPSBfcmVmLmJvcmRlclJhZGl1cyxcbiAgICAgIGJvcmRlclJhZGl1cyA9IF9yZWYkYm9yZGVyUmFkaXVzID09PSB2b2lkIDAgPyAnbScgOiBfcmVmJGJvcmRlclJhZGl1cyxcbiAgICAgIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAncGxhaW4nIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkaGFzU2hhZG93ID0gX3JlZi5oYXNTaGFkb3csXG4gICAgICBoYXNTaGFkb3cgPSBfcmVmJGhhc1NoYWRvdyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYkaGFzU2hhZG93LFxuICAgICAgX3JlZiRoYXNCb3JkZXIgPSBfcmVmLmhhc0JvcmRlcixcbiAgICAgIGhhc0JvcmRlciA9IF9yZWYkaGFzQm9yZGVyID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkaGFzQm9yZGVyLFxuICAgICAgX3JlZiRncm93ID0gX3JlZi5ncm93LFxuICAgICAgZ3JvdyA9IF9yZWYkZ3JvdyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYkZ3JvdyxcbiAgICAgIHBhbmVsUmVmID0gX3JlZi5wYW5lbFJlZixcbiAgICAgIGVsZW1lbnQgPSBfcmVmLmVsZW1lbnQsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTsgLy8gU2hhZG93cyBhcmUgb25seSBhbGxvd2VkIHdoZW4gdGhlcmUncyBhIHdoaXRlIGJhY2tncm91bmQgKHBsYWluKVxuXG4gIHZhciBjYW5IYXZlU2hhZG93ID0gIWhhc0JvcmRlciAmJiBjb2xvciA9PT0gJ3BsYWluJztcbiAgdmFyIGNhbkhhdmVCb3JkZXIgPSBjb2xvciA9PT0gJ3BsYWluJyB8fCBjb2xvciA9PT0gJ3RyYW5zcGFyZW50JztcbiAgdmFyIHN0eWxlcyA9IGV1aVBhbmVsU3R5bGVzKGV1aVRoZW1lKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpUGFuZWwsIGdyb3cgJiYgc3R5bGVzLmdyb3csIHN0eWxlcy5yYWRpdXNbYm9yZGVyUmFkaXVzXSwgdXNlRXVpUGFkZGluZ0NTUygpW3BhZGRpbmdTaXplXSwgdXNlRXVpQmFja2dyb3VuZENvbG9yQ1NTKClbY29sb3JdLCBjYW5IYXZlU2hhZG93ICYmIGhhc1NoYWRvdyA9PT0gdHJ1ZSAmJiBzdHlsZXMuaGFzU2hhZG93LCBjYW5IYXZlQm9yZGVyICYmIGhhc0JvcmRlciA9PT0gdHJ1ZSAmJiBzdHlsZXMuaGFzQm9yZGVyLCByZXN0Lm9uQ2xpY2sgJiYgc3R5bGVzLmlzQ2xpY2thYmxlXTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlQYW5lbCcsIFwiZXVpUGFuZWwtLVwiLmNvbmNhdChjb2xvciksIF9kZWZpbmVQcm9wZXJ0eSh7fSwgXCJldWlQYW5lbC0tXCIuY29uY2F0KHBhZGRpbmdTaXplVG9DbGFzc05hbWVNYXBbcGFkZGluZ1NpemVdKSwgcGFkZGluZ1NpemVUb0NsYXNzTmFtZU1hcFtwYWRkaW5nU2l6ZV0pLCBjbGFzc05hbWUpO1xuXG4gIGlmIChyZXN0Lm9uQ2xpY2sgJiYgZWxlbWVudCAhPT0gJ2RpdicpIHtcbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImJ1dHRvblwiLCBfZXh0ZW5kcyh7XG4gICAgICByZWY6IHBhbmVsUmVmLFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgY3NzOiBjc3NTdHlsZXNcbiAgICB9LCByZXN0KSwgY2hpbGRyZW4pO1xuICB9XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcGFuZWxSZWYsXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIGNzczogY3NzU3R5bGVzXG4gIH0sIHJlc3QpLCBjaGlsZHJlbik7XG59O1xuRXVpUGFuZWwucHJvcFR5cGVzID0ge1xuICBlbGVtZW50OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYnV0dG9uXCJdKSwgUHJvcFR5cGVzLm9uZU9mKFtcImRpdlwiXSldKSxcblxuICAvKipcbiAgICAgKiBBZGRzIGEgbWVkaXVtIHNoYWRvdyB0byB0aGUgcGFuZWw7XG4gICAgICogT25seSB3b3JrcyB3aGVuIGBjb2xvcj1cInBsYWluXCJgXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogQWRkcyBhIG1lZGl1bSBzaGFkb3cgdG8gdGhlIHBhbmVsO1xuICAgICAqIE9ubHkgd29ya3Mgd2hlbiBgY29sb3I9XCJwbGFpblwiYFxuICAgICAqL1xuICBoYXNTaGFkb3c6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIEFkZHMgYSBzbGlnaHQgMXB4IGJvcmRlciBvbiBhbGwgZWRnZXMuXG4gICAgICogT25seSB3b3JrcyB3aGVuIGBjb2xvcj1cInBsYWluIHwgdHJhbnNwYXJlbnRcImBcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBBZGRzIGEgc2xpZ2h0IDFweCBib3JkZXIgb24gYWxsIGVkZ2VzLlxuICAgICAqIE9ubHkgd29ya3Mgd2hlbiBgY29sb3I9XCJwbGFpbiB8IHRyYW5zcGFyZW50XCJgXG4gICAgICovXG4gIGhhc0JvcmRlcjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogUGFkZGluZyBmb3IgYWxsIGZvdXIgc2lkZXNcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBQYWRkaW5nIGZvciBhbGwgZm91ciBzaWRlc1xuICAgICAqL1xuICBwYWRkaW5nU2l6ZTogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBDb3JuZXIgYm9yZGVyIHJhZGl1c1xuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIENvcm5lciBib3JkZXIgcmFkaXVzXG4gICAgICovXG4gIGJvcmRlclJhZGl1czogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBXaGVuIHRydWUgdGhlIHBhbmVsIHdpbGwgZ3JvdyBpbiBoZWlnaHQgdG8gbWF0Y2ggYEV1aUZsZXhJdGVtYFxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIFdoZW4gdHJ1ZSB0aGUgcGFuZWwgd2lsbCBncm93IGluIGhlaWdodCB0byBtYXRjaCBgRXVpRmxleEl0ZW1gXG4gICAgICovXG4gIGdyb3c6IFByb3BUeXBlcy5ib29sLFxuICBwYW5lbFJlZjogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBCYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSBwYW5lbDtcbiAgICAgKiBVc3VhbGx5IGEgbGlnaHRlbmVkIGZvcm0gb2YgdGhlIGJyYW5kIGNvbG9yc1xuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIEJhY2tncm91bmQgY29sb3Igb2YgdGhlIHBhbmVsO1xuICAgICAqIFVzdWFsbHkgYSBsaWdodGVuZWQgZm9ybSBvZiB0aGUgYnJhbmQgY29sb3JzXG4gICAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMuYW55LFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbn07IiwgImZ1bmN0aW9uIF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fKCkgeyByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGV1aVNoYWRvdyB9IGZyb20gJy4uLy4uL3RoZW1lcy9hbXN0ZXJkYW0vZ2xvYmFsX3N0eWxpbmcvbWl4aW5zJztcbmltcG9ydCB7IGV1aUNhbkFuaW1hdGUsIGxvZ2ljYWxUZXh0QWxpZ25DU1MgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5cbnZhciBfcmVmID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjEyMmx3MGUtZ3Jvd1wiLFxuICBzdHlsZXM6IFwiZmxleC1ncm93OjE7bGFiZWw6Z3JvdztcIlxufSA6IHtcbiAgbmFtZTogXCIxMjJsdzBlLWdyb3dcIixcbiAgc3R5bGVzOiBcImZsZXgtZ3JvdzoxO2xhYmVsOmdyb3c7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcblxudmFyIF9yZWYyID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjFrazdvZGktZXVpUGFuZWxcIixcbiAgc3R5bGVzOiBcImZsZXgtZ3JvdzowO2xhYmVsOmV1aVBhbmVsO1wiXG59IDoge1xuICBuYW1lOiBcIjFrazdvZGktZXVpUGFuZWxcIixcbiAgc3R5bGVzOiBcImZsZXgtZ3JvdzowO2xhYmVsOmV1aVBhbmVsO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5cbmV4cG9ydCB2YXIgZXVpUGFuZWxTdHlsZXMgPSBmdW5jdGlvbiBldWlQYW5lbFN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIC8vIEJhc2VcbiAgICBldWlQYW5lbDogX3JlZjIsXG4gICAgZ3JvdzogX3JlZixcbiAgICBoYXNTaGFkb3c6IC8qI19fUFVSRV9fKi9jc3MoZXVpU2hhZG93KGV1aVRoZW1lQ29udGV4dCwgJ20nKSwgXCI7O2xhYmVsOmhhc1NoYWRvdztcIiksXG4gICAgaGFzQm9yZGVyOiAvKiNfX1BVUkVfXyovY3NzKFwiYm9yZGVyOlwiLCBldWlUaGVtZS5ib3JkZXIudGhpbiwgXCI7O2xhYmVsOmhhc0JvcmRlcjtcIiksXG4gICAgcmFkaXVzOiB7XG4gICAgICBub25lOiAvKiNfX1BVUkVfXyovY3NzKFwiO2xhYmVsOm5vbmU7XCIpLFxuICAgICAgbTogLyojX19QVVJFX18qL2NzcyhcImJvcmRlci1yYWRpdXM6XCIsIGV1aVRoZW1lLmJvcmRlci5yYWRpdXMubWVkaXVtLCBcIjs7bGFiZWw6bTtcIilcbiAgICB9LFxuICAgIC8vIFNldHVwIGludGVyYWN0aXZlIGJlaGF2aW9yXG4gICAgaXNDbGlja2FibGU6IC8qI19fUFVSRV9fKi9jc3MoZXVpQ2FuQW5pbWF0ZSwgXCJ7dHJhbnNpdGlvbjpib3gtc2hhZG93IFwiLCBldWlUaGVtZS5hbmltYXRpb24uZmFzdCwgXCIgXCIsIGV1aVRoZW1lLmFuaW1hdGlvbi5yZXNpc3RhbmNlLCBcIix0cmFuc2Zvcm0gXCIsIGV1aVRoZW1lLmFuaW1hdGlvbi5mYXN0LCBcIiBcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLnJlc2lzdGFuY2UsIFwiO30mOmVuYWJsZWR7ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlO1wiLCBsb2dpY2FsVGV4dEFsaWduQ1NTKCdsZWZ0JyksIFwiO30mOmhvdmVyLCY6Zm9jdXN7XCIsIGV1aVNoYWRvdyhldWlUaGVtZUNvbnRleHQsICdsJyksIFwiO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0ycHgpO2N1cnNvcjpwb2ludGVyO307bGFiZWw6aXNDbGlja2FibGU7XCIpXG4gIH07XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgZXVpU2hhZG93LCBldWlTaGFkb3dGbGF0LCBldWlTaGFkb3dNZWRpdW0gfSBmcm9tICcuLi8uLi8uLi90aGVtZXMvYW1zdGVyZGFtL2dsb2JhbF9zdHlsaW5nL21peGlucyc7XG5pbXBvcnQgeyBldWlDYW5BbmltYXRlLCBsb2dpY2FsQ1NTIH0gZnJvbSAnLi4vLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xudmFyIHRyYW5zbGF0ZURpc3RhbmNlID0gJ3MnO1xuLyoqXG4gKiAxLiBDYW4gZXhwYW5kIGZ1cnRoZXIsIGJ1dCBpdCBsb29rcyB3ZWlyZCBpZiBpdCdzIHNtYWxsZXIgdGhhbiB0aGUgb3JpZ2luYXRpbmcgYnV0dG9uLlxuICogMi4gQW5pbWF0aW9uIGhhcHBlbnMgb24gdGhlIHBhbmVsLiBCdXQgZG9uJ3QgYW5pbWF0ZSBwb3NpdGlvbiB3aGVuIHVzaW5nIHRoZSBhdHRhY2hlZCBtb2RlIGxpa2UgZm9yIGlucHV0c1xuICogMy4gTWFrZSBzdXJlIHRoZSBwYW5lbCBzdGF5cyB3aXRoaW4gdGhlIHdpbmRvdy5cbiAqL1xuXG5leHBvcnQgdmFyIGV1aVBvcG92ZXJQYW5lbFN0eWxlcyA9IGZ1bmN0aW9uIGV1aVBvcG92ZXJQYW5lbFN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIC8vIEJhc2VcbiAgICBldWlQb3BvdmVyX19wYW5lbDogLyojX19QVVJFX18qL2NzcyhcInBvc2l0aW9uOmFic29sdXRlO1wiLCBsb2dpY2FsQ1NTKCdtaW4td2lkdGgnLCBcIlwiLmNvbmNhdChldWlUaGVtZS5iYXNlICogNywgXCJweFwiKSksIFwiO1wiLCBsb2dpY2FsQ1NTKCdtYXgtd2lkdGgnLCBcImNhbGMoMTAwdncgLSBcIi5jb25jYXQoZXVpVGhlbWUuc2l6ZS54bCwgXCIpXCIpKSwgXCI7YmFja2ZhY2UtdmlzaWJpbGl0eTpoaWRkZW47cG9pbnRlci1ldmVudHM6bm9uZTtvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMCkgdHJhbnNsYXRlWCgwKSB0cmFuc2xhdGVaKDApO1wiLCBldWlTaGFkb3dNZWRpdW0oZXVpVGhlbWVDb250ZXh0LCB7XG4gICAgICBwcm9wZXJ0eTogJ2ZpbHRlcidcbiAgICB9KSwgXCIgJjpmb2N1c3tvdXRsaW5lLW9mZnNldDowO307bGFiZWw6ZXVpUG9wb3Zlcl9fcGFuZWw7XCIpLFxuICAgIC8vIElzIHZpc2libGUgLyBvcGVuXG4gICAgaXNPcGVuOiAvKiNfX1BVUkVfXyovY3NzKFwib3BhY2l0eToxO3BvaW50ZXItZXZlbnRzOmF1dG87XCIsIGV1aUNhbkFuaW1hdGUsIFwie3RyYW5zaXRpb246b3BhY2l0eSBcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLmJvdW5jZSwgXCIgXCIsIGV1aVRoZW1lLmFuaW1hdGlvbi5zbG93LCBcIix0cmFuc2Zvcm0gXCIsIGV1aVRoZW1lLmFuaW1hdGlvbi5ib3VuY2UsIFwiIGNhbGMoXCIsIGV1aVRoZW1lLmFuaW1hdGlvbi5zbG93LCBcIiArIDEwMG1zKTt9O2xhYmVsOmlzT3BlbjtcIiksXG4gICAgLy8gUG9zaXRpb25zXG4gICAgdG9wOiAvKiNfX1BVUkVfXyovY3NzKFwidHJhbnNmb3JtOnRyYW5zbGF0ZVkoXCIsIGV1aVRoZW1lLnNpemVbdHJhbnNsYXRlRGlzdGFuY2VdLCBcIikgdHJhbnNsYXRlWigwKTs7bGFiZWw6dG9wO1wiKSxcbiAgICBib3R0b206IC8qI19fUFVSRV9fKi9jc3MoXCJ0cmFuc2Zvcm06dHJhbnNsYXRlWSgtXCIsIGV1aVRoZW1lLnNpemVbdHJhbnNsYXRlRGlzdGFuY2VdLCBcIikgdHJhbnNsYXRlWigwKTs7bGFiZWw6Ym90dG9tO1wiKSxcbiAgICBsZWZ0OiAvKiNfX1BVUkVfXyovY3NzKFwidHJhbnNmb3JtOnRyYW5zbGF0ZVgoXCIsIGV1aVRoZW1lLnNpemVbdHJhbnNsYXRlRGlzdGFuY2VdLCBcIikgdHJhbnNsYXRlWigwKTs7bGFiZWw6bGVmdDtcIiksXG4gICAgcmlnaHQ6IC8qI19fUFVSRV9fKi9jc3MoXCJ0cmFuc2Zvcm06dHJhbnNsYXRlWCgtXCIsIGV1aVRoZW1lLnNpemVbdHJhbnNsYXRlRGlzdGFuY2VdLCBcIikgdHJhbnNsYXRlWigwKTs7bGFiZWw6cmlnaHQ7XCIpLFxuICAgIC8vIEF0dGFjaGVkIHZlcnNpb24gb3ZlcnJpZGVzXG4gICAgYXR0YWNoZWQ6IHtcbiAgICAgIGlzT3BlbjogLyojX19QVVJFX18qL2NzcyhcImZpbHRlcjpub25lO1wiLCBldWlDYW5BbmltYXRlLCBcInt0cmFuc2l0aW9uOm9wYWNpdHkgXCIsIGV1aVRoZW1lLmFuaW1hdGlvbi5ib3VuY2UsIFwiIFwiLCBldWlUaGVtZS5hbmltYXRpb24uc2xvdywgXCI7fTtsYWJlbDppc09wZW47XCIpLFxuICAgICAgdG9wOiAvKiNfX1BVUkVfXyovY3NzKGV1aVNoYWRvd0ZsYXQoZXVpVGhlbWVDb250ZXh0KSwgXCI7O2xhYmVsOnRvcDtcIiksXG4gICAgICBib3R0b206IC8qI19fUFVSRV9fKi9jc3MoZXVpU2hhZG93KGV1aVRoZW1lQ29udGV4dCwgJ20nKSwgXCI7O2xhYmVsOmJvdHRvbTtcIiksXG4gICAgICAvLyBTYXRpc2ZpZXMgVFNcbiAgICAgIGxlZnQ6IC8qI19fUFVSRV9fKi9jc3MoXCI7bGFiZWw6bGVmdDtcIiksXG4gICAgICByaWdodDogLyojX19QVVJFX18qL2NzcyhcIjtsYWJlbDpyaWdodDtcIilcbiAgICB9XG4gIH07XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuZXhwb3J0IHZhciBldWlGb3JtTWF4V2lkdGggPSBmdW5jdGlvbiBldWlGb3JtTWF4V2lkdGgoX3JlZikge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmLmV1aVRoZW1lO1xuICByZXR1cm4gXCJcIi5jb25jYXQoZXVpVGhlbWUuYmFzZSAqIDI1LCBcInB4XCIpO1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInNpemVcIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcInRleHRUcmFuc2Zvcm1cIl07XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBjbG9uZUVsZW1lbnRXaXRoQ3NzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGhlbWUvY2xvbmVfZWxlbWVudCc7XG5pbXBvcnQgeyBldWlUaXRsZVN0eWxlcyB9IGZyb20gJy4vdGl0bGUuc3R5bGVzJztcbmV4cG9ydCB2YXIgVElUTEVfU0laRVMgPSBbJ3h4eHMnLCAneHhzJywgJ3hzJywgJ3MnLCAnbScsICdsJ107XG5leHBvcnQgdmFyIFRFWFRfVFJBTlNGT1JNID0gWyd1cHBlcmNhc2UnXTtcbmV4cG9ydCB2YXIgRXVpVGl0bGUgPSBmdW5jdGlvbiBFdWlUaXRsZShfcmVmKSB7XG4gIHZhciBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAnbScgOiBfcmVmJHNpemUsXG4gICAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIHRleHRUcmFuc2Zvcm0gPSBfcmVmLnRleHRUcmFuc2Zvcm0sXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgdmFyIHN0eWxlcyA9IGV1aVRpdGxlU3R5bGVzKGV1aVRoZW1lKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpVGl0bGUsIHRleHRUcmFuc2Zvcm0gPyBzdHlsZXNbdGV4dFRyYW5zZm9ybV0gOiB1bmRlZmluZWQsIHN0eWxlc1tzaXplXV07XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpVGl0bGUnLCBjbGFzc05hbWUsIGNoaWxkcmVuLnByb3BzLmNsYXNzTmFtZSk7XG5cbiAgdmFyIHByb3BzID0gX29iamVjdFNwcmVhZCh7XG4gICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gIH0sIHJlc3QpO1xuXG4gIHJldHVybiBjbG9uZUVsZW1lbnRXaXRoQ3NzKGNoaWxkcmVuLCBwcm9wcyk7XG59O1xuRXVpVGl0bGUucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogUmVhY3RFbGVtZW50IHRvIHJlbmRlciBhcyB0aGlzIGNvbXBvbmVudCdzIGNvbnRlbnRcbiAgICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWQsXG4gIHNpemU6IFByb3BUeXBlcy5hbnksXG4gIHRleHRUcmFuc2Zvcm06IFByb3BUeXBlcy5hbnksXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nXG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwiZGVzY3JpcHRpb25cIiwgXCJpc0Rpc2FibGVkXCIsIFwidGl0bGVcIiwgXCJ0aXRsZUVsZW1lbnRcIiwgXCJ0aXRsZVNpemVcIiwgXCJpY29uXCIsIFwiaW1hZ2VcIiwgXCJjaGlsZHJlblwiLCBcImZvb3RlclwiLCBcIm9uQ2xpY2tcIiwgXCJocmVmXCIsIFwicmVsXCIsIFwidGFyZ2V0XCIsIFwidGV4dEFsaWduXCIsIFwiYmV0YUJhZGdlUHJvcHNcIiwgXCJsYXlvdXRcIiwgXCJzZWxlY3RhYmxlXCIsIFwiZGlzcGxheVwiLCBcInBhZGRpbmdTaXplXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IGlzVmFsaWRFbGVtZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBrZXlzT2YgfSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IHsgZ2V0U2VjdXJlUmVsRm9yVGFyZ2V0IH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpVGV4dCB9IGZyb20gJy4uL3RleHQnO1xuaW1wb3J0IHsgRXVpVGl0bGUgfSBmcm9tICcuLi90aXRsZSc7XG5pbXBvcnQgeyBFdWlCZXRhQmFkZ2UgfSBmcm9tICcuLi9iYWRnZS9iZXRhX2JhZGdlJztcbmltcG9ydCB7IEV1aUNhcmRTZWxlY3QsIGV1aUNhcmRTZWxlY3RhYmxlQ29sb3IgfSBmcm9tICcuL2NhcmRfc2VsZWN0JztcbmltcG9ydCB7IHVzZUdlbmVyYXRlZEh0bWxJZCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FjY2Vzc2liaWxpdHknO1xuaW1wb3J0IHsgdmFsaWRhdGVIcmVmIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2VjdXJpdHkvaHJlZl92YWxpZGF0b3InO1xuaW1wb3J0IHsgRXVpUGFuZWwgfSBmcm9tICcuLi9wYW5lbCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIHRleHRBbGlnblRvQ2xhc3NOYW1lTWFwID0ge1xuICBsZWZ0OiAnZXVpQ2FyZC0tbGVmdEFsaWduZWQnLFxuICBjZW50ZXI6ICdldWlDYXJkLS1jZW50ZXJBbGlnbmVkJyxcbiAgcmlnaHQ6ICdldWlDYXJkLS1yaWdodEFsaWduZWQnXG59O1xuZXhwb3J0IHZhciBBTElHTk1FTlRTID0ga2V5c09mKHRleHRBbGlnblRvQ2xhc3NOYW1lTWFwKTtcbnZhciBsYXlvdXRUb0NsYXNzTmFtZU1hcCA9IHtcbiAgdmVydGljYWw6ICcnLFxuICBob3Jpem9udGFsOiAnZXVpQ2FyZC0taG9yaXpvbnRhbCdcbn07XG5leHBvcnQgdmFyIExBWU9VVF9BTElHTk1FTlRTID0ga2V5c09mKGxheW91dFRvQ2xhc3NOYW1lTWFwKTtcbi8qKlxuICogQ2VydGFpbiBwcm9wcyBhcmUgb25seSBhbGxvd2VkIHdoZW4gdGhlIGxheW91dCBpcyB2ZXJ0aWNhbFxuICovXG5cbmV4cG9ydCB2YXIgRXVpQ2FyZCA9IGZ1bmN0aW9uIEV1aUNhcmQoX3JlZikge1xuICB2YXIgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBkZXNjcmlwdGlvbiA9IF9yZWYuZGVzY3JpcHRpb24sXG4gICAgICBfaXNEaXNhYmxlZCA9IF9yZWYuaXNEaXNhYmxlZCxcbiAgICAgIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIF9yZWYkdGl0bGVFbGVtZW50ID0gX3JlZi50aXRsZUVsZW1lbnQsXG4gICAgICB0aXRsZUVsZW1lbnQgPSBfcmVmJHRpdGxlRWxlbWVudCA9PT0gdm9pZCAwID8gJ3NwYW4nIDogX3JlZiR0aXRsZUVsZW1lbnQsXG4gICAgICBfcmVmJHRpdGxlU2l6ZSA9IF9yZWYudGl0bGVTaXplLFxuICAgICAgdGl0bGVTaXplID0gX3JlZiR0aXRsZVNpemUgPT09IHZvaWQgMCA/ICdzJyA6IF9yZWYkdGl0bGVTaXplLFxuICAgICAgaWNvbiA9IF9yZWYuaWNvbixcbiAgICAgIGltYWdlID0gX3JlZi5pbWFnZSxcbiAgICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIGZvb3RlciA9IF9yZWYuZm9vdGVyLFxuICAgICAgb25DbGljayA9IF9yZWYub25DbGljayxcbiAgICAgIGhyZWYgPSBfcmVmLmhyZWYsXG4gICAgICByZWwgPSBfcmVmLnJlbCxcbiAgICAgIHRhcmdldCA9IF9yZWYudGFyZ2V0LFxuICAgICAgX3JlZiR0ZXh0QWxpZ24gPSBfcmVmLnRleHRBbGlnbixcbiAgICAgIHRleHRBbGlnbiA9IF9yZWYkdGV4dEFsaWduID09PSB2b2lkIDAgPyAnY2VudGVyJyA6IF9yZWYkdGV4dEFsaWduLFxuICAgICAgYmV0YUJhZGdlUHJvcHMgPSBfcmVmLmJldGFCYWRnZVByb3BzLFxuICAgICAgX3JlZiRsYXlvdXQgPSBfcmVmLmxheW91dCxcbiAgICAgIGxheW91dCA9IF9yZWYkbGF5b3V0ID09PSB2b2lkIDAgPyAndmVydGljYWwnIDogX3JlZiRsYXlvdXQsXG4gICAgICBzZWxlY3RhYmxlID0gX3JlZi5zZWxlY3RhYmxlLFxuICAgICAgZGlzcGxheSA9IF9yZWYuZGlzcGxheSxcbiAgICAgIHBhZGRpbmdTaXplID0gX3JlZi5wYWRkaW5nU2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgaXNIcmVmVmFsaWQgPSAhaHJlZiB8fCB2YWxpZGF0ZUhyZWYoaHJlZik7XG4gIHZhciBpc0Rpc2FibGVkID0gX2lzRGlzYWJsZWQgfHwgIWlzSHJlZlZhbGlkO1xuICB2YXIgaXNDbGlja2FibGUgPSAhaXNEaXNhYmxlZCAmJiAob25DbGljayB8fCBocmVmIHx8IHNlbGVjdGFibGUgJiYgIXNlbGVjdGFibGUuaXNEaXNhYmxlZCk7XG4gIC8qKlxuICAgKiBGb3IgYTExeSwgd2Ugc2ltdWxhdGUgdGhlIHNhbWUgY2xpY2sgdGhhdCdzIHByb3ZpZGVkIG9uIHRoZSB0aXRsZSB3aGVuIGNsaWNraW5nIHRoZSB3aG9sZSBjYXJkXG4gICAqIHdpdGhvdXQgaGF2aW5nIHRvIG1ha2UgdGhlIHdob2xlIGNhcmQgYSBidXR0b24gb3IgYW5jaG9yIHRhZy5cbiAgICogKkNhcmQgQWNjZXNzaWJpbGl0eTogVGhlIHJlZHVuZGFudCBjbGljayBldmVudCBodHRwczovL2luY2x1c2l2ZS1jb21wb25lbnRzLmRlc2lnbi9jYXJkcy8qXG4gICAqL1xuXG4gIHZhciBsaW5rID0gbnVsbDtcblxuICB2YXIgb3V0ZXJPbkNsaWNrID0gZnVuY3Rpb24gb3V0ZXJPbkNsaWNrKGUpIHtcbiAgICBpZiAobGluayAmJiBsaW5rICE9PSBlLnRhcmdldCkge1xuICAgICAgbGluay5jbGljaygpO1xuICAgIH1cbiAgfTtcblxuICBpZiAobGF5b3V0ID09PSAnaG9yaXpvbnRhbCcpIHtcbiAgICBpZiAoaW1hZ2UgfHwgZm9vdGVyIHx8IHRleHRBbGlnbiAhPT0gJ2NlbnRlcicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXVpQ2FyZDogYGxheW91dD1cImhvcml6b250YWxcImAgY2Fubm90IGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBgaW1hZ2VgLCBgZm9vdGVyYCwgb3IgYHRleHRBbGlnbmAuJyk7XG4gICAgfVxuICB9XG5cbiAgdmFyIHNlbGVjdGFibGVDb2xvckNsYXNzID0gc2VsZWN0YWJsZSA/IFwiZXVpQ2FyZC0taXNTZWxlY3RhYmxlLS1cIi5jb25jYXQoZXVpQ2FyZFNlbGVjdGFibGVDb2xvcihzZWxlY3RhYmxlLmNvbG9yLCBzZWxlY3RhYmxlLmlzU2VsZWN0ZWQpKSA6IHVuZGVmaW5lZDtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlDYXJkJywgdGV4dEFsaWduVG9DbGFzc05hbWVNYXBbdGV4dEFsaWduXSwgbGF5b3V0VG9DbGFzc05hbWVNYXBbbGF5b3V0XSwge1xuICAgICdldWlDYXJkLS1pc0NsaWNrYWJsZSc6IGlzQ2xpY2thYmxlLFxuICAgICdldWlDYXJkLS1oYXNCZXRhQmFkZ2UnOiBiZXRhQmFkZ2VQcm9wcyA9PT0gbnVsbCB8fCBiZXRhQmFkZ2VQcm9wcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogYmV0YUJhZGdlUHJvcHMubGFiZWwsXG4gICAgJ2V1aUNhcmQtLWhhc0ljb24nOiBpY29uLFxuICAgICdldWlDYXJkLS1pc1NlbGVjdGFibGUnOiBzZWxlY3RhYmxlLFxuICAgICdldWlDYXJkLWlzU2VsZWN0ZWQnOiBzZWxlY3RhYmxlID09PSBudWxsIHx8IHNlbGVjdGFibGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlbGVjdGFibGUuaXNTZWxlY3RlZCxcbiAgICAnZXVpQ2FyZC1pc0Rpc2FibGVkJzogaXNEaXNhYmxlZFxuICB9LCBzZWxlY3RhYmxlQ29sb3JDbGFzcywgY2xhc3NOYW1lKTtcbiAgdmFyIGFyaWFJZCA9IHVzZUdlbmVyYXRlZEh0bWxJZCgpO1xuICB2YXIgYXJpYURlc2MgPSBkZXNjcmlwdGlvbiA/IFwiXCIuY29uY2F0KGFyaWFJZCwgXCJEZXNjcmlwdGlvblwiKSA6ICcnO1xuICAvKipcbiAgICogVG9wIGFyZWEgY29udGFpbmluZyBpbWFnZSwgaWNvbiBvciBib3RoXG4gICAqL1xuXG4gIHZhciBpbWFnZU5vZGU7XG5cbiAgaWYgKGltYWdlICYmIGxheW91dCA9PT0gJ3ZlcnRpY2FsJykge1xuICAgIGlmICggLyojX19QVVJFX18qL2lzVmFsaWRFbGVtZW50KGltYWdlKSB8fCB0eXBlb2YgaW1hZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpbWFnZU5vZGUgPSBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcImV1aUNhcmRfX2ltYWdlXCJcbiAgICAgIH0sIC8qI19fUFVSRV9fKi9pc1ZhbGlkRWxlbWVudChpbWFnZSkgPyBpbWFnZSA6IF9fX0Vtb3Rpb25KU1goXCJpbWdcIiwge1xuICAgICAgICBzcmM6IGltYWdlLFxuICAgICAgICBhbHQ6IFwiXCJcbiAgICAgIH0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW1hZ2VOb2RlID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICB2YXIgaWNvbk5vZGU7XG5cbiAgaWYgKGljb24pIHtcbiAgICBpY29uTm9kZSA9IC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQoaWNvbiwge1xuICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWVzKGljb24ucHJvcHMuY2xhc3NOYW1lLCAnZXVpQ2FyZF9faWNvbicpXG4gICAgfSk7XG4gIH1cblxuICB2YXIgb3B0aW9uYWxDYXJkVG9wO1xuXG4gIGlmIChpbWFnZU5vZGUgfHwgaWNvbk5vZGUpIHtcbiAgICBvcHRpb25hbENhcmRUb3AgPSBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgIGNsYXNzTmFtZTogXCJldWlDYXJkX190b3BcIlxuICAgIH0sIGltYWdlTm9kZSwgaWNvbk5vZGUpO1xuICB9XG4gIC8qKlxuICAgKiBPcHRpb25hbCBFdWlCZXRhQmFkZ2VcbiAgICovXG5cblxuICB2YXIgb3B0aW9uYWxCZXRhQmFkZ2U7XG4gIHZhciBvcHRpb25hbEJldGFCYWRnZUlEID0gJyc7XG5cbiAgaWYgKGJldGFCYWRnZVByb3BzICE9PSBudWxsICYmIGJldGFCYWRnZVByb3BzICE9PSB2b2lkIDAgJiYgYmV0YUJhZGdlUHJvcHMubGFiZWwpIHtcbiAgICBvcHRpb25hbEJldGFCYWRnZUlEID0gXCJcIi5jb25jYXQoYXJpYUlkLCBcIkJldGFCYWRnZVwiKTtcbiAgICBvcHRpb25hbEJldGFCYWRnZSA9IF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgIGNsYXNzTmFtZTogXCJldWlDYXJkX19iZXRhQmFkZ2VXcmFwcGVyXCJcbiAgICB9LCBfX19FbW90aW9uSlNYKEV1aUJldGFCYWRnZSwgX2V4dGVuZHMoe1xuICAgICAgaWQ6IG9wdGlvbmFsQmV0YUJhZGdlSURcbiAgICB9LCBiZXRhQmFkZ2VQcm9wcywge1xuICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWVzKCdldWlDYXJkX19iZXRhQmFkZ2UnLCBiZXRhQmFkZ2VQcm9wcyA9PT0gbnVsbCB8fCBiZXRhQmFkZ2VQcm9wcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogYmV0YUJhZGdlUHJvcHMuY2xhc3NOYW1lKVxuICAgIH0pKSk7IC8vIEluY3JlYXNlIHBhZGRpbmcgc2l6ZSB3aGVuIHRoZXJlIGlzIGEgYmV0YSBiYWRnZSB1bmxlc3MgaXQncyBhbHJlYWR5IGRldGVybWluZWRcblxuICAgIHBhZGRpbmdTaXplID0gcGFkZGluZ1NpemUgfHwgJ2wnO1xuICB9XG4gIC8qKlxuICAgKiBPcHRpb25hbCBzZWxlY3RhYmxlIGJ1dHRvblxuICAgKi9cblxuXG4gIGlmIChzZWxlY3RhYmxlICYmIGlzRGlzYWJsZWQgJiYgc2VsZWN0YWJsZS5pc0Rpc2FibGVkID09PSB1bmRlZmluZWQpIHtcbiAgICBzZWxlY3RhYmxlLmlzRGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICB9XG5cbiAgdmFyIG9wdGlvbmFsU2VsZWN0QnV0dG9uO1xuXG4gIGlmIChzZWxlY3RhYmxlKSB7XG4gICAgb3B0aW9uYWxTZWxlY3RCdXR0b24gPSBfX19FbW90aW9uSlNYKEV1aUNhcmRTZWxlY3QsIF9leHRlbmRzKHtcbiAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiBcIlwiLmNvbmNhdChhcmlhSWQsIFwiVGl0bGUgXCIpLmNvbmNhdChhcmlhRGVzYylcbiAgICB9LCBzZWxlY3RhYmxlLCB7XG4gICAgICBidXR0b25SZWY6IGZ1bmN0aW9uIGJ1dHRvblJlZihub2RlKSB7XG4gICAgICAgIGxpbmsgPSBub2RlO1xuICAgICAgfVxuICAgIH0pKTtcbiAgfVxuICAvKipcbiAgICogV3JhcHMgdGhlIHRpdGxlIHdpdGggdGhlIGxpbmsgKDxhPikgb3IgYnV0dG9uLlxuICAgKiBUaGlzIG1ha2VzIHRoZSB0aXRsZSBlbGVtZW50IGExMXkgZnJpZW5kbHkgYW5kIGdldHMgZGVzY3JpYmVkIGJ5IGl0cyBjb250ZW50IGlmIGl0cyBpbnRlcmFjdGFibGUuXG4gICAqL1xuXG5cbiAgdmFyIHRoZVRpdGxlO1xuXG4gIGlmICghaXNEaXNhYmxlZCAmJiBocmVmKSB7XG4gICAgdGhlVGl0bGUgPSBfX19FbW90aW9uSlNYKFwiYVwiLCB7XG4gICAgICBjbGFzc05hbWU6IFwiZXVpQ2FyZF9fdGl0bGVBbmNob3JcIixcbiAgICAgIG9uQ2xpY2s6IG9uQ2xpY2ssXG4gICAgICBocmVmOiBocmVmLFxuICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjogYXJpYURlc2MsXG4gICAgICByZWw6IGdldFNlY3VyZVJlbEZvclRhcmdldCh7XG4gICAgICAgIGhyZWY6IGhyZWYsXG4gICAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgICByZWw6IHJlbFxuICAgICAgfSksXG4gICAgICByZWY6IGZ1bmN0aW9uIHJlZihub2RlKSB7XG4gICAgICAgIGxpbmsgPSBub2RlO1xuICAgICAgfVxuICAgIH0sIHRpdGxlKTtcbiAgfSBlbHNlIGlmIChpc0Rpc2FibGVkIHx8IG9uQ2xpY2spIHtcbiAgICB0aGVUaXRsZSA9IF9fX0Vtb3Rpb25KU1goXCJidXR0b25cIiwge1xuICAgICAgY2xhc3NOYW1lOiBcImV1aUNhcmRfX3RpdGxlQnV0dG9uXCIsXG4gICAgICBvbkNsaWNrOiBvbkNsaWNrLFxuICAgICAgZGlzYWJsZWQ6IGlzRGlzYWJsZWQsXG4gICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjogXCJcIi5jb25jYXQob3B0aW9uYWxCZXRhQmFkZ2VJRCwgXCIgXCIpLmNvbmNhdChhcmlhRGVzYyksXG4gICAgICByZWY6IGZ1bmN0aW9uIHJlZihub2RlKSB7XG4gICAgICAgIGxpbmsgPSBub2RlO1xuICAgICAgfVxuICAgIH0sIHRpdGxlKTtcbiAgfSBlbHNlIHtcbiAgICB0aGVUaXRsZSA9IHRpdGxlO1xuICB9XG4gIC8qKlxuICAgKiBDb252ZXJ0IHRpdGxlRWxlbWVudCB0byBhIGNhcGl0YWwgVGl0bGVFbGVtZW50XG4gICAqL1xuXG5cbiAgdmFyIFRpdGxlRWxlbWVudCA9IHRpdGxlRWxlbWVudDtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpUGFuZWwsIF9leHRlbmRzKHtcbiAgICBlbGVtZW50OiBcImRpdlwiLFxuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBvbkNsaWNrOiBpc0NsaWNrYWJsZSA/IG91dGVyT25DbGljayA6IHVuZGVmaW5lZCxcbiAgICBjb2xvcjogaXNEaXNhYmxlZCA/ICdzdWJkdWVkJyA6IGRpc3BsYXksXG4gICAgaGFzU2hhZG93OiBpc0Rpc2FibGVkIHx8IGRpc3BsYXkgPyBmYWxzZSA6IHRydWUsXG4gICAgaGFzQm9yZGVyOiBkaXNwbGF5ID8gZmFsc2UgOiB1bmRlZmluZWQsXG4gICAgcGFkZGluZ1NpemU6IHBhZGRpbmdTaXplXG4gIH0sIHJlc3QpLCBvcHRpb25hbENhcmRUb3AsIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlDYXJkX19jb250ZW50XCJcbiAgfSwgX19fRW1vdGlvbkpTWChFdWlUaXRsZSwge1xuICAgIGlkOiBcIlwiLmNvbmNhdChhcmlhSWQsIFwiVGl0bGVcIiksXG4gICAgY2xhc3NOYW1lOiBcImV1aUNhcmRfX3RpdGxlXCIsXG4gICAgc2l6ZTogdGl0bGVTaXplXG4gIH0sIF9fX0Vtb3Rpb25KU1goVGl0bGVFbGVtZW50LCBudWxsLCB0aGVUaXRsZSkpLCBkZXNjcmlwdGlvbiAmJiBfX19FbW90aW9uSlNYKEV1aVRleHQsIHtcbiAgICBpZDogYXJpYURlc2MsXG4gICAgc2l6ZTogXCJzXCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUNhcmRfX2Rlc2NyaXB0aW9uXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBcIiwgbnVsbCwgZGVzY3JpcHRpb24pKSwgY2hpbGRyZW4gJiYgX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUNhcmRfX2NoaWxkcmVuXCJcbiAgfSwgY2hpbGRyZW4pKSwgb3B0aW9uYWxCZXRhQmFkZ2UsIGxheW91dCA9PT0gJ3ZlcnRpY2FsJyAmJiBmb290ZXIgJiYgX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUNhcmRfX2Zvb3RlclwiXG4gIH0sIGZvb3RlciksIG9wdGlvbmFsU2VsZWN0QnV0dG9uKTtcbn07XG5FdWlDYXJkLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAgICAgKiBDaGFuZ2UgdG8gXCJob3Jpem9udGFsXCIgaWYgeW91IG5lZWQgdGhlIGljb24gdG8gYmUgbGVmdCBvZiB0aGUgY29udGVudC5cbiAgICAgICAqIEhvcml6b250YWwgbGF5b3V0cyBjYW5ub3QgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGBpbWFnZWAsIGBmb290ZXJgLCBvciBgdGV4dEFsaWduYC5cbiAgICAgICAqL1xuICBsYXlvdXQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJ2ZXJ0aWNhbFwiXSksIFByb3BUeXBlcy5vbmVPZihbXCJob3Jpem9udGFsXCJdKS5pc1JlcXVpcmVkXSksXG5cbiAgLyoqXG4gICAgICAgKiBDaGFuZ2VzIGFsaWdubWVudCBvZiB0aGUgdGl0bGUgYW5kIGRlc2NyaXB0aW9uXG4gICAgICAgKi9cbiAgdGV4dEFsaWduOiBQcm9wVHlwZXMub25lT2YoW1wibGVmdFwiLCBcImNlbnRlclwiLCBcInJpZ2h0XCJdKSxcblxuICAvKipcbiAgICAgICAqIEFjY2VwdHMgYW55IGNvbWJpbmF0aW9uIG9mIGVsZW1lbnRzXG4gICAgICAgKi9cbiAgZm9vdGVyOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICAgICAqIEFjY2VwdHMgYSB1cmwgaW4gc3RyaW5nIGZvcm0gb3IgUmVhY3RFbGVtZW50IGZvciBhIGN1c3RvbSBpbWFnZSBjb21wb25lbnRcbiAgICAgICAqL1xuICBpbWFnZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkXSksXG5cbiAgLyoqXG4gICAgICAgKiBDYXJkcyBhcmUgcmVxdWlyZWQgdG8gaGF2ZSBhdCBsZWFzdCBhIHRpdGxlIGFuZCBhIGRlc2NyaXB0aW9uIGFuZC9vciBjaGlsZHJlblxuICAgICAgICovXG4gIHRpdGxlOiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsXG5cbiAgLyoqXG4gICAgICAgKiBEZXRlcm1pbmVzIHRoZSB0aXRsZSdzIGhlYWRpbmcgZWxlbWVudFxuICAgICAgICovXG4gIHRpdGxlRWxlbWVudDogUHJvcFR5cGVzLm9uZU9mKFtcImgyXCIsIFwiaDNcIiwgXCJoNFwiLCBcImg1XCIsIFwiaDZcIiwgXCJzcGFuXCJdKSxcblxuICAvKipcbiAgICAgICAqIERldGVybWluZXMgdGhlIHRpdGxlJ3Mgc2l6ZSwgbWF0Y2hpbmcgdGhhdCBvZiBFdWlUaXRsZS5cbiAgICAgICAqIFRob3VnaCwgY2FyZCB0aXRsZXMgY2FuJ3QgYmUgdG9vIGxhcmdlIG9yIHNtYWxsIHJlbGF0aXZlIHRvIHRoZSBkZXNjcmlwdGlvbiB0ZXh0LlxuICAgICAgICovXG4gIHRpdGxlU2l6ZTogUHJvcFR5cGVzLm9uZU9mKFtcInNcIiwgXCJ4c1wiXSksXG4gIC8vIGRlc2NyaXB0aW9uIGlzIHJlcXVpcmVkIGlmIGNoaWxkcmVuIGlzIG9taXR0ZWRcbiAgLy8gZGVzY3JpcHRpb24gYmVjb21lcyBvcHRpb25hbCB3aGVuIGNoaWxkcmVuIGlzIHByZXNlbnRcblxuICAvKipcbiAgICAgICAqIFBsYWNlZCB3aXRoaW4gYSBzbWFsbCBFdWlUZXh0IGA8cD5gIHRhZ1xuICAgICAgICovXG4gIGRlc2NyaXB0aW9uOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAgICogQWNjZXB0cyBhbiBgPEV1aUljb24+YCBub2RlIG9yIGBudWxsYFxuICAgICAgICovXG4gIGljb246IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5vbmVPZihbbnVsbF0pXSksXG5cbiAgLyoqXG4gICAgICAgKiBDdXN0b20gY2hpbGRyZW5cbiAgICAgICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAgICAgKiBVc2Ugb25seSBpZiB5b3Ugd2FudCB0byBmb3JlZ28gYSBidXR0b24gaW4gdGhlIGZvb3RlciBhbmQgbWFrZSB0aGUgd2hvbGUgY2FyZCBjbGlja2FibGVcbiAgICAgICAqL1xuICBvbkNsaWNrOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXSksXG4gIGlzRGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICBocmVmOiBQcm9wVHlwZXMuc3RyaW5nLFxuICB0YXJnZXQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHJlbDogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgICAqIEFkZHMgYSBiYWRnZSB0byB0b3Agb2YgdGhlIGNhcmQgdG8gbGFiZWwgaXQgYXMgXCJCZXRhXCIgb3Igb3RoZXIgbm9uLUdBIHN0YXRlLlxuICAgICAgICogQWNjZXB0cyBhbGwgdGhlIHByb3BzIG9mIFtFdWlCZXRhQmFkZ2VdKCMvZGlzcGxheS9iYWRnZSNiZXRhLWJhZGdlLXR5cGUpLCB3aGVyZSBgbGFiZWxgIGlzIHJlcXVpcmVkLlxuICAgICAgICovXG4gIGJldGFCYWRnZVByb3BzOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAgICogTWF0Y2hlcyB0byB0aGUgY29sb3IgcHJvcGVydHkgb2YgRXVpUGFuZWwuIElmIGRlZmluZWQsIHJlbW92ZXMgYW55IGJvcmRlciAmIHNoYWRvdy5cbiAgICAgICAqIExlYXZlIGFzIGB1bmRlZmluZWRgIHRvIGRpc3BsYXkgYXMgYSBkZWZhdWx0IHBhbmVsLlxuICAgICAgICogU2VsZWN0YWJsZSBjYXJkcyB3aWxsIGFsd2F5cyBkaXNwbGF5IGFzIGEgZGVmYXVsdCBwYW5lbC5cbiAgICAgICAqL1xuICBkaXNwbGF5OiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAgICogUGFkZGluZyBhcHBsaWVkIGFyb3VuZCB0aGUgY29udGVudCBvZiB0aGUgY2FyZFxuICAgICAgICovXG4gIHBhZGRpbmdTaXplOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAgICogQWRkcyBhIGJ1dHRvbiB0byB0aGUgYm90dG9tIG9mIHRoZSBjYXJkIHRvIGFsbG93IGZvciBpbi1wbGFjZSBzZWxlY3Rpb25cbiAgICAgICAqL1xuICBzZWxlY3RhYmxlOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGhyZWY6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgICAvKipcbiAgICAgICAqIEFueSBvZiBvdXIgbmFtZWQgY29sb3JzXG4gICAgICAgKi9cblxuICAgIC8qKlxuICAgICAgICogQW55IG9mIG91ciBuYW1lZCBjb2xvcnNcbiAgICAgICAqL1xuICAgIGNvbG9yOiBQcm9wVHlwZXMub25lT2YoW1wicHJpbWFyeVwiLCBcImRhbmdlclwiLCBcInRleHRcIiwgXCJnaG9zdFwiLCBcInN1Y2Nlc3NcIiwgXCJ3YXJuaW5nXCJdKSxcbiAgICBzaXplOiBQcm9wVHlwZXMub25lT2YoW1wieHNcIiwgXCJzXCIsIFwibVwiXSksXG5cbiAgICAvKipcbiAgICAgICAqIEVuc3VyZSB0aGUgdGV4dCBvZiB0aGUgYnV0dG9uIHNpdHMgZmx1c2ggdG8gdGhlIGxlZnQsIHJpZ2h0LCBvciBib3RoIHNpZGVzIG9mIGl0cyBjb250YWluZXJcbiAgICAgICAqL1xuXG4gICAgLyoqXG4gICAgICAgKiBFbnN1cmUgdGhlIHRleHQgb2YgdGhlIGJ1dHRvbiBzaXRzIGZsdXNoIHRvIHRoZSBsZWZ0LCByaWdodCwgb3IgYm90aCBzaWRlcyBvZiBpdHMgY29udGFpbmVyXG4gICAgICAgKi9cbiAgICBmbHVzaDogUHJvcFR5cGVzLm9uZU9mKFtcImxlZnRcIiwgXCJyaWdodFwiLCBcImJvdGhcIl0pLFxuXG4gICAgLyoqXG4gICAgICAgKiBgZGlzYWJsZWRgIGlzIGFsc28gYWxsb3dlZFxuICAgICAgICovXG5cbiAgICAvKipcbiAgICAgICAqIGBkaXNhYmxlZGAgaXMgYWxzbyBhbGxvd2VkXG4gICAgICAgKi9cbiAgICBpc0Rpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAgIC8qKlxuICAgICAgICogRm9yY2UgZGlzYWJsZXMgdGhlIGJ1dHRvbiBhbmQgY2hhbmdlcyB0aGUgaWNvbiB0byBhIGxvYWRpbmcgc3Bpbm5lclxuICAgICAgICovXG5cbiAgICAvKipcbiAgICAgICAqIEZvcmNlIGRpc2FibGVzIHRoZSBidXR0b24gYW5kIGNoYW5nZXMgdGhlIGljb24gdG8gYSBsb2FkaW5nIHNwaW5uZXJcbiAgICAgICAqL1xuICAgIGlzTG9hZGluZzogUHJvcFR5cGVzLmJvb2wsXG5cbiAgICAvKipcbiAgICAgICAqIElzIGluIHRoZSBzZWxlY3RlZCBzdGF0ZVxuICAgICAgICovXG5cbiAgICAvKipcbiAgICAgICAqIEFwcGxpZXMgdGhlIGJvb2xlYW4gc3RhdGUgYXMgdGhlIGBhcmlhLXByZXNzZWRgIHByb3BlcnR5IHRvIGNyZWF0ZSBhIHRvZ2dsZSBidXR0b24uXG4gICAgICAgKiAqT25seSB1c2Ugd2hlbiB0aGUgcmVhZGFibGUgdGV4dCBkb2VzIG5vdCBjaGFuZ2UgYmV0d2VlbiBzdGF0ZXMuKlxuICAgICAgICovXG5cbiAgICAvKipcbiAgICAgICAqIEFwcGxpZXMgdGhlIGJvb2xlYW4gc3RhdGUgYXMgdGhlIGBhcmlhLXByZXNzZWRgIHByb3BlcnR5IHRvIGNyZWF0ZSBhIHRvZ2dsZSBidXR0b24uXG4gICAgICAgKiAqT25seSB1c2Ugd2hlbiB0aGUgcmVhZGFibGUgdGV4dCBkb2VzIG5vdCBjaGFuZ2UgYmV0d2VlbiBzdGF0ZXMuKlxuICAgICAgICovXG4gICAgaXNTZWxlY3RlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgdGFyZ2V0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHJlbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICB0eXBlOiBQcm9wVHlwZXMub25lT2YoW1wiYnV0dG9uXCIsIFwic3VibWl0XCJdKSxcbiAgICBidXR0b25SZWY6IFByb3BUeXBlcy5hbnksXG5cbiAgICAvKipcbiAgICAgICAqIE9iamVjdCBvZiBwcm9wcyBwYXNzZWQgdG8gdGhlIDxzcGFuLz4gd3JhcHBpbmcgdGhlIGJ1dHRvbidzIGNvbnRlbnRcbiAgICAgICAqL1xuICAgIGNvbnRlbnRQcm9wczogUHJvcFR5cGVzLmFueSxcblxuICAgIC8qKlxuICAgICAgICogQW55IGB0eXBlYCBhY2NlcHRlZCBieSBFdWlJY29uXG4gICAgICAgKi9cbiAgICBpY29uVHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYWxlcnRcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhc3Rlcmlza1wiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJib2x0XCIsIFwiYm94ZXNIb3Jpem9udGFsXCIsIFwiYm94ZXNWZXJ0aWNhbFwiLCBcImJyYW5jaFwiLCBcImJyYW5jaFVzZXJcIiwgXCJicm9vbVwiLCBcImJydXNoXCIsIFwiYnVnXCIsIFwiYnVsbHNleWVcIiwgXCJjYWxlbmRhclwiLCBcImNhbnZhc0FwcFwiLCBcImNhc2VzQXBwXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsb2NrXCIsIFwiY2xvdWREcml6emxlXCIsIFwiY2xvdWRTdG9ybXlcIiwgXCJjbG91ZFN1bm55XCIsIFwiY2x1c3RlclwiLCBcImNvZGVBcHBcIiwgXCJjb2xvclwiLCBcImNvbXB1dGVcIiwgXCJjb25zb2xlXCIsIFwiY29uc29sZUFwcFwiLCBcImNvbnRhaW5lclwiLCBcImNvbnRpbnVpdHlBYm92ZVwiLCBcImNvbnRpbnVpdHlBYm92ZUJlbG93XCIsIFwiY29udGludWl0eUJlbG93XCIsIFwiY29udGludWl0eVdpdGhpblwiLCBcImNvbnRyb2xzSG9yaXpvbnRhbFwiLCBcImNvbnRyb2xzVmVydGljYWxcIiwgXCJjb3B5XCIsIFwiY29weUNsaXBib2FyZFwiLCBcImNyZWF0ZUFkdmFuY2VkSm9iXCIsIFwiY3JlYXRlTXVsdGlNZXRyaWNKb2JcIiwgXCJjcmVhdGVQb3B1bGF0aW9uSm9iXCIsIFwiY3JlYXRlU2luZ2xlTWV0cmljSm9iXCIsIFwiY3Jvc3NcIiwgXCJjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcFwiLCBcImNyb3NzSW5BQ2lyY2xlRmlsbGVkXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpc2NvdmVyQXBwXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG91YmxlQXJyb3dMZWZ0XCIsIFwiZG91YmxlQXJyb3dSaWdodFwiLCBcImRvd25sb2FkXCIsIFwiZWRpdG9yQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JBbGlnbkxlZnRcIiwgXCJlZGl0b3JBbGlnblJpZ2h0XCIsIFwiZWRpdG9yQm9sZFwiLCBcImVkaXRvckNoZWNrbGlzdFwiLCBcImVkaXRvckNvZGVCbG9ja1wiLCBcImVkaXRvckNvbW1lbnRcIiwgXCJlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbFwiLCBcImVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbFwiLCBcImVkaXRvckhlYWRpbmdcIiwgXCJlZGl0b3JJdGFsaWNcIiwgXCJlZGl0b3JJdGVtQWxpZ25Cb3R0b21cIiwgXCJlZGl0b3JJdGVtQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JJdGVtQWxpZ25MZWZ0XCIsIFwiZWRpdG9ySXRlbUFsaWduTWlkZGxlXCIsIFwiZWRpdG9ySXRlbUFsaWduUmlnaHRcIiwgXCJlZGl0b3JJdGVtQWxpZ25Ub3BcIiwgXCJlZGl0b3JMaW5rXCIsIFwiZWRpdG9yT3JkZXJlZExpc3RcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnRcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BMZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BSaWdodFwiLCBcImVkaXRvclJlZG9cIiwgXCJlZGl0b3JTdHJpa2VcIiwgXCJlZGl0b3JUYWJsZVwiLCBcImVkaXRvclVuZGVybGluZVwiLCBcImVkaXRvclVuZG9cIiwgXCJlZGl0b3JVbm9yZGVyZWRMaXN0XCIsIFwiZW1haWxcIiwgXCJlbXB0eVwiLCBcImVtc0FwcFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibW9iaWxlXCIsIFwibW9uaXRvcmluZ0FwcFwiLCBcIm1vb25cIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFwZXJDbGlwXCIsIFwicGFydGlhbFwiLCBcInBhdXNlXCIsIFwicGF5bWVudFwiLCBcInBlbmNpbFwiLCBcInBlcmNlbnRcIiwgXCJwaW5cIiwgXCJwaW5GaWxsZWRcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBsYXlcIiwgXCJwbGF5RmlsbGVkXCIsIFwicGx1c1wiLCBcInBsdXNJbkNpcmNsZVwiLCBcInBsdXNJbkNpcmNsZUZpbGxlZFwiLCBcInBvcG91dFwiLCBcInB1c2hcIiwgXCJxdWVzdGlvbkluQ2lyY2xlXCIsIFwicXVvdGVcIiwgXCJyZWNlbnRseVZpZXdlZEFwcFwiLCBcInJlZnJlc2hcIiwgXCJyZWdyZXNzaW9uSm9iXCIsIFwicmVwb3J0ZXJcIiwgXCJyZXBvcnRpbmdBcHBcIiwgXCJyZXR1cm5LZXlcIiwgXCJzYXZlXCIsIFwic2F2ZWRPYmplY3RzQXBwXCIsIFwic2NhbGVcIiwgXCJzZWFyY2hcIiwgXCJzZWFyY2hQcm9maWxlckFwcFwiLCBcInNlY3VyaXR5QW5hbHl0aWNzQXBwXCIsIFwic2VjdXJpdHlBcHBcIiwgXCJzZWN1cml0eVNpZ25hbFwiLCBcInNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWRcIiwgXCJzZWN1cml0eVNpZ25hbFJlc29sdmVkXCIsIFwic2Vzc2lvblZpZXdlclwiLCBcInNoYXJkXCIsIFwic2hhcmVcIiwgXCJzbm93Zmxha2VcIiwgXCJzb3J0RG93blwiLCBcInNvcnRMZWZ0XCIsIFwic29ydFJpZ2h0XCIsIFwic29ydFVwXCIsIFwic29ydGFibGVcIiwgXCJzcGFjZXNBcHBcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EZW5zZVZlY3RvclwiLCBcInRva2VuRWxlbWVudFwiLCBcInRva2VuRW51bVwiLCBcInRva2VuRW51bU1lbWJlclwiLCBcInRva2VuRXZlbnRcIiwgXCJ0b2tlbkV4Y2VwdGlvblwiLCBcInRva2VuRmllbGRcIiwgXCJ0b2tlbkZpbGVcIiwgXCJ0b2tlbkZsYXR0ZW5lZFwiLCBcInRva2VuRnVuY3Rpb25cIiwgXCJ0b2tlbkdlb1wiLCBcInRva2VuSGlzdG9ncmFtXCIsIFwidG9rZW5JbnRlcmZhY2VcIiwgXCJ0b2tlbklQXCIsIFwidG9rZW5Kb2luXCIsIFwidG9rZW5LZXlcIiwgXCJ0b2tlbktleXdvcmRcIiwgXCJ0b2tlbk1ldGhvZFwiLCBcInRva2VuTWV0cmljQ291bnRlclwiLCBcInRva2VuTWV0cmljR2F1Z2VcIiwgXCJ0b2tlbk1vZHVsZVwiLCBcInRva2VuTmFtZXNwYWNlXCIsIFwidG9rZW5OZXN0ZWRcIiwgXCJ0b2tlbk51bGxcIiwgXCJ0b2tlbk51bWJlclwiLCBcInRva2VuT2JqZWN0XCIsIFwidG9rZW5PcGVyYXRvclwiLCBcInRva2VuUGFja2FnZVwiLCBcInRva2VuUGFyYW1ldGVyXCIsIFwidG9rZW5QZXJjb2xhdG9yXCIsIFwidG9rZW5Qcm9wZXJ0eVwiLCBcInRva2VuUmFuZ2VcIiwgXCJ0b2tlblJhbmtGZWF0dXJlXCIsIFwidG9rZW5SYW5rRmVhdHVyZXNcIiwgXCJ0b2tlblJlcG9cIiwgXCJ0b2tlblNlYXJjaFR5cGVcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkXSksXG5cbiAgICAvKipcbiAgICAgICAqIENhbiBvbmx5IGJlIG9uZSBzaWRlIGBsZWZ0YCBvciBgcmlnaHRgXG4gICAgICAgKi9cbiAgICBpY29uU2lkZTogUHJvcFR5cGVzLm9uZU9mKFtcImxlZnRcIiwgXCJyaWdodFwiXSksXG5cbiAgICAvKipcbiAgICAgICAqIE9iamVjdCBvZiBwcm9wcyBwYXNzZWQgdG8gdGhlIDxzcGFuLz4gd3JhcHBpbmcgdGhlIGNvbnRlbnQncyB0ZXh0IChvbmx5IGlmIHRoZSBjaGlsZHJlbiBpcyBhIGBzdHJpbmdgKVxuICAgICAgICogSXQgZG9lc24ndCBhcHBseSB0byB0aGUgaWNvbi5cbiAgICAgICAqL1xuICAgIHRleHRQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgcmVmOiBQcm9wVHlwZXMuYW55LFxuICAgICAgXCJkYXRhLXRleHRcIjogUHJvcFR5cGVzLnN0cmluZ1xuICAgIH0pLFxuICAgIGljb25TaXplOiBQcm9wVHlwZXMub25lT2YoW1wic1wiLCBcIm1cIl0pLFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbiAgfSksXG5cbiAgLyoqXG4gICAgICAgKiBVc2UgYSBib3JkZXIgc3R5bGUgb2YgY2FyZCBpbnN0ZWFkIG9mIHNoYWRvd1xuICAgICAgICovXG4gIGhhc0JvcmRlcjogUHJvcFR5cGVzLmJvb2xcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJpc1NlbGVjdGVkXCIsIFwiaXNEaXNhYmxlZFwiLCBcImNvbG9yXCIsIFwiY2hpbGRyZW5cIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBFdWlCdXR0b25FbXB0eSB9IGZyb20gJy4uL2J1dHRvbi9idXR0b25fZW1wdHknO1xuaW1wb3J0IHsgRXVpSTE4biB9IGZyb20gJy4uL2kxOG4nO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpQ2FyZFNlbGVjdCA9IGZ1bmN0aW9uIEV1aUNhcmRTZWxlY3QoX3JlZikge1xuICB2YXIgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBfcmVmJGlzU2VsZWN0ZWQgPSBfcmVmLmlzU2VsZWN0ZWQsXG4gICAgICBpc1NlbGVjdGVkID0gX3JlZiRpc1NlbGVjdGVkID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkaXNTZWxlY3RlZCxcbiAgICAgIGlzRGlzYWJsZWQgPSBfcmVmLmlzRGlzYWJsZWQsXG4gICAgICBjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGNoaWxkID0gZXVpQ2FyZFNlbGVjdGFibGVUZXh0KGlzU2VsZWN0ZWQsIGlzRGlzYWJsZWQsIGNoaWxkcmVuKTtcbiAgdmFyIHNlbGVjdENsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlDYXJkU2VsZWN0JywgXCJldWlDYXJkU2VsZWN0LS1cIi5jb25jYXQoZXVpQ2FyZFNlbGVjdGFibGVDb2xvcihjb2xvciwgaXNTZWxlY3RlZCkpLCBjbGFzc05hbWUpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlCdXR0b25FbXB0eSwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogc2VsZWN0Q2xhc3NlcyxcbiAgICBjb2xvcjogY29sb3IgfHwgJ3RleHQnLFxuICAgIHNpemU6IFwieHNcIixcbiAgICBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLFxuICAgIGljb25UeXBlOiBpc1NlbGVjdGVkID8gJ2NoZWNrJyA6IHVuZGVmaW5lZCxcbiAgICByb2xlOiBcInN3aXRjaFwiLFxuICAgIFwiYXJpYS1jaGVja2VkXCI6IGlzU2VsZWN0ZWRcbiAgfSwgcmVzdCksIGNoaWxkKTtcbn07XG5FdWlDYXJkU2VsZWN0LnByb3BUeXBlcyA9IHtcbiAgaHJlZjogUHJvcFR5cGVzLnN0cmluZyxcbiAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAgICogQW55IG9mIG91ciBuYW1lZCBjb2xvcnNcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBBbnkgb2Ygb3VyIG5hbWVkIGNvbG9yc1xuICAgICAqL1xuICBjb2xvcjogUHJvcFR5cGVzLm9uZU9mKFtcInByaW1hcnlcIiwgXCJkYW5nZXJcIiwgXCJ0ZXh0XCIsIFwiZ2hvc3RcIiwgXCJzdWNjZXNzXCIsIFwid2FybmluZ1wiXSksXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZihbXCJ4c1wiLCBcInNcIiwgXCJtXCJdKSxcblxuICAvKipcbiAgICAgKiBFbnN1cmUgdGhlIHRleHQgb2YgdGhlIGJ1dHRvbiBzaXRzIGZsdXNoIHRvIHRoZSBsZWZ0LCByaWdodCwgb3IgYm90aCBzaWRlcyBvZiBpdHMgY29udGFpbmVyXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogRW5zdXJlIHRoZSB0ZXh0IG9mIHRoZSBidXR0b24gc2l0cyBmbHVzaCB0byB0aGUgbGVmdCwgcmlnaHQsIG9yIGJvdGggc2lkZXMgb2YgaXRzIGNvbnRhaW5lclxuICAgICAqL1xuICBmbHVzaDogUHJvcFR5cGVzLm9uZU9mKFtcImxlZnRcIiwgXCJyaWdodFwiLCBcImJvdGhcIl0pLFxuXG4gIC8qKlxuICAgICAqIGBkaXNhYmxlZGAgaXMgYWxzbyBhbGxvd2VkXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogYGRpc2FibGVkYCBpcyBhbHNvIGFsbG93ZWRcbiAgICAgKi9cbiAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogRm9yY2UgZGlzYWJsZXMgdGhlIGJ1dHRvbiBhbmQgY2hhbmdlcyB0aGUgaWNvbiB0byBhIGxvYWRpbmcgc3Bpbm5lclxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIEZvcmNlIGRpc2FibGVzIHRoZSBidXR0b24gYW5kIGNoYW5nZXMgdGhlIGljb24gdG8gYSBsb2FkaW5nIHNwaW5uZXJcbiAgICAgKi9cbiAgaXNMb2FkaW5nOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBJcyBpbiB0aGUgc2VsZWN0ZWQgc3RhdGVcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBBcHBsaWVzIHRoZSBib29sZWFuIHN0YXRlIGFzIHRoZSBgYXJpYS1wcmVzc2VkYCBwcm9wZXJ0eSB0byBjcmVhdGUgYSB0b2dnbGUgYnV0dG9uLlxuICAgICAqICpPbmx5IHVzZSB3aGVuIHRoZSByZWFkYWJsZSB0ZXh0IGRvZXMgbm90IGNoYW5nZSBiZXR3ZWVuIHN0YXRlcy4qXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogQXBwbGllcyB0aGUgYm9vbGVhbiBzdGF0ZSBhcyB0aGUgYGFyaWEtcHJlc3NlZGAgcHJvcGVydHkgdG8gY3JlYXRlIGEgdG9nZ2xlIGJ1dHRvbi5cbiAgICAgKiAqT25seSB1c2Ugd2hlbiB0aGUgcmVhZGFibGUgdGV4dCBkb2VzIG5vdCBjaGFuZ2UgYmV0d2VlbiBzdGF0ZXMuKlxuICAgICAqL1xuICBpc1NlbGVjdGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgdGFyZ2V0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICByZWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHR5cGU6IFByb3BUeXBlcy5vbmVPZihbXCJidXR0b25cIiwgXCJzdWJtaXRcIl0pLFxuICBidXR0b25SZWY6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogT2JqZWN0IG9mIHByb3BzIHBhc3NlZCB0byB0aGUgPHNwYW4vPiB3cmFwcGluZyB0aGUgYnV0dG9uJ3MgY29udGVudFxuICAgICAqL1xuICBjb250ZW50UHJvcHM6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogQW55IGB0eXBlYCBhY2NlcHRlZCBieSBFdWlJY29uXG4gICAgICovXG4gIGljb25UeXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbGVydFwiLCBcImFuYWx5emVFdmVudFwiLCBcImFubm90YXRpb25cIiwgXCJhcG1BcHBcIiwgXCJhcG1UcmFjZVwiLCBcImFwcFNlYXJjaEFwcFwiLCBcImFwcHNcIiwgXCJhcnJvd0Rvd25cIiwgXCJhcnJvd0xlZnRcIiwgXCJhcnJvd1JpZ2h0XCIsIFwiYXJyb3dVcFwiLCBcImFycm93U3RhcnRcIiwgXCJhcnJvd0VuZFwiLCBcImFzdGVyaXNrXCIsIFwiYXVkaXRiZWF0QXBwXCIsIFwiYmVha2VyXCIsIFwiYmVsbFwiLCBcImJlbGxTbGFzaFwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGVja1wiLCBcImNoZWNrSW5DaXJjbGVGaWxsZWRcIiwgXCJjaGVlclwiLCBcImNsYXNzaWZpY2F0aW9uSm9iXCIsIFwiY2xvY2tcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkFDaXJjbGVGaWxsZWRcIiwgXCJjcm9zc2hhaXJzXCIsIFwiY3VycmVuY3lcIiwgXCJjdXRcIiwgXCJkYXNoYm9hcmRBcHBcIiwgXCJkYXRhVmlzdWFsaXplclwiLCBcImRhdGFiYXNlXCIsIFwiZGVza3RvcFwiLCBcImRldlRvb2xzQXBwXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZXFsXCIsIFwiZXJhc2VyXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZsYWdcIiwgXCJmbGVldEFwcFwiLCBcImZvbGRcIiwgXCJmb2xkZXJDaGVja1wiLCBcImZvbGRlckNsb3NlZFwiLCBcImZvbGRlckV4Y2xhbWF0aW9uXCIsIFwiZm9sZGVyT3BlblwiLCBcImZyYW1lTmV4dFwiLCBcImZyYW1lUHJldmlvdXNcIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFNjcmVlbkV4aXRcIiwgXCJmdW5jdGlvblwiLCBcImdlYXJcIiwgXCJnaXNBcHBcIiwgXCJnbGFzc2VzXCIsIFwiZ2xvYmVcIiwgXCJncmFiXCIsIFwiZ3JhYkhvcml6b250YWxcIiwgXCJncmFwaEFwcFwiLCBcImdyaWRcIiwgXCJncm9rQXBwXCIsIFwiaGVhcnRcIiwgXCJoZWFydGJlYXRBcHBcIiwgXCJoZWF0bWFwXCIsIFwiaGVscFwiLCBcImhvbWVcIiwgXCJpSW5DaXJjbGVcIiwgXCJpbWFnZVwiLCBcImltcG9ydEFjdGlvblwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5wdXRPdXRwdXRcIiwgXCJpbnNwZWN0XCIsIFwiaW52ZXJ0XCIsIFwiaXBcIiwgXCJrZXlib2FyZFwiLCBcImtxbEZpZWxkXCIsIFwia3FsRnVuY3Rpb25cIiwgXCJrcWxPcGVyYW5kXCIsIFwia3FsU2VsZWN0b3JcIiwgXCJrcWxWYWx1ZVwiLCBcImt1YmVybmV0ZXNOb2RlXCIsIFwia3ViZXJuZXRlc1BvZFwiLCBcImxheWVyc1wiLCBcImxlbnNBcHBcIiwgXCJsZXR0ZXJpbmdcIiwgXCJsaW5lRGFzaGVkXCIsIFwibGluZURvdHRlZFwiLCBcImxpbmVTb2xpZFwiLCBcImxpbmtcIiwgXCJsaXN0XCIsIFwibGlzdEFkZFwiLCBcImxvY2tcIiwgXCJsb2NrT3BlblwiLCBcImxvZ29BV1NcIiwgXCJsb2dvQVdTTW9ub1wiLCBcImxvZ29BZXJvc3Bpa2VcIiwgXCJsb2dvQXBhY2hlXCIsIFwibG9nb0FwcFNlYXJjaFwiLCBcImxvZ29BenVyZVwiLCBcImxvZ29BenVyZU1vbm9cIiwgXCJsb2dvQmVhdHNcIiwgXCJsb2dvQnVzaW5lc3NBbmFseXRpY3NcIiwgXCJsb2dvQ2VwaFwiLCBcImxvZ29DbG91ZFwiLCBcImxvZ29DbG91ZEVudGVycHJpc2VcIiwgXCJsb2dvQ29kZVwiLCBcImxvZ29Db2Rlc2FuZGJveFwiLCBcImxvZ29Db3VjaGJhc2VcIiwgXCJsb2dvRG9ja2VyXCIsIFwibG9nb0Ryb3B3aXphcmRcIiwgXCJsb2dvRWxhc3RpY1wiLCBcImxvZ29FbGFzdGljU3RhY2tcIiwgXCJsb2dvRWxhc3RpY3NlYXJjaFwiLCBcImxvZ29FbnRlcnByaXNlU2VhcmNoXCIsIFwibG9nb0V0Y2RcIiwgXCJsb2dvR0NQXCIsIFwibG9nb0dDUE1vbm9cIiwgXCJsb2dvR2l0aHViXCIsIFwibG9nb0dtYWlsXCIsIFwibG9nb0dvbGFuZ1wiLCBcImxvZ29Hb29nbGVHXCIsIFwibG9nb0hBcHJveHlcIiwgXCJsb2dvSUJNXCIsIFwibG9nb0lCTU1vbm9cIiwgXCJsb2dvS2Fma2FcIiwgXCJsb2dvS2liYW5hXCIsIFwibG9nb0t1YmVybmV0ZXNcIiwgXCJsb2dvTG9nZ2luZ1wiLCBcImxvZ29Mb2dzdGFzaFwiLCBcImxvZ29NYXBzXCIsIFwibG9nb01lbWNhY2hlZFwiLCBcImxvZ29NZXRyaWNzXCIsIFwibG9nb01vbmdvZGJcIiwgXCJsb2dvTXlTUUxcIiwgXCJsb2dvTmdpbnhcIiwgXCJsb2dvT2JzZXJ2YWJpbGl0eVwiLCBcImxvZ29Pc3F1ZXJ5XCIsIFwibG9nb1BocFwiLCBcImxvZ29Qb3N0Z3Jlc1wiLCBcImxvZ29Qcm9tZXRoZXVzXCIsIFwibG9nb1JhYmJpdG1xXCIsIFwibG9nb1JlZGlzXCIsIFwibG9nb1NlY3VyaXR5XCIsIFwibG9nb1NpdGVTZWFyY2hcIiwgXCJsb2dvU2tldGNoXCIsIFwibG9nb1NsYWNrXCIsIFwibG9nb1VwdGltZVwiLCBcImxvZ29XZWJob29rXCIsIFwibG9nb1dpbmRvd3NcIiwgXCJsb2dvV29ya3BsYWNlU2VhcmNoXCIsIFwibG9nc0FwcFwiLCBcImxvZ3N0YXNoRmlsdGVyXCIsIFwibG9nc3Rhc2hJZlwiLCBcImxvZ3N0YXNoSW5wdXRcIiwgXCJsb2dzdGFzaE91dHB1dFwiLCBcImxvZ3N0YXNoUXVldWVcIiwgXCJtYWNoaW5lTGVhcm5pbmdBcHBcIiwgXCJtYWduZXRcIiwgXCJtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uXCIsIFwibWFnbmlmeVdpdGhNaW51c1wiLCBcIm1hZ25pZnlXaXRoUGx1c1wiLCBcIm1hbmFnZW1lbnRBcHBcIiwgXCJtYXBNYXJrZXJcIiwgXCJtZW1vcnlcIiwgXCJtZW51XCIsIFwibWVudURvd25cIiwgXCJtZW51TGVmdFwiLCBcIm1lbnVSaWdodFwiLCBcIm1lbnVVcFwiLCBcIm1lcmdlXCIsIFwibWV0cmljYmVhdEFwcFwiLCBcIm1ldHJpY3NBcHBcIiwgXCJtaW5pbWl6ZVwiLCBcIm1pbnVzXCIsIFwibWludXNJbkNpcmNsZVwiLCBcIm1pbnVzSW5DaXJjbGVGaWxsZWRcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5vZGVcIiwgXCJub3RlYm9va0FwcFwiLCBcIm51bWJlclwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIiwgXCJvdXRsaWVyRGV0ZWN0aW9uSm9iXCIsIFwicGFja2FnZVwiLCBcInBhY2tldGJlYXRBcHBcIiwgXCJwYWdlU2VsZWN0XCIsIFwicGFnZXNTZWxlY3RcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVsaW5lQXBwXCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNub3dmbGFrZVwiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc0FwcFwiLCBcInNxbEFwcFwiLCBcInN0YXJFbXB0eVwiLCBcInN0YXJFbXB0eVNwYWNlXCIsIFwic3RhckZpbGxlZFwiLCBcInN0YXJGaWxsZWRTcGFjZVwiLCBcInN0YXJNaW51c0VtcHR5XCIsIFwic3Rhck1pbnVzRmlsbGVkXCIsIFwic3RhclBsdXNFbXB0eVwiLCBcInN0YXJQbHVzRmlsbGVkXCIsIFwic3RhdHNcIiwgXCJzdG9wXCIsIFwic3RvcEZpbGxlZFwiLCBcInN0b3BTbGFzaFwiLCBcInN0b3JhZ2VcIiwgXCJzdHJpbmdcIiwgXCJzdWJtb2R1bGVcIiwgXCJzdW5cIiwgXCJzd2F0Y2hJbnB1dFwiLCBcInN5bWxpbmtcIiwgXCJ0YWJsZURlbnNpdHlDb21wYWN0XCIsIFwidGFibGVEZW5zaXR5RXhwYW5kZWRcIiwgXCJ0YWJsZURlbnNpdHlOb3JtYWxcIiwgXCJ0YWJsZU9mQ29udGVudHNcIiwgXCJ0YWdcIiwgXCJ0ZWFyXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJ0aW1lbGluZVwiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFzaFwiLCBcInVuZm9sZFwiLCBcInVubGlua1wiLCBcInVwZ3JhZGVBc3Npc3RhbnRBcHBcIiwgXCJ1cHRpbWVBcHBcIiwgXCJ1c2VyXCIsIFwidXNlckF2YXRhclwiLCBcInVzZXJzXCIsIFwidXNlcnNSb2xlc0FwcFwiLCBcInZlY3RvclwiLCBcInZpZGVvUGxheWVyXCIsIFwidmlzQXJlYVwiLCBcInZpc0FyZWFTdGFja2VkXCIsIFwidmlzQmFySG9yaXpvbnRhbFwiLCBcInZpc0Jhckhvcml6b250YWxTdGFja2VkXCIsIFwidmlzQmFyVmVydGljYWxcIiwgXCJ2aXNCYXJWZXJ0aWNhbFN0YWNrZWRcIiwgXCJ2aXNHYXVnZVwiLCBcInZpc0dvYWxcIiwgXCJ2aXNMaW5lXCIsIFwidmlzTWFwQ29vcmRpbmF0ZVwiLCBcInZpc01hcFJlZ2lvblwiLCBcInZpc01ldHJpY1wiLCBcInZpc1BpZVwiLCBcInZpc1RhYmxlXCIsIFwidmlzVGFnQ2xvdWRcIiwgXCJ2aXNUZXh0XCIsIFwidmlzVGltZWxpb25cIiwgXCJ2aXNWZWdhXCIsIFwidmlzVmlzdWFsQnVpbGRlclwiLCBcInZpc3VhbGl6ZUFwcFwiLCBcIndhdGNoZXNBcHBcIiwgXCJ3b3JkV3JhcFwiLCBcIndvcmRXcmFwRGlzYWJsZWRcIiwgXCJ3b3JrcGxhY2VTZWFyY2hBcHBcIiwgXCJ3cmVuY2hcIiwgXCJ0b2tlbkFsaWFzXCIsIFwidG9rZW5Bbm5vdGF0aW9uXCIsIFwidG9rZW5BcnJheVwiLCBcInRva2VuQmluYXJ5XCIsIFwidG9rZW5Cb29sZWFuXCIsIFwidG9rZW5DbGFzc1wiLCBcInRva2VuQ29tcGxldGlvblN1Z2dlc3RlclwiLCBcInRva2VuQ29uc3RhbnRcIiwgXCJ0b2tlbkRhdGVcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2hhcGVcIiwgXCJ0b2tlblN0cmluZ1wiLCBcInRva2VuU3RydWN0XCIsIFwidG9rZW5TeW1ib2xcIiwgXCJ0b2tlblRhZ1wiLCBcInRva2VuVGV4dFwiLCBcInRva2VuVG9rZW5Db3VudFwiLCBcInRva2VuVmFyaWFibGVcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWRdKSxcblxuICAvKipcbiAgICAgKiBDYW4gb25seSBiZSBvbmUgc2lkZSBgbGVmdGAgb3IgYHJpZ2h0YFxuICAgICAqL1xuICBpY29uU2lkZTogUHJvcFR5cGVzLm9uZU9mKFtcImxlZnRcIiwgXCJyaWdodFwiXSksXG5cbiAgLyoqXG4gICAgICogT2JqZWN0IG9mIHByb3BzIHBhc3NlZCB0byB0aGUgPHNwYW4vPiB3cmFwcGluZyB0aGUgY29udGVudCdzIHRleHQgKG9ubHkgaWYgdGhlIGNoaWxkcmVuIGlzIGEgYHN0cmluZ2ApXG4gICAgICogSXQgZG9lc24ndCBhcHBseSB0byB0aGUgaWNvbi5cbiAgICAgKi9cbiAgdGV4dFByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgcmVmOiBQcm9wVHlwZXMuYW55LFxuICAgIFwiZGF0YS10ZXh0XCI6IFByb3BUeXBlcy5zdHJpbmdcbiAgfSksXG4gIGljb25TaXplOiBQcm9wVHlwZXMub25lT2YoW1wic1wiLCBcIm1cIl0pLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbn07XG5cbmZ1bmN0aW9uIGV1aUNhcmRTZWxlY3RhYmxlVGV4dChpc1NlbGVjdGVkLCBpc0Rpc2FibGVkLCBjaGlsZHJlbikge1xuICBpZiAoY2hpbGRyZW4pIHtcbiAgICByZXR1cm4gY2hpbGRyZW47XG4gIH1cblxuICB2YXIgdGV4dDtcblxuICBpZiAoaXNTZWxlY3RlZCkge1xuICAgIHRleHQgPSBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgIHRva2VuOiBcImV1aUNhcmRTZWxlY3Quc2VsZWN0ZWRcIixcbiAgICAgIGRlZmF1bHQ6IFwiU2VsZWN0ZWRcIlxuICAgIH0pO1xuICB9IGVsc2UgaWYgKGlzRGlzYWJsZWQpIHtcbiAgICB0ZXh0ID0gX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICB0b2tlbjogXCJldWlDYXJkU2VsZWN0LnVuYXZhaWxhYmxlXCIsXG4gICAgICBkZWZhdWx0OiBcIlVuYXZhaWxhYmxlXCJcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICB0ZXh0ID0gX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICB0b2tlbjogXCJldWlDYXJkU2VsZWN0LnNlbGVjdFwiLFxuICAgICAgZGVmYXVsdDogXCJTZWxlY3RcIlxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHRleHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBldWlDYXJkU2VsZWN0YWJsZUNvbG9yKGNvbG9yLCBpc1NlbGVjdGVkKSB7XG4gIHZhciBjYWxjdWxhdGVkQ29sb3I7XG5cbiAgaWYgKGNvbG9yKSB7XG4gICAgY2FsY3VsYXRlZENvbG9yID0gY29sb3I7XG4gIH0gZWxzZSBpZiAoaXNTZWxlY3RlZCkge1xuICAgIGNhbGN1bGF0ZWRDb2xvciA9ICdzdWNjZXNzJztcbiAgfSBlbHNlIHtcbiAgICBjYWxjdWxhdGVkQ29sb3IgPSAndGV4dCc7XG4gIH1cblxuICByZXR1cm4gY2FsY3VsYXRlZENvbG9yO1xufSIsICJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbnZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJpZFwiLCBcImNoZWNrZWRcIiwgXCJsYWJlbFwiLCBcIm9uQ2hhbmdlXCIsIFwidHlwZVwiLCBcImRpc2FibGVkXCIsIFwiY29tcHJlc3NlZFwiLCBcImluZGV0ZXJtaW5hdGVcIiwgXCJpbnB1dFJlZlwiLCBcImxhYmVsUHJvcHNcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsga2V5c09mIH0gZnJvbSAnLi4vLi4vY29tbW9uJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgdHlwZVRvQ2xhc3NOYW1lTWFwID0ge1xuICBpbkxpc3Q6ICdldWlDaGVja2JveC0taW5MaXN0J1xufTtcbmV4cG9ydCB2YXIgVFlQRVMgPSBrZXlzT2YodHlwZVRvQ2xhc3NOYW1lTWFwKTtcbmV4cG9ydCB2YXIgRXVpQ2hlY2tib3ggPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEV1aUNoZWNrYm94LCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aUNoZWNrYm94KTtcblxuICBmdW5jdGlvbiBFdWlDaGVja2JveCgpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpQ2hlY2tib3gpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwuYXBwbHkoX3N1cGVyLCBbdGhpc10uY29uY2F0KGFyZ3MpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJpbnB1dFJlZlwiLCB1bmRlZmluZWQpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInNldElucHV0UmVmXCIsIGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgX3RoaXMuaW5wdXRSZWYgPSBpbnB1dDtcblxuICAgICAgaWYgKF90aGlzLnByb3BzLmlucHV0UmVmKSB7XG4gICAgICAgIF90aGlzLnByb3BzLmlucHV0UmVmKGlucHV0KTtcbiAgICAgIH1cblxuICAgICAgX3RoaXMuaW52YWxpZGF0ZUluZGV0ZXJtaW5hdGUoKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdWlDaGVja2JveCwgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICB0aGlzLmludmFsaWRhdGVJbmRldGVybWluYXRlKCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudERpZFVwZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUoKSB7XG4gICAgICB0aGlzLmludmFsaWRhdGVJbmRldGVybWluYXRlKCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzLmNsYXNzTmFtZSxcbiAgICAgICAgICBpZCA9IF90aGlzJHByb3BzLmlkLFxuICAgICAgICAgIGNoZWNrZWQgPSBfdGhpcyRwcm9wcy5jaGVja2VkLFxuICAgICAgICAgIGxhYmVsID0gX3RoaXMkcHJvcHMubGFiZWwsXG4gICAgICAgICAgb25DaGFuZ2UgPSBfdGhpcyRwcm9wcy5vbkNoYW5nZSxcbiAgICAgICAgICB0eXBlID0gX3RoaXMkcHJvcHMudHlwZSxcbiAgICAgICAgICBkaXNhYmxlZCA9IF90aGlzJHByb3BzLmRpc2FibGVkLFxuICAgICAgICAgIGNvbXByZXNzZWQgPSBfdGhpcyRwcm9wcy5jb21wcmVzc2VkLFxuICAgICAgICAgIGluZGV0ZXJtaW5hdGUgPSBfdGhpcyRwcm9wcy5pbmRldGVybWluYXRlLFxuICAgICAgICAgIGlucHV0UmVmID0gX3RoaXMkcHJvcHMuaW5wdXRSZWYsXG4gICAgICAgICAgbGFiZWxQcm9wcyA9IF90aGlzJHByb3BzLmxhYmVsUHJvcHMsXG4gICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wcywgX2V4Y2x1ZGVkKTtcblxuICAgICAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlDaGVja2JveCcsIHR5cGUgJiYgdHlwZVRvQ2xhc3NOYW1lTWFwW3R5cGVdLCB7XG4gICAgICAgICdldWlDaGVja2JveC0tbm9MYWJlbCc6ICFsYWJlbCxcbiAgICAgICAgJ2V1aUNoZWNrYm94LS1jb21wcmVzc2VkJzogY29tcHJlc3NlZFxuICAgICAgfSwgY2xhc3NOYW1lKTtcbiAgICAgIHZhciBsYWJlbENsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlDaGVja2JveF9fbGFiZWwnLCBsYWJlbFByb3BzID09PSBudWxsIHx8IGxhYmVsUHJvcHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGxhYmVsUHJvcHMuY2xhc3NOYW1lKTtcbiAgICAgIHZhciBvcHRpb25hbExhYmVsO1xuXG4gICAgICBpZiAobGFiZWwpIHtcbiAgICAgICAgb3B0aW9uYWxMYWJlbCA9IF9fX0Vtb3Rpb25KU1goXCJsYWJlbFwiLCBfZXh0ZW5kcyh7fSwgbGFiZWxQcm9wcywge1xuICAgICAgICAgIGNsYXNzTmFtZTogbGFiZWxDbGFzc2VzLFxuICAgICAgICAgIGh0bWxGb3I6IGlkXG4gICAgICAgIH0pLCBsYWJlbCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gICAgICB9LCBfX19FbW90aW9uSlNYKFwiaW5wdXRcIiwgX2V4dGVuZHMoe1xuICAgICAgICBjbGFzc05hbWU6IFwiZXVpQ2hlY2tib3hfX2lucHV0XCIsXG4gICAgICAgIHR5cGU6IFwiY2hlY2tib3hcIixcbiAgICAgICAgaWQ6IGlkLFxuICAgICAgICBjaGVja2VkOiBjaGVja2VkLFxuICAgICAgICBvbkNoYW5nZTogb25DaGFuZ2UsXG4gICAgICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICAgICAgcmVmOiB0aGlzLnNldElucHV0UmVmXG4gICAgICB9LCByZXN0KSksIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICBjbGFzc05hbWU6IFwiZXVpQ2hlY2tib3hfX3NxdWFyZVwiXG4gICAgICB9KSwgb3B0aW9uYWxMYWJlbCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImludmFsaWRhdGVJbmRldGVybWluYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGludmFsaWRhdGVJbmRldGVybWluYXRlKCkge1xuICAgICAgaWYgKHRoaXMuaW5wdXRSZWYpIHtcbiAgICAgICAgdGhpcy5pbnB1dFJlZi5pbmRldGVybWluYXRlID0gdGhpcy5wcm9wcy5pbmRldGVybWluYXRlO1xuICAgICAgfVxuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlDaGVja2JveDtcbn0oQ29tcG9uZW50KTtcblxuX2RlZmluZVByb3BlcnR5KEV1aUNoZWNrYm94LCBcImRlZmF1bHRQcm9wc1wiLCB7XG4gIGNoZWNrZWQ6IGZhbHNlLFxuICBkaXNhYmxlZDogZmFsc2UsXG4gIGluZGV0ZXJtaW5hdGU6IGZhbHNlLFxuICBjb21wcmVzc2VkOiBmYWxzZVxufSk7XG5cbkV1aUNoZWNrYm94LnByb3BUeXBlcyA9IHtcbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgY2hlY2tlZDogUHJvcFR5cGVzLmJvb2wsXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsXG4gIC8vIG92ZXJyaWRpbmcgdG8gbWFrZSBpdCByZXF1aXJlZFxuICBpbnB1dFJlZjogUHJvcFR5cGVzLmZ1bmMsXG4gIGxhYmVsOiBQcm9wVHlwZXMubm9kZSxcbiAgdHlwZTogUHJvcFR5cGVzLm9uZU9mKFtcImluTGlzdFwiXSksXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiB3aGVuIGB0cnVlYCBjcmVhdGVzIGEgc2hvcnRlciBoZWlnaHQgY2hlY2tib3ggcm93XG4gICAgICovXG4gIGNvbXByZXNzZWQ6IFByb3BUeXBlcy5ib29sLFxuICBpbmRldGVybWluYXRlOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBPYmplY3Qgb2YgcHJvcHMgcGFzc2VkIHRvIHRoZSA8bGFiZWwvPlxuICAgICAqL1xuICBsYWJlbFByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbiAgfSksXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZ1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiZ3V0dGVyU2l6ZVwiLCBcImFsaWduSXRlbXNcIiwgXCJyZXNwb25zaXZlXCIsIFwianVzdGlmeUNvbnRlbnRcIiwgXCJkaXJlY3Rpb25cIiwgXCJ3cmFwXCIsIFwiY29tcG9uZW50XCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGtleXNPZiB9IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIGd1dHRlclNpemVUb0NsYXNzTmFtZU1hcCA9IHtcbiAgbm9uZTogbnVsbCxcbiAgeHM6ICdldWlGbGV4R3JvdXAtLWd1dHRlckV4dHJhU21hbGwnLFxuICBzOiAnZXVpRmxleEdyb3VwLS1ndXR0ZXJTbWFsbCcsXG4gIG06ICdldWlGbGV4R3JvdXAtLWd1dHRlck1lZGl1bScsXG4gIGw6ICdldWlGbGV4R3JvdXAtLWd1dHRlckxhcmdlJyxcbiAgeGw6ICdldWlGbGV4R3JvdXAtLWd1dHRlckV4dHJhTGFyZ2UnXG59O1xuZXhwb3J0IHZhciBHVVRURVJfU0laRVMgPSBrZXlzT2YoZ3V0dGVyU2l6ZVRvQ2xhc3NOYW1lTWFwKTtcbnZhciBhbGlnbkl0ZW1zVG9DbGFzc05hbWVNYXAgPSB7XG4gIHN0cmV0Y2g6IG51bGwsXG4gIGZsZXhTdGFydDogJ2V1aUZsZXhHcm91cC0tYWxpZ25JdGVtc0ZsZXhTdGFydCcsXG4gIGZsZXhFbmQ6ICdldWlGbGV4R3JvdXAtLWFsaWduSXRlbXNGbGV4RW5kJyxcbiAgY2VudGVyOiAnZXVpRmxleEdyb3VwLS1hbGlnbkl0ZW1zQ2VudGVyJyxcbiAgYmFzZWxpbmU6ICdldWlGbGV4R3JvdXAtLWFsaWduSXRlbXNCYXNlbGluZSdcbn07XG5leHBvcnQgdmFyIEFMSUdOX0lURU1TID0ga2V5c09mKGFsaWduSXRlbXNUb0NsYXNzTmFtZU1hcCk7XG52YXIganVzdGlmeUNvbnRlbnRUb0NsYXNzTmFtZU1hcCA9IHtcbiAgZmxleFN0YXJ0OiBudWxsLFxuICBmbGV4RW5kOiAnZXVpRmxleEdyb3VwLS1qdXN0aWZ5Q29udGVudEZsZXhFbmQnLFxuICBjZW50ZXI6ICdldWlGbGV4R3JvdXAtLWp1c3RpZnlDb250ZW50Q2VudGVyJyxcbiAgc3BhY2VCZXR3ZWVuOiAnZXVpRmxleEdyb3VwLS1qdXN0aWZ5Q29udGVudFNwYWNlQmV0d2VlbicsXG4gIHNwYWNlQXJvdW5kOiAnZXVpRmxleEdyb3VwLS1qdXN0aWZ5Q29udGVudFNwYWNlQXJvdW5kJyxcbiAgc3BhY2VFdmVubHk6ICdldWlGbGV4R3JvdXAtLWp1c3RpZnlDb250ZW50U3BhY2VFdmVubHknXG59O1xuZXhwb3J0IHZhciBKVVNUSUZZX0NPTlRFTlRTID0ga2V5c09mKGp1c3RpZnlDb250ZW50VG9DbGFzc05hbWVNYXApO1xudmFyIGRpcmVjdGlvblRvQ2xhc3NOYW1lTWFwID0ge1xuICByb3c6ICdldWlGbGV4R3JvdXAtLWRpcmVjdGlvblJvdycsXG4gIHJvd1JldmVyc2U6ICdldWlGbGV4R3JvdXAtLWRpcmVjdGlvblJvd1JldmVyc2UnLFxuICBjb2x1bW46ICdldWlGbGV4R3JvdXAtLWRpcmVjdGlvbkNvbHVtbicsXG4gIGNvbHVtblJldmVyc2U6ICdldWlGbGV4R3JvdXAtLWRpcmVjdGlvbkNvbHVtblJldmVyc2UnXG59O1xuZXhwb3J0IHZhciBESVJFQ1RJT05TID0ga2V5c09mKGRpcmVjdGlvblRvQ2xhc3NOYW1lTWFwKTtcblxudmFyIGlzVmFsaWRFbGVtZW50ID0gZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnQoY29tcG9uZW50KSB7XG4gIHJldHVybiBbJ2RpdicsICdzcGFuJ10uaW5jbHVkZXMoY29tcG9uZW50KTtcbn07XG5cbmV4cG9ydCB2YXIgRXVpRmxleEdyb3VwID0gLyojX19QVVJFX18qL2ZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBfcmVmJGd1dHRlclNpemUgPSBfcmVmLmd1dHRlclNpemUsXG4gICAgICBndXR0ZXJTaXplID0gX3JlZiRndXR0ZXJTaXplID09PSB2b2lkIDAgPyAnbCcgOiBfcmVmJGd1dHRlclNpemUsXG4gICAgICBfcmVmJGFsaWduSXRlbXMgPSBfcmVmLmFsaWduSXRlbXMsXG4gICAgICBhbGlnbkl0ZW1zID0gX3JlZiRhbGlnbkl0ZW1zID09PSB2b2lkIDAgPyAnc3RyZXRjaCcgOiBfcmVmJGFsaWduSXRlbXMsXG4gICAgICBfcmVmJHJlc3BvbnNpdmUgPSBfcmVmLnJlc3BvbnNpdmUsXG4gICAgICByZXNwb25zaXZlID0gX3JlZiRyZXNwb25zaXZlID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRyZXNwb25zaXZlLFxuICAgICAgX3JlZiRqdXN0aWZ5Q29udGVudCA9IF9yZWYuanVzdGlmeUNvbnRlbnQsXG4gICAgICBqdXN0aWZ5Q29udGVudCA9IF9yZWYkanVzdGlmeUNvbnRlbnQgPT09IHZvaWQgMCA/ICdmbGV4U3RhcnQnIDogX3JlZiRqdXN0aWZ5Q29udGVudCxcbiAgICAgIF9yZWYkZGlyZWN0aW9uID0gX3JlZi5kaXJlY3Rpb24sXG4gICAgICBkaXJlY3Rpb24gPSBfcmVmJGRpcmVjdGlvbiA9PT0gdm9pZCAwID8gJ3JvdycgOiBfcmVmJGRpcmVjdGlvbixcbiAgICAgIF9yZWYkd3JhcCA9IF9yZWYud3JhcCxcbiAgICAgIHdyYXAgPSBfcmVmJHdyYXAgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiR3cmFwLFxuICAgICAgX3JlZiRjb21wb25lbnQgPSBfcmVmLmNvbXBvbmVudCxcbiAgICAgIGNvbXBvbmVudCA9IF9yZWYkY29tcG9uZW50ID09PSB2b2lkIDAgPyAnZGl2JyA6IF9yZWYkY29tcG9uZW50LFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpRmxleEdyb3VwJywgZ3V0dGVyU2l6ZVRvQ2xhc3NOYW1lTWFwW2d1dHRlclNpemVdLCBhbGlnbkl0ZW1zVG9DbGFzc05hbWVNYXBbYWxpZ25JdGVtc10sIGp1c3RpZnlDb250ZW50VG9DbGFzc05hbWVNYXBbanVzdGlmeUNvbnRlbnRdLCBkaXJlY3Rpb25Ub0NsYXNzTmFtZU1hcFtkaXJlY3Rpb25dLCB7XG4gICAgJ2V1aUZsZXhHcm91cC0tcmVzcG9uc2l2ZSc6IHJlc3BvbnNpdmUsXG4gICAgJ2V1aUZsZXhHcm91cC0td3JhcCc6IHdyYXBcbiAgfSwgY2xhc3NOYW1lKTtcblxuICBpZiAoIWlzVmFsaWRFbGVtZW50KGNvbXBvbmVudCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJcIi5jb25jYXQoY29tcG9uZW50LCBcIiBpcyBub3QgYSB2YWxpZCBlbGVtZW50IHR5cGUuIFVzZSBgZGl2YCBvciBgc3BhbmAuXCIpKTtcbiAgfVxuXG4gIHJldHVybiBjb21wb25lbnQgPT09ICdzcGFuJyA/IF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgcmVmOiByZWZcbiAgfSwgcmVzdCksIGNoaWxkcmVuKSA6IF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICByZWY6IHJlZlxuICB9LCByZXN0KSwgY2hpbGRyZW4pO1xufSk7XG5FdWlGbGV4R3JvdXAucHJvcFR5cGVzID0ge1xuICBhbGlnbkl0ZW1zOiBQcm9wVHlwZXMub25lT2YoW1wic3RyZXRjaFwiLCBcImZsZXhTdGFydFwiLCBcImZsZXhFbmRcIiwgXCJjZW50ZXJcIiwgXCJiYXNlbGluZVwiXSksXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLm9uZU9mKFtcImRpdlwiLCBcInNwYW5cIl0pLFxuICBkaXJlY3Rpb246IFByb3BUeXBlcy5vbmVPZihbXCJyb3dcIiwgXCJyb3dSZXZlcnNlXCIsIFwiY29sdW1uXCIsIFwiY29sdW1uUmV2ZXJzZVwiXSksXG4gIGd1dHRlclNpemU6IFByb3BUeXBlcy5vbmVPZihbXCJub25lXCIsIFwieHNcIiwgXCJzXCIsIFwibVwiLCBcImxcIiwgXCJ4bFwiXSksXG4gIGp1c3RpZnlDb250ZW50OiBQcm9wVHlwZXMub25lT2YoW1wiZmxleFN0YXJ0XCIsIFwiZmxleEVuZFwiLCBcImNlbnRlclwiLCBcInNwYWNlQmV0d2VlblwiLCBcInNwYWNlQXJvdW5kXCIsIFwic3BhY2VFdmVubHlcIl0pLFxuICByZXNwb25zaXZlOiBQcm9wVHlwZXMuYm9vbCxcbiAgd3JhcDogUHJvcFR5cGVzLmJvb2wsXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZ1xufTtcbkV1aUZsZXhHcm91cC5kaXNwbGF5TmFtZSA9ICdFdWlGbGV4R3JvdXAnOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJncm93XCIsIFwiY29tcG9uZW50XCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgR1JPV19TSVpFUyA9IFsxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMF07XG5leHBvcnQgdmFyIEV1aUZsZXhJdGVtID0gZnVuY3Rpb24gRXVpRmxleEl0ZW0oX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBfcmVmJGdyb3cgPSBfcmVmLmdyb3csXG4gICAgICBncm93ID0gX3JlZiRncm93ID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRncm93LFxuICAgICAgX3JlZiRjb21wb25lbnQgPSBfcmVmLmNvbXBvbmVudCxcbiAgICAgIENvbXBvbmVudCA9IF9yZWYkY29tcG9uZW50ID09PSB2b2lkIDAgPyAnZGl2JyA6IF9yZWYkY29tcG9uZW50LFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhbGlkYXRlR3Jvd1ZhbHVlKGdyb3cpO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUZsZXhJdGVtJywgX2RlZmluZVByb3BlcnR5KHtcbiAgICAnZXVpRmxleEl0ZW0tLWZsZXhHcm93WmVybyc6ICFncm93XG4gIH0sIFwiZXVpRmxleEl0ZW0tLWZsZXhHcm93XCIuY29uY2F0KGdyb3cpLCB0eXBlb2YgZ3JvdyA9PT0gJ251bWJlcicgPyBHUk9XX1NJWkVTLmluZGV4T2YoZ3JvdykgPj0gMCA6IHVuZGVmaW5lZCksIGNsYXNzTmFtZSk7XG4gIHJldHVybiAoLy8gQHRzLWlnbm9yZSBkaWZmaWN1bHQgdG8gdmVyaWZ5IGByZXN0YCBhcHBsaWVzIHRvIGBDb21wb25lbnRgXG4gICAgX19fRW1vdGlvbkpTWChDb21wb25lbnQsIF9leHRlbmRzKHtcbiAgICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICAgIH0sIHJlc3QpLCBjaGlsZHJlbilcbiAgKTtcbn07XG5FdWlGbGV4SXRlbS5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgZ3JvdzogUHJvcFR5cGVzLm9uZU9mKFsxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgdHJ1ZSwgZmFsc2UsIG51bGxdKSxcbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuYW55XG59O1xuXG5mdW5jdGlvbiB2YWxpZGF0ZUdyb3dWYWx1ZSh2YWx1ZSkge1xuICB2YXIgdmFsaWRWYWx1ZXMgPSBbbnVsbCwgdW5kZWZpbmVkLCB0cnVlLCBmYWxzZV0uY29uY2F0KEdST1dfU0laRVMpO1xuXG4gIGlmICh2YWxpZFZhbHVlcy5pbmRleE9mKHZhbHVlKSA9PT0gLTEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJQcm9wIGBncm93YCBwYXNzZWQgdG8gYEV1aUZsZXhJdGVtYCBtdXN0IGJlIGEgYm9vbGVhbiBvciBhbiBpbnRlZ2VyIGJldHdlZW4gMSBhbmQgMTAsIHJlY2VpdmVkIGBcIi5jb25jYXQodmFsdWUsIFwiYFwiKSk7XG4gIH1cbn0iLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG52YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJpY29uXCIsIFwiY2xlYXJcIiwgXCJmdWxsV2lkdGhcIiwgXCJpc0xvYWRpbmdcIiwgXCJpc0Rpc2FibGVkXCIsIFwiY29tcHJlc3NlZFwiLCBcImNsYXNzTmFtZVwiLCBcInByZXBlbmRcIiwgXCJhcHBlbmRcIiwgXCJyZWFkT25seVwiLCBcImlzSW52YWxpZFwiLCBcImlzRHJvcGRvd25cIiwgXCJpbnB1dElkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBjbG9uZUVsZW1lbnQsIENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgRXVpRm9ybUNvbnRyb2xMYXlvdXRJY29ucyB9IGZyb20gJy4vZm9ybV9jb250cm9sX2xheW91dF9pY29ucyc7XG5pbXBvcnQgeyBFdWlGb3JtTGFiZWwgfSBmcm9tICcuLi9mb3JtX2xhYmVsJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgeyBJQ09OX1NJREVTIH0gZnJvbSAnLi9mb3JtX2NvbnRyb2xfbGF5b3V0X2ljb25zJztcbmV4cG9ydCB2YXIgRXVpRm9ybUNvbnRyb2xMYXlvdXQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEV1aUZvcm1Db250cm9sTGF5b3V0LCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aUZvcm1Db250cm9sTGF5b3V0KTtcblxuICBmdW5jdGlvbiBFdWlGb3JtQ29udHJvbExheW91dCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpRm9ybUNvbnRyb2xMYXlvdXQpO1xuXG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEV1aUZvcm1Db250cm9sTGF5b3V0LCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzLmNoaWxkcmVuLFxuICAgICAgICAgIGljb24gPSBfdGhpcyRwcm9wcy5pY29uLFxuICAgICAgICAgIGNsZWFyID0gX3RoaXMkcHJvcHMuY2xlYXIsXG4gICAgICAgICAgZnVsbFdpZHRoID0gX3RoaXMkcHJvcHMuZnVsbFdpZHRoLFxuICAgICAgICAgIGlzTG9hZGluZyA9IF90aGlzJHByb3BzLmlzTG9hZGluZyxcbiAgICAgICAgICBpc0Rpc2FibGVkID0gX3RoaXMkcHJvcHMuaXNEaXNhYmxlZCxcbiAgICAgICAgICBjb21wcmVzc2VkID0gX3RoaXMkcHJvcHMuY29tcHJlc3NlZCxcbiAgICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wcy5jbGFzc05hbWUsXG4gICAgICAgICAgcHJlcGVuZCA9IF90aGlzJHByb3BzLnByZXBlbmQsXG4gICAgICAgICAgYXBwZW5kID0gX3RoaXMkcHJvcHMuYXBwZW5kLFxuICAgICAgICAgIHJlYWRPbmx5ID0gX3RoaXMkcHJvcHMucmVhZE9ubHksXG4gICAgICAgICAgaW52YWxpZCA9IF90aGlzJHByb3BzLmlzSW52YWxpZCxcbiAgICAgICAgICBpc0Ryb3Bkb3duID0gX3RoaXMkcHJvcHMuaXNEcm9wZG93bixcbiAgICAgICAgICBpbnB1dElkID0gX3RoaXMkcHJvcHMuaW5wdXRJZCxcbiAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzLCBfZXhjbHVkZWQpO1xuXG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUZvcm1Db250cm9sTGF5b3V0Jywge1xuICAgICAgICAnZXVpRm9ybUNvbnRyb2xMYXlvdXQtLWZ1bGxXaWR0aCc6IGZ1bGxXaWR0aCxcbiAgICAgICAgJ2V1aUZvcm1Db250cm9sTGF5b3V0LS1jb21wcmVzc2VkJzogY29tcHJlc3NlZCxcbiAgICAgICAgJ2V1aUZvcm1Db250cm9sTGF5b3V0LS1yZWFkT25seSc6IHJlYWRPbmx5LFxuICAgICAgICAnZXVpRm9ybUNvbnRyb2xMYXlvdXQtLWdyb3VwJzogcHJlcGVuZCB8fCBhcHBlbmQsXG4gICAgICAgICdldWlGb3JtQ29udHJvbExheW91dC1pc0Rpc2FibGVkJzogaXNEaXNhYmxlZFxuICAgICAgfSwgY2xhc3NOYW1lKTtcbiAgICAgIHZhciBwcmVwZW5kTm9kZXMgPSB0aGlzLnJlbmRlclNpZGVOb2RlKCdwcmVwZW5kJywgcHJlcGVuZCwgaW5wdXRJZCk7XG4gICAgICB2YXIgYXBwZW5kTm9kZXMgPSB0aGlzLnJlbmRlclNpZGVOb2RlKCdhcHBlbmQnLCBhcHBlbmQsIGlucHV0SWQpO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgICAgIH0sIHJlc3QpLCBwcmVwZW5kTm9kZXMsIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICBjbGFzc05hbWU6IFwiZXVpRm9ybUNvbnRyb2xMYXlvdXRfX2NoaWxkcmVuV3JhcHBlclwiXG4gICAgICB9LCBjaGlsZHJlbiwgX19fRW1vdGlvbkpTWChFdWlGb3JtQ29udHJvbExheW91dEljb25zLCB7XG4gICAgICAgIGljb246IGljb24sXG4gICAgICAgIGNsZWFyOiBjbGVhcixcbiAgICAgICAgY29tcHJlc3NlZDogY29tcHJlc3NlZCxcbiAgICAgICAgaXNMb2FkaW5nOiBpc0xvYWRpbmcsXG4gICAgICAgIGlzSW52YWxpZDogaW52YWxpZCxcbiAgICAgICAgaXNEcm9wZG93bjogIXJlYWRPbmx5ICYmICFpc0Rpc2FibGVkICYmIGlzRHJvcGRvd25cbiAgICAgIH0pKSwgYXBwZW5kTm9kZXMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJTaWRlTm9kZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJTaWRlTm9kZShzaWRlLCBub2RlcywgaW5wdXRJZCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgaWYgKCFub2Rlcykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygbm9kZXMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUZvcm1MYWJlbChzaWRlLCBub2RlcywgaW5wdXRJZCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBhcHBlbmROb2RlcyA9IFJlYWN0LkNoaWxkcmVuLm1hcChub2RlcywgZnVuY3Rpb24gKGl0ZW0sIGluZGV4KSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgaXRlbSA9PT0gJ3N0cmluZycgPyBfdGhpcy5jcmVhdGVGb3JtTGFiZWwoc2lkZSwgaXRlbSwgaW5wdXRJZCkgOiBfdGhpcy5jcmVhdGVTaWRlTm9kZShzaWRlLCBpdGVtLCBpbmRleCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBhcHBlbmROb2RlcztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY3JlYXRlRm9ybUxhYmVsXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNyZWF0ZUZvcm1MYWJlbChzaWRlLCBzdHJpbmcsIGlucHV0SWQpIHtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUZvcm1MYWJlbCwge1xuICAgICAgICBodG1sRm9yOiBpbnB1dElkLFxuICAgICAgICBjbGFzc05hbWU6IFwiZXVpRm9ybUNvbnRyb2xMYXlvdXRfX1wiLmNvbmNhdChzaWRlKVxuICAgICAgfSwgc3RyaW5nKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY3JlYXRlU2lkZU5vZGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY3JlYXRlU2lkZU5vZGUoc2lkZSwgbm9kZSwga2V5KSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL2Nsb25lRWxlbWVudChub2RlLCB7XG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lcyhcImV1aUZvcm1Db250cm9sTGF5b3V0X19cIi5jb25jYXQoc2lkZSksIG5vZGUucHJvcHMuY2xhc3NOYW1lKSxcbiAgICAgICAga2V5OiBrZXlcbiAgICAgIH0pO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlGb3JtQ29udHJvbExheW91dDtcbn0oQ29tcG9uZW50KTtcbkV1aUZvcm1Db250cm9sTGF5b3V0LnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAgICogQ3JlYXRlcyBhbiBpbnB1dCBncm91cCB3aXRoIGVsZW1lbnQocykgY29taW5nIGJlZm9yZSBjaGlsZHJlbi5cbiAgICAgICAqIGBzdHJpbmdgIHwgYFJlYWN0RWxlbWVudGAgb3IgYW4gYXJyYXkgb2YgdGhlc2VcbiAgICAgICAqL1xuICBwcmVwZW5kOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkKS5pc1JlcXVpcmVkXSksXG5cbiAgLyoqXG4gICAgICAgKiBDcmVhdGVzIGFuIGlucHV0IGdyb3VwIHdpdGggZWxlbWVudChzKSBjb21pbmcgYWZ0ZXIgY2hpbGRyZW4uXG4gICAgICAgKiBgc3RyaW5nYCB8IGBSZWFjdEVsZW1lbnRgIG9yIGFuIGFycmF5IG9mIHRoZXNlXG4gICAgICAgKi9cbiAgYXBwZW5kOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkKS5pc1JlcXVpcmVkXSksXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgaWNvbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYWxlcnRcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhc3Rlcmlza1wiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJib2x0XCIsIFwiYm94ZXNIb3Jpem9udGFsXCIsIFwiYm94ZXNWZXJ0aWNhbFwiLCBcImJyYW5jaFwiLCBcImJyYW5jaFVzZXJcIiwgXCJicm9vbVwiLCBcImJydXNoXCIsIFwiYnVnXCIsIFwiYnVsbHNleWVcIiwgXCJjYWxlbmRhclwiLCBcImNhbnZhc0FwcFwiLCBcImNhc2VzQXBwXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsb2NrXCIsIFwiY2xvdWREcml6emxlXCIsIFwiY2xvdWRTdG9ybXlcIiwgXCJjbG91ZFN1bm55XCIsIFwiY2x1c3RlclwiLCBcImNvZGVBcHBcIiwgXCJjb2xvclwiLCBcImNvbXB1dGVcIiwgXCJjb25zb2xlXCIsIFwiY29uc29sZUFwcFwiLCBcImNvbnRhaW5lclwiLCBcImNvbnRpbnVpdHlBYm92ZVwiLCBcImNvbnRpbnVpdHlBYm92ZUJlbG93XCIsIFwiY29udGludWl0eUJlbG93XCIsIFwiY29udGludWl0eVdpdGhpblwiLCBcImNvbnRyb2xzSG9yaXpvbnRhbFwiLCBcImNvbnRyb2xzVmVydGljYWxcIiwgXCJjb3B5XCIsIFwiY29weUNsaXBib2FyZFwiLCBcImNyZWF0ZUFkdmFuY2VkSm9iXCIsIFwiY3JlYXRlTXVsdGlNZXRyaWNKb2JcIiwgXCJjcmVhdGVQb3B1bGF0aW9uSm9iXCIsIFwiY3JlYXRlU2luZ2xlTWV0cmljSm9iXCIsIFwiY3Jvc3NcIiwgXCJjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcFwiLCBcImNyb3NzSW5BQ2lyY2xlRmlsbGVkXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpc2NvdmVyQXBwXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG91YmxlQXJyb3dMZWZ0XCIsIFwiZG91YmxlQXJyb3dSaWdodFwiLCBcImRvd25sb2FkXCIsIFwiZWRpdG9yQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JBbGlnbkxlZnRcIiwgXCJlZGl0b3JBbGlnblJpZ2h0XCIsIFwiZWRpdG9yQm9sZFwiLCBcImVkaXRvckNoZWNrbGlzdFwiLCBcImVkaXRvckNvZGVCbG9ja1wiLCBcImVkaXRvckNvbW1lbnRcIiwgXCJlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbFwiLCBcImVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbFwiLCBcImVkaXRvckhlYWRpbmdcIiwgXCJlZGl0b3JJdGFsaWNcIiwgXCJlZGl0b3JJdGVtQWxpZ25Cb3R0b21cIiwgXCJlZGl0b3JJdGVtQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JJdGVtQWxpZ25MZWZ0XCIsIFwiZWRpdG9ySXRlbUFsaWduTWlkZGxlXCIsIFwiZWRpdG9ySXRlbUFsaWduUmlnaHRcIiwgXCJlZGl0b3JJdGVtQWxpZ25Ub3BcIiwgXCJlZGl0b3JMaW5rXCIsIFwiZWRpdG9yT3JkZXJlZExpc3RcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnRcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BMZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BSaWdodFwiLCBcImVkaXRvclJlZG9cIiwgXCJlZGl0b3JTdHJpa2VcIiwgXCJlZGl0b3JUYWJsZVwiLCBcImVkaXRvclVuZGVybGluZVwiLCBcImVkaXRvclVuZG9cIiwgXCJlZGl0b3JVbm9yZGVyZWRMaXN0XCIsIFwiZW1haWxcIiwgXCJlbXB0eVwiLCBcImVtc0FwcFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibW9iaWxlXCIsIFwibW9uaXRvcmluZ0FwcFwiLCBcIm1vb25cIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFwZXJDbGlwXCIsIFwicGFydGlhbFwiLCBcInBhdXNlXCIsIFwicGF5bWVudFwiLCBcInBlbmNpbFwiLCBcInBlcmNlbnRcIiwgXCJwaW5cIiwgXCJwaW5GaWxsZWRcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBsYXlcIiwgXCJwbGF5RmlsbGVkXCIsIFwicGx1c1wiLCBcInBsdXNJbkNpcmNsZVwiLCBcInBsdXNJbkNpcmNsZUZpbGxlZFwiLCBcInBvcG91dFwiLCBcInB1c2hcIiwgXCJxdWVzdGlvbkluQ2lyY2xlXCIsIFwicXVvdGVcIiwgXCJyZWNlbnRseVZpZXdlZEFwcFwiLCBcInJlZnJlc2hcIiwgXCJyZWdyZXNzaW9uSm9iXCIsIFwicmVwb3J0ZXJcIiwgXCJyZXBvcnRpbmdBcHBcIiwgXCJyZXR1cm5LZXlcIiwgXCJzYXZlXCIsIFwic2F2ZWRPYmplY3RzQXBwXCIsIFwic2NhbGVcIiwgXCJzZWFyY2hcIiwgXCJzZWFyY2hQcm9maWxlckFwcFwiLCBcInNlY3VyaXR5QW5hbHl0aWNzQXBwXCIsIFwic2VjdXJpdHlBcHBcIiwgXCJzZWN1cml0eVNpZ25hbFwiLCBcInNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWRcIiwgXCJzZWN1cml0eVNpZ25hbFJlc29sdmVkXCIsIFwic2Vzc2lvblZpZXdlclwiLCBcInNoYXJkXCIsIFwic2hhcmVcIiwgXCJzbm93Zmxha2VcIiwgXCJzb3J0RG93blwiLCBcInNvcnRMZWZ0XCIsIFwic29ydFJpZ2h0XCIsIFwic29ydFVwXCIsIFwic29ydGFibGVcIiwgXCJzcGFjZXNBcHBcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EZW5zZVZlY3RvclwiLCBcInRva2VuRWxlbWVudFwiLCBcInRva2VuRW51bVwiLCBcInRva2VuRW51bU1lbWJlclwiLCBcInRva2VuRXZlbnRcIiwgXCJ0b2tlbkV4Y2VwdGlvblwiLCBcInRva2VuRmllbGRcIiwgXCJ0b2tlbkZpbGVcIiwgXCJ0b2tlbkZsYXR0ZW5lZFwiLCBcInRva2VuRnVuY3Rpb25cIiwgXCJ0b2tlbkdlb1wiLCBcInRva2VuSGlzdG9ncmFtXCIsIFwidG9rZW5JbnRlcmZhY2VcIiwgXCJ0b2tlbklQXCIsIFwidG9rZW5Kb2luXCIsIFwidG9rZW5LZXlcIiwgXCJ0b2tlbktleXdvcmRcIiwgXCJ0b2tlbk1ldGhvZFwiLCBcInRva2VuTWV0cmljQ291bnRlclwiLCBcInRva2VuTWV0cmljR2F1Z2VcIiwgXCJ0b2tlbk1vZHVsZVwiLCBcInRva2VuTmFtZXNwYWNlXCIsIFwidG9rZW5OZXN0ZWRcIiwgXCJ0b2tlbk51bGxcIiwgXCJ0b2tlbk51bWJlclwiLCBcInRva2VuT2JqZWN0XCIsIFwidG9rZW5PcGVyYXRvclwiLCBcInRva2VuUGFja2FnZVwiLCBcInRva2VuUGFyYW1ldGVyXCIsIFwidG9rZW5QZXJjb2xhdG9yXCIsIFwidG9rZW5Qcm9wZXJ0eVwiLCBcInRva2VuUmFuZ2VcIiwgXCJ0b2tlblJhbmtGZWF0dXJlXCIsIFwidG9rZW5SYW5rRmVhdHVyZXNcIiwgXCJ0b2tlblJlcG9cIiwgXCJ0b2tlblNlYXJjaFR5cGVcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICB0eXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbGVydFwiLCBcImFuYWx5emVFdmVudFwiLCBcImFubm90YXRpb25cIiwgXCJhcG1BcHBcIiwgXCJhcG1UcmFjZVwiLCBcImFwcFNlYXJjaEFwcFwiLCBcImFwcHNcIiwgXCJhcnJvd0Rvd25cIiwgXCJhcnJvd0xlZnRcIiwgXCJhcnJvd1JpZ2h0XCIsIFwiYXJyb3dVcFwiLCBcImFycm93U3RhcnRcIiwgXCJhcnJvd0VuZFwiLCBcImFzdGVyaXNrXCIsIFwiYXVkaXRiZWF0QXBwXCIsIFwiYmVha2VyXCIsIFwiYmVsbFwiLCBcImJlbGxTbGFzaFwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGVja1wiLCBcImNoZWNrSW5DaXJjbGVGaWxsZWRcIiwgXCJjaGVlclwiLCBcImNsYXNzaWZpY2F0aW9uSm9iXCIsIFwiY2xvY2tcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkFDaXJjbGVGaWxsZWRcIiwgXCJjcm9zc2hhaXJzXCIsIFwiY3VycmVuY3lcIiwgXCJjdXRcIiwgXCJkYXNoYm9hcmRBcHBcIiwgXCJkYXRhVmlzdWFsaXplclwiLCBcImRhdGFiYXNlXCIsIFwiZGVza3RvcFwiLCBcImRldlRvb2xzQXBwXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZXFsXCIsIFwiZXJhc2VyXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZsYWdcIiwgXCJmbGVldEFwcFwiLCBcImZvbGRcIiwgXCJmb2xkZXJDaGVja1wiLCBcImZvbGRlckNsb3NlZFwiLCBcImZvbGRlckV4Y2xhbWF0aW9uXCIsIFwiZm9sZGVyT3BlblwiLCBcImZyYW1lTmV4dFwiLCBcImZyYW1lUHJldmlvdXNcIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFNjcmVlbkV4aXRcIiwgXCJmdW5jdGlvblwiLCBcImdlYXJcIiwgXCJnaXNBcHBcIiwgXCJnbGFzc2VzXCIsIFwiZ2xvYmVcIiwgXCJncmFiXCIsIFwiZ3JhYkhvcml6b250YWxcIiwgXCJncmFwaEFwcFwiLCBcImdyaWRcIiwgXCJncm9rQXBwXCIsIFwiaGVhcnRcIiwgXCJoZWFydGJlYXRBcHBcIiwgXCJoZWF0bWFwXCIsIFwiaGVscFwiLCBcImhvbWVcIiwgXCJpSW5DaXJjbGVcIiwgXCJpbWFnZVwiLCBcImltcG9ydEFjdGlvblwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5wdXRPdXRwdXRcIiwgXCJpbnNwZWN0XCIsIFwiaW52ZXJ0XCIsIFwiaXBcIiwgXCJrZXlib2FyZFwiLCBcImtxbEZpZWxkXCIsIFwia3FsRnVuY3Rpb25cIiwgXCJrcWxPcGVyYW5kXCIsIFwia3FsU2VsZWN0b3JcIiwgXCJrcWxWYWx1ZVwiLCBcImt1YmVybmV0ZXNOb2RlXCIsIFwia3ViZXJuZXRlc1BvZFwiLCBcImxheWVyc1wiLCBcImxlbnNBcHBcIiwgXCJsZXR0ZXJpbmdcIiwgXCJsaW5lRGFzaGVkXCIsIFwibGluZURvdHRlZFwiLCBcImxpbmVTb2xpZFwiLCBcImxpbmtcIiwgXCJsaXN0XCIsIFwibGlzdEFkZFwiLCBcImxvY2tcIiwgXCJsb2NrT3BlblwiLCBcImxvZ29BV1NcIiwgXCJsb2dvQVdTTW9ub1wiLCBcImxvZ29BZXJvc3Bpa2VcIiwgXCJsb2dvQXBhY2hlXCIsIFwibG9nb0FwcFNlYXJjaFwiLCBcImxvZ29BenVyZVwiLCBcImxvZ29BenVyZU1vbm9cIiwgXCJsb2dvQmVhdHNcIiwgXCJsb2dvQnVzaW5lc3NBbmFseXRpY3NcIiwgXCJsb2dvQ2VwaFwiLCBcImxvZ29DbG91ZFwiLCBcImxvZ29DbG91ZEVudGVycHJpc2VcIiwgXCJsb2dvQ29kZVwiLCBcImxvZ29Db2Rlc2FuZGJveFwiLCBcImxvZ29Db3VjaGJhc2VcIiwgXCJsb2dvRG9ja2VyXCIsIFwibG9nb0Ryb3B3aXphcmRcIiwgXCJsb2dvRWxhc3RpY1wiLCBcImxvZ29FbGFzdGljU3RhY2tcIiwgXCJsb2dvRWxhc3RpY3NlYXJjaFwiLCBcImxvZ29FbnRlcnByaXNlU2VhcmNoXCIsIFwibG9nb0V0Y2RcIiwgXCJsb2dvR0NQXCIsIFwibG9nb0dDUE1vbm9cIiwgXCJsb2dvR2l0aHViXCIsIFwibG9nb0dtYWlsXCIsIFwibG9nb0dvbGFuZ1wiLCBcImxvZ29Hb29nbGVHXCIsIFwibG9nb0hBcHJveHlcIiwgXCJsb2dvSUJNXCIsIFwibG9nb0lCTU1vbm9cIiwgXCJsb2dvS2Fma2FcIiwgXCJsb2dvS2liYW5hXCIsIFwibG9nb0t1YmVybmV0ZXNcIiwgXCJsb2dvTG9nZ2luZ1wiLCBcImxvZ29Mb2dzdGFzaFwiLCBcImxvZ29NYXBzXCIsIFwibG9nb01lbWNhY2hlZFwiLCBcImxvZ29NZXRyaWNzXCIsIFwibG9nb01vbmdvZGJcIiwgXCJsb2dvTXlTUUxcIiwgXCJsb2dvTmdpbnhcIiwgXCJsb2dvT2JzZXJ2YWJpbGl0eVwiLCBcImxvZ29Pc3F1ZXJ5XCIsIFwibG9nb1BocFwiLCBcImxvZ29Qb3N0Z3Jlc1wiLCBcImxvZ29Qcm9tZXRoZXVzXCIsIFwibG9nb1JhYmJpdG1xXCIsIFwibG9nb1JlZGlzXCIsIFwibG9nb1NlY3VyaXR5XCIsIFwibG9nb1NpdGVTZWFyY2hcIiwgXCJsb2dvU2tldGNoXCIsIFwibG9nb1NsYWNrXCIsIFwibG9nb1VwdGltZVwiLCBcImxvZ29XZWJob29rXCIsIFwibG9nb1dpbmRvd3NcIiwgXCJsb2dvV29ya3BsYWNlU2VhcmNoXCIsIFwibG9nc0FwcFwiLCBcImxvZ3N0YXNoRmlsdGVyXCIsIFwibG9nc3Rhc2hJZlwiLCBcImxvZ3N0YXNoSW5wdXRcIiwgXCJsb2dzdGFzaE91dHB1dFwiLCBcImxvZ3N0YXNoUXVldWVcIiwgXCJtYWNoaW5lTGVhcm5pbmdBcHBcIiwgXCJtYWduZXRcIiwgXCJtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uXCIsIFwibWFnbmlmeVdpdGhNaW51c1wiLCBcIm1hZ25pZnlXaXRoUGx1c1wiLCBcIm1hbmFnZW1lbnRBcHBcIiwgXCJtYXBNYXJrZXJcIiwgXCJtZW1vcnlcIiwgXCJtZW51XCIsIFwibWVudURvd25cIiwgXCJtZW51TGVmdFwiLCBcIm1lbnVSaWdodFwiLCBcIm1lbnVVcFwiLCBcIm1lcmdlXCIsIFwibWV0cmljYmVhdEFwcFwiLCBcIm1ldHJpY3NBcHBcIiwgXCJtaW5pbWl6ZVwiLCBcIm1pbnVzXCIsIFwibWludXNJbkNpcmNsZVwiLCBcIm1pbnVzSW5DaXJjbGVGaWxsZWRcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5vZGVcIiwgXCJub3RlYm9va0FwcFwiLCBcIm51bWJlclwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIiwgXCJvdXRsaWVyRGV0ZWN0aW9uSm9iXCIsIFwicGFja2FnZVwiLCBcInBhY2tldGJlYXRBcHBcIiwgXCJwYWdlU2VsZWN0XCIsIFwicGFnZXNTZWxlY3RcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVsaW5lQXBwXCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNub3dmbGFrZVwiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc0FwcFwiLCBcInNxbEFwcFwiLCBcInN0YXJFbXB0eVwiLCBcInN0YXJFbXB0eVNwYWNlXCIsIFwic3RhckZpbGxlZFwiLCBcInN0YXJGaWxsZWRTcGFjZVwiLCBcInN0YXJNaW51c0VtcHR5XCIsIFwic3Rhck1pbnVzRmlsbGVkXCIsIFwic3RhclBsdXNFbXB0eVwiLCBcInN0YXJQbHVzRmlsbGVkXCIsIFwic3RhdHNcIiwgXCJzdG9wXCIsIFwic3RvcEZpbGxlZFwiLCBcInN0b3BTbGFzaFwiLCBcInN0b3JhZ2VcIiwgXCJzdHJpbmdcIiwgXCJzdWJtb2R1bGVcIiwgXCJzdW5cIiwgXCJzd2F0Y2hJbnB1dFwiLCBcInN5bWxpbmtcIiwgXCJ0YWJsZURlbnNpdHlDb21wYWN0XCIsIFwidGFibGVEZW5zaXR5RXhwYW5kZWRcIiwgXCJ0YWJsZURlbnNpdHlOb3JtYWxcIiwgXCJ0YWJsZU9mQ29udGVudHNcIiwgXCJ0YWdcIiwgXCJ0ZWFyXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJ0aW1lbGluZVwiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFzaFwiLCBcInVuZm9sZFwiLCBcInVubGlua1wiLCBcInVwZ3JhZGVBc3Npc3RhbnRBcHBcIiwgXCJ1cHRpbWVBcHBcIiwgXCJ1c2VyXCIsIFwidXNlckF2YXRhclwiLCBcInVzZXJzXCIsIFwidXNlcnNSb2xlc0FwcFwiLCBcInZlY3RvclwiLCBcInZpZGVvUGxheWVyXCIsIFwidmlzQXJlYVwiLCBcInZpc0FyZWFTdGFja2VkXCIsIFwidmlzQmFySG9yaXpvbnRhbFwiLCBcInZpc0Jhckhvcml6b250YWxTdGFja2VkXCIsIFwidmlzQmFyVmVydGljYWxcIiwgXCJ2aXNCYXJWZXJ0aWNhbFN0YWNrZWRcIiwgXCJ2aXNHYXVnZVwiLCBcInZpc0dvYWxcIiwgXCJ2aXNMaW5lXCIsIFwidmlzTWFwQ29vcmRpbmF0ZVwiLCBcInZpc01hcFJlZ2lvblwiLCBcInZpc01ldHJpY1wiLCBcInZpc1BpZVwiLCBcInZpc1RhYmxlXCIsIFwidmlzVGFnQ2xvdWRcIiwgXCJ2aXNUZXh0XCIsIFwidmlzVGltZWxpb25cIiwgXCJ2aXNWZWdhXCIsIFwidmlzVmlzdWFsQnVpbGRlclwiLCBcInZpc3VhbGl6ZUFwcFwiLCBcIndhdGNoZXNBcHBcIiwgXCJ3b3JkV3JhcFwiLCBcIndvcmRXcmFwRGlzYWJsZWRcIiwgXCJ3b3JrcGxhY2VTZWFyY2hBcHBcIiwgXCJ3cmVuY2hcIiwgXCJ0b2tlbkFsaWFzXCIsIFwidG9rZW5Bbm5vdGF0aW9uXCIsIFwidG9rZW5BcnJheVwiLCBcInRva2VuQmluYXJ5XCIsIFwidG9rZW5Cb29sZWFuXCIsIFwidG9rZW5DbGFzc1wiLCBcInRva2VuQ29tcGxldGlvblN1Z2dlc3RlclwiLCBcInRva2VuQ29uc3RhbnRcIiwgXCJ0b2tlbkRhdGVcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2hhcGVcIiwgXCJ0b2tlblN0cmluZ1wiLCBcInRva2VuU3RydWN0XCIsIFwidG9rZW5TeW1ib2xcIiwgXCJ0b2tlblRhZ1wiLCBcInRva2VuVGV4dFwiLCBcInRva2VuVG9rZW5Db3VudFwiLCBcInRva2VuVmFyaWFibGVcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLFxuICAgIHNpZGU6IFByb3BUeXBlcy5hbnksXG4gICAgY29sb3I6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkXSksXG4gICAgcmVmOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRdKVxuICB9KS5pc1JlcXVpcmVkXSksXG4gIGNsZWFyOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgc2l6ZTogUHJvcFR5cGVzLmFueVxuICB9KSxcbiAgZnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbCxcbiAgaXNMb2FkaW5nOiBQcm9wVHlwZXMuYm9vbCxcbiAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGNvbXByZXNzZWQ6IFByb3BUeXBlcy5ib29sLFxuICByZWFkT25seTogUHJvcFR5cGVzLmJvb2wsXG4gIGlzSW52YWxpZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICAgKiBDb250cm9scyB0aGUgYWRkaW5nIG9mIGFuZCB2aXNpYmlsaXR5IG9mIGEgZG93biBhcnJvdyBpY29uXG4gICAgICAgKi9cbiAgaXNEcm9wZG93bjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICAgKiBDb25uZWN0cyB0aGUgcHJlcGVuZCBhbmQgYXBwZW5kIGxhYmVscyB0byB0aGUgaW5wdXRcbiAgICAgICAqL1xuICBpbnB1dElkOiBQcm9wVHlwZXMuc3RyaW5nXG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbnZhciBfZXhjbHVkZWQgPSBbXCJyZWZcIiwgXCJzaWRlXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBGcmFnbWVudCwgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgRXVpTG9hZGluZ1NwaW5uZXIgfSBmcm9tICcuLi8uLi9sb2FkaW5nJztcbmltcG9ydCB7IEV1aUZvcm1Db250cm9sTGF5b3V0Q2xlYXJCdXR0b24gfSBmcm9tICcuL2Zvcm1fY29udHJvbF9sYXlvdXRfY2xlYXJfYnV0dG9uJztcbmltcG9ydCB7IEV1aUZvcm1Db250cm9sTGF5b3V0Q3VzdG9tSWNvbiB9IGZyb20gJy4vZm9ybV9jb250cm9sX2xheW91dF9jdXN0b21faWNvbic7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vLi4vaWNvbic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBJQ09OX1NJREVTID0gWydsZWZ0JywgJ3JpZ2h0J107XG5cbmZ1bmN0aW9uIGlzSWNvblNoYXBlKGljb24pIHtcbiAgcmV0dXJuICEhaWNvbiAmJiBpY29uLmhhc093blByb3BlcnR5KCd0eXBlJyk7XG59XG5cbmV4cG9ydCB2YXIgRXVpRm9ybUNvbnRyb2xMYXlvdXRJY29ucyA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoRXVpRm9ybUNvbnRyb2xMYXlvdXRJY29ucywgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihFdWlGb3JtQ29udHJvbExheW91dEljb25zKTtcblxuICBmdW5jdGlvbiBFdWlGb3JtQ29udHJvbExheW91dEljb25zKCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlGb3JtQ29udHJvbExheW91dEljb25zKTtcblxuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdWlGb3JtQ29udHJvbExheW91dEljb25zLCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBpY29uID0gX3RoaXMkcHJvcHMuaWNvbixcbiAgICAgICAgICBpc0ludmFsaWQgPSBfdGhpcyRwcm9wcy5pc0ludmFsaWQsXG4gICAgICAgICAgaXNEcm9wZG93biA9IF90aGlzJHByb3BzLmlzRHJvcGRvd247XG4gICAgICB2YXIgaWNvblNpZGUgPSBpc0ljb25TaGFwZShpY29uKSAmJiBpY29uLnNpZGUgPyBpY29uLnNpZGUgOiAnbGVmdCc7XG4gICAgICB2YXIgY3VzdG9tSWNvbiA9IHRoaXMucmVuZGVyQ3VzdG9tSWNvbigpO1xuICAgICAgdmFyIGxvYWRpbmdTcGlubmVyID0gdGhpcy5yZW5kZXJMb2FkaW5nU3Bpbm5lcigpO1xuICAgICAgdmFyIGNsZWFyQnV0dG9uID0gdGhpcy5yZW5kZXJDbGVhckJ1dHRvbigpO1xuICAgICAgdmFyIGludmFsaWRJY29uID0gdGhpcy5yZW5kZXJJbnZhbGlkSWNvbigpO1xuICAgICAgdmFyIGRyb3Bkb3duSWNvbiA9IHRoaXMucmVuZGVyRHJvcGRvd25JY29uKCk7XG4gICAgICB2YXIgbGVmdEljb25zO1xuXG4gICAgICBpZiAoY3VzdG9tSWNvbiAmJiBpY29uU2lkZSA9PT0gJ2xlZnQnKSB7XG4gICAgICAgIGxlZnRJY29ucyA9IF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlGb3JtQ29udHJvbExheW91dEljb25zXCJcbiAgICAgICAgfSwgY3VzdG9tSWNvbik7XG4gICAgICB9XG5cbiAgICAgIHZhciByaWdodEljb25zOyAvLyBJZiB0aGUgaWNvbiBpcyBvbiB0aGUgcmlnaHQsIGl0IHNob3VsZCBiZSBwbGFjZWQgYWZ0ZXIgdGhlIGNsZWFyIGJ1dHRvbiBpbiB0aGUgRE9NLlxuXG4gICAgICBpZiAoY2xlYXJCdXR0b24gfHwgbG9hZGluZ1NwaW5uZXIgfHwgaXNJbnZhbGlkIHx8IGlzRHJvcGRvd24gfHwgY3VzdG9tSWNvbiAmJiBpY29uU2lkZSA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICByaWdodEljb25zID0gX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICAgICAgY2xhc3NOYW1lOiBcImV1aUZvcm1Db250cm9sTGF5b3V0SWNvbnMgZXVpRm9ybUNvbnRyb2xMYXlvdXRJY29ucy0tcmlnaHRcIlxuICAgICAgICB9LCBjbGVhckJ1dHRvbiwgbG9hZGluZ1NwaW5uZXIsIGludmFsaWRJY29uLCBpY29uU2lkZSA9PT0gJ3JpZ2h0JyA/IGN1c3RvbUljb24gOiB1bmRlZmluZWQsIGRyb3Bkb3duSWNvbik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEZyYWdtZW50LCBudWxsLCBsZWZ0SWNvbnMsIHJpZ2h0SWNvbnMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJDdXN0b21JY29uXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlckN1c3RvbUljb24oKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBpY29uID0gX3RoaXMkcHJvcHMyLmljb24sXG4gICAgICAgICAgY29tcHJlc3NlZCA9IF90aGlzJHByb3BzMi5jb21wcmVzc2VkO1xuXG4gICAgICBpZiAoIWljb24pIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9IC8vIE5vcm1hbGl6ZSB0aGUgaWNvbiB0byBhbiBvYmplY3QgaWYgaXQncyBhIHN0cmluZy5cblxuXG4gICAgICB2YXIgaWNvblByb3BzID0gaXNJY29uU2hhcGUoaWNvbikgPyBpY29uIDoge1xuICAgICAgICB0eXBlOiBpY29uXG4gICAgICB9O1xuXG4gICAgICB2YXIgaWNvblJlZiA9IGljb25Qcm9wcy5yZWYsXG4gICAgICAgICAgc2lkZSA9IGljb25Qcm9wcy5zaWRlLFxuICAgICAgICAgIGljb25SZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGljb25Qcm9wcywgX2V4Y2x1ZGVkKTtcblxuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpRm9ybUNvbnRyb2xMYXlvdXRDdXN0b21JY29uLCBfZXh0ZW5kcyh7XG4gICAgICAgIHNpemU6IGNvbXByZXNzZWQgPyAncycgOiAnbScsXG4gICAgICAgIGljb25SZWY6IGljb25SZWZcbiAgICAgIH0sIGljb25SZXN0KSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlckRyb3Bkb3duSWNvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJEcm9wZG93bkljb24oKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBpc0Ryb3Bkb3duID0gX3RoaXMkcHJvcHMzLmlzRHJvcGRvd24sXG4gICAgICAgICAgY29tcHJlc3NlZCA9IF90aGlzJHByb3BzMy5jb21wcmVzc2VkO1xuXG4gICAgICBpZiAoIWlzRHJvcGRvd24pIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUZvcm1Db250cm9sTGF5b3V0Q3VzdG9tSWNvbiwge1xuICAgICAgICBzaXplOiBjb21wcmVzc2VkID8gJ3MnIDogJ20nLFxuICAgICAgICB0eXBlOiBcImFycm93RG93blwiXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyTG9hZGluZ1NwaW5uZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyTG9hZGluZ1NwaW5uZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM0ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBpc0xvYWRpbmcgPSBfdGhpcyRwcm9wczQuaXNMb2FkaW5nLFxuICAgICAgICAgIGNvbXByZXNzZWQgPSBfdGhpcyRwcm9wczQuY29tcHJlc3NlZDtcblxuICAgICAgaWYgKCFpc0xvYWRpbmcpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUxvYWRpbmdTcGlubmVyLCB7XG4gICAgICAgIHNpemU6IGNvbXByZXNzZWQgPyAncycgOiAnbSdcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJDbGVhckJ1dHRvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJDbGVhckJ1dHRvbigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczUgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNsZWFyID0gX3RoaXMkcHJvcHM1LmNsZWFyLFxuICAgICAgICAgIGNvbXByZXNzZWQgPSBfdGhpcyRwcm9wczUuY29tcHJlc3NlZDtcblxuICAgICAgaWYgKCFjbGVhcikge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpRm9ybUNvbnRyb2xMYXlvdXRDbGVhckJ1dHRvbiwgX2V4dGVuZHMoe1xuICAgICAgICBzaXplOiBjb21wcmVzc2VkID8gJ3MnIDogJ20nXG4gICAgICB9LCBjbGVhcikpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJJbnZhbGlkSWNvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJJbnZhbGlkSWNvbigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczYgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGlzSW52YWxpZCA9IF90aGlzJHByb3BzNi5pc0ludmFsaWQsXG4gICAgICAgICAgY29tcHJlc3NlZCA9IF90aGlzJHByb3BzNi5jb21wcmVzc2VkO1xuXG4gICAgICBpZiAoIWlzSW52YWxpZCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgICAgICBzaXplOiBjb21wcmVzc2VkID8gJ3MnIDogJ20nLFxuICAgICAgICBjb2xvcjogXCJkYW5nZXJcIixcbiAgICAgICAgdHlwZTogXCJhbGVydFwiXG4gICAgICB9KTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gRXVpRm9ybUNvbnRyb2xMYXlvdXRJY29ucztcbn0oQ29tcG9uZW50KTtcbkV1aUZvcm1Db250cm9sTGF5b3V0SWNvbnMucHJvcFR5cGVzID0ge1xuICBpY29uOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbGVydFwiLCBcImFuYWx5emVFdmVudFwiLCBcImFubm90YXRpb25cIiwgXCJhcG1BcHBcIiwgXCJhcG1UcmFjZVwiLCBcImFwcFNlYXJjaEFwcFwiLCBcImFwcHNcIiwgXCJhcnJvd0Rvd25cIiwgXCJhcnJvd0xlZnRcIiwgXCJhcnJvd1JpZ2h0XCIsIFwiYXJyb3dVcFwiLCBcImFycm93U3RhcnRcIiwgXCJhcnJvd0VuZFwiLCBcImFzdGVyaXNrXCIsIFwiYXVkaXRiZWF0QXBwXCIsIFwiYmVha2VyXCIsIFwiYmVsbFwiLCBcImJlbGxTbGFzaFwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGVja1wiLCBcImNoZWNrSW5DaXJjbGVGaWxsZWRcIiwgXCJjaGVlclwiLCBcImNsYXNzaWZpY2F0aW9uSm9iXCIsIFwiY2xvY2tcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkFDaXJjbGVGaWxsZWRcIiwgXCJjcm9zc2hhaXJzXCIsIFwiY3VycmVuY3lcIiwgXCJjdXRcIiwgXCJkYXNoYm9hcmRBcHBcIiwgXCJkYXRhVmlzdWFsaXplclwiLCBcImRhdGFiYXNlXCIsIFwiZGVza3RvcFwiLCBcImRldlRvb2xzQXBwXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZXFsXCIsIFwiZXJhc2VyXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZsYWdcIiwgXCJmbGVldEFwcFwiLCBcImZvbGRcIiwgXCJmb2xkZXJDaGVja1wiLCBcImZvbGRlckNsb3NlZFwiLCBcImZvbGRlckV4Y2xhbWF0aW9uXCIsIFwiZm9sZGVyT3BlblwiLCBcImZyYW1lTmV4dFwiLCBcImZyYW1lUHJldmlvdXNcIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFNjcmVlbkV4aXRcIiwgXCJmdW5jdGlvblwiLCBcImdlYXJcIiwgXCJnaXNBcHBcIiwgXCJnbGFzc2VzXCIsIFwiZ2xvYmVcIiwgXCJncmFiXCIsIFwiZ3JhYkhvcml6b250YWxcIiwgXCJncmFwaEFwcFwiLCBcImdyaWRcIiwgXCJncm9rQXBwXCIsIFwiaGVhcnRcIiwgXCJoZWFydGJlYXRBcHBcIiwgXCJoZWF0bWFwXCIsIFwiaGVscFwiLCBcImhvbWVcIiwgXCJpSW5DaXJjbGVcIiwgXCJpbWFnZVwiLCBcImltcG9ydEFjdGlvblwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5wdXRPdXRwdXRcIiwgXCJpbnNwZWN0XCIsIFwiaW52ZXJ0XCIsIFwiaXBcIiwgXCJrZXlib2FyZFwiLCBcImtxbEZpZWxkXCIsIFwia3FsRnVuY3Rpb25cIiwgXCJrcWxPcGVyYW5kXCIsIFwia3FsU2VsZWN0b3JcIiwgXCJrcWxWYWx1ZVwiLCBcImt1YmVybmV0ZXNOb2RlXCIsIFwia3ViZXJuZXRlc1BvZFwiLCBcImxheWVyc1wiLCBcImxlbnNBcHBcIiwgXCJsZXR0ZXJpbmdcIiwgXCJsaW5lRGFzaGVkXCIsIFwibGluZURvdHRlZFwiLCBcImxpbmVTb2xpZFwiLCBcImxpbmtcIiwgXCJsaXN0XCIsIFwibGlzdEFkZFwiLCBcImxvY2tcIiwgXCJsb2NrT3BlblwiLCBcImxvZ29BV1NcIiwgXCJsb2dvQVdTTW9ub1wiLCBcImxvZ29BZXJvc3Bpa2VcIiwgXCJsb2dvQXBhY2hlXCIsIFwibG9nb0FwcFNlYXJjaFwiLCBcImxvZ29BenVyZVwiLCBcImxvZ29BenVyZU1vbm9cIiwgXCJsb2dvQmVhdHNcIiwgXCJsb2dvQnVzaW5lc3NBbmFseXRpY3NcIiwgXCJsb2dvQ2VwaFwiLCBcImxvZ29DbG91ZFwiLCBcImxvZ29DbG91ZEVudGVycHJpc2VcIiwgXCJsb2dvQ29kZVwiLCBcImxvZ29Db2Rlc2FuZGJveFwiLCBcImxvZ29Db3VjaGJhc2VcIiwgXCJsb2dvRG9ja2VyXCIsIFwibG9nb0Ryb3B3aXphcmRcIiwgXCJsb2dvRWxhc3RpY1wiLCBcImxvZ29FbGFzdGljU3RhY2tcIiwgXCJsb2dvRWxhc3RpY3NlYXJjaFwiLCBcImxvZ29FbnRlcnByaXNlU2VhcmNoXCIsIFwibG9nb0V0Y2RcIiwgXCJsb2dvR0NQXCIsIFwibG9nb0dDUE1vbm9cIiwgXCJsb2dvR2l0aHViXCIsIFwibG9nb0dtYWlsXCIsIFwibG9nb0dvbGFuZ1wiLCBcImxvZ29Hb29nbGVHXCIsIFwibG9nb0hBcHJveHlcIiwgXCJsb2dvSUJNXCIsIFwibG9nb0lCTU1vbm9cIiwgXCJsb2dvS2Fma2FcIiwgXCJsb2dvS2liYW5hXCIsIFwibG9nb0t1YmVybmV0ZXNcIiwgXCJsb2dvTG9nZ2luZ1wiLCBcImxvZ29Mb2dzdGFzaFwiLCBcImxvZ29NYXBzXCIsIFwibG9nb01lbWNhY2hlZFwiLCBcImxvZ29NZXRyaWNzXCIsIFwibG9nb01vbmdvZGJcIiwgXCJsb2dvTXlTUUxcIiwgXCJsb2dvTmdpbnhcIiwgXCJsb2dvT2JzZXJ2YWJpbGl0eVwiLCBcImxvZ29Pc3F1ZXJ5XCIsIFwibG9nb1BocFwiLCBcImxvZ29Qb3N0Z3Jlc1wiLCBcImxvZ29Qcm9tZXRoZXVzXCIsIFwibG9nb1JhYmJpdG1xXCIsIFwibG9nb1JlZGlzXCIsIFwibG9nb1NlY3VyaXR5XCIsIFwibG9nb1NpdGVTZWFyY2hcIiwgXCJsb2dvU2tldGNoXCIsIFwibG9nb1NsYWNrXCIsIFwibG9nb1VwdGltZVwiLCBcImxvZ29XZWJob29rXCIsIFwibG9nb1dpbmRvd3NcIiwgXCJsb2dvV29ya3BsYWNlU2VhcmNoXCIsIFwibG9nc0FwcFwiLCBcImxvZ3N0YXNoRmlsdGVyXCIsIFwibG9nc3Rhc2hJZlwiLCBcImxvZ3N0YXNoSW5wdXRcIiwgXCJsb2dzdGFzaE91dHB1dFwiLCBcImxvZ3N0YXNoUXVldWVcIiwgXCJtYWNoaW5lTGVhcm5pbmdBcHBcIiwgXCJtYWduZXRcIiwgXCJtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uXCIsIFwibWFnbmlmeVdpdGhNaW51c1wiLCBcIm1hZ25pZnlXaXRoUGx1c1wiLCBcIm1hbmFnZW1lbnRBcHBcIiwgXCJtYXBNYXJrZXJcIiwgXCJtZW1vcnlcIiwgXCJtZW51XCIsIFwibWVudURvd25cIiwgXCJtZW51TGVmdFwiLCBcIm1lbnVSaWdodFwiLCBcIm1lbnVVcFwiLCBcIm1lcmdlXCIsIFwibWV0cmljYmVhdEFwcFwiLCBcIm1ldHJpY3NBcHBcIiwgXCJtaW5pbWl6ZVwiLCBcIm1pbnVzXCIsIFwibWludXNJbkNpcmNsZVwiLCBcIm1pbnVzSW5DaXJjbGVGaWxsZWRcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5vZGVcIiwgXCJub3RlYm9va0FwcFwiLCBcIm51bWJlclwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIiwgXCJvdXRsaWVyRGV0ZWN0aW9uSm9iXCIsIFwicGFja2FnZVwiLCBcInBhY2tldGJlYXRBcHBcIiwgXCJwYWdlU2VsZWN0XCIsIFwicGFnZXNTZWxlY3RcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVsaW5lQXBwXCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNub3dmbGFrZVwiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc0FwcFwiLCBcInNxbEFwcFwiLCBcInN0YXJFbXB0eVwiLCBcInN0YXJFbXB0eVNwYWNlXCIsIFwic3RhckZpbGxlZFwiLCBcInN0YXJGaWxsZWRTcGFjZVwiLCBcInN0YXJNaW51c0VtcHR5XCIsIFwic3Rhck1pbnVzRmlsbGVkXCIsIFwic3RhclBsdXNFbXB0eVwiLCBcInN0YXJQbHVzRmlsbGVkXCIsIFwic3RhdHNcIiwgXCJzdG9wXCIsIFwic3RvcEZpbGxlZFwiLCBcInN0b3BTbGFzaFwiLCBcInN0b3JhZ2VcIiwgXCJzdHJpbmdcIiwgXCJzdWJtb2R1bGVcIiwgXCJzdW5cIiwgXCJzd2F0Y2hJbnB1dFwiLCBcInN5bWxpbmtcIiwgXCJ0YWJsZURlbnNpdHlDb21wYWN0XCIsIFwidGFibGVEZW5zaXR5RXhwYW5kZWRcIiwgXCJ0YWJsZURlbnNpdHlOb3JtYWxcIiwgXCJ0YWJsZU9mQ29udGVudHNcIiwgXCJ0YWdcIiwgXCJ0ZWFyXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJ0aW1lbGluZVwiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFzaFwiLCBcInVuZm9sZFwiLCBcInVubGlua1wiLCBcInVwZ3JhZGVBc3Npc3RhbnRBcHBcIiwgXCJ1cHRpbWVBcHBcIiwgXCJ1c2VyXCIsIFwidXNlckF2YXRhclwiLCBcInVzZXJzXCIsIFwidXNlcnNSb2xlc0FwcFwiLCBcInZlY3RvclwiLCBcInZpZGVvUGxheWVyXCIsIFwidmlzQXJlYVwiLCBcInZpc0FyZWFTdGFja2VkXCIsIFwidmlzQmFySG9yaXpvbnRhbFwiLCBcInZpc0Jhckhvcml6b250YWxTdGFja2VkXCIsIFwidmlzQmFyVmVydGljYWxcIiwgXCJ2aXNCYXJWZXJ0aWNhbFN0YWNrZWRcIiwgXCJ2aXNHYXVnZVwiLCBcInZpc0dvYWxcIiwgXCJ2aXNMaW5lXCIsIFwidmlzTWFwQ29vcmRpbmF0ZVwiLCBcInZpc01hcFJlZ2lvblwiLCBcInZpc01ldHJpY1wiLCBcInZpc1BpZVwiLCBcInZpc1RhYmxlXCIsIFwidmlzVGFnQ2xvdWRcIiwgXCJ2aXNUZXh0XCIsIFwidmlzVGltZWxpb25cIiwgXCJ2aXNWZWdhXCIsIFwidmlzVmlzdWFsQnVpbGRlclwiLCBcInZpc3VhbGl6ZUFwcFwiLCBcIndhdGNoZXNBcHBcIiwgXCJ3b3JkV3JhcFwiLCBcIndvcmRXcmFwRGlzYWJsZWRcIiwgXCJ3b3JrcGxhY2VTZWFyY2hBcHBcIiwgXCJ3cmVuY2hcIiwgXCJ0b2tlbkFsaWFzXCIsIFwidG9rZW5Bbm5vdGF0aW9uXCIsIFwidG9rZW5BcnJheVwiLCBcInRva2VuQmluYXJ5XCIsIFwidG9rZW5Cb29sZWFuXCIsIFwidG9rZW5DbGFzc1wiLCBcInRva2VuQ29tcGxldGlvblN1Z2dlc3RlclwiLCBcInRva2VuQ29uc3RhbnRcIiwgXCJ0b2tlbkRhdGVcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2hhcGVcIiwgXCJ0b2tlblN0cmluZ1wiLCBcInRva2VuU3RydWN0XCIsIFwidG9rZW5TeW1ib2xcIiwgXCJ0b2tlblRhZ1wiLCBcInRva2VuVGV4dFwiLCBcInRva2VuVG9rZW5Db3VudFwiLCBcInRva2VuVmFyaWFibGVcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIHR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhY2Nlc3NpYmlsaXR5XCIsIFwiYWRkRGF0YUFwcFwiLCBcImFkdmFuY2VkU2V0dGluZ3NBcHBcIiwgXCJhZ2VudEFwcFwiLCBcImFnZ3JlZ2F0ZVwiLCBcImFsZXJ0XCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbG9ja1wiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQUNpcmNsZUZpbGxlZFwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRvY3VtZW50XCIsIFwiZG9jdW1lbnRFZGl0XCIsIFwiZG9jdW1lbnRhdGlvblwiLCBcImRvY3VtZW50c1wiLCBcImRvdFwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJleGl0XCIsIFwiZXhwYW5kXCIsIFwiZXhwYW5kTWluaVwiLCBcImV4cG9ydEFjdGlvblwiLCBcImV5ZVwiLCBcImV5ZUNsb3NlZFwiLCBcImZhY2VIYXBweVwiLCBcImZhY2VOZXV0cmFsXCIsIFwiZmFjZVNhZFwiLCBcImZpbGViZWF0QXBwXCIsIFwiZmlsdGVyXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhDbG9zZVwiLCBcImluZGV4RWRpdFwiLCBcImluZGV4Rmx1c2hcIiwgXCJpbmRleE1hbmFnZW1lbnRBcHBcIiwgXCJpbmRleE1hcHBpbmdcIiwgXCJpbmRleE9wZW5cIiwgXCJpbmRleFBhdHRlcm5BcHBcIiwgXCJpbmRleFJvbGx1cEFwcFwiLCBcImluZGV4UnVudGltZVwiLCBcImluZGV4U2V0dGluZ3NcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibmFtZXNwYWNlXCIsIFwibmVzdGVkXCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZWxpbmVBcHBcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzQXBwXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpb25BcHBcIiwgXCJ0aW1lUmVmcmVzaFwiLCBcInRpbWVzbGlkZXJcIiwgXCJ0cmFpbmluZ1wiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsXG4gICAgc2lkZTogUHJvcFR5cGVzLmFueSxcbiAgICBjb2xvcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWRdKSxcbiAgICByZWY6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZF0pXG4gIH0pLmlzUmVxdWlyZWRdKSxcbiAgY2xlYXI6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBzaXplOiBQcm9wVHlwZXMuYW55XG4gIH0pLFxuICBpc0xvYWRpbmc6IFByb3BUeXBlcy5ib29sLFxuICBpc0ludmFsaWQ6IFByb3BUeXBlcy5ib29sLFxuICBpc0Ryb3Bkb3duOiBQcm9wVHlwZXMuYm9vbCxcbiAgY29tcHJlc3NlZDogUHJvcFR5cGVzLmJvb2xcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJvbkNsaWNrXCIsIFwic2l6ZVwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGtleXNPZiB9IGZyb20gJy4uLy4uL2NvbW1vbic7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vLi4vaWNvbic7XG5pbXBvcnQgeyBFdWlJMThuIH0gZnJvbSAnLi4vLi4vaTE4bic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIHNpemVUb0NsYXNzTmFtZU1hcCA9IHtcbiAgczogJ2V1aUZvcm1Db250cm9sTGF5b3V0Q2xlYXJCdXR0b24tLXNtYWxsJyxcbiAgbTogbnVsbFxufTtcbmV4cG9ydCB2YXIgU0laRVMgPSBrZXlzT2Yoc2l6ZVRvQ2xhc3NOYW1lTWFwKTtcbmV4cG9ydCB2YXIgRXVpRm9ybUNvbnRyb2xMYXlvdXRDbGVhckJ1dHRvbiA9IGZ1bmN0aW9uIEV1aUZvcm1Db250cm9sTGF5b3V0Q2xlYXJCdXR0b24oX3JlZikge1xuICB2YXIgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBvbkNsaWNrID0gX3JlZi5vbkNsaWNrLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gJ20nIDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpRm9ybUNvbnRyb2xMYXlvdXRDbGVhckJ1dHRvbicsIHNpemVUb0NsYXNzTmFtZU1hcFtzaXplXSwgY2xhc3NOYW1lKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgIHRva2VuOiBcImV1aUZvcm1Db250cm9sTGF5b3V0Q2xlYXJCdXR0b24ubGFiZWxcIixcbiAgICBkZWZhdWx0OiBcIkNsZWFyIGlucHV0XCJcbiAgfSwgZnVuY3Rpb24gKGxhYmVsKSB7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJidXR0b25cIiwgX2V4dGVuZHMoe1xuICAgICAgdHlwZTogXCJidXR0b25cIixcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgIG9uQ2xpY2s6IG9uQ2xpY2ssXG4gICAgICBcImFyaWEtbGFiZWxcIjogbGFiZWxcbiAgICB9LCByZXN0KSwgX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgICBjbGFzc05hbWU6IFwiZXVpRm9ybUNvbnRyb2xMYXlvdXRDbGVhckJ1dHRvbl9faWNvblwiLFxuICAgICAgdHlwZTogXCJjcm9zc1wiXG4gICAgfSkpO1xuICB9KTtcbn07XG5FdWlGb3JtQ29udHJvbExheW91dENsZWFyQnV0dG9uLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMuYW55XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwib25DbGlja1wiLCBcInR5cGVcIiwgXCJpY29uUmVmXCIsIFwic2l6ZVwiLCBcImNvbG9yXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgRXVpSWNvbiB9IGZyb20gJy4uLy4uL2ljb24nO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpRm9ybUNvbnRyb2xMYXlvdXRDdXN0b21JY29uID0gZnVuY3Rpb24gRXVpRm9ybUNvbnRyb2xMYXlvdXRDdXN0b21JY29uKF9yZWYpIHtcbiAgdmFyIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgb25DbGljayA9IF9yZWYub25DbGljayxcbiAgICAgIHR5cGUgPSBfcmVmLnR5cGUsXG4gICAgICBpY29uUmVmID0gX3JlZi5pY29uUmVmLFxuICAgICAgc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUZvcm1Db250cm9sTGF5b3V0Q3VzdG9tSWNvbicsIGNsYXNzTmFtZSwge1xuICAgICdldWlGb3JtQ29udHJvbExheW91dEN1c3RvbUljb24tLWNsaWNrYWJsZSc6IG9uQ2xpY2tcbiAgfSk7XG5cbiAgaWYgKG9uQ2xpY2spIHtcbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImJ1dHRvblwiLCBfZXh0ZW5kcyh7XG4gICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgb25DbGljazogb25DbGljayxcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgIHJlZjogaWNvblJlZlxuICAgIH0sIHJlc3QpLCBfX19FbW90aW9uSlNYKEV1aUljb24sIHtcbiAgICAgIGNsYXNzTmFtZTogXCJldWlGb3JtQ29udHJvbExheW91dEN1c3RvbUljb25fX2ljb25cIixcbiAgICAgIFwiYXJpYS1oaWRkZW5cIjogXCJ0cnVlXCIsXG4gICAgICBzaXplOiBzaXplLFxuICAgICAgdHlwZTogdHlwZSxcbiAgICAgIGNvbG9yOiBjb2xvclxuICAgIH0pKTtcbiAgfVxuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3BhblwiLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIHJlZjogaWNvblJlZlxuICB9LCByZXN0KSwgX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUZvcm1Db250cm9sTGF5b3V0Q3VzdG9tSWNvbl9faWNvblwiLFxuICAgIFwiYXJpYS1oaWRkZW5cIjogXCJ0cnVlXCIsXG4gICAgc2l6ZTogc2l6ZSxcbiAgICB0eXBlOiB0eXBlLFxuICAgIGNvbG9yOiBjb2xvclxuICB9KSk7XG59O1xuRXVpRm9ybUNvbnRyb2xMYXlvdXRDdXN0b21JY29uLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICB0eXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbGVydFwiLCBcImFuYWx5emVFdmVudFwiLCBcImFubm90YXRpb25cIiwgXCJhcG1BcHBcIiwgXCJhcG1UcmFjZVwiLCBcImFwcFNlYXJjaEFwcFwiLCBcImFwcHNcIiwgXCJhcnJvd0Rvd25cIiwgXCJhcnJvd0xlZnRcIiwgXCJhcnJvd1JpZ2h0XCIsIFwiYXJyb3dVcFwiLCBcImFycm93U3RhcnRcIiwgXCJhcnJvd0VuZFwiLCBcImFzdGVyaXNrXCIsIFwiYXVkaXRiZWF0QXBwXCIsIFwiYmVha2VyXCIsIFwiYmVsbFwiLCBcImJlbGxTbGFzaFwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGVja1wiLCBcImNoZWNrSW5DaXJjbGVGaWxsZWRcIiwgXCJjaGVlclwiLCBcImNsYXNzaWZpY2F0aW9uSm9iXCIsIFwiY2xvY2tcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkFDaXJjbGVGaWxsZWRcIiwgXCJjcm9zc2hhaXJzXCIsIFwiY3VycmVuY3lcIiwgXCJjdXRcIiwgXCJkYXNoYm9hcmRBcHBcIiwgXCJkYXRhVmlzdWFsaXplclwiLCBcImRhdGFiYXNlXCIsIFwiZGVza3RvcFwiLCBcImRldlRvb2xzQXBwXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZXFsXCIsIFwiZXJhc2VyXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZsYWdcIiwgXCJmbGVldEFwcFwiLCBcImZvbGRcIiwgXCJmb2xkZXJDaGVja1wiLCBcImZvbGRlckNsb3NlZFwiLCBcImZvbGRlckV4Y2xhbWF0aW9uXCIsIFwiZm9sZGVyT3BlblwiLCBcImZyYW1lTmV4dFwiLCBcImZyYW1lUHJldmlvdXNcIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFNjcmVlbkV4aXRcIiwgXCJmdW5jdGlvblwiLCBcImdlYXJcIiwgXCJnaXNBcHBcIiwgXCJnbGFzc2VzXCIsIFwiZ2xvYmVcIiwgXCJncmFiXCIsIFwiZ3JhYkhvcml6b250YWxcIiwgXCJncmFwaEFwcFwiLCBcImdyaWRcIiwgXCJncm9rQXBwXCIsIFwiaGVhcnRcIiwgXCJoZWFydGJlYXRBcHBcIiwgXCJoZWF0bWFwXCIsIFwiaGVscFwiLCBcImhvbWVcIiwgXCJpSW5DaXJjbGVcIiwgXCJpbWFnZVwiLCBcImltcG9ydEFjdGlvblwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5wdXRPdXRwdXRcIiwgXCJpbnNwZWN0XCIsIFwiaW52ZXJ0XCIsIFwiaXBcIiwgXCJrZXlib2FyZFwiLCBcImtxbEZpZWxkXCIsIFwia3FsRnVuY3Rpb25cIiwgXCJrcWxPcGVyYW5kXCIsIFwia3FsU2VsZWN0b3JcIiwgXCJrcWxWYWx1ZVwiLCBcImt1YmVybmV0ZXNOb2RlXCIsIFwia3ViZXJuZXRlc1BvZFwiLCBcImxheWVyc1wiLCBcImxlbnNBcHBcIiwgXCJsZXR0ZXJpbmdcIiwgXCJsaW5lRGFzaGVkXCIsIFwibGluZURvdHRlZFwiLCBcImxpbmVTb2xpZFwiLCBcImxpbmtcIiwgXCJsaXN0XCIsIFwibGlzdEFkZFwiLCBcImxvY2tcIiwgXCJsb2NrT3BlblwiLCBcImxvZ29BV1NcIiwgXCJsb2dvQVdTTW9ub1wiLCBcImxvZ29BZXJvc3Bpa2VcIiwgXCJsb2dvQXBhY2hlXCIsIFwibG9nb0FwcFNlYXJjaFwiLCBcImxvZ29BenVyZVwiLCBcImxvZ29BenVyZU1vbm9cIiwgXCJsb2dvQmVhdHNcIiwgXCJsb2dvQnVzaW5lc3NBbmFseXRpY3NcIiwgXCJsb2dvQ2VwaFwiLCBcImxvZ29DbG91ZFwiLCBcImxvZ29DbG91ZEVudGVycHJpc2VcIiwgXCJsb2dvQ29kZVwiLCBcImxvZ29Db2Rlc2FuZGJveFwiLCBcImxvZ29Db3VjaGJhc2VcIiwgXCJsb2dvRG9ja2VyXCIsIFwibG9nb0Ryb3B3aXphcmRcIiwgXCJsb2dvRWxhc3RpY1wiLCBcImxvZ29FbGFzdGljU3RhY2tcIiwgXCJsb2dvRWxhc3RpY3NlYXJjaFwiLCBcImxvZ29FbnRlcnByaXNlU2VhcmNoXCIsIFwibG9nb0V0Y2RcIiwgXCJsb2dvR0NQXCIsIFwibG9nb0dDUE1vbm9cIiwgXCJsb2dvR2l0aHViXCIsIFwibG9nb0dtYWlsXCIsIFwibG9nb0dvbGFuZ1wiLCBcImxvZ29Hb29nbGVHXCIsIFwibG9nb0hBcHJveHlcIiwgXCJsb2dvSUJNXCIsIFwibG9nb0lCTU1vbm9cIiwgXCJsb2dvS2Fma2FcIiwgXCJsb2dvS2liYW5hXCIsIFwibG9nb0t1YmVybmV0ZXNcIiwgXCJsb2dvTG9nZ2luZ1wiLCBcImxvZ29Mb2dzdGFzaFwiLCBcImxvZ29NYXBzXCIsIFwibG9nb01lbWNhY2hlZFwiLCBcImxvZ29NZXRyaWNzXCIsIFwibG9nb01vbmdvZGJcIiwgXCJsb2dvTXlTUUxcIiwgXCJsb2dvTmdpbnhcIiwgXCJsb2dvT2JzZXJ2YWJpbGl0eVwiLCBcImxvZ29Pc3F1ZXJ5XCIsIFwibG9nb1BocFwiLCBcImxvZ29Qb3N0Z3Jlc1wiLCBcImxvZ29Qcm9tZXRoZXVzXCIsIFwibG9nb1JhYmJpdG1xXCIsIFwibG9nb1JlZGlzXCIsIFwibG9nb1NlY3VyaXR5XCIsIFwibG9nb1NpdGVTZWFyY2hcIiwgXCJsb2dvU2tldGNoXCIsIFwibG9nb1NsYWNrXCIsIFwibG9nb1VwdGltZVwiLCBcImxvZ29XZWJob29rXCIsIFwibG9nb1dpbmRvd3NcIiwgXCJsb2dvV29ya3BsYWNlU2VhcmNoXCIsIFwibG9nc0FwcFwiLCBcImxvZ3N0YXNoRmlsdGVyXCIsIFwibG9nc3Rhc2hJZlwiLCBcImxvZ3N0YXNoSW5wdXRcIiwgXCJsb2dzdGFzaE91dHB1dFwiLCBcImxvZ3N0YXNoUXVldWVcIiwgXCJtYWNoaW5lTGVhcm5pbmdBcHBcIiwgXCJtYWduZXRcIiwgXCJtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uXCIsIFwibWFnbmlmeVdpdGhNaW51c1wiLCBcIm1hZ25pZnlXaXRoUGx1c1wiLCBcIm1hbmFnZW1lbnRBcHBcIiwgXCJtYXBNYXJrZXJcIiwgXCJtZW1vcnlcIiwgXCJtZW51XCIsIFwibWVudURvd25cIiwgXCJtZW51TGVmdFwiLCBcIm1lbnVSaWdodFwiLCBcIm1lbnVVcFwiLCBcIm1lcmdlXCIsIFwibWV0cmljYmVhdEFwcFwiLCBcIm1ldHJpY3NBcHBcIiwgXCJtaW5pbWl6ZVwiLCBcIm1pbnVzXCIsIFwibWludXNJbkNpcmNsZVwiLCBcIm1pbnVzSW5DaXJjbGVGaWxsZWRcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5vZGVcIiwgXCJub3RlYm9va0FwcFwiLCBcIm51bWJlclwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIiwgXCJvdXRsaWVyRGV0ZWN0aW9uSm9iXCIsIFwicGFja2FnZVwiLCBcInBhY2tldGJlYXRBcHBcIiwgXCJwYWdlU2VsZWN0XCIsIFwicGFnZXNTZWxlY3RcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVsaW5lQXBwXCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNub3dmbGFrZVwiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc0FwcFwiLCBcInNxbEFwcFwiLCBcInN0YXJFbXB0eVwiLCBcInN0YXJFbXB0eVNwYWNlXCIsIFwic3RhckZpbGxlZFwiLCBcInN0YXJGaWxsZWRTcGFjZVwiLCBcInN0YXJNaW51c0VtcHR5XCIsIFwic3Rhck1pbnVzRmlsbGVkXCIsIFwic3RhclBsdXNFbXB0eVwiLCBcInN0YXJQbHVzRmlsbGVkXCIsIFwic3RhdHNcIiwgXCJzdG9wXCIsIFwic3RvcEZpbGxlZFwiLCBcInN0b3BTbGFzaFwiLCBcInN0b3JhZ2VcIiwgXCJzdHJpbmdcIiwgXCJzdWJtb2R1bGVcIiwgXCJzdW5cIiwgXCJzd2F0Y2hJbnB1dFwiLCBcInN5bWxpbmtcIiwgXCJ0YWJsZURlbnNpdHlDb21wYWN0XCIsIFwidGFibGVEZW5zaXR5RXhwYW5kZWRcIiwgXCJ0YWJsZURlbnNpdHlOb3JtYWxcIiwgXCJ0YWJsZU9mQ29udGVudHNcIiwgXCJ0YWdcIiwgXCJ0ZWFyXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJ0aW1lbGluZVwiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFzaFwiLCBcInVuZm9sZFwiLCBcInVubGlua1wiLCBcInVwZ3JhZGVBc3Npc3RhbnRBcHBcIiwgXCJ1cHRpbWVBcHBcIiwgXCJ1c2VyXCIsIFwidXNlckF2YXRhclwiLCBcInVzZXJzXCIsIFwidXNlcnNSb2xlc0FwcFwiLCBcInZlY3RvclwiLCBcInZpZGVvUGxheWVyXCIsIFwidmlzQXJlYVwiLCBcInZpc0FyZWFTdGFja2VkXCIsIFwidmlzQmFySG9yaXpvbnRhbFwiLCBcInZpc0Jhckhvcml6b250YWxTdGFja2VkXCIsIFwidmlzQmFyVmVydGljYWxcIiwgXCJ2aXNCYXJWZXJ0aWNhbFN0YWNrZWRcIiwgXCJ2aXNHYXVnZVwiLCBcInZpc0dvYWxcIiwgXCJ2aXNMaW5lXCIsIFwidmlzTWFwQ29vcmRpbmF0ZVwiLCBcInZpc01hcFJlZ2lvblwiLCBcInZpc01ldHJpY1wiLCBcInZpc1BpZVwiLCBcInZpc1RhYmxlXCIsIFwidmlzVGFnQ2xvdWRcIiwgXCJ2aXNUZXh0XCIsIFwidmlzVGltZWxpb25cIiwgXCJ2aXNWZWdhXCIsIFwidmlzVmlzdWFsQnVpbGRlclwiLCBcInZpc3VhbGl6ZUFwcFwiLCBcIndhdGNoZXNBcHBcIiwgXCJ3b3JkV3JhcFwiLCBcIndvcmRXcmFwRGlzYWJsZWRcIiwgXCJ3b3JrcGxhY2VTZWFyY2hBcHBcIiwgXCJ3cmVuY2hcIiwgXCJ0b2tlbkFsaWFzXCIsIFwidG9rZW5Bbm5vdGF0aW9uXCIsIFwidG9rZW5BcnJheVwiLCBcInRva2VuQmluYXJ5XCIsIFwidG9rZW5Cb29sZWFuXCIsIFwidG9rZW5DbGFzc1wiLCBcInRva2VuQ29tcGxldGlvblN1Z2dlc3RlclwiLCBcInRva2VuQ29uc3RhbnRcIiwgXCJ0b2tlbkRhdGVcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2hhcGVcIiwgXCJ0b2tlblN0cmluZ1wiLCBcInRva2VuU3RydWN0XCIsIFwidG9rZW5TeW1ib2xcIiwgXCJ0b2tlblRhZ1wiLCBcInRva2VuVGV4dFwiLCBcInRva2VuVG9rZW5Db3VudFwiLCBcInRva2VuVmFyaWFibGVcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLFxuICBzaXplOiBQcm9wVHlwZXMuYW55LFxuICBpY29uUmVmOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRdKVxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInR5cGVcIiwgXCJpc0ZvY3VzZWRcIiwgXCJpc0ludmFsaWRcIiwgXCJpc0Rpc2FibGVkXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlGb3JtTGFiZWwgPSBmdW5jdGlvbiBFdWlGb3JtTGFiZWwoX3JlZikge1xuICB2YXIgX3JlZiR0eXBlID0gX3JlZi50eXBlLFxuICAgICAgdHlwZSA9IF9yZWYkdHlwZSA9PT0gdm9pZCAwID8gJ2xhYmVsJyA6IF9yZWYkdHlwZSxcbiAgICAgIGlzRm9jdXNlZCA9IF9yZWYuaXNGb2N1c2VkLFxuICAgICAgaXNJbnZhbGlkID0gX3JlZi5pc0ludmFsaWQsXG4gICAgICBpc0Rpc2FibGVkID0gX3JlZi5pc0Rpc2FibGVkLFxuICAgICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlGb3JtTGFiZWwnLCBjbGFzc05hbWUsIHtcbiAgICAnZXVpRm9ybUxhYmVsLWlzRm9jdXNlZCc6IGlzRm9jdXNlZCxcbiAgICAnZXVpRm9ybUxhYmVsLWlzSW52YWxpZCc6IGlzSW52YWxpZCxcbiAgICAnZXVpRm9ybUxhYmVsLWlzRGlzYWJsZWQnOiBpc0Rpc2FibGVkXG4gIH0pO1xuXG4gIGlmICh0eXBlID09PSAnbGVnZW5kJykge1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwibGVnZW5kXCIsIF9leHRlbmRzKHtcbiAgICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICAgIH0sIHJlc3QpLCBjaGlsZHJlbik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJsYWJlbFwiLCBfZXh0ZW5kcyh7XG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgICB9LCByZXN0KSwgY2hpbGRyZW4pO1xuICB9XG59O1xuRXVpRm9ybUxhYmVsLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAgICogRGVmYXVsdCB0eXBlIGlzIGEgYGxhYmVsYCBidXQgY2FuIGJlIGNoYW5nZWQgdG8gYSBgbGVnZW5kYFxuICAgICAqIGlmIHVzaW5nIGluc2lkZSBhIGBmaWVsZHNldGAuXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogRGVmYXVsdCB0eXBlIGlzIGEgYGxhYmVsYCBidXQgY2FuIGJlIGNoYW5nZWQgdG8gYSBgbGVnZW5kYFxuICAgICAqIGlmIHVzaW5nIGluc2lkZSBhIGBmaWVsZHNldGAuXG4gICAgICovXG4gIHR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJsYWJlbFwiXSksIFByb3BUeXBlcy5vbmVPZihbXCJsYWJlbFwiLCBcImxlZ2VuZFwiXSldKSwgUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImxlZ2VuZFwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm9uZU9mKFtcImxhYmVsXCIsIFwibGVnZW5kXCJdKV0pXSksXG4gIGlzRm9jdXNlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGlzSW52YWxpZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogQ2hhbmdlcyBgY3Vyc29yYCB0byBgZGVmYXVsdGAuXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogQ2hhbmdlcyBgY3Vyc29yYCB0byBgZGVmYXVsdGAuXG4gICAgICovXG4gIGlzRGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBDaGlsZHJlbiwgY2xvbmVFbGVtZW50LCB1c2VSZWYsIHVzZUVmZmVjdCwgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5cbmZ1bmN0aW9uIGlzTXV0YWJsZVJlZihyZWYpIHtcbiAgcmV0dXJuIHJlZiAhPSBudWxsICYmIHJlZi5oYXNPd25Qcm9wZXJ0eSgnY3VycmVudCcpO1xufVxuXG5leHBvcnQgdmFyIEV1aVZhbGlkYXRhYmxlQ29udHJvbCA9IGZ1bmN0aW9uIEV1aVZhbGlkYXRhYmxlQ29udHJvbChfcmVmKSB7XG4gIHZhciBpc0ludmFsaWQgPSBfcmVmLmlzSW52YWxpZCxcbiAgICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbjtcbiAgdmFyIGNvbnRyb2wgPSB1c2VSZWYobnVsbCk7XG4gIHZhciBjaGlsZCA9IENoaWxkcmVuLm9ubHkoY2hpbGRyZW4pO1xuICB2YXIgY2hpbGRSZWYgPSBjaGlsZC5yZWY7XG4gIHZhciByZXBsYWNlZFJlZiA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgY29udHJvbC5jdXJyZW50ID0gZWxlbWVudDsgLy8gQ2FsbCB0aGUgb3JpZ2luYWwgcmVmLCBpZiBhbnlcblxuICAgIGlmICh0eXBlb2YgY2hpbGRSZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNoaWxkUmVmKGVsZW1lbnQpO1xuICAgIH0gZWxzZSBpZiAoaXNNdXRhYmxlUmVmKGNoaWxkUmVmKSkge1xuICAgICAgY2hpbGRSZWYuY3VycmVudCA9IGVsZW1lbnQ7XG4gICAgfVxuICB9LCBbY2hpbGRSZWZdKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoY29udHJvbC5jdXJyZW50ID09PSBudWxsIHx8IHR5cGVvZiBjb250cm9sLmN1cnJlbnQuc2V0Q3VzdG9tVmFsaWRpdHkgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybjsgLy8ganNkb20gZG9lc24ndCBwb2x5ZmlsbCB0aGlzIGZvciB0aGUgc2VydmVyLXNpZGVcbiAgICB9XG5cbiAgICBpZiAoaXNJbnZhbGlkKSB7XG4gICAgICBjb250cm9sLmN1cnJlbnQuc2V0Q3VzdG9tVmFsaWRpdHkoJ0ludmFsaWQnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29udHJvbC5jdXJyZW50LnNldEN1c3RvbVZhbGlkaXR5KCcnKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gLyojX19QVVJFX18qL2Nsb25lRWxlbWVudChjaGlsZCwge1xuICAgIHJlZjogcmVwbGFjZWRSZWYsXG4gICAgJ2FyaWEtaW52YWxpZCc6IGlzSW52YWxpZFxuICB9KTtcbn07XG5FdWlWYWxpZGF0YWJsZUNvbnRyb2wucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGlzSW52YWxpZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogUmVhY3ROb2RlIHRvIHJlbmRlciBhcyB0aGlzIGNvbXBvbmVudCdzIGNvbnRlbnRcbiAgICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgcmVmOiBQcm9wVHlwZXMuYW55XG4gIH0pLmlzUmVxdWlyZWRcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8qKlxuICogVGhlIGBnZXRGb3JtQ29udHJvbENsYXNzTmFtZUZvckljb25Db3VudGAgZnVuY3Rpb24gaGVscHMgc2V0dXAgdGhlIGNsYXNzTmFtZSBhcHBlbmR1bVxuICogZGVwZW5kaW5nIG9uIHRoZSBmb3JtIGNvbnRyb2wncyBjdXJyZW50IHNldHRpbmdzL3N0YXRlLlxuICpcbiAqIEBwYXJhbSBpY29uIHtib29sZWFufSBEb2VzIGl0IGNvbnRhaW4gYSBzdGF0aWMgaWNvbiBsaWtlIGFycm93RG93blxuICogQHBhcmFtIGNsZWFyIHtib29sZWFufSBJcyBpdCBjdXJyZW50bHkgY2xlYXJhYmxlXG4gKiBAcGFyYW0gaXNMb2FkaW5nIHtib29sZWFufSBJcyBpcyBjdXJyZW50bHkgbG9hZGluZ1xuICogQHBhcmFtIGlzSW52YWxpZCB7Ym9vbGVhbn0gSXQgaXMgY3VycmVudGx5IGludmFsaWRcbiAqIEBwYXJhbSBpc0Ryb3Bkb3duIHtib29sZWFufSBJdCBpcyBhcyBkcm9wZG93blxuICogQHJldHVybnMge3N0cmluZyB8IHVuZGVmaW5lZH0gUmV0dXJucyB0aGUgc3RyaW5nIHRvIGFwcGVuZCB0byB0aGUgYmFzZSBjbGFzc05hbWUgb2YgdGhlIGZvcm0gY29udHJvbDsgb3IgYHVuZGVmaW5lZGAgaWYgYWxsIGV2YWx1YXRlIHRvIGZhbHNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtQ29udHJvbENsYXNzTmFtZUZvckljb25Db3VudChfcmVmKSB7XG4gIHZhciBpY29uID0gX3JlZi5pY29uLFxuICAgICAgY2xlYXIgPSBfcmVmLmNsZWFyLFxuICAgICAgaXNMb2FkaW5nID0gX3JlZi5pc0xvYWRpbmcsXG4gICAgICBpc0ludmFsaWQgPSBfcmVmLmlzSW52YWxpZCxcbiAgICAgIGlzRHJvcGRvd24gPSBfcmVmLmlzRHJvcGRvd247XG4gIHZhciBudW1JY29ucyA9IFtpY29uLCBjbGVhciwgaXNJbnZhbGlkLCBpc0xvYWRpbmcsIGlzRHJvcGRvd25dLmZpbHRlcihmdW5jdGlvbiAoaXRlbSkge1xuICAgIHJldHVybiBpdGVtID09PSB0cnVlO1xuICB9KS5sZW5ndGg7IC8vIFRoaXMgY2xhc3NOYW1lIGlzIGFsc28gc3BlY2lmaWNhbGx5IHVzZWQgaW4gYHNyYy9nbG9iYWxfc3R5bGluZy9taXhpbnMvX2Zvcm0uc2Nzc2BcblxuICByZXR1cm4gbnVtSWNvbnMgPiAwID8gXCJldWlGb3JtQ29udHJvbExheW91dC0tXCIuY29uY2F0KG51bUljb25zLCBcImljb25zXCIpIDogdW5kZWZpbmVkO1xufSIsICJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbnZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJpZFwiLCBcIm5hbWVcIiwgXCJwbGFjZWhvbGRlclwiLCBcImlzSW52YWxpZFwiLCBcImZ1bGxXaWR0aFwiLCBcImlzTG9hZGluZ1wiLCBcImlucHV0UmVmXCIsIFwiaW5jcmVtZW50YWxcIiwgXCJjb21wcmVzc2VkXCIsIFwib25TZWFyY2hcIiwgXCJpc0NsZWFyYWJsZVwiLCBcImFwcGVuZFwiLCBcInByZXBlbmRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgQnJvd3NlciB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2Jyb3dzZXInO1xuaW1wb3J0IHsga2V5cyB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aUZvcm1Db250cm9sTGF5b3V0IH0gZnJvbSAnLi4vZm9ybV9jb250cm9sX2xheW91dCc7XG5pbXBvcnQgeyBFdWlWYWxpZGF0YWJsZUNvbnRyb2wgfSBmcm9tICcuLi92YWxpZGF0YWJsZV9jb250cm9sJztcbmltcG9ydCB7IGdldEZvcm1Db250cm9sQ2xhc3NOYW1lRm9ySWNvbkNvdW50IH0gZnJvbSAnLi4vZm9ybV9jb250cm9sX2xheW91dC9fbnVtX2ljb25zJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgaXNTZWFyY2hTdXBwb3J0ZWQgPSBmYWxzZTtcbmV4cG9ydCB2YXIgRXVpRmllbGRTZWFyY2ggPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEV1aUZpZWxkU2VhcmNoLCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aUZpZWxkU2VhcmNoKTtcblxuICBmdW5jdGlvbiBFdWlGaWVsZFNlYXJjaCgpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpRmllbGRTZWFyY2gpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwuYXBwbHkoX3N1cGVyLCBbdGhpc10uY29uY2F0KGFyZ3MpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzdGF0ZVwiLCB7XG4gICAgICB2YWx1ZTogX3RoaXMucHJvcHMudmFsdWUgfHwgU3RyaW5nKF90aGlzLnByb3BzLmRlZmF1bHRWYWx1ZSB8fCAnJylcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJpbnB1dEVsZW1lbnRcIiwgbnVsbCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiY2xlYW51cHNcIiwgW10pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uQ2xlYXJcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gY2xlYXIgdGhlIGZpZWxkJ3MgdmFsdWVcbiAgICAgIC8vIDEuIFJlYWN0IGRvZXNuJ3QgbGlzdGVuIGZvciBgY2hhbmdlYCBldmVudHMsIGluc3RlYWQgaXQgbWFwcyBgaW5wdXRgIGV2ZW50cyB0byBgY2hhbmdlYFxuICAgICAgLy8gMi4gUmVhY3Qgb25seSBmaXJlcyB0aGUgbWFwcGVkIGBjaGFuZ2VgIGV2ZW50IGlmIHRoZSBlbGVtZW50J3MgdmFsdWUgaGFzIGNoYW5nZWRcbiAgICAgIC8vIDMuIEFuIGlucHV0J3MgdmFsdWUgaXMsIGluIGFkZGl0aW9uIHRvIG90aGVyIG1ldGhvZHMsIHRyYWNrZWQgYnkgaW50ZXJjZXB0aW5nIGVsZW1lbnQudmFsdWUgPSAnLi4uJ1xuICAgICAgLy9cbiAgICAgIC8vIFNvIHdlIGhhdmUgdG8gZ28gYmVsb3cgdGhlIGVsZW1lbnQncyB2YWx1ZSBzZXR0ZXIgdG8gYXZvaWQgUmVhY3QgaW50ZXJjZXB0aW5nIGl0LFxuICAgICAgLy8gb25seSB0aGVuIHdpbGwgUmVhY3QgdHJlYXQgdGhlIHZhbHVlIGFzIGRpZmZlcmVudCBhbmQgZmlyZSBpdHMgYGNoYW5nZWAgZXZlbnRcbiAgICAgIC8vXG4gICAgICAvLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yMzg5MjU0Ny93aGF0LWlzLXRoZS1iZXN0LXdheS10by10cmlnZ2VyLW9uY2hhbmdlLWV2ZW50LWluLXJlYWN0LWpzXG4gICAgICB2YXIgbmF0aXZlSW5wdXRWYWx1ZSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUsICd2YWx1ZScpO1xuICAgICAgdmFyIG5hdGl2ZUlucHV0VmFsdWVTZXR0ZXIgPSBuYXRpdmVJbnB1dFZhbHVlID8gbmF0aXZlSW5wdXRWYWx1ZS5zZXQgOiB1bmRlZmluZWQ7XG5cbiAgICAgIGlmIChuYXRpdmVJbnB1dFZhbHVlU2V0dGVyKSB7XG4gICAgICAgIG5hdGl2ZUlucHV0VmFsdWVTZXR0ZXIuY2FsbChfdGhpcy5pbnB1dEVsZW1lbnQsICcnKTtcbiAgICAgIH0gLy8gZGlzcGF0Y2ggaW5wdXQgZXZlbnQsIHdpdGggSUUxMSBzdXBwb3J0L2ZhbGxiYWNrXG5cblxuICAgICAgdmFyIGV2ZW50O1xuXG4gICAgICBpZiAoJ0V2ZW50JyBpbiB3aW5kb3cgJiYgdHlwZW9mIEV2ZW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGV2ZW50ID0gbmV3IEV2ZW50KCdpbnB1dCcsIHtcbiAgICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICAgIGNhbmNlbGFibGU6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSUUxMVxuICAgICAgICBldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpO1xuICAgICAgICBldmVudC5pbml0RXZlbnQoJ2lucHV0JywgdHJ1ZSwgZmFsc2UpO1xuICAgICAgfVxuXG4gICAgICBpZiAoX3RoaXMuaW5wdXRFbGVtZW50KSB7XG4gICAgICAgIGlmIChldmVudCkge1xuICAgICAgICAgIF90aGlzLmlucHV0RWxlbWVudC5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcbiAgICAgICAgfSAvLyBzZXQgZm9jdXMgb24gdGhlIHNlYXJjaCBmaWVsZFxuXG5cbiAgICAgICAgX3RoaXMuaW5wdXRFbGVtZW50LmZvY3VzKCk7XG5cbiAgICAgICAgX3RoaXMuaW5wdXRFbGVtZW50LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdjaGFuZ2UnKSk7XG4gICAgICB9XG5cbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9KTtcblxuICAgICAgdmFyIF90aGlzJHByb3BzID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgaW5jcmVtZW50YWwgPSBfdGhpcyRwcm9wcy5pbmNyZW1lbnRhbCxcbiAgICAgICAgICBvblNlYXJjaCA9IF90aGlzJHByb3BzLm9uU2VhcmNoO1xuXG4gICAgICBpZiAob25TZWFyY2ggJiYgaW5jcmVtZW50YWwpIHtcbiAgICAgICAgb25TZWFyY2goJycpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInNldFJlZlwiLCBmdW5jdGlvbiAoaW5wdXRFbGVtZW50KSB7XG4gICAgICBfdGhpcy5pbnB1dEVsZW1lbnQgPSBpbnB1dEVsZW1lbnQ7XG5cbiAgICAgIGlmIChfdGhpcy5wcm9wcy5pbnB1dFJlZikge1xuICAgICAgICBfdGhpcy5wcm9wcy5pbnB1dFJlZihpbnB1dEVsZW1lbnQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uS2V5VXBcIiwgZnVuY3Rpb24gKGV2ZW50LCBpbmNyZW1lbnRhbCwgb25TZWFyY2gpIHtcbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgdmFsdWU6IGV2ZW50LnRhcmdldC52YWx1ZVxuICAgICAgfSk7XG5cbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vbktleVVwKSB7XG4gICAgICAgIF90aGlzLnByb3BzLm9uS2V5VXAoZXZlbnQpO1xuXG4gICAgICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChvblNlYXJjaCAmJiAoZXZlbnQua2V5ICE9PSBrZXlzLkVOVEVSICYmIGluY3JlbWVudGFsIHx8IGV2ZW50LmtleSA9PT0ga2V5cy5FTlRFUiAmJiAhaXNTZWFyY2hTdXBwb3J0ZWQpKSB7XG4gICAgICAgIG9uU2VhcmNoKGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoRXVpRmllbGRTZWFyY2gsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIGlmICghdGhpcy5pbnB1dEVsZW1lbnQpIHJldHVybjtcbiAgICAgIGlzU2VhcmNoU3VwcG9ydGVkID0gQnJvd3Nlci5pc0V2ZW50U3VwcG9ydGVkKCdzZWFyY2gnLCB0aGlzLmlucHV0RWxlbWVudCk7XG5cbiAgICAgIGlmIChpc1NlYXJjaFN1cHBvcnRlZCkge1xuICAgICAgICB2YXIgb25TZWFyY2ggPSBmdW5jdGlvbiBvblNlYXJjaChldmVudCkge1xuICAgICAgICAgIGlmIChfdGhpczIucHJvcHMub25TZWFyY2gpIHtcbiAgICAgICAgICAgIGlmICghZXZlbnQgfHwgIWV2ZW50LnRhcmdldCB8fCBldmVudC5kZWZhdWx0UHJldmVudGVkKSByZXR1cm47XG5cbiAgICAgICAgICAgIF90aGlzMi5wcm9wcy5vblNlYXJjaChldmVudC50YXJnZXQudmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmlucHV0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdzZWFyY2gnLCBvblNlYXJjaCk7XG4gICAgICAgIHRoaXMuY2xlYW51cHMucHVzaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKCFfdGhpczIuaW5wdXRFbGVtZW50KSByZXR1cm47XG5cbiAgICAgICAgICBfdGhpczIuaW5wdXRFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3NlYXJjaCcsIG9uU2VhcmNoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBvbkNoYW5nZSA9IGZ1bmN0aW9uIG9uQ2hhbmdlKGV2ZW50KSB7XG4gICAgICAgIGlmIChldmVudC50YXJnZXQgJiYgZXZlbnQudGFyZ2V0LnZhbHVlICE9PSBfdGhpczIuc3RhdGUudmFsdWUpIHtcbiAgICAgICAgICBfdGhpczIuc2V0U3RhdGUoe1xuICAgICAgICAgICAgdmFsdWU6IGV2ZW50LnRhcmdldC52YWx1ZVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaWYgKF90aGlzMi5wcm9wcy5vblNlYXJjaCkge1xuICAgICAgICAgICAgX3RoaXMyLnByb3BzLm9uU2VhcmNoKGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICB0aGlzLmlucHV0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBvbkNoYW5nZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgdGhpcy5jbGVhbnVwcy5mb3JFYWNoKGZ1bmN0aW9uIChjbGVhbnVwKSB7XG4gICAgICAgIHJldHVybiBjbGVhbnVwKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wczIuY2xhc3NOYW1lLFxuICAgICAgICAgIGlkID0gX3RoaXMkcHJvcHMyLmlkLFxuICAgICAgICAgIG5hbWUgPSBfdGhpcyRwcm9wczIubmFtZSxcbiAgICAgICAgICBwbGFjZWhvbGRlciA9IF90aGlzJHByb3BzMi5wbGFjZWhvbGRlcixcbiAgICAgICAgICBpc0ludmFsaWQgPSBfdGhpcyRwcm9wczIuaXNJbnZhbGlkLFxuICAgICAgICAgIGZ1bGxXaWR0aCA9IF90aGlzJHByb3BzMi5mdWxsV2lkdGgsXG4gICAgICAgICAgaXNMb2FkaW5nID0gX3RoaXMkcHJvcHMyLmlzTG9hZGluZyxcbiAgICAgICAgICBpbnB1dFJlZiA9IF90aGlzJHByb3BzMi5pbnB1dFJlZixcbiAgICAgICAgICBpbmNyZW1lbnRhbCA9IF90aGlzJHByb3BzMi5pbmNyZW1lbnRhbCxcbiAgICAgICAgICBjb21wcmVzc2VkID0gX3RoaXMkcHJvcHMyLmNvbXByZXNzZWQsXG4gICAgICAgICAgb25TZWFyY2ggPSBfdGhpcyRwcm9wczIub25TZWFyY2gsXG4gICAgICAgICAgX2lzQ2xlYXJhYmxlID0gX3RoaXMkcHJvcHMyLmlzQ2xlYXJhYmxlLFxuICAgICAgICAgIGFwcGVuZCA9IF90aGlzJHByb3BzMi5hcHBlbmQsXG4gICAgICAgICAgcHJlcGVuZCA9IF90aGlzJHByb3BzMi5wcmVwZW5kLFxuICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMyLCBfZXhjbHVkZWQpO1xuXG4gICAgICB2YXIgdmFsdWUgPSB0aGlzLnByb3BzLnZhbHVlO1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLnByb3BzLnZhbHVlICE9PSAnc3RyaW5nJykgdmFsdWUgPSB0aGlzLnN0YXRlLnZhbHVlOyAvLyBTZXQgYWN0dWFsIHZhbHVlIG9mIGlzQ2xlYXJhYmxlIGlmIHZhbHVlIGV4aXN0cyBhcyB3ZWxsXG5cbiAgICAgIHZhciBpc0NsZWFyYWJsZSA9IEJvb2xlYW4oX2lzQ2xlYXJhYmxlICYmIHZhbHVlICYmICFyZXN0LnJlYWRPbmx5ICYmICFyZXN0LmRpc2FibGVkKTtcbiAgICAgIHZhciBudW1JY29uc0NsYXNzID0gZ2V0Rm9ybUNvbnRyb2xDbGFzc05hbWVGb3JJY29uQ291bnQoe1xuICAgICAgICBjbGVhcjogaXNDbGVhcmFibGUsXG4gICAgICAgIGlzSW52YWxpZDogaXNJbnZhbGlkLFxuICAgICAgICBpc0xvYWRpbmc6IGlzTG9hZGluZ1xuICAgICAgfSk7XG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUZpZWxkU2VhcmNoJywgbnVtSWNvbnNDbGFzcywge1xuICAgICAgICAnZXVpRmllbGRTZWFyY2gtLWZ1bGxXaWR0aCc6IGZ1bGxXaWR0aCxcbiAgICAgICAgJ2V1aUZpZWxkU2VhcmNoLS1jb21wcmVzc2VkJzogY29tcHJlc3NlZCxcbiAgICAgICAgJ2V1aUZpZWxkU2VhcmNoLS1pbkdyb3VwJzogcHJlcGVuZCB8fCBhcHBlbmQsXG4gICAgICAgICdldWlGaWVsZFNlYXJjaC1pc0xvYWRpbmcnOiBpc0xvYWRpbmcsXG4gICAgICAgICdldWlGaWVsZFNlYXJjaC1pc0NsZWFyYWJsZSc6IGlzQ2xlYXJhYmxlLFxuICAgICAgICAnZXVpRmllbGRTZWFyY2gtaXNJbnZhbGlkJzogaXNJbnZhbGlkXG4gICAgICB9LCBjbGFzc05hbWUpO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpRm9ybUNvbnRyb2xMYXlvdXQsIHtcbiAgICAgICAgaWNvbjogXCJzZWFyY2hcIixcbiAgICAgICAgZnVsbFdpZHRoOiBmdWxsV2lkdGgsXG4gICAgICAgIGlzTG9hZGluZzogaXNMb2FkaW5nLFxuICAgICAgICBpc0ludmFsaWQ6IGlzSW52YWxpZCxcbiAgICAgICAgY2xlYXI6IGlzQ2xlYXJhYmxlID8ge1xuICAgICAgICAgIG9uQ2xpY2s6IHRoaXMub25DbGVhcixcbiAgICAgICAgICAnZGF0YS10ZXN0LXN1YmonOiAnY2xlYXJTZWFyY2hCdXR0b24nXG4gICAgICAgIH0gOiB1bmRlZmluZWQsXG4gICAgICAgIGNvbXByZXNzZWQ6IGNvbXByZXNzZWQsXG4gICAgICAgIGFwcGVuZDogYXBwZW5kLFxuICAgICAgICBwcmVwZW5kOiBwcmVwZW5kXG4gICAgICB9LCBfX19FbW90aW9uSlNYKEV1aVZhbGlkYXRhYmxlQ29udHJvbCwge1xuICAgICAgICBpc0ludmFsaWQ6IGlzSW52YWxpZFxuICAgICAgfSwgX19fRW1vdGlvbkpTWChcImlucHV0XCIsIF9leHRlbmRzKHtcbiAgICAgICAgdHlwZTogXCJzZWFyY2hcIixcbiAgICAgICAgaWQ6IGlkLFxuICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICBwbGFjZWhvbGRlcjogcGxhY2Vob2xkZXIsXG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgb25LZXlVcDogZnVuY3Rpb24gb25LZXlVcChlKSB7XG4gICAgICAgICAgcmV0dXJuIF90aGlzMy5vbktleVVwKGUsIGluY3JlbWVudGFsLCBvblNlYXJjaCk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlZjogdGhpcy5zZXRSZWZcbiAgICAgIH0sIHJlc3QpKSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlGaWVsZFNlYXJjaDtcbn0oQ29tcG9uZW50KTtcblxuX2RlZmluZVByb3BlcnR5KEV1aUZpZWxkU2VhcmNoLCBcImRlZmF1bHRQcm9wc1wiLCB7XG4gIGZ1bGxXaWR0aDogZmFsc2UsXG4gIGlzTG9hZGluZzogZmFsc2UsXG4gIGluY3JlbWVudGFsOiBmYWxzZSxcbiAgY29tcHJlc3NlZDogZmFsc2UsXG4gIGlzQ2xlYXJhYmxlOiB0cnVlXG59KTtcblxuRXVpRmllbGRTZWFyY2gucHJvcFR5cGVzID0ge1xuICBuYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBpc0ludmFsaWQ6IFByb3BUeXBlcy5ib29sLFxuICBmdWxsV2lkdGg6IFByb3BUeXBlcy5ib29sLFxuICBpc0xvYWRpbmc6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIENhbGxlZCB3aGVuIHRoZSB1c2VyIHByZXNzZXMgW0VudGVyXSBPUiBvbiBjaGFuZ2UgaWYgdGhlIGluY3JlbWVudGFsIHByb3AgaXMgYHRydWVgLlxuICAgICAqIElmIHlvdSBkb24ndCBuZWVkIHRoZSBvbltFbnRlcl0gZnVuY3Rpb25hbGl0eSwgcHJlZmVyIHVzaW5nIG9uQ2hhbmdlXG4gICAgICovXG4gIG9uU2VhcmNoOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICAgKiBXaGVuIGB0cnVlYCB0aGUgc2VhcmNoIHdpbGwgYmUgZXhlY3V0ZWQgKHRoYXQgaXMsIHRoZSBgb25TZWFyY2hgIHdpbGwgYmUgY2FsbGVkKSBhcyB0aGVcbiAgICAgKiB1c2VyIHR5cGVzLlxuICAgICAqL1xuICBpbmNyZW1lbnRhbDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogd2hlbiBgdHJ1ZWAgY3JlYXRlcyBhIHNob3J0ZXIgaGVpZ2h0IGlucHV0XG4gICAgICovXG4gIGNvbXByZXNzZWQ6IFByb3BUeXBlcy5ib29sLFxuICBpbnB1dFJlZjogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAgICogU2hvd3MgYSBidXR0b24gdGhhdCBxdWlja2x5IGNsZWFycyBhbnkgaW5wdXRcbiAgICAgKi9cbiAgaXNDbGVhcmFibGU6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5wdXQgZ3JvdXAgd2l0aCBlbGVtZW50KHMpIGNvbWluZyBiZWZvcmUgaW5wdXRcbiAgICAgKiBgc3RyaW5nYCB8IGBSZWFjdEVsZW1lbnRgIG9yIGFuIGFycmF5IG9mIHRoZXNlXG4gICAgICovXG4gIHByZXBlbmQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQpLmlzUmVxdWlyZWRdKSxcblxuICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGlucHV0IGdyb3VwIHdpdGggZWxlbWVudChzKSBjb21pbmcgYWZ0ZXIgaW5wdXQuXG4gICAgICogYHN0cmluZ2AgfCBgUmVhY3RFbGVtZW50YCBvciBhbiBhcnJheSBvZiB0aGVzZVxuICAgICAqL1xuICBhcHBlbmQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQpLmlzUmVxdWlyZWRdKSxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nXG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gV2UgZG9uJ3Qgbm9ybWFsbHkgdXNlICdJJyBwcmVmaXhlcywgdGhpcyBmaWxlIGlzIGFuIGV4Y2VwdGlvblxudmFyIEJyb3dzZXJJbXBsID0ge1xuICBpc0V2ZW50U3VwcG9ydGVkOiBmdW5jdGlvbiBpc0V2ZW50U3VwcG9ydGVkKG5hbWUsIGVsZW1lbnQpIHtcbiAgICByZXR1cm4gXCJvblwiLmNvbmNhdChuYW1lKSBpbiBlbGVtZW50O1xuICB9XG59O1xuZXhwb3J0IHZhciBCcm93c2VyID0gT2JqZWN0LmZyZWV6ZShCcm93c2VySW1wbCk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aUZvcm1FcnJvclRleHQgPSBmdW5jdGlvbiBFdWlGb3JtRXJyb3JUZXh0KF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpRm9ybUVycm9yVGV4dCcsIGNsYXNzTmFtZSk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgXCJhcmlhLWxpdmVcIjogXCJwb2xpdGVcIlxuICB9LCByZXN0KSwgY2hpbGRyZW4pO1xufTtcbkV1aUZvcm1FcnJvclRleHQucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aUZvcm1IZWxwVGV4dCA9IGZ1bmN0aW9uIEV1aUZvcm1IZWxwVGV4dChfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUZvcm1IZWxwVGV4dCcsIGNsYXNzTmFtZSk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgfSwgcmVzdCksIGNoaWxkcmVuKTtcbn07XG5FdWlGb3JtSGVscFRleHQucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbn07IiwgImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxudmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiaGVscFRleHRcIiwgXCJpc0ludmFsaWRcIiwgXCJlcnJvclwiLCBcImxhYmVsXCIsIFwibGFiZWxUeXBlXCIsIFwibGFiZWxBcHBlbmRcIiwgXCJoYXNFbXB0eUxhYmVsU3BhY2VcIiwgXCJmdWxsV2lkdGhcIiwgXCJjbGFzc05hbWVcIiwgXCJkZXNjcmliZWRCeUlkc1wiLCBcImRpc3BsYXlcIiwgXCJoYXNDaGlsZExhYmVsXCIsIFwiaWRcIiwgXCJpc0Rpc2FibGVkXCJdO1xuXG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7IHJldHVybiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5KGFycikgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFycikgfHwgX25vbkl0ZXJhYmxlU3ByZWFkKCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7IGlmICh0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGl0ZXJbU3ltYm9sLml0ZXJhdG9yXSAhPSBudWxsIHx8IGl0ZXJbXCJAQGl0ZXJhdG9yXCJdICE9IG51bGwpIHJldHVybiBBcnJheS5mcm9tKGl0ZXIpOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KGFycik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgY2xvbmVFbGVtZW50LCBDb21wb25lbnQsIENoaWxkcmVuIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBrZXlzT2YgfSBmcm9tICcuLi8uLi9jb21tb24nO1xuaW1wb3J0IHsgZ2V0IH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvb2JqZWN0cyc7XG5pbXBvcnQgeyBFdWlGb3JtSGVscFRleHQgfSBmcm9tICcuLi9mb3JtX2hlbHBfdGV4dCc7XG5pbXBvcnQgeyBFdWlGb3JtRXJyb3JUZXh0IH0gZnJvbSAnLi4vZm9ybV9lcnJvcl90ZXh0JztcbmltcG9ydCB7IEV1aUZvcm1MYWJlbCB9IGZyb20gJy4uL2Zvcm1fbGFiZWwnO1xuaW1wb3J0IHsgaHRtbElkR2VuZXJhdG9yIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYWNjZXNzaWJpbGl0eSc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIGRpc3BsYXlUb0NsYXNzTmFtZU1hcCA9IHtcbiAgcm93OiBudWxsLFxuICByb3dDb21wcmVzc2VkOiAnZXVpRm9ybVJvdy0tY29tcHJlc3NlZCcsXG4gIGNvbHVtbkNvbXByZXNzZWQ6ICdldWlGb3JtUm93LS1jb21wcmVzc2VkIGV1aUZvcm1Sb3ctLWhvcml6b250YWwnLFxuICBjZW50ZXI6IG51bGwsXG4gIGNlbnRlckNvbXByZXNzZWQ6ICdldWlGb3JtUm93LS1jb21wcmVzc2VkJyxcbiAgY29sdW1uQ29tcHJlc3NlZFN3aXRjaDogJ2V1aUZvcm1Sb3ctLWNvbXByZXNzZWQgZXVpRm9ybVJvdy0taG9yaXpvbnRhbCBldWlGb3JtUm93LS1oYXNTd2l0Y2gnXG59O1xuZXhwb3J0IHZhciBESVNQTEFZUyA9IGtleXNPZihkaXNwbGF5VG9DbGFzc05hbWVNYXApO1xuZXhwb3J0IHZhciBFdWlGb3JtUm93ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhFdWlGb3JtUm93LCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aUZvcm1Sb3cpO1xuXG4gIGZ1bmN0aW9uIEV1aUZvcm1Sb3coKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aUZvcm1Sb3cpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIF9hcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgX2FyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbC5hcHBseShfc3VwZXIsIFt0aGlzXS5jb25jYXQoX2FyZ3MpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzdGF0ZVwiLCB7XG4gICAgICBpc0ZvY3VzZWQ6IGZhbHNlLFxuICAgICAgaWQ6IF90aGlzLnByb3BzLmlkIHx8IGh0bWxJZEdlbmVyYXRvcigpKClcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkZvY3VzXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIERvaW5nIHRoaXMgdG8gYWxsb3cgb25Gb2N1cyB0byBiZSBjYWxsZWQgY29ycmVjdGx5IGZyb20gdGhlIGNoaWxkIGlucHV0IGVsZW1lbnQgYXMgdGhpcyBjb21wb25lbnQgb3ZlcnJpZGVzIGl0XG4gICAgICB2YXIgb25DaGlsZEZvY3VzID0gZ2V0KF90aGlzLnByb3BzLCAnY2hpbGRyZW4ucHJvcHMub25Gb2N1cycpO1xuXG4gICAgICBpZiAob25DaGlsZEZvY3VzKSB7XG4gICAgICAgIG9uQ2hpbGRGb2N1cy5hcHBseSh2b2lkIDAsIGFyZ3VtZW50cyk7XG4gICAgICB9XG5cbiAgICAgIF90aGlzLnNldFN0YXRlKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICAgIHZhciBpc0ZvY3VzZWQgPSBfcmVmLmlzRm9jdXNlZDtcblxuICAgICAgICBpZiAoIWlzRm9jdXNlZCkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpc0ZvY3VzZWQ6IHRydWVcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkJsdXJcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gRG9pbmcgdGhpcyB0byBhbGxvdyBvbkJsdXIgdG8gYmUgY2FsbGVkIGNvcnJlY3RseSBmcm9tIHRoZSBjaGlsZCBpbnB1dCBlbGVtZW50IGFzIHRoaXMgY29tcG9uZW50IG92ZXJyaWRlcyBpdFxuICAgICAgdmFyIG9uQ2hpbGRCbHVyID0gZ2V0KF90aGlzLnByb3BzLCAnY2hpbGRyZW4ucHJvcHMub25CbHVyJyk7XG5cbiAgICAgIGlmIChvbkNoaWxkQmx1cikge1xuICAgICAgICBvbkNoaWxkQmx1ci5hcHBseSh2b2lkIDAsIGFyZ3VtZW50cyk7XG4gICAgICB9XG5cbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgaXNGb2N1c2VkOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoRXVpRm9ybVJvdywgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfcmVmMiwgX2NoaWxkJHByb3BzJGRpc2FibGVkO1xuXG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgICAgaGVscFRleHQgPSBfdGhpcyRwcm9wcy5oZWxwVGV4dCxcbiAgICAgICAgICBpc0ludmFsaWQgPSBfdGhpcyRwcm9wcy5pc0ludmFsaWQsXG4gICAgICAgICAgZXJyb3IgPSBfdGhpcyRwcm9wcy5lcnJvcixcbiAgICAgICAgICBsYWJlbCA9IF90aGlzJHByb3BzLmxhYmVsLFxuICAgICAgICAgIGxhYmVsVHlwZSA9IF90aGlzJHByb3BzLmxhYmVsVHlwZSxcbiAgICAgICAgICBsYWJlbEFwcGVuZCA9IF90aGlzJHByb3BzLmxhYmVsQXBwZW5kLFxuICAgICAgICAgIGhhc0VtcHR5TGFiZWxTcGFjZSA9IF90aGlzJHByb3BzLmhhc0VtcHR5TGFiZWxTcGFjZSxcbiAgICAgICAgICBmdWxsV2lkdGggPSBfdGhpcyRwcm9wcy5mdWxsV2lkdGgsXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMuY2xhc3NOYW1lLFxuICAgICAgICAgIGRlc2NyaWJlZEJ5SWRzID0gX3RoaXMkcHJvcHMuZGVzY3JpYmVkQnlJZHMsXG4gICAgICAgICAgZGlzcGxheSA9IF90aGlzJHByb3BzLmRpc3BsYXksXG4gICAgICAgICAgaGFzQ2hpbGRMYWJlbCA9IF90aGlzJHByb3BzLmhhc0NoaWxkTGFiZWwsXG4gICAgICAgICAgcHJvcHNJZCA9IF90aGlzJHByb3BzLmlkLFxuICAgICAgICAgIGlzRGlzYWJsZWQgPSBfdGhpcyRwcm9wcy5pc0Rpc2FibGVkLFxuICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgICAgIHZhciBpZCA9IHRoaXMuc3RhdGUuaWQ7XG4gICAgICB2YXIgaGFzTGFiZWwgPSBsYWJlbCB8fCBsYWJlbEFwcGVuZDtcbiAgICAgIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpRm9ybVJvdycsIHtcbiAgICAgICAgJ2V1aUZvcm1Sb3ctLWhhc0VtcHR5TGFiZWxTcGFjZSc6IGhhc0VtcHR5TGFiZWxTcGFjZSxcbiAgICAgICAgJ2V1aUZvcm1Sb3ctLWZ1bGxXaWR0aCc6IGZ1bGxXaWR0aCxcbiAgICAgICAgJ2V1aUZvcm1Sb3ctLWhhc0xhYmVsJzogaGFzTGFiZWxcbiAgICAgIH0sIGRpc3BsYXlUb0NsYXNzTmFtZU1hcFtkaXNwbGF5XSwgLy8gU2FmZSB1c2Ugb2YgISBhcyBkZWZhdWx0IHByb3AgaXMgJ3JvdydcbiAgICAgIGNsYXNzTmFtZSk7XG4gICAgICB2YXIgb3B0aW9uYWxIZWxwVGV4dHM7XG5cbiAgICAgIGlmIChoZWxwVGV4dCkge1xuICAgICAgICB2YXIgaGVscFRleHRzID0gQXJyYXkuaXNBcnJheShoZWxwVGV4dCkgPyBoZWxwVGV4dCA6IFtoZWxwVGV4dF07XG4gICAgICAgIG9wdGlvbmFsSGVscFRleHRzID0gaGVscFRleHRzLm1hcChmdW5jdGlvbiAoaGVscFRleHQsIGkpIHtcbiAgICAgICAgICB2YXIga2V5ID0gdHlwZW9mIGhlbHBUZXh0ID09PSAnc3RyaW5nJyA/IGhlbHBUZXh0IDogaTtcbiAgICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlGb3JtSGVscFRleHQsIHtcbiAgICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgICAgaWQ6IFwiXCIuY29uY2F0KGlkLCBcIi1oZWxwLVwiKS5jb25jYXQoaSksXG4gICAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpRm9ybVJvd19fdGV4dFwiXG4gICAgICAgICAgfSwgaGVscFRleHQpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdmFyIG9wdGlvbmFsRXJyb3JzO1xuXG4gICAgICBpZiAoZXJyb3IgJiYgaXNJbnZhbGlkKSB7XG4gICAgICAgIHZhciBlcnJvclRleHRzID0gQXJyYXkuaXNBcnJheShlcnJvcikgPyBlcnJvciA6IFtlcnJvcl07XG4gICAgICAgIG9wdGlvbmFsRXJyb3JzID0gZXJyb3JUZXh0cy5tYXAoZnVuY3Rpb24gKGVycm9yLCBpKSB7XG4gICAgICAgICAgdmFyIGtleSA9IHR5cGVvZiBlcnJvciA9PT0gJ3N0cmluZycgPyBlcnJvciA6IGk7XG4gICAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpRm9ybUVycm9yVGV4dCwge1xuICAgICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgICBpZDogXCJcIi5jb25jYXQoaWQsIFwiLWVycm9yLVwiKS5jb25jYXQoaSksXG4gICAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpRm9ybVJvd19fdGV4dFwiXG4gICAgICAgICAgfSwgZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdmFyIG9wdGlvbmFsTGFiZWw7XG4gICAgICB2YXIgaXNMZWdlbmQgPSBsYWJlbCAmJiBsYWJlbFR5cGUgPT09ICdsZWdlbmQnID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgdmFyIGxhYmVsSWQgPSBcIlwiLmNvbmNhdChpZCwgXCItbGFiZWxcIik7XG5cbiAgICAgIGlmIChoYXNMYWJlbCkge1xuICAgICAgICB2YXIgbGFiZWxQcm9wcyA9IHt9O1xuXG4gICAgICAgIGlmIChpc0xlZ2VuZCkge1xuICAgICAgICAgIGxhYmVsUHJvcHMgPSB7XG4gICAgICAgICAgICB0eXBlOiBsYWJlbFR5cGVcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxhYmVsUHJvcHMgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe1xuICAgICAgICAgICAgaHRtbEZvcjogaGFzQ2hpbGRMYWJlbCA/IGlkIDogdW5kZWZpbmVkXG4gICAgICAgICAgfSwgIWlzRGlzYWJsZWQgJiYge1xuICAgICAgICAgICAgaXNGb2N1c2VkOiB0aGlzLnN0YXRlLmlzRm9jdXNlZFxuICAgICAgICAgIH0pLCB7fSwge1xuICAgICAgICAgICAgLy8gSWYgdGhlIHJvdyBpcyBkaXNhYmxlZCwgZG9uJ3QgcGFzcyB0aGUgaXNGb2N1c2VkIHN0YXRlLlxuICAgICAgICAgICAgdHlwZTogbGFiZWxUeXBlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBvcHRpb25hbExhYmVsID0gX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICAgICAgY2xhc3NOYW1lOiBcImV1aUZvcm1Sb3dfX2xhYmVsV3JhcHBlclwiXG4gICAgICAgIH0sIF9fX0Vtb3Rpb25KU1goRXVpRm9ybUxhYmVsLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgY2xhc3NOYW1lOiBcImV1aUZvcm1Sb3dfX2xhYmVsXCIsXG4gICAgICAgICAgaXNJbnZhbGlkOiBpc0ludmFsaWQsXG4gICAgICAgICAgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgICBcImFyaWEtaW52YWxpZFwiOiBpc0ludmFsaWQsXG4gICAgICAgICAgaWQ6IGxhYmVsSWRcbiAgICAgICAgfSwgbGFiZWxQcm9wcyksIGxhYmVsKSwgbGFiZWxBcHBlbmQgJiYgJyAnLCBsYWJlbEFwcGVuZCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBvcHRpb25hbFByb3BzID0ge307XG4gICAgICAvKipcbiAgICAgICAqIFNhZmUgdXNlIG9mICEgYXMgZGVmYXVsdCBwcm9wIGlzIFtdXG4gICAgICAgKi9cblxuICAgICAgdmFyIGRlc2NyaWJpbmdJZHMgPSBfdG9Db25zdW1hYmxlQXJyYXkoZGVzY3JpYmVkQnlJZHMpO1xuXG4gICAgICBpZiAob3B0aW9uYWxIZWxwVGV4dHMpIHtcbiAgICAgICAgb3B0aW9uYWxIZWxwVGV4dHMuZm9yRWFjaChmdW5jdGlvbiAob3B0aW9uYWxIZWxwVGV4dCkge1xuICAgICAgICAgIHJldHVybiBkZXNjcmliaW5nSWRzLnB1c2gob3B0aW9uYWxIZWxwVGV4dC5wcm9wcy5pZCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9uYWxFcnJvcnMpIHtcbiAgICAgICAgb3B0aW9uYWxFcnJvcnMuZm9yRWFjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZGVzY3JpYmluZ0lkcy5wdXNoKGVycm9yLnByb3BzLmlkKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChkZXNjcmliaW5nSWRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgb3B0aW9uYWxQcm9wc1snYXJpYS1kZXNjcmliZWRieSddID0gZGVzY3JpYmluZ0lkcy5qb2luKCcgJyk7XG4gICAgICB9XG5cbiAgICAgIHZhciBjaGlsZCA9IENoaWxkcmVuLm9ubHkoY2hpbGRyZW4pO1xuICAgICAgdmFyIGZpZWxkID0gLyojX19QVVJFX18qL2Nsb25lRWxlbWVudChjaGlsZCwgX29iamVjdFNwcmVhZCh7XG4gICAgICAgIGlkOiBpZCxcbiAgICAgICAgLy8gQWxsb3cgdGhlIGNoaWxkJ3MgZGlzYWJsZWQgb3IgaXNEaXNhYmxlZCBwcm9wIHRvIHN1cGVyY2VkZSB0aGUgYGlzRGlzYWJsZWRgXG4gICAgICAgIGRpc2FibGVkOiAoX3JlZjIgPSAoX2NoaWxkJHByb3BzJGRpc2FibGVkID0gY2hpbGQucHJvcHMuZGlzYWJsZWQpICE9PSBudWxsICYmIF9jaGlsZCRwcm9wcyRkaXNhYmxlZCAhPT0gdm9pZCAwID8gX2NoaWxkJHByb3BzJGRpc2FibGVkIDogY2hpbGQucHJvcHMuaXNEaXNhYmxlZCkgIT09IG51bGwgJiYgX3JlZjIgIT09IHZvaWQgMCA/IF9yZWYyIDogaXNEaXNhYmxlZCxcbiAgICAgICAgb25Gb2N1czogdGhpcy5vbkZvY3VzLFxuICAgICAgICBvbkJsdXI6IHRoaXMub25CbHVyXG4gICAgICB9LCBvcHRpb25hbFByb3BzKSk7XG4gICAgICB2YXIgZmllbGRXcmFwcGVyQ2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUZvcm1Sb3dfX2ZpZWxkV3JhcHBlcicsIHtcbiAgICAgICAgZXVpRm9ybVJvd19fZmllbGRXcmFwcGVyRGlzcGxheU9ubHk6XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTYWZlIHVzZSBvZiAhIGFzIGRlZmF1bHQgcHJvcCBpcyAncm93J1xuICAgICAgICAgKi9cbiAgICAgICAgZGlzcGxheS5zdGFydHNXaXRoKCdjZW50ZXInKVxuICAgICAgfSk7XG4gICAgICB2YXIgc2hhcmVkUHJvcHMgPSB7XG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgaWQ6IFwiXCIuY29uY2F0KGlkLCBcIi1yb3dcIilcbiAgICAgIH07XG5cbiAgICAgIHZhciBjb250ZW50cyA9IF9fX0Vtb3Rpb25KU1goUmVhY3QuRnJhZ21lbnQsIG51bGwsIG9wdGlvbmFsTGFiZWwsIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICBjbGFzc05hbWU6IGZpZWxkV3JhcHBlckNsYXNzZXNcbiAgICAgIH0sIGZpZWxkLCBvcHRpb25hbEVycm9ycywgb3B0aW9uYWxIZWxwVGV4dHMpKTtcblxuICAgICAgcmV0dXJuIGxhYmVsVHlwZSA9PT0gJ2xlZ2VuZCcgPyBfX19FbW90aW9uSlNYKFwiZmllbGRzZXRcIiwgX2V4dGVuZHMoe30sIHNoYXJlZFByb3BzLCByZXN0KSwgY29udGVudHMpIDogX19fRW1vdGlvbkpTWChcImRpdlwiLCBfZXh0ZW5kcyh7fSwgc2hhcmVkUHJvcHMsIHJlc3QpLCBjb250ZW50cyk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEV1aUZvcm1Sb3c7XG59KENvbXBvbmVudCk7XG5cbl9kZWZpbmVQcm9wZXJ0eShFdWlGb3JtUm93LCBcImRlZmF1bHRQcm9wc1wiLCB7XG4gIGRpc3BsYXk6ICdyb3cnLFxuICBoYXNFbXB0eUxhYmVsU3BhY2U6IGZhbHNlLFxuICBmdWxsV2lkdGg6IGZhbHNlLFxuICBkZXNjcmliZWRCeUlkczogW10sXG4gIGxhYmVsVHlwZTogJ2xhYmVsJyxcbiAgaGFzQ2hpbGRMYWJlbDogdHJ1ZVxufSk7XG5cbkV1aUZvcm1Sb3cucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICAgKiBEZWZhdWx0cyB0byByZW5kZXJpbmcgYSBgPGxhYmVsPmAgYnV0IGlmIHBhc3NlZCBgJ2xlZ2VuZCdgIGZvciBsYWJlbFR5cGUsXG4gICAgICogd2lsbCByZW5kZXIgYm90aCBhIGA8bGVnZW5kPmAgYW5kIHRoZSBzdXJyb3VuZGluZyBjb250YWluZXIgYXMgYSBgPGZpZWxkc2V0PmBcbiAgICAgKi9cbiAgbGFiZWxUeXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wibGFiZWxcIl0pLCBQcm9wVHlwZXMub25lT2YoW1wibGVnZW5kXCJdKV0pLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogV2hlbiBgcm93Q29tcHJlc3NlZGAsIGp1c3QgdGlnaHRlbnMgdXAgdGhlIHNwYWNpbmc7XG4gICAgICogU2V0IHRvIGBjb2x1bW5Db21wcmVzc2VkYCBpZiBjb21wcmVzc2VkXG4gICAgICogYW5kIGhvcml6b250YWwgbGF5b3V0IGlzIG5lZWRlZC5cbiAgICAgKiBTZXQgdG8gYGNlbnRlcmAgb3IgYGNlbnRlckNvbXByZXNzZWRgIHRvIGFsaWduIG5vbi1pbnB1dFxuICAgICAqIGNvbnRlbnQgYmV0dGVyIHdpdGggaW5saW5lIHJvd3MuXG4gICAgICogU2V0IHRvIGBjb2x1bW5Db21wcmVzc2VkU3dpdGNoYCBpZiB0aGUgZm9ybSBjb250cm9sIGJlaW5nIHBhc3NlZFxuICAgICAqIGFzIHRoZSBjaGlsZCBpcyBhIHN3aXRjaC5cbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBXaGVuIGByb3dDb21wcmVzc2VkYCwganVzdCB0aWdodGVucyB1cCB0aGUgc3BhY2luZztcbiAgICAgKiBTZXQgdG8gYGNvbHVtbkNvbXByZXNzZWRgIGlmIGNvbXByZXNzZWRcbiAgICAgKiBhbmQgaG9yaXpvbnRhbCBsYXlvdXQgaXMgbmVlZGVkLlxuICAgICAqIFNldCB0byBgY2VudGVyYCBvciBgY2VudGVyQ29tcHJlc3NlZGAgdG8gYWxpZ24gbm9uLWlucHV0XG4gICAgICogY29udGVudCBiZXR0ZXIgd2l0aCBpbmxpbmUgcm93cy5cbiAgICAgKiBTZXQgdG8gYGNvbHVtbkNvbXByZXNzZWRTd2l0Y2hgIGlmIHRoZSBmb3JtIGNvbnRyb2wgYmVpbmcgcGFzc2VkXG4gICAgICogYXMgdGhlIGNoaWxkIGlzIGEgc3dpdGNoLlxuICAgICAqL1xuICBkaXNwbGF5OiBQcm9wVHlwZXMub25lT2YoW1wicm93XCIsIFwicm93Q29tcHJlc3NlZFwiLCBcImNvbHVtbkNvbXByZXNzZWRcIiwgXCJjZW50ZXJcIiwgXCJjZW50ZXJDb21wcmVzc2VkXCIsIFwiY29sdW1uQ29tcHJlc3NlZFN3aXRjaFwiXSksXG4gIGhhc0VtcHR5TGFiZWxTcGFjZTogUHJvcFR5cGVzLmJvb2wsXG4gIGZ1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogSURzIG9mIGFkZGl0aW9uYWwgZWxlbWVudHMgdGhhdCBzaG91bGQgYmUgcGFydCBvZiBjaGlsZHJlbidzIGBhcmlhLWRlc2NyaWJlZGJ5YFxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIElEcyBvZiBhZGRpdGlvbmFsIGVsZW1lbnRzIHRoYXQgc2hvdWxkIGJlIHBhcnQgb2YgY2hpbGRyZW4ncyBgYXJpYS1kZXNjcmliZWRieWBcbiAgICAgKi9cbiAgZGVzY3JpYmVkQnlJZHM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCksXG5cbiAgLyoqXG4gICAgICogRXNjYXBlIGhhdGNoIHRvIG5vdCByZW5kZXIgZHVwbGljYXRlIGxhYmVscyBpZiB0aGUgY2hpbGQgYWxzbyByZW5kZXJzIGEgbGFiZWxcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBFc2NhcGUgaGF0Y2ggdG8gbm90IHJlbmRlciBkdXBsaWNhdGUgbGFiZWxzIGlmIHRoZSBjaGlsZCBhbHNvIHJlbmRlcnMgYSBsYWJlbFxuICAgICAqL1xuICBoYXNDaGlsZExhYmVsOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBSZWFjdEVsZW1lbnQgdG8gcmVuZGVyIGFzIHRoaXMgY29tcG9uZW50J3MgY29udGVudFxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIFJlYWN0RWxlbWVudCB0byByZW5kZXIgYXMgdGhpcyBjb21wb25lbnQncyBjb250ZW50XG4gICAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkLFxuICBsYWJlbDogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAgICogQWRkcyBhbiBleHRyYSBub2RlIHRvIHRoZSByaWdodCBvZiB0aGUgZm9ybSBsYWJlbCB3aXRob3V0XG4gICAgICogYmVpbmcgY29udGFpbmVkIGluc2lkZSB0aGUgZm9ybSBsYWJlbC4gR29vZCBmb3IgdGhpbmdzXG4gICAgICogbGlrZSBkb2N1bWVudGF0aW9uIGxpbmtzLlxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIEFkZHMgYW4gZXh0cmEgbm9kZSB0byB0aGUgcmlnaHQgb2YgdGhlIGZvcm0gbGFiZWwgd2l0aG91dFxuICAgICAqIGJlaW5nIGNvbnRhaW5lZCBpbnNpZGUgdGhlIGZvcm0gbGFiZWwuIEdvb2QgZm9yIHRoaW5nc1xuICAgICAqIGxpa2UgZG9jdW1lbnRhdGlvbiBsaW5rcy5cbiAgICAgKi9cbiAgbGFiZWxBcHBlbmQ6IFByb3BUeXBlcy5hbnksXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBpc0ludmFsaWQ6IFByb3BUeXBlcy5ib29sLFxuICBlcnJvcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCkuaXNSZXF1aXJlZF0pLFxuXG4gIC8qKlxuICAgICAqICBBZGRzIGEgc2luZ2xlIG5vZGUvc3RyaW5nIG9yIGFuIGFycmF5IG9mIG5vZGVzL3N0cmluZ3MgYmVsb3cgdGhlIGlucHV0XG4gICAgICovXG5cbiAgLyoqXG4gICAgICogIEFkZHMgYSBzaW5nbGUgbm9kZS9zdHJpbmcgb3IgYW4gYXJyYXkgb2Ygbm9kZXMvc3RyaW5ncyBiZWxvdyB0aGUgaW5wdXRcbiAgICAgKi9cbiAgaGVscFRleHQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQpLmlzUmVxdWlyZWRdKSxcblxuICAvKipcbiAgICAgKiAgUGFzc2VkIGFsb25nIHRvIHRoZSBsYWJlbCBlbGVtZW50OyBhbmQgdG8gdGhlIGNoaWxkIGZpZWxkIGVsZW1lbnQgd2hlbiBgZGlzYWJsZWRgIGRvZXNuJ3QgYWxyZWFkeSBleGlzdCBvbiB0aGUgY2hpbGQgZmllbGQgZWxlbWVudC5cbiAgICAgKi9cblxuICAvKipcbiAgICAgKiAgUGFzc2VkIGFsb25nIHRvIHRoZSBsYWJlbCBlbGVtZW50OyBhbmQgdG8gdGhlIGNoaWxkIGZpZWxkIGVsZW1lbnQgd2hlbiBgZGlzYWJsZWRgIGRvZXNuJ3QgYWxyZWFkeSBleGlzdCBvbiB0aGUgY2hpbGQgZmllbGQgZWxlbWVudC5cbiAgICAgKi9cbiAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2xcbn07IiwgImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxudmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwib25DbG9zZVwiLCBcInRpdGxlXCIsIFwib25IZWlnaHRDaGFuZ2VcIiwgXCJ0cmFuc2l0aW9uVHlwZVwiLCBcInRyYW5zaXRpb25EaXJlY3Rpb25cIiwgXCJvblRyYW5zaXRpb25Db21wbGV0ZVwiLCBcIm9uVXNlS2V5Ym9hcmRUb05hdmlnYXRlXCIsIFwiaXRlbXNcIiwgXCJpbml0aWFsRm9jdXNlZEl0ZW1JbmRleFwiLCBcInNob3dOZXh0UGFuZWxcIiwgXCJzaG93UHJldmlvdXNQYW5lbFwiLCBcInNpemVcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IGNsb25lRWxlbWVudCwgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB0YWJiYWJsZSB9IGZyb20gJ3RhYmJhYmxlJztcbmltcG9ydCB7IGtleXNPZiB9IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vaWNvbic7XG5pbXBvcnQgeyBFdWlSZXNpemVPYnNlcnZlciB9IGZyb20gJy4uL29ic2VydmVyL3Jlc2l6ZV9vYnNlcnZlcic7XG5pbXBvcnQgeyBjYXNjYWRpbmdNZW51S2V5cyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aUNvbnRleHRNZW51SXRlbSB9IGZyb20gJy4vY29udGV4dF9tZW51X2l0ZW0nO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciB0aXRsZVNpemVUb0NsYXNzTmFtZU1hcCA9IHtcbiAgczogJ2V1aUNvbnRleHRNZW51UGFuZWxUaXRsZS0tc21hbGwnLFxuICBtOiBudWxsXG59O1xuZXhwb3J0IHZhciBTSVpFUyA9IGtleXNPZih0aXRsZVNpemVUb0NsYXNzTmFtZU1hcCk7XG52YXIgdHJhbnNpdGlvbkRpcmVjdGlvbkFuZFR5cGVUb0NsYXNzTmFtZU1hcCA9IHtcbiAgbmV4dDoge1xuICAgIGluOiAnZXVpQ29udGV4dE1lbnVQYW5lbC10eEluTGVmdCcsXG4gICAgb3V0OiAnZXVpQ29udGV4dE1lbnVQYW5lbC10eE91dExlZnQnXG4gIH0sXG4gIHByZXZpb3VzOiB7XG4gICAgaW46ICdldWlDb250ZXh0TWVudVBhbmVsLXR4SW5SaWdodCcsXG4gICAgb3V0OiAnZXVpQ29udGV4dE1lbnVQYW5lbC10eE91dFJpZ2h0J1xuICB9XG59O1xuZXhwb3J0IHZhciBFdWlDb250ZXh0TWVudVBhbmVsID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhFdWlDb250ZXh0TWVudVBhbmVsLCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aUNvbnRleHRNZW51UGFuZWwpO1xuXG4gIGZ1bmN0aW9uIEV1aUNvbnRleHRNZW51UGFuZWwocHJvcHMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpQ29udGV4dE1lbnVQYW5lbCk7XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHByb3BzKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJfaXNNb3VudGVkXCIsIGZhbHNlKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJiYWNrQnV0dG9uXCIsIG51bGwpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInBhbmVsXCIsIG51bGwpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImluaXRpYWxQb3BvdmVyUGFyZW50XCIsIG51bGwpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImZpbmRNZW51SXRlbXNcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzJGl0ZW1zO1xuXG4gICAgICBpZiAoIV90aGlzLnBhbmVsKSByZXR1cm47XG4gICAgICBpZiAoISgoX3RoaXMkcHJvcHMkaXRlbXMgPSBfdGhpcy5wcm9wcy5pdGVtcykgIT09IG51bGwgJiYgX3RoaXMkcHJvcHMkaXRlbXMgIT09IHZvaWQgMCAmJiBfdGhpcyRwcm9wcyRpdGVtcy5sZW5ndGgpKSByZXR1cm47IC8vIFdlIG9ubHkgbmVlZCBtZW51IGl0ZW1zL2Fycm93IGtleSBuYXZpZ2F0aW9uIGZvciB0aGUgYGl0ZW1zYCBBUElcblxuICAgICAgaWYgKF90aGlzLnN0YXRlLm1lbnVJdGVtcy5sZW5ndGgpIHJldHVybjsgLy8gSWYgd2UgYWxyZWFkeSBoYXZlIG1lbnUgaXRlbXMsIG5vIG5lZWQgdG8gY29udGludWVcblxuICAgICAgdmFyIHRhYmJhYmxlSXRlbXMgPSB0YWJiYWJsZShfdGhpcy5wYW5lbCk7XG5cbiAgICAgIGlmICh0YWJiYWJsZUl0ZW1zLmxlbmd0aCkge1xuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgbWVudUl0ZW1zOiB0YWJiYWJsZUl0ZW1zXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImZvY3VzTWVudUl0ZW1cIiwgZnVuY3Rpb24gKGRpcmVjdGlvbikge1xuICAgICAgdmFyIF90aGlzJHN0YXRlJG1lbnVJdGVtcztcblxuICAgICAgdmFyIGluZGV4T2Zmc2V0ID0gZGlyZWN0aW9uID09PSAndXAnID8gLTEgOiAxO1xuICAgICAgdmFyIG5leHRGb2N1c2VkSXRlbUluZGV4O1xuXG4gICAgICBpZiAoX3RoaXMuc3RhdGUuZm9jdXNlZEl0ZW1JbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIElmIHRoaXMgaXMgdGhlIGJlZ2lubmluZyBvZiB0aGUgdXNlcidzIGtleWJvYXJkIG5hdmlnYXRpb24gb2YgdGhlIG1lbnUsIHRoZW4gd2UnbGwgZm9jdXNcbiAgICAgICAgLy8gZWl0aGVyIHRoZSBmaXJzdCBvciBsYXN0IGl0ZW0uXG4gICAgICAgIG5leHRGb2N1c2VkSXRlbUluZGV4ID0gZGlyZWN0aW9uID09PSAndXAnID8gX3RoaXMuc3RhdGUubWVudUl0ZW1zLmxlbmd0aCAtIDEgOiAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV4dEZvY3VzZWRJdGVtSW5kZXggPSBfdGhpcy5zdGF0ZS5mb2N1c2VkSXRlbUluZGV4ICsgaW5kZXhPZmZzZXQ7XG5cbiAgICAgICAgaWYgKG5leHRGb2N1c2VkSXRlbUluZGV4IDwgMCkge1xuICAgICAgICAgIG5leHRGb2N1c2VkSXRlbUluZGV4ID0gX3RoaXMuc3RhdGUubWVudUl0ZW1zLmxlbmd0aCAtIDE7XG4gICAgICAgIH0gZWxzZSBpZiAobmV4dEZvY3VzZWRJdGVtSW5kZXggPT09IF90aGlzLnN0YXRlLm1lbnVJdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICBuZXh0Rm9jdXNlZEl0ZW1JbmRleCA9IDA7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBmb2N1c2VkSXRlbUluZGV4OiBuZXh0Rm9jdXNlZEl0ZW1JbmRleFxuICAgICAgfSk7XG5cbiAgICAgIChfdGhpcyRzdGF0ZSRtZW51SXRlbXMgPSBfdGhpcy5zdGF0ZS5tZW51SXRlbXNbbmV4dEZvY3VzZWRJdGVtSW5kZXhdKSA9PT0gbnVsbCB8fCBfdGhpcyRzdGF0ZSRtZW51SXRlbXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJHN0YXRlJG1lbnVJdGVtcy5mb2N1cygpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uS2V5RG93blwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIC8vIElmIHRoaXMgcGFuZWwgY29udGFpbnMgaXRlbXMgeW91IGNhbiB1c2UgdGhlIGxlZnQgYXJyb3cga2V5IHRvIGdvIGJhY2sgYXQgYW55IHRpbWUuXG4gICAgICAvLyBCdXQgaWYgaXQgZG9lc24ndCBjb250YWluIGl0ZW1zLCB0aGVuIHlvdSBoYXZlIHRvIGZvY3VzIG9uIHRoZSBiYWNrIGJ1dHRvbiBzcGVjaWZpY2FsbHksXG4gICAgICAvLyBzaW5jZSB0aGVyZSBjb3VsZCBiZSBjb250ZW50IGluc2lkZSB0aGUgcGFuZWwgd2hpY2ggcmVxdWlyZXMgdXNlIG9mIHRoZSBsZWZ0IGFycm93IGtleSxcbiAgICAgIC8vIGUuZy4gdGV4dCBpbnB1dHMuXG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBpdGVtcyA9IF90aGlzJHByb3BzLml0ZW1zLFxuICAgICAgICAgIG9uQ2xvc2UgPSBfdGhpcyRwcm9wcy5vbkNsb3NlLFxuICAgICAgICAgIHNob3dQcmV2aW91c1BhbmVsID0gX3RoaXMkcHJvcHMuc2hvd1ByZXZpb3VzUGFuZWw7XG5cbiAgICAgIGlmIChvbkNsb3NlICYmIChpdGVtcyAhPT0gbnVsbCAmJiBpdGVtcyAhPT0gdm9pZCAwICYmIGl0ZW1zLmxlbmd0aCB8fCBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBfdGhpcy5iYWNrQnV0dG9uIHx8IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IF90aGlzLnBhbmVsKSkge1xuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSBjYXNjYWRpbmdNZW51S2V5cy5BUlJPV19MRUZUKSB7XG4gICAgICAgICAgaWYgKHNob3dQcmV2aW91c1BhbmVsKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICBzaG93UHJldmlvdXNQYW5lbCgpO1xuXG4gICAgICAgICAgICBpZiAoX3RoaXMucHJvcHMub25Vc2VLZXlib2FyZFRvTmF2aWdhdGUpIHtcbiAgICAgICAgICAgICAgX3RoaXMucHJvcHMub25Vc2VLZXlib2FyZFRvTmF2aWdhdGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGl0ZW1zICE9PSBudWxsICYmIGl0ZW1zICE9PSB2b2lkIDAgJiYgaXRlbXMubGVuZ3RoKSB7XG4gICAgICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICAgICAgY2FzZSBjYXNjYWRpbmdNZW51S2V5cy5UQUI6XG4gICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAvLyBOT1RFOiBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGlzIHN0YWxlIGlmIG5vdCB3cmFwcGVkIGluIHJlcXVlc3RBbmltYXRpb25GcmFtZVxuICAgICAgICAgICAgICB2YXIgZm9jdXNlZEl0ZW1JbmRleCA9IF90aGlzLnN0YXRlLm1lbnVJdGVtcy5pbmRleE9mKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpOyAvLyBXZSBuZWVkIHRvIHN5bmMgb3VyIGludGVybmFsIHN0YXRlIHdpdGggdGhlIHVzZXIgdGFiYmluZyB0aHJvdWdoIGl0ZW1zXG5cblxuICAgICAgICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgZm9jdXNlZEl0ZW1JbmRleDogZm9jdXNlZEl0ZW1JbmRleCA+PSAwICYmIGZvY3VzZWRJdGVtSW5kZXggPCBfdGhpcy5zdGF0ZS5tZW51SXRlbXMubGVuZ3RoID8gZm9jdXNlZEl0ZW1JbmRleCA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIGNhc2NhZGluZ01lbnVLZXlzLkFSUk9XX1VQOlxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgX3RoaXMuZm9jdXNNZW51SXRlbSgndXAnKTtcblxuICAgICAgICAgICAgaWYgKF90aGlzLnByb3BzLm9uVXNlS2V5Ym9hcmRUb05hdmlnYXRlKSB7XG4gICAgICAgICAgICAgIF90aGlzLnByb3BzLm9uVXNlS2V5Ym9hcmRUb05hdmlnYXRlKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBjYXNjYWRpbmdNZW51S2V5cy5BUlJPV19ET1dOOlxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgX3RoaXMuZm9jdXNNZW51SXRlbSgnZG93bicpO1xuXG4gICAgICAgICAgICBpZiAoX3RoaXMucHJvcHMub25Vc2VLZXlib2FyZFRvTmF2aWdhdGUpIHtcbiAgICAgICAgICAgICAgX3RoaXMucHJvcHMub25Vc2VLZXlib2FyZFRvTmF2aWdhdGUoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIGNhc2NhZGluZ01lbnVLZXlzLkFSUk9XX1JJR0hUOlxuICAgICAgICAgICAgaWYgKF90aGlzLnByb3BzLnNob3dOZXh0UGFuZWwpIHtcbiAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgICBfdGhpcy5wcm9wcy5zaG93TmV4dFBhbmVsKG9uQ2xvc2UgJiYgX3RoaXMuc3RhdGUuZm9jdXNlZEl0ZW1JbmRleCA/IF90aGlzLnN0YXRlLmZvY3VzZWRJdGVtSW5kZXggLSAxIC8vIEFjY291bnQgZm9yIHBhbmVsIHRpdGxlIGJhY2sgYnV0dG9uXG4gICAgICAgICAgICAgIDogX3RoaXMuc3RhdGUuZm9jdXNlZEl0ZW1JbmRleCk7XG5cbiAgICAgICAgICAgICAgaWYgKF90aGlzLnByb3BzLm9uVXNlS2V5Ym9hcmRUb05hdmlnYXRlKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMucHJvcHMub25Vc2VLZXlib2FyZFRvTmF2aWdhdGUoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInJlY2xhaW1Qb3BvdmVyRm9jdXNcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICB3YWl0aW5nRm9ySW5pdGlhbFBvcG92ZXI6IGZhbHNlXG4gICAgICB9KTtcblxuICAgICAgX3RoaXMudGFrZUluaXRpYWxGb2N1cygpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uVHJhbnNpdGlvbkNvbXBsZXRlXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vblRyYW5zaXRpb25Db21wbGV0ZSkge1xuICAgICAgICBfdGhpcy5wcm9wcy5vblRyYW5zaXRpb25Db21wbGV0ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInBhbmVsUmVmXCIsIGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICBfdGhpcy5wYW5lbCA9IG5vZGU7XG5cbiAgICAgIF90aGlzLnVwZGF0ZUhlaWdodCgpO1xuXG4gICAgICBfdGhpcy5nZXRJbml0aWFsUG9wb3ZlclBhcmVudCgpO1xuXG4gICAgICBfdGhpcy5maW5kTWVudUl0ZW1zKCk7XG4gICAgfSk7XG5cbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIHByZXZQcm9wczoge1xuICAgICAgICBpdGVtczogX3RoaXMucHJvcHMuaXRlbXNcbiAgICAgIH0sXG4gICAgICBtZW51SXRlbXM6IFtdLFxuICAgICAgZm9jdXNlZEl0ZW1JbmRleDogcHJvcHMub25DbG9zZSAmJiBwcm9wcy5pbml0aWFsRm9jdXNlZEl0ZW1JbmRleCAhPSBudWxsID8gcHJvcHMuaW5pdGlhbEZvY3VzZWRJdGVtSW5kZXggKyAxIC8vIEFjY291bnQgZm9yIHBhbmVsIHRpdGxlIGJhY2sgYnV0dG9uXG4gICAgICA6IHByb3BzLmluaXRpYWxGb2N1c2VkSXRlbUluZGV4LFxuICAgICAgY3VycmVudEhlaWdodDogdW5kZWZpbmVkLFxuICAgICAgd2FpdGluZ0ZvckluaXRpYWxQb3BvdmVyOiBmYWxzZSxcbiAgICAgIHRvb2tJbml0aWFsRm9jdXM6IGZhbHNlXG4gICAgfTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH0gLy8gRmluZCBhbGwgdGFiYmFibGUgbWVudSBpdGVtcyBvbiBib3RoIHBhbmVsIGluaXQgYW5kXG4gIC8vIHdoZW5ldmVyIGBtZW51SXRlbXNgIHJlc2V0cyB3aGVuIGBwcm9wcy5pdGVtc2AgY2hhbmdlc1xuXG5cbiAgX2NyZWF0ZUNsYXNzKEV1aUNvbnRleHRNZW51UGFuZWwsIFt7XG4gICAga2V5OiBcInRha2VJbml0aWFsRm9jdXNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdGFrZUluaXRpYWxGb2N1cygpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICAvLyBHaXZlIHBvc2l0aW9uaW5nIHRpbWUgdG8gcmVuZGVyIGJlZm9yZSBmb2N1cyBpcyBhcHBsaWVkLiBPdGhlcndpc2UgcGFnZSBqdW1wcy5cbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghX3RoaXMyLl9pc01vdW50ZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gLy8gRG9uJ3QgdGFrZSBmb2N1cyB5ZXQgaWYgRXVpQ29udGV4dE1lbnUgaXMgaW4gYSBwb3BvdmVyXG4gICAgICAgIC8vIGFuZCB0aGUgcG9wb3ZlciBpcyBpbml0aWFsbHkgb3BlbmluZy90cmFuc2l0aW9uaW5nIGluXG5cblxuICAgICAgICBpZiAoX3RoaXMyLmluaXRpYWxQb3BvdmVyUGFyZW50ICYmIF90aGlzMi5zdGF0ZS53YWl0aW5nRm9ySW5pdGlhbFBvcG92ZXIpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gLy8gU2V0dGluZyBmb2N1cyB3aGlsZSB0cmFuc2l0aW9uaW5nIGNhdXNlcyB0aGUgYW5pbWF0aW9uIHRvIGdsaXRjaCwgc28gd2UgaGF2ZSB0byB3YWl0XG4gICAgICAgIC8vIHVudGlsIGl0J3MgZmluaXNoZWQgYmVmb3JlIHdlIGZvY3VzIGFueXRoaW5nLlxuXG5cbiAgICAgICAgaWYgKF90aGlzMi5wcm9wcy50cmFuc2l0aW9uVHlwZSkge1xuICAgICAgICAgIHZhciBfdGhpczIkcGFuZWw7XG5cbiAgICAgICAgICAvLyBJZiB0aGUgcGFuZWwgaXMgdHJhbnNpdGlvbmluZywgc2V0IGZvY3VzIHRvIHRoZSBwYW5lbCBzbyB0aGF0IHVzZXJzIHVzaW5nXG4gICAgICAgICAgLy8gYXJyb3cga2V5cyB0aGF0IGFyZSBmYXN0IGNsaWNrZXJzIGRvbid0IGFjY2lkZW50YWxseSBnZXQgc3RyYW5kZWQgZm9jdXNcbiAgICAgICAgICAvLyBvciB0cmlnZ2VyIGtleXN0cm9rZXMgd2hlbiBpdCBzaG91bGRuJ3RcbiAgICAgICAgICAoX3RoaXMyJHBhbmVsID0gX3RoaXMyLnBhbmVsKSA9PT0gbnVsbCB8fCBfdGhpczIkcGFuZWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzMiRwYW5lbC5mb2N1cyh7XG4gICAgICAgICAgICBwcmV2ZW50U2Nyb2xsOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IC8vIEluaXRpYWwgZm9jdXMgaGFzIGFscmVhZHkgYmVlbiBoYW5kbGVkLCBubyBuZWVkIHRvIGNvbnRpbnVlIGFuZCBwb3RlbnRpYWxseSBoaWphY2svZm9jdXMgZmlnaHRcblxuXG4gICAgICAgIGlmIChfdGhpczIuc3RhdGUudG9va0luaXRpYWxGb2N1cykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyBJZiBhbiBpdGVtIHNob3VsZCBiZSBmb2N1c2VkLCBmb2N1cyBpdCAoaWYgaXQgZXhpc3RzKVxuXG5cbiAgICAgICAgaWYgKF90aGlzMi5zdGF0ZS5mb2N1c2VkSXRlbUluZGV4ICE9IG51bGwgJiYgX3RoaXMyLnN0YXRlLm1lbnVJdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICB2YXIgZm9jdXNlZEl0ZW0gPSBfdGhpczIuc3RhdGUubWVudUl0ZW1zW190aGlzMi5zdGF0ZS5mb2N1c2VkSXRlbUluZGV4XTtcblxuICAgICAgICAgIGlmIChmb2N1c2VkSXRlbSkge1xuICAgICAgICAgICAgZm9jdXNlZEl0ZW0uZm9jdXMoKTtcbiAgICAgICAgICAgIHJldHVybiBfdGhpczIuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICB0b29rSW5pdGlhbEZvY3VzOiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gT3RoZXJ3aXNlLCBpZiB0aGUgYmFjayBidXR0b24gcGFuZWwgdGl0bGUgaXMgcHJlc2VudCwgZm9jdXMgaXRcblxuXG4gICAgICAgIGlmIChfdGhpczIuYmFja0J1dHRvbikge1xuICAgICAgICAgIC8vIEZvY3VzIHRoZSBiYWNrIGJ1dHRvbiBmb3IgYm90aCBgaXRlbXNgIGFuZCBgY2hpbGRyZW5gIEFQSXNcbiAgICAgICAgICBfdGhpczIuYmFja0J1dHRvbi5mb2N1cygpOyAvLyBJZiBgaXRlbXNgLCBlbnN1cmUgb3VyIGZvY3VzZWQgaXRlbSBpbmRleCBpcyBjb3JyZWN0XG5cblxuICAgICAgICAgIGlmIChfdGhpczIuc3RhdGUubWVudUl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgX3RoaXMyLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgZm9jdXNlZEl0ZW1JbmRleDogMFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIF90aGlzMi5zZXRTdGF0ZSh7XG4gICAgICAgICAgICB0b29rSW5pdGlhbEZvY3VzOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gLy8gRm9jdXMgb24gdGhlIHBhbmVsIGFzIGEgbGFzdCByZXNvcnQuXG5cblxuICAgICAgICBpZiAoX3RoaXMyLnBhbmVsICYmICFfdGhpczIucGFuZWwuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkpIHtcbiAgICAgICAgICBfdGhpczIucGFuZWwuZm9jdXMoKTtcblxuICAgICAgICAgIF90aGlzMi5zZXRTdGF0ZSh7XG4gICAgICAgICAgICB0b29rSW5pdGlhbEZvY3VzOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnREaWRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKF8sIHByZXZTdGF0ZSkge1xuICAgICAgaWYgKHByZXZTdGF0ZS5tZW51SXRlbXMgIT09IHRoaXMuc3RhdGUubWVudUl0ZW1zKSB7XG4gICAgICAgIHRoaXMuZmluZE1lbnVJdGVtcygpO1xuICAgICAgfSAvLyBGb2N1cyBpc24ndCBhbHdheXMgcmVhZHkgdG8gYmUgdGFrZW4gb24gbW91bnQsIHNvIHdlIG5lZWQgdG8gY2FsbCBpdFxuICAgICAgLy8gb24gdXBkYXRlIGFzIHdlbGwganVzdCBpbiBjYXNlXG5cblxuICAgICAgdGhpcy50YWtlSW5pdGlhbEZvY3VzKCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgLy8gSWYgRXVpQ29udGV4dE1lbnUgaXMgdXNlZCB3aXRoaW4gYW4gRXVpUG9wb3Zlciwgd2UgbmVlZCB0byB3YWl0IGZvciBFdWlQb3BvdmVyIHRvOlxuICAgICAgLy8gMS4gQ29ycmVjdGx5IHNldCBpdHMgYHJldHVybkZvY3VzYCB0byB0aGUgdG9nZ2xpbmcgYnV0dG9uLFxuICAgICAgLy8gICAgc28gZm9jdXMgaXMgY29ycmVjdGx5IHJlc3RvcmVkIHRvIHRoZSBwb3BvdmVyIHRvZ2dsZSBvbiBjbG9zZVxuICAgICAgLy8gMi4gRmluaXNoIGl0cyByZWFjdC1mb2N1cy1vbiBgYXV0b0ZvY3VzYCBiZWhhdmlvciBhZnRlciB0cmFuc2l0aW9uaW5nIGluLFxuICAgICAgLy8gICAgc28gdGhlIHBhbmVsIGNhbiBoYW5kbGUgaXRzIG93biBmb2N1cyB3aXRob3V0IGZvY3VzIGZpZ2h0aW5nXG4gICAgICBpZiAodGhpcy5pbml0aWFsUG9wb3ZlclBhcmVudCkge1xuICAgICAgICB0aGlzLmluaXRpYWxQb3BvdmVyUGFyZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5yZWNsYWltUG9wb3ZlckZvY3VzLCB7XG4gICAgICAgICAgb25jZTogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudGFrZUluaXRpYWxGb2N1cygpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9pc01vdW50ZWQgPSB0cnVlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIHZhciBfdGhpcyRpbml0aWFsUG9wb3ZlclA7XG5cbiAgICAgIChfdGhpcyRpbml0aWFsUG9wb3ZlclAgPSB0aGlzLmluaXRpYWxQb3BvdmVyUGFyZW50KSA9PT0gbnVsbCB8fCBfdGhpcyRpbml0aWFsUG9wb3ZlclAgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJGluaXRpYWxQb3BvdmVyUC5yZW1vdmVFdmVudExpc3RlbmVyKCdmb2N1cycsIHRoaXMucmVjbGFpbVBvcG92ZXJGb2N1cyk7XG4gICAgICB0aGlzLl9pc01vdW50ZWQgPSBmYWxzZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwidXBkYXRlSGVpZ2h0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHVwZGF0ZUhlaWdodCgpIHtcbiAgICAgIHZhciBjdXJyZW50SGVpZ2h0ID0gdGhpcy5wYW5lbCA/IHRoaXMucGFuZWwuY2xpZW50SGVpZ2h0IDogMDtcblxuICAgICAgaWYgKHRoaXMuc3RhdGUuaGVpZ2h0ICE9PSBjdXJyZW50SGVpZ2h0KSB7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLm9uSGVpZ2h0Q2hhbmdlKSB7XG4gICAgICAgICAgdGhpcy5wcm9wcy5vbkhlaWdodENoYW5nZShjdXJyZW50SGVpZ2h0KTtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIGhlaWdodDogY3VycmVudEhlaWdodFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldEluaXRpYWxQb3BvdmVyUGFyZW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldEluaXRpYWxQb3BvdmVyUGFyZW50KCkge1xuICAgICAgdmFyIF9wYXJlbnQkcGFyZW50Tm9kZTtcblxuICAgICAgLy8gSWYgYHRyYW5zaXRpb25UeXBlYCBleGlzdHMsIHRoYXQgbWVhbnMgd2UncmUgbmF2aWdhdGluZyBiZXR3ZWVuIHBhbmVsc1xuICAgICAgLy8gYW5kIHRoZSBpbml0aWFsIHBvcG92ZXIgaGFzIGFscmVhZHkgbG9hZGVkLCBzbyB3ZSBzaG91bGRuJ3QgbmVlZCB0aGlzIGxvZ2ljXG4gICAgICBpZiAodGhpcy5wcm9wcy50cmFuc2l0aW9uVHlwZSkgcmV0dXJuO1xuICAgICAgaWYgKCF0aGlzLnBhbmVsKSByZXR1cm47XG4gICAgICB2YXIgcGFyZW50ID0gdGhpcy5wYW5lbC5wYXJlbnROb2RlO1xuICAgICAgaWYgKCFwYXJlbnQpIHJldHVybjtcbiAgICAgIHZhciBoYXNFdWlDb250ZXh0TWVudVBhcmVudCA9IHBhcmVudC5jbGFzc0xpc3QuY29udGFpbnMoJ2V1aUNvbnRleHRNZW51Jyk7IC8vIEl0J3MgcG9zc2libGUgdG8gdXNlIGFuIEV1aUNvbnRleHRNZW51UGFuZWwgZGlyZWN0bHkgaW4gYSBwb3BvdmVyIHdpdGhvdXRcbiAgICAgIC8vIGFuIEV1aUNvbnRleHRNZW51LCBzbyB3ZSBuZWVkIHRvIGFjY291bnQgZm9yIHRoYXQgd2hlbiBzZWFyY2hpbmcgcGFyZW50IG5vZGVzXG5cbiAgICAgIHZhciBwb3BvdmVyUGFyZW50ID0gaGFzRXVpQ29udGV4dE1lbnVQYXJlbnQgPyBwYXJlbnQgPT09IG51bGwgfHwgcGFyZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX3BhcmVudCRwYXJlbnROb2RlID0gcGFyZW50LnBhcmVudE5vZGUpID09PSBudWxsIHx8IF9wYXJlbnQkcGFyZW50Tm9kZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3BhcmVudCRwYXJlbnROb2RlLnBhcmVudE5vZGUgOiBwYXJlbnQgPT09IG51bGwgfHwgcGFyZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwYXJlbnQucGFyZW50Tm9kZTtcbiAgICAgIGlmICghcG9wb3ZlclBhcmVudCkgcmV0dXJuO1xuICAgICAgdmFyIGhhc1BvcG92ZXJQYXJlbnQgPSAhIXBvcG92ZXJQYXJlbnQuZGF0YXNldC5wb3BvdmVyUGFuZWw7XG4gICAgICBpZiAoIWhhc1BvcG92ZXJQYXJlbnQpIHJldHVybjtcbiAgICAgIHRoaXMuaW5pdGlhbFBvcG92ZXJQYXJlbnQgPSBwb3BvdmVyUGFyZW50O1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHdhaXRpbmdGb3JJbml0aWFsUG9wb3ZlcjogdHJ1ZVxuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgdmFyIF90aGlzJHByb3BzMiA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wczIuY2hpbGRyZW4sXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMyLmNsYXNzTmFtZSxcbiAgICAgICAgICBvbkNsb3NlID0gX3RoaXMkcHJvcHMyLm9uQ2xvc2UsXG4gICAgICAgICAgdGl0bGUgPSBfdGhpcyRwcm9wczIudGl0bGUsXG4gICAgICAgICAgb25IZWlnaHRDaGFuZ2UgPSBfdGhpcyRwcm9wczIub25IZWlnaHRDaGFuZ2UsXG4gICAgICAgICAgdHJhbnNpdGlvblR5cGUgPSBfdGhpcyRwcm9wczIudHJhbnNpdGlvblR5cGUsXG4gICAgICAgICAgdHJhbnNpdGlvbkRpcmVjdGlvbiA9IF90aGlzJHByb3BzMi50cmFuc2l0aW9uRGlyZWN0aW9uLFxuICAgICAgICAgIG9uVHJhbnNpdGlvbkNvbXBsZXRlID0gX3RoaXMkcHJvcHMyLm9uVHJhbnNpdGlvbkNvbXBsZXRlLFxuICAgICAgICAgIG9uVXNlS2V5Ym9hcmRUb05hdmlnYXRlID0gX3RoaXMkcHJvcHMyLm9uVXNlS2V5Ym9hcmRUb05hdmlnYXRlLFxuICAgICAgICAgIGl0ZW1zID0gX3RoaXMkcHJvcHMyLml0ZW1zLFxuICAgICAgICAgIGluaXRpYWxGb2N1c2VkSXRlbUluZGV4ID0gX3RoaXMkcHJvcHMyLmluaXRpYWxGb2N1c2VkSXRlbUluZGV4LFxuICAgICAgICAgIHNob3dOZXh0UGFuZWwgPSBfdGhpcyRwcm9wczIuc2hvd05leHRQYW5lbCxcbiAgICAgICAgICBzaG93UHJldmlvdXNQYW5lbCA9IF90aGlzJHByb3BzMi5zaG93UHJldmlvdXNQYW5lbCxcbiAgICAgICAgICBzaXplID0gX3RoaXMkcHJvcHMyLnNpemUsXG4gICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wczIsIF9leGNsdWRlZCk7XG5cbiAgICAgIHZhciBwYW5lbFRpdGxlO1xuXG4gICAgICBpZiAodGl0bGUpIHtcbiAgICAgICAgdmFyIHRpdGxlQ2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUNvbnRleHRNZW51UGFuZWxUaXRsZScsIHNpemUgJiYgdGl0bGVTaXplVG9DbGFzc05hbWVNYXBbc2l6ZV0pO1xuXG4gICAgICAgIGlmIChCb29sZWFuKG9uQ2xvc2UpKSB7XG4gICAgICAgICAgcGFuZWxUaXRsZSA9IF9fX0Vtb3Rpb25KU1goXCJidXR0b25cIiwge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiB0aXRsZUNsYXNzZXMsXG4gICAgICAgICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgICAgICAgb25DbGljazogb25DbG9zZSxcbiAgICAgICAgICAgIHJlZjogZnVuY3Rpb24gcmVmKG5vZGUpIHtcbiAgICAgICAgICAgICAgX3RoaXMzLmJhY2tCdXR0b24gPSBub2RlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogXCJjb250ZXh0TWVudVBhbmVsVGl0bGVCdXR0b25cIlxuICAgICAgICAgIH0sIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlDb250ZXh0TWVudV9faXRlbUxheW91dFwiXG4gICAgICAgICAgfSwgX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgICAgICAgICB0eXBlOiBcImFycm93TGVmdFwiLFxuICAgICAgICAgICAgc2l6ZTogXCJtXCIsXG4gICAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpQ29udGV4dE1lbnVfX2ljb25cIlxuICAgICAgICAgIH0pLCBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpQ29udGV4dE1lbnVfX3RleHRcIlxuICAgICAgICAgIH0sIHRpdGxlKSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhbmVsVGl0bGUgPSBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogdGl0bGVDbGFzc2VzXG4gICAgICAgICAgfSwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiBcImV1aUNvbnRleHRNZW51X19pdGVtTGF5b3V0XCJcbiAgICAgICAgICB9LCB0aXRsZSkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpQ29udGV4dE1lbnVQYW5lbCcsIGNsYXNzTmFtZSwgdHJhbnNpdGlvbkRpcmVjdGlvbiAmJiB0cmFuc2l0aW9uVHlwZSAmJiB0cmFuc2l0aW9uRGlyZWN0aW9uQW5kVHlwZVRvQ2xhc3NOYW1lTWFwW3RyYW5zaXRpb25EaXJlY3Rpb25dID8gdHJhbnNpdGlvbkRpcmVjdGlvbkFuZFR5cGVUb0NsYXNzTmFtZU1hcFt0cmFuc2l0aW9uRGlyZWN0aW9uXVt0cmFuc2l0aW9uVHlwZV0gOiB1bmRlZmluZWQpO1xuICAgICAgdmFyIGNvbnRlbnQgPSBpdGVtcyAmJiBpdGVtcy5sZW5ndGggPyBpdGVtcy5tYXAoZnVuY3Rpb24gKE1lbnVJdGVtKSB7XG4gICAgICAgIHZhciBjbG9uZVByb3BzID0ge307XG5cbiAgICAgICAgaWYgKHNpemUpIHtcbiAgICAgICAgICBjbG9uZVByb3BzLnNpemUgPSBzaXplO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIE1lbnVJdGVtLnR5cGUgPT09IEV1aUNvbnRleHRNZW51SXRlbSA/IC8qI19fUFVSRV9fKi9jbG9uZUVsZW1lbnQoTWVudUl0ZW0sIGNsb25lUHJvcHMpIDogTWVudUl0ZW07XG4gICAgICB9KSA6IGNoaWxkcmVuO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgICAgICByZWY6IHRoaXMucGFuZWxSZWYsXG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgb25LZXlEb3duOiB0aGlzLm9uS2V5RG93bixcbiAgICAgICAgdGFiSW5kZXg6IC0xLFxuICAgICAgICBvbkFuaW1hdGlvbkVuZDogdGhpcy5vblRyYW5zaXRpb25Db21wbGV0ZVxuICAgICAgfSwgcmVzdCksIHBhbmVsVGl0bGUsIF9fX0Vtb3Rpb25KU1goRXVpUmVzaXplT2JzZXJ2ZXIsIHtcbiAgICAgICAgb25SZXNpemU6IGZ1bmN0aW9uIG9uUmVzaXplKCkge1xuICAgICAgICAgIHJldHVybiBfdGhpczMudXBkYXRlSGVpZ2h0KCk7XG4gICAgICAgIH1cbiAgICAgIH0sIGZ1bmN0aW9uIChyZXNpemVSZWYpIHtcbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICAgIHJlZjogcmVzaXplUmVmXG4gICAgICAgIH0sIGNvbnRlbnQpO1xuICAgICAgfSkpO1xuICAgIH1cbiAgfV0sIFt7XG4gICAga2V5OiBcImdldERlcml2ZWRTdGF0ZUZyb21Qcm9wc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMobmV4dFByb3BzLCBwcmV2U3RhdGUpIHtcbiAgICAgIHZhciBuZWVkc1VwZGF0ZSA9IGZhbHNlO1xuICAgICAgdmFyIG5leHRTdGF0ZSA9IHt9OyAvLyBDbGVhciByZWZzIHRvIG1lbnVJdGVtcyBpZiB3ZSdyZSBnZXR0aW5nIG5ldyBvbmVzLlxuXG4gICAgICBpZiAobmV4dFByb3BzLml0ZW1zICE9PSBwcmV2U3RhdGUucHJldlByb3BzLml0ZW1zKSB7XG4gICAgICAgIG5lZWRzVXBkYXRlID0gdHJ1ZTtcbiAgICAgICAgbmV4dFN0YXRlLm1lbnVJdGVtcyA9IFtdO1xuICAgICAgICBuZXh0U3RhdGUucHJldlByb3BzID0ge1xuICAgICAgICAgIGl0ZW1zOiBuZXh0UHJvcHMuaXRlbXNcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5lZWRzVXBkYXRlKSB7XG4gICAgICAgIHJldHVybiBuZXh0U3RhdGU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlDb250ZXh0TWVudVBhbmVsO1xufShDb21wb25lbnQpO1xuXG5fZGVmaW5lUHJvcGVydHkoRXVpQ29udGV4dE1lbnVQYW5lbCwgXCJkZWZhdWx0UHJvcHNcIiwge1xuICBpdGVtczogW11cbn0pO1xuXG5FdWlDb250ZXh0TWVudVBhbmVsLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBpbml0aWFsRm9jdXNlZEl0ZW1JbmRleDogUHJvcFR5cGVzLm51bWJlcixcbiAgaXRlbXM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWQpLFxuICBvbkNsb3NlOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25IZWlnaHRDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICBvblRyYW5zaXRpb25Db21wbGV0ZTogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uVXNlS2V5Ym9hcmRUb05hdmlnYXRlOiBQcm9wVHlwZXMuZnVuYyxcbiAgc2hvd05leHRQYW5lbDogUHJvcFR5cGVzLmZ1bmMsXG4gIHNob3dQcmV2aW91c1BhbmVsOiBQcm9wVHlwZXMuZnVuYyxcbiAgdGl0bGU6IFByb3BUeXBlcy5ub2RlLFxuICB0cmFuc2l0aW9uRGlyZWN0aW9uOiBQcm9wVHlwZXMub25lT2YoW1wibmV4dFwiLCBcInByZXZpb3VzXCJdKSxcbiAgdHJhbnNpdGlvblR5cGU6IFByb3BUeXBlcy5vbmVPZihbXCJpblwiLCBcIm91dFwiXSksXG5cbiAgLyoqXG4gICAgICogQWx0ZXJzIHRoZSBzaXplIG9mIHRoZSBpdGVtcyBhbmQgdGhlIHRpdGxlXG4gICAgICovXG4gIHNpemU6IFByb3BUeXBlcy5hbnlcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImhhc1BhbmVsXCIsIFwiaWNvblwiLCBcImJ1dHRvblJlZlwiLCBcImRpc2FibGVkXCIsIFwibGF5b3V0QWxpZ25cIiwgXCJ0b29sVGlwVGl0bGVcIiwgXCJ0b29sVGlwQ29udGVudFwiLCBcInRvb2xUaXBQb3NpdGlvblwiLCBcImhyZWZcIiwgXCJ0YXJnZXRcIiwgXCJyZWxcIiwgXCJzaXplXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IGNsb25lRWxlbWVudCwgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBrZXlzT2YgfSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IHsgRXVpSWNvbiB9IGZyb20gJy4uL2ljb24nO1xuaW1wb3J0IHsgRXVpVG9vbFRpcCB9IGZyb20gJy4uL3Rvb2xfdGlwJztcbmltcG9ydCB7IGdldFNlY3VyZVJlbEZvclRhcmdldCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IHZhbGlkYXRlSHJlZiB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3NlY3VyaXR5L2hyZWZfdmFsaWRhdG9yJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgc2l6ZVRvQ2xhc3NOYW1lTWFwID0ge1xuICBzOiAnZXVpQ29udGV4dE1lbnVJdGVtLS1zbWFsbCcsXG4gIG06IG51bGxcbn07XG5leHBvcnQgdmFyIFNJWkVTID0ga2V5c09mKHNpemVUb0NsYXNzTmFtZU1hcCk7XG52YXIgbGF5b3V0QWxpZ25Ub0NsYXNzTmFtZXMgPSB7XG4gIGNlbnRlcjogbnVsbCxcbiAgdG9wOiAnZXVpQ29udGV4dE1lbnVfX2l0ZW1MYXlvdXQtLXRvcCcsXG4gIGJvdHRvbTogJ2V1aUNvbnRleHRNZW51X19pdGVtTGF5b3V0LS1ib3R0b20nXG59O1xuZXhwb3J0IHZhciBMQVlPVVRfQUxJR04gPSBrZXlzT2YobGF5b3V0QWxpZ25Ub0NsYXNzTmFtZXMpO1xuZXhwb3J0IHZhciBFdWlDb250ZXh0TWVudUl0ZW0gPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEV1aUNvbnRleHRNZW51SXRlbSwgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihFdWlDb250ZXh0TWVudUl0ZW0pO1xuXG4gIGZ1bmN0aW9uIEV1aUNvbnRleHRNZW51SXRlbSgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpQ29udGV4dE1lbnVJdGVtKTtcblxuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdWlDb250ZXh0TWVudUl0ZW0sIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMuY2xhc3NOYW1lLFxuICAgICAgICAgIGhhc1BhbmVsID0gX3RoaXMkcHJvcHMuaGFzUGFuZWwsXG4gICAgICAgICAgaWNvbiA9IF90aGlzJHByb3BzLmljb24sXG4gICAgICAgICAgYnV0dG9uUmVmID0gX3RoaXMkcHJvcHMuYnV0dG9uUmVmLFxuICAgICAgICAgIF9kaXNhYmxlZCA9IF90aGlzJHByb3BzLmRpc2FibGVkLFxuICAgICAgICAgIF90aGlzJHByb3BzJGxheW91dEFsaSA9IF90aGlzJHByb3BzLmxheW91dEFsaWduLFxuICAgICAgICAgIGxheW91dEFsaWduID0gX3RoaXMkcHJvcHMkbGF5b3V0QWxpID09PSB2b2lkIDAgPyAnY2VudGVyJyA6IF90aGlzJHByb3BzJGxheW91dEFsaSxcbiAgICAgICAgICB0b29sVGlwVGl0bGUgPSBfdGhpcyRwcm9wcy50b29sVGlwVGl0bGUsXG4gICAgICAgICAgdG9vbFRpcENvbnRlbnQgPSBfdGhpcyRwcm9wcy50b29sVGlwQ29udGVudCxcbiAgICAgICAgICBfdGhpcyRwcm9wcyR0b29sVGlwUG8gPSBfdGhpcyRwcm9wcy50b29sVGlwUG9zaXRpb24sXG4gICAgICAgICAgdG9vbFRpcFBvc2l0aW9uID0gX3RoaXMkcHJvcHMkdG9vbFRpcFBvID09PSB2b2lkIDAgPyAncmlnaHQnIDogX3RoaXMkcHJvcHMkdG9vbFRpcFBvLFxuICAgICAgICAgIGhyZWYgPSBfdGhpcyRwcm9wcy5ocmVmLFxuICAgICAgICAgIHRhcmdldCA9IF90aGlzJHByb3BzLnRhcmdldCxcbiAgICAgICAgICByZWwgPSBfdGhpcyRwcm9wcy5yZWwsXG4gICAgICAgICAgc2l6ZSA9IF90aGlzJHByb3BzLnNpemUsXG4gICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wcywgX2V4Y2x1ZGVkKTtcblxuICAgICAgdmFyIGljb25JbnN0YW5jZTtcbiAgICAgIHZhciBpc0hyZWZWYWxpZCA9ICFocmVmIHx8IHZhbGlkYXRlSHJlZihocmVmKTtcbiAgICAgIHZhciBkaXNhYmxlZCA9IF9kaXNhYmxlZCB8fCAhaXNIcmVmVmFsaWQ7XG5cbiAgICAgIGlmIChpY29uKSB7XG4gICAgICAgIHN3aXRjaCAoX3R5cGVvZihpY29uKSkge1xuICAgICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgICBpY29uSW5zdGFuY2UgPSBfX19FbW90aW9uSlNYKEV1aUljb24sIHtcbiAgICAgICAgICAgICAgdHlwZTogaWNvbixcbiAgICAgICAgICAgICAgc2l6ZTogXCJtXCIsXG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlDb250ZXh0TWVudV9faWNvblwiLFxuICAgICAgICAgICAgICBjb2xvcjogXCJpbmhlcml0XCIgLy8gZm9yY2VzIHRoZSBpY29uIHRvIGluaGVyaXQgaXRzIHBhcmVudCBjb2xvclxuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIC8vIEFzc3VtZSBpdCdzIGFscmVhZHkgYW4gaW5zdGFuY2Ugb2YgYW4gaWNvbi5cbiAgICAgICAgICAgIGljb25JbnN0YW5jZSA9IC8qI19fUFVSRV9fKi9jbG9uZUVsZW1lbnQoaWNvbiwge1xuICAgICAgICAgICAgICBjbGFzc05hbWU6ICdldWlDb250ZXh0TWVudV9faWNvbidcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBhcnJvdztcblxuICAgICAgaWYgKGhhc1BhbmVsKSB7XG4gICAgICAgIGFycm93ID0gX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgICAgICAgdHlwZTogXCJhcnJvd1JpZ2h0XCIsXG4gICAgICAgICAgc2l6ZTogXCJtXCIsXG4gICAgICAgICAgY2xhc3NOYW1lOiBcImV1aUNvbnRleHRNZW51X19hcnJvd1wiXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUNvbnRleHRNZW51SXRlbScsIHNpemUgJiYgc2l6ZVRvQ2xhc3NOYW1lTWFwW3NpemVdLCBjbGFzc05hbWUsIHtcbiAgICAgICAgJ2V1aUNvbnRleHRNZW51SXRlbS1pc0Rpc2FibGVkJzogZGlzYWJsZWRcbiAgICAgIH0pO1xuICAgICAgdmFyIGxheW91dENsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlDb250ZXh0TWVudV9faXRlbUxheW91dCcsIGxheW91dEFsaWduVG9DbGFzc05hbWVzW2xheW91dEFsaWduXSk7XG5cbiAgICAgIHZhciBidXR0b25Jbm5lciA9IF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBsYXlvdXRDbGFzc2VzXG4gICAgICB9LCBpY29uSW5zdGFuY2UsIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcImV1aUNvbnRleHRNZW51SXRlbV9fdGV4dFwiXG4gICAgICB9LCBjaGlsZHJlbiksIGFycm93KTtcblxuICAgICAgdmFyIGJ1dHRvbjsgLy8gPGE+IGVsZW1lbnRzIGRvbid0IHJlc3BlY3QgdGhlIGBkaXNhYmxlZGAgYXR0cmlidXRlLiBTbyBpZiB3ZSdyZSBkaXNhYmxlZCwgd2UnbGwganVzdCBwcmV0ZW5kXG4gICAgICAvLyB0aGlzIGlzIGEgYnV0dG9uIGFuZCBwaWdneWJhY2sgb2ZmIGl0cyBkaXNhYmxlZCBzdHlsZXMuXG5cbiAgICAgIGlmIChocmVmICYmICFkaXNhYmxlZCkge1xuICAgICAgICB2YXIgc2VjdXJlUmVsID0gZ2V0U2VjdXJlUmVsRm9yVGFyZ2V0KHtcbiAgICAgICAgICBocmVmOiBocmVmLFxuICAgICAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgICAgIHJlbDogcmVsXG4gICAgICAgIH0pO1xuICAgICAgICBidXR0b24gPSBfX19FbW90aW9uSlNYKFwiYVwiLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICAgIGhyZWY6IGhyZWYsXG4gICAgICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICAgICAgcmVsOiBzZWN1cmVSZWwsXG4gICAgICAgICAgcmVmOiBidXR0b25SZWZcbiAgICAgICAgfSwgcmVzdCksIGJ1dHRvbklubmVyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJ1dHRvbiA9IF9fX0Vtb3Rpb25KU1goXCJidXR0b25cIiwgX2V4dGVuZHMoe1xuICAgICAgICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgICAgdHlwZTogXCJidXR0b25cIixcbiAgICAgICAgICByZWY6IGJ1dHRvblJlZlxuICAgICAgICB9LCByZXN0KSwgYnV0dG9uSW5uZXIpO1xuICAgICAgfVxuXG4gICAgICBpZiAodG9vbFRpcENvbnRlbnQpIHtcbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpVG9vbFRpcCwge1xuICAgICAgICAgIHRpdGxlOiB0b29sVGlwVGl0bGUgPyB0b29sVGlwVGl0bGUgOiBudWxsLFxuICAgICAgICAgIGNvbnRlbnQ6IHRvb2xUaXBDb250ZW50LFxuICAgICAgICAgIGFuY2hvckNsYXNzTmFtZTogXCJldWktZGlzcGxheUJsb2NrXCIsXG4gICAgICAgICAgcG9zaXRpb246IHRvb2xUaXBQb3NpdGlvblxuICAgICAgICB9LCBidXR0b24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGJ1dHRvbjtcbiAgICAgIH1cbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gRXVpQ29udGV4dE1lbnVJdGVtO1xufShDb21wb25lbnQpO1xuRXVpQ29udGV4dE1lbnVJdGVtLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBpY29uOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZF0pLFxuICBoYXNQYW5lbDogUHJvcFR5cGVzLmJvb2wsXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG4gIGJ1dHRvblJlZjogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBSZXF1aXJlZCBpZiB1c2luZyBhIHRvb2x0aXAuIEFkZCBhbiBvcHRpb25hbCB0b29sdGlwIG9uIGhvdmVyXG4gICAgICovXG4gIHRvb2xUaXBDb250ZW50OiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICAgKiBPcHRpb25hbCB0aXRsZSBmb3IgdGhlIHRvb2x0aXBcbiAgICAgKi9cbiAgdG9vbFRpcFRpdGxlOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICAgKiBEaWN0YXRlcyB0aGUgcG9zaXRpb24gb2YgdGhlIHRvb2x0aXAuXG4gICAgICovXG4gIHRvb2xUaXBQb3NpdGlvbjogUHJvcFR5cGVzLm9uZU9mKFtcInRvcFwiLCBcInJpZ2h0XCIsIFwiYm90dG9tXCIsIFwibGVmdFwiXSksXG4gIGhyZWY6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHRhcmdldDogUHJvcFR5cGVzLnN0cmluZyxcbiAgcmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAqIEhvdyB0byBhbGlnbiBpY29uIHdpdGggY29udGVudCBvZiBidXR0b25cbiAgICAgKi9cbiAgbGF5b3V0QWxpZ246IFByb3BUeXBlcy5vbmVPZihbXCJjZW50ZXJcIiwgXCJ0b3BcIiwgXCJib3R0b21cIl0pLFxuXG4gIC8qKlxuICAgICAqIFJlZHVjZSB0aGUgc2l6ZSB0byBgc2Agd2hlbiBpbiBuZWVkIG9mIGEgbW9yZSBjb21wcmVzc2VkIG1lbnVcbiAgICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mKFtcInNcIiwgXCJtXCJdKVxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcInNpemVcIiwgXCJtYXJnaW5cIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGV1aUhvcml6b250YWxSdWxlU3R5bGVzIH0gZnJvbSAnLi9ob3Jpem9udGFsX3J1bGUuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIFNJWkVTID0gWydmdWxsJywgJ2hhbGYnLCAncXVhcnRlciddO1xuZXhwb3J0IHZhciBNQVJHSU5TID0gWydub25lJywgJ3hzJywgJ3MnLCAnbScsICdsJywgJ3hsJywgJ3h4bCddO1xudmFyIG1hcmdpblRvQ2xhc3NOYW1lTWFwID0ge1xuICBub25lOiBudWxsLFxuICB4czogJ21hcmdpblhTbWFsbCcsXG4gIHM6ICdtYXJnaW5TbWFsbCcsXG4gIG06ICdtYXJnaW5NZWRpdW0nLFxuICBsOiAnbWFyZ2luTGFyZ2UnLFxuICB4bDogJ21hcmdpblhMYXJnZScsXG4gIHh4bDogJ21hcmdpblhYTGFyZ2UnXG59O1xuZXhwb3J0IHZhciBFdWlIb3Jpem9udGFsUnVsZSA9IGZ1bmN0aW9uIEV1aUhvcml6b250YWxSdWxlKF9yZWYpIHtcbiAgdmFyIF9jbGFzc05hbWVzO1xuXG4gIHZhciBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/ICdmdWxsJyA6IF9yZWYkc2l6ZSxcbiAgICAgIF9yZWYkbWFyZ2luID0gX3JlZi5tYXJnaW4sXG4gICAgICBtYXJnaW4gPSBfcmVmJG1hcmdpbiA9PT0gdm9pZCAwID8gJ2wnIDogX3JlZiRtYXJnaW4sXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgdmFyIHN0eWxlcyA9IGV1aUhvcml6b250YWxSdWxlU3R5bGVzKGV1aVRoZW1lKTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlIb3Jpem9udGFsUnVsZScsIChfY2xhc3NOYW1lcyA9IHt9LCBfZGVmaW5lUHJvcGVydHkoX2NsYXNzTmFtZXMsIFwiZXVpSG9yaXpvbnRhbFJ1bGUtLVwiLmNvbmNhdChzaXplKSwgc2l6ZSksIF9kZWZpbmVQcm9wZXJ0eShfY2xhc3NOYW1lcywgXCJldWlIb3Jpem9udGFsUnVsZS0tXCIuY29uY2F0KG1hcmdpblRvQ2xhc3NOYW1lTWFwW21hcmdpbl0pLCBtYXJnaW4gJiYgbWFyZ2luICE9PSAnbm9uZScpLCBfY2xhc3NOYW1lcyksIGNsYXNzTmFtZSk7XG4gIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aUhvcml6b250YWxSdWxlLCBzdHlsZXNbc2l6ZV0sIHN0eWxlc1ttYXJnaW5dXTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJoclwiLCBfZXh0ZW5kcyh7XG4gICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gIH0sIHJlc3QpKTtcbn07XG5FdWlIb3Jpem9udGFsUnVsZS5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgICAqIERlZmluZXMgdGhlIHdpZHRoIG9mIHRoZSBIUi5cbiAgICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzLmFueSxcbiAgbWFyZ2luOiBQcm9wVHlwZXMuYW55LFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBsb2dpY2FsQ1NTIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuZXhwb3J0IHZhciBldWlIb3Jpem9udGFsUnVsZVN0eWxlcyA9IGZ1bmN0aW9uIGV1aUhvcml6b250YWxSdWxlU3R5bGVzKF9yZWYpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZi5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICBldWlIb3Jpem9udGFsUnVsZTogLyojX19QVVJFX18qL2NzcyhcImJvcmRlcjpub25lO1wiLCBsb2dpY2FsQ1NTKCdoZWlnaHQnLCBldWlUaGVtZS5ib3JkZXIud2lkdGgudGhpbiksIFwiIGJhY2tncm91bmQtY29sb3I6XCIsIGV1aVRoZW1lLmJvcmRlci5jb2xvciwgXCI7ZmxleC1zaHJpbms6MDtmbGV4LWdyb3c6MDs7bGFiZWw6ZXVpSG9yaXpvbnRhbFJ1bGU7XCIpLFxuICAgIC8vIFNpemVzXG4gICAgZnVsbDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCd3aWR0aCcsICcxMDAlJyksIFwiOztsYWJlbDpmdWxsO1wiKSxcbiAgICBoYWxmOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ3dpZHRoJywgJzUwJScpLCBcIiBcIiwgbG9naWNhbENTUygnbWFyZ2luLWhvcml6b250YWwnLCAnYXV0bycpLCBcIjs7bGFiZWw6aGFsZjtcIiksXG4gICAgcXVhcnRlcjogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCd3aWR0aCcsICcyNSUnKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ21hcmdpbi1ob3Jpem9udGFsJywgJ2F1dG8nKSwgXCI7O2xhYmVsOnF1YXJ0ZXI7XCIpLFxuICAgIC8vIE1hcmdpbnNcbiAgICBub25lOiAnJyxcbiAgICB4czogLyojX19QVVJFX18qL2NzcyhcIm1hcmdpbi1ibG9jazpcIiwgZXVpVGhlbWUuc2l6ZS5zLCBcIjs7bGFiZWw6eHM7XCIpLFxuICAgIHM6IC8qI19fUFVSRV9fKi9jc3MoXCJtYXJnaW4tYmxvY2s6XCIsIGV1aVRoZW1lLnNpemUubSwgXCI7O2xhYmVsOnM7XCIpLFxuICAgIG06IC8qI19fUFVSRV9fKi9jc3MoXCJtYXJnaW4tYmxvY2s6XCIsIGV1aVRoZW1lLnNpemUuYmFzZSwgXCI7O2xhYmVsOm07XCIpLFxuICAgIGw6IC8qI19fUFVSRV9fKi9jc3MoXCJtYXJnaW4tYmxvY2s6XCIsIGV1aVRoZW1lLnNpemUubCwgXCI7O2xhYmVsOmw7XCIpLFxuICAgIHhsOiAvKiNfX1BVUkVfXyovY3NzKFwibWFyZ2luLWJsb2NrOlwiLCBldWlUaGVtZS5zaXplLnhsLCBcIjs7bGFiZWw6eGw7XCIpLFxuICAgIHh4bDogLyojX19QVVJFX18qL2NzcyhcIm1hcmdpbi1ibG9jazpcIiwgZXVpVGhlbWUuc2l6ZS54eGwsIFwiOztsYWJlbDp4eGw7XCIpXG4gIH07XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wibGFiZWxcIiwgXCJpZFwiLCBcImNoZWNrZWRcIiwgXCJkaXNhYmxlZFwiLCBcImNvbXByZXNzZWRcIiwgXCJvbkNoYW5nZVwiLCBcImNsYXNzTmFtZVwiLCBcInNob3dMYWJlbFwiLCBcInR5cGVcIiwgXCJsYWJlbFByb3BzXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VHZW5lcmF0ZWRIdG1sSWQgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hY2Nlc3NpYmlsaXR5JztcbmltcG9ydCB7IEV1aUljb24gfSBmcm9tICcuLi8uLi9pY29uJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVN3aXRjaCA9IGZ1bmN0aW9uIEV1aVN3aXRjaChfcmVmKSB7XG4gIHZhciBsYWJlbCA9IF9yZWYubGFiZWwsXG4gICAgICBpZCA9IF9yZWYuaWQsXG4gICAgICBjaGVja2VkID0gX3JlZi5jaGVja2VkLFxuICAgICAgZGlzYWJsZWQgPSBfcmVmLmRpc2FibGVkLFxuICAgICAgY29tcHJlc3NlZCA9IF9yZWYuY29tcHJlc3NlZCxcbiAgICAgIG9uQ2hhbmdlID0gX3JlZi5vbkNoYW5nZSxcbiAgICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgX3JlZiRzaG93TGFiZWwgPSBfcmVmLnNob3dMYWJlbCxcbiAgICAgIHNob3dMYWJlbCA9IF9yZWYkc2hvd0xhYmVsID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRzaG93TGFiZWwsXG4gICAgICBfcmVmJHR5cGUgPSBfcmVmLnR5cGUsXG4gICAgICB0eXBlID0gX3JlZiR0eXBlID09PSB2b2lkIDAgPyAnYnV0dG9uJyA6IF9yZWYkdHlwZSxcbiAgICAgIGxhYmVsUHJvcHMgPSBfcmVmLmxhYmVsUHJvcHMsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIHN3aXRjaElkID0gdXNlR2VuZXJhdGVkSHRtbElkKHtcbiAgICBjb25kaXRpb25hbElkOiBpZFxuICB9KTtcbiAgdmFyIGxhYmVsSWQgPSB1c2VHZW5lcmF0ZWRIdG1sSWQoe1xuICAgIGNvbmRpdGlvbmFsSWQ6IGxhYmVsUHJvcHMgPT09IG51bGwgfHwgbGFiZWxQcm9wcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogbGFiZWxQcm9wcy5pZFxuICB9KTtcbiAgdmFyIG9uQ2xpY2sgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoZSkge1xuICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBldmVudCA9IGU7XG4gICAgZXZlbnQudGFyZ2V0LmNoZWNrZWQgPSAhY2hlY2tlZDtcbiAgICBvbkNoYW5nZShldmVudCk7XG4gIH0sIFtjaGVja2VkLCBkaXNhYmxlZCwgb25DaGFuZ2VdKTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlTd2l0Y2gnLCB7XG4gICAgJ2V1aVN3aXRjaC0tY29tcHJlc3NlZCc6IGNvbXByZXNzZWRcbiAgfSwgY2xhc3NOYW1lKTtcbiAgdmFyIGxhYmVsQ2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVN3aXRjaF9fbGFiZWwnLCBsYWJlbFByb3BzID09PSBudWxsIHx8IGxhYmVsUHJvcHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGxhYmVsUHJvcHMuY2xhc3NOYW1lKTtcblxuICBpZiAoc2hvd0xhYmVsID09PSBmYWxzZSAmJiB0eXBlb2YgbGFiZWwgIT09ICdzdHJpbmcnKSB7XG4gICAgY29uc29sZS53YXJuKCdFdWlTd2l0Y2ggYGxhYmVsYCBtdXN0IGJlIGEgc3RyaW5nIHdoZW4gYHNob3dMYWJlbGAgaXMgZmFsc2UuJyk7XG4gIH1cblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJidXR0b25cIiwgX2V4dGVuZHMoe1xuICAgIGlkOiBzd2l0Y2hJZCxcbiAgICBcImFyaWEtY2hlY2tlZFwiOiBjaGVja2VkIHx8IGZhbHNlLFxuICAgIGNsYXNzTmFtZTogXCJldWlTd2l0Y2hfX2J1dHRvblwiLFxuICAgIHJvbGU6IFwic3dpdGNoXCIsXG4gICAgdHlwZTogdHlwZSxcbiAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgb25DbGljazogb25DbGljayxcbiAgICBcImFyaWEtbGFiZWxcIjogc2hvd0xhYmVsID8gdW5kZWZpbmVkIDogbGFiZWwsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogc2hvd0xhYmVsID8gbGFiZWxJZCA6IHVuZGVmaW5lZFxuICB9LCByZXN0KSwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlTd2l0Y2hfX2JvZHlcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aVN3aXRjaF9fdGh1bWJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlTd2l0Y2hfX3RyYWNrXCJcbiAgfSwgIWNvbXByZXNzZWQgJiYgX19fRW1vdGlvbkpTWChSZWFjdC5GcmFnbWVudCwgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgdHlwZTogXCJjcm9zc1wiLFxuICAgIHNpemU6IFwibVwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlTd2l0Y2hfX2ljb25cIlxuICB9KSwgX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgdHlwZTogXCJjaGVja1wiLFxuICAgIHNpemU6IFwibVwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlTd2l0Y2hfX2ljb24gZXVpU3dpdGNoX19pY29uLS1jaGVja2VkXCJcbiAgfSkpKSkpLCBzaG93TGFiZWwgJiYgLy8gPGJ1dHRvbj4gKyA8bGFiZWw+IGhhcyBwb29yIHNjcmVlbiByZWFkZXIgc3VwcG9ydC5cbiAgLy8gQ2xpY2sgaGFuZGxlciBhZGRlZCB0byBzaW11bGF0ZSBuYXR1cmFsLCBzZWNvbmRhcnkgPGxhYmVsPiBpbnRlcmFjdGl2aXR5LlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganN4LWExMXkvbm8tbm9uaW50ZXJhY3RpdmUtZWxlbWVudC1pbnRlcmFjdGlvbnNcbiAgX19fRW1vdGlvbkpTWChcInNwYW5cIiwgX2V4dGVuZHMoe30sIGxhYmVsUHJvcHMsIHtcbiAgICBjbGFzc05hbWU6IGxhYmVsQ2xhc3NlcyxcbiAgICBpZDogbGFiZWxJZCxcbiAgICBvbkNsaWNrOiBvbkNsaWNrXG4gIH0pLCBsYWJlbCkpO1xufTtcbkV1aVN3aXRjaC5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgICAqIFdoZXRoZXIgdG8gcmVuZGVyIHRoZSByZW5kZXIgdGhlIHRleHQgbGFiZWxcbiAgICAgICAqL1xuICBzaG93TGFiZWw6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAgICogTXVzdCBiZSBhIHN0cmluZyBpZiBgc2hvd0xhYmVsYCBwcm9wIGlzIGZhbHNlXG4gICAgICAgKi9cbiAgbGFiZWw6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsXG4gIGNoZWNrZWQ6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGNvbXByZXNzZWQ6IFByb3BUeXBlcy5ib29sLFxuICB0eXBlOiBQcm9wVHlwZXMub25lT2YoW1wic3VibWl0XCIsIFwicmVzZXRcIiwgXCJidXR0b25cIl0pLFxuXG4gIC8qKlxuICAgICAgICogT2JqZWN0IG9mIHByb3BzIHBhc3NlZCB0byB0aGUgbGFiZWwncyA8c3Bhbi8+XG4gICAgICAgKi9cbiAgbGFiZWxQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pXG59OyIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgfVxuICByZXR1cm4gc2VsZjtcbn0iLCAidmFyIHNhZmVJc05hTiA9IE51bWJlci5pc05hTiB8fFxuICAgIGZ1bmN0aW9uIHBvbnlmaWxsKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIHZhbHVlICE9PSB2YWx1ZTtcbiAgICB9O1xuZnVuY3Rpb24gaXNFcXVhbChmaXJzdCwgc2Vjb25kKSB7XG4gICAgaWYgKGZpcnN0ID09PSBzZWNvbmQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChzYWZlSXNOYU4oZmlyc3QpICYmIHNhZmVJc05hTihzZWNvbmQpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBhcmVJbnB1dHNFcXVhbChuZXdJbnB1dHMsIGxhc3RJbnB1dHMpIHtcbiAgICBpZiAobmV3SW5wdXRzLmxlbmd0aCAhPT0gbGFzdElucHV0cy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5ld0lucHV0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoIWlzRXF1YWwobmV3SW5wdXRzW2ldLCBsYXN0SW5wdXRzW2ldKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBtZW1vaXplT25lKHJlc3VsdEZuLCBpc0VxdWFsKSB7XG4gICAgaWYgKGlzRXF1YWwgPT09IHZvaWQgMCkgeyBpc0VxdWFsID0gYXJlSW5wdXRzRXF1YWw7IH1cbiAgICB2YXIgbGFzdFRoaXM7XG4gICAgdmFyIGxhc3RBcmdzID0gW107XG4gICAgdmFyIGxhc3RSZXN1bHQ7XG4gICAgdmFyIGNhbGxlZE9uY2UgPSBmYWxzZTtcbiAgICBmdW5jdGlvbiBtZW1vaXplZCgpIHtcbiAgICAgICAgdmFyIG5ld0FyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIG5ld0FyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2FsbGVkT25jZSAmJiBsYXN0VGhpcyA9PT0gdGhpcyAmJiBpc0VxdWFsKG5ld0FyZ3MsIGxhc3RBcmdzKSkge1xuICAgICAgICAgICAgcmV0dXJuIGxhc3RSZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgbGFzdFJlc3VsdCA9IHJlc3VsdEZuLmFwcGx5KHRoaXMsIG5ld0FyZ3MpO1xuICAgICAgICBjYWxsZWRPbmNlID0gdHJ1ZTtcbiAgICAgICAgbGFzdFRoaXMgPSB0aGlzO1xuICAgICAgICBsYXN0QXJncyA9IG5ld0FyZ3M7XG4gICAgICAgIHJldHVybiBsYXN0UmVzdWx0O1xuICAgIH1cbiAgICByZXR1cm4gbWVtb2l6ZWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1lbW9pemVPbmU7XG4iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkge1xuICBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTtcbiAgdmFyIHRhcmdldCA9IHt9O1xuICB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7XG4gIHZhciBrZXksIGk7XG4gIGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAga2V5ID0gc291cmNlS2V5c1tpXTtcbiAgICBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlO1xuICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gIH1cbiAgcmV0dXJuIHRhcmdldDtcbn0iLCAiLy8gQGZsb3dcblxuLy8gQW5pbWF0aW9uIGZyYW1lIGJhc2VkIGltcGxlbWVudGF0aW9uIG9mIHNldFRpbWVvdXQuXG4vLyBJbnNwaXJlZCBieSBKb2UgTGFtYmVydCwgaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vam9lbGFtYmVydC8xMDAyMTE2I2ZpbGUtcmVxdWVzdHRpbWVvdXQtanNcblxuY29uc3QgaGFzTmF0aXZlUGVyZm9ybWFuY2VOb3cgPVxuICB0eXBlb2YgcGVyZm9ybWFuY2UgPT09ICdvYmplY3QnICYmIHR5cGVvZiBwZXJmb3JtYW5jZS5ub3cgPT09ICdmdW5jdGlvbic7XG5cbmNvbnN0IG5vdyA9IGhhc05hdGl2ZVBlcmZvcm1hbmNlTm93XG4gID8gKCkgPT4gcGVyZm9ybWFuY2Uubm93KClcbiAgOiAoKSA9PiBEYXRlLm5vdygpO1xuXG5leHBvcnQgdHlwZSBUaW1lb3V0SUQgPSB7fFxuICBpZDogQW5pbWF0aW9uRnJhbWVJRCxcbnx9O1xuXG5leHBvcnQgZnVuY3Rpb24gY2FuY2VsVGltZW91dCh0aW1lb3V0SUQ6IFRpbWVvdXRJRCkge1xuICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aW1lb3V0SUQuaWQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVxdWVzdFRpbWVvdXQoY2FsbGJhY2s6IEZ1bmN0aW9uLCBkZWxheTogbnVtYmVyKTogVGltZW91dElEIHtcbiAgY29uc3Qgc3RhcnQgPSBub3coKTtcblxuICBmdW5jdGlvbiB0aWNrKCkge1xuICAgIGlmIChub3coKSAtIHN0YXJ0ID49IGRlbGF5KSB7XG4gICAgICBjYWxsYmFjay5jYWxsKG51bGwpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aW1lb3V0SUQuaWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgdGltZW91dElEOiBUaW1lb3V0SUQgPSB7XG4gICAgaWQ6IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKSxcbiAgfTtcblxuICByZXR1cm4gdGltZW91dElEO1xufVxuIiwgIi8vIEBmbG93XG5cbmxldCBzaXplOiBudW1iZXIgPSAtMTtcblxuLy8gVGhpcyB1dGlsaXR5IGNvcGllZCBmcm9tIFwiZG9tLWhlbHBlcnNcIiBwYWNrYWdlLlxuZXhwb3J0IGZ1bmN0aW9uIGdldFNjcm9sbGJhclNpemUocmVjYWxjdWxhdGU/OiBib29sZWFuID0gZmFsc2UpOiBudW1iZXIge1xuICBpZiAoc2l6ZSA9PT0gLTEgfHwgcmVjYWxjdWxhdGUpIHtcbiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBjb25zdCBzdHlsZSA9IGRpdi5zdHlsZTtcbiAgICBzdHlsZS53aWR0aCA9ICc1MHB4JztcbiAgICBzdHlsZS5oZWlnaHQgPSAnNTBweCc7XG4gICAgc3R5bGUub3ZlcmZsb3cgPSAnc2Nyb2xsJztcblxuICAgICgoZG9jdW1lbnQuYm9keTogYW55KTogSFRNTEJvZHlFbGVtZW50KS5hcHBlbmRDaGlsZChkaXYpO1xuXG4gICAgc2l6ZSA9IGRpdi5vZmZzZXRXaWR0aCAtIGRpdi5jbGllbnRXaWR0aDtcblxuICAgICgoZG9jdW1lbnQuYm9keTogYW55KTogSFRNTEJvZHlFbGVtZW50KS5yZW1vdmVDaGlsZChkaXYpO1xuICB9XG5cbiAgcmV0dXJuIHNpemU7XG59XG5cbmV4cG9ydCB0eXBlIFJUTE9mZnNldFR5cGUgPVxuICB8ICduZWdhdGl2ZSdcbiAgfCAncG9zaXRpdmUtZGVzY2VuZGluZydcbiAgfCAncG9zaXRpdmUtYXNjZW5kaW5nJztcblxubGV0IGNhY2hlZFJUTFJlc3VsdDogUlRMT2Zmc2V0VHlwZSB8IG51bGwgPSBudWxsO1xuXG4vLyBUUklDS1kgQWNjb3JkaW5nIHRvIHRoZSBzcGVjLCBzY3JvbGxMZWZ0IHNob3VsZCBiZSBuZWdhdGl2ZSBmb3IgUlRMIGFsaWduZWQgZWxlbWVudHMuXG4vLyBDaHJvbWUgZG9lcyBub3Qgc2VlbSB0byBhZGhlcmU7IGl0cyBzY3JvbGxMZWZ0IHZhbHVlcyBhcmUgcG9zaXRpdmUgKG1lYXN1cmVkIHJlbGF0aXZlIHRvIHRoZSBsZWZ0KS5cbi8vIFNhZmFyaSdzIGVsYXN0aWMgYm91bmNlIG1ha2VzIGRldGVjdGluZyB0aGlzIGV2ZW4gbW9yZSBjb21wbGljYXRlZCB3cnQgcG90ZW50aWFsIGZhbHNlIHBvc2l0aXZlcy5cbi8vIFRoZSBzYWZlc3Qgd2F5IHRvIGNoZWNrIHRoaXMgaXMgdG8gaW50ZW50aW9uYWxseSBzZXQgYSBuZWdhdGl2ZSBvZmZzZXQsXG4vLyBhbmQgdGhlbiB2ZXJpZnkgdGhhdCB0aGUgc3Vic2VxdWVudCBcInNjcm9sbFwiIGV2ZW50IG1hdGNoZXMgdGhlIG5lZ2F0aXZlIG9mZnNldC5cbi8vIElmIGl0IGRvZXMgbm90IG1hdGNoLCB0aGVuIHdlIGNhbiBhc3N1bWUgYSBub24tc3RhbmRhcmQgUlRMIHNjcm9sbCBpbXBsZW1lbnRhdGlvbi5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSVExPZmZzZXRUeXBlKHJlY2FsY3VsYXRlPzogYm9vbGVhbiA9IGZhbHNlKTogUlRMT2Zmc2V0VHlwZSB7XG4gIGlmIChjYWNoZWRSVExSZXN1bHQgPT09IG51bGwgfHwgcmVjYWxjdWxhdGUpIHtcbiAgICBjb25zdCBvdXRlckRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGNvbnN0IG91dGVyU3R5bGUgPSBvdXRlckRpdi5zdHlsZTtcbiAgICBvdXRlclN0eWxlLndpZHRoID0gJzUwcHgnO1xuICAgIG91dGVyU3R5bGUuaGVpZ2h0ID0gJzUwcHgnO1xuICAgIG91dGVyU3R5bGUub3ZlcmZsb3cgPSAnc2Nyb2xsJztcbiAgICBvdXRlclN0eWxlLmRpcmVjdGlvbiA9ICdydGwnO1xuXG4gICAgY29uc3QgaW5uZXJEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBjb25zdCBpbm5lclN0eWxlID0gaW5uZXJEaXYuc3R5bGU7XG4gICAgaW5uZXJTdHlsZS53aWR0aCA9ICcxMDBweCc7XG4gICAgaW5uZXJTdHlsZS5oZWlnaHQgPSAnMTAwcHgnO1xuXG4gICAgb3V0ZXJEaXYuYXBwZW5kQ2hpbGQoaW5uZXJEaXYpO1xuXG4gICAgKChkb2N1bWVudC5ib2R5OiBhbnkpOiBIVE1MQm9keUVsZW1lbnQpLmFwcGVuZENoaWxkKG91dGVyRGl2KTtcblxuICAgIGlmIChvdXRlckRpdi5zY3JvbGxMZWZ0ID4gMCkge1xuICAgICAgY2FjaGVkUlRMUmVzdWx0ID0gJ3Bvc2l0aXZlLWRlc2NlbmRpbmcnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXRlckRpdi5zY3JvbGxMZWZ0ID0gMTtcbiAgICAgIGlmIChvdXRlckRpdi5zY3JvbGxMZWZ0ID09PSAwKSB7XG4gICAgICAgIGNhY2hlZFJUTFJlc3VsdCA9ICduZWdhdGl2ZSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYWNoZWRSVExSZXN1bHQgPSAncG9zaXRpdmUtYXNjZW5kaW5nJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAoKGRvY3VtZW50LmJvZHk6IGFueSk6IEhUTUxCb2R5RWxlbWVudCkucmVtb3ZlQ2hpbGQob3V0ZXJEaXYpO1xuXG4gICAgcmV0dXJuIGNhY2hlZFJUTFJlc3VsdDtcbiAgfVxuXG4gIHJldHVybiBjYWNoZWRSVExSZXN1bHQ7XG59XG4iLCAiLy8gQGZsb3dcblxuaW1wb3J0IG1lbW9pemVPbmUgZnJvbSAnbWVtb2l6ZS1vbmUnO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudCwgUHVyZUNvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNhbmNlbFRpbWVvdXQsIHJlcXVlc3RUaW1lb3V0IH0gZnJvbSAnLi90aW1lcic7XG5pbXBvcnQgeyBnZXRTY3JvbGxiYXJTaXplLCBnZXRSVExPZmZzZXRUeXBlIH0gZnJvbSAnLi9kb21IZWxwZXJzJztcblxuaW1wb3J0IHR5cGUgeyBUaW1lb3V0SUQgfSBmcm9tICcuL3RpbWVyJztcblxudHlwZSBEaXJlY3Rpb24gPSAnbHRyJyB8ICdydGwnO1xuZXhwb3J0IHR5cGUgU2Nyb2xsVG9BbGlnbiA9ICdhdXRvJyB8ICdzbWFydCcgfCAnY2VudGVyJyB8ICdzdGFydCcgfCAnZW5kJztcblxudHlwZSBpdGVtU2l6ZSA9IG51bWJlciB8ICgoaW5kZXg6IG51bWJlcikgPT4gbnVtYmVyKTtcblxudHlwZSBSZW5kZXJDb21wb25lbnRQcm9wczxUPiA9IHt8XG4gIGNvbHVtbkluZGV4OiBudW1iZXIsXG4gIGRhdGE6IFQsXG4gIGlzU2Nyb2xsaW5nPzogYm9vbGVhbixcbiAgcm93SW5kZXg6IG51bWJlcixcbiAgc3R5bGU6IE9iamVjdCxcbnx9O1xuZXhwb3J0IHR5cGUgUmVuZGVyQ29tcG9uZW50PFQ+ID0gUmVhY3QkQ29tcG9uZW50VHlwZTxcbiAgJFNoYXBlPFJlbmRlckNvbXBvbmVudFByb3BzPFQ+PlxuPjtcblxudHlwZSBTY3JvbGxEaXJlY3Rpb24gPSAnZm9yd2FyZCcgfCAnYmFja3dhcmQnO1xuXG50eXBlIE9uSXRlbXNSZW5kZXJlZENhbGxiYWNrID0gKHtcbiAgb3ZlcnNjYW5Db2x1bW5TdGFydEluZGV4OiBudW1iZXIsXG4gIG92ZXJzY2FuQ29sdW1uU3RvcEluZGV4OiBudW1iZXIsXG4gIG92ZXJzY2FuUm93U3RhcnRJbmRleDogbnVtYmVyLFxuICBvdmVyc2NhblJvd1N0b3BJbmRleDogbnVtYmVyLFxuICB2aXNpYmxlQ29sdW1uU3RhcnRJbmRleDogbnVtYmVyLFxuICB2aXNpYmxlQ29sdW1uU3RvcEluZGV4OiBudW1iZXIsXG4gIHZpc2libGVSb3dTdGFydEluZGV4OiBudW1iZXIsXG4gIHZpc2libGVSb3dTdG9wSW5kZXg6IG51bWJlcixcbn0pID0+IHZvaWQ7XG50eXBlIE9uU2Nyb2xsQ2FsbGJhY2sgPSAoe1xuICBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uOiBTY3JvbGxEaXJlY3Rpb24sXG4gIHNjcm9sbExlZnQ6IG51bWJlcixcbiAgc2Nyb2xsVG9wOiBudW1iZXIsXG4gIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogYm9vbGVhbixcbiAgdmVydGljYWxTY3JvbGxEaXJlY3Rpb246IFNjcm9sbERpcmVjdGlvbixcbn0pID0+IHZvaWQ7XG5cbnR5cGUgU2Nyb2xsRXZlbnQgPSBTeW50aGV0aWNFdmVudDxIVE1MRGl2RWxlbWVudD47XG50eXBlIEl0ZW1TdHlsZUNhY2hlID0geyBba2V5OiBzdHJpbmddOiBPYmplY3QgfTtcblxudHlwZSBPdXRlclByb3BzID0ge3xcbiAgY2hpbGRyZW46IFJlYWN0JE5vZGUsXG4gIGNsYXNzTmFtZTogc3RyaW5nIHwgdm9pZCxcbiAgb25TY3JvbGw6IFNjcm9sbEV2ZW50ID0+IHZvaWQsXG4gIHN0eWxlOiB7XG4gICAgW3N0cmluZ106IG1peGVkLFxuICB9LFxufH07XG5cbnR5cGUgSW5uZXJQcm9wcyA9IHt8XG4gIGNoaWxkcmVuOiBSZWFjdCROb2RlLFxuICBzdHlsZToge1xuICAgIFtzdHJpbmddOiBtaXhlZCxcbiAgfSxcbnx9O1xuXG5leHBvcnQgdHlwZSBQcm9wczxUPiA9IHt8XG4gIGNoaWxkcmVuOiBSZW5kZXJDb21wb25lbnQ8VD4sXG4gIGNsYXNzTmFtZT86IHN0cmluZyxcbiAgY29sdW1uQ291bnQ6IG51bWJlcixcbiAgY29sdW1uV2lkdGg6IGl0ZW1TaXplLFxuICBkaXJlY3Rpb246IERpcmVjdGlvbixcbiAgaGVpZ2h0OiBudW1iZXIsXG4gIGluaXRpYWxTY3JvbGxMZWZ0PzogbnVtYmVyLFxuICBpbml0aWFsU2Nyb2xsVG9wPzogbnVtYmVyLFxuICBpbm5lclJlZj86IGFueSxcbiAgaW5uZXJFbGVtZW50VHlwZT86IHN0cmluZyB8IFJlYWN0JEFic3RyYWN0Q29tcG9uZW50PElubmVyUHJvcHMsIGFueT4sXG4gIGlubmVyVGFnTmFtZT86IHN0cmluZywgLy8gZGVwcmVjYXRlZFxuICBpdGVtRGF0YTogVCxcbiAgaXRlbUtleT86IChwYXJhbXM6IHt8XG4gICAgY29sdW1uSW5kZXg6IG51bWJlcixcbiAgICBkYXRhOiBULFxuICAgIHJvd0luZGV4OiBudW1iZXIsXG4gIHx9KSA9PiBhbnksXG4gIG9uSXRlbXNSZW5kZXJlZD86IE9uSXRlbXNSZW5kZXJlZENhbGxiYWNrLFxuICBvblNjcm9sbD86IE9uU2Nyb2xsQ2FsbGJhY2ssXG4gIG91dGVyUmVmPzogYW55LFxuICBvdXRlckVsZW1lbnRUeXBlPzogc3RyaW5nIHwgUmVhY3QkQWJzdHJhY3RDb21wb25lbnQ8T3V0ZXJQcm9wcywgYW55PixcbiAgb3V0ZXJUYWdOYW1lPzogc3RyaW5nLCAvLyBkZXByZWNhdGVkXG4gIG92ZXJzY2FuQ29sdW1uQ291bnQ/OiBudW1iZXIsXG4gIG92ZXJzY2FuQ29sdW1uc0NvdW50PzogbnVtYmVyLCAvLyBkZXByZWNhdGVkXG4gIG92ZXJzY2FuQ291bnQ/OiBudW1iZXIsIC8vIGRlcHJlY2F0ZWRcbiAgb3ZlcnNjYW5Sb3dDb3VudD86IG51bWJlcixcbiAgb3ZlcnNjYW5Sb3dzQ291bnQ/OiBudW1iZXIsIC8vIGRlcHJlY2F0ZWRcbiAgcm93Q291bnQ6IG51bWJlcixcbiAgcm93SGVpZ2h0OiBpdGVtU2l6ZSxcbiAgc3R5bGU/OiBPYmplY3QsXG4gIHVzZUlzU2Nyb2xsaW5nOiBib29sZWFuLFxuICB3aWR0aDogbnVtYmVyLFxufH07XG5cbnR5cGUgU3RhdGUgPSB7fFxuICBpbnN0YW5jZTogYW55LFxuICBpc1Njcm9sbGluZzogYm9vbGVhbixcbiAgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbjogU2Nyb2xsRGlyZWN0aW9uLFxuICBzY3JvbGxMZWZ0OiBudW1iZXIsXG4gIHNjcm9sbFRvcDogbnVtYmVyLFxuICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IGJvb2xlYW4sXG4gIHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uOiBTY3JvbGxEaXJlY3Rpb24sXG58fTtcblxudHlwZSBnZXRJdGVtT2Zmc2V0ID0gKFxuICBwcm9wczogUHJvcHM8YW55PixcbiAgaW5kZXg6IG51bWJlcixcbiAgaW5zdGFuY2VQcm9wczogYW55XG4pID0+IG51bWJlcjtcbnR5cGUgZ2V0SXRlbVNpemUgPSAoXG4gIHByb3BzOiBQcm9wczxhbnk+LFxuICBpbmRleDogbnVtYmVyLFxuICBpbnN0YW5jZVByb3BzOiBhbnlcbikgPT4gbnVtYmVyO1xudHlwZSBnZXRFc3RpbWF0ZWRUb3RhbFNpemUgPSAocHJvcHM6IFByb3BzPGFueT4sIGluc3RhbmNlUHJvcHM6IGFueSkgPT4gbnVtYmVyO1xudHlwZSBHZXRPZmZzZXRGb3JJdGVtQW5kQWxpZ25tZW50ID0gKFxuICBwcm9wczogUHJvcHM8YW55PixcbiAgaW5kZXg6IG51bWJlcixcbiAgYWxpZ246IFNjcm9sbFRvQWxpZ24sXG4gIHNjcm9sbE9mZnNldDogbnVtYmVyLFxuICBpbnN0YW5jZVByb3BzOiBhbnksXG4gIHNjcm9sbGJhclNpemU6IG51bWJlclxuKSA9PiBudW1iZXI7XG50eXBlIEdldFN0YXJ0SW5kZXhGb3JPZmZzZXQgPSAoXG4gIHByb3BzOiBQcm9wczxhbnk+LFxuICBvZmZzZXQ6IG51bWJlcixcbiAgaW5zdGFuY2VQcm9wczogYW55XG4pID0+IG51bWJlcjtcbnR5cGUgR2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleCA9IChcbiAgcHJvcHM6IFByb3BzPGFueT4sXG4gIHN0YXJ0SW5kZXg6IG51bWJlcixcbiAgc2Nyb2xsT2Zmc2V0OiBudW1iZXIsXG4gIGluc3RhbmNlUHJvcHM6IGFueVxuKSA9PiBudW1iZXI7XG50eXBlIEluaXRJbnN0YW5jZVByb3BzID0gKHByb3BzOiBQcm9wczxhbnk+LCBpbnN0YW5jZTogYW55KSA9PiBhbnk7XG50eXBlIFZhbGlkYXRlUHJvcHMgPSAocHJvcHM6IFByb3BzPGFueT4pID0+IHZvaWQ7XG5cbmNvbnN0IElTX1NDUk9MTElOR19ERUJPVU5DRV9JTlRFUlZBTCA9IDE1MDtcblxuY29uc3QgZGVmYXVsdEl0ZW1LZXkgPSAoeyBjb2x1bW5JbmRleCwgZGF0YSwgcm93SW5kZXggfSkgPT5cbiAgYCR7cm93SW5kZXh9OiR7Y29sdW1uSW5kZXh9YDtcblxuLy8gSW4gREVWIG1vZGUsIHRoaXMgU2V0IGhlbHBzIHVzIG9ubHkgbG9nIGEgd2FybmluZyBvbmNlIHBlciBjb21wb25lbnQgaW5zdGFuY2UuXG4vLyBUaGlzIGF2b2lkcyBzcGFtbWluZyB0aGUgY29uc29sZSBldmVyeSB0aW1lIGEgcmVuZGVyIGhhcHBlbnMuXG5sZXQgZGV2V2FybmluZ3NPdmVyc2NhbkNvdW50ID0gbnVsbDtcbmxldCBkZXZXYXJuaW5nc092ZXJzY2FuUm93c0NvbHVtbnNDb3VudCA9IG51bGw7XG5sZXQgZGV2V2FybmluZ3NUYWdOYW1lID0gbnVsbDtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LldlYWtTZXQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgZGV2V2FybmluZ3NPdmVyc2NhbkNvdW50ID0gbmV3IFdlYWtTZXQoKTtcbiAgICBkZXZXYXJuaW5nc092ZXJzY2FuUm93c0NvbHVtbnNDb3VudCA9IG5ldyBXZWFrU2V0KCk7XG4gICAgZGV2V2FybmluZ3NUYWdOYW1lID0gbmV3IFdlYWtTZXQoKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVHcmlkQ29tcG9uZW50KHtcbiAgZ2V0Q29sdW1uT2Zmc2V0LFxuICBnZXRDb2x1bW5TdGFydEluZGV4Rm9yT2Zmc2V0LFxuICBnZXRDb2x1bW5TdG9wSW5kZXhGb3JTdGFydEluZGV4LFxuICBnZXRDb2x1bW5XaWR0aCxcbiAgZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQsXG4gIGdldEVzdGltYXRlZFRvdGFsV2lkdGgsXG4gIGdldE9mZnNldEZvckNvbHVtbkFuZEFsaWdubWVudCxcbiAgZ2V0T2Zmc2V0Rm9yUm93QW5kQWxpZ25tZW50LFxuICBnZXRSb3dIZWlnaHQsXG4gIGdldFJvd09mZnNldCxcbiAgZ2V0Um93U3RhcnRJbmRleEZvck9mZnNldCxcbiAgZ2V0Um93U3RvcEluZGV4Rm9yU3RhcnRJbmRleCxcbiAgaW5pdEluc3RhbmNlUHJvcHMsXG4gIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UsXG4gIHZhbGlkYXRlUHJvcHMsXG59OiB7fFxuICBnZXRDb2x1bW5PZmZzZXQ6IGdldEl0ZW1PZmZzZXQsXG4gIGdldENvbHVtblN0YXJ0SW5kZXhGb3JPZmZzZXQ6IEdldFN0YXJ0SW5kZXhGb3JPZmZzZXQsXG4gIGdldENvbHVtblN0b3BJbmRleEZvclN0YXJ0SW5kZXg6IEdldFN0b3BJbmRleEZvclN0YXJ0SW5kZXgsXG4gIGdldENvbHVtbldpZHRoOiBnZXRJdGVtU2l6ZSxcbiAgZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQ6IGdldEVzdGltYXRlZFRvdGFsU2l6ZSxcbiAgZ2V0RXN0aW1hdGVkVG90YWxXaWR0aDogZ2V0RXN0aW1hdGVkVG90YWxTaXplLFxuICBnZXRPZmZzZXRGb3JDb2x1bW5BbmRBbGlnbm1lbnQ6IEdldE9mZnNldEZvckl0ZW1BbmRBbGlnbm1lbnQsXG4gIGdldE9mZnNldEZvclJvd0FuZEFsaWdubWVudDogR2V0T2Zmc2V0Rm9ySXRlbUFuZEFsaWdubWVudCxcbiAgZ2V0Um93T2Zmc2V0OiBnZXRJdGVtT2Zmc2V0LFxuICBnZXRSb3dIZWlnaHQ6IGdldEl0ZW1TaXplLFxuICBnZXRSb3dTdGFydEluZGV4Rm9yT2Zmc2V0OiBHZXRTdGFydEluZGV4Rm9yT2Zmc2V0LFxuICBnZXRSb3dTdG9wSW5kZXhGb3JTdGFydEluZGV4OiBHZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4LFxuICBpbml0SW5zdGFuY2VQcm9wczogSW5pdEluc3RhbmNlUHJvcHMsXG4gIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2U6IGJvb2xlYW4sXG4gIHZhbGlkYXRlUHJvcHM6IFZhbGlkYXRlUHJvcHMsXG58fSkge1xuICByZXR1cm4gY2xhc3MgR3JpZDxUPiBleHRlbmRzIFB1cmVDb21wb25lbnQ8UHJvcHM8VD4sIFN0YXRlPiB7XG4gICAgX2luc3RhbmNlUHJvcHM6IGFueSA9IGluaXRJbnN0YW5jZVByb3BzKHRoaXMucHJvcHMsIHRoaXMpO1xuICAgIF9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkOiBUaW1lb3V0SUQgfCBudWxsID0gbnVsbDtcbiAgICBfb3V0ZXJSZWY6ID9IVE1MRGl2RWxlbWVudDtcblxuICAgIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgICBkaXJlY3Rpb246ICdsdHInLFxuICAgICAgaXRlbURhdGE6IHVuZGVmaW5lZCxcbiAgICAgIHVzZUlzU2Nyb2xsaW5nOiBmYWxzZSxcbiAgICB9O1xuXG4gICAgc3RhdGU6IFN0YXRlID0ge1xuICAgICAgaW5zdGFuY2U6IHRoaXMsXG4gICAgICBpc1Njcm9sbGluZzogZmFsc2UsXG4gICAgICBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uOiAnZm9yd2FyZCcsXG4gICAgICBzY3JvbGxMZWZ0OlxuICAgICAgICB0eXBlb2YgdGhpcy5wcm9wcy5pbml0aWFsU2Nyb2xsTGVmdCA9PT0gJ251bWJlcidcbiAgICAgICAgICA/IHRoaXMucHJvcHMuaW5pdGlhbFNjcm9sbExlZnRcbiAgICAgICAgICA6IDAsXG4gICAgICBzY3JvbGxUb3A6XG4gICAgICAgIHR5cGVvZiB0aGlzLnByb3BzLmluaXRpYWxTY3JvbGxUb3AgPT09ICdudW1iZXInXG4gICAgICAgICAgPyB0aGlzLnByb3BzLmluaXRpYWxTY3JvbGxUb3BcbiAgICAgICAgICA6IDAsXG4gICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IGZhbHNlLFxuICAgICAgdmVydGljYWxTY3JvbGxEaXJlY3Rpb246ICdmb3J3YXJkJyxcbiAgICB9O1xuXG4gICAgLy8gQWx3YXlzIHVzZSBleHBsaWNpdCBjb25zdHJ1Y3RvciBmb3IgUmVhY3QgY29tcG9uZW50cy5cbiAgICAvLyBJdCBwcm9kdWNlcyBsZXNzIGNvZGUgYWZ0ZXIgdHJhbnNwaWxhdGlvbi4gKCMyNilcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1jb25zdHJ1Y3RvclxuICAgIGNvbnN0cnVjdG9yKHByb3BzOiBQcm9wczxUPikge1xuICAgICAgc3VwZXIocHJvcHMpO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoXG4gICAgICBuZXh0UHJvcHM6IFByb3BzPFQ+LFxuICAgICAgcHJldlN0YXRlOiBTdGF0ZVxuICAgICk6ICRTaGFwZTxTdGF0ZT4gfCBudWxsIHtcbiAgICAgIHZhbGlkYXRlU2hhcmVkUHJvcHMobmV4dFByb3BzLCBwcmV2U3RhdGUpO1xuICAgICAgdmFsaWRhdGVQcm9wcyhuZXh0UHJvcHMpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgc2Nyb2xsVG8oe1xuICAgICAgc2Nyb2xsTGVmdCxcbiAgICAgIHNjcm9sbFRvcCxcbiAgICB9OiB7XG4gICAgICBzY3JvbGxMZWZ0OiBudW1iZXIsXG4gICAgICBzY3JvbGxUb3A6IG51bWJlcixcbiAgICB9KTogdm9pZCB7XG4gICAgICBpZiAoc2Nyb2xsTGVmdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHNjcm9sbExlZnQgPSBNYXRoLm1heCgwLCBzY3JvbGxMZWZ0KTtcbiAgICAgIH1cbiAgICAgIGlmIChzY3JvbGxUb3AgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzY3JvbGxUb3AgPSBNYXRoLm1heCgwLCBzY3JvbGxUb3ApO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnNldFN0YXRlKHByZXZTdGF0ZSA9PiB7XG4gICAgICAgIGlmIChzY3JvbGxMZWZ0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzY3JvbGxMZWZ0ID0gcHJldlN0YXRlLnNjcm9sbExlZnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNjcm9sbFRvcCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc2Nyb2xsVG9wID0gcHJldlN0YXRlLnNjcm9sbFRvcDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBwcmV2U3RhdGUuc2Nyb2xsTGVmdCA9PT0gc2Nyb2xsTGVmdCAmJlxuICAgICAgICAgIHByZXZTdGF0ZS5zY3JvbGxUb3AgPT09IHNjcm9sbFRvcFxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbjpcbiAgICAgICAgICAgIHByZXZTdGF0ZS5zY3JvbGxMZWZ0IDwgc2Nyb2xsTGVmdCA/ICdmb3J3YXJkJyA6ICdiYWNrd2FyZCcsXG4gICAgICAgICAgc2Nyb2xsTGVmdDogc2Nyb2xsTGVmdCxcbiAgICAgICAgICBzY3JvbGxUb3A6IHNjcm9sbFRvcCxcbiAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IHRydWUsXG4gICAgICAgICAgdmVydGljYWxTY3JvbGxEaXJlY3Rpb246XG4gICAgICAgICAgICBwcmV2U3RhdGUuc2Nyb2xsVG9wIDwgc2Nyb2xsVG9wID8gJ2ZvcndhcmQnIDogJ2JhY2t3YXJkJyxcbiAgICAgICAgfTtcbiAgICAgIH0sIHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQpO1xuICAgIH1cblxuICAgIHNjcm9sbFRvSXRlbSh7XG4gICAgICBhbGlnbiA9ICdhdXRvJyxcbiAgICAgIGNvbHVtbkluZGV4LFxuICAgICAgcm93SW5kZXgsXG4gICAgfToge1xuICAgICAgYWxpZ246IFNjcm9sbFRvQWxpZ24sXG4gICAgICBjb2x1bW5JbmRleD86IG51bWJlcixcbiAgICAgIHJvd0luZGV4PzogbnVtYmVyLFxuICAgIH0pOiB2b2lkIHtcbiAgICAgIGNvbnN0IHsgY29sdW1uQ291bnQsIGhlaWdodCwgcm93Q291bnQsIHdpZHRoIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgeyBzY3JvbGxMZWZ0LCBzY3JvbGxUb3AgfSA9IHRoaXMuc3RhdGU7XG4gICAgICBjb25zdCBzY3JvbGxiYXJTaXplID0gZ2V0U2Nyb2xsYmFyU2l6ZSgpO1xuXG4gICAgICBpZiAoY29sdW1uSW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb2x1bW5JbmRleCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGNvbHVtbkluZGV4LCBjb2x1bW5Db3VudCAtIDEpKTtcbiAgICAgIH1cbiAgICAgIGlmIChyb3dJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJvd0luZGV4ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4ocm93SW5kZXgsIHJvd0NvdW50IC0gMSkpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBlc3RpbWF0ZWRUb3RhbEhlaWdodCA9IGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0KFxuICAgICAgICB0aGlzLnByb3BzLFxuICAgICAgICB0aGlzLl9pbnN0YW5jZVByb3BzXG4gICAgICApO1xuICAgICAgY29uc3QgZXN0aW1hdGVkVG90YWxXaWR0aCA9IGdldEVzdGltYXRlZFRvdGFsV2lkdGgoXG4gICAgICAgIHRoaXMucHJvcHMsXG4gICAgICAgIHRoaXMuX2luc3RhbmNlUHJvcHNcbiAgICAgICk7XG5cbiAgICAgIC8vIFRoZSBzY3JvbGxiYXIgc2l6ZSBzaG91bGQgYmUgY29uc2lkZXJlZCB3aGVuIHNjcm9sbGluZyBhbiBpdGVtIGludG8gdmlldyxcbiAgICAgIC8vIHRvIGVuc3VyZSBpdCdzIGZ1bGx5IHZpc2libGUuXG4gICAgICAvLyBCdXQgd2Ugb25seSBuZWVkIHRvIGFjY291bnQgZm9yIGl0cyBzaXplIHdoZW4gaXQncyBhY3R1YWxseSB2aXNpYmxlLlxuICAgICAgY29uc3QgaG9yaXpvbnRhbFNjcm9sbGJhclNpemUgPVxuICAgICAgICBlc3RpbWF0ZWRUb3RhbFdpZHRoID4gd2lkdGggPyBzY3JvbGxiYXJTaXplIDogMDtcbiAgICAgIGNvbnN0IHZlcnRpY2FsU2Nyb2xsYmFyU2l6ZSA9XG4gICAgICAgIGVzdGltYXRlZFRvdGFsSGVpZ2h0ID4gaGVpZ2h0ID8gc2Nyb2xsYmFyU2l6ZSA6IDA7XG5cbiAgICAgIHRoaXMuc2Nyb2xsVG8oe1xuICAgICAgICBzY3JvbGxMZWZ0OlxuICAgICAgICAgIGNvbHVtbkluZGV4ICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gZ2V0T2Zmc2V0Rm9yQ29sdW1uQW5kQWxpZ25tZW50KFxuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMsXG4gICAgICAgICAgICAgICAgY29sdW1uSW5kZXgsXG4gICAgICAgICAgICAgICAgYWxpZ24sXG4gICAgICAgICAgICAgICAgc2Nyb2xsTGVmdCxcbiAgICAgICAgICAgICAgICB0aGlzLl9pbnN0YW5jZVByb3BzLFxuICAgICAgICAgICAgICAgIHZlcnRpY2FsU2Nyb2xsYmFyU2l6ZVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IHNjcm9sbExlZnQsXG4gICAgICAgIHNjcm9sbFRvcDpcbiAgICAgICAgICByb3dJbmRleCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IGdldE9mZnNldEZvclJvd0FuZEFsaWdubWVudChcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLFxuICAgICAgICAgICAgICAgIHJvd0luZGV4LFxuICAgICAgICAgICAgICAgIGFsaWduLFxuICAgICAgICAgICAgICAgIHNjcm9sbFRvcCxcbiAgICAgICAgICAgICAgICB0aGlzLl9pbnN0YW5jZVByb3BzLFxuICAgICAgICAgICAgICAgIGhvcml6b250YWxTY3JvbGxiYXJTaXplXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogc2Nyb2xsVG9wLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICBjb25zdCB7IGluaXRpYWxTY3JvbGxMZWZ0LCBpbml0aWFsU2Nyb2xsVG9wIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICBpZiAodGhpcy5fb3V0ZXJSZWYgIT0gbnVsbCkge1xuICAgICAgICBjb25zdCBvdXRlclJlZiA9ICgodGhpcy5fb3V0ZXJSZWY6IGFueSk6IEhUTUxFbGVtZW50KTtcbiAgICAgICAgaWYgKHR5cGVvZiBpbml0aWFsU2Nyb2xsTGVmdCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBvdXRlclJlZi5zY3JvbGxMZWZ0ID0gaW5pdGlhbFNjcm9sbExlZnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBpbml0aWFsU2Nyb2xsVG9wID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIG91dGVyUmVmLnNjcm9sbFRvcCA9IGluaXRpYWxTY3JvbGxUb3A7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5fY2FsbFByb3BzQ2FsbGJhY2tzKCk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkVXBkYXRlKCkge1xuICAgICAgY29uc3QgeyBkaXJlY3Rpb24gfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCB7IHNjcm9sbExlZnQsIHNjcm9sbFRvcCwgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgICBpZiAoc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkICYmIHRoaXMuX291dGVyUmVmICE9IG51bGwpIHtcbiAgICAgICAgLy8gVFJJQ0tZIEFjY29yZGluZyB0byB0aGUgc3BlYywgc2Nyb2xsTGVmdCBzaG91bGQgYmUgbmVnYXRpdmUgZm9yIFJUTCBhbGlnbmVkIGVsZW1lbnRzLlxuICAgICAgICAvLyBUaGlzIGlzIG5vdCB0aGUgY2FzZSBmb3IgYWxsIGJyb3dzZXJzIHRob3VnaCAoZS5nLiBDaHJvbWUgcmVwb3J0cyB2YWx1ZXMgYXMgcG9zaXRpdmUsIG1lYXN1cmVkIHJlbGF0aXZlIHRvIHRoZSBsZWZ0KS5cbiAgICAgICAgLy8gU28gd2UgbmVlZCB0byBkZXRlcm1pbmUgd2hpY2ggYnJvd3NlciBiZWhhdmlvciB3ZSdyZSBkZWFsaW5nIHdpdGgsIGFuZCBtaW1pYyBpdC5cbiAgICAgICAgY29uc3Qgb3V0ZXJSZWYgPSAoKHRoaXMuX291dGVyUmVmOiBhbnkpOiBIVE1MRWxlbWVudCk7XG4gICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICdydGwnKSB7XG4gICAgICAgICAgc3dpdGNoIChnZXRSVExPZmZzZXRUeXBlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgJ25lZ2F0aXZlJzpcbiAgICAgICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IC1zY3JvbGxMZWZ0O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3Bvc2l0aXZlLWFzY2VuZGluZyc6XG4gICAgICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSBzY3JvbGxMZWZ0O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIGNvbnN0IHsgY2xpZW50V2lkdGgsIHNjcm9sbFdpZHRoIH0gPSBvdXRlclJlZjtcbiAgICAgICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IHNjcm9sbFdpZHRoIC0gY2xpZW50V2lkdGggLSBzY3JvbGxMZWZ0O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IE1hdGgubWF4KDAsIHNjcm9sbExlZnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsVG9wID0gTWF0aC5tYXgoMCwgc2Nyb2xsVG9wKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fY2FsbFByb3BzQ2FsbGJhY2tzKCk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICBpZiAodGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCAhPT0gbnVsbCkge1xuICAgICAgICBjYW5jZWxUaW1lb3V0KHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY2hpbGRyZW4sXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgY29sdW1uQ291bnQsXG4gICAgICAgIGRpcmVjdGlvbixcbiAgICAgICAgaGVpZ2h0LFxuICAgICAgICBpbm5lclJlZixcbiAgICAgICAgaW5uZXJFbGVtZW50VHlwZSxcbiAgICAgICAgaW5uZXJUYWdOYW1lLFxuICAgICAgICBpdGVtRGF0YSxcbiAgICAgICAgaXRlbUtleSA9IGRlZmF1bHRJdGVtS2V5LFxuICAgICAgICBvdXRlckVsZW1lbnRUeXBlLFxuICAgICAgICBvdXRlclRhZ05hbWUsXG4gICAgICAgIHJvd0NvdW50LFxuICAgICAgICBzdHlsZSxcbiAgICAgICAgdXNlSXNTY3JvbGxpbmcsXG4gICAgICAgIHdpZHRoLFxuICAgICAgfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCB7IGlzU2Nyb2xsaW5nIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgICBjb25zdCBbXG4gICAgICAgIGNvbHVtblN0YXJ0SW5kZXgsXG4gICAgICAgIGNvbHVtblN0b3BJbmRleCxcbiAgICAgIF0gPSB0aGlzLl9nZXRIb3Jpem9udGFsUmFuZ2VUb1JlbmRlcigpO1xuICAgICAgY29uc3QgW3Jvd1N0YXJ0SW5kZXgsIHJvd1N0b3BJbmRleF0gPSB0aGlzLl9nZXRWZXJ0aWNhbFJhbmdlVG9SZW5kZXIoKTtcblxuICAgICAgY29uc3QgaXRlbXMgPSBbXTtcbiAgICAgIGlmIChjb2x1bW5Db3VudCA+IDAgJiYgcm93Q291bnQpIHtcbiAgICAgICAgZm9yIChcbiAgICAgICAgICBsZXQgcm93SW5kZXggPSByb3dTdGFydEluZGV4O1xuICAgICAgICAgIHJvd0luZGV4IDw9IHJvd1N0b3BJbmRleDtcbiAgICAgICAgICByb3dJbmRleCsrXG4gICAgICAgICkge1xuICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICBsZXQgY29sdW1uSW5kZXggPSBjb2x1bW5TdGFydEluZGV4O1xuICAgICAgICAgICAgY29sdW1uSW5kZXggPD0gY29sdW1uU3RvcEluZGV4O1xuICAgICAgICAgICAgY29sdW1uSW5kZXgrK1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgaXRlbXMucHVzaChcbiAgICAgICAgICAgICAgY3JlYXRlRWxlbWVudChjaGlsZHJlbiwge1xuICAgICAgICAgICAgICAgIGNvbHVtbkluZGV4LFxuICAgICAgICAgICAgICAgIGRhdGE6IGl0ZW1EYXRhLFxuICAgICAgICAgICAgICAgIGlzU2Nyb2xsaW5nOiB1c2VJc1Njcm9sbGluZyA/IGlzU2Nyb2xsaW5nIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIGtleTogaXRlbUtleSh7IGNvbHVtbkluZGV4LCBkYXRhOiBpdGVtRGF0YSwgcm93SW5kZXggfSksXG4gICAgICAgICAgICAgICAgcm93SW5kZXgsXG4gICAgICAgICAgICAgICAgc3R5bGU6IHRoaXMuX2dldEl0ZW1TdHlsZShyb3dJbmRleCwgY29sdW1uSW5kZXgpLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gUmVhZCB0aGlzIHZhbHVlIEFGVEVSIGl0ZW1zIGhhdmUgYmVlbiBjcmVhdGVkLFxuICAgICAgLy8gU28gdGhlaXIgYWN0dWFsIHNpemVzIChpZiB2YXJpYWJsZSkgYXJlIHRha2VuIGludG8gY29uc2lkZXJhdGlvbi5cbiAgICAgIGNvbnN0IGVzdGltYXRlZFRvdGFsSGVpZ2h0ID0gZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQoXG4gICAgICAgIHRoaXMucHJvcHMsXG4gICAgICAgIHRoaXMuX2luc3RhbmNlUHJvcHNcbiAgICAgICk7XG4gICAgICBjb25zdCBlc3RpbWF0ZWRUb3RhbFdpZHRoID0gZ2V0RXN0aW1hdGVkVG90YWxXaWR0aChcbiAgICAgICAgdGhpcy5wcm9wcyxcbiAgICAgICAgdGhpcy5faW5zdGFuY2VQcm9wc1xuICAgICAgKTtcblxuICAgICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoXG4gICAgICAgIG91dGVyRWxlbWVudFR5cGUgfHwgb3V0ZXJUYWdOYW1lIHx8ICdkaXYnLFxuICAgICAgICB7XG4gICAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICAgIG9uU2Nyb2xsOiB0aGlzLl9vblNjcm9sbCxcbiAgICAgICAgICByZWY6IHRoaXMuX291dGVyUmVmU2V0dGVyLFxuICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgb3ZlcmZsb3c6ICdhdXRvJyxcbiAgICAgICAgICAgIFdlYmtpdE92ZXJmbG93U2Nyb2xsaW5nOiAndG91Y2gnLFxuICAgICAgICAgICAgd2lsbENoYW5nZTogJ3RyYW5zZm9ybScsXG4gICAgICAgICAgICBkaXJlY3Rpb24sXG4gICAgICAgICAgICAuLi5zdHlsZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBjcmVhdGVFbGVtZW50KGlubmVyRWxlbWVudFR5cGUgfHwgaW5uZXJUYWdOYW1lIHx8ICdkaXYnLCB7XG4gICAgICAgICAgY2hpbGRyZW46IGl0ZW1zLFxuICAgICAgICAgIHJlZjogaW5uZXJSZWYsXG4gICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgIGhlaWdodDogZXN0aW1hdGVkVG90YWxIZWlnaHQsXG4gICAgICAgICAgICBwb2ludGVyRXZlbnRzOiBpc1Njcm9sbGluZyA/ICdub25lJyA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHdpZHRoOiBlc3RpbWF0ZWRUb3RhbFdpZHRoLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cblxuICAgIF9jYWxsT25JdGVtc1JlbmRlcmVkOiAoXG4gICAgICBvdmVyc2NhbkNvbHVtblN0YXJ0SW5kZXg6IG51bWJlcixcbiAgICAgIG92ZXJzY2FuQ29sdW1uU3RvcEluZGV4OiBudW1iZXIsXG4gICAgICBvdmVyc2NhblJvd1N0YXJ0SW5kZXg6IG51bWJlcixcbiAgICAgIG92ZXJzY2FuUm93U3RvcEluZGV4OiBudW1iZXIsXG4gICAgICB2aXNpYmxlQ29sdW1uU3RhcnRJbmRleDogbnVtYmVyLFxuICAgICAgdmlzaWJsZUNvbHVtblN0b3BJbmRleDogbnVtYmVyLFxuICAgICAgdmlzaWJsZVJvd1N0YXJ0SW5kZXg6IG51bWJlcixcbiAgICAgIHZpc2libGVSb3dTdG9wSW5kZXg6IG51bWJlclxuICAgICkgPT4gdm9pZDtcbiAgICBfY2FsbE9uSXRlbXNSZW5kZXJlZCA9IG1lbW9pemVPbmUoXG4gICAgICAoXG4gICAgICAgIG92ZXJzY2FuQ29sdW1uU3RhcnRJbmRleDogbnVtYmVyLFxuICAgICAgICBvdmVyc2NhbkNvbHVtblN0b3BJbmRleDogbnVtYmVyLFxuICAgICAgICBvdmVyc2NhblJvd1N0YXJ0SW5kZXg6IG51bWJlcixcbiAgICAgICAgb3ZlcnNjYW5Sb3dTdG9wSW5kZXg6IG51bWJlcixcbiAgICAgICAgdmlzaWJsZUNvbHVtblN0YXJ0SW5kZXg6IG51bWJlcixcbiAgICAgICAgdmlzaWJsZUNvbHVtblN0b3BJbmRleDogbnVtYmVyLFxuICAgICAgICB2aXNpYmxlUm93U3RhcnRJbmRleDogbnVtYmVyLFxuICAgICAgICB2aXNpYmxlUm93U3RvcEluZGV4OiBudW1iZXJcbiAgICAgICkgPT5cbiAgICAgICAgKCh0aGlzLnByb3BzLm9uSXRlbXNSZW5kZXJlZDogYW55KTogT25JdGVtc1JlbmRlcmVkQ2FsbGJhY2spKHtcbiAgICAgICAgICBvdmVyc2NhbkNvbHVtblN0YXJ0SW5kZXgsXG4gICAgICAgICAgb3ZlcnNjYW5Db2x1bW5TdG9wSW5kZXgsXG4gICAgICAgICAgb3ZlcnNjYW5Sb3dTdGFydEluZGV4LFxuICAgICAgICAgIG92ZXJzY2FuUm93U3RvcEluZGV4LFxuICAgICAgICAgIHZpc2libGVDb2x1bW5TdGFydEluZGV4LFxuICAgICAgICAgIHZpc2libGVDb2x1bW5TdG9wSW5kZXgsXG4gICAgICAgICAgdmlzaWJsZVJvd1N0YXJ0SW5kZXgsXG4gICAgICAgICAgdmlzaWJsZVJvd1N0b3BJbmRleCxcbiAgICAgICAgfSlcbiAgICApO1xuXG4gICAgX2NhbGxPblNjcm9sbDogKFxuICAgICAgc2Nyb2xsTGVmdDogbnVtYmVyLFxuICAgICAgc2Nyb2xsVG9wOiBudW1iZXIsXG4gICAgICBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uOiBTY3JvbGxEaXJlY3Rpb24sXG4gICAgICB2ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbjogU2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBib29sZWFuXG4gICAgKSA9PiB2b2lkO1xuICAgIF9jYWxsT25TY3JvbGwgPSBtZW1vaXplT25lKFxuICAgICAgKFxuICAgICAgICBzY3JvbGxMZWZ0OiBudW1iZXIsXG4gICAgICAgIHNjcm9sbFRvcDogbnVtYmVyLFxuICAgICAgICBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uOiBTY3JvbGxEaXJlY3Rpb24sXG4gICAgICAgIHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uOiBTY3JvbGxEaXJlY3Rpb24sXG4gICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogYm9vbGVhblxuICAgICAgKSA9PlxuICAgICAgICAoKHRoaXMucHJvcHMub25TY3JvbGw6IGFueSk6IE9uU2Nyb2xsQ2FsbGJhY2spKHtcbiAgICAgICAgICBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICAgIHNjcm9sbExlZnQsXG4gICAgICAgICAgc2Nyb2xsVG9wLFxuICAgICAgICAgIHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCxcbiAgICAgICAgfSlcbiAgICApO1xuXG4gICAgX2NhbGxQcm9wc0NhbGxiYWNrcygpIHtcbiAgICAgIGNvbnN0IHsgY29sdW1uQ291bnQsIG9uSXRlbXNSZW5kZXJlZCwgb25TY3JvbGwsIHJvd0NvdW50IH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICBpZiAodHlwZW9mIG9uSXRlbXNSZW5kZXJlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpZiAoY29sdW1uQ291bnQgPiAwICYmIHJvd0NvdW50ID4gMCkge1xuICAgICAgICAgIGNvbnN0IFtcbiAgICAgICAgICAgIG92ZXJzY2FuQ29sdW1uU3RhcnRJbmRleCxcbiAgICAgICAgICAgIG92ZXJzY2FuQ29sdW1uU3RvcEluZGV4LFxuICAgICAgICAgICAgdmlzaWJsZUNvbHVtblN0YXJ0SW5kZXgsXG4gICAgICAgICAgICB2aXNpYmxlQ29sdW1uU3RvcEluZGV4LFxuICAgICAgICAgIF0gPSB0aGlzLl9nZXRIb3Jpem9udGFsUmFuZ2VUb1JlbmRlcigpO1xuICAgICAgICAgIGNvbnN0IFtcbiAgICAgICAgICAgIG92ZXJzY2FuUm93U3RhcnRJbmRleCxcbiAgICAgICAgICAgIG92ZXJzY2FuUm93U3RvcEluZGV4LFxuICAgICAgICAgICAgdmlzaWJsZVJvd1N0YXJ0SW5kZXgsXG4gICAgICAgICAgICB2aXNpYmxlUm93U3RvcEluZGV4LFxuICAgICAgICAgIF0gPSB0aGlzLl9nZXRWZXJ0aWNhbFJhbmdlVG9SZW5kZXIoKTtcbiAgICAgICAgICB0aGlzLl9jYWxsT25JdGVtc1JlbmRlcmVkKFxuICAgICAgICAgICAgb3ZlcnNjYW5Db2x1bW5TdGFydEluZGV4LFxuICAgICAgICAgICAgb3ZlcnNjYW5Db2x1bW5TdG9wSW5kZXgsXG4gICAgICAgICAgICBvdmVyc2NhblJvd1N0YXJ0SW5kZXgsXG4gICAgICAgICAgICBvdmVyc2NhblJvd1N0b3BJbmRleCxcbiAgICAgICAgICAgIHZpc2libGVDb2x1bW5TdGFydEluZGV4LFxuICAgICAgICAgICAgdmlzaWJsZUNvbHVtblN0b3BJbmRleCxcbiAgICAgICAgICAgIHZpc2libGVSb3dTdGFydEluZGV4LFxuICAgICAgICAgICAgdmlzaWJsZVJvd1N0b3BJbmRleFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBvblNjcm9sbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgICBzY3JvbGxMZWZ0LFxuICAgICAgICAgIHNjcm9sbFRvcCxcbiAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQsXG4gICAgICAgICAgdmVydGljYWxTY3JvbGxEaXJlY3Rpb24sXG4gICAgICAgIH0gPSB0aGlzLnN0YXRlO1xuICAgICAgICB0aGlzLl9jYWxsT25TY3JvbGwoXG4gICAgICAgICAgc2Nyb2xsTGVmdCxcbiAgICAgICAgICBzY3JvbGxUb3AsXG4gICAgICAgICAgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgICB2ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWRcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBMYXppbHkgY3JlYXRlIGFuZCBjYWNoZSBpdGVtIHN0eWxlcyB3aGlsZSBzY3JvbGxpbmcsXG4gICAgLy8gU28gdGhhdCBwdXJlIGNvbXBvbmVudCBzQ1Ugd2lsbCBwcmV2ZW50IHJlLXJlbmRlcnMuXG4gICAgLy8gV2UgbWFpbnRhaW4gdGhpcyBjYWNoZSwgYW5kIHBhc3MgYSBzdHlsZSBwcm9wIHJhdGhlciB0aGFuIGluZGV4LFxuICAgIC8vIFNvIHRoYXQgTGlzdCBjYW4gY2xlYXIgY2FjaGVkIHN0eWxlcyBhbmQgZm9yY2UgaXRlbSByZS1yZW5kZXIgaWYgbmVjZXNzYXJ5LlxuICAgIF9nZXRJdGVtU3R5bGU6IChyb3dJbmRleDogbnVtYmVyLCBjb2x1bW5JbmRleDogbnVtYmVyKSA9PiBPYmplY3Q7XG4gICAgX2dldEl0ZW1TdHlsZSA9IChyb3dJbmRleDogbnVtYmVyLCBjb2x1bW5JbmRleDogbnVtYmVyKTogT2JqZWN0ID0+IHtcbiAgICAgIGNvbnN0IHsgY29sdW1uV2lkdGgsIGRpcmVjdGlvbiwgcm93SGVpZ2h0IH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICBjb25zdCBpdGVtU3R5bGVDYWNoZSA9IHRoaXMuX2dldEl0ZW1TdHlsZUNhY2hlKFxuICAgICAgICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlICYmIGNvbHVtbldpZHRoLFxuICAgICAgICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlICYmIGRpcmVjdGlvbixcbiAgICAgICAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSAmJiByb3dIZWlnaHRcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IGtleSA9IGAke3Jvd0luZGV4fToke2NvbHVtbkluZGV4fWA7XG5cbiAgICAgIGxldCBzdHlsZTtcbiAgICAgIGlmIChpdGVtU3R5bGVDYWNoZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIHN0eWxlID0gaXRlbVN0eWxlQ2FjaGVba2V5XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IGdldENvbHVtbk9mZnNldChcbiAgICAgICAgICB0aGlzLnByb3BzLFxuICAgICAgICAgIGNvbHVtbkluZGV4LFxuICAgICAgICAgIHRoaXMuX2luc3RhbmNlUHJvcHNcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgaXNSdGwgPSBkaXJlY3Rpb24gPT09ICdydGwnO1xuICAgICAgICBpdGVtU3R5bGVDYWNoZVtrZXldID0gc3R5bGUgPSB7XG4gICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgbGVmdDogaXNSdGwgPyB1bmRlZmluZWQgOiBvZmZzZXQsXG4gICAgICAgICAgcmlnaHQ6IGlzUnRsID8gb2Zmc2V0IDogdW5kZWZpbmVkLFxuICAgICAgICAgIHRvcDogZ2V0Um93T2Zmc2V0KHRoaXMucHJvcHMsIHJvd0luZGV4LCB0aGlzLl9pbnN0YW5jZVByb3BzKSxcbiAgICAgICAgICBoZWlnaHQ6IGdldFJvd0hlaWdodCh0aGlzLnByb3BzLCByb3dJbmRleCwgdGhpcy5faW5zdGFuY2VQcm9wcyksXG4gICAgICAgICAgd2lkdGg6IGdldENvbHVtbldpZHRoKHRoaXMucHJvcHMsIGNvbHVtbkluZGV4LCB0aGlzLl9pbnN0YW5jZVByb3BzKSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHN0eWxlO1xuICAgIH07XG5cbiAgICBfZ2V0SXRlbVN0eWxlQ2FjaGU6IChfOiBhbnksIF9fOiBhbnksIF9fXzogYW55KSA9PiBJdGVtU3R5bGVDYWNoZTtcbiAgICBfZ2V0SXRlbVN0eWxlQ2FjaGUgPSBtZW1vaXplT25lKChfOiBhbnksIF9fOiBhbnksIF9fXzogYW55KSA9PiAoe30pKTtcblxuICAgIF9nZXRIb3Jpem9udGFsUmFuZ2VUb1JlbmRlcigpOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGNvbHVtbkNvdW50LFxuICAgICAgICBvdmVyc2NhbkNvbHVtbkNvdW50LFxuICAgICAgICBvdmVyc2NhbkNvbHVtbnNDb3VudCxcbiAgICAgICAgb3ZlcnNjYW5Db3VudCxcbiAgICAgICAgcm93Q291bnQsXG4gICAgICB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IHsgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbiwgaXNTY3JvbGxpbmcsIHNjcm9sbExlZnQgfSA9IHRoaXMuc3RhdGU7XG5cbiAgICAgIGNvbnN0IG92ZXJzY2FuQ291bnRSZXNvbHZlZDogbnVtYmVyID1cbiAgICAgICAgb3ZlcnNjYW5Db2x1bW5Db3VudCB8fCBvdmVyc2NhbkNvbHVtbnNDb3VudCB8fCBvdmVyc2NhbkNvdW50IHx8IDE7XG5cbiAgICAgIGlmIChjb2x1bW5Db3VudCA9PT0gMCB8fCByb3dDb3VudCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gWzAsIDAsIDAsIDBdO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzdGFydEluZGV4ID0gZ2V0Q29sdW1uU3RhcnRJbmRleEZvck9mZnNldChcbiAgICAgICAgdGhpcy5wcm9wcyxcbiAgICAgICAgc2Nyb2xsTGVmdCxcbiAgICAgICAgdGhpcy5faW5zdGFuY2VQcm9wc1xuICAgICAgKTtcbiAgICAgIGNvbnN0IHN0b3BJbmRleCA9IGdldENvbHVtblN0b3BJbmRleEZvclN0YXJ0SW5kZXgoXG4gICAgICAgIHRoaXMucHJvcHMsXG4gICAgICAgIHN0YXJ0SW5kZXgsXG4gICAgICAgIHNjcm9sbExlZnQsXG4gICAgICAgIHRoaXMuX2luc3RhbmNlUHJvcHNcbiAgICAgICk7XG5cbiAgICAgIC8vIE92ZXJzY2FuIGJ5IG9uZSBpdGVtIGluIGVhY2ggZGlyZWN0aW9uIHNvIHRoYXQgdGFiL2ZvY3VzIHdvcmtzLlxuICAgICAgLy8gSWYgdGhlcmUgaXNuJ3QgYXQgbGVhc3Qgb25lIGV4dHJhIGl0ZW0sIHRhYiBsb29wcyBiYWNrIGFyb3VuZC5cbiAgICAgIGNvbnN0IG92ZXJzY2FuQmFja3dhcmQgPVxuICAgICAgICAhaXNTY3JvbGxpbmcgfHwgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbiA9PT0gJ2JhY2t3YXJkJ1xuICAgICAgICAgID8gTWF0aC5tYXgoMSwgb3ZlcnNjYW5Db3VudFJlc29sdmVkKVxuICAgICAgICAgIDogMTtcbiAgICAgIGNvbnN0IG92ZXJzY2FuRm9yd2FyZCA9XG4gICAgICAgICFpc1Njcm9sbGluZyB8fCBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uID09PSAnZm9yd2FyZCdcbiAgICAgICAgICA/IE1hdGgubWF4KDEsIG92ZXJzY2FuQ291bnRSZXNvbHZlZClcbiAgICAgICAgICA6IDE7XG5cbiAgICAgIHJldHVybiBbXG4gICAgICAgIE1hdGgubWF4KDAsIHN0YXJ0SW5kZXggLSBvdmVyc2NhbkJhY2t3YXJkKSxcbiAgICAgICAgTWF0aC5tYXgoMCwgTWF0aC5taW4oY29sdW1uQ291bnQgLSAxLCBzdG9wSW5kZXggKyBvdmVyc2NhbkZvcndhcmQpKSxcbiAgICAgICAgc3RhcnRJbmRleCxcbiAgICAgICAgc3RvcEluZGV4LFxuICAgICAgXTtcbiAgICB9XG5cbiAgICBfZ2V0VmVydGljYWxSYW5nZVRvUmVuZGVyKCk6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY29sdW1uQ291bnQsXG4gICAgICAgIG92ZXJzY2FuQ291bnQsXG4gICAgICAgIG92ZXJzY2FuUm93Q291bnQsXG4gICAgICAgIG92ZXJzY2FuUm93c0NvdW50LFxuICAgICAgICByb3dDb3VudCxcbiAgICAgIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgeyBpc1Njcm9sbGluZywgdmVydGljYWxTY3JvbGxEaXJlY3Rpb24sIHNjcm9sbFRvcCB9ID0gdGhpcy5zdGF0ZTtcblxuICAgICAgY29uc3Qgb3ZlcnNjYW5Db3VudFJlc29sdmVkOiBudW1iZXIgPVxuICAgICAgICBvdmVyc2NhblJvd0NvdW50IHx8IG92ZXJzY2FuUm93c0NvdW50IHx8IG92ZXJzY2FuQ291bnQgfHwgMTtcblxuICAgICAgaWYgKGNvbHVtbkNvdW50ID09PSAwIHx8IHJvd0NvdW50ID09PSAwKSB7XG4gICAgICAgIHJldHVybiBbMCwgMCwgMCwgMF07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBnZXRSb3dTdGFydEluZGV4Rm9yT2Zmc2V0KFxuICAgICAgICB0aGlzLnByb3BzLFxuICAgICAgICBzY3JvbGxUb3AsXG4gICAgICAgIHRoaXMuX2luc3RhbmNlUHJvcHNcbiAgICAgICk7XG4gICAgICBjb25zdCBzdG9wSW5kZXggPSBnZXRSb3dTdG9wSW5kZXhGb3JTdGFydEluZGV4KFxuICAgICAgICB0aGlzLnByb3BzLFxuICAgICAgICBzdGFydEluZGV4LFxuICAgICAgICBzY3JvbGxUb3AsXG4gICAgICAgIHRoaXMuX2luc3RhbmNlUHJvcHNcbiAgICAgICk7XG5cbiAgICAgIC8vIE92ZXJzY2FuIGJ5IG9uZSBpdGVtIGluIGVhY2ggZGlyZWN0aW9uIHNvIHRoYXQgdGFiL2ZvY3VzIHdvcmtzLlxuICAgICAgLy8gSWYgdGhlcmUgaXNuJ3QgYXQgbGVhc3Qgb25lIGV4dHJhIGl0ZW0sIHRhYiBsb29wcyBiYWNrIGFyb3VuZC5cbiAgICAgIGNvbnN0IG92ZXJzY2FuQmFja3dhcmQgPVxuICAgICAgICAhaXNTY3JvbGxpbmcgfHwgdmVydGljYWxTY3JvbGxEaXJlY3Rpb24gPT09ICdiYWNrd2FyZCdcbiAgICAgICAgICA/IE1hdGgubWF4KDEsIG92ZXJzY2FuQ291bnRSZXNvbHZlZClcbiAgICAgICAgICA6IDE7XG4gICAgICBjb25zdCBvdmVyc2NhbkZvcndhcmQgPVxuICAgICAgICAhaXNTY3JvbGxpbmcgfHwgdmVydGljYWxTY3JvbGxEaXJlY3Rpb24gPT09ICdmb3J3YXJkJ1xuICAgICAgICAgID8gTWF0aC5tYXgoMSwgb3ZlcnNjYW5Db3VudFJlc29sdmVkKVxuICAgICAgICAgIDogMTtcblxuICAgICAgcmV0dXJuIFtcbiAgICAgICAgTWF0aC5tYXgoMCwgc3RhcnRJbmRleCAtIG92ZXJzY2FuQmFja3dhcmQpLFxuICAgICAgICBNYXRoLm1heCgwLCBNYXRoLm1pbihyb3dDb3VudCAtIDEsIHN0b3BJbmRleCArIG92ZXJzY2FuRm9yd2FyZCkpLFxuICAgICAgICBzdGFydEluZGV4LFxuICAgICAgICBzdG9wSW5kZXgsXG4gICAgICBdO1xuICAgIH1cblxuICAgIF9vblNjcm9sbCA9IChldmVudDogU2Nyb2xsRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY2xpZW50SGVpZ2h0LFxuICAgICAgICBjbGllbnRXaWR0aCxcbiAgICAgICAgc2Nyb2xsTGVmdCxcbiAgICAgICAgc2Nyb2xsVG9wLFxuICAgICAgICBzY3JvbGxIZWlnaHQsXG4gICAgICAgIHNjcm9sbFdpZHRoLFxuICAgICAgfSA9IGV2ZW50LmN1cnJlbnRUYXJnZXQ7XG4gICAgICB0aGlzLnNldFN0YXRlKHByZXZTdGF0ZSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBwcmV2U3RhdGUuc2Nyb2xsTGVmdCA9PT0gc2Nyb2xsTGVmdCAmJlxuICAgICAgICAgIHByZXZTdGF0ZS5zY3JvbGxUb3AgPT09IHNjcm9sbFRvcFxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBTY3JvbGwgcG9zaXRpb24gbWF5IGhhdmUgYmVlbiB1cGRhdGVkIGJ5IGNETS9jRFUsXG4gICAgICAgICAgLy8gSW4gd2hpY2ggY2FzZSB3ZSBkb24ndCBuZWVkIHRvIHRyaWdnZXIgYW5vdGhlciByZW5kZXIsXG4gICAgICAgICAgLy8gQW5kIHdlIGRvbid0IHdhbnQgdG8gdXBkYXRlIHN0YXRlLmlzU2Nyb2xsaW5nLlxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeyBkaXJlY3Rpb24gfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgICAgLy8gVFJJQ0tZIEFjY29yZGluZyB0byB0aGUgc3BlYywgc2Nyb2xsTGVmdCBzaG91bGQgYmUgbmVnYXRpdmUgZm9yIFJUTCBhbGlnbmVkIGVsZW1lbnRzLlxuICAgICAgICAvLyBUaGlzIGlzIG5vdCB0aGUgY2FzZSBmb3IgYWxsIGJyb3dzZXJzIHRob3VnaCAoZS5nLiBDaHJvbWUgcmVwb3J0cyB2YWx1ZXMgYXMgcG9zaXRpdmUsIG1lYXN1cmVkIHJlbGF0aXZlIHRvIHRoZSBsZWZ0KS5cbiAgICAgICAgLy8gSXQncyBhbHNvIGVhc2llciBmb3IgdGhpcyBjb21wb25lbnQgaWYgd2UgY29udmVydCBvZmZzZXRzIHRvIHRoZSBzYW1lIGZvcm1hdCBhcyB0aGV5IHdvdWxkIGJlIGluIGZvciBsdHIuXG4gICAgICAgIC8vIFNvIHRoZSBzaW1wbGVzdCBzb2x1dGlvbiBpcyB0byBkZXRlcm1pbmUgd2hpY2ggYnJvd3NlciBiZWhhdmlvciB3ZSdyZSBkZWFsaW5nIHdpdGgsIGFuZCBjb252ZXJ0IGJhc2VkIG9uIGl0LlxuICAgICAgICBsZXQgY2FsY3VsYXRlZFNjcm9sbExlZnQgPSBzY3JvbGxMZWZ0O1xuICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAncnRsJykge1xuICAgICAgICAgIHN3aXRjaCAoZ2V0UlRMT2Zmc2V0VHlwZSgpKSB7XG4gICAgICAgICAgICBjYXNlICduZWdhdGl2ZSc6XG4gICAgICAgICAgICAgIGNhbGN1bGF0ZWRTY3JvbGxMZWZ0ID0gLXNjcm9sbExlZnQ7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncG9zaXRpdmUtZGVzY2VuZGluZyc6XG4gICAgICAgICAgICAgIGNhbGN1bGF0ZWRTY3JvbGxMZWZ0ID0gc2Nyb2xsV2lkdGggLSBjbGllbnRXaWR0aCAtIHNjcm9sbExlZnQ7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFByZXZlbnQgU2FmYXJpJ3MgZWxhc3RpYyBzY3JvbGxpbmcgZnJvbSBjYXVzaW5nIHZpc3VhbCBzaGFraW5nIHdoZW4gc2Nyb2xsaW5nIHBhc3QgYm91bmRzLlxuICAgICAgICBjYWxjdWxhdGVkU2Nyb2xsTGVmdCA9IE1hdGgubWF4KFxuICAgICAgICAgIDAsXG4gICAgICAgICAgTWF0aC5taW4oY2FsY3VsYXRlZFNjcm9sbExlZnQsIHNjcm9sbFdpZHRoIC0gY2xpZW50V2lkdGgpXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGNhbGN1bGF0ZWRTY3JvbGxUb3AgPSBNYXRoLm1heChcbiAgICAgICAgICAwLFxuICAgICAgICAgIE1hdGgubWluKHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0IC0gY2xpZW50SGVpZ2h0KVxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaXNTY3JvbGxpbmc6IHRydWUsXG4gICAgICAgICAgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbjpcbiAgICAgICAgICAgIHByZXZTdGF0ZS5zY3JvbGxMZWZ0IDwgc2Nyb2xsTGVmdCA/ICdmb3J3YXJkJyA6ICdiYWNrd2FyZCcsXG4gICAgICAgICAgc2Nyb2xsTGVmdDogY2FsY3VsYXRlZFNjcm9sbExlZnQsXG4gICAgICAgICAgc2Nyb2xsVG9wOiBjYWxjdWxhdGVkU2Nyb2xsVG9wLFxuICAgICAgICAgIHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uOlxuICAgICAgICAgICAgcHJldlN0YXRlLnNjcm9sbFRvcCA8IHNjcm9sbFRvcCA/ICdmb3J3YXJkJyA6ICdiYWNrd2FyZCcsXG4gICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICAgIH0sIHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQpO1xuICAgIH07XG5cbiAgICBfb3V0ZXJSZWZTZXR0ZXIgPSAocmVmOiBhbnkpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IHsgb3V0ZXJSZWYgfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgIHRoaXMuX291dGVyUmVmID0gKChyZWY6IGFueSk6IEhUTUxEaXZFbGVtZW50KTtcblxuICAgICAgaWYgKHR5cGVvZiBvdXRlclJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBvdXRlclJlZihyZWYpO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgb3V0ZXJSZWYgIT0gbnVsbCAmJlxuICAgICAgICB0eXBlb2Ygb3V0ZXJSZWYgPT09ICdvYmplY3QnICYmXG4gICAgICAgIG91dGVyUmVmLmhhc093blByb3BlcnR5KCdjdXJyZW50JylcbiAgICAgICkge1xuICAgICAgICBvdXRlclJlZi5jdXJyZW50ID0gcmVmO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfcmVzZXRJc1Njcm9sbGluZ0RlYm91bmNlZCA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkICE9PSBudWxsKSB7XG4gICAgICAgIGNhbmNlbFRpbWVvdXQodGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgPSByZXF1ZXN0VGltZW91dChcbiAgICAgICAgdGhpcy5fcmVzZXRJc1Njcm9sbGluZyxcbiAgICAgICAgSVNfU0NST0xMSU5HX0RFQk9VTkNFX0lOVEVSVkFMXG4gICAgICApO1xuICAgIH07XG5cbiAgICBfcmVzZXRJc1Njcm9sbGluZyA9ICgpID0+IHtcbiAgICAgIHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgPSBudWxsO1xuXG4gICAgICB0aGlzLnNldFN0YXRlKHsgaXNTY3JvbGxpbmc6IGZhbHNlIH0sICgpID0+IHtcbiAgICAgICAgLy8gQ2xlYXIgc3R5bGUgY2FjaGUgYWZ0ZXIgc3RhdGUgdXBkYXRlIGhhcyBiZWVuIGNvbW1pdHRlZC5cbiAgICAgICAgLy8gVGhpcyB3YXkgd2UgZG9uJ3QgYnJlYWsgcHVyZSBzQ1UgZm9yIGl0ZW1zIHRoYXQgZG9uJ3QgdXNlIGlzU2Nyb2xsaW5nIHBhcmFtLlxuICAgICAgICB0aGlzLl9nZXRJdGVtU3R5bGVDYWNoZSgtMSk7XG4gICAgICB9KTtcbiAgICB9O1xuICB9O1xufVxuXG5jb25zdCB2YWxpZGF0ZVNoYXJlZFByb3BzID0gKFxuICB7XG4gICAgY2hpbGRyZW4sXG4gICAgZGlyZWN0aW9uLFxuICAgIGhlaWdodCxcbiAgICBpbm5lclRhZ05hbWUsXG4gICAgb3V0ZXJUYWdOYW1lLFxuICAgIG92ZXJzY2FuQ29sdW1uc0NvdW50LFxuICAgIG92ZXJzY2FuQ291bnQsXG4gICAgb3ZlcnNjYW5Sb3dzQ291bnQsXG4gICAgd2lkdGgsXG4gIH06IFByb3BzPGFueT4sXG4gIHsgaW5zdGFuY2UgfTogU3RhdGVcbik6IHZvaWQgPT4ge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmICh0eXBlb2Ygb3ZlcnNjYW5Db3VudCA9PT0gJ251bWJlcicpIHtcbiAgICAgIGlmIChkZXZXYXJuaW5nc092ZXJzY2FuQ291bnQgJiYgIWRldldhcm5pbmdzT3ZlcnNjYW5Db3VudC5oYXMoaW5zdGFuY2UpKSB7XG4gICAgICAgIGRldldhcm5pbmdzT3ZlcnNjYW5Db3VudC5hZGQoaW5zdGFuY2UpO1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgJ1RoZSBvdmVyc2NhbkNvdW50IHByb3AgaGFzIGJlZW4gZGVwcmVjYXRlZC4gJyArXG4gICAgICAgICAgICAnUGxlYXNlIHVzZSB0aGUgb3ZlcnNjYW5Db2x1bW5Db3VudCBhbmQgb3ZlcnNjYW5Sb3dDb3VudCBwcm9wcyBpbnN0ZWFkLidcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0eXBlb2Ygb3ZlcnNjYW5Db2x1bW5zQ291bnQgPT09ICdudW1iZXInIHx8XG4gICAgICB0eXBlb2Ygb3ZlcnNjYW5Sb3dzQ291bnQgPT09ICdudW1iZXInXG4gICAgKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGRldldhcm5pbmdzT3ZlcnNjYW5Sb3dzQ29sdW1uc0NvdW50ICYmXG4gICAgICAgICFkZXZXYXJuaW5nc092ZXJzY2FuUm93c0NvbHVtbnNDb3VudC5oYXMoaW5zdGFuY2UpXG4gICAgICApIHtcbiAgICAgICAgZGV2V2FybmluZ3NPdmVyc2NhblJvd3NDb2x1bW5zQ291bnQuYWRkKGluc3RhbmNlKTtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICdUaGUgb3ZlcnNjYW5Db2x1bW5zQ291bnQgYW5kIG92ZXJzY2FuUm93c0NvdW50IHByb3BzIGhhdmUgYmVlbiBkZXByZWNhdGVkLiAnICtcbiAgICAgICAgICAgICdQbGVhc2UgdXNlIHRoZSBvdmVyc2NhbkNvbHVtbkNvdW50IGFuZCBvdmVyc2NhblJvd0NvdW50IHByb3BzIGluc3RlYWQuJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpbm5lclRhZ05hbWUgIT0gbnVsbCB8fCBvdXRlclRhZ05hbWUgIT0gbnVsbCkge1xuICAgICAgaWYgKGRldldhcm5pbmdzVGFnTmFtZSAmJiAhZGV2V2FybmluZ3NUYWdOYW1lLmhhcyhpbnN0YW5jZSkpIHtcbiAgICAgICAgZGV2V2FybmluZ3NUYWdOYW1lLmFkZChpbnN0YW5jZSk7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAnVGhlIGlubmVyVGFnTmFtZSBhbmQgb3V0ZXJUYWdOYW1lIHByb3BzIGhhdmUgYmVlbiBkZXByZWNhdGVkLiAnICtcbiAgICAgICAgICAgICdQbGVhc2UgdXNlIHRoZSBpbm5lckVsZW1lbnRUeXBlIGFuZCBvdXRlckVsZW1lbnRUeXBlIHByb3BzIGluc3RlYWQuJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjaGlsZHJlbiA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgJ0FuIGludmFsaWQgXCJjaGlsZHJlblwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICtcbiAgICAgICAgICAnVmFsdWUgc2hvdWxkIGJlIGEgUmVhY3QgY29tcG9uZW50LiAnICtcbiAgICAgICAgICBgXCIke2NoaWxkcmVuID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGNoaWxkcmVufVwiIHdhcyBzcGVjaWZpZWQuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGRpcmVjdGlvbikge1xuICAgICAgY2FzZSAnbHRyJzpcbiAgICAgIGNhc2UgJ3J0bCc6XG4gICAgICAgIC8vIFZhbGlkIHZhbHVlc1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICdBbiBpbnZhbGlkIFwiZGlyZWN0aW9uXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgK1xuICAgICAgICAgICAgJ1ZhbHVlIHNob3VsZCBiZSBlaXRoZXIgXCJsdHJcIiBvciBcInJ0bFwiLiAnICtcbiAgICAgICAgICAgIGBcIiR7ZGlyZWN0aW9ufVwiIHdhcyBzcGVjaWZpZWQuYFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygd2lkdGggIT09ICdudW1iZXInKSB7XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgJ0FuIGludmFsaWQgXCJ3aWR0aFwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICtcbiAgICAgICAgICAnR3JpZHMgbXVzdCBzcGVjaWZ5IGEgbnVtYmVyIGZvciB3aWR0aC4gJyArXG4gICAgICAgICAgYFwiJHt3aWR0aCA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiB3aWR0aH1cIiB3YXMgc3BlY2lmaWVkLmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBoZWlnaHQgIT09ICdudW1iZXInKSB7XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgJ0FuIGludmFsaWQgXCJoZWlnaHRcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArXG4gICAgICAgICAgJ0dyaWRzIG11c3Qgc3BlY2lmeSBhIG51bWJlciBmb3IgaGVpZ2h0LiAnICtcbiAgICAgICAgICBgXCIke2hlaWdodCA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiBoZWlnaHR9XCIgd2FzIHNwZWNpZmllZC5gXG4gICAgICApO1xuICAgIH1cbiAgfVxufTtcbiIsICIvLyBAZmxvd1xuXG5pbXBvcnQgY3JlYXRlR3JpZENvbXBvbmVudCBmcm9tICcuL2NyZWF0ZUdyaWRDb21wb25lbnQnO1xuXG5pbXBvcnQgdHlwZSB7IFByb3BzLCBTY3JvbGxUb0FsaWduIH0gZnJvbSAnLi9jcmVhdGVHcmlkQ29tcG9uZW50JztcblxuY29uc3QgREVGQVVMVF9FU1RJTUFURURfSVRFTV9TSVpFID0gNTA7XG5cbnR5cGUgVmFyaWFibGVTaXplUHJvcHMgPSB7fFxuICBlc3RpbWF0ZWRDb2x1bW5XaWR0aDogbnVtYmVyLFxuICBlc3RpbWF0ZWRSb3dIZWlnaHQ6IG51bWJlcixcbiAgLi4uUHJvcHM8YW55Pixcbnx9O1xuXG50eXBlIGl0ZW1TaXplR2V0dGVyID0gKGluZGV4OiBudW1iZXIpID0+IG51bWJlcjtcbnR5cGUgSXRlbVR5cGUgPSAnY29sdW1uJyB8ICdyb3cnO1xuXG50eXBlIEl0ZW1NZXRhZGF0YSA9IHt8XG4gIG9mZnNldDogbnVtYmVyLFxuICBzaXplOiBudW1iZXIsXG58fTtcbnR5cGUgSXRlbU1ldGFkYXRhTWFwID0geyBbaW5kZXg6IG51bWJlcl06IEl0ZW1NZXRhZGF0YSB9O1xudHlwZSBJbnN0YW5jZVByb3BzID0ge3xcbiAgY29sdW1uTWV0YWRhdGFNYXA6IEl0ZW1NZXRhZGF0YU1hcCxcbiAgZXN0aW1hdGVkQ29sdW1uV2lkdGg6IG51bWJlcixcbiAgZXN0aW1hdGVkUm93SGVpZ2h0OiBudW1iZXIsXG4gIGxhc3RNZWFzdXJlZENvbHVtbkluZGV4OiBudW1iZXIsXG4gIGxhc3RNZWFzdXJlZFJvd0luZGV4OiBudW1iZXIsXG4gIHJvd01ldGFkYXRhTWFwOiBJdGVtTWV0YWRhdGFNYXAsXG58fTtcblxuY29uc3QgZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQgPSAoXG4gIHsgcm93Q291bnQgfTogUHJvcHM8YW55PixcbiAgeyByb3dNZXRhZGF0YU1hcCwgZXN0aW1hdGVkUm93SGVpZ2h0LCBsYXN0TWVhc3VyZWRSb3dJbmRleCB9OiBJbnN0YW5jZVByb3BzXG4pID0+IHtcbiAgbGV0IHRvdGFsU2l6ZU9mTWVhc3VyZWRSb3dzID0gMDtcblxuICAvLyBFZGdlIGNhc2UgY2hlY2sgZm9yIHdoZW4gdGhlIG51bWJlciBvZiBpdGVtcyBkZWNyZWFzZXMgd2hpbGUgYSBzY3JvbGwgaXMgaW4gcHJvZ3Jlc3MuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9idmF1Z2huL3JlYWN0LXdpbmRvdy9wdWxsLzEzOFxuICBpZiAobGFzdE1lYXN1cmVkUm93SW5kZXggPj0gcm93Q291bnQpIHtcbiAgICBsYXN0TWVhc3VyZWRSb3dJbmRleCA9IHJvd0NvdW50IC0gMTtcbiAgfVxuXG4gIGlmIChsYXN0TWVhc3VyZWRSb3dJbmRleCA+PSAwKSB7XG4gICAgY29uc3QgaXRlbU1ldGFkYXRhID0gcm93TWV0YWRhdGFNYXBbbGFzdE1lYXN1cmVkUm93SW5kZXhdO1xuICAgIHRvdGFsU2l6ZU9mTWVhc3VyZWRSb3dzID0gaXRlbU1ldGFkYXRhLm9mZnNldCArIGl0ZW1NZXRhZGF0YS5zaXplO1xuICB9XG5cbiAgY29uc3QgbnVtVW5tZWFzdXJlZEl0ZW1zID0gcm93Q291bnQgLSBsYXN0TWVhc3VyZWRSb3dJbmRleCAtIDE7XG4gIGNvbnN0IHRvdGFsU2l6ZU9mVW5tZWFzdXJlZEl0ZW1zID0gbnVtVW5tZWFzdXJlZEl0ZW1zICogZXN0aW1hdGVkUm93SGVpZ2h0O1xuXG4gIHJldHVybiB0b3RhbFNpemVPZk1lYXN1cmVkUm93cyArIHRvdGFsU2l6ZU9mVW5tZWFzdXJlZEl0ZW1zO1xufTtcblxuY29uc3QgZ2V0RXN0aW1hdGVkVG90YWxXaWR0aCA9IChcbiAgeyBjb2x1bW5Db3VudCB9OiBQcm9wczxhbnk+LFxuICB7XG4gICAgY29sdW1uTWV0YWRhdGFNYXAsXG4gICAgZXN0aW1hdGVkQ29sdW1uV2lkdGgsXG4gICAgbGFzdE1lYXN1cmVkQ29sdW1uSW5kZXgsXG4gIH06IEluc3RhbmNlUHJvcHNcbikgPT4ge1xuICBsZXQgdG90YWxTaXplT2ZNZWFzdXJlZFJvd3MgPSAwO1xuXG4gIC8vIEVkZ2UgY2FzZSBjaGVjayBmb3Igd2hlbiB0aGUgbnVtYmVyIG9mIGl0ZW1zIGRlY3JlYXNlcyB3aGlsZSBhIHNjcm9sbCBpcyBpbiBwcm9ncmVzcy5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2J2YXVnaG4vcmVhY3Qtd2luZG93L3B1bGwvMTM4XG4gIGlmIChsYXN0TWVhc3VyZWRDb2x1bW5JbmRleCA+PSBjb2x1bW5Db3VudCkge1xuICAgIGxhc3RNZWFzdXJlZENvbHVtbkluZGV4ID0gY29sdW1uQ291bnQgLSAxO1xuICB9XG5cbiAgaWYgKGxhc3RNZWFzdXJlZENvbHVtbkluZGV4ID49IDApIHtcbiAgICBjb25zdCBpdGVtTWV0YWRhdGEgPSBjb2x1bW5NZXRhZGF0YU1hcFtsYXN0TWVhc3VyZWRDb2x1bW5JbmRleF07XG4gICAgdG90YWxTaXplT2ZNZWFzdXJlZFJvd3MgPSBpdGVtTWV0YWRhdGEub2Zmc2V0ICsgaXRlbU1ldGFkYXRhLnNpemU7XG4gIH1cblxuICBjb25zdCBudW1Vbm1lYXN1cmVkSXRlbXMgPSBjb2x1bW5Db3VudCAtIGxhc3RNZWFzdXJlZENvbHVtbkluZGV4IC0gMTtcbiAgY29uc3QgdG90YWxTaXplT2ZVbm1lYXN1cmVkSXRlbXMgPSBudW1Vbm1lYXN1cmVkSXRlbXMgKiBlc3RpbWF0ZWRDb2x1bW5XaWR0aDtcblxuICByZXR1cm4gdG90YWxTaXplT2ZNZWFzdXJlZFJvd3MgKyB0b3RhbFNpemVPZlVubWVhc3VyZWRJdGVtcztcbn07XG5cbmNvbnN0IGdldEl0ZW1NZXRhZGF0YSA9IChcbiAgaXRlbVR5cGU6IEl0ZW1UeXBlLFxuICBwcm9wczogUHJvcHM8YW55PixcbiAgaW5kZXg6IG51bWJlcixcbiAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wc1xuKTogSXRlbU1ldGFkYXRhID0+IHtcbiAgbGV0IGl0ZW1NZXRhZGF0YU1hcCwgaXRlbVNpemUsIGxhc3RNZWFzdXJlZEluZGV4O1xuICBpZiAoaXRlbVR5cGUgPT09ICdjb2x1bW4nKSB7XG4gICAgaXRlbU1ldGFkYXRhTWFwID0gaW5zdGFuY2VQcm9wcy5jb2x1bW5NZXRhZGF0YU1hcDtcbiAgICBpdGVtU2l6ZSA9ICgocHJvcHMuY29sdW1uV2lkdGg6IGFueSk6IGl0ZW1TaXplR2V0dGVyKTtcbiAgICBsYXN0TWVhc3VyZWRJbmRleCA9IGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkQ29sdW1uSW5kZXg7XG4gIH0gZWxzZSB7XG4gICAgaXRlbU1ldGFkYXRhTWFwID0gaW5zdGFuY2VQcm9wcy5yb3dNZXRhZGF0YU1hcDtcbiAgICBpdGVtU2l6ZSA9ICgocHJvcHMucm93SGVpZ2h0OiBhbnkpOiBpdGVtU2l6ZUdldHRlcik7XG4gICAgbGFzdE1lYXN1cmVkSW5kZXggPSBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZFJvd0luZGV4O1xuICB9XG5cbiAgaWYgKGluZGV4ID4gbGFzdE1lYXN1cmVkSW5kZXgpIHtcbiAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICBpZiAobGFzdE1lYXN1cmVkSW5kZXggPj0gMCkge1xuICAgICAgY29uc3QgaXRlbU1ldGFkYXRhID0gaXRlbU1ldGFkYXRhTWFwW2xhc3RNZWFzdXJlZEluZGV4XTtcbiAgICAgIG9mZnNldCA9IGl0ZW1NZXRhZGF0YS5vZmZzZXQgKyBpdGVtTWV0YWRhdGEuc2l6ZTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gbGFzdE1lYXN1cmVkSW5kZXggKyAxOyBpIDw9IGluZGV4OyBpKyspIHtcbiAgICAgIGxldCBzaXplID0gaXRlbVNpemUoaSk7XG5cbiAgICAgIGl0ZW1NZXRhZGF0YU1hcFtpXSA9IHtcbiAgICAgICAgb2Zmc2V0LFxuICAgICAgICBzaXplLFxuICAgICAgfTtcblxuICAgICAgb2Zmc2V0ICs9IHNpemU7XG4gICAgfVxuXG4gICAgaWYgKGl0ZW1UeXBlID09PSAnY29sdW1uJykge1xuICAgICAgaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRDb2x1bW5JbmRleCA9IGluZGV4O1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZFJvd0luZGV4ID0gaW5kZXg7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGl0ZW1NZXRhZGF0YU1hcFtpbmRleF07XG59O1xuXG5jb25zdCBmaW5kTmVhcmVzdEl0ZW0gPSAoXG4gIGl0ZW1UeXBlOiBJdGVtVHlwZSxcbiAgcHJvcHM6IFByb3BzPGFueT4sXG4gIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHMsXG4gIG9mZnNldDogbnVtYmVyXG4pID0+IHtcbiAgbGV0IGl0ZW1NZXRhZGF0YU1hcCwgbGFzdE1lYXN1cmVkSW5kZXg7XG4gIGlmIChpdGVtVHlwZSA9PT0gJ2NvbHVtbicpIHtcbiAgICBpdGVtTWV0YWRhdGFNYXAgPSBpbnN0YW5jZVByb3BzLmNvbHVtbk1ldGFkYXRhTWFwO1xuICAgIGxhc3RNZWFzdXJlZEluZGV4ID0gaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRDb2x1bW5JbmRleDtcbiAgfSBlbHNlIHtcbiAgICBpdGVtTWV0YWRhdGFNYXAgPSBpbnN0YW5jZVByb3BzLnJvd01ldGFkYXRhTWFwO1xuICAgIGxhc3RNZWFzdXJlZEluZGV4ID0gaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRSb3dJbmRleDtcbiAgfVxuXG4gIGNvbnN0IGxhc3RNZWFzdXJlZEl0ZW1PZmZzZXQgPVxuICAgIGxhc3RNZWFzdXJlZEluZGV4ID4gMCA/IGl0ZW1NZXRhZGF0YU1hcFtsYXN0TWVhc3VyZWRJbmRleF0ub2Zmc2V0IDogMDtcblxuICBpZiAobGFzdE1lYXN1cmVkSXRlbU9mZnNldCA+PSBvZmZzZXQpIHtcbiAgICAvLyBJZiB3ZSd2ZSBhbHJlYWR5IG1lYXN1cmVkIGl0ZW1zIHdpdGhpbiB0aGlzIHJhbmdlIGp1c3QgdXNlIGEgYmluYXJ5IHNlYXJjaCBhcyBpdCdzIGZhc3Rlci5cbiAgICByZXR1cm4gZmluZE5lYXJlc3RJdGVtQmluYXJ5U2VhcmNoKFxuICAgICAgaXRlbVR5cGUsXG4gICAgICBwcm9wcyxcbiAgICAgIGluc3RhbmNlUHJvcHMsXG4gICAgICBsYXN0TWVhc3VyZWRJbmRleCxcbiAgICAgIDAsXG4gICAgICBvZmZzZXRcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIC8vIElmIHdlIGhhdmVuJ3QgeWV0IG1lYXN1cmVkIHRoaXMgaGlnaCwgZmFsbGJhY2sgdG8gYW4gZXhwb25lbnRpYWwgc2VhcmNoIHdpdGggYW4gaW5uZXIgYmluYXJ5IHNlYXJjaC5cbiAgICAvLyBUaGUgZXhwb25lbnRpYWwgc2VhcmNoIGF2b2lkcyBwcmUtY29tcHV0aW5nIHNpemVzIGZvciB0aGUgZnVsbCBzZXQgb2YgaXRlbXMgYXMgYSBiaW5hcnkgc2VhcmNoIHdvdWxkLlxuICAgIC8vIFRoZSBvdmVyYWxsIGNvbXBsZXhpdHkgZm9yIHRoaXMgYXBwcm9hY2ggaXMgTyhsb2cgbikuXG4gICAgcmV0dXJuIGZpbmROZWFyZXN0SXRlbUV4cG9uZW50aWFsU2VhcmNoKFxuICAgICAgaXRlbVR5cGUsXG4gICAgICBwcm9wcyxcbiAgICAgIGluc3RhbmNlUHJvcHMsXG4gICAgICBNYXRoLm1heCgwLCBsYXN0TWVhc3VyZWRJbmRleCksXG4gICAgICBvZmZzZXRcbiAgICApO1xuICB9XG59O1xuXG5jb25zdCBmaW5kTmVhcmVzdEl0ZW1CaW5hcnlTZWFyY2ggPSAoXG4gIGl0ZW1UeXBlOiBJdGVtVHlwZSxcbiAgcHJvcHM6IFByb3BzPGFueT4sXG4gIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHMsXG4gIGhpZ2g6IG51bWJlcixcbiAgbG93OiBudW1iZXIsXG4gIG9mZnNldDogbnVtYmVyXG4pOiBudW1iZXIgPT4ge1xuICB3aGlsZSAobG93IDw9IGhpZ2gpIHtcbiAgICBjb25zdCBtaWRkbGUgPSBsb3cgKyBNYXRoLmZsb29yKChoaWdoIC0gbG93KSAvIDIpO1xuICAgIGNvbnN0IGN1cnJlbnRPZmZzZXQgPSBnZXRJdGVtTWV0YWRhdGEoXG4gICAgICBpdGVtVHlwZSxcbiAgICAgIHByb3BzLFxuICAgICAgbWlkZGxlLFxuICAgICAgaW5zdGFuY2VQcm9wc1xuICAgICkub2Zmc2V0O1xuXG4gICAgaWYgKGN1cnJlbnRPZmZzZXQgPT09IG9mZnNldCkge1xuICAgICAgcmV0dXJuIG1pZGRsZTtcbiAgICB9IGVsc2UgaWYgKGN1cnJlbnRPZmZzZXQgPCBvZmZzZXQpIHtcbiAgICAgIGxvdyA9IG1pZGRsZSArIDE7XG4gICAgfSBlbHNlIGlmIChjdXJyZW50T2Zmc2V0ID4gb2Zmc2V0KSB7XG4gICAgICBoaWdoID0gbWlkZGxlIC0gMTtcbiAgICB9XG4gIH1cblxuICBpZiAobG93ID4gMCkge1xuICAgIHJldHVybiBsb3cgLSAxO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAwO1xuICB9XG59O1xuXG5jb25zdCBmaW5kTmVhcmVzdEl0ZW1FeHBvbmVudGlhbFNlYXJjaCA9IChcbiAgaXRlbVR5cGU6IEl0ZW1UeXBlLFxuICBwcm9wczogUHJvcHM8YW55PixcbiAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wcyxcbiAgaW5kZXg6IG51bWJlcixcbiAgb2Zmc2V0OiBudW1iZXJcbik6IG51bWJlciA9PiB7XG4gIGNvbnN0IGl0ZW1Db3VudCA9IGl0ZW1UeXBlID09PSAnY29sdW1uJyA/IHByb3BzLmNvbHVtbkNvdW50IDogcHJvcHMucm93Q291bnQ7XG4gIGxldCBpbnRlcnZhbCA9IDE7XG5cbiAgd2hpbGUgKFxuICAgIGluZGV4IDwgaXRlbUNvdW50ICYmXG4gICAgZ2V0SXRlbU1ldGFkYXRhKGl0ZW1UeXBlLCBwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpLm9mZnNldCA8IG9mZnNldFxuICApIHtcbiAgICBpbmRleCArPSBpbnRlcnZhbDtcbiAgICBpbnRlcnZhbCAqPSAyO1xuICB9XG5cbiAgcmV0dXJuIGZpbmROZWFyZXN0SXRlbUJpbmFyeVNlYXJjaChcbiAgICBpdGVtVHlwZSxcbiAgICBwcm9wcyxcbiAgICBpbnN0YW5jZVByb3BzLFxuICAgIE1hdGgubWluKGluZGV4LCBpdGVtQ291bnQgLSAxKSxcbiAgICBNYXRoLmZsb29yKGluZGV4IC8gMiksXG4gICAgb2Zmc2V0XG4gICk7XG59O1xuXG5jb25zdCBnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudCA9IChcbiAgaXRlbVR5cGU6IEl0ZW1UeXBlLFxuICBwcm9wczogUHJvcHM8YW55PixcbiAgaW5kZXg6IG51bWJlcixcbiAgYWxpZ246IFNjcm9sbFRvQWxpZ24sXG4gIHNjcm9sbE9mZnNldDogbnVtYmVyLFxuICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzLFxuICBzY3JvbGxiYXJTaXplOiBudW1iZXJcbik6IG51bWJlciA9PiB7XG4gIGNvbnN0IHNpemUgPSBpdGVtVHlwZSA9PT0gJ2NvbHVtbicgPyBwcm9wcy53aWR0aCA6IHByb3BzLmhlaWdodDtcbiAgY29uc3QgaXRlbU1ldGFkYXRhID0gZ2V0SXRlbU1ldGFkYXRhKGl0ZW1UeXBlLCBwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpO1xuXG4gIC8vIEdldCBlc3RpbWF0ZWQgdG90YWwgc2l6ZSBhZnRlciBJdGVtTWV0YWRhdGEgaXMgY29tcHV0ZWQsXG4gIC8vIFRvIGVuc3VyZSBpdCByZWZsZWN0cyBhY3R1YWwgbWVhc3VyZW1lbnRzIGluc3RlYWQgb2YganVzdCBlc3RpbWF0ZXMuXG4gIGNvbnN0IGVzdGltYXRlZFRvdGFsU2l6ZSA9XG4gICAgaXRlbVR5cGUgPT09ICdjb2x1bW4nXG4gICAgICA/IGdldEVzdGltYXRlZFRvdGFsV2lkdGgocHJvcHMsIGluc3RhbmNlUHJvcHMpXG4gICAgICA6IGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0KHByb3BzLCBpbnN0YW5jZVByb3BzKTtcblxuICBjb25zdCBtYXhPZmZzZXQgPSBNYXRoLm1heChcbiAgICAwLFxuICAgIE1hdGgubWluKGVzdGltYXRlZFRvdGFsU2l6ZSAtIHNpemUsIGl0ZW1NZXRhZGF0YS5vZmZzZXQpXG4gICk7XG4gIGNvbnN0IG1pbk9mZnNldCA9IE1hdGgubWF4KFxuICAgIDAsXG4gICAgaXRlbU1ldGFkYXRhLm9mZnNldCAtIHNpemUgKyBzY3JvbGxiYXJTaXplICsgaXRlbU1ldGFkYXRhLnNpemVcbiAgKTtcblxuICBpZiAoYWxpZ24gPT09ICdzbWFydCcpIHtcbiAgICBpZiAoc2Nyb2xsT2Zmc2V0ID49IG1pbk9mZnNldCAtIHNpemUgJiYgc2Nyb2xsT2Zmc2V0IDw9IG1heE9mZnNldCArIHNpemUpIHtcbiAgICAgIGFsaWduID0gJ2F1dG8nO1xuICAgIH0gZWxzZSB7XG4gICAgICBhbGlnbiA9ICdjZW50ZXInO1xuICAgIH1cbiAgfVxuXG4gIHN3aXRjaCAoYWxpZ24pIHtcbiAgICBjYXNlICdzdGFydCc6XG4gICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuICAgIGNhc2UgJ2VuZCc6XG4gICAgICByZXR1cm4gbWluT2Zmc2V0O1xuICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgICByZXR1cm4gTWF0aC5yb3VuZChtaW5PZmZzZXQgKyAobWF4T2Zmc2V0IC0gbWluT2Zmc2V0KSAvIDIpO1xuICAgIGNhc2UgJ2F1dG8nOlxuICAgIGRlZmF1bHQ6XG4gICAgICBpZiAoc2Nyb2xsT2Zmc2V0ID49IG1pbk9mZnNldCAmJiBzY3JvbGxPZmZzZXQgPD0gbWF4T2Zmc2V0KSB7XG4gICAgICAgIHJldHVybiBzY3JvbGxPZmZzZXQ7XG4gICAgICB9IGVsc2UgaWYgKG1pbk9mZnNldCA+IG1heE9mZnNldCkge1xuICAgICAgICAvLyBCZWNhdXNlIHdlIG9ubHkgdGFrZSBpbnRvIGFjY291bnQgdGhlIHNjcm9sbGJhciBzaXplIHdoZW4gY2FsY3VsYXRpbmcgbWluT2Zmc2V0XG4gICAgICAgIC8vIHRoaXMgdmFsdWUgY2FuIGJlIGxhcmdlciB0aGFuIG1heE9mZnNldCB3aGVuIGF0IHRoZSBlbmQgb2YgdGhlIGxpc3RcbiAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcbiAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsT2Zmc2V0IDwgbWluT2Zmc2V0KSB7XG4gICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuICAgICAgfVxuICB9XG59O1xuXG5jb25zdCBWYXJpYWJsZVNpemVHcmlkID0gY3JlYXRlR3JpZENvbXBvbmVudCh7XG4gIGdldENvbHVtbk9mZnNldDogKFxuICAgIHByb3BzOiBQcm9wczxhbnk+LFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wc1xuICApOiBudW1iZXIgPT4gZ2V0SXRlbU1ldGFkYXRhKCdjb2x1bW4nLCBwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpLm9mZnNldCxcblxuICBnZXRDb2x1bW5TdGFydEluZGV4Rm9yT2Zmc2V0OiAoXG4gICAgcHJvcHM6IFByb3BzPGFueT4sXG4gICAgc2Nyb2xsTGVmdDogbnVtYmVyLFxuICAgIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHNcbiAgKTogbnVtYmVyID0+IGZpbmROZWFyZXN0SXRlbSgnY29sdW1uJywgcHJvcHMsIGluc3RhbmNlUHJvcHMsIHNjcm9sbExlZnQpLFxuXG4gIGdldENvbHVtblN0b3BJbmRleEZvclN0YXJ0SW5kZXg6IChcbiAgICBwcm9wczogUHJvcHM8YW55PixcbiAgICBzdGFydEluZGV4OiBudW1iZXIsXG4gICAgc2Nyb2xsTGVmdDogbnVtYmVyLFxuICAgIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHNcbiAgKTogbnVtYmVyID0+IHtcbiAgICBjb25zdCB7IGNvbHVtbkNvdW50LCB3aWR0aCB9ID0gcHJvcHM7XG5cbiAgICBjb25zdCBpdGVtTWV0YWRhdGEgPSBnZXRJdGVtTWV0YWRhdGEoXG4gICAgICAnY29sdW1uJyxcbiAgICAgIHByb3BzLFxuICAgICAgc3RhcnRJbmRleCxcbiAgICAgIGluc3RhbmNlUHJvcHNcbiAgICApO1xuICAgIGNvbnN0IG1heE9mZnNldCA9IHNjcm9sbExlZnQgKyB3aWR0aDtcblxuICAgIGxldCBvZmZzZXQgPSBpdGVtTWV0YWRhdGEub2Zmc2V0ICsgaXRlbU1ldGFkYXRhLnNpemU7XG4gICAgbGV0IHN0b3BJbmRleCA9IHN0YXJ0SW5kZXg7XG5cbiAgICB3aGlsZSAoc3RvcEluZGV4IDwgY29sdW1uQ291bnQgLSAxICYmIG9mZnNldCA8IG1heE9mZnNldCkge1xuICAgICAgc3RvcEluZGV4Kys7XG4gICAgICBvZmZzZXQgKz0gZ2V0SXRlbU1ldGFkYXRhKCdjb2x1bW4nLCBwcm9wcywgc3RvcEluZGV4LCBpbnN0YW5jZVByb3BzKS5zaXplO1xuICAgIH1cblxuICAgIHJldHVybiBzdG9wSW5kZXg7XG4gIH0sXG5cbiAgZ2V0Q29sdW1uV2lkdGg6IChcbiAgICBwcm9wczogUHJvcHM8YW55PixcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHNcbiAgKTogbnVtYmVyID0+IGluc3RhbmNlUHJvcHMuY29sdW1uTWV0YWRhdGFNYXBbaW5kZXhdLnNpemUsXG5cbiAgZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQsXG4gIGdldEVzdGltYXRlZFRvdGFsV2lkdGgsXG5cbiAgZ2V0T2Zmc2V0Rm9yQ29sdW1uQW5kQWxpZ25tZW50OiAoXG4gICAgcHJvcHM6IFByb3BzPGFueT4sXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBhbGlnbjogU2Nyb2xsVG9BbGlnbixcbiAgICBzY3JvbGxPZmZzZXQ6IG51bWJlcixcbiAgICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzLFxuICAgIHNjcm9sbGJhclNpemU6IG51bWJlclxuICApOiBudW1iZXIgPT5cbiAgICBnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudChcbiAgICAgICdjb2x1bW4nLFxuICAgICAgcHJvcHMsXG4gICAgICBpbmRleCxcbiAgICAgIGFsaWduLFxuICAgICAgc2Nyb2xsT2Zmc2V0LFxuICAgICAgaW5zdGFuY2VQcm9wcyxcbiAgICAgIHNjcm9sbGJhclNpemVcbiAgICApLFxuXG4gIGdldE9mZnNldEZvclJvd0FuZEFsaWdubWVudDogKFxuICAgIHByb3BzOiBQcm9wczxhbnk+LFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgYWxpZ246IFNjcm9sbFRvQWxpZ24sXG4gICAgc2Nyb2xsT2Zmc2V0OiBudW1iZXIsXG4gICAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wcyxcbiAgICBzY3JvbGxiYXJTaXplOiBudW1iZXJcbiAgKTogbnVtYmVyID0+XG4gICAgZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQoXG4gICAgICAncm93JyxcbiAgICAgIHByb3BzLFxuICAgICAgaW5kZXgsXG4gICAgICBhbGlnbixcbiAgICAgIHNjcm9sbE9mZnNldCxcbiAgICAgIGluc3RhbmNlUHJvcHMsXG4gICAgICBzY3JvbGxiYXJTaXplXG4gICAgKSxcblxuICBnZXRSb3dPZmZzZXQ6IChcbiAgICBwcm9wczogUHJvcHM8YW55PixcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHNcbiAgKTogbnVtYmVyID0+IGdldEl0ZW1NZXRhZGF0YSgncm93JywgcHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKS5vZmZzZXQsXG5cbiAgZ2V0Um93SGVpZ2h0OiAoXG4gICAgcHJvcHM6IFByb3BzPGFueT4sXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzXG4gICk6IG51bWJlciA9PiBpbnN0YW5jZVByb3BzLnJvd01ldGFkYXRhTWFwW2luZGV4XS5zaXplLFxuXG4gIGdldFJvd1N0YXJ0SW5kZXhGb3JPZmZzZXQ6IChcbiAgICBwcm9wczogUHJvcHM8YW55PixcbiAgICBzY3JvbGxUb3A6IG51bWJlcixcbiAgICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzXG4gICk6IG51bWJlciA9PiBmaW5kTmVhcmVzdEl0ZW0oJ3JvdycsIHByb3BzLCBpbnN0YW5jZVByb3BzLCBzY3JvbGxUb3ApLFxuXG4gIGdldFJvd1N0b3BJbmRleEZvclN0YXJ0SW5kZXg6IChcbiAgICBwcm9wczogUHJvcHM8YW55PixcbiAgICBzdGFydEluZGV4OiBudW1iZXIsXG4gICAgc2Nyb2xsVG9wOiBudW1iZXIsXG4gICAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wc1xuICApOiBudW1iZXIgPT4ge1xuICAgIGNvbnN0IHsgcm93Q291bnQsIGhlaWdodCB9ID0gcHJvcHM7XG5cbiAgICBjb25zdCBpdGVtTWV0YWRhdGEgPSBnZXRJdGVtTWV0YWRhdGEoXG4gICAgICAncm93JyxcbiAgICAgIHByb3BzLFxuICAgICAgc3RhcnRJbmRleCxcbiAgICAgIGluc3RhbmNlUHJvcHNcbiAgICApO1xuICAgIGNvbnN0IG1heE9mZnNldCA9IHNjcm9sbFRvcCArIGhlaWdodDtcblxuICAgIGxldCBvZmZzZXQgPSBpdGVtTWV0YWRhdGEub2Zmc2V0ICsgaXRlbU1ldGFkYXRhLnNpemU7XG4gICAgbGV0IHN0b3BJbmRleCA9IHN0YXJ0SW5kZXg7XG5cbiAgICB3aGlsZSAoc3RvcEluZGV4IDwgcm93Q291bnQgLSAxICYmIG9mZnNldCA8IG1heE9mZnNldCkge1xuICAgICAgc3RvcEluZGV4Kys7XG4gICAgICBvZmZzZXQgKz0gZ2V0SXRlbU1ldGFkYXRhKCdyb3cnLCBwcm9wcywgc3RvcEluZGV4LCBpbnN0YW5jZVByb3BzKS5zaXplO1xuICAgIH1cblxuICAgIHJldHVybiBzdG9wSW5kZXg7XG4gIH0sXG5cbiAgaW5pdEluc3RhbmNlUHJvcHMocHJvcHM6IFByb3BzPGFueT4sIGluc3RhbmNlOiBhbnkpOiBJbnN0YW5jZVByb3BzIHtcbiAgICBjb25zdCB7XG4gICAgICBlc3RpbWF0ZWRDb2x1bW5XaWR0aCxcbiAgICAgIGVzdGltYXRlZFJvd0hlaWdodCxcbiAgICB9ID0gKChwcm9wczogYW55KTogVmFyaWFibGVTaXplUHJvcHMpO1xuXG4gICAgY29uc3QgaW5zdGFuY2VQcm9wcyA9IHtcbiAgICAgIGNvbHVtbk1ldGFkYXRhTWFwOiB7fSxcbiAgICAgIGVzdGltYXRlZENvbHVtbldpZHRoOiBlc3RpbWF0ZWRDb2x1bW5XaWR0aCB8fCBERUZBVUxUX0VTVElNQVRFRF9JVEVNX1NJWkUsXG4gICAgICBlc3RpbWF0ZWRSb3dIZWlnaHQ6IGVzdGltYXRlZFJvd0hlaWdodCB8fCBERUZBVUxUX0VTVElNQVRFRF9JVEVNX1NJWkUsXG4gICAgICBsYXN0TWVhc3VyZWRDb2x1bW5JbmRleDogLTEsXG4gICAgICBsYXN0TWVhc3VyZWRSb3dJbmRleDogLTEsXG4gICAgICByb3dNZXRhZGF0YU1hcDoge30sXG4gICAgfTtcblxuICAgIGluc3RhbmNlLnJlc2V0QWZ0ZXJDb2x1bW5JbmRleCA9IChcbiAgICAgIGNvbHVtbkluZGV4OiBudW1iZXIsXG4gICAgICBzaG91bGRGb3JjZVVwZGF0ZT86IGJvb2xlYW4gPSB0cnVlXG4gICAgKSA9PiB7XG4gICAgICBpbnN0YW5jZS5yZXNldEFmdGVySW5kaWNlcyh7IGNvbHVtbkluZGV4LCBzaG91bGRGb3JjZVVwZGF0ZSB9KTtcbiAgICB9O1xuXG4gICAgaW5zdGFuY2UucmVzZXRBZnRlclJvd0luZGV4ID0gKFxuICAgICAgcm93SW5kZXg6IG51bWJlcixcbiAgICAgIHNob3VsZEZvcmNlVXBkYXRlPzogYm9vbGVhbiA9IHRydWVcbiAgICApID0+IHtcbiAgICAgIGluc3RhbmNlLnJlc2V0QWZ0ZXJJbmRpY2VzKHsgcm93SW5kZXgsIHNob3VsZEZvcmNlVXBkYXRlIH0pO1xuICAgIH07XG5cbiAgICBpbnN0YW5jZS5yZXNldEFmdGVySW5kaWNlcyA9ICh7XG4gICAgICBjb2x1bW5JbmRleCxcbiAgICAgIHJvd0luZGV4LFxuICAgICAgc2hvdWxkRm9yY2VVcGRhdGUgPSB0cnVlLFxuICAgIH06IHtcbiAgICAgIGNvbHVtbkluZGV4PzogbnVtYmVyLFxuICAgICAgcm93SW5kZXg/OiBudW1iZXIsXG4gICAgICBzaG91bGRGb3JjZVVwZGF0ZTogYm9vbGVhbixcbiAgICB9KSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGNvbHVtbkluZGV4ID09PSAnbnVtYmVyJykge1xuICAgICAgICBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZENvbHVtbkluZGV4ID0gTWF0aC5taW4oXG4gICAgICAgICAgaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRDb2x1bW5JbmRleCxcbiAgICAgICAgICBjb2x1bW5JbmRleCAtIDFcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2Ygcm93SW5kZXggPT09ICdudW1iZXInKSB7XG4gICAgICAgIGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkUm93SW5kZXggPSBNYXRoLm1pbihcbiAgICAgICAgICBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZFJvd0luZGV4LFxuICAgICAgICAgIHJvd0luZGV4IC0gMVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAvLyBXZSBjb3VsZCBwb3RlbnRpYWxseSBvcHRpbWl6ZSBmdXJ0aGVyIGJ5IG9ubHkgZXZpY3Rpbmcgc3R5bGVzIGFmdGVyIHRoaXMgaW5kZXgsXG4gICAgICAvLyBCdXQgc2luY2Ugc3R5bGVzIGFyZSBvbmx5IGNhY2hlZCB3aGlsZSBzY3JvbGxpbmcgaXMgaW4gcHJvZ3Jlc3MtXG4gICAgICAvLyBJdCBzZWVtcyBhbiB1bm5lY2Vzc2FyeSBvcHRpbWl6YXRpb24uXG4gICAgICAvLyBJdCdzIHVubGlrZWx5IHRoYXQgcmVzZXRBZnRlckluZGV4KCkgd2lsbCBiZSBjYWxsZWQgd2hpbGUgYSB1c2VyIGlzIHNjcm9sbGluZy5cbiAgICAgIGluc3RhbmNlLl9nZXRJdGVtU3R5bGVDYWNoZSgtMSk7XG5cbiAgICAgIGlmIChzaG91bGRGb3JjZVVwZGF0ZSkge1xuICAgICAgICBpbnN0YW5jZS5mb3JjZVVwZGF0ZSgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gaW5zdGFuY2VQcm9wcztcbiAgfSxcblxuICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlOiBmYWxzZSxcblxuICB2YWxpZGF0ZVByb3BzOiAoeyBjb2x1bW5XaWR0aCwgcm93SGVpZ2h0IH06IFByb3BzPGFueT4pOiB2b2lkID0+IHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKHR5cGVvZiBjb2x1bW5XaWR0aCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAnQW4gaW52YWxpZCBcImNvbHVtbldpZHRoXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgK1xuICAgICAgICAgICAgJ1ZhbHVlIHNob3VsZCBiZSBhIGZ1bmN0aW9uLiAnICtcbiAgICAgICAgICAgIGBcIiR7XG4gICAgICAgICAgICAgIGNvbHVtbldpZHRoID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGNvbHVtbldpZHRoXG4gICAgICAgICAgICB9XCIgd2FzIHNwZWNpZmllZC5gXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiByb3dIZWlnaHQgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgJ0FuIGludmFsaWQgXCJyb3dIZWlnaHRcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArXG4gICAgICAgICAgICAnVmFsdWUgc2hvdWxkIGJlIGEgZnVuY3Rpb24uICcgK1xuICAgICAgICAgICAgYFwiJHtyb3dIZWlnaHQgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2Ygcm93SGVpZ2h0fVwiIHdhcyBzcGVjaWZpZWQuYFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBWYXJpYWJsZVNpemVHcmlkO1xuIiwgIi8vIEBmbG93XG5cbmltcG9ydCBtZW1vaXplT25lIGZyb20gJ21lbW9pemUtb25lJztcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnQsIFB1cmVDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjYW5jZWxUaW1lb3V0LCByZXF1ZXN0VGltZW91dCB9IGZyb20gJy4vdGltZXInO1xuaW1wb3J0IHsgZ2V0U2Nyb2xsYmFyU2l6ZSwgZ2V0UlRMT2Zmc2V0VHlwZSB9IGZyb20gJy4vZG9tSGVscGVycyc7XG5cbmltcG9ydCB0eXBlIHsgVGltZW91dElEIH0gZnJvbSAnLi90aW1lcic7XG5cbmV4cG9ydCB0eXBlIFNjcm9sbFRvQWxpZ24gPSAnYXV0bycgfCAnc21hcnQnIHwgJ2NlbnRlcicgfCAnc3RhcnQnIHwgJ2VuZCc7XG5cbnR5cGUgaXRlbVNpemUgPSBudW1iZXIgfCAoKGluZGV4OiBudW1iZXIpID0+IG51bWJlcik7XG4vLyBUT0RPIERlcHJlY2F0ZSBkaXJlY3Rpb25zIFwiaG9yaXpvbnRhbFwiIGFuZCBcInZlcnRpY2FsXCJcbnR5cGUgRGlyZWN0aW9uID0gJ2x0cicgfCAncnRsJyB8ICdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCc7XG50eXBlIExheW91dCA9ICdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCc7XG5cbnR5cGUgUmVuZGVyQ29tcG9uZW50UHJvcHM8VD4gPSB7fFxuICBkYXRhOiBULFxuICBpbmRleDogbnVtYmVyLFxuICBpc1Njcm9sbGluZz86IGJvb2xlYW4sXG4gIHN0eWxlOiBPYmplY3QsXG58fTtcbnR5cGUgUmVuZGVyQ29tcG9uZW50PFQ+ID0gUmVhY3QkQ29tcG9uZW50VHlwZTwkU2hhcGU8UmVuZGVyQ29tcG9uZW50UHJvcHM8VD4+PjtcblxudHlwZSBTY3JvbGxEaXJlY3Rpb24gPSAnZm9yd2FyZCcgfCAnYmFja3dhcmQnO1xuXG50eXBlIG9uSXRlbXNSZW5kZXJlZENhbGxiYWNrID0gKHtcbiAgb3ZlcnNjYW5TdGFydEluZGV4OiBudW1iZXIsXG4gIG92ZXJzY2FuU3RvcEluZGV4OiBudW1iZXIsXG4gIHZpc2libGVTdGFydEluZGV4OiBudW1iZXIsXG4gIHZpc2libGVTdG9wSW5kZXg6IG51bWJlcixcbn0pID0+IHZvaWQ7XG50eXBlIG9uU2Nyb2xsQ2FsbGJhY2sgPSAoe1xuICBzY3JvbGxEaXJlY3Rpb246IFNjcm9sbERpcmVjdGlvbixcbiAgc2Nyb2xsT2Zmc2V0OiBudW1iZXIsXG4gIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogYm9vbGVhbixcbn0pID0+IHZvaWQ7XG5cbnR5cGUgU2Nyb2xsRXZlbnQgPSBTeW50aGV0aWNFdmVudDxIVE1MRGl2RWxlbWVudD47XG50eXBlIEl0ZW1TdHlsZUNhY2hlID0geyBbaW5kZXg6IG51bWJlcl06IE9iamVjdCB9O1xuXG50eXBlIE91dGVyUHJvcHMgPSB7fFxuICBjaGlsZHJlbjogUmVhY3QkTm9kZSxcbiAgY2xhc3NOYW1lOiBzdHJpbmcgfCB2b2lkLFxuICBvblNjcm9sbDogU2Nyb2xsRXZlbnQgPT4gdm9pZCxcbiAgc3R5bGU6IHtcbiAgICBbc3RyaW5nXTogbWl4ZWQsXG4gIH0sXG58fTtcblxudHlwZSBJbm5lclByb3BzID0ge3xcbiAgY2hpbGRyZW46IFJlYWN0JE5vZGUsXG4gIHN0eWxlOiB7XG4gICAgW3N0cmluZ106IG1peGVkLFxuICB9LFxufH07XG5cbmV4cG9ydCB0eXBlIFByb3BzPFQ+ID0ge3xcbiAgY2hpbGRyZW46IFJlbmRlckNvbXBvbmVudDxUPixcbiAgY2xhc3NOYW1lPzogc3RyaW5nLFxuICBkaXJlY3Rpb246IERpcmVjdGlvbixcbiAgaGVpZ2h0OiBudW1iZXIgfCBzdHJpbmcsXG4gIGluaXRpYWxTY3JvbGxPZmZzZXQ/OiBudW1iZXIsXG4gIGlubmVyUmVmPzogYW55LFxuICBpbm5lckVsZW1lbnRUeXBlPzogc3RyaW5nIHwgUmVhY3QkQWJzdHJhY3RDb21wb25lbnQ8SW5uZXJQcm9wcywgYW55PixcbiAgaW5uZXJUYWdOYW1lPzogc3RyaW5nLCAvLyBkZXByZWNhdGVkXG4gIGl0ZW1Db3VudDogbnVtYmVyLFxuICBpdGVtRGF0YTogVCxcbiAgaXRlbUtleT86IChpbmRleDogbnVtYmVyLCBkYXRhOiBUKSA9PiBhbnksXG4gIGl0ZW1TaXplOiBpdGVtU2l6ZSxcbiAgbGF5b3V0OiBMYXlvdXQsXG4gIG9uSXRlbXNSZW5kZXJlZD86IG9uSXRlbXNSZW5kZXJlZENhbGxiYWNrLFxuICBvblNjcm9sbD86IG9uU2Nyb2xsQ2FsbGJhY2ssXG4gIG91dGVyUmVmPzogYW55LFxuICBvdXRlckVsZW1lbnRUeXBlPzogc3RyaW5nIHwgUmVhY3QkQWJzdHJhY3RDb21wb25lbnQ8T3V0ZXJQcm9wcywgYW55PixcbiAgb3V0ZXJUYWdOYW1lPzogc3RyaW5nLCAvLyBkZXByZWNhdGVkXG4gIG92ZXJzY2FuQ291bnQ6IG51bWJlcixcbiAgc3R5bGU/OiBPYmplY3QsXG4gIHVzZUlzU2Nyb2xsaW5nOiBib29sZWFuLFxuICB3aWR0aDogbnVtYmVyIHwgc3RyaW5nLFxufH07XG5cbnR5cGUgU3RhdGUgPSB7fFxuICBpbnN0YW5jZTogYW55LFxuICBpc1Njcm9sbGluZzogYm9vbGVhbixcbiAgc2Nyb2xsRGlyZWN0aW9uOiBTY3JvbGxEaXJlY3Rpb24sXG4gIHNjcm9sbE9mZnNldDogbnVtYmVyLFxuICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IGJvb2xlYW4sXG58fTtcblxudHlwZSBHZXRJdGVtT2Zmc2V0ID0gKFxuICBwcm9wczogUHJvcHM8YW55PixcbiAgaW5kZXg6IG51bWJlcixcbiAgaW5zdGFuY2VQcm9wczogYW55XG4pID0+IG51bWJlcjtcbnR5cGUgR2V0SXRlbVNpemUgPSAoXG4gIHByb3BzOiBQcm9wczxhbnk+LFxuICBpbmRleDogbnVtYmVyLFxuICBpbnN0YW5jZVByb3BzOiBhbnlcbikgPT4gbnVtYmVyO1xudHlwZSBHZXRFc3RpbWF0ZWRUb3RhbFNpemUgPSAocHJvcHM6IFByb3BzPGFueT4sIGluc3RhbmNlUHJvcHM6IGFueSkgPT4gbnVtYmVyO1xudHlwZSBHZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudCA9IChcbiAgcHJvcHM6IFByb3BzPGFueT4sXG4gIGluZGV4OiBudW1iZXIsXG4gIGFsaWduOiBTY3JvbGxUb0FsaWduLFxuICBzY3JvbGxPZmZzZXQ6IG51bWJlcixcbiAgaW5zdGFuY2VQcm9wczogYW55XG4pID0+IG51bWJlcjtcbnR5cGUgR2V0U3RhcnRJbmRleEZvck9mZnNldCA9IChcbiAgcHJvcHM6IFByb3BzPGFueT4sXG4gIG9mZnNldDogbnVtYmVyLFxuICBpbnN0YW5jZVByb3BzOiBhbnlcbikgPT4gbnVtYmVyO1xudHlwZSBHZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4ID0gKFxuICBwcm9wczogUHJvcHM8YW55PixcbiAgc3RhcnRJbmRleDogbnVtYmVyLFxuICBzY3JvbGxPZmZzZXQ6IG51bWJlcixcbiAgaW5zdGFuY2VQcm9wczogYW55XG4pID0+IG51bWJlcjtcbnR5cGUgSW5pdEluc3RhbmNlUHJvcHMgPSAocHJvcHM6IFByb3BzPGFueT4sIGluc3RhbmNlOiBhbnkpID0+IGFueTtcbnR5cGUgVmFsaWRhdGVQcm9wcyA9IChwcm9wczogUHJvcHM8YW55PikgPT4gdm9pZDtcblxuY29uc3QgSVNfU0NST0xMSU5HX0RFQk9VTkNFX0lOVEVSVkFMID0gMTUwO1xuXG5jb25zdCBkZWZhdWx0SXRlbUtleSA9IChpbmRleDogbnVtYmVyLCBkYXRhOiBhbnkpID0+IGluZGV4O1xuXG4vLyBJbiBERVYgbW9kZSwgdGhpcyBTZXQgaGVscHMgdXMgb25seSBsb2cgYSB3YXJuaW5nIG9uY2UgcGVyIGNvbXBvbmVudCBpbnN0YW5jZS5cbi8vIFRoaXMgYXZvaWRzIHNwYW1taW5nIHRoZSBjb25zb2xlIGV2ZXJ5IHRpbWUgYSByZW5kZXIgaGFwcGVucy5cbmxldCBkZXZXYXJuaW5nc0RpcmVjdGlvbiA9IG51bGw7XG5sZXQgZGV2V2FybmluZ3NUYWdOYW1lID0gbnVsbDtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LldlYWtTZXQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgZGV2V2FybmluZ3NEaXJlY3Rpb24gPSBuZXcgV2Vha1NldCgpO1xuICAgIGRldldhcm5pbmdzVGFnTmFtZSA9IG5ldyBXZWFrU2V0KCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlTGlzdENvbXBvbmVudCh7XG4gIGdldEl0ZW1PZmZzZXQsXG4gIGdldEVzdGltYXRlZFRvdGFsU2l6ZSxcbiAgZ2V0SXRlbVNpemUsXG4gIGdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50LFxuICBnZXRTdGFydEluZGV4Rm9yT2Zmc2V0LFxuICBnZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4LFxuICBpbml0SW5zdGFuY2VQcm9wcyxcbiAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSxcbiAgdmFsaWRhdGVQcm9wcyxcbn06IHt8XG4gIGdldEl0ZW1PZmZzZXQ6IEdldEl0ZW1PZmZzZXQsXG4gIGdldEVzdGltYXRlZFRvdGFsU2l6ZTogR2V0RXN0aW1hdGVkVG90YWxTaXplLFxuICBnZXRJdGVtU2l6ZTogR2V0SXRlbVNpemUsXG4gIGdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50OiBHZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudCxcbiAgZ2V0U3RhcnRJbmRleEZvck9mZnNldDogR2V0U3RhcnRJbmRleEZvck9mZnNldCxcbiAgZ2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleDogR2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleCxcbiAgaW5pdEluc3RhbmNlUHJvcHM6IEluaXRJbnN0YW5jZVByb3BzLFxuICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlOiBib29sZWFuLFxuICB2YWxpZGF0ZVByb3BzOiBWYWxpZGF0ZVByb3BzLFxufH0pIHtcbiAgcmV0dXJuIGNsYXNzIExpc3Q8VD4gZXh0ZW5kcyBQdXJlQ29tcG9uZW50PFByb3BzPFQ+LCBTdGF0ZT4ge1xuICAgIF9pbnN0YW5jZVByb3BzOiBhbnkgPSBpbml0SW5zdGFuY2VQcm9wcyh0aGlzLnByb3BzLCB0aGlzKTtcbiAgICBfb3V0ZXJSZWY6ID9IVE1MRGl2RWxlbWVudDtcbiAgICBfcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZDogVGltZW91dElEIHwgbnVsbCA9IG51bGw7XG5cbiAgICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgICAgZGlyZWN0aW9uOiAnbHRyJyxcbiAgICAgIGl0ZW1EYXRhOiB1bmRlZmluZWQsXG4gICAgICBsYXlvdXQ6ICd2ZXJ0aWNhbCcsXG4gICAgICBvdmVyc2NhbkNvdW50OiAyLFxuICAgICAgdXNlSXNTY3JvbGxpbmc6IGZhbHNlLFxuICAgIH07XG5cbiAgICBzdGF0ZTogU3RhdGUgPSB7XG4gICAgICBpbnN0YW5jZTogdGhpcyxcbiAgICAgIGlzU2Nyb2xsaW5nOiBmYWxzZSxcbiAgICAgIHNjcm9sbERpcmVjdGlvbjogJ2ZvcndhcmQnLFxuICAgICAgc2Nyb2xsT2Zmc2V0OlxuICAgICAgICB0eXBlb2YgdGhpcy5wcm9wcy5pbml0aWFsU2Nyb2xsT2Zmc2V0ID09PSAnbnVtYmVyJ1xuICAgICAgICAgID8gdGhpcy5wcm9wcy5pbml0aWFsU2Nyb2xsT2Zmc2V0XG4gICAgICAgICAgOiAwLFxuICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBmYWxzZSxcbiAgICB9O1xuXG4gICAgLy8gQWx3YXlzIHVzZSBleHBsaWNpdCBjb25zdHJ1Y3RvciBmb3IgUmVhY3QgY29tcG9uZW50cy5cbiAgICAvLyBJdCBwcm9kdWNlcyBsZXNzIGNvZGUgYWZ0ZXIgdHJhbnNwaWxhdGlvbi4gKCMyNilcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1jb25zdHJ1Y3RvclxuICAgIGNvbnN0cnVjdG9yKHByb3BzOiBQcm9wczxUPikge1xuICAgICAgc3VwZXIocHJvcHMpO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoXG4gICAgICBuZXh0UHJvcHM6IFByb3BzPFQ+LFxuICAgICAgcHJldlN0YXRlOiBTdGF0ZVxuICAgICk6ICRTaGFwZTxTdGF0ZT4gfCBudWxsIHtcbiAgICAgIHZhbGlkYXRlU2hhcmVkUHJvcHMobmV4dFByb3BzLCBwcmV2U3RhdGUpO1xuICAgICAgdmFsaWRhdGVQcm9wcyhuZXh0UHJvcHMpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgc2Nyb2xsVG8oc2Nyb2xsT2Zmc2V0OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgIHNjcm9sbE9mZnNldCA9IE1hdGgubWF4KDAsIHNjcm9sbE9mZnNldCk7XG5cbiAgICAgIHRoaXMuc2V0U3RhdGUocHJldlN0YXRlID0+IHtcbiAgICAgICAgaWYgKHByZXZTdGF0ZS5zY3JvbGxPZmZzZXQgPT09IHNjcm9sbE9mZnNldCkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc2Nyb2xsRGlyZWN0aW9uOlxuICAgICAgICAgICAgcHJldlN0YXRlLnNjcm9sbE9mZnNldCA8IHNjcm9sbE9mZnNldCA/ICdmb3J3YXJkJyA6ICdiYWNrd2FyZCcsXG4gICAgICAgICAgc2Nyb2xsT2Zmc2V0OiBzY3JvbGxPZmZzZXQsXG4gICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiB0cnVlLFxuICAgICAgICB9O1xuICAgICAgfSwgdGhpcy5fcmVzZXRJc1Njcm9sbGluZ0RlYm91bmNlZCk7XG4gICAgfVxuXG4gICAgc2Nyb2xsVG9JdGVtKGluZGV4OiBudW1iZXIsIGFsaWduOiBTY3JvbGxUb0FsaWduID0gJ2F1dG8nKTogdm9pZCB7XG4gICAgICBjb25zdCB7IGl0ZW1Db3VudCwgbGF5b3V0IH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgeyBzY3JvbGxPZmZzZXQgfSA9IHRoaXMuc3RhdGU7XG5cbiAgICAgIGluZGV4ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oaW5kZXgsIGl0ZW1Db3VudCAtIDEpKTtcblxuICAgICAgLy8gVGhlIHNjcm9sbGJhciBzaXplIHNob3VsZCBiZSBjb25zaWRlcmVkIHdoZW4gc2Nyb2xsaW5nIGFuIGl0ZW0gaW50byB2aWV3LCB0byBlbnN1cmUgaXQncyBmdWxseSB2aXNpYmxlLlxuICAgICAgLy8gQnV0IHdlIG9ubHkgbmVlZCB0byBhY2NvdW50IGZvciBpdHMgc2l6ZSB3aGVuIGl0J3MgYWN0dWFsbHkgdmlzaWJsZS5cbiAgICAgIC8vIFRoaXMgaXMgYW4gZWRnZSBjYXNlIGZvciBsaXN0czsgbm9ybWFsbHkgdGhleSBvbmx5IHNjcm9sbCBpbiB0aGUgZG9taW5hbnQgZGlyZWN0aW9uLlxuICAgICAgbGV0IHNjcm9sbGJhclNpemUgPSAwO1xuICAgICAgaWYgKHRoaXMuX291dGVyUmVmKSB7XG4gICAgICAgIGNvbnN0IG91dGVyUmVmID0gKCh0aGlzLl9vdXRlclJlZjogYW55KTogSFRNTEVsZW1lbnQpO1xuICAgICAgICBpZiAobGF5b3V0ID09PSAndmVydGljYWwnKSB7XG4gICAgICAgICAgc2Nyb2xsYmFyU2l6ZSA9XG4gICAgICAgICAgICBvdXRlclJlZi5zY3JvbGxXaWR0aCA+IG91dGVyUmVmLmNsaWVudFdpZHRoXG4gICAgICAgICAgICAgID8gZ2V0U2Nyb2xsYmFyU2l6ZSgpXG4gICAgICAgICAgICAgIDogMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzY3JvbGxiYXJTaXplID1cbiAgICAgICAgICAgIG91dGVyUmVmLnNjcm9sbEhlaWdodCA+IG91dGVyUmVmLmNsaWVudEhlaWdodFxuICAgICAgICAgICAgICA/IGdldFNjcm9sbGJhclNpemUoKVxuICAgICAgICAgICAgICA6IDA7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5zY3JvbGxUbyhcbiAgICAgICAgZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQoXG4gICAgICAgICAgdGhpcy5wcm9wcyxcbiAgICAgICAgICBpbmRleCxcbiAgICAgICAgICBhbGlnbixcbiAgICAgICAgICBzY3JvbGxPZmZzZXQsXG4gICAgICAgICAgdGhpcy5faW5zdGFuY2VQcm9wcyxcbiAgICAgICAgICBzY3JvbGxiYXJTaXplXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICBjb25zdCB7IGRpcmVjdGlvbiwgaW5pdGlhbFNjcm9sbE9mZnNldCwgbGF5b3V0IH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICBpZiAodHlwZW9mIGluaXRpYWxTY3JvbGxPZmZzZXQgPT09ICdudW1iZXInICYmIHRoaXMuX291dGVyUmVmICE9IG51bGwpIHtcbiAgICAgICAgY29uc3Qgb3V0ZXJSZWYgPSAoKHRoaXMuX291dGVyUmVmOiBhbnkpOiBIVE1MRWxlbWVudCk7XG4gICAgICAgIC8vIFRPRE8gRGVwcmVjYXRlIGRpcmVjdGlvbiBcImhvcml6b250YWxcIlxuICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgbGF5b3V0ID09PSAnaG9yaXpvbnRhbCcpIHtcbiAgICAgICAgICBvdXRlclJlZi5zY3JvbGxMZWZ0ID0gaW5pdGlhbFNjcm9sbE9mZnNldDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXRlclJlZi5zY3JvbGxUb3AgPSBpbml0aWFsU2Nyb2xsT2Zmc2V0O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NhbGxQcm9wc0NhbGxiYWNrcygpO1xuICAgIH1cblxuICAgIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcbiAgICAgIGNvbnN0IHsgZGlyZWN0aW9uLCBsYXlvdXQgfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCB7IHNjcm9sbE9mZnNldCwgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgICBpZiAoc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkICYmIHRoaXMuX291dGVyUmVmICE9IG51bGwpIHtcbiAgICAgICAgY29uc3Qgb3V0ZXJSZWYgPSAoKHRoaXMuX291dGVyUmVmOiBhbnkpOiBIVE1MRWxlbWVudCk7XG5cbiAgICAgICAgLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9uIFwiaG9yaXpvbnRhbFwiXG4gICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJykge1xuICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICdydGwnKSB7XG4gICAgICAgICAgICAvLyBUUklDS1kgQWNjb3JkaW5nIHRvIHRoZSBzcGVjLCBzY3JvbGxMZWZ0IHNob3VsZCBiZSBuZWdhdGl2ZSBmb3IgUlRMIGFsaWduZWQgZWxlbWVudHMuXG4gICAgICAgICAgICAvLyBUaGlzIGlzIG5vdCB0aGUgY2FzZSBmb3IgYWxsIGJyb3dzZXJzIHRob3VnaCAoZS5nLiBDaHJvbWUgcmVwb3J0cyB2YWx1ZXMgYXMgcG9zaXRpdmUsIG1lYXN1cmVkIHJlbGF0aXZlIHRvIHRoZSBsZWZ0KS5cbiAgICAgICAgICAgIC8vIFNvIHdlIG5lZWQgdG8gZGV0ZXJtaW5lIHdoaWNoIGJyb3dzZXIgYmVoYXZpb3Igd2UncmUgZGVhbGluZyB3aXRoLCBhbmQgbWltaWMgaXQuXG4gICAgICAgICAgICBzd2l0Y2ggKGdldFJUTE9mZnNldFR5cGUoKSkge1xuICAgICAgICAgICAgICBjYXNlICduZWdhdGl2ZSc6XG4gICAgICAgICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IC1zY3JvbGxPZmZzZXQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgJ3Bvc2l0aXZlLWFzY2VuZGluZyc6XG4gICAgICAgICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IHNjcm9sbE9mZnNldDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBjb25zdCB7IGNsaWVudFdpZHRoLCBzY3JvbGxXaWR0aCB9ID0gb3V0ZXJSZWY7XG4gICAgICAgICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IHNjcm9sbFdpZHRoIC0gY2xpZW50V2lkdGggLSBzY3JvbGxPZmZzZXQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSBzY3JvbGxPZmZzZXQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dGVyUmVmLnNjcm9sbFRvcCA9IHNjcm9sbE9mZnNldDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLl9jYWxsUHJvcHNDYWxsYmFja3MoKTtcbiAgICB9XG5cbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIGlmICh0aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkICE9PSBudWxsKSB7XG4gICAgICAgIGNhbmNlbFRpbWVvdXQodGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICBkaXJlY3Rpb24sXG4gICAgICAgIGhlaWdodCxcbiAgICAgICAgaW5uZXJSZWYsXG4gICAgICAgIGlubmVyRWxlbWVudFR5cGUsXG4gICAgICAgIGlubmVyVGFnTmFtZSxcbiAgICAgICAgaXRlbUNvdW50LFxuICAgICAgICBpdGVtRGF0YSxcbiAgICAgICAgaXRlbUtleSA9IGRlZmF1bHRJdGVtS2V5LFxuICAgICAgICBsYXlvdXQsXG4gICAgICAgIG91dGVyRWxlbWVudFR5cGUsXG4gICAgICAgIG91dGVyVGFnTmFtZSxcbiAgICAgICAgc3R5bGUsXG4gICAgICAgIHVzZUlzU2Nyb2xsaW5nLFxuICAgICAgICB3aWR0aCxcbiAgICAgIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgeyBpc1Njcm9sbGluZyB9ID0gdGhpcy5zdGF0ZTtcblxuICAgICAgLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9uIFwiaG9yaXpvbnRhbFwiXG4gICAgICBjb25zdCBpc0hvcml6b250YWwgPVxuICAgICAgICBkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJztcblxuICAgICAgY29uc3Qgb25TY3JvbGwgPSBpc0hvcml6b250YWxcbiAgICAgICAgPyB0aGlzLl9vblNjcm9sbEhvcml6b250YWxcbiAgICAgICAgOiB0aGlzLl9vblNjcm9sbFZlcnRpY2FsO1xuXG4gICAgICBjb25zdCBbc3RhcnRJbmRleCwgc3RvcEluZGV4XSA9IHRoaXMuX2dldFJhbmdlVG9SZW5kZXIoKTtcblxuICAgICAgY29uc3QgaXRlbXMgPSBbXTtcbiAgICAgIGlmIChpdGVtQ291bnQgPiAwKSB7XG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gc3RhcnRJbmRleDsgaW5kZXggPD0gc3RvcEluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgICAgaXRlbXMucHVzaChcbiAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoY2hpbGRyZW4sIHtcbiAgICAgICAgICAgICAgZGF0YTogaXRlbURhdGEsXG4gICAgICAgICAgICAgIGtleTogaXRlbUtleShpbmRleCwgaXRlbURhdGEpLFxuICAgICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgICAgaXNTY3JvbGxpbmc6IHVzZUlzU2Nyb2xsaW5nID8gaXNTY3JvbGxpbmcgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIHN0eWxlOiB0aGlzLl9nZXRJdGVtU3R5bGUoaW5kZXgpLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFJlYWQgdGhpcyB2YWx1ZSBBRlRFUiBpdGVtcyBoYXZlIGJlZW4gY3JlYXRlZCxcbiAgICAgIC8vIFNvIHRoZWlyIGFjdHVhbCBzaXplcyAoaWYgdmFyaWFibGUpIGFyZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24uXG4gICAgICBjb25zdCBlc3RpbWF0ZWRUb3RhbFNpemUgPSBnZXRFc3RpbWF0ZWRUb3RhbFNpemUoXG4gICAgICAgIHRoaXMucHJvcHMsXG4gICAgICAgIHRoaXMuX2luc3RhbmNlUHJvcHNcbiAgICAgICk7XG5cbiAgICAgIHJldHVybiBjcmVhdGVFbGVtZW50KFxuICAgICAgICBvdXRlckVsZW1lbnRUeXBlIHx8IG91dGVyVGFnTmFtZSB8fCAnZGl2JyxcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgICBvblNjcm9sbCxcbiAgICAgICAgICByZWY6IHRoaXMuX291dGVyUmVmU2V0dGVyLFxuICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgb3ZlcmZsb3c6ICdhdXRvJyxcbiAgICAgICAgICAgIFdlYmtpdE92ZXJmbG93U2Nyb2xsaW5nOiAndG91Y2gnLFxuICAgICAgICAgICAgd2lsbENoYW5nZTogJ3RyYW5zZm9ybScsXG4gICAgICAgICAgICBkaXJlY3Rpb24sXG4gICAgICAgICAgICAuLi5zdHlsZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBjcmVhdGVFbGVtZW50KGlubmVyRWxlbWVudFR5cGUgfHwgaW5uZXJUYWdOYW1lIHx8ICdkaXYnLCB7XG4gICAgICAgICAgY2hpbGRyZW46IGl0ZW1zLFxuICAgICAgICAgIHJlZjogaW5uZXJSZWYsXG4gICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgIGhlaWdodDogaXNIb3Jpem9udGFsID8gJzEwMCUnIDogZXN0aW1hdGVkVG90YWxTaXplLFxuICAgICAgICAgICAgcG9pbnRlckV2ZW50czogaXNTY3JvbGxpbmcgPyAnbm9uZScgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB3aWR0aDogaXNIb3Jpem9udGFsID8gZXN0aW1hdGVkVG90YWxTaXplIDogJzEwMCUnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cblxuICAgIF9jYWxsT25JdGVtc1JlbmRlcmVkOiAoXG4gICAgICBvdmVyc2NhblN0YXJ0SW5kZXg6IG51bWJlcixcbiAgICAgIG92ZXJzY2FuU3RvcEluZGV4OiBudW1iZXIsXG4gICAgICB2aXNpYmxlU3RhcnRJbmRleDogbnVtYmVyLFxuICAgICAgdmlzaWJsZVN0b3BJbmRleDogbnVtYmVyXG4gICAgKSA9PiB2b2lkO1xuICAgIF9jYWxsT25JdGVtc1JlbmRlcmVkID0gbWVtb2l6ZU9uZShcbiAgICAgIChcbiAgICAgICAgb3ZlcnNjYW5TdGFydEluZGV4OiBudW1iZXIsXG4gICAgICAgIG92ZXJzY2FuU3RvcEluZGV4OiBudW1iZXIsXG4gICAgICAgIHZpc2libGVTdGFydEluZGV4OiBudW1iZXIsXG4gICAgICAgIHZpc2libGVTdG9wSW5kZXg6IG51bWJlclxuICAgICAgKSA9PlxuICAgICAgICAoKHRoaXMucHJvcHMub25JdGVtc1JlbmRlcmVkOiBhbnkpOiBvbkl0ZW1zUmVuZGVyZWRDYWxsYmFjaykoe1xuICAgICAgICAgIG92ZXJzY2FuU3RhcnRJbmRleCxcbiAgICAgICAgICBvdmVyc2NhblN0b3BJbmRleCxcbiAgICAgICAgICB2aXNpYmxlU3RhcnRJbmRleCxcbiAgICAgICAgICB2aXNpYmxlU3RvcEluZGV4LFxuICAgICAgICB9KVxuICAgICk7XG5cbiAgICBfY2FsbE9uU2Nyb2xsOiAoXG4gICAgICBzY3JvbGxEaXJlY3Rpb246IFNjcm9sbERpcmVjdGlvbixcbiAgICAgIHNjcm9sbE9mZnNldDogbnVtYmVyLFxuICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBib29sZWFuXG4gICAgKSA9PiB2b2lkO1xuICAgIF9jYWxsT25TY3JvbGwgPSBtZW1vaXplT25lKFxuICAgICAgKFxuICAgICAgICBzY3JvbGxEaXJlY3Rpb246IFNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgc2Nyb2xsT2Zmc2V0OiBudW1iZXIsXG4gICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogYm9vbGVhblxuICAgICAgKSA9PlxuICAgICAgICAoKHRoaXMucHJvcHMub25TY3JvbGw6IGFueSk6IG9uU2Nyb2xsQ2FsbGJhY2spKHtcbiAgICAgICAgICBzY3JvbGxEaXJlY3Rpb24sXG4gICAgICAgICAgc2Nyb2xsT2Zmc2V0LFxuICAgICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCxcbiAgICAgICAgfSlcbiAgICApO1xuXG4gICAgX2NhbGxQcm9wc0NhbGxiYWNrcygpIHtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5wcm9wcy5vbkl0ZW1zUmVuZGVyZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY29uc3QgeyBpdGVtQ291bnQgfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGlmIChpdGVtQ291bnQgPiAwKSB7XG4gICAgICAgICAgY29uc3QgW1xuICAgICAgICAgICAgb3ZlcnNjYW5TdGFydEluZGV4LFxuICAgICAgICAgICAgb3ZlcnNjYW5TdG9wSW5kZXgsXG4gICAgICAgICAgICB2aXNpYmxlU3RhcnRJbmRleCxcbiAgICAgICAgICAgIHZpc2libGVTdG9wSW5kZXgsXG4gICAgICAgICAgXSA9IHRoaXMuX2dldFJhbmdlVG9SZW5kZXIoKTtcbiAgICAgICAgICB0aGlzLl9jYWxsT25JdGVtc1JlbmRlcmVkKFxuICAgICAgICAgICAgb3ZlcnNjYW5TdGFydEluZGV4LFxuICAgICAgICAgICAgb3ZlcnNjYW5TdG9wSW5kZXgsXG4gICAgICAgICAgICB2aXNpYmxlU3RhcnRJbmRleCxcbiAgICAgICAgICAgIHZpc2libGVTdG9wSW5kZXhcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdGhpcy5wcm9wcy5vblNjcm9sbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgc2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICAgIHNjcm9sbE9mZnNldCxcbiAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQsXG4gICAgICAgIH0gPSB0aGlzLnN0YXRlO1xuICAgICAgICB0aGlzLl9jYWxsT25TY3JvbGwoXG4gICAgICAgICAgc2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICAgIHNjcm9sbE9mZnNldCxcbiAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWRcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBMYXppbHkgY3JlYXRlIGFuZCBjYWNoZSBpdGVtIHN0eWxlcyB3aGlsZSBzY3JvbGxpbmcsXG4gICAgLy8gU28gdGhhdCBwdXJlIGNvbXBvbmVudCBzQ1Ugd2lsbCBwcmV2ZW50IHJlLXJlbmRlcnMuXG4gICAgLy8gV2UgbWFpbnRhaW4gdGhpcyBjYWNoZSwgYW5kIHBhc3MgYSBzdHlsZSBwcm9wIHJhdGhlciB0aGFuIGluZGV4LFxuICAgIC8vIFNvIHRoYXQgTGlzdCBjYW4gY2xlYXIgY2FjaGVkIHN0eWxlcyBhbmQgZm9yY2UgaXRlbSByZS1yZW5kZXIgaWYgbmVjZXNzYXJ5LlxuICAgIF9nZXRJdGVtU3R5bGU6IChpbmRleDogbnVtYmVyKSA9PiBPYmplY3Q7XG4gICAgX2dldEl0ZW1TdHlsZSA9IChpbmRleDogbnVtYmVyKTogT2JqZWN0ID0+IHtcbiAgICAgIGNvbnN0IHsgZGlyZWN0aW9uLCBpdGVtU2l6ZSwgbGF5b3V0IH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICBjb25zdCBpdGVtU3R5bGVDYWNoZSA9IHRoaXMuX2dldEl0ZW1TdHlsZUNhY2hlKFxuICAgICAgICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlICYmIGl0ZW1TaXplLFxuICAgICAgICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlICYmIGxheW91dCxcbiAgICAgICAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSAmJiBkaXJlY3Rpb25cbiAgICAgICk7XG5cbiAgICAgIGxldCBzdHlsZTtcbiAgICAgIGlmIChpdGVtU3R5bGVDYWNoZS5oYXNPd25Qcm9wZXJ0eShpbmRleCkpIHtcbiAgICAgICAgc3R5bGUgPSBpdGVtU3R5bGVDYWNoZVtpbmRleF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBnZXRJdGVtT2Zmc2V0KHRoaXMucHJvcHMsIGluZGV4LCB0aGlzLl9pbnN0YW5jZVByb3BzKTtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IGdldEl0ZW1TaXplKHRoaXMucHJvcHMsIGluZGV4LCB0aGlzLl9pbnN0YW5jZVByb3BzKTtcblxuICAgICAgICAvLyBUT0RPIERlcHJlY2F0ZSBkaXJlY3Rpb24gXCJob3Jpem9udGFsXCJcbiAgICAgICAgY29uc3QgaXNIb3Jpem9udGFsID1cbiAgICAgICAgICBkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJztcblxuICAgICAgICBjb25zdCBpc1J0bCA9IGRpcmVjdGlvbiA9PT0gJ3J0bCc7XG4gICAgICAgIGNvbnN0IG9mZnNldEhvcml6b250YWwgPSBpc0hvcml6b250YWwgPyBvZmZzZXQgOiAwO1xuICAgICAgICBpdGVtU3R5bGVDYWNoZVtpbmRleF0gPSBzdHlsZSA9IHtcbiAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICBsZWZ0OiBpc1J0bCA/IHVuZGVmaW5lZCA6IG9mZnNldEhvcml6b250YWwsXG4gICAgICAgICAgcmlnaHQ6IGlzUnRsID8gb2Zmc2V0SG9yaXpvbnRhbCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB0b3A6ICFpc0hvcml6b250YWwgPyBvZmZzZXQgOiAwLFxuICAgICAgICAgIGhlaWdodDogIWlzSG9yaXpvbnRhbCA/IHNpemUgOiAnMTAwJScsXG4gICAgICAgICAgd2lkdGg6IGlzSG9yaXpvbnRhbCA/IHNpemUgOiAnMTAwJScsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzdHlsZTtcbiAgICB9O1xuXG4gICAgX2dldEl0ZW1TdHlsZUNhY2hlOiAoXzogYW55LCBfXzogYW55LCBfX186IGFueSkgPT4gSXRlbVN0eWxlQ2FjaGU7XG4gICAgX2dldEl0ZW1TdHlsZUNhY2hlID0gbWVtb2l6ZU9uZSgoXzogYW55LCBfXzogYW55LCBfX186IGFueSkgPT4gKHt9KSk7XG5cbiAgICBfZ2V0UmFuZ2VUb1JlbmRlcigpOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSB7XG4gICAgICBjb25zdCB7IGl0ZW1Db3VudCwgb3ZlcnNjYW5Db3VudCB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IHsgaXNTY3JvbGxpbmcsIHNjcm9sbERpcmVjdGlvbiwgc2Nyb2xsT2Zmc2V0IH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgICBpZiAoaXRlbUNvdW50ID09PSAwKSB7XG4gICAgICAgIHJldHVybiBbMCwgMCwgMCwgMF07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBnZXRTdGFydEluZGV4Rm9yT2Zmc2V0KFxuICAgICAgICB0aGlzLnByb3BzLFxuICAgICAgICBzY3JvbGxPZmZzZXQsXG4gICAgICAgIHRoaXMuX2luc3RhbmNlUHJvcHNcbiAgICAgICk7XG4gICAgICBjb25zdCBzdG9wSW5kZXggPSBnZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4KFxuICAgICAgICB0aGlzLnByb3BzLFxuICAgICAgICBzdGFydEluZGV4LFxuICAgICAgICBzY3JvbGxPZmZzZXQsXG4gICAgICAgIHRoaXMuX2luc3RhbmNlUHJvcHNcbiAgICAgICk7XG5cbiAgICAgIC8vIE92ZXJzY2FuIGJ5IG9uZSBpdGVtIGluIGVhY2ggZGlyZWN0aW9uIHNvIHRoYXQgdGFiL2ZvY3VzIHdvcmtzLlxuICAgICAgLy8gSWYgdGhlcmUgaXNuJ3QgYXQgbGVhc3Qgb25lIGV4dHJhIGl0ZW0sIHRhYiBsb29wcyBiYWNrIGFyb3VuZC5cbiAgICAgIGNvbnN0IG92ZXJzY2FuQmFja3dhcmQgPVxuICAgICAgICAhaXNTY3JvbGxpbmcgfHwgc2Nyb2xsRGlyZWN0aW9uID09PSAnYmFja3dhcmQnXG4gICAgICAgICAgPyBNYXRoLm1heCgxLCBvdmVyc2NhbkNvdW50KVxuICAgICAgICAgIDogMTtcbiAgICAgIGNvbnN0IG92ZXJzY2FuRm9yd2FyZCA9XG4gICAgICAgICFpc1Njcm9sbGluZyB8fCBzY3JvbGxEaXJlY3Rpb24gPT09ICdmb3J3YXJkJ1xuICAgICAgICAgID8gTWF0aC5tYXgoMSwgb3ZlcnNjYW5Db3VudClcbiAgICAgICAgICA6IDE7XG5cbiAgICAgIHJldHVybiBbXG4gICAgICAgIE1hdGgubWF4KDAsIHN0YXJ0SW5kZXggLSBvdmVyc2NhbkJhY2t3YXJkKSxcbiAgICAgICAgTWF0aC5tYXgoMCwgTWF0aC5taW4oaXRlbUNvdW50IC0gMSwgc3RvcEluZGV4ICsgb3ZlcnNjYW5Gb3J3YXJkKSksXG4gICAgICAgIHN0YXJ0SW5kZXgsXG4gICAgICAgIHN0b3BJbmRleCxcbiAgICAgIF07XG4gICAgfVxuXG4gICAgX29uU2Nyb2xsSG9yaXpvbnRhbCA9IChldmVudDogU2Nyb2xsRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IHsgY2xpZW50V2lkdGgsIHNjcm9sbExlZnQsIHNjcm9sbFdpZHRoIH0gPSBldmVudC5jdXJyZW50VGFyZ2V0O1xuICAgICAgdGhpcy5zZXRTdGF0ZShwcmV2U3RhdGUgPT4ge1xuICAgICAgICBpZiAocHJldlN0YXRlLnNjcm9sbE9mZnNldCA9PT0gc2Nyb2xsTGVmdCkge1xuICAgICAgICAgIC8vIFNjcm9sbCBwb3NpdGlvbiBtYXkgaGF2ZSBiZWVuIHVwZGF0ZWQgYnkgY0RNL2NEVSxcbiAgICAgICAgICAvLyBJbiB3aGljaCBjYXNlIHdlIGRvbid0IG5lZWQgdG8gdHJpZ2dlciBhbm90aGVyIHJlbmRlcixcbiAgICAgICAgICAvLyBBbmQgd2UgZG9uJ3Qgd2FudCB0byB1cGRhdGUgc3RhdGUuaXNTY3JvbGxpbmcuXG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IGRpcmVjdGlvbiB9ID0gdGhpcy5wcm9wcztcblxuICAgICAgICBsZXQgc2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsTGVmdDtcbiAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ3J0bCcpIHtcbiAgICAgICAgICAvLyBUUklDS1kgQWNjb3JkaW5nIHRvIHRoZSBzcGVjLCBzY3JvbGxMZWZ0IHNob3VsZCBiZSBuZWdhdGl2ZSBmb3IgUlRMIGFsaWduZWQgZWxlbWVudHMuXG4gICAgICAgICAgLy8gVGhpcyBpcyBub3QgdGhlIGNhc2UgZm9yIGFsbCBicm93c2VycyB0aG91Z2ggKGUuZy4gQ2hyb21lIHJlcG9ydHMgdmFsdWVzIGFzIHBvc2l0aXZlLCBtZWFzdXJlZCByZWxhdGl2ZSB0byB0aGUgbGVmdCkuXG4gICAgICAgICAgLy8gSXQncyBhbHNvIGVhc2llciBmb3IgdGhpcyBjb21wb25lbnQgaWYgd2UgY29udmVydCBvZmZzZXRzIHRvIHRoZSBzYW1lIGZvcm1hdCBhcyB0aGV5IHdvdWxkIGJlIGluIGZvciBsdHIuXG4gICAgICAgICAgLy8gU28gdGhlIHNpbXBsZXN0IHNvbHV0aW9uIGlzIHRvIGRldGVybWluZSB3aGljaCBicm93c2VyIGJlaGF2aW9yIHdlJ3JlIGRlYWxpbmcgd2l0aCwgYW5kIGNvbnZlcnQgYmFzZWQgb24gaXQuXG4gICAgICAgICAgc3dpdGNoIChnZXRSVExPZmZzZXRUeXBlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgJ25lZ2F0aXZlJzpcbiAgICAgICAgICAgICAgc2Nyb2xsT2Zmc2V0ID0gLXNjcm9sbExlZnQ7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncG9zaXRpdmUtZGVzY2VuZGluZyc6XG4gICAgICAgICAgICAgIHNjcm9sbE9mZnNldCA9IHNjcm9sbFdpZHRoIC0gY2xpZW50V2lkdGggLSBzY3JvbGxMZWZ0O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcmV2ZW50IFNhZmFyaSdzIGVsYXN0aWMgc2Nyb2xsaW5nIGZyb20gY2F1c2luZyB2aXN1YWwgc2hha2luZyB3aGVuIHNjcm9sbGluZyBwYXN0IGJvdW5kcy5cbiAgICAgICAgc2Nyb2xsT2Zmc2V0ID0gTWF0aC5tYXgoXG4gICAgICAgICAgMCxcbiAgICAgICAgICBNYXRoLm1pbihzY3JvbGxPZmZzZXQsIHNjcm9sbFdpZHRoIC0gY2xpZW50V2lkdGgpXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpc1Njcm9sbGluZzogdHJ1ZSxcbiAgICAgICAgICBzY3JvbGxEaXJlY3Rpb246XG4gICAgICAgICAgICBwcmV2U3RhdGUuc2Nyb2xsT2Zmc2V0IDwgc2Nyb2xsT2Zmc2V0ID8gJ2ZvcndhcmQnIDogJ2JhY2t3YXJkJyxcbiAgICAgICAgICBzY3JvbGxPZmZzZXQsXG4gICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICAgIH0sIHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQpO1xuICAgIH07XG5cbiAgICBfb25TY3JvbGxWZXJ0aWNhbCA9IChldmVudDogU2Nyb2xsRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IHsgY2xpZW50SGVpZ2h0LCBzY3JvbGxIZWlnaHQsIHNjcm9sbFRvcCB9ID0gZXZlbnQuY3VycmVudFRhcmdldDtcbiAgICAgIHRoaXMuc2V0U3RhdGUocHJldlN0YXRlID0+IHtcbiAgICAgICAgaWYgKHByZXZTdGF0ZS5zY3JvbGxPZmZzZXQgPT09IHNjcm9sbFRvcCkge1xuICAgICAgICAgIC8vIFNjcm9sbCBwb3NpdGlvbiBtYXkgaGF2ZSBiZWVuIHVwZGF0ZWQgYnkgY0RNL2NEVSxcbiAgICAgICAgICAvLyBJbiB3aGljaCBjYXNlIHdlIGRvbid0IG5lZWQgdG8gdHJpZ2dlciBhbm90aGVyIHJlbmRlcixcbiAgICAgICAgICAvLyBBbmQgd2UgZG9uJ3Qgd2FudCB0byB1cGRhdGUgc3RhdGUuaXNTY3JvbGxpbmcuXG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcmV2ZW50IFNhZmFyaSdzIGVsYXN0aWMgc2Nyb2xsaW5nIGZyb20gY2F1c2luZyB2aXN1YWwgc2hha2luZyB3aGVuIHNjcm9sbGluZyBwYXN0IGJvdW5kcy5cbiAgICAgICAgY29uc3Qgc2Nyb2xsT2Zmc2V0ID0gTWF0aC5tYXgoXG4gICAgICAgICAgMCxcbiAgICAgICAgICBNYXRoLm1pbihzY3JvbGxUb3AsIHNjcm9sbEhlaWdodCAtIGNsaWVudEhlaWdodClcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGlzU2Nyb2xsaW5nOiB0cnVlLFxuICAgICAgICAgIHNjcm9sbERpcmVjdGlvbjpcbiAgICAgICAgICAgIHByZXZTdGF0ZS5zY3JvbGxPZmZzZXQgPCBzY3JvbGxPZmZzZXQgPyAnZm9yd2FyZCcgOiAnYmFja3dhcmQnLFxuICAgICAgICAgIHNjcm9sbE9mZnNldCxcbiAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IGZhbHNlLFxuICAgICAgICB9O1xuICAgICAgfSwgdGhpcy5fcmVzZXRJc1Njcm9sbGluZ0RlYm91bmNlZCk7XG4gICAgfTtcblxuICAgIF9vdXRlclJlZlNldHRlciA9IChyZWY6IGFueSk6IHZvaWQgPT4ge1xuICAgICAgY29uc3QgeyBvdXRlclJlZiB9ID0gdGhpcy5wcm9wcztcblxuICAgICAgdGhpcy5fb3V0ZXJSZWYgPSAoKHJlZjogYW55KTogSFRNTERpdkVsZW1lbnQpO1xuXG4gICAgICBpZiAodHlwZW9mIG91dGVyUmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIG91dGVyUmVmKHJlZik7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBvdXRlclJlZiAhPSBudWxsICYmXG4gICAgICAgIHR5cGVvZiBvdXRlclJlZiA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgb3V0ZXJSZWYuaGFzT3duUHJvcGVydHkoJ2N1cnJlbnQnKVxuICAgICAgKSB7XG4gICAgICAgIG91dGVyUmVmLmN1cnJlbnQgPSByZWY7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9yZXNldElzU2Nyb2xsaW5nRGVib3VuY2VkID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgIT09IG51bGwpIHtcbiAgICAgICAgY2FuY2VsVGltZW91dCh0aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCA9IHJlcXVlc3RUaW1lb3V0KFxuICAgICAgICB0aGlzLl9yZXNldElzU2Nyb2xsaW5nLFxuICAgICAgICBJU19TQ1JPTExJTkdfREVCT1VOQ0VfSU5URVJWQUxcbiAgICAgICk7XG4gICAgfTtcblxuICAgIF9yZXNldElzU2Nyb2xsaW5nID0gKCkgPT4ge1xuICAgICAgdGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCA9IG51bGw7XG5cbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBpc1Njcm9sbGluZzogZmFsc2UgfSwgKCkgPT4ge1xuICAgICAgICAvLyBDbGVhciBzdHlsZSBjYWNoZSBhZnRlciBzdGF0ZSB1cGRhdGUgaGFzIGJlZW4gY29tbWl0dGVkLlxuICAgICAgICAvLyBUaGlzIHdheSB3ZSBkb24ndCBicmVhayBwdXJlIHNDVSBmb3IgaXRlbXMgdGhhdCBkb24ndCB1c2UgaXNTY3JvbGxpbmcgcGFyYW0uXG4gICAgICAgIHRoaXMuX2dldEl0ZW1TdHlsZUNhY2hlKC0xLCBudWxsKTtcbiAgICAgIH0pO1xuICAgIH07XG4gIH07XG59XG5cbi8vIE5PVEU6IEkgY29uc2lkZXJlZCBmdXJ0aGVyIHdyYXBwaW5nIGluZGl2aWR1YWwgaXRlbXMgd2l0aCBhIHB1cmUgTGlzdEl0ZW0gY29tcG9uZW50LlxuLy8gVGhpcyB3b3VsZCBhdm9pZCBldmVyIGNhbGxpbmcgdGhlIHJlbmRlciBmdW5jdGlvbiBmb3IgdGhlIHNhbWUgaW5kZXggbW9yZSB0aGFuIG9uY2UsXG4vLyBCdXQgaXQgd291bGQgYWxzbyBhZGQgdGhlIG92ZXJoZWFkIG9mIGEgbG90IG9mIGNvbXBvbmVudHMvZmliZXJzLlxuLy8gSSBhc3N1bWUgcGVvcGxlIGFscmVhZHkgZG8gdGhpcyAocmVuZGVyIGZ1bmN0aW9uIHJldHVybmluZyBhIGNsYXNzIGNvbXBvbmVudCksXG4vLyBTbyBteSBkb2luZyBpdCB3b3VsZCBqdXN0IHVubmVjZXNzYXJpbHkgZG91YmxlIHRoZSB3cmFwcGVycy5cblxuY29uc3QgdmFsaWRhdGVTaGFyZWRQcm9wcyA9IChcbiAge1xuICAgIGNoaWxkcmVuLFxuICAgIGRpcmVjdGlvbixcbiAgICBoZWlnaHQsXG4gICAgbGF5b3V0LFxuICAgIGlubmVyVGFnTmFtZSxcbiAgICBvdXRlclRhZ05hbWUsXG4gICAgd2lkdGgsXG4gIH06IFByb3BzPGFueT4sXG4gIHsgaW5zdGFuY2UgfTogU3RhdGVcbik6IHZvaWQgPT4ge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmIChpbm5lclRhZ05hbWUgIT0gbnVsbCB8fCBvdXRlclRhZ05hbWUgIT0gbnVsbCkge1xuICAgICAgaWYgKGRldldhcm5pbmdzVGFnTmFtZSAmJiAhZGV2V2FybmluZ3NUYWdOYW1lLmhhcyhpbnN0YW5jZSkpIHtcbiAgICAgICAgZGV2V2FybmluZ3NUYWdOYW1lLmFkZChpbnN0YW5jZSk7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAnVGhlIGlubmVyVGFnTmFtZSBhbmQgb3V0ZXJUYWdOYW1lIHByb3BzIGhhdmUgYmVlbiBkZXByZWNhdGVkLiAnICtcbiAgICAgICAgICAgICdQbGVhc2UgdXNlIHRoZSBpbm5lckVsZW1lbnRUeXBlIGFuZCBvdXRlckVsZW1lbnRUeXBlIHByb3BzIGluc3RlYWQuJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRPRE8gRGVwcmVjYXRlIGRpcmVjdGlvbiBcImhvcml6b250YWxcIlxuICAgIGNvbnN0IGlzSG9yaXpvbnRhbCA9IGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnIHx8IGxheW91dCA9PT0gJ2hvcml6b250YWwnO1xuXG4gICAgc3dpdGNoIChkaXJlY3Rpb24pIHtcbiAgICAgIGNhc2UgJ2hvcml6b250YWwnOlxuICAgICAgY2FzZSAndmVydGljYWwnOlxuICAgICAgICBpZiAoZGV2V2FybmluZ3NEaXJlY3Rpb24gJiYgIWRldldhcm5pbmdzRGlyZWN0aW9uLmhhcyhpbnN0YW5jZSkpIHtcbiAgICAgICAgICBkZXZXYXJuaW5nc0RpcmVjdGlvbi5hZGQoaW5zdGFuY2UpO1xuICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICdUaGUgZGlyZWN0aW9uIHByb3Agc2hvdWxkIGJlIGVpdGhlciBcImx0clwiIChkZWZhdWx0KSBvciBcInJ0bFwiLiAnICtcbiAgICAgICAgICAgICAgJ1BsZWFzZSB1c2UgdGhlIGxheW91dCBwcm9wIHRvIHNwZWNpZnkgXCJ2ZXJ0aWNhbFwiIChkZWZhdWx0KSBvciBcImhvcml6b250YWxcIiBvcmllbnRhdGlvbi4nXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2x0cic6XG4gICAgICBjYXNlICdydGwnOlxuICAgICAgICAvLyBWYWxpZCB2YWx1ZXNcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAnQW4gaW52YWxpZCBcImRpcmVjdGlvblwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICtcbiAgICAgICAgICAgICdWYWx1ZSBzaG91bGQgYmUgZWl0aGVyIFwibHRyXCIgb3IgXCJydGxcIi4gJyArXG4gICAgICAgICAgICBgXCIke2RpcmVjdGlvbn1cIiB3YXMgc3BlY2lmaWVkLmBcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGxheW91dCkge1xuICAgICAgY2FzZSAnaG9yaXpvbnRhbCc6XG4gICAgICBjYXNlICd2ZXJ0aWNhbCc6XG4gICAgICAgIC8vIFZhbGlkIHZhbHVlc1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICdBbiBpbnZhbGlkIFwibGF5b3V0XCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgK1xuICAgICAgICAgICAgJ1ZhbHVlIHNob3VsZCBiZSBlaXRoZXIgXCJob3Jpem9udGFsXCIgb3IgXCJ2ZXJ0aWNhbFwiLiAnICtcbiAgICAgICAgICAgIGBcIiR7bGF5b3V0fVwiIHdhcyBzcGVjaWZpZWQuYFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGlmIChjaGlsZHJlbiA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgJ0FuIGludmFsaWQgXCJjaGlsZHJlblwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICtcbiAgICAgICAgICAnVmFsdWUgc2hvdWxkIGJlIGEgUmVhY3QgY29tcG9uZW50LiAnICtcbiAgICAgICAgICBgXCIke2NoaWxkcmVuID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGNoaWxkcmVufVwiIHdhcyBzcGVjaWZpZWQuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoaXNIb3Jpem9udGFsICYmIHR5cGVvZiB3aWR0aCAhPT0gJ251bWJlcicpIHtcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAnQW4gaW52YWxpZCBcIndpZHRoXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgK1xuICAgICAgICAgICdIb3Jpem9udGFsIGxpc3RzIG11c3Qgc3BlY2lmeSBhIG51bWJlciBmb3Igd2lkdGguICcgK1xuICAgICAgICAgIGBcIiR7d2lkdGggPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2Ygd2lkdGh9XCIgd2FzIHNwZWNpZmllZC5gXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoIWlzSG9yaXpvbnRhbCAmJiB0eXBlb2YgaGVpZ2h0ICE9PSAnbnVtYmVyJykge1xuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICdBbiBpbnZhbGlkIFwiaGVpZ2h0XCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgK1xuICAgICAgICAgICdWZXJ0aWNhbCBsaXN0cyBtdXN0IHNwZWNpZnkgYSBudW1iZXIgZm9yIGhlaWdodC4gJyArXG4gICAgICAgICAgYFwiJHtoZWlnaHQgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgaGVpZ2h0fVwiIHdhcyBzcGVjaWZpZWQuYFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn07XG4iLCAiLy8gQGZsb3dcblxuaW1wb3J0IGNyZWF0ZUxpc3RDb21wb25lbnQgZnJvbSAnLi9jcmVhdGVMaXN0Q29tcG9uZW50JztcblxuaW1wb3J0IHR5cGUgeyBQcm9wcywgU2Nyb2xsVG9BbGlnbiB9IGZyb20gJy4vY3JlYXRlTGlzdENvbXBvbmVudCc7XG5cbmNvbnN0IERFRkFVTFRfRVNUSU1BVEVEX0lURU1fU0laRSA9IDUwO1xuXG50eXBlIFZhcmlhYmxlU2l6ZVByb3BzID0ge3xcbiAgZXN0aW1hdGVkSXRlbVNpemU6IG51bWJlcixcbiAgLi4uUHJvcHM8YW55Pixcbnx9O1xuXG50eXBlIGl0ZW1TaXplR2V0dGVyID0gKGluZGV4OiBudW1iZXIpID0+IG51bWJlcjtcblxudHlwZSBJdGVtTWV0YWRhdGEgPSB7fFxuICBvZmZzZXQ6IG51bWJlcixcbiAgc2l6ZTogbnVtYmVyLFxufH07XG50eXBlIEluc3RhbmNlUHJvcHMgPSB7fFxuICBpdGVtTWV0YWRhdGFNYXA6IHsgW2luZGV4OiBudW1iZXJdOiBJdGVtTWV0YWRhdGEgfSxcbiAgZXN0aW1hdGVkSXRlbVNpemU6IG51bWJlcixcbiAgbGFzdE1lYXN1cmVkSW5kZXg6IG51bWJlcixcbnx9O1xuXG5jb25zdCBnZXRJdGVtTWV0YWRhdGEgPSAoXG4gIHByb3BzOiBQcm9wczxhbnk+LFxuICBpbmRleDogbnVtYmVyLFxuICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzXG4pOiBJdGVtTWV0YWRhdGEgPT4ge1xuICBjb25zdCB7IGl0ZW1TaXplIH0gPSAoKHByb3BzOiBhbnkpOiBWYXJpYWJsZVNpemVQcm9wcyk7XG4gIGNvbnN0IHsgaXRlbU1ldGFkYXRhTWFwLCBsYXN0TWVhc3VyZWRJbmRleCB9ID0gaW5zdGFuY2VQcm9wcztcblxuICBpZiAoaW5kZXggPiBsYXN0TWVhc3VyZWRJbmRleCkge1xuICAgIGxldCBvZmZzZXQgPSAwO1xuICAgIGlmIChsYXN0TWVhc3VyZWRJbmRleCA+PSAwKSB7XG4gICAgICBjb25zdCBpdGVtTWV0YWRhdGEgPSBpdGVtTWV0YWRhdGFNYXBbbGFzdE1lYXN1cmVkSW5kZXhdO1xuICAgICAgb2Zmc2V0ID0gaXRlbU1ldGFkYXRhLm9mZnNldCArIGl0ZW1NZXRhZGF0YS5zaXplO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSBsYXN0TWVhc3VyZWRJbmRleCArIDE7IGkgPD0gaW5kZXg7IGkrKykge1xuICAgICAgbGV0IHNpemUgPSAoKGl0ZW1TaXplOiBhbnkpOiBpdGVtU2l6ZUdldHRlcikoaSk7XG5cbiAgICAgIGl0ZW1NZXRhZGF0YU1hcFtpXSA9IHtcbiAgICAgICAgb2Zmc2V0LFxuICAgICAgICBzaXplLFxuICAgICAgfTtcblxuICAgICAgb2Zmc2V0ICs9IHNpemU7XG4gICAgfVxuXG4gICAgaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRJbmRleCA9IGluZGV4O1xuICB9XG5cbiAgcmV0dXJuIGl0ZW1NZXRhZGF0YU1hcFtpbmRleF07XG59O1xuXG5jb25zdCBmaW5kTmVhcmVzdEl0ZW0gPSAoXG4gIHByb3BzOiBQcm9wczxhbnk+LFxuICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzLFxuICBvZmZzZXQ6IG51bWJlclxuKSA9PiB7XG4gIGNvbnN0IHsgaXRlbU1ldGFkYXRhTWFwLCBsYXN0TWVhc3VyZWRJbmRleCB9ID0gaW5zdGFuY2VQcm9wcztcblxuICBjb25zdCBsYXN0TWVhc3VyZWRJdGVtT2Zmc2V0ID1cbiAgICBsYXN0TWVhc3VyZWRJbmRleCA+IDAgPyBpdGVtTWV0YWRhdGFNYXBbbGFzdE1lYXN1cmVkSW5kZXhdLm9mZnNldCA6IDA7XG5cbiAgaWYgKGxhc3RNZWFzdXJlZEl0ZW1PZmZzZXQgPj0gb2Zmc2V0KSB7XG4gICAgLy8gSWYgd2UndmUgYWxyZWFkeSBtZWFzdXJlZCBpdGVtcyB3aXRoaW4gdGhpcyByYW5nZSBqdXN0IHVzZSBhIGJpbmFyeSBzZWFyY2ggYXMgaXQncyBmYXN0ZXIuXG4gICAgcmV0dXJuIGZpbmROZWFyZXN0SXRlbUJpbmFyeVNlYXJjaChcbiAgICAgIHByb3BzLFxuICAgICAgaW5zdGFuY2VQcm9wcyxcbiAgICAgIGxhc3RNZWFzdXJlZEluZGV4LFxuICAgICAgMCxcbiAgICAgIG9mZnNldFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgLy8gSWYgd2UgaGF2ZW4ndCB5ZXQgbWVhc3VyZWQgdGhpcyBoaWdoLCBmYWxsYmFjayB0byBhbiBleHBvbmVudGlhbCBzZWFyY2ggd2l0aCBhbiBpbm5lciBiaW5hcnkgc2VhcmNoLlxuICAgIC8vIFRoZSBleHBvbmVudGlhbCBzZWFyY2ggYXZvaWRzIHByZS1jb21wdXRpbmcgc2l6ZXMgZm9yIHRoZSBmdWxsIHNldCBvZiBpdGVtcyBhcyBhIGJpbmFyeSBzZWFyY2ggd291bGQuXG4gICAgLy8gVGhlIG92ZXJhbGwgY29tcGxleGl0eSBmb3IgdGhpcyBhcHByb2FjaCBpcyBPKGxvZyBuKS5cbiAgICByZXR1cm4gZmluZE5lYXJlc3RJdGVtRXhwb25lbnRpYWxTZWFyY2goXG4gICAgICBwcm9wcyxcbiAgICAgIGluc3RhbmNlUHJvcHMsXG4gICAgICBNYXRoLm1heCgwLCBsYXN0TWVhc3VyZWRJbmRleCksXG4gICAgICBvZmZzZXRcbiAgICApO1xuICB9XG59O1xuXG5jb25zdCBmaW5kTmVhcmVzdEl0ZW1CaW5hcnlTZWFyY2ggPSAoXG4gIHByb3BzOiBQcm9wczxhbnk+LFxuICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzLFxuICBoaWdoOiBudW1iZXIsXG4gIGxvdzogbnVtYmVyLFxuICBvZmZzZXQ6IG51bWJlclxuKTogbnVtYmVyID0+IHtcbiAgd2hpbGUgKGxvdyA8PSBoaWdoKSB7XG4gICAgY29uc3QgbWlkZGxlID0gbG93ICsgTWF0aC5mbG9vcigoaGlnaCAtIGxvdykgLyAyKTtcbiAgICBjb25zdCBjdXJyZW50T2Zmc2V0ID0gZ2V0SXRlbU1ldGFkYXRhKHByb3BzLCBtaWRkbGUsIGluc3RhbmNlUHJvcHMpLm9mZnNldDtcblxuICAgIGlmIChjdXJyZW50T2Zmc2V0ID09PSBvZmZzZXQpIHtcbiAgICAgIHJldHVybiBtaWRkbGU7XG4gICAgfSBlbHNlIGlmIChjdXJyZW50T2Zmc2V0IDwgb2Zmc2V0KSB7XG4gICAgICBsb3cgPSBtaWRkbGUgKyAxO1xuICAgIH0gZWxzZSBpZiAoY3VycmVudE9mZnNldCA+IG9mZnNldCkge1xuICAgICAgaGlnaCA9IG1pZGRsZSAtIDE7XG4gICAgfVxuICB9XG5cbiAgaWYgKGxvdyA+IDApIHtcbiAgICByZXR1cm4gbG93IC0gMTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gMDtcbiAgfVxufTtcblxuY29uc3QgZmluZE5lYXJlc3RJdGVtRXhwb25lbnRpYWxTZWFyY2ggPSAoXG4gIHByb3BzOiBQcm9wczxhbnk+LFxuICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzLFxuICBpbmRleDogbnVtYmVyLFxuICBvZmZzZXQ6IG51bWJlclxuKTogbnVtYmVyID0+IHtcbiAgY29uc3QgeyBpdGVtQ291bnQgfSA9IHByb3BzO1xuICBsZXQgaW50ZXJ2YWwgPSAxO1xuXG4gIHdoaWxlIChcbiAgICBpbmRleCA8IGl0ZW1Db3VudCAmJlxuICAgIGdldEl0ZW1NZXRhZGF0YShwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpLm9mZnNldCA8IG9mZnNldFxuICApIHtcbiAgICBpbmRleCArPSBpbnRlcnZhbDtcbiAgICBpbnRlcnZhbCAqPSAyO1xuICB9XG5cbiAgcmV0dXJuIGZpbmROZWFyZXN0SXRlbUJpbmFyeVNlYXJjaChcbiAgICBwcm9wcyxcbiAgICBpbnN0YW5jZVByb3BzLFxuICAgIE1hdGgubWluKGluZGV4LCBpdGVtQ291bnQgLSAxKSxcbiAgICBNYXRoLmZsb29yKGluZGV4IC8gMiksXG4gICAgb2Zmc2V0XG4gICk7XG59O1xuXG5jb25zdCBnZXRFc3RpbWF0ZWRUb3RhbFNpemUgPSAoXG4gIHsgaXRlbUNvdW50IH06IFByb3BzPGFueT4sXG4gIHsgaXRlbU1ldGFkYXRhTWFwLCBlc3RpbWF0ZWRJdGVtU2l6ZSwgbGFzdE1lYXN1cmVkSW5kZXggfTogSW5zdGFuY2VQcm9wc1xuKSA9PiB7XG4gIGxldCB0b3RhbFNpemVPZk1lYXN1cmVkSXRlbXMgPSAwO1xuXG4gIC8vIEVkZ2UgY2FzZSBjaGVjayBmb3Igd2hlbiB0aGUgbnVtYmVyIG9mIGl0ZW1zIGRlY3JlYXNlcyB3aGlsZSBhIHNjcm9sbCBpcyBpbiBwcm9ncmVzcy5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2J2YXVnaG4vcmVhY3Qtd2luZG93L3B1bGwvMTM4XG4gIGlmIChsYXN0TWVhc3VyZWRJbmRleCA+PSBpdGVtQ291bnQpIHtcbiAgICBsYXN0TWVhc3VyZWRJbmRleCA9IGl0ZW1Db3VudCAtIDE7XG4gIH1cblxuICBpZiAobGFzdE1lYXN1cmVkSW5kZXggPj0gMCkge1xuICAgIGNvbnN0IGl0ZW1NZXRhZGF0YSA9IGl0ZW1NZXRhZGF0YU1hcFtsYXN0TWVhc3VyZWRJbmRleF07XG4gICAgdG90YWxTaXplT2ZNZWFzdXJlZEl0ZW1zID0gaXRlbU1ldGFkYXRhLm9mZnNldCArIGl0ZW1NZXRhZGF0YS5zaXplO1xuICB9XG5cbiAgY29uc3QgbnVtVW5tZWFzdXJlZEl0ZW1zID0gaXRlbUNvdW50IC0gbGFzdE1lYXN1cmVkSW5kZXggLSAxO1xuICBjb25zdCB0b3RhbFNpemVPZlVubWVhc3VyZWRJdGVtcyA9IG51bVVubWVhc3VyZWRJdGVtcyAqIGVzdGltYXRlZEl0ZW1TaXplO1xuXG4gIHJldHVybiB0b3RhbFNpemVPZk1lYXN1cmVkSXRlbXMgKyB0b3RhbFNpemVPZlVubWVhc3VyZWRJdGVtcztcbn07XG5cbmNvbnN0IFZhcmlhYmxlU2l6ZUxpc3QgPSBjcmVhdGVMaXN0Q29tcG9uZW50KHtcbiAgZ2V0SXRlbU9mZnNldDogKFxuICAgIHByb3BzOiBQcm9wczxhbnk+LFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wc1xuICApOiBudW1iZXIgPT4gZ2V0SXRlbU1ldGFkYXRhKHByb3BzLCBpbmRleCwgaW5zdGFuY2VQcm9wcykub2Zmc2V0LFxuXG4gIGdldEl0ZW1TaXplOiAoXG4gICAgcHJvcHM6IFByb3BzPGFueT4sXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzXG4gICk6IG51bWJlciA9PiBpbnN0YW5jZVByb3BzLml0ZW1NZXRhZGF0YU1hcFtpbmRleF0uc2l6ZSxcblxuICBnZXRFc3RpbWF0ZWRUb3RhbFNpemUsXG5cbiAgZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQ6IChcbiAgICBwcm9wczogUHJvcHM8YW55PixcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGFsaWduOiBTY3JvbGxUb0FsaWduLFxuICAgIHNjcm9sbE9mZnNldDogbnVtYmVyLFxuICAgIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHMsXG4gICAgc2Nyb2xsYmFyU2l6ZTogbnVtYmVyXG4gICk6IG51bWJlciA9PiB7XG4gICAgY29uc3QgeyBkaXJlY3Rpb24sIGhlaWdodCwgbGF5b3V0LCB3aWR0aCB9ID0gcHJvcHM7XG5cbiAgICAvLyBUT0RPIERlcHJlY2F0ZSBkaXJlY3Rpb24gXCJob3Jpem9udGFsXCJcbiAgICBjb25zdCBpc0hvcml6b250YWwgPSBkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJztcbiAgICBjb25zdCBzaXplID0gKCgoaXNIb3Jpem9udGFsID8gd2lkdGggOiBoZWlnaHQpOiBhbnkpOiBudW1iZXIpO1xuICAgIGNvbnN0IGl0ZW1NZXRhZGF0YSA9IGdldEl0ZW1NZXRhZGF0YShwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpO1xuXG4gICAgLy8gR2V0IGVzdGltYXRlZCB0b3RhbCBzaXplIGFmdGVyIEl0ZW1NZXRhZGF0YSBpcyBjb21wdXRlZCxcbiAgICAvLyBUbyBlbnN1cmUgaXQgcmVmbGVjdHMgYWN0dWFsIG1lYXN1cmVtZW50cyBpbnN0ZWFkIG9mIGp1c3QgZXN0aW1hdGVzLlxuICAgIGNvbnN0IGVzdGltYXRlZFRvdGFsU2l6ZSA9IGdldEVzdGltYXRlZFRvdGFsU2l6ZShwcm9wcywgaW5zdGFuY2VQcm9wcyk7XG5cbiAgICBjb25zdCBtYXhPZmZzZXQgPSBNYXRoLm1heChcbiAgICAgIDAsXG4gICAgICBNYXRoLm1pbihlc3RpbWF0ZWRUb3RhbFNpemUgLSBzaXplLCBpdGVtTWV0YWRhdGEub2Zmc2V0KVxuICAgICk7XG4gICAgY29uc3QgbWluT2Zmc2V0ID0gTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgaXRlbU1ldGFkYXRhLm9mZnNldCAtIHNpemUgKyBpdGVtTWV0YWRhdGEuc2l6ZSArIHNjcm9sbGJhclNpemVcbiAgICApO1xuXG4gICAgaWYgKGFsaWduID09PSAnc21hcnQnKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHNjcm9sbE9mZnNldCA+PSBtaW5PZmZzZXQgLSBzaXplICYmXG4gICAgICAgIHNjcm9sbE9mZnNldCA8PSBtYXhPZmZzZXQgKyBzaXplXG4gICAgICApIHtcbiAgICAgICAgYWxpZ24gPSAnYXV0byc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhbGlnbiA9ICdjZW50ZXInO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN3aXRjaCAoYWxpZ24pIHtcbiAgICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcbiAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICBjYXNlICdjZW50ZXInOlxuICAgICAgICByZXR1cm4gTWF0aC5yb3VuZChtaW5PZmZzZXQgKyAobWF4T2Zmc2V0IC0gbWluT2Zmc2V0KSAvIDIpO1xuICAgICAgY2FzZSAnYXV0byc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAoc2Nyb2xsT2Zmc2V0ID49IG1pbk9mZnNldCAmJiBzY3JvbGxPZmZzZXQgPD0gbWF4T2Zmc2V0KSB7XG4gICAgICAgICAgcmV0dXJuIHNjcm9sbE9mZnNldDtcbiAgICAgICAgfSBlbHNlIGlmIChzY3JvbGxPZmZzZXQgPCBtaW5PZmZzZXQpIHtcbiAgICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBtYXhPZmZzZXQ7XG4gICAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgZ2V0U3RhcnRJbmRleEZvck9mZnNldDogKFxuICAgIHByb3BzOiBQcm9wczxhbnk+LFxuICAgIG9mZnNldDogbnVtYmVyLFxuICAgIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHNcbiAgKTogbnVtYmVyID0+IGZpbmROZWFyZXN0SXRlbShwcm9wcywgaW5zdGFuY2VQcm9wcywgb2Zmc2V0KSxcblxuICBnZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4OiAoXG4gICAgcHJvcHM6IFByb3BzPGFueT4sXG4gICAgc3RhcnRJbmRleDogbnVtYmVyLFxuICAgIHNjcm9sbE9mZnNldDogbnVtYmVyLFxuICAgIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHNcbiAgKTogbnVtYmVyID0+IHtcbiAgICBjb25zdCB7IGRpcmVjdGlvbiwgaGVpZ2h0LCBpdGVtQ291bnQsIGxheW91dCwgd2lkdGggfSA9IHByb3BzO1xuXG4gICAgLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9uIFwiaG9yaXpvbnRhbFwiXG4gICAgY29uc3QgaXNIb3Jpem9udGFsID0gZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgbGF5b3V0ID09PSAnaG9yaXpvbnRhbCc7XG4gICAgY29uc3Qgc2l6ZSA9ICgoKGlzSG9yaXpvbnRhbCA/IHdpZHRoIDogaGVpZ2h0KTogYW55KTogbnVtYmVyKTtcbiAgICBjb25zdCBpdGVtTWV0YWRhdGEgPSBnZXRJdGVtTWV0YWRhdGEocHJvcHMsIHN0YXJ0SW5kZXgsIGluc3RhbmNlUHJvcHMpO1xuICAgIGNvbnN0IG1heE9mZnNldCA9IHNjcm9sbE9mZnNldCArIHNpemU7XG5cbiAgICBsZXQgb2Zmc2V0ID0gaXRlbU1ldGFkYXRhLm9mZnNldCArIGl0ZW1NZXRhZGF0YS5zaXplO1xuICAgIGxldCBzdG9wSW5kZXggPSBzdGFydEluZGV4O1xuXG4gICAgd2hpbGUgKHN0b3BJbmRleCA8IGl0ZW1Db3VudCAtIDEgJiYgb2Zmc2V0IDwgbWF4T2Zmc2V0KSB7XG4gICAgICBzdG9wSW5kZXgrKztcbiAgICAgIG9mZnNldCArPSBnZXRJdGVtTWV0YWRhdGEocHJvcHMsIHN0b3BJbmRleCwgaW5zdGFuY2VQcm9wcykuc2l6ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RvcEluZGV4O1xuICB9LFxuXG4gIGluaXRJbnN0YW5jZVByb3BzKHByb3BzOiBQcm9wczxhbnk+LCBpbnN0YW5jZTogYW55KTogSW5zdGFuY2VQcm9wcyB7XG4gICAgY29uc3QgeyBlc3RpbWF0ZWRJdGVtU2l6ZSB9ID0gKChwcm9wczogYW55KTogVmFyaWFibGVTaXplUHJvcHMpO1xuXG4gICAgY29uc3QgaW5zdGFuY2VQcm9wcyA9IHtcbiAgICAgIGl0ZW1NZXRhZGF0YU1hcDoge30sXG4gICAgICBlc3RpbWF0ZWRJdGVtU2l6ZTogZXN0aW1hdGVkSXRlbVNpemUgfHwgREVGQVVMVF9FU1RJTUFURURfSVRFTV9TSVpFLFxuICAgICAgbGFzdE1lYXN1cmVkSW5kZXg6IC0xLFxuICAgIH07XG5cbiAgICBpbnN0YW5jZS5yZXNldEFmdGVySW5kZXggPSAoXG4gICAgICBpbmRleDogbnVtYmVyLFxuICAgICAgc2hvdWxkRm9yY2VVcGRhdGU/OiBib29sZWFuID0gdHJ1ZVxuICAgICkgPT4ge1xuICAgICAgaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRJbmRleCA9IE1hdGgubWluKFxuICAgICAgICBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZEluZGV4LFxuICAgICAgICBpbmRleCAtIDFcbiAgICAgICk7XG5cbiAgICAgIC8vIFdlIGNvdWxkIHBvdGVudGlhbGx5IG9wdGltaXplIGZ1cnRoZXIgYnkgb25seSBldmljdGluZyBzdHlsZXMgYWZ0ZXIgdGhpcyBpbmRleCxcbiAgICAgIC8vIEJ1dCBzaW5jZSBzdHlsZXMgYXJlIG9ubHkgY2FjaGVkIHdoaWxlIHNjcm9sbGluZyBpcyBpbiBwcm9ncmVzcy1cbiAgICAgIC8vIEl0IHNlZW1zIGFuIHVubmVjZXNzYXJ5IG9wdGltaXphdGlvbi5cbiAgICAgIC8vIEl0J3MgdW5saWtlbHkgdGhhdCByZXNldEFmdGVySW5kZXgoKSB3aWxsIGJlIGNhbGxlZCB3aGlsZSBhIHVzZXIgaXMgc2Nyb2xsaW5nLlxuICAgICAgaW5zdGFuY2UuX2dldEl0ZW1TdHlsZUNhY2hlKC0xKTtcblxuICAgICAgaWYgKHNob3VsZEZvcmNlVXBkYXRlKSB7XG4gICAgICAgIGluc3RhbmNlLmZvcmNlVXBkYXRlKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBpbnN0YW5jZVByb3BzO1xuICB9LFxuXG4gIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2U6IGZhbHNlLFxuXG4gIHZhbGlkYXRlUHJvcHM6ICh7IGl0ZW1TaXplIH06IFByb3BzPGFueT4pOiB2b2lkID0+IHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKHR5cGVvZiBpdGVtU2l6ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAnQW4gaW52YWxpZCBcIml0ZW1TaXplXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgK1xuICAgICAgICAgICAgJ1ZhbHVlIHNob3VsZCBiZSBhIGZ1bmN0aW9uLiAnICtcbiAgICAgICAgICAgIGBcIiR7aXRlbVNpemUgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgaXRlbVNpemV9XCIgd2FzIHNwZWNpZmllZC5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9LFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IFZhcmlhYmxlU2l6ZUxpc3Q7XG4iLCAiLy8gQGZsb3dcblxuaW1wb3J0IGNyZWF0ZUdyaWRDb21wb25lbnQgZnJvbSAnLi9jcmVhdGVHcmlkQ29tcG9uZW50JztcblxuaW1wb3J0IHR5cGUgeyBQcm9wcywgU2Nyb2xsVG9BbGlnbiB9IGZyb20gJy4vY3JlYXRlR3JpZENvbXBvbmVudCc7XG5cbmNvbnN0IEZpeGVkU2l6ZUdyaWQgPSBjcmVhdGVHcmlkQ29tcG9uZW50KHtcbiAgZ2V0Q29sdW1uT2Zmc2V0OiAoeyBjb2x1bW5XaWR0aCB9OiBQcm9wczxhbnk+LCBpbmRleDogbnVtYmVyKTogbnVtYmVyID0+XG4gICAgaW5kZXggKiAoKGNvbHVtbldpZHRoOiBhbnkpOiBudW1iZXIpLFxuXG4gIGdldENvbHVtbldpZHRoOiAoeyBjb2x1bW5XaWR0aCB9OiBQcm9wczxhbnk+LCBpbmRleDogbnVtYmVyKTogbnVtYmVyID0+XG4gICAgKChjb2x1bW5XaWR0aDogYW55KTogbnVtYmVyKSxcblxuICBnZXRSb3dPZmZzZXQ6ICh7IHJvd0hlaWdodCB9OiBQcm9wczxhbnk+LCBpbmRleDogbnVtYmVyKTogbnVtYmVyID0+XG4gICAgaW5kZXggKiAoKHJvd0hlaWdodDogYW55KTogbnVtYmVyKSxcblxuICBnZXRSb3dIZWlnaHQ6ICh7IHJvd0hlaWdodCB9OiBQcm9wczxhbnk+LCBpbmRleDogbnVtYmVyKTogbnVtYmVyID0+XG4gICAgKChyb3dIZWlnaHQ6IGFueSk6IG51bWJlciksXG5cbiAgZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQ6ICh7IHJvd0NvdW50LCByb3dIZWlnaHQgfTogUHJvcHM8YW55PikgPT5cbiAgICAoKHJvd0hlaWdodDogYW55KTogbnVtYmVyKSAqIHJvd0NvdW50LFxuXG4gIGdldEVzdGltYXRlZFRvdGFsV2lkdGg6ICh7IGNvbHVtbkNvdW50LCBjb2x1bW5XaWR0aCB9OiBQcm9wczxhbnk+KSA9PlxuICAgICgoY29sdW1uV2lkdGg6IGFueSk6IG51bWJlcikgKiBjb2x1bW5Db3VudCxcblxuICBnZXRPZmZzZXRGb3JDb2x1bW5BbmRBbGlnbm1lbnQ6IChcbiAgICB7IGNvbHVtbkNvdW50LCBjb2x1bW5XaWR0aCwgd2lkdGggfTogUHJvcHM8YW55PixcbiAgICBjb2x1bW5JbmRleDogbnVtYmVyLFxuICAgIGFsaWduOiBTY3JvbGxUb0FsaWduLFxuICAgIHNjcm9sbExlZnQ6IG51bWJlcixcbiAgICBpbnN0YW5jZVByb3BzOiB0eXBlb2YgdW5kZWZpbmVkLFxuICAgIHNjcm9sbGJhclNpemU6IG51bWJlclxuICApOiBudW1iZXIgPT4ge1xuICAgIGNvbnN0IGxhc3RDb2x1bW5PZmZzZXQgPSBNYXRoLm1heChcbiAgICAgIDAsXG4gICAgICBjb2x1bW5Db3VudCAqICgoY29sdW1uV2lkdGg6IGFueSk6IG51bWJlcikgLSB3aWR0aFxuICAgICk7XG4gICAgY29uc3QgbWF4T2Zmc2V0ID0gTWF0aC5taW4oXG4gICAgICBsYXN0Q29sdW1uT2Zmc2V0LFxuICAgICAgY29sdW1uSW5kZXggKiAoKGNvbHVtbldpZHRoOiBhbnkpOiBudW1iZXIpXG4gICAgKTtcbiAgICBjb25zdCBtaW5PZmZzZXQgPSBNYXRoLm1heChcbiAgICAgIDAsXG4gICAgICBjb2x1bW5JbmRleCAqICgoY29sdW1uV2lkdGg6IGFueSk6IG51bWJlcikgLVxuICAgICAgICB3aWR0aCArXG4gICAgICAgIHNjcm9sbGJhclNpemUgK1xuICAgICAgICAoKGNvbHVtbldpZHRoOiBhbnkpOiBudW1iZXIpXG4gICAgKTtcblxuICAgIGlmIChhbGlnbiA9PT0gJ3NtYXJ0Jykge1xuICAgICAgaWYgKHNjcm9sbExlZnQgPj0gbWluT2Zmc2V0IC0gd2lkdGggJiYgc2Nyb2xsTGVmdCA8PSBtYXhPZmZzZXQgKyB3aWR0aCkge1xuICAgICAgICBhbGlnbiA9ICdhdXRvJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFsaWduID0gJ2NlbnRlcic7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dpdGNoIChhbGlnbikge1xuICAgICAgY2FzZSAnc3RhcnQnOlxuICAgICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcbiAgICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgICAgIC8vIFwiQ2VudGVyZWRcIiBvZmZzZXQgaXMgdXN1YWxseSB0aGUgYXZlcmFnZSBvZiB0aGUgbWluIGFuZCBtYXguXG4gICAgICAgIC8vIEJ1dCBuZWFyIHRoZSBlZGdlcyBvZiB0aGUgbGlzdCwgdGhpcyBkb2Vzbid0IGhvbGQgdHJ1ZS5cbiAgICAgICAgY29uc3QgbWlkZGxlT2Zmc2V0ID0gTWF0aC5yb3VuZChcbiAgICAgICAgICBtaW5PZmZzZXQgKyAobWF4T2Zmc2V0IC0gbWluT2Zmc2V0KSAvIDJcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKG1pZGRsZU9mZnNldCA8IE1hdGguY2VpbCh3aWR0aCAvIDIpKSB7XG4gICAgICAgICAgcmV0dXJuIDA7IC8vIG5lYXIgdGhlIGJlZ2lubmluZ1xuICAgICAgICB9IGVsc2UgaWYgKG1pZGRsZU9mZnNldCA+IGxhc3RDb2x1bW5PZmZzZXQgKyBNYXRoLmZsb29yKHdpZHRoIC8gMikpIHtcbiAgICAgICAgICByZXR1cm4gbGFzdENvbHVtbk9mZnNldDsgLy8gbmVhciB0aGUgZW5kXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG1pZGRsZU9mZnNldDtcbiAgICAgICAgfVxuICAgICAgY2FzZSAnYXV0byc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAoc2Nyb2xsTGVmdCA+PSBtaW5PZmZzZXQgJiYgc2Nyb2xsTGVmdCA8PSBtYXhPZmZzZXQpIHtcbiAgICAgICAgICByZXR1cm4gc2Nyb2xsTGVmdDtcbiAgICAgICAgfSBlbHNlIGlmIChtaW5PZmZzZXQgPiBtYXhPZmZzZXQpIHtcbiAgICAgICAgICAvLyBCZWNhdXNlIHdlIG9ubHkgdGFrZSBpbnRvIGFjY291bnQgdGhlIHNjcm9sbGJhciBzaXplIHdoZW4gY2FsY3VsYXRpbmcgbWluT2Zmc2V0XG4gICAgICAgICAgLy8gdGhpcyB2YWx1ZSBjYW4gYmUgbGFyZ2VyIHRoYW4gbWF4T2Zmc2V0IHdoZW4gYXQgdGhlIGVuZCBvZiB0aGUgbGlzdFxuICAgICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsTGVmdCA8IG1pbk9mZnNldCkge1xuICAgICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcbiAgICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBnZXRPZmZzZXRGb3JSb3dBbmRBbGlnbm1lbnQ6IChcbiAgICB7IHJvd0hlaWdodCwgaGVpZ2h0LCByb3dDb3VudCB9OiBQcm9wczxhbnk+LFxuICAgIHJvd0luZGV4OiBudW1iZXIsXG4gICAgYWxpZ246IFNjcm9sbFRvQWxpZ24sXG4gICAgc2Nyb2xsVG9wOiBudW1iZXIsXG4gICAgaW5zdGFuY2VQcm9wczogdHlwZW9mIHVuZGVmaW5lZCxcbiAgICBzY3JvbGxiYXJTaXplOiBudW1iZXJcbiAgKTogbnVtYmVyID0+IHtcbiAgICBjb25zdCBsYXN0Um93T2Zmc2V0ID0gTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgcm93Q291bnQgKiAoKHJvd0hlaWdodDogYW55KTogbnVtYmVyKSAtIGhlaWdodFxuICAgICk7XG4gICAgY29uc3QgbWF4T2Zmc2V0ID0gTWF0aC5taW4oXG4gICAgICBsYXN0Um93T2Zmc2V0LFxuICAgICAgcm93SW5kZXggKiAoKHJvd0hlaWdodDogYW55KTogbnVtYmVyKVxuICAgICk7XG4gICAgY29uc3QgbWluT2Zmc2V0ID0gTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgcm93SW5kZXggKiAoKHJvd0hlaWdodDogYW55KTogbnVtYmVyKSAtXG4gICAgICAgIGhlaWdodCArXG4gICAgICAgIHNjcm9sbGJhclNpemUgK1xuICAgICAgICAoKHJvd0hlaWdodDogYW55KTogbnVtYmVyKVxuICAgICk7XG5cbiAgICBpZiAoYWxpZ24gPT09ICdzbWFydCcpIHtcbiAgICAgIGlmIChzY3JvbGxUb3AgPj0gbWluT2Zmc2V0IC0gaGVpZ2h0ICYmIHNjcm9sbFRvcCA8PSBtYXhPZmZzZXQgKyBoZWlnaHQpIHtcbiAgICAgICAgYWxpZ24gPSAnYXV0byc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhbGlnbiA9ICdjZW50ZXInO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN3aXRjaCAoYWxpZ24pIHtcbiAgICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcbiAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICBjYXNlICdjZW50ZXInOlxuICAgICAgICAvLyBcIkNlbnRlcmVkXCIgb2Zmc2V0IGlzIHVzdWFsbHkgdGhlIGF2ZXJhZ2Ugb2YgdGhlIG1pbiBhbmQgbWF4LlxuICAgICAgICAvLyBCdXQgbmVhciB0aGUgZWRnZXMgb2YgdGhlIGxpc3QsIHRoaXMgZG9lc24ndCBob2xkIHRydWUuXG4gICAgICAgIGNvbnN0IG1pZGRsZU9mZnNldCA9IE1hdGgucm91bmQoXG4gICAgICAgICAgbWluT2Zmc2V0ICsgKG1heE9mZnNldCAtIG1pbk9mZnNldCkgLyAyXG4gICAgICAgICk7XG4gICAgICAgIGlmIChtaWRkbGVPZmZzZXQgPCBNYXRoLmNlaWwoaGVpZ2h0IC8gMikpIHtcbiAgICAgICAgICByZXR1cm4gMDsgLy8gbmVhciB0aGUgYmVnaW5uaW5nXG4gICAgICAgIH0gZWxzZSBpZiAobWlkZGxlT2Zmc2V0ID4gbGFzdFJvd09mZnNldCArIE1hdGguZmxvb3IoaGVpZ2h0IC8gMikpIHtcbiAgICAgICAgICByZXR1cm4gbGFzdFJvd09mZnNldDsgLy8gbmVhciB0aGUgZW5kXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG1pZGRsZU9mZnNldDtcbiAgICAgICAgfVxuICAgICAgY2FzZSAnYXV0byc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAoc2Nyb2xsVG9wID49IG1pbk9mZnNldCAmJiBzY3JvbGxUb3AgPD0gbWF4T2Zmc2V0KSB7XG4gICAgICAgICAgcmV0dXJuIHNjcm9sbFRvcDtcbiAgICAgICAgfSBlbHNlIGlmIChtaW5PZmZzZXQgPiBtYXhPZmZzZXQpIHtcbiAgICAgICAgICAvLyBCZWNhdXNlIHdlIG9ubHkgdGFrZSBpbnRvIGFjY291bnQgdGhlIHNjcm9sbGJhciBzaXplIHdoZW4gY2FsY3VsYXRpbmcgbWluT2Zmc2V0XG4gICAgICAgICAgLy8gdGhpcyB2YWx1ZSBjYW4gYmUgbGFyZ2VyIHRoYW4gbWF4T2Zmc2V0IHdoZW4gYXQgdGhlIGVuZCBvZiB0aGUgbGlzdFxuICAgICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsVG9wIDwgbWluT2Zmc2V0KSB7XG4gICAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuICAgICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGdldENvbHVtblN0YXJ0SW5kZXhGb3JPZmZzZXQ6IChcbiAgICB7IGNvbHVtbldpZHRoLCBjb2x1bW5Db3VudCB9OiBQcm9wczxhbnk+LFxuICAgIHNjcm9sbExlZnQ6IG51bWJlclxuICApOiBudW1iZXIgPT5cbiAgICBNYXRoLm1heChcbiAgICAgIDAsXG4gICAgICBNYXRoLm1pbihcbiAgICAgICAgY29sdW1uQ291bnQgLSAxLFxuICAgICAgICBNYXRoLmZsb29yKHNjcm9sbExlZnQgLyAoKGNvbHVtbldpZHRoOiBhbnkpOiBudW1iZXIpKVxuICAgICAgKVxuICAgICksXG5cbiAgZ2V0Q29sdW1uU3RvcEluZGV4Rm9yU3RhcnRJbmRleDogKFxuICAgIHsgY29sdW1uV2lkdGgsIGNvbHVtbkNvdW50LCB3aWR0aCB9OiBQcm9wczxhbnk+LFxuICAgIHN0YXJ0SW5kZXg6IG51bWJlcixcbiAgICBzY3JvbGxMZWZ0OiBudW1iZXJcbiAgKTogbnVtYmVyID0+IHtcbiAgICBjb25zdCBsZWZ0ID0gc3RhcnRJbmRleCAqICgoY29sdW1uV2lkdGg6IGFueSk6IG51bWJlcik7XG4gICAgY29uc3QgbnVtVmlzaWJsZUNvbHVtbnMgPSBNYXRoLmNlaWwoXG4gICAgICAod2lkdGggKyBzY3JvbGxMZWZ0IC0gbGVmdCkgLyAoKGNvbHVtbldpZHRoOiBhbnkpOiBudW1iZXIpXG4gICAgKTtcbiAgICByZXR1cm4gTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgTWF0aC5taW4oXG4gICAgICAgIGNvbHVtbkNvdW50IC0gMSxcbiAgICAgICAgc3RhcnRJbmRleCArIG51bVZpc2libGVDb2x1bW5zIC0gMSAvLyAtMSBpcyBiZWNhdXNlIHN0b3AgaW5kZXggaXMgaW5jbHVzaXZlXG4gICAgICApXG4gICAgKTtcbiAgfSxcblxuICBnZXRSb3dTdGFydEluZGV4Rm9yT2Zmc2V0OiAoXG4gICAgeyByb3dIZWlnaHQsIHJvd0NvdW50IH06IFByb3BzPGFueT4sXG4gICAgc2Nyb2xsVG9wOiBudW1iZXJcbiAgKTogbnVtYmVyID0+XG4gICAgTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgTWF0aC5taW4ocm93Q291bnQgLSAxLCBNYXRoLmZsb29yKHNjcm9sbFRvcCAvICgocm93SGVpZ2h0OiBhbnkpOiBudW1iZXIpKSlcbiAgICApLFxuXG4gIGdldFJvd1N0b3BJbmRleEZvclN0YXJ0SW5kZXg6IChcbiAgICB7IHJvd0hlaWdodCwgcm93Q291bnQsIGhlaWdodCB9OiBQcm9wczxhbnk+LFxuICAgIHN0YXJ0SW5kZXg6IG51bWJlcixcbiAgICBzY3JvbGxUb3A6IG51bWJlclxuICApOiBudW1iZXIgPT4ge1xuICAgIGNvbnN0IHRvcCA9IHN0YXJ0SW5kZXggKiAoKHJvd0hlaWdodDogYW55KTogbnVtYmVyKTtcbiAgICBjb25zdCBudW1WaXNpYmxlUm93cyA9IE1hdGguY2VpbChcbiAgICAgIChoZWlnaHQgKyBzY3JvbGxUb3AgLSB0b3ApIC8gKChyb3dIZWlnaHQ6IGFueSk6IG51bWJlcilcbiAgICApO1xuICAgIHJldHVybiBNYXRoLm1heChcbiAgICAgIDAsXG4gICAgICBNYXRoLm1pbihcbiAgICAgICAgcm93Q291bnQgLSAxLFxuICAgICAgICBzdGFydEluZGV4ICsgbnVtVmlzaWJsZVJvd3MgLSAxIC8vIC0xIGlzIGJlY2F1c2Ugc3RvcCBpbmRleCBpcyBpbmNsdXNpdmVcbiAgICAgIClcbiAgICApO1xuICB9LFxuXG4gIGluaXRJbnN0YW5jZVByb3BzKHByb3BzOiBQcm9wczxhbnk+KTogYW55IHtcbiAgICAvLyBOb29wXG4gIH0sXG5cbiAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZTogdHJ1ZSxcblxuICB2YWxpZGF0ZVByb3BzOiAoeyBjb2x1bW5XaWR0aCwgcm93SGVpZ2h0IH06IFByb3BzPGFueT4pOiB2b2lkID0+IHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKHR5cGVvZiBjb2x1bW5XaWR0aCAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgJ0FuIGludmFsaWQgXCJjb2x1bW5XaWR0aFwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICtcbiAgICAgICAgICAgICdWYWx1ZSBzaG91bGQgYmUgYSBudW1iZXIuICcgK1xuICAgICAgICAgICAgYFwiJHtcbiAgICAgICAgICAgICAgY29sdW1uV2lkdGggPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgY29sdW1uV2lkdGhcbiAgICAgICAgICAgIH1cIiB3YXMgc3BlY2lmaWVkLmBcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiByb3dIZWlnaHQgIT09ICdudW1iZXInKSB7XG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICdBbiBpbnZhbGlkIFwicm93SGVpZ2h0XCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgK1xuICAgICAgICAgICAgJ1ZhbHVlIHNob3VsZCBiZSBhIG51bWJlci4gJyArXG4gICAgICAgICAgICBgXCIke3Jvd0hlaWdodCA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiByb3dIZWlnaHR9XCIgd2FzIHNwZWNpZmllZC5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9LFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IEZpeGVkU2l6ZUdyaWQ7XG4iLCAiLy8gQGZsb3dcblxuaW1wb3J0IGNyZWF0ZUxpc3RDb21wb25lbnQgZnJvbSAnLi9jcmVhdGVMaXN0Q29tcG9uZW50JztcblxuaW1wb3J0IHR5cGUgeyBQcm9wcywgU2Nyb2xsVG9BbGlnbiB9IGZyb20gJy4vY3JlYXRlTGlzdENvbXBvbmVudCc7XG5cbnR5cGUgSW5zdGFuY2VQcm9wcyA9IGFueTtcblxuY29uc3QgRml4ZWRTaXplTGlzdCA9IGNyZWF0ZUxpc3RDb21wb25lbnQoe1xuICBnZXRJdGVtT2Zmc2V0OiAoeyBpdGVtU2l6ZSB9OiBQcm9wczxhbnk+LCBpbmRleDogbnVtYmVyKTogbnVtYmVyID0+XG4gICAgaW5kZXggKiAoKGl0ZW1TaXplOiBhbnkpOiBudW1iZXIpLFxuXG4gIGdldEl0ZW1TaXplOiAoeyBpdGVtU2l6ZSB9OiBQcm9wczxhbnk+LCBpbmRleDogbnVtYmVyKTogbnVtYmVyID0+XG4gICAgKChpdGVtU2l6ZTogYW55KTogbnVtYmVyKSxcblxuICBnZXRFc3RpbWF0ZWRUb3RhbFNpemU6ICh7IGl0ZW1Db3VudCwgaXRlbVNpemUgfTogUHJvcHM8YW55PikgPT5cbiAgICAoKGl0ZW1TaXplOiBhbnkpOiBudW1iZXIpICogaXRlbUNvdW50LFxuXG4gIGdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50OiAoXG4gICAgeyBkaXJlY3Rpb24sIGhlaWdodCwgaXRlbUNvdW50LCBpdGVtU2l6ZSwgbGF5b3V0LCB3aWR0aCB9OiBQcm9wczxhbnk+LFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgYWxpZ246IFNjcm9sbFRvQWxpZ24sXG4gICAgc2Nyb2xsT2Zmc2V0OiBudW1iZXIsXG4gICAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wcyxcbiAgICBzY3JvbGxiYXJTaXplOiBudW1iZXJcbiAgKTogbnVtYmVyID0+IHtcbiAgICAvLyBUT0RPIERlcHJlY2F0ZSBkaXJlY3Rpb24gXCJob3Jpem9udGFsXCJcbiAgICBjb25zdCBpc0hvcml6b250YWwgPSBkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJztcbiAgICBjb25zdCBzaXplID0gKCgoaXNIb3Jpem9udGFsID8gd2lkdGggOiBoZWlnaHQpOiBhbnkpOiBudW1iZXIpO1xuICAgIGNvbnN0IGxhc3RJdGVtT2Zmc2V0ID0gTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgaXRlbUNvdW50ICogKChpdGVtU2l6ZTogYW55KTogbnVtYmVyKSAtIHNpemVcbiAgICApO1xuICAgIGNvbnN0IG1heE9mZnNldCA9IE1hdGgubWluKFxuICAgICAgbGFzdEl0ZW1PZmZzZXQsXG4gICAgICBpbmRleCAqICgoaXRlbVNpemU6IGFueSk6IG51bWJlcilcbiAgICApO1xuICAgIGNvbnN0IG1pbk9mZnNldCA9IE1hdGgubWF4KFxuICAgICAgMCxcbiAgICAgIGluZGV4ICogKChpdGVtU2l6ZTogYW55KTogbnVtYmVyKSAtXG4gICAgICAgIHNpemUgK1xuICAgICAgICAoKGl0ZW1TaXplOiBhbnkpOiBudW1iZXIpICtcbiAgICAgICAgc2Nyb2xsYmFyU2l6ZVxuICAgICk7XG5cbiAgICBpZiAoYWxpZ24gPT09ICdzbWFydCcpIHtcbiAgICAgIGlmIChcbiAgICAgICAgc2Nyb2xsT2Zmc2V0ID49IG1pbk9mZnNldCAtIHNpemUgJiZcbiAgICAgICAgc2Nyb2xsT2Zmc2V0IDw9IG1heE9mZnNldCArIHNpemVcbiAgICAgICkge1xuICAgICAgICBhbGlnbiA9ICdhdXRvJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFsaWduID0gJ2NlbnRlcic7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dpdGNoIChhbGlnbikge1xuICAgICAgY2FzZSAnc3RhcnQnOlxuICAgICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcbiAgICAgIGNhc2UgJ2NlbnRlcic6IHtcbiAgICAgICAgLy8gXCJDZW50ZXJlZFwiIG9mZnNldCBpcyB1c3VhbGx5IHRoZSBhdmVyYWdlIG9mIHRoZSBtaW4gYW5kIG1heC5cbiAgICAgICAgLy8gQnV0IG5lYXIgdGhlIGVkZ2VzIG9mIHRoZSBsaXN0LCB0aGlzIGRvZXNuJ3QgaG9sZCB0cnVlLlxuICAgICAgICBjb25zdCBtaWRkbGVPZmZzZXQgPSBNYXRoLnJvdW5kKFxuICAgICAgICAgIG1pbk9mZnNldCArIChtYXhPZmZzZXQgLSBtaW5PZmZzZXQpIC8gMlxuICAgICAgICApO1xuICAgICAgICBpZiAobWlkZGxlT2Zmc2V0IDwgTWF0aC5jZWlsKHNpemUgLyAyKSkge1xuICAgICAgICAgIHJldHVybiAwOyAvLyBuZWFyIHRoZSBiZWdpbm5pbmdcbiAgICAgICAgfSBlbHNlIGlmIChtaWRkbGVPZmZzZXQgPiBsYXN0SXRlbU9mZnNldCArIE1hdGguZmxvb3Ioc2l6ZSAvIDIpKSB7XG4gICAgICAgICAgcmV0dXJuIGxhc3RJdGVtT2Zmc2V0OyAvLyBuZWFyIHRoZSBlbmRcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbWlkZGxlT2Zmc2V0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjYXNlICdhdXRvJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChzY3JvbGxPZmZzZXQgPj0gbWluT2Zmc2V0ICYmIHNjcm9sbE9mZnNldCA8PSBtYXhPZmZzZXQpIHtcbiAgICAgICAgICByZXR1cm4gc2Nyb2xsT2Zmc2V0O1xuICAgICAgICB9IGVsc2UgaWYgKHNjcm9sbE9mZnNldCA8IG1pbk9mZnNldCkge1xuICAgICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcbiAgICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBnZXRTdGFydEluZGV4Rm9yT2Zmc2V0OiAoXG4gICAgeyBpdGVtQ291bnQsIGl0ZW1TaXplIH06IFByb3BzPGFueT4sXG4gICAgb2Zmc2V0OiBudW1iZXJcbiAgKTogbnVtYmVyID0+XG4gICAgTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgTWF0aC5taW4oaXRlbUNvdW50IC0gMSwgTWF0aC5mbG9vcihvZmZzZXQgLyAoKGl0ZW1TaXplOiBhbnkpOiBudW1iZXIpKSlcbiAgICApLFxuXG4gIGdldFN0b3BJbmRleEZvclN0YXJ0SW5kZXg6IChcbiAgICB7IGRpcmVjdGlvbiwgaGVpZ2h0LCBpdGVtQ291bnQsIGl0ZW1TaXplLCBsYXlvdXQsIHdpZHRoIH06IFByb3BzPGFueT4sXG4gICAgc3RhcnRJbmRleDogbnVtYmVyLFxuICAgIHNjcm9sbE9mZnNldDogbnVtYmVyXG4gICk6IG51bWJlciA9PiB7XG4gICAgLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9uIFwiaG9yaXpvbnRhbFwiXG4gICAgY29uc3QgaXNIb3Jpem9udGFsID0gZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgbGF5b3V0ID09PSAnaG9yaXpvbnRhbCc7XG4gICAgY29uc3Qgb2Zmc2V0ID0gc3RhcnRJbmRleCAqICgoaXRlbVNpemU6IGFueSk6IG51bWJlcik7XG4gICAgY29uc3Qgc2l6ZSA9ICgoKGlzSG9yaXpvbnRhbCA/IHdpZHRoIDogaGVpZ2h0KTogYW55KTogbnVtYmVyKTtcbiAgICBjb25zdCBudW1WaXNpYmxlSXRlbXMgPSBNYXRoLmNlaWwoXG4gICAgICAoc2l6ZSArIHNjcm9sbE9mZnNldCAtIG9mZnNldCkgLyAoKGl0ZW1TaXplOiBhbnkpOiBudW1iZXIpXG4gICAgKTtcbiAgICByZXR1cm4gTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgTWF0aC5taW4oXG4gICAgICAgIGl0ZW1Db3VudCAtIDEsXG4gICAgICAgIHN0YXJ0SW5kZXggKyBudW1WaXNpYmxlSXRlbXMgLSAxIC8vIC0xIGlzIGJlY2F1c2Ugc3RvcCBpbmRleCBpcyBpbmNsdXNpdmVcbiAgICAgIClcbiAgICApO1xuICB9LFxuXG4gIGluaXRJbnN0YW5jZVByb3BzKHByb3BzOiBQcm9wczxhbnk+KTogYW55IHtcbiAgICAvLyBOb29wXG4gIH0sXG5cbiAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZTogdHJ1ZSxcblxuICB2YWxpZGF0ZVByb3BzOiAoeyBpdGVtU2l6ZSB9OiBQcm9wczxhbnk+KTogdm9pZCA9PiB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmICh0eXBlb2YgaXRlbVNpemUgIT09ICdudW1iZXInKSB7XG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICdBbiBpbnZhbGlkIFwiaXRlbVNpemVcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArXG4gICAgICAgICAgICAnVmFsdWUgc2hvdWxkIGJlIGEgbnVtYmVyLiAnICtcbiAgICAgICAgICAgIGBcIiR7aXRlbVNpemUgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgaXRlbVNpemV9XCIgd2FzIHNwZWNpZmllZC5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9LFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IEZpeGVkU2l6ZUxpc3Q7XG4iLCAiLy8gQGZsb3dcblxuLy8gUHVsbGVkIGZyb20gcmVhY3QtY29tcGF0XG4vLyBodHRwczovL2dpdGh1Yi5jb20vZGV2ZWxvcGl0L3ByZWFjdC1jb21wYXQvYmxvYi83YzVkZTAwZTdjODVlMmZmZDAxMWJmM2FmMDI4OTliNjNmNjk5ZDNhL3NyYy9pbmRleC5qcyNMMzQ5XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzaGFsbG93RGlmZmVycyhwcmV2OiBPYmplY3QsIG5leHQ6IE9iamVjdCk6IGJvb2xlYW4ge1xuICBmb3IgKGxldCBhdHRyaWJ1dGUgaW4gcHJldikge1xuICAgIGlmICghKGF0dHJpYnV0ZSBpbiBuZXh0KSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIGZvciAobGV0IGF0dHJpYnV0ZSBpbiBuZXh0KSB7XG4gICAgaWYgKHByZXZbYXR0cmlidXRlXSAhPT0gbmV4dFthdHRyaWJ1dGVdKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuIiwgIi8vIEBmbG93XG5cbmltcG9ydCBzaGFsbG93RGlmZmVycyBmcm9tICcuL3NoYWxsb3dEaWZmZXJzJztcblxuLy8gQ3VzdG9tIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIFJlYWN0Lm1lbW8oKS5cbi8vIEl0IGtub3dzIHRvIGNvbXBhcmUgaW5kaXZpZHVhbCBzdHlsZSBwcm9wcyBhbmQgaWdub3JlIHRoZSB3cmFwcGVyIG9iamVjdC5cbi8vIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjcmVhY3RtZW1vXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhcmVFcXVhbChcbiAgcHJldlByb3BzOiBPYmplY3QsXG4gIG5leHRQcm9wczogT2JqZWN0XG4pOiBib29sZWFuIHtcbiAgY29uc3QgeyBzdHlsZTogcHJldlN0eWxlLCAuLi5wcmV2UmVzdCB9ID0gcHJldlByb3BzO1xuICBjb25zdCB7IHN0eWxlOiBuZXh0U3R5bGUsIC4uLm5leHRSZXN0IH0gPSBuZXh0UHJvcHM7XG5cbiAgcmV0dXJuIChcbiAgICAhc2hhbGxvd0RpZmZlcnMocHJldlN0eWxlLCBuZXh0U3R5bGUpICYmICFzaGFsbG93RGlmZmVycyhwcmV2UmVzdCwgbmV4dFJlc3QpXG4gICk7XG59XG4iLCAiLy8gQGZsb3dcblxuaW1wb3J0IGFyZUVxdWFsIGZyb20gJy4vYXJlRXF1YWwnO1xuaW1wb3J0IHNoYWxsb3dEaWZmZXJzIGZyb20gJy4vc2hhbGxvd0RpZmZlcnMnO1xuXG4vLyBDdXN0b20gc2hvdWxkQ29tcG9uZW50VXBkYXRlIGZvciBjbGFzcyBjb21wb25lbnRzLlxuLy8gSXQga25vd3MgdG8gY29tcGFyZSBpbmRpdmlkdWFsIHN0eWxlIHByb3BzIGFuZCBpZ25vcmUgdGhlIHdyYXBwZXIgb2JqZWN0LlxuLy8gU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1jb21wb25lbnQuaHRtbCNzaG91bGRjb21wb25lbnR1cGRhdGVcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNob3VsZENvbXBvbmVudFVwZGF0ZShcbiAgbmV4dFByb3BzOiBPYmplY3QsXG4gIG5leHRTdGF0ZTogT2JqZWN0XG4pOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICAhYXJlRXF1YWwodGhpcy5wcm9wcywgbmV4dFByb3BzKSB8fCBzaGFsbG93RGlmZmVycyh0aGlzLnN0YXRlLCBuZXh0U3RhdGUpXG4gICk7XG59XG4iLCAidmFyIF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcInNpemVcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGV1aVNwYWNlclN0eWxlcyB9IGZyb20gJy4vc3BhY2VyLnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBTSVpFUyA9IFsneHMnLCAncycsICdtJywgJ2wnLCAneGwnLCAneHhsJ107XG5leHBvcnQgdmFyIEV1aVNwYWNlciA9IGZ1bmN0aW9uIEV1aVNwYWNlcihfcmVmKSB7XG4gIHZhciBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/ICdsJyA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICB2YXIgc3R5bGVzID0gZXVpU3BhY2VyU3R5bGVzKGV1aVRoZW1lKTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlTcGFjZXInLCBfZGVmaW5lUHJvcGVydHkoe30sIFwiZXVpU3BhY2VyLS1cIi5jb25jYXQoc2l6ZSksIHNpemUpLCBjbGFzc05hbWUpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlTcGFjZXIsIHN0eWxlc1tzaXplXV07XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgY3NzOiBjc3NTdHlsZXNcbiAgfSwgcmVzdCkpO1xufTtcbkV1aVNwYWNlci5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLmFueVxufTsiLCAiZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgbG9naWNhbHMgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5cbnZhciBfcmVmID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjE5MXhpMW4tZXVpU3BhY2VyXCIsXG4gIHN0eWxlczogXCJmbGV4LXNocmluazowO2xhYmVsOmV1aVNwYWNlcjtcIlxufSA6IHtcbiAgbmFtZTogXCIxOTF4aTFuLWV1aVNwYWNlclwiLFxuICBzdHlsZXM6IFwiZmxleC1zaHJpbms6MDtsYWJlbDpldWlTcGFjZXI7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcblxuZXhwb3J0IHZhciBldWlTcGFjZXJTdHlsZXMgPSBmdW5jdGlvbiBldWlTcGFjZXJTdHlsZXMoX3JlZjIpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZjIuZXVpVGhlbWU7XG4gIHJldHVybiB7XG4gICAgZXVpU3BhY2VyOiBfcmVmLFxuICAgIC8vIFNpemVzXG4gICAgeHM6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbHMuaGVpZ2h0LCBcIjpcIiwgZXVpVGhlbWUuc2l6ZS54cywgXCI7O2xhYmVsOnhzO1wiKSxcbiAgICBzOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxzLmhlaWdodCwgXCI6XCIsIGV1aVRoZW1lLnNpemUucywgXCI7O2xhYmVsOnM7XCIpLFxuICAgIG06IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbHMuaGVpZ2h0LCBcIjpcIiwgZXVpVGhlbWUuc2l6ZS5iYXNlLCBcIjs7bGFiZWw6bTtcIiksXG4gICAgbDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2Fscy5oZWlnaHQsIFwiOlwiLCBldWlUaGVtZS5zaXplLmwsIFwiOztsYWJlbDpsO1wiKSxcbiAgICB4bDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2Fscy5oZWlnaHQsIFwiOlwiLCBldWlUaGVtZS5zaXplLnhsLCBcIjs7bGFiZWw6eGw7XCIpLFxuICAgIHh4bDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2Fscy5oZWlnaHQsIFwiOlwiLCBldWlUaGVtZS5zaXplLnh4bCwgXCI7O2xhYmVsOnh4bDtcIilcbiAgfTtcbn07IiwgImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxudmFyIF9leGNsdWRlZCA9IFtcImRhdGEtdGVzdC1zdWJqXCIsIFwiYXN5bmNcIiwgXCJjbGFzc05hbWVcIiwgXCJjb21wcmVzc2VkXCIsIFwiY3VzdG9tT3B0aW9uVGV4dFwiLCBcImZ1bGxXaWR0aFwiLCBcImlkXCIsIFwiaW5wdXRSZWZcIiwgXCJpc0NsZWFyYWJsZVwiLCBcImlzRGlzYWJsZWRcIiwgXCJpc0ludmFsaWRcIiwgXCJpc0xvYWRpbmdcIiwgXCJub1N1Z2dlc3Rpb25zXCIsIFwib25CbHVyXCIsIFwib25DaGFuZ2VcIiwgXCJvbkNyZWF0ZU9wdGlvblwiLCBcIm9uU2VhcmNoQ2hhbmdlXCIsIFwib3B0aW9uc1wiLCBcInBsYWNlaG9sZGVyXCIsIFwicmVuZGVyT3B0aW9uXCIsIFwicm93SGVpZ2h0XCIsIFwic2VsZWN0ZWRPcHRpb25zXCIsIFwic2luZ2xlU2VsZWN0aW9uXCIsIFwicHJlcGVuZFwiLCBcInNvcnRNYXRjaGVzQnlcIiwgXCJkZWxpbWl0ZXJcIiwgXCJhcHBlbmRcIiwgXCJhdXRvRm9jdXNcIiwgXCJhcmlhLWxhYmVsXCIsIFwiYXJpYS1sYWJlbGxlZGJ5XCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vKipcbiAqIEVsZW1lbnRzIHdpdGhpbiBFdWlDb21ib0JveCB3aGljaCB3b3VsZCBub3JtYWxseSBiZSB0YWJiYWJsZSAoaW5wdXRzLCBidXR0b25zKSBoYXZlIGJlZW4gcmVtb3ZlZFxuICogZnJvbSB0aGUgdGFiIG9yZGVyIHdpdGggdGFiaW5kZXg9ey0xfSBzbyB0aGF0IHdlIGNhbiBjb250cm9sIHRoZSBrZXlib2FyZCBuYXZpZ2F0aW9uIGludGVyZmFjZS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgZmluZFBvcG92ZXJQb3NpdGlvbiwgaHRtbElkR2VuZXJhdG9yLCBrZXlzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpUG9ydGFsIH0gZnJvbSAnLi4vcG9ydGFsJztcbmltcG9ydCB7IEV1aUkxOG4gfSBmcm9tICcuLi9pMThuJztcbmltcG9ydCB7IEV1aUNvbWJvQm94T3B0aW9uc0xpc3QgfSBmcm9tICcuL2NvbWJvX2JveF9vcHRpb25zX2xpc3QnO1xuaW1wb3J0IHsgZ2V0TWF0Y2hpbmdPcHRpb25zLCBmbGF0dGVuT3B0aW9uR3JvdXBzLCBnZXRTZWxlY3RlZE9wdGlvbkZvclNlYXJjaFZhbHVlIH0gZnJvbSAnLi9tYXRjaGluZ19vcHRpb25zJztcbmltcG9ydCB7IEV1aUNvbWJvQm94SW5wdXQgfSBmcm9tICcuL2NvbWJvX2JveF9pbnB1dC9jb21ib19ib3hfaW5wdXQnO1xuaW1wb3J0IHsgZ2V0RWxlbWVudFpJbmRleCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3BvcG92ZXInO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBpbml0aWFsU2VhcmNoVmFsdWUgPSAnJztcbmV4cG9ydCB2YXIgRXVpQ29tYm9Cb3ggPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEV1aUNvbWJvQm94LCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aUNvbWJvQm94KTtcblxuICBmdW5jdGlvbiBFdWlDb21ib0JveCgpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpQ29tYm9Cb3gpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwuYXBwbHkoX3N1cGVyLCBbdGhpc10uY29uY2F0KGFyZ3MpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzdGF0ZVwiLCB7XG4gICAgICBhY3RpdmVPcHRpb25JbmRleDogLTEsXG4gICAgICBoYXNGb2N1czogZmFsc2UsXG4gICAgICBpc0xpc3RPcGVuOiBmYWxzZSxcbiAgICAgIGxpc3RFbGVtZW50OiBudWxsLFxuICAgICAgbGlzdFBvc2l0aW9uOiAnYm90dG9tJyxcbiAgICAgIGxpc3RaSW5kZXg6IHVuZGVmaW5lZCxcbiAgICAgIG1hdGNoaW5nT3B0aW9uczogZ2V0TWF0Y2hpbmdPcHRpb25zKF90aGlzLnByb3BzLm9wdGlvbnMsIF90aGlzLnByb3BzLnNlbGVjdGVkT3B0aW9ucywgaW5pdGlhbFNlYXJjaFZhbHVlLCBfdGhpcy5wcm9wcy5hc3luYywgQm9vbGVhbihfdGhpcy5wcm9wcy5zaW5nbGVTZWxlY3Rpb24pLCBfdGhpcy5wcm9wcy5zb3J0TWF0Y2hlc0J5KSxcbiAgICAgIHNlYXJjaFZhbHVlOiBpbml0aWFsU2VhcmNoVmFsdWUsXG4gICAgICB3aWR0aDogMFxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIl9pc01vdW50ZWRcIiwgZmFsc2UpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInJvb3RJZFwiLCBodG1sSWRHZW5lcmF0b3IoKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiY29tYm9Cb3hSZWZJbnN0YW5jZVwiLCBudWxsKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJjb21ib0JveFJlZkNhbGxiYWNrXCIsIGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgIC8vIElFMTEgZG9lc24ndCBzdXBwb3J0IHRoZSBgcmVsYXRlZFRhcmdldGAgZXZlbnQgcHJvcGVydHkgZm9yIGJsdXIgZXZlbnRzXG4gICAgICAvLyBidXQgZG9lcyBhZGQgaXQgZm9yIGZvY3Vzb3V0LiBSZWFjdCBkb2Vzbid0IHN1cHBvcnQgYG9uRm9jdXNPdXRgIHNvIGhlcmUgd2UgYXJlLlxuICAgICAgaWYgKF90aGlzLmNvbWJvQm94UmVmSW5zdGFuY2UpIHtcbiAgICAgICAgX3RoaXMuY29tYm9Cb3hSZWZJbnN0YW5jZS5yZW1vdmVFdmVudExpc3RlbmVyKCdmb2N1c291dCcsIF90aGlzLm9uQ29udGFpbmVyQmx1cik7XG4gICAgICB9XG5cbiAgICAgIF90aGlzLmNvbWJvQm94UmVmSW5zdGFuY2UgPSByZWY7XG5cbiAgICAgIGlmIChfdGhpcy5jb21ib0JveFJlZkluc3RhbmNlKSB7XG4gICAgICAgIF90aGlzLmNvbWJvQm94UmVmSW5zdGFuY2UuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXNvdXQnLCBfdGhpcy5vbkNvbnRhaW5lckJsdXIpO1xuXG4gICAgICAgIHZhciBjb21ib0JveEJvdW5kcyA9IF90aGlzLmNvbWJvQm94UmVmSW5zdGFuY2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIHdpZHRoOiBjb21ib0JveEJvdW5kcy53aWR0aFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJhdXRvU2l6ZUlucHV0UmVmSW5zdGFuY2VcIiwgbnVsbCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiYXV0b1NpemVJbnB1dFJlZkNhbGxiYWNrXCIsIGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgIF90aGlzLmF1dG9TaXplSW5wdXRSZWZJbnN0YW5jZSA9IHJlZjtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzZWFyY2hJbnB1dFJlZkluc3RhbmNlXCIsIG51bGwpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInNlYXJjaElucHV0UmVmQ2FsbGJhY2tcIiwgZnVuY3Rpb24gKHJlZikge1xuICAgICAgX3RoaXMuc2VhcmNoSW5wdXRSZWZJbnN0YW5jZSA9IHJlZjtcbiAgICAgIGlmIChfdGhpcy5wcm9wcy5pbnB1dFJlZikgX3RoaXMucHJvcHMuaW5wdXRSZWYocmVmKTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJsaXN0UmVmSW5zdGFuY2VcIiwgbnVsbCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwibGlzdFJlZkNhbGxiYWNrXCIsIGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgIGlmIChfdGhpcy5jb21ib0JveFJlZkluc3RhbmNlKSB7XG4gICAgICAgIC8vIGZpbmQgdGhlIHpJbmRleCBvZiB0aGUgY29tYm9ib3ggcmVsYXRpdmUgdG8gdGhlIHBhZ2UgYm9keVxuICAgICAgICAvLyBhbmQgdXNlIHRoYXQgdG8gZGVwdGgtcG9zaXRpb24gdGhlIGxpc3QgYm94XG4gICAgICAgIC8vIGFkZHMgYW4gZXh0cmEgYDEwMGAgdG8gcHJvdmlkZSBzb21lIGRlZmVuc2UgYXJvdW5kIG5laWdoYm9yaW5nIGVsZW1lbnRzJyBwb3NpdGlvbmluZ1xuICAgICAgICB2YXIgbGlzdFpJbmRleCA9IGdldEVsZW1lbnRaSW5kZXgoX3RoaXMuY29tYm9Cb3hSZWZJbnN0YW5jZSwgZG9jdW1lbnQuYm9keSkgKyAxMDA7XG5cbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGxpc3RaSW5kZXg6IGxpc3RaSW5kZXhcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIF90aGlzLmxpc3RSZWZJbnN0YW5jZSA9IHJlZjtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJ0b2dnbGVCdXR0b25SZWZJbnN0YW5jZVwiLCBudWxsKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJ0b2dnbGVCdXR0b25SZWZDYWxsYmFja1wiLCBmdW5jdGlvbiAocmVmKSB7XG4gICAgICBfdGhpcy50b2dnbGVCdXR0b25SZWZJbnN0YW5jZSA9IHJlZjtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvcHRpb25zUmVmSW5zdGFuY2VzXCIsIFtdKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvcHRpb25SZWZDYWxsYmFja1wiLCBmdW5jdGlvbiAoaW5kZXgsIHJlZikge1xuICAgICAgX3RoaXMub3B0aW9uc1JlZkluc3RhbmNlc1tpbmRleF0gPSByZWY7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib3Blbkxpc3RcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBpc0xpc3RPcGVuOiB0cnVlXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJjbG9zZUxpc3RcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAoZXZlbnQgJiYgZXZlbnQudGFyZ2V0ID09PSBfdGhpcy5zZWFyY2hJbnB1dFJlZkluc3RhbmNlKSB7XG4gICAgICAgIC8vIHJlYWxseSBsb25nIHNlYXJjaCB2YWx1ZXMgLyBjdXN0b20gZW50cmllcyB0cmlnZ2VycyBhIHNjcm9sbCBldmVudCBvbiB0aGUgaW5wdXRcbiAgICAgICAgLy8gd2hpY2ggdGhlIEV1aUNvbWJvQm94T3B0aW9uc0xpc3QgcGFzc2VzIHRocm91Z2ggaGVyZVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIF90aGlzLmNsZWFyQWN0aXZlT3B0aW9uKCk7XG5cbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgbGlzdFpJbmRleDogdW5kZWZpbmVkLFxuICAgICAgICBpc0xpc3RPcGVuOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwidXBkYXRlUG9zaXRpb25cIiwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGxpc3RFbGVtZW50ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBfdGhpcy5zdGF0ZS5saXN0RWxlbWVudDtcblxuICAgICAgaWYgKCFfdGhpcy5faXNNb3VudGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFfdGhpcy5zdGF0ZS5pc0xpc3RPcGVuKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFsaXN0RWxlbWVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9IC8vIGl0J3MgcG9zc2libGUgdGhhdCB1cGRhdGVMaXN0UG9zaXRpb24gaXMgY2FsbGVkIHdoZW4gbGlzdEVsZW1lbnQgaXMgYmVjb21pbmcgdmlzaWJsZSwgYnV0IGlzbid0IHlldFxuXG5cbiAgICAgIHZhciBsaXN0RWxlbWVudEJvdW5kcyA9IGxpc3RFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICBpZiAobGlzdEVsZW1lbnRCb3VuZHMud2lkdGggPT09IDAgfHwgbGlzdEVsZW1lbnRCb3VuZHMuaGVpZ2h0ID09PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFfdGhpcy5jb21ib0JveFJlZkluc3RhbmNlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIGNvbWJvQm94Qm91bmRzID0gX3RoaXMuY29tYm9Cb3hSZWZJbnN0YW5jZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgdmFyIF9yZWYgPSBmaW5kUG9wb3ZlclBvc2l0aW9uKHtcbiAgICAgICAgYWxsb3dDcm9zc0F4aXM6IGZhbHNlLFxuICAgICAgICBhbmNob3I6IF90aGlzLmNvbWJvQm94UmVmSW5zdGFuY2UsXG4gICAgICAgIHBvcG92ZXI6IGxpc3RFbGVtZW50LFxuICAgICAgICBwb3NpdGlvbjogJ2JvdHRvbSdcbiAgICAgIH0pLFxuICAgICAgICAgIHBvc2l0aW9uID0gX3JlZi5wb3NpdGlvbixcbiAgICAgICAgICB0b3AgPSBfcmVmLnRvcDtcblxuICAgICAgaWYgKF90aGlzLmxpc3RSZWZJbnN0YW5jZSkge1xuICAgICAgICBfdGhpcy5saXN0UmVmSW5zdGFuY2Uuc3R5bGUudG9wID0gXCJcIi5jb25jYXQodG9wLCBcInB4XCIpOyAvLyBsaXN0RWxlbWVudCBkb2Vzbid0IGhhdmUgaXRzIHdpZHRoIHNldCB1bnRpbCBhZnRlciB1cGRhdGluZyB0aGUgcG9zaXRpb25cbiAgICAgICAgLy8gd2hpY2ggbWVhbnMgdGhlIHBvcG92ZXIgc2VydmljZSB3b24ndCBrbm93IGFib3V0IHRoZSBjb3JyZWN0IHdpZHRoXG4gICAgICAgIC8vIGhvd2V2ZXIsIHdlIGFscmVhZHkga25vdyB3aGVyZSB0byBwb3NpdGlvbiB0aGUgZWxlbWVudFxuXG4gICAgICAgIF90aGlzLmxpc3RSZWZJbnN0YW5jZS5zdHlsZS5sZWZ0ID0gXCJcIi5jb25jYXQoY29tYm9Cb3hCb3VuZHMubGVmdCArIHdpbmRvdy5wYWdlWE9mZnNldCwgXCJweFwiKTtcbiAgICAgICAgX3RoaXMubGlzdFJlZkluc3RhbmNlLnN0eWxlLndpZHRoID0gXCJcIi5jb25jYXQoY29tYm9Cb3hCb3VuZHMud2lkdGgsIFwicHhcIik7XG4gICAgICB9IC8vIENhY2hlIGZvciBmdXR1cmUgY2FsbHMuXG5cblxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBsaXN0RWxlbWVudDogbGlzdEVsZW1lbnQsXG4gICAgICAgIGxpc3RQb3NpdGlvbjogcG9zaXRpb24sXG4gICAgICAgIHdpZHRoOiBjb21ib0JveEJvdW5kcy53aWR0aFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaW5jcmVtZW50QWN0aXZlT3B0aW9uSW5kZXhcIiwgZnVuY3Rpb24gKGFtb3VudCkge1xuICAgICAgLy8gSWYgdGhlcmUgYXJlIG5vIG9wdGlvbnMgYXZhaWxhYmxlLCBkbyBub3RoaW5nLlxuICAgICAgaWYgKCFfdGhpcy5zdGF0ZS5tYXRjaGluZ09wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgX3RoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKF9yZWYyKSB7XG4gICAgICAgIHZhciBhY3RpdmVPcHRpb25JbmRleCA9IF9yZWYyLmFjdGl2ZU9wdGlvbkluZGV4LFxuICAgICAgICAgICAgbWF0Y2hpbmdPcHRpb25zID0gX3JlZjIubWF0Y2hpbmdPcHRpb25zO1xuICAgICAgICB2YXIgbmV4dEFjdGl2ZU9wdGlvbkluZGV4O1xuXG4gICAgICAgIGlmIChhY3RpdmVPcHRpb25JbmRleCA8IDApIHtcbiAgICAgICAgICAvLyBJZiB0aGlzIGlzIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHVzZXIncyBrZXlib2FyZCBuYXZpZ2F0aW9uIG9mIHRoZSBtZW51LCB0aGVuIHdlJ2xsIGZvY3VzXG4gICAgICAgICAgLy8gZWl0aGVyIHRoZSBmaXJzdCBvciBsYXN0IGl0ZW0uXG4gICAgICAgICAgbmV4dEFjdGl2ZU9wdGlvbkluZGV4ID0gYW1vdW50IDwgMCA/IG1hdGNoaW5nT3B0aW9ucy5sZW5ndGggLSAxIDogMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZXh0QWN0aXZlT3B0aW9uSW5kZXggPSBhY3RpdmVPcHRpb25JbmRleCArIGFtb3VudDtcblxuICAgICAgICAgIGlmIChuZXh0QWN0aXZlT3B0aW9uSW5kZXggPCAwKSB7XG4gICAgICAgICAgICBuZXh0QWN0aXZlT3B0aW9uSW5kZXggPSBtYXRjaGluZ09wdGlvbnMubGVuZ3RoIC0gMTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG5leHRBY3RpdmVPcHRpb25JbmRleCA9PT0gbWF0Y2hpbmdPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgbmV4dEFjdGl2ZU9wdGlvbkluZGV4ID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gR3JvdXAgdGl0bGVzIGFyZSBpbmNsdWRlZCBpbiBvcHRpb24gbGlzdCBidXQgYXJlIG5vdCBzZWxlY3RhYmxlXG4gICAgICAgIC8vIFNraXAgZ3JvdXAgdGl0bGUgb3B0aW9uc1xuXG5cbiAgICAgICAgdmFyIGRpcmVjdGlvbiA9IGFtb3VudCA+IDAgPyAxIDogLTE7XG5cbiAgICAgICAgd2hpbGUgKG1hdGNoaW5nT3B0aW9uc1tuZXh0QWN0aXZlT3B0aW9uSW5kZXhdLmlzR3JvdXBMYWJlbE9wdGlvbikge1xuICAgICAgICAgIG5leHRBY3RpdmVPcHRpb25JbmRleCA9IG5leHRBY3RpdmVPcHRpb25JbmRleCArIGRpcmVjdGlvbjtcblxuICAgICAgICAgIGlmIChuZXh0QWN0aXZlT3B0aW9uSW5kZXggPCAwKSB7XG4gICAgICAgICAgICBuZXh0QWN0aXZlT3B0aW9uSW5kZXggPSBtYXRjaGluZ09wdGlvbnMubGVuZ3RoIC0gMTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG5leHRBY3RpdmVPcHRpb25JbmRleCA9PT0gbWF0Y2hpbmdPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgbmV4dEFjdGl2ZU9wdGlvbkluZGV4ID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4OiBuZXh0QWN0aXZlT3B0aW9uSW5kZXhcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImhhc0FjdGl2ZU9wdGlvblwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3RoaXMuc3RhdGUuYWN0aXZlT3B0aW9uSW5kZXggPiAtMSAmJiBfdGhpcy5zdGF0ZS5hY3RpdmVPcHRpb25JbmRleCA8IF90aGlzLnN0YXRlLm1hdGNoaW5nT3B0aW9ucy5sZW5ndGg7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiY2xlYXJBY3RpdmVPcHRpb25cIiwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBhY3RpdmVPcHRpb25JbmRleDogLTFcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImNsZWFyU2VhcmNoVmFsdWVcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMub25TZWFyY2hDaGFuZ2UoJycpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInJlbW92ZUxhc3RPcHRpb25cIiwgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKCFfdGhpcy5wcm9wcy5zZWxlY3RlZE9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gLy8gQmFja3NwYWNlIHdpbGwgYmUgdXNlZCB0byBkZWxldGUgdGhlIGlucHV0LCBub3QgYSBwaWxsLlxuXG5cbiAgICAgIGlmIChfdGhpcy5zdGF0ZS5zZWFyY2hWYWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSAvLyBEZWxldGUgbGFzdCBwaWxsLlxuXG5cbiAgICAgIF90aGlzLm9uUmVtb3ZlT3B0aW9uKF90aGlzLnByb3BzLnNlbGVjdGVkT3B0aW9uc1tfdGhpcy5wcm9wcy5zZWxlY3RlZE9wdGlvbnMubGVuZ3RoIC0gMV0pO1xuXG4gICAgICBpZiAoQm9vbGVhbihfdGhpcy5wcm9wcy5zaW5nbGVTZWxlY3Rpb24pICYmICFfdGhpcy5zdGF0ZS5pc0xpc3RPcGVuKSB7XG4gICAgICAgIF90aGlzLm9wZW5MaXN0KCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiYWRkQ3VzdG9tT3B0aW9uXCIsIGZ1bmN0aW9uIChpc0NvbnRhaW5lckJsdXIsIHNlYXJjaFZhbHVlKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBvbkNyZWF0ZU9wdGlvbiA9IF90aGlzJHByb3BzLm9uQ3JlYXRlT3B0aW9uLFxuICAgICAgICAgIG9wdGlvbnMgPSBfdGhpcyRwcm9wcy5vcHRpb25zLFxuICAgICAgICAgIHNlbGVjdGVkT3B0aW9ucyA9IF90aGlzJHByb3BzLnNlbGVjdGVkT3B0aW9ucyxcbiAgICAgICAgICBzaW5nbGVTZWxlY3Rpb24gPSBfdGhpcyRwcm9wcy5zaW5nbGVTZWxlY3Rpb247XG4gICAgICB2YXIgbWF0Y2hpbmdPcHRpb25zID0gX3RoaXMuc3RhdGUubWF0Y2hpbmdPcHRpb25zO1xuXG4gICAgICBpZiAoX3RoaXMuZG9lc1NlYXJjaE1hdGNoT25seU9wdGlvbigpKSB7XG4gICAgICAgIF90aGlzLm9uQWRkT3B0aW9uKG1hdGNoaW5nT3B0aW9uc1swXSwgaXNDb250YWluZXJCbHVyKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghb25DcmVhdGVPcHRpb24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSAvLyBEb24ndCBib3RoZXIgdHJ5aW5nIHRvIGNyZWF0ZSBhbiBvcHRpb24gaWYgdGhlIHVzZXIgaGFzbid0IHR5cGVkIGFueXRoaW5nLlxuXG5cbiAgICAgIGlmICghc2VhcmNoVmFsdWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSAvLyBEb24ndCBjcmVhdGUgdGhlIHZhbHVlIGlmIGl0J3MgYWxyZWFkeSBiZWVuIHNlbGVjdGVkLlxuXG5cbiAgICAgIGlmIChnZXRTZWxlY3RlZE9wdGlvbkZvclNlYXJjaFZhbHVlKHNlYXJjaFZhbHVlLCBzZWxlY3RlZE9wdGlvbnMpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gLy8gQWRkIG5ldyBjdXN0b20gcGlsbCBpZiB0aGlzIGlzIGN1c3RvbSBpbnB1dCwgZXZlbiBpZiBpdCBwYXJ0aWFsbHkgbWF0Y2hlcyBhbiBvcHRpb24uXG5cblxuICAgICAgdmFyIGlzT3B0aW9uQ3JlYXRlZCA9IG9uQ3JlYXRlT3B0aW9uKHNlYXJjaFZhbHVlLCBmbGF0dGVuT3B0aW9uR3JvdXBzKG9wdGlvbnMpKTsgLy8gRXhwZWN0IHRoZSBjb25zdW1lciB0byBiZSBleHBsaWNpdCBpbiByZWplY3RpbmcgYSBjdXN0b20gb3B0aW9uLlxuXG4gICAgICBpZiAoaXNPcHRpb25DcmVhdGVkID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIF90aGlzLmNsZWFyU2VhcmNoVmFsdWUoKTtcblxuICAgICAgaWYgKEJvb2xlYW4oc2luZ2xlU2VsZWN0aW9uKSkge1xuICAgICAgICAvLyBBZGRpbmcgYSBjdXN0b20gb3B0aW9uIHRvIGEgc2luZ2xlIHNlbGVjdCB0aGF0IGRvZXMgbm90IGFwcGVhciBpbiB0aGUgbGlzdCBvZiBvcHRpb25zXG4gICAgICAgIF90aGlzLmNsb3NlTGlzdCgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImRvZXNTZWFyY2hNYXRjaE9ubHlPcHRpb25cIiwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHNlYXJjaFZhbHVlID0gX3RoaXMuc3RhdGUuc2VhcmNoVmFsdWU7XG5cbiAgICAgIGlmIChfdGhpcy5zdGF0ZS5tYXRjaGluZ09wdGlvbnMubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF90aGlzLnN0YXRlLm1hdGNoaW5nT3B0aW9uc1swXS5sYWJlbC50b0xvd2VyQ2FzZSgpID09PSBzZWFyY2hWYWx1ZS50b0xvd2VyQ2FzZSgpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImFyZUFsbE9wdGlvbnNTZWxlY3RlZFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgb3B0aW9ucyA9IF90aGlzJHByb3BzMi5vcHRpb25zLFxuICAgICAgICAgIHNlbGVjdGVkT3B0aW9ucyA9IF90aGlzJHByb3BzMi5zZWxlY3RlZE9wdGlvbnMsXG4gICAgICAgICAgYXN5bmMgPSBfdGhpcyRwcm9wczIuYXN5bmM7IC8vIEFzc3VtZSBpZiB0aGlzIGlzIGFzeW5jIHRoZW4gdGhlcmUgY291bGQgYmUgaW5maW5pdGUgb3B0aW9ucy5cblxuICAgICAgaWYgKGFzeW5jKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgdmFyIGZsYXR0ZW5PcHRpb25zID0gZmxhdHRlbk9wdGlvbkdyb3VwcyhvcHRpb25zKS5tYXAoZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBvcHRpb24pLCB7fSwge1xuICAgICAgICAgIGxhYmVsOiBvcHRpb24ubGFiZWwudHJpbSgpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIHZhciBudW1iZXJPZlNlbGVjdGVkT3B0aW9ucyA9IDA7XG4gICAgICBzZWxlY3RlZE9wdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoX3JlZjMpIHtcbiAgICAgICAgdmFyIGxhYmVsID0gX3JlZjMubGFiZWw7XG4gICAgICAgIHZhciB0cmltbWVkTGFiZWwgPSBsYWJlbC50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKGZsYXR0ZW5PcHRpb25zLmZpbmRJbmRleChmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIG9wdGlvbi5sYWJlbCA9PT0gdHJpbW1lZExhYmVsO1xuICAgICAgICB9KSAhPT0gLTEpIG51bWJlck9mU2VsZWN0ZWRPcHRpb25zICs9IDE7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBmbGF0dGVuT3B0aW9ucy5sZW5ndGggPT09IG51bWJlck9mU2VsZWN0ZWRPcHRpb25zO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uQ29tYm9Cb3hGb2N1c1wiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vbkZvY3VzKSB7XG4gICAgICAgIF90aGlzLnByb3BzLm9uRm9jdXMoZXZlbnQpO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5vcGVuTGlzdCgpO1xuXG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGhhc0ZvY3VzOiB0cnVlXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzZXRDdXN0b21PcHRpb25zXCIsIGZ1bmN0aW9uIChpc0NvbnRhaW5lckJsdXIpIHtcbiAgICAgIHZhciBzZWFyY2hWYWx1ZSA9IF90aGlzLnN0YXRlLnNlYXJjaFZhbHVlO1xuICAgICAgdmFyIGRlbGltaXRlciA9IF90aGlzLnByb3BzLmRlbGltaXRlcjtcblxuICAgICAgaWYgKGRlbGltaXRlcikge1xuICAgICAgICBzZWFyY2hWYWx1ZS5zcGxpdChkZWxpbWl0ZXIpLmZvckVhY2goZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgICAgIGlmIChvcHRpb24ubGVuZ3RoID4gMCkgX3RoaXMuYWRkQ3VzdG9tT3B0aW9uKGlzQ29udGFpbmVyQmx1ciwgb3B0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfdGhpcy5hZGRDdXN0b21PcHRpb24oaXNDb250YWluZXJCbHVyLCBzZWFyY2hWYWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25Db250YWluZXJCbHVyXCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgLy8gY2xvc2UgdGhlIG9wdGlvbnMgbGlzdCwgdW5sZXNzIHRoZSB1c2VyIGNsaWNrZWQgb24gYW4gb3B0aW9uXG5cbiAgICAgIC8qKlxuICAgICAgICogRmlyZUZveCByZXR1cm5zIGByZWxhdGVkVGFyZ2V0YCBhcyBgbnVsbGAgZm9yIHNlY3VyaXR5IHJlYXNvbnMsIGJ1dCBwcm92aWRlcyBhIHByb3ByaWV0YXJ5IGBleHBsaWNpdE9yaWdpbmFsVGFyZ2V0YC5cbiAgICAgICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0V2ZW50L2V4cGxpY2l0T3JpZ2luYWxUYXJnZXRcbiAgICAgICAqL1xuICAgICAgdmFyIGZvY3VzRXZlbnQgPSBldmVudDtcbiAgICAgIHZhciByZWxhdGVkVGFyZ2V0ID0gZm9jdXNFdmVudC5yZWxhdGVkVGFyZ2V0IHx8IGZvY3VzRXZlbnQuZXhwbGljaXRPcmlnaW5hbFRhcmdldDtcblxuICAgICAgdmFyIGZvY3VzZWRJbk9wdGlvbnNMaXN0ID0gcmVsYXRlZFRhcmdldCAmJiBfdGhpcy5saXN0UmVmSW5zdGFuY2UgJiYgX3RoaXMubGlzdFJlZkluc3RhbmNlLmNvbnRhaW5zKHJlbGF0ZWRUYXJnZXQpO1xuXG4gICAgICB2YXIgZm9jdXNlZEluSW5wdXQgPSByZWxhdGVkVGFyZ2V0ICYmIF90aGlzLmNvbWJvQm94UmVmSW5zdGFuY2UgJiYgX3RoaXMuY29tYm9Cb3hSZWZJbnN0YW5jZS5jb250YWlucyhyZWxhdGVkVGFyZ2V0KTtcblxuICAgICAgaWYgKCFmb2N1c2VkSW5PcHRpb25zTGlzdCAmJiAhZm9jdXNlZEluSW5wdXQpIHtcbiAgICAgICAgX3RoaXMuY2xvc2VMaXN0KCk7XG5cbiAgICAgICAgaWYgKF90aGlzLnByb3BzLm9uQmx1cikge1xuICAgICAgICAgIF90aGlzLnByb3BzLm9uQmx1cihldmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgaGFzRm9jdXM6IGZhbHNlXG4gICAgICAgIH0pOyAvLyBJZiB0aGUgdXNlciB0YWJzIGF3YXkgb3IgY2hhbmdlcyBmb2N1cyB0byBhbm90aGVyIGVsZW1lbnQsIHRha2Ugd2hhdGV2ZXIgaW5wdXQgdGhleSd2ZVxuICAgICAgICAvLyB0eXBlZCBhbmQgY29udmVydCBpdCBpbnRvIGEgcGlsbCwgdG8gcHJldmVudCB0aGUgY29tYm8gYm94IGZyb20gbG9va2luZyBsaWtlIGEgdGV4dCBpbnB1dC5cblxuXG4gICAgICAgIGlmICghX3RoaXMuaGFzQWN0aXZlT3B0aW9uKCkpIHtcbiAgICAgICAgICBfdGhpcy5zZXRDdXN0b21PcHRpb25zKHRydWUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGZvY3VzZWRJbk9wdGlvbnNMaXN0KSB7XG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9lbGFzdGljL2V1aS9pc3N1ZXMvNTE3OVxuICAgICAgICAvLyBuZWVkIHRvIHJlc3RvcmUgZm9jdXMgdG8gdGhlIGlucHV0IGJveCB3aGVuIGNsaWNraW5nIG5vbi1pbnRlcmFjdGl2ZSBlbGVtZW50c1xuICAgICAgICAvLyBmaXJlZm94IGRvZXNuJ3Qgc3VwcG9ydCBjYWxsaW5nIC5mb2N1cygpIGR1cmluZyBhIGJsdXIgZXZlbnRcbiAgICAgICAgLy8gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTM1NzlcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB2YXIgX3RoaXMkc2VhcmNoSW5wdXRSZWZJO1xuXG4gICAgICAgICAgKF90aGlzJHNlYXJjaElucHV0UmVmSSA9IF90aGlzLnNlYXJjaElucHV0UmVmSW5zdGFuY2UpID09PSBudWxsIHx8IF90aGlzJHNlYXJjaElucHV0UmVmSSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkc2VhcmNoSW5wdXRSZWZJLmZvY3VzKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uS2V5RG93blwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGlmIChfdGhpcy5wcm9wcy5pc0Rpc2FibGVkKSByZXR1cm47XG5cbiAgICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICAgIGNhc2Uga2V5cy5BUlJPV19VUDpcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgICAgaWYgKF90aGlzLnN0YXRlLmlzTGlzdE9wZW4pIHtcbiAgICAgICAgICAgIF90aGlzLmluY3JlbWVudEFjdGl2ZU9wdGlvbkluZGV4KC0xKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgX3RoaXMub3Blbkxpc3QoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIGtleXMuQVJST1dfRE9XTjpcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgICAgaWYgKF90aGlzLnN0YXRlLmlzTGlzdE9wZW4pIHtcbiAgICAgICAgICAgIF90aGlzLmluY3JlbWVudEFjdGl2ZU9wdGlvbkluZGV4KDEpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBfdGhpcy5vcGVuTGlzdCgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2Uga2V5cy5CQUNLU1BBQ0U6XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgICBfdGhpcy5yZW1vdmVMYXN0T3B0aW9uKCk7XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIGtleXMuRVNDQVBFOlxuICAgICAgICAgIGlmIChfdGhpcy5zdGF0ZS5pc0xpc3RPcGVuKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgICAgIF90aGlzLmNsb3NlTGlzdCgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2Uga2V5cy5FTlRFUjpcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgICAgaWYgKF90aGlzLmhhc0FjdGl2ZU9wdGlvbigpKSB7XG4gICAgICAgICAgICBfdGhpcy5vbkFkZE9wdGlvbihfdGhpcy5zdGF0ZS5tYXRjaGluZ09wdGlvbnNbX3RoaXMuc3RhdGUuYWN0aXZlT3B0aW9uSW5kZXhdKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgX3RoaXMuc2V0Q3VzdG9tT3B0aW9ucyhmYWxzZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBrZXlzLlRBQjpcbiAgICAgICAgICAvLyBEaXNhbGxvdyB0YWJiaW5nIHdoZW4gdGhlIHVzZXIgaXMgbmF2aWdhdGluZyB0aGUgb3B0aW9ucy5cbiAgICAgICAgICBpZiAoX3RoaXMuaGFzQWN0aXZlT3B0aW9uKCkgJiYgX3RoaXMuc3RhdGUuaXNMaXN0T3Blbikge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgaWYgKF90aGlzLnByb3BzLm9uS2V5RG93bikge1xuICAgICAgICAgICAgX3RoaXMucHJvcHMub25LZXlEb3duKGV2ZW50KTtcbiAgICAgICAgICB9XG5cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbk9wdGlvbkVudGVyS2V5XCIsIGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgIF90aGlzLm9uQWRkT3B0aW9uKG9wdGlvbik7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25PcHRpb25DbGlja1wiLCBmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICBfdGhpcy5vbkFkZE9wdGlvbihvcHRpb24pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uQWRkT3B0aW9uXCIsIGZ1bmN0aW9uIChhZGRlZE9wdGlvbiwgaXNDb250YWluZXJCbHVyKSB7XG4gICAgICBpZiAoYWRkZWRPcHRpb24uZGlzYWJsZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgX3RoaXMkcHJvcHMzID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgb25DaGFuZ2UgPSBfdGhpcyRwcm9wczMub25DaGFuZ2UsXG4gICAgICAgICAgc2VsZWN0ZWRPcHRpb25zID0gX3RoaXMkcHJvcHMzLnNlbGVjdGVkT3B0aW9ucyxcbiAgICAgICAgICBzaW5nbGVTZWxlY3Rpb25Qcm9wID0gX3RoaXMkcHJvcHMzLnNpbmdsZVNlbGVjdGlvbjtcbiAgICAgIHZhciBzaW5nbGVTZWxlY3Rpb24gPSBCb29sZWFuKHNpbmdsZVNlbGVjdGlvblByb3ApO1xuICAgICAgdmFyIGNoYW5nZU9wdGlvbnMgPSBzaW5nbGVTZWxlY3Rpb24gPyBbYWRkZWRPcHRpb25dIDogc2VsZWN0ZWRPcHRpb25zLmNvbmNhdChhZGRlZE9wdGlvbik7XG5cbiAgICAgIGlmIChvbkNoYW5nZSkge1xuICAgICAgICBvbkNoYW5nZShjaGFuZ2VPcHRpb25zKTtcbiAgICAgIH1cblxuICAgICAgX3RoaXMuY2xlYXJTZWFyY2hWYWx1ZSgpO1xuXG4gICAgICBfdGhpcy5jbGVhckFjdGl2ZU9wdGlvbigpO1xuXG4gICAgICBpZiAoIWlzQ29udGFpbmVyQmx1cikge1xuICAgICAgICBpZiAoX3RoaXMuc2VhcmNoSW5wdXRSZWZJbnN0YW5jZSkge1xuICAgICAgICAgIF90aGlzLnNlYXJjaElucHV0UmVmSW5zdGFuY2UuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoc2luZ2xlU2VsZWN0aW9uKSB7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIF90aGlzLmNsb3NlTGlzdCgpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBhY3RpdmVPcHRpb25JbmRleDogX3RoaXMuc3RhdGUubWF0Y2hpbmdPcHRpb25zLmluZGV4T2YoYWRkZWRPcHRpb24pXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uUmVtb3ZlT3B0aW9uXCIsIGZ1bmN0aW9uIChyZW1vdmVkT3B0aW9uKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM0ID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgb25DaGFuZ2UgPSBfdGhpcyRwcm9wczQub25DaGFuZ2UsXG4gICAgICAgICAgc2VsZWN0ZWRPcHRpb25zID0gX3RoaXMkcHJvcHM0LnNlbGVjdGVkT3B0aW9ucztcblxuICAgICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICAgIG9uQ2hhbmdlKHNlbGVjdGVkT3B0aW9ucy5maWx0ZXIoZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgICAgIHJldHVybiBvcHRpb24gIT09IHJlbW92ZWRPcHRpb247XG4gICAgICAgIH0pKTtcbiAgICAgIH1cblxuICAgICAgX3RoaXMuY2xlYXJBY3RpdmVPcHRpb24oKTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJjbGVhclNlbGVjdGVkT3B0aW9uc1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgb25DaGFuZ2UgPSBfdGhpcy5wcm9wcy5vbkNoYW5nZTtcblxuICAgICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICAgIG9uQ2hhbmdlKFtdKTtcbiAgICAgIH0gLy8gQ2xpY2tpbmcgdGhlIGNsZWFyIGJ1dHRvbiB3aWxsIGFsc28gY2F1c2UgaXQgdG8gZGlzYXBwZWFyLiBUaGlzIHdvdWxkIHJlc3VsdCBpbiBmb2N1c1xuICAgICAgLy8gc2hpZnRpbmcgdW5leHBlY3RlZGx5IHRvIHRoZSBib2R5IGVsZW1lbnQgc28gd2Ugc2V0IGl0IHRvIHRoZSBpbnB1dCB3aGljaCBpcyBtb3JlIHJlYXNvbmFibGUsXG5cblxuICAgICAgaWYgKF90aGlzLnNlYXJjaElucHV0UmVmSW5zdGFuY2UpIHtcbiAgICAgICAgX3RoaXMuc2VhcmNoSW5wdXRSZWZJbnN0YW5jZS5mb2N1cygpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIV90aGlzLnN0YXRlLmlzTGlzdE9wZW4pIHtcbiAgICAgICAgX3RoaXMub3Blbkxpc3QoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkNvbWJvQm94Q2xpY2tcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gV2hlbiB0aGUgdXNlciBjbGlja3MgYW55d2hlcmUgb24gdGhlIGJveCwgZW50ZXIgdGhlIGludGVyYWN0aW9uIHN0YXRlLlxuICAgICAgaWYgKF90aGlzLnNlYXJjaElucHV0UmVmSW5zdGFuY2UpIHtcbiAgICAgICAgX3RoaXMuc2VhcmNoSW5wdXRSZWZJbnN0YW5jZS5mb2N1cygpO1xuICAgICAgfSAvLyBJZiB0aGUgdXNlciBkb2VzIHRoaXMgZnJvbSBhIHN0YXRlIGluIHdoaWNoIGFuIG9wdGlvbiBoYXMgZm9jdXMsIHRoZW4gd2UgbmVlZCB0byByZXNldCBpdCBvciBjbGVhciBpdC5cblxuXG4gICAgICBpZiAoQm9vbGVhbihfdGhpcy5wcm9wcy5zaW5nbGVTZWxlY3Rpb24pICYmIF90aGlzLnByb3BzLnNlbGVjdGVkT3B0aW9ucy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgdmFyIHNlbGVjdGVkT3B0aW9uSW5kZXggPSBfdGhpcy5zdGF0ZS5tYXRjaGluZ09wdGlvbnMuZmluZEluZGV4KGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgICByZXR1cm4gb3B0aW9uLmxhYmVsID09PSBfdGhpcy5wcm9wcy5zZWxlY3RlZE9wdGlvbnNbMF0ubGFiZWwgJiYgb3B0aW9uLmtleSA9PT0gX3RoaXMucHJvcHMuc2VsZWN0ZWRPcHRpb25zWzBdLmtleTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4OiBzZWxlY3RlZE9wdGlvbkluZGV4XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgX3RoaXMuY2xlYXJBY3RpdmVPcHRpb24oKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbk9wZW5MaXN0Q2xpY2tcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKF90aGlzLnNlYXJjaElucHV0UmVmSW5zdGFuY2UpIHtcbiAgICAgICAgX3RoaXMuc2VhcmNoSW5wdXRSZWZJbnN0YW5jZS5mb2N1cygpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIV90aGlzLnN0YXRlLmlzTGlzdE9wZW4pIHtcbiAgICAgICAgX3RoaXMub3Blbkxpc3QoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbk9wdGlvbkxpc3RTY3JvbGxcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKF90aGlzLnNlYXJjaElucHV0UmVmSW5zdGFuY2UpIHtcbiAgICAgICAgX3RoaXMuc2VhcmNoSW5wdXRSZWZJbnN0YW5jZS5mb2N1cygpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uQ2xvc2VMaXN0Q2xpY2tcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuY2xvc2VMaXN0KCk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25TZWFyY2hDaGFuZ2VcIiwgZnVuY3Rpb24gKHNlYXJjaFZhbHVlKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM1ID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgb25TZWFyY2hDaGFuZ2UgPSBfdGhpcyRwcm9wczUub25TZWFyY2hDaGFuZ2UsXG4gICAgICAgICAgZGVsaW1pdGVyID0gX3RoaXMkcHJvcHM1LmRlbGltaXRlcjtcblxuICAgICAgaWYgKG9uU2VhcmNoQ2hhbmdlKSB7XG4gICAgICAgIHZhciBfaGFzTWF0Y2hpbmdPcHRpb25zID0gX3RoaXMuc3RhdGUubWF0Y2hpbmdPcHRpb25zLmxlbmd0aCA+IDA7XG5cbiAgICAgICAgb25TZWFyY2hDaGFuZ2Uoc2VhcmNoVmFsdWUsIF9oYXNNYXRjaGluZ09wdGlvbnMpO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHNlYXJjaFZhbHVlOiBzZWFyY2hWYWx1ZVxuICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoc2VhcmNoVmFsdWUgJiYgX3RoaXMuc3RhdGUuaXNMaXN0T3BlbiA9PT0gZmFsc2UpIF90aGlzLm9wZW5MaXN0KCk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKGRlbGltaXRlciAmJiBzZWFyY2hWYWx1ZS5lbmRzV2l0aChkZWxpbWl0ZXIpKSB7XG4gICAgICAgIF90aGlzLnNldEN1c3RvbU9wdGlvbnMoZmFsc2UpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInVwZGF0ZU1hdGNoaW5nT3B0aW9uc0lmRGlmZmVyZW50XCIsIGZ1bmN0aW9uIChuZXdNYXRjaGluZ09wdGlvbnMpIHtcbiAgICAgIHZhciBfdGhpcyRzdGF0ZSA9IF90aGlzLnN0YXRlLFxuICAgICAgICAgIG1hdGNoaW5nT3B0aW9ucyA9IF90aGlzJHN0YXRlLm1hdGNoaW5nT3B0aW9ucyxcbiAgICAgICAgICBhY3RpdmVPcHRpb25JbmRleCA9IF90aGlzJHN0YXRlLmFjdGl2ZU9wdGlvbkluZGV4O1xuICAgICAgdmFyIF90aGlzJHByb3BzNiA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIHNpbmdsZVNlbGVjdGlvbiA9IF90aGlzJHByb3BzNi5zaW5nbGVTZWxlY3Rpb24sXG4gICAgICAgICAgc2VsZWN0ZWRPcHRpb25zID0gX3RoaXMkcHJvcHM2LnNlbGVjdGVkT3B0aW9ucztcbiAgICAgIHZhciBhcmVPcHRpb25zRGlmZmVyZW50ID0gZmFsc2U7XG5cbiAgICAgIGlmIChtYXRjaGluZ09wdGlvbnMubGVuZ3RoICE9PSBuZXdNYXRjaGluZ09wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIGFyZU9wdGlvbnNEaWZmZXJlbnQgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXRjaGluZ09wdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAobWF0Y2hpbmdPcHRpb25zW2ldLmxhYmVsICE9PSBuZXdNYXRjaGluZ09wdGlvbnNbaV0ubGFiZWwpIHtcbiAgICAgICAgICAgIGFyZU9wdGlvbnNEaWZmZXJlbnQgPSB0cnVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChhcmVPcHRpb25zRGlmZmVyZW50KSB7XG4gICAgICAgIF90aGlzLm9wdGlvbnNSZWZJbnN0YW5jZXMgPSBbXTtcbiAgICAgICAgdmFyIG5leHRBY3RpdmVPcHRpb25JbmRleCA9IGFjdGl2ZU9wdGlvbkluZGV4OyAvLyBlbnN1cmUgdGhhdCB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHNpbmdsZSBvcHRpb24gaXMgYWN0aXZlIGlmIGl0IGlzIGluIHRoZSBtYXRjaGluZ09wdGlvbnNcblxuICAgICAgICBpZiAoQm9vbGVhbihzaW5nbGVTZWxlY3Rpb24pICYmIHNlbGVjdGVkT3B0aW9ucy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICBpZiAobmV3TWF0Y2hpbmdPcHRpb25zLmluY2x1ZGVzKHNlbGVjdGVkT3B0aW9uc1swXSkpIHtcbiAgICAgICAgICAgIG5leHRBY3RpdmVPcHRpb25JbmRleCA9IG5ld01hdGNoaW5nT3B0aW9ucy5pbmRleE9mKHNlbGVjdGVkT3B0aW9uc1swXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIG1hdGNoaW5nT3B0aW9uczogbmV3TWF0Y2hpbmdPcHRpb25zLFxuICAgICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4OiBuZXh0QWN0aXZlT3B0aW9uSW5kZXhcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKCFuZXdNYXRjaGluZ09wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgLy8gUHJldmVudCBlbmRsZXNzIHNldFN0YXRlIC0+IGNvbXBvbmVudFdpbGxVcGRhdGUgLT4gc2V0U3RhdGUgbG9vcC5cbiAgICAgICAgICBpZiAoX3RoaXMuaGFzQWN0aXZlT3B0aW9uKCkpIHtcbiAgICAgICAgICAgIF90aGlzLmNsZWFyQWN0aXZlT3B0aW9uKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoRXVpQ29tYm9Cb3gsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHRoaXMuX2lzTW91bnRlZCA9IHRydWU7IC8vIFRPRE86IFRoaXMgd2lsbCBuZWVkIHRvIGJlIGNhbGxlZCBvbmNlIHRoZSBhY3R1YWwgc3R5bGVzaGVldCBsb2Fkcy5cblxuICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChfdGhpczIuYXV0b1NpemVJbnB1dFJlZkluc3RhbmNlKSB7XG4gICAgICAgICAgX3RoaXMyLmF1dG9TaXplSW5wdXRSZWZJbnN0YW5jZS5jb3B5SW5wdXRTdHlsZXMoKTtcbiAgICAgICAgfVxuICAgICAgfSwgMTAwKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkVXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczcgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIG9wdGlvbnMgPSBfdGhpcyRwcm9wczcub3B0aW9ucyxcbiAgICAgICAgICBzZWxlY3RlZE9wdGlvbnMgPSBfdGhpcyRwcm9wczcuc2VsZWN0ZWRPcHRpb25zLFxuICAgICAgICAgIHNpbmdsZVNlbGVjdGlvbiA9IF90aGlzJHByb3BzNy5zaW5nbGVTZWxlY3Rpb24sXG4gICAgICAgICAgc29ydE1hdGNoZXNCeSA9IF90aGlzJHByb3BzNy5zb3J0TWF0Y2hlc0J5O1xuICAgICAgdmFyIHNlYXJjaFZhbHVlID0gdGhpcy5zdGF0ZS5zZWFyY2hWYWx1ZTsgLy8gUmVhY3QgMTYuMyBoYXMgYSBidWcgKGZpeGVkIGluIDE2LjQpIHdoZXJlIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wc1xuICAgICAgLy8gaXNuJ3QgY2FsbGVkIGFmdGVyIGEgc3RhdGUgY2hhbmdlLCBhbmQgd2UgdHJhY2sgYHNlYXJjaFZhbHVlYCBpbiBzdGF0ZVxuICAgICAgLy8gaW5zdGVhZCB3ZSBuZWVkIHRvIHJlYWN0IHRvIGEgY2hhbmdlIGluIHNlYXJjaFZhbHVlIGhlcmVcblxuICAgICAgdGhpcy51cGRhdGVNYXRjaGluZ09wdGlvbnNJZkRpZmZlcmVudChnZXRNYXRjaGluZ09wdGlvbnMob3B0aW9ucywgc2VsZWN0ZWRPcHRpb25zLCBzZWFyY2hWYWx1ZSwgdGhpcy5wcm9wcy5hc3luYywgQm9vbGVhbihzaW5nbGVTZWxlY3Rpb24pLCBzb3J0TWF0Y2hlc0J5KSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgdGhpcy5faXNNb3VudGVkID0gZmFsc2U7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgdmFyIF90aGlzJHByb3BzOCA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgZGF0YVRlc3RTdWJqID0gX3RoaXMkcHJvcHM4WydkYXRhLXRlc3Qtc3ViaiddLFxuICAgICAgICAgIGFzeW5jID0gX3RoaXMkcHJvcHM4LmFzeW5jLFxuICAgICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzOC5jbGFzc05hbWUsXG4gICAgICAgICAgY29tcHJlc3NlZCA9IF90aGlzJHByb3BzOC5jb21wcmVzc2VkLFxuICAgICAgICAgIGN1c3RvbU9wdGlvblRleHQgPSBfdGhpcyRwcm9wczguY3VzdG9tT3B0aW9uVGV4dCxcbiAgICAgICAgICBmdWxsV2lkdGggPSBfdGhpcyRwcm9wczguZnVsbFdpZHRoLFxuICAgICAgICAgIGlkID0gX3RoaXMkcHJvcHM4LmlkLFxuICAgICAgICAgIGlucHV0UmVmID0gX3RoaXMkcHJvcHM4LmlucHV0UmVmLFxuICAgICAgICAgIGlzQ2xlYXJhYmxlID0gX3RoaXMkcHJvcHM4LmlzQ2xlYXJhYmxlLFxuICAgICAgICAgIGlzRGlzYWJsZWQgPSBfdGhpcyRwcm9wczguaXNEaXNhYmxlZCxcbiAgICAgICAgICBpc0ludmFsaWQgPSBfdGhpcyRwcm9wczguaXNJbnZhbGlkLFxuICAgICAgICAgIGlzTG9hZGluZyA9IF90aGlzJHByb3BzOC5pc0xvYWRpbmcsXG4gICAgICAgICAgbm9TdWdnZXN0aW9ucyA9IF90aGlzJHByb3BzOC5ub1N1Z2dlc3Rpb25zLFxuICAgICAgICAgIG9uQmx1ciA9IF90aGlzJHByb3BzOC5vbkJsdXIsXG4gICAgICAgICAgb25DaGFuZ2UgPSBfdGhpcyRwcm9wczgub25DaGFuZ2UsXG4gICAgICAgICAgb25DcmVhdGVPcHRpb24gPSBfdGhpcyRwcm9wczgub25DcmVhdGVPcHRpb24sXG4gICAgICAgICAgb25TZWFyY2hDaGFuZ2UgPSBfdGhpcyRwcm9wczgub25TZWFyY2hDaGFuZ2UsXG4gICAgICAgICAgb3B0aW9ucyA9IF90aGlzJHByb3BzOC5vcHRpb25zLFxuICAgICAgICAgIHBsYWNlaG9sZGVyID0gX3RoaXMkcHJvcHM4LnBsYWNlaG9sZGVyLFxuICAgICAgICAgIHJlbmRlck9wdGlvbiA9IF90aGlzJHByb3BzOC5yZW5kZXJPcHRpb24sXG4gICAgICAgICAgcm93SGVpZ2h0ID0gX3RoaXMkcHJvcHM4LnJvd0hlaWdodCxcbiAgICAgICAgICBzZWxlY3RlZE9wdGlvbnMgPSBfdGhpcyRwcm9wczguc2VsZWN0ZWRPcHRpb25zLFxuICAgICAgICAgIHNpbmdsZVNlbGVjdGlvbiA9IF90aGlzJHByb3BzOC5zaW5nbGVTZWxlY3Rpb24sXG4gICAgICAgICAgcHJlcGVuZCA9IF90aGlzJHByb3BzOC5wcmVwZW5kLFxuICAgICAgICAgIHNvcnRNYXRjaGVzQnkgPSBfdGhpcyRwcm9wczguc29ydE1hdGNoZXNCeSxcbiAgICAgICAgICBkZWxpbWl0ZXIgPSBfdGhpcyRwcm9wczguZGVsaW1pdGVyLFxuICAgICAgICAgIGFwcGVuZCA9IF90aGlzJHByb3BzOC5hcHBlbmQsXG4gICAgICAgICAgYXV0b0ZvY3VzID0gX3RoaXMkcHJvcHM4LmF1dG9Gb2N1cyxcbiAgICAgICAgICBhcmlhTGFiZWwgPSBfdGhpcyRwcm9wczhbJ2FyaWEtbGFiZWwnXSxcbiAgICAgICAgICBhcmlhTGFiZWxsZWRieSA9IF90aGlzJHByb3BzOFsnYXJpYS1sYWJlbGxlZGJ5J10sXG4gICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wczgsIF9leGNsdWRlZCk7XG5cbiAgICAgIHZhciBfdGhpcyRzdGF0ZTIgPSB0aGlzLnN0YXRlLFxuICAgICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4ID0gX3RoaXMkc3RhdGUyLmFjdGl2ZU9wdGlvbkluZGV4LFxuICAgICAgICAgIGhhc0ZvY3VzID0gX3RoaXMkc3RhdGUyLmhhc0ZvY3VzLFxuICAgICAgICAgIGlzTGlzdE9wZW4gPSBfdGhpcyRzdGF0ZTIuaXNMaXN0T3BlbixcbiAgICAgICAgICBsaXN0UG9zaXRpb24gPSBfdGhpcyRzdGF0ZTIubGlzdFBvc2l0aW9uLFxuICAgICAgICAgIHNlYXJjaFZhbHVlID0gX3RoaXMkc3RhdGUyLnNlYXJjaFZhbHVlLFxuICAgICAgICAgIHdpZHRoID0gX3RoaXMkc3RhdGUyLndpZHRoLFxuICAgICAgICAgIG1hdGNoaW5nT3B0aW9ucyA9IF90aGlzJHN0YXRlMi5tYXRjaGluZ09wdGlvbnM7IC8vIE1ha2Ugc3VyZSB3ZSBoYXZlIGEgdmFsaWQgSUQgaWYgdXNlcnMgZG9uJ3QgcGFzcyBvbmUgYXMgYSBwcm9wXG5cbiAgICAgIHZhciBpbnB1dElkID0gaWQgIT09IG51bGwgJiYgaWQgIT09IHZvaWQgMCA/IGlkIDogdGhpcy5yb290SWQoJ19ldWktY29tYm9ib3gtaWQnKTsgLy8gVmlzdWFsbHkgaW5kaWNhdGUgdGhlIGNvbWJvYm94IGlzIGluIGFuIGludmFsaWQgc3RhdGUgaWYgaXQgaGFzIGxvc3QgZm9jdXMgYnV0IHRoZXJlIGlzIHRleHQgZW50ZXJlZCBpbiB0aGUgaW5wdXQuXG4gICAgICAvLyBXaGVuIGN1c3RvbSBvcHRpb25zIGFyZSBkaXNhYmxlZCBhbmQgdGhlIHVzZXIgbGVhdmVzIHRoZSBjb21ibyBib3ggYWZ0ZXIgZW50ZXJpbmcgdGV4dCB0aGF0IGRvZXMgbm90IG1hdGNoIGFueVxuICAgICAgLy8gb3B0aW9ucywgdGhpcyB0ZWxscyB0aGUgdXNlciB0aGF0IHRoZXkndmUgZW50ZXJlZCBpbnZhbGlkIGlucHV0LlxuXG4gICAgICB2YXIgbWFya0FzSW52YWxpZCA9IGlzSW52YWxpZCB8fCAoaGFzRm9jdXMgPT09IGZhbHNlIHx8IGlzTGlzdE9wZW4gPT09IGZhbHNlKSAmJiBzZWFyY2hWYWx1ZTtcbiAgICAgIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpQ29tYm9Cb3gnLCBjbGFzc05hbWUsIHtcbiAgICAgICAgJ2V1aUNvbWJvQm94LS1jb21wcmVzc2VkJzogY29tcHJlc3NlZCxcbiAgICAgICAgJ2V1aUNvbWJvQm94LS1mdWxsV2lkdGgnOiBmdWxsV2lkdGgsXG4gICAgICAgICdldWlDb21ib0JveC0tcHJlcGVuZGVkJzogcHJlcGVuZCxcbiAgICAgICAgJ2V1aUNvbWJvQm94LS1hcHBlbmRlZCc6IGFwcGVuZCxcbiAgICAgICAgJ2V1aUNvbWJvQm94LWlzRGlzYWJsZWQnOiBpc0Rpc2FibGVkLFxuICAgICAgICAnZXVpQ29tYm9Cb3gtaXNJbnZhbGlkJzogbWFya0FzSW52YWxpZCxcbiAgICAgICAgJ2V1aUNvbWJvQm94LWlzT3Blbic6IGlzTGlzdE9wZW5cbiAgICAgIH0pO1xuICAgICAgdmFyIHZhbHVlID0gc2VsZWN0ZWRPcHRpb25zLm1hcChmdW5jdGlvbiAoc2VsZWN0ZWRPcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIHNlbGVjdGVkT3B0aW9uLmxhYmVsO1xuICAgICAgfSkuam9pbignLCAnKTtcbiAgICAgIHZhciBvcHRpb25zTGlzdDtcblxuICAgICAgaWYgKCFub1N1Z2dlc3Rpb25zICYmIGlzTGlzdE9wZW4pIHtcbiAgICAgICAgdmFyIG9wdGlvbnNMaXN0RGF0YVRlc3RTdWJqID0gZGF0YVRlc3RTdWJqID8gXCJcIi5jb25jYXQoZGF0YVRlc3RTdWJqLCBcIi1vcHRpb25zTGlzdFwiKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgb3B0aW9uc0xpc3QgPSBfX19FbW90aW9uSlNYKEV1aVBvcnRhbCwgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgdG9rZW46IFwiZXVpQ29tYm9Cb3gubGlzdGJveEFyaWFMYWJlbFwiLFxuICAgICAgICAgIGRlZmF1bHQ6IFwiQ2hvb3NlIGZyb20gdGhlIGZvbGxvd2luZyBvcHRpb25zXCJcbiAgICAgICAgfSwgZnVuY3Rpb24gKGxpc3Rib3hBcmlhTGFiZWwpIHtcbiAgICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlDb21ib0JveE9wdGlvbnNMaXN0LCB7XG4gICAgICAgICAgICB6SW5kZXg6IF90aGlzMy5zdGF0ZS5saXN0WkluZGV4LFxuICAgICAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXg6IF90aGlzMy5zdGF0ZS5hY3RpdmVPcHRpb25JbmRleCxcbiAgICAgICAgICAgIGFyZUFsbE9wdGlvbnNTZWxlY3RlZDogX3RoaXMzLmFyZUFsbE9wdGlvbnNTZWxlY3RlZCgpLFxuICAgICAgICAgICAgY3VzdG9tT3B0aW9uVGV4dDogY3VzdG9tT3B0aW9uVGV4dCxcbiAgICAgICAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogb3B0aW9uc0xpc3REYXRhVGVzdFN1YmosXG4gICAgICAgICAgICBmdWxsV2lkdGg6IGZ1bGxXaWR0aCxcbiAgICAgICAgICAgIGlzTG9hZGluZzogaXNMb2FkaW5nLFxuICAgICAgICAgICAgbGlzdFJlZjogX3RoaXMzLmxpc3RSZWZDYWxsYmFjayxcbiAgICAgICAgICAgIG1hdGNoaW5nT3B0aW9uczogbWF0Y2hpbmdPcHRpb25zLFxuICAgICAgICAgICAgb25DbG9zZUxpc3Q6IF90aGlzMy5jbG9zZUxpc3QsXG4gICAgICAgICAgICBvbkNyZWF0ZU9wdGlvbjogb25DcmVhdGVPcHRpb24sXG4gICAgICAgICAgICBvbk9wdGlvbkNsaWNrOiBfdGhpczMub25PcHRpb25DbGljayxcbiAgICAgICAgICAgIG9uT3B0aW9uRW50ZXJLZXk6IF90aGlzMy5vbk9wdGlvbkVudGVyS2V5LFxuICAgICAgICAgICAgb25TY3JvbGw6IF90aGlzMy5vbk9wdGlvbkxpc3RTY3JvbGwsXG4gICAgICAgICAgICBvcHRpb25SZWY6IF90aGlzMy5vcHRpb25SZWZDYWxsYmFjayxcbiAgICAgICAgICAgIG9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICAgICAgICBwb3NpdGlvbjogbGlzdFBvc2l0aW9uLFxuICAgICAgICAgICAgc2luZ2xlU2VsZWN0aW9uOiBzaW5nbGVTZWxlY3Rpb24sXG4gICAgICAgICAgICByZW5kZXJPcHRpb246IHJlbmRlck9wdGlvbixcbiAgICAgICAgICAgIHJvb3RJZDogX3RoaXMzLnJvb3RJZCxcbiAgICAgICAgICAgIHJvd0hlaWdodDogcm93SGVpZ2h0LFxuICAgICAgICAgICAgc2Nyb2xsVG9JbmRleDogYWN0aXZlT3B0aW9uSW5kZXgsXG4gICAgICAgICAgICBzZWFyY2hWYWx1ZTogc2VhcmNoVmFsdWUsXG4gICAgICAgICAgICBzZWxlY3RlZE9wdGlvbnM6IHNlbGVjdGVkT3B0aW9ucyxcbiAgICAgICAgICAgIHVwZGF0ZVBvc2l0aW9uOiBfdGhpczMudXBkYXRlUG9zaXRpb24sXG4gICAgICAgICAgICB3aWR0aDogd2lkdGgsXG4gICAgICAgICAgICBkZWxpbWl0ZXI6IGRlbGltaXRlcixcbiAgICAgICAgICAgIGdldFNlbGVjdGVkT3B0aW9uRm9yU2VhcmNoVmFsdWU6IGdldFNlbGVjdGVkT3B0aW9uRm9yU2VhcmNoVmFsdWUsXG4gICAgICAgICAgICBsaXN0Ym94QXJpYUxhYmVsOiBsaXN0Ym94QXJpYUxhYmVsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEV1aUNvbWJvQm94IGZvbGxvd3MgdGhlIFdBSS1BUklBIDEuMiBzcGVjIGZvciBlZGl0YWJsZSBjb21ib2JveGVzXG4gICAgICAgICAqIHdpdGggbGlzdCBhdXRvY29tcGxldGUuIFRoaXMgcGF0dGVybiBpcyBhbiBpbXByb3ZlbWVudCBvbiB0aGUgdXNlclxuICAgICAgICAgKiBleHBlcmllbmNlIGZvciBzY3JlZW4gcmVhZGVycyBvdmVyIHRoZSBXQUktQVJJQSAxLjEgcGF0dGVybi5cbiAgICAgICAgICpcbiAgICAgICAgICogaHR0cHM6Ly93d3cudzMub3JnL1RSL3dhaS1hcmlhLXByYWN0aWNlcy0xLjIvZXhhbXBsZXMvY29tYm9ib3gvY29tYm9ib3gtYXV0b2NvbXBsZXRlLWxpc3QuaHRtbFxuICAgICAgICAgKi9cbiAgICAgICAgX19fRW1vdGlvbkpTWChcImRpdlwiLCBfZXh0ZW5kcyh7fSwgcmVzdCwge1xuICAgICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IGRhdGFUZXN0U3ViaixcbiAgICAgICAgICBvbktleURvd246IHRoaXMub25LZXlEb3duLFxuICAgICAgICAgIHJlZjogdGhpcy5jb21ib0JveFJlZkNhbGxiYWNrXG4gICAgICAgIH0pLCBfX19FbW90aW9uSlNYKEV1aUNvbWJvQm94SW5wdXQsIHtcbiAgICAgICAgICBhdXRvU2l6ZUlucHV0UmVmOiB0aGlzLmF1dG9TaXplSW5wdXRSZWZDYWxsYmFjayxcbiAgICAgICAgICBjb21wcmVzc2VkOiBjb21wcmVzc2VkLFxuICAgICAgICAgIGZvY3VzZWRPcHRpb25JZDogdGhpcy5oYXNBY3RpdmVPcHRpb24oKSA/IHRoaXMucm9vdElkKFwiX29wdGlvbi1cIi5jb25jYXQodGhpcy5zdGF0ZS5hY3RpdmVPcHRpb25JbmRleCkpIDogdW5kZWZpbmVkLFxuICAgICAgICAgIGZ1bGxXaWR0aDogZnVsbFdpZHRoLFxuICAgICAgICAgIGhhc1NlbGVjdGVkT3B0aW9uczogc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCA+IDAsXG4gICAgICAgICAgaWQ6IGlucHV0SWQsXG4gICAgICAgICAgaW5wdXRSZWY6IHRoaXMuc2VhcmNoSW5wdXRSZWZDYWxsYmFjayxcbiAgICAgICAgICBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLFxuICAgICAgICAgIGlzTGlzdE9wZW46IGlzTGlzdE9wZW4sXG4gICAgICAgICAgbm9JY29uOiAhIW5vU3VnZ2VzdGlvbnMsXG4gICAgICAgICAgb25DaGFuZ2U6IHRoaXMub25TZWFyY2hDaGFuZ2UsXG4gICAgICAgICAgb25DbGVhcjogaXNDbGVhcmFibGUgJiYgIWlzRGlzYWJsZWQgPyB0aGlzLmNsZWFyU2VsZWN0ZWRPcHRpb25zIDogdW5kZWZpbmVkLFxuICAgICAgICAgIG9uQ2xpY2s6IHRoaXMub25Db21ib0JveENsaWNrLFxuICAgICAgICAgIG9uQ2xvc2VMaXN0Q2xpY2s6IHRoaXMub25DbG9zZUxpc3RDbGljayxcbiAgICAgICAgICBvbkZvY3VzOiB0aGlzLm9uQ29tYm9Cb3hGb2N1cyxcbiAgICAgICAgICBvbk9wZW5MaXN0Q2xpY2s6IHRoaXMub25PcGVuTGlzdENsaWNrLFxuICAgICAgICAgIG9uUmVtb3ZlT3B0aW9uOiB0aGlzLm9uUmVtb3ZlT3B0aW9uLFxuICAgICAgICAgIHBsYWNlaG9sZGVyOiBwbGFjZWhvbGRlcixcbiAgICAgICAgICByb290SWQ6IHRoaXMucm9vdElkLFxuICAgICAgICAgIHNlYXJjaFZhbHVlOiBzZWFyY2hWYWx1ZSxcbiAgICAgICAgICBzZWxlY3RlZE9wdGlvbnM6IHNlbGVjdGVkT3B0aW9ucyxcbiAgICAgICAgICBzaW5nbGVTZWxlY3Rpb246IHNpbmdsZVNlbGVjdGlvbixcbiAgICAgICAgICB0b2dnbGVCdXR0b25SZWY6IHRoaXMudG9nZ2xlQnV0dG9uUmVmQ2FsbGJhY2ssXG4gICAgICAgICAgdXBkYXRlUG9zaXRpb246IHRoaXMudXBkYXRlUG9zaXRpb24sXG4gICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgIGFwcGVuZDogc2luZ2xlU2VsZWN0aW9uID8gYXBwZW5kIDogdW5kZWZpbmVkLFxuICAgICAgICAgIHByZXBlbmQ6IHNpbmdsZVNlbGVjdGlvbiA/IHByZXBlbmQgOiB1bmRlZmluZWQsXG4gICAgICAgICAgaXNMb2FkaW5nOiBpc0xvYWRpbmcsXG4gICAgICAgICAgYXV0b0ZvY3VzOiBhdXRvRm9jdXMsXG4gICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IGFyaWFMYWJlbCxcbiAgICAgICAgICBcImFyaWEtbGFiZWxsZWRieVwiOiBhcmlhTGFiZWxsZWRieVxuICAgICAgICB9KSwgb3B0aW9uc0xpc3QpXG4gICAgICApO1xuICAgIH1cbiAgfV0sIFt7XG4gICAga2V5OiBcImdldERlcml2ZWRTdGF0ZUZyb21Qcm9wc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMobmV4dFByb3BzLCBwcmV2U3RhdGUpIHtcbiAgICAgIHZhciBvcHRpb25zID0gbmV4dFByb3BzLm9wdGlvbnMsXG4gICAgICAgICAgc2VsZWN0ZWRPcHRpb25zID0gbmV4dFByb3BzLnNlbGVjdGVkT3B0aW9ucyxcbiAgICAgICAgICBzaW5nbGVTZWxlY3Rpb24gPSBuZXh0UHJvcHMuc2luZ2xlU2VsZWN0aW9uLFxuICAgICAgICAgIHNvcnRNYXRjaGVzQnkgPSBuZXh0UHJvcHMuc29ydE1hdGNoZXNCeTtcbiAgICAgIHZhciBhY3RpdmVPcHRpb25JbmRleCA9IHByZXZTdGF0ZS5hY3RpdmVPcHRpb25JbmRleCxcbiAgICAgICAgICBzZWFyY2hWYWx1ZSA9IHByZXZTdGF0ZS5zZWFyY2hWYWx1ZTsgLy8gQ2FsY3VsYXRlIGFuZCBjYWNoZSB0aGUgb3B0aW9ucyB3aGljaCBtYXRjaCB0aGUgc2VhcmNoVmFsdWUsIGJlY2F1c2Ugd2UgdXNlIHRoaXMgaW5mb3JtYXRpb25cbiAgICAgIC8vIGluIG11bHRpcGxlIHBsYWNlcyBhbmQgaXQgd291bGQgYmUgZXhwZW5zaXZlIHRvIGNhbGN1bGF0ZSByZXBlYXRlZGx5LlxuXG4gICAgICB2YXIgbWF0Y2hpbmdPcHRpb25zID0gZ2V0TWF0Y2hpbmdPcHRpb25zKG9wdGlvbnMsIHNlbGVjdGVkT3B0aW9ucywgc2VhcmNoVmFsdWUsIG5leHRQcm9wcy5hc3luYywgQm9vbGVhbihzaW5nbGVTZWxlY3Rpb24pLCBzb3J0TWF0Y2hlc0J5KTtcbiAgICAgIHZhciBzdGF0ZVVwZGF0ZSA9IHtcbiAgICAgICAgbWF0Y2hpbmdPcHRpb25zOiBtYXRjaGluZ09wdGlvbnNcbiAgICAgIH07XG5cbiAgICAgIGlmIChhY3RpdmVPcHRpb25JbmRleCA+PSBtYXRjaGluZ09wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIHN0YXRlVXBkYXRlLmFjdGl2ZU9wdGlvbkluZGV4ID0gLTE7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzdGF0ZVVwZGF0ZTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gRXVpQ29tYm9Cb3g7XG59KENvbXBvbmVudCk7XG5cbl9kZWZpbmVQcm9wZXJ0eShFdWlDb21ib0JveCwgXCJkZWZhdWx0UHJvcHNcIiwge1xuICBhc3luYzogZmFsc2UsXG4gIGNvbXByZXNzZWQ6IGZhbHNlLFxuICBmdWxsV2lkdGg6IGZhbHNlLFxuICBpc0NsZWFyYWJsZTogdHJ1ZSxcbiAgb3B0aW9uczogW10sXG4gIHNlbGVjdGVkT3B0aW9uczogW10sXG4gIHNpbmdsZVNlbGVjdGlvbjogZmFsc2UsXG4gIHByZXBlbmQ6IHVuZGVmaW5lZCxcbiAgYXBwZW5kOiB1bmRlZmluZWQsXG4gIHNvcnRNYXRjaGVzQnk6ICdub25lJ1xufSk7XG5cbkV1aUNvbWJvQm94LnByb3BUeXBlcyA9IHtcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAqIFVwZGF0ZXMgdGhlIGxpc3Qgb2Ygb3B0aW9ucyBhc3luY2hyb25vdXNseVxuICAgICAqL1xuICBhc3luYzogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAqIFdoZW4gYHRydWVgIGNyZWF0ZXMgYSBzaG9ydGVyIGhlaWdodCBpbnB1dFxuICAgICAqL1xuICBjb21wcmVzc2VkOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgICAqIFdoZW4gYHRydWVgIGV4cGFuZHMgdG8gdGhlIGVudGlyZSB3aWR0aCBhdmFpbGFibGVcbiAgICAgKi9cbiAgZnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgaW5wdXRSZWY6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogU2hvd3MgYSBidXR0b24gdGhhdCBxdWlja2x5IGNsZWFycyBhbnkgaW5wdXRcbiAgICAgKi9cbiAgaXNDbGVhcmFibGU6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG5cbiAgLyoqXG4gICAgICogRGlzYWJsZXMgdGhlIGlucHV0XG4gICAgICovXG4gIGlzRGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICBpc0ludmFsaWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIFN3YXBzIHRoZSBkcm9wZG93biBvcHRpb25zIGZvciBhIGxvYWRpbmcgc3Bpbm5lclxuICAgICAqL1xuICBpc0xvYWRpbmc6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIERvZXNuJ3Qgc2hvdyB0aGUgc3VnZ2VzdGlvbnMgbGlzdC9kcm9wZG93blxuICAgICAqL1xuICBub1N1Z2dlc3Rpb25zOiBQcm9wVHlwZXMuYm9vbCxcbiAgb25CbHVyOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIENhbGxlZCBldmVyeSB0aW1lIHRoZSBxdWVyeSBpbiB0aGUgY29tYm8gYm94IGlzIHBhcnNlZFxuICAgICAqL1xuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uRm9jdXM6IFByb3BUeXBlcy5hbnksXG4gIG9uS2V5RG93bjogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBDYWxsZWQgZXZlcnkgdGltZSB0aGUgdGV4dCBxdWVyeSBpbiB0aGUgc2VhcmNoIGJveCBpcyBwYXJzZWRcbiAgICAgKi9cbiAgb25TZWFyY2hDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgICAqIFNldHMgdGhlIHBsYWNlaG9sZGVyIG9mIHRoZSBpbnB1dFxuICAgICAqL1xuICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgKiBFdmVyeSBvcHRpb24gbXVzdCBiZSB0aGUgc2FtZSBoZWlnaHQgYW5kIG11c3QgYmUgZXhwbGljaXRseSBzZXQgaWYgdXNpbmcgYSBjdXN0b20gcmVuZGVyXG4gICAgICovXG4gIHJvd0hlaWdodDogUHJvcFR5cGVzLm51bWJlcixcblxuICAvKipcbiAgICAgKiBXaGVuIGB0cnVlYCBvbmx5IGFsbG93cyB0aGUgdXNlciB0byBzZWxlY3QgYSBzaW5nbGUgb3B0aW9uLiBTZXQgdG8gYHsgYXNQbGFpblRleHQ6IHRydWUgfWAgdG8gbm90IHJlbmRlciBpbnB1dCBzZWxlY3Rpb24gYXMgcGlsbHNcbiAgICAgKi9cbiAgc2luZ2xlU2VsZWN0aW9uOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGFzUGxhaW5UZXh0OiBQcm9wVHlwZXMuYm9vbFxuICB9KS5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICAgKiBEaXNwbGF5IG1hdGNoaW5nIG9wdGlvbnMgYnk6XG4gICAgICogYHN0YXJ0c1dpdGhgOiBtb3ZlcyBpdGVtcyB0aGF0IHN0YXJ0IHdpdGggc2VhcmNoIHZhbHVlIHRvIHRvcCBvZiB0aGUgbGlzdDtcbiAgICAgKiBgbm9uZWA6IGRvbid0IGNoYW5nZSB0aGUgc29ydCBvcmRlciBvZiBpbml0aWFsIG9iamVjdFxuICAgICAqL1xuICBzb3J0TWF0Y2hlc0J5OiBQcm9wVHlwZXMub25lT2YoW1wibm9uZVwiLCBcInN0YXJ0c1dpdGhcIl0pLmlzUmVxdWlyZWQsXG5cbiAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnB1dCBncm91cCB3aXRoIGVsZW1lbnQocykgY29taW5nIGJlZm9yZSBpbnB1dC4gSXQgd29uJ3Qgc2hvdyBpZiBgc2luZ2xlU2VsZWN0aW9uYCBpcyBzZXQgdG8gYGZhbHNlYC5cbiAgICAgKiBgc3RyaW5nYCB8IGBSZWFjdEVsZW1lbnRgIG9yIGFuIGFycmF5IG9mIHRoZXNlXG4gICAgICovXG4gIHByZXBlbmQ6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnB1dCBncm91cCB3aXRoIGVsZW1lbnQocykgY29taW5nIGFmdGVyIGlucHV0LiBJdCB3b24ndCBzaG93IGlmIGBzaW5nbGVTZWxlY3Rpb25gIGlzIHNldCB0byBgZmFsc2VgLlxuICAgICAqIGBzdHJpbmdgIHwgYFJlYWN0RWxlbWVudGAgb3IgYW4gYXJyYXkgb2YgdGhlc2VcbiAgICAgKi9cbiAgYXBwZW5kOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIEEgc3BlY2lhbCBjaGFyYWN0ZXIgdG8gdXNlIGFzIGEgdmFsdWUgc2VwYXJhdG9yLiBUeXBpY2FsbHkgYSBjb21tYSBgLGBcbiAgICAgKi9cbiAgZGVsaW1pdGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAqIFNwZWNpZmllcyB0aGF0IHRoZSBpbnB1dCBzaG91bGQgaGF2ZSBmb2N1cyB3aGVuIHRoZSBjb21wb25lbnQgbG9hZHNcbiAgICAgKi9cbiAgYXV0b0ZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBSZXF1aXJlZCB3aGVuIHJlbmRlcmluZyB3aXRob3V0IGEgdmlzaWJsZSBsYWJlbCBmcm9tIFtFdWlGb3JtUm93XSgvIy9mb3Jtcy9mb3JtLWxheW91dHMpLlxuICAgICAqL1xuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgKiBSZWZlcmVuY2UgSUQgb2YgYSB0ZXh0IGVsZW1lbnQgY29udGFpbmluZyB0aGUgdmlzaWJsZSBsYWJlbCBmb3IgdGhlIGNvbWJvIGJveCB3aGVuIG5vdFxuICAgICAqIHN1cHBsaWVkIGJ5IGBhcmlhLWxhYmVsYCBvciBmcm9tIFtFdWlGb3JtUm93XSgvIy9mb3Jtcy9mb3JtLWxheW91dHMpLlxuICAgICAqL1xuICBcImFyaWEtbGFiZWxsZWRieVwiOiBQcm9wVHlwZXMuc3RyaW5nXG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbnZhciBfZXhjbHVkZWQgPSBbXCJrZXlcIiwgXCJpc0dyb3VwTGFiZWxPcHRpb25cIiwgXCJsYWJlbFwiLCBcInZhbHVlXCJdLFxuICAgIF9leGNsdWRlZDIgPSBbXCJkYXRhLXRlc3Qtc3VialwiLCBcImFjdGl2ZU9wdGlvbkluZGV4XCIsIFwiYXJlQWxsT3B0aW9uc1NlbGVjdGVkXCIsIFwiY3VzdG9tT3B0aW9uVGV4dFwiLCBcImZ1bGxXaWR0aFwiLCBcImdldFNlbGVjdGVkT3B0aW9uRm9yU2VhcmNoVmFsdWVcIiwgXCJpc0xvYWRpbmdcIiwgXCJsaXN0UmVmXCIsIFwibWF0Y2hpbmdPcHRpb25zXCIsIFwib25DbG9zZUxpc3RcIiwgXCJvbkNyZWF0ZU9wdGlvblwiLCBcIm9uT3B0aW9uQ2xpY2tcIiwgXCJvbk9wdGlvbkVudGVyS2V5XCIsIFwib25TY3JvbGxcIiwgXCJvcHRpb25SZWZcIiwgXCJvcHRpb25zXCIsIFwicG9zaXRpb25cIiwgXCJyZW5kZXJPcHRpb25cIiwgXCJyb290SWRcIiwgXCJyb3dIZWlnaHRcIiwgXCJzY3JvbGxUb0luZGV4XCIsIFwic2VhcmNoVmFsdWVcIiwgXCJzZWxlY3RlZE9wdGlvbnNcIiwgXCJzaW5nbGVTZWxlY3Rpb25cIiwgXCJ1cGRhdGVQb3NpdGlvblwiLCBcIndpZHRoXCIsIFwiZGVsaW1pdGVyXCIsIFwiekluZGV4XCIsIFwic3R5bGVcIiwgXCJsaXN0Ym94QXJpYUxhYmVsXCJdO1xuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgRml4ZWRTaXplTGlzdCB9IGZyb20gJ3JlYWN0LXdpbmRvdyc7XG5pbXBvcnQgeyBFdWlGbGV4R3JvdXAsIEV1aUZsZXhJdGVtIH0gZnJvbSAnLi4vLi4vZmxleCc7XG5pbXBvcnQgeyBFdWlIaWdobGlnaHQgfSBmcm9tICcuLi8uLi9oaWdobGlnaHQnO1xuaW1wb3J0IHsgRXVpVGV4dCB9IGZyb20gJy4uLy4uL3RleHQnO1xuaW1wb3J0IHsgRXVpTG9hZGluZ1NwaW5uZXIgfSBmcm9tICcuLi8uLi9sb2FkaW5nJztcbmltcG9ydCB7IEV1aUNvbWJvQm94VGl0bGUgfSBmcm9tICcuL2NvbWJvX2JveF90aXRsZSc7XG5pbXBvcnQgeyBFdWlJMThuIH0gZnJvbSAnLi4vLi4vaTE4bic7XG5pbXBvcnQgeyBFdWlGaWx0ZXJTZWxlY3RJdGVtIH0gZnJvbSAnLi4vLi4vZmlsdGVyX2dyb3VwL2ZpbHRlcl9zZWxlY3RfaXRlbSc7XG5pbXBvcnQgeyBFdWlCYWRnZSB9IGZyb20gJy4uLy4uL2JhZGdlLyc7XG5pbXBvcnQgeyBFdWlQb3BvdmVyUGFuZWwgfSBmcm9tICcuLi8uLi9wb3BvdmVyL3BvcG92ZXJfcGFuZWwnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBPUFRJT05fQ09OVEVOVF9DTEFTU05BTUUgPSAnZXVpQ29tYm9Cb3hPcHRpb25fX2NvbnRlbnQnO1xuXG52YXIgaGl0RW50ZXJCYWRnZSA9IF9fX0Vtb3Rpb25KU1goRXVpQmFkZ2UsIHtcbiAgY2xhc3NOYW1lOiBcImV1aUNvbWJvQm94T3B0aW9uX19lbnRlckJhZGdlXCIsXG4gIGNvbG9yOiBcImhvbGxvd1wiLFxuICBpY29uVHlwZTogXCJyZXR1cm5LZXlcIixcbiAgXCJhcmlhLWhpZGRlblwiOiBcInRydWVcIlxufSk7XG5cbmV4cG9ydCB2YXIgRXVpQ29tYm9Cb3hPcHRpb25zTGlzdCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoRXVpQ29tYm9Cb3hPcHRpb25zTGlzdCwgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihFdWlDb21ib0JveE9wdGlvbnNMaXN0KTtcblxuICBmdW5jdGlvbiBFdWlDb21ib0JveE9wdGlvbnNMaXN0KCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlDb21ib0JveE9wdGlvbnNMaXN0KTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsLmFwcGx5KF9zdXBlciwgW3RoaXNdLmNvbmNhdChhcmdzKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwibGlzdFJlZkluc3RhbmNlXCIsIG51bGwpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImxpc3RSZWZcIiwgbnVsbCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwibGlzdEJveFJlZlwiLCBudWxsKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJ1cGRhdGVQb3NpdGlvblwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBXYWl0IGEgYmVhdCBmb3IgdGhlIERPTSB0byB1cGRhdGUsIHNpbmNlIHdlIGRlcGVuZCBvbiBET00gZWxlbWVudHMnIGJvdW5kcy5cbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzLnByb3BzLnVwZGF0ZVBvc2l0aW9uKF90aGlzLmxpc3RSZWZJbnN0YW5jZSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJjbG9zZUxpc3RPblNjcm9sbFwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIC8vIENsb3NlIHRoZSBsaXN0IHdoZW4gYSBzY3JvbGwgZXZlbnQgaGFwcGVucywgYnV0IG5vdCBpZiB0aGUgc2Nyb2xsIGhhcHBlbmVkIGluIHRoZSBvcHRpb25zIGxpc3QuXG4gICAgICAvLyBUaGlzIG1pcnJvcnMgRmlyZWZveCdzIGFwcHJvYWNoIG9mIGF1dG8tY2xvc2luZyBgc2VsZWN0YCBlbGVtZW50cyBvbnNjcm9sbC5cbiAgICAgIGlmIChfdGhpcy5saXN0UmVmSW5zdGFuY2UgJiYgZXZlbnQudGFyZ2V0ICYmIF90aGlzLmxpc3RSZWZJbnN0YW5jZS5jb250YWlucyhldmVudC50YXJnZXQpID09PSBmYWxzZSkge1xuICAgICAgICBfdGhpcy5wcm9wcy5vbkNsb3NlTGlzdChldmVudCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwibGlzdFJlZkNhbGxiYWNrXCIsIGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgIF90aGlzLnByb3BzLmxpc3RSZWYocmVmKTtcblxuICAgICAgX3RoaXMubGlzdFJlZkluc3RhbmNlID0gcmVmO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInNldExpc3RSZWZcIiwgZnVuY3Rpb24gKHJlZikge1xuICAgICAgX3RoaXMubGlzdFJlZiA9IHJlZjtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzZXRMaXN0Qm94UmVmXCIsIGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgIF90aGlzLmxpc3RCb3hSZWYgPSByZWY7XG5cbiAgICAgIGlmIChyZWYpIHtcbiAgICAgICAgcmVmLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsIF90aGlzLnByb3BzLmxpc3Rib3hBcmlhTGFiZWwpO1xuICAgICAgICByZWYuc2V0QXR0cmlidXRlKCdpZCcsIF90aGlzLnByb3BzLnJvb3RJZCgnbGlzdGJveCcpKTtcbiAgICAgICAgcmVmLnNldEF0dHJpYnV0ZSgncm9sZScsICdsaXN0Ym94Jyk7XG4gICAgICAgIHJlZi5zZXRBdHRyaWJ1dGUoJ3RhYkluZGV4JywgJzAnKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJMaXN0Um93XCIsIGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICB2YXIgX29wdGlvbiRrZXk7XG5cbiAgICAgIHZhciBkYXRhID0gX3JlZi5kYXRhLFxuICAgICAgICAgIGluZGV4ID0gX3JlZi5pbmRleCxcbiAgICAgICAgICBzdHlsZSA9IF9yZWYuc3R5bGU7XG4gICAgICB2YXIgb3B0aW9uID0gZGF0YVtpbmRleF07XG5cbiAgICAgIHZhciBrZXkgPSBvcHRpb24ua2V5LFxuICAgICAgICAgIGlzR3JvdXBMYWJlbE9wdGlvbiA9IG9wdGlvbi5pc0dyb3VwTGFiZWxPcHRpb24sXG4gICAgICAgICAgbGFiZWwgPSBvcHRpb24ubGFiZWwsXG4gICAgICAgICAgdmFsdWUgPSBvcHRpb24udmFsdWUsXG4gICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhvcHRpb24sIF9leGNsdWRlZCk7XG5cbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIHNpbmdsZVNlbGVjdGlvbiA9IF90aGlzJHByb3BzLnNpbmdsZVNlbGVjdGlvbixcbiAgICAgICAgICBzZWxlY3RlZE9wdGlvbnMgPSBfdGhpcyRwcm9wcy5zZWxlY3RlZE9wdGlvbnMsXG4gICAgICAgICAgb25PcHRpb25DbGljayA9IF90aGlzJHByb3BzLm9uT3B0aW9uQ2xpY2ssXG4gICAgICAgICAgb3B0aW9uUmVmID0gX3RoaXMkcHJvcHMub3B0aW9uUmVmLFxuICAgICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4ID0gX3RoaXMkcHJvcHMuYWN0aXZlT3B0aW9uSW5kZXgsXG4gICAgICAgICAgcmVuZGVyT3B0aW9uID0gX3RoaXMkcHJvcHMucmVuZGVyT3B0aW9uLFxuICAgICAgICAgIHNlYXJjaFZhbHVlID0gX3RoaXMkcHJvcHMuc2VhcmNoVmFsdWUsXG4gICAgICAgICAgcm9vdElkID0gX3RoaXMkcHJvcHMucm9vdElkO1xuXG4gICAgICBpZiAoaXNHcm91cExhYmVsT3B0aW9uKSB7XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgICAgICBrZXk6IGtleSAhPT0gbnVsbCAmJiBrZXkgIT09IHZvaWQgMCA/IGtleSA6IGxhYmVsLnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgc3R5bGU6IHN0eWxlXG4gICAgICAgIH0sIF9fX0Vtb3Rpb25KU1goRXVpQ29tYm9Cb3hUaXRsZSwgbnVsbCwgbGFiZWwpKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGNoZWNrZWQgPSB1bmRlZmluZWQ7XG5cbiAgICAgIGlmIChzaW5nbGVTZWxlY3Rpb24gJiYgc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCAmJiBzZWxlY3RlZE9wdGlvbnNbMF0ubGFiZWwgPT09IGxhYmVsICYmIHNlbGVjdGVkT3B0aW9uc1swXS5rZXkgPT09IGtleSkge1xuICAgICAgICBjaGVja2VkID0gJ29uJztcbiAgICAgIH1cblxuICAgICAgdmFyIG9wdGlvbklzRm9jdXNlZCA9IGFjdGl2ZU9wdGlvbkluZGV4ID09PSBpbmRleDtcbiAgICAgIHZhciBvcHRpb25Jc0Rpc2FibGVkID0gb3B0aW9uLmhhc093blByb3BlcnR5KCdkaXNhYmxlZCcpICYmIG9wdGlvbi5kaXNhYmxlZCA9PT0gdHJ1ZTtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUZpbHRlclNlbGVjdEl0ZW0sIF9leHRlbmRzKHtcbiAgICAgICAgc3R5bGU6IHN0eWxlLFxuICAgICAgICBrZXk6IChfb3B0aW9uJGtleSA9IG9wdGlvbi5rZXkpICE9PSBudWxsICYmIF9vcHRpb24ka2V5ICE9PSB2b2lkIDAgPyBfb3B0aW9uJGtleSA6IG9wdGlvbi5sYWJlbC50b0xvd2VyQ2FzZSgpLFxuICAgICAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKCkge1xuICAgICAgICAgIGlmIChvbk9wdGlvbkNsaWNrKSB7XG4gICAgICAgICAgICBvbk9wdGlvbkNsaWNrKG9wdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICByZWY6IG9wdGlvblJlZi5iaW5kKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBpbmRleCksXG4gICAgICAgIGlzRm9jdXNlZDogb3B0aW9uSXNGb2N1c2VkLFxuICAgICAgICBjaGVja2VkOiBjaGVja2VkLFxuICAgICAgICBzaG93SWNvbnM6IHNpbmdsZVNlbGVjdGlvbiA/IHRydWUgOiBmYWxzZSxcbiAgICAgICAgaWQ6IHJvb3RJZChcIl9vcHRpb24tXCIuY29uY2F0KGluZGV4KSksXG4gICAgICAgIHRpdGxlOiBsYWJlbFxuICAgICAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcImV1aUNvbWJvQm94T3B0aW9uX19jb250ZW50V3JhcHBlclwiXG4gICAgICB9LCByZW5kZXJPcHRpb24gPyBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogT1BUSU9OX0NPTlRFTlRfQ0xBU1NOQU1FXG4gICAgICB9LCByZW5kZXJPcHRpb24ob3B0aW9uLCBzZWFyY2hWYWx1ZSwgJ2V1aUNvbWJvQm94T3B0aW9uX19yZW5kZXJPcHRpb24nKSkgOiBfX19FbW90aW9uSlNYKEV1aUhpZ2hsaWdodCwge1xuICAgICAgICBzZWFyY2g6IHNlYXJjaFZhbHVlLFxuICAgICAgICBjbGFzc05hbWU6IE9QVElPTl9DT05URU5UX0NMQVNTTkFNRVxuICAgICAgfSwgbGFiZWwpLCBvcHRpb25Jc0ZvY3VzZWQgJiYgIW9wdGlvbklzRGlzYWJsZWQgPyBoaXRFbnRlckJhZGdlIDogbnVsbCkpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEV1aUNvbWJvQm94T3B0aW9uc0xpc3QsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIC8vIFdhaXQgYSBmcmFtZSwgb3RoZXJ3aXNlIG1vdmluZyBmb2N1cyBmcm9tIG9uZSBjb21ibyBib3ggdG8gYW5vdGhlciB3aWxsIHJlc3VsdCBpbiB0aGUgY2xhc3NcbiAgICAgIC8vIGJlaW5nIHJlbW92ZWQgZnJvbSB0aGUgYm9keS5cbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgnZXVpQm9keS1oYXNQb3J0YWxDb250ZW50Jyk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMudXBkYXRlUG9zaXRpb24oKTtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLnVwZGF0ZVBvc2l0aW9uKTsgLy8gRmlyZWZveCB3aWxsIHRyaWdnZXIgYSBzY3JvbGwgZXZlbnQgaW4gbWFueSBjb21tb24gc2l0dWF0aW9ucyB3aGVuIHRoZSBvcHRpb25zIGxpc3QgZGl2IGlzIGFwcGVuZGVkXG4gICAgICAvLyB0byB0aGUgRE9NOyBpbiB0ZXN0aW5nIGl0IHdhcyBhbHdheXMgd2l0aGluIDEwMG1zLCBidXQgc2V0dGluZyBhIHRpbWVvdXQgaGVyZSBmb3IgNTAwbXMgdG8gYmUgc2FmZVxuXG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIF90aGlzMi5jbG9zZUxpc3RPblNjcm9sbCwge1xuICAgICAgICAgIHBhc3NpdmU6IHRydWUsXG4gICAgICAgICAgLy8gZm9yIGJldHRlciBwZXJmb3JtYW5jZSBhcyB3ZSB3b24ndCBjYWxsIHByZXZlbnREZWZhdWx0XG4gICAgICAgICAgY2FwdHVyZTogdHJ1ZSAvLyBzY3JvbGwgZXZlbnRzIGRvbid0IGJ1YmJsZSwgdGhleSBtdXN0IGJlIGNhcHR1cmVkIGluc3RlYWRcblxuICAgICAgICB9KTtcbiAgICAgIH0sIDUwMCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudERpZFVwZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzKSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IHByZXZQcm9wcy5vcHRpb25zLFxuICAgICAgICAgIHNlbGVjdGVkT3B0aW9ucyA9IHByZXZQcm9wcy5zZWxlY3RlZE9wdGlvbnMsXG4gICAgICAgICAgc2VhcmNoVmFsdWUgPSBwcmV2UHJvcHMuc2VhcmNoVmFsdWU7IC8vIFdlIGRvbid0IGNvbXBhcmUgbWF0Y2hpbmdPcHRpb25zIGJlY2F1c2UgdGhhdCB3aWxsIHJlc3VsdCBpbiBhIGxvb3AuXG5cbiAgICAgIGlmIChzZWFyY2hWYWx1ZSAhPT0gdGhpcy5wcm9wcy5zZWFyY2hWYWx1ZSB8fCBvcHRpb25zICE9PSB0aGlzLnByb3BzLm9wdGlvbnMgfHwgc2VsZWN0ZWRPcHRpb25zICE9PSB0aGlzLnByb3BzLnNlbGVjdGVkT3B0aW9ucykge1xuICAgICAgICB0aGlzLnVwZGF0ZVBvc2l0aW9uKCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmxpc3RSZWYgJiYgdHlwZW9mIHRoaXMucHJvcHMuYWN0aXZlT3B0aW9uSW5kZXggIT09ICd1bmRlZmluZWQnICYmIHRoaXMucHJvcHMuYWN0aXZlT3B0aW9uSW5kZXggIT09IHByZXZQcm9wcy5hY3RpdmVPcHRpb25JbmRleCkge1xuICAgICAgICB0aGlzLmxpc3RSZWYuc2Nyb2xsVG9JdGVtKHRoaXMucHJvcHMuYWN0aXZlT3B0aW9uSW5kZXgsICdhdXRvJyk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCdldWlCb2R5LWhhc1BvcnRhbENvbnRlbnQnKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLnVwZGF0ZVBvc2l0aW9uKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLmNsb3NlTGlzdE9uU2Nyb2xsLCB7XG4gICAgICAgIGNhcHR1cmU6IHRydWVcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzMiA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgZGF0YVRlc3RTdWJqID0gX3RoaXMkcHJvcHMyWydkYXRhLXRlc3Qtc3ViaiddLFxuICAgICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4ID0gX3RoaXMkcHJvcHMyLmFjdGl2ZU9wdGlvbkluZGV4LFxuICAgICAgICAgIGFyZUFsbE9wdGlvbnNTZWxlY3RlZCA9IF90aGlzJHByb3BzMi5hcmVBbGxPcHRpb25zU2VsZWN0ZWQsXG4gICAgICAgICAgY3VzdG9tT3B0aW9uVGV4dCA9IF90aGlzJHByb3BzMi5jdXN0b21PcHRpb25UZXh0LFxuICAgICAgICAgIGZ1bGxXaWR0aCA9IF90aGlzJHByb3BzMi5mdWxsV2lkdGgsXG4gICAgICAgICAgZ2V0U2VsZWN0ZWRPcHRpb25Gb3JTZWFyY2hWYWx1ZSA9IF90aGlzJHByb3BzMi5nZXRTZWxlY3RlZE9wdGlvbkZvclNlYXJjaFZhbHVlLFxuICAgICAgICAgIGlzTG9hZGluZyA9IF90aGlzJHByb3BzMi5pc0xvYWRpbmcsXG4gICAgICAgICAgbGlzdFJlZiA9IF90aGlzJHByb3BzMi5saXN0UmVmLFxuICAgICAgICAgIG1hdGNoaW5nT3B0aW9ucyA9IF90aGlzJHByb3BzMi5tYXRjaGluZ09wdGlvbnMsXG4gICAgICAgICAgb25DbG9zZUxpc3QgPSBfdGhpcyRwcm9wczIub25DbG9zZUxpc3QsXG4gICAgICAgICAgb25DcmVhdGVPcHRpb24gPSBfdGhpcyRwcm9wczIub25DcmVhdGVPcHRpb24sXG4gICAgICAgICAgb25PcHRpb25DbGljayA9IF90aGlzJHByb3BzMi5vbk9wdGlvbkNsaWNrLFxuICAgICAgICAgIG9uT3B0aW9uRW50ZXJLZXkgPSBfdGhpcyRwcm9wczIub25PcHRpb25FbnRlcktleSxcbiAgICAgICAgICBvblNjcm9sbCA9IF90aGlzJHByb3BzMi5vblNjcm9sbCxcbiAgICAgICAgICBvcHRpb25SZWYgPSBfdGhpcyRwcm9wczIub3B0aW9uUmVmLFxuICAgICAgICAgIG9wdGlvbnMgPSBfdGhpcyRwcm9wczIub3B0aW9ucyxcbiAgICAgICAgICBfdGhpcyRwcm9wczIkcG9zaXRpb24gPSBfdGhpcyRwcm9wczIucG9zaXRpb24sXG4gICAgICAgICAgcG9zaXRpb24gPSBfdGhpcyRwcm9wczIkcG9zaXRpb24gPT09IHZvaWQgMCA/ICdib3R0b20nIDogX3RoaXMkcHJvcHMyJHBvc2l0aW9uLFxuICAgICAgICAgIHJlbmRlck9wdGlvbiA9IF90aGlzJHByb3BzMi5yZW5kZXJPcHRpb24sXG4gICAgICAgICAgcm9vdElkID0gX3RoaXMkcHJvcHMyLnJvb3RJZCxcbiAgICAgICAgICByb3dIZWlnaHQgPSBfdGhpcyRwcm9wczIucm93SGVpZ2h0LFxuICAgICAgICAgIHNjcm9sbFRvSW5kZXggPSBfdGhpcyRwcm9wczIuc2Nyb2xsVG9JbmRleCxcbiAgICAgICAgICBzZWFyY2hWYWx1ZSA9IF90aGlzJHByb3BzMi5zZWFyY2hWYWx1ZSxcbiAgICAgICAgICBzZWxlY3RlZE9wdGlvbnMgPSBfdGhpcyRwcm9wczIuc2VsZWN0ZWRPcHRpb25zLFxuICAgICAgICAgIHNpbmdsZVNlbGVjdGlvbiA9IF90aGlzJHByb3BzMi5zaW5nbGVTZWxlY3Rpb24sXG4gICAgICAgICAgdXBkYXRlUG9zaXRpb24gPSBfdGhpcyRwcm9wczIudXBkYXRlUG9zaXRpb24sXG4gICAgICAgICAgd2lkdGggPSBfdGhpcyRwcm9wczIud2lkdGgsXG4gICAgICAgICAgZGVsaW1pdGVyID0gX3RoaXMkcHJvcHMyLmRlbGltaXRlcixcbiAgICAgICAgICB6SW5kZXggPSBfdGhpcyRwcm9wczIuekluZGV4LFxuICAgICAgICAgIHN0eWxlID0gX3RoaXMkcHJvcHMyLnN0eWxlLFxuICAgICAgICAgIGxpc3Rib3hBcmlhTGFiZWwgPSBfdGhpcyRwcm9wczIubGlzdGJveEFyaWFMYWJlbCxcbiAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzMiwgX2V4Y2x1ZGVkMik7XG5cbiAgICAgIHZhciBlbXB0eVN0YXRlQ29udGVudDtcblxuICAgICAgaWYgKGlzTG9hZGluZykge1xuICAgICAgICBlbXB0eVN0YXRlQ29udGVudCA9IF9fX0Vtb3Rpb25KU1goRXVpRmxleEdyb3VwLCB7XG4gICAgICAgICAgZ3V0dGVyU2l6ZTogXCJzXCIsXG4gICAgICAgICAganVzdGlmeUNvbnRlbnQ6IFwiY2VudGVyXCJcbiAgICAgICAgfSwgX19fRW1vdGlvbkpTWChFdWlGbGV4SXRlbSwge1xuICAgICAgICAgIGdyb3c6IGZhbHNlXG4gICAgICAgIH0sIF9fX0Vtb3Rpb25KU1goRXVpTG9hZGluZ1NwaW5uZXIsIHtcbiAgICAgICAgICBzaXplOiBcIm1cIlxuICAgICAgICB9KSksIF9fX0Vtb3Rpb25KU1goRXVpRmxleEl0ZW0sIHtcbiAgICAgICAgICBncm93OiBmYWxzZVxuICAgICAgICB9LCBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICB0b2tlbjogXCJldWlDb21ib0JveE9wdGlvbnNMaXN0LmxvYWRpbmdPcHRpb25zXCIsXG4gICAgICAgICAgZGVmYXVsdDogXCJMb2FkaW5nIG9wdGlvbnNcIlxuICAgICAgICB9KSkpO1xuICAgICAgfSBlbHNlIGlmIChzZWFyY2hWYWx1ZSAmJiBtYXRjaGluZ09wdGlvbnMgJiYgbWF0Y2hpbmdPcHRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBpZiAob25DcmVhdGVPcHRpb24gJiYgZ2V0U2VsZWN0ZWRPcHRpb25Gb3JTZWFyY2hWYWx1ZSkge1xuICAgICAgICAgIGlmIChkZWxpbWl0ZXIgJiYgc2VhcmNoVmFsdWUuaW5jbHVkZXMoZGVsaW1pdGVyKSkge1xuICAgICAgICAgICAgZW1wdHlTdGF0ZUNvbnRlbnQgPSBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcImV1aUNvbWJvQm94T3B0aW9uX19jb250ZW50V3JhcHBlclwiXG4gICAgICAgICAgICB9LCBfX19FbW90aW9uSlNYKFwicFwiLCB7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlDb21ib0JveE9wdGlvbl9fZW1wdHlTdGF0ZVRleHRcIlxuICAgICAgICAgICAgfSwgX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgICAgIHRva2VuOiBcImV1aUNvbWJvQm94T3B0aW9uc0xpc3QuZGVsaW1pdGVyTWVzc2FnZVwiLFxuICAgICAgICAgICAgICBkZWZhdWx0OiBcIkFkZCBlYWNoIGl0ZW0gc2VwYXJhdGVkIGJ5IHtkZWxpbWl0ZXJ9XCIsXG4gICAgICAgICAgICAgIHZhbHVlczoge1xuICAgICAgICAgICAgICAgIGRlbGltaXRlcjogX19fRW1vdGlvbkpTWChcInN0cm9uZ1wiLCBudWxsLCBkZWxpbWl0ZXIpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKSwgaGl0RW50ZXJCYWRnZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBzZWxlY3RlZE9wdGlvbkZvclZhbHVlID0gZ2V0U2VsZWN0ZWRPcHRpb25Gb3JTZWFyY2hWYWx1ZShzZWFyY2hWYWx1ZSwgc2VsZWN0ZWRPcHRpb25zKTtcblxuICAgICAgICAgICAgaWYgKHNlbGVjdGVkT3B0aW9uRm9yVmFsdWUpIHtcbiAgICAgICAgICAgICAgLy8gRGlzYWxsb3cgZHVwbGljYXRlIGN1c3RvbSBvcHRpb25zLlxuICAgICAgICAgICAgICBlbXB0eVN0YXRlQ29udGVudCA9IF9fX0Vtb3Rpb25KU1goXCJwXCIsIG51bGwsIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgICAgICAgIHRva2VuOiBcImV1aUNvbWJvQm94T3B0aW9uc0xpc3QuYWxyZWFkeUFkZGVkXCIsXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogXCJ7bGFiZWx9IGhhcyBhbHJlYWR5IGJlZW4gYWRkZWRcIixcbiAgICAgICAgICAgICAgICB2YWx1ZXM6IHtcbiAgICAgICAgICAgICAgICAgIGxhYmVsOiBfX19FbW90aW9uSlNYKFwic3Ryb25nXCIsIG51bGwsIHNlbGVjdGVkT3B0aW9uRm9yVmFsdWUubGFiZWwpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB2YXIgaGlnaGxpZ2h0U2VhcmNoVmFsdWUgPSBmdW5jdGlvbiBoaWdobGlnaHRTZWFyY2hWYWx1ZSh0ZXh0LCBzZWFyY2hWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHZhciByZWcgPSBuZXcgUmVnRXhwKC8oXFx7c2VhcmNoVmFsdWV9KS8sICdnaScpO1xuICAgICAgICAgICAgICAgIHZhciBwYXJ0cyA9IHRleHQuc3BsaXQocmVnKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcInBcIiwge1xuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcImV1aUNvbWJvQm94T3B0aW9uX19lbXB0eVN0YXRlVGV4dFwiXG4gICAgICAgICAgICAgICAgfSwgcGFydHMubWFwKGZ1bmN0aW9uIChwYXJ0LCBpZHgpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJ0Lm1hdGNoKHJlZykgPyBfX19FbW90aW9uSlNYKFwic3Ryb25nXCIsIHtcbiAgICAgICAgICAgICAgICAgICAga2V5OiBpZHhcbiAgICAgICAgICAgICAgICAgIH0sIHNlYXJjaFZhbHVlKSA6IHBhcnQ7XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIGVtcHR5U3RhdGVDb250ZW50ID0gX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcImV1aUNvbWJvQm94T3B0aW9uX19jb250ZW50V3JhcHBlclwiXG4gICAgICAgICAgICAgIH0sIGN1c3RvbU9wdGlvblRleHQgPyBoaWdobGlnaHRTZWFyY2hWYWx1ZShjdXN0b21PcHRpb25UZXh0LCBzZWFyY2hWYWx1ZSkgOiBfX19FbW90aW9uSlNYKFwicFwiLCB7XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcImV1aUNvbWJvQm94T3B0aW9uX19lbXB0eVN0YXRlVGV4dFwiXG4gICAgICAgICAgICAgIH0sIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgICAgICAgIHRva2VuOiBcImV1aUNvbWJvQm94T3B0aW9uc0xpc3QuY3JlYXRlQ3VzdG9tT3B0aW9uXCIsXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogXCJBZGQge3NlYXJjaFZhbHVlfSBhcyBhIGN1c3RvbSBvcHRpb25cIixcbiAgICAgICAgICAgICAgICB2YWx1ZXM6IHtcbiAgICAgICAgICAgICAgICAgIHNlYXJjaFZhbHVlOiBfX19FbW90aW9uSlNYKFwic3Ryb25nXCIsIG51bGwsIHNlYXJjaFZhbHVlKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSkpLCBoaXRFbnRlckJhZGdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZW1wdHlTdGF0ZUNvbnRlbnQgPSBfX19FbW90aW9uSlNYKFwicFwiLCBudWxsLCBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICAgIHRva2VuOiBcImV1aUNvbWJvQm94T3B0aW9uc0xpc3Qubm9NYXRjaGluZ09wdGlvbnNcIixcbiAgICAgICAgICAgIGRlZmF1bHQ6IFwie3NlYXJjaFZhbHVlfSBkb2Vzbid0IG1hdGNoIGFueSBvcHRpb25zXCIsXG4gICAgICAgICAgICB2YWx1ZXM6IHtcbiAgICAgICAgICAgICAgc2VhcmNoVmFsdWU6IF9fX0Vtb3Rpb25KU1goXCJzdHJvbmdcIiwgbnVsbCwgc2VhcmNoVmFsdWUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFvcHRpb25zLmxlbmd0aCkge1xuICAgICAgICBlbXB0eVN0YXRlQ29udGVudCA9IF9fX0Vtb3Rpb25KU1goXCJwXCIsIG51bGwsIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgIHRva2VuOiBcImV1aUNvbWJvQm94T3B0aW9uc0xpc3Qubm9BdmFpbGFibGVPcHRpb25zXCIsXG4gICAgICAgICAgZGVmYXVsdDogXCJUaGVyZSBhcmVuJ3QgYW55IG9wdGlvbnMgYXZhaWxhYmxlXCJcbiAgICAgICAgfSkpO1xuICAgICAgfSBlbHNlIGlmIChhcmVBbGxPcHRpb25zU2VsZWN0ZWQpIHtcbiAgICAgICAgZW1wdHlTdGF0ZUNvbnRlbnQgPSBfX19FbW90aW9uSlNYKFwicFwiLCBudWxsLCBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICB0b2tlbjogXCJldWlDb21ib0JveE9wdGlvbnNMaXN0LmFsbE9wdGlvbnNTZWxlY3RlZFwiLFxuICAgICAgICAgIGRlZmF1bHQ6IFwiWW91J3ZlIHNlbGVjdGVkIGFsbCBhdmFpbGFibGUgb3B0aW9uc1wiXG4gICAgICAgIH0pKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGVtcHR5U3RhdGUgPSBlbXB0eVN0YXRlQ29udGVudCA/IF9fX0Vtb3Rpb25KU1goRXVpVGV4dCwge1xuICAgICAgICBzaXplOiBcInhzXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJldWlDb21ib0JveE9wdGlvbnNMaXN0X19lbXB0eVwiXG4gICAgICB9LCBlbXB0eVN0YXRlQ29udGVudCkgOiB1bmRlZmluZWQ7XG4gICAgICB2YXIgbnVtVmlzaWJsZU9wdGlvbnMgPSBtYXRjaGluZ09wdGlvbnMubGVuZ3RoIDwgNyA/IG1hdGNoaW5nT3B0aW9ucy5sZW5ndGggOiA3O1xuICAgICAgdmFyIGhlaWdodCA9IG51bVZpc2libGVPcHRpb25zICogKHJvd0hlaWdodCArIDEpOyAvLyBBZGQgb25lIGZvciB0aGUgYm9yZGVyXG4gICAgICAvLyBib3VuZGVkIGJ5IG1heC1oZWlnaHQgb2YgZXVpQ29tYm9Cb3hPcHRpb25zTGlzdF9fcm93V3JhcFxuXG4gICAgICB2YXIgYm91bmRlZEhlaWdodCA9IGhlaWdodCA+IDIwMCA/IDIwMCA6IGhlaWdodDtcblxuICAgICAgdmFyIG9wdGlvbnNMaXN0ID0gX19fRW1vdGlvbkpTWChGaXhlZFNpemVMaXN0LCB7XG4gICAgICAgIGhlaWdodDogYm91bmRlZEhlaWdodCxcbiAgICAgICAgb25TY3JvbGw6IG9uU2Nyb2xsLFxuICAgICAgICBpdGVtQ291bnQ6IG1hdGNoaW5nT3B0aW9ucy5sZW5ndGgsXG4gICAgICAgIGl0ZW1TaXplOiByb3dIZWlnaHQsXG4gICAgICAgIGl0ZW1EYXRhOiBtYXRjaGluZ09wdGlvbnMsXG4gICAgICAgIHJlZjogdGhpcy5zZXRMaXN0UmVmLFxuICAgICAgICBpbm5lclJlZjogdGhpcy5zZXRMaXN0Qm94UmVmLFxuICAgICAgICB3aWR0aDogd2lkdGhcbiAgICAgIH0sIHRoaXMuTGlzdFJvdyk7XG4gICAgICAvKipcbiAgICAgICAqIFJldXNpbmcgdGhlIEV1aVBvcG92ZXJfX3BhbmVsIGNsYXNzZXMgdG8gaGVscCB3aXRoIGNvbnNpc3RlbmN5L21haW50ZW5hbmNlLlxuICAgICAgICogQnV0IHRoaXMgc2hvdWxkIHJlYWxseSBiZSBjb252ZXJ0ZWQgdG8gdXNlciB0aGUgcG9wb3ZlciBjb21wb25lbnQuXG4gICAgICAgKi9cblxuXG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUNvbWJvQm94T3B0aW9uc0xpc3QnKTtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVBvcG92ZXJQYW5lbCwgX2V4dGVuZHMoe1xuICAgICAgICBwYWRkaW5nU2l6ZTogXCJub25lXCIsXG4gICAgICAgIGhhc1NoYWRvdzogZmFsc2UsXG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgcGFuZWxSZWY6IHRoaXMubGlzdFJlZkNhbGxiYWNrLFxuICAgICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFwiY29tYm9Cb3hPcHRpb25zTGlzdCBcIi5jb25jYXQoZGF0YVRlc3RTdWJqKSxcbiAgICAgICAgc3R5bGU6IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgc3R5bGUpLCB7fSwge1xuICAgICAgICAgIHpJbmRleDogekluZGV4XG4gICAgICAgIH0pLFxuICAgICAgICBpc09wZW46IHRydWUsXG4gICAgICAgIGlzQXR0YWNoZWQ6IHRydWUsXG4gICAgICAgIHBvc2l0aW9uOiBwb3NpdGlvblxuICAgICAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICBjbGFzc05hbWU6IFwiZXVpQ29tYm9Cb3hPcHRpb25zTGlzdF9fcm93V3JhcFwiXG4gICAgICB9LCBlbXB0eVN0YXRlIHx8IG9wdGlvbnNMaXN0KSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEV1aUNvbWJvQm94T3B0aW9uc0xpc3Q7XG59KENvbXBvbmVudCk7XG5cbl9kZWZpbmVQcm9wZXJ0eShFdWlDb21ib0JveE9wdGlvbnNMaXN0LCBcImRlZmF1bHRQcm9wc1wiLCB7XG4gICdkYXRhLXRlc3Qtc3Viaic6ICcnLFxuICByb3dIZWlnaHQ6IDI5IC8vIHJvdyBoZWlnaHQgb2YgZGVmYXVsdCBvcHRpb24gcmVuZGVyZXJcblxufSk7XG5cbkV1aUNvbWJvQm94T3B0aW9uc0xpc3QucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZF0pLFxuICBhY3RpdmVPcHRpb25JbmRleDogUHJvcFR5cGVzLm51bWJlcixcbiAgYXJlQWxsT3B0aW9uc1NlbGVjdGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgbGlzdGJveEFyaWFMYWJlbDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgICAgICogQ3JlYXRlcyBhIGN1c3RvbSB0ZXh0IG9wdGlvbi4gWW91IGNhbiB1c2UgYHtzZWFyY2hWYWx1ZX1gIGluc2lkZSB5b3VyIHN0cmluZyB0byBiZXR0ZXIgY3VzdG9taXplIHlvdXIgdGV4dC5cbiAgICAgICAqIEl0IHdvbid0IHNob3cgaWYgdGhlcmUncyBubyBvbkNyZWF0ZU9wdGlvbi5cbiAgICAgICAqL1xuICBjdXN0b21PcHRpb25UZXh0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICBmdWxsV2lkdGg6IFByb3BUeXBlcy5ib29sLFxuICBnZXRTZWxlY3RlZE9wdGlvbkZvclNlYXJjaFZhbHVlOiBQcm9wVHlwZXMuZnVuYyxcbiAgaXNMb2FkaW5nOiBQcm9wVHlwZXMuYm9vbCxcbiAgbGlzdFJlZjogUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLFxuICBtYXRjaGluZ09wdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaXNHcm91cExhYmVsT3B0aW9uOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBsYWJlbDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIGtleTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBvcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgaXNHcm91cExhYmVsT3B0aW9uOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgIGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgICBrZXk6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBvcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQpLFxuICAgICAgdmFsdWU6IFByb3BUeXBlcy5hbnksXG4gICAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZ1xuICAgIH0pLmlzUmVxdWlyZWQpLFxuICAgIHZhbHVlOiBQcm9wVHlwZXMuYW55LFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbiAgfSkuaXNSZXF1aXJlZCkuaXNSZXF1aXJlZCxcbiAgb25DbG9zZUxpc3Q6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIG9uQ3JlYXRlT3B0aW9uOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25PcHRpb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uT3B0aW9uRW50ZXJLZXk6IFByb3BUeXBlcy5mdW5jLFxuICBvblNjcm9sbDogUHJvcFR5cGVzLmFueSxcbiAgb3B0aW9uUmVmOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgICAgICogQXJyYXkgb2YgRXVpQ29tYm9Cb3hPcHRpb25PcHRpb24gb2JqZWN0cy4gU2VlICNFdWlDb21ib0JveE9wdGlvbk9wdGlvblxuICAgICAgICovXG4gIG9wdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaXNHcm91cExhYmVsT3B0aW9uOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBsYWJlbDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIGtleTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBvcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgaXNHcm91cExhYmVsT3B0aW9uOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgIGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgICBrZXk6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBvcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQpLFxuICAgICAgdmFsdWU6IFByb3BUeXBlcy5hbnksXG4gICAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZ1xuICAgIH0pLmlzUmVxdWlyZWQpLFxuICAgIHZhbHVlOiBQcm9wVHlwZXMuYW55LFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbiAgfSkuaXNSZXF1aXJlZCkuaXNSZXF1aXJlZCxcbiAgcG9zaXRpb246IFByb3BUeXBlcy5vbmVPZihbXCJ0b3BcIiwgXCJib3R0b21cIl0pLFxuICByZW5kZXJPcHRpb246IFByb3BUeXBlcy5mdW5jLFxuICByb290SWQ6IFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCxcbiAgcm93SGVpZ2h0OiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gIHNjcm9sbFRvSW5kZXg6IFByb3BUeXBlcy5udW1iZXIsXG4gIHNlYXJjaFZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIHNlbGVjdGVkT3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBpc0dyb3VwTGFiZWxPcHRpb246IFByb3BUeXBlcy5ib29sLFxuICAgIGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAga2V5OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIG9wdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBpc0dyb3VwTGFiZWxPcHRpb246IFByb3BUeXBlcy5ib29sLFxuICAgICAgbGFiZWw6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAgIGtleTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIG9wdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCksXG4gICAgICB2YWx1ZTogUHJvcFR5cGVzLmFueSxcbiAgICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nXG4gICAgfSkuaXNSZXF1aXJlZCksXG4gICAgdmFsdWU6IFByb3BUeXBlcy5hbnksXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZ1xuICB9KS5pc1JlcXVpcmVkKS5pc1JlcXVpcmVkLFxuICB1cGRhdGVQb3NpdGlvbjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgd2lkdGg6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgc2luZ2xlU2VsZWN0aW9uOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGFzUGxhaW5UZXh0OiBQcm9wVHlwZXMuYm9vbFxuICB9KS5pc1JlcXVpcmVkXSksXG4gIGRlbGltaXRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgekluZGV4OiBQcm9wVHlwZXMubnVtYmVyXG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJzZWFyY2hcIiwgXCJzdHJpY3RcIiwgXCJoaWdobGlnaHRBbGxcIiwgXCJoYXNTY3JlZW5SZWFkZXJIZWxwVGV4dFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBGcmFnbWVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IEV1aU1hcmsgfSBmcm9tICcuLi9tYXJrJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBoaWdobGlnaHQgPSBmdW5jdGlvbiBoaWdobGlnaHQoc2VhcmNoU3ViamVjdCwgc2VhcmNoVmFsdWUsIGlzU3RyaWN0LCBoaWdobGlnaHRBbGwsIGhhc1NjcmVlblJlYWRlckhlbHBUZXh0KSB7XG4gIGlmICghc2VhcmNoVmFsdWUpIHtcbiAgICByZXR1cm4gc2VhcmNoU3ViamVjdDtcbiAgfVxuXG4gIGlmICghc2VhcmNoU3ViamVjdCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKGhpZ2hsaWdodEFsbCkge1xuICAgIHZhciBjaHVua3MgPSBnZXRIaWdodGxpZ2h0V29yZHMoc2VhcmNoU3ViamVjdCwgc2VhcmNoVmFsdWUsIGlzU3RyaWN0KTtcbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChGcmFnbWVudCwgbnVsbCwgY2h1bmtzLm1hcChmdW5jdGlvbiAoY2h1bmspIHtcbiAgICAgIHZhciBlbmQgPSBjaHVuay5lbmQsXG4gICAgICAgICAgaGlnaGxpZ2h0ID0gY2h1bmsuaGlnaGxpZ2h0LFxuICAgICAgICAgIHN0YXJ0ID0gY2h1bmsuc3RhcnQ7XG4gICAgICB2YXIgdmFsdWUgPSBzZWFyY2hTdWJqZWN0LnN1YnN0cihzdGFydCwgZW5kIC0gc3RhcnQpO1xuXG4gICAgICBpZiAoaGlnaGxpZ2h0KSB7XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aU1hcmssIHtcbiAgICAgICAgICBrZXk6IHN0YXJ0LFxuICAgICAgICAgIGhhc1NjcmVlblJlYWRlckhlbHBUZXh0OiBoYXNTY3JlZW5SZWFkZXJIZWxwVGV4dFxuICAgICAgICB9LCB2YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9KSk7XG4gIH1cblxuICB2YXIgbm9ybWFsaXplZFNlYXJjaFN1YmplY3QgPSBpc1N0cmljdCA/IHNlYXJjaFN1YmplY3QgOiBzZWFyY2hTdWJqZWN0LnRvTG93ZXJDYXNlKCk7XG4gIHZhciBub3JtYWxpemVkU2VhcmNoVmFsdWUgPSBpc1N0cmljdCA/IHNlYXJjaFZhbHVlIDogc2VhcmNoVmFsdWUudG9Mb3dlckNhc2UoKTtcbiAgdmFyIGluZGV4T2ZNYXRjaCA9IG5vcm1hbGl6ZWRTZWFyY2hTdWJqZWN0LmluZGV4T2Yobm9ybWFsaXplZFNlYXJjaFZhbHVlKTtcblxuICBpZiAoaW5kZXhPZk1hdGNoID09PSAtMSkge1xuICAgIHJldHVybiBzZWFyY2hTdWJqZWN0O1xuICB9XG5cbiAgdmFyIHByZU1hdGNoID0gc2VhcmNoU3ViamVjdC5zdWJzdHIoMCwgaW5kZXhPZk1hdGNoKTtcbiAgdmFyIG1hdGNoID0gc2VhcmNoU3ViamVjdC5zdWJzdHIoaW5kZXhPZk1hdGNoLCBzZWFyY2hWYWx1ZS5sZW5ndGgpO1xuICB2YXIgcG9zdE1hdGNoID0gc2VhcmNoU3ViamVjdC5zdWJzdHIoaW5kZXhPZk1hdGNoICsgc2VhcmNoVmFsdWUubGVuZ3RoKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRnJhZ21lbnQsIG51bGwsIHByZU1hdGNoLCBfX19FbW90aW9uSlNYKEV1aU1hcmssIHtcbiAgICBoYXNTY3JlZW5SZWFkZXJIZWxwVGV4dDogaGFzU2NyZWVuUmVhZGVySGVscFRleHRcbiAgfSwgbWF0Y2gpLCBwb3N0TWF0Y2gpO1xufTtcblxudmFyIGdldEhpZ2h0bGlnaHRXb3JkcyA9IGZ1bmN0aW9uIGdldEhpZ2h0bGlnaHRXb3JkcyhzZWFyY2hTdWJqZWN0LCBzZWFyY2hWYWx1ZSwgaXNTdHJpY3QpIHtcbiAgdmFyIHJlZ2V4ID0gbmV3IFJlZ0V4cChzZWFyY2hWYWx1ZSwgaXNTdHJpY3QgPyAnZycgOiAnZ2knKTtcbiAgdmFyIG1hdGNoZXMgPSBbXTtcbiAgdmFyIG1hdGNoO1xuXG4gIHdoaWxlICgobWF0Y2ggPSByZWdleC5leGVjKHNlYXJjaFN1YmplY3QpKSAhPT0gbnVsbCkge1xuICAgIG1hdGNoZXMucHVzaCh7XG4gICAgICBzdGFydDogbWF0Y2guaW5kZXgsXG4gICAgICBlbmQ6IChtYXRjaC5pbmRleCB8fCAwKSArIG1hdGNoWzBdLmxlbmd0aFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGZpbGxJbkNodW5rcyhtYXRjaGVzLCBzZWFyY2hTdWJqZWN0Lmxlbmd0aCk7XG59O1xuXG52YXIgZmlsbEluQ2h1bmtzID0gZnVuY3Rpb24gZmlsbEluQ2h1bmtzKGNodW5rc1RvSGlnaGxpZ2h0LCB0b3RhbExlbmd0aCkge1xuICB2YXIgYWxsQ2h1bmtzID0gW107XG5cbiAgdmFyIGFwcGVuZCA9IGZ1bmN0aW9uIGFwcGVuZChzdGFydCwgZW5kLCBoaWdobGlnaHQpIHtcbiAgICBpZiAoZW5kIC0gc3RhcnQgPiAwKSB7XG4gICAgICBhbGxDaHVua3MucHVzaCh7XG4gICAgICAgIHN0YXJ0OiBzdGFydCxcbiAgICAgICAgZW5kOiBlbmQsXG4gICAgICAgIGhpZ2hsaWdodDogaGlnaGxpZ2h0XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgaWYgKGNodW5rc1RvSGlnaGxpZ2h0Lmxlbmd0aCA9PT0gMCkge1xuICAgIGFwcGVuZCgwLCB0b3RhbExlbmd0aCwgZmFsc2UpO1xuICB9IGVsc2Uge1xuICAgIHZhciBsYXN0SW5kZXggPSAwO1xuICAgIGNodW5rc1RvSGlnaGxpZ2h0LmZvckVhY2goZnVuY3Rpb24gKGNodW5rKSB7XG4gICAgICBhcHBlbmQobGFzdEluZGV4LCBjaHVuay5zdGFydCwgZmFsc2UpO1xuICAgICAgYXBwZW5kKGNodW5rLnN0YXJ0LCBjaHVuay5lbmQsIHRydWUpO1xuICAgICAgbGFzdEluZGV4ID0gY2h1bmsuZW5kO1xuICAgIH0pO1xuICAgIGFwcGVuZChsYXN0SW5kZXgsIHRvdGFsTGVuZ3RoLCBmYWxzZSk7XG4gIH1cblxuICByZXR1cm4gYWxsQ2h1bmtzO1xufTtcblxuZXhwb3J0IHZhciBFdWlIaWdobGlnaHQgPSBmdW5jdGlvbiBFdWlIaWdobGlnaHQoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBzZWFyY2ggPSBfcmVmLnNlYXJjaCxcbiAgICAgIF9yZWYkc3RyaWN0ID0gX3JlZi5zdHJpY3QsXG4gICAgICBzdHJpY3QgPSBfcmVmJHN0cmljdCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJHN0cmljdCxcbiAgICAgIF9yZWYkaGlnaGxpZ2h0QWxsID0gX3JlZi5oaWdobGlnaHRBbGwsXG4gICAgICBoaWdobGlnaHRBbGwgPSBfcmVmJGhpZ2hsaWdodEFsbCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGhpZ2hsaWdodEFsbCxcbiAgICAgIF9yZWYkaGFzU2NyZWVuUmVhZGVySCA9IF9yZWYuaGFzU2NyZWVuUmVhZGVySGVscFRleHQsXG4gICAgICBoYXNTY3JlZW5SZWFkZXJIZWxwVGV4dCA9IF9yZWYkaGFzU2NyZWVuUmVhZGVySCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYkaGFzU2NyZWVuUmVhZGVySCxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInNwYW5cIiwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lXG4gIH0sIHJlc3QpLCBoaWdobGlnaHQoY2hpbGRyZW4sIHNlYXJjaCwgc3RyaWN0LCBoaWdobGlnaHRBbGwsIGhhc1NjcmVlblJlYWRlckhlbHBUZXh0KSk7XG59O1xuRXVpSGlnaGxpZ2h0LnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAgICogc3RyaW5nIHRvIGhpZ2hsaWdodCBhcyB0aGlzIGNvbXBvbmVudCdzIGNvbnRlbnRcbiAgICAgICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgICAgICogV2hhdCB0byBzZWFyY2ggZm9yXG4gICAgICAgKi9cbiAgc2VhcmNoOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG5cbiAgLyoqXG4gICAgICAgKiBTaG91bGQgdGhlIHNlYXJjaCBiZSBzdHJpY3Qgb3Igbm90XG4gICAgICAgKi9cbiAgc3RyaWN0OiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgICAqIFNob3VsZCBoaWdobGlnaHQgYWxsIG1hdGNoZXNcbiAgICAgICAqL1xuICBoaWdobGlnaHRBbGw6IFByb3BUeXBlcy5ib29sXG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJoYXNTY3JlZW5SZWFkZXJIZWxwVGV4dFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUV1aUkxOG4gfSBmcm9tICcuLi9pMThuJztcbmltcG9ydCB7IHVzZUV1aVRoZW1lIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgZXVpTWFya1N0eWxlcyB9IGZyb20gJy4vbWFyay5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpTWFyayA9IGZ1bmN0aW9uIEV1aU1hcmsoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBfcmVmJGhhc1NjcmVlblJlYWRlckggPSBfcmVmLmhhc1NjcmVlblJlYWRlckhlbHBUZXh0LFxuICAgICAgaGFzU2NyZWVuUmVhZGVySGVscFRleHQgPSBfcmVmJGhhc1NjcmVlblJlYWRlckggPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJGhhc1NjcmVlblJlYWRlckgsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIHVzZVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgdmFyIGhpZ2hsaWdodFN0YXJ0ID0gdXNlRXVpSTE4bignZXVpTWFyay5oaWdobGlnaHRTdGFydCcsICdoaWdobGlnaHQgc3RhcnQnKTtcbiAgdmFyIGhpZ2hsaWdodEVuZCA9IHVzZUV1aUkxOG4oJ2V1aU1hcmsuaGlnaGxpZ2h0RW5kJywgJ2hpZ2hsaWdodCBlbmQnKTtcbiAgdmFyIHN0eWxlcyA9IGV1aU1hcmtTdHlsZXModXNlVGhlbWUsIHtcbiAgICBoYXNTY3JlZW5SZWFkZXJIZWxwVGV4dDogaGFzU2NyZWVuUmVhZGVySGVscFRleHQsXG4gICAgaGlnaGxpZ2h0U3RhcnQ6IGhpZ2hsaWdodFN0YXJ0LFxuICAgIGhpZ2hsaWdodEVuZDogaGlnaGxpZ2h0RW5kXG4gIH0pO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aU1hcmsnLCBjbGFzc05hbWUpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcIm1hcmtcIiwgX2V4dGVuZHMoe1xuICAgIGNzczogW3N0eWxlcywgXCI7bGFiZWw6RXVpTWFyaztcIl0sXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gIH0sIHJlc3QpLCBjaGlsZHJlbik7XG59O1xuRXVpTWFyay5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgICAqIFNldCB0byBgZmFsc2VgIHRvIHJlbW92ZSB0aGUgQ1NTIDpiZWZvcmUgYW5kIDphZnRlclxuICAgICAgICogc2NyZWVuIHJlYWRlciBoZWxwZXIgdGV4dFxuICAgICAgICovXG4gIGhhc1NjcmVlblJlYWRlckhlbHBUZXh0OiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgICAqIFJlYWN0Tm9kZSB0byByZW5kZXIgYXMgdGhpcyBjb21wb25lbnQncyBjb250ZW50XG4gICAgICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWRcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyB0cmFuc3BhcmVudGl6ZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGV1aVNjcmVlblJlYWRlck9ubHkgfSBmcm9tICcuLi9hY2Nlc3NpYmlsaXR5JztcbmV4cG9ydCB2YXIgZXVpTWFya1N0eWxlcyA9IGZ1bmN0aW9uIGV1aU1hcmtTdHlsZXMoX3JlZiwgX3JlZjIpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZi5ldWlUaGVtZSxcbiAgICAgIGNvbG9yTW9kZSA9IF9yZWYuY29sb3JNb2RlO1xuICB2YXIgaGFzU2NyZWVuUmVhZGVySGVscFRleHQgPSBfcmVmMi5oYXNTY3JlZW5SZWFkZXJIZWxwVGV4dCxcbiAgICAgIGhpZ2hsaWdodFN0YXJ0ID0gX3JlZjIuaGlnaGxpZ2h0U3RhcnQsXG4gICAgICBoaWdobGlnaHRFbmQgPSBfcmVmMi5oaWdobGlnaHRFbmQ7XG4gIC8vIFRPRE86IFdhcyAkZXVpRm9jdXNCYWNrZ3JvdW5kQ29sb3JcbiAgdmFyIHRyYW5zcGFyZW5jeSA9IHtcbiAgICBMSUdIVDogMC4xLFxuICAgIERBUks6IDAuM1xuICB9O1xuICByZXR1cm4gLyojX19QVVJFX18qL2NzcyhcImJhY2tncm91bmQtY29sb3I6XCIsIHRyYW5zcGFyZW50aXplKGV1aVRoZW1lLmNvbG9ycy5wcmltYXJ5LCB0cmFuc3BhcmVuY3lbY29sb3JNb2RlXSksIFwiO2ZvbnQtd2VpZ2h0OlwiLCBldWlUaGVtZS5mb250LndlaWdodC5ib2xkLCBcIjtjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLnRleHQsIFwiO1wiLCBoYXNTY3JlZW5SZWFkZXJIZWxwVGV4dCA9PT0gdHJ1ZSAmJiBcIlxcbiAgICAgICY6YmVmb3JlLFxcbiAgICAgICY6YWZ0ZXIge1xcbiAgICAgICAgXCIuY29uY2F0KGV1aVNjcmVlblJlYWRlck9ubHkoKSwgXCJcXG4gICAgICB9XFxuXFxuICAgICAgJjpiZWZvcmUge1xcbiAgICAgICAgY29udGVudDogJyBbXCIpLmNvbmNhdChoaWdobGlnaHRTdGFydCwgXCJdICc7XFxuICAgICAgfVxcblxcbiAgICAgICY6YWZ0ZXIge1xcbiAgICAgICAgY29udGVudDogJyBbXCIpLmNvbmNhdChoaWdobGlnaHRFbmQsIFwiXSAnO1xcbiAgICAgIH1cXG4gICAgXCIpLCBcIjs7bGFiZWw6ZXVpTWFya1N0eWxlcztcIik7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aUNvbWJvQm94VGl0bGUgPSBmdW5jdGlvbiBFdWlDb21ib0JveFRpdGxlKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbjtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlDb21ib0JveFRpdGxlXCJcbiAgfSwgY2hpbGRyZW4pO1xufTtcbkV1aUNvbWJvQm94VGl0bGUucHJvcFR5cGVzID0ge307IiwgImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxudmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiZGlzYWJsZWRcIiwgXCJjaGVja2VkXCIsIFwiaXNGb2N1c2VkXCIsIFwic2hvd0ljb25zXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IEV1aUZsZXhHcm91cCwgRXVpRmxleEl0ZW0gfSBmcm9tICcuLi9mbGV4JztcbmltcG9ydCB7IEV1aUljb24gfSBmcm9tICcuLi9pY29uJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciByZXNvbHZlSWNvbkFuZENvbG9yID0gZnVuY3Rpb24gcmVzb2x2ZUljb25BbmRDb2xvcihjaGVja2VkKSB7XG4gIGlmICghY2hlY2tlZCkge1xuICAgIHJldHVybiB7XG4gICAgICBpY29uOiAnZW1wdHknXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBjaGVja2VkID09PSAnb24nID8ge1xuICAgIGljb246ICdjaGVjaycsXG4gICAgY29sb3I6ICd0ZXh0J1xuICB9IDoge1xuICAgIGljb246ICdjcm9zcycsXG4gICAgY29sb3I6ICd0ZXh0J1xuICB9O1xufTtcblxuZXhwb3J0IHZhciBFdWlGaWx0ZXJTZWxlY3RJdGVtID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhFdWlGaWx0ZXJTZWxlY3RJdGVtLCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aUZpbHRlclNlbGVjdEl0ZW0pO1xuXG4gIGZ1bmN0aW9uIEV1aUZpbHRlclNlbGVjdEl0ZW0oKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aUZpbHRlclNlbGVjdEl0ZW0pO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwuYXBwbHkoX3N1cGVyLCBbdGhpc10uY29uY2F0KGFyZ3MpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJidXR0b25SZWZcIiwgbnVsbCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic3RhdGVcIiwge1xuICAgICAgaGFzRm9jdXM6IGZhbHNlXG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiZm9jdXNcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKF90aGlzLmJ1dHRvblJlZikge1xuICAgICAgICBfdGhpcy5idXR0b25SZWYuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJoYXNGb2N1c1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3RoaXMuc3RhdGUuaGFzRm9jdXM7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoRXVpRmlsdGVyU2VsZWN0SXRlbSwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMuY2xhc3NOYW1lLFxuICAgICAgICAgIGRpc2FibGVkID0gX3RoaXMkcHJvcHMuZGlzYWJsZWQsXG4gICAgICAgICAgY2hlY2tlZCA9IF90aGlzJHByb3BzLmNoZWNrZWQsXG4gICAgICAgICAgaXNGb2N1c2VkID0gX3RoaXMkcHJvcHMuaXNGb2N1c2VkLFxuICAgICAgICAgIHNob3dJY29ucyA9IF90aGlzJHByb3BzLnNob3dJY29ucyxcbiAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzLCBfZXhjbHVkZWQpO1xuXG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUZpbHRlclNlbGVjdEl0ZW0nLCB7XG4gICAgICAgICdldWlGaWx0ZXJTZWxlY3RJdGVtLWlzRm9jdXNlZCc6IGlzRm9jdXNlZFxuICAgICAgfSwgY2xhc3NOYW1lKTtcbiAgICAgIHZhciBpY29uTm9kZTtcblxuICAgICAgaWYgKHNob3dJY29ucykge1xuICAgICAgICB2YXIgX3Jlc29sdmVJY29uQW5kQ29sb3IgPSByZXNvbHZlSWNvbkFuZENvbG9yKGNoZWNrZWQpLFxuICAgICAgICAgICAgaWNvbiA9IF9yZXNvbHZlSWNvbkFuZENvbG9yLmljb24sXG4gICAgICAgICAgICBjb2xvciA9IF9yZXNvbHZlSWNvbkFuZENvbG9yLmNvbG9yO1xuXG4gICAgICAgIGljb25Ob2RlID0gX19fRW1vdGlvbkpTWChFdWlGbGV4SXRlbSwge1xuICAgICAgICAgIGdyb3c6IGZhbHNlXG4gICAgICAgIH0sIF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgICAgICAgIGNvbG9yOiBjb2xvcixcbiAgICAgICAgICB0eXBlOiBpY29uXG4gICAgICAgIH0pKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJidXR0b25cIiwgX2V4dGVuZHMoe1xuICAgICAgICByZWY6IGZ1bmN0aW9uIHJlZihfcmVmKSB7XG4gICAgICAgICAgcmV0dXJuIF90aGlzMi5idXR0b25SZWYgPSBfcmVmO1xuICAgICAgICB9LFxuICAgICAgICByb2xlOiBcIm9wdGlvblwiLFxuICAgICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgICBcImFyaWEtc2VsZWN0ZWRcIjogaXNGb2N1c2VkLFxuICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICAgICAgXCJhcmlhLWRpc2FibGVkXCI6IGRpc2FibGVkXG4gICAgICB9LCByZXN0KSwgX19fRW1vdGlvbkpTWChFdWlGbGV4R3JvdXAsIHtcbiAgICAgICAgYWxpZ25JdGVtczogXCJjZW50ZXJcIixcbiAgICAgICAgZ3V0dGVyU2l6ZTogXCJzXCIsXG4gICAgICAgIGNvbXBvbmVudDogXCJzcGFuXCIsXG4gICAgICAgIHJlc3BvbnNpdmU6IGZhbHNlXG4gICAgICB9LCBpY29uTm9kZSwgX19fRW1vdGlvbkpTWChFdWlGbGV4SXRlbSwge1xuICAgICAgICBjbGFzc05hbWU6IFwiZXVpRmlsdGVyU2VsZWN0SXRlbV9fY29udGVudFwiLFxuICAgICAgICBjb21wb25lbnQ6IFwic3BhblwiXG4gICAgICB9LCBjaGlsZHJlbikpKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gRXVpRmlsdGVyU2VsZWN0SXRlbTtcbn0oQ29tcG9uZW50KTtcblxuX2RlZmluZVByb3BlcnR5KEV1aUZpbHRlclNlbGVjdEl0ZW0sIFwiZGVmYXVsdFByb3BzXCIsIHtcbiAgc2hvd0ljb25zOiB0cnVlXG59KTtcblxuRXVpRmlsdGVyU2VsZWN0SXRlbS5wcm9wVHlwZXMgPSB7XG4gIGNoZWNrZWQ6IFByb3BUeXBlcy5vbmVPZihbXCJvblwiLCBcIm9mZlwiXSksXG4gIHNob3dJY29uczogUHJvcFR5cGVzLmJvb2wsXG4gIGlzRm9jdXNlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZ1xufTsiLCAiZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikgeyByZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF9ub25JdGVyYWJsZVNwcmVhZCgpOyB9XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkoaXRlcikgeyBpZiAodHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBpdGVyW1N5bWJvbC5pdGVyYXRvcl0gIT0gbnVsbCB8fCBpdGVyW1wiQEBpdGVyYXRvclwiXSAhPSBudWxsKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShhcnIpOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuZXhwb3J0IHZhciBmbGF0dGVuT3B0aW9uR3JvdXBzID0gZnVuY3Rpb24gZmxhdHRlbk9wdGlvbkdyb3VwcyhvcHRpb25zT3JHcm91cHMpIHtcbiAgcmV0dXJuIG9wdGlvbnNPckdyb3Vwcy5yZWR1Y2UoZnVuY3Rpb24gKG9wdGlvbnMsIG9wdGlvbk9yR3JvdXApIHtcbiAgICBpZiAob3B0aW9uT3JHcm91cC5vcHRpb25zKSB7XG4gICAgICBvcHRpb25zID0gb3B0aW9ucy5jb25jYXQob3B0aW9uT3JHcm91cC5vcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3B0aW9ucy5wdXNoKG9wdGlvbk9yR3JvdXApO1xuICAgIH1cblxuICAgIHJldHVybiBvcHRpb25zO1xuICB9LCBbXSk7XG59O1xuZXhwb3J0IHZhciBnZXRTZWxlY3RlZE9wdGlvbkZvclNlYXJjaFZhbHVlID0gZnVuY3Rpb24gZ2V0U2VsZWN0ZWRPcHRpb25Gb3JTZWFyY2hWYWx1ZShzZWFyY2hWYWx1ZSwgc2VsZWN0ZWRPcHRpb25zLCBvcHRpb25LZXkpIHtcbiAgdmFyIG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSA9IHNlYXJjaFZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiBzZWxlY3RlZE9wdGlvbnMuZmluZChmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgcmV0dXJuIG9wdGlvbi5sYWJlbC50b0xvd2VyQ2FzZSgpID09PSBub3JtYWxpemVkU2VhcmNoVmFsdWUgJiYgKCFvcHRpb25LZXkgfHwgb3B0aW9uLmtleSA9PT0gb3B0aW9uS2V5KTtcbiAgfSk7XG59O1xuXG52YXIgY29sbGVjdE1hdGNoaW5nT3B0aW9uID0gZnVuY3Rpb24gY29sbGVjdE1hdGNoaW5nT3B0aW9uKGFjY3VtdWxhdG9yLCBvcHRpb24sIHNlbGVjdGVkT3B0aW9ucywgbm9ybWFsaXplZFNlYXJjaFZhbHVlLCBpc1ByZUZpbHRlcmVkLCBzaG93UHJldlNlbGVjdGVkKSB7XG4gIC8vIE9ubHkgc2hvdyBvcHRpb25zIHdoaWNoIGhhdmVuJ3QgeWV0IGJlZW4gc2VsZWN0ZWQgdW5sZXNzIHJlcXVlc3RlZC5cbiAgdmFyIHNlbGVjdGVkT3B0aW9uID0gZ2V0U2VsZWN0ZWRPcHRpb25Gb3JTZWFyY2hWYWx1ZShvcHRpb24ubGFiZWwsIHNlbGVjdGVkT3B0aW9ucywgb3B0aW9uLmtleSk7XG5cbiAgaWYgKHNlbGVjdGVkT3B0aW9uICYmICFzaG93UHJldlNlbGVjdGVkKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IC8vIElmIHRoZSBvcHRpb25zIGhhdmUgYWxyZWFkeSBiZWVuIHByZS1maWx0ZXJlZCB0aGVuIHdlIGNhbiBza2lwIGZpbHRlcmluZyBhZ2FpbnN0IHRoZSBzZWFyY2ggdmFsdWUuXG5cblxuICBpZiAoaXNQcmVGaWx0ZXJlZCkge1xuICAgIGFjY3VtdWxhdG9yLnB1c2gob3B0aW9uKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoIW5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSkge1xuICAgIGFjY3VtdWxhdG9yLnB1c2gob3B0aW9uKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgbm9ybWFsaXplZE9wdGlvbiA9IG9wdGlvbi5sYWJlbC50cmltKCkudG9Mb3dlckNhc2UoKTtcblxuICBpZiAobm9ybWFsaXplZE9wdGlvbi5pbmNsdWRlcyhub3JtYWxpemVkU2VhcmNoVmFsdWUpKSB7XG4gICAgYWNjdW11bGF0b3IucHVzaChvcHRpb24pO1xuICB9XG59O1xuXG5leHBvcnQgdmFyIGdldE1hdGNoaW5nT3B0aW9ucyA9IGZ1bmN0aW9uIGdldE1hdGNoaW5nT3B0aW9ucyhvcHRpb25zLCBzZWxlY3RlZE9wdGlvbnMsIHNlYXJjaFZhbHVlLCBpc1ByZUZpbHRlcmVkLCBzaG93UHJldlNlbGVjdGVkLCBzb3J0TWF0Y2hlc0J5KSB7XG4gIHZhciBub3JtYWxpemVkU2VhcmNoVmFsdWUgPSBzZWFyY2hWYWx1ZS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgdmFyIG1hdGNoaW5nT3B0aW9ucyA9IFtdO1xuICBvcHRpb25zLmZvckVhY2goZnVuY3Rpb24gKG9wdGlvbikge1xuICAgIGlmIChvcHRpb24ub3B0aW9ucykge1xuICAgICAgdmFyIG1hdGNoaW5nT3B0aW9uc0Zvckdyb3VwID0gW107XG4gICAgICBvcHRpb24ub3B0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChncm91cE9wdGlvbikge1xuICAgICAgICBjb2xsZWN0TWF0Y2hpbmdPcHRpb24obWF0Y2hpbmdPcHRpb25zRm9yR3JvdXAsIGdyb3VwT3B0aW9uLCBzZWxlY3RlZE9wdGlvbnMsIG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSwgaXNQcmVGaWx0ZXJlZCwgc2hvd1ByZXZTZWxlY3RlZCk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKG1hdGNoaW5nT3B0aW9uc0Zvckdyb3VwLmxlbmd0aCA+IDApIHtcbiAgICAgICAgLy8gQWRkIG9wdGlvbiBmb3IgZ3JvdXAgbGFiZWxcbiAgICAgICAgbWF0Y2hpbmdPcHRpb25zLnB1c2goe1xuICAgICAgICAgIGtleTogb3B0aW9uLmtleSxcbiAgICAgICAgICBsYWJlbDogb3B0aW9uLmxhYmVsLFxuICAgICAgICAgIGlzR3JvdXBMYWJlbE9wdGlvbjogdHJ1ZVxuICAgICAgICB9KTsgLy8gQWRkIG1hdGNoaW5nIG9wdGlvbnMgZm9yIGdyb3VwXG4gICAgICAgIC8vIHVzZSBjb25jYXQgb3ZlciBzcHJlYWRpbmcgdG8gc3VwcG9ydCBsYXJnZSBhcnJheXMgLSBodHRwczovL21hdGhpYXNieW5lbnMuYmUvZGVtby9qYXZhc2NyaXB0LWFyZ3VtZW50LWNvdW50XG5cbiAgICAgICAgbWF0Y2hpbmdPcHRpb25zID0gbWF0Y2hpbmdPcHRpb25zLmNvbmNhdChtYXRjaGluZ09wdGlvbnNGb3JHcm91cCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbGxlY3RNYXRjaGluZ09wdGlvbihtYXRjaGluZ09wdGlvbnMsIG9wdGlvbiwgc2VsZWN0ZWRPcHRpb25zLCBub3JtYWxpemVkU2VhcmNoVmFsdWUsIGlzUHJlRmlsdGVyZWQsIHNob3dQcmV2U2VsZWN0ZWQpO1xuICAgIH1cbiAgfSk7XG5cbiAgaWYgKHNvcnRNYXRjaGVzQnkgPT09ICdzdGFydHNXaXRoJykge1xuICAgIHZhciByZWZPYmogPSB7XG4gICAgICBzdGFydFdpdGg6IFtdLFxuICAgICAgb3RoZXJzOiBbXVxuICAgIH07XG4gICAgbWF0Y2hpbmdPcHRpb25zLmZvckVhY2goZnVuY3Rpb24gKG9iamVjdCkge1xuICAgICAgaWYgKG9iamVjdC5sYWJlbC50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgobm9ybWFsaXplZFNlYXJjaFZhbHVlKSkge1xuICAgICAgICByZWZPYmouc3RhcnRXaXRoLnB1c2gob2JqZWN0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlZk9iai5vdGhlcnMucHVzaChvYmplY3QpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KHJlZk9iai5zdGFydFdpdGgpLCBfdG9Db25zdW1hYmxlQXJyYXkocmVmT2JqLm90aGVycykpO1xuICB9XG5cbiAgcmV0dXJuIG1hdGNoaW5nT3B0aW9ucztcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJrZXlcIiwgXCJsYWJlbFwiLCBcImNvbG9yXCIsIFwib25DbGlja1wiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBBdXRvc2l6ZUlucHV0IGZyb20gJ3JlYWN0LWlucHV0LWF1dG9zaXplJztcbmltcG9ydCB7IEV1aVNjcmVlblJlYWRlck9ubHkgfSBmcm9tICcuLi8uLi9hY2Nlc3NpYmlsaXR5JztcbmltcG9ydCB7IEV1aUZvcm1Db250cm9sTGF5b3V0IH0gZnJvbSAnLi4vLi4vZm9ybS9mb3JtX2NvbnRyb2xfbGF5b3V0JztcbmltcG9ydCB7IEV1aUNvbWJvQm94UGlsbCB9IGZyb20gJy4vY29tYm9fYm94X3BpbGwnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpQ29tYm9Cb3hJbnB1dCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoRXVpQ29tYm9Cb3hJbnB1dCwgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihFdWlDb21ib0JveElucHV0KTtcblxuICBmdW5jdGlvbiBFdWlDb21ib0JveElucHV0KCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlDb21ib0JveElucHV0KTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsLmFwcGx5KF9zdXBlciwgW3RoaXNdLmNvbmNhdChhcmdzKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic3RhdGVcIiwge1xuICAgICAgaGFzRm9jdXM6IGZhbHNlXG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwidXBkYXRlUG9zaXRpb25cIiwgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gV2FpdCBhIGJlYXQgZm9yIHRoZSBET00gdG8gdXBkYXRlLCBzaW5jZSB3ZSBkZXBlbmQgb24gRE9NIGVsZW1lbnRzJyBib3VuZHMuXG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpcy5wcm9wcy51cGRhdGVQb3NpdGlvbigpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25Gb2N1c1wiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIF90aGlzLnByb3BzLm9uRm9jdXMoZXZlbnQpO1xuXG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGhhc0ZvY3VzOiB0cnVlXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkJsdXJcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAoX3RoaXMucHJvcHMub25CbHVyKSB7XG4gICAgICAgIF90aGlzLnByb3BzLm9uQmx1cihldmVudCk7XG4gICAgICB9XG5cbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgaGFzRm9jdXM6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJpbnB1dE9uQ2hhbmdlXCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgb25DaGFuZ2UgPSBfdGhpcyRwcm9wcy5vbkNoYW5nZSxcbiAgICAgICAgICBzZWFyY2hWYWx1ZSA9IF90aGlzJHByb3BzLnNlYXJjaFZhbHVlO1xuXG4gICAgICBpZiAob25DaGFuZ2UpIHtcbiAgICAgICAgb25DaGFuZ2UoZXZlbnQudGFyZ2V0LnZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJpbnB1dFJlZkNhbGxiYWNrXCIsIGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgIHZhciBhdXRvU2l6ZUlucHV0UmVmID0gX3RoaXMucHJvcHMuYXV0b1NpemVJbnB1dFJlZjtcblxuICAgICAgaWYgKGF1dG9TaXplSW5wdXRSZWYpIHtcbiAgICAgICAgYXV0b1NpemVJbnB1dFJlZihyZWYpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEV1aUNvbWJvQm94SW5wdXQsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZFVwZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzKSB7XG4gICAgICB2YXIgc2VhcmNoVmFsdWUgPSBwcmV2UHJvcHMuc2VhcmNoVmFsdWU7IC8vIFdlIG5lZWQgdG8gdXBkYXRlIHRoZSBwb3NpdGlvbiBvZiBldmVyeXRoaW5nIGlmIHRoZSB1c2VyIGVudGVycyBlbm91Z2ggaW5wdXQgdG8gY2hhbmdlXG4gICAgICAvLyB0aGUgc2l6ZSBvZiB0aGUgaW5wdXQuXG5cbiAgICAgIGlmIChzZWFyY2hWYWx1ZSAhPT0gdGhpcy5wcm9wcy5zZWFyY2hWYWx1ZSkge1xuICAgICAgICB0aGlzLnVwZGF0ZVBvc2l0aW9uKCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjb21wcmVzc2VkID0gX3RoaXMkcHJvcHMyLmNvbXByZXNzZWQsXG4gICAgICAgICAgZm9jdXNlZE9wdGlvbklkID0gX3RoaXMkcHJvcHMyLmZvY3VzZWRPcHRpb25JZCxcbiAgICAgICAgICBmdWxsV2lkdGggPSBfdGhpcyRwcm9wczIuZnVsbFdpZHRoLFxuICAgICAgICAgIGhhc1NlbGVjdGVkT3B0aW9ucyA9IF90aGlzJHByb3BzMi5oYXNTZWxlY3RlZE9wdGlvbnMsXG4gICAgICAgICAgaWQgPSBfdGhpcyRwcm9wczIuaWQsXG4gICAgICAgICAgaW5wdXRSZWYgPSBfdGhpcyRwcm9wczIuaW5wdXRSZWYsXG4gICAgICAgICAgaXNEaXNhYmxlZCA9IF90aGlzJHByb3BzMi5pc0Rpc2FibGVkLFxuICAgICAgICAgIGlzTGlzdE9wZW4gPSBfdGhpcyRwcm9wczIuaXNMaXN0T3BlbixcbiAgICAgICAgICBub0ljb24gPSBfdGhpcyRwcm9wczIubm9JY29uLFxuICAgICAgICAgIG9uQ2xlYXIgPSBfdGhpcyRwcm9wczIub25DbGVhcixcbiAgICAgICAgICBvbkNsaWNrID0gX3RoaXMkcHJvcHMyLm9uQ2xpY2ssXG4gICAgICAgICAgb25DbG9zZUxpc3RDbGljayA9IF90aGlzJHByb3BzMi5vbkNsb3NlTGlzdENsaWNrLFxuICAgICAgICAgIG9uT3Blbkxpc3RDbGljayA9IF90aGlzJHByb3BzMi5vbk9wZW5MaXN0Q2xpY2ssXG4gICAgICAgICAgb25SZW1vdmVPcHRpb24gPSBfdGhpcyRwcm9wczIub25SZW1vdmVPcHRpb24sXG4gICAgICAgICAgcGxhY2Vob2xkZXIgPSBfdGhpcyRwcm9wczIucGxhY2Vob2xkZXIsXG4gICAgICAgICAgcm9vdElkID0gX3RoaXMkcHJvcHMyLnJvb3RJZCxcbiAgICAgICAgICBzZWFyY2hWYWx1ZSA9IF90aGlzJHByb3BzMi5zZWFyY2hWYWx1ZSxcbiAgICAgICAgICBzZWxlY3RlZE9wdGlvbnMgPSBfdGhpcyRwcm9wczIuc2VsZWN0ZWRPcHRpb25zLFxuICAgICAgICAgIHNpbmdsZVNlbGVjdGlvblByb3AgPSBfdGhpcyRwcm9wczIuc2luZ2xlU2VsZWN0aW9uLFxuICAgICAgICAgIHRvZ2dsZUJ1dHRvblJlZiA9IF90aGlzJHByb3BzMi50b2dnbGVCdXR0b25SZWYsXG4gICAgICAgICAgdmFsdWUgPSBfdGhpcyRwcm9wczIudmFsdWUsXG4gICAgICAgICAgcHJlcGVuZCA9IF90aGlzJHByb3BzMi5wcmVwZW5kLFxuICAgICAgICAgIGFwcGVuZCA9IF90aGlzJHByb3BzMi5hcHBlbmQsXG4gICAgICAgICAgaXNMb2FkaW5nID0gX3RoaXMkcHJvcHMyLmlzTG9hZGluZyxcbiAgICAgICAgICBhdXRvRm9jdXMgPSBfdGhpcyRwcm9wczIuYXV0b0ZvY3VzLFxuICAgICAgICAgIGFyaWFMYWJlbCA9IF90aGlzJHByb3BzMlsnYXJpYS1sYWJlbCddLFxuICAgICAgICAgIGFyaWFMYWJlbGxlZGJ5ID0gX3RoaXMkcHJvcHMyWydhcmlhLWxhYmVsbGVkYnknXTtcbiAgICAgIHZhciBzaW5nbGVTZWxlY3Rpb24gPSBCb29sZWFuKHNpbmdsZVNlbGVjdGlvblByb3ApO1xuICAgICAgdmFyIGFzUGxhaW5UZXh0ID0gc2luZ2xlU2VsZWN0aW9uUHJvcCAmJiBfdHlwZW9mKHNpbmdsZVNlbGVjdGlvblByb3ApID09PSAnb2JqZWN0JyAmJiBzaW5nbGVTZWxlY3Rpb25Qcm9wLmFzUGxhaW5UZXh0IHx8IGZhbHNlO1xuICAgICAgdmFyIHBpbGxzID0gc2VsZWN0ZWRPcHRpb25zID8gc2VsZWN0ZWRPcHRpb25zLm1hcChmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAgIHZhciBrZXkgPSBvcHRpb24ua2V5LFxuICAgICAgICAgICAgbGFiZWwgPSBvcHRpb24ubGFiZWwsXG4gICAgICAgICAgICBjb2xvciA9IG9wdGlvbi5jb2xvcixcbiAgICAgICAgICAgIG9uQ2xpY2sgPSBvcHRpb24ub25DbGljayxcbiAgICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob3B0aW9uLCBfZXhjbHVkZWQpO1xuXG4gICAgICAgIHZhciBwaWxsT25DbG9zZSA9IGlzRGlzYWJsZWQgfHwgc2luZ2xlU2VsZWN0aW9uIHx8IG9uQ2xpY2sgPyB1bmRlZmluZWQgOiBvblJlbW92ZU9wdGlvbjtcbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpQ29tYm9Cb3hQaWxsLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgb3B0aW9uOiBvcHRpb24sXG4gICAgICAgICAgb25DbG9zZTogcGlsbE9uQ2xvc2UsXG4gICAgICAgICAga2V5OiBrZXkgIT09IG51bGwgJiYga2V5ICE9PSB2b2lkIDAgPyBrZXkgOiBsYWJlbC50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgIGNvbG9yOiBjb2xvcixcbiAgICAgICAgICBvbkNsaWNrOiBvbkNsaWNrLFxuICAgICAgICAgIG9uQ2xpY2tBcmlhTGFiZWw6IG9uQ2xpY2sgPyAnQ2hhbmdlJyA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBhc1BsYWluVGV4dDogYXNQbGFpblRleHRcbiAgICAgICAgfSwgcmVzdCksIGxhYmVsKTtcbiAgICAgIH0pIDogbnVsbDtcbiAgICAgIHZhciByZW1vdmVPcHRpb25NZXNzYWdlO1xuICAgICAgdmFyIHJlbW92ZU9wdGlvbk1lc3NhZ2VJZDtcblxuICAgICAgaWYgKHRoaXMuc3RhdGUuaGFzRm9jdXMpIHtcbiAgICAgICAgdmFyIHJlYWRQbGFjZWhvbGRlciA9IHBsYWNlaG9sZGVyID8gXCJcIi5jb25jYXQocGxhY2Vob2xkZXIsIFwiLlwiKSA6ICcnO1xuICAgICAgICB2YXIgcmVtb3ZlT3B0aW9uTWVzc2FnZUNvbnRlbnQgPSBcIkNvbWJvIGJveC4gU2VsZWN0ZWQuIFwiLmNvbmNhdChzZWFyY2hWYWx1ZSA/IFwiXCIuY29uY2F0KHNlYXJjaFZhbHVlLCBcIi4gU2VsZWN0ZWQuIFwiKSA6ICcnKS5jb25jYXQoc2VsZWN0ZWRPcHRpb25zICYmIHNlbGVjdGVkT3B0aW9ucy5sZW5ndGggPiAwID8gXCJcIi5jb25jYXQodmFsdWUsIFwiLiBQcmVzcyBCYWNrc3BhY2UgdG8gZGVsZXRlIFwiKS5jb25jYXQoc2VsZWN0ZWRPcHRpb25zW3NlbGVjdGVkT3B0aW9ucy5sZW5ndGggLSAxXS5sYWJlbCwgXCIuIFwiKSA6ICcnLCBcIkNvbWJvIGJveCBpbnB1dC4gXCIpLmNvbmNhdChyZWFkUGxhY2Vob2xkZXIsIFwiIFR5cGUgc29tZSB0ZXh0IG9yLCB0byBkaXNwbGF5IGEgbGlzdCBvZiBjaG9pY2VzLCBwcmVzcyBEb3duIEFycm93LiBcIikgKyAnVG8gZXhpdCB0aGUgbGlzdCBvZiBjaG9pY2VzLCBwcmVzcyBFc2NhcGUuJztcbiAgICAgICAgcmVtb3ZlT3B0aW9uTWVzc2FnZUlkID0gcm9vdElkKCdyZW1vdmVPcHRpb25NZXNzYWdlJyk7IC8vIGFyaWEtbGl2ZT1cImFzc2VydGl2ZVwiIHdpbGwgcmVhZCB0aGlzIG1lc3NhZ2UgYWxvdWQgaW1tZWRpYXRlbHkgb25jZSBpdCBlbnRlcnMgdGhlIERPTS5cbiAgICAgICAgLy8gV2UnbGwgcmVuZGVyIHRvIHRoZSBET00gd2hlbiB0aGUgaW5wdXQgZ2FpbnMgZm9jdXMgYW5kIHJlbW92ZSBpdCB3aGVuIHRoZSBpbnB1dCBsb3NlcyBmb2N1cy5cbiAgICAgICAgLy8gV2UnbGwgdXNlIGFyaWEtaGlkZGVuIHRvIHByZXZlbnQgZGVmYXVsdCBhcmlhIGluZm9ybWF0aW9uIGZyb20gYmVpbmcgcmVhZCBieSB0aGUgc2NyZWVuXG4gICAgICAgIC8vIHJlYWRlci5cblxuICAgICAgICByZW1vdmVPcHRpb25NZXNzYWdlID0gX19fRW1vdGlvbkpTWChFdWlTY3JlZW5SZWFkZXJPbmx5LCBudWxsLCBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgICAgICAgXCJhcmlhLWxpdmVcIjogXCJwb2xpdGVcIixcbiAgICAgICAgICBpZDogcmVtb3ZlT3B0aW9uTWVzc2FnZUlkXG4gICAgICAgIH0sIHJlbW92ZU9wdGlvbk1lc3NhZ2VDb250ZW50KSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBwbGFjZWhvbGRlck1lc3NhZ2U7XG5cbiAgICAgIGlmIChwbGFjZWhvbGRlciAmJiBzZWxlY3RlZE9wdGlvbnMgJiYgIXNlbGVjdGVkT3B0aW9ucy5sZW5ndGggJiYgIXNlYXJjaFZhbHVlKSB7XG4gICAgICAgIHBsYWNlaG9sZGVyTWVzc2FnZSA9IF9fX0Vtb3Rpb25KU1goXCJwXCIsIHtcbiAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpQ29tYm9Cb3hQbGFjZWhvbGRlclwiXG4gICAgICAgIH0sIHBsYWNlaG9sZGVyKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGNsaWNrUHJvcHMgPSB7fTtcblxuICAgICAgaWYgKCFpc0Rpc2FibGVkICYmIG9uQ2xlYXIgJiYgaGFzU2VsZWN0ZWRPcHRpb25zKSB7XG4gICAgICAgIGNsaWNrUHJvcHMuY2xlYXIgPSB7XG4gICAgICAgICAgJ2RhdGEtdGVzdC1zdWJqJzogJ2NvbWJvQm94Q2xlYXJCdXR0b24nLFxuICAgICAgICAgIG9uQ2xpY2s6IG9uQ2xlYXJcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgdmFyIGljb247XG5cbiAgICAgIGlmICghbm9JY29uKSB7XG4gICAgICAgIGljb24gPSB7XG4gICAgICAgICAgJ2FyaWEtbGFiZWwnOiBpc0xpc3RPcGVuID8gJ0Nsb3NlIGxpc3Qgb2Ygb3B0aW9ucycgOiAnT3BlbiBsaXN0IG9mIG9wdGlvbnMnLFxuICAgICAgICAgICdkYXRhLXRlc3Qtc3Viaic6ICdjb21ib0JveFRvZ2dsZUxpc3RCdXR0b24nLFxuICAgICAgICAgIGRpc2FibGVkOiBpc0Rpc2FibGVkLFxuICAgICAgICAgIG9uQ2xpY2s6IGlzTGlzdE9wZW4gJiYgIWlzRGlzYWJsZWQgPyBvbkNsb3NlTGlzdENsaWNrIDogb25PcGVuTGlzdENsaWNrLFxuICAgICAgICAgIHJlZjogdG9nZ2xlQnV0dG9uUmVmLFxuICAgICAgICAgIHNpZGU6ICdyaWdodCcsXG4gICAgICAgICAgdGFiSW5kZXg6IC0xLFxuICAgICAgICAgIHR5cGU6ICdhcnJvd0Rvd24nXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHZhciB3cmFwQ2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUNvbWJvQm94X19pbnB1dFdyYXAnLCB7XG4gICAgICAgICdldWlDb21ib0JveF9faW5wdXRXcmFwLS1jb21wcmVzc2VkJzogY29tcHJlc3NlZCxcbiAgICAgICAgJ2V1aUNvbWJvQm94X19pbnB1dFdyYXAtLWZ1bGxXaWR0aCc6IGZ1bGxXaWR0aCxcbiAgICAgICAgJ2V1aUNvbWJvQm94X19pbnB1dFdyYXAtLW5vV3JhcCc6IHNpbmdsZVNlbGVjdGlvbixcbiAgICAgICAgJ2V1aUNvbWJvQm94X19pbnB1dFdyYXAtaXNMb2FkaW5nJzogaXNMb2FkaW5nLFxuICAgICAgICAnZXVpQ29tYm9Cb3hfX2lucHV0V3JhcC1pc0NsZWFyYWJsZSc6IG9uQ2xlYXIsXG4gICAgICAgICdldWlDb21ib0JveF9faW5wdXRXcmFwLS1pbkdyb3VwJzogcHJlcGVuZCB8fCBhcHBlbmRcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpRm9ybUNvbnRyb2xMYXlvdXQsIF9leHRlbmRzKHtcbiAgICAgICAgaWNvbjogaWNvblxuICAgICAgfSwgY2xpY2tQcm9wcywge1xuICAgICAgICBpbnB1dElkOiBpZCxcbiAgICAgICAgaXNMb2FkaW5nOiBpc0xvYWRpbmcsXG4gICAgICAgIGNvbXByZXNzZWQ6IGNvbXByZXNzZWQsXG4gICAgICAgIGZ1bGxXaWR0aDogZnVsbFdpZHRoLFxuICAgICAgICBwcmVwZW5kOiBwcmVwZW5kLFxuICAgICAgICBhcHBlbmQ6IGFwcGVuZFxuICAgICAgfSksIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICBjbGFzc05hbWU6IHdyYXBDbGFzc2VzLFxuICAgICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFwiY29tYm9Cb3hJbnB1dFwiLFxuICAgICAgICBvbkNsaWNrOiBvbkNsaWNrLFxuICAgICAgICB0YWJJbmRleDogLTEgLy8gYmVjb21lcyBvbkJsdXIgZXZlbnQncyByZWxhdGVkVGFyZ2V0LCBvdGhlcndpc2UgcmVsYXRlZFRhcmdldCBpcyBudWxsIHdoZW4gY2xpY2tpbmcgb24gdGhpcyBkaXZcblxuICAgICAgfSwgIXNpbmdsZVNlbGVjdGlvbiB8fCAhc2VhcmNoVmFsdWUgPyBwaWxscyA6IG51bGwsIHBsYWNlaG9sZGVyTWVzc2FnZSwgX19fRW1vdGlvbkpTWChBdXRvc2l6ZUlucHV0LCB7XG4gICAgICAgIFwiYXJpYS1hY3RpdmVkZXNjZW5kYW50XCI6IGZvY3VzZWRPcHRpb25JZCxcbiAgICAgICAgXCJhcmlhLWF1dG9jb21wbGV0ZVwiOiBcImxpc3RcIixcbiAgICAgICAgXCJhcmlhLWNvbnRyb2xzXCI6IGlzTGlzdE9wZW4gPyByb290SWQoJ2xpc3Rib3gnKSA6ICcnLFxuICAgICAgICBcImFyaWEtZXhwYW5kZWRcIjogaXNMaXN0T3BlbixcbiAgICAgICAgXCJhcmlhLWxhYmVsXCI6IGFyaWFMYWJlbCxcbiAgICAgICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogYXJpYUxhYmVsbGVkYnksXG4gICAgICAgIGNsYXNzTmFtZTogXCJldWlDb21ib0JveF9faW5wdXRcIixcbiAgICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcImNvbWJvQm94U2VhcmNoSW5wdXRcIixcbiAgICAgICAgZGlzYWJsZWQ6IGlzRGlzYWJsZWQsXG4gICAgICAgIGlkOiBpZCxcbiAgICAgICAgaW5wdXRSZWY6IGlucHV0UmVmLFxuICAgICAgICBvbkJsdXI6IHRoaXMub25CbHVyLFxuICAgICAgICBvbkNoYW5nZTogdGhpcy5pbnB1dE9uQ2hhbmdlLFxuICAgICAgICBvbkZvY3VzOiB0aGlzLm9uRm9jdXMsXG4gICAgICAgIHJlZjogdGhpcy5pbnB1dFJlZkNhbGxiYWNrLFxuICAgICAgICByb2xlOiBcImNvbWJvYm94XCIsXG4gICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgZm9udFNpemU6IDE0XG4gICAgICAgIH0sXG4gICAgICAgIHZhbHVlOiBzZWFyY2hWYWx1ZSxcbiAgICAgICAgYXV0b0ZvY3VzOiBhdXRvRm9jdXNcbiAgICAgIH0pLCByZW1vdmVPcHRpb25NZXNzYWdlKSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEV1aUNvbWJvQm94SW5wdXQ7XG59KENvbXBvbmVudCk7XG5FdWlDb21ib0JveElucHV0LnByb3BUeXBlcyA9IHtcbiAgYXV0b1NpemVJbnB1dFJlZjogUHJvcFR5cGVzLmFueSxcbiAgY29tcHJlc3NlZDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgZm9jdXNlZE9wdGlvbklkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBmdWxsV2lkdGg6IFByb3BUeXBlcy5ib29sLFxuICBoYXNTZWxlY3RlZE9wdGlvbnM6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBpbnB1dFJlZjogUHJvcFR5cGVzLmFueSxcbiAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGlzTGlzdE9wZW46IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIG5vSWNvbjogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgb25CbHVyOiBQcm9wVHlwZXMuYW55LFxuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uQ2xlYXI6IFByb3BUeXBlcy5mdW5jLFxuICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25DbG9zZUxpc3RDbGljazogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgb25Gb2N1czogUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLFxuICBvbk9wZW5MaXN0Q2xpY2s6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIG9uUmVtb3ZlT3B0aW9uOiBQcm9wVHlwZXMuZnVuYyxcbiAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHJvb3RJZDogUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLFxuICBzZWFyY2hWYWx1ZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBzZWxlY3RlZE9wdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaXNHcm91cExhYmVsT3B0aW9uOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBsYWJlbDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIGtleTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBvcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgaXNHcm91cExhYmVsT3B0aW9uOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgIGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgICBrZXk6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBvcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQpLFxuICAgICAgdmFsdWU6IFByb3BUeXBlcy5hbnksXG4gICAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZ1xuICAgIH0pLmlzUmVxdWlyZWQpLFxuICAgIHZhbHVlOiBQcm9wVHlwZXMuYW55LFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbiAgfSkuaXNSZXF1aXJlZCksXG4gIHNpbmdsZVNlbGVjdGlvbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBhc1BsYWluVGV4dDogUHJvcFR5cGVzLmJvb2xcbiAgfSkuaXNSZXF1aXJlZF0pLFxuICB0b2dnbGVCdXR0b25SZWY6IFByb3BUeXBlcy5hbnksXG4gIHVwZGF0ZVBvc2l0aW9uOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICB2YWx1ZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgcHJlcGVuZDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCkuaXNSZXF1aXJlZF0pLFxuICBhcHBlbmQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQpLmlzUmVxdWlyZWRdKSxcbiAgaXNMb2FkaW5nOiBQcm9wVHlwZXMuYm9vbCxcbiAgYXV0b0ZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nXG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbnZhciBfZXhjbHVkZWQgPSBbXCJhc1BsYWluVGV4dFwiLCBcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29sb3JcIiwgXCJvbkNsaWNrXCIsIFwib25DbGlja0FyaWFMYWJlbFwiLCBcIm9uQ2xvc2VcIiwgXCJvcHRpb25cIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgRXVpQmFkZ2UgfSBmcm9tICcuLi8uLi9iYWRnZSc7XG5pbXBvcnQgeyBFdWlJMThuIH0gZnJvbSAnLi4vLi4vaTE4bic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlDb21ib0JveFBpbGwgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEV1aUNvbWJvQm94UGlsbCwgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihFdWlDb21ib0JveFBpbGwpO1xuXG4gIGZ1bmN0aW9uIEV1aUNvbWJvQm94UGlsbCgpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpQ29tYm9Cb3hQaWxsKTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsLmFwcGx5KF9zdXBlciwgW3RoaXNdLmNvbmNhdChhcmdzKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25DbG9zZUJ1dHRvbkNsaWNrXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIG9uQ2xvc2UgPSBfdGhpcyRwcm9wcy5vbkNsb3NlLFxuICAgICAgICAgIG9wdGlvbiA9IF90aGlzJHByb3BzLm9wdGlvbjtcblxuICAgICAgaWYgKG9uQ2xvc2UpIHtcbiAgICAgICAgb25DbG9zZShvcHRpb24pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEV1aUNvbWJvQm94UGlsbCwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBhc1BsYWluVGV4dCA9IF90aGlzJHByb3BzMi5hc1BsYWluVGV4dCxcbiAgICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzMi5jaGlsZHJlbixcbiAgICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wczIuY2xhc3NOYW1lLFxuICAgICAgICAgIGNvbG9yID0gX3RoaXMkcHJvcHMyLmNvbG9yLFxuICAgICAgICAgIG9uQ2xpY2sgPSBfdGhpcyRwcm9wczIub25DbGljayxcbiAgICAgICAgICBvbkNsaWNrQXJpYUxhYmVsID0gX3RoaXMkcHJvcHMyLm9uQ2xpY2tBcmlhTGFiZWwsXG4gICAgICAgICAgb25DbG9zZSA9IF90aGlzJHByb3BzMi5vbkNsb3NlLFxuICAgICAgICAgIG9wdGlvbiA9IF90aGlzJHByb3BzMi5vcHRpb24sXG4gICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wczIsIF9leGNsdWRlZCk7XG5cbiAgICAgIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpQ29tYm9Cb3hQaWxsJywge1xuICAgICAgICAnZXVpQ29tYm9Cb3hQaWxsLS1wbGFpblRleHQnOiBhc1BsYWluVGV4dFxuICAgICAgfSwgY2xhc3NOYW1lKTtcbiAgICAgIHZhciBvbkNsaWNrUHJvcHMgPSBvbkNsaWNrICYmIG9uQ2xpY2tBcmlhTGFiZWwgPyB7XG4gICAgICAgIG9uQ2xpY2s6IG9uQ2xpY2ssXG4gICAgICAgIG9uQ2xpY2tBcmlhTGFiZWw6IG9uQ2xpY2tBcmlhTGFiZWxcbiAgICAgIH0gOiB7fTtcblxuICAgICAgaWYgKG9uQ2xvc2UpIHtcbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgIHRva2VuOiBcImV1aUNvbWJvQm94UGlsbC5yZW1vdmVTZWxlY3Rpb25cIixcbiAgICAgICAgICBkZWZhdWx0OiBcIlJlbW92ZSB7Y2hpbGRyZW59IGZyb20gc2VsZWN0aW9uIGluIHRoaXMgZ3JvdXBcIixcbiAgICAgICAgICB2YWx1ZXM6IHtcbiAgICAgICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICAgICAgICAgIH1cbiAgICAgICAgfSwgZnVuY3Rpb24gKHJlbW92ZVNlbGVjdGlvbikge1xuICAgICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUJhZGdlLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgICAgICBjb2xvcjogY29sb3IsXG4gICAgICAgICAgICBpY29uT25DbGljazogX3RoaXMyLm9uQ2xvc2VCdXR0b25DbGljayxcbiAgICAgICAgICAgIGljb25PbkNsaWNrQXJpYUxhYmVsOiByZW1vdmVTZWxlY3Rpb24sXG4gICAgICAgICAgICBpY29uU2lkZTogXCJyaWdodFwiLFxuICAgICAgICAgICAgaWNvblR5cGU6IFwiY3Jvc3NcIixcbiAgICAgICAgICAgIHRpdGxlOiBjaGlsZHJlblxuICAgICAgICAgIH0sIG9uQ2xpY2tQcm9wcywgcmVzdCksIGNoaWxkcmVuKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChhc1BsYWluVGV4dCkge1xuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcInNwYW5cIiwgX2V4dGVuZHMoe1xuICAgICAgICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICAgICAgICB9LCByZXN0KSwgY2hpbGRyZW4pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlCYWRnZSwgX2V4dGVuZHMoe1xuICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgIGNvbG9yOiBjb2xvcixcbiAgICAgICAgdGl0bGU6IGNoaWxkcmVuXG4gICAgICB9LCByZXN0LCBvbkNsaWNrUHJvcHMpLCBjaGlsZHJlbik7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEV1aUNvbWJvQm94UGlsbDtcbn0oQ29tcG9uZW50KTtcblxuX2RlZmluZVByb3BlcnR5KEV1aUNvbWJvQm94UGlsbCwgXCJkZWZhdWx0UHJvcHNcIiwge1xuICBjb2xvcjogJ2hvbGxvdydcbn0pO1xuXG5FdWlDb21ib0JveFBpbGwucHJvcFR5cGVzID0ge1xuICBhc1BsYWluVGV4dDogUHJvcFR5cGVzLmJvb2wsXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25DbGlja0FyaWFMYWJlbDogUHJvcFR5cGVzLmFueSxcbiAgb25DbG9zZTogUHJvcFR5cGVzLmZ1bmMsXG4gIG9wdGlvbjogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBpc0dyb3VwTGFiZWxPcHRpb246IFByb3BUeXBlcy5ib29sLFxuICAgIGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAga2V5OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIG9wdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBpc0dyb3VwTGFiZWxPcHRpb246IFByb3BUeXBlcy5ib29sLFxuICAgICAgbGFiZWw6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAgIGtleTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIG9wdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCksXG4gICAgICB2YWx1ZTogUHJvcFR5cGVzLmFueSxcbiAgICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nXG4gICAgfSkuaXNSZXF1aXJlZCksXG4gICAgdmFsdWU6IFByb3BUeXBlcy5hbnksXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZ1xuICB9KS5pc1JlcXVpcmVkLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nXG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiYWN0aXZlUGFnZVwiLCBcIml0ZW1zUGVyUGFnZVwiLCBcIml0ZW1zUGVyUGFnZU9wdGlvbnNcIiwgXCJzaG93UGVyUGFnZU9wdGlvbnNcIiwgXCJvbkNoYW5nZUl0ZW1zUGVyUGFnZVwiLCBcIm9uQ2hhbmdlUGFnZVwiLCBcInBhZ2VDb3VudFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHsgdmFyIF9pID0gYXJyID09IG51bGwgPyBudWxsIDogdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBhcnJbU3ltYm9sLml0ZXJhdG9yXSB8fCBhcnJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAoX2kgPT0gbnVsbCkgcmV0dXJuOyB2YXIgX2FyciA9IFtdOyB2YXIgX24gPSB0cnVlOyB2YXIgX2QgPSBmYWxzZTsgdmFyIF9zLCBfZTsgdHJ5IHsgZm9yIChfaSA9IF9pLmNhbGwoYXJyKTsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkgeyBfYXJyLnB1c2goX3MudmFsdWUpOyBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7IH0gfSBjYXRjaCAoZXJyKSB7IF9kID0gdHJ1ZTsgX2UgPSBlcnI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTsgfSBmaW5hbGx5IHsgaWYgKF9kKSB0aHJvdyBfZTsgfSB9IHJldHVybiBfYXJyOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VNZW1vLCB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IEV1aUJ1dHRvbkVtcHR5IH0gZnJvbSAnLi4vLi4vYnV0dG9uJztcbmltcG9ydCB7IEV1aUNvbnRleHRNZW51SXRlbSwgRXVpQ29udGV4dE1lbnVQYW5lbCB9IGZyb20gJy4uLy4uL2NvbnRleHRfbWVudSc7XG5pbXBvcnQgeyBFdWlGbGV4R3JvdXAsIEV1aUZsZXhJdGVtIH0gZnJvbSAnLi4vLi4vZmxleCc7XG5pbXBvcnQgeyBFdWlQYWdpbmF0aW9uIH0gZnJvbSAnLi4vLi4vcGFnaW5hdGlvbic7XG5pbXBvcnQgeyBFdWlQb3BvdmVyIH0gZnJvbSAnLi4vLi4vcG9wb3Zlcic7XG5pbXBvcnQgeyBFdWlJMThuIH0gZnJvbSAnLi4vLi4vaTE4bic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlUYWJsZVBhZ2luYXRpb24gPSBmdW5jdGlvbiBFdWlUYWJsZVBhZ2luYXRpb24oX3JlZikge1xuICB2YXIgYWN0aXZlUGFnZSA9IF9yZWYuYWN0aXZlUGFnZSxcbiAgICAgIF9yZWYkaXRlbXNQZXJQYWdlID0gX3JlZi5pdGVtc1BlclBhZ2UsXG4gICAgICBpdGVtc1BlclBhZ2UgPSBfcmVmJGl0ZW1zUGVyUGFnZSA9PT0gdm9pZCAwID8gNTAgOiBfcmVmJGl0ZW1zUGVyUGFnZSxcbiAgICAgIF9yZWYkaXRlbXNQZXJQYWdlT3B0aSA9IF9yZWYuaXRlbXNQZXJQYWdlT3B0aW9ucyxcbiAgICAgIGl0ZW1zUGVyUGFnZU9wdGlvbnMgPSBfcmVmJGl0ZW1zUGVyUGFnZU9wdGkgPT09IHZvaWQgMCA/IFsxMCwgMjAsIDUwLCAxMDBdIDogX3JlZiRpdGVtc1BlclBhZ2VPcHRpLFxuICAgICAgX3JlZiRzaG93UGVyUGFnZU9wdGlvID0gX3JlZi5zaG93UGVyUGFnZU9wdGlvbnMsXG4gICAgICBzaG93UGVyUGFnZU9wdGlvbnMgPSBfcmVmJHNob3dQZXJQYWdlT3B0aW8gPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJHNob3dQZXJQYWdlT3B0aW8sXG4gICAgICBfcmVmJG9uQ2hhbmdlSXRlbXNQZXIgPSBfcmVmLm9uQ2hhbmdlSXRlbXNQZXJQYWdlLFxuICAgICAgb25DaGFuZ2VJdGVtc1BlclBhZ2UgPSBfcmVmJG9uQ2hhbmdlSXRlbXNQZXIgPT09IHZvaWQgMCA/IGZ1bmN0aW9uICgpIHt9IDogX3JlZiRvbkNoYW5nZUl0ZW1zUGVyLFxuICAgICAgb25DaGFuZ2VQYWdlID0gX3JlZi5vbkNoYW5nZVBhZ2UsXG4gICAgICBwYWdlQ291bnQgPSBfcmVmLnBhZ2VDb3VudCxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgX3VzZVN0YXRlID0gdXNlU3RhdGUoZmFsc2UpLFxuICAgICAgX3VzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZSwgMiksXG4gICAgICBpc1BvcG92ZXJPcGVuID0gX3VzZVN0YXRlMlswXSxcbiAgICAgIHNldElzUG9wb3Zlck9wZW4gPSBfdXNlU3RhdGUyWzFdO1xuXG4gIHZhciB0b2dnbGVQb3BvdmVyID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKCkge1xuICAgIHNldElzUG9wb3Zlck9wZW4oZnVuY3Rpb24gKGlzT3Blbikge1xuICAgICAgcmV0dXJuICFpc09wZW47XG4gICAgfSk7XG4gIH0sIFtdKTtcbiAgdmFyIGNsb3NlUG9wb3ZlciA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uICgpIHtcbiAgICBzZXRJc1BvcG92ZXJPcGVuKGZhbHNlKTtcbiAgfSwgW10pO1xuXG4gIHZhciBidXR0b24gPSBfX19FbW90aW9uSlNYKEV1aUJ1dHRvbkVtcHR5LCB7XG4gICAgc2l6ZTogXCJ4c1wiLFxuICAgIGNvbG9yOiBcInRleHRcIixcbiAgICBpY29uVHlwZTogXCJhcnJvd0Rvd25cIixcbiAgICBpY29uU2lkZTogXCJyaWdodFwiLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogXCJ0YWJsZVBhZ2luYXRpb25Qb3BvdmVyQnV0dG9uXCIsXG4gICAgb25DbGljazogdG9nZ2xlUG9wb3ZlclxuICB9LCBpdGVtc1BlclBhZ2UgPT09IDAgPyBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICB0b2tlbjogXCJldWlUYWJsZVBhZ2luYXRpb24uYWxsUm93c1wiLFxuICAgIGRlZmF1bHQ6IFwiU2hvd2luZyBhbGwgcm93c1wiXG4gIH0pIDogX19fRW1vdGlvbkpTWChSZWFjdC5GcmFnbWVudCwgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgdG9rZW46IFwiZXVpVGFibGVQYWdpbmF0aW9uLnJvd3NQZXJQYWdlXCIsXG4gICAgZGVmYXVsdDogXCJSb3dzIHBlciBwYWdlXCJcbiAgfSksIFwiOiBcIiwgaXRlbXNQZXJQYWdlKSk7XG5cbiAgdmFyIGl0ZW1zID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGl0ZW1zUGVyUGFnZU9wdGlvbnMubWFwKGZ1bmN0aW9uIChpdGVtc1BlclBhZ2VPcHRpb24pIHtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUNvbnRleHRNZW51SXRlbSwge1xuICAgICAgICBrZXk6IGl0ZW1zUGVyUGFnZU9wdGlvbixcbiAgICAgICAgaWNvbjogaXRlbXNQZXJQYWdlT3B0aW9uID09PSBpdGVtc1BlclBhZ2UgPyAnY2hlY2snIDogJ2VtcHR5JyxcbiAgICAgICAgb25DbGljazogZnVuY3Rpb24gb25DbGljaygpIHtcbiAgICAgICAgICBjbG9zZVBvcG92ZXIoKTtcbiAgICAgICAgICBvbkNoYW5nZUl0ZW1zUGVyUGFnZShpdGVtc1BlclBhZ2VPcHRpb24pO1xuICAgICAgICB9LFxuICAgICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFwidGFibGVQYWdpbmF0aW9uLVwiLmNvbmNhdChpdGVtc1BlclBhZ2VPcHRpb24sIFwiLXJvd3NcIilcbiAgICAgIH0sIGl0ZW1zUGVyUGFnZU9wdGlvbiA9PT0gMCA/IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICB0b2tlbjogXCJldWlUYWJsZVBhZ2luYXRpb24ucm93c1BlclBhZ2VPcHRpb25TaG93QWxsUm93c1wiLFxuICAgICAgICBkZWZhdWx0OiBcIlNob3cgYWxsIHJvd3NcIlxuICAgICAgfSkgOiBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgdG9rZW46IFwiZXVpVGFibGVQYWdpbmF0aW9uLnJvd3NQZXJQYWdlT3B0aW9uXCIsXG4gICAgICAgIHZhbHVlczoge1xuICAgICAgICAgIHJvd3NQZXJQYWdlOiBpdGVtc1BlclBhZ2VPcHRpb25cbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDogXCJ7cm93c1BlclBhZ2V9IHJvd3NcIlxuICAgICAgfSkpO1xuICAgIH0pO1xuICB9LCBbaXRlbXNQZXJQYWdlT3B0aW9ucywgaXRlbXNQZXJQYWdlLCBvbkNoYW5nZUl0ZW1zUGVyUGFnZSwgY2xvc2VQb3BvdmVyXSk7XG5cbiAgdmFyIGl0ZW1zUGVyUGFnZVBvcG92ZXIgPSBfX19FbW90aW9uSlNYKEV1aVBvcG92ZXIsIHtcbiAgICBidXR0b246IGJ1dHRvbixcbiAgICBpc09wZW46IGlzUG9wb3Zlck9wZW4sXG4gICAgY2xvc2VQb3BvdmVyOiBjbG9zZVBvcG92ZXIsXG4gICAgcGFuZWxQYWRkaW5nU2l6ZTogXCJub25lXCIsXG4gICAgYW5jaG9yUG9zaXRpb246IFwidXBSaWdodFwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goRXVpQ29udGV4dE1lbnVQYW5lbCwge1xuICAgIGl0ZW1zOiBpdGVtc1xuICB9KSk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpRmxleEdyb3VwLCB7XG4gICAganVzdGlmeUNvbnRlbnQ6IFwic3BhY2VCZXR3ZWVuXCIsXG4gICAgYWxpZ25JdGVtczogXCJjZW50ZXJcIixcbiAgICByZXNwb25zaXZlOiBmYWxzZSxcbiAgICB3cmFwOiB0cnVlLFxuICAgIGd1dHRlclNpemU6IFwic1wiLFxuICAgIGNsYXNzTmFtZTogXCJldWkteFNjcm9sbFwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goRXVpRmxleEl0ZW0sIHtcbiAgICBncm93OiBmYWxzZVxuICB9LCBzaG93UGVyUGFnZU9wdGlvbnMgJiYgaXRlbXNQZXJQYWdlUG9wb3ZlciksIF9fX0Vtb3Rpb25KU1goRXVpRmxleEl0ZW0sIHtcbiAgICBncm93OiBmYWxzZVxuICB9LCBpdGVtc1BlclBhZ2UgPiAwICYmIF9fX0Vtb3Rpb25KU1goRXVpUGFnaW5hdGlvbiwgX2V4dGVuZHMoe1xuICAgIHBhZ2VDb3VudDogcGFnZUNvdW50LFxuICAgIGFjdGl2ZVBhZ2U6IGFjdGl2ZVBhZ2UsXG4gICAgb25QYWdlQ2xpY2s6IG9uQ2hhbmdlUGFnZVxuICB9LCByZXN0KSkpKTtcbn07XG5FdWlUYWJsZVBhZ2luYXRpb24ucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICAgKiBPcHRpb24gdG8gY29tcGxldGVseSBoaWRlIHRoZSBcIlJvd3MgcGVyIHBhZ2VcIiBzZWxlY3Rvci5cbiAgICAgKi9cbiAgc2hvd1BlclBhZ2VPcHRpb25zOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBDdXJyZW50IHNlbGVjdGlvbiBmb3IgXCJSb3dzIHBlciBwYWdlXCIuXG4gICAgICogUGFzcyBgMGAgdG8gZGlzcGxheSB0aGUgc2VsZWN0ZWQgXCJTaG93IGFsbFwiIG9wdGlvbiBhbmQgaGlkZSB0aGUgcGFnaW5hdGlvbi5cbiAgICAgKi9cbiAgaXRlbXNQZXJQYWdlOiBQcm9wVHlwZXMubnVtYmVyLFxuXG4gIC8qKlxuICAgICAqIEN1c3RvbSBhcnJheSBvZiBvcHRpb25zIGZvciBcIlJvd3MgcGVyIHBhZ2VcIi5cbiAgICAgKiBQYXNzIGAwYCBhcyBvbmUgb2YgdGhlIG9wdGlvbnMgdG8gY3JlYXRlIGEgXCJTaG93IGFsbFwiIG9wdGlvbi5cbiAgICAgKi9cbiAgaXRlbXNQZXJQYWdlT3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkKSxcblxuICAvKipcbiAgICAgKiBDbGljayBoYW5kbGVyIHRoYXQgcGFzc2VzIGJhY2sgc2VsZWN0ZWQgYHBhZ2VTaXplYCBudW1iZXJcbiAgICAgKi9cbiAgb25DaGFuZ2VJdGVtc1BlclBhZ2U6IFByb3BUeXBlcy5mdW5jLFxuICBvbkNoYW5nZVBhZ2U6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgICAqIFJlcXVpcmVzIHRoZSBgaWRgIG9mIHRoZSB0YWJsZSBiZWluZyBjb250cm9sbGVkXG4gICAgICovXG4gIFwiYXJpYS1jb250cm9sc1wiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZ1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcInBhZ2VDb3VudFwiLCBcImFjdGl2ZVBhZ2VcIiwgXCJvblBhZ2VDbGlja1wiLCBcImNvbXByZXNzZWRcIiwgXCJhcmlhLWNvbnRyb2xzXCIsIFwicmVzcG9uc2l2ZVwiXTtcblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgRXVpUGFnaW5hdGlvbkJ1dHRvbiB9IGZyb20gJy4vcGFnaW5hdGlvbl9idXR0b24nO1xuaW1wb3J0IHsgRXVpSTE4biwgdXNlRXVpSTE4biB9IGZyb20gJy4uL2kxOG4nO1xuaW1wb3J0IHsgRXVpVGV4dCB9IGZyb20gJy4uL3RleHQnO1xuaW1wb3J0IHsgRXVpUGFnaW5hdGlvbkJ1dHRvbkFycm93IH0gZnJvbSAnLi9wYWdpbmF0aW9uX2J1dHRvbl9hcnJvdyc7XG5pbXBvcnQgeyB1c2VJc1dpdGhpbkJyZWFrcG9pbnRzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpU2NyZWVuUmVhZGVyT25seSB9IGZyb20gJy4uL2FjY2Vzc2liaWxpdHknO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBNQVhfVklTSUJMRV9QQUdFUyA9IDU7XG52YXIgTlVNQkVSX1NVUlJPVU5ESU5HX1BBR0VTID0gTWF0aC5mbG9vcihNQVhfVklTSUJMRV9QQUdFUyAqIDAuNSk7XG5leHBvcnQgdmFyIEV1aVBhZ2luYXRpb24gPSBmdW5jdGlvbiBFdWlQYWdpbmF0aW9uKF9yZWYpIHtcbiAgdmFyIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgX3JlZiRwYWdlQ291bnQgPSBfcmVmLnBhZ2VDb3VudCxcbiAgICAgIHBhZ2VDb3VudCA9IF9yZWYkcGFnZUNvdW50ID09PSB2b2lkIDAgPyAxIDogX3JlZiRwYWdlQ291bnQsXG4gICAgICBfcmVmJGFjdGl2ZVBhZ2UgPSBfcmVmLmFjdGl2ZVBhZ2UsXG4gICAgICBhY3RpdmVQYWdlID0gX3JlZiRhY3RpdmVQYWdlID09PSB2b2lkIDAgPyAwIDogX3JlZiRhY3RpdmVQYWdlLFxuICAgICAgX3JlZiRvblBhZ2VDbGljayA9IF9yZWYub25QYWdlQ2xpY2ssXG4gICAgICBvblBhZ2VDbGljayA9IF9yZWYkb25QYWdlQ2xpY2sgPT09IHZvaWQgMCA/IGZ1bmN0aW9uICgpIHt9IDogX3JlZiRvblBhZ2VDbGljayxcbiAgICAgIF9jb21wcmVzc2VkID0gX3JlZi5jb21wcmVzc2VkLFxuICAgICAgYXJpYUNvbnRyb2xzID0gX3JlZlsnYXJpYS1jb250cm9scyddLFxuICAgICAgX3JlZiRyZXNwb25zaXZlID0gX3JlZi5yZXNwb25zaXZlLFxuICAgICAgcmVzcG9uc2l2ZSA9IF9yZWYkcmVzcG9uc2l2ZSA9PT0gdm9pZCAwID8gWyd4cycsICdzJ10gOiBfcmVmJHJlc3BvbnNpdmUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGlzUmVzcG9uc2l2ZSA9IHVzZUlzV2l0aGluQnJlYWtwb2ludHMocmVzcG9uc2l2ZSwgISFyZXNwb25zaXZlKTsgLy8gRm9yY2UgdG8gYGNvbXByZXNzZWRgIHZlcnNpb24gaWYgc3BlY2lmaWVkIG9yIHdpdGhpbiB0aGUgcmVzcG9uc2l2ZSBicmVha3BvaW50c1xuXG4gIHZhciBjb21wcmVzc2VkID0gX2NvbXByZXNzZWQgfHwgaXNSZXNwb25zaXZlO1xuXG4gIHZhciBzYWZlQ2xpY2sgPSBmdW5jdGlvbiBzYWZlQ2xpY2soZSwgcGFnZUluZGV4KSB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgaWYgKGFyaWFDb250cm9scykge1xuICAgICAgdmFyIGNvbnRyb2xsZWRFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYXJpYUNvbnRyb2xzKTtcblxuICAgICAgaWYgKGNvbnRyb2xsZWRFbGVtZW50KSB7XG4gICAgICAgIGNvbnRyb2xsZWRFbGVtZW50LmZvY3VzKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgb25QYWdlQ2xpY2socGFnZUluZGV4KTtcbiAgfTtcblxuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVBhZ2luYXRpb24nLCBjbGFzc05hbWUpO1xuXG4gIHZhciBmaXJzdEJ1dHRvbiA9IChwYWdlQ291bnQgPCAxIHx8IGNvbXByZXNzZWQpICYmIF9fX0Vtb3Rpb25KU1goRXVpUGFnaW5hdGlvbkJ1dHRvbkFycm93LCB7XG4gICAgdHlwZTogXCJmaXJzdFwiLFxuICAgIGFyaWFDb250cm9sczogYXJpYUNvbnRyb2xzLFxuICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soZSkge1xuICAgICAgcmV0dXJuIHNhZmVDbGljayhlLCAwKTtcbiAgICB9LFxuICAgIGRpc2FibGVkOiBhY3RpdmVQYWdlID09PSAwXG4gIH0pO1xuXG4gIHZhciBwcmV2aW91c0J1dHRvbiA9IF9fX0Vtb3Rpb25KU1goRXVpUGFnaW5hdGlvbkJ1dHRvbkFycm93LCB7XG4gICAgdHlwZTogXCJwcmV2aW91c1wiLFxuICAgIGFyaWFDb250cm9sczogYXJpYUNvbnRyb2xzLFxuICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soZSkge1xuICAgICAgcmV0dXJuIHNhZmVDbGljayhlLCBhY3RpdmVQYWdlIC0gMSk7XG4gICAgfSxcbiAgICBkaXNhYmxlZDogYWN0aXZlUGFnZSA9PT0gMFxuICB9KTtcblxuICB2YXIgbmV4dEJ1dHRvbiA9IF9fX0Vtb3Rpb25KU1goRXVpUGFnaW5hdGlvbkJ1dHRvbkFycm93LCB7XG4gICAgdHlwZTogXCJuZXh0XCIsXG4gICAgYXJpYUNvbnRyb2xzOiBhcmlhQ29udHJvbHMsXG4gICAgb25DbGljazogZnVuY3Rpb24gb25DbGljayhlKSB7XG4gICAgICByZXR1cm4gc2FmZUNsaWNrKGUsIGFjdGl2ZVBhZ2UgKyAxKTtcbiAgICB9LFxuICAgIGRpc2FibGVkOiBhY3RpdmVQYWdlID09PSAtMSB8fCBhY3RpdmVQYWdlID09PSBwYWdlQ291bnQgLSAxXG4gIH0pO1xuXG4gIHZhciBsYXN0QnV0dG9uID0gKHBhZ2VDb3VudCA8IDEgfHwgY29tcHJlc3NlZCkgJiYgX19fRW1vdGlvbkpTWChFdWlQYWdpbmF0aW9uQnV0dG9uQXJyb3csIHtcbiAgICB0eXBlOiBcImxhc3RcIixcbiAgICBhcmlhQ29udHJvbHM6IGFyaWFDb250cm9scyxcbiAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKGUpIHtcbiAgICAgIHJldHVybiBzYWZlQ2xpY2soZSwgcGFnZUNvdW50ID8gcGFnZUNvdW50IC0gMSA6IC0xKTtcbiAgICB9LFxuICAgIGRpc2FibGVkOiBhY3RpdmVQYWdlID09PSAtMSB8fCBhY3RpdmVQYWdlID09PSBwYWdlQ291bnQgLSAxXG4gIH0pO1xuXG4gIHZhciBjZW50ZXJQYWdlQ291bnQ7XG5cbiAgaWYgKHBhZ2VDb3VudCkge1xuICAgIHZhciBzaGFyZWRCdXR0b25Qcm9wcyA9IHtcbiAgICAgIGFjdGl2ZVBhZ2U6IGFjdGl2ZVBhZ2UsXG4gICAgICBhcmlhQ29udHJvbHM6IGFyaWFDb250cm9scyxcbiAgICAgIHNhZmVDbGljazogc2FmZUNsaWNrLFxuICAgICAgcGFnZUNvdW50OiBwYWdlQ291bnRcbiAgICB9O1xuXG4gICAgaWYgKGNvbXByZXNzZWQpIHtcbiAgICAgIGNlbnRlclBhZ2VDb3VudCA9IF9fX0Vtb3Rpb25KU1goRXVpVGV4dCwge1xuICAgICAgICBzaXplOiBcInNcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcImV1aVBhZ2luYXRpb25fX2NvbXByZXNzZWRUZXh0XCJcbiAgICAgIH0sIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICB0b2tlbjogXCJldWlQYWdpbmF0aW9uLnBhZ2VPZlRvdGFsQ29tcHJlc3NlZFwiLFxuICAgICAgICBkZWZhdWx0OiBcIntwYWdlfSBvZiB7dG90YWx9XCIsXG4gICAgICAgIHZhbHVlczoge1xuICAgICAgICAgIHBhZ2U6IF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIG51bGwsIGFjdGl2ZVBhZ2UgKyAxKSxcbiAgICAgICAgICB0b3RhbDogX19fRW1vdGlvbkpTWChcInNwYW5cIiwgbnVsbCwgcGFnZUNvdW50KVxuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBwYWdlcyA9IFtdO1xuICAgICAgdmFyIGZpcnN0UGFnZUluUmFuZ2UgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihhY3RpdmVQYWdlIC0gTlVNQkVSX1NVUlJPVU5ESU5HX1BBR0VTLCBwYWdlQ291bnQgLSBNQVhfVklTSUJMRV9QQUdFUykpO1xuICAgICAgdmFyIGxhc3RQYWdlSW5SYW5nZSA9IE1hdGgubWluKHBhZ2VDb3VudCwgZmlyc3RQYWdlSW5SYW5nZSArIE1BWF9WSVNJQkxFX1BBR0VTKTtcblxuICAgICAgZm9yICh2YXIgaSA9IGZpcnN0UGFnZUluUmFuZ2UsIGluZGV4ID0gMDsgaSA8IGxhc3RQYWdlSW5SYW5nZTsgaSsrLCBpbmRleCsrKSB7XG4gICAgICAgIHBhZ2VzLnB1c2goX19fRW1vdGlvbkpTWChQYWdpbmF0aW9uQnV0dG9uV3JhcHBlciwgX2V4dGVuZHMoe1xuICAgICAgICAgIHBhZ2VJbmRleDogaSxcbiAgICAgICAgICBrZXk6IGlcbiAgICAgICAgfSwgc2hhcmVkQnV0dG9uUHJvcHMpKSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBmaXJzdFBhZ2VCdXR0b25zID0gW107XG5cbiAgICAgIGlmIChmaXJzdFBhZ2VJblJhbmdlID4gMCkge1xuICAgICAgICBmaXJzdFBhZ2VCdXR0b25zLnB1c2goX19fRW1vdGlvbkpTWChQYWdpbmF0aW9uQnV0dG9uV3JhcHBlciwgX2V4dGVuZHMoe1xuICAgICAgICAgIHBhZ2VJbmRleDogMCxcbiAgICAgICAgICBrZXk6IDBcbiAgICAgICAgfSwgc2hhcmVkQnV0dG9uUHJvcHMpKSk7XG5cbiAgICAgICAgaWYgKGZpcnN0UGFnZUluUmFuZ2UgPiAxICYmIGZpcnN0UGFnZUluUmFuZ2UgIT09IDIpIHtcbiAgICAgICAgICBmaXJzdFBhZ2VCdXR0b25zLnB1c2goX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgICBrZXk6IFwic3RhcnRpbmdFbGxpcHNlc1wiLFxuICAgICAgICAgICAgdG9rZW46IFwiZXVpUGFnaW5hdGlvbi5maXJzdFJhbmdlQXJpYUxhYmVsXCIsXG4gICAgICAgICAgICBkZWZhdWx0OiBcIlNraXBwaW5nIHBhZ2VzIDIgdG8ge2xhc3RQYWdlfVwiLFxuICAgICAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgICAgIGxhc3RQYWdlOiBmaXJzdFBhZ2VJblJhbmdlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSwgZnVuY3Rpb24gKGZpcnN0UmFuZ2VBcmlhTGFiZWwpIHtcbiAgICAgICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwibGlcIiwge1xuICAgICAgICAgICAgICBcImFyaWEtbGFiZWxcIjogZmlyc3RSYW5nZUFyaWFMYWJlbCxcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcImV1aVBhZ2luYXRpb25CdXR0b24taXNQbGFjZWhvbGRlciBldWlQYWdpbmF0aW9uX19pdGVtXCJcbiAgICAgICAgICAgIH0sIFwiXFx1MjAyNlwiKTtcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZmlyc3RQYWdlSW5SYW5nZSA9PT0gMikge1xuICAgICAgICAgIGZpcnN0UGFnZUJ1dHRvbnMucHVzaChfX19FbW90aW9uSlNYKFBhZ2luYXRpb25CdXR0b25XcmFwcGVyLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgICBwYWdlSW5kZXg6IDEsXG4gICAgICAgICAgICBrZXk6IDFcbiAgICAgICAgICB9LCBzaGFyZWRCdXR0b25Qcm9wcykpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgbGFzdFBhZ2VCdXR0b25zID0gW107XG5cbiAgICAgIGlmIChsYXN0UGFnZUluUmFuZ2UgPCBwYWdlQ291bnQpIHtcbiAgICAgICAgaWYgKGxhc3RQYWdlSW5SYW5nZSArIDEgPT09IHBhZ2VDb3VudCAtIDEpIHtcbiAgICAgICAgICBsYXN0UGFnZUJ1dHRvbnMucHVzaChfX19FbW90aW9uSlNYKFBhZ2luYXRpb25CdXR0b25XcmFwcGVyLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgICBwYWdlSW5kZXg6IGxhc3RQYWdlSW5SYW5nZSxcbiAgICAgICAgICAgIGtleTogbGFzdFBhZ2VJblJhbmdlXG4gICAgICAgICAgfSwgc2hhcmVkQnV0dG9uUHJvcHMpKSk7XG4gICAgICAgIH0gZWxzZSBpZiAobGFzdFBhZ2VJblJhbmdlIDwgcGFnZUNvdW50IC0gMSkge1xuICAgICAgICAgIGxhc3RQYWdlQnV0dG9ucy5wdXNoKF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgICAga2V5OiBcImVuZGluZ0VsbGlwc2VzXCIsXG4gICAgICAgICAgICB0b2tlbjogXCJldWlQYWdpbmF0aW9uLmxhc3RSYW5nZUFyaWFMYWJlbFwiLFxuICAgICAgICAgICAgZGVmYXVsdDogXCJTa2lwcGluZyBwYWdlcyB7Zmlyc3RQYWdlfSB0byB7bGFzdFBhZ2V9XCIsXG4gICAgICAgICAgICB2YWx1ZXM6IHtcbiAgICAgICAgICAgICAgZmlyc3RQYWdlOiBsYXN0UGFnZUluUmFuZ2UgKyAxLFxuICAgICAgICAgICAgICBsYXN0UGFnZTogcGFnZUNvdW50IC0gMVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIGZ1bmN0aW9uIChsYXN0UmFuZ2VBcmlhTGFiZWwpIHtcbiAgICAgICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwibGlcIiwge1xuICAgICAgICAgICAgICBcImFyaWEtbGFiZWxcIjogbGFzdFJhbmdlQXJpYUxhYmVsLFxuICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpUGFnaW5hdGlvbkJ1dHRvbi1pc1BsYWNlaG9sZGVyIGV1aVBhZ2luYXRpb25fX2l0ZW1cIlxuICAgICAgICAgICAgfSwgXCJcXHUyMDI2XCIpO1xuICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxhc3RQYWdlQnV0dG9ucy5wdXNoKF9fX0Vtb3Rpb25KU1goUGFnaW5hdGlvbkJ1dHRvbldyYXBwZXIsIF9leHRlbmRzKHtcbiAgICAgICAgICBwYWdlSW5kZXg6IHBhZ2VDb3VudCAtIDEsXG4gICAgICAgICAga2V5OiBwYWdlQ291bnQgLSAxXG4gICAgICAgIH0sIHNoYXJlZEJ1dHRvblByb3BzKSkpO1xuICAgICAgfVxuXG4gICAgICB2YXIgc2VsZWN0YWJsZVBhZ2VzID0gcGFnZXM7XG5cbiAgICAgIHZhciBhY2Nlc3NpYmxlTmFtZSA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgcmVzdFsnYXJpYS1sYWJlbCddICYmIHtcbiAgICAgICAgJ2FyaWEtbGFiZWwnOiByZXN0WydhcmlhLWxhYmVsJ11cbiAgICAgIH0pLCByZXN0WydhcmlhLWxhYmVsbGVkYnknXSAmJiB7XG4gICAgICAgICdhcmlhLWxhYmVsbGVkYnknOiByZXN0WydhcmlhLWxhYmVsbGVkYnknXVxuICAgICAgfSk7XG5cbiAgICAgIGNlbnRlclBhZ2VDb3VudCA9IF9fX0Vtb3Rpb25KU1goXCJ1bFwiLCBfZXh0ZW5kcyh7fSwgYWNjZXNzaWJsZU5hbWUsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcImV1aVBhZ2luYXRpb25fX2xpc3RcIlxuICAgICAgfSksIGZpcnN0UGFnZUJ1dHRvbnMsIHNlbGVjdGFibGVQYWdlcywgbGFzdFBhZ2VCdXR0b25zKTtcbiAgICB9XG4gIH0gLy8gQWxsIHRoZSBpMThuIHN0cmluZ3MgdXNlZCB0byBidWlsZCB0aGUgd2hvbGUgU1Itb25seSB0ZXh0XG5cblxuICB2YXIgbGFzdExhYmVsID0gdXNlRXVpSTE4bignZXVpUGFnaW5hdGlvbi5sYXN0JywgJ0xhc3QnKTtcbiAgdmFyIHBhZ2VMYWJlbCA9IHVzZUV1aUkxOG4oJ2V1aVBhZ2luYXRpb24ucGFnZScsICdQYWdlJyk7XG4gIHZhciBvZkxhYmVsID0gdXNlRXVpSTE4bignZXVpUGFnaW5hdGlvbi5vZicsICdvZicpO1xuICB2YXIgY29sbGVjdGlvbkxhYmVsID0gdXNlRXVpSTE4bignZXVpUGFnaW5hdGlvbi5jb2xsZWN0aW9uJywgJ2NvbGxlY3Rpb24nKTtcbiAgdmFyIGZyb21FbmRMYWJlbCA9IHVzZUV1aUkxOG4oJ2V1aVBhZ2luYXRpb24uZnJvbUVuZExhYmVsJywgJ2Zyb20gZW5kJyk7IC8vIEJhc2VkIG9uIHRoZSBgYWN0aXZlUGFnZWAgY291bnQsIGJ1aWxkIHRoZSBmcm9udCBvZiB0aGUgU1Itb25seSB0ZXh0XG4gIC8vIGkuZS4gYFBhZ2UgMWAsIGBQYWdlIDIgZnJvbSBlbmRgLCBgTGFzdCBQYWdlYFxuXG4gIHZhciBhY2Nlc3NpYmxlUGFnZVN0cmluZyA9IGZ1bmN0aW9uIGFjY2Vzc2libGVQYWdlU3RyaW5nKCkge1xuICAgIGlmIChhY3RpdmVQYWdlIDwgLTEpIHJldHVybiBcIlwiLmNvbmNhdChwYWdlTGFiZWwsIFwiIFwiKS5jb25jYXQoTWF0aC5hYnMoYWN0aXZlUGFnZSksIFwiIFwiKS5jb25jYXQoZnJvbUVuZExhYmVsKTtcbiAgICBpZiAoYWN0aXZlUGFnZSA9PT0gLTEpIHJldHVybiBcIlwiLmNvbmNhdChsYXN0TGFiZWwsIFwiIFwiKS5jb25jYXQocGFnZUxhYmVsKTtcbiAgICByZXR1cm4gXCJcIi5jb25jYXQocGFnZUxhYmVsLCBcIiBcIikuY29uY2F0KGFjdGl2ZVBhZ2UgKyAxKTtcbiAgfTsgLy8gSWYgYHBhZ2VDb3VudGAgaXMgdW5rbm93biBjYWxsIGl0IGBjb2xsZWN0aW9uYFxuXG5cbiAgdmFyIGFjY2Vzc2libGVDb2xsZWN0aW9uU3RyaW5nID0gcGFnZUNvdW50ID09PSAwID8gY29sbGVjdGlvbkxhYmVsIDogcGFnZUNvdW50LnRvU3RyaW5nKCk7IC8vIENyZWF0ZSB0aGUgd2hvbGUgc3RyaW5nIHdpdGggdG90YWwgcGFnZUNvdW50IG9yIGBjb2xsZWN0aW9uYFxuXG4gIHZhciBhY2Nlc3NpYmxlUGFnZUNvdW50ID0gXCJcIi5jb25jYXQoYWNjZXNzaWJsZVBhZ2VTdHJpbmcoKSwgXCIgXCIpLmNvbmNhdChvZkxhYmVsLCBcIiBcIikuY29uY2F0KGFjY2Vzc2libGVDb2xsZWN0aW9uU3RyaW5nKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJuYXZcIiwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICB9LCByZXN0KSwgX19fRW1vdGlvbkpTWChFdWlTY3JlZW5SZWFkZXJPbmx5LCBudWxsLCBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgXCJhcmlhLWF0b21pY1wiOiBcInRydWVcIixcbiAgICBcImFyaWEtcmVsZXZhbnRcIjogXCJhZGRpdGlvbnMgdGV4dFwiLFxuICAgIHJvbGU6IFwic3RhdHVzXCJcbiAgfSwgYWNjZXNzaWJsZVBhZ2VDb3VudCkpLCBmaXJzdEJ1dHRvbiwgcHJldmlvdXNCdXR0b24sIGNlbnRlclBhZ2VDb3VudCwgbmV4dEJ1dHRvbiwgbGFzdEJ1dHRvbik7XG59O1xuRXVpUGFnaW5hdGlvbi5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgKiBUaGUgdG90YWwgbnVtYmVyIG9mIHBhZ2VzLlxuICAgICAqIFBhc3MgYDBgIGlmIHRvdGFsIGNvdW50IGlzIHVua25vd24uXG4gICAgICovXG4gIHBhZ2VDb3VudDogUHJvcFR5cGVzLm51bWJlcixcblxuICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBwYWdlIHVzaW5nIGEgemVybyBiYXNlZCBpbmRleC5cbiAgICAgKiBTbyBpZiB5b3Ugc2V0IHRoZSBhY3RpdmVQYWdlIHRvIDEsIGl0IHdpbGwgYWN0aXZhdGUgdGhlIHNlY29uZCBwYWdlLlxuICAgICAqIFBhc3MgYC0xYCBmb3IgZm9yY2luZyB0byBsYXN0IHBhZ2UuXG4gICAgICovXG4gIGFjdGl2ZVBhZ2U6IFByb3BUeXBlcy5udW1iZXIsXG5cbiAgLyoqXG4gICAgICogQ2xpY2sgaGFuZGxlciB0aGF0IHBhc3NlcyBiYWNrIHRoZSBpbnRlcm5hbGx5IGNhbGN1bGF0ZWQgYGFjdGl2ZVBhZ2VgIGluZGV4XG4gICAgICovXG4gIG9uUGFnZUNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICAgKiBJZiB0cnVlLCB3aWxsIG9ubHkgc2hvdyBuZXh0L3ByZXYgYXJyb3dzIGFuZCBzaW1wbGlmaWVkIG51bWJlciBzZXQuXG4gICAgICovXG4gIGNvbXByZXNzZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIElmIHBhc3NlZCBpbiwgcGFzc2VzIHZhbHVlIHRocm91Z2ggdG8gZWFjaCBidXR0b24gdG8gc2V0IGFyaWEtY29udHJvbHMuXG4gICAgICovXG4gIFwiYXJpYS1jb250cm9sc1wiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAqIEF1dG9tYXRpY2FsbHkgcmVkdWNlcyB0byB0aGUgYGNvbXByZXNzZWRgIHZlcnNpb24gb24gc21hbGxlciBzY3JlZW5zLlxuICAgICAqIFJlbW92ZSBjb21wbGV0ZWx5IHdpdGggYGZhbHNlYCBvciBwcm92aWRlIHlvdXIgb3duIGxpc3Qgb2YgcmVzcG9uc2l2ZSBicmVha3BvaW50cy5cbiAgICAgKi9cbiAgcmVzcG9uc2l2ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtmYWxzZV0pLCBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQpLmlzUmVxdWlyZWRdKVxufTtcblxudmFyIFBhZ2luYXRpb25CdXR0b25XcmFwcGVyID0gZnVuY3Rpb24gUGFnaW5hdGlvbkJ1dHRvbldyYXBwZXIoX3JlZjIpIHtcbiAgdmFyIHBhZ2VJbmRleCA9IF9yZWYyLnBhZ2VJbmRleCxcbiAgICAgIF9yZWYyJGluTGlzdCA9IF9yZWYyLmluTGlzdCxcbiAgICAgIGluTGlzdCA9IF9yZWYyJGluTGlzdCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYyJGluTGlzdCxcbiAgICAgIGFjdGl2ZVBhZ2UgPSBfcmVmMi5hY3RpdmVQYWdlLFxuICAgICAgcGFnZUNvdW50ID0gX3JlZjIucGFnZUNvdW50LFxuICAgICAgYXJpYUNvbnRyb2xzID0gX3JlZjIuYXJpYUNvbnRyb2xzLFxuICAgICAgc2FmZUNsaWNrID0gX3JlZjIuc2FmZUNsaWNrLFxuICAgICAgZGlzYWJsZWQgPSBfcmVmMi5kaXNhYmxlZDtcblxuICB2YXIgYnV0dG9uID0gX19fRW1vdGlvbkpTWChFdWlQYWdpbmF0aW9uQnV0dG9uLCB7XG4gICAgaXNBY3RpdmU6IHBhZ2VJbmRleCA9PT0gYWN0aXZlUGFnZSxcbiAgICB0b3RhbFBhZ2VzOiBwYWdlQ291bnQsXG4gICAgb25DbGljazogZnVuY3Rpb24gb25DbGljayhlKSB7XG4gICAgICByZXR1cm4gc2FmZUNsaWNrKGUsIHBhZ2VJbmRleCk7XG4gICAgfSxcbiAgICBwYWdlSW5kZXg6IHBhZ2VJbmRleCxcbiAgICBcImFyaWEtY29udHJvbHNcIjogYXJpYUNvbnRyb2xzLFxuICAgIGRpc2FibGVkOiBkaXNhYmxlZFxuICB9KTtcblxuICBpZiAoaW5MaXN0KSB7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJsaVwiLCB7XG4gICAgICBjbGFzc05hbWU6IFwiZXVpUGFnaW5hdGlvbl9faXRlbVwiXG4gICAgfSwgYnV0dG9uKTtcbiAgfVxuXG4gIHJldHVybiBidXR0b247XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwiaXNBY3RpdmVcIiwgXCJpc1BsYWNlaG9sZGVyXCIsIFwicGFnZUluZGV4XCIsIFwidG90YWxQYWdlc1wiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgRXVpQnV0dG9uRW1wdHkgfSBmcm9tICcuLi9idXR0b24nO1xuaW1wb3J0IHsgRXVpSTE4biB9IGZyb20gJy4uL2kxOG4nO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpUGFnaW5hdGlvbkJ1dHRvbiA9IGZ1bmN0aW9uIEV1aVBhZ2luYXRpb25CdXR0b24oX3JlZikge1xuICB2YXIgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBpc0FjdGl2ZSA9IF9yZWYuaXNBY3RpdmUsXG4gICAgICBpc1BsYWNlaG9sZGVyID0gX3JlZi5pc1BsYWNlaG9sZGVyLFxuICAgICAgcGFnZUluZGV4ID0gX3JlZi5wYWdlSW5kZXgsXG4gICAgICB0b3RhbFBhZ2VzID0gX3JlZi50b3RhbFBhZ2VzLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpUGFnaW5hdGlvbkJ1dHRvbicsIGNsYXNzTmFtZSwge1xuICAgICdldWlQYWdpbmF0aW9uQnV0dG9uLWlzQWN0aXZlJzogaXNBY3RpdmUsXG4gICAgJ2V1aVBhZ2luYXRpb25CdXR0b24taXNQbGFjZWhvbGRlcic6IGlzUGxhY2Vob2xkZXJcbiAgfSk7XG5cbiAgdmFyIHByb3BzID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe1xuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBzaXplOiAncycsXG4gICAgY29sb3I6ICd0ZXh0JyxcbiAgICAnZGF0YS10ZXN0LXN1YmonOiBcInBhZ2luYXRpb24tYnV0dG9uLVwiLmNvbmNhdChwYWdlSW5kZXgpLFxuICAgIGlzRGlzYWJsZWQ6IGlzUGxhY2Vob2xkZXIgfHwgaXNBY3RpdmVcbiAgfSwgaXNBY3RpdmUgJiYge1xuICAgICdhcmlhLWN1cnJlbnQnOiB0cnVlXG4gIH0pLCByZXN0WydhcmlhLWNvbnRyb2xzJ10gJiYge1xuICAgIGhyZWY6IFwiI1wiLmNvbmNhdChyZXN0WydhcmlhLWNvbnRyb2xzJ10pXG4gIH0pLCByZXN0KTtcblxuICB2YXIgcGFnZU51bWJlciA9IHBhZ2VJbmRleCArIDE7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICB0b2tlbjogXCJldWlQYWdpbmF0aW9uQnV0dG9uLmxvbmdQYWdlU3RyaW5nXCIsXG4gICAgZGVmYXVsdDogXCJQYWdlIHtwYWdlfSBvZiB7dG90YWxQYWdlc31cIixcbiAgICB2YWx1ZXM6IHtcbiAgICAgIHBhZ2U6IHBhZ2VOdW1iZXIsXG4gICAgICB0b3RhbFBhZ2VzOiB0b3RhbFBhZ2VzXG4gICAgfVxuICB9LCBmdW5jdGlvbiAobG9uZ1BhZ2VTdHJpbmcpIHtcbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICB0b2tlbjogXCJldWlQYWdpbmF0aW9uQnV0dG9uLnNob3J0UGFnZVN0cmluZ1wiLFxuICAgICAgZGVmYXVsdDogXCJQYWdlIHtwYWdlfVwiLFxuICAgICAgdmFsdWVzOiB7XG4gICAgICAgIHBhZ2U6IHBhZ2VOdW1iZXJcbiAgICAgIH1cbiAgICB9LCBmdW5jdGlvbiAoc2hvcnRQYWdlU3RyaW5nKSB7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlCdXR0b25FbXB0eSwgX2V4dGVuZHMoe1xuICAgICAgICBcImFyaWEtbGFiZWxcIjogdG90YWxQYWdlcyA/IGxvbmdQYWdlU3RyaW5nIDogc2hvcnRQYWdlU3RyaW5nXG4gICAgICB9LCBwcm9wcyksIHBhZ2VOdW1iZXIpO1xuICAgIH0pO1xuICB9KTtcbn07XG5FdWlQYWdpbmF0aW9uQnV0dG9uLnByb3BUeXBlcyA9IHtcbiAgaHJlZjogUHJvcFR5cGVzLnN0cmluZyxcbiAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAgICogQW55IG9mIG91ciBuYW1lZCBjb2xvcnNcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBBbnkgb2Ygb3VyIG5hbWVkIGNvbG9yc1xuICAgICAqL1xuICBjb2xvcjogUHJvcFR5cGVzLm9uZU9mKFtcInByaW1hcnlcIiwgXCJkYW5nZXJcIiwgXCJ0ZXh0XCIsIFwiZ2hvc3RcIiwgXCJzdWNjZXNzXCIsIFwid2FybmluZ1wiXSksXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZihbXCJ4c1wiLCBcInNcIiwgXCJtXCJdKSxcblxuICAvKipcbiAgICAgKiBFbnN1cmUgdGhlIHRleHQgb2YgdGhlIGJ1dHRvbiBzaXRzIGZsdXNoIHRvIHRoZSBsZWZ0LCByaWdodCwgb3IgYm90aCBzaWRlcyBvZiBpdHMgY29udGFpbmVyXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogRW5zdXJlIHRoZSB0ZXh0IG9mIHRoZSBidXR0b24gc2l0cyBmbHVzaCB0byB0aGUgbGVmdCwgcmlnaHQsIG9yIGJvdGggc2lkZXMgb2YgaXRzIGNvbnRhaW5lclxuICAgICAqL1xuICBmbHVzaDogUHJvcFR5cGVzLm9uZU9mKFtcImxlZnRcIiwgXCJyaWdodFwiLCBcImJvdGhcIl0pLFxuXG4gIC8qKlxuICAgICAqIGBkaXNhYmxlZGAgaXMgYWxzbyBhbGxvd2VkXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogYGRpc2FibGVkYCBpcyBhbHNvIGFsbG93ZWRcbiAgICAgKi9cbiAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogRm9yY2UgZGlzYWJsZXMgdGhlIGJ1dHRvbiBhbmQgY2hhbmdlcyB0aGUgaWNvbiB0byBhIGxvYWRpbmcgc3Bpbm5lclxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIEZvcmNlIGRpc2FibGVzIHRoZSBidXR0b24gYW5kIGNoYW5nZXMgdGhlIGljb24gdG8gYSBsb2FkaW5nIHNwaW5uZXJcbiAgICAgKi9cbiAgaXNMb2FkaW5nOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBBcHBsaWVzIHRoZSBib29sZWFuIHN0YXRlIGFzIHRoZSBgYXJpYS1wcmVzc2VkYCBwcm9wZXJ0eSB0byBjcmVhdGUgYSB0b2dnbGUgYnV0dG9uLlxuICAgICAqICpPbmx5IHVzZSB3aGVuIHRoZSByZWFkYWJsZSB0ZXh0IGRvZXMgbm90IGNoYW5nZSBiZXR3ZWVuIHN0YXRlcy4qXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogQXBwbGllcyB0aGUgYm9vbGVhbiBzdGF0ZSBhcyB0aGUgYGFyaWEtcHJlc3NlZGAgcHJvcGVydHkgdG8gY3JlYXRlIGEgdG9nZ2xlIGJ1dHRvbi5cbiAgICAgKiAqT25seSB1c2Ugd2hlbiB0aGUgcmVhZGFibGUgdGV4dCBkb2VzIG5vdCBjaGFuZ2UgYmV0d2VlbiBzdGF0ZXMuKlxuICAgICAqL1xuICBpc1NlbGVjdGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgdGFyZ2V0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICByZWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHR5cGU6IFByb3BUeXBlcy5vbmVPZihbXCJidXR0b25cIiwgXCJzdWJtaXRcIl0pLFxuICBidXR0b25SZWY6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogT2JqZWN0IG9mIHByb3BzIHBhc3NlZCB0byB0aGUgPHNwYW4vPiB3cmFwcGluZyB0aGUgYnV0dG9uJ3MgY29udGVudFxuICAgICAqL1xuICBjb250ZW50UHJvcHM6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogQW55IGB0eXBlYCBhY2NlcHRlZCBieSBFdWlJY29uXG4gICAgICovXG4gIGljb25UeXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbGVydFwiLCBcImFuYWx5emVFdmVudFwiLCBcImFubm90YXRpb25cIiwgXCJhcG1BcHBcIiwgXCJhcG1UcmFjZVwiLCBcImFwcFNlYXJjaEFwcFwiLCBcImFwcHNcIiwgXCJhcnJvd0Rvd25cIiwgXCJhcnJvd0xlZnRcIiwgXCJhcnJvd1JpZ2h0XCIsIFwiYXJyb3dVcFwiLCBcImFycm93U3RhcnRcIiwgXCJhcnJvd0VuZFwiLCBcImFzdGVyaXNrXCIsIFwiYXVkaXRiZWF0QXBwXCIsIFwiYmVha2VyXCIsIFwiYmVsbFwiLCBcImJlbGxTbGFzaFwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGVja1wiLCBcImNoZWNrSW5DaXJjbGVGaWxsZWRcIiwgXCJjaGVlclwiLCBcImNsYXNzaWZpY2F0aW9uSm9iXCIsIFwiY2xvY2tcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkFDaXJjbGVGaWxsZWRcIiwgXCJjcm9zc2hhaXJzXCIsIFwiY3VycmVuY3lcIiwgXCJjdXRcIiwgXCJkYXNoYm9hcmRBcHBcIiwgXCJkYXRhVmlzdWFsaXplclwiLCBcImRhdGFiYXNlXCIsIFwiZGVza3RvcFwiLCBcImRldlRvb2xzQXBwXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZXFsXCIsIFwiZXJhc2VyXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZsYWdcIiwgXCJmbGVldEFwcFwiLCBcImZvbGRcIiwgXCJmb2xkZXJDaGVja1wiLCBcImZvbGRlckNsb3NlZFwiLCBcImZvbGRlckV4Y2xhbWF0aW9uXCIsIFwiZm9sZGVyT3BlblwiLCBcImZyYW1lTmV4dFwiLCBcImZyYW1lUHJldmlvdXNcIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFNjcmVlbkV4aXRcIiwgXCJmdW5jdGlvblwiLCBcImdlYXJcIiwgXCJnaXNBcHBcIiwgXCJnbGFzc2VzXCIsIFwiZ2xvYmVcIiwgXCJncmFiXCIsIFwiZ3JhYkhvcml6b250YWxcIiwgXCJncmFwaEFwcFwiLCBcImdyaWRcIiwgXCJncm9rQXBwXCIsIFwiaGVhcnRcIiwgXCJoZWFydGJlYXRBcHBcIiwgXCJoZWF0bWFwXCIsIFwiaGVscFwiLCBcImhvbWVcIiwgXCJpSW5DaXJjbGVcIiwgXCJpbWFnZVwiLCBcImltcG9ydEFjdGlvblwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5wdXRPdXRwdXRcIiwgXCJpbnNwZWN0XCIsIFwiaW52ZXJ0XCIsIFwiaXBcIiwgXCJrZXlib2FyZFwiLCBcImtxbEZpZWxkXCIsIFwia3FsRnVuY3Rpb25cIiwgXCJrcWxPcGVyYW5kXCIsIFwia3FsU2VsZWN0b3JcIiwgXCJrcWxWYWx1ZVwiLCBcImt1YmVybmV0ZXNOb2RlXCIsIFwia3ViZXJuZXRlc1BvZFwiLCBcImxheWVyc1wiLCBcImxlbnNBcHBcIiwgXCJsZXR0ZXJpbmdcIiwgXCJsaW5lRGFzaGVkXCIsIFwibGluZURvdHRlZFwiLCBcImxpbmVTb2xpZFwiLCBcImxpbmtcIiwgXCJsaXN0XCIsIFwibGlzdEFkZFwiLCBcImxvY2tcIiwgXCJsb2NrT3BlblwiLCBcImxvZ29BV1NcIiwgXCJsb2dvQVdTTW9ub1wiLCBcImxvZ29BZXJvc3Bpa2VcIiwgXCJsb2dvQXBhY2hlXCIsIFwibG9nb0FwcFNlYXJjaFwiLCBcImxvZ29BenVyZVwiLCBcImxvZ29BenVyZU1vbm9cIiwgXCJsb2dvQmVhdHNcIiwgXCJsb2dvQnVzaW5lc3NBbmFseXRpY3NcIiwgXCJsb2dvQ2VwaFwiLCBcImxvZ29DbG91ZFwiLCBcImxvZ29DbG91ZEVudGVycHJpc2VcIiwgXCJsb2dvQ29kZVwiLCBcImxvZ29Db2Rlc2FuZGJveFwiLCBcImxvZ29Db3VjaGJhc2VcIiwgXCJsb2dvRG9ja2VyXCIsIFwibG9nb0Ryb3B3aXphcmRcIiwgXCJsb2dvRWxhc3RpY1wiLCBcImxvZ29FbGFzdGljU3RhY2tcIiwgXCJsb2dvRWxhc3RpY3NlYXJjaFwiLCBcImxvZ29FbnRlcnByaXNlU2VhcmNoXCIsIFwibG9nb0V0Y2RcIiwgXCJsb2dvR0NQXCIsIFwibG9nb0dDUE1vbm9cIiwgXCJsb2dvR2l0aHViXCIsIFwibG9nb0dtYWlsXCIsIFwibG9nb0dvbGFuZ1wiLCBcImxvZ29Hb29nbGVHXCIsIFwibG9nb0hBcHJveHlcIiwgXCJsb2dvSUJNXCIsIFwibG9nb0lCTU1vbm9cIiwgXCJsb2dvS2Fma2FcIiwgXCJsb2dvS2liYW5hXCIsIFwibG9nb0t1YmVybmV0ZXNcIiwgXCJsb2dvTG9nZ2luZ1wiLCBcImxvZ29Mb2dzdGFzaFwiLCBcImxvZ29NYXBzXCIsIFwibG9nb01lbWNhY2hlZFwiLCBcImxvZ29NZXRyaWNzXCIsIFwibG9nb01vbmdvZGJcIiwgXCJsb2dvTXlTUUxcIiwgXCJsb2dvTmdpbnhcIiwgXCJsb2dvT2JzZXJ2YWJpbGl0eVwiLCBcImxvZ29Pc3F1ZXJ5XCIsIFwibG9nb1BocFwiLCBcImxvZ29Qb3N0Z3Jlc1wiLCBcImxvZ29Qcm9tZXRoZXVzXCIsIFwibG9nb1JhYmJpdG1xXCIsIFwibG9nb1JlZGlzXCIsIFwibG9nb1NlY3VyaXR5XCIsIFwibG9nb1NpdGVTZWFyY2hcIiwgXCJsb2dvU2tldGNoXCIsIFwibG9nb1NsYWNrXCIsIFwibG9nb1VwdGltZVwiLCBcImxvZ29XZWJob29rXCIsIFwibG9nb1dpbmRvd3NcIiwgXCJsb2dvV29ya3BsYWNlU2VhcmNoXCIsIFwibG9nc0FwcFwiLCBcImxvZ3N0YXNoRmlsdGVyXCIsIFwibG9nc3Rhc2hJZlwiLCBcImxvZ3N0YXNoSW5wdXRcIiwgXCJsb2dzdGFzaE91dHB1dFwiLCBcImxvZ3N0YXNoUXVldWVcIiwgXCJtYWNoaW5lTGVhcm5pbmdBcHBcIiwgXCJtYWduZXRcIiwgXCJtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uXCIsIFwibWFnbmlmeVdpdGhNaW51c1wiLCBcIm1hZ25pZnlXaXRoUGx1c1wiLCBcIm1hbmFnZW1lbnRBcHBcIiwgXCJtYXBNYXJrZXJcIiwgXCJtZW1vcnlcIiwgXCJtZW51XCIsIFwibWVudURvd25cIiwgXCJtZW51TGVmdFwiLCBcIm1lbnVSaWdodFwiLCBcIm1lbnVVcFwiLCBcIm1lcmdlXCIsIFwibWV0cmljYmVhdEFwcFwiLCBcIm1ldHJpY3NBcHBcIiwgXCJtaW5pbWl6ZVwiLCBcIm1pbnVzXCIsIFwibWludXNJbkNpcmNsZVwiLCBcIm1pbnVzSW5DaXJjbGVGaWxsZWRcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5vZGVcIiwgXCJub3RlYm9va0FwcFwiLCBcIm51bWJlclwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIiwgXCJvdXRsaWVyRGV0ZWN0aW9uSm9iXCIsIFwicGFja2FnZVwiLCBcInBhY2tldGJlYXRBcHBcIiwgXCJwYWdlU2VsZWN0XCIsIFwicGFnZXNTZWxlY3RcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVsaW5lQXBwXCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNub3dmbGFrZVwiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc0FwcFwiLCBcInNxbEFwcFwiLCBcInN0YXJFbXB0eVwiLCBcInN0YXJFbXB0eVNwYWNlXCIsIFwic3RhckZpbGxlZFwiLCBcInN0YXJGaWxsZWRTcGFjZVwiLCBcInN0YXJNaW51c0VtcHR5XCIsIFwic3Rhck1pbnVzRmlsbGVkXCIsIFwic3RhclBsdXNFbXB0eVwiLCBcInN0YXJQbHVzRmlsbGVkXCIsIFwic3RhdHNcIiwgXCJzdG9wXCIsIFwic3RvcEZpbGxlZFwiLCBcInN0b3BTbGFzaFwiLCBcInN0b3JhZ2VcIiwgXCJzdHJpbmdcIiwgXCJzdWJtb2R1bGVcIiwgXCJzdW5cIiwgXCJzd2F0Y2hJbnB1dFwiLCBcInN5bWxpbmtcIiwgXCJ0YWJsZURlbnNpdHlDb21wYWN0XCIsIFwidGFibGVEZW5zaXR5RXhwYW5kZWRcIiwgXCJ0YWJsZURlbnNpdHlOb3JtYWxcIiwgXCJ0YWJsZU9mQ29udGVudHNcIiwgXCJ0YWdcIiwgXCJ0ZWFyXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJ0aW1lbGluZVwiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFzaFwiLCBcInVuZm9sZFwiLCBcInVubGlua1wiLCBcInVwZ3JhZGVBc3Npc3RhbnRBcHBcIiwgXCJ1cHRpbWVBcHBcIiwgXCJ1c2VyXCIsIFwidXNlckF2YXRhclwiLCBcInVzZXJzXCIsIFwidXNlcnNSb2xlc0FwcFwiLCBcInZlY3RvclwiLCBcInZpZGVvUGxheWVyXCIsIFwidmlzQXJlYVwiLCBcInZpc0FyZWFTdGFja2VkXCIsIFwidmlzQmFySG9yaXpvbnRhbFwiLCBcInZpc0Jhckhvcml6b250YWxTdGFja2VkXCIsIFwidmlzQmFyVmVydGljYWxcIiwgXCJ2aXNCYXJWZXJ0aWNhbFN0YWNrZWRcIiwgXCJ2aXNHYXVnZVwiLCBcInZpc0dvYWxcIiwgXCJ2aXNMaW5lXCIsIFwidmlzTWFwQ29vcmRpbmF0ZVwiLCBcInZpc01hcFJlZ2lvblwiLCBcInZpc01ldHJpY1wiLCBcInZpc1BpZVwiLCBcInZpc1RhYmxlXCIsIFwidmlzVGFnQ2xvdWRcIiwgXCJ2aXNUZXh0XCIsIFwidmlzVGltZWxpb25cIiwgXCJ2aXNWZWdhXCIsIFwidmlzVmlzdWFsQnVpbGRlclwiLCBcInZpc3VhbGl6ZUFwcFwiLCBcIndhdGNoZXNBcHBcIiwgXCJ3b3JkV3JhcFwiLCBcIndvcmRXcmFwRGlzYWJsZWRcIiwgXCJ3b3JrcGxhY2VTZWFyY2hBcHBcIiwgXCJ3cmVuY2hcIiwgXCJ0b2tlbkFsaWFzXCIsIFwidG9rZW5Bbm5vdGF0aW9uXCIsIFwidG9rZW5BcnJheVwiLCBcInRva2VuQmluYXJ5XCIsIFwidG9rZW5Cb29sZWFuXCIsIFwidG9rZW5DbGFzc1wiLCBcInRva2VuQ29tcGxldGlvblN1Z2dlc3RlclwiLCBcInRva2VuQ29uc3RhbnRcIiwgXCJ0b2tlbkRhdGVcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2hhcGVcIiwgXCJ0b2tlblN0cmluZ1wiLCBcInRva2VuU3RydWN0XCIsIFwidG9rZW5TeW1ib2xcIiwgXCJ0b2tlblRhZ1wiLCBcInRva2VuVGV4dFwiLCBcInRva2VuVG9rZW5Db3VudFwiLCBcInRva2VuVmFyaWFibGVcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWRdKSxcblxuICAvKipcbiAgICAgKiBDYW4gb25seSBiZSBvbmUgc2lkZSBgbGVmdGAgb3IgYHJpZ2h0YFxuICAgICAqL1xuICBpY29uU2lkZTogUHJvcFR5cGVzLm9uZU9mKFtcImxlZnRcIiwgXCJyaWdodFwiXSksXG5cbiAgLyoqXG4gICAgICogT2JqZWN0IG9mIHByb3BzIHBhc3NlZCB0byB0aGUgPHNwYW4vPiB3cmFwcGluZyB0aGUgY29udGVudCdzIHRleHQgKG9ubHkgaWYgdGhlIGNoaWxkcmVuIGlzIGEgYHN0cmluZ2ApXG4gICAgICogSXQgZG9lc24ndCBhcHBseSB0byB0aGUgaWNvbi5cbiAgICAgKi9cbiAgdGV4dFByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgcmVmOiBQcm9wVHlwZXMuYW55LFxuICAgIFwiZGF0YS10ZXh0XCI6IFByb3BUeXBlcy5zdHJpbmdcbiAgfSksXG4gIGljb25TaXplOiBQcm9wVHlwZXMub25lT2YoW1wic1wiLCBcIm1cIl0pLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGlzQWN0aXZlOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBGb3IgZWxsaXBzaXMgb3Igb3RoZXIgbm9uLWNsaWNrYWJsZSBidXR0b25zLlxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIEZvciBlbGxpcHNpcyBvciBvdGhlciBub24tY2xpY2thYmxlIGJ1dHRvbnMuXG4gICAgICovXG4gIGlzUGxhY2Vob2xkZXI6IFByb3BUeXBlcy5ib29sLFxuICBwYWdlSW5kZXg6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgdG90YWxQYWdlczogUHJvcFR5cGVzLm51bWJlclxufTsiLCAiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IEV1aUJ1dHRvbkljb24gfSBmcm9tICcuLi9idXR0b24vYnV0dG9uX2ljb24nO1xuaW1wb3J0IHsga2V5c09mIH0gZnJvbSAnLi4vY29tbW9uJztcbmltcG9ydCB7IHVzZUV1aUkxOG4gfSBmcm9tICcuLi9pMThuJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgdHlwZVRvSWNvblR5cGVNYXAgPSB7XG4gIGZpcnN0OiAnYXJyb3dTdGFydCcsXG4gIHByZXZpb3VzOiAnYXJyb3dMZWZ0JyxcbiAgbmV4dDogJ2Fycm93UmlnaHQnLFxuICBsYXN0OiAnYXJyb3dFbmQnXG59O1xuZXhwb3J0IHZhciBUWVBFUyA9IGtleXNPZih0eXBlVG9JY29uVHlwZU1hcCk7XG5leHBvcnQgdmFyIEV1aVBhZ2luYXRpb25CdXR0b25BcnJvdyA9IGZ1bmN0aW9uIEV1aVBhZ2luYXRpb25CdXR0b25BcnJvdyhfcmVmKSB7XG4gIHZhciBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIHR5cGUgPSBfcmVmLnR5cGUsXG4gICAgICBkaXNhYmxlZCA9IF9yZWYuZGlzYWJsZWQsXG4gICAgICBhcmlhQ29udHJvbHMgPSBfcmVmLmFyaWFDb250cm9scyxcbiAgICAgIG9uQ2xpY2sgPSBfcmVmLm9uQ2xpY2s7XG4gIHZhciBsYWJlbHMgPSB7XG4gICAgZmlyc3Q6IHVzZUV1aUkxOG4oJ2V1aVBhZ2luYXRpb25CdXR0b25BcnJvdy5maXJzdFBhZ2UnLCAnRmlyc3QgcGFnZScpLFxuICAgIHByZXZpb3VzOiB1c2VFdWlJMThuKCdldWlQYWdpbmF0aW9uQnV0dG9uQXJyb3cucHJldmlvdXNQYWdlJywgJ1ByZXZpb3VzIHBhZ2UnKSxcbiAgICBuZXh0OiB1c2VFdWlJMThuKCdldWlQYWdpbmF0aW9uQnV0dG9uQXJyb3cubmV4dFBhZ2UnLCAnTmV4dCBwYWdlJyksXG4gICAgbGFzdDogdXNlRXVpSTE4bignZXVpUGFnaW5hdGlvbkJ1dHRvbkFycm93Lmxhc3RQYWdlJywgJ0xhc3QgcGFnZScpXG4gIH07XG4gIHZhciBidXR0b25Qcm9wcyA9IHt9O1xuXG4gIGlmIChhcmlhQ29udHJvbHMgJiYgIWRpc2FibGVkKSB7XG4gICAgYnV0dG9uUHJvcHMuaHJlZiA9IFwiI1wiLmNvbmNhdChhcmlhQ29udHJvbHMpO1xuICAgIGJ1dHRvblByb3BzWydhcmlhLWNvbnRyb2xzJ10gPSBhcmlhQ29udHJvbHM7XG4gIH1cblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlCdXR0b25JY29uLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWVzKCdldWlQYWdpbmF0aW9uQXJyb3dCdXR0b24nLCBjbGFzc05hbWUpLFxuICAgIGNvbG9yOiBcInRleHRcIixcbiAgICBcImFyaWEtbGFiZWxcIjogbGFiZWxzW3R5cGVdLFxuICAgIHRpdGxlOiBkaXNhYmxlZCA/IHVuZGVmaW5lZCA6IGxhYmVsc1t0eXBlXSxcbiAgICBpc0Rpc2FibGVkOiBkaXNhYmxlZCxcbiAgICBvbkNsaWNrOiBvbkNsaWNrLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogXCJwYWdpbmF0aW9uLWJ1dHRvbi1cIi5jb25jYXQodHlwZSksXG4gICAgaWNvblR5cGU6IHR5cGVUb0ljb25UeXBlTWFwW3R5cGVdXG4gIH0sIGJ1dHRvblByb3BzKSk7XG59O1xuRXVpUGFnaW5hdGlvbkJ1dHRvbkFycm93LnByb3BUeXBlcyA9IHtcbiAgdHlwZTogUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLFxuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGFyaWFDb250cm9sczogUHJvcFR5cGVzLnN0cmluZ1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImlzU2VsZWN0ZWRcIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImRpc2FibGVkXCIsIFwiaHJlZlwiLCBcInRhcmdldFwiLCBcInJlbFwiLCBcInByZXBlbmRcIiwgXCJhcHBlbmRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBnZXRTZWN1cmVSZWxGb3JUYXJnZXQgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyB2YWxpZGF0ZUhyZWYgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zZWN1cml0eS9ocmVmX3ZhbGlkYXRvcic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlUYWIgPSBmdW5jdGlvbiBFdWlUYWIoX3JlZikge1xuICB2YXIgaXNTZWxlY3RlZCA9IF9yZWYuaXNTZWxlY3RlZCxcbiAgICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgX2Rpc2FibGVkID0gX3JlZi5kaXNhYmxlZCxcbiAgICAgIGhyZWYgPSBfcmVmLmhyZWYsXG4gICAgICB0YXJnZXQgPSBfcmVmLnRhcmdldCxcbiAgICAgIHJlbCA9IF9yZWYucmVsLFxuICAgICAgcHJlcGVuZCA9IF9yZWYucHJlcGVuZCxcbiAgICAgIGFwcGVuZCA9IF9yZWYuYXBwZW5kLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBpc0hyZWZWYWxpZCA9ICFocmVmIHx8IHZhbGlkYXRlSHJlZihocmVmKTtcbiAgdmFyIGRpc2FibGVkID0gX2Rpc2FibGVkIHx8ICFpc0hyZWZWYWxpZDtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUYWInLCBjbGFzc05hbWUsIHtcbiAgICAnZXVpVGFiLWlzU2VsZWN0ZWQnOiBpc1NlbGVjdGVkLFxuICAgICdldWlUYWItaXNEaXNhYmxlZCc6IGRpc2FibGVkXG4gIH0pO1xuXG4gIHZhciBwcmVwZW5kTm9kZSA9IHByZXBlbmQgJiYgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlUYWJfX3ByZXBlbmRcIlxuICB9LCBwcmVwZW5kKTtcblxuICB2YXIgYXBwZW5kTm9kZSA9IGFwcGVuZCAmJiBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aVRhYl9fYXBwZW5kXCJcbiAgfSwgYXBwZW5kKTsgLy8gIDxhPiBlbGVtZW50cyBkb24ndCByZXNwZWN0IHRoZSBgZGlzYWJsZWRgIGF0dHJpYnV0ZS4gU28gaWYgd2UncmUgZGlzYWJsZWQsIHdlJ2xsIGp1c3QgcHJldGVuZFxuICAvLyAgdGhpcyBpcyBhIGJ1dHRvbiBhbmQgcGlnZ3liYWNrIG9mZiBpdHMgZGlzYWJsZWQgc3R5bGVzLlxuXG5cbiAgaWYgKGhyZWYgJiYgIWRpc2FibGVkKSB7XG4gICAgdmFyIHNlY3VyZVJlbCA9IGdldFNlY3VyZVJlbEZvclRhcmdldCh7XG4gICAgICBocmVmOiBocmVmLFxuICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICByZWw6IHJlbFxuICAgIH0pO1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwiYVwiLCBfZXh0ZW5kcyh7XG4gICAgICByb2xlOiBcInRhYlwiLFxuICAgICAgXCJhcmlhLXNlbGVjdGVkXCI6ICEhaXNTZWxlY3RlZCxcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgIGhyZWY6IGhyZWYsXG4gICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgIHJlbDogc2VjdXJlUmVsXG4gICAgfSwgcmVzdCksIHByZXBlbmROb2RlLCBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgICBjbGFzc05hbWU6IFwiZXVpVGFiX19jb250ZW50XCJcbiAgICB9LCBjaGlsZHJlbiksIGFwcGVuZE5vZGUpO1xuICB9XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJidXR0b25cIiwgX2V4dGVuZHMoe1xuICAgIHJvbGU6IFwidGFiXCIsXG4gICAgXCJhcmlhLXNlbGVjdGVkXCI6ICEhaXNTZWxlY3RlZCxcbiAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBkaXNhYmxlZDogZGlzYWJsZWRcbiAgfSwgcmVzdCksIHByZXBlbmROb2RlLCBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aVRhYl9fY29udGVudFwiXG4gIH0sIGNoaWxkcmVuKSwgYXBwZW5kTm9kZSk7XG59O1xuRXVpVGFiLnByb3BUeXBlcyA9IHtcbiAgaXNTZWxlY3RlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBQbGFjZXMgY29udGVudCBiZWZvcmUgdGhlIHRhYiBjb250ZW50L2NoaWxkcmVuLlxuICAgICAqIFdpbGwgYmUgZXhjbHVkZWQgZnJvbSBpbnRlcmFjdGl2ZSBlZmZlY3RzLlxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIFBsYWNlcyBjb250ZW50IGJlZm9yZSB0aGUgdGFiIGNvbnRlbnQvY2hpbGRyZW4uXG4gICAgICogV2lsbCBiZSBleGNsdWRlZCBmcm9tIGludGVyYWN0aXZlIGVmZmVjdHMuXG4gICAgICovXG4gIHByZXBlbmQ6IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgICAqIFBsYWNlcyBjb250ZW50IGFmdGVyIHRoZSB0YWIgY29udGVudC9jaGlsZHJlbi5cbiAgICAgKiBXaWxsIGJlIGV4Y2x1ZGVkIGZyb20gaW50ZXJhY3RpdmUgZWZmZWN0cy5cbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBQbGFjZXMgY29udGVudCBhZnRlciB0aGUgdGFiIGNvbnRlbnQvY2hpbGRyZW4uXG4gICAgICogV2lsbCBiZSBleGNsdWRlZCBmcm9tIGludGVyYWN0aXZlIGVmZmVjdHMuXG4gICAgICovXG4gIGFwcGVuZDogUHJvcFR5cGVzLm5vZGUsXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgaHJlZjogUHJvcFR5cGVzLnN0cmluZyxcbiAgb25DbGljazogUHJvcFR5cGVzLmZ1bmNcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImJvdHRvbUJvcmRlclwiLCBcImV4cGFuZFwiLCBcInNpemVcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsga2V5c09mIH0gZnJvbSAnLi4vY29tbW9uJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgc2l6ZVRvQ2xhc3NOYW1lTWFwID0ge1xuICBzOiAnZXVpVGFicy0tc21hbGwnLFxuICBtOiBudWxsLFxuICBsOiAnZXVpVGFicy0tbGFyZ2UnLFxuICB4bDogJ2V1aVRhYnMtLXhsYXJnZSdcbn07XG5leHBvcnQgdmFyIFNJWkVTID0ga2V5c09mKHNpemVUb0NsYXNzTmFtZU1hcCk7XG5leHBvcnQgdmFyIEV1aVRhYnMgPSAvKiNfX1BVUkVfXyovZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIF9yZWYkYm90dG9tQm9yZGVyID0gX3JlZi5ib3R0b21Cb3JkZXIsXG4gICAgICBib3R0b21Cb3JkZXIgPSBfcmVmJGJvdHRvbUJvcmRlciA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYkYm90dG9tQm9yZGVyLFxuICAgICAgX3JlZiRleHBhbmQgPSBfcmVmLmV4cGFuZCxcbiAgICAgIGV4cGFuZCA9IF9yZWYkZXhwYW5kID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkZXhwYW5kLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gJ20nIDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpVGFicycsIHNpemVUb0NsYXNzTmFtZU1hcFtzaXplXSwge1xuICAgICdldWlUYWJzLS1leHBhbmQnOiBleHBhbmQsXG4gICAgJ2V1aVRhYnMtLWJvdHRvbUJvcmRlcic6IGJvdHRvbUJvcmRlclxuICB9LCBjbGFzc05hbWUpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gIH0sIGNoaWxkcmVuICYmIHtcbiAgICByb2xlOiAndGFibGlzdCdcbiAgfSwgcmVzdCksIGNoaWxkcmVuKTtcbn0pO1xuRXVpVGFicy5kaXNwbGF5TmFtZSA9ICdFdWlUYWJzJzsiLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG52YXIgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwiZXhwYW5kXCIsIFwiaW5pdGlhbFNlbGVjdGVkVGFiXCIsIFwib25UYWJDbGlja1wiLCBcInNlbGVjdGVkVGFiXCIsIFwic2l6ZVwiLCBcInRhYnNcIiwgXCJhdXRvRm9jdXNcIl0sXG4gICAgX2V4Y2x1ZGVkMiA9IFtcImlkXCIsIFwibmFtZVwiLCBcImNvbnRlbnRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBjcmVhdGVSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBodG1sSWRHZW5lcmF0b3IgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFdWlUYWJzIH0gZnJvbSAnLi4vdGFicyc7XG5pbXBvcnQgeyBFdWlUYWIgfSBmcm9tICcuLi90YWInO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxuLyoqXG4gKiBNYXJrZWQgYXMgY29uc3Qgc28gdHlwZSBpcyBgWydpbml0aWFsJywgJ3NlbGVjdGVkJ11gIGluc3RlYWQgb2YgYHN0cmluZ1tdYFxuICovXG5leHBvcnQgdmFyIEFVVE9GT0NVUyA9IFsnaW5pdGlhbCcsICdzZWxlY3RlZCddO1xuZXhwb3J0IHZhciBFdWlUYWJiZWRDb250ZW50ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhFdWlUYWJiZWRDb250ZW50LCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aVRhYmJlZENvbnRlbnQpO1xuXG4gIGZ1bmN0aW9uIEV1aVRhYmJlZENvbnRlbnQocHJvcHMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpVGFiYmVkQ29udGVudCk7XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHByb3BzKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJyb290SWRcIiwgaHRtbElkR2VuZXJhdG9yKCkoKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwidGFic1JlZlwiLCAvKiNfX1BVUkVfXyovY3JlYXRlUmVmKCkpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImZvY3VzVGFiXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciB0YXJnZXRUYWIgPSBfdGhpcy50YWJzUmVmLmN1cnJlbnQucXVlcnlTZWxlY3RvcihcIiNcIi5jb25jYXQoX3RoaXMuc3RhdGUuc2VsZWN0ZWRUYWJJZCkpO1xuXG4gICAgICB0YXJnZXRUYWIuZm9jdXMoKTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJpbml0aWFsaXplRm9jdXNcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKCFfdGhpcy5zdGF0ZS5pbkZvY3VzICYmIF90aGlzLnByb3BzLmF1dG9Gb2N1cyA9PT0gJ3NlbGVjdGVkJykge1xuICAgICAgICAvLyBNdXN0IHdhaXQgZm9yIHNldFN0YXRlIHRvIGZpbmlzaCBiZWZvcmUgY2FsbGluZyBgLmZvY3VzKClgXG4gICAgICAgIC8vIGFzIHRoZSBmb2N1cyBjYWxsIHRyaWdnZXJzIGEgYmx1ciBvbiB0aGUgZmlyc3QgdGFiXG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBpbkZvY3VzOiB0cnVlXG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpcy5mb2N1c1RhYigpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJyZW1vdmVGb2N1c1wiLCBmdW5jdGlvbiAoYmx1ckV2ZW50KSB7XG4gICAgICAvLyBvbmx5IHNldCBpbkZvY3VzIHRvIGZhbHNlIGlmIHRoZSB3cmFwcGluZyBkaXYgZG9lc24ndCBjb250YWluIHRoZSBub3ctZm9jdXNpbmcgZWxlbWVudFxuICAgICAgdmFyIGN1cnJlbnRUYXJnZXQgPSBibHVyRXZlbnQuY3VycmVudFRhcmdldDtcbiAgICAgIHZhciByZWxhdGVkVGFyZ2V0ID0gYmx1ckV2ZW50LnJlbGF0ZWRUYXJnZXQ7XG5cbiAgICAgIGlmIChjdXJyZW50VGFyZ2V0LmNvbnRhaW5zKHJlbGF0ZWRUYXJnZXQpID09PSBmYWxzZSkge1xuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgaW5Gb2N1czogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25UYWJDbGlja1wiLCBmdW5jdGlvbiAoc2VsZWN0ZWRUYWIpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIG9uVGFiQ2xpY2sgPSBfdGhpcyRwcm9wcy5vblRhYkNsaWNrLFxuICAgICAgICAgIGV4dGVybmFsU2VsZWN0ZWRUYWIgPSBfdGhpcyRwcm9wcy5zZWxlY3RlZFRhYjtcblxuICAgICAgaWYgKG9uVGFiQ2xpY2spIHtcbiAgICAgICAgb25UYWJDbGljayhzZWxlY3RlZFRhYik7XG4gICAgICB9IC8vIE9ubHkgdHJhY2sgc2VsZWN0aW9uIHN0YXRlIGlmIGl0J3Mgbm90IGNvbnRyb2xsZWQgZXh0ZXJuYWxseS5cblxuXG4gICAgICBpZiAoIWV4dGVybmFsU2VsZWN0ZWRUYWIpIHtcbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIHNlbGVjdGVkVGFiSWQ6IHNlbGVjdGVkVGFiLmlkXG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpcy5mb2N1c1RhYigpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHZhciBpbml0aWFsU2VsZWN0ZWRUYWIgPSBwcm9wcy5pbml0aWFsU2VsZWN0ZWRUYWIsXG4gICAgICAgIF9zZWxlY3RlZFRhYiA9IHByb3BzLnNlbGVjdGVkVGFiLFxuICAgICAgICB0YWJzID0gcHJvcHMudGFiczsgLy8gT25seSB0cmFjayBzZWxlY3Rpb24gc3RhdGUgaWYgaXQncyBub3QgY29udHJvbGxlZCBleHRlcm5hbGx5LlxuXG4gICAgdmFyIHNlbGVjdGVkVGFiSWQ7XG5cbiAgICBpZiAoIV9zZWxlY3RlZFRhYikge1xuICAgICAgc2VsZWN0ZWRUYWJJZCA9IGluaXRpYWxTZWxlY3RlZFRhYiAmJiBpbml0aWFsU2VsZWN0ZWRUYWIuaWQgfHwgdGFic1swXS5pZDtcbiAgICB9XG5cbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIHNlbGVjdGVkVGFiSWQ6IHNlbGVjdGVkVGFiSWQsXG4gICAgICBpbkZvY3VzOiBmYWxzZVxuICAgIH07XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEV1aVRhYmJlZENvbnRlbnQsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgLy8gSUUxMSBkb2Vzbid0IHN1cHBvcnQgdGhlIGByZWxhdGVkVGFyZ2V0YCBldmVudCBwcm9wZXJ0eSBmb3IgYmx1ciBldmVudHNcbiAgICAgIC8vIGJ1dCBkb2VzIGFkZCBpdCBmb3IgZm9jdXNvdXQuIFJlYWN0IGRvZXNuJ3Qgc3VwcG9ydCBgb25Gb2N1c091dGAgc28gaGVyZSB3ZSBhcmUuXG4gICAgICBpZiAodGhpcy50YWJzUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgLy8gQ3VycmVudCBzaG9ydC10ZXJtIHNvbHV0aW9uIGZvciBldmVudCBsaXN0ZW5lciAoc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9lbGFzdGljL2V1aS9wdWxsLzI3MTcpXG4gICAgICAgIHRoaXMudGFic1JlZi5jdXJyZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3Vzb3V0JywgdGhpcy5yZW1vdmVGb2N1cyk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgaWYgKHRoaXMudGFic1JlZi5jdXJyZW50KSB7XG4gICAgICAgIC8vIEN1cnJlbnQgc2hvcnQtdGVybSBzb2x1dGlvbiBmb3IgZXZlbnQgbGlzdGVuZXIgKHNlZSBodHRwczovL2dpdGh1Yi5jb20vZWxhc3RpYy9ldWkvcHVsbC8yNzE3KVxuICAgICAgICB0aGlzLnRhYnNSZWYuY3VycmVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdmb2N1c291dCcsIHRoaXMucmVtb3ZlRm9jdXMpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzMi5jbGFzc05hbWUsXG4gICAgICAgICAgZXhwYW5kID0gX3RoaXMkcHJvcHMyLmV4cGFuZCxcbiAgICAgICAgICBpbml0aWFsU2VsZWN0ZWRUYWIgPSBfdGhpcyRwcm9wczIuaW5pdGlhbFNlbGVjdGVkVGFiLFxuICAgICAgICAgIG9uVGFiQ2xpY2sgPSBfdGhpcyRwcm9wczIub25UYWJDbGljayxcbiAgICAgICAgICBleHRlcm5hbFNlbGVjdGVkVGFiID0gX3RoaXMkcHJvcHMyLnNlbGVjdGVkVGFiLFxuICAgICAgICAgIHNpemUgPSBfdGhpcyRwcm9wczIuc2l6ZSxcbiAgICAgICAgICB0YWJzID0gX3RoaXMkcHJvcHMyLnRhYnMsXG4gICAgICAgICAgYXV0b0ZvY3VzID0gX3RoaXMkcHJvcHMyLmF1dG9Gb2N1cyxcbiAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzMiwgX2V4Y2x1ZGVkKTsgLy8gQWxsb3cgdGhlIGNvbnN1bWVyIHRvIGNvbnRyb2wgdGFiIHNlbGVjdGlvbi5cblxuXG4gICAgICB2YXIgc2VsZWN0ZWRUYWIgPSBleHRlcm5hbFNlbGVjdGVkVGFiIHx8IHRhYnMuZmluZChmdW5jdGlvbiAodGFiKSB7XG4gICAgICAgIHJldHVybiB0YWIuaWQgPT09IF90aGlzMi5zdGF0ZS5zZWxlY3RlZFRhYklkO1xuICAgICAgfSk7XG4gICAgICB2YXIgX3JlZiA9IHNlbGVjdGVkVGFiLFxuICAgICAgICAgIHNlbGVjdGVkVGFiQ29udGVudCA9IF9yZWYuY29udGVudCxcbiAgICAgICAgICBzZWxlY3RlZFRhYklkID0gX3JlZi5pZDtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWVcbiAgICAgIH0sIHJlc3QpLCBfX19FbW90aW9uSlNYKEV1aVRhYnMsIHtcbiAgICAgICAgcmVmOiB0aGlzLnRhYnNSZWYsXG4gICAgICAgIGV4cGFuZDogZXhwYW5kLFxuICAgICAgICBzaXplOiBzaXplLFxuICAgICAgICBvbkZvY3VzOiB0aGlzLmluaXRpYWxpemVGb2N1c1xuICAgICAgfSwgdGFicy5tYXAoZnVuY3Rpb24gKHRhYikge1xuICAgICAgICB2YXIgaWQgPSB0YWIuaWQsXG4gICAgICAgICAgICBuYW1lID0gdGFiLm5hbWUsXG4gICAgICAgICAgICBjb250ZW50ID0gdGFiLmNvbnRlbnQsXG4gICAgICAgICAgICB0YWJQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyh0YWIsIF9leGNsdWRlZDIpO1xuXG4gICAgICAgIHZhciBwcm9wcyA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7XG4gICAgICAgICAga2V5OiBpZCxcbiAgICAgICAgICBpZDogaWRcbiAgICAgICAgfSwgdGFiUHJvcHMpLCB7fSwge1xuICAgICAgICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soKSB7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXMyLm9uVGFiQ2xpY2sodGFiKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGlzU2VsZWN0ZWQ6IHRhYiA9PT0gc2VsZWN0ZWRUYWIsXG4gICAgICAgICAgJ2FyaWEtY29udHJvbHMnOiBcIlwiLmNvbmNhdChfdGhpczIucm9vdElkKVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlUYWIsIHByb3BzLCBuYW1lKTtcbiAgICAgIH0pKSwgX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICAgIHJvbGU6IFwidGFicGFuZWxcIixcbiAgICAgICAgaWQ6IFwiXCIuY29uY2F0KHRoaXMucm9vdElkKSxcbiAgICAgICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogc2VsZWN0ZWRUYWJJZFxuICAgICAgfSwgc2VsZWN0ZWRUYWJDb250ZW50KSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEV1aVRhYmJlZENvbnRlbnQ7XG59KENvbXBvbmVudCk7XG5cbl9kZWZpbmVQcm9wZXJ0eShFdWlUYWJiZWRDb250ZW50LCBcImRlZmF1bHRQcm9wc1wiLCB7XG4gIGF1dG9Gb2N1czogJ2luaXRpYWwnXG59KTtcblxuRXVpVGFiYmVkQ29udGVudC5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgICAqIFdoZW4gdGFiYmluZyBpbnRvIHRoZSB0YWJzLCBzZXQgdGhlIGZvY3VzIG9uIGBpbml0aWFsYCBmb3IgdGhlIGZpcnN0IHRhYixcbiAgICAgICAqIG9yIGBzZWxlY3RlZGAgZm9yIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgdGFiLiBCZXN0IHVzZSBjYXNlIGlzIGZvciBpbnNpZGUgb2ZcbiAgICAgICAqIG92ZXJsYXkgY29udGVudCBsaWtlIHBvcG92ZXJzIG9yIGZseW91dHMuXG4gICAgICAgKi9cbiAgYXV0b0ZvY3VzOiBQcm9wVHlwZXMub25lT2YoW1wiaW5pdGlhbFwiLCBcInNlbGVjdGVkXCJdKSxcblxuICAvKipcbiAgICAgICAqIEV2ZW5seSBzdHJldGNoZXMgZWFjaCB0YWIgdG8gZmlsbCB0aGUgaG9yaXpvbnRhbCBzcGFjZVxuICAgICAgICovXG4gIGV4cGFuZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICAgKiBVc2UgdGhpcyBwcm9wIHRvIHNldCB0aGUgaW5pdGlhbGx5IHNlbGVjdGVkIHRhYiB3aGlsZSBsZXR0aW5nIHRoZSB0YWJiZWQgY29udGVudCBjb21wb25lbnRcbiAgICAgICAqIGNvbnRyb2wgc2VsZWN0aW9uIHN0YXRlIGludGVybmFsbHlcbiAgICAgICAqL1xuICBpbml0aWFsU2VsZWN0ZWRUYWI6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBuYW1lOiBQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLFxuICAgIGNvbnRlbnQ6IFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsXG4gICAgaXNTZWxlY3RlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gICAgLyoqXG4gICAgICAgKiBQbGFjZXMgY29udGVudCBiZWZvcmUgdGhlIHRhYiBjb250ZW50L2NoaWxkcmVuLlxuICAgICAgICogV2lsbCBiZSBleGNsdWRlZCBmcm9tIGludGVyYWN0aXZlIGVmZmVjdHMuXG4gICAgICAgKi9cbiAgICBwcmVwZW5kOiBQcm9wVHlwZXMubm9kZSxcblxuICAgIC8qKlxuICAgICAgICogUGxhY2VzIGNvbnRlbnQgYWZ0ZXIgdGhlIHRhYiBjb250ZW50L2NoaWxkcmVuLlxuICAgICAgICogV2lsbCBiZSBleGNsdWRlZCBmcm9tIGludGVyYWN0aXZlIGVmZmVjdHMuXG4gICAgICAgKi9cbiAgICBhcHBlbmQ6IFByb3BUeXBlcy5ub2RlLFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbiAgfSksXG4gIG9uVGFiQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgICAgICogVXNlIHRoaXMgcHJvcCBpZiB5b3Ugd2FudCB0byBjb250cm9sIHNlbGVjdGlvbiBzdGF0ZSB3aXRoaW4gdGhlIG93bmVyIGNvbXBvbmVudFxuICAgICAgICovXG4gIHNlbGVjdGVkVGFiOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGlkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgbmFtZTogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCxcbiAgICBjb250ZW50OiBQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLFxuICAgIGlzU2VsZWN0ZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBwcmVwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgICBhcHBlbmQ6IFByb3BUeXBlcy5ub2RlLFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbiAgfSksXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZihbXCJzXCIsIFwibVwiLCBcImxcIiwgXCJ4bFwiXSksXG5cbiAgLyoqXG4gICAgICAgKiBFYWNoIHRhYiBuZWVkcyBpZCBhbmQgY29udGVudCBwcm9wZXJ0aWVzLCBzbyB3ZSBjYW4gYXNzb2NpYXRlIGl0IHdpdGggaXRzIHBhbmVsIGZvciBhY2Nlc3NpYmlsaXR5LlxuICAgICAgICogVGhlIG5hbWUgcHJvcGVydHkgKGEgbm9kZSkgaXMgYWxzbyByZXF1aXJlZCB0byBkaXNwbGF5IHRvIHRoZSB1c2VyLlxuICAgICAgICovXG4gIHRhYnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBuYW1lOiBQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLFxuICAgIGNvbnRlbnQ6IFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsXG4gICAgaXNTZWxlY3RlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgIHByZXBlbmQ6IFByb3BUeXBlcy5ub2RlLFxuICAgIGFwcGVuZDogUHJvcFR5cGVzLm5vZGUsXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZ1xuICB9KS5pc1JlcXVpcmVkKS5pc1JlcXVpcmVkXG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuZXhwb3J0IHZhciBFdWlEZWxheVJlbmRlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoRXVpRGVsYXlSZW5kZXIsIF9Db21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoRXVpRGVsYXlSZW5kZXIpO1xuXG4gIGZ1bmN0aW9uIEV1aURlbGF5UmVuZGVyKHByb3BzKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aURlbGF5UmVuZGVyKTtcblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgcHJvcHMpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImRlbGF5SURcIiwgdm9pZCAwKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJ0b0JlRGVsYXllZFwiLCB0cnVlKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzdGFydERlbGF5aW5nXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQoX3RoaXMuZGVsYXlJRCk7XG4gICAgICBfdGhpcy50b0JlRGVsYXllZCA9IHRydWU7XG4gICAgICBfdGhpcy5kZWxheUlEID0gd2luZG93LnNldFRpbWVvdXQoX3RoaXMuc3RvcERlbGF5aW5nLCBfdGhpcy5wcm9wcy5kZWxheSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic3RvcERlbGF5aW5nXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQoX3RoaXMuZGVsYXlJRCk7XG4gICAgICBfdGhpcy50b0JlRGVsYXllZCA9IGZhbHNlO1xuXG4gICAgICBfdGhpcy5zaG91bGRVcGRhdGUoKTtcbiAgICB9KTtcblxuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgdG9nZ2xlOiBmYWxzZVxuICAgIH07XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEV1aURlbGF5UmVuZGVyLCBbe1xuICAgIGtleTogXCJzaG91bGRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2hvdWxkVXBkYXRlKCkge1xuICAgICAgdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAoX3JlZikge1xuICAgICAgICB2YXIgdG9nZ2xlID0gX3JlZi50b2dnbGU7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdG9nZ2xlOiAhdG9nZ2xlXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICB0aGlzLnN0YXJ0RGVsYXlpbmcoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic2hvdWxkQ29tcG9uZW50VXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNob3VsZENvbXBvbmVudFVwZGF0ZSgpIHtcbiAgICAgIGlmICh0aGlzLnRvQmVEZWxheWVkKSB7XG4gICAgICAgIHRoaXMuc3RhcnREZWxheWluZygpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50V2lsbFVubW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICB0aGlzLnN0b3BEZWxheWluZygpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnREaWRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKCkge1xuICAgICAgdGhpcy50b0JlRGVsYXllZCA9IHRydWU7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gIXRoaXMudG9CZURlbGF5ZWQgPyB0aGlzLnByb3BzLmNoaWxkcmVuIDogbnVsbDtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gRXVpRGVsYXlSZW5kZXI7XG59KENvbXBvbmVudCk7XG5cbl9kZWZpbmVQcm9wZXJ0eShFdWlEZWxheVJlbmRlciwgXCJkZWZhdWx0UHJvcHNcIiwge1xuICBkZWxheTogNTAwXG59KTtcblxuRXVpRGVsYXlSZW5kZXIucHJvcFR5cGVzID0ge1xuICBkZWxheTogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkXG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJjb2xvclwiLCBcInRleHRTaXplXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBldWlIZWFsdGhTdHlsZXMgfSBmcm9tICcuL2hlYWx0aC5zdHlsZXMnO1xuaW1wb3J0IHsgRXVpSWNvbiB9IGZyb20gJy4uL2ljb24nO1xuaW1wb3J0IHsgRXVpRmxleEdyb3VwLCBFdWlGbGV4SXRlbSB9IGZyb20gJy4uL2ZsZXgnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgVEVYVF9TSVpFUyA9IFsneHMnLCAncycsICdtJywgJ2luaGVyaXQnXTtcbmV4cG9ydCB2YXIgRXVpSGVhbHRoID0gZnVuY3Rpb24gRXVpSGVhbHRoKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgX3JlZiR0ZXh0U2l6ZSA9IF9yZWYudGV4dFNpemUsXG4gICAgICB0ZXh0U2l6ZSA9IF9yZWYkdGV4dFNpemUgPT09IHZvaWQgMCA/ICdzJyA6IF9yZWYkdGV4dFNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgdmFyIHN0eWxlcyA9IGV1aUhlYWx0aFN0eWxlcyhldWlUaGVtZSk7XG4gIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aUhlYWx0aCwgc3R5bGVzW3RleHRTaXplXV07XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpSGVhbHRoJywgY2xhc3NOYW1lKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgIGNzczogY3NzU3R5bGVzLFxuICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICB9LCByZXN0KSwgX19fRW1vdGlvbkpTWChFdWlGbGV4R3JvdXAsIHtcbiAgICBndXR0ZXJTaXplOiBcInhzXCIsXG4gICAgYWxpZ25JdGVtczogXCJjZW50ZXJcIixcbiAgICByZXNwb25zaXZlOiBmYWxzZVxuICB9LCBfX19FbW90aW9uSlNYKEV1aUZsZXhJdGVtLCB7XG4gICAgZ3JvdzogZmFsc2VcbiAgfSwgX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgdHlwZTogXCJkb3RcIixcbiAgICBjb2xvcjogY29sb3JcbiAgfSkpLCBfX19FbW90aW9uSlNYKEV1aUZsZXhJdGVtLCB7XG4gICAgZ3JvdzogZmFsc2VcbiAgfSwgY2hpbGRyZW4pKSk7XG59O1xuRXVpSGVhbHRoLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAgICogU2V0cyB0aGUgY29sb3Igb2YgdGhlIGRvdCBpY29uLlxuICAgICAgICogSXQgYWNjZXB0cyBhbnkgYEljb25Db2xvcmA6IGBkZWZhdWx0YCwgYHByaW1hcnlgLCBgc3VjY2Vzc2AsIGBhY2NlbnRgLCBgd2FybmluZ2AsIGBkYW5nZXJgLCBgdGV4dGAsXG4gICAgICAgKiBgc3ViZHVlZGAgb3IgYGdob3N0YDsgb3IgYW55IHZhbGlkIENTUyBjb2xvciB2YWx1ZSBhcyBhIGBzdHJpbmdgXG4gICAgICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkXSksXG5cbiAgLyoqXG4gICAgICAgKiBNYXRjaGVzIHRoZSB0ZXh0IHNjYWxlcyBvZiBFdWlUZXh0LlxuICAgICAgICogVGhlIGBpbmhlcml0YCBzdHlsZSB3aWxsIGdldCBpdHMgZm9udCBzaXplIGZyb20gdGhlIHBhcmVudCBlbGVtZW50XG4gICAgICAgKi9cbiAgdGV4dFNpemU6IFByb3BUeXBlcy5hbnlcbn07IiwgImZ1bmN0aW9uIF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fKCkgeyByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGV1aUZvbnRTaXplIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuXG52YXIgX3JlZiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxcWhvanJpLWluaGVyaXRcIixcbiAgc3R5bGVzOiBcImZvbnQtc2l6ZTppbmhlcml0O2xhYmVsOmluaGVyaXQ7XCJcbn0gOiB7XG4gIG5hbWU6IFwiMXFob2pyaS1pbmhlcml0XCIsXG4gIHN0eWxlczogXCJmb250LXNpemU6aW5oZXJpdDtsYWJlbDppbmhlcml0O1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5cbnZhciBfcmVmMiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCJqOHVoY2stZXVpSGVhbHRoXCIsXG4gIHN0eWxlczogXCJkaXNwbGF5OmlubGluZS1ibG9jaztsYWJlbDpldWlIZWFsdGg7XCJcbn0gOiB7XG4gIG5hbWU6IFwiajh1aGNrLWV1aUhlYWx0aFwiLFxuICBzdHlsZXM6IFwiZGlzcGxheTppbmxpbmUtYmxvY2s7bGFiZWw6ZXVpSGVhbHRoO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5cbmV4cG9ydCB2YXIgZXVpSGVhbHRoU3R5bGVzID0gZnVuY3Rpb24gZXVpSGVhbHRoU3R5bGVzKGV1aVRoZW1lKSB7XG4gIHJldHVybiB7XG4gICAgZXVpSGVhbHRoOiBfcmVmMixcbiAgICAvLyBUZXh0IHNpemVzXG4gICAgeHM6IC8qI19fUFVSRV9fKi9jc3MoZXVpRm9udFNpemUoZXVpVGhlbWUsICd4cycpLCBcIjs7bGFiZWw6eHM7XCIpLFxuICAgIHM6IC8qI19fUFVSRV9fKi9jc3MoZXVpRm9udFNpemUoZXVpVGhlbWUsICdzJyksIFwiOztsYWJlbDpzO1wiKSxcbiAgICBtOiAvKiNfX1BVUkVfXyovY3NzKGV1aUZvbnRTaXplKGV1aVRoZW1lLCAnbScpLCBcIjs7bGFiZWw6bTtcIiksXG4gICAgaW5oZXJpdDogX3JlZlxuICB9O1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBFdWlHbG9iYWxTdHlsZXMgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZy9yZXNldC9nbG9iYWxfc3R5bGVzJztcbmltcG9ydCB7IEV1aVV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcvdXRpbGl0eS91dGlsaXR5JztcbmltcG9ydCB7IEV1aVRoZW1lUHJvdmlkZXIsIEN1cnJlbnRFdWlCcmVha3BvaW50UHJvdmlkZXIgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFdWlUaGVtZUFtc3RlcmRhbSB9IGZyb20gJy4uLy4uL3RoZW1lcyc7XG5pbXBvcnQgeyBFdWlDYWNoZVByb3ZpZGVyIH0gZnJvbSAnLi9jYWNoZSc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgaXNFbW90aW9uQ2FjaGVPYmplY3QgPSBmdW5jdGlvbiBpc0Vtb3Rpb25DYWNoZU9iamVjdChvYmopIHtcbiAgcmV0dXJuIG9iai5oYXNPd25Qcm9wZXJ0eSgna2V5Jyk7XG59O1xuXG5leHBvcnQgdmFyIEV1aVByb3ZpZGVyID0gZnVuY3Rpb24gRXVpUHJvdmlkZXIoX3JlZikge1xuICB2YXIgY2FjaGUgPSBfcmVmLmNhY2hlLFxuICAgICAgX3JlZiR0aGVtZSA9IF9yZWYudGhlbWUsXG4gICAgICB0aGVtZSA9IF9yZWYkdGhlbWUgPT09IHZvaWQgMCA/IEV1aVRoZW1lQW1zdGVyZGFtIDogX3JlZiR0aGVtZSxcbiAgICAgIF9yZWYkZ2xvYmFsU3R5bGVzID0gX3JlZi5nbG9iYWxTdHlsZXMsXG4gICAgICBHbG9iYWxzID0gX3JlZiRnbG9iYWxTdHlsZXMgPT09IHZvaWQgMCA/IEV1aUdsb2JhbFN0eWxlcyA6IF9yZWYkZ2xvYmFsU3R5bGVzLFxuICAgICAgX3JlZiR1dGlsaXR5Q2xhc3NlcyA9IF9yZWYudXRpbGl0eUNsYXNzZXMsXG4gICAgICBVdGlsaXRpZXMgPSBfcmVmJHV0aWxpdHlDbGFzc2VzID09PSB2b2lkIDAgPyBFdWlVdGlsaXR5Q2xhc3NlcyA6IF9yZWYkdXRpbGl0eUNsYXNzZXMsXG4gICAgICBjb2xvck1vZGUgPSBfcmVmLmNvbG9yTW9kZSxcbiAgICAgIG1vZGlmeSA9IF9yZWYubW9kaWZ5LFxuICAgICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuO1xuICB2YXIgZGVmYXVsdENhY2hlO1xuICB2YXIgZ2xvYmFsQ2FjaGU7XG4gIHZhciB1dGlsaXR5Q2FjaGU7XG5cbiAgaWYgKGNhY2hlKSB7XG4gICAgaWYgKGlzRW1vdGlvbkNhY2hlT2JqZWN0KGNhY2hlKSkge1xuICAgICAgZGVmYXVsdENhY2hlID0gY2FjaGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlZmF1bHRDYWNoZSA9IGNhY2hlLmRlZmF1bHQ7XG4gICAgICBnbG9iYWxDYWNoZSA9IGNhY2hlLmdsb2JhbDtcbiAgICAgIHV0aWxpdHlDYWNoZSA9IGNhY2hlLnV0aWxpdHk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpQ2FjaGVQcm92aWRlciwge1xuICAgIGNhY2hlOiBkZWZhdWx0Q2FjaGVcbiAgfSwgX19fRW1vdGlvbkpTWChFdWlUaGVtZVByb3ZpZGVyLCB7XG4gICAgdGhlbWU6IHRoZW1lICE9PSBudWxsICYmIHRoZW1lICE9PSB2b2lkIDAgPyB0aGVtZSA6IHVuZGVmaW5lZCxcbiAgICBjb2xvck1vZGU6IGNvbG9yTW9kZSxcbiAgICBtb2RpZnk6IG1vZGlmeVxuICB9LCB0aGVtZSAmJiBfX19FbW90aW9uSlNYKFJlYWN0LkZyYWdtZW50LCBudWxsLCBfX19FbW90aW9uSlNYKEV1aUNhY2hlUHJvdmlkZXIsIHtcbiAgICBjYWNoZTogZ2xvYmFsQ2FjaGUsXG4gICAgY2hpbGRyZW46IEdsb2JhbHMgJiYgX19fRW1vdGlvbkpTWChHbG9iYWxzLCBudWxsKVxuICB9KSwgX19fRW1vdGlvbkpTWChFdWlDYWNoZVByb3ZpZGVyLCB7XG4gICAgY2FjaGU6IHV0aWxpdHlDYWNoZSxcbiAgICBjaGlsZHJlbjogVXRpbGl0aWVzICYmIF9fX0Vtb3Rpb25KU1goVXRpbGl0aWVzLCBudWxsKVxuICB9KSksIF9fX0Vtb3Rpb25KU1goQ3VycmVudEV1aUJyZWFrcG9pbnRQcm92aWRlciwgbnVsbCwgY2hpbGRyZW4pKSk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEdsb2JhbCwgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgZXVpU2NyZWVuUmVhZGVyT25seSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvYWNjZXNzaWJpbGl0eS9zY3JlZW5fcmVhZGVyX29ubHkvc2NyZWVuX3JlYWRlcl9vbmx5LnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIGdsb2JhbFN0eWxlcyA9IC8qI19fUFVSRV9fKi9jc3MoXCIuZXVpU2NyZWVuUmVhZGVyT25seXtcIiwgZXVpU2NyZWVuUmVhZGVyT25seSgpLCBcIjt9O2xhYmVsOmdsb2JhbFN0eWxlcztcIik7XG5leHBvcnQgdmFyIEV1aVV0aWxpdHlDbGFzc2VzID0gZnVuY3Rpb24gRXVpVXRpbGl0eUNsYXNzZXMoKSB7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEdsb2JhbCwge1xuICAgIHN0eWxlczogZ2xvYmFsU3R5bGVzXG4gIH0pO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBDYWNoZVByb3ZpZGVyIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpQ2FjaGVQcm92aWRlciA9IGZ1bmN0aW9uIEV1aUNhY2hlUHJvdmlkZXIoX3JlZikge1xuICB2YXIgY2FjaGUgPSBfcmVmLmNhY2hlLFxuICAgICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuO1xuICByZXR1cm4gY2hpbGRyZW4gJiYgY2FjaGUgPyBfX19FbW90aW9uSlNYKENhY2hlUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogY2FjaGVcbiAgfSwgY2hpbGRyZW4pIDogX19fRW1vdGlvbkpTWChSZWFjdC5GcmFnbWVudCwgbnVsbCwgY2hpbGRyZW4pO1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG52YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJpdGVtc1wiLCBcImRpc3BsYXlcIiwgXCJleHBhbmRCeURlZmF1bHRcIiwgXCJzaG93RXhwYW5zaW9uQXJyb3dzXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7IHJldHVybiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5KGFycikgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFycikgfHwgX25vbkl0ZXJhYmxlU3ByZWFkKCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7IGlmICh0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGl0ZXJbU3ltYm9sLml0ZXJhdG9yXSAhPSBudWxsIHx8IGl0ZXJbXCJAQGl0ZXJhdG9yXCJdICE9IG51bGwpIHJldHVybiBBcnJheS5mcm9tKGl0ZXIpOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KGFycik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCwgY3JlYXRlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgRXVpSTE4biB9IGZyb20gJy4uL2kxOG4nO1xuaW1wb3J0IHsgRXVpSWNvbiB9IGZyb20gJy4uL2ljb24nO1xuaW1wb3J0IHsgRXVpU2NyZWVuUmVhZGVyT25seSB9IGZyb20gJy4uL2FjY2Vzc2liaWxpdHknO1xuaW1wb3J0IHsgRXVpVGV4dCB9IGZyb20gJy4uL3RleHQnO1xuaW1wb3J0IHsga2V5cywgaHRtbElkR2VuZXJhdG9yIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpSW5uZXJUZXh0IH0gZnJvbSAnLi4vaW5uZXJfdGV4dCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEV1aVRyZWVWaWV3Q29udGV4dCA9IC8qI19fUFVSRV9fKi9jcmVhdGVDb250ZXh0KCcnKTtcblxuZnVuY3Rpb24gaGFzQXJpYUxhYmVsKHgpIHtcbiAgcmV0dXJuIHguaGFzT3duUHJvcGVydHkoJ2FyaWEtbGFiZWwnKTtcbn1cblxuZnVuY3Rpb24gZ2V0VHJlZUlkKHByb3BJZCwgY29udGV4dElkLCBpZEdlbmVyYXRvcikge1xuICByZXR1cm4gcHJvcElkICE9PSBudWxsICYmIHByb3BJZCAhPT0gdm9pZCAwID8gcHJvcElkIDogY29udGV4dElkID09PSAnJyA/IGlkR2VuZXJhdG9yKCkgOiBjb250ZXh0SWQ7XG59XG5cbnZhciBkaXNwbGF5VG9DbGFzc05hbWVNYXAgPSB7XG4gIGRlZmF1bHQ6IG51bGwsXG4gIGNvbXByZXNzZWQ6ICdldWlUcmVlVmlldy0tY29tcHJlc3NlZCdcbn07XG5leHBvcnQgdmFyIEV1aVRyZWVWaWV3ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhFdWlUcmVlVmlldywgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihFdWlUcmVlVmlldyk7XG5cbiAgZnVuY3Rpb24gRXVpVHJlZVZpZXcoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aVRyZWVWaWV3KTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsLmFwcGx5KF9zdXBlciwgW3RoaXNdLmNvbmNhdChhcmdzKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwidHJlZUlkR2VuZXJhdG9yXCIsIGh0bWxJZEdlbmVyYXRvcignZXVpVHJlZVZpZXcnKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaXNOZXN0ZWRcIiwgISFfdGhpcy5jb250ZXh0KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzdGF0ZVwiLCB7XG4gICAgICBvcGVuSXRlbXM6IF90aGlzLnByb3BzLmV4cGFuZEJ5RGVmYXVsdCA/IF90aGlzLnByb3BzLml0ZW1zLm1hcChmdW5jdGlvbiAoX3JlZikge1xuICAgICAgICB2YXIgaWQgPSBfcmVmLmlkLFxuICAgICAgICAgICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuO1xuICAgICAgICByZXR1cm4gY2hpbGRyZW4gPyBpZCA6IG51bGw7XG4gICAgICB9KS5maWx0ZXIoZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgcmV0dXJuIHggIT0gbnVsbDtcbiAgICAgIH0pIDogX3RoaXMucHJvcHMuaXRlbXMubWFwKGZ1bmN0aW9uIChfcmVmMikge1xuICAgICAgICB2YXIgaWQgPSBfcmVmMi5pZCxcbiAgICAgICAgICAgIGNoaWxkcmVuID0gX3JlZjIuY2hpbGRyZW4sXG4gICAgICAgICAgICBpc0V4cGFuZGVkID0gX3JlZjIuaXNFeHBhbmRlZDtcbiAgICAgICAgcmV0dXJuIGNoaWxkcmVuICYmIGlzRXhwYW5kZWQgPyBpZCA6IG51bGw7XG4gICAgICB9KS5maWx0ZXIoZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgcmV0dXJuIHggIT0gbnVsbDtcbiAgICAgIH0pLFxuICAgICAgYWN0aXZlSXRlbTogJycsXG4gICAgICB0cmVlSUQ6IGdldFRyZWVJZChfdGhpcy5wcm9wcy5pZCwgX3RoaXMuY29udGV4dCwgX3RoaXMudHJlZUlkR2VuZXJhdG9yKSxcbiAgICAgIGV4cGFuZENoaWxkTm9kZXM6IF90aGlzLnByb3BzLmV4cGFuZEJ5RGVmYXVsdCB8fCBmYWxzZVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImJ1dHRvblJlZlwiLCBbXSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic2V0QnV0dG9uUmVmXCIsIGZ1bmN0aW9uIChyZWYsIGluZGV4KSB7XG4gICAgICBfdGhpcy5idXR0b25SZWZbaW5kZXhdID0gcmVmO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImhhbmRsZU5vZGVDbGlja1wiLCBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgdmFyIGlnbm9yZUNhbGxiYWNrID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmYWxzZTtcblxuICAgICAgdmFyIGluZGV4ID0gX3RoaXMuc3RhdGUub3Blbkl0ZW1zLmluZGV4T2Yobm9kZS5pZCk7XG5cbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgZXhwYW5kQ2hpbGROb2RlczogZmFsc2VcbiAgICAgIH0pO1xuXG4gICAgICBub2RlLmlzRXhwYW5kZWQgPSAhbm9kZS5pc0V4cGFuZGVkO1xuXG4gICAgICBpZiAoIWlnbm9yZUNhbGxiYWNrICYmIG5vZGUuY2FsbGJhY2sgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBub2RlLmNhbGxiYWNrKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChfdGhpcy5pc05vZGVPcGVuKG5vZGUpKSB7XG4gICAgICAgIC8vIGlmIHRoZSBub2RlIGlzIHBhcnQgb2Ygb3Blbkl0ZW1zW10gdGhlbiByZW1vdmUgaXRcbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIG9wZW5JdGVtczogX3RoaXMuc3RhdGUub3Blbkl0ZW1zLmZpbHRlcihmdW5jdGlvbiAoXywgaSkge1xuICAgICAgICAgICAgcmV0dXJuIGkgIT09IGluZGV4O1xuICAgICAgICAgIH0pXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gaWYgdGhlIG5vZGUgaXNuJ3QgcGFydCBvZiBvcGVuSXRlbXNbXSB0aGVuIGFkZCBpdFxuICAgICAgICBfdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAocHJldlN0YXRlKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG9wZW5JdGVtczogW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShwcmV2U3RhdGUub3Blbkl0ZW1zKSwgW25vZGUuaWRdKSxcbiAgICAgICAgICAgIGFjdGl2ZUl0ZW06IG5vZGUuaWRcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJpc05vZGVPcGVuXCIsIGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICByZXR1cm4gX3RoaXMuc3RhdGUub3Blbkl0ZW1zLmluY2x1ZGVzKG5vZGUuaWQpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uS2V5RG93blwiLCBmdW5jdGlvbiAoZXZlbnQsIG5vZGUpIHtcbiAgICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICAgIGNhc2Uga2V5cy5BUlJPV19ET1dOOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBub2RlQnV0dG9ucyA9IEFycmF5LmZyb20oZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIltkYXRhLXRlc3Qtc3Viaj1cXFwiZXVpVHJlZVZpZXdCdXR0b24tXCIuY29uY2F0KF90aGlzLnN0YXRlLnRyZWVJRCwgXCJcXFwiXVwiKSkpO1xuICAgICAgICAgICAgdmFyIGN1cnJlbnRJbmRleCA9IG5vZGVCdXR0b25zLmluZGV4T2YoZXZlbnQuY3VycmVudFRhcmdldCk7XG5cbiAgICAgICAgICAgIGlmIChjdXJyZW50SW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICB2YXIgbmV4dEJ1dHRvbiA9IG5vZGVCdXR0b25zW2N1cnJlbnRJbmRleCArIDFdO1xuXG4gICAgICAgICAgICAgIGlmIChuZXh0QnV0dG9uKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICBuZXh0QnV0dG9uLmZvY3VzKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgIGNhc2Uga2V5cy5BUlJPV19VUDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgX25vZGVCdXR0b25zID0gQXJyYXkuZnJvbShkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiW2RhdGEtdGVzdC1zdWJqPVxcXCJldWlUcmVlVmlld0J1dHRvbi1cIi5jb25jYXQoX3RoaXMuc3RhdGUudHJlZUlELCBcIlxcXCJdXCIpKSk7XG5cbiAgICAgICAgICAgIHZhciBfY3VycmVudEluZGV4ID0gX25vZGVCdXR0b25zLmluZGV4T2YoZXZlbnQuY3VycmVudFRhcmdldCk7XG5cbiAgICAgICAgICAgIGlmIChfY3VycmVudEluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgdmFyIHByZXZCdXR0b24gPSBfbm9kZUJ1dHRvbnNbX2N1cnJlbnRJbmRleCArIC0xXTtcblxuICAgICAgICAgICAgICBpZiAocHJldkJ1dHRvbikge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgcHJldkJ1dHRvbi5mb2N1cygpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlIGtleXMuQVJST1dfUklHSFQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKCFfdGhpcy5pc05vZGVPcGVuKG5vZGUpKSB7XG4gICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgICAgICAgIF90aGlzLmhhbmRsZU5vZGVDbGljayhub2RlLCB0cnVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgIGNhc2Uga2V5cy5BUlJPV19MRUZUOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmIChfdGhpcy5pc05vZGVPcGVuKG5vZGUpKSB7XG4gICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgICAgICAgIF90aGlzLmhhbmRsZU5vZGVDbGljayhub2RlLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkNoaWxkcmVuS2V5ZG93blwiLCBmdW5jdGlvbiAoZXZlbnQsIGluZGV4KSB7XG4gICAgICBpZiAoZXZlbnQua2V5ID09PSBrZXlzLkFSUk9XX0xFRlQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgX3RoaXMuYnV0dG9uUmVmW2luZGV4XS5mb2N1cygpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEV1aVRyZWVWaWV3LCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcykge1xuICAgICAgaWYgKHRoaXMucHJvcHMuaWQgIT09IHByZXZQcm9wcy5pZCkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3Qvbm8tZGlkLXVwZGF0ZS1zZXQtc3RhdGVcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgdHJlZUlEOiBnZXRUcmVlSWQodGhpcy5wcm9wcy5pZCwgdGhpcy5jb250ZXh0LCB0aGlzLnRyZWVJZEdlbmVyYXRvcilcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzLmNoaWxkcmVuLFxuICAgICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzLmNsYXNzTmFtZSxcbiAgICAgICAgICBpdGVtcyA9IF90aGlzJHByb3BzLml0ZW1zLFxuICAgICAgICAgIF90aGlzJHByb3BzJGRpc3BsYXkgPSBfdGhpcyRwcm9wcy5kaXNwbGF5LFxuICAgICAgICAgIGRpc3BsYXkgPSBfdGhpcyRwcm9wcyRkaXNwbGF5ID09PSB2b2lkIDAgPyAnZGVmYXVsdCcgOiBfdGhpcyRwcm9wcyRkaXNwbGF5LFxuICAgICAgICAgIGV4cGFuZEJ5RGVmYXVsdCA9IF90aGlzJHByb3BzLmV4cGFuZEJ5RGVmYXVsdCxcbiAgICAgICAgICBzaG93RXhwYW5zaW9uQXJyb3dzID0gX3RoaXMkcHJvcHMuc2hvd0V4cGFuc2lvbkFycm93cyxcbiAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzLCBfZXhjbHVkZWQpOyAvLyBDb21wdXRlZCBjbGFzc05hbWVzXG5cblxuICAgICAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUcmVlVmlldycsIGRpc3BsYXkgPyBkaXNwbGF5VG9DbGFzc05hbWVNYXBbZGlzcGxheV0gOiBudWxsLCB7XG4gICAgICAgICdldWlUcmVlVmlldy0td2l0aEFycm93cyc6IHNob3dFeHBhbnNpb25BcnJvd3NcbiAgICAgIH0sIGNsYXNzTmFtZSk7XG4gICAgICB2YXIgaW5zdHJ1Y3Rpb25zSWQgPSBcIlwiLmNvbmNhdCh0aGlzLnN0YXRlLnRyZWVJRCwgXCItLWluc3RydWN0aW9uXCIpO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpVHJlZVZpZXdDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICAgIHZhbHVlOiB0aGlzLnN0YXRlLnRyZWVJRFxuICAgICAgfSwgX19fRW1vdGlvbkpTWChFdWlUZXh0LCB7XG4gICAgICAgIHNpemU6IGRpc3BsYXkgPT09ICdjb21wcmVzc2VkJyA/ICdzJyA6ICdtJyxcbiAgICAgICAgY2xhc3NOYW1lOiBcImV1aVRyZWVWaWV3X193cmFwcGVyXCJcbiAgICAgIH0sICF0aGlzLmlzTmVzdGVkICYmIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICB0b2tlbjogXCJldWlUcmVlVmlldy5saXN0TmF2aWdhdGlvbkluc3RydWN0aW9uc1wiLFxuICAgICAgICBkZWZhdWx0OiBcIllvdSBjYW4gcXVpY2tseSBuYXZpZ2F0ZSB0aGlzIGxpc3QgdXNpbmcgYXJyb3cga2V5cy5cIlxuICAgICAgfSwgZnVuY3Rpb24gKGxpc3ROYXZpZ2F0aW9uSW5zdHJ1Y3Rpb25zKSB7XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVNjcmVlblJlYWRlck9ubHksIG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwXCIsIHtcbiAgICAgICAgICBpZDogaW5zdHJ1Y3Rpb25zSWRcbiAgICAgICAgfSwgbGlzdE5hdmlnYXRpb25JbnN0cnVjdGlvbnMpKTtcbiAgICAgIH0pLCBfX19FbW90aW9uSlNYKFwidWxcIiwgX2V4dGVuZHMoe1xuICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgIGlkOiAhdGhpcy5pc05lc3RlZCA/IHRoaXMuc3RhdGUudHJlZUlEIDogdW5kZWZpbmVkLFxuICAgICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjogIXRoaXMuaXNOZXN0ZWQgPyBpbnN0cnVjdGlvbnNJZCA6IHVuZGVmaW5lZFxuICAgICAgfSwgcmVzdCksIGl0ZW1zLm1hcChmdW5jdGlvbiAobm9kZSwgaW5kZXgpIHtcbiAgICAgICAgdmFyIGJ1dHRvbklkID0gbm9kZS5pZDtcblxuICAgICAgICB2YXIgd3JhcHBpbmdJZCA9IF90aGlzMi50cmVlSWRHZW5lcmF0b3IoYnV0dG9uSWQpO1xuXG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUlubmVyVGV4dCwge1xuICAgICAgICAgIGtleTogbm9kZS5pZCArIGluZGV4LFxuICAgICAgICAgIGZhbGxiYWNrOiB0eXBlb2Ygbm9kZS5sYWJlbCA9PT0gJ3N0cmluZycgPyBub2RlLmxhYmVsIDogJydcbiAgICAgICAgfSwgZnVuY3Rpb24gKHJlZiwgaW5uZXJUZXh0KSB7XG4gICAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgICAga2V5OiBub2RlLmlkICsgaW5kZXgsXG4gICAgICAgICAgICB0b2tlbjogXCJldWlUcmVlVmlldy5hcmlhTGFiZWxcIixcbiAgICAgICAgICAgIGRlZmF1bHQ6IFwie25vZGVMYWJlbH0gY2hpbGQgb2Yge2FyaWFMYWJlbH1cIixcbiAgICAgICAgICAgIHZhbHVlczoge1xuICAgICAgICAgICAgICBub2RlTGFiZWw6IGlubmVyVGV4dCxcbiAgICAgICAgICAgICAgYXJpYUxhYmVsOiBoYXNBcmlhTGFiZWwocmVzdCkgPyByZXN0WydhcmlhLWxhYmVsJ10gOiAnJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIGZ1bmN0aW9uIChhcmlhTGFiZWwpIHtcbiAgICAgICAgICAgIHZhciBsYWJlbCA9IGhhc0FyaWFMYWJlbChyZXN0KSA/IHtcbiAgICAgICAgICAgICAgJ2FyaWEtbGFiZWwnOiBhcmlhTGFiZWxcbiAgICAgICAgICAgIH0gOiB7XG4gICAgICAgICAgICAgICdhcmlhLWxhYmVsbGVkYnknOiBcIlwiLmNvbmNhdChidXR0b25JZCwgXCIgXCIpLmNvbmNhdChyZXN0WydhcmlhLWxhYmVsbGVkYnknXSlcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB2YXIgbm9kZUNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUcmVlVmlld19fbm9kZScsIGRpc3BsYXkgPyBkaXNwbGF5VG9DbGFzc05hbWVNYXBbZGlzcGxheV0gOiBudWxsLCB7XG4gICAgICAgICAgICAgICdldWlUcmVlVmlld19fbm9kZS0tZXhwYW5kZWQnOiBfdGhpczIuaXNOb2RlT3Blbihub2RlKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB2YXIgbm9kZUJ1dHRvbkNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUcmVlVmlld19fbm9kZUlubmVyJywgc2hvd0V4cGFuc2lvbkFycm93cyAmJiBub2RlLmNoaWxkcmVuID8gJ2V1aVRyZWVWaWV3X19ub2RlSW5uZXItLXdpdGhBcnJvd3MnIDogbnVsbCwgX3RoaXMyLnN0YXRlLmFjdGl2ZUl0ZW0gPT09IG5vZGUuaWQgPyAnZXVpVHJlZVZpZXdfX25vZGUtLWFjdGl2ZScgOiBudWxsLCBub2RlLmNsYXNzTmFtZSA/IG5vZGUuY2xhc3NOYW1lIDogbnVsbCk7XG4gICAgICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChSZWFjdC5GcmFnbWVudCwgbnVsbCwgX19fRW1vdGlvbkpTWChcImxpXCIsIHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiBub2RlQ2xhc3Nlc1xuICAgICAgICAgICAgfSwgX19fRW1vdGlvbkpTWChcImJ1dHRvblwiLCB7XG4gICAgICAgICAgICAgIGlkOiBidXR0b25JZCxcbiAgICAgICAgICAgICAgXCJhcmlhLWNvbnRyb2xzXCI6IHdyYXBwaW5nSWQsXG4gICAgICAgICAgICAgIFwiYXJpYS1leHBhbmRlZFwiOiBfdGhpczIuaXNOb2RlT3Blbihub2RlKSxcbiAgICAgICAgICAgICAgcmVmOiBmdW5jdGlvbiByZWYoX3JlZjMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMyLnNldEJ1dHRvblJlZihfcmVmMywgaW5kZXgpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFwiZXVpVHJlZVZpZXdCdXR0b24tXCIuY29uY2F0KF90aGlzMi5zdGF0ZS50cmVlSUQpLFxuICAgICAgICAgICAgICBvbktleURvd246IGZ1bmN0aW9uIG9uS2V5RG93bihldmVudCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfdGhpczIub25LZXlEb3duKGV2ZW50LCBub2RlKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgb25DbGljazogZnVuY3Rpb24gb25DbGljaygpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMyLmhhbmRsZU5vZGVDbGljayhub2RlKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiBub2RlQnV0dG9uQ2xhc3Nlc1xuICAgICAgICAgICAgfSwgc2hvd0V4cGFuc2lvbkFycm93cyAmJiBub2RlLmNoaWxkcmVuID8gX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlUcmVlVmlld19fZXhwYW5zaW9uQXJyb3dcIixcbiAgICAgICAgICAgICAgc2l6ZTogZGlzcGxheSA9PT0gJ2NvbXByZXNzZWQnID8gJ3MnIDogJ20nLFxuICAgICAgICAgICAgICB0eXBlOiBfdGhpczIuaXNOb2RlT3Blbihub2RlKSA/ICdhcnJvd0Rvd24nIDogJ2Fycm93UmlnaHQnXG4gICAgICAgICAgICB9KSA6IG51bGwsIG5vZGUuaWNvbiAmJiAhbm9kZS51c2VFbXB0eUljb24gPyBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlUcmVlVmlld19faWNvbldyYXBwZXJcIlxuICAgICAgICAgICAgfSwgX3RoaXMyLmlzTm9kZU9wZW4obm9kZSkgJiYgbm9kZS5pY29uV2hlbkV4cGFuZGVkID8gbm9kZS5pY29uV2hlbkV4cGFuZGVkIDogbm9kZS5pY29uKSA6IG51bGwsIG5vZGUudXNlRW1wdHlJY29uICYmICFub2RlLmljb24gPyBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlUcmVlVmlld19faWNvblBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgIH0pIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgICAgICAgICAgICByZWY6IHJlZixcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcImV1aVRyZWVWaWV3X19ub2RlTGFiZWxcIlxuICAgICAgICAgICAgfSwgbm9kZS5sYWJlbCkpLCBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgICAgICAgICAgaWQ6IHdyYXBwaW5nSWQsXG4gICAgICAgICAgICAgIG9uS2V5RG93bjogZnVuY3Rpb24gb25LZXlEb3duKGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMi5vbkNoaWxkcmVuS2V5ZG93bihldmVudCwgaW5kZXgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBub2RlLmNoaWxkcmVuICYmIF90aGlzMi5pc05vZGVPcGVuKG5vZGUpID8gX19fRW1vdGlvbkpTWChFdWlUcmVlVmlldywgX2V4dGVuZHMoe1xuICAgICAgICAgICAgICBpdGVtczogbm9kZS5jaGlsZHJlbixcbiAgICAgICAgICAgICAgZGlzcGxheTogZGlzcGxheSxcbiAgICAgICAgICAgICAgc2hvd0V4cGFuc2lvbkFycm93czogc2hvd0V4cGFuc2lvbkFycm93cyxcbiAgICAgICAgICAgICAgZXhwYW5kQnlEZWZhdWx0OiBfdGhpczIuc3RhdGUuZXhwYW5kQ2hpbGROb2Rlc1xuICAgICAgICAgICAgfSwgbGFiZWwpKSA6IG51bGwpKSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSkpKSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEV1aVRyZWVWaWV3O1xufShDb21wb25lbnQpO1xuXG5fZGVmaW5lUHJvcGVydHkoRXVpVHJlZVZpZXcsIFwiY29udGV4dFR5cGVcIiwgRXVpVHJlZVZpZXdDb250ZXh0KTtcblxuRXVpVHJlZVZpZXcucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKiogQW4gYXJyYXkgb2YgRXVpVHJlZVZpZXdOb2Rlc1xuICAgICAgICovXG4gIGl0ZW1zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuICAgIC8qKiBBbiBhcnJheSBvZiBFdWlUcmVlVmlld05vZGVzIHRvIHJlbmRlciBhcyBjaGlsZHJlblxuICAgICAgICovXG4gICAgY2hpbGRyZW46IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCksXG5cbiAgICAvKiogVGhlIHJlYWRhYmxlIGxhYmVsIGZvciB0aGUgaXRlbVxuICAgICAgICovXG4gICAgbGFiZWw6IFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsXG5cbiAgICAvKiogQSB1bmlxdWUgSURcbiAgICAgICAqL1xuICAgIGlkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG5cbiAgICAvKiogQW4gaWNvbiB0byB1c2Ugb24gdGhlIGxlZnQgb2YgdGhlIGxhYmVsXG4gICAgICAgKi9cbiAgICBpY29uOiBQcm9wVHlwZXMuZWxlbWVudCxcblxuICAgIC8qKiBEaXNwbGF5IGEgZGlmZmVyZW50IGljb24gd2hlbiB0aGUgaXRlbSBpcyBleHBhbmRlZC5cbiAgICAgIEZvciBpbnN0YW5jZSwgYW4gb3BlbiBmb2xkZXIgb3IgYSBkb3duIGFycm93XG4gICAgICAqL1xuICAgIGljb25XaGVuRXhwYW5kZWQ6IFByb3BUeXBlcy5lbGVtZW50LFxuXG4gICAgLyoqIFVzZSBhbiBlbXB0eSBpY29uIHRvIGtlZXAgaXRlbXMgd2l0aG91dCBhbiBpY29uXG4gICAgICBsaW5lZCB1cCB3aXRoIHRoZWlyIHNpYmxpbmdzXG4gICAgICAqL1xuICAgIHVzZUVtcHR5SWNvbjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgICAvKiogV2hldGhlciBvciBub3QgdGhlIGl0ZW0gaXMgZXhwYW5kZWQuXG4gICAgICAgKi9cbiAgICBpc0V4cGFuZGVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAgIC8qKiBPcHRpb25hbCBjbGFzcyB0byB0aHJvdyBvbiB0aGUgbm9kZVxuICAgICAgICovXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gICAgLyoqIEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgaXRlbSBpcyBjbGlja2VkLlxuICAgICAgIFRoZSBvcGVuIHN0YXRlIG9mIHRoZSBpdGVtIHdpbGwgYWx3YXlzIGJlIHRvZ2dsZWQuXG4gICAgICAgKi9cbiAgICBjYWxsYmFjazogUHJvcFR5cGVzLmZ1bmNcbiAgfSkuaXNSZXF1aXJlZCkuaXNSZXF1aXJlZCxcblxuICAvKiogT3B0aW9uYWxseSB1c2UgYSB2YXJpYXRpb24gd2l0aCBzbWFsbGVyIHRleHQgYW5kIGljb24gc2l6ZXNcbiAgICAgICAqL1xuICBkaXNwbGF5OiBQcm9wVHlwZXMub25lT2YoW1wiZGVmYXVsdFwiLCBcImNvbXByZXNzZWRcIl0pLFxuXG4gIC8qKiBTZXQgYWxsIGl0ZW1zIHRvIG9wZW4gb24gaW5pdGlhbCBsb2FkXG4gICAgICAgKi9cbiAgZXhwYW5kQnlEZWZhdWx0OiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKiogRGlzcGxheSBleHBhbnNpb24gYXJyb3dzIG5leHQgdG8gYWxsIGl0ZW1zXG4gICAgICAgKiB0aGF0IGNvbnRhaW4gY2hpbGRyZW5cbiAgICAgICAqL1xuICBzaG93RXhwYW5zaW9uQXJyb3dzOiBQcm9wVHlwZXMuYm9vbCxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IFByb3BUeXBlcy5zdHJpbmdcbn07IiwgImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxudmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwib3B0aW9uc1wiLCBcIm9uQ2hhbmdlXCIsIFwib25BY3RpdmVPcHRpb25DaGFuZ2VcIiwgXCJzZWFyY2hhYmxlXCIsIFwic2VhcmNoUHJvcHNcIiwgXCJzaW5nbGVTZWxlY3Rpb25cIiwgXCJpc0xvYWRpbmdcIiwgXCJsaXN0UHJvcHNcIiwgXCJyZW5kZXJPcHRpb25cIiwgXCJoZWlnaHRcIiwgXCJhbGxvd0V4Y2x1c2lvbnNcIiwgXCJhcmlhLWxhYmVsXCIsIFwiYXJpYS1kZXNjcmliZWRieVwiLCBcImxvYWRpbmdNZXNzYWdlXCIsIFwibm9NYXRjaGVzTWVzc2FnZVwiLCBcImVtcHR5TWVzc2FnZVwiLCBcImVycm9yTWVzc2FnZVwiLCBcImlzUHJlRmlsdGVyZWRcIl0sXG4gICAgX2V4Y2x1ZGVkMiA9IFtcImFyaWEtbGFiZWxcIiwgXCJhcmlhLWRlc2NyaWJlZGJ5XCIsIFwib25DaGFuZ2VcIiwgXCJkZWZhdWx0VmFsdWVcIiwgXCJpbnB1dFJlZlwiXSxcbiAgICBfZXhjbHVkZWQzID0gW1wiYXJpYS1sYWJlbFwiLCBcImFyaWEtZGVzY3JpYmVkYnlcIiwgXCJpc1ZpcnR1YWxpemVkXCIsIFwicm93SGVpZ2h0XCJdO1xuXG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgeyB2YXIgX2kgPSBhcnIgPT0gbnVsbCA/IG51bGwgOiB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGFycltTeW1ib2wuaXRlcmF0b3JdIHx8IGFycltcIkBAaXRlcmF0b3JcIl07IGlmIChfaSA9PSBudWxsKSByZXR1cm47IHZhciBfYXJyID0gW107IHZhciBfbiA9IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIgX3MsIF9lOyB0cnkgeyBmb3IgKF9pID0gX2kuY2FsbChhcnIpOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7IF9hcnIucHVzaChfcy52YWx1ZSk7IGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhazsgfSB9IGNhdGNoIChlcnIpIHsgX2QgPSB0cnVlOyBfZSA9IGVycjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSAhPSBudWxsKSBfaVtcInJldHVyblwiXSgpOyB9IGZpbmFsbHkgeyBpZiAoX2QpIHRocm93IF9lOyB9IH0gcmV0dXJuIF9hcnI7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyOyB9XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBjcmVhdGVSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IEV1aVNlbGVjdGFibGVTZWFyY2ggfSBmcm9tICcuL3NlbGVjdGFibGVfc2VhcmNoJztcbmltcG9ydCB7IEV1aVNlbGVjdGFibGVNZXNzYWdlIH0gZnJvbSAnLi9zZWxlY3RhYmxlX21lc3NhZ2UnO1xuaW1wb3J0IHsgRXVpU2VsZWN0YWJsZUxpc3QgfSBmcm9tICcuL3NlbGVjdGFibGVfbGlzdCc7XG5pbXBvcnQgeyBFdWlMb2FkaW5nU3Bpbm5lciB9IGZyb20gJy4uL2xvYWRpbmcnO1xuaW1wb3J0IHsgRXVpU3BhY2VyIH0gZnJvbSAnLi4vc3BhY2VyJztcbmltcG9ydCB7IGdldE1hdGNoaW5nT3B0aW9ucyB9IGZyb20gJy4vbWF0Y2hpbmdfb3B0aW9ucyc7XG5pbXBvcnQgeyBrZXlzLCBodG1sSWRHZW5lcmF0b3IgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFdWlTY3JlZW5SZWFkZXJMaXZlLCBFdWlTY3JlZW5SZWFkZXJPbmx5IH0gZnJvbSAnLi4vYWNjZXNzaWJpbGl0eSc7XG5pbXBvcnQgeyBFdWlJMThuIH0gZnJvbSAnLi4vaTE4bic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlTZWxlY3RhYmxlID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhFdWlTZWxlY3RhYmxlLCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aVNlbGVjdGFibGUpO1xuXG4gIGZ1bmN0aW9uIEV1aVNlbGVjdGFibGUocHJvcHMpIHtcbiAgICB2YXIgX3NlYXJjaFByb3BzJG9uQ2hhbmdlO1xuXG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aVNlbGVjdGFibGUpO1xuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBwcm9wcyk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaW5wdXRSZWZcIiwgbnVsbCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiY29udGFpbmVyUmVmXCIsIC8qI19fUFVSRV9fKi9jcmVhdGVSZWYoKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib3B0aW9uc0xpc3RSZWZcIiwgLyojX19QVVJFX18qL2NyZWF0ZVJlZigpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJwcmV2ZW50T25Gb2N1c1wiLCBmYWxzZSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicm9vdElkXCIsIHZvaWQgMCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwibWVzc2FnZUNvbnRlbnRJZFwiLCB2b2lkIDApO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImxpc3RJZFwiLCB2b2lkIDApO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uTW91c2VEb3duXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIEJ5cGFzcyBvbkZvY3VzIHdoZW4gYSBjbGljayBldmVudCBvcmlnaW5hdGVzIGZyb20gdGhpcy5jb250YWluZXJSZWYuXG4gICAgICAvLyBQcmV2ZW50cyBvbkZvY3VzIGZyb20gc2Nyb2xsaW5nIGF3YXkgZnJvbSBhIGNsaWNrZWQgb3B0aW9uIGFuZCBuZWdhdGluZyB0aGUgc2VsZWN0aW9uIGV2ZW50LlxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2VsYXN0aWMvZXVpL2lzc3Vlcy80MTQ3XG4gICAgICBfdGhpcy5wcmV2ZW50T25Gb2N1cyA9IHRydWU7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25Gb2N1c1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoX3RoaXMucHJldmVudE9uRm9jdXMpIHtcbiAgICAgICAgX3RoaXMucHJldmVudE9uRm9jdXMgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIV90aGlzLnN0YXRlLnZpc2libGVPcHRpb25zLmxlbmd0aCB8fCBfdGhpcy5zdGF0ZS5hY3RpdmVPcHRpb25JbmRleCAhPSBudWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIGZpcnN0U2VsZWN0ZWQgPSBfdGhpcy5zdGF0ZS52aXNpYmxlT3B0aW9ucy5maW5kSW5kZXgoZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgICByZXR1cm4gb3B0aW9uLmNoZWNrZWQgJiYgIW9wdGlvbi5kaXNhYmxlZCAmJiAhb3B0aW9uLmlzR3JvdXBMYWJlbDtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoZmlyc3RTZWxlY3RlZCA+IC0xKSB7XG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBhY3RpdmVPcHRpb25JbmRleDogZmlyc3RTZWxlY3RlZCxcbiAgICAgICAgICBpc0ZvY3VzZWQ6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXg6IF90aGlzLnN0YXRlLnZpc2libGVPcHRpb25zLmZpbmRJbmRleChmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gIW9wdGlvbi5kaXNhYmxlZCAmJiAhb3B0aW9uLmlzR3JvdXBMYWJlbDtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBpc0ZvY3VzZWQ6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25LZXlEb3duXCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgdmFyIG9wdGlvbnNMaXN0ID0gX3RoaXMub3B0aW9uc0xpc3RSZWYuY3VycmVudDtcblxuICAgICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgICAgY2FzZSBrZXlzLkFSUk9XX1VQOlxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgICBfdGhpcy5pbmNyZW1lbnRBY3RpdmVPcHRpb25JbmRleCgtMSk7XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIGtleXMuQVJST1dfRE9XTjpcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgICAgX3RoaXMuaW5jcmVtZW50QWN0aXZlT3B0aW9uSW5kZXgoMSk7XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgLy8gRm9yIG5vbi1zZWFyY2hhYmxlIGluc3RhbmNlcywgU1BBQ0UgaW50ZXJhY3Rpb24gc2hvdWxkIGFsaWduIHdpdGhcbiAgICAgICAgLy8gdGhlIHVzZXIgZXhwZWN0YXRpb24gb2Ygc2VsZWN0aW9uIHRvZ2dsaW5nIChlLmcuLCBpbnB1dFt0eXBlPWNoZWNrYm94XSkuXG4gICAgICAgIC8vIEVOVEVSIGlzIGFsc28gYSB2YWxpZCBzZWxlY3Rpb24gbWVjaGFuaXNtIGluIHRoaXMgY2FzZS5cblxuICAgICAgICBjYXNlIGtleXMuRU5URVI6XG4gICAgICAgIGNhc2Uga2V5cy5TUEFDRTpcbiAgICAgICAgICBpZiAoX3RoaXMucHJvcHMuc2VhcmNoYWJsZSkge1xuICAgICAgICAgICAgdmFyIF90aGlzJG9wdGlvbnNMaXN0UmVmJCwgX3RoaXMkb3B0aW9uc0xpc3RSZWYkMjtcblxuICAgICAgICAgICAgLy8gRm9yIHNlYXJjaGFibGUgaW5zdGFuY2VzLCBTUEFDRSBpcyByZXNlcnZlZCBhcyBhIGNoYXJhY3RlciBmb3IgZmlsdGVyaW5nXG4gICAgICAgICAgICAvLyB2aWEgdGhlIGlucHV0IGJveCwgYW5kIGFzIHN1Y2ggb25seSBFTlRFUiB3aWxsIHRvZ2dsZSBzZWxlY3Rpb24uXG4gICAgICAgICAgICBpZiAoZXZlbnQudGFyZ2V0ID09PSBfdGhpcy5pbnB1dFJlZiAmJiBldmVudC5rZXkgPT09IGtleXMuU1BBQ0UpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfSAvLyBDaGVjayBpZiB0aGUgdXNlciBpcyBpbnRlcmFjdGluZyB3aXRoIHNvbWV0aGluZyBvdGhlciB0aGFuIHRoZVxuICAgICAgICAgICAgLy8gc2VhcmNoYm94IG9yIHNlbGVjdGlvbiBsaXN0LiBJZiBub3QsIHRoZSB1c2VyIGlzIGF0dGVtcHRpbmcgdG9cbiAgICAgICAgICAgIC8vIGludGVyYWN0IHdpdGggYW4gaW50ZXJuYWwgYnV0dG9uIHN1Y2ggYXMgdGhlIGNsZWFyIGJ1dHRvbixcbiAgICAgICAgICAgIC8vIGFuZCB0aGUgZXZlbnQgc2hvdWxkIG5vdCBiZSBhbHRlcmVkLlxuXG5cbiAgICAgICAgICAgIGlmICghKGV2ZW50LnRhcmdldCA9PT0gX3RoaXMuaW5wdXRSZWYgfHwgZXZlbnQudGFyZ2V0ID09PSAoKF90aGlzJG9wdGlvbnNMaXN0UmVmJCA9IF90aGlzLm9wdGlvbnNMaXN0UmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF90aGlzJG9wdGlvbnNMaXN0UmVmJCA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF90aGlzJG9wdGlvbnNMaXN0UmVmJDIgPSBfdGhpcyRvcHRpb25zTGlzdFJlZiQubGlzdEJveFJlZikgPT09IG51bGwgfHwgX3RoaXMkb3B0aW9uc0xpc3RSZWYkMiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkb3B0aW9uc0xpc3RSZWYkMi5wYXJlbnRFbGVtZW50KSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgICBpZiAoX3RoaXMuc3RhdGUuYWN0aXZlT3B0aW9uSW5kZXggIT0gbnVsbCAmJiBvcHRpb25zTGlzdCkge1xuICAgICAgICAgICAgZXZlbnQucGVyc2lzdCgpOyAvLyBOT1RFOiBUaGlzIGlzIG5lZWRlZCBmb3IgUmVhY3QgdjE2IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG5cbiAgICAgICAgICAgIG9wdGlvbnNMaXN0Lm9uQWRkT3JSZW1vdmVPcHRpb24oX3RoaXMuc3RhdGUudmlzaWJsZU9wdGlvbnNbX3RoaXMuc3RhdGUuYWN0aXZlT3B0aW9uSW5kZXhdLCBldmVudCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBrZXlzLkFMVDpcbiAgICAgICAgY2FzZSBrZXlzLlNISUZUOlxuICAgICAgICBjYXNlIGtleXMuQ1RSTDpcbiAgICAgICAgY2FzZSBrZXlzLk1FVEE6XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBhY3RpdmVPcHRpb25JbmRleDogdW5kZWZpbmVkXG4gICAgICAgICAgfSwgX3RoaXMub25Gb2N1cyk7XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJpbmNyZW1lbnRBY3RpdmVPcHRpb25JbmRleFwiLCBmdW5jdGlvbiAoYW1vdW50KSB7XG4gICAgICAvLyBJZiB0aGVyZSBhcmUgbm8gb3B0aW9ucyBhdmFpbGFibGUsIGRvIG5vdGhpbmcuXG4gICAgICBpZiAoIV90aGlzLnN0YXRlLnZpc2libGVPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIF90aGlzLnNldFN0YXRlKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICAgIHZhciBhY3RpdmVPcHRpb25JbmRleCA9IF9yZWYuYWN0aXZlT3B0aW9uSW5kZXgsXG4gICAgICAgICAgICB2aXNpYmxlT3B0aW9ucyA9IF9yZWYudmlzaWJsZU9wdGlvbnM7XG4gICAgICAgIHZhciBuZXh0QWN0aXZlT3B0aW9uSW5kZXg7XG5cbiAgICAgICAgaWYgKGFjdGl2ZU9wdGlvbkluZGV4ID09IG51bGwpIHtcbiAgICAgICAgICAvLyBJZiB0aGlzIGlzIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHVzZXIncyBrZXlib2FyZCBuYXZpZ2F0aW9uIG9mIHRoZSBtZW51LCB0aGVuIHdlJ2xsIGZvY3VzXG4gICAgICAgICAgLy8gZWl0aGVyIHRoZSBmaXJzdCBvciBsYXN0IGl0ZW0uXG4gICAgICAgICAgbmV4dEFjdGl2ZU9wdGlvbkluZGV4ID0gYW1vdW50IDwgMCA/IHZpc2libGVPcHRpb25zLmxlbmd0aCAtIDEgOiAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5leHRBY3RpdmVPcHRpb25JbmRleCA9IGFjdGl2ZU9wdGlvbkluZGV4ICsgYW1vdW50O1xuXG4gICAgICAgICAgaWYgKG5leHRBY3RpdmVPcHRpb25JbmRleCA8IDApIHtcbiAgICAgICAgICAgIG5leHRBY3RpdmVPcHRpb25JbmRleCA9IHZpc2libGVPcHRpb25zLmxlbmd0aCAtIDE7XG4gICAgICAgICAgfSBlbHNlIGlmIChuZXh0QWN0aXZlT3B0aW9uSW5kZXggPT09IHZpc2libGVPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgbmV4dEFjdGl2ZU9wdGlvbkluZGV4ID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gR3JvdXAgdGl0bGVzIGFuZCBkaXNhYmxlZCBvcHRpb25zIGFyZSBpbmNsdWRlZCBpbiBvcHRpb24gbGlzdCBidXQgYXJlIG5vdCBzZWxlY3RhYmxlXG5cblxuICAgICAgICB2YXIgZGlyZWN0aW9uID0gYW1vdW50ID4gMCA/IDEgOiAtMTtcblxuICAgICAgICB3aGlsZSAodmlzaWJsZU9wdGlvbnNbbmV4dEFjdGl2ZU9wdGlvbkluZGV4XS5pc0dyb3VwTGFiZWwgfHwgdmlzaWJsZU9wdGlvbnNbbmV4dEFjdGl2ZU9wdGlvbkluZGV4XS5kaXNhYmxlZCkge1xuICAgICAgICAgIG5leHRBY3RpdmVPcHRpb25JbmRleCA9IG5leHRBY3RpdmVPcHRpb25JbmRleCArIGRpcmVjdGlvbjtcblxuICAgICAgICAgIGlmIChuZXh0QWN0aXZlT3B0aW9uSW5kZXggPCAwKSB7XG4gICAgICAgICAgICBuZXh0QWN0aXZlT3B0aW9uSW5kZXggPSB2aXNpYmxlT3B0aW9ucy5sZW5ndGggLSAxO1xuICAgICAgICAgIH0gZWxzZSBpZiAobmV4dEFjdGl2ZU9wdGlvbkluZGV4ID09PSB2aXNpYmxlT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIG5leHRBY3RpdmVPcHRpb25JbmRleCA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBhY3RpdmVPcHRpb25JbmRleDogbmV4dEFjdGl2ZU9wdGlvbkluZGV4XG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvblNlYXJjaENoYW5nZVwiLCBmdW5jdGlvbiAoc2VhcmNoVmFsdWUsIHZpc2libGVPcHRpb25zKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMkc2VhcmNoUHJvLCBfdGhpcyRwcm9wcyRzZWFyY2hQcm8yO1xuXG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHNlYXJjaFZhbHVlOiBzZWFyY2hWYWx1ZSxcbiAgICAgICAgdmlzaWJsZU9wdGlvbnM6IHZpc2libGVPcHRpb25zLFxuICAgICAgICBhY3RpdmVPcHRpb25JbmRleDogdW5kZWZpbmVkXG4gICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChfdGhpcy5zdGF0ZS5pc0ZvY3VzZWQpIHtcbiAgICAgICAgICBfdGhpcy5vbkZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAoX3RoaXMkcHJvcHMkc2VhcmNoUHJvID0gX3RoaXMucHJvcHMuc2VhcmNoUHJvcHMpID09PSBudWxsIHx8IF90aGlzJHByb3BzJHNlYXJjaFBybyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF90aGlzJHByb3BzJHNlYXJjaFBybzIgPSBfdGhpcyRwcm9wcyRzZWFyY2hQcm8ub25DaGFuZ2UpID09PSBudWxsIHx8IF90aGlzJHByb3BzJHNlYXJjaFBybzIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJHByb3BzJHNlYXJjaFBybzIuY2FsbChfdGhpcyRwcm9wcyRzZWFyY2hQcm8sIHNlYXJjaFZhbHVlLCB2aXNpYmxlT3B0aW9ucyk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25Db250YWluZXJCbHVyXCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICB2YXIgX2UkcmVsYXRlZFRhcmdldCwgX2UkcmVsYXRlZFRhcmdldCRmaXJzO1xuXG4gICAgICAvLyBJZ25vcmUgYmx1ciBldmVudHMgd2hlbiBtb3ZpbmcgZnJvbSBzZWFyY2ggdG8gb3B0aW9uIHRvIGF2b2lkIGFjdGl2ZU9wdGlvbkluZGV4IGNvbmZsaWN0c1xuICAgICAgaWYgKCgoX2UkcmVsYXRlZFRhcmdldCA9IGUucmVsYXRlZFRhcmdldCkgPT09IG51bGwgfHwgX2UkcmVsYXRlZFRhcmdldCA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9lJHJlbGF0ZWRUYXJnZXQkZmlycyA9IF9lJHJlbGF0ZWRUYXJnZXQuZmlyc3RDaGlsZCkgPT09IG51bGwgfHwgX2UkcmVsYXRlZFRhcmdldCRmaXJzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZSRyZWxhdGVkVGFyZ2V0JGZpcnMuaWQpID09PSBfdGhpcy5saXN0SWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4OiB1bmRlZmluZWQsXG4gICAgICAgIGlzRm9jdXNlZDogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uT3B0aW9uQ2xpY2tcIiwgZnVuY3Rpb24gKG9wdGlvbnMsIGV2ZW50KSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBpc1ByZUZpbHRlcmVkID0gX3RoaXMkcHJvcHMuaXNQcmVGaWx0ZXJlZCxcbiAgICAgICAgICBvbkNoYW5nZSA9IF90aGlzJHByb3BzLm9uQ2hhbmdlO1xuICAgICAgdmFyIHNlYXJjaFZhbHVlID0gX3RoaXMuc3RhdGUuc2VhcmNoVmFsdWU7XG4gICAgICB2YXIgdmlzaWJsZU9wdGlvbnMgPSBnZXRNYXRjaGluZ09wdGlvbnMob3B0aW9ucywgc2VhcmNoVmFsdWUsIGlzUHJlRmlsdGVyZWQpO1xuXG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHZpc2libGVPcHRpb25zOiB2aXNpYmxlT3B0aW9uc1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChvbkNoYW5nZSkge1xuICAgICAgICBvbkNoYW5nZShvcHRpb25zLCBldmVudCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic2Nyb2xsVG9JdGVtXCIsIGZ1bmN0aW9uIChpbmRleCwgYWxpZ24pIHtcbiAgICAgIHZhciBfdGhpcyRvcHRpb25zTGlzdFJlZiQzLCBfdGhpcyRvcHRpb25zTGlzdFJlZiQ0O1xuXG4gICAgICAoX3RoaXMkb3B0aW9uc0xpc3RSZWYkMyA9IF90aGlzLm9wdGlvbnNMaXN0UmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF90aGlzJG9wdGlvbnNMaXN0UmVmJDMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfdGhpcyRvcHRpb25zTGlzdFJlZiQ0ID0gX3RoaXMkb3B0aW9uc0xpc3RSZWYkMy5saXN0UmVmKSA9PT0gbnVsbCB8fCBfdGhpcyRvcHRpb25zTGlzdFJlZiQ0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRvcHRpb25zTGlzdFJlZiQ0LnNjcm9sbFRvSXRlbShpbmRleCwgYWxpZ24pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm1ha2VPcHRpb25JZFwiLCBmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgIHJldHVybiBpbmRleCAhPSBudWxsID8gXCJcIi5jb25jYXQoX3RoaXMubGlzdElkLCBcIl9vcHRpb24tXCIpLmNvbmNhdChpbmRleCkgOiAnJztcbiAgICB9KTtcblxuICAgIF90aGlzLnJvb3RJZCA9IHByb3BzLmlkID8gZnVuY3Rpb24gKHN1ZmZpeCkge1xuICAgICAgcmV0dXJuIFwiXCIuY29uY2F0KHByb3BzLmlkKS5jb25jYXQoc3VmZml4ID8gXCJfXCIuY29uY2F0KHN1ZmZpeCkgOiAnJyk7XG4gICAgfSA6IGh0bWxJZEdlbmVyYXRvcigpO1xuICAgIF90aGlzLmxpc3RJZCA9IF90aGlzLnJvb3RJZCgnbGlzdGJveCcpO1xuICAgIF90aGlzLm1lc3NhZ2VDb250ZW50SWQgPSBfdGhpcy5yb290SWQoJ21lc3NhZ2VDb250ZW50Jyk7XG4gICAgdmFyIF9vcHRpb25zID0gcHJvcHMub3B0aW9ucyxcbiAgICAgICAgc2luZ2xlU2VsZWN0aW9uID0gcHJvcHMuc2luZ2xlU2VsZWN0aW9uLFxuICAgICAgICBfaXNQcmVGaWx0ZXJlZCA9IHByb3BzLmlzUHJlRmlsdGVyZWQsXG4gICAgICAgIHNlYXJjaFByb3BzID0gcHJvcHMuc2VhcmNoUHJvcHM7XG4gICAgdmFyIGluaXRpYWxTZWFyY2hWYWx1ZSA9IChzZWFyY2hQcm9wcyA9PT0gbnVsbCB8fCBzZWFyY2hQcm9wcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VhcmNoUHJvcHMudmFsdWUpIHx8IFN0cmluZygoc2VhcmNoUHJvcHMgPT09IG51bGwgfHwgc2VhcmNoUHJvcHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlYXJjaFByb3BzLmRlZmF1bHRWYWx1ZSkgfHwgJycpO1xuXG4gICAgdmFyIF92aXNpYmxlT3B0aW9ucyA9IGdldE1hdGNoaW5nT3B0aW9ucyhfb3B0aW9ucywgaW5pdGlhbFNlYXJjaFZhbHVlLCBfaXNQcmVGaWx0ZXJlZCk7XG5cbiAgICBzZWFyY2hQcm9wcyA9PT0gbnVsbCB8fCBzZWFyY2hQcm9wcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9zZWFyY2hQcm9wcyRvbkNoYW5nZSA9IHNlYXJjaFByb3BzLm9uQ2hhbmdlKSA9PT0gbnVsbCB8fCBfc2VhcmNoUHJvcHMkb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9zZWFyY2hQcm9wcyRvbkNoYW5nZS5jYWxsKHNlYXJjaFByb3BzLCBpbml0aWFsU2VhcmNoVmFsdWUsIF92aXNpYmxlT3B0aW9ucyk7IC8vIGVuc3VyZSB0aGF0IHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgc2luZ2xlIG9wdGlvbiBpcyBhY3RpdmUgaWYgaXQgaXMgaW4gdGhlIHZpc2libGVPcHRpb25zXG5cbiAgICB2YXIgc2VsZWN0ZWRPcHRpb25zID0gX29wdGlvbnMuZmlsdGVyKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgIHJldHVybiBvcHRpb24uY2hlY2tlZDtcbiAgICB9KTtcblxuICAgIHZhciBfYWN0aXZlT3B0aW9uSW5kZXg7XG5cbiAgICBpZiAoc2luZ2xlU2VsZWN0aW9uICYmIHNlbGVjdGVkT3B0aW9ucy5sZW5ndGggPT09IDEpIHtcbiAgICAgIGlmIChfdmlzaWJsZU9wdGlvbnMuaW5jbHVkZXMoc2VsZWN0ZWRPcHRpb25zWzBdKSkge1xuICAgICAgICBfYWN0aXZlT3B0aW9uSW5kZXggPSBfdmlzaWJsZU9wdGlvbnMuaW5kZXhPZihzZWxlY3RlZE9wdGlvbnNbMF0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgYWN0aXZlT3B0aW9uSW5kZXg6IF9hY3RpdmVPcHRpb25JbmRleCxcbiAgICAgIHNlYXJjaFZhbHVlOiBpbml0aWFsU2VhcmNoVmFsdWUsXG4gICAgICB2aXNpYmxlT3B0aW9uczogX3Zpc2libGVPcHRpb25zLFxuICAgICAgaXNGb2N1c2VkOiBmYWxzZVxuICAgIH07XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEV1aVNlbGVjdGFibGUsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZFVwZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUpIHtcbiAgICAgIGlmIChwcmV2U3RhdGUuYWN0aXZlT3B0aW9uSW5kZXggIT09IHRoaXMuc3RhdGUuYWN0aXZlT3B0aW9uSW5kZXgpIHtcbiAgICAgICAgdmFyIF90aGlzJHByb3BzJG9uQWN0aXZlTywgX3RoaXMkcHJvcHMyO1xuXG4gICAgICAgIHZhciBhY3RpdmVPcHRpb24gPSB0aGlzLnN0YXRlLmFjdGl2ZU9wdGlvbkluZGV4ICE9IG51bGwgPyB0aGlzLnN0YXRlLnZpc2libGVPcHRpb25zW3RoaXMuc3RhdGUuYWN0aXZlT3B0aW9uSW5kZXhdIDogbnVsbDtcbiAgICAgICAgKF90aGlzJHByb3BzJG9uQWN0aXZlTyA9IChfdGhpcyRwcm9wczIgPSB0aGlzLnByb3BzKS5vbkFjdGl2ZU9wdGlvbkNoYW5nZSkgPT09IG51bGwgfHwgX3RoaXMkcHJvcHMkb25BY3RpdmVPID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRwcm9wcyRvbkFjdGl2ZU8uY2FsbChfdGhpcyRwcm9wczIsIGFjdGl2ZU9wdGlvbik7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdmFyIF90aGlzJHByb3BzMyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wczMuY2hpbGRyZW4sXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMzLmNsYXNzTmFtZSxcbiAgICAgICAgICBvcHRpb25zID0gX3RoaXMkcHJvcHMzLm9wdGlvbnMsXG4gICAgICAgICAgb25DaGFuZ2UgPSBfdGhpcyRwcm9wczMub25DaGFuZ2UsXG4gICAgICAgICAgb25BY3RpdmVPcHRpb25DaGFuZ2UgPSBfdGhpcyRwcm9wczMub25BY3RpdmVPcHRpb25DaGFuZ2UsXG4gICAgICAgICAgc2VhcmNoYWJsZSA9IF90aGlzJHByb3BzMy5zZWFyY2hhYmxlLFxuICAgICAgICAgIHNlYXJjaFByb3BzID0gX3RoaXMkcHJvcHMzLnNlYXJjaFByb3BzLFxuICAgICAgICAgIHNpbmdsZVNlbGVjdGlvbiA9IF90aGlzJHByb3BzMy5zaW5nbGVTZWxlY3Rpb24sXG4gICAgICAgICAgaXNMb2FkaW5nID0gX3RoaXMkcHJvcHMzLmlzTG9hZGluZyxcbiAgICAgICAgICBsaXN0UHJvcHMgPSBfdGhpcyRwcm9wczMubGlzdFByb3BzLFxuICAgICAgICAgIHJlbmRlck9wdGlvbiA9IF90aGlzJHByb3BzMy5yZW5kZXJPcHRpb24sXG4gICAgICAgICAgaGVpZ2h0ID0gX3RoaXMkcHJvcHMzLmhlaWdodCxcbiAgICAgICAgICBhbGxvd0V4Y2x1c2lvbnMgPSBfdGhpcyRwcm9wczMuYWxsb3dFeGNsdXNpb25zLFxuICAgICAgICAgIGFyaWFMYWJlbCA9IF90aGlzJHByb3BzM1snYXJpYS1sYWJlbCddLFxuICAgICAgICAgIGFyaWFEZXNjcmliZWRieSA9IF90aGlzJHByb3BzM1snYXJpYS1kZXNjcmliZWRieSddLFxuICAgICAgICAgIGxvYWRpbmdNZXNzYWdlID0gX3RoaXMkcHJvcHMzLmxvYWRpbmdNZXNzYWdlLFxuICAgICAgICAgIG5vTWF0Y2hlc01lc3NhZ2UgPSBfdGhpcyRwcm9wczMubm9NYXRjaGVzTWVzc2FnZSxcbiAgICAgICAgICBlbXB0eU1lc3NhZ2UgPSBfdGhpcyRwcm9wczMuZW1wdHlNZXNzYWdlLFxuICAgICAgICAgIGVycm9yTWVzc2FnZSA9IF90aGlzJHByb3BzMy5lcnJvck1lc3NhZ2UsXG4gICAgICAgICAgaXNQcmVGaWx0ZXJlZCA9IF90aGlzJHByb3BzMy5pc1ByZUZpbHRlcmVkLFxuICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMzLCBfZXhjbHVkZWQpO1xuXG4gICAgICB2YXIgX3RoaXMkc3RhdGUgPSB0aGlzLnN0YXRlLFxuICAgICAgICAgIHNlYXJjaFZhbHVlID0gX3RoaXMkc3RhdGUuc2VhcmNoVmFsdWUsXG4gICAgICAgICAgdmlzaWJsZU9wdGlvbnMgPSBfdGhpcyRzdGF0ZS52aXNpYmxlT3B0aW9ucyxcbiAgICAgICAgICBhY3RpdmVPcHRpb25JbmRleCA9IF90aGlzJHN0YXRlLmFjdGl2ZU9wdGlvbkluZGV4OyAvLyBTb21lIG1lc3N5IGRlc3RydWN0dXJpbmcgaGVyZSB0byByZW1vdmUgYXJpYS1sYWJlbC9kZXNjcmliZWRieSBmcm9tIHNlYXJjaFByb3BzIGFuZCBsaXN0UHJvcHNcbiAgICAgIC8vIE1hZGUgbWVzc2llciBieSBzb21lIFRTIHJlcXVpcmVtZW50c1xuICAgICAgLy8gVGhlIGFyaWEgYXR0cmlidXRlcyBhcmUgdGhlbiB1c2VkIGluIGdldEFjY2Vzc2libGVOYW1lKCkgdG8gcGxhY2UgdGhlbSB3aGVyZSB0aGV5IG5lZWQgdG8gZ29cblxuICAgICAgdmFyIHVua25vd25BY2Nlc3NpYmxlTmFtZSA9IHtcbiAgICAgICAgJ2FyaWEtbGFiZWwnOiB1bmRlZmluZWQsXG4gICAgICAgICdhcmlhLWRlc2NyaWJlZGJ5JzogdW5kZWZpbmVkXG4gICAgICB9O1xuXG4gICAgICB2YXIgX3JlZjIgPSBzZWFyY2hQcm9wcyB8fCB1bmtub3duQWNjZXNzaWJsZU5hbWUsXG4gICAgICAgICAgc2VhcmNoQXJpYUxhYmVsID0gX3JlZjJbJ2FyaWEtbGFiZWwnXSxcbiAgICAgICAgICBzZWFyY2hBcmlhRGVzY3JpYmVkYnkgPSBfcmVmMlsnYXJpYS1kZXNjcmliZWRieSddLFxuICAgICAgICAgIHByb3BzT25DaGFuZ2UgPSBfcmVmMi5vbkNoYW5nZSxcbiAgICAgICAgICBkZWZhdWx0VmFsdWUgPSBfcmVmMi5kZWZhdWx0VmFsdWUsXG4gICAgICAgICAgaW5wdXRSZWYgPSBfcmVmMi5pbnB1dFJlZixcbiAgICAgICAgICBjbGVhbmVkU2VhcmNoUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZjIsIF9leGNsdWRlZDIpO1xuXG4gICAgICB2YXIgX3JlZjMgPSBsaXN0UHJvcHMgfHwgdW5rbm93bkFjY2Vzc2libGVOYW1lLFxuICAgICAgICAgIGxpc3RBcmlhTGFiZWwgPSBfcmVmM1snYXJpYS1sYWJlbCddLFxuICAgICAgICAgIGxpc3RBcmlhRGVzY3JpYmVkYnkgPSBfcmVmM1snYXJpYS1kZXNjcmliZWRieSddLFxuICAgICAgICAgIGlzVmlydHVhbGl6ZWQgPSBfcmVmMy5pc1ZpcnR1YWxpemVkLFxuICAgICAgICAgIHJvd0hlaWdodCA9IF9yZWYzLnJvd0hlaWdodCxcbiAgICAgICAgICBjbGVhbmVkTGlzdFByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYzLCBfZXhjbHVkZWQzKTtcblxuICAgICAgdmFyIHZpcnR1YWxpemVkUHJvcHM7XG5cbiAgICAgIGlmIChpc1ZpcnR1YWxpemVkID09PSBmYWxzZSkge1xuICAgICAgICB2aXJ0dWFsaXplZFByb3BzID0ge1xuICAgICAgICAgIGlzVmlydHVhbGl6ZWQ6IGlzVmlydHVhbGl6ZWRcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAocm93SGVpZ2h0ICE9IG51bGwpIHtcbiAgICAgICAgdmlydHVhbGl6ZWRQcm9wcyA9IHtcbiAgICAgICAgICByb3dIZWlnaHQ6IHJvd0hlaWdodFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVNlbGVjdGFibGUnLCB7XG4gICAgICAgICdldWlTZWxlY3RhYmxlLWZ1bGxIZWlnaHQnOiBoZWlnaHQgPT09ICdmdWxsJ1xuICAgICAgfSwgY2xhc3NOYW1lKTtcbiAgICAgIC8qKiBDcmVhdGUgbWVzc2FnZSBjb250ZW50IHRoYXQgcmVwbGFjZXMgdGhlIGxpc3QgaWYgbm8gb3B0aW9ucyBhcmUgYXZhaWxhYmxlICh5ZXQpICovXG5cbiAgICAgIHZhciBtZXNzYWdlQ29udGVudDtcblxuICAgICAgaWYgKGVycm9yTWVzc2FnZSAhPSBudWxsKSB7XG4gICAgICAgIG1lc3NhZ2VDb250ZW50ID0gdHlwZW9mIGVycm9yTWVzc2FnZSA9PT0gJ3N0cmluZycgPyBfX19FbW90aW9uSlNYKFwicFwiLCBudWxsLCBlcnJvck1lc3NhZ2UpIDogZXJyb3JNZXNzYWdlO1xuICAgICAgfSBlbHNlIGlmIChpc0xvYWRpbmcpIHtcbiAgICAgICAgaWYgKGxvYWRpbmdNZXNzYWdlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIGxvYWRpbmdNZXNzYWdlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIG1lc3NhZ2VDb250ZW50ID0gX19fRW1vdGlvbkpTWChSZWFjdC5GcmFnbWVudCwgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlMb2FkaW5nU3Bpbm5lciwge1xuICAgICAgICAgICAgc2l6ZTogXCJtXCJcbiAgICAgICAgICB9KSwgX19fRW1vdGlvbkpTWChFdWlTcGFjZXIsIHtcbiAgICAgICAgICAgIHNpemU6IFwieHNcIlxuICAgICAgICAgIH0pLCBfX19FbW90aW9uSlNYKFwicFwiLCBudWxsLCBsb2FkaW5nTWVzc2FnZSB8fCBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICAgIHRva2VuOiBcImV1aVNlbGVjdGFibGUubG9hZGluZ09wdGlvbnNcIixcbiAgICAgICAgICAgIGRlZmF1bHQ6IFwiTG9hZGluZyBvcHRpb25zXCJcbiAgICAgICAgICB9KSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG1lc3NhZ2VDb250ZW50ID0gLyojX19QVVJFX18qL1JlYWN0LmNsb25lRWxlbWVudChsb2FkaW5nTWVzc2FnZSwgX29iamVjdFNwcmVhZCh7XG4gICAgICAgICAgICBpZDogdGhpcy5tZXNzYWdlQ29udGVudElkXG4gICAgICAgICAgfSwgbG9hZGluZ01lc3NhZ2UucHJvcHMpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChzZWFyY2hWYWx1ZSAmJiB2aXNpYmxlT3B0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgaWYgKG5vTWF0Y2hlc01lc3NhZ2UgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2Ygbm9NYXRjaGVzTWVzc2FnZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBtZXNzYWdlQ29udGVudCA9IF9fX0Vtb3Rpb25KU1goXCJwXCIsIG51bGwsIG5vTWF0Y2hlc01lc3NhZ2UgfHwgX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgICB0b2tlbjogXCJldWlTZWxlY3RhYmxlLm5vTWF0Y2hpbmdPcHRpb25zXCIsXG4gICAgICAgICAgICBkZWZhdWx0OiBcIntzZWFyY2hWYWx1ZX0gZG9lc24ndCBtYXRjaCBhbnkgb3B0aW9uc1wiLFxuICAgICAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgICAgIHNlYXJjaFZhbHVlOiBfX19FbW90aW9uSlNYKFwic3Ryb25nXCIsIG51bGwsIHNlYXJjaFZhbHVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBtZXNzYWdlQ29udGVudCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQobm9NYXRjaGVzTWVzc2FnZSwgX29iamVjdFNwcmVhZCh7XG4gICAgICAgICAgICBpZDogdGhpcy5tZXNzYWdlQ29udGVudElkXG4gICAgICAgICAgfSwgbm9NYXRjaGVzTWVzc2FnZS5wcm9wcykpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFvcHRpb25zLmxlbmd0aCkge1xuICAgICAgICBpZiAoZW1wdHlNZXNzYWdlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIGVtcHR5TWVzc2FnZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBtZXNzYWdlQ29udGVudCA9IF9fX0Vtb3Rpb25KU1goXCJwXCIsIG51bGwsIGVtcHR5TWVzc2FnZSB8fCBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICAgIHRva2VuOiBcImV1aVNlbGVjdGFibGUubm9BdmFpbGFibGVPcHRpb25zXCIsXG4gICAgICAgICAgICBkZWZhdWx0OiBcIk5vIG9wdGlvbnMgYXZhaWxhYmxlXCJcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbWVzc2FnZUNvbnRlbnQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY2xvbmVFbGVtZW50KGVtcHR5TWVzc2FnZSwgX29iamVjdFNwcmVhZCh7XG4gICAgICAgICAgICBpZDogdGhpcy5tZXNzYWdlQ29udGVudElkXG4gICAgICAgICAgfSwgZW1wdHlNZXNzYWdlLnByb3BzKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8qKlxuICAgICAgICogVGhlcmUgYXJlIGxvdHMgb2Ygd2F5cyB0byBhZGQgYW4gYWNjZXNzaWJsZSBuYW1lXG4gICAgICAgKiBVc3VhbGx5IHdlIHdhbnQgdGhlIHNhbWUgbmFtZSBmb3IgdGhlIGlucHV0IGFuZCB0aGUgbGlzdGJveCAod2hpY2ggaXMgYWRkZWQgYnkgYXJpYS1sYWJlbC9kZXNjcmliZWRieSlcbiAgICAgICAqIEJ1dCB5b3UgY2FuIGFsd2F5cyBvdmVycmlkZSBpdCB1c2luZyBzZWFyY2hQcm9wcyBvciBsaXN0UHJvcHNcbiAgICAgICAqIFRoaXMgZmluZHMgdGhlIGNvcnJlY3QgbmFtZSB0byB1c2VcbiAgICAgICAqXG4gICAgICAgKiBUT0RPOiBUaGlzIGRvZXNuJ3QgaGFuZGxlIGJlaW5nIGxhYmVsbGVkICg8bGFiZWwgZm9yPVwiaWRPZklucHV0XCI+KVxuICAgICAgICovXG5cblxuICAgICAgdmFyIGdldEFjY2Vzc2libGVOYW1lID0gZnVuY3Rpb24gZ2V0QWNjZXNzaWJsZU5hbWUocHJvcHMsIG1lc3NhZ2VDb250ZW50SWQpIHtcbiAgICAgICAgaWYgKHByb3BzICYmIHByb3BzWydhcmlhLWxhYmVsJ10pIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2FyaWEtbGFiZWwnOiBwcm9wc1snYXJpYS1sYWJlbCddXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBtZXNzYWdlQ29udGVudElkU3RyaW5nID0gbWVzc2FnZUNvbnRlbnRJZCA/IFwiIFwiLmNvbmNhdChtZXNzYWdlQ29udGVudElkKSA6ICcnO1xuXG4gICAgICAgIGlmIChwcm9wcyAmJiBwcm9wc1snYXJpYS1kZXNjcmliZWRieSddKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdhcmlhLWRlc2NyaWJlZGJ5JzogXCJcIi5jb25jYXQocHJvcHNbJ2FyaWEtZGVzY3JpYmVkYnknXSkuY29uY2F0KG1lc3NhZ2VDb250ZW50SWRTdHJpbmcpXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhcmlhTGFiZWwpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2FyaWEtbGFiZWwnOiBhcmlhTGFiZWxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFyaWFEZXNjcmliZWRieSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnYXJpYS1kZXNjcmliZWRieSc6IFwiXCIuY29uY2F0KGFyaWFEZXNjcmliZWRieSkuY29uY2F0KG1lc3NhZ2VDb250ZW50SWRTdHJpbmcpXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH07XG5cbiAgICAgIHZhciBzZWFyY2hBY2Nlc3NpYmxlTmFtZSA9IGdldEFjY2Vzc2libGVOYW1lKHNlYXJjaFByb3BzLCB0aGlzLm1lc3NhZ2VDb250ZW50SWQpO1xuICAgICAgdmFyIHNlYXJjaEhhc0FjY2Vzc2libGVOYW1lID0gQm9vbGVhbihPYmplY3Qua2V5cyhzZWFyY2hBY2Nlc3NpYmxlTmFtZSkubGVuZ3RoKTtcbiAgICAgIHZhciBzZWFyY2ggPSBzZWFyY2hhYmxlID8gX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgIHRva2VuOiBcImV1aVNlbGVjdGFibGUucGxhY2Vob2xkZXJOYW1lXCIsXG4gICAgICAgIGRlZmF1bHQ6IFwiRmlsdGVyIG9wdGlvbnNcIlxuICAgICAgfSwgZnVuY3Rpb24gKHBsYWNlaG9sZGVyTmFtZSkge1xuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlTZWxlY3RhYmxlU2VhcmNoLCBfZXh0ZW5kcyh7XG4gICAgICAgICAga2V5OiBcImxpc3RTZWFyY2hcIixcbiAgICAgICAgICBvcHRpb25zOiBvcHRpb25zLFxuICAgICAgICAgIHZhbHVlOiBzZWFyY2hWYWx1ZSxcbiAgICAgICAgICBvbkNoYW5nZTogX3RoaXMyLm9uU2VhcmNoQ2hhbmdlLFxuICAgICAgICAgIGxpc3RJZDogX3RoaXMyLm9wdGlvbnNMaXN0UmVmLmN1cnJlbnQgPyBfdGhpczIubGlzdElkIDogdW5kZWZpbmVkIC8vIE9ubHkgcGFzcyB0aGUgbGlzdElkIGlmIGl0IGV4aXN0cyBvbiB0aGUgcGFnZVxuICAgICAgICAgICxcbiAgICAgICAgICBcImFyaWEtYWN0aXZlZGVzY2VuZGFudFwiOiBfdGhpczIubWFrZU9wdGlvbklkKGFjdGl2ZU9wdGlvbkluZGV4KSAvLyB0aGUgY3VycmVudCBmYXV4LWZvY3VzZWQgb3B0aW9uXG4gICAgICAgICAgLFxuICAgICAgICAgIHBsYWNlaG9sZGVyOiBwbGFjZWhvbGRlck5hbWUsXG4gICAgICAgICAgaXNQcmVGaWx0ZXJlZDogaXNQcmVGaWx0ZXJlZCAhPT0gbnVsbCAmJiBpc1ByZUZpbHRlcmVkICE9PSB2b2lkIDAgPyBpc1ByZUZpbHRlcmVkIDogZmFsc2UsXG4gICAgICAgICAgaW5wdXRSZWY6IGZ1bmN0aW9uIGlucHV0UmVmKG5vZGUpIHtcbiAgICAgICAgICAgIHZhciBfc2VhcmNoUHJvcHMkaW5wdXRSZWY7XG5cbiAgICAgICAgICAgIF90aGlzMi5pbnB1dFJlZiA9IG5vZGU7XG4gICAgICAgICAgICBzZWFyY2hQcm9wcyA9PT0gbnVsbCB8fCBzZWFyY2hQcm9wcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9zZWFyY2hQcm9wcyRpbnB1dFJlZiA9IHNlYXJjaFByb3BzLmlucHV0UmVmKSA9PT0gbnVsbCB8fCBfc2VhcmNoUHJvcHMkaW5wdXRSZWYgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9zZWFyY2hQcm9wcyRpbnB1dFJlZi5jYWxsKHNlYXJjaFByb3BzLCBub2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIHNlYXJjaEhhc0FjY2Vzc2libGVOYW1lID8gc2VhcmNoQWNjZXNzaWJsZU5hbWUgOiB7XG4gICAgICAgICAgJ2FyaWEtbGFiZWwnOiBwbGFjZWhvbGRlck5hbWVcbiAgICAgICAgfSwgY2xlYW5lZFNlYXJjaFByb3BzKSk7XG4gICAgICB9KSA6IHVuZGVmaW5lZDtcbiAgICAgIHZhciByZXN1bHRzTGVuZ3RoID0gdmlzaWJsZU9wdGlvbnMuZmlsdGVyKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgcmV0dXJuICFvcHRpb24uZGlzYWJsZWQ7XG4gICAgICB9KS5sZW5ndGg7XG5cbiAgICAgIHZhciBsaXN0U2NyZWVuUmVhZGVyU3RhdHVzID0gc2VhcmNoYWJsZSAmJiBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgdG9rZW46IFwiZXVpU2VsZWN0YWJsZS5zZWFyY2hSZXN1bHRzXCIsXG4gICAgICAgIGRlZmF1bHQ6IGZ1bmN0aW9uIF9kZWZhdWx0KF9yZWY0KSB7XG4gICAgICAgICAgdmFyIHJlc3VsdHNMZW5ndGggPSBfcmVmNC5yZXN1bHRzTGVuZ3RoO1xuICAgICAgICAgIHJldHVybiBcIlwiLmNvbmNhdChyZXN1bHRzTGVuZ3RoLCBcIiByZXN1bHRcIikuY29uY2F0KHJlc3VsdHNMZW5ndGggPT09IDEgPyAnJyA6ICdzJywgXCIgYXZhaWxhYmxlXCIpO1xuICAgICAgICB9LFxuICAgICAgICB2YWx1ZXM6IHtcbiAgICAgICAgICByZXN1bHRzTGVuZ3RoOiByZXN1bHRzTGVuZ3RoXG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB2YXIgbGlzdEFyaWFEZXNjcmliZWRieUlkID0gdGhpcy5yb290SWQoJ2luc3RydWN0aW9ucycpO1xuICAgICAgdmFyIGxpc3RBY2Nlc3NpYmxlTmFtZSA9IGdldEFjY2Vzc2libGVOYW1lKGxpc3RQcm9wcywgbGlzdEFyaWFEZXNjcmliZWRieUlkKTtcbiAgICAgIHZhciBsaXN0SGFzQWNjZXNzaWJsZU5hbWUgPSBCb29sZWFuKE9iamVjdC5rZXlzKGxpc3RBY2Nlc3NpYmxlTmFtZSkubGVuZ3RoKTtcblxuICAgICAgdmFyIGxpc3QgPSBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgdG9rZW5zOiBbJ2V1aVNlbGVjdGFibGUuc2NyZWVuUmVhZGVySW5zdHJ1Y3Rpb25zJywgJ2V1aVNlbGVjdGFibGUucGxhY2Vob2xkZXJOYW1lJ10sXG4gICAgICAgIGRlZmF1bHRzOiBbJ1VzZSB1cCBhbmQgZG93biBhcnJvd3MgdG8gbW92ZSBmb2N1cyBvdmVyIG9wdGlvbnMuIEVudGVyIHRvIHNlbGVjdC4gRXNjYXBlIHRvIGNvbGxhcHNlIG9wdGlvbnMuJywgJ0ZpbHRlciBvcHRpb25zJ11cbiAgICAgIH0sIGZ1bmN0aW9uIChfcmVmNSkge1xuICAgICAgICB2YXIgX3JlZjYgPSBfc2xpY2VkVG9BcnJheShfcmVmNSwgMiksXG4gICAgICAgICAgICBwbGFjZWhvbGRlck5hbWUgPSBfcmVmNlswXSxcbiAgICAgICAgICAgIHNjcmVlblJlYWRlckluc3RydWN0aW9ucyA9IF9yZWY2WzFdO1xuXG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFJlYWN0LkZyYWdtZW50LCBudWxsLCBzZWFyY2hhYmxlICYmIF9fX0Vtb3Rpb25KU1goRXVpU2NyZWVuUmVhZGVyTGl2ZSwge1xuICAgICAgICAgIGlzQWN0aXZlOiBtZXNzYWdlQ29udGVudCAhPSBudWxsIHx8IGFjdGl2ZU9wdGlvbkluZGV4ICE9IG51bGxcbiAgICAgICAgfSwgbWVzc2FnZUNvbnRlbnQgfHwgbGlzdFNjcmVlblJlYWRlclN0YXR1cyksIF9fX0Vtb3Rpb25KU1goRXVpU2NyZWVuUmVhZGVyT25seSwgbnVsbCwgX19fRW1vdGlvbkpTWChcInBcIiwge1xuICAgICAgICAgIGlkOiBsaXN0QXJpYURlc2NyaWJlZGJ5SWRcbiAgICAgICAgfSwgc2NyZWVuUmVhZGVySW5zdHJ1Y3Rpb25zKSksIG1lc3NhZ2VDb250ZW50ID8gX19fRW1vdGlvbkpTWChFdWlTZWxlY3RhYmxlTWVzc2FnZSwge1xuICAgICAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogXCJldWlTZWxlY3RhYmxlTWVzc2FnZVwiLFxuICAgICAgICAgIGlkOiBfdGhpczIubWVzc2FnZUNvbnRlbnRJZCxcbiAgICAgICAgICBib3JkZXJlZDogbGlzdFByb3BzICYmIGxpc3RQcm9wcy5ib3JkZXJlZFxuICAgICAgICB9LCBtZXNzYWdlQ29udGVudCkgOiBfX19FbW90aW9uSlNYKEV1aVNlbGVjdGFibGVMaXN0LCBfZXh0ZW5kcyh7XG4gICAgICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcImV1aVNlbGVjdGFibGVMaXN0XCIsXG4gICAgICAgICAga2V5OiBcImxpc3RcIixcbiAgICAgICAgICBvcHRpb25zOiBvcHRpb25zLFxuICAgICAgICAgIHZpc2libGVPcHRpb25zOiB2aXNpYmxlT3B0aW9ucyxcbiAgICAgICAgICBzZWFyY2hWYWx1ZTogc2VhcmNoVmFsdWUsXG4gICAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXg6IGFjdGl2ZU9wdGlvbkluZGV4LFxuICAgICAgICAgIHNldEFjdGl2ZU9wdGlvbkluZGV4OiBmdW5jdGlvbiBzZXRBY3RpdmVPcHRpb25JbmRleChpbmRleCwgY2IpIHtcbiAgICAgICAgICAgIF90aGlzMi5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4OiBpbmRleFxuICAgICAgICAgICAgfSwgY2IpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgb25PcHRpb25DbGljazogX3RoaXMyLm9uT3B0aW9uQ2xpY2ssXG4gICAgICAgICAgc2luZ2xlU2VsZWN0aW9uOiBzaW5nbGVTZWxlY3Rpb24sXG4gICAgICAgICAgcmVmOiBfdGhpczIub3B0aW9uc0xpc3RSZWYsXG4gICAgICAgICAgcmVuZGVyT3B0aW9uOiByZW5kZXJPcHRpb24sXG4gICAgICAgICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgICAgICAgYWxsb3dFeGNsdXNpb25zOiBhbGxvd0V4Y2x1c2lvbnMsXG4gICAgICAgICAgc2VhcmNoYWJsZTogc2VhcmNoYWJsZSxcbiAgICAgICAgICBtYWtlT3B0aW9uSWQ6IF90aGlzMi5tYWtlT3B0aW9uSWQsXG4gICAgICAgICAgbGlzdElkOiBfdGhpczIubGlzdElkXG4gICAgICAgIH0sIGxpc3RIYXNBY2Nlc3NpYmxlTmFtZSA/IGxpc3RBY2Nlc3NpYmxlTmFtZSA6IHNlYXJjaGFibGUgJiYge1xuICAgICAgICAgICdhcmlhLWxhYmVsJzogcGxhY2Vob2xkZXJOYW1lXG4gICAgICAgIH0sIGNsZWFuZWRMaXN0UHJvcHMsIHZpcnR1YWxpemVkUHJvcHMpKSk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgICAgICByZWY6IHRoaXMuY29udGFpbmVyUmVmLFxuICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgIG9uS2V5RG93bjogdGhpcy5vbktleURvd24sXG4gICAgICAgIG9uQmx1cjogdGhpcy5vbkNvbnRhaW5lckJsdXIsXG4gICAgICAgIG9uRm9jdXM6IHRoaXMub25Gb2N1cyxcbiAgICAgICAgb25Nb3VzZURvd246IHRoaXMub25Nb3VzZURvd25cbiAgICAgIH0sIHJlc3QpLCBjaGlsZHJlbiAmJiBjaGlsZHJlbihsaXN0LCBzZWFyY2gpKTtcbiAgICB9XG4gIH1dLCBbe1xuICAgIGtleTogXCJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKG5leHRQcm9wcywgcHJldlN0YXRlKSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IG5leHRQcm9wcy5vcHRpb25zLFxuICAgICAgICAgIGlzUHJlRmlsdGVyZWQgPSBuZXh0UHJvcHMuaXNQcmVGaWx0ZXJlZCxcbiAgICAgICAgICBzZWFyY2hQcm9wcyA9IG5leHRQcm9wcy5zZWFyY2hQcm9wcztcbiAgICAgIHZhciBhY3RpdmVPcHRpb25JbmRleCA9IHByZXZTdGF0ZS5hY3RpdmVPcHRpb25JbmRleCxcbiAgICAgICAgICBzZWFyY2hWYWx1ZSA9IHByZXZTdGF0ZS5zZWFyY2hWYWx1ZTtcbiAgICAgIHZhciBtYXRjaGluZ09wdGlvbnMgPSBnZXRNYXRjaGluZ09wdGlvbnMob3B0aW9ucywgc2VhcmNoVmFsdWUsIGlzUHJlRmlsdGVyZWQpO1xuICAgICAgdmFyIHN0YXRlVXBkYXRlID0ge1xuICAgICAgICB2aXNpYmxlT3B0aW9uczogbWF0Y2hpbmdPcHRpb25zLFxuICAgICAgICBhY3RpdmVPcHRpb25JbmRleDogYWN0aXZlT3B0aW9uSW5kZXhcbiAgICAgIH07XG5cbiAgICAgIGlmIChhY3RpdmVPcHRpb25JbmRleCAhPSBudWxsICYmIGFjdGl2ZU9wdGlvbkluZGV4ID49IG1hdGNoaW5nT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgc3RhdGVVcGRhdGUuYWN0aXZlT3B0aW9uSW5kZXggPSAtMTtcbiAgICAgIH1cblxuICAgICAgaWYgKChzZWFyY2hQcm9wcyA9PT0gbnVsbCB8fCBzZWFyY2hQcm9wcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VhcmNoUHJvcHMudmFsdWUpICE9IG51bGwgJiYgc2VhcmNoUHJvcHMudmFsdWUgIT09IHNlYXJjaFZhbHVlKSB7XG4gICAgICAgIHN0YXRlVXBkYXRlLnNlYXJjaFZhbHVlID0gc2VhcmNoUHJvcHMudmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzdGF0ZVVwZGF0ZTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gRXVpU2VsZWN0YWJsZTtcbn0oQ29tcG9uZW50KTtcblxuX2RlZmluZVByb3BlcnR5KEV1aVNlbGVjdGFibGUsIFwiZGVmYXVsdFByb3BzXCIsIHtcbiAgb3B0aW9uczogW10sXG4gIHNpbmdsZVNlbGVjdGlvbjogZmFsc2UsXG4gIHNlYXJjaGFibGU6IGZhbHNlLFxuICBpc1ByZUZpbHRlcmVkOiBmYWxzZVxufSk7XG5cbkV1aVNlbGVjdGFibGUucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICAgKiBIb29rcyB1cCBhIHNlYXJjaCBib3ggdG8gZmlsdGVyIHRoZSBsaXN0IChib29sZWFuKVxuICAgICAgICovXG4gIHNlYXJjaGFibGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbZmFsc2VdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2YoW3RydWVdKS5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICAgICAqIFBhc3NlcyBwcm9wcyBkb3duIHRvIHRoZSBgRXVpRmllbGRTZWFyY2hgLlxuICAgICAgICogU2VlICNFdWlTZWxlY3RhYmxlU2VhcmNoUHJvcHNcbiAgICAgICAqL1xuICBzZWFyY2hQcm9wczogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgICAqIEZ1bmN0aW9uIHRoYXQgdGFrZXMgdGhlIGBsaXN0YCBub2RlIGFuZCB0aGVuXG4gICAgICAgKiB0aGUgYHNlYXJjaGAgbm9kZSAoaWYgYHNlYXJjaGFibGVgIGlzIGFwcGxpZWQpXG4gICAgICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgICAgICogQXJyYXkgb2YgRXVpU2VsZWN0YWJsZU9wdGlvbiBvYmplY3RzLiBTZWUgI0V1aVNlbGVjdGFibGVPcHRpb25Qcm9wc1xuICAgICAgICovXG4gIG9wdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zaGFwZSh7XG4gICAgLyoqXG4gICAgICAgKiBPcHRpb25hbCBgYm9vbGVhbmAuXG4gICAgICAgKiBTZXQgdG8gYHRydWVgIHRvIGluZGljYXRlIG9iamVjdCBpcyBqdXN0IGEgZ3JvdXBpbmcgbGFiZWwsIG5vdCBhIHNlbGVjdGFibGUgaXRlbVxuICAgICAgICovXG4gICAgaXNHcm91cExhYmVsOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW3RydWVdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2YoW2ZhbHNlXSldKSxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gICAgLyoqXG4gICAgICAgKiBWaXNpYmxlIGxhYmVsIG9mIG9wdGlvbi5cbiAgICAgICAqIE11c3QgYmUgdW5pcXVlIGFjcm9zcyBpdGVtcyBpZiBga2V5YCBpcyBub3Qgc3VwcGxpZWRcbiAgICAgICAqL1xuICAgIGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gICAgLyoqXG4gICAgICAgKiBPcHRpb25hbGx5IGNoYW5nZSB0aGUgc2VhcmNoYWJsZSB0ZXJtIGJ5IHBhc3NpbmcgYSBkaWZmZXJlbnQgc3RyaW5nIG90aGVyIHRoYW4gdGhlIGBsYWJlbGAuXG4gICAgICAgKiBCZXN0IHVzZWQgd2hlbiBjcmVhdGluZyBhIGN1c3RvbSBgb3B0aW9uUmVuZGVyYCB0byBzZXBhcmF0ZSB0aGUgbGFiZWwgZnJvbSBtZXRhZGF0YSBidXQgYWxsb3dpbmcgdG8gc2VhcmNoIG9uIGJvdGhcbiAgICAgICAqL1xuICAgIHNlYXJjaGFibGVMYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcblxuICAgIC8qKlxuICAgICAgICogTXVzdCBiZSB1bmlxdWUgYWNyb3NzIGl0ZW1zLlxuICAgICAgICogV2lsbCBiZSB1c2VkIHRvIG1hdGNoIG9wdGlvbnMgaW5zdGVhZCBvZiBgbGFiZWxgXG4gICAgICAgKi9cbiAgICBrZXk6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgICAvKipcbiAgICAgICAqIExlYXZlIGB1bmRlZmluZWRgIHRvIGluZGljYXRlIG5vdCBzZWxlY3RlZCxcbiAgICAgICAqICdvbicgdG8gaW5kaWNhdGUgaW5jbHVzaW9uIGFuZFxuICAgICAgICogJ29mZicgdG8gaW5kaWNhdGUgZXhjbHVzaW9uXG4gICAgICAgKi9cbiAgICBjaGVja2VkOiBQcm9wVHlwZXMub25lT2YoW1wib25cIiwgXCJvZmZcIiwgdW5kZWZpbmVkXSksXG4gICAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gICAgLyoqXG4gICAgICAgKiBOb2RlIHRvIGFkZCBiZXR3ZWVuIHRoZSBzZWxlY3Rpb24gaWNvbiBhbmQgdGhlIGxhYmVsXG4gICAgICAgKi9cbiAgICBwcmVwZW5kOiBQcm9wVHlwZXMubm9kZSxcblxuICAgIC8qKlxuICAgICAgICogTm9kZSB0byBhZGQgdG8gdGhlIGZhciByaWdodCBvZiB0aGUgaXRlbVxuICAgICAgICovXG4gICAgYXBwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgICByZWY6IFByb3BUeXBlcy5mdW5jLFxuXG4gICAgLyoqXG4gICAgICAgKiBPcHRpb24gZGF0YSB0byBwYXNzIHRocm91Z2ggdG8gdGhlIGByZW5kZXJPcHRpb25zYCBlbGVtZW50LlxuICAgICAgICogQnlwYXNzIGBFdWlTZWxlY3RhYmxlSXRlbWAgYW5kIGF2b2lkIERPTSBhdHRyaWJ1dGUgd2FybmluZ3MuXG4gICAgICAgKi9cbiAgICBkYXRhOiBQcm9wVHlwZXMuc2hhcGUoe30pXG4gIH0pLmlzUmVxdWlyZWQpLmlzUmVxdWlyZWQsXG5cbiAgLyoqXG4gICAgICAgKiBQYXNzZXMgYmFjayB0aGUgYWx0ZXJlZCBgb3B0aW9uc2AgYXJyYXkgd2l0aCBzZWxlY3RlZCBvcHRpb25zIGhhdmluZyBgY2hlY2tlZDogJ29uJ2AuXG4gICAgICAgKiBBbHNvIHBhc3NlcyBiYWNrIHRoZSBSZWFjdCBjbGljay9rZXlib2FyZCBldmVudCBhcyBhIHNlY29uZCBhcmd1bWVudC5cbiAgICAgICAqL1xuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAgICAgKiBQYXNzZXMgYmFjayB0aGUgY3VycmVudCBhY3RpdmUgb3B0aW9uIHdoZW5ldmVyIHRoZSB1c2VyIGNoYW5nZXMgdGhlIGN1cnJlbnRseVxuICAgICAgICogaGlnaGxpZ2h0ZWQgb3B0aW9uIHZpYSBrZXlib2FyZCBuYXZpZ2F0aW9uIG9yIHNlYXJjaGluZy5cbiAgICAgICAqL1xuICBvbkFjdGl2ZU9wdGlvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAgICAgKiBTZXRzIHRoZSBzaW5nbGUgc2VsZWN0aW9uIHBvbGljeSBvZlxuICAgICAgICogYGZhbHNlYDogYWxsb3dzIG11bHRpcGxlIHNlbGVjdGlvblxuICAgICAgICogYHRydWVgOiBvbmx5IGFsbG93cyBvbmUgc2VsZWN0aW9uXG4gICAgICAgKiBgYWx3YXlzYDogY2FuIGFuZCBtdXN0IGhhdmUgb25seSBvbmUgc2VsZWN0aW9uXG4gICAgICAgKi9cbiAgc2luZ2xlU2VsZWN0aW9uOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWx3YXlzXCJdKSwgUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZF0pLFxuXG4gIC8qKlxuICAgICAgICogQWxsb3dzIG1hcmtpbmcgb3B0aW9ucyBhcyBgY2hlY2tlZD0nb2ZmJ2AgYXMgd2VsbCBhcyBgJ29uJ2BcbiAgICAgICAqL1xuICBhbGxvd0V4Y2x1c2lvbnM6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAgICogU2hvdyBhbiBsb2FkaW5nIGluZGljYXRvciB3aGlsZSB5b3UgbG9hZCBhbmQgaG9vayB1cCB5b3VyIGRhdGFcbiAgICAgICAqL1xuICBpc0xvYWRpbmc6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAgICogU2V0cyB0aGUgbWF4IGhlaWdodCBpbiBwaXhlbHMgb3IgcGFzcyBgZnVsbGAgdG8gYWxsb3dcbiAgICAgICAqIHRoZSB3aG9sZSBncm91cCB0byBmaWxsIHRoZSBoZWlnaHQgb2YgaXRzIGNvbnRhaW5lciBhbmRcbiAgICAgICAqIGFsbG93cyB0aGUgbGlzdCBncm93IGFzIHdlbGxcbiAgICAgICAqL1xuICBoZWlnaHQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm9uZU9mKFtcImZ1bGxcIl0pXSksXG5cbiAgLyoqXG4gICAgICAgKiBTZWUgI0V1aVNlbGVjdGFibGVPcHRpb25zTGlzdFxuICAgICAgICovXG4gIGxpc3RQcm9wczogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgICAqIEN1c3RvbSByZW5kZXIgZnVuY3Rpb24gZm9yIGVhY2ggb3B0aW9uLlxuICAgICAgICogUmV0dXJucyBgKG9wdGlvbiwgc2VhcmNoVmFsdWUpYFxuICAgICAgICovXG4gIHJlbmRlck9wdGlvbjogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAgICAgKiBDdXN0b21pemUgdGhlIGxvYWRpbmcgbWVzc2FnZS4gUGFzcyBhIHN0cmluZyB0byBzaW1wbHkgY2hhbmdlIHRoZSB0ZXh0LFxuICAgICAgICogb3IgYSBub2RlIHRvIHJlcGxhY2UgdGhlIHdob2xlIGNvbnRlbnQuXG4gICAgICAgKi9cbiAgbG9hZGluZ01lc3NhZ2U6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZF0pLFxuXG4gIC8qKlxuICAgICAgICogQ3VzdG9taXplIHRoZSBubyBtYXRjaGVzIG1lc3NhZ2UuIFBhc3MgYSBzdHJpbmcgdG8gc2ltcGx5IGNoYW5nZSB0aGUgdGV4dCxcbiAgICAgICAqIG9yIGEgbm9kZSB0byByZXBsYWNlIHRoZSB3aG9sZSBjb250ZW50LlxuICAgICAgICovXG4gIG5vTWF0Y2hlc01lc3NhZ2U6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZF0pLFxuXG4gIC8qKlxuICAgICAgICogQ3VzdG9taXplIHRoZSBlbXB0eSBtZXNzYWdlLiBQYXNzIGEgc3RyaW5nIHRvIHNpbXBseSBjaGFuZ2UgdGhlIHRleHQsXG4gICAgICAgKiBvciBhIG5vZGUgdG8gcmVwbGFjZSB0aGUgd2hvbGUgY29udGVudC5cbiAgICAgICAqL1xuICBlbXB0eU1lc3NhZ2U6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZF0pLFxuXG4gIC8qKlxuICAgICAgICogQWRkIGFuIGVycm9yIG1lc3NhZ2UuXG4gICAgICAgKiBUaGUgbWVzc2FnZSB3aWxsIGJlIHNob3duIHdoZW4gdGhlIHZhbHVlIGlzIG5vdCBgbnVsbGAgb3IgYHVuZGVmaW5lZGAuXG4gICAgICAgKiBQYXNzIGEgc3RyaW5nIHRvIHNpbXBseSBjaGFuZ2UgdGhlIHRleHQsIG9yIGEgbm9kZSB0byByZXBsYWNlIHRoZSB3aG9sZSBjb250ZW50LlxuICAgICAgICpcbiAgICAgICAqIGBlcnJvck1lc3NhZ2U9e2hhc0Vycm9ycyA/ICdNeSBlcnJvciBtZXNzYWdlJyA6IG51bGx9YFxuICAgICAgICovXG4gIGVycm9yTWVzc2FnZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2YoW251bGxdKV0pLFxuXG4gIC8qKlxuICAgICAgICogQ29udHJvbCB3aGV0aGVyIG9yIG5vdCBvcHRpb25zIGdldCBmaWx0ZXJlZCBpbnRlcm5hbGx5IG9yIGlmIGNvbnN1bWVyIHdpbGwgZmlsdGVyXG4gICAgICAgKiBEZWZhdWx0OiBmYWxzZVxuICAgICAgICovXG4gIGlzUHJlRmlsdGVyZWQ6IFByb3BUeXBlcy5ib29sXG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wib25DaGFuZ2VcIiwgXCJvcHRpb25zXCIsIFwidmFsdWVcIiwgXCJwbGFjZWhvbGRlclwiLCBcImlzUHJlRmlsdGVyZWRcIiwgXCJsaXN0SWRcIiwgXCJjbGFzc05hbWVcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IEV1aUZpZWxkU2VhcmNoIH0gZnJvbSAnLi4vLi4vZm9ybSc7XG5pbXBvcnQgeyBnZXRNYXRjaGluZ09wdGlvbnMgfSBmcm9tICcuLi9tYXRjaGluZ19vcHRpb25zJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVNlbGVjdGFibGVTZWFyY2ggPSBmdW5jdGlvbiBFdWlTZWxlY3RhYmxlU2VhcmNoKF9yZWYpIHtcbiAgdmFyIG9uQ2hhbmdlQ2FsbGJhY2sgPSBfcmVmLm9uQ2hhbmdlLFxuICAgICAgb3B0aW9ucyA9IF9yZWYub3B0aW9ucyxcbiAgICAgIHZhbHVlID0gX3JlZi52YWx1ZSxcbiAgICAgIHBsYWNlaG9sZGVyID0gX3JlZi5wbGFjZWhvbGRlcixcbiAgICAgIGlzUHJlRmlsdGVyZWQgPSBfcmVmLmlzUHJlRmlsdGVyZWQsXG4gICAgICBsaXN0SWQgPSBfcmVmLmxpc3RJZCxcbiAgICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBvbkNoYW5nZSA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChlKSB7XG4gICAgdmFyIHNlYXJjaFZhbHVlID0gZS50YXJnZXQudmFsdWU7XG4gICAgdmFyIG1hdGNoaW5nT3B0aW9ucyA9IGdldE1hdGNoaW5nT3B0aW9ucyhvcHRpb25zLCBzZWFyY2hWYWx1ZSwgaXNQcmVGaWx0ZXJlZCk7XG4gICAgb25DaGFuZ2VDYWxsYmFjayhzZWFyY2hWYWx1ZSwgbWF0Y2hpbmdPcHRpb25zKTtcbiAgfSwgW29wdGlvbnMsIGlzUHJlRmlsdGVyZWQsIG9uQ2hhbmdlQ2FsbGJhY2tdKTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlTZWxlY3RhYmxlU2VhcmNoJywgY2xhc3NOYW1lKTtcbiAgdmFyIGFyaWFQcm9wc0lmTGlzdElzUHJlc2VudCA9IGxpc3RJZCA/IHtcbiAgICByb2xlOiAnY29tYm9ib3gnLFxuICAgICdhcmlhLWF1dG9jb21wbGV0ZSc6ICdsaXN0JyxcbiAgICAnYXJpYS1leHBhbmRlZCc6IHRydWUsXG4gICAgJ2FyaWEtY29udHJvbHMnOiBsaXN0SWQsXG4gICAgJ2FyaWEtb3ducyc6IGxpc3RJZCAvLyBsZWdhY3kgYXR0cmlidXRlIGJ1dCBzaGltcyBzdXBwb3J0IGZvciBuZWFybHkgZXZlcnl0aGluZyBhdG1cblxuICB9IDogdW5kZWZpbmVkO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlGaWVsZFNlYXJjaCwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBwbGFjZWhvbGRlcjogcGxhY2Vob2xkZXIsXG4gICAgdmFsdWU6IHZhbHVlLFxuICAgIG9uQ2hhbmdlOiBvbkNoYW5nZSxcbiAgICBpbmNyZW1lbnRhbDogdHJ1ZSxcbiAgICBmdWxsV2lkdGg6IHRydWUsXG4gICAgYXV0b0NvbXBsZXRlOiBcIm9mZlwiLFxuICAgIFwiYXJpYS1oYXNwb3B1cFwiOiBcImxpc3Rib3hcIlxuICB9LCBhcmlhUHJvcHNJZkxpc3RJc1ByZXNlbnQsIHJlc3QpKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG52YXIgZ2V0U2VhcmNoYWJsZUxhYmVsID0gZnVuY3Rpb24gZ2V0U2VhcmNoYWJsZUxhYmVsKG9wdGlvbikge1xuICB2YXIgbm9ybWFsaXplID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB0cnVlO1xuICB2YXIgc2VhcmNoYWJsZUxhYmVsID0gb3B0aW9uLnNlYXJjaGFibGVMYWJlbCB8fCBvcHRpb24ubGFiZWw7XG4gIHJldHVybiBub3JtYWxpemUgPyBzZWFyY2hhYmxlTGFiZWwudHJpbSgpLnRvTG93ZXJDYXNlKCkgOiBzZWFyY2hhYmxlTGFiZWw7XG59O1xuXG52YXIgZ2V0U2VsZWN0ZWRPcHRpb25Gb3JTZWFyY2hWYWx1ZSA9IGZ1bmN0aW9uIGdldFNlbGVjdGVkT3B0aW9uRm9yU2VhcmNoVmFsdWUoc2VhcmNoVmFsdWUsIHNlbGVjdGVkT3B0aW9ucykge1xuICB2YXIgbm9ybWFsaXplZFNlYXJjaFZhbHVlID0gc2VhcmNoVmFsdWUudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIHNlbGVjdGVkT3B0aW9ucy5maW5kKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICByZXR1cm4gZ2V0U2VhcmNoYWJsZUxhYmVsKG9wdGlvbikgPT09IG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZTtcbiAgfSk7XG59O1xuXG52YXIgY29sbGVjdE1hdGNoaW5nT3B0aW9uID0gZnVuY3Rpb24gY29sbGVjdE1hdGNoaW5nT3B0aW9uKGFjY3VtdWxhdG9yLCBvcHRpb24sIG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSwgaXNQcmVGaWx0ZXJlZCwgc2VsZWN0ZWRPcHRpb25zKSB7XG4gIC8vIERvbid0IHNob3cgb3B0aW9ucyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIHJlcXVlc3RlZCBpZlxuICAvLyB0aGUgc2VsZWN0ZWRPcHRpb25zIGxpc3QgZXhpc3RzXG4gIGlmIChzZWxlY3RlZE9wdGlvbnMpIHtcbiAgICB2YXIgc2VsZWN0ZWRPcHRpb24gPSBnZXRTZWxlY3RlZE9wdGlvbkZvclNlYXJjaFZhbHVlKGdldFNlYXJjaGFibGVMYWJlbChvcHRpb24sIGZhbHNlKSwgc2VsZWN0ZWRPcHRpb25zKTtcblxuICAgIGlmIChzZWxlY3RlZE9wdGlvbikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSAvLyBJZiB0aGUgb3B0aW9ucyBoYXZlIGFscmVhZHkgYmVlbiBwcmVmaWx0ZXJlZCB0aGVuIHdlIGNhbiBza2lwIGZpbHRlcmluZyBhZ2FpbnN0IHRoZSBzZWFyY2ggdmFsdWUuXG4gIC8vIFRPRE86IEkgc3RpbGwgZG9uJ3QgcXVpdGUgdW5kZXJzdGFuZCBob3cgdGhpcyB3b3JrcyB3aGVuIGhvb2tlZCB1cCB0byBhc3luY1xuXG5cbiAgaWYgKGlzUHJlRmlsdGVyZWQpIHtcbiAgICBhY2N1bXVsYXRvci5wdXNoKG9wdGlvbik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKCFub3JtYWxpemVkU2VhcmNoVmFsdWUpIHtcbiAgICBhY2N1bXVsYXRvci5wdXNoKG9wdGlvbik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIG5vcm1hbGl6ZWRPcHRpb24gPSBnZXRTZWFyY2hhYmxlTGFiZWwob3B0aW9uKTtcblxuICBpZiAobm9ybWFsaXplZE9wdGlvbi5pbmNsdWRlcyhub3JtYWxpemVkU2VhcmNoVmFsdWUpKSB7XG4gICAgYWNjdW11bGF0b3IucHVzaChvcHRpb24pO1xuICB9XG59O1xuXG5leHBvcnQgdmFyIGdldE1hdGNoaW5nT3B0aW9ucyA9IGZ1bmN0aW9uIGdldE1hdGNoaW5nT3B0aW9ucyhvcHRpb25zLCBzZWFyY2hWYWx1ZSwgaXNQcmVGaWx0ZXJlZCwgc2VsZWN0ZWRPcHRpb25zKSB7XG4gIHZhciBub3JtYWxpemVkU2VhcmNoVmFsdWUgPSBzZWFyY2hWYWx1ZS50b0xvd2VyQ2FzZSgpO1xuICB2YXIgbWF0Y2hpbmdPcHRpb25zID0gW107XG4gIG9wdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgY29sbGVjdE1hdGNoaW5nT3B0aW9uKG1hdGNoaW5nT3B0aW9ucywgb3B0aW9uLCBub3JtYWxpemVkU2VhcmNoVmFsdWUsIGlzUHJlRmlsdGVyZWQsIHNlbGVjdGVkT3B0aW9ucyk7XG4gIH0pO1xuICByZXR1cm4gbWF0Y2hpbmdPcHRpb25zO1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiYm9yZGVyZWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBFdWlUZXh0IH0gZnJvbSAnLi4vLi4vdGV4dCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlTZWxlY3RhYmxlTWVzc2FnZSA9IGZ1bmN0aW9uIEV1aVNlbGVjdGFibGVNZXNzYWdlKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgX3JlZiRib3JkZXJlZCA9IF9yZWYuYm9yZGVyZWQsXG4gICAgICBib3JkZXJlZCA9IF9yZWYkYm9yZGVyZWQgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRib3JkZXJlZCxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVNlbGVjdGFibGVNZXNzYWdlJywge1xuICAgICdldWlTZWxlY3RhYmxlTWVzc2FnZS0tYm9yZGVyZWQnOiBib3JkZXJlZFxuICB9LCBjbGFzc05hbWUpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlUZXh0LCBfZXh0ZW5kcyh7XG4gICAgY29sb3I6IFwic3ViZHVlZFwiLFxuICAgIHNpemU6IFwieHNcIixcbiAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgfSwgcmVzdCksIGNoaWxkcmVuKTtcbn07XG5FdWlTZWxlY3RhYmxlTWVzc2FnZS5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgICAqIE1hdGNoIHRoaXMgdG8gdGhlIGBsaXN0UHJvcHMuYm9yZGVyZWRgIHByb3BlcnR5IG9mIHlvdXIgYEV1aVNlbGVjdGFibGVgIGluc3RhbmNlXG4gICAgICAgKi9cbiAgYm9yZGVyZWQ6IFByb3BUeXBlcy5ib29sXG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbnZhciBfZXhjbHVkZWQgPSBbXCJkYXRhXCJdLFxuICAgIF9leGNsdWRlZDIgPSBbXCJsYWJlbFwiLCBcImlzR3JvdXBMYWJlbFwiLCBcImNoZWNrZWRcIiwgXCJkaXNhYmxlZFwiLCBcInByZXBlbmRcIiwgXCJhcHBlbmRcIiwgXCJyZWZcIiwgXCJrZXlcIiwgXCJzZWFyY2hhYmxlTGFiZWxcIiwgXCJkYXRhXCJdLFxuICAgIF9leGNsdWRlZDMgPSBbXCJjbGFzc05hbWVcIiwgXCJvcHRpb25zXCIsIFwic2VhcmNoVmFsdWVcIiwgXCJvbk9wdGlvbkNsaWNrXCIsIFwicmVuZGVyT3B0aW9uXCIsIFwiaGVpZ2h0XCIsIFwid2luZG93UHJvcHNcIiwgXCJyb3dIZWlnaHRcIiwgXCJhY3RpdmVPcHRpb25JbmRleFwiLCBcIm1ha2VPcHRpb25JZFwiLCBcInNob3dJY29uc1wiLCBcInNpbmdsZVNlbGVjdGlvblwiLCBcInZpc2libGVPcHRpb25zXCIsIFwiYWxsb3dFeGNsdXNpb25zXCIsIFwiYm9yZGVyZWRcIiwgXCJwYWRkaW5nU2l6ZVwiLCBcInNlYXJjaGFibGVcIiwgXCJvbkZvY3VzQmFkZ2VcIiwgXCJsaXN0SWRcIiwgXCJzZXRBY3RpdmVPcHRpb25JbmRleFwiLCBcImFyaWEtbGFiZWxcIiwgXCJhcmlhLWxhYmVsbGVkYnlcIiwgXCJhcmlhLWRlc2NyaWJlZGJ5XCIsIFwicm9sZVwiLCBcImlzVmlydHVhbGl6ZWRcIiwgXCJ0ZXh0V3JhcFwiXTtcblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQsIG1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IEZpeGVkU2l6ZUxpc3QsIGFyZUVxdWFsIH0gZnJvbSAncmVhY3Qtd2luZG93JztcbmltcG9ydCB7IEV1aUF1dG9TaXplciB9IGZyb20gJy4uLy4uL2F1dG9fc2l6ZXInO1xuaW1wb3J0IHsgRXVpSGlnaGxpZ2h0IH0gZnJvbSAnLi4vLi4vaGlnaGxpZ2h0JztcbmltcG9ydCB7IEV1aVNlbGVjdGFibGVMaXN0SXRlbSB9IGZyb20gJy4vc2VsZWN0YWJsZV9saXN0X2l0ZW0nO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpU2VsZWN0YWJsZUxpc3QgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEV1aVNlbGVjdGFibGVMaXN0LCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aVNlbGVjdGFibGVMaXN0KTtcblxuICBmdW5jdGlvbiBFdWlTZWxlY3RhYmxlTGlzdChwcm9wcykge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlTZWxlY3RhYmxlTGlzdCk7XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHByb3BzKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJsaXN0UmVmXCIsIG51bGwpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImxpc3RCb3hSZWZcIiwgbnVsbCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic2V0TGlzdFJlZlwiLCBmdW5jdGlvbiAocmVmKSB7XG4gICAgICBfdGhpcy5saXN0UmVmID0gcmVmO1xuXG4gICAgICBpZiAocmVmICYmIF90aGlzLnByb3BzLmFjdGl2ZU9wdGlvbkluZGV4KSB7XG4gICAgICAgIHJlZi5zY3JvbGxUb0l0ZW0oX3RoaXMucHJvcHMuYWN0aXZlT3B0aW9uSW5kZXgsICdhdXRvJyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicmVtb3ZlU2Nyb2xsYWJsZVRhYlN0b3BcIiwgZnVuY3Rpb24gKHJlZikge1xuICAgICAgLy8gRmlyZWZveCBhZGRzIGEgdGFiIHN0b3AgZm9yIHNjcm9sbGFibGUgY29udGFpbmVyc1xuICAgICAgLy8gV2UgaGFuZGxlIHRoaXMgaW5zaWRlIHNvIG5lZWQgdG8gc3RvcCBmaXJlZm94IGZyb20gZG9pbmcgaXRzIHRoaW5nXG4gICAgICBpZiAocmVmKSB7XG4gICAgICAgIHJlZi5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJy0xJyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic2V0TGlzdEJveFJlZlwiLCBmdW5jdGlvbiAocmVmKSB7XG4gICAgICBfdGhpcy5saXN0Qm94UmVmID0gcmVmO1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgbGlzdElkID0gX3RoaXMkcHJvcHMubGlzdElkLFxuICAgICAgICAgIHNlYXJjaGFibGUgPSBfdGhpcyRwcm9wcy5zZWFyY2hhYmxlLFxuICAgICAgICAgIHNpbmdsZVNlbGVjdGlvbiA9IF90aGlzJHByb3BzLnNpbmdsZVNlbGVjdGlvbixcbiAgICAgICAgICBhcmlhTGFiZWwgPSBfdGhpcyRwcm9wc1snYXJpYS1sYWJlbCddLFxuICAgICAgICAgIGFyaWFMYWJlbGxlZGJ5ID0gX3RoaXMkcHJvcHNbJ2FyaWEtbGFiZWxsZWRieSddLFxuICAgICAgICAgIGFyaWFEZXNjcmliZWRieSA9IF90aGlzJHByb3BzWydhcmlhLWRlc2NyaWJlZGJ5J107XG5cbiAgICAgIGlmIChyZWYpIHtcbiAgICAgICAgcmVmLnNldEF0dHJpYnV0ZSgnaWQnLCBsaXN0SWQpO1xuICAgICAgICByZWYuc2V0QXR0cmlidXRlKCdyb2xlJywgJ2xpc3Rib3gnKTtcblxuICAgICAgICBpZiAoc2VhcmNoYWJsZSAhPT0gdHJ1ZSkge1xuICAgICAgICAgIHJlZi5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJzAnKTtcblxuICAgICAgICAgIGlmIChzaW5nbGVTZWxlY3Rpb24gIT09ICdhbHdheXMnICYmIHNpbmdsZVNlbGVjdGlvbiAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgcmVmLnNldEF0dHJpYnV0ZSgnYXJpYS1tdWx0aXNlbGVjdGFibGUnLCAndHJ1ZScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgYXJpYUxhYmVsID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHJlZi5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCBhcmlhTGFiZWwpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBhcmlhTGFiZWxsZWRieSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICByZWYuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsbGVkYnknLCBhcmlhTGFiZWxsZWRieSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGFyaWFEZXNjcmliZWRieSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICByZWYuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsbGVkYnknLCBhcmlhRGVzY3JpYmVkYnkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiTGlzdFJvd1wiLCAvKiNfX1BVUkVfXyovbWVtbyhmdW5jdGlvbiAoX3JlZikge1xuICAgICAgdmFyIGRhdGEgPSBfcmVmLmRhdGEsXG4gICAgICAgICAgaW5kZXggPSBfcmVmLmluZGV4LFxuICAgICAgICAgIHN0eWxlID0gX3JlZi5zdHlsZTtcbiAgICAgIHZhciBvcHRpb24gPSBkYXRhW2luZGV4XTtcblxuICAgICAgdmFyIG9wdGlvbkRhdGEgPSBvcHRpb24uZGF0YSxcbiAgICAgICAgICBfb3B0aW9uID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9wdGlvbiwgX2V4Y2x1ZGVkKTtcblxuICAgICAgdmFyIGxhYmVsID0gb3B0aW9uLmxhYmVsLFxuICAgICAgICAgIGlzR3JvdXBMYWJlbCA9IG9wdGlvbi5pc0dyb3VwTGFiZWwsXG4gICAgICAgICAgY2hlY2tlZCA9IG9wdGlvbi5jaGVja2VkLFxuICAgICAgICAgIGRpc2FibGVkID0gb3B0aW9uLmRpc2FibGVkLFxuICAgICAgICAgIHByZXBlbmQgPSBvcHRpb24ucHJlcGVuZCxcbiAgICAgICAgICBhcHBlbmQgPSBvcHRpb24uYXBwZW5kLFxuICAgICAgICAgIHJlZiA9IG9wdGlvbi5yZWYsXG4gICAgICAgICAga2V5ID0gb3B0aW9uLmtleSxcbiAgICAgICAgICBzZWFyY2hhYmxlTGFiZWwgPSBvcHRpb24uc2VhcmNoYWJsZUxhYmVsLFxuICAgICAgICAgIF9kYXRhID0gb3B0aW9uLmRhdGEsXG4gICAgICAgICAgb3B0aW9uUmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhvcHRpb24sIF9leGNsdWRlZDIpO1xuXG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXggPSBfdGhpcyRwcm9wczIuYWN0aXZlT3B0aW9uSW5kZXgsXG4gICAgICAgICAgYWxsb3dFeGNsdXNpb25zID0gX3RoaXMkcHJvcHMyLmFsbG93RXhjbHVzaW9ucyxcbiAgICAgICAgICBvbkZvY3VzQmFkZ2UgPSBfdGhpcyRwcm9wczIub25Gb2N1c0JhZGdlLFxuICAgICAgICAgIHBhZGRpbmdTaXplID0gX3RoaXMkcHJvcHMyLnBhZGRpbmdTaXplLFxuICAgICAgICAgIHNlYXJjaFZhbHVlID0gX3RoaXMkcHJvcHMyLnNlYXJjaFZhbHVlLFxuICAgICAgICAgIHNob3dJY29ucyA9IF90aGlzJHByb3BzMi5zaG93SWNvbnMsXG4gICAgICAgICAgbWFrZU9wdGlvbklkID0gX3RoaXMkcHJvcHMyLm1ha2VPcHRpb25JZCxcbiAgICAgICAgICByZW5kZXJPcHRpb24gPSBfdGhpcyRwcm9wczIucmVuZGVyT3B0aW9uLFxuICAgICAgICAgIHNldEFjdGl2ZU9wdGlvbkluZGV4ID0gX3RoaXMkcHJvcHMyLnNldEFjdGl2ZU9wdGlvbkluZGV4LFxuICAgICAgICAgIHNlYXJjaGFibGUgPSBfdGhpcyRwcm9wczIuc2VhcmNoYWJsZSxcbiAgICAgICAgICB0ZXh0V3JhcCA9IF90aGlzJHByb3BzMi50ZXh0V3JhcDtcblxuICAgICAgaWYgKGlzR3JvdXBMYWJlbCkge1xuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImxpXCIsIF9leHRlbmRzKHtcbiAgICAgICAgICByb2xlOiBcInByZXNlbnRhdGlvblwiLFxuICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlTZWxlY3RhYmxlTGlzdF9fZ3JvdXBMYWJlbFwiLFxuICAgICAgICAgIHN0eWxlOiBzdHlsZSAvLyBAdHMtaWdub3JlIGNvbXBsZXhcblxuICAgICAgICB9LCBvcHRpb25SZXN0KSwgcHJlcGVuZCwgbGFiZWwsIGFwcGVuZCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBsYWJlbENvdW50ID0gZGF0YS5maWx0ZXIoZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgICByZXR1cm4gb3B0aW9uLmlzR3JvdXBMYWJlbDtcbiAgICAgIH0pLmxlbmd0aDtcbiAgICAgIHZhciBpZCA9IG1ha2VPcHRpb25JZChpbmRleCk7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlTZWxlY3RhYmxlTGlzdEl0ZW0sIF9leHRlbmRzKHtcbiAgICAgICAga2V5OiBpZCxcbiAgICAgICAgaWQ6IGlkLFxuICAgICAgICBzdHlsZTogc3R5bGUsXG4gICAgICAgIG9uTW91c2VEb3duOiBmdW5jdGlvbiBvbk1vdXNlRG93bigpIHtcbiAgICAgICAgICBzZXRBY3RpdmVPcHRpb25JbmRleChpbmRleCk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soZXZlbnQpIHtcbiAgICAgICAgICBldmVudC5wZXJzaXN0KCk7IC8vIE5PVEU6IFRoaXMgaXMgbmVlZGVkIGZvciBSZWFjdCB2MTYgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcblxuICAgICAgICAgIF90aGlzLm9uQWRkT3JSZW1vdmVPcHRpb24ob3B0aW9uLCBldmVudCk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlZjogcmVmID8gcmVmLmJpbmQobnVsbCwgaW5kZXgpIDogdW5kZWZpbmVkLFxuICAgICAgICBpc0ZvY3VzZWQ6IGFjdGl2ZU9wdGlvbkluZGV4ID09PSBpbmRleCxcbiAgICAgICAgdGl0bGU6IHNlYXJjaGFibGVMYWJlbCB8fCBsYWJlbCxcbiAgICAgICAgY2hlY2tlZDogY2hlY2tlZCxcbiAgICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgICAgICBwcmVwZW5kOiBwcmVwZW5kLFxuICAgICAgICBhcHBlbmQ6IGFwcGVuZCxcbiAgICAgICAgXCJhcmlhLXBvc2luc2V0XCI6IGluZGV4ICsgMSAtIGxhYmVsQ291bnQsXG4gICAgICAgIFwiYXJpYS1zZXRzaXplXCI6IGRhdGEubGVuZ3RoIC0gbGFiZWxDb3VudCxcbiAgICAgICAgb25Gb2N1c0JhZGdlOiBvbkZvY3VzQmFkZ2UsXG4gICAgICAgIGFsbG93RXhjbHVzaW9uczogYWxsb3dFeGNsdXNpb25zLFxuICAgICAgICBzaG93SWNvbnM6IHNob3dJY29ucyxcbiAgICAgICAgcGFkZGluZ1NpemU6IHBhZGRpbmdTaXplLFxuICAgICAgICBzZWFyY2hhYmxlOiBzZWFyY2hhYmxlLFxuICAgICAgICB0ZXh0V3JhcDogdGV4dFdyYXBcbiAgICAgIH0sIG9wdGlvblJlc3QpLCByZW5kZXJPcHRpb24gPyByZW5kZXJPcHRpb24oIC8vIEB0cy1pZ25vcmUgY29tcGxleFxuICAgICAgX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBfb3B0aW9uKSwgb3B0aW9uRGF0YSksIF90aGlzLnByb3BzLnNlYXJjaFZhbHVlKSA6IF9fX0Vtb3Rpb25KU1goRXVpSGlnaGxpZ2h0LCB7XG4gICAgICAgIHNlYXJjaDogc2VhcmNoVmFsdWVcbiAgICAgIH0sIGxhYmVsKSk7XG4gICAgfSwgYXJlRXF1YWwpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkFkZE9yUmVtb3ZlT3B0aW9uXCIsIGZ1bmN0aW9uIChvcHRpb24sIGV2ZW50KSB7XG4gICAgICBpZiAob3B0aW9uLmRpc2FibGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIF90aGlzJHByb3BzMyA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIGFsbG93RXhjbHVzaW9ucyA9IF90aGlzJHByb3BzMy5hbGxvd0V4Y2x1c2lvbnMsXG4gICAgICAgICAgb3B0aW9ucyA9IF90aGlzJHByb3BzMy5vcHRpb25zLFxuICAgICAgICAgIF90aGlzJHByb3BzMyR2aXNpYmxlTyA9IF90aGlzJHByb3BzMy52aXNpYmxlT3B0aW9ucyxcbiAgICAgICAgICB2aXNpYmxlT3B0aW9ucyA9IF90aGlzJHByb3BzMyR2aXNpYmxlTyA9PT0gdm9pZCAwID8gb3B0aW9ucyA6IF90aGlzJHByb3BzMyR2aXNpYmxlTztcblxuICAgICAgX3RoaXMucHJvcHMuc2V0QWN0aXZlT3B0aW9uSW5kZXgodmlzaWJsZU9wdGlvbnMuZmluZEluZGV4KGZ1bmN0aW9uIChfcmVmMikge1xuICAgICAgICB2YXIgbGFiZWwgPSBfcmVmMi5sYWJlbDtcbiAgICAgICAgcmV0dXJuIGxhYmVsID09PSBvcHRpb24ubGFiZWw7XG4gICAgICB9KSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAob3B0aW9uLmNoZWNrZWQgPT09ICdvbicgJiYgYWxsb3dFeGNsdXNpb25zKSB7XG4gICAgICAgICAgX3RoaXMub25FeGNsdWRlT3B0aW9uKG9wdGlvbiwgZXZlbnQpO1xuICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbi5jaGVja2VkID09PSAnb24nIHx8IG9wdGlvbi5jaGVja2VkID09PSAnb2ZmJykge1xuICAgICAgICAgIF90aGlzLm9uUmVtb3ZlT3B0aW9uKG9wdGlvbiwgZXZlbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIF90aGlzLm9uQWRkT3B0aW9uKG9wdGlvbiwgZXZlbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkFkZE9wdGlvblwiLCBmdW5jdGlvbiAoYWRkZWRPcHRpb24sIGV2ZW50KSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM0ID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgb25PcHRpb25DbGljayA9IF90aGlzJHByb3BzNC5vbk9wdGlvbkNsaWNrLFxuICAgICAgICAgIG9wdGlvbnMgPSBfdGhpcyRwcm9wczQub3B0aW9ucyxcbiAgICAgICAgICBzaW5nbGVTZWxlY3Rpb24gPSBfdGhpcyRwcm9wczQuc2luZ2xlU2VsZWN0aW9uO1xuICAgICAgdmFyIHVwZGF0ZWRPcHRpb25zID0gb3B0aW9ucy5tYXAoZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgICAvLyBpZiBzaW5nbGVTZWxlY3Rpb24gaXMgZW5hYmxlZCwgdW5jaGVjayBhbnkgc2VsZWN0ZWQgb3B0aW9uKHMpXG4gICAgICAgIHZhciB1cGRhdGVkT3B0aW9uID0gX29iamVjdFNwcmVhZCh7fSwgb3B0aW9uKTtcblxuICAgICAgICBpZiAoc2luZ2xlU2VsZWN0aW9uKSB7XG4gICAgICAgICAgZGVsZXRlIHVwZGF0ZWRPcHRpb24uY2hlY2tlZDtcbiAgICAgICAgfSAvLyBpZiB0aGlzIGlzIHRoZSBub3ctc2VsZWN0ZWQgb3B0aW9uLCBjaGVjayBpdFxuXG5cbiAgICAgICAgaWYgKG9wdGlvbiA9PT0gYWRkZWRPcHRpb24pIHtcbiAgICAgICAgICB1cGRhdGVkT3B0aW9uLmNoZWNrZWQgPSAnb24nO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVwZGF0ZWRPcHRpb247XG4gICAgICB9KTtcbiAgICAgIG9uT3B0aW9uQ2xpY2sodXBkYXRlZE9wdGlvbnMsIGV2ZW50KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvblJlbW92ZU9wdGlvblwiLCBmdW5jdGlvbiAocmVtb3ZlZE9wdGlvbiwgZXZlbnQpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczUgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBvbk9wdGlvbkNsaWNrID0gX3RoaXMkcHJvcHM1Lm9uT3B0aW9uQ2xpY2ssXG4gICAgICAgICAgc2luZ2xlU2VsZWN0aW9uID0gX3RoaXMkcHJvcHM1LnNpbmdsZVNlbGVjdGlvbixcbiAgICAgICAgICBvcHRpb25zID0gX3RoaXMkcHJvcHM1Lm9wdGlvbnM7XG4gICAgICB2YXIgdXBkYXRlZE9wdGlvbnMgPSBvcHRpb25zLm1hcChmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAgIHZhciB1cGRhdGVkT3B0aW9uID0gX29iamVjdFNwcmVhZCh7fSwgb3B0aW9uKTtcblxuICAgICAgICBpZiAob3B0aW9uID09PSByZW1vdmVkT3B0aW9uICYmIHNpbmdsZVNlbGVjdGlvbiAhPT0gJ2Fsd2F5cycpIHtcbiAgICAgICAgICBkZWxldGUgdXBkYXRlZE9wdGlvbi5jaGVja2VkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVwZGF0ZWRPcHRpb247XG4gICAgICB9KTtcbiAgICAgIG9uT3B0aW9uQ2xpY2sodXBkYXRlZE9wdGlvbnMsIGV2ZW50KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkV4Y2x1ZGVPcHRpb25cIiwgZnVuY3Rpb24gKGV4Y2x1ZGVkT3B0aW9uLCBldmVudCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNiA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIG9uT3B0aW9uQ2xpY2sgPSBfdGhpcyRwcm9wczYub25PcHRpb25DbGljayxcbiAgICAgICAgICBvcHRpb25zID0gX3RoaXMkcHJvcHM2Lm9wdGlvbnM7XG4gICAgICBleGNsdWRlZE9wdGlvbi5jaGVja2VkID0gJ29mZic7XG4gICAgICB2YXIgdXBkYXRlZE9wdGlvbnMgPSBvcHRpb25zLm1hcChmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAgIHZhciB1cGRhdGVkT3B0aW9uID0gX29iamVjdFNwcmVhZCh7fSwgb3B0aW9uKTtcblxuICAgICAgICBpZiAob3B0aW9uID09PSBleGNsdWRlZE9wdGlvbikge1xuICAgICAgICAgIHVwZGF0ZWRPcHRpb24uY2hlY2tlZCA9ICdvZmYnO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVwZGF0ZWRPcHRpb247XG4gICAgICB9KTtcbiAgICAgIG9uT3B0aW9uQ2xpY2sodXBkYXRlZE9wdGlvbnMsIGV2ZW50KTtcbiAgICB9KTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdWlTZWxlY3RhYmxlTGlzdCwgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkVXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcbiAgICAgIHZhciBhY3RpdmVPcHRpb25JbmRleCA9IHRoaXMucHJvcHMuYWN0aXZlT3B0aW9uSW5kZXg7XG5cbiAgICAgIGlmICh0aGlzLmxpc3RCb3hSZWYgJiYgdGhpcy5wcm9wcy5zZWFyY2hhYmxlICE9PSB0cnVlKSB7XG4gICAgICAgIHRoaXMubGlzdEJveFJlZi5zZXRBdHRyaWJ1dGUoJ2FyaWEtYWN0aXZlZGVzY2VuZGFudCcsIFwiXCIuY29uY2F0KHRoaXMucHJvcHMubWFrZU9wdGlvbklkKGFjdGl2ZU9wdGlvbkluZGV4KSkpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5saXN0UmVmICYmIHR5cGVvZiB0aGlzLnByb3BzLmFjdGl2ZU9wdGlvbkluZGV4ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aGlzLmxpc3RSZWYuc2Nyb2xsVG9JdGVtKHRoaXMucHJvcHMuYWN0aXZlT3B0aW9uSW5kZXgsICdhdXRvJyk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdmFyIF90aGlzJHByb3BzNyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHM3LmNsYXNzTmFtZSxcbiAgICAgICAgICBvcHRpb25zID0gX3RoaXMkcHJvcHM3Lm9wdGlvbnMsXG4gICAgICAgICAgc2VhcmNoVmFsdWUgPSBfdGhpcyRwcm9wczcuc2VhcmNoVmFsdWUsXG4gICAgICAgICAgb25PcHRpb25DbGljayA9IF90aGlzJHByb3BzNy5vbk9wdGlvbkNsaWNrLFxuICAgICAgICAgIHJlbmRlck9wdGlvbiA9IF90aGlzJHByb3BzNy5yZW5kZXJPcHRpb24sXG4gICAgICAgICAgZm9yY2VkSGVpZ2h0ID0gX3RoaXMkcHJvcHM3LmhlaWdodCxcbiAgICAgICAgICB3aW5kb3dQcm9wcyA9IF90aGlzJHByb3BzNy53aW5kb3dQcm9wcyxcbiAgICAgICAgICByb3dIZWlnaHQgPSBfdGhpcyRwcm9wczcucm93SGVpZ2h0LFxuICAgICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4ID0gX3RoaXMkcHJvcHM3LmFjdGl2ZU9wdGlvbkluZGV4LFxuICAgICAgICAgIG1ha2VPcHRpb25JZCA9IF90aGlzJHByb3BzNy5tYWtlT3B0aW9uSWQsXG4gICAgICAgICAgc2hvd0ljb25zID0gX3RoaXMkcHJvcHM3LnNob3dJY29ucyxcbiAgICAgICAgICBzaW5nbGVTZWxlY3Rpb24gPSBfdGhpcyRwcm9wczcuc2luZ2xlU2VsZWN0aW9uLFxuICAgICAgICAgIHZpc2libGVPcHRpb25zID0gX3RoaXMkcHJvcHM3LnZpc2libGVPcHRpb25zLFxuICAgICAgICAgIGFsbG93RXhjbHVzaW9ucyA9IF90aGlzJHByb3BzNy5hbGxvd0V4Y2x1c2lvbnMsXG4gICAgICAgICAgYm9yZGVyZWQgPSBfdGhpcyRwcm9wczcuYm9yZGVyZWQsXG4gICAgICAgICAgcGFkZGluZ1NpemUgPSBfdGhpcyRwcm9wczcucGFkZGluZ1NpemUsXG4gICAgICAgICAgc2VhcmNoYWJsZSA9IF90aGlzJHByb3BzNy5zZWFyY2hhYmxlLFxuICAgICAgICAgIG9uRm9jdXNCYWRnZSA9IF90aGlzJHByb3BzNy5vbkZvY3VzQmFkZ2UsXG4gICAgICAgICAgbGlzdElkID0gX3RoaXMkcHJvcHM3Lmxpc3RJZCxcbiAgICAgICAgICBzZXRBY3RpdmVPcHRpb25JbmRleCA9IF90aGlzJHByb3BzNy5zZXRBY3RpdmVPcHRpb25JbmRleCxcbiAgICAgICAgICBhcmlhTGFiZWwgPSBfdGhpcyRwcm9wczdbJ2FyaWEtbGFiZWwnXSxcbiAgICAgICAgICBhcmlhTGFiZWxsZWRieSA9IF90aGlzJHByb3BzN1snYXJpYS1sYWJlbGxlZGJ5J10sXG4gICAgICAgICAgYXJpYURlc2NyaWJlZGJ5ID0gX3RoaXMkcHJvcHM3WydhcmlhLWRlc2NyaWJlZGJ5J10sXG4gICAgICAgICAgcm9sZSA9IF90aGlzJHByb3BzNy5yb2xlLFxuICAgICAgICAgIGlzVmlydHVhbGl6ZWQgPSBfdGhpcyRwcm9wczcuaXNWaXJ0dWFsaXplZCxcbiAgICAgICAgICB0ZXh0V3JhcCA9IF90aGlzJHByb3BzNy50ZXh0V3JhcCxcbiAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzNywgX2V4Y2x1ZGVkMyk7XG5cbiAgICAgIHZhciBvcHRpb25BcnJheSA9IHZpc2libGVPcHRpb25zIHx8IG9wdGlvbnM7XG4gICAgICB2YXIgaGVpZ2h0SXNGdWxsID0gZm9yY2VkSGVpZ2h0ID09PSAnZnVsbCc7XG4gICAgICB2YXIgY2FsY3VsYXRlZEhlaWdodCA9IGhlaWdodElzRnVsbCA/IGZhbHNlIDogZm9yY2VkSGVpZ2h0OyAvLyBJZiBjYWxjdWxhdGVkSGVpZ2h0IGlzIHN0aWxsIHVuZGVmaW5lZCwgdGhlbiBjYWxjdWxhdGUgaXRcblxuICAgICAgaWYgKGNhbGN1bGF0ZWRIZWlnaHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB2YXIgbWF4VmlzaWJsZU9wdGlvbnMgPSA3O1xuICAgICAgICB2YXIgbnVtVmlzaWJsZU9wdGlvbnMgPSBvcHRpb25BcnJheS5sZW5ndGg7XG4gICAgICAgIHZhciBudW1WaXNpYmxlTW9yZVRoYW5NYXggPSBvcHRpb25BcnJheS5sZW5ndGggPiBtYXhWaXNpYmxlT3B0aW9ucztcblxuICAgICAgICBpZiAobnVtVmlzaWJsZU1vcmVUaGFuTWF4KSB7XG4gICAgICAgICAgLy8gU2hvdyBvbmx5IGhhbGYgb2YgdGhlIGxhc3Qgb25lIHRvIGluZGljYXRlIHRoZXJlJ3MgbW9yZSB0byBzY3JvbGwgdG9cbiAgICAgICAgICBjYWxjdWxhdGVkSGVpZ2h0ID0gKG1heFZpc2libGVPcHRpb25zIC0gMC41KSAqIHJvd0hlaWdodDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWxjdWxhdGVkSGVpZ2h0ID0gbnVtVmlzaWJsZU9wdGlvbnMgKiByb3dIZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlTZWxlY3RhYmxlTGlzdCcsIHtcbiAgICAgICAgJ2V1aVNlbGVjdGFibGVMaXN0LWZ1bGxIZWlnaHQnOiBoZWlnaHRJc0Z1bGwsXG4gICAgICAgICdldWlTZWxlY3RhYmxlTGlzdC1ib3JkZXJlZCc6IGJvcmRlcmVkXG4gICAgICB9LCBjbGFzc05hbWUpO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgICAgIH0sIHJlc3QpLCBpc1ZpcnR1YWxpemVkID8gX19fRW1vdGlvbkpTWChFdWlBdXRvU2l6ZXIsIHtcbiAgICAgICAgZGlzYWJsZUhlaWdodDogIWhlaWdodElzRnVsbFxuICAgICAgfSwgZnVuY3Rpb24gKF9yZWYzKSB7XG4gICAgICAgIHZhciB3aWR0aCA9IF9yZWYzLndpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0ID0gX3JlZjMuaGVpZ2h0O1xuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChGaXhlZFNpemVMaXN0LCBfZXh0ZW5kcyh7XG4gICAgICAgICAgcmVmOiBfdGhpczIuc2V0TGlzdFJlZixcbiAgICAgICAgICBvdXRlclJlZjogX3RoaXMyLnJlbW92ZVNjcm9sbGFibGVUYWJTdG9wLFxuICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlTZWxlY3RhYmxlTGlzdF9fbGlzdFwiLFxuICAgICAgICAgIFwiZGF0YS1za2lwLWF4ZVwiOiBcInNjcm9sbGFibGUtcmVnaW9uLWZvY3VzYWJsZVwiLFxuICAgICAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgICAgICBoZWlnaHQ6IGNhbGN1bGF0ZWRIZWlnaHQgfHwgaGVpZ2h0LFxuICAgICAgICAgIGl0ZW1Db3VudDogb3B0aW9uQXJyYXkubGVuZ3RoLFxuICAgICAgICAgIGl0ZW1EYXRhOiBvcHRpb25BcnJheSxcbiAgICAgICAgICBpdGVtU2l6ZTogcm93SGVpZ2h0LFxuICAgICAgICAgIGlubmVyRWxlbWVudFR5cGU6IFwidWxcIixcbiAgICAgICAgICBpbm5lclJlZjogX3RoaXMyLnNldExpc3RCb3hSZWZcbiAgICAgICAgfSwgd2luZG93UHJvcHMpLCBfdGhpczIuTGlzdFJvdyk7XG4gICAgICB9KSA6IF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICBjbGFzc05hbWU6IFwiZXVpU2VsZWN0YWJsZUxpc3RfX2xpc3RcIixcbiAgICAgICAgcmVmOiB0aGlzLnJlbW92ZVNjcm9sbGFibGVUYWJTdG9wXG4gICAgICB9LCBfX19FbW90aW9uSlNYKFwidWxcIiwge1xuICAgICAgICByZWY6IHRoaXMuc2V0TGlzdEJveFJlZlxuICAgICAgfSwgb3B0aW9uQXJyYXkubWFwKGZ1bmN0aW9uIChfLCBpbmRleCkge1xuICAgICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoX3RoaXMyLkxpc3RSb3csIHtcbiAgICAgICAgICBrZXk6IGluZGV4LFxuICAgICAgICAgIGRhdGE6IG9wdGlvbkFycmF5LFxuICAgICAgICAgIGluZGV4OiBpbmRleFxuICAgICAgICB9LCBudWxsKTtcbiAgICAgIH0pKSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlTZWxlY3RhYmxlTGlzdDtcbn0oQ29tcG9uZW50KTtcblxuX2RlZmluZVByb3BlcnR5KEV1aVNlbGVjdGFibGVMaXN0LCBcImRlZmF1bHRQcm9wc1wiLCB7XG4gIHJvd0hlaWdodDogMzIsXG4gIHNlYXJjaFZhbHVlOiAnJyxcbiAgaXNWaXJ0dWFsaXplZDogdHJ1ZVxufSk7XG5cbkV1aVNlbGVjdGFibGVMaXN0LnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAgICogVGhlIGluZGV4IG9mIHRoZSBvcHRpb24gdG8gYmUgaGlnaGxpZ2h0ZWQgYXMgcHNldWRvLWZvY3VzZWQ7XG4gICAgICAgKiBHb29kIGZvciB1c2Ugd2hlbiBvbmx5IG9uZSBzZWxlY3Rpb24gaXMgYWxsb3dlZCBhbmQgbmVlZGluZyB0byBvcGVuXG4gICAgICAgKiBkaXJlY3RseSB0byB0aGF0IG9wdGlvblxuICAgICAgICovXG4gIGFjdGl2ZU9wdGlvbkluZGV4OiBQcm9wVHlwZXMubnVtYmVyLFxuXG4gIC8qKlxuICAgICAgICogU2hvdyB0aGUgY2hlY2svY3Jvc3Mgc2VsZWN0aW9uIGluZGljYXRvciBpY29uc1xuICAgICAgICovXG4gIHNob3dJY29uczogUHJvcFR5cGVzLmJvb2wsXG4gIHNpbmdsZVNlbGVjdGlvbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFsd2F5c1wiXSksIFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWRdKSxcblxuICAvKipcbiAgICAgICAqIEFueSBwcm9wcyB0byBzZW5kIHNwZWNpZmljYWxseSB0byB0aGUgcmVhY3Qtd2luZG93IGBGaXhlZFNpemVMaXN0YFxuICAgICAgICovXG4gIHdpbmRvd1Byb3BzOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAgICogQWRkcyBhIGJvcmRlciBhcm91bmQgdGhlIGxpc3QgdG8gaW5kaWNhdGUgdGhlIGJvdW5kcztcbiAgICAgICAqIFVzZWZ1bCB3aGVuIHRoZSBsaXN0IHNjcm9sbHMsIG90aGVyd2lzZSB1c2UgeW91ciBvd24gY29udGFpbmVyXG4gICAgICAgKi9cbiAgYm9yZGVyZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAgICogV2hlbiBlbmFibGVkIGJ5IHNldHRpbmcgdG8gZWl0aGVyIGB0cnVlYCBvciBwYXNzaW5nIGN1c3RvbSB0ZXh0LFxuICAgICAgICogc2hvd3MgYSBob2xsb3cgYmFkZ2UgYXMgYW4gYXBwZW5kIChmYXIgcmlnaHQpIHdoZW4gdGhlIGl0ZW0gaXMgZm9jdXNlZC5cbiAgICAgICAqIFRoZSBkZWZhdWx0IGNvbnRlbnQgd2hlbiBgdHJ1ZWAgaXMgYFx1MjFBOSB0byBzZWxlY3QvZGVzZWxlY3QvaW5jbHVkZS9leGNsdWRlYFxuICAgICAgICovXG4gIG9uRm9jdXNCYWRnZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAvKipcbiAgICAgICAqIEFjY2VwdHMgYW55IHN0cmluZyBmcm9tIG91ciBpY29uIGxpYnJhcnlcbiAgICAgICAqL1xuICAgIGljb25UeXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbGVydFwiLCBcImFuYWx5emVFdmVudFwiLCBcImFubm90YXRpb25cIiwgXCJhcG1BcHBcIiwgXCJhcG1UcmFjZVwiLCBcImFwcFNlYXJjaEFwcFwiLCBcImFwcHNcIiwgXCJhcnJvd0Rvd25cIiwgXCJhcnJvd0xlZnRcIiwgXCJhcnJvd1JpZ2h0XCIsIFwiYXJyb3dVcFwiLCBcImFycm93U3RhcnRcIiwgXCJhcnJvd0VuZFwiLCBcImFzdGVyaXNrXCIsIFwiYXVkaXRiZWF0QXBwXCIsIFwiYmVha2VyXCIsIFwiYmVsbFwiLCBcImJlbGxTbGFzaFwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGVja1wiLCBcImNoZWNrSW5DaXJjbGVGaWxsZWRcIiwgXCJjaGVlclwiLCBcImNsYXNzaWZpY2F0aW9uSm9iXCIsIFwiY2xvY2tcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkFDaXJjbGVGaWxsZWRcIiwgXCJjcm9zc2hhaXJzXCIsIFwiY3VycmVuY3lcIiwgXCJjdXRcIiwgXCJkYXNoYm9hcmRBcHBcIiwgXCJkYXRhVmlzdWFsaXplclwiLCBcImRhdGFiYXNlXCIsIFwiZGVza3RvcFwiLCBcImRldlRvb2xzQXBwXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZXFsXCIsIFwiZXJhc2VyXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZsYWdcIiwgXCJmbGVldEFwcFwiLCBcImZvbGRcIiwgXCJmb2xkZXJDaGVja1wiLCBcImZvbGRlckNsb3NlZFwiLCBcImZvbGRlckV4Y2xhbWF0aW9uXCIsIFwiZm9sZGVyT3BlblwiLCBcImZyYW1lTmV4dFwiLCBcImZyYW1lUHJldmlvdXNcIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFNjcmVlbkV4aXRcIiwgXCJmdW5jdGlvblwiLCBcImdlYXJcIiwgXCJnaXNBcHBcIiwgXCJnbGFzc2VzXCIsIFwiZ2xvYmVcIiwgXCJncmFiXCIsIFwiZ3JhYkhvcml6b250YWxcIiwgXCJncmFwaEFwcFwiLCBcImdyaWRcIiwgXCJncm9rQXBwXCIsIFwiaGVhcnRcIiwgXCJoZWFydGJlYXRBcHBcIiwgXCJoZWF0bWFwXCIsIFwiaGVscFwiLCBcImhvbWVcIiwgXCJpSW5DaXJjbGVcIiwgXCJpbWFnZVwiLCBcImltcG9ydEFjdGlvblwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5wdXRPdXRwdXRcIiwgXCJpbnNwZWN0XCIsIFwiaW52ZXJ0XCIsIFwiaXBcIiwgXCJrZXlib2FyZFwiLCBcImtxbEZpZWxkXCIsIFwia3FsRnVuY3Rpb25cIiwgXCJrcWxPcGVyYW5kXCIsIFwia3FsU2VsZWN0b3JcIiwgXCJrcWxWYWx1ZVwiLCBcImt1YmVybmV0ZXNOb2RlXCIsIFwia3ViZXJuZXRlc1BvZFwiLCBcImxheWVyc1wiLCBcImxlbnNBcHBcIiwgXCJsZXR0ZXJpbmdcIiwgXCJsaW5lRGFzaGVkXCIsIFwibGluZURvdHRlZFwiLCBcImxpbmVTb2xpZFwiLCBcImxpbmtcIiwgXCJsaXN0XCIsIFwibGlzdEFkZFwiLCBcImxvY2tcIiwgXCJsb2NrT3BlblwiLCBcImxvZ29BV1NcIiwgXCJsb2dvQVdTTW9ub1wiLCBcImxvZ29BZXJvc3Bpa2VcIiwgXCJsb2dvQXBhY2hlXCIsIFwibG9nb0FwcFNlYXJjaFwiLCBcImxvZ29BenVyZVwiLCBcImxvZ29BenVyZU1vbm9cIiwgXCJsb2dvQmVhdHNcIiwgXCJsb2dvQnVzaW5lc3NBbmFseXRpY3NcIiwgXCJsb2dvQ2VwaFwiLCBcImxvZ29DbG91ZFwiLCBcImxvZ29DbG91ZEVudGVycHJpc2VcIiwgXCJsb2dvQ29kZVwiLCBcImxvZ29Db2Rlc2FuZGJveFwiLCBcImxvZ29Db3VjaGJhc2VcIiwgXCJsb2dvRG9ja2VyXCIsIFwibG9nb0Ryb3B3aXphcmRcIiwgXCJsb2dvRWxhc3RpY1wiLCBcImxvZ29FbGFzdGljU3RhY2tcIiwgXCJsb2dvRWxhc3RpY3NlYXJjaFwiLCBcImxvZ29FbnRlcnByaXNlU2VhcmNoXCIsIFwibG9nb0V0Y2RcIiwgXCJsb2dvR0NQXCIsIFwibG9nb0dDUE1vbm9cIiwgXCJsb2dvR2l0aHViXCIsIFwibG9nb0dtYWlsXCIsIFwibG9nb0dvbGFuZ1wiLCBcImxvZ29Hb29nbGVHXCIsIFwibG9nb0hBcHJveHlcIiwgXCJsb2dvSUJNXCIsIFwibG9nb0lCTU1vbm9cIiwgXCJsb2dvS2Fma2FcIiwgXCJsb2dvS2liYW5hXCIsIFwibG9nb0t1YmVybmV0ZXNcIiwgXCJsb2dvTG9nZ2luZ1wiLCBcImxvZ29Mb2dzdGFzaFwiLCBcImxvZ29NYXBzXCIsIFwibG9nb01lbWNhY2hlZFwiLCBcImxvZ29NZXRyaWNzXCIsIFwibG9nb01vbmdvZGJcIiwgXCJsb2dvTXlTUUxcIiwgXCJsb2dvTmdpbnhcIiwgXCJsb2dvT2JzZXJ2YWJpbGl0eVwiLCBcImxvZ29Pc3F1ZXJ5XCIsIFwibG9nb1BocFwiLCBcImxvZ29Qb3N0Z3Jlc1wiLCBcImxvZ29Qcm9tZXRoZXVzXCIsIFwibG9nb1JhYmJpdG1xXCIsIFwibG9nb1JlZGlzXCIsIFwibG9nb1NlY3VyaXR5XCIsIFwibG9nb1NpdGVTZWFyY2hcIiwgXCJsb2dvU2tldGNoXCIsIFwibG9nb1NsYWNrXCIsIFwibG9nb1VwdGltZVwiLCBcImxvZ29XZWJob29rXCIsIFwibG9nb1dpbmRvd3NcIiwgXCJsb2dvV29ya3BsYWNlU2VhcmNoXCIsIFwibG9nc0FwcFwiLCBcImxvZ3N0YXNoRmlsdGVyXCIsIFwibG9nc3Rhc2hJZlwiLCBcImxvZ3N0YXNoSW5wdXRcIiwgXCJsb2dzdGFzaE91dHB1dFwiLCBcImxvZ3N0YXNoUXVldWVcIiwgXCJtYWNoaW5lTGVhcm5pbmdBcHBcIiwgXCJtYWduZXRcIiwgXCJtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uXCIsIFwibWFnbmlmeVdpdGhNaW51c1wiLCBcIm1hZ25pZnlXaXRoUGx1c1wiLCBcIm1hbmFnZW1lbnRBcHBcIiwgXCJtYXBNYXJrZXJcIiwgXCJtZW1vcnlcIiwgXCJtZW51XCIsIFwibWVudURvd25cIiwgXCJtZW51TGVmdFwiLCBcIm1lbnVSaWdodFwiLCBcIm1lbnVVcFwiLCBcIm1lcmdlXCIsIFwibWV0cmljYmVhdEFwcFwiLCBcIm1ldHJpY3NBcHBcIiwgXCJtaW5pbWl6ZVwiLCBcIm1pbnVzXCIsIFwibWludXNJbkNpcmNsZVwiLCBcIm1pbnVzSW5DaXJjbGVGaWxsZWRcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5vZGVcIiwgXCJub3RlYm9va0FwcFwiLCBcIm51bWJlclwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIiwgXCJvdXRsaWVyRGV0ZWN0aW9uSm9iXCIsIFwicGFja2FnZVwiLCBcInBhY2tldGJlYXRBcHBcIiwgXCJwYWdlU2VsZWN0XCIsIFwicGFnZXNTZWxlY3RcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVsaW5lQXBwXCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNub3dmbGFrZVwiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc0FwcFwiLCBcInNxbEFwcFwiLCBcInN0YXJFbXB0eVwiLCBcInN0YXJFbXB0eVNwYWNlXCIsIFwic3RhckZpbGxlZFwiLCBcInN0YXJGaWxsZWRTcGFjZVwiLCBcInN0YXJNaW51c0VtcHR5XCIsIFwic3Rhck1pbnVzRmlsbGVkXCIsIFwic3RhclBsdXNFbXB0eVwiLCBcInN0YXJQbHVzRmlsbGVkXCIsIFwic3RhdHNcIiwgXCJzdG9wXCIsIFwic3RvcEZpbGxlZFwiLCBcInN0b3BTbGFzaFwiLCBcInN0b3JhZ2VcIiwgXCJzdHJpbmdcIiwgXCJzdWJtb2R1bGVcIiwgXCJzdW5cIiwgXCJzd2F0Y2hJbnB1dFwiLCBcInN5bWxpbmtcIiwgXCJ0YWJsZURlbnNpdHlDb21wYWN0XCIsIFwidGFibGVEZW5zaXR5RXhwYW5kZWRcIiwgXCJ0YWJsZURlbnNpdHlOb3JtYWxcIiwgXCJ0YWJsZU9mQ29udGVudHNcIiwgXCJ0YWdcIiwgXCJ0ZWFyXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJ0aW1lbGluZVwiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFzaFwiLCBcInVuZm9sZFwiLCBcInVubGlua1wiLCBcInVwZ3JhZGVBc3Npc3RhbnRBcHBcIiwgXCJ1cHRpbWVBcHBcIiwgXCJ1c2VyXCIsIFwidXNlckF2YXRhclwiLCBcInVzZXJzXCIsIFwidXNlcnNSb2xlc0FwcFwiLCBcInZlY3RvclwiLCBcInZpZGVvUGxheWVyXCIsIFwidmlzQXJlYVwiLCBcInZpc0FyZWFTdGFja2VkXCIsIFwidmlzQmFySG9yaXpvbnRhbFwiLCBcInZpc0Jhckhvcml6b250YWxTdGFja2VkXCIsIFwidmlzQmFyVmVydGljYWxcIiwgXCJ2aXNCYXJWZXJ0aWNhbFN0YWNrZWRcIiwgXCJ2aXNHYXVnZVwiLCBcInZpc0dvYWxcIiwgXCJ2aXNMaW5lXCIsIFwidmlzTWFwQ29vcmRpbmF0ZVwiLCBcInZpc01hcFJlZ2lvblwiLCBcInZpc01ldHJpY1wiLCBcInZpc1BpZVwiLCBcInZpc1RhYmxlXCIsIFwidmlzVGFnQ2xvdWRcIiwgXCJ2aXNUZXh0XCIsIFwidmlzVGltZWxpb25cIiwgXCJ2aXNWZWdhXCIsIFwidmlzVmlzdWFsQnVpbGRlclwiLCBcInZpc3VhbGl6ZUFwcFwiLCBcIndhdGNoZXNBcHBcIiwgXCJ3b3JkV3JhcFwiLCBcIndvcmRXcmFwRGlzYWJsZWRcIiwgXCJ3b3JrcGxhY2VTZWFyY2hBcHBcIiwgXCJ3cmVuY2hcIiwgXCJ0b2tlbkFsaWFzXCIsIFwidG9rZW5Bbm5vdGF0aW9uXCIsIFwidG9rZW5BcnJheVwiLCBcInRva2VuQmluYXJ5XCIsIFwidG9rZW5Cb29sZWFuXCIsIFwidG9rZW5DbGFzc1wiLCBcInRva2VuQ29tcGxldGlvblN1Z2dlc3RlclwiLCBcInRva2VuQ29uc3RhbnRcIiwgXCJ0b2tlbkRhdGVcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2hhcGVcIiwgXCJ0b2tlblN0cmluZ1wiLCBcInRva2VuU3RydWN0XCIsIFwidG9rZW5TeW1ib2xcIiwgXCJ0b2tlblRhZ1wiLCBcInRva2VuVGV4dFwiLCBcInRva2VuVG9rZW5Db3VudFwiLCBcInRva2VuVmFyaWFibGVcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWRdKSxcblxuICAgIC8qKlxuICAgICAgICogVGhlIHNpZGUgb2YgdGhlIGJhZGdlIHRoZSBpY29uIHNob3VsZCBzaXRcbiAgICAgICAqL1xuICAgIGljb25TaWRlOiBQcm9wVHlwZXMub25lT2YoW1wibGVmdFwiLCBcInJpZ2h0XCJdKSxcblxuICAgIC8qKlxuICAgICAgICogQWNjZXB0cyBlaXRoZXIgb3VyIHBhbGV0dGUgY29sb3JzIChwcmltYXJ5LCBzdWNjZXNzIC4uZXRjKSBvciBhIGhleCB2YWx1ZSBgI0ZGRkZGRmAsIGAjMDAwYC5cbiAgICAgICAqL1xuICAgIGNvbG9yOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZF0pLFxuXG4gICAgLyoqXG4gICAgICAgKiBXaWxsIG92ZXJyaWRlIGFueSBjb2xvciBwYXNzZWQgdGhyb3VnaCB0aGUgYGNvbG9yYCBwcm9wLlxuICAgICAgICovXG4gICAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgICAvKipcbiAgICAgICAqIFByb3BzIHBhc3NlZCB0byB0aGUgY2xvc2UgYnV0dG9uLlxuICAgICAgICovXG4gICAgY2xvc2VCdXR0b25Qcm9wczogUHJvcFR5cGVzLmFueSxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gICAgLyoqXG4gICAgICAgKiBXaWxsIGFwcGx5IGFuIG9uY2xpY2sgdG8gaWNvbiB3aXRoaW4gdGhlIGJhZGdlXG4gICAgICAgKi9cbiAgICBpY29uT25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgICAvKipcbiAgICAgICAqIEFyaWEgbGFiZWwgYXBwbGllZCB0byB0aGUgaWNvbk9uQ2xpY2sgYnV0dG9uXG4gICAgICAgKi9cbiAgICBpY29uT25DbGlja0FyaWFMYWJlbDogUHJvcFR5cGVzLmFueSxcblxuICAgIC8qKlxuICAgICAgICogV2lsbCBhcHBseSBhbiBvbmNsaWNrIHRvIHRoZSBiYWRnZSBpdHNlbGZcbiAgICAgICAqL1xuICAgIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuXG4gICAgLyoqXG4gICAgICAgKiBBcmlhIGxhYmVsIGFwcGxpZWQgdG8gdGhlIG9uQ2xpY2sgYnV0dG9uXG4gICAgICAgKi9cbiAgICBvbkNsaWNrQXJpYUxhYmVsOiBQcm9wVHlwZXMuYW55LFxuICAgIGhyZWY6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgdGFyZ2V0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHJlbDogUHJvcFR5cGVzLnN0cmluZ1xuICB9KS5pc1JlcXVpcmVkXSksXG5cbiAgLyoqXG4gICAgICAgKiBQYWRkaW5nIGZvciB0aGUgbGlzdCBpdGVtcy5cbiAgICAgICAqL1xuICBwYWRkaW5nU2l6ZTogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgICAqIEhvdyB0byBoYW5kbGUgbG9uZyB0ZXh0IHdpdGhpbiB0aGUgaXRlbS5cbiAgICAgICAqIFdyYXBwaW5nIG9ubHkgd29ya3MgaWYgdmlydHVhbGl6YXRpb24gaXMgb2ZmLlxuICAgICAgICovXG4gIHRleHRXcmFwOiBQcm9wVHlwZXMub25lT2YoW1widHJ1bmNhdGVcIiwgXCJ3cmFwXCJdKSxcblxuICAvKipcbiAgICAgICAqIFVzZSB2aXJ0dWFsaXplZCByZW5kZXJpbmcgZm9yIGxpc3QgaXRlbXMgd2l0aCBgcmVhY3Qtd2luZG93YC5cbiAgICAgICAqIFNldHMgZWFjaCByb3cncyBoZWlnaHQgdG8gdGhlIHZhbHVlIG9mIGByb3dIZWlnaHRgLlxuICAgICAgICovXG4gIGlzVmlydHVhbGl6ZWQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbdHJ1ZV0pLCBQcm9wVHlwZXMub25lT2YoW2ZhbHNlXSkuaXNSZXF1aXJlZF0pLFxuXG4gIC8qKlxuICAgICAgICogIFRoZSBoZWlnaHQgb2YgZWFjaCBvcHRpb24gaW4gcGl4ZWxzLiBEZWZhdWx0cyB0byBgMzJgLlxuICAgICAgICogIEhhcyBubyBlZmZlY3QgaWYgYGlzVmlydHVhbGl6ZWQ9ZmFsc2VgLlxuICAgICAgICovXG4gIHJvd0hlaWdodDogUHJvcFR5cGVzLm51bWJlcixcblxuICAvKipcbiAgICAgKiBBbGwgcG9zc2libGUgb3B0aW9uc1xuICAgICAqL1xuICBvcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuICAgIC8qKlxuICAgICAgICogT3B0aW9uYWwgYGJvb2xlYW5gLlxuICAgICAgICogU2V0IHRvIGB0cnVlYCB0byBpbmRpY2F0ZSBvYmplY3QgaXMganVzdCBhIGdyb3VwaW5nIGxhYmVsLCBub3QgYSBzZWxlY3RhYmxlIGl0ZW1cbiAgICAgICAqL1xuICAgIGlzR3JvdXBMYWJlbDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFt0cnVlXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm9uZU9mKFtmYWxzZV0pXSksXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAgIC8qKlxuICAgICAgICogVmlzaWJsZSBsYWJlbCBvZiBvcHRpb24uXG4gICAgICAgKiBNdXN0IGJlIHVuaXF1ZSBhY3Jvc3MgaXRlbXMgaWYgYGtleWAgaXMgbm90IHN1cHBsaWVkXG4gICAgICAgKi9cbiAgICBsYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcblxuICAgIC8qKlxuICAgICAgICogT3B0aW9uYWxseSBjaGFuZ2UgdGhlIHNlYXJjaGFibGUgdGVybSBieSBwYXNzaW5nIGEgZGlmZmVyZW50IHN0cmluZyBvdGhlciB0aGFuIHRoZSBgbGFiZWxgLlxuICAgICAgICogQmVzdCB1c2VkIHdoZW4gY3JlYXRpbmcgYSBjdXN0b20gYG9wdGlvblJlbmRlcmAgdG8gc2VwYXJhdGUgdGhlIGxhYmVsIGZyb20gbWV0YWRhdGEgYnV0IGFsbG93aW5nIHRvIHNlYXJjaCBvbiBib3RoXG4gICAgICAgKi9cbiAgICBzZWFyY2hhYmxlTGFiZWw6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgICAvKipcbiAgICAgICAqIE11c3QgYmUgdW5pcXVlIGFjcm9zcyBpdGVtcy5cbiAgICAgICAqIFdpbGwgYmUgdXNlZCB0byBtYXRjaCBvcHRpb25zIGluc3RlYWQgb2YgYGxhYmVsYFxuICAgICAgICovXG4gICAga2V5OiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gICAgLyoqXG4gICAgICAgKiBMZWF2ZSBgdW5kZWZpbmVkYCB0byBpbmRpY2F0ZSBub3Qgc2VsZWN0ZWQsXG4gICAgICAgKiAnb24nIHRvIGluZGljYXRlIGluY2x1c2lvbiBhbmRcbiAgICAgICAqICdvZmYnIHRvIGluZGljYXRlIGV4Y2x1c2lvblxuICAgICAgICovXG4gICAgY2hlY2tlZDogUHJvcFR5cGVzLm9uZU9mKFtcIm9uXCIsIFwib2ZmXCIsIHVuZGVmaW5lZF0pLFxuICAgIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAgIC8qKlxuICAgICAgICogTm9kZSB0byBhZGQgYmV0d2VlbiB0aGUgc2VsZWN0aW9uIGljb24gYW5kIHRoZSBsYWJlbFxuICAgICAgICovXG4gICAgcHJlcGVuZDogUHJvcFR5cGVzLm5vZGUsXG5cbiAgICAvKipcbiAgICAgICAqIE5vZGUgdG8gYWRkIHRvIHRoZSBmYXIgcmlnaHQgb2YgdGhlIGl0ZW1cbiAgICAgICAqL1xuICAgIGFwcGVuZDogUHJvcFR5cGVzLm5vZGUsXG4gICAgcmVmOiBQcm9wVHlwZXMuZnVuYyxcblxuICAgIC8qKlxuICAgICAgICogT3B0aW9uIGRhdGEgdG8gcGFzcyB0aHJvdWdoIHRvIHRoZSBgcmVuZGVyT3B0aW9uc2AgZWxlbWVudC5cbiAgICAgICAqIEJ5cGFzcyBgRXVpU2VsZWN0YWJsZUl0ZW1gIGFuZCBhdm9pZCBET00gYXR0cmlidXRlIHdhcm5pbmdzLlxuICAgICAgICovXG4gICAgZGF0YTogUHJvcFR5cGVzLnNoYXBlKHt9KVxuICB9KS5pc1JlcXVpcmVkKS5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgICAqIEZpbHRlcmVkIG9wdGlvbnMgbGlzdCAoaWYgYXBwbGljYWJsZSlcbiAgICAgKi9cbiAgdmlzaWJsZU9wdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaXNHcm91cExhYmVsOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW3RydWVdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2YoW2ZhbHNlXSldKSxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHNlYXJjaGFibGVMYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBrZXk6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY2hlY2tlZDogUHJvcFR5cGVzLm9uZU9mKFtcIm9uXCIsIFwib2ZmXCIsIHVuZGVmaW5lZF0pLFxuICAgIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBwcmVwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgICBhcHBlbmQ6IFByb3BUeXBlcy5ub2RlLFxuICAgIHJlZjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgZGF0YTogUHJvcFR5cGVzLnNoYXBlKHt9KVxuICB9KS5pc1JlcXVpcmVkKSxcblxuICAvKipcbiAgICAgKiBTZWFyY2ggdmFsdWUgdG8gaGlnaGxpZ2h0IG9uIHRoZSBvcHRpb24gcmVuZGVyXG4gICAgICovXG4gIHNlYXJjaFZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG5cbiAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgYXJyYXkgb2Ygb3B0aW9ucyB3aXRoIGFsdGVyZWQgY2hlY2tlZCBzdGF0ZVxuICAgICAqL1xuICBvbk9wdGlvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgICAqIEN1c3RvbSByZW5kZXIgZm9yIHRoZSBsYWJlbCBwb3J0aW9uIG9mIHRoZSBvcHRpb247XG4gICAgICogVGFrZXMgKG9wdGlvbiwgc2VhcmNoVmFsdWUpLCByZXR1cm5zIFJlYWN0Tm9kZVxuICAgICAqL1xuICByZW5kZXJPcHRpb246IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgICAqIFNldHMgdGhlIG1heCBoZWlnaHQgaW4gcGl4ZWxzIG9yIHBhc3MgYGZ1bGxgIHRvIGFsbG93XG4gICAgICogdGhlIHdob2xlIGdyb3VwIHRvIGZpbGwgdGhlIGhlaWdodCBvZiBpdHMgY29udGFpbmVyIGFuZFxuICAgICAqIGFsbG93cyB0aGUgbGlzdCBncm93IGFzIHdlbGxcbiAgICAgKi9cbiAgaGVpZ2h0OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5vbmVPZihbXCJmdWxsXCJdKV0pLFxuXG4gIC8qKlxuICAgICAqIEFsbG93IGN5Y2xpbmcgdGhyb3VnaCB0aGUgb24sIG9mZiBhbmQgdW5kZWZpbmVkIHN0YXRlIG9mIG9wdGlvbi5jaGVja2VkXG4gICAgICogYW5kIG5vdCBqdXN0IG9uIGFuZCB1bmRlZmluZWRcbiAgICAgKi9cbiAgYWxsb3dFeGNsdXNpb25zOiBQcm9wVHlwZXMuYm9vbCxcbiAgc2VhcmNoYWJsZTogUHJvcFR5cGVzLmJvb2wsXG4gIG1ha2VPcHRpb25JZDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgbGlzdElkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIHNldEFjdGl2ZU9wdGlvbkluZGV4OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbnZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImRpc2FibGVkXCIsIFwiY2hlY2tlZFwiLCBcImlzRm9jdXNlZFwiLCBcInNob3dJY29uc1wiLCBcInByZXBlbmRcIiwgXCJhcHBlbmRcIiwgXCJhbGxvd0V4Y2x1c2lvbnNcIiwgXCJvbkZvY3VzQmFkZ2VcIiwgXCJwYWRkaW5nU2l6ZVwiLCBcInJvbGVcIiwgXCJzZWFyY2hhYmxlXCIsIFwidGV4dFdyYXBcIl0sXG4gICAgX2V4Y2x1ZGVkMiA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGtleXNPZiB9IGZyb20gJy4uLy4uL2NvbW1vbic7XG5pbXBvcnQgeyBFdWlJMThuIH0gZnJvbSAnLi4vLi4vaTE4bic7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vLi4vaWNvbic7XG5pbXBvcnQgeyBFdWlTY3JlZW5SZWFkZXJPbmx5IH0gZnJvbSAnLi4vLi4vYWNjZXNzaWJpbGl0eSc7XG5pbXBvcnQgeyBFdWlCYWRnZSB9IGZyb20gJy4uLy4uL2JhZGdlJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbmZ1bmN0aW9uIHJlc29sdmVJY29uQW5kQ29sb3IoY2hlY2tlZCkge1xuICBpZiAoIWNoZWNrZWQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWNvbjogJ2VtcHR5J1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gY2hlY2tlZCA9PT0gJ29uJyA/IHtcbiAgICBpY29uOiAnY2hlY2snLFxuICAgIGNvbG9yOiAndGV4dCdcbiAgfSA6IHtcbiAgICBpY29uOiAnY3Jvc3MnLFxuICAgIGNvbG9yOiAndGV4dCdcbiAgfTtcbn1cblxudmFyIHBhZGRpbmdTaXplVG9DbGFzc05hbWVNYXAgPSB7XG4gIG5vbmU6IG51bGwsXG4gIHM6ICdldWlTZWxlY3RhYmxlTGlzdEl0ZW0tLXBhZGRpbmdTbWFsbCdcbn07XG5leHBvcnQgdmFyIFBBRERJTkdfU0laRVMgPSBrZXlzT2YocGFkZGluZ1NpemVUb0NsYXNzTmFtZU1hcCk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvcHJlZmVyLXN0YXRlbGVzcy1mdW5jdGlvblxuZXhwb3J0IHZhciBFdWlTZWxlY3RhYmxlTGlzdEl0ZW0gPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEV1aVNlbGVjdGFibGVMaXN0SXRlbSwgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihFdWlTZWxlY3RhYmxlTGlzdEl0ZW0pO1xuXG4gIGZ1bmN0aW9uIEV1aVNlbGVjdGFibGVMaXN0SXRlbShwcm9wcykge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlTZWxlY3RhYmxlTGlzdEl0ZW0pO1xuXG4gICAgcmV0dXJuIF9zdXBlci5jYWxsKHRoaXMsIHByb3BzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdWlTZWxlY3RhYmxlTGlzdEl0ZW0sIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMuY2xhc3NOYW1lLFxuICAgICAgICAgIGRpc2FibGVkID0gX3RoaXMkcHJvcHMuZGlzYWJsZWQsXG4gICAgICAgICAgY2hlY2tlZCA9IF90aGlzJHByb3BzLmNoZWNrZWQsXG4gICAgICAgICAgaXNGb2N1c2VkID0gX3RoaXMkcHJvcHMuaXNGb2N1c2VkLFxuICAgICAgICAgIHNob3dJY29ucyA9IF90aGlzJHByb3BzLnNob3dJY29ucyxcbiAgICAgICAgICBwcmVwZW5kID0gX3RoaXMkcHJvcHMucHJlcGVuZCxcbiAgICAgICAgICBhcHBlbmQgPSBfdGhpcyRwcm9wcy5hcHBlbmQsXG4gICAgICAgICAgYWxsb3dFeGNsdXNpb25zID0gX3RoaXMkcHJvcHMuYWxsb3dFeGNsdXNpb25zLFxuICAgICAgICAgIG9uRm9jdXNCYWRnZSA9IF90aGlzJHByb3BzLm9uRm9jdXNCYWRnZSxcbiAgICAgICAgICBfdGhpcyRwcm9wcyRwYWRkaW5nU2kgPSBfdGhpcyRwcm9wcy5wYWRkaW5nU2l6ZSxcbiAgICAgICAgICBwYWRkaW5nU2l6ZSA9IF90aGlzJHByb3BzJHBhZGRpbmdTaSA9PT0gdm9pZCAwID8gJ3MnIDogX3RoaXMkcHJvcHMkcGFkZGluZ1NpLFxuICAgICAgICAgIF90aGlzJHByb3BzJHJvbGUgPSBfdGhpcyRwcm9wcy5yb2xlLFxuICAgICAgICAgIHJvbGUgPSBfdGhpcyRwcm9wcyRyb2xlID09PSB2b2lkIDAgPyAnb3B0aW9uJyA6IF90aGlzJHByb3BzJHJvbGUsXG4gICAgICAgICAgc2VhcmNoYWJsZSA9IF90aGlzJHByb3BzLnNlYXJjaGFibGUsXG4gICAgICAgICAgdGV4dFdyYXAgPSBfdGhpcyRwcm9wcy50ZXh0V3JhcCxcbiAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzLCBfZXhjbHVkZWQpO1xuXG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVNlbGVjdGFibGVMaXN0SXRlbScsIHtcbiAgICAgICAgJ2V1aVNlbGVjdGFibGVMaXN0SXRlbS1pc0ZvY3VzZWQnOiBpc0ZvY3VzZWRcbiAgICAgIH0sIHBhZGRpbmdTaXplVG9DbGFzc05hbWVNYXBbcGFkZGluZ1NpemVdLCBjbGFzc05hbWUpO1xuICAgICAgdmFyIHRleHRDbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpU2VsZWN0YWJsZUxpc3RJdGVtX190ZXh0JywgX2RlZmluZVByb3BlcnR5KHt9LCBcImV1aVNlbGVjdGFibGVMaXN0SXRlbV9fdGV4dC0tXCIuY29uY2F0KHRleHRXcmFwKSwgdGV4dFdyYXApKTtcbiAgICAgIHZhciBvcHRpb25JY29uO1xuXG4gICAgICBpZiAoc2hvd0ljb25zKSB7XG4gICAgICAgIHZhciBfcmVzb2x2ZUljb25BbmRDb2xvciA9IHJlc29sdmVJY29uQW5kQ29sb3IoY2hlY2tlZCksXG4gICAgICAgICAgICBpY29uID0gX3Jlc29sdmVJY29uQW5kQ29sb3IuaWNvbixcbiAgICAgICAgICAgIGNvbG9yID0gX3Jlc29sdmVJY29uQW5kQ29sb3IuY29sb3I7XG5cbiAgICAgICAgb3B0aW9uSWNvbiA9IF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlTZWxlY3RhYmxlTGlzdEl0ZW1fX2ljb25cIixcbiAgICAgICAgICBjb2xvcjogY29sb3IsXG4gICAgICAgICAgdHlwZTogaWNvblxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdmFyIHN0YXRlO1xuICAgICAgdmFyIGluc3RydWN0aW9uO1xuXG4gICAgICBpZiAoYWxsb3dFeGNsdXNpb25zICYmIGNoZWNrZWQgPT09ICdvbicpIHtcbiAgICAgICAgc3RhdGUgPSBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICB0b2tlbjogXCJldWlTZWxlY3RhYmxlTGlzdEl0ZW0uaW5jbHVkZWRPcHRpb25cIixcbiAgICAgICAgICBkZWZhdWx0OiBcIlNlbGVjdGVkIG9wdGlvbi5cIlxuICAgICAgICB9KTtcbiAgICAgICAgaW5zdHJ1Y3Rpb24gPSBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICB0b2tlbjogXCJldWlTZWxlY3RhYmxlTGlzdEl0ZW0uaW5jbHVkZWRPcHRpb25JbnN0cnVjdGlvbnNcIixcbiAgICAgICAgICBkZWZhdWx0OiBcIlRvIGV4Y2x1ZGUgdGhpcyBvcHRpb24sIHByZXNzIGVudGVyLlwiXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChhbGxvd0V4Y2x1c2lvbnMgJiYgY2hlY2tlZCA9PT0gJ29mZicpIHtcbiAgICAgICAgc3RhdGUgPSBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICB0b2tlbjogXCJldWlTZWxlY3RhYmxlTGlzdEl0ZW0uZXhjbHVkZWRPcHRpb25cIixcbiAgICAgICAgICBkZWZhdWx0OiBcIkV4Y2x1ZGVkIG9wdGlvbi5cIlxuICAgICAgICB9KTtcbiAgICAgICAgaW5zdHJ1Y3Rpb24gPSBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICB0b2tlbjogXCJldWlTZWxlY3RhYmxlTGlzdEl0ZW0uZXhjbHVkZWRPcHRpb25JbnN0cnVjdGlvbnNcIixcbiAgICAgICAgICBkZWZhdWx0OiBcIlRvIHVuY2hlY2sgdGhpcyBvcHRpb24sIHByZXNzIGVudGVyLlwiXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChhbGxvd0V4Y2x1c2lvbnMgJiYgIWNoZWNrZWQpIHtcbiAgICAgICAgaW5zdHJ1Y3Rpb24gPSBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICB0b2tlbjogXCJldWlTZWxlY3RhYmxlTGlzdEl0ZW0udW5ja2Vja2VkT3B0aW9uSW5zdHJ1Y3Rpb25zXCIsXG4gICAgICAgICAgZGVmYXVsdDogXCJUbyBzZWxlY3QgdGhpcyBvcHRpb24sIHByZXNzIGVudGVyLlwiXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB2YXIgaXNDaGVja2VkID0gIWRpc2FibGVkICYmIHR5cGVvZiBjaGVja2VkID09PSAnc3RyaW5nJztcblxuICAgICAgaWYgKCFhbGxvd0V4Y2x1c2lvbnMgJiYgaXNDaGVja2VkKSB7XG4gICAgICAgIHN0YXRlID0gX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgdG9rZW46IFwiZXVpU2VsZWN0YWJsZUxpc3RJdGVtLmNoZWNrZWRPcHRpb25cIixcbiAgICAgICAgICBkZWZhdWx0OiBcIkNoZWNrZWQgb3B0aW9uLlwiXG4gICAgICAgIH0pO1xuICAgICAgICBpbnN0cnVjdGlvbiA9IHNlYXJjaGFibGUgPyBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICB0b2tlbjogXCJldWlTZWxlY3RhYmxlTGlzdEl0ZW0uY2hlY2tlZE9wdGlvbkluc3RydWN0aW9uc1wiLFxuICAgICAgICAgIGRlZmF1bHQ6IFwiVG8gdW5jaGVjayB0aGlzIG9wdGlvbiwgcHJlc3MgZW50ZXIuXCJcbiAgICAgICAgfSkgOiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIHZhciBwcmVwZW5kTm9kZTtcblxuICAgICAgaWYgKHByZXBlbmQpIHtcbiAgICAgICAgcHJlcGVuZE5vZGUgPSBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgICAgICAgY2xhc3NOYW1lOiBcImV1aVNlbGVjdGFibGVMaXN0SXRlbV9fcHJlcGVuZFwiXG4gICAgICAgIH0sIHByZXBlbmQpO1xuICAgICAgfVxuXG4gICAgICB2YXIgYXBwZW5kTm9kZTtcblxuICAgICAgaWYgKGFwcGVuZCB8fCAhIW9uRm9jdXNCYWRnZSkge1xuICAgICAgICB2YXIgb25Gb2N1c0JhZGdlTm9kZTtcbiAgICAgICAgdmFyIGRlZmF1bHRPbkZvY3VzQmFkZ2VQcm9wcyA9IHtcbiAgICAgICAgICAnYXJpYS1oaWRkZW4nOiB0cnVlLFxuICAgICAgICAgIGljb25UeXBlOiAncmV0dXJuS2V5JyxcbiAgICAgICAgICBpY29uU2lkZTogJ2xlZnQnLFxuICAgICAgICAgIGNvbG9yOiAnaG9sbG93J1xuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChvbkZvY3VzQmFkZ2UgPT09IHRydWUpIHtcbiAgICAgICAgICBvbkZvY3VzQmFkZ2VOb2RlID0gX19fRW1vdGlvbkpTWChFdWlCYWRnZSwgX2V4dGVuZHMoe1xuICAgICAgICAgICAgY2xhc3NOYW1lOiBcImV1aVNlbGVjdGFibGVMaXN0SXRlbV9fb25Gb2N1c0JhZGdlXCJcbiAgICAgICAgICB9LCBkZWZhdWx0T25Gb2N1c0JhZGdlUHJvcHMpKTtcbiAgICAgICAgfSBlbHNlIGlmICghIW9uRm9jdXNCYWRnZSAmJiBvbkZvY3VzQmFkZ2UgIT09IGZhbHNlKSB7XG4gICAgICAgICAgdmFyIF9jaGlsZHJlbiA9IG9uRm9jdXNCYWRnZS5jaGlsZHJlbixcbiAgICAgICAgICAgICAgX2NsYXNzTmFtZSA9IG9uRm9jdXNCYWRnZS5jbGFzc05hbWUsXG4gICAgICAgICAgICAgIHJlc3RCYWRnZVByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9uRm9jdXNCYWRnZSwgX2V4Y2x1ZGVkMik7XG5cbiAgICAgICAgICBvbkZvY3VzQmFkZ2VOb2RlID0gX19fRW1vdGlvbkpTWChFdWlCYWRnZSwgX2V4dGVuZHMoe1xuICAgICAgICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWVzKCdldWlTZWxlY3RhYmxlTGlzdEl0ZW1fX29uRm9jdXNCYWRnZScsIF9jbGFzc05hbWUpXG4gICAgICAgICAgfSwgZGVmYXVsdE9uRm9jdXNCYWRnZVByb3BzLCByZXN0QmFkZ2VQcm9wcyksIF9jaGlsZHJlbik7XG4gICAgICAgIH0gLy8gT25seSBkaXNwbGF5IHRoZSBhcHBlbmQgd3JhcHBlciBpZiBhcHBlbmQgZXhpc3RzIG9yIGlzRm9jdXNlZFxuXG5cbiAgICAgICAgaWYgKGFwcGVuZCB8fCBpc0ZvY3VzZWQgJiYgIWRpc2FibGVkKSB7XG4gICAgICAgICAgYXBwZW5kTm9kZSA9IF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlTZWxlY3RhYmxlTGlzdEl0ZW1fX2FwcGVuZFwiXG4gICAgICAgICAgfSwgYXBwZW5kLCBcIiBcIiwgaXNGb2N1c2VkICYmICFkaXNhYmxlZCA/IG9uRm9jdXNCYWRnZU5vZGUgOiBudWxsKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgaW5zdHJ1Y3Rpb25zID0gKGluc3RydWN0aW9uIHx8IHN0YXRlKSAmJiBfX19FbW90aW9uSlNYKEV1aVNjcmVlblJlYWRlck9ubHksIG51bGwsIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgbnVsbCwgc3RhdGUgfHwgaW5zdHJ1Y3Rpb24gPyAnIC0gJyA6IG51bGwsIHN0YXRlLCBzdGF0ZSAmJiBpbnN0cnVjdGlvbiA/ICcgJyA6IG51bGwsIGluc3RydWN0aW9uKSk7XG5cbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwibGlcIiwgX2V4dGVuZHMoe1xuICAgICAgICByb2xlOiByb2xlLFxuICAgICAgICBcImRhdGEtdGVzdC1zZWxlY3RlZFwiOiBpc0NoZWNrZWQgLy8gV2hldGhlciB0aGUgaXRlbSBpcyBjaGVja2VkL3NlbGVjdGVkXG4gICAgICAgICxcbiAgICAgICAgXCJhcmlhLWNoZWNrZWRcIjogcm9sZSA9PT0gJ29wdGlvbicgPyBpc0NoZWNrZWQgOiB1bmRlZmluZWQgLy8gV2hldGhlciB0aGUgaXRlbSBpcyBcImNoZWNrZWRcIlxuICAgICAgICAsXG4gICAgICAgIFwiYXJpYS1zZWxlY3RlZFwiOiAhZGlzYWJsZWQgJiYgaXNGb2N1c2VkIC8vIFdoZXRoZXIgdGhlIGl0ZW0gaGFzIGtleWJvYXJkIGZvY3VzIHBlciBXMyBzcGVjXG4gICAgICAgICxcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICBcImFyaWEtZGlzYWJsZWRcIjogZGlzYWJsZWRcbiAgICAgIH0sIHJlc3QpLCBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJldWlTZWxlY3RhYmxlTGlzdEl0ZW1fX2NvbnRlbnRcIlxuICAgICAgfSwgb3B0aW9uSWNvbiwgcHJlcGVuZE5vZGUsIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiB0ZXh0Q2xhc3Nlc1xuICAgICAgfSwgY2hpbGRyZW4sIGluc3RydWN0aW9ucyksIGFwcGVuZE5vZGUpKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gRXVpU2VsZWN0YWJsZUxpc3RJdGVtO1xufShDb21wb25lbnQpO1xuXG5fZGVmaW5lUHJvcGVydHkoRXVpU2VsZWN0YWJsZUxpc3RJdGVtLCBcImRlZmF1bHRQcm9wc1wiLCB7XG4gIHNob3dJY29uczogdHJ1ZSxcbiAgb25Gb2N1c0JhZGdlOiB0cnVlLFxuICB0ZXh0V3JhcDogJ3RydW5jYXRlJ1xufSk7XG5cbkV1aVNlbGVjdGFibGVMaXN0SXRlbS5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgICAgICogQXBwbGllcyBhbiBpY29uIGFuZCB2aXN1YWwgc3R5bGluZyB0byBhY3RpdmF0ZWQgaXRlbXNcbiAgICAgICAqL1xuICBjaGVja2VkOiBQcm9wVHlwZXMub25lT2YoW1wib25cIiwgXCJvZmZcIiwgdW5kZWZpbmVkXSksXG5cbiAgLyoqXG4gICAgICAgKiBTaG93cyBpY29ucyBiYXNlZCBvbiBgY2hlY2tlZGAgdHlwZVxuICAgICAgICovXG4gIHNob3dJY29uczogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICAgKiBIaWdobGlnaHRzIHRoZSBpdGVtIGZvciBwc2V1ZG8gZm9jdXNcbiAgICAgICAqL1xuICBpc0ZvY3VzZWQ6IFByb3BUeXBlcy5ib29sLFxuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIHByZXBlbmQ6IFByb3BUeXBlcy5ub2RlLFxuICBhcHBlbmQ6IFByb3BUeXBlcy5ub2RlLFxuICBhbGxvd0V4Y2x1c2lvbnM6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAgICogV2hlbiBlbmFibGVkIGJ5IHNldHRpbmcgdG8gZWl0aGVyIGB0cnVlYCBvciBwYXNzaW5nIGN1c3RvbSBhIGN1c3RvbSBiYWRnZSxcbiAgICAgICAqIHNob3dzIGEgaG9sbG93IGJhZGdlIGFzIGFuIGFwcGVuZCAoZmFyIHJpZ2h0KSB3aGVuIHRoZSBpdGVtIGlzIGZvY3VzZWQuXG4gICAgICAgKiBUaGUgZGVmYXVsdCBjb250ZW50IHdoZW4gYHRydWVgIGlzIGBcdTIxQTkgdG8gc2VsZWN0L2Rlc2VsZWN0L2luY2x1ZGUvZXhjbHVkZWBcbiAgICAgICAqL1xuICBvbkZvY3VzQmFkZ2U6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgLyoqXG4gICAgICAgKiBBY2NlcHRzIGFueSBzdHJpbmcgZnJvbSBvdXIgaWNvbiBsaWJyYXJ5XG4gICAgICAgKi9cbiAgICBpY29uVHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYWxlcnRcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhc3Rlcmlza1wiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJib2x0XCIsIFwiYm94ZXNIb3Jpem9udGFsXCIsIFwiYm94ZXNWZXJ0aWNhbFwiLCBcImJyYW5jaFwiLCBcImJyYW5jaFVzZXJcIiwgXCJicm9vbVwiLCBcImJydXNoXCIsIFwiYnVnXCIsIFwiYnVsbHNleWVcIiwgXCJjYWxlbmRhclwiLCBcImNhbnZhc0FwcFwiLCBcImNhc2VzQXBwXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsb2NrXCIsIFwiY2xvdWREcml6emxlXCIsIFwiY2xvdWRTdG9ybXlcIiwgXCJjbG91ZFN1bm55XCIsIFwiY2x1c3RlclwiLCBcImNvZGVBcHBcIiwgXCJjb2xvclwiLCBcImNvbXB1dGVcIiwgXCJjb25zb2xlXCIsIFwiY29uc29sZUFwcFwiLCBcImNvbnRhaW5lclwiLCBcImNvbnRpbnVpdHlBYm92ZVwiLCBcImNvbnRpbnVpdHlBYm92ZUJlbG93XCIsIFwiY29udGludWl0eUJlbG93XCIsIFwiY29udGludWl0eVdpdGhpblwiLCBcImNvbnRyb2xzSG9yaXpvbnRhbFwiLCBcImNvbnRyb2xzVmVydGljYWxcIiwgXCJjb3B5XCIsIFwiY29weUNsaXBib2FyZFwiLCBcImNyZWF0ZUFkdmFuY2VkSm9iXCIsIFwiY3JlYXRlTXVsdGlNZXRyaWNKb2JcIiwgXCJjcmVhdGVQb3B1bGF0aW9uSm9iXCIsIFwiY3JlYXRlU2luZ2xlTWV0cmljSm9iXCIsIFwiY3Jvc3NcIiwgXCJjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcFwiLCBcImNyb3NzSW5BQ2lyY2xlRmlsbGVkXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpc2NvdmVyQXBwXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG91YmxlQXJyb3dMZWZ0XCIsIFwiZG91YmxlQXJyb3dSaWdodFwiLCBcImRvd25sb2FkXCIsIFwiZWRpdG9yQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JBbGlnbkxlZnRcIiwgXCJlZGl0b3JBbGlnblJpZ2h0XCIsIFwiZWRpdG9yQm9sZFwiLCBcImVkaXRvckNoZWNrbGlzdFwiLCBcImVkaXRvckNvZGVCbG9ja1wiLCBcImVkaXRvckNvbW1lbnRcIiwgXCJlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbFwiLCBcImVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbFwiLCBcImVkaXRvckhlYWRpbmdcIiwgXCJlZGl0b3JJdGFsaWNcIiwgXCJlZGl0b3JJdGVtQWxpZ25Cb3R0b21cIiwgXCJlZGl0b3JJdGVtQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JJdGVtQWxpZ25MZWZ0XCIsIFwiZWRpdG9ySXRlbUFsaWduTWlkZGxlXCIsIFwiZWRpdG9ySXRlbUFsaWduUmlnaHRcIiwgXCJlZGl0b3JJdGVtQWxpZ25Ub3BcIiwgXCJlZGl0b3JMaW5rXCIsIFwiZWRpdG9yT3JkZXJlZExpc3RcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnRcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BMZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BSaWdodFwiLCBcImVkaXRvclJlZG9cIiwgXCJlZGl0b3JTdHJpa2VcIiwgXCJlZGl0b3JUYWJsZVwiLCBcImVkaXRvclVuZGVybGluZVwiLCBcImVkaXRvclVuZG9cIiwgXCJlZGl0b3JVbm9yZGVyZWRMaXN0XCIsIFwiZW1haWxcIiwgXCJlbXB0eVwiLCBcImVtc0FwcFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibW9iaWxlXCIsIFwibW9uaXRvcmluZ0FwcFwiLCBcIm1vb25cIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFwZXJDbGlwXCIsIFwicGFydGlhbFwiLCBcInBhdXNlXCIsIFwicGF5bWVudFwiLCBcInBlbmNpbFwiLCBcInBlcmNlbnRcIiwgXCJwaW5cIiwgXCJwaW5GaWxsZWRcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBsYXlcIiwgXCJwbGF5RmlsbGVkXCIsIFwicGx1c1wiLCBcInBsdXNJbkNpcmNsZVwiLCBcInBsdXNJbkNpcmNsZUZpbGxlZFwiLCBcInBvcG91dFwiLCBcInB1c2hcIiwgXCJxdWVzdGlvbkluQ2lyY2xlXCIsIFwicXVvdGVcIiwgXCJyZWNlbnRseVZpZXdlZEFwcFwiLCBcInJlZnJlc2hcIiwgXCJyZWdyZXNzaW9uSm9iXCIsIFwicmVwb3J0ZXJcIiwgXCJyZXBvcnRpbmdBcHBcIiwgXCJyZXR1cm5LZXlcIiwgXCJzYXZlXCIsIFwic2F2ZWRPYmplY3RzQXBwXCIsIFwic2NhbGVcIiwgXCJzZWFyY2hcIiwgXCJzZWFyY2hQcm9maWxlckFwcFwiLCBcInNlY3VyaXR5QW5hbHl0aWNzQXBwXCIsIFwic2VjdXJpdHlBcHBcIiwgXCJzZWN1cml0eVNpZ25hbFwiLCBcInNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWRcIiwgXCJzZWN1cml0eVNpZ25hbFJlc29sdmVkXCIsIFwic2Vzc2lvblZpZXdlclwiLCBcInNoYXJkXCIsIFwic2hhcmVcIiwgXCJzbm93Zmxha2VcIiwgXCJzb3J0RG93blwiLCBcInNvcnRMZWZ0XCIsIFwic29ydFJpZ2h0XCIsIFwic29ydFVwXCIsIFwic29ydGFibGVcIiwgXCJzcGFjZXNBcHBcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EZW5zZVZlY3RvclwiLCBcInRva2VuRWxlbWVudFwiLCBcInRva2VuRW51bVwiLCBcInRva2VuRW51bU1lbWJlclwiLCBcInRva2VuRXZlbnRcIiwgXCJ0b2tlbkV4Y2VwdGlvblwiLCBcInRva2VuRmllbGRcIiwgXCJ0b2tlbkZpbGVcIiwgXCJ0b2tlbkZsYXR0ZW5lZFwiLCBcInRva2VuRnVuY3Rpb25cIiwgXCJ0b2tlbkdlb1wiLCBcInRva2VuSGlzdG9ncmFtXCIsIFwidG9rZW5JbnRlcmZhY2VcIiwgXCJ0b2tlbklQXCIsIFwidG9rZW5Kb2luXCIsIFwidG9rZW5LZXlcIiwgXCJ0b2tlbktleXdvcmRcIiwgXCJ0b2tlbk1ldGhvZFwiLCBcInRva2VuTWV0cmljQ291bnRlclwiLCBcInRva2VuTWV0cmljR2F1Z2VcIiwgXCJ0b2tlbk1vZHVsZVwiLCBcInRva2VuTmFtZXNwYWNlXCIsIFwidG9rZW5OZXN0ZWRcIiwgXCJ0b2tlbk51bGxcIiwgXCJ0b2tlbk51bWJlclwiLCBcInRva2VuT2JqZWN0XCIsIFwidG9rZW5PcGVyYXRvclwiLCBcInRva2VuUGFja2FnZVwiLCBcInRva2VuUGFyYW1ldGVyXCIsIFwidG9rZW5QZXJjb2xhdG9yXCIsIFwidG9rZW5Qcm9wZXJ0eVwiLCBcInRva2VuUmFuZ2VcIiwgXCJ0b2tlblJhbmtGZWF0dXJlXCIsIFwidG9rZW5SYW5rRmVhdHVyZXNcIiwgXCJ0b2tlblJlcG9cIiwgXCJ0b2tlblNlYXJjaFR5cGVcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkXSksXG5cbiAgICAvKipcbiAgICAgICAqIFRoZSBzaWRlIG9mIHRoZSBiYWRnZSB0aGUgaWNvbiBzaG91bGQgc2l0XG4gICAgICAgKi9cbiAgICBpY29uU2lkZTogUHJvcFR5cGVzLm9uZU9mKFtcImxlZnRcIiwgXCJyaWdodFwiXSksXG5cbiAgICAvKipcbiAgICAgICAqIEFjY2VwdHMgZWl0aGVyIG91ciBwYWxldHRlIGNvbG9ycyAocHJpbWFyeSwgc3VjY2VzcyAuLmV0Yykgb3IgYSBoZXggdmFsdWUgYCNGRkZGRkZgLCBgIzAwMGAuXG4gICAgICAgKi9cbiAgICBjb2xvcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWRdKSxcblxuICAgIC8qKlxuICAgICAgICogV2lsbCBvdmVycmlkZSBhbnkgY29sb3IgcGFzc2VkIHRocm91Z2ggdGhlIGBjb2xvcmAgcHJvcC5cbiAgICAgICAqL1xuICAgIGlzRGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gICAgLyoqXG4gICAgICAgKiBQcm9wcyBwYXNzZWQgdG8gdGhlIGNsb3NlIGJ1dHRvbi5cbiAgICAgICAqL1xuICAgIGNsb3NlQnV0dG9uUHJvcHM6IFByb3BUeXBlcy5hbnksXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAgIC8qKlxuICAgICAgICogV2lsbCBhcHBseSBhbiBvbmNsaWNrIHRvIGljb24gd2l0aGluIHRoZSBiYWRnZVxuICAgICAgICovXG4gICAgaWNvbk9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuXG4gICAgLyoqXG4gICAgICAgKiBBcmlhIGxhYmVsIGFwcGxpZWQgdG8gdGhlIGljb25PbkNsaWNrIGJ1dHRvblxuICAgICAgICovXG4gICAgaWNvbk9uQ2xpY2tBcmlhTGFiZWw6IFByb3BUeXBlcy5hbnksXG5cbiAgICAvKipcbiAgICAgICAqIFdpbGwgYXBwbHkgYW4gb25jbGljayB0byB0aGUgYmFkZ2UgaXRzZWxmXG4gICAgICAgKi9cbiAgICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcblxuICAgIC8qKlxuICAgICAgICogQXJpYSBsYWJlbCBhcHBsaWVkIHRvIHRoZSBvbkNsaWNrIGJ1dHRvblxuICAgICAgICovXG4gICAgb25DbGlja0FyaWFMYWJlbDogUHJvcFR5cGVzLmFueSxcbiAgICBocmVmOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHRhcmdldDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICByZWw6IFByb3BUeXBlcy5zdHJpbmdcbiAgfSkuaXNSZXF1aXJlZF0pLFxuXG4gIC8qKlxuICAgICAgICogUGFkZGluZyBmb3IgdGhlIGxpc3QgaXRlbXMuXG4gICAgICAgKi9cbiAgcGFkZGluZ1NpemU6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICAgKiBXaGV0aGVyIHRoZSBgRXVpU2VsZWN0YWJsZWAgaW5zdGFuY2UgaXMgc2VhcmNoYWJsZS5cbiAgICAgICAqIFdoZW4gdHJ1ZSwgdGhlIFNwYWNlIGtleSB3aWxsIG5vdCB0b2dnbGUgc2VsZWN0aW9uLCBhcyBpdCB3aWxsIHR5cGUgaW50byB0aGUgc2VhcmNoIGJveCBpbnN0ZWFkLiBTY3JlZW4gcmVhZGVyIGluc3RydWN0aW9ucyB3aWxsIGJlIGFkZGVkIGluc3RydWN0aW5nIHVzZXJzIHRvIHVzZSB0aGUgRW50ZXIga2V5IHRvIHNlbGVjdCBpdGVtcy5cbiAgICAgICAqIFdoZW4gZmFsc2UsIHRoZSBTcGFjZSBrZXkgd2lsbCB0b2dnbGUgaXRlbSBzZWxlY3Rpb24uIE5vIGV4dHJhIHNjcmVlbiByZWFkZXIgaW5zdHJ1Y3Rpb25zIHdpbGwgYmUgYWRkZWQsIGFzIFNwYWNlIHRvIHRvZ2dsZSBpcyBhIGdlbmVyYWxseSBzdGFuZGFyZCBmb3IgbW9zdCBzZWxlY3QvY2hlY2tlZCBlbGVtZW50cy5cbiAgICAgICAqL1xuICBzZWFyY2hhYmxlOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgICAqIEF0dHJpYnV0ZSBhcHBsaWVkIHRoZSBvcHRpb24gYDxsaT5gLlxuICAgICAgICogSWYgY29uZmlndXJlZCB0byBzb21ldGhpbmcgYmVzaWRlcyB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBgb3B0aW9uYCxcbiAgICAgICAqIG90aGVyIEFSSUEgYXR0cmlidXRlcyBzdWNoIGFzIGBhcmlhLWNoZWNrZWRgIHdpbGwgbm90IGJlIGF1dG9tYXRpY2FsbHkgY29uZmlndXJlZC5cbiAgICAgICAqL1xuICByb2xlOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAgICogSG93IHRvIGhhbmRsZSBsb25nIHRleHQgd2l0aGluIHRoZSBpdGVtLlxuICAgICAgICogV3JhcHBpbmcgb25seSB3b3JrcyBpZiB2aXJ0dWFsaXphdGlvbiBpcyBvZmYuXG4gICAgICAgKi9cbiAgdGV4dFdyYXA6IFByb3BUeXBlcy5vbmVPZihbXCJ0cnVuY2F0ZVwiLCBcIndyYXBcIl0pXG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwibGFiZWxcIiwgXCJ0eXBlXCIsIFwibGFiZWxXaWR0aFwiLCBcImRlc2NyaXB0aW9uXCIsIFwidHJ1bmNhdGVcIiwgXCJvbkNsaWNrXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IGtleXNPZiB9IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IEV1aUljb24gfSBmcm9tICcuLi9pY29uJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgY29sb3JUb0NsYXNzTmFtZU1hcCA9IHtcbiAgdGludDA6ICdldWlTdWdnZXN0SXRlbV9fdHlwZS0tdGludDAnLFxuICB0aW50MTogJ2V1aVN1Z2dlc3RJdGVtX190eXBlLS10aW50MScsXG4gIHRpbnQyOiAnZXVpU3VnZ2VzdEl0ZW1fX3R5cGUtLXRpbnQyJyxcbiAgdGludDM6ICdldWlTdWdnZXN0SXRlbV9fdHlwZS0tdGludDMnLFxuICB0aW50NDogJ2V1aVN1Z2dlc3RJdGVtX190eXBlLS10aW50NCcsXG4gIHRpbnQ1OiAnZXVpU3VnZ2VzdEl0ZW1fX3R5cGUtLXRpbnQ1JyxcbiAgdGludDY6ICdldWlTdWdnZXN0SXRlbV9fdHlwZS0tdGludDYnLFxuICB0aW50NzogJ2V1aVN1Z2dlc3RJdGVtX190eXBlLS10aW50NycsXG4gIHRpbnQ4OiAnZXVpU3VnZ2VzdEl0ZW1fX3R5cGUtLXRpbnQ4JyxcbiAgdGludDk6ICdldWlTdWdnZXN0SXRlbV9fdHlwZS0tdGludDknLFxuICB0aW50MTA6ICdldWlTdWdnZXN0SXRlbV9fdHlwZS0tdGludDEwJ1xufTtcbmV4cG9ydCB2YXIgQ09MT1JTID0ga2V5c09mKGNvbG9yVG9DbGFzc05hbWVNYXApO1xuZXhwb3J0IHZhciBFdWlTdWdnZXN0SXRlbSA9IGZ1bmN0aW9uIEV1aVN1Z2dlc3RJdGVtKF9yZWYpIHtcbiAgdmFyIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgbGFiZWwgPSBfcmVmLmxhYmVsLFxuICAgICAgdHlwZSA9IF9yZWYudHlwZSxcbiAgICAgIF9yZWYkbGFiZWxXaWR0aCA9IF9yZWYubGFiZWxXaWR0aCxcbiAgICAgIGxhYmVsV2lkdGggPSBfcmVmJGxhYmVsV2lkdGggPT09IHZvaWQgMCA/ICc1MCcgOiBfcmVmJGxhYmVsV2lkdGgsXG4gICAgICBkZXNjcmlwdGlvbiA9IF9yZWYuZGVzY3JpcHRpb24sXG4gICAgICBfcmVmJHRydW5jYXRlID0gX3JlZi50cnVuY2F0ZSxcbiAgICAgIHRydW5jYXRlID0gX3JlZiR0cnVuY2F0ZSA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYkdHJ1bmNhdGUsXG4gICAgICBvbkNsaWNrID0gX3JlZi5vbkNsaWNrLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpU3VnZ2VzdEl0ZW0nLCB7XG4gICAgJ2V1aVN1Z2dlc3RJdGVtLS10cnVuY2F0ZSc6IHRydW5jYXRlXG4gIH0sIGNsYXNzTmFtZSk7XG4gIHZhciBsYWJlbENsYXNzTmFtZXMgPSBjbGFzc05hbWVzKCdldWlTdWdnZXN0SXRlbV9fbGFiZWwnLCBcImV1aVN1Z2dlc3RJdGVtX19sYWJlbC0td2lkdGhcIi5jb25jYXQobGFiZWxXaWR0aCkpO1xuICB2YXIgZGVzY3JpcHRpb25DbGFzc05hbWVzID0gY2xhc3NOYW1lcygnZXVpU3VnZ2VzdEl0ZW1fX2Rlc2NyaXB0aW9uJywge1xuICAgICdldWlTdWdnZXN0SXRlbV9fZGVzY3JpcHRpb24tLXdyYXAnOiAhdHJ1bmNhdGVcbiAgfSk7XG4gIHZhciB0eXBlQ29sb3JDbGFzcyA9ICcnO1xuXG4gIGlmICh0eXBlICYmIHR5cGUuY29sb3IpIHtcbiAgICBpZiAoQ09MT1JTLmluZGV4T2YodHlwZS5jb2xvcikgPiAtMSkge1xuICAgICAgdHlwZUNvbG9yQ2xhc3MgPSBjb2xvclRvQ2xhc3NOYW1lTWFwW3R5cGUuY29sb3JdO1xuICAgIH1cbiAgfVxuXG4gIHZhciBpbm5lckNvbnRlbnQgPSBfX19FbW90aW9uSlNYKFJlYWN0LkZyYWdtZW50LCBudWxsLCBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aVN1Z2dlc3RJdGVtX190eXBlIFwiLmNvbmNhdCh0eXBlQ29sb3JDbGFzcylcbiAgfSwgX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgdHlwZTogdHlwZS5pY29uVHlwZSxcbiAgICBjb2xvcjogXCJpbmhlcml0XCIgLy8gZm9yY2VzIHRoZSBpY29uIHRvIGluaGVyaXQgaXRzIHBhcmVudCBjb2xvclxuXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgIGNsYXNzTmFtZTogbGFiZWxDbGFzc05hbWVzLFxuICAgIHRpdGxlOiBsYWJlbFxuICB9LCBsYWJlbCksIGRlc2NyaXB0aW9uICYmIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICBjbGFzc05hbWU6IGRlc2NyaXB0aW9uQ2xhc3NOYW1lcyxcbiAgICB0aXRsZTogZGVzY3JpcHRpb25cbiAgfSwgZGVzY3JpcHRpb24pKTtcblxuICBpZiAob25DbGljaykge1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwiYnV0dG9uXCIsIF9leHRlbmRzKHtcbiAgICAgIG9uQ2xpY2s6IG9uQ2xpY2ssXG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgICB9LCByZXN0KSwgaW5uZXJDb250ZW50KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcInNwYW5cIiwgX2V4dGVuZHMoe1xuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gICAgfSwgcmVzdCksIGlubmVyQ29udGVudCk7XG4gIH1cbn07XG5FdWlTdWdnZXN0SXRlbS5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgKiBUYWtlcyBgaWNvblR5cGVgIGZvciBFdWlJY29uIGFuZCAnY29sb3InLiAnY29sb3InIGNhbiBiZSB0aW50MSB0aHJvdWdoIHRpbnQ5LlxuICAgICAqL1xuICB0eXBlOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGljb25UeXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbGVydFwiLCBcImFuYWx5emVFdmVudFwiLCBcImFubm90YXRpb25cIiwgXCJhcG1BcHBcIiwgXCJhcG1UcmFjZVwiLCBcImFwcFNlYXJjaEFwcFwiLCBcImFwcHNcIiwgXCJhcnJvd0Rvd25cIiwgXCJhcnJvd0xlZnRcIiwgXCJhcnJvd1JpZ2h0XCIsIFwiYXJyb3dVcFwiLCBcImFycm93U3RhcnRcIiwgXCJhcnJvd0VuZFwiLCBcImFzdGVyaXNrXCIsIFwiYXVkaXRiZWF0QXBwXCIsIFwiYmVha2VyXCIsIFwiYmVsbFwiLCBcImJlbGxTbGFzaFwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGVja1wiLCBcImNoZWNrSW5DaXJjbGVGaWxsZWRcIiwgXCJjaGVlclwiLCBcImNsYXNzaWZpY2F0aW9uSm9iXCIsIFwiY2xvY2tcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkFDaXJjbGVGaWxsZWRcIiwgXCJjcm9zc2hhaXJzXCIsIFwiY3VycmVuY3lcIiwgXCJjdXRcIiwgXCJkYXNoYm9hcmRBcHBcIiwgXCJkYXRhVmlzdWFsaXplclwiLCBcImRhdGFiYXNlXCIsIFwiZGVza3RvcFwiLCBcImRldlRvb2xzQXBwXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZXFsXCIsIFwiZXJhc2VyXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZsYWdcIiwgXCJmbGVldEFwcFwiLCBcImZvbGRcIiwgXCJmb2xkZXJDaGVja1wiLCBcImZvbGRlckNsb3NlZFwiLCBcImZvbGRlckV4Y2xhbWF0aW9uXCIsIFwiZm9sZGVyT3BlblwiLCBcImZyYW1lTmV4dFwiLCBcImZyYW1lUHJldmlvdXNcIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFNjcmVlbkV4aXRcIiwgXCJmdW5jdGlvblwiLCBcImdlYXJcIiwgXCJnaXNBcHBcIiwgXCJnbGFzc2VzXCIsIFwiZ2xvYmVcIiwgXCJncmFiXCIsIFwiZ3JhYkhvcml6b250YWxcIiwgXCJncmFwaEFwcFwiLCBcImdyaWRcIiwgXCJncm9rQXBwXCIsIFwiaGVhcnRcIiwgXCJoZWFydGJlYXRBcHBcIiwgXCJoZWF0bWFwXCIsIFwiaGVscFwiLCBcImhvbWVcIiwgXCJpSW5DaXJjbGVcIiwgXCJpbWFnZVwiLCBcImltcG9ydEFjdGlvblwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5wdXRPdXRwdXRcIiwgXCJpbnNwZWN0XCIsIFwiaW52ZXJ0XCIsIFwiaXBcIiwgXCJrZXlib2FyZFwiLCBcImtxbEZpZWxkXCIsIFwia3FsRnVuY3Rpb25cIiwgXCJrcWxPcGVyYW5kXCIsIFwia3FsU2VsZWN0b3JcIiwgXCJrcWxWYWx1ZVwiLCBcImt1YmVybmV0ZXNOb2RlXCIsIFwia3ViZXJuZXRlc1BvZFwiLCBcImxheWVyc1wiLCBcImxlbnNBcHBcIiwgXCJsZXR0ZXJpbmdcIiwgXCJsaW5lRGFzaGVkXCIsIFwibGluZURvdHRlZFwiLCBcImxpbmVTb2xpZFwiLCBcImxpbmtcIiwgXCJsaXN0XCIsIFwibGlzdEFkZFwiLCBcImxvY2tcIiwgXCJsb2NrT3BlblwiLCBcImxvZ29BV1NcIiwgXCJsb2dvQVdTTW9ub1wiLCBcImxvZ29BZXJvc3Bpa2VcIiwgXCJsb2dvQXBhY2hlXCIsIFwibG9nb0FwcFNlYXJjaFwiLCBcImxvZ29BenVyZVwiLCBcImxvZ29BenVyZU1vbm9cIiwgXCJsb2dvQmVhdHNcIiwgXCJsb2dvQnVzaW5lc3NBbmFseXRpY3NcIiwgXCJsb2dvQ2VwaFwiLCBcImxvZ29DbG91ZFwiLCBcImxvZ29DbG91ZEVudGVycHJpc2VcIiwgXCJsb2dvQ29kZVwiLCBcImxvZ29Db2Rlc2FuZGJveFwiLCBcImxvZ29Db3VjaGJhc2VcIiwgXCJsb2dvRG9ja2VyXCIsIFwibG9nb0Ryb3B3aXphcmRcIiwgXCJsb2dvRWxhc3RpY1wiLCBcImxvZ29FbGFzdGljU3RhY2tcIiwgXCJsb2dvRWxhc3RpY3NlYXJjaFwiLCBcImxvZ29FbnRlcnByaXNlU2VhcmNoXCIsIFwibG9nb0V0Y2RcIiwgXCJsb2dvR0NQXCIsIFwibG9nb0dDUE1vbm9cIiwgXCJsb2dvR2l0aHViXCIsIFwibG9nb0dtYWlsXCIsIFwibG9nb0dvbGFuZ1wiLCBcImxvZ29Hb29nbGVHXCIsIFwibG9nb0hBcHJveHlcIiwgXCJsb2dvSUJNXCIsIFwibG9nb0lCTU1vbm9cIiwgXCJsb2dvS2Fma2FcIiwgXCJsb2dvS2liYW5hXCIsIFwibG9nb0t1YmVybmV0ZXNcIiwgXCJsb2dvTG9nZ2luZ1wiLCBcImxvZ29Mb2dzdGFzaFwiLCBcImxvZ29NYXBzXCIsIFwibG9nb01lbWNhY2hlZFwiLCBcImxvZ29NZXRyaWNzXCIsIFwibG9nb01vbmdvZGJcIiwgXCJsb2dvTXlTUUxcIiwgXCJsb2dvTmdpbnhcIiwgXCJsb2dvT2JzZXJ2YWJpbGl0eVwiLCBcImxvZ29Pc3F1ZXJ5XCIsIFwibG9nb1BocFwiLCBcImxvZ29Qb3N0Z3Jlc1wiLCBcImxvZ29Qcm9tZXRoZXVzXCIsIFwibG9nb1JhYmJpdG1xXCIsIFwibG9nb1JlZGlzXCIsIFwibG9nb1NlY3VyaXR5XCIsIFwibG9nb1NpdGVTZWFyY2hcIiwgXCJsb2dvU2tldGNoXCIsIFwibG9nb1NsYWNrXCIsIFwibG9nb1VwdGltZVwiLCBcImxvZ29XZWJob29rXCIsIFwibG9nb1dpbmRvd3NcIiwgXCJsb2dvV29ya3BsYWNlU2VhcmNoXCIsIFwibG9nc0FwcFwiLCBcImxvZ3N0YXNoRmlsdGVyXCIsIFwibG9nc3Rhc2hJZlwiLCBcImxvZ3N0YXNoSW5wdXRcIiwgXCJsb2dzdGFzaE91dHB1dFwiLCBcImxvZ3N0YXNoUXVldWVcIiwgXCJtYWNoaW5lTGVhcm5pbmdBcHBcIiwgXCJtYWduZXRcIiwgXCJtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uXCIsIFwibWFnbmlmeVdpdGhNaW51c1wiLCBcIm1hZ25pZnlXaXRoUGx1c1wiLCBcIm1hbmFnZW1lbnRBcHBcIiwgXCJtYXBNYXJrZXJcIiwgXCJtZW1vcnlcIiwgXCJtZW51XCIsIFwibWVudURvd25cIiwgXCJtZW51TGVmdFwiLCBcIm1lbnVSaWdodFwiLCBcIm1lbnVVcFwiLCBcIm1lcmdlXCIsIFwibWV0cmljYmVhdEFwcFwiLCBcIm1ldHJpY3NBcHBcIiwgXCJtaW5pbWl6ZVwiLCBcIm1pbnVzXCIsIFwibWludXNJbkNpcmNsZVwiLCBcIm1pbnVzSW5DaXJjbGVGaWxsZWRcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5vZGVcIiwgXCJub3RlYm9va0FwcFwiLCBcIm51bWJlclwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIiwgXCJvdXRsaWVyRGV0ZWN0aW9uSm9iXCIsIFwicGFja2FnZVwiLCBcInBhY2tldGJlYXRBcHBcIiwgXCJwYWdlU2VsZWN0XCIsIFwicGFnZXNTZWxlY3RcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVsaW5lQXBwXCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNub3dmbGFrZVwiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc0FwcFwiLCBcInNxbEFwcFwiLCBcInN0YXJFbXB0eVwiLCBcInN0YXJFbXB0eVNwYWNlXCIsIFwic3RhckZpbGxlZFwiLCBcInN0YXJGaWxsZWRTcGFjZVwiLCBcInN0YXJNaW51c0VtcHR5XCIsIFwic3Rhck1pbnVzRmlsbGVkXCIsIFwic3RhclBsdXNFbXB0eVwiLCBcInN0YXJQbHVzRmlsbGVkXCIsIFwic3RhdHNcIiwgXCJzdG9wXCIsIFwic3RvcEZpbGxlZFwiLCBcInN0b3BTbGFzaFwiLCBcInN0b3JhZ2VcIiwgXCJzdHJpbmdcIiwgXCJzdWJtb2R1bGVcIiwgXCJzdW5cIiwgXCJzd2F0Y2hJbnB1dFwiLCBcInN5bWxpbmtcIiwgXCJ0YWJsZURlbnNpdHlDb21wYWN0XCIsIFwidGFibGVEZW5zaXR5RXhwYW5kZWRcIiwgXCJ0YWJsZURlbnNpdHlOb3JtYWxcIiwgXCJ0YWJsZU9mQ29udGVudHNcIiwgXCJ0YWdcIiwgXCJ0ZWFyXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJ0aW1lbGluZVwiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFzaFwiLCBcInVuZm9sZFwiLCBcInVubGlua1wiLCBcInVwZ3JhZGVBc3Npc3RhbnRBcHBcIiwgXCJ1cHRpbWVBcHBcIiwgXCJ1c2VyXCIsIFwidXNlckF2YXRhclwiLCBcInVzZXJzXCIsIFwidXNlcnNSb2xlc0FwcFwiLCBcInZlY3RvclwiLCBcInZpZGVvUGxheWVyXCIsIFwidmlzQXJlYVwiLCBcInZpc0FyZWFTdGFja2VkXCIsIFwidmlzQmFySG9yaXpvbnRhbFwiLCBcInZpc0Jhckhvcml6b250YWxTdGFja2VkXCIsIFwidmlzQmFyVmVydGljYWxcIiwgXCJ2aXNCYXJWZXJ0aWNhbFN0YWNrZWRcIiwgXCJ2aXNHYXVnZVwiLCBcInZpc0dvYWxcIiwgXCJ2aXNMaW5lXCIsIFwidmlzTWFwQ29vcmRpbmF0ZVwiLCBcInZpc01hcFJlZ2lvblwiLCBcInZpc01ldHJpY1wiLCBcInZpc1BpZVwiLCBcInZpc1RhYmxlXCIsIFwidmlzVGFnQ2xvdWRcIiwgXCJ2aXNUZXh0XCIsIFwidmlzVGltZWxpb25cIiwgXCJ2aXNWZWdhXCIsIFwidmlzVmlzdWFsQnVpbGRlclwiLCBcInZpc3VhbGl6ZUFwcFwiLCBcIndhdGNoZXNBcHBcIiwgXCJ3b3JkV3JhcFwiLCBcIndvcmRXcmFwRGlzYWJsZWRcIiwgXCJ3b3JrcGxhY2VTZWFyY2hBcHBcIiwgXCJ3cmVuY2hcIiwgXCJ0b2tlbkFsaWFzXCIsIFwidG9rZW5Bbm5vdGF0aW9uXCIsIFwidG9rZW5BcnJheVwiLCBcInRva2VuQmluYXJ5XCIsIFwidG9rZW5Cb29sZWFuXCIsIFwidG9rZW5DbGFzc1wiLCBcInRva2VuQ29tcGxldGlvblN1Z2dlc3RlclwiLCBcInRva2VuQ29uc3RhbnRcIiwgXCJ0b2tlbkRhdGVcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2hhcGVcIiwgXCJ0b2tlblN0cmluZ1wiLCBcInRva2VuU3RydWN0XCIsIFwidG9rZW5TeW1ib2xcIiwgXCJ0b2tlblRhZ1wiLCBcInRva2VuVGV4dFwiLCBcInRva2VuVG9rZW5Db3VudFwiLCBcInRva2VuVmFyaWFibGVcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLFxuICAgIGNvbG9yOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5vbmVPZihbXCJ0aW50MFwiLCBcInRpbnQxXCIsIFwidGludDJcIiwgXCJ0aW50M1wiLCBcInRpbnQ0XCIsIFwidGludDVcIiwgXCJ0aW50NlwiLCBcInRpbnQ3XCIsIFwidGludDhcIiwgXCJ0aW50OVwiLCBcInRpbnQxMFwiXSkuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWRcbiAgfSkuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICAgKiBMYWJlbCBvciBwcmltYXJ5IHRleHQuXG4gICAgICovXG4gIGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG5cbiAgLyoqXG4gICAgICogRGVzY3JpcHRpb24gb3Igc2Vjb25kYXJ5IHRleHQgKG9wdGlvbmFsKS5cbiAgICAgKi9cbiAgZGVzY3JpcHRpb246IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogUGVyY2VudGFnZSB3aWR0aCBvZiBgbGFiZWxgLlxuICAgICAqIEFjY2VwdHMgbXVsdGlwbGVzIG9mIGAxMGAsIGZyb20gYDIwYCB0byBgOTBgLlxuICAgICAqIExhYmVsIHdpbGwgZXhwYW5kIHRvIDEwMCUgaWYgYGRlc2NyaXB0aW9uYCBpcyBub3QgcHJvdmlkZWQuXG4gICAgICovXG4gIGxhYmVsV2lkdGg6IFByb3BUeXBlcy5vbmVPZihbXCIyMFwiLCBcIjMwXCIsIFwiNDBcIiwgXCI1MFwiLCBcIjYwXCIsIFwiNzBcIiwgXCI4MFwiLCBcIjkwXCIsIDIwLCAzMCwgNDAsIDUwLCA2MCwgNzAsIDgwLCA5MF0pLFxuXG4gIC8qKlxuICAgICAqIFRydW5jYXRlcyBib3RoIGxhYmVsIGFuZCBkZXNjcmlwdGlvbi5cbiAgICAgKi9cbiAgdHJ1bmNhdGU6IFByb3BUeXBlcy5ib29sLFxuICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuY1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcIm9uSXRlbUNsaWNrXCIsIFwib25CbHVyXCIsIFwib25Gb2N1c1wiLCBcIm9uSW5wdXRcIiwgXCJvblNlYXJjaFwiLCBcInN0YXR1c1wiLCBcImFwcGVuZFwiLCBcInRvb2x0aXBDb250ZW50XCIsIFwic3VnZ2VzdGlvbnNcIiwgXCJpZFwiLCBcImFyaWEtbGFiZWxcIiwgXCJhcmlhLWxhYmVsbGVkYnlcIiwgXCJpc1ZpcnR1YWxpemVkXCIsIFwiZnVsbFdpZHRoXCIsIFwibWF4SGVpZ2h0XCJdO1xuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7IHZhciBfaSA9IGFyciA9PSBudWxsID8gbnVsbCA6IHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgYXJyW1N5bWJvbC5pdGVyYXRvcl0gfHwgYXJyW1wiQEBpdGVyYXRvclwiXTsgaWYgKF9pID09IG51bGwpIHJldHVybjsgdmFyIF9hcnIgPSBbXTsgdmFyIF9uID0gdHJ1ZTsgdmFyIF9kID0gZmFsc2U7IHZhciBfcywgX2U7IHRyeSB7IGZvciAoX2kgPSBfaS5jYWxsKGFycik7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHsgX2Fyci5wdXNoKF9zLnZhbHVlKTsgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOyB9IH0gY2F0Y2ggKGVycikgeyBfZCA9IHRydWU7IF9lID0gZXJyOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7IH0gZmluYWxseSB7IGlmIChfZCkgdGhyb3cgX2U7IH0gfSByZXR1cm4gX2FycjsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSwgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUdlbmVyYXRlZEh0bWxJZCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aVNjcmVlblJlYWRlck9ubHkgfSBmcm9tICcuLi9hY2Nlc3NpYmlsaXR5JztcbmltcG9ydCB7IEV1aUljb24gfSBmcm9tICcuLi9pY29uJztcbmltcG9ydCB7IHVzZUV1aUkxOG4gfSBmcm9tICcuLi9pMThuJztcbmltcG9ydCB7IEV1aUlucHV0UG9wb3ZlciB9IGZyb20gJy4uL3BvcG92ZXInO1xuaW1wb3J0IHsgRXVpU2VsZWN0YWJsZSB9IGZyb20gJy4uL3NlbGVjdGFibGUnO1xuaW1wb3J0IHsgRXVpVG9vbFRpcCB9IGZyb20gJy4uL3Rvb2xfdGlwJztcbmltcG9ydCB7IEV1aVN1Z2dlc3RJdGVtIH0gZnJvbSAnLi9zdWdnZXN0X2l0ZW0nO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBzdGF0dXNNYXAgPSB7XG4gIHVuc2F2ZWQ6IHtcbiAgICBpY29uOiAnZG90JyxcbiAgICBjb2xvcjogJ2FjY2VudCdcbiAgfSxcbiAgc2F2ZWQ6IHtcbiAgICBpY29uOiAnY2hlY2tJbkNpcmNsZUZpbGxlZCcsXG4gICAgY29sb3I6ICdzdWNjZXNzJ1xuICB9LFxuICB1bmNoYW5nZWQ6IHtcbiAgICBpY29uOiAnJyxcbiAgICBjb2xvcjogJ3N1Y2Nlc3MnXG4gIH0sXG4gIGxvYWRpbmc6IHt9XG59OyAvLyBrZXlzIG9mIF9FdWlTdWdnZXN0SXRlbVByb3BzQmFzZVxuXG52YXIgc3VnZ2VzdEl0ZW1Qcm9wc0tleXMgPSBbJ2xhYmVsJywgJ3R5cGUnLCAnZGVzY3JpcHRpb24nLCAnbGFiZWxEaXNwbGF5JywgJ2xhYmVsV2lkdGgnLCAnZGVzY3JpcHRpb25EaXNwbGF5J107XG5leHBvcnQgdmFyIEV1aVN1Z2dlc3QgPSBmdW5jdGlvbiBFdWlTdWdnZXN0KF9yZWYpIHtcbiAgdmFyIG9uSXRlbUNsaWNrID0gX3JlZi5vbkl0ZW1DbGljayxcbiAgICAgIG9uQmx1ciA9IF9yZWYub25CbHVyLFxuICAgICAgb25Gb2N1cyA9IF9yZWYub25Gb2N1cyxcbiAgICAgIG9uSW5wdXQgPSBfcmVmLm9uSW5wdXQsXG4gICAgICBvblNlYXJjaCA9IF9yZWYub25TZWFyY2gsXG4gICAgICBfcmVmJHN0YXR1cyA9IF9yZWYuc3RhdHVzLFxuICAgICAgc3RhdHVzID0gX3JlZiRzdGF0dXMgPT09IHZvaWQgMCA/ICd1bmNoYW5nZWQnIDogX3JlZiRzdGF0dXMsXG4gICAgICBhcHBlbmQgPSBfcmVmLmFwcGVuZCxcbiAgICAgIHRvb2x0aXBDb250ZW50ID0gX3JlZi50b29sdGlwQ29udGVudCxcbiAgICAgIHN1Z2dlc3Rpb25zID0gX3JlZi5zdWdnZXN0aW9ucyxcbiAgICAgIGlkID0gX3JlZi5pZCxcbiAgICAgIGFyaWFMYWJlbCA9IF9yZWZbJ2FyaWEtbGFiZWwnXSxcbiAgICAgIGxhYmVsSWQgPSBfcmVmWydhcmlhLWxhYmVsbGVkYnknXSxcbiAgICAgIF9yZWYkaXNWaXJ0dWFsaXplZCA9IF9yZWYuaXNWaXJ0dWFsaXplZCxcbiAgICAgIGlzVmlydHVhbGl6ZWQgPSBfcmVmJGlzVmlydHVhbGl6ZWQgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRpc1ZpcnR1YWxpemVkLFxuICAgICAgX3JlZiRmdWxsV2lkdGggPSBfcmVmLmZ1bGxXaWR0aCxcbiAgICAgIGZ1bGxXaWR0aCA9IF9yZWYkZnVsbFdpZHRoID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRmdWxsV2lkdGgsXG4gICAgICBfcmVmJG1heEhlaWdodCA9IF9yZWYubWF4SGVpZ2h0LFxuICAgICAgbWF4SGVpZ2h0ID0gX3JlZiRtYXhIZWlnaHQgPT09IHZvaWQgMCA/ICc2MHZoJyA6IF9yZWYkbWF4SGVpZ2h0LFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIC8qKlxuICAgKiBQb3BvdmVyIGhlbHBlcnNcbiAgICovXG4gIHZhciBfdXNlU3RhdGUgPSB1c2VTdGF0ZShudWxsKSxcbiAgICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgICAgcG9wb3ZlclJlZiA9IF91c2VTdGF0ZTJbMF0sXG4gICAgICBzZXRQb3BvdmVyUmVmID0gX3VzZVN0YXRlMlsxXTtcblxuICB2YXIgX3VzZVN0YXRlMyA9IHVzZVN0YXRlKGZhbHNlKSxcbiAgICAgIF91c2VTdGF0ZTQgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUzLCAyKSxcbiAgICAgIGlzUG9wb3Zlck9wZW4gPSBfdXNlU3RhdGU0WzBdLFxuICAgICAgc2V0SXNQb3BvdmVyT3BlbiA9IF91c2VTdGF0ZTRbMV07XG5cbiAgdmFyIG9wZW5Qb3BvdmVyID0gZnVuY3Rpb24gb3BlblBvcG92ZXIoKSB7XG4gICAgcmV0dXJuIHNldElzUG9wb3Zlck9wZW4odHJ1ZSk7XG4gIH07XG5cbiAgdmFyIGNsb3NlUG9wb3ZlciA9IGZ1bmN0aW9uIGNsb3NlUG9wb3ZlcigpIHtcbiAgICByZXR1cm4gc2V0SXNQb3BvdmVyT3BlbihmYWxzZSk7XG4gIH07XG4gIC8qKlxuICAgKiBTZWFyY2ggaGVscGVyc1xuICAgKi9cblxuXG4gIHZhciBzZWFyY2hPbkZvY3VzID0gZnVuY3Rpb24gc2VhcmNoT25Gb2N1cyhlKSB7XG4gICAgb25Gb2N1cyA9PT0gbnVsbCB8fCBvbkZvY3VzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkZvY3VzKGUpO1xuICAgIG9wZW5Qb3BvdmVyKCk7XG4gIH07XG5cbiAgdmFyIHNlYXJjaE9uQmx1ciA9IGZ1bmN0aW9uIHNlYXJjaE9uQmx1cihlKSB7XG4gICAgb25CbHVyID09PSBudWxsIHx8IG9uQmx1ciA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25CbHVyKGUpO1xuXG4gICAgaWYgKCEocG9wb3ZlclJlZiAhPT0gbnVsbCAmJiBwb3BvdmVyUmVmICE9PSB2b2lkIDAgJiYgcG9wb3ZlclJlZi5jb250YWlucyhlLnJlbGF0ZWRUYXJnZXQpKSkge1xuICAgICAgY2xvc2VQb3BvdmVyKCk7XG4gICAgfVxuICB9O1xuXG4gIHZhciBzZWFyY2hPbklucHV0ID0gZnVuY3Rpb24gc2VhcmNoT25JbnB1dChlKSB7XG4gICAgb25JbnB1dCA9PT0gbnVsbCB8fCBvbklucHV0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbklucHV0KGUudGFyZ2V0KTtcbiAgICBvcGVuUG9wb3ZlcigpO1xuICB9O1xuXG4gIHZhciBzZWFyY2hPbkNoYW5nZSA9IGZ1bmN0aW9uIHNlYXJjaE9uQ2hhbmdlKHZhbHVlKSB7XG4gICAgb25TZWFyY2ggPT09IG51bGwgfHwgb25TZWFyY2ggPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uU2VhcmNoKHZhbHVlKTtcbiAgfTtcblxuICB2YXIgaW5wdXREZXNjcmliZWRieUlkID0gdXNlR2VuZXJhdGVkSHRtbElkKHtcbiAgICBwcmVmaXg6IGlkXG4gIH0pO1xuICAvKipcbiAgICogU3RhdHVzXG4gICAqL1xuXG4gIHZhciBpY29uID0gJyc7XG4gIHZhciBjb2xvciA9ICcnO1xuXG4gIGlmIChzdGF0dXNNYXBbc3RhdHVzXSkge1xuICAgIGljb24gPSBzdGF0dXNNYXBbc3RhdHVzXS5pY29uIHx8ICcnO1xuICAgIGNvbG9yID0gc3RhdHVzTWFwW3N0YXR1c10uY29sb3IgfHwgJyc7XG4gIH0gLy8gRXVpRmllbGRUZXh0J3MgYXBwZW5kIGFjY2VwdHMgYW4gYXJyYXkgb2YgZWxlbWVudHMgc28gc3RhcnQgYnkgY3JlYXRpbmcgYW4gZW1wdHkgYXJyYXlcblxuXG4gIHZhciBhcHBlbmRBcnJheSA9IFtdO1xuXG4gIHZhciBfdXNlRXVpSTE4biA9IHVzZUV1aUkxOG4oWydldWlTdWdnZXN0LnN0YXRlU2F2ZWRUb29sdGlwJywgJ2V1aVN1Z2dlc3Quc3RhdGVVbnNhdmVkVG9vbHRpcCddLCBbJ1NhdmVkLicsICdDaGFuZ2VzIGhhdmUgbm90IGJlZW4gc2F2ZWQuJ10pLFxuICAgICAgX3VzZUV1aUkxOG4yID0gX3NsaWNlZFRvQXJyYXkoX3VzZUV1aUkxOG4sIDIpLFxuICAgICAgc3RhdHVzU2F2ZWQgPSBfdXNlRXVpSTE4bjJbMF0sXG4gICAgICBzdGF0dXNVbnNhdmVkID0gX3VzZUV1aUkxOG4yWzFdO1xuXG4gIHN0YXR1c01hcC5zYXZlZC50b29sdGlwID0gc3RhdHVzU2F2ZWQ7XG4gIHN0YXR1c01hcC51bnNhdmVkLnRvb2x0aXAgPSBzdGF0dXNVbnNhdmVkO1xuXG4gIHZhciBzdGF0dXNFbGVtZW50ID0gKHN0YXR1cyA9PT0gJ3NhdmVkJyB8fCBzdGF0dXMgPT09ICd1bnNhdmVkJykgJiYgX19fRW1vdGlvbkpTWChFdWlUb29sVGlwLCB7XG4gICAgcG9zaXRpb246IFwibGVmdFwiLFxuICAgIGNvbnRlbnQ6IHRvb2x0aXBDb250ZW50IHx8IHN0YXR1c01hcFtzdGF0dXNdLnRvb2x0aXBcbiAgfSwgX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aVN1Z2dlc3RJbnB1dF9fc3RhdHVzSWNvblwiLFxuICAgIGNvbG9yOiBjb2xvcixcbiAgICB0eXBlOiBpY29uXG4gIH0pKTsgLy8gUHVzaCB0aGUgc3RhdHVzIGVsZW1lbnQgdG8gdGhlIGFycmF5IGlmIGl0IGlzIG5vdCB1bmRlZmluZWRcblxuXG4gIGlmIChzdGF0dXNFbGVtZW50KSBhcHBlbmRBcnJheS5wdXNoKHN0YXR1c0VsZW1lbnQpOyAvLyBDaGVjayB0byBzZWUgaWYgY29uc3VtZXIgcGFzc2VkIGFuIGFwcGVuZCBpdGVtIGFuZCBpZiBzbywgYWRkIGl0IHRvIHRoZSBhcnJheVxuXG4gIGlmIChhcHBlbmQpIGFwcGVuZEFycmF5LnB1c2goYXBwZW5kKTtcblxuICB2YXIgX3VzZUV1aUkxOG4zID0gdXNlRXVpSTE4bihbJ2V1aVN1Z2dlc3Quc3RhdGVMb2FkaW5nJywgJ2V1aVN1Z2dlc3Quc3RhdGVTYXZlZCcsICdldWlTdWdnZXN0LnN0YXRlVW5zYXZlZCcsICdldWlTdWdnZXN0LnN0YXRlVW5jaGFuZ2VkJ10sIFsnU3RhdGU6IGxvYWRpbmcuJywgJ1N0YXRlOiBzYXZlZC4nLCAnU3RhdGU6IHVuc2F2ZWQuJywgJ1N0YXRlOiB1bmNoYW5nZWQuJ10pLFxuICAgICAgX3VzZUV1aUkxOG40ID0gX3NsaWNlZFRvQXJyYXkoX3VzZUV1aUkxOG4zLCA0KSxcbiAgICAgIHN0YXRlTG9hZGluZyA9IF91c2VFdWlJMThuNFswXSxcbiAgICAgIHN0YXRlU2F2ZWQgPSBfdXNlRXVpSTE4bjRbMV0sXG4gICAgICBzdGF0ZVVuc2F2ZWQgPSBfdXNlRXVpSTE4bjRbMl0sXG4gICAgICBzdGF0ZVVuY2hhbmdlZCA9IF91c2VFdWlJMThuNFszXTtcblxuICB2YXIgc3RhdGVNZXNzYWdlTWFwID0ge1xuICAgIGxvYWRpbmc6IHN0YXRlTG9hZGluZyxcbiAgICBzYXZlZDogc3RhdGVTYXZlZCxcbiAgICB1bnNhdmVkOiBzdGF0ZVVuc2F2ZWQsXG4gICAgdW5jaGFuZ2VkOiBzdGF0ZVVuY2hhbmdlZFxuICB9O1xuICB2YXIgc3RhdGVNZXNzYWdlID0gc3RhdGVNZXNzYWdlTWFwW3N0YXR1c107XG4gIC8qKlxuICAgKiBPcHRpb25zIGxpc3RcbiAgICovXG5cbiAgdmFyIHN1Z2dlc3Rpb25MaXN0ID0gc3VnZ2VzdGlvbnMubWFwKGZ1bmN0aW9uIChwcm9wcykge1xuICAgIC8vIE9taXQgcHJvcHMgZGVzdGluZWQgZm9yIHRoZSBFdWlTdWdnZXN0SXRlbSBzbyB0aGF0IHRoZXkgZG9uJ3RcbiAgICAvLyBjYXVzZSB3YXJuaW5ncyBvciByZW5kZXIgaW4gdGhlIERPTSBvZiB0aGUgRXVpU2VsZWN0YWJsZUl0ZW1cbiAgICB2YXIgZGF0YSA9IHt9O1xuICAgIHZhciBsaVByb3BzID0ge1xuICAgICAgbGFiZWw6IHByb3BzLmxhYmVsXG4gICAgfTtcbiAgICBPYmplY3Qua2V5cyhwcm9wcykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICBpZiAoc3VnZ2VzdEl0ZW1Qcm9wc0tleXMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAvLyBAdHMtaWdub3JlIHN0cmluZyBpbmRleCB0eXBlXG4gICAgICAgIGRhdGFba2V5XSA9IHByb3BzW2tleV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBAdHMtaWdub3JlIHN0cmluZyBpbmRleCB0eXBlXG4gICAgICAgIGxpUHJvcHNba2V5XSA9IHByb3BzW2tleV07XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgbGlQcm9wcyksIHt9LCB7XG4gICAgICBkYXRhOiBkYXRhLFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWVzKHByb3BzLmNsYXNzTmFtZSwgJ2V1aVN1Z2dlc3RJdGVtT3B0aW9uJyksXG4gICAgICAvLyBGb3JjZSB0cnVuY2F0aW9uIGlmIGBpc1ZpcnR1YWxpemVkYCBpcyB0cnVlXG4gICAgICB0cnVuY2F0ZTogaXNWaXJ0dWFsaXplZCA/IHRydWUgOiBwcm9wcy50cnVuY2F0ZVxuICAgIH0pO1xuICB9KTtcbiAgdmFyIHJlbmRlck9wdGlvbiA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChwcm9wcykge1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVN1Z2dlc3RJdGVtLCBwcm9wcyk7XG4gIH0sIFtdKTtcbiAgdmFyIG9uSXRlbVNlbGVjdCA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgaWYgKG9uSXRlbUNsaWNrKSB7XG4gICAgICB2YXIgc2VsZWN0ZWRJbmRleCA9IG9wdGlvbnMuZmluZEluZGV4KGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbi5jaGVja2VkID09PSAnb24nO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChzZWxlY3RlZEluZGV4ID49IDApIHtcbiAgICAgICAgdmFyIHNlbGVjdGVkU3VnZ2VzdGlvbiA9IHN1Z2dlc3Rpb25zW3NlbGVjdGVkSW5kZXhdO1xuICAgICAgICBvbkl0ZW1DbGljayhzZWxlY3RlZFN1Z2dlc3Rpb24pO1xuICAgICAgfVxuICAgIH1cbiAgfSwgW29uSXRlbUNsaWNrLCBzdWdnZXN0aW9uc10pO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChSZWFjdC5GcmFnbWVudCwgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlTZWxlY3RhYmxlLCB7XG4gICAgc2luZ2xlU2VsZWN0aW9uOiB0cnVlLFxuICAgIGhlaWdodDogaXNWaXJ0dWFsaXplZCA/IHVuZGVmaW5lZCA6ICdmdWxsJyxcbiAgICBvcHRpb25zOiBzdWdnZXN0aW9uTGlzdCxcbiAgICByZW5kZXJPcHRpb246IHJlbmRlck9wdGlvbixcbiAgICBvbkNoYW5nZTogb25JdGVtU2VsZWN0LFxuICAgIGxpc3RQcm9wczoge1xuICAgICAgYm9yZGVyZWQ6IGZhbHNlLFxuICAgICAgc2hvd0ljb25zOiBmYWxzZSxcbiAgICAgIG9uRm9jdXNCYWRnZTogZmFsc2UsXG4gICAgICBwYWRkaW5nU2l6ZTogJ25vbmUnLFxuICAgICAgdGV4dFdyYXA6IGlzVmlydHVhbGl6ZWQgPyAndHJ1bmNhdGUnIDogJ3dyYXAnLFxuICAgICAgaXNWaXJ0dWFsaXplZDogaXNWaXJ0dWFsaXplZFxuICAgIH0sXG4gICAgc2VhcmNoYWJsZTogdHJ1ZSxcbiAgICBzZWFyY2hQcm9wczogX29iamVjdFNwcmVhZCh7XG4gICAgICBpZDogaWQsXG4gICAgICBhcHBlbmQ6IGFwcGVuZEFycmF5Lmxlbmd0aCA/IGFwcGVuZEFycmF5IDogdW5kZWZpbmVkLFxuICAgICAgZnVsbFdpZHRoOiBmdWxsV2lkdGgsXG4gICAgICBpc0xvYWRpbmc6IHN0YXR1cyA9PT0gJ2xvYWRpbmcnID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgb25Gb2N1czogc2VhcmNoT25Gb2N1cyxcbiAgICAgIG9uQmx1cjogc2VhcmNoT25CbHVyLFxuICAgICAgb25JbnB1dDogc2VhcmNoT25JbnB1dCxcbiAgICAgIG9uQ2hhbmdlOiBzZWFyY2hPbkNoYW5nZSxcbiAgICAgICdhcmlhLWRlc2NyaWJlZGJ5JzogaW5wdXREZXNjcmliZWRieUlkLFxuICAgICAgJ2FyaWEtbGFiZWwnOiBhcmlhTGFiZWwsXG4gICAgICAnYXJpYS1sYWJlbGxlZGJ5JzogbGFiZWxJZFxuICAgIH0sIHJlc3QpXG4gIH0sIGZ1bmN0aW9uIChsaXN0LCBzZWFyY2gpIHtcbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlJbnB1dFBvcG92ZXIsIHtcbiAgICAgIGRpc2FibGVGb2N1c1RyYXA6IHRydWUsXG4gICAgICBpbnB1dDogX19fRW1vdGlvbkpTWChSZWFjdC5GcmFnbWVudCwgbnVsbCwgc2VhcmNoKSxcbiAgICAgIGlzT3BlbjogaXNQb3BvdmVyT3BlbixcbiAgICAgIHBhbmVsUGFkZGluZ1NpemU6IFwibm9uZVwiLFxuICAgICAgZnVsbFdpZHRoOiBmdWxsV2lkdGgsXG4gICAgICBjbG9zZVBvcG92ZXI6IGNsb3NlUG9wb3ZlcixcbiAgICAgIHBhbmVsUmVmOiBzZXRQb3BvdmVyUmVmLFxuICAgICAgcGFuZWxQcm9wczoge1xuICAgICAgICAnYXJpYS1saXZlJzogdW5kZWZpbmVkLFxuICAgICAgICAnYXJpYS1tb2RhbCc6IGZhbHNlLFxuICAgICAgICByb2xlOiB1bmRlZmluZWRcbiAgICAgIH1cbiAgICB9LCBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgIHN0eWxlOiB7XG4gICAgICAgIG1heEhlaWdodDogbWF4SGVpZ2h0XG4gICAgICB9LFxuICAgICAgY2xhc3NOYW1lOiBcImV1aS15U2Nyb2xsXCJcbiAgICB9LCBsaXN0KSk7XG4gIH0pLCBfX19FbW90aW9uSlNYKEV1aVNjcmVlblJlYWRlck9ubHksIG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwXCIsIHtcbiAgICBpZDogaW5wdXREZXNjcmliZWRieUlkXG4gIH0sIHN0YXRlTWVzc2FnZSkpKTtcbn07XG5FdWlTdWdnZXN0LnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nXSldKSxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAgICogTGlzdCBvZiBzdWdnZXN0aW9ucyB0byBkaXNwbGF5IHVzaW5nIEV1aVN1Z2dlc3RJdGVtLlxuICAgICAgICogQWNjZXB0cyBwcm9wcyBmcm9tICNFdWlTdWdnZXN0SXRlbVByb3BzXG4gICAgICAgKi9cbiAgc3VnZ2VzdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zaGFwZSh7XG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAgIC8qKlxuICAgICAgICogVGFrZXMgYGljb25UeXBlYCBmb3IgRXVpSWNvbiBhbmQgJ2NvbG9yJy4gJ2NvbG9yJyBjYW4gYmUgdGludDEgdGhyb3VnaCB0aW50OS5cbiAgICAgICAqL1xuICAgIHR5cGU6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBpY29uVHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYWxlcnRcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhc3Rlcmlza1wiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJib2x0XCIsIFwiYm94ZXNIb3Jpem9udGFsXCIsIFwiYm94ZXNWZXJ0aWNhbFwiLCBcImJyYW5jaFwiLCBcImJyYW5jaFVzZXJcIiwgXCJicm9vbVwiLCBcImJydXNoXCIsIFwiYnVnXCIsIFwiYnVsbHNleWVcIiwgXCJjYWxlbmRhclwiLCBcImNhbnZhc0FwcFwiLCBcImNhc2VzQXBwXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsb2NrXCIsIFwiY2xvdWREcml6emxlXCIsIFwiY2xvdWRTdG9ybXlcIiwgXCJjbG91ZFN1bm55XCIsIFwiY2x1c3RlclwiLCBcImNvZGVBcHBcIiwgXCJjb2xvclwiLCBcImNvbXB1dGVcIiwgXCJjb25zb2xlXCIsIFwiY29uc29sZUFwcFwiLCBcImNvbnRhaW5lclwiLCBcImNvbnRpbnVpdHlBYm92ZVwiLCBcImNvbnRpbnVpdHlBYm92ZUJlbG93XCIsIFwiY29udGludWl0eUJlbG93XCIsIFwiY29udGludWl0eVdpdGhpblwiLCBcImNvbnRyb2xzSG9yaXpvbnRhbFwiLCBcImNvbnRyb2xzVmVydGljYWxcIiwgXCJjb3B5XCIsIFwiY29weUNsaXBib2FyZFwiLCBcImNyZWF0ZUFkdmFuY2VkSm9iXCIsIFwiY3JlYXRlTXVsdGlNZXRyaWNKb2JcIiwgXCJjcmVhdGVQb3B1bGF0aW9uSm9iXCIsIFwiY3JlYXRlU2luZ2xlTWV0cmljSm9iXCIsIFwiY3Jvc3NcIiwgXCJjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcFwiLCBcImNyb3NzSW5BQ2lyY2xlRmlsbGVkXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpc2NvdmVyQXBwXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG91YmxlQXJyb3dMZWZ0XCIsIFwiZG91YmxlQXJyb3dSaWdodFwiLCBcImRvd25sb2FkXCIsIFwiZWRpdG9yQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JBbGlnbkxlZnRcIiwgXCJlZGl0b3JBbGlnblJpZ2h0XCIsIFwiZWRpdG9yQm9sZFwiLCBcImVkaXRvckNoZWNrbGlzdFwiLCBcImVkaXRvckNvZGVCbG9ja1wiLCBcImVkaXRvckNvbW1lbnRcIiwgXCJlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbFwiLCBcImVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbFwiLCBcImVkaXRvckhlYWRpbmdcIiwgXCJlZGl0b3JJdGFsaWNcIiwgXCJlZGl0b3JJdGVtQWxpZ25Cb3R0b21cIiwgXCJlZGl0b3JJdGVtQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JJdGVtQWxpZ25MZWZ0XCIsIFwiZWRpdG9ySXRlbUFsaWduTWlkZGxlXCIsIFwiZWRpdG9ySXRlbUFsaWduUmlnaHRcIiwgXCJlZGl0b3JJdGVtQWxpZ25Ub3BcIiwgXCJlZGl0b3JMaW5rXCIsIFwiZWRpdG9yT3JkZXJlZExpc3RcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnRcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BMZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BSaWdodFwiLCBcImVkaXRvclJlZG9cIiwgXCJlZGl0b3JTdHJpa2VcIiwgXCJlZGl0b3JUYWJsZVwiLCBcImVkaXRvclVuZGVybGluZVwiLCBcImVkaXRvclVuZG9cIiwgXCJlZGl0b3JVbm9yZGVyZWRMaXN0XCIsIFwiZW1haWxcIiwgXCJlbXB0eVwiLCBcImVtc0FwcFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibW9iaWxlXCIsIFwibW9uaXRvcmluZ0FwcFwiLCBcIm1vb25cIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFwZXJDbGlwXCIsIFwicGFydGlhbFwiLCBcInBhdXNlXCIsIFwicGF5bWVudFwiLCBcInBlbmNpbFwiLCBcInBlcmNlbnRcIiwgXCJwaW5cIiwgXCJwaW5GaWxsZWRcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBsYXlcIiwgXCJwbGF5RmlsbGVkXCIsIFwicGx1c1wiLCBcInBsdXNJbkNpcmNsZVwiLCBcInBsdXNJbkNpcmNsZUZpbGxlZFwiLCBcInBvcG91dFwiLCBcInB1c2hcIiwgXCJxdWVzdGlvbkluQ2lyY2xlXCIsIFwicXVvdGVcIiwgXCJyZWNlbnRseVZpZXdlZEFwcFwiLCBcInJlZnJlc2hcIiwgXCJyZWdyZXNzaW9uSm9iXCIsIFwicmVwb3J0ZXJcIiwgXCJyZXBvcnRpbmdBcHBcIiwgXCJyZXR1cm5LZXlcIiwgXCJzYXZlXCIsIFwic2F2ZWRPYmplY3RzQXBwXCIsIFwic2NhbGVcIiwgXCJzZWFyY2hcIiwgXCJzZWFyY2hQcm9maWxlckFwcFwiLCBcInNlY3VyaXR5QW5hbHl0aWNzQXBwXCIsIFwic2VjdXJpdHlBcHBcIiwgXCJzZWN1cml0eVNpZ25hbFwiLCBcInNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWRcIiwgXCJzZWN1cml0eVNpZ25hbFJlc29sdmVkXCIsIFwic2Vzc2lvblZpZXdlclwiLCBcInNoYXJkXCIsIFwic2hhcmVcIiwgXCJzbm93Zmxha2VcIiwgXCJzb3J0RG93blwiLCBcInNvcnRMZWZ0XCIsIFwic29ydFJpZ2h0XCIsIFwic29ydFVwXCIsIFwic29ydGFibGVcIiwgXCJzcGFjZXNBcHBcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EZW5zZVZlY3RvclwiLCBcInRva2VuRWxlbWVudFwiLCBcInRva2VuRW51bVwiLCBcInRva2VuRW51bU1lbWJlclwiLCBcInRva2VuRXZlbnRcIiwgXCJ0b2tlbkV4Y2VwdGlvblwiLCBcInRva2VuRmllbGRcIiwgXCJ0b2tlbkZpbGVcIiwgXCJ0b2tlbkZsYXR0ZW5lZFwiLCBcInRva2VuRnVuY3Rpb25cIiwgXCJ0b2tlbkdlb1wiLCBcInRva2VuSGlzdG9ncmFtXCIsIFwidG9rZW5JbnRlcmZhY2VcIiwgXCJ0b2tlbklQXCIsIFwidG9rZW5Kb2luXCIsIFwidG9rZW5LZXlcIiwgXCJ0b2tlbktleXdvcmRcIiwgXCJ0b2tlbk1ldGhvZFwiLCBcInRva2VuTWV0cmljQ291bnRlclwiLCBcInRva2VuTWV0cmljR2F1Z2VcIiwgXCJ0b2tlbk1vZHVsZVwiLCBcInRva2VuTmFtZXNwYWNlXCIsIFwidG9rZW5OZXN0ZWRcIiwgXCJ0b2tlbk51bGxcIiwgXCJ0b2tlbk51bWJlclwiLCBcInRva2VuT2JqZWN0XCIsIFwidG9rZW5PcGVyYXRvclwiLCBcInRva2VuUGFja2FnZVwiLCBcInRva2VuUGFyYW1ldGVyXCIsIFwidG9rZW5QZXJjb2xhdG9yXCIsIFwidG9rZW5Qcm9wZXJ0eVwiLCBcInRva2VuUmFuZ2VcIiwgXCJ0b2tlblJhbmtGZWF0dXJlXCIsIFwidG9rZW5SYW5rRmVhdHVyZXNcIiwgXCJ0b2tlblJlcG9cIiwgXCJ0b2tlblNlYXJjaFR5cGVcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCxcbiAgICAgIGNvbG9yOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5vbmVPZihbXCJ0aW50MFwiLCBcInRpbnQxXCIsIFwidGludDJcIiwgXCJ0aW50M1wiLCBcInRpbnQ0XCIsIFwidGludDVcIiwgXCJ0aW50NlwiLCBcInRpbnQ3XCIsIFwidGludDhcIiwgXCJ0aW50OVwiLCBcInRpbnQxMFwiXSkuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWRcbiAgICB9KS5pc1JlcXVpcmVkLFxuXG4gICAgLyoqXG4gICAgICAgKiBMYWJlbCBvciBwcmltYXJ5IHRleHQuXG4gICAgICAgKi9cbiAgICBsYWJlbDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuXG4gICAgLyoqXG4gICAgICAgKiBEZXNjcmlwdGlvbiBvciBzZWNvbmRhcnkgdGV4dCAob3B0aW9uYWwpLlxuICAgICAgICovXG4gICAgZGVzY3JpcHRpb246IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgICAvKipcbiAgICAgICAqIFBlcmNlbnRhZ2Ugd2lkdGggb2YgYGxhYmVsYC5cbiAgICAgICAqIEFjY2VwdHMgbXVsdGlwbGVzIG9mIGAxMGAsIGZyb20gYDIwYCB0byBgOTBgLlxuICAgICAgICogTGFiZWwgd2lsbCBleHBhbmQgdG8gMTAwJSBpZiBgZGVzY3JpcHRpb25gIGlzIG5vdCBwcm92aWRlZC5cbiAgICAgICAqL1xuICAgIGxhYmVsV2lkdGg6IFByb3BUeXBlcy5vbmVPZihbXCIyMFwiLCBcIjMwXCIsIFwiNDBcIiwgXCI1MFwiLCBcIjYwXCIsIFwiNzBcIiwgXCI4MFwiLCBcIjkwXCIsIDIwLCAzMCwgNDAsIDUwLCA2MCwgNzAsIDgwLCA5MF0pLFxuXG4gICAgLyoqXG4gICAgICAgKiBUcnVuY2F0ZXMgYm90aCBsYWJlbCBhbmQgZGVzY3JpcHRpb24uXG4gICAgICAgKi9cbiAgICB0cnVuY2F0ZTogUHJvcFR5cGVzLmJvb2xcbiAgfSkuaXNSZXF1aXJlZCkuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICAgICAqIENoYW5nZXMgdGhlIGNvbnRlbnQgb2YgdGhlIHRvb2x0aXAgdGhhdCB3cmFwcyB0aGUgc3RhdHVzIGljb25cbiAgICAgICAqL1xuICB0b29sdGlwQ29udGVudDogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgICAqIFN0YXR1cyBvZiB0aGUgY3VycmVudCBxdWVyeSAndW5zYXZlZCcsICdzYXZlZCcsICd1bmNoYW5nZWQnIG9yICdsb2FkaW5nJy5cbiAgICAgICAqL1xuICBzdGF0dXM6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICAgKiBFbGVtZW50IHRvIGJlIGFwcGVuZGVkIHRvIHRoZSBpbnB1dCBiYXIuXG4gICAgICAgKi9cbiAgYXBwZW5kOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAgICogSGFuZGxlciBmb3IgY2xpY2sgb24gYW4gRXVpU3VnZ2VzdEl0ZW0uXG4gICAgICAgKi9cbiAgb25JdGVtQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgICAgICogQ2FsbGJhY2sgZnVuY3Rpb24gY2FsbGVkIHdoZW4gdGhlIGlucHV0IGNoYW5nZXMuXG4gICAgICAgKi9cbiAgb25JbnB1dDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAgICAgKiBDYWxsYmFjayBmdW5jdGlvbiBjYWxsZWQgd2hlbiB0aGUgc2VhcmNoIGNoYW5nZXMuXG4gICAgICAgKi9cbiAgb25TZWFyY2g6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgICAgICogVXNlIHZpcnR1YWxpemVkIHJlbmRlcmluZyBmb3IgbGlzdCBpdGVtcyB3aXRoIGByZWFjdC13aW5kb3dgLlxuICAgICAgICogQmVzdCB1c2VkIHdoZW4gdGhlcmUgYXJlIGEgbG90IG9mIGl0ZW1zLlxuICAgICAgICovXG4gIGlzVmlydHVhbGl6ZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAgICogTWF4aW11bSBoZWlnaHQgdG8gc2V0IGZvciB0aGUgbGlzdC5cbiAgICAgICAqIERlZmF1bHQgaXMgYDYwdmhgXG4gICAgICAgKi9cbiAgbWF4SGVpZ2h0OiBQcm9wVHlwZXMuYW55LFxuICBcImFyaWEtbGFiZWxsZWRieVwiOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWRdKVxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29tcHJlc3NlZFwiLCBcInRhYmxlTGF5b3V0XCIsIFwicmVzcG9uc2l2ZVwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgdGFibGVMYXlvdXRUb0NsYXNzTWFwID0ge1xuICBmaXhlZDogbnVsbCxcbiAgYXV0bzogJ2V1aVRhYmxlLS1hdXRvJ1xufTtcbmV4cG9ydCB2YXIgRXVpVGFibGUgPSBmdW5jdGlvbiBFdWlUYWJsZShfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIGNvbXByZXNzZWQgPSBfcmVmLmNvbXByZXNzZWQsXG4gICAgICBfcmVmJHRhYmxlTGF5b3V0ID0gX3JlZi50YWJsZUxheW91dCxcbiAgICAgIHRhYmxlTGF5b3V0ID0gX3JlZiR0YWJsZUxheW91dCA9PT0gdm9pZCAwID8gJ2ZpeGVkJyA6IF9yZWYkdGFibGVMYXlvdXQsXG4gICAgICBfcmVmJHJlc3BvbnNpdmUgPSBfcmVmLnJlc3BvbnNpdmUsXG4gICAgICByZXNwb25zaXZlID0gX3JlZiRyZXNwb25zaXZlID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRyZXNwb25zaXZlLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpVGFibGUnLCBjbGFzc05hbWUsIHtcbiAgICAnZXVpVGFibGUtLWNvbXByZXNzZWQnOiBjb21wcmVzc2VkLFxuICAgICdldWlUYWJsZS0tcmVzcG9uc2l2ZSc6IHJlc3BvbnNpdmVcbiAgfSwgdGFibGVMYXlvdXRUb0NsYXNzTWFwW3RhYmxlTGF5b3V0XSk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwidGFibGVcIiwgX2V4dGVuZHMoe1xuICAgIHRhYkluZGV4OiAtMSxcbiAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgfSwgcmVzdCksIGNoaWxkcmVuKTtcbn07XG5FdWlUYWJsZS5wcm9wVHlwZXMgPSB7XG4gIGNvbXByZXNzZWQ6IFByb3BUeXBlcy5ib29sLFxuICByZXNwb25zaXZlOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBTZXRzIHRoZSB0YWJsZS1sYXlvdXQgQ1NTIHByb3BlcnR5XG4gICAgICovXG4gIHRhYmxlTGF5b3V0OiBQcm9wVHlwZXMub25lT2YoW1wiZml4ZWRcIiwgXCJhdXRvXCJdKSxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nXG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJib2R5UmVmXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVRhYmxlQm9keSA9IGZ1bmN0aW9uIEV1aVRhYmxlQm9keShfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIGJvZHlSZWYgPSBfcmVmLmJvZHlSZWYsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJ0Ym9keVwiLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWUsXG4gICAgcmVmOiBib2R5UmVmXG4gIH0sIHJlc3QpLCBjaGlsZHJlbik7XG59O1xuRXVpVGFibGVCb2R5LnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBib2R5UmVmOiBQcm9wVHlwZXMuYW55XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpVGFibGVGb290ZXIgPSBmdW5jdGlvbiBFdWlUYWJsZUZvb3RlcihfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInRmb290XCIsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZVxuICB9LCByZXN0KSwgX19fRW1vdGlvbkpTWChcInRyXCIsIG51bGwsIGNoaWxkcmVuKSk7XG59O1xuRXVpVGFibGVGb290ZXIucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImFsaWduXCIsIFwiY2xhc3NOYW1lXCIsIFwid2lkdGhcIiwgXCJzdHlsZVwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IExFRlRfQUxJR05NRU5ULCBSSUdIVF9BTElHTk1FTlQsIENFTlRFUl9BTElHTk1FTlQgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyByZXNvbHZlV2lkdGhBc1N0eWxlIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlUYWJsZUZvb3RlckNlbGwgPSBmdW5jdGlvbiBFdWlUYWJsZUZvb3RlckNlbGwoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgX3JlZiRhbGlnbiA9IF9yZWYuYWxpZ24sXG4gICAgICBhbGlnbiA9IF9yZWYkYWxpZ24gPT09IHZvaWQgMCA/IExFRlRfQUxJR05NRU5UIDogX3JlZiRhbGlnbixcbiAgICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgd2lkdGggPSBfcmVmLndpZHRoLFxuICAgICAgc3R5bGUgPSBfcmVmLnN0eWxlLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpVGFibGVGb290ZXJDZWxsJywgY2xhc3NOYW1lKTtcbiAgdmFyIGNvbnRlbnRDbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpVGFibGVDZWxsQ29udGVudCcsIGNsYXNzTmFtZSwge1xuICAgICdldWlUYWJsZUNlbGxDb250ZW50LS1hbGlnblJpZ2h0JzogYWxpZ24gPT09IFJJR0hUX0FMSUdOTUVOVCxcbiAgICAnZXVpVGFibGVDZWxsQ29udGVudC0tYWxpZ25DZW50ZXInOiBhbGlnbiA9PT0gQ0VOVEVSX0FMSUdOTUVOVFxuICB9KTtcbiAgdmFyIHN0eWxlT2JqID0gcmVzb2x2ZVdpZHRoQXNTdHlsZShzdHlsZSwgd2lkdGgpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInRkXCIsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgc3R5bGU6IHN0eWxlT2JqXG4gIH0sIHJlc3QpLCBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICBjbGFzc05hbWU6IGNvbnRlbnRDbGFzc2VzXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpVGFibGVDZWxsQ29udGVudF9fdGV4dFwiXG4gIH0sIGNoaWxkcmVuKSkpO1xufTtcbkV1aVRhYmxlRm9vdGVyQ2VsbC5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgYWxpZ246IFByb3BUeXBlcy5vbmVPZihbXCJsZWZ0XCIsIFwicmlnaHRcIiwgXCJjZW50ZXJcIl0pLFxuICB3aWR0aDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWRdKVxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcIndpZHRoXCJdO1xuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5leHBvcnQgdmFyIFdBUk5JTkdfTUVTU0FHRSA9ICdUd28gYHdpZHRoYCBwcm9wZXJ0aWVzIHdlcmUgcHJvdmlkZWQuIFByb3ZpZGUgb25seSBvbmUgb2YgYHN0eWxlLndpZHRoYCBvciBgd2lkdGhgIHRvIGF2b2lkIGNvbmZsaWN0cy4nO1xuZXhwb3J0IHZhciByZXNvbHZlV2lkdGhBc1N0eWxlID0gZnVuY3Rpb24gcmVzb2x2ZVdpZHRoQXNTdHlsZSgpIHtcbiAgdmFyIHN0eWxlID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgdmFyIHdpZHRoID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG5cbiAgdmFyIHN0eWxlV2lkdGggPSBzdHlsZS53aWR0aCxcbiAgICAgIHN0eWxlUmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzdHlsZSwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgYXR0cldpZHRoID0gd2lkdGg7XG5cbiAgaWYgKGF0dHJXaWR0aCAhPSBudWxsICYmICh0eXBlb2YgYXR0cldpZHRoID09PSAnbnVtYmVyJyB8fCAhaXNOYU4oTnVtYmVyKGF0dHJXaWR0aCkpKSAvLyB0cmFuc2Zvcm0ge251bWJlcn0gb3IgdW5pdGxlc3MgJ251bWJlcicgdG8gcHggc3RyaW5nXG4gICkge1xuICAgIGF0dHJXaWR0aCA9IFwiXCIuY29uY2F0KGF0dHJXaWR0aCwgXCJweFwiKTtcbiAgfVxuXG4gIGlmIChzdHlsZVdpZHRoICYmIGF0dHJXaWR0aCkge1xuICAgIGNvbnNvbGUud2FybihXQVJOSU5HX01FU1NBR0UpO1xuICB9XG5cbiAgcmV0dXJuIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgc3R5bGVSZXN0KSwge30sIHtcbiAgICB3aWR0aDogYXR0cldpZHRoIHx8IHN0eWxlV2lkdGhcbiAgfSk7XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJ3cmFwV2l0aFRhYmxlUm93XCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVRhYmxlSGVhZGVyID0gZnVuY3Rpb24gRXVpVGFibGVIZWFkZXIoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBfcmVmJHdyYXBXaXRoVGFibGVSb3cgPSBfcmVmLndyYXBXaXRoVGFibGVSb3csXG4gICAgICB3cmFwV2l0aFRhYmxlUm93ID0gX3JlZiR3cmFwV2l0aFRhYmxlUm93ID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiR3cmFwV2l0aFRhYmxlUm93LFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwidGhlYWRcIiwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lXG4gIH0sIHJlc3QpLCB3cmFwV2l0aFRhYmxlUm93ID8gX19fRW1vdGlvbkpTWChcInRyXCIsIG51bGwsIGNoaWxkcmVuKSA6IGNoaWxkcmVuKTtcbn07XG5FdWlUYWJsZUhlYWRlci5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgICAqIENoaWxkcmVuIG11c3QgYmUgdmFsaWQgRE9NIHN0cnVjdHVyZSByZXNpZGluZyB3aXRoaW4gYDx0aGVhZD5gLlxuICAgICAgICogVXNlIGA8dGQ+IHwgPHRoPmAgYnkgZGVmYXVsdCwgb3IgYDx0cj48dGgvPjwvdHI+YCB3aGVuIGB3cmFwV2l0aFRhYmxlUm93PWZhbHNlYFxuICAgICAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICAgICAqIEF1dG9tYXRpY2FsbHkgYWRkcyBhIHdyYXBwaW5nIGA8dHI+YCBlbGVtZW50IGFyb3VuZCB0aGUgY2hpbGRyZW5cbiAgICAgICAqL1xuICB3cmFwV2l0aFRhYmxlUm93OiBQcm9wVHlwZXMuYm9vbFxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiYWxpZ25cIiwgXCJvblNvcnRcIiwgXCJpc1NvcnRlZFwiLCBcImlzU29ydEFzY2VuZGluZ1wiLCBcImNsYXNzTmFtZVwiLCBcInNjb3BlXCIsIFwibW9iaWxlT3B0aW9uc1wiLCBcIndpZHRoXCIsIFwic3R5bGVcIiwgXCJyZWFkT25seVwiLCBcImRlc2NyaXB0aW9uXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgRXVpU2NyZWVuUmVhZGVyT25seSB9IGZyb20gJy4uL2FjY2Vzc2liaWxpdHknO1xuaW1wb3J0IHsgRXVpSWNvbiB9IGZyb20gJy4uL2ljb24nO1xuaW1wb3J0IHsgcmVzb2x2ZVdpZHRoQXNTdHlsZSB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgRXVpSW5uZXJUZXh0IH0gZnJvbSAnLi4vaW5uZXJfdGV4dCc7XG5pbXBvcnQgeyBMRUZUX0FMSUdOTUVOVCwgUklHSFRfQUxJR05NRU5ULCBDRU5URVJfQUxJR05NRU5UIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpSTE4biB9IGZyb20gJy4uL2kxOG4nO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIENlbGxDb250ZW50cyA9IGZ1bmN0aW9uIENlbGxDb250ZW50cyhfcmVmKSB7XG4gIHZhciBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uID0gX3JlZi5kZXNjcmlwdGlvbixcbiAgICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIGlzU29ydGVkID0gX3JlZi5pc1NvcnRlZCxcbiAgICAgIGlzU29ydEFzY2VuZGluZyA9IF9yZWYuaXNTb3J0QXNjZW5kaW5nLFxuICAgICAgc2hvd1NvcnRNc2cgPSBfcmVmLnNob3dTb3J0TXNnO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lXG4gIH0sIF9fX0Vtb3Rpb25KU1goRXVpSW5uZXJUZXh0LCBudWxsLCBmdW5jdGlvbiAocmVmLCBpbm5lclRleHQpIHtcbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICB0b2tlbjogXCJldWlUYWJsZUhlYWRlckNlbGwudGl0bGVUZXh0V2l0aERlc2NcIixcbiAgICAgIGRlZmF1bHQ6IFwie2lubmVyVGV4dH07IHtkZXNjcmlwdGlvbn1cIixcbiAgICAgIHZhbHVlczoge1xuICAgICAgICBpbm5lclRleHQ6IGlubmVyVGV4dCxcbiAgICAgICAgZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uXG4gICAgICB9XG4gICAgfSwgZnVuY3Rpb24gKHRpdGxlVGV4dFdpdGhEZXNjKSB7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgICAgICB0aXRsZTogZGVzY3JpcHRpb24gPyB0aXRsZVRleHRXaXRoRGVzYyA6IGlubmVyVGV4dCxcbiAgICAgICAgcmVmOiByZWYsXG4gICAgICAgIGNsYXNzTmFtZTogXCJldWlUYWJsZUNlbGxDb250ZW50X190ZXh0XCJcbiAgICAgIH0sIGNoaWxkcmVuKTtcbiAgICB9KTtcbiAgfSksIGRlc2NyaXB0aW9uICYmIF9fX0Vtb3Rpb25KU1goRXVpU2NyZWVuUmVhZGVyT25seSwgbnVsbCwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwgbnVsbCwgZGVzY3JpcHRpb24pKSwgc2hvd1NvcnRNc2cgJiYgaXNTb3J0ZWQgJiYgX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aVRhYmxlU29ydEljb25cIixcbiAgICB0eXBlOiBpc1NvcnRBc2NlbmRpbmcgPyAnc29ydFVwJyA6ICdzb3J0RG93bicsXG4gICAgc2l6ZTogXCJtXCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBFdWlUYWJsZUhlYWRlckNlbGwgPSBmdW5jdGlvbiBFdWlUYWJsZUhlYWRlckNlbGwoX3JlZjIpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZjIuY2hpbGRyZW4sXG4gICAgICBfcmVmMiRhbGlnbiA9IF9yZWYyLmFsaWduLFxuICAgICAgYWxpZ24gPSBfcmVmMiRhbGlnbiA9PT0gdm9pZCAwID8gTEVGVF9BTElHTk1FTlQgOiBfcmVmMiRhbGlnbixcbiAgICAgIG9uU29ydCA9IF9yZWYyLm9uU29ydCxcbiAgICAgIGlzU29ydGVkID0gX3JlZjIuaXNTb3J0ZWQsXG4gICAgICBpc1NvcnRBc2NlbmRpbmcgPSBfcmVmMi5pc1NvcnRBc2NlbmRpbmcsXG4gICAgICBjbGFzc05hbWUgPSBfcmVmMi5jbGFzc05hbWUsXG4gICAgICBzY29wZSA9IF9yZWYyLnNjb3BlLFxuICAgICAgX3JlZjIkbW9iaWxlT3B0aW9ucyA9IF9yZWYyLm1vYmlsZU9wdGlvbnMsXG4gICAgICBtb2JpbGVPcHRpb25zID0gX3JlZjIkbW9iaWxlT3B0aW9ucyA9PT0gdm9pZCAwID8ge1xuICAgIHNob3c6IHRydWVcbiAgfSA6IF9yZWYyJG1vYmlsZU9wdGlvbnMsXG4gICAgICB3aWR0aCA9IF9yZWYyLndpZHRoLFxuICAgICAgc3R5bGUgPSBfcmVmMi5zdHlsZSxcbiAgICAgIHJlYWRPbmx5ID0gX3JlZjIucmVhZE9ubHksXG4gICAgICBkZXNjcmlwdGlvbiA9IF9yZWYyLmRlc2NyaXB0aW9uLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmMiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRhYmxlSGVhZGVyQ2VsbCcsIGNsYXNzTmFtZSwge1xuICAgICdldWlUYWJsZUhlYWRlckNlbGwtLWhpZGVGb3JEZXNrdG9wJzogbW9iaWxlT3B0aW9ucy5vbmx5LFxuICAgICdldWlUYWJsZUhlYWRlckNlbGwtLWhpZGVGb3JNb2JpbGUnOiAhbW9iaWxlT3B0aW9ucy5zaG93XG4gIH0pO1xuICB2YXIgY29udGVudENsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUYWJsZUNlbGxDb250ZW50JywgY2xhc3NOYW1lLCB7XG4gICAgJ2V1aVRhYmxlQ2VsbENvbnRlbnQtLWFsaWduUmlnaHQnOiBhbGlnbiA9PT0gUklHSFRfQUxJR05NRU5ULFxuICAgICdldWlUYWJsZUNlbGxDb250ZW50LS1hbGlnbkNlbnRlcic6IGFsaWduID09PSBDRU5URVJfQUxJR05NRU5UXG4gIH0pO1xuICB2YXIgc3R5bGVPYmogPSByZXNvbHZlV2lkdGhBc1N0eWxlKHN0eWxlLCB3aWR0aCk7XG4gIHZhciBDZWxsQ29tcG9uZW50ID0gY2hpbGRyZW4gPyAndGgnIDogJ3RkJztcbiAgdmFyIGNlbGxTY29wZSA9IENlbGxDb21wb25lbnQgPT09ICd0aCcgPyBzY29wZSAhPT0gbnVsbCAmJiBzY29wZSAhPT0gdm9pZCAwID8gc2NvcGUgOiAnY29sJyA6IHVuZGVmaW5lZDsgLy8gYHNjb3BlYCBpcyBvbmx5IHZhbGlkIG9uIGB0aGAgZWxlbWVudHNcblxuICBpZiAob25Tb3J0IHx8IGlzU29ydGVkKSB7XG4gICAgdmFyIGJ1dHRvbkNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUYWJsZUhlYWRlckJ1dHRvbicsIHtcbiAgICAgICdldWlUYWJsZUhlYWRlckJ1dHRvbi1pc1NvcnRlZCc6IGlzU29ydGVkXG4gICAgfSk7XG4gICAgdmFyIGFyaWFTb3J0VmFsdWUgPSAnbm9uZSc7XG5cbiAgICBpZiAoaXNTb3J0ZWQpIHtcbiAgICAgIGFyaWFTb3J0VmFsdWUgPSBpc1NvcnRBc2NlbmRpbmcgPyAnYXNjZW5kaW5nJyA6ICdkZXNjZW5kaW5nJztcbiAgICB9XG5cbiAgICB2YXIgY2VsbENvbnRlbnRzID0gX19fRW1vdGlvbkpTWChDZWxsQ29udGVudHMsIHtcbiAgICAgIGNsYXNzTmFtZTogY29udGVudENsYXNzZXMsXG4gICAgICBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb24sXG4gICAgICBzaG93U29ydE1zZzogdHJ1ZSxcbiAgICAgIGNoaWxkcmVuOiBjaGlsZHJlbixcbiAgICAgIGlzU29ydGVkOiBpc1NvcnRlZCxcbiAgICAgIGlzU29ydEFzY2VuZGluZzogaXNTb3J0QXNjZW5kaW5nXG4gICAgfSk7XG5cbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChDZWxsQ29tcG9uZW50LCBfZXh0ZW5kcyh7XG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICBzY29wZTogY2VsbFNjb3BlLFxuICAgICAgcm9sZTogXCJjb2x1bW5oZWFkZXJcIixcbiAgICAgIFwiYXJpYS1zb3J0XCI6IGFyaWFTb3J0VmFsdWUsXG4gICAgICBcImFyaWEtbGl2ZVwiOiBcInBvbGl0ZVwiLFxuICAgICAgc3R5bGU6IHN0eWxlT2JqXG4gICAgfSwgcmVzdCksIG9uU29ydCAmJiAhcmVhZE9ubHkgPyBfX19FbW90aW9uSlNYKFwiYnV0dG9uXCIsIHtcbiAgICAgIHR5cGU6IFwiYnV0dG9uXCIsXG4gICAgICBjbGFzc05hbWU6IGJ1dHRvbkNsYXNzZXMsXG4gICAgICBvbkNsaWNrOiBvblNvcnQsXG4gICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFwidGFibGVIZWFkZXJTb3J0QnV0dG9uXCJcbiAgICB9LCBjZWxsQ29udGVudHMpIDogY2VsbENvbnRlbnRzKTtcbiAgfVxuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKENlbGxDb21wb25lbnQsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgc2NvcGU6IGNlbGxTY29wZSxcbiAgICByb2xlOiBcImNvbHVtbmhlYWRlclwiLFxuICAgIHN0eWxlOiBzdHlsZU9ialxuICB9LCByZXN0KSwgX19fRW1vdGlvbkpTWChDZWxsQ29udGVudHMsIHtcbiAgICBjbGFzc05hbWU6IGNvbnRlbnRDbGFzc2VzLFxuICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbixcbiAgICBzaG93U29ydE1zZzogZmFsc2UsXG4gICAgY2hpbGRyZW46IGNoaWxkcmVuLFxuICAgIGlzU29ydGVkOiBpc1NvcnRlZCxcbiAgICBpc1NvcnRBc2NlbmRpbmc6IGlzU29ydEFzY2VuZGluZ1xuICB9KSk7XG59O1xuRXVpVGFibGVIZWFkZXJDZWxsLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBhbGlnbjogUHJvcFR5cGVzLm9uZU9mKFtcImxlZnRcIiwgXCJyaWdodFwiLCBcImNlbnRlclwiXSksXG4gIGlzU29ydEFzY2VuZGluZzogUHJvcFR5cGVzLmJvb2wsXG4gIGlzU29ydGVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgICAqIE1vYmlsZSBvcHRpb25zIGZvciBkaXNwbGF5aW5nIGRpZmZlcmVudGx5IGF0IHNtYWxsIHNjcmVlbnNcbiAgICAgICAqL1xuICBtb2JpbGVPcHRpb25zOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIC8qKlxuICAgICAgICAgICAqIElmIGZhbHNlLCB3aWxsIG5vdCByZW5kZXIgdGhlIGNvbHVtbiBhdCBhbGwgZm9yIG1vYmlsZVxuICAgICAgICAgICAqL1xuICAgIHNob3c6IFByb3BUeXBlcy5ib29sLFxuXG4gICAgLyoqXG4gICAgICAgICAgICogT25seSBzaG93IGZvciBtb2JpbGU/IElmIHRydWUsIHdpbGwgbm90IHJlbmRlciB0aGUgY29sdW1uIGF0IGFsbFxuICAgICAgICAgICAqIGZvciBkZXNrdG9wXG4gICAgICAgICAgICovXG4gICAgb25seTogUHJvcFR5cGVzLmJvb2xcbiAgfSksXG4gIG9uU29ydDogUHJvcFR5cGVzLmZ1bmMsXG4gIHNjb3BlOiBQcm9wVHlwZXMub25lT2YoW1wiY29sXCIsIFwicm93XCIsIFwiY29sZ3JvdXBcIiwgXCJyb3dncm91cFwiXSksXG4gIHdpZHRoOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZF0pLFxuICBkZXNjcmlwdGlvbjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgICAqIFNob3dzIHRoZSBzb3J0IGluZGljYXRvciBidXQgcmVtb3ZlcyB0aGUgYnV0dG9uXG4gICAgICAgKi9cbiAgcmVhZE9ubHk6IFByb3BUeXBlcy5ib29sXG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJzY29wZVwiLCBcInN0eWxlXCIsIFwid2lkdGhcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyByZXNvbHZlV2lkdGhBc1N0eWxlIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlUYWJsZUhlYWRlckNlbGxDaGVja2JveCA9IGZ1bmN0aW9uIEV1aVRhYmxlSGVhZGVyQ2VsbENoZWNrYm94KF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgX3JlZiRzY29wZSA9IF9yZWYuc2NvcGUsXG4gICAgICBzY29wZSA9IF9yZWYkc2NvcGUgPT09IHZvaWQgMCA/ICdjb2wnIDogX3JlZiRzY29wZSxcbiAgICAgIHN0eWxlID0gX3JlZi5zdHlsZSxcbiAgICAgIHdpZHRoID0gX3JlZi53aWR0aCxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRhYmxlSGVhZGVyQ2VsbENoZWNrYm94JywgY2xhc3NOYW1lKTtcbiAgdmFyIHN0eWxlT2JqID0gcmVzb2x2ZVdpZHRoQXNTdHlsZShzdHlsZSwgd2lkdGgpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInRoXCIsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgc2NvcGU6IHNjb3BlLFxuICAgIHN0eWxlOiBzdHlsZU9ialxuICB9LCByZXN0KSwgX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aVRhYmxlQ2VsbENvbnRlbnRcIlxuICB9LCBjaGlsZHJlbikpO1xufTtcbkV1aVRhYmxlSGVhZGVyQ2VsbENoZWNrYm94LnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICB3aWR0aDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWRdKSxcbiAgc2NvcGU6IFByb3BUeXBlcy5vbmVPZihbXCJjb2xcIiwgXCJyb3dcIiwgXCJjb2xncm91cFwiLCBcInJvd2dyb3VwXCJdKVxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpVGFibGVIZWFkZXJNb2JpbGUgPSBmdW5jdGlvbiBFdWlUYWJsZUhlYWRlck1vYmlsZShfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRhYmxlSGVhZGVyTW9iaWxlJywgY2xhc3NOYW1lKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICB9LCByZXN0KSwgY2hpbGRyZW4pO1xufTtcbkV1aVRhYmxlSGVhZGVyTW9iaWxlLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nXG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbnZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJhbmNob3JQb3NpdGlvblwiLCBcIml0ZW1zXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IEV1aUJ1dHRvbkVtcHR5IH0gZnJvbSAnLi4vLi4vYnV0dG9uL2J1dHRvbl9lbXB0eSc7XG5pbXBvcnQgeyBFdWlQb3BvdmVyIH0gZnJvbSAnLi4vLi4vcG9wb3Zlcic7XG5pbXBvcnQgeyBFdWlDb250ZXh0TWVudVBhbmVsIH0gZnJvbSAnLi4vLi4vY29udGV4dF9tZW51JztcbmltcG9ydCB7IEV1aUkxOG4gfSBmcm9tICcuLi8uLi9pMThuJztcbmltcG9ydCB7IEV1aVRhYmxlU29ydE1vYmlsZUl0ZW0gfSBmcm9tICcuL3RhYmxlX3NvcnRfbW9iaWxlX2l0ZW0nO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpVGFibGVTb3J0TW9iaWxlID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhFdWlUYWJsZVNvcnRNb2JpbGUsIF9Db21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoRXVpVGFibGVTb3J0TW9iaWxlKTtcblxuICBmdW5jdGlvbiBFdWlUYWJsZVNvcnRNb2JpbGUoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aVRhYmxlU29ydE1vYmlsZSk7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbC5hcHBseShfc3VwZXIsIFt0aGlzXS5jb25jYXQoYXJncykpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInN0YXRlXCIsIHtcbiAgICAgIGlzUG9wb3Zlck9wZW46IGZhbHNlXG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25CdXR0b25DbGlja1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGlzUG9wb3Zlck9wZW46ICFfdGhpcy5zdGF0ZS5pc1BvcG92ZXJPcGVuXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJjbG9zZVBvcG92ZXJcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBpc1BvcG92ZXJPcGVuOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoRXVpVGFibGVTb3J0TW9iaWxlLCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wcy5jbGFzc05hbWUsXG4gICAgICAgICAgYW5jaG9yUG9zaXRpb24gPSBfdGhpcyRwcm9wcy5hbmNob3JQb3NpdGlvbixcbiAgICAgICAgICBpdGVtcyA9IF90aGlzJHByb3BzLml0ZW1zLFxuICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgICAgIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpVGFibGVTb3J0TW9iaWxlJywgY2xhc3NOYW1lKTtcblxuICAgICAgdmFyIG1vYmlsZVNvcnRCdXR0b24gPSBfX19FbW90aW9uSlNYKEV1aUJ1dHRvbkVtcHR5LCB7XG4gICAgICAgIGljb25UeXBlOiBcImFycm93RG93blwiLFxuICAgICAgICBpY29uU2lkZTogXCJyaWdodFwiLFxuICAgICAgICBvbkNsaWNrOiB0aGlzLm9uQnV0dG9uQ2xpY2suYmluZCh0aGlzKSxcbiAgICAgICAgZmx1c2g6IFwicmlnaHRcIixcbiAgICAgICAgc2l6ZTogXCJ4c1wiXG4gICAgICB9LCBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgdG9rZW46IFwiZXVpVGFibGVTb3J0TW9iaWxlLnNvcnRpbmdcIixcbiAgICAgICAgZGVmYXVsdDogXCJTb3J0aW5nXCJcbiAgICAgIH0pKTtcblxuICAgICAgdmFyIG1vYmlsZVNvcnRQb3BvdmVyID0gX19fRW1vdGlvbkpTWChFdWlQb3BvdmVyLCBfZXh0ZW5kcyh7XG4gICAgICAgIGJ1dHRvbjogbW9iaWxlU29ydEJ1dHRvbixcbiAgICAgICAgaXNPcGVuOiB0aGlzLnN0YXRlLmlzUG9wb3Zlck9wZW4sXG4gICAgICAgIGNsb3NlUG9wb3ZlcjogdGhpcy5jbG9zZVBvcG92ZXIsXG4gICAgICAgIGFuY2hvclBvc2l0aW9uOiBhbmNob3JQb3NpdGlvbiB8fCAnZG93blJpZ2h0JyxcbiAgICAgICAgcGFuZWxQYWRkaW5nU2l6ZTogXCJub25lXCJcbiAgICAgIH0sIHJlc3QpLCBfX19FbW90aW9uSlNYKEV1aUNvbnRleHRNZW51UGFuZWwsIHtcbiAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICBtaW5XaWR0aDogMjAwXG4gICAgICAgIH0sXG4gICAgICAgIGl0ZW1zOiBpdGVtcyAmJiBpdGVtcy5sZW5ndGggPyBpdGVtcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlUYWJsZVNvcnRNb2JpbGVJdGVtLCB7XG4gICAgICAgICAgICBrZXk6IGl0ZW0ua2V5LFxuICAgICAgICAgICAgb25Tb3J0OiBpdGVtLm9uU29ydCxcbiAgICAgICAgICAgIGlzU29ydGVkOiBpdGVtLmlzU29ydGVkLFxuICAgICAgICAgICAgaXNTb3J0QXNjZW5kaW5nOiBpdGVtLmlzU29ydEFzY2VuZGluZ1xuICAgICAgICAgIH0sIGl0ZW0ubmFtZSk7XG4gICAgICAgIH0pIDogdW5kZWZpbmVkXG4gICAgICB9KSk7XG5cbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gICAgICB9LCBtb2JpbGVTb3J0UG9wb3Zlcik7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEV1aVRhYmxlU29ydE1vYmlsZTtcbn0oQ29tcG9uZW50KTtcbkV1aVRhYmxlU29ydE1vYmlsZS5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgYW5jaG9yUG9zaXRpb246IFByb3BUeXBlcy5hbnksXG4gIGl0ZW1zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuICAgIG5hbWU6IFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsXG4gICAga2V5OiBQcm9wVHlwZXMuYW55LFxuICAgIG9uU29ydDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgaXNTb3J0ZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgIGlzU29ydEFzY2VuZGluZzogUHJvcFR5cGVzLmJvb2xcbiAgfSkuaXNSZXF1aXJlZClcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcIm9uU29ydFwiLCBcImlzU29ydGVkXCIsIFwiaXNTb3J0QXNjZW5kaW5nXCIsIFwiY2xhc3NOYW1lXCIsIFwiYXJpYUxhYmVsXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgRXVpQ29udGV4dE1lbnVJdGVtIH0gZnJvbSAnLi4vLi4vY29udGV4dF9tZW51JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVRhYmxlU29ydE1vYmlsZUl0ZW0gPSBmdW5jdGlvbiBFdWlUYWJsZVNvcnRNb2JpbGVJdGVtKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIG9uU29ydCA9IF9yZWYub25Tb3J0LFxuICAgICAgaXNTb3J0ZWQgPSBfcmVmLmlzU29ydGVkLFxuICAgICAgaXNTb3J0QXNjZW5kaW5nID0gX3JlZi5pc1NvcnRBc2NlbmRpbmcsXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIGFyaWFMYWJlbCA9IF9yZWYuYXJpYUxhYmVsLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBzb3J0SWNvbiA9ICdlbXB0eSc7XG5cbiAgaWYgKGlzU29ydGVkKSB7XG4gICAgc29ydEljb24gPSBpc1NvcnRBc2NlbmRpbmcgPyAnc29ydFVwJyA6ICdzb3J0RG93bic7XG4gIH1cblxuICB2YXIgYnV0dG9uQ2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRhYmxlU29ydE1vYmlsZUl0ZW0nLCBjbGFzc05hbWUsIHtcbiAgICAnZXVpVGFibGVTb3J0TW9iaWxlSXRlbS1pc1NvcnRlZCc6IGlzU29ydGVkXG4gIH0pO1xuICB2YXIgY29sdW1uVGl0bGUgPSBhcmlhTGFiZWwgPyBhcmlhTGFiZWwgOiBjaGlsZHJlbjtcbiAgdmFyIHN0YXRlZnVsQXJpYUxhYmVsID0gXCJTb3J0IFwiLmNvbmNhdChjb2x1bW5UaXRsZSwgXCIgXCIpLmNvbmNhdChpc1NvcnRBc2NlbmRpbmcgPyAnZGVzY2VuZGluZycgOiAnYXNjZW5kaW5nJyk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUNvbnRleHRNZW51SXRlbSwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogYnV0dG9uQ2xhc3NlcyxcbiAgICBpY29uOiBzb3J0SWNvbixcbiAgICBvbkNsaWNrOiBvblNvcnQsXG4gICAgXCJhcmlhLWxhYmVsXCI6IHN0YXRlZnVsQXJpYUxhYmVsXG4gIH0sIHJlc3QpLCBjaGlsZHJlbik7XG59O1xuRXVpVGFibGVTb3J0TW9iaWxlSXRlbS5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgICAqIENhbGxiYWNrIHRvIGtub3cgd2hlbiBhbiBpdGVtIGhhcyBiZWVuIGNsaWNrZWRcbiAgICAgKi9cbiAgb25Tb3J0OiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgY3VycmVudCBvcHRpb24gaXMgdGhlIHNvcnRlZCBvbiBjb2x1bW5cbiAgICAgKi9cbiAgaXNTb3J0ZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIEluZGljYXRlcyB3aGljaCBkaXJlY3Rpb24gdGhlIGN1cnJlbnQgY29sdW1uIGlzIHNvcnRlZCBvblxuICAgICAqL1xuICBpc1NvcnRBc2NlbmRpbmc6IFByb3BUeXBlcy5ib29sLFxuICBhcmlhTGFiZWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZ1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiaXNTZWxlY3RlZFwiLCBcImlzU2VsZWN0YWJsZVwiLCBcImhhc0FjdGlvbnNcIiwgXCJpc0V4cGFuZGVkUm93XCIsIFwiaXNFeHBhbmRhYmxlXCIsIFwib25DbGlja1wiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGtleXMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlUYWJsZVJvdyA9IGZ1bmN0aW9uIEV1aVRhYmxlUm93KF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgaXNTZWxlY3RlZCA9IF9yZWYuaXNTZWxlY3RlZCxcbiAgICAgIGlzU2VsZWN0YWJsZSA9IF9yZWYuaXNTZWxlY3RhYmxlLFxuICAgICAgaGFzQWN0aW9ucyA9IF9yZWYuaGFzQWN0aW9ucyxcbiAgICAgIGlzRXhwYW5kZWRSb3cgPSBfcmVmLmlzRXhwYW5kZWRSb3csXG4gICAgICBpc0V4cGFuZGFibGUgPSBfcmVmLmlzRXhwYW5kYWJsZSxcbiAgICAgIG9uQ2xpY2sgPSBfcmVmLm9uQ2xpY2ssXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUYWJsZVJvdycsIGNsYXNzTmFtZSwge1xuICAgICdldWlUYWJsZVJvdy1pc1NlbGVjdGFibGUnOiBpc1NlbGVjdGFibGUsXG4gICAgJ2V1aVRhYmxlUm93LWlzU2VsZWN0ZWQnOiBpc1NlbGVjdGVkLFxuICAgICdldWlUYWJsZVJvdy1oYXNBY3Rpb25zJzogaGFzQWN0aW9ucyxcbiAgICAnZXVpVGFibGVSb3ctaXNFeHBhbmRlZFJvdyc6IGlzRXhwYW5kZWRSb3csXG4gICAgJ2V1aVRhYmxlUm93LWlzRXhwYW5kYWJsZSc6IGlzRXhwYW5kYWJsZSxcbiAgICAnZXVpVGFibGVSb3ctaXNDbGlja2FibGUnOiBvbkNsaWNrXG4gIH0pO1xuXG4gIGlmICghb25DbGljaykge1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwidHJcIiwgX2V4dGVuZHMoe1xuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gICAgfSwgcmVzdCksIGNoaWxkcmVuKTtcbiAgfVxuXG4gIHZhciBvbktleURvd24gPSBmdW5jdGlvbiBvbktleURvd24oZXZlbnQpIHtcbiAgICAvLyBQcmV2ZW50IGEgc2Nyb2xsIGZyb20gb2NjdXJyaW5nIGlmIHRoZSB1c2VyIGhhcyBoaXQgc3BhY2UuXG4gICAgaWYgKGV2ZW50LmtleSA9PT0ga2V5cy5TUEFDRSkgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfTtcblxuICB2YXIgb25LZXlVcCA9IGZ1bmN0aW9uIG9uS2V5VXAoZXZlbnQpIHtcbiAgICAvLyBTdXBwb3J0IGtleWJvYXJkIGFjY2Vzc2liaWxpdHkgYnkgZW11bGF0aW5nIG1vdXNlIGNsaWNrIG9uIEVOVEVSIG9yIFNQQUNFIGtleXByZXNzLlxuICAgIGlmIChldmVudC5rZXkgPT09IGtleXMuRU5URVIgfHwgZXZlbnQua2V5ID09PSBrZXlzLlNQQUNFKSB7XG4gICAgICBvbkNsaWNrKGV2ZW50KTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJ0clwiLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIG9uQ2xpY2s6IG9uQ2xpY2ssXG4gICAgb25LZXlEb3duOiBvbktleURvd24sXG4gICAgb25LZXlVcDogb25LZXlVcCxcbiAgICB0YWJJbmRleDogMFxuICB9LCByZXN0KSwgY2hpbGRyZW4pO1xufTtcbkV1aVRhYmxlUm93LnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAqIEluZGljYXRlcyBpZiB0aGUgdGFibGUgaGFzIGEgc2luZ2xlIGNvbHVtbiBvZiBjaGVja2JveGVzIGZvciBzZWxlY3RpbmdcbiAgICAgKiByb3dzIChhZmZlY3RzIG1vYmlsZSBvbmx5KVxuICAgICAqL1xuICBpc1NlbGVjdGFibGU6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIEluZGljYXRlcyB0aGUgY3VycmVudCByb3cgaGFzIGJlZW4gc2VsZWN0ZWRcbiAgICAgKi9cbiAgaXNTZWxlY3RlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZSB0YWJsZSBoYXMgYSBkZWRpY2F0ZWQgY29sdW1uIGZvciBpY29uLW9ubHkgYWN0aW9uc1xuICAgICAqIChhZmZlY3RzIG1vYmlsZSBvbmx5KVxuICAgICAqL1xuICBoYXNBY3Rpb25zOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIHJvdyB3aWxsIGhhdmUgYW4gZXhwYW5kZWQgcm93XG4gICAgICovXG4gIGlzRXhwYW5kYWJsZTogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZSByb3cgd2lsbCBiZSB0aGUgZXhwYW5kZWQgcm93XG4gICAgICovXG4gIGlzRXhwYW5kZWRSb3c6IFByb3BUeXBlcy5ib29sLFxuICBvbkNsaWNrOiBQcm9wVHlwZXMuYW55XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiYWxpZ25cIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcInRydW5jYXRlVGV4dFwiLCBcInNldFNjb3BlUm93XCIsIFwic2hvd09uSG92ZXJcIiwgXCJ0ZXh0T25seVwiLCBcImhhc0FjdGlvbnNcIiwgXCJpc0V4cGFuZGVyXCIsIFwic3R5bGVcIiwgXCJ3aWR0aFwiLCBcInZhbGlnblwiLCBcIm1vYmlsZU9wdGlvbnNcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBGcmFnbWVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgTEVGVF9BTElHTk1FTlQsIFJJR0hUX0FMSUdOTUVOVCwgQ0VOVEVSX0FMSUdOTUVOVCwgdXNlSXNXaXRoaW5CcmVha3BvaW50cyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IHJlc29sdmVXaWR0aEFzU3R5bGUgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVRhYmxlUm93Q2VsbCA9IGZ1bmN0aW9uIEV1aVRhYmxlUm93Q2VsbChfcmVmKSB7XG4gIHZhciBfbW9iaWxlT3B0aW9ucyRzaG93T24sIF9tb2JpbGVPcHRpb25zJHRydW5jYTtcblxuICB2YXIgX3JlZiRhbGlnbiA9IF9yZWYuYWxpZ24sXG4gICAgICBhbGlnbiA9IF9yZWYkYWxpZ24gPT09IHZvaWQgMCA/IExFRlRfQUxJR05NRU5UIDogX3JlZiRhbGlnbixcbiAgICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgdHJ1bmNhdGVUZXh0ID0gX3JlZi50cnVuY2F0ZVRleHQsXG4gICAgICBzZXRTY29wZVJvdyA9IF9yZWYuc2V0U2NvcGVSb3csXG4gICAgICBzaG93T25Ib3ZlciA9IF9yZWYuc2hvd09uSG92ZXIsXG4gICAgICBfcmVmJHRleHRPbmx5ID0gX3JlZi50ZXh0T25seSxcbiAgICAgIHRleHRPbmx5ID0gX3JlZiR0ZXh0T25seSA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYkdGV4dE9ubHksXG4gICAgICBoYXNBY3Rpb25zID0gX3JlZi5oYXNBY3Rpb25zLFxuICAgICAgaXNFeHBhbmRlciA9IF9yZWYuaXNFeHBhbmRlcixcbiAgICAgIHN0eWxlID0gX3JlZi5zdHlsZSxcbiAgICAgIHdpZHRoID0gX3JlZi53aWR0aCxcbiAgICAgIF9yZWYkdmFsaWduID0gX3JlZi52YWxpZ24sXG4gICAgICB2YWxpZ24gPSBfcmVmJHZhbGlnbiA9PT0gdm9pZCAwID8gJ21pZGRsZScgOiBfcmVmJHZhbGlnbixcbiAgICAgIF9yZWYkbW9iaWxlT3B0aW9ucyA9IF9yZWYubW9iaWxlT3B0aW9ucyxcbiAgICAgIG1vYmlsZU9wdGlvbnMgPSBfcmVmJG1vYmlsZU9wdGlvbnMgPT09IHZvaWQgMCA/IHtcbiAgICBzaG93OiB0cnVlXG4gIH0gOiBfcmVmJG1vYmlsZU9wdGlvbnMsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGNlbGxDbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpVGFibGVSb3dDZWxsJywgX2RlZmluZVByb3BlcnR5KHtcbiAgICAnZXVpVGFibGVSb3dDZWxsLS1oYXNBY3Rpb25zJzogaGFzQWN0aW9ucyxcbiAgICAnZXVpVGFibGVSb3dDZWxsLS1pc0V4cGFuZGVyJzogaXNFeHBhbmRlcixcbiAgICAnZXVpVGFibGVSb3dDZWxsLS1oaWRlRm9yRGVza3RvcCc6IG1vYmlsZU9wdGlvbnMub25seSxcbiAgICAnZXVpVGFibGVSb3dDZWxsLS1lbmxhcmdlRm9yTW9iaWxlJzogbW9iaWxlT3B0aW9ucy5lbmxhcmdlXG4gIH0sIFwiZXVpVGFibGVSb3dDZWxsLS1cIi5jb25jYXQodmFsaWduKSwgdmFsaWduKSk7XG4gIHZhciBjb250ZW50Q2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRhYmxlQ2VsbENvbnRlbnQnLCBjbGFzc05hbWUsIHtcbiAgICAnZXVpVGFibGVDZWxsQ29udGVudC0tYWxpZ25SaWdodCc6IGFsaWduID09PSBSSUdIVF9BTElHTk1FTlQsXG4gICAgJ2V1aVRhYmxlQ2VsbENvbnRlbnQtLWFsaWduQ2VudGVyJzogYWxpZ24gPT09IENFTlRFUl9BTElHTk1FTlQsXG4gICAgJ2V1aVRhYmxlQ2VsbENvbnRlbnQtLXNob3dPbkhvdmVyJzogc2hvd09uSG92ZXIsXG4gICAgJ2V1aVRhYmxlQ2VsbENvbnRlbnQtLXRydW5jYXRlVGV4dCc6IHRydW5jYXRlVGV4dCxcbiAgICAvLyBXZSdyZSBkb2luZyB0aGlzIHJpZ2FtYXJvbGUgaW5zdGVhZCBvZiBjcmVhdGluZyBgZXVpVGFibGVDZWxsQ29udGVudC0tdGV4dE9ubHlgIGZvciBCV0NcbiAgICAvLyBwdXJwb3NlcyBmb3IgdGhlIHRpbWUtYmVpbmcuXG4gICAgJ2V1aVRhYmxlQ2VsbENvbnRlbnQtLW92ZXJmbG93aW5nQ29udGVudCc6IHRleHRPbmx5ICE9PSB0cnVlXG4gIH0pO1xuICB2YXIgbW9iaWxlQ29udGVudENsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUYWJsZUNlbGxDb250ZW50JywgY2xhc3NOYW1lLCB7XG4gICAgJ2V1aVRhYmxlQ2VsbENvbnRlbnQtLWFsaWduUmlnaHQnOiBtb2JpbGVPcHRpb25zLmFsaWduID09PSBSSUdIVF9BTElHTk1FTlQgfHwgYWxpZ24gPT09IFJJR0hUX0FMSUdOTUVOVCxcbiAgICAnZXVpVGFibGVDZWxsQ29udGVudC0tYWxpZ25DZW50ZXInOiBtb2JpbGVPcHRpb25zLmFsaWduID09PSBDRU5URVJfQUxJR05NRU5UIHx8IGFsaWduID09PSBDRU5URVJfQUxJR05NRU5ULFxuICAgICdldWlUYWJsZUNlbGxDb250ZW50LS1zaG93T25Ib3Zlcic6IChfbW9iaWxlT3B0aW9ucyRzaG93T24gPSBtb2JpbGVPcHRpb25zLnNob3dPbkhvdmVyKSAhPT0gbnVsbCAmJiBfbW9iaWxlT3B0aW9ucyRzaG93T24gIT09IHZvaWQgMCA/IF9tb2JpbGVPcHRpb25zJHNob3dPbiA6IHNob3dPbkhvdmVyLFxuICAgICdldWlUYWJsZUNlbGxDb250ZW50LS10cnVuY2F0ZVRleHQnOiAoX21vYmlsZU9wdGlvbnMkdHJ1bmNhID0gbW9iaWxlT3B0aW9ucy50cnVuY2F0ZVRleHQpICE9PSBudWxsICYmIF9tb2JpbGVPcHRpb25zJHRydW5jYSAhPT0gdm9pZCAwID8gX21vYmlsZU9wdGlvbnMkdHJ1bmNhIDogdHJ1bmNhdGVUZXh0LFxuICAgIC8vIFdlJ3JlIGRvaW5nIHRoaXMgcmlnYW1hcm9sZSBpbnN0ZWFkIG9mIGNyZWF0aW5nIGBldWlUYWJsZUNlbGxDb250ZW50LS10ZXh0T25seWAgZm9yIEJXQ1xuICAgIC8vIHB1cnBvc2VzIGZvciB0aGUgdGltZS1iZWluZy5cbiAgICAnZXVpVGFibGVDZWxsQ29udGVudC0tb3ZlcmZsb3dpbmdDb250ZW50JzogbW9iaWxlT3B0aW9ucy50ZXh0T25seSAhPT0gdHJ1ZSB8fCB0ZXh0T25seSAhPT0gdHJ1ZVxuICB9KTtcbiAgdmFyIGNoaWxkQ2xhc3NlcyA9IGNsYXNzTmFtZXMoe1xuICAgIGV1aVRhYmxlQ2VsbENvbnRlbnRfX3RleHQ6IHRleHRPbmx5ID09PSB0cnVlLFxuICAgIGV1aVRhYmxlQ2VsbENvbnRlbnRfX2hvdmVySXRlbTogc2hvd09uSG92ZXJcbiAgfSk7XG4gIHZhciB3aWR0aFZhbHVlID0gdXNlSXNXaXRoaW5CcmVha3BvaW50cyhbJ3hzJywgJ3MnXSkgJiYgbW9iaWxlT3B0aW9ucy53aWR0aCA/IG1vYmlsZU9wdGlvbnMud2lkdGggOiB3aWR0aDtcbiAgdmFyIHN0eWxlT2JqID0gcmVzb2x2ZVdpZHRoQXNTdHlsZShzdHlsZSwgd2lkdGhWYWx1ZSk7XG5cbiAgZnVuY3Rpb24gbW9kaWZ5Q2hpbGRyZW4oY2hpbGRyZW4pIHtcbiAgICB2YXIgbW9kaWZpZWRDaGlsZHJlbiA9IGNoaWxkcmVuO1xuXG4gICAgaWYgKHRleHRPbmx5ID09PSB0cnVlKSB7XG4gICAgICBtb2RpZmllZENoaWxkcmVuID0gX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgICAgICBjbGFzc05hbWU6IGNoaWxkQ2xhc3Nlc1xuICAgICAgfSwgY2hpbGRyZW4pO1xuICAgIH0gZWxzZSBpZiAoIC8qI19fUFVSRV9fKi9SZWFjdC5pc1ZhbGlkRWxlbWVudChjaGlsZHJlbikpIHtcbiAgICAgIG1vZGlmaWVkQ2hpbGRyZW4gPSBSZWFjdC5DaGlsZHJlbi5tYXAoY2hpbGRyZW4sIGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNsb25lRWxlbWVudChjaGlsZCwge1xuICAgICAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lcyhjaGlsZC5wcm9wcy5jbGFzc05hbWUsIGNoaWxkQ2xhc3NlcylcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbW9kaWZpZWRDaGlsZHJlbjtcbiAgfVxuXG4gIHZhciBjaGlsZHJlbk5vZGUgPSBtb2RpZnlDaGlsZHJlbihjaGlsZHJlbik7XG4gIHZhciBoaWRlRm9yTW9iaWxlQ2xhc3NlcyA9ICdldWlUYWJsZVJvd0NlbGwtLWhpZGVGb3JNb2JpbGUnO1xuICB2YXIgc2hvd0Zvck1vYmlsZUNsYXNzZXMgPSAnZXVpVGFibGVSb3dDZWxsLS1oaWRlRm9yRGVza3RvcCc7XG4gIHZhciBFbGVtZW50ID0gc2V0U2NvcGVSb3cgPyAndGgnIDogJ3RkJztcblxuICB2YXIgc2hhcmVkUHJvcHMgPSBfb2JqZWN0U3ByZWFkKHtcbiAgICBzY29wZTogc2V0U2NvcGVSb3cgPyAncm93JyA6IHVuZGVmaW5lZCxcbiAgICBzdHlsZTogc3R5bGVPYmpcbiAgfSwgcmVzdCk7XG5cbiAgaWYgKG1vYmlsZU9wdGlvbnMuc2hvdyA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFbGVtZW50LCBfZXh0ZW5kcyh7XG4gICAgICBjbGFzc05hbWU6IFwiXCIuY29uY2F0KGNlbGxDbGFzc2VzLCBcIiBcIikuY29uY2F0KGhpZGVGb3JNb2JpbGVDbGFzc2VzKVxuICAgIH0sIHNoYXJlZFByb3BzKSwgX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICBjbGFzc05hbWU6IGNvbnRlbnRDbGFzc2VzXG4gICAgfSwgY2hpbGRyZW5Ob2RlKSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRWxlbWVudCwgX2V4dGVuZHMoe1xuICAgICAgY2xhc3NOYW1lOiBjZWxsQ2xhc3Nlc1xuICAgIH0sIHNoYXJlZFByb3BzKSwgbW9iaWxlT3B0aW9ucy5oZWFkZXIgJiYgX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICBjbGFzc05hbWU6IFwiZXVpVGFibGVSb3dDZWxsX19tb2JpbGVIZWFkZXIgXCIuY29uY2F0KHNob3dGb3JNb2JpbGVDbGFzc2VzKVxuICAgIH0sIG1vYmlsZU9wdGlvbnMuaGVhZGVyKSwgbW9iaWxlT3B0aW9ucy5yZW5kZXIgPyBfX19FbW90aW9uSlNYKEZyYWdtZW50LCBudWxsLCBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgIGNsYXNzTmFtZTogXCJcIi5jb25jYXQobW9iaWxlQ29udGVudENsYXNzZXMsIFwiIFwiKS5jb25jYXQoc2hvd0Zvck1vYmlsZUNsYXNzZXMpXG4gICAgfSwgbW9kaWZ5Q2hpbGRyZW4obW9iaWxlT3B0aW9ucy5yZW5kZXIpKSwgX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICBjbGFzc05hbWU6IFwiXCIuY29uY2F0KGNvbnRlbnRDbGFzc2VzLCBcIiBcIikuY29uY2F0KGhpZGVGb3JNb2JpbGVDbGFzc2VzKVxuICAgIH0sIGNoaWxkcmVuTm9kZSkpIDogX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICBjbGFzc05hbWU6IGNvbnRlbnRDbGFzc2VzXG4gICAgfSwgY2hpbGRyZW5Ob2RlKSk7XG4gIH1cbn07XG5FdWlUYWJsZVJvd0NlbGwucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogVmVydGljYWwgYWxpZ25tZW50IG9mIHRoZSBjb250ZW50IGluIHRoZSBjZWxsXG4gICAgICovXG4gIHZhbGlnbjogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgY2VsbCBzaG91bGQgYmUgbWFya2VkIGFzIHRoZSBoZWFkaW5nIGZvciBpdHMgcm93XG4gICAgICovXG4gIHNldFNjb3BlUm93OiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIGNvbHVtbiBpcyBkZWRpY2F0ZWQgdG8gaWNvbi1vbmx5IGFjdGlvbnMgKGN1cnJlbnRseVxuICAgICAqIGFmZmVjdHMgbW9iaWxlIG9ubHkpXG4gICAgICovXG4gIGhhc0FjdGlvbnM6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIEluZGljYXRlcyBpZiB0aGUgY29sdW1uIGlzIGRlZGljYXRlZCBhcyB0aGUgZXhwYW5kYWJsZSByb3cgdG9nZ2xlXG4gICAgICovXG4gIGlzRXhwYW5kZXI6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIE1vYmlsZSBvcHRpb25zIGZvciBkaXNwbGF5aW5nIGRpZmZlcmVudGx5IGF0IHNtYWxsIHNjcmVlbnM7XG4gICAgICogU2VlICNFdWlUYWJsZVJvd0NlbGxNb2JpbGVPcHRpb25zU2hhcGVcbiAgICAgKi9cbiAgbW9iaWxlT3B0aW9uczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAvKipcbiAgICAgICAqIElmIGZhbHNlLCB3aWxsIG5vdCByZW5kZXIgdGhlIGNlbGwgYXQgYWxsIGZvciBtb2JpbGVcbiAgICAgICAqL1xuICAgIHNob3c6IFByb3BUeXBlcy5ib29sLFxuXG4gICAgLyoqXG4gICAgICAgKiBPbmx5IHNob3cgZm9yIG1vYmlsZT8gSWYgdHJ1ZSwgd2lsbCBub3QgcmVuZGVyIHRoZSBjb2x1bW4gYXQgYWxsIGZvciBkZXNrdG9wXG4gICAgICAgKi9cbiAgICBvbmx5OiBQcm9wVHlwZXMuYm9vbCxcblxuICAgIC8qKlxuICAgICAgICogQ3VzdG9tIHJlbmRlci9jaGlsZHJlbiBpZiBkaWZmZXJlbnQgZnJvbSBkZXNrdG9wXG4gICAgICAgKi9cbiAgICByZW5kZXI6IFByb3BUeXBlcy5ub2RlLFxuXG4gICAgLyoqXG4gICAgICAgKiBUaGUgY29sdW1uJ3MgaGVhZGVyIGZvciB1c2UgaW4gbW9iaWxlIHZpZXcgKGF1dG9tYXRpY2FsbHkgcGFzc2VkIGRvd25cbiAgICAgICAqIHdoZW4gdXNpbmcgYEV1aUJhc2ljVGFibGVgKS5cbiAgICAgICAqIE9yIHBhc3MgYGZhbHNlYCB0byBub3Qgc2hvdyBhIGhlYWRlciBhdCBhbGwuXG4gICAgICAgKi9cbiAgICBoZWFkZXI6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWRdKSxcblxuICAgIC8qKlxuICAgICAgICogSW5jcmVhc2UgdGV4dCBzaXplIGNvbXBhcmVkIHRvIHJlc3Qgb2YgY2VsbHNcbiAgICAgICAqL1xuICAgIGVubGFyZ2U6IFByb3BUeXBlcy5ib29sLFxuXG4gICAgLyoqXG4gICAgICAgKiBBcHBsaWVzIHRoZSB2YWx1ZSB0byB0aGUgd2lkdGggb2YgdGhlIGNlbGwgaW4gbW9iaWxlIHZpZXcgKHR5cGljYWxseSA1MCUpXG4gICAgICAgKi9cbiAgICB3aWR0aDogUHJvcFR5cGVzLmFueSxcblxuICAgIC8qKlxuICAgICAgICogSG9yaXpvbnRhbCBhbGlnbm1lbnQgb2YgdGhlIHRleHQgaW4gdGhlIGNlbGxcbiAgICAgICAqL1xuICAgIGFsaWduOiBQcm9wVHlwZXMub25lT2YoW1wibGVmdFwiLCBcInJpZ2h0XCIsIFwiY2VudGVyXCJdKSxcblxuICAgIC8qKlxuICAgICAgICogX1Nob3VsZCBvbmx5IGJlIHVzZWQgZm9yIGFjdGlvbiBjZWxsc19cbiAgICAgICAqL1xuICAgIHNob3dPbkhvdmVyOiBQcm9wVHlwZXMuYm9vbCxcblxuICAgIC8qKlxuICAgICAgICogU2V0dGluZyBgdGV4dE9ubHlgIHRvIGBmYWxzZWAgd2lsbCBicmVhayB3b3JkcyB1bm5lY2Vzc2FyaWx5IG9uIEZGIGFuZFxuICAgICAgICogSUUuICBUbyBjb21iYXQgdGhpcyBwcm9ibGVtIG9uIEZGLCB3cmFwIGNvbnRlbnRzIHdpdGggdGhlIGNzcyB1dGlsaXR5XG4gICAgICAgKiBgLmV1aS10ZXh0QnJlYWtXb3JkYC5cbiAgICAgICAqL1xuICAgIHRleHRPbmx5OiBQcm9wVHlwZXMuYm9vbCxcblxuICAgIC8qKlxuICAgICAgICogRG9uJ3QgYWxsb3cgbGluZSBicmVha3Mgd2l0aGluIGNlbGxzXG4gICAgICAgKi9cbiAgICB0cnVuY2F0ZVRleHQ6IFByb3BUeXBlcy5ib29sXG4gIH0pLFxuXG4gIC8qKlxuICAgICAqIEhvcml6b250YWwgYWxpZ25tZW50IG9mIHRoZSB0ZXh0IGluIHRoZSBjZWxsXG4gICAgICovXG4gIGFsaWduOiBQcm9wVHlwZXMub25lT2YoW1wibGVmdFwiLCBcInJpZ2h0XCIsIFwiY2VudGVyXCJdKSxcblxuICAvKipcbiAgICAgKiBfU2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgYWN0aW9uIGNlbGxzX1xuICAgICAqL1xuICBzaG93T25Ib3ZlcjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogU2V0dGluZyBgdGV4dE9ubHlgIHRvIGBmYWxzZWAgd2lsbCBicmVhayB3b3JkcyB1bm5lY2Vzc2FyaWx5IG9uIEZGIGFuZFxuICAgICAqIElFLiAgVG8gY29tYmF0IHRoaXMgcHJvYmxlbSBvbiBGRiwgd3JhcCBjb250ZW50cyB3aXRoIHRoZSBjc3MgdXRpbGl0eVxuICAgICAqIGAuZXVpLXRleHRCcmVha1dvcmRgLlxuICAgICAqL1xuICB0ZXh0T25seTogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogRG9uJ3QgYWxsb3cgbGluZSBicmVha3Mgd2l0aGluIGNlbGxzXG4gICAgICovXG4gIHRydW5jYXRlVGV4dDogUHJvcFR5cGVzLmJvb2wsXG4gIHdpZHRoOiBQcm9wVHlwZXMuYW55XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlUYWJsZVJvd0NlbGxDaGVja2JveCA9IGZ1bmN0aW9uIEV1aVRhYmxlUm93Q2VsbENoZWNrYm94KF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpVGFibGVSb3dDZWxsQ2hlY2tib3gnLCBjbGFzc05hbWUpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInRkXCIsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlUYWJsZUNlbGxDb250ZW50XCJcbiAgfSwgY2hpbGRyZW4pKTtcbn07XG5FdWlUYWJsZVJvd0NlbGxDaGVja2JveC5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZ1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG52YXIgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwibG9hZGluZ1wiLCBcIml0ZW1zXCIsIFwiaXRlbUlkXCIsIFwiY29sdW1uc1wiLCBcInBhZ2luYXRpb25cIiwgXCJzb3J0aW5nXCIsIFwic2VsZWN0aW9uXCIsIFwib25DaGFuZ2VcIiwgXCJlcnJvclwiLCBcIm5vSXRlbXNNZXNzYWdlXCIsIFwiY29tcHJlc3NlZFwiLCBcIml0ZW1JZFRvRXhwYW5kZWRSb3dNYXBcIiwgXCJyZXNwb25zaXZlXCIsIFwiaXNTZWxlY3RhYmxlXCIsIFwiaXNFeHBhbmRhYmxlXCIsIFwiaGFzQWN0aW9uc1wiLCBcInJvd1Byb3BzXCIsIFwiY2VsbFByb3BzXCIsIFwidGFibGVDYXB0aW9uXCIsIFwicm93SGVhZGVyXCIsIFwidGFibGVMYXlvdXRcIl0sXG4gICAgX2V4Y2x1ZGVkMiA9IFtcImFsaWduXCIsIFwicmVuZGVyXCIsIFwiZGF0YVR5cGVcIiwgXCJpc0V4cGFuZGVyXCIsIFwidGV4dE9ubHlcIiwgXCJuYW1lXCIsIFwiZmllbGRcIiwgXCJkZXNjcmlwdGlvblwiLCBcInNvcnRhYmxlXCIsIFwiZm9vdGVyXCIsIFwibW9iaWxlT3B0aW9uc1wiXTtcblxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikgeyByZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF9ub25JdGVyYWJsZVNwcmVhZCgpOyB9XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkoaXRlcikgeyBpZiAodHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBpdGVyW1N5bWJvbC5pdGVyYXRvcl0gIT0gbnVsbCB8fCBpdGVyW1wiQEBpdGVyYXRvclwiXSAhPSBudWxsKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShhcnIpOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCwgRnJhZ21lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGZvcm1hdEF1dG8sIGZvcm1hdEJvb2xlYW4sIGZvcm1hdERhdGUsIGZvcm1hdE51bWJlciwgZm9ybWF0VGV4dCwgTEVGVF9BTElHTk1FTlQsIFJJR0hUX0FMSUdOTUVOVCwgU29ydERpcmVjdGlvbiB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wcmVkaWNhdGUnO1xuaW1wb3J0IHsgZ2V0IH0gZnJvbSAnLi4vLi4vc2VydmljZXMvb2JqZWN0cyc7XG5pbXBvcnQgeyBFdWlGbGV4R3JvdXAsIEV1aUZsZXhJdGVtIH0gZnJvbSAnLi4vZmxleCc7XG5pbXBvcnQgeyBFdWlDaGVja2JveCB9IGZyb20gJy4uL2Zvcm0nO1xuaW1wb3J0IHsgRXVpVGFibGUsIEV1aVRhYmxlQm9keSwgRXVpVGFibGVGb290ZXIsIEV1aVRhYmxlRm9vdGVyQ2VsbCwgRXVpVGFibGVIZWFkZXIsIEV1aVRhYmxlSGVhZGVyQ2VsbCwgRXVpVGFibGVIZWFkZXJDZWxsQ2hlY2tib3gsIEV1aVRhYmxlSGVhZGVyTW9iaWxlLCBFdWlUYWJsZVJvdywgRXVpVGFibGVSb3dDZWxsLCBFdWlUYWJsZVJvd0NlbGxDaGVja2JveCwgRXVpVGFibGVTb3J0TW9iaWxlIH0gZnJvbSAnLi4vdGFibGUnO1xuaW1wb3J0IHsgQ29sbGFwc2VkSXRlbUFjdGlvbnMgfSBmcm9tICcuL2NvbGxhcHNlZF9pdGVtX2FjdGlvbnMnO1xuaW1wb3J0IHsgRXhwYW5kZWRJdGVtQWN0aW9ucyB9IGZyb20gJy4vZXhwYW5kZWRfaXRlbV9hY3Rpb25zJztcbmltcG9ydCB7IFBhZ2luYXRpb25CYXIgfSBmcm9tICcuL3BhZ2luYXRpb25fYmFyJztcbmltcG9ydCB7IEV1aUljb24gfSBmcm9tICcuLi9pY29uJztcbmltcG9ydCB7IEV1aVNjcmVlblJlYWRlck9ubHkgfSBmcm9tICcuLi9hY2Nlc3NpYmlsaXR5JztcbmltcG9ydCB7IEV1aUkxOG4gfSBmcm9tICcuLi9pMThuJztcbmltcG9ydCB7IEV1aURlbGF5UmVuZGVyIH0gZnJvbSAnLi4vZGVsYXlfcmVuZGVyJztcbmltcG9ydCB7IGh0bWxJZEdlbmVyYXRvciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FjY2Vzc2liaWxpdHknO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBkYXRhVHlwZXNQcm9maWxlcyA9IHtcbiAgYXV0bzoge1xuICAgIGFsaWduOiBMRUZUX0FMSUdOTUVOVCxcbiAgICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcih2YWx1ZSkge1xuICAgICAgcmV0dXJuIGZvcm1hdEF1dG8odmFsdWUpO1xuICAgIH1cbiAgfSxcbiAgc3RyaW5nOiB7XG4gICAgYWxpZ246IExFRlRfQUxJR05NRU5ULFxuICAgIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKHZhbHVlKSB7XG4gICAgICByZXR1cm4gZm9ybWF0VGV4dCh2YWx1ZSk7XG4gICAgfVxuICB9LFxuICBudW1iZXI6IHtcbiAgICBhbGlnbjogUklHSFRfQUxJR05NRU5ULFxuICAgIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKHZhbHVlKSB7XG4gICAgICByZXR1cm4gZm9ybWF0TnVtYmVyKHZhbHVlKTtcbiAgICB9XG4gIH0sXG4gIGJvb2xlYW46IHtcbiAgICBhbGlnbjogTEVGVF9BTElHTk1FTlQsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIodmFsdWUpIHtcbiAgICAgIHJldHVybiBmb3JtYXRCb29sZWFuKHZhbHVlKTtcbiAgICB9XG4gIH0sXG4gIGRhdGU6IHtcbiAgICBhbGlnbjogTEVGVF9BTElHTk1FTlQsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIodmFsdWUpIHtcbiAgICAgIHJldHVybiBmb3JtYXREYXRlKHZhbHVlKTtcbiAgICB9XG4gIH1cbn07XG52YXIgREFUQV9UWVBFUyA9IE9iamVjdC5rZXlzKGRhdGFUeXBlc1Byb2ZpbGVzKTtcbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtSWQoaXRlbSwgaXRlbUlkKSB7XG4gIGlmIChpdGVtSWQpIHtcbiAgICBpZiAoaXNGdW5jdGlvbihpdGVtSWQpKSB7XG4gICAgICByZXR1cm4gaXRlbUlkKGl0ZW0pO1xuICAgIH0gLy8gQHRzLWlnbm9yZSBuZXZlciBtaW5kIGFib3V0IHRoZSBpbmRleCBzaWduYXR1cmVcblxuXG4gICAgcmV0dXJuIGl0ZW1baXRlbUlkXTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRSb3dQcm9wcyhpdGVtLCByb3dQcm9wcykge1xuICBpZiAocm93UHJvcHMpIHtcbiAgICBpZiAoaXNGdW5jdGlvbihyb3dQcm9wcykpIHtcbiAgICAgIHJldHVybiByb3dQcm9wcyhpdGVtKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcm93UHJvcHM7XG4gIH1cblxuICByZXR1cm4ge307XG59XG5cbmZ1bmN0aW9uIGdldENlbGxQcm9wcyhpdGVtLCBjb2x1bW4sIGNlbGxQcm9wcykge1xuICBpZiAoY2VsbFByb3BzKSB7XG4gICAgaWYgKGlzRnVuY3Rpb24oY2VsbFByb3BzKSkge1xuICAgICAgcmV0dXJuIGNlbGxQcm9wcyhpdGVtLCBjb2x1bW4pO1xuICAgIH1cblxuICAgIHJldHVybiBjZWxsUHJvcHM7XG4gIH1cblxuICByZXR1cm4ge307XG59XG5cbmZ1bmN0aW9uIGdldENvbHVtbkZvb3Rlcihjb2x1bW4sIF9yZWYpIHtcbiAgdmFyIGl0ZW1zID0gX3JlZi5pdGVtcyxcbiAgICAgIHBhZ2luYXRpb24gPSBfcmVmLnBhZ2luYXRpb247XG4gIHZhciBfcmVmMiA9IGNvbHVtbixcbiAgICAgIGZvb3RlciA9IF9yZWYyLmZvb3RlcjtcblxuICBpZiAoZm9vdGVyKSB7XG4gICAgaWYgKGlzRnVuY3Rpb24oZm9vdGVyKSkge1xuICAgICAgcmV0dXJuIGZvb3Rlcih7XG4gICAgICAgIGl0ZW1zOiBpdGVtcyxcbiAgICAgICAgcGFnaW5hdGlvbjogcGFnaW5hdGlvblxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvb3RlcjtcbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGhhc1BhZ2luYXRpb24oeCkge1xuICByZXR1cm4geC5oYXNPd25Qcm9wZXJ0eSgncGFnaW5hdGlvbicpICYmICEheC5wYWdpbmF0aW9uO1xufVxuXG5leHBvcnQgdmFyIEV1aUJhc2ljVGFibGUgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEV1aUJhc2ljVGFibGUsIF9Db21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoRXVpQmFzaWNUYWJsZSk7XG5cbiAgZnVuY3Rpb24gRXVpQmFzaWNUYWJsZShwcm9wcykge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlCYXNpY1RhYmxlKTtcblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgcHJvcHMpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImNsZWFudXBzXCIsIFtdKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJ0Ym9keVwiLCBudWxsKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzZXRUYm9keVwiLCBmdW5jdGlvbiAodGJvZHkpIHtcbiAgICAgIC8vIHJlbW92ZSBsaXN0ZW5lcnMgZnJvbSBhbiBleGlzdGluZyBlbGVtZW50XG4gICAgICBfdGhpcy5yZW1vdmVMb2FkaW5nTGlzdGVuZXJzKCk7IC8vIHVwZGF0ZSB0aGUgcmVmXG5cblxuICAgICAgX3RoaXMudGJvZHkgPSB0Ym9keTsgLy8gaWYgbG9hZGluZywgYWRkIGxpc3RlbmVyc1xuXG4gICAgICBpZiAoX3RoaXMucHJvcHMubG9hZGluZyA9PT0gdHJ1ZSAmJiB0Ym9keSkge1xuICAgICAgICBfdGhpcy5hZGRMb2FkaW5nTGlzdGVuZXJzKHRib2R5KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJhZGRMb2FkaW5nTGlzdGVuZXJzXCIsIGZ1bmN0aW9uICh0Ym9keSkge1xuICAgICAgdmFyIGxpc3RlbmVyID0gZnVuY3Rpb24gbGlzdGVuZXIoZXZlbnQpIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9O1xuXG4gICAgICBbJ21vdXNlZG93bicsICdtb3VzZXVwJywgJ21vdXNlb3ZlcicsICdtb3VzZW91dCcsICdtb3VzZWVudGVyJywgJ21vdXNlbGVhdmUnLCAnY2xpY2snLCAnZGJsY2xpY2snLCAna2V5ZG93bicsICdrZXl1cCcsICdrZXlwcmVzcyddLmZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHRib2R5LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVyLCB0cnVlKTtcblxuICAgICAgICBfdGhpcy5jbGVhbnVwcy5wdXNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB0Ym9keS5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50LCBsaXN0ZW5lciwgdHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicmVtb3ZlTG9hZGluZ0xpc3RlbmVyc1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5jbGVhbnVwcy5mb3JFYWNoKGZ1bmN0aW9uIChjbGVhbnVwKSB7XG4gICAgICAgIHJldHVybiBjbGVhbnVwKCk7XG4gICAgICB9KTtcblxuICAgICAgX3RoaXMuY2xlYW51cHMubGVuZ3RoID0gMDtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJ0YWJsZUlkXCIsIGh0bWxJZEdlbmVyYXRvcignX190YWJsZScpKCkpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInNlbGVjdEFsbElkR2VuZXJhdG9yXCIsIGh0bWxJZEdlbmVyYXRvcignX3NlbGVjdGlvbl9jb2x1bW4tY2hlY2tib3gnKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicmVuZGVyU2VsZWN0QWxsXCIsIGZ1bmN0aW9uIChpc01vYmlsZSkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgaXRlbXMgPSBfdGhpcyRwcm9wcy5pdGVtcyxcbiAgICAgICAgICBzZWxlY3Rpb24gPSBfdGhpcyRwcm9wcy5zZWxlY3Rpb247XG5cbiAgICAgIGlmICghc2VsZWN0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIHNlbGVjdGFibGVJdGVtcyA9IGl0ZW1zLmZpbHRlcihmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICByZXR1cm4gIXNlbGVjdGlvbi5zZWxlY3RhYmxlIHx8IHNlbGVjdGlvbi5zZWxlY3RhYmxlKGl0ZW0pO1xuICAgICAgfSk7XG4gICAgICB2YXIgY2hlY2tlZCA9IF90aGlzLnN0YXRlLnNlbGVjdGlvbiAmJiBzZWxlY3RhYmxlSXRlbXMubGVuZ3RoID4gMCAmJiBfdGhpcy5zdGF0ZS5zZWxlY3Rpb24ubGVuZ3RoID09PSBzZWxlY3RhYmxlSXRlbXMubGVuZ3RoO1xuICAgICAgdmFyIGRpc2FibGVkID0gc2VsZWN0YWJsZUl0ZW1zLmxlbmd0aCA9PT0gMDtcblxuICAgICAgdmFyIG9uQ2hhbmdlID0gZnVuY3Rpb24gb25DaGFuZ2UoZXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50LnRhcmdldC5jaGVja2VkKSB7XG4gICAgICAgICAgX3RoaXMuY2hhbmdlU2VsZWN0aW9uKHNlbGVjdGFibGVJdGVtcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgX3RoaXMuY2hhbmdlU2VsZWN0aW9uKFtdKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICB0b2tlbjogXCJldWlCYXNpY1RhYmxlLnNlbGVjdEFsbFJvd3NcIixcbiAgICAgICAgZGVmYXVsdDogXCJTZWxlY3QgYWxsIHJvd3NcIlxuICAgICAgfSwgZnVuY3Rpb24gKHNlbGVjdEFsbFJvd3MpIHtcbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpQ2hlY2tib3gsIHtcbiAgICAgICAgICBpZDogX3RoaXMuc2VsZWN0QWxsSWRHZW5lcmF0b3IoaXNNb2JpbGUgPyAnbW9iaWxlJyA6ICdkZXNrdG9wJyksXG4gICAgICAgICAgdHlwZTogaXNNb2JpbGUgPyB1bmRlZmluZWQgOiAnaW5MaXN0JyxcbiAgICAgICAgICBjaGVja2VkOiBjaGVja2VkLFxuICAgICAgICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICAgICAgICBvbkNoYW5nZTogb25DaGFuZ2UgLy8gT25seSBhZGQgZGF0YS10ZXN0LXN1YmogdG8gb25lIG9mIHRoZSBjaGVja2JveGVzXG4gICAgICAgICAgLFxuICAgICAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogaXNNb2JpbGUgPyB1bmRlZmluZWQgOiAnY2hlY2tib3hTZWxlY3RBbGwnLFxuICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBzZWxlY3RBbGxSb3dzLFxuICAgICAgICAgIGxhYmVsOiBpc01vYmlsZSA/IHNlbGVjdEFsbFJvd3MgOiBudWxsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicmVzb2x2ZUNvbHVtblNvcnREaXJlY3Rpb25cIiwgZnVuY3Rpb24gKGNvbHVtbikge1xuICAgICAgdmFyIHNvcnRpbmcgPSBfdGhpcy5wcm9wcy5zb3J0aW5nO1xuICAgICAgdmFyIF9yZWYzID0gY29sdW1uLFxuICAgICAgICAgIHNvcnRhYmxlID0gX3JlZjMuc29ydGFibGUsXG4gICAgICAgICAgZmllbGQgPSBfcmVmMy5maWVsZCxcbiAgICAgICAgICBuYW1lID0gX3JlZjMubmFtZTtcblxuICAgICAgaWYgKCFzb3J0aW5nIHx8ICFzb3J0aW5nLnNvcnQgfHwgIXNvcnRhYmxlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHNvcnRpbmcuc29ydC5maWVsZCA9PT0gZmllbGQgfHwgc29ydGluZy5zb3J0LmZpZWxkID09PSBuYW1lKSB7XG4gICAgICAgIHJldHVybiBzb3J0aW5nLnNvcnQuZGlyZWN0aW9uO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInJlc29sdmVDb2x1bW5PblNvcnRcIiwgZnVuY3Rpb24gKGNvbHVtbikge1xuICAgICAgdmFyIHNvcnRpbmcgPSBfdGhpcy5wcm9wcy5zb3J0aW5nO1xuICAgICAgdmFyIF9yZWY0ID0gY29sdW1uLFxuICAgICAgICAgIHNvcnRhYmxlID0gX3JlZjQuc29ydGFibGUsXG4gICAgICAgICAgbmFtZSA9IF9yZWY0Lm5hbWU7XG5cbiAgICAgIGlmICghc29ydGluZyB8fCAhc29ydGFibGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIV90aGlzLnByb3BzLm9uQ2hhbmdlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkJhc2ljVGFibGUgaXMgY29uZmlndXJlZCB0byBiZSBzb3J0YWJsZSBvbiBjb2x1bW4gW1wiLmNvbmNhdChuYW1lLCBcIl0gYnV0XFxuICAgICAgICAgIFtvbkNoYW5nZV0gaXMgbm90IGNvbmZpZ3VyZWQuIFRoaXMgY2FsbGJhY2sgbXVzdCBiZSBpbXBsZW1lbnRlZCB0byBoYW5kbGUgdGhlIHNvcnQgcmVxdWVzdHNcIikpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX3RoaXMub25Db2x1bW5Tb3J0Q2hhbmdlKGNvbHVtbik7XG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICAvLyB1c2VkIGZvciBjaGVja2luZyBpZiAgaW5pdGlhbCBzZWxlY3Rpb24gaXMgcmVuZGVyZWRcbiAgICAgIGluaXRpYWxTZWxlY3Rpb25SZW5kZXJlZDogZmFsc2UsXG4gICAgICBzZWxlY3Rpb246IFtdXG4gICAgfTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoRXVpQmFzaWNUYWJsZSwgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICBpZiAodGhpcy5wcm9wcy5sb2FkaW5nICYmIHRoaXMudGJvZHkpIHRoaXMuYWRkTG9hZGluZ0xpc3RlbmVycyh0aGlzLnRib2R5KTtcbiAgICAgIHRoaXMuZ2V0SW5pdGlhbFNlbGVjdGlvbigpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnREaWRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcykge1xuICAgICAgaWYgKHByZXZQcm9wcy5sb2FkaW5nICE9PSB0aGlzLnByb3BzLmxvYWRpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMubG9hZGluZyAmJiB0aGlzLnRib2R5KSB7XG4gICAgICAgICAgdGhpcy5hZGRMb2FkaW5nTGlzdGVuZXJzKHRoaXMudGJvZHkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucmVtb3ZlTG9hZGluZ0xpc3RlbmVycygpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZ2V0SW5pdGlhbFNlbGVjdGlvbigpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIHRoaXMucmVtb3ZlTG9hZGluZ0xpc3RlbmVycygpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRJbml0aWFsU2VsZWN0aW9uXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldEluaXRpYWxTZWxlY3Rpb24oKSB7XG4gICAgICBpZiAodGhpcy5wcm9wcy5zZWxlY3Rpb24gJiYgdGhpcy5wcm9wcy5zZWxlY3Rpb24uaW5pdGlhbFNlbGVjdGVkICYmICF0aGlzLnN0YXRlLmluaXRpYWxTZWxlY3Rpb25SZW5kZXJlZCAmJiB0aGlzLnByb3BzLml0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgc2VsZWN0aW9uOiB0aGlzLnByb3BzLnNlbGVjdGlvbi5pbml0aWFsU2VsZWN0ZWRcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGluaXRpYWxTZWxlY3Rpb25SZW5kZXJlZDogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic2V0U2VsZWN0aW9uXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24pIHtcbiAgICAgIHRoaXMuY2hhbmdlU2VsZWN0aW9uKG5ld1NlbGVjdGlvbik7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImJ1aWxkQ3JpdGVyaWFcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gYnVpbGRDcml0ZXJpYShwcm9wcykge1xuICAgICAgdmFyIGNyaXRlcmlhID0ge307XG5cbiAgICAgIGlmIChoYXNQYWdpbmF0aW9uKHByb3BzKSkge1xuICAgICAgICBjcml0ZXJpYS5wYWdlID0ge1xuICAgICAgICAgIGluZGV4OiBwcm9wcy5wYWdpbmF0aW9uLnBhZ2VJbmRleCxcbiAgICAgICAgICBzaXplOiBwcm9wcy5wYWdpbmF0aW9uLnBhZ2VTaXplXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9wcy5zb3J0aW5nKSB7XG4gICAgICAgIGNyaXRlcmlhLnNvcnQgPSBwcm9wcy5zb3J0aW5nLnNvcnQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjcml0ZXJpYTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY2hhbmdlU2VsZWN0aW9uXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNoYW5nZVNlbGVjdGlvbihzZWxlY3Rpb24pIHtcbiAgICAgIGlmICghdGhpcy5wcm9wcy5zZWxlY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgc2VsZWN0aW9uOiBzZWxlY3Rpb25cbiAgICAgIH0pO1xuXG4gICAgICBpZiAodGhpcy5wcm9wcy5zZWxlY3Rpb24ub25TZWxlY3Rpb25DaGFuZ2UpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5zZWxlY3Rpb24ub25TZWxlY3Rpb25DaGFuZ2Uoc2VsZWN0aW9uKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY2xlYXJTZWxlY3Rpb25cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY2xlYXJTZWxlY3Rpb24oKSB7XG4gICAgICB0aGlzLmNoYW5nZVNlbGVjdGlvbihbXSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIm9uUGFnZVNpemVDaGFuZ2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gb25QYWdlU2l6ZUNoYW5nZShzaXplKSB7XG4gICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICB2YXIgY3VycmVudENyaXRlcmlhID0gdGhpcy5idWlsZENyaXRlcmlhKHRoaXMucHJvcHMpO1xuXG4gICAgICB2YXIgY3JpdGVyaWEgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGN1cnJlbnRDcml0ZXJpYSksIHt9LCB7XG4gICAgICAgIHBhZ2U6IHtcbiAgICAgICAgICBpbmRleDogMCxcbiAgICAgICAgICAvLyB3aGVuIHBhZ2Ugc2l6ZSBjaGFuZ2VzLCB3ZSB0YWtlIHRoZSB1c2VyIGJhY2sgdG8gdGhlIGZpcnN0IHBhZ2VcbiAgICAgICAgICBzaXplOiBzaXplXG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAodGhpcy5wcm9wcy5vbkNoYW5nZSkge1xuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGNyaXRlcmlhKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwib25QYWdlQ2hhbmdlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uUGFnZUNoYW5nZShpbmRleCkge1xuICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpO1xuICAgICAgdmFyIGN1cnJlbnRDcml0ZXJpYSA9IHRoaXMuYnVpbGRDcml0ZXJpYSh0aGlzLnByb3BzKTtcblxuICAgICAgdmFyIGNyaXRlcmlhID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBjdXJyZW50Q3JpdGVyaWEpLCB7fSwge1xuICAgICAgICBwYWdlOiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGN1cnJlbnRDcml0ZXJpYS5wYWdlKSwge30sIHtcbiAgICAgICAgICBpbmRleDogaW5kZXhcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuXG4gICAgICBpZiAodGhpcy5wcm9wcy5vbkNoYW5nZSkge1xuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGNyaXRlcmlhKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwib25Db2x1bW5Tb3J0Q2hhbmdlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uQ29sdW1uU29ydENoYW5nZShjb2x1bW4pIHtcbiAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgIHZhciBjdXJyZW50Q3JpdGVyaWEgPSB0aGlzLmJ1aWxkQ3JpdGVyaWEodGhpcy5wcm9wcyk7XG4gICAgICB2YXIgZGlyZWN0aW9uID0gU29ydERpcmVjdGlvbi5BU0M7XG5cbiAgICAgIGlmIChjdXJyZW50Q3JpdGVyaWEgJiYgY3VycmVudENyaXRlcmlhLnNvcnQgJiYgKGN1cnJlbnRDcml0ZXJpYS5zb3J0LmZpZWxkID09PSBjb2x1bW4uZmllbGQgfHwgY3VycmVudENyaXRlcmlhLnNvcnQuZmllbGQgPT09IGNvbHVtbi5uYW1lKSkge1xuICAgICAgICBkaXJlY3Rpb24gPSBTb3J0RGlyZWN0aW9uLnJldmVyc2UoY3VycmVudENyaXRlcmlhLnNvcnQuZGlyZWN0aW9uKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGNyaXRlcmlhID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBjdXJyZW50Q3JpdGVyaWEpLCB7fSwge1xuICAgICAgICAvLyByZXNldHRpbmcgdGhlIHBhZ2UgaWYgdGhlIGNyaXRlcmlhIGhhcyBvbmVcbiAgICAgICAgcGFnZTogIWN1cnJlbnRDcml0ZXJpYS5wYWdlID8gdW5kZWZpbmVkIDoge1xuICAgICAgICAgIGluZGV4OiAwLFxuICAgICAgICAgIHNpemU6IGN1cnJlbnRDcml0ZXJpYS5wYWdlLnNpemVcbiAgICAgICAgfSxcbiAgICAgICAgc29ydDoge1xuICAgICAgICAgIGZpZWxkOiBjb2x1bW4uZmllbGQgfHwgY29sdW1uLm5hbWUsXG4gICAgICAgICAgZGlyZWN0aW9uOiBkaXJlY3Rpb25cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmICh0aGlzLnByb3BzLm9uQ2hhbmdlKSB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmUgY29tcGxleCByZWxhdGlvbnNoaXAgYmV0d2VlbiBwYWdpbmF0aW9uJ3MgZXhpc3RlbmNlIGFuZCBjcml0ZXJpYSwgdGhlIGNvZGUgbG9naWMgZW5zdXJlcyB0aGlzIGlzIGNvcnJlY3RseSBtYWludGFpbmVkXG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UoY3JpdGVyaWEpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzMiA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMyLmNsYXNzTmFtZSxcbiAgICAgICAgICBsb2FkaW5nID0gX3RoaXMkcHJvcHMyLmxvYWRpbmcsXG4gICAgICAgICAgaXRlbXMgPSBfdGhpcyRwcm9wczIuaXRlbXMsXG4gICAgICAgICAgaXRlbUlkID0gX3RoaXMkcHJvcHMyLml0ZW1JZCxcbiAgICAgICAgICBjb2x1bW5zID0gX3RoaXMkcHJvcHMyLmNvbHVtbnMsXG4gICAgICAgICAgcGFnaW5hdGlvbiA9IF90aGlzJHByb3BzMi5wYWdpbmF0aW9uLFxuICAgICAgICAgIHNvcnRpbmcgPSBfdGhpcyRwcm9wczIuc29ydGluZyxcbiAgICAgICAgICBzZWxlY3Rpb24gPSBfdGhpcyRwcm9wczIuc2VsZWN0aW9uLFxuICAgICAgICAgIG9uQ2hhbmdlID0gX3RoaXMkcHJvcHMyLm9uQ2hhbmdlLFxuICAgICAgICAgIGVycm9yID0gX3RoaXMkcHJvcHMyLmVycm9yLFxuICAgICAgICAgIG5vSXRlbXNNZXNzYWdlID0gX3RoaXMkcHJvcHMyLm5vSXRlbXNNZXNzYWdlLFxuICAgICAgICAgIGNvbXByZXNzZWQgPSBfdGhpcyRwcm9wczIuY29tcHJlc3NlZCxcbiAgICAgICAgICBpdGVtSWRUb0V4cGFuZGVkUm93TWFwID0gX3RoaXMkcHJvcHMyLml0ZW1JZFRvRXhwYW5kZWRSb3dNYXAsXG4gICAgICAgICAgcmVzcG9uc2l2ZSA9IF90aGlzJHByb3BzMi5yZXNwb25zaXZlLFxuICAgICAgICAgIGlzU2VsZWN0YWJsZSA9IF90aGlzJHByb3BzMi5pc1NlbGVjdGFibGUsXG4gICAgICAgICAgaXNFeHBhbmRhYmxlID0gX3RoaXMkcHJvcHMyLmlzRXhwYW5kYWJsZSxcbiAgICAgICAgICBoYXNBY3Rpb25zID0gX3RoaXMkcHJvcHMyLmhhc0FjdGlvbnMsXG4gICAgICAgICAgcm93UHJvcHMgPSBfdGhpcyRwcm9wczIucm93UHJvcHMsXG4gICAgICAgICAgY2VsbFByb3BzID0gX3RoaXMkcHJvcHMyLmNlbGxQcm9wcyxcbiAgICAgICAgICB0YWJsZUNhcHRpb24gPSBfdGhpcyRwcm9wczIudGFibGVDYXB0aW9uLFxuICAgICAgICAgIHJvd0hlYWRlciA9IF90aGlzJHByb3BzMi5yb3dIZWFkZXIsXG4gICAgICAgICAgdGFibGVMYXlvdXQgPSBfdGhpcyRwcm9wczIudGFibGVMYXlvdXQsXG4gICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wczIsIF9leGNsdWRlZCk7XG5cbiAgICAgIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpQmFzaWNUYWJsZScsIHtcbiAgICAgICAgJ2V1aUJhc2ljVGFibGUtbG9hZGluZyc6IGxvYWRpbmdcbiAgICAgIH0sIGNsYXNzTmFtZSk7XG4gICAgICB2YXIgdGFibGUgPSB0aGlzLnJlbmRlclRhYmxlKCk7XG4gICAgICB2YXIgcGFnaW5hdGlvbkJhciA9IHRoaXMucmVuZGVyUGFnaW5hdGlvbkJhcigpO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgICAgIH0sIHJlc3QpLCB0YWJsZSwgcGFnaW5hdGlvbkJhcik7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclRhYmxlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlclRhYmxlKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzMyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY29tcHJlc3NlZCA9IF90aGlzJHByb3BzMy5jb21wcmVzc2VkLFxuICAgICAgICAgIHJlc3BvbnNpdmUgPSBfdGhpcyRwcm9wczMucmVzcG9uc2l2ZSxcbiAgICAgICAgICB0YWJsZUxheW91dCA9IF90aGlzJHByb3BzMy50YWJsZUxheW91dDtcbiAgICAgIHZhciBtb2JpbGVIZWFkZXIgPSByZXNwb25zaXZlID8gX19fRW1vdGlvbkpTWChFdWlUYWJsZUhlYWRlck1vYmlsZSwgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlGbGV4R3JvdXAsIHtcbiAgICAgICAgcmVzcG9uc2l2ZTogZmFsc2UsXG4gICAgICAgIGp1c3RpZnlDb250ZW50OiBcInNwYWNlQmV0d2VlblwiLFxuICAgICAgICBhbGlnbkl0ZW1zOiBcImJhc2VsaW5lXCJcbiAgICAgIH0sIF9fX0Vtb3Rpb25KU1goRXVpRmxleEl0ZW0sIHtcbiAgICAgICAgZ3JvdzogZmFsc2VcbiAgICAgIH0sIHRoaXMucmVuZGVyU2VsZWN0QWxsKHRydWUpKSwgX19fRW1vdGlvbkpTWChFdWlGbGV4SXRlbSwge1xuICAgICAgICBncm93OiBmYWxzZVxuICAgICAgfSwgdGhpcy5yZW5kZXJUYWJsZU1vYmlsZVNvcnQoKSkpKSA6IHVuZGVmaW5lZDtcbiAgICAgIHZhciBjYXB0aW9uID0gdGhpcy5yZW5kZXJUYWJsZUNhcHRpb24oKTtcbiAgICAgIHZhciBoZWFkID0gdGhpcy5yZW5kZXJUYWJsZUhlYWQoKTtcbiAgICAgIHZhciBib2R5ID0gdGhpcy5yZW5kZXJUYWJsZUJvZHkoKTtcbiAgICAgIHZhciBmb290ZXIgPSB0aGlzLnJlbmRlclRhYmxlRm9vdGVyKCk7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCBudWxsLCBtb2JpbGVIZWFkZXIsIF9fX0Vtb3Rpb25KU1goRXVpVGFibGUsIHtcbiAgICAgICAgaWQ6IHRoaXMudGFibGVJZCxcbiAgICAgICAgdGFibGVMYXlvdXQ6IHRhYmxlTGF5b3V0LFxuICAgICAgICByZXNwb25zaXZlOiByZXNwb25zaXZlLFxuICAgICAgICBjb21wcmVzc2VkOiBjb21wcmVzc2VkXG4gICAgICB9LCBjYXB0aW9uLCBoZWFkLCBib2R5LCBmb290ZXIpKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyVGFibGVNb2JpbGVTb3J0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlclRhYmxlTW9iaWxlU29ydCgpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB2YXIgX3RoaXMkcHJvcHM0ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjb2x1bW5zID0gX3RoaXMkcHJvcHM0LmNvbHVtbnMsXG4gICAgICAgICAgc29ydGluZyA9IF90aGlzJHByb3BzNC5zb3J0aW5nO1xuICAgICAgdmFyIGl0ZW1zID0gW107XG5cbiAgICAgIGlmICghc29ydGluZykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgY29sdW1ucy5mb3JFYWNoKGZ1bmN0aW9uIChjb2x1bW4sIGluZGV4KSB7XG4gICAgICAgIHZhciBfY29sdW1uLCBfY29sdW1uJG1vYmlsZU9wdGlvbnM7XG5cbiAgICAgICAgaWYgKGNvbHVtbi5maWVsZCAmJiBzb3J0aW5nLnNvcnQgJiYgISFzb3J0aW5nLmVuYWJsZUFsbENvbHVtbnMgJiYgY29sdW1uLnNvcnRhYmxlID09IG51bGwpIHtcbiAgICAgICAgICBjb2x1bW4gPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGNvbHVtbiksIHt9LCB7XG4gICAgICAgICAgICBzb3J0YWJsZTogdHJ1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFjb2x1bW4uc29ydGFibGUgfHwgKChfY29sdW1uID0gY29sdW1uKSA9PT0gbnVsbCB8fCBfY29sdW1uID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX2NvbHVtbiRtb2JpbGVPcHRpb25zID0gX2NvbHVtbi5tb2JpbGVPcHRpb25zKSA9PT0gbnVsbCB8fCBfY29sdW1uJG1vYmlsZU9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jb2x1bW4kbW9iaWxlT3B0aW9ucy5zaG93KSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc29ydERpcmVjdGlvbiA9IF90aGlzMi5yZXNvbHZlQ29sdW1uU29ydERpcmVjdGlvbihjb2x1bW4pO1xuXG4gICAgICAgIGl0ZW1zLnB1c2goe1xuICAgICAgICAgIG5hbWU6IGNvbHVtbi5uYW1lLFxuICAgICAgICAgIGtleTogXCJfZGF0YV9zX1wiLmNvbmNhdChjb2x1bW4uZmllbGQsIFwiX1wiKS5jb25jYXQoaW5kZXgpLFxuICAgICAgICAgIG9uU29ydDogX3RoaXMyLnJlc29sdmVDb2x1bW5PblNvcnQoY29sdW1uKSxcbiAgICAgICAgICBpc1NvcnRlZDogISFzb3J0RGlyZWN0aW9uLFxuICAgICAgICAgIGlzU29ydEFzY2VuZGluZzogc29ydERpcmVjdGlvbiA/IFNvcnREaXJlY3Rpb24uaXNBc2Moc29ydERpcmVjdGlvbikgOiB1bmRlZmluZWRcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBpdGVtcy5sZW5ndGggPyBfX19FbW90aW9uSlNYKEV1aVRhYmxlU29ydE1vYmlsZSwge1xuICAgICAgICBpdGVtczogaXRlbXNcbiAgICAgIH0pIDogbnVsbDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyVGFibGVDYXB0aW9uXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlclRhYmxlQ2FwdGlvbigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczUgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGl0ZW1zID0gX3RoaXMkcHJvcHM1Lml0ZW1zLFxuICAgICAgICAgIHBhZ2luYXRpb24gPSBfdGhpcyRwcm9wczUucGFnaW5hdGlvbixcbiAgICAgICAgICB0YWJsZUNhcHRpb24gPSBfdGhpcyRwcm9wczUudGFibGVDYXB0aW9uO1xuICAgICAgdmFyIGl0ZW1Db3VudCA9IGl0ZW1zLmxlbmd0aDtcbiAgICAgIHZhciB0b3RhbEl0ZW1Db3VudCA9IHBhZ2luYXRpb24gPyBwYWdpbmF0aW9uLnRvdGFsSXRlbUNvdW50IDogaXRlbUNvdW50O1xuICAgICAgdmFyIHBhZ2UgPSBwYWdpbmF0aW9uID8gcGFnaW5hdGlvbi5wYWdlSW5kZXggKyAxIDogMTtcbiAgICAgIHZhciBwYWdlQ291bnQgPSBwYWdpbmF0aW9uICE9PSBudWxsICYmIHBhZ2luYXRpb24gIT09IHZvaWQgMCAmJiBwYWdpbmF0aW9uLnBhZ2VTaXplID8gTWF0aC5jZWlsKHBhZ2luYXRpb24udG90YWxJdGVtQ291bnQgLyBwYWdpbmF0aW9uLnBhZ2VTaXplKSA6IDE7XG4gICAgICB2YXIgY2FwdGlvbkVsZW1lbnQ7XG5cbiAgICAgIGlmICh0YWJsZUNhcHRpb24pIHtcbiAgICAgICAgaWYgKHBhZ2luYXRpb24pIHtcbiAgICAgICAgICBjYXB0aW9uRWxlbWVudCA9IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgICAgdG9rZW46IFwiZXVpQmFzaWNUYWJsZS50YWJsZUNhcHRpb25XaXRoUGFnaW5hdGlvblwiLFxuICAgICAgICAgICAgZGVmYXVsdDogXCJ7dGFibGVDYXB0aW9ufTsgUGFnZSB7cGFnZX0gb2Yge3BhZ2VDb3VudH0uXCIsXG4gICAgICAgICAgICB2YWx1ZXM6IHtcbiAgICAgICAgICAgICAgdGFibGVDYXB0aW9uOiB0YWJsZUNhcHRpb24sXG4gICAgICAgICAgICAgIHBhZ2U6IHBhZ2UsXG4gICAgICAgICAgICAgIHBhZ2VDb3VudDogcGFnZUNvdW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FwdGlvbkVsZW1lbnQgPSB0YWJsZUNhcHRpb247XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChwYWdpbmF0aW9uKSB7XG4gICAgICAgICAgaWYgKHBhZ2luYXRpb24udG90YWxJdGVtQ291bnQgPiAwKSB7XG4gICAgICAgICAgICBjYXB0aW9uRWxlbWVudCA9IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgICAgICB0b2tlbjogXCJldWlCYXNpY1RhYmxlLnRhYmxlQXV0b0NhcHRpb25XaXRoUGFnaW5hdGlvblwiLFxuICAgICAgICAgICAgICBkZWZhdWx0OiBcIlRoaXMgdGFibGUgY29udGFpbnMge2l0ZW1Db3VudH0gcm93cyBvdXQgb2Yge3RvdGFsSXRlbUNvdW50fSByb3dzOyBQYWdlIHtwYWdlfSBvZiB7cGFnZUNvdW50fS5cIixcbiAgICAgICAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgICAgICAgdG90YWxJdGVtQ291bnQ6IHRvdGFsSXRlbUNvdW50LFxuICAgICAgICAgICAgICAgIGl0ZW1Db3VudDogaXRlbUNvdW50LFxuICAgICAgICAgICAgICAgIHBhZ2U6IHBhZ2UsXG4gICAgICAgICAgICAgICAgcGFnZUNvdW50OiBwYWdlQ291bnRcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhcHRpb25FbGVtZW50ID0gX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgICAgIHRva2VuOiBcImV1aUJhc2ljVGFibGUudGFibGVTaW1wbGVBdXRvQ2FwdGlvbldpdGhQYWdpbmF0aW9uXCIsXG4gICAgICAgICAgICAgIGRlZmF1bHQ6IFwiVGhpcyB0YWJsZSBjb250YWlucyB7aXRlbUNvdW50fSByb3dzOyBQYWdlIHtwYWdlfSBvZiB7cGFnZUNvdW50fS5cIixcbiAgICAgICAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgICAgICAgaXRlbUNvdW50OiBpdGVtQ291bnQsXG4gICAgICAgICAgICAgICAgcGFnZTogcGFnZSxcbiAgICAgICAgICAgICAgICBwYWdlQ291bnQ6IHBhZ2VDb3VudFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FwdGlvbkVsZW1lbnQgPSBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICAgIHRva2VuOiBcImV1aUJhc2ljVGFibGUudGFibGVBdXRvQ2FwdGlvbldpdGhvdXRQYWdpbmF0aW9uXCIsXG4gICAgICAgICAgICBkZWZhdWx0OiBcIlRoaXMgdGFibGUgY29udGFpbnMge2l0ZW1Db3VudH0gcm93cy5cIixcbiAgICAgICAgICAgIHZhbHVlczoge1xuICAgICAgICAgICAgICBpdGVtQ291bnQ6IGl0ZW1Db3VudFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVNjcmVlblJlYWRlck9ubHksIG51bGwsIF9fX0Vtb3Rpb25KU1goXCJjYXB0aW9uXCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcImV1aVRhYmxlQ2FwdGlvblwiXG4gICAgICB9LCBfX19FbW90aW9uSlNYKEV1aURlbGF5UmVuZGVyLCBudWxsLCBjYXB0aW9uRWxlbWVudCkpKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyVGFibGVIZWFkXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlclRhYmxlSGVhZCgpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgICB2YXIgX3RoaXMkcHJvcHM2ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjb2x1bW5zID0gX3RoaXMkcHJvcHM2LmNvbHVtbnMsXG4gICAgICAgICAgc2VsZWN0aW9uID0gX3RoaXMkcHJvcHM2LnNlbGVjdGlvbjtcbiAgICAgIHZhciBoZWFkZXJzID0gW107XG5cbiAgICAgIGlmIChzZWxlY3Rpb24pIHtcbiAgICAgICAgaGVhZGVycy5wdXNoKF9fX0Vtb3Rpb25KU1goRXVpVGFibGVIZWFkZXJDZWxsQ2hlY2tib3gsIHtcbiAgICAgICAgICBrZXk6IFwiX3NlbGVjdGlvbl9jb2x1bW5faFwiXG4gICAgICAgIH0sIHRoaXMucmVuZGVyU2VsZWN0QWxsKGZhbHNlKSkpO1xuICAgICAgfVxuXG4gICAgICBjb2x1bW5zLmZvckVhY2goZnVuY3Rpb24gKGNvbHVtbiwgaW5kZXgpIHtcbiAgICAgICAgdmFyIF9yZWY1ID0gY29sdW1uLFxuICAgICAgICAgICAgZmllbGQgPSBfcmVmNS5maWVsZCxcbiAgICAgICAgICAgIHdpZHRoID0gX3JlZjUud2lkdGgsXG4gICAgICAgICAgICBuYW1lID0gX3JlZjUubmFtZSxcbiAgICAgICAgICAgIGFsaWduID0gX3JlZjUuYWxpZ24sXG4gICAgICAgICAgICBkYXRhVHlwZSA9IF9yZWY1LmRhdGFUeXBlLFxuICAgICAgICAgICAgc29ydGFibGUgPSBfcmVmNS5zb3J0YWJsZSxcbiAgICAgICAgICAgIG1vYmlsZU9wdGlvbnMgPSBfcmVmNS5tb2JpbGVPcHRpb25zLFxuICAgICAgICAgICAgcmVhZE9ubHkgPSBfcmVmNS5yZWFkT25seSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gX3JlZjUuZGVzY3JpcHRpb247XG5cbiAgICAgICAgdmFyIGNvbHVtbkFsaWduID0gYWxpZ24gfHwgX3RoaXMzLmdldEFsaWduRm9yRGF0YVR5cGUoZGF0YVR5cGUpOyAvLyBhY3Rpb25zIGNvbHVtblxuXG5cbiAgICAgICAgaWYgKGNvbHVtbi5hY3Rpb25zKSB7XG4gICAgICAgICAgaGVhZGVycy5wdXNoKF9fX0Vtb3Rpb25KU1goRXVpVGFibGVIZWFkZXJDZWxsLCB7XG4gICAgICAgICAgICBrZXk6IFwiX2FjdGlvbnNfaF9cIi5jb25jYXQoaW5kZXgpLFxuICAgICAgICAgICAgYWxpZ246IFwicmlnaHRcIixcbiAgICAgICAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbixcbiAgICAgICAgICAgIG1vYmlsZU9wdGlvbnM6IG1vYmlsZU9wdGlvbnNcbiAgICAgICAgICB9LCBuYW1lKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IC8vIGNvbXB1dGVkIGNvbHVtblxuXG5cbiAgICAgICAgaWYgKCFjb2x1bW4uZmllbGQpIHtcbiAgICAgICAgICB2YXIgX3NvcnRpbmcgPSB7fTsgLy8gY29tcHV0ZWQgY29sdW1ucyBhcmUgb25seSBzb3J0YWJsZSBpZiB0aGVpciBgc29ydGFibGVgIGlzIGEgZnVuY3Rpb25cblxuICAgICAgICAgIGlmIChfdGhpczMucHJvcHMuc29ydGluZyAmJiB0eXBlb2Ygc29ydGFibGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHZhciBzb3J0RGlyZWN0aW9uID0gX3RoaXMzLnJlc29sdmVDb2x1bW5Tb3J0RGlyZWN0aW9uKGNvbHVtbik7XG5cbiAgICAgICAgICAgIF9zb3J0aW5nLmlzU29ydGVkID0gISFzb3J0RGlyZWN0aW9uO1xuICAgICAgICAgICAgX3NvcnRpbmcuaXNTb3J0QXNjZW5kaW5nID0gc29ydERpcmVjdGlvbiA/IFNvcnREaXJlY3Rpb24uaXNBc2Moc29ydERpcmVjdGlvbikgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBfc29ydGluZy5vblNvcnQgPSBfdGhpczMucmVzb2x2ZUNvbHVtbk9uU29ydChjb2x1bW4pO1xuICAgICAgICAgICAgX3NvcnRpbmcucmVhZE9ubHkgPSBfdGhpczMucHJvcHMuc29ydGluZy5yZWFkT25seSB8fCByZWFkT25seTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBoZWFkZXJzLnB1c2goX19fRW1vdGlvbkpTWChFdWlUYWJsZUhlYWRlckNlbGwsIF9leHRlbmRzKHtcbiAgICAgICAgICAgIGtleTogXCJfY29tcHV0ZWRfY29sdW1uX2hfXCIuY29uY2F0KGluZGV4KSxcbiAgICAgICAgICAgIGFsaWduOiBjb2x1bW5BbGlnbixcbiAgICAgICAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgICAgICAgIG1vYmlsZU9wdGlvbnM6IG1vYmlsZU9wdGlvbnMsXG4gICAgICAgICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFwidGFibGVIZWFkZXJDZWxsX1wiLmNvbmNhdCh0eXBlb2YgbmFtZSA9PT0gJ3N0cmluZycgPyBuYW1lIDogJycsIFwiX1wiKS5jb25jYXQoaW5kZXgpLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uXG4gICAgICAgICAgfSwgX3NvcnRpbmcpLCBuYW1lKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IC8vIGZpZWxkIGRhdGEgY29sdW1uXG5cblxuICAgICAgICB2YXIgc29ydGluZyA9IHt9O1xuXG4gICAgICAgIGlmIChfdGhpczMucHJvcHMuc29ydGluZykge1xuICAgICAgICAgIGlmIChfdGhpczMucHJvcHMuc29ydGluZy5zb3J0ICYmICEhX3RoaXMzLnByb3BzLnNvcnRpbmcuZW5hYmxlQWxsQ29sdW1ucyAmJiBjb2x1bW4uc29ydGFibGUgPT0gbnVsbCkge1xuICAgICAgICAgICAgY29sdW1uID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBjb2x1bW4pLCB7fSwge1xuICAgICAgICAgICAgICBzb3J0YWJsZTogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIF9yZWY2ID0gY29sdW1uLFxuICAgICAgICAgICAgICBfc29ydGFibGUgPSBfcmVmNi5zb3J0YWJsZTtcblxuICAgICAgICAgIGlmIChfc29ydGFibGUpIHtcbiAgICAgICAgICAgIHZhciBfc29ydERpcmVjdGlvbiA9IF90aGlzMy5yZXNvbHZlQ29sdW1uU29ydERpcmVjdGlvbihjb2x1bW4pO1xuXG4gICAgICAgICAgICBzb3J0aW5nLmlzU29ydGVkID0gISFfc29ydERpcmVjdGlvbjtcbiAgICAgICAgICAgIHNvcnRpbmcuaXNTb3J0QXNjZW5kaW5nID0gX3NvcnREaXJlY3Rpb24gPyBTb3J0RGlyZWN0aW9uLmlzQXNjKF9zb3J0RGlyZWN0aW9uKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHNvcnRpbmcub25Tb3J0ID0gX3RoaXMzLnJlc29sdmVDb2x1bW5PblNvcnQoY29sdW1uKTtcbiAgICAgICAgICAgIHNvcnRpbmcucmVhZE9ubHkgPSBfdGhpczMucHJvcHMuc29ydGluZy5yZWFkT25seSB8fCByZWFkT25seTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBoZWFkZXJzLnB1c2goX19fRW1vdGlvbkpTWChFdWlUYWJsZUhlYWRlckNlbGwsIF9leHRlbmRzKHtcbiAgICAgICAgICBrZXk6IFwiX2RhdGFfaF9cIi5jb25jYXQoZmllbGQsIFwiX1wiKS5jb25jYXQoaW5kZXgpLFxuICAgICAgICAgIGFsaWduOiBjb2x1bW5BbGlnbixcbiAgICAgICAgICB3aWR0aDogd2lkdGgsXG4gICAgICAgICAgbW9iaWxlT3B0aW9uczogbW9iaWxlT3B0aW9ucyxcbiAgICAgICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFwidGFibGVIZWFkZXJDZWxsX1wiLmNvbmNhdChmaWVsZCwgXCJfXCIpLmNvbmNhdChpbmRleCksXG4gICAgICAgICAgZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uXG4gICAgICAgIH0sIHNvcnRpbmcpLCBuYW1lKSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVRhYmxlSGVhZGVyLCBudWxsLCBoZWFkZXJzKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyVGFibGVGb290ZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyVGFibGVGb290ZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM3ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBpdGVtcyA9IF90aGlzJHByb3BzNy5pdGVtcyxcbiAgICAgICAgICBjb2x1bW5zID0gX3RoaXMkcHJvcHM3LmNvbHVtbnMsXG4gICAgICAgICAgcGFnaW5hdGlvbiA9IF90aGlzJHByb3BzNy5wYWdpbmF0aW9uLFxuICAgICAgICAgIHNlbGVjdGlvbiA9IF90aGlzJHByb3BzNy5zZWxlY3Rpb247XG4gICAgICB2YXIgZm9vdGVycyA9IFtdO1xuICAgICAgdmFyIGhhc0RlZmluZWRGb290ZXIgPSBmYWxzZTtcblxuICAgICAgaWYgKHNlbGVjdGlvbikge1xuICAgICAgICAvLyBDcmVhdGUgYW4gZW1wdHkgY2VsbCB0byBjb21wZW5zYXRlIGZvciBhZGRpdGlvbmFsIHNlbGVjdGlvbiBjb2x1bW5cbiAgICAgICAgZm9vdGVycy5wdXNoKF9fX0Vtb3Rpb25KU1goRXVpVGFibGVGb290ZXJDZWxsLCB7XG4gICAgICAgICAga2V5OiBcIl9zZWxlY3Rpb25fY29sdW1uX2ZcIlxuICAgICAgICB9LCB1bmRlZmluZWQpKTtcbiAgICAgIH1cblxuICAgICAgY29sdW1ucy5mb3JFYWNoKGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgICAgICAgdmFyIGZvb3RlciA9IGdldENvbHVtbkZvb3Rlcihjb2x1bW4sIHtcbiAgICAgICAgICBpdGVtczogaXRlbXMsXG4gICAgICAgICAgcGFnaW5hdGlvbjogcGFnaW5hdGlvblxuICAgICAgICB9KTtcbiAgICAgICAgdmFyIF9yZWY3ID0gY29sdW1uLFxuICAgICAgICAgICAgbW9iaWxlT3B0aW9ucyA9IF9yZWY3Lm1vYmlsZU9wdGlvbnMsXG4gICAgICAgICAgICBmaWVsZCA9IF9yZWY3LmZpZWxkLFxuICAgICAgICAgICAgYWxpZ24gPSBfcmVmNy5hbGlnbjtcblxuICAgICAgICBpZiAobW9iaWxlT3B0aW9ucyAhPT0gbnVsbCAmJiBtb2JpbGVPcHRpb25zICE9PSB2b2lkIDAgJiYgbW9iaWxlT3B0aW9ucy5vbmx5KSB7XG4gICAgICAgICAgcmV0dXJuOyAvLyBleGNsdWRlIGNvbHVtbnMgdGhhdCBvbmx5IGV4aXN0IGZvciBtb2JpbGUgaGVhZGVyc1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZvb3Rlcikge1xuICAgICAgICAgIGZvb3RlcnMucHVzaChfX19FbW90aW9uSlNYKEV1aVRhYmxlRm9vdGVyQ2VsbCwge1xuICAgICAgICAgICAga2V5OiBcImZvb3Rlcl9cIi5jb25jYXQoZmllbGQsIFwiX1wiKS5jb25jYXQoZm9vdGVycy5sZW5ndGggLSAxKSxcbiAgICAgICAgICAgIGFsaWduOiBhbGlnblxuICAgICAgICAgIH0sIGZvb3RlcikpO1xuICAgICAgICAgIGhhc0RlZmluZWRGb290ZXIgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEZvb3RlciBpcyB1bmRlZmluZWQsIHNvIGNyZWF0ZSBhbiBlbXB0eSBjZWxsIHRvIHByZXNlcnZlIGxheW91dFxuICAgICAgICAgIGZvb3RlcnMucHVzaChfX19FbW90aW9uSlNYKEV1aVRhYmxlRm9vdGVyQ2VsbCwge1xuICAgICAgICAgICAga2V5OiBcImZvb3Rlcl9lbXB0eV9cIi5jb25jYXQoZm9vdGVycy5sZW5ndGggLSAxKSxcbiAgICAgICAgICAgIGFsaWduOiBhbGlnblxuICAgICAgICAgIH0sIHVuZGVmaW5lZCkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBmb290ZXJzLmxlbmd0aCAmJiBoYXNEZWZpbmVkRm9vdGVyID8gX19fRW1vdGlvbkpTWChFdWlUYWJsZUZvb3RlciwgbnVsbCwgZm9vdGVycykgOiBudWxsO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJUYWJsZUJvZHlcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyVGFibGVCb2R5KCkge1xuICAgICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICAgIGlmICh0aGlzLnByb3BzLmVycm9yKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbmRlckVycm9yQm9keSh0aGlzLnByb3BzLmVycm9yKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGl0ZW1zID0gdGhpcy5wcm9wcy5pdGVtcztcblxuICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJFbXB0eUJvZHkoKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHJvd3MgPSBpdGVtcy5tYXAoZnVuY3Rpb24gKGl0ZW0sIGluZGV4KSB7XG4gICAgICAgIC8vIGlmIHRoZXJlJ3MgcGFnaW5hdGlvbiB0aGUgaXRlbSdzIGluZGV4IG11c3QgYmUgYWRqdXN0ZWQgdG8gdGhlIHdoZXJlIGl0IGlzIGluIHRoZSB3aG9sZSBkYXRhc2V0XG4gICAgICAgIHZhciB0YWJsZUl0ZW1JbmRleCA9IGhhc1BhZ2luYXRpb24oX3RoaXM0LnByb3BzKSAmJiBfdGhpczQucHJvcHMucGFnaW5hdGlvbi5wYWdlU2l6ZSA+IDAgPyBfdGhpczQucHJvcHMucGFnaW5hdGlvbi5wYWdlSW5kZXggKiBfdGhpczQucHJvcHMucGFnaW5hdGlvbi5wYWdlU2l6ZSArIGluZGV4IDogaW5kZXg7XG4gICAgICAgIHJldHVybiBfdGhpczQucmVuZGVySXRlbVJvdyhpdGVtLCB0YWJsZUl0ZW1JbmRleCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVRhYmxlQm9keSwge1xuICAgICAgICBib2R5UmVmOiB0aGlzLnNldFRib2R5XG4gICAgICB9LCByb3dzKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyRXJyb3JCb2R5XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlckVycm9yQm9keShlcnJvcikge1xuICAgICAgdmFyIGNvbFNwYW4gPSB0aGlzLnByb3BzLmNvbHVtbnMubGVuZ3RoICsgKHRoaXMucHJvcHMuc2VsZWN0aW9uID8gMSA6IDApO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpVGFibGVCb2R5LCBudWxsLCBfX19FbW90aW9uSlNYKEV1aVRhYmxlUm93LCBudWxsLCBfX19FbW90aW9uSlNYKEV1aVRhYmxlUm93Q2VsbCwge1xuICAgICAgICBhbGlnbjogXCJjZW50ZXJcIixcbiAgICAgICAgY29sU3BhbjogY29sU3BhbixcbiAgICAgICAgbW9iaWxlT3B0aW9uczoge1xuICAgICAgICAgIHdpZHRoOiAnMTAwJSdcbiAgICAgICAgfVxuICAgICAgfSwgX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgICAgIHR5cGU6IFwibWludXNJbkNpcmNsZVwiLFxuICAgICAgICBjb2xvcjogXCJkYW5nZXJcIlxuICAgICAgfSksIFwiIFwiLCBlcnJvcikpKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyRW1wdHlCb2R5XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlckVtcHR5Qm9keSgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczggPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNvbHVtbnMgPSBfdGhpcyRwcm9wczguY29sdW1ucyxcbiAgICAgICAgICBzZWxlY3Rpb24gPSBfdGhpcyRwcm9wczguc2VsZWN0aW9uLFxuICAgICAgICAgIG5vSXRlbXNNZXNzYWdlID0gX3RoaXMkcHJvcHM4Lm5vSXRlbXNNZXNzYWdlO1xuICAgICAgdmFyIGNvbFNwYW4gPSBjb2x1bW5zLmxlbmd0aCArIChzZWxlY3Rpb24gPyAxIDogMCk7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlUYWJsZUJvZHksIG51bGwsIF9fX0Vtb3Rpb25KU1goRXVpVGFibGVSb3csIG51bGwsIF9fX0Vtb3Rpb25KU1goRXVpVGFibGVSb3dDZWxsLCB7XG4gICAgICAgIGFsaWduOiBcImNlbnRlclwiLFxuICAgICAgICBjb2xTcGFuOiBjb2xTcGFuLFxuICAgICAgICBtb2JpbGVPcHRpb25zOiB7XG4gICAgICAgICAgd2lkdGg6ICcxMDAlJ1xuICAgICAgICB9XG4gICAgICB9LCBub0l0ZW1zTWVzc2FnZSkpKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVySXRlbVJvd1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJJdGVtUm93KGl0ZW0sIHJvd0luZGV4KSB7XG4gICAgICB2YXIgX3RoaXM1ID0gdGhpcztcblxuICAgICAgdmFyIF90aGlzJHByb3BzOSA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY29sdW1ucyA9IF90aGlzJHByb3BzOS5jb2x1bW5zLFxuICAgICAgICAgIHNlbGVjdGlvbiA9IF90aGlzJHByb3BzOS5zZWxlY3Rpb24sXG4gICAgICAgICAgaXNTZWxlY3RhYmxlID0gX3RoaXMkcHJvcHM5LmlzU2VsZWN0YWJsZSxcbiAgICAgICAgICBoYXNBY3Rpb25zID0gX3RoaXMkcHJvcHM5Lmhhc0FjdGlvbnMsXG4gICAgICAgICAgcm93SGVhZGVyID0gX3RoaXMkcHJvcHM5LnJvd0hlYWRlcixcbiAgICAgICAgICBfdGhpcyRwcm9wczkkaXRlbUlkVG8gPSBfdGhpcyRwcm9wczkuaXRlbUlkVG9FeHBhbmRlZFJvd01hcCxcbiAgICAgICAgICBpdGVtSWRUb0V4cGFuZGVkUm93TWFwID0gX3RoaXMkcHJvcHM5JGl0ZW1JZFRvID09PSB2b2lkIDAgPyB7fSA6IF90aGlzJHByb3BzOSRpdGVtSWRUbyxcbiAgICAgICAgICBpc0V4cGFuZGFibGUgPSBfdGhpcyRwcm9wczkuaXNFeHBhbmRhYmxlO1xuICAgICAgdmFyIGNlbGxzID0gW107XG4gICAgICB2YXIgaXRlbUlkQ2FsbGJhY2sgPSB0aGlzLnByb3BzLml0ZW1JZDtcbiAgICAgIHZhciBpdGVtSWQgPSBnZXRJdGVtSWQoaXRlbSwgaXRlbUlkQ2FsbGJhY2spICE9IG51bGwgPyBnZXRJdGVtSWQoaXRlbSwgaXRlbUlkQ2FsbGJhY2spIDogcm93SW5kZXg7XG4gICAgICB2YXIgc2VsZWN0ZWQgPSAhc2VsZWN0aW9uID8gZmFsc2UgOiB0aGlzLnN0YXRlLnNlbGVjdGlvbiAmJiAhIXRoaXMuc3RhdGUuc2VsZWN0aW9uLmZpbmQoZnVuY3Rpb24gKHNlbGVjdGVkSXRlbSkge1xuICAgICAgICByZXR1cm4gZ2V0SXRlbUlkKHNlbGVjdGVkSXRlbSwgaXRlbUlkQ2FsbGJhY2spID09PSBpdGVtSWQ7XG4gICAgICB9KTtcbiAgICAgIHZhciBjYWxjdWxhdGVkSGFzU2VsZWN0aW9uO1xuXG4gICAgICBpZiAoc2VsZWN0aW9uKSB7XG4gICAgICAgIGNlbGxzLnB1c2godGhpcy5yZW5kZXJJdGVtU2VsZWN0aW9uQ2VsbChpdGVtSWQsIGl0ZW0sIHNlbGVjdGVkKSk7XG4gICAgICAgIGNhbGN1bGF0ZWRIYXNTZWxlY3Rpb24gPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgY2FsY3VsYXRlZEhhc0FjdGlvbnM7XG4gICAgICBjb2x1bW5zLmZvckVhY2goZnVuY3Rpb24gKGNvbHVtbiwgY29sdW1uSW5kZXgpIHtcbiAgICAgICAgaWYgKGNvbHVtbi5hY3Rpb25zKSB7XG4gICAgICAgICAgY2VsbHMucHVzaChfdGhpczUucmVuZGVySXRlbUFjdGlvbnNDZWxsKGl0ZW1JZCwgaXRlbSwgY29sdW1uLCBjb2x1bW5JbmRleCkpO1xuICAgICAgICAgIGNhbGN1bGF0ZWRIYXNBY3Rpb25zID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4uZmllbGQpIHtcbiAgICAgICAgICB2YXIgZmllbGREYXRhQ29sdW1uID0gY29sdW1uO1xuICAgICAgICAgIGNlbGxzLnB1c2goX3RoaXM1LnJlbmRlckl0ZW1GaWVsZERhdGFDZWxsKGl0ZW1JZCwgaXRlbSwgY29sdW1uLCBjb2x1bW5JbmRleCwgZmllbGREYXRhQ29sdW1uLmZpZWxkID09PSByb3dIZWFkZXIpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjZWxscy5wdXNoKF90aGlzNS5yZW5kZXJJdGVtQ29tcHV0ZWRDZWxsKGl0ZW1JZCwgaXRlbSwgY29sdW1uLCBjb2x1bW5JbmRleCkpO1xuICAgICAgICB9XG4gICAgICB9KTsgLy8gT2NjdXB5IGZ1bGwgd2lkdGggb2YgdGFibGUsIHRha2luZyBjaGVja2JveCAmIG1vYmlsZSBvbmx5IGNvbHVtbnMgaW50byBhY2NvdW50LlxuXG4gICAgICB2YXIgZXhwYW5kZWRSb3dDb2xTcGFuID0gc2VsZWN0aW9uID8gY29sdW1ucy5sZW5ndGggKyAxIDogY29sdW1ucy5sZW5ndGg7XG4gICAgICB2YXIgbW9iaWxlT25seUNvbHMgPSBjb2x1bW5zLnJlZHVjZShmdW5jdGlvbiAobnVtLCBjb2x1bW4pIHtcbiAgICAgICAgdmFyIF9tb2JpbGVPcHRpb25zO1xuXG4gICAgICAgIHJldHVybiBjb2x1bW4gIT09IG51bGwgJiYgY29sdW1uICE9PSB2b2lkIDAgJiYgKF9tb2JpbGVPcHRpb25zID0gY29sdW1uLm1vYmlsZU9wdGlvbnMpICE9PSBudWxsICYmIF9tb2JpbGVPcHRpb25zICE9PSB2b2lkIDAgJiYgX21vYmlsZU9wdGlvbnMub25seSA/IG51bSArIDEgOiBudW0gKyAwOyAvLyBCV0Mgb25seVxuICAgICAgfSwgMCk7XG4gICAgICBleHBhbmRlZFJvd0NvbFNwYW4gPSBleHBhbmRlZFJvd0NvbFNwYW4gLSBtb2JpbGVPbmx5Q29sczsgLy8gV2UnbGwgdXNlIHRoZSBJRCB0byBhc3NvY2lhdGUgdGhlIGV4cGFuZGVkIHJvdyB3aXRoIHRoZSBvcmlnaW5hbC5cblxuICAgICAgdmFyIGhhc0V4cGFuZGVkUm93ID0gaXRlbUlkVG9FeHBhbmRlZFJvd01hcC5oYXNPd25Qcm9wZXJ0eShpdGVtSWQpO1xuICAgICAgdmFyIGV4cGFuZGVkUm93SWQgPSBoYXNFeHBhbmRlZFJvdyA/IFwicm93X1wiLmNvbmNhdChpdGVtSWQsIFwiX2V4cGFuc2lvblwiKSA6IHVuZGVmaW5lZDtcbiAgICAgIHZhciBleHBhbmRlZFJvdyA9IGhhc0V4cGFuZGVkUm93ID8gX19fRW1vdGlvbkpTWChFdWlUYWJsZVJvdywge1xuICAgICAgICBpZDogZXhwYW5kZWRSb3dJZCxcbiAgICAgICAgaXNFeHBhbmRlZFJvdzogdHJ1ZSxcbiAgICAgICAgaXNTZWxlY3RhYmxlOiBpc1NlbGVjdGFibGVcbiAgICAgIH0sIF9fX0Vtb3Rpb25KU1goRXVpVGFibGVSb3dDZWxsLCB7XG4gICAgICAgIGNvbFNwYW46IGV4cGFuZGVkUm93Q29sU3BhbixcbiAgICAgICAgdGV4dE9ubHk6IGZhbHNlXG4gICAgICB9LCBpdGVtSWRUb0V4cGFuZGVkUm93TWFwW2l0ZW1JZF0pKSA6IHVuZGVmaW5lZDtcbiAgICAgIHZhciByb3dQcm9wc0NhbGxiYWNrID0gdGhpcy5wcm9wcy5yb3dQcm9wcztcbiAgICAgIHZhciByb3dQcm9wcyA9IGdldFJvd1Byb3BzKGl0ZW0sIHJvd1Byb3BzQ2FsbGJhY2spO1xuXG4gICAgICB2YXIgcm93ID0gX19fRW1vdGlvbkpTWChFdWlUYWJsZVJvdywgX2V4dGVuZHMoe1xuICAgICAgICBcImFyaWEtb3duc1wiOiBleHBhbmRlZFJvd0lkLFxuICAgICAgICBpc1NlbGVjdGFibGU6IGlzU2VsZWN0YWJsZSA9PSBudWxsID8gY2FsY3VsYXRlZEhhc1NlbGVjdGlvbiA6IGlzU2VsZWN0YWJsZSxcbiAgICAgICAgaXNTZWxlY3RlZDogc2VsZWN0ZWQsXG4gICAgICAgIGhhc0FjdGlvbnM6IGhhc0FjdGlvbnMgPT0gbnVsbCA/IGNhbGN1bGF0ZWRIYXNBY3Rpb25zIDogaGFzQWN0aW9ucyxcbiAgICAgICAgaXNFeHBhbmRhYmxlOiBpc0V4cGFuZGFibGVcbiAgICAgIH0sIHJvd1Byb3BzKSwgY2VsbHMpO1xuXG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChGcmFnbWVudCwge1xuICAgICAgICBrZXk6IFwicm93X1wiLmNvbmNhdChpdGVtSWQpXG4gICAgICB9LCByb3csIGV4cGFuZGVkUm93KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVySXRlbVNlbGVjdGlvbkNlbGxcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVySXRlbVNlbGVjdGlvbkNlbGwoaXRlbUlkLCBpdGVtLCBzZWxlY3RlZCkge1xuICAgICAgdmFyIF90aGlzNiA9IHRoaXM7XG5cbiAgICAgIHZhciBzZWxlY3Rpb24gPSB0aGlzLnByb3BzLnNlbGVjdGlvbjtcbiAgICAgIHZhciBrZXkgPSBcIl9zZWxlY3Rpb25fY29sdW1uX1wiLmNvbmNhdChpdGVtSWQpO1xuICAgICAgdmFyIGNoZWNrZWQgPSBzZWxlY3RlZDtcbiAgICAgIHZhciBkaXNhYmxlZCA9IHNlbGVjdGlvbi5zZWxlY3RhYmxlICYmICFzZWxlY3Rpb24uc2VsZWN0YWJsZShpdGVtKTtcbiAgICAgIHZhciB0aXRsZSA9IHNlbGVjdGlvbi5zZWxlY3RhYmxlTWVzc2FnZSAmJiBzZWxlY3Rpb24uc2VsZWN0YWJsZU1lc3NhZ2UoIWRpc2FibGVkLCBpdGVtKTtcblxuICAgICAgdmFyIG9uQ2hhbmdlID0gZnVuY3Rpb24gb25DaGFuZ2UoZXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50LnRhcmdldC5jaGVja2VkKSB7XG4gICAgICAgICAgX3RoaXM2LmNoYW5nZVNlbGVjdGlvbihbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KF90aGlzNi5zdGF0ZS5zZWxlY3Rpb24pLCBbaXRlbV0pKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgaXRlbUlkQ2FsbGJhY2sgPSBfdGhpczYucHJvcHMuaXRlbUlkO1xuXG4gICAgICAgICAgX3RoaXM2LmNoYW5nZVNlbGVjdGlvbihfdGhpczYuc3RhdGUuc2VsZWN0aW9uLnJlZHVjZShmdW5jdGlvbiAoc2VsZWN0aW9uLCBzZWxlY3RlZEl0ZW0pIHtcbiAgICAgICAgICAgIGlmIChnZXRJdGVtSWQoc2VsZWN0ZWRJdGVtLCBpdGVtSWRDYWxsYmFjaykgIT09IGl0ZW1JZCkge1xuICAgICAgICAgICAgICBzZWxlY3Rpb24ucHVzaChzZWxlY3RlZEl0ZW0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gc2VsZWN0aW9uO1xuICAgICAgICAgIH0sIFtdKSk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVRhYmxlUm93Q2VsbENoZWNrYm94LCB7XG4gICAgICAgIGtleToga2V5XG4gICAgICB9LCBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgdG9rZW46IFwiZXVpQmFzaWNUYWJsZS5zZWxlY3RUaGlzUm93XCIsXG4gICAgICAgIGRlZmF1bHQ6IFwiU2VsZWN0IHRoaXMgcm93XCJcbiAgICAgIH0sIGZ1bmN0aW9uIChzZWxlY3RUaGlzUm93KSB7XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUNoZWNrYm94LCB7XG4gICAgICAgICAgaWQ6IFwiXCIuY29uY2F0KF90aGlzNi50YWJsZUlkKS5jb25jYXQoa2V5LCBcIi1jaGVja2JveFwiKSxcbiAgICAgICAgICB0eXBlOiBcImluTGlzdFwiLFxuICAgICAgICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICAgICAgICBjaGVja2VkOiBjaGVja2VkLFxuICAgICAgICAgIG9uQ2hhbmdlOiBvbkNoYW5nZSxcbiAgICAgICAgICB0aXRsZTogdGl0bGUgfHwgc2VsZWN0VGhpc1JvdyxcbiAgICAgICAgICBcImFyaWEtbGFiZWxcIjogdGl0bGUgfHwgc2VsZWN0VGhpc1JvdyxcbiAgICAgICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFwiY2hlY2tib3hTZWxlY3RSb3ctXCIuY29uY2F0KGl0ZW1JZClcbiAgICAgICAgfSk7XG4gICAgICB9KSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlckl0ZW1BY3Rpb25zQ2VsbFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJJdGVtQWN0aW9uc0NlbGwoaXRlbUlkLCBpdGVtLCBjb2x1bW4sIGNvbHVtbkluZGV4KSB7XG4gICAgICB2YXIgX3RoaXM3ID0gdGhpcztcblxuICAgICAgdmFyIGFjdGlvbkVuYWJsZWQgPSBmdW5jdGlvbiBhY3Rpb25FbmFibGVkKGFjdGlvbikge1xuICAgICAgICByZXR1cm4gX3RoaXM3LnN0YXRlLnNlbGVjdGlvbi5sZW5ndGggPT09IDAgJiYgKCFhY3Rpb24uZW5hYmxlZCB8fCBhY3Rpb24uZW5hYmxlZChpdGVtKSk7XG4gICAgICB9O1xuXG4gICAgICB2YXIgYWN0dWFsQWN0aW9ucyA9IGNvbHVtbi5hY3Rpb25zLmZpbHRlcihmdW5jdGlvbiAoYWN0aW9uKSB7XG4gICAgICAgIHJldHVybiAhYWN0aW9uLmF2YWlsYWJsZSB8fCBhY3Rpb24uYXZhaWxhYmxlKGl0ZW0pO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChhY3R1YWxBY3Rpb25zLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgLy8gaWYgYW55IG9mIHRoZSBhY3Rpb25zIGBpc1ByaW1hcnlgLCBhZGQgdGhlbSBpbmxpbmUgYXMgd2VsbCwgYnV0IG9ubHkgdGhlIGZpcnN0IDJcbiAgICAgICAgdmFyIHByaW1hcnlBY3Rpb25zID0gYWN0dWFsQWN0aW9ucy5maWx0ZXIoZnVuY3Rpb24gKG8pIHtcbiAgICAgICAgICByZXR1cm4gby5pc1ByaW1hcnk7XG4gICAgICAgIH0pO1xuICAgICAgICBhY3R1YWxBY3Rpb25zID0gcHJpbWFyeUFjdGlvbnMuc2xpY2UoMCwgMik7IC8vIGlmIHdlIGhhdmUgbW9yZSB0aGFuIDEgYWN0aW9uLCB3ZSBkb24ndCBzaG93IHRoZW0gYWxsIGluIHRoZSBjZWxsLCBpbnN0ZWFkIHdlXG4gICAgICAgIC8vIHB1dCB0aGVtIGFsbCBpbiBhIHBvcG92ZXIgdG9vbC4gVGhpcyBlZmZlY3RpdmVseSBtZWFucyB3ZSBjYW4gb25seSBoYXZlIGEgbWF4aW11bVxuICAgICAgICAvLyBvZiBvbmUgdG9vbCBwZXIgcm93IChpdCdzIGVpdGhlciBhbmQgbm9ybWFsIGFjdGlvbiwgb3IgaXQncyBhIHBvcG92ZXIgdGhhdCBzaG93cyBtdWx0aXBsZSBhY3Rpb25zKVxuICAgICAgICAvL1xuICAgICAgICAvLyBoZXJlIHdlIGNyZWF0ZSBhIHNpbmdsZSBjdXN0b20gYWN0aW9uIHRoYXQgdHJpZ2dlcnMgdGhlIHBvcG92ZXIgd2l0aCBhbGwgdGhlIGNvbmZpZ3VyZWQgYWN0aW9uc1xuXG4gICAgICAgIGFjdHVhbEFjdGlvbnMucHVzaCh7XG4gICAgICAgICAgbmFtZTogJ0FsbCBhY3Rpb25zJyxcbiAgICAgICAgICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcihpdGVtKSB7XG4gICAgICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChDb2xsYXBzZWRJdGVtQWN0aW9ucywge1xuICAgICAgICAgICAgICBhY3Rpb25zOiBjb2x1bW4uYWN0aW9ucyxcbiAgICAgICAgICAgICAgaXRlbUlkOiBpdGVtSWQsXG4gICAgICAgICAgICAgIGl0ZW06IGl0ZW0sXG4gICAgICAgICAgICAgIGFjdGlvbkVuYWJsZWQ6IGFjdGlvbkVuYWJsZWRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHZhciB0b29scyA9IF9fX0Vtb3Rpb25KU1goRXhwYW5kZWRJdGVtQWN0aW9ucywge1xuICAgICAgICBhY3Rpb25zOiBhY3R1YWxBY3Rpb25zLFxuICAgICAgICBpdGVtSWQ6IGl0ZW1JZCxcbiAgICAgICAgaXRlbTogaXRlbSxcbiAgICAgICAgYWN0aW9uRW5hYmxlZDogYWN0aW9uRW5hYmxlZFxuICAgICAgfSk7XG5cbiAgICAgIHZhciBrZXkgPSBcInJlY29yZF9hY3Rpb25zX1wiLmNvbmNhdChpdGVtSWQsIFwiX1wiKS5jb25jYXQoY29sdW1uSW5kZXgpO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpVGFibGVSb3dDZWxsLCB7XG4gICAgICAgIHNob3dPbkhvdmVyOiB0cnVlLFxuICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgYWxpZ246IFwicmlnaHRcIixcbiAgICAgICAgdGV4dE9ubHk6IGZhbHNlLFxuICAgICAgICBoYXNBY3Rpb25zOiB0cnVlXG4gICAgICB9LCB0b29scyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlckl0ZW1GaWVsZERhdGFDZWxsXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlckl0ZW1GaWVsZERhdGFDZWxsKGl0ZW1JZCwgaXRlbSwgY29sdW1uLCBjb2x1bW5JbmRleCwgc2V0U2NvcGVSb3cpIHtcbiAgICAgIHZhciBmaWVsZCA9IGNvbHVtbi5maWVsZCxcbiAgICAgICAgICByZW5kZXIgPSBjb2x1bW4ucmVuZGVyLFxuICAgICAgICAgIGRhdGFUeXBlID0gY29sdW1uLmRhdGFUeXBlO1xuICAgICAgdmFyIGtleSA9IFwiX2RhdGFfY29sdW1uX1wiLmNvbmNhdChmaWVsZCwgXCJfXCIpLmNvbmNhdChpdGVtSWQsIFwiX1wiKS5jb25jYXQoY29sdW1uSW5kZXgpO1xuICAgICAgdmFyIGNvbnRlbnRSZW5kZXJlciA9IHJlbmRlciB8fCB0aGlzLmdldFJlbmRlcmVyRm9yRGF0YVR5cGUoZGF0YVR5cGUpO1xuICAgICAgdmFyIHZhbHVlID0gZ2V0KGl0ZW0sIGZpZWxkKTtcbiAgICAgIHZhciBjb250ZW50ID0gY29udGVudFJlbmRlcmVyKHZhbHVlLCBpdGVtKTtcbiAgICAgIHJldHVybiB0aGlzLnJlbmRlckl0ZW1DZWxsKGl0ZW0sIGNvbHVtbiwga2V5LCBjb250ZW50LCBzZXRTY29wZVJvdyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlckl0ZW1Db21wdXRlZENlbGxcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVySXRlbUNvbXB1dGVkQ2VsbChpdGVtSWQsIGl0ZW0sIGNvbHVtbiwgY29sdW1uSW5kZXgpIHtcbiAgICAgIHZhciByZW5kZXIgPSBjb2x1bW4ucmVuZGVyO1xuICAgICAgdmFyIGtleSA9IFwiX2NvbXB1dGVkX2NvbHVtbl9cIi5jb25jYXQoaXRlbUlkLCBcIl9cIikuY29uY2F0KGNvbHVtbkluZGV4KTtcbiAgICAgIHZhciBjb250ZW50UmVuZGVyZXIgPSByZW5kZXIgfHwgdGhpcy5nZXRSZW5kZXJlckZvckRhdGFUeXBlKCk7XG4gICAgICB2YXIgY29udGVudCA9IGNvbnRlbnRSZW5kZXJlcihpdGVtKTtcbiAgICAgIHJldHVybiB0aGlzLnJlbmRlckl0ZW1DZWxsKGl0ZW0sIGNvbHVtbiwga2V5LCBjb250ZW50LCBmYWxzZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlckl0ZW1DZWxsXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlckl0ZW1DZWxsKGl0ZW0sIGNvbHVtbiwga2V5LCBjb250ZW50LCBzZXRTY29wZVJvdykge1xuICAgICAgdmFyIF9yZWY4ID0gY29sdW1uLFxuICAgICAgICAgIGFsaWduID0gX3JlZjguYWxpZ24sXG4gICAgICAgICAgcmVuZGVyID0gX3JlZjgucmVuZGVyLFxuICAgICAgICAgIGRhdGFUeXBlID0gX3JlZjguZGF0YVR5cGUsXG4gICAgICAgICAgaXNFeHBhbmRlciA9IF9yZWY4LmlzRXhwYW5kZXIsXG4gICAgICAgICAgdGV4dE9ubHkgPSBfcmVmOC50ZXh0T25seSxcbiAgICAgICAgICBuYW1lID0gX3JlZjgubmFtZSxcbiAgICAgICAgICBmaWVsZCA9IF9yZWY4LmZpZWxkLFxuICAgICAgICAgIGRlc2NyaXB0aW9uID0gX3JlZjguZGVzY3JpcHRpb24sXG4gICAgICAgICAgc29ydGFibGUgPSBfcmVmOC5zb3J0YWJsZSxcbiAgICAgICAgICBmb290ZXIgPSBfcmVmOC5mb290ZXIsXG4gICAgICAgICAgbW9iaWxlT3B0aW9ucyA9IF9yZWY4Lm1vYmlsZU9wdGlvbnMsXG4gICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmOCwgX2V4Y2x1ZGVkMik7XG5cbiAgICAgIHZhciBjb2x1bW5BbGlnbiA9IGFsaWduIHx8IHRoaXMuZ2V0QWxpZ25Gb3JEYXRhVHlwZShkYXRhVHlwZSk7XG4gICAgICB2YXIgY2VsbFByb3BzQ2FsbGJhY2sgPSB0aGlzLnByb3BzLmNlbGxQcm9wcztcbiAgICAgIHZhciBjZWxsUHJvcHMgPSBnZXRDZWxsUHJvcHMoaXRlbSwgY29sdW1uLCBjZWxsUHJvcHNDYWxsYmFjayk7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlUYWJsZVJvd0NlbGwsIF9leHRlbmRzKHtcbiAgICAgICAga2V5OiBrZXksXG4gICAgICAgIGFsaWduOiBjb2x1bW5BbGlnbixcbiAgICAgICAgaXNFeHBhbmRlcjogaXNFeHBhbmRlcixcbiAgICAgICAgdGV4dE9ubHk6IHRleHRPbmx5IHx8ICFyZW5kZXIsXG4gICAgICAgIHNldFNjb3BlUm93OiBzZXRTY29wZVJvdyxcbiAgICAgICAgbW9iaWxlT3B0aW9uczogX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBtb2JpbGVPcHRpb25zKSwge30sIHtcbiAgICAgICAgICByZW5kZXI6IG1vYmlsZU9wdGlvbnMgJiYgbW9iaWxlT3B0aW9ucy5yZW5kZXIgJiYgbW9iaWxlT3B0aW9ucy5yZW5kZXIoaXRlbSksXG4gICAgICAgICAgaGVhZGVyOiBtb2JpbGVPcHRpb25zICYmIG1vYmlsZU9wdGlvbnMuaGVhZGVyID09PSBmYWxzZSA/IGZhbHNlIDogbmFtZVxuICAgICAgICB9KVxuICAgICAgfSwgY2VsbFByb3BzLCByZXN0KSwgY29udGVudCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldFJlbmRlcmVyRm9yRGF0YVR5cGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0UmVuZGVyZXJGb3JEYXRhVHlwZSgpIHtcbiAgICAgIHZhciBkYXRhVHlwZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogJ2F1dG8nO1xuICAgICAgdmFyIHByb2ZpbGUgPSBkYXRhVHlwZXNQcm9maWxlc1tkYXRhVHlwZV07XG5cbiAgICAgIGlmICghcHJvZmlsZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIGRhdGFUeXBlIFtcIi5jb25jYXQoZGF0YVR5cGUsIFwiXS4gVGhlIHN1cHBvcnRlZCBkYXRhIHR5cGVzIGFyZSBbXCIpLmNvbmNhdChEQVRBX1RZUEVTLmpvaW4oJywgJyksIFwiXVwiKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwcm9maWxlLnJlbmRlcjtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0QWxpZ25Gb3JEYXRhVHlwZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRBbGlnbkZvckRhdGFUeXBlKCkge1xuICAgICAgdmFyIGRhdGFUeXBlID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiAnYXV0byc7XG4gICAgICB2YXIgcHJvZmlsZSA9IGRhdGFUeXBlc1Byb2ZpbGVzW2RhdGFUeXBlXTtcblxuICAgICAgaWYgKCFwcm9maWxlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVua25vd24gZGF0YVR5cGUgW1wiLmNvbmNhdChkYXRhVHlwZSwgXCJdLiBUaGUgc3VwcG9ydGVkIGRhdGEgdHlwZXMgYXJlIFtcIikuY29uY2F0KERBVEFfVFlQRVMuam9pbignLCAnKSwgXCJdXCIpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByb2ZpbGUuYWxpZ247XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclBhZ2luYXRpb25CYXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyUGFnaW5hdGlvbkJhcigpIHtcbiAgICAgIHZhciBfdGhpczggPSB0aGlzO1xuXG4gICAgICB2YXIgX3RoaXMkcHJvcHMxMCA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgZXJyb3IgPSBfdGhpcyRwcm9wczEwLmVycm9yLFxuICAgICAgICAgIHBhZ2luYXRpb24gPSBfdGhpcyRwcm9wczEwLnBhZ2luYXRpb24sXG4gICAgICAgICAgdGFibGVDYXB0aW9uID0gX3RoaXMkcHJvcHMxMC50YWJsZUNhcHRpb24sXG4gICAgICAgICAgb25DaGFuZ2UgPSBfdGhpcyRwcm9wczEwLm9uQ2hhbmdlO1xuXG4gICAgICBpZiAoIWVycm9yICYmIHBhZ2luYXRpb24gJiYgcGFnaW5hdGlvbi50b3RhbEl0ZW1Db3VudCA+IDApIHtcbiAgICAgICAgaWYgKCFvbkNoYW5nZSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBCYXNpYyBUYWJsZSBpcyBjb25maWd1cmVkIHdpdGggcGFnaW5hdGlvbiBidXQgW29uQ2hhbmdlXSBpc1xcbiAgICAgICAgbm90IGNvbmZpZ3VyZWQuIFRoaXMgY2FsbGJhY2sgbXVzdCBiZSBpbXBsZW1lbnRlZCB0byBoYW5kbGUgcGFnaW5hdGlvbiBjaGFuZ2VzXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgIHRva2VuOiBcImV1aUJhc2ljVGFibGUudGFibGVQYWdpbmF0aW9uXCIsXG4gICAgICAgICAgZGVmYXVsdDogXCJQYWdpbmF0aW9uIGZvciB0YWJsZToge3RhYmxlQ2FwdGlvbn1cIixcbiAgICAgICAgICB2YWx1ZXM6IHtcbiAgICAgICAgICAgIHRhYmxlQ2FwdGlvbjogdGFibGVDYXB0aW9uXG4gICAgICAgICAgfVxuICAgICAgICB9LCBmdW5jdGlvbiAodGFibGVQYWdpbmF0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goUGFnaW5hdGlvbkJhciwge1xuICAgICAgICAgICAgcGFnaW5hdGlvbjogcGFnaW5hdGlvbixcbiAgICAgICAgICAgIG9uUGFnZVNpemVDaGFuZ2U6IF90aGlzOC5vblBhZ2VTaXplQ2hhbmdlLmJpbmQoX3RoaXM4KSxcbiAgICAgICAgICAgIG9uUGFnZUNoYW5nZTogX3RoaXM4Lm9uUGFnZUNoYW5nZS5iaW5kKF90aGlzOCksXG4gICAgICAgICAgICBcImFyaWEtY29udHJvbHNcIjogX3RoaXM4LnRhYmxlSWQsXG4gICAgICAgICAgICBcImFyaWEtbGFiZWxcIjogdGFibGVQYWdpbmF0aW9uXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfV0sIFt7XG4gICAga2V5OiBcImdldERlcml2ZWRTdGF0ZUZyb21Qcm9wc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMobmV4dFByb3BzLCBwcmV2U3RhdGUpIHtcbiAgICAgIGlmICghbmV4dFByb3BzLnNlbGVjdGlvbikge1xuICAgICAgICAvLyBuZXh0IHByb3BzIGRvZXNuJ3QgaGF2ZSBhIHNlbGVjdGlvbiwgcmVzZXQgb3VyIHN0YXRlXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc2VsZWN0aW9uOiBbXVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICB2YXIgaXRlbUlkID0gbmV4dFByb3BzLml0ZW1JZDtcbiAgICAgIHZhciBzZWxlY3Rpb24gPSBwcmV2U3RhdGUuc2VsZWN0aW9uLmZpbHRlcihmdW5jdGlvbiAoc2VsZWN0ZWRJdGVtKSB7XG4gICAgICAgIHJldHVybiBuZXh0UHJvcHMuaXRlbXMuZmluZEluZGV4KGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgcmV0dXJuIGdldEl0ZW1JZChpdGVtLCBpdGVtSWQpID09PSBnZXRJdGVtSWQoc2VsZWN0ZWRJdGVtLCBpdGVtSWQpO1xuICAgICAgICB9KSAhPT0gLTE7XG4gICAgICB9KTtcblxuICAgICAgaWYgKHNlbGVjdGlvbi5sZW5ndGggIT09IHByZXZTdGF0ZS5zZWxlY3Rpb24ubGVuZ3RoKSB7XG4gICAgICAgIGlmIChuZXh0UHJvcHMuc2VsZWN0aW9uLm9uU2VsZWN0aW9uQ2hhbmdlKSB7XG4gICAgICAgICAgbmV4dFByb3BzLnNlbGVjdGlvbi5vblNlbGVjdGlvbkNoYW5nZShzZWxlY3Rpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzZWxlY3Rpb246IHNlbGVjdGlvblxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IC8vIHVzZWQgZm9yIG1vdmluZyBpbiAmIG91dCBvZiBgbG9hZGluZ2Agc3RhdGVcblxuICB9XSk7XG5cbiAgcmV0dXJuIEV1aUJhc2ljVGFibGU7XG59KENvbXBvbmVudCk7XG5cbl9kZWZpbmVQcm9wZXJ0eShFdWlCYXNpY1RhYmxlLCBcImRlZmF1bHRQcm9wc1wiLCB7XG4gIHJlc3BvbnNpdmU6IHRydWUsXG4gIHRhYmxlTGF5b3V0OiAnZml4ZWQnLFxuICBub0l0ZW1zTWVzc2FnZTogX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgdG9rZW46IFwiZXVpQmFzaWNUYWJsZS5ub0l0ZW1zTWVzc2FnZVwiLFxuICAgIGRlZmF1bHQ6IFwiTm8gaXRlbXMgZm91bmRcIlxuICB9KVxufSk7XG5cbkV1aUJhc2ljVGFibGUucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogRGVzY3JpYmVzIGhvdyB0byBleHRyYWN0IGEgdW5pcXVlIElEIGZyb20gZWFjaCBpdGVtLCB1c2VkIGZvciBzZWxlY3Rpb25zICYgZXhwYW5kZWQgcm93c1xuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIERlc2NyaWJlcyBob3cgdG8gZXh0cmFjdCBhIHVuaXF1ZSBJRCBmcm9tIGVhY2ggaXRlbSwgdXNlZCBmb3Igc2VsZWN0aW9ucyAmIGV4cGFuZGVkIHJvd3NcbiAgICAgKi9cbiAgaXRlbUlkOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZF0pLFxuXG4gIC8qKlxuICAgICAqIFJvdyBleHBhbnNpb24gdXNlcyB0aGUgaXRlbUlkIHByb3AgdG8gaWRlbnRpZnkgZWFjaCByb3dcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBSb3cgZXhwYW5zaW9uIHVzZXMgdGhlIGl0ZW1JZCBwcm9wIHRvIGlkZW50aWZ5IGVhY2ggcm93XG4gICAgICovXG4gIGl0ZW1JZFRvRXhwYW5kZWRSb3dNYXA6IFByb3BUeXBlcy5zaGFwZSh7fSksXG5cbiAgLyoqXG4gICAgICogQSBsaXN0IG9mIG9iamVjdHMgdG8gYXBwZWFyIGluIHRoZSB0YWJsZSAtIGFuIGl0ZW0gcGVyIHJvd1xuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIEEgbGlzdCBvZiBvYmplY3RzIHRvIGFwcGVhciBpbiB0aGUgdGFibGUgLSBhbiBpdGVtIHBlciByb3dcbiAgICAgKi9cbiAgaXRlbXM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCksXG5cbiAgLyoqXG4gICAgICogQXBwbGllZCB0byBgRXVpVGFibGVSb3dDZWxsYFxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIEFwcGxpZWQgdG8gYEV1aVRhYmxlUm93Q2VsbGBcbiAgICAgKi9cbiAgY2VsbFByb3BzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRdKSxcblxuICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBvbmUgb2YgdGhlIG9iamVjdHM6ICNFdWlUYWJsZUZpZWxkRGF0YUNvbHVtblR5cGUsICNFdWlUYWJsZUNvbXB1dGVkQ29sdW1uVHlwZSBvciAjRXVpVGFibGVBY3Rpb25zQ29sdW1uVHlwZS5cbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBvbmUgb2YgdGhlIG9iamVjdHM6ICNFdWlUYWJsZUZpZWxkRGF0YUNvbHVtblR5cGUsICNFdWlUYWJsZUNvbXB1dGVkQ29sdW1uVHlwZSBvciAjRXVpVGFibGVBY3Rpb25zQ29sdW1uVHlwZS5cbiAgICAgKi9cbiAgY29sdW1uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAvKipcbiAgICAgICAqIEEgZmllbGQgb2YgdGhlIGl0ZW0gKG1heSBiZSBhIG5lc3RlZCBmaWVsZClcbiAgICAgICAqL1xuICAgIC8vIHR5cGUgaGFjayB1c2VkIGZvciBiZXR0ZXIgYXV0b2NvbXBsZXRlIHN1cHBvcnRcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbWljcm9zb2Z0L1R5cGVTY3JpcHQvaXNzdWVzLzI5NzI5XG4gICAgZmllbGQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCxcbiAgICAvLyBzdXBwb3J0cyBvdXRlci5pbm5lciBrZXkgcGF0aHNcblxuICAgIC8qKlxuICAgICAgICogVGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgY29sdW1uXG4gICAgICAgKi9cbiAgICBuYW1lOiBQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLFxuXG4gICAgLyoqXG4gICAgICAgKiBBIGRlc2NyaXB0aW9uIG9mIHRoZSBjb2x1bW4gKHdpbGwgYmUgcHJlc2VudGVkIGFzIGEgdGl0bGUgb3ZlciB0aGUgY29sdW1uIGhlYWRlcilcbiAgICAgICAqL1xuICAgIGRlc2NyaXB0aW9uOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gICAgLyoqXG4gICAgICAgKiBEZXNjcmliZXMgdGhlIGRhdGEgdHlwZXMgb2YgdGhlIGRpc3BsYXllZCB2YWx1ZSAoc2VydmVzIGFzIGEgcmVuZGVyaW5nIGhpbnQgZm9yIHRoZSB0YWJsZSlcbiAgICAgICAqL1xuICAgIGRhdGFUeXBlOiBQcm9wVHlwZXMub25lT2YoW1wiYXV0b1wiLCBcInN0cmluZ1wiLCBcIm51bWJlclwiLCBcImJvb2xlYW5cIiwgXCJkYXRlXCJdKSxcblxuICAgIC8qKlxuICAgICAgICogQSBDU1Mgd2lkdGggcHJvcGVydHkuIEhpbnRzIGZvciB0aGUgcmVxdWlyZWQgd2lkdGggb2YgdGhlIGNvbHVtbiAoZS5nLiBcIjMwJVwiLCBcIjEwMHB4XCIsIGV0Yy4uKVxuICAgICAgICovXG4gICAgd2lkdGg6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgICAvKipcbiAgICAgICAqIERlZmluZXMgd2hldGhlciB0aGUgdXNlciBjYW4gc29ydCBvbiB0aGlzIGNvbHVtbi4gSWYgYSBmdW5jdGlvbiBpcyBwcm92aWRlZCwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB2YWx1ZSB0byBzb3J0IGFnYWluc3RcbiAgICAgICAqL1xuICAgIHNvcnRhYmxlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXSksXG4gICAgaXNFeHBhbmRlcjogUHJvcFR5cGVzLmJvb2wsXG4gICAgdGV4dE9ubHk6IFByb3BUeXBlcy5ib29sLFxuXG4gICAgLyoqXG4gICAgICAgKiBEZWZpbmVzIHRoZSBob3Jpem9udGFsIGFsaWdubWVudCBvZiB0aGUgY29sdW1uXG4gICAgICAgKi9cbiAgICBhbGlnbjogUHJvcFR5cGVzLm9uZU9mKFtcImxlZnRcIiwgXCJyaWdodFwiLCBcImNlbnRlclwiXSksXG5cbiAgICAvKipcbiAgICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRoaXMgY29sdW1uIHNob3VsZCB0cnVuY2F0ZSBpdHMgY29udGVudCB3aGVuIGl0IGRvZXNuJ3QgZml0XG4gICAgICAgKi9cbiAgICB0cnVuY2F0ZVRleHQ6IFByb3BUeXBlcy5ib29sLFxuICAgIG1vYmlsZU9wdGlvbnM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICByZW5kZXI6IFByb3BUeXBlcy5mdW5jXG4gICAgfSksXG5cbiAgICAvKipcbiAgICAgICAqIERlc2NyaWJlIGEgY3VzdG9tIHJlbmRlcmVyIGZ1bmN0aW9uIGZvciB0aGUgY29udGVudFxuICAgICAgICovXG4gICAgcmVuZGVyOiBQcm9wVHlwZXMuZnVuYyxcblxuICAgIC8qKlxuICAgICAgICogQ29udGVudCB0byBkaXNwbGF5IGluIHRoZSBmb290ZXIgYmVuZWF0aCB0aGlzIGNvbHVtblxuICAgICAgICovXG4gICAgZm9vdGVyOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRdKSxcblxuICAgIC8qKlxuICAgICAgICogRGlzYWJsZXMgdGhlIHVzZXIncyBhYmlsaXR5IHRvIGNoYW5nZSB0aGUgc29ydCBidXQgc3RpbGwgc2hvd3MgdGhlIGN1cnJlbnQgZGlyZWN0aW9uXG4gICAgICAgKi9cbiAgICByZWFkT25seTogUHJvcFR5cGVzLmJvb2wsXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZ1xuICB9KS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIC8qKlxuICAgICAgICogQSBmdW5jdGlvbiB0aGF0IGNvbXB1dGVzIHRoZSB2YWx1ZSBmb3IgZWFjaCBpdGVtIGFuZCByZW5kZXJzIGl0XG4gICAgICAgKi9cbiAgICByZW5kZXI6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG5cbiAgICAvKipcbiAgICAgICAqIFRoZSBkaXNwbGF5IG5hbWUgb2YgdGhlIGNvbHVtblxuICAgICAgICovXG4gICAgbmFtZTogUHJvcFR5cGVzLm5vZGUsXG5cbiAgICAvKipcbiAgICAgICAqIEEgZGVzY3JpcHRpb24gb2YgdGhlIGNvbHVtbiAod2lsbCBiZSBwcmVzZW50ZWQgYXMgYSB0aXRsZSBvdmVyIHRoZSBjb2x1bW4gaGVhZGVyXG4gICAgICAgKi9cbiAgICBkZXNjcmlwdGlvbjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAgIC8qKlxuICAgICAgICogSWYgcHJvdmlkZWQsIGFsbG93cyB0aGlzIGNvbHVtbiB0byBiZSBzb3J0ZWQgb24uIE11c3QgcmV0dXJuIHRoZSB2YWx1ZSB0byBzb3J0IGFnYWluc3QuXG4gICAgICAgKi9cbiAgICBzb3J0YWJsZTogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgICAvKipcbiAgICAgICAqIEEgQ1NTIHdpZHRoIHByb3BlcnR5LiBIaW50cyBmb3IgdGhlIHJlcXVpcmVkIHdpZHRoIG9mIHRoZSBjb2x1bW5cbiAgICAgICAqL1xuICAgIHdpZHRoOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gICAgLyoqXG4gICAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGlzIGNvbHVtbiBzaG91bGQgdHJ1bmNhdGUgaXRzIGNvbnRlbnQgd2hlbiBpdCBkb2Vzbid0IGZpdFxuICAgICAgICovXG4gICAgdHJ1bmNhdGVUZXh0OiBQcm9wVHlwZXMuYm9vbCxcbiAgICBpc0V4cGFuZGVyOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBhbGlnbjogUHJvcFR5cGVzLm9uZU9mKFtcImxlZnRcIiwgXCJyaWdodFwiLCBcImNlbnRlclwiXSksXG5cbiAgICAvKipcbiAgICAgICAqIERpc2FibGVzIHRoZSB1c2VyJ3MgYWJpbGl0eSB0byBjaGFuZ2UgdGhlIHNvcnQgYnV0IHN0aWxsIHNob3dzIHRoZSBjdXJyZW50IGRpcmVjdGlvblxuICAgICAgICovXG4gICAgcmVhZE9ubHk6IFByb3BUeXBlcy5ib29sLFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbiAgfSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAvKipcbiAgICAgICAqIEFuIGFycmF5IG9mIG9uZSBvZiB0aGUgb2JqZWN0czogI0RlZmF1bHRJdGVtQWN0aW9uIG9yICNDdXN0b21JdGVtQWN0aW9uXG4gICAgICAgKi9cbiAgICBhY3Rpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgLyoqXG4gICAgICAgICAqIFRoZSB0eXBlIG9mIGFjdGlvblxuICAgICAgICAgKi9cbiAgICAgIHR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJidXR0b25cIl0pLCBQcm9wVHlwZXMub25lT2YoW1wiaWNvblwiXSkuaXNSZXF1aXJlZF0pLFxuXG4gICAgICAvKipcbiAgICAgICAgICogRGVmaW5lcyB0aGUgY29sb3Igb2YgdGhlIGJ1dHRvblxuICAgICAgICAgKi9cbiAgICAgIGNvbG9yOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wicHJpbWFyeVwiLCBcImRhbmdlclwiLCBcInRleHRcIiwgXCJnaG9zdFwiLCBcInN1Y2Nlc3NcIiwgXCJ3YXJuaW5nXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXSksIFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJwcmltYXJ5XCIsIFwiYWNjZW50XCIsIFwic3VjY2Vzc1wiLCBcIndhcm5pbmdcIiwgXCJkYW5nZXJcIiwgXCJnaG9zdFwiLCBcInRleHRcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRdKV0pLFxuXG4gICAgICAvKipcbiAgICAgICAgICogVGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgYWN0aW9uICh3aWxsIGJlIHRoZSBidXR0b24gY2FwdGlvbilcbiAgICAgICAgICovXG5cbiAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgZGlzcGxheSBuYW1lIG9mIHRoZSBhY3Rpb24gKHdpbGwgYmUgdGhlIGJ1dHRvbiBjYXB0aW9uKVxuICAgICAgICAgKi9cbiAgICAgIG5hbWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLFxuXG4gICAgICAvKipcbiAgICAgICAgICogRGVzY3JpYmVzIHRoZSBhY3Rpb24gKHdpbGwgYmUgdGhlIGJ1dHRvbiB0aXRsZSlcbiAgICAgICAgICovXG5cbiAgICAgIC8qKlxuICAgICAgICAgKiBEZXNjcmliZXMgdGhlIGFjdGlvbiAod2lsbCBiZSB0aGUgYnV0dG9uIHRpdGxlKVxuICAgICAgICAgKi9cbiAgICAgIGRlc2NyaXB0aW9uOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG5cbiAgICAgIC8qKlxuICAgICAgICAgKiBBIGhhbmRsZXIgZnVuY3Rpb24gdG8gZXhlY3V0ZSB0aGUgYWN0aW9uXG4gICAgICAgICAqL1xuXG4gICAgICAvKipcbiAgICAgICAgICogQSBoYW5kbGVyIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgdGhlIGFjdGlvblxuICAgICAgICAgKi9cbiAgICAgIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICAgICAgaHJlZjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIHRhcmdldDogUHJvcFR5cGVzLnN0cmluZyxcblxuICAgICAgLyoqXG4gICAgICAgICAqIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGFjdGlvbiBpcyBhdmFpbGFibGVcbiAgICAgICAgICovXG5cbiAgICAgIC8qKlxuICAgICAgICAgKiBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBhY3Rpb24gaXMgYXZhaWxhYmxlXG4gICAgICAgICAqL1xuICAgICAgYXZhaWxhYmxlOiBQcm9wVHlwZXMuZnVuYyxcblxuICAgICAgLyoqXG4gICAgICAgICAqIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGFjdGlvbiBpcyBlbmFibGVkXG4gICAgICAgICAqL1xuXG4gICAgICAvKipcbiAgICAgICAgICogQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGRldGVybWluZXMgd2hldGhlciB0aGUgYWN0aW9uIGlzIGVuYWJsZWRcbiAgICAgICAgICovXG4gICAgICBlbmFibGVkOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAgIGlzUHJpbWFyeTogUHJvcFR5cGVzLmJvb2wsXG4gICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgICAgIC8qKlxuICAgICAgICAgKiBBc3NvY2lhdGVzIGFuIGljb24gd2l0aCB0aGUgYnV0dG9uXG4gICAgICAgICAqL1xuICAgICAgaWNvbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYWxlcnRcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhc3Rlcmlza1wiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJib2x0XCIsIFwiYm94ZXNIb3Jpem9udGFsXCIsIFwiYm94ZXNWZXJ0aWNhbFwiLCBcImJyYW5jaFwiLCBcImJyYW5jaFVzZXJcIiwgXCJicm9vbVwiLCBcImJydXNoXCIsIFwiYnVnXCIsIFwiYnVsbHNleWVcIiwgXCJjYWxlbmRhclwiLCBcImNhbnZhc0FwcFwiLCBcImNhc2VzQXBwXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsb2NrXCIsIFwiY2xvdWREcml6emxlXCIsIFwiY2xvdWRTdG9ybXlcIiwgXCJjbG91ZFN1bm55XCIsIFwiY2x1c3RlclwiLCBcImNvZGVBcHBcIiwgXCJjb2xvclwiLCBcImNvbXB1dGVcIiwgXCJjb25zb2xlXCIsIFwiY29uc29sZUFwcFwiLCBcImNvbnRhaW5lclwiLCBcImNvbnRpbnVpdHlBYm92ZVwiLCBcImNvbnRpbnVpdHlBYm92ZUJlbG93XCIsIFwiY29udGludWl0eUJlbG93XCIsIFwiY29udGludWl0eVdpdGhpblwiLCBcImNvbnRyb2xzSG9yaXpvbnRhbFwiLCBcImNvbnRyb2xzVmVydGljYWxcIiwgXCJjb3B5XCIsIFwiY29weUNsaXBib2FyZFwiLCBcImNyZWF0ZUFkdmFuY2VkSm9iXCIsIFwiY3JlYXRlTXVsdGlNZXRyaWNKb2JcIiwgXCJjcmVhdGVQb3B1bGF0aW9uSm9iXCIsIFwiY3JlYXRlU2luZ2xlTWV0cmljSm9iXCIsIFwiY3Jvc3NcIiwgXCJjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcFwiLCBcImNyb3NzSW5BQ2lyY2xlRmlsbGVkXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpc2NvdmVyQXBwXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG91YmxlQXJyb3dMZWZ0XCIsIFwiZG91YmxlQXJyb3dSaWdodFwiLCBcImRvd25sb2FkXCIsIFwiZWRpdG9yQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JBbGlnbkxlZnRcIiwgXCJlZGl0b3JBbGlnblJpZ2h0XCIsIFwiZWRpdG9yQm9sZFwiLCBcImVkaXRvckNoZWNrbGlzdFwiLCBcImVkaXRvckNvZGVCbG9ja1wiLCBcImVkaXRvckNvbW1lbnRcIiwgXCJlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbFwiLCBcImVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbFwiLCBcImVkaXRvckhlYWRpbmdcIiwgXCJlZGl0b3JJdGFsaWNcIiwgXCJlZGl0b3JJdGVtQWxpZ25Cb3R0b21cIiwgXCJlZGl0b3JJdGVtQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JJdGVtQWxpZ25MZWZ0XCIsIFwiZWRpdG9ySXRlbUFsaWduTWlkZGxlXCIsIFwiZWRpdG9ySXRlbUFsaWduUmlnaHRcIiwgXCJlZGl0b3JJdGVtQWxpZ25Ub3BcIiwgXCJlZGl0b3JMaW5rXCIsIFwiZWRpdG9yT3JkZXJlZExpc3RcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnRcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BMZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BSaWdodFwiLCBcImVkaXRvclJlZG9cIiwgXCJlZGl0b3JTdHJpa2VcIiwgXCJlZGl0b3JUYWJsZVwiLCBcImVkaXRvclVuZGVybGluZVwiLCBcImVkaXRvclVuZG9cIiwgXCJlZGl0b3JVbm9yZGVyZWRMaXN0XCIsIFwiZW1haWxcIiwgXCJlbXB0eVwiLCBcImVtc0FwcFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibW9iaWxlXCIsIFwibW9uaXRvcmluZ0FwcFwiLCBcIm1vb25cIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFwZXJDbGlwXCIsIFwicGFydGlhbFwiLCBcInBhdXNlXCIsIFwicGF5bWVudFwiLCBcInBlbmNpbFwiLCBcInBlcmNlbnRcIiwgXCJwaW5cIiwgXCJwaW5GaWxsZWRcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBsYXlcIiwgXCJwbGF5RmlsbGVkXCIsIFwicGx1c1wiLCBcInBsdXNJbkNpcmNsZVwiLCBcInBsdXNJbkNpcmNsZUZpbGxlZFwiLCBcInBvcG91dFwiLCBcInB1c2hcIiwgXCJxdWVzdGlvbkluQ2lyY2xlXCIsIFwicXVvdGVcIiwgXCJyZWNlbnRseVZpZXdlZEFwcFwiLCBcInJlZnJlc2hcIiwgXCJyZWdyZXNzaW9uSm9iXCIsIFwicmVwb3J0ZXJcIiwgXCJyZXBvcnRpbmdBcHBcIiwgXCJyZXR1cm5LZXlcIiwgXCJzYXZlXCIsIFwic2F2ZWRPYmplY3RzQXBwXCIsIFwic2NhbGVcIiwgXCJzZWFyY2hcIiwgXCJzZWFyY2hQcm9maWxlckFwcFwiLCBcInNlY3VyaXR5QW5hbHl0aWNzQXBwXCIsIFwic2VjdXJpdHlBcHBcIiwgXCJzZWN1cml0eVNpZ25hbFwiLCBcInNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWRcIiwgXCJzZWN1cml0eVNpZ25hbFJlc29sdmVkXCIsIFwic2Vzc2lvblZpZXdlclwiLCBcInNoYXJkXCIsIFwic2hhcmVcIiwgXCJzbm93Zmxha2VcIiwgXCJzb3J0RG93blwiLCBcInNvcnRMZWZ0XCIsIFwic29ydFJpZ2h0XCIsIFwic29ydFVwXCIsIFwic29ydGFibGVcIiwgXCJzcGFjZXNBcHBcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EZW5zZVZlY3RvclwiLCBcInRva2VuRWxlbWVudFwiLCBcInRva2VuRW51bVwiLCBcInRva2VuRW51bU1lbWJlclwiLCBcInRva2VuRXZlbnRcIiwgXCJ0b2tlbkV4Y2VwdGlvblwiLCBcInRva2VuRmllbGRcIiwgXCJ0b2tlbkZpbGVcIiwgXCJ0b2tlbkZsYXR0ZW5lZFwiLCBcInRva2VuRnVuY3Rpb25cIiwgXCJ0b2tlbkdlb1wiLCBcInRva2VuSGlzdG9ncmFtXCIsIFwidG9rZW5JbnRlcmZhY2VcIiwgXCJ0b2tlbklQXCIsIFwidG9rZW5Kb2luXCIsIFwidG9rZW5LZXlcIiwgXCJ0b2tlbktleXdvcmRcIiwgXCJ0b2tlbk1ldGhvZFwiLCBcInRva2VuTWV0cmljQ291bnRlclwiLCBcInRva2VuTWV0cmljR2F1Z2VcIiwgXCJ0b2tlbk1vZHVsZVwiLCBcInRva2VuTmFtZXNwYWNlXCIsIFwidG9rZW5OZXN0ZWRcIiwgXCJ0b2tlbk51bGxcIiwgXCJ0b2tlbk51bWJlclwiLCBcInRva2VuT2JqZWN0XCIsIFwidG9rZW5PcGVyYXRvclwiLCBcInRva2VuUGFja2FnZVwiLCBcInRva2VuUGFyYW1ldGVyXCIsIFwidG9rZW5QZXJjb2xhdG9yXCIsIFwidG9rZW5Qcm9wZXJ0eVwiLCBcInRva2VuUmFuZ2VcIiwgXCJ0b2tlblJhbmtGZWF0dXJlXCIsIFwidG9rZW5SYW5rRmVhdHVyZXNcIiwgXCJ0b2tlblJlcG9cIiwgXCJ0b2tlblNlYXJjaFR5cGVcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXSlcbiAgICB9KS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBmdW5jdGlvbiB0aGF0IHJlbmRlcnMgdGhlIGFjdGlvbi4gTm90ZSB0aGF0IHRoZSByZXR1cm5lZCBub2RlIGlzIGV4cGVjdGVkIHRvIGhhdmUgYG9uRm9jdXNgIGFuZCBgb25CbHVyYCBmdW5jdGlvbnNcbiAgICAgICAgICovXG4gICAgICByZW5kZXI6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG5cbiAgICAgIC8qKlxuICAgICAgICAgKiBBIGNhbGxiYWNrIHRoYXQgZGVmaW5lcyB3aGV0aGVyIHRoZSBhY3Rpb24gaXMgYXZhaWxhYmxlXG4gICAgICAgICAqL1xuICAgICAgYXZhaWxhYmxlOiBQcm9wVHlwZXMuZnVuYyxcblxuICAgICAgLyoqXG4gICAgICAgICAqIEEgY2FsbGJhY2sgdGhhdCBkZWZpbmVzIHdoZXRoZXIgdGhlIGFjdGlvbiBpcyBlbmFibGVkXG4gICAgICAgICAqL1xuICAgICAgZW5hYmxlZDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgICBpc1ByaW1hcnk6IFByb3BUeXBlcy5ib29sXG4gICAgfSkuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQpLmlzUmVxdWlyZWQsXG5cbiAgICAvKipcbiAgICAgICAqIFRoZSBkaXNwbGF5IG5hbWUgb2YgdGhlIGNvbHVtblxuICAgICAgICovXG4gICAgbmFtZTogUHJvcFR5cGVzLm5vZGUsXG5cbiAgICAvKipcbiAgICAgICAqIEEgZGVzY3JpcHRpb24gb2YgdGhlIGNvbHVtbiAod2lsbCBiZSBwcmVzZW50ZWQgYXMgYSB0aXRsZSBvdmVyIHRoZSBjb2x1bW4gaGVhZGVyXG4gICAgICAgKi9cbiAgICBkZXNjcmlwdGlvbjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAgIC8qKlxuICAgICAgICogQSBDU1Mgd2lkdGggcHJvcGVydHkuIEhpbnRzIGZvciB0aGUgcmVxdWlyZWQgd2lkdGggb2YgdGhlIGNvbHVtblxuICAgICAgICovXG4gICAgd2lkdGg6IFByb3BUeXBlcy5zdHJpbmdcbiAgfSkuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQpLFxuXG4gIC8qKlxuICAgICAqIEVycm9yIG1lc3NhZ2UgdG8gZGlzcGxheVxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIEVycm9yIG1lc3NhZ2UgdG8gZGlzcGxheVxuICAgICAqL1xuICBlcnJvcjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgKiBEZXNjcmliZXMgdGhlIGNvbnRlbnQgb2YgdGhlIHRhYmxlLiBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgY2FwdGlvbiB3aWxsIGJlIFwiVGhpcyB0YWJsZSBjb250YWlucyB7aXRlbUNvdW50fSByb3dzLlwiXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogRGVzY3JpYmVzIHRoZSBjb250ZW50IG9mIHRoZSB0YWJsZS4gSWYgbm90IHNwZWNpZmllZCwgdGhlIGNhcHRpb24gd2lsbCBiZSBcIlRoaXMgdGFibGUgY29udGFpbnMge2l0ZW1Db3VudH0gcm93cy5cIlxuICAgICAqL1xuICB0YWJsZUNhcHRpb246IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogSW5kaWNhdGVzIHdoaWNoIGNvbHVtbiBzaG91bGQgYmUgdXNlZCBhcyB0aGUgaWRlbnRpZnlpbmcgY2VsbCBpbiBlYWNoIHJvdy4gU2hvdWxkIG1hdGNoIGEgXCJmaWVsZFwiIHByb3AgaW4gRmllbGREYXRhQ29sdW1uXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogSW5kaWNhdGVzIHdoaWNoIGNvbHVtbiBzaG91bGQgYmUgdXNlZCBhcyB0aGUgaWRlbnRpZnlpbmcgY2VsbCBpbiBlYWNoIHJvdy4gU2hvdWxkIG1hdGNoIGEgXCJmaWVsZFwiIHByb3AgaW4gRmllbGREYXRhQ29sdW1uXG4gICAgICovXG4gIHJvd0hlYWRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgaGFzQWN0aW9uczogUHJvcFR5cGVzLmJvb2wsXG4gIGlzRXhwYW5kYWJsZTogUHJvcFR5cGVzLmJvb2wsXG4gIGlzU2VsZWN0YWJsZTogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogUHJvdmlkZXMgYW4gaW5maW5pdGUgbG9hZGluZyBpbmRpY2F0b3JcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBQcm92aWRlcyBhbiBpbmZpbml0ZSBsb2FkaW5nIGluZGljYXRvclxuICAgICAqL1xuICBsb2FkaW5nOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBNZXNzYWdlIHRvIGRpc3BsYXkgaWYgdGFibGUgaXMgZW1wdHlcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBNZXNzYWdlIHRvIGRpc3BsYXkgaWYgdGFibGUgaXMgZW1wdHlcbiAgICAgKi9cbiAgbm9JdGVtc01lc3NhZ2U6IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgICAqIENhbGxlZCB3aGVuZXZlciBwYWdpbmF0aW9uIG9yIHNvcnRpbmcgY2hhbmdlcyAodGhpcyBwcm9wZXJ0eSBpcyByZXF1aXJlZCB3aGVuIGVpdGhlciBwYWdpbmF0aW9uIG9yIHNvcnRpbmcgaXMgY29uZmlndXJlZCkuIFNlZSAjQ3JpdGVyaWEgb3IgI0NyaXRlcmlhV2l0aFBhZ2luYXRpb25cbiAgICAgKi9cbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgICAqIENvbmZpZ3VyZXMgI1BhZ2luYXRpb25cbiAgICAgKi9cbiAgcGFnaW5hdGlvbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFt1bmRlZmluZWRdKSwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAvKipcbiAgICAgICAqIFRoZSBjdXJyZW50IHBhZ2UgKHplcm8tYmFzZWQpIGluZGV4XG4gICAgICAgKi9cbiAgICBwYWdlSW5kZXg6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcblxuICAgIC8qKlxuICAgICAgICogVGhlIG1heGltdW0gbnVtYmVyIG9mIGl0ZW1zIHRoYXQgY2FuIGJlIHNob3duIGluIGEgc2luZ2xlIHBhZ2UuXG4gICAgICAgKiBQYXNzIGAwYCB0byBkaXNwbGF5IHRoZSBzZWxlY3RlZCBcIlNob3cgYWxsXCIgb3B0aW9uIGFuZCBoaWRlIHRoZSBwYWdpbmF0aW9uLlxuICAgICAgICovXG4gICAgcGFnZVNpemU6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcblxuICAgIC8qKlxuICAgICAgICogVGhlIHRvdGFsIG51bWJlciBvZiBpdGVtcyB0aGUgcGFnZSBpcyBcInNsaWNlZFwiIG9mXG4gICAgICAgKi9cbiAgICB0b3RhbEl0ZW1Db3VudDogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuXG4gICAgLyoqXG4gICAgICAgKiBDb25maWd1cmVzIHRoZSBwYWdlIHNpemUgZHJvcGRvd24gb3B0aW9ucy5cbiAgICAgICAqIFBhc3MgYDBgIGFzIG9uZSBvZiB0aGUgb3B0aW9ucyB0byBjcmVhdGUgYSBcIlNob3cgYWxsXCIgb3B0aW9uLlxuICAgICAgICovXG4gICAgcGFnZVNpemVPcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQpLFxuXG4gICAgLyoqXG4gICAgICAgKiBIaWRlcyB0aGUgcGFnZSBzaXplIGRyb3Bkb3duXG4gICAgICAgKi9cbiAgICBzaG93UGVyUGFnZU9wdGlvbnM6IFByb3BUeXBlcy5ib29sXG4gIH0pXSksXG5cbiAgLyoqXG4gICAgICogSWYgdHJ1ZSwgd2lsbCBjb252ZXJ0IHRhYmxlIHRvIGNhcmRzIGluIG1vYmlsZSB2aWV3XG4gICAgICovXG5cbiAgLyoqXG4gICAgICogSWYgdHJ1ZSwgd2lsbCBjb252ZXJ0IHRhYmxlIHRvIGNhcmRzIGluIG1vYmlsZSB2aWV3XG4gICAgICovXG4gIHJlc3BvbnNpdmU6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIEFwcGxpZWQgdG8gYEV1aVRhYmxlUm93YFxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIEFwcGxpZWQgdG8gYEV1aVRhYmxlUm93YFxuICAgICAqL1xuICByb3dQcm9wczogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXSksXG5cbiAgLyoqXG4gICAgICogQ29uZmlndXJlcyAjRXVpVGFibGVTZWxlY3Rpb25UeXBlXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogQ29uZmlndXJlcyAjRXVpVGFibGVTZWxlY3Rpb25UeXBlXG4gICAgICovXG4gIHNlbGVjdGlvbjogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAvKipcbiAgICAgICAqIEEgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGNhbGxlZCB3aGVuZXZlciB0aGUgaXRlbSBzZWxlY3Rpb24gY2hhbmdlc1xuICAgICAgICovXG4gICAgb25TZWxlY3Rpb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuXG4gICAgLyoqXG4gICAgICAgKiBBIGNhbGxiYWNrIHRoYXQgaXMgY2FsbGVkIHBlciBpdGVtIHRvIGluZGljYXRlIHdoZXRoZXIgaXQgaXMgc2VsZWN0YWJsZVxuICAgICAgICovXG4gICAgc2VsZWN0YWJsZTogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgICAvKipcbiAgICAgICAqIEEgY2FsbGJhY2sgdGhhdCBpcyBjYWxsZWQgcGVyIGl0ZW0gdG8gcmV0cmlldmUgYSBtZXNzYWdlIGZvciBpdHMgc2VsZWN0YWJsZSBzdGF0ZS5XZSBkaXNwbGF5IHRoZXNlIG1lc3NhZ2VzIGFzIGEgdG9vbHRpcCBvbiBhbiB1bnNlbGVjdGFibGUgY2hlY2tib3hcbiAgICAgICAqL1xuICAgIHNlbGVjdGFibGVNZXNzYWdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBpbml0aWFsU2VsZWN0ZWQ6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZClcbiAgfSksXG5cbiAgLyoqXG4gICAgICogQ29uZmlndXJlcyAjRXVpVGFibGVTb3J0aW5nVHlwZVxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIENvbmZpZ3VyZXMgI0V1aVRhYmxlU29ydGluZ1R5cGVcbiAgICAgKi9cbiAgc29ydGluZzogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAvKipcbiAgICAgICAqIEluZGljYXRlcyB0aGUgcHJvcGVydHkvZmllbGQgdG8gc29ydCBvblxuICAgICAgICovXG4gICAgc29ydDogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIGZpZWxkOiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsXG4gICAgICBkaXJlY3Rpb246IFByb3BUeXBlcy5vbmVPZihbXCJhc2NcIiwgXCJkZXNjXCJdKS5pc1JlcXVpcmVkXG4gICAgfSksXG5cbiAgICAvKipcbiAgICAgICAqIEVuYWJsZXMvZGlzYWJsZXMgdW5zb3J0aW5nIG9mIHRhYmxlIGNvbHVtbnMuIFN1cHBvcnRlZCBieSBFdWlJbk1lbW9yeVRhYmxlLlxuICAgICAgICovXG4gICAgYWxsb3dOZXV0cmFsU29ydDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgICAvKipcbiAgICAgICAqIEVuYWJsZXMgdGhlIGRlZmF1bHQgc29ydGluZyBhYmlsaXR5IGZvciBlYWNoIGNvbHVtbi5cbiAgICAgICAqL1xuICAgIGVuYWJsZUFsbENvbHVtbnM6IFByb3BUeXBlcy5ib29sLFxuXG4gICAgLyoqXG4gICAgICAgKiBEaXNhYmxlcyB0aGUgdXNlcidzIGFiaWxpdHkgdG8gY2hhbmdlIHRoZSBzb3J0IGJ1dCBzdGlsbCBzaG93cyB0aGUgY3VycmVudCBkaXJlY3Rpb25cbiAgICAgICAqL1xuICAgIHJlYWRPbmx5OiBQcm9wVHlwZXMuYm9vbFxuICB9KSxcblxuICAvKipcbiAgICAgKiBTZXRzIHRoZSB0YWJsZS1sYXlvdXQgQ1NTIHByb3BlcnR5LiBOb3RlIHRoYXQgYXV0byB0YWJsZUxheW91dCBwcmV2ZW50cyB0cnVuY2F0ZVRleHQgZnJvbSB3b3JraW5nIHByb3Blcmx5LlxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIFNldHMgdGhlIHRhYmxlLWxheW91dCBDU1MgcHJvcGVydHkuIE5vdGUgdGhhdCBhdXRvIHRhYmxlTGF5b3V0IHByZXZlbnRzIHRydW5jYXRlVGV4dCBmcm9tIHdvcmtpbmcgcHJvcGVybHkuXG4gICAgICovXG4gIHRhYmxlTGF5b3V0OiBQcm9wVHlwZXMub25lT2YoW1wiZml4ZWRcIiwgXCJhdXRvXCJdKSxcblxuICAvKipcbiAgICAgKiBBcHBsaWVkIHRvIHRhYmxlIGNlbGxzID0+IEFueSBjZWxsIHVzaW5nIHJlbmRlciBmdW5jdGlvbiB3aWxsIHNldCB0aGlzIHRvIGJlIGZhbHNlLCBsZWFkaW5nIHRvIHVubmVjZXNzYXJ5IHdvcmQgYnJlYWtzLiBBcHBseSB0ZXh0T25seTogdHJ1ZSBpbiBvcmRlciB0byBlbnN1cmUgaXQgYnJlYWtzIHByb3Blcmx5XG4gICAgICovXG5cbiAgLyoqXG4gICAgICogQXBwbGllZCB0byB0YWJsZSBjZWxscyA9PiBBbnkgY2VsbCB1c2luZyByZW5kZXIgZnVuY3Rpb24gd2lsbCBzZXQgdGhpcyB0byBiZSBmYWxzZSwgbGVhZGluZyB0byB1bm5lY2Vzc2FyeSB3b3JkIGJyZWFrcy4gQXBwbHkgdGV4dE9ubHk6IHRydWUgaW4gb3JkZXIgdG8gZW5zdXJlIGl0IGJyZWFrcyBwcm9wZXJseVxuICAgICAqL1xuICB0ZXh0T25seTogUHJvcFR5cGVzLmJvb2xcbn07IiwgImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wcmVkaWNhdGUnO1xuaW1wb3J0IHsgRXVpQ29udGV4dE1lbnVJdGVtLCBFdWlDb250ZXh0TWVudVBhbmVsIH0gZnJvbSAnLi4vY29udGV4dF9tZW51JztcbmltcG9ydCB7IEV1aVBvcG92ZXIgfSBmcm9tICcuLi9wb3BvdmVyJztcbmltcG9ydCB7IEV1aUJ1dHRvbkljb24gfSBmcm9tICcuLi9idXR0b24nO1xuaW1wb3J0IHsgRXVpVG9vbFRpcCB9IGZyb20gJy4uL3Rvb2xfdGlwJztcbmltcG9ydCB7IEV1aUkxOG4gfSBmcm9tICcuLi9pMThuJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbmZ1bmN0aW9uIGFjdGlvbklzQ3VzdG9tSXRlbUFjdGlvbihhY3Rpb24pIHtcbiAgcmV0dXJuIGFjdGlvbi5oYXNPd25Qcm9wZXJ0eSgncmVuZGVyJyk7XG59XG5cbmV4cG9ydCB2YXIgQ29sbGFwc2VkSXRlbUFjdGlvbnMgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKENvbGxhcHNlZEl0ZW1BY3Rpb25zLCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKENvbGxhcHNlZEl0ZW1BY3Rpb25zKTtcblxuICBmdW5jdGlvbiBDb2xsYXBzZWRJdGVtQWN0aW9ucygpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ29sbGFwc2VkSXRlbUFjdGlvbnMpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwuYXBwbHkoX3N1cGVyLCBbdGhpc10uY29uY2F0KGFyZ3MpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJwb3BvdmVyRGl2XCIsIG51bGwpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInN0YXRlXCIsIHtcbiAgICAgIHBvcG92ZXJPcGVuOiBmYWxzZVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInRvZ2dsZVBvcG92ZXJcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKHByZXZTdGF0ZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHBvcG92ZXJPcGVuOiAhcHJldlN0YXRlLnBvcG92ZXJPcGVuXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJjbG9zZVBvcG92ZXJcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBwb3BvdmVyT3BlbjogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uUG9wb3ZlckJsdXJcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgLy8geW91IG11c3QgYmUgYXNraW5nLi4uIFdURj8gSSBrbm93Li4uIGJ1dCB0aGlzIHRpbWVvdXQgaXNcbiAgICAgIC8vIHJlcXVpcmVkIHRvIG1ha2Ugc3VyZSB3ZSBwcm9jZXNzIHRoZSBvbkJsdXIgZXZlbnRzIGFmdGVyIHRoZSBpbml0aWFsXG4gICAgICAvLyBldmVudCBjeWNsZS4gUmVmZXJlbmNlOlxuICAgICAgLy8gaHR0cHM6Ly9tZWRpdW0uY29tL0BqZXNzZWJlYWNoL2RlYWxpbmctd2l0aC1mb2N1cy1hbmQtYmx1ci1pbi1hLWNvbXBvc2l0ZS13aWRnZXQtaW4tcmVhY3QtOTBkM2MzYjQ5YTliXG4gICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFfdGhpcy5wb3BvdmVyRGl2LmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpICYmIF90aGlzLnByb3BzLm9uQmx1cikge1xuICAgICAgICAgIF90aGlzLnByb3BzLm9uQmx1cigpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJyZWdpc3RlclBvcG92ZXJEaXZcIiwgZnVuY3Rpb24gKHBvcG92ZXJEaXYpIHtcbiAgICAgIGlmICghX3RoaXMucG9wb3ZlckRpdikge1xuICAgICAgICBfdGhpcy5wb3BvdmVyRGl2ID0gcG9wb3ZlckRpdjtcbiAgICAgICAgX3RoaXMucG9wb3ZlckRpdiAmJiBfdGhpcy5wb3BvdmVyRGl2LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3Vzb3V0JywgX3RoaXMub25Qb3BvdmVyQmx1cik7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25DbGlja0l0ZW1cIiwgZnVuY3Rpb24gKG9uQ2xpY2tBY3Rpb24pIHtcbiAgICAgIF90aGlzLmNsb3NlUG9wb3ZlcigpO1xuXG4gICAgICBpZiAob25DbGlja0FjdGlvbikge1xuICAgICAgICBvbkNsaWNrQWN0aW9uKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoQ29sbGFwc2VkSXRlbUFjdGlvbnMsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgaWYgKHRoaXMucG9wb3ZlckRpdikge1xuICAgICAgICB0aGlzLnBvcG92ZXJEaXYucmVtb3ZlRXZlbnRMaXN0ZW5lcignZm9jdXNvdXQnLCB0aGlzLm9uUG9wb3ZlckJsdXIpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgYWN0aW9ucyA9IF90aGlzJHByb3BzLmFjdGlvbnMsXG4gICAgICAgICAgaXRlbUlkID0gX3RoaXMkcHJvcHMuaXRlbUlkLFxuICAgICAgICAgIGl0ZW0gPSBfdGhpcyRwcm9wcy5pdGVtLFxuICAgICAgICAgIGFjdGlvbkVuYWJsZWQgPSBfdGhpcyRwcm9wcy5hY3Rpb25FbmFibGVkLFxuICAgICAgICAgIG9uRm9jdXMgPSBfdGhpcyRwcm9wcy5vbkZvY3VzLFxuICAgICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzLmNsYXNzTmFtZTtcbiAgICAgIHZhciBpc09wZW4gPSB0aGlzLnN0YXRlLnBvcG92ZXJPcGVuO1xuICAgICAgdmFyIGFsbERpc2FibGVkID0gdHJ1ZTtcbiAgICAgIHZhciBjb250cm9scyA9IGFjdGlvbnMucmVkdWNlKGZ1bmN0aW9uIChjb250cm9scywgYWN0aW9uLCBpbmRleCkge1xuICAgICAgICB2YXIga2V5ID0gXCJhY3Rpb25fXCIuY29uY2F0KGl0ZW1JZCwgXCJfXCIpLmNvbmNhdChpbmRleCk7XG4gICAgICAgIHZhciBhdmFpbGFibGUgPSBhY3Rpb24uYXZhaWxhYmxlID8gYWN0aW9uLmF2YWlsYWJsZShpdGVtKSA6IHRydWU7XG5cbiAgICAgICAgaWYgKCFhdmFpbGFibGUpIHtcbiAgICAgICAgICByZXR1cm4gY29udHJvbHM7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZW5hYmxlZCA9IGFjdGlvbkVuYWJsZWQoYWN0aW9uKTtcbiAgICAgICAgYWxsRGlzYWJsZWQgPSBhbGxEaXNhYmxlZCAmJiAhZW5hYmxlZDtcblxuICAgICAgICBpZiAoYWN0aW9uSXNDdXN0b21JdGVtQWN0aW9uKGFjdGlvbikpIHtcbiAgICAgICAgICB2YXIgY3VzdG9tQWN0aW9uID0gYWN0aW9uO1xuICAgICAgICAgIHZhciBhY3Rpb25Db250cm9sID0gY3VzdG9tQWN0aW9uLnJlbmRlcihpdGVtLCBlbmFibGVkKTtcbiAgICAgICAgICB2YXIgYWN0aW9uQ29udHJvbE9uQ2xpY2sgPSBhY3Rpb25Db250cm9sICYmIGFjdGlvbkNvbnRyb2wucHJvcHMgJiYgYWN0aW9uQ29udHJvbC5wcm9wcy5vbkNsaWNrO1xuICAgICAgICAgIGNvbnRyb2xzLnB1c2goX19fRW1vdGlvbkpTWChFdWlDb250ZXh0TWVudUl0ZW0sIHtcbiAgICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgICAgb25DbGljazogZnVuY3Rpb24gb25DbGljaygpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMi5vbkNsaWNrSXRlbShhY3Rpb25Db250cm9sT25DbGljayA/IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWN0aW9uQ29udHJvbE9uQ2xpY2soaXRlbSk7XG4gICAgICAgICAgICAgIH0gOiB1bmRlZmluZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIGFjdGlvbkNvbnRyb2wpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgX29uQ2xpY2sgPSBhY3Rpb24ub25DbGljayxcbiAgICAgICAgICAgICAgbmFtZSA9IGFjdGlvbi5uYW1lLFxuICAgICAgICAgICAgICBocmVmID0gYWN0aW9uLmhyZWYsXG4gICAgICAgICAgICAgIHRhcmdldCA9IGFjdGlvbi50YXJnZXQsXG4gICAgICAgICAgICAgIGRhdGFUZXN0U3ViaiA9IGFjdGlvblsnZGF0YS10ZXN0LXN1YmonXTtcbiAgICAgICAgICB2YXIgYnV0dG9uSWNvbiA9IGFjdGlvbi5pY29uO1xuICAgICAgICAgIHZhciBpY29uO1xuXG4gICAgICAgICAgaWYgKGJ1dHRvbkljb24pIHtcbiAgICAgICAgICAgIGljb24gPSBpc1N0cmluZyhidXR0b25JY29uKSA/IGJ1dHRvbkljb24gOiBidXR0b25JY29uKGl0ZW0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBidXR0b25Db250ZW50ID0gdHlwZW9mIG5hbWUgPT09ICdmdW5jdGlvbicgPyBuYW1lKGl0ZW0pIDogbmFtZTtcbiAgICAgICAgICBjb250cm9scy5wdXNoKF9fX0Vtb3Rpb25KU1goRXVpQ29udGV4dE1lbnVJdGVtLCB7XG4gICAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICAgIGRpc2FibGVkOiAhZW5hYmxlZCxcbiAgICAgICAgICAgIGhyZWY6IGhyZWYsXG4gICAgICAgICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgICAgICAgIGljb246IGljb24sXG4gICAgICAgICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IGRhdGFUZXN0U3ViaixcbiAgICAgICAgICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soKSB7XG4gICAgICAgICAgICAgIHJldHVybiBfdGhpczIub25DbGlja0l0ZW0oX29uQ2xpY2sgPyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9vbkNsaWNrKGl0ZW0pO1xuICAgICAgICAgICAgICB9IDogdW5kZWZpbmVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCBidXR0b25Db250ZW50KSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29udHJvbHM7XG4gICAgICB9LCBbXSk7XG5cbiAgICAgIHZhciBwb3BvdmVyQnV0dG9uID0gX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgIHRva2VuOiBcImV1aUNvbGxhcHNlZEl0ZW1BY3Rpb25zLmFsbEFjdGlvbnNcIixcbiAgICAgICAgZGVmYXVsdDogXCJBbGwgYWN0aW9uc1wiXG4gICAgICB9LCBmdW5jdGlvbiAoYWxsQWN0aW9ucykge1xuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlCdXR0b25JY29uLCB7XG4gICAgICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWUsXG4gICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IGFsbEFjdGlvbnMsXG4gICAgICAgICAgaWNvblR5cGU6IFwiYm94ZXNIb3Jpem9udGFsXCIsXG4gICAgICAgICAgY29sb3I6IFwidGV4dFwiLFxuICAgICAgICAgIGlzRGlzYWJsZWQ6IGFsbERpc2FibGVkLFxuICAgICAgICAgIG9uQ2xpY2s6IF90aGlzMi50b2dnbGVQb3BvdmVyLmJpbmQoX3RoaXMyKSxcbiAgICAgICAgICBvbkZvY3VzOiBvbkZvY3VzLFxuICAgICAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogXCJldWlDb2xsYXBzZWRJdGVtQWN0aW9uc0J1dHRvblwiXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHZhciB3aXRoVG9vbHRpcCA9ICFhbGxEaXNhYmxlZCAmJiBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgdG9rZW46IFwiZXVpQ29sbGFwc2VkSXRlbUFjdGlvbnMuYWxsQWN0aW9uc1wiLFxuICAgICAgICBkZWZhdWx0OiBcIkFsbCBhY3Rpb25zXCJcbiAgICAgIH0sIGZ1bmN0aW9uIChhbGxBY3Rpb25zKSB7XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVRvb2xUaXAsIHtcbiAgICAgICAgICBjb250ZW50OiBhbGxBY3Rpb25zLFxuICAgICAgICAgIGRlbGF5OiBcImxvbmdcIlxuICAgICAgICB9LCBwb3BvdmVyQnV0dG9uKTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlQb3BvdmVyLCB7XG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lLFxuICAgICAgICBwb3BvdmVyUmVmOiB0aGlzLnJlZ2lzdGVyUG9wb3ZlckRpdixcbiAgICAgICAgaWQ6IFwiXCIuY29uY2F0KGl0ZW1JZCwgXCItYWN0aW9uc1wiKSxcbiAgICAgICAgaXNPcGVuOiBpc09wZW4sXG4gICAgICAgIGJ1dHRvbjogd2l0aFRvb2x0aXAgfHwgcG9wb3ZlckJ1dHRvbixcbiAgICAgICAgY2xvc2VQb3BvdmVyOiB0aGlzLmNsb3NlUG9wb3ZlcixcbiAgICAgICAgcGFuZWxQYWRkaW5nU2l6ZTogXCJub25lXCIsXG4gICAgICAgIGFuY2hvclBvc2l0aW9uOiBcImxlZnRDZW50ZXJcIlxuICAgICAgfSwgX19fRW1vdGlvbkpTWChFdWlDb250ZXh0TWVudVBhbmVsLCB7XG4gICAgICAgIGl0ZW1zOiBjb250cm9sc1xuICAgICAgfSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBDb2xsYXBzZWRJdGVtQWN0aW9ucztcbn0oQ29tcG9uZW50KTtcbkNvbGxhcHNlZEl0ZW1BY3Rpb25zLnByb3BUeXBlcyA9IHtcbiAgYWN0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAvKipcbiAgICAgICAqIFRoZSB0eXBlIG9mIGFjdGlvblxuICAgICAgICovXG4gICAgdHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImJ1dHRvblwiXSksIFByb3BUeXBlcy5vbmVPZihbXCJpY29uXCJdKS5pc1JlcXVpcmVkXSksXG5cbiAgICAvKipcbiAgICAgICAqIERlZmluZXMgdGhlIGNvbG9yIG9mIHRoZSBidXR0b25cbiAgICAgICAqL1xuICAgIGNvbG9yOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wicHJpbWFyeVwiLCBcImRhbmdlclwiLCBcInRleHRcIiwgXCJnaG9zdFwiLCBcInN1Y2Nlc3NcIiwgXCJ3YXJuaW5nXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXSksIFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJwcmltYXJ5XCIsIFwiYWNjZW50XCIsIFwic3VjY2Vzc1wiLCBcIndhcm5pbmdcIiwgXCJkYW5nZXJcIiwgXCJnaG9zdFwiLCBcInRleHRcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRdKV0pLFxuXG4gICAgLyoqXG4gICAgICAgKiBUaGUgZGlzcGxheSBuYW1lIG9mIHRoZSBhY3Rpb24gKHdpbGwgYmUgdGhlIGJ1dHRvbiBjYXB0aW9uKVxuICAgICAgICovXG5cbiAgICAvKipcbiAgICAgICAqIFRoZSBkaXNwbGF5IG5hbWUgb2YgdGhlIGFjdGlvbiAod2lsbCBiZSB0aGUgYnV0dG9uIGNhcHRpb24pXG4gICAgICAgKi9cbiAgICBuYW1lOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCxcblxuICAgIC8qKlxuICAgICAgICogRGVzY3JpYmVzIHRoZSBhY3Rpb24gKHdpbGwgYmUgdGhlIGJ1dHRvbiB0aXRsZSlcbiAgICAgICAqL1xuXG4gICAgLyoqXG4gICAgICAgKiBEZXNjcmliZXMgdGhlIGFjdGlvbiAod2lsbCBiZSB0aGUgYnV0dG9uIHRpdGxlKVxuICAgICAgICovXG4gICAgZGVzY3JpcHRpb246IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcblxuICAgIC8qKlxuICAgICAgICogQSBoYW5kbGVyIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgdGhlIGFjdGlvblxuICAgICAgICovXG5cbiAgICAvKipcbiAgICAgICAqIEEgaGFuZGxlciBmdW5jdGlvbiB0byBleGVjdXRlIHRoZSBhY3Rpb25cbiAgICAgICAqL1xuICAgIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICAgIGhyZWY6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgdGFyZ2V0OiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gICAgLyoqXG4gICAgICAgKiBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBhY3Rpb24gaXMgYXZhaWxhYmxlXG4gICAgICAgKi9cblxuICAgIC8qKlxuICAgICAgICogQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGRldGVybWluZXMgd2hldGhlciB0aGUgYWN0aW9uIGlzIGF2YWlsYWJsZVxuICAgICAgICovXG4gICAgYXZhaWxhYmxlOiBQcm9wVHlwZXMuZnVuYyxcblxuICAgIC8qKlxuICAgICAgICogQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGRldGVybWluZXMgd2hldGhlciB0aGUgYWN0aW9uIGlzIGVuYWJsZWRcbiAgICAgICAqL1xuXG4gICAgLyoqXG4gICAgICAgKiBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBhY3Rpb24gaXMgZW5hYmxlZFxuICAgICAgICovXG4gICAgZW5hYmxlZDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgaXNQcmltYXJ5OiBQcm9wVHlwZXMuYm9vbCxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgICAvKipcbiAgICAgICAqIEFzc29jaWF0ZXMgYW4gaWNvbiB3aXRoIHRoZSBidXR0b25cbiAgICAgICAqL1xuICAgIGljb246IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhY2Nlc3NpYmlsaXR5XCIsIFwiYWRkRGF0YUFwcFwiLCBcImFkdmFuY2VkU2V0dGluZ3NBcHBcIiwgXCJhZ2VudEFwcFwiLCBcImFnZ3JlZ2F0ZVwiLCBcImFsZXJ0XCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbG9ja1wiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQUNpcmNsZUZpbGxlZFwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRvY3VtZW50XCIsIFwiZG9jdW1lbnRFZGl0XCIsIFwiZG9jdW1lbnRhdGlvblwiLCBcImRvY3VtZW50c1wiLCBcImRvdFwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJleGl0XCIsIFwiZXhwYW5kXCIsIFwiZXhwYW5kTWluaVwiLCBcImV4cG9ydEFjdGlvblwiLCBcImV5ZVwiLCBcImV5ZUNsb3NlZFwiLCBcImZhY2VIYXBweVwiLCBcImZhY2VOZXV0cmFsXCIsIFwiZmFjZVNhZFwiLCBcImZpbGViZWF0QXBwXCIsIFwiZmlsdGVyXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhDbG9zZVwiLCBcImluZGV4RWRpdFwiLCBcImluZGV4Rmx1c2hcIiwgXCJpbmRleE1hbmFnZW1lbnRBcHBcIiwgXCJpbmRleE1hcHBpbmdcIiwgXCJpbmRleE9wZW5cIiwgXCJpbmRleFBhdHRlcm5BcHBcIiwgXCJpbmRleFJvbGx1cEFwcFwiLCBcImluZGV4UnVudGltZVwiLCBcImluZGV4U2V0dGluZ3NcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibmFtZXNwYWNlXCIsIFwibmVzdGVkXCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZWxpbmVBcHBcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzQXBwXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpb25BcHBcIiwgXCJ0aW1lUmVmcmVzaFwiLCBcInRpbWVzbGlkZXJcIiwgXCJ0cmFpbmluZ1wiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZF0pXG4gIH0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgLyoqXG4gICAgICAgKiBUaGUgZnVuY3Rpb24gdGhhdCByZW5kZXJzIHRoZSBhY3Rpb24uIE5vdGUgdGhhdCB0aGUgcmV0dXJuZWQgbm9kZSBpcyBleHBlY3RlZCB0byBoYXZlIGBvbkZvY3VzYCBhbmQgYG9uQmx1cmAgZnVuY3Rpb25zXG4gICAgICAgKi9cbiAgICByZW5kZXI6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG5cbiAgICAvKipcbiAgICAgICAqIEEgY2FsbGJhY2sgdGhhdCBkZWZpbmVzIHdoZXRoZXIgdGhlIGFjdGlvbiBpcyBhdmFpbGFibGVcbiAgICAgICAqL1xuICAgIGF2YWlsYWJsZTogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgICAvKipcbiAgICAgICAqIEEgY2FsbGJhY2sgdGhhdCBkZWZpbmVzIHdoZXRoZXIgdGhlIGFjdGlvbiBpcyBlbmFibGVkXG4gICAgICAgKi9cbiAgICBlbmFibGVkOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBpc1ByaW1hcnk6IFByb3BUeXBlcy5ib29sXG4gIH0pLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkKS5pc1JlcXVpcmVkLFxuICBpdGVtOiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsXG4gIGl0ZW1JZDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLFxuICBhY3Rpb25FbmFibGVkOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIG9uRm9jdXM6IFByb3BUeXBlcy5mdW5jLFxuICBvbkJsdXI6IFByb3BUeXBlcy5mdW5jXG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgRGVmYXVsdEl0ZW1BY3Rpb24gfSBmcm9tICcuL2RlZmF1bHRfaXRlbV9hY3Rpb24nO1xuaW1wb3J0IHsgQ3VzdG9tSXRlbUFjdGlvbiB9IGZyb20gJy4vY3VzdG9tX2l0ZW1fYWN0aW9uJztcbmltcG9ydCB7IGlzQ3VzdG9tSXRlbUFjdGlvbiB9IGZyb20gJy4vYWN0aW9uX3R5cGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV4cGFuZGVkSXRlbUFjdGlvbnMgPSBmdW5jdGlvbiBFeHBhbmRlZEl0ZW1BY3Rpb25zKF9yZWYpIHtcbiAgdmFyIGFjdGlvbnMgPSBfcmVmLmFjdGlvbnMsXG4gICAgICBpdGVtSWQgPSBfcmVmLml0ZW1JZCxcbiAgICAgIGl0ZW0gPSBfcmVmLml0ZW0sXG4gICAgICBhY3Rpb25FbmFibGVkID0gX3JlZi5hY3Rpb25FbmFibGVkLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWU7XG4gIHZhciBtb3JlVGhhblRocmVlID0gYWN0aW9ucy5sZW5ndGggPiAyO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChSZWFjdC5GcmFnbWVudCwgbnVsbCwgYWN0aW9ucy5yZWR1Y2UoZnVuY3Rpb24gKHRvb2xzLCBhY3Rpb24sIGluZGV4KSB7XG4gICAgdmFyIGF2YWlsYWJsZSA9IGFjdGlvbi5hdmFpbGFibGUgPyBhY3Rpb24uYXZhaWxhYmxlKGl0ZW0pIDogdHJ1ZTtcblxuICAgIGlmICghYXZhaWxhYmxlKSB7XG4gICAgICByZXR1cm4gdG9vbHM7XG4gICAgfVxuXG4gICAgdmFyIGVuYWJsZWQgPSBhY3Rpb25FbmFibGVkKGFjdGlvbik7XG4gICAgdmFyIGtleSA9IFwiaXRlbV9hY3Rpb25fXCIuY29uY2F0KGl0ZW1JZCwgXCJfXCIpLmNvbmNhdChpbmRleCk7XG4gICAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKGNsYXNzTmFtZSwge1xuICAgICAgZXhwYW5kZWRJdGVtQWN0aW9uc19fY29tcGxldGVseUhpZGU6IG1vcmVUaGFuVGhyZWUgJiYgaW5kZXggPCAyXG4gICAgfSk7XG5cbiAgICBpZiAoaXNDdXN0b21JdGVtQWN0aW9uKGFjdGlvbikpIHtcbiAgICAgIC8vIGN1c3RvbSBhY3Rpb24gaGFzIGEgcmVuZGVyIGZ1bmN0aW9uXG4gICAgICB0b29scy5wdXNoKF9fX0Vtb3Rpb25KU1goQ3VzdG9tSXRlbUFjdGlvbiwge1xuICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgIGFjdGlvbjogYWN0aW9uLFxuICAgICAgICBlbmFibGVkOiBlbmFibGVkLFxuICAgICAgICBpdGVtOiBpdGVtXG4gICAgICB9KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRvb2xzLnB1c2goX19fRW1vdGlvbkpTWChEZWZhdWx0SXRlbUFjdGlvbiwge1xuICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICBhY3Rpb246IGFjdGlvbixcbiAgICAgICAgZW5hYmxlZDogZW5hYmxlZCxcbiAgICAgICAgaXRlbTogaXRlbVxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIHJldHVybiB0b29scztcbiAgfSwgW10pKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wcmVkaWNhdGUnO1xuaW1wb3J0IHsgRXVpQnV0dG9uRW1wdHksIEV1aUJ1dHRvbkljb24gfSBmcm9tICcuLi9idXR0b24nO1xuaW1wb3J0IHsgRXVpVG9vbFRpcCB9IGZyb20gJy4uL3Rvb2xfdGlwJztcbmltcG9ydCB7IHVzZUdlbmVyYXRlZEh0bWxJZCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FjY2Vzc2liaWxpdHknO1xuaW1wb3J0IHsgRXVpU2NyZWVuUmVhZGVyT25seSB9IGZyb20gJy4uL2FjY2Vzc2liaWxpdHknO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbi8vIEluIG9yZGVyIHRvIHVzZSBnZW5lcmljcyB3aXRoIGFuIGFycm93IGZ1bmN0aW9uIGluc2lkZSBhIC50c3ggZmlsZSwgaXQncyBuZWNlc3NhcnkgdG8gdXNlXG4vLyB0aGlzIGBleHRlbmRzYCBoYWNrIGFuZCBkZWNsYXJlIHRoZSB0eXBlcyBhcyBzaG93biwgaW5zdGVhZCBvZiBkZWNsYXJpbmcgdGhlIGNvbnN0IGFzIGFcbi8vIEZ1bmN0aW9uQ29tcG9uZW50XG5leHBvcnQgdmFyIERlZmF1bHRJdGVtQWN0aW9uID0gZnVuY3Rpb24gRGVmYXVsdEl0ZW1BY3Rpb24oX3JlZikge1xuICB2YXIgYWN0aW9uID0gX3JlZi5hY3Rpb24sXG4gICAgICBlbmFibGVkID0gX3JlZi5lbmFibGVkLFxuICAgICAgaXRlbSA9IF9yZWYuaXRlbSxcbiAgICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lO1xuXG4gIGlmICghYWN0aW9uLm9uQ2xpY2sgJiYgIWFjdGlvbi5ocmVmKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IHJlbmRlciBpdGVtIGFjdGlvbiBbXCIuY29uY2F0KGFjdGlvbi5uYW1lLCBcIl0uIE1pc3NpbmcgcmVxdWlyZWQgJ29uQ2xpY2snIGNhbGxiYWNrXFxuICAgICAgb3IgJ2hyZWYnIHN0cmluZy4gSWYgeW91IHdhbnQgdG8gcHJvdmlkZSBhIGN1c3RvbSBhY3Rpb24gY29udHJvbCwgbWFrZSBzdXJlIHRvIGRlZmluZSB0aGUgJ3JlbmRlcicgY2FsbGJhY2tcIikpO1xuICB9XG5cbiAgdmFyIG9uQ2xpY2sgPSBhY3Rpb24ub25DbGljayA/IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gYWN0aW9uLm9uQ2xpY2soaXRlbSk7XG4gIH0gOiB1bmRlZmluZWQ7XG4gIHZhciBidXR0b25Db2xvciA9IGFjdGlvbi5jb2xvcjtcbiAgdmFyIGNvbG9yID0gJ3ByaW1hcnknO1xuXG4gIGlmIChidXR0b25Db2xvcikge1xuICAgIGNvbG9yID0gaXNTdHJpbmcoYnV0dG9uQ29sb3IpID8gYnV0dG9uQ29sb3IgOiBidXR0b25Db2xvcihpdGVtKTtcbiAgfVxuXG4gIHZhciBidXR0b25JY29uID0gYWN0aW9uLmljb247XG4gIHZhciBpY29uO1xuXG4gIGlmIChidXR0b25JY29uKSB7XG4gICAgaWNvbiA9IGlzU3RyaW5nKGJ1dHRvbkljb24pID8gYnV0dG9uSWNvbiA6IGJ1dHRvbkljb24oaXRlbSk7XG4gIH1cblxuICB2YXIgYnV0dG9uO1xuICB2YXIgYWN0aW9uQ29udGVudCA9IHR5cGVvZiBhY3Rpb24ubmFtZSA9PT0gJ2Z1bmN0aW9uJyA/IGFjdGlvbi5uYW1lKGl0ZW0pIDogYWN0aW9uLm5hbWU7XG4gIHZhciBhcmlhTGFiZWxJZCA9IHVzZUdlbmVyYXRlZEh0bWxJZCgpO1xuXG4gIGlmIChhY3Rpb24udHlwZSA9PT0gJ2ljb24nKSB7XG4gICAgaWYgKCFpY29uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgcmVuZGVyIGl0ZW0gYWN0aW9uIFtcIi5jb25jYXQoYWN0aW9uLm5hbWUsIFwiXS4gSXQgaXMgY29uZmlndXJlZCB0byByZW5kZXIgYXMgYW4gaWNvbiBidXQgbm9cXG4gICAgICBpY29uIGlzIHByb3ZpZGVkLiBNYWtlIHN1cmUgdG8gc2V0IHRoZSAnaWNvbicgcHJvcGVydHkgb2YgdGhlIGFjdGlvblwiKSk7XG4gICAgfVxuXG4gICAgYnV0dG9uID0gX19fRW1vdGlvbkpTWChSZWFjdC5GcmFnbWVudCwgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlCdXR0b25JY29uLCB7XG4gICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZSxcbiAgICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IGFyaWFMYWJlbElkLFxuICAgICAgaXNEaXNhYmxlZDogIWVuYWJsZWQsXG4gICAgICBjb2xvcjogY29sb3IsXG4gICAgICBpY29uVHlwZTogaWNvbixcbiAgICAgIG9uQ2xpY2s6IG9uQ2xpY2ssXG4gICAgICBocmVmOiBhY3Rpb24uaHJlZixcbiAgICAgIHRhcmdldDogYWN0aW9uLnRhcmdldCxcbiAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogYWN0aW9uWydkYXRhLXRlc3Qtc3ViaiddXG4gICAgfSksIF9fX0Vtb3Rpb25KU1goRXVpU2NyZWVuUmVhZGVyT25seSwgbnVsbCwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgICAgaWQ6IGFyaWFMYWJlbElkXG4gICAgfSwgYWN0aW9uQ29udGVudCkpKTtcbiAgfSBlbHNlIHtcbiAgICBidXR0b24gPSBfX19FbW90aW9uSlNYKEV1aUJ1dHRvbkVtcHR5LCB7XG4gICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZSxcbiAgICAgIHNpemU6IFwic1wiLFxuICAgICAgaXNEaXNhYmxlZDogIWVuYWJsZWQsXG4gICAgICBjb2xvcjogY29sb3IsXG4gICAgICBpY29uVHlwZTogaWNvbixcbiAgICAgIG9uQ2xpY2s6IG9uQ2xpY2ssXG4gICAgICBocmVmOiBhY3Rpb24uaHJlZixcbiAgICAgIHRhcmdldDogYWN0aW9uLnRhcmdldCxcbiAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogYWN0aW9uWydkYXRhLXRlc3Qtc3ViaiddLFxuICAgICAgZmx1c2g6IFwicmlnaHRcIlxuICAgIH0sIGFjdGlvbkNvbnRlbnQpO1xuICB9XG5cbiAgcmV0dXJuIGVuYWJsZWQgJiYgYWN0aW9uLmRlc2NyaXB0aW9uID8gX19fRW1vdGlvbkpTWChFdWlUb29sVGlwLCB7XG4gICAgY29udGVudDogYWN0aW9uLmRlc2NyaXB0aW9uLFxuICAgIGRlbGF5OiBcImxvbmdcIlxuICB9LCBidXR0b24pIDogYnV0dG9uO1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQsIGNsb25lRWxlbWVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEN1c3RvbUl0ZW1BY3Rpb24gPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEN1c3RvbUl0ZW1BY3Rpb24sIF9Db21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoQ3VzdG9tSXRlbUFjdGlvbik7XG5cbiAgZnVuY3Rpb24gQ3VzdG9tSXRlbUFjdGlvbihwcm9wcykge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBDdXN0b21JdGVtQWN0aW9uKTtcblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgcHJvcHMpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm1vdW50ZWRcIiwgdm9pZCAwKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkZvY3VzXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChfdGhpcy5tb3VudGVkKSB7XG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBoYXNGb2N1czogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkJsdXJcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKF90aGlzLm1vdW50ZWQpIHtcbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGhhc0ZvY3VzOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJoYXNGb2N1c1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3RoaXMuc3RhdGUuaGFzRm9jdXM7XG4gICAgfSk7XG5cbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGhhc0ZvY3VzOiBmYWxzZVxuICAgIH07IC8vIHdoaWxlIGdlbmVyYWxseSBjb25zaWRlcmVkIGFuIGFudGktcGF0dGVybiwgaGVyZSB3ZSByZXF1aXJlXG4gICAgLy8gdG8gZG8gdGhhdCBhcyB0aGUgb25Gb2N1cy9vbkJsdXIgZXZlbnRzIG9mIHRoZSBhY3Rpb24gY29udHJvbHNcbiAgICAvLyBtYXkgdHJpZ2dlciB3aGlsZSB0aGlzIGNvbXBvbmVudCBpcyB1bm1vdW50ZWQuIEFuIGFsdGVybmF0aXZlXG4gICAgLy8gKGF0IGxlYXN0IHRoZSB3b3JrYXJvdW5kcyBzdWdnZXN0ZWQgYnkgcmVhY3QgaXMgdG8gdW5yZWdpc3RlclxuICAgIC8vIHRoZSBvbkZvY3VzL29uQmx1ciBsaXN0ZW5lcnMgZnJvbSB0aGUgYWN0aW9uIGNvbnRyb2xzLi4uIHRoaXNcbiAgICAvLyB1bmZvcnR1bmF0ZWx5IHdpbGwgbGVhZCB0byB1bm5lY2Vzc2FyaWx5IGNvbXBsZXggY29kZS4uLiBzbyB3ZSdsbFxuICAgIC8vIHN0aWNrIHRvIHRoaXMgYXBwcm9hY2ggZm9yIG5vdylcblxuICAgIF90aGlzLm1vdW50ZWQgPSBmYWxzZTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoQ3VzdG9tSXRlbUFjdGlvbiwgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICB0aGlzLm1vdW50ZWQgPSB0cnVlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIHRoaXMubW91bnRlZCA9IGZhbHNlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBhY3Rpb24gPSBfdGhpcyRwcm9wcy5hY3Rpb24sXG4gICAgICAgICAgZW5hYmxlZCA9IF90aGlzJHByb3BzLmVuYWJsZWQsXG4gICAgICAgICAgaXRlbSA9IF90aGlzJHByb3BzLml0ZW0sXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMuY2xhc3NOYW1lO1xuICAgICAgdmFyIHRvb2wgPSBhY3Rpb24ucmVuZGVyKGl0ZW0sIGVuYWJsZWQpO1xuICAgICAgdmFyIGNsb25lZFRvb2wgPSAvKiNfX1BVUkVfXyovY2xvbmVFbGVtZW50KHRvb2wsIHtcbiAgICAgICAgb25Gb2N1czogdGhpcy5vbkZvY3VzLFxuICAgICAgICBvbkJsdXI6IHRoaXMub25CbHVyXG4gICAgICB9KTtcbiAgICAgIHZhciBzdHlsZSA9IHRoaXMuaGFzRm9jdXMoKSA/IHtcbiAgICAgICAgb3BhY2l0eTogMVxuICAgICAgfSA6IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgICAgc3R5bGU6IHN0eWxlLFxuICAgICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZVxuICAgICAgfSwgY2xvbmVkVG9vbCk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEN1c3RvbUl0ZW1BY3Rpb247XG59KENvbXBvbmVudCk7XG5DdXN0b21JdGVtQWN0aW9uLnByb3BUeXBlcyA9IHtcbiAgYWN0aW9uOiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsXG4gIGVuYWJsZWQ6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIGl0ZW06IFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIGluZGV4OiBQcm9wVHlwZXMubnVtYmVyXG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuZXhwb3J0IHZhciBpc0N1c3RvbUl0ZW1BY3Rpb24gPSBmdW5jdGlvbiBpc0N1c3RvbUl0ZW1BY3Rpb24oYWN0aW9uKSB7XG4gIHJldHVybiBhY3Rpb24uaGFzT3duUHJvcGVydHkoJ3JlbmRlcicpO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBFdWlTcGFjZXIgfSBmcm9tICcuLi9zcGFjZXInO1xuaW1wb3J0IHsgRXVpVGFibGVQYWdpbmF0aW9uIH0gZnJvbSAnLi4vdGFibGUnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgZGVmYXVsdHMgPSB7XG4gIHBhZ2VTaXplT3B0aW9uczogWzEwLCAyNSwgNTBdXG59O1xuZXhwb3J0IHZhciBQYWdpbmF0aW9uQmFyID0gZnVuY3Rpb24gUGFnaW5hdGlvbkJhcihfcmVmKSB7XG4gIHZhciBwYWdpbmF0aW9uID0gX3JlZi5wYWdpbmF0aW9uLFxuICAgICAgb25QYWdlU2l6ZUNoYW5nZSA9IF9yZWYub25QYWdlU2l6ZUNoYW5nZSxcbiAgICAgIG9uUGFnZUNoYW5nZSA9IF9yZWYub25QYWdlQ2hhbmdlLFxuICAgICAgYXJpYUNvbnRyb2xzID0gX3JlZlsnYXJpYS1jb250cm9scyddLFxuICAgICAgYXJpYUxhYmVsID0gX3JlZlsnYXJpYS1sYWJlbCddO1xuICB2YXIgcGFnZVNpemVPcHRpb25zID0gcGFnaW5hdGlvbi5wYWdlU2l6ZU9wdGlvbnMgPyBwYWdpbmF0aW9uLnBhZ2VTaXplT3B0aW9ucyA6IGRlZmF1bHRzLnBhZ2VTaXplT3B0aW9ucztcbiAgdmFyIHBhZ2VDb3VudCA9IHBhZ2luYXRpb24ucGFnZVNpemUgPyBNYXRoLmNlaWwocGFnaW5hdGlvbi50b3RhbEl0ZW1Db3VudCAvIHBhZ2luYXRpb24ucGFnZVNpemUpIDogMTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAocGFnZUNvdW50IDwgcGFnaW5hdGlvbi5wYWdlSW5kZXggKyAxKSB7XG4gICAgICBvblBhZ2VDaGFuZ2UgPT09IG51bGwgfHwgb25QYWdlQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvblBhZ2VDaGFuZ2UocGFnZUNvdW50IC0gMSk7XG4gICAgfVxuICB9LCBbcGFnZUNvdW50LCBvblBhZ2VDaGFuZ2UsIHBhZ2luYXRpb25dKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlTcGFjZXIsIHtcbiAgICBzaXplOiBcIm1cIlxuICB9KSwgX19fRW1vdGlvbkpTWChFdWlUYWJsZVBhZ2luYXRpb24sIHtcbiAgICBhY3RpdmVQYWdlOiBwYWdpbmF0aW9uLnBhZ2VJbmRleCxcbiAgICBzaG93UGVyUGFnZU9wdGlvbnM6IHBhZ2luYXRpb24uc2hvd1BlclBhZ2VPcHRpb25zLFxuICAgIGl0ZW1zUGVyUGFnZTogcGFnaW5hdGlvbi5wYWdlU2l6ZSxcbiAgICBpdGVtc1BlclBhZ2VPcHRpb25zOiBwYWdlU2l6ZU9wdGlvbnMsXG4gICAgcGFnZUNvdW50OiBwYWdlQ291bnQsXG4gICAgb25DaGFuZ2VJdGVtc1BlclBhZ2U6IG9uUGFnZVNpemVDaGFuZ2UsXG4gICAgb25DaGFuZ2VQYWdlOiBvblBhZ2VDaGFuZ2UsXG4gICAgXCJhcmlhLWNvbnRyb2xzXCI6IGFyaWFDb250cm9scyxcbiAgICBcImFyaWEtbGFiZWxcIjogYXJpYUxhYmVsXG4gIH0pKTtcbn07IiwgImV4cG9ydCB2YXIgU3Vic2NyaWJhYmxlID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gU3Vic2NyaWJhYmxlKCkge1xuICAgIHRoaXMubGlzdGVuZXJzID0gW107XG4gIH1cblxuICB2YXIgX3Byb3RvID0gU3Vic2NyaWJhYmxlLnByb3RvdHlwZTtcblxuICBfcHJvdG8uc3Vic2NyaWJlID0gZnVuY3Rpb24gc3Vic2NyaWJlKGxpc3RlbmVyKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHZhciBjYWxsYmFjayA9IGxpc3RlbmVyIHx8IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfTtcblxuICAgIHRoaXMubGlzdGVuZXJzLnB1c2goY2FsbGJhY2spO1xuICAgIHRoaXMub25TdWJzY3JpYmUoKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMubGlzdGVuZXJzID0gX3RoaXMubGlzdGVuZXJzLmZpbHRlcihmdW5jdGlvbiAoeCkge1xuICAgICAgICByZXR1cm4geCAhPT0gY2FsbGJhY2s7XG4gICAgICB9KTtcblxuICAgICAgX3RoaXMub25VbnN1YnNjcmliZSgpO1xuICAgIH07XG4gIH07XG5cbiAgX3Byb3RvLmhhc0xpc3RlbmVycyA9IGZ1bmN0aW9uIGhhc0xpc3RlbmVycygpIHtcbiAgICByZXR1cm4gdGhpcy5saXN0ZW5lcnMubGVuZ3RoID4gMDtcbiAgfTtcblxuICBfcHJvdG8ub25TdWJzY3JpYmUgPSBmdW5jdGlvbiBvblN1YnNjcmliZSgpIHsvLyBEbyBub3RoaW5nXG4gIH07XG5cbiAgX3Byb3RvLm9uVW5zdWJzY3JpYmUgPSBmdW5jdGlvbiBvblVuc3Vic2NyaWJlKCkgey8vIERvIG5vdGhpbmdcbiAgfTtcblxuICByZXR1cm4gU3Vic2NyaWJhYmxlO1xufSgpOyIsICJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbi8vIFRZUEVTXG4vLyBVVElMU1xuZXhwb3J0IHZhciBpc1NlcnZlciA9IHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnO1xuZXhwb3J0IGZ1bmN0aW9uIG5vb3AoKSB7XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5leHBvcnQgZnVuY3Rpb24gZnVuY3Rpb25hbFVwZGF0ZSh1cGRhdGVyLCBpbnB1dCkge1xuICByZXR1cm4gdHlwZW9mIHVwZGF0ZXIgPT09ICdmdW5jdGlvbicgPyB1cGRhdGVyKGlucHV0KSA6IHVwZGF0ZXI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZFRpbWVvdXQodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgPj0gMCAmJiB2YWx1ZSAhPT0gSW5maW5pdHk7XG59XG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlUXVlcnlLZXlBcnJheSh2YWx1ZSkge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFt2YWx1ZV07XG59XG5leHBvcnQgZnVuY3Rpb24gZGlmZmVyZW5jZShhcnJheTEsIGFycmF5Mikge1xuICByZXR1cm4gYXJyYXkxLmZpbHRlcihmdW5jdGlvbiAoeCkge1xuICAgIHJldHVybiBhcnJheTIuaW5kZXhPZih4KSA9PT0gLTE7XG4gIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VBdChhcnJheSwgaW5kZXgsIHZhbHVlKSB7XG4gIHZhciBjb3B5ID0gYXJyYXkuc2xpY2UoMCk7XG4gIGNvcHlbaW5kZXhdID0gdmFsdWU7XG4gIHJldHVybiBjb3B5O1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRpbWVVbnRpbFN0YWxlKHVwZGF0ZWRBdCwgc3RhbGVUaW1lKSB7XG4gIHJldHVybiBNYXRoLm1heCh1cGRhdGVkQXQgKyAoc3RhbGVUaW1lIHx8IDApIC0gRGF0ZS5ub3coKSwgMCk7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VRdWVyeUFyZ3MoYXJnMSwgYXJnMiwgYXJnMykge1xuICBpZiAoIWlzUXVlcnlLZXkoYXJnMSkpIHtcbiAgICByZXR1cm4gYXJnMTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgYXJnMiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgYXJnMywge1xuICAgICAgcXVlcnlLZXk6IGFyZzEsXG4gICAgICBxdWVyeUZuOiBhcmcyXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gX2V4dGVuZHMoe30sIGFyZzIsIHtcbiAgICBxdWVyeUtleTogYXJnMVxuICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU11dGF0aW9uQXJncyhhcmcxLCBhcmcyLCBhcmczKSB7XG4gIGlmIChpc1F1ZXJ5S2V5KGFyZzEpKSB7XG4gICAgaWYgKHR5cGVvZiBhcmcyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gX2V4dGVuZHMoe30sIGFyZzMsIHtcbiAgICAgICAgbXV0YXRpb25LZXk6IGFyZzEsXG4gICAgICAgIG11dGF0aW9uRm46IGFyZzJcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgYXJnMiwge1xuICAgICAgbXV0YXRpb25LZXk6IGFyZzFcbiAgICB9KTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgYXJnMSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgYXJnMiwge1xuICAgICAgbXV0YXRpb25GbjogYXJnMVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBhcmcxKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUZpbHRlckFyZ3MoYXJnMSwgYXJnMiwgYXJnMykge1xuICByZXR1cm4gaXNRdWVyeUtleShhcmcxKSA/IFtfZXh0ZW5kcyh7fSwgYXJnMiwge1xuICAgIHF1ZXJ5S2V5OiBhcmcxXG4gIH0pLCBhcmczXSA6IFthcmcxIHx8IHt9LCBhcmcyXTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU11dGF0aW9uRmlsdGVyQXJncyhhcmcxLCBhcmcyKSB7XG4gIHJldHVybiBpc1F1ZXJ5S2V5KGFyZzEpID8gX2V4dGVuZHMoe30sIGFyZzIsIHtcbiAgICBtdXRhdGlvbktleTogYXJnMVxuICB9KSA6IGFyZzE7XG59XG5leHBvcnQgZnVuY3Rpb24gbWFwUXVlcnlTdGF0dXNGaWx0ZXIoYWN0aXZlLCBpbmFjdGl2ZSkge1xuICBpZiAoYWN0aXZlID09PSB0cnVlICYmIGluYWN0aXZlID09PSB0cnVlIHx8IGFjdGl2ZSA9PSBudWxsICYmIGluYWN0aXZlID09IG51bGwpIHtcbiAgICByZXR1cm4gJ2FsbCc7XG4gIH0gZWxzZSBpZiAoYWN0aXZlID09PSBmYWxzZSAmJiBpbmFjdGl2ZSA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gJ25vbmUnO1xuICB9IGVsc2Uge1xuICAgIC8vIEF0IHRoaXMgcG9pbnQsIGFjdGl2ZXxpbmFjdGl2ZSBjYW4gb25seSBiZSB0cnVlfGZhbHNlIG9yIGZhbHNlfHRydWVcbiAgICAvLyBzbywgd2hlbiBvbmx5IG9uZSB2YWx1ZSBpcyBwcm92aWRlZCwgdGhlIG1pc3Npbmcgb25lIGhhcyB0byBiZSB0aGUgbmVnYXRlZCB2YWx1ZVxuICAgIHZhciBpc0FjdGl2ZSA9IGFjdGl2ZSAhPSBudWxsID8gYWN0aXZlIDogIWluYWN0aXZlO1xuICAgIHJldHVybiBpc0FjdGl2ZSA/ICdhY3RpdmUnIDogJ2luYWN0aXZlJztcbiAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoUXVlcnkoZmlsdGVycywgcXVlcnkpIHtcbiAgdmFyIGFjdGl2ZSA9IGZpbHRlcnMuYWN0aXZlLFxuICAgICAgZXhhY3QgPSBmaWx0ZXJzLmV4YWN0LFxuICAgICAgZmV0Y2hpbmcgPSBmaWx0ZXJzLmZldGNoaW5nLFxuICAgICAgaW5hY3RpdmUgPSBmaWx0ZXJzLmluYWN0aXZlLFxuICAgICAgcHJlZGljYXRlID0gZmlsdGVycy5wcmVkaWNhdGUsXG4gICAgICBxdWVyeUtleSA9IGZpbHRlcnMucXVlcnlLZXksXG4gICAgICBzdGFsZSA9IGZpbHRlcnMuc3RhbGU7XG5cbiAgaWYgKGlzUXVlcnlLZXkocXVlcnlLZXkpKSB7XG4gICAgaWYgKGV4YWN0KSB7XG4gICAgICBpZiAocXVlcnkucXVlcnlIYXNoICE9PSBoYXNoUXVlcnlLZXlCeU9wdGlvbnMocXVlcnlLZXksIHF1ZXJ5Lm9wdGlvbnMpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFwYXJ0aWFsTWF0Y2hLZXkocXVlcnkucXVlcnlLZXksIHF1ZXJ5S2V5KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHZhciBxdWVyeVN0YXR1c0ZpbHRlciA9IG1hcFF1ZXJ5U3RhdHVzRmlsdGVyKGFjdGl2ZSwgaW5hY3RpdmUpO1xuXG4gIGlmIChxdWVyeVN0YXR1c0ZpbHRlciA9PT0gJ25vbmUnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGVsc2UgaWYgKHF1ZXJ5U3RhdHVzRmlsdGVyICE9PSAnYWxsJykge1xuICAgIHZhciBpc0FjdGl2ZSA9IHF1ZXJ5LmlzQWN0aXZlKCk7XG5cbiAgICBpZiAocXVlcnlTdGF0dXNGaWx0ZXIgPT09ICdhY3RpdmUnICYmICFpc0FjdGl2ZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChxdWVyeVN0YXR1c0ZpbHRlciA9PT0gJ2luYWN0aXZlJyAmJiBpc0FjdGl2ZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2Ygc3RhbGUgPT09ICdib29sZWFuJyAmJiBxdWVyeS5pc1N0YWxlKCkgIT09IHN0YWxlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBmZXRjaGluZyA9PT0gJ2Jvb2xlYW4nICYmIHF1ZXJ5LmlzRmV0Y2hpbmcoKSAhPT0gZmV0Y2hpbmcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAocHJlZGljYXRlICYmICFwcmVkaWNhdGUocXVlcnkpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5leHBvcnQgZnVuY3Rpb24gbWF0Y2hNdXRhdGlvbihmaWx0ZXJzLCBtdXRhdGlvbikge1xuICB2YXIgZXhhY3QgPSBmaWx0ZXJzLmV4YWN0LFxuICAgICAgZmV0Y2hpbmcgPSBmaWx0ZXJzLmZldGNoaW5nLFxuICAgICAgcHJlZGljYXRlID0gZmlsdGVycy5wcmVkaWNhdGUsXG4gICAgICBtdXRhdGlvbktleSA9IGZpbHRlcnMubXV0YXRpb25LZXk7XG5cbiAgaWYgKGlzUXVlcnlLZXkobXV0YXRpb25LZXkpKSB7XG4gICAgaWYgKCFtdXRhdGlvbi5vcHRpb25zLm11dGF0aW9uS2V5KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKGV4YWN0KSB7XG4gICAgICBpZiAoaGFzaFF1ZXJ5S2V5KG11dGF0aW9uLm9wdGlvbnMubXV0YXRpb25LZXkpICE9PSBoYXNoUXVlcnlLZXkobXV0YXRpb25LZXkpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFwYXJ0aWFsTWF0Y2hLZXkobXV0YXRpb24ub3B0aW9ucy5tdXRhdGlvbktleSwgbXV0YXRpb25LZXkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiBmZXRjaGluZyA9PT0gJ2Jvb2xlYW4nICYmIG11dGF0aW9uLnN0YXRlLnN0YXR1cyA9PT0gJ2xvYWRpbmcnICE9PSBmZXRjaGluZykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChwcmVkaWNhdGUgJiYgIXByZWRpY2F0ZShtdXRhdGlvbikpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBoYXNoUXVlcnlLZXlCeU9wdGlvbnMocXVlcnlLZXksIG9wdGlvbnMpIHtcbiAgdmFyIGhhc2hGbiA9IChvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLnF1ZXJ5S2V5SGFzaEZuKSB8fCBoYXNoUXVlcnlLZXk7XG4gIHJldHVybiBoYXNoRm4ocXVlcnlLZXkpO1xufVxuLyoqXG4gKiBEZWZhdWx0IHF1ZXJ5IGtleXMgaGFzaCBmdW5jdGlvbi5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaGFzaFF1ZXJ5S2V5KHF1ZXJ5S2V5KSB7XG4gIHZhciBhc0FycmF5ID0gZW5zdXJlUXVlcnlLZXlBcnJheShxdWVyeUtleSk7XG4gIHJldHVybiBzdGFibGVWYWx1ZUhhc2goYXNBcnJheSk7XG59XG4vKipcbiAqIEhhc2hlcyB0aGUgdmFsdWUgaW50byBhIHN0YWJsZSBoYXNoLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzdGFibGVWYWx1ZUhhc2godmFsdWUpIHtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlLCBmdW5jdGlvbiAoXywgdmFsKSB7XG4gICAgcmV0dXJuIGlzUGxhaW5PYmplY3QodmFsKSA/IE9iamVjdC5rZXlzKHZhbCkuc29ydCgpLnJlZHVjZShmdW5jdGlvbiAocmVzdWx0LCBrZXkpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gdmFsW2tleV07XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sIHt9KSA6IHZhbDtcbiAgfSk7XG59XG4vKipcbiAqIENoZWNrcyBpZiBrZXkgYGJgIHBhcnRpYWxseSBtYXRjaGVzIHdpdGgga2V5IGBhYC5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcGFydGlhbE1hdGNoS2V5KGEsIGIpIHtcbiAgcmV0dXJuIHBhcnRpYWxEZWVwRXF1YWwoZW5zdXJlUXVlcnlLZXlBcnJheShhKSwgZW5zdXJlUXVlcnlLZXlBcnJheShiKSk7XG59XG4vKipcbiAqIENoZWNrcyBpZiBgYmAgcGFydGlhbGx5IG1hdGNoZXMgd2l0aCBgYWAuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnRpYWxEZWVwRXF1YWwoYSwgYikge1xuICBpZiAoYSA9PT0gYikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBhICE9PSB0eXBlb2YgYikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChhICYmIGIgJiYgdHlwZW9mIGEgPT09ICdvYmplY3QnICYmIHR5cGVvZiBiID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiAhT2JqZWN0LmtleXMoYikuc29tZShmdW5jdGlvbiAoa2V5KSB7XG4gICAgICByZXR1cm4gIXBhcnRpYWxEZWVwRXF1YWwoYVtrZXldLCBiW2tleV0pO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYGFgIGlmIGBiYCBpcyBkZWVwbHkgZXF1YWwuXG4gKiBJZiBub3QsIGl0IHdpbGwgcmVwbGFjZSBhbnkgZGVlcGx5IGVxdWFsIGNoaWxkcmVuIG9mIGBiYCB3aXRoIHRob3NlIG9mIGBhYC5cbiAqIFRoaXMgY2FuIGJlIHVzZWQgZm9yIHN0cnVjdHVyYWwgc2hhcmluZyBiZXR3ZWVuIEpTT04gdmFsdWVzIGZvciBleGFtcGxlLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlRXF1YWxEZWVwKGEsIGIpIHtcbiAgaWYgKGEgPT09IGIpIHtcbiAgICByZXR1cm4gYTtcbiAgfVxuXG4gIHZhciBhcnJheSA9IEFycmF5LmlzQXJyYXkoYSkgJiYgQXJyYXkuaXNBcnJheShiKTtcblxuICBpZiAoYXJyYXkgfHwgaXNQbGFpbk9iamVjdChhKSAmJiBpc1BsYWluT2JqZWN0KGIpKSB7XG4gICAgdmFyIGFTaXplID0gYXJyYXkgPyBhLmxlbmd0aCA6IE9iamVjdC5rZXlzKGEpLmxlbmd0aDtcbiAgICB2YXIgYkl0ZW1zID0gYXJyYXkgPyBiIDogT2JqZWN0LmtleXMoYik7XG4gICAgdmFyIGJTaXplID0gYkl0ZW1zLmxlbmd0aDtcbiAgICB2YXIgY29weSA9IGFycmF5ID8gW10gOiB7fTtcbiAgICB2YXIgZXF1YWxJdGVtcyA9IDA7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJTaXplOyBpKyspIHtcbiAgICAgIHZhciBrZXkgPSBhcnJheSA/IGkgOiBiSXRlbXNbaV07XG4gICAgICBjb3B5W2tleV0gPSByZXBsYWNlRXF1YWxEZWVwKGFba2V5XSwgYltrZXldKTtcblxuICAgICAgaWYgKGNvcHlba2V5XSA9PT0gYVtrZXldKSB7XG4gICAgICAgIGVxdWFsSXRlbXMrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYVNpemUgPT09IGJTaXplICYmIGVxdWFsSXRlbXMgPT09IGFTaXplID8gYSA6IGNvcHk7XG4gIH1cblxuICByZXR1cm4gYjtcbn1cbi8qKlxuICogU2hhbGxvdyBjb21wYXJlIG9iamVjdHMuIE9ubHkgd29ya3Mgd2l0aCBvYmplY3RzIHRoYXQgYWx3YXlzIGhhdmUgdGhlIHNhbWUgcHJvcGVydGllcy5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc2hhbGxvd0VxdWFsT2JqZWN0cyhhLCBiKSB7XG4gIGlmIChhICYmICFiIHx8IGIgJiYgIWEpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmb3IgKHZhciBrZXkgaW4gYSkge1xuICAgIGlmIChhW2tleV0gIT09IGJba2V5XSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufSAvLyBDb3BpZWQgZnJvbTogaHR0cHM6Ly9naXRodWIuY29tL2pvbnNjaGxpbmtlcnQvaXMtcGxhaW4tb2JqZWN0XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1BsYWluT2JqZWN0KG8pIHtcbiAgaWYgKCFoYXNPYmplY3RQcm90b3R5cGUobykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gLy8gSWYgaGFzIG1vZGlmaWVkIGNvbnN0cnVjdG9yXG5cblxuICB2YXIgY3RvciA9IG8uY29uc3RydWN0b3I7XG5cbiAgaWYgKHR5cGVvZiBjdG9yID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9IC8vIElmIGhhcyBtb2RpZmllZCBwcm90b3R5cGVcblxuXG4gIHZhciBwcm90ID0gY3Rvci5wcm90b3R5cGU7XG5cbiAgaWYgKCFoYXNPYmplY3RQcm90b3R5cGUocHJvdCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gLy8gSWYgY29uc3RydWN0b3IgZG9lcyBub3QgaGF2ZSBhbiBPYmplY3Qtc3BlY2lmaWMgbWV0aG9kXG5cblxuICBpZiAoIXByb3QuaGFzT3duUHJvcGVydHkoJ2lzUHJvdG90eXBlT2YnKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSAvLyBNb3N0IGxpa2VseSBhIHBsYWluIE9iamVjdFxuXG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGhhc09iamVjdFByb3RvdHlwZShvKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykgPT09ICdbb2JqZWN0IE9iamVjdF0nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNRdWVyeUtleSh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fCBBcnJheS5pc0FycmF5KHZhbHVlKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0Vycm9yKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIEVycm9yO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHNsZWVwKHRpbWVvdXQpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgc2V0VGltZW91dChyZXNvbHZlLCB0aW1lb3V0KTtcbiAgfSk7XG59XG4vKipcbiAqIFNjaGVkdWxlcyBhIG1pY3JvdGFzay5cbiAqIFRoaXMgY2FuIGJlIHVzZWZ1bCB0byBzY2hlZHVsZSBzdGF0ZSB1cGRhdGVzIGFmdGVyIHJlbmRlcmluZy5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc2NoZWR1bGVNaWNyb3Rhc2soY2FsbGJhY2spIHtcbiAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbihjYWxsYmFjaykuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSk7XG4gIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldEFib3J0Q29udHJvbGxlcigpIHtcbiAgaWYgKHR5cGVvZiBBYm9ydENvbnRyb2xsZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICB9XG59IiwgImltcG9ydCBfaW5oZXJpdHNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZVwiO1xuaW1wb3J0IHsgU3Vic2NyaWJhYmxlIH0gZnJvbSAnLi9zdWJzY3JpYmFibGUnO1xuaW1wb3J0IHsgaXNTZXJ2ZXIgfSBmcm9tICcuL3V0aWxzJztcbmV4cG9ydCB2YXIgRm9jdXNNYW5hZ2VyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfU3Vic2NyaWJhYmxlKSB7XG4gIF9pbmhlcml0c0xvb3NlKEZvY3VzTWFuYWdlciwgX1N1YnNjcmliYWJsZSk7XG5cbiAgZnVuY3Rpb24gRm9jdXNNYW5hZ2VyKCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF90aGlzID0gX1N1YnNjcmliYWJsZS5jYWxsKHRoaXMpIHx8IHRoaXM7XG5cbiAgICBfdGhpcy5zZXR1cCA9IGZ1bmN0aW9uIChvbkZvY3VzKSB7XG4gICAgICB2YXIgX3dpbmRvdztcblxuICAgICAgaWYgKCFpc1NlcnZlciAmJiAoKF93aW5kb3cgPSB3aW5kb3cpID09IG51bGwgPyB2b2lkIDAgOiBfd2luZG93LmFkZEV2ZW50TGlzdGVuZXIpKSB7XG4gICAgICAgIHZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uIGxpc3RlbmVyKCkge1xuICAgICAgICAgIHJldHVybiBvbkZvY3VzKCk7XG4gICAgICAgIH07IC8vIExpc3RlbiB0byB2aXNpYmlsbGl0eWNoYW5nZSBhbmQgZm9jdXNcblxuXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgbGlzdGVuZXIsIGZhbHNlKTtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgbGlzdGVuZXIsIGZhbHNlKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAvLyBCZSBzdXJlIHRvIHVuc3Vic2NyaWJlIGlmIGEgbmV3IGhhbmRsZXIgaXMgc2V0XG4gICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCBsaXN0ZW5lcik7XG4gICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgbGlzdGVuZXIpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gRm9jdXNNYW5hZ2VyLnByb3RvdHlwZTtcblxuICBfcHJvdG8ub25TdWJzY3JpYmUgPSBmdW5jdGlvbiBvblN1YnNjcmliZSgpIHtcbiAgICBpZiAoIXRoaXMuY2xlYW51cCkge1xuICAgICAgdGhpcy5zZXRFdmVudExpc3RlbmVyKHRoaXMuc2V0dXApO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ub25VbnN1YnNjcmliZSA9IGZ1bmN0aW9uIG9uVW5zdWJzY3JpYmUoKSB7XG4gICAgaWYgKCF0aGlzLmhhc0xpc3RlbmVycygpKSB7XG4gICAgICB2YXIgX3RoaXMkY2xlYW51cDtcblxuICAgICAgKF90aGlzJGNsZWFudXAgPSB0aGlzLmNsZWFudXApID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRjbGVhbnVwLmNhbGwodGhpcyk7XG4gICAgICB0aGlzLmNsZWFudXAgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5zZXRFdmVudExpc3RlbmVyID0gZnVuY3Rpb24gc2V0RXZlbnRMaXN0ZW5lcihzZXR1cCkge1xuICAgIHZhciBfdGhpcyRjbGVhbnVwMixcbiAgICAgICAgX3RoaXMyID0gdGhpcztcblxuICAgIHRoaXMuc2V0dXAgPSBzZXR1cDtcbiAgICAoX3RoaXMkY2xlYW51cDIgPSB0aGlzLmNsZWFudXApID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRjbGVhbnVwMi5jYWxsKHRoaXMpO1xuICAgIHRoaXMuY2xlYW51cCA9IHNldHVwKGZ1bmN0aW9uIChmb2N1c2VkKSB7XG4gICAgICBpZiAodHlwZW9mIGZvY3VzZWQgPT09ICdib29sZWFuJykge1xuICAgICAgICBfdGhpczIuc2V0Rm9jdXNlZChmb2N1c2VkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIF90aGlzMi5vbkZvY3VzKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLnNldEZvY3VzZWQgPSBmdW5jdGlvbiBzZXRGb2N1c2VkKGZvY3VzZWQpIHtcbiAgICB0aGlzLmZvY3VzZWQgPSBmb2N1c2VkO1xuXG4gICAgaWYgKGZvY3VzZWQpIHtcbiAgICAgIHRoaXMub25Gb2N1cygpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ub25Gb2N1cyA9IGZ1bmN0aW9uIG9uRm9jdXMoKSB7XG4gICAgdGhpcy5saXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbiAobGlzdGVuZXIpIHtcbiAgICAgIGxpc3RlbmVyKCk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmlzRm9jdXNlZCA9IGZ1bmN0aW9uIGlzRm9jdXNlZCgpIHtcbiAgICBpZiAodHlwZW9mIHRoaXMuZm9jdXNlZCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICByZXR1cm4gdGhpcy5mb2N1c2VkO1xuICAgIH0gLy8gZG9jdW1lbnQgZ2xvYmFsIGNhbiBiZSB1bmF2YWlsYWJsZSBpbiByZWFjdCBuYXRpdmVcblxuXG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBbdW5kZWZpbmVkLCAndmlzaWJsZScsICdwcmVyZW5kZXInXS5pbmNsdWRlcyhkb2N1bWVudC52aXNpYmlsaXR5U3RhdGUpO1xuICB9O1xuXG4gIHJldHVybiBGb2N1c01hbmFnZXI7XG59KFN1YnNjcmliYWJsZSk7XG5leHBvcnQgdmFyIGZvY3VzTWFuYWdlciA9IG5ldyBGb2N1c01hbmFnZXIoKTsiLCAiaW1wb3J0IF9pbmhlcml0c0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlXCI7XG5pbXBvcnQgeyBTdWJzY3JpYmFibGUgfSBmcm9tICcuL3N1YnNjcmliYWJsZSc7XG5pbXBvcnQgeyBpc1NlcnZlciB9IGZyb20gJy4vdXRpbHMnO1xuZXhwb3J0IHZhciBPbmxpbmVNYW5hZ2VyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfU3Vic2NyaWJhYmxlKSB7XG4gIF9pbmhlcml0c0xvb3NlKE9ubGluZU1hbmFnZXIsIF9TdWJzY3JpYmFibGUpO1xuXG4gIGZ1bmN0aW9uIE9ubGluZU1hbmFnZXIoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX3RoaXMgPSBfU3Vic2NyaWJhYmxlLmNhbGwodGhpcykgfHwgdGhpcztcblxuICAgIF90aGlzLnNldHVwID0gZnVuY3Rpb24gKG9uT25saW5lKSB7XG4gICAgICB2YXIgX3dpbmRvdztcblxuICAgICAgaWYgKCFpc1NlcnZlciAmJiAoKF93aW5kb3cgPSB3aW5kb3cpID09IG51bGwgPyB2b2lkIDAgOiBfd2luZG93LmFkZEV2ZW50TGlzdGVuZXIpKSB7XG4gICAgICAgIHZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uIGxpc3RlbmVyKCkge1xuICAgICAgICAgIHJldHVybiBvbk9ubGluZSgpO1xuICAgICAgICB9OyAvLyBMaXN0ZW4gdG8gb25saW5lXG5cblxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignb25saW5lJywgbGlzdGVuZXIsIGZhbHNlKTtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ29mZmxpbmUnLCBsaXN0ZW5lciwgZmFsc2UpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIC8vIEJlIHN1cmUgdG8gdW5zdWJzY3JpYmUgaWYgYSBuZXcgaGFuZGxlciBpcyBzZXRcbiAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignb25saW5lJywgbGlzdGVuZXIpO1xuICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdvZmZsaW5lJywgbGlzdGVuZXIpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gT25saW5lTWFuYWdlci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLm9uU3Vic2NyaWJlID0gZnVuY3Rpb24gb25TdWJzY3JpYmUoKSB7XG4gICAgaWYgKCF0aGlzLmNsZWFudXApIHtcbiAgICAgIHRoaXMuc2V0RXZlbnRMaXN0ZW5lcih0aGlzLnNldHVwKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLm9uVW5zdWJzY3JpYmUgPSBmdW5jdGlvbiBvblVuc3Vic2NyaWJlKCkge1xuICAgIGlmICghdGhpcy5oYXNMaXN0ZW5lcnMoKSkge1xuICAgICAgdmFyIF90aGlzJGNsZWFudXA7XG5cbiAgICAgIChfdGhpcyRjbGVhbnVwID0gdGhpcy5jbGVhbnVwKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkY2xlYW51cC5jYWxsKHRoaXMpO1xuICAgICAgdGhpcy5jbGVhbnVwID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uc2V0RXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uIHNldEV2ZW50TGlzdGVuZXIoc2V0dXApIHtcbiAgICB2YXIgX3RoaXMkY2xlYW51cDIsXG4gICAgICAgIF90aGlzMiA9IHRoaXM7XG5cbiAgICB0aGlzLnNldHVwID0gc2V0dXA7XG4gICAgKF90aGlzJGNsZWFudXAyID0gdGhpcy5jbGVhbnVwKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkY2xlYW51cDIuY2FsbCh0aGlzKTtcbiAgICB0aGlzLmNsZWFudXAgPSBzZXR1cChmdW5jdGlvbiAob25saW5lKSB7XG4gICAgICBpZiAodHlwZW9mIG9ubGluZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIF90aGlzMi5zZXRPbmxpbmUob25saW5lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIF90aGlzMi5vbk9ubGluZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5zZXRPbmxpbmUgPSBmdW5jdGlvbiBzZXRPbmxpbmUob25saW5lKSB7XG4gICAgdGhpcy5vbmxpbmUgPSBvbmxpbmU7XG5cbiAgICBpZiAob25saW5lKSB7XG4gICAgICB0aGlzLm9uT25saW5lKCk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5vbk9ubGluZSA9IGZ1bmN0aW9uIG9uT25saW5lKCkge1xuICAgIHRoaXMubGlzdGVuZXJzLmZvckVhY2goZnVuY3Rpb24gKGxpc3RlbmVyKSB7XG4gICAgICBsaXN0ZW5lcigpO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5pc09ubGluZSA9IGZ1bmN0aW9uIGlzT25saW5lKCkge1xuICAgIGlmICh0eXBlb2YgdGhpcy5vbmxpbmUgPT09ICdib29sZWFuJykge1xuICAgICAgcmV0dXJuIHRoaXMub25saW5lO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbmF2aWdhdG9yID09PSAndW5kZWZpbmVkJyB8fCB0eXBlb2YgbmF2aWdhdG9yLm9uTGluZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBuYXZpZ2F0b3Iub25MaW5lO1xuICB9O1xuXG4gIHJldHVybiBPbmxpbmVNYW5hZ2VyO1xufShTdWJzY3JpYmFibGUpO1xuZXhwb3J0IHZhciBvbmxpbmVNYW5hZ2VyID0gbmV3IE9ubGluZU1hbmFnZXIoKTsiLCAiaW1wb3J0IHsgZm9jdXNNYW5hZ2VyIH0gZnJvbSAnLi9mb2N1c01hbmFnZXInO1xuaW1wb3J0IHsgb25saW5lTWFuYWdlciB9IGZyb20gJy4vb25saW5lTWFuYWdlcic7XG5pbXBvcnQgeyBzbGVlcCB9IGZyb20gJy4vdXRpbHMnO1xuXG5mdW5jdGlvbiBkZWZhdWx0UmV0cnlEZWxheShmYWlsdXJlQ291bnQpIHtcbiAgcmV0dXJuIE1hdGgubWluKDEwMDAgKiBNYXRoLnBvdygyLCBmYWlsdXJlQ291bnQpLCAzMDAwMCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NhbmNlbGFibGUodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiAodmFsdWUgPT0gbnVsbCA/IHZvaWQgMCA6IHZhbHVlLmNhbmNlbCkgPT09ICdmdW5jdGlvbic7XG59XG5leHBvcnQgdmFyIENhbmNlbGxlZEVycm9yID0gZnVuY3Rpb24gQ2FuY2VsbGVkRXJyb3Iob3B0aW9ucykge1xuICB0aGlzLnJldmVydCA9IG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMucmV2ZXJ0O1xuICB0aGlzLnNpbGVudCA9IG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMuc2lsZW50O1xufTtcbmV4cG9ydCBmdW5jdGlvbiBpc0NhbmNlbGxlZEVycm9yKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIENhbmNlbGxlZEVycm9yO1xufSAvLyBDTEFTU1xuXG5leHBvcnQgdmFyIFJldHJ5ZXIgPSBmdW5jdGlvbiBSZXRyeWVyKGNvbmZpZykge1xuICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gIHZhciBjYW5jZWxSZXRyeSA9IGZhbHNlO1xuICB2YXIgY2FuY2VsRm47XG4gIHZhciBjb250aW51ZUZuO1xuICB2YXIgcHJvbWlzZVJlc29sdmU7XG4gIHZhciBwcm9taXNlUmVqZWN0O1xuICB0aGlzLmFib3J0ID0gY29uZmlnLmFib3J0O1xuXG4gIHRoaXMuY2FuY2VsID0gZnVuY3Rpb24gKGNhbmNlbE9wdGlvbnMpIHtcbiAgICByZXR1cm4gY2FuY2VsRm4gPT0gbnVsbCA/IHZvaWQgMCA6IGNhbmNlbEZuKGNhbmNlbE9wdGlvbnMpO1xuICB9O1xuXG4gIHRoaXMuY2FuY2VsUmV0cnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgY2FuY2VsUmV0cnkgPSB0cnVlO1xuICB9O1xuXG4gIHRoaXMuY29udGludWVSZXRyeSA9IGZ1bmN0aW9uICgpIHtcbiAgICBjYW5jZWxSZXRyeSA9IGZhbHNlO1xuICB9O1xuXG4gIHRoaXMuY29udGludWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGNvbnRpbnVlRm4gPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRpbnVlRm4oKTtcbiAgfTtcblxuICB0aGlzLmZhaWx1cmVDb3VudCA9IDA7XG4gIHRoaXMuaXNQYXVzZWQgPSBmYWxzZTtcbiAgdGhpcy5pc1Jlc29sdmVkID0gZmFsc2U7XG4gIHRoaXMuaXNUcmFuc3BvcnRDYW5jZWxhYmxlID0gZmFsc2U7XG4gIHRoaXMucHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChvdXRlclJlc29sdmUsIG91dGVyUmVqZWN0KSB7XG4gICAgcHJvbWlzZVJlc29sdmUgPSBvdXRlclJlc29sdmU7XG4gICAgcHJvbWlzZVJlamVjdCA9IG91dGVyUmVqZWN0O1xuICB9KTtcblxuICB2YXIgcmVzb2x2ZSA9IGZ1bmN0aW9uIHJlc29sdmUodmFsdWUpIHtcbiAgICBpZiAoIV90aGlzLmlzUmVzb2x2ZWQpIHtcbiAgICAgIF90aGlzLmlzUmVzb2x2ZWQgPSB0cnVlO1xuICAgICAgY29uZmlnLm9uU3VjY2VzcyA9PSBudWxsID8gdm9pZCAwIDogY29uZmlnLm9uU3VjY2Vzcyh2YWx1ZSk7XG4gICAgICBjb250aW51ZUZuID09IG51bGwgPyB2b2lkIDAgOiBjb250aW51ZUZuKCk7XG4gICAgICBwcm9taXNlUmVzb2x2ZSh2YWx1ZSk7XG4gICAgfVxuICB9O1xuXG4gIHZhciByZWplY3QgPSBmdW5jdGlvbiByZWplY3QodmFsdWUpIHtcbiAgICBpZiAoIV90aGlzLmlzUmVzb2x2ZWQpIHtcbiAgICAgIF90aGlzLmlzUmVzb2x2ZWQgPSB0cnVlO1xuICAgICAgY29uZmlnLm9uRXJyb3IgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbmZpZy5vbkVycm9yKHZhbHVlKTtcbiAgICAgIGNvbnRpbnVlRm4gPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRpbnVlRm4oKTtcbiAgICAgIHByb21pc2VSZWplY3QodmFsdWUpO1xuICAgIH1cbiAgfTtcblxuICB2YXIgcGF1c2UgPSBmdW5jdGlvbiBwYXVzZSgpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGNvbnRpbnVlUmVzb2x2ZSkge1xuICAgICAgY29udGludWVGbiA9IGNvbnRpbnVlUmVzb2x2ZTtcbiAgICAgIF90aGlzLmlzUGF1c2VkID0gdHJ1ZTtcbiAgICAgIGNvbmZpZy5vblBhdXNlID09IG51bGwgPyB2b2lkIDAgOiBjb25maWcub25QYXVzZSgpO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgY29udGludWVGbiA9IHVuZGVmaW5lZDtcbiAgICAgIF90aGlzLmlzUGF1c2VkID0gZmFsc2U7XG4gICAgICBjb25maWcub25Db250aW51ZSA9PSBudWxsID8gdm9pZCAwIDogY29uZmlnLm9uQ29udGludWUoKTtcbiAgICB9KTtcbiAgfTsgLy8gQ3JlYXRlIGxvb3AgZnVuY3Rpb25cblxuXG4gIHZhciBydW4gPSBmdW5jdGlvbiBydW4oKSB7XG4gICAgLy8gRG8gbm90aGluZyBpZiBhbHJlYWR5IHJlc29sdmVkXG4gICAgaWYgKF90aGlzLmlzUmVzb2x2ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgcHJvbWlzZU9yVmFsdWU7IC8vIEV4ZWN1dGUgcXVlcnlcblxuICAgIHRyeSB7XG4gICAgICBwcm9taXNlT3JWYWx1ZSA9IGNvbmZpZy5mbigpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBwcm9taXNlT3JWYWx1ZSA9IFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgICB9IC8vIENyZWF0ZSBjYWxsYmFjayB0byBjYW5jZWwgdGhpcyBmZXRjaFxuXG5cbiAgICBjYW5jZWxGbiA9IGZ1bmN0aW9uIGNhbmNlbEZuKGNhbmNlbE9wdGlvbnMpIHtcbiAgICAgIGlmICghX3RoaXMuaXNSZXNvbHZlZCkge1xuICAgICAgICByZWplY3QobmV3IENhbmNlbGxlZEVycm9yKGNhbmNlbE9wdGlvbnMpKTtcbiAgICAgICAgX3RoaXMuYWJvcnQgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzLmFib3J0KCk7IC8vIENhbmNlbCB0cmFuc3BvcnQgaWYgc3VwcG9ydGVkXG5cbiAgICAgICAgaWYgKGlzQ2FuY2VsYWJsZShwcm9taXNlT3JWYWx1ZSkpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcHJvbWlzZU9yVmFsdWUuY2FuY2VsKCk7XG4gICAgICAgICAgfSBjYXRjaCAoX3VudXNlZCkge31cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07IC8vIENoZWNrIGlmIHRoZSB0cmFuc3BvcnQgbGF5ZXIgc3VwcG9ydCBjYW5jZWxsYXRpb25cblxuXG4gICAgX3RoaXMuaXNUcmFuc3BvcnRDYW5jZWxhYmxlID0gaXNDYW5jZWxhYmxlKHByb21pc2VPclZhbHVlKTtcbiAgICBQcm9taXNlLnJlc29sdmUocHJvbWlzZU9yVmFsdWUpLnRoZW4ocmVzb2x2ZSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICB2YXIgX2NvbmZpZyRyZXRyeSwgX2NvbmZpZyRyZXRyeURlbGF5O1xuXG4gICAgICAvLyBTdG9wIGlmIHRoZSBmZXRjaCBpcyBhbHJlYWR5IHJlc29sdmVkXG4gICAgICBpZiAoX3RoaXMuaXNSZXNvbHZlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9IC8vIERvIHdlIG5lZWQgdG8gcmV0cnkgdGhlIHJlcXVlc3Q/XG5cblxuICAgICAgdmFyIHJldHJ5ID0gKF9jb25maWckcmV0cnkgPSBjb25maWcucmV0cnkpICE9IG51bGwgPyBfY29uZmlnJHJldHJ5IDogMztcbiAgICAgIHZhciByZXRyeURlbGF5ID0gKF9jb25maWckcmV0cnlEZWxheSA9IGNvbmZpZy5yZXRyeURlbGF5KSAhPSBudWxsID8gX2NvbmZpZyRyZXRyeURlbGF5IDogZGVmYXVsdFJldHJ5RGVsYXk7XG4gICAgICB2YXIgZGVsYXkgPSB0eXBlb2YgcmV0cnlEZWxheSA9PT0gJ2Z1bmN0aW9uJyA/IHJldHJ5RGVsYXkoX3RoaXMuZmFpbHVyZUNvdW50LCBlcnJvcikgOiByZXRyeURlbGF5O1xuICAgICAgdmFyIHNob3VsZFJldHJ5ID0gcmV0cnkgPT09IHRydWUgfHwgdHlwZW9mIHJldHJ5ID09PSAnbnVtYmVyJyAmJiBfdGhpcy5mYWlsdXJlQ291bnQgPCByZXRyeSB8fCB0eXBlb2YgcmV0cnkgPT09ICdmdW5jdGlvbicgJiYgcmV0cnkoX3RoaXMuZmFpbHVyZUNvdW50LCBlcnJvcik7XG5cbiAgICAgIGlmIChjYW5jZWxSZXRyeSB8fCAhc2hvdWxkUmV0cnkpIHtcbiAgICAgICAgLy8gV2UgYXJlIGRvbmUgaWYgdGhlIHF1ZXJ5IGRvZXMgbm90IG5lZWQgdG8gYmUgcmV0cmllZFxuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIF90aGlzLmZhaWx1cmVDb3VudCsrOyAvLyBOb3RpZnkgb24gZmFpbFxuXG4gICAgICBjb25maWcub25GYWlsID09IG51bGwgPyB2b2lkIDAgOiBjb25maWcub25GYWlsKF90aGlzLmZhaWx1cmVDb3VudCwgZXJyb3IpOyAvLyBEZWxheVxuXG4gICAgICBzbGVlcChkZWxheSkgLy8gUGF1c2UgaWYgdGhlIGRvY3VtZW50IGlzIG5vdCB2aXNpYmxlIG9yIHdoZW4gdGhlIGRldmljZSBpcyBvZmZsaW5lXG4gICAgICAudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghZm9jdXNNYW5hZ2VyLmlzRm9jdXNlZCgpIHx8ICFvbmxpbmVNYW5hZ2VyLmlzT25saW5lKCkpIHtcbiAgICAgICAgICByZXR1cm4gcGF1c2UoKTtcbiAgICAgICAgfVxuICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChjYW5jZWxSZXRyeSkge1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcnVuKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9OyAvLyBTdGFydCBsb29wXG5cblxuICBydW4oKTtcbn07IiwgImltcG9ydCB7IHNjaGVkdWxlTWljcm90YXNrIH0gZnJvbSAnLi91dGlscyc7IC8vIFRZUEVTXG5cbi8vIENMQVNTXG5leHBvcnQgdmFyIE5vdGlmeU1hbmFnZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBOb3RpZnlNYW5hZ2VyKCkge1xuICAgIHRoaXMucXVldWUgPSBbXTtcbiAgICB0aGlzLnRyYW5zYWN0aW9ucyA9IDA7XG5cbiAgICB0aGlzLm5vdGlmeUZuID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICBjYWxsYmFjaygpO1xuICAgIH07XG5cbiAgICB0aGlzLmJhdGNoTm90aWZ5Rm4gPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgIGNhbGxiYWNrKCk7XG4gICAgfTtcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBOb3RpZnlNYW5hZ2VyLnByb3RvdHlwZTtcblxuICBfcHJvdG8uYmF0Y2ggPSBmdW5jdGlvbiBiYXRjaChjYWxsYmFjaykge1xuICAgIHZhciByZXN1bHQ7XG4gICAgdGhpcy50cmFuc2FjdGlvbnMrKztcblxuICAgIHRyeSB7XG4gICAgICByZXN1bHQgPSBjYWxsYmFjaygpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9ucy0tO1xuXG4gICAgICBpZiAoIXRoaXMudHJhbnNhY3Rpb25zKSB7XG4gICAgICAgIHRoaXMuZmx1c2goKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIF9wcm90by5zY2hlZHVsZSA9IGZ1bmN0aW9uIHNjaGVkdWxlKGNhbGxiYWNrKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIGlmICh0aGlzLnRyYW5zYWN0aW9ucykge1xuICAgICAgdGhpcy5xdWV1ZS5wdXNoKGNhbGxiYWNrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2NoZWR1bGVNaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpcy5ub3RpZnlGbihjYWxsYmFjayk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEFsbCBjYWxscyB0byB0aGUgd3JhcHBlZCBmdW5jdGlvbiB3aWxsIGJlIGJhdGNoZWQuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmJhdGNoQ2FsbHMgPSBmdW5jdGlvbiBiYXRjaENhbGxzKGNhbGxiYWNrKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICB9XG5cbiAgICAgIF90aGlzMi5zY2hlZHVsZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNhbGxiYWNrLmFwcGx5KHZvaWQgMCwgYXJncyk7XG4gICAgICB9KTtcbiAgICB9O1xuICB9O1xuXG4gIF9wcm90by5mbHVzaCA9IGZ1bmN0aW9uIGZsdXNoKCkge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgdmFyIHF1ZXVlID0gdGhpcy5xdWV1ZTtcbiAgICB0aGlzLnF1ZXVlID0gW107XG5cbiAgICBpZiAocXVldWUubGVuZ3RoKSB7XG4gICAgICBzY2hlZHVsZU1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzMy5iYXRjaE5vdGlmeUZuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBxdWV1ZS5mb3JFYWNoKGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICAgICAgX3RoaXMzLm5vdGlmeUZuKGNhbGxiYWNrKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFVzZSB0aGlzIG1ldGhvZCB0byBzZXQgYSBjdXN0b20gbm90aWZ5IGZ1bmN0aW9uLlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGZvciBleGFtcGxlIHdyYXAgbm90aWZpY2F0aW9ucyB3aXRoIGBSZWFjdC5hY3RgIHdoaWxlIHJ1bm5pbmcgdGVzdHMuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnNldE5vdGlmeUZ1bmN0aW9uID0gZnVuY3Rpb24gc2V0Tm90aWZ5RnVuY3Rpb24oZm4pIHtcbiAgICB0aGlzLm5vdGlmeUZuID0gZm47XG4gIH1cbiAgLyoqXG4gICAqIFVzZSB0aGlzIG1ldGhvZCB0byBzZXQgYSBjdXN0b20gZnVuY3Rpb24gdG8gYmF0Y2ggbm90aWZpY2F0aW9ucyB0b2dldGhlciBpbnRvIGEgc2luZ2xlIHRpY2suXG4gICAqIEJ5IGRlZmF1bHQgUmVhY3QgUXVlcnkgd2lsbCB1c2UgdGhlIGJhdGNoIGZ1bmN0aW9uIHByb3ZpZGVkIGJ5IFJlYWN0RE9NIG9yIFJlYWN0IE5hdGl2ZS5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uc2V0QmF0Y2hOb3RpZnlGdW5jdGlvbiA9IGZ1bmN0aW9uIHNldEJhdGNoTm90aWZ5RnVuY3Rpb24oZm4pIHtcbiAgICB0aGlzLmJhdGNoTm90aWZ5Rm4gPSBmbjtcbiAgfTtcblxuICByZXR1cm4gTm90aWZ5TWFuYWdlcjtcbn0oKTsgLy8gU0lOR0xFVE9OXG5cbmV4cG9ydCB2YXIgbm90aWZ5TWFuYWdlciA9IG5ldyBOb3RpZnlNYW5hZ2VyKCk7IiwgIi8vIFRZUEVTXG4vLyBGVU5DVElPTlNcbnZhciBsb2dnZXIgPSBjb25zb2xlO1xuZXhwb3J0IGZ1bmN0aW9uIGdldExvZ2dlcigpIHtcbiAgcmV0dXJuIGxvZ2dlcjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBzZXRMb2dnZXIobmV3TG9nZ2VyKSB7XG4gIGxvZ2dlciA9IG5ld0xvZ2dlcjtcbn0iLCAiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgeyBnZXRBYm9ydENvbnRyb2xsZXIsIGZ1bmN0aW9uYWxVcGRhdGUsIGlzVmFsaWRUaW1lb3V0LCBub29wLCByZXBsYWNlRXF1YWxEZWVwLCB0aW1lVW50aWxTdGFsZSwgZW5zdXJlUXVlcnlLZXlBcnJheSB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgbm90aWZ5TWFuYWdlciB9IGZyb20gJy4vbm90aWZ5TWFuYWdlcic7XG5pbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyBSZXRyeWVyLCBpc0NhbmNlbGxlZEVycm9yIH0gZnJvbSAnLi9yZXRyeWVyJzsgLy8gVFlQRVNcblxuLy8gQ0xBU1NcbmV4cG9ydCB2YXIgUXVlcnkgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBRdWVyeShjb25maWcpIHtcbiAgICB0aGlzLmFib3J0U2lnbmFsQ29uc3VtZWQgPSBmYWxzZTtcbiAgICB0aGlzLmhhZE9ic2VydmVycyA9IGZhbHNlO1xuICAgIHRoaXMuZGVmYXVsdE9wdGlvbnMgPSBjb25maWcuZGVmYXVsdE9wdGlvbnM7XG4gICAgdGhpcy5zZXRPcHRpb25zKGNvbmZpZy5vcHRpb25zKTtcbiAgICB0aGlzLm9ic2VydmVycyA9IFtdO1xuICAgIHRoaXMuY2FjaGUgPSBjb25maWcuY2FjaGU7XG4gICAgdGhpcy5xdWVyeUtleSA9IGNvbmZpZy5xdWVyeUtleTtcbiAgICB0aGlzLnF1ZXJ5SGFzaCA9IGNvbmZpZy5xdWVyeUhhc2g7XG4gICAgdGhpcy5pbml0aWFsU3RhdGUgPSBjb25maWcuc3RhdGUgfHwgdGhpcy5nZXREZWZhdWx0U3RhdGUodGhpcy5vcHRpb25zKTtcbiAgICB0aGlzLnN0YXRlID0gdGhpcy5pbml0aWFsU3RhdGU7XG4gICAgdGhpcy5tZXRhID0gY29uZmlnLm1ldGE7XG4gICAgdGhpcy5zY2hlZHVsZUdjKCk7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gUXVlcnkucHJvdG90eXBlO1xuXG4gIF9wcm90by5zZXRPcHRpb25zID0gZnVuY3Rpb24gc2V0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzJG9wdGlvbnMkY2FjaGVUaTtcblxuICAgIHRoaXMub3B0aW9ucyA9IF9leHRlbmRzKHt9LCB0aGlzLmRlZmF1bHRPcHRpb25zLCBvcHRpb25zKTtcbiAgICB0aGlzLm1ldGEgPSBvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLm1ldGE7IC8vIERlZmF1bHQgdG8gNSBtaW51dGVzIGlmIG5vdCBjYWNoZSB0aW1lIGlzIHNldFxuXG4gICAgdGhpcy5jYWNoZVRpbWUgPSBNYXRoLm1heCh0aGlzLmNhY2hlVGltZSB8fCAwLCAoX3RoaXMkb3B0aW9ucyRjYWNoZVRpID0gdGhpcy5vcHRpb25zLmNhY2hlVGltZSkgIT0gbnVsbCA/IF90aGlzJG9wdGlvbnMkY2FjaGVUaSA6IDUgKiA2MCAqIDEwMDApO1xuICB9O1xuXG4gIF9wcm90by5zZXREZWZhdWx0T3B0aW9ucyA9IGZ1bmN0aW9uIHNldERlZmF1bHRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICB0aGlzLmRlZmF1bHRPcHRpb25zID0gb3B0aW9ucztcbiAgfTtcblxuICBfcHJvdG8uc2NoZWR1bGVHYyA9IGZ1bmN0aW9uIHNjaGVkdWxlR2MoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMuY2xlYXJHY1RpbWVvdXQoKTtcblxuICAgIGlmIChpc1ZhbGlkVGltZW91dCh0aGlzLmNhY2hlVGltZSkpIHtcbiAgICAgIHRoaXMuZ2NUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzLm9wdGlvbmFsUmVtb3ZlKCk7XG4gICAgICB9LCB0aGlzLmNhY2hlVGltZSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5jbGVhckdjVGltZW91dCA9IGZ1bmN0aW9uIGNsZWFyR2NUaW1lb3V0KCkge1xuICAgIGlmICh0aGlzLmdjVGltZW91dCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZ2NUaW1lb3V0KTtcbiAgICAgIHRoaXMuZ2NUaW1lb3V0ID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ub3B0aW9uYWxSZW1vdmUgPSBmdW5jdGlvbiBvcHRpb25hbFJlbW92ZSgpIHtcbiAgICBpZiAoIXRoaXMub2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgaWYgKHRoaXMuc3RhdGUuaXNGZXRjaGluZykge1xuICAgICAgICBpZiAodGhpcy5oYWRPYnNlcnZlcnMpIHtcbiAgICAgICAgICB0aGlzLnNjaGVkdWxlR2MoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jYWNoZS5yZW1vdmUodGhpcyk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5zZXREYXRhID0gZnVuY3Rpb24gc2V0RGF0YSh1cGRhdGVyLCBvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzJG9wdGlvbnMkaXNEYXRhRSwgX3RoaXMkb3B0aW9ucztcblxuICAgIHZhciBwcmV2RGF0YSA9IHRoaXMuc3RhdGUuZGF0YTsgLy8gR2V0IHRoZSBuZXcgZGF0YVxuXG4gICAgdmFyIGRhdGEgPSBmdW5jdGlvbmFsVXBkYXRlKHVwZGF0ZXIsIHByZXZEYXRhKTsgLy8gVXNlIHByZXYgZGF0YSBpZiBhbiBpc0RhdGFFcXVhbCBmdW5jdGlvbiBpcyBkZWZpbmVkIGFuZCByZXR1cm5zIGB0cnVlYFxuXG4gICAgaWYgKChfdGhpcyRvcHRpb25zJGlzRGF0YUUgPSAoX3RoaXMkb3B0aW9ucyA9IHRoaXMub3B0aW9ucykuaXNEYXRhRXF1YWwpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRvcHRpb25zJGlzRGF0YUUuY2FsbChfdGhpcyRvcHRpb25zLCBwcmV2RGF0YSwgZGF0YSkpIHtcbiAgICAgIGRhdGEgPSBwcmV2RGF0YTtcbiAgICB9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy5zdHJ1Y3R1cmFsU2hhcmluZyAhPT0gZmFsc2UpIHtcbiAgICAgIC8vIFN0cnVjdHVyYWxseSBzaGFyZSBkYXRhIGJldHdlZW4gcHJldiBhbmQgbmV3IGRhdGEgaWYgbmVlZGVkXG4gICAgICBkYXRhID0gcmVwbGFjZUVxdWFsRGVlcChwcmV2RGF0YSwgZGF0YSk7XG4gICAgfSAvLyBTZXQgZGF0YSBhbmQgbWFyayBpdCBhcyBjYWNoZWRcblxuXG4gICAgdGhpcy5kaXNwYXRjaCh7XG4gICAgICBkYXRhOiBkYXRhLFxuICAgICAgdHlwZTogJ3N1Y2Nlc3MnLFxuICAgICAgZGF0YVVwZGF0ZWRBdDogb3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy51cGRhdGVkQXRcbiAgICB9KTtcbiAgICByZXR1cm4gZGF0YTtcbiAgfTtcblxuICBfcHJvdG8uc2V0U3RhdGUgPSBmdW5jdGlvbiBzZXRTdGF0ZShzdGF0ZSwgc2V0U3RhdGVPcHRpb25zKSB7XG4gICAgdGhpcy5kaXNwYXRjaCh7XG4gICAgICB0eXBlOiAnc2V0U3RhdGUnLFxuICAgICAgc3RhdGU6IHN0YXRlLFxuICAgICAgc2V0U3RhdGVPcHRpb25zOiBzZXRTdGF0ZU9wdGlvbnNcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uY2FuY2VsID0gZnVuY3Rpb24gY2FuY2VsKG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXMkcmV0cnllcjtcblxuICAgIHZhciBwcm9taXNlID0gdGhpcy5wcm9taXNlO1xuICAgIChfdGhpcyRyZXRyeWVyID0gdGhpcy5yZXRyeWVyKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkcmV0cnllci5jYW5jZWwob3B0aW9ucyk7XG4gICAgcmV0dXJuIHByb21pc2UgPyBwcm9taXNlLnRoZW4obm9vcCkuY2F0Y2gobm9vcCkgOiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfTtcblxuICBfcHJvdG8uZGVzdHJveSA9IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5jbGVhckdjVGltZW91dCgpO1xuICAgIHRoaXMuY2FuY2VsKHtcbiAgICAgIHNpbGVudDogdHJ1ZVxuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5yZXNldCA9IGZ1bmN0aW9uIHJlc2V0KCkge1xuICAgIHRoaXMuZGVzdHJveSgpO1xuICAgIHRoaXMuc2V0U3RhdGUodGhpcy5pbml0aWFsU3RhdGUpO1xuICB9O1xuXG4gIF9wcm90by5pc0FjdGl2ZSA9IGZ1bmN0aW9uIGlzQWN0aXZlKCkge1xuICAgIHJldHVybiB0aGlzLm9ic2VydmVycy5zb21lKGZ1bmN0aW9uIChvYnNlcnZlcikge1xuICAgICAgcmV0dXJuIG9ic2VydmVyLm9wdGlvbnMuZW5hYmxlZCAhPT0gZmFsc2U7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmlzRmV0Y2hpbmcgPSBmdW5jdGlvbiBpc0ZldGNoaW5nKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlLmlzRmV0Y2hpbmc7XG4gIH07XG5cbiAgX3Byb3RvLmlzU3RhbGUgPSBmdW5jdGlvbiBpc1N0YWxlKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlLmlzSW52YWxpZGF0ZWQgfHwgIXRoaXMuc3RhdGUuZGF0YVVwZGF0ZWRBdCB8fCB0aGlzLm9ic2VydmVycy5zb21lKGZ1bmN0aW9uIChvYnNlcnZlcikge1xuICAgICAgcmV0dXJuIG9ic2VydmVyLmdldEN1cnJlbnRSZXN1bHQoKS5pc1N0YWxlO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5pc1N0YWxlQnlUaW1lID0gZnVuY3Rpb24gaXNTdGFsZUJ5VGltZShzdGFsZVRpbWUpIHtcbiAgICBpZiAoc3RhbGVUaW1lID09PSB2b2lkIDApIHtcbiAgICAgIHN0YWxlVGltZSA9IDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc3RhdGUuaXNJbnZhbGlkYXRlZCB8fCAhdGhpcy5zdGF0ZS5kYXRhVXBkYXRlZEF0IHx8ICF0aW1lVW50aWxTdGFsZSh0aGlzLnN0YXRlLmRhdGFVcGRhdGVkQXQsIHN0YWxlVGltZSk7XG4gIH07XG5cbiAgX3Byb3RvLm9uRm9jdXMgPSBmdW5jdGlvbiBvbkZvY3VzKCkge1xuICAgIHZhciBfdGhpcyRyZXRyeWVyMjtcblxuICAgIHZhciBvYnNlcnZlciA9IHRoaXMub2JzZXJ2ZXJzLmZpbmQoZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiB4LnNob3VsZEZldGNoT25XaW5kb3dGb2N1cygpO1xuICAgIH0pO1xuXG4gICAgaWYgKG9ic2VydmVyKSB7XG4gICAgICBvYnNlcnZlci5yZWZldGNoKCk7XG4gICAgfSAvLyBDb250aW51ZSBmZXRjaCBpZiBjdXJyZW50bHkgcGF1c2VkXG5cblxuICAgIChfdGhpcyRyZXRyeWVyMiA9IHRoaXMucmV0cnllcikgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJHJldHJ5ZXIyLmNvbnRpbnVlKCk7XG4gIH07XG5cbiAgX3Byb3RvLm9uT25saW5lID0gZnVuY3Rpb24gb25PbmxpbmUoKSB7XG4gICAgdmFyIF90aGlzJHJldHJ5ZXIzO1xuXG4gICAgdmFyIG9ic2VydmVyID0gdGhpcy5vYnNlcnZlcnMuZmluZChmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHguc2hvdWxkRmV0Y2hPblJlY29ubmVjdCgpO1xuICAgIH0pO1xuXG4gICAgaWYgKG9ic2VydmVyKSB7XG4gICAgICBvYnNlcnZlci5yZWZldGNoKCk7XG4gICAgfSAvLyBDb250aW51ZSBmZXRjaCBpZiBjdXJyZW50bHkgcGF1c2VkXG5cblxuICAgIChfdGhpcyRyZXRyeWVyMyA9IHRoaXMucmV0cnllcikgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJHJldHJ5ZXIzLmNvbnRpbnVlKCk7XG4gIH07XG5cbiAgX3Byb3RvLmFkZE9ic2VydmVyID0gZnVuY3Rpb24gYWRkT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcbiAgICBpZiAodGhpcy5vYnNlcnZlcnMuaW5kZXhPZihvYnNlcnZlcikgPT09IC0xKSB7XG4gICAgICB0aGlzLm9ic2VydmVycy5wdXNoKG9ic2VydmVyKTtcbiAgICAgIHRoaXMuaGFkT2JzZXJ2ZXJzID0gdHJ1ZTsgLy8gU3RvcCB0aGUgcXVlcnkgZnJvbSBiZWluZyBnYXJiYWdlIGNvbGxlY3RlZFxuXG4gICAgICB0aGlzLmNsZWFyR2NUaW1lb3V0KCk7XG4gICAgICB0aGlzLmNhY2hlLm5vdGlmeSh7XG4gICAgICAgIHR5cGU6ICdvYnNlcnZlckFkZGVkJyxcbiAgICAgICAgcXVlcnk6IHRoaXMsXG4gICAgICAgIG9ic2VydmVyOiBvYnNlcnZlclxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5yZW1vdmVPYnNlcnZlciA9IGZ1bmN0aW9uIHJlbW92ZU9ic2VydmVyKG9ic2VydmVyKSB7XG4gICAgaWYgKHRoaXMub2JzZXJ2ZXJzLmluZGV4T2Yob2JzZXJ2ZXIpICE9PSAtMSkge1xuICAgICAgdGhpcy5vYnNlcnZlcnMgPSB0aGlzLm9ic2VydmVycy5maWx0ZXIoZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgcmV0dXJuIHggIT09IG9ic2VydmVyO1xuICAgICAgfSk7XG5cbiAgICAgIGlmICghdGhpcy5vYnNlcnZlcnMubGVuZ3RoKSB7XG4gICAgICAgIC8vIElmIHRoZSB0cmFuc3BvcnQgbGF5ZXIgZG9lcyBub3Qgc3VwcG9ydCBjYW5jZWxsYXRpb25cbiAgICAgICAgLy8gd2UnbGwgbGV0IHRoZSBxdWVyeSBjb250aW51ZSBzbyB0aGUgcmVzdWx0IGNhbiBiZSBjYWNoZWRcbiAgICAgICAgaWYgKHRoaXMucmV0cnllcikge1xuICAgICAgICAgIGlmICh0aGlzLnJldHJ5ZXIuaXNUcmFuc3BvcnRDYW5jZWxhYmxlIHx8IHRoaXMuYWJvcnRTaWduYWxDb25zdW1lZCkge1xuICAgICAgICAgICAgdGhpcy5yZXRyeWVyLmNhbmNlbCh7XG4gICAgICAgICAgICAgIHJldmVydDogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmV0cnllci5jYW5jZWxSZXRyeSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmNhY2hlVGltZSkge1xuICAgICAgICAgIHRoaXMuc2NoZWR1bGVHYygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY2FjaGUucmVtb3ZlKHRoaXMpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY2FjaGUubm90aWZ5KHtcbiAgICAgICAgdHlwZTogJ29ic2VydmVyUmVtb3ZlZCcsXG4gICAgICAgIHF1ZXJ5OiB0aGlzLFxuICAgICAgICBvYnNlcnZlcjogb2JzZXJ2ZXJcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uZ2V0T2JzZXJ2ZXJzQ291bnQgPSBmdW5jdGlvbiBnZXRPYnNlcnZlcnNDb3VudCgpIHtcbiAgICByZXR1cm4gdGhpcy5vYnNlcnZlcnMubGVuZ3RoO1xuICB9O1xuXG4gIF9wcm90by5pbnZhbGlkYXRlID0gZnVuY3Rpb24gaW52YWxpZGF0ZSgpIHtcbiAgICBpZiAoIXRoaXMuc3RhdGUuaXNJbnZhbGlkYXRlZCkge1xuICAgICAgdGhpcy5kaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6ICdpbnZhbGlkYXRlJ1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5mZXRjaCA9IGZ1bmN0aW9uIGZldGNoKG9wdGlvbnMsIGZldGNoT3B0aW9ucykge1xuICAgIHZhciBfdGhpczIgPSB0aGlzLFxuICAgICAgICBfdGhpcyRvcHRpb25zJGJlaGF2aW8sXG4gICAgICAgIF9jb250ZXh0JGZldGNoT3B0aW9ucyxcbiAgICAgICAgX2Fib3J0Q29udHJvbGxlciRhYm9yO1xuXG4gICAgaWYgKHRoaXMuc3RhdGUuaXNGZXRjaGluZykge1xuICAgICAgaWYgKHRoaXMuc3RhdGUuZGF0YVVwZGF0ZWRBdCAmJiAoZmV0Y2hPcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBmZXRjaE9wdGlvbnMuY2FuY2VsUmVmZXRjaCkpIHtcbiAgICAgICAgLy8gU2lsZW50bHkgY2FuY2VsIGN1cnJlbnQgZmV0Y2ggaWYgdGhlIHVzZXIgd2FudHMgdG8gY2FuY2VsIHJlZmV0Y2hlc1xuICAgICAgICB0aGlzLmNhbmNlbCh7XG4gICAgICAgICAgc2lsZW50OiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnByb21pc2UpIHtcbiAgICAgICAgdmFyIF90aGlzJHJldHJ5ZXI0O1xuXG4gICAgICAgIC8vIG1ha2Ugc3VyZSB0aGF0IHJldHJpZXMgdGhhdCB3ZXJlIHBvdGVudGlhbGx5IGNhbmNlbGxlZCBkdWUgdG8gdW5tb3VudHMgY2FuIGNvbnRpbnVlXG4gICAgICAgIChfdGhpcyRyZXRyeWVyNCA9IHRoaXMucmV0cnllcikgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJHJldHJ5ZXI0LmNvbnRpbnVlUmV0cnkoKTsgLy8gUmV0dXJuIGN1cnJlbnQgcHJvbWlzZSBpZiB3ZSBhcmUgYWxyZWFkeSBmZXRjaGluZ1xuXG4gICAgICAgIHJldHVybiB0aGlzLnByb21pc2U7XG4gICAgICB9XG4gICAgfSAvLyBVcGRhdGUgY29uZmlnIGlmIHBhc3NlZCwgb3RoZXJ3aXNlIHRoZSBjb25maWcgZnJvbSB0aGUgbGFzdCBleGVjdXRpb24gaXMgdXNlZFxuXG5cbiAgICBpZiAob3B0aW9ucykge1xuICAgICAgdGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpO1xuICAgIH0gLy8gVXNlIHRoZSBvcHRpb25zIGZyb20gdGhlIGZpcnN0IG9ic2VydmVyIHdpdGggYSBxdWVyeSBmdW5jdGlvbiBpZiBubyBmdW5jdGlvbiBpcyBmb3VuZC5cbiAgICAvLyBUaGlzIGNhbiBoYXBwZW4gd2hlbiB0aGUgcXVlcnkgaXMgaHlkcmF0ZWQgb3IgY3JlYXRlZCB3aXRoIHNldFF1ZXJ5RGF0YS5cblxuXG4gICAgaWYgKCF0aGlzLm9wdGlvbnMucXVlcnlGbikge1xuICAgICAgdmFyIG9ic2VydmVyID0gdGhpcy5vYnNlcnZlcnMuZmluZChmdW5jdGlvbiAoeCkge1xuICAgICAgICByZXR1cm4geC5vcHRpb25zLnF1ZXJ5Rm47XG4gICAgICB9KTtcblxuICAgICAgaWYgKG9ic2VydmVyKSB7XG4gICAgICAgIHRoaXMuc2V0T3B0aW9ucyhvYnNlcnZlci5vcHRpb25zKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcXVlcnlLZXkgPSBlbnN1cmVRdWVyeUtleUFycmF5KHRoaXMucXVlcnlLZXkpO1xuICAgIHZhciBhYm9ydENvbnRyb2xsZXIgPSBnZXRBYm9ydENvbnRyb2xsZXIoKTsgLy8gQ3JlYXRlIHF1ZXJ5IGZ1bmN0aW9uIGNvbnRleHRcblxuICAgIHZhciBxdWVyeUZuQ29udGV4dCA9IHtcbiAgICAgIHF1ZXJ5S2V5OiBxdWVyeUtleSxcbiAgICAgIHBhZ2VQYXJhbTogdW5kZWZpbmVkLFxuICAgICAgbWV0YTogdGhpcy5tZXRhXG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocXVlcnlGbkNvbnRleHQsICdzaWduYWwnLCB7XG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIGlmIChhYm9ydENvbnRyb2xsZXIpIHtcbiAgICAgICAgICBfdGhpczIuYWJvcnRTaWduYWxDb25zdW1lZCA9IHRydWU7XG4gICAgICAgICAgcmV0dXJuIGFib3J0Q29udHJvbGxlci5zaWduYWw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH0pOyAvLyBDcmVhdGUgZmV0Y2ggZnVuY3Rpb25cblxuICAgIHZhciBmZXRjaEZuID0gZnVuY3Rpb24gZmV0Y2hGbigpIHtcbiAgICAgIGlmICghX3RoaXMyLm9wdGlvbnMucXVlcnlGbikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoJ01pc3NpbmcgcXVlcnlGbicpO1xuICAgICAgfVxuXG4gICAgICBfdGhpczIuYWJvcnRTaWduYWxDb25zdW1lZCA9IGZhbHNlO1xuICAgICAgcmV0dXJuIF90aGlzMi5vcHRpb25zLnF1ZXJ5Rm4ocXVlcnlGbkNvbnRleHQpO1xuICAgIH07IC8vIFRyaWdnZXIgYmVoYXZpb3IgaG9va1xuXG5cbiAgICB2YXIgY29udGV4dCA9IHtcbiAgICAgIGZldGNoT3B0aW9uczogZmV0Y2hPcHRpb25zLFxuICAgICAgb3B0aW9uczogdGhpcy5vcHRpb25zLFxuICAgICAgcXVlcnlLZXk6IHF1ZXJ5S2V5LFxuICAgICAgc3RhdGU6IHRoaXMuc3RhdGUsXG4gICAgICBmZXRjaEZuOiBmZXRjaEZuLFxuICAgICAgbWV0YTogdGhpcy5tZXRhXG4gICAgfTtcblxuICAgIGlmICgoX3RoaXMkb3B0aW9ucyRiZWhhdmlvID0gdGhpcy5vcHRpb25zLmJlaGF2aW9yKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkb3B0aW9ucyRiZWhhdmlvLm9uRmV0Y2gpIHtcbiAgICAgIHZhciBfdGhpcyRvcHRpb25zJGJlaGF2aW8yO1xuXG4gICAgICAoX3RoaXMkb3B0aW9ucyRiZWhhdmlvMiA9IHRoaXMub3B0aW9ucy5iZWhhdmlvcikgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJG9wdGlvbnMkYmVoYXZpbzIub25GZXRjaChjb250ZXh0KTtcbiAgICB9IC8vIFN0b3JlIHN0YXRlIGluIGNhc2UgdGhlIGN1cnJlbnQgZmV0Y2ggbmVlZHMgdG8gYmUgcmV2ZXJ0ZWRcblxuXG4gICAgdGhpcy5yZXZlcnRTdGF0ZSA9IHRoaXMuc3RhdGU7IC8vIFNldCB0byBmZXRjaGluZyBzdGF0ZSBpZiBub3QgYWxyZWFkeSBpbiBpdFxuXG4gICAgaWYgKCF0aGlzLnN0YXRlLmlzRmV0Y2hpbmcgfHwgdGhpcy5zdGF0ZS5mZXRjaE1ldGEgIT09ICgoX2NvbnRleHQkZmV0Y2hPcHRpb25zID0gY29udGV4dC5mZXRjaE9wdGlvbnMpID09IG51bGwgPyB2b2lkIDAgOiBfY29udGV4dCRmZXRjaE9wdGlvbnMubWV0YSkpIHtcbiAgICAgIHZhciBfY29udGV4dCRmZXRjaE9wdGlvbnMyO1xuXG4gICAgICB0aGlzLmRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogJ2ZldGNoJyxcbiAgICAgICAgbWV0YTogKF9jb250ZXh0JGZldGNoT3B0aW9uczIgPSBjb250ZXh0LmZldGNoT3B0aW9ucykgPT0gbnVsbCA/IHZvaWQgMCA6IF9jb250ZXh0JGZldGNoT3B0aW9uczIubWV0YVxuICAgICAgfSk7XG4gICAgfSAvLyBUcnkgdG8gZmV0Y2ggdGhlIGRhdGFcblxuXG4gICAgdGhpcy5yZXRyeWVyID0gbmV3IFJldHJ5ZXIoe1xuICAgICAgZm46IGNvbnRleHQuZmV0Y2hGbixcbiAgICAgIGFib3J0OiBhYm9ydENvbnRyb2xsZXIgPT0gbnVsbCA/IHZvaWQgMCA6IChfYWJvcnRDb250cm9sbGVyJGFib3IgPSBhYm9ydENvbnRyb2xsZXIuYWJvcnQpID09IG51bGwgPyB2b2lkIDAgOiBfYWJvcnRDb250cm9sbGVyJGFib3IuYmluZChhYm9ydENvbnRyb2xsZXIpLFxuICAgICAgb25TdWNjZXNzOiBmdW5jdGlvbiBvblN1Y2Nlc3MoZGF0YSkge1xuICAgICAgICBfdGhpczIuc2V0RGF0YShkYXRhKTsgLy8gTm90aWZ5IGNhY2hlIGNhbGxiYWNrXG5cblxuICAgICAgICBfdGhpczIuY2FjaGUuY29uZmlnLm9uU3VjY2VzcyA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMyLmNhY2hlLmNvbmZpZy5vblN1Y2Nlc3MoZGF0YSwgX3RoaXMyKTsgLy8gUmVtb3ZlIHF1ZXJ5IGFmdGVyIGZldGNoaW5nIGlmIGNhY2hlIHRpbWUgaXMgMFxuXG4gICAgICAgIGlmIChfdGhpczIuY2FjaGVUaW1lID09PSAwKSB7XG4gICAgICAgICAgX3RoaXMyLm9wdGlvbmFsUmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBvbkVycm9yOiBmdW5jdGlvbiBvbkVycm9yKGVycm9yKSB7XG4gICAgICAgIC8vIE9wdGltaXN0aWNhbGx5IHVwZGF0ZSBzdGF0ZSBpZiBuZWVkZWRcbiAgICAgICAgaWYgKCEoaXNDYW5jZWxsZWRFcnJvcihlcnJvcikgJiYgZXJyb3Iuc2lsZW50KSkge1xuICAgICAgICAgIF90aGlzMi5kaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgZXJyb3I6IGVycm9yXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzQ2FuY2VsbGVkRXJyb3IoZXJyb3IpKSB7XG4gICAgICAgICAgLy8gTm90aWZ5IGNhY2hlIGNhbGxiYWNrXG4gICAgICAgICAgX3RoaXMyLmNhY2hlLmNvbmZpZy5vbkVycm9yID09IG51bGwgPyB2b2lkIDAgOiBfdGhpczIuY2FjaGUuY29uZmlnLm9uRXJyb3IoZXJyb3IsIF90aGlzMik7IC8vIExvZyBlcnJvclxuXG4gICAgICAgICAgZ2V0TG9nZ2VyKCkuZXJyb3IoZXJyb3IpO1xuICAgICAgICB9IC8vIFJlbW92ZSBxdWVyeSBhZnRlciBmZXRjaGluZyBpZiBjYWNoZSB0aW1lIGlzIDBcblxuXG4gICAgICAgIGlmIChfdGhpczIuY2FjaGVUaW1lID09PSAwKSB7XG4gICAgICAgICAgX3RoaXMyLm9wdGlvbmFsUmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBvbkZhaWw6IGZ1bmN0aW9uIG9uRmFpbCgpIHtcbiAgICAgICAgX3RoaXMyLmRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiAnZmFpbGVkJ1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBvblBhdXNlOiBmdW5jdGlvbiBvblBhdXNlKCkge1xuICAgICAgICBfdGhpczIuZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6ICdwYXVzZSdcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgb25Db250aW51ZTogZnVuY3Rpb24gb25Db250aW51ZSgpIHtcbiAgICAgICAgX3RoaXMyLmRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiAnY29udGludWUnXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIHJldHJ5OiBjb250ZXh0Lm9wdGlvbnMucmV0cnksXG4gICAgICByZXRyeURlbGF5OiBjb250ZXh0Lm9wdGlvbnMucmV0cnlEZWxheVxuICAgIH0pO1xuICAgIHRoaXMucHJvbWlzZSA9IHRoaXMucmV0cnllci5wcm9taXNlO1xuICAgIHJldHVybiB0aGlzLnByb21pc2U7XG4gIH07XG5cbiAgX3Byb3RvLmRpc3BhdGNoID0gZnVuY3Rpb24gZGlzcGF0Y2goYWN0aW9uKSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICB0aGlzLnN0YXRlID0gdGhpcy5yZWR1Y2VyKHRoaXMuc3RhdGUsIGFjdGlvbik7XG4gICAgbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczMub2JzZXJ2ZXJzLmZvckVhY2goZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICAgIG9ic2VydmVyLm9uUXVlcnlVcGRhdGUoYWN0aW9uKTtcbiAgICAgIH0pO1xuXG4gICAgICBfdGhpczMuY2FjaGUubm90aWZ5KHtcbiAgICAgICAgcXVlcnk6IF90aGlzMyxcbiAgICAgICAgdHlwZTogJ3F1ZXJ5VXBkYXRlZCcsXG4gICAgICAgIGFjdGlvbjogYWN0aW9uXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0RGVmYXVsdFN0YXRlID0gZnVuY3Rpb24gZ2V0RGVmYXVsdFN0YXRlKG9wdGlvbnMpIHtcbiAgICB2YXIgZGF0YSA9IHR5cGVvZiBvcHRpb25zLmluaXRpYWxEYXRhID09PSAnZnVuY3Rpb24nID8gb3B0aW9ucy5pbml0aWFsRGF0YSgpIDogb3B0aW9ucy5pbml0aWFsRGF0YTtcbiAgICB2YXIgaGFzSW5pdGlhbERhdGEgPSB0eXBlb2Ygb3B0aW9ucy5pbml0aWFsRGF0YSAhPT0gJ3VuZGVmaW5lZCc7XG4gICAgdmFyIGluaXRpYWxEYXRhVXBkYXRlZEF0ID0gaGFzSW5pdGlhbERhdGEgPyB0eXBlb2Ygb3B0aW9ucy5pbml0aWFsRGF0YVVwZGF0ZWRBdCA9PT0gJ2Z1bmN0aW9uJyA/IG9wdGlvbnMuaW5pdGlhbERhdGFVcGRhdGVkQXQoKSA6IG9wdGlvbnMuaW5pdGlhbERhdGFVcGRhdGVkQXQgOiAwO1xuICAgIHZhciBoYXNEYXRhID0gdHlwZW9mIGRhdGEgIT09ICd1bmRlZmluZWQnO1xuICAgIHJldHVybiB7XG4gICAgICBkYXRhOiBkYXRhLFxuICAgICAgZGF0YVVwZGF0ZUNvdW50OiAwLFxuICAgICAgZGF0YVVwZGF0ZWRBdDogaGFzRGF0YSA/IGluaXRpYWxEYXRhVXBkYXRlZEF0ICE9IG51bGwgPyBpbml0aWFsRGF0YVVwZGF0ZWRBdCA6IERhdGUubm93KCkgOiAwLFxuICAgICAgZXJyb3I6IG51bGwsXG4gICAgICBlcnJvclVwZGF0ZUNvdW50OiAwLFxuICAgICAgZXJyb3JVcGRhdGVkQXQ6IDAsXG4gICAgICBmZXRjaEZhaWx1cmVDb3VudDogMCxcbiAgICAgIGZldGNoTWV0YTogbnVsbCxcbiAgICAgIGlzRmV0Y2hpbmc6IGZhbHNlLFxuICAgICAgaXNJbnZhbGlkYXRlZDogZmFsc2UsXG4gICAgICBpc1BhdXNlZDogZmFsc2UsXG4gICAgICBzdGF0dXM6IGhhc0RhdGEgPyAnc3VjY2VzcycgOiAnaWRsZSdcbiAgICB9O1xuICB9O1xuXG4gIF9wcm90by5yZWR1Y2VyID0gZnVuY3Rpb24gcmVkdWNlcihzdGF0ZSwgYWN0aW9uKSB7XG4gICAgdmFyIF9hY3Rpb24kbWV0YSwgX2FjdGlvbiRkYXRhVXBkYXRlZEF0O1xuXG4gICAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwge1xuICAgICAgICAgIGZldGNoRmFpbHVyZUNvdW50OiBzdGF0ZS5mZXRjaEZhaWx1cmVDb3VudCArIDFcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ3BhdXNlJzpcbiAgICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwge1xuICAgICAgICAgIGlzUGF1c2VkOiB0cnVlXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdjb250aW51ZSc6XG4gICAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgICBpc1BhdXNlZDogZmFsc2VcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ2ZldGNoJzpcbiAgICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwge1xuICAgICAgICAgIGZldGNoRmFpbHVyZUNvdW50OiAwLFxuICAgICAgICAgIGZldGNoTWV0YTogKF9hY3Rpb24kbWV0YSA9IGFjdGlvbi5tZXRhKSAhPSBudWxsID8gX2FjdGlvbiRtZXRhIDogbnVsbCxcbiAgICAgICAgICBpc0ZldGNoaW5nOiB0cnVlLFxuICAgICAgICAgIGlzUGF1c2VkOiBmYWxzZVxuICAgICAgICB9LCAhc3RhdGUuZGF0YVVwZGF0ZWRBdCAmJiB7XG4gICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgc3RhdHVzOiAnbG9hZGluZydcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ3N1Y2Nlc3MnOlxuICAgICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCB7XG4gICAgICAgICAgZGF0YTogYWN0aW9uLmRhdGEsXG4gICAgICAgICAgZGF0YVVwZGF0ZUNvdW50OiBzdGF0ZS5kYXRhVXBkYXRlQ291bnQgKyAxLFxuICAgICAgICAgIGRhdGFVcGRhdGVkQXQ6IChfYWN0aW9uJGRhdGFVcGRhdGVkQXQgPSBhY3Rpb24uZGF0YVVwZGF0ZWRBdCkgIT0gbnVsbCA/IF9hY3Rpb24kZGF0YVVwZGF0ZWRBdCA6IERhdGUubm93KCksXG4gICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgZmV0Y2hGYWlsdXJlQ291bnQ6IDAsXG4gICAgICAgICAgaXNGZXRjaGluZzogZmFsc2UsXG4gICAgICAgICAgaXNJbnZhbGlkYXRlZDogZmFsc2UsXG4gICAgICAgICAgaXNQYXVzZWQ6IGZhbHNlLFxuICAgICAgICAgIHN0YXR1czogJ3N1Y2Nlc3MnXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdlcnJvcic6XG4gICAgICAgIHZhciBlcnJvciA9IGFjdGlvbi5lcnJvcjtcblxuICAgICAgICBpZiAoaXNDYW5jZWxsZWRFcnJvcihlcnJvcikgJiYgZXJyb3IucmV2ZXJ0ICYmIHRoaXMucmV2ZXJ0U3RhdGUpIHtcbiAgICAgICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHRoaXMucmV2ZXJ0U3RhdGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwge1xuICAgICAgICAgIGVycm9yOiBlcnJvcixcbiAgICAgICAgICBlcnJvclVwZGF0ZUNvdW50OiBzdGF0ZS5lcnJvclVwZGF0ZUNvdW50ICsgMSxcbiAgICAgICAgICBlcnJvclVwZGF0ZWRBdDogRGF0ZS5ub3coKSxcbiAgICAgICAgICBmZXRjaEZhaWx1cmVDb3VudDogc3RhdGUuZmV0Y2hGYWlsdXJlQ291bnQgKyAxLFxuICAgICAgICAgIGlzRmV0Y2hpbmc6IGZhbHNlLFxuICAgICAgICAgIGlzUGF1c2VkOiBmYWxzZSxcbiAgICAgICAgICBzdGF0dXM6ICdlcnJvcidcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ2ludmFsaWRhdGUnOlxuICAgICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCB7XG4gICAgICAgICAgaXNJbnZhbGlkYXRlZDogdHJ1ZVxuICAgICAgICB9KTtcblxuICAgICAgY2FzZSAnc2V0U3RhdGUnOlxuICAgICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCBhY3Rpb24uc3RhdGUpO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBRdWVyeTtcbn0oKTsiLCAiaW1wb3J0IF9pbmhlcml0c0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlXCI7XG5pbXBvcnQgeyBoYXNoUXVlcnlLZXlCeU9wdGlvbnMsIG1hdGNoUXVlcnksIHBhcnNlRmlsdGVyQXJncyB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgUXVlcnkgfSBmcm9tICcuL3F1ZXJ5JztcbmltcG9ydCB7IG5vdGlmeU1hbmFnZXIgfSBmcm9tICcuL25vdGlmeU1hbmFnZXInO1xuaW1wb3J0IHsgU3Vic2NyaWJhYmxlIH0gZnJvbSAnLi9zdWJzY3JpYmFibGUnO1xuLy8gQ0xBU1NcbmV4cG9ydCB2YXIgUXVlcnlDYWNoZSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1N1YnNjcmliYWJsZSkge1xuICBfaW5oZXJpdHNMb29zZShRdWVyeUNhY2hlLCBfU3Vic2NyaWJhYmxlKTtcblxuICBmdW5jdGlvbiBRdWVyeUNhY2hlKGNvbmZpZykge1xuICAgIHZhciBfdGhpcztcblxuICAgIF90aGlzID0gX1N1YnNjcmliYWJsZS5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgX3RoaXMuY29uZmlnID0gY29uZmlnIHx8IHt9O1xuICAgIF90aGlzLnF1ZXJpZXMgPSBbXTtcbiAgICBfdGhpcy5xdWVyaWVzTWFwID0ge307XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFF1ZXJ5Q2FjaGUucHJvdG90eXBlO1xuXG4gIF9wcm90by5idWlsZCA9IGZ1bmN0aW9uIGJ1aWxkKGNsaWVudCwgb3B0aW9ucywgc3RhdGUpIHtcbiAgICB2YXIgX29wdGlvbnMkcXVlcnlIYXNoO1xuXG4gICAgdmFyIHF1ZXJ5S2V5ID0gb3B0aW9ucy5xdWVyeUtleTtcbiAgICB2YXIgcXVlcnlIYXNoID0gKF9vcHRpb25zJHF1ZXJ5SGFzaCA9IG9wdGlvbnMucXVlcnlIYXNoKSAhPSBudWxsID8gX29wdGlvbnMkcXVlcnlIYXNoIDogaGFzaFF1ZXJ5S2V5QnlPcHRpb25zKHF1ZXJ5S2V5LCBvcHRpb25zKTtcbiAgICB2YXIgcXVlcnkgPSB0aGlzLmdldChxdWVyeUhhc2gpO1xuXG4gICAgaWYgKCFxdWVyeSkge1xuICAgICAgcXVlcnkgPSBuZXcgUXVlcnkoe1xuICAgICAgICBjYWNoZTogdGhpcyxcbiAgICAgICAgcXVlcnlLZXk6IHF1ZXJ5S2V5LFxuICAgICAgICBxdWVyeUhhc2g6IHF1ZXJ5SGFzaCxcbiAgICAgICAgb3B0aW9uczogY2xpZW50LmRlZmF1bHRRdWVyeU9wdGlvbnMob3B0aW9ucyksXG4gICAgICAgIHN0YXRlOiBzdGF0ZSxcbiAgICAgICAgZGVmYXVsdE9wdGlvbnM6IGNsaWVudC5nZXRRdWVyeURlZmF1bHRzKHF1ZXJ5S2V5KSxcbiAgICAgICAgbWV0YTogb3B0aW9ucy5tZXRhXG4gICAgICB9KTtcbiAgICAgIHRoaXMuYWRkKHF1ZXJ5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcXVlcnk7XG4gIH07XG5cbiAgX3Byb3RvLmFkZCA9IGZ1bmN0aW9uIGFkZChxdWVyeSkge1xuICAgIGlmICghdGhpcy5xdWVyaWVzTWFwW3F1ZXJ5LnF1ZXJ5SGFzaF0pIHtcbiAgICAgIHRoaXMucXVlcmllc01hcFtxdWVyeS5xdWVyeUhhc2hdID0gcXVlcnk7XG4gICAgICB0aGlzLnF1ZXJpZXMucHVzaChxdWVyeSk7XG4gICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgIHR5cGU6ICdxdWVyeUFkZGVkJyxcbiAgICAgICAgcXVlcnk6IHF1ZXJ5XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnJlbW92ZSA9IGZ1bmN0aW9uIHJlbW92ZShxdWVyeSkge1xuICAgIHZhciBxdWVyeUluTWFwID0gdGhpcy5xdWVyaWVzTWFwW3F1ZXJ5LnF1ZXJ5SGFzaF07XG5cbiAgICBpZiAocXVlcnlJbk1hcCkge1xuICAgICAgcXVlcnkuZGVzdHJveSgpO1xuICAgICAgdGhpcy5xdWVyaWVzID0gdGhpcy5xdWVyaWVzLmZpbHRlcihmdW5jdGlvbiAoeCkge1xuICAgICAgICByZXR1cm4geCAhPT0gcXVlcnk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKHF1ZXJ5SW5NYXAgPT09IHF1ZXJ5KSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLnF1ZXJpZXNNYXBbcXVlcnkucXVlcnlIYXNoXTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICB0eXBlOiAncXVlcnlSZW1vdmVkJyxcbiAgICAgICAgcXVlcnk6IHF1ZXJ5XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLmNsZWFyID0gZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzMi5xdWVyaWVzLmZvckVhY2goZnVuY3Rpb24gKHF1ZXJ5KSB7XG4gICAgICAgIF90aGlzMi5yZW1vdmUocXVlcnkpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmdldCA9IGZ1bmN0aW9uIGdldChxdWVyeUhhc2gpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVyaWVzTWFwW3F1ZXJ5SGFzaF07XG4gIH07XG5cbiAgX3Byb3RvLmdldEFsbCA9IGZ1bmN0aW9uIGdldEFsbCgpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVyaWVzO1xuICB9O1xuXG4gIF9wcm90by5maW5kID0gZnVuY3Rpb24gZmluZChhcmcxLCBhcmcyKSB7XG4gICAgdmFyIF9wYXJzZUZpbHRlckFyZ3MgPSBwYXJzZUZpbHRlckFyZ3MoYXJnMSwgYXJnMiksXG4gICAgICAgIGZpbHRlcnMgPSBfcGFyc2VGaWx0ZXJBcmdzWzBdO1xuXG4gICAgaWYgKHR5cGVvZiBmaWx0ZXJzLmV4YWN0ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgZmlsdGVycy5leGFjdCA9IHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucXVlcmllcy5maW5kKGZ1bmN0aW9uIChxdWVyeSkge1xuICAgICAgcmV0dXJuIG1hdGNoUXVlcnkoZmlsdGVycywgcXVlcnkpO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5maW5kQWxsID0gZnVuY3Rpb24gZmluZEFsbChhcmcxLCBhcmcyKSB7XG4gICAgdmFyIF9wYXJzZUZpbHRlckFyZ3MyID0gcGFyc2VGaWx0ZXJBcmdzKGFyZzEsIGFyZzIpLFxuICAgICAgICBmaWx0ZXJzID0gX3BhcnNlRmlsdGVyQXJnczJbMF07XG5cbiAgICByZXR1cm4gT2JqZWN0LmtleXMoZmlsdGVycykubGVuZ3RoID4gMCA/IHRoaXMucXVlcmllcy5maWx0ZXIoZnVuY3Rpb24gKHF1ZXJ5KSB7XG4gICAgICByZXR1cm4gbWF0Y2hRdWVyeShmaWx0ZXJzLCBxdWVyeSk7XG4gICAgfSkgOiB0aGlzLnF1ZXJpZXM7XG4gIH07XG5cbiAgX3Byb3RvLm5vdGlmeSA9IGZ1bmN0aW9uIG5vdGlmeShldmVudCkge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczMubGlzdGVuZXJzLmZvckVhY2goZnVuY3Rpb24gKGxpc3RlbmVyKSB7XG4gICAgICAgIGxpc3RlbmVyKGV2ZW50KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5vbkZvY3VzID0gZnVuY3Rpb24gb25Gb2N1cygpIHtcbiAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXM0LnF1ZXJpZXMuZm9yRWFjaChmdW5jdGlvbiAocXVlcnkpIHtcbiAgICAgICAgcXVlcnkub25Gb2N1cygpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLm9uT25saW5lID0gZnVuY3Rpb24gb25PbmxpbmUoKSB7XG4gICAgdmFyIF90aGlzNSA9IHRoaXM7XG5cbiAgICBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzNS5xdWVyaWVzLmZvckVhY2goZnVuY3Rpb24gKHF1ZXJ5KSB7XG4gICAgICAgIHF1ZXJ5Lm9uT25saW5lKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4gUXVlcnlDYWNoZTtcbn0oU3Vic2NyaWJhYmxlKTsiLCAiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyBub3RpZnlNYW5hZ2VyIH0gZnJvbSAnLi9ub3RpZnlNYW5hZ2VyJztcbmltcG9ydCB7IFJldHJ5ZXIgfSBmcm9tICcuL3JldHJ5ZXInO1xuaW1wb3J0IHsgbm9vcCB9IGZyb20gJy4vdXRpbHMnOyAvLyBUWVBFU1xuXG4vLyBDTEFTU1xuZXhwb3J0IHZhciBNdXRhdGlvbiA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIE11dGF0aW9uKGNvbmZpZykge1xuICAgIHRoaXMub3B0aW9ucyA9IF9leHRlbmRzKHt9LCBjb25maWcuZGVmYXVsdE9wdGlvbnMsIGNvbmZpZy5vcHRpb25zKTtcbiAgICB0aGlzLm11dGF0aW9uSWQgPSBjb25maWcubXV0YXRpb25JZDtcbiAgICB0aGlzLm11dGF0aW9uQ2FjaGUgPSBjb25maWcubXV0YXRpb25DYWNoZTtcbiAgICB0aGlzLm9ic2VydmVycyA9IFtdO1xuICAgIHRoaXMuc3RhdGUgPSBjb25maWcuc3RhdGUgfHwgZ2V0RGVmYXVsdFN0YXRlKCk7XG4gICAgdGhpcy5tZXRhID0gY29uZmlnLm1ldGE7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gTXV0YXRpb24ucHJvdG90eXBlO1xuXG4gIF9wcm90by5zZXRTdGF0ZSA9IGZ1bmN0aW9uIHNldFN0YXRlKHN0YXRlKSB7XG4gICAgdGhpcy5kaXNwYXRjaCh7XG4gICAgICB0eXBlOiAnc2V0U3RhdGUnLFxuICAgICAgc3RhdGU6IHN0YXRlXG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmFkZE9ic2VydmVyID0gZnVuY3Rpb24gYWRkT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcbiAgICBpZiAodGhpcy5vYnNlcnZlcnMuaW5kZXhPZihvYnNlcnZlcikgPT09IC0xKSB7XG4gICAgICB0aGlzLm9ic2VydmVycy5wdXNoKG9ic2VydmVyKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnJlbW92ZU9ic2VydmVyID0gZnVuY3Rpb24gcmVtb3ZlT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcbiAgICB0aGlzLm9ic2VydmVycyA9IHRoaXMub2JzZXJ2ZXJzLmZpbHRlcihmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHggIT09IG9ic2VydmVyO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5jYW5jZWwgPSBmdW5jdGlvbiBjYW5jZWwoKSB7XG4gICAgaWYgKHRoaXMucmV0cnllcikge1xuICAgICAgdGhpcy5yZXRyeWVyLmNhbmNlbCgpO1xuICAgICAgcmV0dXJuIHRoaXMucmV0cnllci5wcm9taXNlLnRoZW4obm9vcCkuY2F0Y2gobm9vcCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9O1xuXG4gIF9wcm90by5jb250aW51ZSA9IGZ1bmN0aW9uIF9jb250aW51ZSgpIHtcbiAgICBpZiAodGhpcy5yZXRyeWVyKSB7XG4gICAgICB0aGlzLnJldHJ5ZXIuY29udGludWUoKTtcbiAgICAgIHJldHVybiB0aGlzLnJldHJ5ZXIucHJvbWlzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5leGVjdXRlKCk7XG4gIH07XG5cbiAgX3Byb3RvLmV4ZWN1dGUgPSBmdW5jdGlvbiBleGVjdXRlKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB2YXIgZGF0YTtcbiAgICB2YXIgcmVzdG9yZWQgPSB0aGlzLnN0YXRlLnN0YXR1cyA9PT0gJ2xvYWRpbmcnO1xuICAgIHZhciBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cbiAgICBpZiAoIXJlc3RvcmVkKSB7XG4gICAgICB0aGlzLmRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogJ2xvYWRpbmcnLFxuICAgICAgICB2YXJpYWJsZXM6IHRoaXMub3B0aW9ucy52YXJpYWJsZXNcbiAgICAgIH0pO1xuICAgICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIE5vdGlmeSBjYWNoZSBjYWxsYmFja1xuICAgICAgICBfdGhpcy5tdXRhdGlvbkNhY2hlLmNvbmZpZy5vbk11dGF0ZSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMubXV0YXRpb25DYWNoZS5jb25maWcub25NdXRhdGUoX3RoaXMuc3RhdGUudmFyaWFibGVzLCBfdGhpcyk7XG4gICAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLm9wdGlvbnMub25NdXRhdGUgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzLm9wdGlvbnMub25NdXRhdGUoX3RoaXMuc3RhdGUudmFyaWFibGVzKTtcbiAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgICAgaWYgKGNvbnRleHQgIT09IF90aGlzLnN0YXRlLmNvbnRleHQpIHtcbiAgICAgICAgICBfdGhpcy5kaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiAnbG9hZGluZycsXG4gICAgICAgICAgICBjb250ZXh0OiBjb250ZXh0LFxuICAgICAgICAgICAgdmFyaWFibGVzOiBfdGhpcy5zdGF0ZS52YXJpYWJsZXNcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3RoaXMuZXhlY3V0ZU11dGF0aW9uKCk7XG4gICAgfSkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICBkYXRhID0gcmVzdWx0OyAvLyBOb3RpZnkgY2FjaGUgY2FsbGJhY2tcblxuICAgICAgX3RoaXMubXV0YXRpb25DYWNoZS5jb25maWcub25TdWNjZXNzID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcy5tdXRhdGlvbkNhY2hlLmNvbmZpZy5vblN1Y2Nlc3MoZGF0YSwgX3RoaXMuc3RhdGUudmFyaWFibGVzLCBfdGhpcy5zdGF0ZS5jb250ZXh0LCBfdGhpcyk7XG4gICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3RoaXMub3B0aW9ucy5vblN1Y2Nlc3MgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzLm9wdGlvbnMub25TdWNjZXNzKGRhdGEsIF90aGlzLnN0YXRlLnZhcmlhYmxlcywgX3RoaXMuc3RhdGUuY29udGV4dCk7XG4gICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3RoaXMub3B0aW9ucy5vblNldHRsZWQgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzLm9wdGlvbnMub25TZXR0bGVkKGRhdGEsIG51bGwsIF90aGlzLnN0YXRlLnZhcmlhYmxlcywgX3RoaXMuc3RhdGUuY29udGV4dCk7XG4gICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5kaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6ICdzdWNjZXNzJyxcbiAgICAgICAgZGF0YTogZGF0YVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgLy8gTm90aWZ5IGNhY2hlIGNhbGxiYWNrXG4gICAgICBfdGhpcy5tdXRhdGlvbkNhY2hlLmNvbmZpZy5vbkVycm9yID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcy5tdXRhdGlvbkNhY2hlLmNvbmZpZy5vbkVycm9yKGVycm9yLCBfdGhpcy5zdGF0ZS52YXJpYWJsZXMsIF90aGlzLnN0YXRlLmNvbnRleHQsIF90aGlzKTsgLy8gTG9nIGVycm9yXG5cbiAgICAgIGdldExvZ2dlcigpLmVycm9yKGVycm9yKTtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLm9wdGlvbnMub25FcnJvciA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMub3B0aW9ucy5vbkVycm9yKGVycm9yLCBfdGhpcy5zdGF0ZS52YXJpYWJsZXMsIF90aGlzLnN0YXRlLmNvbnRleHQpO1xuICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5vcHRpb25zLm9uU2V0dGxlZCA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMub3B0aW9ucy5vblNldHRsZWQodW5kZWZpbmVkLCBlcnJvciwgX3RoaXMuc3RhdGUudmFyaWFibGVzLCBfdGhpcy5zdGF0ZS5jb250ZXh0KTtcbiAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpcy5kaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICBlcnJvcjogZXJyb3JcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uZXhlY3V0ZU11dGF0aW9uID0gZnVuY3Rpb24gZXhlY3V0ZU11dGF0aW9uKCkge1xuICAgIHZhciBfdGhpczIgPSB0aGlzLFxuICAgICAgICBfdGhpcyRvcHRpb25zJHJldHJ5O1xuXG4gICAgdGhpcy5yZXRyeWVyID0gbmV3IFJldHJ5ZXIoe1xuICAgICAgZm46IGZ1bmN0aW9uIGZuKCkge1xuICAgICAgICBpZiAoIV90aGlzMi5vcHRpb25zLm11dGF0aW9uRm4pIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoJ05vIG11dGF0aW9uRm4gZm91bmQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBfdGhpczIub3B0aW9ucy5tdXRhdGlvbkZuKF90aGlzMi5zdGF0ZS52YXJpYWJsZXMpO1xuICAgICAgfSxcbiAgICAgIG9uRmFpbDogZnVuY3Rpb24gb25GYWlsKCkge1xuICAgICAgICBfdGhpczIuZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6ICdmYWlsZWQnXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIG9uUGF1c2U6IGZ1bmN0aW9uIG9uUGF1c2UoKSB7XG4gICAgICAgIF90aGlzMi5kaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogJ3BhdXNlJ1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBvbkNvbnRpbnVlOiBmdW5jdGlvbiBvbkNvbnRpbnVlKCkge1xuICAgICAgICBfdGhpczIuZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6ICdjb250aW51ZSdcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgcmV0cnk6IChfdGhpcyRvcHRpb25zJHJldHJ5ID0gdGhpcy5vcHRpb25zLnJldHJ5KSAhPSBudWxsID8gX3RoaXMkb3B0aW9ucyRyZXRyeSA6IDAsXG4gICAgICByZXRyeURlbGF5OiB0aGlzLm9wdGlvbnMucmV0cnlEZWxheVxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLnJldHJ5ZXIucHJvbWlzZTtcbiAgfTtcblxuICBfcHJvdG8uZGlzcGF0Y2ggPSBmdW5jdGlvbiBkaXNwYXRjaChhY3Rpb24pIHtcbiAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgIHRoaXMuc3RhdGUgPSByZWR1Y2VyKHRoaXMuc3RhdGUsIGFjdGlvbik7XG4gICAgbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczMub2JzZXJ2ZXJzLmZvckVhY2goZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICAgIG9ic2VydmVyLm9uTXV0YXRpb25VcGRhdGUoYWN0aW9uKTtcbiAgICAgIH0pO1xuXG4gICAgICBfdGhpczMubXV0YXRpb25DYWNoZS5ub3RpZnkoX3RoaXMzKTtcbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4gTXV0YXRpb247XG59KCk7XG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdFN0YXRlKCkge1xuICByZXR1cm4ge1xuICAgIGNvbnRleHQ6IHVuZGVmaW5lZCxcbiAgICBkYXRhOiB1bmRlZmluZWQsXG4gICAgZXJyb3I6IG51bGwsXG4gICAgZmFpbHVyZUNvdW50OiAwLFxuICAgIGlzUGF1c2VkOiBmYWxzZSxcbiAgICBzdGF0dXM6ICdpZGxlJyxcbiAgICB2YXJpYWJsZXM6IHVuZGVmaW5lZFxuICB9O1xufVxuXG5mdW5jdGlvbiByZWR1Y2VyKHN0YXRlLCBhY3Rpb24pIHtcbiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgIGNhc2UgJ2ZhaWxlZCc6XG4gICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCB7XG4gICAgICAgIGZhaWx1cmVDb3VudDogc3RhdGUuZmFpbHVyZUNvdW50ICsgMVxuICAgICAgfSk7XG5cbiAgICBjYXNlICdwYXVzZSc6XG4gICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCB7XG4gICAgICAgIGlzUGF1c2VkOiB0cnVlXG4gICAgICB9KTtcblxuICAgIGNhc2UgJ2NvbnRpbnVlJzpcbiAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgaXNQYXVzZWQ6IGZhbHNlXG4gICAgICB9KTtcblxuICAgIGNhc2UgJ2xvYWRpbmcnOlxuICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwge1xuICAgICAgICBjb250ZXh0OiBhY3Rpb24uY29udGV4dCxcbiAgICAgICAgZGF0YTogdW5kZWZpbmVkLFxuICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgaXNQYXVzZWQ6IGZhbHNlLFxuICAgICAgICBzdGF0dXM6ICdsb2FkaW5nJyxcbiAgICAgICAgdmFyaWFibGVzOiBhY3Rpb24udmFyaWFibGVzXG4gICAgICB9KTtcblxuICAgIGNhc2UgJ3N1Y2Nlc3MnOlxuICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwge1xuICAgICAgICBkYXRhOiBhY3Rpb24uZGF0YSxcbiAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgIHN0YXR1czogJ3N1Y2Nlc3MnLFxuICAgICAgICBpc1BhdXNlZDogZmFsc2VcbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnZXJyb3InOlxuICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwge1xuICAgICAgICBkYXRhOiB1bmRlZmluZWQsXG4gICAgICAgIGVycm9yOiBhY3Rpb24uZXJyb3IsXG4gICAgICAgIGZhaWx1cmVDb3VudDogc3RhdGUuZmFpbHVyZUNvdW50ICsgMSxcbiAgICAgICAgaXNQYXVzZWQ6IGZhbHNlLFxuICAgICAgICBzdGF0dXM6ICdlcnJvcidcbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnc2V0U3RhdGUnOlxuICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwgYWN0aW9uLnN0YXRlKTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gc3RhdGU7XG4gIH1cbn0iLCAiaW1wb3J0IF9pbmhlcml0c0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlXCI7XG5pbXBvcnQgeyBub3RpZnlNYW5hZ2VyIH0gZnJvbSAnLi9ub3RpZnlNYW5hZ2VyJztcbmltcG9ydCB7IE11dGF0aW9uIH0gZnJvbSAnLi9tdXRhdGlvbic7XG5pbXBvcnQgeyBtYXRjaE11dGF0aW9uLCBub29wIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBTdWJzY3JpYmFibGUgfSBmcm9tICcuL3N1YnNjcmliYWJsZSc7IC8vIFRZUEVTXG5cbi8vIENMQVNTXG5leHBvcnQgdmFyIE11dGF0aW9uQ2FjaGUgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9TdWJzY3JpYmFibGUpIHtcbiAgX2luaGVyaXRzTG9vc2UoTXV0YXRpb25DYWNoZSwgX1N1YnNjcmliYWJsZSk7XG5cbiAgZnVuY3Rpb24gTXV0YXRpb25DYWNoZShjb25maWcpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfdGhpcyA9IF9TdWJzY3JpYmFibGUuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIF90aGlzLmNvbmZpZyA9IGNvbmZpZyB8fCB7fTtcbiAgICBfdGhpcy5tdXRhdGlvbnMgPSBbXTtcbiAgICBfdGhpcy5tdXRhdGlvbklkID0gMDtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gTXV0YXRpb25DYWNoZS5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmJ1aWxkID0gZnVuY3Rpb24gYnVpbGQoY2xpZW50LCBvcHRpb25zLCBzdGF0ZSkge1xuICAgIHZhciBtdXRhdGlvbiA9IG5ldyBNdXRhdGlvbih7XG4gICAgICBtdXRhdGlvbkNhY2hlOiB0aGlzLFxuICAgICAgbXV0YXRpb25JZDogKyt0aGlzLm11dGF0aW9uSWQsXG4gICAgICBvcHRpb25zOiBjbGllbnQuZGVmYXVsdE11dGF0aW9uT3B0aW9ucyhvcHRpb25zKSxcbiAgICAgIHN0YXRlOiBzdGF0ZSxcbiAgICAgIGRlZmF1bHRPcHRpb25zOiBvcHRpb25zLm11dGF0aW9uS2V5ID8gY2xpZW50LmdldE11dGF0aW9uRGVmYXVsdHMob3B0aW9ucy5tdXRhdGlvbktleSkgOiB1bmRlZmluZWQsXG4gICAgICBtZXRhOiBvcHRpb25zLm1ldGFcbiAgICB9KTtcbiAgICB0aGlzLmFkZChtdXRhdGlvbik7XG4gICAgcmV0dXJuIG11dGF0aW9uO1xuICB9O1xuXG4gIF9wcm90by5hZGQgPSBmdW5jdGlvbiBhZGQobXV0YXRpb24pIHtcbiAgICB0aGlzLm11dGF0aW9ucy5wdXNoKG11dGF0aW9uKTtcbiAgICB0aGlzLm5vdGlmeShtdXRhdGlvbik7XG4gIH07XG5cbiAgX3Byb3RvLnJlbW92ZSA9IGZ1bmN0aW9uIHJlbW92ZShtdXRhdGlvbikge1xuICAgIHRoaXMubXV0YXRpb25zID0gdGhpcy5tdXRhdGlvbnMuZmlsdGVyKGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4geCAhPT0gbXV0YXRpb247XG4gICAgfSk7XG4gICAgbXV0YXRpb24uY2FuY2VsKCk7XG4gICAgdGhpcy5ub3RpZnkobXV0YXRpb24pO1xuICB9O1xuXG4gIF9wcm90by5jbGVhciA9IGZ1bmN0aW9uIGNsZWFyKCkge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczIubXV0YXRpb25zLmZvckVhY2goZnVuY3Rpb24gKG11dGF0aW9uKSB7XG4gICAgICAgIF90aGlzMi5yZW1vdmUobXV0YXRpb24pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmdldEFsbCA9IGZ1bmN0aW9uIGdldEFsbCgpIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGlvbnM7XG4gIH07XG5cbiAgX3Byb3RvLmZpbmQgPSBmdW5jdGlvbiBmaW5kKGZpbHRlcnMpIHtcbiAgICBpZiAodHlwZW9mIGZpbHRlcnMuZXhhY3QgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBmaWx0ZXJzLmV4YWN0ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5tdXRhdGlvbnMuZmluZChmdW5jdGlvbiAobXV0YXRpb24pIHtcbiAgICAgIHJldHVybiBtYXRjaE11dGF0aW9uKGZpbHRlcnMsIG11dGF0aW9uKTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uZmluZEFsbCA9IGZ1bmN0aW9uIGZpbmRBbGwoZmlsdGVycykge1xuICAgIHJldHVybiB0aGlzLm11dGF0aW9ucy5maWx0ZXIoZnVuY3Rpb24gKG11dGF0aW9uKSB7XG4gICAgICByZXR1cm4gbWF0Y2hNdXRhdGlvbihmaWx0ZXJzLCBtdXRhdGlvbik7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLm5vdGlmeSA9IGZ1bmN0aW9uIG5vdGlmeShtdXRhdGlvbikge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczMubGlzdGVuZXJzLmZvckVhY2goZnVuY3Rpb24gKGxpc3RlbmVyKSB7XG4gICAgICAgIGxpc3RlbmVyKG11dGF0aW9uKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5vbkZvY3VzID0gZnVuY3Rpb24gb25Gb2N1cygpIHtcbiAgICB0aGlzLnJlc3VtZVBhdXNlZE11dGF0aW9ucygpO1xuICB9O1xuXG4gIF9wcm90by5vbk9ubGluZSA9IGZ1bmN0aW9uIG9uT25saW5lKCkge1xuICAgIHRoaXMucmVzdW1lUGF1c2VkTXV0YXRpb25zKCk7XG4gIH07XG5cbiAgX3Byb3RvLnJlc3VtZVBhdXNlZE11dGF0aW9ucyA9IGZ1bmN0aW9uIHJlc3VtZVBhdXNlZE11dGF0aW9ucygpIHtcbiAgICB2YXIgcGF1c2VkTXV0YXRpb25zID0gdGhpcy5tdXRhdGlvbnMuZmlsdGVyKGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4geC5zdGF0ZS5pc1BhdXNlZDtcbiAgICB9KTtcbiAgICByZXR1cm4gbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gcGF1c2VkTXV0YXRpb25zLnJlZHVjZShmdW5jdGlvbiAocHJvbWlzZSwgbXV0YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIG11dGF0aW9uLmNvbnRpbnVlKCkuY2F0Y2gobm9vcCk7XG4gICAgICAgIH0pO1xuICAgICAgfSwgUHJvbWlzZS5yZXNvbHZlKCkpO1xuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiBNdXRhdGlvbkNhY2hlO1xufShTdWJzY3JpYmFibGUpOyIsICJpbXBvcnQgeyBpc0NhbmNlbGFibGUgfSBmcm9tICcuL3JldHJ5ZXInO1xuaW1wb3J0IHsgZ2V0QWJvcnRDb250cm9sbGVyIH0gZnJvbSAnLi91dGlscyc7XG5leHBvcnQgZnVuY3Rpb24gaW5maW5pdGVRdWVyeUJlaGF2aW9yKCkge1xuICByZXR1cm4ge1xuICAgIG9uRmV0Y2g6IGZ1bmN0aW9uIG9uRmV0Y2goY29udGV4dCkge1xuICAgICAgY29udGV4dC5mZXRjaEZuID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2NvbnRleHQkZmV0Y2hPcHRpb25zLCBfY29udGV4dCRmZXRjaE9wdGlvbnMyLCBfY29udGV4dCRmZXRjaE9wdGlvbnMzLCBfY29udGV4dCRmZXRjaE9wdGlvbnM0LCBfY29udGV4dCRzdGF0ZSRkYXRhLCBfY29udGV4dCRzdGF0ZSRkYXRhMjtcblxuICAgICAgICB2YXIgcmVmZXRjaFBhZ2UgPSAoX2NvbnRleHQkZmV0Y2hPcHRpb25zID0gY29udGV4dC5mZXRjaE9wdGlvbnMpID09IG51bGwgPyB2b2lkIDAgOiAoX2NvbnRleHQkZmV0Y2hPcHRpb25zMiA9IF9jb250ZXh0JGZldGNoT3B0aW9ucy5tZXRhKSA9PSBudWxsID8gdm9pZCAwIDogX2NvbnRleHQkZmV0Y2hPcHRpb25zMi5yZWZldGNoUGFnZTtcbiAgICAgICAgdmFyIGZldGNoTW9yZSA9IChfY29udGV4dCRmZXRjaE9wdGlvbnMzID0gY29udGV4dC5mZXRjaE9wdGlvbnMpID09IG51bGwgPyB2b2lkIDAgOiAoX2NvbnRleHQkZmV0Y2hPcHRpb25zNCA9IF9jb250ZXh0JGZldGNoT3B0aW9uczMubWV0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9jb250ZXh0JGZldGNoT3B0aW9uczQuZmV0Y2hNb3JlO1xuICAgICAgICB2YXIgcGFnZVBhcmFtID0gZmV0Y2hNb3JlID09IG51bGwgPyB2b2lkIDAgOiBmZXRjaE1vcmUucGFnZVBhcmFtO1xuICAgICAgICB2YXIgaXNGZXRjaGluZ05leHRQYWdlID0gKGZldGNoTW9yZSA9PSBudWxsID8gdm9pZCAwIDogZmV0Y2hNb3JlLmRpcmVjdGlvbikgPT09ICdmb3J3YXJkJztcbiAgICAgICAgdmFyIGlzRmV0Y2hpbmdQcmV2aW91c1BhZ2UgPSAoZmV0Y2hNb3JlID09IG51bGwgPyB2b2lkIDAgOiBmZXRjaE1vcmUuZGlyZWN0aW9uKSA9PT0gJ2JhY2t3YXJkJztcbiAgICAgICAgdmFyIG9sZFBhZ2VzID0gKChfY29udGV4dCRzdGF0ZSRkYXRhID0gY29udGV4dC5zdGF0ZS5kYXRhKSA9PSBudWxsID8gdm9pZCAwIDogX2NvbnRleHQkc3RhdGUkZGF0YS5wYWdlcykgfHwgW107XG4gICAgICAgIHZhciBvbGRQYWdlUGFyYW1zID0gKChfY29udGV4dCRzdGF0ZSRkYXRhMiA9IGNvbnRleHQuc3RhdGUuZGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9jb250ZXh0JHN0YXRlJGRhdGEyLnBhZ2VQYXJhbXMpIHx8IFtdO1xuICAgICAgICB2YXIgYWJvcnRDb250cm9sbGVyID0gZ2V0QWJvcnRDb250cm9sbGVyKCk7XG4gICAgICAgIHZhciBhYm9ydFNpZ25hbCA9IGFib3J0Q29udHJvbGxlciA9PSBudWxsID8gdm9pZCAwIDogYWJvcnRDb250cm9sbGVyLnNpZ25hbDtcbiAgICAgICAgdmFyIG5ld1BhZ2VQYXJhbXMgPSBvbGRQYWdlUGFyYW1zO1xuICAgICAgICB2YXIgY2FuY2VsbGVkID0gZmFsc2U7IC8vIEdldCBxdWVyeSBmdW5jdGlvblxuXG4gICAgICAgIHZhciBxdWVyeUZuID0gY29udGV4dC5vcHRpb25zLnF1ZXJ5Rm4gfHwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCgnTWlzc2luZyBxdWVyeUZuJyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgdmFyIGJ1aWxkTmV3UGFnZXMgPSBmdW5jdGlvbiBidWlsZE5ld1BhZ2VzKHBhZ2VzLCBwYXJhbSwgcGFnZSwgcHJldmlvdXMpIHtcbiAgICAgICAgICBuZXdQYWdlUGFyYW1zID0gcHJldmlvdXMgPyBbcGFyYW1dLmNvbmNhdChuZXdQYWdlUGFyYW1zKSA6IFtdLmNvbmNhdChuZXdQYWdlUGFyYW1zLCBbcGFyYW1dKTtcbiAgICAgICAgICByZXR1cm4gcHJldmlvdXMgPyBbcGFnZV0uY29uY2F0KHBhZ2VzKSA6IFtdLmNvbmNhdChwYWdlcywgW3BhZ2VdKTtcbiAgICAgICAgfTsgLy8gQ3JlYXRlIGZ1bmN0aW9uIHRvIGZldGNoIGEgcGFnZVxuXG5cbiAgICAgICAgdmFyIGZldGNoUGFnZSA9IGZ1bmN0aW9uIGZldGNoUGFnZShwYWdlcywgbWFudWFsLCBwYXJhbSwgcHJldmlvdXMpIHtcbiAgICAgICAgICBpZiAoY2FuY2VsbGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoJ0NhbmNlbGxlZCcpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0eXBlb2YgcGFyYW0gPT09ICd1bmRlZmluZWQnICYmICFtYW51YWwgJiYgcGFnZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHBhZ2VzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgcXVlcnlGbkNvbnRleHQgPSB7XG4gICAgICAgICAgICBxdWVyeUtleTogY29udGV4dC5xdWVyeUtleSxcbiAgICAgICAgICAgIHNpZ25hbDogYWJvcnRTaWduYWwsXG4gICAgICAgICAgICBwYWdlUGFyYW06IHBhcmFtLFxuICAgICAgICAgICAgbWV0YTogY29udGV4dC5tZXRhXG4gICAgICAgICAgfTtcbiAgICAgICAgICB2YXIgcXVlcnlGblJlc3VsdCA9IHF1ZXJ5Rm4ocXVlcnlGbkNvbnRleHQpO1xuICAgICAgICAgIHZhciBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHF1ZXJ5Rm5SZXN1bHQpLnRoZW4oZnVuY3Rpb24gKHBhZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiBidWlsZE5ld1BhZ2VzKHBhZ2VzLCBwYXJhbSwgcGFnZSwgcHJldmlvdXMpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaWYgKGlzQ2FuY2VsYWJsZShxdWVyeUZuUmVzdWx0KSkge1xuICAgICAgICAgICAgdmFyIHByb21pc2VBc0FueSA9IHByb21pc2U7XG4gICAgICAgICAgICBwcm9taXNlQXNBbnkuY2FuY2VsID0gcXVlcnlGblJlc3VsdC5jYW5jZWw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgICAgIH07XG5cbiAgICAgICAgdmFyIHByb21pc2U7IC8vIEZldGNoIGZpcnN0IHBhZ2U/XG5cbiAgICAgICAgaWYgKCFvbGRQYWdlcy5sZW5ndGgpIHtcbiAgICAgICAgICBwcm9taXNlID0gZmV0Y2hQYWdlKFtdKTtcbiAgICAgICAgfSAvLyBGZXRjaCBuZXh0IHBhZ2U/XG4gICAgICAgIGVsc2UgaWYgKGlzRmV0Y2hpbmdOZXh0UGFnZSkge1xuICAgICAgICAgICAgdmFyIG1hbnVhbCA9IHR5cGVvZiBwYWdlUGFyYW0gIT09ICd1bmRlZmluZWQnO1xuICAgICAgICAgICAgdmFyIHBhcmFtID0gbWFudWFsID8gcGFnZVBhcmFtIDogZ2V0TmV4dFBhZ2VQYXJhbShjb250ZXh0Lm9wdGlvbnMsIG9sZFBhZ2VzKTtcbiAgICAgICAgICAgIHByb21pc2UgPSBmZXRjaFBhZ2Uob2xkUGFnZXMsIG1hbnVhbCwgcGFyYW0pO1xuICAgICAgICAgIH0gLy8gRmV0Y2ggcHJldmlvdXMgcGFnZT9cbiAgICAgICAgICBlbHNlIGlmIChpc0ZldGNoaW5nUHJldmlvdXNQYWdlKSB7XG4gICAgICAgICAgICAgIHZhciBfbWFudWFsID0gdHlwZW9mIHBhZ2VQYXJhbSAhPT0gJ3VuZGVmaW5lZCc7XG5cbiAgICAgICAgICAgICAgdmFyIF9wYXJhbSA9IF9tYW51YWwgPyBwYWdlUGFyYW0gOiBnZXRQcmV2aW91c1BhZ2VQYXJhbShjb250ZXh0Lm9wdGlvbnMsIG9sZFBhZ2VzKTtcblxuICAgICAgICAgICAgICBwcm9taXNlID0gZmV0Y2hQYWdlKG9sZFBhZ2VzLCBfbWFudWFsLCBfcGFyYW0sIHRydWUpO1xuICAgICAgICAgICAgfSAvLyBSZWZldGNoIHBhZ2VzXG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgbmV3UGFnZVBhcmFtcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgdmFyIG1hbnVhbCA9IHR5cGVvZiBjb250ZXh0Lm9wdGlvbnMuZ2V0TmV4dFBhZ2VQYXJhbSA9PT0gJ3VuZGVmaW5lZCc7XG4gICAgICAgICAgICAgICAgICB2YXIgc2hvdWxkRmV0Y2hGaXJzdFBhZ2UgPSByZWZldGNoUGFnZSAmJiBvbGRQYWdlc1swXSA/IHJlZmV0Y2hQYWdlKG9sZFBhZ2VzWzBdLCAwLCBvbGRQYWdlcykgOiB0cnVlOyAvLyBGZXRjaCBmaXJzdCBwYWdlXG5cbiAgICAgICAgICAgICAgICAgIHByb21pc2UgPSBzaG91bGRGZXRjaEZpcnN0UGFnZSA/IGZldGNoUGFnZShbXSwgbWFudWFsLCBvbGRQYWdlUGFyYW1zWzBdKSA6IFByb21pc2UucmVzb2x2ZShidWlsZE5ld1BhZ2VzKFtdLCBvbGRQYWdlUGFyYW1zWzBdLCBvbGRQYWdlc1swXSkpOyAvLyBGZXRjaCByZW1haW5pbmcgcGFnZXNcblxuICAgICAgICAgICAgICAgICAgdmFyIF9sb29wID0gZnVuY3Rpb24gX2xvb3AoaSkge1xuICAgICAgICAgICAgICAgICAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKGZ1bmN0aW9uIChwYWdlcykge1xuICAgICAgICAgICAgICAgICAgICAgIHZhciBzaG91bGRGZXRjaE5leHRQYWdlID0gcmVmZXRjaFBhZ2UgJiYgb2xkUGFnZXNbaV0gPyByZWZldGNoUGFnZShvbGRQYWdlc1tpXSwgaSwgb2xkUGFnZXMpIDogdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgIGlmIChzaG91bGRGZXRjaE5leHRQYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3BhcmFtMiA9IG1hbnVhbCA/IG9sZFBhZ2VQYXJhbXNbaV0gOiBnZXROZXh0UGFnZVBhcmFtKGNvbnRleHQub3B0aW9ucywgcGFnZXMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmV0Y2hQYWdlKHBhZ2VzLCBtYW51YWwsIF9wYXJhbTIpO1xuICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoYnVpbGROZXdQYWdlcyhwYWdlcywgb2xkUGFnZVBhcmFtc1tpXSwgb2xkUGFnZXNbaV0pKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IG9sZFBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIF9sb29wKGkpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICB2YXIgZmluYWxQcm9taXNlID0gcHJvbWlzZS50aGVuKGZ1bmN0aW9uIChwYWdlcykge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwYWdlczogcGFnZXMsXG4gICAgICAgICAgICBwYWdlUGFyYW1zOiBuZXdQYWdlUGFyYW1zXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBmaW5hbFByb21pc2VBc0FueSA9IGZpbmFsUHJvbWlzZTtcblxuICAgICAgICBmaW5hbFByb21pc2VBc0FueS5jYW5jZWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY2FuY2VsbGVkID0gdHJ1ZTtcbiAgICAgICAgICBhYm9ydENvbnRyb2xsZXIgPT0gbnVsbCA/IHZvaWQgMCA6IGFib3J0Q29udHJvbGxlci5hYm9ydCgpO1xuXG4gICAgICAgICAgaWYgKGlzQ2FuY2VsYWJsZShwcm9taXNlKSkge1xuICAgICAgICAgICAgcHJvbWlzZS5jYW5jZWwoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIGZpbmFsUHJvbWlzZTtcbiAgICAgIH07XG4gICAgfVxuICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldE5leHRQYWdlUGFyYW0ob3B0aW9ucywgcGFnZXMpIHtcbiAgcmV0dXJuIG9wdGlvbnMuZ2V0TmV4dFBhZ2VQYXJhbSA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5nZXROZXh0UGFnZVBhcmFtKHBhZ2VzW3BhZ2VzLmxlbmd0aCAtIDFdLCBwYWdlcyk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0UHJldmlvdXNQYWdlUGFyYW0ob3B0aW9ucywgcGFnZXMpIHtcbiAgcmV0dXJuIG9wdGlvbnMuZ2V0UHJldmlvdXNQYWdlUGFyYW0gPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMuZ2V0UHJldmlvdXNQYWdlUGFyYW0ocGFnZXNbMF0sIHBhZ2VzKTtcbn1cbi8qKlxuICogQ2hlY2tzIGlmIHRoZXJlIGlzIGEgbmV4dCBwYWdlLlxuICogUmV0dXJucyBgdW5kZWZpbmVkYCBpZiBpdCBjYW5ub3QgYmUgZGV0ZXJtaW5lZC5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaGFzTmV4dFBhZ2Uob3B0aW9ucywgcGFnZXMpIHtcbiAgaWYgKG9wdGlvbnMuZ2V0TmV4dFBhZ2VQYXJhbSAmJiBBcnJheS5pc0FycmF5KHBhZ2VzKSkge1xuICAgIHZhciBuZXh0UGFnZVBhcmFtID0gZ2V0TmV4dFBhZ2VQYXJhbShvcHRpb25zLCBwYWdlcyk7XG4gICAgcmV0dXJuIHR5cGVvZiBuZXh0UGFnZVBhcmFtICE9PSAndW5kZWZpbmVkJyAmJiBuZXh0UGFnZVBhcmFtICE9PSBudWxsICYmIG5leHRQYWdlUGFyYW0gIT09IGZhbHNlO1xuICB9XG59XG4vKipcbiAqIENoZWNrcyBpZiB0aGVyZSBpcyBhIHByZXZpb3VzIHBhZ2UuXG4gKiBSZXR1cm5zIGB1bmRlZmluZWRgIGlmIGl0IGNhbm5vdCBiZSBkZXRlcm1pbmVkLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNQcmV2aW91c1BhZ2Uob3B0aW9ucywgcGFnZXMpIHtcbiAgaWYgKG9wdGlvbnMuZ2V0UHJldmlvdXNQYWdlUGFyYW0gJiYgQXJyYXkuaXNBcnJheShwYWdlcykpIHtcbiAgICB2YXIgcHJldmlvdXNQYWdlUGFyYW0gPSBnZXRQcmV2aW91c1BhZ2VQYXJhbShvcHRpb25zLCBwYWdlcyk7XG4gICAgcmV0dXJuIHR5cGVvZiBwcmV2aW91c1BhZ2VQYXJhbSAhPT0gJ3VuZGVmaW5lZCcgJiYgcHJldmlvdXNQYWdlUGFyYW0gIT09IG51bGwgJiYgcHJldmlvdXNQYWdlUGFyYW0gIT09IGZhbHNlO1xuICB9XG59IiwgImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IHsgaGFzaFF1ZXJ5S2V5LCBub29wLCBwYXJzZUZpbHRlckFyZ3MsIHBhcnNlUXVlcnlBcmdzLCBwYXJ0aWFsTWF0Y2hLZXksIGhhc2hRdWVyeUtleUJ5T3B0aW9ucyB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgUXVlcnlDYWNoZSB9IGZyb20gJy4vcXVlcnlDYWNoZSc7XG5pbXBvcnQgeyBNdXRhdGlvbkNhY2hlIH0gZnJvbSAnLi9tdXRhdGlvbkNhY2hlJztcbmltcG9ydCB7IGZvY3VzTWFuYWdlciB9IGZyb20gJy4vZm9jdXNNYW5hZ2VyJztcbmltcG9ydCB7IG9ubGluZU1hbmFnZXIgfSBmcm9tICcuL29ubGluZU1hbmFnZXInO1xuaW1wb3J0IHsgbm90aWZ5TWFuYWdlciB9IGZyb20gJy4vbm90aWZ5TWFuYWdlcic7XG5pbXBvcnQgeyBpbmZpbml0ZVF1ZXJ5QmVoYXZpb3IgfSBmcm9tICcuL2luZmluaXRlUXVlcnlCZWhhdmlvcic7XG4vLyBDTEFTU1xuZXhwb3J0IHZhciBRdWVyeUNsaWVudCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFF1ZXJ5Q2xpZW50KGNvbmZpZykge1xuICAgIGlmIChjb25maWcgPT09IHZvaWQgMCkge1xuICAgICAgY29uZmlnID0ge307XG4gICAgfVxuXG4gICAgdGhpcy5xdWVyeUNhY2hlID0gY29uZmlnLnF1ZXJ5Q2FjaGUgfHwgbmV3IFF1ZXJ5Q2FjaGUoKTtcbiAgICB0aGlzLm11dGF0aW9uQ2FjaGUgPSBjb25maWcubXV0YXRpb25DYWNoZSB8fCBuZXcgTXV0YXRpb25DYWNoZSgpO1xuICAgIHRoaXMuZGVmYXVsdE9wdGlvbnMgPSBjb25maWcuZGVmYXVsdE9wdGlvbnMgfHwge307XG4gICAgdGhpcy5xdWVyeURlZmF1bHRzID0gW107XG4gICAgdGhpcy5tdXRhdGlvbkRlZmF1bHRzID0gW107XG4gIH1cblxuICB2YXIgX3Byb3RvID0gUXVlcnlDbGllbnQucHJvdG90eXBlO1xuXG4gIF9wcm90by5tb3VudCA9IGZ1bmN0aW9uIG1vdW50KCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB0aGlzLnVuc3Vic2NyaWJlRm9jdXMgPSBmb2N1c01hbmFnZXIuc3Vic2NyaWJlKGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChmb2N1c01hbmFnZXIuaXNGb2N1c2VkKCkgJiYgb25saW5lTWFuYWdlci5pc09ubGluZSgpKSB7XG4gICAgICAgIF90aGlzLm11dGF0aW9uQ2FjaGUub25Gb2N1cygpO1xuXG4gICAgICAgIF90aGlzLnF1ZXJ5Q2FjaGUub25Gb2N1cygpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMudW5zdWJzY3JpYmVPbmxpbmUgPSBvbmxpbmVNYW5hZ2VyLnN1YnNjcmliZShmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoZm9jdXNNYW5hZ2VyLmlzRm9jdXNlZCgpICYmIG9ubGluZU1hbmFnZXIuaXNPbmxpbmUoKSkge1xuICAgICAgICBfdGhpcy5tdXRhdGlvbkNhY2hlLm9uT25saW5lKCk7XG5cbiAgICAgICAgX3RoaXMucXVlcnlDYWNoZS5vbk9ubGluZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by51bm1vdW50ID0gZnVuY3Rpb24gdW5tb3VudCgpIHtcbiAgICB2YXIgX3RoaXMkdW5zdWJzY3JpYmVGb2N1LCBfdGhpcyR1bnN1YnNjcmliZU9ubGk7XG5cbiAgICAoX3RoaXMkdW5zdWJzY3JpYmVGb2N1ID0gdGhpcy51bnN1YnNjcmliZUZvY3VzKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkdW5zdWJzY3JpYmVGb2N1LmNhbGwodGhpcyk7XG4gICAgKF90aGlzJHVuc3Vic2NyaWJlT25saSA9IHRoaXMudW5zdWJzY3JpYmVPbmxpbmUpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyR1bnN1YnNjcmliZU9ubGkuY2FsbCh0aGlzKTtcbiAgfTtcblxuICBfcHJvdG8uaXNGZXRjaGluZyA9IGZ1bmN0aW9uIGlzRmV0Y2hpbmcoYXJnMSwgYXJnMikge1xuICAgIHZhciBfcGFyc2VGaWx0ZXJBcmdzID0gcGFyc2VGaWx0ZXJBcmdzKGFyZzEsIGFyZzIpLFxuICAgICAgICBmaWx0ZXJzID0gX3BhcnNlRmlsdGVyQXJnc1swXTtcblxuICAgIGZpbHRlcnMuZmV0Y2hpbmcgPSB0cnVlO1xuICAgIHJldHVybiB0aGlzLnF1ZXJ5Q2FjaGUuZmluZEFsbChmaWx0ZXJzKS5sZW5ndGg7XG4gIH07XG5cbiAgX3Byb3RvLmlzTXV0YXRpbmcgPSBmdW5jdGlvbiBpc011dGF0aW5nKGZpbHRlcnMpIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGlvbkNhY2hlLmZpbmRBbGwoX2V4dGVuZHMoe30sIGZpbHRlcnMsIHtcbiAgICAgIGZldGNoaW5nOiB0cnVlXG4gICAgfSkpLmxlbmd0aDtcbiAgfTtcblxuICBfcHJvdG8uZ2V0UXVlcnlEYXRhID0gZnVuY3Rpb24gZ2V0UXVlcnlEYXRhKHF1ZXJ5S2V5LCBmaWx0ZXJzKSB7XG4gICAgdmFyIF90aGlzJHF1ZXJ5Q2FjaGUkZmluZDtcblxuICAgIHJldHVybiAoX3RoaXMkcXVlcnlDYWNoZSRmaW5kID0gdGhpcy5xdWVyeUNhY2hlLmZpbmQocXVlcnlLZXksIGZpbHRlcnMpKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkcXVlcnlDYWNoZSRmaW5kLnN0YXRlLmRhdGE7XG4gIH07XG5cbiAgX3Byb3RvLmdldFF1ZXJpZXNEYXRhID0gZnVuY3Rpb24gZ2V0UXVlcmllc0RhdGEocXVlcnlLZXlPckZpbHRlcnMpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRRdWVyeUNhY2hlKCkuZmluZEFsbChxdWVyeUtleU9yRmlsdGVycykubWFwKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICB2YXIgcXVlcnlLZXkgPSBfcmVmLnF1ZXJ5S2V5LFxuICAgICAgICAgIHN0YXRlID0gX3JlZi5zdGF0ZTtcbiAgICAgIHZhciBkYXRhID0gc3RhdGUuZGF0YTtcbiAgICAgIHJldHVybiBbcXVlcnlLZXksIGRhdGFdO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5zZXRRdWVyeURhdGEgPSBmdW5jdGlvbiBzZXRRdWVyeURhdGEocXVlcnlLZXksIHVwZGF0ZXIsIG9wdGlvbnMpIHtcbiAgICB2YXIgcGFyc2VkT3B0aW9ucyA9IHBhcnNlUXVlcnlBcmdzKHF1ZXJ5S2V5KTtcbiAgICB2YXIgZGVmYXVsdGVkT3B0aW9ucyA9IHRoaXMuZGVmYXVsdFF1ZXJ5T3B0aW9ucyhwYXJzZWRPcHRpb25zKTtcbiAgICByZXR1cm4gdGhpcy5xdWVyeUNhY2hlLmJ1aWxkKHRoaXMsIGRlZmF1bHRlZE9wdGlvbnMpLnNldERhdGEodXBkYXRlciwgb3B0aW9ucyk7XG4gIH07XG5cbiAgX3Byb3RvLnNldFF1ZXJpZXNEYXRhID0gZnVuY3Rpb24gc2V0UXVlcmllc0RhdGEocXVlcnlLZXlPckZpbHRlcnMsIHVwZGF0ZXIsIG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIHJldHVybiBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpczIuZ2V0UXVlcnlDYWNoZSgpLmZpbmRBbGwocXVlcnlLZXlPckZpbHRlcnMpLm1hcChmdW5jdGlvbiAoX3JlZjIpIHtcbiAgICAgICAgdmFyIHF1ZXJ5S2V5ID0gX3JlZjIucXVlcnlLZXk7XG4gICAgICAgIHJldHVybiBbcXVlcnlLZXksIF90aGlzMi5zZXRRdWVyeURhdGEocXVlcnlLZXksIHVwZGF0ZXIsIG9wdGlvbnMpXTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5nZXRRdWVyeVN0YXRlID0gZnVuY3Rpb24gZ2V0UXVlcnlTdGF0ZShxdWVyeUtleSwgZmlsdGVycykge1xuICAgIHZhciBfdGhpcyRxdWVyeUNhY2hlJGZpbmQyO1xuXG4gICAgcmV0dXJuIChfdGhpcyRxdWVyeUNhY2hlJGZpbmQyID0gdGhpcy5xdWVyeUNhY2hlLmZpbmQocXVlcnlLZXksIGZpbHRlcnMpKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkcXVlcnlDYWNoZSRmaW5kMi5zdGF0ZTtcbiAgfTtcblxuICBfcHJvdG8ucmVtb3ZlUXVlcmllcyA9IGZ1bmN0aW9uIHJlbW92ZVF1ZXJpZXMoYXJnMSwgYXJnMikge1xuICAgIHZhciBfcGFyc2VGaWx0ZXJBcmdzMiA9IHBhcnNlRmlsdGVyQXJncyhhcmcxLCBhcmcyKSxcbiAgICAgICAgZmlsdGVycyA9IF9wYXJzZUZpbHRlckFyZ3MyWzBdO1xuXG4gICAgdmFyIHF1ZXJ5Q2FjaGUgPSB0aGlzLnF1ZXJ5Q2FjaGU7XG4gICAgbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICBxdWVyeUNhY2hlLmZpbmRBbGwoZmlsdGVycykuZm9yRWFjaChmdW5jdGlvbiAocXVlcnkpIHtcbiAgICAgICAgcXVlcnlDYWNoZS5yZW1vdmUocXVlcnkpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLnJlc2V0UXVlcmllcyA9IGZ1bmN0aW9uIHJlc2V0UXVlcmllcyhhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICB2YXIgX3BhcnNlRmlsdGVyQXJnczMgPSBwYXJzZUZpbHRlckFyZ3MoYXJnMSwgYXJnMiwgYXJnMyksXG4gICAgICAgIGZpbHRlcnMgPSBfcGFyc2VGaWx0ZXJBcmdzM1swXSxcbiAgICAgICAgb3B0aW9ucyA9IF9wYXJzZUZpbHRlckFyZ3MzWzFdO1xuXG4gICAgdmFyIHF1ZXJ5Q2FjaGUgPSB0aGlzLnF1ZXJ5Q2FjaGU7XG5cbiAgICB2YXIgcmVmZXRjaEZpbHRlcnMgPSBfZXh0ZW5kcyh7fSwgZmlsdGVycywge1xuICAgICAgYWN0aXZlOiB0cnVlXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICBxdWVyeUNhY2hlLmZpbmRBbGwoZmlsdGVycykuZm9yRWFjaChmdW5jdGlvbiAocXVlcnkpIHtcbiAgICAgICAgcXVlcnkucmVzZXQoKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIF90aGlzMy5yZWZldGNoUXVlcmllcyhyZWZldGNoRmlsdGVycywgb3B0aW9ucyk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmNhbmNlbFF1ZXJpZXMgPSBmdW5jdGlvbiBjYW5jZWxRdWVyaWVzKGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgIHZhciBfcGFyc2VGaWx0ZXJBcmdzNCA9IHBhcnNlRmlsdGVyQXJncyhhcmcxLCBhcmcyLCBhcmczKSxcbiAgICAgICAgZmlsdGVycyA9IF9wYXJzZUZpbHRlckFyZ3M0WzBdLFxuICAgICAgICBfcGFyc2VGaWx0ZXJBcmdzNCQgPSBfcGFyc2VGaWx0ZXJBcmdzNFsxXSxcbiAgICAgICAgY2FuY2VsT3B0aW9ucyA9IF9wYXJzZUZpbHRlckFyZ3M0JCA9PT0gdm9pZCAwID8ge30gOiBfcGFyc2VGaWx0ZXJBcmdzNCQ7XG5cbiAgICBpZiAodHlwZW9mIGNhbmNlbE9wdGlvbnMucmV2ZXJ0ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgY2FuY2VsT3B0aW9ucy5yZXZlcnQgPSB0cnVlO1xuICAgIH1cblxuICAgIHZhciBwcm9taXNlcyA9IG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzNC5xdWVyeUNhY2hlLmZpbmRBbGwoZmlsdGVycykubWFwKGZ1bmN0aW9uIChxdWVyeSkge1xuICAgICAgICByZXR1cm4gcXVlcnkuY2FuY2VsKGNhbmNlbE9wdGlvbnMpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKG5vb3ApLmNhdGNoKG5vb3ApO1xuICB9O1xuXG4gIF9wcm90by5pbnZhbGlkYXRlUXVlcmllcyA9IGZ1bmN0aW9uIGludmFsaWRhdGVRdWVyaWVzKGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgICB2YXIgX3JlZjMsXG4gICAgICAgIF9maWx0ZXJzJHJlZmV0Y2hBY3RpdixcbiAgICAgICAgX2ZpbHRlcnMkcmVmZXRjaEluYWN0LFxuICAgICAgICBfdGhpczUgPSB0aGlzO1xuXG4gICAgdmFyIF9wYXJzZUZpbHRlckFyZ3M1ID0gcGFyc2VGaWx0ZXJBcmdzKGFyZzEsIGFyZzIsIGFyZzMpLFxuICAgICAgICBmaWx0ZXJzID0gX3BhcnNlRmlsdGVyQXJnczVbMF0sXG4gICAgICAgIG9wdGlvbnMgPSBfcGFyc2VGaWx0ZXJBcmdzNVsxXTtcblxuICAgIHZhciByZWZldGNoRmlsdGVycyA9IF9leHRlbmRzKHt9LCBmaWx0ZXJzLCB7XG4gICAgICAvLyBpZiBmaWx0ZXJzLnJlZmV0Y2hBY3RpdmUgaXMgbm90IHByb3ZpZGVkIGFuZCBmaWx0ZXJzLmFjdGl2ZSBpcyBleHBsaWNpdGx5IGZhbHNlLFxuICAgICAgLy8gZS5nLiBpbnZhbGlkYXRlUXVlcmllcyh7IGFjdGl2ZTogZmFsc2UgfSksIHdlIGRvbid0IHdhbnQgdG8gcmVmZXRjaCBhY3RpdmUgcXVlcmllc1xuICAgICAgYWN0aXZlOiAoX3JlZjMgPSAoX2ZpbHRlcnMkcmVmZXRjaEFjdGl2ID0gZmlsdGVycy5yZWZldGNoQWN0aXZlKSAhPSBudWxsID8gX2ZpbHRlcnMkcmVmZXRjaEFjdGl2IDogZmlsdGVycy5hY3RpdmUpICE9IG51bGwgPyBfcmVmMyA6IHRydWUsXG4gICAgICBpbmFjdGl2ZTogKF9maWx0ZXJzJHJlZmV0Y2hJbmFjdCA9IGZpbHRlcnMucmVmZXRjaEluYWN0aXZlKSAhPSBudWxsID8gX2ZpbHRlcnMkcmVmZXRjaEluYWN0IDogZmFsc2VcbiAgICB9KTtcblxuICAgIHJldHVybiBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzNS5xdWVyeUNhY2hlLmZpbmRBbGwoZmlsdGVycykuZm9yRWFjaChmdW5jdGlvbiAocXVlcnkpIHtcbiAgICAgICAgcXVlcnkuaW52YWxpZGF0ZSgpO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBfdGhpczUucmVmZXRjaFF1ZXJpZXMocmVmZXRjaEZpbHRlcnMsIG9wdGlvbnMpO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5yZWZldGNoUXVlcmllcyA9IGZ1bmN0aW9uIHJlZmV0Y2hRdWVyaWVzKGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgICB2YXIgX3RoaXM2ID0gdGhpcztcblxuICAgIHZhciBfcGFyc2VGaWx0ZXJBcmdzNiA9IHBhcnNlRmlsdGVyQXJncyhhcmcxLCBhcmcyLCBhcmczKSxcbiAgICAgICAgZmlsdGVycyA9IF9wYXJzZUZpbHRlckFyZ3M2WzBdLFxuICAgICAgICBvcHRpb25zID0gX3BhcnNlRmlsdGVyQXJnczZbMV07XG5cbiAgICB2YXIgcHJvbWlzZXMgPSBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpczYucXVlcnlDYWNoZS5maW5kQWxsKGZpbHRlcnMpLm1hcChmdW5jdGlvbiAocXVlcnkpIHtcbiAgICAgICAgcmV0dXJuIHF1ZXJ5LmZldGNoKHVuZGVmaW5lZCwgX2V4dGVuZHMoe30sIG9wdGlvbnMsIHtcbiAgICAgICAgICBtZXRhOiB7XG4gICAgICAgICAgICByZWZldGNoUGFnZTogZmlsdGVycyA9PSBudWxsID8gdm9pZCAwIDogZmlsdGVycy5yZWZldGNoUGFnZVxuICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgdmFyIHByb21pc2UgPSBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbihub29wKTtcblxuICAgIGlmICghKG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMudGhyb3dPbkVycm9yKSkge1xuICAgICAgcHJvbWlzZSA9IHByb21pc2UuY2F0Y2gobm9vcCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH07XG5cbiAgX3Byb3RvLmZldGNoUXVlcnkgPSBmdW5jdGlvbiBmZXRjaFF1ZXJ5KGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgICB2YXIgcGFyc2VkT3B0aW9ucyA9IHBhcnNlUXVlcnlBcmdzKGFyZzEsIGFyZzIsIGFyZzMpO1xuICAgIHZhciBkZWZhdWx0ZWRPcHRpb25zID0gdGhpcy5kZWZhdWx0UXVlcnlPcHRpb25zKHBhcnNlZE9wdGlvbnMpOyAvLyBodHRwczovL2dpdGh1Yi5jb20vdGFubmVybGluc2xleS9yZWFjdC1xdWVyeS9pc3N1ZXMvNjUyXG5cbiAgICBpZiAodHlwZW9mIGRlZmF1bHRlZE9wdGlvbnMucmV0cnkgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBkZWZhdWx0ZWRPcHRpb25zLnJldHJ5ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIHF1ZXJ5ID0gdGhpcy5xdWVyeUNhY2hlLmJ1aWxkKHRoaXMsIGRlZmF1bHRlZE9wdGlvbnMpO1xuICAgIHJldHVybiBxdWVyeS5pc1N0YWxlQnlUaW1lKGRlZmF1bHRlZE9wdGlvbnMuc3RhbGVUaW1lKSA/IHF1ZXJ5LmZldGNoKGRlZmF1bHRlZE9wdGlvbnMpIDogUHJvbWlzZS5yZXNvbHZlKHF1ZXJ5LnN0YXRlLmRhdGEpO1xuICB9O1xuXG4gIF9wcm90by5wcmVmZXRjaFF1ZXJ5ID0gZnVuY3Rpb24gcHJlZmV0Y2hRdWVyeShhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgcmV0dXJuIHRoaXMuZmV0Y2hRdWVyeShhcmcxLCBhcmcyLCBhcmczKS50aGVuKG5vb3ApLmNhdGNoKG5vb3ApO1xuICB9O1xuXG4gIF9wcm90by5mZXRjaEluZmluaXRlUXVlcnkgPSBmdW5jdGlvbiBmZXRjaEluZmluaXRlUXVlcnkoYXJnMSwgYXJnMiwgYXJnMykge1xuICAgIHZhciBwYXJzZWRPcHRpb25zID0gcGFyc2VRdWVyeUFyZ3MoYXJnMSwgYXJnMiwgYXJnMyk7XG4gICAgcGFyc2VkT3B0aW9ucy5iZWhhdmlvciA9IGluZmluaXRlUXVlcnlCZWhhdmlvcigpO1xuICAgIHJldHVybiB0aGlzLmZldGNoUXVlcnkocGFyc2VkT3B0aW9ucyk7XG4gIH07XG5cbiAgX3Byb3RvLnByZWZldGNoSW5maW5pdGVRdWVyeSA9IGZ1bmN0aW9uIHByZWZldGNoSW5maW5pdGVRdWVyeShhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgcmV0dXJuIHRoaXMuZmV0Y2hJbmZpbml0ZVF1ZXJ5KGFyZzEsIGFyZzIsIGFyZzMpLnRoZW4obm9vcCkuY2F0Y2gobm9vcCk7XG4gIH07XG5cbiAgX3Byb3RvLmNhbmNlbE11dGF0aW9ucyA9IGZ1bmN0aW9uIGNhbmNlbE11dGF0aW9ucygpIHtcbiAgICB2YXIgX3RoaXM3ID0gdGhpcztcblxuICAgIHZhciBwcm9taXNlcyA9IG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzNy5tdXRhdGlvbkNhY2hlLmdldEFsbCgpLm1hcChmdW5jdGlvbiAobXV0YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIG11dGF0aW9uLmNhbmNlbCgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKG5vb3ApLmNhdGNoKG5vb3ApO1xuICB9O1xuXG4gIF9wcm90by5yZXN1bWVQYXVzZWRNdXRhdGlvbnMgPSBmdW5jdGlvbiByZXN1bWVQYXVzZWRNdXRhdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TXV0YXRpb25DYWNoZSgpLnJlc3VtZVBhdXNlZE11dGF0aW9ucygpO1xuICB9O1xuXG4gIF9wcm90by5leGVjdXRlTXV0YXRpb24gPSBmdW5jdGlvbiBleGVjdXRlTXV0YXRpb24ob3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLm11dGF0aW9uQ2FjaGUuYnVpbGQodGhpcywgb3B0aW9ucykuZXhlY3V0ZSgpO1xuICB9O1xuXG4gIF9wcm90by5nZXRRdWVyeUNhY2hlID0gZnVuY3Rpb24gZ2V0UXVlcnlDYWNoZSgpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeUNhY2hlO1xuICB9O1xuXG4gIF9wcm90by5nZXRNdXRhdGlvbkNhY2hlID0gZnVuY3Rpb24gZ2V0TXV0YXRpb25DYWNoZSgpIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGlvbkNhY2hlO1xuICB9O1xuXG4gIF9wcm90by5nZXREZWZhdWx0T3B0aW9ucyA9IGZ1bmN0aW9uIGdldERlZmF1bHRPcHRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmRlZmF1bHRPcHRpb25zO1xuICB9O1xuXG4gIF9wcm90by5zZXREZWZhdWx0T3B0aW9ucyA9IGZ1bmN0aW9uIHNldERlZmF1bHRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICB0aGlzLmRlZmF1bHRPcHRpb25zID0gb3B0aW9ucztcbiAgfTtcblxuICBfcHJvdG8uc2V0UXVlcnlEZWZhdWx0cyA9IGZ1bmN0aW9uIHNldFF1ZXJ5RGVmYXVsdHMocXVlcnlLZXksIG9wdGlvbnMpIHtcbiAgICB2YXIgcmVzdWx0ID0gdGhpcy5xdWVyeURlZmF1bHRzLmZpbmQoZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiBoYXNoUXVlcnlLZXkocXVlcnlLZXkpID09PSBoYXNoUXVlcnlLZXkoeC5xdWVyeUtleSk7XG4gICAgfSk7XG5cbiAgICBpZiAocmVzdWx0KSB7XG4gICAgICByZXN1bHQuZGVmYXVsdE9wdGlvbnMgPSBvcHRpb25zO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnF1ZXJ5RGVmYXVsdHMucHVzaCh7XG4gICAgICAgIHF1ZXJ5S2V5OiBxdWVyeUtleSxcbiAgICAgICAgZGVmYXVsdE9wdGlvbnM6IG9wdGlvbnNcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uZ2V0UXVlcnlEZWZhdWx0cyA9IGZ1bmN0aW9uIGdldFF1ZXJ5RGVmYXVsdHMocXVlcnlLZXkpIHtcbiAgICB2YXIgX3RoaXMkcXVlcnlEZWZhdWx0cyRmO1xuXG4gICAgcmV0dXJuIHF1ZXJ5S2V5ID8gKF90aGlzJHF1ZXJ5RGVmYXVsdHMkZiA9IHRoaXMucXVlcnlEZWZhdWx0cy5maW5kKGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4gcGFydGlhbE1hdGNoS2V5KHF1ZXJ5S2V5LCB4LnF1ZXJ5S2V5KTtcbiAgICB9KSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJHF1ZXJ5RGVmYXVsdHMkZi5kZWZhdWx0T3B0aW9ucyA6IHVuZGVmaW5lZDtcbiAgfTtcblxuICBfcHJvdG8uc2V0TXV0YXRpb25EZWZhdWx0cyA9IGZ1bmN0aW9uIHNldE11dGF0aW9uRGVmYXVsdHMobXV0YXRpb25LZXksIG9wdGlvbnMpIHtcbiAgICB2YXIgcmVzdWx0ID0gdGhpcy5tdXRhdGlvbkRlZmF1bHRzLmZpbmQoZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiBoYXNoUXVlcnlLZXkobXV0YXRpb25LZXkpID09PSBoYXNoUXVlcnlLZXkoeC5tdXRhdGlvbktleSk7XG4gICAgfSk7XG5cbiAgICBpZiAocmVzdWx0KSB7XG4gICAgICByZXN1bHQuZGVmYXVsdE9wdGlvbnMgPSBvcHRpb25zO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm11dGF0aW9uRGVmYXVsdHMucHVzaCh7XG4gICAgICAgIG11dGF0aW9uS2V5OiBtdXRhdGlvbktleSxcbiAgICAgICAgZGVmYXVsdE9wdGlvbnM6IG9wdGlvbnNcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uZ2V0TXV0YXRpb25EZWZhdWx0cyA9IGZ1bmN0aW9uIGdldE11dGF0aW9uRGVmYXVsdHMobXV0YXRpb25LZXkpIHtcbiAgICB2YXIgX3RoaXMkbXV0YXRpb25EZWZhdWx0O1xuXG4gICAgcmV0dXJuIG11dGF0aW9uS2V5ID8gKF90aGlzJG11dGF0aW9uRGVmYXVsdCA9IHRoaXMubXV0YXRpb25EZWZhdWx0cy5maW5kKGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4gcGFydGlhbE1hdGNoS2V5KG11dGF0aW9uS2V5LCB4Lm11dGF0aW9uS2V5KTtcbiAgICB9KSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJG11dGF0aW9uRGVmYXVsdC5kZWZhdWx0T3B0aW9ucyA6IHVuZGVmaW5lZDtcbiAgfTtcblxuICBfcHJvdG8uZGVmYXVsdFF1ZXJ5T3B0aW9ucyA9IGZ1bmN0aW9uIGRlZmF1bHRRdWVyeU9wdGlvbnMob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLl9kZWZhdWx0ZWQpIHtcbiAgICAgIHJldHVybiBvcHRpb25zO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0ZWRPcHRpb25zID0gX2V4dGVuZHMoe30sIHRoaXMuZGVmYXVsdE9wdGlvbnMucXVlcmllcywgdGhpcy5nZXRRdWVyeURlZmF1bHRzKG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMucXVlcnlLZXkpLCBvcHRpb25zLCB7XG4gICAgICBfZGVmYXVsdGVkOiB0cnVlXG4gICAgfSk7XG5cbiAgICBpZiAoIWRlZmF1bHRlZE9wdGlvbnMucXVlcnlIYXNoICYmIGRlZmF1bHRlZE9wdGlvbnMucXVlcnlLZXkpIHtcbiAgICAgIGRlZmF1bHRlZE9wdGlvbnMucXVlcnlIYXNoID0gaGFzaFF1ZXJ5S2V5QnlPcHRpb25zKGRlZmF1bHRlZE9wdGlvbnMucXVlcnlLZXksIGRlZmF1bHRlZE9wdGlvbnMpO1xuICAgIH1cblxuICAgIHJldHVybiBkZWZhdWx0ZWRPcHRpb25zO1xuICB9O1xuXG4gIF9wcm90by5kZWZhdWx0UXVlcnlPYnNlcnZlck9wdGlvbnMgPSBmdW5jdGlvbiBkZWZhdWx0UXVlcnlPYnNlcnZlck9wdGlvbnMob3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLmRlZmF1bHRRdWVyeU9wdGlvbnMob3B0aW9ucyk7XG4gIH07XG5cbiAgX3Byb3RvLmRlZmF1bHRNdXRhdGlvbk9wdGlvbnMgPSBmdW5jdGlvbiBkZWZhdWx0TXV0YXRpb25PcHRpb25zKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5fZGVmYXVsdGVkKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9XG5cbiAgICByZXR1cm4gX2V4dGVuZHMoe30sIHRoaXMuZGVmYXVsdE9wdGlvbnMubXV0YXRpb25zLCB0aGlzLmdldE11dGF0aW9uRGVmYXVsdHMob3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5tdXRhdGlvbktleSksIG9wdGlvbnMsIHtcbiAgICAgIF9kZWZhdWx0ZWQ6IHRydWVcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uY2xlYXIgPSBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICB0aGlzLnF1ZXJ5Q2FjaGUuY2xlYXIoKTtcbiAgICB0aGlzLm11dGF0aW9uQ2FjaGUuY2xlYXIoKTtcbiAgfTtcblxuICByZXR1cm4gUXVlcnlDbGllbnQ7XG59KCk7IiwgImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9pbmhlcml0c0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlXCI7XG5pbXBvcnQgeyBpc1NlcnZlciwgaXNWYWxpZFRpbWVvdXQsIG5vb3AsIHJlcGxhY2VFcXVhbERlZXAsIHNoYWxsb3dFcXVhbE9iamVjdHMsIHRpbWVVbnRpbFN0YWxlIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBub3RpZnlNYW5hZ2VyIH0gZnJvbSAnLi9ub3RpZnlNYW5hZ2VyJztcbmltcG9ydCB7IGZvY3VzTWFuYWdlciB9IGZyb20gJy4vZm9jdXNNYW5hZ2VyJztcbmltcG9ydCB7IFN1YnNjcmliYWJsZSB9IGZyb20gJy4vc3Vic2NyaWJhYmxlJztcbmltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IGlzQ2FuY2VsbGVkRXJyb3IgfSBmcm9tICcuL3JldHJ5ZXInO1xuZXhwb3J0IHZhciBRdWVyeU9ic2VydmVyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfU3Vic2NyaWJhYmxlKSB7XG4gIF9pbmhlcml0c0xvb3NlKFF1ZXJ5T2JzZXJ2ZXIsIF9TdWJzY3JpYmFibGUpO1xuXG4gIGZ1bmN0aW9uIFF1ZXJ5T2JzZXJ2ZXIoY2xpZW50LCBvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX3RoaXMgPSBfU3Vic2NyaWJhYmxlLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICBfdGhpcy5jbGllbnQgPSBjbGllbnQ7XG4gICAgX3RoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgX3RoaXMudHJhY2tlZFByb3BzID0gW107XG4gICAgX3RoaXMuc2VsZWN0RXJyb3IgPSBudWxsO1xuXG4gICAgX3RoaXMuYmluZE1ldGhvZHMoKTtcblxuICAgIF90aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gUXVlcnlPYnNlcnZlci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmJpbmRNZXRob2RzID0gZnVuY3Rpb24gYmluZE1ldGhvZHMoKSB7XG4gICAgdGhpcy5yZW1vdmUgPSB0aGlzLnJlbW92ZS5iaW5kKHRoaXMpO1xuICAgIHRoaXMucmVmZXRjaCA9IHRoaXMucmVmZXRjaC5iaW5kKHRoaXMpO1xuICB9O1xuXG4gIF9wcm90by5vblN1YnNjcmliZSA9IGZ1bmN0aW9uIG9uU3Vic2NyaWJlKCkge1xuICAgIGlmICh0aGlzLmxpc3RlbmVycy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHRoaXMuY3VycmVudFF1ZXJ5LmFkZE9ic2VydmVyKHRoaXMpO1xuXG4gICAgICBpZiAoc2hvdWxkRmV0Y2hPbk1vdW50KHRoaXMuY3VycmVudFF1ZXJ5LCB0aGlzLm9wdGlvbnMpKSB7XG4gICAgICAgIHRoaXMuZXhlY3V0ZUZldGNoKCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMudXBkYXRlVGltZXJzKCk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5vblVuc3Vic2NyaWJlID0gZnVuY3Rpb24gb25VbnN1YnNjcmliZSgpIHtcbiAgICBpZiAoIXRoaXMubGlzdGVuZXJzLmxlbmd0aCkge1xuICAgICAgdGhpcy5kZXN0cm95KCk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5zaG91bGRGZXRjaE9uUmVjb25uZWN0ID0gZnVuY3Rpb24gc2hvdWxkRmV0Y2hPblJlY29ubmVjdCgpIHtcbiAgICByZXR1cm4gc2hvdWxkRmV0Y2hPbih0aGlzLmN1cnJlbnRRdWVyeSwgdGhpcy5vcHRpb25zLCB0aGlzLm9wdGlvbnMucmVmZXRjaE9uUmVjb25uZWN0KTtcbiAgfTtcblxuICBfcHJvdG8uc2hvdWxkRmV0Y2hPbldpbmRvd0ZvY3VzID0gZnVuY3Rpb24gc2hvdWxkRmV0Y2hPbldpbmRvd0ZvY3VzKCkge1xuICAgIHJldHVybiBzaG91bGRGZXRjaE9uKHRoaXMuY3VycmVudFF1ZXJ5LCB0aGlzLm9wdGlvbnMsIHRoaXMub3B0aW9ucy5yZWZldGNoT25XaW5kb3dGb2N1cyk7XG4gIH07XG5cbiAgX3Byb3RvLmRlc3Ryb3kgPSBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgIHRoaXMubGlzdGVuZXJzID0gW107XG4gICAgdGhpcy5jbGVhclRpbWVycygpO1xuICAgIHRoaXMuY3VycmVudFF1ZXJ5LnJlbW92ZU9ic2VydmVyKHRoaXMpO1xuICB9O1xuXG4gIF9wcm90by5zZXRPcHRpb25zID0gZnVuY3Rpb24gc2V0T3B0aW9ucyhvcHRpb25zLCBub3RpZnlPcHRpb25zKSB7XG4gICAgdmFyIHByZXZPcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgIHZhciBwcmV2UXVlcnkgPSB0aGlzLmN1cnJlbnRRdWVyeTtcbiAgICB0aGlzLm9wdGlvbnMgPSB0aGlzLmNsaWVudC5kZWZhdWx0UXVlcnlPYnNlcnZlck9wdGlvbnMob3B0aW9ucyk7XG5cbiAgICBpZiAodHlwZW9mIHRoaXMub3B0aW9ucy5lbmFibGVkICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgdGhpcy5vcHRpb25zLmVuYWJsZWQgIT09ICdib29sZWFuJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBlbmFibGVkIHRvIGJlIGEgYm9vbGVhbicpO1xuICAgIH0gLy8gS2VlcCBwcmV2aW91cyBxdWVyeSBrZXkgaWYgdGhlIHVzZXIgZG9lcyBub3Qgc3VwcGx5IG9uZVxuXG5cbiAgICBpZiAoIXRoaXMub3B0aW9ucy5xdWVyeUtleSkge1xuICAgICAgdGhpcy5vcHRpb25zLnF1ZXJ5S2V5ID0gcHJldk9wdGlvbnMucXVlcnlLZXk7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVRdWVyeSgpO1xuICAgIHZhciBtb3VudGVkID0gdGhpcy5oYXNMaXN0ZW5lcnMoKTsgLy8gRmV0Y2ggaWYgdGhlcmUgYXJlIHN1YnNjcmliZXJzXG5cbiAgICBpZiAobW91bnRlZCAmJiBzaG91bGRGZXRjaE9wdGlvbmFsbHkodGhpcy5jdXJyZW50UXVlcnksIHByZXZRdWVyeSwgdGhpcy5vcHRpb25zLCBwcmV2T3B0aW9ucykpIHtcbiAgICAgIHRoaXMuZXhlY3V0ZUZldGNoKCk7XG4gICAgfSAvLyBVcGRhdGUgcmVzdWx0XG5cblxuICAgIHRoaXMudXBkYXRlUmVzdWx0KG5vdGlmeU9wdGlvbnMpOyAvLyBVcGRhdGUgc3RhbGUgaW50ZXJ2YWwgaWYgbmVlZGVkXG5cbiAgICBpZiAobW91bnRlZCAmJiAodGhpcy5jdXJyZW50UXVlcnkgIT09IHByZXZRdWVyeSB8fCB0aGlzLm9wdGlvbnMuZW5hYmxlZCAhPT0gcHJldk9wdGlvbnMuZW5hYmxlZCB8fCB0aGlzLm9wdGlvbnMuc3RhbGVUaW1lICE9PSBwcmV2T3B0aW9ucy5zdGFsZVRpbWUpKSB7XG4gICAgICB0aGlzLnVwZGF0ZVN0YWxlVGltZW91dCgpO1xuICAgIH1cblxuICAgIHZhciBuZXh0UmVmZXRjaEludGVydmFsID0gdGhpcy5jb21wdXRlUmVmZXRjaEludGVydmFsKCk7IC8vIFVwZGF0ZSByZWZldGNoIGludGVydmFsIGlmIG5lZWRlZFxuXG4gICAgaWYgKG1vdW50ZWQgJiYgKHRoaXMuY3VycmVudFF1ZXJ5ICE9PSBwcmV2UXVlcnkgfHwgdGhpcy5vcHRpb25zLmVuYWJsZWQgIT09IHByZXZPcHRpb25zLmVuYWJsZWQgfHwgbmV4dFJlZmV0Y2hJbnRlcnZhbCAhPT0gdGhpcy5jdXJyZW50UmVmZXRjaEludGVydmFsKSkge1xuICAgICAgdGhpcy51cGRhdGVSZWZldGNoSW50ZXJ2YWwobmV4dFJlZmV0Y2hJbnRlcnZhbCk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5nZXRPcHRpbWlzdGljUmVzdWx0ID0gZnVuY3Rpb24gZ2V0T3B0aW1pc3RpY1Jlc3VsdChvcHRpb25zKSB7XG4gICAgdmFyIGRlZmF1bHRlZE9wdGlvbnMgPSB0aGlzLmNsaWVudC5kZWZhdWx0UXVlcnlPYnNlcnZlck9wdGlvbnMob3B0aW9ucyk7XG4gICAgdmFyIHF1ZXJ5ID0gdGhpcy5jbGllbnQuZ2V0UXVlcnlDYWNoZSgpLmJ1aWxkKHRoaXMuY2xpZW50LCBkZWZhdWx0ZWRPcHRpb25zKTtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVSZXN1bHQocXVlcnksIGRlZmF1bHRlZE9wdGlvbnMpO1xuICB9O1xuXG4gIF9wcm90by5nZXRDdXJyZW50UmVzdWx0ID0gZnVuY3Rpb24gZ2V0Q3VycmVudFJlc3VsdCgpIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50UmVzdWx0O1xuICB9O1xuXG4gIF9wcm90by50cmFja1Jlc3VsdCA9IGZ1bmN0aW9uIHRyYWNrUmVzdWx0KHJlc3VsdCwgZGVmYXVsdGVkT3B0aW9ucykge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgdmFyIHRyYWNrZWRSZXN1bHQgPSB7fTtcblxuICAgIHZhciB0cmFja1Byb3AgPSBmdW5jdGlvbiB0cmFja1Byb3Aoa2V5KSB7XG4gICAgICBpZiAoIV90aGlzMi50cmFja2VkUHJvcHMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICBfdGhpczIudHJhY2tlZFByb3BzLnB1c2goa2V5KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgT2JqZWN0LmtleXMocmVzdWx0KS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0cmFja2VkUmVzdWx0LCBrZXksIHtcbiAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgdHJhY2tQcm9wKGtleSk7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdFtrZXldO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGlmIChkZWZhdWx0ZWRPcHRpb25zLnVzZUVycm9yQm91bmRhcnkgfHwgZGVmYXVsdGVkT3B0aW9ucy5zdXNwZW5zZSkge1xuICAgICAgdHJhY2tQcm9wKCdlcnJvcicpO1xuICAgIH1cblxuICAgIHJldHVybiB0cmFja2VkUmVzdWx0O1xuICB9O1xuXG4gIF9wcm90by5nZXROZXh0UmVzdWx0ID0gZnVuY3Rpb24gZ2V0TmV4dFJlc3VsdChvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIHVuc3Vic2NyaWJlID0gX3RoaXMzLnN1YnNjcmliZShmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgIGlmICghcmVzdWx0LmlzRmV0Y2hpbmcpIHtcbiAgICAgICAgICB1bnN1YnNjcmliZSgpO1xuXG4gICAgICAgICAgaWYgKHJlc3VsdC5pc0Vycm9yICYmIChvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLnRocm93T25FcnJvcikpIHtcbiAgICAgICAgICAgIHJlamVjdChyZXN1bHQuZXJyb3IpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0Q3VycmVudFF1ZXJ5ID0gZnVuY3Rpb24gZ2V0Q3VycmVudFF1ZXJ5KCkge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRRdWVyeTtcbiAgfTtcblxuICBfcHJvdG8ucmVtb3ZlID0gZnVuY3Rpb24gcmVtb3ZlKCkge1xuICAgIHRoaXMuY2xpZW50LmdldFF1ZXJ5Q2FjaGUoKS5yZW1vdmUodGhpcy5jdXJyZW50UXVlcnkpO1xuICB9O1xuXG4gIF9wcm90by5yZWZldGNoID0gZnVuY3Rpb24gcmVmZXRjaChvcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMuZmV0Y2goX2V4dGVuZHMoe30sIG9wdGlvbnMsIHtcbiAgICAgIG1ldGE6IHtcbiAgICAgICAgcmVmZXRjaFBhZ2U6IG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMucmVmZXRjaFBhZ2VcbiAgICAgIH1cbiAgICB9KSk7XG4gIH07XG5cbiAgX3Byb3RvLmZldGNoT3B0aW1pc3RpYyA9IGZ1bmN0aW9uIGZldGNoT3B0aW1pc3RpYyhvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICB2YXIgZGVmYXVsdGVkT3B0aW9ucyA9IHRoaXMuY2xpZW50LmRlZmF1bHRRdWVyeU9ic2VydmVyT3B0aW9ucyhvcHRpb25zKTtcbiAgICB2YXIgcXVlcnkgPSB0aGlzLmNsaWVudC5nZXRRdWVyeUNhY2hlKCkuYnVpbGQodGhpcy5jbGllbnQsIGRlZmF1bHRlZE9wdGlvbnMpO1xuICAgIHJldHVybiBxdWVyeS5mZXRjaCgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzNC5jcmVhdGVSZXN1bHQocXVlcnksIGRlZmF1bHRlZE9wdGlvbnMpO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5mZXRjaCA9IGZ1bmN0aW9uIGZldGNoKGZldGNoT3B0aW9ucykge1xuICAgIHZhciBfdGhpczUgPSB0aGlzO1xuXG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZUZldGNoKGZldGNoT3B0aW9ucykudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczUudXBkYXRlUmVzdWx0KCk7XG5cbiAgICAgIHJldHVybiBfdGhpczUuY3VycmVudFJlc3VsdDtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uZXhlY3V0ZUZldGNoID0gZnVuY3Rpb24gZXhlY3V0ZUZldGNoKGZldGNoT3B0aW9ucykge1xuICAgIC8vIE1ha2Ugc3VyZSB3ZSByZWZlcmVuY2UgdGhlIGxhdGVzdCBxdWVyeSBhcyB0aGUgY3VycmVudCBvbmUgbWlnaHQgaGF2ZSBiZWVuIHJlbW92ZWRcbiAgICB0aGlzLnVwZGF0ZVF1ZXJ5KCk7IC8vIEZldGNoXG5cbiAgICB2YXIgcHJvbWlzZSA9IHRoaXMuY3VycmVudFF1ZXJ5LmZldGNoKHRoaXMub3B0aW9ucywgZmV0Y2hPcHRpb25zKTtcblxuICAgIGlmICghKGZldGNoT3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogZmV0Y2hPcHRpb25zLnRocm93T25FcnJvcikpIHtcbiAgICAgIHByb21pc2UgPSBwcm9taXNlLmNhdGNoKG5vb3ApO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9taXNlO1xuICB9O1xuXG4gIF9wcm90by51cGRhdGVTdGFsZVRpbWVvdXQgPSBmdW5jdGlvbiB1cGRhdGVTdGFsZVRpbWVvdXQoKSB7XG4gICAgdmFyIF90aGlzNiA9IHRoaXM7XG5cbiAgICB0aGlzLmNsZWFyU3RhbGVUaW1lb3V0KCk7XG5cbiAgICBpZiAoaXNTZXJ2ZXIgfHwgdGhpcy5jdXJyZW50UmVzdWx0LmlzU3RhbGUgfHwgIWlzVmFsaWRUaW1lb3V0KHRoaXMub3B0aW9ucy5zdGFsZVRpbWUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHRpbWUgPSB0aW1lVW50aWxTdGFsZSh0aGlzLmN1cnJlbnRSZXN1bHQuZGF0YVVwZGF0ZWRBdCwgdGhpcy5vcHRpb25zLnN0YWxlVGltZSk7IC8vIFRoZSB0aW1lb3V0IGlzIHNvbWV0aW1lcyB0cmlnZ2VyZWQgMSBtcyBiZWZvcmUgdGhlIHN0YWxlIHRpbWUgZXhwaXJhdGlvbi5cbiAgICAvLyBUbyBtaXRpZ2F0ZSB0aGlzIGlzc3VlIHdlIGFsd2F5cyBhZGQgMSBtcyB0byB0aGUgdGltZW91dC5cblxuICAgIHZhciB0aW1lb3V0ID0gdGltZSArIDE7XG4gICAgdGhpcy5zdGFsZVRpbWVvdXRJZCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKCFfdGhpczYuY3VycmVudFJlc3VsdC5pc1N0YWxlKSB7XG4gICAgICAgIF90aGlzNi51cGRhdGVSZXN1bHQoKTtcbiAgICAgIH1cbiAgICB9LCB0aW1lb3V0KTtcbiAgfTtcblxuICBfcHJvdG8uY29tcHV0ZVJlZmV0Y2hJbnRlcnZhbCA9IGZ1bmN0aW9uIGNvbXB1dGVSZWZldGNoSW50ZXJ2YWwoKSB7XG4gICAgdmFyIF90aGlzJG9wdGlvbnMkcmVmZXRjaDtcblxuICAgIHJldHVybiB0eXBlb2YgdGhpcy5vcHRpb25zLnJlZmV0Y2hJbnRlcnZhbCA9PT0gJ2Z1bmN0aW9uJyA/IHRoaXMub3B0aW9ucy5yZWZldGNoSW50ZXJ2YWwodGhpcy5jdXJyZW50UmVzdWx0LmRhdGEsIHRoaXMuY3VycmVudFF1ZXJ5KSA6IChfdGhpcyRvcHRpb25zJHJlZmV0Y2ggPSB0aGlzLm9wdGlvbnMucmVmZXRjaEludGVydmFsKSAhPSBudWxsID8gX3RoaXMkb3B0aW9ucyRyZWZldGNoIDogZmFsc2U7XG4gIH07XG5cbiAgX3Byb3RvLnVwZGF0ZVJlZmV0Y2hJbnRlcnZhbCA9IGZ1bmN0aW9uIHVwZGF0ZVJlZmV0Y2hJbnRlcnZhbChuZXh0SW50ZXJ2YWwpIHtcbiAgICB2YXIgX3RoaXM3ID0gdGhpcztcblxuICAgIHRoaXMuY2xlYXJSZWZldGNoSW50ZXJ2YWwoKTtcbiAgICB0aGlzLmN1cnJlbnRSZWZldGNoSW50ZXJ2YWwgPSBuZXh0SW50ZXJ2YWw7XG5cbiAgICBpZiAoaXNTZXJ2ZXIgfHwgdGhpcy5vcHRpb25zLmVuYWJsZWQgPT09IGZhbHNlIHx8ICFpc1ZhbGlkVGltZW91dCh0aGlzLmN1cnJlbnRSZWZldGNoSW50ZXJ2YWwpIHx8IHRoaXMuY3VycmVudFJlZmV0Y2hJbnRlcnZhbCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucmVmZXRjaEludGVydmFsSWQgPSBzZXRJbnRlcnZhbChmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoX3RoaXM3Lm9wdGlvbnMucmVmZXRjaEludGVydmFsSW5CYWNrZ3JvdW5kIHx8IGZvY3VzTWFuYWdlci5pc0ZvY3VzZWQoKSkge1xuICAgICAgICBfdGhpczcuZXhlY3V0ZUZldGNoKCk7XG4gICAgICB9XG4gICAgfSwgdGhpcy5jdXJyZW50UmVmZXRjaEludGVydmFsKTtcbiAgfTtcblxuICBfcHJvdG8udXBkYXRlVGltZXJzID0gZnVuY3Rpb24gdXBkYXRlVGltZXJzKCkge1xuICAgIHRoaXMudXBkYXRlU3RhbGVUaW1lb3V0KCk7XG4gICAgdGhpcy51cGRhdGVSZWZldGNoSW50ZXJ2YWwodGhpcy5jb21wdXRlUmVmZXRjaEludGVydmFsKCkpO1xuICB9O1xuXG4gIF9wcm90by5jbGVhclRpbWVycyA9IGZ1bmN0aW9uIGNsZWFyVGltZXJzKCkge1xuICAgIHRoaXMuY2xlYXJTdGFsZVRpbWVvdXQoKTtcbiAgICB0aGlzLmNsZWFyUmVmZXRjaEludGVydmFsKCk7XG4gIH07XG5cbiAgX3Byb3RvLmNsZWFyU3RhbGVUaW1lb3V0ID0gZnVuY3Rpb24gY2xlYXJTdGFsZVRpbWVvdXQoKSB7XG4gICAgaWYgKHRoaXMuc3RhbGVUaW1lb3V0SWQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnN0YWxlVGltZW91dElkKTtcbiAgICAgIHRoaXMuc3RhbGVUaW1lb3V0SWQgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5jbGVhclJlZmV0Y2hJbnRlcnZhbCA9IGZ1bmN0aW9uIGNsZWFyUmVmZXRjaEludGVydmFsKCkge1xuICAgIGlmICh0aGlzLnJlZmV0Y2hJbnRlcnZhbElkKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMucmVmZXRjaEludGVydmFsSWQpO1xuICAgICAgdGhpcy5yZWZldGNoSW50ZXJ2YWxJZCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLmNyZWF0ZVJlc3VsdCA9IGZ1bmN0aW9uIGNyZWF0ZVJlc3VsdChxdWVyeSwgb3B0aW9ucykge1xuICAgIHZhciBwcmV2UXVlcnkgPSB0aGlzLmN1cnJlbnRRdWVyeTtcbiAgICB2YXIgcHJldk9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgdmFyIHByZXZSZXN1bHQgPSB0aGlzLmN1cnJlbnRSZXN1bHQ7XG4gICAgdmFyIHByZXZSZXN1bHRTdGF0ZSA9IHRoaXMuY3VycmVudFJlc3VsdFN0YXRlO1xuICAgIHZhciBwcmV2UmVzdWx0T3B0aW9ucyA9IHRoaXMuY3VycmVudFJlc3VsdE9wdGlvbnM7XG4gICAgdmFyIHF1ZXJ5Q2hhbmdlID0gcXVlcnkgIT09IHByZXZRdWVyeTtcbiAgICB2YXIgcXVlcnlJbml0aWFsU3RhdGUgPSBxdWVyeUNoYW5nZSA/IHF1ZXJ5LnN0YXRlIDogdGhpcy5jdXJyZW50UXVlcnlJbml0aWFsU3RhdGU7XG4gICAgdmFyIHByZXZRdWVyeVJlc3VsdCA9IHF1ZXJ5Q2hhbmdlID8gdGhpcy5jdXJyZW50UmVzdWx0IDogdGhpcy5wcmV2aW91c1F1ZXJ5UmVzdWx0O1xuICAgIHZhciBzdGF0ZSA9IHF1ZXJ5LnN0YXRlO1xuICAgIHZhciBkYXRhVXBkYXRlZEF0ID0gc3RhdGUuZGF0YVVwZGF0ZWRBdCxcbiAgICAgICAgZXJyb3IgPSBzdGF0ZS5lcnJvcixcbiAgICAgICAgZXJyb3JVcGRhdGVkQXQgPSBzdGF0ZS5lcnJvclVwZGF0ZWRBdCxcbiAgICAgICAgaXNGZXRjaGluZyA9IHN0YXRlLmlzRmV0Y2hpbmcsXG4gICAgICAgIHN0YXR1cyA9IHN0YXRlLnN0YXR1cztcbiAgICB2YXIgaXNQcmV2aW91c0RhdGEgPSBmYWxzZTtcbiAgICB2YXIgaXNQbGFjZWhvbGRlckRhdGEgPSBmYWxzZTtcbiAgICB2YXIgZGF0YTsgLy8gT3B0aW1pc3RpY2FsbHkgc2V0IHJlc3VsdCBpbiBmZXRjaGluZyBzdGF0ZSBpZiBuZWVkZWRcblxuICAgIGlmIChvcHRpb25zLm9wdGltaXN0aWNSZXN1bHRzKSB7XG4gICAgICB2YXIgbW91bnRlZCA9IHRoaXMuaGFzTGlzdGVuZXJzKCk7XG4gICAgICB2YXIgZmV0Y2hPbk1vdW50ID0gIW1vdW50ZWQgJiYgc2hvdWxkRmV0Y2hPbk1vdW50KHF1ZXJ5LCBvcHRpb25zKTtcbiAgICAgIHZhciBmZXRjaE9wdGlvbmFsbHkgPSBtb3VudGVkICYmIHNob3VsZEZldGNoT3B0aW9uYWxseShxdWVyeSwgcHJldlF1ZXJ5LCBvcHRpb25zLCBwcmV2T3B0aW9ucyk7XG5cbiAgICAgIGlmIChmZXRjaE9uTW91bnQgfHwgZmV0Y2hPcHRpb25hbGx5KSB7XG4gICAgICAgIGlzRmV0Y2hpbmcgPSB0cnVlO1xuXG4gICAgICAgIGlmICghZGF0YVVwZGF0ZWRBdCkge1xuICAgICAgICAgIHN0YXR1cyA9ICdsb2FkaW5nJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gS2VlcCBwcmV2aW91cyBkYXRhIGlmIG5lZWRlZFxuXG5cbiAgICBpZiAob3B0aW9ucy5rZWVwUHJldmlvdXNEYXRhICYmICFzdGF0ZS5kYXRhVXBkYXRlQ291bnQgJiYgKHByZXZRdWVyeVJlc3VsdCA9PSBudWxsID8gdm9pZCAwIDogcHJldlF1ZXJ5UmVzdWx0LmlzU3VjY2VzcykgJiYgc3RhdHVzICE9PSAnZXJyb3InKSB7XG4gICAgICBkYXRhID0gcHJldlF1ZXJ5UmVzdWx0LmRhdGE7XG4gICAgICBkYXRhVXBkYXRlZEF0ID0gcHJldlF1ZXJ5UmVzdWx0LmRhdGFVcGRhdGVkQXQ7XG4gICAgICBzdGF0dXMgPSBwcmV2UXVlcnlSZXN1bHQuc3RhdHVzO1xuICAgICAgaXNQcmV2aW91c0RhdGEgPSB0cnVlO1xuICAgIH0gLy8gU2VsZWN0IGRhdGEgaWYgbmVlZGVkXG4gICAgZWxzZSBpZiAob3B0aW9ucy5zZWxlY3QgJiYgdHlwZW9mIHN0YXRlLmRhdGEgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIC8vIE1lbW9pemUgc2VsZWN0IHJlc3VsdFxuICAgICAgICBpZiAocHJldlJlc3VsdCAmJiBzdGF0ZS5kYXRhID09PSAocHJldlJlc3VsdFN0YXRlID09IG51bGwgPyB2b2lkIDAgOiBwcmV2UmVzdWx0U3RhdGUuZGF0YSkgJiYgb3B0aW9ucy5zZWxlY3QgPT09IHRoaXMuc2VsZWN0Rm4pIHtcbiAgICAgICAgICBkYXRhID0gdGhpcy5zZWxlY3RSZXN1bHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0Rm4gPSBvcHRpb25zLnNlbGVjdDtcbiAgICAgICAgICAgIGRhdGEgPSBvcHRpb25zLnNlbGVjdChzdGF0ZS5kYXRhKTtcblxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuc3RydWN0dXJhbFNoYXJpbmcgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIGRhdGEgPSByZXBsYWNlRXF1YWxEZWVwKHByZXZSZXN1bHQgPT0gbnVsbCA/IHZvaWQgMCA6IHByZXZSZXN1bHQuZGF0YSwgZGF0YSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0UmVzdWx0ID0gZGF0YTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0RXJyb3IgPSBudWxsO1xuICAgICAgICAgIH0gY2F0Y2ggKHNlbGVjdEVycm9yKSB7XG4gICAgICAgICAgICBnZXRMb2dnZXIoKS5lcnJvcihzZWxlY3RFcnJvcik7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdEVycm9yID0gc2VsZWN0RXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IC8vIFVzZSBxdWVyeSBkYXRhXG4gICAgICBlbHNlIHtcbiAgICAgICAgICBkYXRhID0gc3RhdGUuZGF0YTtcbiAgICAgICAgfSAvLyBTaG93IHBsYWNlaG9sZGVyIGRhdGEgaWYgbmVlZGVkXG5cblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5wbGFjZWhvbGRlckRhdGEgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkYXRhID09PSAndW5kZWZpbmVkJyAmJiAoc3RhdHVzID09PSAnbG9hZGluZycgfHwgc3RhdHVzID09PSAnaWRsZScpKSB7XG4gICAgICB2YXIgcGxhY2Vob2xkZXJEYXRhOyAvLyBNZW1vaXplIHBsYWNlaG9sZGVyIGRhdGFcblxuICAgICAgaWYgKChwcmV2UmVzdWx0ID09IG51bGwgPyB2b2lkIDAgOiBwcmV2UmVzdWx0LmlzUGxhY2Vob2xkZXJEYXRhKSAmJiBvcHRpb25zLnBsYWNlaG9sZGVyRGF0YSA9PT0gKHByZXZSZXN1bHRPcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBwcmV2UmVzdWx0T3B0aW9ucy5wbGFjZWhvbGRlckRhdGEpKSB7XG4gICAgICAgIHBsYWNlaG9sZGVyRGF0YSA9IHByZXZSZXN1bHQuZGF0YTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBsYWNlaG9sZGVyRGF0YSA9IHR5cGVvZiBvcHRpb25zLnBsYWNlaG9sZGVyRGF0YSA9PT0gJ2Z1bmN0aW9uJyA/IG9wdGlvbnMucGxhY2Vob2xkZXJEYXRhKCkgOiBvcHRpb25zLnBsYWNlaG9sZGVyRGF0YTtcblxuICAgICAgICBpZiAob3B0aW9ucy5zZWxlY3QgJiYgdHlwZW9mIHBsYWNlaG9sZGVyRGF0YSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcGxhY2Vob2xkZXJEYXRhID0gb3B0aW9ucy5zZWxlY3QocGxhY2Vob2xkZXJEYXRhKTtcblxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuc3RydWN0dXJhbFNoYXJpbmcgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyRGF0YSA9IHJlcGxhY2VFcXVhbERlZXAocHJldlJlc3VsdCA9PSBudWxsID8gdm9pZCAwIDogcHJldlJlc3VsdC5kYXRhLCBwbGFjZWhvbGRlckRhdGEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnNlbGVjdEVycm9yID0gbnVsbDtcbiAgICAgICAgICB9IGNhdGNoIChzZWxlY3RFcnJvcikge1xuICAgICAgICAgICAgZ2V0TG9nZ2VyKCkuZXJyb3Ioc2VsZWN0RXJyb3IpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RFcnJvciA9IHNlbGVjdEVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHBsYWNlaG9sZGVyRGF0YSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgc3RhdHVzID0gJ3N1Y2Nlc3MnO1xuICAgICAgICBkYXRhID0gcGxhY2Vob2xkZXJEYXRhO1xuICAgICAgICBpc1BsYWNlaG9sZGVyRGF0YSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2VsZWN0RXJyb3IpIHtcbiAgICAgIGVycm9yID0gdGhpcy5zZWxlY3RFcnJvcjtcbiAgICAgIGRhdGEgPSB0aGlzLnNlbGVjdFJlc3VsdDtcbiAgICAgIGVycm9yVXBkYXRlZEF0ID0gRGF0ZS5ub3coKTtcbiAgICAgIHN0YXR1cyA9ICdlcnJvcic7XG4gICAgfVxuXG4gICAgdmFyIHJlc3VsdCA9IHtcbiAgICAgIHN0YXR1czogc3RhdHVzLFxuICAgICAgaXNMb2FkaW5nOiBzdGF0dXMgPT09ICdsb2FkaW5nJyxcbiAgICAgIGlzU3VjY2Vzczogc3RhdHVzID09PSAnc3VjY2VzcycsXG4gICAgICBpc0Vycm9yOiBzdGF0dXMgPT09ICdlcnJvcicsXG4gICAgICBpc0lkbGU6IHN0YXR1cyA9PT0gJ2lkbGUnLFxuICAgICAgZGF0YTogZGF0YSxcbiAgICAgIGRhdGFVcGRhdGVkQXQ6IGRhdGFVcGRhdGVkQXQsXG4gICAgICBlcnJvcjogZXJyb3IsXG4gICAgICBlcnJvclVwZGF0ZWRBdDogZXJyb3JVcGRhdGVkQXQsXG4gICAgICBmYWlsdXJlQ291bnQ6IHN0YXRlLmZldGNoRmFpbHVyZUNvdW50LFxuICAgICAgZXJyb3JVcGRhdGVDb3VudDogc3RhdGUuZXJyb3JVcGRhdGVDb3VudCxcbiAgICAgIGlzRmV0Y2hlZDogc3RhdGUuZGF0YVVwZGF0ZUNvdW50ID4gMCB8fCBzdGF0ZS5lcnJvclVwZGF0ZUNvdW50ID4gMCxcbiAgICAgIGlzRmV0Y2hlZEFmdGVyTW91bnQ6IHN0YXRlLmRhdGFVcGRhdGVDb3VudCA+IHF1ZXJ5SW5pdGlhbFN0YXRlLmRhdGFVcGRhdGVDb3VudCB8fCBzdGF0ZS5lcnJvclVwZGF0ZUNvdW50ID4gcXVlcnlJbml0aWFsU3RhdGUuZXJyb3JVcGRhdGVDb3VudCxcbiAgICAgIGlzRmV0Y2hpbmc6IGlzRmV0Y2hpbmcsXG4gICAgICBpc1JlZmV0Y2hpbmc6IGlzRmV0Y2hpbmcgJiYgc3RhdHVzICE9PSAnbG9hZGluZycsXG4gICAgICBpc0xvYWRpbmdFcnJvcjogc3RhdHVzID09PSAnZXJyb3InICYmIHN0YXRlLmRhdGFVcGRhdGVkQXQgPT09IDAsXG4gICAgICBpc1BsYWNlaG9sZGVyRGF0YTogaXNQbGFjZWhvbGRlckRhdGEsXG4gICAgICBpc1ByZXZpb3VzRGF0YTogaXNQcmV2aW91c0RhdGEsXG4gICAgICBpc1JlZmV0Y2hFcnJvcjogc3RhdHVzID09PSAnZXJyb3InICYmIHN0YXRlLmRhdGFVcGRhdGVkQXQgIT09IDAsXG4gICAgICBpc1N0YWxlOiBpc1N0YWxlKHF1ZXJ5LCBvcHRpb25zKSxcbiAgICAgIHJlZmV0Y2g6IHRoaXMucmVmZXRjaCxcbiAgICAgIHJlbW92ZTogdGhpcy5yZW1vdmVcbiAgICB9O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgX3Byb3RvLnNob3VsZE5vdGlmeUxpc3RlbmVycyA9IGZ1bmN0aW9uIHNob3VsZE5vdGlmeUxpc3RlbmVycyhyZXN1bHQsIHByZXZSZXN1bHQpIHtcbiAgICBpZiAoIXByZXZSZXN1bHQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHZhciBfdGhpcyRvcHRpb25zID0gdGhpcy5vcHRpb25zLFxuICAgICAgICBub3RpZnlPbkNoYW5nZVByb3BzID0gX3RoaXMkb3B0aW9ucy5ub3RpZnlPbkNoYW5nZVByb3BzLFxuICAgICAgICBub3RpZnlPbkNoYW5nZVByb3BzRXhjbHVzaW9ucyA9IF90aGlzJG9wdGlvbnMubm90aWZ5T25DaGFuZ2VQcm9wc0V4Y2x1c2lvbnM7XG5cbiAgICBpZiAoIW5vdGlmeU9uQ2hhbmdlUHJvcHMgJiYgIW5vdGlmeU9uQ2hhbmdlUHJvcHNFeGNsdXNpb25zKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAobm90aWZ5T25DaGFuZ2VQcm9wcyA9PT0gJ3RyYWNrZWQnICYmICF0aGlzLnRyYWNrZWRQcm9wcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHZhciBpbmNsdWRlZFByb3BzID0gbm90aWZ5T25DaGFuZ2VQcm9wcyA9PT0gJ3RyYWNrZWQnID8gdGhpcy50cmFja2VkUHJvcHMgOiBub3RpZnlPbkNoYW5nZVByb3BzO1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhyZXN1bHQpLnNvbWUoZnVuY3Rpb24gKGtleSkge1xuICAgICAgdmFyIHR5cGVkS2V5ID0ga2V5O1xuICAgICAgdmFyIGNoYW5nZWQgPSByZXN1bHRbdHlwZWRLZXldICE9PSBwcmV2UmVzdWx0W3R5cGVkS2V5XTtcbiAgICAgIHZhciBpc0luY2x1ZGVkID0gaW5jbHVkZWRQcm9wcyA9PSBudWxsID8gdm9pZCAwIDogaW5jbHVkZWRQcm9wcy5zb21lKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHJldHVybiB4ID09PSBrZXk7XG4gICAgICB9KTtcbiAgICAgIHZhciBpc0V4Y2x1ZGVkID0gbm90aWZ5T25DaGFuZ2VQcm9wc0V4Y2x1c2lvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG5vdGlmeU9uQ2hhbmdlUHJvcHNFeGNsdXNpb25zLnNvbWUoZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgcmV0dXJuIHggPT09IGtleTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGNoYW5nZWQgJiYgIWlzRXhjbHVkZWQgJiYgKCFpbmNsdWRlZFByb3BzIHx8IGlzSW5jbHVkZWQpO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by51cGRhdGVSZXN1bHQgPSBmdW5jdGlvbiB1cGRhdGVSZXN1bHQobm90aWZ5T3B0aW9ucykge1xuICAgIHZhciBwcmV2UmVzdWx0ID0gdGhpcy5jdXJyZW50UmVzdWx0O1xuICAgIHRoaXMuY3VycmVudFJlc3VsdCA9IHRoaXMuY3JlYXRlUmVzdWx0KHRoaXMuY3VycmVudFF1ZXJ5LCB0aGlzLm9wdGlvbnMpO1xuICAgIHRoaXMuY3VycmVudFJlc3VsdFN0YXRlID0gdGhpcy5jdXJyZW50UXVlcnkuc3RhdGU7XG4gICAgdGhpcy5jdXJyZW50UmVzdWx0T3B0aW9ucyA9IHRoaXMub3B0aW9uczsgLy8gT25seSBub3RpZnkgaWYgc29tZXRoaW5nIGhhcyBjaGFuZ2VkXG5cbiAgICBpZiAoc2hhbGxvd0VxdWFsT2JqZWN0cyh0aGlzLmN1cnJlbnRSZXN1bHQsIHByZXZSZXN1bHQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBEZXRlcm1pbmUgd2hpY2ggY2FsbGJhY2tzIHRvIHRyaWdnZXJcblxuXG4gICAgdmFyIGRlZmF1bHROb3RpZnlPcHRpb25zID0ge1xuICAgICAgY2FjaGU6IHRydWVcbiAgICB9O1xuXG4gICAgaWYgKChub3RpZnlPcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBub3RpZnlPcHRpb25zLmxpc3RlbmVycykgIT09IGZhbHNlICYmIHRoaXMuc2hvdWxkTm90aWZ5TGlzdGVuZXJzKHRoaXMuY3VycmVudFJlc3VsdCwgcHJldlJlc3VsdCkpIHtcbiAgICAgIGRlZmF1bHROb3RpZnlPcHRpb25zLmxpc3RlbmVycyA9IHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy5ub3RpZnkoX2V4dGVuZHMoe30sIGRlZmF1bHROb3RpZnlPcHRpb25zLCBub3RpZnlPcHRpb25zKSk7XG4gIH07XG5cbiAgX3Byb3RvLnVwZGF0ZVF1ZXJ5ID0gZnVuY3Rpb24gdXBkYXRlUXVlcnkoKSB7XG4gICAgdmFyIHF1ZXJ5ID0gdGhpcy5jbGllbnQuZ2V0UXVlcnlDYWNoZSgpLmJ1aWxkKHRoaXMuY2xpZW50LCB0aGlzLm9wdGlvbnMpO1xuXG4gICAgaWYgKHF1ZXJ5ID09PSB0aGlzLmN1cnJlbnRRdWVyeSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBwcmV2UXVlcnkgPSB0aGlzLmN1cnJlbnRRdWVyeTtcbiAgICB0aGlzLmN1cnJlbnRRdWVyeSA9IHF1ZXJ5O1xuICAgIHRoaXMuY3VycmVudFF1ZXJ5SW5pdGlhbFN0YXRlID0gcXVlcnkuc3RhdGU7XG4gICAgdGhpcy5wcmV2aW91c1F1ZXJ5UmVzdWx0ID0gdGhpcy5jdXJyZW50UmVzdWx0O1xuXG4gICAgaWYgKHRoaXMuaGFzTGlzdGVuZXJzKCkpIHtcbiAgICAgIHByZXZRdWVyeSA9PSBudWxsID8gdm9pZCAwIDogcHJldlF1ZXJ5LnJlbW92ZU9ic2VydmVyKHRoaXMpO1xuICAgICAgcXVlcnkuYWRkT2JzZXJ2ZXIodGhpcyk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5vblF1ZXJ5VXBkYXRlID0gZnVuY3Rpb24gb25RdWVyeVVwZGF0ZShhY3Rpb24pIHtcbiAgICB2YXIgbm90aWZ5T3B0aW9ucyA9IHt9O1xuXG4gICAgaWYgKGFjdGlvbi50eXBlID09PSAnc3VjY2VzcycpIHtcbiAgICAgIG5vdGlmeU9wdGlvbnMub25TdWNjZXNzID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKGFjdGlvbi50eXBlID09PSAnZXJyb3InICYmICFpc0NhbmNlbGxlZEVycm9yKGFjdGlvbi5lcnJvcikpIHtcbiAgICAgIG5vdGlmeU9wdGlvbnMub25FcnJvciA9IHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVSZXN1bHQobm90aWZ5T3B0aW9ucyk7XG5cbiAgICBpZiAodGhpcy5oYXNMaXN0ZW5lcnMoKSkge1xuICAgICAgdGhpcy51cGRhdGVUaW1lcnMoKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLm5vdGlmeSA9IGZ1bmN0aW9uIG5vdGlmeShub3RpZnlPcHRpb25zKSB7XG4gICAgdmFyIF90aGlzOCA9IHRoaXM7XG5cbiAgICBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIEZpcnN0IHRyaWdnZXIgdGhlIGNvbmZpZ3VyYXRpb24gY2FsbGJhY2tzXG4gICAgICBpZiAobm90aWZ5T3B0aW9ucy5vblN1Y2Nlc3MpIHtcbiAgICAgICAgX3RoaXM4Lm9wdGlvbnMub25TdWNjZXNzID09IG51bGwgPyB2b2lkIDAgOiBfdGhpczgub3B0aW9ucy5vblN1Y2Nlc3MoX3RoaXM4LmN1cnJlbnRSZXN1bHQuZGF0YSk7XG4gICAgICAgIF90aGlzOC5vcHRpb25zLm9uU2V0dGxlZCA9PSBudWxsID8gdm9pZCAwIDogX3RoaXM4Lm9wdGlvbnMub25TZXR0bGVkKF90aGlzOC5jdXJyZW50UmVzdWx0LmRhdGEsIG51bGwpO1xuICAgICAgfSBlbHNlIGlmIChub3RpZnlPcHRpb25zLm9uRXJyb3IpIHtcbiAgICAgICAgX3RoaXM4Lm9wdGlvbnMub25FcnJvciA9PSBudWxsID8gdm9pZCAwIDogX3RoaXM4Lm9wdGlvbnMub25FcnJvcihfdGhpczguY3VycmVudFJlc3VsdC5lcnJvcik7XG4gICAgICAgIF90aGlzOC5vcHRpb25zLm9uU2V0dGxlZCA9PSBudWxsID8gdm9pZCAwIDogX3RoaXM4Lm9wdGlvbnMub25TZXR0bGVkKHVuZGVmaW5lZCwgX3RoaXM4LmN1cnJlbnRSZXN1bHQuZXJyb3IpO1xuICAgICAgfSAvLyBUaGVuIHRyaWdnZXIgdGhlIGxpc3RlbmVyc1xuXG5cbiAgICAgIGlmIChub3RpZnlPcHRpb25zLmxpc3RlbmVycykge1xuICAgICAgICBfdGhpczgubGlzdGVuZXJzLmZvckVhY2goZnVuY3Rpb24gKGxpc3RlbmVyKSB7XG4gICAgICAgICAgbGlzdGVuZXIoX3RoaXM4LmN1cnJlbnRSZXN1bHQpO1xuICAgICAgICB9KTtcbiAgICAgIH0gLy8gVGhlbiB0aGUgY2FjaGUgbGlzdGVuZXJzXG5cblxuICAgICAgaWYgKG5vdGlmeU9wdGlvbnMuY2FjaGUpIHtcbiAgICAgICAgX3RoaXM4LmNsaWVudC5nZXRRdWVyeUNhY2hlKCkubm90aWZ5KHtcbiAgICAgICAgICBxdWVyeTogX3RoaXM4LmN1cnJlbnRRdWVyeSxcbiAgICAgICAgICB0eXBlOiAnb2JzZXJ2ZXJSZXN1bHRzVXBkYXRlZCdcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIFF1ZXJ5T2JzZXJ2ZXI7XG59KFN1YnNjcmliYWJsZSk7XG5cbmZ1bmN0aW9uIHNob3VsZExvYWRPbk1vdW50KHF1ZXJ5LCBvcHRpb25zKSB7XG4gIHJldHVybiBvcHRpb25zLmVuYWJsZWQgIT09IGZhbHNlICYmICFxdWVyeS5zdGF0ZS5kYXRhVXBkYXRlZEF0ICYmICEocXVlcnkuc3RhdGUuc3RhdHVzID09PSAnZXJyb3InICYmIG9wdGlvbnMucmV0cnlPbk1vdW50ID09PSBmYWxzZSk7XG59XG5cbmZ1bmN0aW9uIHNob3VsZEZldGNoT25Nb3VudChxdWVyeSwgb3B0aW9ucykge1xuICByZXR1cm4gc2hvdWxkTG9hZE9uTW91bnQocXVlcnksIG9wdGlvbnMpIHx8IHF1ZXJ5LnN0YXRlLmRhdGFVcGRhdGVkQXQgPiAwICYmIHNob3VsZEZldGNoT24ocXVlcnksIG9wdGlvbnMsIG9wdGlvbnMucmVmZXRjaE9uTW91bnQpO1xufVxuXG5mdW5jdGlvbiBzaG91bGRGZXRjaE9uKHF1ZXJ5LCBvcHRpb25zLCBmaWVsZCkge1xuICBpZiAob3B0aW9ucy5lbmFibGVkICE9PSBmYWxzZSkge1xuICAgIHZhciB2YWx1ZSA9IHR5cGVvZiBmaWVsZCA9PT0gJ2Z1bmN0aW9uJyA/IGZpZWxkKHF1ZXJ5KSA6IGZpZWxkO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gJ2Fsd2F5cycgfHwgdmFsdWUgIT09IGZhbHNlICYmIGlzU3RhbGUocXVlcnksIG9wdGlvbnMpO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBzaG91bGRGZXRjaE9wdGlvbmFsbHkocXVlcnksIHByZXZRdWVyeSwgb3B0aW9ucywgcHJldk9wdGlvbnMpIHtcbiAgcmV0dXJuIG9wdGlvbnMuZW5hYmxlZCAhPT0gZmFsc2UgJiYgKHF1ZXJ5ICE9PSBwcmV2UXVlcnkgfHwgcHJldk9wdGlvbnMuZW5hYmxlZCA9PT0gZmFsc2UpICYmICghb3B0aW9ucy5zdXNwZW5zZSB8fCBxdWVyeS5zdGF0ZS5zdGF0dXMgIT09ICdlcnJvcicpICYmIGlzU3RhbGUocXVlcnksIG9wdGlvbnMpO1xufVxuXG5mdW5jdGlvbiBpc1N0YWxlKHF1ZXJ5LCBvcHRpb25zKSB7XG4gIHJldHVybiBxdWVyeS5pc1N0YWxlQnlUaW1lKG9wdGlvbnMuc3RhbGVUaW1lKTtcbn0iLCAiaW1wb3J0IFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSc7XG5leHBvcnQgdmFyIHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzID0gUmVhY3RET00udW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXM7IiwgImltcG9ydCB7IG5vdGlmeU1hbmFnZXIgfSBmcm9tICcuLi9jb3JlJztcbmltcG9ydCB7IHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzIH0gZnJvbSAnLi9yZWFjdEJhdGNoZWRVcGRhdGVzJztcbm5vdGlmeU1hbmFnZXIuc2V0QmF0Y2hOb3RpZnlGdW5jdGlvbih1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyk7IiwgImV4cG9ydCB2YXIgbG9nZ2VyID0gY29uc29sZTsiLCAiaW1wb3J0IHsgc2V0TG9nZ2VyIH0gZnJvbSAnLi4vY29yZSc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuL2xvZ2dlcic7XG5zZXRMb2dnZXIobG9nZ2VyKTsiLCAiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbnZhciBkZWZhdWx0Q29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KHVuZGVmaW5lZCk7XG52YXIgUXVlcnlDbGllbnRTaGFyaW5nQ29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KGZhbHNlKTsgLy8gaWYgY29udGV4dFNoYXJpbmcgaXMgb24sIHdlIHNoYXJlIHRoZSBmaXJzdCBhbmQgYXQgbGVhc3Qgb25lXG4vLyBpbnN0YW5jZSBvZiB0aGUgY29udGV4dCBhY3Jvc3MgdGhlIHdpbmRvd1xuLy8gdG8gZW5zdXJlIHRoYXQgaWYgUmVhY3QgUXVlcnkgaXMgdXNlZCBhY3Jvc3Ncbi8vIGRpZmZlcmVudCBidW5kbGVzIG9yIG1pY3JvZnJvbnRlbmRzIHRoZXkgd2lsbFxuLy8gYWxsIHVzZSB0aGUgc2FtZSAqKmluc3RhbmNlKiogb2YgY29udGV4dCwgcmVnYXJkbGVzc1xuLy8gb2YgbW9kdWxlIHNjb3BpbmcuXG5cbmZ1bmN0aW9uIGdldFF1ZXJ5Q2xpZW50Q29udGV4dChjb250ZXh0U2hhcmluZykge1xuICBpZiAoY29udGV4dFNoYXJpbmcgJiYgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBpZiAoIXdpbmRvdy5SZWFjdFF1ZXJ5Q2xpZW50Q29udGV4dCkge1xuICAgICAgd2luZG93LlJlYWN0UXVlcnlDbGllbnRDb250ZXh0ID0gZGVmYXVsdENvbnRleHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHdpbmRvdy5SZWFjdFF1ZXJ5Q2xpZW50Q29udGV4dDtcbiAgfVxuXG4gIHJldHVybiBkZWZhdWx0Q29udGV4dDtcbn1cblxuZXhwb3J0IHZhciB1c2VRdWVyeUNsaWVudCA9IGZ1bmN0aW9uIHVzZVF1ZXJ5Q2xpZW50KCkge1xuICB2YXIgcXVlcnlDbGllbnQgPSBSZWFjdC51c2VDb250ZXh0KGdldFF1ZXJ5Q2xpZW50Q29udGV4dChSZWFjdC51c2VDb250ZXh0KFF1ZXJ5Q2xpZW50U2hhcmluZ0NvbnRleHQpKSk7XG5cbiAgaWYgKCFxdWVyeUNsaWVudCkge1xuICAgIHRocm93IG5ldyBFcnJvcignTm8gUXVlcnlDbGllbnQgc2V0LCB1c2UgUXVlcnlDbGllbnRQcm92aWRlciB0byBzZXQgb25lJyk7XG4gIH1cblxuICByZXR1cm4gcXVlcnlDbGllbnQ7XG59O1xuZXhwb3J0IHZhciBRdWVyeUNsaWVudFByb3ZpZGVyID0gZnVuY3Rpb24gUXVlcnlDbGllbnRQcm92aWRlcihfcmVmKSB7XG4gIHZhciBjbGllbnQgPSBfcmVmLmNsaWVudCxcbiAgICAgIF9yZWYkY29udGV4dFNoYXJpbmcgPSBfcmVmLmNvbnRleHRTaGFyaW5nLFxuICAgICAgY29udGV4dFNoYXJpbmcgPSBfcmVmJGNvbnRleHRTaGFyaW5nID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkY29udGV4dFNoYXJpbmcsXG4gICAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW47XG4gIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgY2xpZW50Lm1vdW50KCk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNsaWVudC51bm1vdW50KCk7XG4gICAgfTtcbiAgfSwgW2NsaWVudF0pO1xuICB2YXIgQ29udGV4dCA9IGdldFF1ZXJ5Q2xpZW50Q29udGV4dChjb250ZXh0U2hhcmluZyk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChRdWVyeUNsaWVudFNoYXJpbmdDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IGNvbnRleHRTaGFyaW5nXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogY2xpZW50XG4gIH0sIGNoaWxkcmVuKSk7XG59OyIsICJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnOyAvLyBDT05URVhUXG5cbmZ1bmN0aW9uIGNyZWF0ZVZhbHVlKCkge1xuICB2YXIgX2lzUmVzZXQgPSBmYWxzZTtcbiAgcmV0dXJuIHtcbiAgICBjbGVhclJlc2V0OiBmdW5jdGlvbiBjbGVhclJlc2V0KCkge1xuICAgICAgX2lzUmVzZXQgPSBmYWxzZTtcbiAgICB9LFxuICAgIHJlc2V0OiBmdW5jdGlvbiByZXNldCgpIHtcbiAgICAgIF9pc1Jlc2V0ID0gdHJ1ZTtcbiAgICB9LFxuICAgIGlzUmVzZXQ6IGZ1bmN0aW9uIGlzUmVzZXQoKSB7XG4gICAgICByZXR1cm4gX2lzUmVzZXQ7XG4gICAgfVxuICB9O1xufVxuXG52YXIgUXVlcnlFcnJvclJlc2V0Qm91bmRhcnlDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQoY3JlYXRlVmFsdWUoKSk7IC8vIEhPT0tcblxuZXhwb3J0IHZhciB1c2VRdWVyeUVycm9yUmVzZXRCb3VuZGFyeSA9IGZ1bmN0aW9uIHVzZVF1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5KCkge1xuICByZXR1cm4gUmVhY3QudXNlQ29udGV4dChRdWVyeUVycm9yUmVzZXRCb3VuZGFyeUNvbnRleHQpO1xufTsgLy8gQ09NUE9ORU5UXG5cbmV4cG9ydCB2YXIgUXVlcnlFcnJvclJlc2V0Qm91bmRhcnkgPSBmdW5jdGlvbiBRdWVyeUVycm9yUmVzZXRCb3VuZGFyeShfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW47XG4gIHZhciB2YWx1ZSA9IFJlYWN0LnVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBjcmVhdGVWYWx1ZSgpO1xuICB9LCBbXSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChRdWVyeUVycm9yUmVzZXRCb3VuZGFyeUNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogdmFsdWVcbiAgfSwgdHlwZW9mIGNoaWxkcmVuID09PSAnZnVuY3Rpb24nID8gY2hpbGRyZW4odmFsdWUpIDogY2hpbGRyZW4pO1xufTsiLCAiZXhwb3J0IGZ1bmN0aW9uIHNob3VsZFRocm93RXJyb3Ioc3VzcGVuc2UsIF91c2VFcnJvckJvdW5kYXJ5LCBwYXJhbXMpIHtcbiAgLy8gQWxsb3cgdXNlRXJyb3JCb3VuZGFyeSBmdW5jdGlvbiB0byBvdmVycmlkZSB0aHJvd2luZyBiZWhhdmlvciBvbiBhIHBlci1lcnJvciBiYXNpc1xuICBpZiAodHlwZW9mIF91c2VFcnJvckJvdW5kYXJ5ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIF91c2VFcnJvckJvdW5kYXJ5LmFwcGx5KHZvaWQgMCwgcGFyYW1zKTtcbiAgfSAvLyBBbGxvdyB1c2VFcnJvckJvdW5kYXJ5IHRvIG92ZXJyaWRlIHN1c3BlbnNlJ3MgdGhyb3dpbmcgYmVoYXZpb3JcblxuXG4gIGlmICh0eXBlb2YgX3VzZUVycm9yQm91bmRhcnkgPT09ICdib29sZWFuJykgcmV0dXJuIF91c2VFcnJvckJvdW5kYXJ5OyAvLyBJZiBzdXNwZW5zZSBpcyBlbmFibGVkIGRlZmF1bHQgdG8gdGhyb3dpbmcgZXJyb3JzXG5cbiAgcmV0dXJuICEhc3VzcGVuc2U7XG59IiwgImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBub3RpZnlNYW5hZ2VyIH0gZnJvbSAnLi4vY29yZS9ub3RpZnlNYW5hZ2VyJztcbmltcG9ydCB7IHVzZVF1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5IH0gZnJvbSAnLi9RdWVyeUVycm9yUmVzZXRCb3VuZGFyeSc7XG5pbXBvcnQgeyB1c2VRdWVyeUNsaWVudCB9IGZyb20gJy4vUXVlcnlDbGllbnRQcm92aWRlcic7XG5pbXBvcnQgeyBzaG91bGRUaHJvd0Vycm9yIH0gZnJvbSAnLi91dGlscyc7XG5leHBvcnQgZnVuY3Rpb24gdXNlQmFzZVF1ZXJ5KG9wdGlvbnMsIE9ic2VydmVyKSB7XG4gIHZhciBtb3VudGVkUmVmID0gUmVhY3QudXNlUmVmKGZhbHNlKTtcblxuICB2YXIgX1JlYWN0JHVzZVN0YXRlID0gUmVhY3QudXNlU3RhdGUoMCksXG4gICAgICBmb3JjZVVwZGF0ZSA9IF9SZWFjdCR1c2VTdGF0ZVsxXTtcblxuICB2YXIgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuICB2YXIgZXJyb3JSZXNldEJvdW5kYXJ5ID0gdXNlUXVlcnlFcnJvclJlc2V0Qm91bmRhcnkoKTtcbiAgdmFyIGRlZmF1bHRlZE9wdGlvbnMgPSBxdWVyeUNsaWVudC5kZWZhdWx0UXVlcnlPYnNlcnZlck9wdGlvbnMob3B0aW9ucyk7IC8vIE1ha2Ugc3VyZSByZXN1bHRzIGFyZSBvcHRpbWlzdGljYWxseSBzZXQgaW4gZmV0Y2hpbmcgc3RhdGUgYmVmb3JlIHN1YnNjcmliaW5nIG9yIHVwZGF0aW5nIG9wdGlvbnNcblxuICBkZWZhdWx0ZWRPcHRpb25zLm9wdGltaXN0aWNSZXN1bHRzID0gdHJ1ZTsgLy8gSW5jbHVkZSBjYWxsYmFja3MgaW4gYmF0Y2ggcmVuZGVyc1xuXG4gIGlmIChkZWZhdWx0ZWRPcHRpb25zLm9uRXJyb3IpIHtcbiAgICBkZWZhdWx0ZWRPcHRpb25zLm9uRXJyb3IgPSBub3RpZnlNYW5hZ2VyLmJhdGNoQ2FsbHMoZGVmYXVsdGVkT3B0aW9ucy5vbkVycm9yKTtcbiAgfVxuXG4gIGlmIChkZWZhdWx0ZWRPcHRpb25zLm9uU3VjY2Vzcykge1xuICAgIGRlZmF1bHRlZE9wdGlvbnMub25TdWNjZXNzID0gbm90aWZ5TWFuYWdlci5iYXRjaENhbGxzKGRlZmF1bHRlZE9wdGlvbnMub25TdWNjZXNzKTtcbiAgfVxuXG4gIGlmIChkZWZhdWx0ZWRPcHRpb25zLm9uU2V0dGxlZCkge1xuICAgIGRlZmF1bHRlZE9wdGlvbnMub25TZXR0bGVkID0gbm90aWZ5TWFuYWdlci5iYXRjaENhbGxzKGRlZmF1bHRlZE9wdGlvbnMub25TZXR0bGVkKTtcbiAgfVxuXG4gIGlmIChkZWZhdWx0ZWRPcHRpb25zLnN1c3BlbnNlKSB7XG4gICAgLy8gQWx3YXlzIHNldCBzdGFsZSB0aW1lIHdoZW4gdXNpbmcgc3VzcGVuc2UgdG8gcHJldmVudFxuICAgIC8vIGZldGNoaW5nIGFnYWluIHdoZW4gZGlyZWN0bHkgbW91bnRpbmcgYWZ0ZXIgc3VzcGVuZGluZ1xuICAgIGlmICh0eXBlb2YgZGVmYXVsdGVkT3B0aW9ucy5zdGFsZVRpbWUgIT09ICdudW1iZXInKSB7XG4gICAgICBkZWZhdWx0ZWRPcHRpb25zLnN0YWxlVGltZSA9IDEwMDA7XG4gICAgfSAvLyBTZXQgY2FjaGUgdGltZSB0byAxIGlmIHRoZSBvcHRpb24gaGFzIGJlZW4gc2V0IHRvIDBcbiAgICAvLyB3aGVuIHVzaW5nIHN1c3BlbnNlIHRvIHByZXZlbnQgaW5maW5pdGUgbG9vcCBvZiBmZXRjaGVzXG5cblxuICAgIGlmIChkZWZhdWx0ZWRPcHRpb25zLmNhY2hlVGltZSA9PT0gMCkge1xuICAgICAgZGVmYXVsdGVkT3B0aW9ucy5jYWNoZVRpbWUgPSAxO1xuICAgIH1cbiAgfVxuXG4gIGlmIChkZWZhdWx0ZWRPcHRpb25zLnN1c3BlbnNlIHx8IGRlZmF1bHRlZE9wdGlvbnMudXNlRXJyb3JCb3VuZGFyeSkge1xuICAgIC8vIFByZXZlbnQgcmV0cnlpbmcgZmFpbGVkIHF1ZXJ5IGlmIHRoZSBlcnJvciBib3VuZGFyeSBoYXMgbm90IGJlZW4gcmVzZXQgeWV0XG4gICAgaWYgKCFlcnJvclJlc2V0Qm91bmRhcnkuaXNSZXNldCgpKSB7XG4gICAgICBkZWZhdWx0ZWRPcHRpb25zLnJldHJ5T25Nb3VudCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHZhciBfUmVhY3QkdXNlU3RhdGUyID0gUmVhY3QudXNlU3RhdGUoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2ZXIocXVlcnlDbGllbnQsIGRlZmF1bHRlZE9wdGlvbnMpO1xuICB9KSxcbiAgICAgIG9ic2VydmVyID0gX1JlYWN0JHVzZVN0YXRlMlswXTtcblxuICB2YXIgcmVzdWx0ID0gb2JzZXJ2ZXIuZ2V0T3B0aW1pc3RpY1Jlc3VsdChkZWZhdWx0ZWRPcHRpb25zKTtcbiAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBtb3VudGVkUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgIGVycm9yUmVzZXRCb3VuZGFyeS5jbGVhclJlc2V0KCk7XG4gICAgdmFyIHVuc3Vic2NyaWJlID0gb2JzZXJ2ZXIuc3Vic2NyaWJlKG5vdGlmeU1hbmFnZXIuYmF0Y2hDYWxscyhmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAobW91bnRlZFJlZi5jdXJyZW50KSB7XG4gICAgICAgIGZvcmNlVXBkYXRlKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgcmV0dXJuIHggKyAxO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KSk7IC8vIFVwZGF0ZSByZXN1bHQgdG8gbWFrZSBzdXJlIHdlIGRpZCBub3QgbWlzcyBhbnkgcXVlcnkgdXBkYXRlc1xuICAgIC8vIGJldHdlZW4gY3JlYXRpbmcgdGhlIG9ic2VydmVyIGFuZCBzdWJzY3JpYmluZyB0byBpdC5cblxuICAgIG9ic2VydmVyLnVwZGF0ZVJlc3VsdCgpO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBtb3VudGVkUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIHVuc3Vic2NyaWJlKCk7XG4gICAgfTtcbiAgfSwgW2Vycm9yUmVzZXRCb3VuZGFyeSwgb2JzZXJ2ZXJdKTtcbiAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAvLyBEbyBub3Qgbm90aWZ5IG9uIHVwZGF0ZXMgYmVjYXVzZSBvZiBjaGFuZ2VzIGluIHRoZSBvcHRpb25zIGJlY2F1c2VcbiAgICAvLyB0aGVzZSBjaGFuZ2VzIHNob3VsZCBhbHJlYWR5IGJlIHJlZmxlY3RlZCBpbiB0aGUgb3B0aW1pc3RpYyByZXN1bHQuXG4gICAgb2JzZXJ2ZXIuc2V0T3B0aW9ucyhkZWZhdWx0ZWRPcHRpb25zLCB7XG4gICAgICBsaXN0ZW5lcnM6IGZhbHNlXG4gICAgfSk7XG4gIH0sIFtkZWZhdWx0ZWRPcHRpb25zLCBvYnNlcnZlcl0pOyAvLyBIYW5kbGUgc3VzcGVuc2VcblxuICBpZiAoZGVmYXVsdGVkT3B0aW9ucy5zdXNwZW5zZSAmJiByZXN1bHQuaXNMb2FkaW5nKSB7XG4gICAgdGhyb3cgb2JzZXJ2ZXIuZmV0Y2hPcHRpbWlzdGljKGRlZmF1bHRlZE9wdGlvbnMpLnRoZW4oZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgIHZhciBkYXRhID0gX3JlZi5kYXRhO1xuICAgICAgZGVmYXVsdGVkT3B0aW9ucy5vblN1Y2Nlc3MgPT0gbnVsbCA/IHZvaWQgMCA6IGRlZmF1bHRlZE9wdGlvbnMub25TdWNjZXNzKGRhdGEpO1xuICAgICAgZGVmYXVsdGVkT3B0aW9ucy5vblNldHRsZWQgPT0gbnVsbCA/IHZvaWQgMCA6IGRlZmF1bHRlZE9wdGlvbnMub25TZXR0bGVkKGRhdGEsIG51bGwpO1xuICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgZXJyb3JSZXNldEJvdW5kYXJ5LmNsZWFyUmVzZXQoKTtcbiAgICAgIGRlZmF1bHRlZE9wdGlvbnMub25FcnJvciA9PSBudWxsID8gdm9pZCAwIDogZGVmYXVsdGVkT3B0aW9ucy5vbkVycm9yKGVycm9yKTtcbiAgICAgIGRlZmF1bHRlZE9wdGlvbnMub25TZXR0bGVkID09IG51bGwgPyB2b2lkIDAgOiBkZWZhdWx0ZWRPcHRpb25zLm9uU2V0dGxlZCh1bmRlZmluZWQsIGVycm9yKTtcbiAgICB9KTtcbiAgfSAvLyBIYW5kbGUgZXJyb3IgYm91bmRhcnlcblxuXG4gIGlmIChyZXN1bHQuaXNFcnJvciAmJiAhZXJyb3JSZXNldEJvdW5kYXJ5LmlzUmVzZXQoKSAmJiAhcmVzdWx0LmlzRmV0Y2hpbmcgJiYgc2hvdWxkVGhyb3dFcnJvcihkZWZhdWx0ZWRPcHRpb25zLnN1c3BlbnNlLCBkZWZhdWx0ZWRPcHRpb25zLnVzZUVycm9yQm91bmRhcnksIFtyZXN1bHQuZXJyb3IsIG9ic2VydmVyLmdldEN1cnJlbnRRdWVyeSgpXSkpIHtcbiAgICB0aHJvdyByZXN1bHQuZXJyb3I7XG4gIH0gLy8gSGFuZGxlIHJlc3VsdCBwcm9wZXJ0eSB1c2FnZSB0cmFja2luZ1xuXG5cbiAgaWYgKGRlZmF1bHRlZE9wdGlvbnMubm90aWZ5T25DaGFuZ2VQcm9wcyA9PT0gJ3RyYWNrZWQnKSB7XG4gICAgcmVzdWx0ID0gb2JzZXJ2ZXIudHJhY2tSZXN1bHQocmVzdWx0LCBkZWZhdWx0ZWRPcHRpb25zKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59IiwgImltcG9ydCB7IFF1ZXJ5T2JzZXJ2ZXIgfSBmcm9tICcuLi9jb3JlJztcbmltcG9ydCB7IHBhcnNlUXVlcnlBcmdzIH0gZnJvbSAnLi4vY29yZS91dGlscyc7XG5pbXBvcnQgeyB1c2VCYXNlUXVlcnkgfSBmcm9tICcuL3VzZUJhc2VRdWVyeSc7IC8vIEhPT0tcblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVF1ZXJ5KGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgdmFyIHBhcnNlZE9wdGlvbnMgPSBwYXJzZVF1ZXJ5QXJncyhhcmcxLCBhcmcyLCBhcmczKTtcbiAgcmV0dXJuIHVzZUJhc2VRdWVyeShwYXJzZWRPcHRpb25zLCBRdWVyeU9ic2VydmVyKTtcbn0iLCAiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtRdWVyeUNsaWVudCwgUXVlcnlDbGllbnRQcm92aWRlciwgdXNlUXVlcnl9IGZyb20gXCJyZWFjdC1xdWVyeVwiO1xuaW1wb3J0IHtFdWlMb2FkaW5nU3Bpbm5lciwgRXVpUHJvdmlkZXIsIEV1aVRleHR9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7IE9sc0FwaSB9IGZyb20gXCIuLi8uLi8uLi8uLi9hcGkvT2xzQXBpXCI7XG5pbXBvcnQgeyBnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkgfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCB7RGVzY3JpcHRpb25XaWRnZXRQcm9wc30gZnJvbSBcIi4uLy4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IHsgVGhpbmcgfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWwvaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgRGVzY3JpcHRpb25QcmVzZW50YXRpb24gfSBmcm9tIFwiLi9EZXNjcmlwdGlvblByZXNlbnRhdGlvblwiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcblxuY29uc3QgTk9fREVTQ1JJUFRJT04gPSBcIk5vIGRlc2NyaXB0aW9uIGF2YWlsYWJsZS5cIjtcblxuZnVuY3Rpb24gRGVzY3JpcHRpb25XaWRnZXQocHJvcHM6IERlc2NyaXB0aW9uV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgeyBhcGksIG9udG9sb2d5SWQsIGlyaSwgZGVzY1RleHQsIHRoaW5nVHlwZSwgcGFyYW1ldGVyLCB1c2VMZWdhY3ksIC4uLnJlc3QgfSA9IHByb3BzO1xuICBjb25zdCBvbHNBcGkgPSBuZXcgT2xzQXBpKGFwaSk7XG5cbiAgY29uc3Qge1xuICAgIGRhdGEsXG4gICAgaXNMb2FkaW5nLFxuICAgIGlzU3VjY2VzcyxcbiAgICBpc0Vycm9yLFxuICAgIGVycm9yXG4gIH0gPSB1c2VRdWVyeTxUaGluZz4oXG4gICAgW1wibWV0YWRhdGFcIiwgYXBpLCBwYXJhbWV0ZXIsIHRoaW5nVHlwZSwgaXJpLCBvbnRvbG9neUlkLCB1c2VMZWdhY3ldLFxuICAgIGFzeW5jICgpID0+IHtcbiAgICAgIHJldHVybiBvbHNBcGkuZ2V0VGhpbmdPYmplY3QoaXJpLCB0aGluZ1R5cGUsIG9udG9sb2d5SWQsIHBhcmFtZXRlciwgdXNlTGVnYWN5KTtcbiAgICB9XG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAge2lzTG9hZGluZyAmJiA8RXVpTG9hZGluZ1NwaW5uZXIgc2l6ZT1cInNcIiAvPn1cbiAgICAgIHtpc1N1Y2Nlc3MgJiYgZGF0YSAmJlxuICAgICAgICA8RGVzY3JpcHRpb25QcmVzZW50YXRpb24gZGVzY3JpcHRpb249e2RhdGEuZ2V0RGVzY3JpcHRpb24oKSB8fCBOT19ERVNDUklQVElPTn0gZGVzY1RleHQ9e2Rlc2NUZXh0fSB7Li4ucmVzdH0vPlxuICAgICAgfVxuICAgICAge2lzRXJyb3IgJiYgPEV1aVRleHQ+e2dldEVycm9yTWVzc2FnZVRvRGlzcGxheShlcnJvciwgXCJkZXNjcmlwdGlvblwiKX08L0V1aVRleHQ+fVxuICAgIDwvPlxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVEZXNjcmlwdGlvbihwcm9wczogRGVzY3JpcHRpb25XaWRnZXRQcm9wcywgY29udGFpbmVyOiBFbGVtZW50LCBjYWxsYmFjaz86KCk9PnZvaWQpIHtcbiAgUmVhY3RET00ucmVuZGVyKFdyYXBwZWREZXNjcmlwdGlvbldpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkRGVzY3JpcHRpb25XaWRnZXQocHJvcHM6IERlc2NyaXB0aW9uV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTtcbiAgcmV0dXJuIChcbiAgICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgICA8RGVzY3JpcHRpb25XaWRnZXRcbiAgICAgICAgICAgICAgYXBpPXtwcm9wcy5hcGl9XG4gICAgICAgICAgICAgIG9udG9sb2d5SWQ9e3Byb3BzLm9udG9sb2d5SWR9XG4gICAgICAgICAgICAgIGlyaT17cHJvcHMuaXJpfVxuICAgICAgICAgICAgICBkZXNjVGV4dD17cHJvcHMuZGVzY1RleHR9XG4gICAgICAgICAgICAgIHRoaW5nVHlwZT17cHJvcHMudGhpbmdUeXBlfVxuICAgICAgICAgICAgICBwYXJhbWV0ZXI9e3Byb3BzLnBhcmFtZXRlcn1cbiAgICAgICAgICAgICAgY29sb3I9e3Byb3BzLmNvbG9yfVxuICAgICAgICAgICAgICB1c2VMZWdhY3k9e3Byb3BzLnVzZUxlZ2FjeX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgICA8L0V1aVByb3ZpZGVyPlxuICApXG59XG5cbmV4cG9ydCB7IERlc2NyaXB0aW9uV2lkZ2V0LCBjcmVhdGVEZXNjcmlwdGlvbiB9O1xuIiwgImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEV1aVRleHQgfSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQge0Rlc2NyaXB0aW9uUHJlc2VudGF0aW9uUHJvcHN9IGZyb20gXCIuLi8uLi8uLi8uLi9hcHAvdHlwZXNcIjtcblxuZnVuY3Rpb24gRGVzY3JpcHRpb25QcmVzZW50YXRpb24ocHJvcHM6IERlc2NyaXB0aW9uUHJlc2VudGF0aW9uUHJvcHMpIHtcbiAgY29uc3Qge2Rlc2NUZXh0LCBkZXNjcmlwdGlvbiwgLi4ucmVzdH0gPSBwcm9wcztcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8RXVpVGV4dCB7Li4ucmVzdH0+e2Rlc2NUZXh0IHx8IGRlc2NyaXB0aW9ufTwvRXVpVGV4dD5cbiAgICA8Lz5cbiAgKTtcbn1cblxuZXhwb3J0IHsgRGVzY3JpcHRpb25QcmVzZW50YXRpb24gfTtcbiIsICJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge0V1aUZsZXhJdGVtLCBFdWlMaW5rLCBFdWlQcm92aWRlcn0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHtJcmlXaWRnZXRQcm9wc30gZnJvbSBcIi4uLy4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IHtpc0V1aUxpbmtDb2xvciwgaXNIZXhDb2xvciwgaXNSZ2JDb2xvcn0gZnJvbSBcIi4uLy4uLy4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuaW1wb3J0IHtRdWVyeUNsaWVudCwgUXVlcnlDbGllbnRQcm92aWRlcn0gZnJvbSBcInJlYWN0LXF1ZXJ5XCI7XG5cbmZ1bmN0aW9uIElyaVdpZGdldChwcm9wczogSXJpV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgeyBpcmksIGlyaVRleHQsIGNvbG9yIH0gPSBwcm9wcztcblxuICByZXR1cm4gKFxuICAgIDxFdWlGbGV4SXRlbSBncm93PXtmYWxzZX0+XG4gICAgICA8ZGl2PlxuICAgICAgICA8RXVpTGluayBocmVmPXtpcml9IHRhcmdldD1cIl9ibGFua1wiIHN0eWxlPXt7Y29sb3I6IGNvbG9yICYmIChpc0hleENvbG9yKGNvbG9yKSB8fCBpc1JnYkNvbG9yKGNvbG9yKSkgPyBjb2xvciA6IFwiXCJ9fSBjb2xvcj17Y29sb3IgJiYgaXNFdWlMaW5rQ29sb3IoY29sb3IpID8gY29sb3IgOiB1bmRlZmluZWR9PlxuICAgICAgICAgIHtpcmlUZXh0ID8gaXJpVGV4dCA6IGlyaX1cbiAgICAgICAgPC9FdWlMaW5rPlxuICAgICAgPC9kaXY+XG4gICAgPC9FdWlGbGV4SXRlbT5cbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlSXJpKHByb3BzOiBJcmlXaWRnZXRQcm9wcywgY29udGFpbmVyOiBFbGVtZW50LCBjYWxsYmFjaz86ICgpPT52b2lkKSB7XG4gICAgUmVhY3RET00ucmVuZGVyKFdyYXBwZWRJcmlXaWRnZXQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZElyaVdpZGdldChwcm9wczogSXJpV2lkZ2V0UHJvcHMpIHtcbiAgICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICAgIHJldHVybiAoXG4gICAgICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgICAgICAgICAgPElyaVdpZGdldFxuICAgICAgICAgICAgICAgICAgICBpcmk9e3Byb3BzLmlyaX1cbiAgICAgICAgICAgICAgICAgICAgaXJpVGV4dD17cHJvcHMuaXJpVGV4dH1cbiAgICAgICAgICAgICAgICAgICAgY29sb3I9e3Byb3BzLmNvbG9yfVxuICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXI9e3Byb3BzLnBhcmFtZXRlcn1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICAgICAgICA8L0V1aVByb3ZpZGVyPlxuICAgIClcbn1cblxuZXhwb3J0IHsgSXJpV2lkZ2V0LCBjcmVhdGVJcmkgfTtcbiIsICJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge0V1aUJhZGdlLCBFdWlMb2FkaW5nU3Bpbm5lciwgRXVpUHJvdmlkZXJ9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7T2xzQXBpfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBpL09sc0FwaVwiO1xuaW1wb3J0IHsgZ2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5IH0gZnJvbSBcIi4uLy4uLy4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQge0JyZWFkY3J1bWJXaWRnZXRQcm9wc30gZnJvbSBcIi4uLy4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IHsgaXNFbnRpdHkgfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWwvTW9kZWxUeXBlQ2hlY2tcIjtcbmltcG9ydCB7IEJyZWFkY3J1bWJQcmVzZW50YXRpb24gfSBmcm9tIFwiLi9CcmVhZGNydW1iUHJlc2VudGF0aW9uXCI7XG5pbXBvcnQge1F1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyLCB1c2VRdWVyeX0gZnJvbSBcInJlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuXG5mdW5jdGlvbiBCcmVhZGNydW1iV2lkZ2V0KHByb3BzOiBCcmVhZGNydW1iV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgeyBhcGksIG9udG9sb2d5SWQsIGlyaSwgZW50aXR5VHlwZSwgY29sb3JGaXJzdCwgY29sb3JTZWNvbmQsIHBhcmFtZXRlciAsIHVzZUxlZ2FjeX0gPSBwcm9wcztcbiAgY29uc3Qgb2xzQXBpID0gbmV3IE9sc0FwaShhcGkpO1xuXG4gIGNvbnN0IHtcbiAgICBkYXRhLFxuICAgIGlzTG9hZGluZyxcbiAgICBpc1N1Y2Nlc3MsXG4gICAgaXNFcnJvcixcbiAgICBlcnJvclxuICB9ID0gdXNlUXVlcnkoXG4gICAgW1wibWV0YWRhdGFcIiwgYXBpLCBwYXJhbWV0ZXIsIGVudGl0eVR5cGUsIGlyaSwgb250b2xvZ3lJZCwgdXNlTGVnYWN5XSxcbiAgICBhc3luYyAoKSA9PiB7XG4gICAgICByZXR1cm4gb2xzQXBpLmdldEVudGl0eU9iamVjdChpcmksIGVudGl0eVR5cGUsIG9udG9sb2d5SWQsIHBhcmFtZXRlciwgdXNlTGVnYWN5KTtcbiAgICB9XG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAge2lzTG9hZGluZyAmJlxuICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgIDxFdWlCYWRnZSBjb2xvcj17Y29sb3JGaXJzdCB8fCAoKHByb3BzLm9udG9sb2d5SWQpID8gXCJwcmltYXJ5XCIgOiBcIndhcm5pbmdcIil9Pntwcm9wcy5vbnRvbG9neUlkPy50b1VwcGVyQ2FzZSgpIHx8IDxFdWlMb2FkaW5nU3Bpbm5lciBzaXplPXtcInNcIn0vPn08L0V1aUJhZGdlPlxuICAgICAgICAgICAge1wiID4gXCJ9XG4gICAgICAgICAgICA8RXVpQmFkZ2UgY29sb3I9e2NvbG9yU2Vjb25kIHx8IFwid2FybmluZ1wifT57PEV1aUxvYWRpbmdTcGlubmVyIHNpemU9e1wic1wifS8+fTwvRXVpQmFkZ2U+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgfVxuICAgICAge2lzU3VjY2VzcyAmJiBkYXRhICYmIGlzRW50aXR5KGRhdGEpICYmXG4gICAgICAgIDxCcmVhZGNydW1iUHJlc2VudGF0aW9uXG4gICAgICAgICAgaXNEZWZpbmluZ09udG9sb2d5PXtkYXRhLmdldElzRGVmaW5pbmdPbnRvbG9neSgpfVxuICAgICAgICAgIG9udG9sb2d5TmFtZT17ZGF0YS5nZXRPbnRvbG9neUlkKCl9XG4gICAgICAgICAgc2hvcnRGb3JtPXtkYXRhLmdldFNob3J0Rm9ybSgpfVxuICAgICAgICAgIG9udG9sb2d5SWQ9e29udG9sb2d5SWR9XG4gICAgICAgIC8+XG4gICAgICB9XG4gICAgICB7aXNFcnJvciAmJlxuICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgIDxFdWlCYWRnZSBjb2xvcj17Y29sb3JGaXJzdCB8fCAoKHByb3BzLm9udG9sb2d5SWQgfHwgKGRhdGEgJiYgZGF0YS5nZXRPbnRvbG9neUlkKCkpKSA/IFwicHJpbWFyeVwiIDogXCJkYW5nZXJcIil9Pntwcm9wcy5vbnRvbG9neUlkPy50b1VwcGVyQ2FzZSgpIHx8IChkYXRhICYmIGRhdGEuZ2V0T250b2xvZ3lJZCgpLnRvVXBwZXJDYXNlKCkpIHx8IGdldEVycm9yTWVzc2FnZVRvRGlzcGxheShlcnJvciwgXCJvbnRvbG9neVwiKX08L0V1aUJhZGdlPlxuICAgICAgICAgICAge1wiID4gXCJ9XG4gICAgICAgICAgICA8RXVpQmFkZ2UgY29sb3I9e2NvbG9yU2Vjb25kIHx8ICgoZGF0YSAmJiBkYXRhLmdldFNob3J0Rm9ybSgpKSA/IFwic3VjY2Vzc1wiIDogXCJkYW5nZXJcIil9PnsoZGF0YSAmJiBkYXRhLmdldFNob3J0Rm9ybSgpKSA/IGRhdGEuZ2V0U2hvcnRGb3JtKCkudG9VcHBlckNhc2UoKSA6IGdldEVycm9yTWVzc2FnZVRvRGlzcGxheShlcnJvciwgXCJzaG9ydCBmb3JtXCIpfTwvRXVpQmFkZ2U+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICB9XG4gICAgICA8Lz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQnJlYWRjcnVtYihwcm9wczogQnJlYWRjcnVtYldpZGdldFByb3BzLCBjb250YWluZXI6IEVsZW1lbnQsIGNhbGxiYWNrPzooKT0+dm9pZCkge1xuICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZEJyZWFkY3J1bWJXaWRnZXQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZEJyZWFkY3J1bWJXaWRnZXQocHJvcHM6IEJyZWFkY3J1bWJXaWRnZXRQcm9wcykge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gKFxuICAgICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCI+XG4gICAgICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgICAgIDxCcmVhZGNydW1iV2lkZ2V0XG4gICAgICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgICAgICBlbnRpdHlUeXBlPXtwcm9wcy5lbnRpdHlUeXBlfVxuICAgICAgICAgICAgICBpcmk9e3Byb3BzLmlyaX1cbiAgICAgICAgICAgICAgb250b2xvZ3lJZD17cHJvcHMub250b2xvZ3lJZH1cbiAgICAgICAgICAgICAgY29sb3JGaXJzdD17cHJvcHMuY29sb3JGaXJzdH1cbiAgICAgICAgICAgICAgY29sb3JTZWNvbmQ9e3Byb3BzLmNvbG9yU2Vjb25kfVxuICAgICAgICAgICAgICBwYXJhbWV0ZXI9e3Byb3BzLnBhcmFtZXRlcn1cbiAgICAgICAgICAgICAgdXNlTGVnYWN5PXtwcm9wcy51c2VMZWdhY3l9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICAgICAgPC9FdWlQcm92aWRlcj5cbiAgKVxufVxuXG5leHBvcnQgeyBCcmVhZGNydW1iV2lkZ2V0LCBjcmVhdGVCcmVhZGNydW1iIH07XG4iLCAiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtFdWlCYWRnZX0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHtCcmVhZGNydW1iUHJlc2VudGF0aW9uUHJvcHN9IGZyb20gXCIuLi8uLi8uLi8uLi9hcHAvdHlwZXNcIjtcblxuZnVuY3Rpb24gQnJlYWRjcnVtYlByZXNlbnRhdGlvbihwcm9wczogQnJlYWRjcnVtYlByZXNlbnRhdGlvblByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgICAgPHNwYW4+XG4gICAgICAgICAgPEV1aUJhZGdlIGNvbG9yPXtwcm9wcy5jb2xvckZpcnN0IHx8IFwicHJpbWFyeVwifT5cbiAgICAgICAgICAgIHtwcm9wcy5vbnRvbG9neU5hbWUudG9VcHBlckNhc2UoKX1cbiAgICAgICAgICA8L0V1aUJhZGdlPlxuICAgICAgICAgIHtcIiA+IFwifVxuICAgICAgICAgIDxFdWlCYWRnZSBjb2xvcj17cHJvcHMuY29sb3JTZWNvbmQgfHwgXCJzdWNjZXNzXCJ9PlxuICAgICAgICAgICAge3Byb3BzLnNob3J0Rm9ybSA/IHByb3BzLnNob3J0Rm9ybS50b1VwcGVyQ2FzZSgpIDogXCJObyBzaG9ydCBmb3JtIGF2YWlsYWJsZVwifVxuICAgICAgICAgIDwvRXVpQmFkZ2U+XG4gICAgICAgIDwvc3Bhbj5cbiAgICA8Lz5cbiAgKTtcbn1cblxuZXhwb3J0IHsgQnJlYWRjcnVtYlByZXNlbnRhdGlvbiB9O1xuIiwgImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7RXVpTG9hZGluZ1NwaW5uZXIsIEV1aVByb3ZpZGVyLCBFdWlUZXh0fSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQgeyBPbHNBcGkgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9hcGkvT2xzQXBpJ1xuaW1wb3J0IHtRdWVyeUNsaWVudCwgUXVlcnlDbGllbnRQcm92aWRlciwgdXNlUXVlcnl9IGZyb20gJ3JlYWN0LXF1ZXJ5J1xuaW1wb3J0IHsgZ2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5IH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQge0FsdGVybmF0aXZlTmFtZVRhYldpZGdldFByb3BzfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgeyBUaGluZyB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9tb2RlbC9pbnRlcmZhY2VzXCI7XG5pbXBvcnQgeyBpc0VudGl0eSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9tb2RlbC9Nb2RlbFR5cGVDaGVja1wiO1xuaW1wb3J0IHsgQWx0ZXJuYXRpdmVOYW1lVGFiUHJlc2VudGF0aW9uIH0gZnJvbSBcIi4vQWx0ZXJuYXRpdmVOYW1lVGFiUHJlc2VudGF0aW9uXCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuXG5mdW5jdGlvbiBBbHRlcm5hdGl2ZU5hbWVUYWJXaWRnZXQocHJvcHM6IEFsdGVybmF0aXZlTmFtZVRhYldpZGdldFByb3BzKSB7XG4gIGNvbnN0IHsgaXJpLCBhcGksIHBhcmFtZXRlciwgZW50aXR5VHlwZSwgb250b2xvZ3lJZCwgdXNlTGVnYWN5IH0gPSBwcm9wcztcbiAgY29uc3Qgb2xzQXBpID0gbmV3IE9sc0FwaShhcGkpO1xuXG4gIGNvbnN0IHtcbiAgICBkYXRhLFxuICAgIGlzTG9hZGluZyxcbiAgICBpc1N1Y2Nlc3MsXG4gICAgaXNFcnJvcixcbiAgICBlcnJvclxuICB9ID0gdXNlUXVlcnk8VGhpbmc+KFxuICAgIFtcIm1ldGFkYXRhXCIsIGFwaSwgcGFyYW1ldGVyLCBlbnRpdHlUeXBlLCBpcmksIG9udG9sb2d5SWQsIHVzZUxlZ2FjeV0sXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgcmV0dXJuIG9sc0FwaS5nZXRFbnRpdHlPYmplY3QoaXJpLCBlbnRpdHlUeXBlLCBvbnRvbG9neUlkLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSk7XG4gICAgfVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHtpc1N1Y2Nlc3MgJiYgZGF0YSAmJiBpc0VudGl0eShkYXRhKSAmJlxuICAgICAgICA8QWx0ZXJuYXRpdmVOYW1lVGFiUHJlc2VudGF0aW9uIHN5bm9ueW1zPXtkYXRhLmdldFN5bm9ueW1zKCkubWFwKHN5bm9ueW0gPT4gc3lub255bS52YWx1ZSl9IC8+fVxuICAgICAge2lzTG9hZGluZyAmJiA8RXVpTG9hZGluZ1NwaW5uZXIgLz59XG4gICAgICB7aXNFcnJvciAmJiA8RXVpVGV4dD57Z2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5KGVycm9yLCBcImFsdGVybmF0aXZlIG5hbWVzXCIpfTwvRXVpVGV4dD59XG4gICAgPC8+XG4gICk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUFsdGVybmF0aXZlTmFtZVRhYihwcm9wczogQWx0ZXJuYXRpdmVOYW1lVGFiV2lkZ2V0UHJvcHMsIGNvbnRhaW5lcjogRWxlbWVudCwgY2FsbGJhY2s/OiAoKT0+dm9pZCkge1xuICAgIFJlYWN0RE9NLnJlbmRlcihXcmFwcGVkQWx0ZXJuYXRpdmVOYW1lVGFiV2lkZ2V0KHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIFdyYXBwZWRBbHRlcm5hdGl2ZU5hbWVUYWJXaWRnZXQocHJvcHM6IEFsdGVybmF0aXZlTmFtZVRhYldpZGdldFByb3BzKSB7XG4gICAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTtcbiAgICByZXR1cm4gKFxuICAgICAgICA8RXVpUHJvdmlkZXIgY29sb3JNb2RlPVwibGlnaHRcIj5cbiAgICAgICAgICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgICAgICAgICAgIDxBbHRlcm5hdGl2ZU5hbWVUYWJXaWRnZXRcbiAgICAgICAgICAgICAgICAgICAgaXJpPXtwcm9wcy5pcml9XG4gICAgICAgICAgICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgICAgICAgICAgICBvbnRvbG9neUlkPXtwcm9wcy5vbnRvbG9neUlkfVxuICAgICAgICAgICAgICAgICAgICBlbnRpdHlUeXBlPXtwcm9wcy5lbnRpdHlUeXBlfVxuICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXI9e3Byb3BzLnBhcmFtZXRlcn1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICAgICAgICA8L0V1aVByb3ZpZGVyPlxuICAgIClcbn1cblxuZXhwb3J0IHsgQWx0ZXJuYXRpdmVOYW1lVGFiV2lkZ2V0LCBjcmVhdGVBbHRlcm5hdGl2ZU5hbWVUYWIgfTtcbiIsICJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBFdWlGbGV4R3JvdXAsIEV1aUZsZXhJdGVtLCBFdWlQYW5lbCwgRXVpVGV4dCB9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7QWx0ZXJuYXRpdmVOYW1lVGFiV2lkZ2V0UHJlc2VudGF0aW9uUHJvcHN9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9hcHAvdHlwZXNcIjtcblxuZnVuY3Rpb24gQWx0ZXJuYXRpdmVOYW1lVGFiUHJlc2VudGF0aW9uKHByb3BzOiBBbHRlcm5hdGl2ZU5hbWVUYWJXaWRnZXRQcmVzZW50YXRpb25Qcm9wcykge1xuXG4gIGZ1bmN0aW9uIHJlbmRlckFsdExhYmVsKCkge1xuICAgIGlmIChwcm9wcy5zeW5vbnltcyAmJiBwcm9wcy5zeW5vbnltcy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gcHJvcHMuc3lub255bXMubWFwKCh2YWx1ZTogc3RyaW5nLCBpbmRleDogbnVtYmVyKSA9PiAoXG4gICAgICAgIDxFdWlGbGV4SXRlbSBrZXk9e3ZhbHVlICsgaW5kZXh9Pnt2YWx1ZX08L0V1aUZsZXhJdGVtPlxuICAgICAgKSk7XG4gICAgfVxuICAgIHJldHVybiA8RXVpVGV4dD5ObyBhbHRlcm5hdGl2ZSBuYW1lcyBleGlzdC48L0V1aVRleHQ+O1xuICB9XG5cbiAgLy8gVXNpbmcgcmVpZmljYXRpb24vcGFzc2luZyB0aGUgRW50aXR5IGNsYXNzIGNvdWxkIHByb3ZpZGUgbW9yZSBpbmZvcm1hdGlvblxuICAvLyBmdW5jdGlvbiByZW5kZXJBbHRMYWJlbChlbnRpdHk6IEVudGl0eSkge1xuICAvLyAgIGlmIChlbnRpdHkuZ2V0U3lub255bXMoKS5sZW5ndGggPiAwKSB7XG4gIC8vICAgICByZXR1cm4gZW50aXR5LmdldFN5bm9ueW1zKCkubWFwKChyZjogUmVpZmllZDxhbnk+LCBpbmRleDogbnVtYmVyKSA9PiAoXG4gIC8vICAgICAgIDxwIGtleT17cmYudmFsdWUgKyBpbmRleH0+e2dldFJlaWZpZWRKU1goZW50aXR5LCByZiwgYXBpKX08L3A+XG4gIC8vICAgICApKTtcbiAgLy8gICB9XG4gIC8vICAgcmV0dXJuIDxFdWlUZXh0Pk5vIGFsdGVybmF0aXZlIG5hbWVzIGV4aXN0LjwvRXVpVGV4dD47XG4gIC8vIH1cblxuICByZXR1cm4gKFxuICAgIDxFdWlQYW5lbD5cbiAgICAgIDxFdWlGbGV4R3JvdXAgc3R5bGU9e3sgcGFkZGluZzogMTAgfX0gZGlyZWN0aW9uPVwiY29sdW1uXCI+XG4gICAgICAgIHtyZW5kZXJBbHRMYWJlbCgpfVxuICAgICAgPC9FdWlGbGV4R3JvdXA+XG4gICAgPC9FdWlQYW5lbD5cbiAgKTtcbn1cblxuZXhwb3J0IHsgQWx0ZXJuYXRpdmVOYW1lVGFiUHJlc2VudGF0aW9uIH07XG4iLCAiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtFdWlMb2FkaW5nU3Bpbm5lciwgRXVpUHJvdmlkZXIsIEV1aVRleHR9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7IE9sc0FwaSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9hcGkvT2xzQXBpXCI7XG5pbXBvcnQge1F1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyLCB1c2VRdWVyeX0gZnJvbSBcInJlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQgeyBnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCB7IENyb3NzUmVmV2lkZ2V0UHJvcHMgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgeyBUaGluZyB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9tb2RlbC9pbnRlcmZhY2VzXCI7XG5pbXBvcnQgeyBpc0VudGl0eSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9tb2RlbC9Nb2RlbFR5cGVDaGVja1wiO1xuaW1wb3J0IHsgQ3Jvc3NSZWZUYWJQcmVzZW50YXRpb24gfSBmcm9tIFwiLi9Dcm9zc1JlZlRhYlByZXNlbnRhdGlvblwiO1xuaW1wb3J0IFJlaWZpZWQgZnJvbSBcIi4uLy4uLy4uLy4uLy4uL21vZGVsL1JlaWZpZWRcIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5cbmZ1bmN0aW9uIENyb3NzUmVmVGFiV2lkZ2V0KHByb3BzOiBDcm9zc1JlZldpZGdldFByb3BzKSB7XG4gIGNvbnN0IHsgaXJpLCBhcGksIHBhcmFtZXRlciwgZW50aXR5VHlwZSwgb250b2xvZ3lJZCwgdXNlTGVnYWN5IH0gPSBwcm9wcztcbiAgY29uc3Qgb2xzQXBpID0gbmV3IE9sc0FwaShhcGkpO1xuXG4gIGNvbnN0IHtcbiAgICBkYXRhLFxuICAgIGlzTG9hZGluZyxcbiAgICBpc1N1Y2Nlc3MsXG4gICAgaXNFcnJvcixcbiAgICBlcnJvclxuICB9ID0gdXNlUXVlcnk8VGhpbmc+KFxuICAgIFtcIm1ldGFkYXRhXCIsIGFwaSwgcGFyYW1ldGVyLCBlbnRpdHlUeXBlLCBpcmksIG9udG9sb2d5SWQsIHVzZUxlZ2FjeV0sXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgcmV0dXJuIG9sc0FwaS5nZXRFbnRpdHlPYmplY3QoaXJpLCBlbnRpdHlUeXBlLCBvbnRvbG9neUlkLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSk7XG4gICAgfVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHtpc1N1Y2Nlc3MgJiYgZGF0YSAmJiBpc0VudGl0eShkYXRhKSAmJlxuICAgICAgICA8Q3Jvc3NSZWZUYWJQcmVzZW50YXRpb24gY3Jvc3NyZWZzPXtSZWlmaWVkLmZyb21Kc29uKGRhdGEuZ2V0Q3Jvc3NSZWZlcmVuY2VzKCkpLm1hcCgodmFsdWUpID0+IHtcbiAgICAgICAgICByZXR1cm4gdmFsdWUudmFsdWU7XG4gICAgICAgIH0pfSAvPn1cbiAgICAgIHtpc0xvYWRpbmcgJiYgPEV1aUxvYWRpbmdTcGlubmVyIC8+fVxuICAgICAge2lzRXJyb3IgJiYgPEV1aVRleHQ+e2dldEVycm9yTWVzc2FnZVRvRGlzcGxheShlcnJvciwgXCJjcm9zcyByZWZlcmVuY2VzXCIpfTwvRXVpVGV4dD59XG4gICAgPC8+XG4gICk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNyb3NzUmVmVGFiKHByb3BzOiBDcm9zc1JlZldpZGdldFByb3BzLCBjb250YWluZXI6IEVsZW1lbnQsIGNhbGxiYWNrPzogKCk9PnZvaWQpIHtcbiAgICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZENyb3NzUmVmVGFiV2lkZ2V0KHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIFdyYXBwZWRDcm9zc1JlZlRhYldpZGdldChwcm9wczogQ3Jvc3NSZWZXaWRnZXRQcm9wcykge1xuICAgIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCI+XG4gICAgICAgICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgICAgICAgICA8Q3Jvc3NSZWZUYWJXaWRnZXRcbiAgICAgICAgICAgICAgICAgICAgaXJpPXtwcm9wcy5pcml9XG4gICAgICAgICAgICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgICAgICAgICAgICBvbnRvbG9neUlkPXtwcm9wcy5vbnRvbG9neUlkfVxuICAgICAgICAgICAgICAgICAgICBlbnRpdHlUeXBlPXtwcm9wcy5lbnRpdHlUeXBlfVxuICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXI9e3Byb3BzLnBhcmFtZXRlcn1cbiAgICAgICAgICAgICAgICAgICAgdXNlTGVnYWN5PXtwcm9wcy51c2VMZWdhY3l9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICAgICAgPC9FdWlQcm92aWRlcj5cbiAgICApXG59XG5cbmV4cG9ydCB7IENyb3NzUmVmVGFiV2lkZ2V0LCBjcmVhdGVDcm9zc1JlZlRhYiB9O1xuIiwgImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEV1aUZsZXhHcm91cCwgRXVpRmxleEl0ZW0sIEV1aVBhbmVsLCBFdWlUZXh0IH0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHtDcm9zc1JlZlByZXNlbnRhdGlvblByb3BzfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5cbmZ1bmN0aW9uIENyb3NzUmVmVGFiUHJlc2VudGF0aW9uKHByb3BzOiBDcm9zc1JlZlByZXNlbnRhdGlvblByb3BzKSB7XG5cbiAgZnVuY3Rpb24gcmVuZGVyQ3Jvc3NSZWZzKGNyb3NzcmVmczogYW55KSB7XG4gICAgaWYgKGNyb3NzcmVmcyAmJiBjcm9zc3JlZnMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIGNyb3NzcmVmcz8ubWFwKChpdGVtOiBhbnksIGluZGV4OiBhbnkpID0+IChcbiAgICAgICAgPEV1aUZsZXhJdGVtIGtleT17aW5kZXh9PlxuICAgICAgICAgIHtpdGVtfVxuICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgKSk7XG4gICAgfVxuICAgIHJldHVybiA8RXVpVGV4dD5ObyBjcm9zcyByZWZlcmVuY2VzIGV4aXN0LjwvRXVpVGV4dD47XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxFdWlQYW5lbD5cbiAgICAgIDw+XG4gICAgICAgIDxFdWlGbGV4R3JvdXAgc3R5bGU9e3sgcGFkZGluZzogNyB9fSBkaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICB7cmVuZGVyQ3Jvc3NSZWZzKHByb3BzLmNyb3NzcmVmcyl9XG4gICAgICAgIDwvRXVpRmxleEdyb3VwPlxuICAgICAgPC8+XG4gICAgPC9FdWlQYW5lbD5cbiAgKTtcbn1cblxuZXhwb3J0IHsgQ3Jvc3NSZWZUYWJQcmVzZW50YXRpb24gfTtcbiIsICJpbXBvcnQge0V1aVBhbmVsLCBFdWlQcm92aWRlcn0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFwiQHpibWVkL29scy10cmVldmlld1wiXG5pbXBvcnQgXCIuLi8uLi8uLi8uLi8uLi9zdHlsZS90cmVlc3R5bGVzLmNzc1wiO1xuaW1wb3J0IHtIaWVyYXJjaHlXaWRnZXRQcm9wc30gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IHtwbHVyYWxpemVUeXBlfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCB7UXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXJ9IGZyb20gXCJyZWFjdC1xdWVyeVwiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcblxuY29uc3QgSGllcmFyY2h5V2lkZ2V0ID0gKHByb3BzOiBIaWVyYXJjaHlXaWRnZXRQcm9wcykgPT4ge1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgdHJlZUNvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyN0cmVlX2NvbnRhaW5lcicpO1xuICAgICh3aW5kb3cgYXMgYW55KVtcIk9MU1dpZGdldHNcIl0uY3JlYXRlRW50aXR5VHJlZSh7XG4gICAgICBpcmk6IHByb3BzLmlyaSxcbiAgICAgIG9udG9sb2d5SWQ6IHByb3BzLm9udG9sb2d5SWQsXG4gICAgICBhcGlVcmw6IHByb3BzLmFwaS5zdWJzdHJpbmcoMCwgcHJvcHMuYXBpLmxhc3RJbmRleE9mKFwiYXBpXCIpKSxcbiAgICAgIGVudGl0eVR5cGU6IChwcm9wcy5lbnRpdHlUeXBlID8gcGx1cmFsaXplVHlwZShwcm9wcy5lbnRpdHlUeXBlLCBmYWxzZSkgOiB1bmRlZmluZWQpIHx8IFwiZW50aXRpZXNcIixcbiAgICAgIG9uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5ID8gcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5IDogKG9udG9sb2d5SWQ6IHN0cmluZywgZW50aXR5VHlwZTogc3RyaW5nLCBpcmk6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhgbmF2aWdhdGUgdG8gZW50aXR5IHdpdGggb250b2xvZ3lJZDogJHtvbnRvbG9neUlkfSwgZW50aXR5VHlwZTogJHtlbnRpdHlUeXBlfSwgaXJpOiAke2lyaX1gLCk7XG4gICAgICB9LFxuICAgICAgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5ID8gcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3kgOiAob250b2xvZ3lJZDogc3RyaW5nLCBlbnRpdHlUeXBlOiBzdHJpbmcsIGlyaTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBuYXZpZ2F0ZSB0byBvbnRvbG9neSB3aXRoIG9udG9sb2d5SWQ6ICR7b250b2xvZ3lJZH0sIGVudGl0eVR5cGU6ICR7ZW50aXR5VHlwZX0sIGlyaTogJHtpcml9YCwpO1xuICAgICAgfVxuICAgIH0sIHRyZWVDb250YWluZXIpO1xuICB9LCBbcHJvcHMuYXBpLCBwcm9wcy5pcmksIHByb3BzLm9udG9sb2d5SWQsIHByb3BzLmVudGl0eVR5cGUsIHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSwgcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksIFwiaGllcmFyY2h5V2lkZ2V0XCJdKTtcblxuICByZXR1cm4gKFxuICAgIC8vbWluV2lkdGggcmVxdWlyZWQgd29ya2Fyb3VuZCB1bnRpbCBvdmVybGFwcGluZyBjaGVja2JveGVzIGFyZSBmaXhlZCBpbiBvbHM0LXdpZGdldHNcbiAgICA8RXVpUGFuZWwgc3R5bGU9e3ttaW5XaWR0aDogXCI2MDBweFwifX0+XG4gICAgICA8ZGl2IGlkPVwidHJlZV9jb250YWluZXJcIi8+XG4gICAgPC9FdWlQYW5lbD5cbiAgKTtcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZUhpZXJhcmNoeShwcm9wczogSGllcmFyY2h5V2lkZ2V0UHJvcHMsIGNvbnRhaW5lcjogRWxlbWVudCwgY2FsbGJhY2s/OiAoKT0+dm9pZCkge1xuICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZEhpZXJhcmNoeVdpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkSGllcmFyY2h5V2lkZ2V0KHByb3BzOiBIaWVyYXJjaHlXaWRnZXRQcm9wcykge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gKFxuICAgICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCI+XG4gICAgICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgICAgIDxIaWVyYXJjaHlXaWRnZXRcbiAgICAgICAgICAgICAgb250b2xvZ3lJZD17cHJvcHMub250b2xvZ3lJZH1cbiAgICAgICAgICAgICAgYXBpPXtwcm9wcy5hcGl9XG4gICAgICAgICAgICAgIGlyaT17cHJvcHMuaXJpfVxuICAgICAgICAgICAgICBlbnRpdHlUeXBlPXtwcm9wcy5lbnRpdHlUeXBlfVxuICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9FbnRpdHk9e3Byb3BzLm9uTmF2aWdhdGVUb0VudGl0eX1cbiAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvT250b2xvZ3k9e3Byb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5fVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICAgIDwvRXVpUHJvdmlkZXI+XG4gIClcbn1cblxuZXhwb3J0IHsgSGllcmFyY2h5V2lkZ2V0LCBjcmVhdGVIaWVyYXJjaHkgfTtcbiIsICIvKlxub2JqZWN0LWFzc2lnblxuKGMpIFNpbmRyZSBTb3JodXNcbkBsaWNlbnNlIE1JVFxuKi9cblxuJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBwcm9wSXNFbnVtZXJhYmxlID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuZnVuY3Rpb24gdG9PYmplY3QodmFsKSB7XG5cdGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3QuYXNzaWduIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBudWxsIG9yIHVuZGVmaW5lZCcpO1xuXHR9XG5cblx0cmV0dXJuIE9iamVjdCh2YWwpO1xufVxuXG5mdW5jdGlvbiBzaG91bGRVc2VOYXRpdmUoKSB7XG5cdHRyeSB7XG5cdFx0aWYgKCFPYmplY3QuYXNzaWduKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gRGV0ZWN0IGJ1Z2d5IHByb3BlcnR5IGVudW1lcmF0aW9uIG9yZGVyIGluIG9sZGVyIFY4IHZlcnNpb25zLlxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9NDExOFxuXHRcdHZhciB0ZXN0MSA9IG5ldyBTdHJpbmcoJ2FiYycpOyAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXctd3JhcHBlcnNcblx0XHR0ZXN0MVs1XSA9ICdkZSc7XG5cdFx0aWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QxKVswXSA9PT0gJzUnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MiA9IHt9O1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgMTA7IGkrKykge1xuXHRcdFx0dGVzdDJbJ18nICsgU3RyaW5nLmZyb21DaGFyQ29kZShpKV0gPSBpO1xuXHRcdH1cblx0XHR2YXIgb3JkZXIyID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDIpLm1hcChmdW5jdGlvbiAobikge1xuXHRcdFx0cmV0dXJuIHRlc3QyW25dO1xuXHRcdH0pO1xuXHRcdGlmIChvcmRlcjIuam9pbignJykgIT09ICcwMTIzNDU2Nzg5Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMwNTZcblx0XHR2YXIgdGVzdDMgPSB7fTtcblx0XHQnYWJjZGVmZ2hpamtsbW5vcHFyc3QnLnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uIChsZXR0ZXIpIHtcblx0XHRcdHRlc3QzW2xldHRlcl0gPSBsZXR0ZXI7XG5cdFx0fSk7XG5cdFx0aWYgKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sIHRlc3QzKSkuam9pbignJykgIT09XG5cdFx0XHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0Ly8gV2UgZG9uJ3QgZXhwZWN0IGFueSBvZiB0aGUgYWJvdmUgdG8gdGhyb3csIGJ1dCBiZXR0ZXIgdG8gYmUgc2FmZS5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzaG91bGRVc2VOYXRpdmUoKSA/IE9iamVjdC5hc3NpZ24gOiBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcblx0dmFyIGZyb207XG5cdHZhciB0byA9IHRvT2JqZWN0KHRhcmdldCk7XG5cdHZhciBzeW1ib2xzO1xuXG5cdGZvciAodmFyIHMgPSAxOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKSB7XG5cdFx0ZnJvbSA9IE9iamVjdChhcmd1bWVudHNbc10pO1xuXG5cdFx0Zm9yICh2YXIga2V5IGluIGZyb20pIHtcblx0XHRcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtleSkpIHtcblx0XHRcdFx0dG9ba2V5XSA9IGZyb21ba2V5XTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG5cdFx0XHRzeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGZyb20pO1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzeW1ib2xzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmIChwcm9wSXNFbnVtZXJhYmxlLmNhbGwoZnJvbSwgc3ltYm9sc1tpXSkpIHtcblx0XHRcdFx0XHR0b1tzeW1ib2xzW2ldXSA9IGZyb21bc3ltYm9sc1tpXV07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdG87XG59O1xuIiwgIi8qKiBAbGljZW5zZSBSZWFjdCB2MTcuMC4yXG4gKiByZWFjdC5wcm9kdWN0aW9uLm1pbi5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG4ndXNlIHN0cmljdCc7dmFyIGw9cmVxdWlyZShcIm9iamVjdC1hc3NpZ25cIiksbj02MDEwMyxwPTYwMTA2O2V4cG9ydHMuRnJhZ21lbnQ9NjAxMDc7ZXhwb3J0cy5TdHJpY3RNb2RlPTYwMTA4O2V4cG9ydHMuUHJvZmlsZXI9NjAxMTQ7dmFyIHE9NjAxMDkscj02MDExMCx0PTYwMTEyO2V4cG9ydHMuU3VzcGVuc2U9NjAxMTM7dmFyIHU9NjAxMTUsdj02MDExNjtcbmlmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5mb3Ipe3ZhciB3PVN5bWJvbC5mb3I7bj13KFwicmVhY3QuZWxlbWVudFwiKTtwPXcoXCJyZWFjdC5wb3J0YWxcIik7ZXhwb3J0cy5GcmFnbWVudD13KFwicmVhY3QuZnJhZ21lbnRcIik7ZXhwb3J0cy5TdHJpY3RNb2RlPXcoXCJyZWFjdC5zdHJpY3RfbW9kZVwiKTtleHBvcnRzLlByb2ZpbGVyPXcoXCJyZWFjdC5wcm9maWxlclwiKTtxPXcoXCJyZWFjdC5wcm92aWRlclwiKTtyPXcoXCJyZWFjdC5jb250ZXh0XCIpO3Q9dyhcInJlYWN0LmZvcndhcmRfcmVmXCIpO2V4cG9ydHMuU3VzcGVuc2U9dyhcInJlYWN0LnN1c3BlbnNlXCIpO3U9dyhcInJlYWN0Lm1lbW9cIik7dj13KFwicmVhY3QubGF6eVwiKX12YXIgeD1cImZ1bmN0aW9uXCI9PT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaXRlcmF0b3I7XG5mdW5jdGlvbiB5KGEpe2lmKG51bGw9PT1hfHxcIm9iamVjdFwiIT09dHlwZW9mIGEpcmV0dXJuIG51bGw7YT14JiZhW3hdfHxhW1wiQEBpdGVyYXRvclwiXTtyZXR1cm5cImZ1bmN0aW9uXCI9PT10eXBlb2YgYT9hOm51bGx9ZnVuY3Rpb24geihhKXtmb3IodmFyIGI9XCJodHRwczovL3JlYWN0anMub3JnL2RvY3MvZXJyb3ItZGVjb2Rlci5odG1sP2ludmFyaWFudD1cIithLGM9MTtjPGFyZ3VtZW50cy5sZW5ndGg7YysrKWIrPVwiJmFyZ3NbXT1cIitlbmNvZGVVUklDb21wb25lbnQoYXJndW1lbnRzW2NdKTtyZXR1cm5cIk1pbmlmaWVkIFJlYWN0IGVycm9yICNcIithK1wiOyB2aXNpdCBcIitiK1wiIGZvciB0aGUgZnVsbCBtZXNzYWdlIG9yIHVzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCBmb3IgZnVsbCBlcnJvcnMgYW5kIGFkZGl0aW9uYWwgaGVscGZ1bCB3YXJuaW5ncy5cIn1cbnZhciBBPXtpc01vdW50ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZW5xdWV1ZUZvcmNlVXBkYXRlOmZ1bmN0aW9uKCl7fSxlbnF1ZXVlUmVwbGFjZVN0YXRlOmZ1bmN0aW9uKCl7fSxlbnF1ZXVlU2V0U3RhdGU6ZnVuY3Rpb24oKXt9fSxCPXt9O2Z1bmN0aW9uIEMoYSxiLGMpe3RoaXMucHJvcHM9YTt0aGlzLmNvbnRleHQ9Yjt0aGlzLnJlZnM9Qjt0aGlzLnVwZGF0ZXI9Y3x8QX1DLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PXt9O0MucHJvdG90eXBlLnNldFN0YXRlPWZ1bmN0aW9uKGEsYil7aWYoXCJvYmplY3RcIiE9PXR5cGVvZiBhJiZcImZ1bmN0aW9uXCIhPT10eXBlb2YgYSYmbnVsbCE9YSl0aHJvdyBFcnJvcih6KDg1KSk7dGhpcy51cGRhdGVyLmVucXVldWVTZXRTdGF0ZSh0aGlzLGEsYixcInNldFN0YXRlXCIpfTtDLnByb3RvdHlwZS5mb3JjZVVwZGF0ZT1mdW5jdGlvbihhKXt0aGlzLnVwZGF0ZXIuZW5xdWV1ZUZvcmNlVXBkYXRlKHRoaXMsYSxcImZvcmNlVXBkYXRlXCIpfTtcbmZ1bmN0aW9uIEQoKXt9RC5wcm90b3R5cGU9Qy5wcm90b3R5cGU7ZnVuY3Rpb24gRShhLGIsYyl7dGhpcy5wcm9wcz1hO3RoaXMuY29udGV4dD1iO3RoaXMucmVmcz1CO3RoaXMudXBkYXRlcj1jfHxBfXZhciBGPUUucHJvdG90eXBlPW5ldyBEO0YuY29uc3RydWN0b3I9RTtsKEYsQy5wcm90b3R5cGUpO0YuaXNQdXJlUmVhY3RDb21wb25lbnQ9ITA7dmFyIEc9e2N1cnJlbnQ6bnVsbH0sSD1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LEk9e2tleTohMCxyZWY6ITAsX19zZWxmOiEwLF9fc291cmNlOiEwfTtcbmZ1bmN0aW9uIEooYSxiLGMpe3ZhciBlLGQ9e30saz1udWxsLGg9bnVsbDtpZihudWxsIT1iKWZvcihlIGluIHZvaWQgMCE9PWIucmVmJiYoaD1iLnJlZiksdm9pZCAwIT09Yi5rZXkmJihrPVwiXCIrYi5rZXkpLGIpSC5jYWxsKGIsZSkmJiFJLmhhc093blByb3BlcnR5KGUpJiYoZFtlXT1iW2VdKTt2YXIgZz1hcmd1bWVudHMubGVuZ3RoLTI7aWYoMT09PWcpZC5jaGlsZHJlbj1jO2Vsc2UgaWYoMTxnKXtmb3IodmFyIGY9QXJyYXkoZyksbT0wO208ZzttKyspZlttXT1hcmd1bWVudHNbbSsyXTtkLmNoaWxkcmVuPWZ9aWYoYSYmYS5kZWZhdWx0UHJvcHMpZm9yKGUgaW4gZz1hLmRlZmF1bHRQcm9wcyxnKXZvaWQgMD09PWRbZV0mJihkW2VdPWdbZV0pO3JldHVybnskJHR5cGVvZjpuLHR5cGU6YSxrZXk6ayxyZWY6aCxwcm9wczpkLF9vd25lcjpHLmN1cnJlbnR9fVxuZnVuY3Rpb24gSyhhLGIpe3JldHVybnskJHR5cGVvZjpuLHR5cGU6YS50eXBlLGtleTpiLHJlZjphLnJlZixwcm9wczphLnByb3BzLF9vd25lcjphLl9vd25lcn19ZnVuY3Rpb24gTChhKXtyZXR1cm5cIm9iamVjdFwiPT09dHlwZW9mIGEmJm51bGwhPT1hJiZhLiQkdHlwZW9mPT09bn1mdW5jdGlvbiBlc2NhcGUoYSl7dmFyIGI9e1wiPVwiOlwiPTBcIixcIjpcIjpcIj0yXCJ9O3JldHVyblwiJFwiK2EucmVwbGFjZSgvWz06XS9nLGZ1bmN0aW9uKGEpe3JldHVybiBiW2FdfSl9dmFyIE09L1xcLysvZztmdW5jdGlvbiBOKGEsYil7cmV0dXJuXCJvYmplY3RcIj09PXR5cGVvZiBhJiZudWxsIT09YSYmbnVsbCE9YS5rZXk/ZXNjYXBlKFwiXCIrYS5rZXkpOmIudG9TdHJpbmcoMzYpfVxuZnVuY3Rpb24gTyhhLGIsYyxlLGQpe3ZhciBrPXR5cGVvZiBhO2lmKFwidW5kZWZpbmVkXCI9PT1rfHxcImJvb2xlYW5cIj09PWspYT1udWxsO3ZhciBoPSExO2lmKG51bGw9PT1hKWg9ITA7ZWxzZSBzd2l0Y2goayl7Y2FzZSBcInN0cmluZ1wiOmNhc2UgXCJudW1iZXJcIjpoPSEwO2JyZWFrO2Nhc2UgXCJvYmplY3RcIjpzd2l0Y2goYS4kJHR5cGVvZil7Y2FzZSBuOmNhc2UgcDpoPSEwfX1pZihoKXJldHVybiBoPWEsZD1kKGgpLGE9XCJcIj09PWU/XCIuXCIrTihoLDApOmUsQXJyYXkuaXNBcnJheShkKT8oYz1cIlwiLG51bGwhPWEmJihjPWEucmVwbGFjZShNLFwiJCYvXCIpK1wiL1wiKSxPKGQsYixjLFwiXCIsZnVuY3Rpb24oYSl7cmV0dXJuIGF9KSk6bnVsbCE9ZCYmKEwoZCkmJihkPUsoZCxjKyghZC5rZXl8fGgmJmgua2V5PT09ZC5rZXk/XCJcIjooXCJcIitkLmtleSkucmVwbGFjZShNLFwiJCYvXCIpK1wiL1wiKSthKSksYi5wdXNoKGQpKSwxO2g9MDtlPVwiXCI9PT1lP1wiLlwiOmUrXCI6XCI7aWYoQXJyYXkuaXNBcnJheShhKSlmb3IodmFyIGc9XG4wO2c8YS5sZW5ndGg7ZysrKXtrPWFbZ107dmFyIGY9ZStOKGssZyk7aCs9TyhrLGIsYyxmLGQpfWVsc2UgaWYoZj15KGEpLFwiZnVuY3Rpb25cIj09PXR5cGVvZiBmKWZvcihhPWYuY2FsbChhKSxnPTA7IShrPWEubmV4dCgpKS5kb25lOylrPWsudmFsdWUsZj1lK04oayxnKyspLGgrPU8oayxiLGMsZixkKTtlbHNlIGlmKFwib2JqZWN0XCI9PT1rKXRocm93IGI9XCJcIithLEVycm9yKHooMzEsXCJbb2JqZWN0IE9iamVjdF1cIj09PWI/XCJvYmplY3Qgd2l0aCBrZXlzIHtcIitPYmplY3Qua2V5cyhhKS5qb2luKFwiLCBcIikrXCJ9XCI6YikpO3JldHVybiBofWZ1bmN0aW9uIFAoYSxiLGMpe2lmKG51bGw9PWEpcmV0dXJuIGE7dmFyIGU9W10sZD0wO08oYSxlLFwiXCIsXCJcIixmdW5jdGlvbihhKXtyZXR1cm4gYi5jYWxsKGMsYSxkKyspfSk7cmV0dXJuIGV9XG5mdW5jdGlvbiBRKGEpe2lmKC0xPT09YS5fc3RhdHVzKXt2YXIgYj1hLl9yZXN1bHQ7Yj1iKCk7YS5fc3RhdHVzPTA7YS5fcmVzdWx0PWI7Yi50aGVuKGZ1bmN0aW9uKGIpezA9PT1hLl9zdGF0dXMmJihiPWIuZGVmYXVsdCxhLl9zdGF0dXM9MSxhLl9yZXN1bHQ9Yil9LGZ1bmN0aW9uKGIpezA9PT1hLl9zdGF0dXMmJihhLl9zdGF0dXM9MixhLl9yZXN1bHQ9Yil9KX1pZigxPT09YS5fc3RhdHVzKXJldHVybiBhLl9yZXN1bHQ7dGhyb3cgYS5fcmVzdWx0O312YXIgUj17Y3VycmVudDpudWxsfTtmdW5jdGlvbiBTKCl7dmFyIGE9Ui5jdXJyZW50O2lmKG51bGw9PT1hKXRocm93IEVycm9yKHooMzIxKSk7cmV0dXJuIGF9dmFyIFQ9e1JlYWN0Q3VycmVudERpc3BhdGNoZXI6UixSZWFjdEN1cnJlbnRCYXRjaENvbmZpZzp7dHJhbnNpdGlvbjowfSxSZWFjdEN1cnJlbnRPd25lcjpHLElzU29tZVJlbmRlcmVyQWN0aW5nOntjdXJyZW50OiExfSxhc3NpZ246bH07XG5leHBvcnRzLkNoaWxkcmVuPXttYXA6UCxmb3JFYWNoOmZ1bmN0aW9uKGEsYixjKXtQKGEsZnVuY3Rpb24oKXtiLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sYyl9LGNvdW50OmZ1bmN0aW9uKGEpe3ZhciBiPTA7UChhLGZ1bmN0aW9uKCl7YisrfSk7cmV0dXJuIGJ9LHRvQXJyYXk6ZnVuY3Rpb24oYSl7cmV0dXJuIFAoYSxmdW5jdGlvbihhKXtyZXR1cm4gYX0pfHxbXX0sb25seTpmdW5jdGlvbihhKXtpZighTChhKSl0aHJvdyBFcnJvcih6KDE0MykpO3JldHVybiBhfX07ZXhwb3J0cy5Db21wb25lbnQ9QztleHBvcnRzLlB1cmVDb21wb25lbnQ9RTtleHBvcnRzLl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEPVQ7XG5leHBvcnRzLmNsb25lRWxlbWVudD1mdW5jdGlvbihhLGIsYyl7aWYobnVsbD09PWF8fHZvaWQgMD09PWEpdGhyb3cgRXJyb3IoeigyNjcsYSkpO3ZhciBlPWwoe30sYS5wcm9wcyksZD1hLmtleSxrPWEucmVmLGg9YS5fb3duZXI7aWYobnVsbCE9Yil7dm9pZCAwIT09Yi5yZWYmJihrPWIucmVmLGg9Ry5jdXJyZW50KTt2b2lkIDAhPT1iLmtleSYmKGQ9XCJcIitiLmtleSk7aWYoYS50eXBlJiZhLnR5cGUuZGVmYXVsdFByb3BzKXZhciBnPWEudHlwZS5kZWZhdWx0UHJvcHM7Zm9yKGYgaW4gYilILmNhbGwoYixmKSYmIUkuaGFzT3duUHJvcGVydHkoZikmJihlW2ZdPXZvaWQgMD09PWJbZl0mJnZvaWQgMCE9PWc/Z1tmXTpiW2ZdKX12YXIgZj1hcmd1bWVudHMubGVuZ3RoLTI7aWYoMT09PWYpZS5jaGlsZHJlbj1jO2Vsc2UgaWYoMTxmKXtnPUFycmF5KGYpO2Zvcih2YXIgbT0wO208ZjttKyspZ1ttXT1hcmd1bWVudHNbbSsyXTtlLmNoaWxkcmVuPWd9cmV0dXJueyQkdHlwZW9mOm4sdHlwZTphLnR5cGUsXG5rZXk6ZCxyZWY6ayxwcm9wczplLF9vd25lcjpofX07ZXhwb3J0cy5jcmVhdGVDb250ZXh0PWZ1bmN0aW9uKGEsYil7dm9pZCAwPT09YiYmKGI9bnVsbCk7YT17JCR0eXBlb2Y6cixfY2FsY3VsYXRlQ2hhbmdlZEJpdHM6YixfY3VycmVudFZhbHVlOmEsX2N1cnJlbnRWYWx1ZTI6YSxfdGhyZWFkQ291bnQ6MCxQcm92aWRlcjpudWxsLENvbnN1bWVyOm51bGx9O2EuUHJvdmlkZXI9eyQkdHlwZW9mOnEsX2NvbnRleHQ6YX07cmV0dXJuIGEuQ29uc3VtZXI9YX07ZXhwb3J0cy5jcmVhdGVFbGVtZW50PUo7ZXhwb3J0cy5jcmVhdGVGYWN0b3J5PWZ1bmN0aW9uKGEpe3ZhciBiPUouYmluZChudWxsLGEpO2IudHlwZT1hO3JldHVybiBifTtleHBvcnRzLmNyZWF0ZVJlZj1mdW5jdGlvbigpe3JldHVybntjdXJyZW50Om51bGx9fTtleHBvcnRzLmZvcndhcmRSZWY9ZnVuY3Rpb24oYSl7cmV0dXJueyQkdHlwZW9mOnQscmVuZGVyOmF9fTtleHBvcnRzLmlzVmFsaWRFbGVtZW50PUw7XG5leHBvcnRzLmxhenk9ZnVuY3Rpb24oYSl7cmV0dXJueyQkdHlwZW9mOnYsX3BheWxvYWQ6e19zdGF0dXM6LTEsX3Jlc3VsdDphfSxfaW5pdDpRfX07ZXhwb3J0cy5tZW1vPWZ1bmN0aW9uKGEsYil7cmV0dXJueyQkdHlwZW9mOnUsdHlwZTphLGNvbXBhcmU6dm9pZCAwPT09Yj9udWxsOmJ9fTtleHBvcnRzLnVzZUNhbGxiYWNrPWZ1bmN0aW9uKGEsYil7cmV0dXJuIFMoKS51c2VDYWxsYmFjayhhLGIpfTtleHBvcnRzLnVzZUNvbnRleHQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gUygpLnVzZUNvbnRleHQoYSxiKX07ZXhwb3J0cy51c2VEZWJ1Z1ZhbHVlPWZ1bmN0aW9uKCl7fTtleHBvcnRzLnVzZUVmZmVjdD1mdW5jdGlvbihhLGIpe3JldHVybiBTKCkudXNlRWZmZWN0KGEsYil9O2V4cG9ydHMudXNlSW1wZXJhdGl2ZUhhbmRsZT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIFMoKS51c2VJbXBlcmF0aXZlSGFuZGxlKGEsYixjKX07XG5leHBvcnRzLnVzZUxheW91dEVmZmVjdD1mdW5jdGlvbihhLGIpe3JldHVybiBTKCkudXNlTGF5b3V0RWZmZWN0KGEsYil9O2V4cG9ydHMudXNlTWVtbz1mdW5jdGlvbihhLGIpe3JldHVybiBTKCkudXNlTWVtbyhhLGIpfTtleHBvcnRzLnVzZVJlZHVjZXI9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBTKCkudXNlUmVkdWNlcihhLGIsYyl9O2V4cG9ydHMudXNlUmVmPWZ1bmN0aW9uKGEpe3JldHVybiBTKCkudXNlUmVmKGEpfTtleHBvcnRzLnVzZVN0YXRlPWZ1bmN0aW9uKGEpe3JldHVybiBTKCkudXNlU3RhdGUoYSl9O2V4cG9ydHMudmVyc2lvbj1cIjE3LjAuMlwiO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwgIi8qKiBAbGljZW5zZSBSZWFjdCB2MC4yMC4yXG4gKiBzY2hlZHVsZXIucHJvZHVjdGlvbi5taW4uanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuJ3VzZSBzdHJpY3QnO3ZhciBmLGcsaCxrO2lmKFwib2JqZWN0XCI9PT10eXBlb2YgcGVyZm9ybWFuY2UmJlwiZnVuY3Rpb25cIj09PXR5cGVvZiBwZXJmb3JtYW5jZS5ub3cpe3ZhciBsPXBlcmZvcm1hbmNlO2V4cG9ydHMudW5zdGFibGVfbm93PWZ1bmN0aW9uKCl7cmV0dXJuIGwubm93KCl9fWVsc2V7dmFyIHA9RGF0ZSxxPXAubm93KCk7ZXhwb3J0cy51bnN0YWJsZV9ub3c9ZnVuY3Rpb24oKXtyZXR1cm4gcC5ub3coKS1xfX1cbmlmKFwidW5kZWZpbmVkXCI9PT10eXBlb2Ygd2luZG93fHxcImZ1bmN0aW9uXCIhPT10eXBlb2YgTWVzc2FnZUNoYW5uZWwpe3ZhciB0PW51bGwsdT1udWxsLHc9ZnVuY3Rpb24oKXtpZihudWxsIT09dCl0cnl7dmFyIGE9ZXhwb3J0cy51bnN0YWJsZV9ub3coKTt0KCEwLGEpO3Q9bnVsbH1jYXRjaChiKXt0aHJvdyBzZXRUaW1lb3V0KHcsMCksYjt9fTtmPWZ1bmN0aW9uKGEpe251bGwhPT10P3NldFRpbWVvdXQoZiwwLGEpOih0PWEsc2V0VGltZW91dCh3LDApKX07Zz1mdW5jdGlvbihhLGIpe3U9c2V0VGltZW91dChhLGIpfTtoPWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHUpfTtleHBvcnRzLnVuc3RhYmxlX3Nob3VsZFlpZWxkPWZ1bmN0aW9uKCl7cmV0dXJuITF9O2s9ZXhwb3J0cy51bnN0YWJsZV9mb3JjZUZyYW1lUmF0ZT1mdW5jdGlvbigpe319ZWxzZXt2YXIgeD13aW5kb3cuc2V0VGltZW91dCx5PXdpbmRvdy5jbGVhclRpbWVvdXQ7aWYoXCJ1bmRlZmluZWRcIiE9PXR5cGVvZiBjb25zb2xlKXt2YXIgej1cbndpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZTtcImZ1bmN0aW9uXCIhPT10eXBlb2Ygd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSYmY29uc29sZS5lcnJvcihcIlRoaXMgYnJvd3NlciBkb2Vzbid0IHN1cHBvcnQgcmVxdWVzdEFuaW1hdGlvbkZyYW1lLiBNYWtlIHN1cmUgdGhhdCB5b3UgbG9hZCBhIHBvbHlmaWxsIGluIG9sZGVyIGJyb3dzZXJzLiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvcmVhY3QtcG9seWZpbGxzXCIpO1wiZnVuY3Rpb25cIiE9PXR5cGVvZiB6JiZjb25zb2xlLmVycm9yKFwiVGhpcyBicm93c2VyIGRvZXNuJ3Qgc3VwcG9ydCBjYW5jZWxBbmltYXRpb25GcmFtZS4gTWFrZSBzdXJlIHRoYXQgeW91IGxvYWQgYSBwb2x5ZmlsbCBpbiBvbGRlciBicm93c2Vycy4gaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3JlYWN0LXBvbHlmaWxsc1wiKX12YXIgQT0hMSxCPW51bGwsQz0tMSxEPTUsRT0wO2V4cG9ydHMudW5zdGFibGVfc2hvdWxkWWllbGQ9ZnVuY3Rpb24oKXtyZXR1cm4gZXhwb3J0cy51bnN0YWJsZV9ub3coKT49XG5FfTtrPWZ1bmN0aW9uKCl7fTtleHBvcnRzLnVuc3RhYmxlX2ZvcmNlRnJhbWVSYXRlPWZ1bmN0aW9uKGEpezA+YXx8MTI1PGE/Y29uc29sZS5lcnJvcihcImZvcmNlRnJhbWVSYXRlIHRha2VzIGEgcG9zaXRpdmUgaW50IGJldHdlZW4gMCBhbmQgMTI1LCBmb3JjaW5nIGZyYW1lIHJhdGVzIGhpZ2hlciB0aGFuIDEyNSBmcHMgaXMgbm90IHN1cHBvcnRlZFwiKTpEPTA8YT9NYXRoLmZsb29yKDFFMy9hKTo1fTt2YXIgRj1uZXcgTWVzc2FnZUNoYW5uZWwsRz1GLnBvcnQyO0YucG9ydDEub25tZXNzYWdlPWZ1bmN0aW9uKCl7aWYobnVsbCE9PUIpe3ZhciBhPWV4cG9ydHMudW5zdGFibGVfbm93KCk7RT1hK0Q7dHJ5e0IoITAsYSk/Ry5wb3N0TWVzc2FnZShudWxsKTooQT0hMSxCPW51bGwpfWNhdGNoKGIpe3Rocm93IEcucG9zdE1lc3NhZ2UobnVsbCksYjt9fWVsc2UgQT0hMX07Zj1mdW5jdGlvbihhKXtCPWE7QXx8KEE9ITAsRy5wb3N0TWVzc2FnZShudWxsKSl9O2c9ZnVuY3Rpb24oYSxiKXtDPVxueChmdW5jdGlvbigpe2EoZXhwb3J0cy51bnN0YWJsZV9ub3coKSl9LGIpfTtoPWZ1bmN0aW9uKCl7eShDKTtDPS0xfX1mdW5jdGlvbiBIKGEsYil7dmFyIGM9YS5sZW5ndGg7YS5wdXNoKGIpO2E6Zm9yKDs7KXt2YXIgZD1jLTE+Pj4xLGU9YVtkXTtpZih2b2lkIDAhPT1lJiYwPEkoZSxiKSlhW2RdPWIsYVtjXT1lLGM9ZDtlbHNlIGJyZWFrIGF9fWZ1bmN0aW9uIEooYSl7YT1hWzBdO3JldHVybiB2b2lkIDA9PT1hP251bGw6YX1cbmZ1bmN0aW9uIEsoYSl7dmFyIGI9YVswXTtpZih2b2lkIDAhPT1iKXt2YXIgYz1hLnBvcCgpO2lmKGMhPT1iKXthWzBdPWM7YTpmb3IodmFyIGQ9MCxlPWEubGVuZ3RoO2Q8ZTspe3ZhciBtPTIqKGQrMSktMSxuPWFbbV0sdj1tKzEscj1hW3ZdO2lmKHZvaWQgMCE9PW4mJjA+SShuLGMpKXZvaWQgMCE9PXImJjA+SShyLG4pPyhhW2RdPXIsYVt2XT1jLGQ9dik6KGFbZF09bixhW21dPWMsZD1tKTtlbHNlIGlmKHZvaWQgMCE9PXImJjA+SShyLGMpKWFbZF09cixhW3ZdPWMsZD12O2Vsc2UgYnJlYWsgYX19cmV0dXJuIGJ9cmV0dXJuIG51bGx9ZnVuY3Rpb24gSShhLGIpe3ZhciBjPWEuc29ydEluZGV4LWIuc29ydEluZGV4O3JldHVybiAwIT09Yz9jOmEuaWQtYi5pZH12YXIgTD1bXSxNPVtdLE49MSxPPW51bGwsUD0zLFE9ITEsUj0hMSxTPSExO1xuZnVuY3Rpb24gVChhKXtmb3IodmFyIGI9SihNKTtudWxsIT09Yjspe2lmKG51bGw9PT1iLmNhbGxiYWNrKUsoTSk7ZWxzZSBpZihiLnN0YXJ0VGltZTw9YSlLKE0pLGIuc29ydEluZGV4PWIuZXhwaXJhdGlvblRpbWUsSChMLGIpO2Vsc2UgYnJlYWs7Yj1KKE0pfX1mdW5jdGlvbiBVKGEpe1M9ITE7VChhKTtpZighUilpZihudWxsIT09SihMKSlSPSEwLGYoVik7ZWxzZXt2YXIgYj1KKE0pO251bGwhPT1iJiZnKFUsYi5zdGFydFRpbWUtYSl9fVxuZnVuY3Rpb24gVihhLGIpe1I9ITE7UyYmKFM9ITEsaCgpKTtRPSEwO3ZhciBjPVA7dHJ5e1QoYik7Zm9yKE89SihMKTtudWxsIT09TyYmKCEoTy5leHBpcmF0aW9uVGltZT5iKXx8YSYmIWV4cG9ydHMudW5zdGFibGVfc2hvdWxkWWllbGQoKSk7KXt2YXIgZD1PLmNhbGxiYWNrO2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBkKXtPLmNhbGxiYWNrPW51bGw7UD1PLnByaW9yaXR5TGV2ZWw7dmFyIGU9ZChPLmV4cGlyYXRpb25UaW1lPD1iKTtiPWV4cG9ydHMudW5zdGFibGVfbm93KCk7XCJmdW5jdGlvblwiPT09dHlwZW9mIGU/Ty5jYWxsYmFjaz1lOk89PT1KKEwpJiZLKEwpO1QoYil9ZWxzZSBLKEwpO089SihMKX1pZihudWxsIT09Tyl2YXIgbT0hMDtlbHNle3ZhciBuPUooTSk7bnVsbCE9PW4mJmcoVSxuLnN0YXJ0VGltZS1iKTttPSExfXJldHVybiBtfWZpbmFsbHl7Tz1udWxsLFA9YyxRPSExfX12YXIgVz1rO2V4cG9ydHMudW5zdGFibGVfSWRsZVByaW9yaXR5PTU7XG5leHBvcnRzLnVuc3RhYmxlX0ltbWVkaWF0ZVByaW9yaXR5PTE7ZXhwb3J0cy51bnN0YWJsZV9Mb3dQcmlvcml0eT00O2V4cG9ydHMudW5zdGFibGVfTm9ybWFsUHJpb3JpdHk9MztleHBvcnRzLnVuc3RhYmxlX1Byb2ZpbGluZz1udWxsO2V4cG9ydHMudW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHk9MjtleHBvcnRzLnVuc3RhYmxlX2NhbmNlbENhbGxiYWNrPWZ1bmN0aW9uKGEpe2EuY2FsbGJhY2s9bnVsbH07ZXhwb3J0cy51bnN0YWJsZV9jb250aW51ZUV4ZWN1dGlvbj1mdW5jdGlvbigpe1J8fFF8fChSPSEwLGYoVikpfTtleHBvcnRzLnVuc3RhYmxlX2dldEN1cnJlbnRQcmlvcml0eUxldmVsPWZ1bmN0aW9uKCl7cmV0dXJuIFB9O2V4cG9ydHMudW5zdGFibGVfZ2V0Rmlyc3RDYWxsYmFja05vZGU9ZnVuY3Rpb24oKXtyZXR1cm4gSihMKX07XG5leHBvcnRzLnVuc3RhYmxlX25leHQ9ZnVuY3Rpb24oYSl7c3dpdGNoKFApe2Nhc2UgMTpjYXNlIDI6Y2FzZSAzOnZhciBiPTM7YnJlYWs7ZGVmYXVsdDpiPVB9dmFyIGM9UDtQPWI7dHJ5e3JldHVybiBhKCl9ZmluYWxseXtQPWN9fTtleHBvcnRzLnVuc3RhYmxlX3BhdXNlRXhlY3V0aW9uPWZ1bmN0aW9uKCl7fTtleHBvcnRzLnVuc3RhYmxlX3JlcXVlc3RQYWludD1XO2V4cG9ydHMudW5zdGFibGVfcnVuV2l0aFByaW9yaXR5PWZ1bmN0aW9uKGEsYil7c3dpdGNoKGEpe2Nhc2UgMTpjYXNlIDI6Y2FzZSAzOmNhc2UgNDpjYXNlIDU6YnJlYWs7ZGVmYXVsdDphPTN9dmFyIGM9UDtQPWE7dHJ5e3JldHVybiBiKCl9ZmluYWxseXtQPWN9fTtcbmV4cG9ydHMudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjaz1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9ZXhwb3J0cy51bnN0YWJsZV9ub3coKTtcIm9iamVjdFwiPT09dHlwZW9mIGMmJm51bGwhPT1jPyhjPWMuZGVsYXksYz1cIm51bWJlclwiPT09dHlwZW9mIGMmJjA8Yz9kK2M6ZCk6Yz1kO3N3aXRjaChhKXtjYXNlIDE6dmFyIGU9LTE7YnJlYWs7Y2FzZSAyOmU9MjUwO2JyZWFrO2Nhc2UgNTplPTEwNzM3NDE4MjM7YnJlYWs7Y2FzZSA0OmU9MUU0O2JyZWFrO2RlZmF1bHQ6ZT01RTN9ZT1jK2U7YT17aWQ6TisrLGNhbGxiYWNrOmIscHJpb3JpdHlMZXZlbDphLHN0YXJ0VGltZTpjLGV4cGlyYXRpb25UaW1lOmUsc29ydEluZGV4Oi0xfTtjPmQ/KGEuc29ydEluZGV4PWMsSChNLGEpLG51bGw9PT1KKEwpJiZhPT09SihNKSYmKFM/aCgpOlM9ITAsZyhVLGMtZCkpKTooYS5zb3J0SW5kZXg9ZSxIKEwsYSksUnx8UXx8KFI9ITAsZihWKSkpO3JldHVybiBhfTtcbmV4cG9ydHMudW5zdGFibGVfd3JhcENhbGxiYWNrPWZ1bmN0aW9uKGEpe3ZhciBiPVA7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGM9UDtQPWI7dHJ5e3JldHVybiBhLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1maW5hbGx5e1A9Y319fTtcbiIsICIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvc2NoZWR1bGVyLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3NjaGVkdWxlci5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwgIi8qKiBAbGljZW5zZSBSZWFjdCB2MTcuMC4yXG4gKiByZWFjdC1kb20ucHJvZHVjdGlvbi5taW4uanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuLypcbiBNb2Rlcm5penIgMy4wLjBwcmUgKEN1c3RvbSBCdWlsZCkgfCBNSVRcbiovXG4ndXNlIHN0cmljdCc7dmFyIGFhPXJlcXVpcmUoXCJyZWFjdFwiKSxtPXJlcXVpcmUoXCJvYmplY3QtYXNzaWduXCIpLHI9cmVxdWlyZShcInNjaGVkdWxlclwiKTtmdW5jdGlvbiB5KGEpe2Zvcih2YXIgYj1cImh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9lcnJvci1kZWNvZGVyLmh0bWw/aW52YXJpYW50PVwiK2EsYz0xO2M8YXJndW1lbnRzLmxlbmd0aDtjKyspYis9XCImYXJnc1tdPVwiK2VuY29kZVVSSUNvbXBvbmVudChhcmd1bWVudHNbY10pO3JldHVyblwiTWluaWZpZWQgUmVhY3QgZXJyb3IgI1wiK2ErXCI7IHZpc2l0IFwiK2IrXCIgZm9yIHRoZSBmdWxsIG1lc3NhZ2Ugb3IgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50IGZvciBmdWxsIGVycm9ycyBhbmQgYWRkaXRpb25hbCBoZWxwZnVsIHdhcm5pbmdzLlwifWlmKCFhYSl0aHJvdyBFcnJvcih5KDIyNykpO3ZhciBiYT1uZXcgU2V0LGNhPXt9O2Z1bmN0aW9uIGRhKGEsYil7ZWEoYSxiKTtlYShhK1wiQ2FwdHVyZVwiLGIpfVxuZnVuY3Rpb24gZWEoYSxiKXtjYVthXT1iO2ZvcihhPTA7YTxiLmxlbmd0aDthKyspYmEuYWRkKGJbYV0pfVxudmFyIGZhPSEoXCJ1bmRlZmluZWRcIj09PXR5cGVvZiB3aW5kb3d8fFwidW5kZWZpbmVkXCI9PT10eXBlb2Ygd2luZG93LmRvY3VtZW50fHxcInVuZGVmaW5lZFwiPT09dHlwZW9mIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KSxoYT0vXls6QS1aX2EtelxcdTAwQzAtXFx1MDBENlxcdTAwRDgtXFx1MDBGNlxcdTAwRjgtXFx1MDJGRlxcdTAzNzAtXFx1MDM3RFxcdTAzN0YtXFx1MUZGRlxcdTIwMEMtXFx1MjAwRFxcdTIwNzAtXFx1MjE4RlxcdTJDMDAtXFx1MkZFRlxcdTMwMDEtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZGRF1bOkEtWl9hLXpcXHUwMEMwLVxcdTAwRDZcXHUwMEQ4LVxcdTAwRjZcXHUwMEY4LVxcdTAyRkZcXHUwMzcwLVxcdTAzN0RcXHUwMzdGLVxcdTFGRkZcXHUyMDBDLVxcdTIwMERcXHUyMDcwLVxcdTIxOEZcXHUyQzAwLVxcdTJGRUZcXHUzMDAxLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRkRcXC0uMC05XFx1MDBCN1xcdTAzMDAtXFx1MDM2RlxcdTIwM0YtXFx1MjA0MF0qJC8saWE9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxcbmphPXt9LGthPXt9O2Z1bmN0aW9uIGxhKGEpe2lmKGlhLmNhbGwoa2EsYSkpcmV0dXJuITA7aWYoaWEuY2FsbChqYSxhKSlyZXR1cm4hMTtpZihoYS50ZXN0KGEpKXJldHVybiBrYVthXT0hMDtqYVthXT0hMDtyZXR1cm4hMX1mdW5jdGlvbiBtYShhLGIsYyxkKXtpZihudWxsIT09YyYmMD09PWMudHlwZSlyZXR1cm4hMTtzd2l0Y2godHlwZW9mIGIpe2Nhc2UgXCJmdW5jdGlvblwiOmNhc2UgXCJzeW1ib2xcIjpyZXR1cm4hMDtjYXNlIFwiYm9vbGVhblwiOmlmKGQpcmV0dXJuITE7aWYobnVsbCE9PWMpcmV0dXJuIWMuYWNjZXB0c0Jvb2xlYW5zO2E9YS50b0xvd2VyQ2FzZSgpLnNsaWNlKDAsNSk7cmV0dXJuXCJkYXRhLVwiIT09YSYmXCJhcmlhLVwiIT09YTtkZWZhdWx0OnJldHVybiExfX1cbmZ1bmN0aW9uIG5hKGEsYixjLGQpe2lmKG51bGw9PT1ifHxcInVuZGVmaW5lZFwiPT09dHlwZW9mIGJ8fG1hKGEsYixjLGQpKXJldHVybiEwO2lmKGQpcmV0dXJuITE7aWYobnVsbCE9PWMpc3dpdGNoKGMudHlwZSl7Y2FzZSAzOnJldHVybiFiO2Nhc2UgNDpyZXR1cm4hMT09PWI7Y2FzZSA1OnJldHVybiBpc05hTihiKTtjYXNlIDY6cmV0dXJuIGlzTmFOKGIpfHwxPmJ9cmV0dXJuITF9ZnVuY3Rpb24gQihhLGIsYyxkLGUsZixnKXt0aGlzLmFjY2VwdHNCb29sZWFucz0yPT09Ynx8Mz09PWJ8fDQ9PT1iO3RoaXMuYXR0cmlidXRlTmFtZT1kO3RoaXMuYXR0cmlidXRlTmFtZXNwYWNlPWU7dGhpcy5tdXN0VXNlUHJvcGVydHk9Yzt0aGlzLnByb3BlcnR5TmFtZT1hO3RoaXMudHlwZT1iO3RoaXMuc2FuaXRpemVVUkw9Zjt0aGlzLnJlbW92ZUVtcHR5U3RyaW5nPWd9dmFyIEQ9e307XG5cImNoaWxkcmVuIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIGRlZmF1bHRWYWx1ZSBkZWZhdWx0Q2hlY2tlZCBpbm5lckhUTUwgc3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nIHN1cHByZXNzSHlkcmF0aW9uV2FybmluZyBzdHlsZVwiLnNwbGl0KFwiIFwiKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe0RbYV09bmV3IEIoYSwwLCExLGEsbnVsbCwhMSwhMSl9KTtbW1wiYWNjZXB0Q2hhcnNldFwiLFwiYWNjZXB0LWNoYXJzZXRcIl0sW1wiY2xhc3NOYW1lXCIsXCJjbGFzc1wiXSxbXCJodG1sRm9yXCIsXCJmb3JcIl0sW1wiaHR0cEVxdWl2XCIsXCJodHRwLWVxdWl2XCJdXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBiPWFbMF07RFtiXT1uZXcgQihiLDEsITEsYVsxXSxudWxsLCExLCExKX0pO1tcImNvbnRlbnRFZGl0YWJsZVwiLFwiZHJhZ2dhYmxlXCIsXCJzcGVsbENoZWNrXCIsXCJ2YWx1ZVwiXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe0RbYV09bmV3IEIoYSwyLCExLGEudG9Mb3dlckNhc2UoKSxudWxsLCExLCExKX0pO1xuW1wiYXV0b1JldmVyc2VcIixcImV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWRcIixcImZvY3VzYWJsZVwiLFwicHJlc2VydmVBbHBoYVwiXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe0RbYV09bmV3IEIoYSwyLCExLGEsbnVsbCwhMSwhMSl9KTtcImFsbG93RnVsbFNjcmVlbiBhc3luYyBhdXRvRm9jdXMgYXV0b1BsYXkgY29udHJvbHMgZGVmYXVsdCBkZWZlciBkaXNhYmxlZCBkaXNhYmxlUGljdHVyZUluUGljdHVyZSBkaXNhYmxlUmVtb3RlUGxheWJhY2sgZm9ybU5vVmFsaWRhdGUgaGlkZGVuIGxvb3Agbm9Nb2R1bGUgbm9WYWxpZGF0ZSBvcGVuIHBsYXlzSW5saW5lIHJlYWRPbmx5IHJlcXVpcmVkIHJldmVyc2VkIHNjb3BlZCBzZWFtbGVzcyBpdGVtU2NvcGVcIi5zcGxpdChcIiBcIikuZm9yRWFjaChmdW5jdGlvbihhKXtEW2FdPW5ldyBCKGEsMywhMSxhLnRvTG93ZXJDYXNlKCksbnVsbCwhMSwhMSl9KTtcbltcImNoZWNrZWRcIixcIm11bHRpcGxlXCIsXCJtdXRlZFwiLFwic2VsZWN0ZWRcIl0uZm9yRWFjaChmdW5jdGlvbihhKXtEW2FdPW5ldyBCKGEsMywhMCxhLG51bGwsITEsITEpfSk7W1wiY2FwdHVyZVwiLFwiZG93bmxvYWRcIl0uZm9yRWFjaChmdW5jdGlvbihhKXtEW2FdPW5ldyBCKGEsNCwhMSxhLG51bGwsITEsITEpfSk7W1wiY29sc1wiLFwicm93c1wiLFwic2l6ZVwiLFwic3BhblwiXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe0RbYV09bmV3IEIoYSw2LCExLGEsbnVsbCwhMSwhMSl9KTtbXCJyb3dTcGFuXCIsXCJzdGFydFwiXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe0RbYV09bmV3IEIoYSw1LCExLGEudG9Mb3dlckNhc2UoKSxudWxsLCExLCExKX0pO3ZhciBvYT0vW1xcLTpdKFthLXpdKS9nO2Z1bmN0aW9uIHBhKGEpe3JldHVybiBhWzFdLnRvVXBwZXJDYXNlKCl9XG5cImFjY2VudC1oZWlnaHQgYWxpZ25tZW50LWJhc2VsaW5lIGFyYWJpYy1mb3JtIGJhc2VsaW5lLXNoaWZ0IGNhcC1oZWlnaHQgY2xpcC1wYXRoIGNsaXAtcnVsZSBjb2xvci1pbnRlcnBvbGF0aW9uIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycyBjb2xvci1wcm9maWxlIGNvbG9yLXJlbmRlcmluZyBkb21pbmFudC1iYXNlbGluZSBlbmFibGUtYmFja2dyb3VuZCBmaWxsLW9wYWNpdHkgZmlsbC1ydWxlIGZsb29kLWNvbG9yIGZsb29kLW9wYWNpdHkgZm9udC1mYW1pbHkgZm9udC1zaXplIGZvbnQtc2l6ZS1hZGp1c3QgZm9udC1zdHJldGNoIGZvbnQtc3R5bGUgZm9udC12YXJpYW50IGZvbnQtd2VpZ2h0IGdseXBoLW5hbWUgZ2x5cGgtb3JpZW50YXRpb24taG9yaXpvbnRhbCBnbHlwaC1vcmllbnRhdGlvbi12ZXJ0aWNhbCBob3Jpei1hZHYteCBob3Jpei1vcmlnaW4teCBpbWFnZS1yZW5kZXJpbmcgbGV0dGVyLXNwYWNpbmcgbGlnaHRpbmctY29sb3IgbWFya2VyLWVuZCBtYXJrZXItbWlkIG1hcmtlci1zdGFydCBvdmVybGluZS1wb3NpdGlvbiBvdmVybGluZS10aGlja25lc3MgcGFpbnQtb3JkZXIgcGFub3NlLTEgcG9pbnRlci1ldmVudHMgcmVuZGVyaW5nLWludGVudCBzaGFwZS1yZW5kZXJpbmcgc3RvcC1jb2xvciBzdG9wLW9wYWNpdHkgc3RyaWtldGhyb3VnaC1wb3NpdGlvbiBzdHJpa2V0aHJvdWdoLXRoaWNrbmVzcyBzdHJva2UtZGFzaGFycmF5IHN0cm9rZS1kYXNob2Zmc2V0IHN0cm9rZS1saW5lY2FwIHN0cm9rZS1saW5lam9pbiBzdHJva2UtbWl0ZXJsaW1pdCBzdHJva2Utb3BhY2l0eSBzdHJva2Utd2lkdGggdGV4dC1hbmNob3IgdGV4dC1kZWNvcmF0aW9uIHRleHQtcmVuZGVyaW5nIHVuZGVybGluZS1wb3NpdGlvbiB1bmRlcmxpbmUtdGhpY2tuZXNzIHVuaWNvZGUtYmlkaSB1bmljb2RlLXJhbmdlIHVuaXRzLXBlci1lbSB2LWFscGhhYmV0aWMgdi1oYW5naW5nIHYtaWRlb2dyYXBoaWMgdi1tYXRoZW1hdGljYWwgdmVjdG9yLWVmZmVjdCB2ZXJ0LWFkdi15IHZlcnQtb3JpZ2luLXggdmVydC1vcmlnaW4teSB3b3JkLXNwYWNpbmcgd3JpdGluZy1tb2RlIHhtbG5zOnhsaW5rIHgtaGVpZ2h0XCIuc3BsaXQoXCIgXCIpLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIGI9YS5yZXBsYWNlKG9hLFxucGEpO0RbYl09bmV3IEIoYiwxLCExLGEsbnVsbCwhMSwhMSl9KTtcInhsaW5rOmFjdHVhdGUgeGxpbms6YXJjcm9sZSB4bGluazpyb2xlIHhsaW5rOnNob3cgeGxpbms6dGl0bGUgeGxpbms6dHlwZVwiLnNwbGl0KFwiIFwiKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBiPWEucmVwbGFjZShvYSxwYSk7RFtiXT1uZXcgQihiLDEsITEsYSxcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIiwhMSwhMSl9KTtbXCJ4bWw6YmFzZVwiLFwieG1sOmxhbmdcIixcInhtbDpzcGFjZVwiXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBiPWEucmVwbGFjZShvYSxwYSk7RFtiXT1uZXcgQihiLDEsITEsYSxcImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZVwiLCExLCExKX0pO1tcInRhYkluZGV4XCIsXCJjcm9zc09yaWdpblwiXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe0RbYV09bmV3IEIoYSwxLCExLGEudG9Mb3dlckNhc2UoKSxudWxsLCExLCExKX0pO1xuRC54bGlua0hyZWY9bmV3IEIoXCJ4bGlua0hyZWZcIiwxLCExLFwieGxpbms6aHJlZlwiLFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLCEwLCExKTtbXCJzcmNcIixcImhyZWZcIixcImFjdGlvblwiLFwiZm9ybUFjdGlvblwiXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe0RbYV09bmV3IEIoYSwxLCExLGEudG9Mb3dlckNhc2UoKSxudWxsLCEwLCEwKX0pO1xuZnVuY3Rpb24gcWEoYSxiLGMsZCl7dmFyIGU9RC5oYXNPd25Qcm9wZXJ0eShiKT9EW2JdOm51bGw7dmFyIGY9bnVsbCE9PWU/MD09PWUudHlwZTpkPyExOiEoMjxiLmxlbmd0aCl8fFwib1wiIT09YlswXSYmXCJPXCIhPT1iWzBdfHxcIm5cIiE9PWJbMV0mJlwiTlwiIT09YlsxXT8hMTohMDtmfHwobmEoYixjLGUsZCkmJihjPW51bGwpLGR8fG51bGw9PT1lP2xhKGIpJiYobnVsbD09PWM/YS5yZW1vdmVBdHRyaWJ1dGUoYik6YS5zZXRBdHRyaWJ1dGUoYixcIlwiK2MpKTplLm11c3RVc2VQcm9wZXJ0eT9hW2UucHJvcGVydHlOYW1lXT1udWxsPT09Yz8zPT09ZS50eXBlPyExOlwiXCI6YzooYj1lLmF0dHJpYnV0ZU5hbWUsZD1lLmF0dHJpYnV0ZU5hbWVzcGFjZSxudWxsPT09Yz9hLnJlbW92ZUF0dHJpYnV0ZShiKTooZT1lLnR5cGUsYz0zPT09ZXx8ND09PWUmJiEwPT09Yz9cIlwiOlwiXCIrYyxkP2Euc2V0QXR0cmlidXRlTlMoZCxiLGMpOmEuc2V0QXR0cmlidXRlKGIsYykpKSl9XG52YXIgcmE9YWEuX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQsc2E9NjAxMDMsdGE9NjAxMDYsdWE9NjAxMDcsd2E9NjAxMDgseGE9NjAxMTQseWE9NjAxMDksemE9NjAxMTAsQWE9NjAxMTIsQmE9NjAxMTMsQ2E9NjAxMjAsRGE9NjAxMTUsRWE9NjAxMTYsRmE9NjAxMjEsR2E9NjAxMjgsSGE9NjAxMjksSWE9NjAxMzAsSmE9NjAxMzE7XG5pZihcImZ1bmN0aW9uXCI9PT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yKXt2YXIgRT1TeW1ib2wuZm9yO3NhPUUoXCJyZWFjdC5lbGVtZW50XCIpO3RhPUUoXCJyZWFjdC5wb3J0YWxcIik7dWE9RShcInJlYWN0LmZyYWdtZW50XCIpO3dhPUUoXCJyZWFjdC5zdHJpY3RfbW9kZVwiKTt4YT1FKFwicmVhY3QucHJvZmlsZXJcIik7eWE9RShcInJlYWN0LnByb3ZpZGVyXCIpO3phPUUoXCJyZWFjdC5jb250ZXh0XCIpO0FhPUUoXCJyZWFjdC5mb3J3YXJkX3JlZlwiKTtCYT1FKFwicmVhY3Quc3VzcGVuc2VcIik7Q2E9RShcInJlYWN0LnN1c3BlbnNlX2xpc3RcIik7RGE9RShcInJlYWN0Lm1lbW9cIik7RWE9RShcInJlYWN0LmxhenlcIik7RmE9RShcInJlYWN0LmJsb2NrXCIpO0UoXCJyZWFjdC5zY29wZVwiKTtHYT1FKFwicmVhY3Qub3BhcXVlLmlkXCIpO0hhPUUoXCJyZWFjdC5kZWJ1Z190cmFjZV9tb2RlXCIpO0lhPUUoXCJyZWFjdC5vZmZzY3JlZW5cIik7SmE9RShcInJlYWN0LmxlZ2FjeV9oaWRkZW5cIil9XG52YXIgS2E9XCJmdW5jdGlvblwiPT09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yO2Z1bmN0aW9uIExhKGEpe2lmKG51bGw9PT1hfHxcIm9iamVjdFwiIT09dHlwZW9mIGEpcmV0dXJuIG51bGw7YT1LYSYmYVtLYV18fGFbXCJAQGl0ZXJhdG9yXCJdO3JldHVyblwiZnVuY3Rpb25cIj09PXR5cGVvZiBhP2E6bnVsbH12YXIgTWE7ZnVuY3Rpb24gTmEoYSl7aWYodm9pZCAwPT09TWEpdHJ5e3Rocm93IEVycm9yKCk7fWNhdGNoKGMpe3ZhciBiPWMuc3RhY2sudHJpbSgpLm1hdGNoKC9cXG4oICooYXQgKT8pLyk7TWE9YiYmYlsxXXx8XCJcIn1yZXR1cm5cIlxcblwiK01hK2F9dmFyIE9hPSExO1xuZnVuY3Rpb24gUGEoYSxiKXtpZighYXx8T2EpcmV0dXJuXCJcIjtPYT0hMDt2YXIgYz1FcnJvci5wcmVwYXJlU3RhY2tUcmFjZTtFcnJvci5wcmVwYXJlU3RhY2tUcmFjZT12b2lkIDA7dHJ5e2lmKGIpaWYoYj1mdW5jdGlvbigpe3Rocm93IEVycm9yKCk7fSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5wcm90b3R5cGUsXCJwcm9wc1wiLHtzZXQ6ZnVuY3Rpb24oKXt0aHJvdyBFcnJvcigpO319KSxcIm9iamVjdFwiPT09dHlwZW9mIFJlZmxlY3QmJlJlZmxlY3QuY29uc3RydWN0KXt0cnl7UmVmbGVjdC5jb25zdHJ1Y3QoYixbXSl9Y2F0Y2goayl7dmFyIGQ9a31SZWZsZWN0LmNvbnN0cnVjdChhLFtdLGIpfWVsc2V7dHJ5e2IuY2FsbCgpfWNhdGNoKGspe2Q9a31hLmNhbGwoYi5wcm90b3R5cGUpfWVsc2V7dHJ5e3Rocm93IEVycm9yKCk7fWNhdGNoKGspe2Q9a31hKCl9fWNhdGNoKGspe2lmKGsmJmQmJlwic3RyaW5nXCI9PT10eXBlb2Ygay5zdGFjayl7Zm9yKHZhciBlPWsuc3RhY2suc3BsaXQoXCJcXG5cIiksXG5mPWQuc3RhY2suc3BsaXQoXCJcXG5cIiksZz1lLmxlbmd0aC0xLGg9Zi5sZW5ndGgtMTsxPD1nJiYwPD1oJiZlW2ddIT09ZltoXTspaC0tO2Zvcig7MTw9ZyYmMDw9aDtnLS0saC0tKWlmKGVbZ10hPT1mW2hdKXtpZigxIT09Z3x8MSE9PWgpe2RvIGlmKGctLSxoLS0sMD5ofHxlW2ddIT09ZltoXSlyZXR1cm5cIlxcblwiK2VbZ10ucmVwbGFjZShcIiBhdCBuZXcgXCIsXCIgYXQgXCIpO3doaWxlKDE8PWcmJjA8PWgpfWJyZWFrfX19ZmluYWxseXtPYT0hMSxFcnJvci5wcmVwYXJlU3RhY2tUcmFjZT1jfXJldHVybihhPWE/YS5kaXNwbGF5TmFtZXx8YS5uYW1lOlwiXCIpP05hKGEpOlwiXCJ9XG5mdW5jdGlvbiBRYShhKXtzd2l0Y2goYS50YWcpe2Nhc2UgNTpyZXR1cm4gTmEoYS50eXBlKTtjYXNlIDE2OnJldHVybiBOYShcIkxhenlcIik7Y2FzZSAxMzpyZXR1cm4gTmEoXCJTdXNwZW5zZVwiKTtjYXNlIDE5OnJldHVybiBOYShcIlN1c3BlbnNlTGlzdFwiKTtjYXNlIDA6Y2FzZSAyOmNhc2UgMTU6cmV0dXJuIGE9UGEoYS50eXBlLCExKSxhO2Nhc2UgMTE6cmV0dXJuIGE9UGEoYS50eXBlLnJlbmRlciwhMSksYTtjYXNlIDIyOnJldHVybiBhPVBhKGEudHlwZS5fcmVuZGVyLCExKSxhO2Nhc2UgMTpyZXR1cm4gYT1QYShhLnR5cGUsITApLGE7ZGVmYXVsdDpyZXR1cm5cIlwifX1cbmZ1bmN0aW9uIFJhKGEpe2lmKG51bGw9PWEpcmV0dXJuIG51bGw7aWYoXCJmdW5jdGlvblwiPT09dHlwZW9mIGEpcmV0dXJuIGEuZGlzcGxheU5hbWV8fGEubmFtZXx8bnVsbDtpZihcInN0cmluZ1wiPT09dHlwZW9mIGEpcmV0dXJuIGE7c3dpdGNoKGEpe2Nhc2UgdWE6cmV0dXJuXCJGcmFnbWVudFwiO2Nhc2UgdGE6cmV0dXJuXCJQb3J0YWxcIjtjYXNlIHhhOnJldHVyblwiUHJvZmlsZXJcIjtjYXNlIHdhOnJldHVyblwiU3RyaWN0TW9kZVwiO2Nhc2UgQmE6cmV0dXJuXCJTdXNwZW5zZVwiO2Nhc2UgQ2E6cmV0dXJuXCJTdXNwZW5zZUxpc3RcIn1pZihcIm9iamVjdFwiPT09dHlwZW9mIGEpc3dpdGNoKGEuJCR0eXBlb2Ype2Nhc2UgemE6cmV0dXJuKGEuZGlzcGxheU5hbWV8fFwiQ29udGV4dFwiKStcIi5Db25zdW1lclwiO2Nhc2UgeWE6cmV0dXJuKGEuX2NvbnRleHQuZGlzcGxheU5hbWV8fFwiQ29udGV4dFwiKStcIi5Qcm92aWRlclwiO2Nhc2UgQWE6dmFyIGI9YS5yZW5kZXI7Yj1iLmRpc3BsYXlOYW1lfHxiLm5hbWV8fFwiXCI7XG5yZXR1cm4gYS5kaXNwbGF5TmFtZXx8KFwiXCIhPT1iP1wiRm9yd2FyZFJlZihcIitiK1wiKVwiOlwiRm9yd2FyZFJlZlwiKTtjYXNlIERhOnJldHVybiBSYShhLnR5cGUpO2Nhc2UgRmE6cmV0dXJuIFJhKGEuX3JlbmRlcik7Y2FzZSBFYTpiPWEuX3BheWxvYWQ7YT1hLl9pbml0O3RyeXtyZXR1cm4gUmEoYShiKSl9Y2F0Y2goYyl7fX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBTYShhKXtzd2l0Y2godHlwZW9mIGEpe2Nhc2UgXCJib29sZWFuXCI6Y2FzZSBcIm51bWJlclwiOmNhc2UgXCJvYmplY3RcIjpjYXNlIFwic3RyaW5nXCI6Y2FzZSBcInVuZGVmaW5lZFwiOnJldHVybiBhO2RlZmF1bHQ6cmV0dXJuXCJcIn19ZnVuY3Rpb24gVGEoYSl7dmFyIGI9YS50eXBlO3JldHVybihhPWEubm9kZU5hbWUpJiZcImlucHV0XCI9PT1hLnRvTG93ZXJDYXNlKCkmJihcImNoZWNrYm94XCI9PT1ifHxcInJhZGlvXCI9PT1iKX1cbmZ1bmN0aW9uIFVhKGEpe3ZhciBiPVRhKGEpP1wiY2hlY2tlZFwiOlwidmFsdWVcIixjPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsYiksZD1cIlwiK2FbYl07aWYoIWEuaGFzT3duUHJvcGVydHkoYikmJlwidW5kZWZpbmVkXCIhPT10eXBlb2YgYyYmXCJmdW5jdGlvblwiPT09dHlwZW9mIGMuZ2V0JiZcImZ1bmN0aW9uXCI9PT10eXBlb2YgYy5zZXQpe3ZhciBlPWMuZ2V0LGY9Yy5zZXQ7T2JqZWN0LmRlZmluZVByb3BlcnR5KGEsYix7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlLmNhbGwodGhpcyl9LHNldDpmdW5jdGlvbihhKXtkPVwiXCIrYTtmLmNhbGwodGhpcyxhKX19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoYSxiLHtlbnVtZXJhYmxlOmMuZW51bWVyYWJsZX0pO3JldHVybntnZXRWYWx1ZTpmdW5jdGlvbigpe3JldHVybiBkfSxzZXRWYWx1ZTpmdW5jdGlvbihhKXtkPVwiXCIrYX0sc3RvcFRyYWNraW5nOmZ1bmN0aW9uKCl7YS5fdmFsdWVUcmFja2VyPVxubnVsbDtkZWxldGUgYVtiXX19fX1mdW5jdGlvbiBWYShhKXthLl92YWx1ZVRyYWNrZXJ8fChhLl92YWx1ZVRyYWNrZXI9VWEoYSkpfWZ1bmN0aW9uIFdhKGEpe2lmKCFhKXJldHVybiExO3ZhciBiPWEuX3ZhbHVlVHJhY2tlcjtpZighYilyZXR1cm4hMDt2YXIgYz1iLmdldFZhbHVlKCk7dmFyIGQ9XCJcIjthJiYoZD1UYShhKT9hLmNoZWNrZWQ/XCJ0cnVlXCI6XCJmYWxzZVwiOmEudmFsdWUpO2E9ZDtyZXR1cm4gYSE9PWM/KGIuc2V0VmFsdWUoYSksITApOiExfWZ1bmN0aW9uIFhhKGEpe2E9YXx8KFwidW5kZWZpbmVkXCIhPT10eXBlb2YgZG9jdW1lbnQ/ZG9jdW1lbnQ6dm9pZCAwKTtpZihcInVuZGVmaW5lZFwiPT09dHlwZW9mIGEpcmV0dXJuIG51bGw7dHJ5e3JldHVybiBhLmFjdGl2ZUVsZW1lbnR8fGEuYm9keX1jYXRjaChiKXtyZXR1cm4gYS5ib2R5fX1cbmZ1bmN0aW9uIFlhKGEsYil7dmFyIGM9Yi5jaGVja2VkO3JldHVybiBtKHt9LGIse2RlZmF1bHRDaGVja2VkOnZvaWQgMCxkZWZhdWx0VmFsdWU6dm9pZCAwLHZhbHVlOnZvaWQgMCxjaGVja2VkOm51bGwhPWM/YzphLl93cmFwcGVyU3RhdGUuaW5pdGlhbENoZWNrZWR9KX1mdW5jdGlvbiBaYShhLGIpe3ZhciBjPW51bGw9PWIuZGVmYXVsdFZhbHVlP1wiXCI6Yi5kZWZhdWx0VmFsdWUsZD1udWxsIT1iLmNoZWNrZWQ/Yi5jaGVja2VkOmIuZGVmYXVsdENoZWNrZWQ7Yz1TYShudWxsIT1iLnZhbHVlP2IudmFsdWU6Yyk7YS5fd3JhcHBlclN0YXRlPXtpbml0aWFsQ2hlY2tlZDpkLGluaXRpYWxWYWx1ZTpjLGNvbnRyb2xsZWQ6XCJjaGVja2JveFwiPT09Yi50eXBlfHxcInJhZGlvXCI9PT1iLnR5cGU/bnVsbCE9Yi5jaGVja2VkOm51bGwhPWIudmFsdWV9fWZ1bmN0aW9uICRhKGEsYil7Yj1iLmNoZWNrZWQ7bnVsbCE9YiYmcWEoYSxcImNoZWNrZWRcIixiLCExKX1cbmZ1bmN0aW9uIGFiKGEsYil7JGEoYSxiKTt2YXIgYz1TYShiLnZhbHVlKSxkPWIudHlwZTtpZihudWxsIT1jKWlmKFwibnVtYmVyXCI9PT1kKXtpZigwPT09YyYmXCJcIj09PWEudmFsdWV8fGEudmFsdWUhPWMpYS52YWx1ZT1cIlwiK2N9ZWxzZSBhLnZhbHVlIT09XCJcIitjJiYoYS52YWx1ZT1cIlwiK2MpO2Vsc2UgaWYoXCJzdWJtaXRcIj09PWR8fFwicmVzZXRcIj09PWQpe2EucmVtb3ZlQXR0cmlidXRlKFwidmFsdWVcIik7cmV0dXJufWIuaGFzT3duUHJvcGVydHkoXCJ2YWx1ZVwiKT9iYihhLGIudHlwZSxjKTpiLmhhc093blByb3BlcnR5KFwiZGVmYXVsdFZhbHVlXCIpJiZiYihhLGIudHlwZSxTYShiLmRlZmF1bHRWYWx1ZSkpO251bGw9PWIuY2hlY2tlZCYmbnVsbCE9Yi5kZWZhdWx0Q2hlY2tlZCYmKGEuZGVmYXVsdENoZWNrZWQ9ISFiLmRlZmF1bHRDaGVja2VkKX1cbmZ1bmN0aW9uIGNiKGEsYixjKXtpZihiLmhhc093blByb3BlcnR5KFwidmFsdWVcIil8fGIuaGFzT3duUHJvcGVydHkoXCJkZWZhdWx0VmFsdWVcIikpe3ZhciBkPWIudHlwZTtpZighKFwic3VibWl0XCIhPT1kJiZcInJlc2V0XCIhPT1kfHx2b2lkIDAhPT1iLnZhbHVlJiZudWxsIT09Yi52YWx1ZSkpcmV0dXJuO2I9XCJcIithLl93cmFwcGVyU3RhdGUuaW5pdGlhbFZhbHVlO2N8fGI9PT1hLnZhbHVlfHwoYS52YWx1ZT1iKTthLmRlZmF1bHRWYWx1ZT1ifWM9YS5uYW1lO1wiXCIhPT1jJiYoYS5uYW1lPVwiXCIpO2EuZGVmYXVsdENoZWNrZWQ9ISFhLl93cmFwcGVyU3RhdGUuaW5pdGlhbENoZWNrZWQ7XCJcIiE9PWMmJihhLm5hbWU9Yyl9XG5mdW5jdGlvbiBiYihhLGIsYyl7aWYoXCJudW1iZXJcIiE9PWJ8fFhhKGEub3duZXJEb2N1bWVudCkhPT1hKW51bGw9PWM/YS5kZWZhdWx0VmFsdWU9XCJcIithLl93cmFwcGVyU3RhdGUuaW5pdGlhbFZhbHVlOmEuZGVmYXVsdFZhbHVlIT09XCJcIitjJiYoYS5kZWZhdWx0VmFsdWU9XCJcIitjKX1mdW5jdGlvbiBkYihhKXt2YXIgYj1cIlwiO2FhLkNoaWxkcmVuLmZvckVhY2goYSxmdW5jdGlvbihhKXtudWxsIT1hJiYoYis9YSl9KTtyZXR1cm4gYn1mdW5jdGlvbiBlYihhLGIpe2E9bSh7Y2hpbGRyZW46dm9pZCAwfSxiKTtpZihiPWRiKGIuY2hpbGRyZW4pKWEuY2hpbGRyZW49YjtyZXR1cm4gYX1cbmZ1bmN0aW9uIGZiKGEsYixjLGQpe2E9YS5vcHRpb25zO2lmKGIpe2I9e307Zm9yKHZhciBlPTA7ZTxjLmxlbmd0aDtlKyspYltcIiRcIitjW2VdXT0hMDtmb3IoYz0wO2M8YS5sZW5ndGg7YysrKWU9Yi5oYXNPd25Qcm9wZXJ0eShcIiRcIithW2NdLnZhbHVlKSxhW2NdLnNlbGVjdGVkIT09ZSYmKGFbY10uc2VsZWN0ZWQ9ZSksZSYmZCYmKGFbY10uZGVmYXVsdFNlbGVjdGVkPSEwKX1lbHNle2M9XCJcIitTYShjKTtiPW51bGw7Zm9yKGU9MDtlPGEubGVuZ3RoO2UrKyl7aWYoYVtlXS52YWx1ZT09PWMpe2FbZV0uc2VsZWN0ZWQ9ITA7ZCYmKGFbZV0uZGVmYXVsdFNlbGVjdGVkPSEwKTtyZXR1cm59bnVsbCE9PWJ8fGFbZV0uZGlzYWJsZWR8fChiPWFbZV0pfW51bGwhPT1iJiYoYi5zZWxlY3RlZD0hMCl9fVxuZnVuY3Rpb24gZ2IoYSxiKXtpZihudWxsIT1iLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MKXRocm93IEVycm9yKHkoOTEpKTtyZXR1cm4gbSh7fSxiLHt2YWx1ZTp2b2lkIDAsZGVmYXVsdFZhbHVlOnZvaWQgMCxjaGlsZHJlbjpcIlwiK2EuX3dyYXBwZXJTdGF0ZS5pbml0aWFsVmFsdWV9KX1mdW5jdGlvbiBoYihhLGIpe3ZhciBjPWIudmFsdWU7aWYobnVsbD09Yyl7Yz1iLmNoaWxkcmVuO2I9Yi5kZWZhdWx0VmFsdWU7aWYobnVsbCE9Yyl7aWYobnVsbCE9Yil0aHJvdyBFcnJvcih5KDkyKSk7aWYoQXJyYXkuaXNBcnJheShjKSl7aWYoISgxPj1jLmxlbmd0aCkpdGhyb3cgRXJyb3IoeSg5MykpO2M9Y1swXX1iPWN9bnVsbD09YiYmKGI9XCJcIik7Yz1ifWEuX3dyYXBwZXJTdGF0ZT17aW5pdGlhbFZhbHVlOlNhKGMpfX1cbmZ1bmN0aW9uIGliKGEsYil7dmFyIGM9U2EoYi52YWx1ZSksZD1TYShiLmRlZmF1bHRWYWx1ZSk7bnVsbCE9YyYmKGM9XCJcIitjLGMhPT1hLnZhbHVlJiYoYS52YWx1ZT1jKSxudWxsPT1iLmRlZmF1bHRWYWx1ZSYmYS5kZWZhdWx0VmFsdWUhPT1jJiYoYS5kZWZhdWx0VmFsdWU9YykpO251bGwhPWQmJihhLmRlZmF1bHRWYWx1ZT1cIlwiK2QpfWZ1bmN0aW9uIGpiKGEpe3ZhciBiPWEudGV4dENvbnRlbnQ7Yj09PWEuX3dyYXBwZXJTdGF0ZS5pbml0aWFsVmFsdWUmJlwiXCIhPT1iJiZudWxsIT09YiYmKGEudmFsdWU9Yil9dmFyIGtiPXtodG1sOlwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiLG1hdGhtbDpcImh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUxcIixzdmc6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifTtcbmZ1bmN0aW9uIGxiKGEpe3N3aXRjaChhKXtjYXNlIFwic3ZnXCI6cmV0dXJuXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiO2Nhc2UgXCJtYXRoXCI6cmV0dXJuXCJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MXCI7ZGVmYXVsdDpyZXR1cm5cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIn19ZnVuY3Rpb24gbWIoYSxiKXtyZXR1cm4gbnVsbD09YXx8XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCI9PT1hP2xiKGIpOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj09PWEmJlwiZm9yZWlnbk9iamVjdFwiPT09Yj9cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIjphfVxudmFyIG5iLG9iPWZ1bmN0aW9uKGEpe3JldHVyblwidW5kZWZpbmVkXCIhPT10eXBlb2YgTVNBcHAmJk1TQXBwLmV4ZWNVbnNhZmVMb2NhbEZ1bmN0aW9uP2Z1bmN0aW9uKGIsYyxkLGUpe01TQXBwLmV4ZWNVbnNhZmVMb2NhbEZ1bmN0aW9uKGZ1bmN0aW9uKCl7cmV0dXJuIGEoYixjLGQsZSl9KX06YX0oZnVuY3Rpb24oYSxiKXtpZihhLm5hbWVzcGFjZVVSSSE9PWtiLnN2Z3x8XCJpbm5lckhUTUxcImluIGEpYS5pbm5lckhUTUw9YjtlbHNle25iPW5ifHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO25iLmlubmVySFRNTD1cIjxzdmc+XCIrYi52YWx1ZU9mKCkudG9TdHJpbmcoKStcIjwvc3ZnPlwiO2ZvcihiPW5iLmZpcnN0Q2hpbGQ7YS5maXJzdENoaWxkOylhLnJlbW92ZUNoaWxkKGEuZmlyc3RDaGlsZCk7Zm9yKDtiLmZpcnN0Q2hpbGQ7KWEuYXBwZW5kQ2hpbGQoYi5maXJzdENoaWxkKX19KTtcbmZ1bmN0aW9uIHBiKGEsYil7aWYoYil7dmFyIGM9YS5maXJzdENoaWxkO2lmKGMmJmM9PT1hLmxhc3RDaGlsZCYmMz09PWMubm9kZVR5cGUpe2Mubm9kZVZhbHVlPWI7cmV0dXJufX1hLnRleHRDb250ZW50PWJ9XG52YXIgcWI9e2FuaW1hdGlvbkl0ZXJhdGlvbkNvdW50OiEwLGJvcmRlckltYWdlT3V0c2V0OiEwLGJvcmRlckltYWdlU2xpY2U6ITAsYm9yZGVySW1hZ2VXaWR0aDohMCxib3hGbGV4OiEwLGJveEZsZXhHcm91cDohMCxib3hPcmRpbmFsR3JvdXA6ITAsY29sdW1uQ291bnQ6ITAsY29sdW1uczohMCxmbGV4OiEwLGZsZXhHcm93OiEwLGZsZXhQb3NpdGl2ZTohMCxmbGV4U2hyaW5rOiEwLGZsZXhOZWdhdGl2ZTohMCxmbGV4T3JkZXI6ITAsZ3JpZEFyZWE6ITAsZ3JpZFJvdzohMCxncmlkUm93RW5kOiEwLGdyaWRSb3dTcGFuOiEwLGdyaWRSb3dTdGFydDohMCxncmlkQ29sdW1uOiEwLGdyaWRDb2x1bW5FbmQ6ITAsZ3JpZENvbHVtblNwYW46ITAsZ3JpZENvbHVtblN0YXJ0OiEwLGZvbnRXZWlnaHQ6ITAsbGluZUNsYW1wOiEwLGxpbmVIZWlnaHQ6ITAsb3BhY2l0eTohMCxvcmRlcjohMCxvcnBoYW5zOiEwLHRhYlNpemU6ITAsd2lkb3dzOiEwLHpJbmRleDohMCx6b29tOiEwLGZpbGxPcGFjaXR5OiEwLFxuZmxvb2RPcGFjaXR5OiEwLHN0b3BPcGFjaXR5OiEwLHN0cm9rZURhc2hhcnJheTohMCxzdHJva2VEYXNob2Zmc2V0OiEwLHN0cm9rZU1pdGVybGltaXQ6ITAsc3Ryb2tlT3BhY2l0eTohMCxzdHJva2VXaWR0aDohMH0scmI9W1wiV2Via2l0XCIsXCJtc1wiLFwiTW96XCIsXCJPXCJdO09iamVjdC5rZXlzKHFiKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3JiLmZvckVhY2goZnVuY3Rpb24oYil7Yj1iK2EuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrYS5zdWJzdHJpbmcoMSk7cWJbYl09cWJbYV19KX0pO2Z1bmN0aW9uIHNiKGEsYixjKXtyZXR1cm4gbnVsbD09Ynx8XCJib29sZWFuXCI9PT10eXBlb2YgYnx8XCJcIj09PWI/XCJcIjpjfHxcIm51bWJlclwiIT09dHlwZW9mIGJ8fDA9PT1ifHxxYi5oYXNPd25Qcm9wZXJ0eShhKSYmcWJbYV0/KFwiXCIrYikudHJpbSgpOmIrXCJweFwifVxuZnVuY3Rpb24gdGIoYSxiKXthPWEuc3R5bGU7Zm9yKHZhciBjIGluIGIpaWYoYi5oYXNPd25Qcm9wZXJ0eShjKSl7dmFyIGQ9MD09PWMuaW5kZXhPZihcIi0tXCIpLGU9c2IoYyxiW2NdLGQpO1wiZmxvYXRcIj09PWMmJihjPVwiY3NzRmxvYXRcIik7ZD9hLnNldFByb3BlcnR5KGMsZSk6YVtjXT1lfX12YXIgdWI9bSh7bWVudWl0ZW06ITB9LHthcmVhOiEwLGJhc2U6ITAsYnI6ITAsY29sOiEwLGVtYmVkOiEwLGhyOiEwLGltZzohMCxpbnB1dDohMCxrZXlnZW46ITAsbGluazohMCxtZXRhOiEwLHBhcmFtOiEwLHNvdXJjZTohMCx0cmFjazohMCx3YnI6ITB9KTtcbmZ1bmN0aW9uIHZiKGEsYil7aWYoYil7aWYodWJbYV0mJihudWxsIT1iLmNoaWxkcmVufHxudWxsIT1iLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MKSl0aHJvdyBFcnJvcih5KDEzNyxhKSk7aWYobnVsbCE9Yi5kYW5nZXJvdXNseVNldElubmVySFRNTCl7aWYobnVsbCE9Yi5jaGlsZHJlbil0aHJvdyBFcnJvcih5KDYwKSk7aWYoIShcIm9iamVjdFwiPT09dHlwZW9mIGIuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwmJlwiX19odG1sXCJpbiBiLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MKSl0aHJvdyBFcnJvcih5KDYxKSk7fWlmKG51bGwhPWIuc3R5bGUmJlwib2JqZWN0XCIhPT10eXBlb2YgYi5zdHlsZSl0aHJvdyBFcnJvcih5KDYyKSk7fX1cbmZ1bmN0aW9uIHdiKGEsYil7aWYoLTE9PT1hLmluZGV4T2YoXCItXCIpKXJldHVyblwic3RyaW5nXCI9PT10eXBlb2YgYi5pcztzd2l0Y2goYSl7Y2FzZSBcImFubm90YXRpb24teG1sXCI6Y2FzZSBcImNvbG9yLXByb2ZpbGVcIjpjYXNlIFwiZm9udC1mYWNlXCI6Y2FzZSBcImZvbnQtZmFjZS1zcmNcIjpjYXNlIFwiZm9udC1mYWNlLXVyaVwiOmNhc2UgXCJmb250LWZhY2UtZm9ybWF0XCI6Y2FzZSBcImZvbnQtZmFjZS1uYW1lXCI6Y2FzZSBcIm1pc3NpbmctZ2x5cGhcIjpyZXR1cm4hMTtkZWZhdWx0OnJldHVybiEwfX1mdW5jdGlvbiB4YihhKXthPWEudGFyZ2V0fHxhLnNyY0VsZW1lbnR8fHdpbmRvdzthLmNvcnJlc3BvbmRpbmdVc2VFbGVtZW50JiYoYT1hLmNvcnJlc3BvbmRpbmdVc2VFbGVtZW50KTtyZXR1cm4gMz09PWEubm9kZVR5cGU/YS5wYXJlbnROb2RlOmF9dmFyIHliPW51bGwsemI9bnVsbCxBYj1udWxsO1xuZnVuY3Rpb24gQmIoYSl7aWYoYT1DYihhKSl7aWYoXCJmdW5jdGlvblwiIT09dHlwZW9mIHliKXRocm93IEVycm9yKHkoMjgwKSk7dmFyIGI9YS5zdGF0ZU5vZGU7YiYmKGI9RGIoYikseWIoYS5zdGF0ZU5vZGUsYS50eXBlLGIpKX19ZnVuY3Rpb24gRWIoYSl7emI/QWI/QWIucHVzaChhKTpBYj1bYV06emI9YX1mdW5jdGlvbiBGYigpe2lmKHpiKXt2YXIgYT16YixiPUFiO0FiPXpiPW51bGw7QmIoYSk7aWYoYilmb3IoYT0wO2E8Yi5sZW5ndGg7YSsrKUJiKGJbYV0pfX1mdW5jdGlvbiBHYihhLGIpe3JldHVybiBhKGIpfWZ1bmN0aW9uIEhiKGEsYixjLGQsZSl7cmV0dXJuIGEoYixjLGQsZSl9ZnVuY3Rpb24gSWIoKXt9dmFyIEpiPUdiLEtiPSExLExiPSExO2Z1bmN0aW9uIE1iKCl7aWYobnVsbCE9PXpifHxudWxsIT09QWIpSWIoKSxGYigpfVxuZnVuY3Rpb24gTmIoYSxiLGMpe2lmKExiKXJldHVybiBhKGIsYyk7TGI9ITA7dHJ5e3JldHVybiBKYihhLGIsYyl9ZmluYWxseXtMYj0hMSxNYigpfX1cbmZ1bmN0aW9uIE9iKGEsYil7dmFyIGM9YS5zdGF0ZU5vZGU7aWYobnVsbD09PWMpcmV0dXJuIG51bGw7dmFyIGQ9RGIoYyk7aWYobnVsbD09PWQpcmV0dXJuIG51bGw7Yz1kW2JdO2E6c3dpdGNoKGIpe2Nhc2UgXCJvbkNsaWNrXCI6Y2FzZSBcIm9uQ2xpY2tDYXB0dXJlXCI6Y2FzZSBcIm9uRG91YmxlQ2xpY2tcIjpjYXNlIFwib25Eb3VibGVDbGlja0NhcHR1cmVcIjpjYXNlIFwib25Nb3VzZURvd25cIjpjYXNlIFwib25Nb3VzZURvd25DYXB0dXJlXCI6Y2FzZSBcIm9uTW91c2VNb3ZlXCI6Y2FzZSBcIm9uTW91c2VNb3ZlQ2FwdHVyZVwiOmNhc2UgXCJvbk1vdXNlVXBcIjpjYXNlIFwib25Nb3VzZVVwQ2FwdHVyZVwiOmNhc2UgXCJvbk1vdXNlRW50ZXJcIjooZD0hZC5kaXNhYmxlZCl8fChhPWEudHlwZSxkPSEoXCJidXR0b25cIj09PWF8fFwiaW5wdXRcIj09PWF8fFwic2VsZWN0XCI9PT1hfHxcInRleHRhcmVhXCI9PT1hKSk7YT0hZDticmVhayBhO2RlZmF1bHQ6YT0hMX1pZihhKXJldHVybiBudWxsO2lmKGMmJlwiZnVuY3Rpb25cIiE9PVxudHlwZW9mIGMpdGhyb3cgRXJyb3IoeSgyMzEsYix0eXBlb2YgYykpO3JldHVybiBjfXZhciBQYj0hMTtpZihmYSl0cnl7dmFyIFFiPXt9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShRYixcInBhc3NpdmVcIix7Z2V0OmZ1bmN0aW9uKCl7UGI9ITB9fSk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJ0ZXN0XCIsUWIsUWIpO3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwidGVzdFwiLFFiLFFiKX1jYXRjaChhKXtQYj0hMX1mdW5jdGlvbiBSYihhLGIsYyxkLGUsZixnLGgsayl7dmFyIGw9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDMpO3RyeXtiLmFwcGx5KGMsbCl9Y2F0Y2gobil7dGhpcy5vbkVycm9yKG4pfX12YXIgU2I9ITEsVGI9bnVsbCxVYj0hMSxWYj1udWxsLFdiPXtvbkVycm9yOmZ1bmN0aW9uKGEpe1NiPSEwO1RiPWF9fTtmdW5jdGlvbiBYYihhLGIsYyxkLGUsZixnLGgsayl7U2I9ITE7VGI9bnVsbDtSYi5hcHBseShXYixhcmd1bWVudHMpfVxuZnVuY3Rpb24gWWIoYSxiLGMsZCxlLGYsZyxoLGspe1hiLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtpZihTYil7aWYoU2Ipe3ZhciBsPVRiO1NiPSExO1RiPW51bGx9ZWxzZSB0aHJvdyBFcnJvcih5KDE5OCkpO1VifHwoVWI9ITAsVmI9bCl9fWZ1bmN0aW9uIFpiKGEpe3ZhciBiPWEsYz1hO2lmKGEuYWx0ZXJuYXRlKWZvcig7Yi5yZXR1cm47KWI9Yi5yZXR1cm47ZWxzZXthPWI7ZG8gYj1hLDAhPT0oYi5mbGFncyYxMDI2KSYmKGM9Yi5yZXR1cm4pLGE9Yi5yZXR1cm47d2hpbGUoYSl9cmV0dXJuIDM9PT1iLnRhZz9jOm51bGx9ZnVuY3Rpb24gJGIoYSl7aWYoMTM9PT1hLnRhZyl7dmFyIGI9YS5tZW1vaXplZFN0YXRlO251bGw9PT1iJiYoYT1hLmFsdGVybmF0ZSxudWxsIT09YSYmKGI9YS5tZW1vaXplZFN0YXRlKSk7aWYobnVsbCE9PWIpcmV0dXJuIGIuZGVoeWRyYXRlZH1yZXR1cm4gbnVsbH1mdW5jdGlvbiBhYyhhKXtpZihaYihhKSE9PWEpdGhyb3cgRXJyb3IoeSgxODgpKTt9XG5mdW5jdGlvbiBiYyhhKXt2YXIgYj1hLmFsdGVybmF0ZTtpZighYil7Yj1aYihhKTtpZihudWxsPT09Yil0aHJvdyBFcnJvcih5KDE4OCkpO3JldHVybiBiIT09YT9udWxsOmF9Zm9yKHZhciBjPWEsZD1iOzspe3ZhciBlPWMucmV0dXJuO2lmKG51bGw9PT1lKWJyZWFrO3ZhciBmPWUuYWx0ZXJuYXRlO2lmKG51bGw9PT1mKXtkPWUucmV0dXJuO2lmKG51bGwhPT1kKXtjPWQ7Y29udGludWV9YnJlYWt9aWYoZS5jaGlsZD09PWYuY2hpbGQpe2ZvcihmPWUuY2hpbGQ7Zjspe2lmKGY9PT1jKXJldHVybiBhYyhlKSxhO2lmKGY9PT1kKXJldHVybiBhYyhlKSxiO2Y9Zi5zaWJsaW5nfXRocm93IEVycm9yKHkoMTg4KSk7fWlmKGMucmV0dXJuIT09ZC5yZXR1cm4pYz1lLGQ9ZjtlbHNle2Zvcih2YXIgZz0hMSxoPWUuY2hpbGQ7aDspe2lmKGg9PT1jKXtnPSEwO2M9ZTtkPWY7YnJlYWt9aWYoaD09PWQpe2c9ITA7ZD1lO2M9ZjticmVha31oPWguc2libGluZ31pZighZyl7Zm9yKGg9Zi5jaGlsZDtoOyl7aWYoaD09PVxuYyl7Zz0hMDtjPWY7ZD1lO2JyZWFrfWlmKGg9PT1kKXtnPSEwO2Q9ZjtjPWU7YnJlYWt9aD1oLnNpYmxpbmd9aWYoIWcpdGhyb3cgRXJyb3IoeSgxODkpKTt9fWlmKGMuYWx0ZXJuYXRlIT09ZCl0aHJvdyBFcnJvcih5KDE5MCkpO31pZigzIT09Yy50YWcpdGhyb3cgRXJyb3IoeSgxODgpKTtyZXR1cm4gYy5zdGF0ZU5vZGUuY3VycmVudD09PWM/YTpifWZ1bmN0aW9uIGNjKGEpe2E9YmMoYSk7aWYoIWEpcmV0dXJuIG51bGw7Zm9yKHZhciBiPWE7Oyl7aWYoNT09PWIudGFnfHw2PT09Yi50YWcpcmV0dXJuIGI7aWYoYi5jaGlsZCliLmNoaWxkLnJldHVybj1iLGI9Yi5jaGlsZDtlbHNle2lmKGI9PT1hKWJyZWFrO2Zvcig7IWIuc2libGluZzspe2lmKCFiLnJldHVybnx8Yi5yZXR1cm49PT1hKXJldHVybiBudWxsO2I9Yi5yZXR1cm59Yi5zaWJsaW5nLnJldHVybj1iLnJldHVybjtiPWIuc2libGluZ319cmV0dXJuIG51bGx9XG5mdW5jdGlvbiBkYyhhLGIpe2Zvcih2YXIgYz1hLmFsdGVybmF0ZTtudWxsIT09Yjspe2lmKGI9PT1hfHxiPT09YylyZXR1cm4hMDtiPWIucmV0dXJufXJldHVybiExfXZhciBlYyxmYyxnYyxoYyxpYz0hMSxqYz1bXSxrYz1udWxsLGxjPW51bGwsbWM9bnVsbCxuYz1uZXcgTWFwLG9jPW5ldyBNYXAscGM9W10scWM9XCJtb3VzZWRvd24gbW91c2V1cCB0b3VjaGNhbmNlbCB0b3VjaGVuZCB0b3VjaHN0YXJ0IGF1eGNsaWNrIGRibGNsaWNrIHBvaW50ZXJjYW5jZWwgcG9pbnRlcmRvd24gcG9pbnRlcnVwIGRyYWdlbmQgZHJhZ3N0YXJ0IGRyb3AgY29tcG9zaXRpb25lbmQgY29tcG9zaXRpb25zdGFydCBrZXlkb3duIGtleXByZXNzIGtleXVwIGlucHV0IHRleHRJbnB1dCBjb3B5IGN1dCBwYXN0ZSBjbGljayBjaGFuZ2UgY29udGV4dG1lbnUgcmVzZXQgc3VibWl0XCIuc3BsaXQoXCIgXCIpO1xuZnVuY3Rpb24gcmMoYSxiLGMsZCxlKXtyZXR1cm57YmxvY2tlZE9uOmEsZG9tRXZlbnROYW1lOmIsZXZlbnRTeXN0ZW1GbGFnczpjfDE2LG5hdGl2ZUV2ZW50OmUsdGFyZ2V0Q29udGFpbmVyczpbZF19fWZ1bmN0aW9uIHNjKGEsYil7c3dpdGNoKGEpe2Nhc2UgXCJmb2N1c2luXCI6Y2FzZSBcImZvY3Vzb3V0XCI6a2M9bnVsbDticmVhaztjYXNlIFwiZHJhZ2VudGVyXCI6Y2FzZSBcImRyYWdsZWF2ZVwiOmxjPW51bGw7YnJlYWs7Y2FzZSBcIm1vdXNlb3ZlclwiOmNhc2UgXCJtb3VzZW91dFwiOm1jPW51bGw7YnJlYWs7Y2FzZSBcInBvaW50ZXJvdmVyXCI6Y2FzZSBcInBvaW50ZXJvdXRcIjpuYy5kZWxldGUoYi5wb2ludGVySWQpO2JyZWFrO2Nhc2UgXCJnb3Rwb2ludGVyY2FwdHVyZVwiOmNhc2UgXCJsb3N0cG9pbnRlcmNhcHR1cmVcIjpvYy5kZWxldGUoYi5wb2ludGVySWQpfX1cbmZ1bmN0aW9uIHRjKGEsYixjLGQsZSxmKXtpZihudWxsPT09YXx8YS5uYXRpdmVFdmVudCE9PWYpcmV0dXJuIGE9cmMoYixjLGQsZSxmKSxudWxsIT09YiYmKGI9Q2IoYiksbnVsbCE9PWImJmZjKGIpKSxhO2EuZXZlbnRTeXN0ZW1GbGFnc3w9ZDtiPWEudGFyZ2V0Q29udGFpbmVycztudWxsIT09ZSYmLTE9PT1iLmluZGV4T2YoZSkmJmIucHVzaChlKTtyZXR1cm4gYX1cbmZ1bmN0aW9uIHVjKGEsYixjLGQsZSl7c3dpdGNoKGIpe2Nhc2UgXCJmb2N1c2luXCI6cmV0dXJuIGtjPXRjKGtjLGEsYixjLGQsZSksITA7Y2FzZSBcImRyYWdlbnRlclwiOnJldHVybiBsYz10YyhsYyxhLGIsYyxkLGUpLCEwO2Nhc2UgXCJtb3VzZW92ZXJcIjpyZXR1cm4gbWM9dGMobWMsYSxiLGMsZCxlKSwhMDtjYXNlIFwicG9pbnRlcm92ZXJcIjp2YXIgZj1lLnBvaW50ZXJJZDtuYy5zZXQoZix0YyhuYy5nZXQoZil8fG51bGwsYSxiLGMsZCxlKSk7cmV0dXJuITA7Y2FzZSBcImdvdHBvaW50ZXJjYXB0dXJlXCI6cmV0dXJuIGY9ZS5wb2ludGVySWQsb2Muc2V0KGYsdGMob2MuZ2V0KGYpfHxudWxsLGEsYixjLGQsZSkpLCEwfXJldHVybiExfVxuZnVuY3Rpb24gdmMoYSl7dmFyIGI9d2MoYS50YXJnZXQpO2lmKG51bGwhPT1iKXt2YXIgYz1aYihiKTtpZihudWxsIT09YylpZihiPWMudGFnLDEzPT09Yil7aWYoYj0kYihjKSxudWxsIT09Yil7YS5ibG9ja2VkT249YjtoYyhhLmxhbmVQcmlvcml0eSxmdW5jdGlvbigpe3IudW5zdGFibGVfcnVuV2l0aFByaW9yaXR5KGEucHJpb3JpdHksZnVuY3Rpb24oKXtnYyhjKX0pfSk7cmV0dXJufX1lbHNlIGlmKDM9PT1iJiZjLnN0YXRlTm9kZS5oeWRyYXRlKXthLmJsb2NrZWRPbj0zPT09Yy50YWc/Yy5zdGF0ZU5vZGUuY29udGFpbmVySW5mbzpudWxsO3JldHVybn19YS5ibG9ja2VkT249bnVsbH1cbmZ1bmN0aW9uIHhjKGEpe2lmKG51bGwhPT1hLmJsb2NrZWRPbilyZXR1cm4hMTtmb3IodmFyIGI9YS50YXJnZXRDb250YWluZXJzOzA8Yi5sZW5ndGg7KXt2YXIgYz15YyhhLmRvbUV2ZW50TmFtZSxhLmV2ZW50U3lzdGVtRmxhZ3MsYlswXSxhLm5hdGl2ZUV2ZW50KTtpZihudWxsIT09YylyZXR1cm4gYj1DYihjKSxudWxsIT09YiYmZmMoYiksYS5ibG9ja2VkT249YywhMTtiLnNoaWZ0KCl9cmV0dXJuITB9ZnVuY3Rpb24gemMoYSxiLGMpe3hjKGEpJiZjLmRlbGV0ZShiKX1cbmZ1bmN0aW9uIEFjKCl7Zm9yKGljPSExOzA8amMubGVuZ3RoOyl7dmFyIGE9amNbMF07aWYobnVsbCE9PWEuYmxvY2tlZE9uKXthPUNiKGEuYmxvY2tlZE9uKTtudWxsIT09YSYmZWMoYSk7YnJlYWt9Zm9yKHZhciBiPWEudGFyZ2V0Q29udGFpbmVyczswPGIubGVuZ3RoOyl7dmFyIGM9eWMoYS5kb21FdmVudE5hbWUsYS5ldmVudFN5c3RlbUZsYWdzLGJbMF0sYS5uYXRpdmVFdmVudCk7aWYobnVsbCE9PWMpe2EuYmxvY2tlZE9uPWM7YnJlYWt9Yi5zaGlmdCgpfW51bGw9PT1hLmJsb2NrZWRPbiYmamMuc2hpZnQoKX1udWxsIT09a2MmJnhjKGtjKSYmKGtjPW51bGwpO251bGwhPT1sYyYmeGMobGMpJiYobGM9bnVsbCk7bnVsbCE9PW1jJiZ4YyhtYykmJihtYz1udWxsKTtuYy5mb3JFYWNoKHpjKTtvYy5mb3JFYWNoKHpjKX1cbmZ1bmN0aW9uIEJjKGEsYil7YS5ibG9ja2VkT249PT1iJiYoYS5ibG9ja2VkT249bnVsbCxpY3x8KGljPSEwLHIudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayhyLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5LEFjKSkpfVxuZnVuY3Rpb24gQ2MoYSl7ZnVuY3Rpb24gYihiKXtyZXR1cm4gQmMoYixhKX1pZigwPGpjLmxlbmd0aCl7QmMoamNbMF0sYSk7Zm9yKHZhciBjPTE7YzxqYy5sZW5ndGg7YysrKXt2YXIgZD1qY1tjXTtkLmJsb2NrZWRPbj09PWEmJihkLmJsb2NrZWRPbj1udWxsKX19bnVsbCE9PWtjJiZCYyhrYyxhKTtudWxsIT09bGMmJkJjKGxjLGEpO251bGwhPT1tYyYmQmMobWMsYSk7bmMuZm9yRWFjaChiKTtvYy5mb3JFYWNoKGIpO2ZvcihjPTA7YzxwYy5sZW5ndGg7YysrKWQ9cGNbY10sZC5ibG9ja2VkT249PT1hJiYoZC5ibG9ja2VkT249bnVsbCk7Zm9yKDswPHBjLmxlbmd0aCYmKGM9cGNbMF0sbnVsbD09PWMuYmxvY2tlZE9uKTspdmMoYyksbnVsbD09PWMuYmxvY2tlZE9uJiZwYy5zaGlmdCgpfVxuZnVuY3Rpb24gRGMoYSxiKXt2YXIgYz17fTtjW2EudG9Mb3dlckNhc2UoKV09Yi50b0xvd2VyQ2FzZSgpO2NbXCJXZWJraXRcIithXT1cIndlYmtpdFwiK2I7Y1tcIk1velwiK2FdPVwibW96XCIrYjtyZXR1cm4gY312YXIgRWM9e2FuaW1hdGlvbmVuZDpEYyhcIkFuaW1hdGlvblwiLFwiQW5pbWF0aW9uRW5kXCIpLGFuaW1hdGlvbml0ZXJhdGlvbjpEYyhcIkFuaW1hdGlvblwiLFwiQW5pbWF0aW9uSXRlcmF0aW9uXCIpLGFuaW1hdGlvbnN0YXJ0OkRjKFwiQW5pbWF0aW9uXCIsXCJBbmltYXRpb25TdGFydFwiKSx0cmFuc2l0aW9uZW5kOkRjKFwiVHJhbnNpdGlvblwiLFwiVHJhbnNpdGlvbkVuZFwiKX0sRmM9e30sR2M9e307XG5mYSYmKEdjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikuc3R5bGUsXCJBbmltYXRpb25FdmVudFwiaW4gd2luZG93fHwoZGVsZXRlIEVjLmFuaW1hdGlvbmVuZC5hbmltYXRpb24sZGVsZXRlIEVjLmFuaW1hdGlvbml0ZXJhdGlvbi5hbmltYXRpb24sZGVsZXRlIEVjLmFuaW1hdGlvbnN0YXJ0LmFuaW1hdGlvbiksXCJUcmFuc2l0aW9uRXZlbnRcImluIHdpbmRvd3x8ZGVsZXRlIEVjLnRyYW5zaXRpb25lbmQudHJhbnNpdGlvbik7ZnVuY3Rpb24gSGMoYSl7aWYoRmNbYV0pcmV0dXJuIEZjW2FdO2lmKCFFY1thXSlyZXR1cm4gYTt2YXIgYj1FY1thXSxjO2ZvcihjIGluIGIpaWYoYi5oYXNPd25Qcm9wZXJ0eShjKSYmYyBpbiBHYylyZXR1cm4gRmNbYV09YltjXTtyZXR1cm4gYX1cbnZhciBJYz1IYyhcImFuaW1hdGlvbmVuZFwiKSxKYz1IYyhcImFuaW1hdGlvbml0ZXJhdGlvblwiKSxLYz1IYyhcImFuaW1hdGlvbnN0YXJ0XCIpLExjPUhjKFwidHJhbnNpdGlvbmVuZFwiKSxNYz1uZXcgTWFwLE5jPW5ldyBNYXAsT2M9W1wiYWJvcnRcIixcImFib3J0XCIsSWMsXCJhbmltYXRpb25FbmRcIixKYyxcImFuaW1hdGlvbkl0ZXJhdGlvblwiLEtjLFwiYW5pbWF0aW9uU3RhcnRcIixcImNhbnBsYXlcIixcImNhblBsYXlcIixcImNhbnBsYXl0aHJvdWdoXCIsXCJjYW5QbGF5VGhyb3VnaFwiLFwiZHVyYXRpb25jaGFuZ2VcIixcImR1cmF0aW9uQ2hhbmdlXCIsXCJlbXB0aWVkXCIsXCJlbXB0aWVkXCIsXCJlbmNyeXB0ZWRcIixcImVuY3J5cHRlZFwiLFwiZW5kZWRcIixcImVuZGVkXCIsXCJlcnJvclwiLFwiZXJyb3JcIixcImdvdHBvaW50ZXJjYXB0dXJlXCIsXCJnb3RQb2ludGVyQ2FwdHVyZVwiLFwibG9hZFwiLFwibG9hZFwiLFwibG9hZGVkZGF0YVwiLFwibG9hZGVkRGF0YVwiLFwibG9hZGVkbWV0YWRhdGFcIixcImxvYWRlZE1ldGFkYXRhXCIsXCJsb2Fkc3RhcnRcIixcImxvYWRTdGFydFwiLFxuXCJsb3N0cG9pbnRlcmNhcHR1cmVcIixcImxvc3RQb2ludGVyQ2FwdHVyZVwiLFwicGxheWluZ1wiLFwicGxheWluZ1wiLFwicHJvZ3Jlc3NcIixcInByb2dyZXNzXCIsXCJzZWVraW5nXCIsXCJzZWVraW5nXCIsXCJzdGFsbGVkXCIsXCJzdGFsbGVkXCIsXCJzdXNwZW5kXCIsXCJzdXNwZW5kXCIsXCJ0aW1ldXBkYXRlXCIsXCJ0aW1lVXBkYXRlXCIsTGMsXCJ0cmFuc2l0aW9uRW5kXCIsXCJ3YWl0aW5nXCIsXCJ3YWl0aW5nXCJdO2Z1bmN0aW9uIFBjKGEsYil7Zm9yKHZhciBjPTA7YzxhLmxlbmd0aDtjKz0yKXt2YXIgZD1hW2NdLGU9YVtjKzFdO2U9XCJvblwiKyhlWzBdLnRvVXBwZXJDYXNlKCkrZS5zbGljZSgxKSk7TmMuc2V0KGQsYik7TWMuc2V0KGQsZSk7ZGEoZSxbZF0pfX12YXIgUWM9ci51bnN0YWJsZV9ub3c7UWMoKTt2YXIgRj04O1xuZnVuY3Rpb24gUmMoYSl7aWYoMCE9PSgxJmEpKXJldHVybiBGPTE1LDE7aWYoMCE9PSgyJmEpKXJldHVybiBGPTE0LDI7aWYoMCE9PSg0JmEpKXJldHVybiBGPTEzLDQ7dmFyIGI9MjQmYTtpZigwIT09YilyZXR1cm4gRj0xMixiO2lmKDAhPT0oYSYzMikpcmV0dXJuIEY9MTEsMzI7Yj0xOTImYTtpZigwIT09YilyZXR1cm4gRj0xMCxiO2lmKDAhPT0oYSYyNTYpKXJldHVybiBGPTksMjU2O2I9MzU4NCZhO2lmKDAhPT1iKXJldHVybiBGPTgsYjtpZigwIT09KGEmNDA5NikpcmV0dXJuIEY9Nyw0MDk2O2I9NDE4NjExMiZhO2lmKDAhPT1iKXJldHVybiBGPTYsYjtiPTYyOTE0NTYwJmE7aWYoMCE9PWIpcmV0dXJuIEY9NSxiO2lmKGEmNjcxMDg4NjQpcmV0dXJuIEY9NCw2NzEwODg2NDtpZigwIT09KGEmMTM0MjE3NzI4KSlyZXR1cm4gRj0zLDEzNDIxNzcyODtiPTgwNTMwNjM2OCZhO2lmKDAhPT1iKXJldHVybiBGPTIsYjtpZigwIT09KDEwNzM3NDE4MjQmYSkpcmV0dXJuIEY9MSwxMDczNzQxODI0O1xuRj04O3JldHVybiBhfWZ1bmN0aW9uIFNjKGEpe3N3aXRjaChhKXtjYXNlIDk5OnJldHVybiAxNTtjYXNlIDk4OnJldHVybiAxMDtjYXNlIDk3OmNhc2UgOTY6cmV0dXJuIDg7Y2FzZSA5NTpyZXR1cm4gMjtkZWZhdWx0OnJldHVybiAwfX1mdW5jdGlvbiBUYyhhKXtzd2l0Y2goYSl7Y2FzZSAxNTpjYXNlIDE0OnJldHVybiA5OTtjYXNlIDEzOmNhc2UgMTI6Y2FzZSAxMTpjYXNlIDEwOnJldHVybiA5ODtjYXNlIDk6Y2FzZSA4OmNhc2UgNzpjYXNlIDY6Y2FzZSA0OmNhc2UgNTpyZXR1cm4gOTc7Y2FzZSAzOmNhc2UgMjpjYXNlIDE6cmV0dXJuIDk1O2Nhc2UgMDpyZXR1cm4gOTA7ZGVmYXVsdDp0aHJvdyBFcnJvcih5KDM1OCxhKSk7fX1cbmZ1bmN0aW9uIFVjKGEsYil7dmFyIGM9YS5wZW5kaW5nTGFuZXM7aWYoMD09PWMpcmV0dXJuIEY9MDt2YXIgZD0wLGU9MCxmPWEuZXhwaXJlZExhbmVzLGc9YS5zdXNwZW5kZWRMYW5lcyxoPWEucGluZ2VkTGFuZXM7aWYoMCE9PWYpZD1mLGU9Rj0xNTtlbHNlIGlmKGY9YyYxMzQyMTc3MjcsMCE9PWYpe3ZhciBrPWYmfmc7MCE9PWs/KGQ9UmMoayksZT1GKTooaCY9ZiwwIT09aCYmKGQ9UmMoaCksZT1GKSl9ZWxzZSBmPWMmfmcsMCE9PWY/KGQ9UmMoZiksZT1GKTowIT09aCYmKGQ9UmMoaCksZT1GKTtpZigwPT09ZClyZXR1cm4gMDtkPTMxLVZjKGQpO2Q9YyYoKDA+ZD8wOjE8PGQpPDwxKS0xO2lmKDAhPT1iJiZiIT09ZCYmMD09PShiJmcpKXtSYyhiKTtpZihlPD1GKXJldHVybiBiO0Y9ZX1iPWEuZW50YW5nbGVkTGFuZXM7aWYoMCE9PWIpZm9yKGE9YS5lbnRhbmdsZW1lbnRzLGImPWQ7MDxiOyljPTMxLVZjKGIpLGU9MTw8YyxkfD1hW2NdLGImPX5lO3JldHVybiBkfVxuZnVuY3Rpb24gV2MoYSl7YT1hLnBlbmRpbmdMYW5lcyYtMTA3Mzc0MTgyNTtyZXR1cm4gMCE9PWE/YTphJjEwNzM3NDE4MjQ/MTA3Mzc0MTgyNDowfWZ1bmN0aW9uIFhjKGEsYil7c3dpdGNoKGEpe2Nhc2UgMTU6cmV0dXJuIDE7Y2FzZSAxNDpyZXR1cm4gMjtjYXNlIDEyOnJldHVybiBhPVljKDI0Jn5iKSwwPT09YT9YYygxMCxiKTphO2Nhc2UgMTA6cmV0dXJuIGE9WWMoMTkyJn5iKSwwPT09YT9YYyg4LGIpOmE7Y2FzZSA4OnJldHVybiBhPVljKDM1ODQmfmIpLDA9PT1hJiYoYT1ZYyg0MTg2MTEyJn5iKSwwPT09YSYmKGE9NTEyKSksYTtjYXNlIDI6cmV0dXJuIGI9WWMoODA1MzA2MzY4Jn5iKSwwPT09YiYmKGI9MjY4NDM1NDU2KSxifXRocm93IEVycm9yKHkoMzU4LGEpKTt9ZnVuY3Rpb24gWWMoYSl7cmV0dXJuIGEmLWF9ZnVuY3Rpb24gWmMoYSl7Zm9yKHZhciBiPVtdLGM9MDszMT5jO2MrKyliLnB1c2goYSk7cmV0dXJuIGJ9XG5mdW5jdGlvbiAkYyhhLGIsYyl7YS5wZW5kaW5nTGFuZXN8PWI7dmFyIGQ9Yi0xO2Euc3VzcGVuZGVkTGFuZXMmPWQ7YS5waW5nZWRMYW5lcyY9ZDthPWEuZXZlbnRUaW1lcztiPTMxLVZjKGIpO2FbYl09Y312YXIgVmM9TWF0aC5jbHozMj9NYXRoLmNsejMyOmFkLGJkPU1hdGgubG9nLGNkPU1hdGguTE4yO2Z1bmN0aW9uIGFkKGEpe3JldHVybiAwPT09YT8zMjozMS0oYmQoYSkvY2R8MCl8MH12YXIgZGQ9ci51bnN0YWJsZV9Vc2VyQmxvY2tpbmdQcmlvcml0eSxlZD1yLnVuc3RhYmxlX3J1bldpdGhQcmlvcml0eSxmZD0hMDtmdW5jdGlvbiBnZChhLGIsYyxkKXtLYnx8SWIoKTt2YXIgZT1oZCxmPUtiO0tiPSEwO3RyeXtIYihlLGEsYixjLGQpfWZpbmFsbHl7KEtiPWYpfHxNYigpfX1mdW5jdGlvbiBpZChhLGIsYyxkKXtlZChkZCxoZC5iaW5kKG51bGwsYSxiLGMsZCkpfVxuZnVuY3Rpb24gaGQoYSxiLGMsZCl7aWYoZmQpe3ZhciBlO2lmKChlPTA9PT0oYiY0KSkmJjA8amMubGVuZ3RoJiYtMTxxYy5pbmRleE9mKGEpKWE9cmMobnVsbCxhLGIsYyxkKSxqYy5wdXNoKGEpO2Vsc2V7dmFyIGY9eWMoYSxiLGMsZCk7aWYobnVsbD09PWYpZSYmc2MoYSxkKTtlbHNle2lmKGUpe2lmKC0xPHFjLmluZGV4T2YoYSkpe2E9cmMoZixhLGIsYyxkKTtqYy5wdXNoKGEpO3JldHVybn1pZih1YyhmLGEsYixjLGQpKXJldHVybjtzYyhhLGQpfWpkKGEsYixkLG51bGwsYyl9fX19XG5mdW5jdGlvbiB5YyhhLGIsYyxkKXt2YXIgZT14YihkKTtlPXdjKGUpO2lmKG51bGwhPT1lKXt2YXIgZj1aYihlKTtpZihudWxsPT09ZillPW51bGw7ZWxzZXt2YXIgZz1mLnRhZztpZigxMz09PWcpe2U9JGIoZik7aWYobnVsbCE9PWUpcmV0dXJuIGU7ZT1udWxsfWVsc2UgaWYoMz09PWcpe2lmKGYuc3RhdGVOb2RlLmh5ZHJhdGUpcmV0dXJuIDM9PT1mLnRhZz9mLnN0YXRlTm9kZS5jb250YWluZXJJbmZvOm51bGw7ZT1udWxsfWVsc2UgZiE9PWUmJihlPW51bGwpfX1qZChhLGIsZCxlLGMpO3JldHVybiBudWxsfXZhciBrZD1udWxsLGxkPW51bGwsbWQ9bnVsbDtcbmZ1bmN0aW9uIG5kKCl7aWYobWQpcmV0dXJuIG1kO3ZhciBhLGI9bGQsYz1iLmxlbmd0aCxkLGU9XCJ2YWx1ZVwiaW4ga2Q/a2QudmFsdWU6a2QudGV4dENvbnRlbnQsZj1lLmxlbmd0aDtmb3IoYT0wO2E8YyYmYlthXT09PWVbYV07YSsrKTt2YXIgZz1jLWE7Zm9yKGQ9MTtkPD1nJiZiW2MtZF09PT1lW2YtZF07ZCsrKTtyZXR1cm4gbWQ9ZS5zbGljZShhLDE8ZD8xLWQ6dm9pZCAwKX1mdW5jdGlvbiBvZChhKXt2YXIgYj1hLmtleUNvZGU7XCJjaGFyQ29kZVwiaW4gYT8oYT1hLmNoYXJDb2RlLDA9PT1hJiYxMz09PWImJihhPTEzKSk6YT1iOzEwPT09YSYmKGE9MTMpO3JldHVybiAzMjw9YXx8MTM9PT1hP2E6MH1mdW5jdGlvbiBwZCgpe3JldHVybiEwfWZ1bmN0aW9uIHFkKCl7cmV0dXJuITF9XG5mdW5jdGlvbiByZChhKXtmdW5jdGlvbiBiKGIsZCxlLGYsZyl7dGhpcy5fcmVhY3ROYW1lPWI7dGhpcy5fdGFyZ2V0SW5zdD1lO3RoaXMudHlwZT1kO3RoaXMubmF0aXZlRXZlbnQ9Zjt0aGlzLnRhcmdldD1nO3RoaXMuY3VycmVudFRhcmdldD1udWxsO2Zvcih2YXIgYyBpbiBhKWEuaGFzT3duUHJvcGVydHkoYykmJihiPWFbY10sdGhpc1tjXT1iP2IoZik6ZltjXSk7dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9KG51bGwhPWYuZGVmYXVsdFByZXZlbnRlZD9mLmRlZmF1bHRQcmV2ZW50ZWQ6ITE9PT1mLnJldHVyblZhbHVlKT9wZDpxZDt0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPXFkO3JldHVybiB0aGlzfW0oYi5wcm90b3R5cGUse3ByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKCl7dGhpcy5kZWZhdWx0UHJldmVudGVkPSEwO3ZhciBhPXRoaXMubmF0aXZlRXZlbnQ7YSYmKGEucHJldmVudERlZmF1bHQ/YS5wcmV2ZW50RGVmYXVsdCgpOlwidW5rbm93blwiIT09dHlwZW9mIGEucmV0dXJuVmFsdWUmJlxuKGEucmV0dXJuVmFsdWU9ITEpLHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPXBkKX0sc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5uYXRpdmVFdmVudDthJiYoYS5zdG9wUHJvcGFnYXRpb24/YS5zdG9wUHJvcGFnYXRpb24oKTpcInVua25vd25cIiE9PXR5cGVvZiBhLmNhbmNlbEJ1YmJsZSYmKGEuY2FuY2VsQnViYmxlPSEwKSx0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPXBkKX0scGVyc2lzdDpmdW5jdGlvbigpe30saXNQZXJzaXN0ZW50OnBkfSk7cmV0dXJuIGJ9XG52YXIgc2Q9e2V2ZW50UGhhc2U6MCxidWJibGVzOjAsY2FuY2VsYWJsZTowLHRpbWVTdGFtcDpmdW5jdGlvbihhKXtyZXR1cm4gYS50aW1lU3RhbXB8fERhdGUubm93KCl9LGRlZmF1bHRQcmV2ZW50ZWQ6MCxpc1RydXN0ZWQ6MH0sdGQ9cmQoc2QpLHVkPW0oe30sc2Qse3ZpZXc6MCxkZXRhaWw6MH0pLHZkPXJkKHVkKSx3ZCx4ZCx5ZCxBZD1tKHt9LHVkLHtzY3JlZW5YOjAsc2NyZWVuWTowLGNsaWVudFg6MCxjbGllbnRZOjAscGFnZVg6MCxwYWdlWTowLGN0cmxLZXk6MCxzaGlmdEtleTowLGFsdEtleTowLG1ldGFLZXk6MCxnZXRNb2RpZmllclN0YXRlOnpkLGJ1dHRvbjowLGJ1dHRvbnM6MCxyZWxhdGVkVGFyZ2V0OmZ1bmN0aW9uKGEpe3JldHVybiB2b2lkIDA9PT1hLnJlbGF0ZWRUYXJnZXQ/YS5mcm9tRWxlbWVudD09PWEuc3JjRWxlbWVudD9hLnRvRWxlbWVudDphLmZyb21FbGVtZW50OmEucmVsYXRlZFRhcmdldH0sbW92ZW1lbnRYOmZ1bmN0aW9uKGEpe2lmKFwibW92ZW1lbnRYXCJpblxuYSlyZXR1cm4gYS5tb3ZlbWVudFg7YSE9PXlkJiYoeWQmJlwibW91c2Vtb3ZlXCI9PT1hLnR5cGU/KHdkPWEuc2NyZWVuWC15ZC5zY3JlZW5YLHhkPWEuc2NyZWVuWS15ZC5zY3JlZW5ZKTp4ZD13ZD0wLHlkPWEpO3JldHVybiB3ZH0sbW92ZW1lbnRZOmZ1bmN0aW9uKGEpe3JldHVyblwibW92ZW1lbnRZXCJpbiBhP2EubW92ZW1lbnRZOnhkfX0pLEJkPXJkKEFkKSxDZD1tKHt9LEFkLHtkYXRhVHJhbnNmZXI6MH0pLERkPXJkKENkKSxFZD1tKHt9LHVkLHtyZWxhdGVkVGFyZ2V0OjB9KSxGZD1yZChFZCksR2Q9bSh7fSxzZCx7YW5pbWF0aW9uTmFtZTowLGVsYXBzZWRUaW1lOjAscHNldWRvRWxlbWVudDowfSksSGQ9cmQoR2QpLElkPW0oe30sc2Qse2NsaXBib2FyZERhdGE6ZnVuY3Rpb24oYSl7cmV0dXJuXCJjbGlwYm9hcmREYXRhXCJpbiBhP2EuY2xpcGJvYXJkRGF0YTp3aW5kb3cuY2xpcGJvYXJkRGF0YX19KSxKZD1yZChJZCksS2Q9bSh7fSxzZCx7ZGF0YTowfSksTGQ9cmQoS2QpLE1kPXtFc2M6XCJFc2NhcGVcIixcblNwYWNlYmFyOlwiIFwiLExlZnQ6XCJBcnJvd0xlZnRcIixVcDpcIkFycm93VXBcIixSaWdodDpcIkFycm93UmlnaHRcIixEb3duOlwiQXJyb3dEb3duXCIsRGVsOlwiRGVsZXRlXCIsV2luOlwiT1NcIixNZW51OlwiQ29udGV4dE1lbnVcIixBcHBzOlwiQ29udGV4dE1lbnVcIixTY3JvbGw6XCJTY3JvbGxMb2NrXCIsTW96UHJpbnRhYmxlS2V5OlwiVW5pZGVudGlmaWVkXCJ9LE5kPXs4OlwiQmFja3NwYWNlXCIsOTpcIlRhYlwiLDEyOlwiQ2xlYXJcIiwxMzpcIkVudGVyXCIsMTY6XCJTaGlmdFwiLDE3OlwiQ29udHJvbFwiLDE4OlwiQWx0XCIsMTk6XCJQYXVzZVwiLDIwOlwiQ2Fwc0xvY2tcIiwyNzpcIkVzY2FwZVwiLDMyOlwiIFwiLDMzOlwiUGFnZVVwXCIsMzQ6XCJQYWdlRG93blwiLDM1OlwiRW5kXCIsMzY6XCJIb21lXCIsMzc6XCJBcnJvd0xlZnRcIiwzODpcIkFycm93VXBcIiwzOTpcIkFycm93UmlnaHRcIiw0MDpcIkFycm93RG93blwiLDQ1OlwiSW5zZXJ0XCIsNDY6XCJEZWxldGVcIiwxMTI6XCJGMVwiLDExMzpcIkYyXCIsMTE0OlwiRjNcIiwxMTU6XCJGNFwiLDExNjpcIkY1XCIsMTE3OlwiRjZcIiwxMTg6XCJGN1wiLFxuMTE5OlwiRjhcIiwxMjA6XCJGOVwiLDEyMTpcIkYxMFwiLDEyMjpcIkYxMVwiLDEyMzpcIkYxMlwiLDE0NDpcIk51bUxvY2tcIiwxNDU6XCJTY3JvbGxMb2NrXCIsMjI0OlwiTWV0YVwifSxPZD17QWx0OlwiYWx0S2V5XCIsQ29udHJvbDpcImN0cmxLZXlcIixNZXRhOlwibWV0YUtleVwiLFNoaWZ0Olwic2hpZnRLZXlcIn07ZnVuY3Rpb24gUGQoYSl7dmFyIGI9dGhpcy5uYXRpdmVFdmVudDtyZXR1cm4gYi5nZXRNb2RpZmllclN0YXRlP2IuZ2V0TW9kaWZpZXJTdGF0ZShhKTooYT1PZFthXSk/ISFiW2FdOiExfWZ1bmN0aW9uIHpkKCl7cmV0dXJuIFBkfVxudmFyIFFkPW0oe30sdWQse2tleTpmdW5jdGlvbihhKXtpZihhLmtleSl7dmFyIGI9TWRbYS5rZXldfHxhLmtleTtpZihcIlVuaWRlbnRpZmllZFwiIT09YilyZXR1cm4gYn1yZXR1cm5cImtleXByZXNzXCI9PT1hLnR5cGU/KGE9b2QoYSksMTM9PT1hP1wiRW50ZXJcIjpTdHJpbmcuZnJvbUNoYXJDb2RlKGEpKTpcImtleWRvd25cIj09PWEudHlwZXx8XCJrZXl1cFwiPT09YS50eXBlP05kW2Eua2V5Q29kZV18fFwiVW5pZGVudGlmaWVkXCI6XCJcIn0sY29kZTowLGxvY2F0aW9uOjAsY3RybEtleTowLHNoaWZ0S2V5OjAsYWx0S2V5OjAsbWV0YUtleTowLHJlcGVhdDowLGxvY2FsZTowLGdldE1vZGlmaWVyU3RhdGU6emQsY2hhckNvZGU6ZnVuY3Rpb24oYSl7cmV0dXJuXCJrZXlwcmVzc1wiPT09YS50eXBlP29kKGEpOjB9LGtleUNvZGU6ZnVuY3Rpb24oYSl7cmV0dXJuXCJrZXlkb3duXCI9PT1hLnR5cGV8fFwia2V5dXBcIj09PWEudHlwZT9hLmtleUNvZGU6MH0sd2hpY2g6ZnVuY3Rpb24oYSl7cmV0dXJuXCJrZXlwcmVzc1wiPT09XG5hLnR5cGU/b2QoYSk6XCJrZXlkb3duXCI9PT1hLnR5cGV8fFwia2V5dXBcIj09PWEudHlwZT9hLmtleUNvZGU6MH19KSxSZD1yZChRZCksU2Q9bSh7fSxBZCx7cG9pbnRlcklkOjAsd2lkdGg6MCxoZWlnaHQ6MCxwcmVzc3VyZTowLHRhbmdlbnRpYWxQcmVzc3VyZTowLHRpbHRYOjAsdGlsdFk6MCx0d2lzdDowLHBvaW50ZXJUeXBlOjAsaXNQcmltYXJ5OjB9KSxUZD1yZChTZCksVWQ9bSh7fSx1ZCx7dG91Y2hlczowLHRhcmdldFRvdWNoZXM6MCxjaGFuZ2VkVG91Y2hlczowLGFsdEtleTowLG1ldGFLZXk6MCxjdHJsS2V5OjAsc2hpZnRLZXk6MCxnZXRNb2RpZmllclN0YXRlOnpkfSksVmQ9cmQoVWQpLFdkPW0oe30sc2Qse3Byb3BlcnR5TmFtZTowLGVsYXBzZWRUaW1lOjAscHNldWRvRWxlbWVudDowfSksWGQ9cmQoV2QpLFlkPW0oe30sQWQse2RlbHRhWDpmdW5jdGlvbihhKXtyZXR1cm5cImRlbHRhWFwiaW4gYT9hLmRlbHRhWDpcIndoZWVsRGVsdGFYXCJpbiBhPy1hLndoZWVsRGVsdGFYOjB9LFxuZGVsdGFZOmZ1bmN0aW9uKGEpe3JldHVyblwiZGVsdGFZXCJpbiBhP2EuZGVsdGFZOlwid2hlZWxEZWx0YVlcImluIGE/LWEud2hlZWxEZWx0YVk6XCJ3aGVlbERlbHRhXCJpbiBhPy1hLndoZWVsRGVsdGE6MH0sZGVsdGFaOjAsZGVsdGFNb2RlOjB9KSxaZD1yZChZZCksJGQ9WzksMTMsMjcsMzJdLGFlPWZhJiZcIkNvbXBvc2l0aW9uRXZlbnRcImluIHdpbmRvdyxiZT1udWxsO2ZhJiZcImRvY3VtZW50TW9kZVwiaW4gZG9jdW1lbnQmJihiZT1kb2N1bWVudC5kb2N1bWVudE1vZGUpO3ZhciBjZT1mYSYmXCJUZXh0RXZlbnRcImluIHdpbmRvdyYmIWJlLGRlPWZhJiYoIWFlfHxiZSYmODxiZSYmMTE+PWJlKSxlZT1TdHJpbmcuZnJvbUNoYXJDb2RlKDMyKSxmZT0hMTtcbmZ1bmN0aW9uIGdlKGEsYil7c3dpdGNoKGEpe2Nhc2UgXCJrZXl1cFwiOnJldHVybi0xIT09JGQuaW5kZXhPZihiLmtleUNvZGUpO2Nhc2UgXCJrZXlkb3duXCI6cmV0dXJuIDIyOSE9PWIua2V5Q29kZTtjYXNlIFwia2V5cHJlc3NcIjpjYXNlIFwibW91c2Vkb3duXCI6Y2FzZSBcImZvY3Vzb3V0XCI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19ZnVuY3Rpb24gaGUoYSl7YT1hLmRldGFpbDtyZXR1cm5cIm9iamVjdFwiPT09dHlwZW9mIGEmJlwiZGF0YVwiaW4gYT9hLmRhdGE6bnVsbH12YXIgaWU9ITE7ZnVuY3Rpb24gamUoYSxiKXtzd2l0Y2goYSl7Y2FzZSBcImNvbXBvc2l0aW9uZW5kXCI6cmV0dXJuIGhlKGIpO2Nhc2UgXCJrZXlwcmVzc1wiOmlmKDMyIT09Yi53aGljaClyZXR1cm4gbnVsbDtmZT0hMDtyZXR1cm4gZWU7Y2FzZSBcInRleHRJbnB1dFwiOnJldHVybiBhPWIuZGF0YSxhPT09ZWUmJmZlP251bGw6YTtkZWZhdWx0OnJldHVybiBudWxsfX1cbmZ1bmN0aW9uIGtlKGEsYil7aWYoaWUpcmV0dXJuXCJjb21wb3NpdGlvbmVuZFwiPT09YXx8IWFlJiZnZShhLGIpPyhhPW5kKCksbWQ9bGQ9a2Q9bnVsbCxpZT0hMSxhKTpudWxsO3N3aXRjaChhKXtjYXNlIFwicGFzdGVcIjpyZXR1cm4gbnVsbDtjYXNlIFwia2V5cHJlc3NcIjppZighKGIuY3RybEtleXx8Yi5hbHRLZXl8fGIubWV0YUtleSl8fGIuY3RybEtleSYmYi5hbHRLZXkpe2lmKGIuY2hhciYmMTxiLmNoYXIubGVuZ3RoKXJldHVybiBiLmNoYXI7aWYoYi53aGljaClyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShiLndoaWNoKX1yZXR1cm4gbnVsbDtjYXNlIFwiY29tcG9zaXRpb25lbmRcIjpyZXR1cm4gZGUmJlwia29cIiE9PWIubG9jYWxlP251bGw6Yi5kYXRhO2RlZmF1bHQ6cmV0dXJuIG51bGx9fVxudmFyIGxlPXtjb2xvcjohMCxkYXRlOiEwLGRhdGV0aW1lOiEwLFwiZGF0ZXRpbWUtbG9jYWxcIjohMCxlbWFpbDohMCxtb250aDohMCxudW1iZXI6ITAscGFzc3dvcmQ6ITAscmFuZ2U6ITAsc2VhcmNoOiEwLHRlbDohMCx0ZXh0OiEwLHRpbWU6ITAsdXJsOiEwLHdlZWs6ITB9O2Z1bmN0aW9uIG1lKGEpe3ZhciBiPWEmJmEubm9kZU5hbWUmJmEubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm5cImlucHV0XCI9PT1iPyEhbGVbYS50eXBlXTpcInRleHRhcmVhXCI9PT1iPyEwOiExfWZ1bmN0aW9uIG5lKGEsYixjLGQpe0ViKGQpO2I9b2UoYixcIm9uQ2hhbmdlXCIpOzA8Yi5sZW5ndGgmJihjPW5ldyB0ZChcIm9uQ2hhbmdlXCIsXCJjaGFuZ2VcIixudWxsLGMsZCksYS5wdXNoKHtldmVudDpjLGxpc3RlbmVyczpifSkpfXZhciBwZT1udWxsLHFlPW51bGw7ZnVuY3Rpb24gcmUoYSl7c2UoYSwwKX1mdW5jdGlvbiB0ZShhKXt2YXIgYj11ZShhKTtpZihXYShiKSlyZXR1cm4gYX1cbmZ1bmN0aW9uIHZlKGEsYil7aWYoXCJjaGFuZ2VcIj09PWEpcmV0dXJuIGJ9dmFyIHdlPSExO2lmKGZhKXt2YXIgeGU7aWYoZmEpe3ZhciB5ZT1cIm9uaW5wdXRcImluIGRvY3VtZW50O2lmKCF5ZSl7dmFyIHplPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7emUuc2V0QXR0cmlidXRlKFwib25pbnB1dFwiLFwicmV0dXJuO1wiKTt5ZT1cImZ1bmN0aW9uXCI9PT10eXBlb2YgemUub25pbnB1dH14ZT15ZX1lbHNlIHhlPSExO3dlPXhlJiYoIWRvY3VtZW50LmRvY3VtZW50TW9kZXx8OTxkb2N1bWVudC5kb2N1bWVudE1vZGUpfWZ1bmN0aW9uIEFlKCl7cGUmJihwZS5kZXRhY2hFdmVudChcIm9ucHJvcGVydHljaGFuZ2VcIixCZSkscWU9cGU9bnVsbCl9ZnVuY3Rpb24gQmUoYSl7aWYoXCJ2YWx1ZVwiPT09YS5wcm9wZXJ0eU5hbWUmJnRlKHFlKSl7dmFyIGI9W107bmUoYixxZSxhLHhiKGEpKTthPXJlO2lmKEtiKWEoYik7ZWxzZXtLYj0hMDt0cnl7R2IoYSxiKX1maW5hbGx5e0tiPSExLE1iKCl9fX19XG5mdW5jdGlvbiBDZShhLGIsYyl7XCJmb2N1c2luXCI9PT1hPyhBZSgpLHBlPWIscWU9YyxwZS5hdHRhY2hFdmVudChcIm9ucHJvcGVydHljaGFuZ2VcIixCZSkpOlwiZm9jdXNvdXRcIj09PWEmJkFlKCl9ZnVuY3Rpb24gRGUoYSl7aWYoXCJzZWxlY3Rpb25jaGFuZ2VcIj09PWF8fFwia2V5dXBcIj09PWF8fFwia2V5ZG93blwiPT09YSlyZXR1cm4gdGUocWUpfWZ1bmN0aW9uIEVlKGEsYil7aWYoXCJjbGlja1wiPT09YSlyZXR1cm4gdGUoYil9ZnVuY3Rpb24gRmUoYSxiKXtpZihcImlucHV0XCI9PT1hfHxcImNoYW5nZVwiPT09YSlyZXR1cm4gdGUoYil9ZnVuY3Rpb24gR2UoYSxiKXtyZXR1cm4gYT09PWImJigwIT09YXx8MS9hPT09MS9iKXx8YSE9PWEmJmIhPT1ifXZhciBIZT1cImZ1bmN0aW9uXCI9PT10eXBlb2YgT2JqZWN0LmlzP09iamVjdC5pczpHZSxJZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuZnVuY3Rpb24gSmUoYSxiKXtpZihIZShhLGIpKXJldHVybiEwO2lmKFwib2JqZWN0XCIhPT10eXBlb2YgYXx8bnVsbD09PWF8fFwib2JqZWN0XCIhPT10eXBlb2YgYnx8bnVsbD09PWIpcmV0dXJuITE7dmFyIGM9T2JqZWN0LmtleXMoYSksZD1PYmplY3Qua2V5cyhiKTtpZihjLmxlbmd0aCE9PWQubGVuZ3RoKXJldHVybiExO2ZvcihkPTA7ZDxjLmxlbmd0aDtkKyspaWYoIUllLmNhbGwoYixjW2RdKXx8IUhlKGFbY1tkXV0sYltjW2RdXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gS2UoYSl7Zm9yKDthJiZhLmZpcnN0Q2hpbGQ7KWE9YS5maXJzdENoaWxkO3JldHVybiBhfVxuZnVuY3Rpb24gTGUoYSxiKXt2YXIgYz1LZShhKTthPTA7Zm9yKHZhciBkO2M7KXtpZigzPT09Yy5ub2RlVHlwZSl7ZD1hK2MudGV4dENvbnRlbnQubGVuZ3RoO2lmKGE8PWImJmQ+PWIpcmV0dXJue25vZGU6YyxvZmZzZXQ6Yi1hfTthPWR9YTp7Zm9yKDtjOyl7aWYoYy5uZXh0U2libGluZyl7Yz1jLm5leHRTaWJsaW5nO2JyZWFrIGF9Yz1jLnBhcmVudE5vZGV9Yz12b2lkIDB9Yz1LZShjKX19ZnVuY3Rpb24gTWUoYSxiKXtyZXR1cm4gYSYmYj9hPT09Yj8hMDphJiYzPT09YS5ub2RlVHlwZT8hMTpiJiYzPT09Yi5ub2RlVHlwZT9NZShhLGIucGFyZW50Tm9kZSk6XCJjb250YWluc1wiaW4gYT9hLmNvbnRhaW5zKGIpOmEuY29tcGFyZURvY3VtZW50UG9zaXRpb24/ISEoYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihiKSYxNik6ITE6ITF9XG5mdW5jdGlvbiBOZSgpe2Zvcih2YXIgYT13aW5kb3csYj1YYSgpO2IgaW5zdGFuY2VvZiBhLkhUTUxJRnJhbWVFbGVtZW50Oyl7dHJ5e3ZhciBjPVwic3RyaW5nXCI9PT10eXBlb2YgYi5jb250ZW50V2luZG93LmxvY2F0aW9uLmhyZWZ9Y2F0Y2goZCl7Yz0hMX1pZihjKWE9Yi5jb250ZW50V2luZG93O2Vsc2UgYnJlYWs7Yj1YYShhLmRvY3VtZW50KX1yZXR1cm4gYn1mdW5jdGlvbiBPZShhKXt2YXIgYj1hJiZhLm5vZGVOYW1lJiZhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuIGImJihcImlucHV0XCI9PT1iJiYoXCJ0ZXh0XCI9PT1hLnR5cGV8fFwic2VhcmNoXCI9PT1hLnR5cGV8fFwidGVsXCI9PT1hLnR5cGV8fFwidXJsXCI9PT1hLnR5cGV8fFwicGFzc3dvcmRcIj09PWEudHlwZSl8fFwidGV4dGFyZWFcIj09PWJ8fFwidHJ1ZVwiPT09YS5jb250ZW50RWRpdGFibGUpfVxudmFyIFBlPWZhJiZcImRvY3VtZW50TW9kZVwiaW4gZG9jdW1lbnQmJjExPj1kb2N1bWVudC5kb2N1bWVudE1vZGUsUWU9bnVsbCxSZT1udWxsLFNlPW51bGwsVGU9ITE7XG5mdW5jdGlvbiBVZShhLGIsYyl7dmFyIGQ9Yy53aW5kb3c9PT1jP2MuZG9jdW1lbnQ6OT09PWMubm9kZVR5cGU/YzpjLm93bmVyRG9jdW1lbnQ7VGV8fG51bGw9PVFlfHxRZSE9PVhhKGQpfHwoZD1RZSxcInNlbGVjdGlvblN0YXJ0XCJpbiBkJiZPZShkKT9kPXtzdGFydDpkLnNlbGVjdGlvblN0YXJ0LGVuZDpkLnNlbGVjdGlvbkVuZH06KGQ9KGQub3duZXJEb2N1bWVudCYmZC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHx3aW5kb3cpLmdldFNlbGVjdGlvbigpLGQ9e2FuY2hvck5vZGU6ZC5hbmNob3JOb2RlLGFuY2hvck9mZnNldDpkLmFuY2hvck9mZnNldCxmb2N1c05vZGU6ZC5mb2N1c05vZGUsZm9jdXNPZmZzZXQ6ZC5mb2N1c09mZnNldH0pLFNlJiZKZShTZSxkKXx8KFNlPWQsZD1vZShSZSxcIm9uU2VsZWN0XCIpLDA8ZC5sZW5ndGgmJihiPW5ldyB0ZChcIm9uU2VsZWN0XCIsXCJzZWxlY3RcIixudWxsLGIsYyksYS5wdXNoKHtldmVudDpiLGxpc3RlbmVyczpkfSksYi50YXJnZXQ9UWUpKSl9XG5QYyhcImNhbmNlbCBjYW5jZWwgY2xpY2sgY2xpY2sgY2xvc2UgY2xvc2UgY29udGV4dG1lbnUgY29udGV4dE1lbnUgY29weSBjb3B5IGN1dCBjdXQgYXV4Y2xpY2sgYXV4Q2xpY2sgZGJsY2xpY2sgZG91YmxlQ2xpY2sgZHJhZ2VuZCBkcmFnRW5kIGRyYWdzdGFydCBkcmFnU3RhcnQgZHJvcCBkcm9wIGZvY3VzaW4gZm9jdXMgZm9jdXNvdXQgYmx1ciBpbnB1dCBpbnB1dCBpbnZhbGlkIGludmFsaWQga2V5ZG93biBrZXlEb3duIGtleXByZXNzIGtleVByZXNzIGtleXVwIGtleVVwIG1vdXNlZG93biBtb3VzZURvd24gbW91c2V1cCBtb3VzZVVwIHBhc3RlIHBhc3RlIHBhdXNlIHBhdXNlIHBsYXkgcGxheSBwb2ludGVyY2FuY2VsIHBvaW50ZXJDYW5jZWwgcG9pbnRlcmRvd24gcG9pbnRlckRvd24gcG9pbnRlcnVwIHBvaW50ZXJVcCByYXRlY2hhbmdlIHJhdGVDaGFuZ2UgcmVzZXQgcmVzZXQgc2Vla2VkIHNlZWtlZCBzdWJtaXQgc3VibWl0IHRvdWNoY2FuY2VsIHRvdWNoQ2FuY2VsIHRvdWNoZW5kIHRvdWNoRW5kIHRvdWNoc3RhcnQgdG91Y2hTdGFydCB2b2x1bWVjaGFuZ2Ugdm9sdW1lQ2hhbmdlXCIuc3BsaXQoXCIgXCIpLFxuMCk7UGMoXCJkcmFnIGRyYWcgZHJhZ2VudGVyIGRyYWdFbnRlciBkcmFnZXhpdCBkcmFnRXhpdCBkcmFnbGVhdmUgZHJhZ0xlYXZlIGRyYWdvdmVyIGRyYWdPdmVyIG1vdXNlbW92ZSBtb3VzZU1vdmUgbW91c2VvdXQgbW91c2VPdXQgbW91c2VvdmVyIG1vdXNlT3ZlciBwb2ludGVybW92ZSBwb2ludGVyTW92ZSBwb2ludGVyb3V0IHBvaW50ZXJPdXQgcG9pbnRlcm92ZXIgcG9pbnRlck92ZXIgc2Nyb2xsIHNjcm9sbCB0b2dnbGUgdG9nZ2xlIHRvdWNobW92ZSB0b3VjaE1vdmUgd2hlZWwgd2hlZWxcIi5zcGxpdChcIiBcIiksMSk7UGMoT2MsMik7Zm9yKHZhciBWZT1cImNoYW5nZSBzZWxlY3Rpb25jaGFuZ2UgdGV4dElucHV0IGNvbXBvc2l0aW9uc3RhcnQgY29tcG9zaXRpb25lbmQgY29tcG9zaXRpb251cGRhdGVcIi5zcGxpdChcIiBcIiksV2U9MDtXZTxWZS5sZW5ndGg7V2UrKylOYy5zZXQoVmVbV2VdLDApO2VhKFwib25Nb3VzZUVudGVyXCIsW1wibW91c2VvdXRcIixcIm1vdXNlb3ZlclwiXSk7XG5lYShcIm9uTW91c2VMZWF2ZVwiLFtcIm1vdXNlb3V0XCIsXCJtb3VzZW92ZXJcIl0pO2VhKFwib25Qb2ludGVyRW50ZXJcIixbXCJwb2ludGVyb3V0XCIsXCJwb2ludGVyb3ZlclwiXSk7ZWEoXCJvblBvaW50ZXJMZWF2ZVwiLFtcInBvaW50ZXJvdXRcIixcInBvaW50ZXJvdmVyXCJdKTtkYShcIm9uQ2hhbmdlXCIsXCJjaGFuZ2UgY2xpY2sgZm9jdXNpbiBmb2N1c291dCBpbnB1dCBrZXlkb3duIGtleXVwIHNlbGVjdGlvbmNoYW5nZVwiLnNwbGl0KFwiIFwiKSk7ZGEoXCJvblNlbGVjdFwiLFwiZm9jdXNvdXQgY29udGV4dG1lbnUgZHJhZ2VuZCBmb2N1c2luIGtleWRvd24ga2V5dXAgbW91c2Vkb3duIG1vdXNldXAgc2VsZWN0aW9uY2hhbmdlXCIuc3BsaXQoXCIgXCIpKTtkYShcIm9uQmVmb3JlSW5wdXRcIixbXCJjb21wb3NpdGlvbmVuZFwiLFwia2V5cHJlc3NcIixcInRleHRJbnB1dFwiLFwicGFzdGVcIl0pO2RhKFwib25Db21wb3NpdGlvbkVuZFwiLFwiY29tcG9zaXRpb25lbmQgZm9jdXNvdXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBtb3VzZWRvd25cIi5zcGxpdChcIiBcIikpO1xuZGEoXCJvbkNvbXBvc2l0aW9uU3RhcnRcIixcImNvbXBvc2l0aW9uc3RhcnQgZm9jdXNvdXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBtb3VzZWRvd25cIi5zcGxpdChcIiBcIikpO2RhKFwib25Db21wb3NpdGlvblVwZGF0ZVwiLFwiY29tcG9zaXRpb251cGRhdGUgZm9jdXNvdXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBtb3VzZWRvd25cIi5zcGxpdChcIiBcIikpO3ZhciBYZT1cImFib3J0IGNhbnBsYXkgY2FucGxheXRocm91Z2ggZHVyYXRpb25jaGFuZ2UgZW1wdGllZCBlbmNyeXB0ZWQgZW5kZWQgZXJyb3IgbG9hZGVkZGF0YSBsb2FkZWRtZXRhZGF0YSBsb2Fkc3RhcnQgcGF1c2UgcGxheSBwbGF5aW5nIHByb2dyZXNzIHJhdGVjaGFuZ2Ugc2Vla2VkIHNlZWtpbmcgc3RhbGxlZCBzdXNwZW5kIHRpbWV1cGRhdGUgdm9sdW1lY2hhbmdlIHdhaXRpbmdcIi5zcGxpdChcIiBcIiksWWU9bmV3IFNldChcImNhbmNlbCBjbG9zZSBpbnZhbGlkIGxvYWQgc2Nyb2xsIHRvZ2dsZVwiLnNwbGl0KFwiIFwiKS5jb25jYXQoWGUpKTtcbmZ1bmN0aW9uIFplKGEsYixjKXt2YXIgZD1hLnR5cGV8fFwidW5rbm93bi1ldmVudFwiO2EuY3VycmVudFRhcmdldD1jO1liKGQsYix2b2lkIDAsYSk7YS5jdXJyZW50VGFyZ2V0PW51bGx9XG5mdW5jdGlvbiBzZShhLGIpe2I9MCE9PShiJjQpO2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKXt2YXIgZD1hW2NdLGU9ZC5ldmVudDtkPWQubGlzdGVuZXJzO2E6e3ZhciBmPXZvaWQgMDtpZihiKWZvcih2YXIgZz1kLmxlbmd0aC0xOzA8PWc7Zy0tKXt2YXIgaD1kW2ddLGs9aC5pbnN0YW5jZSxsPWguY3VycmVudFRhcmdldDtoPWgubGlzdGVuZXI7aWYoayE9PWYmJmUuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSlicmVhayBhO1plKGUsaCxsKTtmPWt9ZWxzZSBmb3IoZz0wO2c8ZC5sZW5ndGg7ZysrKXtoPWRbZ107az1oLmluc3RhbmNlO2w9aC5jdXJyZW50VGFyZ2V0O2g9aC5saXN0ZW5lcjtpZihrIT09ZiYmZS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKWJyZWFrIGE7WmUoZSxoLGwpO2Y9a319fWlmKFViKXRocm93IGE9VmIsVWI9ITEsVmI9bnVsbCxhO31cbmZ1bmN0aW9uIEcoYSxiKXt2YXIgYz0kZShiKSxkPWErXCJfX2J1YmJsZVwiO2MuaGFzKGQpfHwoYWYoYixhLDIsITEpLGMuYWRkKGQpKX12YXIgYmY9XCJfcmVhY3RMaXN0ZW5pbmdcIitNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyKTtmdW5jdGlvbiBjZihhKXthW2JmXXx8KGFbYmZdPSEwLGJhLmZvckVhY2goZnVuY3Rpb24oYil7WWUuaGFzKGIpfHxkZihiLCExLGEsbnVsbCk7ZGYoYiwhMCxhLG51bGwpfSkpfVxuZnVuY3Rpb24gZGYoYSxiLGMsZCl7dmFyIGU9NDxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbNF0/YXJndW1lbnRzWzRdOjAsZj1jO1wic2VsZWN0aW9uY2hhbmdlXCI9PT1hJiY5IT09Yy5ub2RlVHlwZSYmKGY9Yy5vd25lckRvY3VtZW50KTtpZihudWxsIT09ZCYmIWImJlllLmhhcyhhKSl7aWYoXCJzY3JvbGxcIiE9PWEpcmV0dXJuO2V8PTI7Zj1kfXZhciBnPSRlKGYpLGg9YStcIl9fXCIrKGI/XCJjYXB0dXJlXCI6XCJidWJibGVcIik7Zy5oYXMoaCl8fChiJiYoZXw9NCksYWYoZixhLGUsYiksZy5hZGQoaCkpfVxuZnVuY3Rpb24gYWYoYSxiLGMsZCl7dmFyIGU9TmMuZ2V0KGIpO3N3aXRjaCh2b2lkIDA9PT1lPzI6ZSl7Y2FzZSAwOmU9Z2Q7YnJlYWs7Y2FzZSAxOmU9aWQ7YnJlYWs7ZGVmYXVsdDplPWhkfWM9ZS5iaW5kKG51bGwsYixjLGEpO2U9dm9pZCAwOyFQYnx8XCJ0b3VjaHN0YXJ0XCIhPT1iJiZcInRvdWNobW92ZVwiIT09YiYmXCJ3aGVlbFwiIT09Ynx8KGU9ITApO2Q/dm9pZCAwIT09ZT9hLmFkZEV2ZW50TGlzdGVuZXIoYixjLHtjYXB0dXJlOiEwLHBhc3NpdmU6ZX0pOmEuYWRkRXZlbnRMaXN0ZW5lcihiLGMsITApOnZvaWQgMCE9PWU/YS5hZGRFdmVudExpc3RlbmVyKGIsYyx7cGFzc2l2ZTplfSk6YS5hZGRFdmVudExpc3RlbmVyKGIsYywhMSl9XG5mdW5jdGlvbiBqZChhLGIsYyxkLGUpe3ZhciBmPWQ7aWYoMD09PShiJjEpJiYwPT09KGImMikmJm51bGwhPT1kKWE6Zm9yKDs7KXtpZihudWxsPT09ZClyZXR1cm47dmFyIGc9ZC50YWc7aWYoMz09PWd8fDQ9PT1nKXt2YXIgaD1kLnN0YXRlTm9kZS5jb250YWluZXJJbmZvO2lmKGg9PT1lfHw4PT09aC5ub2RlVHlwZSYmaC5wYXJlbnROb2RlPT09ZSlicmVhaztpZig0PT09Zylmb3IoZz1kLnJldHVybjtudWxsIT09Zzspe3ZhciBrPWcudGFnO2lmKDM9PT1rfHw0PT09aylpZihrPWcuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8saz09PWV8fDg9PT1rLm5vZGVUeXBlJiZrLnBhcmVudE5vZGU9PT1lKXJldHVybjtnPWcucmV0dXJufWZvcig7bnVsbCE9PWg7KXtnPXdjKGgpO2lmKG51bGw9PT1nKXJldHVybjtrPWcudGFnO2lmKDU9PT1rfHw2PT09ayl7ZD1mPWc7Y29udGludWUgYX1oPWgucGFyZW50Tm9kZX19ZD1kLnJldHVybn1OYihmdW5jdGlvbigpe3ZhciBkPWYsZT14YihjKSxnPVtdO1xuYTp7dmFyIGg9TWMuZ2V0KGEpO2lmKHZvaWQgMCE9PWgpe3ZhciBrPXRkLHg9YTtzd2l0Y2goYSl7Y2FzZSBcImtleXByZXNzXCI6aWYoMD09PW9kKGMpKWJyZWFrIGE7Y2FzZSBcImtleWRvd25cIjpjYXNlIFwia2V5dXBcIjprPVJkO2JyZWFrO2Nhc2UgXCJmb2N1c2luXCI6eD1cImZvY3VzXCI7az1GZDticmVhaztjYXNlIFwiZm9jdXNvdXRcIjp4PVwiYmx1clwiO2s9RmQ7YnJlYWs7Y2FzZSBcImJlZm9yZWJsdXJcIjpjYXNlIFwiYWZ0ZXJibHVyXCI6az1GZDticmVhaztjYXNlIFwiY2xpY2tcIjppZigyPT09Yy5idXR0b24pYnJlYWsgYTtjYXNlIFwiYXV4Y2xpY2tcIjpjYXNlIFwiZGJsY2xpY2tcIjpjYXNlIFwibW91c2Vkb3duXCI6Y2FzZSBcIm1vdXNlbW92ZVwiOmNhc2UgXCJtb3VzZXVwXCI6Y2FzZSBcIm1vdXNlb3V0XCI6Y2FzZSBcIm1vdXNlb3ZlclwiOmNhc2UgXCJjb250ZXh0bWVudVwiOms9QmQ7YnJlYWs7Y2FzZSBcImRyYWdcIjpjYXNlIFwiZHJhZ2VuZFwiOmNhc2UgXCJkcmFnZW50ZXJcIjpjYXNlIFwiZHJhZ2V4aXRcIjpjYXNlIFwiZHJhZ2xlYXZlXCI6Y2FzZSBcImRyYWdvdmVyXCI6Y2FzZSBcImRyYWdzdGFydFwiOmNhc2UgXCJkcm9wXCI6az1cbkRkO2JyZWFrO2Nhc2UgXCJ0b3VjaGNhbmNlbFwiOmNhc2UgXCJ0b3VjaGVuZFwiOmNhc2UgXCJ0b3VjaG1vdmVcIjpjYXNlIFwidG91Y2hzdGFydFwiOms9VmQ7YnJlYWs7Y2FzZSBJYzpjYXNlIEpjOmNhc2UgS2M6az1IZDticmVhaztjYXNlIExjOms9WGQ7YnJlYWs7Y2FzZSBcInNjcm9sbFwiOms9dmQ7YnJlYWs7Y2FzZSBcIndoZWVsXCI6az1aZDticmVhaztjYXNlIFwiY29weVwiOmNhc2UgXCJjdXRcIjpjYXNlIFwicGFzdGVcIjprPUpkO2JyZWFrO2Nhc2UgXCJnb3Rwb2ludGVyY2FwdHVyZVwiOmNhc2UgXCJsb3N0cG9pbnRlcmNhcHR1cmVcIjpjYXNlIFwicG9pbnRlcmNhbmNlbFwiOmNhc2UgXCJwb2ludGVyZG93blwiOmNhc2UgXCJwb2ludGVybW92ZVwiOmNhc2UgXCJwb2ludGVyb3V0XCI6Y2FzZSBcInBvaW50ZXJvdmVyXCI6Y2FzZSBcInBvaW50ZXJ1cFwiOms9VGR9dmFyIHc9MCE9PShiJjQpLHo9IXcmJlwic2Nyb2xsXCI9PT1hLHU9dz9udWxsIT09aD9oK1wiQ2FwdHVyZVwiOm51bGw6aDt3PVtdO2Zvcih2YXIgdD1kLHE7bnVsbCE9PVxudDspe3E9dDt2YXIgdj1xLnN0YXRlTm9kZTs1PT09cS50YWcmJm51bGwhPT12JiYocT12LG51bGwhPT11JiYodj1PYih0LHUpLG51bGwhPXYmJncucHVzaChlZih0LHYscSkpKSk7aWYoeilicmVhazt0PXQucmV0dXJufTA8dy5sZW5ndGgmJihoPW5ldyBrKGgseCxudWxsLGMsZSksZy5wdXNoKHtldmVudDpoLGxpc3RlbmVyczp3fSkpfX1pZigwPT09KGImNykpe2E6e2g9XCJtb3VzZW92ZXJcIj09PWF8fFwicG9pbnRlcm92ZXJcIj09PWE7az1cIm1vdXNlb3V0XCI9PT1hfHxcInBvaW50ZXJvdXRcIj09PWE7aWYoaCYmMD09PShiJjE2KSYmKHg9Yy5yZWxhdGVkVGFyZ2V0fHxjLmZyb21FbGVtZW50KSYmKHdjKHgpfHx4W2ZmXSkpYnJlYWsgYTtpZihrfHxoKXtoPWUud2luZG93PT09ZT9lOihoPWUub3duZXJEb2N1bWVudCk/aC5kZWZhdWx0Vmlld3x8aC5wYXJlbnRXaW5kb3c6d2luZG93O2lmKGspe2lmKHg9Yy5yZWxhdGVkVGFyZ2V0fHxjLnRvRWxlbWVudCxrPWQseD14P3djKHgpOm51bGwsbnVsbCE9PVxueCYmKHo9WmIoeCkseCE9PXp8fDUhPT14LnRhZyYmNiE9PXgudGFnKSl4PW51bGx9ZWxzZSBrPW51bGwseD1kO2lmKGshPT14KXt3PUJkO3Y9XCJvbk1vdXNlTGVhdmVcIjt1PVwib25Nb3VzZUVudGVyXCI7dD1cIm1vdXNlXCI7aWYoXCJwb2ludGVyb3V0XCI9PT1hfHxcInBvaW50ZXJvdmVyXCI9PT1hKXc9VGQsdj1cIm9uUG9pbnRlckxlYXZlXCIsdT1cIm9uUG9pbnRlckVudGVyXCIsdD1cInBvaW50ZXJcIjt6PW51bGw9PWs/aDp1ZShrKTtxPW51bGw9PXg/aDp1ZSh4KTtoPW5ldyB3KHYsdCtcImxlYXZlXCIsayxjLGUpO2gudGFyZ2V0PXo7aC5yZWxhdGVkVGFyZ2V0PXE7dj1udWxsO3djKGUpPT09ZCYmKHc9bmV3IHcodSx0K1wiZW50ZXJcIix4LGMsZSksdy50YXJnZXQ9cSx3LnJlbGF0ZWRUYXJnZXQ9eix2PXcpO3o9djtpZihrJiZ4KWI6e3c9azt1PXg7dD0wO2ZvcihxPXc7cTtxPWdmKHEpKXQrKztxPTA7Zm9yKHY9dTt2O3Y9Z2YodikpcSsrO2Zvcig7MDx0LXE7KXc9Z2YodyksdC0tO2Zvcig7MDxxLXQ7KXU9XG5nZih1KSxxLS07Zm9yKDt0LS07KXtpZih3PT09dXx8bnVsbCE9PXUmJnc9PT11LmFsdGVybmF0ZSlicmVhayBiO3c9Z2Yodyk7dT1nZih1KX13PW51bGx9ZWxzZSB3PW51bGw7bnVsbCE9PWsmJmhmKGcsaCxrLHcsITEpO251bGwhPT14JiZudWxsIT09eiYmaGYoZyx6LHgsdywhMCl9fX1hOntoPWQ/dWUoZCk6d2luZG93O2s9aC5ub2RlTmFtZSYmaC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO2lmKFwic2VsZWN0XCI9PT1rfHxcImlucHV0XCI9PT1rJiZcImZpbGVcIj09PWgudHlwZSl2YXIgSj12ZTtlbHNlIGlmKG1lKGgpKWlmKHdlKUo9RmU7ZWxzZXtKPURlO3ZhciBLPUNlfWVsc2Uoaz1oLm5vZGVOYW1lKSYmXCJpbnB1dFwiPT09ay50b0xvd2VyQ2FzZSgpJiYoXCJjaGVja2JveFwiPT09aC50eXBlfHxcInJhZGlvXCI9PT1oLnR5cGUpJiYoSj1FZSk7aWYoSiYmKEo9SihhLGQpKSl7bmUoZyxKLGMsZSk7YnJlYWsgYX1LJiZLKGEsaCxkKTtcImZvY3Vzb3V0XCI9PT1hJiYoSz1oLl93cmFwcGVyU3RhdGUpJiZcbksuY29udHJvbGxlZCYmXCJudW1iZXJcIj09PWgudHlwZSYmYmIoaCxcIm51bWJlclwiLGgudmFsdWUpfUs9ZD91ZShkKTp3aW5kb3c7c3dpdGNoKGEpe2Nhc2UgXCJmb2N1c2luXCI6aWYobWUoSyl8fFwidHJ1ZVwiPT09Sy5jb250ZW50RWRpdGFibGUpUWU9SyxSZT1kLFNlPW51bGw7YnJlYWs7Y2FzZSBcImZvY3Vzb3V0XCI6U2U9UmU9UWU9bnVsbDticmVhaztjYXNlIFwibW91c2Vkb3duXCI6VGU9ITA7YnJlYWs7Y2FzZSBcImNvbnRleHRtZW51XCI6Y2FzZSBcIm1vdXNldXBcIjpjYXNlIFwiZHJhZ2VuZFwiOlRlPSExO1VlKGcsYyxlKTticmVhaztjYXNlIFwic2VsZWN0aW9uY2hhbmdlXCI6aWYoUGUpYnJlYWs7Y2FzZSBcImtleWRvd25cIjpjYXNlIFwia2V5dXBcIjpVZShnLGMsZSl9dmFyIFE7aWYoYWUpYjp7c3dpdGNoKGEpe2Nhc2UgXCJjb21wb3NpdGlvbnN0YXJ0XCI6dmFyIEw9XCJvbkNvbXBvc2l0aW9uU3RhcnRcIjticmVhayBiO2Nhc2UgXCJjb21wb3NpdGlvbmVuZFwiOkw9XCJvbkNvbXBvc2l0aW9uRW5kXCI7YnJlYWsgYjtcbmNhc2UgXCJjb21wb3NpdGlvbnVwZGF0ZVwiOkw9XCJvbkNvbXBvc2l0aW9uVXBkYXRlXCI7YnJlYWsgYn1MPXZvaWQgMH1lbHNlIGllP2dlKGEsYykmJihMPVwib25Db21wb3NpdGlvbkVuZFwiKTpcImtleWRvd25cIj09PWEmJjIyOT09PWMua2V5Q29kZSYmKEw9XCJvbkNvbXBvc2l0aW9uU3RhcnRcIik7TCYmKGRlJiZcImtvXCIhPT1jLmxvY2FsZSYmKGllfHxcIm9uQ29tcG9zaXRpb25TdGFydFwiIT09TD9cIm9uQ29tcG9zaXRpb25FbmRcIj09PUwmJmllJiYoUT1uZCgpKTooa2Q9ZSxsZD1cInZhbHVlXCJpbiBrZD9rZC52YWx1ZTprZC50ZXh0Q29udGVudCxpZT0hMCkpLEs9b2UoZCxMKSwwPEsubGVuZ3RoJiYoTD1uZXcgTGQoTCxhLG51bGwsYyxlKSxnLnB1c2goe2V2ZW50OkwsbGlzdGVuZXJzOkt9KSxRP0wuZGF0YT1ROihRPWhlKGMpLG51bGwhPT1RJiYoTC5kYXRhPVEpKSkpO2lmKFE9Y2U/amUoYSxjKTprZShhLGMpKWQ9b2UoZCxcIm9uQmVmb3JlSW5wdXRcIiksMDxkLmxlbmd0aCYmKGU9bmV3IExkKFwib25CZWZvcmVJbnB1dFwiLFxuXCJiZWZvcmVpbnB1dFwiLG51bGwsYyxlKSxnLnB1c2goe2V2ZW50OmUsbGlzdGVuZXJzOmR9KSxlLmRhdGE9USl9c2UoZyxiKX0pfWZ1bmN0aW9uIGVmKGEsYixjKXtyZXR1cm57aW5zdGFuY2U6YSxsaXN0ZW5lcjpiLGN1cnJlbnRUYXJnZXQ6Y319ZnVuY3Rpb24gb2UoYSxiKXtmb3IodmFyIGM9YitcIkNhcHR1cmVcIixkPVtdO251bGwhPT1hOyl7dmFyIGU9YSxmPWUuc3RhdGVOb2RlOzU9PT1lLnRhZyYmbnVsbCE9PWYmJihlPWYsZj1PYihhLGMpLG51bGwhPWYmJmQudW5zaGlmdChlZihhLGYsZSkpLGY9T2IoYSxiKSxudWxsIT1mJiZkLnB1c2goZWYoYSxmLGUpKSk7YT1hLnJldHVybn1yZXR1cm4gZH1mdW5jdGlvbiBnZihhKXtpZihudWxsPT09YSlyZXR1cm4gbnVsbDtkbyBhPWEucmV0dXJuO3doaWxlKGEmJjUhPT1hLnRhZyk7cmV0dXJuIGE/YTpudWxsfVxuZnVuY3Rpb24gaGYoYSxiLGMsZCxlKXtmb3IodmFyIGY9Yi5fcmVhY3ROYW1lLGc9W107bnVsbCE9PWMmJmMhPT1kOyl7dmFyIGg9YyxrPWguYWx0ZXJuYXRlLGw9aC5zdGF0ZU5vZGU7aWYobnVsbCE9PWsmJms9PT1kKWJyZWFrOzU9PT1oLnRhZyYmbnVsbCE9PWwmJihoPWwsZT8oaz1PYihjLGYpLG51bGwhPWsmJmcudW5zaGlmdChlZihjLGssaCkpKTplfHwoaz1PYihjLGYpLG51bGwhPWsmJmcucHVzaChlZihjLGssaCkpKSk7Yz1jLnJldHVybn0wIT09Zy5sZW5ndGgmJmEucHVzaCh7ZXZlbnQ6YixsaXN0ZW5lcnM6Z30pfWZ1bmN0aW9uIGpmKCl7fXZhciBrZj1udWxsLGxmPW51bGw7ZnVuY3Rpb24gbWYoYSxiKXtzd2l0Y2goYSl7Y2FzZSBcImJ1dHRvblwiOmNhc2UgXCJpbnB1dFwiOmNhc2UgXCJzZWxlY3RcIjpjYXNlIFwidGV4dGFyZWFcIjpyZXR1cm4hIWIuYXV0b0ZvY3VzfXJldHVybiExfVxuZnVuY3Rpb24gbmYoYSxiKXtyZXR1cm5cInRleHRhcmVhXCI9PT1hfHxcIm9wdGlvblwiPT09YXx8XCJub3NjcmlwdFwiPT09YXx8XCJzdHJpbmdcIj09PXR5cGVvZiBiLmNoaWxkcmVufHxcIm51bWJlclwiPT09dHlwZW9mIGIuY2hpbGRyZW58fFwib2JqZWN0XCI9PT10eXBlb2YgYi5kYW5nZXJvdXNseVNldElubmVySFRNTCYmbnVsbCE9PWIuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwmJm51bGwhPWIuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwuX19odG1sfXZhciBvZj1cImZ1bmN0aW9uXCI9PT10eXBlb2Ygc2V0VGltZW91dD9zZXRUaW1lb3V0OnZvaWQgMCxwZj1cImZ1bmN0aW9uXCI9PT10eXBlb2YgY2xlYXJUaW1lb3V0P2NsZWFyVGltZW91dDp2b2lkIDA7ZnVuY3Rpb24gcWYoYSl7MT09PWEubm9kZVR5cGU/YS50ZXh0Q29udGVudD1cIlwiOjk9PT1hLm5vZGVUeXBlJiYoYT1hLmJvZHksbnVsbCE9YSYmKGEudGV4dENvbnRlbnQ9XCJcIikpfVxuZnVuY3Rpb24gcmYoYSl7Zm9yKDtudWxsIT1hO2E9YS5uZXh0U2libGluZyl7dmFyIGI9YS5ub2RlVHlwZTtpZigxPT09Ynx8Mz09PWIpYnJlYWt9cmV0dXJuIGF9ZnVuY3Rpb24gc2YoYSl7YT1hLnByZXZpb3VzU2libGluZztmb3IodmFyIGI9MDthOyl7aWYoOD09PWEubm9kZVR5cGUpe3ZhciBjPWEuZGF0YTtpZihcIiRcIj09PWN8fFwiJCFcIj09PWN8fFwiJD9cIj09PWMpe2lmKDA9PT1iKXJldHVybiBhO2ItLX1lbHNlXCIvJFwiPT09YyYmYisrfWE9YS5wcmV2aW91c1NpYmxpbmd9cmV0dXJuIG51bGx9dmFyIHRmPTA7ZnVuY3Rpb24gdWYoYSl7cmV0dXJueyQkdHlwZW9mOkdhLHRvU3RyaW5nOmEsdmFsdWVPZjphfX12YXIgdmY9TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMiksd2Y9XCJfX3JlYWN0RmliZXIkXCIrdmYseGY9XCJfX3JlYWN0UHJvcHMkXCIrdmYsZmY9XCJfX3JlYWN0Q29udGFpbmVyJFwiK3ZmLHlmPVwiX19yZWFjdEV2ZW50cyRcIit2ZjtcbmZ1bmN0aW9uIHdjKGEpe3ZhciBiPWFbd2ZdO2lmKGIpcmV0dXJuIGI7Zm9yKHZhciBjPWEucGFyZW50Tm9kZTtjOyl7aWYoYj1jW2ZmXXx8Y1t3Zl0pe2M9Yi5hbHRlcm5hdGU7aWYobnVsbCE9PWIuY2hpbGR8fG51bGwhPT1jJiZudWxsIT09Yy5jaGlsZClmb3IoYT1zZihhKTtudWxsIT09YTspe2lmKGM9YVt3Zl0pcmV0dXJuIGM7YT1zZihhKX1yZXR1cm4gYn1hPWM7Yz1hLnBhcmVudE5vZGV9cmV0dXJuIG51bGx9ZnVuY3Rpb24gQ2IoYSl7YT1hW3dmXXx8YVtmZl07cmV0dXJuIWF8fDUhPT1hLnRhZyYmNiE9PWEudGFnJiYxMyE9PWEudGFnJiYzIT09YS50YWc/bnVsbDphfWZ1bmN0aW9uIHVlKGEpe2lmKDU9PT1hLnRhZ3x8Nj09PWEudGFnKXJldHVybiBhLnN0YXRlTm9kZTt0aHJvdyBFcnJvcih5KDMzKSk7fWZ1bmN0aW9uIERiKGEpe3JldHVybiBhW3hmXXx8bnVsbH1cbmZ1bmN0aW9uICRlKGEpe3ZhciBiPWFbeWZdO3ZvaWQgMD09PWImJihiPWFbeWZdPW5ldyBTZXQpO3JldHVybiBifXZhciB6Zj1bXSxBZj0tMTtmdW5jdGlvbiBCZihhKXtyZXR1cm57Y3VycmVudDphfX1mdW5jdGlvbiBIKGEpezA+QWZ8fChhLmN1cnJlbnQ9emZbQWZdLHpmW0FmXT1udWxsLEFmLS0pfWZ1bmN0aW9uIEkoYSxiKXtBZisrO3pmW0FmXT1hLmN1cnJlbnQ7YS5jdXJyZW50PWJ9dmFyIENmPXt9LE09QmYoQ2YpLE49QmYoITEpLERmPUNmO1xuZnVuY3Rpb24gRWYoYSxiKXt2YXIgYz1hLnR5cGUuY29udGV4dFR5cGVzO2lmKCFjKXJldHVybiBDZjt2YXIgZD1hLnN0YXRlTm9kZTtpZihkJiZkLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkVW5tYXNrZWRDaGlsZENvbnRleHQ9PT1iKXJldHVybiBkLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWFza2VkQ2hpbGRDb250ZXh0O3ZhciBlPXt9LGY7Zm9yKGYgaW4gYyllW2ZdPWJbZl07ZCYmKGE9YS5zdGF0ZU5vZGUsYS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZFVubWFza2VkQ2hpbGRDb250ZXh0PWIsYS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1hc2tlZENoaWxkQ29udGV4dD1lKTtyZXR1cm4gZX1mdW5jdGlvbiBGZihhKXthPWEuY2hpbGRDb250ZXh0VHlwZXM7cmV0dXJuIG51bGwhPT1hJiZ2b2lkIDAhPT1hfWZ1bmN0aW9uIEdmKCl7SChOKTtIKE0pfWZ1bmN0aW9uIEhmKGEsYixjKXtpZihNLmN1cnJlbnQhPT1DZil0aHJvdyBFcnJvcih5KDE2OCkpO0koTSxiKTtJKE4sYyl9XG5mdW5jdGlvbiBJZihhLGIsYyl7dmFyIGQ9YS5zdGF0ZU5vZGU7YT1iLmNoaWxkQ29udGV4dFR5cGVzO2lmKFwiZnVuY3Rpb25cIiE9PXR5cGVvZiBkLmdldENoaWxkQ29udGV4dClyZXR1cm4gYztkPWQuZ2V0Q2hpbGRDb250ZXh0KCk7Zm9yKHZhciBlIGluIGQpaWYoIShlIGluIGEpKXRocm93IEVycm9yKHkoMTA4LFJhKGIpfHxcIlVua25vd25cIixlKSk7cmV0dXJuIG0oe30sYyxkKX1mdW5jdGlvbiBKZihhKXthPShhPWEuc3RhdGVOb2RlKSYmYS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1lcmdlZENoaWxkQ29udGV4dHx8Q2Y7RGY9TS5jdXJyZW50O0koTSxhKTtJKE4sTi5jdXJyZW50KTtyZXR1cm4hMH1mdW5jdGlvbiBLZihhLGIsYyl7dmFyIGQ9YS5zdGF0ZU5vZGU7aWYoIWQpdGhyb3cgRXJyb3IoeSgxNjkpKTtjPyhhPUlmKGEsYixEZiksZC5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1lcmdlZENoaWxkQ29udGV4dD1hLEgoTiksSChNKSxJKE0sYSkpOkgoTik7SShOLGMpfVxudmFyIExmPW51bGwsTWY9bnVsbCxOZj1yLnVuc3RhYmxlX3J1bldpdGhQcmlvcml0eSxPZj1yLnVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2ssUGY9ci51bnN0YWJsZV9jYW5jZWxDYWxsYmFjayxRZj1yLnVuc3RhYmxlX3Nob3VsZFlpZWxkLFJmPXIudW5zdGFibGVfcmVxdWVzdFBhaW50LFNmPXIudW5zdGFibGVfbm93LFRmPXIudW5zdGFibGVfZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwsVWY9ci51bnN0YWJsZV9JbW1lZGlhdGVQcmlvcml0eSxWZj1yLnVuc3RhYmxlX1VzZXJCbG9ja2luZ1ByaW9yaXR5LFdmPXIudW5zdGFibGVfTm9ybWFsUHJpb3JpdHksWGY9ci51bnN0YWJsZV9Mb3dQcmlvcml0eSxZZj1yLnVuc3RhYmxlX0lkbGVQcmlvcml0eSxaZj17fSwkZj12b2lkIDAhPT1SZj9SZjpmdW5jdGlvbigpe30sYWc9bnVsbCxiZz1udWxsLGNnPSExLGRnPVNmKCksTz0xRTQ+ZGc/U2Y6ZnVuY3Rpb24oKXtyZXR1cm4gU2YoKS1kZ307XG5mdW5jdGlvbiBlZygpe3N3aXRjaChUZigpKXtjYXNlIFVmOnJldHVybiA5OTtjYXNlIFZmOnJldHVybiA5ODtjYXNlIFdmOnJldHVybiA5NztjYXNlIFhmOnJldHVybiA5NjtjYXNlIFlmOnJldHVybiA5NTtkZWZhdWx0OnRocm93IEVycm9yKHkoMzMyKSk7fX1mdW5jdGlvbiBmZyhhKXtzd2l0Y2goYSl7Y2FzZSA5OTpyZXR1cm4gVWY7Y2FzZSA5ODpyZXR1cm4gVmY7Y2FzZSA5NzpyZXR1cm4gV2Y7Y2FzZSA5NjpyZXR1cm4gWGY7Y2FzZSA5NTpyZXR1cm4gWWY7ZGVmYXVsdDp0aHJvdyBFcnJvcih5KDMzMikpO319ZnVuY3Rpb24gZ2coYSxiKXthPWZnKGEpO3JldHVybiBOZihhLGIpfWZ1bmN0aW9uIGhnKGEsYixjKXthPWZnKGEpO3JldHVybiBPZihhLGIsYyl9ZnVuY3Rpb24gaWcoKXtpZihudWxsIT09Ymcpe3ZhciBhPWJnO2JnPW51bGw7UGYoYSl9amcoKX1cbmZ1bmN0aW9uIGpnKCl7aWYoIWNnJiZudWxsIT09YWcpe2NnPSEwO3ZhciBhPTA7dHJ5e3ZhciBiPWFnO2dnKDk5LGZ1bmN0aW9uKCl7Zm9yKDthPGIubGVuZ3RoO2ErKyl7dmFyIGM9YlthXTtkbyBjPWMoITApO3doaWxlKG51bGwhPT1jKX19KTthZz1udWxsfWNhdGNoKGMpe3Rocm93IG51bGwhPT1hZyYmKGFnPWFnLnNsaWNlKGErMSkpLE9mKFVmLGlnKSxjO31maW5hbGx5e2NnPSExfX19dmFyIGtnPXJhLlJlYWN0Q3VycmVudEJhdGNoQ29uZmlnO2Z1bmN0aW9uIGxnKGEsYil7aWYoYSYmYS5kZWZhdWx0UHJvcHMpe2I9bSh7fSxiKTthPWEuZGVmYXVsdFByb3BzO2Zvcih2YXIgYyBpbiBhKXZvaWQgMD09PWJbY10mJihiW2NdPWFbY10pO3JldHVybiBifXJldHVybiBifXZhciBtZz1CZihudWxsKSxuZz1udWxsLG9nPW51bGwscGc9bnVsbDtmdW5jdGlvbiBxZygpe3BnPW9nPW5nPW51bGx9XG5mdW5jdGlvbiByZyhhKXt2YXIgYj1tZy5jdXJyZW50O0gobWcpO2EudHlwZS5fY29udGV4dC5fY3VycmVudFZhbHVlPWJ9ZnVuY3Rpb24gc2coYSxiKXtmb3IoO251bGwhPT1hOyl7dmFyIGM9YS5hbHRlcm5hdGU7aWYoKGEuY2hpbGRMYW5lcyZiKT09PWIpaWYobnVsbD09PWN8fChjLmNoaWxkTGFuZXMmYik9PT1iKWJyZWFrO2Vsc2UgYy5jaGlsZExhbmVzfD1iO2Vsc2UgYS5jaGlsZExhbmVzfD1iLG51bGwhPT1jJiYoYy5jaGlsZExhbmVzfD1iKTthPWEucmV0dXJufX1mdW5jdGlvbiB0ZyhhLGIpe25nPWE7cGc9b2c9bnVsbDthPWEuZGVwZW5kZW5jaWVzO251bGwhPT1hJiZudWxsIT09YS5maXJzdENvbnRleHQmJigwIT09KGEubGFuZXMmYikmJih1Zz0hMCksYS5maXJzdENvbnRleHQ9bnVsbCl9XG5mdW5jdGlvbiB2ZyhhLGIpe2lmKHBnIT09YSYmITEhPT1iJiYwIT09Yil7aWYoXCJudW1iZXJcIiE9PXR5cGVvZiBifHwxMDczNzQxODIzPT09YilwZz1hLGI9MTA3Mzc0MTgyMztiPXtjb250ZXh0OmEsb2JzZXJ2ZWRCaXRzOmIsbmV4dDpudWxsfTtpZihudWxsPT09b2cpe2lmKG51bGw9PT1uZyl0aHJvdyBFcnJvcih5KDMwOCkpO29nPWI7bmcuZGVwZW5kZW5jaWVzPXtsYW5lczowLGZpcnN0Q29udGV4dDpiLHJlc3BvbmRlcnM6bnVsbH19ZWxzZSBvZz1vZy5uZXh0PWJ9cmV0dXJuIGEuX2N1cnJlbnRWYWx1ZX12YXIgd2c9ITE7ZnVuY3Rpb24geGcoYSl7YS51cGRhdGVRdWV1ZT17YmFzZVN0YXRlOmEubWVtb2l6ZWRTdGF0ZSxmaXJzdEJhc2VVcGRhdGU6bnVsbCxsYXN0QmFzZVVwZGF0ZTpudWxsLHNoYXJlZDp7cGVuZGluZzpudWxsfSxlZmZlY3RzOm51bGx9fVxuZnVuY3Rpb24geWcoYSxiKXthPWEudXBkYXRlUXVldWU7Yi51cGRhdGVRdWV1ZT09PWEmJihiLnVwZGF0ZVF1ZXVlPXtiYXNlU3RhdGU6YS5iYXNlU3RhdGUsZmlyc3RCYXNlVXBkYXRlOmEuZmlyc3RCYXNlVXBkYXRlLGxhc3RCYXNlVXBkYXRlOmEubGFzdEJhc2VVcGRhdGUsc2hhcmVkOmEuc2hhcmVkLGVmZmVjdHM6YS5lZmZlY3RzfSl9ZnVuY3Rpb24gemcoYSxiKXtyZXR1cm57ZXZlbnRUaW1lOmEsbGFuZTpiLHRhZzowLHBheWxvYWQ6bnVsbCxjYWxsYmFjazpudWxsLG5leHQ6bnVsbH19ZnVuY3Rpb24gQWcoYSxiKXthPWEudXBkYXRlUXVldWU7aWYobnVsbCE9PWEpe2E9YS5zaGFyZWQ7dmFyIGM9YS5wZW5kaW5nO251bGw9PT1jP2IubmV4dD1iOihiLm5leHQ9Yy5uZXh0LGMubmV4dD1iKTthLnBlbmRpbmc9Yn19XG5mdW5jdGlvbiBCZyhhLGIpe3ZhciBjPWEudXBkYXRlUXVldWUsZD1hLmFsdGVybmF0ZTtpZihudWxsIT09ZCYmKGQ9ZC51cGRhdGVRdWV1ZSxjPT09ZCkpe3ZhciBlPW51bGwsZj1udWxsO2M9Yy5maXJzdEJhc2VVcGRhdGU7aWYobnVsbCE9PWMpe2Rve3ZhciBnPXtldmVudFRpbWU6Yy5ldmVudFRpbWUsbGFuZTpjLmxhbmUsdGFnOmMudGFnLHBheWxvYWQ6Yy5wYXlsb2FkLGNhbGxiYWNrOmMuY2FsbGJhY2ssbmV4dDpudWxsfTtudWxsPT09Zj9lPWY9ZzpmPWYubmV4dD1nO2M9Yy5uZXh0fXdoaWxlKG51bGwhPT1jKTtudWxsPT09Zj9lPWY9YjpmPWYubmV4dD1ifWVsc2UgZT1mPWI7Yz17YmFzZVN0YXRlOmQuYmFzZVN0YXRlLGZpcnN0QmFzZVVwZGF0ZTplLGxhc3RCYXNlVXBkYXRlOmYsc2hhcmVkOmQuc2hhcmVkLGVmZmVjdHM6ZC5lZmZlY3RzfTthLnVwZGF0ZVF1ZXVlPWM7cmV0dXJufWE9Yy5sYXN0QmFzZVVwZGF0ZTtudWxsPT09YT9jLmZpcnN0QmFzZVVwZGF0ZT1iOmEubmV4dD1cbmI7Yy5sYXN0QmFzZVVwZGF0ZT1ifVxuZnVuY3Rpb24gQ2coYSxiLGMsZCl7dmFyIGU9YS51cGRhdGVRdWV1ZTt3Zz0hMTt2YXIgZj1lLmZpcnN0QmFzZVVwZGF0ZSxnPWUubGFzdEJhc2VVcGRhdGUsaD1lLnNoYXJlZC5wZW5kaW5nO2lmKG51bGwhPT1oKXtlLnNoYXJlZC5wZW5kaW5nPW51bGw7dmFyIGs9aCxsPWsubmV4dDtrLm5leHQ9bnVsbDtudWxsPT09Zz9mPWw6Zy5uZXh0PWw7Zz1rO3ZhciBuPWEuYWx0ZXJuYXRlO2lmKG51bGwhPT1uKXtuPW4udXBkYXRlUXVldWU7dmFyIEE9bi5sYXN0QmFzZVVwZGF0ZTtBIT09ZyYmKG51bGw9PT1BP24uZmlyc3RCYXNlVXBkYXRlPWw6QS5uZXh0PWwsbi5sYXN0QmFzZVVwZGF0ZT1rKX19aWYobnVsbCE9PWYpe0E9ZS5iYXNlU3RhdGU7Zz0wO249bD1rPW51bGw7ZG97aD1mLmxhbmU7dmFyIHA9Zi5ldmVudFRpbWU7aWYoKGQmaCk9PT1oKXtudWxsIT09biYmKG49bi5uZXh0PXtldmVudFRpbWU6cCxsYW5lOjAsdGFnOmYudGFnLHBheWxvYWQ6Zi5wYXlsb2FkLGNhbGxiYWNrOmYuY2FsbGJhY2ssXG5uZXh0Om51bGx9KTthOnt2YXIgQz1hLHg9ZjtoPWI7cD1jO3N3aXRjaCh4LnRhZyl7Y2FzZSAxOkM9eC5wYXlsb2FkO2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBDKXtBPUMuY2FsbChwLEEsaCk7YnJlYWsgYX1BPUM7YnJlYWsgYTtjYXNlIDM6Qy5mbGFncz1DLmZsYWdzJi00MDk3fDY0O2Nhc2UgMDpDPXgucGF5bG9hZDtoPVwiZnVuY3Rpb25cIj09PXR5cGVvZiBDP0MuY2FsbChwLEEsaCk6QztpZihudWxsPT09aHx8dm9pZCAwPT09aClicmVhayBhO0E9bSh7fSxBLGgpO2JyZWFrIGE7Y2FzZSAyOndnPSEwfX1udWxsIT09Zi5jYWxsYmFjayYmKGEuZmxhZ3N8PTMyLGg9ZS5lZmZlY3RzLG51bGw9PT1oP2UuZWZmZWN0cz1bZl06aC5wdXNoKGYpKX1lbHNlIHA9e2V2ZW50VGltZTpwLGxhbmU6aCx0YWc6Zi50YWcscGF5bG9hZDpmLnBheWxvYWQsY2FsbGJhY2s6Zi5jYWxsYmFjayxuZXh0Om51bGx9LG51bGw9PT1uPyhsPW49cCxrPUEpOm49bi5uZXh0PXAsZ3w9aDtmPWYubmV4dDtpZihudWxsPT09XG5mKWlmKGg9ZS5zaGFyZWQucGVuZGluZyxudWxsPT09aClicmVhaztlbHNlIGY9aC5uZXh0LGgubmV4dD1udWxsLGUubGFzdEJhc2VVcGRhdGU9aCxlLnNoYXJlZC5wZW5kaW5nPW51bGx9d2hpbGUoMSk7bnVsbD09PW4mJihrPUEpO2UuYmFzZVN0YXRlPWs7ZS5maXJzdEJhc2VVcGRhdGU9bDtlLmxhc3RCYXNlVXBkYXRlPW47RGd8PWc7YS5sYW5lcz1nO2EubWVtb2l6ZWRTdGF0ZT1BfX1mdW5jdGlvbiBFZyhhLGIsYyl7YT1iLmVmZmVjdHM7Yi5lZmZlY3RzPW51bGw7aWYobnVsbCE9PWEpZm9yKGI9MDtiPGEubGVuZ3RoO2IrKyl7dmFyIGQ9YVtiXSxlPWQuY2FsbGJhY2s7aWYobnVsbCE9PWUpe2QuY2FsbGJhY2s9bnVsbDtkPWM7aWYoXCJmdW5jdGlvblwiIT09dHlwZW9mIGUpdGhyb3cgRXJyb3IoeSgxOTEsZSkpO2UuY2FsbChkKX19fXZhciBGZz0obmV3IGFhLkNvbXBvbmVudCkucmVmcztcbmZ1bmN0aW9uIEdnKGEsYixjLGQpe2I9YS5tZW1vaXplZFN0YXRlO2M9YyhkLGIpO2M9bnVsbD09PWN8fHZvaWQgMD09PWM/YjptKHt9LGIsYyk7YS5tZW1vaXplZFN0YXRlPWM7MD09PWEubGFuZXMmJihhLnVwZGF0ZVF1ZXVlLmJhc2VTdGF0ZT1jKX1cbnZhciBLZz17aXNNb3VudGVkOmZ1bmN0aW9uKGEpe3JldHVybihhPWEuX3JlYWN0SW50ZXJuYWxzKT9aYihhKT09PWE6ITF9LGVucXVldWVTZXRTdGF0ZTpmdW5jdGlvbihhLGIsYyl7YT1hLl9yZWFjdEludGVybmFsczt2YXIgZD1IZygpLGU9SWcoYSksZj16ZyhkLGUpO2YucGF5bG9hZD1iO3ZvaWQgMCE9PWMmJm51bGwhPT1jJiYoZi5jYWxsYmFjaz1jKTtBZyhhLGYpO0pnKGEsZSxkKX0sZW5xdWV1ZVJlcGxhY2VTdGF0ZTpmdW5jdGlvbihhLGIsYyl7YT1hLl9yZWFjdEludGVybmFsczt2YXIgZD1IZygpLGU9SWcoYSksZj16ZyhkLGUpO2YudGFnPTE7Zi5wYXlsb2FkPWI7dm9pZCAwIT09YyYmbnVsbCE9PWMmJihmLmNhbGxiYWNrPWMpO0FnKGEsZik7SmcoYSxlLGQpfSxlbnF1ZXVlRm9yY2VVcGRhdGU6ZnVuY3Rpb24oYSxiKXthPWEuX3JlYWN0SW50ZXJuYWxzO3ZhciBjPUhnKCksZD1JZyhhKSxlPXpnKGMsZCk7ZS50YWc9Mjt2b2lkIDAhPT1iJiZudWxsIT09YiYmKGUuY2FsbGJhY2s9XG5iKTtBZyhhLGUpO0pnKGEsZCxjKX19O2Z1bmN0aW9uIExnKGEsYixjLGQsZSxmLGcpe2E9YS5zdGF0ZU5vZGU7cmV0dXJuXCJmdW5jdGlvblwiPT09dHlwZW9mIGEuc2hvdWxkQ29tcG9uZW50VXBkYXRlP2Euc2hvdWxkQ29tcG9uZW50VXBkYXRlKGQsZixnKTpiLnByb3RvdHlwZSYmYi5wcm90b3R5cGUuaXNQdXJlUmVhY3RDb21wb25lbnQ/IUplKGMsZCl8fCFKZShlLGYpOiEwfVxuZnVuY3Rpb24gTWcoYSxiLGMpe3ZhciBkPSExLGU9Q2Y7dmFyIGY9Yi5jb250ZXh0VHlwZTtcIm9iamVjdFwiPT09dHlwZW9mIGYmJm51bGwhPT1mP2Y9dmcoZik6KGU9RmYoYik/RGY6TS5jdXJyZW50LGQ9Yi5jb250ZXh0VHlwZXMsZj0oZD1udWxsIT09ZCYmdm9pZCAwIT09ZCk/RWYoYSxlKTpDZik7Yj1uZXcgYihjLGYpO2EubWVtb2l6ZWRTdGF0ZT1udWxsIT09Yi5zdGF0ZSYmdm9pZCAwIT09Yi5zdGF0ZT9iLnN0YXRlOm51bGw7Yi51cGRhdGVyPUtnO2Euc3RhdGVOb2RlPWI7Yi5fcmVhY3RJbnRlcm5hbHM9YTtkJiYoYT1hLnN0YXRlTm9kZSxhLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkVW5tYXNrZWRDaGlsZENvbnRleHQ9ZSxhLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWFza2VkQ2hpbGRDb250ZXh0PWYpO3JldHVybiBifVxuZnVuY3Rpb24gTmcoYSxiLGMsZCl7YT1iLnN0YXRlO1wiZnVuY3Rpb25cIj09PXR5cGVvZiBiLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMmJmIuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhjLGQpO1wiZnVuY3Rpb25cIj09PXR5cGVvZiBiLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJiZiLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKGMsZCk7Yi5zdGF0ZSE9PWEmJktnLmVucXVldWVSZXBsYWNlU3RhdGUoYixiLnN0YXRlLG51bGwpfVxuZnVuY3Rpb24gT2coYSxiLGMsZCl7dmFyIGU9YS5zdGF0ZU5vZGU7ZS5wcm9wcz1jO2Uuc3RhdGU9YS5tZW1vaXplZFN0YXRlO2UucmVmcz1GZzt4ZyhhKTt2YXIgZj1iLmNvbnRleHRUeXBlO1wib2JqZWN0XCI9PT10eXBlb2YgZiYmbnVsbCE9PWY/ZS5jb250ZXh0PXZnKGYpOihmPUZmKGIpP0RmOk0uY3VycmVudCxlLmNvbnRleHQ9RWYoYSxmKSk7Q2coYSxjLGUsZCk7ZS5zdGF0ZT1hLm1lbW9pemVkU3RhdGU7Zj1iLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcztcImZ1bmN0aW9uXCI9PT10eXBlb2YgZiYmKEdnKGEsYixmLGMpLGUuc3RhdGU9YS5tZW1vaXplZFN0YXRlKTtcImZ1bmN0aW9uXCI9PT10eXBlb2YgYi5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHN8fFwiZnVuY3Rpb25cIj09PXR5cGVvZiBlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlfHxcImZ1bmN0aW9uXCIhPT10eXBlb2YgZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50JiZcImZ1bmN0aW9uXCIhPT10eXBlb2YgZS5jb21wb25lbnRXaWxsTW91bnR8fFxuKGI9ZS5zdGF0ZSxcImZ1bmN0aW9uXCI9PT10eXBlb2YgZS5jb21wb25lbnRXaWxsTW91bnQmJmUuY29tcG9uZW50V2lsbE1vdW50KCksXCJmdW5jdGlvblwiPT09dHlwZW9mIGUuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCYmZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50KCksYiE9PWUuc3RhdGUmJktnLmVucXVldWVSZXBsYWNlU3RhdGUoZSxlLnN0YXRlLG51bGwpLENnKGEsYyxlLGQpLGUuc3RhdGU9YS5tZW1vaXplZFN0YXRlKTtcImZ1bmN0aW9uXCI9PT10eXBlb2YgZS5jb21wb25lbnREaWRNb3VudCYmKGEuZmxhZ3N8PTQpfXZhciBQZz1BcnJheS5pc0FycmF5O1xuZnVuY3Rpb24gUWcoYSxiLGMpe2E9Yy5yZWY7aWYobnVsbCE9PWEmJlwiZnVuY3Rpb25cIiE9PXR5cGVvZiBhJiZcIm9iamVjdFwiIT09dHlwZW9mIGEpe2lmKGMuX293bmVyKXtjPWMuX293bmVyO2lmKGMpe2lmKDEhPT1jLnRhZyl0aHJvdyBFcnJvcih5KDMwOSkpO3ZhciBkPWMuc3RhdGVOb2RlfWlmKCFkKXRocm93IEVycm9yKHkoMTQ3LGEpKTt2YXIgZT1cIlwiK2E7aWYobnVsbCE9PWImJm51bGwhPT1iLnJlZiYmXCJmdW5jdGlvblwiPT09dHlwZW9mIGIucmVmJiZiLnJlZi5fc3RyaW5nUmVmPT09ZSlyZXR1cm4gYi5yZWY7Yj1mdW5jdGlvbihhKXt2YXIgYj1kLnJlZnM7Yj09PUZnJiYoYj1kLnJlZnM9e30pO251bGw9PT1hP2RlbGV0ZSBiW2VdOmJbZV09YX07Yi5fc3RyaW5nUmVmPWU7cmV0dXJuIGJ9aWYoXCJzdHJpbmdcIiE9PXR5cGVvZiBhKXRocm93IEVycm9yKHkoMjg0KSk7aWYoIWMuX293bmVyKXRocm93IEVycm9yKHkoMjkwLGEpKTt9cmV0dXJuIGF9XG5mdW5jdGlvbiBSZyhhLGIpe2lmKFwidGV4dGFyZWFcIiE9PWEudHlwZSl0aHJvdyBFcnJvcih5KDMxLFwiW29iamVjdCBPYmplY3RdXCI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYik/XCJvYmplY3Qgd2l0aCBrZXlzIHtcIitPYmplY3Qua2V5cyhiKS5qb2luKFwiLCBcIikrXCJ9XCI6YikpO31cbmZ1bmN0aW9uIFNnKGEpe2Z1bmN0aW9uIGIoYixjKXtpZihhKXt2YXIgZD1iLmxhc3RFZmZlY3Q7bnVsbCE9PWQ/KGQubmV4dEVmZmVjdD1jLGIubGFzdEVmZmVjdD1jKTpiLmZpcnN0RWZmZWN0PWIubGFzdEVmZmVjdD1jO2MubmV4dEVmZmVjdD1udWxsO2MuZmxhZ3M9OH19ZnVuY3Rpb24gYyhjLGQpe2lmKCFhKXJldHVybiBudWxsO2Zvcig7bnVsbCE9PWQ7KWIoYyxkKSxkPWQuc2libGluZztyZXR1cm4gbnVsbH1mdW5jdGlvbiBkKGEsYil7Zm9yKGE9bmV3IE1hcDtudWxsIT09YjspbnVsbCE9PWIua2V5P2Euc2V0KGIua2V5LGIpOmEuc2V0KGIuaW5kZXgsYiksYj1iLnNpYmxpbmc7cmV0dXJuIGF9ZnVuY3Rpb24gZShhLGIpe2E9VGcoYSxiKTthLmluZGV4PTA7YS5zaWJsaW5nPW51bGw7cmV0dXJuIGF9ZnVuY3Rpb24gZihiLGMsZCl7Yi5pbmRleD1kO2lmKCFhKXJldHVybiBjO2Q9Yi5hbHRlcm5hdGU7aWYobnVsbCE9PWQpcmV0dXJuIGQ9ZC5pbmRleCxkPGM/KGIuZmxhZ3M9MixcbmMpOmQ7Yi5mbGFncz0yO3JldHVybiBjfWZ1bmN0aW9uIGcoYil7YSYmbnVsbD09PWIuYWx0ZXJuYXRlJiYoYi5mbGFncz0yKTtyZXR1cm4gYn1mdW5jdGlvbiBoKGEsYixjLGQpe2lmKG51bGw9PT1ifHw2IT09Yi50YWcpcmV0dXJuIGI9VWcoYyxhLm1vZGUsZCksYi5yZXR1cm49YSxiO2I9ZShiLGMpO2IucmV0dXJuPWE7cmV0dXJuIGJ9ZnVuY3Rpb24gayhhLGIsYyxkKXtpZihudWxsIT09YiYmYi5lbGVtZW50VHlwZT09PWMudHlwZSlyZXR1cm4gZD1lKGIsYy5wcm9wcyksZC5yZWY9UWcoYSxiLGMpLGQucmV0dXJuPWEsZDtkPVZnKGMudHlwZSxjLmtleSxjLnByb3BzLG51bGwsYS5tb2RlLGQpO2QucmVmPVFnKGEsYixjKTtkLnJldHVybj1hO3JldHVybiBkfWZ1bmN0aW9uIGwoYSxiLGMsZCl7aWYobnVsbD09PWJ8fDQhPT1iLnRhZ3x8Yi5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyE9PWMuY29udGFpbmVySW5mb3x8Yi5zdGF0ZU5vZGUuaW1wbGVtZW50YXRpb24hPT1jLmltcGxlbWVudGF0aW9uKXJldHVybiBiPVxuV2coYyxhLm1vZGUsZCksYi5yZXR1cm49YSxiO2I9ZShiLGMuY2hpbGRyZW58fFtdKTtiLnJldHVybj1hO3JldHVybiBifWZ1bmN0aW9uIG4oYSxiLGMsZCxmKXtpZihudWxsPT09Ynx8NyE9PWIudGFnKXJldHVybiBiPVhnKGMsYS5tb2RlLGQsZiksYi5yZXR1cm49YSxiO2I9ZShiLGMpO2IucmV0dXJuPWE7cmV0dXJuIGJ9ZnVuY3Rpb24gQShhLGIsYyl7aWYoXCJzdHJpbmdcIj09PXR5cGVvZiBifHxcIm51bWJlclwiPT09dHlwZW9mIGIpcmV0dXJuIGI9VWcoXCJcIitiLGEubW9kZSxjKSxiLnJldHVybj1hLGI7aWYoXCJvYmplY3RcIj09PXR5cGVvZiBiJiZudWxsIT09Yil7c3dpdGNoKGIuJCR0eXBlb2Ype2Nhc2Ugc2E6cmV0dXJuIGM9VmcoYi50eXBlLGIua2V5LGIucHJvcHMsbnVsbCxhLm1vZGUsYyksYy5yZWY9UWcoYSxudWxsLGIpLGMucmV0dXJuPWEsYztjYXNlIHRhOnJldHVybiBiPVdnKGIsYS5tb2RlLGMpLGIucmV0dXJuPWEsYn1pZihQZyhiKXx8TGEoYikpcmV0dXJuIGI9WGcoYixcbmEubW9kZSxjLG51bGwpLGIucmV0dXJuPWEsYjtSZyhhLGIpfXJldHVybiBudWxsfWZ1bmN0aW9uIHAoYSxiLGMsZCl7dmFyIGU9bnVsbCE9PWI/Yi5rZXk6bnVsbDtpZihcInN0cmluZ1wiPT09dHlwZW9mIGN8fFwibnVtYmVyXCI9PT10eXBlb2YgYylyZXR1cm4gbnVsbCE9PWU/bnVsbDpoKGEsYixcIlwiK2MsZCk7aWYoXCJvYmplY3RcIj09PXR5cGVvZiBjJiZudWxsIT09Yyl7c3dpdGNoKGMuJCR0eXBlb2Ype2Nhc2Ugc2E6cmV0dXJuIGMua2V5PT09ZT9jLnR5cGU9PT11YT9uKGEsYixjLnByb3BzLmNoaWxkcmVuLGQsZSk6ayhhLGIsYyxkKTpudWxsO2Nhc2UgdGE6cmV0dXJuIGMua2V5PT09ZT9sKGEsYixjLGQpOm51bGx9aWYoUGcoYyl8fExhKGMpKXJldHVybiBudWxsIT09ZT9udWxsOm4oYSxiLGMsZCxudWxsKTtSZyhhLGMpfXJldHVybiBudWxsfWZ1bmN0aW9uIEMoYSxiLGMsZCxlKXtpZihcInN0cmluZ1wiPT09dHlwZW9mIGR8fFwibnVtYmVyXCI9PT10eXBlb2YgZClyZXR1cm4gYT1hLmdldChjKXx8XG5udWxsLGgoYixhLFwiXCIrZCxlKTtpZihcIm9iamVjdFwiPT09dHlwZW9mIGQmJm51bGwhPT1kKXtzd2l0Y2goZC4kJHR5cGVvZil7Y2FzZSBzYTpyZXR1cm4gYT1hLmdldChudWxsPT09ZC5rZXk/YzpkLmtleSl8fG51bGwsZC50eXBlPT09dWE/bihiLGEsZC5wcm9wcy5jaGlsZHJlbixlLGQua2V5KTprKGIsYSxkLGUpO2Nhc2UgdGE6cmV0dXJuIGE9YS5nZXQobnVsbD09PWQua2V5P2M6ZC5rZXkpfHxudWxsLGwoYixhLGQsZSl9aWYoUGcoZCl8fExhKGQpKXJldHVybiBhPWEuZ2V0KGMpfHxudWxsLG4oYixhLGQsZSxudWxsKTtSZyhiLGQpfXJldHVybiBudWxsfWZ1bmN0aW9uIHgoZSxnLGgsayl7Zm9yKHZhciBsPW51bGwsdD1udWxsLHU9Zyx6PWc9MCxxPW51bGw7bnVsbCE9PXUmJno8aC5sZW5ndGg7eisrKXt1LmluZGV4Pno/KHE9dSx1PW51bGwpOnE9dS5zaWJsaW5nO3ZhciBuPXAoZSx1LGhbel0sayk7aWYobnVsbD09PW4pe251bGw9PT11JiYodT1xKTticmVha31hJiZ1JiZudWxsPT09XG5uLmFsdGVybmF0ZSYmYihlLHUpO2c9ZihuLGcseik7bnVsbD09PXQ/bD1uOnQuc2libGluZz1uO3Q9bjt1PXF9aWYoej09PWgubGVuZ3RoKXJldHVybiBjKGUsdSksbDtpZihudWxsPT09dSl7Zm9yKDt6PGgubGVuZ3RoO3orKyl1PUEoZSxoW3pdLGspLG51bGwhPT11JiYoZz1mKHUsZyx6KSxudWxsPT09dD9sPXU6dC5zaWJsaW5nPXUsdD11KTtyZXR1cm4gbH1mb3IodT1kKGUsdSk7ejxoLmxlbmd0aDt6KyspcT1DKHUsZSx6LGhbel0sayksbnVsbCE9PXEmJihhJiZudWxsIT09cS5hbHRlcm5hdGUmJnUuZGVsZXRlKG51bGw9PT1xLmtleT96OnEua2V5KSxnPWYocSxnLHopLG51bGw9PT10P2w9cTp0LnNpYmxpbmc9cSx0PXEpO2EmJnUuZm9yRWFjaChmdW5jdGlvbihhKXtyZXR1cm4gYihlLGEpfSk7cmV0dXJuIGx9ZnVuY3Rpb24gdyhlLGcsaCxrKXt2YXIgbD1MYShoKTtpZihcImZ1bmN0aW9uXCIhPT10eXBlb2YgbCl0aHJvdyBFcnJvcih5KDE1MCkpO2g9bC5jYWxsKGgpO2lmKG51bGw9PVxuaCl0aHJvdyBFcnJvcih5KDE1MSkpO2Zvcih2YXIgdD1sPW51bGwsdT1nLHo9Zz0wLHE9bnVsbCxuPWgubmV4dCgpO251bGwhPT11JiYhbi5kb25lO3orKyxuPWgubmV4dCgpKXt1LmluZGV4Pno/KHE9dSx1PW51bGwpOnE9dS5zaWJsaW5nO3ZhciB3PXAoZSx1LG4udmFsdWUsayk7aWYobnVsbD09PXcpe251bGw9PT11JiYodT1xKTticmVha31hJiZ1JiZudWxsPT09dy5hbHRlcm5hdGUmJmIoZSx1KTtnPWYodyxnLHopO251bGw9PT10P2w9dzp0LnNpYmxpbmc9dzt0PXc7dT1xfWlmKG4uZG9uZSlyZXR1cm4gYyhlLHUpLGw7aWYobnVsbD09PXUpe2Zvcig7IW4uZG9uZTt6Kyssbj1oLm5leHQoKSluPUEoZSxuLnZhbHVlLGspLG51bGwhPT1uJiYoZz1mKG4sZyx6KSxudWxsPT09dD9sPW46dC5zaWJsaW5nPW4sdD1uKTtyZXR1cm4gbH1mb3IodT1kKGUsdSk7IW4uZG9uZTt6Kyssbj1oLm5leHQoKSluPUModSxlLHosbi52YWx1ZSxrKSxudWxsIT09biYmKGEmJm51bGwhPT1uLmFsdGVybmF0ZSYmXG51LmRlbGV0ZShudWxsPT09bi5rZXk/ejpuLmtleSksZz1mKG4sZyx6KSxudWxsPT09dD9sPW46dC5zaWJsaW5nPW4sdD1uKTthJiZ1LmZvckVhY2goZnVuY3Rpb24oYSl7cmV0dXJuIGIoZSxhKX0pO3JldHVybiBsfXJldHVybiBmdW5jdGlvbihhLGQsZixoKXt2YXIgaz1cIm9iamVjdFwiPT09dHlwZW9mIGYmJm51bGwhPT1mJiZmLnR5cGU9PT11YSYmbnVsbD09PWYua2V5O2smJihmPWYucHJvcHMuY2hpbGRyZW4pO3ZhciBsPVwib2JqZWN0XCI9PT10eXBlb2YgZiYmbnVsbCE9PWY7aWYobClzd2l0Y2goZi4kJHR5cGVvZil7Y2FzZSBzYTphOntsPWYua2V5O2ZvcihrPWQ7bnVsbCE9PWs7KXtpZihrLmtleT09PWwpe3N3aXRjaChrLnRhZyl7Y2FzZSA3OmlmKGYudHlwZT09PXVhKXtjKGEsay5zaWJsaW5nKTtkPWUoayxmLnByb3BzLmNoaWxkcmVuKTtkLnJldHVybj1hO2E9ZDticmVhayBhfWJyZWFrO2RlZmF1bHQ6aWYoay5lbGVtZW50VHlwZT09PWYudHlwZSl7YyhhLGsuc2libGluZyk7XG5kPWUoayxmLnByb3BzKTtkLnJlZj1RZyhhLGssZik7ZC5yZXR1cm49YTthPWQ7YnJlYWsgYX19YyhhLGspO2JyZWFrfWVsc2UgYihhLGspO2s9ay5zaWJsaW5nfWYudHlwZT09PXVhPyhkPVhnKGYucHJvcHMuY2hpbGRyZW4sYS5tb2RlLGgsZi5rZXkpLGQucmV0dXJuPWEsYT1kKTooaD1WZyhmLnR5cGUsZi5rZXksZi5wcm9wcyxudWxsLGEubW9kZSxoKSxoLnJlZj1RZyhhLGQsZiksaC5yZXR1cm49YSxhPWgpfXJldHVybiBnKGEpO2Nhc2UgdGE6YTp7Zm9yKGs9Zi5rZXk7bnVsbCE9PWQ7KXtpZihkLmtleT09PWspaWYoND09PWQudGFnJiZkLnN0YXRlTm9kZS5jb250YWluZXJJbmZvPT09Zi5jb250YWluZXJJbmZvJiZkLnN0YXRlTm9kZS5pbXBsZW1lbnRhdGlvbj09PWYuaW1wbGVtZW50YXRpb24pe2MoYSxkLnNpYmxpbmcpO2Q9ZShkLGYuY2hpbGRyZW58fFtdKTtkLnJldHVybj1hO2E9ZDticmVhayBhfWVsc2V7YyhhLGQpO2JyZWFrfWVsc2UgYihhLGQpO2Q9ZC5zaWJsaW5nfWQ9XG5XZyhmLGEubW9kZSxoKTtkLnJldHVybj1hO2E9ZH1yZXR1cm4gZyhhKX1pZihcInN0cmluZ1wiPT09dHlwZW9mIGZ8fFwibnVtYmVyXCI9PT10eXBlb2YgZilyZXR1cm4gZj1cIlwiK2YsbnVsbCE9PWQmJjY9PT1kLnRhZz8oYyhhLGQuc2libGluZyksZD1lKGQsZiksZC5yZXR1cm49YSxhPWQpOihjKGEsZCksZD1VZyhmLGEubW9kZSxoKSxkLnJldHVybj1hLGE9ZCksZyhhKTtpZihQZyhmKSlyZXR1cm4geChhLGQsZixoKTtpZihMYShmKSlyZXR1cm4gdyhhLGQsZixoKTtsJiZSZyhhLGYpO2lmKFwidW5kZWZpbmVkXCI9PT10eXBlb2YgZiYmIWspc3dpdGNoKGEudGFnKXtjYXNlIDE6Y2FzZSAyMjpjYXNlIDA6Y2FzZSAxMTpjYXNlIDE1OnRocm93IEVycm9yKHkoMTUyLFJhKGEudHlwZSl8fFwiQ29tcG9uZW50XCIpKTt9cmV0dXJuIGMoYSxkKX19dmFyIFlnPVNnKCEwKSxaZz1TZyghMSksJGc9e30sYWg9QmYoJGcpLGJoPUJmKCRnKSxjaD1CZigkZyk7XG5mdW5jdGlvbiBkaChhKXtpZihhPT09JGcpdGhyb3cgRXJyb3IoeSgxNzQpKTtyZXR1cm4gYX1mdW5jdGlvbiBlaChhLGIpe0koY2gsYik7SShiaCxhKTtJKGFoLCRnKTthPWIubm9kZVR5cGU7c3dpdGNoKGEpe2Nhc2UgOTpjYXNlIDExOmI9KGI9Yi5kb2N1bWVudEVsZW1lbnQpP2IubmFtZXNwYWNlVVJJOm1iKG51bGwsXCJcIik7YnJlYWs7ZGVmYXVsdDphPTg9PT1hP2IucGFyZW50Tm9kZTpiLGI9YS5uYW1lc3BhY2VVUkl8fG51bGwsYT1hLnRhZ05hbWUsYj1tYihiLGEpfUgoYWgpO0koYWgsYil9ZnVuY3Rpb24gZmgoKXtIKGFoKTtIKGJoKTtIKGNoKX1mdW5jdGlvbiBnaChhKXtkaChjaC5jdXJyZW50KTt2YXIgYj1kaChhaC5jdXJyZW50KTt2YXIgYz1tYihiLGEudHlwZSk7YiE9PWMmJihJKGJoLGEpLEkoYWgsYykpfWZ1bmN0aW9uIGhoKGEpe2JoLmN1cnJlbnQ9PT1hJiYoSChhaCksSChiaCkpfXZhciBQPUJmKDApO1xuZnVuY3Rpb24gaWgoYSl7Zm9yKHZhciBiPWE7bnVsbCE9PWI7KXtpZigxMz09PWIudGFnKXt2YXIgYz1iLm1lbW9pemVkU3RhdGU7aWYobnVsbCE9PWMmJihjPWMuZGVoeWRyYXRlZCxudWxsPT09Y3x8XCIkP1wiPT09Yy5kYXRhfHxcIiQhXCI9PT1jLmRhdGEpKXJldHVybiBifWVsc2UgaWYoMTk9PT1iLnRhZyYmdm9pZCAwIT09Yi5tZW1vaXplZFByb3BzLnJldmVhbE9yZGVyKXtpZigwIT09KGIuZmxhZ3MmNjQpKXJldHVybiBifWVsc2UgaWYobnVsbCE9PWIuY2hpbGQpe2IuY2hpbGQucmV0dXJuPWI7Yj1iLmNoaWxkO2NvbnRpbnVlfWlmKGI9PT1hKWJyZWFrO2Zvcig7bnVsbD09PWIuc2libGluZzspe2lmKG51bGw9PT1iLnJldHVybnx8Yi5yZXR1cm49PT1hKXJldHVybiBudWxsO2I9Yi5yZXR1cm59Yi5zaWJsaW5nLnJldHVybj1iLnJldHVybjtiPWIuc2libGluZ31yZXR1cm4gbnVsbH12YXIgamg9bnVsbCxraD1udWxsLGxoPSExO1xuZnVuY3Rpb24gbWgoYSxiKXt2YXIgYz1uaCg1LG51bGwsbnVsbCwwKTtjLmVsZW1lbnRUeXBlPVwiREVMRVRFRFwiO2MudHlwZT1cIkRFTEVURURcIjtjLnN0YXRlTm9kZT1iO2MucmV0dXJuPWE7Yy5mbGFncz04O251bGwhPT1hLmxhc3RFZmZlY3Q/KGEubGFzdEVmZmVjdC5uZXh0RWZmZWN0PWMsYS5sYXN0RWZmZWN0PWMpOmEuZmlyc3RFZmZlY3Q9YS5sYXN0RWZmZWN0PWN9ZnVuY3Rpb24gb2goYSxiKXtzd2l0Y2goYS50YWcpe2Nhc2UgNTp2YXIgYz1hLnR5cGU7Yj0xIT09Yi5ub2RlVHlwZXx8Yy50b0xvd2VyQ2FzZSgpIT09Yi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpP251bGw6YjtyZXR1cm4gbnVsbCE9PWI/KGEuc3RhdGVOb2RlPWIsITApOiExO2Nhc2UgNjpyZXR1cm4gYj1cIlwiPT09YS5wZW5kaW5nUHJvcHN8fDMhPT1iLm5vZGVUeXBlP251bGw6YixudWxsIT09Yj8oYS5zdGF0ZU5vZGU9YiwhMCk6ITE7Y2FzZSAxMzpyZXR1cm4hMTtkZWZhdWx0OnJldHVybiExfX1cbmZ1bmN0aW9uIHBoKGEpe2lmKGxoKXt2YXIgYj1raDtpZihiKXt2YXIgYz1iO2lmKCFvaChhLGIpKXtiPXJmKGMubmV4dFNpYmxpbmcpO2lmKCFifHwhb2goYSxiKSl7YS5mbGFncz1hLmZsYWdzJi0xMDI1fDI7bGg9ITE7amg9YTtyZXR1cm59bWgoamgsYyl9amg9YTtraD1yZihiLmZpcnN0Q2hpbGQpfWVsc2UgYS5mbGFncz1hLmZsYWdzJi0xMDI1fDIsbGg9ITEsamg9YX19ZnVuY3Rpb24gcWgoYSl7Zm9yKGE9YS5yZXR1cm47bnVsbCE9PWEmJjUhPT1hLnRhZyYmMyE9PWEudGFnJiYxMyE9PWEudGFnOylhPWEucmV0dXJuO2poPWF9XG5mdW5jdGlvbiByaChhKXtpZihhIT09amgpcmV0dXJuITE7aWYoIWxoKXJldHVybiBxaChhKSxsaD0hMCwhMTt2YXIgYj1hLnR5cGU7aWYoNSE9PWEudGFnfHxcImhlYWRcIiE9PWImJlwiYm9keVwiIT09YiYmIW5mKGIsYS5tZW1vaXplZFByb3BzKSlmb3IoYj1raDtiOyltaChhLGIpLGI9cmYoYi5uZXh0U2libGluZyk7cWgoYSk7aWYoMTM9PT1hLnRhZyl7YT1hLm1lbW9pemVkU3RhdGU7YT1udWxsIT09YT9hLmRlaHlkcmF0ZWQ6bnVsbDtpZighYSl0aHJvdyBFcnJvcih5KDMxNykpO2E6e2E9YS5uZXh0U2libGluZztmb3IoYj0wO2E7KXtpZig4PT09YS5ub2RlVHlwZSl7dmFyIGM9YS5kYXRhO2lmKFwiLyRcIj09PWMpe2lmKDA9PT1iKXtraD1yZihhLm5leHRTaWJsaW5nKTticmVhayBhfWItLX1lbHNlXCIkXCIhPT1jJiZcIiQhXCIhPT1jJiZcIiQ/XCIhPT1jfHxiKyt9YT1hLm5leHRTaWJsaW5nfWtoPW51bGx9fWVsc2Uga2g9amg/cmYoYS5zdGF0ZU5vZGUubmV4dFNpYmxpbmcpOm51bGw7cmV0dXJuITB9XG5mdW5jdGlvbiBzaCgpe2toPWpoPW51bGw7bGg9ITF9dmFyIHRoPVtdO2Z1bmN0aW9uIHVoKCl7Zm9yKHZhciBhPTA7YTx0aC5sZW5ndGg7YSsrKXRoW2FdLl93b3JrSW5Qcm9ncmVzc1ZlcnNpb25QcmltYXJ5PW51bGw7dGgubGVuZ3RoPTB9dmFyIHZoPXJhLlJlYWN0Q3VycmVudERpc3BhdGNoZXIsd2g9cmEuUmVhY3RDdXJyZW50QmF0Y2hDb25maWcseGg9MCxSPW51bGwsUz1udWxsLFQ9bnVsbCx5aD0hMSx6aD0hMTtmdW5jdGlvbiBBaCgpe3Rocm93IEVycm9yKHkoMzIxKSk7fWZ1bmN0aW9uIEJoKGEsYil7aWYobnVsbD09PWIpcmV0dXJuITE7Zm9yKHZhciBjPTA7YzxiLmxlbmd0aCYmYzxhLmxlbmd0aDtjKyspaWYoIUhlKGFbY10sYltjXSkpcmV0dXJuITE7cmV0dXJuITB9XG5mdW5jdGlvbiBDaChhLGIsYyxkLGUsZil7eGg9ZjtSPWI7Yi5tZW1vaXplZFN0YXRlPW51bGw7Yi51cGRhdGVRdWV1ZT1udWxsO2IubGFuZXM9MDt2aC5jdXJyZW50PW51bGw9PT1hfHxudWxsPT09YS5tZW1vaXplZFN0YXRlP0RoOkVoO2E9YyhkLGUpO2lmKHpoKXtmPTA7ZG97emg9ITE7aWYoISgyNT5mKSl0aHJvdyBFcnJvcih5KDMwMSkpO2YrPTE7VD1TPW51bGw7Yi51cGRhdGVRdWV1ZT1udWxsO3ZoLmN1cnJlbnQ9Rmg7YT1jKGQsZSl9d2hpbGUoemgpfXZoLmN1cnJlbnQ9R2g7Yj1udWxsIT09UyYmbnVsbCE9PVMubmV4dDt4aD0wO1Q9Uz1SPW51bGw7eWg9ITE7aWYoYil0aHJvdyBFcnJvcih5KDMwMCkpO3JldHVybiBhfWZ1bmN0aW9uIEhoKCl7dmFyIGE9e21lbW9pemVkU3RhdGU6bnVsbCxiYXNlU3RhdGU6bnVsbCxiYXNlUXVldWU6bnVsbCxxdWV1ZTpudWxsLG5leHQ6bnVsbH07bnVsbD09PVQ/Ui5tZW1vaXplZFN0YXRlPVQ9YTpUPVQubmV4dD1hO3JldHVybiBUfVxuZnVuY3Rpb24gSWgoKXtpZihudWxsPT09Uyl7dmFyIGE9Ui5hbHRlcm5hdGU7YT1udWxsIT09YT9hLm1lbW9pemVkU3RhdGU6bnVsbH1lbHNlIGE9Uy5uZXh0O3ZhciBiPW51bGw9PT1UP1IubWVtb2l6ZWRTdGF0ZTpULm5leHQ7aWYobnVsbCE9PWIpVD1iLFM9YTtlbHNle2lmKG51bGw9PT1hKXRocm93IEVycm9yKHkoMzEwKSk7Uz1hO2E9e21lbW9pemVkU3RhdGU6Uy5tZW1vaXplZFN0YXRlLGJhc2VTdGF0ZTpTLmJhc2VTdGF0ZSxiYXNlUXVldWU6Uy5iYXNlUXVldWUscXVldWU6Uy5xdWV1ZSxuZXh0Om51bGx9O251bGw9PT1UP1IubWVtb2l6ZWRTdGF0ZT1UPWE6VD1ULm5leHQ9YX1yZXR1cm4gVH1mdW5jdGlvbiBKaChhLGIpe3JldHVyblwiZnVuY3Rpb25cIj09PXR5cGVvZiBiP2IoYSk6Yn1cbmZ1bmN0aW9uIEtoKGEpe3ZhciBiPUloKCksYz1iLnF1ZXVlO2lmKG51bGw9PT1jKXRocm93IEVycm9yKHkoMzExKSk7Yy5sYXN0UmVuZGVyZWRSZWR1Y2VyPWE7dmFyIGQ9UyxlPWQuYmFzZVF1ZXVlLGY9Yy5wZW5kaW5nO2lmKG51bGwhPT1mKXtpZihudWxsIT09ZSl7dmFyIGc9ZS5uZXh0O2UubmV4dD1mLm5leHQ7Zi5uZXh0PWd9ZC5iYXNlUXVldWU9ZT1mO2MucGVuZGluZz1udWxsfWlmKG51bGwhPT1lKXtlPWUubmV4dDtkPWQuYmFzZVN0YXRlO3ZhciBoPWc9Zj1udWxsLGs9ZTtkb3t2YXIgbD1rLmxhbmU7aWYoKHhoJmwpPT09bCludWxsIT09aCYmKGg9aC5uZXh0PXtsYW5lOjAsYWN0aW9uOmsuYWN0aW9uLGVhZ2VyUmVkdWNlcjprLmVhZ2VyUmVkdWNlcixlYWdlclN0YXRlOmsuZWFnZXJTdGF0ZSxuZXh0Om51bGx9KSxkPWsuZWFnZXJSZWR1Y2VyPT09YT9rLmVhZ2VyU3RhdGU6YShkLGsuYWN0aW9uKTtlbHNle3ZhciBuPXtsYW5lOmwsYWN0aW9uOmsuYWN0aW9uLGVhZ2VyUmVkdWNlcjprLmVhZ2VyUmVkdWNlcixcbmVhZ2VyU3RhdGU6ay5lYWdlclN0YXRlLG5leHQ6bnVsbH07bnVsbD09PWg/KGc9aD1uLGY9ZCk6aD1oLm5leHQ9bjtSLmxhbmVzfD1sO0RnfD1sfWs9ay5uZXh0fXdoaWxlKG51bGwhPT1rJiZrIT09ZSk7bnVsbD09PWg/Zj1kOmgubmV4dD1nO0hlKGQsYi5tZW1vaXplZFN0YXRlKXx8KHVnPSEwKTtiLm1lbW9pemVkU3RhdGU9ZDtiLmJhc2VTdGF0ZT1mO2IuYmFzZVF1ZXVlPWg7Yy5sYXN0UmVuZGVyZWRTdGF0ZT1kfXJldHVybltiLm1lbW9pemVkU3RhdGUsYy5kaXNwYXRjaF19XG5mdW5jdGlvbiBMaChhKXt2YXIgYj1JaCgpLGM9Yi5xdWV1ZTtpZihudWxsPT09Yyl0aHJvdyBFcnJvcih5KDMxMSkpO2MubGFzdFJlbmRlcmVkUmVkdWNlcj1hO3ZhciBkPWMuZGlzcGF0Y2gsZT1jLnBlbmRpbmcsZj1iLm1lbW9pemVkU3RhdGU7aWYobnVsbCE9PWUpe2MucGVuZGluZz1udWxsO3ZhciBnPWU9ZS5uZXh0O2RvIGY9YShmLGcuYWN0aW9uKSxnPWcubmV4dDt3aGlsZShnIT09ZSk7SGUoZixiLm1lbW9pemVkU3RhdGUpfHwodWc9ITApO2IubWVtb2l6ZWRTdGF0ZT1mO251bGw9PT1iLmJhc2VRdWV1ZSYmKGIuYmFzZVN0YXRlPWYpO2MubGFzdFJlbmRlcmVkU3RhdGU9Zn1yZXR1cm5bZixkXX1cbmZ1bmN0aW9uIE1oKGEsYixjKXt2YXIgZD1iLl9nZXRWZXJzaW9uO2Q9ZChiLl9zb3VyY2UpO3ZhciBlPWIuX3dvcmtJblByb2dyZXNzVmVyc2lvblByaW1hcnk7aWYobnVsbCE9PWUpYT1lPT09ZDtlbHNlIGlmKGE9YS5tdXRhYmxlUmVhZExhbmVzLGE9KHhoJmEpPT09YSliLl93b3JrSW5Qcm9ncmVzc1ZlcnNpb25QcmltYXJ5PWQsdGgucHVzaChiKTtpZihhKXJldHVybiBjKGIuX3NvdXJjZSk7dGgucHVzaChiKTt0aHJvdyBFcnJvcih5KDM1MCkpO31cbmZ1bmN0aW9uIE5oKGEsYixjLGQpe3ZhciBlPVU7aWYobnVsbD09PWUpdGhyb3cgRXJyb3IoeSgzNDkpKTt2YXIgZj1iLl9nZXRWZXJzaW9uLGc9ZihiLl9zb3VyY2UpLGg9dmguY3VycmVudCxrPWgudXNlU3RhdGUoZnVuY3Rpb24oKXtyZXR1cm4gTWgoZSxiLGMpfSksbD1rWzFdLG49a1swXTtrPVQ7dmFyIEE9YS5tZW1vaXplZFN0YXRlLHA9QS5yZWZzLEM9cC5nZXRTbmFwc2hvdCx4PUEuc291cmNlO0E9QS5zdWJzY3JpYmU7dmFyIHc9UjthLm1lbW9pemVkU3RhdGU9e3JlZnM6cCxzb3VyY2U6YixzdWJzY3JpYmU6ZH07aC51c2VFZmZlY3QoZnVuY3Rpb24oKXtwLmdldFNuYXBzaG90PWM7cC5zZXRTbmFwc2hvdD1sO3ZhciBhPWYoYi5fc291cmNlKTtpZighSGUoZyxhKSl7YT1jKGIuX3NvdXJjZSk7SGUobixhKXx8KGwoYSksYT1JZyh3KSxlLm11dGFibGVSZWFkTGFuZXN8PWEmZS5wZW5kaW5nTGFuZXMpO2E9ZS5tdXRhYmxlUmVhZExhbmVzO2UuZW50YW5nbGVkTGFuZXN8PWE7Zm9yKHZhciBkPVxuZS5lbnRhbmdsZW1lbnRzLGg9YTswPGg7KXt2YXIgaz0zMS1WYyhoKSx2PTE8PGs7ZFtrXXw9YTtoJj1+dn19fSxbYyxiLGRdKTtoLnVzZUVmZmVjdChmdW5jdGlvbigpe3JldHVybiBkKGIuX3NvdXJjZSxmdW5jdGlvbigpe3ZhciBhPXAuZ2V0U25hcHNob3QsYz1wLnNldFNuYXBzaG90O3RyeXtjKGEoYi5fc291cmNlKSk7dmFyIGQ9SWcodyk7ZS5tdXRhYmxlUmVhZExhbmVzfD1kJmUucGVuZGluZ0xhbmVzfWNhdGNoKHEpe2MoZnVuY3Rpb24oKXt0aHJvdyBxO30pfX0pfSxbYixkXSk7SGUoQyxjKSYmSGUoeCxiKSYmSGUoQSxkKXx8KGE9e3BlbmRpbmc6bnVsbCxkaXNwYXRjaDpudWxsLGxhc3RSZW5kZXJlZFJlZHVjZXI6SmgsbGFzdFJlbmRlcmVkU3RhdGU6bn0sYS5kaXNwYXRjaD1sPU9oLmJpbmQobnVsbCxSLGEpLGsucXVldWU9YSxrLmJhc2VRdWV1ZT1udWxsLG49TWgoZSxiLGMpLGsubWVtb2l6ZWRTdGF0ZT1rLmJhc2VTdGF0ZT1uKTtyZXR1cm4gbn1cbmZ1bmN0aW9uIFBoKGEsYixjKXt2YXIgZD1JaCgpO3JldHVybiBOaChkLGEsYixjKX1mdW5jdGlvbiBRaChhKXt2YXIgYj1IaCgpO1wiZnVuY3Rpb25cIj09PXR5cGVvZiBhJiYoYT1hKCkpO2IubWVtb2l6ZWRTdGF0ZT1iLmJhc2VTdGF0ZT1hO2E9Yi5xdWV1ZT17cGVuZGluZzpudWxsLGRpc3BhdGNoOm51bGwsbGFzdFJlbmRlcmVkUmVkdWNlcjpKaCxsYXN0UmVuZGVyZWRTdGF0ZTphfTthPWEuZGlzcGF0Y2g9T2guYmluZChudWxsLFIsYSk7cmV0dXJuW2IubWVtb2l6ZWRTdGF0ZSxhXX1cbmZ1bmN0aW9uIFJoKGEsYixjLGQpe2E9e3RhZzphLGNyZWF0ZTpiLGRlc3Ryb3k6YyxkZXBzOmQsbmV4dDpudWxsfTtiPVIudXBkYXRlUXVldWU7bnVsbD09PWI/KGI9e2xhc3RFZmZlY3Q6bnVsbH0sUi51cGRhdGVRdWV1ZT1iLGIubGFzdEVmZmVjdD1hLm5leHQ9YSk6KGM9Yi5sYXN0RWZmZWN0LG51bGw9PT1jP2IubGFzdEVmZmVjdD1hLm5leHQ9YTooZD1jLm5leHQsYy5uZXh0PWEsYS5uZXh0PWQsYi5sYXN0RWZmZWN0PWEpKTtyZXR1cm4gYX1mdW5jdGlvbiBTaChhKXt2YXIgYj1IaCgpO2E9e2N1cnJlbnQ6YX07cmV0dXJuIGIubWVtb2l6ZWRTdGF0ZT1hfWZ1bmN0aW9uIFRoKCl7cmV0dXJuIEloKCkubWVtb2l6ZWRTdGF0ZX1mdW5jdGlvbiBVaChhLGIsYyxkKXt2YXIgZT1IaCgpO1IuZmxhZ3N8PWE7ZS5tZW1vaXplZFN0YXRlPVJoKDF8YixjLHZvaWQgMCx2b2lkIDA9PT1kP251bGw6ZCl9XG5mdW5jdGlvbiBWaChhLGIsYyxkKXt2YXIgZT1JaCgpO2Q9dm9pZCAwPT09ZD9udWxsOmQ7dmFyIGY9dm9pZCAwO2lmKG51bGwhPT1TKXt2YXIgZz1TLm1lbW9pemVkU3RhdGU7Zj1nLmRlc3Ryb3k7aWYobnVsbCE9PWQmJkJoKGQsZy5kZXBzKSl7UmgoYixjLGYsZCk7cmV0dXJufX1SLmZsYWdzfD1hO2UubWVtb2l6ZWRTdGF0ZT1SaCgxfGIsYyxmLGQpfWZ1bmN0aW9uIFdoKGEsYil7cmV0dXJuIFVoKDUxNiw0LGEsYil9ZnVuY3Rpb24gWGgoYSxiKXtyZXR1cm4gVmgoNTE2LDQsYSxiKX1mdW5jdGlvbiBZaChhLGIpe3JldHVybiBWaCg0LDIsYSxiKX1mdW5jdGlvbiBaaChhLGIpe2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBiKXJldHVybiBhPWEoKSxiKGEpLGZ1bmN0aW9uKCl7YihudWxsKX07aWYobnVsbCE9PWImJnZvaWQgMCE9PWIpcmV0dXJuIGE9YSgpLGIuY3VycmVudD1hLGZ1bmN0aW9uKCl7Yi5jdXJyZW50PW51bGx9fVxuZnVuY3Rpb24gJGgoYSxiLGMpe2M9bnVsbCE9PWMmJnZvaWQgMCE9PWM/Yy5jb25jYXQoW2FdKTpudWxsO3JldHVybiBWaCg0LDIsWmguYmluZChudWxsLGIsYSksYyl9ZnVuY3Rpb24gYWkoKXt9ZnVuY3Rpb24gYmkoYSxiKXt2YXIgYz1JaCgpO2I9dm9pZCAwPT09Yj9udWxsOmI7dmFyIGQ9Yy5tZW1vaXplZFN0YXRlO2lmKG51bGwhPT1kJiZudWxsIT09YiYmQmgoYixkWzFdKSlyZXR1cm4gZFswXTtjLm1lbW9pemVkU3RhdGU9W2EsYl07cmV0dXJuIGF9ZnVuY3Rpb24gY2koYSxiKXt2YXIgYz1JaCgpO2I9dm9pZCAwPT09Yj9udWxsOmI7dmFyIGQ9Yy5tZW1vaXplZFN0YXRlO2lmKG51bGwhPT1kJiZudWxsIT09YiYmQmgoYixkWzFdKSlyZXR1cm4gZFswXTthPWEoKTtjLm1lbW9pemVkU3RhdGU9W2EsYl07cmV0dXJuIGF9XG5mdW5jdGlvbiBkaShhLGIpe3ZhciBjPWVnKCk7Z2coOTg+Yz85ODpjLGZ1bmN0aW9uKCl7YSghMCl9KTtnZyg5NzxjPzk3OmMsZnVuY3Rpb24oKXt2YXIgYz13aC50cmFuc2l0aW9uO3doLnRyYW5zaXRpb249MTt0cnl7YSghMSksYigpfWZpbmFsbHl7d2gudHJhbnNpdGlvbj1jfX0pfVxuZnVuY3Rpb24gT2goYSxiLGMpe3ZhciBkPUhnKCksZT1JZyhhKSxmPXtsYW5lOmUsYWN0aW9uOmMsZWFnZXJSZWR1Y2VyOm51bGwsZWFnZXJTdGF0ZTpudWxsLG5leHQ6bnVsbH0sZz1iLnBlbmRpbmc7bnVsbD09PWc/Zi5uZXh0PWY6KGYubmV4dD1nLm5leHQsZy5uZXh0PWYpO2IucGVuZGluZz1mO2c9YS5hbHRlcm5hdGU7aWYoYT09PVJ8fG51bGwhPT1nJiZnPT09Uil6aD15aD0hMDtlbHNle2lmKDA9PT1hLmxhbmVzJiYobnVsbD09PWd8fDA9PT1nLmxhbmVzKSYmKGc9Yi5sYXN0UmVuZGVyZWRSZWR1Y2VyLG51bGwhPT1nKSl0cnl7dmFyIGg9Yi5sYXN0UmVuZGVyZWRTdGF0ZSxrPWcoaCxjKTtmLmVhZ2VyUmVkdWNlcj1nO2YuZWFnZXJTdGF0ZT1rO2lmKEhlKGssaCkpcmV0dXJufWNhdGNoKGwpe31maW5hbGx5e31KZyhhLGUsZCl9fVxudmFyIEdoPXtyZWFkQ29udGV4dDp2Zyx1c2VDYWxsYmFjazpBaCx1c2VDb250ZXh0OkFoLHVzZUVmZmVjdDpBaCx1c2VJbXBlcmF0aXZlSGFuZGxlOkFoLHVzZUxheW91dEVmZmVjdDpBaCx1c2VNZW1vOkFoLHVzZVJlZHVjZXI6QWgsdXNlUmVmOkFoLHVzZVN0YXRlOkFoLHVzZURlYnVnVmFsdWU6QWgsdXNlRGVmZXJyZWRWYWx1ZTpBaCx1c2VUcmFuc2l0aW9uOkFoLHVzZU11dGFibGVTb3VyY2U6QWgsdXNlT3BhcXVlSWRlbnRpZmllcjpBaCx1bnN0YWJsZV9pc05ld1JlY29uY2lsZXI6ITF9LERoPXtyZWFkQ29udGV4dDp2Zyx1c2VDYWxsYmFjazpmdW5jdGlvbihhLGIpe0hoKCkubWVtb2l6ZWRTdGF0ZT1bYSx2b2lkIDA9PT1iP251bGw6Yl07cmV0dXJuIGF9LHVzZUNvbnRleHQ6dmcsdXNlRWZmZWN0OldoLHVzZUltcGVyYXRpdmVIYW5kbGU6ZnVuY3Rpb24oYSxiLGMpe2M9bnVsbCE9PWMmJnZvaWQgMCE9PWM/Yy5jb25jYXQoW2FdKTpudWxsO3JldHVybiBVaCg0LDIsWmguYmluZChudWxsLFxuYixhKSxjKX0sdXNlTGF5b3V0RWZmZWN0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIFVoKDQsMixhLGIpfSx1c2VNZW1vOmZ1bmN0aW9uKGEsYil7dmFyIGM9SGgoKTtiPXZvaWQgMD09PWI/bnVsbDpiO2E9YSgpO2MubWVtb2l6ZWRTdGF0ZT1bYSxiXTtyZXR1cm4gYX0sdXNlUmVkdWNlcjpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9SGgoKTtiPXZvaWQgMCE9PWM/YyhiKTpiO2QubWVtb2l6ZWRTdGF0ZT1kLmJhc2VTdGF0ZT1iO2E9ZC5xdWV1ZT17cGVuZGluZzpudWxsLGRpc3BhdGNoOm51bGwsbGFzdFJlbmRlcmVkUmVkdWNlcjphLGxhc3RSZW5kZXJlZFN0YXRlOmJ9O2E9YS5kaXNwYXRjaD1PaC5iaW5kKG51bGwsUixhKTtyZXR1cm5bZC5tZW1vaXplZFN0YXRlLGFdfSx1c2VSZWY6U2gsdXNlU3RhdGU6UWgsdXNlRGVidWdWYWx1ZTphaSx1c2VEZWZlcnJlZFZhbHVlOmZ1bmN0aW9uKGEpe3ZhciBiPVFoKGEpLGM9YlswXSxkPWJbMV07V2goZnVuY3Rpb24oKXt2YXIgYj13aC50cmFuc2l0aW9uO1xud2gudHJhbnNpdGlvbj0xO3RyeXtkKGEpfWZpbmFsbHl7d2gudHJhbnNpdGlvbj1ifX0sW2FdKTtyZXR1cm4gY30sdXNlVHJhbnNpdGlvbjpmdW5jdGlvbigpe3ZhciBhPVFoKCExKSxiPWFbMF07YT1kaS5iaW5kKG51bGwsYVsxXSk7U2goYSk7cmV0dXJuW2EsYl19LHVzZU11dGFibGVTb3VyY2U6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPUhoKCk7ZC5tZW1vaXplZFN0YXRlPXtyZWZzOntnZXRTbmFwc2hvdDpiLHNldFNuYXBzaG90Om51bGx9LHNvdXJjZTphLHN1YnNjcmliZTpjfTtyZXR1cm4gTmgoZCxhLGIsYyl9LHVzZU9wYXF1ZUlkZW50aWZpZXI6ZnVuY3Rpb24oKXtpZihsaCl7dmFyIGE9ITEsYj11ZihmdW5jdGlvbigpe2F8fChhPSEwLGMoXCJyOlwiKyh0ZisrKS50b1N0cmluZygzNikpKTt0aHJvdyBFcnJvcih5KDM1NSkpO30pLGM9UWgoYilbMV07MD09PShSLm1vZGUmMikmJihSLmZsYWdzfD01MTYsUmgoNSxmdW5jdGlvbigpe2MoXCJyOlwiKyh0ZisrKS50b1N0cmluZygzNikpfSxcbnZvaWQgMCxudWxsKSk7cmV0dXJuIGJ9Yj1cInI6XCIrKHRmKyspLnRvU3RyaW5nKDM2KTtRaChiKTtyZXR1cm4gYn0sdW5zdGFibGVfaXNOZXdSZWNvbmNpbGVyOiExfSxFaD17cmVhZENvbnRleHQ6dmcsdXNlQ2FsbGJhY2s6YmksdXNlQ29udGV4dDp2Zyx1c2VFZmZlY3Q6WGgsdXNlSW1wZXJhdGl2ZUhhbmRsZTokaCx1c2VMYXlvdXRFZmZlY3Q6WWgsdXNlTWVtbzpjaSx1c2VSZWR1Y2VyOktoLHVzZVJlZjpUaCx1c2VTdGF0ZTpmdW5jdGlvbigpe3JldHVybiBLaChKaCl9LHVzZURlYnVnVmFsdWU6YWksdXNlRGVmZXJyZWRWYWx1ZTpmdW5jdGlvbihhKXt2YXIgYj1LaChKaCksYz1iWzBdLGQ9YlsxXTtYaChmdW5jdGlvbigpe3ZhciBiPXdoLnRyYW5zaXRpb247d2gudHJhbnNpdGlvbj0xO3RyeXtkKGEpfWZpbmFsbHl7d2gudHJhbnNpdGlvbj1ifX0sW2FdKTtyZXR1cm4gY30sdXNlVHJhbnNpdGlvbjpmdW5jdGlvbigpe3ZhciBhPUtoKEpoKVswXTtyZXR1cm5bVGgoKS5jdXJyZW50LFxuYV19LHVzZU11dGFibGVTb3VyY2U6UGgsdXNlT3BhcXVlSWRlbnRpZmllcjpmdW5jdGlvbigpe3JldHVybiBLaChKaClbMF19LHVuc3RhYmxlX2lzTmV3UmVjb25jaWxlcjohMX0sRmg9e3JlYWRDb250ZXh0OnZnLHVzZUNhbGxiYWNrOmJpLHVzZUNvbnRleHQ6dmcsdXNlRWZmZWN0OlhoLHVzZUltcGVyYXRpdmVIYW5kbGU6JGgsdXNlTGF5b3V0RWZmZWN0OlloLHVzZU1lbW86Y2ksdXNlUmVkdWNlcjpMaCx1c2VSZWY6VGgsdXNlU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gTGgoSmgpfSx1c2VEZWJ1Z1ZhbHVlOmFpLHVzZURlZmVycmVkVmFsdWU6ZnVuY3Rpb24oYSl7dmFyIGI9TGgoSmgpLGM9YlswXSxkPWJbMV07WGgoZnVuY3Rpb24oKXt2YXIgYj13aC50cmFuc2l0aW9uO3doLnRyYW5zaXRpb249MTt0cnl7ZChhKX1maW5hbGx5e3doLnRyYW5zaXRpb249Yn19LFthXSk7cmV0dXJuIGN9LHVzZVRyYW5zaXRpb246ZnVuY3Rpb24oKXt2YXIgYT1MaChKaClbMF07cmV0dXJuW1RoKCkuY3VycmVudCxcbmFdfSx1c2VNdXRhYmxlU291cmNlOlBoLHVzZU9wYXF1ZUlkZW50aWZpZXI6ZnVuY3Rpb24oKXtyZXR1cm4gTGgoSmgpWzBdfSx1bnN0YWJsZV9pc05ld1JlY29uY2lsZXI6ITF9LGVpPXJhLlJlYWN0Q3VycmVudE93bmVyLHVnPSExO2Z1bmN0aW9uIGZpKGEsYixjLGQpe2IuY2hpbGQ9bnVsbD09PWE/WmcoYixudWxsLGMsZCk6WWcoYixhLmNoaWxkLGMsZCl9ZnVuY3Rpb24gZ2koYSxiLGMsZCxlKXtjPWMucmVuZGVyO3ZhciBmPWIucmVmO3RnKGIsZSk7ZD1DaChhLGIsYyxkLGYsZSk7aWYobnVsbCE9PWEmJiF1ZylyZXR1cm4gYi51cGRhdGVRdWV1ZT1hLnVwZGF0ZVF1ZXVlLGIuZmxhZ3MmPS01MTcsYS5sYW5lcyY9fmUsaGkoYSxiLGUpO2IuZmxhZ3N8PTE7ZmkoYSxiLGQsZSk7cmV0dXJuIGIuY2hpbGR9XG5mdW5jdGlvbiBpaShhLGIsYyxkLGUsZil7aWYobnVsbD09PWEpe3ZhciBnPWMudHlwZTtpZihcImZ1bmN0aW9uXCI9PT10eXBlb2YgZyYmIWppKGcpJiZ2b2lkIDA9PT1nLmRlZmF1bHRQcm9wcyYmbnVsbD09PWMuY29tcGFyZSYmdm9pZCAwPT09Yy5kZWZhdWx0UHJvcHMpcmV0dXJuIGIudGFnPTE1LGIudHlwZT1nLGtpKGEsYixnLGQsZSxmKTthPVZnKGMudHlwZSxudWxsLGQsYixiLm1vZGUsZik7YS5yZWY9Yi5yZWY7YS5yZXR1cm49YjtyZXR1cm4gYi5jaGlsZD1hfWc9YS5jaGlsZDtpZigwPT09KGUmZikmJihlPWcubWVtb2l6ZWRQcm9wcyxjPWMuY29tcGFyZSxjPW51bGwhPT1jP2M6SmUsYyhlLGQpJiZhLnJlZj09PWIucmVmKSlyZXR1cm4gaGkoYSxiLGYpO2IuZmxhZ3N8PTE7YT1UZyhnLGQpO2EucmVmPWIucmVmO2EucmV0dXJuPWI7cmV0dXJuIGIuY2hpbGQ9YX1cbmZ1bmN0aW9uIGtpKGEsYixjLGQsZSxmKXtpZihudWxsIT09YSYmSmUoYS5tZW1vaXplZFByb3BzLGQpJiZhLnJlZj09PWIucmVmKWlmKHVnPSExLDAhPT0oZiZlKSkwIT09KGEuZmxhZ3MmMTYzODQpJiYodWc9ITApO2Vsc2UgcmV0dXJuIGIubGFuZXM9YS5sYW5lcyxoaShhLGIsZik7cmV0dXJuIGxpKGEsYixjLGQsZil9XG5mdW5jdGlvbiBtaShhLGIsYyl7dmFyIGQ9Yi5wZW5kaW5nUHJvcHMsZT1kLmNoaWxkcmVuLGY9bnVsbCE9PWE/YS5tZW1vaXplZFN0YXRlOm51bGw7aWYoXCJoaWRkZW5cIj09PWQubW9kZXx8XCJ1bnN0YWJsZS1kZWZlci13aXRob3V0LWhpZGluZ1wiPT09ZC5tb2RlKWlmKDA9PT0oYi5tb2RlJjQpKWIubWVtb2l6ZWRTdGF0ZT17YmFzZUxhbmVzOjB9LG5pKGIsYyk7ZWxzZSBpZigwIT09KGMmMTA3Mzc0MTgyNCkpYi5tZW1vaXplZFN0YXRlPXtiYXNlTGFuZXM6MH0sbmkoYixudWxsIT09Zj9mLmJhc2VMYW5lczpjKTtlbHNlIHJldHVybiBhPW51bGwhPT1mP2YuYmFzZUxhbmVzfGM6YyxiLmxhbmVzPWIuY2hpbGRMYW5lcz0xMDczNzQxODI0LGIubWVtb2l6ZWRTdGF0ZT17YmFzZUxhbmVzOmF9LG5pKGIsYSksbnVsbDtlbHNlIG51bGwhPT1mPyhkPWYuYmFzZUxhbmVzfGMsYi5tZW1vaXplZFN0YXRlPW51bGwpOmQ9YyxuaShiLGQpO2ZpKGEsYixlLGMpO3JldHVybiBiLmNoaWxkfVxuZnVuY3Rpb24gb2koYSxiKXt2YXIgYz1iLnJlZjtpZihudWxsPT09YSYmbnVsbCE9PWN8fG51bGwhPT1hJiZhLnJlZiE9PWMpYi5mbGFnc3w9MTI4fWZ1bmN0aW9uIGxpKGEsYixjLGQsZSl7dmFyIGY9RmYoYyk/RGY6TS5jdXJyZW50O2Y9RWYoYixmKTt0ZyhiLGUpO2M9Q2goYSxiLGMsZCxmLGUpO2lmKG51bGwhPT1hJiYhdWcpcmV0dXJuIGIudXBkYXRlUXVldWU9YS51cGRhdGVRdWV1ZSxiLmZsYWdzJj0tNTE3LGEubGFuZXMmPX5lLGhpKGEsYixlKTtiLmZsYWdzfD0xO2ZpKGEsYixjLGUpO3JldHVybiBiLmNoaWxkfVxuZnVuY3Rpb24gcGkoYSxiLGMsZCxlKXtpZihGZihjKSl7dmFyIGY9ITA7SmYoYil9ZWxzZSBmPSExO3RnKGIsZSk7aWYobnVsbD09PWIuc3RhdGVOb2RlKW51bGwhPT1hJiYoYS5hbHRlcm5hdGU9bnVsbCxiLmFsdGVybmF0ZT1udWxsLGIuZmxhZ3N8PTIpLE1nKGIsYyxkKSxPZyhiLGMsZCxlKSxkPSEwO2Vsc2UgaWYobnVsbD09PWEpe3ZhciBnPWIuc3RhdGVOb2RlLGg9Yi5tZW1vaXplZFByb3BzO2cucHJvcHM9aDt2YXIgaz1nLmNvbnRleHQsbD1jLmNvbnRleHRUeXBlO1wib2JqZWN0XCI9PT10eXBlb2YgbCYmbnVsbCE9PWw/bD12ZyhsKToobD1GZihjKT9EZjpNLmN1cnJlbnQsbD1FZihiLGwpKTt2YXIgbj1jLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyxBPVwiZnVuY3Rpb25cIj09PXR5cGVvZiBufHxcImZ1bmN0aW9uXCI9PT10eXBlb2YgZy5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZTtBfHxcImZ1bmN0aW9uXCIhPT10eXBlb2YgZy5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyYmXG5cImZ1bmN0aW9uXCIhPT10eXBlb2YgZy5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzfHwoaCE9PWR8fGshPT1sKSYmTmcoYixnLGQsbCk7d2c9ITE7dmFyIHA9Yi5tZW1vaXplZFN0YXRlO2cuc3RhdGU9cDtDZyhiLGQsZyxlKTtrPWIubWVtb2l6ZWRTdGF0ZTtoIT09ZHx8cCE9PWt8fE4uY3VycmVudHx8d2c/KFwiZnVuY3Rpb25cIj09PXR5cGVvZiBuJiYoR2coYixjLG4sZCksaz1iLm1lbW9pemVkU3RhdGUpLChoPXdnfHxMZyhiLGMsaCxkLHAsayxsKSk/KEF8fFwiZnVuY3Rpb25cIiE9PXR5cGVvZiBnLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQmJlwiZnVuY3Rpb25cIiE9PXR5cGVvZiBnLmNvbXBvbmVudFdpbGxNb3VudHx8KFwiZnVuY3Rpb25cIj09PXR5cGVvZiBnLmNvbXBvbmVudFdpbGxNb3VudCYmZy5jb21wb25lbnRXaWxsTW91bnQoKSxcImZ1bmN0aW9uXCI9PT10eXBlb2YgZy5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50JiZnLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQoKSksXCJmdW5jdGlvblwiPT09XG50eXBlb2YgZy5jb21wb25lbnREaWRNb3VudCYmKGIuZmxhZ3N8PTQpKTooXCJmdW5jdGlvblwiPT09dHlwZW9mIGcuY29tcG9uZW50RGlkTW91bnQmJihiLmZsYWdzfD00KSxiLm1lbW9pemVkUHJvcHM9ZCxiLm1lbW9pemVkU3RhdGU9ayksZy5wcm9wcz1kLGcuc3RhdGU9ayxnLmNvbnRleHQ9bCxkPWgpOihcImZ1bmN0aW9uXCI9PT10eXBlb2YgZy5jb21wb25lbnREaWRNb3VudCYmKGIuZmxhZ3N8PTQpLGQ9ITEpfWVsc2V7Zz1iLnN0YXRlTm9kZTt5ZyhhLGIpO2g9Yi5tZW1vaXplZFByb3BzO2w9Yi50eXBlPT09Yi5lbGVtZW50VHlwZT9oOmxnKGIudHlwZSxoKTtnLnByb3BzPWw7QT1iLnBlbmRpbmdQcm9wcztwPWcuY29udGV4dDtrPWMuY29udGV4dFR5cGU7XCJvYmplY3RcIj09PXR5cGVvZiBrJiZudWxsIT09az9rPXZnKGspOihrPUZmKGMpP0RmOk0uY3VycmVudCxrPUVmKGIsaykpO3ZhciBDPWMuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzOyhuPVwiZnVuY3Rpb25cIj09PXR5cGVvZiBDfHxcblwiZnVuY3Rpb25cIj09PXR5cGVvZiBnLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlKXx8XCJmdW5jdGlvblwiIT09dHlwZW9mIGcuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMmJlwiZnVuY3Rpb25cIiE9PXR5cGVvZiBnLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHN8fChoIT09QXx8cCE9PWspJiZOZyhiLGcsZCxrKTt3Zz0hMTtwPWIubWVtb2l6ZWRTdGF0ZTtnLnN0YXRlPXA7Q2coYixkLGcsZSk7dmFyIHg9Yi5tZW1vaXplZFN0YXRlO2ghPT1BfHxwIT09eHx8Ti5jdXJyZW50fHx3Zz8oXCJmdW5jdGlvblwiPT09dHlwZW9mIEMmJihHZyhiLGMsQyxkKSx4PWIubWVtb2l6ZWRTdGF0ZSksKGw9d2d8fExnKGIsYyxsLGQscCx4LGspKT8obnx8XCJmdW5jdGlvblwiIT09dHlwZW9mIGcuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUmJlwiZnVuY3Rpb25cIiE9PXR5cGVvZiBnLmNvbXBvbmVudFdpbGxVcGRhdGV8fChcImZ1bmN0aW9uXCI9PT10eXBlb2YgZy5jb21wb25lbnRXaWxsVXBkYXRlJiZnLmNvbXBvbmVudFdpbGxVcGRhdGUoZCxcbngsayksXCJmdW5jdGlvblwiPT09dHlwZW9mIGcuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUmJmcuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUoZCx4LGspKSxcImZ1bmN0aW9uXCI9PT10eXBlb2YgZy5jb21wb25lbnREaWRVcGRhdGUmJihiLmZsYWdzfD00KSxcImZ1bmN0aW9uXCI9PT10eXBlb2YgZy5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSYmKGIuZmxhZ3N8PTI1NikpOihcImZ1bmN0aW9uXCIhPT10eXBlb2YgZy5jb21wb25lbnREaWRVcGRhdGV8fGg9PT1hLm1lbW9pemVkUHJvcHMmJnA9PT1hLm1lbW9pemVkU3RhdGV8fChiLmZsYWdzfD00KSxcImZ1bmN0aW9uXCIhPT10eXBlb2YgZy5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZXx8aD09PWEubWVtb2l6ZWRQcm9wcyYmcD09PWEubWVtb2l6ZWRTdGF0ZXx8KGIuZmxhZ3N8PTI1NiksYi5tZW1vaXplZFByb3BzPWQsYi5tZW1vaXplZFN0YXRlPXgpLGcucHJvcHM9ZCxnLnN0YXRlPXgsZy5jb250ZXh0PWssZD1sKTooXCJmdW5jdGlvblwiIT09dHlwZW9mIGcuY29tcG9uZW50RGlkVXBkYXRlfHxcbmg9PT1hLm1lbW9pemVkUHJvcHMmJnA9PT1hLm1lbW9pemVkU3RhdGV8fChiLmZsYWdzfD00KSxcImZ1bmN0aW9uXCIhPT10eXBlb2YgZy5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZXx8aD09PWEubWVtb2l6ZWRQcm9wcyYmcD09PWEubWVtb2l6ZWRTdGF0ZXx8KGIuZmxhZ3N8PTI1NiksZD0hMSl9cmV0dXJuIHFpKGEsYixjLGQsZixlKX1cbmZ1bmN0aW9uIHFpKGEsYixjLGQsZSxmKXtvaShhLGIpO3ZhciBnPTAhPT0oYi5mbGFncyY2NCk7aWYoIWQmJiFnKXJldHVybiBlJiZLZihiLGMsITEpLGhpKGEsYixmKTtkPWIuc3RhdGVOb2RlO2VpLmN1cnJlbnQ9Yjt2YXIgaD1nJiZcImZ1bmN0aW9uXCIhPT10eXBlb2YgYy5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3I/bnVsbDpkLnJlbmRlcigpO2IuZmxhZ3N8PTE7bnVsbCE9PWEmJmc/KGIuY2hpbGQ9WWcoYixhLmNoaWxkLG51bGwsZiksYi5jaGlsZD1ZZyhiLG51bGwsaCxmKSk6ZmkoYSxiLGgsZik7Yi5tZW1vaXplZFN0YXRlPWQuc3RhdGU7ZSYmS2YoYixjLCEwKTtyZXR1cm4gYi5jaGlsZH1mdW5jdGlvbiByaShhKXt2YXIgYj1hLnN0YXRlTm9kZTtiLnBlbmRpbmdDb250ZXh0P0hmKGEsYi5wZW5kaW5nQ29udGV4dCxiLnBlbmRpbmdDb250ZXh0IT09Yi5jb250ZXh0KTpiLmNvbnRleHQmJkhmKGEsYi5jb250ZXh0LCExKTtlaChhLGIuY29udGFpbmVySW5mbyl9XG52YXIgc2k9e2RlaHlkcmF0ZWQ6bnVsbCxyZXRyeUxhbmU6MH07XG5mdW5jdGlvbiB0aShhLGIsYyl7dmFyIGQ9Yi5wZW5kaW5nUHJvcHMsZT1QLmN1cnJlbnQsZj0hMSxnOyhnPTAhPT0oYi5mbGFncyY2NCkpfHwoZz1udWxsIT09YSYmbnVsbD09PWEubWVtb2l6ZWRTdGF0ZT8hMTowIT09KGUmMikpO2c/KGY9ITAsYi5mbGFncyY9LTY1KTpudWxsIT09YSYmbnVsbD09PWEubWVtb2l6ZWRTdGF0ZXx8dm9pZCAwPT09ZC5mYWxsYmFja3x8ITA9PT1kLnVuc3RhYmxlX2F2b2lkVGhpc0ZhbGxiYWNrfHwoZXw9MSk7SShQLGUmMSk7aWYobnVsbD09PWEpe3ZvaWQgMCE9PWQuZmFsbGJhY2smJnBoKGIpO2E9ZC5jaGlsZHJlbjtlPWQuZmFsbGJhY2s7aWYoZilyZXR1cm4gYT11aShiLGEsZSxjKSxiLmNoaWxkLm1lbW9pemVkU3RhdGU9e2Jhc2VMYW5lczpjfSxiLm1lbW9pemVkU3RhdGU9c2ksYTtpZihcIm51bWJlclwiPT09dHlwZW9mIGQudW5zdGFibGVfZXhwZWN0ZWRMb2FkVGltZSlyZXR1cm4gYT11aShiLGEsZSxjKSxiLmNoaWxkLm1lbW9pemVkU3RhdGU9e2Jhc2VMYW5lczpjfSxcbmIubWVtb2l6ZWRTdGF0ZT1zaSxiLmxhbmVzPTMzNTU0NDMyLGE7Yz12aSh7bW9kZTpcInZpc2libGVcIixjaGlsZHJlbjphfSxiLm1vZGUsYyxudWxsKTtjLnJldHVybj1iO3JldHVybiBiLmNoaWxkPWN9aWYobnVsbCE9PWEubWVtb2l6ZWRTdGF0ZSl7aWYoZilyZXR1cm4gZD13aShhLGIsZC5jaGlsZHJlbixkLmZhbGxiYWNrLGMpLGY9Yi5jaGlsZCxlPWEuY2hpbGQubWVtb2l6ZWRTdGF0ZSxmLm1lbW9pemVkU3RhdGU9bnVsbD09PWU/e2Jhc2VMYW5lczpjfTp7YmFzZUxhbmVzOmUuYmFzZUxhbmVzfGN9LGYuY2hpbGRMYW5lcz1hLmNoaWxkTGFuZXMmfmMsYi5tZW1vaXplZFN0YXRlPXNpLGQ7Yz14aShhLGIsZC5jaGlsZHJlbixjKTtiLm1lbW9pemVkU3RhdGU9bnVsbDtyZXR1cm4gY31pZihmKXJldHVybiBkPXdpKGEsYixkLmNoaWxkcmVuLGQuZmFsbGJhY2ssYyksZj1iLmNoaWxkLGU9YS5jaGlsZC5tZW1vaXplZFN0YXRlLGYubWVtb2l6ZWRTdGF0ZT1udWxsPT09ZT97YmFzZUxhbmVzOmN9Olxue2Jhc2VMYW5lczplLmJhc2VMYW5lc3xjfSxmLmNoaWxkTGFuZXM9YS5jaGlsZExhbmVzJn5jLGIubWVtb2l6ZWRTdGF0ZT1zaSxkO2M9eGkoYSxiLGQuY2hpbGRyZW4sYyk7Yi5tZW1vaXplZFN0YXRlPW51bGw7cmV0dXJuIGN9ZnVuY3Rpb24gdWkoYSxiLGMsZCl7dmFyIGU9YS5tb2RlLGY9YS5jaGlsZDtiPXttb2RlOlwiaGlkZGVuXCIsY2hpbGRyZW46Yn07MD09PShlJjIpJiZudWxsIT09Zj8oZi5jaGlsZExhbmVzPTAsZi5wZW5kaW5nUHJvcHM9Yik6Zj12aShiLGUsMCxudWxsKTtjPVhnKGMsZSxkLG51bGwpO2YucmV0dXJuPWE7Yy5yZXR1cm49YTtmLnNpYmxpbmc9YzthLmNoaWxkPWY7cmV0dXJuIGN9XG5mdW5jdGlvbiB4aShhLGIsYyxkKXt2YXIgZT1hLmNoaWxkO2E9ZS5zaWJsaW5nO2M9VGcoZSx7bW9kZTpcInZpc2libGVcIixjaGlsZHJlbjpjfSk7MD09PShiLm1vZGUmMikmJihjLmxhbmVzPWQpO2MucmV0dXJuPWI7Yy5zaWJsaW5nPW51bGw7bnVsbCE9PWEmJihhLm5leHRFZmZlY3Q9bnVsbCxhLmZsYWdzPTgsYi5maXJzdEVmZmVjdD1iLmxhc3RFZmZlY3Q9YSk7cmV0dXJuIGIuY2hpbGQ9Y31cbmZ1bmN0aW9uIHdpKGEsYixjLGQsZSl7dmFyIGY9Yi5tb2RlLGc9YS5jaGlsZDthPWcuc2libGluZzt2YXIgaD17bW9kZTpcImhpZGRlblwiLGNoaWxkcmVuOmN9OzA9PT0oZiYyKSYmYi5jaGlsZCE9PWc/KGM9Yi5jaGlsZCxjLmNoaWxkTGFuZXM9MCxjLnBlbmRpbmdQcm9wcz1oLGc9Yy5sYXN0RWZmZWN0LG51bGwhPT1nPyhiLmZpcnN0RWZmZWN0PWMuZmlyc3RFZmZlY3QsYi5sYXN0RWZmZWN0PWcsZy5uZXh0RWZmZWN0PW51bGwpOmIuZmlyc3RFZmZlY3Q9Yi5sYXN0RWZmZWN0PW51bGwpOmM9VGcoZyxoKTtudWxsIT09YT9kPVRnKGEsZCk6KGQ9WGcoZCxmLGUsbnVsbCksZC5mbGFnc3w9Mik7ZC5yZXR1cm49YjtjLnJldHVybj1iO2Muc2libGluZz1kO2IuY2hpbGQ9YztyZXR1cm4gZH1mdW5jdGlvbiB5aShhLGIpe2EubGFuZXN8PWI7dmFyIGM9YS5hbHRlcm5hdGU7bnVsbCE9PWMmJihjLmxhbmVzfD1iKTtzZyhhLnJldHVybixiKX1cbmZ1bmN0aW9uIHppKGEsYixjLGQsZSxmKXt2YXIgZz1hLm1lbW9pemVkU3RhdGU7bnVsbD09PWc/YS5tZW1vaXplZFN0YXRlPXtpc0JhY2t3YXJkczpiLHJlbmRlcmluZzpudWxsLHJlbmRlcmluZ1N0YXJ0VGltZTowLGxhc3Q6ZCx0YWlsOmMsdGFpbE1vZGU6ZSxsYXN0RWZmZWN0OmZ9OihnLmlzQmFja3dhcmRzPWIsZy5yZW5kZXJpbmc9bnVsbCxnLnJlbmRlcmluZ1N0YXJ0VGltZT0wLGcubGFzdD1kLGcudGFpbD1jLGcudGFpbE1vZGU9ZSxnLmxhc3RFZmZlY3Q9Zil9XG5mdW5jdGlvbiBBaShhLGIsYyl7dmFyIGQ9Yi5wZW5kaW5nUHJvcHMsZT1kLnJldmVhbE9yZGVyLGY9ZC50YWlsO2ZpKGEsYixkLmNoaWxkcmVuLGMpO2Q9UC5jdXJyZW50O2lmKDAhPT0oZCYyKSlkPWQmMXwyLGIuZmxhZ3N8PTY0O2Vsc2V7aWYobnVsbCE9PWEmJjAhPT0oYS5mbGFncyY2NCkpYTpmb3IoYT1iLmNoaWxkO251bGwhPT1hOyl7aWYoMTM9PT1hLnRhZyludWxsIT09YS5tZW1vaXplZFN0YXRlJiZ5aShhLGMpO2Vsc2UgaWYoMTk9PT1hLnRhZyl5aShhLGMpO2Vsc2UgaWYobnVsbCE9PWEuY2hpbGQpe2EuY2hpbGQucmV0dXJuPWE7YT1hLmNoaWxkO2NvbnRpbnVlfWlmKGE9PT1iKWJyZWFrIGE7Zm9yKDtudWxsPT09YS5zaWJsaW5nOyl7aWYobnVsbD09PWEucmV0dXJufHxhLnJldHVybj09PWIpYnJlYWsgYTthPWEucmV0dXJufWEuc2libGluZy5yZXR1cm49YS5yZXR1cm47YT1hLnNpYmxpbmd9ZCY9MX1JKFAsZCk7aWYoMD09PShiLm1vZGUmMikpYi5tZW1vaXplZFN0YXRlPVxubnVsbDtlbHNlIHN3aXRjaChlKXtjYXNlIFwiZm9yd2FyZHNcIjpjPWIuY2hpbGQ7Zm9yKGU9bnVsbDtudWxsIT09YzspYT1jLmFsdGVybmF0ZSxudWxsIT09YSYmbnVsbD09PWloKGEpJiYoZT1jKSxjPWMuc2libGluZztjPWU7bnVsbD09PWM/KGU9Yi5jaGlsZCxiLmNoaWxkPW51bGwpOihlPWMuc2libGluZyxjLnNpYmxpbmc9bnVsbCk7emkoYiwhMSxlLGMsZixiLmxhc3RFZmZlY3QpO2JyZWFrO2Nhc2UgXCJiYWNrd2FyZHNcIjpjPW51bGw7ZT1iLmNoaWxkO2ZvcihiLmNoaWxkPW51bGw7bnVsbCE9PWU7KXthPWUuYWx0ZXJuYXRlO2lmKG51bGwhPT1hJiZudWxsPT09aWgoYSkpe2IuY2hpbGQ9ZTticmVha31hPWUuc2libGluZztlLnNpYmxpbmc9YztjPWU7ZT1hfXppKGIsITAsYyxudWxsLGYsYi5sYXN0RWZmZWN0KTticmVhaztjYXNlIFwidG9nZXRoZXJcIjp6aShiLCExLG51bGwsbnVsbCx2b2lkIDAsYi5sYXN0RWZmZWN0KTticmVhaztkZWZhdWx0OmIubWVtb2l6ZWRTdGF0ZT1udWxsfXJldHVybiBiLmNoaWxkfVxuZnVuY3Rpb24gaGkoYSxiLGMpe251bGwhPT1hJiYoYi5kZXBlbmRlbmNpZXM9YS5kZXBlbmRlbmNpZXMpO0RnfD1iLmxhbmVzO2lmKDAhPT0oYyZiLmNoaWxkTGFuZXMpKXtpZihudWxsIT09YSYmYi5jaGlsZCE9PWEuY2hpbGQpdGhyb3cgRXJyb3IoeSgxNTMpKTtpZihudWxsIT09Yi5jaGlsZCl7YT1iLmNoaWxkO2M9VGcoYSxhLnBlbmRpbmdQcm9wcyk7Yi5jaGlsZD1jO2ZvcihjLnJldHVybj1iO251bGwhPT1hLnNpYmxpbmc7KWE9YS5zaWJsaW5nLGM9Yy5zaWJsaW5nPVRnKGEsYS5wZW5kaW5nUHJvcHMpLGMucmV0dXJuPWI7Yy5zaWJsaW5nPW51bGx9cmV0dXJuIGIuY2hpbGR9cmV0dXJuIG51bGx9dmFyIEJpLENpLERpLEVpO1xuQmk9ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9Yi5jaGlsZDtudWxsIT09Yzspe2lmKDU9PT1jLnRhZ3x8Nj09PWMudGFnKWEuYXBwZW5kQ2hpbGQoYy5zdGF0ZU5vZGUpO2Vsc2UgaWYoNCE9PWMudGFnJiZudWxsIT09Yy5jaGlsZCl7Yy5jaGlsZC5yZXR1cm49YztjPWMuY2hpbGQ7Y29udGludWV9aWYoYz09PWIpYnJlYWs7Zm9yKDtudWxsPT09Yy5zaWJsaW5nOyl7aWYobnVsbD09PWMucmV0dXJufHxjLnJldHVybj09PWIpcmV0dXJuO2M9Yy5yZXR1cm59Yy5zaWJsaW5nLnJldHVybj1jLnJldHVybjtjPWMuc2libGluZ319O0NpPWZ1bmN0aW9uKCl7fTtcbkRpPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPWEubWVtb2l6ZWRQcm9wcztpZihlIT09ZCl7YT1iLnN0YXRlTm9kZTtkaChhaC5jdXJyZW50KTt2YXIgZj1udWxsO3N3aXRjaChjKXtjYXNlIFwiaW5wdXRcIjplPVlhKGEsZSk7ZD1ZYShhLGQpO2Y9W107YnJlYWs7Y2FzZSBcIm9wdGlvblwiOmU9ZWIoYSxlKTtkPWViKGEsZCk7Zj1bXTticmVhaztjYXNlIFwic2VsZWN0XCI6ZT1tKHt9LGUse3ZhbHVlOnZvaWQgMH0pO2Q9bSh7fSxkLHt2YWx1ZTp2b2lkIDB9KTtmPVtdO2JyZWFrO2Nhc2UgXCJ0ZXh0YXJlYVwiOmU9Z2IoYSxlKTtkPWdiKGEsZCk7Zj1bXTticmVhaztkZWZhdWx0OlwiZnVuY3Rpb25cIiE9PXR5cGVvZiBlLm9uQ2xpY2smJlwiZnVuY3Rpb25cIj09PXR5cGVvZiBkLm9uQ2xpY2smJihhLm9uY2xpY2s9amYpfXZiKGMsZCk7dmFyIGc7Yz1udWxsO2ZvcihsIGluIGUpaWYoIWQuaGFzT3duUHJvcGVydHkobCkmJmUuaGFzT3duUHJvcGVydHkobCkmJm51bGwhPWVbbF0paWYoXCJzdHlsZVwiPT09XG5sKXt2YXIgaD1lW2xdO2ZvcihnIGluIGgpaC5oYXNPd25Qcm9wZXJ0eShnKSYmKGN8fChjPXt9KSxjW2ddPVwiXCIpfWVsc2VcImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MXCIhPT1sJiZcImNoaWxkcmVuXCIhPT1sJiZcInN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZ1wiIT09bCYmXCJzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmdcIiE9PWwmJlwiYXV0b0ZvY3VzXCIhPT1sJiYoY2EuaGFzT3duUHJvcGVydHkobCk/Znx8KGY9W10pOihmPWZ8fFtdKS5wdXNoKGwsbnVsbCkpO2ZvcihsIGluIGQpe3ZhciBrPWRbbF07aD1udWxsIT1lP2VbbF06dm9pZCAwO2lmKGQuaGFzT3duUHJvcGVydHkobCkmJmshPT1oJiYobnVsbCE9a3x8bnVsbCE9aCkpaWYoXCJzdHlsZVwiPT09bClpZihoKXtmb3IoZyBpbiBoKSFoLmhhc093blByb3BlcnR5KGcpfHxrJiZrLmhhc093blByb3BlcnR5KGcpfHwoY3x8KGM9e30pLGNbZ109XCJcIik7Zm9yKGcgaW4gaylrLmhhc093blByb3BlcnR5KGcpJiZoW2ddIT09a1tnXSYmKGN8fFxuKGM9e30pLGNbZ109a1tnXSl9ZWxzZSBjfHwoZnx8KGY9W10pLGYucHVzaChsLGMpKSxjPWs7ZWxzZVwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxcIj09PWw/KGs9az9rLl9faHRtbDp2b2lkIDAsaD1oP2guX19odG1sOnZvaWQgMCxudWxsIT1rJiZoIT09ayYmKGY9Znx8W10pLnB1c2gobCxrKSk6XCJjaGlsZHJlblwiPT09bD9cInN0cmluZ1wiIT09dHlwZW9mIGsmJlwibnVtYmVyXCIhPT10eXBlb2Yga3x8KGY9Znx8W10pLnB1c2gobCxcIlwiK2spOlwic3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nXCIhPT1sJiZcInN1cHByZXNzSHlkcmF0aW9uV2FybmluZ1wiIT09bCYmKGNhLmhhc093blByb3BlcnR5KGwpPyhudWxsIT1rJiZcIm9uU2Nyb2xsXCI9PT1sJiZHKFwic2Nyb2xsXCIsYSksZnx8aD09PWt8fChmPVtdKSk6XCJvYmplY3RcIj09PXR5cGVvZiBrJiZudWxsIT09ayYmay4kJHR5cGVvZj09PUdhP2sudG9TdHJpbmcoKTooZj1mfHxbXSkucHVzaChsLGspKX1jJiYoZj1mfHxbXSkucHVzaChcInN0eWxlXCIsXG5jKTt2YXIgbD1mO2lmKGIudXBkYXRlUXVldWU9bCliLmZsYWdzfD00fX07RWk9ZnVuY3Rpb24oYSxiLGMsZCl7YyE9PWQmJihiLmZsYWdzfD00KX07ZnVuY3Rpb24gRmkoYSxiKXtpZighbGgpc3dpdGNoKGEudGFpbE1vZGUpe2Nhc2UgXCJoaWRkZW5cIjpiPWEudGFpbDtmb3IodmFyIGM9bnVsbDtudWxsIT09YjspbnVsbCE9PWIuYWx0ZXJuYXRlJiYoYz1iKSxiPWIuc2libGluZztudWxsPT09Yz9hLnRhaWw9bnVsbDpjLnNpYmxpbmc9bnVsbDticmVhaztjYXNlIFwiY29sbGFwc2VkXCI6Yz1hLnRhaWw7Zm9yKHZhciBkPW51bGw7bnVsbCE9PWM7KW51bGwhPT1jLmFsdGVybmF0ZSYmKGQ9YyksYz1jLnNpYmxpbmc7bnVsbD09PWQ/Ynx8bnVsbD09PWEudGFpbD9hLnRhaWw9bnVsbDphLnRhaWwuc2libGluZz1udWxsOmQuc2libGluZz1udWxsfX1cbmZ1bmN0aW9uIEdpKGEsYixjKXt2YXIgZD1iLnBlbmRpbmdQcm9wcztzd2l0Y2goYi50YWcpe2Nhc2UgMjpjYXNlIDE2OmNhc2UgMTU6Y2FzZSAwOmNhc2UgMTE6Y2FzZSA3OmNhc2UgODpjYXNlIDEyOmNhc2UgOTpjYXNlIDE0OnJldHVybiBudWxsO2Nhc2UgMTpyZXR1cm4gRmYoYi50eXBlKSYmR2YoKSxudWxsO2Nhc2UgMzpmaCgpO0goTik7SChNKTt1aCgpO2Q9Yi5zdGF0ZU5vZGU7ZC5wZW5kaW5nQ29udGV4dCYmKGQuY29udGV4dD1kLnBlbmRpbmdDb250ZXh0LGQucGVuZGluZ0NvbnRleHQ9bnVsbCk7aWYobnVsbD09PWF8fG51bGw9PT1hLmNoaWxkKXJoKGIpP2IuZmxhZ3N8PTQ6ZC5oeWRyYXRlfHwoYi5mbGFnc3w9MjU2KTtDaShiKTtyZXR1cm4gbnVsbDtjYXNlIDU6aGgoYik7dmFyIGU9ZGgoY2guY3VycmVudCk7Yz1iLnR5cGU7aWYobnVsbCE9PWEmJm51bGwhPWIuc3RhdGVOb2RlKURpKGEsYixjLGQsZSksYS5yZWYhPT1iLnJlZiYmKGIuZmxhZ3N8PTEyOCk7ZWxzZXtpZighZCl7aWYobnVsbD09PVxuYi5zdGF0ZU5vZGUpdGhyb3cgRXJyb3IoeSgxNjYpKTtyZXR1cm4gbnVsbH1hPWRoKGFoLmN1cnJlbnQpO2lmKHJoKGIpKXtkPWIuc3RhdGVOb2RlO2M9Yi50eXBlO3ZhciBmPWIubWVtb2l6ZWRQcm9wcztkW3dmXT1iO2RbeGZdPWY7c3dpdGNoKGMpe2Nhc2UgXCJkaWFsb2dcIjpHKFwiY2FuY2VsXCIsZCk7RyhcImNsb3NlXCIsZCk7YnJlYWs7Y2FzZSBcImlmcmFtZVwiOmNhc2UgXCJvYmplY3RcIjpjYXNlIFwiZW1iZWRcIjpHKFwibG9hZFwiLGQpO2JyZWFrO2Nhc2UgXCJ2aWRlb1wiOmNhc2UgXCJhdWRpb1wiOmZvcihhPTA7YTxYZS5sZW5ndGg7YSsrKUcoWGVbYV0sZCk7YnJlYWs7Y2FzZSBcInNvdXJjZVwiOkcoXCJlcnJvclwiLGQpO2JyZWFrO2Nhc2UgXCJpbWdcIjpjYXNlIFwiaW1hZ2VcIjpjYXNlIFwibGlua1wiOkcoXCJlcnJvclwiLGQpO0coXCJsb2FkXCIsZCk7YnJlYWs7Y2FzZSBcImRldGFpbHNcIjpHKFwidG9nZ2xlXCIsZCk7YnJlYWs7Y2FzZSBcImlucHV0XCI6WmEoZCxmKTtHKFwiaW52YWxpZFwiLGQpO2JyZWFrO2Nhc2UgXCJzZWxlY3RcIjpkLl93cmFwcGVyU3RhdGU9XG57d2FzTXVsdGlwbGU6ISFmLm11bHRpcGxlfTtHKFwiaW52YWxpZFwiLGQpO2JyZWFrO2Nhc2UgXCJ0ZXh0YXJlYVwiOmhiKGQsZiksRyhcImludmFsaWRcIixkKX12YihjLGYpO2E9bnVsbDtmb3IodmFyIGcgaW4gZilmLmhhc093blByb3BlcnR5KGcpJiYoZT1mW2ddLFwiY2hpbGRyZW5cIj09PWc/XCJzdHJpbmdcIj09PXR5cGVvZiBlP2QudGV4dENvbnRlbnQhPT1lJiYoYT1bXCJjaGlsZHJlblwiLGVdKTpcIm51bWJlclwiPT09dHlwZW9mIGUmJmQudGV4dENvbnRlbnQhPT1cIlwiK2UmJihhPVtcImNoaWxkcmVuXCIsXCJcIitlXSk6Y2EuaGFzT3duUHJvcGVydHkoZykmJm51bGwhPWUmJlwib25TY3JvbGxcIj09PWcmJkcoXCJzY3JvbGxcIixkKSk7c3dpdGNoKGMpe2Nhc2UgXCJpbnB1dFwiOlZhKGQpO2NiKGQsZiwhMCk7YnJlYWs7Y2FzZSBcInRleHRhcmVhXCI6VmEoZCk7amIoZCk7YnJlYWs7Y2FzZSBcInNlbGVjdFwiOmNhc2UgXCJvcHRpb25cIjpicmVhaztkZWZhdWx0OlwiZnVuY3Rpb25cIj09PXR5cGVvZiBmLm9uQ2xpY2smJihkLm9uY2xpY2s9XG5qZil9ZD1hO2IudXBkYXRlUXVldWU9ZDtudWxsIT09ZCYmKGIuZmxhZ3N8PTQpfWVsc2V7Zz05PT09ZS5ub2RlVHlwZT9lOmUub3duZXJEb2N1bWVudDthPT09a2IuaHRtbCYmKGE9bGIoYykpO2E9PT1rYi5odG1sP1wic2NyaXB0XCI9PT1jPyhhPWcuY3JlYXRlRWxlbWVudChcImRpdlwiKSxhLmlubmVySFRNTD1cIjxzY3JpcHQ+XFx4M2Mvc2NyaXB0PlwiLGE9YS5yZW1vdmVDaGlsZChhLmZpcnN0Q2hpbGQpKTpcInN0cmluZ1wiPT09dHlwZW9mIGQuaXM/YT1nLmNyZWF0ZUVsZW1lbnQoYyx7aXM6ZC5pc30pOihhPWcuY3JlYXRlRWxlbWVudChjKSxcInNlbGVjdFwiPT09YyYmKGc9YSxkLm11bHRpcGxlP2cubXVsdGlwbGU9ITA6ZC5zaXplJiYoZy5zaXplPWQuc2l6ZSkpKTphPWcuY3JlYXRlRWxlbWVudE5TKGEsYyk7YVt3Zl09YjthW3hmXT1kO0JpKGEsYiwhMSwhMSk7Yi5zdGF0ZU5vZGU9YTtnPXdiKGMsZCk7c3dpdGNoKGMpe2Nhc2UgXCJkaWFsb2dcIjpHKFwiY2FuY2VsXCIsYSk7RyhcImNsb3NlXCIsYSk7XG5lPWQ7YnJlYWs7Y2FzZSBcImlmcmFtZVwiOmNhc2UgXCJvYmplY3RcIjpjYXNlIFwiZW1iZWRcIjpHKFwibG9hZFwiLGEpO2U9ZDticmVhaztjYXNlIFwidmlkZW9cIjpjYXNlIFwiYXVkaW9cIjpmb3IoZT0wO2U8WGUubGVuZ3RoO2UrKylHKFhlW2VdLGEpO2U9ZDticmVhaztjYXNlIFwic291cmNlXCI6RyhcImVycm9yXCIsYSk7ZT1kO2JyZWFrO2Nhc2UgXCJpbWdcIjpjYXNlIFwiaW1hZ2VcIjpjYXNlIFwibGlua1wiOkcoXCJlcnJvclwiLGEpO0coXCJsb2FkXCIsYSk7ZT1kO2JyZWFrO2Nhc2UgXCJkZXRhaWxzXCI6RyhcInRvZ2dsZVwiLGEpO2U9ZDticmVhaztjYXNlIFwiaW5wdXRcIjpaYShhLGQpO2U9WWEoYSxkKTtHKFwiaW52YWxpZFwiLGEpO2JyZWFrO2Nhc2UgXCJvcHRpb25cIjplPWViKGEsZCk7YnJlYWs7Y2FzZSBcInNlbGVjdFwiOmEuX3dyYXBwZXJTdGF0ZT17d2FzTXVsdGlwbGU6ISFkLm11bHRpcGxlfTtlPW0oe30sZCx7dmFsdWU6dm9pZCAwfSk7RyhcImludmFsaWRcIixhKTticmVhaztjYXNlIFwidGV4dGFyZWFcIjpoYihhLGQpO2U9XG5nYihhLGQpO0coXCJpbnZhbGlkXCIsYSk7YnJlYWs7ZGVmYXVsdDplPWR9dmIoYyxlKTt2YXIgaD1lO2ZvcihmIGluIGgpaWYoaC5oYXNPd25Qcm9wZXJ0eShmKSl7dmFyIGs9aFtmXTtcInN0eWxlXCI9PT1mP3RiKGEsayk6XCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiPT09Zj8oaz1rP2suX19odG1sOnZvaWQgMCxudWxsIT1rJiZvYihhLGspKTpcImNoaWxkcmVuXCI9PT1mP1wic3RyaW5nXCI9PT10eXBlb2Ygaz8oXCJ0ZXh0YXJlYVwiIT09Y3x8XCJcIiE9PWspJiZwYihhLGspOlwibnVtYmVyXCI9PT10eXBlb2YgayYmcGIoYSxcIlwiK2spOlwic3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nXCIhPT1mJiZcInN1cHByZXNzSHlkcmF0aW9uV2FybmluZ1wiIT09ZiYmXCJhdXRvRm9jdXNcIiE9PWYmJihjYS5oYXNPd25Qcm9wZXJ0eShmKT9udWxsIT1rJiZcIm9uU2Nyb2xsXCI9PT1mJiZHKFwic2Nyb2xsXCIsYSk6bnVsbCE9ayYmcWEoYSxmLGssZykpfXN3aXRjaChjKXtjYXNlIFwiaW5wdXRcIjpWYShhKTtjYihhLGQsITEpO1xuYnJlYWs7Y2FzZSBcInRleHRhcmVhXCI6VmEoYSk7amIoYSk7YnJlYWs7Y2FzZSBcIm9wdGlvblwiOm51bGwhPWQudmFsdWUmJmEuc2V0QXR0cmlidXRlKFwidmFsdWVcIixcIlwiK1NhKGQudmFsdWUpKTticmVhaztjYXNlIFwic2VsZWN0XCI6YS5tdWx0aXBsZT0hIWQubXVsdGlwbGU7Zj1kLnZhbHVlO251bGwhPWY/ZmIoYSwhIWQubXVsdGlwbGUsZiwhMSk6bnVsbCE9ZC5kZWZhdWx0VmFsdWUmJmZiKGEsISFkLm11bHRpcGxlLGQuZGVmYXVsdFZhbHVlLCEwKTticmVhaztkZWZhdWx0OlwiZnVuY3Rpb25cIj09PXR5cGVvZiBlLm9uQ2xpY2smJihhLm9uY2xpY2s9amYpfW1mKGMsZCkmJihiLmZsYWdzfD00KX1udWxsIT09Yi5yZWYmJihiLmZsYWdzfD0xMjgpfXJldHVybiBudWxsO2Nhc2UgNjppZihhJiZudWxsIT1iLnN0YXRlTm9kZSlFaShhLGIsYS5tZW1vaXplZFByb3BzLGQpO2Vsc2V7aWYoXCJzdHJpbmdcIiE9PXR5cGVvZiBkJiZudWxsPT09Yi5zdGF0ZU5vZGUpdGhyb3cgRXJyb3IoeSgxNjYpKTtcbmM9ZGgoY2guY3VycmVudCk7ZGgoYWguY3VycmVudCk7cmgoYik/KGQ9Yi5zdGF0ZU5vZGUsYz1iLm1lbW9pemVkUHJvcHMsZFt3Zl09YixkLm5vZGVWYWx1ZSE9PWMmJihiLmZsYWdzfD00KSk6KGQ9KDk9PT1jLm5vZGVUeXBlP2M6Yy5vd25lckRvY3VtZW50KS5jcmVhdGVUZXh0Tm9kZShkKSxkW3dmXT1iLGIuc3RhdGVOb2RlPWQpfXJldHVybiBudWxsO2Nhc2UgMTM6SChQKTtkPWIubWVtb2l6ZWRTdGF0ZTtpZigwIT09KGIuZmxhZ3MmNjQpKXJldHVybiBiLmxhbmVzPWMsYjtkPW51bGwhPT1kO2M9ITE7bnVsbD09PWE/dm9pZCAwIT09Yi5tZW1vaXplZFByb3BzLmZhbGxiYWNrJiZyaChiKTpjPW51bGwhPT1hLm1lbW9pemVkU3RhdGU7aWYoZCYmIWMmJjAhPT0oYi5tb2RlJjIpKWlmKG51bGw9PT1hJiYhMCE9PWIubWVtb2l6ZWRQcm9wcy51bnN0YWJsZV9hdm9pZFRoaXNGYWxsYmFja3x8MCE9PShQLmN1cnJlbnQmMSkpMD09PVYmJihWPTMpO2Vsc2V7aWYoMD09PVZ8fDM9PT1WKVY9XG40O251bGw9PT1VfHwwPT09KERnJjEzNDIxNzcyNykmJjA9PT0oSGkmMTM0MjE3NzI3KXx8SWkoVSxXKX1pZihkfHxjKWIuZmxhZ3N8PTQ7cmV0dXJuIG51bGw7Y2FzZSA0OnJldHVybiBmaCgpLENpKGIpLG51bGw9PT1hJiZjZihiLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKSxudWxsO2Nhc2UgMTA6cmV0dXJuIHJnKGIpLG51bGw7Y2FzZSAxNzpyZXR1cm4gRmYoYi50eXBlKSYmR2YoKSxudWxsO2Nhc2UgMTk6SChQKTtkPWIubWVtb2l6ZWRTdGF0ZTtpZihudWxsPT09ZClyZXR1cm4gbnVsbDtmPTAhPT0oYi5mbGFncyY2NCk7Zz1kLnJlbmRlcmluZztpZihudWxsPT09ZylpZihmKUZpKGQsITEpO2Vsc2V7aWYoMCE9PVZ8fG51bGwhPT1hJiYwIT09KGEuZmxhZ3MmNjQpKWZvcihhPWIuY2hpbGQ7bnVsbCE9PWE7KXtnPWloKGEpO2lmKG51bGwhPT1nKXtiLmZsYWdzfD02NDtGaShkLCExKTtmPWcudXBkYXRlUXVldWU7bnVsbCE9PWYmJihiLnVwZGF0ZVF1ZXVlPWYsYi5mbGFnc3w9NCk7XG5udWxsPT09ZC5sYXN0RWZmZWN0JiYoYi5maXJzdEVmZmVjdD1udWxsKTtiLmxhc3RFZmZlY3Q9ZC5sYXN0RWZmZWN0O2Q9Yztmb3IoYz1iLmNoaWxkO251bGwhPT1jOylmPWMsYT1kLGYuZmxhZ3MmPTIsZi5uZXh0RWZmZWN0PW51bGwsZi5maXJzdEVmZmVjdD1udWxsLGYubGFzdEVmZmVjdD1udWxsLGc9Zi5hbHRlcm5hdGUsbnVsbD09PWc/KGYuY2hpbGRMYW5lcz0wLGYubGFuZXM9YSxmLmNoaWxkPW51bGwsZi5tZW1vaXplZFByb3BzPW51bGwsZi5tZW1vaXplZFN0YXRlPW51bGwsZi51cGRhdGVRdWV1ZT1udWxsLGYuZGVwZW5kZW5jaWVzPW51bGwsZi5zdGF0ZU5vZGU9bnVsbCk6KGYuY2hpbGRMYW5lcz1nLmNoaWxkTGFuZXMsZi5sYW5lcz1nLmxhbmVzLGYuY2hpbGQ9Zy5jaGlsZCxmLm1lbW9pemVkUHJvcHM9Zy5tZW1vaXplZFByb3BzLGYubWVtb2l6ZWRTdGF0ZT1nLm1lbW9pemVkU3RhdGUsZi51cGRhdGVRdWV1ZT1nLnVwZGF0ZVF1ZXVlLGYudHlwZT1nLnR5cGUsYT1nLmRlcGVuZGVuY2llcyxcbmYuZGVwZW5kZW5jaWVzPW51bGw9PT1hP251bGw6e2xhbmVzOmEubGFuZXMsZmlyc3RDb250ZXh0OmEuZmlyc3RDb250ZXh0fSksYz1jLnNpYmxpbmc7SShQLFAuY3VycmVudCYxfDIpO3JldHVybiBiLmNoaWxkfWE9YS5zaWJsaW5nfW51bGwhPT1kLnRhaWwmJk8oKT5KaSYmKGIuZmxhZ3N8PTY0LGY9ITAsRmkoZCwhMSksYi5sYW5lcz0zMzU1NDQzMil9ZWxzZXtpZighZilpZihhPWloKGcpLG51bGwhPT1hKXtpZihiLmZsYWdzfD02NCxmPSEwLGM9YS51cGRhdGVRdWV1ZSxudWxsIT09YyYmKGIudXBkYXRlUXVldWU9YyxiLmZsYWdzfD00KSxGaShkLCEwKSxudWxsPT09ZC50YWlsJiZcImhpZGRlblwiPT09ZC50YWlsTW9kZSYmIWcuYWx0ZXJuYXRlJiYhbGgpcmV0dXJuIGI9Yi5sYXN0RWZmZWN0PWQubGFzdEVmZmVjdCxudWxsIT09YiYmKGIubmV4dEVmZmVjdD1udWxsKSxudWxsfWVsc2UgMipPKCktZC5yZW5kZXJpbmdTdGFydFRpbWU+SmkmJjEwNzM3NDE4MjQhPT1jJiYoYi5mbGFnc3w9XG42NCxmPSEwLEZpKGQsITEpLGIubGFuZXM9MzM1NTQ0MzIpO2QuaXNCYWNrd2FyZHM/KGcuc2libGluZz1iLmNoaWxkLGIuY2hpbGQ9Zyk6KGM9ZC5sYXN0LG51bGwhPT1jP2Muc2libGluZz1nOmIuY2hpbGQ9ZyxkLmxhc3Q9Zyl9cmV0dXJuIG51bGwhPT1kLnRhaWw/KGM9ZC50YWlsLGQucmVuZGVyaW5nPWMsZC50YWlsPWMuc2libGluZyxkLmxhc3RFZmZlY3Q9Yi5sYXN0RWZmZWN0LGQucmVuZGVyaW5nU3RhcnRUaW1lPU8oKSxjLnNpYmxpbmc9bnVsbCxiPVAuY3VycmVudCxJKFAsZj9iJjF8MjpiJjEpLGMpOm51bGw7Y2FzZSAyMzpjYXNlIDI0OnJldHVybiBLaSgpLG51bGwhPT1hJiZudWxsIT09YS5tZW1vaXplZFN0YXRlIT09KG51bGwhPT1iLm1lbW9pemVkU3RhdGUpJiZcInVuc3RhYmxlLWRlZmVyLXdpdGhvdXQtaGlkaW5nXCIhPT1kLm1vZGUmJihiLmZsYWdzfD00KSxudWxsfXRocm93IEVycm9yKHkoMTU2LGIudGFnKSk7fVxuZnVuY3Rpb24gTGkoYSl7c3dpdGNoKGEudGFnKXtjYXNlIDE6RmYoYS50eXBlKSYmR2YoKTt2YXIgYj1hLmZsYWdzO3JldHVybiBiJjQwOTY/KGEuZmxhZ3M9YiYtNDA5N3w2NCxhKTpudWxsO2Nhc2UgMzpmaCgpO0goTik7SChNKTt1aCgpO2I9YS5mbGFncztpZigwIT09KGImNjQpKXRocm93IEVycm9yKHkoMjg1KSk7YS5mbGFncz1iJi00MDk3fDY0O3JldHVybiBhO2Nhc2UgNTpyZXR1cm4gaGgoYSksbnVsbDtjYXNlIDEzOnJldHVybiBIKFApLGI9YS5mbGFncyxiJjQwOTY/KGEuZmxhZ3M9YiYtNDA5N3w2NCxhKTpudWxsO2Nhc2UgMTk6cmV0dXJuIEgoUCksbnVsbDtjYXNlIDQ6cmV0dXJuIGZoKCksbnVsbDtjYXNlIDEwOnJldHVybiByZyhhKSxudWxsO2Nhc2UgMjM6Y2FzZSAyNDpyZXR1cm4gS2koKSxudWxsO2RlZmF1bHQ6cmV0dXJuIG51bGx9fVxuZnVuY3Rpb24gTWkoYSxiKXt0cnl7dmFyIGM9XCJcIixkPWI7ZG8gYys9UWEoZCksZD1kLnJldHVybjt3aGlsZShkKTt2YXIgZT1jfWNhdGNoKGYpe2U9XCJcXG5FcnJvciBnZW5lcmF0aW5nIHN0YWNrOiBcIitmLm1lc3NhZ2UrXCJcXG5cIitmLnN0YWNrfXJldHVybnt2YWx1ZTphLHNvdXJjZTpiLHN0YWNrOmV9fWZ1bmN0aW9uIE5pKGEsYil7dHJ5e2NvbnNvbGUuZXJyb3IoYi52YWx1ZSl9Y2F0Y2goYyl7c2V0VGltZW91dChmdW5jdGlvbigpe3Rocm93IGM7fSl9fXZhciBPaT1cImZ1bmN0aW9uXCI9PT10eXBlb2YgV2Vha01hcD9XZWFrTWFwOk1hcDtmdW5jdGlvbiBQaShhLGIsYyl7Yz16ZygtMSxjKTtjLnRhZz0zO2MucGF5bG9hZD17ZWxlbWVudDpudWxsfTt2YXIgZD1iLnZhbHVlO2MuY2FsbGJhY2s9ZnVuY3Rpb24oKXtRaXx8KFFpPSEwLFJpPWQpO05pKGEsYil9O3JldHVybiBjfVxuZnVuY3Rpb24gU2koYSxiLGMpe2M9emcoLTEsYyk7Yy50YWc9Mzt2YXIgZD1hLnR5cGUuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yO2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBkKXt2YXIgZT1iLnZhbHVlO2MucGF5bG9hZD1mdW5jdGlvbigpe05pKGEsYik7cmV0dXJuIGQoZSl9fXZhciBmPWEuc3RhdGVOb2RlO251bGwhPT1mJiZcImZ1bmN0aW9uXCI9PT10eXBlb2YgZi5jb21wb25lbnREaWRDYXRjaCYmKGMuY2FsbGJhY2s9ZnVuY3Rpb24oKXtcImZ1bmN0aW9uXCIhPT10eXBlb2YgZCYmKG51bGw9PT1UaT9UaT1uZXcgU2V0KFt0aGlzXSk6VGkuYWRkKHRoaXMpLE5pKGEsYikpO3ZhciBjPWIuc3RhY2s7dGhpcy5jb21wb25lbnREaWRDYXRjaChiLnZhbHVlLHtjb21wb25lbnRTdGFjazpudWxsIT09Yz9jOlwiXCJ9KX0pO3JldHVybiBjfXZhciBVaT1cImZ1bmN0aW9uXCI9PT10eXBlb2YgV2Vha1NldD9XZWFrU2V0OlNldDtcbmZ1bmN0aW9uIFZpKGEpe3ZhciBiPWEucmVmO2lmKG51bGwhPT1iKWlmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBiKXRyeXtiKG51bGwpfWNhdGNoKGMpe1dpKGEsYyl9ZWxzZSBiLmN1cnJlbnQ9bnVsbH1mdW5jdGlvbiBYaShhLGIpe3N3aXRjaChiLnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNTpjYXNlIDIyOnJldHVybjtjYXNlIDE6aWYoYi5mbGFncyYyNTYmJm51bGwhPT1hKXt2YXIgYz1hLm1lbW9pemVkUHJvcHMsZD1hLm1lbW9pemVkU3RhdGU7YT1iLnN0YXRlTm9kZTtiPWEuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUoYi5lbGVtZW50VHlwZT09PWIudHlwZT9jOmxnKGIudHlwZSxjKSxkKTthLl9fcmVhY3RJbnRlcm5hbFNuYXBzaG90QmVmb3JlVXBkYXRlPWJ9cmV0dXJuO2Nhc2UgMzpiLmZsYWdzJjI1NiYmcWYoYi5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyk7cmV0dXJuO2Nhc2UgNTpjYXNlIDY6Y2FzZSA0OmNhc2UgMTc6cmV0dXJufXRocm93IEVycm9yKHkoMTYzKSk7fVxuZnVuY3Rpb24gWWkoYSxiLGMpe3N3aXRjaChjLnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNTpjYXNlIDIyOmI9Yy51cGRhdGVRdWV1ZTtiPW51bGwhPT1iP2IubGFzdEVmZmVjdDpudWxsO2lmKG51bGwhPT1iKXthPWI9Yi5uZXh0O2Rve2lmKDM9PT0oYS50YWcmMykpe3ZhciBkPWEuY3JlYXRlO2EuZGVzdHJveT1kKCl9YT1hLm5leHR9d2hpbGUoYSE9PWIpfWI9Yy51cGRhdGVRdWV1ZTtiPW51bGwhPT1iP2IubGFzdEVmZmVjdDpudWxsO2lmKG51bGwhPT1iKXthPWI9Yi5uZXh0O2Rve3ZhciBlPWE7ZD1lLm5leHQ7ZT1lLnRhZzswIT09KGUmNCkmJjAhPT0oZSYxKSYmKFppKGMsYSksJGkoYyxhKSk7YT1kfXdoaWxlKGEhPT1iKX1yZXR1cm47Y2FzZSAxOmE9Yy5zdGF0ZU5vZGU7Yy5mbGFncyY0JiYobnVsbD09PWI/YS5jb21wb25lbnREaWRNb3VudCgpOihkPWMuZWxlbWVudFR5cGU9PT1jLnR5cGU/Yi5tZW1vaXplZFByb3BzOmxnKGMudHlwZSxiLm1lbW9pemVkUHJvcHMpLGEuY29tcG9uZW50RGlkVXBkYXRlKGQsXG5iLm1lbW9pemVkU3RhdGUsYS5fX3JlYWN0SW50ZXJuYWxTbmFwc2hvdEJlZm9yZVVwZGF0ZSkpKTtiPWMudXBkYXRlUXVldWU7bnVsbCE9PWImJkVnKGMsYixhKTtyZXR1cm47Y2FzZSAzOmI9Yy51cGRhdGVRdWV1ZTtpZihudWxsIT09Yil7YT1udWxsO2lmKG51bGwhPT1jLmNoaWxkKXN3aXRjaChjLmNoaWxkLnRhZyl7Y2FzZSA1OmE9Yy5jaGlsZC5zdGF0ZU5vZGU7YnJlYWs7Y2FzZSAxOmE9Yy5jaGlsZC5zdGF0ZU5vZGV9RWcoYyxiLGEpfXJldHVybjtjYXNlIDU6YT1jLnN0YXRlTm9kZTtudWxsPT09YiYmYy5mbGFncyY0JiZtZihjLnR5cGUsYy5tZW1vaXplZFByb3BzKSYmYS5mb2N1cygpO3JldHVybjtjYXNlIDY6cmV0dXJuO2Nhc2UgNDpyZXR1cm47Y2FzZSAxMjpyZXR1cm47Y2FzZSAxMzpudWxsPT09Yy5tZW1vaXplZFN0YXRlJiYoYz1jLmFsdGVybmF0ZSxudWxsIT09YyYmKGM9Yy5tZW1vaXplZFN0YXRlLG51bGwhPT1jJiYoYz1jLmRlaHlkcmF0ZWQsbnVsbCE9PWMmJkNjKGMpKSkpO1xucmV0dXJuO2Nhc2UgMTk6Y2FzZSAxNzpjYXNlIDIwOmNhc2UgMjE6Y2FzZSAyMzpjYXNlIDI0OnJldHVybn10aHJvdyBFcnJvcih5KDE2MykpO31cbmZ1bmN0aW9uIGFqKGEsYil7Zm9yKHZhciBjPWE7Oyl7aWYoNT09PWMudGFnKXt2YXIgZD1jLnN0YXRlTm9kZTtpZihiKWQ9ZC5zdHlsZSxcImZ1bmN0aW9uXCI9PT10eXBlb2YgZC5zZXRQcm9wZXJ0eT9kLnNldFByb3BlcnR5KFwiZGlzcGxheVwiLFwibm9uZVwiLFwiaW1wb3J0YW50XCIpOmQuZGlzcGxheT1cIm5vbmVcIjtlbHNle2Q9Yy5zdGF0ZU5vZGU7dmFyIGU9Yy5tZW1vaXplZFByb3BzLnN0eWxlO2U9dm9pZCAwIT09ZSYmbnVsbCE9PWUmJmUuaGFzT3duUHJvcGVydHkoXCJkaXNwbGF5XCIpP2UuZGlzcGxheTpudWxsO2Quc3R5bGUuZGlzcGxheT1zYihcImRpc3BsYXlcIixlKX19ZWxzZSBpZig2PT09Yy50YWcpYy5zdGF0ZU5vZGUubm9kZVZhbHVlPWI/XCJcIjpjLm1lbW9pemVkUHJvcHM7ZWxzZSBpZigoMjMhPT1jLnRhZyYmMjQhPT1jLnRhZ3x8bnVsbD09PWMubWVtb2l6ZWRTdGF0ZXx8Yz09PWEpJiZudWxsIT09Yy5jaGlsZCl7Yy5jaGlsZC5yZXR1cm49YztjPWMuY2hpbGQ7Y29udGludWV9aWYoYz09PVxuYSlicmVhaztmb3IoO251bGw9PT1jLnNpYmxpbmc7KXtpZihudWxsPT09Yy5yZXR1cm58fGMucmV0dXJuPT09YSlyZXR1cm47Yz1jLnJldHVybn1jLnNpYmxpbmcucmV0dXJuPWMucmV0dXJuO2M9Yy5zaWJsaW5nfX1cbmZ1bmN0aW9uIGJqKGEsYil7aWYoTWYmJlwiZnVuY3Rpb25cIj09PXR5cGVvZiBNZi5vbkNvbW1pdEZpYmVyVW5tb3VudCl0cnl7TWYub25Db21taXRGaWJlclVubW91bnQoTGYsYil9Y2F0Y2goZil7fXN3aXRjaChiLnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNDpjYXNlIDE1OmNhc2UgMjI6YT1iLnVwZGF0ZVF1ZXVlO2lmKG51bGwhPT1hJiYoYT1hLmxhc3RFZmZlY3QsbnVsbCE9PWEpKXt2YXIgYz1hPWEubmV4dDtkb3t2YXIgZD1jLGU9ZC5kZXN0cm95O2Q9ZC50YWc7aWYodm9pZCAwIT09ZSlpZigwIT09KGQmNCkpWmkoYixjKTtlbHNle2Q9Yjt0cnl7ZSgpfWNhdGNoKGYpe1dpKGQsZil9fWM9Yy5uZXh0fXdoaWxlKGMhPT1hKX1icmVhaztjYXNlIDE6VmkoYik7YT1iLnN0YXRlTm9kZTtpZihcImZ1bmN0aW9uXCI9PT10eXBlb2YgYS5jb21wb25lbnRXaWxsVW5tb3VudCl0cnl7YS5wcm9wcz1iLm1lbW9pemVkUHJvcHMsYS5zdGF0ZT1iLm1lbW9pemVkU3RhdGUsYS5jb21wb25lbnRXaWxsVW5tb3VudCgpfWNhdGNoKGYpe1dpKGIsXG5mKX1icmVhaztjYXNlIDU6VmkoYik7YnJlYWs7Y2FzZSA0OmNqKGEsYil9fWZ1bmN0aW9uIGRqKGEpe2EuYWx0ZXJuYXRlPW51bGw7YS5jaGlsZD1udWxsO2EuZGVwZW5kZW5jaWVzPW51bGw7YS5maXJzdEVmZmVjdD1udWxsO2EubGFzdEVmZmVjdD1udWxsO2EubWVtb2l6ZWRQcm9wcz1udWxsO2EubWVtb2l6ZWRTdGF0ZT1udWxsO2EucGVuZGluZ1Byb3BzPW51bGw7YS5yZXR1cm49bnVsbDthLnVwZGF0ZVF1ZXVlPW51bGx9ZnVuY3Rpb24gZWooYSl7cmV0dXJuIDU9PT1hLnRhZ3x8Mz09PWEudGFnfHw0PT09YS50YWd9XG5mdW5jdGlvbiBmaihhKXthOntmb3IodmFyIGI9YS5yZXR1cm47bnVsbCE9PWI7KXtpZihlaihiKSlicmVhayBhO2I9Yi5yZXR1cm59dGhyb3cgRXJyb3IoeSgxNjApKTt9dmFyIGM9YjtiPWMuc3RhdGVOb2RlO3N3aXRjaChjLnRhZyl7Y2FzZSA1OnZhciBkPSExO2JyZWFrO2Nhc2UgMzpiPWIuY29udGFpbmVySW5mbztkPSEwO2JyZWFrO2Nhc2UgNDpiPWIuY29udGFpbmVySW5mbztkPSEwO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoeSgxNjEpKTt9Yy5mbGFncyYxNiYmKHBiKGIsXCJcIiksYy5mbGFncyY9LTE3KTthOmI6Zm9yKGM9YTs7KXtmb3IoO251bGw9PT1jLnNpYmxpbmc7KXtpZihudWxsPT09Yy5yZXR1cm58fGVqKGMucmV0dXJuKSl7Yz1udWxsO2JyZWFrIGF9Yz1jLnJldHVybn1jLnNpYmxpbmcucmV0dXJuPWMucmV0dXJuO2ZvcihjPWMuc2libGluZzs1IT09Yy50YWcmJjYhPT1jLnRhZyYmMTghPT1jLnRhZzspe2lmKGMuZmxhZ3MmMiljb250aW51ZSBiO2lmKG51bGw9PT1cbmMuY2hpbGR8fDQ9PT1jLnRhZyljb250aW51ZSBiO2Vsc2UgYy5jaGlsZC5yZXR1cm49YyxjPWMuY2hpbGR9aWYoIShjLmZsYWdzJjIpKXtjPWMuc3RhdGVOb2RlO2JyZWFrIGF9fWQ/Z2ooYSxjLGIpOmhqKGEsYyxiKX1cbmZ1bmN0aW9uIGdqKGEsYixjKXt2YXIgZD1hLnRhZyxlPTU9PT1kfHw2PT09ZDtpZihlKWE9ZT9hLnN0YXRlTm9kZTphLnN0YXRlTm9kZS5pbnN0YW5jZSxiPzg9PT1jLm5vZGVUeXBlP2MucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSxiKTpjLmluc2VydEJlZm9yZShhLGIpOig4PT09Yy5ub2RlVHlwZT8oYj1jLnBhcmVudE5vZGUsYi5pbnNlcnRCZWZvcmUoYSxjKSk6KGI9YyxiLmFwcGVuZENoaWxkKGEpKSxjPWMuX3JlYWN0Um9vdENvbnRhaW5lcixudWxsIT09YyYmdm9pZCAwIT09Y3x8bnVsbCE9PWIub25jbGlja3x8KGIub25jbGljaz1qZikpO2Vsc2UgaWYoNCE9PWQmJihhPWEuY2hpbGQsbnVsbCE9PWEpKWZvcihnaihhLGIsYyksYT1hLnNpYmxpbmc7bnVsbCE9PWE7KWdqKGEsYixjKSxhPWEuc2libGluZ31cbmZ1bmN0aW9uIGhqKGEsYixjKXt2YXIgZD1hLnRhZyxlPTU9PT1kfHw2PT09ZDtpZihlKWE9ZT9hLnN0YXRlTm9kZTphLnN0YXRlTm9kZS5pbnN0YW5jZSxiP2MuaW5zZXJ0QmVmb3JlKGEsYik6Yy5hcHBlbmRDaGlsZChhKTtlbHNlIGlmKDQhPT1kJiYoYT1hLmNoaWxkLG51bGwhPT1hKSlmb3IoaGooYSxiLGMpLGE9YS5zaWJsaW5nO251bGwhPT1hOyloaihhLGIsYyksYT1hLnNpYmxpbmd9XG5mdW5jdGlvbiBjaihhLGIpe2Zvcih2YXIgYz1iLGQ9ITEsZSxmOzspe2lmKCFkKXtkPWMucmV0dXJuO2E6Zm9yKDs7KXtpZihudWxsPT09ZCl0aHJvdyBFcnJvcih5KDE2MCkpO2U9ZC5zdGF0ZU5vZGU7c3dpdGNoKGQudGFnKXtjYXNlIDU6Zj0hMTticmVhayBhO2Nhc2UgMzplPWUuY29udGFpbmVySW5mbztmPSEwO2JyZWFrIGE7Y2FzZSA0OmU9ZS5jb250YWluZXJJbmZvO2Y9ITA7YnJlYWsgYX1kPWQucmV0dXJufWQ9ITB9aWYoNT09PWMudGFnfHw2PT09Yy50YWcpe2E6Zm9yKHZhciBnPWEsaD1jLGs9aDs7KWlmKGJqKGcsayksbnVsbCE9PWsuY2hpbGQmJjQhPT1rLnRhZylrLmNoaWxkLnJldHVybj1rLGs9ay5jaGlsZDtlbHNle2lmKGs9PT1oKWJyZWFrIGE7Zm9yKDtudWxsPT09ay5zaWJsaW5nOyl7aWYobnVsbD09PWsucmV0dXJufHxrLnJldHVybj09PWgpYnJlYWsgYTtrPWsucmV0dXJufWsuc2libGluZy5yZXR1cm49ay5yZXR1cm47az1rLnNpYmxpbmd9Zj8oZz1lLGg9Yy5zdGF0ZU5vZGUsXG44PT09Zy5ub2RlVHlwZT9nLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoaCk6Zy5yZW1vdmVDaGlsZChoKSk6ZS5yZW1vdmVDaGlsZChjLnN0YXRlTm9kZSl9ZWxzZSBpZig0PT09Yy50YWcpe2lmKG51bGwhPT1jLmNoaWxkKXtlPWMuc3RhdGVOb2RlLmNvbnRhaW5lckluZm87Zj0hMDtjLmNoaWxkLnJldHVybj1jO2M9Yy5jaGlsZDtjb250aW51ZX19ZWxzZSBpZihiaihhLGMpLG51bGwhPT1jLmNoaWxkKXtjLmNoaWxkLnJldHVybj1jO2M9Yy5jaGlsZDtjb250aW51ZX1pZihjPT09YilicmVhaztmb3IoO251bGw9PT1jLnNpYmxpbmc7KXtpZihudWxsPT09Yy5yZXR1cm58fGMucmV0dXJuPT09YilyZXR1cm47Yz1jLnJldHVybjs0PT09Yy50YWcmJihkPSExKX1jLnNpYmxpbmcucmV0dXJuPWMucmV0dXJuO2M9Yy5zaWJsaW5nfX1cbmZ1bmN0aW9uIGlqKGEsYil7c3dpdGNoKGIudGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE0OmNhc2UgMTU6Y2FzZSAyMjp2YXIgYz1iLnVwZGF0ZVF1ZXVlO2M9bnVsbCE9PWM/Yy5sYXN0RWZmZWN0Om51bGw7aWYobnVsbCE9PWMpe3ZhciBkPWM9Yy5uZXh0O2RvIDM9PT0oZC50YWcmMykmJihhPWQuZGVzdHJveSxkLmRlc3Ryb3k9dm9pZCAwLHZvaWQgMCE9PWEmJmEoKSksZD1kLm5leHQ7d2hpbGUoZCE9PWMpfXJldHVybjtjYXNlIDE6cmV0dXJuO2Nhc2UgNTpjPWIuc3RhdGVOb2RlO2lmKG51bGwhPWMpe2Q9Yi5tZW1vaXplZFByb3BzO3ZhciBlPW51bGwhPT1hP2EubWVtb2l6ZWRQcm9wczpkO2E9Yi50eXBlO3ZhciBmPWIudXBkYXRlUXVldWU7Yi51cGRhdGVRdWV1ZT1udWxsO2lmKG51bGwhPT1mKXtjW3hmXT1kO1wiaW5wdXRcIj09PWEmJlwicmFkaW9cIj09PWQudHlwZSYmbnVsbCE9ZC5uYW1lJiYkYShjLGQpO3diKGEsZSk7Yj13YihhLGQpO2ZvcihlPTA7ZTxmLmxlbmd0aDtlKz1cbjIpe3ZhciBnPWZbZV0saD1mW2UrMV07XCJzdHlsZVwiPT09Zz90YihjLGgpOlwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxcIj09PWc/b2IoYyxoKTpcImNoaWxkcmVuXCI9PT1nP3BiKGMsaCk6cWEoYyxnLGgsYil9c3dpdGNoKGEpe2Nhc2UgXCJpbnB1dFwiOmFiKGMsZCk7YnJlYWs7Y2FzZSBcInRleHRhcmVhXCI6aWIoYyxkKTticmVhaztjYXNlIFwic2VsZWN0XCI6YT1jLl93cmFwcGVyU3RhdGUud2FzTXVsdGlwbGUsYy5fd3JhcHBlclN0YXRlLndhc011bHRpcGxlPSEhZC5tdWx0aXBsZSxmPWQudmFsdWUsbnVsbCE9Zj9mYihjLCEhZC5tdWx0aXBsZSxmLCExKTphIT09ISFkLm11bHRpcGxlJiYobnVsbCE9ZC5kZWZhdWx0VmFsdWU/ZmIoYywhIWQubXVsdGlwbGUsZC5kZWZhdWx0VmFsdWUsITApOmZiKGMsISFkLm11bHRpcGxlLGQubXVsdGlwbGU/W106XCJcIiwhMSkpfX19cmV0dXJuO2Nhc2UgNjppZihudWxsPT09Yi5zdGF0ZU5vZGUpdGhyb3cgRXJyb3IoeSgxNjIpKTtiLnN0YXRlTm9kZS5ub2RlVmFsdWU9XG5iLm1lbW9pemVkUHJvcHM7cmV0dXJuO2Nhc2UgMzpjPWIuc3RhdGVOb2RlO2MuaHlkcmF0ZSYmKGMuaHlkcmF0ZT0hMSxDYyhjLmNvbnRhaW5lckluZm8pKTtyZXR1cm47Y2FzZSAxMjpyZXR1cm47Y2FzZSAxMzpudWxsIT09Yi5tZW1vaXplZFN0YXRlJiYoamo9TygpLGFqKGIuY2hpbGQsITApKTtraihiKTtyZXR1cm47Y2FzZSAxOTpraihiKTtyZXR1cm47Y2FzZSAxNzpyZXR1cm47Y2FzZSAyMzpjYXNlIDI0OmFqKGIsbnVsbCE9PWIubWVtb2l6ZWRTdGF0ZSk7cmV0dXJufXRocm93IEVycm9yKHkoMTYzKSk7fWZ1bmN0aW9uIGtqKGEpe3ZhciBiPWEudXBkYXRlUXVldWU7aWYobnVsbCE9PWIpe2EudXBkYXRlUXVldWU9bnVsbDt2YXIgYz1hLnN0YXRlTm9kZTtudWxsPT09YyYmKGM9YS5zdGF0ZU5vZGU9bmV3IFVpKTtiLmZvckVhY2goZnVuY3Rpb24oYil7dmFyIGQ9bGouYmluZChudWxsLGEsYik7Yy5oYXMoYil8fChjLmFkZChiKSxiLnRoZW4oZCxkKSl9KX19XG5mdW5jdGlvbiBtaihhLGIpe3JldHVybiBudWxsIT09YSYmKGE9YS5tZW1vaXplZFN0YXRlLG51bGw9PT1hfHxudWxsIT09YS5kZWh5ZHJhdGVkKT8oYj1iLm1lbW9pemVkU3RhdGUsbnVsbCE9PWImJm51bGw9PT1iLmRlaHlkcmF0ZWQpOiExfXZhciBuaj1NYXRoLmNlaWwsb2o9cmEuUmVhY3RDdXJyZW50RGlzcGF0Y2hlcixwaj1yYS5SZWFjdEN1cnJlbnRPd25lcixYPTAsVT1udWxsLFk9bnVsbCxXPTAscWo9MCxyaj1CZigwKSxWPTAsc2o9bnVsbCx0aj0wLERnPTAsSGk9MCx1aj0wLHZqPW51bGwsamo9MCxKaT1JbmZpbml0eTtmdW5jdGlvbiB3aigpe0ppPU8oKSs1MDB9dmFyIFo9bnVsbCxRaT0hMSxSaT1udWxsLFRpPW51bGwseGo9ITEseWo9bnVsbCx6aj05MCxBaj1bXSxCaj1bXSxDaj1udWxsLERqPTAsRWo9bnVsbCxGaj0tMSxHaj0wLEhqPTAsSWo9bnVsbCxKaj0hMTtmdW5jdGlvbiBIZygpe3JldHVybiAwIT09KFgmNDgpP08oKTotMSE9PUZqP0ZqOkZqPU8oKX1cbmZ1bmN0aW9uIElnKGEpe2E9YS5tb2RlO2lmKDA9PT0oYSYyKSlyZXR1cm4gMTtpZigwPT09KGEmNCkpcmV0dXJuIDk5PT09ZWcoKT8xOjI7MD09PUdqJiYoR2o9dGopO2lmKDAhPT1rZy50cmFuc2l0aW9uKXswIT09SGomJihIaj1udWxsIT09dmo/dmoucGVuZGluZ0xhbmVzOjApO2E9R2o7dmFyIGI9NDE4NjExMiZ+SGo7YiY9LWI7MD09PWImJihhPTQxODYxMTImfmEsYj1hJi1hLDA9PT1iJiYoYj04MTkyKSk7cmV0dXJuIGJ9YT1lZygpOzAhPT0oWCY0KSYmOTg9PT1hP2E9WGMoMTIsR2opOihhPVNjKGEpLGE9WGMoYSxHaikpO3JldHVybiBhfVxuZnVuY3Rpb24gSmcoYSxiLGMpe2lmKDUwPERqKXRocm93IERqPTAsRWo9bnVsbCxFcnJvcih5KDE4NSkpO2E9S2ooYSxiKTtpZihudWxsPT09YSlyZXR1cm4gbnVsbDskYyhhLGIsYyk7YT09PVUmJihIaXw9Yiw0PT09ViYmSWkoYSxXKSk7dmFyIGQ9ZWcoKTsxPT09Yj8wIT09KFgmOCkmJjA9PT0oWCY0OCk/TGooYSk6KE1qKGEsYyksMD09PVgmJih3aigpLGlnKCkpKTooMD09PShYJjQpfHw5OCE9PWQmJjk5IT09ZHx8KG51bGw9PT1Daj9Daj1uZXcgU2V0KFthXSk6Q2ouYWRkKGEpKSxNaihhLGMpKTt2aj1hfWZ1bmN0aW9uIEtqKGEsYil7YS5sYW5lc3w9Yjt2YXIgYz1hLmFsdGVybmF0ZTtudWxsIT09YyYmKGMubGFuZXN8PWIpO2M9YTtmb3IoYT1hLnJldHVybjtudWxsIT09YTspYS5jaGlsZExhbmVzfD1iLGM9YS5hbHRlcm5hdGUsbnVsbCE9PWMmJihjLmNoaWxkTGFuZXN8PWIpLGM9YSxhPWEucmV0dXJuO3JldHVybiAzPT09Yy50YWc/Yy5zdGF0ZU5vZGU6bnVsbH1cbmZ1bmN0aW9uIE1qKGEsYil7Zm9yKHZhciBjPWEuY2FsbGJhY2tOb2RlLGQ9YS5zdXNwZW5kZWRMYW5lcyxlPWEucGluZ2VkTGFuZXMsZj1hLmV4cGlyYXRpb25UaW1lcyxnPWEucGVuZGluZ0xhbmVzOzA8Zzspe3ZhciBoPTMxLVZjKGcpLGs9MTw8aCxsPWZbaF07aWYoLTE9PT1sKXtpZigwPT09KGsmZCl8fDAhPT0oayZlKSl7bD1iO1JjKGspO3ZhciBuPUY7ZltoXT0xMDw9bj9sKzI1MDo2PD1uP2wrNUUzOi0xfX1lbHNlIGw8PWImJihhLmV4cGlyZWRMYW5lc3w9ayk7ZyY9fmt9ZD1VYyhhLGE9PT1VP1c6MCk7Yj1GO2lmKDA9PT1kKW51bGwhPT1jJiYoYyE9PVpmJiZQZihjKSxhLmNhbGxiYWNrTm9kZT1udWxsLGEuY2FsbGJhY2tQcmlvcml0eT0wKTtlbHNle2lmKG51bGwhPT1jKXtpZihhLmNhbGxiYWNrUHJpb3JpdHk9PT1iKXJldHVybjtjIT09WmYmJlBmKGMpfTE1PT09Yj8oYz1Mai5iaW5kKG51bGwsYSksbnVsbD09PWFnPyhhZz1bY10sYmc9T2YoVWYsamcpKTphZy5wdXNoKGMpLFxuYz1aZik6MTQ9PT1iP2M9aGcoOTksTGouYmluZChudWxsLGEpKTooYz1UYyhiKSxjPWhnKGMsTmouYmluZChudWxsLGEpKSk7YS5jYWxsYmFja1ByaW9yaXR5PWI7YS5jYWxsYmFja05vZGU9Y319XG5mdW5jdGlvbiBOaihhKXtGaj0tMTtIaj1Haj0wO2lmKDAhPT0oWCY0OCkpdGhyb3cgRXJyb3IoeSgzMjcpKTt2YXIgYj1hLmNhbGxiYWNrTm9kZTtpZihPaigpJiZhLmNhbGxiYWNrTm9kZSE9PWIpcmV0dXJuIG51bGw7dmFyIGM9VWMoYSxhPT09VT9XOjApO2lmKDA9PT1jKXJldHVybiBudWxsO3ZhciBkPWM7dmFyIGU9WDtYfD0xNjt2YXIgZj1QaigpO2lmKFUhPT1hfHxXIT09ZCl3aigpLFFqKGEsZCk7ZG8gdHJ5e1JqKCk7YnJlYWt9Y2F0Y2goaCl7U2ooYSxoKX13aGlsZSgxKTtxZygpO29qLmN1cnJlbnQ9ZjtYPWU7bnVsbCE9PVk/ZD0wOihVPW51bGwsVz0wLGQ9Vik7aWYoMCE9PSh0aiZIaSkpUWooYSwwKTtlbHNlIGlmKDAhPT1kKXsyPT09ZCYmKFh8PTY0LGEuaHlkcmF0ZSYmKGEuaHlkcmF0ZT0hMSxxZihhLmNvbnRhaW5lckluZm8pKSxjPVdjKGEpLDAhPT1jJiYoZD1UaihhLGMpKSk7aWYoMT09PWQpdGhyb3cgYj1zaixRaihhLDApLElpKGEsYyksTWooYSxPKCkpLGI7YS5maW5pc2hlZFdvcms9XG5hLmN1cnJlbnQuYWx0ZXJuYXRlO2EuZmluaXNoZWRMYW5lcz1jO3N3aXRjaChkKXtjYXNlIDA6Y2FzZSAxOnRocm93IEVycm9yKHkoMzQ1KSk7Y2FzZSAyOlVqKGEpO2JyZWFrO2Nhc2UgMzpJaShhLGMpO2lmKChjJjYyOTE0NTYwKT09PWMmJihkPWpqKzUwMC1PKCksMTA8ZCkpe2lmKDAhPT1VYyhhLDApKWJyZWFrO2U9YS5zdXNwZW5kZWRMYW5lcztpZigoZSZjKSE9PWMpe0hnKCk7YS5waW5nZWRMYW5lc3w9YS5zdXNwZW5kZWRMYW5lcyZlO2JyZWFrfWEudGltZW91dEhhbmRsZT1vZihVai5iaW5kKG51bGwsYSksZCk7YnJlYWt9VWooYSk7YnJlYWs7Y2FzZSA0OklpKGEsYyk7aWYoKGMmNDE4NjExMik9PT1jKWJyZWFrO2Q9YS5ldmVudFRpbWVzO2ZvcihlPS0xOzA8Yzspe3ZhciBnPTMxLVZjKGMpO2Y9MTw8ZztnPWRbZ107Zz5lJiYoZT1nKTtjJj1+Zn1jPWU7Yz1PKCktYztjPSgxMjA+Yz8xMjA6NDgwPmM/NDgwOjEwODA+Yz8xMDgwOjE5MjA+Yz8xOTIwOjNFMz5jPzNFMzo0MzIwPlxuYz80MzIwOjE5NjAqbmooYy8xOTYwKSktYztpZigxMDxjKXthLnRpbWVvdXRIYW5kbGU9b2YoVWouYmluZChudWxsLGEpLGMpO2JyZWFrfVVqKGEpO2JyZWFrO2Nhc2UgNTpVaihhKTticmVhaztkZWZhdWx0OnRocm93IEVycm9yKHkoMzI5KSk7fX1NaihhLE8oKSk7cmV0dXJuIGEuY2FsbGJhY2tOb2RlPT09Yj9Oai5iaW5kKG51bGwsYSk6bnVsbH1mdW5jdGlvbiBJaShhLGIpe2ImPX51ajtiJj1+SGk7YS5zdXNwZW5kZWRMYW5lc3w9YjthLnBpbmdlZExhbmVzJj1+Yjtmb3IoYT1hLmV4cGlyYXRpb25UaW1lczswPGI7KXt2YXIgYz0zMS1WYyhiKSxkPTE8PGM7YVtjXT0tMTtiJj1+ZH19XG5mdW5jdGlvbiBMaihhKXtpZigwIT09KFgmNDgpKXRocm93IEVycm9yKHkoMzI3KSk7T2ooKTtpZihhPT09VSYmMCE9PShhLmV4cGlyZWRMYW5lcyZXKSl7dmFyIGI9Vzt2YXIgYz1UaihhLGIpOzAhPT0odGomSGkpJiYoYj1VYyhhLGIpLGM9VGooYSxiKSl9ZWxzZSBiPVVjKGEsMCksYz1UaihhLGIpOzAhPT1hLnRhZyYmMj09PWMmJihYfD02NCxhLmh5ZHJhdGUmJihhLmh5ZHJhdGU9ITEscWYoYS5jb250YWluZXJJbmZvKSksYj1XYyhhKSwwIT09YiYmKGM9VGooYSxiKSkpO2lmKDE9PT1jKXRocm93IGM9c2osUWooYSwwKSxJaShhLGIpLE1qKGEsTygpKSxjO2EuZmluaXNoZWRXb3JrPWEuY3VycmVudC5hbHRlcm5hdGU7YS5maW5pc2hlZExhbmVzPWI7VWooYSk7TWooYSxPKCkpO3JldHVybiBudWxsfVxuZnVuY3Rpb24gVmooKXtpZihudWxsIT09Q2ope3ZhciBhPUNqO0NqPW51bGw7YS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2EuZXhwaXJlZExhbmVzfD0yNCZhLnBlbmRpbmdMYW5lcztNaihhLE8oKSl9KX1pZygpfWZ1bmN0aW9uIFdqKGEsYil7dmFyIGM9WDtYfD0xO3RyeXtyZXR1cm4gYShiKX1maW5hbGx5e1g9YywwPT09WCYmKHdqKCksaWcoKSl9fWZ1bmN0aW9uIFhqKGEsYil7dmFyIGM9WDtYJj0tMjtYfD04O3RyeXtyZXR1cm4gYShiKX1maW5hbGx5e1g9YywwPT09WCYmKHdqKCksaWcoKSl9fWZ1bmN0aW9uIG5pKGEsYil7SShyaixxaik7cWp8PWI7dGp8PWJ9ZnVuY3Rpb24gS2koKXtxaj1yai5jdXJyZW50O0gocmopfVxuZnVuY3Rpb24gUWooYSxiKXthLmZpbmlzaGVkV29yaz1udWxsO2EuZmluaXNoZWRMYW5lcz0wO3ZhciBjPWEudGltZW91dEhhbmRsZTstMSE9PWMmJihhLnRpbWVvdXRIYW5kbGU9LTEscGYoYykpO2lmKG51bGwhPT1ZKWZvcihjPVkucmV0dXJuO251bGwhPT1jOyl7dmFyIGQ9Yztzd2l0Y2goZC50YWcpe2Nhc2UgMTpkPWQudHlwZS5jaGlsZENvbnRleHRUeXBlcztudWxsIT09ZCYmdm9pZCAwIT09ZCYmR2YoKTticmVhaztjYXNlIDM6ZmgoKTtIKE4pO0goTSk7dWgoKTticmVhaztjYXNlIDU6aGgoZCk7YnJlYWs7Y2FzZSA0OmZoKCk7YnJlYWs7Y2FzZSAxMzpIKFApO2JyZWFrO2Nhc2UgMTk6SChQKTticmVhaztjYXNlIDEwOnJnKGQpO2JyZWFrO2Nhc2UgMjM6Y2FzZSAyNDpLaSgpfWM9Yy5yZXR1cm59VT1hO1k9VGcoYS5jdXJyZW50LG51bGwpO1c9cWo9dGo9YjtWPTA7c2o9bnVsbDt1aj1IaT1EZz0wfVxuZnVuY3Rpb24gU2ooYSxiKXtkb3t2YXIgYz1ZO3RyeXtxZygpO3ZoLmN1cnJlbnQ9R2g7aWYoeWgpe2Zvcih2YXIgZD1SLm1lbW9pemVkU3RhdGU7bnVsbCE9PWQ7KXt2YXIgZT1kLnF1ZXVlO251bGwhPT1lJiYoZS5wZW5kaW5nPW51bGwpO2Q9ZC5uZXh0fXloPSExfXhoPTA7VD1TPVI9bnVsbDt6aD0hMTtwai5jdXJyZW50PW51bGw7aWYobnVsbD09PWN8fG51bGw9PT1jLnJldHVybil7Vj0xO3NqPWI7WT1udWxsO2JyZWFrfWE6e3ZhciBmPWEsZz1jLnJldHVybixoPWMsaz1iO2I9VztoLmZsYWdzfD0yMDQ4O2guZmlyc3RFZmZlY3Q9aC5sYXN0RWZmZWN0PW51bGw7aWYobnVsbCE9PWsmJlwib2JqZWN0XCI9PT10eXBlb2YgayYmXCJmdW5jdGlvblwiPT09dHlwZW9mIGsudGhlbil7dmFyIGw9aztpZigwPT09KGgubW9kZSYyKSl7dmFyIG49aC5hbHRlcm5hdGU7bj8oaC51cGRhdGVRdWV1ZT1uLnVwZGF0ZVF1ZXVlLGgubWVtb2l6ZWRTdGF0ZT1uLm1lbW9pemVkU3RhdGUsaC5sYW5lcz1uLmxhbmVzKTpcbihoLnVwZGF0ZVF1ZXVlPW51bGwsaC5tZW1vaXplZFN0YXRlPW51bGwpfXZhciBBPTAhPT0oUC5jdXJyZW50JjEpLHA9Zztkb3t2YXIgQztpZihDPTEzPT09cC50YWcpe3ZhciB4PXAubWVtb2l6ZWRTdGF0ZTtpZihudWxsIT09eClDPW51bGwhPT14LmRlaHlkcmF0ZWQ/ITA6ITE7ZWxzZXt2YXIgdz1wLm1lbW9pemVkUHJvcHM7Qz12b2lkIDA9PT13LmZhbGxiYWNrPyExOiEwIT09dy51bnN0YWJsZV9hdm9pZFRoaXNGYWxsYmFjaz8hMDpBPyExOiEwfX1pZihDKXt2YXIgej1wLnVwZGF0ZVF1ZXVlO2lmKG51bGw9PT16KXt2YXIgdT1uZXcgU2V0O3UuYWRkKGwpO3AudXBkYXRlUXVldWU9dX1lbHNlIHouYWRkKGwpO2lmKDA9PT0ocC5tb2RlJjIpKXtwLmZsYWdzfD02NDtoLmZsYWdzfD0xNjM4NDtoLmZsYWdzJj0tMjk4MTtpZigxPT09aC50YWcpaWYobnVsbD09PWguYWx0ZXJuYXRlKWgudGFnPTE3O2Vsc2V7dmFyIHQ9emcoLTEsMSk7dC50YWc9MjtBZyhoLHQpfWgubGFuZXN8PTE7YnJlYWsgYX1rPVxudm9pZCAwO2g9Yjt2YXIgcT1mLnBpbmdDYWNoZTtudWxsPT09cT8ocT1mLnBpbmdDYWNoZT1uZXcgT2ksaz1uZXcgU2V0LHEuc2V0KGwsaykpOihrPXEuZ2V0KGwpLHZvaWQgMD09PWsmJihrPW5ldyBTZXQscS5zZXQobCxrKSkpO2lmKCFrLmhhcyhoKSl7ay5hZGQoaCk7dmFyIHY9WWouYmluZChudWxsLGYsbCxoKTtsLnRoZW4odix2KX1wLmZsYWdzfD00MDk2O3AubGFuZXM9YjticmVhayBhfXA9cC5yZXR1cm59d2hpbGUobnVsbCE9PXApO2s9RXJyb3IoKFJhKGgudHlwZSl8fFwiQSBSZWFjdCBjb21wb25lbnRcIikrXCIgc3VzcGVuZGVkIHdoaWxlIHJlbmRlcmluZywgYnV0IG5vIGZhbGxiYWNrIFVJIHdhcyBzcGVjaWZpZWQuXFxuXFxuQWRkIGEgPFN1c3BlbnNlIGZhbGxiYWNrPS4uLj4gY29tcG9uZW50IGhpZ2hlciBpbiB0aGUgdHJlZSB0byBwcm92aWRlIGEgbG9hZGluZyBpbmRpY2F0b3Igb3IgcGxhY2Vob2xkZXIgdG8gZGlzcGxheS5cIil9NSE9PVYmJihWPTIpO2s9TWkoayxoKTtwPVxuZztkb3tzd2l0Y2gocC50YWcpe2Nhc2UgMzpmPWs7cC5mbGFnc3w9NDA5NjtiJj0tYjtwLmxhbmVzfD1iO3ZhciBKPVBpKHAsZixiKTtCZyhwLEopO2JyZWFrIGE7Y2FzZSAxOmY9azt2YXIgSz1wLnR5cGUsUT1wLnN0YXRlTm9kZTtpZigwPT09KHAuZmxhZ3MmNjQpJiYoXCJmdW5jdGlvblwiPT09dHlwZW9mIEsuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yfHxudWxsIT09USYmXCJmdW5jdGlvblwiPT09dHlwZW9mIFEuY29tcG9uZW50RGlkQ2F0Y2gmJihudWxsPT09VGl8fCFUaS5oYXMoUSkpKSl7cC5mbGFnc3w9NDA5NjtiJj0tYjtwLmxhbmVzfD1iO3ZhciBMPVNpKHAsZixiKTtCZyhwLEwpO2JyZWFrIGF9fXA9cC5yZXR1cm59d2hpbGUobnVsbCE9PXApfVpqKGMpfWNhdGNoKHZhKXtiPXZhO1k9PT1jJiZudWxsIT09YyYmKFk9Yz1jLnJldHVybik7Y29udGludWV9YnJlYWt9d2hpbGUoMSl9XG5mdW5jdGlvbiBQaigpe3ZhciBhPW9qLmN1cnJlbnQ7b2ouY3VycmVudD1HaDtyZXR1cm4gbnVsbD09PWE/R2g6YX1mdW5jdGlvbiBUaihhLGIpe3ZhciBjPVg7WHw9MTY7dmFyIGQ9UGooKTtVPT09YSYmVz09PWJ8fFFqKGEsYik7ZG8gdHJ5e2FrKCk7YnJlYWt9Y2F0Y2goZSl7U2ooYSxlKX13aGlsZSgxKTtxZygpO1g9Yztvai5jdXJyZW50PWQ7aWYobnVsbCE9PVkpdGhyb3cgRXJyb3IoeSgyNjEpKTtVPW51bGw7Vz0wO3JldHVybiBWfWZ1bmN0aW9uIGFrKCl7Zm9yKDtudWxsIT09WTspYmsoWSl9ZnVuY3Rpb24gUmooKXtmb3IoO251bGwhPT1ZJiYhUWYoKTspYmsoWSl9ZnVuY3Rpb24gYmsoYSl7dmFyIGI9Y2soYS5hbHRlcm5hdGUsYSxxaik7YS5tZW1vaXplZFByb3BzPWEucGVuZGluZ1Byb3BzO251bGw9PT1iP1pqKGEpOlk9Yjtwai5jdXJyZW50PW51bGx9XG5mdW5jdGlvbiBaaihhKXt2YXIgYj1hO2Rve3ZhciBjPWIuYWx0ZXJuYXRlO2E9Yi5yZXR1cm47aWYoMD09PShiLmZsYWdzJjIwNDgpKXtjPUdpKGMsYixxaik7aWYobnVsbCE9PWMpe1k9YztyZXR1cm59Yz1iO2lmKDI0IT09Yy50YWcmJjIzIT09Yy50YWd8fG51bGw9PT1jLm1lbW9pemVkU3RhdGV8fDAhPT0ocWomMTA3Mzc0MTgyNCl8fDA9PT0oYy5tb2RlJjQpKXtmb3IodmFyIGQ9MCxlPWMuY2hpbGQ7bnVsbCE9PWU7KWR8PWUubGFuZXN8ZS5jaGlsZExhbmVzLGU9ZS5zaWJsaW5nO2MuY2hpbGRMYW5lcz1kfW51bGwhPT1hJiYwPT09KGEuZmxhZ3MmMjA0OCkmJihudWxsPT09YS5maXJzdEVmZmVjdCYmKGEuZmlyc3RFZmZlY3Q9Yi5maXJzdEVmZmVjdCksbnVsbCE9PWIubGFzdEVmZmVjdCYmKG51bGwhPT1hLmxhc3RFZmZlY3QmJihhLmxhc3RFZmZlY3QubmV4dEVmZmVjdD1iLmZpcnN0RWZmZWN0KSxhLmxhc3RFZmZlY3Q9Yi5sYXN0RWZmZWN0KSwxPGIuZmxhZ3MmJihudWxsIT09XG5hLmxhc3RFZmZlY3Q/YS5sYXN0RWZmZWN0Lm5leHRFZmZlY3Q9YjphLmZpcnN0RWZmZWN0PWIsYS5sYXN0RWZmZWN0PWIpKX1lbHNle2M9TGkoYik7aWYobnVsbCE9PWMpe2MuZmxhZ3MmPTIwNDc7WT1jO3JldHVybn1udWxsIT09YSYmKGEuZmlyc3RFZmZlY3Q9YS5sYXN0RWZmZWN0PW51bGwsYS5mbGFnc3w9MjA0OCl9Yj1iLnNpYmxpbmc7aWYobnVsbCE9PWIpe1k9YjtyZXR1cm59WT1iPWF9d2hpbGUobnVsbCE9PWIpOzA9PT1WJiYoVj01KX1mdW5jdGlvbiBVaihhKXt2YXIgYj1lZygpO2dnKDk5LGRrLmJpbmQobnVsbCxhLGIpKTtyZXR1cm4gbnVsbH1cbmZ1bmN0aW9uIGRrKGEsYil7ZG8gT2ooKTt3aGlsZShudWxsIT09eWopO2lmKDAhPT0oWCY0OCkpdGhyb3cgRXJyb3IoeSgzMjcpKTt2YXIgYz1hLmZpbmlzaGVkV29yaztpZihudWxsPT09YylyZXR1cm4gbnVsbDthLmZpbmlzaGVkV29yaz1udWxsO2EuZmluaXNoZWRMYW5lcz0wO2lmKGM9PT1hLmN1cnJlbnQpdGhyb3cgRXJyb3IoeSgxNzcpKTthLmNhbGxiYWNrTm9kZT1udWxsO3ZhciBkPWMubGFuZXN8Yy5jaGlsZExhbmVzLGU9ZCxmPWEucGVuZGluZ0xhbmVzJn5lO2EucGVuZGluZ0xhbmVzPWU7YS5zdXNwZW5kZWRMYW5lcz0wO2EucGluZ2VkTGFuZXM9MDthLmV4cGlyZWRMYW5lcyY9ZTthLm11dGFibGVSZWFkTGFuZXMmPWU7YS5lbnRhbmdsZWRMYW5lcyY9ZTtlPWEuZW50YW5nbGVtZW50cztmb3IodmFyIGc9YS5ldmVudFRpbWVzLGg9YS5leHBpcmF0aW9uVGltZXM7MDxmOyl7dmFyIGs9MzEtVmMoZiksbD0xPDxrO2Vba109MDtnW2tdPS0xO2hba109LTE7ZiY9fmx9bnVsbCE9PVxuQ2omJjA9PT0oZCYyNCkmJkNqLmhhcyhhKSYmQ2ouZGVsZXRlKGEpO2E9PT1VJiYoWT1VPW51bGwsVz0wKTsxPGMuZmxhZ3M/bnVsbCE9PWMubGFzdEVmZmVjdD8oYy5sYXN0RWZmZWN0Lm5leHRFZmZlY3Q9YyxkPWMuZmlyc3RFZmZlY3QpOmQ9YzpkPWMuZmlyc3RFZmZlY3Q7aWYobnVsbCE9PWQpe2U9WDtYfD0zMjtwai5jdXJyZW50PW51bGw7a2Y9ZmQ7Zz1OZSgpO2lmKE9lKGcpKXtpZihcInNlbGVjdGlvblN0YXJ0XCJpbiBnKWg9e3N0YXJ0Omcuc2VsZWN0aW9uU3RhcnQsZW5kOmcuc2VsZWN0aW9uRW5kfTtlbHNlIGE6aWYoaD0oaD1nLm93bmVyRG9jdW1lbnQpJiZoLmRlZmF1bHRWaWV3fHx3aW5kb3csKGw9aC5nZXRTZWxlY3Rpb24mJmguZ2V0U2VsZWN0aW9uKCkpJiYwIT09bC5yYW5nZUNvdW50KXtoPWwuYW5jaG9yTm9kZTtmPWwuYW5jaG9yT2Zmc2V0O2s9bC5mb2N1c05vZGU7bD1sLmZvY3VzT2Zmc2V0O3RyeXtoLm5vZGVUeXBlLGsubm9kZVR5cGV9Y2F0Y2godmEpe2g9bnVsbDtcbmJyZWFrIGF9dmFyIG49MCxBPS0xLHA9LTEsQz0wLHg9MCx3PWcsej1udWxsO2I6Zm9yKDs7KXtmb3IodmFyIHU7Oyl7dyE9PWh8fDAhPT1mJiYzIT09dy5ub2RlVHlwZXx8KEE9bitmKTt3IT09a3x8MCE9PWwmJjMhPT13Lm5vZGVUeXBlfHwocD1uK2wpOzM9PT13Lm5vZGVUeXBlJiYobis9dy5ub2RlVmFsdWUubGVuZ3RoKTtpZihudWxsPT09KHU9dy5maXJzdENoaWxkKSlicmVhazt6PXc7dz11fWZvcig7Oyl7aWYodz09PWcpYnJlYWsgYjt6PT09aCYmKytDPT09ZiYmKEE9bik7ej09PWsmJisreD09PWwmJihwPW4pO2lmKG51bGwhPT0odT13Lm5leHRTaWJsaW5nKSlicmVhazt3PXo7ej13LnBhcmVudE5vZGV9dz11fWg9LTE9PT1BfHwtMT09PXA/bnVsbDp7c3RhcnQ6QSxlbmQ6cH19ZWxzZSBoPW51bGw7aD1ofHx7c3RhcnQ6MCxlbmQ6MH19ZWxzZSBoPW51bGw7bGY9e2ZvY3VzZWRFbGVtOmcsc2VsZWN0aW9uUmFuZ2U6aH07ZmQ9ITE7SWo9bnVsbDtKaj0hMTtaPWQ7ZG8gdHJ5e2VrKCl9Y2F0Y2godmEpe2lmKG51bGw9PT1cblopdGhyb3cgRXJyb3IoeSgzMzApKTtXaShaLHZhKTtaPVoubmV4dEVmZmVjdH13aGlsZShudWxsIT09Wik7SWo9bnVsbDtaPWQ7ZG8gdHJ5e2ZvcihnPWE7bnVsbCE9PVo7KXt2YXIgdD1aLmZsYWdzO3QmMTYmJnBiKFouc3RhdGVOb2RlLFwiXCIpO2lmKHQmMTI4KXt2YXIgcT1aLmFsdGVybmF0ZTtpZihudWxsIT09cSl7dmFyIHY9cS5yZWY7bnVsbCE9PXYmJihcImZ1bmN0aW9uXCI9PT10eXBlb2Ygdj92KG51bGwpOnYuY3VycmVudD1udWxsKX19c3dpdGNoKHQmMTAzOCl7Y2FzZSAyOmZqKFopO1ouZmxhZ3MmPS0zO2JyZWFrO2Nhc2UgNjpmaihaKTtaLmZsYWdzJj0tMztpaihaLmFsdGVybmF0ZSxaKTticmVhaztjYXNlIDEwMjQ6Wi5mbGFncyY9LTEwMjU7YnJlYWs7Y2FzZSAxMDI4OlouZmxhZ3MmPS0xMDI1O2lqKFouYWx0ZXJuYXRlLFopO2JyZWFrO2Nhc2UgNDppaihaLmFsdGVybmF0ZSxaKTticmVhaztjYXNlIDg6aD1aO2NqKGcsaCk7dmFyIEo9aC5hbHRlcm5hdGU7ZGooaCk7bnVsbCE9PVxuSiYmZGooSil9Wj1aLm5leHRFZmZlY3R9fWNhdGNoKHZhKXtpZihudWxsPT09Wil0aHJvdyBFcnJvcih5KDMzMCkpO1dpKFosdmEpO1o9Wi5uZXh0RWZmZWN0fXdoaWxlKG51bGwhPT1aKTt2PWxmO3E9TmUoKTt0PXYuZm9jdXNlZEVsZW07Zz12LnNlbGVjdGlvblJhbmdlO2lmKHEhPT10JiZ0JiZ0Lm93bmVyRG9jdW1lbnQmJk1lKHQub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsdCkpe251bGwhPT1nJiZPZSh0KSYmKHE9Zy5zdGFydCx2PWcuZW5kLHZvaWQgMD09PXYmJih2PXEpLFwic2VsZWN0aW9uU3RhcnRcImluIHQ/KHQuc2VsZWN0aW9uU3RhcnQ9cSx0LnNlbGVjdGlvbkVuZD1NYXRoLm1pbih2LHQudmFsdWUubGVuZ3RoKSk6KHY9KHE9dC5vd25lckRvY3VtZW50fHxkb2N1bWVudCkmJnEuZGVmYXVsdFZpZXd8fHdpbmRvdyx2LmdldFNlbGVjdGlvbiYmKHY9di5nZXRTZWxlY3Rpb24oKSxoPXQudGV4dENvbnRlbnQubGVuZ3RoLEo9TWF0aC5taW4oZy5zdGFydCxoKSxnPXZvaWQgMD09PVxuZy5lbmQ/SjpNYXRoLm1pbihnLmVuZCxoKSwhdi5leHRlbmQmJko+ZyYmKGg9ZyxnPUosSj1oKSxoPUxlKHQsSiksZj1MZSh0LGcpLGgmJmYmJigxIT09di5yYW5nZUNvdW50fHx2LmFuY2hvck5vZGUhPT1oLm5vZGV8fHYuYW5jaG9yT2Zmc2V0IT09aC5vZmZzZXR8fHYuZm9jdXNOb2RlIT09Zi5ub2RlfHx2LmZvY3VzT2Zmc2V0IT09Zi5vZmZzZXQpJiYocT1xLmNyZWF0ZVJhbmdlKCkscS5zZXRTdGFydChoLm5vZGUsaC5vZmZzZXQpLHYucmVtb3ZlQWxsUmFuZ2VzKCksSj5nPyh2LmFkZFJhbmdlKHEpLHYuZXh0ZW5kKGYubm9kZSxmLm9mZnNldCkpOihxLnNldEVuZChmLm5vZGUsZi5vZmZzZXQpLHYuYWRkUmFuZ2UocSkpKSkpKTtxPVtdO2Zvcih2PXQ7dj12LnBhcmVudE5vZGU7KTE9PT12Lm5vZGVUeXBlJiZxLnB1c2goe2VsZW1lbnQ6dixsZWZ0OnYuc2Nyb2xsTGVmdCx0b3A6di5zY3JvbGxUb3B9KTtcImZ1bmN0aW9uXCI9PT10eXBlb2YgdC5mb2N1cyYmdC5mb2N1cygpO2Zvcih0PVxuMDt0PHEubGVuZ3RoO3QrKyl2PXFbdF0sdi5lbGVtZW50LnNjcm9sbExlZnQ9di5sZWZ0LHYuZWxlbWVudC5zY3JvbGxUb3A9di50b3B9ZmQ9ISFrZjtsZj1rZj1udWxsO2EuY3VycmVudD1jO1o9ZDtkbyB0cnl7Zm9yKHQ9YTtudWxsIT09Wjspe3ZhciBLPVouZmxhZ3M7SyYzNiYmWWkodCxaLmFsdGVybmF0ZSxaKTtpZihLJjEyOCl7cT12b2lkIDA7dmFyIFE9Wi5yZWY7aWYobnVsbCE9PVEpe3ZhciBMPVouc3RhdGVOb2RlO3N3aXRjaChaLnRhZyl7Y2FzZSA1OnE9TDticmVhaztkZWZhdWx0OnE9TH1cImZ1bmN0aW9uXCI9PT10eXBlb2YgUT9RKHEpOlEuY3VycmVudD1xfX1aPVoubmV4dEVmZmVjdH19Y2F0Y2godmEpe2lmKG51bGw9PT1aKXRocm93IEVycm9yKHkoMzMwKSk7V2koWix2YSk7Wj1aLm5leHRFZmZlY3R9d2hpbGUobnVsbCE9PVopO1o9bnVsbDskZigpO1g9ZX1lbHNlIGEuY3VycmVudD1jO2lmKHhqKXhqPSExLHlqPWEsemo9YjtlbHNlIGZvcihaPWQ7bnVsbCE9PVo7KWI9XG5aLm5leHRFZmZlY3QsWi5uZXh0RWZmZWN0PW51bGwsWi5mbGFncyY4JiYoSz1aLEsuc2libGluZz1udWxsLEsuc3RhdGVOb2RlPW51bGwpLFo9YjtkPWEucGVuZGluZ0xhbmVzOzA9PT1kJiYoVGk9bnVsbCk7MT09PWQ/YT09PUVqP0RqKys6KERqPTAsRWo9YSk6RGo9MDtjPWMuc3RhdGVOb2RlO2lmKE1mJiZcImZ1bmN0aW9uXCI9PT10eXBlb2YgTWYub25Db21taXRGaWJlclJvb3QpdHJ5e01mLm9uQ29tbWl0RmliZXJSb290KExmLGMsdm9pZCAwLDY0PT09KGMuY3VycmVudC5mbGFncyY2NCkpfWNhdGNoKHZhKXt9TWooYSxPKCkpO2lmKFFpKXRocm93IFFpPSExLGE9UmksUmk9bnVsbCxhO2lmKDAhPT0oWCY4KSlyZXR1cm4gbnVsbDtpZygpO3JldHVybiBudWxsfVxuZnVuY3Rpb24gZWsoKXtmb3IoO251bGwhPT1aOyl7dmFyIGE9Wi5hbHRlcm5hdGU7Smp8fG51bGw9PT1Janx8KDAhPT0oWi5mbGFncyY4KT9kYyhaLElqKSYmKEpqPSEwKToxMz09PVoudGFnJiZtaihhLFopJiZkYyhaLElqKSYmKEpqPSEwKSk7dmFyIGI9Wi5mbGFnczswIT09KGImMjU2KSYmWGkoYSxaKTswPT09KGImNTEyKXx8eGp8fCh4aj0hMCxoZyg5NyxmdW5jdGlvbigpe09qKCk7cmV0dXJuIG51bGx9KSk7Wj1aLm5leHRFZmZlY3R9fWZ1bmN0aW9uIE9qKCl7aWYoOTAhPT16ail7dmFyIGE9OTc8emo/OTc6emo7emo9OTA7cmV0dXJuIGdnKGEsZmspfXJldHVybiExfWZ1bmN0aW9uICRpKGEsYil7QWoucHVzaChiLGEpO3hqfHwoeGo9ITAsaGcoOTcsZnVuY3Rpb24oKXtPaigpO3JldHVybiBudWxsfSkpfWZ1bmN0aW9uIFppKGEsYil7QmoucHVzaChiLGEpO3hqfHwoeGo9ITAsaGcoOTcsZnVuY3Rpb24oKXtPaigpO3JldHVybiBudWxsfSkpfVxuZnVuY3Rpb24gZmsoKXtpZihudWxsPT09eWopcmV0dXJuITE7dmFyIGE9eWo7eWo9bnVsbDtpZigwIT09KFgmNDgpKXRocm93IEVycm9yKHkoMzMxKSk7dmFyIGI9WDtYfD0zMjt2YXIgYz1CajtCaj1bXTtmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrPTIpe3ZhciBlPWNbZF0sZj1jW2QrMV0sZz1lLmRlc3Ryb3k7ZS5kZXN0cm95PXZvaWQgMDtpZihcImZ1bmN0aW9uXCI9PT10eXBlb2YgZyl0cnl7ZygpfWNhdGNoKGspe2lmKG51bGw9PT1mKXRocm93IEVycm9yKHkoMzMwKSk7V2koZixrKX19Yz1BajtBaj1bXTtmb3IoZD0wO2Q8Yy5sZW5ndGg7ZCs9Mil7ZT1jW2RdO2Y9Y1tkKzFdO3RyeXt2YXIgaD1lLmNyZWF0ZTtlLmRlc3Ryb3k9aCgpfWNhdGNoKGspe2lmKG51bGw9PT1mKXRocm93IEVycm9yKHkoMzMwKSk7V2koZixrKX19Zm9yKGg9YS5jdXJyZW50LmZpcnN0RWZmZWN0O251bGwhPT1oOylhPWgubmV4dEVmZmVjdCxoLm5leHRFZmZlY3Q9bnVsbCxoLmZsYWdzJjgmJihoLnNpYmxpbmc9XG5udWxsLGguc3RhdGVOb2RlPW51bGwpLGg9YTtYPWI7aWcoKTtyZXR1cm4hMH1mdW5jdGlvbiBnayhhLGIsYyl7Yj1NaShjLGIpO2I9UGkoYSxiLDEpO0FnKGEsYik7Yj1IZygpO2E9S2ooYSwxKTtudWxsIT09YSYmKCRjKGEsMSxiKSxNaihhLGIpKX1cbmZ1bmN0aW9uIFdpKGEsYil7aWYoMz09PWEudGFnKWdrKGEsYSxiKTtlbHNlIGZvcih2YXIgYz1hLnJldHVybjtudWxsIT09Yzspe2lmKDM9PT1jLnRhZyl7Z2soYyxhLGIpO2JyZWFrfWVsc2UgaWYoMT09PWMudGFnKXt2YXIgZD1jLnN0YXRlTm9kZTtpZihcImZ1bmN0aW9uXCI9PT10eXBlb2YgYy50eXBlLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcnx8XCJmdW5jdGlvblwiPT09dHlwZW9mIGQuY29tcG9uZW50RGlkQ2F0Y2gmJihudWxsPT09VGl8fCFUaS5oYXMoZCkpKXthPU1pKGIsYSk7dmFyIGU9U2koYyxhLDEpO0FnKGMsZSk7ZT1IZygpO2M9S2ooYywxKTtpZihudWxsIT09YykkYyhjLDEsZSksTWooYyxlKTtlbHNlIGlmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBkLmNvbXBvbmVudERpZENhdGNoJiYobnVsbD09PVRpfHwhVGkuaGFzKGQpKSl0cnl7ZC5jb21wb25lbnREaWRDYXRjaChiLGEpfWNhdGNoKGYpe31icmVha319Yz1jLnJldHVybn19XG5mdW5jdGlvbiBZaihhLGIsYyl7dmFyIGQ9YS5waW5nQ2FjaGU7bnVsbCE9PWQmJmQuZGVsZXRlKGIpO2I9SGcoKTthLnBpbmdlZExhbmVzfD1hLnN1c3BlbmRlZExhbmVzJmM7VT09PWEmJihXJmMpPT09YyYmKDQ9PT1WfHwzPT09ViYmKFcmNjI5MTQ1NjApPT09VyYmNTAwPk8oKS1qaj9RaihhLDApOnVqfD1jKTtNaihhLGIpfWZ1bmN0aW9uIGxqKGEsYil7dmFyIGM9YS5zdGF0ZU5vZGU7bnVsbCE9PWMmJmMuZGVsZXRlKGIpO2I9MDswPT09YiYmKGI9YS5tb2RlLDA9PT0oYiYyKT9iPTE6MD09PShiJjQpP2I9OTk9PT1lZygpPzE6MjooMD09PUdqJiYoR2o9dGopLGI9WWMoNjI5MTQ1NjAmfkdqKSwwPT09YiYmKGI9NDE5NDMwNCkpKTtjPUhnKCk7YT1LaihhLGIpO251bGwhPT1hJiYoJGMoYSxiLGMpLE1qKGEsYykpfXZhciBjaztcbmNrPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1iLmxhbmVzO2lmKG51bGwhPT1hKWlmKGEubWVtb2l6ZWRQcm9wcyE9PWIucGVuZGluZ1Byb3BzfHxOLmN1cnJlbnQpdWc9ITA7ZWxzZSBpZigwIT09KGMmZCkpdWc9MCE9PShhLmZsYWdzJjE2Mzg0KT8hMDohMTtlbHNle3VnPSExO3N3aXRjaChiLnRhZyl7Y2FzZSAzOnJpKGIpO3NoKCk7YnJlYWs7Y2FzZSA1OmdoKGIpO2JyZWFrO2Nhc2UgMTpGZihiLnR5cGUpJiZKZihiKTticmVhaztjYXNlIDQ6ZWgoYixiLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKTticmVhaztjYXNlIDEwOmQ9Yi5tZW1vaXplZFByb3BzLnZhbHVlO3ZhciBlPWIudHlwZS5fY29udGV4dDtJKG1nLGUuX2N1cnJlbnRWYWx1ZSk7ZS5fY3VycmVudFZhbHVlPWQ7YnJlYWs7Y2FzZSAxMzppZihudWxsIT09Yi5tZW1vaXplZFN0YXRlKXtpZigwIT09KGMmYi5jaGlsZC5jaGlsZExhbmVzKSlyZXR1cm4gdGkoYSxiLGMpO0koUCxQLmN1cnJlbnQmMSk7Yj1oaShhLGIsYyk7cmV0dXJuIG51bGwhPT1cbmI/Yi5zaWJsaW5nOm51bGx9SShQLFAuY3VycmVudCYxKTticmVhaztjYXNlIDE5OmQ9MCE9PShjJmIuY2hpbGRMYW5lcyk7aWYoMCE9PShhLmZsYWdzJjY0KSl7aWYoZClyZXR1cm4gQWkoYSxiLGMpO2IuZmxhZ3N8PTY0fWU9Yi5tZW1vaXplZFN0YXRlO251bGwhPT1lJiYoZS5yZW5kZXJpbmc9bnVsbCxlLnRhaWw9bnVsbCxlLmxhc3RFZmZlY3Q9bnVsbCk7SShQLFAuY3VycmVudCk7aWYoZClicmVhaztlbHNlIHJldHVybiBudWxsO2Nhc2UgMjM6Y2FzZSAyNDpyZXR1cm4gYi5sYW5lcz0wLG1pKGEsYixjKX1yZXR1cm4gaGkoYSxiLGMpfWVsc2UgdWc9ITE7Yi5sYW5lcz0wO3N3aXRjaChiLnRhZyl7Y2FzZSAyOmQ9Yi50eXBlO251bGwhPT1hJiYoYS5hbHRlcm5hdGU9bnVsbCxiLmFsdGVybmF0ZT1udWxsLGIuZmxhZ3N8PTIpO2E9Yi5wZW5kaW5nUHJvcHM7ZT1FZihiLE0uY3VycmVudCk7dGcoYixjKTtlPUNoKG51bGwsYixkLGEsZSxjKTtiLmZsYWdzfD0xO2lmKFwib2JqZWN0XCI9PT1cbnR5cGVvZiBlJiZudWxsIT09ZSYmXCJmdW5jdGlvblwiPT09dHlwZW9mIGUucmVuZGVyJiZ2b2lkIDA9PT1lLiQkdHlwZW9mKXtiLnRhZz0xO2IubWVtb2l6ZWRTdGF0ZT1udWxsO2IudXBkYXRlUXVldWU9bnVsbDtpZihGZihkKSl7dmFyIGY9ITA7SmYoYil9ZWxzZSBmPSExO2IubWVtb2l6ZWRTdGF0ZT1udWxsIT09ZS5zdGF0ZSYmdm9pZCAwIT09ZS5zdGF0ZT9lLnN0YXRlOm51bGw7eGcoYik7dmFyIGc9ZC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM7XCJmdW5jdGlvblwiPT09dHlwZW9mIGcmJkdnKGIsZCxnLGEpO2UudXBkYXRlcj1LZztiLnN0YXRlTm9kZT1lO2UuX3JlYWN0SW50ZXJuYWxzPWI7T2coYixkLGEsYyk7Yj1xaShudWxsLGIsZCwhMCxmLGMpfWVsc2UgYi50YWc9MCxmaShudWxsLGIsZSxjKSxiPWIuY2hpbGQ7cmV0dXJuIGI7Y2FzZSAxNjplPWIuZWxlbWVudFR5cGU7YTp7bnVsbCE9PWEmJihhLmFsdGVybmF0ZT1udWxsLGIuYWx0ZXJuYXRlPW51bGwsYi5mbGFnc3w9Mik7XG5hPWIucGVuZGluZ1Byb3BzO2Y9ZS5faW5pdDtlPWYoZS5fcGF5bG9hZCk7Yi50eXBlPWU7Zj1iLnRhZz1oayhlKTthPWxnKGUsYSk7c3dpdGNoKGYpe2Nhc2UgMDpiPWxpKG51bGwsYixlLGEsYyk7YnJlYWsgYTtjYXNlIDE6Yj1waShudWxsLGIsZSxhLGMpO2JyZWFrIGE7Y2FzZSAxMTpiPWdpKG51bGwsYixlLGEsYyk7YnJlYWsgYTtjYXNlIDE0OmI9aWkobnVsbCxiLGUsbGcoZS50eXBlLGEpLGQsYyk7YnJlYWsgYX10aHJvdyBFcnJvcih5KDMwNixlLFwiXCIpKTt9cmV0dXJuIGI7Y2FzZSAwOnJldHVybiBkPWIudHlwZSxlPWIucGVuZGluZ1Byb3BzLGU9Yi5lbGVtZW50VHlwZT09PWQ/ZTpsZyhkLGUpLGxpKGEsYixkLGUsYyk7Y2FzZSAxOnJldHVybiBkPWIudHlwZSxlPWIucGVuZGluZ1Byb3BzLGU9Yi5lbGVtZW50VHlwZT09PWQ/ZTpsZyhkLGUpLHBpKGEsYixkLGUsYyk7Y2FzZSAzOnJpKGIpO2Q9Yi51cGRhdGVRdWV1ZTtpZihudWxsPT09YXx8bnVsbD09PWQpdGhyb3cgRXJyb3IoeSgyODIpKTtcbmQ9Yi5wZW5kaW5nUHJvcHM7ZT1iLm1lbW9pemVkU3RhdGU7ZT1udWxsIT09ZT9lLmVsZW1lbnQ6bnVsbDt5ZyhhLGIpO0NnKGIsZCxudWxsLGMpO2Q9Yi5tZW1vaXplZFN0YXRlLmVsZW1lbnQ7aWYoZD09PWUpc2goKSxiPWhpKGEsYixjKTtlbHNle2U9Yi5zdGF0ZU5vZGU7aWYoZj1lLmh5ZHJhdGUpa2g9cmYoYi5zdGF0ZU5vZGUuY29udGFpbmVySW5mby5maXJzdENoaWxkKSxqaD1iLGY9bGg9ITA7aWYoZil7YT1lLm11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGE7aWYobnVsbCE9YSlmb3IoZT0wO2U8YS5sZW5ndGg7ZSs9MilmPWFbZV0sZi5fd29ya0luUHJvZ3Jlc3NWZXJzaW9uUHJpbWFyeT1hW2UrMV0sdGgucHVzaChmKTtjPVpnKGIsbnVsbCxkLGMpO2ZvcihiLmNoaWxkPWM7YzspYy5mbGFncz1jLmZsYWdzJi0zfDEwMjQsYz1jLnNpYmxpbmd9ZWxzZSBmaShhLGIsZCxjKSxzaCgpO2I9Yi5jaGlsZH1yZXR1cm4gYjtjYXNlIDU6cmV0dXJuIGdoKGIpLG51bGw9PT1hJiZcbnBoKGIpLGQ9Yi50eXBlLGU9Yi5wZW5kaW5nUHJvcHMsZj1udWxsIT09YT9hLm1lbW9pemVkUHJvcHM6bnVsbCxnPWUuY2hpbGRyZW4sbmYoZCxlKT9nPW51bGw6bnVsbCE9PWYmJm5mKGQsZikmJihiLmZsYWdzfD0xNiksb2koYSxiKSxmaShhLGIsZyxjKSxiLmNoaWxkO2Nhc2UgNjpyZXR1cm4gbnVsbD09PWEmJnBoKGIpLG51bGw7Y2FzZSAxMzpyZXR1cm4gdGkoYSxiLGMpO2Nhc2UgNDpyZXR1cm4gZWgoYixiLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKSxkPWIucGVuZGluZ1Byb3BzLG51bGw9PT1hP2IuY2hpbGQ9WWcoYixudWxsLGQsYyk6ZmkoYSxiLGQsYyksYi5jaGlsZDtjYXNlIDExOnJldHVybiBkPWIudHlwZSxlPWIucGVuZGluZ1Byb3BzLGU9Yi5lbGVtZW50VHlwZT09PWQ/ZTpsZyhkLGUpLGdpKGEsYixkLGUsYyk7Y2FzZSA3OnJldHVybiBmaShhLGIsYi5wZW5kaW5nUHJvcHMsYyksYi5jaGlsZDtjYXNlIDg6cmV0dXJuIGZpKGEsYixiLnBlbmRpbmdQcm9wcy5jaGlsZHJlbixcbmMpLGIuY2hpbGQ7Y2FzZSAxMjpyZXR1cm4gZmkoYSxiLGIucGVuZGluZ1Byb3BzLmNoaWxkcmVuLGMpLGIuY2hpbGQ7Y2FzZSAxMDphOntkPWIudHlwZS5fY29udGV4dDtlPWIucGVuZGluZ1Byb3BzO2c9Yi5tZW1vaXplZFByb3BzO2Y9ZS52YWx1ZTt2YXIgaD1iLnR5cGUuX2NvbnRleHQ7SShtZyxoLl9jdXJyZW50VmFsdWUpO2guX2N1cnJlbnRWYWx1ZT1mO2lmKG51bGwhPT1nKWlmKGg9Zy52YWx1ZSxmPUhlKGgsZik/MDooXCJmdW5jdGlvblwiPT09dHlwZW9mIGQuX2NhbGN1bGF0ZUNoYW5nZWRCaXRzP2QuX2NhbGN1bGF0ZUNoYW5nZWRCaXRzKGgsZik6MTA3Mzc0MTgyMyl8MCwwPT09Zil7aWYoZy5jaGlsZHJlbj09PWUuY2hpbGRyZW4mJiFOLmN1cnJlbnQpe2I9aGkoYSxiLGMpO2JyZWFrIGF9fWVsc2UgZm9yKGg9Yi5jaGlsZCxudWxsIT09aCYmKGgucmV0dXJuPWIpO251bGwhPT1oOyl7dmFyIGs9aC5kZXBlbmRlbmNpZXM7aWYobnVsbCE9PWspe2c9aC5jaGlsZDtmb3IodmFyIGw9XG5rLmZpcnN0Q29udGV4dDtudWxsIT09bDspe2lmKGwuY29udGV4dD09PWQmJjAhPT0obC5vYnNlcnZlZEJpdHMmZikpezE9PT1oLnRhZyYmKGw9emcoLTEsYyYtYyksbC50YWc9MixBZyhoLGwpKTtoLmxhbmVzfD1jO2w9aC5hbHRlcm5hdGU7bnVsbCE9PWwmJihsLmxhbmVzfD1jKTtzZyhoLnJldHVybixjKTtrLmxhbmVzfD1jO2JyZWFrfWw9bC5uZXh0fX1lbHNlIGc9MTA9PT1oLnRhZz9oLnR5cGU9PT1iLnR5cGU/bnVsbDpoLmNoaWxkOmguY2hpbGQ7aWYobnVsbCE9PWcpZy5yZXR1cm49aDtlbHNlIGZvcihnPWg7bnVsbCE9PWc7KXtpZihnPT09Yil7Zz1udWxsO2JyZWFrfWg9Zy5zaWJsaW5nO2lmKG51bGwhPT1oKXtoLnJldHVybj1nLnJldHVybjtnPWg7YnJlYWt9Zz1nLnJldHVybn1oPWd9ZmkoYSxiLGUuY2hpbGRyZW4sYyk7Yj1iLmNoaWxkfXJldHVybiBiO2Nhc2UgOTpyZXR1cm4gZT1iLnR5cGUsZj1iLnBlbmRpbmdQcm9wcyxkPWYuY2hpbGRyZW4sdGcoYixjKSxlPXZnKGUsXG5mLnVuc3RhYmxlX29ic2VydmVkQml0cyksZD1kKGUpLGIuZmxhZ3N8PTEsZmkoYSxiLGQsYyksYi5jaGlsZDtjYXNlIDE0OnJldHVybiBlPWIudHlwZSxmPWxnKGUsYi5wZW5kaW5nUHJvcHMpLGY9bGcoZS50eXBlLGYpLGlpKGEsYixlLGYsZCxjKTtjYXNlIDE1OnJldHVybiBraShhLGIsYi50eXBlLGIucGVuZGluZ1Byb3BzLGQsYyk7Y2FzZSAxNzpyZXR1cm4gZD1iLnR5cGUsZT1iLnBlbmRpbmdQcm9wcyxlPWIuZWxlbWVudFR5cGU9PT1kP2U6bGcoZCxlKSxudWxsIT09YSYmKGEuYWx0ZXJuYXRlPW51bGwsYi5hbHRlcm5hdGU9bnVsbCxiLmZsYWdzfD0yKSxiLnRhZz0xLEZmKGQpPyhhPSEwLEpmKGIpKTphPSExLHRnKGIsYyksTWcoYixkLGUpLE9nKGIsZCxlLGMpLHFpKG51bGwsYixkLCEwLGEsYyk7Y2FzZSAxOTpyZXR1cm4gQWkoYSxiLGMpO2Nhc2UgMjM6cmV0dXJuIG1pKGEsYixjKTtjYXNlIDI0OnJldHVybiBtaShhLGIsYyl9dGhyb3cgRXJyb3IoeSgxNTYsYi50YWcpKTtcbn07ZnVuY3Rpb24gaWsoYSxiLGMsZCl7dGhpcy50YWc9YTt0aGlzLmtleT1jO3RoaXMuc2libGluZz10aGlzLmNoaWxkPXRoaXMucmV0dXJuPXRoaXMuc3RhdGVOb2RlPXRoaXMudHlwZT10aGlzLmVsZW1lbnRUeXBlPW51bGw7dGhpcy5pbmRleD0wO3RoaXMucmVmPW51bGw7dGhpcy5wZW5kaW5nUHJvcHM9Yjt0aGlzLmRlcGVuZGVuY2llcz10aGlzLm1lbW9pemVkU3RhdGU9dGhpcy51cGRhdGVRdWV1ZT10aGlzLm1lbW9pemVkUHJvcHM9bnVsbDt0aGlzLm1vZGU9ZDt0aGlzLmZsYWdzPTA7dGhpcy5sYXN0RWZmZWN0PXRoaXMuZmlyc3RFZmZlY3Q9dGhpcy5uZXh0RWZmZWN0PW51bGw7dGhpcy5jaGlsZExhbmVzPXRoaXMubGFuZXM9MDt0aGlzLmFsdGVybmF0ZT1udWxsfWZ1bmN0aW9uIG5oKGEsYixjLGQpe3JldHVybiBuZXcgaWsoYSxiLGMsZCl9ZnVuY3Rpb24gamkoYSl7YT1hLnByb3RvdHlwZTtyZXR1cm4hKCFhfHwhYS5pc1JlYWN0Q29tcG9uZW50KX1cbmZ1bmN0aW9uIGhrKGEpe2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBhKXJldHVybiBqaShhKT8xOjA7aWYodm9pZCAwIT09YSYmbnVsbCE9PWEpe2E9YS4kJHR5cGVvZjtpZihhPT09QWEpcmV0dXJuIDExO2lmKGE9PT1EYSlyZXR1cm4gMTR9cmV0dXJuIDJ9XG5mdW5jdGlvbiBUZyhhLGIpe3ZhciBjPWEuYWx0ZXJuYXRlO251bGw9PT1jPyhjPW5oKGEudGFnLGIsYS5rZXksYS5tb2RlKSxjLmVsZW1lbnRUeXBlPWEuZWxlbWVudFR5cGUsYy50eXBlPWEudHlwZSxjLnN0YXRlTm9kZT1hLnN0YXRlTm9kZSxjLmFsdGVybmF0ZT1hLGEuYWx0ZXJuYXRlPWMpOihjLnBlbmRpbmdQcm9wcz1iLGMudHlwZT1hLnR5cGUsYy5mbGFncz0wLGMubmV4dEVmZmVjdD1udWxsLGMuZmlyc3RFZmZlY3Q9bnVsbCxjLmxhc3RFZmZlY3Q9bnVsbCk7Yy5jaGlsZExhbmVzPWEuY2hpbGRMYW5lcztjLmxhbmVzPWEubGFuZXM7Yy5jaGlsZD1hLmNoaWxkO2MubWVtb2l6ZWRQcm9wcz1hLm1lbW9pemVkUHJvcHM7Yy5tZW1vaXplZFN0YXRlPWEubWVtb2l6ZWRTdGF0ZTtjLnVwZGF0ZVF1ZXVlPWEudXBkYXRlUXVldWU7Yj1hLmRlcGVuZGVuY2llcztjLmRlcGVuZGVuY2llcz1udWxsPT09Yj9udWxsOntsYW5lczpiLmxhbmVzLGZpcnN0Q29udGV4dDpiLmZpcnN0Q29udGV4dH07XG5jLnNpYmxpbmc9YS5zaWJsaW5nO2MuaW5kZXg9YS5pbmRleDtjLnJlZj1hLnJlZjtyZXR1cm4gY31cbmZ1bmN0aW9uIFZnKGEsYixjLGQsZSxmKXt2YXIgZz0yO2Q9YTtpZihcImZ1bmN0aW9uXCI9PT10eXBlb2YgYSlqaShhKSYmKGc9MSk7ZWxzZSBpZihcInN0cmluZ1wiPT09dHlwZW9mIGEpZz01O2Vsc2UgYTpzd2l0Y2goYSl7Y2FzZSB1YTpyZXR1cm4gWGcoYy5jaGlsZHJlbixlLGYsYik7Y2FzZSBIYTpnPTg7ZXw9MTY7YnJlYWs7Y2FzZSB3YTpnPTg7ZXw9MTticmVhaztjYXNlIHhhOnJldHVybiBhPW5oKDEyLGMsYixlfDgpLGEuZWxlbWVudFR5cGU9eGEsYS50eXBlPXhhLGEubGFuZXM9ZixhO2Nhc2UgQmE6cmV0dXJuIGE9bmgoMTMsYyxiLGUpLGEudHlwZT1CYSxhLmVsZW1lbnRUeXBlPUJhLGEubGFuZXM9ZixhO2Nhc2UgQ2E6cmV0dXJuIGE9bmgoMTksYyxiLGUpLGEuZWxlbWVudFR5cGU9Q2EsYS5sYW5lcz1mLGE7Y2FzZSBJYTpyZXR1cm4gdmkoYyxlLGYsYik7Y2FzZSBKYTpyZXR1cm4gYT1uaCgyNCxjLGIsZSksYS5lbGVtZW50VHlwZT1KYSxhLmxhbmVzPWYsYTtkZWZhdWx0OmlmKFwib2JqZWN0XCI9PT1cbnR5cGVvZiBhJiZudWxsIT09YSlzd2l0Y2goYS4kJHR5cGVvZil7Y2FzZSB5YTpnPTEwO2JyZWFrIGE7Y2FzZSB6YTpnPTk7YnJlYWsgYTtjYXNlIEFhOmc9MTE7YnJlYWsgYTtjYXNlIERhOmc9MTQ7YnJlYWsgYTtjYXNlIEVhOmc9MTY7ZD1udWxsO2JyZWFrIGE7Y2FzZSBGYTpnPTIyO2JyZWFrIGF9dGhyb3cgRXJyb3IoeSgxMzAsbnVsbD09YT9hOnR5cGVvZiBhLFwiXCIpKTt9Yj1uaChnLGMsYixlKTtiLmVsZW1lbnRUeXBlPWE7Yi50eXBlPWQ7Yi5sYW5lcz1mO3JldHVybiBifWZ1bmN0aW9uIFhnKGEsYixjLGQpe2E9bmgoNyxhLGQsYik7YS5sYW5lcz1jO3JldHVybiBhfWZ1bmN0aW9uIHZpKGEsYixjLGQpe2E9bmgoMjMsYSxkLGIpO2EuZWxlbWVudFR5cGU9SWE7YS5sYW5lcz1jO3JldHVybiBhfWZ1bmN0aW9uIFVnKGEsYixjKXthPW5oKDYsYSxudWxsLGIpO2EubGFuZXM9YztyZXR1cm4gYX1cbmZ1bmN0aW9uIFdnKGEsYixjKXtiPW5oKDQsbnVsbCE9PWEuY2hpbGRyZW4/YS5jaGlsZHJlbjpbXSxhLmtleSxiKTtiLmxhbmVzPWM7Yi5zdGF0ZU5vZGU9e2NvbnRhaW5lckluZm86YS5jb250YWluZXJJbmZvLHBlbmRpbmdDaGlsZHJlbjpudWxsLGltcGxlbWVudGF0aW9uOmEuaW1wbGVtZW50YXRpb259O3JldHVybiBifVxuZnVuY3Rpb24gamsoYSxiLGMpe3RoaXMudGFnPWI7dGhpcy5jb250YWluZXJJbmZvPWE7dGhpcy5maW5pc2hlZFdvcms9dGhpcy5waW5nQ2FjaGU9dGhpcy5jdXJyZW50PXRoaXMucGVuZGluZ0NoaWxkcmVuPW51bGw7dGhpcy50aW1lb3V0SGFuZGxlPS0xO3RoaXMucGVuZGluZ0NvbnRleHQ9dGhpcy5jb250ZXh0PW51bGw7dGhpcy5oeWRyYXRlPWM7dGhpcy5jYWxsYmFja05vZGU9bnVsbDt0aGlzLmNhbGxiYWNrUHJpb3JpdHk9MDt0aGlzLmV2ZW50VGltZXM9WmMoMCk7dGhpcy5leHBpcmF0aW9uVGltZXM9WmMoLTEpO3RoaXMuZW50YW5nbGVkTGFuZXM9dGhpcy5maW5pc2hlZExhbmVzPXRoaXMubXV0YWJsZVJlYWRMYW5lcz10aGlzLmV4cGlyZWRMYW5lcz10aGlzLnBpbmdlZExhbmVzPXRoaXMuc3VzcGVuZGVkTGFuZXM9dGhpcy5wZW5kaW5nTGFuZXM9MDt0aGlzLmVudGFuZ2xlbWVudHM9WmMoMCk7dGhpcy5tdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhPW51bGx9XG5mdW5jdGlvbiBrayhhLGIsYyl7dmFyIGQ9Mzxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOm51bGw7cmV0dXJueyQkdHlwZW9mOnRhLGtleTpudWxsPT1kP251bGw6XCJcIitkLGNoaWxkcmVuOmEsY29udGFpbmVySW5mbzpiLGltcGxlbWVudGF0aW9uOmN9fVxuZnVuY3Rpb24gbGsoYSxiLGMsZCl7dmFyIGU9Yi5jdXJyZW50LGY9SGcoKSxnPUlnKGUpO2E6aWYoYyl7Yz1jLl9yZWFjdEludGVybmFscztiOntpZihaYihjKSE9PWN8fDEhPT1jLnRhZyl0aHJvdyBFcnJvcih5KDE3MCkpO3ZhciBoPWM7ZG97c3dpdGNoKGgudGFnKXtjYXNlIDM6aD1oLnN0YXRlTm9kZS5jb250ZXh0O2JyZWFrIGI7Y2FzZSAxOmlmKEZmKGgudHlwZSkpe2g9aC5zdGF0ZU5vZGUuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNZXJnZWRDaGlsZENvbnRleHQ7YnJlYWsgYn19aD1oLnJldHVybn13aGlsZShudWxsIT09aCk7dGhyb3cgRXJyb3IoeSgxNzEpKTt9aWYoMT09PWMudGFnKXt2YXIgaz1jLnR5cGU7aWYoRmYoaykpe2M9SWYoYyxrLGgpO2JyZWFrIGF9fWM9aH1lbHNlIGM9Q2Y7bnVsbD09PWIuY29udGV4dD9iLmNvbnRleHQ9YzpiLnBlbmRpbmdDb250ZXh0PWM7Yj16ZyhmLGcpO2IucGF5bG9hZD17ZWxlbWVudDphfTtkPXZvaWQgMD09PWQ/bnVsbDpkO251bGwhPT1cbmQmJihiLmNhbGxiYWNrPWQpO0FnKGUsYik7SmcoZSxnLGYpO3JldHVybiBnfWZ1bmN0aW9uIG1rKGEpe2E9YS5jdXJyZW50O2lmKCFhLmNoaWxkKXJldHVybiBudWxsO3N3aXRjaChhLmNoaWxkLnRhZyl7Y2FzZSA1OnJldHVybiBhLmNoaWxkLnN0YXRlTm9kZTtkZWZhdWx0OnJldHVybiBhLmNoaWxkLnN0YXRlTm9kZX19ZnVuY3Rpb24gbmsoYSxiKXthPWEubWVtb2l6ZWRTdGF0ZTtpZihudWxsIT09YSYmbnVsbCE9PWEuZGVoeWRyYXRlZCl7dmFyIGM9YS5yZXRyeUxhbmU7YS5yZXRyeUxhbmU9MCE9PWMmJmM8Yj9jOmJ9fWZ1bmN0aW9uIG9rKGEsYil7bmsoYSxiKTsoYT1hLmFsdGVybmF0ZSkmJm5rKGEsYil9ZnVuY3Rpb24gcGsoKXtyZXR1cm4gbnVsbH1cbmZ1bmN0aW9uIHFrKGEsYixjKXt2YXIgZD1udWxsIT1jJiZudWxsIT1jLmh5ZHJhdGlvbk9wdGlvbnMmJmMuaHlkcmF0aW9uT3B0aW9ucy5tdXRhYmxlU291cmNlc3x8bnVsbDtjPW5ldyBqayhhLGIsbnVsbCE9YyYmITA9PT1jLmh5ZHJhdGUpO2I9bmgoMyxudWxsLG51bGwsMj09PWI/NzoxPT09Yj8zOjApO2MuY3VycmVudD1iO2Iuc3RhdGVOb2RlPWM7eGcoYik7YVtmZl09Yy5jdXJyZW50O2NmKDg9PT1hLm5vZGVUeXBlP2EucGFyZW50Tm9kZTphKTtpZihkKWZvcihhPTA7YTxkLmxlbmd0aDthKyspe2I9ZFthXTt2YXIgZT1iLl9nZXRWZXJzaW9uO2U9ZShiLl9zb3VyY2UpO251bGw9PWMubXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YT9jLm11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGE9W2IsZV06Yy5tdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhLnB1c2goYixlKX10aGlzLl9pbnRlcm5hbFJvb3Q9Y31cbnFrLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oYSl7bGsoYSx0aGlzLl9pbnRlcm5hbFJvb3QsbnVsbCxudWxsKX07cWsucHJvdG90eXBlLnVubW91bnQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9pbnRlcm5hbFJvb3QsYj1hLmNvbnRhaW5lckluZm87bGsobnVsbCxhLG51bGwsZnVuY3Rpb24oKXtiW2ZmXT1udWxsfSl9O2Z1bmN0aW9uIHJrKGEpe3JldHVybiEoIWF8fDEhPT1hLm5vZGVUeXBlJiY5IT09YS5ub2RlVHlwZSYmMTEhPT1hLm5vZGVUeXBlJiYoOCE9PWEubm9kZVR5cGV8fFwiIHJlYWN0LW1vdW50LXBvaW50LXVuc3RhYmxlIFwiIT09YS5ub2RlVmFsdWUpKX1cbmZ1bmN0aW9uIHNrKGEsYil7Ynx8KGI9YT85PT09YS5ub2RlVHlwZT9hLmRvY3VtZW50RWxlbWVudDphLmZpcnN0Q2hpbGQ6bnVsbCxiPSEoIWJ8fDEhPT1iLm5vZGVUeXBlfHwhYi5oYXNBdHRyaWJ1dGUoXCJkYXRhLXJlYWN0cm9vdFwiKSkpO2lmKCFiKWZvcih2YXIgYztjPWEubGFzdENoaWxkOylhLnJlbW92ZUNoaWxkKGMpO3JldHVybiBuZXcgcWsoYSwwLGI/e2h5ZHJhdGU6ITB9OnZvaWQgMCl9XG5mdW5jdGlvbiB0ayhhLGIsYyxkLGUpe3ZhciBmPWMuX3JlYWN0Um9vdENvbnRhaW5lcjtpZihmKXt2YXIgZz1mLl9pbnRlcm5hbFJvb3Q7aWYoXCJmdW5jdGlvblwiPT09dHlwZW9mIGUpe3ZhciBoPWU7ZT1mdW5jdGlvbigpe3ZhciBhPW1rKGcpO2guY2FsbChhKX19bGsoYixnLGEsZSl9ZWxzZXtmPWMuX3JlYWN0Um9vdENvbnRhaW5lcj1zayhjLGQpO2c9Zi5faW50ZXJuYWxSb290O2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBlKXt2YXIgaz1lO2U9ZnVuY3Rpb24oKXt2YXIgYT1tayhnKTtrLmNhbGwoYSl9fVhqKGZ1bmN0aW9uKCl7bGsoYixnLGEsZSl9KX1yZXR1cm4gbWsoZyl9ZWM9ZnVuY3Rpb24oYSl7aWYoMTM9PT1hLnRhZyl7dmFyIGI9SGcoKTtKZyhhLDQsYik7b2soYSw0KX19O2ZjPWZ1bmN0aW9uKGEpe2lmKDEzPT09YS50YWcpe3ZhciBiPUhnKCk7SmcoYSw2NzEwODg2NCxiKTtvayhhLDY3MTA4ODY0KX19O1xuZ2M9ZnVuY3Rpb24oYSl7aWYoMTM9PT1hLnRhZyl7dmFyIGI9SGcoKSxjPUlnKGEpO0pnKGEsYyxiKTtvayhhLGMpfX07aGM9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYigpfTtcbnliPWZ1bmN0aW9uKGEsYixjKXtzd2l0Y2goYil7Y2FzZSBcImlucHV0XCI6YWIoYSxjKTtiPWMubmFtZTtpZihcInJhZGlvXCI9PT1jLnR5cGUmJm51bGwhPWIpe2ZvcihjPWE7Yy5wYXJlbnROb2RlOyljPWMucGFyZW50Tm9kZTtjPWMucXVlcnlTZWxlY3RvckFsbChcImlucHV0W25hbWU9XCIrSlNPTi5zdHJpbmdpZnkoXCJcIitiKSsnXVt0eXBlPVwicmFkaW9cIl0nKTtmb3IoYj0wO2I8Yy5sZW5ndGg7YisrKXt2YXIgZD1jW2JdO2lmKGQhPT1hJiZkLmZvcm09PT1hLmZvcm0pe3ZhciBlPURiKGQpO2lmKCFlKXRocm93IEVycm9yKHkoOTApKTtXYShkKTthYihkLGUpfX19YnJlYWs7Y2FzZSBcInRleHRhcmVhXCI6aWIoYSxjKTticmVhaztjYXNlIFwic2VsZWN0XCI6Yj1jLnZhbHVlLG51bGwhPWImJmZiKGEsISFjLm11bHRpcGxlLGIsITEpfX07R2I9V2o7XG5IYj1mdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPVg7WHw9NDt0cnl7cmV0dXJuIGdnKDk4LGEuYmluZChudWxsLGIsYyxkLGUpKX1maW5hbGx5e1g9ZiwwPT09WCYmKHdqKCksaWcoKSl9fTtJYj1mdW5jdGlvbigpezA9PT0oWCY0OSkmJihWaigpLE9qKCkpfTtKYj1mdW5jdGlvbihhLGIpe3ZhciBjPVg7WHw9Mjt0cnl7cmV0dXJuIGEoYil9ZmluYWxseXtYPWMsMD09PVgmJih3aigpLGlnKCkpfX07ZnVuY3Rpb24gdWsoYSxiKXt2YXIgYz0yPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bnVsbDtpZighcmsoYikpdGhyb3cgRXJyb3IoeSgyMDApKTtyZXR1cm4ga2soYSxiLG51bGwsYyl9dmFyIHZrPXtFdmVudHM6W0NiLHVlLERiLEViLEZiLE9qLHtjdXJyZW50OiExfV19LHdrPXtmaW5kRmliZXJCeUhvc3RJbnN0YW5jZTp3YyxidW5kbGVUeXBlOjAsdmVyc2lvbjpcIjE3LjAuMlwiLHJlbmRlcmVyUGFja2FnZU5hbWU6XCJyZWFjdC1kb21cIn07XG52YXIgeGs9e2J1bmRsZVR5cGU6d2suYnVuZGxlVHlwZSx2ZXJzaW9uOndrLnZlcnNpb24scmVuZGVyZXJQYWNrYWdlTmFtZTp3ay5yZW5kZXJlclBhY2thZ2VOYW1lLHJlbmRlcmVyQ29uZmlnOndrLnJlbmRlcmVyQ29uZmlnLG92ZXJyaWRlSG9va1N0YXRlOm51bGwsb3ZlcnJpZGVIb29rU3RhdGVEZWxldGVQYXRoOm51bGwsb3ZlcnJpZGVIb29rU3RhdGVSZW5hbWVQYXRoOm51bGwsb3ZlcnJpZGVQcm9wczpudWxsLG92ZXJyaWRlUHJvcHNEZWxldGVQYXRoOm51bGwsb3ZlcnJpZGVQcm9wc1JlbmFtZVBhdGg6bnVsbCxzZXRTdXNwZW5zZUhhbmRsZXI6bnVsbCxzY2hlZHVsZVVwZGF0ZTpudWxsLGN1cnJlbnREaXNwYXRjaGVyUmVmOnJhLlJlYWN0Q3VycmVudERpc3BhdGNoZXIsZmluZEhvc3RJbnN0YW5jZUJ5RmliZXI6ZnVuY3Rpb24oYSl7YT1jYyhhKTtyZXR1cm4gbnVsbD09PWE/bnVsbDphLnN0YXRlTm9kZX0sZmluZEZpYmVyQnlIb3N0SW5zdGFuY2U6d2suZmluZEZpYmVyQnlIb3N0SW5zdGFuY2V8fFxucGssZmluZEhvc3RJbnN0YW5jZXNGb3JSZWZyZXNoOm51bGwsc2NoZWR1bGVSZWZyZXNoOm51bGwsc2NoZWR1bGVSb290Om51bGwsc2V0UmVmcmVzaEhhbmRsZXI6bnVsbCxnZXRDdXJyZW50RmliZXI6bnVsbH07aWYoXCJ1bmRlZmluZWRcIiE9PXR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18pe3ZhciB5az1fX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX187aWYoIXlrLmlzRGlzYWJsZWQmJnlrLnN1cHBvcnRzRmliZXIpdHJ5e0xmPXlrLmluamVjdCh4ayksTWY9eWt9Y2F0Y2goYSl7fX1leHBvcnRzLl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEPXZrO2V4cG9ydHMuY3JlYXRlUG9ydGFsPXVrO1xuZXhwb3J0cy5maW5kRE9NTm9kZT1mdW5jdGlvbihhKXtpZihudWxsPT1hKXJldHVybiBudWxsO2lmKDE9PT1hLm5vZGVUeXBlKXJldHVybiBhO3ZhciBiPWEuX3JlYWN0SW50ZXJuYWxzO2lmKHZvaWQgMD09PWIpe2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBhLnJlbmRlcil0aHJvdyBFcnJvcih5KDE4OCkpO3Rocm93IEVycm9yKHkoMjY4LE9iamVjdC5rZXlzKGEpKSk7fWE9Y2MoYik7YT1udWxsPT09YT9udWxsOmEuc3RhdGVOb2RlO3JldHVybiBhfTtleHBvcnRzLmZsdXNoU3luYz1mdW5jdGlvbihhLGIpe3ZhciBjPVg7aWYoMCE9PShjJjQ4KSlyZXR1cm4gYShiKTtYfD0xO3RyeXtpZihhKXJldHVybiBnZyg5OSxhLmJpbmQobnVsbCxiKSl9ZmluYWxseXtYPWMsaWcoKX19O2V4cG9ydHMuaHlkcmF0ZT1mdW5jdGlvbihhLGIsYyl7aWYoIXJrKGIpKXRocm93IEVycm9yKHkoMjAwKSk7cmV0dXJuIHRrKG51bGwsYSxiLCEwLGMpfTtcbmV4cG9ydHMucmVuZGVyPWZ1bmN0aW9uKGEsYixjKXtpZighcmsoYikpdGhyb3cgRXJyb3IoeSgyMDApKTtyZXR1cm4gdGsobnVsbCxhLGIsITEsYyl9O2V4cG9ydHMudW5tb3VudENvbXBvbmVudEF0Tm9kZT1mdW5jdGlvbihhKXtpZighcmsoYSkpdGhyb3cgRXJyb3IoeSg0MCkpO3JldHVybiBhLl9yZWFjdFJvb3RDb250YWluZXI/KFhqKGZ1bmN0aW9uKCl7dGsobnVsbCxudWxsLGEsITEsZnVuY3Rpb24oKXthLl9yZWFjdFJvb3RDb250YWluZXI9bnVsbDthW2ZmXT1udWxsfSl9KSwhMCk6ITF9O2V4cG9ydHMudW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXM9V2o7ZXhwb3J0cy51bnN0YWJsZV9jcmVhdGVQb3J0YWw9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdWsoYSxiLDI8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpudWxsKX07XG5leHBvcnRzLnVuc3RhYmxlX3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyPWZ1bmN0aW9uKGEsYixjLGQpe2lmKCFyayhjKSl0aHJvdyBFcnJvcih5KDIwMCkpO2lmKG51bGw9PWF8fHZvaWQgMD09PWEuX3JlYWN0SW50ZXJuYWxzKXRocm93IEVycm9yKHkoMzgpKTtyZXR1cm4gdGsoYSxiLGMsITEsZCl9O2V4cG9ydHMudmVyc2lvbj1cIjE3LjAuMlwiO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gY2hlY2tEQ0UoKSB7XG4gIC8qIGdsb2JhbCBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gKi9cbiAgaWYgKFxuICAgIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gPT09ICd1bmRlZmluZWQnIHx8XG4gICAgdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5jaGVja0RDRSAhPT0gJ2Z1bmN0aW9uJ1xuICApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyBUaGlzIGJyYW5jaCBpcyB1bnJlYWNoYWJsZSBiZWNhdXNlIHRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWRcbiAgICAvLyBpbiBwcm9kdWN0aW9uLCBidXQgdGhlIGNvbmRpdGlvbiBpcyB0cnVlIG9ubHkgaW4gZGV2ZWxvcG1lbnQuXG4gICAgLy8gVGhlcmVmb3JlIGlmIHRoZSBicmFuY2ggaXMgc3RpbGwgaGVyZSwgZGVhZCBjb2RlIGVsaW1pbmF0aW9uIHdhc24ndFxuICAgIC8vIHByb3Blcmx5IGFwcGxpZWQuXG4gICAgLy8gRG9uJ3QgY2hhbmdlIHRoZSBtZXNzYWdlLiBSZWFjdCBEZXZUb29scyByZWxpZXMgb24gaXQuIEFsc28gbWFrZSBzdXJlXG4gICAgLy8gdGhpcyBtZXNzYWdlIGRvZXNuJ3Qgb2NjdXIgZWxzZXdoZXJlIGluIHRoaXMgZnVuY3Rpb24sIG9yIGl0IHdpbGwgY2F1c2VcbiAgICAvLyBhIGZhbHNlIHBvc2l0aXZlLlxuICAgIHRocm93IG5ldyBFcnJvcignXl9eJyk7XG4gIH1cbiAgdHJ5IHtcbiAgICAvLyBWZXJpZnkgdGhhdCB0aGUgY29kZSBhYm92ZSBoYXMgYmVlbiBkZWFkIGNvZGUgZWxpbWluYXRlZCAoRENFJ2QpLlxuICAgIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5jaGVja0RDRShjaGVja0RDRSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIERldlRvb2xzIHNob3VsZG4ndCBjcmFzaCBSZWFjdCwgbm8gbWF0dGVyIHdoYXQuXG4gICAgLy8gV2Ugc2hvdWxkIHN0aWxsIHJlcG9ydCBpbiBjYXNlIHdlIGJyZWFrIHRoaXMgY29kZS5cbiAgICBjb25zb2xlLmVycm9yKGVycik7XG4gIH1cbn1cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgLy8gRENFIGNoZWNrIHNob3VsZCBoYXBwZW4gYmVmb3JlIFJlYWN0RE9NIGJ1bmRsZSBleGVjdXRlcyBzbyB0aGF0XG4gIC8vIERldlRvb2xzIGNhbiByZXBvcnQgYmFkIG1pbmlmaWNhdGlvbiBkdXJpbmcgaW5qZWN0aW9uLlxuICBjaGVja0RDRSgpO1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWRvbS5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1kb20uZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsICIvKipcbiAqIEBsaWNlbnNlIFJlYWN0XG4gKiB1c2Utc3luYy1leHRlcm5hbC1zdG9yZS1zaGltLnByb2R1Y3Rpb24ubWluLmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cbid1c2Ugc3RyaWN0Jzt2YXIgZT1yZXF1aXJlKFwicmVhY3RcIik7ZnVuY3Rpb24gaChhLGIpe3JldHVybiBhPT09YiYmKDAhPT1hfHwxL2E9PT0xL2IpfHxhIT09YSYmYiE9PWJ9dmFyIGs9XCJmdW5jdGlvblwiPT09dHlwZW9mIE9iamVjdC5pcz9PYmplY3QuaXM6aCxsPWUudXNlU3RhdGUsbT1lLnVzZUVmZmVjdCxuPWUudXNlTGF5b3V0RWZmZWN0LHA9ZS51c2VEZWJ1Z1ZhbHVlO2Z1bmN0aW9uIHEoYSxiKXt2YXIgZD1iKCksZj1sKHtpbnN0Ont2YWx1ZTpkLGdldFNuYXBzaG90OmJ9fSksYz1mWzBdLmluc3QsZz1mWzFdO24oZnVuY3Rpb24oKXtjLnZhbHVlPWQ7Yy5nZXRTbmFwc2hvdD1iO3IoYykmJmcoe2luc3Q6Y30pfSxbYSxkLGJdKTttKGZ1bmN0aW9uKCl7cihjKSYmZyh7aW5zdDpjfSk7cmV0dXJuIGEoZnVuY3Rpb24oKXtyKGMpJiZnKHtpbnN0OmN9KX0pfSxbYV0pO3AoZCk7cmV0dXJuIGR9XG5mdW5jdGlvbiByKGEpe3ZhciBiPWEuZ2V0U25hcHNob3Q7YT1hLnZhbHVlO3RyeXt2YXIgZD1iKCk7cmV0dXJuIWsoYSxkKX1jYXRjaChmKXtyZXR1cm4hMH19ZnVuY3Rpb24gdChhLGIpe3JldHVybiBiKCl9dmFyIHU9XCJ1bmRlZmluZWRcIj09PXR5cGVvZiB3aW5kb3d8fFwidW5kZWZpbmVkXCI9PT10eXBlb2Ygd2luZG93LmRvY3VtZW50fHxcInVuZGVmaW5lZFwiPT09dHlwZW9mIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50P3Q6cTtleHBvcnRzLnVzZVN5bmNFeHRlcm5hbFN0b3JlPXZvaWQgMCE9PWUudXNlU3luY0V4dGVybmFsU3RvcmU/ZS51c2VTeW5jRXh0ZXJuYWxTdG9yZTp1O1xuIiwgIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi9janMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUtc2hpbS5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi9janMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUtc2hpbS5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwgIi8qKlxuICogQGxpY2Vuc2UgUmVhY3RcbiAqIHVzZS1zeW5jLWV4dGVybmFsLXN0b3JlLXNoaW0vd2l0aC1zZWxlY3Rvci5wcm9kdWN0aW9uLm1pbi5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG4ndXNlIHN0cmljdCc7dmFyIGg9cmVxdWlyZShcInJlYWN0XCIpLG49cmVxdWlyZShcInVzZS1zeW5jLWV4dGVybmFsLXN0b3JlL3NoaW1cIik7ZnVuY3Rpb24gcChhLGIpe3JldHVybiBhPT09YiYmKDAhPT1hfHwxL2E9PT0xL2IpfHxhIT09YSYmYiE9PWJ9dmFyIHE9XCJmdW5jdGlvblwiPT09dHlwZW9mIE9iamVjdC5pcz9PYmplY3QuaXM6cCxyPW4udXNlU3luY0V4dGVybmFsU3RvcmUsdD1oLnVzZVJlZix1PWgudXNlRWZmZWN0LHY9aC51c2VNZW1vLHc9aC51c2VEZWJ1Z1ZhbHVlO1xuZXhwb3J0cy51c2VTeW5jRXh0ZXJuYWxTdG9yZVdpdGhTZWxlY3Rvcj1mdW5jdGlvbihhLGIsZSxsLGcpe3ZhciBjPXQobnVsbCk7aWYobnVsbD09PWMuY3VycmVudCl7dmFyIGY9e2hhc1ZhbHVlOiExLHZhbHVlOm51bGx9O2MuY3VycmVudD1mfWVsc2UgZj1jLmN1cnJlbnQ7Yz12KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShhKXtpZighYyl7Yz0hMDtkPWE7YT1sKGEpO2lmKHZvaWQgMCE9PWcmJmYuaGFzVmFsdWUpe3ZhciBiPWYudmFsdWU7aWYoZyhiLGEpKXJldHVybiBrPWJ9cmV0dXJuIGs9YX1iPWs7aWYocShkLGEpKXJldHVybiBiO3ZhciBlPWwoYSk7aWYodm9pZCAwIT09ZyYmZyhiLGUpKXJldHVybiBiO2Q9YTtyZXR1cm4gaz1lfXZhciBjPSExLGQsayxtPXZvaWQgMD09PWU/bnVsbDplO3JldHVybltmdW5jdGlvbigpe3JldHVybiBhKGIoKSl9LG51bGw9PT1tP3ZvaWQgMDpmdW5jdGlvbigpe3JldHVybiBhKG0oKSl9XX0sW2IsZSxsLGddKTt2YXIgZD1yKGEsY1swXSxjWzFdKTtcbnUoZnVuY3Rpb24oKXtmLmhhc1ZhbHVlPSEwO2YudmFsdWU9ZH0sW2RdKTt3KGQpO3JldHVybiBkfTtcbiIsICIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vY2pzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlLXNoaW0vd2l0aC1zZWxlY3Rvci5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi9janMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUtc2hpbS93aXRoLXNlbGVjdG9yLmRldmVsb3BtZW50LmpzJyk7XG59XG4iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2V4dGVuZHMoKSB7XG4gIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKHRhcmdldCkge1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldO1xuICAgICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfTtcbiAgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59IiwgIi8qKiBAbGljZW5zZSBSZWFjdCB2MTYuMTMuMVxuICogcmVhY3QtaXMucHJvZHVjdGlvbi5taW4uanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7dmFyIGI9XCJmdW5jdGlvblwiPT09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLmZvcixjPWI/U3ltYm9sLmZvcihcInJlYWN0LmVsZW1lbnRcIik6NjAxMDMsZD1iP1N5bWJvbC5mb3IoXCJyZWFjdC5wb3J0YWxcIik6NjAxMDYsZT1iP1N5bWJvbC5mb3IoXCJyZWFjdC5mcmFnbWVudFwiKTo2MDEwNyxmPWI/U3ltYm9sLmZvcihcInJlYWN0LnN0cmljdF9tb2RlXCIpOjYwMTA4LGc9Yj9TeW1ib2wuZm9yKFwicmVhY3QucHJvZmlsZXJcIik6NjAxMTQsaD1iP1N5bWJvbC5mb3IoXCJyZWFjdC5wcm92aWRlclwiKTo2MDEwOSxrPWI/U3ltYm9sLmZvcihcInJlYWN0LmNvbnRleHRcIik6NjAxMTAsbD1iP1N5bWJvbC5mb3IoXCJyZWFjdC5hc3luY19tb2RlXCIpOjYwMTExLG09Yj9TeW1ib2wuZm9yKFwicmVhY3QuY29uY3VycmVudF9tb2RlXCIpOjYwMTExLG49Yj9TeW1ib2wuZm9yKFwicmVhY3QuZm9yd2FyZF9yZWZcIik6NjAxMTIscD1iP1N5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZVwiKTo2MDExMyxxPWI/XG5TeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VfbGlzdFwiKTo2MDEyMCxyPWI/U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9cIik6NjAxMTUsdD1iP1N5bWJvbC5mb3IoXCJyZWFjdC5sYXp5XCIpOjYwMTE2LHY9Yj9TeW1ib2wuZm9yKFwicmVhY3QuYmxvY2tcIik6NjAxMjEsdz1iP1N5bWJvbC5mb3IoXCJyZWFjdC5mdW5kYW1lbnRhbFwiKTo2MDExNyx4PWI/U3ltYm9sLmZvcihcInJlYWN0LnJlc3BvbmRlclwiKTo2MDExOCx5PWI/U3ltYm9sLmZvcihcInJlYWN0LnNjb3BlXCIpOjYwMTE5O1xuZnVuY3Rpb24geihhKXtpZihcIm9iamVjdFwiPT09dHlwZW9mIGEmJm51bGwhPT1hKXt2YXIgdT1hLiQkdHlwZW9mO3N3aXRjaCh1KXtjYXNlIGM6c3dpdGNoKGE9YS50eXBlLGEpe2Nhc2UgbDpjYXNlIG06Y2FzZSBlOmNhc2UgZzpjYXNlIGY6Y2FzZSBwOnJldHVybiBhO2RlZmF1bHQ6c3dpdGNoKGE9YSYmYS4kJHR5cGVvZixhKXtjYXNlIGs6Y2FzZSBuOmNhc2UgdDpjYXNlIHI6Y2FzZSBoOnJldHVybiBhO2RlZmF1bHQ6cmV0dXJuIHV9fWNhc2UgZDpyZXR1cm4gdX19fWZ1bmN0aW9uIEEoYSl7cmV0dXJuIHooYSk9PT1tfWV4cG9ydHMuQXN5bmNNb2RlPWw7ZXhwb3J0cy5Db25jdXJyZW50TW9kZT1tO2V4cG9ydHMuQ29udGV4dENvbnN1bWVyPWs7ZXhwb3J0cy5Db250ZXh0UHJvdmlkZXI9aDtleHBvcnRzLkVsZW1lbnQ9YztleHBvcnRzLkZvcndhcmRSZWY9bjtleHBvcnRzLkZyYWdtZW50PWU7ZXhwb3J0cy5MYXp5PXQ7ZXhwb3J0cy5NZW1vPXI7ZXhwb3J0cy5Qb3J0YWw9ZDtcbmV4cG9ydHMuUHJvZmlsZXI9ZztleHBvcnRzLlN0cmljdE1vZGU9ZjtleHBvcnRzLlN1c3BlbnNlPXA7ZXhwb3J0cy5pc0FzeW5jTW9kZT1mdW5jdGlvbihhKXtyZXR1cm4gQShhKXx8eihhKT09PWx9O2V4cG9ydHMuaXNDb25jdXJyZW50TW9kZT1BO2V4cG9ydHMuaXNDb250ZXh0Q29uc3VtZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1rfTtleHBvcnRzLmlzQ29udGV4dFByb3ZpZGVyPWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09aH07ZXhwb3J0cy5pc0VsZW1lbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuXCJvYmplY3RcIj09PXR5cGVvZiBhJiZudWxsIT09YSYmYS4kJHR5cGVvZj09PWN9O2V4cG9ydHMuaXNGb3J3YXJkUmVmPWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09bn07ZXhwb3J0cy5pc0ZyYWdtZW50PWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09ZX07ZXhwb3J0cy5pc0xhenk9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT10fTtcbmV4cG9ydHMuaXNNZW1vPWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09cn07ZXhwb3J0cy5pc1BvcnRhbD1mdW5jdGlvbihhKXtyZXR1cm4geihhKT09PWR9O2V4cG9ydHMuaXNQcm9maWxlcj1mdW5jdGlvbihhKXtyZXR1cm4geihhKT09PWd9O2V4cG9ydHMuaXNTdHJpY3RNb2RlPWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09Zn07ZXhwb3J0cy5pc1N1c3BlbnNlPWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09cH07XG5leHBvcnRzLmlzVmFsaWRFbGVtZW50VHlwZT1mdW5jdGlvbihhKXtyZXR1cm5cInN0cmluZ1wiPT09dHlwZW9mIGF8fFwiZnVuY3Rpb25cIj09PXR5cGVvZiBhfHxhPT09ZXx8YT09PW18fGE9PT1nfHxhPT09Znx8YT09PXB8fGE9PT1xfHxcIm9iamVjdFwiPT09dHlwZW9mIGEmJm51bGwhPT1hJiYoYS4kJHR5cGVvZj09PXR8fGEuJCR0eXBlb2Y9PT1yfHxhLiQkdHlwZW9mPT09aHx8YS4kJHR5cGVvZj09PWt8fGEuJCR0eXBlb2Y9PT1ufHxhLiQkdHlwZW9mPT09d3x8YS4kJHR5cGVvZj09PXh8fGEuJCR0eXBlb2Y9PT15fHxhLiQkdHlwZW9mPT09dil9O2V4cG9ydHMudHlwZU9mPXo7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWlzLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzJyk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgcmVhY3RJcyA9IHJlcXVpcmUoJ3JlYWN0LWlzJyk7XG5cbi8qKlxuICogQ29weXJpZ2h0IDIwMTUsIFlhaG9vISBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbnZhciBSRUFDVF9TVEFUSUNTID0ge1xuICBjaGlsZENvbnRleHRUeXBlczogdHJ1ZSxcbiAgY29udGV4dFR5cGU6IHRydWUsXG4gIGNvbnRleHRUeXBlczogdHJ1ZSxcbiAgZGVmYXVsdFByb3BzOiB0cnVlLFxuICBkaXNwbGF5TmFtZTogdHJ1ZSxcbiAgZ2V0RGVmYXVsdFByb3BzOiB0cnVlLFxuICBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3I6IHRydWUsXG4gIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wczogdHJ1ZSxcbiAgbWl4aW5zOiB0cnVlLFxuICBwcm9wVHlwZXM6IHRydWUsXG4gIHR5cGU6IHRydWVcbn07XG52YXIgS05PV05fU1RBVElDUyA9IHtcbiAgbmFtZTogdHJ1ZSxcbiAgbGVuZ3RoOiB0cnVlLFxuICBwcm90b3R5cGU6IHRydWUsXG4gIGNhbGxlcjogdHJ1ZSxcbiAgY2FsbGVlOiB0cnVlLFxuICBhcmd1bWVudHM6IHRydWUsXG4gIGFyaXR5OiB0cnVlXG59O1xudmFyIEZPUldBUkRfUkVGX1NUQVRJQ1MgPSB7XG4gICckJHR5cGVvZic6IHRydWUsXG4gIHJlbmRlcjogdHJ1ZSxcbiAgZGVmYXVsdFByb3BzOiB0cnVlLFxuICBkaXNwbGF5TmFtZTogdHJ1ZSxcbiAgcHJvcFR5cGVzOiB0cnVlXG59O1xudmFyIE1FTU9fU1RBVElDUyA9IHtcbiAgJyQkdHlwZW9mJzogdHJ1ZSxcbiAgY29tcGFyZTogdHJ1ZSxcbiAgZGVmYXVsdFByb3BzOiB0cnVlLFxuICBkaXNwbGF5TmFtZTogdHJ1ZSxcbiAgcHJvcFR5cGVzOiB0cnVlLFxuICB0eXBlOiB0cnVlXG59O1xudmFyIFRZUEVfU1RBVElDUyA9IHt9O1xuVFlQRV9TVEFUSUNTW3JlYWN0SXMuRm9yd2FyZFJlZl0gPSBGT1JXQVJEX1JFRl9TVEFUSUNTO1xuVFlQRV9TVEFUSUNTW3JlYWN0SXMuTWVtb10gPSBNRU1PX1NUQVRJQ1M7XG5cbmZ1bmN0aW9uIGdldFN0YXRpY3MoY29tcG9uZW50KSB7XG4gIC8vIFJlYWN0IHYxNi4xMSBhbmQgYmVsb3dcbiAgaWYgKHJlYWN0SXMuaXNNZW1vKGNvbXBvbmVudCkpIHtcbiAgICByZXR1cm4gTUVNT19TVEFUSUNTO1xuICB9IC8vIFJlYWN0IHYxNi4xMiBhbmQgYWJvdmVcblxuXG4gIHJldHVybiBUWVBFX1NUQVRJQ1NbY29tcG9uZW50WyckJHR5cGVvZiddXSB8fCBSRUFDVF9TVEFUSUNTO1xufVxuXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBnZXRQcm90b3R5cGVPZiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcbnZhciBvYmplY3RQcm90b3R5cGUgPSBPYmplY3QucHJvdG90eXBlO1xuZnVuY3Rpb24gaG9pc3ROb25SZWFjdFN0YXRpY3ModGFyZ2V0Q29tcG9uZW50LCBzb3VyY2VDb21wb25lbnQsIGJsYWNrbGlzdCkge1xuICBpZiAodHlwZW9mIHNvdXJjZUNvbXBvbmVudCAhPT0gJ3N0cmluZycpIHtcbiAgICAvLyBkb24ndCBob2lzdCBvdmVyIHN0cmluZyAoaHRtbCkgY29tcG9uZW50c1xuICAgIGlmIChvYmplY3RQcm90b3R5cGUpIHtcbiAgICAgIHZhciBpbmhlcml0ZWRDb21wb25lbnQgPSBnZXRQcm90b3R5cGVPZihzb3VyY2VDb21wb25lbnQpO1xuXG4gICAgICBpZiAoaW5oZXJpdGVkQ29tcG9uZW50ICYmIGluaGVyaXRlZENvbXBvbmVudCAhPT0gb2JqZWN0UHJvdG90eXBlKSB7XG4gICAgICAgIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKHRhcmdldENvbXBvbmVudCwgaW5oZXJpdGVkQ29tcG9uZW50LCBibGFja2xpc3QpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBrZXlzID0gZ2V0T3duUHJvcGVydHlOYW1lcyhzb3VyY2VDb21wb25lbnQpO1xuXG4gICAgaWYgKGdldE93blByb3BlcnR5U3ltYm9scykge1xuICAgICAga2V5cyA9IGtleXMuY29uY2F0KGdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2VDb21wb25lbnQpKTtcbiAgICB9XG5cbiAgICB2YXIgdGFyZ2V0U3RhdGljcyA9IGdldFN0YXRpY3ModGFyZ2V0Q29tcG9uZW50KTtcbiAgICB2YXIgc291cmNlU3RhdGljcyA9IGdldFN0YXRpY3Moc291cmNlQ29tcG9uZW50KTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgdmFyIGtleSA9IGtleXNbaV07XG5cbiAgICAgIGlmICghS05PV05fU1RBVElDU1trZXldICYmICEoYmxhY2tsaXN0ICYmIGJsYWNrbGlzdFtrZXldKSAmJiAhKHNvdXJjZVN0YXRpY3MgJiYgc291cmNlU3RhdGljc1trZXldKSAmJiAhKHRhcmdldFN0YXRpY3MgJiYgdGFyZ2V0U3RhdGljc1trZXldKSkge1xuICAgICAgICB2YXIgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2VDb21wb25lbnQsIGtleSk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBBdm9pZCBmYWlsdXJlcyBmcm9tIHJlYWQtb25seSBwcm9wZXJ0aWVzXG4gICAgICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0Q29tcG9uZW50LCBrZXksIGRlc2NyaXB0b3IpO1xuICAgICAgICB9IGNhdGNoIChlKSB7fVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXRDb21wb25lbnQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaG9pc3ROb25SZWFjdFN0YXRpY3M7XG4iLCAiLyoqXG4gKiBAbGljZW5zZSBSZWFjdFxuICogcmVhY3QtaXMucHJvZHVjdGlvbi5taW4uanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuJ3VzZSBzdHJpY3QnO3ZhciBiPVN5bWJvbC5mb3IoXCJyZWFjdC5lbGVtZW50XCIpLGM9U3ltYm9sLmZvcihcInJlYWN0LnBvcnRhbFwiKSxkPVN5bWJvbC5mb3IoXCJyZWFjdC5mcmFnbWVudFwiKSxlPVN5bWJvbC5mb3IoXCJyZWFjdC5zdHJpY3RfbW9kZVwiKSxmPVN5bWJvbC5mb3IoXCJyZWFjdC5wcm9maWxlclwiKSxnPVN5bWJvbC5mb3IoXCJyZWFjdC5wcm92aWRlclwiKSxoPVN5bWJvbC5mb3IoXCJyZWFjdC5jb250ZXh0XCIpLGs9U3ltYm9sLmZvcihcInJlYWN0LnNlcnZlcl9jb250ZXh0XCIpLGw9U3ltYm9sLmZvcihcInJlYWN0LmZvcndhcmRfcmVmXCIpLG09U3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlXCIpLG49U3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlX2xpc3RcIikscD1TeW1ib2wuZm9yKFwicmVhY3QubWVtb1wiKSxxPVN5bWJvbC5mb3IoXCJyZWFjdC5sYXp5XCIpLHQ9U3ltYm9sLmZvcihcInJlYWN0Lm9mZnNjcmVlblwiKSx1O3U9U3ltYm9sLmZvcihcInJlYWN0Lm1vZHVsZS5yZWZlcmVuY2VcIik7XG5mdW5jdGlvbiB2KGEpe2lmKFwib2JqZWN0XCI9PT10eXBlb2YgYSYmbnVsbCE9PWEpe3ZhciByPWEuJCR0eXBlb2Y7c3dpdGNoKHIpe2Nhc2UgYjpzd2l0Y2goYT1hLnR5cGUsYSl7Y2FzZSBkOmNhc2UgZjpjYXNlIGU6Y2FzZSBtOmNhc2UgbjpyZXR1cm4gYTtkZWZhdWx0OnN3aXRjaChhPWEmJmEuJCR0eXBlb2YsYSl7Y2FzZSBrOmNhc2UgaDpjYXNlIGw6Y2FzZSBxOmNhc2UgcDpjYXNlIGc6cmV0dXJuIGE7ZGVmYXVsdDpyZXR1cm4gcn19Y2FzZSBjOnJldHVybiByfX19ZXhwb3J0cy5Db250ZXh0Q29uc3VtZXI9aDtleHBvcnRzLkNvbnRleHRQcm92aWRlcj1nO2V4cG9ydHMuRWxlbWVudD1iO2V4cG9ydHMuRm9yd2FyZFJlZj1sO2V4cG9ydHMuRnJhZ21lbnQ9ZDtleHBvcnRzLkxhenk9cTtleHBvcnRzLk1lbW89cDtleHBvcnRzLlBvcnRhbD1jO2V4cG9ydHMuUHJvZmlsZXI9ZjtleHBvcnRzLlN0cmljdE1vZGU9ZTtleHBvcnRzLlN1c3BlbnNlPW07XG5leHBvcnRzLlN1c3BlbnNlTGlzdD1uO2V4cG9ydHMuaXNBc3luY01vZGU9ZnVuY3Rpb24oKXtyZXR1cm4hMX07ZXhwb3J0cy5pc0NvbmN1cnJlbnRNb2RlPWZ1bmN0aW9uKCl7cmV0dXJuITF9O2V4cG9ydHMuaXNDb250ZXh0Q29uc3VtZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIHYoYSk9PT1ofTtleHBvcnRzLmlzQ29udGV4dFByb3ZpZGVyPWZ1bmN0aW9uKGEpe3JldHVybiB2KGEpPT09Z307ZXhwb3J0cy5pc0VsZW1lbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuXCJvYmplY3RcIj09PXR5cGVvZiBhJiZudWxsIT09YSYmYS4kJHR5cGVvZj09PWJ9O2V4cG9ydHMuaXNGb3J3YXJkUmVmPWZ1bmN0aW9uKGEpe3JldHVybiB2KGEpPT09bH07ZXhwb3J0cy5pc0ZyYWdtZW50PWZ1bmN0aW9uKGEpe3JldHVybiB2KGEpPT09ZH07ZXhwb3J0cy5pc0xhenk9ZnVuY3Rpb24oYSl7cmV0dXJuIHYoYSk9PT1xfTtleHBvcnRzLmlzTWVtbz1mdW5jdGlvbihhKXtyZXR1cm4gdihhKT09PXB9O1xuZXhwb3J0cy5pc1BvcnRhbD1mdW5jdGlvbihhKXtyZXR1cm4gdihhKT09PWN9O2V4cG9ydHMuaXNQcm9maWxlcj1mdW5jdGlvbihhKXtyZXR1cm4gdihhKT09PWZ9O2V4cG9ydHMuaXNTdHJpY3RNb2RlPWZ1bmN0aW9uKGEpe3JldHVybiB2KGEpPT09ZX07ZXhwb3J0cy5pc1N1c3BlbnNlPWZ1bmN0aW9uKGEpe3JldHVybiB2KGEpPT09bX07ZXhwb3J0cy5pc1N1c3BlbnNlTGlzdD1mdW5jdGlvbihhKXtyZXR1cm4gdihhKT09PW59O1xuZXhwb3J0cy5pc1ZhbGlkRWxlbWVudFR5cGU9ZnVuY3Rpb24oYSl7cmV0dXJuXCJzdHJpbmdcIj09PXR5cGVvZiBhfHxcImZ1bmN0aW9uXCI9PT10eXBlb2YgYXx8YT09PWR8fGE9PT1mfHxhPT09ZXx8YT09PW18fGE9PT1ufHxhPT09dHx8XCJvYmplY3RcIj09PXR5cGVvZiBhJiZudWxsIT09YSYmKGEuJCR0eXBlb2Y9PT1xfHxhLiQkdHlwZW9mPT09cHx8YS4kJHR5cGVvZj09PWd8fGEuJCR0eXBlb2Y9PT1ofHxhLiQkdHlwZW9mPT09bHx8YS4kJHR5cGVvZj09PXV8fHZvaWQgMCE9PWEuZ2V0TW9kdWxlSWQpPyEwOiExfTtleHBvcnRzLnR5cGVPZj12O1xuIiwgIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG4vKiBnbG9iYWwgbW9kdWxlLCBkZWZpbmUgKi9cblxuZnVuY3Rpb24gbWFwRWFjaChtYXAsIG9wZXJhdGlvbil7XG4gIHZhciBrZXlzID0gbWFwLmtleXMoKTtcbiAgdmFyIG5leHQ7XG4gIHdoaWxlKCEobmV4dCA9IGtleXMubmV4dCgpKS5kb25lKSB7XG4gICAgb3BlcmF0aW9uKG1hcC5nZXQobmV4dC52YWx1ZSksIG5leHQudmFsdWUsIG1hcCk7XG4gIH1cbn1cblxudmFyIE11bHRpbWFwID0gKGZ1bmN0aW9uKCkge1xuICB2YXIgbWFwQ3RvcjtcbiAgaWYgKHR5cGVvZiBNYXAgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgbWFwQ3RvciA9IE1hcDtcblxuICAgIGlmICghTWFwLnByb3RvdHlwZS5rZXlzKSB7XG4gICAgICBNYXAucHJvdG90eXBlLmtleXMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGtleXMgPSBbXTtcbiAgICAgICAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKGl0ZW0sIGtleSkge1xuICAgICAgICAgIGtleXMucHVzaChrZXkpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGtleXM7XG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIE11bHRpbWFwKGl0ZXJhYmxlKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgc2VsZi5fbWFwID0gbWFwQ3RvcjtcblxuICAgIGlmIChNdWx0aW1hcC5NYXApIHtcbiAgICAgIHNlbGYuX21hcCA9IE11bHRpbWFwLk1hcDtcbiAgICB9XG5cbiAgICBzZWxmLl8gPSBzZWxmLl9tYXAgPyBuZXcgc2VsZi5fbWFwKCkgOiB7fTtcblxuICAgIGlmIChpdGVyYWJsZSkge1xuICAgICAgaXRlcmFibGUuZm9yRWFjaChmdW5jdGlvbihpKSB7XG4gICAgICAgIHNlbGYuc2V0KGlbMF0sIGlbMV0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBrZXlcbiAgICogQHJldHVybiB7QXJyYXl9IEFuIGFycmF5IG9mIHZhbHVlcywgdW5kZWZpbmVkIGlmIG5vIHN1Y2ggYSBrZXk7XG4gICAqL1xuICBNdWx0aW1hcC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIHRoaXMuX21hcCA/IHRoaXMuXy5nZXQoa2V5KSA6IHRoaXMuX1trZXldO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge09iamVjdH0ga2V5XG4gICAqIEBwYXJhbSB7T2JqZWN0fSB2YWwuLi5cbiAgICovXG4gIE11bHRpbWFwLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbihrZXksIHZhbCkge1xuICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcblxuICAgIGtleSA9IGFyZ3Muc2hpZnQoKTtcblxuICAgIHZhciBlbnRyeSA9IHRoaXMuZ2V0KGtleSk7XG4gICAgaWYgKCFlbnRyeSkge1xuICAgICAgZW50cnkgPSBbXTtcbiAgICAgIGlmICh0aGlzLl9tYXApXG4gICAgICAgIHRoaXMuXy5zZXQoa2V5LCBlbnRyeSk7XG4gICAgICBlbHNlXG4gICAgICAgIHRoaXMuX1trZXldID0gZW50cnk7XG4gICAgfVxuXG4gICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoZW50cnksIGFyZ3MpO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge09iamVjdH0ga2V5XG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gdmFsXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgYW55IHRoaW5nIGNoYW5nZWRcbiAgICovXG4gIE11bHRpbWFwLnByb3RvdHlwZS5kZWxldGUgPSBmdW5jdGlvbihrZXksIHZhbCkge1xuICAgIGlmICghdGhpcy5oYXMoa2V5KSlcbiAgICAgIHJldHVybiBmYWxzZTtcblxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHtcbiAgICAgIHRoaXMuX21hcCA/ICh0aGlzLl8uZGVsZXRlKGtleSkpIDogKGRlbGV0ZSB0aGlzLl9ba2V5XSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGVudHJ5ID0gdGhpcy5nZXQoa2V5KTtcbiAgICAgIHZhciBpZHggPSBlbnRyeS5pbmRleE9mKHZhbCk7XG4gICAgICBpZiAoaWR4ICE9IC0xKSB7XG4gICAgICAgIGVudHJ5LnNwbGljZShpZHgsIDEpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBrZXlcbiAgICogQHBhcmFtIHtPYmplY3Q9fSB2YWxcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gd2hldGhlciB0aGUgbWFwIGNvbnRhaW5zICdrZXknIG9yICdrZXk9PnZhbCcgcGFpclxuICAgKi9cbiAgTXVsdGltYXAucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uKGtleSwgdmFsKSB7XG4gICAgdmFyIGhhc0tleSA9IHRoaXMuX21hcCA/IHRoaXMuXy5oYXMoa2V5KSA6IHRoaXMuXy5oYXNPd25Qcm9wZXJ0eShrZXkpO1xuXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMSB8fCAhaGFzS2V5KVxuICAgICAgcmV0dXJuIGhhc0tleTtcblxuICAgIHZhciBlbnRyeSA9IHRoaXMuZ2V0KGtleSkgfHwgW107XG4gICAgcmV0dXJuIGVudHJ5LmluZGV4T2YodmFsKSAhPSAtMTtcbiAgfTtcblxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtBcnJheX0gYWxsIHRoZSBrZXlzIGluIHRoZSBtYXBcbiAgICovXG4gIE11bHRpbWFwLnByb3RvdHlwZS5rZXlzID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuX21hcClcbiAgICAgIHJldHVybiBtYWtlSXRlcmF0b3IodGhpcy5fLmtleXMoKSk7XG5cbiAgICByZXR1cm4gbWFrZUl0ZXJhdG9yKE9iamVjdC5rZXlzKHRoaXMuXykpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtBcnJheX0gYWxsIHRoZSB2YWx1ZXMgaW4gdGhlIG1hcFxuICAgKi9cbiAgTXVsdGltYXAucHJvdG90eXBlLnZhbHVlcyA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciB2YWxzID0gW107XG4gICAgdGhpcy5mb3JFYWNoRW50cnkoZnVuY3Rpb24oZW50cnkpIHtcbiAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHZhbHMsIGVudHJ5KTtcbiAgICB9KTtcblxuICAgIHJldHVybiBtYWtlSXRlcmF0b3IodmFscyk7XG4gIH07XG5cbiAgLyoqXG4gICAqXG4gICAqL1xuICBNdWx0aW1hcC5wcm90b3R5cGUuZm9yRWFjaEVudHJ5ID0gZnVuY3Rpb24oaXRlcikge1xuICAgIG1hcEVhY2godGhpcywgaXRlcik7XG4gIH07XG5cbiAgTXVsdGltYXAucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbihpdGVyKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHNlbGYuZm9yRWFjaEVudHJ5KGZ1bmN0aW9uKGVudHJ5LCBrZXkpIHtcbiAgICAgIGVudHJ5LmZvckVhY2goZnVuY3Rpb24oaXRlbSkge1xuICAgICAgICBpdGVyKGl0ZW0sIGtleSwgc2VsZik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuXG4gIE11bHRpbWFwLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLl9tYXApIHtcbiAgICAgIHRoaXMuXy5jbGVhcigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl8gPSB7fTtcbiAgICB9XG4gIH07XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFxuICAgIE11bHRpbWFwLnByb3RvdHlwZSxcbiAgICBcInNpemVcIiwge1xuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgdG90YWwgPSAwO1xuXG4gICAgICAgIG1hcEVhY2godGhpcywgZnVuY3Rpb24odmFsdWUpe1xuICAgICAgICAgIHRvdGFsICs9IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRvdGFsO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShcbiAgICBNdWx0aW1hcC5wcm90b3R5cGUsXG4gICAgXCJjb3VudFwiLCB7XG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl8uc2l6ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICB2YXIgc2FmYXJpTmV4dDtcblxuICB0cnl7XG4gICAgc2FmYXJpTmV4dCA9IG5ldyBGdW5jdGlvbignaXRlcmF0b3InLCAnbWFrZUl0ZXJhdG9yJywgJ3ZhciBrZXlzQXJyYXkgPSBbXTsgZm9yKHZhciBrZXkgb2YgaXRlcmF0b3Ipe2tleXNBcnJheS5wdXNoKGtleSk7fSByZXR1cm4gbWFrZUl0ZXJhdG9yKGtleXNBcnJheSkubmV4dDsnKTtcbiAgfWNhdGNoKGVycm9yKXtcbiAgICAvLyBmb3Igb2Ygbm90IGltcGxlbWVudGVkO1xuICB9XG5cbiAgZnVuY3Rpb24gbWFrZUl0ZXJhdG9yKGl0ZXJhdG9yKXtcbiAgICBpZihBcnJheS5pc0FycmF5KGl0ZXJhdG9yKSl7XG4gICAgICB2YXIgbmV4dEluZGV4ID0gMDtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24oKXtcbiAgICAgICAgICByZXR1cm4gbmV4dEluZGV4IDwgaXRlcmF0b3IubGVuZ3RoID9cbiAgICAgICAgICAgIHt2YWx1ZTogaXRlcmF0b3JbbmV4dEluZGV4KytdLCBkb25lOiBmYWxzZX0gOlxuICAgICAgICAgIHtkb25lOiB0cnVlfTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBPbmx5IGFuIGlzc3VlIGluIHNhZmFyaVxuICAgIGlmKCFpdGVyYXRvci5uZXh0ICYmIHNhZmFyaU5leHQpe1xuICAgICAgaXRlcmF0b3IubmV4dCA9IHNhZmFyaU5leHQoaXRlcmF0b3IsIG1ha2VJdGVyYXRvcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGl0ZXJhdG9yO1xuICB9XG5cbiAgcmV0dXJuIE11bHRpbWFwO1xufSkoKTtcblxuXG5pZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgbW9kdWxlICYmIG1vZHVsZS5leHBvcnRzKVxuICBtb2R1bGUuZXhwb3J0cyA9IE11bHRpbWFwO1xuZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG4gIGRlZmluZShmdW5jdGlvbigpIHsgcmV0dXJuIE11bHRpbWFwOyB9KTtcbiIsICIvKlxuXG5CYXNlZCBvZmYgZ2xhbW9yJ3MgU3R5bGVTaGVldCwgdGhhbmtzIFN1bmlsIFx1Mjc2NFx1RkUwRlxuXG5oaWdoIHBlcmZvcm1hbmNlIFN0eWxlU2hlZXQgZm9yIGNzcy1pbi1qcyBzeXN0ZW1zXG5cbi0gdXNlcyBtdWx0aXBsZSBzdHlsZSB0YWdzIGJlaGluZCB0aGUgc2NlbmVzIGZvciBtaWxsaW9ucyBvZiBydWxlc1xuLSB1c2VzIGBpbnNlcnRSdWxlYCBmb3IgYXBwZW5kaW5nIGluIHByb2R1Y3Rpb24gZm9yICptdWNoKiBmYXN0ZXIgcGVyZm9ybWFuY2VcblxuLy8gdXNhZ2VcblxuaW1wb3J0IHsgU3R5bGVTaGVldCB9IGZyb20gJ0BlbW90aW9uL3NoZWV0J1xuXG5sZXQgc3R5bGVTaGVldCA9IG5ldyBTdHlsZVNoZWV0KHsga2V5OiAnJywgY29udGFpbmVyOiBkb2N1bWVudC5oZWFkIH0pXG5cbnN0eWxlU2hlZXQuaW5zZXJ0KCcjYm94IHsgYm9yZGVyOiAxcHggc29saWQgcmVkOyB9Jylcbi0gYXBwZW5kcyBhIGNzcyBydWxlIGludG8gdGhlIHN0eWxlc2hlZXRcblxuc3R5bGVTaGVldC5mbHVzaCgpXG4tIGVtcHRpZXMgdGhlIHN0eWxlc2hlZXQgb2YgYWxsIGl0cyBjb250ZW50c1xuXG4qL1xuLy8gJEZsb3dGaXhNZVxuZnVuY3Rpb24gc2hlZXRGb3JUYWcodGFnKSB7XG4gIGlmICh0YWcuc2hlZXQpIHtcbiAgICAvLyAkRmxvd0ZpeE1lXG4gICAgcmV0dXJuIHRhZy5zaGVldDtcbiAgfSAvLyB0aGlzIHdlaXJkbmVzcyBicm91Z2h0IHRvIHlvdSBieSBmaXJlZm94XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZG9jdW1lbnQuc3R5bGVTaGVldHMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoZG9jdW1lbnQuc3R5bGVTaGVldHNbaV0ub3duZXJOb2RlID09PSB0YWcpIHtcbiAgICAgIC8vICRGbG93Rml4TWVcbiAgICAgIHJldHVybiBkb2N1bWVudC5zdHlsZVNoZWV0c1tpXTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlU3R5bGVFbGVtZW50KG9wdGlvbnMpIHtcbiAgdmFyIHRhZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gIHRhZy5zZXRBdHRyaWJ1dGUoJ2RhdGEtZW1vdGlvbicsIG9wdGlvbnMua2V5KTtcblxuICBpZiAob3B0aW9ucy5ub25jZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdGFnLnNldEF0dHJpYnV0ZSgnbm9uY2UnLCBvcHRpb25zLm5vbmNlKTtcbiAgfVxuXG4gIHRhZy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnJykpO1xuICB0YWcuc2V0QXR0cmlidXRlKCdkYXRhLXMnLCAnJyk7XG4gIHJldHVybiB0YWc7XG59XG5cbnZhciBTdHlsZVNoZWV0ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgLy8gVXNpbmcgTm9kZSBpbnN0ZWFkIG9mIEhUTUxFbGVtZW50IHNpbmNlIGNvbnRhaW5lciBtYXkgYmUgYSBTaGFkb3dSb290XG4gIGZ1bmN0aW9uIFN0eWxlU2hlZXQob3B0aW9ucykge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB0aGlzLl9pbnNlcnRUYWcgPSBmdW5jdGlvbiAodGFnKSB7XG4gICAgICB2YXIgYmVmb3JlO1xuXG4gICAgICBpZiAoX3RoaXMudGFncy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgaWYgKF90aGlzLmluc2VydGlvblBvaW50KSB7XG4gICAgICAgICAgYmVmb3JlID0gX3RoaXMuaW5zZXJ0aW9uUG9pbnQubmV4dFNpYmxpbmc7XG4gICAgICAgIH0gZWxzZSBpZiAoX3RoaXMucHJlcGVuZCkge1xuICAgICAgICAgIGJlZm9yZSA9IF90aGlzLmNvbnRhaW5lci5maXJzdENoaWxkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJlZm9yZSA9IF90aGlzLmJlZm9yZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYmVmb3JlID0gX3RoaXMudGFnc1tfdGhpcy50YWdzLmxlbmd0aCAtIDFdLm5leHRTaWJsaW5nO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5jb250YWluZXIuaW5zZXJ0QmVmb3JlKHRhZywgYmVmb3JlKTtcblxuICAgICAgX3RoaXMudGFncy5wdXNoKHRhZyk7XG4gICAgfTtcblxuICAgIHRoaXMuaXNTcGVlZHkgPSBvcHRpb25zLnNwZWVkeSA9PT0gdW5kZWZpbmVkID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJyA6IG9wdGlvbnMuc3BlZWR5O1xuICAgIHRoaXMudGFncyA9IFtdO1xuICAgIHRoaXMuY3RyID0gMDtcbiAgICB0aGlzLm5vbmNlID0gb3B0aW9ucy5ub25jZTsgLy8ga2V5IGlzIHRoZSB2YWx1ZSBvZiB0aGUgZGF0YS1lbW90aW9uIGF0dHJpYnV0ZSwgaXQncyB1c2VkIHRvIGlkZW50aWZ5IGRpZmZlcmVudCBzaGVldHNcblxuICAgIHRoaXMua2V5ID0gb3B0aW9ucy5rZXk7XG4gICAgdGhpcy5jb250YWluZXIgPSBvcHRpb25zLmNvbnRhaW5lcjtcbiAgICB0aGlzLnByZXBlbmQgPSBvcHRpb25zLnByZXBlbmQ7XG4gICAgdGhpcy5pbnNlcnRpb25Qb2ludCA9IG9wdGlvbnMuaW5zZXJ0aW9uUG9pbnQ7XG4gICAgdGhpcy5iZWZvcmUgPSBudWxsO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFN0eWxlU2hlZXQucHJvdG90eXBlO1xuXG4gIF9wcm90by5oeWRyYXRlID0gZnVuY3Rpb24gaHlkcmF0ZShub2Rlcykge1xuICAgIG5vZGVzLmZvckVhY2godGhpcy5faW5zZXJ0VGFnKTtcbiAgfTtcblxuICBfcHJvdG8uaW5zZXJ0ID0gZnVuY3Rpb24gaW5zZXJ0KHJ1bGUpIHtcbiAgICAvLyB0aGUgbWF4IGxlbmd0aCBpcyBob3cgbWFueSBydWxlcyB3ZSBoYXZlIHBlciBzdHlsZSB0YWcsIGl0J3MgNjUwMDAgaW4gc3BlZWR5IG1vZGVcbiAgICAvLyBpdCdzIDEgaW4gZGV2IGJlY2F1c2Ugd2UgaW5zZXJ0IHNvdXJjZSBtYXBzIHRoYXQgbWFwIGEgc2luZ2xlIHJ1bGUgdG8gYSBsb2NhdGlvblxuICAgIC8vIGFuZCB5b3UgY2FuIG9ubHkgaGF2ZSBvbmUgc291cmNlIG1hcCBwZXIgc3R5bGUgdGFnXG4gICAgaWYgKHRoaXMuY3RyICUgKHRoaXMuaXNTcGVlZHkgPyA2NTAwMCA6IDEpID09PSAwKSB7XG4gICAgICB0aGlzLl9pbnNlcnRUYWcoY3JlYXRlU3R5bGVFbGVtZW50KHRoaXMpKTtcbiAgICB9XG5cbiAgICB2YXIgdGFnID0gdGhpcy50YWdzW3RoaXMudGFncy5sZW5ndGggLSAxXTtcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB2YXIgaXNJbXBvcnRSdWxlID0gcnVsZS5jaGFyQ29kZUF0KDApID09PSA2NCAmJiBydWxlLmNoYXJDb2RlQXQoMSkgPT09IDEwNTtcblxuICAgICAgaWYgKGlzSW1wb3J0UnVsZSAmJiB0aGlzLl9hbHJlYWR5SW5zZXJ0ZWRPcmRlckluc2Vuc2l0aXZlUnVsZSkge1xuICAgICAgICAvLyB0aGlzIHdvdWxkIG9ubHkgY2F1c2UgcHJvYmxlbSBpbiBzcGVlZHkgbW9kZVxuICAgICAgICAvLyBidXQgd2UgZG9uJ3Qgd2FudCBlbmFibGluZyBzcGVlZHkgdG8gYWZmZWN0IHRoZSBvYnNlcnZhYmxlIGJlaGF2aW9yXG4gICAgICAgIC8vIHNvIHdlIHJlcG9ydCB0aGlzIGVycm9yIGF0IGFsbCB0aW1lc1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiWW91J3JlIGF0dGVtcHRpbmcgdG8gaW5zZXJ0IHRoZSBmb2xsb3dpbmcgcnVsZTpcXG5cIiArIHJ1bGUgKyAnXFxuXFxuYEBpbXBvcnRgIHJ1bGVzIG11c3QgYmUgYmVmb3JlIGFsbCBvdGhlciB0eXBlcyBvZiBydWxlcyBpbiBhIHN0eWxlc2hlZXQgYnV0IG90aGVyIHJ1bGVzIGhhdmUgYWxyZWFkeSBiZWVuIGluc2VydGVkLiBQbGVhc2UgZW5zdXJlIHRoYXQgYEBpbXBvcnRgIHJ1bGVzIGFyZSBiZWZvcmUgYWxsIG90aGVyIHJ1bGVzLicpO1xuICAgICAgfVxuICAgICAgdGhpcy5fYWxyZWFkeUluc2VydGVkT3JkZXJJbnNlbnNpdGl2ZVJ1bGUgPSB0aGlzLl9hbHJlYWR5SW5zZXJ0ZWRPcmRlckluc2Vuc2l0aXZlUnVsZSB8fCAhaXNJbXBvcnRSdWxlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzU3BlZWR5KSB7XG4gICAgICB2YXIgc2hlZXQgPSBzaGVldEZvclRhZyh0YWcpO1xuXG4gICAgICB0cnkge1xuICAgICAgICAvLyB0aGlzIGlzIHRoZSB1bHRyYWZhc3QgdmVyc2lvbiwgd29ya3MgYWNyb3NzIGJyb3dzZXJzXG4gICAgICAgIC8vIHRoZSBiaWcgZHJhd2JhY2sgaXMgdGhhdCB0aGUgY3NzIHdvbid0IGJlIGVkaXRhYmxlIGluIGRldnRvb2xzXG4gICAgICAgIHNoZWV0Lmluc2VydFJ1bGUocnVsZSwgc2hlZXQuY3NzUnVsZXMubGVuZ3RoKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIS86KC1tb3otcGxhY2Vob2xkZXJ8LW1vei1mb2N1cy1pbm5lcnwtbW96LWZvY3VzcmluZ3wtbXMtaW5wdXQtcGxhY2Vob2xkZXJ8LW1vei1yZWFkLXdyaXRlfC1tb3otcmVhZC1vbmx5fC1tcy1jbGVhcnwtbXMtZXhwYW5kfC1tcy1yZXZlYWwpey8udGVzdChydWxlKSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJUaGVyZSB3YXMgYSBwcm9ibGVtIGluc2VydGluZyB0aGUgZm9sbG93aW5nIHJ1bGU6IFxcXCJcIiArIHJ1bGUgKyBcIlxcXCJcIiwgZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGFnLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHJ1bGUpKTtcbiAgICB9XG5cbiAgICB0aGlzLmN0cisrO1xuICB9O1xuXG4gIF9wcm90by5mbHVzaCA9IGZ1bmN0aW9uIGZsdXNoKCkge1xuICAgIC8vICRGbG93Rml4TWVcbiAgICB0aGlzLnRhZ3MuZm9yRWFjaChmdW5jdGlvbiAodGFnKSB7XG4gICAgICByZXR1cm4gdGFnLnBhcmVudE5vZGUgJiYgdGFnLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGFnKTtcbiAgICB9KTtcbiAgICB0aGlzLnRhZ3MgPSBbXTtcbiAgICB0aGlzLmN0ciA9IDA7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgdGhpcy5fYWxyZWFkeUluc2VydGVkT3JkZXJJbnNlbnNpdGl2ZVJ1bGUgPSBmYWxzZTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIFN0eWxlU2hlZXQ7XG59KCk7XG5cbmV4cG9ydCB7IFN0eWxlU2hlZXQgfTtcbiIsICJleHBvcnQgdmFyIE1TID0gJy1tcy0nXG5leHBvcnQgdmFyIE1PWiA9ICctbW96LSdcbmV4cG9ydCB2YXIgV0VCS0lUID0gJy13ZWJraXQtJ1xuXG5leHBvcnQgdmFyIENPTU1FTlQgPSAnY29tbSdcbmV4cG9ydCB2YXIgUlVMRVNFVCA9ICdydWxlJ1xuZXhwb3J0IHZhciBERUNMQVJBVElPTiA9ICdkZWNsJ1xuXG5leHBvcnQgdmFyIFBBR0UgPSAnQHBhZ2UnXG5leHBvcnQgdmFyIE1FRElBID0gJ0BtZWRpYSdcbmV4cG9ydCB2YXIgSU1QT1JUID0gJ0BpbXBvcnQnXG5leHBvcnQgdmFyIENIQVJTRVQgPSAnQGNoYXJzZXQnXG5leHBvcnQgdmFyIFZJRVdQT1JUID0gJ0B2aWV3cG9ydCdcbmV4cG9ydCB2YXIgU1VQUE9SVFMgPSAnQHN1cHBvcnRzJ1xuZXhwb3J0IHZhciBET0NVTUVOVCA9ICdAZG9jdW1lbnQnXG5leHBvcnQgdmFyIE5BTUVTUEFDRSA9ICdAbmFtZXNwYWNlJ1xuZXhwb3J0IHZhciBLRVlGUkFNRVMgPSAnQGtleWZyYW1lcydcbmV4cG9ydCB2YXIgRk9OVF9GQUNFID0gJ0Bmb250LWZhY2UnXG5leHBvcnQgdmFyIENPVU5URVJfU1RZTEUgPSAnQGNvdW50ZXItc3R5bGUnXG5leHBvcnQgdmFyIEZPTlRfRkVBVFVSRV9WQUxVRVMgPSAnQGZvbnQtZmVhdHVyZS12YWx1ZXMnXG5leHBvcnQgdmFyIExBWUVSID0gJ0BsYXllcidcbiIsICIvKipcbiAqIEBwYXJhbSB7bnVtYmVyfVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgdmFyIGFicyA9IE1hdGguYWJzXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCB2YXIgZnJvbSA9IFN0cmluZy5mcm9tQ2hhckNvZGVcblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH1cbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IHZhciBhc3NpZ24gPSBPYmplY3QuYXNzaWduXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNoICh2YWx1ZSwgbGVuZ3RoKSB7XG5cdHJldHVybiBjaGFyYXQodmFsdWUsIDApIF4gNDUgPyAoKCgoKCgobGVuZ3RoIDw8IDIpIF4gY2hhcmF0KHZhbHVlLCAwKSkgPDwgMikgXiBjaGFyYXQodmFsdWUsIDEpKSA8PCAyKSBeIGNoYXJhdCh2YWx1ZSwgMikpIDw8IDIpIF4gY2hhcmF0KHZhbHVlLCAzKSA6IDBcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyaW0gKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZS50cmltKClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7UmVnRXhwfSBwYXR0ZXJuXG4gKiBAcmV0dXJuIHtzdHJpbmc/fVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2ggKHZhbHVlLCBwYXR0ZXJuKSB7XG5cdHJldHVybiAodmFsdWUgPSBwYXR0ZXJuLmV4ZWModmFsdWUpKSA/IHZhbHVlWzBdIDogdmFsdWVcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7KHN0cmluZ3xSZWdFeHApfSBwYXR0ZXJuXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVwbGFjZW1lbnRcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2UgKHZhbHVlLCBwYXR0ZXJuLCByZXBsYWNlbWVudCkge1xuXHRyZXR1cm4gdmFsdWUucmVwbGFjZShwYXR0ZXJuLCByZXBsYWNlbWVudClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzZWFyY2hcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluZGV4b2YgKHZhbHVlLCBzZWFyY2gpIHtcblx0cmV0dXJuIHZhbHVlLmluZGV4T2Yoc2VhcmNoKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGFyYXQgKHZhbHVlLCBpbmRleCkge1xuXHRyZXR1cm4gdmFsdWUuY2hhckNvZGVBdChpbmRleCkgfCAwXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcn0gYmVnaW5cbiAqIEBwYXJhbSB7bnVtYmVyfSBlbmRcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1YnN0ciAodmFsdWUsIGJlZ2luLCBlbmQpIHtcblx0cmV0dXJuIHZhbHVlLnNsaWNlKGJlZ2luLCBlbmQpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJsZW4gKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZS5sZW5ndGhcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2FueVtdfSB2YWx1ZVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2l6ZW9mICh2YWx1ZSkge1xuXHRyZXR1cm4gdmFsdWUubGVuZ3RoXG59XG5cbi8qKlxuICogQHBhcmFtIHthbnl9IHZhbHVlXG4gKiBAcGFyYW0ge2FueVtdfSBhcnJheVxuICogQHJldHVybiB7YW55fVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kICh2YWx1ZSwgYXJyYXkpIHtcblx0cmV0dXJuIGFycmF5LnB1c2godmFsdWUpLCB2YWx1ZVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nW119IGFycmF5XG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tYmluZSAoYXJyYXksIGNhbGxiYWNrKSB7XG5cdHJldHVybiBhcnJheS5tYXAoY2FsbGJhY2spLmpvaW4oJycpXG59XG4iLCAiaW1wb3J0IHtmcm9tLCB0cmltLCBjaGFyYXQsIHN0cmxlbiwgc3Vic3RyLCBhcHBlbmQsIGFzc2lnbn0gZnJvbSAnLi9VdGlsaXR5LmpzJ1xuXG5leHBvcnQgdmFyIGxpbmUgPSAxXG5leHBvcnQgdmFyIGNvbHVtbiA9IDFcbmV4cG9ydCB2YXIgbGVuZ3RoID0gMFxuZXhwb3J0IHZhciBwb3NpdGlvbiA9IDBcbmV4cG9ydCB2YXIgY2hhcmFjdGVyID0gMFxuZXhwb3J0IHZhciBjaGFyYWN0ZXJzID0gJydcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7b2JqZWN0IHwgbnVsbH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3QgfCBudWxsfSBwYXJlbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge3N0cmluZ1tdIHwgc3RyaW5nfSBwcm9wc1xuICogQHBhcmFtIHtvYmplY3RbXSB8IHN0cmluZ30gY2hpbGRyZW5cbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vZGUgKHZhbHVlLCByb290LCBwYXJlbnQsIHR5cGUsIHByb3BzLCBjaGlsZHJlbiwgbGVuZ3RoKSB7XG5cdHJldHVybiB7dmFsdWU6IHZhbHVlLCByb290OiByb290LCBwYXJlbnQ6IHBhcmVudCwgdHlwZTogdHlwZSwgcHJvcHM6IHByb3BzLCBjaGlsZHJlbjogY2hpbGRyZW4sIGxpbmU6IGxpbmUsIGNvbHVtbjogY29sdW1uLCBsZW5ndGg6IGxlbmd0aCwgcmV0dXJuOiAnJ31cbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3R9IHByb3BzXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb3B5IChyb290LCBwcm9wcykge1xuXHRyZXR1cm4gYXNzaWduKG5vZGUoJycsIG51bGwsIG51bGwsICcnLCBudWxsLCBudWxsLCAwKSwgcm9vdCwge2xlbmd0aDogLXJvb3QubGVuZ3RofSwgcHJvcHMpXG59XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hhciAoKSB7XG5cdHJldHVybiBjaGFyYWN0ZXJcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmV2ICgpIHtcblx0Y2hhcmFjdGVyID0gcG9zaXRpb24gPiAwID8gY2hhcmF0KGNoYXJhY3RlcnMsIC0tcG9zaXRpb24pIDogMFxuXG5cdGlmIChjb2x1bW4tLSwgY2hhcmFjdGVyID09PSAxMClcblx0XHRjb2x1bW4gPSAxLCBsaW5lLS1cblxuXHRyZXR1cm4gY2hhcmFjdGVyXG59XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gbmV4dCAoKSB7XG5cdGNoYXJhY3RlciA9IHBvc2l0aW9uIDwgbGVuZ3RoID8gY2hhcmF0KGNoYXJhY3RlcnMsIHBvc2l0aW9uKyspIDogMFxuXG5cdGlmIChjb2x1bW4rKywgY2hhcmFjdGVyID09PSAxMClcblx0XHRjb2x1bW4gPSAxLCBsaW5lKytcblxuXHRyZXR1cm4gY2hhcmFjdGVyXG59XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGVlayAoKSB7XG5cdHJldHVybiBjaGFyYXQoY2hhcmFjdGVycywgcG9zaXRpb24pXG59XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FyZXQgKCkge1xuXHRyZXR1cm4gcG9zaXRpb25cbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gYmVnaW5cbiAqIEBwYXJhbSB7bnVtYmVyfSBlbmRcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNsaWNlIChiZWdpbiwgZW5kKSB7XG5cdHJldHVybiBzdWJzdHIoY2hhcmFjdGVycywgYmVnaW4sIGVuZClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9rZW4gKHR5cGUpIHtcblx0c3dpdGNoICh0eXBlKSB7XG5cdFx0Ly8gXFwwIFxcdCBcXG4gXFxyIFxccyB3aGl0ZXNwYWNlIHRva2VuXG5cdFx0Y2FzZSAwOiBjYXNlIDk6IGNhc2UgMTA6IGNhc2UgMTM6IGNhc2UgMzI6XG5cdFx0XHRyZXR1cm4gNVxuXHRcdC8vICEgKyAsIC8gPiBAIH4gaXNvbGF0ZSB0b2tlblxuXHRcdGNhc2UgMzM6IGNhc2UgNDM6IGNhc2UgNDQ6IGNhc2UgNDc6IGNhc2UgNjI6IGNhc2UgNjQ6IGNhc2UgMTI2OlxuXHRcdC8vIDsgeyB9IGJyZWFrcG9pbnQgdG9rZW5cblx0XHRjYXNlIDU5OiBjYXNlIDEyMzogY2FzZSAxMjU6XG5cdFx0XHRyZXR1cm4gNFxuXHRcdC8vIDogYWNjb21wYW5pZWQgdG9rZW5cblx0XHRjYXNlIDU4OlxuXHRcdFx0cmV0dXJuIDNcblx0XHQvLyBcIiAnICggWyBvcGVuaW5nIGRlbGltaXQgdG9rZW5cblx0XHRjYXNlIDM0OiBjYXNlIDM5OiBjYXNlIDQwOiBjYXNlIDkxOlxuXHRcdFx0cmV0dXJuIDJcblx0XHQvLyApIF0gY2xvc2luZyBkZWxpbWl0IHRva2VuXG5cdFx0Y2FzZSA0MTogY2FzZSA5Mzpcblx0XHRcdHJldHVybiAxXG5cdH1cblxuXHRyZXR1cm4gMFxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7YW55W119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhbGxvYyAodmFsdWUpIHtcblx0cmV0dXJuIGxpbmUgPSBjb2x1bW4gPSAxLCBsZW5ndGggPSBzdHJsZW4oY2hhcmFjdGVycyA9IHZhbHVlKSwgcG9zaXRpb24gPSAwLCBbXVxufVxuXG4vKipcbiAqIEBwYXJhbSB7YW55fSB2YWx1ZVxuICogQHJldHVybiB7YW55fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVhbGxvYyAodmFsdWUpIHtcblx0cmV0dXJuIGNoYXJhY3RlcnMgPSAnJywgdmFsdWVcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVsaW1pdCAodHlwZSkge1xuXHRyZXR1cm4gdHJpbShzbGljZShwb3NpdGlvbiAtIDEsIGRlbGltaXRlcih0eXBlID09PSA5MSA/IHR5cGUgKyAyIDogdHlwZSA9PT0gNDAgPyB0eXBlICsgMSA6IHR5cGUpKSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge3N0cmluZ1tdfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9rZW5pemUgKHZhbHVlKSB7XG5cdHJldHVybiBkZWFsbG9jKHRva2VuaXplcihhbGxvYyh2YWx1ZSkpKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aGl0ZXNwYWNlICh0eXBlKSB7XG5cdHdoaWxlIChjaGFyYWN0ZXIgPSBwZWVrKCkpXG5cdFx0aWYgKGNoYXJhY3RlciA8IDMzKVxuXHRcdFx0bmV4dCgpXG5cdFx0ZWxzZVxuXHRcdFx0YnJlYWtcblxuXHRyZXR1cm4gdG9rZW4odHlwZSkgPiAyIHx8IHRva2VuKGNoYXJhY3RlcikgPiAzID8gJycgOiAnICdcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBjaGlsZHJlblxuICogQHJldHVybiB7c3RyaW5nW119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2tlbml6ZXIgKGNoaWxkcmVuKSB7XG5cdHdoaWxlIChuZXh0KCkpXG5cdFx0c3dpdGNoICh0b2tlbihjaGFyYWN0ZXIpKSB7XG5cdFx0XHRjYXNlIDA6IGFwcGVuZChpZGVudGlmaWVyKHBvc2l0aW9uIC0gMSksIGNoaWxkcmVuKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Y2FzZSAyOiBhcHBlbmQoZGVsaW1pdChjaGFyYWN0ZXIpLCBjaGlsZHJlbilcblx0XHRcdFx0YnJlYWtcblx0XHRcdGRlZmF1bHQ6IGFwcGVuZChmcm9tKGNoYXJhY3RlciksIGNoaWxkcmVuKVxuXHRcdH1cblxuXHRyZXR1cm4gY2hpbGRyZW5cbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb3VudFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBpbmcgKGluZGV4LCBjb3VudCkge1xuXHR3aGlsZSAoLS1jb3VudCAmJiBuZXh0KCkpXG5cdFx0Ly8gbm90IDAtOSBBLUYgYS1mXG5cdFx0aWYgKGNoYXJhY3RlciA8IDQ4IHx8IGNoYXJhY3RlciA+IDEwMiB8fCAoY2hhcmFjdGVyID4gNTcgJiYgY2hhcmFjdGVyIDwgNjUpIHx8IChjaGFyYWN0ZXIgPiA3MCAmJiBjaGFyYWN0ZXIgPCA5NykpXG5cdFx0XHRicmVha1xuXG5cdHJldHVybiBzbGljZShpbmRleCwgY2FyZXQoKSArIChjb3VudCA8IDYgJiYgcGVlaygpID09IDMyICYmIG5leHQoKSA9PSAzMikpXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHR5cGVcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlbGltaXRlciAodHlwZSkge1xuXHR3aGlsZSAobmV4dCgpKVxuXHRcdHN3aXRjaCAoY2hhcmFjdGVyKSB7XG5cdFx0XHQvLyBdICkgXCIgJ1xuXHRcdFx0Y2FzZSB0eXBlOlxuXHRcdFx0XHRyZXR1cm4gcG9zaXRpb25cblx0XHRcdC8vIFwiICdcblx0XHRcdGNhc2UgMzQ6IGNhc2UgMzk6XG5cdFx0XHRcdGlmICh0eXBlICE9PSAzNCAmJiB0eXBlICE9PSAzOSlcblx0XHRcdFx0XHRkZWxpbWl0ZXIoY2hhcmFjdGVyKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8gKFxuXHRcdFx0Y2FzZSA0MDpcblx0XHRcdFx0aWYgKHR5cGUgPT09IDQxKVxuXHRcdFx0XHRcdGRlbGltaXRlcih0eXBlKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8gXFxcblx0XHRcdGNhc2UgOTI6XG5cdFx0XHRcdG5leHQoKVxuXHRcdFx0XHRicmVha1xuXHRcdH1cblxuXHRyZXR1cm4gcG9zaXRpb25cbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZVxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21tZW50ZXIgKHR5cGUsIGluZGV4KSB7XG5cdHdoaWxlIChuZXh0KCkpXG5cdFx0Ly8gLy9cblx0XHRpZiAodHlwZSArIGNoYXJhY3RlciA9PT0gNDcgKyAxMClcblx0XHRcdGJyZWFrXG5cdFx0Ly8gLypcblx0XHRlbHNlIGlmICh0eXBlICsgY2hhcmFjdGVyID09PSA0MiArIDQyICYmIHBlZWsoKSA9PT0gNDcpXG5cdFx0XHRicmVha1xuXG5cdHJldHVybiAnLyonICsgc2xpY2UoaW5kZXgsIHBvc2l0aW9uIC0gMSkgKyAnKicgKyBmcm9tKHR5cGUgPT09IDQ3ID8gdHlwZSA6IG5leHQoKSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aWZpZXIgKGluZGV4KSB7XG5cdHdoaWxlICghdG9rZW4ocGVlaygpKSlcblx0XHRuZXh0KClcblxuXHRyZXR1cm4gc2xpY2UoaW5kZXgsIHBvc2l0aW9uKVxufVxuIiwgImltcG9ydCB7Q09NTUVOVCwgUlVMRVNFVCwgREVDTEFSQVRJT059IGZyb20gJy4vRW51bS5qcydcbmltcG9ydCB7YWJzLCBjaGFyYXQsIHRyaW0sIGZyb20sIHNpemVvZiwgc3RybGVuLCBzdWJzdHIsIGFwcGVuZCwgcmVwbGFjZSwgaW5kZXhvZn0gZnJvbSAnLi9VdGlsaXR5LmpzJ1xuaW1wb3J0IHtub2RlLCBjaGFyLCBwcmV2LCBuZXh0LCBwZWVrLCBjYXJldCwgYWxsb2MsIGRlYWxsb2MsIGRlbGltaXQsIHdoaXRlc3BhY2UsIGVzY2FwaW5nLCBpZGVudGlmaWVyLCBjb21tZW50ZXJ9IGZyb20gJy4vVG9rZW5pemVyLmpzJ1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7b2JqZWN0W119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21waWxlICh2YWx1ZSkge1xuXHRyZXR1cm4gZGVhbGxvYyhwYXJzZSgnJywgbnVsbCwgbnVsbCwgbnVsbCwgWycnXSwgdmFsdWUgPSBhbGxvYyh2YWx1ZSksIDAsIFswXSwgdmFsdWUpKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtvYmplY3R9IHJvb3RcbiAqIEBwYXJhbSB7b2JqZWN0P30gcGFyZW50XG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBydWxlXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBydWxlc1xuICogQHBhcmFtIHtzdHJpbmdbXX0gcnVsZXNldHNcbiAqIEBwYXJhbSB7bnVtYmVyW119IHBzZXVkb1xuICogQHBhcmFtIHtudW1iZXJbXX0gcG9pbnRzXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBkZWNsYXJhdGlvbnNcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlICh2YWx1ZSwgcm9vdCwgcGFyZW50LCBydWxlLCBydWxlcywgcnVsZXNldHMsIHBzZXVkbywgcG9pbnRzLCBkZWNsYXJhdGlvbnMpIHtcblx0dmFyIGluZGV4ID0gMFxuXHR2YXIgb2Zmc2V0ID0gMFxuXHR2YXIgbGVuZ3RoID0gcHNldWRvXG5cdHZhciBhdHJ1bGUgPSAwXG5cdHZhciBwcm9wZXJ0eSA9IDBcblx0dmFyIHByZXZpb3VzID0gMFxuXHR2YXIgdmFyaWFibGUgPSAxXG5cdHZhciBzY2FubmluZyA9IDFcblx0dmFyIGFtcGVyc2FuZCA9IDFcblx0dmFyIGNoYXJhY3RlciA9IDBcblx0dmFyIHR5cGUgPSAnJ1xuXHR2YXIgcHJvcHMgPSBydWxlc1xuXHR2YXIgY2hpbGRyZW4gPSBydWxlc2V0c1xuXHR2YXIgcmVmZXJlbmNlID0gcnVsZVxuXHR2YXIgY2hhcmFjdGVycyA9IHR5cGVcblxuXHR3aGlsZSAoc2Nhbm5pbmcpXG5cdFx0c3dpdGNoIChwcmV2aW91cyA9IGNoYXJhY3RlciwgY2hhcmFjdGVyID0gbmV4dCgpKSB7XG5cdFx0XHQvLyAoXG5cdFx0XHRjYXNlIDQwOlxuXHRcdFx0XHRpZiAocHJldmlvdXMgIT0gMTA4ICYmIGNoYXJhdChjaGFyYWN0ZXJzLCBsZW5ndGggLSAxKSA9PSA1OCkge1xuXHRcdFx0XHRcdGlmIChpbmRleG9mKGNoYXJhY3RlcnMgKz0gcmVwbGFjZShkZWxpbWl0KGNoYXJhY3RlciksICcmJywgJyZcXGYnKSwgJyZcXGYnKSAhPSAtMSlcblx0XHRcdFx0XHRcdGFtcGVyc2FuZCA9IC0xXG5cdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0fVxuXHRcdFx0Ly8gXCIgJyBbXG5cdFx0XHRjYXNlIDM0OiBjYXNlIDM5OiBjYXNlIDkxOlxuXHRcdFx0XHRjaGFyYWN0ZXJzICs9IGRlbGltaXQoY2hhcmFjdGVyKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8gXFx0IFxcbiBcXHIgXFxzXG5cdFx0XHRjYXNlIDk6IGNhc2UgMTA6IGNhc2UgMTM6IGNhc2UgMzI6XG5cdFx0XHRcdGNoYXJhY3RlcnMgKz0gd2hpdGVzcGFjZShwcmV2aW91cylcblx0XHRcdFx0YnJlYWtcblx0XHRcdC8vIFxcXG5cdFx0XHRjYXNlIDkyOlxuXHRcdFx0XHRjaGFyYWN0ZXJzICs9IGVzY2FwaW5nKGNhcmV0KCkgLSAxLCA3KVxuXHRcdFx0XHRjb250aW51ZVxuXHRcdFx0Ly8gL1xuXHRcdFx0Y2FzZSA0Nzpcblx0XHRcdFx0c3dpdGNoIChwZWVrKCkpIHtcblx0XHRcdFx0XHRjYXNlIDQyOiBjYXNlIDQ3OlxuXHRcdFx0XHRcdFx0YXBwZW5kKGNvbW1lbnQoY29tbWVudGVyKG5leHQoKSwgY2FyZXQoKSksIHJvb3QsIHBhcmVudCksIGRlY2xhcmF0aW9ucylcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdGNoYXJhY3RlcnMgKz0gJy8nXG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWtcblx0XHRcdC8vIHtcblx0XHRcdGNhc2UgMTIzICogdmFyaWFibGU6XG5cdFx0XHRcdHBvaW50c1tpbmRleCsrXSA9IHN0cmxlbihjaGFyYWN0ZXJzKSAqIGFtcGVyc2FuZFxuXHRcdFx0Ly8gfSA7IFxcMFxuXHRcdFx0Y2FzZSAxMjUgKiB2YXJpYWJsZTogY2FzZSA1OTogY2FzZSAwOlxuXHRcdFx0XHRzd2l0Y2ggKGNoYXJhY3Rlcikge1xuXHRcdFx0XHRcdC8vIFxcMCB9XG5cdFx0XHRcdFx0Y2FzZSAwOiBjYXNlIDEyNTogc2Nhbm5pbmcgPSAwXG5cdFx0XHRcdFx0Ly8gO1xuXHRcdFx0XHRcdGNhc2UgNTkgKyBvZmZzZXQ6IGlmIChhbXBlcnNhbmQgPT0gLTEpIGNoYXJhY3RlcnMgPSByZXBsYWNlKGNoYXJhY3RlcnMsIC9cXGYvZywgJycpXG5cdFx0XHRcdFx0XHRpZiAocHJvcGVydHkgPiAwICYmIChzdHJsZW4oY2hhcmFjdGVycykgLSBsZW5ndGgpKVxuXHRcdFx0XHRcdFx0XHRhcHBlbmQocHJvcGVydHkgPiAzMiA/IGRlY2xhcmF0aW9uKGNoYXJhY3RlcnMgKyAnOycsIHJ1bGUsIHBhcmVudCwgbGVuZ3RoIC0gMSkgOiBkZWNsYXJhdGlvbihyZXBsYWNlKGNoYXJhY3RlcnMsICcgJywgJycpICsgJzsnLCBydWxlLCBwYXJlbnQsIGxlbmd0aCAtIDIpLCBkZWNsYXJhdGlvbnMpXG5cdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdC8vIEAgO1xuXHRcdFx0XHRcdGNhc2UgNTk6IGNoYXJhY3RlcnMgKz0gJzsnXG5cdFx0XHRcdFx0Ly8geyBydWxlL2F0LXJ1bGVcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0YXBwZW5kKHJlZmVyZW5jZSA9IHJ1bGVzZXQoY2hhcmFjdGVycywgcm9vdCwgcGFyZW50LCBpbmRleCwgb2Zmc2V0LCBydWxlcywgcG9pbnRzLCB0eXBlLCBwcm9wcyA9IFtdLCBjaGlsZHJlbiA9IFtdLCBsZW5ndGgpLCBydWxlc2V0cylcblxuXHRcdFx0XHRcdFx0aWYgKGNoYXJhY3RlciA9PT0gMTIzKVxuXHRcdFx0XHRcdFx0XHRpZiAob2Zmc2V0ID09PSAwKVxuXHRcdFx0XHRcdFx0XHRcdHBhcnNlKGNoYXJhY3RlcnMsIHJvb3QsIHJlZmVyZW5jZSwgcmVmZXJlbmNlLCBwcm9wcywgcnVsZXNldHMsIGxlbmd0aCwgcG9pbnRzLCBjaGlsZHJlbilcblx0XHRcdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0XHRcdHN3aXRjaCAoYXRydWxlID09PSA5OSAmJiBjaGFyYXQoY2hhcmFjdGVycywgMykgPT09IDExMCA/IDEwMCA6IGF0cnVsZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gZCBsIG0gc1xuXHRcdFx0XHRcdFx0XHRcdFx0Y2FzZSAxMDA6IGNhc2UgMTA4OiBjYXNlIDEwOTogY2FzZSAxMTU6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHBhcnNlKHZhbHVlLCByZWZlcmVuY2UsIHJlZmVyZW5jZSwgcnVsZSAmJiBhcHBlbmQocnVsZXNldCh2YWx1ZSwgcmVmZXJlbmNlLCByZWZlcmVuY2UsIDAsIDAsIHJ1bGVzLCBwb2ludHMsIHR5cGUsIHJ1bGVzLCBwcm9wcyA9IFtdLCBsZW5ndGgpLCBjaGlsZHJlbiksIHJ1bGVzLCBjaGlsZHJlbiwgbGVuZ3RoLCBwb2ludHMsIHJ1bGUgPyBwcm9wcyA6IGNoaWxkcmVuKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0XHRcdFx0cGFyc2UoY2hhcmFjdGVycywgcmVmZXJlbmNlLCByZWZlcmVuY2UsIHJlZmVyZW5jZSwgWycnXSwgY2hpbGRyZW4sIDAsIHBvaW50cywgY2hpbGRyZW4pXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aW5kZXggPSBvZmZzZXQgPSBwcm9wZXJ0eSA9IDAsIHZhcmlhYmxlID0gYW1wZXJzYW5kID0gMSwgdHlwZSA9IGNoYXJhY3RlcnMgPSAnJywgbGVuZ3RoID0gcHNldWRvXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHQvLyA6XG5cdFx0XHRjYXNlIDU4OlxuXHRcdFx0XHRsZW5ndGggPSAxICsgc3RybGVuKGNoYXJhY3RlcnMpLCBwcm9wZXJ0eSA9IHByZXZpb3VzXG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRpZiAodmFyaWFibGUgPCAxKVxuXHRcdFx0XHRcdGlmIChjaGFyYWN0ZXIgPT0gMTIzKVxuXHRcdFx0XHRcdFx0LS12YXJpYWJsZVxuXHRcdFx0XHRcdGVsc2UgaWYgKGNoYXJhY3RlciA9PSAxMjUgJiYgdmFyaWFibGUrKyA9PSAwICYmIHByZXYoKSA9PSAxMjUpXG5cdFx0XHRcdFx0XHRjb250aW51ZVxuXG5cdFx0XHRcdHN3aXRjaCAoY2hhcmFjdGVycyArPSBmcm9tKGNoYXJhY3RlciksIGNoYXJhY3RlciAqIHZhcmlhYmxlKSB7XG5cdFx0XHRcdFx0Ly8gJlxuXHRcdFx0XHRcdGNhc2UgMzg6XG5cdFx0XHRcdFx0XHRhbXBlcnNhbmQgPSBvZmZzZXQgPiAwID8gMSA6IChjaGFyYWN0ZXJzICs9ICdcXGYnLCAtMSlcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0Ly8gLFxuXHRcdFx0XHRcdGNhc2UgNDQ6XG5cdFx0XHRcdFx0XHRwb2ludHNbaW5kZXgrK10gPSAoc3RybGVuKGNoYXJhY3RlcnMpIC0gMSkgKiBhbXBlcnNhbmQsIGFtcGVyc2FuZCA9IDFcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0Ly8gQFxuXHRcdFx0XHRcdGNhc2UgNjQ6XG5cdFx0XHRcdFx0XHQvLyAtXG5cdFx0XHRcdFx0XHRpZiAocGVlaygpID09PSA0NSlcblx0XHRcdFx0XHRcdFx0Y2hhcmFjdGVycyArPSBkZWxpbWl0KG5leHQoKSlcblxuXHRcdFx0XHRcdFx0YXRydWxlID0gcGVlaygpLCBvZmZzZXQgPSBsZW5ndGggPSBzdHJsZW4odHlwZSA9IGNoYXJhY3RlcnMgKz0gaWRlbnRpZmllcihjYXJldCgpKSksIGNoYXJhY3RlcisrXG5cdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdC8vIC1cblx0XHRcdFx0XHRjYXNlIDQ1OlxuXHRcdFx0XHRcdFx0aWYgKHByZXZpb3VzID09PSA0NSAmJiBzdHJsZW4oY2hhcmFjdGVycykgPT0gMilcblx0XHRcdFx0XHRcdFx0dmFyaWFibGUgPSAwXG5cdFx0XHRcdH1cblx0XHR9XG5cblx0cmV0dXJuIHJ1bGVzZXRzXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge29iamVjdH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3Q/fSBwYXJlbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldFxuICogQHBhcmFtIHtzdHJpbmdbXX0gcnVsZXNcbiAqIEBwYXJhbSB7bnVtYmVyW119IHBvaW50c1xuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7c3RyaW5nW119IHByb3BzXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBjaGlsZHJlblxuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aFxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gcnVsZXNldCAodmFsdWUsIHJvb3QsIHBhcmVudCwgaW5kZXgsIG9mZnNldCwgcnVsZXMsIHBvaW50cywgdHlwZSwgcHJvcHMsIGNoaWxkcmVuLCBsZW5ndGgpIHtcblx0dmFyIHBvc3QgPSBvZmZzZXQgLSAxXG5cdHZhciBydWxlID0gb2Zmc2V0ID09PSAwID8gcnVsZXMgOiBbJyddXG5cdHZhciBzaXplID0gc2l6ZW9mKHJ1bGUpXG5cblx0Zm9yICh2YXIgaSA9IDAsIGogPSAwLCBrID0gMDsgaSA8IGluZGV4OyArK2kpXG5cdFx0Zm9yICh2YXIgeCA9IDAsIHkgPSBzdWJzdHIodmFsdWUsIHBvc3QgKyAxLCBwb3N0ID0gYWJzKGogPSBwb2ludHNbaV0pKSwgeiA9IHZhbHVlOyB4IDwgc2l6ZTsgKyt4KVxuXHRcdFx0aWYgKHogPSB0cmltKGogPiAwID8gcnVsZVt4XSArICcgJyArIHkgOiByZXBsYWNlKHksIC8mXFxmL2csIHJ1bGVbeF0pKSlcblx0XHRcdFx0cHJvcHNbaysrXSA9IHpcblxuXHRyZXR1cm4gbm9kZSh2YWx1ZSwgcm9vdCwgcGFyZW50LCBvZmZzZXQgPT09IDAgPyBSVUxFU0VUIDogdHlwZSwgcHJvcHMsIGNoaWxkcmVuLCBsZW5ndGgpXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcGFyYW0ge29iamVjdH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3Q/fSBwYXJlbnRcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbW1lbnQgKHZhbHVlLCByb290LCBwYXJlbnQpIHtcblx0cmV0dXJuIG5vZGUodmFsdWUsIHJvb3QsIHBhcmVudCwgQ09NTUVOVCwgZnJvbShjaGFyKCkpLCBzdWJzdHIodmFsdWUsIDIsIC0yKSwgMClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7b2JqZWN0fSByb290XG4gKiBAcGFyYW0ge29iamVjdD99IHBhcmVudFxuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aFxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjbGFyYXRpb24gKHZhbHVlLCByb290LCBwYXJlbnQsIGxlbmd0aCkge1xuXHRyZXR1cm4gbm9kZSh2YWx1ZSwgcm9vdCwgcGFyZW50LCBERUNMQVJBVElPTiwgc3Vic3RyKHZhbHVlLCAwLCBsZW5ndGgpLCBzdWJzdHIodmFsdWUsIGxlbmd0aCArIDEsIC0xKSwgbGVuZ3RoKVxufVxuIiwgImltcG9ydCB7TVMsIE1PWiwgV0VCS0lUfSBmcm9tICcuL0VudW0uanMnXG5pbXBvcnQge2hhc2gsIGNoYXJhdCwgc3RybGVuLCBpbmRleG9mLCByZXBsYWNlLCBzdWJzdHIsIG1hdGNofSBmcm9tICcuL1V0aWxpdHkuanMnXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoXG4gKiBAcGFyYW0ge29iamVjdFtdfSBjaGlsZHJlblxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJlZml4ICh2YWx1ZSwgbGVuZ3RoLCBjaGlsZHJlbikge1xuXHRzd2l0Y2ggKGhhc2godmFsdWUsIGxlbmd0aCkpIHtcblx0XHQvLyBjb2xvci1hZGp1c3Rcblx0XHRjYXNlIDUxMDM6XG5cdFx0XHRyZXR1cm4gV0VCS0lUICsgJ3ByaW50LScgKyB2YWx1ZSArIHZhbHVlXG5cdFx0Ly8gYW5pbWF0aW9uLCBhbmltYXRpb24tKGRlbGF5fGRpcmVjdGlvbnxkdXJhdGlvbnxmaWxsLW1vZGV8aXRlcmF0aW9uLWNvdW50fG5hbWV8cGxheS1zdGF0ZXx0aW1pbmctZnVuY3Rpb24pXG5cdFx0Y2FzZSA1NzM3OiBjYXNlIDQyMDE6IGNhc2UgMzE3NzogY2FzZSAzNDMzOiBjYXNlIDE2NDE6IGNhc2UgNDQ1NzogY2FzZSAyOTIxOlxuXHRcdC8vIHRleHQtZGVjb3JhdGlvbiwgZmlsdGVyLCBjbGlwLXBhdGgsIGJhY2tmYWNlLXZpc2liaWxpdHksIGNvbHVtbiwgYm94LWRlY29yYXRpb24tYnJlYWtcblx0XHRjYXNlIDU1NzI6IGNhc2UgNjM1NjogY2FzZSA1ODQ0OiBjYXNlIDMxOTE6IGNhc2UgNjY0NTogY2FzZSAzMDA1OlxuXHRcdC8vIG1hc2ssIG1hc2staW1hZ2UsIG1hc2stKG1vZGV8Y2xpcHxzaXplKSwgbWFzay0ocmVwZWF0fG9yaWdpbiksIG1hc2stcG9zaXRpb24sIG1hc2stY29tcG9zaXRlLFxuXHRcdGNhc2UgNjM5MTogY2FzZSA1ODc5OiBjYXNlIDU2MjM6IGNhc2UgNjEzNTogY2FzZSA0NTk5OiBjYXNlIDQ4NTU6XG5cdFx0Ly8gYmFja2dyb3VuZC1jbGlwLCBjb2x1bW5zLCBjb2x1bW4tKGNvdW50fGZpbGx8Z2FwfHJ1bGV8cnVsZS1jb2xvcnxydWxlLXN0eWxlfHJ1bGUtd2lkdGh8c3Bhbnx3aWR0aClcblx0XHRjYXNlIDQyMTU6IGNhc2UgNjM4OTogY2FzZSA1MTA5OiBjYXNlIDUzNjU6IGNhc2UgNTYyMTogY2FzZSAzODI5OlxuXHRcdFx0cmV0dXJuIFdFQktJVCArIHZhbHVlICsgdmFsdWVcblx0XHQvLyB0YWItc2l6ZVxuXHRcdGNhc2UgNDc4OTpcblx0XHRcdHJldHVybiBNT1ogKyB2YWx1ZSArIHZhbHVlXG5cdFx0Ly8gYXBwZWFyYW5jZSwgdXNlci1zZWxlY3QsIHRyYW5zZm9ybSwgaHlwaGVucywgdGV4dC1zaXplLWFkanVzdFxuXHRcdGNhc2UgNTM0OTogY2FzZSA0MjQ2OiBjYXNlIDQ4MTA6IGNhc2UgNjk2ODogY2FzZSAyNzU2OlxuXHRcdFx0cmV0dXJuIFdFQktJVCArIHZhbHVlICsgTU9aICsgdmFsdWUgKyBNUyArIHZhbHVlICsgdmFsdWVcblx0XHQvLyB3cml0aW5nLW1vZGVcblx0XHRjYXNlIDU5MzY6XG5cdFx0XHRzd2l0Y2ggKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgMTEpKSB7XG5cdFx0XHRcdC8vIHZlcnRpY2FsLWwocilcblx0XHRcdFx0Y2FzZSAxMTQ6XG5cdFx0XHRcdFx0cmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAvW3N2aF1cXHcrLVt0YmxyXXsyfS8sICd0YicpICsgdmFsdWVcblx0XHRcdFx0Ly8gdmVydGljYWwtcihsKVxuXHRcdFx0XHRjYXNlIDEwODpcblx0XHRcdFx0XHRyZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsIC9bc3ZoXVxcdystW3RibHJdezJ9LywgJ3RiLXJsJykgKyB2YWx1ZVxuXHRcdFx0XHQvLyBob3Jpem9udGFsKC0pdGJcblx0XHRcdFx0Y2FzZSA0NTpcblx0XHRcdFx0XHRyZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsIC9bc3ZoXVxcdystW3RibHJdezJ9LywgJ2xyJykgKyB2YWx1ZVxuXHRcdFx0XHQvLyBkZWZhdWx0OiBmYWxsdGhyb3VnaCB0byBiZWxvd1xuXHRcdFx0fVxuXHRcdC8vIGZsZXgsIGZsZXgtZGlyZWN0aW9uLCBzY3JvbGwtc25hcC10eXBlLCB3cml0aW5nLW1vZGVcblx0XHRjYXNlIDY4Mjg6IGNhc2UgNDI2ODogY2FzZSAyOTAzOlxuXHRcdFx0cmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyB2YWx1ZSArIHZhbHVlXG5cdFx0Ly8gb3JkZXJcblx0XHRjYXNlIDYxNjU6XG5cdFx0XHRyZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArICdmbGV4LScgKyB2YWx1ZSArIHZhbHVlXG5cdFx0Ly8gYWxpZ24taXRlbXNcblx0XHRjYXNlIDUxODc6XG5cdFx0XHRyZXR1cm4gV0VCS0lUICsgdmFsdWUgKyByZXBsYWNlKHZhbHVlLCAvKFxcdyspLisoOlteXSspLywgV0VCS0lUICsgJ2JveC0kMSQyJyArIE1TICsgJ2ZsZXgtJDEkMicpICsgdmFsdWVcblx0XHQvLyBhbGlnbi1zZWxmXG5cdFx0Y2FzZSA1NDQzOlxuXHRcdFx0cmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyAnZmxleC1pdGVtLScgKyByZXBsYWNlKHZhbHVlLCAvZmxleC18LXNlbGYvZywgJycpICsgKCFtYXRjaCh2YWx1ZSwgL2ZsZXgtfGJhc2VsaW5lLykgPyBNUyArICdncmlkLXJvdy0nICsgcmVwbGFjZSh2YWx1ZSwgL2ZsZXgtfC1zZWxmL2csICcnKSA6ICcnKSArIHZhbHVlXG5cdFx0Ly8gYWxpZ24tY29udGVudFxuXHRcdGNhc2UgNDY3NTpcblx0XHRcdHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgJ2ZsZXgtbGluZS1wYWNrJyArIHJlcGxhY2UodmFsdWUsIC9hbGlnbi1jb250ZW50fGZsZXgtfC1zZWxmL2csICcnKSArIHZhbHVlXG5cdFx0Ly8gZmxleC1zaHJpbmtcblx0XHRjYXNlIDU1NDg6XG5cdFx0XHRyZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsICdzaHJpbmsnLCAnbmVnYXRpdmUnKSArIHZhbHVlXG5cdFx0Ly8gZmxleC1iYXNpc1xuXHRcdGNhc2UgNTI5Mjpcblx0XHRcdHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgJ2Jhc2lzJywgJ3ByZWZlcnJlZC1zaXplJykgKyB2YWx1ZVxuXHRcdC8vIGZsZXgtZ3Jvd1xuXHRcdGNhc2UgNjA2MDpcblx0XHRcdHJldHVybiBXRUJLSVQgKyAnYm94LScgKyByZXBsYWNlKHZhbHVlLCAnLWdyb3cnLCAnJykgKyBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgJ2dyb3cnLCAncG9zaXRpdmUnKSArIHZhbHVlXG5cdFx0Ly8gdHJhbnNpdGlvblxuXHRcdGNhc2UgNDU1NDpcblx0XHRcdHJldHVybiBXRUJLSVQgKyByZXBsYWNlKHZhbHVlLCAvKFteLV0pKHRyYW5zZm9ybSkvZywgJyQxJyArIFdFQktJVCArICckMicpICsgdmFsdWVcblx0XHQvLyBjdXJzb3Jcblx0XHRjYXNlIDYxODc6XG5cdFx0XHRyZXR1cm4gcmVwbGFjZShyZXBsYWNlKHJlcGxhY2UodmFsdWUsIC8oem9vbS18Z3JhYikvLCBXRUJLSVQgKyAnJDEnKSwgLyhpbWFnZS1zZXQpLywgV0VCS0lUICsgJyQxJyksIHZhbHVlLCAnJykgKyB2YWx1ZVxuXHRcdC8vIGJhY2tncm91bmQsIGJhY2tncm91bmQtaW1hZ2Vcblx0XHRjYXNlIDU0OTU6IGNhc2UgMzk1OTpcblx0XHRcdHJldHVybiByZXBsYWNlKHZhbHVlLCAvKGltYWdlLXNldFxcKFteXSopLywgV0VCS0lUICsgJyQxJyArICckYCQxJylcblx0XHQvLyBqdXN0aWZ5LWNvbnRlbnRcblx0XHRjYXNlIDQ5Njg6XG5cdFx0XHRyZXR1cm4gcmVwbGFjZShyZXBsYWNlKHZhbHVlLCAvKC4rOikoZmxleC0pPyguKikvLCBXRUJLSVQgKyAnYm94LXBhY2s6JDMnICsgTVMgKyAnZmxleC1wYWNrOiQzJyksIC9zListYlteO10rLywgJ2p1c3RpZnknKSArIFdFQktJVCArIHZhbHVlICsgdmFsdWVcblx0XHQvLyBqdXN0aWZ5LXNlbGZcblx0XHRjYXNlIDQyMDA6XG5cdFx0XHRpZiAoIW1hdGNoKHZhbHVlLCAvZmxleC18YmFzZWxpbmUvKSkgcmV0dXJuIE1TICsgJ2dyaWQtY29sdW1uLWFsaWduJyArIHN1YnN0cih2YWx1ZSwgbGVuZ3RoKSArIHZhbHVlXG5cdFx0XHRicmVha1xuXHRcdC8vIGdyaWQtdGVtcGxhdGUtKGNvbHVtbnN8cm93cylcblx0XHRjYXNlIDI1OTI6IGNhc2UgMzM2MDpcblx0XHRcdHJldHVybiBNUyArIHJlcGxhY2UodmFsdWUsICd0ZW1wbGF0ZS0nLCAnJykgKyB2YWx1ZVxuXHRcdC8vIGdyaWQtKHJvd3xjb2x1bW4pLXN0YXJ0XG5cdFx0Y2FzZSA0Mzg0OiBjYXNlIDM2MTY6XG5cdFx0XHRpZiAoY2hpbGRyZW4gJiYgY2hpbGRyZW4uc29tZShmdW5jdGlvbiAoZWxlbWVudCwgaW5kZXgpIHsgcmV0dXJuIGxlbmd0aCA9IGluZGV4LCBtYXRjaChlbGVtZW50LnByb3BzLCAvZ3JpZC1cXHcrLWVuZC8pIH0pKSB7XG5cdFx0XHRcdHJldHVybiB+aW5kZXhvZih2YWx1ZSArIChjaGlsZHJlbiA9IGNoaWxkcmVuW2xlbmd0aF0udmFsdWUpLCAnc3BhbicpID8gdmFsdWUgOiAoTVMgKyByZXBsYWNlKHZhbHVlLCAnLXN0YXJ0JywgJycpICsgdmFsdWUgKyBNUyArICdncmlkLXJvdy1zcGFuOicgKyAofmluZGV4b2YoY2hpbGRyZW4sICdzcGFuJykgPyBtYXRjaChjaGlsZHJlbiwgL1xcZCsvKSA6ICttYXRjaChjaGlsZHJlbiwgL1xcZCsvKSAtICttYXRjaCh2YWx1ZSwgL1xcZCsvKSkgKyAnOycpXG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gTVMgKyByZXBsYWNlKHZhbHVlLCAnLXN0YXJ0JywgJycpICsgdmFsdWVcblx0XHQvLyBncmlkLShyb3d8Y29sdW1uKS1lbmRcblx0XHRjYXNlIDQ4OTY6IGNhc2UgNDEyODpcblx0XHRcdHJldHVybiAoY2hpbGRyZW4gJiYgY2hpbGRyZW4uc29tZShmdW5jdGlvbiAoZWxlbWVudCkgeyByZXR1cm4gbWF0Y2goZWxlbWVudC5wcm9wcywgL2dyaWQtXFx3Ky1zdGFydC8pIH0pKSA/IHZhbHVlIDogTVMgKyByZXBsYWNlKHJlcGxhY2UodmFsdWUsICctZW5kJywgJy1zcGFuJyksICdzcGFuICcsICcnKSArIHZhbHVlXG5cdFx0Ly8gKG1hcmdpbnxwYWRkaW5nKS1pbmxpbmUtKHN0YXJ0fGVuZClcblx0XHRjYXNlIDQwOTU6IGNhc2UgMzU4MzogY2FzZSA0MDY4OiBjYXNlIDI1MzI6XG5cdFx0XHRyZXR1cm4gcmVwbGFjZSh2YWx1ZSwgLyguKyktaW5saW5lKC4rKS8sIFdFQktJVCArICckMSQyJykgKyB2YWx1ZVxuXHRcdC8vIChtaW58bWF4KT8od2lkdGh8aGVpZ2h0fGlubGluZS1zaXplfGJsb2NrLXNpemUpXG5cdFx0Y2FzZSA4MTE2OiBjYXNlIDcwNTk6IGNhc2UgNTc1MzogY2FzZSA1NTM1OlxuXHRcdGNhc2UgNTQ0NTogY2FzZSA1NzAxOiBjYXNlIDQ5MzM6IGNhc2UgNDY3Nzpcblx0XHRjYXNlIDU1MzM6IGNhc2UgNTc4OTogY2FzZSA1MDIxOiBjYXNlIDQ3NjU6XG5cdFx0XHQvLyBzdHJldGNoLCBtYXgtY29udGVudCwgbWluLWNvbnRlbnQsIGZpbGwtYXZhaWxhYmxlXG5cdFx0XHRpZiAoc3RybGVuKHZhbHVlKSAtIDEgLSBsZW5ndGggPiA2KVxuXHRcdFx0XHRzd2l0Y2ggKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgMSkpIHtcblx0XHRcdFx0XHQvLyAobSlheC1jb250ZW50LCAobSlpbi1jb250ZW50XG5cdFx0XHRcdFx0Y2FzZSAxMDk6XG5cdFx0XHRcdFx0XHQvLyAtXG5cdFx0XHRcdFx0XHRpZiAoY2hhcmF0KHZhbHVlLCBsZW5ndGggKyA0KSAhPT0gNDUpXG5cdFx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0Ly8gKGYpaWxsLWF2YWlsYWJsZSwgKGYpaXQtY29udGVudFxuXHRcdFx0XHRcdGNhc2UgMTAyOlxuXHRcdFx0XHRcdFx0cmV0dXJuIHJlcGxhY2UodmFsdWUsIC8oLis6KSguKyktKFteXSspLywgJyQxJyArIFdFQktJVCArICckMi0kMycgKyAnJDEnICsgTU9aICsgKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgMykgPT0gMTA4ID8gJyQzJyA6ICckMi0kMycpKSArIHZhbHVlXG5cdFx0XHRcdFx0Ly8gKHMpdHJldGNoXG5cdFx0XHRcdFx0Y2FzZSAxMTU6XG5cdFx0XHRcdFx0XHRyZXR1cm4gfmluZGV4b2YodmFsdWUsICdzdHJldGNoJykgPyBwcmVmaXgocmVwbGFjZSh2YWx1ZSwgJ3N0cmV0Y2gnLCAnZmlsbC1hdmFpbGFibGUnKSwgbGVuZ3RoLCBjaGlsZHJlbikgKyB2YWx1ZSA6IHZhbHVlXG5cdFx0XHRcdH1cblx0XHRcdGJyZWFrXG5cdFx0Ly8gZ3JpZC0oY29sdW1ufHJvdylcblx0XHRjYXNlIDUxNTI6IGNhc2UgNTkyMDpcblx0XHRcdHJldHVybiByZXBsYWNlKHZhbHVlLCAvKC4rPyk6KFxcZCspKFxccypcXC9cXHMqKHNwYW4pP1xccyooXFxkKykpPyguKikvLCBmdW5jdGlvbiAoXywgYSwgYiwgYywgZCwgZSwgZikgeyByZXR1cm4gKE1TICsgYSArICc6JyArIGIgKyBmKSArIChjID8gKE1TICsgYSArICctc3BhbjonICsgKGQgPyBlIDogK2UgLSArYikpICsgZiA6ICcnKSArIHZhbHVlIH0pXG5cdFx0Ly8gcG9zaXRpb246IHN0aWNreVxuXHRcdGNhc2UgNDk0OTpcblx0XHRcdC8vIHN0aWNrKHkpP1xuXHRcdFx0aWYgKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgNikgPT09IDEyMSlcblx0XHRcdFx0cmV0dXJuIHJlcGxhY2UodmFsdWUsICc6JywgJzonICsgV0VCS0lUKSArIHZhbHVlXG5cdFx0XHRicmVha1xuXHRcdC8vIGRpc3BsYXk6IChmbGV4fGlubGluZS1mbGV4fGdyaWR8aW5saW5lLWdyaWQpXG5cdFx0Y2FzZSA2NDQ0OlxuXHRcdFx0c3dpdGNoIChjaGFyYXQodmFsdWUsIGNoYXJhdCh2YWx1ZSwgMTQpID09PSA0NSA/IDE4IDogMTEpKSB7XG5cdFx0XHRcdC8vIChpbmxpbmUtKT9mbGUoeClcblx0XHRcdFx0Y2FzZSAxMjA6XG5cdFx0XHRcdFx0cmV0dXJuIHJlcGxhY2UodmFsdWUsIC8oLis6KShbXjtcXHMhXSspKDt8KFxccyspPyEuKyk/LywgJyQxJyArIFdFQktJVCArIChjaGFyYXQodmFsdWUsIDE0KSA9PT0gNDUgPyAnaW5saW5lLScgOiAnJykgKyAnYm94JDMnICsgJyQxJyArIFdFQktJVCArICckMiQzJyArICckMScgKyBNUyArICckMmJveCQzJykgKyB2YWx1ZVxuXHRcdFx0XHQvLyAoaW5saW5lLSk/Z3JpKGQpXG5cdFx0XHRcdGNhc2UgMTAwOlxuXHRcdFx0XHRcdHJldHVybiByZXBsYWNlKHZhbHVlLCAnOicsICc6JyArIE1TKSArIHZhbHVlXG5cdFx0XHR9XG5cdFx0XHRicmVha1xuXHRcdC8vIHNjcm9sbC1tYXJnaW4sIHNjcm9sbC1tYXJnaW4tKHRvcHxyaWdodHxib3R0b218bGVmdClcblx0XHRjYXNlIDU3MTk6IGNhc2UgMjY0NzogY2FzZSAyMTM1OiBjYXNlIDM5Mjc6IGNhc2UgMjM5MTpcblx0XHRcdHJldHVybiByZXBsYWNlKHZhbHVlLCAnc2Nyb2xsLScsICdzY3JvbGwtc25hcC0nKSArIHZhbHVlXG5cdH1cblxuXHRyZXR1cm4gdmFsdWVcbn1cbiIsICJpbXBvcnQge0lNUE9SVCwgTEFZRVIsIENPTU1FTlQsIFJVTEVTRVQsIERFQ0xBUkFUSU9OLCBLRVlGUkFNRVN9IGZyb20gJy4vRW51bS5qcydcbmltcG9ydCB7c3RybGVuLCBzaXplb2Z9IGZyb20gJy4vVXRpbGl0eS5qcydcblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdFtdfSBjaGlsZHJlblxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZSAoY2hpbGRyZW4sIGNhbGxiYWNrKSB7XG5cdHZhciBvdXRwdXQgPSAnJ1xuXHR2YXIgbGVuZ3RoID0gc2l6ZW9mKGNoaWxkcmVuKVxuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG5cdFx0b3V0cHV0ICs9IGNhbGxiYWNrKGNoaWxkcmVuW2ldLCBpLCBjaGlsZHJlbiwgY2FsbGJhY2spIHx8ICcnXG5cblx0cmV0dXJuIG91dHB1dFxufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBlbGVtZW50XG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEBwYXJhbSB7b2JqZWN0W119IGNoaWxkcmVuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5naWZ5IChlbGVtZW50LCBpbmRleCwgY2hpbGRyZW4sIGNhbGxiYWNrKSB7XG5cdHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XG5cdFx0Y2FzZSBMQVlFUjogaWYgKGVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoKSBicmVha1xuXHRcdGNhc2UgSU1QT1JUOiBjYXNlIERFQ0xBUkFUSU9OOiByZXR1cm4gZWxlbWVudC5yZXR1cm4gPSBlbGVtZW50LnJldHVybiB8fCBlbGVtZW50LnZhbHVlXG5cdFx0Y2FzZSBDT01NRU5UOiByZXR1cm4gJydcblx0XHRjYXNlIEtFWUZSQU1FUzogcmV0dXJuIGVsZW1lbnQucmV0dXJuID0gZWxlbWVudC52YWx1ZSArICd7JyArIHNlcmlhbGl6ZShlbGVtZW50LmNoaWxkcmVuLCBjYWxsYmFjaykgKyAnfSdcblx0XHRjYXNlIFJVTEVTRVQ6IGVsZW1lbnQudmFsdWUgPSBlbGVtZW50LnByb3BzLmpvaW4oJywnKVxuXHR9XG5cblx0cmV0dXJuIHN0cmxlbihjaGlsZHJlbiA9IHNlcmlhbGl6ZShlbGVtZW50LmNoaWxkcmVuLCBjYWxsYmFjaykpID8gZWxlbWVudC5yZXR1cm4gPSBlbGVtZW50LnZhbHVlICsgJ3snICsgY2hpbGRyZW4gKyAnfScgOiAnJ1xufVxuIiwgImltcG9ydCB7TVMsIE1PWiwgV0VCS0lULCBSVUxFU0VULCBLRVlGUkFNRVMsIERFQ0xBUkFUSU9OfSBmcm9tICcuL0VudW0uanMnXG5pbXBvcnQge21hdGNoLCBjaGFyYXQsIHN1YnN0ciwgc3RybGVuLCBzaXplb2YsIHJlcGxhY2UsIGNvbWJpbmV9IGZyb20gJy4vVXRpbGl0eS5qcydcbmltcG9ydCB7Y29weSwgdG9rZW5pemV9IGZyb20gJy4vVG9rZW5pemVyLmpzJ1xuaW1wb3J0IHtzZXJpYWxpemV9IGZyb20gJy4vU2VyaWFsaXplci5qcydcbmltcG9ydCB7cHJlZml4fSBmcm9tICcuL1ByZWZpeGVyLmpzJ1xuXG4vKipcbiAqIEBwYXJhbSB7ZnVuY3Rpb25bXX0gY29sbGVjdGlvblxuICogQHJldHVybiB7ZnVuY3Rpb259XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtaWRkbGV3YXJlIChjb2xsZWN0aW9uKSB7XG5cdHZhciBsZW5ndGggPSBzaXplb2YoY29sbGVjdGlvbilcblxuXHRyZXR1cm4gZnVuY3Rpb24gKGVsZW1lbnQsIGluZGV4LCBjaGlsZHJlbiwgY2FsbGJhY2spIHtcblx0XHR2YXIgb3V0cHV0ID0gJydcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG5cdFx0XHRvdXRwdXQgKz0gY29sbGVjdGlvbltpXShlbGVtZW50LCBpbmRleCwgY2hpbGRyZW4sIGNhbGxiYWNrKSB8fCAnJ1xuXG5cdFx0cmV0dXJuIG91dHB1dFxuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm4ge2Z1bmN0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gcnVsZXNoZWV0IChjYWxsYmFjaykge1xuXHRyZXR1cm4gZnVuY3Rpb24gKGVsZW1lbnQpIHtcblx0XHRpZiAoIWVsZW1lbnQucm9vdClcblx0XHRcdGlmIChlbGVtZW50ID0gZWxlbWVudC5yZXR1cm4pXG5cdFx0XHRcdGNhbGxiYWNrKGVsZW1lbnQpXG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZWxlbWVudFxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcGFyYW0ge29iamVjdFtdfSBjaGlsZHJlblxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZWZpeGVyIChlbGVtZW50LCBpbmRleCwgY2hpbGRyZW4sIGNhbGxiYWNrKSB7XG5cdGlmIChlbGVtZW50Lmxlbmd0aCA+IC0xKVxuXHRcdGlmICghZWxlbWVudC5yZXR1cm4pXG5cdFx0XHRzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xuXHRcdFx0XHRjYXNlIERFQ0xBUkFUSU9OOiBlbGVtZW50LnJldHVybiA9IHByZWZpeChlbGVtZW50LnZhbHVlLCBlbGVtZW50Lmxlbmd0aCwgY2hpbGRyZW4pXG5cdFx0XHRcdFx0cmV0dXJuXG5cdFx0XHRcdGNhc2UgS0VZRlJBTUVTOlxuXHRcdFx0XHRcdHJldHVybiBzZXJpYWxpemUoW2NvcHkoZWxlbWVudCwge3ZhbHVlOiByZXBsYWNlKGVsZW1lbnQudmFsdWUsICdAJywgJ0AnICsgV0VCS0lUKX0pXSwgY2FsbGJhY2spXG5cdFx0XHRcdGNhc2UgUlVMRVNFVDpcblx0XHRcdFx0XHRpZiAoZWxlbWVudC5sZW5ndGgpXG5cdFx0XHRcdFx0XHRyZXR1cm4gY29tYmluZShlbGVtZW50LnByb3BzLCBmdW5jdGlvbiAodmFsdWUpIHtcblx0XHRcdFx0XHRcdFx0c3dpdGNoIChtYXRjaCh2YWx1ZSwgLyg6OnBsYWNcXHcrfDpyZWFkLVxcdyspLykpIHtcblx0XHRcdFx0XHRcdFx0XHQvLyA6cmVhZC0ob25seXx3cml0ZSlcblx0XHRcdFx0XHRcdFx0XHRjYXNlICc6cmVhZC1vbmx5JzogY2FzZSAnOnJlYWQtd3JpdGUnOlxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHNlcmlhbGl6ZShbY29weShlbGVtZW50LCB7cHJvcHM6IFtyZXBsYWNlKHZhbHVlLCAvOihyZWFkLVxcdyspLywgJzonICsgTU9aICsgJyQxJyldfSldLCBjYWxsYmFjaylcblx0XHRcdFx0XHRcdFx0XHQvLyA6cGxhY2Vob2xkZXJcblx0XHRcdFx0XHRcdFx0XHRjYXNlICc6OnBsYWNlaG9sZGVyJzpcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBzZXJpYWxpemUoW1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb3B5KGVsZW1lbnQsIHtwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHBsYWNcXHcrKS8sICc6JyArIFdFQktJVCArICdpbnB1dC0kMScpXX0pLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb3B5KGVsZW1lbnQsIHtwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHBsYWNcXHcrKS8sICc6JyArIE1PWiArICckMScpXX0pLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb3B5KGVsZW1lbnQsIHtwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHBsYWNcXHcrKS8sIE1TICsgJ2lucHV0LSQxJyldfSlcblx0XHRcdFx0XHRcdFx0XHRcdF0sIGNhbGxiYWNrKVxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0cmV0dXJuICcnXG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBlbGVtZW50XG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEBwYXJhbSB7b2JqZWN0W119IGNoaWxkcmVuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBuYW1lc3BhY2UgKGVsZW1lbnQpIHtcblx0c3dpdGNoIChlbGVtZW50LnR5cGUpIHtcblx0XHRjYXNlIFJVTEVTRVQ6XG5cdFx0XHRlbGVtZW50LnByb3BzID0gZWxlbWVudC5wcm9wcy5tYXAoZnVuY3Rpb24gKHZhbHVlKSB7XG5cdFx0XHRcdHJldHVybiBjb21iaW5lKHRva2VuaXplKHZhbHVlKSwgZnVuY3Rpb24gKHZhbHVlLCBpbmRleCwgY2hpbGRyZW4pIHtcblx0XHRcdFx0XHRzd2l0Y2ggKGNoYXJhdCh2YWx1ZSwgMCkpIHtcblx0XHRcdFx0XHRcdC8vIFxcZlxuXHRcdFx0XHRcdFx0Y2FzZSAxMjpcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHN1YnN0cih2YWx1ZSwgMSwgc3RybGVuKHZhbHVlKSlcblx0XHRcdFx0XHRcdC8vIFxcMCAoICsgPiB+XG5cdFx0XHRcdFx0XHRjYXNlIDA6IGNhc2UgNDA6IGNhc2UgNDM6IGNhc2UgNjI6IGNhc2UgMTI2OlxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdmFsdWVcblx0XHRcdFx0XHRcdC8vIDpcblx0XHRcdFx0XHRcdGNhc2UgNTg6XG5cdFx0XHRcdFx0XHRcdGlmIChjaGlsZHJlblsrK2luZGV4XSA9PT0gJ2dsb2JhbCcpXG5cdFx0XHRcdFx0XHRcdFx0Y2hpbGRyZW5baW5kZXhdID0gJycsIGNoaWxkcmVuWysraW5kZXhdID0gJ1xcZicgKyBzdWJzdHIoY2hpbGRyZW5baW5kZXhdLCBpbmRleCA9IDEsIC0xKVxuXHRcdFx0XHRcdFx0Ly8gXFxzXG5cdFx0XHRcdFx0XHRjYXNlIDMyOlxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gaW5kZXggPT09IDEgPyAnJyA6IHZhbHVlXG5cdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRzd2l0Y2ggKGluZGV4KSB7XG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSAwOiBlbGVtZW50ID0gdmFsdWVcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBzaXplb2YoY2hpbGRyZW4pID4gMSA/ICcnIDogdmFsdWVcblx0XHRcdFx0XHRcdFx0XHRjYXNlIGluZGV4ID0gc2l6ZW9mKGNoaWxkcmVuKSAtIDE6IGNhc2UgMjpcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBpbmRleCA9PT0gMiA/IHZhbHVlICsgZWxlbWVudCArIGVsZW1lbnQgOiB2YWx1ZSArIGVsZW1lbnRcblx0XHRcdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHZhbHVlXG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pXG5cdFx0XHR9KVxuXHR9XG59XG4iLCAiZXhwb3J0ICogZnJvbSAnLi9zcmMvRW51bS5qcydcbmV4cG9ydCAqIGZyb20gJy4vc3JjL1V0aWxpdHkuanMnXG5leHBvcnQgKiBmcm9tICcuL3NyYy9QYXJzZXIuanMnXG5leHBvcnQgKiBmcm9tICcuL3NyYy9QcmVmaXhlci5qcydcbmV4cG9ydCAqIGZyb20gJy4vc3JjL1Rva2VuaXplci5qcydcbmV4cG9ydCAqIGZyb20gJy4vc3JjL1NlcmlhbGl6ZXIuanMnXG5leHBvcnQgKiBmcm9tICcuL3NyYy9NaWRkbGV3YXJlLmpzJ1xuIiwgInZhciB3ZWFrTWVtb2l6ZSA9IGZ1bmN0aW9uIHdlYWtNZW1vaXplKGZ1bmMpIHtcbiAgLy8gJEZsb3dGaXhNZSBmbG93IGRvZXNuJ3QgaW5jbHVkZSBhbGwgbm9uLXByaW1pdGl2ZSB0eXBlcyBhcyBhbGxvd2VkIGZvciB3ZWFrbWFwc1xuICB2YXIgY2FjaGUgPSBuZXcgV2Vha01hcCgpO1xuICByZXR1cm4gZnVuY3Rpb24gKGFyZykge1xuICAgIGlmIChjYWNoZS5oYXMoYXJnKSkge1xuICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgcmV0dXJuIGNhY2hlLmdldChhcmcpO1xuICAgIH1cblxuICAgIHZhciByZXQgPSBmdW5jKGFyZyk7XG4gICAgY2FjaGUuc2V0KGFyZywgcmV0KTtcbiAgICByZXR1cm4gcmV0O1xuICB9O1xufTtcblxuZXhwb3J0IHsgd2Vha01lbW9pemUgYXMgZGVmYXVsdCB9O1xuIiwgImZ1bmN0aW9uIG1lbW9pemUoZm4pIHtcbiAgdmFyIGNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChhcmcpIHtcbiAgICBpZiAoY2FjaGVbYXJnXSA9PT0gdW5kZWZpbmVkKSBjYWNoZVthcmddID0gZm4oYXJnKTtcbiAgICByZXR1cm4gY2FjaGVbYXJnXTtcbiAgfTtcbn1cblxuZXhwb3J0IHsgbWVtb2l6ZSBhcyBkZWZhdWx0IH07XG4iLCAiaW1wb3J0IHsgU3R5bGVTaGVldCB9IGZyb20gJ0BlbW90aW9uL3NoZWV0JztcbmltcG9ydCB7IGRlYWxsb2MsIGFsbG9jLCBuZXh0LCB0b2tlbiwgZnJvbSwgcGVlaywgZGVsaW1pdCwgc2xpY2UsIHBvc2l0aW9uLCBSVUxFU0VULCBjb21iaW5lLCBtYXRjaCwgc2VyaWFsaXplLCBjb3B5LCByZXBsYWNlLCBXRUJLSVQsIE1PWiwgTVMsIEtFWUZSQU1FUywgREVDTEFSQVRJT04sIGhhc2gsIGNoYXJhdCwgc3RybGVuLCBpbmRleG9mLCBzdHJpbmdpZnksIENPTU1FTlQsIHJ1bGVzaGVldCwgbWlkZGxld2FyZSwgY29tcGlsZSB9IGZyb20gJ3N0eWxpcyc7XG5pbXBvcnQgJ0BlbW90aW9uL3dlYWstbWVtb2l6ZSc7XG5pbXBvcnQgJ0BlbW90aW9uL21lbW9pemUnO1xuXG52YXIgaWRlbnRpZmllcldpdGhQb2ludFRyYWNraW5nID0gZnVuY3Rpb24gaWRlbnRpZmllcldpdGhQb2ludFRyYWNraW5nKGJlZ2luLCBwb2ludHMsIGluZGV4KSB7XG4gIHZhciBwcmV2aW91cyA9IDA7XG4gIHZhciBjaGFyYWN0ZXIgPSAwO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgcHJldmlvdXMgPSBjaGFyYWN0ZXI7XG4gICAgY2hhcmFjdGVyID0gcGVlaygpOyAvLyAmXFxmXG5cbiAgICBpZiAocHJldmlvdXMgPT09IDM4ICYmIGNoYXJhY3RlciA9PT0gMTIpIHtcbiAgICAgIHBvaW50c1tpbmRleF0gPSAxO1xuICAgIH1cblxuICAgIGlmICh0b2tlbihjaGFyYWN0ZXIpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBuZXh0KCk7XG4gIH1cblxuICByZXR1cm4gc2xpY2UoYmVnaW4sIHBvc2l0aW9uKTtcbn07XG5cbnZhciB0b1J1bGVzID0gZnVuY3Rpb24gdG9SdWxlcyhwYXJzZWQsIHBvaW50cykge1xuICAvLyBwcmV0ZW5kIHdlJ3ZlIHN0YXJ0ZWQgd2l0aCBhIGNvbW1hXG4gIHZhciBpbmRleCA9IC0xO1xuICB2YXIgY2hhcmFjdGVyID0gNDQ7XG5cbiAgZG8ge1xuICAgIHN3aXRjaCAodG9rZW4oY2hhcmFjdGVyKSkge1xuICAgICAgY2FzZSAwOlxuICAgICAgICAvLyAmXFxmXG4gICAgICAgIGlmIChjaGFyYWN0ZXIgPT09IDM4ICYmIHBlZWsoKSA9PT0gMTIpIHtcbiAgICAgICAgICAvLyB0aGlzIGlzIG5vdCAxMDAlIGNvcnJlY3QsIHdlIGRvbid0IGFjY291bnQgZm9yIGxpdGVyYWwgc2VxdWVuY2VzIGhlcmUgLSBsaWtlIGZvciBleGFtcGxlIHF1b3RlZCBzdHJpbmdzXG4gICAgICAgICAgLy8gc3R5bGlzIGluc2VydHMgXFxmIGFmdGVyICYgdG8ga25vdyB3aGVuICYgd2hlcmUgaXQgc2hvdWxkIHJlcGxhY2UgdGhpcyBzZXF1ZW5jZSB3aXRoIHRoZSBjb250ZXh0IHNlbGVjdG9yXG4gICAgICAgICAgLy8gYW5kIHdoZW4gaXQgc2hvdWxkIGp1c3QgY29uY2F0ZW5hdGUgdGhlIG91dGVyIGFuZCBpbm5lciBzZWxlY3RvcnNcbiAgICAgICAgICAvLyBpdCdzIHZlcnkgdW5saWtlbHkgZm9yIHRoaXMgc2VxdWVuY2UgdG8gYWN0dWFsbHkgYXBwZWFyIGluIGEgZGlmZmVyZW50IGNvbnRleHQsIHNvIHdlIGp1c3QgbGV2ZXJhZ2UgdGhpcyBmYWN0IGhlcmVcbiAgICAgICAgICBwb2ludHNbaW5kZXhdID0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBhcnNlZFtpbmRleF0gKz0gaWRlbnRpZmllcldpdGhQb2ludFRyYWNraW5nKHBvc2l0aW9uIC0gMSwgcG9pbnRzLCBpbmRleCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDI6XG4gICAgICAgIHBhcnNlZFtpbmRleF0gKz0gZGVsaW1pdChjaGFyYWN0ZXIpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSA0OlxuICAgICAgICAvLyBjb21tYVxuICAgICAgICBpZiAoY2hhcmFjdGVyID09PSA0NCkge1xuICAgICAgICAgIC8vIGNvbG9uXG4gICAgICAgICAgcGFyc2VkWysraW5kZXhdID0gcGVlaygpID09PSA1OCA/ICcmXFxmJyA6ICcnO1xuICAgICAgICAgIHBvaW50c1tpbmRleF0gPSBwYXJzZWRbaW5kZXhdLmxlbmd0aDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAvLyBmYWxsdGhyb3VnaFxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBwYXJzZWRbaW5kZXhdICs9IGZyb20oY2hhcmFjdGVyKTtcbiAgICB9XG4gIH0gd2hpbGUgKGNoYXJhY3RlciA9IG5leHQoKSk7XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn07XG5cbnZhciBnZXRSdWxlcyA9IGZ1bmN0aW9uIGdldFJ1bGVzKHZhbHVlLCBwb2ludHMpIHtcbiAgcmV0dXJuIGRlYWxsb2ModG9SdWxlcyhhbGxvYyh2YWx1ZSksIHBvaW50cykpO1xufTsgLy8gV2Vha1NldCB3b3VsZCBiZSBtb3JlIGFwcHJvcHJpYXRlLCBidXQgb25seSBXZWFrTWFwIGlzIHN1cHBvcnRlZCBpbiBJRTExXG5cblxudmFyIGZpeGVkRWxlbWVudHMgPSAvKiAjX19QVVJFX18gKi9uZXcgV2Vha01hcCgpO1xudmFyIGNvbXBhdCA9IGZ1bmN0aW9uIGNvbXBhdChlbGVtZW50KSB7XG4gIGlmIChlbGVtZW50LnR5cGUgIT09ICdydWxlJyB8fCAhZWxlbWVudC5wYXJlbnQgfHwgLy8gcG9zaXRpdmUgLmxlbmd0aCBpbmRpY2F0ZXMgdGhhdCB0aGlzIHJ1bGUgY29udGFpbnMgcHNldWRvXG4gIC8vIG5lZ2F0aXZlIC5sZW5ndGggaW5kaWNhdGVzIHRoYXQgdGhpcyBydWxlIGhhcyBiZWVuIGFscmVhZHkgcHJlZml4ZWRcbiAgZWxlbWVudC5sZW5ndGggPCAxKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHZhbHVlID0gZWxlbWVudC52YWx1ZSxcbiAgICAgIHBhcmVudCA9IGVsZW1lbnQucGFyZW50O1xuICB2YXIgaXNJbXBsaWNpdFJ1bGUgPSBlbGVtZW50LmNvbHVtbiA9PT0gcGFyZW50LmNvbHVtbiAmJiBlbGVtZW50LmxpbmUgPT09IHBhcmVudC5saW5lO1xuXG4gIHdoaWxlIChwYXJlbnQudHlwZSAhPT0gJ3J1bGUnKSB7XG4gICAgcGFyZW50ID0gcGFyZW50LnBhcmVudDtcbiAgICBpZiAoIXBhcmVudCkgcmV0dXJuO1xuICB9IC8vIHNob3J0LWNpcmN1aXQgZm9yIHRoZSBzaW1wbGVzdCBjYXNlXG5cblxuICBpZiAoZWxlbWVudC5wcm9wcy5sZW5ndGggPT09IDEgJiYgdmFsdWUuY2hhckNvZGVBdCgwKSAhPT0gNThcbiAgLyogY29sb24gKi9cbiAgJiYgIWZpeGVkRWxlbWVudHMuZ2V0KHBhcmVudCkpIHtcbiAgICByZXR1cm47XG4gIH0gLy8gaWYgdGhpcyBpcyBhbiBpbXBsaWNpdGx5IGluc2VydGVkIHJ1bGUgKHRoZSBvbmUgZWFnZXJseSBpbnNlcnRlZCBhdCB0aGUgZWFjaCBuZXcgbmVzdGVkIGxldmVsKVxuICAvLyB0aGVuIHRoZSBwcm9wcyBoYXMgYWxyZWFkeSBiZWVuIG1hbmlwdWxhdGVkIGJlZm9yZWhhbmQgYXMgdGhleSB0aGF0IGFycmF5IGlzIHNoYXJlZCBiZXR3ZWVuIGl0IGFuZCBpdHMgXCJydWxlIHBhcmVudFwiXG5cblxuICBpZiAoaXNJbXBsaWNpdFJ1bGUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBmaXhlZEVsZW1lbnRzLnNldChlbGVtZW50LCB0cnVlKTtcbiAgdmFyIHBvaW50cyA9IFtdO1xuICB2YXIgcnVsZXMgPSBnZXRSdWxlcyh2YWx1ZSwgcG9pbnRzKTtcbiAgdmFyIHBhcmVudFJ1bGVzID0gcGFyZW50LnByb3BzO1xuXG4gIGZvciAodmFyIGkgPSAwLCBrID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBwYXJlbnRSdWxlcy5sZW5ndGg7IGorKywgaysrKSB7XG4gICAgICBlbGVtZW50LnByb3BzW2tdID0gcG9pbnRzW2ldID8gcnVsZXNbaV0ucmVwbGFjZSgvJlxcZi9nLCBwYXJlbnRSdWxlc1tqXSkgOiBwYXJlbnRSdWxlc1tqXSArIFwiIFwiICsgcnVsZXNbaV07XG4gICAgfVxuICB9XG59O1xudmFyIHJlbW92ZUxhYmVsID0gZnVuY3Rpb24gcmVtb3ZlTGFiZWwoZWxlbWVudCkge1xuICBpZiAoZWxlbWVudC50eXBlID09PSAnZGVjbCcpIHtcbiAgICB2YXIgdmFsdWUgPSBlbGVtZW50LnZhbHVlO1xuXG4gICAgaWYgKCAvLyBjaGFyY29kZSBmb3IgbFxuICAgIHZhbHVlLmNoYXJDb2RlQXQoMCkgPT09IDEwOCAmJiAvLyBjaGFyY29kZSBmb3IgYlxuICAgIHZhbHVlLmNoYXJDb2RlQXQoMikgPT09IDk4KSB7XG4gICAgICAvLyB0aGlzIGlnbm9yZXMgbGFiZWxcbiAgICAgIGVsZW1lbnRbXCJyZXR1cm5cIl0gPSAnJztcbiAgICAgIGVsZW1lbnQudmFsdWUgPSAnJztcbiAgICB9XG4gIH1cbn07XG52YXIgaWdub3JlRmxhZyA9ICdlbW90aW9uLWRpc2FibGUtc2VydmVyLXJlbmRlcmluZy11bnNhZmUtc2VsZWN0b3Itd2FybmluZy1wbGVhc2UtZG8tbm90LXVzZS10aGlzLXRoZS13YXJuaW5nLWV4aXN0cy1mb3ItYS1yZWFzb24nO1xuXG52YXIgaXNJZ25vcmluZ0NvbW1lbnQgPSBmdW5jdGlvbiBpc0lnbm9yaW5nQ29tbWVudChlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50LnR5cGUgPT09ICdjb21tJyAmJiBlbGVtZW50LmNoaWxkcmVuLmluZGV4T2YoaWdub3JlRmxhZykgPiAtMTtcbn07XG5cbnZhciBjcmVhdGVVbnNhZmVTZWxlY3RvcnNBbGFybSA9IGZ1bmN0aW9uIGNyZWF0ZVVuc2FmZVNlbGVjdG9yc0FsYXJtKGNhY2hlKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZWxlbWVudCwgaW5kZXgsIGNoaWxkcmVuKSB7XG4gICAgaWYgKGVsZW1lbnQudHlwZSAhPT0gJ3J1bGUnIHx8IGNhY2hlLmNvbXBhdCkgcmV0dXJuO1xuICAgIHZhciB1bnNhZmVQc2V1ZG9DbGFzc2VzID0gZWxlbWVudC52YWx1ZS5tYXRjaCgvKDpmaXJzdHw6bnRofDpudGgtbGFzdCktY2hpbGQvZyk7XG5cbiAgICBpZiAodW5zYWZlUHNldWRvQ2xhc3Nlcykge1xuICAgICAgdmFyIGlzTmVzdGVkID0gISFlbGVtZW50LnBhcmVudDsgLy8gaW4gbmVzdGVkIHJ1bGVzIGNvbW1lbnRzIGJlY29tZSBjaGlsZHJlbiBvZiB0aGUgXCJhdXRvLWluc2VydGVkXCIgcnVsZSBhbmQgdGhhdCdzIGFsd2F5cyB0aGUgYGVsZW1lbnQucGFyZW50YFxuICAgICAgLy9cbiAgICAgIC8vIGNvbnNpZGVyaW5nIHRoaXMgaW5wdXQ6XG4gICAgICAvLyAuYSB7XG4gICAgICAvLyAgIC5iIC8qIGNvbW0gKi8ge31cbiAgICAgIC8vICAgY29sb3I6IGhvdHBpbms7XG4gICAgICAvLyB9XG4gICAgICAvLyB3ZSBnZXQgb3V0cHV0IGNvcnJlc3BvbmRpbmcgdG8gdGhpczpcbiAgICAgIC8vIC5hIHtcbiAgICAgIC8vICAgJiB7XG4gICAgICAvLyAgICAgLyogY29tbSAqL1xuICAgICAgLy8gICAgIGNvbG9yOiBob3RwaW5rO1xuICAgICAgLy8gICB9XG4gICAgICAvLyAgIC5iIHt9XG4gICAgICAvLyB9XG5cbiAgICAgIHZhciBjb21tZW50Q29udGFpbmVyID0gaXNOZXN0ZWQgPyBlbGVtZW50LnBhcmVudC5jaGlsZHJlbiA6IC8vIGdsb2JhbCBydWxlIGF0IHRoZSByb290IGxldmVsXG4gICAgICBjaGlsZHJlbjtcblxuICAgICAgZm9yICh2YXIgaSA9IGNvbW1lbnRDb250YWluZXIubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgdmFyIG5vZGUgPSBjb21tZW50Q29udGFpbmVyW2ldO1xuXG4gICAgICAgIGlmIChub2RlLmxpbmUgPCBlbGVtZW50LmxpbmUpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSAvLyBpdCBpcyBxdWl0ZSB3ZWlyZCBidXQgY29tbWVudHMgYXJlICp1c3VhbGx5KiBwdXQgYXQgYGNvbHVtbjogZWxlbWVudC5jb2x1bW4gLSAxYFxuICAgICAgICAvLyBzbyB3ZSBzZWVrICpmcm9tIHRoZSBlbmQqIGZvciB0aGUgbm9kZSB0aGF0IGlzIGVhcmxpZXIgdGhhbiB0aGUgcnVsZSdzIGBlbGVtZW50YCBhbmQgY2hlY2sgdGhhdFxuICAgICAgICAvLyB0aGlzIHdpbGwgYWxzbyBtYXRjaCBpbnB1dHMgbGlrZSB0aGlzOlxuICAgICAgICAvLyAuYSB7XG4gICAgICAgIC8vICAgLyogY29tbSAqL1xuICAgICAgICAvLyAgIC5iIHt9XG4gICAgICAgIC8vIH1cbiAgICAgICAgLy9cbiAgICAgICAgLy8gYnV0IHRoYXQgaXMgZmluZVxuICAgICAgICAvL1xuICAgICAgICAvLyBpdCB3b3VsZCBiZSB0aGUgZWFzaWVzdCB0byBjaGFuZ2UgdGhlIHBsYWNlbWVudCBvZiB0aGUgY29tbWVudCB0byBiZSB0aGUgZmlyc3QgY2hpbGQgb2YgdGhlIHJ1bGU6XG4gICAgICAgIC8vIC5hIHtcbiAgICAgICAgLy8gICAuYiB7IC8qIGNvbW0gKi8gfVxuICAgICAgICAvLyB9XG4gICAgICAgIC8vIHdpdGggc3VjaCBpbnB1dHMgd2Ugd291bGRuJ3QgaGF2ZSB0byBzZWFyY2ggZm9yIHRoZSBjb21tZW50IGF0IGFsbFxuICAgICAgICAvLyBUT0RPOiBjb25zaWRlciBjaGFuZ2luZyB0aGlzIGNvbW1lbnQgcGxhY2VtZW50IGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb25cblxuXG4gICAgICAgIGlmIChub2RlLmNvbHVtbiA8IGVsZW1lbnQuY29sdW1uKSB7XG4gICAgICAgICAgaWYgKGlzSWdub3JpbmdDb21tZW50KG5vZGUpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdW5zYWZlUHNldWRvQ2xhc3Nlcy5mb3JFYWNoKGZ1bmN0aW9uICh1bnNhZmVQc2V1ZG9DbGFzcykge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiVGhlIHBzZXVkbyBjbGFzcyBcXFwiXCIgKyB1bnNhZmVQc2V1ZG9DbGFzcyArIFwiXFxcIiBpcyBwb3RlbnRpYWxseSB1bnNhZmUgd2hlbiBkb2luZyBzZXJ2ZXItc2lkZSByZW5kZXJpbmcuIFRyeSBjaGFuZ2luZyBpdCB0byBcXFwiXCIgKyB1bnNhZmVQc2V1ZG9DbGFzcy5zcGxpdCgnLWNoaWxkJylbMF0gKyBcIi1vZi10eXBlXFxcIi5cIik7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG59O1xuXG52YXIgaXNJbXBvcnRSdWxlID0gZnVuY3Rpb24gaXNJbXBvcnRSdWxlKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnQudHlwZS5jaGFyQ29kZUF0KDEpID09PSAxMDUgJiYgZWxlbWVudC50eXBlLmNoYXJDb2RlQXQoMCkgPT09IDY0O1xufTtcblxudmFyIGlzUHJlcGVuZGVkV2l0aFJlZ3VsYXJSdWxlcyA9IGZ1bmN0aW9uIGlzUHJlcGVuZGVkV2l0aFJlZ3VsYXJSdWxlcyhpbmRleCwgY2hpbGRyZW4pIHtcbiAgZm9yICh2YXIgaSA9IGluZGV4IC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBpZiAoIWlzSW1wb3J0UnVsZShjaGlsZHJlbltpXSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn07IC8vIHVzZSB0aGlzIHRvIHJlbW92ZSBpbmNvcnJlY3QgZWxlbWVudHMgZnJvbSBmdXJ0aGVyIHByb2Nlc3Npbmdcbi8vIHNvIHRoZXkgZG9uJ3QgZ2V0IGhhbmRlZCB0byB0aGUgYHNoZWV0YCAob3IgYW55dGhpbmcgZWxzZSlcbi8vIGFzIHRoYXQgY291bGQgcG90ZW50aWFsbHkgbGVhZCB0byBhZGRpdGlvbmFsIGxvZ3Mgd2hpY2ggaW4gdHVybiBjb3VsZCBiZSBvdmVyaGVsbWluZyB0byB0aGUgdXNlclxuXG5cbnZhciBudWxsaWZ5RWxlbWVudCA9IGZ1bmN0aW9uIG51bGxpZnlFbGVtZW50KGVsZW1lbnQpIHtcbiAgZWxlbWVudC50eXBlID0gJyc7XG4gIGVsZW1lbnQudmFsdWUgPSAnJztcbiAgZWxlbWVudFtcInJldHVyblwiXSA9ICcnO1xuICBlbGVtZW50LmNoaWxkcmVuID0gJyc7XG4gIGVsZW1lbnQucHJvcHMgPSAnJztcbn07XG5cbnZhciBpbmNvcnJlY3RJbXBvcnRBbGFybSA9IGZ1bmN0aW9uIGluY29ycmVjdEltcG9ydEFsYXJtKGVsZW1lbnQsIGluZGV4LCBjaGlsZHJlbikge1xuICBpZiAoIWlzSW1wb3J0UnVsZShlbGVtZW50KSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChlbGVtZW50LnBhcmVudCkge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJgQGltcG9ydGAgcnVsZXMgY2FuJ3QgYmUgbmVzdGVkIGluc2lkZSBvdGhlciBydWxlcy4gUGxlYXNlIG1vdmUgaXQgdG8gdGhlIHRvcCBsZXZlbCBhbmQgcHV0IGl0IGJlZm9yZSByZWd1bGFyIHJ1bGVzLiBLZWVwIGluIG1pbmQgdGhhdCB0aGV5IGNhbiBvbmx5IGJlIHVzZWQgd2l0aGluIGdsb2JhbCBzdHlsZXMuXCIpO1xuICAgIG51bGxpZnlFbGVtZW50KGVsZW1lbnQpO1xuICB9IGVsc2UgaWYgKGlzUHJlcGVuZGVkV2l0aFJlZ3VsYXJSdWxlcyhpbmRleCwgY2hpbGRyZW4pKSB7XG4gICAgY29uc29sZS5lcnJvcihcImBAaW1wb3J0YCBydWxlcyBjYW4ndCBiZSBhZnRlciBvdGhlciBydWxlcy4gUGxlYXNlIHB1dCB5b3VyIGBAaW1wb3J0YCBydWxlcyBiZWZvcmUgeW91ciBvdGhlciBydWxlcy5cIik7XG4gICAgbnVsbGlmeUVsZW1lbnQoZWxlbWVudCk7XG4gIH1cbn07XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLWZhbGx0aHJvdWdoICovXG5cbmZ1bmN0aW9uIHByZWZpeCh2YWx1ZSwgbGVuZ3RoKSB7XG4gIHN3aXRjaCAoaGFzaCh2YWx1ZSwgbGVuZ3RoKSkge1xuICAgIC8vIGNvbG9yLWFkanVzdFxuICAgIGNhc2UgNTEwMzpcbiAgICAgIHJldHVybiBXRUJLSVQgKyAncHJpbnQtJyArIHZhbHVlICsgdmFsdWU7XG4gICAgLy8gYW5pbWF0aW9uLCBhbmltYXRpb24tKGRlbGF5fGRpcmVjdGlvbnxkdXJhdGlvbnxmaWxsLW1vZGV8aXRlcmF0aW9uLWNvdW50fG5hbWV8cGxheS1zdGF0ZXx0aW1pbmctZnVuY3Rpb24pXG5cbiAgICBjYXNlIDU3Mzc6XG4gICAgY2FzZSA0MjAxOlxuICAgIGNhc2UgMzE3NzpcbiAgICBjYXNlIDM0MzM6XG4gICAgY2FzZSAxNjQxOlxuICAgIGNhc2UgNDQ1NzpcbiAgICBjYXNlIDI5MjE6IC8vIHRleHQtZGVjb3JhdGlvbiwgZmlsdGVyLCBjbGlwLXBhdGgsIGJhY2tmYWNlLXZpc2liaWxpdHksIGNvbHVtbiwgYm94LWRlY29yYXRpb24tYnJlYWtcblxuICAgIGNhc2UgNTU3MjpcbiAgICBjYXNlIDYzNTY6XG4gICAgY2FzZSA1ODQ0OlxuICAgIGNhc2UgMzE5MTpcbiAgICBjYXNlIDY2NDU6XG4gICAgY2FzZSAzMDA1OiAvLyBtYXNrLCBtYXNrLWltYWdlLCBtYXNrLShtb2RlfGNsaXB8c2l6ZSksIG1hc2stKHJlcGVhdHxvcmlnaW4pLCBtYXNrLXBvc2l0aW9uLCBtYXNrLWNvbXBvc2l0ZSxcblxuICAgIGNhc2UgNjM5MTpcbiAgICBjYXNlIDU4Nzk6XG4gICAgY2FzZSA1NjIzOlxuICAgIGNhc2UgNjEzNTpcbiAgICBjYXNlIDQ1OTk6XG4gICAgY2FzZSA0ODU1OiAvLyBiYWNrZ3JvdW5kLWNsaXAsIGNvbHVtbnMsIGNvbHVtbi0oY291bnR8ZmlsbHxnYXB8cnVsZXxydWxlLWNvbG9yfHJ1bGUtc3R5bGV8cnVsZS13aWR0aHxzcGFufHdpZHRoKVxuXG4gICAgY2FzZSA0MjE1OlxuICAgIGNhc2UgNjM4OTpcbiAgICBjYXNlIDUxMDk6XG4gICAgY2FzZSA1MzY1OlxuICAgIGNhc2UgNTYyMTpcbiAgICBjYXNlIDM4Mjk6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyB2YWx1ZTtcbiAgICAvLyBhcHBlYXJhbmNlLCB1c2VyLXNlbGVjdCwgdHJhbnNmb3JtLCBoeXBoZW5zLCB0ZXh0LXNpemUtYWRqdXN0XG5cbiAgICBjYXNlIDUzNDk6XG4gICAgY2FzZSA0MjQ2OlxuICAgIGNhc2UgNDgxMDpcbiAgICBjYXNlIDY5Njg6XG4gICAgY2FzZSAyNzU2OlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTU9aICsgdmFsdWUgKyBNUyArIHZhbHVlICsgdmFsdWU7XG4gICAgLy8gZmxleCwgZmxleC1kaXJlY3Rpb25cblxuICAgIGNhc2UgNjgyODpcbiAgICBjYXNlIDQyNjg6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHZhbHVlICsgdmFsdWU7XG4gICAgLy8gb3JkZXJcblxuICAgIGNhc2UgNjE2NTpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgJ2ZsZXgtJyArIHZhbHVlICsgdmFsdWU7XG4gICAgLy8gYWxpZ24taXRlbXNcblxuICAgIGNhc2UgNTE4NzpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIHJlcGxhY2UodmFsdWUsIC8oXFx3KykuKyg6W15dKykvLCBXRUJLSVQgKyAnYm94LSQxJDInICsgTVMgKyAnZmxleC0kMSQyJykgKyB2YWx1ZTtcbiAgICAvLyBhbGlnbi1zZWxmXG5cbiAgICBjYXNlIDU0NDM6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArICdmbGV4LWl0ZW0tJyArIHJlcGxhY2UodmFsdWUsIC9mbGV4LXwtc2VsZi8sICcnKSArIHZhbHVlO1xuICAgIC8vIGFsaWduLWNvbnRlbnRcblxuICAgIGNhc2UgNDY3NTpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgJ2ZsZXgtbGluZS1wYWNrJyArIHJlcGxhY2UodmFsdWUsIC9hbGlnbi1jb250ZW50fGZsZXgtfC1zZWxmLywgJycpICsgdmFsdWU7XG4gICAgLy8gZmxleC1zaHJpbmtcblxuICAgIGNhc2UgNTU0ODpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgJ3NocmluaycsICduZWdhdGl2ZScpICsgdmFsdWU7XG4gICAgLy8gZmxleC1iYXNpc1xuXG4gICAgY2FzZSA1MjkyOlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAnYmFzaXMnLCAncHJlZmVycmVkLXNpemUnKSArIHZhbHVlO1xuICAgIC8vIGZsZXgtZ3Jvd1xuXG4gICAgY2FzZSA2MDYwOlxuICAgICAgcmV0dXJuIFdFQktJVCArICdib3gtJyArIHJlcGxhY2UodmFsdWUsICctZ3JvdycsICcnKSArIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAnZ3JvdycsICdwb3NpdGl2ZScpICsgdmFsdWU7XG4gICAgLy8gdHJhbnNpdGlvblxuXG4gICAgY2FzZSA0NTU0OlxuICAgICAgcmV0dXJuIFdFQktJVCArIHJlcGxhY2UodmFsdWUsIC8oW14tXSkodHJhbnNmb3JtKS9nLCAnJDEnICsgV0VCS0lUICsgJyQyJykgKyB2YWx1ZTtcbiAgICAvLyBjdXJzb3JcblxuICAgIGNhc2UgNjE4NzpcbiAgICAgIHJldHVybiByZXBsYWNlKHJlcGxhY2UocmVwbGFjZSh2YWx1ZSwgLyh6b29tLXxncmFiKS8sIFdFQktJVCArICckMScpLCAvKGltYWdlLXNldCkvLCBXRUJLSVQgKyAnJDEnKSwgdmFsdWUsICcnKSArIHZhbHVlO1xuICAgIC8vIGJhY2tncm91bmQsIGJhY2tncm91bmQtaW1hZ2VcblxuICAgIGNhc2UgNTQ5NTpcbiAgICBjYXNlIDM5NTk6XG4gICAgICByZXR1cm4gcmVwbGFjZSh2YWx1ZSwgLyhpbWFnZS1zZXRcXChbXl0qKS8sIFdFQktJVCArICckMScgKyAnJGAkMScpO1xuICAgIC8vIGp1c3RpZnktY29udGVudFxuXG4gICAgY2FzZSA0OTY4OlxuICAgICAgcmV0dXJuIHJlcGxhY2UocmVwbGFjZSh2YWx1ZSwgLyguKzopKGZsZXgtKT8oLiopLywgV0VCS0lUICsgJ2JveC1wYWNrOiQzJyArIE1TICsgJ2ZsZXgtcGFjazokMycpLCAvcy4rLWJbXjtdKy8sICdqdXN0aWZ5JykgKyBXRUJLSVQgKyB2YWx1ZSArIHZhbHVlO1xuICAgIC8vIChtYXJnaW58cGFkZGluZyktaW5saW5lLShzdGFydHxlbmQpXG5cbiAgICBjYXNlIDQwOTU6XG4gICAgY2FzZSAzNTgzOlxuICAgIGNhc2UgNDA2ODpcbiAgICBjYXNlIDI1MzI6XG4gICAgICByZXR1cm4gcmVwbGFjZSh2YWx1ZSwgLyguKyktaW5saW5lKC4rKS8sIFdFQktJVCArICckMSQyJykgKyB2YWx1ZTtcbiAgICAvLyAobWlufG1heCk/KHdpZHRofGhlaWdodHxpbmxpbmUtc2l6ZXxibG9jay1zaXplKVxuXG4gICAgY2FzZSA4MTE2OlxuICAgIGNhc2UgNzA1OTpcbiAgICBjYXNlIDU3NTM6XG4gICAgY2FzZSA1NTM1OlxuICAgIGNhc2UgNTQ0NTpcbiAgICBjYXNlIDU3MDE6XG4gICAgY2FzZSA0OTMzOlxuICAgIGNhc2UgNDY3NzpcbiAgICBjYXNlIDU1MzM6XG4gICAgY2FzZSA1Nzg5OlxuICAgIGNhc2UgNTAyMTpcbiAgICBjYXNlIDQ3NjU6XG4gICAgICAvLyBzdHJldGNoLCBtYXgtY29udGVudCwgbWluLWNvbnRlbnQsIGZpbGwtYXZhaWxhYmxlXG4gICAgICBpZiAoc3RybGVuKHZhbHVlKSAtIDEgLSBsZW5ndGggPiA2KSBzd2l0Y2ggKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgMSkpIHtcbiAgICAgICAgLy8gKG0pYXgtY29udGVudCwgKG0paW4tY29udGVudFxuICAgICAgICBjYXNlIDEwOTpcbiAgICAgICAgICAvLyAtXG4gICAgICAgICAgaWYgKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgNCkgIT09IDQ1KSBicmVhaztcbiAgICAgICAgLy8gKGYpaWxsLWF2YWlsYWJsZSwgKGYpaXQtY29udGVudFxuXG4gICAgICAgIGNhc2UgMTAyOlxuICAgICAgICAgIHJldHVybiByZXBsYWNlKHZhbHVlLCAvKC4rOikoLispLShbXl0rKS8sICckMScgKyBXRUJLSVQgKyAnJDItJDMnICsgJyQxJyArIE1PWiArIChjaGFyYXQodmFsdWUsIGxlbmd0aCArIDMpID09IDEwOCA/ICckMycgOiAnJDItJDMnKSkgKyB2YWx1ZTtcbiAgICAgICAgLy8gKHMpdHJldGNoXG5cbiAgICAgICAgY2FzZSAxMTU6XG4gICAgICAgICAgcmV0dXJuIH5pbmRleG9mKHZhbHVlLCAnc3RyZXRjaCcpID8gcHJlZml4KHJlcGxhY2UodmFsdWUsICdzdHJldGNoJywgJ2ZpbGwtYXZhaWxhYmxlJyksIGxlbmd0aCkgKyB2YWx1ZSA6IHZhbHVlO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgLy8gcG9zaXRpb246IHN0aWNreVxuXG4gICAgY2FzZSA0OTQ5OlxuICAgICAgLy8gKHMpdGlja3k/XG4gICAgICBpZiAoY2hhcmF0KHZhbHVlLCBsZW5ndGggKyAxKSAhPT0gMTE1KSBicmVhaztcbiAgICAvLyBkaXNwbGF5OiAoZmxleHxpbmxpbmUtZmxleClcblxuICAgIGNhc2UgNjQ0NDpcbiAgICAgIHN3aXRjaCAoY2hhcmF0KHZhbHVlLCBzdHJsZW4odmFsdWUpIC0gMyAtICh+aW5kZXhvZih2YWx1ZSwgJyFpbXBvcnRhbnQnKSAmJiAxMCkpKSB7XG4gICAgICAgIC8vIHN0aWMoayl5XG4gICAgICAgIGNhc2UgMTA3OlxuICAgICAgICAgIHJldHVybiByZXBsYWNlKHZhbHVlLCAnOicsICc6JyArIFdFQktJVCkgKyB2YWx1ZTtcbiAgICAgICAgLy8gKGlubGluZS0pP2ZsKGUpeFxuXG4gICAgICAgIGNhc2UgMTAxOlxuICAgICAgICAgIHJldHVybiByZXBsYWNlKHZhbHVlLCAvKC4rOikoW147IV0rKSg7fCEuKyk/LywgJyQxJyArIFdFQktJVCArIChjaGFyYXQodmFsdWUsIDE0KSA9PT0gNDUgPyAnaW5saW5lLScgOiAnJykgKyAnYm94JDMnICsgJyQxJyArIFdFQktJVCArICckMiQzJyArICckMScgKyBNUyArICckMmJveCQzJykgKyB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG4gICAgLy8gd3JpdGluZy1tb2RlXG5cbiAgICBjYXNlIDU5MzY6XG4gICAgICBzd2l0Y2ggKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgMTEpKSB7XG4gICAgICAgIC8vIHZlcnRpY2FsLWwocilcbiAgICAgICAgY2FzZSAxMTQ6XG4gICAgICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAvW3N2aF1cXHcrLVt0YmxyXXsyfS8sICd0YicpICsgdmFsdWU7XG4gICAgICAgIC8vIHZlcnRpY2FsLXIobClcblxuICAgICAgICBjYXNlIDEwODpcbiAgICAgICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsIC9bc3ZoXVxcdystW3RibHJdezJ9LywgJ3RiLXJsJykgKyB2YWx1ZTtcbiAgICAgICAgLy8gaG9yaXpvbnRhbCgtKXRiXG5cbiAgICAgICAgY2FzZSA0NTpcbiAgICAgICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsIC9bc3ZoXVxcdystW3RibHJdezJ9LywgJ2xyJykgKyB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyB2YWx1ZSArIHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG52YXIgcHJlZml4ZXIgPSBmdW5jdGlvbiBwcmVmaXhlcihlbGVtZW50LCBpbmRleCwgY2hpbGRyZW4sIGNhbGxiYWNrKSB7XG4gIGlmIChlbGVtZW50Lmxlbmd0aCA+IC0xKSBpZiAoIWVsZW1lbnRbXCJyZXR1cm5cIl0pIHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XG4gICAgY2FzZSBERUNMQVJBVElPTjpcbiAgICAgIGVsZW1lbnRbXCJyZXR1cm5cIl0gPSBwcmVmaXgoZWxlbWVudC52YWx1ZSwgZWxlbWVudC5sZW5ndGgpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIEtFWUZSQU1FUzpcbiAgICAgIHJldHVybiBzZXJpYWxpemUoW2NvcHkoZWxlbWVudCwge1xuICAgICAgICB2YWx1ZTogcmVwbGFjZShlbGVtZW50LnZhbHVlLCAnQCcsICdAJyArIFdFQktJVClcbiAgICAgIH0pXSwgY2FsbGJhY2spO1xuXG4gICAgY2FzZSBSVUxFU0VUOlxuICAgICAgaWYgKGVsZW1lbnQubGVuZ3RoKSByZXR1cm4gY29tYmluZShlbGVtZW50LnByb3BzLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgc3dpdGNoIChtYXRjaCh2YWx1ZSwgLyg6OnBsYWNcXHcrfDpyZWFkLVxcdyspLykpIHtcbiAgICAgICAgICAvLyA6cmVhZC0ob25seXx3cml0ZSlcbiAgICAgICAgICBjYXNlICc6cmVhZC1vbmx5JzpcbiAgICAgICAgICBjYXNlICc6cmVhZC13cml0ZSc6XG4gICAgICAgICAgICByZXR1cm4gc2VyaWFsaXplKFtjb3B5KGVsZW1lbnQsIHtcbiAgICAgICAgICAgICAgcHJvcHM6IFtyZXBsYWNlKHZhbHVlLCAvOihyZWFkLVxcdyspLywgJzonICsgTU9aICsgJyQxJyldXG4gICAgICAgICAgICB9KV0sIGNhbGxiYWNrKTtcbiAgICAgICAgICAvLyA6cGxhY2Vob2xkZXJcblxuICAgICAgICAgIGNhc2UgJzo6cGxhY2Vob2xkZXInOlxuICAgICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZShbY29weShlbGVtZW50LCB7XG4gICAgICAgICAgICAgIHByb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocGxhY1xcdyspLywgJzonICsgV0VCS0lUICsgJ2lucHV0LSQxJyldXG4gICAgICAgICAgICB9KSwgY29weShlbGVtZW50LCB7XG4gICAgICAgICAgICAgIHByb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocGxhY1xcdyspLywgJzonICsgTU9aICsgJyQxJyldXG4gICAgICAgICAgICB9KSwgY29weShlbGVtZW50LCB7XG4gICAgICAgICAgICAgIHByb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocGxhY1xcdyspLywgTVMgKyAnaW5wdXQtJDEnKV1cbiAgICAgICAgICAgIH0pXSwgY2FsbGJhY2spO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfSk7XG4gIH1cbn07XG5cbnZhciBkZWZhdWx0U3R5bGlzUGx1Z2lucyA9IFtwcmVmaXhlcl07XG5cbnZhciBjcmVhdGVDYWNoZSA9IGZ1bmN0aW9uIGNyZWF0ZUNhY2hlKG9wdGlvbnMpIHtcbiAgdmFyIGtleSA9IG9wdGlvbnMua2V5O1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICFrZXkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJZb3UgaGF2ZSB0byBjb25maWd1cmUgYGtleWAgZm9yIHlvdXIgY2FjaGUuIFBsZWFzZSBtYWtlIHN1cmUgaXQncyB1bmlxdWUgKGFuZCBub3QgZXF1YWwgdG8gJ2NzcycpIGFzIGl0J3MgdXNlZCBmb3IgbGlua2luZyBzdHlsZXMgdG8geW91ciBjYWNoZS5cXG5cIiArIFwiSWYgbXVsdGlwbGUgY2FjaGVzIHNoYXJlIHRoZSBzYW1lIGtleSB0aGV5IG1pZ2h0IFxcXCJmaWdodFxcXCIgZm9yIGVhY2ggb3RoZXIncyBzdHlsZSBlbGVtZW50cy5cIik7XG4gIH1cblxuICBpZiAoa2V5ID09PSAnY3NzJykge1xuICAgIHZhciBzc3JTdHlsZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwic3R5bGVbZGF0YS1lbW90aW9uXTpub3QoW2RhdGEtc10pXCIpOyAvLyBnZXQgU1NSZWQgc3R5bGVzIG91dCBvZiB0aGUgd2F5IG9mIFJlYWN0J3MgaHlkcmF0aW9uXG4gICAgLy8gZG9jdW1lbnQuaGVhZCBpcyBhIHNhZmUgcGxhY2UgdG8gbW92ZSB0aGVtIHRvKHRob3VnaCBub3RlIGRvY3VtZW50LmhlYWQgaXMgbm90IG5lY2Vzc2FyaWx5IHRoZSBsYXN0IHBsYWNlIHRoZXkgd2lsbCBiZSlcbiAgICAvLyBub3RlIHRoaXMgdmVyeSB2ZXJ5IGludGVudGlvbmFsbHkgdGFyZ2V0cyBhbGwgc3R5bGUgZWxlbWVudHMgcmVnYXJkbGVzcyBvZiB0aGUga2V5IHRvIGVuc3VyZVxuICAgIC8vIHRoYXQgY3JlYXRpbmcgYSBjYWNoZSB3b3JrcyBpbnNpZGUgb2YgcmVuZGVyIG9mIGEgUmVhY3QgY29tcG9uZW50XG5cbiAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKHNzclN0eWxlcywgZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIC8vIHdlIHdhbnQgdG8gb25seSBtb3ZlIGVsZW1lbnRzIHdoaWNoIGhhdmUgYSBzcGFjZSBpbiB0aGUgZGF0YS1lbW90aW9uIGF0dHJpYnV0ZSB2YWx1ZVxuICAgICAgLy8gYmVjYXVzZSB0aGF0IGluZGljYXRlcyB0aGF0IGl0IGlzIGFuIEVtb3Rpb24gMTEgc2VydmVyLXNpZGUgcmVuZGVyZWQgc3R5bGUgZWxlbWVudHNcbiAgICAgIC8vIHdoaWxlIHdlIHdpbGwgYWxyZWFkeSBpZ25vcmUgRW1vdGlvbiAxMSBjbGllbnQtc2lkZSBpbnNlcnRlZCBzdHlsZXMgYmVjYXVzZSBvZiB0aGUgOm5vdChbZGF0YS1zXSkgcGFydCBpbiB0aGUgc2VsZWN0b3JcbiAgICAgIC8vIEVtb3Rpb24gMTAgY2xpZW50LXNpZGUgaW5zZXJ0ZWQgc3R5bGVzIGRpZCBub3QgaGF2ZSBkYXRhLXMgKGJ1dCBpbXBvcnRhbnRseSBkaWQgbm90IGhhdmUgYSBzcGFjZSBpbiB0aGVpciBkYXRhLWVtb3Rpb24gYXR0cmlidXRlcylcbiAgICAgIC8vIHNvIGNoZWNraW5nIGZvciB0aGUgc3BhY2UgZW5zdXJlcyB0aGF0IGxvYWRpbmcgRW1vdGlvbiAxMSBhZnRlciBFbW90aW9uIDEwIGhhcyBpbnNlcnRlZCBzb21lIHN0eWxlc1xuICAgICAgLy8gd2lsbCBub3QgcmVzdWx0IGluIHRoZSBFbW90aW9uIDEwIHN0eWxlcyBiZWluZyBkZXN0cm95ZWRcbiAgICAgIHZhciBkYXRhRW1vdGlvbkF0dHJpYnV0ZSA9IG5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLWVtb3Rpb24nKTtcblxuICAgICAgaWYgKGRhdGFFbW90aW9uQXR0cmlidXRlLmluZGV4T2YoJyAnKSA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChub2RlKTtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdkYXRhLXMnLCAnJyk7XG4gICAgfSk7XG4gIH1cblxuICB2YXIgc3R5bGlzUGx1Z2lucyA9IG9wdGlvbnMuc3R5bGlzUGx1Z2lucyB8fCBkZWZhdWx0U3R5bGlzUGx1Z2lucztcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIC8vICRGbG93Rml4TWVcbiAgICBpZiAoL1teYS16LV0vLnRlc3Qoa2V5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRW1vdGlvbiBrZXkgbXVzdCBvbmx5IGNvbnRhaW4gbG93ZXIgY2FzZSBhbHBoYWJldGljYWwgY2hhcmFjdGVycyBhbmQgLSBidXQgXFxcIlwiICsga2V5ICsgXCJcXFwiIHdhcyBwYXNzZWRcIik7XG4gICAgfVxuICB9XG5cbiAgdmFyIGluc2VydGVkID0ge307XG4gIHZhciBjb250YWluZXI7XG4gIHZhciBub2Rlc1RvSHlkcmF0ZSA9IFtdO1xuXG4gIHtcbiAgICBjb250YWluZXIgPSBvcHRpb25zLmNvbnRhaW5lciB8fCBkb2N1bWVudC5oZWFkO1xuICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoIC8vIHRoaXMgbWVhbnMgd2Ugd2lsbCBpZ25vcmUgZWxlbWVudHMgd2hpY2ggZG9uJ3QgaGF2ZSBhIHNwYWNlIGluIHRoZW0gd2hpY2hcbiAgICAvLyBtZWFucyB0aGF0IHRoZSBzdHlsZSBlbGVtZW50cyB3ZSdyZSBsb29raW5nIGF0IGFyZSBvbmx5IEVtb3Rpb24gMTEgc2VydmVyLXJlbmRlcmVkIHN0eWxlIGVsZW1lbnRzXG4gICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcInN0eWxlW2RhdGEtZW1vdGlvbl49XFxcIlwiICsga2V5ICsgXCIgXFxcIl1cIiksIGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICB2YXIgYXR0cmliID0gbm9kZS5nZXRBdHRyaWJ1dGUoXCJkYXRhLWVtb3Rpb25cIikuc3BsaXQoJyAnKTsgLy8gJEZsb3dGaXhNZVxuXG4gICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGF0dHJpYi5sZW5ndGg7IGkrKykge1xuICAgICAgICBpbnNlcnRlZFthdHRyaWJbaV1dID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgbm9kZXNUb0h5ZHJhdGUucHVzaChub2RlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhciBfaW5zZXJ0O1xuXG4gIHZhciBvbW5pcHJlc2VudFBsdWdpbnMgPSBbY29tcGF0LCByZW1vdmVMYWJlbF07XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBvbW5pcHJlc2VudFBsdWdpbnMucHVzaChjcmVhdGVVbnNhZmVTZWxlY3RvcnNBbGFybSh7XG4gICAgICBnZXQgY29tcGF0KCkge1xuICAgICAgICByZXR1cm4gY2FjaGUuY29tcGF0O1xuICAgICAgfVxuXG4gICAgfSksIGluY29ycmVjdEltcG9ydEFsYXJtKTtcbiAgfVxuXG4gIHtcbiAgICB2YXIgY3VycmVudFNoZWV0O1xuICAgIHZhciBmaW5hbGl6aW5nUGx1Z2lucyA9IFtzdHJpbmdpZnksIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgaWYgKCFlbGVtZW50LnJvb3QpIHtcbiAgICAgICAgaWYgKGVsZW1lbnRbXCJyZXR1cm5cIl0pIHtcbiAgICAgICAgICBjdXJyZW50U2hlZXQuaW5zZXJ0KGVsZW1lbnRbXCJyZXR1cm5cIl0pO1xuICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQudmFsdWUgJiYgZWxlbWVudC50eXBlICE9PSBDT01NRU5UKSB7XG4gICAgICAgICAgLy8gaW5zZXJ0IGVtcHR5IHJ1bGUgaW4gbm9uLXByb2R1Y3Rpb24gZW52aXJvbm1lbnRzXG4gICAgICAgICAgLy8gc28gQGVtb3Rpb24vamVzdCBjYW4gZ3JhYiBga2V5YCBmcm9tIHRoZSAoSlMpRE9NIGZvciBjYWNoZXMgd2l0aG91dCBhbnkgcnVsZXMgaW5zZXJ0ZWQgeWV0XG4gICAgICAgICAgY3VycmVudFNoZWV0Lmluc2VydChlbGVtZW50LnZhbHVlICsgXCJ7fVwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gOiBydWxlc2hlZXQoZnVuY3Rpb24gKHJ1bGUpIHtcbiAgICAgIGN1cnJlbnRTaGVldC5pbnNlcnQocnVsZSk7XG4gICAgfSldO1xuICAgIHZhciBzZXJpYWxpemVyID0gbWlkZGxld2FyZShvbW5pcHJlc2VudFBsdWdpbnMuY29uY2F0KHN0eWxpc1BsdWdpbnMsIGZpbmFsaXppbmdQbHVnaW5zKSk7XG5cbiAgICB2YXIgc3R5bGlzID0gZnVuY3Rpb24gc3R5bGlzKHN0eWxlcykge1xuICAgICAgcmV0dXJuIHNlcmlhbGl6ZShjb21waWxlKHN0eWxlcyksIHNlcmlhbGl6ZXIpO1xuICAgIH07XG5cbiAgICBfaW5zZXJ0ID0gZnVuY3Rpb24gaW5zZXJ0KHNlbGVjdG9yLCBzZXJpYWxpemVkLCBzaGVldCwgc2hvdWxkQ2FjaGUpIHtcbiAgICAgIGN1cnJlbnRTaGVldCA9IHNoZWV0O1xuXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBzZXJpYWxpemVkLm1hcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGN1cnJlbnRTaGVldCA9IHtcbiAgICAgICAgICBpbnNlcnQ6IGZ1bmN0aW9uIGluc2VydChydWxlKSB7XG4gICAgICAgICAgICBzaGVldC5pbnNlcnQocnVsZSArIHNlcmlhbGl6ZWQubWFwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHN0eWxpcyhzZWxlY3RvciA/IHNlbGVjdG9yICsgXCJ7XCIgKyBzZXJpYWxpemVkLnN0eWxlcyArIFwifVwiIDogc2VyaWFsaXplZC5zdHlsZXMpO1xuXG4gICAgICBpZiAoc2hvdWxkQ2FjaGUpIHtcbiAgICAgICAgY2FjaGUuaW5zZXJ0ZWRbc2VyaWFsaXplZC5uYW1lXSA9IHRydWU7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHZhciBjYWNoZSA9IHtcbiAgICBrZXk6IGtleSxcbiAgICBzaGVldDogbmV3IFN0eWxlU2hlZXQoe1xuICAgICAga2V5OiBrZXksXG4gICAgICBjb250YWluZXI6IGNvbnRhaW5lcixcbiAgICAgIG5vbmNlOiBvcHRpb25zLm5vbmNlLFxuICAgICAgc3BlZWR5OiBvcHRpb25zLnNwZWVkeSxcbiAgICAgIHByZXBlbmQ6IG9wdGlvbnMucHJlcGVuZCxcbiAgICAgIGluc2VydGlvblBvaW50OiBvcHRpb25zLmluc2VydGlvblBvaW50XG4gICAgfSksXG4gICAgbm9uY2U6IG9wdGlvbnMubm9uY2UsXG4gICAgaW5zZXJ0ZWQ6IGluc2VydGVkLFxuICAgIHJlZ2lzdGVyZWQ6IHt9LFxuICAgIGluc2VydDogX2luc2VydFxuICB9O1xuICBjYWNoZS5zaGVldC5oeWRyYXRlKG5vZGVzVG9IeWRyYXRlKTtcbiAgcmV0dXJuIGNhY2hlO1xufTtcblxuZXhwb3J0IHsgY3JlYXRlQ2FjaGUgYXMgZGVmYXVsdCB9O1xuIiwgImltcG9ydCBob2lzdE5vblJlYWN0U3RhdGljcyQxIGZyb20gJ2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzJztcblxuLy8gdGhpcyBmaWxlIGlzb2xhdGVzIHRoaXMgcGFja2FnZSB0aGF0IGlzIG5vdCB0cmVlLXNoYWtlYWJsZVxuLy8gYW5kIGlmIHRoaXMgbW9kdWxlIGRvZXNuJ3QgYWN0dWFsbHkgY29udGFpbiBhbnkgbG9naWMgb2YgaXRzIG93blxuLy8gdGhlbiBSb2xsdXAganVzdCB1c2UgJ2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzJyBkaXJlY3RseSBpbiBvdGhlciBjaHVua3NcblxudmFyIGhvaXN0Tm9uUmVhY3RTdGF0aWNzID0gKGZ1bmN0aW9uICh0YXJnZXRDb21wb25lbnQsIHNvdXJjZUNvbXBvbmVudCkge1xuICByZXR1cm4gaG9pc3ROb25SZWFjdFN0YXRpY3MkMSh0YXJnZXRDb21wb25lbnQsIHNvdXJjZUNvbXBvbmVudCk7XG59KTtcblxuZXhwb3J0IHsgaG9pc3ROb25SZWFjdFN0YXRpY3MgYXMgZGVmYXVsdCB9O1xuIiwgInZhciBpc0Jyb3dzZXIgPSBcIm9iamVjdFwiICE9PSAndW5kZWZpbmVkJztcbmZ1bmN0aW9uIGdldFJlZ2lzdGVyZWRTdHlsZXMocmVnaXN0ZXJlZCwgcmVnaXN0ZXJlZFN0eWxlcywgY2xhc3NOYW1lcykge1xuICB2YXIgcmF3Q2xhc3NOYW1lID0gJyc7XG4gIGNsYXNzTmFtZXMuc3BsaXQoJyAnKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFzc05hbWUpIHtcbiAgICBpZiAocmVnaXN0ZXJlZFtjbGFzc05hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlZ2lzdGVyZWRTdHlsZXMucHVzaChyZWdpc3RlcmVkW2NsYXNzTmFtZV0gKyBcIjtcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJhd0NsYXNzTmFtZSArPSBjbGFzc05hbWUgKyBcIiBcIjtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmF3Q2xhc3NOYW1lO1xufVxudmFyIHJlZ2lzdGVyU3R5bGVzID0gZnVuY3Rpb24gcmVnaXN0ZXJTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQsIGlzU3RyaW5nVGFnKSB7XG4gIHZhciBjbGFzc05hbWUgPSBjYWNoZS5rZXkgKyBcIi1cIiArIHNlcmlhbGl6ZWQubmFtZTtcblxuICBpZiAoIC8vIHdlIG9ubHkgbmVlZCB0byBhZGQgdGhlIHN0eWxlcyB0byB0aGUgcmVnaXN0ZXJlZCBjYWNoZSBpZiB0aGVcbiAgLy8gY2xhc3MgbmFtZSBjb3VsZCBiZSB1c2VkIGZ1cnRoZXIgZG93blxuICAvLyB0aGUgdHJlZSBidXQgaWYgaXQncyBhIHN0cmluZyB0YWcsIHdlIGtub3cgaXQgd29uJ3RcbiAgLy8gc28gd2UgZG9uJ3QgaGF2ZSB0byBhZGQgaXQgdG8gcmVnaXN0ZXJlZCBjYWNoZS5cbiAgLy8gdGhpcyBpbXByb3ZlcyBtZW1vcnkgdXNhZ2Ugc2luY2Ugd2UgY2FuIGF2b2lkIHN0b3JpbmcgdGhlIHdob2xlIHN0eWxlIHN0cmluZ1xuICAoaXNTdHJpbmdUYWcgPT09IGZhbHNlIHx8IC8vIHdlIG5lZWQgdG8gYWx3YXlzIHN0b3JlIGl0IGlmIHdlJ3JlIGluIGNvbXBhdCBtb2RlIGFuZFxuICAvLyBpbiBub2RlIHNpbmNlIGVtb3Rpb24tc2VydmVyIHJlbGllcyBvbiB3aGV0aGVyIGEgc3R5bGUgaXMgaW5cbiAgLy8gdGhlIHJlZ2lzdGVyZWQgY2FjaGUgdG8ga25vdyB3aGV0aGVyIGEgc3R5bGUgaXMgZ2xvYmFsIG9yIG5vdFxuICAvLyBhbHNvLCBub3RlIHRoYXQgdGhpcyBjaGVjayB3aWxsIGJlIGRlYWQgY29kZSBlbGltaW5hdGVkIGluIHRoZSBicm93c2VyXG4gIGlzQnJvd3NlciA9PT0gZmFsc2UgKSAmJiBjYWNoZS5yZWdpc3RlcmVkW2NsYXNzTmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgIGNhY2hlLnJlZ2lzdGVyZWRbY2xhc3NOYW1lXSA9IHNlcmlhbGl6ZWQuc3R5bGVzO1xuICB9XG59O1xudmFyIGluc2VydFN0eWxlcyA9IGZ1bmN0aW9uIGluc2VydFN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgaXNTdHJpbmdUYWcpIHtcbiAgcmVnaXN0ZXJTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQsIGlzU3RyaW5nVGFnKTtcbiAgdmFyIGNsYXNzTmFtZSA9IGNhY2hlLmtleSArIFwiLVwiICsgc2VyaWFsaXplZC5uYW1lO1xuXG4gIGlmIChjYWNoZS5pbnNlcnRlZFtzZXJpYWxpemVkLm5hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgY3VycmVudCA9IHNlcmlhbGl6ZWQ7XG5cbiAgICBkbyB7XG4gICAgICBjYWNoZS5pbnNlcnQoc2VyaWFsaXplZCA9PT0gY3VycmVudCA/IFwiLlwiICsgY2xhc3NOYW1lIDogJycsIGN1cnJlbnQsIGNhY2hlLnNoZWV0LCB0cnVlKTtcblxuICAgICAgY3VycmVudCA9IGN1cnJlbnQubmV4dDtcbiAgICB9IHdoaWxlIChjdXJyZW50ICE9PSB1bmRlZmluZWQpO1xuICB9XG59O1xuXG5leHBvcnQgeyBnZXRSZWdpc3RlcmVkU3R5bGVzLCBpbnNlcnRTdHlsZXMsIHJlZ2lzdGVyU3R5bGVzIH07XG4iLCAiLyogZXNsaW50LWRpc2FibGUgKi9cbi8vIEluc3BpcmVkIGJ5IGh0dHBzOi8vZ2l0aHViLmNvbS9nYXJ5Y291cnQvbXVybXVyaGFzaC1qc1xuLy8gUG9ydGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2FhcHBsZWJ5L3NtaGFzaGVyL2Jsb2IvNjFhMDUzMGYyODI3N2YyZTg1MGJmYzM5NjAwY2U2MWQwMmI1MThkZS9zcmMvTXVybXVySGFzaDIuY3BwI0wzNy1MODZcbmZ1bmN0aW9uIG11cm11cjIoc3RyKSB7XG4gIC8vICdtJyBhbmQgJ3InIGFyZSBtaXhpbmcgY29uc3RhbnRzIGdlbmVyYXRlZCBvZmZsaW5lLlxuICAvLyBUaGV5J3JlIG5vdCByZWFsbHkgJ21hZ2ljJywgdGhleSBqdXN0IGhhcHBlbiB0byB3b3JrIHdlbGwuXG4gIC8vIGNvbnN0IG0gPSAweDViZDFlOTk1O1xuICAvLyBjb25zdCByID0gMjQ7XG4gIC8vIEluaXRpYWxpemUgdGhlIGhhc2hcbiAgdmFyIGggPSAwOyAvLyBNaXggNCBieXRlcyBhdCBhIHRpbWUgaW50byB0aGUgaGFzaFxuXG4gIHZhciBrLFxuICAgICAgaSA9IDAsXG4gICAgICBsZW4gPSBzdHIubGVuZ3RoO1xuXG4gIGZvciAoOyBsZW4gPj0gNDsgKytpLCBsZW4gLT0gNCkge1xuICAgIGsgPSBzdHIuY2hhckNvZGVBdChpKSAmIDB4ZmYgfCAoc3RyLmNoYXJDb2RlQXQoKytpKSAmIDB4ZmYpIDw8IDggfCAoc3RyLmNoYXJDb2RlQXQoKytpKSAmIDB4ZmYpIDw8IDE2IHwgKHN0ci5jaGFyQ29kZUF0KCsraSkgJiAweGZmKSA8PCAyNDtcbiAgICBrID1cbiAgICAvKiBNYXRoLmltdWwoaywgbSk6ICovXG4gICAgKGsgJiAweGZmZmYpICogMHg1YmQxZTk5NSArICgoayA+Pj4gMTYpICogMHhlOTk1IDw8IDE2KTtcbiAgICBrIF49XG4gICAgLyogayA+Pj4gcjogKi9cbiAgICBrID4+PiAyNDtcbiAgICBoID1cbiAgICAvKiBNYXRoLmltdWwoaywgbSk6ICovXG4gICAgKGsgJiAweGZmZmYpICogMHg1YmQxZTk5NSArICgoayA+Pj4gMTYpICogMHhlOTk1IDw8IDE2KSBeXG4gICAgLyogTWF0aC5pbXVsKGgsIG0pOiAqL1xuICAgIChoICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUgKyAoKGggPj4+IDE2KSAqIDB4ZTk5NSA8PCAxNik7XG4gIH0gLy8gSGFuZGxlIHRoZSBsYXN0IGZldyBieXRlcyBvZiB0aGUgaW5wdXQgYXJyYXlcblxuXG4gIHN3aXRjaCAobGVuKSB7XG4gICAgY2FzZSAzOlxuICAgICAgaCBePSAoc3RyLmNoYXJDb2RlQXQoaSArIDIpICYgMHhmZikgPDwgMTY7XG5cbiAgICBjYXNlIDI6XG4gICAgICBoIF49IChzdHIuY2hhckNvZGVBdChpICsgMSkgJiAweGZmKSA8PCA4O1xuXG4gICAgY2FzZSAxOlxuICAgICAgaCBePSBzdHIuY2hhckNvZGVBdChpKSAmIDB4ZmY7XG4gICAgICBoID1cbiAgICAgIC8qIE1hdGguaW11bChoLCBtKTogKi9cbiAgICAgIChoICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUgKyAoKGggPj4+IDE2KSAqIDB4ZTk5NSA8PCAxNik7XG4gIH0gLy8gRG8gYSBmZXcgZmluYWwgbWl4ZXMgb2YgdGhlIGhhc2ggdG8gZW5zdXJlIHRoZSBsYXN0IGZld1xuICAvLyBieXRlcyBhcmUgd2VsbC1pbmNvcnBvcmF0ZWQuXG5cblxuICBoIF49IGggPj4+IDEzO1xuICBoID1cbiAgLyogTWF0aC5pbXVsKGgsIG0pOiAqL1xuICAoaCAmIDB4ZmZmZikgKiAweDViZDFlOTk1ICsgKChoID4+PiAxNikgKiAweGU5OTUgPDwgMTYpO1xuICByZXR1cm4gKChoIF4gaCA+Pj4gMTUpID4+PiAwKS50b1N0cmluZygzNik7XG59XG5cbmV4cG9ydCB7IG11cm11cjIgYXMgZGVmYXVsdCB9O1xuIiwgInZhciB1bml0bGVzc0tleXMgPSB7XG4gIGFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50OiAxLFxuICBhc3BlY3RSYXRpbzogMSxcbiAgYm9yZGVySW1hZ2VPdXRzZXQ6IDEsXG4gIGJvcmRlckltYWdlU2xpY2U6IDEsXG4gIGJvcmRlckltYWdlV2lkdGg6IDEsXG4gIGJveEZsZXg6IDEsXG4gIGJveEZsZXhHcm91cDogMSxcbiAgYm94T3JkaW5hbEdyb3VwOiAxLFxuICBjb2x1bW5Db3VudDogMSxcbiAgY29sdW1uczogMSxcbiAgZmxleDogMSxcbiAgZmxleEdyb3c6IDEsXG4gIGZsZXhQb3NpdGl2ZTogMSxcbiAgZmxleFNocmluazogMSxcbiAgZmxleE5lZ2F0aXZlOiAxLFxuICBmbGV4T3JkZXI6IDEsXG4gIGdyaWRSb3c6IDEsXG4gIGdyaWRSb3dFbmQ6IDEsXG4gIGdyaWRSb3dTcGFuOiAxLFxuICBncmlkUm93U3RhcnQ6IDEsXG4gIGdyaWRDb2x1bW46IDEsXG4gIGdyaWRDb2x1bW5FbmQ6IDEsXG4gIGdyaWRDb2x1bW5TcGFuOiAxLFxuICBncmlkQ29sdW1uU3RhcnQ6IDEsXG4gIG1zR3JpZFJvdzogMSxcbiAgbXNHcmlkUm93U3BhbjogMSxcbiAgbXNHcmlkQ29sdW1uOiAxLFxuICBtc0dyaWRDb2x1bW5TcGFuOiAxLFxuICBmb250V2VpZ2h0OiAxLFxuICBsaW5lSGVpZ2h0OiAxLFxuICBvcGFjaXR5OiAxLFxuICBvcmRlcjogMSxcbiAgb3JwaGFuczogMSxcbiAgdGFiU2l6ZTogMSxcbiAgd2lkb3dzOiAxLFxuICB6SW5kZXg6IDEsXG4gIHpvb206IDEsXG4gIFdlYmtpdExpbmVDbGFtcDogMSxcbiAgLy8gU1ZHLXJlbGF0ZWQgcHJvcGVydGllc1xuICBmaWxsT3BhY2l0eTogMSxcbiAgZmxvb2RPcGFjaXR5OiAxLFxuICBzdG9wT3BhY2l0eTogMSxcbiAgc3Ryb2tlRGFzaGFycmF5OiAxLFxuICBzdHJva2VEYXNob2Zmc2V0OiAxLFxuICBzdHJva2VNaXRlcmxpbWl0OiAxLFxuICBzdHJva2VPcGFjaXR5OiAxLFxuICBzdHJva2VXaWR0aDogMVxufTtcblxuZXhwb3J0IHsgdW5pdGxlc3NLZXlzIGFzIGRlZmF1bHQgfTtcbiIsICJpbXBvcnQgaGFzaFN0cmluZyBmcm9tICdAZW1vdGlvbi9oYXNoJztcbmltcG9ydCB1bml0bGVzcyBmcm9tICdAZW1vdGlvbi91bml0bGVzcyc7XG5pbXBvcnQgbWVtb2l6ZSBmcm9tICdAZW1vdGlvbi9tZW1vaXplJztcblxudmFyIElMTEVHQUxfRVNDQVBFX1NFUVVFTkNFX0VSUk9SID0gXCJZb3UgaGF2ZSBpbGxlZ2FsIGVzY2FwZSBzZXF1ZW5jZSBpbiB5b3VyIHRlbXBsYXRlIGxpdGVyYWwsIG1vc3QgbGlrZWx5IGluc2lkZSBjb250ZW50J3MgcHJvcGVydHkgdmFsdWUuXFxuQmVjYXVzZSB5b3Ugd3JpdGUgeW91ciBDU1MgaW5zaWRlIGEgSmF2YVNjcmlwdCBzdHJpbmcgeW91IGFjdHVhbGx5IGhhdmUgdG8gZG8gZG91YmxlIGVzY2FwaW5nLCBzbyBmb3IgZXhhbXBsZSBcXFwiY29udGVudDogJ1xcXFwwMGQ3JztcXFwiIHNob3VsZCBiZWNvbWUgXFxcImNvbnRlbnQ6ICdcXFxcXFxcXDAwZDcnO1xcXCIuXFxuWW91IGNhbiByZWFkIG1vcmUgYWJvdXQgdGhpcyBoZXJlOlxcbmh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL1RlbXBsYXRlX2xpdGVyYWxzI0VTMjAxOF9yZXZpc2lvbl9vZl9pbGxlZ2FsX2VzY2FwZV9zZXF1ZW5jZXNcIjtcbnZhciBVTkRFRklORURfQVNfT0JKRUNUX0tFWV9FUlJPUiA9IFwiWW91IGhhdmUgcGFzc2VkIGluIGZhbHN5IHZhbHVlIGFzIHN0eWxlIG9iamVjdCdzIGtleSAoY2FuIGhhcHBlbiB3aGVuIGluIGV4YW1wbGUgeW91IHBhc3MgdW5leHBvcnRlZCBjb21wb25lbnQgYXMgY29tcHV0ZWQga2V5KS5cIjtcbnZhciBoeXBoZW5hdGVSZWdleCA9IC9bQS1aXXxebXMvZztcbnZhciBhbmltYXRpb25SZWdleCA9IC9fRU1PXyhbXl9dKz8pXyhbXl0qPylfRU1PXy9nO1xuXG52YXIgaXNDdXN0b21Qcm9wZXJ0eSA9IGZ1bmN0aW9uIGlzQ3VzdG9tUHJvcGVydHkocHJvcGVydHkpIHtcbiAgcmV0dXJuIHByb3BlcnR5LmNoYXJDb2RlQXQoMSkgPT09IDQ1O1xufTtcblxudmFyIGlzUHJvY2Vzc2FibGVWYWx1ZSA9IGZ1bmN0aW9uIGlzUHJvY2Vzc2FibGVWYWx1ZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgIT09ICdib29sZWFuJztcbn07XG5cbnZhciBwcm9jZXNzU3R5bGVOYW1lID0gLyogI19fUFVSRV9fICovbWVtb2l6ZShmdW5jdGlvbiAoc3R5bGVOYW1lKSB7XG4gIHJldHVybiBpc0N1c3RvbVByb3BlcnR5KHN0eWxlTmFtZSkgPyBzdHlsZU5hbWUgOiBzdHlsZU5hbWUucmVwbGFjZShoeXBoZW5hdGVSZWdleCwgJy0kJicpLnRvTG93ZXJDYXNlKCk7XG59KTtcblxudmFyIHByb2Nlc3NTdHlsZVZhbHVlID0gZnVuY3Rpb24gcHJvY2Vzc1N0eWxlVmFsdWUoa2V5LCB2YWx1ZSkge1xuICBzd2l0Y2ggKGtleSkge1xuICAgIGNhc2UgJ2FuaW1hdGlvbic6XG4gICAgY2FzZSAnYW5pbWF0aW9uTmFtZSc6XG4gICAgICB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoYW5pbWF0aW9uUmVnZXgsIGZ1bmN0aW9uIChtYXRjaCwgcDEsIHAyKSB7XG4gICAgICAgICAgICBjdXJzb3IgPSB7XG4gICAgICAgICAgICAgIG5hbWU6IHAxLFxuICAgICAgICAgICAgICBzdHlsZXM6IHAyLFxuICAgICAgICAgICAgICBuZXh0OiBjdXJzb3JcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gcDE7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgfVxuXG4gIGlmICh1bml0bGVzc1trZXldICE9PSAxICYmICFpc0N1c3RvbVByb3BlcnR5KGtleSkgJiYgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiB2YWx1ZSAhPT0gMCkge1xuICAgIHJldHVybiB2YWx1ZSArICdweCc7XG4gIH1cblxuICByZXR1cm4gdmFsdWU7XG59O1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgY29udGVudFZhbHVlUGF0dGVybiA9IC8odmFyfGF0dHJ8Y291bnRlcnM/fHVybHxlbGVtZW50fCgoKHJlcGVhdGluZy0pPyhsaW5lYXJ8cmFkaWFsKSl8Y29uaWMpLWdyYWRpZW50KVxcKHwobm8tKT8ob3BlbnxjbG9zZSktcXVvdGUvO1xuICB2YXIgY29udGVudFZhbHVlcyA9IFsnbm9ybWFsJywgJ25vbmUnLCAnaW5pdGlhbCcsICdpbmhlcml0JywgJ3Vuc2V0J107XG4gIHZhciBvbGRQcm9jZXNzU3R5bGVWYWx1ZSA9IHByb2Nlc3NTdHlsZVZhbHVlO1xuICB2YXIgbXNQYXR0ZXJuID0gL14tbXMtLztcbiAgdmFyIGh5cGhlblBhdHRlcm4gPSAvLSguKS9nO1xuICB2YXIgaHlwaGVuYXRlZENhY2hlID0ge307XG5cbiAgcHJvY2Vzc1N0eWxlVmFsdWUgPSBmdW5jdGlvbiBwcm9jZXNzU3R5bGVWYWx1ZShrZXksIHZhbHVlKSB7XG4gICAgaWYgKGtleSA9PT0gJ2NvbnRlbnQnKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJyB8fCBjb250ZW50VmFsdWVzLmluZGV4T2YodmFsdWUpID09PSAtMSAmJiAhY29udGVudFZhbHVlUGF0dGVybi50ZXN0KHZhbHVlKSAmJiAodmFsdWUuY2hhckF0KDApICE9PSB2YWx1ZS5jaGFyQXQodmFsdWUubGVuZ3RoIC0gMSkgfHwgdmFsdWUuY2hhckF0KDApICE9PSAnXCInICYmIHZhbHVlLmNoYXJBdCgwKSAhPT0gXCInXCIpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIllvdSBzZWVtIHRvIGJlIHVzaW5nIGEgdmFsdWUgZm9yICdjb250ZW50JyB3aXRob3V0IHF1b3RlcywgdHJ5IHJlcGxhY2luZyBpdCB3aXRoIGBjb250ZW50OiAnXFxcIlwiICsgdmFsdWUgKyBcIlxcXCInYFwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcHJvY2Vzc2VkID0gb2xkUHJvY2Vzc1N0eWxlVmFsdWUoa2V5LCB2YWx1ZSk7XG5cbiAgICBpZiAocHJvY2Vzc2VkICE9PSAnJyAmJiAhaXNDdXN0b21Qcm9wZXJ0eShrZXkpICYmIGtleS5pbmRleE9mKCctJykgIT09IC0xICYmIGh5cGhlbmF0ZWRDYWNoZVtrZXldID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGh5cGhlbmF0ZWRDYWNoZVtrZXldID0gdHJ1ZTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJVc2luZyBrZWJhYi1jYXNlIGZvciBjc3MgcHJvcGVydGllcyBpbiBvYmplY3RzIGlzIG5vdCBzdXBwb3J0ZWQuIERpZCB5b3UgbWVhbiBcIiArIGtleS5yZXBsYWNlKG1zUGF0dGVybiwgJ21zLScpLnJlcGxhY2UoaHlwaGVuUGF0dGVybiwgZnVuY3Rpb24gKHN0ciwgX2NoYXIpIHtcbiAgICAgICAgcmV0dXJuIF9jaGFyLnRvVXBwZXJDYXNlKCk7XG4gICAgICB9KSArIFwiP1wiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvY2Vzc2VkO1xuICB9O1xufVxuXG52YXIgbm9Db21wb25lbnRTZWxlY3Rvck1lc3NhZ2UgPSAnQ29tcG9uZW50IHNlbGVjdG9ycyBjYW4gb25seSBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggJyArICdAZW1vdGlvbi9iYWJlbC1wbHVnaW4sIHRoZSBzd2MgRW1vdGlvbiBwbHVnaW4sIG9yIGFub3RoZXIgRW1vdGlvbi1hd2FyZSAnICsgJ2NvbXBpbGVyIHRyYW5zZm9ybS4nO1xuXG5mdW5jdGlvbiBoYW5kbGVJbnRlcnBvbGF0aW9uKG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCBpbnRlcnBvbGF0aW9uKSB7XG4gIGlmIChpbnRlcnBvbGF0aW9uID09IG51bGwpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBpZiAoaW50ZXJwb2xhdGlvbi5fX2Vtb3Rpb25fc3R5bGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBpbnRlcnBvbGF0aW9uLnRvU3RyaW5nKCkgPT09ICdOT19DT01QT05FTlRfU0VMRUNUT1InKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3Iobm9Db21wb25lbnRTZWxlY3Rvck1lc3NhZ2UpO1xuICAgIH1cblxuICAgIHJldHVybiBpbnRlcnBvbGF0aW9uO1xuICB9XG5cbiAgc3dpdGNoICh0eXBlb2YgaW50ZXJwb2xhdGlvbikge1xuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG5cbiAgICBjYXNlICdvYmplY3QnOlxuICAgICAge1xuICAgICAgICBpZiAoaW50ZXJwb2xhdGlvbi5hbmltID09PSAxKSB7XG4gICAgICAgICAgY3Vyc29yID0ge1xuICAgICAgICAgICAgbmFtZTogaW50ZXJwb2xhdGlvbi5uYW1lLFxuICAgICAgICAgICAgc3R5bGVzOiBpbnRlcnBvbGF0aW9uLnN0eWxlcyxcbiAgICAgICAgICAgIG5leHQ6IGN1cnNvclxuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIGludGVycG9sYXRpb24ubmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbnRlcnBvbGF0aW9uLnN0eWxlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdmFyIG5leHQgPSBpbnRlcnBvbGF0aW9uLm5leHQ7XG5cbiAgICAgICAgICBpZiAobmV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyBub3QgdGhlIG1vc3QgZWZmaWNpZW50IHRoaW5nIGV2ZXIgYnV0IHRoaXMgaXMgYSBwcmV0dHkgcmFyZSBjYXNlXG4gICAgICAgICAgICAvLyBhbmQgdGhlcmUgd2lsbCBiZSB2ZXJ5IGZldyBpdGVyYXRpb25zIG9mIHRoaXMgZ2VuZXJhbGx5XG4gICAgICAgICAgICB3aGlsZSAobmV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIGN1cnNvciA9IHtcbiAgICAgICAgICAgICAgICBuYW1lOiBuZXh0Lm5hbWUsXG4gICAgICAgICAgICAgICAgc3R5bGVzOiBuZXh0LnN0eWxlcyxcbiAgICAgICAgICAgICAgICBuZXh0OiBjdXJzb3JcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgbmV4dCA9IG5leHQubmV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgc3R5bGVzID0gaW50ZXJwb2xhdGlvbi5zdHlsZXMgKyBcIjtcIjtcblxuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGludGVycG9sYXRpb24ubWFwICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHN0eWxlcyArPSBpbnRlcnBvbGF0aW9uLm1hcDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gc3R5bGVzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNyZWF0ZVN0cmluZ0Zyb21PYmplY3QobWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIGludGVycG9sYXRpb24pO1xuICAgICAgfVxuXG4gICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAge1xuICAgICAgICBpZiAobWVyZ2VkUHJvcHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHZhciBwcmV2aW91c0N1cnNvciA9IGN1cnNvcjtcbiAgICAgICAgICB2YXIgcmVzdWx0ID0gaW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcyk7XG4gICAgICAgICAgY3Vyc29yID0gcHJldmlvdXNDdXJzb3I7XG4gICAgICAgICAgcmV0dXJuIGhhbmRsZUludGVycG9sYXRpb24obWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIHJlc3VsdCk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Z1bmN0aW9ucyB0aGF0IGFyZSBpbnRlcnBvbGF0ZWQgaW4gY3NzIGNhbGxzIHdpbGwgYmUgc3RyaW5naWZpZWQuXFxuJyArICdJZiB5b3Ugd2FudCB0byBoYXZlIGEgY3NzIGNhbGwgYmFzZWQgb24gcHJvcHMsIGNyZWF0ZSBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNzcyBjYWxsIGxpa2UgdGhpc1xcbicgKyAnbGV0IGR5bmFtaWNTdHlsZSA9IChwcm9wcykgPT4gY3NzYGNvbG9yOiAke3Byb3BzLmNvbG9yfWBcXG4nICsgJ0l0IGNhbiBiZSBjYWxsZWQgZGlyZWN0bHkgd2l0aCBwcm9wcyBvciBpbnRlcnBvbGF0ZWQgaW4gYSBzdHlsZWQgY2FsbCBsaWtlIHRoaXNcXG4nICsgXCJsZXQgU29tZUNvbXBvbmVudCA9IHN0eWxlZCgnZGl2JylgJHtkeW5hbWljU3R5bGV9YFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHZhciBtYXRjaGVkID0gW107XG4gICAgICAgIHZhciByZXBsYWNlZCA9IGludGVycG9sYXRpb24ucmVwbGFjZShhbmltYXRpb25SZWdleCwgZnVuY3Rpb24gKG1hdGNoLCBwMSwgcDIpIHtcbiAgICAgICAgICB2YXIgZmFrZVZhck5hbWUgPSBcImFuaW1hdGlvblwiICsgbWF0Y2hlZC5sZW5ndGg7XG4gICAgICAgICAgbWF0Y2hlZC5wdXNoKFwiY29uc3QgXCIgKyBmYWtlVmFyTmFtZSArIFwiID0ga2V5ZnJhbWVzYFwiICsgcDIucmVwbGFjZSgvXkBrZXlmcmFtZXMgYW5pbWF0aW9uLVxcdysvLCAnJykgKyBcImBcIik7XG4gICAgICAgICAgcmV0dXJuIFwiJHtcIiArIGZha2VWYXJOYW1lICsgXCJ9XCI7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChtYXRjaGVkLmxlbmd0aCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2BrZXlmcmFtZXNgIG91dHB1dCBnb3QgaW50ZXJwb2xhdGVkIGludG8gcGxhaW4gc3RyaW5nLCBwbGVhc2Ugd3JhcCBpdCB3aXRoIGBjc3NgLlxcblxcbicgKyAnSW5zdGVhZCBvZiBkb2luZyB0aGlzOlxcblxcbicgKyBbXS5jb25jYXQobWF0Y2hlZCwgW1wiYFwiICsgcmVwbGFjZWQgKyBcImBcIl0pLmpvaW4oJ1xcbicpICsgJ1xcblxcbllvdSBzaG91bGQgd3JhcCBpdCB3aXRoIGBjc3NgIGxpa2UgdGhpczpcXG5cXG4nICsgKFwiY3NzYFwiICsgcmVwbGFjZWQgKyBcImBcIikpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuICB9IC8vIGZpbmFsaXplIHN0cmluZyB2YWx1ZXMgKHJlZ3VsYXIgc3RyaW5ncyBhbmQgZnVuY3Rpb25zIGludGVycG9sYXRlZCBpbnRvIGNzcyBjYWxscylcblxuXG4gIGlmIChyZWdpc3RlcmVkID09IG51bGwpIHtcbiAgICByZXR1cm4gaW50ZXJwb2xhdGlvbjtcbiAgfVxuXG4gIHZhciBjYWNoZWQgPSByZWdpc3RlcmVkW2ludGVycG9sYXRpb25dO1xuICByZXR1cm4gY2FjaGVkICE9PSB1bmRlZmluZWQgPyBjYWNoZWQgOiBpbnRlcnBvbGF0aW9uO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVTdHJpbmdGcm9tT2JqZWN0KG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCBvYmopIHtcbiAgdmFyIHN0cmluZyA9ICcnO1xuXG4gIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iai5sZW5ndGg7IGkrKykge1xuICAgICAgc3RyaW5nICs9IGhhbmRsZUludGVycG9sYXRpb24obWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIG9ialtpXSkgKyBcIjtcIjtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgX2tleSBpbiBvYmopIHtcbiAgICAgIHZhciB2YWx1ZSA9IG9ialtfa2V5XTtcblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKHJlZ2lzdGVyZWQgIT0gbnVsbCAmJiByZWdpc3RlcmVkW3ZhbHVlXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc3RyaW5nICs9IF9rZXkgKyBcIntcIiArIHJlZ2lzdGVyZWRbdmFsdWVdICsgXCJ9XCI7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNQcm9jZXNzYWJsZVZhbHVlKHZhbHVlKSkge1xuICAgICAgICAgIHN0cmluZyArPSBwcm9jZXNzU3R5bGVOYW1lKF9rZXkpICsgXCI6XCIgKyBwcm9jZXNzU3R5bGVWYWx1ZShfa2V5LCB2YWx1ZSkgKyBcIjtcIjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKF9rZXkgPT09ICdOT19DT01QT05FTlRfU0VMRUNUT1InICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Iobm9Db21wb25lbnRTZWxlY3Rvck1lc3NhZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHR5cGVvZiB2YWx1ZVswXSA9PT0gJ3N0cmluZycgJiYgKHJlZ2lzdGVyZWQgPT0gbnVsbCB8fCByZWdpc3RlcmVkW3ZhbHVlWzBdXSA9PT0gdW5kZWZpbmVkKSkge1xuICAgICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCB2YWx1ZS5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGlmIChpc1Byb2Nlc3NhYmxlVmFsdWUodmFsdWVbX2ldKSkge1xuICAgICAgICAgICAgICBzdHJpbmcgKz0gcHJvY2Vzc1N0eWxlTmFtZShfa2V5KSArIFwiOlwiICsgcHJvY2Vzc1N0eWxlVmFsdWUoX2tleSwgdmFsdWVbX2ldKSArIFwiO1wiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgaW50ZXJwb2xhdGVkID0gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgdmFsdWUpO1xuXG4gICAgICAgICAgc3dpdGNoIChfa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdhbmltYXRpb24nOlxuICAgICAgICAgICAgY2FzZSAnYW5pbWF0aW9uTmFtZSc6XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdHJpbmcgKz0gcHJvY2Vzc1N0eWxlTmFtZShfa2V5KSArIFwiOlwiICsgaW50ZXJwb2xhdGVkICsgXCI7XCI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIF9rZXkgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFVOREVGSU5FRF9BU19PQkpFQ1RfS0VZX0VSUk9SKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBzdHJpbmcgKz0gX2tleSArIFwie1wiICsgaW50ZXJwb2xhdGVkICsgXCJ9XCI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RyaW5nO1xufVxuXG52YXIgbGFiZWxQYXR0ZXJuID0gL2xhYmVsOlxccyooW15cXHM7XFxue10rKVxccyooO3wkKS9nO1xudmFyIHNvdXJjZU1hcFBhdHRlcm47XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHNvdXJjZU1hcFBhdHRlcm4gPSAvXFwvXFwqI1xcc3NvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvblxcL2pzb247XFxTK1xccytcXCpcXC8vZztcbn0gLy8gdGhpcyBpcyB0aGUgY3Vyc29yIGZvciBrZXlmcmFtZXNcbi8vIGtleWZyYW1lcyBhcmUgc3RvcmVkIG9uIHRoZSBTZXJpYWxpemVkU3R5bGVzIG9iamVjdCBhcyBhIGxpbmtlZCBsaXN0XG5cblxudmFyIGN1cnNvcjtcbnZhciBzZXJpYWxpemVTdHlsZXMgPSBmdW5jdGlvbiBzZXJpYWxpemVTdHlsZXMoYXJncywgcmVnaXN0ZXJlZCwgbWVyZ2VkUHJvcHMpIHtcbiAgaWYgKGFyZ3MubGVuZ3RoID09PSAxICYmIHR5cGVvZiBhcmdzWzBdID09PSAnb2JqZWN0JyAmJiBhcmdzWzBdICE9PSBudWxsICYmIGFyZ3NbMF0uc3R5bGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gYXJnc1swXTtcbiAgfVxuXG4gIHZhciBzdHJpbmdNb2RlID0gdHJ1ZTtcbiAgdmFyIHN0eWxlcyA9ICcnO1xuICBjdXJzb3IgPSB1bmRlZmluZWQ7XG4gIHZhciBzdHJpbmdzID0gYXJnc1swXTtcblxuICBpZiAoc3RyaW5ncyA9PSBudWxsIHx8IHN0cmluZ3MucmF3ID09PSB1bmRlZmluZWQpIHtcbiAgICBzdHJpbmdNb2RlID0gZmFsc2U7XG4gICAgc3R5bGVzICs9IGhhbmRsZUludGVycG9sYXRpb24obWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIHN0cmluZ3MpO1xuICB9IGVsc2Uge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHN0cmluZ3NbMF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc29sZS5lcnJvcihJTExFR0FMX0VTQ0FQRV9TRVFVRU5DRV9FUlJPUik7XG4gICAgfVxuXG4gICAgc3R5bGVzICs9IHN0cmluZ3NbMF07XG4gIH0gLy8gd2Ugc3RhcnQgYXQgMSBzaW5jZSB3ZSd2ZSBhbHJlYWR5IGhhbmRsZWQgdGhlIGZpcnN0IGFyZ1xuXG5cbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgc3R5bGVzICs9IGhhbmRsZUludGVycG9sYXRpb24obWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIGFyZ3NbaV0pO1xuXG4gICAgaWYgKHN0cmluZ01vZGUpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHN0cmluZ3NbaV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKElMTEVHQUxfRVNDQVBFX1NFUVVFTkNFX0VSUk9SKTtcbiAgICAgIH1cblxuICAgICAgc3R5bGVzICs9IHN0cmluZ3NbaV07XG4gICAgfVxuICB9XG5cbiAgdmFyIHNvdXJjZU1hcDtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHN0eWxlcyA9IHN0eWxlcy5yZXBsYWNlKHNvdXJjZU1hcFBhdHRlcm4sIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgc291cmNlTWFwID0gbWF0Y2g7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfSk7XG4gIH0gLy8gdXNpbmcgYSBnbG9iYWwgcmVnZXggd2l0aCAuZXhlYyBpcyBzdGF0ZWZ1bCBzbyBsYXN0SW5kZXggaGFzIHRvIGJlIHJlc2V0IGVhY2ggdGltZVxuXG5cbiAgbGFiZWxQYXR0ZXJuLmxhc3RJbmRleCA9IDA7XG4gIHZhciBpZGVudGlmaWVyTmFtZSA9ICcnO1xuICB2YXIgbWF0Y2g7IC8vIGh0dHBzOi8vZXNiZW5jaC5jb20vYmVuY2gvNWI4MDljMmNmMjk0OTgwMGEwZjYxZmI1XG5cbiAgd2hpbGUgKChtYXRjaCA9IGxhYmVsUGF0dGVybi5leGVjKHN0eWxlcykpICE9PSBudWxsKSB7XG4gICAgaWRlbnRpZmllck5hbWUgKz0gJy0nICsgLy8gJEZsb3dGaXhNZSB3ZSBrbm93IGl0J3Mgbm90IG51bGxcbiAgICBtYXRjaFsxXTtcbiAgfVxuXG4gIHZhciBuYW1lID0gaGFzaFN0cmluZyhzdHlsZXMpICsgaWRlbnRpZmllck5hbWU7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyAkRmxvd0ZpeE1lIFNlcmlhbGl6ZWRTdHlsZXMgdHlwZSBkb2Vzbid0IGhhdmUgdG9TdHJpbmcgcHJvcGVydHkgKGFuZCB3ZSBkb24ndCB3YW50IHRvIGFkZCBpdClcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogbmFtZSxcbiAgICAgIHN0eWxlczogc3R5bGVzLFxuICAgICAgbWFwOiBzb3VyY2VNYXAsXG4gICAgICBuZXh0OiBjdXJzb3IsXG4gICAgICB0b1N0cmluZzogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBuYW1lLFxuICAgIHN0eWxlczogc3R5bGVzLFxuICAgIG5leHQ6IGN1cnNvclxuICB9O1xufTtcblxuZXhwb3J0IHsgc2VyaWFsaXplU3R5bGVzIH07XG4iLCAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG52YXIgc3luY0ZhbGxiYWNrID0gZnVuY3Rpb24gc3luY0ZhbGxiYWNrKGNyZWF0ZSkge1xuICByZXR1cm4gY3JlYXRlKCk7XG59O1xuXG52YXIgdXNlSW5zZXJ0aW9uRWZmZWN0ID0gUmVhY3RbJ3VzZUluc2VydGlvbicgKyAnRWZmZWN0J10gPyBSZWFjdFsndXNlSW5zZXJ0aW9uJyArICdFZmZlY3QnXSA6IGZhbHNlO1xudmFyIHVzZUluc2VydGlvbkVmZmVjdEFsd2F5c1dpdGhTeW5jRmFsbGJhY2sgPSB1c2VJbnNlcnRpb25FZmZlY3QgfHwgc3luY0ZhbGxiYWNrO1xudmFyIHVzZUluc2VydGlvbkVmZmVjdFdpdGhMYXlvdXRGYWxsYmFjayA9IHVzZUluc2VydGlvbkVmZmVjdCB8fCBSZWFjdC51c2VMYXlvdXRFZmZlY3Q7XG5cbmV4cG9ydCB7IHVzZUluc2VydGlvbkVmZmVjdEFsd2F5c1dpdGhTeW5jRmFsbGJhY2ssIHVzZUluc2VydGlvbkVmZmVjdFdpdGhMYXlvdXRGYWxsYmFjayB9O1xuIiwgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUNvbnRleHQsIGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY3JlYXRlQ2FjaGUgZnJvbSAnQGVtb3Rpb24vY2FjaGUnO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHMnO1xuaW1wb3J0IHdlYWtNZW1vaXplIGZyb20gJ0BlbW90aW9uL3dlYWstbWVtb2l6ZSc7XG5pbXBvcnQgaG9pc3ROb25SZWFjdFN0YXRpY3MgZnJvbSAnLi4vX2lzb2xhdGVkLWhucnMvZGlzdC9lbW90aW9uLXJlYWN0LV9pc29sYXRlZC1obnJzLmJyb3dzZXIuZXNtLmpzJztcbmltcG9ydCB7IGdldFJlZ2lzdGVyZWRTdHlsZXMsIHJlZ2lzdGVyU3R5bGVzLCBpbnNlcnRTdHlsZXMgfSBmcm9tICdAZW1vdGlvbi91dGlscyc7XG5pbXBvcnQgeyBzZXJpYWxpemVTdHlsZXMgfSBmcm9tICdAZW1vdGlvbi9zZXJpYWxpemUnO1xuaW1wb3J0IHsgdXNlSW5zZXJ0aW9uRWZmZWN0QWx3YXlzV2l0aFN5bmNGYWxsYmFjayB9IGZyb20gJ0BlbW90aW9uL3VzZS1pbnNlcnRpb24tZWZmZWN0LXdpdGgtZmFsbGJhY2tzJztcblxudmFyIGlzQnJvd3NlciA9IFwib2JqZWN0XCIgIT09ICd1bmRlZmluZWQnO1xudmFyIGhhc093biA9IHt9Lmhhc093blByb3BlcnR5O1xuXG52YXIgRW1vdGlvbkNhY2hlQ29udGV4dCA9IC8qICNfX1BVUkVfXyAqL1JlYWN0LmNyZWF0ZUNvbnRleHQoIC8vIHdlJ3JlIGRvaW5nIHRoaXMgdG8gYXZvaWQgcHJlY29uc3RydWN0J3MgZGVhZCBjb2RlIGVsaW1pbmF0aW9uIGluIHRoaXMgb25lIGNhc2Vcbi8vIGJlY2F1c2UgdGhpcyBtb2R1bGUgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciB0aGUgYnJvd3NlciBhbmQgbm9kZVxuLy8gYnV0IGl0J3MgYWxzbyByZXF1aXJlZCBpbiByZWFjdCBuYXRpdmUgYW5kIHNpbWlsYXIgZW52aXJvbm1lbnRzIHNvbWV0aW1lc1xuLy8gYW5kIHdlIGNvdWxkIGhhdmUgYSBzcGVjaWFsIGJ1aWxkIGp1c3QgZm9yIHRoYXRcbi8vIGJ1dCB0aGlzIGlzIG11Y2ggZWFzaWVyIGFuZCB0aGUgbmF0aXZlIHBhY2thZ2VzXG4vLyBtaWdodCB1c2UgYSBkaWZmZXJlbnQgdGhlbWUgY29udGV4dCBpbiB0aGUgZnV0dXJlIGFueXdheVxudHlwZW9mIEhUTUxFbGVtZW50ICE9PSAndW5kZWZpbmVkJyA/IC8qICNfX1BVUkVfXyAqL2NyZWF0ZUNhY2hlKHtcbiAga2V5OiAnY3NzJ1xufSkgOiBudWxsKTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgRW1vdGlvbkNhY2hlQ29udGV4dC5kaXNwbGF5TmFtZSA9ICdFbW90aW9uQ2FjaGVDb250ZXh0Jztcbn1cblxudmFyIENhY2hlUHJvdmlkZXIgPSBFbW90aW9uQ2FjaGVDb250ZXh0LlByb3ZpZGVyO1xudmFyIF9fdW5zYWZlX3VzZUVtb3Rpb25DYWNoZSA9IGZ1bmN0aW9uIHVzZUVtb3Rpb25DYWNoZSgpIHtcbiAgcmV0dXJuIHVzZUNvbnRleHQoRW1vdGlvbkNhY2hlQ29udGV4dCk7XG59O1xuXG52YXIgd2l0aEVtb3Rpb25DYWNoZSA9IGZ1bmN0aW9uIHdpdGhFbW90aW9uQ2FjaGUoZnVuYykge1xuICAvLyAkRmxvd0ZpeE1lXG4gIHJldHVybiAvKiNfX1BVUkVfXyovZm9yd2FyZFJlZihmdW5jdGlvbiAocHJvcHMsIHJlZikge1xuICAgIC8vIHRoZSBjYWNoZSB3aWxsIG5ldmVyIGJlIG51bGwgaW4gdGhlIGJyb3dzZXJcbiAgICB2YXIgY2FjaGUgPSB1c2VDb250ZXh0KEVtb3Rpb25DYWNoZUNvbnRleHQpO1xuICAgIHJldHVybiBmdW5jKHByb3BzLCBjYWNoZSwgcmVmKTtcbiAgfSk7XG59O1xuXG5pZiAoIWlzQnJvd3Nlcikge1xuICB3aXRoRW1vdGlvbkNhY2hlID0gZnVuY3Rpb24gd2l0aEVtb3Rpb25DYWNoZShmdW5jKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChwcm9wcykge1xuICAgICAgdmFyIGNhY2hlID0gdXNlQ29udGV4dChFbW90aW9uQ2FjaGVDb250ZXh0KTtcblxuICAgICAgaWYgKGNhY2hlID09PSBudWxsKSB7XG4gICAgICAgIC8vIHllcywgd2UncmUgcG90ZW50aWFsbHkgY3JlYXRpbmcgdGhpcyBvbiBldmVyeSByZW5kZXJcbiAgICAgICAgLy8gaXQgZG9lc24ndCBhY3R1YWxseSBtYXR0ZXIgdGhvdWdoIHNpbmNlIGl0J3Mgb25seSBvbiB0aGUgc2VydmVyXG4gICAgICAgIC8vIHNvIHRoZXJlIHdpbGwgb25seSBldmVyeSBiZSBhIHNpbmdsZSByZW5kZXJcbiAgICAgICAgLy8gdGhhdCBjb3VsZCBjaGFuZ2UgaW4gdGhlIGZ1dHVyZSBiZWNhdXNlIG9mIHN1c3BlbnNlIGFuZCBldGMuIGJ1dCBmb3Igbm93LFxuICAgICAgICAvLyB0aGlzIHdvcmtzIGFuZCBpIGRvbid0IHdhbnQgdG8gb3B0aW1pc2UgZm9yIGEgZnV0dXJlIHRoaW5nIHRoYXQgd2UgYXJlbid0IHN1cmUgYWJvdXRcbiAgICAgICAgY2FjaGUgPSBjcmVhdGVDYWNoZSh7XG4gICAgICAgICAga2V5OiAnY3NzJ1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEVtb3Rpb25DYWNoZUNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgICAgICB2YWx1ZTogY2FjaGVcbiAgICAgICAgfSwgZnVuYyhwcm9wcywgY2FjaGUpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmdW5jKHByb3BzLCBjYWNoZSk7XG4gICAgICB9XG4gICAgfTtcbiAgfTtcbn1cblxudmFyIFRoZW1lQ29udGV4dCA9IC8qICNfX1BVUkVfXyAqL1JlYWN0LmNyZWF0ZUNvbnRleHQoe30pO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBUaGVtZUNvbnRleHQuZGlzcGxheU5hbWUgPSAnRW1vdGlvblRoZW1lQ29udGV4dCc7XG59XG5cbnZhciB1c2VUaGVtZSA9IGZ1bmN0aW9uIHVzZVRoZW1lKCkge1xuICByZXR1cm4gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xufTtcblxudmFyIGdldFRoZW1lID0gZnVuY3Rpb24gZ2V0VGhlbWUob3V0ZXJUaGVtZSwgdGhlbWUpIHtcbiAgaWYgKHR5cGVvZiB0aGVtZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciBtZXJnZWRUaGVtZSA9IHRoZW1lKG91dGVyVGhlbWUpO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgKG1lcmdlZFRoZW1lID09IG51bGwgfHwgdHlwZW9mIG1lcmdlZFRoZW1lICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KG1lcmdlZFRoZW1lKSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignW1RoZW1lUHJvdmlkZXJdIFBsZWFzZSByZXR1cm4gYW4gb2JqZWN0IGZyb20geW91ciB0aGVtZSBmdW5jdGlvbiwgaS5lLiB0aGVtZT17KCkgPT4gKHt9KX0hJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lcmdlZFRoZW1lO1xuICB9XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgKHRoZW1lID09IG51bGwgfHwgdHlwZW9mIHRoZW1lICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KHRoZW1lKSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1tUaGVtZVByb3ZpZGVyXSBQbGVhc2UgbWFrZSB5b3VyIHRoZW1lIHByb3AgYSBwbGFpbiBvYmplY3QnKTtcbiAgfVxuXG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgb3V0ZXJUaGVtZSwgdGhlbWUpO1xufTtcblxudmFyIGNyZWF0ZUNhY2hlV2l0aFRoZW1lID0gLyogI19fUFVSRV9fICovd2Vha01lbW9pemUoZnVuY3Rpb24gKG91dGVyVGhlbWUpIHtcbiAgcmV0dXJuIHdlYWtNZW1vaXplKGZ1bmN0aW9uICh0aGVtZSkge1xuICAgIHJldHVybiBnZXRUaGVtZShvdXRlclRoZW1lLCB0aGVtZSk7XG4gIH0pO1xufSk7XG52YXIgVGhlbWVQcm92aWRlciA9IGZ1bmN0aW9uIFRoZW1lUHJvdmlkZXIocHJvcHMpIHtcbiAgdmFyIHRoZW1lID0gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xuXG4gIGlmIChwcm9wcy50aGVtZSAhPT0gdGhlbWUpIHtcbiAgICB0aGVtZSA9IGNyZWF0ZUNhY2hlV2l0aFRoZW1lKHRoZW1lKShwcm9wcy50aGVtZSk7XG4gIH1cblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVGhlbWVDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IHRoZW1lXG4gIH0sIHByb3BzLmNoaWxkcmVuKTtcbn07XG5mdW5jdGlvbiB3aXRoVGhlbWUoQ29tcG9uZW50KSB7XG4gIHZhciBjb21wb25lbnROYW1lID0gQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8IENvbXBvbmVudC5uYW1lIHx8ICdDb21wb25lbnQnO1xuXG4gIHZhciByZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIocHJvcHMsIHJlZikge1xuICAgIHZhciB0aGVtZSA9IFJlYWN0LnVzZUNvbnRleHQoVGhlbWVDb250ZXh0KTtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ29tcG9uZW50LCBfZXh0ZW5kcyh7XG4gICAgICB0aGVtZTogdGhlbWUsXG4gICAgICByZWY6IHJlZlxuICAgIH0sIHByb3BzKSk7XG4gIH07IC8vICRGbG93Rml4TWVcblxuXG4gIHZhciBXaXRoVGhlbWUgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihyZW5kZXIpO1xuICBXaXRoVGhlbWUuZGlzcGxheU5hbWUgPSBcIldpdGhUaGVtZShcIiArIGNvbXBvbmVudE5hbWUgKyBcIilcIjtcbiAgcmV0dXJuIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKFdpdGhUaGVtZSwgQ29tcG9uZW50KTtcbn1cblxudmFyIGdldExhc3RQYXJ0ID0gZnVuY3Rpb24gZ2V0TGFzdFBhcnQoZnVuY3Rpb25OYW1lKSB7XG4gIC8vIFRoZSBtYXRjaCBtYXkgYmUgc29tZXRoaW5nIGxpa2UgJ09iamVjdC5jcmVhdGVFbW90aW9uUHJvcHMnIG9yXG4gIC8vICdMb2FkZXIucHJvdG90eXBlLnJlbmRlcidcbiAgdmFyIHBhcnRzID0gZnVuY3Rpb25OYW1lLnNwbGl0KCcuJyk7XG4gIHJldHVybiBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXTtcbn07XG5cbnZhciBnZXRGdW5jdGlvbk5hbWVGcm9tU3RhY2tUcmFjZUxpbmUgPSBmdW5jdGlvbiBnZXRGdW5jdGlvbk5hbWVGcm9tU3RhY2tUcmFjZUxpbmUobGluZSkge1xuICAvLyBWOFxuICB2YXIgbWF0Y2ggPSAvXlxccythdFxccysoW0EtWmEtejAtOSQuXSspXFxzLy5leGVjKGxpbmUpO1xuICBpZiAobWF0Y2gpIHJldHVybiBnZXRMYXN0UGFydChtYXRjaFsxXSk7IC8vIFNhZmFyaSAvIEZpcmVmb3hcblxuICBtYXRjaCA9IC9eKFtBLVphLXowLTkkLl0rKUAvLmV4ZWMobGluZSk7XG4gIGlmIChtYXRjaCkgcmV0dXJuIGdldExhc3RQYXJ0KG1hdGNoWzFdKTtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbnZhciBpbnRlcm5hbFJlYWN0RnVuY3Rpb25OYW1lcyA9IC8qICNfX1BVUkVfXyAqL25ldyBTZXQoWydyZW5kZXJXaXRoSG9va3MnLCAncHJvY2Vzc0NoaWxkJywgJ2ZpbmlzaENsYXNzQ29tcG9uZW50JywgJ3JlbmRlclRvU3RyaW5nJ10pOyAvLyBUaGVzZSBpZGVudGlmaWVycyBjb21lIGZyb20gZXJyb3Igc3RhY2tzLCBzbyB0aGV5IGhhdmUgdG8gYmUgdmFsaWQgSlNcbi8vIGlkZW50aWZpZXJzLCB0aHVzIHdlIG9ubHkgbmVlZCB0byByZXBsYWNlIHdoYXQgaXMgYSB2YWxpZCBjaGFyYWN0ZXIgZm9yIEpTLFxuLy8gYnV0IG5vdCBmb3IgQ1NTLlxuXG52YXIgc2FuaXRpemVJZGVudGlmaWVyID0gZnVuY3Rpb24gc2FuaXRpemVJZGVudGlmaWVyKGlkZW50aWZpZXIpIHtcbiAgcmV0dXJuIGlkZW50aWZpZXIucmVwbGFjZSgvXFwkL2csICctJyk7XG59O1xuXG52YXIgZ2V0TGFiZWxGcm9tU3RhY2tUcmFjZSA9IGZ1bmN0aW9uIGdldExhYmVsRnJvbVN0YWNrVHJhY2Uoc3RhY2tUcmFjZSkge1xuICBpZiAoIXN0YWNrVHJhY2UpIHJldHVybiB1bmRlZmluZWQ7XG4gIHZhciBsaW5lcyA9IHN0YWNrVHJhY2Uuc3BsaXQoJ1xcbicpO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZnVuY3Rpb25OYW1lID0gZ2V0RnVuY3Rpb25OYW1lRnJvbVN0YWNrVHJhY2VMaW5lKGxpbmVzW2ldKTsgLy8gVGhlIGZpcnN0IGxpbmUgb2YgVjggc3RhY2sgdHJhY2VzIGlzIGp1c3QgXCJFcnJvclwiXG5cbiAgICBpZiAoIWZ1bmN0aW9uTmFtZSkgY29udGludWU7IC8vIElmIHdlIHJlYWNoIG9uZSBvZiB0aGVzZSwgd2UgaGF2ZSBnb25lIHRvbyBmYXIgYW5kIHNob3VsZCBxdWl0XG5cbiAgICBpZiAoaW50ZXJuYWxSZWFjdEZ1bmN0aW9uTmFtZXMuaGFzKGZ1bmN0aW9uTmFtZSkpIGJyZWFrOyAvLyBUaGUgY29tcG9uZW50IG5hbWUgaXMgdGhlIGZpcnN0IGZ1bmN0aW9uIGluIHRoZSBzdGFjayB0aGF0IHN0YXJ0cyB3aXRoIGFuXG4gICAgLy8gdXBwZXJjYXNlIGxldHRlclxuXG4gICAgaWYgKC9eW0EtWl0vLnRlc3QoZnVuY3Rpb25OYW1lKSkgcmV0dXJuIHNhbml0aXplSWRlbnRpZmllcihmdW5jdGlvbk5hbWUpO1xuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbnZhciB0eXBlUHJvcE5hbWUgPSAnX19FTU9USU9OX1RZUEVfUExFQVNFX0RPX05PVF9VU0VfXyc7XG52YXIgbGFiZWxQcm9wTmFtZSA9ICdfX0VNT1RJT05fTEFCRUxfUExFQVNFX0RPX05PVF9VU0VfXyc7XG52YXIgY3JlYXRlRW1vdGlvblByb3BzID0gZnVuY3Rpb24gY3JlYXRlRW1vdGlvblByb3BzKHR5cGUsIHByb3BzKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHR5cGVvZiBwcm9wcy5jc3MgPT09ICdzdHJpbmcnICYmIC8vIGNoZWNrIGlmIHRoZXJlIGlzIGEgY3NzIGRlY2xhcmF0aW9uXG4gIHByb3BzLmNzcy5pbmRleE9mKCc6JykgIT09IC0xKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiU3RyaW5ncyBhcmUgbm90IGFsbG93ZWQgYXMgY3NzIHByb3AgdmFsdWVzLCBwbGVhc2Ugd3JhcCBpdCBpbiBhIGNzcyB0ZW1wbGF0ZSBsaXRlcmFsIGZyb20gJ0BlbW90aW9uL3JlYWN0JyBsaWtlIHRoaXM6IGNzc2BcIiArIHByb3BzLmNzcyArIFwiYFwiKTtcbiAgfVxuXG4gIHZhciBuZXdQcm9wcyA9IHt9O1xuXG4gIGZvciAodmFyIGtleSBpbiBwcm9wcykge1xuICAgIGlmIChoYXNPd24uY2FsbChwcm9wcywga2V5KSkge1xuICAgICAgbmV3UHJvcHNba2V5XSA9IHByb3BzW2tleV07XG4gICAgfVxuICB9XG5cbiAgbmV3UHJvcHNbdHlwZVByb3BOYW1lXSA9IHR5cGU7IC8vIEZvciBwZXJmb3JtYW5jZSwgb25seSBjYWxsIGdldExhYmVsRnJvbVN0YWNrVHJhY2UgaW4gZGV2ZWxvcG1lbnQgYW5kIHdoZW5cbiAgLy8gdGhlIGxhYmVsIGhhc24ndCBhbHJlYWR5IGJlZW4gY29tcHV0ZWRcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhIXByb3BzLmNzcyAmJiAodHlwZW9mIHByb3BzLmNzcyAhPT0gJ29iamVjdCcgfHwgdHlwZW9mIHByb3BzLmNzcy5uYW1lICE9PSAnc3RyaW5nJyB8fCBwcm9wcy5jc3MubmFtZS5pbmRleE9mKCctJykgPT09IC0xKSkge1xuICAgIHZhciBsYWJlbCA9IGdldExhYmVsRnJvbVN0YWNrVHJhY2UobmV3IEVycm9yKCkuc3RhY2spO1xuICAgIGlmIChsYWJlbCkgbmV3UHJvcHNbbGFiZWxQcm9wTmFtZV0gPSBsYWJlbDtcbiAgfVxuXG4gIHJldHVybiBuZXdQcm9wcztcbn07XG5cbnZhciBJbnNlcnRpb24gPSBmdW5jdGlvbiBJbnNlcnRpb24oX3JlZikge1xuICB2YXIgY2FjaGUgPSBfcmVmLmNhY2hlLFxuICAgICAgc2VyaWFsaXplZCA9IF9yZWYuc2VyaWFsaXplZCxcbiAgICAgIGlzU3RyaW5nVGFnID0gX3JlZi5pc1N0cmluZ1RhZztcbiAgcmVnaXN0ZXJTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQsIGlzU3RyaW5nVGFnKTtcbiAgdXNlSW5zZXJ0aW9uRWZmZWN0QWx3YXlzV2l0aFN5bmNGYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGluc2VydFN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgaXNTdHJpbmdUYWcpO1xuICB9KTtcblxuICByZXR1cm4gbnVsbDtcbn07XG5cbnZhciBFbW90aW9uID0gLyogI19fUFVSRV9fICovd2l0aEVtb3Rpb25DYWNoZShmdW5jdGlvbiAocHJvcHMsIGNhY2hlLCByZWYpIHtcbiAgdmFyIGNzc1Byb3AgPSBwcm9wcy5jc3M7IC8vIHNvIHRoYXQgdXNpbmcgYGNzc2AgZnJvbSBgZW1vdGlvbmAgYW5kIHBhc3NpbmcgdGhlIHJlc3VsdCB0byB0aGUgY3NzIHByb3Agd29ya3NcbiAgLy8gbm90IHBhc3NpbmcgdGhlIHJlZ2lzdGVyZWQgY2FjaGUgdG8gc2VyaWFsaXplU3R5bGVzIGJlY2F1c2UgaXQgd291bGRcbiAgLy8gbWFrZSBjZXJ0YWluIGJhYmVsIG9wdGltaXNhdGlvbnMgbm90IHBvc3NpYmxlXG5cbiAgaWYgKHR5cGVvZiBjc3NQcm9wID09PSAnc3RyaW5nJyAmJiBjYWNoZS5yZWdpc3RlcmVkW2Nzc1Byb3BdICE9PSB1bmRlZmluZWQpIHtcbiAgICBjc3NQcm9wID0gY2FjaGUucmVnaXN0ZXJlZFtjc3NQcm9wXTtcbiAgfVxuXG4gIHZhciBXcmFwcGVkQ29tcG9uZW50ID0gcHJvcHNbdHlwZVByb3BOYW1lXTtcbiAgdmFyIHJlZ2lzdGVyZWRTdHlsZXMgPSBbY3NzUHJvcF07XG4gIHZhciBjbGFzc05hbWUgPSAnJztcblxuICBpZiAodHlwZW9mIHByb3BzLmNsYXNzTmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICBjbGFzc05hbWUgPSBnZXRSZWdpc3RlcmVkU3R5bGVzKGNhY2hlLnJlZ2lzdGVyZWQsIHJlZ2lzdGVyZWRTdHlsZXMsIHByb3BzLmNsYXNzTmFtZSk7XG4gIH0gZWxzZSBpZiAocHJvcHMuY2xhc3NOYW1lICE9IG51bGwpIHtcbiAgICBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUgKyBcIiBcIjtcbiAgfVxuXG4gIHZhciBzZXJpYWxpemVkID0gc2VyaWFsaXplU3R5bGVzKHJlZ2lzdGVyZWRTdHlsZXMsIHVuZGVmaW5lZCwgUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpKTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBzZXJpYWxpemVkLm5hbWUuaW5kZXhPZignLScpID09PSAtMSkge1xuICAgIHZhciBsYWJlbEZyb21TdGFjayA9IHByb3BzW2xhYmVsUHJvcE5hbWVdO1xuXG4gICAgaWYgKGxhYmVsRnJvbVN0YWNrKSB7XG4gICAgICBzZXJpYWxpemVkID0gc2VyaWFsaXplU3R5bGVzKFtzZXJpYWxpemVkLCAnbGFiZWw6JyArIGxhYmVsRnJvbVN0YWNrICsgJzsnXSk7XG4gICAgfVxuICB9XG5cbiAgY2xhc3NOYW1lICs9IGNhY2hlLmtleSArIFwiLVwiICsgc2VyaWFsaXplZC5uYW1lO1xuICB2YXIgbmV3UHJvcHMgPSB7fTtcblxuICBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHtcbiAgICBpZiAoaGFzT3duLmNhbGwocHJvcHMsIGtleSkgJiYga2V5ICE9PSAnY3NzJyAmJiBrZXkgIT09IHR5cGVQcm9wTmFtZSAmJiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJyB8fCBrZXkgIT09IGxhYmVsUHJvcE5hbWUpKSB7XG4gICAgICBuZXdQcm9wc1trZXldID0gcHJvcHNba2V5XTtcbiAgICB9XG4gIH1cblxuICBuZXdQcm9wcy5yZWYgPSByZWY7XG4gIG5ld1Byb3BzLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJbnNlcnRpb24sIHtcbiAgICBjYWNoZTogY2FjaGUsXG4gICAgc2VyaWFsaXplZDogc2VyaWFsaXplZCxcbiAgICBpc1N0cmluZ1RhZzogdHlwZW9mIFdyYXBwZWRDb21wb25lbnQgPT09ICdzdHJpbmcnXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChXcmFwcGVkQ29tcG9uZW50LCBuZXdQcm9wcykpO1xufSk7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIEVtb3Rpb24uZGlzcGxheU5hbWUgPSAnRW1vdGlvbkNzc1Byb3BJbnRlcm5hbCc7XG59XG5cbnZhciBFbW90aW9uJDEgPSBFbW90aW9uO1xuXG5leHBvcnQgeyBDYWNoZVByb3ZpZGVyIGFzIEMsIEVtb3Rpb24kMSBhcyBFLCBUaGVtZUNvbnRleHQgYXMgVCwgX191bnNhZmVfdXNlRW1vdGlvbkNhY2hlIGFzIF8sIFRoZW1lUHJvdmlkZXIgYXMgYSwgd2l0aFRoZW1lIGFzIGIsIGNyZWF0ZUVtb3Rpb25Qcm9wcyBhcyBjLCBoYXNPd24gYXMgaCwgaXNCcm93c2VyIGFzIGksIHVzZVRoZW1lIGFzIHUsIHdpdGhFbW90aW9uQ2FjaGUgYXMgdyB9O1xuIiwgImltcG9ydCB7IGggYXMgaGFzT3duLCBFIGFzIEVtb3Rpb24sIGMgYXMgY3JlYXRlRW1vdGlvblByb3BzLCB3IGFzIHdpdGhFbW90aW9uQ2FjaGUsIFQgYXMgVGhlbWVDb250ZXh0LCBpIGFzIGlzQnJvd3NlciQxIH0gZnJvbSAnLi9lbW90aW9uLWVsZW1lbnQtNDNjNmZlYTAuYnJvd3Nlci5lc20uanMnO1xuZXhwb3J0IHsgQyBhcyBDYWNoZVByb3ZpZGVyLCBUIGFzIFRoZW1lQ29udGV4dCwgYSBhcyBUaGVtZVByb3ZpZGVyLCBfIGFzIF9fdW5zYWZlX3VzZUVtb3Rpb25DYWNoZSwgdSBhcyB1c2VUaGVtZSwgdyBhcyB3aXRoRW1vdGlvbkNhY2hlLCBiIGFzIHdpdGhUaGVtZSB9IGZyb20gJy4vZW1vdGlvbi1lbGVtZW50LTQzYzZmZWEwLmJyb3dzZXIuZXNtLmpzJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGluc2VydFN0eWxlcywgcmVnaXN0ZXJTdHlsZXMsIGdldFJlZ2lzdGVyZWRTdHlsZXMgfSBmcm9tICdAZW1vdGlvbi91dGlscyc7XG5pbXBvcnQgeyB1c2VJbnNlcnRpb25FZmZlY3RXaXRoTGF5b3V0RmFsbGJhY2ssIHVzZUluc2VydGlvbkVmZmVjdEFsd2F5c1dpdGhTeW5jRmFsbGJhY2sgfSBmcm9tICdAZW1vdGlvbi91c2UtaW5zZXJ0aW9uLWVmZmVjdC13aXRoLWZhbGxiYWNrcyc7XG5pbXBvcnQgeyBzZXJpYWxpemVTdHlsZXMgfSBmcm9tICdAZW1vdGlvbi9zZXJpYWxpemUnO1xuaW1wb3J0ICdAZW1vdGlvbi9jYWNoZSc7XG5pbXBvcnQgJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXh0ZW5kcyc7XG5pbXBvcnQgJ0BlbW90aW9uL3dlYWstbWVtb2l6ZSc7XG5pbXBvcnQgJy4uL19pc29sYXRlZC1obnJzL2Rpc3QvZW1vdGlvbi1yZWFjdC1faXNvbGF0ZWQtaG5ycy5icm93c2VyLmVzbS5qcyc7XG5pbXBvcnQgJ2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzJztcblxudmFyIHBrZyA9IHtcblx0bmFtZTogXCJAZW1vdGlvbi9yZWFjdFwiLFxuXHR2ZXJzaW9uOiBcIjExLjExLjRcIixcblx0bWFpbjogXCJkaXN0L2Vtb3Rpb24tcmVhY3QuY2pzLmpzXCIsXG5cdG1vZHVsZTogXCJkaXN0L2Vtb3Rpb24tcmVhY3QuZXNtLmpzXCIsXG5cdGJyb3dzZXI6IHtcblx0XHRcIi4vZGlzdC9lbW90aW9uLXJlYWN0LmVzbS5qc1wiOiBcIi4vZGlzdC9lbW90aW9uLXJlYWN0LmJyb3dzZXIuZXNtLmpzXCJcblx0fSxcblx0ZXhwb3J0czoge1xuXHRcdFwiLlwiOiB7XG5cdFx0XHRtb2R1bGU6IHtcblx0XHRcdFx0d29ya2VyOiBcIi4vZGlzdC9lbW90aW9uLXJlYWN0Lndvcmtlci5lc20uanNcIixcblx0XHRcdFx0YnJvd3NlcjogXCIuL2Rpc3QvZW1vdGlvbi1yZWFjdC5icm93c2VyLmVzbS5qc1wiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogXCIuL2Rpc3QvZW1vdGlvbi1yZWFjdC5lc20uanNcIlxuXHRcdFx0fSxcblx0XHRcdFwiaW1wb3J0XCI6IFwiLi9kaXN0L2Vtb3Rpb24tcmVhY3QuY2pzLm1qc1wiLFxuXHRcdFx0XCJkZWZhdWx0XCI6IFwiLi9kaXN0L2Vtb3Rpb24tcmVhY3QuY2pzLmpzXCJcblx0XHR9LFxuXHRcdFwiLi9qc3gtcnVudGltZVwiOiB7XG5cdFx0XHRtb2R1bGU6IHtcblx0XHRcdFx0d29ya2VyOiBcIi4vanN4LXJ1bnRpbWUvZGlzdC9lbW90aW9uLXJlYWN0LWpzeC1ydW50aW1lLndvcmtlci5lc20uanNcIixcblx0XHRcdFx0YnJvd3NlcjogXCIuL2pzeC1ydW50aW1lL2Rpc3QvZW1vdGlvbi1yZWFjdC1qc3gtcnVudGltZS5icm93c2VyLmVzbS5qc1wiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogXCIuL2pzeC1ydW50aW1lL2Rpc3QvZW1vdGlvbi1yZWFjdC1qc3gtcnVudGltZS5lc20uanNcIlxuXHRcdFx0fSxcblx0XHRcdFwiaW1wb3J0XCI6IFwiLi9qc3gtcnVudGltZS9kaXN0L2Vtb3Rpb24tcmVhY3QtanN4LXJ1bnRpbWUuY2pzLm1qc1wiLFxuXHRcdFx0XCJkZWZhdWx0XCI6IFwiLi9qc3gtcnVudGltZS9kaXN0L2Vtb3Rpb24tcmVhY3QtanN4LXJ1bnRpbWUuY2pzLmpzXCJcblx0XHR9LFxuXHRcdFwiLi9faXNvbGF0ZWQtaG5yc1wiOiB7XG5cdFx0XHRtb2R1bGU6IHtcblx0XHRcdFx0d29ya2VyOiBcIi4vX2lzb2xhdGVkLWhucnMvZGlzdC9lbW90aW9uLXJlYWN0LV9pc29sYXRlZC1obnJzLndvcmtlci5lc20uanNcIixcblx0XHRcdFx0YnJvd3NlcjogXCIuL19pc29sYXRlZC1obnJzL2Rpc3QvZW1vdGlvbi1yZWFjdC1faXNvbGF0ZWQtaG5ycy5icm93c2VyLmVzbS5qc1wiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogXCIuL19pc29sYXRlZC1obnJzL2Rpc3QvZW1vdGlvbi1yZWFjdC1faXNvbGF0ZWQtaG5ycy5lc20uanNcIlxuXHRcdFx0fSxcblx0XHRcdFwiaW1wb3J0XCI6IFwiLi9faXNvbGF0ZWQtaG5ycy9kaXN0L2Vtb3Rpb24tcmVhY3QtX2lzb2xhdGVkLWhucnMuY2pzLm1qc1wiLFxuXHRcdFx0XCJkZWZhdWx0XCI6IFwiLi9faXNvbGF0ZWQtaG5ycy9kaXN0L2Vtb3Rpb24tcmVhY3QtX2lzb2xhdGVkLWhucnMuY2pzLmpzXCJcblx0XHR9LFxuXHRcdFwiLi9qc3gtZGV2LXJ1bnRpbWVcIjoge1xuXHRcdFx0bW9kdWxlOiB7XG5cdFx0XHRcdHdvcmtlcjogXCIuL2pzeC1kZXYtcnVudGltZS9kaXN0L2Vtb3Rpb24tcmVhY3QtanN4LWRldi1ydW50aW1lLndvcmtlci5lc20uanNcIixcblx0XHRcdFx0YnJvd3NlcjogXCIuL2pzeC1kZXYtcnVudGltZS9kaXN0L2Vtb3Rpb24tcmVhY3QtanN4LWRldi1ydW50aW1lLmJyb3dzZXIuZXNtLmpzXCIsXG5cdFx0XHRcdFwiZGVmYXVsdFwiOiBcIi4vanN4LWRldi1ydW50aW1lL2Rpc3QvZW1vdGlvbi1yZWFjdC1qc3gtZGV2LXJ1bnRpbWUuZXNtLmpzXCJcblx0XHRcdH0sXG5cdFx0XHRcImltcG9ydFwiOiBcIi4vanN4LWRldi1ydW50aW1lL2Rpc3QvZW1vdGlvbi1yZWFjdC1qc3gtZGV2LXJ1bnRpbWUuY2pzLm1qc1wiLFxuXHRcdFx0XCJkZWZhdWx0XCI6IFwiLi9qc3gtZGV2LXJ1bnRpbWUvZGlzdC9lbW90aW9uLXJlYWN0LWpzeC1kZXYtcnVudGltZS5janMuanNcIlxuXHRcdH0sXG5cdFx0XCIuL3BhY2thZ2UuanNvblwiOiBcIi4vcGFja2FnZS5qc29uXCIsXG5cdFx0XCIuL3R5cGVzL2Nzcy1wcm9wXCI6IFwiLi90eXBlcy9jc3MtcHJvcC5kLnRzXCIsXG5cdFx0XCIuL21hY3JvXCI6IHtcblx0XHRcdHR5cGVzOiB7XG5cdFx0XHRcdFwiaW1wb3J0XCI6IFwiLi9tYWNyby5kLm10c1wiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogXCIuL21hY3JvLmQudHNcIlxuXHRcdFx0fSxcblx0XHRcdFwiZGVmYXVsdFwiOiBcIi4vbWFjcm8uanNcIlxuXHRcdH1cblx0fSxcblx0dHlwZXM6IFwidHlwZXMvaW5kZXguZC50c1wiLFxuXHRmaWxlczogW1xuXHRcdFwic3JjXCIsXG5cdFx0XCJkaXN0XCIsXG5cdFx0XCJqc3gtcnVudGltZVwiLFxuXHRcdFwianN4LWRldi1ydW50aW1lXCIsXG5cdFx0XCJfaXNvbGF0ZWQtaG5yc1wiLFxuXHRcdFwidHlwZXMvKi5kLnRzXCIsXG5cdFx0XCJtYWNyby4qXCJcblx0XSxcblx0c2lkZUVmZmVjdHM6IGZhbHNlLFxuXHRhdXRob3I6IFwiRW1vdGlvbiBDb250cmlidXRvcnNcIixcblx0bGljZW5zZTogXCJNSVRcIixcblx0c2NyaXB0czoge1xuXHRcdFwidGVzdDp0eXBlc2NyaXB0XCI6IFwiZHRzbGludCB0eXBlc1wiXG5cdH0sXG5cdGRlcGVuZGVuY2llczoge1xuXHRcdFwiQGJhYmVsL3J1bnRpbWVcIjogXCJeNy4xOC4zXCIsXG5cdFx0XCJAZW1vdGlvbi9iYWJlbC1wbHVnaW5cIjogXCJeMTEuMTEuMFwiLFxuXHRcdFwiQGVtb3Rpb24vY2FjaGVcIjogXCJeMTEuMTEuMFwiLFxuXHRcdFwiQGVtb3Rpb24vc2VyaWFsaXplXCI6IFwiXjEuMS4zXCIsXG5cdFx0XCJAZW1vdGlvbi91c2UtaW5zZXJ0aW9uLWVmZmVjdC13aXRoLWZhbGxiYWNrc1wiOiBcIl4xLjAuMVwiLFxuXHRcdFwiQGVtb3Rpb24vdXRpbHNcIjogXCJeMS4yLjFcIixcblx0XHRcIkBlbW90aW9uL3dlYWstbWVtb2l6ZVwiOiBcIl4wLjMuMVwiLFxuXHRcdFwiaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3NcIjogXCJeMy4zLjFcIlxuXHR9LFxuXHRwZWVyRGVwZW5kZW5jaWVzOiB7XG5cdFx0cmVhY3Q6IFwiPj0xNi44LjBcIlxuXHR9LFxuXHRwZWVyRGVwZW5kZW5jaWVzTWV0YToge1xuXHRcdFwiQHR5cGVzL3JlYWN0XCI6IHtcblx0XHRcdG9wdGlvbmFsOiB0cnVlXG5cdFx0fVxuXHR9LFxuXHRkZXZEZXBlbmRlbmNpZXM6IHtcblx0XHRcIkBkZWZpbml0ZWx5dHlwZWQvZHRzbGludFwiOiBcIjAuMC4xMTJcIixcblx0XHRcIkBlbW90aW9uL2Nzc1wiOiBcIjExLjExLjJcIixcblx0XHRcIkBlbW90aW9uL2Nzcy1wcmV0dGlmaWVyXCI6IFwiMS4xLjNcIixcblx0XHRcIkBlbW90aW9uL3NlcnZlclwiOiBcIjExLjExLjBcIixcblx0XHRcIkBlbW90aW9uL3N0eWxlZFwiOiBcIjExLjExLjBcIixcblx0XHRcImh0bWwtdGFnLW5hbWVzXCI6IFwiXjEuMS4yXCIsXG5cdFx0cmVhY3Q6IFwiMTYuMTQuMFwiLFxuXHRcdFwic3ZnLXRhZy1uYW1lc1wiOiBcIl4xLjEuMVwiLFxuXHRcdHR5cGVzY3JpcHQ6IFwiXjQuNS41XCJcblx0fSxcblx0cmVwb3NpdG9yeTogXCJodHRwczovL2dpdGh1Yi5jb20vZW1vdGlvbi1qcy9lbW90aW9uL3RyZWUvbWFpbi9wYWNrYWdlcy9yZWFjdFwiLFxuXHRwdWJsaXNoQ29uZmlnOiB7XG5cdFx0YWNjZXNzOiBcInB1YmxpY1wiXG5cdH0sXG5cdFwidW1kOm1haW5cIjogXCJkaXN0L2Vtb3Rpb24tcmVhY3QudW1kLm1pbi5qc1wiLFxuXHRwcmVjb25zdHJ1Y3Q6IHtcblx0XHRlbnRyeXBvaW50czogW1xuXHRcdFx0XCIuL2luZGV4LmpzXCIsXG5cdFx0XHRcIi4vanN4LXJ1bnRpbWUuanNcIixcblx0XHRcdFwiLi9qc3gtZGV2LXJ1bnRpbWUuanNcIixcblx0XHRcdFwiLi9faXNvbGF0ZWQtaG5ycy5qc1wiXG5cdFx0XSxcblx0XHR1bWROYW1lOiBcImVtb3Rpb25SZWFjdFwiLFxuXHRcdGV4cG9ydHM6IHtcblx0XHRcdGVudkNvbmRpdGlvbnM6IFtcblx0XHRcdFx0XCJicm93c2VyXCIsXG5cdFx0XHRcdFwid29ya2VyXCJcblx0XHRcdF0sXG5cdFx0XHRleHRyYToge1xuXHRcdFx0XHRcIi4vdHlwZXMvY3NzLXByb3BcIjogXCIuL3R5cGVzL2Nzcy1wcm9wLmQudHNcIixcblx0XHRcdFx0XCIuL21hY3JvXCI6IHtcblx0XHRcdFx0XHR0eXBlczoge1xuXHRcdFx0XHRcdFx0XCJpbXBvcnRcIjogXCIuL21hY3JvLmQubXRzXCIsXG5cdFx0XHRcdFx0XHRcImRlZmF1bHRcIjogXCIuL21hY3JvLmQudHNcIlxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XCJkZWZhdWx0XCI6IFwiLi9tYWNyby5qc1wiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbnZhciBqc3ggPSBmdW5jdGlvbiBqc3godHlwZSwgcHJvcHMpIHtcbiAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG5cbiAgaWYgKHByb3BzID09IG51bGwgfHwgIWhhc093bi5jYWxsKHByb3BzLCAnY3NzJykpIHtcbiAgICAvLyAkRmxvd0ZpeE1lXG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQuYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcbiAgfVxuXG4gIHZhciBhcmdzTGVuZ3RoID0gYXJncy5sZW5ndGg7XG4gIHZhciBjcmVhdGVFbGVtZW50QXJnQXJyYXkgPSBuZXcgQXJyYXkoYXJnc0xlbmd0aCk7XG4gIGNyZWF0ZUVsZW1lbnRBcmdBcnJheVswXSA9IEVtb3Rpb247XG4gIGNyZWF0ZUVsZW1lbnRBcmdBcnJheVsxXSA9IGNyZWF0ZUVtb3Rpb25Qcm9wcyh0eXBlLCBwcm9wcyk7XG5cbiAgZm9yICh2YXIgaSA9IDI7IGkgPCBhcmdzTGVuZ3RoOyBpKyspIHtcbiAgICBjcmVhdGVFbGVtZW50QXJnQXJyYXlbaV0gPSBhcmdzW2ldO1xuICB9IC8vICRGbG93Rml4TWVcblxuXG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50LmFwcGx5KG51bGwsIGNyZWF0ZUVsZW1lbnRBcmdBcnJheSk7XG59O1xuXG52YXIgd2FybmVkQWJvdXRDc3NQcm9wRm9yR2xvYmFsID0gZmFsc2U7IC8vIG1haW50YWluIHBsYWNlIG92ZXIgcmVyZW5kZXJzLlxuLy8gaW5pdGlhbCByZW5kZXIgZnJvbSBicm93c2VyLCBpbnNlcnRCZWZvcmUgY29udGV4dC5zaGVldC50YWdzWzBdIG9yIGlmIGEgc3R5bGUgaGFzbid0IGJlZW4gaW5zZXJ0ZWQgdGhlcmUgeWV0LCBhcHBlbmRDaGlsZFxuLy8gaW5pdGlhbCBjbGllbnQtc2lkZSByZW5kZXIgZnJvbSBTU1IsIHVzZSBwbGFjZSBvZiBoeWRyYXRpbmcgdGFnXG5cbnZhciBHbG9iYWwgPSAvKiAjX19QVVJFX18gKi93aXRoRW1vdGlvbkNhY2hlKGZ1bmN0aW9uIChwcm9wcywgY2FjaGUpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIXdhcm5lZEFib3V0Q3NzUHJvcEZvckdsb2JhbCAmJiAoIC8vIGNoZWNrIGZvciBjbGFzc05hbWUgYXMgd2VsbCBzaW5jZSB0aGUgdXNlciBpc1xuICAvLyBwcm9iYWJseSB1c2luZyB0aGUgY3VzdG9tIGNyZWF0ZUVsZW1lbnQgd2hpY2hcbiAgLy8gbWVhbnMgaXQgd2lsbCBiZSB0dXJuZWQgaW50byBhIGNsYXNzTmFtZSBwcm9wXG4gIC8vICRGbG93Rml4TWUgSSBkb24ndCByZWFsbHkgd2FudCB0byBhZGQgaXQgdG8gdGhlIHR5cGUgc2luY2UgaXQgc2hvdWxkbid0IGJlIHVzZWRcbiAgcHJvcHMuY2xhc3NOYW1lIHx8IHByb3BzLmNzcykpIHtcbiAgICBjb25zb2xlLmVycm9yKFwiSXQgbG9va3MgbGlrZSB5b3UncmUgdXNpbmcgdGhlIGNzcyBwcm9wIG9uIEdsb2JhbCwgZGlkIHlvdSBtZWFuIHRvIHVzZSB0aGUgc3R5bGVzIHByb3AgaW5zdGVhZD9cIik7XG4gICAgd2FybmVkQWJvdXRDc3NQcm9wRm9yR2xvYmFsID0gdHJ1ZTtcbiAgfVxuXG4gIHZhciBzdHlsZXMgPSBwcm9wcy5zdHlsZXM7XG4gIHZhciBzZXJpYWxpemVkID0gc2VyaWFsaXplU3R5bGVzKFtzdHlsZXNdLCB1bmRlZmluZWQsIFJlYWN0LnVzZUNvbnRleHQoVGhlbWVDb250ZXh0KSk7XG5cbiAgaWYgKCFpc0Jyb3dzZXIkMSkge1xuICAgIHZhciBfcmVmO1xuXG4gICAgdmFyIHNlcmlhbGl6ZWROYW1lcyA9IHNlcmlhbGl6ZWQubmFtZTtcbiAgICB2YXIgc2VyaWFsaXplZFN0eWxlcyA9IHNlcmlhbGl6ZWQuc3R5bGVzO1xuICAgIHZhciBuZXh0ID0gc2VyaWFsaXplZC5uZXh0O1xuXG4gICAgd2hpbGUgKG5leHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgc2VyaWFsaXplZE5hbWVzICs9ICcgJyArIG5leHQubmFtZTtcbiAgICAgIHNlcmlhbGl6ZWRTdHlsZXMgKz0gbmV4dC5zdHlsZXM7XG4gICAgICBuZXh0ID0gbmV4dC5uZXh0O1xuICAgIH1cblxuICAgIHZhciBzaG91bGRDYWNoZSA9IGNhY2hlLmNvbXBhdCA9PT0gdHJ1ZTtcbiAgICB2YXIgcnVsZXMgPSBjYWNoZS5pbnNlcnQoXCJcIiwge1xuICAgICAgbmFtZTogc2VyaWFsaXplZE5hbWVzLFxuICAgICAgc3R5bGVzOiBzZXJpYWxpemVkU3R5bGVzXG4gICAgfSwgY2FjaGUuc2hlZXQsIHNob3VsZENhY2hlKTtcblxuICAgIGlmIChzaG91bGRDYWNoZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIiwgKF9yZWYgPSB7fSwgX3JlZltcImRhdGEtZW1vdGlvblwiXSA9IGNhY2hlLmtleSArIFwiLWdsb2JhbCBcIiArIHNlcmlhbGl6ZWROYW1lcywgX3JlZi5kYW5nZXJvdXNseVNldElubmVySFRNTCA9IHtcbiAgICAgIF9faHRtbDogcnVsZXNcbiAgICB9LCBfcmVmLm5vbmNlID0gY2FjaGUuc2hlZXQubm9uY2UsIF9yZWYpKTtcbiAgfSAvLyB5ZXMsIGkga25vdyB0aGVzZSBob29rcyBhcmUgdXNlZCBjb25kaXRpb25hbGx5XG4gIC8vIGJ1dCBpdCBpcyBiYXNlZCBvbiBhIGNvbnN0YW50IHRoYXQgd2lsbCBuZXZlciBjaGFuZ2UgYXQgcnVudGltZVxuICAvLyBpdCdzIGVmZmVjdGl2ZWx5IGxpa2UgaGF2aW5nIHR3byBpbXBsZW1lbnRhdGlvbnMgYW5kIHN3aXRjaGluZyB0aGVtIG91dFxuICAvLyBzbyBpdCdzIG5vdCBhY3R1YWxseSBicmVha2luZyBhbnl0aGluZ1xuXG5cbiAgdmFyIHNoZWV0UmVmID0gUmVhY3QudXNlUmVmKCk7XG4gIHVzZUluc2VydGlvbkVmZmVjdFdpdGhMYXlvdXRGYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGtleSA9IGNhY2hlLmtleSArIFwiLWdsb2JhbFwiOyAvLyB1c2UgY2FzZSBvZiBodHRwczovL2dpdGh1Yi5jb20vZW1vdGlvbi1qcy9lbW90aW9uL2lzc3Vlcy8yNjc1XG5cbiAgICB2YXIgc2hlZXQgPSBuZXcgY2FjaGUuc2hlZXQuY29uc3RydWN0b3Ioe1xuICAgICAga2V5OiBrZXksXG4gICAgICBub25jZTogY2FjaGUuc2hlZXQubm9uY2UsXG4gICAgICBjb250YWluZXI6IGNhY2hlLnNoZWV0LmNvbnRhaW5lcixcbiAgICAgIHNwZWVkeTogY2FjaGUuc2hlZXQuaXNTcGVlZHlcbiAgICB9KTtcbiAgICB2YXIgcmVoeWRyYXRpbmcgPSBmYWxzZTsgLy8gJEZsb3dGaXhNZVxuXG4gICAgdmFyIG5vZGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwic3R5bGVbZGF0YS1lbW90aW9uPVxcXCJcIiArIGtleSArIFwiIFwiICsgc2VyaWFsaXplZC5uYW1lICsgXCJcXFwiXVwiKTtcblxuICAgIGlmIChjYWNoZS5zaGVldC50YWdzLmxlbmd0aCkge1xuICAgICAgc2hlZXQuYmVmb3JlID0gY2FjaGUuc2hlZXQudGFnc1swXTtcbiAgICB9XG5cbiAgICBpZiAobm9kZSAhPT0gbnVsbCkge1xuICAgICAgcmVoeWRyYXRpbmcgPSB0cnVlOyAvLyBjbGVhciB0aGUgaGFzaCBzbyB0aGlzIG5vZGUgd29uJ3QgYmUgcmVjb2duaXphYmxlIGFzIHJlaHlkcmF0YWJsZSBieSBvdGhlciA8R2xvYmFsLz5zXG5cbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdkYXRhLWVtb3Rpb24nLCBrZXkpO1xuICAgICAgc2hlZXQuaHlkcmF0ZShbbm9kZV0pO1xuICAgIH1cblxuICAgIHNoZWV0UmVmLmN1cnJlbnQgPSBbc2hlZXQsIHJlaHlkcmF0aW5nXTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgc2hlZXQuZmx1c2goKTtcbiAgICB9O1xuICB9LCBbY2FjaGVdKTtcbiAgdXNlSW5zZXJ0aW9uRWZmZWN0V2l0aExheW91dEZhbGxiYWNrKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc2hlZXRSZWZDdXJyZW50ID0gc2hlZXRSZWYuY3VycmVudDtcbiAgICB2YXIgc2hlZXQgPSBzaGVldFJlZkN1cnJlbnRbMF0sXG4gICAgICAgIHJlaHlkcmF0aW5nID0gc2hlZXRSZWZDdXJyZW50WzFdO1xuXG4gICAgaWYgKHJlaHlkcmF0aW5nKSB7XG4gICAgICBzaGVldFJlZkN1cnJlbnRbMV0gPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoc2VyaWFsaXplZC5uZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIGluc2VydCBrZXlmcmFtZXNcbiAgICAgIGluc2VydFN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZC5uZXh0LCB0cnVlKTtcbiAgICB9XG5cbiAgICBpZiAoc2hlZXQudGFncy5sZW5ndGgpIHtcbiAgICAgIC8vIGlmIHRoaXMgZG9lc24ndCBleGlzdCB0aGVuIGl0IHdpbGwgYmUgbnVsbCBzbyB0aGUgc3R5bGUgZWxlbWVudCB3aWxsIGJlIGFwcGVuZGVkXG4gICAgICB2YXIgZWxlbWVudCA9IHNoZWV0LnRhZ3Nbc2hlZXQudGFncy5sZW5ndGggLSAxXS5uZXh0RWxlbWVudFNpYmxpbmc7XG4gICAgICBzaGVldC5iZWZvcmUgPSBlbGVtZW50O1xuICAgICAgc2hlZXQuZmx1c2goKTtcbiAgICB9XG5cbiAgICBjYWNoZS5pbnNlcnQoXCJcIiwgc2VyaWFsaXplZCwgc2hlZXQsIGZhbHNlKTtcbiAgfSwgW2NhY2hlLCBzZXJpYWxpemVkLm5hbWVdKTtcbiAgcmV0dXJuIG51bGw7XG59KTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgR2xvYmFsLmRpc3BsYXlOYW1lID0gJ0Vtb3Rpb25HbG9iYWwnO1xufVxuXG5mdW5jdGlvbiBjc3MoKSB7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICByZXR1cm4gc2VyaWFsaXplU3R5bGVzKGFyZ3MpO1xufVxuXG52YXIga2V5ZnJhbWVzID0gZnVuY3Rpb24ga2V5ZnJhbWVzKCkge1xuICB2YXIgaW5zZXJ0YWJsZSA9IGNzcy5hcHBseSh2b2lkIDAsIGFyZ3VtZW50cyk7XG4gIHZhciBuYW1lID0gXCJhbmltYXRpb24tXCIgKyBpbnNlcnRhYmxlLm5hbWU7IC8vICRGbG93Rml4TWVcblxuICByZXR1cm4ge1xuICAgIG5hbWU6IG5hbWUsXG4gICAgc3R5bGVzOiBcIkBrZXlmcmFtZXMgXCIgKyBuYW1lICsgXCJ7XCIgKyBpbnNlcnRhYmxlLnN0eWxlcyArIFwifVwiLFxuICAgIGFuaW06IDEsXG4gICAgdG9TdHJpbmc6IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgcmV0dXJuIFwiX0VNT19cIiArIHRoaXMubmFtZSArIFwiX1wiICsgdGhpcy5zdHlsZXMgKyBcIl9FTU9fXCI7XG4gICAgfVxuICB9O1xufTtcblxudmFyIGNsYXNzbmFtZXMgPSBmdW5jdGlvbiBjbGFzc25hbWVzKGFyZ3MpIHtcbiAgdmFyIGxlbiA9IGFyZ3MubGVuZ3RoO1xuICB2YXIgaSA9IDA7XG4gIHZhciBjbHMgPSAnJztcblxuICBmb3IgKDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgdmFyIGFyZyA9IGFyZ3NbaV07XG4gICAgaWYgKGFyZyA9PSBudWxsKSBjb250aW51ZTtcbiAgICB2YXIgdG9BZGQgPSB2b2lkIDA7XG5cbiAgICBzd2l0Y2ggKHR5cGVvZiBhcmcpIHtcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAge1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGFyZykpIHtcbiAgICAgICAgICAgIHRvQWRkID0gY2xhc3NuYW1lcyhhcmcpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBhcmcuc3R5bGVzICE9PSB1bmRlZmluZWQgJiYgYXJnLm5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdZb3UgaGF2ZSBwYXNzZWQgc3R5bGVzIGNyZWF0ZWQgd2l0aCBgY3NzYCBmcm9tIGBAZW1vdGlvbi9yZWFjdGAgcGFja2FnZSB0byB0aGUgYGN4YC5cXG4nICsgJ2BjeGAgaXMgbWVhbnQgdG8gY29tcG9zZSBjbGFzcyBuYW1lcyAoc3RyaW5ncykgc28geW91IHNob3VsZCBjb252ZXJ0IHRob3NlIHN0eWxlcyB0byBhIGNsYXNzIG5hbWUgYnkgcGFzc2luZyB0aGVtIHRvIHRoZSBgY3NzYCByZWNlaXZlZCBmcm9tIDxDbGFzc05hbWVzLz4gY29tcG9uZW50LicpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0b0FkZCA9ICcnO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBrIGluIGFyZykge1xuICAgICAgICAgICAgICBpZiAoYXJnW2tdICYmIGspIHtcbiAgICAgICAgICAgICAgICB0b0FkZCAmJiAodG9BZGQgKz0gJyAnKTtcbiAgICAgICAgICAgICAgICB0b0FkZCArPSBrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAge1xuICAgICAgICAgIHRvQWRkID0gYXJnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRvQWRkKSB7XG4gICAgICBjbHMgJiYgKGNscyArPSAnICcpO1xuICAgICAgY2xzICs9IHRvQWRkO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjbHM7XG59O1xuXG5mdW5jdGlvbiBtZXJnZShyZWdpc3RlcmVkLCBjc3MsIGNsYXNzTmFtZSkge1xuICB2YXIgcmVnaXN0ZXJlZFN0eWxlcyA9IFtdO1xuICB2YXIgcmF3Q2xhc3NOYW1lID0gZ2V0UmVnaXN0ZXJlZFN0eWxlcyhyZWdpc3RlcmVkLCByZWdpc3RlcmVkU3R5bGVzLCBjbGFzc05hbWUpO1xuXG4gIGlmIChyZWdpc3RlcmVkU3R5bGVzLmxlbmd0aCA8IDIpIHtcbiAgICByZXR1cm4gY2xhc3NOYW1lO1xuICB9XG5cbiAgcmV0dXJuIHJhd0NsYXNzTmFtZSArIGNzcyhyZWdpc3RlcmVkU3R5bGVzKTtcbn1cblxudmFyIEluc2VydGlvbiA9IGZ1bmN0aW9uIEluc2VydGlvbihfcmVmKSB7XG4gIHZhciBjYWNoZSA9IF9yZWYuY2FjaGUsXG4gICAgICBzZXJpYWxpemVkQXJyID0gX3JlZi5zZXJpYWxpemVkQXJyO1xuICB1c2VJbnNlcnRpb25FZmZlY3RBbHdheXNXaXRoU3luY0ZhbGxiYWNrKGZ1bmN0aW9uICgpIHtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VyaWFsaXplZEFyci5sZW5ndGg7IGkrKykge1xuICAgICAgaW5zZXJ0U3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkQXJyW2ldLCBmYWxzZSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gbnVsbDtcbn07XG5cbnZhciBDbGFzc05hbWVzID0gLyogI19fUFVSRV9fICovd2l0aEVtb3Rpb25DYWNoZShmdW5jdGlvbiAocHJvcHMsIGNhY2hlKSB7XG4gIHZhciBoYXNSZW5kZXJlZCA9IGZhbHNlO1xuICB2YXIgc2VyaWFsaXplZEFyciA9IFtdO1xuXG4gIHZhciBjc3MgPSBmdW5jdGlvbiBjc3MoKSB7XG4gICAgaWYgKGhhc1JlbmRlcmVkICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY3NzIGNhbiBvbmx5IGJlIHVzZWQgZHVyaW5nIHJlbmRlcicpO1xuICAgIH1cblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICB2YXIgc2VyaWFsaXplZCA9IHNlcmlhbGl6ZVN0eWxlcyhhcmdzLCBjYWNoZS5yZWdpc3RlcmVkKTtcbiAgICBzZXJpYWxpemVkQXJyLnB1c2goc2VyaWFsaXplZCk7IC8vIHJlZ2lzdHJhdGlvbiBoYXMgdG8gaGFwcGVuIGhlcmUgYXMgdGhlIHJlc3VsdCBvZiB0aGlzIG1pZ2h0IGdldCBjb25zdW1lZCBieSBgY3hgXG5cbiAgICByZWdpc3RlclN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgZmFsc2UpO1xuICAgIHJldHVybiBjYWNoZS5rZXkgKyBcIi1cIiArIHNlcmlhbGl6ZWQubmFtZTtcbiAgfTtcblxuICB2YXIgY3ggPSBmdW5jdGlvbiBjeCgpIHtcbiAgICBpZiAoaGFzUmVuZGVyZWQgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjeCBjYW4gb25seSBiZSB1c2VkIGR1cmluZyByZW5kZXInKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIpLCBfa2V5MiA9IDA7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgIGFyZ3NbX2tleTJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWVyZ2UoY2FjaGUucmVnaXN0ZXJlZCwgY3NzLCBjbGFzc25hbWVzKGFyZ3MpKTtcbiAgfTtcblxuICB2YXIgY29udGVudCA9IHtcbiAgICBjc3M6IGNzcyxcbiAgICBjeDogY3gsXG4gICAgdGhlbWU6IFJlYWN0LnVzZUNvbnRleHQoVGhlbWVDb250ZXh0KVxuICB9O1xuICB2YXIgZWxlID0gcHJvcHMuY2hpbGRyZW4oY29udGVudCk7XG4gIGhhc1JlbmRlcmVkID0gdHJ1ZTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJbnNlcnRpb24sIHtcbiAgICBjYWNoZTogY2FjaGUsXG4gICAgc2VyaWFsaXplZEFycjogc2VyaWFsaXplZEFyclxuICB9KSwgZWxlKTtcbn0pO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBDbGFzc05hbWVzLmRpc3BsYXlOYW1lID0gJ0Vtb3Rpb25DbGFzc05hbWVzJztcbn1cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFyIGlzQnJvd3NlciA9IFwib2JqZWN0XCIgIT09ICd1bmRlZmluZWQnOyAvLyAjMTcyNywgIzI5MDUgZm9yIHNvbWUgcmVhc29uIEplc3QgYW5kIFZpdGVzdCBldmFsdWF0ZSBtb2R1bGVzIHR3aWNlIGlmIHNvbWUgY29uc3VtaW5nIG1vZHVsZSBnZXRzIG1vY2tlZFxuXG4gIHZhciBpc1Rlc3RFbnYgPSB0eXBlb2YgamVzdCAhPT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mIHZpICE9PSAndW5kZWZpbmVkJztcblxuICBpZiAoaXNCcm93c2VyICYmICFpc1Rlc3RFbnYpIHtcbiAgICAvLyBnbG9iYWxUaGlzIGhhcyB3aWRlIGJyb3dzZXIgc3VwcG9ydCAtIGh0dHBzOi8vY2FuaXVzZS5jb20vP3NlYXJjaD1nbG9iYWxUaGlzLCBOb2RlLmpzIDEyIGFuZCBsYXRlclxuICAgIHZhciBnbG9iYWxDb250ZXh0ID0gLy8gJEZsb3dJZ25vcmVcbiAgICB0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWxUaGlzIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiAgICA6IGlzQnJvd3NlciA/IHdpbmRvdyA6IGdsb2JhbDtcbiAgICB2YXIgZ2xvYmFsS2V5ID0gXCJfX0VNT1RJT05fUkVBQ1RfXCIgKyBwa2cudmVyc2lvbi5zcGxpdCgnLicpWzBdICsgXCJfX1wiO1xuXG4gICAgaWYgKGdsb2JhbENvbnRleHRbZ2xvYmFsS2V5XSkge1xuICAgICAgY29uc29sZS53YXJuKCdZb3UgYXJlIGxvYWRpbmcgQGVtb3Rpb24vcmVhY3Qgd2hlbiBpdCBpcyBhbHJlYWR5IGxvYWRlZC4gUnVubmluZyAnICsgJ211bHRpcGxlIGluc3RhbmNlcyBtYXkgY2F1c2UgcHJvYmxlbXMuIFRoaXMgY2FuIGhhcHBlbiBpZiBtdWx0aXBsZSAnICsgJ3ZlcnNpb25zIGFyZSB1c2VkLCBvciBpZiBtdWx0aXBsZSBidWlsZHMgb2YgdGhlIHNhbWUgdmVyc2lvbiBhcmUgJyArICd1c2VkLicpO1xuICAgIH1cblxuICAgIGdsb2JhbENvbnRleHRbZ2xvYmFsS2V5XSA9IHRydWU7XG4gIH1cbn1cblxuZXhwb3J0IHsgQ2xhc3NOYW1lcywgR2xvYmFsLCBqc3ggYXMgY3JlYXRlRWxlbWVudCwgY3NzLCBqc3gsIGtleWZyYW1lcyB9O1xuIiwgImZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7XG4gIHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7XG4gICAgXCJkZWZhdWx0XCI6IG9ialxuICB9O1xufVxubW9kdWxlLmV4cG9ydHMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwgIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gZm9ybWF0TXVpRXJyb3JNZXNzYWdlO1xuLyoqXG4gKiBXQVJOSU5HOiBEb24ndCBpbXBvcnQgdGhpcyBkaXJlY3RseS5cbiAqIFVzZSBgTXVpRXJyb3JgIGZyb20gYEBtdWkvaW50ZXJuYWwtYmFiZWwtbWFjcm9zL011aUVycm9yLm1hY3JvYCBpbnN0ZWFkLlxuICogQHBhcmFtIHtudW1iZXJ9IGNvZGVcbiAqL1xuZnVuY3Rpb24gZm9ybWF0TXVpRXJyb3JNZXNzYWdlKGNvZGUpIHtcbiAgLy8gQXBwbHkgYmFiZWwtcGx1Z2luLXRyYW5zZm9ybS10ZW1wbGF0ZS1saXRlcmFscyBpbiBsb29zZSBtb2RlXG4gIC8vIGxvb3NlIG1vZGUgaXMgc2FmZSBpZiB3ZSdyZSBjb25jYXRlbmF0aW5nIHByaW1pdGl2ZXNcbiAgLy8gc2VlIGh0dHBzOi8vYmFiZWxqcy5pby9kb2NzL2VuL2JhYmVsLXBsdWdpbi10cmFuc2Zvcm0tdGVtcGxhdGUtbGl0ZXJhbHMjbG9vc2VcbiAgLyogZXNsaW50LWRpc2FibGUgcHJlZmVyLXRlbXBsYXRlICovXG4gIGxldCB1cmwgPSAnaHR0cHM6Ly9tdWkuY29tL3Byb2R1Y3Rpb24tZXJyb3IvP2NvZGU9JyArIGNvZGU7XG4gIGZvciAobGV0IGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgLy8gcmVzdCBwYXJhbXMgb3Zlci10cmFuc3BpbGUgZm9yIHRoaXMgY2FzZVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItcmVzdC1wYXJhbXNcbiAgICB1cmwgKz0gJyZhcmdzW109JyArIGVuY29kZVVSSUNvbXBvbmVudChhcmd1bWVudHNbaV0pO1xuICB9XG4gIHJldHVybiAnTWluaWZpZWQgTVVJIGVycm9yICMnICsgY29kZSArICc7IHZpc2l0ICcgKyB1cmwgKyAnIGZvciB0aGUgZnVsbCBtZXNzYWdlLic7XG4gIC8qIGVzbGludC1lbmFibGUgcHJlZmVyLXRlbXBsYXRlICovXG59IiwgIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZWZhdWx0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UuZGVmYXVsdDtcbiAgfVxufSk7XG52YXIgX2Zvcm1hdE11aUVycm9yTWVzc2FnZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vZm9ybWF0TXVpRXJyb3JNZXNzYWdlXCIpKTsiLCAiaW1wb3J0IG1lbW9pemUgZnJvbSAnQGVtb3Rpb24vbWVtb2l6ZSc7XG5cbnZhciByZWFjdFByb3BzUmVnZXggPSAvXigoY2hpbGRyZW58ZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUx8a2V5fHJlZnxhdXRvRm9jdXN8ZGVmYXVsdFZhbHVlfGRlZmF1bHRDaGVja2VkfGlubmVySFRNTHxzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmd8c3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nfHZhbHVlTGlua3xhYmJyfGFjY2VwdHxhY2NlcHRDaGFyc2V0fGFjY2Vzc0tleXxhY3Rpb258YWxsb3d8YWxsb3dVc2VyTWVkaWF8YWxsb3dQYXltZW50UmVxdWVzdHxhbGxvd0Z1bGxTY3JlZW58YWxsb3dUcmFuc3BhcmVuY3l8YWx0fGFzeW5jfGF1dG9Db21wbGV0ZXxhdXRvUGxheXxjYXB0dXJlfGNlbGxQYWRkaW5nfGNlbGxTcGFjaW5nfGNoYWxsZW5nZXxjaGFyU2V0fGNoZWNrZWR8Y2l0ZXxjbGFzc0lEfGNsYXNzTmFtZXxjb2xzfGNvbFNwYW58Y29udGVudHxjb250ZW50RWRpdGFibGV8Y29udGV4dE1lbnV8Y29udHJvbHN8Y29udHJvbHNMaXN0fGNvb3Jkc3xjcm9zc09yaWdpbnxkYXRhfGRhdGVUaW1lfGRlY29kaW5nfGRlZmF1bHR8ZGVmZXJ8ZGlyfGRpc2FibGVkfGRpc2FibGVQaWN0dXJlSW5QaWN0dXJlfGRpc2FibGVSZW1vdGVQbGF5YmFja3xkb3dubG9hZHxkcmFnZ2FibGV8ZW5jVHlwZXxlbnRlcktleUhpbnR8Zm9ybXxmb3JtQWN0aW9ufGZvcm1FbmNUeXBlfGZvcm1NZXRob2R8Zm9ybU5vVmFsaWRhdGV8Zm9ybVRhcmdldHxmcmFtZUJvcmRlcnxoZWFkZXJzfGhlaWdodHxoaWRkZW58aGlnaHxocmVmfGhyZWZMYW5nfGh0bWxGb3J8aHR0cEVxdWl2fGlkfGlucHV0TW9kZXxpbnRlZ3JpdHl8aXN8a2V5UGFyYW1zfGtleVR5cGV8a2luZHxsYWJlbHxsYW5nfGxpc3R8bG9hZGluZ3xsb29wfGxvd3xtYXJnaW5IZWlnaHR8bWFyZ2luV2lkdGh8bWF4fG1heExlbmd0aHxtZWRpYXxtZWRpYUdyb3VwfG1ldGhvZHxtaW58bWluTGVuZ3RofG11bHRpcGxlfG11dGVkfG5hbWV8bm9uY2V8bm9WYWxpZGF0ZXxvcGVufG9wdGltdW18cGF0dGVybnxwbGFjZWhvbGRlcnxwbGF5c0lubGluZXxwb3N0ZXJ8cHJlbG9hZHxwcm9maWxlfHJhZGlvR3JvdXB8cmVhZE9ubHl8cmVmZXJyZXJQb2xpY3l8cmVsfHJlcXVpcmVkfHJldmVyc2VkfHJvbGV8cm93c3xyb3dTcGFufHNhbmRib3h8c2NvcGV8c2NvcGVkfHNjcm9sbGluZ3xzZWFtbGVzc3xzZWxlY3RlZHxzaGFwZXxzaXplfHNpemVzfHNsb3R8c3BhbnxzcGVsbENoZWNrfHNyY3xzcmNEb2N8c3JjTGFuZ3xzcmNTZXR8c3RhcnR8c3RlcHxzdHlsZXxzdW1tYXJ5fHRhYkluZGV4fHRhcmdldHx0aXRsZXx0cmFuc2xhdGV8dHlwZXx1c2VNYXB8dmFsdWV8d2lkdGh8d21vZGV8d3JhcHxhYm91dHxkYXRhdHlwZXxpbmxpc3R8cHJlZml4fHByb3BlcnR5fHJlc291cmNlfHR5cGVvZnx2b2NhYnxhdXRvQ2FwaXRhbGl6ZXxhdXRvQ29ycmVjdHxhdXRvU2F2ZXxjb2xvcnxpbmNyZW1lbnRhbHxmYWxsYmFja3xpbmVydHxpdGVtUHJvcHxpdGVtU2NvcGV8aXRlbVR5cGV8aXRlbUlEfGl0ZW1SZWZ8b258b3B0aW9ufHJlc3VsdHN8c2VjdXJpdHl8dW5zZWxlY3RhYmxlfGFjY2VudEhlaWdodHxhY2N1bXVsYXRlfGFkZGl0aXZlfGFsaWdubWVudEJhc2VsaW5lfGFsbG93UmVvcmRlcnxhbHBoYWJldGljfGFtcGxpdHVkZXxhcmFiaWNGb3JtfGFzY2VudHxhdHRyaWJ1dGVOYW1lfGF0dHJpYnV0ZVR5cGV8YXV0b1JldmVyc2V8YXppbXV0aHxiYXNlRnJlcXVlbmN5fGJhc2VsaW5lU2hpZnR8YmFzZVByb2ZpbGV8YmJveHxiZWdpbnxiaWFzfGJ5fGNhbGNNb2RlfGNhcEhlaWdodHxjbGlwfGNsaXBQYXRoVW5pdHN8Y2xpcFBhdGh8Y2xpcFJ1bGV8Y29sb3JJbnRlcnBvbGF0aW9ufGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnN8Y29sb3JQcm9maWxlfGNvbG9yUmVuZGVyaW5nfGNvbnRlbnRTY3JpcHRUeXBlfGNvbnRlbnRTdHlsZVR5cGV8Y3Vyc29yfGN4fGN5fGR8ZGVjZWxlcmF0ZXxkZXNjZW50fGRpZmZ1c2VDb25zdGFudHxkaXJlY3Rpb258ZGlzcGxheXxkaXZpc29yfGRvbWluYW50QmFzZWxpbmV8ZHVyfGR4fGR5fGVkZ2VNb2RlfGVsZXZhdGlvbnxlbmFibGVCYWNrZ3JvdW5kfGVuZHxleHBvbmVudHxleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkfGZpbGx8ZmlsbE9wYWNpdHl8ZmlsbFJ1bGV8ZmlsdGVyfGZpbHRlclJlc3xmaWx0ZXJVbml0c3xmbG9vZENvbG9yfGZsb29kT3BhY2l0eXxmb2N1c2FibGV8Zm9udEZhbWlseXxmb250U2l6ZXxmb250U2l6ZUFkanVzdHxmb250U3RyZXRjaHxmb250U3R5bGV8Zm9udFZhcmlhbnR8Zm9udFdlaWdodHxmb3JtYXR8ZnJvbXxmcnxmeHxmeXxnMXxnMnxnbHlwaE5hbWV8Z2x5cGhPcmllbnRhdGlvbkhvcml6b250YWx8Z2x5cGhPcmllbnRhdGlvblZlcnRpY2FsfGdseXBoUmVmfGdyYWRpZW50VHJhbnNmb3JtfGdyYWRpZW50VW5pdHN8aGFuZ2luZ3xob3JpekFkdlh8aG9yaXpPcmlnaW5YfGlkZW9ncmFwaGljfGltYWdlUmVuZGVyaW5nfGlufGluMnxpbnRlcmNlcHR8a3xrMXxrMnxrM3xrNHxrZXJuZWxNYXRyaXh8a2VybmVsVW5pdExlbmd0aHxrZXJuaW5nfGtleVBvaW50c3xrZXlTcGxpbmVzfGtleVRpbWVzfGxlbmd0aEFkanVzdHxsZXR0ZXJTcGFjaW5nfGxpZ2h0aW5nQ29sb3J8bGltaXRpbmdDb25lQW5nbGV8bG9jYWx8bWFya2VyRW5kfG1hcmtlck1pZHxtYXJrZXJTdGFydHxtYXJrZXJIZWlnaHR8bWFya2VyVW5pdHN8bWFya2VyV2lkdGh8bWFza3xtYXNrQ29udGVudFVuaXRzfG1hc2tVbml0c3xtYXRoZW1hdGljYWx8bW9kZXxudW1PY3RhdmVzfG9mZnNldHxvcGFjaXR5fG9wZXJhdG9yfG9yZGVyfG9yaWVudHxvcmllbnRhdGlvbnxvcmlnaW58b3ZlcmZsb3d8b3ZlcmxpbmVQb3NpdGlvbnxvdmVybGluZVRoaWNrbmVzc3xwYW5vc2UxfHBhaW50T3JkZXJ8cGF0aExlbmd0aHxwYXR0ZXJuQ29udGVudFVuaXRzfHBhdHRlcm5UcmFuc2Zvcm18cGF0dGVyblVuaXRzfHBvaW50ZXJFdmVudHN8cG9pbnRzfHBvaW50c0F0WHxwb2ludHNBdFl8cG9pbnRzQXRafHByZXNlcnZlQWxwaGF8cHJlc2VydmVBc3BlY3RSYXRpb3xwcmltaXRpdmVVbml0c3xyfHJhZGl1c3xyZWZYfHJlZll8cmVuZGVyaW5nSW50ZW50fHJlcGVhdENvdW50fHJlcGVhdER1cnxyZXF1aXJlZEV4dGVuc2lvbnN8cmVxdWlyZWRGZWF0dXJlc3xyZXN0YXJ0fHJlc3VsdHxyb3RhdGV8cnh8cnl8c2NhbGV8c2VlZHxzaGFwZVJlbmRlcmluZ3xzbG9wZXxzcGFjaW5nfHNwZWN1bGFyQ29uc3RhbnR8c3BlY3VsYXJFeHBvbmVudHxzcGVlZHxzcHJlYWRNZXRob2R8c3RhcnRPZmZzZXR8c3RkRGV2aWF0aW9ufHN0ZW1ofHN0ZW12fHN0aXRjaFRpbGVzfHN0b3BDb2xvcnxzdG9wT3BhY2l0eXxzdHJpa2V0aHJvdWdoUG9zaXRpb258c3RyaWtldGhyb3VnaFRoaWNrbmVzc3xzdHJpbmd8c3Ryb2tlfHN0cm9rZURhc2hhcnJheXxzdHJva2VEYXNob2Zmc2V0fHN0cm9rZUxpbmVjYXB8c3Ryb2tlTGluZWpvaW58c3Ryb2tlTWl0ZXJsaW1pdHxzdHJva2VPcGFjaXR5fHN0cm9rZVdpZHRofHN1cmZhY2VTY2FsZXxzeXN0ZW1MYW5ndWFnZXx0YWJsZVZhbHVlc3x0YXJnZXRYfHRhcmdldFl8dGV4dEFuY2hvcnx0ZXh0RGVjb3JhdGlvbnx0ZXh0UmVuZGVyaW5nfHRleHRMZW5ndGh8dG98dHJhbnNmb3JtfHUxfHUyfHVuZGVybGluZVBvc2l0aW9ufHVuZGVybGluZVRoaWNrbmVzc3x1bmljb2RlfHVuaWNvZGVCaWRpfHVuaWNvZGVSYW5nZXx1bml0c1BlckVtfHZBbHBoYWJldGljfHZIYW5naW5nfHZJZGVvZ3JhcGhpY3x2TWF0aGVtYXRpY2FsfHZhbHVlc3x2ZWN0b3JFZmZlY3R8dmVyc2lvbnx2ZXJ0QWR2WXx2ZXJ0T3JpZ2luWHx2ZXJ0T3JpZ2luWXx2aWV3Qm94fHZpZXdUYXJnZXR8dmlzaWJpbGl0eXx3aWR0aHN8d29yZFNwYWNpbmd8d3JpdGluZ01vZGV8eHx4SGVpZ2h0fHgxfHgyfHhDaGFubmVsU2VsZWN0b3J8eGxpbmtBY3R1YXRlfHhsaW5rQXJjcm9sZXx4bGlua0hyZWZ8eGxpbmtSb2xlfHhsaW5rU2hvd3x4bGlua1RpdGxlfHhsaW5rVHlwZXx4bWxCYXNlfHhtbG5zfHhtbG5zWGxpbmt8eG1sTGFuZ3x4bWxTcGFjZXx5fHkxfHkyfHlDaGFubmVsU2VsZWN0b3J8enx6b29tQW5kUGFufGZvcnxjbGFzc3xhdXRvZm9jdXMpfCgoW0RkXVtBYV1bVHRdW0FhXXxbQWFdW1JyXVtJaV1bQWFdfHgpLS4qKSkkLzsgLy8gaHR0cHM6Ly9lc2JlbmNoLmNvbS9iZW5jaC81YmZlZTY4YTRjZDdlNjAwOWVmNjFkMjNcblxudmFyIGlzUHJvcFZhbGlkID0gLyogI19fUFVSRV9fICovbWVtb2l6ZShmdW5jdGlvbiAocHJvcCkge1xuICByZXR1cm4gcmVhY3RQcm9wc1JlZ2V4LnRlc3QocHJvcCkgfHwgcHJvcC5jaGFyQ29kZUF0KDApID09PSAxMTFcbiAgLyogbyAqL1xuICAmJiBwcm9wLmNoYXJDb2RlQXQoMSkgPT09IDExMFxuICAvKiBuICovXG4gICYmIHByb3AuY2hhckNvZGVBdCgyKSA8IDkxO1xufVxuLyogWisxICovXG4pO1xuXG5leHBvcnQgeyBpc1Byb3BWYWxpZCBhcyBkZWZhdWx0IH07XG4iLCAiaW1wb3J0IF9leHRlbmRzIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHMnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IGlzUHJvcFZhbGlkIGZyb20gJ0BlbW90aW9uL2lzLXByb3AtdmFsaWQnO1xuaW1wb3J0IHsgd2l0aEVtb3Rpb25DYWNoZSwgVGhlbWVDb250ZXh0IH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgZ2V0UmVnaXN0ZXJlZFN0eWxlcywgcmVnaXN0ZXJTdHlsZXMsIGluc2VydFN0eWxlcyB9IGZyb20gJ0BlbW90aW9uL3V0aWxzJztcbmltcG9ydCB7IHNlcmlhbGl6ZVN0eWxlcyB9IGZyb20gJ0BlbW90aW9uL3NlcmlhbGl6ZSc7XG5pbXBvcnQgeyB1c2VJbnNlcnRpb25FZmZlY3RBbHdheXNXaXRoU3luY0ZhbGxiYWNrIH0gZnJvbSAnQGVtb3Rpb24vdXNlLWluc2VydGlvbi1lZmZlY3Qtd2l0aC1mYWxsYmFja3MnO1xuXG52YXIgdGVzdE9taXRQcm9wc09uU3RyaW5nVGFnID0gaXNQcm9wVmFsaWQ7XG5cbnZhciB0ZXN0T21pdFByb3BzT25Db21wb25lbnQgPSBmdW5jdGlvbiB0ZXN0T21pdFByb3BzT25Db21wb25lbnQoa2V5KSB7XG4gIHJldHVybiBrZXkgIT09ICd0aGVtZSc7XG59O1xuXG52YXIgZ2V0RGVmYXVsdFNob3VsZEZvcndhcmRQcm9wID0gZnVuY3Rpb24gZ2V0RGVmYXVsdFNob3VsZEZvcndhcmRQcm9wKHRhZykge1xuICByZXR1cm4gdHlwZW9mIHRhZyA9PT0gJ3N0cmluZycgJiYgLy8gOTYgaXMgb25lIGxlc3MgdGhhbiB0aGUgY2hhciBjb2RlXG4gIC8vIGZvciBcImFcIiBzbyB0aGlzIGlzIGNoZWNraW5nIHRoYXRcbiAgLy8gaXQncyBhIGxvd2VyY2FzZSBjaGFyYWN0ZXJcbiAgdGFnLmNoYXJDb2RlQXQoMCkgPiA5NiA/IHRlc3RPbWl0UHJvcHNPblN0cmluZ1RhZyA6IHRlc3RPbWl0UHJvcHNPbkNvbXBvbmVudDtcbn07XG52YXIgY29tcG9zZVNob3VsZEZvcndhcmRQcm9wcyA9IGZ1bmN0aW9uIGNvbXBvc2VTaG91bGRGb3J3YXJkUHJvcHModGFnLCBvcHRpb25zLCBpc1JlYWwpIHtcbiAgdmFyIHNob3VsZEZvcndhcmRQcm9wO1xuXG4gIGlmIChvcHRpb25zKSB7XG4gICAgdmFyIG9wdGlvbnNTaG91bGRGb3J3YXJkUHJvcCA9IG9wdGlvbnMuc2hvdWxkRm9yd2FyZFByb3A7XG4gICAgc2hvdWxkRm9yd2FyZFByb3AgPSB0YWcuX19lbW90aW9uX2ZvcndhcmRQcm9wICYmIG9wdGlvbnNTaG91bGRGb3J3YXJkUHJvcCA/IGZ1bmN0aW9uIChwcm9wTmFtZSkge1xuICAgICAgcmV0dXJuIHRhZy5fX2Vtb3Rpb25fZm9yd2FyZFByb3AocHJvcE5hbWUpICYmIG9wdGlvbnNTaG91bGRGb3J3YXJkUHJvcChwcm9wTmFtZSk7XG4gICAgfSA6IG9wdGlvbnNTaG91bGRGb3J3YXJkUHJvcDtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygc2hvdWxkRm9yd2FyZFByb3AgIT09ICdmdW5jdGlvbicgJiYgaXNSZWFsKSB7XG4gICAgc2hvdWxkRm9yd2FyZFByb3AgPSB0YWcuX19lbW90aW9uX2ZvcndhcmRQcm9wO1xuICB9XG5cbiAgcmV0dXJuIHNob3VsZEZvcndhcmRQcm9wO1xufTtcblxudmFyIElMTEVHQUxfRVNDQVBFX1NFUVVFTkNFX0VSUk9SID0gXCJZb3UgaGF2ZSBpbGxlZ2FsIGVzY2FwZSBzZXF1ZW5jZSBpbiB5b3VyIHRlbXBsYXRlIGxpdGVyYWwsIG1vc3QgbGlrZWx5IGluc2lkZSBjb250ZW50J3MgcHJvcGVydHkgdmFsdWUuXFxuQmVjYXVzZSB5b3Ugd3JpdGUgeW91ciBDU1MgaW5zaWRlIGEgSmF2YVNjcmlwdCBzdHJpbmcgeW91IGFjdHVhbGx5IGhhdmUgdG8gZG8gZG91YmxlIGVzY2FwaW5nLCBzbyBmb3IgZXhhbXBsZSBcXFwiY29udGVudDogJ1xcXFwwMGQ3JztcXFwiIHNob3VsZCBiZWNvbWUgXFxcImNvbnRlbnQ6ICdcXFxcXFxcXDAwZDcnO1xcXCIuXFxuWW91IGNhbiByZWFkIG1vcmUgYWJvdXQgdGhpcyBoZXJlOlxcbmh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL1RlbXBsYXRlX2xpdGVyYWxzI0VTMjAxOF9yZXZpc2lvbl9vZl9pbGxlZ2FsX2VzY2FwZV9zZXF1ZW5jZXNcIjtcblxudmFyIEluc2VydGlvbiA9IGZ1bmN0aW9uIEluc2VydGlvbihfcmVmKSB7XG4gIHZhciBjYWNoZSA9IF9yZWYuY2FjaGUsXG4gICAgICBzZXJpYWxpemVkID0gX3JlZi5zZXJpYWxpemVkLFxuICAgICAgaXNTdHJpbmdUYWcgPSBfcmVmLmlzU3RyaW5nVGFnO1xuICByZWdpc3RlclN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgaXNTdHJpbmdUYWcpO1xuICB1c2VJbnNlcnRpb25FZmZlY3RBbHdheXNXaXRoU3luY0ZhbGxiYWNrKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gaW5zZXJ0U3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLCBpc1N0cmluZ1RhZyk7XG4gIH0pO1xuXG4gIHJldHVybiBudWxsO1xufTtcblxudmFyIGNyZWF0ZVN0eWxlZCA9IGZ1bmN0aW9uIGNyZWF0ZVN0eWxlZCh0YWcsIG9wdGlvbnMpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAodGFnID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignWW91IGFyZSB0cnlpbmcgdG8gY3JlYXRlIGEgc3R5bGVkIGVsZW1lbnQgd2l0aCBhbiB1bmRlZmluZWQgY29tcG9uZW50LlxcbllvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gaW1wb3J0IGl0LicpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBpc1JlYWwgPSB0YWcuX19lbW90aW9uX3JlYWwgPT09IHRhZztcbiAgdmFyIGJhc2VUYWcgPSBpc1JlYWwgJiYgdGFnLl9fZW1vdGlvbl9iYXNlIHx8IHRhZztcbiAgdmFyIGlkZW50aWZpZXJOYW1lO1xuICB2YXIgdGFyZ2V0Q2xhc3NOYW1lO1xuXG4gIGlmIChvcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZGVudGlmaWVyTmFtZSA9IG9wdGlvbnMubGFiZWw7XG4gICAgdGFyZ2V0Q2xhc3NOYW1lID0gb3B0aW9ucy50YXJnZXQ7XG4gIH1cblxuICB2YXIgc2hvdWxkRm9yd2FyZFByb3AgPSBjb21wb3NlU2hvdWxkRm9yd2FyZFByb3BzKHRhZywgb3B0aW9ucywgaXNSZWFsKTtcbiAgdmFyIGRlZmF1bHRTaG91bGRGb3J3YXJkUHJvcCA9IHNob3VsZEZvcndhcmRQcm9wIHx8IGdldERlZmF1bHRTaG91bGRGb3J3YXJkUHJvcChiYXNlVGFnKTtcbiAgdmFyIHNob3VsZFVzZUFzID0gIWRlZmF1bHRTaG91bGRGb3J3YXJkUHJvcCgnYXMnKTtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICB2YXIgc3R5bGVzID0gaXNSZWFsICYmIHRhZy5fX2Vtb3Rpb25fc3R5bGVzICE9PSB1bmRlZmluZWQgPyB0YWcuX19lbW90aW9uX3N0eWxlcy5zbGljZSgwKSA6IFtdO1xuXG4gICAgaWYgKGlkZW50aWZpZXJOYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHN0eWxlcy5wdXNoKFwibGFiZWw6XCIgKyBpZGVudGlmaWVyTmFtZSArIFwiO1wiKTtcbiAgICB9XG5cbiAgICBpZiAoYXJnc1swXSA9PSBudWxsIHx8IGFyZ3NbMF0ucmF3ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHN0eWxlcy5wdXNoLmFwcGx5KHN0eWxlcywgYXJncyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGFyZ3NbMF1bMF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKElMTEVHQUxfRVNDQVBFX1NFUVVFTkNFX0VSUk9SKTtcbiAgICAgIH1cblxuICAgICAgc3R5bGVzLnB1c2goYXJnc1swXVswXSk7XG4gICAgICB2YXIgbGVuID0gYXJncy5sZW5ndGg7XG4gICAgICB2YXIgaSA9IDE7XG5cbiAgICAgIGZvciAoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgYXJnc1swXVtpXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihJTExFR0FMX0VTQ0FQRV9TRVFVRU5DRV9FUlJPUik7XG4gICAgICAgIH1cblxuICAgICAgICBzdHlsZXMucHVzaChhcmdzW2ldLCBhcmdzWzBdW2ldKTtcbiAgICAgIH1cbiAgICB9IC8vICRGbG93Rml4TWU6IHdlIG5lZWQgdG8gY2FzdCBTdGF0ZWxlc3NGdW5jdGlvbmFsQ29tcG9uZW50IHRvIG91ciBQcml2YXRlU3R5bGVkQ29tcG9uZW50IGNsYXNzXG5cblxuICAgIHZhciBTdHlsZWQgPSB3aXRoRW1vdGlvbkNhY2hlKGZ1bmN0aW9uIChwcm9wcywgY2FjaGUsIHJlZikge1xuICAgICAgdmFyIEZpbmFsVGFnID0gc2hvdWxkVXNlQXMgJiYgcHJvcHMuYXMgfHwgYmFzZVRhZztcbiAgICAgIHZhciBjbGFzc05hbWUgPSAnJztcbiAgICAgIHZhciBjbGFzc0ludGVycG9sYXRpb25zID0gW107XG4gICAgICB2YXIgbWVyZ2VkUHJvcHMgPSBwcm9wcztcblxuICAgICAgaWYgKHByb3BzLnRoZW1lID09IG51bGwpIHtcbiAgICAgICAgbWVyZ2VkUHJvcHMgPSB7fTtcblxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHtcbiAgICAgICAgICBtZXJnZWRQcm9wc1trZXldID0gcHJvcHNba2V5XTtcbiAgICAgICAgfVxuXG4gICAgICAgIG1lcmdlZFByb3BzLnRoZW1lID0gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHByb3BzLmNsYXNzTmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY2xhc3NOYW1lID0gZ2V0UmVnaXN0ZXJlZFN0eWxlcyhjYWNoZS5yZWdpc3RlcmVkLCBjbGFzc0ludGVycG9sYXRpb25zLCBwcm9wcy5jbGFzc05hbWUpO1xuICAgICAgfSBlbHNlIGlmIChwcm9wcy5jbGFzc05hbWUgIT0gbnVsbCkge1xuICAgICAgICBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUgKyBcIiBcIjtcbiAgICAgIH1cblxuICAgICAgdmFyIHNlcmlhbGl6ZWQgPSBzZXJpYWxpemVTdHlsZXMoc3R5bGVzLmNvbmNhdChjbGFzc0ludGVycG9sYXRpb25zKSwgY2FjaGUucmVnaXN0ZXJlZCwgbWVyZ2VkUHJvcHMpO1xuICAgICAgY2xhc3NOYW1lICs9IGNhY2hlLmtleSArIFwiLVwiICsgc2VyaWFsaXplZC5uYW1lO1xuXG4gICAgICBpZiAodGFyZ2V0Q2xhc3NOYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY2xhc3NOYW1lICs9IFwiIFwiICsgdGFyZ2V0Q2xhc3NOYW1lO1xuICAgICAgfVxuXG4gICAgICB2YXIgZmluYWxTaG91bGRGb3J3YXJkUHJvcCA9IHNob3VsZFVzZUFzICYmIHNob3VsZEZvcndhcmRQcm9wID09PSB1bmRlZmluZWQgPyBnZXREZWZhdWx0U2hvdWxkRm9yd2FyZFByb3AoRmluYWxUYWcpIDogZGVmYXVsdFNob3VsZEZvcndhcmRQcm9wO1xuICAgICAgdmFyIG5ld1Byb3BzID0ge307XG5cbiAgICAgIGZvciAodmFyIF9rZXkgaW4gcHJvcHMpIHtcbiAgICAgICAgaWYgKHNob3VsZFVzZUFzICYmIF9rZXkgPT09ICdhcycpIGNvbnRpbnVlO1xuXG4gICAgICAgIGlmICggLy8gJEZsb3dGaXhNZVxuICAgICAgICBmaW5hbFNob3VsZEZvcndhcmRQcm9wKF9rZXkpKSB7XG4gICAgICAgICAgbmV3UHJvcHNbX2tleV0gPSBwcm9wc1tfa2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBuZXdQcm9wcy5jbGFzc05hbWUgPSBjbGFzc05hbWU7XG4gICAgICBuZXdQcm9wcy5yZWYgPSByZWY7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEluc2VydGlvbiwge1xuICAgICAgICBjYWNoZTogY2FjaGUsXG4gICAgICAgIHNlcmlhbGl6ZWQ6IHNlcmlhbGl6ZWQsXG4gICAgICAgIGlzU3RyaW5nVGFnOiB0eXBlb2YgRmluYWxUYWcgPT09ICdzdHJpbmcnXG4gICAgICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoRmluYWxUYWcsIG5ld1Byb3BzKSk7XG4gICAgfSk7XG4gICAgU3R5bGVkLmRpc3BsYXlOYW1lID0gaWRlbnRpZmllck5hbWUgIT09IHVuZGVmaW5lZCA/IGlkZW50aWZpZXJOYW1lIDogXCJTdHlsZWQoXCIgKyAodHlwZW9mIGJhc2VUYWcgPT09ICdzdHJpbmcnID8gYmFzZVRhZyA6IGJhc2VUYWcuZGlzcGxheU5hbWUgfHwgYmFzZVRhZy5uYW1lIHx8ICdDb21wb25lbnQnKSArIFwiKVwiO1xuICAgIFN0eWxlZC5kZWZhdWx0UHJvcHMgPSB0YWcuZGVmYXVsdFByb3BzO1xuICAgIFN0eWxlZC5fX2Vtb3Rpb25fcmVhbCA9IFN0eWxlZDtcbiAgICBTdHlsZWQuX19lbW90aW9uX2Jhc2UgPSBiYXNlVGFnO1xuICAgIFN0eWxlZC5fX2Vtb3Rpb25fc3R5bGVzID0gc3R5bGVzO1xuICAgIFN0eWxlZC5fX2Vtb3Rpb25fZm9yd2FyZFByb3AgPSBzaG91bGRGb3J3YXJkUHJvcDtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3R5bGVkLCAndG9TdHJpbmcnLCB7XG4gICAgICB2YWx1ZTogZnVuY3Rpb24gdmFsdWUoKSB7XG4gICAgICAgIGlmICh0YXJnZXRDbGFzc05hbWUgPT09IHVuZGVmaW5lZCAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgcmV0dXJuICdOT19DT01QT05FTlRfU0VMRUNUT1InO1xuICAgICAgICB9IC8vICRGbG93Rml4TWU6IGNvZXJjZSB1bmRlZmluZWQgdG8gc3RyaW5nXG5cblxuICAgICAgICByZXR1cm4gXCIuXCIgKyB0YXJnZXRDbGFzc05hbWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBTdHlsZWQud2l0aENvbXBvbmVudCA9IGZ1bmN0aW9uIChuZXh0VGFnLCBuZXh0T3B0aW9ucykge1xuICAgICAgcmV0dXJuIGNyZWF0ZVN0eWxlZChuZXh0VGFnLCBfZXh0ZW5kcyh7fSwgb3B0aW9ucywgbmV4dE9wdGlvbnMsIHtcbiAgICAgICAgc2hvdWxkRm9yd2FyZFByb3A6IGNvbXBvc2VTaG91bGRGb3J3YXJkUHJvcHMoU3R5bGVkLCBuZXh0T3B0aW9ucywgdHJ1ZSlcbiAgICAgIH0pKS5hcHBseSh2b2lkIDAsIHN0eWxlcyk7XG4gICAgfTtcblxuICAgIHJldHVybiBTdHlsZWQ7XG4gIH07XG59O1xuXG5leHBvcnQgeyBjcmVhdGVTdHlsZWQgYXMgZGVmYXVsdCB9O1xuIiwgImltcG9ydCBjcmVhdGVTdHlsZWQgZnJvbSAnLi4vYmFzZS9kaXN0L2Vtb3Rpb24tc3R5bGVkLWJhc2UuYnJvd3Nlci5lc20uanMnO1xuaW1wb3J0ICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2V4dGVuZHMnO1xuaW1wb3J0ICdyZWFjdCc7XG5pbXBvcnQgJ0BlbW90aW9uL2lzLXByb3AtdmFsaWQnO1xuaW1wb3J0ICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgJ0BlbW90aW9uL3V0aWxzJztcbmltcG9ydCAnQGVtb3Rpb24vc2VyaWFsaXplJztcbmltcG9ydCAnQGVtb3Rpb24vdXNlLWluc2VydGlvbi1lZmZlY3Qtd2l0aC1mYWxsYmFja3MnO1xuXG52YXIgdGFncyA9IFsnYScsICdhYmJyJywgJ2FkZHJlc3MnLCAnYXJlYScsICdhcnRpY2xlJywgJ2FzaWRlJywgJ2F1ZGlvJywgJ2InLCAnYmFzZScsICdiZGknLCAnYmRvJywgJ2JpZycsICdibG9ja3F1b3RlJywgJ2JvZHknLCAnYnInLCAnYnV0dG9uJywgJ2NhbnZhcycsICdjYXB0aW9uJywgJ2NpdGUnLCAnY29kZScsICdjb2wnLCAnY29sZ3JvdXAnLCAnZGF0YScsICdkYXRhbGlzdCcsICdkZCcsICdkZWwnLCAnZGV0YWlscycsICdkZm4nLCAnZGlhbG9nJywgJ2RpdicsICdkbCcsICdkdCcsICdlbScsICdlbWJlZCcsICdmaWVsZHNldCcsICdmaWdjYXB0aW9uJywgJ2ZpZ3VyZScsICdmb290ZXInLCAnZm9ybScsICdoMScsICdoMicsICdoMycsICdoNCcsICdoNScsICdoNicsICdoZWFkJywgJ2hlYWRlcicsICdoZ3JvdXAnLCAnaHInLCAnaHRtbCcsICdpJywgJ2lmcmFtZScsICdpbWcnLCAnaW5wdXQnLCAnaW5zJywgJ2tiZCcsICdrZXlnZW4nLCAnbGFiZWwnLCAnbGVnZW5kJywgJ2xpJywgJ2xpbmsnLCAnbWFpbicsICdtYXAnLCAnbWFyaycsICdtYXJxdWVlJywgJ21lbnUnLCAnbWVudWl0ZW0nLCAnbWV0YScsICdtZXRlcicsICduYXYnLCAnbm9zY3JpcHQnLCAnb2JqZWN0JywgJ29sJywgJ29wdGdyb3VwJywgJ29wdGlvbicsICdvdXRwdXQnLCAncCcsICdwYXJhbScsICdwaWN0dXJlJywgJ3ByZScsICdwcm9ncmVzcycsICdxJywgJ3JwJywgJ3J0JywgJ3J1YnknLCAncycsICdzYW1wJywgJ3NjcmlwdCcsICdzZWN0aW9uJywgJ3NlbGVjdCcsICdzbWFsbCcsICdzb3VyY2UnLCAnc3BhbicsICdzdHJvbmcnLCAnc3R5bGUnLCAnc3ViJywgJ3N1bW1hcnknLCAnc3VwJywgJ3RhYmxlJywgJ3Rib2R5JywgJ3RkJywgJ3RleHRhcmVhJywgJ3Rmb290JywgJ3RoJywgJ3RoZWFkJywgJ3RpbWUnLCAndGl0bGUnLCAndHInLCAndHJhY2snLCAndScsICd1bCcsICd2YXInLCAndmlkZW8nLCAnd2JyJywgLy8gU1ZHXG4nY2lyY2xlJywgJ2NsaXBQYXRoJywgJ2RlZnMnLCAnZWxsaXBzZScsICdmb3JlaWduT2JqZWN0JywgJ2cnLCAnaW1hZ2UnLCAnbGluZScsICdsaW5lYXJHcmFkaWVudCcsICdtYXNrJywgJ3BhdGgnLCAncGF0dGVybicsICdwb2x5Z29uJywgJ3BvbHlsaW5lJywgJ3JhZGlhbEdyYWRpZW50JywgJ3JlY3QnLCAnc3RvcCcsICdzdmcnLCAndGV4dCcsICd0c3BhbiddO1xuXG52YXIgbmV3U3R5bGVkID0gY3JlYXRlU3R5bGVkLmJpbmQoKTtcbnRhZ3MuZm9yRWFjaChmdW5jdGlvbiAodGFnTmFtZSkge1xuICAvLyAkRmxvd0ZpeE1lOiB3ZSBjYW4gaWdub3JlIHRoaXMgYmVjYXVzZSBpdHMgZXhwb3NlZCB0eXBlIGlzIGRlZmluZWQgYnkgdGhlIENyZWF0ZVN0eWxlZCB0eXBlXG4gIG5ld1N0eWxlZFt0YWdOYW1lXSA9IG5ld1N0eWxlZCh0YWdOYW1lKTtcbn0pO1xuXG5leHBvcnQgeyBuZXdTdHlsZWQgYXMgZGVmYXVsdCB9O1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSAnU0VDUkVUX0RPX05PVF9QQVNTX1RISVNfT1JfWU9VX1dJTExfQkVfRklSRUQnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0UHJvcFR5cGVzU2VjcmV0O1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSByZXF1aXJlKCcuL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldCcpO1xuXG5mdW5jdGlvbiBlbXB0eUZ1bmN0aW9uKCkge31cbmZ1bmN0aW9uIGVtcHR5RnVuY3Rpb25XaXRoUmVzZXQoKSB7fVxuZW1wdHlGdW5jdGlvbldpdGhSZXNldC5yZXNldFdhcm5pbmdDYWNoZSA9IGVtcHR5RnVuY3Rpb247XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIHNoaW0ocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpIHtcbiAgICBpZiAoc2VjcmV0ID09PSBSZWFjdFByb3BUeXBlc1NlY3JldCkge1xuICAgICAgLy8gSXQgaXMgc3RpbGwgc2FmZSB3aGVuIGNhbGxlZCBmcm9tIFJlYWN0LlxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgZXJyID0gbmV3IEVycm9yKFxuICAgICAgJ0NhbGxpbmcgUHJvcFR5cGVzIHZhbGlkYXRvcnMgZGlyZWN0bHkgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UuICcgK1xuICAgICAgJ1VzZSBQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMoKSB0byBjYWxsIHRoZW0uICcgK1xuICAgICAgJ1JlYWQgbW9yZSBhdCBodHRwOi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXMnXG4gICAgKTtcbiAgICBlcnIubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICB0aHJvdyBlcnI7XG4gIH07XG4gIHNoaW0uaXNSZXF1aXJlZCA9IHNoaW07XG4gIGZ1bmN0aW9uIGdldFNoaW0oKSB7XG4gICAgcmV0dXJuIHNoaW07XG4gIH07XG4gIC8vIEltcG9ydGFudCFcbiAgLy8gS2VlcCB0aGlzIGxpc3QgaW4gc3luYyB3aXRoIHByb2R1Y3Rpb24gdmVyc2lvbiBpbiBgLi9mYWN0b3J5V2l0aFR5cGVDaGVja2Vycy5qc2AuXG4gIHZhciBSZWFjdFByb3BUeXBlcyA9IHtcbiAgICBhcnJheTogc2hpbSxcbiAgICBiaWdpbnQ6IHNoaW0sXG4gICAgYm9vbDogc2hpbSxcbiAgICBmdW5jOiBzaGltLFxuICAgIG51bWJlcjogc2hpbSxcbiAgICBvYmplY3Q6IHNoaW0sXG4gICAgc3RyaW5nOiBzaGltLFxuICAgIHN5bWJvbDogc2hpbSxcblxuICAgIGFueTogc2hpbSxcbiAgICBhcnJheU9mOiBnZXRTaGltLFxuICAgIGVsZW1lbnQ6IHNoaW0sXG4gICAgZWxlbWVudFR5cGU6IHNoaW0sXG4gICAgaW5zdGFuY2VPZjogZ2V0U2hpbSxcbiAgICBub2RlOiBzaGltLFxuICAgIG9iamVjdE9mOiBnZXRTaGltLFxuICAgIG9uZU9mOiBnZXRTaGltLFxuICAgIG9uZU9mVHlwZTogZ2V0U2hpbSxcbiAgICBzaGFwZTogZ2V0U2hpbSxcbiAgICBleGFjdDogZ2V0U2hpbSxcblxuICAgIGNoZWNrUHJvcFR5cGVzOiBlbXB0eUZ1bmN0aW9uV2l0aFJlc2V0LFxuICAgIHJlc2V0V2FybmluZ0NhY2hlOiBlbXB0eUZ1bmN0aW9uXG4gIH07XG5cbiAgUmVhY3RQcm9wVHlwZXMuUHJvcFR5cGVzID0gUmVhY3RQcm9wVHlwZXM7XG5cbiAgcmV0dXJuIFJlYWN0UHJvcFR5cGVzO1xufTtcbiIsICIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBSZWFjdElzID0gcmVxdWlyZSgncmVhY3QtaXMnKTtcblxuICAvLyBCeSBleHBsaWNpdGx5IHVzaW5nIGBwcm9wLXR5cGVzYCB5b3UgYXJlIG9wdGluZyBpbnRvIG5ldyBkZXZlbG9wbWVudCBiZWhhdmlvci5cbiAgLy8gaHR0cDovL2ZiLm1lL3Byb3AtdHlwZXMtaW4tcHJvZFxuICB2YXIgdGhyb3dPbkRpcmVjdEFjY2VzcyA9IHRydWU7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9mYWN0b3J5V2l0aFR5cGVDaGVja2VycycpKFJlYWN0SXMuaXNFbGVtZW50LCB0aHJvd09uRGlyZWN0QWNjZXNzKTtcbn0gZWxzZSB7XG4gIC8vIEJ5IGV4cGxpY2l0bHkgdXNpbmcgYHByb3AtdHlwZXNgIHlvdSBhcmUgb3B0aW5nIGludG8gbmV3IHByb2R1Y3Rpb24gYmVoYXZpb3IuXG4gIC8vIGh0dHA6Ly9mYi5tZS9wcm9wLXR5cGVzLWluLXByb2RcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcycpKCk7XG59XG4iLCAiLyoqIEBsaWNlbnNlIFJlYWN0IHYxNy4wLjJcbiAqIHJlYWN0LWpzeC1ydW50aW1lLnByb2R1Y3Rpb24ubWluLmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cbid1c2Ugc3RyaWN0JztyZXF1aXJlKFwib2JqZWN0LWFzc2lnblwiKTt2YXIgZj1yZXF1aXJlKFwicmVhY3RcIiksZz02MDEwMztleHBvcnRzLkZyYWdtZW50PTYwMTA3O2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5mb3Ipe3ZhciBoPVN5bWJvbC5mb3I7Zz1oKFwicmVhY3QuZWxlbWVudFwiKTtleHBvcnRzLkZyYWdtZW50PWgoXCJyZWFjdC5mcmFnbWVudFwiKX12YXIgbT1mLl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVELlJlYWN0Q3VycmVudE93bmVyLG49T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxwPXtrZXk6ITAscmVmOiEwLF9fc2VsZjohMCxfX3NvdXJjZTohMH07XG5mdW5jdGlvbiBxKGMsYSxrKXt2YXIgYixkPXt9LGU9bnVsbCxsPW51bGw7dm9pZCAwIT09ayYmKGU9XCJcIitrKTt2b2lkIDAhPT1hLmtleSYmKGU9XCJcIithLmtleSk7dm9pZCAwIT09YS5yZWYmJihsPWEucmVmKTtmb3IoYiBpbiBhKW4uY2FsbChhLGIpJiYhcC5oYXNPd25Qcm9wZXJ0eShiKSYmKGRbYl09YVtiXSk7aWYoYyYmYy5kZWZhdWx0UHJvcHMpZm9yKGIgaW4gYT1jLmRlZmF1bHRQcm9wcyxhKXZvaWQgMD09PWRbYl0mJihkW2JdPWFbYl0pO3JldHVybnskJHR5cGVvZjpnLHR5cGU6YyxrZXk6ZSxyZWY6bCxwcm9wczpkLF9vd25lcjptLmN1cnJlbnR9fWV4cG9ydHMuanN4PXE7ZXhwb3J0cy5qc3hzPXE7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWpzeC1ydW50aW1lLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWpzeC1ydW50aW1lLmRldmVsb3BtZW50LmpzJyk7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG4ndXNlIGNsaWVudCc7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IFN0eWxlZEVuZ2luZVByb3ZpZGVyO1xudmFyIFJlYWN0ID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQocmVxdWlyZShcInJlYWN0XCIpKTtcbnZhciBfcHJvcFR5cGVzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwicHJvcC10eXBlc1wiKSk7XG52YXIgX3JlYWN0MiA9IHJlcXVpcmUoXCJAZW1vdGlvbi9yZWFjdFwiKTtcbnZhciBfY2FjaGUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJAZW1vdGlvbi9jYWNoZVwiKSk7XG52YXIgX2pzeFJ1bnRpbWUgPSByZXF1aXJlKFwicmVhY3QvanN4LXJ1bnRpbWVcIik7XG5mdW5jdGlvbiBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBXZWFrTWFwKSByZXR1cm4gbnVsbDsgdmFyIHIgPSBuZXcgV2Vha01hcCgpLCB0ID0gbmV3IFdlYWtNYXAoKTsgcmV0dXJuIChfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUgPSBmdW5jdGlvbiAoZSkgeyByZXR1cm4gZSA/IHQgOiByOyB9KShlKTsgfVxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQoZSwgcikgeyBpZiAoIXIgJiYgZSAmJiBlLl9fZXNNb2R1bGUpIHJldHVybiBlOyBpZiAobnVsbCA9PT0gZSB8fCBcIm9iamVjdFwiICE9IHR5cGVvZiBlICYmIFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSkgcmV0dXJuIHsgZGVmYXVsdDogZSB9OyB2YXIgdCA9IF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShyKTsgaWYgKHQgJiYgdC5oYXMoZSkpIHJldHVybiB0LmdldChlKTsgdmFyIG4gPSB7IF9fcHJvdG9fXzogbnVsbCB9LCBhID0gT2JqZWN0LmRlZmluZVByb3BlcnR5ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7IGZvciAodmFyIHUgaW4gZSkgaWYgKFwiZGVmYXVsdFwiICE9PSB1ICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCB1KSkgeyB2YXIgaSA9IGEgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHUpIDogbnVsbDsgaSAmJiAoaS5nZXQgfHwgaS5zZXQpID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIHUsIGkpIDogblt1XSA9IGVbdV07IH0gcmV0dXJuIG4uZGVmYXVsdCA9IGUsIHQgJiYgdC5zZXQoZSwgbiksIG47IH1cbi8vIHByZXBlbmQ6IHRydWUgbW92ZXMgTVVJIHN0eWxlcyB0byB0aGUgdG9wIG9mIHRoZSA8aGVhZD4gc28gdGhleSdyZSBsb2FkZWQgZmlyc3QuXG4vLyBJdCBhbGxvd3MgZGV2ZWxvcGVycyB0byBlYXNpbHkgb3ZlcnJpZGUgTVVJIHN0eWxlcyB3aXRoIG90aGVyIHN0eWxpbmcgc29sdXRpb25zLCBsaWtlIENTUyBtb2R1bGVzLlxubGV0IGNhY2hlO1xuaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ29iamVjdCcpIHtcbiAgY2FjaGUgPSAoMCwgX2NhY2hlLmRlZmF1bHQpKHtcbiAgICBrZXk6ICdjc3MnLFxuICAgIHByZXBlbmQ6IHRydWVcbiAgfSk7XG59XG5mdW5jdGlvbiBTdHlsZWRFbmdpbmVQcm92aWRlcihwcm9wcykge1xuICBjb25zdCB7XG4gICAgaW5qZWN0Rmlyc3QsXG4gICAgY2hpbGRyZW5cbiAgfSA9IHByb3BzO1xuICByZXR1cm4gaW5qZWN0Rmlyc3QgJiYgY2FjaGUgPyAvKiNfX1BVUkVfXyovKDAsIF9qc3hSdW50aW1lLmpzeCkoX3JlYWN0Mi5DYWNoZVByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IGNhY2hlLFxuICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICB9KSA6IGNoaWxkcmVuO1xufVxucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gU3R5bGVkRW5naW5lUHJvdmlkZXIucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICogWW91ciBjb21wb25lbnQgdHJlZS5cbiAgICovXG4gIGNoaWxkcmVuOiBfcHJvcFR5cGVzLmRlZmF1bHQubm9kZSxcbiAgLyoqXG4gICAqIEJ5IGRlZmF1bHQsIHRoZSBzdHlsZXMgYXJlIGluamVjdGVkIGxhc3QgaW4gdGhlIDxoZWFkPiBlbGVtZW50IG9mIHRoZSBwYWdlLlxuICAgKiBBcyBhIHJlc3VsdCwgdGhleSBnYWluIG1vcmUgc3BlY2lmaWNpdHkgdGhhbiBhbnkgb3RoZXIgc3R5bGUgc2hlZXQuXG4gICAqIElmIHlvdSB3YW50IHRvIG92ZXJyaWRlIE1VSSdzIHN0eWxlcywgc2V0IHRoaXMgcHJvcC5cbiAgICovXG4gIGluamVjdEZpcnN0OiBfcHJvcFR5cGVzLmRlZmF1bHQuYm9vbFxufSA6IHZvaWQgMDsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG4ndXNlIGNsaWVudCc7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRlZmF1bHRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX1N0eWxlZEVuZ2luZVByb3ZpZGVyLmRlZmF1bHQ7XG4gIH1cbn0pO1xudmFyIF9TdHlsZWRFbmdpbmVQcm92aWRlciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vU3R5bGVkRW5naW5lUHJvdmlkZXJcIikpOyIsICJcInVzZSBzdHJpY3RcIjtcbid1c2UgY2xpZW50JztcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gR2xvYmFsU3R5bGVzO1xudmFyIFJlYWN0ID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQocmVxdWlyZShcInJlYWN0XCIpKTtcbnZhciBfcHJvcFR5cGVzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwicHJvcC10eXBlc1wiKSk7XG52YXIgX3JlYWN0MiA9IHJlcXVpcmUoXCJAZW1vdGlvbi9yZWFjdFwiKTtcbnZhciBfanN4UnVudGltZSA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtcnVudGltZVwiKTtcbmZ1bmN0aW9uIF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIFdlYWtNYXApIHJldHVybiBudWxsOyB2YXIgciA9IG5ldyBXZWFrTWFwKCksIHQgPSBuZXcgV2Vha01hcCgpOyByZXR1cm4gKF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSA9IGZ1bmN0aW9uIChlKSB7IHJldHVybiBlID8gdCA6IHI7IH0pKGUpOyB9XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChlLCByKSB7IGlmICghciAmJiBlICYmIGUuX19lc01vZHVsZSkgcmV0dXJuIGU7IGlmIChudWxsID09PSBlIHx8IFwib2JqZWN0XCIgIT0gdHlwZW9mIGUgJiYgXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlKSByZXR1cm4geyBkZWZhdWx0OiBlIH07IHZhciB0ID0gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKHIpOyBpZiAodCAmJiB0LmhhcyhlKSkgcmV0dXJuIHQuZ2V0KGUpOyB2YXIgbiA9IHsgX19wcm90b19fOiBudWxsIH0sIGEgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjsgZm9yICh2YXIgdSBpbiBlKSBpZiAoXCJkZWZhdWx0XCIgIT09IHUgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIHUpKSB7IHZhciBpID0gYSA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgdSkgOiBudWxsOyBpICYmIChpLmdldCB8fCBpLnNldCkgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkobiwgdSwgaSkgOiBuW3VdID0gZVt1XTsgfSByZXR1cm4gbi5kZWZhdWx0ID0gZSwgdCAmJiB0LnNldChlLCBuKSwgbjsgfVxuZnVuY3Rpb24gaXNFbXB0eShvYmopIHtcbiAgcmV0dXJuIG9iaiA9PT0gdW5kZWZpbmVkIHx8IG9iaiA9PT0gbnVsbCB8fCBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA9PT0gMDtcbn1cbmZ1bmN0aW9uIEdsb2JhbFN0eWxlcyhwcm9wcykge1xuICBjb25zdCB7XG4gICAgc3R5bGVzLFxuICAgIGRlZmF1bHRUaGVtZSA9IHt9XG4gIH0gPSBwcm9wcztcbiAgY29uc3QgZ2xvYmFsU3R5bGVzID0gdHlwZW9mIHN0eWxlcyA9PT0gJ2Z1bmN0aW9uJyA/IHRoZW1lSW5wdXQgPT4gc3R5bGVzKGlzRW1wdHkodGhlbWVJbnB1dCkgPyBkZWZhdWx0VGhlbWUgOiB0aGVtZUlucHV0KSA6IHN0eWxlcztcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi8oMCwgX2pzeFJ1bnRpbWUuanN4KShfcmVhY3QyLkdsb2JhbCwge1xuICAgIHN0eWxlczogZ2xvYmFsU3R5bGVzXG4gIH0pO1xufVxucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gR2xvYmFsU3R5bGVzLnByb3BUeXBlcyA9IHtcbiAgZGVmYXVsdFRoZW1lOiBfcHJvcFR5cGVzLmRlZmF1bHQub2JqZWN0LFxuICBzdHlsZXM6IF9wcm9wVHlwZXMuZGVmYXVsdC5vbmVPZlR5cGUoW19wcm9wVHlwZXMuZGVmYXVsdC5hcnJheSwgX3Byb3BUeXBlcy5kZWZhdWx0LnN0cmluZywgX3Byb3BUeXBlcy5kZWZhdWx0Lm9iamVjdCwgX3Byb3BUeXBlcy5kZWZhdWx0LmZ1bmNdKVxufSA6IHZvaWQgMDsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG4ndXNlIGNsaWVudCc7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRlZmF1bHRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX0dsb2JhbFN0eWxlcy5kZWZhdWx0O1xuICB9XG59KTtcbnZhciBfR2xvYmFsU3R5bGVzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9HbG9iYWxTdHlsZXNcIikpOyIsICIvKipcbiAqIEBtdWkvc3R5bGVkLWVuZ2luZSB2NS4xNS4xMVxuICpcbiAqIEBsaWNlbnNlIE1JVFxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblwidXNlIHN0cmljdFwiO1xuJ3VzZSBjbGllbnQnO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlcnNjb3JlLWRhbmdsZSAqL1xudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiR2xvYmFsU3R5bGVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9HbG9iYWxTdHlsZXMuZGVmYXVsdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJTdHlsZWRFbmdpbmVQcm92aWRlclwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfU3R5bGVkRW5naW5lUHJvdmlkZXIuZGVmYXVsdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJUaGVtZUNvbnRleHRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3JlYWN0LlRoZW1lQ29udGV4dDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjc3NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3JlYWN0LmNzcztcbiAgfVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSBzdHlsZWQ7XG5leHBvcnRzLmludGVybmFsX3Byb2Nlc3NTdHlsZXMgPSB2b2lkIDA7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJrZXlmcmFtZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3JlYWN0LmtleWZyYW1lcztcbiAgfVxufSk7XG52YXIgX3N0eWxlZCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIkBlbW90aW9uL3N0eWxlZFwiKSk7XG52YXIgX3JlYWN0ID0gcmVxdWlyZShcIkBlbW90aW9uL3JlYWN0XCIpO1xudmFyIF9TdHlsZWRFbmdpbmVQcm92aWRlciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vU3R5bGVkRW5naW5lUHJvdmlkZXJcIikpO1xudmFyIF9HbG9iYWxTdHlsZXMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL0dsb2JhbFN0eWxlc1wiKSk7XG5mdW5jdGlvbiBzdHlsZWQodGFnLCBvcHRpb25zKSB7XG4gIGNvbnN0IHN0eWxlc0ZhY3RvcnkgPSAoMCwgX3N0eWxlZC5kZWZhdWx0KSh0YWcsIG9wdGlvbnMpO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHJldHVybiAoLi4uc3R5bGVzKSA9PiB7XG4gICAgICBjb25zdCBjb21wb25lbnQgPSB0eXBlb2YgdGFnID09PSAnc3RyaW5nJyA/IGBcIiR7dGFnfVwiYCA6ICdjb21wb25lbnQnO1xuICAgICAgaWYgKHN0eWxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihbYE1VSTogU2VlbXMgbGlrZSB5b3UgY2FsbGVkIFxcYHN0eWxlZCgke2NvbXBvbmVudH0pKClcXGAgd2l0aG91dCBhIFxcYHN0eWxlXFxgIGFyZ3VtZW50LmAsICdZb3UgbXVzdCBwcm92aWRlIGEgYHN0eWxlc2AgYXJndW1lbnQ6IGBzdHlsZWQoXCJkaXZcIikoc3R5bGVZb3VGb3Jnb3RUb1Bhc3MpYC4nXS5qb2luKCdcXG4nKSk7XG4gICAgICB9IGVsc2UgaWYgKHN0eWxlcy5zb21lKHN0eWxlID0+IHN0eWxlID09PSB1bmRlZmluZWQpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYE1VSTogdGhlIHN0eWxlZCgke2NvbXBvbmVudH0pKC4uLmFyZ3MpIEFQSSByZXF1aXJlcyBhbGwgaXRzIGFyZ3MgdG8gYmUgZGVmaW5lZC5gKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdHlsZXNGYWN0b3J5KC4uLnN0eWxlcyk7XG4gICAgfTtcbiAgfVxuICByZXR1cm4gc3R5bGVzRmFjdG9yeTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuY29uc3QgaW50ZXJuYWxfcHJvY2Vzc1N0eWxlcyA9ICh0YWcsIHByb2Nlc3NvcikgPT4ge1xuICAvLyBFbW90aW9uIGF0dGFjaGVzIGFsbCB0aGUgc3R5bGVzIGFzIGBfX2Vtb3Rpb25fc3R5bGVzYC5cbiAgLy8gUmVmOiBodHRwczovL2dpdGh1Yi5jb20vZW1vdGlvbi1qcy9lbW90aW9uL2Jsb2IvMTZkOTcxZDBkYTIyOTU5NmQ2YmNjMzlkMjgyYmE5NzUzYzllZTdjZi9wYWNrYWdlcy9zdHlsZWQvc3JjL2Jhc2UuanMjTDE4NlxuICBpZiAoQXJyYXkuaXNBcnJheSh0YWcuX19lbW90aW9uX3N0eWxlcykpIHtcbiAgICB0YWcuX19lbW90aW9uX3N0eWxlcyA9IHByb2Nlc3Nvcih0YWcuX19lbW90aW9uX3N0eWxlcyk7XG4gIH1cbn07XG5leHBvcnRzLmludGVybmFsX3Byb2Nlc3NTdHlsZXMgPSBpbnRlcm5hbF9wcm9jZXNzU3R5bGVzOyIsICJmdW5jdGlvbiBfZXh0ZW5kcygpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcbiAgICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cztcbiAgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9leHRlbmRzLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwgIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSBkZWVwbWVyZ2U7XG5leHBvcnRzLmlzUGxhaW5PYmplY3QgPSBpc1BsYWluT2JqZWN0O1xudmFyIF9leHRlbmRzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXh0ZW5kc1wiKSk7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL2lzLXBsYWluLW9iai9ibG9iL21haW4vaW5kZXguanNcbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QoaXRlbSkge1xuICBpZiAodHlwZW9mIGl0ZW0gIT09ICdvYmplY3QnIHx8IGl0ZW0gPT09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgcHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGl0ZW0pO1xuICByZXR1cm4gKHByb3RvdHlwZSA9PT0gbnVsbCB8fCBwcm90b3R5cGUgPT09IE9iamVjdC5wcm90b3R5cGUgfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvdHlwZSkgPT09IG51bGwpICYmICEoU3ltYm9sLnRvU3RyaW5nVGFnIGluIGl0ZW0pICYmICEoU3ltYm9sLml0ZXJhdG9yIGluIGl0ZW0pO1xufVxuZnVuY3Rpb24gZGVlcENsb25lKHNvdXJjZSkge1xuICBpZiAoIWlzUGxhaW5PYmplY3Qoc291cmNlKSkge1xuICAgIHJldHVybiBzb3VyY2U7XG4gIH1cbiAgY29uc3Qgb3V0cHV0ID0ge307XG4gIE9iamVjdC5rZXlzKHNvdXJjZSkuZm9yRWFjaChrZXkgPT4ge1xuICAgIG91dHB1dFtrZXldID0gZGVlcENsb25lKHNvdXJjZVtrZXldKTtcbiAgfSk7XG4gIHJldHVybiBvdXRwdXQ7XG59XG5mdW5jdGlvbiBkZWVwbWVyZ2UodGFyZ2V0LCBzb3VyY2UsIG9wdGlvbnMgPSB7XG4gIGNsb25lOiB0cnVlXG59KSB7XG4gIGNvbnN0IG91dHB1dCA9IG9wdGlvbnMuY2xvbmUgPyAoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHt9LCB0YXJnZXQpIDogdGFyZ2V0O1xuICBpZiAoaXNQbGFpbk9iamVjdCh0YXJnZXQpICYmIGlzUGxhaW5PYmplY3Qoc291cmNlKSkge1xuICAgIE9iamVjdC5rZXlzKHNvdXJjZSkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgLy8gQXZvaWQgcHJvdG90eXBlIHBvbGx1dGlvblxuICAgICAgaWYgKGtleSA9PT0gJ19fcHJvdG9fXycpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGlzUGxhaW5PYmplY3Qoc291cmNlW2tleV0pICYmIGtleSBpbiB0YXJnZXQgJiYgaXNQbGFpbk9iamVjdCh0YXJnZXRba2V5XSkpIHtcbiAgICAgICAgLy8gU2luY2UgYG91dHB1dGAgaXMgYSBjbG9uZSBvZiBgdGFyZ2V0YCBhbmQgd2UgaGF2ZSBuYXJyb3dlZCBgdGFyZ2V0YCBpbiB0aGlzIGJsb2NrIHdlIGNhbiBjYXN0IHRvIHRoZSBzYW1lIHR5cGUuXG4gICAgICAgIG91dHB1dFtrZXldID0gZGVlcG1lcmdlKHRhcmdldFtrZXldLCBzb3VyY2Vba2V5XSwgb3B0aW9ucyk7XG4gICAgICB9IGVsc2UgaWYgKG9wdGlvbnMuY2xvbmUpIHtcbiAgICAgICAgb3V0cHV0W2tleV0gPSBpc1BsYWluT2JqZWN0KHNvdXJjZVtrZXldKSA/IGRlZXBDbG9uZShzb3VyY2Vba2V5XSkgOiBzb3VyY2Vba2V5XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dHB1dFtrZXldID0gc291cmNlW2tleV07XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG91dHB1dDtcbn0iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG52YXIgX2V4cG9ydE5hbWVzID0ge307XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZWZhdWx0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9kZWVwbWVyZ2UuZGVmYXVsdDtcbiAgfVxufSk7XG52YXIgX2RlZXBtZXJnZSA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKHJlcXVpcmUoXCIuL2RlZXBtZXJnZVwiKSk7XG5PYmplY3Qua2V5cyhfZGVlcG1lcmdlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgaWYgKGtleSA9PT0gXCJkZWZhdWx0XCIgfHwga2V5ID09PSBcIl9fZXNNb2R1bGVcIikgcmV0dXJuO1xuICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF9leHBvcnROYW1lcywga2V5KSkgcmV0dXJuO1xuICBpZiAoa2V5IGluIGV4cG9ydHMgJiYgZXhwb3J0c1trZXldID09PSBfZGVlcG1lcmdlW2tleV0pIHJldHVybjtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX2RlZXBtZXJnZVtrZXldO1xuICAgIH1cbiAgfSk7XG59KTtcbmZ1bmN0aW9uIF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIFdlYWtNYXApIHJldHVybiBudWxsOyB2YXIgciA9IG5ldyBXZWFrTWFwKCksIHQgPSBuZXcgV2Vha01hcCgpOyByZXR1cm4gKF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSA9IGZ1bmN0aW9uIChlKSB7IHJldHVybiBlID8gdCA6IHI7IH0pKGUpOyB9XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChlLCByKSB7IGlmICghciAmJiBlICYmIGUuX19lc01vZHVsZSkgcmV0dXJuIGU7IGlmIChudWxsID09PSBlIHx8IFwib2JqZWN0XCIgIT0gdHlwZW9mIGUgJiYgXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlKSByZXR1cm4geyBkZWZhdWx0OiBlIH07IHZhciB0ID0gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKHIpOyBpZiAodCAmJiB0LmhhcyhlKSkgcmV0dXJuIHQuZ2V0KGUpOyB2YXIgbiA9IHsgX19wcm90b19fOiBudWxsIH0sIGEgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjsgZm9yICh2YXIgdSBpbiBlKSBpZiAoXCJkZWZhdWx0XCIgIT09IHUgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIHUpKSB7IHZhciBpID0gYSA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgdSkgOiBudWxsOyBpICYmIChpLmdldCB8fCBpLnNldCkgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkobiwgdSwgaSkgOiBuW3VdID0gZVt1XTsgfSByZXR1cm4gbi5kZWZhdWx0ID0gZSwgdCAmJiB0LnNldChlLCBuKSwgbjsgfSIsICJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gY2FwaXRhbGl6ZTtcbnZhciBfZm9ybWF0TXVpRXJyb3JNZXNzYWdlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIkBtdWkvdXRpbHMvZm9ybWF0TXVpRXJyb3JNZXNzYWdlXCIpKTtcbi8vIEl0IHNob3VsZCB0byBiZSBub3RlZCB0aGF0IHRoaXMgZnVuY3Rpb24gaXNuJ3QgZXF1aXZhbGVudCB0byBgdGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemVgLlxuLy9cbi8vIEEgc3RyaWN0IGNhcGl0YWxpemF0aW9uIHNob3VsZCB1cHBlcmNhc2UgdGhlIGZpcnN0IGxldHRlciBvZiBlYWNoIHdvcmQgaW4gdGhlIHNlbnRlbmNlLlxuLy8gV2Ugb25seSBoYW5kbGUgdGhlIGZpcnN0IHdvcmQuXG5mdW5jdGlvbiBjYXBpdGFsaXplKHN0cmluZykge1xuICBpZiAodHlwZW9mIHN0cmluZyAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gYE1VSTogXFxgY2FwaXRhbGl6ZShzdHJpbmcpXFxgIGV4cGVjdHMgYSBzdHJpbmcgYXJndW1lbnQuYCA6ICgwLCBfZm9ybWF0TXVpRXJyb3JNZXNzYWdlMi5kZWZhdWx0KSg3KSk7XG4gIH1cbiAgcmV0dXJuIHN0cmluZy5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0cmluZy5zbGljZSgxKTtcbn0iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRlZmF1bHRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX2NhcGl0YWxpemUuZGVmYXVsdDtcbiAgfVxufSk7XG52YXIgX2NhcGl0YWxpemUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2NhcGl0YWxpemVcIikpOyIsICJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IGdldERpc3BsYXlOYW1lO1xuZXhwb3J0cy5nZXRGdW5jdGlvbk5hbWUgPSBnZXRGdW5jdGlvbk5hbWU7XG52YXIgX3JlYWN0SXMgPSByZXF1aXJlKFwicmVhY3QtaXNcIik7XG4vLyBTaW1wbGlmaWVkIHBvbHlmaWxsIGZvciBJRTExIHN1cHBvcnRcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9KYW1lc01HcmVlbmUvRnVuY3Rpb24ubmFtZS9ibG9iLzU4YjMxNGQ0YTk4MzExMGMzNjgyZjEyMjhmODQ1ZDM5Y2NjYTE4MTcvRnVuY3Rpb24ubmFtZS5qcyNMM1xuY29uc3QgZm5OYW1lTWF0Y2hSZWdleCA9IC9eXFxzKmZ1bmN0aW9uKD86XFxzfFxccypcXC9cXCouKlxcKlxcL1xccyopKyhbXihcXHMvXSopXFxzKi87XG5mdW5jdGlvbiBnZXRGdW5jdGlvbk5hbWUoZm4pIHtcbiAgY29uc3QgbWF0Y2ggPSBgJHtmbn1gLm1hdGNoKGZuTmFtZU1hdGNoUmVnZXgpO1xuICBjb25zdCBuYW1lID0gbWF0Y2ggJiYgbWF0Y2hbMV07XG4gIHJldHVybiBuYW1lIHx8ICcnO1xufVxuZnVuY3Rpb24gZ2V0RnVuY3Rpb25Db21wb25lbnROYW1lKENvbXBvbmVudCwgZmFsbGJhY2sgPSAnJykge1xuICByZXR1cm4gQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8IENvbXBvbmVudC5uYW1lIHx8IGdldEZ1bmN0aW9uTmFtZShDb21wb25lbnQpIHx8IGZhbGxiYWNrO1xufVxuZnVuY3Rpb24gZ2V0V3JhcHBlZE5hbWUob3V0ZXJUeXBlLCBpbm5lclR5cGUsIHdyYXBwZXJOYW1lKSB7XG4gIGNvbnN0IGZ1bmN0aW9uTmFtZSA9IGdldEZ1bmN0aW9uQ29tcG9uZW50TmFtZShpbm5lclR5cGUpO1xuICByZXR1cm4gb3V0ZXJUeXBlLmRpc3BsYXlOYW1lIHx8IChmdW5jdGlvbk5hbWUgIT09ICcnID8gYCR7d3JhcHBlck5hbWV9KCR7ZnVuY3Rpb25OYW1lfSlgIDogd3JhcHBlck5hbWUpO1xufVxuXG4vKipcbiAqIGNoZXJyeS1waWNrIGZyb21cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9ibG9iLzc2OWIxZjI3MGUxMjUxZDlkYmRjZTBmY2JkOWU5MmU1MDJkMDU5YjgvcGFja2FnZXMvc2hhcmVkL2dldENvbXBvbmVudE5hbWUuanNcbiAqIG9yaWdpbmFsbHkgZm9ya2VkIGZyb20gcmVjb21wb3NlL2dldERpc3BsYXlOYW1lIHdpdGggYWRkZWQgSUUxMSBzdXBwb3J0XG4gKi9cbmZ1bmN0aW9uIGdldERpc3BsYXlOYW1lKENvbXBvbmVudCkge1xuICBpZiAoQ29tcG9uZW50ID09IG51bGwpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmICh0eXBlb2YgQ29tcG9uZW50ID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBDb21wb25lbnQ7XG4gIH1cbiAgaWYgKHR5cGVvZiBDb21wb25lbnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZ2V0RnVuY3Rpb25Db21wb25lbnROYW1lKENvbXBvbmVudCwgJ0NvbXBvbmVudCcpO1xuICB9XG5cbiAgLy8gVHlwZVNjcmlwdCBjYW4ndCBoYXZlIGNvbXBvbmVudHMgYXMgb2JqZWN0cyBidXQgdGhleSBleGlzdCBpbiB0aGUgZm9ybSBvZiBgbWVtb2Agb3IgYFN1c3BlbnNlYFxuICBpZiAodHlwZW9mIENvbXBvbmVudCA9PT0gJ29iamVjdCcpIHtcbiAgICBzd2l0Y2ggKENvbXBvbmVudC4kJHR5cGVvZikge1xuICAgICAgY2FzZSBfcmVhY3RJcy5Gb3J3YXJkUmVmOlxuICAgICAgICByZXR1cm4gZ2V0V3JhcHBlZE5hbWUoQ29tcG9uZW50LCBDb21wb25lbnQucmVuZGVyLCAnRm9yd2FyZFJlZicpO1xuICAgICAgY2FzZSBfcmVhY3RJcy5NZW1vOlxuICAgICAgICByZXR1cm4gZ2V0V3JhcHBlZE5hbWUoQ29tcG9uZW50LCBDb21wb25lbnQudHlwZSwgJ21lbW8nKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59IiwgIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xudmFyIF9leHBvcnROYW1lcyA9IHt9O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVmYXVsdFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfZ2V0RGlzcGxheU5hbWUuZGVmYXVsdDtcbiAgfVxufSk7XG52YXIgX2dldERpc3BsYXlOYW1lID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQocmVxdWlyZShcIi4vZ2V0RGlzcGxheU5hbWVcIikpO1xuT2JqZWN0LmtleXMoX2dldERpc3BsYXlOYW1lKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgaWYgKGtleSA9PT0gXCJkZWZhdWx0XCIgfHwga2V5ID09PSBcIl9fZXNNb2R1bGVcIikgcmV0dXJuO1xuICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF9leHBvcnROYW1lcywga2V5KSkgcmV0dXJuO1xuICBpZiAoa2V5IGluIGV4cG9ydHMgJiYgZXhwb3J0c1trZXldID09PSBfZ2V0RGlzcGxheU5hbWVba2V5XSkgcmV0dXJuO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfZ2V0RGlzcGxheU5hbWVba2V5XTtcbiAgICB9XG4gIH0pO1xufSk7XG5mdW5jdGlvbiBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBXZWFrTWFwKSByZXR1cm4gbnVsbDsgdmFyIHIgPSBuZXcgV2Vha01hcCgpLCB0ID0gbmV3IFdlYWtNYXAoKTsgcmV0dXJuIChfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUgPSBmdW5jdGlvbiAoZSkgeyByZXR1cm4gZSA/IHQgOiByOyB9KShlKTsgfVxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQoZSwgcikgeyBpZiAoIXIgJiYgZSAmJiBlLl9fZXNNb2R1bGUpIHJldHVybiBlOyBpZiAobnVsbCA9PT0gZSB8fCBcIm9iamVjdFwiICE9IHR5cGVvZiBlICYmIFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSkgcmV0dXJuIHsgZGVmYXVsdDogZSB9OyB2YXIgdCA9IF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShyKTsgaWYgKHQgJiYgdC5oYXMoZSkpIHJldHVybiB0LmdldChlKTsgdmFyIG4gPSB7IF9fcHJvdG9fXzogbnVsbCB9LCBhID0gT2JqZWN0LmRlZmluZVByb3BlcnR5ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7IGZvciAodmFyIHUgaW4gZSkgaWYgKFwiZGVmYXVsdFwiICE9PSB1ICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCB1KSkgeyB2YXIgaSA9IGEgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHUpIDogbnVsbDsgaSAmJiAoaS5nZXQgfHwgaS5zZXQpID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIHUsIGkpIDogblt1XSA9IGVbdV07IH0gcmV0dXJuIG4uZGVmYXVsdCA9IGUsIHQgJiYgdC5zZXQoZSwgbiksIG47IH0iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5mdW5jdGlvbiBjbGFtcCh2YWwsIG1pbiA9IE51bWJlci5NSU5fU0FGRV9JTlRFR0VSLCBtYXggPSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikge1xuICByZXR1cm4gTWF0aC5tYXgobWluLCBNYXRoLm1pbih2YWwsIG1heCkpO1xufVxudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gY2xhbXA7IiwgIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZWZhdWx0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9jbGFtcC5kZWZhdWx0O1xuICB9XG59KTtcbnZhciBfY2xhbXAgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2NsYW1wXCIpKTsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbnZhciBfZGVlcG1lcmdlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiQG11aS91dGlscy9kZWVwbWVyZ2VcIikpO1xuZnVuY3Rpb24gbWVyZ2UoYWNjLCBpdGVtKSB7XG4gIGlmICghaXRlbSkge1xuICAgIHJldHVybiBhY2M7XG4gIH1cbiAgcmV0dXJuICgwLCBfZGVlcG1lcmdlLmRlZmF1bHQpKGFjYywgaXRlbSwge1xuICAgIGNsb25lOiBmYWxzZSAvLyBObyBuZWVkIHRvIGNsb25lIGRlZXAsIGl0J3Mgd2F5IGZhc3Rlci5cbiAgfSk7XG59XG52YXIgX2RlZmF1bHQgPSBleHBvcnRzLmRlZmF1bHQgPSBtZXJnZTsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbnZhciBfcHJvcFR5cGVzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwicHJvcC10eXBlc1wiKSk7XG5jb25zdCByZXNwb25zaXZlUHJvcFR5cGUgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gX3Byb3BUeXBlcy5kZWZhdWx0Lm9uZU9mVHlwZShbX3Byb3BUeXBlcy5kZWZhdWx0Lm51bWJlciwgX3Byb3BUeXBlcy5kZWZhdWx0LnN0cmluZywgX3Byb3BUeXBlcy5kZWZhdWx0Lm9iamVjdCwgX3Byb3BUeXBlcy5kZWZhdWx0LmFycmF5XSkgOiB7fTtcbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9IHJlc3BvbnNpdmVQcm9wVHlwZTsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29tcHV0ZUJyZWFrcG9pbnRzQmFzZSA9IGNvbXB1dGVCcmVha3BvaW50c0Jhc2U7XG5leHBvcnRzLmNyZWF0ZUVtcHR5QnJlYWtwb2ludE9iamVjdCA9IGNyZWF0ZUVtcHR5QnJlYWtwb2ludE9iamVjdDtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbmV4cG9ydHMuaGFuZGxlQnJlYWtwb2ludHMgPSBoYW5kbGVCcmVha3BvaW50cztcbmV4cG9ydHMubWVyZ2VCcmVha3BvaW50c0luT3JkZXIgPSBtZXJnZUJyZWFrcG9pbnRzSW5PcmRlcjtcbmV4cG9ydHMucmVtb3ZlVW51c2VkQnJlYWtwb2ludHMgPSByZW1vdmVVbnVzZWRCcmVha3BvaW50cztcbmV4cG9ydHMucmVzb2x2ZUJyZWFrcG9pbnRWYWx1ZXMgPSByZXNvbHZlQnJlYWtwb2ludFZhbHVlcztcbmV4cG9ydHMudmFsdWVzID0gdm9pZCAwO1xudmFyIF9leHRlbmRzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXh0ZW5kc1wiKSk7XG52YXIgX3Byb3BUeXBlcyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcInByb3AtdHlwZXNcIikpO1xudmFyIF9kZWVwbWVyZ2UgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJAbXVpL3V0aWxzL2RlZXBtZXJnZVwiKSk7XG52YXIgX21lcmdlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9tZXJnZVwiKSk7XG4vLyBUaGUgYnJlYWtwb2ludCAqKnN0YXJ0KiogYXQgdGhpcyB2YWx1ZS5cbi8vIEZvciBpbnN0YW5jZSB3aXRoIHRoZSBmaXJzdCBicmVha3BvaW50IHhzOiBbeHMsIHNtWy5cbmNvbnN0IHZhbHVlcyA9IGV4cG9ydHMudmFsdWVzID0ge1xuICB4czogMCxcbiAgLy8gcGhvbmVcbiAgc206IDYwMCxcbiAgLy8gdGFibGV0XG4gIG1kOiA5MDAsXG4gIC8vIHNtYWxsIGxhcHRvcFxuICBsZzogMTIwMCxcbiAgLy8gZGVza3RvcFxuICB4bDogMTUzNiAvLyBsYXJnZSBzY3JlZW5cbn07XG5jb25zdCBkZWZhdWx0QnJlYWtwb2ludHMgPSB7XG4gIC8vIFNvcnRlZCBBU0MgYnkgc2l6ZS4gVGhhdCdzIGltcG9ydGFudC5cbiAgLy8gSXQgY2FuJ3QgYmUgY29uZmlndXJlZCBhcyBpdCdzIHVzZWQgc3RhdGljYWxseSBmb3IgcHJvcFR5cGVzLlxuICBrZXlzOiBbJ3hzJywgJ3NtJywgJ21kJywgJ2xnJywgJ3hsJ10sXG4gIHVwOiBrZXkgPT4gYEBtZWRpYSAobWluLXdpZHRoOiR7dmFsdWVzW2tleV19cHgpYFxufTtcbmZ1bmN0aW9uIGhhbmRsZUJyZWFrcG9pbnRzKHByb3BzLCBwcm9wVmFsdWUsIHN0eWxlRnJvbVByb3BWYWx1ZSkge1xuICBjb25zdCB0aGVtZSA9IHByb3BzLnRoZW1lIHx8IHt9O1xuICBpZiAoQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG4gICAgY29uc3QgdGhlbWVCcmVha3BvaW50cyA9IHRoZW1lLmJyZWFrcG9pbnRzIHx8IGRlZmF1bHRCcmVha3BvaW50cztcbiAgICByZXR1cm4gcHJvcFZhbHVlLnJlZHVjZSgoYWNjLCBpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgYWNjW3RoZW1lQnJlYWtwb2ludHMudXAodGhlbWVCcmVha3BvaW50cy5rZXlzW2luZGV4XSldID0gc3R5bGVGcm9tUHJvcFZhbHVlKHByb3BWYWx1ZVtpbmRleF0pO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG4gIH1cbiAgaWYgKHR5cGVvZiBwcm9wVmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgY29uc3QgdGhlbWVCcmVha3BvaW50cyA9IHRoZW1lLmJyZWFrcG9pbnRzIHx8IGRlZmF1bHRCcmVha3BvaW50cztcbiAgICByZXR1cm4gT2JqZWN0LmtleXMocHJvcFZhbHVlKS5yZWR1Y2UoKGFjYywgYnJlYWtwb2ludCkgPT4ge1xuICAgICAgLy8ga2V5IGlzIGJyZWFrcG9pbnRcbiAgICAgIGlmIChPYmplY3Qua2V5cyh0aGVtZUJyZWFrcG9pbnRzLnZhbHVlcyB8fCB2YWx1ZXMpLmluZGV4T2YoYnJlYWtwb2ludCkgIT09IC0xKSB7XG4gICAgICAgIGNvbnN0IG1lZGlhS2V5ID0gdGhlbWVCcmVha3BvaW50cy51cChicmVha3BvaW50KTtcbiAgICAgICAgYWNjW21lZGlhS2V5XSA9IHN0eWxlRnJvbVByb3BWYWx1ZShwcm9wVmFsdWVbYnJlYWtwb2ludF0sIGJyZWFrcG9pbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY3NzS2V5ID0gYnJlYWtwb2ludDtcbiAgICAgICAgYWNjW2Nzc0tleV0gPSBwcm9wVmFsdWVbY3NzS2V5XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30pO1xuICB9XG4gIGNvbnN0IG91dHB1dCA9IHN0eWxlRnJvbVByb3BWYWx1ZShwcm9wVmFsdWUpO1xuICByZXR1cm4gb3V0cHV0O1xufVxuZnVuY3Rpb24gYnJlYWtwb2ludHMoc3R5bGVGdW5jdGlvbikge1xuICAvLyBmYWxzZSBwb3NpdGl2ZVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvZnVuY3Rpb24tY29tcG9uZW50LWRlZmluaXRpb25cbiAgY29uc3QgbmV3U3R5bGVGdW5jdGlvbiA9IHByb3BzID0+IHtcbiAgICBjb25zdCB0aGVtZSA9IHByb3BzLnRoZW1lIHx8IHt9O1xuICAgIGNvbnN0IGJhc2UgPSBzdHlsZUZ1bmN0aW9uKHByb3BzKTtcbiAgICBjb25zdCB0aGVtZUJyZWFrcG9pbnRzID0gdGhlbWUuYnJlYWtwb2ludHMgfHwgZGVmYXVsdEJyZWFrcG9pbnRzO1xuICAgIGNvbnN0IGV4dGVuZGVkID0gdGhlbWVCcmVha3BvaW50cy5rZXlzLnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcbiAgICAgIGlmIChwcm9wc1trZXldKSB7XG4gICAgICAgIGFjYyA9IGFjYyB8fCB7fTtcbiAgICAgICAgYWNjW3RoZW1lQnJlYWtwb2ludHMudXAoa2V5KV0gPSBzdHlsZUZ1bmN0aW9uKCgwLCBfZXh0ZW5kczIuZGVmYXVsdCkoe1xuICAgICAgICAgIHRoZW1lXG4gICAgICAgIH0sIHByb3BzW2tleV0pKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgbnVsbCk7XG4gICAgcmV0dXJuICgwLCBfbWVyZ2UuZGVmYXVsdCkoYmFzZSwgZXh0ZW5kZWQpO1xuICB9O1xuICBuZXdTdHlsZUZ1bmN0aW9uLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyAoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHt9LCBzdHlsZUZ1bmN0aW9uLnByb3BUeXBlcywge1xuICAgIHhzOiBfcHJvcFR5cGVzLmRlZmF1bHQub2JqZWN0LFxuICAgIHNtOiBfcHJvcFR5cGVzLmRlZmF1bHQub2JqZWN0LFxuICAgIG1kOiBfcHJvcFR5cGVzLmRlZmF1bHQub2JqZWN0LFxuICAgIGxnOiBfcHJvcFR5cGVzLmRlZmF1bHQub2JqZWN0LFxuICAgIHhsOiBfcHJvcFR5cGVzLmRlZmF1bHQub2JqZWN0XG4gIH0pIDoge307XG4gIG5ld1N0eWxlRnVuY3Rpb24uZmlsdGVyUHJvcHMgPSBbJ3hzJywgJ3NtJywgJ21kJywgJ2xnJywgJ3hsJywgLi4uc3R5bGVGdW5jdGlvbi5maWx0ZXJQcm9wc107XG4gIHJldHVybiBuZXdTdHlsZUZ1bmN0aW9uO1xufVxuZnVuY3Rpb24gY3JlYXRlRW1wdHlCcmVha3BvaW50T2JqZWN0KGJyZWFrcG9pbnRzSW5wdXQgPSB7fSkge1xuICB2YXIgX2JyZWFrcG9pbnRzSW5wdXQka2V5O1xuICBjb25zdCBicmVha3BvaW50c0luT3JkZXIgPSAoX2JyZWFrcG9pbnRzSW5wdXQka2V5ID0gYnJlYWtwb2ludHNJbnB1dC5rZXlzKSA9PSBudWxsID8gdm9pZCAwIDogX2JyZWFrcG9pbnRzSW5wdXQka2V5LnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcbiAgICBjb25zdCBicmVha3BvaW50U3R5bGVLZXkgPSBicmVha3BvaW50c0lucHV0LnVwKGtleSk7XG4gICAgYWNjW2JyZWFrcG9pbnRTdHlsZUtleV0gPSB7fTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG4gIHJldHVybiBicmVha3BvaW50c0luT3JkZXIgfHwge307XG59XG5mdW5jdGlvbiByZW1vdmVVbnVzZWRCcmVha3BvaW50cyhicmVha3BvaW50S2V5cywgc3R5bGUpIHtcbiAgcmV0dXJuIGJyZWFrcG9pbnRLZXlzLnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcbiAgICBjb25zdCBicmVha3BvaW50T3V0cHV0ID0gYWNjW2tleV07XG4gICAgY29uc3QgaXNCcmVha3BvaW50VW51c2VkID0gIWJyZWFrcG9pbnRPdXRwdXQgfHwgT2JqZWN0LmtleXMoYnJlYWtwb2ludE91dHB1dCkubGVuZ3RoID09PSAwO1xuICAgIGlmIChpc0JyZWFrcG9pbnRVbnVzZWQpIHtcbiAgICAgIGRlbGV0ZSBhY2Nba2V5XTtcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfSwgc3R5bGUpO1xufVxuZnVuY3Rpb24gbWVyZ2VCcmVha3BvaW50c0luT3JkZXIoYnJlYWtwb2ludHNJbnB1dCwgLi4uc3R5bGVzKSB7XG4gIGNvbnN0IGVtcHR5QnJlYWtwb2ludHMgPSBjcmVhdGVFbXB0eUJyZWFrcG9pbnRPYmplY3QoYnJlYWtwb2ludHNJbnB1dCk7XG4gIGNvbnN0IG1lcmdlZE91dHB1dCA9IFtlbXB0eUJyZWFrcG9pbnRzLCAuLi5zdHlsZXNdLnJlZHVjZSgocHJldiwgbmV4dCkgPT4gKDAsIF9kZWVwbWVyZ2UuZGVmYXVsdCkocHJldiwgbmV4dCksIHt9KTtcbiAgcmV0dXJuIHJlbW92ZVVudXNlZEJyZWFrcG9pbnRzKE9iamVjdC5rZXlzKGVtcHR5QnJlYWtwb2ludHMpLCBtZXJnZWRPdXRwdXQpO1xufVxuXG4vLyBjb21wdXRlIGJhc2UgZm9yIHJlc3BvbnNpdmUgdmFsdWVzOyBlLmcuLFxuLy8gWzEsMiwzXSA9PiB7eHM6IHRydWUsIHNtOiB0cnVlLCBtZDogdHJ1ZX1cbi8vIHt4czogMSwgc206IDIsIG1kOiAzfSA9PiB7eHM6IHRydWUsIHNtOiB0cnVlLCBtZDogdHJ1ZX1cbmZ1bmN0aW9uIGNvbXB1dGVCcmVha3BvaW50c0Jhc2UoYnJlYWtwb2ludFZhbHVlcywgdGhlbWVCcmVha3BvaW50cykge1xuICAvLyBmaXhlZCB2YWx1ZVxuICBpZiAodHlwZW9mIGJyZWFrcG9pbnRWYWx1ZXMgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG4gIGNvbnN0IGJhc2UgPSB7fTtcbiAgY29uc3QgYnJlYWtwb2ludHNLZXlzID0gT2JqZWN0LmtleXModGhlbWVCcmVha3BvaW50cyk7XG4gIGlmIChBcnJheS5pc0FycmF5KGJyZWFrcG9pbnRWYWx1ZXMpKSB7XG4gICAgYnJlYWtwb2ludHNLZXlzLmZvckVhY2goKGJyZWFrcG9pbnQsIGkpID0+IHtcbiAgICAgIGlmIChpIDwgYnJlYWtwb2ludFZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgYmFzZVticmVha3BvaW50XSA9IHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgYnJlYWtwb2ludHNLZXlzLmZvckVhY2goYnJlYWtwb2ludCA9PiB7XG4gICAgICBpZiAoYnJlYWtwb2ludFZhbHVlc1ticmVha3BvaW50XSAhPSBudWxsKSB7XG4gICAgICAgIGJhc2VbYnJlYWtwb2ludF0gPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHJldHVybiBiYXNlO1xufVxuZnVuY3Rpb24gcmVzb2x2ZUJyZWFrcG9pbnRWYWx1ZXMoe1xuICB2YWx1ZXM6IGJyZWFrcG9pbnRWYWx1ZXMsXG4gIGJyZWFrcG9pbnRzOiB0aGVtZUJyZWFrcG9pbnRzLFxuICBiYXNlOiBjdXN0b21CYXNlXG59KSB7XG4gIGNvbnN0IGJhc2UgPSBjdXN0b21CYXNlIHx8IGNvbXB1dGVCcmVha3BvaW50c0Jhc2UoYnJlYWtwb2ludFZhbHVlcywgdGhlbWVCcmVha3BvaW50cyk7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhiYXNlKTtcbiAgaWYgKGtleXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGJyZWFrcG9pbnRWYWx1ZXM7XG4gIH1cbiAgbGV0IHByZXZpb3VzO1xuICByZXR1cm4ga2V5cy5yZWR1Y2UoKGFjYywgYnJlYWtwb2ludCwgaSkgPT4ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGJyZWFrcG9pbnRWYWx1ZXMpKSB7XG4gICAgICBhY2NbYnJlYWtwb2ludF0gPSBicmVha3BvaW50VmFsdWVzW2ldICE9IG51bGwgPyBicmVha3BvaW50VmFsdWVzW2ldIDogYnJlYWtwb2ludFZhbHVlc1twcmV2aW91c107XG4gICAgICBwcmV2aW91cyA9IGk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYnJlYWtwb2ludFZhbHVlcyA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGFjY1ticmVha3BvaW50XSA9IGJyZWFrcG9pbnRWYWx1ZXNbYnJlYWtwb2ludF0gIT0gbnVsbCA/IGJyZWFrcG9pbnRWYWx1ZXNbYnJlYWtwb2ludF0gOiBicmVha3BvaW50VmFsdWVzW3ByZXZpb3VzXTtcbiAgICAgIHByZXZpb3VzID0gYnJlYWtwb2ludDtcbiAgICB9IGVsc2Uge1xuICAgICAgYWNjW2JyZWFrcG9pbnRdID0gYnJlYWtwb2ludFZhbHVlcztcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xufVxudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gYnJlYWtwb2ludHM7IiwgIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5leHBvcnRzLmdldFBhdGggPSBnZXRQYXRoO1xuZXhwb3J0cy5nZXRTdHlsZVZhbHVlID0gZ2V0U3R5bGVWYWx1ZTtcbnZhciBfY2FwaXRhbGl6ZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIkBtdWkvdXRpbHMvY2FwaXRhbGl6ZVwiKSk7XG52YXIgX3Jlc3BvbnNpdmVQcm9wVHlwZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vcmVzcG9uc2l2ZVByb3BUeXBlXCIpKTtcbnZhciBfYnJlYWtwb2ludHMgPSByZXF1aXJlKFwiLi9icmVha3BvaW50c1wiKTtcbmZ1bmN0aW9uIGdldFBhdGgob2JqLCBwYXRoLCBjaGVja1ZhcnMgPSB0cnVlKSB7XG4gIGlmICghcGF0aCB8fCB0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIENoZWNrIGlmIENTUyB2YXJpYWJsZXMgYXJlIHVzZWRcbiAgaWYgKG9iaiAmJiBvYmoudmFycyAmJiBjaGVja1ZhcnMpIHtcbiAgICBjb25zdCB2YWwgPSBgdmFycy4ke3BhdGh9YC5zcGxpdCgnLicpLnJlZHVjZSgoYWNjLCBpdGVtKSA9PiBhY2MgJiYgYWNjW2l0ZW1dID8gYWNjW2l0ZW1dIDogbnVsbCwgb2JqKTtcbiAgICBpZiAodmFsICE9IG51bGwpIHtcbiAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuICB9XG4gIHJldHVybiBwYXRoLnNwbGl0KCcuJykucmVkdWNlKChhY2MsIGl0ZW0pID0+IHtcbiAgICBpZiAoYWNjICYmIGFjY1tpdGVtXSAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gYWNjW2l0ZW1dO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfSwgb2JqKTtcbn1cbmZ1bmN0aW9uIGdldFN0eWxlVmFsdWUodGhlbWVNYXBwaW5nLCB0cmFuc2Zvcm0sIHByb3BWYWx1ZUZpbmFsLCB1c2VyVmFsdWUgPSBwcm9wVmFsdWVGaW5hbCkge1xuICBsZXQgdmFsdWU7XG4gIGlmICh0eXBlb2YgdGhlbWVNYXBwaW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFsdWUgPSB0aGVtZU1hcHBpbmcocHJvcFZhbHVlRmluYWwpO1xuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodGhlbWVNYXBwaW5nKSkge1xuICAgIHZhbHVlID0gdGhlbWVNYXBwaW5nW3Byb3BWYWx1ZUZpbmFsXSB8fCB1c2VyVmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgdmFsdWUgPSBnZXRQYXRoKHRoZW1lTWFwcGluZywgcHJvcFZhbHVlRmluYWwpIHx8IHVzZXJWYWx1ZTtcbiAgfVxuICBpZiAodHJhbnNmb3JtKSB7XG4gICAgdmFsdWUgPSB0cmFuc2Zvcm0odmFsdWUsIHVzZXJWYWx1ZSwgdGhlbWVNYXBwaW5nKTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5mdW5jdGlvbiBzdHlsZShvcHRpb25zKSB7XG4gIGNvbnN0IHtcbiAgICBwcm9wLFxuICAgIGNzc1Byb3BlcnR5ID0gb3B0aW9ucy5wcm9wLFxuICAgIHRoZW1lS2V5LFxuICAgIHRyYW5zZm9ybVxuICB9ID0gb3B0aW9ucztcblxuICAvLyBmYWxzZSBwb3NpdGl2ZVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvZnVuY3Rpb24tY29tcG9uZW50LWRlZmluaXRpb25cbiAgY29uc3QgZm4gPSBwcm9wcyA9PiB7XG4gICAgaWYgKHByb3BzW3Byb3BdID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBwcm9wVmFsdWUgPSBwcm9wc1twcm9wXTtcbiAgICBjb25zdCB0aGVtZSA9IHByb3BzLnRoZW1lO1xuICAgIGNvbnN0IHRoZW1lTWFwcGluZyA9IGdldFBhdGgodGhlbWUsIHRoZW1lS2V5KSB8fCB7fTtcbiAgICBjb25zdCBzdHlsZUZyb21Qcm9wVmFsdWUgPSBwcm9wVmFsdWVGaW5hbCA9PiB7XG4gICAgICBsZXQgdmFsdWUgPSBnZXRTdHlsZVZhbHVlKHRoZW1lTWFwcGluZywgdHJhbnNmb3JtLCBwcm9wVmFsdWVGaW5hbCk7XG4gICAgICBpZiAocHJvcFZhbHVlRmluYWwgPT09IHZhbHVlICYmIHR5cGVvZiBwcm9wVmFsdWVGaW5hbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgLy8gSGF2ZW4ndCBmb3VuZCB2YWx1ZVxuICAgICAgICB2YWx1ZSA9IGdldFN0eWxlVmFsdWUodGhlbWVNYXBwaW5nLCB0cmFuc2Zvcm0sIGAke3Byb3B9JHtwcm9wVmFsdWVGaW5hbCA9PT0gJ2RlZmF1bHQnID8gJycgOiAoMCwgX2NhcGl0YWxpemUuZGVmYXVsdCkocHJvcFZhbHVlRmluYWwpfWAsIHByb3BWYWx1ZUZpbmFsKTtcbiAgICAgIH1cbiAgICAgIGlmIChjc3NQcm9wZXJ0eSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW2Nzc1Byb3BlcnR5XTogdmFsdWVcbiAgICAgIH07XG4gICAgfTtcbiAgICByZXR1cm4gKDAsIF9icmVha3BvaW50cy5oYW5kbGVCcmVha3BvaW50cykocHJvcHMsIHByb3BWYWx1ZSwgc3R5bGVGcm9tUHJvcFZhbHVlKTtcbiAgfTtcbiAgZm4ucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHtcbiAgICBbcHJvcF06IF9yZXNwb25zaXZlUHJvcFR5cGUuZGVmYXVsdFxuICB9IDoge307XG4gIGZuLmZpbHRlclByb3BzID0gW3Byb3BdO1xuICByZXR1cm4gZm47XG59XG52YXIgX2RlZmF1bHQgPSBleHBvcnRzLmRlZmF1bHQgPSBzdHlsZTsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSBtZW1vaXplO1xuZnVuY3Rpb24gbWVtb2l6ZShmbikge1xuICBjb25zdCBjYWNoZSA9IHt9O1xuICByZXR1cm4gYXJnID0+IHtcbiAgICBpZiAoY2FjaGVbYXJnXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjYWNoZVthcmddID0gZm4oYXJnKTtcbiAgICB9XG4gICAgcmV0dXJuIGNhY2hlW2FyZ107XG4gIH07XG59IiwgIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVVuYXJ5U3BhY2luZyA9IGNyZWF0ZVVuYXJ5U3BhY2luZztcbmV4cG9ydHMuY3JlYXRlVW5hcnlVbml0ID0gY3JlYXRlVW5hcnlVbml0O1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuZXhwb3J0cy5nZXRTdHlsZUZyb21Qcm9wVmFsdWUgPSBnZXRTdHlsZUZyb21Qcm9wVmFsdWU7XG5leHBvcnRzLmdldFZhbHVlID0gZ2V0VmFsdWU7XG5leHBvcnRzLm1hcmdpbiA9IG1hcmdpbjtcbmV4cG9ydHMubWFyZ2luS2V5cyA9IHZvaWQgMDtcbmV4cG9ydHMucGFkZGluZyA9IHBhZGRpbmc7XG5leHBvcnRzLnBhZGRpbmdLZXlzID0gdm9pZCAwO1xudmFyIF9yZXNwb25zaXZlUHJvcFR5cGUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3Jlc3BvbnNpdmVQcm9wVHlwZVwiKSk7XG52YXIgX2JyZWFrcG9pbnRzID0gcmVxdWlyZShcIi4vYnJlYWtwb2ludHNcIik7XG52YXIgX3N0eWxlID0gcmVxdWlyZShcIi4vc3R5bGVcIik7XG52YXIgX21lcmdlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9tZXJnZVwiKSk7XG52YXIgX21lbW9pemUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL21lbW9pemVcIikpO1xuY29uc3QgcHJvcGVydGllcyA9IHtcbiAgbTogJ21hcmdpbicsXG4gIHA6ICdwYWRkaW5nJ1xufTtcbmNvbnN0IGRpcmVjdGlvbnMgPSB7XG4gIHQ6ICdUb3AnLFxuICByOiAnUmlnaHQnLFxuICBiOiAnQm90dG9tJyxcbiAgbDogJ0xlZnQnLFxuICB4OiBbJ0xlZnQnLCAnUmlnaHQnXSxcbiAgeTogWydUb3AnLCAnQm90dG9tJ11cbn07XG5jb25zdCBhbGlhc2VzID0ge1xuICBtYXJnaW5YOiAnbXgnLFxuICBtYXJnaW5ZOiAnbXknLFxuICBwYWRkaW5nWDogJ3B4JyxcbiAgcGFkZGluZ1k6ICdweSdcbn07XG5cbi8vIG1lbW9pemUoKSBpbXBhY3Q6XG4vLyBGcm9tIDMwMCwwMDAgb3BzL3NlY1xuLy8gVG8gMzUwLDAwMCBvcHMvc2VjXG5jb25zdCBnZXRDc3NQcm9wZXJ0aWVzID0gKDAsIF9tZW1vaXplLmRlZmF1bHQpKHByb3AgPT4ge1xuICAvLyBJdCdzIG5vdCBhIHNob3J0aGFuZCBub3RhdGlvbi5cbiAgaWYgKHByb3AubGVuZ3RoID4gMikge1xuICAgIGlmIChhbGlhc2VzW3Byb3BdKSB7XG4gICAgICBwcm9wID0gYWxpYXNlc1twcm9wXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFtwcm9wXTtcbiAgICB9XG4gIH1cbiAgY29uc3QgW2EsIGJdID0gcHJvcC5zcGxpdCgnJyk7XG4gIGNvbnN0IHByb3BlcnR5ID0gcHJvcGVydGllc1thXTtcbiAgY29uc3QgZGlyZWN0aW9uID0gZGlyZWN0aW9uc1tiXSB8fCAnJztcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoZGlyZWN0aW9uKSA/IGRpcmVjdGlvbi5tYXAoZGlyID0+IHByb3BlcnR5ICsgZGlyKSA6IFtwcm9wZXJ0eSArIGRpcmVjdGlvbl07XG59KTtcbmNvbnN0IG1hcmdpbktleXMgPSBleHBvcnRzLm1hcmdpbktleXMgPSBbJ20nLCAnbXQnLCAnbXInLCAnbWInLCAnbWwnLCAnbXgnLCAnbXknLCAnbWFyZ2luJywgJ21hcmdpblRvcCcsICdtYXJnaW5SaWdodCcsICdtYXJnaW5Cb3R0b20nLCAnbWFyZ2luTGVmdCcsICdtYXJnaW5YJywgJ21hcmdpblknLCAnbWFyZ2luSW5saW5lJywgJ21hcmdpbklubGluZVN0YXJ0JywgJ21hcmdpbklubGluZUVuZCcsICdtYXJnaW5CbG9jaycsICdtYXJnaW5CbG9ja1N0YXJ0JywgJ21hcmdpbkJsb2NrRW5kJ107XG5jb25zdCBwYWRkaW5nS2V5cyA9IGV4cG9ydHMucGFkZGluZ0tleXMgPSBbJ3AnLCAncHQnLCAncHInLCAncGInLCAncGwnLCAncHgnLCAncHknLCAncGFkZGluZycsICdwYWRkaW5nVG9wJywgJ3BhZGRpbmdSaWdodCcsICdwYWRkaW5nQm90dG9tJywgJ3BhZGRpbmdMZWZ0JywgJ3BhZGRpbmdYJywgJ3BhZGRpbmdZJywgJ3BhZGRpbmdJbmxpbmUnLCAncGFkZGluZ0lubGluZVN0YXJ0JywgJ3BhZGRpbmdJbmxpbmVFbmQnLCAncGFkZGluZ0Jsb2NrJywgJ3BhZGRpbmdCbG9ja1N0YXJ0JywgJ3BhZGRpbmdCbG9ja0VuZCddO1xuY29uc3Qgc3BhY2luZ0tleXMgPSBbLi4ubWFyZ2luS2V5cywgLi4ucGFkZGluZ0tleXNdO1xuZnVuY3Rpb24gY3JlYXRlVW5hcnlVbml0KHRoZW1lLCB0aGVtZUtleSwgZGVmYXVsdFZhbHVlLCBwcm9wTmFtZSkge1xuICB2YXIgX2dldFBhdGg7XG4gIGNvbnN0IHRoZW1lU3BhY2luZyA9IChfZ2V0UGF0aCA9ICgwLCBfc3R5bGUuZ2V0UGF0aCkodGhlbWUsIHRoZW1lS2V5LCBmYWxzZSkpICE9IG51bGwgPyBfZ2V0UGF0aCA6IGRlZmF1bHRWYWx1ZTtcbiAgaWYgKHR5cGVvZiB0aGVtZVNwYWNpbmcgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIGFicyA9PiB7XG4gICAgICBpZiAodHlwZW9mIGFicyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIGFicztcbiAgICAgIH1cbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYWJzICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYE1VSTogRXhwZWN0ZWQgJHtwcm9wTmFtZX0gYXJndW1lbnQgdG8gYmUgYSBudW1iZXIgb3IgYSBzdHJpbmcsIGdvdCAke2Fic30uYCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGVtZVNwYWNpbmcgKiBhYnM7XG4gICAgfTtcbiAgfVxuICBpZiAoQXJyYXkuaXNBcnJheSh0aGVtZVNwYWNpbmcpKSB7XG4gICAgcmV0dXJuIGFicyA9PiB7XG4gICAgICBpZiAodHlwZW9mIGFicyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIGFicztcbiAgICAgIH1cbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihhYnMpKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihbYE1VSTogVGhlIFxcYHRoZW1lLiR7dGhlbWVLZXl9XFxgIGFycmF5IHR5cGUgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggbm9uIGludGVnZXIgdmFsdWVzLmAgKyBgWW91IHNob3VsZCBlaXRoZXIgdXNlIGFuIGludGVnZXIgdmFsdWUgdGhhdCBjYW4gYmUgdXNlZCBhcyBpbmRleCwgb3IgZGVmaW5lIHRoZSBcXGB0aGVtZS4ke3RoZW1lS2V5fVxcYCBhcyBhIG51bWJlci5gXS5qb2luKCdcXG4nKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoYWJzID4gdGhlbWVTcGFjaW5nLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFtgTVVJOiBUaGUgdmFsdWUgcHJvdmlkZWQgKCR7YWJzfSkgb3ZlcmZsb3dzLmAsIGBUaGUgc3VwcG9ydGVkIHZhbHVlcyBhcmU6ICR7SlNPTi5zdHJpbmdpZnkodGhlbWVTcGFjaW5nKX0uYCwgYCR7YWJzfSA+ICR7dGhlbWVTcGFjaW5nLmxlbmd0aCAtIDF9LCB5b3UgbmVlZCB0byBhZGQgdGhlIG1pc3NpbmcgdmFsdWVzLmBdLmpvaW4oJ1xcbicpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoZW1lU3BhY2luZ1thYnNdO1xuICAgIH07XG4gIH1cbiAgaWYgKHR5cGVvZiB0aGVtZVNwYWNpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdGhlbWVTcGFjaW5nO1xuICB9XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgY29uc29sZS5lcnJvcihbYE1VSTogVGhlIFxcYHRoZW1lLiR7dGhlbWVLZXl9XFxgIHZhbHVlICgke3RoZW1lU3BhY2luZ30pIGlzIGludmFsaWQuYCwgJ0l0IHNob3VsZCBiZSBhIG51bWJlciwgYW4gYXJyYXkgb3IgYSBmdW5jdGlvbi4nXS5qb2luKCdcXG4nKSk7XG4gIH1cbiAgcmV0dXJuICgpID0+IHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVVuYXJ5U3BhY2luZyh0aGVtZSkge1xuICByZXR1cm4gY3JlYXRlVW5hcnlVbml0KHRoZW1lLCAnc3BhY2luZycsIDgsICdzcGFjaW5nJyk7XG59XG5mdW5jdGlvbiBnZXRWYWx1ZSh0cmFuc2Zvcm1lciwgcHJvcFZhbHVlKSB7XG4gIGlmICh0eXBlb2YgcHJvcFZhbHVlID09PSAnc3RyaW5nJyB8fCBwcm9wVmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiBwcm9wVmFsdWU7XG4gIH1cbiAgY29uc3QgYWJzID0gTWF0aC5hYnMocHJvcFZhbHVlKTtcbiAgY29uc3QgdHJhbnNmb3JtZWQgPSB0cmFuc2Zvcm1lcihhYnMpO1xuICBpZiAocHJvcFZhbHVlID49IDApIHtcbiAgICByZXR1cm4gdHJhbnNmb3JtZWQ7XG4gIH1cbiAgaWYgKHR5cGVvZiB0cmFuc2Zvcm1lZCA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gLXRyYW5zZm9ybWVkO1xuICB9XG4gIHJldHVybiBgLSR7dHJhbnNmb3JtZWR9YDtcbn1cbmZ1bmN0aW9uIGdldFN0eWxlRnJvbVByb3BWYWx1ZShjc3NQcm9wZXJ0aWVzLCB0cmFuc2Zvcm1lcikge1xuICByZXR1cm4gcHJvcFZhbHVlID0+IGNzc1Byb3BlcnRpZXMucmVkdWNlKChhY2MsIGNzc1Byb3BlcnR5KSA9PiB7XG4gICAgYWNjW2Nzc1Byb3BlcnR5XSA9IGdldFZhbHVlKHRyYW5zZm9ybWVyLCBwcm9wVmFsdWUpO1xuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbn1cbmZ1bmN0aW9uIHJlc29sdmVDc3NQcm9wZXJ0eShwcm9wcywga2V5cywgcHJvcCwgdHJhbnNmb3JtZXIpIHtcbiAgLy8gVXNpbmcgYSBoYXNoIGNvbXB1dGF0aW9uIG92ZXIgYW4gYXJyYXkgaXRlcmF0aW9uIGNvdWxkIGJlIGZhc3RlciwgYnV0IHdpdGggb25seSAyOCBpdGVtcyxcbiAgLy8gaXQncyBkb2Vzbid0IHdvcnRoIHRoZSBidW5kbGUgc2l6ZS5cbiAgaWYgKGtleXMuaW5kZXhPZihwcm9wKSA9PT0gLTEpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBjc3NQcm9wZXJ0aWVzID0gZ2V0Q3NzUHJvcGVydGllcyhwcm9wKTtcbiAgY29uc3Qgc3R5bGVGcm9tUHJvcFZhbHVlID0gZ2V0U3R5bGVGcm9tUHJvcFZhbHVlKGNzc1Byb3BlcnRpZXMsIHRyYW5zZm9ybWVyKTtcbiAgY29uc3QgcHJvcFZhbHVlID0gcHJvcHNbcHJvcF07XG4gIHJldHVybiAoMCwgX2JyZWFrcG9pbnRzLmhhbmRsZUJyZWFrcG9pbnRzKShwcm9wcywgcHJvcFZhbHVlLCBzdHlsZUZyb21Qcm9wVmFsdWUpO1xufVxuZnVuY3Rpb24gc3R5bGUocHJvcHMsIGtleXMpIHtcbiAgY29uc3QgdHJhbnNmb3JtZXIgPSBjcmVhdGVVbmFyeVNwYWNpbmcocHJvcHMudGhlbWUpO1xuICByZXR1cm4gT2JqZWN0LmtleXMocHJvcHMpLm1hcChwcm9wID0+IHJlc29sdmVDc3NQcm9wZXJ0eShwcm9wcywga2V5cywgcHJvcCwgdHJhbnNmb3JtZXIpKS5yZWR1Y2UoX21lcmdlLmRlZmF1bHQsIHt9KTtcbn1cbmZ1bmN0aW9uIG1hcmdpbihwcm9wcykge1xuICByZXR1cm4gc3R5bGUocHJvcHMsIG1hcmdpbktleXMpO1xufVxubWFyZ2luLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBtYXJnaW5LZXlzLnJlZHVjZSgob2JqLCBrZXkpID0+IHtcbiAgb2JqW2tleV0gPSBfcmVzcG9uc2l2ZVByb3BUeXBlLmRlZmF1bHQ7XG4gIHJldHVybiBvYmo7XG59LCB7fSkgOiB7fTtcbm1hcmdpbi5maWx0ZXJQcm9wcyA9IG1hcmdpbktleXM7XG5mdW5jdGlvbiBwYWRkaW5nKHByb3BzKSB7XG4gIHJldHVybiBzdHlsZShwcm9wcywgcGFkZGluZ0tleXMpO1xufVxucGFkZGluZy5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gcGFkZGluZ0tleXMucmVkdWNlKChvYmosIGtleSkgPT4ge1xuICBvYmpba2V5XSA9IF9yZXNwb25zaXZlUHJvcFR5cGUuZGVmYXVsdDtcbiAgcmV0dXJuIG9iajtcbn0sIHt9KSA6IHt9O1xucGFkZGluZy5maWx0ZXJQcm9wcyA9IHBhZGRpbmdLZXlzO1xuZnVuY3Rpb24gc3BhY2luZyhwcm9wcykge1xuICByZXR1cm4gc3R5bGUocHJvcHMsIHNwYWNpbmdLZXlzKTtcbn1cbnNwYWNpbmcucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHNwYWNpbmdLZXlzLnJlZHVjZSgob2JqLCBrZXkpID0+IHtcbiAgb2JqW2tleV0gPSBfcmVzcG9uc2l2ZVByb3BUeXBlLmRlZmF1bHQ7XG4gIHJldHVybiBvYmo7XG59LCB7fSkgOiB7fTtcbnNwYWNpbmcuZmlsdGVyUHJvcHMgPSBzcGFjaW5nS2V5cztcbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9IHNwYWNpbmc7IiwgIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG52YXIgX21lcmdlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9tZXJnZVwiKSk7XG5mdW5jdGlvbiBjb21wb3NlKC4uLnN0eWxlcykge1xuICBjb25zdCBoYW5kbGVycyA9IHN0eWxlcy5yZWR1Y2UoKGFjYywgc3R5bGUpID0+IHtcbiAgICBzdHlsZS5maWx0ZXJQcm9wcy5mb3JFYWNoKHByb3AgPT4ge1xuICAgICAgYWNjW3Byb3BdID0gc3R5bGU7XG4gICAgfSk7XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xuXG4gIC8vIGZhbHNlIHBvc2l0aXZlXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvblxuICBjb25zdCBmbiA9IHByb3BzID0+IHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMocHJvcHMpLnJlZHVjZSgoYWNjLCBwcm9wKSA9PiB7XG4gICAgICBpZiAoaGFuZGxlcnNbcHJvcF0pIHtcbiAgICAgICAgcmV0dXJuICgwLCBfbWVyZ2UuZGVmYXVsdCkoYWNjLCBoYW5kbGVyc1twcm9wXShwcm9wcykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG4gIH07XG4gIGZuLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBzdHlsZXMucmVkdWNlKChhY2MsIHN0eWxlKSA9PiBPYmplY3QuYXNzaWduKGFjYywgc3R5bGUucHJvcFR5cGVzKSwge30pIDoge307XG4gIGZuLmZpbHRlclByb3BzID0gc3R5bGVzLnJlZHVjZSgoYWNjLCBzdHlsZSkgPT4gYWNjLmNvbmNhdChzdHlsZS5maWx0ZXJQcm9wcyksIFtdKTtcbiAgcmV0dXJuIGZuO1xufVxudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gY29tcG9zZTsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYm9yZGVyVG9wQ29sb3IgPSBleHBvcnRzLmJvcmRlclRvcCA9IGV4cG9ydHMuYm9yZGVyUmlnaHRDb2xvciA9IGV4cG9ydHMuYm9yZGVyUmlnaHQgPSBleHBvcnRzLmJvcmRlclJhZGl1cyA9IGV4cG9ydHMuYm9yZGVyTGVmdENvbG9yID0gZXhwb3J0cy5ib3JkZXJMZWZ0ID0gZXhwb3J0cy5ib3JkZXJDb2xvciA9IGV4cG9ydHMuYm9yZGVyQm90dG9tQ29sb3IgPSBleHBvcnRzLmJvcmRlckJvdHRvbSA9IGV4cG9ydHMuYm9yZGVyID0gdm9pZCAwO1xuZXhwb3J0cy5ib3JkZXJUcmFuc2Zvcm0gPSBib3JkZXJUcmFuc2Zvcm07XG5leHBvcnRzLm91dGxpbmVDb2xvciA9IGV4cG9ydHMub3V0bGluZSA9IGV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbnZhciBfcmVzcG9uc2l2ZVByb3BUeXBlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9yZXNwb25zaXZlUHJvcFR5cGVcIikpO1xudmFyIF9zdHlsZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vc3R5bGVcIikpO1xudmFyIF9jb21wb3NlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9jb21wb3NlXCIpKTtcbnZhciBfc3BhY2luZyA9IHJlcXVpcmUoXCIuL3NwYWNpbmdcIik7XG52YXIgX2JyZWFrcG9pbnRzID0gcmVxdWlyZShcIi4vYnJlYWtwb2ludHNcIik7XG5mdW5jdGlvbiBib3JkZXJUcmFuc2Zvcm0odmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIGAke3ZhbHVlfXB4IHNvbGlkYDtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUJvcmRlclN0eWxlKHByb3AsIHRyYW5zZm9ybSkge1xuICByZXR1cm4gKDAsIF9zdHlsZS5kZWZhdWx0KSh7XG4gICAgcHJvcCxcbiAgICB0aGVtZUtleTogJ2JvcmRlcnMnLFxuICAgIHRyYW5zZm9ybVxuICB9KTtcbn1cbmNvbnN0IGJvcmRlciA9IGV4cG9ydHMuYm9yZGVyID0gY3JlYXRlQm9yZGVyU3R5bGUoJ2JvcmRlcicsIGJvcmRlclRyYW5zZm9ybSk7XG5jb25zdCBib3JkZXJUb3AgPSBleHBvcnRzLmJvcmRlclRvcCA9IGNyZWF0ZUJvcmRlclN0eWxlKCdib3JkZXJUb3AnLCBib3JkZXJUcmFuc2Zvcm0pO1xuY29uc3QgYm9yZGVyUmlnaHQgPSBleHBvcnRzLmJvcmRlclJpZ2h0ID0gY3JlYXRlQm9yZGVyU3R5bGUoJ2JvcmRlclJpZ2h0JywgYm9yZGVyVHJhbnNmb3JtKTtcbmNvbnN0IGJvcmRlckJvdHRvbSA9IGV4cG9ydHMuYm9yZGVyQm90dG9tID0gY3JlYXRlQm9yZGVyU3R5bGUoJ2JvcmRlckJvdHRvbScsIGJvcmRlclRyYW5zZm9ybSk7XG5jb25zdCBib3JkZXJMZWZ0ID0gZXhwb3J0cy5ib3JkZXJMZWZ0ID0gY3JlYXRlQm9yZGVyU3R5bGUoJ2JvcmRlckxlZnQnLCBib3JkZXJUcmFuc2Zvcm0pO1xuY29uc3QgYm9yZGVyQ29sb3IgPSBleHBvcnRzLmJvcmRlckNvbG9yID0gY3JlYXRlQm9yZGVyU3R5bGUoJ2JvcmRlckNvbG9yJyk7XG5jb25zdCBib3JkZXJUb3BDb2xvciA9IGV4cG9ydHMuYm9yZGVyVG9wQ29sb3IgPSBjcmVhdGVCb3JkZXJTdHlsZSgnYm9yZGVyVG9wQ29sb3InKTtcbmNvbnN0IGJvcmRlclJpZ2h0Q29sb3IgPSBleHBvcnRzLmJvcmRlclJpZ2h0Q29sb3IgPSBjcmVhdGVCb3JkZXJTdHlsZSgnYm9yZGVyUmlnaHRDb2xvcicpO1xuY29uc3QgYm9yZGVyQm90dG9tQ29sb3IgPSBleHBvcnRzLmJvcmRlckJvdHRvbUNvbG9yID0gY3JlYXRlQm9yZGVyU3R5bGUoJ2JvcmRlckJvdHRvbUNvbG9yJyk7XG5jb25zdCBib3JkZXJMZWZ0Q29sb3IgPSBleHBvcnRzLmJvcmRlckxlZnRDb2xvciA9IGNyZWF0ZUJvcmRlclN0eWxlKCdib3JkZXJMZWZ0Q29sb3InKTtcbmNvbnN0IG91dGxpbmUgPSBleHBvcnRzLm91dGxpbmUgPSBjcmVhdGVCb3JkZXJTdHlsZSgnb3V0bGluZScsIGJvcmRlclRyYW5zZm9ybSk7XG5jb25zdCBvdXRsaW5lQ29sb3IgPSBleHBvcnRzLm91dGxpbmVDb2xvciA9IGNyZWF0ZUJvcmRlclN0eWxlKCdvdXRsaW5lQ29sb3InKTtcblxuLy8gZmFsc2UgcG9zaXRpdmVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvblxuY29uc3QgYm9yZGVyUmFkaXVzID0gcHJvcHMgPT4ge1xuICBpZiAocHJvcHMuYm9yZGVyUmFkaXVzICE9PSB1bmRlZmluZWQgJiYgcHJvcHMuYm9yZGVyUmFkaXVzICE9PSBudWxsKSB7XG4gICAgY29uc3QgdHJhbnNmb3JtZXIgPSAoMCwgX3NwYWNpbmcuY3JlYXRlVW5hcnlVbml0KShwcm9wcy50aGVtZSwgJ3NoYXBlLmJvcmRlclJhZGl1cycsIDQsICdib3JkZXJSYWRpdXMnKTtcbiAgICBjb25zdCBzdHlsZUZyb21Qcm9wVmFsdWUgPSBwcm9wVmFsdWUgPT4gKHtcbiAgICAgIGJvcmRlclJhZGl1czogKDAsIF9zcGFjaW5nLmdldFZhbHVlKSh0cmFuc2Zvcm1lciwgcHJvcFZhbHVlKVxuICAgIH0pO1xuICAgIHJldHVybiAoMCwgX2JyZWFrcG9pbnRzLmhhbmRsZUJyZWFrcG9pbnRzKShwcm9wcywgcHJvcHMuYm9yZGVyUmFkaXVzLCBzdHlsZUZyb21Qcm9wVmFsdWUpO1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcbmV4cG9ydHMuYm9yZGVyUmFkaXVzID0gYm9yZGVyUmFkaXVzO1xuYm9yZGVyUmFkaXVzLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB7XG4gIGJvcmRlclJhZGl1czogX3Jlc3BvbnNpdmVQcm9wVHlwZS5kZWZhdWx0XG59IDoge307XG5ib3JkZXJSYWRpdXMuZmlsdGVyUHJvcHMgPSBbJ2JvcmRlclJhZGl1cyddO1xuY29uc3QgYm9yZGVycyA9ICgwLCBfY29tcG9zZS5kZWZhdWx0KShib3JkZXIsIGJvcmRlclRvcCwgYm9yZGVyUmlnaHQsIGJvcmRlckJvdHRvbSwgYm9yZGVyTGVmdCwgYm9yZGVyQ29sb3IsIGJvcmRlclRvcENvbG9yLCBib3JkZXJSaWdodENvbG9yLCBib3JkZXJCb3R0b21Db2xvciwgYm9yZGVyTGVmdENvbG9yLCBib3JkZXJSYWRpdXMsIG91dGxpbmUsIG91dGxpbmVDb2xvcik7XG52YXIgX2RlZmF1bHQgPSBleHBvcnRzLmRlZmF1bHQgPSBib3JkZXJzOyIsICJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5yb3dHYXAgPSBleHBvcnRzLmdyaWRUZW1wbGF0ZVJvd3MgPSBleHBvcnRzLmdyaWRUZW1wbGF0ZUNvbHVtbnMgPSBleHBvcnRzLmdyaWRUZW1wbGF0ZUFyZWFzID0gZXhwb3J0cy5ncmlkUm93ID0gZXhwb3J0cy5ncmlkQ29sdW1uID0gZXhwb3J0cy5ncmlkQXV0b1Jvd3MgPSBleHBvcnRzLmdyaWRBdXRvRmxvdyA9IGV4cG9ydHMuZ3JpZEF1dG9Db2x1bW5zID0gZXhwb3J0cy5ncmlkQXJlYSA9IGV4cG9ydHMuZ2FwID0gZXhwb3J0cy5kZWZhdWx0ID0gZXhwb3J0cy5jb2x1bW5HYXAgPSB2b2lkIDA7XG52YXIgX3N0eWxlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9zdHlsZVwiKSk7XG52YXIgX2NvbXBvc2UgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2NvbXBvc2VcIikpO1xudmFyIF9zcGFjaW5nID0gcmVxdWlyZShcIi4vc3BhY2luZ1wiKTtcbnZhciBfYnJlYWtwb2ludHMgPSByZXF1aXJlKFwiLi9icmVha3BvaW50c1wiKTtcbnZhciBfcmVzcG9uc2l2ZVByb3BUeXBlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9yZXNwb25zaXZlUHJvcFR5cGVcIikpO1xuLy8gZmFsc2UgcG9zaXRpdmVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvblxuY29uc3QgZ2FwID0gcHJvcHMgPT4ge1xuICBpZiAocHJvcHMuZ2FwICE9PSB1bmRlZmluZWQgJiYgcHJvcHMuZ2FwICE9PSBudWxsKSB7XG4gICAgY29uc3QgdHJhbnNmb3JtZXIgPSAoMCwgX3NwYWNpbmcuY3JlYXRlVW5hcnlVbml0KShwcm9wcy50aGVtZSwgJ3NwYWNpbmcnLCA4LCAnZ2FwJyk7XG4gICAgY29uc3Qgc3R5bGVGcm9tUHJvcFZhbHVlID0gcHJvcFZhbHVlID0+ICh7XG4gICAgICBnYXA6ICgwLCBfc3BhY2luZy5nZXRWYWx1ZSkodHJhbnNmb3JtZXIsIHByb3BWYWx1ZSlcbiAgICB9KTtcbiAgICByZXR1cm4gKDAsIF9icmVha3BvaW50cy5oYW5kbGVCcmVha3BvaW50cykocHJvcHMsIHByb3BzLmdhcCwgc3R5bGVGcm9tUHJvcFZhbHVlKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5leHBvcnRzLmdhcCA9IGdhcDtcbmdhcC5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8ge1xuICBnYXA6IF9yZXNwb25zaXZlUHJvcFR5cGUuZGVmYXVsdFxufSA6IHt9O1xuZ2FwLmZpbHRlclByb3BzID0gWydnYXAnXTtcblxuLy8gZmFsc2UgcG9zaXRpdmVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvblxuY29uc3QgY29sdW1uR2FwID0gcHJvcHMgPT4ge1xuICBpZiAocHJvcHMuY29sdW1uR2FwICE9PSB1bmRlZmluZWQgJiYgcHJvcHMuY29sdW1uR2FwICE9PSBudWxsKSB7XG4gICAgY29uc3QgdHJhbnNmb3JtZXIgPSAoMCwgX3NwYWNpbmcuY3JlYXRlVW5hcnlVbml0KShwcm9wcy50aGVtZSwgJ3NwYWNpbmcnLCA4LCAnY29sdW1uR2FwJyk7XG4gICAgY29uc3Qgc3R5bGVGcm9tUHJvcFZhbHVlID0gcHJvcFZhbHVlID0+ICh7XG4gICAgICBjb2x1bW5HYXA6ICgwLCBfc3BhY2luZy5nZXRWYWx1ZSkodHJhbnNmb3JtZXIsIHByb3BWYWx1ZSlcbiAgICB9KTtcbiAgICByZXR1cm4gKDAsIF9icmVha3BvaW50cy5oYW5kbGVCcmVha3BvaW50cykocHJvcHMsIHByb3BzLmNvbHVtbkdhcCwgc3R5bGVGcm9tUHJvcFZhbHVlKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5leHBvcnRzLmNvbHVtbkdhcCA9IGNvbHVtbkdhcDtcbmNvbHVtbkdhcC5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8ge1xuICBjb2x1bW5HYXA6IF9yZXNwb25zaXZlUHJvcFR5cGUuZGVmYXVsdFxufSA6IHt9O1xuY29sdW1uR2FwLmZpbHRlclByb3BzID0gWydjb2x1bW5HYXAnXTtcblxuLy8gZmFsc2UgcG9zaXRpdmVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvblxuY29uc3Qgcm93R2FwID0gcHJvcHMgPT4ge1xuICBpZiAocHJvcHMucm93R2FwICE9PSB1bmRlZmluZWQgJiYgcHJvcHMucm93R2FwICE9PSBudWxsKSB7XG4gICAgY29uc3QgdHJhbnNmb3JtZXIgPSAoMCwgX3NwYWNpbmcuY3JlYXRlVW5hcnlVbml0KShwcm9wcy50aGVtZSwgJ3NwYWNpbmcnLCA4LCAncm93R2FwJyk7XG4gICAgY29uc3Qgc3R5bGVGcm9tUHJvcFZhbHVlID0gcHJvcFZhbHVlID0+ICh7XG4gICAgICByb3dHYXA6ICgwLCBfc3BhY2luZy5nZXRWYWx1ZSkodHJhbnNmb3JtZXIsIHByb3BWYWx1ZSlcbiAgICB9KTtcbiAgICByZXR1cm4gKDAsIF9icmVha3BvaW50cy5oYW5kbGVCcmVha3BvaW50cykocHJvcHMsIHByb3BzLnJvd0dhcCwgc3R5bGVGcm9tUHJvcFZhbHVlKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5leHBvcnRzLnJvd0dhcCA9IHJvd0dhcDtcbnJvd0dhcC5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8ge1xuICByb3dHYXA6IF9yZXNwb25zaXZlUHJvcFR5cGUuZGVmYXVsdFxufSA6IHt9O1xucm93R2FwLmZpbHRlclByb3BzID0gWydyb3dHYXAnXTtcbmNvbnN0IGdyaWRDb2x1bW4gPSBleHBvcnRzLmdyaWRDb2x1bW4gPSAoMCwgX3N0eWxlLmRlZmF1bHQpKHtcbiAgcHJvcDogJ2dyaWRDb2x1bW4nXG59KTtcbmNvbnN0IGdyaWRSb3cgPSBleHBvcnRzLmdyaWRSb3cgPSAoMCwgX3N0eWxlLmRlZmF1bHQpKHtcbiAgcHJvcDogJ2dyaWRSb3cnXG59KTtcbmNvbnN0IGdyaWRBdXRvRmxvdyA9IGV4cG9ydHMuZ3JpZEF1dG9GbG93ID0gKDAsIF9zdHlsZS5kZWZhdWx0KSh7XG4gIHByb3A6ICdncmlkQXV0b0Zsb3cnXG59KTtcbmNvbnN0IGdyaWRBdXRvQ29sdW1ucyA9IGV4cG9ydHMuZ3JpZEF1dG9Db2x1bW5zID0gKDAsIF9zdHlsZS5kZWZhdWx0KSh7XG4gIHByb3A6ICdncmlkQXV0b0NvbHVtbnMnXG59KTtcbmNvbnN0IGdyaWRBdXRvUm93cyA9IGV4cG9ydHMuZ3JpZEF1dG9Sb3dzID0gKDAsIF9zdHlsZS5kZWZhdWx0KSh7XG4gIHByb3A6ICdncmlkQXV0b1Jvd3MnXG59KTtcbmNvbnN0IGdyaWRUZW1wbGF0ZUNvbHVtbnMgPSBleHBvcnRzLmdyaWRUZW1wbGF0ZUNvbHVtbnMgPSAoMCwgX3N0eWxlLmRlZmF1bHQpKHtcbiAgcHJvcDogJ2dyaWRUZW1wbGF0ZUNvbHVtbnMnXG59KTtcbmNvbnN0IGdyaWRUZW1wbGF0ZVJvd3MgPSBleHBvcnRzLmdyaWRUZW1wbGF0ZVJvd3MgPSAoMCwgX3N0eWxlLmRlZmF1bHQpKHtcbiAgcHJvcDogJ2dyaWRUZW1wbGF0ZVJvd3MnXG59KTtcbmNvbnN0IGdyaWRUZW1wbGF0ZUFyZWFzID0gZXhwb3J0cy5ncmlkVGVtcGxhdGVBcmVhcyA9ICgwLCBfc3R5bGUuZGVmYXVsdCkoe1xuICBwcm9wOiAnZ3JpZFRlbXBsYXRlQXJlYXMnXG59KTtcbmNvbnN0IGdyaWRBcmVhID0gZXhwb3J0cy5ncmlkQXJlYSA9ICgwLCBfc3R5bGUuZGVmYXVsdCkoe1xuICBwcm9wOiAnZ3JpZEFyZWEnXG59KTtcbmNvbnN0IGdyaWQgPSAoMCwgX2NvbXBvc2UuZGVmYXVsdCkoZ2FwLCBjb2x1bW5HYXAsIHJvd0dhcCwgZ3JpZENvbHVtbiwgZ3JpZFJvdywgZ3JpZEF1dG9GbG93LCBncmlkQXV0b0NvbHVtbnMsIGdyaWRBdXRvUm93cywgZ3JpZFRlbXBsYXRlQ29sdW1ucywgZ3JpZFRlbXBsYXRlUm93cywgZ3JpZFRlbXBsYXRlQXJlYXMsIGdyaWRBcmVhKTtcbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9IGdyaWQ7IiwgIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSBleHBvcnRzLmNvbG9yID0gZXhwb3J0cy5iZ2NvbG9yID0gZXhwb3J0cy5iYWNrZ3JvdW5kQ29sb3IgPSB2b2lkIDA7XG5leHBvcnRzLnBhbGV0dGVUcmFuc2Zvcm0gPSBwYWxldHRlVHJhbnNmb3JtO1xudmFyIF9zdHlsZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vc3R5bGVcIikpO1xudmFyIF9jb21wb3NlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9jb21wb3NlXCIpKTtcbmZ1bmN0aW9uIHBhbGV0dGVUcmFuc2Zvcm0odmFsdWUsIHVzZXJWYWx1ZSkge1xuICBpZiAodXNlclZhbHVlID09PSAnZ3JleScpIHtcbiAgICByZXR1cm4gdXNlclZhbHVlO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cbmNvbnN0IGNvbG9yID0gZXhwb3J0cy5jb2xvciA9ICgwLCBfc3R5bGUuZGVmYXVsdCkoe1xuICBwcm9wOiAnY29sb3InLFxuICB0aGVtZUtleTogJ3BhbGV0dGUnLFxuICB0cmFuc2Zvcm06IHBhbGV0dGVUcmFuc2Zvcm1cbn0pO1xuY29uc3QgYmdjb2xvciA9IGV4cG9ydHMuYmdjb2xvciA9ICgwLCBfc3R5bGUuZGVmYXVsdCkoe1xuICBwcm9wOiAnYmdjb2xvcicsXG4gIGNzc1Byb3BlcnR5OiAnYmFja2dyb3VuZENvbG9yJyxcbiAgdGhlbWVLZXk6ICdwYWxldHRlJyxcbiAgdHJhbnNmb3JtOiBwYWxldHRlVHJhbnNmb3JtXG59KTtcbmNvbnN0IGJhY2tncm91bmRDb2xvciA9IGV4cG9ydHMuYmFja2dyb3VuZENvbG9yID0gKDAsIF9zdHlsZS5kZWZhdWx0KSh7XG4gIHByb3A6ICdiYWNrZ3JvdW5kQ29sb3InLFxuICB0aGVtZUtleTogJ3BhbGV0dGUnLFxuICB0cmFuc2Zvcm06IHBhbGV0dGVUcmFuc2Zvcm1cbn0pO1xuY29uc3QgcGFsZXR0ZSA9ICgwLCBfY29tcG9zZS5kZWZhdWx0KShjb2xvciwgYmdjb2xvciwgYmFja2dyb3VuZENvbG9yKTtcbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9IHBhbGV0dGU7IiwgIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNpemVXaWR0aCA9IGV4cG9ydHMuc2l6ZUhlaWdodCA9IGV4cG9ydHMubWluV2lkdGggPSBleHBvcnRzLm1pbkhlaWdodCA9IGV4cG9ydHMubWF4V2lkdGggPSBleHBvcnRzLm1heEhlaWdodCA9IGV4cG9ydHMuaGVpZ2h0ID0gZXhwb3J0cy5kZWZhdWx0ID0gZXhwb3J0cy5ib3hTaXppbmcgPSB2b2lkIDA7XG5leHBvcnRzLnNpemluZ1RyYW5zZm9ybSA9IHNpemluZ1RyYW5zZm9ybTtcbmV4cG9ydHMud2lkdGggPSB2b2lkIDA7XG52YXIgX3N0eWxlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9zdHlsZVwiKSk7XG52YXIgX2NvbXBvc2UgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2NvbXBvc2VcIikpO1xudmFyIF9icmVha3BvaW50cyA9IHJlcXVpcmUoXCIuL2JyZWFrcG9pbnRzXCIpO1xuZnVuY3Rpb24gc2l6aW5nVHJhbnNmb3JtKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA8PSAxICYmIHZhbHVlICE9PSAwID8gYCR7dmFsdWUgKiAxMDB9JWAgOiB2YWx1ZTtcbn1cbmNvbnN0IHdpZHRoID0gZXhwb3J0cy53aWR0aCA9ICgwLCBfc3R5bGUuZGVmYXVsdCkoe1xuICBwcm9wOiAnd2lkdGgnLFxuICB0cmFuc2Zvcm06IHNpemluZ1RyYW5zZm9ybVxufSk7XG5jb25zdCBtYXhXaWR0aCA9IHByb3BzID0+IHtcbiAgaWYgKHByb3BzLm1heFdpZHRoICE9PSB1bmRlZmluZWQgJiYgcHJvcHMubWF4V2lkdGggIT09IG51bGwpIHtcbiAgICBjb25zdCBzdHlsZUZyb21Qcm9wVmFsdWUgPSBwcm9wVmFsdWUgPT4ge1xuICAgICAgdmFyIF9wcm9wcyR0aGVtZSwgX3Byb3BzJHRoZW1lMjtcbiAgICAgIGNvbnN0IGJyZWFrcG9pbnQgPSAoKF9wcm9wcyR0aGVtZSA9IHByb3BzLnRoZW1lKSA9PSBudWxsIHx8IChfcHJvcHMkdGhlbWUgPSBfcHJvcHMkdGhlbWUuYnJlYWtwb2ludHMpID09IG51bGwgfHwgKF9wcm9wcyR0aGVtZSA9IF9wcm9wcyR0aGVtZS52YWx1ZXMpID09IG51bGwgPyB2b2lkIDAgOiBfcHJvcHMkdGhlbWVbcHJvcFZhbHVlXSkgfHwgX2JyZWFrcG9pbnRzLnZhbHVlc1twcm9wVmFsdWVdO1xuICAgICAgaWYgKCFicmVha3BvaW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbWF4V2lkdGg6IHNpemluZ1RyYW5zZm9ybShwcm9wVmFsdWUpXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBpZiAoKChfcHJvcHMkdGhlbWUyID0gcHJvcHMudGhlbWUpID09IG51bGwgfHwgKF9wcm9wcyR0aGVtZTIgPSBfcHJvcHMkdGhlbWUyLmJyZWFrcG9pbnRzKSA9PSBudWxsID8gdm9pZCAwIDogX3Byb3BzJHRoZW1lMi51bml0KSAhPT0gJ3B4Jykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG1heFdpZHRoOiBgJHticmVha3BvaW50fSR7cHJvcHMudGhlbWUuYnJlYWtwb2ludHMudW5pdH1gXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtYXhXaWR0aDogYnJlYWtwb2ludFxuICAgICAgfTtcbiAgICB9O1xuICAgIHJldHVybiAoMCwgX2JyZWFrcG9pbnRzLmhhbmRsZUJyZWFrcG9pbnRzKShwcm9wcywgcHJvcHMubWF4V2lkdGgsIHN0eWxlRnJvbVByb3BWYWx1ZSk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuZXhwb3J0cy5tYXhXaWR0aCA9IG1heFdpZHRoO1xubWF4V2lkdGguZmlsdGVyUHJvcHMgPSBbJ21heFdpZHRoJ107XG5jb25zdCBtaW5XaWR0aCA9IGV4cG9ydHMubWluV2lkdGggPSAoMCwgX3N0eWxlLmRlZmF1bHQpKHtcbiAgcHJvcDogJ21pbldpZHRoJyxcbiAgdHJhbnNmb3JtOiBzaXppbmdUcmFuc2Zvcm1cbn0pO1xuY29uc3QgaGVpZ2h0ID0gZXhwb3J0cy5oZWlnaHQgPSAoMCwgX3N0eWxlLmRlZmF1bHQpKHtcbiAgcHJvcDogJ2hlaWdodCcsXG4gIHRyYW5zZm9ybTogc2l6aW5nVHJhbnNmb3JtXG59KTtcbmNvbnN0IG1heEhlaWdodCA9IGV4cG9ydHMubWF4SGVpZ2h0ID0gKDAsIF9zdHlsZS5kZWZhdWx0KSh7XG4gIHByb3A6ICdtYXhIZWlnaHQnLFxuICB0cmFuc2Zvcm06IHNpemluZ1RyYW5zZm9ybVxufSk7XG5jb25zdCBtaW5IZWlnaHQgPSBleHBvcnRzLm1pbkhlaWdodCA9ICgwLCBfc3R5bGUuZGVmYXVsdCkoe1xuICBwcm9wOiAnbWluSGVpZ2h0JyxcbiAgdHJhbnNmb3JtOiBzaXppbmdUcmFuc2Zvcm1cbn0pO1xuY29uc3Qgc2l6ZVdpZHRoID0gZXhwb3J0cy5zaXplV2lkdGggPSAoMCwgX3N0eWxlLmRlZmF1bHQpKHtcbiAgcHJvcDogJ3NpemUnLFxuICBjc3NQcm9wZXJ0eTogJ3dpZHRoJyxcbiAgdHJhbnNmb3JtOiBzaXppbmdUcmFuc2Zvcm1cbn0pO1xuY29uc3Qgc2l6ZUhlaWdodCA9IGV4cG9ydHMuc2l6ZUhlaWdodCA9ICgwLCBfc3R5bGUuZGVmYXVsdCkoe1xuICBwcm9wOiAnc2l6ZScsXG4gIGNzc1Byb3BlcnR5OiAnaGVpZ2h0JyxcbiAgdHJhbnNmb3JtOiBzaXppbmdUcmFuc2Zvcm1cbn0pO1xuY29uc3QgYm94U2l6aW5nID0gZXhwb3J0cy5ib3hTaXppbmcgPSAoMCwgX3N0eWxlLmRlZmF1bHQpKHtcbiAgcHJvcDogJ2JveFNpemluZydcbn0pO1xuY29uc3Qgc2l6aW5nID0gKDAsIF9jb21wb3NlLmRlZmF1bHQpKHdpZHRoLCBtYXhXaWR0aCwgbWluV2lkdGgsIGhlaWdodCwgbWF4SGVpZ2h0LCBtaW5IZWlnaHQsIGJveFNpemluZyk7XG52YXIgX2RlZmF1bHQgPSBleHBvcnRzLmRlZmF1bHQgPSBzaXppbmc7IiwgIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xudmFyIF9zcGFjaW5nID0gcmVxdWlyZShcIi4uL3NwYWNpbmdcIik7XG52YXIgX2JvcmRlcnMgPSByZXF1aXJlKFwiLi4vYm9yZGVyc1wiKTtcbnZhciBfY3NzR3JpZCA9IHJlcXVpcmUoXCIuLi9jc3NHcmlkXCIpO1xudmFyIF9wYWxldHRlID0gcmVxdWlyZShcIi4uL3BhbGV0dGVcIik7XG52YXIgX3NpemluZyA9IHJlcXVpcmUoXCIuLi9zaXppbmdcIik7XG5jb25zdCBkZWZhdWx0U3hDb25maWcgPSB7XG4gIC8vIGJvcmRlcnNcbiAgYm9yZGVyOiB7XG4gICAgdGhlbWVLZXk6ICdib3JkZXJzJyxcbiAgICB0cmFuc2Zvcm06IF9ib3JkZXJzLmJvcmRlclRyYW5zZm9ybVxuICB9LFxuICBib3JkZXJUb3A6IHtcbiAgICB0aGVtZUtleTogJ2JvcmRlcnMnLFxuICAgIHRyYW5zZm9ybTogX2JvcmRlcnMuYm9yZGVyVHJhbnNmb3JtXG4gIH0sXG4gIGJvcmRlclJpZ2h0OiB7XG4gICAgdGhlbWVLZXk6ICdib3JkZXJzJyxcbiAgICB0cmFuc2Zvcm06IF9ib3JkZXJzLmJvcmRlclRyYW5zZm9ybVxuICB9LFxuICBib3JkZXJCb3R0b206IHtcbiAgICB0aGVtZUtleTogJ2JvcmRlcnMnLFxuICAgIHRyYW5zZm9ybTogX2JvcmRlcnMuYm9yZGVyVHJhbnNmb3JtXG4gIH0sXG4gIGJvcmRlckxlZnQ6IHtcbiAgICB0aGVtZUtleTogJ2JvcmRlcnMnLFxuICAgIHRyYW5zZm9ybTogX2JvcmRlcnMuYm9yZGVyVHJhbnNmb3JtXG4gIH0sXG4gIGJvcmRlckNvbG9yOiB7XG4gICAgdGhlbWVLZXk6ICdwYWxldHRlJ1xuICB9LFxuICBib3JkZXJUb3BDb2xvcjoge1xuICAgIHRoZW1lS2V5OiAncGFsZXR0ZSdcbiAgfSxcbiAgYm9yZGVyUmlnaHRDb2xvcjoge1xuICAgIHRoZW1lS2V5OiAncGFsZXR0ZSdcbiAgfSxcbiAgYm9yZGVyQm90dG9tQ29sb3I6IHtcbiAgICB0aGVtZUtleTogJ3BhbGV0dGUnXG4gIH0sXG4gIGJvcmRlckxlZnRDb2xvcjoge1xuICAgIHRoZW1lS2V5OiAncGFsZXR0ZSdcbiAgfSxcbiAgb3V0bGluZToge1xuICAgIHRoZW1lS2V5OiAnYm9yZGVycycsXG4gICAgdHJhbnNmb3JtOiBfYm9yZGVycy5ib3JkZXJUcmFuc2Zvcm1cbiAgfSxcbiAgb3V0bGluZUNvbG9yOiB7XG4gICAgdGhlbWVLZXk6ICdwYWxldHRlJ1xuICB9LFxuICBib3JkZXJSYWRpdXM6IHtcbiAgICB0aGVtZUtleTogJ3NoYXBlLmJvcmRlclJhZGl1cycsXG4gICAgc3R5bGU6IF9ib3JkZXJzLmJvcmRlclJhZGl1c1xuICB9LFxuICAvLyBwYWxldHRlXG4gIGNvbG9yOiB7XG4gICAgdGhlbWVLZXk6ICdwYWxldHRlJyxcbiAgICB0cmFuc2Zvcm06IF9wYWxldHRlLnBhbGV0dGVUcmFuc2Zvcm1cbiAgfSxcbiAgYmdjb2xvcjoge1xuICAgIHRoZW1lS2V5OiAncGFsZXR0ZScsXG4gICAgY3NzUHJvcGVydHk6ICdiYWNrZ3JvdW5kQ29sb3InLFxuICAgIHRyYW5zZm9ybTogX3BhbGV0dGUucGFsZXR0ZVRyYW5zZm9ybVxuICB9LFxuICBiYWNrZ3JvdW5kQ29sb3I6IHtcbiAgICB0aGVtZUtleTogJ3BhbGV0dGUnLFxuICAgIHRyYW5zZm9ybTogX3BhbGV0dGUucGFsZXR0ZVRyYW5zZm9ybVxuICB9LFxuICAvLyBzcGFjaW5nXG4gIHA6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcucGFkZGluZ1xuICB9LFxuICBwdDoge1xuICAgIHN0eWxlOiBfc3BhY2luZy5wYWRkaW5nXG4gIH0sXG4gIHByOiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLnBhZGRpbmdcbiAgfSxcbiAgcGI6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcucGFkZGluZ1xuICB9LFxuICBwbDoge1xuICAgIHN0eWxlOiBfc3BhY2luZy5wYWRkaW5nXG4gIH0sXG4gIHB4OiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLnBhZGRpbmdcbiAgfSxcbiAgcHk6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcucGFkZGluZ1xuICB9LFxuICBwYWRkaW5nOiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLnBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZ1RvcDoge1xuICAgIHN0eWxlOiBfc3BhY2luZy5wYWRkaW5nXG4gIH0sXG4gIHBhZGRpbmdSaWdodDoge1xuICAgIHN0eWxlOiBfc3BhY2luZy5wYWRkaW5nXG4gIH0sXG4gIHBhZGRpbmdCb3R0b206IHtcbiAgICBzdHlsZTogX3NwYWNpbmcucGFkZGluZ1xuICB9LFxuICBwYWRkaW5nTGVmdDoge1xuICAgIHN0eWxlOiBfc3BhY2luZy5wYWRkaW5nXG4gIH0sXG4gIHBhZGRpbmdYOiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLnBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZ1k6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcucGFkZGluZ1xuICB9LFxuICBwYWRkaW5nSW5saW5lOiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLnBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZ0lubGluZVN0YXJ0OiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLnBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZ0lubGluZUVuZDoge1xuICAgIHN0eWxlOiBfc3BhY2luZy5wYWRkaW5nXG4gIH0sXG4gIHBhZGRpbmdCbG9jazoge1xuICAgIHN0eWxlOiBfc3BhY2luZy5wYWRkaW5nXG4gIH0sXG4gIHBhZGRpbmdCbG9ja1N0YXJ0OiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLnBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZ0Jsb2NrRW5kOiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLnBhZGRpbmdcbiAgfSxcbiAgbToge1xuICAgIHN0eWxlOiBfc3BhY2luZy5tYXJnaW5cbiAgfSxcbiAgbXQ6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcubWFyZ2luXG4gIH0sXG4gIG1yOiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLm1hcmdpblxuICB9LFxuICBtYjoge1xuICAgIHN0eWxlOiBfc3BhY2luZy5tYXJnaW5cbiAgfSxcbiAgbWw6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcubWFyZ2luXG4gIH0sXG4gIG14OiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLm1hcmdpblxuICB9LFxuICBteToge1xuICAgIHN0eWxlOiBfc3BhY2luZy5tYXJnaW5cbiAgfSxcbiAgbWFyZ2luOiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLm1hcmdpblxuICB9LFxuICBtYXJnaW5Ub3A6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcubWFyZ2luXG4gIH0sXG4gIG1hcmdpblJpZ2h0OiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLm1hcmdpblxuICB9LFxuICBtYXJnaW5Cb3R0b206IHtcbiAgICBzdHlsZTogX3NwYWNpbmcubWFyZ2luXG4gIH0sXG4gIG1hcmdpbkxlZnQ6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcubWFyZ2luXG4gIH0sXG4gIG1hcmdpblg6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcubWFyZ2luXG4gIH0sXG4gIG1hcmdpblk6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcubWFyZ2luXG4gIH0sXG4gIG1hcmdpbklubGluZToge1xuICAgIHN0eWxlOiBfc3BhY2luZy5tYXJnaW5cbiAgfSxcbiAgbWFyZ2luSW5saW5lU3RhcnQ6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcubWFyZ2luXG4gIH0sXG4gIG1hcmdpbklubGluZUVuZDoge1xuICAgIHN0eWxlOiBfc3BhY2luZy5tYXJnaW5cbiAgfSxcbiAgbWFyZ2luQmxvY2s6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcubWFyZ2luXG4gIH0sXG4gIG1hcmdpbkJsb2NrU3RhcnQ6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcubWFyZ2luXG4gIH0sXG4gIG1hcmdpbkJsb2NrRW5kOiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLm1hcmdpblxuICB9LFxuICAvLyBkaXNwbGF5XG4gIGRpc3BsYXlQcmludDoge1xuICAgIGNzc1Byb3BlcnR5OiBmYWxzZSxcbiAgICB0cmFuc2Zvcm06IHZhbHVlID0+ICh7XG4gICAgICAnQG1lZGlhIHByaW50Jzoge1xuICAgICAgICBkaXNwbGF5OiB2YWx1ZVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG4gIGRpc3BsYXk6IHt9LFxuICBvdmVyZmxvdzoge30sXG4gIHRleHRPdmVyZmxvdzoge30sXG4gIHZpc2liaWxpdHk6IHt9LFxuICB3aGl0ZVNwYWNlOiB7fSxcbiAgLy8gZmxleGJveFxuICBmbGV4QmFzaXM6IHt9LFxuICBmbGV4RGlyZWN0aW9uOiB7fSxcbiAgZmxleFdyYXA6IHt9LFxuICBqdXN0aWZ5Q29udGVudDoge30sXG4gIGFsaWduSXRlbXM6IHt9LFxuICBhbGlnbkNvbnRlbnQ6IHt9LFxuICBvcmRlcjoge30sXG4gIGZsZXg6IHt9LFxuICBmbGV4R3Jvdzoge30sXG4gIGZsZXhTaHJpbms6IHt9LFxuICBhbGlnblNlbGY6IHt9LFxuICBqdXN0aWZ5SXRlbXM6IHt9LFxuICBqdXN0aWZ5U2VsZjoge30sXG4gIC8vIGdyaWRcbiAgZ2FwOiB7XG4gICAgc3R5bGU6IF9jc3NHcmlkLmdhcFxuICB9LFxuICByb3dHYXA6IHtcbiAgICBzdHlsZTogX2Nzc0dyaWQucm93R2FwXG4gIH0sXG4gIGNvbHVtbkdhcDoge1xuICAgIHN0eWxlOiBfY3NzR3JpZC5jb2x1bW5HYXBcbiAgfSxcbiAgZ3JpZENvbHVtbjoge30sXG4gIGdyaWRSb3c6IHt9LFxuICBncmlkQXV0b0Zsb3c6IHt9LFxuICBncmlkQXV0b0NvbHVtbnM6IHt9LFxuICBncmlkQXV0b1Jvd3M6IHt9LFxuICBncmlkVGVtcGxhdGVDb2x1bW5zOiB7fSxcbiAgZ3JpZFRlbXBsYXRlUm93czoge30sXG4gIGdyaWRUZW1wbGF0ZUFyZWFzOiB7fSxcbiAgZ3JpZEFyZWE6IHt9LFxuICAvLyBwb3NpdGlvbnNcbiAgcG9zaXRpb246IHt9LFxuICB6SW5kZXg6IHtcbiAgICB0aGVtZUtleTogJ3pJbmRleCdcbiAgfSxcbiAgdG9wOiB7fSxcbiAgcmlnaHQ6IHt9LFxuICBib3R0b206IHt9LFxuICBsZWZ0OiB7fSxcbiAgLy8gc2hhZG93c1xuICBib3hTaGFkb3c6IHtcbiAgICB0aGVtZUtleTogJ3NoYWRvd3MnXG4gIH0sXG4gIC8vIHNpemluZ1xuICB3aWR0aDoge1xuICAgIHRyYW5zZm9ybTogX3NpemluZy5zaXppbmdUcmFuc2Zvcm1cbiAgfSxcbiAgbWF4V2lkdGg6IHtcbiAgICBzdHlsZTogX3NpemluZy5tYXhXaWR0aFxuICB9LFxuICBtaW5XaWR0aDoge1xuICAgIHRyYW5zZm9ybTogX3NpemluZy5zaXppbmdUcmFuc2Zvcm1cbiAgfSxcbiAgaGVpZ2h0OiB7XG4gICAgdHJhbnNmb3JtOiBfc2l6aW5nLnNpemluZ1RyYW5zZm9ybVxuICB9LFxuICBtYXhIZWlnaHQ6IHtcbiAgICB0cmFuc2Zvcm06IF9zaXppbmcuc2l6aW5nVHJhbnNmb3JtXG4gIH0sXG4gIG1pbkhlaWdodDoge1xuICAgIHRyYW5zZm9ybTogX3NpemluZy5zaXppbmdUcmFuc2Zvcm1cbiAgfSxcbiAgYm94U2l6aW5nOiB7fSxcbiAgLy8gdHlwb2dyYXBoeVxuICBmb250RmFtaWx5OiB7XG4gICAgdGhlbWVLZXk6ICd0eXBvZ3JhcGh5J1xuICB9LFxuICBmb250U2l6ZToge1xuICAgIHRoZW1lS2V5OiAndHlwb2dyYXBoeSdcbiAgfSxcbiAgZm9udFN0eWxlOiB7XG4gICAgdGhlbWVLZXk6ICd0eXBvZ3JhcGh5J1xuICB9LFxuICBmb250V2VpZ2h0OiB7XG4gICAgdGhlbWVLZXk6ICd0eXBvZ3JhcGh5J1xuICB9LFxuICBsZXR0ZXJTcGFjaW5nOiB7fSxcbiAgdGV4dFRyYW5zZm9ybToge30sXG4gIGxpbmVIZWlnaHQ6IHt9LFxuICB0ZXh0QWxpZ246IHt9LFxuICB0eXBvZ3JhcGh5OiB7XG4gICAgY3NzUHJvcGVydHk6IGZhbHNlLFxuICAgIHRoZW1lS2V5OiAndHlwb2dyYXBoeSdcbiAgfVxufTtcbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9IGRlZmF1bHRTeENvbmZpZzsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbmV4cG9ydHMudW5zdGFibGVfY3JlYXRlU3R5bGVGdW5jdGlvblN4ID0gdW5zdGFibGVfY3JlYXRlU3R5bGVGdW5jdGlvblN4O1xudmFyIF9jYXBpdGFsaXplID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiQG11aS91dGlscy9jYXBpdGFsaXplXCIpKTtcbnZhciBfbWVyZ2UgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuLi9tZXJnZVwiKSk7XG52YXIgX3N0eWxlID0gcmVxdWlyZShcIi4uL3N0eWxlXCIpO1xudmFyIF9icmVha3BvaW50cyA9IHJlcXVpcmUoXCIuLi9icmVha3BvaW50c1wiKTtcbnZhciBfZGVmYXVsdFN4Q29uZmlnID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9kZWZhdWx0U3hDb25maWdcIikpO1xuZnVuY3Rpb24gb2JqZWN0c0hhdmVTYW1lS2V5cyguLi5vYmplY3RzKSB7XG4gIGNvbnN0IGFsbEtleXMgPSBvYmplY3RzLnJlZHVjZSgoa2V5cywgb2JqZWN0KSA9PiBrZXlzLmNvbmNhdChPYmplY3Qua2V5cyhvYmplY3QpKSwgW10pO1xuICBjb25zdCB1bmlvbiA9IG5ldyBTZXQoYWxsS2V5cyk7XG4gIHJldHVybiBvYmplY3RzLmV2ZXJ5KG9iamVjdCA9PiB1bmlvbi5zaXplID09PSBPYmplY3Qua2V5cyhvYmplY3QpLmxlbmd0aCk7XG59XG5mdW5jdGlvbiBjYWxsSWZGbihtYXliZUZuLCBhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBtYXliZUZuID09PSAnZnVuY3Rpb24nID8gbWF5YmVGbihhcmcpIDogbWF5YmVGbjtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuZnVuY3Rpb24gdW5zdGFibGVfY3JlYXRlU3R5bGVGdW5jdGlvblN4KCkge1xuICBmdW5jdGlvbiBnZXRUaGVtZVZhbHVlKHByb3AsIHZhbCwgdGhlbWUsIGNvbmZpZykge1xuICAgIGNvbnN0IHByb3BzID0ge1xuICAgICAgW3Byb3BdOiB2YWwsXG4gICAgICB0aGVtZVxuICAgIH07XG4gICAgY29uc3Qgb3B0aW9ucyA9IGNvbmZpZ1twcm9wXTtcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIFtwcm9wXTogdmFsXG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCB7XG4gICAgICBjc3NQcm9wZXJ0eSA9IHByb3AsXG4gICAgICB0aGVtZUtleSxcbiAgICAgIHRyYW5zZm9ybSxcbiAgICAgIHN0eWxlXG4gICAgfSA9IG9wdGlvbnM7XG4gICAgaWYgKHZhbCA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBUT0RPIHY2OiByZW1vdmUsIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbXVpL21hdGVyaWFsLXVpL3B1bGwvMzgxMjNcbiAgICBpZiAodGhlbWVLZXkgPT09ICd0eXBvZ3JhcGh5JyAmJiB2YWwgPT09ICdpbmhlcml0Jykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW3Byb3BdOiB2YWxcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IHRoZW1lTWFwcGluZyA9ICgwLCBfc3R5bGUuZ2V0UGF0aCkodGhlbWUsIHRoZW1lS2V5KSB8fCB7fTtcbiAgICBpZiAoc3R5bGUpIHtcbiAgICAgIHJldHVybiBzdHlsZShwcm9wcyk7XG4gICAgfVxuICAgIGNvbnN0IHN0eWxlRnJvbVByb3BWYWx1ZSA9IHByb3BWYWx1ZUZpbmFsID0+IHtcbiAgICAgIGxldCB2YWx1ZSA9ICgwLCBfc3R5bGUuZ2V0U3R5bGVWYWx1ZSkodGhlbWVNYXBwaW5nLCB0cmFuc2Zvcm0sIHByb3BWYWx1ZUZpbmFsKTtcbiAgICAgIGlmIChwcm9wVmFsdWVGaW5hbCA9PT0gdmFsdWUgJiYgdHlwZW9mIHByb3BWYWx1ZUZpbmFsID09PSAnc3RyaW5nJykge1xuICAgICAgICAvLyBIYXZlbid0IGZvdW5kIHZhbHVlXG4gICAgICAgIHZhbHVlID0gKDAsIF9zdHlsZS5nZXRTdHlsZVZhbHVlKSh0aGVtZU1hcHBpbmcsIHRyYW5zZm9ybSwgYCR7cHJvcH0ke3Byb3BWYWx1ZUZpbmFsID09PSAnZGVmYXVsdCcgPyAnJyA6ICgwLCBfY2FwaXRhbGl6ZS5kZWZhdWx0KShwcm9wVmFsdWVGaW5hbCl9YCwgcHJvcFZhbHVlRmluYWwpO1xuICAgICAgfVxuICAgICAgaWYgKGNzc1Byb3BlcnR5ID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBbY3NzUHJvcGVydHldOiB2YWx1ZVxuICAgICAgfTtcbiAgICB9O1xuICAgIHJldHVybiAoMCwgX2JyZWFrcG9pbnRzLmhhbmRsZUJyZWFrcG9pbnRzKShwcm9wcywgdmFsLCBzdHlsZUZyb21Qcm9wVmFsdWUpO1xuICB9XG4gIGZ1bmN0aW9uIHN0eWxlRnVuY3Rpb25TeChwcm9wcykge1xuICAgIHZhciBfdGhlbWUkdW5zdGFibGVfc3hDb247XG4gICAgY29uc3Qge1xuICAgICAgc3gsXG4gICAgICB0aGVtZSA9IHt9XG4gICAgfSA9IHByb3BzIHx8IHt9O1xuICAgIGlmICghc3gpIHtcbiAgICAgIHJldHVybiBudWxsOyAvLyBFbW90aW9uICYgc3R5bGVkLWNvbXBvbmVudHMgd2lsbCBuZWdsZWN0IG51bGxcbiAgICB9XG4gICAgY29uc3QgY29uZmlnID0gKF90aGVtZSR1bnN0YWJsZV9zeENvbiA9IHRoZW1lLnVuc3RhYmxlX3N4Q29uZmlnKSAhPSBudWxsID8gX3RoZW1lJHVuc3RhYmxlX3N4Q29uIDogX2RlZmF1bHRTeENvbmZpZy5kZWZhdWx0O1xuXG4gICAgLypcbiAgICAgKiBSZWNlaXZlIGBzeElucHV0YCBhcyBvYmplY3Qgb3IgY2FsbGJhY2tcbiAgICAgKiBhbmQgdGhlbiByZWN1cnNpdmVseSBjaGVjayBrZXlzICYgdmFsdWVzIHRvIGNyZWF0ZSBtZWRpYSBxdWVyeSBvYmplY3Qgc3R5bGVzLlxuICAgICAqICh0aGUgcmVzdWx0IHdpbGwgYmUgdXNlZCBpbiBgc3R5bGVkYClcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0cmF2ZXJzZShzeElucHV0KSB7XG4gICAgICBsZXQgc3hPYmplY3QgPSBzeElucHV0O1xuICAgICAgaWYgKHR5cGVvZiBzeElucHV0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHN4T2JqZWN0ID0gc3hJbnB1dCh0aGVtZSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzeElucHV0ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAvLyB2YWx1ZVxuICAgICAgICByZXR1cm4gc3hJbnB1dDtcbiAgICAgIH1cbiAgICAgIGlmICghc3hPYmplY3QpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjb25zdCBlbXB0eUJyZWFrcG9pbnRzID0gKDAsIF9icmVha3BvaW50cy5jcmVhdGVFbXB0eUJyZWFrcG9pbnRPYmplY3QpKHRoZW1lLmJyZWFrcG9pbnRzKTtcbiAgICAgIGNvbnN0IGJyZWFrcG9pbnRzS2V5cyA9IE9iamVjdC5rZXlzKGVtcHR5QnJlYWtwb2ludHMpO1xuICAgICAgbGV0IGNzcyA9IGVtcHR5QnJlYWtwb2ludHM7XG4gICAgICBPYmplY3Qua2V5cyhzeE9iamVjdCkuZm9yRWFjaChzdHlsZUtleSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gY2FsbElmRm4oc3hPYmplY3Rbc3R5bGVLZXldLCB0aGVtZSk7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGlmIChjb25maWdbc3R5bGVLZXldKSB7XG4gICAgICAgICAgICAgIGNzcyA9ICgwLCBfbWVyZ2UuZGVmYXVsdCkoY3NzLCBnZXRUaGVtZVZhbHVlKHN0eWxlS2V5LCB2YWx1ZSwgdGhlbWUsIGNvbmZpZykpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29uc3QgYnJlYWtwb2ludHNWYWx1ZXMgPSAoMCwgX2JyZWFrcG9pbnRzLmhhbmRsZUJyZWFrcG9pbnRzKSh7XG4gICAgICAgICAgICAgICAgdGhlbWVcbiAgICAgICAgICAgICAgfSwgdmFsdWUsIHggPT4gKHtcbiAgICAgICAgICAgICAgICBbc3R5bGVLZXldOiB4XG4gICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgaWYgKG9iamVjdHNIYXZlU2FtZUtleXMoYnJlYWtwb2ludHNWYWx1ZXMsIHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGNzc1tzdHlsZUtleV0gPSBzdHlsZUZ1bmN0aW9uU3goe1xuICAgICAgICAgICAgICAgICAgc3g6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgdGhlbWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjc3MgPSAoMCwgX21lcmdlLmRlZmF1bHQpKGNzcywgYnJlYWtwb2ludHNWYWx1ZXMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNzcyA9ICgwLCBfbWVyZ2UuZGVmYXVsdCkoY3NzLCBnZXRUaGVtZVZhbHVlKHN0eWxlS2V5LCB2YWx1ZSwgdGhlbWUsIGNvbmZpZykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gKDAsIF9icmVha3BvaW50cy5yZW1vdmVVbnVzZWRCcmVha3BvaW50cykoYnJlYWtwb2ludHNLZXlzLCBjc3MpO1xuICAgIH1cbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShzeCkgPyBzeC5tYXAodHJhdmVyc2UpIDogdHJhdmVyc2Uoc3gpO1xuICB9XG4gIHJldHVybiBzdHlsZUZ1bmN0aW9uU3g7XG59XG5jb25zdCBzdHlsZUZ1bmN0aW9uU3ggPSB1bnN0YWJsZV9jcmVhdGVTdHlsZUZ1bmN0aW9uU3goKTtcbnN0eWxlRnVuY3Rpb25TeC5maWx0ZXJQcm9wcyA9IFsnc3gnXTtcbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9IHN0eWxlRnVuY3Rpb25TeDsiLCAiZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkge1xuICBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTtcbiAgdmFyIHRhcmdldCA9IHt9O1xuICB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7XG4gIHZhciBrZXksIGk7XG4gIGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAga2V5ID0gc291cmNlS2V5c1tpXTtcbiAgICBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlO1xuICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gIH1cbiAgcmV0dXJuIHRhcmdldDtcbn1cbm1vZHVsZS5leHBvcnRzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IGV4dGVuZFN4UHJvcDtcbnZhciBfZXh0ZW5kczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2V4dGVuZHNcIikpO1xudmFyIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiKSk7XG52YXIgX2RlZXBtZXJnZSA9IHJlcXVpcmUoXCJAbXVpL3V0aWxzL2RlZXBtZXJnZVwiKTtcbnZhciBfZGVmYXVsdFN4Q29uZmlnID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9kZWZhdWx0U3hDb25maWdcIikpO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wic3hcIl07XG5jb25zdCBzcGxpdFByb3BzID0gcHJvcHMgPT4ge1xuICB2YXIgX3Byb3BzJHRoZW1lJHVuc3RhYmxlLCBfcHJvcHMkdGhlbWU7XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICBzeXN0ZW1Qcm9wczoge30sXG4gICAgb3RoZXJQcm9wczoge31cbiAgfTtcbiAgY29uc3QgY29uZmlnID0gKF9wcm9wcyR0aGVtZSR1bnN0YWJsZSA9IHByb3BzID09IG51bGwgfHwgKF9wcm9wcyR0aGVtZSA9IHByb3BzLnRoZW1lKSA9PSBudWxsID8gdm9pZCAwIDogX3Byb3BzJHRoZW1lLnVuc3RhYmxlX3N4Q29uZmlnKSAhPSBudWxsID8gX3Byb3BzJHRoZW1lJHVuc3RhYmxlIDogX2RlZmF1bHRTeENvbmZpZy5kZWZhdWx0O1xuICBPYmplY3Qua2V5cyhwcm9wcykuZm9yRWFjaChwcm9wID0+IHtcbiAgICBpZiAoY29uZmlnW3Byb3BdKSB7XG4gICAgICByZXN1bHQuc3lzdGVtUHJvcHNbcHJvcF0gPSBwcm9wc1twcm9wXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0Lm90aGVyUHJvcHNbcHJvcF0gPSBwcm9wc1twcm9wXTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbmZ1bmN0aW9uIGV4dGVuZFN4UHJvcChwcm9wcykge1xuICBjb25zdCB7XG4gICAgICBzeDogaW5TeFxuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9ICgwLCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZTIuZGVmYXVsdCkocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IHtcbiAgICBzeXN0ZW1Qcm9wcyxcbiAgICBvdGhlclByb3BzXG4gIH0gPSBzcGxpdFByb3BzKG90aGVyKTtcbiAgbGV0IGZpbmFsU3g7XG4gIGlmIChBcnJheS5pc0FycmF5KGluU3gpKSB7XG4gICAgZmluYWxTeCA9IFtzeXN0ZW1Qcm9wcywgLi4uaW5TeF07XG4gIH0gZWxzZSBpZiAodHlwZW9mIGluU3ggPT09ICdmdW5jdGlvbicpIHtcbiAgICBmaW5hbFN4ID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGluU3goLi4uYXJncyk7XG4gICAgICBpZiAoISgwLCBfZGVlcG1lcmdlLmlzUGxhaW5PYmplY3QpKHJlc3VsdCkpIHtcbiAgICAgICAgcmV0dXJuIHN5c3RlbVByb3BzO1xuICAgICAgfVxuICAgICAgcmV0dXJuICgwLCBfZXh0ZW5kczIuZGVmYXVsdCkoe30sIHN5c3RlbVByb3BzLCByZXN1bHQpO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgZmluYWxTeCA9ICgwLCBfZXh0ZW5kczIuZGVmYXVsdCkoe30sIHN5c3RlbVByb3BzLCBpblN4KTtcbiAgfVxuICByZXR1cm4gKDAsIF9leHRlbmRzMi5kZWZhdWx0KSh7fSwgb3RoZXJQcm9wcywge1xuICAgIHN4OiBmaW5hbFN4XG4gIH0pO1xufSIsICJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVmYXVsdFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfc3R5bGVGdW5jdGlvblN4LmRlZmF1bHQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZXh0ZW5kU3hQcm9wXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9leHRlbmRTeFByb3AuZGVmYXVsdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ1bnN0YWJsZV9jcmVhdGVTdHlsZUZ1bmN0aW9uU3hcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3N0eWxlRnVuY3Rpb25TeC51bnN0YWJsZV9jcmVhdGVTdHlsZUZ1bmN0aW9uU3g7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidW5zdGFibGVfZGVmYXVsdFN4Q29uZmlnXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9kZWZhdWx0U3hDb25maWcuZGVmYXVsdDtcbiAgfVxufSk7XG52YXIgX3N0eWxlRnVuY3Rpb25TeCA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKHJlcXVpcmUoXCIuL3N0eWxlRnVuY3Rpb25TeFwiKSk7XG52YXIgX2V4dGVuZFN4UHJvcCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vZXh0ZW5kU3hQcm9wXCIpKTtcbnZhciBfZGVmYXVsdFN4Q29uZmlnID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9kZWZhdWx0U3hDb25maWdcIikpO1xuZnVuY3Rpb24gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgV2Vha01hcCkgcmV0dXJuIG51bGw7IHZhciByID0gbmV3IFdlYWtNYXAoKSwgdCA9IG5ldyBXZWFrTWFwKCk7IHJldHVybiAoX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlID0gZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUgPyB0IDogcjsgfSkoZSk7IH1cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKGUsIHIpIHsgaWYgKCFyICYmIGUgJiYgZS5fX2VzTW9kdWxlKSByZXR1cm4gZTsgaWYgKG51bGwgPT09IGUgfHwgXCJvYmplY3RcIiAhPSB0eXBlb2YgZSAmJiBcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUpIHJldHVybiB7IGRlZmF1bHQ6IGUgfTsgdmFyIHQgPSBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUocik7IGlmICh0ICYmIHQuaGFzKGUpKSByZXR1cm4gdC5nZXQoZSk7IHZhciBuID0geyBfX3Byb3RvX186IG51bGwgfSwgYSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOyBmb3IgKHZhciB1IGluIGUpIGlmIChcImRlZmF1bHRcIiAhPT0gdSAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSwgdSkpIHsgdmFyIGkgPSBhID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCB1KSA6IG51bGw7IGkgJiYgKGkuZ2V0IHx8IGkuc2V0KSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCB1LCBpKSA6IG5bdV0gPSBlW3VdOyB9IHJldHVybiBuLmRlZmF1bHQgPSBlLCB0ICYmIHQuc2V0KGUsIG4pLCBuOyB9IiwgIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmJyZWFrcG9pbnRLZXlzID0gdm9pZCAwO1xuZXhwb3J0cy5kZWZhdWx0ID0gY3JlYXRlQnJlYWtwb2ludHM7XG52YXIgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCIpKTtcbnZhciBfZXh0ZW5kczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2V4dGVuZHNcIikpO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1widmFsdWVzXCIsIFwidW5pdFwiLCBcInN0ZXBcIl07XG4vLyBTb3J0ZWQgQVNDIGJ5IHNpemUuIFRoYXQncyBpbXBvcnRhbnQuXG4vLyBJdCBjYW4ndCBiZSBjb25maWd1cmVkIGFzIGl0J3MgdXNlZCBzdGF0aWNhbGx5IGZvciBwcm9wVHlwZXMuXG5jb25zdCBicmVha3BvaW50S2V5cyA9IGV4cG9ydHMuYnJlYWtwb2ludEtleXMgPSBbJ3hzJywgJ3NtJywgJ21kJywgJ2xnJywgJ3hsJ107XG5jb25zdCBzb3J0QnJlYWtwb2ludHNWYWx1ZXMgPSB2YWx1ZXMgPT4ge1xuICBjb25zdCBicmVha3BvaW50c0FzQXJyYXkgPSBPYmplY3Qua2V5cyh2YWx1ZXMpLm1hcChrZXkgPT4gKHtcbiAgICBrZXksXG4gICAgdmFsOiB2YWx1ZXNba2V5XVxuICB9KSkgfHwgW107XG4gIC8vIFNvcnQgaW4gYXNjZW5kaW5nIG9yZGVyXG4gIGJyZWFrcG9pbnRzQXNBcnJheS5zb3J0KChicmVha3BvaW50MSwgYnJlYWtwb2ludDIpID0+IGJyZWFrcG9pbnQxLnZhbCAtIGJyZWFrcG9pbnQyLnZhbCk7XG4gIHJldHVybiBicmVha3BvaW50c0FzQXJyYXkucmVkdWNlKChhY2MsIG9iaikgPT4ge1xuICAgIHJldHVybiAoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHt9LCBhY2MsIHtcbiAgICAgIFtvYmoua2V5XTogb2JqLnZhbFxuICAgIH0pO1xuICB9LCB7fSk7XG59O1xuXG4vLyBLZWVwIGluIG1pbmQgdGhhdCBAbWVkaWEgaXMgaW5jbHVzaXZlIGJ5IHRoZSBDU1Mgc3BlY2lmaWNhdGlvbi5cbmZ1bmN0aW9uIGNyZWF0ZUJyZWFrcG9pbnRzKGJyZWFrcG9pbnRzKSB7XG4gIGNvbnN0IHtcbiAgICAgIC8vIFRoZSBicmVha3BvaW50ICoqc3RhcnQqKiBhdCB0aGlzIHZhbHVlLlxuICAgICAgLy8gRm9yIGluc3RhbmNlIHdpdGggdGhlIGZpcnN0IGJyZWFrcG9pbnQgeHM6IFt4cywgc20pLlxuICAgICAgdmFsdWVzID0ge1xuICAgICAgICB4czogMCxcbiAgICAgICAgLy8gcGhvbmVcbiAgICAgICAgc206IDYwMCxcbiAgICAgICAgLy8gdGFibGV0XG4gICAgICAgIG1kOiA5MDAsXG4gICAgICAgIC8vIHNtYWxsIGxhcHRvcFxuICAgICAgICBsZzogMTIwMCxcbiAgICAgICAgLy8gZGVza3RvcFxuICAgICAgICB4bDogMTUzNiAvLyBsYXJnZSBzY3JlZW5cbiAgICAgIH0sXG4gICAgICB1bml0ID0gJ3B4JyxcbiAgICAgIHN0ZXAgPSA1XG4gICAgfSA9IGJyZWFrcG9pbnRzLFxuICAgIG90aGVyID0gKDAsIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlMi5kZWZhdWx0KShicmVha3BvaW50cywgX2V4Y2x1ZGVkKTtcbiAgY29uc3Qgc29ydGVkVmFsdWVzID0gc29ydEJyZWFrcG9pbnRzVmFsdWVzKHZhbHVlcyk7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhzb3J0ZWRWYWx1ZXMpO1xuICBmdW5jdGlvbiB1cChrZXkpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHR5cGVvZiB2YWx1ZXNba2V5XSA9PT0gJ251bWJlcicgPyB2YWx1ZXNba2V5XSA6IGtleTtcbiAgICByZXR1cm4gYEBtZWRpYSAobWluLXdpZHRoOiR7dmFsdWV9JHt1bml0fSlgO1xuICB9XG4gIGZ1bmN0aW9uIGRvd24oa2V5KSB7XG4gICAgY29uc3QgdmFsdWUgPSB0eXBlb2YgdmFsdWVzW2tleV0gPT09ICdudW1iZXInID8gdmFsdWVzW2tleV0gOiBrZXk7XG4gICAgcmV0dXJuIGBAbWVkaWEgKG1heC13aWR0aDoke3ZhbHVlIC0gc3RlcCAvIDEwMH0ke3VuaXR9KWA7XG4gIH1cbiAgZnVuY3Rpb24gYmV0d2VlbihzdGFydCwgZW5kKSB7XG4gICAgY29uc3QgZW5kSW5kZXggPSBrZXlzLmluZGV4T2YoZW5kKTtcbiAgICByZXR1cm4gYEBtZWRpYSAobWluLXdpZHRoOiR7dHlwZW9mIHZhbHVlc1tzdGFydF0gPT09ICdudW1iZXInID8gdmFsdWVzW3N0YXJ0XSA6IHN0YXJ0fSR7dW5pdH0pIGFuZCBgICsgYChtYXgtd2lkdGg6JHsoZW5kSW5kZXggIT09IC0xICYmIHR5cGVvZiB2YWx1ZXNba2V5c1tlbmRJbmRleF1dID09PSAnbnVtYmVyJyA/IHZhbHVlc1trZXlzW2VuZEluZGV4XV0gOiBlbmQpIC0gc3RlcCAvIDEwMH0ke3VuaXR9KWA7XG4gIH1cbiAgZnVuY3Rpb24gb25seShrZXkpIHtcbiAgICBpZiAoa2V5cy5pbmRleE9mKGtleSkgKyAxIDwga2V5cy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBiZXR3ZWVuKGtleSwga2V5c1trZXlzLmluZGV4T2Yoa2V5KSArIDFdKTtcbiAgICB9XG4gICAgcmV0dXJuIHVwKGtleSk7XG4gIH1cbiAgZnVuY3Rpb24gbm90KGtleSkge1xuICAgIC8vIGhhbmRsZSBmaXJzdCBhbmQgbGFzdCBrZXkgc2VwYXJhdGVseSwgZm9yIGJldHRlciByZWFkYWJpbGl0eVxuICAgIGNvbnN0IGtleUluZGV4ID0ga2V5cy5pbmRleE9mKGtleSk7XG4gICAgaWYgKGtleUluZGV4ID09PSAwKSB7XG4gICAgICByZXR1cm4gdXAoa2V5c1sxXSk7XG4gICAgfVxuICAgIGlmIChrZXlJbmRleCA9PT0ga2V5cy5sZW5ndGggLSAxKSB7XG4gICAgICByZXR1cm4gZG93bihrZXlzW2tleUluZGV4XSk7XG4gICAgfVxuICAgIHJldHVybiBiZXR3ZWVuKGtleSwga2V5c1trZXlzLmluZGV4T2Yoa2V5KSArIDFdKS5yZXBsYWNlKCdAbWVkaWEnLCAnQG1lZGlhIG5vdCBhbGwgYW5kJyk7XG4gIH1cbiAgcmV0dXJuICgwLCBfZXh0ZW5kczIuZGVmYXVsdCkoe1xuICAgIGtleXMsXG4gICAgdmFsdWVzOiBzb3J0ZWRWYWx1ZXMsXG4gICAgdXAsXG4gICAgZG93bixcbiAgICBiZXR3ZWVuLFxuICAgIG9ubHksXG4gICAgbm90LFxuICAgIHVuaXRcbiAgfSwgb3RoZXIpO1xufSIsICJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbmNvbnN0IHNoYXBlID0ge1xuICBib3JkZXJSYWRpdXM6IDRcbn07XG52YXIgX2RlZmF1bHQgPSBleHBvcnRzLmRlZmF1bHQgPSBzaGFwZTsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSBjcmVhdGVTcGFjaW5nO1xudmFyIF9zcGFjaW5nID0gcmVxdWlyZShcIi4uL3NwYWNpbmdcIik7XG4vLyBUaGUgZGlmZmVyZW50IHNpZ25hdHVyZXMgaW1wbHkgZGlmZmVyZW50IG1lYW5pbmcgZm9yIHRoZWlyIGFyZ3VtZW50cyB0aGF0IGNhbid0IGJlIGV4cHJlc3NlZCBzdHJ1Y3R1cmFsbHkuXG4vLyBXZSBleHByZXNzIHRoZSBkaWZmZXJlbmNlIHdpdGggdmFyaWFibGUgbmFtZXMuXG5cbmZ1bmN0aW9uIGNyZWF0ZVNwYWNpbmcoc3BhY2luZ0lucHV0ID0gOCkge1xuICAvLyBBbHJlYWR5IHRyYW5zZm9ybWVkLlxuICBpZiAoc3BhY2luZ0lucHV0Lm11aSkge1xuICAgIHJldHVybiBzcGFjaW5nSW5wdXQ7XG4gIH1cblxuICAvLyBNYXRlcmlhbCBEZXNpZ24gbGF5b3V0cyBhcmUgdmlzdWFsbHkgYmFsYW5jZWQuIE1vc3QgbWVhc3VyZW1lbnRzIGFsaWduIHRvIGFuIDhkcCBncmlkLCB3aGljaCBhbGlnbnMgYm90aCBzcGFjaW5nIGFuZCB0aGUgb3ZlcmFsbCBsYXlvdXQuXG4gIC8vIFNtYWxsZXIgY29tcG9uZW50cywgc3VjaCBhcyBpY29ucywgY2FuIGFsaWduIHRvIGEgNGRwIGdyaWQuXG4gIC8vIGh0dHBzOi8vbTIubWF0ZXJpYWwuaW8vZGVzaWduL2xheW91dC91bmRlcnN0YW5kaW5nLWxheW91dC5odG1sXG4gIGNvbnN0IHRyYW5zZm9ybSA9ICgwLCBfc3BhY2luZy5jcmVhdGVVbmFyeVNwYWNpbmcpKHtcbiAgICBzcGFjaW5nOiBzcGFjaW5nSW5wdXRcbiAgfSk7XG4gIGNvbnN0IHNwYWNpbmcgPSAoLi4uYXJnc0lucHV0KSA9PiB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmICghKGFyZ3NJbnB1dC5sZW5ndGggPD0gNCkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgTVVJOiBUb28gbWFueSBhcmd1bWVudHMgcHJvdmlkZWQsIGV4cGVjdGVkIGJldHdlZW4gMCBhbmQgNCwgZ290ICR7YXJnc0lucHV0Lmxlbmd0aH1gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgYXJncyA9IGFyZ3NJbnB1dC5sZW5ndGggPT09IDAgPyBbMV0gOiBhcmdzSW5wdXQ7XG4gICAgcmV0dXJuIGFyZ3MubWFwKGFyZ3VtZW50ID0+IHtcbiAgICAgIGNvbnN0IG91dHB1dCA9IHRyYW5zZm9ybShhcmd1bWVudCk7XG4gICAgICByZXR1cm4gdHlwZW9mIG91dHB1dCA9PT0gJ251bWJlcicgPyBgJHtvdXRwdXR9cHhgIDogb3V0cHV0O1xuICAgIH0pLmpvaW4oJyAnKTtcbiAgfTtcbiAgc3BhY2luZy5tdWkgPSB0cnVlO1xuICByZXR1cm4gc3BhY2luZztcbn0iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSBhcHBseVN0eWxlcztcbi8qKlxuICogQSB1bml2ZXJzYWwgdXRpbGl0eSB0byBzdHlsZSBjb21wb25lbnRzIHdpdGggbXVsdGlwbGUgY29sb3IgbW9kZXMuIEFsd2F5cyB1c2UgaXQgZnJvbSB0aGUgdGhlbWUgb2JqZWN0LlxuICogSXQgd29ya3Mgd2l0aDpcbiAqICAtIFtCYXNpYyB0aGVtZV0oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL2N1c3RvbWl6YXRpb24vZGFyay1tb2RlLylcbiAqICAtIFtDU1MgdGhlbWUgdmFyaWFibGVzXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvZXhwZXJpbWVudGFsLWFwaS9jc3MtdGhlbWUtdmFyaWFibGVzL292ZXJ2aWV3LylcbiAqICAtIFplcm8tcnVudGltZSBlbmdpbmVcbiAqXG4gKiBUaXBzOiBVc2UgYW4gYXJyYXkgb3ZlciBvYmplY3Qgc3ByZWFkIGFuZCBwbGFjZSBgdGhlbWUuYXBwbHlTdHlsZXMoKWAgbGFzdC5cbiAqXG4gKiBcdTI3MDUgW3sgYmFja2dyb3VuZDogJyNlNWU1ZTUnIH0sIHRoZW1lLmFwcGx5U3R5bGVzKCdkYXJrJywgeyBiYWNrZ3JvdW5kOiAnIzFjMWMxYycgfSldXG4gKlxuICogXHVEODNEXHVERUFCIHsgYmFja2dyb3VuZDogJyNlNWU1ZTUnLCAuLi50aGVtZS5hcHBseVN0eWxlcygnZGFyaycsIHsgYmFja2dyb3VuZDogJyMxYzFjMWMnIH0pfVxuICpcbiAqIEBleGFtcGxlXG4gKiAxLiB1c2luZyB3aXRoIGBzdHlsZWRgOlxuICogYGBganN4XG4gKiAgIGNvbnN0IENvbXBvbmVudCA9IHN0eWxlZCgnZGl2JykoKHsgdGhlbWUgfSkgPT4gW1xuICogICAgIHsgYmFja2dyb3VuZDogJyNlNWU1ZTUnIH0sXG4gKiAgICAgdGhlbWUuYXBwbHlTdHlsZXMoJ2RhcmsnLCB7XG4gKiAgICAgICBiYWNrZ3JvdW5kOiAnIzFjMWMxYycsXG4gKiAgICAgICBjb2xvcjogJyNmZmYnLFxuICogICAgIH0pLFxuICogICBdKTtcbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKiAyLiB1c2luZyB3aXRoIGBzeGAgcHJvcDpcbiAqIGBgYGpzeFxuICogICA8Qm94IHN4PXt0aGVtZSA9PiBbXG4gKiAgICAgeyBiYWNrZ3JvdW5kOiAnI2U1ZTVlNScgfSxcbiAqICAgICB0aGVtZS5hcHBseVN0eWxlcygnZGFyaycsIHtcbiAqICAgICAgICBiYWNrZ3JvdW5kOiAnIzFjMWMxYycsXG4gKiAgICAgICAgY29sb3I6ICcjZmZmJyxcbiAqICAgICAgfSksXG4gKiAgICAgXX1cbiAqICAgLz5cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKiAzLiB0aGVtaW5nIGEgY29tcG9uZW50OlxuICogYGBganN4XG4gKiAgIGV4dGVuZFRoZW1lKHtcbiAqICAgICBjb21wb25lbnRzOiB7XG4gKiAgICAgICBNdWlCdXR0b246IHtcbiAqICAgICAgICAgc3R5bGVPdmVycmlkZXM6IHtcbiAqICAgICAgICAgICByb290OiAoeyB0aGVtZSB9KSA9PiBbXG4gKiAgICAgICAgICAgICB7IGJhY2tncm91bmQ6ICcjZTVlNWU1JyB9LFxuICogICAgICAgICAgICAgdGhlbWUuYXBwbHlTdHlsZXMoJ2RhcmsnLCB7XG4gKiAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICcjMWMxYzFjJyxcbiAqICAgICAgICAgICAgICAgY29sb3I6ICcjZmZmJyxcbiAqICAgICAgICAgICAgIH0pLFxuICogICAgICAgICAgIF0sXG4gKiAgICAgICAgIH0sXG4gKiAgICAgICB9XG4gKiAgICAgfVxuICogICB9KVxuICpgYGBcbiAqL1xuZnVuY3Rpb24gYXBwbHlTdHlsZXMoa2V5LCBzdHlsZXMpIHtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciB0aGlzIGlzICdhbnknIHR5cGVcbiAgY29uc3QgdGhlbWUgPSB0aGlzO1xuICBpZiAodGhlbWUudmFycyAmJiB0eXBlb2YgdGhlbWUuZ2V0Q29sb3JTY2hlbWVTZWxlY3RvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIElmIENzc1ZhcnNQcm92aWRlciBpcyB1c2VkIGFzIGEgcHJvdmlkZXIsXG4gICAgLy8gcmV0dXJucyAnKiA6d2hlcmUoW2RhdGEtbXVpLWNvbG9yLXNjaGVtZT1cImxpZ2h0fGRhcmtcIl0pICYnXG4gICAgY29uc3Qgc2VsZWN0b3IgPSB0aGVtZS5nZXRDb2xvclNjaGVtZVNlbGVjdG9yKGtleSkucmVwbGFjZSgvKFxcW1teXFxdXStcXF0pLywgJyo6d2hlcmUoJDEpJyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIFtzZWxlY3Rvcl06IHN0eWxlc1xuICAgIH07XG4gIH1cbiAgaWYgKHRoZW1lLnBhbGV0dGUubW9kZSA9PT0ga2V5KSB7XG4gICAgcmV0dXJuIHN0eWxlcztcbiAgfVxuICByZXR1cm4ge307XG59IiwgIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG52YXIgX2V4dGVuZHMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9leHRlbmRzXCIpKTtcbnZhciBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIikpO1xudmFyIF9kZWVwbWVyZ2UgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJAbXVpL3V0aWxzL2RlZXBtZXJnZVwiKSk7XG52YXIgX2NyZWF0ZUJyZWFrcG9pbnRzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9jcmVhdGVCcmVha3BvaW50c1wiKSk7XG52YXIgX3NoYXBlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9zaGFwZVwiKSk7XG52YXIgX2NyZWF0ZVNwYWNpbmcgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2NyZWF0ZVNwYWNpbmdcIikpO1xudmFyIF9zdHlsZUZ1bmN0aW9uU3ggPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuLi9zdHlsZUZ1bmN0aW9uU3gvc3R5bGVGdW5jdGlvblN4XCIpKTtcbnZhciBfZGVmYXVsdFN4Q29uZmlnID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi4vc3R5bGVGdW5jdGlvblN4L2RlZmF1bHRTeENvbmZpZ1wiKSk7XG52YXIgX2FwcGx5U3R5bGVzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9hcHBseVN0eWxlc1wiKSk7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJicmVha3BvaW50c1wiLCBcInBhbGV0dGVcIiwgXCJzcGFjaW5nXCIsIFwic2hhcGVcIl07XG5mdW5jdGlvbiBjcmVhdGVUaGVtZShvcHRpb25zID0ge30sIC4uLmFyZ3MpIHtcbiAgY29uc3Qge1xuICAgICAgYnJlYWtwb2ludHM6IGJyZWFrcG9pbnRzSW5wdXQgPSB7fSxcbiAgICAgIHBhbGV0dGU6IHBhbGV0dGVJbnB1dCA9IHt9LFxuICAgICAgc3BhY2luZzogc3BhY2luZ0lucHV0LFxuICAgICAgc2hhcGU6IHNoYXBlSW5wdXQgPSB7fVxuICAgIH0gPSBvcHRpb25zLFxuICAgIG90aGVyID0gKDAsIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlMi5kZWZhdWx0KShvcHRpb25zLCBfZXhjbHVkZWQpO1xuICBjb25zdCBicmVha3BvaW50cyA9ICgwLCBfY3JlYXRlQnJlYWtwb2ludHMuZGVmYXVsdCkoYnJlYWtwb2ludHNJbnB1dCk7XG4gIGNvbnN0IHNwYWNpbmcgPSAoMCwgX2NyZWF0ZVNwYWNpbmcuZGVmYXVsdCkoc3BhY2luZ0lucHV0KTtcbiAgbGV0IG11aVRoZW1lID0gKDAsIF9kZWVwbWVyZ2UuZGVmYXVsdCkoe1xuICAgIGJyZWFrcG9pbnRzLFxuICAgIGRpcmVjdGlvbjogJ2x0cicsXG4gICAgY29tcG9uZW50czoge30sXG4gICAgLy8gSW5qZWN0IGNvbXBvbmVudCBkZWZpbml0aW9ucy5cbiAgICBwYWxldHRlOiAoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHtcbiAgICAgIG1vZGU6ICdsaWdodCdcbiAgICB9LCBwYWxldHRlSW5wdXQpLFxuICAgIHNwYWNpbmcsXG4gICAgc2hhcGU6ICgwLCBfZXh0ZW5kczIuZGVmYXVsdCkoe30sIF9zaGFwZS5kZWZhdWx0LCBzaGFwZUlucHV0KVxuICB9LCBvdGhlcik7XG4gIG11aVRoZW1lLmFwcGx5U3R5bGVzID0gX2FwcGx5U3R5bGVzLmRlZmF1bHQ7XG4gIG11aVRoZW1lID0gYXJncy5yZWR1Y2UoKGFjYywgYXJndW1lbnQpID0+ICgwLCBfZGVlcG1lcmdlLmRlZmF1bHQpKGFjYywgYXJndW1lbnQpLCBtdWlUaGVtZSk7XG4gIG11aVRoZW1lLnVuc3RhYmxlX3N4Q29uZmlnID0gKDAsIF9leHRlbmRzMi5kZWZhdWx0KSh7fSwgX2RlZmF1bHRTeENvbmZpZy5kZWZhdWx0LCBvdGhlciA9PSBudWxsID8gdm9pZCAwIDogb3RoZXIudW5zdGFibGVfc3hDb25maWcpO1xuICBtdWlUaGVtZS51bnN0YWJsZV9zeCA9IGZ1bmN0aW9uIHN4KHByb3BzKSB7XG4gICAgcmV0dXJuICgwLCBfc3R5bGVGdW5jdGlvblN4LmRlZmF1bHQpKHtcbiAgICAgIHN4OiBwcm9wcyxcbiAgICAgIHRoZW1lOiB0aGlzXG4gICAgfSk7XG4gIH07XG4gIHJldHVybiBtdWlUaGVtZTtcbn1cbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9IGNyZWF0ZVRoZW1lOyIsICJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVmYXVsdFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfY3JlYXRlVGhlbWUuZGVmYXVsdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwcml2YXRlX2NyZWF0ZUJyZWFrcG9pbnRzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9jcmVhdGVCcmVha3BvaW50cy5kZWZhdWx0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInVuc3RhYmxlX2FwcGx5U3R5bGVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9hcHBseVN0eWxlcy5kZWZhdWx0O1xuICB9XG59KTtcbnZhciBfY3JlYXRlVGhlbWUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2NyZWF0ZVRoZW1lXCIpKTtcbnZhciBfY3JlYXRlQnJlYWtwb2ludHMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2NyZWF0ZUJyZWFrcG9pbnRzXCIpKTtcbnZhciBfYXBwbHlTdHlsZXMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2FwcGx5U3R5bGVzXCIpKTsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYWxwaGEgPSBhbHBoYTtcbmV4cG9ydHMuYmxlbmQgPSBibGVuZDtcbmV4cG9ydHMuY29sb3JDaGFubmVsID0gdm9pZCAwO1xuZXhwb3J0cy5kYXJrZW4gPSBkYXJrZW47XG5leHBvcnRzLmRlY29tcG9zZUNvbG9yID0gZGVjb21wb3NlQ29sb3I7XG5leHBvcnRzLmVtcGhhc2l6ZSA9IGVtcGhhc2l6ZTtcbmV4cG9ydHMuZ2V0Q29udHJhc3RSYXRpbyA9IGdldENvbnRyYXN0UmF0aW87XG5leHBvcnRzLmdldEx1bWluYW5jZSA9IGdldEx1bWluYW5jZTtcbmV4cG9ydHMuaGV4VG9SZ2IgPSBoZXhUb1JnYjtcbmV4cG9ydHMuaHNsVG9SZ2IgPSBoc2xUb1JnYjtcbmV4cG9ydHMubGlnaHRlbiA9IGxpZ2h0ZW47XG5leHBvcnRzLnByaXZhdGVfc2FmZUFscGhhID0gcHJpdmF0ZV9zYWZlQWxwaGE7XG5leHBvcnRzLnByaXZhdGVfc2FmZUNvbG9yQ2hhbm5lbCA9IHZvaWQgMDtcbmV4cG9ydHMucHJpdmF0ZV9zYWZlRGFya2VuID0gcHJpdmF0ZV9zYWZlRGFya2VuO1xuZXhwb3J0cy5wcml2YXRlX3NhZmVFbXBoYXNpemUgPSBwcml2YXRlX3NhZmVFbXBoYXNpemU7XG5leHBvcnRzLnByaXZhdGVfc2FmZUxpZ2h0ZW4gPSBwcml2YXRlX3NhZmVMaWdodGVuO1xuZXhwb3J0cy5yZWNvbXBvc2VDb2xvciA9IHJlY29tcG9zZUNvbG9yO1xuZXhwb3J0cy5yZ2JUb0hleCA9IHJnYlRvSGV4O1xudmFyIF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiQG11aS91dGlscy9mb3JtYXRNdWlFcnJvck1lc3NhZ2VcIikpO1xudmFyIF9jbGFtcCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIkBtdWkvdXRpbHMvY2xhbXBcIikpO1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uICovXG5cbi8qKlxuICogUmV0dXJucyBhIG51bWJlciB3aG9zZSB2YWx1ZSBpcyBsaW1pdGVkIHRvIHRoZSBnaXZlbiByYW5nZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYmUgY2xhbXBlZFxuICogQHBhcmFtIHtudW1iZXJ9IG1pbiBUaGUgbG93ZXIgYm91bmRhcnkgb2YgdGhlIG91dHB1dCByYW5nZVxuICogQHBhcmFtIHtudW1iZXJ9IG1heCBUaGUgdXBwZXIgYm91bmRhcnkgb2YgdGhlIG91dHB1dCByYW5nZVxuICogQHJldHVybnMge251bWJlcn0gQSBudW1iZXIgaW4gdGhlIHJhbmdlIFttaW4sIG1heF1cbiAqL1xuZnVuY3Rpb24gY2xhbXBXcmFwcGVyKHZhbHVlLCBtaW4gPSAwLCBtYXggPSAxKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKHZhbHVlIDwgbWluIHx8IHZhbHVlID4gbWF4KSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBNVUk6IFRoZSB2YWx1ZSBwcm92aWRlZCAke3ZhbHVlfSBpcyBvdXQgb2YgcmFuZ2UgWyR7bWlufSwgJHttYXh9XS5gKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuICgwLCBfY2xhbXAuZGVmYXVsdCkodmFsdWUsIG1pbiwgbWF4KTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIGNvbG9yIGZyb20gQ1NTIGhleCBmb3JtYXQgdG8gQ1NTIHJnYiBmb3JtYXQuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3IgLSBIZXggY29sb3IsIGkuZS4gI25ubiBvciAjbm5ubm5uXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBIENTUyByZ2IgY29sb3Igc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGhleFRvUmdiKGNvbG9yKSB7XG4gIGNvbG9yID0gY29sb3Iuc2xpY2UoMSk7XG4gIGNvbnN0IHJlID0gbmV3IFJlZ0V4cChgLnsxLCR7Y29sb3IubGVuZ3RoID49IDYgPyAyIDogMX19YCwgJ2cnKTtcbiAgbGV0IGNvbG9ycyA9IGNvbG9yLm1hdGNoKHJlKTtcbiAgaWYgKGNvbG9ycyAmJiBjb2xvcnNbMF0ubGVuZ3RoID09PSAxKSB7XG4gICAgY29sb3JzID0gY29sb3JzLm1hcChuID0+IG4gKyBuKTtcbiAgfVxuICByZXR1cm4gY29sb3JzID8gYHJnYiR7Y29sb3JzLmxlbmd0aCA9PT0gNCA/ICdhJyA6ICcnfSgke2NvbG9ycy5tYXAoKG4sIGluZGV4KSA9PiB7XG4gICAgcmV0dXJuIGluZGV4IDwgMyA/IHBhcnNlSW50KG4sIDE2KSA6IE1hdGgucm91bmQocGFyc2VJbnQobiwgMTYpIC8gMjU1ICogMTAwMCkgLyAxMDAwO1xuICB9KS5qb2luKCcsICcpfSlgIDogJyc7XG59XG5mdW5jdGlvbiBpbnRUb0hleChpbnQpIHtcbiAgY29uc3QgaGV4ID0gaW50LnRvU3RyaW5nKDE2KTtcbiAgcmV0dXJuIGhleC5sZW5ndGggPT09IDEgPyBgMCR7aGV4fWAgOiBoZXg7XG59XG5cbi8qKlxuICogUmV0dXJucyBhbiBvYmplY3Qgd2l0aCB0aGUgdHlwZSBhbmQgdmFsdWVzIG9mIGEgY29sb3IuXG4gKlxuICogTm90ZTogRG9lcyBub3Qgc3VwcG9ydCByZ2IgJSB2YWx1ZXMuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3IgLSBDU1MgY29sb3IsIGkuZS4gb25lIG9mOiAjbm5uLCAjbm5ubm5uLCByZ2IoKSwgcmdiYSgpLCBoc2woKSwgaHNsYSgpLCBjb2xvcigpXG4gKiBAcmV0dXJucyB7b2JqZWN0fSAtIEEgTVVJIGNvbG9yIG9iamVjdDoge3R5cGU6IHN0cmluZywgdmFsdWVzOiBudW1iZXJbXX1cbiAqL1xuZnVuY3Rpb24gZGVjb21wb3NlQ29sb3IoY29sb3IpIHtcbiAgLy8gSWRlbXBvdGVudFxuICBpZiAoY29sb3IudHlwZSkge1xuICAgIHJldHVybiBjb2xvcjtcbiAgfVxuICBpZiAoY29sb3IuY2hhckF0KDApID09PSAnIycpIHtcbiAgICByZXR1cm4gZGVjb21wb3NlQ29sb3IoaGV4VG9SZ2IoY29sb3IpKTtcbiAgfVxuICBjb25zdCBtYXJrZXIgPSBjb2xvci5pbmRleE9mKCcoJyk7XG4gIGNvbnN0IHR5cGUgPSBjb2xvci5zdWJzdHJpbmcoMCwgbWFya2VyKTtcbiAgaWYgKFsncmdiJywgJ3JnYmEnLCAnaHNsJywgJ2hzbGEnLCAnY29sb3InXS5pbmRleE9mKHR5cGUpID09PSAtMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBgTVVJOiBVbnN1cHBvcnRlZCBcXGAke2NvbG9yfVxcYCBjb2xvci5cblRoZSBmb2xsb3dpbmcgZm9ybWF0cyBhcmUgc3VwcG9ydGVkOiAjbm5uLCAjbm5ubm5uLCByZ2IoKSwgcmdiYSgpLCBoc2woKSwgaHNsYSgpLCBjb2xvcigpLmAgOiAoMCwgX2Zvcm1hdE11aUVycm9yTWVzc2FnZTIuZGVmYXVsdCkoOSwgY29sb3IpKTtcbiAgfVxuICBsZXQgdmFsdWVzID0gY29sb3Iuc3Vic3RyaW5nKG1hcmtlciArIDEsIGNvbG9yLmxlbmd0aCAtIDEpO1xuICBsZXQgY29sb3JTcGFjZTtcbiAgaWYgKHR5cGUgPT09ICdjb2xvcicpIHtcbiAgICB2YWx1ZXMgPSB2YWx1ZXMuc3BsaXQoJyAnKTtcbiAgICBjb2xvclNwYWNlID0gdmFsdWVzLnNoaWZ0KCk7XG4gICAgaWYgKHZhbHVlcy5sZW5ndGggPT09IDQgJiYgdmFsdWVzWzNdLmNoYXJBdCgwKSA9PT0gJy8nKSB7XG4gICAgICB2YWx1ZXNbM10gPSB2YWx1ZXNbM10uc2xpY2UoMSk7XG4gICAgfVxuICAgIGlmIChbJ3NyZ2InLCAnZGlzcGxheS1wMycsICdhOTgtcmdiJywgJ3Byb3Bob3RvLXJnYicsICdyZWMtMjAyMCddLmluZGV4T2YoY29sb3JTcGFjZSkgPT09IC0xKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gYE1VSTogdW5zdXBwb3J0ZWQgXFxgJHtjb2xvclNwYWNlfVxcYCBjb2xvciBzcGFjZS5cblRoZSBmb2xsb3dpbmcgY29sb3Igc3BhY2VzIGFyZSBzdXBwb3J0ZWQ6IHNyZ2IsIGRpc3BsYXktcDMsIGE5OC1yZ2IsIHByb3Bob3RvLXJnYiwgcmVjLTIwMjAuYCA6ICgwLCBfZm9ybWF0TXVpRXJyb3JNZXNzYWdlMi5kZWZhdWx0KSgxMCwgY29sb3JTcGFjZSkpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YWx1ZXMgPSB2YWx1ZXMuc3BsaXQoJywnKTtcbiAgfVxuICB2YWx1ZXMgPSB2YWx1ZXMubWFwKHZhbHVlID0+IHBhcnNlRmxvYXQodmFsdWUpKTtcbiAgcmV0dXJuIHtcbiAgICB0eXBlLFxuICAgIHZhbHVlcyxcbiAgICBjb2xvclNwYWNlXG4gIH07XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGNoYW5uZWwgY3JlYXRlZCBmcm9tIHRoZSBpbnB1dCBjb2xvci5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3IgLSBDU1MgY29sb3IsIGkuZS4gb25lIG9mOiAjbm5uLCAjbm5ubm5uLCByZ2IoKSwgcmdiYSgpLCBoc2woKSwgaHNsYSgpLCBjb2xvcigpXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIFRoZSBjaGFubmVsIGZvciB0aGUgY29sb3IsIHRoYXQgY2FuIGJlIHVzZWQgaW4gcmdiYSBvciBoc2xhIGNvbG9yc1xuICovXG5jb25zdCBjb2xvckNoYW5uZWwgPSBjb2xvciA9PiB7XG4gIGNvbnN0IGRlY29tcG9zZWRDb2xvciA9IGRlY29tcG9zZUNvbG9yKGNvbG9yKTtcbiAgcmV0dXJuIGRlY29tcG9zZWRDb2xvci52YWx1ZXMuc2xpY2UoMCwgMykubWFwKCh2YWwsIGlkeCkgPT4gZGVjb21wb3NlZENvbG9yLnR5cGUuaW5kZXhPZignaHNsJykgIT09IC0xICYmIGlkeCAhPT0gMCA/IGAke3ZhbH0lYCA6IHZhbCkuam9pbignICcpO1xufTtcbmV4cG9ydHMuY29sb3JDaGFubmVsID0gY29sb3JDaGFubmVsO1xuY29uc3QgcHJpdmF0ZV9zYWZlQ29sb3JDaGFubmVsID0gKGNvbG9yLCB3YXJuaW5nKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGNvbG9yQ2hhbm5lbChjb2xvcik7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKHdhcm5pbmcgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgY29uc29sZS53YXJuKHdhcm5pbmcpO1xuICAgIH1cbiAgICByZXR1cm4gY29sb3I7XG4gIH1cbn07XG5cbi8qKlxuICogQ29udmVydHMgYSBjb2xvciBvYmplY3Qgd2l0aCB0eXBlIGFuZCB2YWx1ZXMgdG8gYSBzdHJpbmcuXG4gKiBAcGFyYW0ge29iamVjdH0gY29sb3IgLSBEZWNvbXBvc2VkIGNvbG9yXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3IudHlwZSAtIE9uZSBvZjogJ3JnYicsICdyZ2JhJywgJ2hzbCcsICdoc2xhJywgJ2NvbG9yJ1xuICogQHBhcmFtIHthcnJheX0gY29sb3IudmFsdWVzIC0gW24sbixuXSBvciBbbixuLG4sbl1cbiAqIEByZXR1cm5zIHtzdHJpbmd9IEEgQ1NTIGNvbG9yIHN0cmluZ1xuICovXG5leHBvcnRzLnByaXZhdGVfc2FmZUNvbG9yQ2hhbm5lbCA9IHByaXZhdGVfc2FmZUNvbG9yQ2hhbm5lbDtcbmZ1bmN0aW9uIHJlY29tcG9zZUNvbG9yKGNvbG9yKSB7XG4gIGNvbnN0IHtcbiAgICB0eXBlLFxuICAgIGNvbG9yU3BhY2VcbiAgfSA9IGNvbG9yO1xuICBsZXQge1xuICAgIHZhbHVlc1xuICB9ID0gY29sb3I7XG4gIGlmICh0eXBlLmluZGV4T2YoJ3JnYicpICE9PSAtMSkge1xuICAgIC8vIE9ubHkgY29udmVydCB0aGUgZmlyc3QgMyB2YWx1ZXMgdG8gaW50IChpLmUuIG5vdCBhbHBoYSlcbiAgICB2YWx1ZXMgPSB2YWx1ZXMubWFwKChuLCBpKSA9PiBpIDwgMyA/IHBhcnNlSW50KG4sIDEwKSA6IG4pO1xuICB9IGVsc2UgaWYgKHR5cGUuaW5kZXhPZignaHNsJykgIT09IC0xKSB7XG4gICAgdmFsdWVzWzFdID0gYCR7dmFsdWVzWzFdfSVgO1xuICAgIHZhbHVlc1syXSA9IGAke3ZhbHVlc1syXX0lYDtcbiAgfVxuICBpZiAodHlwZS5pbmRleE9mKCdjb2xvcicpICE9PSAtMSkge1xuICAgIHZhbHVlcyA9IGAke2NvbG9yU3BhY2V9ICR7dmFsdWVzLmpvaW4oJyAnKX1gO1xuICB9IGVsc2Uge1xuICAgIHZhbHVlcyA9IGAke3ZhbHVlcy5qb2luKCcsICcpfWA7XG4gIH1cbiAgcmV0dXJuIGAke3R5cGV9KCR7dmFsdWVzfSlgO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgY29sb3IgZnJvbSBDU1MgcmdiIGZvcm1hdCB0byBDU1MgaGV4IGZvcm1hdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvciAtIFJHQiBjb2xvciwgaS5lLiByZ2IobiwgbiwgbilcbiAqIEByZXR1cm5zIHtzdHJpbmd9IEEgQ1NTIHJnYiBjb2xvciBzdHJpbmcsIGkuZS4gI25ubm5ublxuICovXG5mdW5jdGlvbiByZ2JUb0hleChjb2xvcikge1xuICAvLyBJZGVtcG90ZW50XG4gIGlmIChjb2xvci5pbmRleE9mKCcjJykgPT09IDApIHtcbiAgICByZXR1cm4gY29sb3I7XG4gIH1cbiAgY29uc3Qge1xuICAgIHZhbHVlc1xuICB9ID0gZGVjb21wb3NlQ29sb3IoY29sb3IpO1xuICByZXR1cm4gYCMke3ZhbHVlcy5tYXAoKG4sIGkpID0+IGludFRvSGV4KGkgPT09IDMgPyBNYXRoLnJvdW5kKDI1NSAqIG4pIDogbikpLmpvaW4oJycpfWA7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBjb2xvciBmcm9tIGhzbCBmb3JtYXQgdG8gcmdiIGZvcm1hdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvciAtIEhTTCBjb2xvciB2YWx1ZXNcbiAqIEByZXR1cm5zIHtzdHJpbmd9IHJnYiBjb2xvciB2YWx1ZXNcbiAqL1xuZnVuY3Rpb24gaHNsVG9SZ2IoY29sb3IpIHtcbiAgY29sb3IgPSBkZWNvbXBvc2VDb2xvcihjb2xvcik7XG4gIGNvbnN0IHtcbiAgICB2YWx1ZXNcbiAgfSA9IGNvbG9yO1xuICBjb25zdCBoID0gdmFsdWVzWzBdO1xuICBjb25zdCBzID0gdmFsdWVzWzFdIC8gMTAwO1xuICBjb25zdCBsID0gdmFsdWVzWzJdIC8gMTAwO1xuICBjb25zdCBhID0gcyAqIE1hdGgubWluKGwsIDEgLSBsKTtcbiAgY29uc3QgZiA9IChuLCBrID0gKG4gKyBoIC8gMzApICUgMTIpID0+IGwgLSBhICogTWF0aC5tYXgoTWF0aC5taW4oayAtIDMsIDkgLSBrLCAxKSwgLTEpO1xuICBsZXQgdHlwZSA9ICdyZ2InO1xuICBjb25zdCByZ2IgPSBbTWF0aC5yb3VuZChmKDApICogMjU1KSwgTWF0aC5yb3VuZChmKDgpICogMjU1KSwgTWF0aC5yb3VuZChmKDQpICogMjU1KV07XG4gIGlmIChjb2xvci50eXBlID09PSAnaHNsYScpIHtcbiAgICB0eXBlICs9ICdhJztcbiAgICByZ2IucHVzaCh2YWx1ZXNbM10pO1xuICB9XG4gIHJldHVybiByZWNvbXBvc2VDb2xvcih7XG4gICAgdHlwZSxcbiAgICB2YWx1ZXM6IHJnYlxuICB9KTtcbn1cbi8qKlxuICogVGhlIHJlbGF0aXZlIGJyaWdodG5lc3Mgb2YgYW55IHBvaW50IGluIGEgY29sb3Igc3BhY2UsXG4gKiBub3JtYWxpemVkIHRvIDAgZm9yIGRhcmtlc3QgYmxhY2sgYW5kIDEgZm9yIGxpZ2h0ZXN0IHdoaXRlLlxuICpcbiAqIEZvcm11bGE6IGh0dHBzOi8vd3d3LnczLm9yZy9UUi9XQ0FHMjAtVEVDSFMvRzE3Lmh0bWwjRzE3LXRlc3RzXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3IgLSBDU1MgY29sb3IsIGkuZS4gb25lIG9mOiAjbm5uLCAjbm5ubm5uLCByZ2IoKSwgcmdiYSgpLCBoc2woKSwgaHNsYSgpLCBjb2xvcigpXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgcmVsYXRpdmUgYnJpZ2h0bmVzcyBvZiB0aGUgY29sb3IgaW4gdGhlIHJhbmdlIDAgLSAxXG4gKi9cbmZ1bmN0aW9uIGdldEx1bWluYW5jZShjb2xvcikge1xuICBjb2xvciA9IGRlY29tcG9zZUNvbG9yKGNvbG9yKTtcbiAgbGV0IHJnYiA9IGNvbG9yLnR5cGUgPT09ICdoc2wnIHx8IGNvbG9yLnR5cGUgPT09ICdoc2xhJyA/IGRlY29tcG9zZUNvbG9yKGhzbFRvUmdiKGNvbG9yKSkudmFsdWVzIDogY29sb3IudmFsdWVzO1xuICByZ2IgPSByZ2IubWFwKHZhbCA9PiB7XG4gICAgaWYgKGNvbG9yLnR5cGUgIT09ICdjb2xvcicpIHtcbiAgICAgIHZhbCAvPSAyNTU7IC8vIG5vcm1hbGl6ZWRcbiAgICB9XG4gICAgcmV0dXJuIHZhbCA8PSAwLjAzOTI4ID8gdmFsIC8gMTIuOTIgOiAoKHZhbCArIDAuMDU1KSAvIDEuMDU1KSAqKiAyLjQ7XG4gIH0pO1xuXG4gIC8vIFRydW5jYXRlIGF0IDMgZGlnaXRzXG4gIHJldHVybiBOdW1iZXIoKDAuMjEyNiAqIHJnYlswXSArIDAuNzE1MiAqIHJnYlsxXSArIDAuMDcyMiAqIHJnYlsyXSkudG9GaXhlZCgzKSk7XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgY29udHJhc3QgcmF0aW8gYmV0d2VlbiB0d28gY29sb3JzLlxuICpcbiAqIEZvcm11bGE6IGh0dHBzOi8vd3d3LnczLm9yZy9UUi9XQ0FHMjAtVEVDSFMvRzE3Lmh0bWwjRzE3LXRlc3RzXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9yZWdyb3VuZCAtIENTUyBjb2xvciwgaS5lLiBvbmUgb2Y6ICNubm4sICNubm5ubm4sIHJnYigpLCByZ2JhKCksIGhzbCgpLCBoc2xhKClcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYWNrZ3JvdW5kIC0gQ1NTIGNvbG9yLCBpLmUuIG9uZSBvZjogI25ubiwgI25ubm5ubiwgcmdiKCksIHJnYmEoKSwgaHNsKCksIGhzbGEoKVxuICogQHJldHVybnMge251bWJlcn0gQSBjb250cmFzdCByYXRpbyB2YWx1ZSBpbiB0aGUgcmFuZ2UgMCAtIDIxLlxuICovXG5mdW5jdGlvbiBnZXRDb250cmFzdFJhdGlvKGZvcmVncm91bmQsIGJhY2tncm91bmQpIHtcbiAgY29uc3QgbHVtQSA9IGdldEx1bWluYW5jZShmb3JlZ3JvdW5kKTtcbiAgY29uc3QgbHVtQiA9IGdldEx1bWluYW5jZShiYWNrZ3JvdW5kKTtcbiAgcmV0dXJuIChNYXRoLm1heChsdW1BLCBsdW1CKSArIDAuMDUpIC8gKE1hdGgubWluKGx1bUEsIGx1bUIpICsgMC4wNSk7XG59XG5cbi8qKlxuICogU2V0cyB0aGUgYWJzb2x1dGUgdHJhbnNwYXJlbmN5IG9mIGEgY29sb3IuXG4gKiBBbnkgZXhpc3RpbmcgYWxwaGEgdmFsdWVzIGFyZSBvdmVyd3JpdHRlbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvciAtIENTUyBjb2xvciwgaS5lLiBvbmUgb2Y6ICNubm4sICNubm5ubm4sIHJnYigpLCByZ2JhKCksIGhzbCgpLCBoc2xhKCksIGNvbG9yKClcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIHZhbHVlIHRvIHNldCB0aGUgYWxwaGEgY2hhbm5lbCB0byBpbiB0aGUgcmFuZ2UgMCAtIDFcbiAqIEByZXR1cm5zIHtzdHJpbmd9IEEgQ1NTIGNvbG9yIHN0cmluZy4gSGV4IGlucHV0IHZhbHVlcyBhcmUgcmV0dXJuZWQgYXMgcmdiXG4gKi9cbmZ1bmN0aW9uIGFscGhhKGNvbG9yLCB2YWx1ZSkge1xuICBjb2xvciA9IGRlY29tcG9zZUNvbG9yKGNvbG9yKTtcbiAgdmFsdWUgPSBjbGFtcFdyYXBwZXIodmFsdWUpO1xuICBpZiAoY29sb3IudHlwZSA9PT0gJ3JnYicgfHwgY29sb3IudHlwZSA9PT0gJ2hzbCcpIHtcbiAgICBjb2xvci50eXBlICs9ICdhJztcbiAgfVxuICBpZiAoY29sb3IudHlwZSA9PT0gJ2NvbG9yJykge1xuICAgIGNvbG9yLnZhbHVlc1szXSA9IGAvJHt2YWx1ZX1gO1xuICB9IGVsc2Uge1xuICAgIGNvbG9yLnZhbHVlc1szXSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiByZWNvbXBvc2VDb2xvcihjb2xvcik7XG59XG5mdW5jdGlvbiBwcml2YXRlX3NhZmVBbHBoYShjb2xvciwgdmFsdWUsIHdhcm5pbmcpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYWxwaGEoY29sb3IsIHZhbHVlKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAod2FybmluZyAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBjb25zb2xlLndhcm4od2FybmluZyk7XG4gICAgfVxuICAgIHJldHVybiBjb2xvcjtcbiAgfVxufVxuXG4vKipcbiAqIERhcmtlbnMgYSBjb2xvci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvciAtIENTUyBjb2xvciwgaS5lLiBvbmUgb2Y6ICNubm4sICNubm5ubm4sIHJnYigpLCByZ2JhKCksIGhzbCgpLCBoc2xhKCksIGNvbG9yKClcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2VmZmljaWVudCAtIG11bHRpcGxpZXIgaW4gdGhlIHJhbmdlIDAgLSAxXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBIENTUyBjb2xvciBzdHJpbmcuIEhleCBpbnB1dCB2YWx1ZXMgYXJlIHJldHVybmVkIGFzIHJnYlxuICovXG5mdW5jdGlvbiBkYXJrZW4oY29sb3IsIGNvZWZmaWNpZW50KSB7XG4gIGNvbG9yID0gZGVjb21wb3NlQ29sb3IoY29sb3IpO1xuICBjb2VmZmljaWVudCA9IGNsYW1wV3JhcHBlcihjb2VmZmljaWVudCk7XG4gIGlmIChjb2xvci50eXBlLmluZGV4T2YoJ2hzbCcpICE9PSAtMSkge1xuICAgIGNvbG9yLnZhbHVlc1syXSAqPSAxIC0gY29lZmZpY2llbnQ7XG4gIH0gZWxzZSBpZiAoY29sb3IudHlwZS5pbmRleE9mKCdyZ2InKSAhPT0gLTEgfHwgY29sb3IudHlwZS5pbmRleE9mKCdjb2xvcicpICE9PSAtMSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMzsgaSArPSAxKSB7XG4gICAgICBjb2xvci52YWx1ZXNbaV0gKj0gMSAtIGNvZWZmaWNpZW50O1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjb21wb3NlQ29sb3IoY29sb3IpO1xufVxuZnVuY3Rpb24gcHJpdmF0ZV9zYWZlRGFya2VuKGNvbG9yLCBjb2VmZmljaWVudCwgd2FybmluZykge1xuICB0cnkge1xuICAgIHJldHVybiBkYXJrZW4oY29sb3IsIGNvZWZmaWNpZW50KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAod2FybmluZyAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBjb25zb2xlLndhcm4od2FybmluZyk7XG4gICAgfVxuICAgIHJldHVybiBjb2xvcjtcbiAgfVxufVxuXG4vKipcbiAqIExpZ2h0ZW5zIGEgY29sb3IuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3IgLSBDU1MgY29sb3IsIGkuZS4gb25lIG9mOiAjbm5uLCAjbm5ubm5uLCByZ2IoKSwgcmdiYSgpLCBoc2woKSwgaHNsYSgpLCBjb2xvcigpXG4gKiBAcGFyYW0ge251bWJlcn0gY29lZmZpY2llbnQgLSBtdWx0aXBsaWVyIGluIHRoZSByYW5nZSAwIC0gMVxuICogQHJldHVybnMge3N0cmluZ30gQSBDU1MgY29sb3Igc3RyaW5nLiBIZXggaW5wdXQgdmFsdWVzIGFyZSByZXR1cm5lZCBhcyByZ2JcbiAqL1xuZnVuY3Rpb24gbGlnaHRlbihjb2xvciwgY29lZmZpY2llbnQpIHtcbiAgY29sb3IgPSBkZWNvbXBvc2VDb2xvcihjb2xvcik7XG4gIGNvZWZmaWNpZW50ID0gY2xhbXBXcmFwcGVyKGNvZWZmaWNpZW50KTtcbiAgaWYgKGNvbG9yLnR5cGUuaW5kZXhPZignaHNsJykgIT09IC0xKSB7XG4gICAgY29sb3IudmFsdWVzWzJdICs9ICgxMDAgLSBjb2xvci52YWx1ZXNbMl0pICogY29lZmZpY2llbnQ7XG4gIH0gZWxzZSBpZiAoY29sb3IudHlwZS5pbmRleE9mKCdyZ2InKSAhPT0gLTEpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDM7IGkgKz0gMSkge1xuICAgICAgY29sb3IudmFsdWVzW2ldICs9ICgyNTUgLSBjb2xvci52YWx1ZXNbaV0pICogY29lZmZpY2llbnQ7XG4gICAgfVxuICB9IGVsc2UgaWYgKGNvbG9yLnR5cGUuaW5kZXhPZignY29sb3InKSAhPT0gLTEpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDM7IGkgKz0gMSkge1xuICAgICAgY29sb3IudmFsdWVzW2ldICs9ICgxIC0gY29sb3IudmFsdWVzW2ldKSAqIGNvZWZmaWNpZW50O1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjb21wb3NlQ29sb3IoY29sb3IpO1xufVxuZnVuY3Rpb24gcHJpdmF0ZV9zYWZlTGlnaHRlbihjb2xvciwgY29lZmZpY2llbnQsIHdhcm5pbmcpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gbGlnaHRlbihjb2xvciwgY29lZmZpY2llbnQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmICh3YXJuaW5nICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGNvbnNvbGUud2Fybih3YXJuaW5nKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbG9yO1xuICB9XG59XG5cbi8qKlxuICogRGFya2VuIG9yIGxpZ2h0ZW4gYSBjb2xvciwgZGVwZW5kaW5nIG9uIGl0cyBsdW1pbmFuY2UuXG4gKiBMaWdodCBjb2xvcnMgYXJlIGRhcmtlbmVkLCBkYXJrIGNvbG9ycyBhcmUgbGlnaHRlbmVkLlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yIC0gQ1NTIGNvbG9yLCBpLmUuIG9uZSBvZjogI25ubiwgI25ubm5ubiwgcmdiKCksIHJnYmEoKSwgaHNsKCksIGhzbGEoKSwgY29sb3IoKVxuICogQHBhcmFtIHtudW1iZXJ9IGNvZWZmaWNpZW50PTAuMTUgLSBtdWx0aXBsaWVyIGluIHRoZSByYW5nZSAwIC0gMVxuICogQHJldHVybnMge3N0cmluZ30gQSBDU1MgY29sb3Igc3RyaW5nLiBIZXggaW5wdXQgdmFsdWVzIGFyZSByZXR1cm5lZCBhcyByZ2JcbiAqL1xuZnVuY3Rpb24gZW1waGFzaXplKGNvbG9yLCBjb2VmZmljaWVudCA9IDAuMTUpIHtcbiAgcmV0dXJuIGdldEx1bWluYW5jZShjb2xvcikgPiAwLjUgPyBkYXJrZW4oY29sb3IsIGNvZWZmaWNpZW50KSA6IGxpZ2h0ZW4oY29sb3IsIGNvZWZmaWNpZW50KTtcbn1cbmZ1bmN0aW9uIHByaXZhdGVfc2FmZUVtcGhhc2l6ZShjb2xvciwgY29lZmZpY2llbnQsIHdhcm5pbmcpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gcHJpdmF0ZV9zYWZlRW1waGFzaXplKGNvbG9yLCBjb2VmZmljaWVudCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKHdhcm5pbmcgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgY29uc29sZS53YXJuKHdhcm5pbmcpO1xuICAgIH1cbiAgICByZXR1cm4gY29sb3I7XG4gIH1cbn1cblxuLyoqXG4gKiBCbGVuZCBhIHRyYW5zcGFyZW50IG92ZXJsYXkgY29sb3Igd2l0aCBhIGJhY2tncm91bmQgY29sb3IsIHJlc3VsdGluZyBpbiBhIHNpbmdsZVxuICogUkdCIGNvbG9yLlxuICogQHBhcmFtIHtzdHJpbmd9IGJhY2tncm91bmQgLSBDU1MgY29sb3JcbiAqIEBwYXJhbSB7c3RyaW5nfSBvdmVybGF5IC0gQ1NTIGNvbG9yXG4gKiBAcGFyYW0ge251bWJlcn0gb3BhY2l0eSAtIE9wYWNpdHkgbXVsdGlwbGllciBpbiB0aGUgcmFuZ2UgMCAtIDFcbiAqIEBwYXJhbSB7bnVtYmVyfSBbZ2FtbWE9MS4wXSAtIEdhbW1hIGNvcnJlY3Rpb24gZmFjdG9yLiBGb3IgZ2FtbWEtY29ycmVjdCBibGVuZGluZywgMi4yIGlzIHVzdWFsLlxuICovXG5mdW5jdGlvbiBibGVuZChiYWNrZ3JvdW5kLCBvdmVybGF5LCBvcGFjaXR5LCBnYW1tYSA9IDEuMCkge1xuICBjb25zdCBibGVuZENoYW5uZWwgPSAoYiwgbykgPT4gTWF0aC5yb3VuZCgoYiAqKiAoMSAvIGdhbW1hKSAqICgxIC0gb3BhY2l0eSkgKyBvICoqICgxIC8gZ2FtbWEpICogb3BhY2l0eSkgKiogZ2FtbWEpO1xuICBjb25zdCBiYWNrZ3JvdW5kQ29sb3IgPSBkZWNvbXBvc2VDb2xvcihiYWNrZ3JvdW5kKTtcbiAgY29uc3Qgb3ZlcmxheUNvbG9yID0gZGVjb21wb3NlQ29sb3Iob3ZlcmxheSk7XG4gIGNvbnN0IHJnYiA9IFtibGVuZENoYW5uZWwoYmFja2dyb3VuZENvbG9yLnZhbHVlc1swXSwgb3ZlcmxheUNvbG9yLnZhbHVlc1swXSksIGJsZW5kQ2hhbm5lbChiYWNrZ3JvdW5kQ29sb3IudmFsdWVzWzFdLCBvdmVybGF5Q29sb3IudmFsdWVzWzFdKSwgYmxlbmRDaGFubmVsKGJhY2tncm91bmRDb2xvci52YWx1ZXNbMl0sIG92ZXJsYXlDb2xvci52YWx1ZXNbMl0pXTtcbiAgcmV0dXJuIHJlY29tcG9zZUNvbG9yKHtcbiAgICB0eXBlOiAncmdiJyxcbiAgICB2YWx1ZXM6IHJnYlxuICB9KTtcbn0iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IGNyZWF0ZVN0eWxlZDtcbmV4cG9ydHMuc2hvdWxkRm9yd2FyZFByb3AgPSBzaG91bGRGb3J3YXJkUHJvcDtcbmV4cG9ydHMuc3lzdGVtRGVmYXVsdFRoZW1lID0gdm9pZCAwO1xudmFyIF9leHRlbmRzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXh0ZW5kc1wiKSk7XG52YXIgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCIpKTtcbnZhciBfc3R5bGVkRW5naW5lID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQocmVxdWlyZShcIkBtdWkvc3R5bGVkLWVuZ2luZVwiKSk7XG52YXIgX2RlZXBtZXJnZSA9IHJlcXVpcmUoXCJAbXVpL3V0aWxzL2RlZXBtZXJnZVwiKTtcbnZhciBfY2FwaXRhbGl6ZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIkBtdWkvdXRpbHMvY2FwaXRhbGl6ZVwiKSk7XG52YXIgX2dldERpc3BsYXlOYW1lID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiQG11aS91dGlscy9nZXREaXNwbGF5TmFtZVwiKSk7XG52YXIgX2NyZWF0ZVRoZW1lID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9jcmVhdGVUaGVtZVwiKSk7XG52YXIgX3N0eWxlRnVuY3Rpb25TeCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vc3R5bGVGdW5jdGlvblN4XCIpKTtcbmNvbnN0IF9leGNsdWRlZCA9IFtcIm93bmVyU3RhdGVcIl0sXG4gIF9leGNsdWRlZDIgPSBbXCJ2YXJpYW50c1wiXSxcbiAgX2V4Y2x1ZGVkMyA9IFtcIm5hbWVcIiwgXCJzbG90XCIsIFwic2tpcFZhcmlhbnRzUmVzb2x2ZXJcIiwgXCJza2lwU3hcIiwgXCJvdmVycmlkZXNSZXNvbHZlclwiXTtcbi8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVyc2NvcmUtZGFuZ2xlICovXG5mdW5jdGlvbiBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBXZWFrTWFwKSByZXR1cm4gbnVsbDsgdmFyIHIgPSBuZXcgV2Vha01hcCgpLCB0ID0gbmV3IFdlYWtNYXAoKTsgcmV0dXJuIChfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUgPSBmdW5jdGlvbiAoZSkgeyByZXR1cm4gZSA/IHQgOiByOyB9KShlKTsgfVxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQoZSwgcikgeyBpZiAoIXIgJiYgZSAmJiBlLl9fZXNNb2R1bGUpIHJldHVybiBlOyBpZiAobnVsbCA9PT0gZSB8fCBcIm9iamVjdFwiICE9IHR5cGVvZiBlICYmIFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSkgcmV0dXJuIHsgZGVmYXVsdDogZSB9OyB2YXIgdCA9IF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShyKTsgaWYgKHQgJiYgdC5oYXMoZSkpIHJldHVybiB0LmdldChlKTsgdmFyIG4gPSB7IF9fcHJvdG9fXzogbnVsbCB9LCBhID0gT2JqZWN0LmRlZmluZVByb3BlcnR5ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7IGZvciAodmFyIHUgaW4gZSkgaWYgKFwiZGVmYXVsdFwiICE9PSB1ICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCB1KSkgeyB2YXIgaSA9IGEgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHUpIDogbnVsbDsgaSAmJiAoaS5nZXQgfHwgaS5zZXQpID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIHUsIGkpIDogblt1XSA9IGVbdV07IH0gcmV0dXJuIG4uZGVmYXVsdCA9IGUsIHQgJiYgdC5zZXQoZSwgbiksIG47IH1cbmZ1bmN0aW9uIGlzRW1wdHkob2JqKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA9PT0gMDtcbn1cblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Vtb3Rpb24tanMvZW1vdGlvbi9ibG9iLzI2ZGVkNjEwOWZjZDhjYTk4NzVjYzJjZTQ1NjRmZWU2NzhhM2YzYzUvcGFja2FnZXMvc3R5bGVkL3NyYy91dGlscy5qcyNMNDBcbmZ1bmN0aW9uIGlzU3RyaW5nVGFnKHRhZykge1xuICByZXR1cm4gdHlwZW9mIHRhZyA9PT0gJ3N0cmluZycgJiZcbiAgLy8gOTYgaXMgb25lIGxlc3MgdGhhbiB0aGUgY2hhciBjb2RlXG4gIC8vIGZvciBcImFcIiBzbyB0aGlzIGlzIGNoZWNraW5nIHRoYXRcbiAgLy8gaXQncyBhIGxvd2VyY2FzZSBjaGFyYWN0ZXJcbiAgdGFnLmNoYXJDb2RlQXQoMCkgPiA5Njtcbn1cblxuLy8gVXBkYXRlIC9zeXN0ZW0vc3R5bGVkLyNhcGkgaW4gY2FzZSBpZiB0aGlzIGNoYW5nZXNcbmZ1bmN0aW9uIHNob3VsZEZvcndhcmRQcm9wKHByb3ApIHtcbiAgcmV0dXJuIHByb3AgIT09ICdvd25lclN0YXRlJyAmJiBwcm9wICE9PSAndGhlbWUnICYmIHByb3AgIT09ICdzeCcgJiYgcHJvcCAhPT0gJ2FzJztcbn1cbmNvbnN0IHN5c3RlbURlZmF1bHRUaGVtZSA9IGV4cG9ydHMuc3lzdGVtRGVmYXVsdFRoZW1lID0gKDAsIF9jcmVhdGVUaGVtZS5kZWZhdWx0KSgpO1xuY29uc3QgbG93ZXJjYXNlRmlyc3RMZXR0ZXIgPSBzdHJpbmcgPT4ge1xuICBpZiAoIXN0cmluZykge1xuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cbiAgcmV0dXJuIHN0cmluZy5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSArIHN0cmluZy5zbGljZSgxKTtcbn07XG5mdW5jdGlvbiByZXNvbHZlVGhlbWUoe1xuICBkZWZhdWx0VGhlbWUsXG4gIHRoZW1lLFxuICB0aGVtZUlkXG59KSB7XG4gIHJldHVybiBpc0VtcHR5KHRoZW1lKSA/IGRlZmF1bHRUaGVtZSA6IHRoZW1lW3RoZW1lSWRdIHx8IHRoZW1lO1xufVxuZnVuY3Rpb24gZGVmYXVsdE92ZXJyaWRlc1Jlc29sdmVyKHNsb3QpIHtcbiAgaWYgKCFzbG90KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXNbc2xvdF07XG59XG5mdW5jdGlvbiBwcm9jZXNzU3R5bGVBcmcoY2FsbGFibGVTdHlsZSwgX3JlZikge1xuICBsZXQge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBfcmVmLFxuICAgIHByb3BzID0gKDAsIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlMi5kZWZhdWx0KShfcmVmLCBfZXhjbHVkZWQpO1xuICBjb25zdCByZXNvbHZlZFN0eWxlc0FyZyA9IHR5cGVvZiBjYWxsYWJsZVN0eWxlID09PSAnZnVuY3Rpb24nID8gY2FsbGFibGVTdHlsZSgoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHtcbiAgICBvd25lclN0YXRlXG4gIH0sIHByb3BzKSkgOiBjYWxsYWJsZVN0eWxlO1xuICBpZiAoQXJyYXkuaXNBcnJheShyZXNvbHZlZFN0eWxlc0FyZykpIHtcbiAgICByZXR1cm4gcmVzb2x2ZWRTdHlsZXNBcmcuZmxhdE1hcChyZXNvbHZlZFN0eWxlID0+IHByb2Nlc3NTdHlsZUFyZyhyZXNvbHZlZFN0eWxlLCAoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9LCBwcm9wcykpKTtcbiAgfVxuICBpZiAoISFyZXNvbHZlZFN0eWxlc0FyZyAmJiB0eXBlb2YgcmVzb2x2ZWRTdHlsZXNBcmcgPT09ICdvYmplY3QnICYmIEFycmF5LmlzQXJyYXkocmVzb2x2ZWRTdHlsZXNBcmcudmFyaWFudHMpKSB7XG4gICAgY29uc3Qge1xuICAgICAgICB2YXJpYW50cyA9IFtdXG4gICAgICB9ID0gcmVzb2x2ZWRTdHlsZXNBcmcsXG4gICAgICBvdGhlclN0eWxlcyA9ICgwLCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZTIuZGVmYXVsdCkocmVzb2x2ZWRTdHlsZXNBcmcsIF9leGNsdWRlZDIpO1xuICAgIGxldCByZXN1bHQgPSBvdGhlclN0eWxlcztcbiAgICB2YXJpYW50cy5mb3JFYWNoKHZhcmlhbnQgPT4ge1xuICAgICAgbGV0IGlzTWF0Y2ggPSB0cnVlO1xuICAgICAgaWYgKHR5cGVvZiB2YXJpYW50LnByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGlzTWF0Y2ggPSB2YXJpYW50LnByb3BzKCgwLCBfZXh0ZW5kczIuZGVmYXVsdCkoe1xuICAgICAgICAgIG93bmVyU3RhdGVcbiAgICAgICAgfSwgcHJvcHMsIG93bmVyU3RhdGUpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIE9iamVjdC5rZXlzKHZhcmlhbnQucHJvcHMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICBpZiAoKG93bmVyU3RhdGUgPT0gbnVsbCA/IHZvaWQgMCA6IG93bmVyU3RhdGVba2V5XSkgIT09IHZhcmlhbnQucHJvcHNba2V5XSAmJiBwcm9wc1trZXldICE9PSB2YXJpYW50LnByb3BzW2tleV0pIHtcbiAgICAgICAgICAgIGlzTWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKGlzTWF0Y2gpIHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHJlc3VsdCkpIHtcbiAgICAgICAgICByZXN1bHQgPSBbcmVzdWx0XTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQucHVzaCh0eXBlb2YgdmFyaWFudC5zdHlsZSA9PT0gJ2Z1bmN0aW9uJyA/IHZhcmlhbnQuc3R5bGUoKDAsIF9leHRlbmRzMi5kZWZhdWx0KSh7XG4gICAgICAgICAgb3duZXJTdGF0ZVxuICAgICAgICB9LCBwcm9wcywgb3duZXJTdGF0ZSkpIDogdmFyaWFudC5zdHlsZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICByZXR1cm4gcmVzb2x2ZWRTdHlsZXNBcmc7XG59XG5mdW5jdGlvbiBjcmVhdGVTdHlsZWQoaW5wdXQgPSB7fSkge1xuICBjb25zdCB7XG4gICAgdGhlbWVJZCxcbiAgICBkZWZhdWx0VGhlbWUgPSBzeXN0ZW1EZWZhdWx0VGhlbWUsXG4gICAgcm9vdFNob3VsZEZvcndhcmRQcm9wID0gc2hvdWxkRm9yd2FyZFByb3AsXG4gICAgc2xvdFNob3VsZEZvcndhcmRQcm9wID0gc2hvdWxkRm9yd2FyZFByb3BcbiAgfSA9IGlucHV0O1xuICBjb25zdCBzeXN0ZW1TeCA9IHByb3BzID0+IHtcbiAgICByZXR1cm4gKDAsIF9zdHlsZUZ1bmN0aW9uU3guZGVmYXVsdCkoKDAsIF9leHRlbmRzMi5kZWZhdWx0KSh7fSwgcHJvcHMsIHtcbiAgICAgIHRoZW1lOiByZXNvbHZlVGhlbWUoKDAsIF9leHRlbmRzMi5kZWZhdWx0KSh7fSwgcHJvcHMsIHtcbiAgICAgICAgZGVmYXVsdFRoZW1lLFxuICAgICAgICB0aGVtZUlkXG4gICAgICB9KSlcbiAgICB9KSk7XG4gIH07XG4gIHN5c3RlbVN4Ll9fbXVpX3N5c3RlbVN4ID0gdHJ1ZTtcbiAgcmV0dXJuICh0YWcsIGlucHV0T3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgLy8gRmlsdGVyIG91dCB0aGUgYHN4YCBzdHlsZSBmdW5jdGlvbiBmcm9tIHRoZSBwcmV2aW91cyBzdHlsZWQgY29tcG9uZW50IHRvIHByZXZlbnQgdW5uZWNlc3Nhcnkgc3R5bGVzIGdlbmVyYXRlZCBieSB0aGUgY29tcG9zaXRlIGNvbXBvbmVudHMuXG4gICAgKDAsIF9zdHlsZWRFbmdpbmUuaW50ZXJuYWxfcHJvY2Vzc1N0eWxlcykodGFnLCBzdHlsZXMgPT4gc3R5bGVzLmZpbHRlcihzdHlsZSA9PiAhKHN0eWxlICE9IG51bGwgJiYgc3R5bGUuX19tdWlfc3lzdGVtU3gpKSk7XG4gICAgY29uc3Qge1xuICAgICAgICBuYW1lOiBjb21wb25lbnROYW1lLFxuICAgICAgICBzbG90OiBjb21wb25lbnRTbG90LFxuICAgICAgICBza2lwVmFyaWFudHNSZXNvbHZlcjogaW5wdXRTa2lwVmFyaWFudHNSZXNvbHZlcixcbiAgICAgICAgc2tpcFN4OiBpbnB1dFNraXBTeCxcbiAgICAgICAgLy8gVE9ETyB2NjogcmVtb3ZlIGBsb3dlcmNhc2VGaXJzdExldHRlcigpYCBpbiB0aGUgbmV4dCBtYWpvciByZWxlYXNlXG4gICAgICAgIC8vIEZvciBtb3JlIGRldGFpbHM6IGh0dHBzOi8vZ2l0aHViLmNvbS9tdWkvbWF0ZXJpYWwtdWkvcHVsbC8zNzkwOFxuICAgICAgICBvdmVycmlkZXNSZXNvbHZlciA9IGRlZmF1bHRPdmVycmlkZXNSZXNvbHZlcihsb3dlcmNhc2VGaXJzdExldHRlcihjb21wb25lbnRTbG90KSlcbiAgICAgIH0gPSBpbnB1dE9wdGlvbnMsXG4gICAgICBvcHRpb25zID0gKDAsIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlMi5kZWZhdWx0KShpbnB1dE9wdGlvbnMsIF9leGNsdWRlZDMpO1xuXG4gICAgLy8gaWYgc2tpcFZhcmlhbnRzUmVzb2x2ZXIgb3B0aW9uIGlzIGRlZmluZWQsIHRha2UgdGhlIHZhbHVlLCBvdGhlcndpc2UsIHRydWUgZm9yIHJvb3QgYW5kIGZhbHNlIGZvciBvdGhlciBzbG90cy5cbiAgICBjb25zdCBza2lwVmFyaWFudHNSZXNvbHZlciA9IGlucHV0U2tpcFZhcmlhbnRzUmVzb2x2ZXIgIT09IHVuZGVmaW5lZCA/IGlucHV0U2tpcFZhcmlhbnRzUmVzb2x2ZXIgOlxuICAgIC8vIFRPRE8gdjY6IHJlbW92ZSBgUm9vdGAgaW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZVxuICAgIC8vIEZvciBtb3JlIGRldGFpbHM6IGh0dHBzOi8vZ2l0aHViLmNvbS9tdWkvbWF0ZXJpYWwtdWkvcHVsbC8zNzkwOFxuICAgIGNvbXBvbmVudFNsb3QgJiYgY29tcG9uZW50U2xvdCAhPT0gJ1Jvb3QnICYmIGNvbXBvbmVudFNsb3QgIT09ICdyb290JyB8fCBmYWxzZTtcbiAgICBjb25zdCBza2lwU3ggPSBpbnB1dFNraXBTeCB8fCBmYWxzZTtcbiAgICBsZXQgbGFiZWw7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmIChjb21wb25lbnROYW1lKSB7XG4gICAgICAgIC8vIFRPRE8gdjY6IHJlbW92ZSBgbG93ZXJjYXNlRmlyc3RMZXR0ZXIoKWAgaW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZVxuICAgICAgICAvLyBGb3IgbW9yZSBkZXRhaWxzOiBodHRwczovL2dpdGh1Yi5jb20vbXVpL21hdGVyaWFsLXVpL3B1bGwvMzc5MDhcbiAgICAgICAgbGFiZWwgPSBgJHtjb21wb25lbnROYW1lfS0ke2xvd2VyY2FzZUZpcnN0TGV0dGVyKGNvbXBvbmVudFNsb3QgfHwgJ1Jvb3QnKX1gO1xuICAgICAgfVxuICAgIH1cbiAgICBsZXQgc2hvdWxkRm9yd2FyZFByb3BPcHRpb24gPSBzaG91bGRGb3J3YXJkUHJvcDtcblxuICAgIC8vIFRPRE8gdjY6IHJlbW92ZSBgUm9vdGAgaW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZVxuICAgIC8vIEZvciBtb3JlIGRldGFpbHM6IGh0dHBzOi8vZ2l0aHViLmNvbS9tdWkvbWF0ZXJpYWwtdWkvcHVsbC8zNzkwOFxuICAgIGlmIChjb21wb25lbnRTbG90ID09PSAnUm9vdCcgfHwgY29tcG9uZW50U2xvdCA9PT0gJ3Jvb3QnKSB7XG4gICAgICBzaG91bGRGb3J3YXJkUHJvcE9wdGlvbiA9IHJvb3RTaG91bGRGb3J3YXJkUHJvcDtcbiAgICB9IGVsc2UgaWYgKGNvbXBvbmVudFNsb3QpIHtcbiAgICAgIC8vIGFueSBvdGhlciBzbG90IHNwZWNpZmllZFxuICAgICAgc2hvdWxkRm9yd2FyZFByb3BPcHRpb24gPSBzbG90U2hvdWxkRm9yd2FyZFByb3A7XG4gICAgfSBlbHNlIGlmIChpc1N0cmluZ1RhZyh0YWcpKSB7XG4gICAgICAvLyBmb3Igc3RyaW5nIChodG1sKSB0YWcsIHByZXNlcnZlIHRoZSBiZWhhdmlvciBpbiBlbW90aW9uICYgc3R5bGVkLWNvbXBvbmVudHMuXG4gICAgICBzaG91bGRGb3J3YXJkUHJvcE9wdGlvbiA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgZGVmYXVsdFN0eWxlZFJlc29sdmVyID0gKDAsIF9zdHlsZWRFbmdpbmUuZGVmYXVsdCkodGFnLCAoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHtcbiAgICAgIHNob3VsZEZvcndhcmRQcm9wOiBzaG91bGRGb3J3YXJkUHJvcE9wdGlvbixcbiAgICAgIGxhYmVsXG4gICAgfSwgb3B0aW9ucykpO1xuICAgIGNvbnN0IHRyYW5zZm9ybVN0eWxlQXJnID0gc3R5bGVzQXJnID0+IHtcbiAgICAgIC8vIE9uIHRoZSBzZXJ2ZXIgRW1vdGlvbiBkb2Vzbid0IHVzZSBSZWFjdC5mb3J3YXJkUmVmIGZvciBjcmVhdGluZyBjb21wb25lbnRzLCBzbyB0aGUgY3JlYXRlZFxuICAgICAgLy8gY29tcG9uZW50IHN0YXlzIGFzIGEgZnVuY3Rpb24uIFRoaXMgY29uZGl0aW9uIG1ha2VzIHN1cmUgdGhhdCB3ZSBkbyBub3QgaW50ZXJwb2xhdGUgZnVuY3Rpb25zXG4gICAgICAvLyB3aGljaCBhcmUgYmFzaWNhbGx5IGNvbXBvbmVudHMgdXNlZCBhcyBhIHNlbGVjdG9ycy5cbiAgICAgIGlmICh0eXBlb2Ygc3R5bGVzQXJnID09PSAnZnVuY3Rpb24nICYmIHN0eWxlc0FyZy5fX2Vtb3Rpb25fcmVhbCAhPT0gc3R5bGVzQXJnIHx8ICgwLCBfZGVlcG1lcmdlLmlzUGxhaW5PYmplY3QpKHN0eWxlc0FyZykpIHtcbiAgICAgICAgcmV0dXJuIHByb3BzID0+IHByb2Nlc3NTdHlsZUFyZyhzdHlsZXNBcmcsICgwLCBfZXh0ZW5kczIuZGVmYXVsdCkoe30sIHByb3BzLCB7XG4gICAgICAgICAgdGhlbWU6IHJlc29sdmVUaGVtZSh7XG4gICAgICAgICAgICB0aGVtZTogcHJvcHMudGhlbWUsXG4gICAgICAgICAgICBkZWZhdWx0VGhlbWUsXG4gICAgICAgICAgICB0aGVtZUlkXG4gICAgICAgICAgfSlcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN0eWxlc0FyZztcbiAgICB9O1xuICAgIGNvbnN0IG11aVN0eWxlZFJlc29sdmVyID0gKHN0eWxlQXJnLCAuLi5leHByZXNzaW9ucykgPT4ge1xuICAgICAgbGV0IHRyYW5zZm9ybWVkU3R5bGVBcmcgPSB0cmFuc2Zvcm1TdHlsZUFyZyhzdHlsZUFyZyk7XG4gICAgICBjb25zdCBleHByZXNzaW9uc1dpdGhEZWZhdWx0VGhlbWUgPSBleHByZXNzaW9ucyA/IGV4cHJlc3Npb25zLm1hcCh0cmFuc2Zvcm1TdHlsZUFyZykgOiBbXTtcbiAgICAgIGlmIChjb21wb25lbnROYW1lICYmIG92ZXJyaWRlc1Jlc29sdmVyKSB7XG4gICAgICAgIGV4cHJlc3Npb25zV2l0aERlZmF1bHRUaGVtZS5wdXNoKHByb3BzID0+IHtcbiAgICAgICAgICBjb25zdCB0aGVtZSA9IHJlc29sdmVUaGVtZSgoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHt9LCBwcm9wcywge1xuICAgICAgICAgICAgZGVmYXVsdFRoZW1lLFxuICAgICAgICAgICAgdGhlbWVJZFxuICAgICAgICAgIH0pKTtcbiAgICAgICAgICBpZiAoIXRoZW1lLmNvbXBvbmVudHMgfHwgIXRoZW1lLmNvbXBvbmVudHNbY29tcG9uZW50TmFtZV0gfHwgIXRoZW1lLmNvbXBvbmVudHNbY29tcG9uZW50TmFtZV0uc3R5bGVPdmVycmlkZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBzdHlsZU92ZXJyaWRlcyA9IHRoZW1lLmNvbXBvbmVudHNbY29tcG9uZW50TmFtZV0uc3R5bGVPdmVycmlkZXM7XG4gICAgICAgICAgY29uc3QgcmVzb2x2ZWRTdHlsZU92ZXJyaWRlcyA9IHt9O1xuICAgICAgICAgIC8vIFRPRE86IHY3IHJlbW92ZSBpdGVyYXRpb24gYW5kIHVzZSBgcmVzb2x2ZVN0eWxlQXJnKHN0eWxlT3ZlcnJpZGVzW3Nsb3RdKWAgZGlyZWN0bHlcbiAgICAgICAgICBPYmplY3QuZW50cmllcyhzdHlsZU92ZXJyaWRlcykuZm9yRWFjaCgoW3Nsb3RLZXksIHNsb3RTdHlsZV0pID0+IHtcbiAgICAgICAgICAgIHJlc29sdmVkU3R5bGVPdmVycmlkZXNbc2xvdEtleV0gPSBwcm9jZXNzU3R5bGVBcmcoc2xvdFN0eWxlLCAoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHt9LCBwcm9wcywge1xuICAgICAgICAgICAgICB0aGVtZVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBvdmVycmlkZXNSZXNvbHZlcihwcm9wcywgcmVzb2x2ZWRTdHlsZU92ZXJyaWRlcyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKGNvbXBvbmVudE5hbWUgJiYgIXNraXBWYXJpYW50c1Jlc29sdmVyKSB7XG4gICAgICAgIGV4cHJlc3Npb25zV2l0aERlZmF1bHRUaGVtZS5wdXNoKHByb3BzID0+IHtcbiAgICAgICAgICB2YXIgX3RoZW1lJGNvbXBvbmVudHM7XG4gICAgICAgICAgY29uc3QgdGhlbWUgPSByZXNvbHZlVGhlbWUoKDAsIF9leHRlbmRzMi5kZWZhdWx0KSh7fSwgcHJvcHMsIHtcbiAgICAgICAgICAgIGRlZmF1bHRUaGVtZSxcbiAgICAgICAgICAgIHRoZW1lSWRcbiAgICAgICAgICB9KSk7XG4gICAgICAgICAgY29uc3QgdGhlbWVWYXJpYW50cyA9IHRoZW1lID09IG51bGwgfHwgKF90aGVtZSRjb21wb25lbnRzID0gdGhlbWUuY29tcG9uZW50cykgPT0gbnVsbCB8fCAoX3RoZW1lJGNvbXBvbmVudHMgPSBfdGhlbWUkY29tcG9uZW50c1tjb21wb25lbnROYW1lXSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGVtZSRjb21wb25lbnRzLnZhcmlhbnRzO1xuICAgICAgICAgIHJldHVybiBwcm9jZXNzU3R5bGVBcmcoe1xuICAgICAgICAgICAgdmFyaWFudHM6IHRoZW1lVmFyaWFudHNcbiAgICAgICAgICB9LCAoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHt9LCBwcm9wcywge1xuICAgICAgICAgICAgdGhlbWVcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKCFza2lwU3gpIHtcbiAgICAgICAgZXhwcmVzc2lvbnNXaXRoRGVmYXVsdFRoZW1lLnB1c2goc3lzdGVtU3gpO1xuICAgICAgfVxuICAgICAgY29uc3QgbnVtT2ZDdXN0b21GbnNBcHBsaWVkID0gZXhwcmVzc2lvbnNXaXRoRGVmYXVsdFRoZW1lLmxlbmd0aCAtIGV4cHJlc3Npb25zLmxlbmd0aDtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHN0eWxlQXJnKSAmJiBudW1PZkN1c3RvbUZuc0FwcGxpZWQgPiAwKSB7XG4gICAgICAgIGNvbnN0IHBsYWNlaG9sZGVycyA9IG5ldyBBcnJheShudW1PZkN1c3RvbUZuc0FwcGxpZWQpLmZpbGwoJycpO1xuICAgICAgICAvLyBJZiB0aGUgdHlwZSBpcyBhcnJheSwgdGhhbiB3ZSBuZWVkIHRvIGFkZCBwbGFjZWhvbGRlcnMgaW4gdGhlIHRlbXBsYXRlIGZvciB0aGUgb3ZlcnJpZGVzLCB2YXJpYW50cyBhbmQgdGhlIHN4IHN0eWxlcy5cbiAgICAgICAgdHJhbnNmb3JtZWRTdHlsZUFyZyA9IFsuLi5zdHlsZUFyZywgLi4ucGxhY2Vob2xkZXJzXTtcbiAgICAgICAgdHJhbnNmb3JtZWRTdHlsZUFyZy5yYXcgPSBbLi4uc3R5bGVBcmcucmF3LCAuLi5wbGFjZWhvbGRlcnNdO1xuICAgICAgfVxuICAgICAgY29uc3QgQ29tcG9uZW50ID0gZGVmYXVsdFN0eWxlZFJlc29sdmVyKHRyYW5zZm9ybWVkU3R5bGVBcmcsIC4uLmV4cHJlc3Npb25zV2l0aERlZmF1bHRUaGVtZSk7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBsZXQgZGlzcGxheU5hbWU7XG4gICAgICAgIGlmIChjb21wb25lbnROYW1lKSB7XG4gICAgICAgICAgZGlzcGxheU5hbWUgPSBgJHtjb21wb25lbnROYW1lfSR7KDAsIF9jYXBpdGFsaXplLmRlZmF1bHQpKGNvbXBvbmVudFNsb3QgfHwgJycpfWA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRpc3BsYXlOYW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkaXNwbGF5TmFtZSA9IGBTdHlsZWQoJHsoMCwgX2dldERpc3BsYXlOYW1lLmRlZmF1bHQpKHRhZyl9KWA7XG4gICAgICAgIH1cbiAgICAgICAgQ29tcG9uZW50LmRpc3BsYXlOYW1lID0gZGlzcGxheU5hbWU7XG4gICAgICB9XG4gICAgICBpZiAodGFnLm11aU5hbWUpIHtcbiAgICAgICAgQ29tcG9uZW50Lm11aU5hbWUgPSB0YWcubXVpTmFtZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBDb21wb25lbnQ7XG4gICAgfTtcbiAgICBpZiAoZGVmYXVsdFN0eWxlZFJlc29sdmVyLndpdGhDb25maWcpIHtcbiAgICAgIG11aVN0eWxlZFJlc29sdmVyLndpdGhDb25maWcgPSBkZWZhdWx0U3R5bGVkUmVzb2x2ZXIud2l0aENvbmZpZztcbiAgICB9XG4gICAgcmV0dXJuIG11aVN0eWxlZFJlc29sdmVyO1xuICB9O1xufSIsICJpbXBvcnQgeyBGcmFnbWVudCwgdXNlRWZmZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuaW1wb3J0IHsgUHJvdmlkZXIgfSBmcm9tIFwicmVhY3QtcmVkdXhcIjtcbmltcG9ydCB7IHVzZUFwcERpc3BhdGNoLCB1c2VBcHBTZWxlY3RvciB9IGZyb20gXCIuLi9hcHAvaG9va3NcIjtcbmltcG9ydCB7IHN0b3JlIH0gZnJvbSBcIi4uL2FwcC9zdG9yZVwiO1xuaW1wb3J0IEVudGl0eVRyZWUgZnJvbSBcIi4uL3BhZ2VzL29udG9sb2dpZXMvZW50aXRpZXMvRW50aXR5VHJlZVwiO1xuaW1wb3J0IHsgZ2V0Q2xhc3NJbnN0YW5jZXMsIGdldEVudGl0eSwgZ2V0RW50aXR5V2l0aFR5cGUsIGdldE9udG9sb2d5IH0gZnJvbSBcIi4uL3BhZ2VzL29udG9sb2dpZXMvb250b2xvZ2llc1NsaWNlXCI7XG5pbXBvcnQgeyBRdWVyeUNsaWVudCwgUXVlcnlDbGllbnRQcm92aWRlciB9IGZyb20gXCJyZWFjdC1xdWVyeVwiO1xuaW1wb3J0IE9udG9sb2d5IGZyb20gJy4uL21vZGVsL09udG9sb2d5J1xuaW1wb3J0IEVudGl0eSBmcm9tICcuLi9tb2RlbC9FbnRpdHknXG5pbXBvcnQgeyBDaXJjdWxhclByb2dyZXNzIH0gZnJvbSAnQG11aS9tYXRlcmlhbCdcblxuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlUcmVlV2lkZ2V0UHJvcHMge1xuICAgIGlyaT86IHN0cmluZztcbiAgICBvbnRvbG9neUlkOiBzdHJpbmc7XG4gICAgYXBpVXJsOiBzdHJpbmc7XG4gICAgZW50aXR5VHlwZT86IFwiZW50aXRpZXNcIiB8IFwiY2xhc3Nlc1wiIHwgXCJwcm9wZXJ0aWVzXCIgfCBcImluZGl2aWR1YWxzXCI7XG4gICAgbGFuZz86IHN0cmluZztcbiAgICBvbk5hdmlnYXRlVG9FbnRpdHk/OiAob250b2xvZ3lJZDogc3RyaW5nLCBlbnRpdHlUeXBlOiBzdHJpbmcsIGlyaTogc3RyaW5nKSA9PiB2b2lkO1xuICAgIG9uTmF2aWdhdGVUb09udG9sb2d5PzogKG9udG9sb2d5SWQ6IHN0cmluZywgZW50aXR5VHlwZTogc3RyaW5nLCBpcmk6IHN0cmluZykgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUVudGl0eVRyZWUoXG4gICAgcHJvcHM6IEVudGl0eVRyZWVXaWRnZXRQcm9wcyxcbiAgICBjb250YWluZXI6IGFueSxcbiAgICBjYWxsYmFjaz86ICgpID0+IHZvaWRcbikge1xuICAgIFJlYWN0RE9NLnJlbmRlcihFbnRpdHlUcmVlV2lkZ2V0KHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIEVudGl0eVRyZWVXaWRnZXQocHJvcHM6IEVudGl0eVRyZWVXaWRnZXRQcm9wcykge1xuICAgIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8UHJvdmlkZXIgc3RvcmU9e3N0b3JlfT5cbiAgICAgICAgICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgICAgICAgICAgIDxFbnRpdHlUcmVlV2lkZ2V0SW5uZXJcbiAgICAgICAgICAgICAgICAgICAgb250b2xvZ3lJZD17cHJvcHMub250b2xvZ3lJZH1cbiAgICAgICAgICAgICAgICAgICAgaXJpPXtwcm9wcy5pcml9XG4gICAgICAgICAgICAgICAgICAgIGVudGl0eVR5cGU9e3Byb3BzLmVudGl0eVR5cGV9XG4gICAgICAgICAgICAgICAgICAgIGFwaVVybD17cHJvcHMuYXBpVXJsfVxuICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9FbnRpdHk9e3Byb3BzLm9uTmF2aWdhdGVUb0VudGl0eX1cbiAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvT250b2xvZ3k9e3Byb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG5cbiAgICAgICAgPC9Qcm92aWRlcj5cbiAgICApO1xufVxuXG5mdW5jdGlvbiBFbnRpdHlUcmVlV2lkZ2V0SW5uZXIocHJvcHM6IEVudGl0eVRyZWVXaWRnZXRQcm9wcykge1xuICAgIGNvbnN0IHtcbiAgICAgICAgZW50aXR5VHlwZSxcbiAgICAgICAgbGFuZyA9IFwiZW5cIixcbiAgICAgICAgb25OYXZpZ2F0ZVRvRW50aXR5ID0gKCkgPT4ge1xuICAgICAgICB9LFxuICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neSA9ICgpID0+IHtcbiAgICAgICAgfSxcbiAgICB9ID0gcHJvcHM7XG5cbiAgICBjb25zdCBvbnRvbG9neSA9IHVzZUFwcFNlbGVjdG9yKChzdGF0ZSkgPT4gc3RhdGUub250b2xvZ2llcy5vbnRvbG9neSk7XG4gICAgY29uc3QgbG9hZGluZ09udG9sb2d5ID0gdXNlQXBwU2VsZWN0b3IoKHN0YXRlKSA9PiBzdGF0ZS5vbnRvbG9naWVzLmxvYWRpbmdPbnRvbG9neSk7XG5cbiAgICBjb25zdCBlbnRpdHkgPSB1c2VBcHBTZWxlY3Rvcigoc3RhdGUpID0+IHN0YXRlLm9udG9sb2dpZXMuZW50aXR5KTtcbiAgICBjb25zdCBsb2FkaW5nRW50aXR5ID0gdXNlQXBwU2VsZWN0b3IoKHN0YXRlKSA9PiBzdGF0ZS5vbnRvbG9naWVzLmxvYWRpbmdFbnRpdHkpO1xuXG4gICAgLy9jb25zdCBjbGFzc0luc3RhbmNlcyA9IHVzZUFwcFNlbGVjdG9yKChzdGF0ZSkgPT4gc3RhdGUub250b2xvZ2llcy5jbGFzc0luc3RhbmNlcyk7XG4gICAgY29uc3QgbG9hZGluZ0NsYXNzSW5zdGFuY2VzID0gdXNlQXBwU2VsZWN0b3IoKHN0YXRlKSA9PiBzdGF0ZS5vbnRvbG9naWVzLmxvYWRpbmdDbGFzc0luc3RhbmNlcyk7XG5cblxuICAgIGNvbnN0IGRpc3BhdGNoID0gdXNlQXBwRGlzcGF0Y2goKTtcblxuICAgIGNvbnN0IGhhbmRsZU5hdmlnYXRlVG9FbnRpdHkgPSAob250b2xvZ3k6IE9udG9sb2d5LCBlbnRpdHk6IEVudGl0eSkgPT4ge1xuICAgICAgICBjb25zdCBvbnRvbG9neUlkID0gb250b2xvZ3kuZ2V0T250b2xvZ3lJZCgpO1xuICAgICAgICBjb25zdCBlbnRpdHlUeXBlID0gZW50aXR5LmdldFR5cGVQbHVyYWwoKTtcbiAgICAgICAgY29uc3QgaXJpID0gZW50aXR5LmdldElyaSgpO1xuXG4gICAgICAgIG9uTmF2aWdhdGVUb0VudGl0eShvbnRvbG9neUlkLCBlbnRpdHlUeXBlLCBpcmkpO1xuICAgIH07XG5cbiAgICBjb25zdCBoYW5kbGVOYXZpZ2F0ZVRvT250b2xvZ3kgPSAob250b2xvZ3lJZDogc3RyaW5nLCBlbnRpdHk6IEVudGl0eSkgPT4ge1xuICAgICAgICBjb25zdCBlbnRpdHlUeXBlID0gZW50aXR5LmdldFR5cGVQbHVyYWwoKTtcbiAgICAgICAgY29uc3QgaXJpID0gZW50aXR5LmdldElyaSgpO1xuXG4gICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5KG9udG9sb2d5SWQsIGVudGl0eVR5cGUsIGlyaSk7XG4gICAgfTtcblxuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgZGlzcGF0Y2goXG4gICAgICAgICAgICBnZXRPbnRvbG9neSh7XG4gICAgICAgICAgICAgICAgb250b2xvZ3lJZDogcHJvcHMub250b2xvZ3lJZCxcbiAgICAgICAgICAgICAgICBsYW5nOiBcImVuXCIsXG4gICAgICAgICAgICAgICAgYXBpVXJsOiBwcm9wcy5hcGlVcmwsXG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH0sIFtkaXNwYXRjaCwgcHJvcHMub250b2xvZ3lJZCwgcHJvcHMuYXBpVXJsXSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAob250b2xvZ3kgJiYgcHJvcHMuaXJpKSB7XG4gICAgICAgICAgICBpZiAocHJvcHMuZW50aXR5VHlwZSAmJiBwcm9wcy5lbnRpdHlUeXBlICE9PSBcImVudGl0aWVzXCIpIHtcbiAgICAgICAgICAgICAgICBkaXNwYXRjaChcbiAgICAgICAgICAgICAgICAgICAgZ2V0RW50aXR5V2l0aFR5cGUoXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb250b2xvZ3lJZDogcHJvcHMub250b2xvZ3lJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHlUeXBlOiBwcm9wcy5lbnRpdHlUeXBlIGFzIHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHlJcmk6IHByb3BzLmlyaSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hQYXJhbXM6IG5ldyBVUkxTZWFyY2hQYXJhbXMoKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSBlbHNlIGRpc3BhdGNoKFxuICAgICAgICAgICAgICAgIGdldEVudGl0eShcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgb250b2xvZ3lJZDogcHJvcHMub250b2xvZ3lJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eUlyaTogcHJvcHMuaXJpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgICAgO1xuICAgIH0sIFtkaXNwYXRjaCwgcHJvcHMub250b2xvZ3lJZCwgcHJvcHMuZW50aXR5VHlwZSwgcHJvcHMuaXJpLCBvbnRvbG9neV0pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKGVudGl0eSAmJiBwcm9wcy5lbnRpdHlUeXBlID09PSBcImNsYXNzZXNcIikge1xuICAgICAgICAgICAgZGlzcGF0Y2goXG4gICAgICAgICAgICAgICAgZ2V0Q2xhc3NJbnN0YW5jZXMoe1xuICAgICAgICAgICAgICAgICAgICBvbnRvbG9neUlkOiBlbnRpdHkuZ2V0T250b2xvZ3lJZCgpLFxuICAgICAgICAgICAgICAgICAgICBjbGFzc0lyaTogZW50aXR5LmdldElyaSgpLFxuICAgICAgICAgICAgICAgICAgICBzZWFyY2hQYXJhbXM6IG5ldyBVUkxTZWFyY2hQYXJhbXMoKSxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH0sIFtkaXNwYXRjaCwgcHJvcHMub250b2xvZ3lJZCwgcHJvcHMuZW50aXR5VHlwZSwgcHJvcHMuaXJpLCBlbnRpdHldKTtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxGcmFnbWVudD5cbiAgICAgICAgICAgIHsobG9hZGluZ0VudGl0eSB8fCBsb2FkaW5nT250b2xvZ3kgfHwgbG9hZGluZ0NsYXNzSW5zdGFuY2VzKSAmJlxuICAgICAgICAgICAgICAgIDxDaXJjdWxhclByb2dyZXNzLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHshbG9hZGluZ0VudGl0eSAmJiAhbG9hZGluZ09udG9sb2d5ICYmICFsb2FkaW5nQ2xhc3NJbnN0YW5jZXMgJiYgb250b2xvZ3kgJiYgKFxuICAgICAgICAgICAgICAgIDxFbnRpdHlUcmVlXG4gICAgICAgICAgICAgICAgICAgIG9udG9sb2d5PXtvbnRvbG9neX1cbiAgICAgICAgICAgICAgICAgICAgZW50aXR5VHlwZT17ZW50aXR5VHlwZSA/IGVudGl0eVR5cGUgOiBcImVudGl0aWVzXCJ9XG4gICAgICAgICAgICAgICAgICAgIGxhbmc9e2xhbmd9XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkRW50aXR5PXtlbnRpdHl9XG4gICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb0VudGl0eT17aGFuZGxlTmF2aWdhdGVUb0VudGl0eX1cbiAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvT250b2xvZ3k9e2hhbmRsZU5hdmlnYXRlVG9PbnRvbG9neX1cbiAgICAgICAgICAgICAgICAgICAgYXBpVXJsPXtwcm9wcy5hcGlVcmx9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgIDwvRnJhZ21lbnQ+XG4gICAgKTtcbn1cbiIsICIvLyBUaGUgcHJpbWFyeSBlbnRyeSBwb2ludCBhc3N1bWVzIHdlJ3JlIHdvcmtpbmcgd2l0aCBzdGFuZGFyZCBSZWFjdERPTS9STiwgYnV0XG4vLyBvbGRlciB2ZXJzaW9ucyB0aGF0IGRvIG5vdCBpbmNsdWRlIGB1c2VTeW5jRXh0ZXJuYWxTdG9yZWAgKFJlYWN0IDE2LjkgLSAxNy54KS5cbi8vIEJlY2F1c2Ugb2YgdGhhdCwgdGhlIHVzZVN5bmNFeHRlcm5hbFN0b3JlIGNvbXBhdCBzaGltIGlzIG5lZWRlZC5cbmltcG9ydCB7IHVzZVN5bmNFeHRlcm5hbFN0b3JlIH0gZnJvbSAndXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUvc2hpbSc7XG5pbXBvcnQgeyB1c2VTeW5jRXh0ZXJuYWxTdG9yZVdpdGhTZWxlY3RvciB9IGZyb20gJ3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlL3NoaW0vd2l0aC1zZWxlY3Rvcic7XG5pbXBvcnQgeyB1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyBhcyBiYXRjaCB9IGZyb20gJy4vdXRpbHMvcmVhY3RCYXRjaGVkVXBkYXRlcyc7XG5pbXBvcnQgeyBzZXRCYXRjaCB9IGZyb20gJy4vdXRpbHMvYmF0Y2gnO1xuaW1wb3J0IHsgaW5pdGlhbGl6ZVVzZVNlbGVjdG9yIH0gZnJvbSAnLi9ob29rcy91c2VTZWxlY3Rvcic7XG5pbXBvcnQgeyBpbml0aWFsaXplQ29ubmVjdCB9IGZyb20gJy4vY29tcG9uZW50cy9jb25uZWN0JztcbmluaXRpYWxpemVVc2VTZWxlY3Rvcih1c2VTeW5jRXh0ZXJuYWxTdG9yZVdpdGhTZWxlY3Rvcik7XG5pbml0aWFsaXplQ29ubmVjdCh1c2VTeW5jRXh0ZXJuYWxTdG9yZSk7IC8vIEVuYWJsZSBiYXRjaGVkIHVwZGF0ZXMgaW4gb3VyIHN1YnNjcmlwdGlvbnMgZm9yIHVzZVxuLy8gd2l0aCBzdGFuZGFyZCBSZWFjdCByZW5kZXJlcnMgKFJlYWN0RE9NLCBSZWFjdCBOYXRpdmUpXG5cbnNldEJhdGNoKGJhdGNoKTtcbmV4cG9ydCB7IGJhdGNoIH07XG5leHBvcnQgKiBmcm9tICcuL2V4cG9ydHMnOyIsICJleHBvcnQgeyB1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyB9IGZyb20gJ3JlYWN0LWRvbSc7IiwgIi8vIERlZmF1bHQgdG8gYSBkdW1teSBcImJhdGNoXCIgaW1wbGVtZW50YXRpb24gdGhhdCBqdXN0IHJ1bnMgdGhlIGNhbGxiYWNrXG5mdW5jdGlvbiBkZWZhdWx0Tm9vcEJhdGNoKGNhbGxiYWNrKSB7XG4gIGNhbGxiYWNrKCk7XG59XG5cbmxldCBiYXRjaCA9IGRlZmF1bHROb29wQmF0Y2g7IC8vIEFsbG93IGluamVjdGluZyBhbm90aGVyIGJhdGNoaW5nIGZ1bmN0aW9uIGxhdGVyXG5cbmV4cG9ydCBjb25zdCBzZXRCYXRjaCA9IG5ld0JhdGNoID0+IGJhdGNoID0gbmV3QmF0Y2g7IC8vIFN1cHBseSBhIGdldHRlciBqdXN0IHRvIHNraXAgZGVhbGluZyB3aXRoIEVTTSBiaW5kaW5nc1xuXG5leHBvcnQgY29uc3QgZ2V0QmF0Y2ggPSAoKSA9PiBiYXRjaDsiLCAiaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZURlYnVnVmFsdWUsIHVzZVJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNyZWF0ZVJlZHV4Q29udGV4dEhvb2ssIHVzZVJlZHV4Q29udGV4dCBhcyB1c2VEZWZhdWx0UmVkdXhDb250ZXh0IH0gZnJvbSAnLi91c2VSZWR1eENvbnRleHQnO1xuaW1wb3J0IHsgUmVhY3RSZWR1eENvbnRleHQgfSBmcm9tICcuLi9jb21wb25lbnRzL0NvbnRleHQnO1xuaW1wb3J0IHsgbm90SW5pdGlhbGl6ZWQgfSBmcm9tICcuLi91dGlscy91c2VTeW5jRXh0ZXJuYWxTdG9yZSc7XG5sZXQgdXNlU3luY0V4dGVybmFsU3RvcmVXaXRoU2VsZWN0b3IgPSBub3RJbml0aWFsaXplZDtcbmV4cG9ydCBjb25zdCBpbml0aWFsaXplVXNlU2VsZWN0b3IgPSBmbiA9PiB7XG4gIHVzZVN5bmNFeHRlcm5hbFN0b3JlV2l0aFNlbGVjdG9yID0gZm47XG59O1xuXG5jb25zdCByZWZFcXVhbGl0eSA9IChhLCBiKSA9PiBhID09PSBiO1xuLyoqXHJcbiAqIEhvb2sgZmFjdG9yeSwgd2hpY2ggY3JlYXRlcyBhIGB1c2VTZWxlY3RvcmAgaG9vayBib3VuZCB0byBhIGdpdmVuIGNvbnRleHQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7UmVhY3QuQ29udGV4dH0gW2NvbnRleHQ9UmVhY3RSZWR1eENvbnRleHRdIENvbnRleHQgcGFzc2VkIHRvIHlvdXIgYDxQcm92aWRlcj5gLlxyXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgYHVzZVNlbGVjdG9yYCBob29rIGJvdW5kIHRvIHRoZSBzcGVjaWZpZWQgY29udGV4dC5cclxuICovXG5cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNlbGVjdG9ySG9vayhjb250ZXh0ID0gUmVhY3RSZWR1eENvbnRleHQpIHtcbiAgY29uc3QgdXNlUmVkdXhDb250ZXh0ID0gY29udGV4dCA9PT0gUmVhY3RSZWR1eENvbnRleHQgPyB1c2VEZWZhdWx0UmVkdXhDb250ZXh0IDogY3JlYXRlUmVkdXhDb250ZXh0SG9vayhjb250ZXh0KTtcbiAgcmV0dXJuIGZ1bmN0aW9uIHVzZVNlbGVjdG9yKHNlbGVjdG9yLCBlcXVhbGl0eUZuT3JPcHRpb25zID0ge30pIHtcbiAgICBjb25zdCB7XG4gICAgICBlcXVhbGl0eUZuID0gcmVmRXF1YWxpdHksXG4gICAgICBzdGFiaWxpdHlDaGVjayA9IHVuZGVmaW5lZCxcbiAgICAgIG5vb3BDaGVjayA9IHVuZGVmaW5lZFxuICAgIH0gPSB0eXBlb2YgZXF1YWxpdHlGbk9yT3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJyA/IHtcbiAgICAgIGVxdWFsaXR5Rm46IGVxdWFsaXR5Rm5Pck9wdGlvbnNcbiAgICB9IDogZXF1YWxpdHlGbk9yT3B0aW9ucztcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAoIXNlbGVjdG9yKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgWW91IG11c3QgcGFzcyBhIHNlbGVjdG9yIHRvIHVzZVNlbGVjdG9yYCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygc2VsZWN0b3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBZb3UgbXVzdCBwYXNzIGEgZnVuY3Rpb24gYXMgYSBzZWxlY3RvciB0byB1c2VTZWxlY3RvcmApO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGVxdWFsaXR5Rm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBZb3UgbXVzdCBwYXNzIGEgZnVuY3Rpb24gYXMgYW4gZXF1YWxpdHkgZnVuY3Rpb24gdG8gdXNlU2VsZWN0b3JgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB7XG4gICAgICBzdG9yZSxcbiAgICAgIHN1YnNjcmlwdGlvbixcbiAgICAgIGdldFNlcnZlclN0YXRlLFxuICAgICAgc3RhYmlsaXR5Q2hlY2s6IGdsb2JhbFN0YWJpbGl0eUNoZWNrLFxuICAgICAgbm9vcENoZWNrOiBnbG9iYWxOb29wQ2hlY2tcbiAgICB9ID0gdXNlUmVkdXhDb250ZXh0KCk7XG4gICAgY29uc3QgZmlyc3RSdW4gPSB1c2VSZWYodHJ1ZSk7XG4gICAgY29uc3Qgd3JhcHBlZFNlbGVjdG9yID0gdXNlQ2FsbGJhY2soe1xuICAgICAgW3NlbGVjdG9yLm5hbWVdKHN0YXRlKSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkID0gc2VsZWN0b3Ioc3RhdGUpO1xuXG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgY29uc3QgZmluYWxTdGFiaWxpdHlDaGVjayA9IHR5cGVvZiBzdGFiaWxpdHlDaGVjayA9PT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWxTdGFiaWxpdHlDaGVjayA6IHN0YWJpbGl0eUNoZWNrO1xuXG4gICAgICAgICAgaWYgKGZpbmFsU3RhYmlsaXR5Q2hlY2sgPT09ICdhbHdheXMnIHx8IGZpbmFsU3RhYmlsaXR5Q2hlY2sgPT09ICdvbmNlJyAmJiBmaXJzdFJ1bi5jdXJyZW50KSB7XG4gICAgICAgICAgICBjb25zdCB0b0NvbXBhcmUgPSBzZWxlY3RvcihzdGF0ZSk7XG5cbiAgICAgICAgICAgIGlmICghZXF1YWxpdHlGbihzZWxlY3RlZCwgdG9Db21wYXJlKSkge1xuICAgICAgICAgICAgICBsZXQgc3RhY2sgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIDtcbiAgICAgICAgICAgICAgICAoe1xuICAgICAgICAgICAgICAgICAgc3RhY2tcbiAgICAgICAgICAgICAgICB9ID0gZSk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1NlbGVjdG9yICcgKyAoc2VsZWN0b3IubmFtZSB8fCAndW5rbm93bicpICsgJyByZXR1cm5lZCBhIGRpZmZlcmVudCByZXN1bHQgd2hlbiBjYWxsZWQgd2l0aCB0aGUgc2FtZSBwYXJhbWV0ZXJzLiBUaGlzIGNhbiBsZWFkIHRvIHVubmVjZXNzYXJ5IHJlcmVuZGVycy4nICsgJ1xcblNlbGVjdG9ycyB0aGF0IHJldHVybiBhIG5ldyByZWZlcmVuY2UgKHN1Y2ggYXMgYW4gb2JqZWN0IG9yIGFuIGFycmF5KSBzaG91bGQgYmUgbWVtb2l6ZWQ6IGh0dHBzOi8vcmVkdXguanMub3JnL3VzYWdlL2Rlcml2aW5nLWRhdGEtc2VsZWN0b3JzI29wdGltaXppbmctc2VsZWN0b3JzLXdpdGgtbWVtb2l6YXRpb24nLCB7XG4gICAgICAgICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWQsXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWQyOiB0b0NvbXBhcmUsXG4gICAgICAgICAgICAgICAgc3RhY2tcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgZmluYWxOb29wQ2hlY2sgPSB0eXBlb2Ygbm9vcENoZWNrID09PSAndW5kZWZpbmVkJyA/IGdsb2JhbE5vb3BDaGVjayA6IG5vb3BDaGVjaztcblxuICAgICAgICAgIGlmIChmaW5hbE5vb3BDaGVjayA9PT0gJ2Fsd2F5cycgfHwgZmluYWxOb29wQ2hlY2sgPT09ICdvbmNlJyAmJiBmaXJzdFJ1bi5jdXJyZW50KSB7XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWQgPT09IHN0YXRlKSB7XG4gICAgICAgICAgICAgIGxldCBzdGFjayA9IHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigpO1xuICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgO1xuICAgICAgICAgICAgICAgICh7XG4gICAgICAgICAgICAgICAgICBzdGFja1xuICAgICAgICAgICAgICAgIH0gPSBlKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnNvbGUud2FybignU2VsZWN0b3IgJyArIChzZWxlY3Rvci5uYW1lIHx8ICd1bmtub3duJykgKyAnIHJldHVybmVkIHRoZSByb290IHN0YXRlIHdoZW4gY2FsbGVkLiBUaGlzIGNhbiBsZWFkIHRvIHVubmVjZXNzYXJ5IHJlcmVuZGVycy4nICsgJ1xcblNlbGVjdG9ycyB0aGF0IHJldHVybiB0aGUgZW50aXJlIHN0YXRlIGFyZSBhbG1vc3QgY2VydGFpbmx5IGEgbWlzdGFrZSwgYXMgdGhleSB3aWxsIGNhdXNlIGEgcmVyZW5kZXIgd2hlbmV2ZXIgKmFueXRoaW5nKiBpbiBzdGF0ZSBjaGFuZ2VzLicsIHtcbiAgICAgICAgICAgICAgICBzdGFja1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZmlyc3RSdW4uY3VycmVudCkgZmlyc3RSdW4uY3VycmVudCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNlbGVjdGVkO1xuICAgICAgfVxuXG4gICAgfVtzZWxlY3Rvci5uYW1lXSwgW3NlbGVjdG9yLCBnbG9iYWxTdGFiaWxpdHlDaGVjaywgc3RhYmlsaXR5Q2hlY2tdKTtcbiAgICBjb25zdCBzZWxlY3RlZFN0YXRlID0gdXNlU3luY0V4dGVybmFsU3RvcmVXaXRoU2VsZWN0b3Ioc3Vic2NyaXB0aW9uLmFkZE5lc3RlZFN1Yiwgc3RvcmUuZ2V0U3RhdGUsIGdldFNlcnZlclN0YXRlIHx8IHN0b3JlLmdldFN0YXRlLCB3cmFwcGVkU2VsZWN0b3IsIGVxdWFsaXR5Rm4pO1xuICAgIHVzZURlYnVnVmFsdWUoc2VsZWN0ZWRTdGF0ZSk7XG4gICAgcmV0dXJuIHNlbGVjdGVkU3RhdGU7XG4gIH07XG59XG4vKipcclxuICogQSBob29rIHRvIGFjY2VzcyB0aGUgcmVkdXggc3RvcmUncyBzdGF0ZS4gVGhpcyBob29rIHRha2VzIGEgc2VsZWN0b3IgZnVuY3Rpb25cclxuICogYXMgYW4gYXJndW1lbnQuIFRoZSBzZWxlY3RvciBpcyBjYWxsZWQgd2l0aCB0aGUgc3RvcmUgc3RhdGUuXHJcbiAqXHJcbiAqIFRoaXMgaG9vayB0YWtlcyBhbiBvcHRpb25hbCBlcXVhbGl0eSBjb21wYXJpc29uIGZ1bmN0aW9uIGFzIHRoZSBzZWNvbmQgcGFyYW1ldGVyXHJcbiAqIHRoYXQgYWxsb3dzIHlvdSB0byBjdXN0b21pemUgdGhlIHdheSB0aGUgc2VsZWN0ZWQgc3RhdGUgaXMgY29tcGFyZWQgdG8gZGV0ZXJtaW5lXHJcbiAqIHdoZXRoZXIgdGhlIGNvbXBvbmVudCBuZWVkcyB0byBiZSByZS1yZW5kZXJlZC5cclxuICpcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gc2VsZWN0b3IgdGhlIHNlbGVjdG9yIGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb249fSBlcXVhbGl0eUZuIHRoZSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgdXNlZCB0byBkZXRlcm1pbmUgZXF1YWxpdHlcclxuICpcclxuICogQHJldHVybnMge2FueX0gdGhlIHNlbGVjdGVkIHN0YXRlXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqXHJcbiAqIGltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcclxuICogaW1wb3J0IHsgdXNlU2VsZWN0b3IgfSBmcm9tICdyZWFjdC1yZWR1eCdcclxuICpcclxuICogZXhwb3J0IGNvbnN0IENvdW50ZXJDb21wb25lbnQgPSAoKSA9PiB7XHJcbiAqICAgY29uc3QgY291bnRlciA9IHVzZVNlbGVjdG9yKHN0YXRlID0+IHN0YXRlLmNvdW50ZXIpXHJcbiAqICAgcmV0dXJuIDxkaXY+e2NvdW50ZXJ9PC9kaXY+XHJcbiAqIH1cclxuICovXG5cbmV4cG9ydCBjb25zdCB1c2VTZWxlY3RvciA9IC8qI19fUFVSRV9fKi9jcmVhdGVTZWxlY3Rvckhvb2soKTsiLCAiaW1wb3J0IHsgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFJlYWN0UmVkdXhDb250ZXh0IH0gZnJvbSAnLi4vY29tcG9uZW50cy9Db250ZXh0JztcblxuLyoqXHJcbiAqIEhvb2sgZmFjdG9yeSwgd2hpY2ggY3JlYXRlcyBhIGB1c2VSZWR1eENvbnRleHRgIGhvb2sgYm91bmQgdG8gYSBnaXZlbiBjb250ZXh0LiBUaGlzIGlzIGEgbG93LWxldmVsXHJcbiAqIGhvb2sgdGhhdCB5b3Ugc2hvdWxkIHVzdWFsbHkgbm90IG5lZWQgdG8gY2FsbCBkaXJlY3RseS5cclxuICpcclxuICogQHBhcmFtIHtSZWFjdC5Db250ZXh0fSBbY29udGV4dD1SZWFjdFJlZHV4Q29udGV4dF0gQ29udGV4dCBwYXNzZWQgdG8geW91ciBgPFByb3ZpZGVyPmAuXHJcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gQSBgdXNlUmVkdXhDb250ZXh0YCBob29rIGJvdW5kIHRvIHRoZSBzcGVjaWZpZWQgY29udGV4dC5cclxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVkdXhDb250ZXh0SG9vayhjb250ZXh0ID0gUmVhY3RSZWR1eENvbnRleHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHVzZVJlZHV4Q29udGV4dCgpIHtcbiAgICBjb25zdCBjb250ZXh0VmFsdWUgPSB1c2VDb250ZXh0KGNvbnRleHQpO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIWNvbnRleHRWYWx1ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgZmluZCByZWFjdC1yZWR1eCBjb250ZXh0IHZhbHVlOyBwbGVhc2UgZW5zdXJlIHRoZSBjb21wb25lbnQgaXMgd3JhcHBlZCBpbiBhIDxQcm92aWRlcj4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udGV4dFZhbHVlO1xuICB9O1xufVxuLyoqXHJcbiAqIEEgaG9vayB0byBhY2Nlc3MgdGhlIHZhbHVlIG9mIHRoZSBgUmVhY3RSZWR1eENvbnRleHRgLiBUaGlzIGlzIGEgbG93LWxldmVsXHJcbiAqIGhvb2sgdGhhdCB5b3Ugc2hvdWxkIHVzdWFsbHkgbm90IG5lZWQgdG8gY2FsbCBkaXJlY3RseS5cclxuICpcclxuICogQHJldHVybnMge2FueX0gdGhlIHZhbHVlIG9mIHRoZSBgUmVhY3RSZWR1eENvbnRleHRgXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqXHJcbiAqIGltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcclxuICogaW1wb3J0IHsgdXNlUmVkdXhDb250ZXh0IH0gZnJvbSAncmVhY3QtcmVkdXgnXHJcbiAqXHJcbiAqIGV4cG9ydCBjb25zdCBDb3VudGVyQ29tcG9uZW50ID0gKCkgPT4ge1xyXG4gKiAgIGNvbnN0IHsgc3RvcmUgfSA9IHVzZVJlZHV4Q29udGV4dCgpXHJcbiAqICAgcmV0dXJuIDxkaXY+e3N0b3JlLmdldFN0YXRlKCl9PC9kaXY+XHJcbiAqIH1cclxuICovXG5cbmV4cG9ydCBjb25zdCB1c2VSZWR1eENvbnRleHQgPSAvKiNfX1BVUkVfXyovY3JlYXRlUmVkdXhDb250ZXh0SG9vaygpOyIsICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5jb25zdCBDb250ZXh0S2V5ID0gU3ltYm9sLmZvcihgcmVhY3QtcmVkdXgtY29udGV4dGApO1xuY29uc3QgZ1QgPSB0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbFRoaXMgOlxuLyogZmFsbCBiYWNrIHRvIGEgcGVyLW1vZHVsZSBzY29wZSAocHJlLTguMSBiZWhhdmlvdXIpIGlmIGBnbG9iYWxUaGlzYCBpcyBub3QgYXZhaWxhYmxlICovXG57fTtcblxuZnVuY3Rpb24gZ2V0Q29udGV4dCgpIHtcbiAgdmFyIF9nVCRDb250ZXh0S2V5O1xuXG4gIGlmICghUmVhY3QuY3JlYXRlQ29udGV4dCkgcmV0dXJuIHt9O1xuICBjb25zdCBjb250ZXh0TWFwID0gKF9nVCRDb250ZXh0S2V5ID0gZ1RbQ29udGV4dEtleV0pICE9IG51bGwgPyBfZ1QkQ29udGV4dEtleSA6IGdUW0NvbnRleHRLZXldID0gbmV3IE1hcCgpO1xuICBsZXQgcmVhbENvbnRleHQgPSBjb250ZXh0TWFwLmdldChSZWFjdC5jcmVhdGVDb250ZXh0KTtcblxuICBpZiAoIXJlYWxDb250ZXh0KSB7XG4gICAgcmVhbENvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0KG51bGwpO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHJlYWxDb250ZXh0LmRpc3BsYXlOYW1lID0gJ1JlYWN0UmVkdXgnO1xuICAgIH1cblxuICAgIGNvbnRleHRNYXAuc2V0KFJlYWN0LmNyZWF0ZUNvbnRleHQsIHJlYWxDb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiByZWFsQ29udGV4dDtcbn1cblxuZXhwb3J0IGNvbnN0IFJlYWN0UmVkdXhDb250ZXh0ID0gLyojX19QVVJFX18qL2dldENvbnRleHQoKTtcbmV4cG9ydCBkZWZhdWx0IFJlYWN0UmVkdXhDb250ZXh0OyIsICJleHBvcnQgY29uc3Qgbm90SW5pdGlhbGl6ZWQgPSAoKSA9PiB7XG4gIHRocm93IG5ldyBFcnJvcigndVNFUyBub3QgaW5pdGlhbGl6ZWQhJyk7XG59OyIsICJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wicmVhY3RSZWR1eEZvcndhcmRlZFJlZlwiXTtcblxuLyogZXNsaW50LWRpc2FibGUgdmFsaWQtanNkb2MsIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAqL1xuaW1wb3J0IGhvaXN0U3RhdGljcyBmcm9tICdob2lzdC1ub24tcmVhY3Qtc3RhdGljcyc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBpc1ZhbGlkRWxlbWVudFR5cGUsIGlzQ29udGV4dENvbnN1bWVyIH0gZnJvbSAncmVhY3QtaXMnO1xuaW1wb3J0IGRlZmF1bHRTZWxlY3RvckZhY3RvcnkgZnJvbSAnLi4vY29ubmVjdC9zZWxlY3RvckZhY3RvcnknO1xuaW1wb3J0IHsgbWFwRGlzcGF0Y2hUb1Byb3BzRmFjdG9yeSB9IGZyb20gJy4uL2Nvbm5lY3QvbWFwRGlzcGF0Y2hUb1Byb3BzJztcbmltcG9ydCB7IG1hcFN0YXRlVG9Qcm9wc0ZhY3RvcnkgfSBmcm9tICcuLi9jb25uZWN0L21hcFN0YXRlVG9Qcm9wcyc7XG5pbXBvcnQgeyBtZXJnZVByb3BzRmFjdG9yeSB9IGZyb20gJy4uL2Nvbm5lY3QvbWVyZ2VQcm9wcyc7XG5pbXBvcnQgeyBjcmVhdGVTdWJzY3JpcHRpb24gfSBmcm9tICcuLi91dGlscy9TdWJzY3JpcHRpb24nO1xuaW1wb3J0IHsgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCB9IGZyb20gJy4uL3V0aWxzL3VzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QnO1xuaW1wb3J0IHNoYWxsb3dFcXVhbCBmcm9tICcuLi91dGlscy9zaGFsbG93RXF1YWwnO1xuaW1wb3J0IHdhcm5pbmcgZnJvbSAnLi4vdXRpbHMvd2FybmluZyc7XG5pbXBvcnQgeyBSZWFjdFJlZHV4Q29udGV4dCB9IGZyb20gJy4vQ29udGV4dCc7XG5pbXBvcnQgeyBub3RJbml0aWFsaXplZCB9IGZyb20gJy4uL3V0aWxzL3VzZVN5bmNFeHRlcm5hbFN0b3JlJztcbmxldCB1c2VTeW5jRXh0ZXJuYWxTdG9yZSA9IG5vdEluaXRpYWxpemVkO1xuZXhwb3J0IGNvbnN0IGluaXRpYWxpemVDb25uZWN0ID0gZm4gPT4ge1xuICB1c2VTeW5jRXh0ZXJuYWxTdG9yZSA9IGZuO1xufTsgLy8gRGVmaW5lIHNvbWUgY29uc3RhbnQgYXJyYXlzIGp1c3QgdG8gYXZvaWQgcmUtY3JlYXRpbmcgdGhlc2VcblxuY29uc3QgRU1QVFlfQVJSQVkgPSBbbnVsbCwgMF07XG5jb25zdCBOT19TVUJTQ1JJUFRJT05fQVJSQVkgPSBbbnVsbCwgbnVsbF07IC8vIEF0dGVtcHRzIHRvIHN0cmluZ2lmeSB3aGF0ZXZlciBub3QtcmVhbGx5LWEtY29tcG9uZW50IHZhbHVlIHdlIHdlcmUgZ2l2ZW5cbi8vIGZvciBsb2dnaW5nIGluIGFuIGVycm9yIG1lc3NhZ2VcblxuY29uc3Qgc3RyaW5naWZ5Q29tcG9uZW50ID0gQ29tcCA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KENvbXApO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4gU3RyaW5nKENvbXApO1xuICB9XG59O1xuXG4vLyBUaGlzIGlzIFwianVzdFwiIGEgYHVzZUxheW91dEVmZmVjdGAsIGJ1dCB3aXRoIHR3byBtb2RpZmljYXRpb25zOlxuLy8gLSB3ZSBuZWVkIHRvIGZhbGwgYmFjayB0byBgdXNlRWZmZWN0YCBpbiBTU1IgdG8gYXZvaWQgYW5ub3lpbmcgd2FybmluZ3Ncbi8vIC0gd2UgZXh0cmFjdCB0aGlzIHRvIGEgc2VwYXJhdGUgZnVuY3Rpb24gdG8gYXZvaWQgY2xvc2luZyBvdmVyIHZhbHVlc1xuLy8gICBhbmQgY2F1c2luZyBtZW1vcnkgbGVha3NcbmZ1bmN0aW9uIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3RXaXRoQXJncyhlZmZlY3RGdW5jLCBlZmZlY3RBcmdzLCBkZXBlbmRlbmNpZXMpIHtcbiAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCgoKSA9PiBlZmZlY3RGdW5jKC4uLmVmZmVjdEFyZ3MpLCBkZXBlbmRlbmNpZXMpO1xufSAvLyBFZmZlY3QgY2FsbGJhY2ssIGV4dHJhY3RlZDogYXNzaWduIHRoZSBsYXRlc3QgcHJvcHMgdmFsdWVzIHRvIHJlZnMgZm9yIGxhdGVyIHVzYWdlXG5cblxuZnVuY3Rpb24gY2FwdHVyZVdyYXBwZXJQcm9wcyhsYXN0V3JhcHBlclByb3BzLCBsYXN0Q2hpbGRQcm9wcywgcmVuZGVySXNTY2hlZHVsZWQsIHdyYXBwZXJQcm9wcywgLy8gYWN0dWFsQ2hpbGRQcm9wczogdW5rbm93bixcbmNoaWxkUHJvcHNGcm9tU3RvcmVVcGRhdGUsIG5vdGlmeU5lc3RlZFN1YnMpIHtcbiAgLy8gV2Ugd2FudCB0byBjYXB0dXJlIHRoZSB3cmFwcGVyIHByb3BzIGFuZCBjaGlsZCBwcm9wcyB3ZSB1c2VkIGZvciBsYXRlciBjb21wYXJpc29uc1xuICBsYXN0V3JhcHBlclByb3BzLmN1cnJlbnQgPSB3cmFwcGVyUHJvcHM7XG4gIHJlbmRlcklzU2NoZWR1bGVkLmN1cnJlbnQgPSBmYWxzZTsgLy8gSWYgdGhlIHJlbmRlciB3YXMgZnJvbSBhIHN0b3JlIHVwZGF0ZSwgY2xlYXIgb3V0IHRoYXQgcmVmZXJlbmNlIGFuZCBjYXNjYWRlIHRoZSBzdWJzY3JpYmVyIHVwZGF0ZVxuXG4gIGlmIChjaGlsZFByb3BzRnJvbVN0b3JlVXBkYXRlLmN1cnJlbnQpIHtcbiAgICBjaGlsZFByb3BzRnJvbVN0b3JlVXBkYXRlLmN1cnJlbnQgPSBudWxsO1xuICAgIG5vdGlmeU5lc3RlZFN1YnMoKTtcbiAgfVxufSAvLyBFZmZlY3QgY2FsbGJhY2ssIGV4dHJhY3RlZDogc3Vic2NyaWJlIHRvIHRoZSBSZWR1eCBzdG9yZSBvciBuZWFyZXN0IGNvbm5lY3RlZCBhbmNlc3Rvcixcbi8vIGNoZWNrIGZvciB1cGRhdGVzIGFmdGVyIGRpc3BhdGNoZWQgYWN0aW9ucywgYW5kIHRyaWdnZXIgcmUtcmVuZGVycy5cblxuXG5mdW5jdGlvbiBzdWJzY3JpYmVVcGRhdGVzKHNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlcywgc3RvcmUsIHN1YnNjcmlwdGlvbiwgY2hpbGRQcm9wc1NlbGVjdG9yLCBsYXN0V3JhcHBlclByb3BzLCBsYXN0Q2hpbGRQcm9wcywgcmVuZGVySXNTY2hlZHVsZWQsIGlzTW91bnRlZCwgY2hpbGRQcm9wc0Zyb21TdG9yZVVwZGF0ZSwgbm90aWZ5TmVzdGVkU3VicywgLy8gZm9yY2VDb21wb25lbnRVcGRhdGVEaXNwYXRjaDogUmVhY3QuRGlzcGF0Y2g8YW55PixcbmFkZGl0aW9uYWxTdWJzY3JpYmVMaXN0ZW5lcikge1xuICAvLyBJZiB3ZSdyZSBub3Qgc3Vic2NyaWJlZCB0byB0aGUgc3RvcmUsIG5vdGhpbmcgdG8gZG8gaGVyZVxuICBpZiAoIXNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlcykgcmV0dXJuICgpID0+IHt9OyAvLyBDYXB0dXJlIHZhbHVlcyBmb3IgY2hlY2tpbmcgaWYgYW5kIHdoZW4gdGhpcyBjb21wb25lbnQgdW5tb3VudHNcblxuICBsZXQgZGlkVW5zdWJzY3JpYmUgPSBmYWxzZTtcbiAgbGV0IGxhc3RUaHJvd25FcnJvciA9IG51bGw7IC8vIFdlJ2xsIHJ1biB0aGlzIGNhbGxiYWNrIGV2ZXJ5IHRpbWUgYSBzdG9yZSBzdWJzY3JpcHRpb24gdXBkYXRlIHByb3BhZ2F0ZXMgdG8gdGhpcyBjb21wb25lbnRcblxuICBjb25zdCBjaGVja0ZvclVwZGF0ZXMgPSAoKSA9PiB7XG4gICAgaWYgKGRpZFVuc3Vic2NyaWJlIHx8ICFpc01vdW50ZWQuY3VycmVudCkge1xuICAgICAgLy8gRG9uJ3QgcnVuIHN0YWxlIGxpc3RlbmVycy5cbiAgICAgIC8vIFJlZHV4IGRvZXNuJ3QgZ3VhcmFudGVlIHVuc3Vic2NyaXB0aW9ucyBoYXBwZW4gdW50aWwgbmV4dCBkaXNwYXRjaC5cbiAgICAgIHJldHVybjtcbiAgICB9IC8vIFRPRE8gV2UncmUgY3VycmVudGx5IGNhbGxpbmcgZ2V0U3RhdGUgb3Vyc2VsdmVzIGhlcmUsIHJhdGhlciB0aGFuIGxldHRpbmcgYHVTRVNgIGRvIGl0XG5cblxuICAgIGNvbnN0IGxhdGVzdFN0b3JlU3RhdGUgPSBzdG9yZS5nZXRTdGF0ZSgpO1xuICAgIGxldCBuZXdDaGlsZFByb3BzLCBlcnJvcjtcblxuICAgIHRyeSB7XG4gICAgICAvLyBBY3R1YWxseSBydW4gdGhlIHNlbGVjdG9yIHdpdGggdGhlIG1vc3QgcmVjZW50IHN0b3JlIHN0YXRlIGFuZCB3cmFwcGVyIHByb3BzXG4gICAgICAvLyB0byBkZXRlcm1pbmUgd2hhdCB0aGUgY2hpbGQgcHJvcHMgc2hvdWxkIGJlXG4gICAgICBuZXdDaGlsZFByb3BzID0gY2hpbGRQcm9wc1NlbGVjdG9yKGxhdGVzdFN0b3JlU3RhdGUsIGxhc3RXcmFwcGVyUHJvcHMuY3VycmVudCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZXJyb3IgPSBlO1xuICAgICAgbGFzdFRocm93bkVycm9yID0gZTtcbiAgICB9XG5cbiAgICBpZiAoIWVycm9yKSB7XG4gICAgICBsYXN0VGhyb3duRXJyb3IgPSBudWxsO1xuICAgIH0gLy8gSWYgdGhlIGNoaWxkIHByb3BzIGhhdmVuJ3QgY2hhbmdlZCwgbm90aGluZyB0byBkbyBoZXJlIC0gY2FzY2FkZSB0aGUgc3Vic2NyaXB0aW9uIHVwZGF0ZVxuXG5cbiAgICBpZiAobmV3Q2hpbGRQcm9wcyA9PT0gbGFzdENoaWxkUHJvcHMuY3VycmVudCkge1xuICAgICAgaWYgKCFyZW5kZXJJc1NjaGVkdWxlZC5jdXJyZW50KSB7XG4gICAgICAgIG5vdGlmeU5lc3RlZFN1YnMoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU2F2ZSByZWZlcmVuY2VzIHRvIHRoZSBuZXcgY2hpbGQgcHJvcHMuICBOb3RlIHRoYXQgd2UgdHJhY2sgdGhlIFwiY2hpbGQgcHJvcHMgZnJvbSBzdG9yZSB1cGRhdGVcIlxuICAgICAgLy8gYXMgYSByZWYgaW5zdGVhZCBvZiBhIHVzZVN0YXRlL3VzZVJlZHVjZXIgYmVjYXVzZSB3ZSBuZWVkIGEgd2F5IHRvIGRldGVybWluZSBpZiB0aGF0IHZhbHVlIGhhc1xuICAgICAgLy8gYmVlbiBwcm9jZXNzZWQuICBJZiB0aGlzIHdlbnQgaW50byB1c2VTdGF0ZS91c2VSZWR1Y2VyLCB3ZSBjb3VsZG4ndCBjbGVhciBvdXQgdGhlIHZhbHVlIHdpdGhvdXRcbiAgICAgIC8vIGZvcmNpbmcgYW5vdGhlciByZS1yZW5kZXIsIHdoaWNoIHdlIGRvbid0IHdhbnQuXG4gICAgICBsYXN0Q2hpbGRQcm9wcy5jdXJyZW50ID0gbmV3Q2hpbGRQcm9wcztcbiAgICAgIGNoaWxkUHJvcHNGcm9tU3RvcmVVcGRhdGUuY3VycmVudCA9IG5ld0NoaWxkUHJvcHM7XG4gICAgICByZW5kZXJJc1NjaGVkdWxlZC5jdXJyZW50ID0gdHJ1ZTsgLy8gVE9ETyBUaGlzIGlzIGhhY2t5IGFuZCBub3QgaG93IGB1U0VTYCBpcyBtZWFudCB0byBiZSB1c2VkXG4gICAgICAvLyBUcmlnZ2VyIHRoZSBSZWFjdCBgdXNlU3luY0V4dGVybmFsU3RvcmVgIHN1YnNjcmliZXJcblxuICAgICAgYWRkaXRpb25hbFN1YnNjcmliZUxpc3RlbmVyKCk7XG4gICAgfVxuICB9OyAvLyBBY3R1YWxseSBzdWJzY3JpYmUgdG8gdGhlIG5lYXJlc3QgY29ubmVjdGVkIGFuY2VzdG9yIChvciBzdG9yZSlcblxuXG4gIHN1YnNjcmlwdGlvbi5vblN0YXRlQ2hhbmdlID0gY2hlY2tGb3JVcGRhdGVzO1xuICBzdWJzY3JpcHRpb24udHJ5U3Vic2NyaWJlKCk7IC8vIFB1bGwgZGF0YSBmcm9tIHRoZSBzdG9yZSBhZnRlciBmaXJzdCByZW5kZXIgaW4gY2FzZSB0aGUgc3RvcmUgaGFzXG4gIC8vIGNoYW5nZWQgc2luY2Ugd2UgYmVnYW4uXG5cbiAgY2hlY2tGb3JVcGRhdGVzKCk7XG5cbiAgY29uc3QgdW5zdWJzY3JpYmVXcmFwcGVyID0gKCkgPT4ge1xuICAgIGRpZFVuc3Vic2NyaWJlID0gdHJ1ZTtcbiAgICBzdWJzY3JpcHRpb24udHJ5VW5zdWJzY3JpYmUoKTtcbiAgICBzdWJzY3JpcHRpb24ub25TdGF0ZUNoYW5nZSA9IG51bGw7XG5cbiAgICBpZiAobGFzdFRocm93bkVycm9yKSB7XG4gICAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgd2UgY2F1Z2h0IGFuIGVycm9yIGR1ZSB0byBhIGJhZCBtYXBTdGF0ZSBmdW5jdGlvbiwgYnV0IHRoZVxuICAgICAgLy8gcGFyZW50IHJlLXJlbmRlcmVkIHdpdGhvdXQgdGhpcyBjb21wb25lbnQgYW5kIHdlJ3JlIGFib3V0IHRvIHVubW91bnQuXG4gICAgICAvLyBUaGlzIHNob3VsZG4ndCBoYXBwZW4gYXMgbG9uZyBhcyB3ZSBkbyB0b3AtZG93biBzdWJzY3JpcHRpb25zIGNvcnJlY3RseSwgYnV0XG4gICAgICAvLyBpZiB3ZSBldmVyIGRvIHRob3NlIHdyb25nLCB0aGlzIHRocm93IHdpbGwgc3VyZmFjZSB0aGUgZXJyb3IgaW4gb3VyIHRlc3RzLlxuICAgICAgLy8gSW4gdGhhdCBjYXNlLCB0aHJvdyB0aGUgZXJyb3IgZnJvbSBoZXJlIHNvIGl0IGRvZXNuJ3QgZ2V0IGxvc3QuXG4gICAgICB0aHJvdyBsYXN0VGhyb3duRXJyb3I7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiB1bnN1YnNjcmliZVdyYXBwZXI7XG59IC8vIFJlZHVjZXIgaW5pdGlhbCBzdGF0ZSBjcmVhdGlvbiBmb3Igb3VyIHVwZGF0ZSByZWR1Y2VyXG5cblxuY29uc3QgaW5pdFN0YXRlVXBkYXRlcyA9ICgpID0+IEVNUFRZX0FSUkFZO1xuXG5mdW5jdGlvbiBzdHJpY3RFcXVhbChhLCBiKSB7XG4gIHJldHVybiBhID09PSBiO1xufVxuLyoqXHJcbiAqIEluZmVycyB0aGUgdHlwZSBvZiBwcm9wcyB0aGF0IGEgY29ubmVjdG9yIHdpbGwgaW5qZWN0IGludG8gYSBjb21wb25lbnQuXHJcbiAqL1xuXG5cbmxldCBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRQdXJlT3B0aW9uID0gZmFsc2U7XG4vKipcclxuICogQ29ubmVjdHMgYSBSZWFjdCBjb21wb25lbnQgdG8gYSBSZWR1eCBzdG9yZS5cclxuICpcclxuICogLSBXaXRob3V0IGFyZ3VtZW50cywganVzdCB3cmFwcyB0aGUgY29tcG9uZW50LCB3aXRob3V0IGNoYW5naW5nIHRoZSBiZWhhdmlvciAvIHByb3BzXHJcbiAqXHJcbiAqIC0gSWYgMiBwYXJhbXMgYXJlIHBhc3NlZCAoM3JkIHBhcmFtLCBtZXJnZVByb3BzLCBpcyBza2lwcGVkKSwgZGVmYXVsdCBiZWhhdmlvclxyXG4gKiBpcyB0byBvdmVycmlkZSBvd25Qcm9wcyAoYXMgc3RhdGVkIGluIHRoZSBkb2NzKSwgc28gd2hhdCByZW1haW5zIGlzIGV2ZXJ5dGhpbmcgdGhhdCdzXHJcbiAqIG5vdCBhIHN0YXRlIG9yIGRpc3BhdGNoIHByb3BcclxuICpcclxuICogLSBXaGVuIDNyZCBwYXJhbSBpcyBwYXNzZWQsIHdlIGRvbid0IGtub3cgaWYgb3duUHJvcHMgcHJvcGFnYXRlIGFuZCB3aGV0aGVyIHRoZXlcclxuICogc2hvdWxkIGJlIHZhbGlkIGNvbXBvbmVudCBwcm9wcywgYmVjYXVzZSBpdCBkZXBlbmRzIG9uIG1lcmdlUHJvcHMgaW1wbGVtZW50YXRpb24uXHJcbiAqIEFzIHN1Y2gsIGl0IGlzIHRoZSB1c2VyJ3MgcmVzcG9uc2liaWxpdHkgdG8gZXh0ZW5kIG93blByb3BzIGludGVyZmFjZSBmcm9tIHN0YXRlIG9yXHJcbiAqIGRpc3BhdGNoIHByb3BzIG9yIGJvdGggd2hlbiBhcHBsaWNhYmxlXHJcbiAqXHJcbiAqIEBwYXJhbSBtYXBTdGF0ZVRvUHJvcHMgQSBmdW5jdGlvbiB0aGF0IGV4dHJhY3RzIHZhbHVlcyBmcm9tIHN0YXRlXHJcbiAqIEBwYXJhbSBtYXBEaXNwYXRjaFRvUHJvcHMgU2V0dXAgZm9yIGRpc3BhdGNoaW5nIGFjdGlvbnNcclxuICogQHBhcmFtIG1lcmdlUHJvcHMgT3B0aW9uYWwgY2FsbGJhY2sgdG8gbWVyZ2Ugc3RhdGUgYW5kIGRpc3BhdGNoIHByb3BzIHRvZ2V0aGVyXHJcbiAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIGNvbmZpZ3VyaW5nIHRoZSBjb25uZWN0aW9uXHJcbiAqXHJcbiAqL1xuXG5mdW5jdGlvbiBjb25uZWN0KG1hcFN0YXRlVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzLCBtZXJnZVByb3BzLCB7XG4gIC8vIFRoZSBgcHVyZWAgb3B0aW9uIGhhcyBiZWVuIHJlbW92ZWQsIHNvIFRTIGRvZXNuJ3QgbGlrZSB1cyBkZXN0cnVjdHVyaW5nIHRoaXMgdG8gY2hlY2sgaXRzIGV4aXN0ZW5jZS5cbiAgLy8gQHRzLWlnbm9yZVxuICBwdXJlLFxuICBhcmVTdGF0ZXNFcXVhbCA9IHN0cmljdEVxdWFsLFxuICBhcmVPd25Qcm9wc0VxdWFsID0gc2hhbGxvd0VxdWFsLFxuICBhcmVTdGF0ZVByb3BzRXF1YWwgPSBzaGFsbG93RXF1YWwsXG4gIGFyZU1lcmdlZFByb3BzRXF1YWwgPSBzaGFsbG93RXF1YWwsXG4gIC8vIHVzZSBSZWFjdCdzIGZvcndhcmRSZWYgdG8gZXhwb3NlIGEgcmVmIG9mIHRoZSB3cmFwcGVkIGNvbXBvbmVudFxuICBmb3J3YXJkUmVmID0gZmFsc2UsXG4gIC8vIHRoZSBjb250ZXh0IGNvbnN1bWVyIHRvIHVzZVxuICBjb250ZXh0ID0gUmVhY3RSZWR1eENvbnRleHRcbn0gPSB7fSkge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmIChwdXJlICE9PSB1bmRlZmluZWQgJiYgIWhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZFB1cmVPcHRpb24pIHtcbiAgICAgIGhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZFB1cmVPcHRpb24gPSB0cnVlO1xuICAgICAgd2FybmluZygnVGhlIGBwdXJlYCBvcHRpb24gaGFzIGJlZW4gcmVtb3ZlZC4gYGNvbm5lY3RgIGlzIG5vdyBhbHdheXMgYSBcInB1cmUvbWVtb2l6ZWRcIiBjb21wb25lbnQnKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBDb250ZXh0ID0gY29udGV4dDtcbiAgY29uc3QgaW5pdE1hcFN0YXRlVG9Qcm9wcyA9IG1hcFN0YXRlVG9Qcm9wc0ZhY3RvcnkobWFwU3RhdGVUb1Byb3BzKTtcbiAgY29uc3QgaW5pdE1hcERpc3BhdGNoVG9Qcm9wcyA9IG1hcERpc3BhdGNoVG9Qcm9wc0ZhY3RvcnkobWFwRGlzcGF0Y2hUb1Byb3BzKTtcbiAgY29uc3QgaW5pdE1lcmdlUHJvcHMgPSBtZXJnZVByb3BzRmFjdG9yeShtZXJnZVByb3BzKTtcbiAgY29uc3Qgc2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzID0gQm9vbGVhbihtYXBTdGF0ZVRvUHJvcHMpO1xuXG4gIGNvbnN0IHdyYXBXaXRoQ29ubmVjdCA9IFdyYXBwZWRDb21wb25lbnQgPT4ge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICFpc1ZhbGlkRWxlbWVudFR5cGUoV3JhcHBlZENvbXBvbmVudCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgWW91IG11c3QgcGFzcyBhIGNvbXBvbmVudCB0byB0aGUgZnVuY3Rpb24gcmV0dXJuZWQgYnkgY29ubmVjdC4gSW5zdGVhZCByZWNlaXZlZCAke3N0cmluZ2lmeUNvbXBvbmVudChXcmFwcGVkQ29tcG9uZW50KX1gKTtcbiAgICB9XG5cbiAgICBjb25zdCB3cmFwcGVkQ29tcG9uZW50TmFtZSA9IFdyYXBwZWRDb21wb25lbnQuZGlzcGxheU5hbWUgfHwgV3JhcHBlZENvbXBvbmVudC5uYW1lIHx8ICdDb21wb25lbnQnO1xuICAgIGNvbnN0IGRpc3BsYXlOYW1lID0gYENvbm5lY3QoJHt3cmFwcGVkQ29tcG9uZW50TmFtZX0pYDtcbiAgICBjb25zdCBzZWxlY3RvckZhY3RvcnlPcHRpb25zID0ge1xuICAgICAgc2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzLFxuICAgICAgZGlzcGxheU5hbWUsXG4gICAgICB3cmFwcGVkQ29tcG9uZW50TmFtZSxcbiAgICAgIFdyYXBwZWRDb21wb25lbnQsXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBpbml0TWFwU3RhdGVUb1Byb3BzLFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgaW5pdE1hcERpc3BhdGNoVG9Qcm9wcyxcbiAgICAgIGluaXRNZXJnZVByb3BzLFxuICAgICAgYXJlU3RhdGVzRXF1YWwsXG4gICAgICBhcmVTdGF0ZVByb3BzRXF1YWwsXG4gICAgICBhcmVPd25Qcm9wc0VxdWFsLFxuICAgICAgYXJlTWVyZ2VkUHJvcHNFcXVhbFxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBDb25uZWN0RnVuY3Rpb24ocHJvcHMpIHtcbiAgICAgIGNvbnN0IFtwcm9wc0NvbnRleHQsIHJlYWN0UmVkdXhGb3J3YXJkZWRSZWYsIHdyYXBwZXJQcm9wc10gPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICAgICAgLy8gRGlzdGluZ3Vpc2ggYmV0d2VlbiBhY3R1YWwgXCJkYXRhXCIgcHJvcHMgdGhhdCB3ZXJlIHBhc3NlZCB0byB0aGUgd3JhcHBlciBjb21wb25lbnQsXG4gICAgICAgIC8vIGFuZCB2YWx1ZXMgbmVlZGVkIHRvIGNvbnRyb2wgYmVoYXZpb3IgKGZvcndhcmRlZCByZWZzLCBhbHRlcm5hdGUgY29udGV4dCBpbnN0YW5jZXMpLlxuICAgICAgICAvLyBUbyBtYWludGFpbiB0aGUgd3JhcHBlclByb3BzIG9iamVjdCByZWZlcmVuY2UsIG1lbW9pemUgdGhpcyBkZXN0cnVjdHVyaW5nLlxuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgcmVhY3RSZWR1eEZvcndhcmRlZFJlZlxuICAgICAgICB9ID0gcHJvcHMsXG4gICAgICAgICAgICAgIHdyYXBwZXJQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuXG4gICAgICAgIHJldHVybiBbcHJvcHMuY29udGV4dCwgcmVhY3RSZWR1eEZvcndhcmRlZFJlZiwgd3JhcHBlclByb3BzXTtcbiAgICAgIH0sIFtwcm9wc10pO1xuICAgICAgY29uc3QgQ29udGV4dFRvVXNlID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgICAgIC8vIFVzZXJzIG1heSBvcHRpb25hbGx5IHBhc3MgaW4gYSBjdXN0b20gY29udGV4dCBpbnN0YW5jZSB0byB1c2UgaW5zdGVhZCBvZiBvdXIgUmVhY3RSZWR1eENvbnRleHQuXG4gICAgICAgIC8vIE1lbW9pemUgdGhlIGNoZWNrIHRoYXQgZGV0ZXJtaW5lcyB3aGljaCBjb250ZXh0IGluc3RhbmNlIHdlIHNob3VsZCB1c2UuXG4gICAgICAgIHJldHVybiBwcm9wc0NvbnRleHQgJiYgcHJvcHNDb250ZXh0LkNvbnN1bWVyICYmIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgaXNDb250ZXh0Q29uc3VtZXIoIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KHByb3BzQ29udGV4dC5Db25zdW1lciwgbnVsbCkpID8gcHJvcHNDb250ZXh0IDogQ29udGV4dDtcbiAgICAgIH0sIFtwcm9wc0NvbnRleHQsIENvbnRleHRdKTsgLy8gUmV0cmlldmUgdGhlIHN0b3JlIGFuZCBhbmNlc3RvciBzdWJzY3JpcHRpb24gdmlhIGNvbnRleHQsIGlmIGF2YWlsYWJsZVxuXG4gICAgICBjb25zdCBjb250ZXh0VmFsdWUgPSBSZWFjdC51c2VDb250ZXh0KENvbnRleHRUb1VzZSk7IC8vIFRoZSBzdG9yZSBfbXVzdF8gZXhpc3QgYXMgZWl0aGVyIGEgcHJvcCBvciBpbiBjb250ZXh0LlxuICAgICAgLy8gV2UnbGwgY2hlY2sgdG8gc2VlIGlmIGl0IF9sb29rc18gbGlrZSBhIFJlZHV4IHN0b3JlIGZpcnN0LlxuICAgICAgLy8gVGhpcyBhbGxvd3MgdXMgdG8gcGFzcyB0aHJvdWdoIGEgYHN0b3JlYCBwcm9wIHRoYXQgaXMganVzdCBhIHBsYWluIHZhbHVlLlxuXG4gICAgICBjb25zdCBkaWRTdG9yZUNvbWVGcm9tUHJvcHMgPSBCb29sZWFuKHByb3BzLnN0b3JlKSAmJiBCb29sZWFuKHByb3BzLnN0b3JlLmdldFN0YXRlKSAmJiBCb29sZWFuKHByb3BzLnN0b3JlLmRpc3BhdGNoKTtcbiAgICAgIGNvbnN0IGRpZFN0b3JlQ29tZUZyb21Db250ZXh0ID0gQm9vbGVhbihjb250ZXh0VmFsdWUpICYmIEJvb2xlYW4oY29udGV4dFZhbHVlLnN0b3JlKTtcblxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIWRpZFN0b3JlQ29tZUZyb21Qcm9wcyAmJiAhZGlkU3RvcmVDb21lRnJvbUNvbnRleHQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCBcInN0b3JlXCIgaW4gdGhlIGNvbnRleHQgb2YgYCArIGBcIiR7ZGlzcGxheU5hbWV9XCIuIEVpdGhlciB3cmFwIHRoZSByb290IGNvbXBvbmVudCBpbiBhIDxQcm92aWRlcj4sIGAgKyBgb3IgcGFzcyBhIGN1c3RvbSBSZWFjdCBjb250ZXh0IHByb3ZpZGVyIHRvIDxQcm92aWRlcj4gYW5kIHRoZSBjb3JyZXNwb25kaW5nIGAgKyBgUmVhY3QgY29udGV4dCBjb25zdW1lciB0byAke2Rpc3BsYXlOYW1lfSBpbiBjb25uZWN0IG9wdGlvbnMuYCk7XG4gICAgICB9IC8vIEJhc2VkIG9uIHRoZSBwcmV2aW91cyBjaGVjaywgb25lIG9mIHRoZXNlIG11c3QgYmUgdHJ1ZVxuXG5cbiAgICAgIGNvbnN0IHN0b3JlID0gZGlkU3RvcmVDb21lRnJvbVByb3BzID8gcHJvcHMuc3RvcmUgOiBjb250ZXh0VmFsdWUuc3RvcmU7XG4gICAgICBjb25zdCBnZXRTZXJ2ZXJTdGF0ZSA9IGRpZFN0b3JlQ29tZUZyb21Db250ZXh0ID8gY29udGV4dFZhbHVlLmdldFNlcnZlclN0YXRlIDogc3RvcmUuZ2V0U3RhdGU7XG4gICAgICBjb25zdCBjaGlsZFByb3BzU2VsZWN0b3IgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICAgICAgLy8gVGhlIGNoaWxkIHByb3BzIHNlbGVjdG9yIG5lZWRzIHRoZSBzdG9yZSByZWZlcmVuY2UgYXMgYW4gaW5wdXQuXG4gICAgICAgIC8vIFJlLWNyZWF0ZSB0aGlzIHNlbGVjdG9yIHdoZW5ldmVyIHRoZSBzdG9yZSBjaGFuZ2VzLlxuICAgICAgICByZXR1cm4gZGVmYXVsdFNlbGVjdG9yRmFjdG9yeShzdG9yZS5kaXNwYXRjaCwgc2VsZWN0b3JGYWN0b3J5T3B0aW9ucyk7XG4gICAgICB9LCBbc3RvcmVdKTtcbiAgICAgIGNvbnN0IFtzdWJzY3JpcHRpb24sIG5vdGlmeU5lc3RlZFN1YnNdID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGlmICghc2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzKSByZXR1cm4gTk9fU1VCU0NSSVBUSU9OX0FSUkFZOyAvLyBUaGlzIFN1YnNjcmlwdGlvbidzIHNvdXJjZSBzaG91bGQgbWF0Y2ggd2hlcmUgc3RvcmUgY2FtZSBmcm9tOiBwcm9wcyB2cy4gY29udGV4dC4gQSBjb21wb25lbnRcbiAgICAgICAgLy8gY29ubmVjdGVkIHRvIHRoZSBzdG9yZSB2aWEgcHJvcHMgc2hvdWxkbid0IHVzZSBzdWJzY3JpcHRpb24gZnJvbSBjb250ZXh0LCBvciB2aWNlIHZlcnNhLlxuXG4gICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IGNyZWF0ZVN1YnNjcmlwdGlvbihzdG9yZSwgZGlkU3RvcmVDb21lRnJvbVByb3BzID8gdW5kZWZpbmVkIDogY29udGV4dFZhbHVlLnN1YnNjcmlwdGlvbik7IC8vIGBub3RpZnlOZXN0ZWRTdWJzYCBpcyBkdXBsaWNhdGVkIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgY29tcG9uZW50IGlzIHVubW91bnRlZCBpblxuICAgICAgICAvLyB0aGUgbWlkZGxlIG9mIHRoZSBub3RpZmljYXRpb24gbG9vcCwgd2hlcmUgYHN1YnNjcmlwdGlvbmAgd2lsbCB0aGVuIGJlIG51bGwuIFRoaXMgY2FuXG4gICAgICAgIC8vIHByb2JhYmx5IGJlIGF2b2lkZWQgaWYgU3Vic2NyaXB0aW9uJ3MgbGlzdGVuZXJzIGxvZ2ljIGlzIGNoYW5nZWQgdG8gbm90IGNhbGwgbGlzdGVuZXJzXG4gICAgICAgIC8vIHRoYXQgaGF2ZSBiZWVuIHVuc3Vic2NyaWJlZCBpbiB0aGUgIG1pZGRsZSBvZiB0aGUgbm90aWZpY2F0aW9uIGxvb3AuXG5cbiAgICAgICAgY29uc3Qgbm90aWZ5TmVzdGVkU3VicyA9IHN1YnNjcmlwdGlvbi5ub3RpZnlOZXN0ZWRTdWJzLmJpbmQoc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgcmV0dXJuIFtzdWJzY3JpcHRpb24sIG5vdGlmeU5lc3RlZFN1YnNdO1xuICAgICAgfSwgW3N0b3JlLCBkaWRTdG9yZUNvbWVGcm9tUHJvcHMsIGNvbnRleHRWYWx1ZV0pOyAvLyBEZXRlcm1pbmUgd2hhdCB7c3RvcmUsIHN1YnNjcmlwdGlvbn0gdmFsdWUgc2hvdWxkIGJlIHB1dCBpbnRvIG5lc3RlZCBjb250ZXh0LCBpZiBuZWNlc3NhcnksXG4gICAgICAvLyBhbmQgbWVtb2l6ZSB0aGF0IHZhbHVlIHRvIGF2b2lkIHVubmVjZXNzYXJ5IGNvbnRleHQgdXBkYXRlcy5cblxuICAgICAgY29uc3Qgb3ZlcnJpZGRlbkNvbnRleHRWYWx1ZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgICAgICBpZiAoZGlkU3RvcmVDb21lRnJvbVByb3BzKSB7XG4gICAgICAgICAgLy8gVGhpcyBjb21wb25lbnQgaXMgZGlyZWN0bHkgc3Vic2NyaWJlZCB0byBhIHN0b3JlIGZyb20gcHJvcHMuXG4gICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCBkZXNjZW5kYW50cyByZWFkaW5nIGZyb20gdGhpcyBzdG9yZSAtIHBhc3MgZG93biB3aGF0ZXZlclxuICAgICAgICAgIC8vIHRoZSBleGlzdGluZyBjb250ZXh0IHZhbHVlIGlzIGZyb20gdGhlIG5lYXJlc3QgY29ubmVjdGVkIGFuY2VzdG9yLlxuICAgICAgICAgIHJldHVybiBjb250ZXh0VmFsdWU7XG4gICAgICAgIH0gLy8gT3RoZXJ3aXNlLCBwdXQgdGhpcyBjb21wb25lbnQncyBzdWJzY3JpcHRpb24gaW5zdGFuY2UgaW50byBjb250ZXh0LCBzbyB0aGF0XG4gICAgICAgIC8vIGNvbm5lY3RlZCBkZXNjZW5kYW50cyB3b24ndCB1cGRhdGUgdW50aWwgYWZ0ZXIgdGhpcyBjb21wb25lbnQgaXMgZG9uZVxuXG5cbiAgICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBjb250ZXh0VmFsdWUsIHtcbiAgICAgICAgICBzdWJzY3JpcHRpb25cbiAgICAgICAgfSk7XG4gICAgICB9LCBbZGlkU3RvcmVDb21lRnJvbVByb3BzLCBjb250ZXh0VmFsdWUsIHN1YnNjcmlwdGlvbl0pOyAvLyBTZXQgdXAgcmVmcyB0byBjb29yZGluYXRlIHZhbHVlcyBiZXR3ZWVuIHRoZSBzdWJzY3JpcHRpb24gZWZmZWN0IGFuZCB0aGUgcmVuZGVyIGxvZ2ljXG5cbiAgICAgIGNvbnN0IGxhc3RDaGlsZFByb3BzID0gUmVhY3QudXNlUmVmKCk7XG4gICAgICBjb25zdCBsYXN0V3JhcHBlclByb3BzID0gUmVhY3QudXNlUmVmKHdyYXBwZXJQcm9wcyk7XG4gICAgICBjb25zdCBjaGlsZFByb3BzRnJvbVN0b3JlVXBkYXRlID0gUmVhY3QudXNlUmVmKCk7XG4gICAgICBjb25zdCByZW5kZXJJc1NjaGVkdWxlZCA9IFJlYWN0LnVzZVJlZihmYWxzZSk7XG4gICAgICBjb25zdCBpc1Byb2Nlc3NpbmdEaXNwYXRjaCA9IFJlYWN0LnVzZVJlZihmYWxzZSk7XG4gICAgICBjb25zdCBpc01vdW50ZWQgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuICAgICAgY29uc3QgbGF0ZXN0U3Vic2NyaXB0aW9uQ2FsbGJhY2tFcnJvciA9IFJlYWN0LnVzZVJlZigpO1xuICAgICAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlzTW91bnRlZC5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICBpc01vdW50ZWQuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICB9O1xuICAgICAgfSwgW10pO1xuICAgICAgY29uc3QgYWN0dWFsQ2hpbGRQcm9wc1NlbGVjdG9yID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGNvbnN0IHNlbGVjdG9yID0gKCkgPT4ge1xuICAgICAgICAgIC8vIFRyaWNreSBsb2dpYyBoZXJlOlxuICAgICAgICAgIC8vIC0gVGhpcyByZW5kZXIgbWF5IGhhdmUgYmVlbiB0cmlnZ2VyZWQgYnkgYSBSZWR1eCBzdG9yZSB1cGRhdGUgdGhhdCBwcm9kdWNlZCBuZXcgY2hpbGQgcHJvcHNcbiAgICAgICAgICAvLyAtIEhvd2V2ZXIsIHdlIG1heSBoYXZlIGdvdHRlbiBuZXcgd3JhcHBlciBwcm9wcyBhZnRlciB0aGF0XG4gICAgICAgICAgLy8gSWYgd2UgaGF2ZSBuZXcgY2hpbGQgcHJvcHMsIGFuZCB0aGUgc2FtZSB3cmFwcGVyIHByb3BzLCB3ZSBrbm93IHdlIHNob3VsZCB1c2UgdGhlIG5ldyBjaGlsZCBwcm9wcyBhcy1pcy5cbiAgICAgICAgICAvLyBCdXQsIGlmIHdlIGhhdmUgbmV3IHdyYXBwZXIgcHJvcHMsIHRob3NlIG1pZ2h0IGNoYW5nZSB0aGUgY2hpbGQgcHJvcHMsIHNvIHdlIGhhdmUgdG8gcmVjYWxjdWxhdGUgdGhpbmdzLlxuICAgICAgICAgIC8vIFNvLCB3ZSdsbCB1c2UgdGhlIGNoaWxkIHByb3BzIGZyb20gc3RvcmUgdXBkYXRlIG9ubHkgaWYgdGhlIHdyYXBwZXIgcHJvcHMgYXJlIHRoZSBzYW1lIGFzIGxhc3QgdGltZS5cbiAgICAgICAgICBpZiAoY2hpbGRQcm9wc0Zyb21TdG9yZVVwZGF0ZS5jdXJyZW50ICYmIHdyYXBwZXJQcm9wcyA9PT0gbGFzdFdyYXBwZXJQcm9wcy5jdXJyZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gY2hpbGRQcm9wc0Zyb21TdG9yZVVwZGF0ZS5jdXJyZW50O1xuICAgICAgICAgIH0gLy8gVE9ETyBXZSdyZSByZWFkaW5nIHRoZSBzdG9yZSBkaXJlY3RseSBpbiByZW5kZXIoKSBoZXJlLiBCYWQgaWRlYT9cbiAgICAgICAgICAvLyBUaGlzIHdpbGwgbGlrZWx5IGNhdXNlIEJhZCBUaGluZ3MgKFRNKSB0byBoYXBwZW4gaW4gQ29uY3VycmVudCBNb2RlLlxuICAgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBkbyB0aGlzIGJlY2F1c2Ugb24gcmVuZGVycyBfbm90XyBjYXVzZWQgYnkgc3RvcmUgdXBkYXRlcywgd2UgbmVlZCB0aGUgbGF0ZXN0IHN0b3JlIHN0YXRlXG4gICAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHdoYXQgdGhlIGNoaWxkIHByb3BzIHNob3VsZCBiZS5cblxuXG4gICAgICAgICAgcmV0dXJuIGNoaWxkUHJvcHNTZWxlY3RvcihzdG9yZS5nZXRTdGF0ZSgpLCB3cmFwcGVyUHJvcHMpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBzZWxlY3RvcjtcbiAgICAgIH0sIFtzdG9yZSwgd3JhcHBlclByb3BzXSk7IC8vIFdlIG5lZWQgdGhpcyB0byBleGVjdXRlIHN5bmNocm9ub3VzbHkgZXZlcnkgdGltZSB3ZSByZS1yZW5kZXIuIEhvd2V2ZXIsIFJlYWN0IHdhcm5zXG4gICAgICAvLyBhYm91dCB1c2VMYXlvdXRFZmZlY3QgaW4gU1NSLCBzbyB3ZSB0cnkgdG8gZGV0ZWN0IGVudmlyb25tZW50IGFuZCBmYWxsIGJhY2sgdG9cbiAgICAgIC8vIGp1c3QgdXNlRWZmZWN0IGluc3RlYWQgdG8gYXZvaWQgdGhlIHdhcm5pbmcsIHNpbmNlIG5laXRoZXIgd2lsbCBydW4gYW55d2F5LlxuXG4gICAgICBjb25zdCBzdWJzY3JpYmVGb3JSZWFjdCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgICAgICBjb25zdCBzdWJzY3JpYmUgPSByZWFjdExpc3RlbmVyID0+IHtcbiAgICAgICAgICBpZiAoIXN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuICgpID0+IHt9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBzdWJzY3JpYmVVcGRhdGVzKHNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlcywgc3RvcmUsIHN1YnNjcmlwdGlvbiwgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIGNoaWxkUHJvcHNTZWxlY3RvciwgbGFzdFdyYXBwZXJQcm9wcywgbGFzdENoaWxkUHJvcHMsIHJlbmRlcklzU2NoZWR1bGVkLCBpc01vdW50ZWQsIGNoaWxkUHJvcHNGcm9tU3RvcmVVcGRhdGUsIG5vdGlmeU5lc3RlZFN1YnMsIHJlYWN0TGlzdGVuZXIpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBzdWJzY3JpYmU7XG4gICAgICB9LCBbc3Vic2NyaXB0aW9uXSk7XG4gICAgICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0V2l0aEFyZ3MoY2FwdHVyZVdyYXBwZXJQcm9wcywgW2xhc3RXcmFwcGVyUHJvcHMsIGxhc3RDaGlsZFByb3BzLCByZW5kZXJJc1NjaGVkdWxlZCwgd3JhcHBlclByb3BzLCBjaGlsZFByb3BzRnJvbVN0b3JlVXBkYXRlLCBub3RpZnlOZXN0ZWRTdWJzXSk7XG4gICAgICBsZXQgYWN0dWFsQ2hpbGRQcm9wcztcblxuICAgICAgdHJ5IHtcbiAgICAgICAgYWN0dWFsQ2hpbGRQcm9wcyA9IHVzZVN5bmNFeHRlcm5hbFN0b3JlKCAvLyBUT0RPIFdlJ3JlIHBhc3NpbmcgdGhyb3VnaCBhIGJpZyB3cmFwcGVyIHRoYXQgZG9lcyBhIGJ1bmNoIG9mIGV4dHJhIHNpZGUgZWZmZWN0cyBiZXNpZGVzIHN1YnNjcmliaW5nXG4gICAgICAgIHN1YnNjcmliZUZvclJlYWN0LCAvLyBUT0RPIFRoaXMgaXMgaW5jcmVkaWJseSBoYWNreS4gV2UndmUgYWxyZWFkeSBwcm9jZXNzZWQgdGhlIHN0b3JlIHVwZGF0ZSBhbmQgY2FsY3VsYXRlZCBuZXcgY2hpbGQgcHJvcHMsXG4gICAgICAgIC8vIFRPRE8gYW5kIHdlJ3JlIGp1c3QgcGFzc2luZyB0aGF0IHRocm91Z2ggc28gaXQgdHJpZ2dlcnMgYSByZS1yZW5kZXIgZm9yIHVzIHJhdGhlciB0aGFuIHJlbHlpbmcgb24gYHVTRVNgLlxuICAgICAgICBhY3R1YWxDaGlsZFByb3BzU2VsZWN0b3IsIGdldFNlcnZlclN0YXRlID8gKCkgPT4gY2hpbGRQcm9wc1NlbGVjdG9yKGdldFNlcnZlclN0YXRlKCksIHdyYXBwZXJQcm9wcykgOiBhY3R1YWxDaGlsZFByb3BzU2VsZWN0b3IpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmIChsYXRlc3RTdWJzY3JpcHRpb25DYWxsYmFja0Vycm9yLmN1cnJlbnQpIHtcbiAgICAgICAgICA7XG4gICAgICAgICAgZXJyLm1lc3NhZ2UgKz0gYFxcblRoZSBlcnJvciBtYXkgYmUgY29ycmVsYXRlZCB3aXRoIHRoaXMgcHJldmlvdXMgZXJyb3I6XFxuJHtsYXRlc3RTdWJzY3JpcHRpb25DYWxsYmFja0Vycm9yLmN1cnJlbnQuc3RhY2t9XFxuXFxuYDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cblxuICAgICAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGxhdGVzdFN1YnNjcmlwdGlvbkNhbGxiYWNrRXJyb3IuY3VycmVudCA9IHVuZGVmaW5lZDtcbiAgICAgICAgY2hpbGRQcm9wc0Zyb21TdG9yZVVwZGF0ZS5jdXJyZW50ID0gdW5kZWZpbmVkO1xuICAgICAgICBsYXN0Q2hpbGRQcm9wcy5jdXJyZW50ID0gYWN0dWFsQ2hpbGRQcm9wcztcbiAgICAgIH0pOyAvLyBOb3cgdGhhdCBhbGwgdGhhdCdzIGRvbmUsIHdlIGNhbiBmaW5hbGx5IHRyeSB0byBhY3R1YWxseSByZW5kZXIgdGhlIGNoaWxkIGNvbXBvbmVudC5cbiAgICAgIC8vIFdlIG1lbW9pemUgdGhlIGVsZW1lbnRzIGZvciB0aGUgcmVuZGVyZWQgY2hpbGQgY29tcG9uZW50IGFzIGFuIG9wdGltaXphdGlvbi5cblxuICAgICAgY29uc3QgcmVuZGVyZWRXcmFwcGVkQ29tcG9uZW50ID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFdyYXBwZWRDb21wb25lbnQsIF9leHRlbmRzKHt9LCBhY3R1YWxDaGlsZFByb3BzLCB7XG4gICAgICAgICAgICByZWY6IHJlYWN0UmVkdXhGb3J3YXJkZWRSZWZcbiAgICAgICAgICB9KSlcbiAgICAgICAgKTtcbiAgICAgIH0sIFtyZWFjdFJlZHV4Rm9yd2FyZGVkUmVmLCBXcmFwcGVkQ29tcG9uZW50LCBhY3R1YWxDaGlsZFByb3BzXSk7IC8vIElmIFJlYWN0IHNlZXMgdGhlIGV4YWN0IHNhbWUgZWxlbWVudCByZWZlcmVuY2UgYXMgbGFzdCB0aW1lLCBpdCBiYWlscyBvdXQgb2YgcmUtcmVuZGVyaW5nXG4gICAgICAvLyB0aGF0IGNoaWxkLCBzYW1lIGFzIGlmIGl0IHdhcyB3cmFwcGVkIGluIFJlYWN0Lm1lbW8oKSBvciByZXR1cm5lZCBmYWxzZSBmcm9tIHNob3VsZENvbXBvbmVudFVwZGF0ZS5cblxuICAgICAgY29uc3QgcmVuZGVyZWRDaGlsZCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgICAgICBpZiAoc2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzKSB7XG4gICAgICAgICAgLy8gSWYgdGhpcyBjb21wb25lbnQgaXMgc3Vic2NyaWJlZCB0byBzdG9yZSB1cGRhdGVzLCB3ZSBuZWVkIHRvIHBhc3MgaXRzIG93blxuICAgICAgICAgIC8vIHN1YnNjcmlwdGlvbiBpbnN0YW5jZSBkb3duIHRvIG91ciBkZXNjZW5kYW50cy4gVGhhdCBtZWFucyByZW5kZXJpbmcgdGhlIHNhbWVcbiAgICAgICAgICAvLyBDb250ZXh0IGluc3RhbmNlLCBhbmQgcHV0dGluZyBhIGRpZmZlcmVudCB2YWx1ZSBpbnRvIHRoZSBjb250ZXh0LlxuICAgICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChDb250ZXh0VG9Vc2UuUHJvdmlkZXIsIHtcbiAgICAgICAgICAgIHZhbHVlOiBvdmVycmlkZGVuQ29udGV4dFZhbHVlXG4gICAgICAgICAgfSwgcmVuZGVyZWRXcmFwcGVkQ29tcG9uZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZW5kZXJlZFdyYXBwZWRDb21wb25lbnQ7XG4gICAgICB9LCBbQ29udGV4dFRvVXNlLCByZW5kZXJlZFdyYXBwZWRDb21wb25lbnQsIG92ZXJyaWRkZW5Db250ZXh0VmFsdWVdKTtcbiAgICAgIHJldHVybiByZW5kZXJlZENoaWxkO1xuICAgIH1cblxuICAgIGNvbnN0IF9Db25uZWN0ID0gUmVhY3QubWVtbyhDb25uZWN0RnVuY3Rpb24pO1xuXG4gICAgLy8gQWRkIGEgaGFja3kgY2FzdCB0byBnZXQgdGhlIHJpZ2h0IG91dHB1dCB0eXBlXG4gICAgY29uc3QgQ29ubmVjdCA9IF9Db25uZWN0O1xuICAgIENvbm5lY3QuV3JhcHBlZENvbXBvbmVudCA9IFdyYXBwZWRDb21wb25lbnQ7XG4gICAgQ29ubmVjdC5kaXNwbGF5TmFtZSA9IENvbm5lY3RGdW5jdGlvbi5kaXNwbGF5TmFtZSA9IGRpc3BsYXlOYW1lO1xuXG4gICAgaWYgKGZvcndhcmRSZWYpIHtcbiAgICAgIGNvbnN0IF9mb3J3YXJkZWQgPSBSZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIGZvcndhcmRDb25uZWN0UmVmKHByb3BzLCByZWYpIHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ29ubmVjdCwgX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgICAgICAgcmVhY3RSZWR1eEZvcndhcmRlZFJlZjogcmVmXG4gICAgICAgIH0pKTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBmb3J3YXJkZWQgPSBfZm9yd2FyZGVkO1xuICAgICAgZm9yd2FyZGVkLmRpc3BsYXlOYW1lID0gZGlzcGxheU5hbWU7XG4gICAgICBmb3J3YXJkZWQuV3JhcHBlZENvbXBvbmVudCA9IFdyYXBwZWRDb21wb25lbnQ7XG4gICAgICByZXR1cm4gaG9pc3RTdGF0aWNzKGZvcndhcmRlZCwgV3JhcHBlZENvbXBvbmVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGhvaXN0U3RhdGljcyhDb25uZWN0LCBXcmFwcGVkQ29tcG9uZW50KTtcbiAgfTtcblxuICByZXR1cm4gd3JhcFdpdGhDb25uZWN0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0OyIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7XG4gIGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9O1xuICB2YXIgdGFyZ2V0ID0ge307XG4gIHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTtcbiAgdmFyIGtleSwgaTtcbiAgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBrZXkgPSBzb3VyY2VLZXlzW2ldO1xuICAgIGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7XG4gICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgfVxuICByZXR1cm4gdGFyZ2V0O1xufSIsICJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCB2ZXJpZnlQbGFpbk9iamVjdCBmcm9tICcuLi91dGlscy92ZXJpZnlQbGFpbk9iamVjdCc7XG5pbXBvcnQgeyBjcmVhdGVJbnZhbGlkQXJnRmFjdG9yeSB9IGZyb20gJy4vaW52YWxpZEFyZ0ZhY3RvcnknO1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmF1bHRNZXJnZVByb3BzKHN0YXRlUHJvcHMsIGRpc3BhdGNoUHJvcHMsIG93blByb3BzKSB7XG4gIC8vIEB0cy1pZ25vcmVcbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBvd25Qcm9wcywgc3RhdGVQcm9wcywgZGlzcGF0Y2hQcm9wcyk7XG59XG5leHBvcnQgZnVuY3Rpb24gd3JhcE1lcmdlUHJvcHNGdW5jKG1lcmdlUHJvcHMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGluaXRNZXJnZVByb3BzUHJveHkoZGlzcGF0Y2gsIHtcbiAgICBkaXNwbGF5TmFtZSxcbiAgICBhcmVNZXJnZWRQcm9wc0VxdWFsXG4gIH0pIHtcbiAgICBsZXQgaGFzUnVuT25jZSA9IGZhbHNlO1xuICAgIGxldCBtZXJnZWRQcm9wcztcbiAgICByZXR1cm4gZnVuY3Rpb24gbWVyZ2VQcm9wc1Byb3h5KHN0YXRlUHJvcHMsIGRpc3BhdGNoUHJvcHMsIG93blByb3BzKSB7XG4gICAgICBjb25zdCBuZXh0TWVyZ2VkUHJvcHMgPSBtZXJnZVByb3BzKHN0YXRlUHJvcHMsIGRpc3BhdGNoUHJvcHMsIG93blByb3BzKTtcblxuICAgICAgaWYgKGhhc1J1bk9uY2UpIHtcbiAgICAgICAgaWYgKCFhcmVNZXJnZWRQcm9wc0VxdWFsKG5leHRNZXJnZWRQcm9wcywgbWVyZ2VkUHJvcHMpKSBtZXJnZWRQcm9wcyA9IG5leHRNZXJnZWRQcm9wcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhhc1J1bk9uY2UgPSB0cnVlO1xuICAgICAgICBtZXJnZWRQcm9wcyA9IG5leHRNZXJnZWRQcm9wcztcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHZlcmlmeVBsYWluT2JqZWN0KG1lcmdlZFByb3BzLCBkaXNwbGF5TmFtZSwgJ21lcmdlUHJvcHMnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG1lcmdlZFByb3BzO1xuICAgIH07XG4gIH07XG59XG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VQcm9wc0ZhY3RvcnkobWVyZ2VQcm9wcykge1xuICByZXR1cm4gIW1lcmdlUHJvcHMgPyAoKSA9PiBkZWZhdWx0TWVyZ2VQcm9wcyA6IHR5cGVvZiBtZXJnZVByb3BzID09PSAnZnVuY3Rpb24nID8gd3JhcE1lcmdlUHJvcHNGdW5jKG1lcmdlUHJvcHMpIDogY3JlYXRlSW52YWxpZEFyZ0ZhY3RvcnkobWVyZ2VQcm9wcywgJ21lcmdlUHJvcHMnKTtcbn0iLCAiaW1wb3J0IHsgZ2V0QmF0Y2ggfSBmcm9tICcuL2JhdGNoJzsgLy8gZW5jYXBzdWxhdGVzIHRoZSBzdWJzY3JpcHRpb24gbG9naWMgZm9yIGNvbm5lY3RpbmcgYSBjb21wb25lbnQgdG8gdGhlIHJlZHV4IHN0b3JlLCBhc1xuLy8gd2VsbCBhcyBuZXN0aW5nIHN1YnNjcmlwdGlvbnMgb2YgZGVzY2VuZGFudCBjb21wb25lbnRzLCBzbyB0aGF0IHdlIGNhbiBlbnN1cmUgdGhlXG4vLyBhbmNlc3RvciBjb21wb25lbnRzIHJlLXJlbmRlciBiZWZvcmUgZGVzY2VuZGFudHNcblxuZnVuY3Rpb24gY3JlYXRlTGlzdGVuZXJDb2xsZWN0aW9uKCkge1xuICBjb25zdCBiYXRjaCA9IGdldEJhdGNoKCk7XG4gIGxldCBmaXJzdCA9IG51bGw7XG4gIGxldCBsYXN0ID0gbnVsbDtcbiAgcmV0dXJuIHtcbiAgICBjbGVhcigpIHtcbiAgICAgIGZpcnN0ID0gbnVsbDtcbiAgICAgIGxhc3QgPSBudWxsO1xuICAgIH0sXG5cbiAgICBub3RpZnkoKSB7XG4gICAgICBiYXRjaCgoKSA9PiB7XG4gICAgICAgIGxldCBsaXN0ZW5lciA9IGZpcnN0O1xuXG4gICAgICAgIHdoaWxlIChsaXN0ZW5lcikge1xuICAgICAgICAgIGxpc3RlbmVyLmNhbGxiYWNrKCk7XG4gICAgICAgICAgbGlzdGVuZXIgPSBsaXN0ZW5lci5uZXh0O1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgZ2V0KCkge1xuICAgICAgbGV0IGxpc3RlbmVycyA9IFtdO1xuICAgICAgbGV0IGxpc3RlbmVyID0gZmlyc3Q7XG5cbiAgICAgIHdoaWxlIChsaXN0ZW5lcikge1xuICAgICAgICBsaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gICAgICAgIGxpc3RlbmVyID0gbGlzdGVuZXIubmV4dDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGxpc3RlbmVycztcbiAgICB9LFxuXG4gICAgc3Vic2NyaWJlKGNhbGxiYWNrKSB7XG4gICAgICBsZXQgaXNTdWJzY3JpYmVkID0gdHJ1ZTtcbiAgICAgIGxldCBsaXN0ZW5lciA9IGxhc3QgPSB7XG4gICAgICAgIGNhbGxiYWNrLFxuICAgICAgICBuZXh0OiBudWxsLFxuICAgICAgICBwcmV2OiBsYXN0XG4gICAgICB9O1xuXG4gICAgICBpZiAobGlzdGVuZXIucHJldikge1xuICAgICAgICBsaXN0ZW5lci5wcmV2Lm5leHQgPSBsaXN0ZW5lcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpcnN0ID0gbGlzdGVuZXI7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmdW5jdGlvbiB1bnN1YnNjcmliZSgpIHtcbiAgICAgICAgaWYgKCFpc1N1YnNjcmliZWQgfHwgZmlyc3QgPT09IG51bGwpIHJldHVybjtcbiAgICAgICAgaXNTdWJzY3JpYmVkID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKGxpc3RlbmVyLm5leHQpIHtcbiAgICAgICAgICBsaXN0ZW5lci5uZXh0LnByZXYgPSBsaXN0ZW5lci5wcmV2O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxhc3QgPSBsaXN0ZW5lci5wcmV2O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxpc3RlbmVyLnByZXYpIHtcbiAgICAgICAgICBsaXN0ZW5lci5wcmV2Lm5leHQgPSBsaXN0ZW5lci5uZXh0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZpcnN0ID0gbGlzdGVuZXIubmV4dDtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgfTtcbn1cblxuY29uc3QgbnVsbExpc3RlbmVycyA9IHtcbiAgbm90aWZ5KCkge30sXG5cbiAgZ2V0OiAoKSA9PiBbXVxufTtcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTdWJzY3JpcHRpb24oc3RvcmUsIHBhcmVudFN1Yikge1xuICBsZXQgdW5zdWJzY3JpYmU7XG4gIGxldCBsaXN0ZW5lcnMgPSBudWxsTGlzdGVuZXJzOyAvLyBSZWFzb25zIHRvIGtlZXAgdGhlIHN1YnNjcmlwdGlvbiBhY3RpdmVcblxuICBsZXQgc3Vic2NyaXB0aW9uc0Ftb3VudCA9IDA7IC8vIElzIHRoaXMgc3BlY2lmaWMgc3Vic2NyaXB0aW9uIHN1YnNjcmliZWQgKG9yIG9ubHkgbmVzdGVkIG9uZXM/KVxuXG4gIGxldCBzZWxmU3Vic2NyaWJlZCA9IGZhbHNlO1xuXG4gIGZ1bmN0aW9uIGFkZE5lc3RlZFN1YihsaXN0ZW5lcikge1xuICAgIHRyeVN1YnNjcmliZSgpO1xuICAgIGNvbnN0IGNsZWFudXBMaXN0ZW5lciA9IGxpc3RlbmVycy5zdWJzY3JpYmUobGlzdGVuZXIpOyAvLyBjbGVhbnVwIG5lc3RlZCBzdWJcblxuICAgIGxldCByZW1vdmVkID0gZmFsc2U7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmICghcmVtb3ZlZCkge1xuICAgICAgICByZW1vdmVkID0gdHJ1ZTtcbiAgICAgICAgY2xlYW51cExpc3RlbmVyKCk7XG4gICAgICAgIHRyeVVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG5vdGlmeU5lc3RlZFN1YnMoKSB7XG4gICAgbGlzdGVuZXJzLm5vdGlmeSgpO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlQ2hhbmdlV3JhcHBlcigpIHtcbiAgICBpZiAoc3Vic2NyaXB0aW9uLm9uU3RhdGVDaGFuZ2UpIHtcbiAgICAgIHN1YnNjcmlwdGlvbi5vblN0YXRlQ2hhbmdlKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaXNTdWJzY3JpYmVkKCkge1xuICAgIHJldHVybiBzZWxmU3Vic2NyaWJlZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRyeVN1YnNjcmliZSgpIHtcbiAgICBzdWJzY3JpcHRpb25zQW1vdW50Kys7XG5cbiAgICBpZiAoIXVuc3Vic2NyaWJlKSB7XG4gICAgICB1bnN1YnNjcmliZSA9IHBhcmVudFN1YiA/IHBhcmVudFN1Yi5hZGROZXN0ZWRTdWIoaGFuZGxlQ2hhbmdlV3JhcHBlcikgOiBzdG9yZS5zdWJzY3JpYmUoaGFuZGxlQ2hhbmdlV3JhcHBlcik7XG4gICAgICBsaXN0ZW5lcnMgPSBjcmVhdGVMaXN0ZW5lckNvbGxlY3Rpb24oKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB0cnlVbnN1YnNjcmliZSgpIHtcbiAgICBzdWJzY3JpcHRpb25zQW1vdW50LS07XG5cbiAgICBpZiAodW5zdWJzY3JpYmUgJiYgc3Vic2NyaXB0aW9uc0Ftb3VudCA9PT0gMCkge1xuICAgICAgdW5zdWJzY3JpYmUoKTtcbiAgICAgIHVuc3Vic2NyaWJlID0gdW5kZWZpbmVkO1xuICAgICAgbGlzdGVuZXJzLmNsZWFyKCk7XG4gICAgICBsaXN0ZW5lcnMgPSBudWxsTGlzdGVuZXJzO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHRyeVN1YnNjcmliZVNlbGYoKSB7XG4gICAgaWYgKCFzZWxmU3Vic2NyaWJlZCkge1xuICAgICAgc2VsZlN1YnNjcmliZWQgPSB0cnVlO1xuICAgICAgdHJ5U3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdHJ5VW5zdWJzY3JpYmVTZWxmKCkge1xuICAgIGlmIChzZWxmU3Vic2NyaWJlZCkge1xuICAgICAgc2VsZlN1YnNjcmliZWQgPSBmYWxzZTtcbiAgICAgIHRyeVVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc3Vic2NyaXB0aW9uID0ge1xuICAgIGFkZE5lc3RlZFN1YixcbiAgICBub3RpZnlOZXN0ZWRTdWJzLFxuICAgIGhhbmRsZUNoYW5nZVdyYXBwZXIsXG4gICAgaXNTdWJzY3JpYmVkLFxuICAgIHRyeVN1YnNjcmliZTogdHJ5U3Vic2NyaWJlU2VsZixcbiAgICB0cnlVbnN1YnNjcmliZTogdHJ5VW5zdWJzY3JpYmVTZWxmLFxuICAgIGdldExpc3RlbmVyczogKCkgPT4gbGlzdGVuZXJzXG4gIH07XG4gIHJldHVybiBzdWJzY3JpcHRpb247XG59IiwgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JzsgLy8gUmVhY3QgY3VycmVudGx5IHRocm93cyBhIHdhcm5pbmcgd2hlbiB1c2luZyB1c2VMYXlvdXRFZmZlY3Qgb24gdGhlIHNlcnZlci5cbi8vIFRvIGdldCBhcm91bmQgaXQsIHdlIGNhbiBjb25kaXRpb25hbGx5IHVzZUVmZmVjdCBvbiB0aGUgc2VydmVyIChuby1vcCkgYW5kXG4vLyB1c2VMYXlvdXRFZmZlY3QgaW4gdGhlIGJyb3dzZXIuIFdlIG5lZWQgdXNlTGF5b3V0RWZmZWN0IHRvIGVuc3VyZSB0aGUgc3RvcmVcbi8vIHN1YnNjcmlwdGlvbiBjYWxsYmFjayBhbHdheXMgaGFzIHRoZSBzZWxlY3RvciBmcm9tIHRoZSBsYXRlc3QgcmVuZGVyIGNvbW1pdFxuLy8gYXZhaWxhYmxlLCBvdGhlcndpc2UgYSBzdG9yZSB1cGRhdGUgbWF5IGhhcHBlbiBiZXR3ZWVuIHJlbmRlciBhbmQgdGhlIGVmZmVjdCxcbi8vIHdoaWNoIG1heSBjYXVzZSBtaXNzZWQgdXBkYXRlczsgd2UgYWxzbyBtdXN0IGVuc3VyZSB0aGUgc3RvcmUgc3Vic2NyaXB0aW9uXG4vLyBpcyBjcmVhdGVkIHN5bmNocm9ub3VzbHksIG90aGVyd2lzZSBhIHN0b3JlIHVwZGF0ZSBtYXkgb2NjdXIgYmVmb3JlIHRoZVxuLy8gc3Vic2NyaXB0aW9uIGlzIGNyZWF0ZWQgYW5kIGFuIGluY29uc2lzdGVudCBzdGF0ZSBtYXkgYmUgb2JzZXJ2ZWRcbi8vIE1hdGNoZXMgbG9naWMgaW4gUmVhY3QncyBgc2hhcmVkL0V4ZWN1dGlvbkVudmlyb25tZW50YCBmaWxlXG5cbmV4cG9ydCBjb25zdCBjYW5Vc2VET00gPSAhISh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgIT09ICd1bmRlZmluZWQnKTtcbmV4cG9ydCBjb25zdCB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0ID0gY2FuVXNlRE9NID8gUmVhY3QudXNlTGF5b3V0RWZmZWN0IDogUmVhY3QudXNlRWZmZWN0OyIsICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBSZWFjdFJlZHV4Q29udGV4dCB9IGZyb20gJy4vQ29udGV4dCc7XG5pbXBvcnQgeyBjcmVhdGVTdWJzY3JpcHRpb24gfSBmcm9tICcuLi91dGlscy9TdWJzY3JpcHRpb24nO1xuaW1wb3J0IHsgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCB9IGZyb20gJy4uL3V0aWxzL3VzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QnO1xuXG5mdW5jdGlvbiBQcm92aWRlcih7XG4gIHN0b3JlLFxuICBjb250ZXh0LFxuICBjaGlsZHJlbixcbiAgc2VydmVyU3RhdGUsXG4gIHN0YWJpbGl0eUNoZWNrID0gJ29uY2UnLFxuICBub29wQ2hlY2sgPSAnb25jZSdcbn0pIHtcbiAgY29uc3QgY29udGV4dFZhbHVlID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gY3JlYXRlU3Vic2NyaXB0aW9uKHN0b3JlKTtcbiAgICByZXR1cm4ge1xuICAgICAgc3RvcmUsXG4gICAgICBzdWJzY3JpcHRpb24sXG4gICAgICBnZXRTZXJ2ZXJTdGF0ZTogc2VydmVyU3RhdGUgPyAoKSA9PiBzZXJ2ZXJTdGF0ZSA6IHVuZGVmaW5lZCxcbiAgICAgIHN0YWJpbGl0eUNoZWNrLFxuICAgICAgbm9vcENoZWNrXG4gICAgfTtcbiAgfSwgW3N0b3JlLCBzZXJ2ZXJTdGF0ZSwgc3RhYmlsaXR5Q2hlY2ssIG5vb3BDaGVja10pO1xuICBjb25zdCBwcmV2aW91c1N0YXRlID0gUmVhY3QudXNlTWVtbygoKSA9PiBzdG9yZS5nZXRTdGF0ZSgpLCBbc3RvcmVdKTtcbiAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgc3Vic2NyaXB0aW9uXG4gICAgfSA9IGNvbnRleHRWYWx1ZTtcbiAgICBzdWJzY3JpcHRpb24ub25TdGF0ZUNoYW5nZSA9IHN1YnNjcmlwdGlvbi5ub3RpZnlOZXN0ZWRTdWJzO1xuICAgIHN1YnNjcmlwdGlvbi50cnlTdWJzY3JpYmUoKTtcblxuICAgIGlmIChwcmV2aW91c1N0YXRlICE9PSBzdG9yZS5nZXRTdGF0ZSgpKSB7XG4gICAgICBzdWJzY3JpcHRpb24ubm90aWZ5TmVzdGVkU3VicygpO1xuICAgIH1cblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBzdWJzY3JpcHRpb24udHJ5VW5zdWJzY3JpYmUoKTtcbiAgICAgIHN1YnNjcmlwdGlvbi5vblN0YXRlQ2hhbmdlID0gdW5kZWZpbmVkO1xuICAgIH07XG4gIH0sIFtjb250ZXh0VmFsdWUsIHByZXZpb3VzU3RhdGVdKTtcbiAgY29uc3QgQ29udGV4dCA9IGNvbnRleHQgfHwgUmVhY3RSZWR1eENvbnRleHQ7IC8vIEB0cy1pZ25vcmUgJ0FueUFjdGlvbicgaXMgYXNzaWduYWJsZSB0byB0aGUgY29uc3RyYWludCBvZiB0eXBlICdBJywgYnV0ICdBJyBjb3VsZCBiZSBpbnN0YW50aWF0ZWQgd2l0aCBhIGRpZmZlcmVudCBzdWJ0eXBlXG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogY29udGV4dFZhbHVlXG4gIH0sIGNoaWxkcmVuKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgUHJvdmlkZXI7IiwgImltcG9ydCB7IFJlYWN0UmVkdXhDb250ZXh0IH0gZnJvbSAnLi4vY29tcG9uZW50cy9Db250ZXh0JztcbmltcG9ydCB7IHVzZVJlZHV4Q29udGV4dCBhcyB1c2VEZWZhdWx0UmVkdXhDb250ZXh0LCBjcmVhdGVSZWR1eENvbnRleHRIb29rIH0gZnJvbSAnLi91c2VSZWR1eENvbnRleHQnO1xuLyoqXHJcbiAqIEhvb2sgZmFjdG9yeSwgd2hpY2ggY3JlYXRlcyBhIGB1c2VTdG9yZWAgaG9vayBib3VuZCB0byBhIGdpdmVuIGNvbnRleHQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7UmVhY3QuQ29udGV4dH0gW2NvbnRleHQ9UmVhY3RSZWR1eENvbnRleHRdIENvbnRleHQgcGFzc2VkIHRvIHlvdXIgYDxQcm92aWRlcj5gLlxyXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgYHVzZVN0b3JlYCBob29rIGJvdW5kIHRvIHRoZSBzcGVjaWZpZWQgY29udGV4dC5cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTdG9yZUhvb2soY29udGV4dCA9IFJlYWN0UmVkdXhDb250ZXh0KSB7XG4gIGNvbnN0IHVzZVJlZHV4Q29udGV4dCA9IC8vIEB0cy1pZ25vcmVcbiAgY29udGV4dCA9PT0gUmVhY3RSZWR1eENvbnRleHQgPyB1c2VEZWZhdWx0UmVkdXhDb250ZXh0IDogLy8gQHRzLWlnbm9yZVxuICBjcmVhdGVSZWR1eENvbnRleHRIb29rKGNvbnRleHQpO1xuICByZXR1cm4gZnVuY3Rpb24gdXNlU3RvcmUoKSB7XG4gICAgY29uc3Qge1xuICAgICAgc3RvcmVcbiAgICB9ID0gdXNlUmVkdXhDb250ZXh0KCk7IC8vIEB0cy1pZ25vcmVcblxuICAgIHJldHVybiBzdG9yZTtcbiAgfTtcbn1cbi8qKlxyXG4gKiBBIGhvb2sgdG8gYWNjZXNzIHRoZSByZWR1eCBzdG9yZS5cclxuICpcclxuICogQHJldHVybnMge2FueX0gdGhlIHJlZHV4IHN0b3JlXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqXHJcbiAqIGltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcclxuICogaW1wb3J0IHsgdXNlU3RvcmUgfSBmcm9tICdyZWFjdC1yZWR1eCdcclxuICpcclxuICogZXhwb3J0IGNvbnN0IEV4YW1wbGVDb21wb25lbnQgPSAoKSA9PiB7XHJcbiAqICAgY29uc3Qgc3RvcmUgPSB1c2VTdG9yZSgpXHJcbiAqICAgcmV0dXJuIDxkaXY+e3N0b3JlLmdldFN0YXRlKCl9PC9kaXY+XHJcbiAqIH1cclxuICovXG5cbmV4cG9ydCBjb25zdCB1c2VTdG9yZSA9IC8qI19fUFVSRV9fKi9jcmVhdGVTdG9yZUhvb2soKTsiLCAiaW1wb3J0IHsgUmVhY3RSZWR1eENvbnRleHQgfSBmcm9tICcuLi9jb21wb25lbnRzL0NvbnRleHQnO1xuaW1wb3J0IHsgdXNlU3RvcmUgYXMgdXNlRGVmYXVsdFN0b3JlLCBjcmVhdGVTdG9yZUhvb2sgfSBmcm9tICcuL3VzZVN0b3JlJztcbi8qKlxyXG4gKiBIb29rIGZhY3RvcnksIHdoaWNoIGNyZWF0ZXMgYSBgdXNlRGlzcGF0Y2hgIGhvb2sgYm91bmQgdG8gYSBnaXZlbiBjb250ZXh0LlxyXG4gKlxyXG4gKiBAcGFyYW0ge1JlYWN0LkNvbnRleHR9IFtjb250ZXh0PVJlYWN0UmVkdXhDb250ZXh0XSBDb250ZXh0IHBhc3NlZCB0byB5b3VyIGA8UHJvdmlkZXI+YC5cclxuICogQHJldHVybnMge0Z1bmN0aW9ufSBBIGB1c2VEaXNwYXRjaGAgaG9vayBib3VuZCB0byB0aGUgc3BlY2lmaWVkIGNvbnRleHQuXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRGlzcGF0Y2hIb29rKGNvbnRleHQgPSBSZWFjdFJlZHV4Q29udGV4dCkge1xuICBjb25zdCB1c2VTdG9yZSA9IC8vIEB0cy1pZ25vcmVcbiAgY29udGV4dCA9PT0gUmVhY3RSZWR1eENvbnRleHQgPyB1c2VEZWZhdWx0U3RvcmUgOiBjcmVhdGVTdG9yZUhvb2soY29udGV4dCk7XG4gIHJldHVybiBmdW5jdGlvbiB1c2VEaXNwYXRjaCgpIHtcbiAgICBjb25zdCBzdG9yZSA9IHVzZVN0b3JlKCk7IC8vIEB0cy1pZ25vcmVcblxuICAgIHJldHVybiBzdG9yZS5kaXNwYXRjaDtcbiAgfTtcbn1cbi8qKlxyXG4gKiBBIGhvb2sgdG8gYWNjZXNzIHRoZSByZWR1eCBgZGlzcGF0Y2hgIGZ1bmN0aW9uLlxyXG4gKlxyXG4gKiBAcmV0dXJucyB7YW55fGZ1bmN0aW9ufSByZWR1eCBzdG9yZSdzIGBkaXNwYXRjaGAgZnVuY3Rpb25cclxuICpcclxuICogQGV4YW1wbGVcclxuICpcclxuICogaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnXHJcbiAqIGltcG9ydCB7IHVzZURpc3BhdGNoIH0gZnJvbSAncmVhY3QtcmVkdXgnXHJcbiAqXHJcbiAqIGV4cG9ydCBjb25zdCBDb3VudGVyQ29tcG9uZW50ID0gKHsgdmFsdWUgfSkgPT4ge1xyXG4gKiAgIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKVxyXG4gKiAgIGNvbnN0IGluY3JlYXNlQ291bnRlciA9IHVzZUNhbGxiYWNrKCgpID0+IGRpc3BhdGNoKHsgdHlwZTogJ2luY3JlYXNlLWNvdW50ZXInIH0pLCBbXSlcclxuICogICByZXR1cm4gKFxyXG4gKiAgICAgPGRpdj5cclxuICogICAgICAgPHNwYW4+e3ZhbHVlfTwvc3Bhbj5cclxuICogICAgICAgPGJ1dHRvbiBvbkNsaWNrPXtpbmNyZWFzZUNvdW50ZXJ9PkluY3JlYXNlIGNvdW50ZXI8L2J1dHRvbj5cclxuICogICAgIDwvZGl2PlxyXG4gKiAgIClcclxuICogfVxyXG4gKi9cblxuZXhwb3J0IGNvbnN0IHVzZURpc3BhdGNoID0gLyojX19QVVJFX18qL2NyZWF0ZURpc3BhdGNoSG9vaygpOyIsICJpbXBvcnQgeyBUeXBlZFVzZVNlbGVjdG9ySG9vaywgdXNlU2VsZWN0b3IsIHVzZURpc3BhdGNoIH0gZnJvbSBcInJlYWN0LXJlZHV4XCI7XG5pbXBvcnQgdHlwZSB7IFJvb3RTdGF0ZSwgQXBwRGlzcGF0Y2ggfSBmcm9tIFwiLi9zdG9yZVwiO1xuXG5leHBvcnQgY29uc3QgdXNlQXBwRGlzcGF0Y2ggPSAoKSA9PiB1c2VEaXNwYXRjaDxBcHBEaXNwYXRjaD4oKTtcbmV4cG9ydCBjb25zdCB1c2VBcHBTZWxlY3RvcjogVHlwZWRVc2VTZWxlY3Rvckhvb2s8Um9vdFN0YXRlPiA9IHVzZVNlbGVjdG9yO1xuIiwgImNvbnN0IGVycm9ycyA9IHtcblx0MDogXCJJbGxlZ2FsIHN0YXRlXCIsXG5cdDE6IFwiSW1tZXIgZHJhZnRzIGNhbm5vdCBoYXZlIGNvbXB1dGVkIHByb3BlcnRpZXNcIixcblx0MjogXCJUaGlzIG9iamVjdCBoYXMgYmVlbiBmcm96ZW4gYW5kIHNob3VsZCBub3QgYmUgbXV0YXRlZFwiLFxuXHQzKGRhdGE6IGFueSkge1xuXHRcdHJldHVybiAoXG5cdFx0XHRcIkNhbm5vdCB1c2UgYSBwcm94eSB0aGF0IGhhcyBiZWVuIHJldm9rZWQuIERpZCB5b3UgcGFzcyBhbiBvYmplY3QgZnJvbSBpbnNpZGUgYW4gaW1tZXIgZnVuY3Rpb24gdG8gYW4gYXN5bmMgcHJvY2Vzcz8gXCIgK1xuXHRcdFx0ZGF0YVxuXHRcdClcblx0fSxcblx0NDogXCJBbiBpbW1lciBwcm9kdWNlciByZXR1cm5lZCBhIG5ldyB2YWx1ZSAqYW5kKiBtb2RpZmllZCBpdHMgZHJhZnQuIEVpdGhlciByZXR1cm4gYSBuZXcgdmFsdWUgKm9yKiBtb2RpZnkgdGhlIGRyYWZ0LlwiLFxuXHQ1OiBcIkltbWVyIGZvcmJpZHMgY2lyY3VsYXIgcmVmZXJlbmNlc1wiLFxuXHQ2OiBcIlRoZSBmaXJzdCBvciBzZWNvbmQgYXJndW1lbnQgdG8gYHByb2R1Y2VgIG11c3QgYmUgYSBmdW5jdGlvblwiLFxuXHQ3OiBcIlRoZSB0aGlyZCBhcmd1bWVudCB0byBgcHJvZHVjZWAgbXVzdCBiZSBhIGZ1bmN0aW9uIG9yIHVuZGVmaW5lZFwiLFxuXHQ4OiBcIkZpcnN0IGFyZ3VtZW50IHRvIGBjcmVhdGVEcmFmdGAgbXVzdCBiZSBhIHBsYWluIG9iamVjdCwgYW4gYXJyYXksIG9yIGFuIGltbWVyYWJsZSBvYmplY3RcIixcblx0OTogXCJGaXJzdCBhcmd1bWVudCB0byBgZmluaXNoRHJhZnRgIG11c3QgYmUgYSBkcmFmdCByZXR1cm5lZCBieSBgY3JlYXRlRHJhZnRgXCIsXG5cdDEwOiBcIlRoZSBnaXZlbiBkcmFmdCBpcyBhbHJlYWR5IGZpbmFsaXplZFwiLFxuXHQxMTogXCJPYmplY3QuZGVmaW5lUHJvcGVydHkoKSBjYW5ub3QgYmUgdXNlZCBvbiBhbiBJbW1lciBkcmFmdFwiLFxuXHQxMjogXCJPYmplY3Quc2V0UHJvdG90eXBlT2YoKSBjYW5ub3QgYmUgdXNlZCBvbiBhbiBJbW1lciBkcmFmdFwiLFxuXHQxMzogXCJJbW1lciBvbmx5IHN1cHBvcnRzIGRlbGV0aW5nIGFycmF5IGluZGljZXNcIixcblx0MTQ6IFwiSW1tZXIgb25seSBzdXBwb3J0cyBzZXR0aW5nIGFycmF5IGluZGljZXMgYW5kIHRoZSAnbGVuZ3RoJyBwcm9wZXJ0eVwiLFxuXHQxNShwYXRoOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gXCJDYW5ub3QgYXBwbHkgcGF0Y2gsIHBhdGggZG9lc24ndCByZXNvbHZlOiBcIiArIHBhdGhcblx0fSxcblx0MTY6ICdTZXRzIGNhbm5vdCBoYXZlIFwicmVwbGFjZVwiIHBhdGNoZXMuJyxcblx0MTcob3A6IHN0cmluZykge1xuXHRcdHJldHVybiBcIlVuc3VwcG9ydGVkIHBhdGNoIG9wZXJhdGlvbjogXCIgKyBvcFxuXHR9LFxuXHQxOChwbHVnaW46IHN0cmluZykge1xuXHRcdHJldHVybiBgVGhlIHBsdWdpbiBmb3IgJyR7cGx1Z2lufScgaGFzIG5vdCBiZWVuIGxvYWRlZCBpbnRvIEltbWVyLiBUbyBlbmFibGUgdGhlIHBsdWdpbiwgaW1wb3J0IGFuZCBjYWxsIFxcYGVuYWJsZSR7cGx1Z2lufSgpXFxgIHdoZW4gaW5pdGlhbGl6aW5nIHlvdXIgYXBwbGljYXRpb24uYFxuXHR9LFxuXHQyMDogXCJDYW5ub3QgdXNlIHByb3hpZXMgaWYgUHJveHksIFByb3h5LnJldm9jYWJsZSBvciBSZWZsZWN0IGFyZSBub3QgYXZhaWxhYmxlXCIsXG5cdDIxKHRoaW5nOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gYHByb2R1Y2UgY2FuIG9ubHkgYmUgY2FsbGVkIG9uIHRoaW5ncyB0aGF0IGFyZSBkcmFmdGFibGU6IHBsYWluIG9iamVjdHMsIGFycmF5cywgTWFwLCBTZXQgb3IgY2xhc3NlcyB0aGF0IGFyZSBtYXJrZWQgd2l0aCAnW2ltbWVyYWJsZV06IHRydWUnLiBHb3QgJyR7dGhpbmd9J2Bcblx0fSxcblx0MjIodGhpbmc6IHN0cmluZykge1xuXHRcdHJldHVybiBgJ2N1cnJlbnQnIGV4cGVjdHMgYSBkcmFmdCwgZ290OiAke3RoaW5nfWBcblx0fSxcblx0MjModGhpbmc6IHN0cmluZykge1xuXHRcdHJldHVybiBgJ29yaWdpbmFsJyBleHBlY3RzIGEgZHJhZnQsIGdvdDogJHt0aGluZ31gXG5cdH0sXG5cdDI0OiBcIlBhdGNoaW5nIHJlc2VydmVkIGF0dHJpYnV0ZXMgbGlrZSBfX3Byb3RvX18sIHByb3RvdHlwZSBhbmQgY29uc3RydWN0b3IgaXMgbm90IGFsbG93ZWRcIlxufSBhcyBjb25zdFxuXG5leHBvcnQgZnVuY3Rpb24gZGllKGVycm9yOiBrZXlvZiB0eXBlb2YgZXJyb3JzLCAuLi5hcmdzOiBhbnlbXSk6IG5ldmVyIHtcblx0aWYgKF9fREVWX18pIHtcblx0XHRjb25zdCBlID0gZXJyb3JzW2Vycm9yXVxuXHRcdGNvbnN0IG1zZyA9ICFlXG5cdFx0XHQ/IFwidW5rbm93biBlcnJvciBucjogXCIgKyBlcnJvclxuXHRcdFx0OiB0eXBlb2YgZSA9PT0gXCJmdW5jdGlvblwiXG5cdFx0XHQ/IGUuYXBwbHkobnVsbCwgYXJncyBhcyBhbnkpXG5cdFx0XHQ6IGVcblx0XHR0aHJvdyBuZXcgRXJyb3IoYFtJbW1lcl0gJHttc2d9YClcblx0fVxuXHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0YFtJbW1lcl0gbWluaWZpZWQgZXJyb3IgbnI6ICR7ZXJyb3J9JHtcblx0XHRcdGFyZ3MubGVuZ3RoID8gXCIgXCIgKyBhcmdzLm1hcChzID0+IGAnJHtzfSdgKS5qb2luKFwiLFwiKSA6IFwiXCJcblx0XHR9LiBGaW5kIHRoZSBmdWxsIGVycm9yIGF0OiBodHRwczovL2JpdC5seS8zY1hFS1dmYFxuXHQpXG59XG4iLCAiaW1wb3J0IHtcblx0RFJBRlRfU1RBVEUsXG5cdERSQUZUQUJMRSxcblx0aGFzU2V0LFxuXHRPYmplY3Rpc2gsXG5cdERyYWZ0ZWQsXG5cdEFueU9iamVjdCxcblx0QW55TWFwLFxuXHRBbnlTZXQsXG5cdEltbWVyU3RhdGUsXG5cdGhhc01hcCxcblx0QXJjaHR5cGUsXG5cdGRpZVxufSBmcm9tIFwiLi4vaW50ZXJuYWxcIlxuXG4vKiogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiB2YWx1ZSBpcyBhbiBJbW1lciBkcmFmdCAqL1xuLyojX19QVVJFX18qL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRHJhZnQodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gISF2YWx1ZSAmJiAhIXZhbHVlW0RSQUZUX1NUQVRFXVxufVxuXG4vKiogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiB2YWx1ZSBjYW4gYmUgZHJhZnRlZCBieSBJbW1lciAqL1xuLyojX19QVVJFX18qL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRHJhZnRhYmxlKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcblx0aWYgKCF2YWx1ZSkgcmV0dXJuIGZhbHNlXG5cdHJldHVybiAoXG5cdFx0aXNQbGFpbk9iamVjdCh2YWx1ZSkgfHxcblx0XHRBcnJheS5pc0FycmF5KHZhbHVlKSB8fFxuXHRcdCEhdmFsdWVbRFJBRlRBQkxFXSB8fFxuXHRcdCEhdmFsdWUuY29uc3RydWN0b3I/LltEUkFGVEFCTEVdIHx8XG5cdFx0aXNNYXAodmFsdWUpIHx8XG5cdFx0aXNTZXQodmFsdWUpXG5cdClcbn1cblxuY29uc3Qgb2JqZWN0Q3RvclN0cmluZyA9IE9iamVjdC5wcm90b3R5cGUuY29uc3RydWN0b3IudG9TdHJpbmcoKVxuLyojX19QVVJFX18qL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuXHRpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIikgcmV0dXJuIGZhbHNlXG5cdGNvbnN0IHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKVxuXHRpZiAocHJvdG8gPT09IG51bGwpIHtcblx0XHRyZXR1cm4gdHJ1ZVxuXHR9XG5cdGNvbnN0IEN0b3IgPVxuXHRcdE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3RvLCBcImNvbnN0cnVjdG9yXCIpICYmIHByb3RvLmNvbnN0cnVjdG9yXG5cblx0aWYgKEN0b3IgPT09IE9iamVjdCkgcmV0dXJuIHRydWVcblxuXHRyZXR1cm4gKFxuXHRcdHR5cGVvZiBDdG9yID09IFwiZnVuY3Rpb25cIiAmJlxuXHRcdEZ1bmN0aW9uLnRvU3RyaW5nLmNhbGwoQ3RvcikgPT09IG9iamVjdEN0b3JTdHJpbmdcblx0KVxufVxuXG4vKiogR2V0IHRoZSB1bmRlcmx5aW5nIG9iamVjdCB0aGF0IGlzIHJlcHJlc2VudGVkIGJ5IHRoZSBnaXZlbiBkcmFmdCAqL1xuLyojX19QVVJFX18qL1xuZXhwb3J0IGZ1bmN0aW9uIG9yaWdpbmFsPFQ+KHZhbHVlOiBUKTogVCB8IHVuZGVmaW5lZFxuZXhwb3J0IGZ1bmN0aW9uIG9yaWdpbmFsKHZhbHVlOiBEcmFmdGVkPGFueT4pOiBhbnkge1xuXHRpZiAoIWlzRHJhZnQodmFsdWUpKSBkaWUoMjMsIHZhbHVlKVxuXHRyZXR1cm4gdmFsdWVbRFJBRlRfU1RBVEVdLmJhc2VfXG59XG5cbi8qI19fUFVSRV9fKi9cbmV4cG9ydCBjb25zdCBvd25LZXlzOiAodGFyZ2V0OiBBbnlPYmplY3QpID0+IFByb3BlcnR5S2V5W10gPVxuXHR0eXBlb2YgUmVmbGVjdCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBSZWZsZWN0Lm93bktleXNcblx0XHQ/IFJlZmxlY3Qub3duS2V5c1xuXHRcdDogdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgIT09IFwidW5kZWZpbmVkXCJcblx0XHQ/IG9iaiA9PlxuXHRcdFx0XHRPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopLmNvbmNhdChcblx0XHRcdFx0XHRPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iaikgYXMgYW55XG5cdFx0XHRcdClcblx0XHQ6IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzXG5cbmV4cG9ydCBjb25zdCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID1cblx0T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgfHxcblx0ZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0YXJnZXQ6IGFueSkge1xuXHRcdC8vIFBvbHlmaWxsIG5lZWRlZCBmb3IgSGVybWVzIGFuZCBJRSwgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9oZXJtZXMvaXNzdWVzLzI3NFxuXHRcdGNvbnN0IHJlczogYW55ID0ge31cblx0XHRvd25LZXlzKHRhcmdldCkuZm9yRWFjaChrZXkgPT4ge1xuXHRcdFx0cmVzW2tleV0gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KVxuXHRcdH0pXG5cdFx0cmV0dXJuIHJlc1xuXHR9XG5cbmV4cG9ydCBmdW5jdGlvbiBlYWNoPFQgZXh0ZW5kcyBPYmplY3Rpc2g+KFxuXHRvYmo6IFQsXG5cdGl0ZXI6IChrZXk6IHN0cmluZyB8IG51bWJlciwgdmFsdWU6IGFueSwgc291cmNlOiBUKSA9PiB2b2lkLFxuXHRlbnVtZXJhYmxlT25seT86IGJvb2xlYW5cbik6IHZvaWRcbmV4cG9ydCBmdW5jdGlvbiBlYWNoKG9iajogYW55LCBpdGVyOiBhbnksIGVudW1lcmFibGVPbmx5ID0gZmFsc2UpIHtcblx0aWYgKGdldEFyY2h0eXBlKG9iaikgPT09IEFyY2h0eXBlLk9iamVjdCkge1xuXHRcdDsoZW51bWVyYWJsZU9ubHkgPyBPYmplY3Qua2V5cyA6IG93bktleXMpKG9iaikuZm9yRWFjaChrZXkgPT4ge1xuXHRcdFx0aWYgKCFlbnVtZXJhYmxlT25seSB8fCB0eXBlb2Yga2V5ICE9PSBcInN5bWJvbFwiKSBpdGVyKGtleSwgb2JqW2tleV0sIG9iailcblx0XHR9KVxuXHR9IGVsc2Uge1xuXHRcdG9iai5mb3JFYWNoKChlbnRyeTogYW55LCBpbmRleDogYW55KSA9PiBpdGVyKGluZGV4LCBlbnRyeSwgb2JqKSlcblx0fVxufVxuXG4vKiNfX1BVUkVfXyovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXJjaHR5cGUodGhpbmc6IGFueSk6IEFyY2h0eXBlIHtcblx0LyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblx0Y29uc3Qgc3RhdGU6IHVuZGVmaW5lZCB8IEltbWVyU3RhdGUgPSB0aGluZ1tEUkFGVF9TVEFURV1cblx0cmV0dXJuIHN0YXRlXG5cdFx0PyBzdGF0ZS50eXBlXyA+IDNcblx0XHRcdD8gc3RhdGUudHlwZV8gLSA0IC8vIGNhdXNlIE9iamVjdCBhbmQgQXJyYXkgbWFwIGJhY2sgZnJvbSA0IGFuZCA1XG5cdFx0XHQ6IChzdGF0ZS50eXBlXyBhcyBhbnkpIC8vIG90aGVycyBhcmUgdGhlIHNhbWVcblx0XHQ6IEFycmF5LmlzQXJyYXkodGhpbmcpXG5cdFx0PyBBcmNodHlwZS5BcnJheVxuXHRcdDogaXNNYXAodGhpbmcpXG5cdFx0PyBBcmNodHlwZS5NYXBcblx0XHQ6IGlzU2V0KHRoaW5nKVxuXHRcdD8gQXJjaHR5cGUuU2V0XG5cdFx0OiBBcmNodHlwZS5PYmplY3Rcbn1cblxuLyojX19QVVJFX18qL1xuZXhwb3J0IGZ1bmN0aW9uIGhhcyh0aGluZzogYW55LCBwcm9wOiBQcm9wZXJ0eUtleSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gZ2V0QXJjaHR5cGUodGhpbmcpID09PSBBcmNodHlwZS5NYXBcblx0XHQ/IHRoaW5nLmhhcyhwcm9wKVxuXHRcdDogT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaW5nLCBwcm9wKVxufVxuXG4vKiNfX1BVUkVfXyovXG5leHBvcnQgZnVuY3Rpb24gZ2V0KHRoaW5nOiBBbnlNYXAgfCBBbnlPYmplY3QsIHByb3A6IFByb3BlcnR5S2V5KTogYW55IHtcblx0Ly8gQHRzLWlnbm9yZVxuXHRyZXR1cm4gZ2V0QXJjaHR5cGUodGhpbmcpID09PSBBcmNodHlwZS5NYXAgPyB0aGluZy5nZXQocHJvcCkgOiB0aGluZ1twcm9wXVxufVxuXG4vKiNfX1BVUkVfXyovXG5leHBvcnQgZnVuY3Rpb24gc2V0KHRoaW5nOiBhbnksIHByb3BPck9sZFZhbHVlOiBQcm9wZXJ0eUtleSwgdmFsdWU6IGFueSkge1xuXHRjb25zdCB0ID0gZ2V0QXJjaHR5cGUodGhpbmcpXG5cdGlmICh0ID09PSBBcmNodHlwZS5NYXApIHRoaW5nLnNldChwcm9wT3JPbGRWYWx1ZSwgdmFsdWUpXG5cdGVsc2UgaWYgKHQgPT09IEFyY2h0eXBlLlNldCkge1xuXHRcdHRoaW5nLmFkZCh2YWx1ZSlcblx0fSBlbHNlIHRoaW5nW3Byb3BPck9sZFZhbHVlXSA9IHZhbHVlXG59XG5cbi8qI19fUFVSRV9fKi9cbmV4cG9ydCBmdW5jdGlvbiBpcyh4OiBhbnksIHk6IGFueSk6IGJvb2xlYW4ge1xuXHQvLyBGcm9tOiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmJqcy9ibG9iL2M2OTkwNGE1MTFiOTAwMjY2OTM1MTY4MjIzMDYzZGQ4NzcyZGZjNDAvcGFja2FnZXMvZmJqcy9zcmMvY29yZS9zaGFsbG93RXF1YWwuanNcblx0aWYgKHggPT09IHkpIHtcblx0XHRyZXR1cm4geCAhPT0gMCB8fCAxIC8geCA9PT0gMSAvIHlcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4geCAhPT0geCAmJiB5ICE9PSB5XG5cdH1cbn1cblxuLyojX19QVVJFX18qL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTWFwKHRhcmdldDogYW55KTogdGFyZ2V0IGlzIEFueU1hcCB7XG5cdHJldHVybiBoYXNNYXAgJiYgdGFyZ2V0IGluc3RhbmNlb2YgTWFwXG59XG5cbi8qI19fUFVSRV9fKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1NldCh0YXJnZXQ6IGFueSk6IHRhcmdldCBpcyBBbnlTZXQge1xuXHRyZXR1cm4gaGFzU2V0ICYmIHRhcmdldCBpbnN0YW5jZW9mIFNldFxufVxuLyojX19QVVJFX18qL1xuZXhwb3J0IGZ1bmN0aW9uIGxhdGVzdChzdGF0ZTogSW1tZXJTdGF0ZSk6IGFueSB7XG5cdHJldHVybiBzdGF0ZS5jb3B5XyB8fCBzdGF0ZS5iYXNlX1xufVxuXG4vKiNfX1BVUkVfXyovXG5leHBvcnQgZnVuY3Rpb24gc2hhbGxvd0NvcHkoYmFzZTogYW55KSB7XG5cdGlmIChBcnJheS5pc0FycmF5KGJhc2UpKSByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYmFzZSlcblx0Y29uc3QgZGVzY3JpcHRvcnMgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGJhc2UpXG5cdGRlbGV0ZSBkZXNjcmlwdG9yc1tEUkFGVF9TVEFURSBhcyBhbnldXG5cdGxldCBrZXlzID0gb3duS2V5cyhkZXNjcmlwdG9ycylcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y29uc3Qga2V5OiBhbnkgPSBrZXlzW2ldXG5cdFx0Y29uc3QgZGVzYyA9IGRlc2NyaXB0b3JzW2tleV1cblx0XHRpZiAoZGVzYy53cml0YWJsZSA9PT0gZmFsc2UpIHtcblx0XHRcdGRlc2Mud3JpdGFibGUgPSB0cnVlXG5cdFx0XHRkZXNjLmNvbmZpZ3VyYWJsZSA9IHRydWVcblx0XHR9XG5cdFx0Ly8gbGlrZSBvYmplY3QuYXNzaWduLCB3ZSB3aWxsIHJlYWQgYW55IF9vd25fLCBnZXQvc2V0IGFjY2Vzc29ycy4gVGhpcyBoZWxwcyBpbiBkZWFsaW5nXG5cdFx0Ly8gd2l0aCBsaWJyYXJpZXMgdGhhdCB0cmFwIHZhbHVlcywgbGlrZSBtb2J4IG9yIHZ1ZVxuXHRcdC8vIHVubGlrZSBvYmplY3QuYXNzaWduLCBub24tZW51bWVyYWJsZXMgd2lsbCBiZSBjb3BpZWQgYXMgd2VsbFxuXHRcdGlmIChkZXNjLmdldCB8fCBkZXNjLnNldClcblx0XHRcdGRlc2NyaXB0b3JzW2tleV0gPSB7XG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0d3JpdGFibGU6IHRydWUsIC8vIGNvdWxkIGxpdmUgd2l0aCAhIWRlc2Muc2V0IGFzIHdlbGwgaGVyZS4uLlxuXHRcdFx0XHRlbnVtZXJhYmxlOiBkZXNjLmVudW1lcmFibGUsXG5cdFx0XHRcdHZhbHVlOiBiYXNlW2tleV1cblx0XHRcdH1cblx0fVxuXHRyZXR1cm4gT2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2YoYmFzZSksIGRlc2NyaXB0b3JzKVxufVxuXG4vKipcbiAqIEZyZWV6ZXMgZHJhZnRhYmxlIG9iamVjdHMuIFJldHVybnMgdGhlIG9yaWdpbmFsIG9iamVjdC5cbiAqIEJ5IGRlZmF1bHQgZnJlZXplcyBzaGFsbG93bHksIGJ1dCBpZiB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIGB0cnVlYCBpdCB3aWxsIGZyZWV6ZSByZWN1cnNpdmVseS5cbiAqXG4gKiBAcGFyYW0gb2JqXG4gKiBAcGFyYW0gZGVlcFxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJlZXplPFQ+KG9iajogVCwgZGVlcD86IGJvb2xlYW4pOiBUXG5leHBvcnQgZnVuY3Rpb24gZnJlZXplPFQ+KG9iajogYW55LCBkZWVwOiBib29sZWFuID0gZmFsc2UpOiBUIHtcblx0aWYgKGlzRnJvemVuKG9iaikgfHwgaXNEcmFmdChvYmopIHx8ICFpc0RyYWZ0YWJsZShvYmopKSByZXR1cm4gb2JqXG5cdGlmIChnZXRBcmNodHlwZShvYmopID4gMSAvKiBNYXAgb3IgU2V0ICovKSB7XG5cdFx0b2JqLnNldCA9IG9iai5hZGQgPSBvYmouY2xlYXIgPSBvYmouZGVsZXRlID0gZG9udE11dGF0ZUZyb3plbkNvbGxlY3Rpb25zIGFzIGFueVxuXHR9XG5cdE9iamVjdC5mcmVlemUob2JqKVxuXHRpZiAoZGVlcCkgZWFjaChvYmosIChrZXksIHZhbHVlKSA9PiBmcmVlemUodmFsdWUsIHRydWUpLCB0cnVlKVxuXHRyZXR1cm4gb2JqXG59XG5cbmZ1bmN0aW9uIGRvbnRNdXRhdGVGcm96ZW5Db2xsZWN0aW9ucygpIHtcblx0ZGllKDIpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Zyb3plbihvYmo6IGFueSk6IGJvb2xlYW4ge1xuXHRpZiAob2JqID09IG51bGwgfHwgdHlwZW9mIG9iaiAhPT0gXCJvYmplY3RcIikgcmV0dXJuIHRydWVcblx0Ly8gU2VlICM2MDAsIElFIGRpZXMgb24gbm9uLW9iamVjdHMgaW4gT2JqZWN0LmlzRnJvemVuXG5cdHJldHVybiBPYmplY3QuaXNGcm96ZW4ob2JqKVxufVxuIiwgImltcG9ydCB7XG5cdEltbWVyU3RhdGUsXG5cdFBhdGNoLFxuXHRJbW1lclNjb3BlLFxuXHREcmFmdGVkLFxuXHRBbnlPYmplY3QsXG5cdEltbWVyQmFzZVN0YXRlLFxuXHRBbnlNYXAsXG5cdEFueVNldCxcblx0UHJveHlUeXBlLFxuXHRkaWVcbn0gZnJvbSBcIi4uL2ludGVybmFsXCJcblxuLyoqIFBsdWdpbiB1dGlsaXRpZXMgKi9cbmNvbnN0IHBsdWdpbnM6IHtcblx0UGF0Y2hlcz86IHtcblx0XHRnZW5lcmF0ZVBhdGNoZXNfKFxuXHRcdFx0c3RhdGU6IEltbWVyU3RhdGUsXG5cdFx0XHRiYXNlUGF0aDogUGF0Y2hQYXRoLFxuXHRcdFx0cGF0Y2hlczogUGF0Y2hbXSxcblx0XHRcdGludmVyc2VQYXRjaGVzOiBQYXRjaFtdXG5cdFx0KTogdm9pZFxuXHRcdGdlbmVyYXRlUmVwbGFjZW1lbnRQYXRjaGVzXyhcblx0XHRcdGJhc2U6IGFueSxcblx0XHRcdHJlcGxhY2VtZW50OiBhbnksXG5cdFx0XHRwYXRjaGVzOiBQYXRjaFtdLFxuXHRcdFx0aW52ZXJzZVBhdGNoZXM6IFBhdGNoW11cblx0XHQpOiB2b2lkXG5cdFx0YXBwbHlQYXRjaGVzXzxUPihkcmFmdDogVCwgcGF0Y2hlczogUGF0Y2hbXSk6IFRcblx0fVxuXHRFUzU/OiB7XG5cdFx0d2lsbEZpbmFsaXplRVM1XyhzY29wZTogSW1tZXJTY29wZSwgcmVzdWx0OiBhbnksIGlzUmVwbGFjZWQ6IGJvb2xlYW4pOiB2b2lkXG5cdFx0Y3JlYXRlRVM1UHJveHlfPFQ+KFxuXHRcdFx0YmFzZTogVCxcblx0XHRcdHBhcmVudD86IEltbWVyU3RhdGVcblx0XHQpOiBEcmFmdGVkPFQsIEVTNU9iamVjdFN0YXRlIHwgRVM1QXJyYXlTdGF0ZT5cblx0XHRoYXNDaGFuZ2VzXyhzdGF0ZTogRVM1QXJyYXlTdGF0ZSB8IEVTNU9iamVjdFN0YXRlKTogYm9vbGVhblxuXHR9XG5cdE1hcFNldD86IHtcblx0XHRwcm94eU1hcF88VCBleHRlbmRzIEFueU1hcD4odGFyZ2V0OiBULCBwYXJlbnQ/OiBJbW1lclN0YXRlKTogVFxuXHRcdHByb3h5U2V0XzxUIGV4dGVuZHMgQW55U2V0Pih0YXJnZXQ6IFQsIHBhcmVudD86IEltbWVyU3RhdGUpOiBUXG5cdH1cbn0gPSB7fVxuXG50eXBlIFBsdWdpbnMgPSB0eXBlb2YgcGx1Z2luc1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGx1Z2luPEsgZXh0ZW5kcyBrZXlvZiBQbHVnaW5zPihcblx0cGx1Z2luS2V5OiBLXG4pOiBFeGNsdWRlPFBsdWdpbnNbS10sIHVuZGVmaW5lZD4ge1xuXHRjb25zdCBwbHVnaW4gPSBwbHVnaW5zW3BsdWdpbktleV1cblx0aWYgKCFwbHVnaW4pIHtcblx0XHRkaWUoMTgsIHBsdWdpbktleSlcblx0fVxuXHQvLyBAdHMtaWdub3JlXG5cdHJldHVybiBwbHVnaW5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRQbHVnaW48SyBleHRlbmRzIGtleW9mIFBsdWdpbnM+KFxuXHRwbHVnaW5LZXk6IEssXG5cdGltcGxlbWVudGF0aW9uOiBQbHVnaW5zW0tdXG4pOiB2b2lkIHtcblx0aWYgKCFwbHVnaW5zW3BsdWdpbktleV0pIHBsdWdpbnNbcGx1Z2luS2V5XSA9IGltcGxlbWVudGF0aW9uXG59XG5cbi8qKiBFUzUgUGx1Z2luICovXG5cbmludGVyZmFjZSBFUzVCYXNlU3RhdGUgZXh0ZW5kcyBJbW1lckJhc2VTdGF0ZSB7XG5cdGFzc2lnbmVkXzoge1trZXk6IHN0cmluZ106IGFueX1cblx0cGFyZW50Xz86IEltbWVyU3RhdGVcblx0cmV2b2tlZF86IGJvb2xlYW5cbn1cblxuZXhwb3J0IGludGVyZmFjZSBFUzVPYmplY3RTdGF0ZSBleHRlbmRzIEVTNUJhc2VTdGF0ZSB7XG5cdHR5cGVfOiBQcm94eVR5cGUuRVM1T2JqZWN0XG5cdGRyYWZ0XzogRHJhZnRlZDxBbnlPYmplY3QsIEVTNU9iamVjdFN0YXRlPlxuXHRiYXNlXzogQW55T2JqZWN0XG5cdGNvcHlfOiBBbnlPYmplY3QgfCBudWxsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRVM1QXJyYXlTdGF0ZSBleHRlbmRzIEVTNUJhc2VTdGF0ZSB7XG5cdHR5cGVfOiBQcm94eVR5cGUuRVM1QXJyYXlcblx0ZHJhZnRfOiBEcmFmdGVkPEFueU9iamVjdCwgRVM1QXJyYXlTdGF0ZT5cblx0YmFzZV86IGFueVxuXHRjb3B5XzogYW55XG59XG5cbi8qKiBNYXAgLyBTZXQgcGx1Z2luICovXG5cbmV4cG9ydCBpbnRlcmZhY2UgTWFwU3RhdGUgZXh0ZW5kcyBJbW1lckJhc2VTdGF0ZSB7XG5cdHR5cGVfOiBQcm94eVR5cGUuTWFwXG5cdGNvcHlfOiBBbnlNYXAgfCB1bmRlZmluZWRcblx0YXNzaWduZWRfOiBNYXA8YW55LCBib29sZWFuPiB8IHVuZGVmaW5lZFxuXHRiYXNlXzogQW55TWFwXG5cdHJldm9rZWRfOiBib29sZWFuXG5cdGRyYWZ0XzogRHJhZnRlZDxBbnlNYXAsIE1hcFN0YXRlPlxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNldFN0YXRlIGV4dGVuZHMgSW1tZXJCYXNlU3RhdGUge1xuXHR0eXBlXzogUHJveHlUeXBlLlNldFxuXHRjb3B5XzogQW55U2V0IHwgdW5kZWZpbmVkXG5cdGJhc2VfOiBBbnlTZXRcblx0ZHJhZnRzXzogTWFwPGFueSwgRHJhZnRlZD4gLy8gbWFwcyB0aGUgb3JpZ2luYWwgdmFsdWUgdG8gdGhlIGRyYWZ0IHZhbHVlIGluIHRoZSBuZXcgc2V0XG5cdHJldm9rZWRfOiBib29sZWFuXG5cdGRyYWZ0XzogRHJhZnRlZDxBbnlTZXQsIFNldFN0YXRlPlxufVxuXG4vKiogUGF0Y2hlcyBwbHVnaW4gKi9cblxuZXhwb3J0IHR5cGUgUGF0Y2hQYXRoID0gKHN0cmluZyB8IG51bWJlcilbXVxuIiwgImltcG9ydCB7XG5cdFBhdGNoLFxuXHRQYXRjaExpc3RlbmVyLFxuXHREcmFmdGVkLFxuXHRJbW1lcixcblx0RFJBRlRfU1RBVEUsXG5cdEltbWVyU3RhdGUsXG5cdFByb3h5VHlwZSxcblx0Z2V0UGx1Z2luXG59IGZyb20gXCIuLi9pbnRlcm5hbFwiXG5pbXBvcnQge2RpZX0gZnJvbSBcIi4uL3V0aWxzL2Vycm9yc1wiXG5cbi8qKiBFYWNoIHNjb3BlIHJlcHJlc2VudHMgYSBgcHJvZHVjZWAgY2FsbC4gKi9cblxuZXhwb3J0IGludGVyZmFjZSBJbW1lclNjb3BlIHtcblx0cGF0Y2hlc18/OiBQYXRjaFtdXG5cdGludmVyc2VQYXRjaGVzXz86IFBhdGNoW11cblx0Y2FuQXV0b0ZyZWV6ZV86IGJvb2xlYW5cblx0ZHJhZnRzXzogYW55W11cblx0cGFyZW50Xz86IEltbWVyU2NvcGVcblx0cGF0Y2hMaXN0ZW5lcl8/OiBQYXRjaExpc3RlbmVyXG5cdGltbWVyXzogSW1tZXJcblx0dW5maW5hbGl6ZWREcmFmdHNfOiBudW1iZXJcbn1cblxubGV0IGN1cnJlbnRTY29wZTogSW1tZXJTY29wZSB8IHVuZGVmaW5lZFxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VycmVudFNjb3BlKCkge1xuXHRpZiAoX19ERVZfXyAmJiAhY3VycmVudFNjb3BlKSBkaWUoMClcblx0cmV0dXJuIGN1cnJlbnRTY29wZSFcbn1cblxuZnVuY3Rpb24gY3JlYXRlU2NvcGUoXG5cdHBhcmVudF86IEltbWVyU2NvcGUgfCB1bmRlZmluZWQsXG5cdGltbWVyXzogSW1tZXJcbik6IEltbWVyU2NvcGUge1xuXHRyZXR1cm4ge1xuXHRcdGRyYWZ0c186IFtdLFxuXHRcdHBhcmVudF8sXG5cdFx0aW1tZXJfLFxuXHRcdC8vIFdoZW5ldmVyIHRoZSBtb2RpZmllZCBkcmFmdCBjb250YWlucyBhIGRyYWZ0IGZyb20gYW5vdGhlciBzY29wZSwgd2Vcblx0XHQvLyBuZWVkIHRvIHByZXZlbnQgYXV0by1mcmVlemluZyBzbyB0aGUgdW5vd25lZCBkcmFmdCBjYW4gYmUgZmluYWxpemVkLlxuXHRcdGNhbkF1dG9GcmVlemVfOiB0cnVlLFxuXHRcdHVuZmluYWxpemVkRHJhZnRzXzogMFxuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VQYXRjaGVzSW5TY29wZShcblx0c2NvcGU6IEltbWVyU2NvcGUsXG5cdHBhdGNoTGlzdGVuZXI/OiBQYXRjaExpc3RlbmVyXG4pIHtcblx0aWYgKHBhdGNoTGlzdGVuZXIpIHtcblx0XHRnZXRQbHVnaW4oXCJQYXRjaGVzXCIpIC8vIGFzc2VydCB3ZSBoYXZlIHRoZSBwbHVnaW5cblx0XHRzY29wZS5wYXRjaGVzXyA9IFtdXG5cdFx0c2NvcGUuaW52ZXJzZVBhdGNoZXNfID0gW11cblx0XHRzY29wZS5wYXRjaExpc3RlbmVyXyA9IHBhdGNoTGlzdGVuZXJcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmV2b2tlU2NvcGUoc2NvcGU6IEltbWVyU2NvcGUpIHtcblx0bGVhdmVTY29wZShzY29wZSlcblx0c2NvcGUuZHJhZnRzXy5mb3JFYWNoKHJldm9rZURyYWZ0KVxuXHQvLyBAdHMtaWdub3JlXG5cdHNjb3BlLmRyYWZ0c18gPSBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZWF2ZVNjb3BlKHNjb3BlOiBJbW1lclNjb3BlKSB7XG5cdGlmIChzY29wZSA9PT0gY3VycmVudFNjb3BlKSB7XG5cdFx0Y3VycmVudFNjb3BlID0gc2NvcGUucGFyZW50X1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnRlclNjb3BlKGltbWVyOiBJbW1lcikge1xuXHRyZXR1cm4gKGN1cnJlbnRTY29wZSA9IGNyZWF0ZVNjb3BlKGN1cnJlbnRTY29wZSwgaW1tZXIpKVxufVxuXG5mdW5jdGlvbiByZXZva2VEcmFmdChkcmFmdDogRHJhZnRlZCkge1xuXHRjb25zdCBzdGF0ZTogSW1tZXJTdGF0ZSA9IGRyYWZ0W0RSQUZUX1NUQVRFXVxuXHRpZiAoXG5cdFx0c3RhdGUudHlwZV8gPT09IFByb3h5VHlwZS5Qcm94eU9iamVjdCB8fFxuXHRcdHN0YXRlLnR5cGVfID09PSBQcm94eVR5cGUuUHJveHlBcnJheVxuXHQpXG5cdFx0c3RhdGUucmV2b2tlXygpXG5cdGVsc2Ugc3RhdGUucmV2b2tlZF8gPSB0cnVlXG59XG4iLCAiaW1wb3J0IHtcblx0SW1tZXJTY29wZSxcblx0RFJBRlRfU1RBVEUsXG5cdGlzRHJhZnRhYmxlLFxuXHROT1RISU5HLFxuXHRQYXRjaFBhdGgsXG5cdGVhY2gsXG5cdGhhcyxcblx0ZnJlZXplLFxuXHRJbW1lclN0YXRlLFxuXHRpc0RyYWZ0LFxuXHRTZXRTdGF0ZSxcblx0c2V0LFxuXHRQcm94eVR5cGUsXG5cdGdldFBsdWdpbixcblx0ZGllLFxuXHRyZXZva2VTY29wZSxcblx0aXNGcm96ZW4sXG5cdHNoYWxsb3dDb3B5XG59IGZyb20gXCIuLi9pbnRlcm5hbFwiXG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzUmVzdWx0KHJlc3VsdDogYW55LCBzY29wZTogSW1tZXJTY29wZSkge1xuXHRzY29wZS51bmZpbmFsaXplZERyYWZ0c18gPSBzY29wZS5kcmFmdHNfLmxlbmd0aFxuXHRjb25zdCBiYXNlRHJhZnQgPSBzY29wZS5kcmFmdHNfIVswXVxuXHRjb25zdCBpc1JlcGxhY2VkID0gcmVzdWx0ICE9PSB1bmRlZmluZWQgJiYgcmVzdWx0ICE9PSBiYXNlRHJhZnRcblx0aWYgKCFzY29wZS5pbW1lcl8udXNlUHJveGllc18pXG5cdFx0Z2V0UGx1Z2luKFwiRVM1XCIpLndpbGxGaW5hbGl6ZUVTNV8oc2NvcGUsIHJlc3VsdCwgaXNSZXBsYWNlZClcblx0aWYgKGlzUmVwbGFjZWQpIHtcblx0XHRpZiAoYmFzZURyYWZ0W0RSQUZUX1NUQVRFXS5tb2RpZmllZF8pIHtcblx0XHRcdHJldm9rZVNjb3BlKHNjb3BlKVxuXHRcdFx0ZGllKDQpXG5cdFx0fVxuXHRcdGlmIChpc0RyYWZ0YWJsZShyZXN1bHQpKSB7XG5cdFx0XHQvLyBGaW5hbGl6ZSB0aGUgcmVzdWx0IGluIGNhc2UgaXQgY29udGFpbnMgKG9yIGlzKSBhIHN1YnNldCBvZiB0aGUgZHJhZnQuXG5cdFx0XHRyZXN1bHQgPSBmaW5hbGl6ZShzY29wZSwgcmVzdWx0KVxuXHRcdFx0aWYgKCFzY29wZS5wYXJlbnRfKSBtYXliZUZyZWV6ZShzY29wZSwgcmVzdWx0KVxuXHRcdH1cblx0XHRpZiAoc2NvcGUucGF0Y2hlc18pIHtcblx0XHRcdGdldFBsdWdpbihcIlBhdGNoZXNcIikuZ2VuZXJhdGVSZXBsYWNlbWVudFBhdGNoZXNfKFxuXHRcdFx0XHRiYXNlRHJhZnRbRFJBRlRfU1RBVEVdLmJhc2VfLFxuXHRcdFx0XHRyZXN1bHQsXG5cdFx0XHRcdHNjb3BlLnBhdGNoZXNfLFxuXHRcdFx0XHRzY29wZS5pbnZlcnNlUGF0Y2hlc18hXG5cdFx0XHQpXG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIEZpbmFsaXplIHRoZSBiYXNlIGRyYWZ0LlxuXHRcdHJlc3VsdCA9IGZpbmFsaXplKHNjb3BlLCBiYXNlRHJhZnQsIFtdKVxuXHR9XG5cdHJldm9rZVNjb3BlKHNjb3BlKVxuXHRpZiAoc2NvcGUucGF0Y2hlc18pIHtcblx0XHRzY29wZS5wYXRjaExpc3RlbmVyXyEoc2NvcGUucGF0Y2hlc18sIHNjb3BlLmludmVyc2VQYXRjaGVzXyEpXG5cdH1cblx0cmV0dXJuIHJlc3VsdCAhPT0gTk9USElORyA/IHJlc3VsdCA6IHVuZGVmaW5lZFxufVxuXG5mdW5jdGlvbiBmaW5hbGl6ZShyb290U2NvcGU6IEltbWVyU2NvcGUsIHZhbHVlOiBhbnksIHBhdGg/OiBQYXRjaFBhdGgpIHtcblx0Ly8gRG9uJ3QgcmVjdXJzZSBpbiB0aG8gcmVjdXJzaXZlIGRhdGEgc3RydWN0dXJlc1xuXHRpZiAoaXNGcm96ZW4odmFsdWUpKSByZXR1cm4gdmFsdWVcblxuXHRjb25zdCBzdGF0ZTogSW1tZXJTdGF0ZSA9IHZhbHVlW0RSQUZUX1NUQVRFXVxuXHQvLyBBIHBsYWluIG9iamVjdCwgbWlnaHQgbmVlZCBmcmVlemluZywgbWlnaHQgY29udGFpbiBkcmFmdHNcblx0aWYgKCFzdGF0ZSkge1xuXHRcdGVhY2goXG5cdFx0XHR2YWx1ZSxcblx0XHRcdChrZXksIGNoaWxkVmFsdWUpID0+XG5cdFx0XHRcdGZpbmFsaXplUHJvcGVydHkocm9vdFNjb3BlLCBzdGF0ZSwgdmFsdWUsIGtleSwgY2hpbGRWYWx1ZSwgcGF0aCksXG5cdFx0XHR0cnVlIC8vIFNlZSAjNTkwLCBkb24ndCByZWN1cnNlIGludG8gbm9uLWVudW1lcmFibGUgb2Ygbm9uIGRyYWZ0ZWQgb2JqZWN0c1xuXHRcdClcblx0XHRyZXR1cm4gdmFsdWVcblx0fVxuXHQvLyBOZXZlciBmaW5hbGl6ZSBkcmFmdHMgb3duZWQgYnkgYW5vdGhlciBzY29wZS5cblx0aWYgKHN0YXRlLnNjb3BlXyAhPT0gcm9vdFNjb3BlKSByZXR1cm4gdmFsdWVcblx0Ly8gVW5tb2RpZmllZCBkcmFmdCwgcmV0dXJuIHRoZSAoZnJvemVuKSBvcmlnaW5hbFxuXHRpZiAoIXN0YXRlLm1vZGlmaWVkXykge1xuXHRcdG1heWJlRnJlZXplKHJvb3RTY29wZSwgc3RhdGUuYmFzZV8sIHRydWUpXG5cdFx0cmV0dXJuIHN0YXRlLmJhc2VfXG5cdH1cblx0Ly8gTm90IGZpbmFsaXplZCB5ZXQsIGxldCdzIGRvIHRoYXQgbm93XG5cdGlmICghc3RhdGUuZmluYWxpemVkXykge1xuXHRcdHN0YXRlLmZpbmFsaXplZF8gPSB0cnVlXG5cdFx0c3RhdGUuc2NvcGVfLnVuZmluYWxpemVkRHJhZnRzXy0tXG5cdFx0Y29uc3QgcmVzdWx0ID1cblx0XHRcdC8vIEZvciBFUzUsIGNyZWF0ZSBhIGdvb2QgY29weSBmcm9tIHRoZSBkcmFmdCBmaXJzdCwgd2l0aCBhZGRlZCBrZXlzIGFuZCB3aXRob3V0IGRlbGV0ZWQga2V5cy5cblx0XHRcdHN0YXRlLnR5cGVfID09PSBQcm94eVR5cGUuRVM1T2JqZWN0IHx8IHN0YXRlLnR5cGVfID09PSBQcm94eVR5cGUuRVM1QXJyYXlcblx0XHRcdFx0PyAoc3RhdGUuY29weV8gPSBzaGFsbG93Q29weShzdGF0ZS5kcmFmdF8pKVxuXHRcdFx0XHQ6IHN0YXRlLmNvcHlfXG5cdFx0Ly8gRmluYWxpemUgYWxsIGNoaWxkcmVuIG9mIHRoZSBjb3B5XG5cdFx0Ly8gRm9yIHNldHMgd2UgY2xvbmUgYmVmb3JlIGl0ZXJhdGluZywgb3RoZXJ3aXNlIHdlIGNhbiBnZXQgaW4gZW5kbGVzcyBsb29wIGR1ZSB0byBtb2RpZnlpbmcgZHVyaW5nIGl0ZXJhdGlvbiwgc2VlICM2Mjhcblx0XHQvLyBUbyBwcmVzZXJ2ZSBpbnNlcnRpb24gb3JkZXIgaW4gYWxsIGNhc2VzIHdlIHRoZW4gY2xlYXIgdGhlIHNldFxuXHRcdC8vIEFuZCB3ZSBsZXQgZmluYWxpemVQcm9wZXJ0eSBrbm93IGl0IG5lZWRzIHRvIHJlLWFkZCBub24tZHJhZnQgY2hpbGRyZW4gYmFjayB0byB0aGUgdGFyZ2V0XG5cdFx0bGV0IHJlc3VsdEVhY2ggPSByZXN1bHRcblx0XHRsZXQgaXNTZXQgPSBmYWxzZVxuXHRcdGlmIChzdGF0ZS50eXBlXyA9PT0gUHJveHlUeXBlLlNldCkge1xuXHRcdFx0cmVzdWx0RWFjaCA9IG5ldyBTZXQocmVzdWx0KVxuXHRcdFx0cmVzdWx0LmNsZWFyKClcblx0XHRcdGlzU2V0ID0gdHJ1ZVxuXHRcdH1cblx0XHRlYWNoKHJlc3VsdEVhY2gsIChrZXksIGNoaWxkVmFsdWUpID0+XG5cdFx0XHRmaW5hbGl6ZVByb3BlcnR5KHJvb3RTY29wZSwgc3RhdGUsIHJlc3VsdCwga2V5LCBjaGlsZFZhbHVlLCBwYXRoLCBpc1NldClcblx0XHQpXG5cdFx0Ly8gZXZlcnl0aGluZyBpbnNpZGUgaXMgZnJvemVuLCB3ZSBjYW4gZnJlZXplIGhlcmVcblx0XHRtYXliZUZyZWV6ZShyb290U2NvcGUsIHJlc3VsdCwgZmFsc2UpXG5cdFx0Ly8gZmlyc3QgdGltZSBmaW5hbGl6aW5nLCBsZXQncyBjcmVhdGUgdGhvc2UgcGF0Y2hlc1xuXHRcdGlmIChwYXRoICYmIHJvb3RTY29wZS5wYXRjaGVzXykge1xuXHRcdFx0Z2V0UGx1Z2luKFwiUGF0Y2hlc1wiKS5nZW5lcmF0ZVBhdGNoZXNfKFxuXHRcdFx0XHRzdGF0ZSxcblx0XHRcdFx0cGF0aCxcblx0XHRcdFx0cm9vdFNjb3BlLnBhdGNoZXNfLFxuXHRcdFx0XHRyb290U2NvcGUuaW52ZXJzZVBhdGNoZXNfIVxuXHRcdFx0KVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gc3RhdGUuY29weV9cbn1cblxuZnVuY3Rpb24gZmluYWxpemVQcm9wZXJ0eShcblx0cm9vdFNjb3BlOiBJbW1lclNjb3BlLFxuXHRwYXJlbnRTdGF0ZTogdW5kZWZpbmVkIHwgSW1tZXJTdGF0ZSxcblx0dGFyZ2V0T2JqZWN0OiBhbnksXG5cdHByb3A6IHN0cmluZyB8IG51bWJlcixcblx0Y2hpbGRWYWx1ZTogYW55LFxuXHRyb290UGF0aD86IFBhdGNoUGF0aCxcblx0dGFyZ2V0SXNTZXQ/OiBib29sZWFuXG4pIHtcblx0aWYgKF9fREVWX18gJiYgY2hpbGRWYWx1ZSA9PT0gdGFyZ2V0T2JqZWN0KSBkaWUoNSlcblx0aWYgKGlzRHJhZnQoY2hpbGRWYWx1ZSkpIHtcblx0XHRjb25zdCBwYXRoID1cblx0XHRcdHJvb3RQYXRoICYmXG5cdFx0XHRwYXJlbnRTdGF0ZSAmJlxuXHRcdFx0cGFyZW50U3RhdGUhLnR5cGVfICE9PSBQcm94eVR5cGUuU2V0ICYmIC8vIFNldCBvYmplY3RzIGFyZSBhdG9taWMgc2luY2UgdGhleSBoYXZlIG5vIGtleXMuXG5cdFx0XHQhaGFzKChwYXJlbnRTdGF0ZSBhcyBFeGNsdWRlPEltbWVyU3RhdGUsIFNldFN0YXRlPikuYXNzaWduZWRfISwgcHJvcCkgLy8gU2tpcCBkZWVwIHBhdGNoZXMgZm9yIGFzc2lnbmVkIGtleXMuXG5cdFx0XHRcdD8gcm9vdFBhdGghLmNvbmNhdChwcm9wKVxuXHRcdFx0XHQ6IHVuZGVmaW5lZFxuXHRcdC8vIERyYWZ0cyBvd25lZCBieSBgc2NvcGVgIGFyZSBmaW5hbGl6ZWQgaGVyZS5cblx0XHRjb25zdCByZXMgPSBmaW5hbGl6ZShyb290U2NvcGUsIGNoaWxkVmFsdWUsIHBhdGgpXG5cdFx0c2V0KHRhcmdldE9iamVjdCwgcHJvcCwgcmVzKVxuXHRcdC8vIERyYWZ0cyBmcm9tIGFub3RoZXIgc2NvcGUgbXVzdCBwcmV2ZW50ZWQgdG8gYmUgZnJvemVuXG5cdFx0Ly8gaWYgd2UgZ290IGEgZHJhZnQgYmFjayBmcm9tIGZpbmFsaXplLCB3ZSdyZSBpbiBhIG5lc3RlZCBwcm9kdWNlIGFuZCBzaG91bGRuJ3QgZnJlZXplXG5cdFx0aWYgKGlzRHJhZnQocmVzKSkge1xuXHRcdFx0cm9vdFNjb3BlLmNhbkF1dG9GcmVlemVfID0gZmFsc2Vcblx0XHR9IGVsc2UgcmV0dXJuXG5cdH0gZWxzZSBpZiAodGFyZ2V0SXNTZXQpIHtcblx0XHR0YXJnZXRPYmplY3QuYWRkKGNoaWxkVmFsdWUpXG5cdH1cblx0Ly8gU2VhcmNoIG5ldyBvYmplY3RzIGZvciB1bmZpbmFsaXplZCBkcmFmdHMuIEZyb3plbiBvYmplY3RzIHNob3VsZCBuZXZlciBjb250YWluIGRyYWZ0cy5cblx0aWYgKGlzRHJhZnRhYmxlKGNoaWxkVmFsdWUpICYmICFpc0Zyb3plbihjaGlsZFZhbHVlKSkge1xuXHRcdGlmICghcm9vdFNjb3BlLmltbWVyXy5hdXRvRnJlZXplXyAmJiByb290U2NvcGUudW5maW5hbGl6ZWREcmFmdHNfIDwgMSkge1xuXHRcdFx0Ly8gb3B0aW1pemF0aW9uOiBpZiBhbiBvYmplY3QgaXMgbm90IGEgZHJhZnQsIGFuZCB3ZSBkb24ndCBoYXZlIHRvXG5cdFx0XHQvLyBkZWVwZnJlZXplIGV2ZXJ5dGhpbmcsIGFuZCB3ZSBhcmUgc3VyZSB0aGF0IG5vIGRyYWZ0cyBhcmUgbGVmdCBpbiB0aGUgcmVtYWluaW5nIG9iamVjdFxuXHRcdFx0Ly8gY2F1c2Ugd2Ugc2F3IGFuZCBmaW5hbGl6ZWQgYWxsIGRyYWZ0cyBhbHJlYWR5OyB3ZSBjYW4gc3RvcCB2aXNpdGluZyB0aGUgcmVzdCBvZiB0aGUgdHJlZS5cblx0XHRcdC8vIFRoaXMgYmVuZWZpdHMgZXNwZWNpYWxseSBhZGRpbmcgbGFyZ2UgZGF0YSB0cmVlJ3Mgd2l0aG91dCBmdXJ0aGVyIHByb2Nlc3NpbmcuXG5cdFx0XHQvLyBTZWUgYWRkLWRhdGEuanMgcGVyZiB0ZXN0XG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cdFx0ZmluYWxpemUocm9vdFNjb3BlLCBjaGlsZFZhbHVlKVxuXHRcdC8vIGltbWVyIGRlZXAgZnJlZXplcyBwbGFpbiBvYmplY3RzLCBzbyBpZiB0aGVyZSBpcyBubyBwYXJlbnQgc3RhdGUsIHdlIGZyZWV6ZSBhcyB3ZWxsXG5cdFx0aWYgKCFwYXJlbnRTdGF0ZSB8fCAhcGFyZW50U3RhdGUuc2NvcGVfLnBhcmVudF8pXG5cdFx0XHRtYXliZUZyZWV6ZShyb290U2NvcGUsIGNoaWxkVmFsdWUpXG5cdH1cbn1cblxuZnVuY3Rpb24gbWF5YmVGcmVlemUoc2NvcGU6IEltbWVyU2NvcGUsIHZhbHVlOiBhbnksIGRlZXAgPSBmYWxzZSkge1xuXHQvLyB3ZSBuZXZlciBmcmVlemUgZm9yIGEgbm9uLXJvb3Qgc2NvcGU7IGFzIGl0IHdvdWxkIHByZXZlbnQgcHJ1bmluZyBmb3IgZHJhZnRzIGluc2lkZSB3cmFwcGluZyBvYmplY3RzXG5cdGlmICghc2NvcGUucGFyZW50XyAmJiBzY29wZS5pbW1lcl8uYXV0b0ZyZWV6ZV8gJiYgc2NvcGUuY2FuQXV0b0ZyZWV6ZV8pIHtcblx0XHRmcmVlemUodmFsdWUsIGRlZXApXG5cdH1cbn1cbiIsICJpbXBvcnQge1xuXHRlYWNoLFxuXHRoYXMsXG5cdGlzLFxuXHRpc0RyYWZ0YWJsZSxcblx0c2hhbGxvd0NvcHksXG5cdGxhdGVzdCxcblx0SW1tZXJCYXNlU3RhdGUsXG5cdEltbWVyU3RhdGUsXG5cdERyYWZ0ZWQsXG5cdEFueU9iamVjdCxcblx0QW55QXJyYXksXG5cdE9iamVjdGlzaCxcblx0Z2V0Q3VycmVudFNjb3BlLFxuXHREUkFGVF9TVEFURSxcblx0ZGllLFxuXHRjcmVhdGVQcm94eSxcblx0UHJveHlUeXBlXG59IGZyb20gXCIuLi9pbnRlcm5hbFwiXG5cbmludGVyZmFjZSBQcm94eUJhc2VTdGF0ZSBleHRlbmRzIEltbWVyQmFzZVN0YXRlIHtcblx0YXNzaWduZWRfOiB7XG5cdFx0W3Byb3BlcnR5OiBzdHJpbmddOiBib29sZWFuXG5cdH1cblx0cGFyZW50Xz86IEltbWVyU3RhdGVcblx0cmV2b2tlXygpOiB2b2lkXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJveHlPYmplY3RTdGF0ZSBleHRlbmRzIFByb3h5QmFzZVN0YXRlIHtcblx0dHlwZV86IFByb3h5VHlwZS5Qcm94eU9iamVjdFxuXHRiYXNlXzogYW55XG5cdGNvcHlfOiBhbnlcblx0ZHJhZnRfOiBEcmFmdGVkPEFueU9iamVjdCwgUHJveHlPYmplY3RTdGF0ZT5cbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcm94eUFycmF5U3RhdGUgZXh0ZW5kcyBQcm94eUJhc2VTdGF0ZSB7XG5cdHR5cGVfOiBQcm94eVR5cGUuUHJveHlBcnJheVxuXHRiYXNlXzogQW55QXJyYXlcblx0Y29weV86IEFueUFycmF5IHwgbnVsbFxuXHRkcmFmdF86IERyYWZ0ZWQ8QW55QXJyYXksIFByb3h5QXJyYXlTdGF0ZT5cbn1cblxudHlwZSBQcm94eVN0YXRlID0gUHJveHlPYmplY3RTdGF0ZSB8IFByb3h5QXJyYXlTdGF0ZVxuXG4vKipcbiAqIFJldHVybnMgYSBuZXcgZHJhZnQgb2YgdGhlIGBiYXNlYCBvYmplY3QuXG4gKlxuICogVGhlIHNlY29uZCBhcmd1bWVudCBpcyB0aGUgcGFyZW50IGRyYWZ0LXN0YXRlICh1c2VkIGludGVybmFsbHkpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUHJveHlQcm94eTxUIGV4dGVuZHMgT2JqZWN0aXNoPihcblx0YmFzZTogVCxcblx0cGFyZW50PzogSW1tZXJTdGF0ZVxuKTogRHJhZnRlZDxULCBQcm94eVN0YXRlPiB7XG5cdGNvbnN0IGlzQXJyYXkgPSBBcnJheS5pc0FycmF5KGJhc2UpXG5cdGNvbnN0IHN0YXRlOiBQcm94eVN0YXRlID0ge1xuXHRcdHR5cGVfOiBpc0FycmF5ID8gUHJveHlUeXBlLlByb3h5QXJyYXkgOiAoUHJveHlUeXBlLlByb3h5T2JqZWN0IGFzIGFueSksXG5cdFx0Ly8gVHJhY2sgd2hpY2ggcHJvZHVjZSBjYWxsIHRoaXMgaXMgYXNzb2NpYXRlZCB3aXRoLlxuXHRcdHNjb3BlXzogcGFyZW50ID8gcGFyZW50LnNjb3BlXyA6IGdldEN1cnJlbnRTY29wZSgpISxcblx0XHQvLyBUcnVlIGZvciBib3RoIHNoYWxsb3cgYW5kIGRlZXAgY2hhbmdlcy5cblx0XHRtb2RpZmllZF86IGZhbHNlLFxuXHRcdC8vIFVzZWQgZHVyaW5nIGZpbmFsaXphdGlvbi5cblx0XHRmaW5hbGl6ZWRfOiBmYWxzZSxcblx0XHQvLyBUcmFjayB3aGljaCBwcm9wZXJ0aWVzIGhhdmUgYmVlbiBhc3NpZ25lZCAodHJ1ZSkgb3IgZGVsZXRlZCAoZmFsc2UpLlxuXHRcdGFzc2lnbmVkXzoge30sXG5cdFx0Ly8gVGhlIHBhcmVudCBkcmFmdCBzdGF0ZS5cblx0XHRwYXJlbnRfOiBwYXJlbnQsXG5cdFx0Ly8gVGhlIGJhc2Ugc3RhdGUuXG5cdFx0YmFzZV86IGJhc2UsXG5cdFx0Ly8gVGhlIGJhc2UgcHJveHkuXG5cdFx0ZHJhZnRfOiBudWxsIGFzIGFueSwgLy8gc2V0IGJlbG93XG5cdFx0Ly8gVGhlIGJhc2UgY29weSB3aXRoIGFueSB1cGRhdGVkIHZhbHVlcy5cblx0XHRjb3B5XzogbnVsbCxcblx0XHQvLyBDYWxsZWQgYnkgdGhlIGBwcm9kdWNlYCBmdW5jdGlvbi5cblx0XHRyZXZva2VfOiBudWxsIGFzIGFueSxcblx0XHRpc01hbnVhbF86IGZhbHNlXG5cdH1cblxuXHQvLyB0aGUgdHJhcHMgbXVzdCB0YXJnZXQgc29tZXRoaW5nLCBhIGJpdCBsaWtlIHRoZSAncmVhbCcgYmFzZS5cblx0Ly8gYnV0IGFsc28sIHdlIG5lZWQgdG8gYmUgYWJsZSB0byBkZXRlcm1pbmUgZnJvbSB0aGUgdGFyZ2V0IHdoYXQgdGhlIHJlbGV2YW50IHN0YXRlIGlzXG5cdC8vICh0byBhdm9pZCBjcmVhdGluZyB0cmFwcyBwZXIgaW5zdGFuY2UgdG8gY2FwdHVyZSB0aGUgc3RhdGUgaW4gY2xvc3VyZSxcblx0Ly8gYW5kIHRvIGF2b2lkIGNyZWF0aW5nIHdlaXJkIGhpZGRlbiBwcm9wZXJ0aWVzIGFzIHdlbGwpXG5cdC8vIFNvIHRoZSB0cmljayBpcyB0byB1c2UgJ3N0YXRlJyBhcyB0aGUgYWN0dWFsICd0YXJnZXQnISAoYW5kIG1ha2Ugc3VyZSB3ZSBpbnRlcmNlcHQgZXZlcnl0aGluZylcblx0Ly8gTm90ZSB0aGF0IGluIHRoZSBjYXNlIG9mIGFuIGFycmF5LCB3ZSBwdXQgdGhlIHN0YXRlIGluIGFuIGFycmF5IHRvIGhhdmUgYmV0dGVyIFJlZmxlY3QgZGVmYXVsdHMgb290YlxuXHRsZXQgdGFyZ2V0OiBUID0gc3RhdGUgYXMgYW55XG5cdGxldCB0cmFwczogUHJveHlIYW5kbGVyPG9iamVjdCB8IEFycmF5PGFueT4+ID0gb2JqZWN0VHJhcHNcblx0aWYgKGlzQXJyYXkpIHtcblx0XHR0YXJnZXQgPSBbc3RhdGVdIGFzIGFueVxuXHRcdHRyYXBzID0gYXJyYXlUcmFwc1xuXHR9XG5cblx0Y29uc3Qge3Jldm9rZSwgcHJveHl9ID0gUHJveHkucmV2b2NhYmxlKHRhcmdldCwgdHJhcHMpXG5cdHN0YXRlLmRyYWZ0XyA9IHByb3h5IGFzIGFueVxuXHRzdGF0ZS5yZXZva2VfID0gcmV2b2tlXG5cdHJldHVybiBwcm94eSBhcyBhbnlcbn1cblxuLyoqXG4gKiBPYmplY3QgZHJhZnRzXG4gKi9cbmV4cG9ydCBjb25zdCBvYmplY3RUcmFwczogUHJveHlIYW5kbGVyPFByb3h5U3RhdGU+ID0ge1xuXHRnZXQoc3RhdGUsIHByb3ApIHtcblx0XHRpZiAocHJvcCA9PT0gRFJBRlRfU1RBVEUpIHJldHVybiBzdGF0ZVxuXG5cdFx0Y29uc3Qgc291cmNlID0gbGF0ZXN0KHN0YXRlKVxuXHRcdGlmICghaGFzKHNvdXJjZSwgcHJvcCkpIHtcblx0XHRcdC8vIG5vbi1leGlzdGluZyBvciBub24tb3duIHByb3BlcnR5Li4uXG5cdFx0XHRyZXR1cm4gcmVhZFByb3BGcm9tUHJvdG8oc3RhdGUsIHNvdXJjZSwgcHJvcClcblx0XHR9XG5cdFx0Y29uc3QgdmFsdWUgPSBzb3VyY2VbcHJvcF1cblx0XHRpZiAoc3RhdGUuZmluYWxpemVkXyB8fCAhaXNEcmFmdGFibGUodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gdmFsdWVcblx0XHR9XG5cdFx0Ly8gQ2hlY2sgZm9yIGV4aXN0aW5nIGRyYWZ0IGluIG1vZGlmaWVkIHN0YXRlLlxuXHRcdC8vIEFzc2lnbmVkIHZhbHVlcyBhcmUgbmV2ZXIgZHJhZnRlZC4gVGhpcyBjYXRjaGVzIGFueSBkcmFmdHMgd2UgY3JlYXRlZCwgdG9vLlxuXHRcdGlmICh2YWx1ZSA9PT0gcGVlayhzdGF0ZS5iYXNlXywgcHJvcCkpIHtcblx0XHRcdHByZXBhcmVDb3B5KHN0YXRlKVxuXHRcdFx0cmV0dXJuIChzdGF0ZS5jb3B5XyFbcHJvcCBhcyBhbnldID0gY3JlYXRlUHJveHkoXG5cdFx0XHRcdHN0YXRlLnNjb3BlXy5pbW1lcl8sXG5cdFx0XHRcdHZhbHVlLFxuXHRcdFx0XHRzdGF0ZVxuXHRcdFx0KSlcblx0XHR9XG5cdFx0cmV0dXJuIHZhbHVlXG5cdH0sXG5cdGhhcyhzdGF0ZSwgcHJvcCkge1xuXHRcdHJldHVybiBwcm9wIGluIGxhdGVzdChzdGF0ZSlcblx0fSxcblx0b3duS2V5cyhzdGF0ZSkge1xuXHRcdHJldHVybiBSZWZsZWN0Lm93bktleXMobGF0ZXN0KHN0YXRlKSlcblx0fSxcblx0c2V0KFxuXHRcdHN0YXRlOiBQcm94eU9iamVjdFN0YXRlLFxuXHRcdHByb3A6IHN0cmluZyAvKiBzdHJpY3RseSBub3QsIGJ1dCBoZWxwcyBUUyAqLyxcblx0XHR2YWx1ZVxuXHQpIHtcblx0XHRjb25zdCBkZXNjID0gZ2V0RGVzY3JpcHRvckZyb21Qcm90byhsYXRlc3Qoc3RhdGUpLCBwcm9wKVxuXHRcdGlmIChkZXNjPy5zZXQpIHtcblx0XHRcdC8vIHNwZWNpYWwgY2FzZTogaWYgdGhpcyB3cml0ZSBpcyBjYXB0dXJlZCBieSBhIHNldHRlciwgd2UgaGF2ZVxuXHRcdFx0Ly8gdG8gdHJpZ2dlciBpdCB3aXRoIHRoZSBjb3JyZWN0IGNvbnRleHRcblx0XHRcdGRlc2Muc2V0LmNhbGwoc3RhdGUuZHJhZnRfLCB2YWx1ZSlcblx0XHRcdHJldHVybiB0cnVlXG5cdFx0fVxuXHRcdGlmICghc3RhdGUubW9kaWZpZWRfKSB7XG5cdFx0XHQvLyB0aGUgbGFzdCBjaGVjayBpcyBiZWNhdXNlIHdlIG5lZWQgdG8gYmUgYWJsZSB0byBkaXN0aW5ndWlzaCBzZXR0aW5nIGEgbm9uLWV4aXN0aW5nIHRvIHVuZGVmaW5lZCAod2hpY2ggaXMgYSBjaGFuZ2UpXG5cdFx0XHQvLyBmcm9tIHNldHRpbmcgYW4gZXhpc3RpbmcgcHJvcGVydHkgd2l0aCB2YWx1ZSB1bmRlZmluZWQgdG8gdW5kZWZpbmVkICh3aGljaCBpcyBub3QgYSBjaGFuZ2UpXG5cdFx0XHRjb25zdCBjdXJyZW50ID0gcGVlayhsYXRlc3Qoc3RhdGUpLCBwcm9wKVxuXHRcdFx0Ly8gc3BlY2lhbCBjYXNlLCBpZiB3ZSBhc3NpZ25pbmcgdGhlIG9yaWdpbmFsIHZhbHVlIHRvIGEgZHJhZnQsIHdlIGNhbiBpZ25vcmUgdGhlIGFzc2lnbm1lbnRcblx0XHRcdGNvbnN0IGN1cnJlbnRTdGF0ZTogUHJveHlPYmplY3RTdGF0ZSA9IGN1cnJlbnQ/LltEUkFGVF9TVEFURV1cblx0XHRcdGlmIChjdXJyZW50U3RhdGUgJiYgY3VycmVudFN0YXRlLmJhc2VfID09PSB2YWx1ZSkge1xuXHRcdFx0XHRzdGF0ZS5jb3B5XyFbcHJvcF0gPSB2YWx1ZVxuXHRcdFx0XHRzdGF0ZS5hc3NpZ25lZF9bcHJvcF0gPSBmYWxzZVxuXHRcdFx0XHRyZXR1cm4gdHJ1ZVxuXHRcdFx0fVxuXHRcdFx0aWYgKGlzKHZhbHVlLCBjdXJyZW50KSAmJiAodmFsdWUgIT09IHVuZGVmaW5lZCB8fCBoYXMoc3RhdGUuYmFzZV8sIHByb3ApKSlcblx0XHRcdFx0cmV0dXJuIHRydWVcblx0XHRcdHByZXBhcmVDb3B5KHN0YXRlKVxuXHRcdFx0bWFya0NoYW5nZWQoc3RhdGUpXG5cdFx0fVxuXG5cdFx0aWYgKFxuXHRcdFx0KHN0YXRlLmNvcHlfIVtwcm9wXSA9PT0gdmFsdWUgJiZcblx0XHRcdFx0Ly8gc3BlY2lhbCBjYXNlOiBoYW5kbGUgbmV3IHByb3BzIHdpdGggdmFsdWUgJ3VuZGVmaW5lZCdcblx0XHRcdFx0KHZhbHVlICE9PSB1bmRlZmluZWQgfHwgcHJvcCBpbiBzdGF0ZS5jb3B5XykpIHx8XG5cdFx0XHQvLyBzcGVjaWFsIGNhc2U6IE5hTlxuXHRcdFx0KE51bWJlci5pc05hTih2YWx1ZSkgJiYgTnVtYmVyLmlzTmFOKHN0YXRlLmNvcHlfIVtwcm9wXSkpXG5cdFx0KVxuXHRcdFx0cmV0dXJuIHRydWVcblxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRzdGF0ZS5jb3B5XyFbcHJvcF0gPSB2YWx1ZVxuXHRcdHN0YXRlLmFzc2lnbmVkX1twcm9wXSA9IHRydWVcblx0XHRyZXR1cm4gdHJ1ZVxuXHR9LFxuXHRkZWxldGVQcm9wZXJ0eShzdGF0ZSwgcHJvcDogc3RyaW5nKSB7XG5cdFx0Ly8gVGhlIGB1bmRlZmluZWRgIGNoZWNrIGlzIGEgZmFzdCBwYXRoIGZvciBwcmUtZXhpc3Rpbmcga2V5cy5cblx0XHRpZiAocGVlayhzdGF0ZS5iYXNlXywgcHJvcCkgIT09IHVuZGVmaW5lZCB8fCBwcm9wIGluIHN0YXRlLmJhc2VfKSB7XG5cdFx0XHRzdGF0ZS5hc3NpZ25lZF9bcHJvcF0gPSBmYWxzZVxuXHRcdFx0cHJlcGFyZUNvcHkoc3RhdGUpXG5cdFx0XHRtYXJrQ2hhbmdlZChzdGF0ZSlcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gaWYgYW4gb3JpZ2luYWxseSBub3QgYXNzaWduZWQgcHJvcGVydHkgd2FzIGRlbGV0ZWRcblx0XHRcdGRlbGV0ZSBzdGF0ZS5hc3NpZ25lZF9bcHJvcF1cblx0XHR9XG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdGlmIChzdGF0ZS5jb3B5XykgZGVsZXRlIHN0YXRlLmNvcHlfW3Byb3BdXG5cdFx0cmV0dXJuIHRydWVcblx0fSxcblx0Ly8gTm90ZTogV2UgbmV2ZXIgY29lcmNlIGBkZXNjLnZhbHVlYCBpbnRvIGFuIEltbWVyIGRyYWZ0LCBiZWNhdXNlIHdlIGNhbid0IG1ha2Vcblx0Ly8gdGhlIHNhbWUgZ3VhcmFudGVlIGluIEVTNSBtb2RlLlxuXHRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc3RhdGUsIHByb3ApIHtcblx0XHRjb25zdCBvd25lciA9IGxhdGVzdChzdGF0ZSlcblx0XHRjb25zdCBkZXNjID0gUmVmbGVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob3duZXIsIHByb3ApXG5cdFx0aWYgKCFkZXNjKSByZXR1cm4gZGVzY1xuXHRcdHJldHVybiB7XG5cdFx0XHR3cml0YWJsZTogdHJ1ZSxcblx0XHRcdGNvbmZpZ3VyYWJsZTogc3RhdGUudHlwZV8gIT09IFByb3h5VHlwZS5Qcm94eUFycmF5IHx8IHByb3AgIT09IFwibGVuZ3RoXCIsXG5cdFx0XHRlbnVtZXJhYmxlOiBkZXNjLmVudW1lcmFibGUsXG5cdFx0XHR2YWx1ZTogb3duZXJbcHJvcF1cblx0XHR9XG5cdH0sXG5cdGRlZmluZVByb3BlcnR5KCkge1xuXHRcdGRpZSgxMSlcblx0fSxcblx0Z2V0UHJvdG90eXBlT2Yoc3RhdGUpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKHN0YXRlLmJhc2VfKVxuXHR9LFxuXHRzZXRQcm90b3R5cGVPZigpIHtcblx0XHRkaWUoMTIpXG5cdH1cbn1cblxuLyoqXG4gKiBBcnJheSBkcmFmdHNcbiAqL1xuXG5jb25zdCBhcnJheVRyYXBzOiBQcm94eUhhbmRsZXI8W1Byb3h5QXJyYXlTdGF0ZV0+ID0ge31cbmVhY2gob2JqZWN0VHJhcHMsIChrZXksIGZuKSA9PiB7XG5cdC8vIEB0cy1pZ25vcmVcblx0YXJyYXlUcmFwc1trZXldID0gZnVuY3Rpb24oKSB7XG5cdFx0YXJndW1lbnRzWzBdID0gYXJndW1lbnRzWzBdWzBdXG5cdFx0cmV0dXJuIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcblx0fVxufSlcbmFycmF5VHJhcHMuZGVsZXRlUHJvcGVydHkgPSBmdW5jdGlvbihzdGF0ZSwgcHJvcCkge1xuXHRpZiAoX19ERVZfXyAmJiBpc05hTihwYXJzZUludChwcm9wIGFzIGFueSkpKSBkaWUoMTMpXG5cdC8vIEB0cy1pZ25vcmVcblx0cmV0dXJuIGFycmF5VHJhcHMuc2V0IS5jYWxsKHRoaXMsIHN0YXRlLCBwcm9wLCB1bmRlZmluZWQpXG59XG5hcnJheVRyYXBzLnNldCA9IGZ1bmN0aW9uKHN0YXRlLCBwcm9wLCB2YWx1ZSkge1xuXHRpZiAoX19ERVZfXyAmJiBwcm9wICE9PSBcImxlbmd0aFwiICYmIGlzTmFOKHBhcnNlSW50KHByb3AgYXMgYW55KSkpIGRpZSgxNClcblx0cmV0dXJuIG9iamVjdFRyYXBzLnNldCEuY2FsbCh0aGlzLCBzdGF0ZVswXSwgcHJvcCwgdmFsdWUsIHN0YXRlWzBdKVxufVxuXG4vLyBBY2Nlc3MgYSBwcm9wZXJ0eSB3aXRob3V0IGNyZWF0aW5nIGFuIEltbWVyIGRyYWZ0LlxuZnVuY3Rpb24gcGVlayhkcmFmdDogRHJhZnRlZCwgcHJvcDogUHJvcGVydHlLZXkpIHtcblx0Y29uc3Qgc3RhdGUgPSBkcmFmdFtEUkFGVF9TVEFURV1cblx0Y29uc3Qgc291cmNlID0gc3RhdGUgPyBsYXRlc3Qoc3RhdGUpIDogZHJhZnRcblx0cmV0dXJuIHNvdXJjZVtwcm9wXVxufVxuXG5mdW5jdGlvbiByZWFkUHJvcEZyb21Qcm90byhzdGF0ZTogSW1tZXJTdGF0ZSwgc291cmNlOiBhbnksIHByb3A6IFByb3BlcnR5S2V5KSB7XG5cdGNvbnN0IGRlc2MgPSBnZXREZXNjcmlwdG9yRnJvbVByb3RvKHNvdXJjZSwgcHJvcClcblx0cmV0dXJuIGRlc2Ncblx0XHQ/IGB2YWx1ZWAgaW4gZGVzY1xuXHRcdFx0PyBkZXNjLnZhbHVlXG5cdFx0XHQ6IC8vIFRoaXMgaXMgYSB2ZXJ5IHNwZWNpYWwgY2FzZSwgaWYgdGhlIHByb3AgaXMgYSBnZXR0ZXIgZGVmaW5lZCBieSB0aGVcblx0XHRcdCAgLy8gcHJvdG90eXBlLCB3ZSBzaG91bGQgaW52b2tlIGl0IHdpdGggdGhlIGRyYWZ0IGFzIGNvbnRleHQhXG5cdFx0XHQgIGRlc2MuZ2V0Py5jYWxsKHN0YXRlLmRyYWZ0Xylcblx0XHQ6IHVuZGVmaW5lZFxufVxuXG5mdW5jdGlvbiBnZXREZXNjcmlwdG9yRnJvbVByb3RvKFxuXHRzb3VyY2U6IGFueSxcblx0cHJvcDogUHJvcGVydHlLZXlcbik6IFByb3BlcnR5RGVzY3JpcHRvciB8IHVuZGVmaW5lZCB7XG5cdC8vICdpbicgY2hlY2tzIHByb3RvIVxuXHRpZiAoIShwcm9wIGluIHNvdXJjZSkpIHJldHVybiB1bmRlZmluZWRcblx0bGV0IHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHNvdXJjZSlcblx0d2hpbGUgKHByb3RvKSB7XG5cdFx0Y29uc3QgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHJvdG8sIHByb3ApXG5cdFx0aWYgKGRlc2MpIHJldHVybiBkZXNjXG5cdFx0cHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG8pXG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFya0NoYW5nZWQoc3RhdGU6IEltbWVyU3RhdGUpIHtcblx0aWYgKCFzdGF0ZS5tb2RpZmllZF8pIHtcblx0XHRzdGF0ZS5tb2RpZmllZF8gPSB0cnVlXG5cdFx0aWYgKHN0YXRlLnBhcmVudF8pIHtcblx0XHRcdG1hcmtDaGFuZ2VkKHN0YXRlLnBhcmVudF8pXG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlQ29weShzdGF0ZToge2Jhc2VfOiBhbnk7IGNvcHlfOiBhbnl9KSB7XG5cdGlmICghc3RhdGUuY29weV8pIHtcblx0XHRzdGF0ZS5jb3B5XyA9IHNoYWxsb3dDb3B5KHN0YXRlLmJhc2VfKVxuXHR9XG59XG4iLCAiaW1wb3J0IHtcblx0SVByb2R1Y2VXaXRoUGF0Y2hlcyxcblx0SVByb2R1Y2UsXG5cdEltbWVyU3RhdGUsXG5cdERyYWZ0ZWQsXG5cdGlzRHJhZnRhYmxlLFxuXHRwcm9jZXNzUmVzdWx0LFxuXHRQYXRjaCxcblx0T2JqZWN0aXNoLFxuXHREUkFGVF9TVEFURSxcblx0RHJhZnQsXG5cdFBhdGNoTGlzdGVuZXIsXG5cdGlzRHJhZnQsXG5cdGlzTWFwLFxuXHRpc1NldCxcblx0Y3JlYXRlUHJveHlQcm94eSxcblx0Z2V0UGx1Z2luLFxuXHRkaWUsXG5cdGhhc1Byb3hpZXMsXG5cdGVudGVyU2NvcGUsXG5cdHJldm9rZVNjb3BlLFxuXHRsZWF2ZVNjb3BlLFxuXHR1c2VQYXRjaGVzSW5TY29wZSxcblx0Z2V0Q3VycmVudFNjb3BlLFxuXHROT1RISU5HLFxuXHRmcmVlemUsXG5cdGN1cnJlbnRcbn0gZnJvbSBcIi4uL2ludGVybmFsXCJcblxuaW50ZXJmYWNlIFByb2R1Y2Vyc0ZucyB7XG5cdHByb2R1Y2U6IElQcm9kdWNlXG5cdHByb2R1Y2VXaXRoUGF0Y2hlczogSVByb2R1Y2VXaXRoUGF0Y2hlc1xufVxuXG5leHBvcnQgY2xhc3MgSW1tZXIgaW1wbGVtZW50cyBQcm9kdWNlcnNGbnMge1xuXHR1c2VQcm94aWVzXzogYm9vbGVhbiA9IGhhc1Byb3hpZXNcblxuXHRhdXRvRnJlZXplXzogYm9vbGVhbiA9IHRydWVcblxuXHRjb25zdHJ1Y3Rvcihjb25maWc/OiB7dXNlUHJveGllcz86IGJvb2xlYW47IGF1dG9GcmVlemU/OiBib29sZWFufSkge1xuXHRcdGlmICh0eXBlb2YgY29uZmlnPy51c2VQcm94aWVzID09PSBcImJvb2xlYW5cIilcblx0XHRcdHRoaXMuc2V0VXNlUHJveGllcyhjb25maWchLnVzZVByb3hpZXMpXG5cdFx0aWYgKHR5cGVvZiBjb25maWc/LmF1dG9GcmVlemUgPT09IFwiYm9vbGVhblwiKVxuXHRcdFx0dGhpcy5zZXRBdXRvRnJlZXplKGNvbmZpZyEuYXV0b0ZyZWV6ZSlcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgYHByb2R1Y2VgIGZ1bmN0aW9uIHRha2VzIGEgdmFsdWUgYW5kIGEgXCJyZWNpcGUgZnVuY3Rpb25cIiAod2hvc2Vcblx0ICogcmV0dXJuIHZhbHVlIG9mdGVuIGRlcGVuZHMgb24gdGhlIGJhc2Ugc3RhdGUpLiBUaGUgcmVjaXBlIGZ1bmN0aW9uIGlzXG5cdCAqIGZyZWUgdG8gbXV0YXRlIGl0cyBmaXJzdCBhcmd1bWVudCBob3dldmVyIGl0IHdhbnRzLiBBbGwgbXV0YXRpb25zIGFyZVxuXHQgKiBvbmx5IGV2ZXIgYXBwbGllZCB0byBhIF9fY29weV9fIG9mIHRoZSBiYXNlIHN0YXRlLlxuXHQgKlxuXHQgKiBQYXNzIG9ubHkgYSBmdW5jdGlvbiB0byBjcmVhdGUgYSBcImN1cnJpZWQgcHJvZHVjZXJcIiB3aGljaCByZWxpZXZlcyB5b3Vcblx0ICogZnJvbSBwYXNzaW5nIHRoZSByZWNpcGUgZnVuY3Rpb24gZXZlcnkgdGltZS5cblx0ICpcblx0ICogT25seSBwbGFpbiBvYmplY3RzIGFuZCBhcnJheXMgYXJlIG1hZGUgbXV0YWJsZS4gQWxsIG90aGVyIG9iamVjdHMgYXJlXG5cdCAqIGNvbnNpZGVyZWQgdW5jb3B5YWJsZS5cblx0ICpcblx0ICogTm90ZTogVGhpcyBmdW5jdGlvbiBpcyBfX2JvdW5kX18gdG8gaXRzIGBJbW1lcmAgaW5zdGFuY2UuXG5cdCAqXG5cdCAqIEBwYXJhbSB7YW55fSBiYXNlIC0gdGhlIGluaXRpYWwgc3RhdGVcblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gcmVjaXBlIC0gZnVuY3Rpb24gdGhhdCByZWNlaXZlcyBhIHByb3h5IG9mIHRoZSBiYXNlIHN0YXRlIGFzIGZpcnN0IGFyZ3VtZW50IGFuZCB3aGljaCBjYW4gYmUgZnJlZWx5IG1vZGlmaWVkXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IHBhdGNoTGlzdGVuZXIgLSBvcHRpb25hbCBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIHdpdGggYWxsIHRoZSBwYXRjaGVzIHByb2R1Y2VkIGhlcmVcblx0ICogQHJldHVybnMge2FueX0gYSBuZXcgc3RhdGUsIG9yIHRoZSBpbml0aWFsIHN0YXRlIGlmIG5vdGhpbmcgd2FzIG1vZGlmaWVkXG5cdCAqL1xuXHRwcm9kdWNlOiBJUHJvZHVjZSA9IChiYXNlOiBhbnksIHJlY2lwZT86IGFueSwgcGF0Y2hMaXN0ZW5lcj86IGFueSkgPT4ge1xuXHRcdC8vIGN1cnJpZWQgaW52b2NhdGlvblxuXHRcdGlmICh0eXBlb2YgYmFzZSA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiByZWNpcGUgIT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0Y29uc3QgZGVmYXVsdEJhc2UgPSByZWNpcGVcblx0XHRcdHJlY2lwZSA9IGJhc2VcblxuXHRcdFx0Y29uc3Qgc2VsZiA9IHRoaXNcblx0XHRcdHJldHVybiBmdW5jdGlvbiBjdXJyaWVkUHJvZHVjZShcblx0XHRcdFx0dGhpczogYW55LFxuXHRcdFx0XHRiYXNlID0gZGVmYXVsdEJhc2UsXG5cdFx0XHRcdC4uLmFyZ3M6IGFueVtdXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIHNlbGYucHJvZHVjZShiYXNlLCAoZHJhZnQ6IERyYWZ0ZWQpID0+IHJlY2lwZS5jYWxsKHRoaXMsIGRyYWZ0LCAuLi5hcmdzKSkgLy8gcHJldHRpZXItaWdub3JlXG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiByZWNpcGUgIT09IFwiZnVuY3Rpb25cIikgZGllKDYpXG5cdFx0aWYgKHBhdGNoTGlzdGVuZXIgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgcGF0Y2hMaXN0ZW5lciAhPT0gXCJmdW5jdGlvblwiKVxuXHRcdFx0ZGllKDcpXG5cblx0XHRsZXQgcmVzdWx0XG5cblx0XHQvLyBPbmx5IHBsYWluIG9iamVjdHMsIGFycmF5cywgYW5kIFwiaW1tZXJhYmxlIGNsYXNzZXNcIiBhcmUgZHJhZnRlZC5cblx0XHRpZiAoaXNEcmFmdGFibGUoYmFzZSkpIHtcblx0XHRcdGNvbnN0IHNjb3BlID0gZW50ZXJTY29wZSh0aGlzKVxuXHRcdFx0Y29uc3QgcHJveHkgPSBjcmVhdGVQcm94eSh0aGlzLCBiYXNlLCB1bmRlZmluZWQpXG5cdFx0XHRsZXQgaGFzRXJyb3IgPSB0cnVlXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRyZXN1bHQgPSByZWNpcGUocHJveHkpXG5cdFx0XHRcdGhhc0Vycm9yID0gZmFsc2Vcblx0XHRcdH0gZmluYWxseSB7XG5cdFx0XHRcdC8vIGZpbmFsbHkgaW5zdGVhZCBvZiBjYXRjaCArIHJldGhyb3cgYmV0dGVyIHByZXNlcnZlcyBvcmlnaW5hbCBzdGFja1xuXHRcdFx0XHRpZiAoaGFzRXJyb3IpIHJldm9rZVNjb3BlKHNjb3BlKVxuXHRcdFx0XHRlbHNlIGxlYXZlU2NvcGUoc2NvcGUpXG5cdFx0XHR9XG5cdFx0XHRpZiAodHlwZW9mIFByb21pc2UgIT09IFwidW5kZWZpbmVkXCIgJiYgcmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0LnRoZW4oXG5cdFx0XHRcdFx0cmVzdWx0ID0+IHtcblx0XHRcdFx0XHRcdHVzZVBhdGNoZXNJblNjb3BlKHNjb3BlLCBwYXRjaExpc3RlbmVyKVxuXHRcdFx0XHRcdFx0cmV0dXJuIHByb2Nlc3NSZXN1bHQocmVzdWx0LCBzY29wZSlcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGVycm9yID0+IHtcblx0XHRcdFx0XHRcdHJldm9rZVNjb3BlKHNjb3BlKVxuXHRcdFx0XHRcdFx0dGhyb3cgZXJyb3Jcblx0XHRcdFx0XHR9XG5cdFx0XHRcdClcblx0XHRcdH1cblx0XHRcdHVzZVBhdGNoZXNJblNjb3BlKHNjb3BlLCBwYXRjaExpc3RlbmVyKVxuXHRcdFx0cmV0dXJuIHByb2Nlc3NSZXN1bHQocmVzdWx0LCBzY29wZSlcblx0XHR9IGVsc2UgaWYgKCFiYXNlIHx8IHR5cGVvZiBiYXNlICE9PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRyZXN1bHQgPSByZWNpcGUoYmFzZSlcblx0XHRcdGlmIChyZXN1bHQgPT09IHVuZGVmaW5lZCkgcmVzdWx0ID0gYmFzZVxuXHRcdFx0aWYgKHJlc3VsdCA9PT0gTk9USElORykgcmVzdWx0ID0gdW5kZWZpbmVkXG5cdFx0XHRpZiAodGhpcy5hdXRvRnJlZXplXykgZnJlZXplKHJlc3VsdCwgdHJ1ZSlcblx0XHRcdGlmIChwYXRjaExpc3RlbmVyKSB7XG5cdFx0XHRcdGNvbnN0IHA6IFBhdGNoW10gPSBbXVxuXHRcdFx0XHRjb25zdCBpcDogUGF0Y2hbXSA9IFtdXG5cdFx0XHRcdGdldFBsdWdpbihcIlBhdGNoZXNcIikuZ2VuZXJhdGVSZXBsYWNlbWVudFBhdGNoZXNfKGJhc2UsIHJlc3VsdCwgcCwgaXApXG5cdFx0XHRcdHBhdGNoTGlzdGVuZXIocCwgaXApXG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzdWx0XG5cdFx0fSBlbHNlIGRpZSgyMSwgYmFzZSlcblx0fVxuXG5cdHByb2R1Y2VXaXRoUGF0Y2hlczogSVByb2R1Y2VXaXRoUGF0Y2hlcyA9IChiYXNlOiBhbnksIHJlY2lwZT86IGFueSk6IGFueSA9PiB7XG5cdFx0Ly8gY3VycmllZCBpbnZvY2F0aW9uXG5cdFx0aWYgKHR5cGVvZiBiYXNlID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdHJldHVybiAoc3RhdGU6IGFueSwgLi4uYXJnczogYW55W10pID0+XG5cdFx0XHRcdHRoaXMucHJvZHVjZVdpdGhQYXRjaGVzKHN0YXRlLCAoZHJhZnQ6IGFueSkgPT4gYmFzZShkcmFmdCwgLi4uYXJncykpXG5cdFx0fVxuXG5cdFx0bGV0IHBhdGNoZXM6IFBhdGNoW10sIGludmVyc2VQYXRjaGVzOiBQYXRjaFtdXG5cdFx0Y29uc3QgcmVzdWx0ID0gdGhpcy5wcm9kdWNlKGJhc2UsIHJlY2lwZSwgKHA6IFBhdGNoW10sIGlwOiBQYXRjaFtdKSA9PiB7XG5cdFx0XHRwYXRjaGVzID0gcFxuXHRcdFx0aW52ZXJzZVBhdGNoZXMgPSBpcFxuXHRcdH0pXG5cblx0XHRpZiAodHlwZW9mIFByb21pc2UgIT09IFwidW5kZWZpbmVkXCIgJiYgcmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuXHRcdFx0cmV0dXJuIHJlc3VsdC50aGVuKG5leHRTdGF0ZSA9PiBbbmV4dFN0YXRlLCBwYXRjaGVzISwgaW52ZXJzZVBhdGNoZXMhXSlcblx0XHR9XG5cdFx0cmV0dXJuIFtyZXN1bHQsIHBhdGNoZXMhLCBpbnZlcnNlUGF0Y2hlcyFdXG5cdH1cblxuXHRjcmVhdGVEcmFmdDxUIGV4dGVuZHMgT2JqZWN0aXNoPihiYXNlOiBUKTogRHJhZnQ8VD4ge1xuXHRcdGlmICghaXNEcmFmdGFibGUoYmFzZSkpIGRpZSg4KVxuXHRcdGlmIChpc0RyYWZ0KGJhc2UpKSBiYXNlID0gY3VycmVudChiYXNlKVxuXHRcdGNvbnN0IHNjb3BlID0gZW50ZXJTY29wZSh0aGlzKVxuXHRcdGNvbnN0IHByb3h5ID0gY3JlYXRlUHJveHkodGhpcywgYmFzZSwgdW5kZWZpbmVkKVxuXHRcdHByb3h5W0RSQUZUX1NUQVRFXS5pc01hbnVhbF8gPSB0cnVlXG5cdFx0bGVhdmVTY29wZShzY29wZSlcblx0XHRyZXR1cm4gcHJveHkgYXMgYW55XG5cdH1cblxuXHRmaW5pc2hEcmFmdDxEIGV4dGVuZHMgRHJhZnQ8YW55Pj4oXG5cdFx0ZHJhZnQ6IEQsXG5cdFx0cGF0Y2hMaXN0ZW5lcj86IFBhdGNoTGlzdGVuZXJcblx0KTogRCBleHRlbmRzIERyYWZ0PGluZmVyIFQ+ID8gVCA6IG5ldmVyIHtcblx0XHRjb25zdCBzdGF0ZTogSW1tZXJTdGF0ZSA9IGRyYWZ0ICYmIChkcmFmdCBhcyBhbnkpW0RSQUZUX1NUQVRFXVxuXHRcdGlmIChfX0RFVl9fKSB7XG5cdFx0XHRpZiAoIXN0YXRlIHx8ICFzdGF0ZS5pc01hbnVhbF8pIGRpZSg5KVxuXHRcdFx0aWYgKHN0YXRlLmZpbmFsaXplZF8pIGRpZSgxMClcblx0XHR9XG5cdFx0Y29uc3Qge3Njb3BlXzogc2NvcGV9ID0gc3RhdGVcblx0XHR1c2VQYXRjaGVzSW5TY29wZShzY29wZSwgcGF0Y2hMaXN0ZW5lcilcblx0XHRyZXR1cm4gcHJvY2Vzc1Jlc3VsdCh1bmRlZmluZWQsIHNjb3BlKVxuXHR9XG5cblx0LyoqXG5cdCAqIFBhc3MgdHJ1ZSB0byBhdXRvbWF0aWNhbGx5IGZyZWV6ZSBhbGwgY29waWVzIGNyZWF0ZWQgYnkgSW1tZXIuXG5cdCAqXG5cdCAqIEJ5IGRlZmF1bHQsIGF1dG8tZnJlZXppbmcgaXMgZW5hYmxlZC5cblx0ICovXG5cdHNldEF1dG9GcmVlemUodmFsdWU6IGJvb2xlYW4pIHtcblx0XHR0aGlzLmF1dG9GcmVlemVfID0gdmFsdWVcblx0fVxuXG5cdC8qKlxuXHQgKiBQYXNzIHRydWUgdG8gdXNlIHRoZSBFUzIwMTUgYFByb3h5YCBjbGFzcyB3aGVuIGNyZWF0aW5nIGRyYWZ0cywgd2hpY2ggaXNcblx0ICogYWx3YXlzIGZhc3RlciB0aGFuIHVzaW5nIEVTNSBwcm94aWVzLlxuXHQgKlxuXHQgKiBCeSBkZWZhdWx0LCBmZWF0dXJlIGRldGVjdGlvbiBpcyB1c2VkLCBzbyBjYWxsaW5nIHRoaXMgaXMgcmFyZWx5IG5lY2Vzc2FyeS5cblx0ICovXG5cdHNldFVzZVByb3hpZXModmFsdWU6IGJvb2xlYW4pIHtcblx0XHRpZiAodmFsdWUgJiYgIWhhc1Byb3hpZXMpIHtcblx0XHRcdGRpZSgyMClcblx0XHR9XG5cdFx0dGhpcy51c2VQcm94aWVzXyA9IHZhbHVlXG5cdH1cblxuXHRhcHBseVBhdGNoZXM8VCBleHRlbmRzIE9iamVjdGlzaD4oYmFzZTogVCwgcGF0Y2hlczogUGF0Y2hbXSk6IFQge1xuXHRcdC8vIElmIGEgcGF0Y2ggcmVwbGFjZXMgdGhlIGVudGlyZSBzdGF0ZSwgdGFrZSB0aGF0IHJlcGxhY2VtZW50IGFzIGJhc2Vcblx0XHQvLyBiZWZvcmUgYXBwbHlpbmcgcGF0Y2hlc1xuXHRcdGxldCBpOiBudW1iZXJcblx0XHRmb3IgKGkgPSBwYXRjaGVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG5cdFx0XHRjb25zdCBwYXRjaCA9IHBhdGNoZXNbaV1cblx0XHRcdGlmIChwYXRjaC5wYXRoLmxlbmd0aCA9PT0gMCAmJiBwYXRjaC5vcCA9PT0gXCJyZXBsYWNlXCIpIHtcblx0XHRcdFx0YmFzZSA9IHBhdGNoLnZhbHVlXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vIElmIHRoZXJlIHdhcyBhIHBhdGNoIHRoYXQgcmVwbGFjZWQgdGhlIGVudGlyZSBzdGF0ZSwgc3RhcnQgZnJvbSB0aGVcblx0XHQvLyBwYXRjaCBhZnRlciB0aGF0LlxuXHRcdGlmIChpID4gLTEpIHtcblx0XHRcdHBhdGNoZXMgPSBwYXRjaGVzLnNsaWNlKGkgKyAxKVxuXHRcdH1cblxuXHRcdGNvbnN0IGFwcGx5UGF0Y2hlc0ltcGwgPSBnZXRQbHVnaW4oXCJQYXRjaGVzXCIpLmFwcGx5UGF0Y2hlc19cblx0XHRpZiAoaXNEcmFmdChiYXNlKSkge1xuXHRcdFx0Ly8gTi5COiBuZXZlciBoaXRzIGlmIHNvbWUgcGF0Y2ggYSByZXBsYWNlbWVudCwgcGF0Y2hlcyBhcmUgbmV2ZXIgZHJhZnRzXG5cdFx0XHRyZXR1cm4gYXBwbHlQYXRjaGVzSW1wbChiYXNlLCBwYXRjaGVzKVxuXHRcdH1cblx0XHQvLyBPdGhlcndpc2UsIHByb2R1Y2UgYSBjb3B5IG9mIHRoZSBiYXNlIHN0YXRlLlxuXHRcdHJldHVybiB0aGlzLnByb2R1Y2UoYmFzZSwgKGRyYWZ0OiBEcmFmdGVkKSA9PlxuXHRcdFx0YXBwbHlQYXRjaGVzSW1wbChkcmFmdCwgcGF0Y2hlcylcblx0XHQpXG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVByb3h5PFQgZXh0ZW5kcyBPYmplY3Rpc2g+KFxuXHRpbW1lcjogSW1tZXIsXG5cdHZhbHVlOiBULFxuXHRwYXJlbnQ/OiBJbW1lclN0YXRlXG4pOiBEcmFmdGVkPFQsIEltbWVyU3RhdGU+IHtcblx0Ly8gcHJlY29uZGl0aW9uOiBjcmVhdGVQcm94eSBzaG91bGQgYmUgZ3VhcmRlZCBieSBpc0RyYWZ0YWJsZSwgc28gd2Uga25vdyB3ZSBjYW4gc2FmZWx5IGRyYWZ0XG5cdGNvbnN0IGRyYWZ0OiBEcmFmdGVkID0gaXNNYXAodmFsdWUpXG5cdFx0PyBnZXRQbHVnaW4oXCJNYXBTZXRcIikucHJveHlNYXBfKHZhbHVlLCBwYXJlbnQpXG5cdFx0OiBpc1NldCh2YWx1ZSlcblx0XHQ/IGdldFBsdWdpbihcIk1hcFNldFwiKS5wcm94eVNldF8odmFsdWUsIHBhcmVudClcblx0XHQ6IGltbWVyLnVzZVByb3hpZXNfXG5cdFx0PyBjcmVhdGVQcm94eVByb3h5KHZhbHVlLCBwYXJlbnQpXG5cdFx0OiBnZXRQbHVnaW4oXCJFUzVcIikuY3JlYXRlRVM1UHJveHlfKHZhbHVlLCBwYXJlbnQpXG5cblx0Y29uc3Qgc2NvcGUgPSBwYXJlbnQgPyBwYXJlbnQuc2NvcGVfIDogZ2V0Q3VycmVudFNjb3BlKClcblx0c2NvcGUuZHJhZnRzXy5wdXNoKGRyYWZ0KVxuXHRyZXR1cm4gZHJhZnRcbn1cbiIsICJpbXBvcnQge1xuXHRkaWUsXG5cdGlzRHJhZnQsXG5cdHNoYWxsb3dDb3B5LFxuXHRlYWNoLFxuXHREUkFGVF9TVEFURSxcblx0Z2V0LFxuXHRzZXQsXG5cdEltbWVyU3RhdGUsXG5cdGlzRHJhZnRhYmxlLFxuXHRBcmNodHlwZSxcblx0Z2V0QXJjaHR5cGUsXG5cdGdldFBsdWdpblxufSBmcm9tIFwiLi4vaW50ZXJuYWxcIlxuXG4vKiogVGFrZXMgYSBzbmFwc2hvdCBvZiB0aGUgY3VycmVudCBzdGF0ZSBvZiBhIGRyYWZ0IGFuZCBmaW5hbGl6ZXMgaXQgKGJ1dCB3aXRob3V0IGZyZWV6aW5nKS4gVGhpcyBpcyBhIGdyZWF0IHV0aWxpdHkgdG8gcHJpbnQgdGhlIGN1cnJlbnQgc3RhdGUgZHVyaW5nIGRlYnVnZ2luZyAobm8gUHJveGllcyBpbiB0aGUgd2F5KS4gVGhlIG91dHB1dCBvZiBjdXJyZW50IGNhbiBhbHNvIGJlIHNhZmVseSBsZWFrZWQgb3V0c2lkZSB0aGUgcHJvZHVjZXIuICovXG5leHBvcnQgZnVuY3Rpb24gY3VycmVudDxUPih2YWx1ZTogVCk6IFRcbmV4cG9ydCBmdW5jdGlvbiBjdXJyZW50KHZhbHVlOiBhbnkpOiBhbnkge1xuXHRpZiAoIWlzRHJhZnQodmFsdWUpKSBkaWUoMjIsIHZhbHVlKVxuXHRyZXR1cm4gY3VycmVudEltcGwodmFsdWUpXG59XG5cbmZ1bmN0aW9uIGN1cnJlbnRJbXBsKHZhbHVlOiBhbnkpOiBhbnkge1xuXHRpZiAoIWlzRHJhZnRhYmxlKHZhbHVlKSkgcmV0dXJuIHZhbHVlXG5cdGNvbnN0IHN0YXRlOiBJbW1lclN0YXRlIHwgdW5kZWZpbmVkID0gdmFsdWVbRFJBRlRfU1RBVEVdXG5cdGxldCBjb3B5OiBhbnlcblx0Y29uc3QgYXJjaFR5cGUgPSBnZXRBcmNodHlwZSh2YWx1ZSlcblx0aWYgKHN0YXRlKSB7XG5cdFx0aWYgKFxuXHRcdFx0IXN0YXRlLm1vZGlmaWVkXyAmJlxuXHRcdFx0KHN0YXRlLnR5cGVfIDwgNCB8fCAhZ2V0UGx1Z2luKFwiRVM1XCIpLmhhc0NoYW5nZXNfKHN0YXRlIGFzIGFueSkpXG5cdFx0KVxuXHRcdFx0cmV0dXJuIHN0YXRlLmJhc2VfXG5cdFx0Ly8gT3B0aW1pemF0aW9uOiBhdm9pZCBnZW5lcmF0aW5nIG5ldyBkcmFmdHMgZHVyaW5nIGNvcHlpbmdcblx0XHRzdGF0ZS5maW5hbGl6ZWRfID0gdHJ1ZVxuXHRcdGNvcHkgPSBjb3B5SGVscGVyKHZhbHVlLCBhcmNoVHlwZSlcblx0XHRzdGF0ZS5maW5hbGl6ZWRfID0gZmFsc2Vcblx0fSBlbHNlIHtcblx0XHRjb3B5ID0gY29weUhlbHBlcih2YWx1ZSwgYXJjaFR5cGUpXG5cdH1cblxuXHRlYWNoKGNvcHksIChrZXksIGNoaWxkVmFsdWUpID0+IHtcblx0XHRpZiAoc3RhdGUgJiYgZ2V0KHN0YXRlLmJhc2VfLCBrZXkpID09PSBjaGlsZFZhbHVlKSByZXR1cm4gLy8gbm8gbmVlZCB0byBjb3B5IG9yIHNlYXJjaCBpbiBzb21ldGhpbmcgdGhhdCBkaWRuJ3QgY2hhbmdlXG5cdFx0c2V0KGNvcHksIGtleSwgY3VycmVudEltcGwoY2hpbGRWYWx1ZSkpXG5cdH0pXG5cdC8vIEluIHRoZSBmdXR1cmUsIHdlIG1pZ2h0IGNvbnNpZGVyIGZyZWV6aW5nIGhlcmUsIGJhc2VkIG9uIHRoZSBjdXJyZW50IHNldHRpbmdzXG5cdHJldHVybiBhcmNoVHlwZSA9PT0gQXJjaHR5cGUuU2V0ID8gbmV3IFNldChjb3B5KSA6IGNvcHlcbn1cblxuZnVuY3Rpb24gY29weUhlbHBlcih2YWx1ZTogYW55LCBhcmNoVHlwZTogbnVtYmVyKTogYW55IHtcblx0Ly8gY3JlYXRlcyBhIHNoYWxsb3cgY29weSwgZXZlbiBpZiBpdCBpcyBhIG1hcCBvciBzZXRcblx0c3dpdGNoIChhcmNoVHlwZSkge1xuXHRcdGNhc2UgQXJjaHR5cGUuTWFwOlxuXHRcdFx0cmV0dXJuIG5ldyBNYXAodmFsdWUpXG5cdFx0Y2FzZSBBcmNodHlwZS5TZXQ6XG5cdFx0XHQvLyBTZXQgd2lsbCBiZSBjbG9uZWQgYXMgYXJyYXkgdGVtcG9yYXJpbHksIHNvIHRoYXQgd2UgY2FuIHJlcGxhY2UgaW5kaXZpZHVhbCBpdGVtc1xuXHRcdFx0cmV0dXJuIEFycmF5LmZyb20odmFsdWUpXG5cdH1cblx0cmV0dXJuIHNoYWxsb3dDb3B5KHZhbHVlKVxufVxuIiwgImltcG9ydCB7XG5cdEltbWVyU3RhdGUsXG5cdERyYWZ0ZWQsXG5cdEVTNUFycmF5U3RhdGUsXG5cdEVTNU9iamVjdFN0YXRlLFxuXHRlYWNoLFxuXHRoYXMsXG5cdGlzRHJhZnQsXG5cdGxhdGVzdCxcblx0RFJBRlRfU1RBVEUsXG5cdGlzLFxuXHRsb2FkUGx1Z2luLFxuXHRJbW1lclNjb3BlLFxuXHRQcm94eVR5cGUsXG5cdGdldEN1cnJlbnRTY29wZSxcblx0ZGllLFxuXHRtYXJrQ2hhbmdlZCxcblx0b2JqZWN0VHJhcHMsXG5cdG93bktleXMsXG5cdGdldE93blByb3BlcnR5RGVzY3JpcHRvcnNcbn0gZnJvbSBcIi4uL2ludGVybmFsXCJcblxudHlwZSBFUzVTdGF0ZSA9IEVTNUFycmF5U3RhdGUgfCBFUzVPYmplY3RTdGF0ZVxuXG5leHBvcnQgZnVuY3Rpb24gZW5hYmxlRVM1KCkge1xuXHRmdW5jdGlvbiB3aWxsRmluYWxpemVFUzVfKFxuXHRcdHNjb3BlOiBJbW1lclNjb3BlLFxuXHRcdHJlc3VsdDogYW55LFxuXHRcdGlzUmVwbGFjZWQ6IGJvb2xlYW5cblx0KSB7XG5cdFx0aWYgKCFpc1JlcGxhY2VkKSB7XG5cdFx0XHRpZiAoc2NvcGUucGF0Y2hlc18pIHtcblx0XHRcdFx0bWFya0NoYW5nZXNSZWN1cnNpdmVseShzY29wZS5kcmFmdHNfIVswXSlcblx0XHRcdH1cblx0XHRcdC8vIFRoaXMgaXMgZmFzdGVyIHdoZW4gd2UgZG9uJ3QgY2FyZSBhYm91dCB3aGljaCBhdHRyaWJ1dGVzIGNoYW5nZWQuXG5cdFx0XHRtYXJrQ2hhbmdlc1N3ZWVwKHNjb3BlLmRyYWZ0c18pXG5cdFx0fVxuXHRcdC8vIFdoZW4gYSBjaGlsZCBkcmFmdCBpcyByZXR1cm5lZCwgbG9vayBmb3IgY2hhbmdlcy5cblx0XHRlbHNlIGlmIChcblx0XHRcdGlzRHJhZnQocmVzdWx0KSAmJlxuXHRcdFx0KHJlc3VsdFtEUkFGVF9TVEFURV0gYXMgRVM1U3RhdGUpLnNjb3BlXyA9PT0gc2NvcGVcblx0XHQpIHtcblx0XHRcdG1hcmtDaGFuZ2VzU3dlZXAoc2NvcGUuZHJhZnRzXylcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBjcmVhdGVFUzVEcmFmdChpc0FycmF5OiBib29sZWFuLCBiYXNlOiBhbnkpIHtcblx0XHRpZiAoaXNBcnJheSkge1xuXHRcdFx0Y29uc3QgZHJhZnQgPSBuZXcgQXJyYXkoYmFzZS5sZW5ndGgpXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGJhc2UubGVuZ3RoOyBpKyspXG5cdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkcmFmdCwgXCJcIiArIGksIHByb3h5UHJvcGVydHkoaSwgdHJ1ZSkpXG5cdFx0XHRyZXR1cm4gZHJhZnRcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgZGVzY3JpcHRvcnMgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGJhc2UpXG5cdFx0XHRkZWxldGUgZGVzY3JpcHRvcnNbRFJBRlRfU1RBVEUgYXMgYW55XVxuXHRcdFx0Y29uc3Qga2V5cyA9IG93bktleXMoZGVzY3JpcHRvcnMpXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0Y29uc3Qga2V5OiBhbnkgPSBrZXlzW2ldXG5cdFx0XHRcdGRlc2NyaXB0b3JzW2tleV0gPSBwcm94eVByb3BlcnR5KFxuXHRcdFx0XHRcdGtleSxcblx0XHRcdFx0XHRpc0FycmF5IHx8ICEhZGVzY3JpcHRvcnNba2V5XS5lbnVtZXJhYmxlXG5cdFx0XHRcdClcblx0XHRcdH1cblx0XHRcdHJldHVybiBPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihiYXNlKSwgZGVzY3JpcHRvcnMpXG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gY3JlYXRlRVM1UHJveHlfPFQ+KFxuXHRcdGJhc2U6IFQsXG5cdFx0cGFyZW50PzogSW1tZXJTdGF0ZVxuXHQpOiBEcmFmdGVkPFQsIEVTNU9iamVjdFN0YXRlIHwgRVM1QXJyYXlTdGF0ZT4ge1xuXHRcdGNvbnN0IGlzQXJyYXkgPSBBcnJheS5pc0FycmF5KGJhc2UpXG5cdFx0Y29uc3QgZHJhZnQgPSBjcmVhdGVFUzVEcmFmdChpc0FycmF5LCBiYXNlKVxuXG5cdFx0Y29uc3Qgc3RhdGU6IEVTNU9iamVjdFN0YXRlIHwgRVM1QXJyYXlTdGF0ZSA9IHtcblx0XHRcdHR5cGVfOiBpc0FycmF5ID8gUHJveHlUeXBlLkVTNUFycmF5IDogKFByb3h5VHlwZS5FUzVPYmplY3QgYXMgYW55KSxcblx0XHRcdHNjb3BlXzogcGFyZW50ID8gcGFyZW50LnNjb3BlXyA6IGdldEN1cnJlbnRTY29wZSgpLFxuXHRcdFx0bW9kaWZpZWRfOiBmYWxzZSxcblx0XHRcdGZpbmFsaXplZF86IGZhbHNlLFxuXHRcdFx0YXNzaWduZWRfOiB7fSxcblx0XHRcdHBhcmVudF86IHBhcmVudCxcblx0XHRcdC8vIGJhc2UgaXMgdGhlIG9iamVjdCB3ZSBhcmUgZHJhZnRpbmdcblx0XHRcdGJhc2VfOiBiYXNlLFxuXHRcdFx0Ly8gZHJhZnQgaXMgdGhlIGRyYWZ0IG9iamVjdCBpdHNlbGYsIHRoYXQgdHJhcHMgYWxsIHJlYWRzIGFuZCByZWFkcyBmcm9tIGVpdGhlciB0aGUgYmFzZSAoaWYgdW5tb2RpZmllZCkgb3IgY29weSAoaWYgbW9kaWZpZWQpXG5cdFx0XHRkcmFmdF86IGRyYWZ0LFxuXHRcdFx0Y29weV86IG51bGwsXG5cdFx0XHRyZXZva2VkXzogZmFsc2UsXG5cdFx0XHRpc01hbnVhbF86IGZhbHNlXG5cdFx0fVxuXG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGRyYWZ0LCBEUkFGVF9TVEFURSwge1xuXHRcdFx0dmFsdWU6IHN0YXRlLFxuXHRcdFx0Ly8gZW51bWVyYWJsZTogZmFsc2UgPC0gdGhlIGRlZmF1bHRcblx0XHRcdHdyaXRhYmxlOiB0cnVlXG5cdFx0fSlcblx0XHRyZXR1cm4gZHJhZnRcblx0fVxuXG5cdC8vIHByb3BlcnR5IGRlc2NyaXB0b3JzIGFyZSByZWN5Y2xlZCB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgY3JlYXRlIGEgZ2V0IGFuZCBzZXQgY2xvc3VyZSBwZXIgcHJvcGVydHksXG5cdC8vIGJ1dCBzaGFyZSB0aGVtIGFsbCBpbnN0ZWFkXG5cdGNvbnN0IGRlc2NyaXB0b3JzOiB7W3Byb3A6IHN0cmluZ106IFByb3BlcnR5RGVzY3JpcHRvcn0gPSB7fVxuXG5cdGZ1bmN0aW9uIHByb3h5UHJvcGVydHkoXG5cdFx0cHJvcDogc3RyaW5nIHwgbnVtYmVyLFxuXHRcdGVudW1lcmFibGU6IGJvb2xlYW5cblx0KTogUHJvcGVydHlEZXNjcmlwdG9yIHtcblx0XHRsZXQgZGVzYyA9IGRlc2NyaXB0b3JzW3Byb3BdXG5cdFx0aWYgKGRlc2MpIHtcblx0XHRcdGRlc2MuZW51bWVyYWJsZSA9IGVudW1lcmFibGVcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZGVzY3JpcHRvcnNbcHJvcF0gPSBkZXNjID0ge1xuXHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdGVudW1lcmFibGUsXG5cdFx0XHRcdGdldCh0aGlzOiBhbnkpIHtcblx0XHRcdFx0XHRjb25zdCBzdGF0ZSA9IHRoaXNbRFJBRlRfU1RBVEVdXG5cdFx0XHRcdFx0aWYgKF9fREVWX18pIGFzc2VydFVucmV2b2tlZChzdGF0ZSlcblx0XHRcdFx0XHQvLyBAdHMtaWdub3JlXG5cdFx0XHRcdFx0cmV0dXJuIG9iamVjdFRyYXBzLmdldChzdGF0ZSwgcHJvcClcblx0XHRcdFx0fSxcblx0XHRcdFx0c2V0KHRoaXM6IGFueSwgdmFsdWUpIHtcblx0XHRcdFx0XHRjb25zdCBzdGF0ZSA9IHRoaXNbRFJBRlRfU1RBVEVdXG5cdFx0XHRcdFx0aWYgKF9fREVWX18pIGFzc2VydFVucmV2b2tlZChzdGF0ZSlcblx0XHRcdFx0XHQvLyBAdHMtaWdub3JlXG5cdFx0XHRcdFx0b2JqZWN0VHJhcHMuc2V0KHN0YXRlLCBwcm9wLCB2YWx1ZSlcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gZGVzY1xuXHR9XG5cblx0Ly8gVGhpcyBsb29rcyBleHBlbnNpdmUsIGJ1dCBvbmx5IHByb3hpZXMgYXJlIHZpc2l0ZWQsIGFuZCBvbmx5IG9iamVjdHMgd2l0aG91dCBrbm93biBjaGFuZ2VzIGFyZSBzY2FubmVkLlxuXHRmdW5jdGlvbiBtYXJrQ2hhbmdlc1N3ZWVwKGRyYWZ0czogRHJhZnRlZDxhbnksIEltbWVyU3RhdGU+W10pIHtcblx0XHQvLyBUaGUgbmF0dXJhbCBvcmRlciBvZiBkcmFmdHMgaW4gdGhlIGBzY29wZWAgYXJyYXkgaXMgYmFzZWQgb24gd2hlbiB0aGV5XG5cdFx0Ly8gd2VyZSBhY2Nlc3NlZC4gQnkgcHJvY2Vzc2luZyBkcmFmdHMgaW4gcmV2ZXJzZSBuYXR1cmFsIG9yZGVyLCB3ZSBoYXZlIGFcblx0XHQvLyBiZXR0ZXIgY2hhbmNlIG9mIHByb2Nlc3NpbmcgbGVhZiBub2RlcyBmaXJzdC4gV2hlbiBhIGxlYWYgbm9kZSBpcyBrbm93biB0b1xuXHRcdC8vIGhhdmUgY2hhbmdlZCwgd2UgY2FuIGF2b2lkIGFueSB0cmF2ZXJzYWwgb2YgaXRzIGFuY2VzdG9yIG5vZGVzLlxuXHRcdGZvciAobGV0IGkgPSBkcmFmdHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0XHRcdGNvbnN0IHN0YXRlOiBFUzVTdGF0ZSA9IGRyYWZ0c1tpXVtEUkFGVF9TVEFURV1cblx0XHRcdGlmICghc3RhdGUubW9kaWZpZWRfKSB7XG5cdFx0XHRcdHN3aXRjaCAoc3RhdGUudHlwZV8pIHtcblx0XHRcdFx0XHRjYXNlIFByb3h5VHlwZS5FUzVBcnJheTpcblx0XHRcdFx0XHRcdGlmIChoYXNBcnJheUNoYW5nZXMoc3RhdGUpKSBtYXJrQ2hhbmdlZChzdGF0ZSlcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0Y2FzZSBQcm94eVR5cGUuRVM1T2JqZWN0OlxuXHRcdFx0XHRcdFx0aWYgKGhhc09iamVjdENoYW5nZXMoc3RhdGUpKSBtYXJrQ2hhbmdlZChzdGF0ZSlcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBtYXJrQ2hhbmdlc1JlY3Vyc2l2ZWx5KG9iamVjdDogYW55KSB7XG5cdFx0aWYgKCFvYmplY3QgfHwgdHlwZW9mIG9iamVjdCAhPT0gXCJvYmplY3RcIikgcmV0dXJuXG5cdFx0Y29uc3Qgc3RhdGU6IEVTNVN0YXRlIHwgdW5kZWZpbmVkID0gb2JqZWN0W0RSQUZUX1NUQVRFXVxuXHRcdGlmICghc3RhdGUpIHJldHVyblxuXHRcdGNvbnN0IHtiYXNlXywgZHJhZnRfLCBhc3NpZ25lZF8sIHR5cGVffSA9IHN0YXRlXG5cdFx0aWYgKHR5cGVfID09PSBQcm94eVR5cGUuRVM1T2JqZWN0KSB7XG5cdFx0XHQvLyBMb29rIGZvciBhZGRlZCBrZXlzLlxuXHRcdFx0Ly8gcHJvYmFibHkgdGhlcmUgaXMgYSBmYXN0ZXIgd2F5IHRvIGRldGVjdCBjaGFuZ2VzLCBhcyBzd2VlcCArIHJlY3Vyc2Ugc2VlbXMgdG8gZG8gc29tZVxuXHRcdFx0Ly8gdW5uZWNlc3Nhcnkgd29yay5cblx0XHRcdC8vIGFsc286IHByb2JhYmx5IHdlIGNhbiBzdG9yZSB0aGUgaW5mb3JtYXRpb24gd2UgZGV0ZWN0IGhlcmUsIHRvIHNwZWVkIHVwIHRyZWUgZmluYWxpemF0aW9uIVxuXHRcdFx0ZWFjaChkcmFmdF8sIGtleSA9PiB7XG5cdFx0XHRcdGlmICgoa2V5IGFzIGFueSkgPT09IERSQUZUX1NUQVRFKSByZXR1cm5cblx0XHRcdFx0Ly8gVGhlIGB1bmRlZmluZWRgIGNoZWNrIGlzIGEgZmFzdCBwYXRoIGZvciBwcmUtZXhpc3Rpbmcga2V5cy5cblx0XHRcdFx0aWYgKChiYXNlXyBhcyBhbnkpW2tleV0gPT09IHVuZGVmaW5lZCAmJiAhaGFzKGJhc2VfLCBrZXkpKSB7XG5cdFx0XHRcdFx0YXNzaWduZWRfW2tleV0gPSB0cnVlXG5cdFx0XHRcdFx0bWFya0NoYW5nZWQoc3RhdGUpXG5cdFx0XHRcdH0gZWxzZSBpZiAoIWFzc2lnbmVkX1trZXldKSB7XG5cdFx0XHRcdFx0Ly8gT25seSB1bnRvdWNoZWQgcHJvcGVydGllcyB0cmlnZ2VyIHJlY3Vyc2lvbi5cblx0XHRcdFx0XHRtYXJrQ2hhbmdlc1JlY3Vyc2l2ZWx5KGRyYWZ0X1trZXldKVxuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdFx0Ly8gTG9vayBmb3IgcmVtb3ZlZCBrZXlzLlxuXHRcdFx0ZWFjaChiYXNlXywga2V5ID0+IHtcblx0XHRcdFx0Ly8gVGhlIGB1bmRlZmluZWRgIGNoZWNrIGlzIGEgZmFzdCBwYXRoIGZvciBwcmUtZXhpc3Rpbmcga2V5cy5cblx0XHRcdFx0aWYgKGRyYWZ0X1trZXldID09PSB1bmRlZmluZWQgJiYgIWhhcyhkcmFmdF8sIGtleSkpIHtcblx0XHRcdFx0XHRhc3NpZ25lZF9ba2V5XSA9IGZhbHNlXG5cdFx0XHRcdFx0bWFya0NoYW5nZWQoc3RhdGUpXG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0fSBlbHNlIGlmICh0eXBlXyA9PT0gUHJveHlUeXBlLkVTNUFycmF5KSB7XG5cdFx0XHRpZiAoaGFzQXJyYXlDaGFuZ2VzKHN0YXRlIGFzIEVTNUFycmF5U3RhdGUpKSB7XG5cdFx0XHRcdG1hcmtDaGFuZ2VkKHN0YXRlKVxuXHRcdFx0XHRhc3NpZ25lZF8ubGVuZ3RoID0gdHJ1ZVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoZHJhZnRfLmxlbmd0aCA8IGJhc2VfLmxlbmd0aCkge1xuXHRcdFx0XHRmb3IgKGxldCBpID0gZHJhZnRfLmxlbmd0aDsgaSA8IGJhc2VfLmxlbmd0aDsgaSsrKSBhc3NpZ25lZF9baV0gPSBmYWxzZVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Zm9yIChsZXQgaSA9IGJhc2VfLmxlbmd0aDsgaSA8IGRyYWZ0Xy5sZW5ndGg7IGkrKykgYXNzaWduZWRfW2ldID0gdHJ1ZVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBNaW5pbXVtIGNvdW50IGlzIGVub3VnaCwgdGhlIG90aGVyIHBhcnRzIGhhcyBiZWVuIHByb2Nlc3NlZC5cblx0XHRcdGNvbnN0IG1pbiA9IE1hdGgubWluKGRyYWZ0Xy5sZW5ndGgsIGJhc2VfLmxlbmd0aClcblxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBtaW47IGkrKykge1xuXHRcdFx0XHQvLyBPbmx5IHVudG91Y2hlZCBpbmRpY2VzIHRyaWdnZXIgcmVjdXJzaW9uLlxuXHRcdFx0XHRpZiAoIWRyYWZ0Xy5oYXNPd25Qcm9wZXJ0eShpKSkge1xuXHRcdFx0XHRcdGFzc2lnbmVkX1tpXSA9IHRydWVcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoYXNzaWduZWRfW2ldID09PSB1bmRlZmluZWQpIG1hcmtDaGFuZ2VzUmVjdXJzaXZlbHkoZHJhZnRfW2ldKVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIGhhc09iamVjdENoYW5nZXMoc3RhdGU6IEVTNU9iamVjdFN0YXRlKSB7XG5cdFx0Y29uc3Qge2Jhc2VfLCBkcmFmdF99ID0gc3RhdGVcblxuXHRcdC8vIFNlYXJjaCBmb3IgYWRkZWQga2V5cyBhbmQgY2hhbmdlZCBrZXlzLiBTdGFydCBhdCB0aGUgYmFjaywgYmVjYXVzZVxuXHRcdC8vIG5vbi1udW1lcmljIGtleXMgYXJlIG9yZGVyZWQgYnkgdGltZSBvZiBkZWZpbml0aW9uIG9uIHRoZSBvYmplY3QuXG5cdFx0Y29uc3Qga2V5cyA9IG93bktleXMoZHJhZnRfKVxuXHRcdGZvciAobGV0IGkgPSBrZXlzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG5cdFx0XHRjb25zdCBrZXk6IGFueSA9IGtleXNbaV1cblx0XHRcdGlmIChrZXkgPT09IERSQUZUX1NUQVRFKSBjb250aW51ZVxuXHRcdFx0Y29uc3QgYmFzZVZhbHVlID0gYmFzZV9ba2V5XVxuXHRcdFx0Ly8gVGhlIGB1bmRlZmluZWRgIGNoZWNrIGlzIGEgZmFzdCBwYXRoIGZvciBwcmUtZXhpc3Rpbmcga2V5cy5cblx0XHRcdGlmIChiYXNlVmFsdWUgPT09IHVuZGVmaW5lZCAmJiAhaGFzKGJhc2VfLCBrZXkpKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlXG5cdFx0XHR9XG5cdFx0XHQvLyBPbmNlIGEgYmFzZSBrZXkgaXMgZGVsZXRlZCwgZnV0dXJlIGNoYW5nZXMgZ28gdW5kZXRlY3RlZCwgYmVjYXVzZSBpdHNcblx0XHRcdC8vIGRlc2NyaXB0b3IgaXMgZXJhc2VkLiBUaGlzIGJyYW5jaCBkZXRlY3RzIGFueSBtaXNzZWQgY2hhbmdlcy5cblx0XHRcdGVsc2Uge1xuXHRcdFx0XHRjb25zdCB2YWx1ZSA9IGRyYWZ0X1trZXldXG5cdFx0XHRcdGNvbnN0IHN0YXRlOiBJbW1lclN0YXRlID0gdmFsdWUgJiYgdmFsdWVbRFJBRlRfU1RBVEVdXG5cdFx0XHRcdGlmIChzdGF0ZSA/IHN0YXRlLmJhc2VfICE9PSBiYXNlVmFsdWUgOiAhaXModmFsdWUsIGJhc2VWYWx1ZSkpIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQXQgdGhpcyBwb2ludCwgbm8ga2V5cyB3ZXJlIGFkZGVkIG9yIGNoYW5nZWQuXG5cdFx0Ly8gQ29tcGFyZSBrZXkgY291bnQgdG8gZGV0ZXJtaW5lIGlmIGtleXMgd2VyZSBkZWxldGVkLlxuXHRcdGNvbnN0IGJhc2VJc0RyYWZ0ID0gISFiYXNlX1tEUkFGVF9TVEFURSBhcyBhbnldXG5cdFx0cmV0dXJuIGtleXMubGVuZ3RoICE9PSBvd25LZXlzKGJhc2VfKS5sZW5ndGggKyAoYmFzZUlzRHJhZnQgPyAwIDogMSkgLy8gKyAxIHRvIGNvcnJlY3QgZm9yIERSQUZUX1NUQVRFXG5cdH1cblxuXHRmdW5jdGlvbiBoYXNBcnJheUNoYW5nZXMoc3RhdGU6IEVTNUFycmF5U3RhdGUpIHtcblx0XHRjb25zdCB7ZHJhZnRffSA9IHN0YXRlXG5cdFx0aWYgKGRyYWZ0Xy5sZW5ndGggIT09IHN0YXRlLmJhc2VfLmxlbmd0aCkgcmV0dXJuIHRydWVcblx0XHQvLyBTZWUgIzExNlxuXHRcdC8vIElmIHdlIGZpcnN0IHNob3J0ZW4gdGhlIGxlbmd0aCwgb3VyIGFycmF5IGludGVyY2VwdG9ycyB3aWxsIGJlIHJlbW92ZWQuXG5cdFx0Ly8gSWYgYWZ0ZXIgdGhhdCBuZXcgaXRlbXMgYXJlIGFkZGVkLCByZXN1bHQgaW4gdGhlIHNhbWUgb3JpZ2luYWwgbGVuZ3RoLFxuXHRcdC8vIHRob3NlIGxhc3QgaXRlbXMgd2lsbCBoYXZlIG5vIGludGVyY2VwdGluZyBwcm9wZXJ0eS5cblx0XHQvLyBTbyBpZiB0aGVyZSBpcyBubyBvd24gZGVzY3JpcHRvciBvbiB0aGUgbGFzdCBwb3NpdGlvbiwgd2Uga25vdyB0aGF0IGl0ZW1zIHdlcmUgcmVtb3ZlZCBhbmQgYWRkZWRcblx0XHQvLyBOLkIuOiBzcGxpY2UsIHVuc2hpZnQsIGV0YyBvbmx5IHNoaWZ0IHZhbHVlcyBhcm91bmQsIGJ1dCBub3QgcHJvcCBkZXNjcmlwdG9ycywgc28gd2Ugb25seSBoYXZlIHRvIGNoZWNrXG5cdFx0Ly8gdGhlIGxhc3Qgb25lXG5cdFx0Ly8gbGFzdCBkZXNjcmlwdG9yIGNhbiBiZSBub3QgYSB0cmFwLCBpZiB0aGUgYXJyYXkgd2FzIGV4dGVuZGVkXG5cdFx0Y29uc3QgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoXG5cdFx0XHRkcmFmdF8sXG5cdFx0XHRkcmFmdF8ubGVuZ3RoIC0gMVxuXHRcdClcblx0XHQvLyBkZXNjcmlwdG9yIGNhbiBiZSBudWxsLCBidXQgb25seSBmb3IgbmV3bHkgY3JlYXRlZCBzcGFyc2UgYXJyYXlzLCBlZy4gbmV3IEFycmF5KDEwKVxuXHRcdGlmIChkZXNjcmlwdG9yICYmICFkZXNjcmlwdG9yLmdldCkgcmV0dXJuIHRydWVcblx0XHQvLyBpZiB3ZSBtaXNzIGEgcHJvcGVydHksIGl0IGhhcyBiZWVuIGRlbGV0ZWQsIHNvIGFycmF5IHByb2JvYmFseSBjaGFuZ2VkXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBkcmFmdF8ubGVuZ3RoOyBpKyspIHtcblx0XHRcdGlmICghZHJhZnRfLmhhc093blByb3BlcnR5KGkpKSByZXR1cm4gdHJ1ZVxuXHRcdH1cblx0XHQvLyBGb3IgYWxsIG90aGVyIGNhc2VzLCB3ZSBkb24ndCBoYXZlIHRvIGNvbXBhcmUsIGFzIHRoZXkgd291bGQgaGF2ZSBiZWVuIHBpY2tlZCB1cCBieSB0aGUgaW5kZXggc2V0dGVyc1xuXHRcdHJldHVybiBmYWxzZVxuXHR9XG5cblx0ZnVuY3Rpb24gaGFzQ2hhbmdlc18oc3RhdGU6IEVTNVN0YXRlKSB7XG5cdFx0cmV0dXJuIHN0YXRlLnR5cGVfID09PSBQcm94eVR5cGUuRVM1T2JqZWN0XG5cdFx0XHQ/IGhhc09iamVjdENoYW5nZXMoc3RhdGUpXG5cdFx0XHQ6IGhhc0FycmF5Q2hhbmdlcyhzdGF0ZSlcblx0fVxuXG5cdGZ1bmN0aW9uIGFzc2VydFVucmV2b2tlZChzdGF0ZTogYW55IC8qRVM1U3RhdGUgfCBNYXBTdGF0ZSB8IFNldFN0YXRlKi8pIHtcblx0XHRpZiAoc3RhdGUucmV2b2tlZF8pIGRpZSgzLCBKU09OLnN0cmluZ2lmeShsYXRlc3Qoc3RhdGUpKSlcblx0fVxuXG5cdGxvYWRQbHVnaW4oXCJFUzVcIiwge1xuXHRcdGNyZWF0ZUVTNVByb3h5Xyxcblx0XHR3aWxsRmluYWxpemVFUzVfLFxuXHRcdGhhc0NoYW5nZXNfXG5cdH0pXG59XG4iLCAiaW1wb3J0IHtpbW1lcmFibGV9IGZyb20gXCIuLi9pbW1lclwiXG5pbXBvcnQge1xuXHRJbW1lclN0YXRlLFxuXHRQYXRjaCxcblx0U2V0U3RhdGUsXG5cdEVTNUFycmF5U3RhdGUsXG5cdFByb3h5QXJyYXlTdGF0ZSxcblx0TWFwU3RhdGUsXG5cdEVTNU9iamVjdFN0YXRlLFxuXHRQcm94eU9iamVjdFN0YXRlLFxuXHRQYXRjaFBhdGgsXG5cdGdldCxcblx0ZWFjaCxcblx0aGFzLFxuXHRnZXRBcmNodHlwZSxcblx0aXNTZXQsXG5cdGlzTWFwLFxuXHRsb2FkUGx1Z2luLFxuXHRQcm94eVR5cGUsXG5cdEFyY2h0eXBlLFxuXHRkaWUsXG5cdGlzRHJhZnQsXG5cdGlzRHJhZnRhYmxlLFxuXHROT1RISU5HXG59IGZyb20gXCIuLi9pbnRlcm5hbFwiXG5cbmV4cG9ydCBmdW5jdGlvbiBlbmFibGVQYXRjaGVzKCkge1xuXHRjb25zdCBSRVBMQUNFID0gXCJyZXBsYWNlXCJcblx0Y29uc3QgQUREID0gXCJhZGRcIlxuXHRjb25zdCBSRU1PVkUgPSBcInJlbW92ZVwiXG5cblx0ZnVuY3Rpb24gZ2VuZXJhdGVQYXRjaGVzXyhcblx0XHRzdGF0ZTogSW1tZXJTdGF0ZSxcblx0XHRiYXNlUGF0aDogUGF0Y2hQYXRoLFxuXHRcdHBhdGNoZXM6IFBhdGNoW10sXG5cdFx0aW52ZXJzZVBhdGNoZXM6IFBhdGNoW11cblx0KTogdm9pZCB7XG5cdFx0c3dpdGNoIChzdGF0ZS50eXBlXykge1xuXHRcdFx0Y2FzZSBQcm94eVR5cGUuUHJveHlPYmplY3Q6XG5cdFx0XHRjYXNlIFByb3h5VHlwZS5FUzVPYmplY3Q6XG5cdFx0XHRjYXNlIFByb3h5VHlwZS5NYXA6XG5cdFx0XHRcdHJldHVybiBnZW5lcmF0ZVBhdGNoZXNGcm9tQXNzaWduZWQoXG5cdFx0XHRcdFx0c3RhdGUsXG5cdFx0XHRcdFx0YmFzZVBhdGgsXG5cdFx0XHRcdFx0cGF0Y2hlcyxcblx0XHRcdFx0XHRpbnZlcnNlUGF0Y2hlc1xuXHRcdFx0XHQpXG5cdFx0XHRjYXNlIFByb3h5VHlwZS5FUzVBcnJheTpcblx0XHRcdGNhc2UgUHJveHlUeXBlLlByb3h5QXJyYXk6XG5cdFx0XHRcdHJldHVybiBnZW5lcmF0ZUFycmF5UGF0Y2hlcyhzdGF0ZSwgYmFzZVBhdGgsIHBhdGNoZXMsIGludmVyc2VQYXRjaGVzKVxuXHRcdFx0Y2FzZSBQcm94eVR5cGUuU2V0OlxuXHRcdFx0XHRyZXR1cm4gZ2VuZXJhdGVTZXRQYXRjaGVzKFxuXHRcdFx0XHRcdChzdGF0ZSBhcyBhbnkpIGFzIFNldFN0YXRlLFxuXHRcdFx0XHRcdGJhc2VQYXRoLFxuXHRcdFx0XHRcdHBhdGNoZXMsXG5cdFx0XHRcdFx0aW52ZXJzZVBhdGNoZXNcblx0XHRcdFx0KVxuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIGdlbmVyYXRlQXJyYXlQYXRjaGVzKFxuXHRcdHN0YXRlOiBFUzVBcnJheVN0YXRlIHwgUHJveHlBcnJheVN0YXRlLFxuXHRcdGJhc2VQYXRoOiBQYXRjaFBhdGgsXG5cdFx0cGF0Y2hlczogUGF0Y2hbXSxcblx0XHRpbnZlcnNlUGF0Y2hlczogUGF0Y2hbXVxuXHQpIHtcblx0XHRsZXQge2Jhc2VfLCBhc3NpZ25lZF99ID0gc3RhdGVcblx0XHRsZXQgY29weV8gPSBzdGF0ZS5jb3B5XyFcblxuXHRcdC8vIFJlZHVjZSBjb21wbGV4aXR5IGJ5IGVuc3VyaW5nIGBiYXNlYCBpcyBuZXZlciBsb25nZXIuXG5cdFx0aWYgKGNvcHlfLmxlbmd0aCA8IGJhc2VfLmxlbmd0aCkge1xuXHRcdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdFx0O1tiYXNlXywgY29weV9dID0gW2NvcHlfLCBiYXNlX11cblx0XHRcdDtbcGF0Y2hlcywgaW52ZXJzZVBhdGNoZXNdID0gW2ludmVyc2VQYXRjaGVzLCBwYXRjaGVzXVxuXHRcdH1cblxuXHRcdC8vIFByb2Nlc3MgcmVwbGFjZWQgaW5kaWNlcy5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGJhc2VfLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZiAoYXNzaWduZWRfW2ldICYmIGNvcHlfW2ldICE9PSBiYXNlX1tpXSkge1xuXHRcdFx0XHRjb25zdCBwYXRoID0gYmFzZVBhdGguY29uY2F0KFtpXSlcblx0XHRcdFx0cGF0Y2hlcy5wdXNoKHtcblx0XHRcdFx0XHRvcDogUkVQTEFDRSxcblx0XHRcdFx0XHRwYXRoLFxuXHRcdFx0XHRcdC8vIE5lZWQgdG8gbWF5YmUgY2xvbmUgaXQsIGFzIGl0IGNhbiBpbiBmYWN0IGJlIHRoZSBvcmlnaW5hbCB2YWx1ZVxuXHRcdFx0XHRcdC8vIGR1ZSB0byB0aGUgYmFzZS9jb3B5IGludmVyc2lvbiBhdCB0aGUgc3RhcnQgb2YgdGhpcyBmdW5jdGlvblxuXHRcdFx0XHRcdHZhbHVlOiBjbG9uZVBhdGNoVmFsdWVJZk5lZWRlZChjb3B5X1tpXSlcblx0XHRcdFx0fSlcblx0XHRcdFx0aW52ZXJzZVBhdGNoZXMucHVzaCh7XG5cdFx0XHRcdFx0b3A6IFJFUExBQ0UsXG5cdFx0XHRcdFx0cGF0aCxcblx0XHRcdFx0XHR2YWx1ZTogY2xvbmVQYXRjaFZhbHVlSWZOZWVkZWQoYmFzZV9baV0pXG5cdFx0XHRcdH0pXG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gUHJvY2VzcyBhZGRlZCBpbmRpY2VzLlxuXHRcdGZvciAobGV0IGkgPSBiYXNlXy5sZW5ndGg7IGkgPCBjb3B5Xy5sZW5ndGg7IGkrKykge1xuXHRcdFx0Y29uc3QgcGF0aCA9IGJhc2VQYXRoLmNvbmNhdChbaV0pXG5cdFx0XHRwYXRjaGVzLnB1c2goe1xuXHRcdFx0XHRvcDogQURELFxuXHRcdFx0XHRwYXRoLFxuXHRcdFx0XHQvLyBOZWVkIHRvIG1heWJlIGNsb25lIGl0LCBhcyBpdCBjYW4gaW4gZmFjdCBiZSB0aGUgb3JpZ2luYWwgdmFsdWVcblx0XHRcdFx0Ly8gZHVlIHRvIHRoZSBiYXNlL2NvcHkgaW52ZXJzaW9uIGF0IHRoZSBzdGFydCBvZiB0aGlzIGZ1bmN0aW9uXG5cdFx0XHRcdHZhbHVlOiBjbG9uZVBhdGNoVmFsdWVJZk5lZWRlZChjb3B5X1tpXSlcblx0XHRcdH0pXG5cdFx0fVxuXHRcdGlmIChiYXNlXy5sZW5ndGggPCBjb3B5Xy5sZW5ndGgpIHtcblx0XHRcdGludmVyc2VQYXRjaGVzLnB1c2goe1xuXHRcdFx0XHRvcDogUkVQTEFDRSxcblx0XHRcdFx0cGF0aDogYmFzZVBhdGguY29uY2F0KFtcImxlbmd0aFwiXSksXG5cdFx0XHRcdHZhbHVlOiBiYXNlXy5sZW5ndGhcblx0XHRcdH0pXG5cdFx0fVxuXHR9XG5cblx0Ly8gVGhpcyBpcyB1c2VkIGZvciBib3RoIE1hcCBvYmplY3RzIGFuZCBub3JtYWwgb2JqZWN0cy5cblx0ZnVuY3Rpb24gZ2VuZXJhdGVQYXRjaGVzRnJvbUFzc2lnbmVkKFxuXHRcdHN0YXRlOiBNYXBTdGF0ZSB8IEVTNU9iamVjdFN0YXRlIHwgUHJveHlPYmplY3RTdGF0ZSxcblx0XHRiYXNlUGF0aDogUGF0Y2hQYXRoLFxuXHRcdHBhdGNoZXM6IFBhdGNoW10sXG5cdFx0aW52ZXJzZVBhdGNoZXM6IFBhdGNoW11cblx0KSB7XG5cdFx0Y29uc3Qge2Jhc2VfLCBjb3B5X30gPSBzdGF0ZVxuXHRcdGVhY2goc3RhdGUuYXNzaWduZWRfISwgKGtleSwgYXNzaWduZWRWYWx1ZSkgPT4ge1xuXHRcdFx0Y29uc3Qgb3JpZ1ZhbHVlID0gZ2V0KGJhc2VfLCBrZXkpXG5cdFx0XHRjb25zdCB2YWx1ZSA9IGdldChjb3B5XyEsIGtleSlcblx0XHRcdGNvbnN0IG9wID0gIWFzc2lnbmVkVmFsdWUgPyBSRU1PVkUgOiBoYXMoYmFzZV8sIGtleSkgPyBSRVBMQUNFIDogQUREXG5cdFx0XHRpZiAob3JpZ1ZhbHVlID09PSB2YWx1ZSAmJiBvcCA9PT0gUkVQTEFDRSkgcmV0dXJuXG5cdFx0XHRjb25zdCBwYXRoID0gYmFzZVBhdGguY29uY2F0KGtleSBhcyBhbnkpXG5cdFx0XHRwYXRjaGVzLnB1c2gob3AgPT09IFJFTU9WRSA/IHtvcCwgcGF0aH0gOiB7b3AsIHBhdGgsIHZhbHVlfSlcblx0XHRcdGludmVyc2VQYXRjaGVzLnB1c2goXG5cdFx0XHRcdG9wID09PSBBRERcblx0XHRcdFx0XHQ/IHtvcDogUkVNT1ZFLCBwYXRofVxuXHRcdFx0XHRcdDogb3AgPT09IFJFTU9WRVxuXHRcdFx0XHRcdD8ge29wOiBBREQsIHBhdGgsIHZhbHVlOiBjbG9uZVBhdGNoVmFsdWVJZk5lZWRlZChvcmlnVmFsdWUpfVxuXHRcdFx0XHRcdDoge29wOiBSRVBMQUNFLCBwYXRoLCB2YWx1ZTogY2xvbmVQYXRjaFZhbHVlSWZOZWVkZWQob3JpZ1ZhbHVlKX1cblx0XHRcdClcblx0XHR9KVxuXHR9XG5cblx0ZnVuY3Rpb24gZ2VuZXJhdGVTZXRQYXRjaGVzKFxuXHRcdHN0YXRlOiBTZXRTdGF0ZSxcblx0XHRiYXNlUGF0aDogUGF0Y2hQYXRoLFxuXHRcdHBhdGNoZXM6IFBhdGNoW10sXG5cdFx0aW52ZXJzZVBhdGNoZXM6IFBhdGNoW11cblx0KSB7XG5cdFx0bGV0IHtiYXNlXywgY29weV99ID0gc3RhdGVcblxuXHRcdGxldCBpID0gMFxuXHRcdGJhc2VfLmZvckVhY2goKHZhbHVlOiBhbnkpID0+IHtcblx0XHRcdGlmICghY29weV8hLmhhcyh2YWx1ZSkpIHtcblx0XHRcdFx0Y29uc3QgcGF0aCA9IGJhc2VQYXRoLmNvbmNhdChbaV0pXG5cdFx0XHRcdHBhdGNoZXMucHVzaCh7XG5cdFx0XHRcdFx0b3A6IFJFTU9WRSxcblx0XHRcdFx0XHRwYXRoLFxuXHRcdFx0XHRcdHZhbHVlXG5cdFx0XHRcdH0pXG5cdFx0XHRcdGludmVyc2VQYXRjaGVzLnVuc2hpZnQoe1xuXHRcdFx0XHRcdG9wOiBBREQsXG5cdFx0XHRcdFx0cGF0aCxcblx0XHRcdFx0XHR2YWx1ZVxuXHRcdFx0XHR9KVxuXHRcdFx0fVxuXHRcdFx0aSsrXG5cdFx0fSlcblx0XHRpID0gMFxuXHRcdGNvcHlfIS5mb3JFYWNoKCh2YWx1ZTogYW55KSA9PiB7XG5cdFx0XHRpZiAoIWJhc2VfLmhhcyh2YWx1ZSkpIHtcblx0XHRcdFx0Y29uc3QgcGF0aCA9IGJhc2VQYXRoLmNvbmNhdChbaV0pXG5cdFx0XHRcdHBhdGNoZXMucHVzaCh7XG5cdFx0XHRcdFx0b3A6IEFERCxcblx0XHRcdFx0XHRwYXRoLFxuXHRcdFx0XHRcdHZhbHVlXG5cdFx0XHRcdH0pXG5cdFx0XHRcdGludmVyc2VQYXRjaGVzLnVuc2hpZnQoe1xuXHRcdFx0XHRcdG9wOiBSRU1PVkUsXG5cdFx0XHRcdFx0cGF0aCxcblx0XHRcdFx0XHR2YWx1ZVxuXHRcdFx0XHR9KVxuXHRcdFx0fVxuXHRcdFx0aSsrXG5cdFx0fSlcblx0fVxuXG5cdGZ1bmN0aW9uIGdlbmVyYXRlUmVwbGFjZW1lbnRQYXRjaGVzXyhcblx0XHRiYXNlVmFsdWU6IGFueSxcblx0XHRyZXBsYWNlbWVudDogYW55LFxuXHRcdHBhdGNoZXM6IFBhdGNoW10sXG5cdFx0aW52ZXJzZVBhdGNoZXM6IFBhdGNoW11cblx0KTogdm9pZCB7XG5cdFx0cGF0Y2hlcy5wdXNoKHtcblx0XHRcdG9wOiBSRVBMQUNFLFxuXHRcdFx0cGF0aDogW10sXG5cdFx0XHR2YWx1ZTogcmVwbGFjZW1lbnQgPT09IE5PVEhJTkcgPyB1bmRlZmluZWQgOiByZXBsYWNlbWVudFxuXHRcdH0pXG5cdFx0aW52ZXJzZVBhdGNoZXMucHVzaCh7XG5cdFx0XHRvcDogUkVQTEFDRSxcblx0XHRcdHBhdGg6IFtdLFxuXHRcdFx0dmFsdWU6IGJhc2VWYWx1ZVxuXHRcdH0pXG5cdH1cblxuXHRmdW5jdGlvbiBhcHBseVBhdGNoZXNfPFQ+KGRyYWZ0OiBULCBwYXRjaGVzOiBQYXRjaFtdKTogVCB7XG5cdFx0cGF0Y2hlcy5mb3JFYWNoKHBhdGNoID0+IHtcblx0XHRcdGNvbnN0IHtwYXRoLCBvcH0gPSBwYXRjaFxuXG5cdFx0XHRsZXQgYmFzZTogYW55ID0gZHJhZnRcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGggLSAxOyBpKyspIHtcblx0XHRcdFx0Y29uc3QgcGFyZW50VHlwZSA9IGdldEFyY2h0eXBlKGJhc2UpXG5cdFx0XHRcdGxldCBwID0gcGF0aFtpXVxuXHRcdFx0XHRpZiAodHlwZW9mIHAgIT09IFwic3RyaW5nXCIgJiYgdHlwZW9mIHAgIT09IFwibnVtYmVyXCIpIHtcblx0XHRcdFx0XHRwID0gXCJcIiArIHBcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFNlZSAjNzM4LCBhdm9pZCBwcm90b3R5cGUgcG9sbHV0aW9uXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHQocGFyZW50VHlwZSA9PT0gQXJjaHR5cGUuT2JqZWN0IHx8IHBhcmVudFR5cGUgPT09IEFyY2h0eXBlLkFycmF5KSAmJlxuXHRcdFx0XHRcdChwID09PSBcIl9fcHJvdG9fX1wiIHx8IHAgPT09IFwiY29uc3RydWN0b3JcIilcblx0XHRcdFx0KVxuXHRcdFx0XHRcdGRpZSgyNClcblx0XHRcdFx0aWYgKHR5cGVvZiBiYXNlID09PSBcImZ1bmN0aW9uXCIgJiYgcCA9PT0gXCJwcm90b3R5cGVcIikgZGllKDI0KVxuXHRcdFx0XHRiYXNlID0gZ2V0KGJhc2UsIHApXG5cdFx0XHRcdGlmICh0eXBlb2YgYmFzZSAhPT0gXCJvYmplY3RcIikgZGllKDE1LCBwYXRoLmpvaW4oXCIvXCIpKVxuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCB0eXBlID0gZ2V0QXJjaHR5cGUoYmFzZSlcblx0XHRcdGNvbnN0IHZhbHVlID0gZGVlcENsb25lUGF0Y2hWYWx1ZShwYXRjaC52YWx1ZSkgLy8gdXNlZCB0byBjbG9uZSBwYXRjaCB0byBlbnN1cmUgb3JpZ2luYWwgcGF0Y2ggaXMgbm90IG1vZGlmaWVkLCBzZWUgIzQxMVxuXHRcdFx0Y29uc3Qga2V5ID0gcGF0aFtwYXRoLmxlbmd0aCAtIDFdXG5cdFx0XHRzd2l0Y2ggKG9wKSB7XG5cdFx0XHRcdGNhc2UgUkVQTEFDRTpcblx0XHRcdFx0XHRzd2l0Y2ggKHR5cGUpIHtcblx0XHRcdFx0XHRcdGNhc2UgQXJjaHR5cGUuTWFwOlxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gYmFzZS5zZXQoa2V5LCB2YWx1ZSlcblx0XHRcdFx0XHRcdC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cdFx0XHRcdFx0XHRjYXNlIEFyY2h0eXBlLlNldDpcblx0XHRcdFx0XHRcdFx0ZGllKDE2KVxuXHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0Ly8gaWYgdmFsdWUgaXMgYW4gb2JqZWN0LCB0aGVuIGl0J3MgYXNzaWduZWQgYnkgcmVmZXJlbmNlXG5cdFx0XHRcdFx0XHRcdC8vIGluIHRoZSBmb2xsb3dpbmcgYWRkIG9yIHJlbW92ZSBvcHMsIHRoZSB2YWx1ZSBmaWVsZCBpbnNpZGUgdGhlIHBhdGNoIHdpbGwgYWxzbyBiZSBtb2RpZnllZFxuXHRcdFx0XHRcdFx0XHQvLyBzbyB3ZSB1c2UgdmFsdWUgZnJvbSB0aGUgY2xvbmVkIHBhdGNoXG5cdFx0XHRcdFx0XHRcdC8vIEB0cy1pZ25vcmVcblx0XHRcdFx0XHRcdFx0cmV0dXJuIChiYXNlW2tleV0gPSB2YWx1ZSlcblx0XHRcdFx0XHR9XG5cdFx0XHRcdGNhc2UgQUREOlxuXHRcdFx0XHRcdHN3aXRjaCAodHlwZSkge1xuXHRcdFx0XHRcdFx0Y2FzZSBBcmNodHlwZS5BcnJheTpcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGtleSA9PT0gXCItXCJcblx0XHRcdFx0XHRcdFx0XHQ/IGJhc2UucHVzaCh2YWx1ZSlcblx0XHRcdFx0XHRcdFx0XHQ6IGJhc2Uuc3BsaWNlKGtleSBhcyBhbnksIDAsIHZhbHVlKVxuXHRcdFx0XHRcdFx0Y2FzZSBBcmNodHlwZS5NYXA6XG5cdFx0XHRcdFx0XHRcdHJldHVybiBiYXNlLnNldChrZXksIHZhbHVlKVxuXHRcdFx0XHRcdFx0Y2FzZSBBcmNodHlwZS5TZXQ6XG5cdFx0XHRcdFx0XHRcdHJldHVybiBiYXNlLmFkZCh2YWx1ZSlcblx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdHJldHVybiAoYmFzZVtrZXldID0gdmFsdWUpXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRjYXNlIFJFTU9WRTpcblx0XHRcdFx0XHRzd2l0Y2ggKHR5cGUpIHtcblx0XHRcdFx0XHRcdGNhc2UgQXJjaHR5cGUuQXJyYXk6XG5cdFx0XHRcdFx0XHRcdHJldHVybiBiYXNlLnNwbGljZShrZXkgYXMgYW55LCAxKVxuXHRcdFx0XHRcdFx0Y2FzZSBBcmNodHlwZS5NYXA6XG5cdFx0XHRcdFx0XHRcdHJldHVybiBiYXNlLmRlbGV0ZShrZXkpXG5cdFx0XHRcdFx0XHRjYXNlIEFyY2h0eXBlLlNldDpcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGJhc2UuZGVsZXRlKHBhdGNoLnZhbHVlKVxuXHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGRlbGV0ZSBiYXNlW2tleV1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0ZGllKDE3LCBvcClcblx0XHRcdH1cblx0XHR9KVxuXG5cdFx0cmV0dXJuIGRyYWZ0XG5cdH1cblxuXHQvLyBvcHRpbWl6ZTogdGhpcyBpcyBxdWl0ZSBhIHBlcmZvcm1hbmNlIGhpdCwgY2FuIHdlIGRldGVjdCBpbnRlbGxpZ2VudGx5IHdoZW4gaXQgaXMgbmVlZGVkP1xuXHQvLyBFLmcuIGF1dG8tZHJhZnQgd2hlbiBuZXcgb2JqZWN0cyBmcm9tIG91dHNpZGUgYXJlIGFzc2lnbmVkIGFuZCBtb2RpZmllZD9cblx0Ly8gKFNlZSBmYWlsaW5nIHRlc3Qgd2hlbiBkZWVwQ2xvbmUganVzdCByZXR1cm5zIG9iailcblx0ZnVuY3Rpb24gZGVlcENsb25lUGF0Y2hWYWx1ZTxUPihvYmo6IFQpOiBUXG5cdGZ1bmN0aW9uIGRlZXBDbG9uZVBhdGNoVmFsdWUob2JqOiBhbnkpIHtcblx0XHRpZiAoIWlzRHJhZnRhYmxlKG9iaikpIHJldHVybiBvYmpcblx0XHRpZiAoQXJyYXkuaXNBcnJheShvYmopKSByZXR1cm4gb2JqLm1hcChkZWVwQ2xvbmVQYXRjaFZhbHVlKVxuXHRcdGlmIChpc01hcChvYmopKVxuXHRcdFx0cmV0dXJuIG5ldyBNYXAoXG5cdFx0XHRcdEFycmF5LmZyb20ob2JqLmVudHJpZXMoKSkubWFwKChbaywgdl0pID0+IFtrLCBkZWVwQ2xvbmVQYXRjaFZhbHVlKHYpXSlcblx0XHRcdClcblx0XHRpZiAoaXNTZXQob2JqKSkgcmV0dXJuIG5ldyBTZXQoQXJyYXkuZnJvbShvYmopLm1hcChkZWVwQ2xvbmVQYXRjaFZhbHVlKSlcblx0XHRjb25zdCBjbG9uZWQgPSBPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmopKVxuXHRcdGZvciAoY29uc3Qga2V5IGluIG9iaikgY2xvbmVkW2tleV0gPSBkZWVwQ2xvbmVQYXRjaFZhbHVlKG9ialtrZXldKVxuXHRcdGlmIChoYXMob2JqLCBpbW1lcmFibGUpKSBjbG9uZWRbaW1tZXJhYmxlXSA9IG9ialtpbW1lcmFibGVdXG5cdFx0cmV0dXJuIGNsb25lZFxuXHR9XG5cblx0ZnVuY3Rpb24gY2xvbmVQYXRjaFZhbHVlSWZOZWVkZWQ8VD4ob2JqOiBUKTogVCB7XG5cdFx0aWYgKGlzRHJhZnQob2JqKSkge1xuXHRcdFx0cmV0dXJuIGRlZXBDbG9uZVBhdGNoVmFsdWUob2JqKVxuXHRcdH0gZWxzZSByZXR1cm4gb2JqXG5cdH1cblxuXHRsb2FkUGx1Z2luKFwiUGF0Y2hlc1wiLCB7XG5cdFx0YXBwbHlQYXRjaGVzXyxcblx0XHRnZW5lcmF0ZVBhdGNoZXNfLFxuXHRcdGdlbmVyYXRlUmVwbGFjZW1lbnRQYXRjaGVzX1xuXHR9KVxufVxuIiwgIi8vIHR5cGVzIG9ubHkhXG5pbXBvcnQge1xuXHRJbW1lclN0YXRlLFxuXHRBbnlNYXAsXG5cdEFueVNldCxcblx0TWFwU3RhdGUsXG5cdFNldFN0YXRlLFxuXHREUkFGVF9TVEFURSxcblx0Z2V0Q3VycmVudFNjb3BlLFxuXHRsYXRlc3QsXG5cdGl0ZXJhdG9yU3ltYm9sLFxuXHRpc0RyYWZ0YWJsZSxcblx0Y3JlYXRlUHJveHksXG5cdGxvYWRQbHVnaW4sXG5cdG1hcmtDaGFuZ2VkLFxuXHRQcm94eVR5cGUsXG5cdGRpZSxcblx0ZWFjaFxufSBmcm9tIFwiLi4vaW50ZXJuYWxcIlxuXG5leHBvcnQgZnVuY3Rpb24gZW5hYmxlTWFwU2V0KCkge1xuXHQvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXHR2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQ6IGFueSwgYjogYW55KTogYW55IHtcblx0XHRleHRlbmRTdGF0aWNzID1cblx0XHRcdE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuXHRcdFx0KHtfX3Byb3RvX186IFtdfSBpbnN0YW5jZW9mIEFycmF5ICYmXG5cdFx0XHRcdGZ1bmN0aW9uKGQsIGIpIHtcblx0XHRcdFx0XHRkLl9fcHJvdG9fXyA9IGJcblx0XHRcdFx0fSkgfHxcblx0XHRcdGZ1bmN0aW9uKGQsIGIpIHtcblx0XHRcdFx0Zm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF1cblx0XHRcdH1cblx0XHRyZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKVxuXHR9XG5cblx0Ly8gVWdseSBoYWNrIHRvIHJlc29sdmUgIzUwMiBhbmQgaW5oZXJpdCBidWlsdCBpbiBNYXAgLyBTZXRcblx0ZnVuY3Rpb24gX19leHRlbmRzKGQ6IGFueSwgYjogYW55KTogYW55IHtcblx0XHRleHRlbmRTdGF0aWNzKGQsIGIpXG5cdFx0ZnVuY3Rpb24gX18odGhpczogYW55KTogYW55IHtcblx0XHRcdHRoaXMuY29uc3RydWN0b3IgPSBkXG5cdFx0fVxuXHRcdGQucHJvdG90eXBlID1cblx0XHRcdC8vIEB0cy1pZ25vcmVcblx0XHRcdCgoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUpLCBuZXcgX18oKSlcblx0fVxuXG5cdGNvbnN0IERyYWZ0TWFwID0gKGZ1bmN0aW9uKF9zdXBlcikge1xuXHRcdF9fZXh0ZW5kcyhEcmFmdE1hcCwgX3N1cGVyKVxuXHRcdC8vIENyZWF0ZSBjbGFzcyBtYW51YWxseSwgY2F1c2UgIzUwMlxuXHRcdGZ1bmN0aW9uIERyYWZ0TWFwKHRoaXM6IGFueSwgdGFyZ2V0OiBBbnlNYXAsIHBhcmVudD86IEltbWVyU3RhdGUpOiBhbnkge1xuXHRcdFx0dGhpc1tEUkFGVF9TVEFURV0gPSB7XG5cdFx0XHRcdHR5cGVfOiBQcm94eVR5cGUuTWFwLFxuXHRcdFx0XHRwYXJlbnRfOiBwYXJlbnQsXG5cdFx0XHRcdHNjb3BlXzogcGFyZW50ID8gcGFyZW50LnNjb3BlXyA6IGdldEN1cnJlbnRTY29wZSgpISxcblx0XHRcdFx0bW9kaWZpZWRfOiBmYWxzZSxcblx0XHRcdFx0ZmluYWxpemVkXzogZmFsc2UsXG5cdFx0XHRcdGNvcHlfOiB1bmRlZmluZWQsXG5cdFx0XHRcdGFzc2lnbmVkXzogdW5kZWZpbmVkLFxuXHRcdFx0XHRiYXNlXzogdGFyZ2V0LFxuXHRcdFx0XHRkcmFmdF86IHRoaXMgYXMgYW55LFxuXHRcdFx0XHRpc01hbnVhbF86IGZhbHNlLFxuXHRcdFx0XHRyZXZva2VkXzogZmFsc2Vcblx0XHRcdH0gYXMgTWFwU3RhdGVcblx0XHRcdHJldHVybiB0aGlzXG5cdFx0fVxuXHRcdGNvbnN0IHAgPSBEcmFmdE1hcC5wcm90b3R5cGVcblxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLCBcInNpemVcIiwge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuIGxhdGVzdCh0aGlzW0RSQUZUX1NUQVRFXSkuc2l6ZVxuXHRcdFx0fVxuXHRcdFx0Ly8gZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHQvLyBjb25maWd1cmFibGU6IHRydWVcblx0XHR9KVxuXG5cdFx0cC5oYXMgPSBmdW5jdGlvbihrZXk6IGFueSk6IGJvb2xlYW4ge1xuXHRcdFx0cmV0dXJuIGxhdGVzdCh0aGlzW0RSQUZUX1NUQVRFXSkuaGFzKGtleSlcblx0XHR9XG5cblx0XHRwLnNldCA9IGZ1bmN0aW9uKGtleTogYW55LCB2YWx1ZTogYW55KSB7XG5cdFx0XHRjb25zdCBzdGF0ZTogTWFwU3RhdGUgPSB0aGlzW0RSQUZUX1NUQVRFXVxuXHRcdFx0YXNzZXJ0VW5yZXZva2VkKHN0YXRlKVxuXHRcdFx0aWYgKCFsYXRlc3Qoc3RhdGUpLmhhcyhrZXkpIHx8IGxhdGVzdChzdGF0ZSkuZ2V0KGtleSkgIT09IHZhbHVlKSB7XG5cdFx0XHRcdHByZXBhcmVNYXBDb3B5KHN0YXRlKVxuXHRcdFx0XHRtYXJrQ2hhbmdlZChzdGF0ZSlcblx0XHRcdFx0c3RhdGUuYXNzaWduZWRfIS5zZXQoa2V5LCB0cnVlKVxuXHRcdFx0XHRzdGF0ZS5jb3B5XyEuc2V0KGtleSwgdmFsdWUpXG5cdFx0XHRcdHN0YXRlLmFzc2lnbmVkXyEuc2V0KGtleSwgdHJ1ZSlcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzXG5cdFx0fVxuXG5cdFx0cC5kZWxldGUgPSBmdW5jdGlvbihrZXk6IGFueSk6IGJvb2xlYW4ge1xuXHRcdFx0aWYgKCF0aGlzLmhhcyhrZXkpKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZVxuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBzdGF0ZTogTWFwU3RhdGUgPSB0aGlzW0RSQUZUX1NUQVRFXVxuXHRcdFx0YXNzZXJ0VW5yZXZva2VkKHN0YXRlKVxuXHRcdFx0cHJlcGFyZU1hcENvcHkoc3RhdGUpXG5cdFx0XHRtYXJrQ2hhbmdlZChzdGF0ZSlcblx0XHRcdGlmIChzdGF0ZS5iYXNlXy5oYXMoa2V5KSkge1xuXHRcdFx0XHRzdGF0ZS5hc3NpZ25lZF8hLnNldChrZXksIGZhbHNlKVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c3RhdGUuYXNzaWduZWRfIS5kZWxldGUoa2V5KVxuXHRcdFx0fVxuXHRcdFx0c3RhdGUuY29weV8hLmRlbGV0ZShrZXkpXG5cdFx0XHRyZXR1cm4gdHJ1ZVxuXHRcdH1cblxuXHRcdHAuY2xlYXIgPSBmdW5jdGlvbigpIHtcblx0XHRcdGNvbnN0IHN0YXRlOiBNYXBTdGF0ZSA9IHRoaXNbRFJBRlRfU1RBVEVdXG5cdFx0XHRhc3NlcnRVbnJldm9rZWQoc3RhdGUpXG5cdFx0XHRpZiAobGF0ZXN0KHN0YXRlKS5zaXplKSB7XG5cdFx0XHRcdHByZXBhcmVNYXBDb3B5KHN0YXRlKVxuXHRcdFx0XHRtYXJrQ2hhbmdlZChzdGF0ZSlcblx0XHRcdFx0c3RhdGUuYXNzaWduZWRfID0gbmV3IE1hcCgpXG5cdFx0XHRcdGVhY2goc3RhdGUuYmFzZV8sIGtleSA9PiB7XG5cdFx0XHRcdFx0c3RhdGUuYXNzaWduZWRfIS5zZXQoa2V5LCBmYWxzZSlcblx0XHRcdFx0fSlcblx0XHRcdFx0c3RhdGUuY29weV8hLmNsZWFyKClcblx0XHRcdH1cblx0XHR9XG5cblx0XHRwLmZvckVhY2ggPSBmdW5jdGlvbihcblx0XHRcdGNiOiAodmFsdWU6IGFueSwga2V5OiBhbnksIHNlbGY6IGFueSkgPT4gdm9pZCxcblx0XHRcdHRoaXNBcmc/OiBhbnlcblx0XHQpIHtcblx0XHRcdGNvbnN0IHN0YXRlOiBNYXBTdGF0ZSA9IHRoaXNbRFJBRlRfU1RBVEVdXG5cdFx0XHRsYXRlc3Qoc3RhdGUpLmZvckVhY2goKF92YWx1ZTogYW55LCBrZXk6IGFueSwgX21hcDogYW55KSA9PiB7XG5cdFx0XHRcdGNiLmNhbGwodGhpc0FyZywgdGhpcy5nZXQoa2V5KSwga2V5LCB0aGlzKVxuXHRcdFx0fSlcblx0XHR9XG5cblx0XHRwLmdldCA9IGZ1bmN0aW9uKGtleTogYW55KTogYW55IHtcblx0XHRcdGNvbnN0IHN0YXRlOiBNYXBTdGF0ZSA9IHRoaXNbRFJBRlRfU1RBVEVdXG5cdFx0XHRhc3NlcnRVbnJldm9rZWQoc3RhdGUpXG5cdFx0XHRjb25zdCB2YWx1ZSA9IGxhdGVzdChzdGF0ZSkuZ2V0KGtleSlcblx0XHRcdGlmIChzdGF0ZS5maW5hbGl6ZWRfIHx8ICFpc0RyYWZ0YWJsZSh2YWx1ZSkpIHtcblx0XHRcdFx0cmV0dXJuIHZhbHVlXG5cdFx0XHR9XG5cdFx0XHRpZiAodmFsdWUgIT09IHN0YXRlLmJhc2VfLmdldChrZXkpKSB7XG5cdFx0XHRcdHJldHVybiB2YWx1ZSAvLyBlaXRoZXIgYWxyZWFkeSBkcmFmdGVkIG9yIHJlYXNzaWduZWRcblx0XHRcdH1cblx0XHRcdC8vIGRlc3BpdGUgd2hhdCBpdCBsb29rcywgdGhpcyBjcmVhdGVzIGEgZHJhZnQgb25seSBvbmNlLCBzZWUgYWJvdmUgY29uZGl0aW9uXG5cdFx0XHRjb25zdCBkcmFmdCA9IGNyZWF0ZVByb3h5KHN0YXRlLnNjb3BlXy5pbW1lcl8sIHZhbHVlLCBzdGF0ZSlcblx0XHRcdHByZXBhcmVNYXBDb3B5KHN0YXRlKVxuXHRcdFx0c3RhdGUuY29weV8hLnNldChrZXksIGRyYWZ0KVxuXHRcdFx0cmV0dXJuIGRyYWZ0XG5cdFx0fVxuXG5cdFx0cC5rZXlzID0gZnVuY3Rpb24oKTogSXRlcmFibGVJdGVyYXRvcjxhbnk+IHtcblx0XHRcdHJldHVybiBsYXRlc3QodGhpc1tEUkFGVF9TVEFURV0pLmtleXMoKVxuXHRcdH1cblxuXHRcdHAudmFsdWVzID0gZnVuY3Rpb24oKTogSXRlcmFibGVJdGVyYXRvcjxhbnk+IHtcblx0XHRcdGNvbnN0IGl0ZXJhdG9yID0gdGhpcy5rZXlzKClcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFtpdGVyYXRvclN5bWJvbF06ICgpID0+IHRoaXMudmFsdWVzKCksXG5cdFx0XHRcdG5leHQ6ICgpID0+IHtcblx0XHRcdFx0XHRjb25zdCByID0gaXRlcmF0b3IubmV4dCgpXG5cdFx0XHRcdFx0LyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblx0XHRcdFx0XHRpZiAoci5kb25lKSByZXR1cm4gclxuXHRcdFx0XHRcdGNvbnN0IHZhbHVlID0gdGhpcy5nZXQoci52YWx1ZSlcblx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0ZG9uZTogZmFsc2UsXG5cdFx0XHRcdFx0XHR2YWx1ZVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBhcyBhbnlcblx0XHR9XG5cblx0XHRwLmVudHJpZXMgPSBmdW5jdGlvbigpOiBJdGVyYWJsZUl0ZXJhdG9yPFthbnksIGFueV0+IHtcblx0XHRcdGNvbnN0IGl0ZXJhdG9yID0gdGhpcy5rZXlzKClcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFtpdGVyYXRvclN5bWJvbF06ICgpID0+IHRoaXMuZW50cmllcygpLFxuXHRcdFx0XHRuZXh0OiAoKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgciA9IGl0ZXJhdG9yLm5leHQoKVxuXHRcdFx0XHRcdC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cdFx0XHRcdFx0aWYgKHIuZG9uZSkgcmV0dXJuIHJcblx0XHRcdFx0XHRjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0KHIudmFsdWUpXG5cdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdGRvbmU6IGZhbHNlLFxuXHRcdFx0XHRcdFx0dmFsdWU6IFtyLnZhbHVlLCB2YWx1ZV1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gYXMgYW55XG5cdFx0fVxuXG5cdFx0cFtpdGVyYXRvclN5bWJvbF0gPSBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiB0aGlzLmVudHJpZXMoKVxuXHRcdH1cblxuXHRcdHJldHVybiBEcmFmdE1hcFxuXHR9KShNYXApXG5cblx0ZnVuY3Rpb24gcHJveHlNYXBfPFQgZXh0ZW5kcyBBbnlNYXA+KHRhcmdldDogVCwgcGFyZW50PzogSW1tZXJTdGF0ZSk6IFQge1xuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRyZXR1cm4gbmV3IERyYWZ0TWFwKHRhcmdldCwgcGFyZW50KVxuXHR9XG5cblx0ZnVuY3Rpb24gcHJlcGFyZU1hcENvcHkoc3RhdGU6IE1hcFN0YXRlKSB7XG5cdFx0aWYgKCFzdGF0ZS5jb3B5Xykge1xuXHRcdFx0c3RhdGUuYXNzaWduZWRfID0gbmV3IE1hcCgpXG5cdFx0XHRzdGF0ZS5jb3B5XyA9IG5ldyBNYXAoc3RhdGUuYmFzZV8pXG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgRHJhZnRTZXQgPSAoZnVuY3Rpb24oX3N1cGVyKSB7XG5cdFx0X19leHRlbmRzKERyYWZ0U2V0LCBfc3VwZXIpXG5cdFx0Ly8gQ3JlYXRlIGNsYXNzIG1hbnVhbGx5LCBjYXVzZSAjNTAyXG5cdFx0ZnVuY3Rpb24gRHJhZnRTZXQodGhpczogYW55LCB0YXJnZXQ6IEFueVNldCwgcGFyZW50PzogSW1tZXJTdGF0ZSkge1xuXHRcdFx0dGhpc1tEUkFGVF9TVEFURV0gPSB7XG5cdFx0XHRcdHR5cGVfOiBQcm94eVR5cGUuU2V0LFxuXHRcdFx0XHRwYXJlbnRfOiBwYXJlbnQsXG5cdFx0XHRcdHNjb3BlXzogcGFyZW50ID8gcGFyZW50LnNjb3BlXyA6IGdldEN1cnJlbnRTY29wZSgpISxcblx0XHRcdFx0bW9kaWZpZWRfOiBmYWxzZSxcblx0XHRcdFx0ZmluYWxpemVkXzogZmFsc2UsXG5cdFx0XHRcdGNvcHlfOiB1bmRlZmluZWQsXG5cdFx0XHRcdGJhc2VfOiB0YXJnZXQsXG5cdFx0XHRcdGRyYWZ0XzogdGhpcyxcblx0XHRcdFx0ZHJhZnRzXzogbmV3IE1hcCgpLFxuXHRcdFx0XHRyZXZva2VkXzogZmFsc2UsXG5cdFx0XHRcdGlzTWFudWFsXzogZmFsc2Vcblx0XHRcdH0gYXMgU2V0U3RhdGVcblx0XHRcdHJldHVybiB0aGlzXG5cdFx0fVxuXHRcdGNvbnN0IHAgPSBEcmFmdFNldC5wcm90b3R5cGVcblxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLCBcInNpemVcIiwge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuIGxhdGVzdCh0aGlzW0RSQUZUX1NUQVRFXSkuc2l6ZVxuXHRcdFx0fVxuXHRcdFx0Ly8gZW51bWVyYWJsZTogdHJ1ZSxcblx0XHR9KVxuXG5cdFx0cC5oYXMgPSBmdW5jdGlvbih2YWx1ZTogYW55KTogYm9vbGVhbiB7XG5cdFx0XHRjb25zdCBzdGF0ZTogU2V0U3RhdGUgPSB0aGlzW0RSQUZUX1NUQVRFXVxuXHRcdFx0YXNzZXJ0VW5yZXZva2VkKHN0YXRlKVxuXHRcdFx0Ly8gYml0IG9mIHRyaWNrZXJ5IGhlcmUsIHRvIGJlIGFibGUgdG8gcmVjb2duaXplIGJvdGggdGhlIHZhbHVlLCBhbmQgdGhlIGRyYWZ0IG9mIGl0cyB2YWx1ZVxuXHRcdFx0aWYgKCFzdGF0ZS5jb3B5Xykge1xuXHRcdFx0XHRyZXR1cm4gc3RhdGUuYmFzZV8uaGFzKHZhbHVlKVxuXHRcdFx0fVxuXHRcdFx0aWYgKHN0YXRlLmNvcHlfLmhhcyh2YWx1ZSkpIHJldHVybiB0cnVlXG5cdFx0XHRpZiAoc3RhdGUuZHJhZnRzXy5oYXModmFsdWUpICYmIHN0YXRlLmNvcHlfLmhhcyhzdGF0ZS5kcmFmdHNfLmdldCh2YWx1ZSkpKVxuXHRcdFx0XHRyZXR1cm4gdHJ1ZVxuXHRcdFx0cmV0dXJuIGZhbHNlXG5cdFx0fVxuXG5cdFx0cC5hZGQgPSBmdW5jdGlvbih2YWx1ZTogYW55KTogYW55IHtcblx0XHRcdGNvbnN0IHN0YXRlOiBTZXRTdGF0ZSA9IHRoaXNbRFJBRlRfU1RBVEVdXG5cdFx0XHRhc3NlcnRVbnJldm9rZWQoc3RhdGUpXG5cdFx0XHRpZiAoIXRoaXMuaGFzKHZhbHVlKSkge1xuXHRcdFx0XHRwcmVwYXJlU2V0Q29weShzdGF0ZSlcblx0XHRcdFx0bWFya0NoYW5nZWQoc3RhdGUpXG5cdFx0XHRcdHN0YXRlLmNvcHlfIS5hZGQodmFsdWUpXG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGhpc1xuXHRcdH1cblxuXHRcdHAuZGVsZXRlID0gZnVuY3Rpb24odmFsdWU6IGFueSk6IGFueSB7XG5cdFx0XHRpZiAoIXRoaXMuaGFzKHZhbHVlKSkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2Vcblx0XHRcdH1cblxuXHRcdFx0Y29uc3Qgc3RhdGU6IFNldFN0YXRlID0gdGhpc1tEUkFGVF9TVEFURV1cblx0XHRcdGFzc2VydFVucmV2b2tlZChzdGF0ZSlcblx0XHRcdHByZXBhcmVTZXRDb3B5KHN0YXRlKVxuXHRcdFx0bWFya0NoYW5nZWQoc3RhdGUpXG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRzdGF0ZS5jb3B5XyEuZGVsZXRlKHZhbHVlKSB8fFxuXHRcdFx0XHQoc3RhdGUuZHJhZnRzXy5oYXModmFsdWUpXG5cdFx0XHRcdFx0PyBzdGF0ZS5jb3B5XyEuZGVsZXRlKHN0YXRlLmRyYWZ0c18uZ2V0KHZhbHVlKSlcblx0XHRcdFx0XHQ6IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIGZhbHNlKVxuXHRcdFx0KVxuXHRcdH1cblxuXHRcdHAuY2xlYXIgPSBmdW5jdGlvbigpIHtcblx0XHRcdGNvbnN0IHN0YXRlOiBTZXRTdGF0ZSA9IHRoaXNbRFJBRlRfU1RBVEVdXG5cdFx0XHRhc3NlcnRVbnJldm9rZWQoc3RhdGUpXG5cdFx0XHRpZiAobGF0ZXN0KHN0YXRlKS5zaXplKSB7XG5cdFx0XHRcdHByZXBhcmVTZXRDb3B5KHN0YXRlKVxuXHRcdFx0XHRtYXJrQ2hhbmdlZChzdGF0ZSlcblx0XHRcdFx0c3RhdGUuY29weV8hLmNsZWFyKClcblx0XHRcdH1cblx0XHR9XG5cblx0XHRwLnZhbHVlcyA9IGZ1bmN0aW9uKCk6IEl0ZXJhYmxlSXRlcmF0b3I8YW55PiB7XG5cdFx0XHRjb25zdCBzdGF0ZTogU2V0U3RhdGUgPSB0aGlzW0RSQUZUX1NUQVRFXVxuXHRcdFx0YXNzZXJ0VW5yZXZva2VkKHN0YXRlKVxuXHRcdFx0cHJlcGFyZVNldENvcHkoc3RhdGUpXG5cdFx0XHRyZXR1cm4gc3RhdGUuY29weV8hLnZhbHVlcygpXG5cdFx0fVxuXG5cdFx0cC5lbnRyaWVzID0gZnVuY3Rpb24gZW50cmllcygpOiBJdGVyYWJsZUl0ZXJhdG9yPFthbnksIGFueV0+IHtcblx0XHRcdGNvbnN0IHN0YXRlOiBTZXRTdGF0ZSA9IHRoaXNbRFJBRlRfU1RBVEVdXG5cdFx0XHRhc3NlcnRVbnJldm9rZWQoc3RhdGUpXG5cdFx0XHRwcmVwYXJlU2V0Q29weShzdGF0ZSlcblx0XHRcdHJldHVybiBzdGF0ZS5jb3B5XyEuZW50cmllcygpXG5cdFx0fVxuXG5cdFx0cC5rZXlzID0gZnVuY3Rpb24oKTogSXRlcmFibGVJdGVyYXRvcjxhbnk+IHtcblx0XHRcdHJldHVybiB0aGlzLnZhbHVlcygpXG5cdFx0fVxuXG5cdFx0cFtpdGVyYXRvclN5bWJvbF0gPSBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiB0aGlzLnZhbHVlcygpXG5cdFx0fVxuXG5cdFx0cC5mb3JFYWNoID0gZnVuY3Rpb24gZm9yRWFjaChjYjogYW55LCB0aGlzQXJnPzogYW55KSB7XG5cdFx0XHRjb25zdCBpdGVyYXRvciA9IHRoaXMudmFsdWVzKClcblx0XHRcdGxldCByZXN1bHQgPSBpdGVyYXRvci5uZXh0KClcblx0XHRcdHdoaWxlICghcmVzdWx0LmRvbmUpIHtcblx0XHRcdFx0Y2IuY2FsbCh0aGlzQXJnLCByZXN1bHQudmFsdWUsIHJlc3VsdC52YWx1ZSwgdGhpcylcblx0XHRcdFx0cmVzdWx0ID0gaXRlcmF0b3IubmV4dCgpXG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIERyYWZ0U2V0XG5cdH0pKFNldClcblxuXHRmdW5jdGlvbiBwcm94eVNldF88VCBleHRlbmRzIEFueVNldD4odGFyZ2V0OiBULCBwYXJlbnQ/OiBJbW1lclN0YXRlKTogVCB7XG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdHJldHVybiBuZXcgRHJhZnRTZXQodGFyZ2V0LCBwYXJlbnQpXG5cdH1cblxuXHRmdW5jdGlvbiBwcmVwYXJlU2V0Q29weShzdGF0ZTogU2V0U3RhdGUpIHtcblx0XHRpZiAoIXN0YXRlLmNvcHlfKSB7XG5cdFx0XHQvLyBjcmVhdGUgZHJhZnRzIGZvciBhbGwgZW50cmllcyB0byBwcmVzZXJ2ZSBpbnNlcnRpb24gb3JkZXJcblx0XHRcdHN0YXRlLmNvcHlfID0gbmV3IFNldCgpXG5cdFx0XHRzdGF0ZS5iYXNlXy5mb3JFYWNoKHZhbHVlID0+IHtcblx0XHRcdFx0aWYgKGlzRHJhZnRhYmxlKHZhbHVlKSkge1xuXHRcdFx0XHRcdGNvbnN0IGRyYWZ0ID0gY3JlYXRlUHJveHkoc3RhdGUuc2NvcGVfLmltbWVyXywgdmFsdWUsIHN0YXRlKVxuXHRcdFx0XHRcdHN0YXRlLmRyYWZ0c18uc2V0KHZhbHVlLCBkcmFmdClcblx0XHRcdFx0XHRzdGF0ZS5jb3B5XyEuYWRkKGRyYWZ0KVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHN0YXRlLmNvcHlfIS5hZGQodmFsdWUpXG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gYXNzZXJ0VW5yZXZva2VkKHN0YXRlOiBhbnkgLypFUzVTdGF0ZSB8IE1hcFN0YXRlIHwgU2V0U3RhdGUqLykge1xuXHRcdGlmIChzdGF0ZS5yZXZva2VkXykgZGllKDMsIEpTT04uc3RyaW5naWZ5KGxhdGVzdChzdGF0ZSkpKVxuXHR9XG5cblx0bG9hZFBsdWdpbihcIk1hcFNldFwiLCB7cHJveHlNYXBfLCBwcm94eVNldF99KVxufVxuIiwgImltcG9ydCB7ZW5hYmxlRVM1fSBmcm9tIFwiLi9lczVcIlxuaW1wb3J0IHtlbmFibGVNYXBTZXR9IGZyb20gXCIuL21hcHNldFwiXG5pbXBvcnQge2VuYWJsZVBhdGNoZXN9IGZyb20gXCIuL3BhdGNoZXNcIlxuXG5leHBvcnQgZnVuY3Rpb24gZW5hYmxlQWxsUGx1Z2lucygpIHtcblx0ZW5hYmxlRVM1KClcblx0ZW5hYmxlTWFwU2V0KClcblx0ZW5hYmxlUGF0Y2hlcygpXG59XG4iLCAiaW1wb3J0IHtcblx0SVByb2R1Y2UsXG5cdElQcm9kdWNlV2l0aFBhdGNoZXMsXG5cdEltbWVyLFxuXHREcmFmdCxcblx0SW1tdXRhYmxlXG59IGZyb20gXCIuL2ludGVybmFsXCJcblxuZXhwb3J0IHtcblx0RHJhZnQsXG5cdEltbXV0YWJsZSxcblx0UGF0Y2gsXG5cdFBhdGNoTGlzdGVuZXIsXG5cdG9yaWdpbmFsLFxuXHRjdXJyZW50LFxuXHRpc0RyYWZ0LFxuXHRpc0RyYWZ0YWJsZSxcblx0Tk9USElORyBhcyBub3RoaW5nLFxuXHREUkFGVEFCTEUgYXMgaW1tZXJhYmxlLFxuXHRmcmVlemVcbn0gZnJvbSBcIi4vaW50ZXJuYWxcIlxuXG5jb25zdCBpbW1lciA9IG5ldyBJbW1lcigpXG5cbi8qKlxuICogVGhlIGBwcm9kdWNlYCBmdW5jdGlvbiB0YWtlcyBhIHZhbHVlIGFuZCBhIFwicmVjaXBlIGZ1bmN0aW9uXCIgKHdob3NlXG4gKiByZXR1cm4gdmFsdWUgb2Z0ZW4gZGVwZW5kcyBvbiB0aGUgYmFzZSBzdGF0ZSkuIFRoZSByZWNpcGUgZnVuY3Rpb24gaXNcbiAqIGZyZWUgdG8gbXV0YXRlIGl0cyBmaXJzdCBhcmd1bWVudCBob3dldmVyIGl0IHdhbnRzLiBBbGwgbXV0YXRpb25zIGFyZVxuICogb25seSBldmVyIGFwcGxpZWQgdG8gYSBfX2NvcHlfXyBvZiB0aGUgYmFzZSBzdGF0ZS5cbiAqXG4gKiBQYXNzIG9ubHkgYSBmdW5jdGlvbiB0byBjcmVhdGUgYSBcImN1cnJpZWQgcHJvZHVjZXJcIiB3aGljaCByZWxpZXZlcyB5b3VcbiAqIGZyb20gcGFzc2luZyB0aGUgcmVjaXBlIGZ1bmN0aW9uIGV2ZXJ5IHRpbWUuXG4gKlxuICogT25seSBwbGFpbiBvYmplY3RzIGFuZCBhcnJheXMgYXJlIG1hZGUgbXV0YWJsZS4gQWxsIG90aGVyIG9iamVjdHMgYXJlXG4gKiBjb25zaWRlcmVkIHVuY29weWFibGUuXG4gKlxuICogTm90ZTogVGhpcyBmdW5jdGlvbiBpcyBfX2JvdW5kX18gdG8gaXRzIGBJbW1lcmAgaW5zdGFuY2UuXG4gKlxuICogQHBhcmFtIHthbnl9IGJhc2UgLSB0aGUgaW5pdGlhbCBzdGF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJvZHVjZXIgLSBmdW5jdGlvbiB0aGF0IHJlY2VpdmVzIGEgcHJveHkgb2YgdGhlIGJhc2Ugc3RhdGUgYXMgZmlyc3QgYXJndW1lbnQgYW5kIHdoaWNoIGNhbiBiZSBmcmVlbHkgbW9kaWZpZWRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHBhdGNoTGlzdGVuZXIgLSBvcHRpb25hbCBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIHdpdGggYWxsIHRoZSBwYXRjaGVzIHByb2R1Y2VkIGhlcmVcbiAqIEByZXR1cm5zIHthbnl9IGEgbmV3IHN0YXRlLCBvciB0aGUgaW5pdGlhbCBzdGF0ZSBpZiBub3RoaW5nIHdhcyBtb2RpZmllZFxuICovXG5leHBvcnQgY29uc3QgcHJvZHVjZTogSVByb2R1Y2UgPSBpbW1lci5wcm9kdWNlXG5leHBvcnQgZGVmYXVsdCBwcm9kdWNlXG5cbi8qKlxuICogTGlrZSBgcHJvZHVjZWAsIGJ1dCBgcHJvZHVjZVdpdGhQYXRjaGVzYCBhbHdheXMgcmV0dXJucyBhIHR1cGxlXG4gKiBbbmV4dFN0YXRlLCBwYXRjaGVzLCBpbnZlcnNlUGF0Y2hlc10gKGluc3RlYWQgb2YganVzdCB0aGUgbmV4dCBzdGF0ZSlcbiAqL1xuZXhwb3J0IGNvbnN0IHByb2R1Y2VXaXRoUGF0Y2hlczogSVByb2R1Y2VXaXRoUGF0Y2hlcyA9IGltbWVyLnByb2R1Y2VXaXRoUGF0Y2hlcy5iaW5kKFxuXHRpbW1lclxuKVxuXG4vKipcbiAqIFBhc3MgdHJ1ZSB0byBhdXRvbWF0aWNhbGx5IGZyZWV6ZSBhbGwgY29waWVzIGNyZWF0ZWQgYnkgSW1tZXIuXG4gKlxuICogQWx3YXlzIGZyZWV6ZSBieSBkZWZhdWx0LCBldmVuIGluIHByb2R1Y3Rpb24gbW9kZVxuICovXG5leHBvcnQgY29uc3Qgc2V0QXV0b0ZyZWV6ZSA9IGltbWVyLnNldEF1dG9GcmVlemUuYmluZChpbW1lcilcblxuLyoqXG4gKiBQYXNzIHRydWUgdG8gdXNlIHRoZSBFUzIwMTUgYFByb3h5YCBjbGFzcyB3aGVuIGNyZWF0aW5nIGRyYWZ0cywgd2hpY2ggaXNcbiAqIGFsd2F5cyBmYXN0ZXIgdGhhbiB1c2luZyBFUzUgcHJveGllcy5cbiAqXG4gKiBCeSBkZWZhdWx0LCBmZWF0dXJlIGRldGVjdGlvbiBpcyB1c2VkLCBzbyBjYWxsaW5nIHRoaXMgaXMgcmFyZWx5IG5lY2Vzc2FyeS5cbiAqL1xuZXhwb3J0IGNvbnN0IHNldFVzZVByb3hpZXMgPSBpbW1lci5zZXRVc2VQcm94aWVzLmJpbmQoaW1tZXIpXG5cbi8qKlxuICogQXBwbHkgYW4gYXJyYXkgb2YgSW1tZXIgcGF0Y2hlcyB0byB0aGUgZmlyc3QgYXJndW1lbnQuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBpcyBhIHByb2R1Y2VyLCB3aGljaCBtZWFucyBjb3B5LW9uLXdyaXRlIGlzIGluIGVmZmVjdC5cbiAqL1xuZXhwb3J0IGNvbnN0IGFwcGx5UGF0Y2hlcyA9IGltbWVyLmFwcGx5UGF0Y2hlcy5iaW5kKGltbWVyKVxuXG4vKipcbiAqIENyZWF0ZSBhbiBJbW1lciBkcmFmdCBmcm9tIHRoZSBnaXZlbiBiYXNlIHN0YXRlLCB3aGljaCBtYXkgYmUgYSBkcmFmdCBpdHNlbGYuXG4gKiBUaGUgZHJhZnQgY2FuIGJlIG1vZGlmaWVkIHVudGlsIHlvdSBmaW5hbGl6ZSBpdCB3aXRoIHRoZSBgZmluaXNoRHJhZnRgIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlRHJhZnQgPSBpbW1lci5jcmVhdGVEcmFmdC5iaW5kKGltbWVyKVxuXG4vKipcbiAqIEZpbmFsaXplIGFuIEltbWVyIGRyYWZ0IGZyb20gYSBgY3JlYXRlRHJhZnRgIGNhbGwsIHJldHVybmluZyB0aGUgYmFzZSBzdGF0ZVxuICogKGlmIG5vIGNoYW5nZXMgd2VyZSBtYWRlKSBvciBhIG1vZGlmaWVkIGNvcHkuIFRoZSBkcmFmdCBtdXN0ICpub3QqIGJlXG4gKiBtdXRhdGVkIGFmdGVyd2FyZHMuXG4gKlxuICogUGFzcyBhIGZ1bmN0aW9uIGFzIHRoZSAybmQgYXJndW1lbnQgdG8gZ2VuZXJhdGUgSW1tZXIgcGF0Y2hlcyBiYXNlZCBvbiB0aGVcbiAqIGNoYW5nZXMgdGhhdCB3ZXJlIG1hZGUuXG4gKi9cbmV4cG9ydCBjb25zdCBmaW5pc2hEcmFmdCA9IGltbWVyLmZpbmlzaERyYWZ0LmJpbmQoaW1tZXIpXG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSBhIG5vLW9wLCBidXQgY2FuIGJlIHVzZWQgdG8gY2FzdCBhbiBpbW11dGFibGUgdHlwZVxuICogdG8gYW4gZHJhZnQgdHlwZSBhbmQgbWFrZSBUeXBlU2NyaXB0IGhhcHB5XG4gKlxuICogQHBhcmFtIHZhbHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYXN0RHJhZnQ8VD4odmFsdWU6IFQpOiBEcmFmdDxUPiB7XG5cdHJldHVybiB2YWx1ZSBhcyBhbnlcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGEgbm8tb3AsIGJ1dCBjYW4gYmUgdXNlZCB0byBjYXN0IGEgbXV0YWJsZSB0eXBlXG4gKiB0byBhbiBpbW11dGFibGUgdHlwZSBhbmQgbWFrZSBUeXBlU2NyaXB0IGhhcHB5XG4gKiBAcGFyYW0gdmFsdWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhc3RJbW11dGFibGU8VD4odmFsdWU6IFQpOiBJbW11dGFibGU8VD4ge1xuXHRyZXR1cm4gdmFsdWUgYXMgYW55XG59XG5cbmV4cG9ydCB7SW1tZXJ9XG5cbmV4cG9ydCB7ZW5hYmxlRVM1fSBmcm9tIFwiLi9wbHVnaW5zL2VzNVwiXG5leHBvcnQge2VuYWJsZVBhdGNoZXN9IGZyb20gXCIuL3BsdWdpbnMvcGF0Y2hlc1wiXG5leHBvcnQge2VuYWJsZU1hcFNldH0gZnJvbSBcIi4vcGx1Z2lucy9tYXBzZXRcIlxuZXhwb3J0IHtlbmFibGVBbGxQbHVnaW5zfSBmcm9tIFwiLi9wbHVnaW5zL2FsbFwiXG4iLCAiLy8gU2hvdWxkIGJlIG5vIGltcG9ydHMgaGVyZSFcblxuLy8gU29tZSB0aGluZ3MgdGhhdCBzaG91bGQgYmUgZXZhbHVhdGVkIGJlZm9yZSBhbGwgZWxzZS4uLlxuXG4vLyBXZSBvbmx5IHdhbnQgdG8ga25vdyBpZiBub24tcG9seWZpbGxlZCBzeW1ib2xzIGFyZSBhdmFpbGFibGVcbmNvbnN0IGhhc1N5bWJvbCA9XG5cdHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIFN5bWJvbChcInhcIikgPT09IFwic3ltYm9sXCJcbmV4cG9ydCBjb25zdCBoYXNNYXAgPSB0eXBlb2YgTWFwICE9PSBcInVuZGVmaW5lZFwiXG5leHBvcnQgY29uc3QgaGFzU2V0ID0gdHlwZW9mIFNldCAhPT0gXCJ1bmRlZmluZWRcIlxuZXhwb3J0IGNvbnN0IGhhc1Byb3hpZXMgPVxuXHR0eXBlb2YgUHJveHkgIT09IFwidW5kZWZpbmVkXCIgJiZcblx0dHlwZW9mIFByb3h5LnJldm9jYWJsZSAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuXHR0eXBlb2YgUmVmbGVjdCAhPT0gXCJ1bmRlZmluZWRcIlxuXG4vKipcbiAqIFRoZSBzZW50aW5lbCB2YWx1ZSByZXR1cm5lZCBieSBwcm9kdWNlcnMgdG8gcmVwbGFjZSB0aGUgZHJhZnQgd2l0aCB1bmRlZmluZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBOT1RISU5HOiBOb3RoaW5nID0gaGFzU3ltYm9sXG5cdD8gU3ltYm9sLmZvcihcImltbWVyLW5vdGhpbmdcIilcblx0OiAoe1tcImltbWVyLW5vdGhpbmdcIl06IHRydWV9IGFzIGFueSlcblxuLyoqXG4gKiBUbyBsZXQgSW1tZXIgdHJlYXQgeW91ciBjbGFzcyBpbnN0YW5jZXMgYXMgcGxhaW4gaW1tdXRhYmxlIG9iamVjdHNcbiAqIChhbGJlaXQgd2l0aCBhIGN1c3RvbSBwcm90b3R5cGUpLCB5b3UgbXVzdCBkZWZpbmUgZWl0aGVyIGFuIGluc3RhbmNlIHByb3BlcnR5XG4gKiBvciBhIHN0YXRpYyBwcm9wZXJ0eSBvbiBlYWNoIG9mIHlvdXIgY3VzdG9tIGNsYXNzZXMuXG4gKlxuICogT3RoZXJ3aXNlLCB5b3VyIGNsYXNzIGluc3RhbmNlIHdpbGwgbmV2ZXIgYmUgZHJhZnRlZCwgd2hpY2ggbWVhbnMgaXQgd29uJ3QgYmVcbiAqIHNhZmUgdG8gbXV0YXRlIGluIGEgcHJvZHVjZSBjYWxsYmFjay5cbiAqL1xuZXhwb3J0IGNvbnN0IERSQUZUQUJMRTogdW5pcXVlIHN5bWJvbCA9IGhhc1N5bWJvbFxuXHQ/IFN5bWJvbC5mb3IoXCJpbW1lci1kcmFmdGFibGVcIilcblx0OiAoXCJfXyRpbW1lcl9kcmFmdGFibGVcIiBhcyBhbnkpXG5cbmV4cG9ydCBjb25zdCBEUkFGVF9TVEFURTogdW5pcXVlIHN5bWJvbCA9IGhhc1N5bWJvbFxuXHQ/IFN5bWJvbC5mb3IoXCJpbW1lci1zdGF0ZVwiKVxuXHQ6IChcIl9fJGltbWVyX3N0YXRlXCIgYXMgYW55KVxuXG4vLyBFdmVuIGEgcG9seWZpbGxlZCBTeW1ib2wgbWlnaHQgcHJvdmlkZSBTeW1ib2wuaXRlcmF0b3JcbmV4cG9ydCBjb25zdCBpdGVyYXRvclN5bWJvbDogdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9XG5cdCh0eXBlb2YgU3ltYm9sICE9IFwidW5kZWZpbmVkXCIgJiYgU3ltYm9sLml0ZXJhdG9yKSB8fCAoXCJAQGl0ZXJhdG9yXCIgYXMgYW55KVxuXG4vKiogVXNlIGEgY2xhc3MgdHlwZSBmb3IgYG5vdGhpbmdgIHNvIGl0cyB0eXBlIGlzIHVuaXF1ZSAqL1xuZXhwb3J0IGNsYXNzIE5vdGhpbmcge1xuXHQvLyBUaGlzIGxldHMgdXMgZG8gYEV4Y2x1ZGU8VCwgTm90aGluZz5gXG5cdC8vIEB0cy1pZ25vcmVcblx0cHJpdmF0ZSBfITogdW5pcXVlIHN5bWJvbFxufVxuIiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF90eXBlb2Yobykge1xuICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiB0eXBlb2YgbztcbiAgfSA6IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87XG4gIH0sIF90eXBlb2Yobyk7XG59IiwgImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdG9QcmltaXRpdmUodCwgcikge1xuICBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDtcbiAgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07XG4gIGlmICh2b2lkIDAgIT09IGUpIHtcbiAgICB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTtcbiAgICBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7XG4gIH1cbiAgcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTtcbn0iLCAiaW1wb3J0IF90eXBlb2YgZnJvbSBcIi4vdHlwZW9mLmpzXCI7XG5pbXBvcnQgdG9QcmltaXRpdmUgZnJvbSBcIi4vdG9QcmltaXRpdmUuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRvUHJvcGVydHlLZXkodCkge1xuICB2YXIgaSA9IHRvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpO1xuICByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IFN0cmluZyhpKTtcbn0iLCAiaW1wb3J0IHRvUHJvcGVydHlLZXkgZnJvbSBcIi4vdG9Qcm9wZXJ0eUtleS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBrZXkgPSB0b1Byb3BlcnR5S2V5KGtleSk7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiBvYmo7XG59IiwgImltcG9ydCBkZWZpbmVQcm9wZXJ0eSBmcm9tIFwiLi9kZWZpbmVQcm9wZXJ0eS5qc1wiO1xuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7XG4gIHZhciB0ID0gT2JqZWN0LmtleXMoZSk7XG4gIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO1xuICAgIHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikge1xuICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTtcbiAgICB9KSksIHQucHVzaC5hcHBseSh0LCBvKTtcbiAgfVxuICByZXR1cm4gdDtcbn1cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9vYmplY3RTcHJlYWQyKGUpIHtcbiAgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHtcbiAgICB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307XG4gICAgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHtcbiAgICAgIGRlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pO1xuICAgIH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBlO1xufSIsICJpbXBvcnQgX29iamVjdFNwcmVhZCBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyJztcblxuLyoqXG4gKiBBZGFwdGVkIGZyb20gUmVhY3Q6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9ibG9iL21hc3Rlci9wYWNrYWdlcy9zaGFyZWQvZm9ybWF0UHJvZEVycm9yTWVzc2FnZS5qc1xuICpcbiAqIERvIG5vdCByZXF1aXJlIHRoaXMgbW9kdWxlIGRpcmVjdGx5ISBVc2Ugbm9ybWFsIHRocm93IGVycm9yIGNhbGxzLiBUaGVzZSBtZXNzYWdlcyB3aWxsIGJlIHJlcGxhY2VkIHdpdGggZXJyb3IgY29kZXNcbiAqIGR1cmluZyBidWlsZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2RlXG4gKi9cbmZ1bmN0aW9uIGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoY29kZSkge1xuICByZXR1cm4gXCJNaW5pZmllZCBSZWR1eCBlcnJvciAjXCIgKyBjb2RlICsgXCI7IHZpc2l0IGh0dHBzOi8vcmVkdXguanMub3JnL0Vycm9ycz9jb2RlPVwiICsgY29kZSArIFwiIGZvciB0aGUgZnVsbCBtZXNzYWdlIG9yIFwiICsgJ3VzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCBmb3IgZnVsbCBlcnJvcnMuICc7XG59XG5cbi8vIElubGluZWQgdmVyc2lvbiBvZiB0aGUgYHN5bWJvbC1vYnNlcnZhYmxlYCBwb2x5ZmlsbFxudmFyICQkb2JzZXJ2YWJsZSA9IChmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5vYnNlcnZhYmxlIHx8ICdAQG9ic2VydmFibGUnO1xufSkoKTtcblxuLyoqXG4gKiBUaGVzZSBhcmUgcHJpdmF0ZSBhY3Rpb24gdHlwZXMgcmVzZXJ2ZWQgYnkgUmVkdXguXG4gKiBGb3IgYW55IHVua25vd24gYWN0aW9ucywgeW91IG11c3QgcmV0dXJuIHRoZSBjdXJyZW50IHN0YXRlLlxuICogSWYgdGhlIGN1cnJlbnQgc3RhdGUgaXMgdW5kZWZpbmVkLCB5b3UgbXVzdCByZXR1cm4gdGhlIGluaXRpYWwgc3RhdGUuXG4gKiBEbyBub3QgcmVmZXJlbmNlIHRoZXNlIGFjdGlvbiB0eXBlcyBkaXJlY3RseSBpbiB5b3VyIGNvZGUuXG4gKi9cbnZhciByYW5kb21TdHJpbmcgPSBmdW5jdGlvbiByYW5kb21TdHJpbmcoKSB7XG4gIHJldHVybiBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoNykuc3BsaXQoJycpLmpvaW4oJy4nKTtcbn07XG5cbnZhciBBY3Rpb25UeXBlcyA9IHtcbiAgSU5JVDogXCJAQHJlZHV4L0lOSVRcIiArIHJhbmRvbVN0cmluZygpLFxuICBSRVBMQUNFOiBcIkBAcmVkdXgvUkVQTEFDRVwiICsgcmFuZG9tU3RyaW5nKCksXG4gIFBST0JFX1VOS05PV05fQUNUSU9OOiBmdW5jdGlvbiBQUk9CRV9VTktOT1dOX0FDVElPTigpIHtcbiAgICByZXR1cm4gXCJAQHJlZHV4L1BST0JFX1VOS05PV05fQUNUSU9OXCIgKyByYW5kb21TdHJpbmcoKTtcbiAgfVxufTtcblxuLyoqXG4gKiBAcGFyYW0ge2FueX0gb2JqIFRoZSBvYmplY3QgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBhcmd1bWVudCBhcHBlYXJzIHRvIGJlIGEgcGxhaW4gb2JqZWN0LlxuICovXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KG9iaikge1xuICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgb2JqID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gIHZhciBwcm90byA9IG9iajtcblxuICB3aGlsZSAoT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvKSAhPT0gbnVsbCkge1xuICAgIHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvKTtcbiAgfVxuXG4gIHJldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKSA9PT0gcHJvdG87XG59XG5cbi8vIElubGluZWQgLyBzaG9ydGVuZWQgdmVyc2lvbiBvZiBga2luZE9mYCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9qb25zY2hsaW5rZXJ0L2tpbmQtb2ZcbmZ1bmN0aW9uIG1pbmlLaW5kT2YodmFsKSB7XG4gIGlmICh2YWwgPT09IHZvaWQgMCkgcmV0dXJuICd1bmRlZmluZWQnO1xuICBpZiAodmFsID09PSBudWxsKSByZXR1cm4gJ251bGwnO1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWw7XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAnYm9vbGVhbic6XG4gICAgY2FzZSAnc3RyaW5nJzpcbiAgICBjYXNlICdudW1iZXInOlxuICAgIGNhc2UgJ3N5bWJvbCc6XG4gICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAge1xuICAgICAgICByZXR1cm4gdHlwZTtcbiAgICAgIH1cbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHJldHVybiAnYXJyYXknO1xuICBpZiAoaXNEYXRlKHZhbCkpIHJldHVybiAnZGF0ZSc7XG4gIGlmIChpc0Vycm9yKHZhbCkpIHJldHVybiAnZXJyb3InO1xuICB2YXIgY29uc3RydWN0b3JOYW1lID0gY3Rvck5hbWUodmFsKTtcblxuICBzd2l0Y2ggKGNvbnN0cnVjdG9yTmFtZSkge1xuICAgIGNhc2UgJ1N5bWJvbCc6XG4gICAgY2FzZSAnUHJvbWlzZSc6XG4gICAgY2FzZSAnV2Vha01hcCc6XG4gICAgY2FzZSAnV2Vha1NldCc6XG4gICAgY2FzZSAnTWFwJzpcbiAgICBjYXNlICdTZXQnOlxuICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yTmFtZTtcbiAgfSAvLyBvdGhlclxuXG5cbiAgcmV0dXJuIHR5cGUuc2xpY2UoOCwgLTEpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXFxzL2csICcnKTtcbn1cblxuZnVuY3Rpb24gY3Rvck5hbWUodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsLmNvbnN0cnVjdG9yID09PSAnZnVuY3Rpb24nID8gdmFsLmNvbnN0cnVjdG9yLm5hbWUgOiBudWxsO1xufVxuXG5mdW5jdGlvbiBpc0Vycm9yKHZhbCkge1xuICByZXR1cm4gdmFsIGluc3RhbmNlb2YgRXJyb3IgfHwgdHlwZW9mIHZhbC5tZXNzYWdlID09PSAnc3RyaW5nJyAmJiB2YWwuY29uc3RydWN0b3IgJiYgdHlwZW9mIHZhbC5jb25zdHJ1Y3Rvci5zdGFja1RyYWNlTGltaXQgPT09ICdudW1iZXInO1xufVxuXG5mdW5jdGlvbiBpc0RhdGUodmFsKSB7XG4gIGlmICh2YWwgaW5zdGFuY2VvZiBEYXRlKSByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuIHR5cGVvZiB2YWwudG9EYXRlU3RyaW5nID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWwuZ2V0RGF0ZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgdmFsLnNldERhdGUgPT09ICdmdW5jdGlvbic7XG59XG5cbmZ1bmN0aW9uIGtpbmRPZih2YWwpIHtcbiAgdmFyIHR5cGVPZlZhbCA9IHR5cGVvZiB2YWw7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICB0eXBlT2ZWYWwgPSBtaW5pS2luZE9mKHZhbCk7XG4gIH1cblxuICByZXR1cm4gdHlwZU9mVmFsO1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkXG4gKlxuICogKipXZSByZWNvbW1lbmQgdXNpbmcgdGhlIGBjb25maWd1cmVTdG9yZWAgbWV0aG9kXG4gKiBvZiB0aGUgYEByZWR1eGpzL3Rvb2xraXRgIHBhY2thZ2UqKiwgd2hpY2ggcmVwbGFjZXMgYGNyZWF0ZVN0b3JlYC5cbiAqXG4gKiBSZWR1eCBUb29sa2l0IGlzIG91ciByZWNvbW1lbmRlZCBhcHByb2FjaCBmb3Igd3JpdGluZyBSZWR1eCBsb2dpYyB0b2RheSxcbiAqIGluY2x1ZGluZyBzdG9yZSBzZXR1cCwgcmVkdWNlcnMsIGRhdGEgZmV0Y2hpbmcsIGFuZCBtb3JlLlxuICpcbiAqICoqRm9yIG1vcmUgZGV0YWlscywgcGxlYXNlIHJlYWQgdGhpcyBSZWR1eCBkb2NzIHBhZ2U6KipcbiAqICoqaHR0cHM6Ly9yZWR1eC5qcy5vcmcvaW50cm9kdWN0aW9uL3doeS1ydGstaXMtcmVkdXgtdG9kYXkqKlxuICpcbiAqIGBjb25maWd1cmVTdG9yZWAgZnJvbSBSZWR1eCBUb29sa2l0IGlzIGFuIGltcHJvdmVkIHZlcnNpb24gb2YgYGNyZWF0ZVN0b3JlYCB0aGF0XG4gKiBzaW1wbGlmaWVzIHNldHVwIGFuZCBoZWxwcyBhdm9pZCBjb21tb24gYnVncy5cbiAqXG4gKiBZb3Ugc2hvdWxkIG5vdCBiZSB1c2luZyB0aGUgYHJlZHV4YCBjb3JlIHBhY2thZ2UgYnkgaXRzZWxmIHRvZGF5LCBleGNlcHQgZm9yIGxlYXJuaW5nIHB1cnBvc2VzLlxuICogVGhlIGBjcmVhdGVTdG9yZWAgbWV0aG9kIGZyb20gdGhlIGNvcmUgYHJlZHV4YCBwYWNrYWdlIHdpbGwgbm90IGJlIHJlbW92ZWQsIGJ1dCB3ZSBlbmNvdXJhZ2VcbiAqIGFsbCB1c2VycyB0byBtaWdyYXRlIHRvIHVzaW5nIFJlZHV4IFRvb2xraXQgZm9yIGFsbCBSZWR1eCBjb2RlLlxuICpcbiAqIElmIHlvdSB3YW50IHRvIHVzZSBgY3JlYXRlU3RvcmVgIHdpdGhvdXQgdGhpcyB2aXN1YWwgZGVwcmVjYXRpb24gd2FybmluZywgdXNlXG4gKiB0aGUgYGxlZ2FjeV9jcmVhdGVTdG9yZWAgaW1wb3J0IGluc3RlYWQ6XG4gKlxuICogYGltcG9ydCB7IGxlZ2FjeV9jcmVhdGVTdG9yZSBhcyBjcmVhdGVTdG9yZX0gZnJvbSAncmVkdXgnYFxuICpcbiAqL1xuXG5mdW5jdGlvbiBjcmVhdGVTdG9yZShyZWR1Y2VyLCBwcmVsb2FkZWRTdGF0ZSwgZW5oYW5jZXIpIHtcbiAgdmFyIF9yZWYyO1xuXG4gIGlmICh0eXBlb2YgcHJlbG9hZGVkU3RhdGUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGVuaGFuY2VyID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBlbmhhbmNlciA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgYXJndW1lbnRzWzNdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMCkgOiAnSXQgbG9va3MgbGlrZSB5b3UgYXJlIHBhc3Npbmcgc2V2ZXJhbCBzdG9yZSBlbmhhbmNlcnMgdG8gJyArICdjcmVhdGVTdG9yZSgpLiBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQuIEluc3RlYWQsIGNvbXBvc2UgdGhlbSAnICsgJ3RvZ2V0aGVyIHRvIGEgc2luZ2xlIGZ1bmN0aW9uLiBTZWUgaHR0cHM6Ly9yZWR1eC5qcy5vcmcvdHV0b3JpYWxzL2Z1bmRhbWVudGFscy9wYXJ0LTQtc3RvcmUjY3JlYXRpbmctYS1zdG9yZS13aXRoLWVuaGFuY2VycyBmb3IgYW4gZXhhbXBsZS4nKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgcHJlbG9hZGVkU3RhdGUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGVuaGFuY2VyID09PSAndW5kZWZpbmVkJykge1xuICAgIGVuaGFuY2VyID0gcHJlbG9hZGVkU3RhdGU7XG4gICAgcHJlbG9hZGVkU3RhdGUgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAodHlwZW9mIGVuaGFuY2VyICE9PSAndW5kZWZpbmVkJykge1xuICAgIGlmICh0eXBlb2YgZW5oYW5jZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDEpIDogXCJFeHBlY3RlZCB0aGUgZW5oYW5jZXIgdG8gYmUgYSBmdW5jdGlvbi4gSW5zdGVhZCwgcmVjZWl2ZWQ6ICdcIiArIGtpbmRPZihlbmhhbmNlcikgKyBcIidcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVuaGFuY2VyKGNyZWF0ZVN0b3JlKShyZWR1Y2VyLCBwcmVsb2FkZWRTdGF0ZSk7XG4gIH1cblxuICBpZiAodHlwZW9mIHJlZHVjZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgyKSA6IFwiRXhwZWN0ZWQgdGhlIHJvb3QgcmVkdWNlciB0byBiZSBhIGZ1bmN0aW9uLiBJbnN0ZWFkLCByZWNlaXZlZDogJ1wiICsga2luZE9mKHJlZHVjZXIpICsgXCInXCIpO1xuICB9XG5cbiAgdmFyIGN1cnJlbnRSZWR1Y2VyID0gcmVkdWNlcjtcbiAgdmFyIGN1cnJlbnRTdGF0ZSA9IHByZWxvYWRlZFN0YXRlO1xuICB2YXIgY3VycmVudExpc3RlbmVycyA9IFtdO1xuICB2YXIgbmV4dExpc3RlbmVycyA9IGN1cnJlbnRMaXN0ZW5lcnM7XG4gIHZhciBpc0Rpc3BhdGNoaW5nID0gZmFsc2U7XG4gIC8qKlxuICAgKiBUaGlzIG1ha2VzIGEgc2hhbGxvdyBjb3B5IG9mIGN1cnJlbnRMaXN0ZW5lcnMgc28gd2UgY2FuIHVzZVxuICAgKiBuZXh0TGlzdGVuZXJzIGFzIGEgdGVtcG9yYXJ5IGxpc3Qgd2hpbGUgZGlzcGF0Y2hpbmcuXG4gICAqXG4gICAqIFRoaXMgcHJldmVudHMgYW55IGJ1Z3MgYXJvdW5kIGNvbnN1bWVycyBjYWxsaW5nXG4gICAqIHN1YnNjcmliZS91bnN1YnNjcmliZSBpbiB0aGUgbWlkZGxlIG9mIGEgZGlzcGF0Y2guXG4gICAqL1xuXG4gIGZ1bmN0aW9uIGVuc3VyZUNhbk11dGF0ZU5leHRMaXN0ZW5lcnMoKSB7XG4gICAgaWYgKG5leHRMaXN0ZW5lcnMgPT09IGN1cnJlbnRMaXN0ZW5lcnMpIHtcbiAgICAgIG5leHRMaXN0ZW5lcnMgPSBjdXJyZW50TGlzdGVuZXJzLnNsaWNlKCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBSZWFkcyB0aGUgc3RhdGUgdHJlZSBtYW5hZ2VkIGJ5IHRoZSBzdG9yZS5cbiAgICpcbiAgICogQHJldHVybnMge2FueX0gVGhlIGN1cnJlbnQgc3RhdGUgdHJlZSBvZiB5b3VyIGFwcGxpY2F0aW9uLlxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGdldFN0YXRlKCkge1xuICAgIGlmIChpc0Rpc3BhdGNoaW5nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgzKSA6ICdZb3UgbWF5IG5vdCBjYWxsIHN0b3JlLmdldFN0YXRlKCkgd2hpbGUgdGhlIHJlZHVjZXIgaXMgZXhlY3V0aW5nLiAnICsgJ1RoZSByZWR1Y2VyIGhhcyBhbHJlYWR5IHJlY2VpdmVkIHRoZSBzdGF0ZSBhcyBhbiBhcmd1bWVudC4gJyArICdQYXNzIGl0IGRvd24gZnJvbSB0aGUgdG9wIHJlZHVjZXIgaW5zdGVhZCBvZiByZWFkaW5nIGl0IGZyb20gdGhlIHN0b3JlLicpO1xuICAgIH1cblxuICAgIHJldHVybiBjdXJyZW50U3RhdGU7XG4gIH1cbiAgLyoqXG4gICAqIEFkZHMgYSBjaGFuZ2UgbGlzdGVuZXIuIEl0IHdpbGwgYmUgY2FsbGVkIGFueSB0aW1lIGFuIGFjdGlvbiBpcyBkaXNwYXRjaGVkLFxuICAgKiBhbmQgc29tZSBwYXJ0IG9mIHRoZSBzdGF0ZSB0cmVlIG1heSBwb3RlbnRpYWxseSBoYXZlIGNoYW5nZWQuIFlvdSBtYXkgdGhlblxuICAgKiBjYWxsIGBnZXRTdGF0ZSgpYCB0byByZWFkIHRoZSBjdXJyZW50IHN0YXRlIHRyZWUgaW5zaWRlIHRoZSBjYWxsYmFjay5cbiAgICpcbiAgICogWW91IG1heSBjYWxsIGBkaXNwYXRjaCgpYCBmcm9tIGEgY2hhbmdlIGxpc3RlbmVyLCB3aXRoIHRoZSBmb2xsb3dpbmdcbiAgICogY2F2ZWF0czpcbiAgICpcbiAgICogMS4gVGhlIHN1YnNjcmlwdGlvbnMgYXJlIHNuYXBzaG90dGVkIGp1c3QgYmVmb3JlIGV2ZXJ5IGBkaXNwYXRjaCgpYCBjYWxsLlxuICAgKiBJZiB5b3Ugc3Vic2NyaWJlIG9yIHVuc3Vic2NyaWJlIHdoaWxlIHRoZSBsaXN0ZW5lcnMgYXJlIGJlaW5nIGludm9rZWQsIHRoaXNcbiAgICogd2lsbCBub3QgaGF2ZSBhbnkgZWZmZWN0IG9uIHRoZSBgZGlzcGF0Y2goKWAgdGhhdCBpcyBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MuXG4gICAqIEhvd2V2ZXIsIHRoZSBuZXh0IGBkaXNwYXRjaCgpYCBjYWxsLCB3aGV0aGVyIG5lc3RlZCBvciBub3QsIHdpbGwgdXNlIGEgbW9yZVxuICAgKiByZWNlbnQgc25hcHNob3Qgb2YgdGhlIHN1YnNjcmlwdGlvbiBsaXN0LlxuICAgKlxuICAgKiAyLiBUaGUgbGlzdGVuZXIgc2hvdWxkIG5vdCBleHBlY3QgdG8gc2VlIGFsbCBzdGF0ZSBjaGFuZ2VzLCBhcyB0aGUgc3RhdGVcbiAgICogbWlnaHQgaGF2ZSBiZWVuIHVwZGF0ZWQgbXVsdGlwbGUgdGltZXMgZHVyaW5nIGEgbmVzdGVkIGBkaXNwYXRjaCgpYCBiZWZvcmVcbiAgICogdGhlIGxpc3RlbmVyIGlzIGNhbGxlZC4gSXQgaXMsIGhvd2V2ZXIsIGd1YXJhbnRlZWQgdGhhdCBhbGwgc3Vic2NyaWJlcnNcbiAgICogcmVnaXN0ZXJlZCBiZWZvcmUgdGhlIGBkaXNwYXRjaCgpYCBzdGFydGVkIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIGxhdGVzdFxuICAgKiBzdGF0ZSBieSB0aGUgdGltZSBpdCBleGl0cy5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gbGlzdGVuZXIgQSBjYWxsYmFjayB0byBiZSBpbnZva2VkIG9uIGV2ZXJ5IGRpc3BhdGNoLlxuICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgZnVuY3Rpb24gdG8gcmVtb3ZlIHRoaXMgY2hhbmdlIGxpc3RlbmVyLlxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHN1YnNjcmliZShsaXN0ZW5lcikge1xuICAgIGlmICh0eXBlb2YgbGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDQpIDogXCJFeHBlY3RlZCB0aGUgbGlzdGVuZXIgdG8gYmUgYSBmdW5jdGlvbi4gSW5zdGVhZCwgcmVjZWl2ZWQ6ICdcIiArIGtpbmRPZihsaXN0ZW5lcikgKyBcIidcIik7XG4gICAgfVxuXG4gICAgaWYgKGlzRGlzcGF0Y2hpbmcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDUpIDogJ1lvdSBtYXkgbm90IGNhbGwgc3RvcmUuc3Vic2NyaWJlKCkgd2hpbGUgdGhlIHJlZHVjZXIgaXMgZXhlY3V0aW5nLiAnICsgJ0lmIHlvdSB3b3VsZCBsaWtlIHRvIGJlIG5vdGlmaWVkIGFmdGVyIHRoZSBzdG9yZSBoYXMgYmVlbiB1cGRhdGVkLCBzdWJzY3JpYmUgZnJvbSBhICcgKyAnY29tcG9uZW50IGFuZCBpbnZva2Ugc3RvcmUuZ2V0U3RhdGUoKSBpbiB0aGUgY2FsbGJhY2sgdG8gYWNjZXNzIHRoZSBsYXRlc3Qgc3RhdGUuICcgKyAnU2VlIGh0dHBzOi8vcmVkdXguanMub3JnL2FwaS9zdG9yZSNzdWJzY3JpYmVsaXN0ZW5lciBmb3IgbW9yZSBkZXRhaWxzLicpO1xuICAgIH1cblxuICAgIHZhciBpc1N1YnNjcmliZWQgPSB0cnVlO1xuICAgIGVuc3VyZUNhbk11dGF0ZU5leHRMaXN0ZW5lcnMoKTtcbiAgICBuZXh0TGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICAgIHJldHVybiBmdW5jdGlvbiB1bnN1YnNjcmliZSgpIHtcbiAgICAgIGlmICghaXNTdWJzY3JpYmVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzRGlzcGF0Y2hpbmcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoNikgOiAnWW91IG1heSBub3QgdW5zdWJzY3JpYmUgZnJvbSBhIHN0b3JlIGxpc3RlbmVyIHdoaWxlIHRoZSByZWR1Y2VyIGlzIGV4ZWN1dGluZy4gJyArICdTZWUgaHR0cHM6Ly9yZWR1eC5qcy5vcmcvYXBpL3N0b3JlI3N1YnNjcmliZWxpc3RlbmVyIGZvciBtb3JlIGRldGFpbHMuJyk7XG4gICAgICB9XG5cbiAgICAgIGlzU3Vic2NyaWJlZCA9IGZhbHNlO1xuICAgICAgZW5zdXJlQ2FuTXV0YXRlTmV4dExpc3RlbmVycygpO1xuICAgICAgdmFyIGluZGV4ID0gbmV4dExpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTtcbiAgICAgIG5leHRMaXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIGN1cnJlbnRMaXN0ZW5lcnMgPSBudWxsO1xuICAgIH07XG4gIH1cbiAgLyoqXG4gICAqIERpc3BhdGNoZXMgYW4gYWN0aW9uLiBJdCBpcyB0aGUgb25seSB3YXkgdG8gdHJpZ2dlciBhIHN0YXRlIGNoYW5nZS5cbiAgICpcbiAgICogVGhlIGByZWR1Y2VyYCBmdW5jdGlvbiwgdXNlZCB0byBjcmVhdGUgdGhlIHN0b3JlLCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZVxuICAgKiBjdXJyZW50IHN0YXRlIHRyZWUgYW5kIHRoZSBnaXZlbiBgYWN0aW9uYC4gSXRzIHJldHVybiB2YWx1ZSB3aWxsXG4gICAqIGJlIGNvbnNpZGVyZWQgdGhlICoqbmV4dCoqIHN0YXRlIG9mIHRoZSB0cmVlLCBhbmQgdGhlIGNoYW5nZSBsaXN0ZW5lcnNcbiAgICogd2lsbCBiZSBub3RpZmllZC5cbiAgICpcbiAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb25seSBzdXBwb3J0cyBwbGFpbiBvYmplY3QgYWN0aW9ucy4gSWYgeW91IHdhbnQgdG9cbiAgICogZGlzcGF0Y2ggYSBQcm9taXNlLCBhbiBPYnNlcnZhYmxlLCBhIHRodW5rLCBvciBzb21ldGhpbmcgZWxzZSwgeW91IG5lZWQgdG9cbiAgICogd3JhcCB5b3VyIHN0b3JlIGNyZWF0aW5nIGZ1bmN0aW9uIGludG8gdGhlIGNvcnJlc3BvbmRpbmcgbWlkZGxld2FyZS4gRm9yXG4gICAqIGV4YW1wbGUsIHNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGByZWR1eC10aHVua2AgcGFja2FnZS4gRXZlbiB0aGVcbiAgICogbWlkZGxld2FyZSB3aWxsIGV2ZW50dWFsbHkgZGlzcGF0Y2ggcGxhaW4gb2JqZWN0IGFjdGlvbnMgdXNpbmcgdGhpcyBtZXRob2QuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhY3Rpb24gQSBwbGFpbiBvYmplY3QgcmVwcmVzZW50aW5nIFx1MjAxQ3doYXQgY2hhbmdlZFx1MjAxRC4gSXQgaXNcbiAgICogYSBnb29kIGlkZWEgdG8ga2VlcCBhY3Rpb25zIHNlcmlhbGl6YWJsZSBzbyB5b3UgY2FuIHJlY29yZCBhbmQgcmVwbGF5IHVzZXJcbiAgICogc2Vzc2lvbnMsIG9yIHVzZSB0aGUgdGltZSB0cmF2ZWxsaW5nIGByZWR1eC1kZXZ0b29sc2AuIEFuIGFjdGlvbiBtdXN0IGhhdmVcbiAgICogYSBgdHlwZWAgcHJvcGVydHkgd2hpY2ggbWF5IG5vdCBiZSBgdW5kZWZpbmVkYC4gSXQgaXMgYSBnb29kIGlkZWEgdG8gdXNlXG4gICAqIHN0cmluZyBjb25zdGFudHMgZm9yIGFjdGlvbiB0eXBlcy5cbiAgICpcbiAgICogQHJldHVybnMge09iamVjdH0gRm9yIGNvbnZlbmllbmNlLCB0aGUgc2FtZSBhY3Rpb24gb2JqZWN0IHlvdSBkaXNwYXRjaGVkLlxuICAgKlxuICAgKiBOb3RlIHRoYXQsIGlmIHlvdSB1c2UgYSBjdXN0b20gbWlkZGxld2FyZSwgaXQgbWF5IHdyYXAgYGRpc3BhdGNoKClgIHRvXG4gICAqIHJldHVybiBzb21ldGhpbmcgZWxzZSAoZm9yIGV4YW1wbGUsIGEgUHJvbWlzZSB5b3UgY2FuIGF3YWl0KS5cbiAgICovXG5cblxuICBmdW5jdGlvbiBkaXNwYXRjaChhY3Rpb24pIHtcbiAgICBpZiAoIWlzUGxhaW5PYmplY3QoYWN0aW9uKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoNykgOiBcIkFjdGlvbnMgbXVzdCBiZSBwbGFpbiBvYmplY3RzLiBJbnN0ZWFkLCB0aGUgYWN0dWFsIHR5cGUgd2FzOiAnXCIgKyBraW5kT2YoYWN0aW9uKSArIFwiJy4gWW91IG1heSBuZWVkIHRvIGFkZCBtaWRkbGV3YXJlIHRvIHlvdXIgc3RvcmUgc2V0dXAgdG8gaGFuZGxlIGRpc3BhdGNoaW5nIG90aGVyIHZhbHVlcywgc3VjaCBhcyAncmVkdXgtdGh1bmsnIHRvIGhhbmRsZSBkaXNwYXRjaGluZyBmdW5jdGlvbnMuIFNlZSBodHRwczovL3JlZHV4LmpzLm9yZy90dXRvcmlhbHMvZnVuZGFtZW50YWxzL3BhcnQtNC1zdG9yZSNtaWRkbGV3YXJlIGFuZCBodHRwczovL3JlZHV4LmpzLm9yZy90dXRvcmlhbHMvZnVuZGFtZW50YWxzL3BhcnQtNi1hc3luYy1sb2dpYyN1c2luZy10aGUtcmVkdXgtdGh1bmstbWlkZGxld2FyZSBmb3IgZXhhbXBsZXMuXCIpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgYWN0aW9uLnR5cGUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSg4KSA6ICdBY3Rpb25zIG1heSBub3QgaGF2ZSBhbiB1bmRlZmluZWQgXCJ0eXBlXCIgcHJvcGVydHkuIFlvdSBtYXkgaGF2ZSBtaXNzcGVsbGVkIGFuIGFjdGlvbiB0eXBlIHN0cmluZyBjb25zdGFudC4nKTtcbiAgICB9XG5cbiAgICBpZiAoaXNEaXNwYXRjaGluZykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoOSkgOiAnUmVkdWNlcnMgbWF5IG5vdCBkaXNwYXRjaCBhY3Rpb25zLicpO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBpc0Rpc3BhdGNoaW5nID0gdHJ1ZTtcbiAgICAgIGN1cnJlbnRTdGF0ZSA9IGN1cnJlbnRSZWR1Y2VyKGN1cnJlbnRTdGF0ZSwgYWN0aW9uKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaXNEaXNwYXRjaGluZyA9IGZhbHNlO1xuICAgIH1cblxuICAgIHZhciBsaXN0ZW5lcnMgPSBjdXJyZW50TGlzdGVuZXJzID0gbmV4dExpc3RlbmVycztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdGVuZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgbGlzdGVuZXIgPSBsaXN0ZW5lcnNbaV07XG4gICAgICBsaXN0ZW5lcigpO1xuICAgIH1cblxuICAgIHJldHVybiBhY3Rpb247XG4gIH1cbiAgLyoqXG4gICAqIFJlcGxhY2VzIHRoZSByZWR1Y2VyIGN1cnJlbnRseSB1c2VkIGJ5IHRoZSBzdG9yZSB0byBjYWxjdWxhdGUgdGhlIHN0YXRlLlxuICAgKlxuICAgKiBZb3UgbWlnaHQgbmVlZCB0aGlzIGlmIHlvdXIgYXBwIGltcGxlbWVudHMgY29kZSBzcGxpdHRpbmcgYW5kIHlvdSB3YW50IHRvXG4gICAqIGxvYWQgc29tZSBvZiB0aGUgcmVkdWNlcnMgZHluYW1pY2FsbHkuIFlvdSBtaWdodCBhbHNvIG5lZWQgdGhpcyBpZiB5b3VcbiAgICogaW1wbGVtZW50IGEgaG90IHJlbG9hZGluZyBtZWNoYW5pc20gZm9yIFJlZHV4LlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBuZXh0UmVkdWNlciBUaGUgcmVkdWNlciBmb3IgdGhlIHN0b3JlIHRvIHVzZSBpbnN0ZWFkLlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG5cblxuICBmdW5jdGlvbiByZXBsYWNlUmVkdWNlcihuZXh0UmVkdWNlcikge1xuICAgIGlmICh0eXBlb2YgbmV4dFJlZHVjZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDEwKSA6IFwiRXhwZWN0ZWQgdGhlIG5leHRSZWR1Y2VyIHRvIGJlIGEgZnVuY3Rpb24uIEluc3RlYWQsIHJlY2VpdmVkOiAnXCIgKyBraW5kT2YobmV4dFJlZHVjZXIpKTtcbiAgICB9XG5cbiAgICBjdXJyZW50UmVkdWNlciA9IG5leHRSZWR1Y2VyOyAvLyBUaGlzIGFjdGlvbiBoYXMgYSBzaW1pbGlhciBlZmZlY3QgdG8gQWN0aW9uVHlwZXMuSU5JVC5cbiAgICAvLyBBbnkgcmVkdWNlcnMgdGhhdCBleGlzdGVkIGluIGJvdGggdGhlIG5ldyBhbmQgb2xkIHJvb3RSZWR1Y2VyXG4gICAgLy8gd2lsbCByZWNlaXZlIHRoZSBwcmV2aW91cyBzdGF0ZS4gVGhpcyBlZmZlY3RpdmVseSBwb3B1bGF0ZXNcbiAgICAvLyB0aGUgbmV3IHN0YXRlIHRyZWUgd2l0aCBhbnkgcmVsZXZhbnQgZGF0YSBmcm9tIHRoZSBvbGQgb25lLlxuXG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogQWN0aW9uVHlwZXMuUkVQTEFDRVxuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBJbnRlcm9wZXJhYmlsaXR5IHBvaW50IGZvciBvYnNlcnZhYmxlL3JlYWN0aXZlIGxpYnJhcmllcy5cbiAgICogQHJldHVybnMge29ic2VydmFibGV9IEEgbWluaW1hbCBvYnNlcnZhYmxlIG9mIHN0YXRlIGNoYW5nZXMuXG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlIG9ic2VydmFibGUgcHJvcG9zYWw6XG4gICAqIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLW9ic2VydmFibGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBvYnNlcnZhYmxlKCkge1xuICAgIHZhciBfcmVmO1xuXG4gICAgdmFyIG91dGVyU3Vic2NyaWJlID0gc3Vic2NyaWJlO1xuICAgIHJldHVybiBfcmVmID0ge1xuICAgICAgLyoqXG4gICAgICAgKiBUaGUgbWluaW1hbCBvYnNlcnZhYmxlIHN1YnNjcmlwdGlvbiBtZXRob2QuXG4gICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JzZXJ2ZXIgQW55IG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIGFzIGFuIG9ic2VydmVyLlxuICAgICAgICogVGhlIG9ic2VydmVyIG9iamVjdCBzaG91bGQgaGF2ZSBhIGBuZXh0YCBtZXRob2QuXG4gICAgICAgKiBAcmV0dXJucyB7c3Vic2NyaXB0aW9ufSBBbiBvYmplY3Qgd2l0aCBhbiBgdW5zdWJzY3JpYmVgIG1ldGhvZCB0aGF0IGNhblxuICAgICAgICogYmUgdXNlZCB0byB1bnN1YnNjcmliZSB0aGUgb2JzZXJ2YWJsZSBmcm9tIHRoZSBzdG9yZSwgYW5kIHByZXZlbnQgZnVydGhlclxuICAgICAgICogZW1pc3Npb24gb2YgdmFsdWVzIGZyb20gdGhlIG9ic2VydmFibGUuXG4gICAgICAgKi9cbiAgICAgIHN1YnNjcmliZTogZnVuY3Rpb24gc3Vic2NyaWJlKG9ic2VydmVyKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygb2JzZXJ2ZXIgIT09ICdvYmplY3QnIHx8IG9ic2VydmVyID09PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMTEpIDogXCJFeHBlY3RlZCB0aGUgb2JzZXJ2ZXIgdG8gYmUgYW4gb2JqZWN0LiBJbnN0ZWFkLCByZWNlaXZlZDogJ1wiICsga2luZE9mKG9ic2VydmVyKSArIFwiJ1wiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIG9ic2VydmVTdGF0ZSgpIHtcbiAgICAgICAgICBpZiAob2JzZXJ2ZXIubmV4dCkge1xuICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChnZXRTdGF0ZSgpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBvYnNlcnZlU3RhdGUoKTtcbiAgICAgICAgdmFyIHVuc3Vic2NyaWJlID0gb3V0ZXJTdWJzY3JpYmUob2JzZXJ2ZVN0YXRlKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB1bnN1YnNjcmliZTogdW5zdWJzY3JpYmVcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9LCBfcmVmWyQkb2JzZXJ2YWJsZV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LCBfcmVmO1xuICB9IC8vIFdoZW4gYSBzdG9yZSBpcyBjcmVhdGVkLCBhbiBcIklOSVRcIiBhY3Rpb24gaXMgZGlzcGF0Y2hlZCBzbyB0aGF0IGV2ZXJ5XG4gIC8vIHJlZHVjZXIgcmV0dXJucyB0aGVpciBpbml0aWFsIHN0YXRlLiBUaGlzIGVmZmVjdGl2ZWx5IHBvcHVsYXRlc1xuICAvLyB0aGUgaW5pdGlhbCBzdGF0ZSB0cmVlLlxuXG5cbiAgZGlzcGF0Y2goe1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLklOSVRcbiAgfSk7XG4gIHJldHVybiBfcmVmMiA9IHtcbiAgICBkaXNwYXRjaDogZGlzcGF0Y2gsXG4gICAgc3Vic2NyaWJlOiBzdWJzY3JpYmUsXG4gICAgZ2V0U3RhdGU6IGdldFN0YXRlLFxuICAgIHJlcGxhY2VSZWR1Y2VyOiByZXBsYWNlUmVkdWNlclxuICB9LCBfcmVmMlskJG9ic2VydmFibGVdID0gb2JzZXJ2YWJsZSwgX3JlZjI7XG59XG4vKipcbiAqIENyZWF0ZXMgYSBSZWR1eCBzdG9yZSB0aGF0IGhvbGRzIHRoZSBzdGF0ZSB0cmVlLlxuICpcbiAqICoqV2UgcmVjb21tZW5kIHVzaW5nIGBjb25maWd1cmVTdG9yZWAgZnJvbSB0aGVcbiAqIGBAcmVkdXhqcy90b29sa2l0YCBwYWNrYWdlKiosIHdoaWNoIHJlcGxhY2VzIGBjcmVhdGVTdG9yZWA6XG4gKiAqKmh0dHBzOi8vcmVkdXguanMub3JnL2ludHJvZHVjdGlvbi93aHktcnRrLWlzLXJlZHV4LXRvZGF5KipcbiAqXG4gKiBUaGUgb25seSB3YXkgdG8gY2hhbmdlIHRoZSBkYXRhIGluIHRoZSBzdG9yZSBpcyB0byBjYWxsIGBkaXNwYXRjaCgpYCBvbiBpdC5cbiAqXG4gKiBUaGVyZSBzaG91bGQgb25seSBiZSBhIHNpbmdsZSBzdG9yZSBpbiB5b3VyIGFwcC4gVG8gc3BlY2lmeSBob3cgZGlmZmVyZW50XG4gKiBwYXJ0cyBvZiB0aGUgc3RhdGUgdHJlZSByZXNwb25kIHRvIGFjdGlvbnMsIHlvdSBtYXkgY29tYmluZSBzZXZlcmFsIHJlZHVjZXJzXG4gKiBpbnRvIGEgc2luZ2xlIHJlZHVjZXIgZnVuY3Rpb24gYnkgdXNpbmcgYGNvbWJpbmVSZWR1Y2Vyc2AuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVkdWNlciBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgbmV4dCBzdGF0ZSB0cmVlLCBnaXZlblxuICogdGhlIGN1cnJlbnQgc3RhdGUgdHJlZSBhbmQgdGhlIGFjdGlvbiB0byBoYW5kbGUuXG4gKlxuICogQHBhcmFtIHthbnl9IFtwcmVsb2FkZWRTdGF0ZV0gVGhlIGluaXRpYWwgc3RhdGUuIFlvdSBtYXkgb3B0aW9uYWxseSBzcGVjaWZ5IGl0XG4gKiB0byBoeWRyYXRlIHRoZSBzdGF0ZSBmcm9tIHRoZSBzZXJ2ZXIgaW4gdW5pdmVyc2FsIGFwcHMsIG9yIHRvIHJlc3RvcmUgYVxuICogcHJldmlvdXNseSBzZXJpYWxpemVkIHVzZXIgc2Vzc2lvbi5cbiAqIElmIHlvdSB1c2UgYGNvbWJpbmVSZWR1Y2Vyc2AgdG8gcHJvZHVjZSB0aGUgcm9vdCByZWR1Y2VyIGZ1bmN0aW9uLCB0aGlzIG11c3QgYmVcbiAqIGFuIG9iamVjdCB3aXRoIHRoZSBzYW1lIHNoYXBlIGFzIGBjb21iaW5lUmVkdWNlcnNgIGtleXMuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2VuaGFuY2VyXSBUaGUgc3RvcmUgZW5oYW5jZXIuIFlvdSBtYXkgb3B0aW9uYWxseSBzcGVjaWZ5IGl0XG4gKiB0byBlbmhhbmNlIHRoZSBzdG9yZSB3aXRoIHRoaXJkLXBhcnR5IGNhcGFiaWxpdGllcyBzdWNoIGFzIG1pZGRsZXdhcmUsXG4gKiB0aW1lIHRyYXZlbCwgcGVyc2lzdGVuY2UsIGV0Yy4gVGhlIG9ubHkgc3RvcmUgZW5oYW5jZXIgdGhhdCBzaGlwcyB3aXRoIFJlZHV4XG4gKiBpcyBgYXBwbHlNaWRkbGV3YXJlKClgLlxuICpcbiAqIEByZXR1cm5zIHtTdG9yZX0gQSBSZWR1eCBzdG9yZSB0aGF0IGxldHMgeW91IHJlYWQgdGhlIHN0YXRlLCBkaXNwYXRjaCBhY3Rpb25zXG4gKiBhbmQgc3Vic2NyaWJlIHRvIGNoYW5nZXMuXG4gKi9cblxudmFyIGxlZ2FjeV9jcmVhdGVTdG9yZSA9IGNyZWF0ZVN0b3JlO1xuXG4vKipcbiAqIFByaW50cyBhIHdhcm5pbmcgaW4gdGhlIGNvbnNvbGUgaWYgaXQgZXhpc3RzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIFRoZSB3YXJuaW5nIG1lc3NhZ2UuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gd2FybmluZyhtZXNzYWdlKSB7XG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cbiAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgY29uc29sZS5lcnJvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG4gIH1cbiAgLyogZXNsaW50LWVuYWJsZSBuby1jb25zb2xlICovXG5cblxuICB0cnkge1xuICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgaWYgeW91IGVuYWJsZVxuICAgIC8vIFwiYnJlYWsgb24gYWxsIGV4Y2VwdGlvbnNcIiBpbiB5b3VyIGNvbnNvbGUsXG4gICAgLy8gaXQgd291bGQgcGF1c2UgdGhlIGV4ZWN1dGlvbiBhdCB0aGlzIGxpbmUuXG4gICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICB9IGNhdGNoIChlKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG5cbn1cblxuZnVuY3Rpb24gZ2V0VW5leHBlY3RlZFN0YXRlU2hhcGVXYXJuaW5nTWVzc2FnZShpbnB1dFN0YXRlLCByZWR1Y2VycywgYWN0aW9uLCB1bmV4cGVjdGVkS2V5Q2FjaGUpIHtcbiAgdmFyIHJlZHVjZXJLZXlzID0gT2JqZWN0LmtleXMocmVkdWNlcnMpO1xuICB2YXIgYXJndW1lbnROYW1lID0gYWN0aW9uICYmIGFjdGlvbi50eXBlID09PSBBY3Rpb25UeXBlcy5JTklUID8gJ3ByZWxvYWRlZFN0YXRlIGFyZ3VtZW50IHBhc3NlZCB0byBjcmVhdGVTdG9yZScgOiAncHJldmlvdXMgc3RhdGUgcmVjZWl2ZWQgYnkgdGhlIHJlZHVjZXInO1xuXG4gIGlmIChyZWR1Y2VyS2V5cy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJ1N0b3JlIGRvZXMgbm90IGhhdmUgYSB2YWxpZCByZWR1Y2VyLiBNYWtlIHN1cmUgdGhlIGFyZ3VtZW50IHBhc3NlZCAnICsgJ3RvIGNvbWJpbmVSZWR1Y2VycyBpcyBhbiBvYmplY3Qgd2hvc2UgdmFsdWVzIGFyZSByZWR1Y2Vycy4nO1xuICB9XG5cbiAgaWYgKCFpc1BsYWluT2JqZWN0KGlucHV0U3RhdGUpKSB7XG4gICAgcmV0dXJuIFwiVGhlIFwiICsgYXJndW1lbnROYW1lICsgXCIgaGFzIHVuZXhwZWN0ZWQgdHlwZSBvZiBcXFwiXCIgKyBraW5kT2YoaW5wdXRTdGF0ZSkgKyBcIlxcXCIuIEV4cGVjdGVkIGFyZ3VtZW50IHRvIGJlIGFuIG9iamVjdCB3aXRoIHRoZSBmb2xsb3dpbmcgXCIgKyAoXCJrZXlzOiBcXFwiXCIgKyByZWR1Y2VyS2V5cy5qb2luKCdcIiwgXCInKSArIFwiXFxcIlwiKTtcbiAgfVxuXG4gIHZhciB1bmV4cGVjdGVkS2V5cyA9IE9iamVjdC5rZXlzKGlucHV0U3RhdGUpLmZpbHRlcihmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuICFyZWR1Y2Vycy5oYXNPd25Qcm9wZXJ0eShrZXkpICYmICF1bmV4cGVjdGVkS2V5Q2FjaGVba2V5XTtcbiAgfSk7XG4gIHVuZXhwZWN0ZWRLZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIHVuZXhwZWN0ZWRLZXlDYWNoZVtrZXldID0gdHJ1ZTtcbiAgfSk7XG4gIGlmIChhY3Rpb24gJiYgYWN0aW9uLnR5cGUgPT09IEFjdGlvblR5cGVzLlJFUExBQ0UpIHJldHVybjtcblxuICBpZiAodW5leHBlY3RlZEtleXMubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBcIlVuZXhwZWN0ZWQgXCIgKyAodW5leHBlY3RlZEtleXMubGVuZ3RoID4gMSA/ICdrZXlzJyA6ICdrZXknKSArIFwiIFwiICsgKFwiXFxcIlwiICsgdW5leHBlY3RlZEtleXMuam9pbignXCIsIFwiJykgKyBcIlxcXCIgZm91bmQgaW4gXCIgKyBhcmd1bWVudE5hbWUgKyBcIi4gXCIpICsgXCJFeHBlY3RlZCB0byBmaW5kIG9uZSBvZiB0aGUga25vd24gcmVkdWNlciBrZXlzIGluc3RlYWQ6IFwiICsgKFwiXFxcIlwiICsgcmVkdWNlcktleXMuam9pbignXCIsIFwiJykgKyBcIlxcXCIuIFVuZXhwZWN0ZWQga2V5cyB3aWxsIGJlIGlnbm9yZWQuXCIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydFJlZHVjZXJTaGFwZShyZWR1Y2Vycykge1xuICBPYmplY3Qua2V5cyhyZWR1Y2VycykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIHJlZHVjZXIgPSByZWR1Y2Vyc1trZXldO1xuICAgIHZhciBpbml0aWFsU3RhdGUgPSByZWR1Y2VyKHVuZGVmaW5lZCwge1xuICAgICAgdHlwZTogQWN0aW9uVHlwZXMuSU5JVFxuICAgIH0pO1xuXG4gICAgaWYgKHR5cGVvZiBpbml0aWFsU3RhdGUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgxMikgOiBcIlRoZSBzbGljZSByZWR1Y2VyIGZvciBrZXkgXFxcIlwiICsga2V5ICsgXCJcXFwiIHJldHVybmVkIHVuZGVmaW5lZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uIFwiICsgXCJJZiB0aGUgc3RhdGUgcGFzc2VkIHRvIHRoZSByZWR1Y2VyIGlzIHVuZGVmaW5lZCwgeW91IG11c3QgXCIgKyBcImV4cGxpY2l0bHkgcmV0dXJuIHRoZSBpbml0aWFsIHN0YXRlLiBUaGUgaW5pdGlhbCBzdGF0ZSBtYXkgXCIgKyBcIm5vdCBiZSB1bmRlZmluZWQuIElmIHlvdSBkb24ndCB3YW50IHRvIHNldCBhIHZhbHVlIGZvciB0aGlzIHJlZHVjZXIsIFwiICsgXCJ5b3UgY2FuIHVzZSBudWxsIGluc3RlYWQgb2YgdW5kZWZpbmVkLlwiKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHJlZHVjZXIodW5kZWZpbmVkLCB7XG4gICAgICB0eXBlOiBBY3Rpb25UeXBlcy5QUk9CRV9VTktOT1dOX0FDVElPTigpXG4gICAgfSkgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgxMykgOiBcIlRoZSBzbGljZSByZWR1Y2VyIGZvciBrZXkgXFxcIlwiICsga2V5ICsgXCJcXFwiIHJldHVybmVkIHVuZGVmaW5lZCB3aGVuIHByb2JlZCB3aXRoIGEgcmFuZG9tIHR5cGUuIFwiICsgKFwiRG9uJ3QgdHJ5IHRvIGhhbmRsZSAnXCIgKyBBY3Rpb25UeXBlcy5JTklUICsgXCInIG9yIG90aGVyIGFjdGlvbnMgaW4gXFxcInJlZHV4LypcXFwiIFwiKSArIFwibmFtZXNwYWNlLiBUaGV5IGFyZSBjb25zaWRlcmVkIHByaXZhdGUuIEluc3RlYWQsIHlvdSBtdXN0IHJldHVybiB0aGUgXCIgKyBcImN1cnJlbnQgc3RhdGUgZm9yIGFueSB1bmtub3duIGFjdGlvbnMsIHVubGVzcyBpdCBpcyB1bmRlZmluZWQsIFwiICsgXCJpbiB3aGljaCBjYXNlIHlvdSBtdXN0IHJldHVybiB0aGUgaW5pdGlhbCBzdGF0ZSwgcmVnYXJkbGVzcyBvZiB0aGUgXCIgKyBcImFjdGlvbiB0eXBlLiBUaGUgaW5pdGlhbCBzdGF0ZSBtYXkgbm90IGJlIHVuZGVmaW5lZCwgYnV0IGNhbiBiZSBudWxsLlwiKTtcbiAgICB9XG4gIH0pO1xufVxuLyoqXG4gKiBUdXJucyBhbiBvYmplY3Qgd2hvc2UgdmFsdWVzIGFyZSBkaWZmZXJlbnQgcmVkdWNlciBmdW5jdGlvbnMsIGludG8gYSBzaW5nbGVcbiAqIHJlZHVjZXIgZnVuY3Rpb24uIEl0IHdpbGwgY2FsbCBldmVyeSBjaGlsZCByZWR1Y2VyLCBhbmQgZ2F0aGVyIHRoZWlyIHJlc3VsdHNcbiAqIGludG8gYSBzaW5nbGUgc3RhdGUgb2JqZWN0LCB3aG9zZSBrZXlzIGNvcnJlc3BvbmQgdG8gdGhlIGtleXMgb2YgdGhlIHBhc3NlZFxuICogcmVkdWNlciBmdW5jdGlvbnMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHJlZHVjZXJzIEFuIG9iamVjdCB3aG9zZSB2YWx1ZXMgY29ycmVzcG9uZCB0byBkaWZmZXJlbnRcbiAqIHJlZHVjZXIgZnVuY3Rpb25zIHRoYXQgbmVlZCB0byBiZSBjb21iaW5lZCBpbnRvIG9uZS4gT25lIGhhbmR5IHdheSB0byBvYnRhaW5cbiAqIGl0IGlzIHRvIHVzZSBFUzYgYGltcG9ydCAqIGFzIHJlZHVjZXJzYCBzeW50YXguIFRoZSByZWR1Y2VycyBtYXkgbmV2ZXIgcmV0dXJuXG4gKiB1bmRlZmluZWQgZm9yIGFueSBhY3Rpb24uIEluc3RlYWQsIHRoZXkgc2hvdWxkIHJldHVybiB0aGVpciBpbml0aWFsIHN0YXRlXG4gKiBpZiB0aGUgc3RhdGUgcGFzc2VkIHRvIHRoZW0gd2FzIHVuZGVmaW5lZCwgYW5kIHRoZSBjdXJyZW50IHN0YXRlIGZvciBhbnlcbiAqIHVucmVjb2duaXplZCBhY3Rpb24uXG4gKlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBBIHJlZHVjZXIgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGV2ZXJ5IHJlZHVjZXIgaW5zaWRlIHRoZVxuICogcGFzc2VkIG9iamVjdCwgYW5kIGJ1aWxkcyBhIHN0YXRlIG9iamVjdCB3aXRoIHRoZSBzYW1lIHNoYXBlLlxuICovXG5cblxuZnVuY3Rpb24gY29tYmluZVJlZHVjZXJzKHJlZHVjZXJzKSB7XG4gIHZhciByZWR1Y2VyS2V5cyA9IE9iamVjdC5rZXlzKHJlZHVjZXJzKTtcbiAgdmFyIGZpbmFsUmVkdWNlcnMgPSB7fTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHJlZHVjZXJLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGtleSA9IHJlZHVjZXJLZXlzW2ldO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmICh0eXBlb2YgcmVkdWNlcnNba2V5XSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgd2FybmluZyhcIk5vIHJlZHVjZXIgcHJvdmlkZWQgZm9yIGtleSBcXFwiXCIgKyBrZXkgKyBcIlxcXCJcIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiByZWR1Y2Vyc1trZXldID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBmaW5hbFJlZHVjZXJzW2tleV0gPSByZWR1Y2Vyc1trZXldO1xuICAgIH1cbiAgfVxuXG4gIHZhciBmaW5hbFJlZHVjZXJLZXlzID0gT2JqZWN0LmtleXMoZmluYWxSZWR1Y2Vycyk7IC8vIFRoaXMgaXMgdXNlZCB0byBtYWtlIHN1cmUgd2UgZG9uJ3Qgd2FybiBhYm91dCB0aGUgc2FtZVxuICAvLyBrZXlzIG11bHRpcGxlIHRpbWVzLlxuXG4gIHZhciB1bmV4cGVjdGVkS2V5Q2FjaGU7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICB1bmV4cGVjdGVkS2V5Q2FjaGUgPSB7fTtcbiAgfVxuXG4gIHZhciBzaGFwZUFzc2VydGlvbkVycm9yO1xuXG4gIHRyeSB7XG4gICAgYXNzZXJ0UmVkdWNlclNoYXBlKGZpbmFsUmVkdWNlcnMpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgc2hhcGVBc3NlcnRpb25FcnJvciA9IGU7XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gY29tYmluYXRpb24oc3RhdGUsIGFjdGlvbikge1xuICAgIGlmIChzdGF0ZSA9PT0gdm9pZCAwKSB7XG4gICAgICBzdGF0ZSA9IHt9O1xuICAgIH1cblxuICAgIGlmIChzaGFwZUFzc2VydGlvbkVycm9yKSB7XG4gICAgICB0aHJvdyBzaGFwZUFzc2VydGlvbkVycm9yO1xuICAgIH1cblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB2YXIgd2FybmluZ01lc3NhZ2UgPSBnZXRVbmV4cGVjdGVkU3RhdGVTaGFwZVdhcm5pbmdNZXNzYWdlKHN0YXRlLCBmaW5hbFJlZHVjZXJzLCBhY3Rpb24sIHVuZXhwZWN0ZWRLZXlDYWNoZSk7XG5cbiAgICAgIGlmICh3YXJuaW5nTWVzc2FnZSkge1xuICAgICAgICB3YXJuaW5nKHdhcm5pbmdNZXNzYWdlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgaGFzQ2hhbmdlZCA9IGZhbHNlO1xuICAgIHZhciBuZXh0U3RhdGUgPSB7fTtcblxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBmaW5hbFJlZHVjZXJLZXlzLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIF9rZXkgPSBmaW5hbFJlZHVjZXJLZXlzW19pXTtcbiAgICAgIHZhciByZWR1Y2VyID0gZmluYWxSZWR1Y2Vyc1tfa2V5XTtcbiAgICAgIHZhciBwcmV2aW91c1N0YXRlRm9yS2V5ID0gc3RhdGVbX2tleV07XG4gICAgICB2YXIgbmV4dFN0YXRlRm9yS2V5ID0gcmVkdWNlcihwcmV2aW91c1N0YXRlRm9yS2V5LCBhY3Rpb24pO1xuXG4gICAgICBpZiAodHlwZW9mIG5leHRTdGF0ZUZvcktleSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdmFyIGFjdGlvblR5cGUgPSBhY3Rpb24gJiYgYWN0aW9uLnR5cGU7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDE0KSA6IFwiV2hlbiBjYWxsZWQgd2l0aCBhbiBhY3Rpb24gb2YgdHlwZSBcIiArIChhY3Rpb25UeXBlID8gXCJcXFwiXCIgKyBTdHJpbmcoYWN0aW9uVHlwZSkgKyBcIlxcXCJcIiA6ICcodW5rbm93biB0eXBlKScpICsgXCIsIHRoZSBzbGljZSByZWR1Y2VyIGZvciBrZXkgXFxcIlwiICsgX2tleSArIFwiXFxcIiByZXR1cm5lZCB1bmRlZmluZWQuIFwiICsgXCJUbyBpZ25vcmUgYW4gYWN0aW9uLCB5b3UgbXVzdCBleHBsaWNpdGx5IHJldHVybiB0aGUgcHJldmlvdXMgc3RhdGUuIFwiICsgXCJJZiB5b3Ugd2FudCB0aGlzIHJlZHVjZXIgdG8gaG9sZCBubyB2YWx1ZSwgeW91IGNhbiByZXR1cm4gbnVsbCBpbnN0ZWFkIG9mIHVuZGVmaW5lZC5cIik7XG4gICAgICB9XG5cbiAgICAgIG5leHRTdGF0ZVtfa2V5XSA9IG5leHRTdGF0ZUZvcktleTtcbiAgICAgIGhhc0NoYW5nZWQgPSBoYXNDaGFuZ2VkIHx8IG5leHRTdGF0ZUZvcktleSAhPT0gcHJldmlvdXNTdGF0ZUZvcktleTtcbiAgICB9XG5cbiAgICBoYXNDaGFuZ2VkID0gaGFzQ2hhbmdlZCB8fCBmaW5hbFJlZHVjZXJLZXlzLmxlbmd0aCAhPT0gT2JqZWN0LmtleXMoc3RhdGUpLmxlbmd0aDtcbiAgICByZXR1cm4gaGFzQ2hhbmdlZCA/IG5leHRTdGF0ZSA6IHN0YXRlO1xuICB9O1xufVxuXG5mdW5jdGlvbiBiaW5kQWN0aW9uQ3JlYXRvcihhY3Rpb25DcmVhdG9yLCBkaXNwYXRjaCkge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBkaXNwYXRjaChhY3Rpb25DcmVhdG9yLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xuICB9O1xufVxuLyoqXG4gKiBUdXJucyBhbiBvYmplY3Qgd2hvc2UgdmFsdWVzIGFyZSBhY3Rpb24gY3JlYXRvcnMsIGludG8gYW4gb2JqZWN0IHdpdGggdGhlXG4gKiBzYW1lIGtleXMsIGJ1dCB3aXRoIGV2ZXJ5IGZ1bmN0aW9uIHdyYXBwZWQgaW50byBhIGBkaXNwYXRjaGAgY2FsbCBzbyB0aGV5XG4gKiBtYXkgYmUgaW52b2tlZCBkaXJlY3RseS4gVGhpcyBpcyBqdXN0IGEgY29udmVuaWVuY2UgbWV0aG9kLCBhcyB5b3UgY2FuIGNhbGxcbiAqIGBzdG9yZS5kaXNwYXRjaChNeUFjdGlvbkNyZWF0b3JzLmRvU29tZXRoaW5nKCkpYCB5b3Vyc2VsZiBqdXN0IGZpbmUuXG4gKlxuICogRm9yIGNvbnZlbmllbmNlLCB5b3UgY2FuIGFsc28gcGFzcyBhbiBhY3Rpb24gY3JlYXRvciBhcyB0aGUgZmlyc3QgYXJndW1lbnQsXG4gKiBhbmQgZ2V0IGEgZGlzcGF0Y2ggd3JhcHBlZCBmdW5jdGlvbiBpbiByZXR1cm4uXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbnxPYmplY3R9IGFjdGlvbkNyZWF0b3JzIEFuIG9iamVjdCB3aG9zZSB2YWx1ZXMgYXJlIGFjdGlvblxuICogY3JlYXRvciBmdW5jdGlvbnMuIE9uZSBoYW5keSB3YXkgdG8gb2J0YWluIGl0IGlzIHRvIHVzZSBFUzYgYGltcG9ydCAqIGFzYFxuICogc3ludGF4LiBZb3UgbWF5IGFsc28gcGFzcyBhIHNpbmdsZSBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBkaXNwYXRjaCBUaGUgYGRpc3BhdGNoYCBmdW5jdGlvbiBhdmFpbGFibGUgb24geW91ciBSZWR1eFxuICogc3RvcmUuXG4gKlxuICogQHJldHVybnMge0Z1bmN0aW9ufE9iamVjdH0gVGhlIG9iamVjdCBtaW1pY2tpbmcgdGhlIG9yaWdpbmFsIG9iamVjdCwgYnV0IHdpdGhcbiAqIGV2ZXJ5IGFjdGlvbiBjcmVhdG9yIHdyYXBwZWQgaW50byB0aGUgYGRpc3BhdGNoYCBjYWxsLiBJZiB5b3UgcGFzc2VkIGFcbiAqIGZ1bmN0aW9uIGFzIGBhY3Rpb25DcmVhdG9yc2AsIHRoZSByZXR1cm4gdmFsdWUgd2lsbCBhbHNvIGJlIGEgc2luZ2xlXG4gKiBmdW5jdGlvbi5cbiAqL1xuXG5cbmZ1bmN0aW9uIGJpbmRBY3Rpb25DcmVhdG9ycyhhY3Rpb25DcmVhdG9ycywgZGlzcGF0Y2gpIHtcbiAgaWYgKHR5cGVvZiBhY3Rpb25DcmVhdG9ycyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBiaW5kQWN0aW9uQ3JlYXRvcihhY3Rpb25DcmVhdG9ycywgZGlzcGF0Y2gpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBhY3Rpb25DcmVhdG9ycyAhPT0gJ29iamVjdCcgfHwgYWN0aW9uQ3JlYXRvcnMgPT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgxNikgOiBcImJpbmRBY3Rpb25DcmVhdG9ycyBleHBlY3RlZCBhbiBvYmplY3Qgb3IgYSBmdW5jdGlvbiwgYnV0IGluc3RlYWQgcmVjZWl2ZWQ6ICdcIiArIGtpbmRPZihhY3Rpb25DcmVhdG9ycykgKyBcIicuIFwiICsgXCJEaWQgeW91IHdyaXRlIFxcXCJpbXBvcnQgQWN0aW9uQ3JlYXRvcnMgZnJvbVxcXCIgaW5zdGVhZCBvZiBcXFwiaW1wb3J0ICogYXMgQWN0aW9uQ3JlYXRvcnMgZnJvbVxcXCI/XCIpO1xuICB9XG5cbiAgdmFyIGJvdW5kQWN0aW9uQ3JlYXRvcnMgPSB7fTtcblxuICBmb3IgKHZhciBrZXkgaW4gYWN0aW9uQ3JlYXRvcnMpIHtcbiAgICB2YXIgYWN0aW9uQ3JlYXRvciA9IGFjdGlvbkNyZWF0b3JzW2tleV07XG5cbiAgICBpZiAodHlwZW9mIGFjdGlvbkNyZWF0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGJvdW5kQWN0aW9uQ3JlYXRvcnNba2V5XSA9IGJpbmRBY3Rpb25DcmVhdG9yKGFjdGlvbkNyZWF0b3IsIGRpc3BhdGNoKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYm91bmRBY3Rpb25DcmVhdG9ycztcbn1cblxuLyoqXG4gKiBDb21wb3NlcyBzaW5nbGUtYXJndW1lbnQgZnVuY3Rpb25zIGZyb20gcmlnaHQgdG8gbGVmdC4gVGhlIHJpZ2h0bW9zdFxuICogZnVuY3Rpb24gY2FuIHRha2UgbXVsdGlwbGUgYXJndW1lbnRzIGFzIGl0IHByb3ZpZGVzIHRoZSBzaWduYXR1cmUgZm9yXG4gKiB0aGUgcmVzdWx0aW5nIGNvbXBvc2l0ZSBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0gey4uLkZ1bmN0aW9ufSBmdW5jcyBUaGUgZnVuY3Rpb25zIHRvIGNvbXBvc2UuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgZnVuY3Rpb24gb2J0YWluZWQgYnkgY29tcG9zaW5nIHRoZSBhcmd1bWVudCBmdW5jdGlvbnNcbiAqIGZyb20gcmlnaHQgdG8gbGVmdC4gRm9yIGV4YW1wbGUsIGNvbXBvc2UoZiwgZywgaCkgaXMgaWRlbnRpY2FsIHRvIGRvaW5nXG4gKiAoLi4uYXJncykgPT4gZihnKGgoLi4uYXJncykpKS5cbiAqL1xuZnVuY3Rpb24gY29tcG9zZSgpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGZ1bmNzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIGZ1bmNzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgaWYgKGZ1bmNzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoYXJnKSB7XG4gICAgICByZXR1cm4gYXJnO1xuICAgIH07XG4gIH1cblxuICBpZiAoZnVuY3MubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIGZ1bmNzWzBdO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmNzLnJlZHVjZShmdW5jdGlvbiAoYSwgYikge1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gYShiLmFwcGx5KHZvaWQgMCwgYXJndW1lbnRzKSk7XG4gICAgfTtcbiAgfSk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHN0b3JlIGVuaGFuY2VyIHRoYXQgYXBwbGllcyBtaWRkbGV3YXJlIHRvIHRoZSBkaXNwYXRjaCBtZXRob2RcbiAqIG9mIHRoZSBSZWR1eCBzdG9yZS4gVGhpcyBpcyBoYW5keSBmb3IgYSB2YXJpZXR5IG9mIHRhc2tzLCBzdWNoIGFzIGV4cHJlc3NpbmdcbiAqIGFzeW5jaHJvbm91cyBhY3Rpb25zIGluIGEgY29uY2lzZSBtYW5uZXIsIG9yIGxvZ2dpbmcgZXZlcnkgYWN0aW9uIHBheWxvYWQuXG4gKlxuICogU2VlIGByZWR1eC10aHVua2AgcGFja2FnZSBhcyBhbiBleGFtcGxlIG9mIHRoZSBSZWR1eCBtaWRkbGV3YXJlLlxuICpcbiAqIEJlY2F1c2UgbWlkZGxld2FyZSBpcyBwb3RlbnRpYWxseSBhc3luY2hyb25vdXMsIHRoaXMgc2hvdWxkIGJlIHRoZSBmaXJzdFxuICogc3RvcmUgZW5oYW5jZXIgaW4gdGhlIGNvbXBvc2l0aW9uIGNoYWluLlxuICpcbiAqIE5vdGUgdGhhdCBlYWNoIG1pZGRsZXdhcmUgd2lsbCBiZSBnaXZlbiB0aGUgYGRpc3BhdGNoYCBhbmQgYGdldFN0YXRlYCBmdW5jdGlvbnNcbiAqIGFzIG5hbWVkIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gey4uLkZ1bmN0aW9ufSBtaWRkbGV3YXJlcyBUaGUgbWlkZGxld2FyZSBjaGFpbiB0byBiZSBhcHBsaWVkLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBBIHN0b3JlIGVuaGFuY2VyIGFwcGx5aW5nIHRoZSBtaWRkbGV3YXJlLlxuICovXG5cbmZ1bmN0aW9uIGFwcGx5TWlkZGxld2FyZSgpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIG1pZGRsZXdhcmVzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIG1pZGRsZXdhcmVzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChjcmVhdGVTdG9yZSkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgc3RvcmUgPSBjcmVhdGVTdG9yZS5hcHBseSh2b2lkIDAsIGFyZ3VtZW50cyk7XG5cbiAgICAgIHZhciBfZGlzcGF0Y2ggPSBmdW5jdGlvbiBkaXNwYXRjaCgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMTUpIDogJ0Rpc3BhdGNoaW5nIHdoaWxlIGNvbnN0cnVjdGluZyB5b3VyIG1pZGRsZXdhcmUgaXMgbm90IGFsbG93ZWQuICcgKyAnT3RoZXIgbWlkZGxld2FyZSB3b3VsZCBub3QgYmUgYXBwbGllZCB0byB0aGlzIGRpc3BhdGNoLicpO1xuICAgICAgfTtcblxuICAgICAgdmFyIG1pZGRsZXdhcmVBUEkgPSB7XG4gICAgICAgIGdldFN0YXRlOiBzdG9yZS5nZXRTdGF0ZSxcbiAgICAgICAgZGlzcGF0Y2g6IGZ1bmN0aW9uIGRpc3BhdGNoKCkge1xuICAgICAgICAgIHJldHVybiBfZGlzcGF0Y2guYXBwbHkodm9pZCAwLCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgdmFyIGNoYWluID0gbWlkZGxld2FyZXMubWFwKGZ1bmN0aW9uIChtaWRkbGV3YXJlKSB7XG4gICAgICAgIHJldHVybiBtaWRkbGV3YXJlKG1pZGRsZXdhcmVBUEkpO1xuICAgICAgfSk7XG4gICAgICBfZGlzcGF0Y2ggPSBjb21wb3NlLmFwcGx5KHZvaWQgMCwgY2hhaW4pKHN0b3JlLmRpc3BhdGNoKTtcbiAgICAgIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHN0b3JlKSwge30sIHtcbiAgICAgICAgZGlzcGF0Y2g6IF9kaXNwYXRjaFxuICAgICAgfSk7XG4gICAgfTtcbiAgfTtcbn1cblxuZXhwb3J0IHsgQWN0aW9uVHlwZXMgYXMgX19ET19OT1RfVVNFX19BY3Rpb25UeXBlcywgYXBwbHlNaWRkbGV3YXJlLCBiaW5kQWN0aW9uQ3JlYXRvcnMsIGNvbWJpbmVSZWR1Y2VycywgY29tcG9zZSwgY3JlYXRlU3RvcmUsIGxlZ2FjeV9jcmVhdGVTdG9yZSB9O1xuIiwgIi8qKiBBIGZ1bmN0aW9uIHRoYXQgYWNjZXB0cyBhIHBvdGVudGlhbCBcImV4dHJhIGFyZ3VtZW50XCIgdmFsdWUgdG8gYmUgaW5qZWN0ZWQgbGF0ZXIsXHJcbiAqIGFuZCByZXR1cm5zIGFuIGluc3RhbmNlIG9mIHRoZSB0aHVuayBtaWRkbGV3YXJlIHRoYXQgdXNlcyB0aGF0IHZhbHVlXHJcbiAqL1xuZnVuY3Rpb24gY3JlYXRlVGh1bmtNaWRkbGV3YXJlKGV4dHJhQXJndW1lbnQpIHtcbiAgLy8gU3RhbmRhcmQgUmVkdXggbWlkZGxld2FyZSBkZWZpbml0aW9uIHBhdHRlcm46XG4gIC8vIFNlZTogaHR0cHM6Ly9yZWR1eC5qcy5vcmcvdHV0b3JpYWxzL2Z1bmRhbWVudGFscy9wYXJ0LTQtc3RvcmUjd3JpdGluZy1jdXN0b20tbWlkZGxld2FyZVxuICB2YXIgbWlkZGxld2FyZSA9IGZ1bmN0aW9uIG1pZGRsZXdhcmUoX3JlZikge1xuICAgIHZhciBkaXNwYXRjaCA9IF9yZWYuZGlzcGF0Y2gsXG4gICAgICAgIGdldFN0YXRlID0gX3JlZi5nZXRTdGF0ZTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKG5leHQpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoYWN0aW9uKSB7XG4gICAgICAgIC8vIFRoZSB0aHVuayBtaWRkbGV3YXJlIGxvb2tzIGZvciBhbnkgZnVuY3Rpb25zIHRoYXQgd2VyZSBwYXNzZWQgdG8gYHN0b3JlLmRpc3BhdGNoYC5cbiAgICAgICAgLy8gSWYgdGhpcyBcImFjdGlvblwiIGlzIHJlYWxseSBhIGZ1bmN0aW9uLCBjYWxsIGl0IGFuZCByZXR1cm4gdGhlIHJlc3VsdC5cbiAgICAgICAgaWYgKHR5cGVvZiBhY3Rpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAvLyBJbmplY3QgdGhlIHN0b3JlJ3MgYGRpc3BhdGNoYCBhbmQgYGdldFN0YXRlYCBtZXRob2RzLCBhcyB3ZWxsIGFzIGFueSBcImV4dHJhIGFyZ1wiXG4gICAgICAgICAgcmV0dXJuIGFjdGlvbihkaXNwYXRjaCwgZ2V0U3RhdGUsIGV4dHJhQXJndW1lbnQpO1xuICAgICAgICB9IC8vIE90aGVyd2lzZSwgcGFzcyB0aGUgYWN0aW9uIGRvd24gdGhlIG1pZGRsZXdhcmUgY2hhaW4gYXMgdXN1YWxcblxuXG4gICAgICAgIHJldHVybiBuZXh0KGFjdGlvbik7XG4gICAgICB9O1xuICAgIH07XG4gIH07XG5cbiAgcmV0dXJuIG1pZGRsZXdhcmU7XG59XG5cbnZhciB0aHVuayA9IGNyZWF0ZVRodW5rTWlkZGxld2FyZSgpOyAvLyBBdHRhY2ggdGhlIGZhY3RvcnkgZnVuY3Rpb24gc28gdXNlcnMgY2FuIGNyZWF0ZSBhIGN1c3RvbWl6ZWQgdmVyc2lvblxuLy8gd2l0aCB3aGF0ZXZlciBcImV4dHJhIGFyZ1wiIHRoZXkgd2FudCB0byBpbmplY3QgaW50byB0aGVpciB0aHVua3NcblxudGh1bmsud2l0aEV4dHJhQXJndW1lbnQgPSBjcmVhdGVUaHVua01pZGRsZXdhcmU7XG5leHBvcnQgZGVmYXVsdCB0aHVuazsiLCAiaW1wb3J0IHsgZW5hYmxlRVM1IH0gZnJvbSAnaW1tZXInXHJcbmV4cG9ydCAqIGZyb20gJ3JlZHV4J1xyXG5leHBvcnQge1xyXG4gIGRlZmF1bHQgYXMgY3JlYXRlTmV4dFN0YXRlLFxyXG4gIGN1cnJlbnQsXHJcbiAgZnJlZXplLFxyXG4gIG9yaWdpbmFsLFxyXG4gIGlzRHJhZnQsXHJcbn0gZnJvbSAnaW1tZXInXHJcbmV4cG9ydCB0eXBlIHsgRHJhZnQgfSBmcm9tICdpbW1lcidcclxuZXhwb3J0IHsgY3JlYXRlU2VsZWN0b3IgfSBmcm9tICdyZXNlbGVjdCdcclxuZXhwb3J0IHR5cGUge1xyXG4gIFNlbGVjdG9yLFxyXG4gIE91dHB1dFBhcmFtZXRyaWNTZWxlY3RvcixcclxuICBPdXRwdXRTZWxlY3RvcixcclxuICBQYXJhbWV0cmljU2VsZWN0b3IsXHJcbn0gZnJvbSAncmVzZWxlY3QnXHJcbmV4cG9ydCB7IGNyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yIH0gZnJvbSAnLi9jcmVhdGVEcmFmdFNhZmVTZWxlY3RvcidcclxuZXhwb3J0IHR5cGUgeyBUaHVua0FjdGlvbiwgVGh1bmtEaXNwYXRjaCwgVGh1bmtNaWRkbGV3YXJlIH0gZnJvbSAncmVkdXgtdGh1bmsnXHJcblxyXG4vLyBXZSBkZWxpYmVyYXRlbHkgZW5hYmxlIEltbWVyJ3MgRVM1IHN1cHBvcnQsIG9uIHRoZSBncm91bmRzIHRoYXRcclxuLy8gd2UgYXNzdW1lIFJUSyB3aWxsIGJlIHVzZWQgd2l0aCBSZWFjdCBOYXRpdmUgYW5kIG90aGVyIFByb3h5LWxlc3NcclxuLy8gZW52aXJvbm1lbnRzLiAgSW4gYWRkaXRpb24sIHRoYXQncyBob3cgSW1tZXIgNCBiZWhhdmVkLCBhbmQgc2luY2VcclxuLy8gd2Ugd2FudCB0byBzaGlwIHRoaXMgaW4gYW4gUlRLIG1pbm9yLCB3ZSBzaG91bGQga2VlcCB0aGUgc2FtZSBiZWhhdmlvci5cclxuZW5hYmxlRVM1KClcclxuXHJcbmV4cG9ydCB7XHJcbiAgLy8ganNcclxuICBjb25maWd1cmVTdG9yZSxcclxufSBmcm9tICcuL2NvbmZpZ3VyZVN0b3JlJ1xyXG5leHBvcnQgdHlwZSB7XHJcbiAgLy8gdHlwZXNcclxuICBDb25maWd1cmVFbmhhbmNlcnNDYWxsYmFjayxcclxuICBDb25maWd1cmVTdG9yZU9wdGlvbnMsXHJcbiAgRW5oYW5jZWRTdG9yZSxcclxufSBmcm9tICcuL2NvbmZpZ3VyZVN0b3JlJ1xyXG5leHBvcnQgdHlwZSB7IERldlRvb2xzRW5oYW5jZXJPcHRpb25zIH0gZnJvbSAnLi9kZXZ0b29sc0V4dGVuc2lvbidcclxuZXhwb3J0IHtcclxuICAvLyBqc1xyXG4gIGNyZWF0ZUFjdGlvbixcclxuICBnZXRUeXBlLFxyXG4gIGlzQWN0aW9uLFxyXG4gIGlzQWN0aW9uQ3JlYXRvcixcclxuICBpc0ZTQSBhcyBpc0ZsdXhTdGFuZGFyZEFjdGlvbixcclxufSBmcm9tICcuL2NyZWF0ZUFjdGlvbidcclxuZXhwb3J0IHR5cGUge1xyXG4gIC8vIHR5cGVzXHJcbiAgUGF5bG9hZEFjdGlvbixcclxuICBQYXlsb2FkQWN0aW9uQ3JlYXRvcixcclxuICBBY3Rpb25DcmVhdG9yV2l0aE5vbkluZmVycmFibGVQYXlsb2FkLFxyXG4gIEFjdGlvbkNyZWF0b3JXaXRoT3B0aW9uYWxQYXlsb2FkLFxyXG4gIEFjdGlvbkNyZWF0b3JXaXRoUGF5bG9hZCxcclxuICBBY3Rpb25DcmVhdG9yV2l0aG91dFBheWxvYWQsXHJcbiAgQWN0aW9uQ3JlYXRvcldpdGhQcmVwYXJlZFBheWxvYWQsXHJcbiAgUHJlcGFyZUFjdGlvbixcclxufSBmcm9tICcuL2NyZWF0ZUFjdGlvbidcclxuZXhwb3J0IHtcclxuICAvLyBqc1xyXG4gIGNyZWF0ZVJlZHVjZXIsXHJcbn0gZnJvbSAnLi9jcmVhdGVSZWR1Y2VyJ1xyXG5leHBvcnQgdHlwZSB7XHJcbiAgLy8gdHlwZXNcclxuICBBY3Rpb25zLFxyXG4gIENhc2VSZWR1Y2VyLFxyXG4gIENhc2VSZWR1Y2VycyxcclxufSBmcm9tICcuL2NyZWF0ZVJlZHVjZXInXHJcbmV4cG9ydCB7XHJcbiAgLy8ganNcclxuICBjcmVhdGVTbGljZSxcclxufSBmcm9tICcuL2NyZWF0ZVNsaWNlJ1xyXG5cclxuZXhwb3J0IHR5cGUge1xyXG4gIC8vIHR5cGVzXHJcbiAgQ3JlYXRlU2xpY2VPcHRpb25zLFxyXG4gIFNsaWNlLFxyXG4gIENhc2VSZWR1Y2VyQWN0aW9ucyxcclxuICBTbGljZUNhc2VSZWR1Y2VycyxcclxuICBWYWxpZGF0ZVNsaWNlQ2FzZVJlZHVjZXJzLFxyXG4gIENhc2VSZWR1Y2VyV2l0aFByZXBhcmUsXHJcbiAgU2xpY2VBY3Rpb25DcmVhdG9yLFxyXG59IGZyb20gJy4vY3JlYXRlU2xpY2UnXHJcbmV4cG9ydCB0eXBlIHsgQWN0aW9uQ3JlYXRvckludmFyaWFudE1pZGRsZXdhcmVPcHRpb25zIH0gZnJvbSAnLi9hY3Rpb25DcmVhdG9ySW52YXJpYW50TWlkZGxld2FyZSdcclxuZXhwb3J0IHsgY3JlYXRlQWN0aW9uQ3JlYXRvckludmFyaWFudE1pZGRsZXdhcmUgfSBmcm9tICcuL2FjdGlvbkNyZWF0b3JJbnZhcmlhbnRNaWRkbGV3YXJlJ1xyXG5leHBvcnQge1xyXG4gIC8vIGpzXHJcbiAgY3JlYXRlSW1tdXRhYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlLFxyXG4gIGlzSW1tdXRhYmxlRGVmYXVsdCxcclxufSBmcm9tICcuL2ltbXV0YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZSdcclxuZXhwb3J0IHR5cGUge1xyXG4gIC8vIHR5cGVzXHJcbiAgSW1tdXRhYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlT3B0aW9ucyxcclxufSBmcm9tICcuL2ltbXV0YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZSdcclxuZXhwb3J0IHtcclxuICAvLyBqc1xyXG4gIGNyZWF0ZVNlcmlhbGl6YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZSxcclxuICBmaW5kTm9uU2VyaWFsaXphYmxlVmFsdWUsXHJcbiAgaXNQbGFpbixcclxufSBmcm9tICcuL3NlcmlhbGl6YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZSdcclxuZXhwb3J0IHR5cGUge1xyXG4gIC8vIHR5cGVzXHJcbiAgU2VyaWFsaXphYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlT3B0aW9ucyxcclxufSBmcm9tICcuL3NlcmlhbGl6YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZSdcclxuZXhwb3J0IHtcclxuICAvLyBqc1xyXG4gIGdldERlZmF1bHRNaWRkbGV3YXJlLFxyXG59IGZyb20gJy4vZ2V0RGVmYXVsdE1pZGRsZXdhcmUnXHJcbmV4cG9ydCB0eXBlIHtcclxuICAvLyB0eXBlc1xyXG4gIEFjdGlvblJlZHVjZXJNYXBCdWlsZGVyLFxyXG59IGZyb20gJy4vbWFwQnVpbGRlcnMnXHJcbmV4cG9ydCB7IE1pZGRsZXdhcmVBcnJheSwgRW5oYW5jZXJBcnJheSB9IGZyb20gJy4vdXRpbHMnXHJcblxyXG5leHBvcnQgeyBjcmVhdGVFbnRpdHlBZGFwdGVyIH0gZnJvbSAnLi9lbnRpdGllcy9jcmVhdGVfYWRhcHRlcidcclxuZXhwb3J0IHR5cGUge1xyXG4gIERpY3Rpb25hcnksXHJcbiAgRW50aXR5U3RhdGUsXHJcbiAgRW50aXR5QWRhcHRlcixcclxuICBFbnRpdHlTZWxlY3RvcnMsXHJcbiAgRW50aXR5U3RhdGVBZGFwdGVyLFxyXG4gIEVudGl0eUlkLFxyXG4gIFVwZGF0ZSxcclxuICBJZFNlbGVjdG9yLFxyXG4gIENvbXBhcmVyLFxyXG59IGZyb20gJy4vZW50aXRpZXMvbW9kZWxzJ1xyXG5cclxuZXhwb3J0IHtcclxuICBjcmVhdGVBc3luY1RodW5rLFxyXG4gIHVud3JhcFJlc3VsdCxcclxuICBtaW5pU2VyaWFsaXplRXJyb3IsXHJcbn0gZnJvbSAnLi9jcmVhdGVBc3luY1RodW5rJ1xyXG5leHBvcnQgdHlwZSB7XHJcbiAgQXN5bmNUaHVuayxcclxuICBBc3luY1RodW5rT3B0aW9ucyxcclxuICBBc3luY1RodW5rQWN0aW9uLFxyXG4gIEFzeW5jVGh1bmtQYXlsb2FkQ3JlYXRvclJldHVyblZhbHVlLFxyXG4gIEFzeW5jVGh1bmtQYXlsb2FkQ3JlYXRvcixcclxuICBTZXJpYWxpemVkRXJyb3IsXHJcbn0gZnJvbSAnLi9jcmVhdGVBc3luY1RodW5rJ1xyXG5cclxuZXhwb3J0IHtcclxuICAvLyBqc1xyXG4gIGlzQWxsT2YsXHJcbiAgaXNBbnlPZixcclxuICBpc1BlbmRpbmcsXHJcbiAgaXNSZWplY3RlZCxcclxuICBpc0Z1bGZpbGxlZCxcclxuICBpc0FzeW5jVGh1bmtBY3Rpb24sXHJcbiAgaXNSZWplY3RlZFdpdGhWYWx1ZSxcclxufSBmcm9tICcuL21hdGNoZXJzJ1xyXG5leHBvcnQgdHlwZSB7XHJcbiAgLy8gdHlwZXNcclxuICBBY3Rpb25NYXRjaGluZ0FsbE9mLFxyXG4gIEFjdGlvbk1hdGNoaW5nQW55T2YsXHJcbn0gZnJvbSAnLi9tYXRjaGVycydcclxuXHJcbmV4cG9ydCB7IG5hbm9pZCB9IGZyb20gJy4vbmFub2lkJ1xyXG5cclxuZXhwb3J0IHsgZGVmYXVsdCBhcyBpc1BsYWluT2JqZWN0IH0gZnJvbSAnLi9pc1BsYWluT2JqZWN0J1xyXG5cclxuZXhwb3J0IHR5cGUge1xyXG4gIExpc3RlbmVyRWZmZWN0LFxyXG4gIExpc3RlbmVyTWlkZGxld2FyZSxcclxuICBMaXN0ZW5lckVmZmVjdEFQSSxcclxuICBMaXN0ZW5lck1pZGRsZXdhcmVJbnN0YW5jZSxcclxuICBDcmVhdGVMaXN0ZW5lck1pZGRsZXdhcmVPcHRpb25zLFxyXG4gIExpc3RlbmVyRXJyb3JIYW5kbGVyLFxyXG4gIFR5cGVkU3RhcnRMaXN0ZW5pbmcsXHJcbiAgVHlwZWRBZGRMaXN0ZW5lcixcclxuICBUeXBlZFN0b3BMaXN0ZW5pbmcsXHJcbiAgVHlwZWRSZW1vdmVMaXN0ZW5lcixcclxuICBVbnN1YnNjcmliZUxpc3RlbmVyLFxyXG4gIFVuc3Vic2NyaWJlTGlzdGVuZXJPcHRpb25zLFxyXG4gIEZvcmtlZFRhc2tFeGVjdXRvcixcclxuICBGb3JrZWRUYXNrLFxyXG4gIEZvcmtlZFRhc2tBUEksXHJcbiAgQXN5bmNUYXNrRXhlY3V0b3IsXHJcbiAgU3luY1Rhc2tFeGVjdXRvcixcclxuICBUYXNrQ2FuY2VsbGVkLFxyXG4gIFRhc2tSZWplY3RlZCxcclxuICBUYXNrUmVzb2x2ZWQsXHJcbiAgVGFza1Jlc3VsdCxcclxufSBmcm9tICcuL2xpc3RlbmVyTWlkZGxld2FyZS9pbmRleCdcclxuZXhwb3J0IHR5cGUgeyBBbnlMaXN0ZW5lclByZWRpY2F0ZSB9IGZyb20gJy4vbGlzdGVuZXJNaWRkbGV3YXJlL3R5cGVzJ1xyXG5cclxuZXhwb3J0IHtcclxuICBjcmVhdGVMaXN0ZW5lck1pZGRsZXdhcmUsXHJcbiAgYWRkTGlzdGVuZXIsXHJcbiAgcmVtb3ZlTGlzdGVuZXIsXHJcbiAgY2xlYXJBbGxMaXN0ZW5lcnMsXHJcbiAgVGFza0Fib3J0RXJyb3IsXHJcbn0gZnJvbSAnLi9saXN0ZW5lck1pZGRsZXdhcmUvaW5kZXgnXHJcblxyXG5leHBvcnQge1xyXG4gIFNIT1VMRF9BVVRPQkFUQ0gsXHJcbiAgcHJlcGFyZUF1dG9CYXRjaGVkLFxyXG4gIGF1dG9CYXRjaEVuaGFuY2VyLFxyXG59IGZyb20gJy4vYXV0b0JhdGNoRW5oYW5jZXInXHJcbmV4cG9ydCB0eXBlIHsgQXV0b0JhdGNoT3B0aW9ucyB9IGZyb20gJy4vYXV0b0JhdGNoRW5oYW5jZXInXHJcblxyXG5leHBvcnQgdHlwZSB7IEV4dHJhY3REaXNwYXRjaEV4dGVuc2lvbnMgYXMgVFNIZWxwZXJzRXh0cmFjdERpc3BhdGNoRXh0ZW5zaW9ucyB9IGZyb20gJy4vdHNIZWxwZXJzJ1xyXG4iLCAiaW1wb3J0IHsgY3VycmVudCwgaXNEcmFmdCB9IGZyb20gJ2ltbWVyJ1xyXG5pbXBvcnQgeyBjcmVhdGVTZWxlY3RvciB9IGZyb20gJ3Jlc2VsZWN0J1xyXG5cclxuLyoqXHJcbiAqIFwiRHJhZnQtU2FmZVwiIHZlcnNpb24gb2YgYHJlc2VsZWN0YCdzIGBjcmVhdGVTZWxlY3RvcmA6XHJcbiAqIElmIGFuIGBpbW1lcmAtZHJhZnRlZCBvYmplY3QgaXMgcGFzc2VkIGludG8gdGhlIHJlc3VsdGluZyBzZWxlY3RvcidzIGZpcnN0IGFyZ3VtZW50LFxyXG4gKiB0aGUgc2VsZWN0b3Igd2lsbCBhY3Qgb24gdGhlIGN1cnJlbnQgZHJhZnQgdmFsdWUsIGluc3RlYWQgb2YgcmV0dXJuaW5nIGEgY2FjaGVkIHZhbHVlXHJcbiAqIHRoYXQgbWlnaHQgYmUgcG9zc2libHkgb3V0ZGF0ZWQgaWYgdGhlIGRyYWZ0IGhhcyBiZWVuIG1vZGlmaWVkIHNpbmNlLlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgY3JlYXRlRHJhZnRTYWZlU2VsZWN0b3I6IHR5cGVvZiBjcmVhdGVTZWxlY3RvciA9IChcclxuICAuLi5hcmdzOiB1bmtub3duW11cclxuKSA9PiB7XHJcbiAgY29uc3Qgc2VsZWN0b3IgPSAoY3JlYXRlU2VsZWN0b3IgYXMgYW55KSguLi5hcmdzKVxyXG4gIGNvbnN0IHdyYXBwZWRTZWxlY3RvciA9ICh2YWx1ZTogdW5rbm93biwgLi4ucmVzdDogdW5rbm93bltdKSA9PlxyXG4gICAgc2VsZWN0b3IoaXNEcmFmdCh2YWx1ZSkgPyBjdXJyZW50KHZhbHVlKSA6IHZhbHVlLCAuLi5yZXN0KVxyXG4gIHJldHVybiB3cmFwcGVkU2VsZWN0b3IgYXMgYW55XHJcbn1cclxuIiwgImltcG9ydCB0eXBlIHtcclxuICBSZWR1Y2VyLFxyXG4gIFJlZHVjZXJzTWFwT2JqZWN0LFxyXG4gIE1pZGRsZXdhcmUsXHJcbiAgQWN0aW9uLFxyXG4gIEFueUFjdGlvbixcclxuICBTdG9yZUVuaGFuY2VyLFxyXG4gIFN0b3JlLFxyXG4gIERpc3BhdGNoLFxyXG4gIFByZWxvYWRlZFN0YXRlLFxyXG4gIENvbWJpbmVkU3RhdGUsXHJcbn0gZnJvbSAncmVkdXgnXHJcbmltcG9ydCB7IGNyZWF0ZVN0b3JlLCBjb21wb3NlLCBhcHBseU1pZGRsZXdhcmUsIGNvbWJpbmVSZWR1Y2VycyB9IGZyb20gJ3JlZHV4J1xyXG5pbXBvcnQgdHlwZSB7IERldlRvb2xzRW5oYW5jZXJPcHRpb25zIGFzIERldlRvb2xzT3B0aW9ucyB9IGZyb20gJy4vZGV2dG9vbHNFeHRlbnNpb24nXHJcbmltcG9ydCB7IGNvbXBvc2VXaXRoRGV2VG9vbHMgfSBmcm9tICcuL2RldnRvb2xzRXh0ZW5zaW9uJ1xyXG5cclxuaW1wb3J0IGlzUGxhaW5PYmplY3QgZnJvbSAnLi9pc1BsYWluT2JqZWN0J1xyXG5pbXBvcnQgdHlwZSB7XHJcbiAgVGh1bmtNaWRkbGV3YXJlRm9yLFxyXG4gIEN1cnJpZWRHZXREZWZhdWx0TWlkZGxld2FyZSxcclxufSBmcm9tICcuL2dldERlZmF1bHRNaWRkbGV3YXJlJ1xyXG5pbXBvcnQgeyBjdXJyeUdldERlZmF1bHRNaWRkbGV3YXJlIH0gZnJvbSAnLi9nZXREZWZhdWx0TWlkZGxld2FyZSdcclxuaW1wb3J0IHR5cGUge1xyXG4gIE5vSW5mZXIsXHJcbiAgRXh0cmFjdERpc3BhdGNoRXh0ZW5zaW9ucyxcclxuICBFeHRyYWN0U3RvcmVFeHRlbnNpb25zLFxyXG4gIEV4dHJhY3RTdGF0ZUV4dGVuc2lvbnMsXHJcbn0gZnJvbSAnLi90c0hlbHBlcnMnXHJcbmltcG9ydCB7IEVuaGFuY2VyQXJyYXkgfSBmcm9tICcuL3V0aWxzJ1xyXG5cclxuY29uc3QgSVNfUFJPRFVDVElPTiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbidcclxuXHJcbi8qKlxyXG4gKiBDYWxsYmFjayBmdW5jdGlvbiB0eXBlLCB0byBiZSB1c2VkIGluIGBDb25maWd1cmVTdG9yZU9wdGlvbnMuZW5oYW5jZXJzYFxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBDb25maWd1cmVFbmhhbmNlcnNDYWxsYmFjazxFIGV4dGVuZHMgRW5oYW5jZXJzID0gRW5oYW5jZXJzPiA9IChcclxuICBkZWZhdWx0RW5oYW5jZXJzOiBFbmhhbmNlckFycmF5PFtTdG9yZUVuaGFuY2VyPHt9LCB7fT5dPlxyXG4pID0+IEVcclxuXHJcbi8qKlxyXG4gKiBPcHRpb25zIGZvciBgY29uZmlndXJlU3RvcmUoKWAuXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29uZmlndXJlU3RvcmVPcHRpb25zPFxyXG4gIFMgPSBhbnksXHJcbiAgQSBleHRlbmRzIEFjdGlvbiA9IEFueUFjdGlvbixcclxuICBNIGV4dGVuZHMgTWlkZGxld2FyZXM8Uz4gPSBNaWRkbGV3YXJlczxTPixcclxuICBFIGV4dGVuZHMgRW5oYW5jZXJzID0gRW5oYW5jZXJzXHJcbj4ge1xyXG4gIC8qKlxyXG4gICAqIEEgc2luZ2xlIHJlZHVjZXIgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIHVzZWQgYXMgdGhlIHJvb3QgcmVkdWNlciwgb3IgYW5cclxuICAgKiBvYmplY3Qgb2Ygc2xpY2UgcmVkdWNlcnMgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byBgY29tYmluZVJlZHVjZXJzKClgLlxyXG4gICAqL1xyXG4gIHJlZHVjZXI6IFJlZHVjZXI8UywgQT4gfCBSZWR1Y2Vyc01hcE9iamVjdDxTLCBBPlxyXG5cclxuICAvKipcclxuICAgKiBBbiBhcnJheSBvZiBSZWR1eCBtaWRkbGV3YXJlIHRvIGluc3RhbGwuIElmIG5vdCBzdXBwbGllZCwgZGVmYXVsdHMgdG9cclxuICAgKiB0aGUgc2V0IG9mIG1pZGRsZXdhcmUgcmV0dXJuZWQgYnkgYGdldERlZmF1bHRNaWRkbGV3YXJlKClgLlxyXG4gICAqXHJcbiAgICogQGV4YW1wbGUgYG1pZGRsZXdhcmU6IChnRE0pID0+IGdETSgpLmNvbmNhdChsb2dnZXIsIGFwaU1pZGRsZXdhcmUsIHlvdXJDdXN0b21NaWRkbGV3YXJlKWBcclxuICAgKiBAc2VlIGh0dHBzOi8vcmVkdXgtdG9vbGtpdC5qcy5vcmcvYXBpL2dldERlZmF1bHRNaWRkbGV3YXJlI2ludGVuZGVkLXVzYWdlXHJcbiAgICovXHJcbiAgbWlkZGxld2FyZT86ICgoZ2V0RGVmYXVsdE1pZGRsZXdhcmU6IEN1cnJpZWRHZXREZWZhdWx0TWlkZGxld2FyZTxTPikgPT4gTSkgfCBNXHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZXRoZXIgdG8gZW5hYmxlIFJlZHV4IERldlRvb2xzIGludGVncmF0aW9uLiBEZWZhdWx0cyB0byBgdHJ1ZWAuXHJcbiAgICpcclxuICAgKiBBZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gY2FuIGJlIGRvbmUgYnkgcGFzc2luZyBSZWR1eCBEZXZUb29scyBvcHRpb25zXHJcbiAgICovXHJcbiAgZGV2VG9vbHM/OiBib29sZWFuIHwgRGV2VG9vbHNPcHRpb25zXHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBpbml0aWFsIHN0YXRlLCBzYW1lIGFzIFJlZHV4J3MgY3JlYXRlU3RvcmUuXHJcbiAgICogWW91IG1heSBvcHRpb25hbGx5IHNwZWNpZnkgaXQgdG8gaHlkcmF0ZSB0aGUgc3RhdGVcclxuICAgKiBmcm9tIHRoZSBzZXJ2ZXIgaW4gdW5pdmVyc2FsIGFwcHMsIG9yIHRvIHJlc3RvcmUgYSBwcmV2aW91c2x5IHNlcmlhbGl6ZWRcclxuICAgKiB1c2VyIHNlc3Npb24uIElmIHlvdSB1c2UgYGNvbWJpbmVSZWR1Y2VycygpYCB0byBwcm9kdWNlIHRoZSByb290IHJlZHVjZXJcclxuICAgKiBmdW5jdGlvbiAoZWl0aGVyIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgYnkgcGFzc2luZyBhbiBvYmplY3QgYXMgYHJlZHVjZXJgKSxcclxuICAgKiB0aGlzIG11c3QgYmUgYW4gb2JqZWN0IHdpdGggdGhlIHNhbWUgc2hhcGUgYXMgdGhlIHJlZHVjZXIgbWFwIGtleXMuXHJcbiAgICovXHJcbiAgLypcclxuICBOb3QgMTAwJSBjb3JyZWN0IGJ1dCB0aGUgYmVzdCBhcHByb3hpbWF0aW9uIHdlIGNhbiBnZXQ6XHJcbiAgLSBpZiBTIGlzIGEgYENvbWJpbmVkU3RhdGVgIGFwcGx5aW5nIGEgc2Vjb25kIGBDb21iaW5lZFN0YXRlYCBvbiBpdCBkb2VzIG5vdCBjaGFuZ2UgYW55dGhpbmcuXHJcbiAgLSBpZiBpdCBpcyBub3QsIHRoZXJlIGNvdWxkIGJlIHR3byBjYXNlczpcclxuICAgIC0gYFJlZHVjZXJzTWFwT2JqZWN0PFMsIEE+YCBpcyBiZWluZyBwYXNzZWQgaW4uIEluIHRoaXMgY2FzZSwgd2Ugd2lsbCBjYWxsIGBjb21iaW5lUmVkdWNlcnNgIG9uIGl0IGFuZCBgQ29tYmluZWRTdGF0ZTxTPmAgaXMgY29ycmVjdFxyXG4gICAgLSBgUmVkdWNlcjxTLCBBPmAgaXMgYmVpbmcgcGFzc2VkIGluLiBJbiB0aGlzIGNhc2UsIGFjdHVhbGx5IGBDb21iaW5lZFN0YXRlPFM+YCBpcyB3cm9uZyBhbmQgYFNgIHdvdWxkIGJlIGNvcnJlY3QuXHJcbiAgICBBcyB3ZSBjYW5ub3QgZGlzdGluZ3Vpc2ggYmV0d2VlbiB0aG9zZSB0d28gY2FzZXMgd2l0aG91dCBhZGRpbmcgYW5vdGhlciBnZW5lcmljIHBhcmFtZXRlcixcclxuICAgIHdlIGp1c3QgbWFrZSB0aGUgcHJhZ21hdGljIGFzc3VtcHRpb24gdGhhdCB0aGUgbGF0dGVyIGFsbW9zdCBuZXZlciBoYXBwZW5zLlxyXG4gICovXHJcbiAgcHJlbG9hZGVkU3RhdGU/OiBQcmVsb2FkZWRTdGF0ZTxDb21iaW5lZFN0YXRlPE5vSW5mZXI8Uz4+PlxyXG5cclxuICAvKipcclxuICAgKiBUaGUgc3RvcmUgZW5oYW5jZXJzIHRvIGFwcGx5LiBTZWUgUmVkdXgncyBgY3JlYXRlU3RvcmUoKWAuXHJcbiAgICogQWxsIGVuaGFuY2VycyB3aWxsIGJlIGluY2x1ZGVkIGJlZm9yZSB0aGUgRGV2VG9vbHMgRXh0ZW5zaW9uIGVuaGFuY2VyLlxyXG4gICAqIElmIHlvdSBuZWVkIHRvIGN1c3RvbWl6ZSB0aGUgb3JkZXIgb2YgZW5oYW5jZXJzLCBzdXBwbHkgYSBjYWxsYmFja1xyXG4gICAqIGZ1bmN0aW9uIHRoYXQgd2lsbCByZWNlaXZlIHRoZSBvcmlnaW5hbCBhcnJheSAoaWUsIGBbYXBwbHlNaWRkbGV3YXJlXWApLFxyXG4gICAqIGFuZCBzaG91bGQgcmV0dXJuIGEgbmV3IGFycmF5IChzdWNoIGFzIGBbYXBwbHlNaWRkbGV3YXJlLCBvZmZsaW5lXWApLlxyXG4gICAqIElmIHlvdSBvbmx5IG5lZWQgdG8gYWRkIG1pZGRsZXdhcmUsIHlvdSBjYW4gdXNlIHRoZSBgbWlkZGxld2FyZWAgcGFyYW1ldGVyIGluc3RlYWQuXHJcbiAgICovXHJcbiAgZW5oYW5jZXJzPzogRSB8IENvbmZpZ3VyZUVuaGFuY2Vyc0NhbGxiYWNrPEU+XHJcbn1cclxuXHJcbnR5cGUgTWlkZGxld2FyZXM8Uz4gPSBSZWFkb25seUFycmF5PE1pZGRsZXdhcmU8e30sIFM+PlxyXG5cclxudHlwZSBFbmhhbmNlcnMgPSBSZWFkb25seUFycmF5PFN0b3JlRW5oYW5jZXI+XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFRvb2xraXRTdG9yZTxcclxuICBTID0gYW55LFxyXG4gIEEgZXh0ZW5kcyBBY3Rpb24gPSBBbnlBY3Rpb24sXHJcbiAgTSBleHRlbmRzIE1pZGRsZXdhcmVzPFM+ID0gTWlkZGxld2FyZXM8Uz5cclxuPiBleHRlbmRzIFN0b3JlPFMsIEE+IHtcclxuICAvKipcclxuICAgKiBUaGUgYGRpc3BhdGNoYCBtZXRob2Qgb2YgeW91ciBzdG9yZSwgZW5oYW5jZWQgYnkgYWxsIGl0cyBtaWRkbGV3YXJlcy5cclxuICAgKlxyXG4gICAqIEBpbmhlcml0ZG9jXHJcbiAgICovXHJcbiAgZGlzcGF0Y2g6IEV4dHJhY3REaXNwYXRjaEV4dGVuc2lvbnM8TT4gJiBEaXNwYXRjaDxBPlxyXG59XHJcblxyXG4vKipcclxuICogQSBSZWR1eCBzdG9yZSByZXR1cm5lZCBieSBgY29uZmlndXJlU3RvcmUoKWAuIFN1cHBvcnRzIGRpc3BhdGNoaW5nXHJcbiAqIHNpZGUtZWZmZWN0ZnVsIF90aHVua3NfIGluIGFkZGl0aW9uIHRvIHBsYWluIGFjdGlvbnMuXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCB0eXBlIEVuaGFuY2VkU3RvcmU8XHJcbiAgUyA9IGFueSxcclxuICBBIGV4dGVuZHMgQWN0aW9uID0gQW55QWN0aW9uLFxyXG4gIE0gZXh0ZW5kcyBNaWRkbGV3YXJlczxTPiA9IE1pZGRsZXdhcmVzPFM+LFxyXG4gIEUgZXh0ZW5kcyBFbmhhbmNlcnMgPSBFbmhhbmNlcnNcclxuPiA9IFRvb2xraXRTdG9yZTxTICYgRXh0cmFjdFN0YXRlRXh0ZW5zaW9uczxFPiwgQSwgTT4gJlxyXG4gIEV4dHJhY3RTdG9yZUV4dGVuc2lvbnM8RT5cclxuXHJcbi8qKlxyXG4gKiBBIGZyaWVuZGx5IGFic3RyYWN0aW9uIG92ZXIgdGhlIHN0YW5kYXJkIFJlZHV4IGBjcmVhdGVTdG9yZSgpYCBmdW5jdGlvbi5cclxuICpcclxuICogQHBhcmFtIG9wdGlvbnMgVGhlIHN0b3JlIGNvbmZpZ3VyYXRpb24uXHJcbiAqIEByZXR1cm5zIEEgY29uZmlndXJlZCBSZWR1eCBzdG9yZS5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGNvbmZpZ3VyZVN0b3JlPFxyXG4gIFMgPSBhbnksXHJcbiAgQSBleHRlbmRzIEFjdGlvbiA9IEFueUFjdGlvbixcclxuICBNIGV4dGVuZHMgTWlkZGxld2FyZXM8Uz4gPSBbVGh1bmtNaWRkbGV3YXJlRm9yPFM+XSxcclxuICBFIGV4dGVuZHMgRW5oYW5jZXJzID0gW1N0b3JlRW5oYW5jZXJdXHJcbj4ob3B0aW9uczogQ29uZmlndXJlU3RvcmVPcHRpb25zPFMsIEEsIE0sIEU+KTogRW5oYW5jZWRTdG9yZTxTLCBBLCBNLCBFPiB7XHJcbiAgY29uc3QgY3VycmllZEdldERlZmF1bHRNaWRkbGV3YXJlID0gY3VycnlHZXREZWZhdWx0TWlkZGxld2FyZTxTPigpXHJcblxyXG4gIGNvbnN0IHtcclxuICAgIHJlZHVjZXIgPSB1bmRlZmluZWQsXHJcbiAgICBtaWRkbGV3YXJlID0gY3VycmllZEdldERlZmF1bHRNaWRkbGV3YXJlKCksXHJcbiAgICBkZXZUb29scyA9IHRydWUsXHJcbiAgICBwcmVsb2FkZWRTdGF0ZSA9IHVuZGVmaW5lZCxcclxuICAgIGVuaGFuY2VycyA9IHVuZGVmaW5lZCxcclxuICB9ID0gb3B0aW9ucyB8fCB7fVxyXG5cclxuICBsZXQgcm9vdFJlZHVjZXI6IFJlZHVjZXI8UywgQT5cclxuXHJcbiAgaWYgKHR5cGVvZiByZWR1Y2VyID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICByb290UmVkdWNlciA9IHJlZHVjZXJcclxuICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3QocmVkdWNlcikpIHtcclxuICAgIHJvb3RSZWR1Y2VyID0gY29tYmluZVJlZHVjZXJzKHJlZHVjZXIpIGFzIHVua25vd24gYXMgUmVkdWNlcjxTLCBBPlxyXG4gIH0gZWxzZSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICdcInJlZHVjZXJcIiBpcyBhIHJlcXVpcmVkIGFyZ3VtZW50LCBhbmQgbXVzdCBiZSBhIGZ1bmN0aW9uIG9yIGFuIG9iamVjdCBvZiBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIGNvbWJpbmVSZWR1Y2VycydcclxuICAgIClcclxuICB9XHJcblxyXG4gIGxldCBmaW5hbE1pZGRsZXdhcmUgPSBtaWRkbGV3YXJlXHJcbiAgaWYgKHR5cGVvZiBmaW5hbE1pZGRsZXdhcmUgPT09ICdmdW5jdGlvbicpIHtcclxuICAgIGZpbmFsTWlkZGxld2FyZSA9IGZpbmFsTWlkZGxld2FyZShjdXJyaWVkR2V0RGVmYXVsdE1pZGRsZXdhcmUpXHJcblxyXG4gICAgaWYgKCFJU19QUk9EVUNUSU9OICYmICFBcnJheS5pc0FycmF5KGZpbmFsTWlkZGxld2FyZSkpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICd3aGVuIHVzaW5nIGEgbWlkZGxld2FyZSBidWlsZGVyIGZ1bmN0aW9uLCBhbiBhcnJheSBvZiBtaWRkbGV3YXJlIG11c3QgYmUgcmV0dXJuZWQnXHJcbiAgICAgIClcclxuICAgIH1cclxuICB9XHJcbiAgaWYgKFxyXG4gICAgIUlTX1BST0RVQ1RJT04gJiZcclxuICAgIGZpbmFsTWlkZGxld2FyZS5zb21lKChpdGVtOiBhbnkpID0+IHR5cGVvZiBpdGVtICE9PSAnZnVuY3Rpb24nKVxyXG4gICkge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAnZWFjaCBtaWRkbGV3YXJlIHByb3ZpZGVkIHRvIGNvbmZpZ3VyZVN0b3JlIG11c3QgYmUgYSBmdW5jdGlvbidcclxuICAgIClcclxuICB9XHJcblxyXG4gIGNvbnN0IG1pZGRsZXdhcmVFbmhhbmNlcjogU3RvcmVFbmhhbmNlciA9IGFwcGx5TWlkZGxld2FyZSguLi5maW5hbE1pZGRsZXdhcmUpXHJcblxyXG4gIGxldCBmaW5hbENvbXBvc2UgPSBjb21wb3NlXHJcblxyXG4gIGlmIChkZXZUb29scykge1xyXG4gICAgZmluYWxDb21wb3NlID0gY29tcG9zZVdpdGhEZXZUb29scyh7XHJcbiAgICAgIC8vIEVuYWJsZSBjYXB0dXJlIG9mIHN0YWNrIHRyYWNlcyBmb3IgZGlzcGF0Y2hlZCBSZWR1eCBhY3Rpb25zXHJcbiAgICAgIHRyYWNlOiAhSVNfUFJPRFVDVElPTixcclxuICAgICAgLi4uKHR5cGVvZiBkZXZUb29scyA9PT0gJ29iamVjdCcgJiYgZGV2VG9vbHMpLFxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGNvbnN0IGRlZmF1bHRFbmhhbmNlcnMgPSBuZXcgRW5oYW5jZXJBcnJheShtaWRkbGV3YXJlRW5oYW5jZXIpXHJcbiAgbGV0IHN0b3JlRW5oYW5jZXJzOiBFbmhhbmNlcnMgPSBkZWZhdWx0RW5oYW5jZXJzXHJcblxyXG4gIGlmIChBcnJheS5pc0FycmF5KGVuaGFuY2VycykpIHtcclxuICAgIHN0b3JlRW5oYW5jZXJzID0gW21pZGRsZXdhcmVFbmhhbmNlciwgLi4uZW5oYW5jZXJzXVxyXG4gIH0gZWxzZSBpZiAodHlwZW9mIGVuaGFuY2VycyA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgc3RvcmVFbmhhbmNlcnMgPSBlbmhhbmNlcnMoZGVmYXVsdEVuaGFuY2VycylcclxuICB9XHJcblxyXG4gIGNvbnN0IGNvbXBvc2VkRW5oYW5jZXIgPSBmaW5hbENvbXBvc2UoLi4uc3RvcmVFbmhhbmNlcnMpIGFzIFN0b3JlRW5oYW5jZXI8YW55PlxyXG5cclxuICByZXR1cm4gY3JlYXRlU3RvcmUocm9vdFJlZHVjZXIsIHByZWxvYWRlZFN0YXRlLCBjb21wb3NlZEVuaGFuY2VyKVxyXG59XHJcbiIsICJpbXBvcnQgdHlwZSB7IEFjdGlvbiwgQWN0aW9uQ3JlYXRvciwgU3RvcmVFbmhhbmNlciB9IGZyb20gJ3JlZHV4J1xyXG5pbXBvcnQgeyBjb21wb3NlIH0gZnJvbSAncmVkdXgnXHJcblxyXG4vKipcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBEZXZUb29sc0VuaGFuY2VyT3B0aW9ucyB7XHJcbiAgLyoqXHJcbiAgICogdGhlIGluc3RhbmNlIG5hbWUgdG8gYmUgc2hvd2VkIG9uIHRoZSBtb25pdG9yIHBhZ2UuIERlZmF1bHQgdmFsdWUgaXMgYGRvY3VtZW50LnRpdGxlYC5cclxuICAgKiBJZiBub3Qgc3BlY2lmaWVkIGFuZCB0aGVyZSdzIG5vIGRvY3VtZW50IHRpdGxlLCBpdCB3aWxsIGNvbnNpc3Qgb2YgYHRhYklkYCBhbmQgYGluc3RhbmNlSWRgLlxyXG4gICAqL1xyXG4gIG5hbWU/OiBzdHJpbmdcclxuICAvKipcclxuICAgKiBhY3Rpb24gY3JlYXRvcnMgZnVuY3Rpb25zIHRvIGJlIGF2YWlsYWJsZSBpbiB0aGUgRGlzcGF0Y2hlci5cclxuICAgKi9cclxuICBhY3Rpb25DcmVhdG9ycz86IEFjdGlvbkNyZWF0b3I8YW55PltdIHwgeyBba2V5OiBzdHJpbmddOiBBY3Rpb25DcmVhdG9yPGFueT4gfVxyXG4gIC8qKlxyXG4gICAqIGlmIG1vcmUgdGhhbiBvbmUgYWN0aW9uIGlzIGRpc3BhdGNoZWQgaW4gdGhlIGluZGljYXRlZCBpbnRlcnZhbCwgYWxsIG5ldyBhY3Rpb25zIHdpbGwgYmUgY29sbGVjdGVkIGFuZCBzZW50IGF0IG9uY2UuXHJcbiAgICogSXQgaXMgdGhlIGpvaW50IGJldHdlZW4gcGVyZm9ybWFuY2UgYW5kIHNwZWVkLiBXaGVuIHNldCB0byBgMGAsIGFsbCBhY3Rpb25zIHdpbGwgYmUgc2VudCBpbnN0YW50bHkuXHJcbiAgICogU2V0IGl0IHRvIGEgaGlnaGVyIHZhbHVlIHdoZW4gZXhwZXJpZW5jaW5nIHBlcmYgaXNzdWVzIChhbHNvIGBtYXhBZ2VgIHRvIGEgbG93ZXIgdmFsdWUpLlxyXG4gICAqXHJcbiAgICogQGRlZmF1bHQgNTAwIG1zLlxyXG4gICAqL1xyXG4gIGxhdGVuY3k/OiBudW1iZXJcclxuICAvKipcclxuICAgKiAoPiAxKSAtIG1heGltdW0gYWxsb3dlZCBhY3Rpb25zIHRvIGJlIHN0b3JlZCBpbiB0aGUgaGlzdG9yeSB0cmVlLiBUaGUgb2xkZXN0IGFjdGlvbnMgYXJlIHJlbW92ZWQgb25jZSBtYXhBZ2UgaXMgcmVhY2hlZC4gSXQncyBjcml0aWNhbCBmb3IgcGVyZm9ybWFuY2UuXHJcbiAgICpcclxuICAgKiBAZGVmYXVsdCA1MFxyXG4gICAqL1xyXG4gIG1heEFnZT86IG51bWJlclxyXG4gIC8qKlxyXG4gICAqIEN1c3RvbWl6ZXMgaG93IGFjdGlvbnMgYW5kIHN0YXRlIGFyZSBzZXJpYWxpemVkIGFuZCBkZXNlcmlhbGl6ZWQuIENhbiBiZSBhIGJvb2xlYW4gb3Igb2JqZWN0LiBJZiBnaXZlbiBhIGJvb2xlYW4sIHRoZSBiZWhhdmlvciBpcyB0aGUgc2FtZSBhcyBpZiB5b3VcclxuICAgKiB3ZXJlIHRvIHBhc3MgYW4gb2JqZWN0IGFuZCBzcGVjaWZ5IGBvcHRpb25zYCBhcyBhIGJvb2xlYW4uIEdpdmluZyBhbiBvYmplY3QgYWxsb3dzIGZpbmUtZ3JhaW5lZCBjdXN0b21pemF0aW9uIHVzaW5nIHRoZSBgcmVwbGFjZXJgIGFuZCBgcmV2aXZlcmBcclxuICAgKiBmdW5jdGlvbnMuXHJcbiAgICovXHJcbiAgc2VyaWFsaXplPzpcclxuICAgIHwgYm9vbGVhblxyXG4gICAgfCB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogLSBgdW5kZWZpbmVkYCAtIHdpbGwgdXNlIHJlZ3VsYXIgYEpTT04uc3RyaW5naWZ5YCB0byBzZW5kIGRhdGEgKGl0J3MgdGhlIGZhc3QgbW9kZSkuXHJcbiAgICAgICAgICogLSBgZmFsc2VgIC0gd2lsbCBoYW5kbGUgYWxzbyBjaXJjdWxhciByZWZlcmVuY2VzLlxyXG4gICAgICAgICAqIC0gYHRydWVgIC0gd2lsbCBoYW5kbGUgYWxzbyBkYXRlLCByZWdleCwgdW5kZWZpbmVkLCBlcnJvciBvYmplY3RzLCBzeW1ib2xzLCBtYXBzLCBzZXRzIGFuZCBmdW5jdGlvbnMuXHJcbiAgICAgICAgICogLSBvYmplY3QsIHdoaWNoIGNvbnRhaW5zIGBkYXRlYCwgYHJlZ2V4YCwgYHVuZGVmaW5lZGAsIGBlcnJvcmAsIGBzeW1ib2xgLCBgbWFwYCwgYHNldGAgYW5kIGBmdW5jdGlvbmAga2V5cy5cclxuICAgICAgICAgKiAgIEZvciBlYWNoIG9mIHRoZW0geW91IGNhbiBpbmRpY2F0ZSBpZiB0byBpbmNsdWRlIChieSBzZXR0aW5nIGFzIGB0cnVlYCkuXHJcbiAgICAgICAgICogICBGb3IgYGZ1bmN0aW9uYCBrZXkgeW91IGNhbiBhbHNvIHNwZWNpZnkgYSBjdXN0b20gZnVuY3Rpb24gd2hpY2ggaGFuZGxlcyBzZXJpYWxpemF0aW9uLlxyXG4gICAgICAgICAqICAgU2VlIFtganNhbmBdKGh0dHBzOi8vZ2l0aHViLmNvbS9rb2xvZG55L2pzYW4pIGZvciBtb3JlIGRldGFpbHMuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgb3B0aW9ucz86XHJcbiAgICAgICAgICB8IHVuZGVmaW5lZFxyXG4gICAgICAgICAgfCBib29sZWFuXHJcbiAgICAgICAgICB8IHtcclxuICAgICAgICAgICAgICBkYXRlPzogdHJ1ZVxyXG4gICAgICAgICAgICAgIHJlZ2V4PzogdHJ1ZVxyXG4gICAgICAgICAgICAgIHVuZGVmaW5lZD86IHRydWVcclxuICAgICAgICAgICAgICBlcnJvcj86IHRydWVcclxuICAgICAgICAgICAgICBzeW1ib2w/OiB0cnVlXHJcbiAgICAgICAgICAgICAgbWFwPzogdHJ1ZVxyXG4gICAgICAgICAgICAgIHNldD86IHRydWVcclxuICAgICAgICAgICAgICBmdW5jdGlvbj86IHRydWUgfCAoKGZuOiAoLi4uYXJnczogYW55W10pID0+IGFueSkgPT4gc3RyaW5nKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogW0pTT04gcmVwbGFjZXIgZnVuY3Rpb25dKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0pTT04vc3RyaW5naWZ5I1RoZV9yZXBsYWNlcl9wYXJhbWV0ZXIpIHVzZWQgZm9yIGJvdGggYWN0aW9ucyBhbmQgc3RhdGVzIHN0cmluZ2lmeS5cclxuICAgICAgICAgKiBJbiBhZGRpdGlvbiwgeW91IGNhbiBzcGVjaWZ5IGEgZGF0YSB0eXBlIGJ5IGFkZGluZyBhIFtgX19zZXJpYWxpemVkVHlwZV9fYF0oaHR0cHM6Ly9naXRodWIuY29tL3phbG1veGlzdXMvcmVtb3RlZGV2LXNlcmlhbGl6ZS9ibG9iL21hc3Rlci9oZWxwZXJzL2luZGV4LmpzI0w0KVxyXG4gICAgICAgICAqIGtleS4gU28geW91IGNhbiBkZXNlcmlhbGl6ZSBpdCBiYWNrIHdoaWxlIGltcG9ydGluZyBvciBwZXJzaXN0aW5nIGRhdGEuXHJcbiAgICAgICAgICogTW9yZW92ZXIsIGl0IHdpbGwgYWxzbyBbc2hvdyBhIG5pY2UgcHJldmlldyBzaG93aW5nIHRoZSBwcm92aWRlZCBjdXN0b20gdHlwZV0oaHR0cHM6Ly9jbG91ZC5naXRodWJ1c2VyY29udGVudC5jb20vYXNzZXRzLzc5NTc4NTkvMjE4MTQzMzAvYTE3ZDU1NmEtZDc2MS0xMWU2LTg1ZWYtMTU5ZGQxMmYzNmM1LnBuZyk6XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcmVwbGFjZXI/OiAoa2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKSA9PiBhbnlcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBbSlNPTiBgcmV2aXZlcmAgZnVuY3Rpb25dKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0pTT04vcGFyc2UjVXNpbmdfdGhlX3Jldml2ZXJfcGFyYW1ldGVyKVxyXG4gICAgICAgICAqIHVzZWQgZm9yIHBhcnNpbmcgdGhlIGltcG9ydGVkIGFjdGlvbnMgYW5kIHN0YXRlcy4gU2VlIFtgcmVtb3RlZGV2LXNlcmlhbGl6ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS96YWxtb3hpc3VzL3JlbW90ZWRldi1zZXJpYWxpemUvYmxvYi9tYXN0ZXIvaW1tdXRhYmxlL3NlcmlhbGl6ZS5qcyNMOC1MNDEpXHJcbiAgICAgICAgICogYXMgYW4gZXhhbXBsZSBvbiBob3cgdG8gc2VyaWFsaXplIHNwZWNpYWwgZGF0YSB0eXBlcyBhbmQgZ2V0IHRoZW0gYmFjay5cclxuICAgICAgICAgKi9cclxuICAgICAgICByZXZpdmVyPzogKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bikgPT4gYW55XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQXV0b21hdGljYWxseSBzZXJpYWxpemUvZGVzZXJpYWxpemUgaW1tdXRhYmxlanMgdmlhIFtyZW1vdGVkZXYtc2VyaWFsaXplXShodHRwczovL2dpdGh1Yi5jb20vemFsbW94aXN1cy9yZW1vdGVkZXYtc2VyaWFsaXplKS5cclxuICAgICAgICAgKiBKdXN0IHBhc3MgdGhlIEltbXV0YWJsZSBsaWJyYXJ5LiBJdCB3aWxsIHN1cHBvcnQgYWxsIEltbXV0YWJsZUpTIHN0cnVjdHVyZXMuIFlvdSBjYW4gZXZlbiBleHBvcnQgdGhlbSBpbnRvIGEgZmlsZSBhbmQgZ2V0IHRoZW0gYmFjay5cclxuICAgICAgICAgKiBUaGUgb25seSBleGNlcHRpb24gaXMgYFJlY29yZGAgY2xhc3MsIGZvciB3aGljaCB5b3Ugc2hvdWxkIHBhc3MgdGhpcyBpbiBhZGRpdGlvbiB0aGUgcmVmZXJlbmNlcyB0byB5b3VyIGNsYXNzZXMgaW4gYHJlZnNgLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGltbXV0YWJsZT86IGFueVxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEltbXV0YWJsZUpTIGBSZWNvcmRgIGNsYXNzZXMgdXNlZCB0byBtYWtlIHBvc3NpYmxlIHJlc3RvcmUgaXRzIGluc3RhbmNlcyBiYWNrIHdoZW4gaW1wb3J0aW5nLCBwZXJzaXN0aW5nLi4uXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcmVmcz86IGFueVxyXG4gICAgICB9XHJcbiAgLyoqXHJcbiAgICogZnVuY3Rpb24gd2hpY2ggdGFrZXMgYGFjdGlvbmAgb2JqZWN0IGFuZCBpZCBudW1iZXIgYXMgYXJndW1lbnRzLCBhbmQgc2hvdWxkIHJldHVybiBgYWN0aW9uYCBvYmplY3QgYmFjay5cclxuICAgKi9cclxuICBhY3Rpb25TYW5pdGl6ZXI/OiA8QSBleHRlbmRzIEFjdGlvbj4oYWN0aW9uOiBBLCBpZDogbnVtYmVyKSA9PiBBXHJcbiAgLyoqXHJcbiAgICogZnVuY3Rpb24gd2hpY2ggdGFrZXMgYHN0YXRlYCBvYmplY3QgYW5kIGluZGV4IGFzIGFyZ3VtZW50cywgYW5kIHNob3VsZCByZXR1cm4gYHN0YXRlYCBvYmplY3QgYmFjay5cclxuICAgKi9cclxuICBzdGF0ZVNhbml0aXplcj86IDxTPihzdGF0ZTogUywgaW5kZXg6IG51bWJlcikgPT4gU1xyXG4gIC8qKlxyXG4gICAqICpzdHJpbmcgb3IgYXJyYXkgb2Ygc3RyaW5ncyBhcyByZWdleCogLSBhY3Rpb25zIHR5cGVzIHRvIGJlIGhpZGRlbiAvIHNob3duIGluIHRoZSBtb25pdG9ycyAod2hpbGUgcGFzc2VkIHRvIHRoZSByZWR1Y2VycykuXHJcbiAgICogSWYgYGFjdGlvbnNXaGl0ZWxpc3RgIHNwZWNpZmllZCwgYGFjdGlvbnNCbGFja2xpc3RgIGlzIGlnbm9yZWQuXHJcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGFjdGlvbnNEZW55bGlzdCBpbnN0ZWFkLlxyXG4gICAqL1xyXG4gIGFjdGlvbnNCbGFja2xpc3Q/OiBzdHJpbmcgfCBzdHJpbmdbXVxyXG4gIC8qKlxyXG4gICAqICpzdHJpbmcgb3IgYXJyYXkgb2Ygc3RyaW5ncyBhcyByZWdleCogLSBhY3Rpb25zIHR5cGVzIHRvIGJlIGhpZGRlbiAvIHNob3duIGluIHRoZSBtb25pdG9ycyAod2hpbGUgcGFzc2VkIHRvIHRoZSByZWR1Y2VycykuXHJcbiAgICogSWYgYGFjdGlvbnNXaGl0ZWxpc3RgIHNwZWNpZmllZCwgYGFjdGlvbnNCbGFja2xpc3RgIGlzIGlnbm9yZWQuXHJcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGFjdGlvbnNBbGxvd2xpc3QgaW5zdGVhZC5cclxuICAgKi9cclxuICBhY3Rpb25zV2hpdGVsaXN0Pzogc3RyaW5nIHwgc3RyaW5nW11cclxuICAvKipcclxuICAgKiAqc3RyaW5nIG9yIGFycmF5IG9mIHN0cmluZ3MgYXMgcmVnZXgqIC0gYWN0aW9ucyB0eXBlcyB0byBiZSBoaWRkZW4gLyBzaG93biBpbiB0aGUgbW9uaXRvcnMgKHdoaWxlIHBhc3NlZCB0byB0aGUgcmVkdWNlcnMpLlxyXG4gICAqIElmIGBhY3Rpb25zQWxsb3dsaXN0YCBzcGVjaWZpZWQsIGBhY3Rpb25zRGVueWxpc3RgIGlzIGlnbm9yZWQuXHJcbiAgICovXHJcbiAgYWN0aW9uc0RlbnlsaXN0Pzogc3RyaW5nIHwgc3RyaW5nW11cclxuICAvKipcclxuICAgKiAqc3RyaW5nIG9yIGFycmF5IG9mIHN0cmluZ3MgYXMgcmVnZXgqIC0gYWN0aW9ucyB0eXBlcyB0byBiZSBoaWRkZW4gLyBzaG93biBpbiB0aGUgbW9uaXRvcnMgKHdoaWxlIHBhc3NlZCB0byB0aGUgcmVkdWNlcnMpLlxyXG4gICAqIElmIGBhY3Rpb25zQWxsb3dsaXN0YCBzcGVjaWZpZWQsIGBhY3Rpb25zRGVueWxpc3RgIGlzIGlnbm9yZWQuXHJcbiAgICovXHJcbiAgYWN0aW9uc0FsbG93bGlzdD86IHN0cmluZyB8IHN0cmluZ1tdXHJcbiAgLyoqXHJcbiAgICogY2FsbGVkIGZvciBldmVyeSBhY3Rpb24gYmVmb3JlIHNlbmRpbmcsIHRha2VzIGBzdGF0ZWAgYW5kIGBhY3Rpb25gIG9iamVjdCwgYW5kIHJldHVybnMgYHRydWVgIGluIGNhc2UgaXQgYWxsb3dzIHNlbmRpbmcgdGhlIGN1cnJlbnQgZGF0YSB0byB0aGUgbW9uaXRvci5cclxuICAgKiBVc2UgaXQgYXMgYSBtb3JlIGFkdmFuY2VkIHZlcnNpb24gb2YgYGFjdGlvbnNEZW55bGlzdGAvYGFjdGlvbnNBbGxvd2xpc3RgIHBhcmFtZXRlcnMuXHJcbiAgICovXHJcbiAgcHJlZGljYXRlPzogPFMsIEEgZXh0ZW5kcyBBY3Rpb24+KHN0YXRlOiBTLCBhY3Rpb246IEEpID0+IGJvb2xlYW5cclxuICAvKipcclxuICAgKiBpZiBzcGVjaWZpZWQgYXMgYGZhbHNlYCwgaXQgd2lsbCBub3QgcmVjb3JkIHRoZSBjaGFuZ2VzIHRpbGwgY2xpY2tpbmcgb24gYFN0YXJ0IHJlY29yZGluZ2AgYnV0dG9uLlxyXG4gICAqIEF2YWlsYWJsZSBvbmx5IGZvciBSZWR1eCBlbmhhbmNlciwgZm9yIG90aGVycyB1c2UgYGF1dG9QYXVzZWAuXHJcbiAgICpcclxuICAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgICovXHJcbiAgc2hvdWxkUmVjb3JkQ2hhbmdlcz86IGJvb2xlYW5cclxuICAvKipcclxuICAgKiBpZiBzcGVjaWZpZWQsIHdoZW5ldmVyIGNsaWNraW5nIG9uIGBQYXVzZSByZWNvcmRpbmdgIGJ1dHRvbiBhbmQgdGhlcmUgYXJlIGFjdGlvbnMgaW4gdGhlIGhpc3RvcnkgbG9nLCB3aWxsIGFkZCB0aGlzIGFjdGlvbiB0eXBlLlxyXG4gICAqIElmIG5vdCBzcGVjaWZpZWQsIHdpbGwgY29tbWl0IHdoZW4gcGF1c2VkLiBBdmFpbGFibGUgb25seSBmb3IgUmVkdXggZW5oYW5jZXIuXHJcbiAgICpcclxuICAgKiBAZGVmYXVsdCBcIkBAUEFVU0VEXCJcIlxyXG4gICAqL1xyXG4gIHBhdXNlQWN0aW9uVHlwZT86IHN0cmluZ1xyXG4gIC8qKlxyXG4gICAqIGF1dG8gcGF1c2VzIHdoZW4gdGhlIGV4dGVuc2lvbuKAmXMgd2luZG93IGlzIG5vdCBvcGVuZWQsIGFuZCBzbyBoYXMgemVybyBpbXBhY3Qgb24geW91ciBhcHAgd2hlbiBub3QgaW4gdXNlLlxyXG4gICAqIE5vdCBhdmFpbGFibGUgZm9yIFJlZHV4IGVuaGFuY2VyIChhcyBpdCBhbHJlYWR5IGRvZXMgaXQgYnV0IHN0b3JpbmcgdGhlIGRhdGEgdG8gYmUgc2VudCkuXHJcbiAgICpcclxuICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAqL1xyXG4gIGF1dG9QYXVzZT86IGJvb2xlYW5cclxuICAvKipcclxuICAgKiBpZiBzcGVjaWZpZWQgYXMgYHRydWVgLCBpdCB3aWxsIG5vdCBhbGxvdyBhbnkgbm9uLW1vbml0b3IgYWN0aW9ucyB0byBiZSBkaXNwYXRjaGVkIHRpbGwgY2xpY2tpbmcgb24gYFVubG9jayBjaGFuZ2VzYCBidXR0b24uXHJcbiAgICogQXZhaWxhYmxlIG9ubHkgZm9yIFJlZHV4IGVuaGFuY2VyLlxyXG4gICAqXHJcbiAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgKi9cclxuICBzaG91bGRTdGFydExvY2tlZD86IGJvb2xlYW5cclxuICAvKipcclxuICAgKiBpZiBzZXQgdG8gYGZhbHNlYCwgd2lsbCBub3QgcmVjb21wdXRlIHRoZSBzdGF0ZXMgb24gaG90IHJlbG9hZGluZyAob3Igb24gcmVwbGFjaW5nIHRoZSByZWR1Y2VycykuIEF2YWlsYWJsZSBvbmx5IGZvciBSZWR1eCBlbmhhbmNlci5cclxuICAgKlxyXG4gICAqIEBkZWZhdWx0IHRydWVcclxuICAgKi9cclxuICBzaG91bGRIb3RSZWxvYWQ/OiBib29sZWFuXHJcbiAgLyoqXHJcbiAgICogaWYgc3BlY2lmaWVkIGFzIGB0cnVlYCwgd2hlbmV2ZXIgdGhlcmUncyBhbiBleGNlcHRpb24gaW4gcmVkdWNlcnMsIHRoZSBtb25pdG9ycyB3aWxsIHNob3cgdGhlIGVycm9yIG1lc3NhZ2UsIGFuZCBuZXh0IGFjdGlvbnMgd2lsbCBub3QgYmUgZGlzcGF0Y2hlZC5cclxuICAgKlxyXG4gICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICovXHJcbiAgc2hvdWxkQ2F0Y2hFcnJvcnM/OiBib29sZWFuXHJcbiAgLyoqXHJcbiAgICogSWYgeW91IHdhbnQgdG8gcmVzdHJpY3QgdGhlIGV4dGVuc2lvbiwgc3BlY2lmeSB0aGUgZmVhdHVyZXMgeW91IGFsbG93LlxyXG4gICAqIElmIG5vdCBzcGVjaWZpZWQsIGFsbCBvZiB0aGUgZmVhdHVyZXMgYXJlIGVuYWJsZWQuIFdoZW4gc2V0IGFzIGFuIG9iamVjdCwgb25seSB0aG9zZSBpbmNsdWRlZCBhcyBgdHJ1ZWAgd2lsbCBiZSBhbGxvd2VkLlxyXG4gICAqIE5vdGUgdGhhdCBleGNlcHQgYHRydWVgL2BmYWxzZWAsIGBpbXBvcnRgIGFuZCBgZXhwb3J0YCBjYW4gYmUgc2V0IGFzIGBjdXN0b21gICh3aGljaCBpcyBieSBkZWZhdWx0IGZvciBSZWR1eCBlbmhhbmNlciksIG1lYW5pbmcgdGhhdCB0aGUgaW1wb3J0aW5nL2V4cG9ydGluZyBvY2N1cnMgb24gdGhlIGNsaWVudCBzaWRlLlxyXG4gICAqIE90aGVyd2lzZSwgeW91J2xsIGdldC9zZXQgdGhlIGRhdGEgcmlnaHQgZnJvbSB0aGUgbW9uaXRvciBwYXJ0LlxyXG4gICAqL1xyXG4gIGZlYXR1cmVzPzoge1xyXG4gICAgLyoqXHJcbiAgICAgKiBzdGFydC9wYXVzZSByZWNvcmRpbmcgb2YgZGlzcGF0Y2hlZCBhY3Rpb25zXHJcbiAgICAgKi9cclxuICAgIHBhdXNlPzogYm9vbGVhblxyXG4gICAgLyoqXHJcbiAgICAgKiBsb2NrL3VubG9jayBkaXNwYXRjaGluZyBhY3Rpb25zIGFuZCBzaWRlIGVmZmVjdHNcclxuICAgICAqL1xyXG4gICAgbG9jaz86IGJvb2xlYW5cclxuICAgIC8qKlxyXG4gICAgICogcGVyc2lzdCBzdGF0ZXMgb24gcGFnZSByZWxvYWRpbmdcclxuICAgICAqL1xyXG4gICAgcGVyc2lzdD86IGJvb2xlYW5cclxuICAgIC8qKlxyXG4gICAgICogZXhwb3J0IGhpc3Rvcnkgb2YgYWN0aW9ucyBpbiBhIGZpbGVcclxuICAgICAqL1xyXG4gICAgZXhwb3J0PzogYm9vbGVhbiB8ICdjdXN0b20nXHJcbiAgICAvKipcclxuICAgICAqIGltcG9ydCBoaXN0b3J5IG9mIGFjdGlvbnMgZnJvbSBhIGZpbGVcclxuICAgICAqL1xyXG4gICAgaW1wb3J0PzogYm9vbGVhbiB8ICdjdXN0b20nXHJcbiAgICAvKipcclxuICAgICAqIGp1bXAgYmFjayBhbmQgZm9ydGggKHRpbWUgdHJhdmVsbGluZylcclxuICAgICAqL1xyXG4gICAganVtcD86IGJvb2xlYW5cclxuICAgIC8qKlxyXG4gICAgICogc2tpcCAoY2FuY2VsKSBhY3Rpb25zXHJcbiAgICAgKi9cclxuICAgIHNraXA/OiBib29sZWFuXHJcbiAgICAvKipcclxuICAgICAqIGRyYWcgYW5kIGRyb3AgYWN0aW9ucyBpbiB0aGUgaGlzdG9yeSBsaXN0XHJcbiAgICAgKi9cclxuICAgIHJlb3JkZXI/OiBib29sZWFuXHJcbiAgICAvKipcclxuICAgICAqIGRpc3BhdGNoIGN1c3RvbSBhY3Rpb25zIG9yIGFjdGlvbiBjcmVhdG9yc1xyXG4gICAgICovXHJcbiAgICBkaXNwYXRjaD86IGJvb2xlYW5cclxuICAgIC8qKlxyXG4gICAgICogZ2VuZXJhdGUgdGVzdHMgZm9yIHRoZSBzZWxlY3RlZCBhY3Rpb25zXHJcbiAgICAgKi9cclxuICAgIHRlc3Q/OiBib29sZWFuXHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNldCB0byB0cnVlIG9yIGEgc3RhY2t0cmFjZS1yZXR1cm5pbmcgZnVuY3Rpb24gdG8gcmVjb3JkIGNhbGwgc3RhY2sgdHJhY2VzIGZvciBkaXNwYXRjaGVkIGFjdGlvbnMuXHJcbiAgICogRGVmYXVsdHMgdG8gZmFsc2UuXHJcbiAgICovXHJcbiAgdHJhY2U/OiBib29sZWFuIHwgKDxBIGV4dGVuZHMgQWN0aW9uPihhY3Rpb246IEEpID0+IHN0cmluZylcclxuICAvKipcclxuICAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2Ygc3RhY2sgdHJhY2UgZW50cmllcyB0byByZWNvcmQgcGVyIGFjdGlvbi4gRGVmYXVsdHMgdG8gMTAuXHJcbiAgICovXHJcbiAgdHJhY2VMaW1pdD86IG51bWJlclxyXG59XHJcblxyXG50eXBlIENvbXBvc2UgPSB0eXBlb2YgY29tcG9zZVxyXG5cclxuaW50ZXJmYWNlIENvbXBvc2VXaXRoRGV2VG9vbHMge1xyXG4gIChvcHRpb25zOiBEZXZUb29sc0VuaGFuY2VyT3B0aW9ucyk6IENvbXBvc2VcclxuICA8U3RvcmVFeHQ+KC4uLmZ1bmNzOiBTdG9yZUVuaGFuY2VyPFN0b3JlRXh0PltdKTogU3RvcmVFbmhhbmNlcjxTdG9yZUV4dD5cclxufVxyXG5cclxuLyoqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBjb25zdCBjb21wb3NlV2l0aERldlRvb2xzOiBDb21wb3NlV2l0aERldlRvb2xzID1cclxuICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJlxyXG4gICh3aW5kb3cgYXMgYW55KS5fX1JFRFVYX0RFVlRPT0xTX0VYVEVOU0lPTl9DT01QT1NFX19cclxuICAgID8gKHdpbmRvdyBhcyBhbnkpLl9fUkVEVVhfREVWVE9PTFNfRVhURU5TSU9OX0NPTVBPU0VfX1xyXG4gICAgOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWRcclxuICAgICAgICBpZiAodHlwZW9mIGFyZ3VtZW50c1swXSA9PT0gJ29iamVjdCcpIHJldHVybiBjb21wb3NlXHJcbiAgICAgICAgcmV0dXJuIGNvbXBvc2UuYXBwbHkobnVsbCwgYXJndW1lbnRzIGFzIGFueSBhcyBGdW5jdGlvbltdKVxyXG4gICAgICB9XHJcblxyXG4vKipcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGRldlRvb2xzRW5oYW5jZXI6IHtcclxuICAob3B0aW9uczogRGV2VG9vbHNFbmhhbmNlck9wdGlvbnMpOiBTdG9yZUVuaGFuY2VyPGFueT5cclxufSA9XHJcbiAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgKHdpbmRvdyBhcyBhbnkpLl9fUkVEVVhfREVWVE9PTFNfRVhURU5TSU9OX19cclxuICAgID8gKHdpbmRvdyBhcyBhbnkpLl9fUkVEVVhfREVWVE9PTFNfRVhURU5TSU9OX19cclxuICAgIDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAobm9vcCkge1xyXG4gICAgICAgICAgcmV0dXJuIG5vb3BcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuIiwgIi8qKlxyXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIHBhc3NlZCB2YWx1ZSBpcyBcInBsYWluXCIgb2JqZWN0LCBpLmUuIGFuIG9iamVjdCB3aG9zZVxyXG4gKiBwcm90b3R5cGUgaXMgdGhlIHJvb3QgYE9iamVjdC5wcm90b3R5cGVgLiBUaGlzIGluY2x1ZGVzIG9iamVjdHMgY3JlYXRlZFxyXG4gKiB1c2luZyBvYmplY3QgbGl0ZXJhbHMsIGJ1dCBub3QgZm9yIGluc3RhbmNlIGZvciBjbGFzcyBpbnN0YW5jZXMuXHJcbiAqXHJcbiAqIEBwYXJhbSB7YW55fSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cclxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIGFyZ3VtZW50IGFwcGVhcnMgdG8gYmUgYSBwbGFpbiBvYmplY3QuXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBvYmplY3Qge1xyXG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09PSBudWxsKSByZXR1cm4gZmFsc2VcclxuXHJcbiAgbGV0IHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKVxyXG4gIGlmIChwcm90byA9PT0gbnVsbCkgcmV0dXJuIHRydWVcclxuXHJcbiAgbGV0IGJhc2VQcm90byA9IHByb3RvXHJcbiAgd2hpbGUgKE9iamVjdC5nZXRQcm90b3R5cGVPZihiYXNlUHJvdG8pICE9PSBudWxsKSB7XHJcbiAgICBiYXNlUHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYmFzZVByb3RvKVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHByb3RvID09PSBiYXNlUHJvdG9cclxufVxyXG4iLCAiaW1wb3J0IHR5cGUgeyBNaWRkbGV3YXJlLCBBbnlBY3Rpb24gfSBmcm9tICdyZWR1eCdcclxuaW1wb3J0IHR5cGUgeyBUaHVua01pZGRsZXdhcmUgfSBmcm9tICdyZWR1eC10aHVuaydcclxuaW1wb3J0IHRodW5rTWlkZGxld2FyZSBmcm9tICdyZWR1eC10aHVuaydcclxuaW1wb3J0IHR5cGUgeyBBY3Rpb25DcmVhdG9ySW52YXJpYW50TWlkZGxld2FyZU9wdGlvbnMgfSBmcm9tICcuL2FjdGlvbkNyZWF0b3JJbnZhcmlhbnRNaWRkbGV3YXJlJ1xyXG5pbXBvcnQgeyBjcmVhdGVBY3Rpb25DcmVhdG9ySW52YXJpYW50TWlkZGxld2FyZSB9IGZyb20gJy4vYWN0aW9uQ3JlYXRvckludmFyaWFudE1pZGRsZXdhcmUnXHJcbmltcG9ydCB0eXBlIHsgSW1tdXRhYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlT3B0aW9ucyB9IGZyb20gJy4vaW1tdXRhYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlJ1xyXG4vKiBQUk9EX1NUQVJUX1JFTU9WRV9VTUQgKi9cclxuaW1wb3J0IHsgY3JlYXRlSW1tdXRhYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlIH0gZnJvbSAnLi9pbW11dGFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmUnXHJcbi8qIFBST0RfU1RPUF9SRU1PVkVfVU1EICovXHJcblxyXG5pbXBvcnQgdHlwZSB7IFNlcmlhbGl6YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZU9wdGlvbnMgfSBmcm9tICcuL3NlcmlhbGl6YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZSdcclxuaW1wb3J0IHsgY3JlYXRlU2VyaWFsaXphYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlIH0gZnJvbSAnLi9zZXJpYWxpemFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmUnXHJcbmltcG9ydCB0eXBlIHsgRXhjbHVkZUZyb21UdXBsZSB9IGZyb20gJy4vdHNIZWxwZXJzJ1xyXG5pbXBvcnQgeyBNaWRkbGV3YXJlQXJyYXkgfSBmcm9tICcuL3V0aWxzJ1xyXG5cclxuZnVuY3Rpb24gaXNCb29sZWFuKHg6IGFueSk6IHggaXMgYm9vbGVhbiB7XHJcbiAgcmV0dXJuIHR5cGVvZiB4ID09PSAnYm9vbGVhbidcclxufVxyXG5cclxuaW50ZXJmYWNlIFRodW5rT3B0aW9uczxFID0gYW55PiB7XHJcbiAgZXh0cmFBcmd1bWVudDogRVxyXG59XHJcblxyXG5pbnRlcmZhY2UgR2V0RGVmYXVsdE1pZGRsZXdhcmVPcHRpb25zIHtcclxuICB0aHVuaz86IGJvb2xlYW4gfCBUaHVua09wdGlvbnNcclxuICBpbW11dGFibGVDaGVjaz86IGJvb2xlYW4gfCBJbW11dGFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmVPcHRpb25zXHJcbiAgc2VyaWFsaXphYmxlQ2hlY2s/OiBib29sZWFuIHwgU2VyaWFsaXphYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlT3B0aW9uc1xyXG4gIGFjdGlvbkNyZWF0b3JDaGVjaz86IGJvb2xlYW4gfCBBY3Rpb25DcmVhdG9ySW52YXJpYW50TWlkZGxld2FyZU9wdGlvbnNcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgVGh1bmtNaWRkbGV3YXJlRm9yPFxyXG4gIFMsXHJcbiAgTyBleHRlbmRzIEdldERlZmF1bHRNaWRkbGV3YXJlT3B0aW9ucyA9IHt9XHJcbj4gPSBPIGV4dGVuZHMge1xyXG4gIHRodW5rOiBmYWxzZVxyXG59XHJcbiAgPyBuZXZlclxyXG4gIDogTyBleHRlbmRzIHsgdGh1bms6IHsgZXh0cmFBcmd1bWVudDogaW5mZXIgRSB9IH1cclxuICA/IFRodW5rTWlkZGxld2FyZTxTLCBBbnlBY3Rpb24sIEU+XHJcbiAgOiBUaHVua01pZGRsZXdhcmU8UywgQW55QWN0aW9uPlxyXG5cclxuZXhwb3J0IHR5cGUgQ3VycmllZEdldERlZmF1bHRNaWRkbGV3YXJlPFMgPSBhbnk+ID0gPFxyXG4gIE8gZXh0ZW5kcyBQYXJ0aWFsPEdldERlZmF1bHRNaWRkbGV3YXJlT3B0aW9ucz4gPSB7XHJcbiAgICB0aHVuazogdHJ1ZVxyXG4gICAgaW1tdXRhYmxlQ2hlY2s6IHRydWVcclxuICAgIHNlcmlhbGl6YWJsZUNoZWNrOiB0cnVlXHJcbiAgICBhY3Rpb25DcmVhdG9yQ2hlY2s6IHRydWVcclxuICB9XHJcbj4oXHJcbiAgb3B0aW9ucz86IE9cclxuKSA9PiBNaWRkbGV3YXJlQXJyYXk8RXhjbHVkZUZyb21UdXBsZTxbVGh1bmtNaWRkbGV3YXJlRm9yPFMsIE8+XSwgbmV2ZXI+PlxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGN1cnJ5R2V0RGVmYXVsdE1pZGRsZXdhcmU8XHJcbiAgUyA9IGFueVxyXG4+KCk6IEN1cnJpZWRHZXREZWZhdWx0TWlkZGxld2FyZTxTPiB7XHJcbiAgcmV0dXJuIGZ1bmN0aW9uIGN1cnJpZWRHZXREZWZhdWx0TWlkZGxld2FyZShvcHRpb25zKSB7XHJcbiAgICByZXR1cm4gZ2V0RGVmYXVsdE1pZGRsZXdhcmUob3B0aW9ucylcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIGFueSBhcnJheSBjb250YWluaW5nIHRoZSBkZWZhdWx0IG1pZGRsZXdhcmUgaW5zdGFsbGVkIGJ5XHJcbiAqIGBjb25maWd1cmVTdG9yZSgpYC4gVXNlZnVsIGlmIHlvdSB3YW50IHRvIGNvbmZpZ3VyZSB5b3VyIHN0b3JlIHdpdGggYSBjdXN0b21cclxuICogYG1pZGRsZXdhcmVgIGFycmF5IGJ1dCBzdGlsbCBrZWVwIHRoZSBkZWZhdWx0IHNldC5cclxuICpcclxuICogQHJldHVybiBUaGUgZGVmYXVsdCBtaWRkbGV3YXJlIHVzZWQgYnkgYGNvbmZpZ3VyZVN0b3JlKClgLlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqXHJcbiAqIEBkZXByZWNhdGVkIFByZWZlciB0byB1c2UgdGhlIGNhbGxiYWNrIG5vdGF0aW9uIGZvciB0aGUgYG1pZGRsZXdhcmVgIG9wdGlvbiBpbiBgY29uZmlndXJlU3RvcmVgXHJcbiAqIHRvIGFjY2VzcyBhIHByZS10eXBlZCBgZ2V0RGVmYXVsdE1pZGRsZXdhcmVgIGluc3RlYWQuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdE1pZGRsZXdhcmU8XHJcbiAgUyA9IGFueSxcclxuICBPIGV4dGVuZHMgUGFydGlhbDxHZXREZWZhdWx0TWlkZGxld2FyZU9wdGlvbnM+ID0ge1xyXG4gICAgdGh1bms6IHRydWVcclxuICAgIGltbXV0YWJsZUNoZWNrOiB0cnVlXHJcbiAgICBzZXJpYWxpemFibGVDaGVjazogdHJ1ZVxyXG4gICAgYWN0aW9uQ3JlYXRvckNoZWNrOiB0cnVlXHJcbiAgfVxyXG4+KFxyXG4gIG9wdGlvbnM6IE8gPSB7fSBhcyBPXHJcbik6IE1pZGRsZXdhcmVBcnJheTxFeGNsdWRlRnJvbVR1cGxlPFtUaHVua01pZGRsZXdhcmVGb3I8UywgTz5dLCBuZXZlcj4+IHtcclxuICBjb25zdCB7XHJcbiAgICB0aHVuayA9IHRydWUsXHJcbiAgICBpbW11dGFibGVDaGVjayA9IHRydWUsXHJcbiAgICBzZXJpYWxpemFibGVDaGVjayA9IHRydWUsXHJcbiAgICBhY3Rpb25DcmVhdG9yQ2hlY2sgPSB0cnVlLFxyXG4gIH0gPSBvcHRpb25zXHJcblxyXG4gIGxldCBtaWRkbGV3YXJlQXJyYXkgPSBuZXcgTWlkZGxld2FyZUFycmF5PE1pZGRsZXdhcmVbXT4oKVxyXG5cclxuICBpZiAodGh1bmspIHtcclxuICAgIGlmIChpc0Jvb2xlYW4odGh1bmspKSB7XHJcbiAgICAgIG1pZGRsZXdhcmVBcnJheS5wdXNoKHRodW5rTWlkZGxld2FyZSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG1pZGRsZXdhcmVBcnJheS5wdXNoKFxyXG4gICAgICAgIHRodW5rTWlkZGxld2FyZS53aXRoRXh0cmFBcmd1bWVudCh0aHVuay5leHRyYUFyZ3VtZW50KVxyXG4gICAgICApXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xyXG4gICAgaWYgKGltbXV0YWJsZUNoZWNrKSB7XHJcbiAgICAgIC8qIFBST0RfU1RBUlRfUkVNT1ZFX1VNRCAqL1xyXG4gICAgICBsZXQgaW1tdXRhYmxlT3B0aW9uczogSW1tdXRhYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlT3B0aW9ucyA9IHt9XHJcblxyXG4gICAgICBpZiAoIWlzQm9vbGVhbihpbW11dGFibGVDaGVjaykpIHtcclxuICAgICAgICBpbW11dGFibGVPcHRpb25zID0gaW1tdXRhYmxlQ2hlY2tcclxuICAgICAgfVxyXG5cclxuICAgICAgbWlkZGxld2FyZUFycmF5LnVuc2hpZnQoXHJcbiAgICAgICAgY3JlYXRlSW1tdXRhYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlKGltbXV0YWJsZU9wdGlvbnMpXHJcbiAgICAgIClcclxuICAgICAgLyogUFJPRF9TVE9QX1JFTU9WRV9VTUQgKi9cclxuICAgIH1cclxuXHJcbiAgICBpZiAoc2VyaWFsaXphYmxlQ2hlY2spIHtcclxuICAgICAgbGV0IHNlcmlhbGl6YWJsZU9wdGlvbnM6IFNlcmlhbGl6YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZU9wdGlvbnMgPSB7fVxyXG5cclxuICAgICAgaWYgKCFpc0Jvb2xlYW4oc2VyaWFsaXphYmxlQ2hlY2spKSB7XHJcbiAgICAgICAgc2VyaWFsaXphYmxlT3B0aW9ucyA9IHNlcmlhbGl6YWJsZUNoZWNrXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIG1pZGRsZXdhcmVBcnJheS5wdXNoKFxyXG4gICAgICAgIGNyZWF0ZVNlcmlhbGl6YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZShzZXJpYWxpemFibGVPcHRpb25zKVxyXG4gICAgICApXHJcbiAgICB9XHJcbiAgICBpZiAoYWN0aW9uQ3JlYXRvckNoZWNrKSB7XHJcbiAgICAgIGxldCBhY3Rpb25DcmVhdG9yT3B0aW9uczogQWN0aW9uQ3JlYXRvckludmFyaWFudE1pZGRsZXdhcmVPcHRpb25zID0ge31cclxuXHJcbiAgICAgIGlmICghaXNCb29sZWFuKGFjdGlvbkNyZWF0b3JDaGVjaykpIHtcclxuICAgICAgICBhY3Rpb25DcmVhdG9yT3B0aW9ucyA9IGFjdGlvbkNyZWF0b3JDaGVja1xyXG4gICAgICB9XHJcblxyXG4gICAgICBtaWRkbGV3YXJlQXJyYXkudW5zaGlmdChcclxuICAgICAgICBjcmVhdGVBY3Rpb25DcmVhdG9ySW52YXJpYW50TWlkZGxld2FyZShhY3Rpb25DcmVhdG9yT3B0aW9ucylcclxuICAgICAgKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIG1pZGRsZXdhcmVBcnJheSBhcyBhbnlcclxufVxyXG4iLCAiaW1wb3J0IHR5cGUgeyBNaWRkbGV3YXJlLCBTdG9yZUVuaGFuY2VyIH0gZnJvbSAncmVkdXgnXHJcbmltcG9ydCB0eXBlIHsgRW5oYW5jZXJBcnJheSwgTWlkZGxld2FyZUFycmF5IH0gZnJvbSAnLi91dGlscydcclxuXHJcbi8qKlxyXG4gKiByZXR1cm4gVHJ1ZSBpZiBUIGlzIGBhbnlgLCBvdGhlcndpc2UgcmV0dXJuIEZhbHNlXHJcbiAqIHRha2VuIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2pvb25ob2Noby90c2RlZlxyXG4gKlxyXG4gKiBAaW50ZXJuYWxcclxuICovXHJcbmV4cG9ydCB0eXBlIElzQW55PFQsIFRydWUsIEZhbHNlID0gbmV2ZXI+ID1cclxuICAvLyB0ZXN0IGlmIHdlIGFyZSBnb2luZyB0aGUgbGVmdCBBTkQgcmlnaHQgcGF0aCBpbiB0aGUgY29uZGl0aW9uXHJcbiAgdHJ1ZSB8IGZhbHNlIGV4dGVuZHMgKFQgZXh0ZW5kcyBuZXZlciA/IHRydWUgOiBmYWxzZSkgPyBUcnVlIDogRmFsc2VcclxuXHJcbi8qKlxyXG4gKiByZXR1cm4gVHJ1ZSBpZiBUIGlzIGB1bmtub3duYCwgb3RoZXJ3aXNlIHJldHVybiBGYWxzZVxyXG4gKiB0YWtlbiBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9qb29uaG9jaG8vdHNkZWZcclxuICpcclxuICogQGludGVybmFsXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBJc1Vua25vd248VCwgVHJ1ZSwgRmFsc2UgPSBuZXZlcj4gPSB1bmtub3duIGV4dGVuZHMgVFxyXG4gID8gSXNBbnk8VCwgRmFsc2UsIFRydWU+XHJcbiAgOiBGYWxzZVxyXG5cclxuZXhwb3J0IHR5cGUgRmFsbGJhY2tJZlVua25vd248VCwgRmFsbGJhY2s+ID0gSXNVbmtub3duPFQsIEZhbGxiYWNrLCBUPlxyXG5cclxuLyoqXHJcbiAqIEBpbnRlcm5hbFxyXG4gKi9cclxuZXhwb3J0IHR5cGUgSWZNYXliZVVuZGVmaW5lZDxQLCBUcnVlLCBGYWxzZT4gPSBbdW5kZWZpbmVkXSBleHRlbmRzIFtQXVxyXG4gID8gVHJ1ZVxyXG4gIDogRmFsc2VcclxuXHJcbi8qKlxyXG4gKiBAaW50ZXJuYWxcclxuICovXHJcbmV4cG9ydCB0eXBlIElmVm9pZDxQLCBUcnVlLCBGYWxzZT4gPSBbdm9pZF0gZXh0ZW5kcyBbUF0gPyBUcnVlIDogRmFsc2VcclxuXHJcbi8qKlxyXG4gKiBAaW50ZXJuYWxcclxuICovXHJcbmV4cG9ydCB0eXBlIElzRW1wdHlPYmo8VCwgVHJ1ZSwgRmFsc2UgPSBuZXZlcj4gPSBUIGV4dGVuZHMgYW55XHJcbiAgPyBrZXlvZiBUIGV4dGVuZHMgbmV2ZXJcclxuICAgID8gSXNVbmtub3duPFQsIEZhbHNlLCBJZk1heWJlVW5kZWZpbmVkPFQsIEZhbHNlLCBJZlZvaWQ8VCwgRmFsc2UsIFRydWU+Pj5cclxuICAgIDogRmFsc2VcclxuICA6IG5ldmVyXHJcblxyXG4vKipcclxuICogcmV0dXJucyBUcnVlIGlmIFRTIHZlcnNpb24gaXMgYWJvdmUgMy41LCBGYWxzZSBpZiBiZWxvdy5cclxuICogdXNlcyBmZWF0dXJlIGRldGVjdGlvbiB0byBkZXRlY3QgVFMgdmVyc2lvbiA+PSAzLjVcclxuICogKiB2ZXJzaW9ucyBiZWxvdyAzLjUgd2lsbCByZXR1cm4gYHt9YCBmb3IgdW5yZXNvbHZhYmxlIGludGVyZmVyZW5jZVxyXG4gKiAqIHZlcnNpb25zIGFib3ZlIHdpbGwgcmV0dXJuIGB1bmtub3duYFxyXG4gKlxyXG4gKiBAaW50ZXJuYWxcclxuICovXHJcbmV4cG9ydCB0eXBlIEF0TGVhc3RUUzM1PFRydWUsIEZhbHNlPiA9IFtUcnVlLCBGYWxzZV1bSXNVbmtub3duPFxyXG4gIFJldHVyblR5cGU8PFQ+KCkgPT4gVD4sXHJcbiAgMCxcclxuICAxXHJcbj5dXHJcblxyXG4vKipcclxuICogQGludGVybmFsXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBJc1Vua25vd25Pck5vbkluZmVycmFibGU8VCwgVHJ1ZSwgRmFsc2U+ID0gQXRMZWFzdFRTMzU8XHJcbiAgSXNVbmtub3duPFQsIFRydWUsIEZhbHNlPixcclxuICBJc0VtcHR5T2JqPFQsIFRydWUsIElzVW5rbm93bjxULCBUcnVlLCBGYWxzZT4+XHJcbj5cclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0IGEgVW5pb24gdHlwZSBgKEF8QilgIHRvIGFuIGludGVyc2VjdGlvbiB0eXBlIGAoQSZCKWBcclxuICovXHJcbmV4cG9ydCB0eXBlIFVuaW9uVG9JbnRlcnNlY3Rpb248VT4gPSAoXHJcbiAgVSBleHRlbmRzIGFueSA/IChrOiBVKSA9PiB2b2lkIDogbmV2ZXJcclxuKSBleHRlbmRzIChrOiBpbmZlciBJKSA9PiB2b2lkXHJcbiAgPyBJXHJcbiAgOiBuZXZlclxyXG5cclxuLy8gQXBwZWFycyB0byBoYXZlIGEgY29udmVuaWVudCBzaWRlIGVmZmVjdCBvZiBpZ25vcmluZyBgbmV2ZXJgIGV2ZW4gaWYgdGhhdCdzIG5vdCB3aGF0IHlvdSBzcGVjaWZpZWRcclxuZXhwb3J0IHR5cGUgRXhjbHVkZUZyb21UdXBsZTxULCBFLCBBY2MgZXh0ZW5kcyB1bmtub3duW10gPSBbXT4gPSBUIGV4dGVuZHMgW1xyXG4gIGluZmVyIEhlYWQsXHJcbiAgLi4uaW5mZXIgVGFpbFxyXG5dXHJcbiAgPyBFeGNsdWRlRnJvbVR1cGxlPFRhaWwsIEUsIFsuLi5BY2MsIC4uLihbSGVhZF0gZXh0ZW5kcyBbRV0gPyBbXSA6IFtIZWFkXSldPlxyXG4gIDogQWNjXHJcblxyXG50eXBlIEV4dHJhY3REaXNwYXRjaEZyb21NaWRkbGV3YXJlVHVwbGU8XHJcbiAgTWlkZGxld2FyZVR1cGxlIGV4dGVuZHMgYW55W10sXHJcbiAgQWNjIGV4dGVuZHMge31cclxuPiA9IE1pZGRsZXdhcmVUdXBsZSBleHRlbmRzIFtpbmZlciBIZWFkLCAuLi5pbmZlciBUYWlsXVxyXG4gID8gRXh0cmFjdERpc3BhdGNoRnJvbU1pZGRsZXdhcmVUdXBsZTxcclxuICAgICAgVGFpbCxcclxuICAgICAgQWNjICYgKEhlYWQgZXh0ZW5kcyBNaWRkbGV3YXJlPGluZmVyIEQ+ID8gSXNBbnk8RCwge30sIEQ+IDoge30pXHJcbiAgICA+XHJcbiAgOiBBY2NcclxuXHJcbmV4cG9ydCB0eXBlIEV4dHJhY3REaXNwYXRjaEV4dGVuc2lvbnM8TT4gPSBNIGV4dGVuZHMgTWlkZGxld2FyZUFycmF5PFxyXG4gIGluZmVyIE1pZGRsZXdhcmVUdXBsZVxyXG4+XHJcbiAgPyBFeHRyYWN0RGlzcGF0Y2hGcm9tTWlkZGxld2FyZVR1cGxlPE1pZGRsZXdhcmVUdXBsZSwge30+XHJcbiAgOiBNIGV4dGVuZHMgUmVhZG9ubHlBcnJheTxNaWRkbGV3YXJlPlxyXG4gID8gRXh0cmFjdERpc3BhdGNoRnJvbU1pZGRsZXdhcmVUdXBsZTxbLi4uTV0sIHt9PlxyXG4gIDogbmV2ZXJcclxuXHJcbnR5cGUgRXh0cmFjdFN0b3JlRXh0ZW5zaW9uc0Zyb21FbmhhbmNlclR1cGxlPFxyXG4gIEVuaGFuY2VyVHVwbGUgZXh0ZW5kcyBhbnlbXSxcclxuICBBY2MgZXh0ZW5kcyB7fVxyXG4+ID0gRW5oYW5jZXJUdXBsZSBleHRlbmRzIFtpbmZlciBIZWFkLCAuLi5pbmZlciBUYWlsXVxyXG4gID8gRXh0cmFjdFN0b3JlRXh0ZW5zaW9uc0Zyb21FbmhhbmNlclR1cGxlPFxyXG4gICAgICBUYWlsLFxyXG4gICAgICBBY2MgJiAoSGVhZCBleHRlbmRzIFN0b3JlRW5oYW5jZXI8aW5mZXIgRXh0PiA/IElzQW55PEV4dCwge30sIEV4dD4gOiB7fSlcclxuICAgID5cclxuICA6IEFjY1xyXG5cclxuZXhwb3J0IHR5cGUgRXh0cmFjdFN0b3JlRXh0ZW5zaW9uczxFPiA9IEUgZXh0ZW5kcyBFbmhhbmNlckFycmF5PFxyXG4gIGluZmVyIEVuaGFuY2VyVHVwbGVcclxuPlxyXG4gID8gRXh0cmFjdFN0b3JlRXh0ZW5zaW9uc0Zyb21FbmhhbmNlclR1cGxlPEVuaGFuY2VyVHVwbGUsIHt9PlxyXG4gIDogRSBleHRlbmRzIFJlYWRvbmx5QXJyYXk8U3RvcmVFbmhhbmNlcj5cclxuICA/IFVuaW9uVG9JbnRlcnNlY3Rpb248XHJcbiAgICAgIEVbbnVtYmVyXSBleHRlbmRzIFN0b3JlRW5oYW5jZXI8aW5mZXIgRXh0PlxyXG4gICAgICAgID8gRXh0IGV4dGVuZHMge31cclxuICAgICAgICAgID8gSXNBbnk8RXh0LCB7fSwgRXh0PlxyXG4gICAgICAgICAgOiB7fVxyXG4gICAgICAgIDoge31cclxuICAgID5cclxuICA6IG5ldmVyXHJcblxyXG50eXBlIEV4dHJhY3RTdGF0ZUV4dGVuc2lvbnNGcm9tRW5oYW5jZXJUdXBsZTxcclxuICBFbmhhbmNlclR1cGxlIGV4dGVuZHMgYW55W10sXHJcbiAgQWNjIGV4dGVuZHMge31cclxuPiA9IEVuaGFuY2VyVHVwbGUgZXh0ZW5kcyBbaW5mZXIgSGVhZCwgLi4uaW5mZXIgVGFpbF1cclxuICA/IEV4dHJhY3RTdGF0ZUV4dGVuc2lvbnNGcm9tRW5oYW5jZXJUdXBsZTxcclxuICAgICAgVGFpbCxcclxuICAgICAgQWNjICZcclxuICAgICAgICAoSGVhZCBleHRlbmRzIFN0b3JlRW5oYW5jZXI8YW55LCBpbmZlciBTdGF0ZUV4dD5cclxuICAgICAgICAgID8gSXNBbnk8U3RhdGVFeHQsIHt9LCBTdGF0ZUV4dD5cclxuICAgICAgICAgIDoge30pXHJcbiAgICA+XHJcbiAgOiBBY2NcclxuXHJcbmV4cG9ydCB0eXBlIEV4dHJhY3RTdGF0ZUV4dGVuc2lvbnM8RT4gPSBFIGV4dGVuZHMgRW5oYW5jZXJBcnJheTxcclxuICBpbmZlciBFbmhhbmNlclR1cGxlXHJcbj5cclxuICA/IEV4dHJhY3RTdGF0ZUV4dGVuc2lvbnNGcm9tRW5oYW5jZXJUdXBsZTxFbmhhbmNlclR1cGxlLCB7fT5cclxuICA6IEUgZXh0ZW5kcyBSZWFkb25seUFycmF5PFN0b3JlRW5oYW5jZXI+XHJcbiAgPyBVbmlvblRvSW50ZXJzZWN0aW9uPFxyXG4gICAgICBFW251bWJlcl0gZXh0ZW5kcyBTdG9yZUVuaGFuY2VyPGFueSwgaW5mZXIgU3RhdGVFeHQ+XHJcbiAgICAgICAgPyBTdGF0ZUV4dCBleHRlbmRzIHt9XHJcbiAgICAgICAgICA/IElzQW55PFN0YXRlRXh0LCB7fSwgU3RhdGVFeHQ+XHJcbiAgICAgICAgICA6IHt9XHJcbiAgICAgICAgOiB7fVxyXG4gICAgPlxyXG4gIDogbmV2ZXJcclxuXHJcbi8qKlxyXG4gKiBIZWxwZXIgdHlwZS4gUGFzc2VzIFQgb3V0IGFnYWluLCBidXQgYm94ZXMgaXQgaW4gYSB3YXkgdGhhdCBpdCBjYW5ub3RcclxuICogXCJ3aWRlblwiIHRoZSB0eXBlIGJ5IGFjY2lkZW50IGlmIGl0IGlzIGEgZ2VuZXJpYyB0aGF0IHNob3VsZCBiZSBpbmZlcnJlZFxyXG4gKiBmcm9tIGVsc2V3aGVyZS5cclxuICpcclxuICogQGludGVybmFsXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBOb0luZmVyPFQ+ID0gW1RdW1QgZXh0ZW5kcyBhbnkgPyAwIDogbmV2ZXJdXHJcblxyXG5leHBvcnQgdHlwZSBPbWl0PFQsIEsgZXh0ZW5kcyBrZXlvZiBhbnk+ID0gUGljazxULCBFeGNsdWRlPGtleW9mIFQsIEs+PlxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBUeXBlR3VhcmQ8VD4ge1xyXG4gICh2YWx1ZTogYW55KTogdmFsdWUgaXMgVFxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEhhc01hdGNoRnVuY3Rpb248VD4ge1xyXG4gIG1hdGNoOiBUeXBlR3VhcmQ8VD5cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGhhc01hdGNoRnVuY3Rpb24gPSA8VD4oXHJcbiAgdjogTWF0Y2hlcjxUPlxyXG4pOiB2IGlzIEhhc01hdGNoRnVuY3Rpb248VD4gPT4ge1xyXG4gIHJldHVybiB2ICYmIHR5cGVvZiAodiBhcyBIYXNNYXRjaEZ1bmN0aW9uPFQ+KS5tYXRjaCA9PT0gJ2Z1bmN0aW9uJ1xyXG59XHJcblxyXG4vKiogQHB1YmxpYyAqL1xyXG5leHBvcnQgdHlwZSBNYXRjaGVyPFQ+ID0gSGFzTWF0Y2hGdW5jdGlvbjxUPiB8IFR5cGVHdWFyZDxUPlxyXG5cclxuLyoqIEBwdWJsaWMgKi9cclxuZXhwb3J0IHR5cGUgQWN0aW9uRnJvbU1hdGNoZXI8TSBleHRlbmRzIE1hdGNoZXI8YW55Pj4gPSBNIGV4dGVuZHMgTWF0Y2hlcjxcclxuICBpbmZlciBUXHJcbj5cclxuICA/IFRcclxuICA6IG5ldmVyXHJcblxyXG5leHBvcnQgdHlwZSBJZDxUPiA9IHsgW0sgaW4ga2V5b2YgVF06IFRbS10gfSAmIHt9XHJcbiIsICJpbXBvcnQgdHlwZSB7IEFjdGlvbiB9IGZyb20gJ3JlZHV4J1xyXG5pbXBvcnQgdHlwZSB7XHJcbiAgSXNVbmtub3duT3JOb25JbmZlcnJhYmxlLFxyXG4gIElmTWF5YmVVbmRlZmluZWQsXHJcbiAgSWZWb2lkLFxyXG4gIElzQW55LFxyXG59IGZyb20gJy4vdHNIZWxwZXJzJ1xyXG5pbXBvcnQgeyBoYXNNYXRjaEZ1bmN0aW9uIH0gZnJvbSAnLi90c0hlbHBlcnMnXHJcbmltcG9ydCBpc1BsYWluT2JqZWN0IGZyb20gJy4vaXNQbGFpbk9iamVjdCdcclxuXHJcbi8qKlxyXG4gKiBBbiBhY3Rpb24gd2l0aCBhIHN0cmluZyB0eXBlIGFuZCBhbiBhc3NvY2lhdGVkIHBheWxvYWQuIFRoaXMgaXMgdGhlXHJcbiAqIHR5cGUgb2YgYWN0aW9uIHJldHVybmVkIGJ5IGBjcmVhdGVBY3Rpb24oKWAgYWN0aW9uIGNyZWF0b3JzLlxyXG4gKlxyXG4gKiBAdGVtcGxhdGUgUCBUaGUgdHlwZSBvZiB0aGUgYWN0aW9uJ3MgcGF5bG9hZC5cclxuICogQHRlbXBsYXRlIFQgdGhlIHR5cGUgdXNlZCBmb3IgdGhlIGFjdGlvbiB0eXBlLlxyXG4gKiBAdGVtcGxhdGUgTSBUaGUgdHlwZSBvZiB0aGUgYWN0aW9uJ3MgbWV0YSAob3B0aW9uYWwpXHJcbiAqIEB0ZW1wbGF0ZSBFIFRoZSB0eXBlIG9mIHRoZSBhY3Rpb24ncyBlcnJvciAob3B0aW9uYWwpXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCB0eXBlIFBheWxvYWRBY3Rpb248XHJcbiAgUCA9IHZvaWQsXHJcbiAgVCBleHRlbmRzIHN0cmluZyA9IHN0cmluZyxcclxuICBNID0gbmV2ZXIsXHJcbiAgRSA9IG5ldmVyXHJcbj4gPSB7XHJcbiAgcGF5bG9hZDogUFxyXG4gIHR5cGU6IFRcclxufSAmIChbTV0gZXh0ZW5kcyBbbmV2ZXJdXHJcbiAgPyB7fVxyXG4gIDoge1xyXG4gICAgICBtZXRhOiBNXHJcbiAgICB9KSAmXHJcbiAgKFtFXSBleHRlbmRzIFtuZXZlcl1cclxuICAgID8ge31cclxuICAgIDoge1xyXG4gICAgICAgIGVycm9yOiBFXHJcbiAgICAgIH0pXHJcblxyXG4vKipcclxuICogQSBcInByZXBhcmVcIiBtZXRob2QgdG8gYmUgdXNlZCBhcyB0aGUgc2Vjb25kIHBhcmFtZXRlciBvZiBgY3JlYXRlQWN0aW9uYC5cclxuICogVGFrZXMgYW55IG51bWJlciBvZiBhcmd1bWVudHMgYW5kIHJldHVybnMgYSBGbHV4IFN0YW5kYXJkIEFjdGlvbiB3aXRob3V0XHJcbiAqIHR5cGUgKHdpbGwgYmUgYWRkZWQgbGF0ZXIpIHRoYXQgKm11c3QqIGNvbnRhaW4gYSBwYXlsb2FkIChtaWdodCBiZSB1bmRlZmluZWQpLlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBQcmVwYXJlQWN0aW9uPFA+ID1cclxuICB8ICgoLi4uYXJnczogYW55W10pID0+IHsgcGF5bG9hZDogUCB9KVxyXG4gIHwgKCguLi5hcmdzOiBhbnlbXSkgPT4geyBwYXlsb2FkOiBQOyBtZXRhOiBhbnkgfSlcclxuICB8ICgoLi4uYXJnczogYW55W10pID0+IHsgcGF5bG9hZDogUDsgZXJyb3I6IGFueSB9KVxyXG4gIHwgKCguLi5hcmdzOiBhbnlbXSkgPT4geyBwYXlsb2FkOiBQOyBtZXRhOiBhbnk7IGVycm9yOiBhbnkgfSlcclxuXHJcbi8qKlxyXG4gKiBJbnRlcm5hbCB2ZXJzaW9uIG9mIGBBY3Rpb25DcmVhdG9yV2l0aFByZXBhcmVkUGF5bG9hZGAuIE5vdCB0byBiZSB1c2VkIGV4dGVybmFsbHkuXHJcbiAqXHJcbiAqIEBpbnRlcm5hbFxyXG4gKi9cclxuZXhwb3J0IHR5cGUgX0FjdGlvbkNyZWF0b3JXaXRoUHJlcGFyZWRQYXlsb2FkPFxyXG4gIFBBIGV4dGVuZHMgUHJlcGFyZUFjdGlvbjxhbnk+IHwgdm9pZCxcclxuICBUIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nXHJcbj4gPSBQQSBleHRlbmRzIFByZXBhcmVBY3Rpb248aW5mZXIgUD5cclxuICA/IEFjdGlvbkNyZWF0b3JXaXRoUHJlcGFyZWRQYXlsb2FkPFxyXG4gICAgICBQYXJhbWV0ZXJzPFBBPixcclxuICAgICAgUCxcclxuICAgICAgVCxcclxuICAgICAgUmV0dXJuVHlwZTxQQT4gZXh0ZW5kcyB7XHJcbiAgICAgICAgZXJyb3I6IGluZmVyIEVcclxuICAgICAgfVxyXG4gICAgICAgID8gRVxyXG4gICAgICAgIDogbmV2ZXIsXHJcbiAgICAgIFJldHVyblR5cGU8UEE+IGV4dGVuZHMge1xyXG4gICAgICAgIG1ldGE6IGluZmVyIE1cclxuICAgICAgfVxyXG4gICAgICAgID8gTVxyXG4gICAgICAgIDogbmV2ZXJcclxuICAgID5cclxuICA6IHZvaWRcclxuXHJcbi8qKlxyXG4gKiBCYXNpYyB0eXBlIGZvciBhbGwgYWN0aW9uIGNyZWF0b3JzLlxyXG4gKlxyXG4gKiBAaW5oZXJpdGRvYyB7cmVkdXgjQWN0aW9uQ3JlYXRvcn1cclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgQmFzZUFjdGlvbkNyZWF0b3I8UCwgVCBleHRlbmRzIHN0cmluZywgTSA9IG5ldmVyLCBFID0gbmV2ZXI+IHtcclxuICB0eXBlOiBUXHJcbiAgbWF0Y2g6IChhY3Rpb246IEFjdGlvbjx1bmtub3duPikgPT4gYWN0aW9uIGlzIFBheWxvYWRBY3Rpb248UCwgVCwgTSwgRT5cclxufVxyXG5cclxuLyoqXHJcbiAqIEFuIGFjdGlvbiBjcmVhdG9yIHRoYXQgdGFrZXMgbXVsdGlwbGUgYXJndW1lbnRzIHRoYXQgYXJlIHBhc3NlZFxyXG4gKiB0byBhIGBQcmVwYXJlQWN0aW9uYCBtZXRob2QgdG8gY3JlYXRlIHRoZSBmaW5hbCBBY3Rpb24uXHJcbiAqIEB0eXBlUGFyYW0gQXJncyBhcmd1bWVudHMgZm9yIHRoZSBhY3Rpb24gY3JlYXRvciBmdW5jdGlvblxyXG4gKiBAdHlwZVBhcmFtIFAgYHBheWxvYWRgIHR5cGVcclxuICogQHR5cGVQYXJhbSBUIGB0eXBlYCBuYW1lXHJcbiAqIEB0eXBlUGFyYW0gRSBvcHRpb25hbCBgZXJyb3JgIHR5cGVcclxuICogQHR5cGVQYXJhbSBNIG9wdGlvbmFsIGBtZXRhYCB0eXBlXHJcbiAqXHJcbiAqIEBpbmhlcml0ZG9jIHtyZWR1eCNBY3Rpb25DcmVhdG9yfVxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIEFjdGlvbkNyZWF0b3JXaXRoUHJlcGFyZWRQYXlsb2FkPFxyXG4gIEFyZ3MgZXh0ZW5kcyB1bmtub3duW10sXHJcbiAgUCxcclxuICBUIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLFxyXG4gIEUgPSBuZXZlcixcclxuICBNID0gbmV2ZXJcclxuPiBleHRlbmRzIEJhc2VBY3Rpb25DcmVhdG9yPFAsIFQsIE0sIEU+IHtcclxuICAvKipcclxuICAgKiBDYWxsaW5nIHRoaXMge0BsaW5rIHJlZHV4I0FjdGlvbkNyZWF0b3J9IHdpdGggYEFyZ3NgIHdpbGwgcmV0dXJuXHJcbiAgICogYW4gQWN0aW9uIHdpdGggYSBwYXlsb2FkIG9mIHR5cGUgYFBgIGFuZCAoZGVwZW5kaW5nIG9uIHRoZSBgUHJlcGFyZUFjdGlvbmBcclxuICAgKiBtZXRob2QgdXNlZCkgYSBgbWV0YWAtIGFuZCBgZXJyb3JgIHByb3BlcnR5IG9mIHR5cGVzIGBNYCBhbmQgYEVgIHJlc3BlY3RpdmVseS5cclxuICAgKi9cclxuICAoLi4uYXJnczogQXJncyk6IFBheWxvYWRBY3Rpb248UCwgVCwgTSwgRT5cclxufVxyXG5cclxuLyoqXHJcbiAqIEFuIGFjdGlvbiBjcmVhdG9yIG9mIHR5cGUgYFRgIHRoYXQgdGFrZXMgYW4gb3B0aW9uYWwgcGF5bG9hZCBvZiB0eXBlIGBQYC5cclxuICpcclxuICogQGluaGVyaXRkb2Mge3JlZHV4I0FjdGlvbkNyZWF0b3J9XHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgQWN0aW9uQ3JlYXRvcldpdGhPcHRpb25hbFBheWxvYWQ8UCwgVCBleHRlbmRzIHN0cmluZyA9IHN0cmluZz5cclxuICBleHRlbmRzIEJhc2VBY3Rpb25DcmVhdG9yPFAsIFQ+IHtcclxuICAvKipcclxuICAgKiBDYWxsaW5nIHRoaXMge0BsaW5rIHJlZHV4I0FjdGlvbkNyZWF0b3J9IHdpdGggYW4gYXJndW1lbnQgd2lsbFxyXG4gICAqIHJldHVybiBhIHtAbGluayBQYXlsb2FkQWN0aW9ufSBvZiB0eXBlIGBUYCB3aXRoIGEgcGF5bG9hZCBvZiBgUGAuXHJcbiAgICogQ2FsbGluZyBpdCB3aXRob3V0IGFuIGFyZ3VtZW50IHdpbGwgcmV0dXJuIGEgUGF5bG9hZEFjdGlvbiB3aXRoIGEgcGF5bG9hZCBvZiBgdW5kZWZpbmVkYC5cclxuICAgKi9cclxuICAocGF5bG9hZD86IFApOiBQYXlsb2FkQWN0aW9uPFAsIFQ+XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBbiBhY3Rpb24gY3JlYXRvciBvZiB0eXBlIGBUYCB0aGF0IHRha2VzIG5vIHBheWxvYWQuXHJcbiAqXHJcbiAqIEBpbmhlcml0ZG9jIHtyZWR1eCNBY3Rpb25DcmVhdG9yfVxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIEFjdGlvbkNyZWF0b3JXaXRob3V0UGF5bG9hZDxUIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPlxyXG4gIGV4dGVuZHMgQmFzZUFjdGlvbkNyZWF0b3I8dW5kZWZpbmVkLCBUPiB7XHJcbiAgLyoqXHJcbiAgICogQ2FsbGluZyB0aGlzIHtAbGluayByZWR1eCNBY3Rpb25DcmVhdG9yfSB3aWxsXHJcbiAgICogcmV0dXJuIGEge0BsaW5rIFBheWxvYWRBY3Rpb259IG9mIHR5cGUgYFRgIHdpdGggYSBwYXlsb2FkIG9mIGB1bmRlZmluZWRgXHJcbiAgICovXHJcbiAgKG5vQXJndW1lbnQ6IHZvaWQpOiBQYXlsb2FkQWN0aW9uPHVuZGVmaW5lZCwgVD5cclxufVxyXG5cclxuLyoqXHJcbiAqIEFuIGFjdGlvbiBjcmVhdG9yIG9mIHR5cGUgYFRgIHRoYXQgcmVxdWlyZXMgYSBwYXlsb2FkIG9mIHR5cGUgUC5cclxuICpcclxuICogQGluaGVyaXRkb2Mge3JlZHV4I0FjdGlvbkNyZWF0b3J9XHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgQWN0aW9uQ3JlYXRvcldpdGhQYXlsb2FkPFAsIFQgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmc+XHJcbiAgZXh0ZW5kcyBCYXNlQWN0aW9uQ3JlYXRvcjxQLCBUPiB7XHJcbiAgLyoqXHJcbiAgICogQ2FsbGluZyB0aGlzIHtAbGluayByZWR1eCNBY3Rpb25DcmVhdG9yfSB3aXRoIGFuIGFyZ3VtZW50IHdpbGxcclxuICAgKiByZXR1cm4gYSB7QGxpbmsgUGF5bG9hZEFjdGlvbn0gb2YgdHlwZSBgVGAgd2l0aCBhIHBheWxvYWQgb2YgYFBgXHJcbiAgICovXHJcbiAgKHBheWxvYWQ6IFApOiBQYXlsb2FkQWN0aW9uPFAsIFQ+XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBbiBhY3Rpb24gY3JlYXRvciBvZiB0eXBlIGBUYCB3aG9zZSBgcGF5bG9hZGAgdHlwZSBjb3VsZCBub3QgYmUgaW5mZXJyZWQuIEFjY2VwdHMgZXZlcnl0aGluZyBhcyBgcGF5bG9hZGAuXHJcbiAqXHJcbiAqIEBpbmhlcml0ZG9jIHtyZWR1eCNBY3Rpb25DcmVhdG9yfVxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIEFjdGlvbkNyZWF0b3JXaXRoTm9uSW5mZXJyYWJsZVBheWxvYWQ8XHJcbiAgVCBleHRlbmRzIHN0cmluZyA9IHN0cmluZ1xyXG4+IGV4dGVuZHMgQmFzZUFjdGlvbkNyZWF0b3I8dW5rbm93biwgVD4ge1xyXG4gIC8qKlxyXG4gICAqIENhbGxpbmcgdGhpcyB7QGxpbmsgcmVkdXgjQWN0aW9uQ3JlYXRvcn0gd2l0aCBhbiBhcmd1bWVudCB3aWxsXHJcbiAgICogcmV0dXJuIGEge0BsaW5rIFBheWxvYWRBY3Rpb259IG9mIHR5cGUgYFRgIHdpdGggYSBwYXlsb2FkXHJcbiAgICogb2YgZXhhY3RseSB0aGUgdHlwZSBvZiB0aGUgYXJndW1lbnQuXHJcbiAgICovXHJcbiAgPFBUIGV4dGVuZHMgdW5rbm93bj4ocGF5bG9hZDogUFQpOiBQYXlsb2FkQWN0aW9uPFBULCBUPlxyXG59XHJcblxyXG4vKipcclxuICogQW4gYWN0aW9uIGNyZWF0b3IgdGhhdCBwcm9kdWNlcyBhY3Rpb25zIHdpdGggYSBgcGF5bG9hZGAgYXR0cmlidXRlLlxyXG4gKlxyXG4gKiBAdHlwZVBhcmFtIFAgdGhlIGBwYXlsb2FkYCB0eXBlXHJcbiAqIEB0eXBlUGFyYW0gVCB0aGUgYHR5cGVgIG9mIHRoZSByZXN1bHRpbmcgYWN0aW9uXHJcbiAqIEB0eXBlUGFyYW0gUEEgaWYgdGhlIHJlc3VsdGluZyBhY3Rpb24gaXMgcHJlcHJvY2Vzc2VkIGJ5IGEgYHByZXBhcmVgIG1ldGhvZCwgdGhlIHNpZ25hdHVyZSBvZiBzYWlkIG1ldGhvZC5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IHR5cGUgUGF5bG9hZEFjdGlvbkNyZWF0b3I8XHJcbiAgUCA9IHZvaWQsXHJcbiAgVCBleHRlbmRzIHN0cmluZyA9IHN0cmluZyxcclxuICBQQSBleHRlbmRzIFByZXBhcmVBY3Rpb248UD4gfCB2b2lkID0gdm9pZFxyXG4+ID0gSWZQcmVwYXJlQWN0aW9uTWV0aG9kUHJvdmlkZWQ8XHJcbiAgUEEsXHJcbiAgX0FjdGlvbkNyZWF0b3JXaXRoUHJlcGFyZWRQYXlsb2FkPFBBLCBUPixcclxuICAvLyBlbHNlXHJcbiAgSXNBbnk8XHJcbiAgICBQLFxyXG4gICAgQWN0aW9uQ3JlYXRvcldpdGhQYXlsb2FkPGFueSwgVD4sXHJcbiAgICBJc1Vua25vd25Pck5vbkluZmVycmFibGU8XHJcbiAgICAgIFAsXHJcbiAgICAgIEFjdGlvbkNyZWF0b3JXaXRoTm9uSW5mZXJyYWJsZVBheWxvYWQ8VD4sXHJcbiAgICAgIC8vIGVsc2VcclxuICAgICAgSWZWb2lkPFxyXG4gICAgICAgIFAsXHJcbiAgICAgICAgQWN0aW9uQ3JlYXRvcldpdGhvdXRQYXlsb2FkPFQ+LFxyXG4gICAgICAgIC8vIGVsc2VcclxuICAgICAgICBJZk1heWJlVW5kZWZpbmVkPFxyXG4gICAgICAgICAgUCxcclxuICAgICAgICAgIEFjdGlvbkNyZWF0b3JXaXRoT3B0aW9uYWxQYXlsb2FkPFAsIFQ+LFxyXG4gICAgICAgICAgLy8gZWxzZVxyXG4gICAgICAgICAgQWN0aW9uQ3JlYXRvcldpdGhQYXlsb2FkPFAsIFQ+XHJcbiAgICAgICAgPlxyXG4gICAgICA+XHJcbiAgICA+XHJcbiAgPlxyXG4+XHJcblxyXG4vKipcclxuICogQSB1dGlsaXR5IGZ1bmN0aW9uIHRvIGNyZWF0ZSBhbiBhY3Rpb24gY3JlYXRvciBmb3IgdGhlIGdpdmVuIGFjdGlvbiB0eXBlXHJcbiAqIHN0cmluZy4gVGhlIGFjdGlvbiBjcmVhdG9yIGFjY2VwdHMgYSBzaW5nbGUgYXJndW1lbnQsIHdoaWNoIHdpbGwgYmUgaW5jbHVkZWRcclxuICogaW4gdGhlIGFjdGlvbiBvYmplY3QgYXMgYSBmaWVsZCBjYWxsZWQgcGF5bG9hZC4gVGhlIGFjdGlvbiBjcmVhdG9yIGZ1bmN0aW9uXHJcbiAqIHdpbGwgYWxzbyBoYXZlIGl0cyB0b1N0cmluZygpIG92ZXJyaWRkZW4gc28gdGhhdCBpdCByZXR1cm5zIHRoZSBhY3Rpb24gdHlwZSxcclxuICogYWxsb3dpbmcgaXQgdG8gYmUgdXNlZCBpbiByZWR1Y2VyIGxvZ2ljIHRoYXQgaXMgbG9va2luZyBmb3IgdGhhdCBhY3Rpb24gdHlwZS5cclxuICpcclxuICogQHBhcmFtIHR5cGUgVGhlIGFjdGlvbiB0eXBlIHRvIHVzZSBmb3IgY3JlYXRlZCBhY3Rpb25zLlxyXG4gKiBAcGFyYW0gcHJlcGFyZSAob3B0aW9uYWwpIGEgbWV0aG9kIHRoYXQgdGFrZXMgYW55IG51bWJlciBvZiBhcmd1bWVudHMgYW5kIHJldHVybnMgeyBwYXlsb2FkIH0gb3IgeyBwYXlsb2FkLCBtZXRhIH0uXHJcbiAqICAgICAgICAgICAgICAgIElmIHRoaXMgaXMgZ2l2ZW4sIHRoZSByZXN1bHRpbmcgYWN0aW9uIGNyZWF0b3Igd2lsbCBwYXNzIGl0cyBhcmd1bWVudHMgdG8gdGhpcyBtZXRob2QgdG8gY2FsY3VsYXRlIHBheWxvYWQgJiBtZXRhLlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQWN0aW9uPFAgPSB2b2lkLCBUIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPihcclxuICB0eXBlOiBUXHJcbik6IFBheWxvYWRBY3Rpb25DcmVhdG9yPFAsIFQ+XHJcblxyXG4vKipcclxuICogQSB1dGlsaXR5IGZ1bmN0aW9uIHRvIGNyZWF0ZSBhbiBhY3Rpb24gY3JlYXRvciBmb3IgdGhlIGdpdmVuIGFjdGlvbiB0eXBlXHJcbiAqIHN0cmluZy4gVGhlIGFjdGlvbiBjcmVhdG9yIGFjY2VwdHMgYSBzaW5nbGUgYXJndW1lbnQsIHdoaWNoIHdpbGwgYmUgaW5jbHVkZWRcclxuICogaW4gdGhlIGFjdGlvbiBvYmplY3QgYXMgYSBmaWVsZCBjYWxsZWQgcGF5bG9hZC4gVGhlIGFjdGlvbiBjcmVhdG9yIGZ1bmN0aW9uXHJcbiAqIHdpbGwgYWxzbyBoYXZlIGl0cyB0b1N0cmluZygpIG92ZXJyaWRkZW4gc28gdGhhdCBpdCByZXR1cm5zIHRoZSBhY3Rpb24gdHlwZSxcclxuICogYWxsb3dpbmcgaXQgdG8gYmUgdXNlZCBpbiByZWR1Y2VyIGxvZ2ljIHRoYXQgaXMgbG9va2luZyBmb3IgdGhhdCBhY3Rpb24gdHlwZS5cclxuICpcclxuICogQHBhcmFtIHR5cGUgVGhlIGFjdGlvbiB0eXBlIHRvIHVzZSBmb3IgY3JlYXRlZCBhY3Rpb25zLlxyXG4gKiBAcGFyYW0gcHJlcGFyZSAob3B0aW9uYWwpIGEgbWV0aG9kIHRoYXQgdGFrZXMgYW55IG51bWJlciBvZiBhcmd1bWVudHMgYW5kIHJldHVybnMgeyBwYXlsb2FkIH0gb3IgeyBwYXlsb2FkLCBtZXRhIH0uXHJcbiAqICAgICAgICAgICAgICAgIElmIHRoaXMgaXMgZ2l2ZW4sIHRoZSByZXN1bHRpbmcgYWN0aW9uIGNyZWF0b3Igd2lsbCBwYXNzIGl0cyBhcmd1bWVudHMgdG8gdGhpcyBtZXRob2QgdG8gY2FsY3VsYXRlIHBheWxvYWQgJiBtZXRhLlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQWN0aW9uPFxyXG4gIFBBIGV4dGVuZHMgUHJlcGFyZUFjdGlvbjxhbnk+LFxyXG4gIFQgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmdcclxuPihcclxuICB0eXBlOiBULFxyXG4gIHByZXBhcmVBY3Rpb246IFBBXHJcbik6IFBheWxvYWRBY3Rpb25DcmVhdG9yPFJldHVyblR5cGU8UEE+WydwYXlsb2FkJ10sIFQsIFBBPlxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFjdGlvbih0eXBlOiBzdHJpbmcsIHByZXBhcmVBY3Rpb24/OiBGdW5jdGlvbik6IGFueSB7XHJcbiAgZnVuY3Rpb24gYWN0aW9uQ3JlYXRvciguLi5hcmdzOiBhbnlbXSkge1xyXG4gICAgaWYgKHByZXBhcmVBY3Rpb24pIHtcclxuICAgICAgbGV0IHByZXBhcmVkID0gcHJlcGFyZUFjdGlvbiguLi5hcmdzKVxyXG4gICAgICBpZiAoIXByZXBhcmVkKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdwcmVwYXJlQWN0aW9uIGRpZCBub3QgcmV0dXJuIGFuIG9iamVjdCcpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgdHlwZSxcclxuICAgICAgICBwYXlsb2FkOiBwcmVwYXJlZC5wYXlsb2FkLFxyXG4gICAgICAgIC4uLignbWV0YScgaW4gcHJlcGFyZWQgJiYgeyBtZXRhOiBwcmVwYXJlZC5tZXRhIH0pLFxyXG4gICAgICAgIC4uLignZXJyb3InIGluIHByZXBhcmVkICYmIHsgZXJyb3I6IHByZXBhcmVkLmVycm9yIH0pLFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyB0eXBlLCBwYXlsb2FkOiBhcmdzWzBdIH1cclxuICB9XHJcblxyXG4gIGFjdGlvbkNyZWF0b3IudG9TdHJpbmcgPSAoKSA9PiBgJHt0eXBlfWBcclxuXHJcbiAgYWN0aW9uQ3JlYXRvci50eXBlID0gdHlwZVxyXG5cclxuICBhY3Rpb25DcmVhdG9yLm1hdGNoID0gKGFjdGlvbjogQWN0aW9uPHVua25vd24+KTogYWN0aW9uIGlzIFBheWxvYWRBY3Rpb24gPT5cclxuICAgIGFjdGlvbi50eXBlID09PSB0eXBlXHJcblxyXG4gIHJldHVybiBhY3Rpb25DcmVhdG9yXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRydWUgaWYgdmFsdWUgaXMgYSBwbGFpbiBvYmplY3Qgd2l0aCBhIGB0eXBlYCBwcm9wZXJ0eS5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0FjdGlvbihhY3Rpb246IHVua25vd24pOiBhY3Rpb24gaXMgQWN0aW9uPHVua25vd24+IHtcclxuICByZXR1cm4gaXNQbGFpbk9iamVjdChhY3Rpb24pICYmICd0eXBlJyBpbiBhY3Rpb25cclxufVxyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdHJ1ZSBpZiB2YWx1ZSBpcyBhbiBSVEstbGlrZSBhY3Rpb24gY3JlYXRvciwgd2l0aCBhIHN0YXRpYyB0eXBlIHByb3BlcnR5IGFuZCBtYXRjaCBtZXRob2QuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNBY3Rpb25DcmVhdG9yKFxyXG4gIGFjdGlvbjogdW5rbm93blxyXG4pOiBhY3Rpb24gaXMgQmFzZUFjdGlvbkNyZWF0b3I8dW5rbm93biwgc3RyaW5nPiAmIEZ1bmN0aW9uIHtcclxuICByZXR1cm4gKFxyXG4gICAgdHlwZW9mIGFjdGlvbiA9PT0gJ2Z1bmN0aW9uJyAmJlxyXG4gICAgJ3R5cGUnIGluIGFjdGlvbiAmJlxyXG4gICAgLy8gaGFzTWF0Y2hGdW5jdGlvbiBvbmx5IHdhbnRzIE1hdGNoZXJzIGJ1dCBJIGRvbid0IHNlZSB0aGUgcG9pbnQgaW4gcmV3cml0aW5nIGl0XHJcbiAgICBoYXNNYXRjaEZ1bmN0aW9uKGFjdGlvbiBhcyBhbnkpXHJcbiAgKVxyXG59XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0cnVlIGlmIHZhbHVlIGlzIGFuIGFjdGlvbiB3aXRoIGEgc3RyaW5nIHR5cGUgYW5kIHZhbGlkIEZsdXggU3RhbmRhcmQgQWN0aW9uIGtleXMuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNGU0EoYWN0aW9uOiB1bmtub3duKTogYWN0aW9uIGlzIHtcclxuICB0eXBlOiBzdHJpbmdcclxuICBwYXlsb2FkPzogdW5rbm93blxyXG4gIGVycm9yPzogdW5rbm93blxyXG4gIG1ldGE/OiB1bmtub3duXHJcbn0ge1xyXG4gIHJldHVybiAoXHJcbiAgICBpc0FjdGlvbihhY3Rpb24pICYmXHJcbiAgICB0eXBlb2YgYWN0aW9uLnR5cGUgPT09ICdzdHJpbmcnICYmXHJcbiAgICBPYmplY3Qua2V5cyhhY3Rpb24pLmV2ZXJ5KGlzVmFsaWRLZXkpXHJcbiAgKVxyXG59XHJcblxyXG5mdW5jdGlvbiBpc1ZhbGlkS2V5KGtleTogc3RyaW5nKSB7XHJcbiAgcmV0dXJuIFsndHlwZScsICdwYXlsb2FkJywgJ2Vycm9yJywgJ21ldGEnXS5pbmRleE9mKGtleSkgPiAtMVxyXG59XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgYWN0aW9uIHR5cGUgb2YgdGhlIGFjdGlvbnMgY3JlYXRlZCBieSB0aGUgcGFzc2VkXHJcbiAqIGBjcmVhdGVBY3Rpb24oKWAtZ2VuZXJhdGVkIGFjdGlvbiBjcmVhdG9yIChhcmJpdHJhcnkgYWN0aW9uIGNyZWF0b3JzXHJcbiAqIGFyZSBub3Qgc3VwcG9ydGVkKS5cclxuICpcclxuICogQHBhcmFtIGFjdGlvbiBUaGUgYWN0aW9uIGNyZWF0b3Igd2hvc2UgYWN0aW9uIHR5cGUgdG8gZ2V0LlxyXG4gKiBAcmV0dXJucyBUaGUgYWN0aW9uIHR5cGUgdXNlZCBieSB0aGUgYWN0aW9uIGNyZWF0b3IuXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRUeXBlPFQgZXh0ZW5kcyBzdHJpbmc+KFxyXG4gIGFjdGlvbkNyZWF0b3I6IFBheWxvYWRBY3Rpb25DcmVhdG9yPGFueSwgVD5cclxuKTogVCB7XHJcbiAgcmV0dXJuIGAke2FjdGlvbkNyZWF0b3J9YCBhcyBUXHJcbn1cclxuXHJcbi8vIGhlbHBlciB0eXBlcyBmb3IgbW9yZSByZWFkYWJsZSB0eXBpbmdzXHJcblxyXG50eXBlIElmUHJlcGFyZUFjdGlvbk1ldGhvZFByb3ZpZGVkPFxyXG4gIFBBIGV4dGVuZHMgUHJlcGFyZUFjdGlvbjxhbnk+IHwgdm9pZCxcclxuICBUcnVlLFxyXG4gIEZhbHNlXHJcbj4gPSBQQSBleHRlbmRzICguLi5hcmdzOiBhbnlbXSkgPT4gYW55ID8gVHJ1ZSA6IEZhbHNlXHJcbiIsICJpbXBvcnQgdHlwZSB7IE1pZGRsZXdhcmUgfSBmcm9tICdyZWR1eCdcclxuaW1wb3J0IHsgaXNBY3Rpb25DcmVhdG9yIGFzIGlzUlRLQWN0aW9uIH0gZnJvbSAnLi9jcmVhdGVBY3Rpb24nXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEFjdGlvbkNyZWF0b3JJbnZhcmlhbnRNaWRkbGV3YXJlT3B0aW9ucyB7XHJcbiAgLyoqXHJcbiAgICogVGhlIGZ1bmN0aW9uIHRvIGlkZW50aWZ5IHdoZXRoZXIgYSB2YWx1ZSBpcyBhbiBhY3Rpb24gY3JlYXRvci5cclxuICAgKiBUaGUgZGVmYXVsdCBjaGVja3MgZm9yIGEgZnVuY3Rpb24gd2l0aCBhIHN0YXRpYyB0eXBlIHByb3BlcnR5IGFuZCBtYXRjaCBtZXRob2QuXHJcbiAgICovXHJcbiAgaXNBY3Rpb25DcmVhdG9yPzogKGFjdGlvbjogdW5rbm93bikgPT4gYWN0aW9uIGlzIEZ1bmN0aW9uICYgeyB0eXBlPzogdW5rbm93biB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRNZXNzYWdlKHR5cGU/OiB1bmtub3duKSB7XHJcbiAgY29uc3Qgc3BsaXRUeXBlID0gdHlwZSA/IGAke3R5cGV9YC5zcGxpdCgnLycpIDogW11cclxuICBjb25zdCBhY3Rpb25OYW1lID0gc3BsaXRUeXBlW3NwbGl0VHlwZS5sZW5ndGggLSAxXSB8fCAnYWN0aW9uQ3JlYXRvcidcclxuICByZXR1cm4gYERldGVjdGVkIGFuIGFjdGlvbiBjcmVhdG9yIHdpdGggdHlwZSBcIiR7XHJcbiAgICB0eXBlIHx8ICd1bmtub3duJ1xyXG4gIH1cIiBiZWluZyBkaXNwYXRjaGVkLiBcclxuTWFrZSBzdXJlIHlvdSdyZSBjYWxsaW5nIHRoZSBhY3Rpb24gY3JlYXRvciBiZWZvcmUgZGlzcGF0Y2hpbmcsIGkuZS4gXFxgZGlzcGF0Y2goJHthY3Rpb25OYW1lfSgpKVxcYCBpbnN0ZWFkIG9mIFxcYGRpc3BhdGNoKCR7YWN0aW9uTmFtZX0pXFxgLiBUaGlzIGlzIG5lY2Vzc2FyeSBldmVuIGlmIHRoZSBhY3Rpb24gaGFzIG5vIHBheWxvYWQuYFxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQWN0aW9uQ3JlYXRvckludmFyaWFudE1pZGRsZXdhcmUoXHJcbiAgb3B0aW9uczogQWN0aW9uQ3JlYXRvckludmFyaWFudE1pZGRsZXdhcmVPcHRpb25zID0ge31cclxuKTogTWlkZGxld2FyZSB7XHJcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcclxuICAgIHJldHVybiAoKSA9PiAobmV4dCkgPT4gKGFjdGlvbikgPT4gbmV4dChhY3Rpb24pXHJcbiAgfVxyXG4gIGNvbnN0IHsgaXNBY3Rpb25DcmVhdG9yID0gaXNSVEtBY3Rpb24gfSA9IG9wdGlvbnNcclxuICByZXR1cm4gKCkgPT4gKG5leHQpID0+IChhY3Rpb24pID0+IHtcclxuICAgIGlmIChpc0FjdGlvbkNyZWF0b3IoYWN0aW9uKSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oZ2V0TWVzc2FnZShhY3Rpb24udHlwZSkpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmV4dChhY3Rpb24pXHJcbiAgfVxyXG59XHJcbiIsICJpbXBvcnQgY3JlYXRlTmV4dFN0YXRlLCB7IGlzRHJhZnRhYmxlIH0gZnJvbSAnaW1tZXInXHJcbmltcG9ydCB0eXBlIHsgTWlkZGxld2FyZSwgU3RvcmVFbmhhbmNlciB9IGZyb20gJ3JlZHV4J1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFRpbWVNZWFzdXJlVXRpbHMobWF4RGVsYXk6IG51bWJlciwgZm5OYW1lOiBzdHJpbmcpIHtcclxuICBsZXQgZWxhcHNlZCA9IDBcclxuICByZXR1cm4ge1xyXG4gICAgbWVhc3VyZVRpbWU8VD4oZm46ICgpID0+IFQpOiBUIHtcclxuICAgICAgY29uc3Qgc3RhcnRlZCA9IERhdGUubm93KClcclxuICAgICAgdHJ5IHtcclxuICAgICAgICByZXR1cm4gZm4oKVxyXG4gICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKVxyXG4gICAgICAgIGVsYXBzZWQgKz0gZmluaXNoZWQgLSBzdGFydGVkXHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICB3YXJuSWZFeGNlZWRlZCgpIHtcclxuICAgICAgaWYgKGVsYXBzZWQgPiBtYXhEZWxheSkge1xyXG4gICAgICAgIGNvbnNvbGUud2FybihgJHtmbk5hbWV9IHRvb2sgJHtlbGFwc2VkfW1zLCB3aGljaCBpcyBtb3JlIHRoYW4gdGhlIHdhcm5pbmcgdGhyZXNob2xkIG9mICR7bWF4RGVsYXl9bXMuIFxyXG5JZiB5b3VyIHN0YXRlIG9yIGFjdGlvbnMgYXJlIHZlcnkgbGFyZ2UsIHlvdSBtYXkgd2FudCB0byBkaXNhYmxlIHRoZSBtaWRkbGV3YXJlIGFzIGl0IG1pZ2h0IGNhdXNlIHRvbyBtdWNoIG9mIGEgc2xvd2Rvd24gaW4gZGV2ZWxvcG1lbnQgbW9kZS4gU2VlIGh0dHBzOi8vcmVkdXgtdG9vbGtpdC5qcy5vcmcvYXBpL2dldERlZmF1bHRNaWRkbGV3YXJlIGZvciBpbnN0cnVjdGlvbnMuXHJcbkl0IGlzIGRpc2FibGVkIGluIHByb2R1Y3Rpb24gYnVpbGRzLCBzbyB5b3UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCB0aGF0LmApXHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZGVsYXkobXM6IG51bWJlcikge1xyXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgTWlkZGxld2FyZUFycmF5PFxyXG4gIE1pZGRsZXdhcmVzIGV4dGVuZHMgTWlkZGxld2FyZTxhbnksIGFueT5bXVxyXG4+IGV4dGVuZHMgQXJyYXk8TWlkZGxld2FyZXNbbnVtYmVyXT4ge1xyXG4gIGNvbnN0cnVjdG9yKC4uLml0ZW1zOiBNaWRkbGV3YXJlcylcclxuICBjb25zdHJ1Y3RvciguLi5hcmdzOiBhbnlbXSkge1xyXG4gICAgc3VwZXIoLi4uYXJncylcclxuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBNaWRkbGV3YXJlQXJyYXkucHJvdG90eXBlKVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGdldCBbU3ltYm9sLnNwZWNpZXNdKCkge1xyXG4gICAgcmV0dXJuIE1pZGRsZXdhcmVBcnJheSBhcyBhbnlcclxuICB9XHJcblxyXG4gIGNvbmNhdDxBZGRpdGlvbmFsTWlkZGxld2FyZXMgZXh0ZW5kcyBSZWFkb25seUFycmF5PE1pZGRsZXdhcmU8YW55LCBhbnk+Pj4oXHJcbiAgICBpdGVtczogQWRkaXRpb25hbE1pZGRsZXdhcmVzXHJcbiAgKTogTWlkZGxld2FyZUFycmF5PFsuLi5NaWRkbGV3YXJlcywgLi4uQWRkaXRpb25hbE1pZGRsZXdhcmVzXT5cclxuXHJcbiAgY29uY2F0PEFkZGl0aW9uYWxNaWRkbGV3YXJlcyBleHRlbmRzIFJlYWRvbmx5QXJyYXk8TWlkZGxld2FyZTxhbnksIGFueT4+PihcclxuICAgIC4uLml0ZW1zOiBBZGRpdGlvbmFsTWlkZGxld2FyZXNcclxuICApOiBNaWRkbGV3YXJlQXJyYXk8Wy4uLk1pZGRsZXdhcmVzLCAuLi5BZGRpdGlvbmFsTWlkZGxld2FyZXNdPlxyXG4gIGNvbmNhdCguLi5hcnI6IGFueVtdKSB7XHJcbiAgICByZXR1cm4gc3VwZXIuY29uY2F0LmFwcGx5KHRoaXMsIGFycilcclxuICB9XHJcblxyXG4gIHByZXBlbmQ8QWRkaXRpb25hbE1pZGRsZXdhcmVzIGV4dGVuZHMgUmVhZG9ubHlBcnJheTxNaWRkbGV3YXJlPGFueSwgYW55Pj4+KFxyXG4gICAgaXRlbXM6IEFkZGl0aW9uYWxNaWRkbGV3YXJlc1xyXG4gICk6IE1pZGRsZXdhcmVBcnJheTxbLi4uQWRkaXRpb25hbE1pZGRsZXdhcmVzLCAuLi5NaWRkbGV3YXJlc10+XHJcblxyXG4gIHByZXBlbmQ8QWRkaXRpb25hbE1pZGRsZXdhcmVzIGV4dGVuZHMgUmVhZG9ubHlBcnJheTxNaWRkbGV3YXJlPGFueSwgYW55Pj4+KFxyXG4gICAgLi4uaXRlbXM6IEFkZGl0aW9uYWxNaWRkbGV3YXJlc1xyXG4gICk6IE1pZGRsZXdhcmVBcnJheTxbLi4uQWRkaXRpb25hbE1pZGRsZXdhcmVzLCAuLi5NaWRkbGV3YXJlc10+XHJcblxyXG4gIHByZXBlbmQoLi4uYXJyOiBhbnlbXSkge1xyXG4gICAgaWYgKGFyci5sZW5ndGggPT09IDEgJiYgQXJyYXkuaXNBcnJheShhcnJbMF0pKSB7XHJcbiAgICAgIHJldHVybiBuZXcgTWlkZGxld2FyZUFycmF5KC4uLmFyclswXS5jb25jYXQodGhpcykpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmV3IE1pZGRsZXdhcmVBcnJheSguLi5hcnIuY29uY2F0KHRoaXMpKVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBjbGFzcyBFbmhhbmNlckFycmF5PFxyXG4gIEVuaGFuY2VycyBleHRlbmRzIFN0b3JlRW5oYW5jZXI8YW55LCBhbnk+W11cclxuPiBleHRlbmRzIEFycmF5PEVuaGFuY2Vyc1tudW1iZXJdPiB7XHJcbiAgY29uc3RydWN0b3IoLi4uaXRlbXM6IEVuaGFuY2VycylcclxuICBjb25zdHJ1Y3RvciguLi5hcmdzOiBhbnlbXSkge1xyXG4gICAgc3VwZXIoLi4uYXJncylcclxuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBFbmhhbmNlckFycmF5LnByb3RvdHlwZSlcclxuICB9XHJcblxyXG4gIHN0YXRpYyBnZXQgW1N5bWJvbC5zcGVjaWVzXSgpIHtcclxuICAgIHJldHVybiBFbmhhbmNlckFycmF5IGFzIGFueVxyXG4gIH1cclxuXHJcbiAgY29uY2F0PEFkZGl0aW9uYWxFbmhhbmNlcnMgZXh0ZW5kcyBSZWFkb25seUFycmF5PFN0b3JlRW5oYW5jZXI8YW55LCBhbnk+Pj4oXHJcbiAgICBpdGVtczogQWRkaXRpb25hbEVuaGFuY2Vyc1xyXG4gICk6IEVuaGFuY2VyQXJyYXk8Wy4uLkVuaGFuY2VycywgLi4uQWRkaXRpb25hbEVuaGFuY2Vyc10+XHJcblxyXG4gIGNvbmNhdDxBZGRpdGlvbmFsRW5oYW5jZXJzIGV4dGVuZHMgUmVhZG9ubHlBcnJheTxTdG9yZUVuaGFuY2VyPGFueSwgYW55Pj4+KFxyXG4gICAgLi4uaXRlbXM6IEFkZGl0aW9uYWxFbmhhbmNlcnNcclxuICApOiBFbmhhbmNlckFycmF5PFsuLi5FbmhhbmNlcnMsIC4uLkFkZGl0aW9uYWxFbmhhbmNlcnNdPlxyXG4gIGNvbmNhdCguLi5hcnI6IGFueVtdKSB7XHJcbiAgICByZXR1cm4gc3VwZXIuY29uY2F0LmFwcGx5KHRoaXMsIGFycilcclxuICB9XHJcblxyXG4gIHByZXBlbmQ8QWRkaXRpb25hbEVuaGFuY2VycyBleHRlbmRzIFJlYWRvbmx5QXJyYXk8U3RvcmVFbmhhbmNlcjxhbnksIGFueT4+PihcclxuICAgIGl0ZW1zOiBBZGRpdGlvbmFsRW5oYW5jZXJzXHJcbiAgKTogRW5oYW5jZXJBcnJheTxbLi4uQWRkaXRpb25hbEVuaGFuY2VycywgLi4uRW5oYW5jZXJzXT5cclxuXHJcbiAgcHJlcGVuZDxBZGRpdGlvbmFsRW5oYW5jZXJzIGV4dGVuZHMgUmVhZG9ubHlBcnJheTxTdG9yZUVuaGFuY2VyPGFueSwgYW55Pj4+KFxyXG4gICAgLi4uaXRlbXM6IEFkZGl0aW9uYWxFbmhhbmNlcnNcclxuICApOiBFbmhhbmNlckFycmF5PFsuLi5BZGRpdGlvbmFsRW5oYW5jZXJzLCAuLi5FbmhhbmNlcnNdPlxyXG5cclxuICBwcmVwZW5kKC4uLmFycjogYW55W10pIHtcclxuICAgIGlmIChhcnIubGVuZ3RoID09PSAxICYmIEFycmF5LmlzQXJyYXkoYXJyWzBdKSkge1xyXG4gICAgICByZXR1cm4gbmV3IEVuaGFuY2VyQXJyYXkoLi4uYXJyWzBdLmNvbmNhdCh0aGlzKSlcclxuICAgIH1cclxuICAgIHJldHVybiBuZXcgRW5oYW5jZXJBcnJheSguLi5hcnIuY29uY2F0KHRoaXMpKVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGZyZWV6ZURyYWZ0YWJsZTxUPih2YWw6IFQpIHtcclxuICByZXR1cm4gaXNEcmFmdGFibGUodmFsKSA/IGNyZWF0ZU5leHRTdGF0ZSh2YWwsICgpID0+IHt9KSA6IHZhbFxyXG59XHJcbiIsICJpbXBvcnQgdHlwZSB7IE1pZGRsZXdhcmUgfSBmcm9tICdyZWR1eCdcclxuaW1wb3J0IHsgZ2V0VGltZU1lYXN1cmVVdGlscyB9IGZyb20gJy4vdXRpbHMnXHJcblxyXG50eXBlIEVudHJ5UHJvY2Vzc29yID0gKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiBhbnlcclxuXHJcbmNvbnN0IGlzUHJvZHVjdGlvbjogYm9vbGVhbiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbidcclxuY29uc3QgcHJlZml4OiBzdHJpbmcgPSAnSW52YXJpYW50IGZhaWxlZCdcclxuXHJcbi8vIFRocm93IGFuIGVycm9yIGlmIHRoZSBjb25kaXRpb24gZmFpbHNcclxuLy8gU3RyaXAgb3V0IGVycm9yIG1lc3NhZ2VzIGZvciBwcm9kdWN0aW9uXHJcbi8vID4gTm90IHByb3ZpZGluZyBhbiBpbmxpbmUgZGVmYXVsdCBhcmd1bWVudCBmb3IgbWVzc2FnZSBhcyB0aGUgcmVzdWx0IGlzIHNtYWxsZXJcclxuZnVuY3Rpb24gaW52YXJpYW50KGNvbmRpdGlvbjogYW55LCBtZXNzYWdlPzogc3RyaW5nKSB7XHJcbiAgaWYgKGNvbmRpdGlvbikge1xyXG4gICAgcmV0dXJuXHJcbiAgfVxyXG4gIC8vIENvbmRpdGlvbiBub3QgcGFzc2VkXHJcblxyXG4gIC8vIEluIHByb2R1Y3Rpb24gd2Ugc3RyaXAgdGhlIG1lc3NhZ2UgYnV0IHN0aWxsIHRocm93XHJcbiAgaWYgKGlzUHJvZHVjdGlvbikge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKHByZWZpeClcclxuICB9XHJcblxyXG4gIC8vIFdoZW4gbm90IGluIHByb2R1Y3Rpb24gd2UgYWxsb3cgdGhlIG1lc3NhZ2UgdG8gcGFzcyB0aHJvdWdoXHJcbiAgLy8gKlRoaXMgYmxvY2sgd2lsbCBiZSByZW1vdmVkIGluIHByb2R1Y3Rpb24gYnVpbGRzKlxyXG4gIHRocm93IG5ldyBFcnJvcihgJHtwcmVmaXh9OiAke21lc3NhZ2UgfHwgJyd9YClcclxufVxyXG5cclxuZnVuY3Rpb24gc3RyaW5naWZ5KFxyXG4gIG9iajogYW55LFxyXG4gIHNlcmlhbGl6ZXI/OiBFbnRyeVByb2Nlc3NvcixcclxuICBpbmRlbnQ/OiBzdHJpbmcgfCBudW1iZXIsXHJcbiAgZGVjeWNsZXI/OiBFbnRyeVByb2Nlc3NvclxyXG4pOiBzdHJpbmcge1xyXG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShvYmosIGdldFNlcmlhbGl6ZShzZXJpYWxpemVyLCBkZWN5Y2xlciksIGluZGVudClcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0U2VyaWFsaXplKFxyXG4gIHNlcmlhbGl6ZXI/OiBFbnRyeVByb2Nlc3NvcixcclxuICBkZWN5Y2xlcj86IEVudHJ5UHJvY2Vzc29yXHJcbik6IEVudHJ5UHJvY2Vzc29yIHtcclxuICBsZXQgc3RhY2s6IGFueVtdID0gW10sXHJcbiAgICBrZXlzOiBhbnlbXSA9IFtdXHJcblxyXG4gIGlmICghZGVjeWNsZXIpXHJcbiAgICBkZWN5Y2xlciA9IGZ1bmN0aW9uIChfOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcclxuICAgICAgaWYgKHN0YWNrWzBdID09PSB2YWx1ZSkgcmV0dXJuICdbQ2lyY3VsYXIgfl0nXHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgJ1tDaXJjdWxhciB+LicgKyBrZXlzLnNsaWNlKDAsIHN0YWNrLmluZGV4T2YodmFsdWUpKS5qb2luKCcuJykgKyAnXSdcclxuICAgICAgKVxyXG4gICAgfVxyXG5cclxuICByZXR1cm4gZnVuY3Rpb24gKHRoaXM6IGFueSwga2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcclxuICAgIGlmIChzdGFjay5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHZhciB0aGlzUG9zID0gc3RhY2suaW5kZXhPZih0aGlzKVxyXG4gICAgICB+dGhpc1BvcyA/IHN0YWNrLnNwbGljZSh0aGlzUG9zICsgMSkgOiBzdGFjay5wdXNoKHRoaXMpXHJcbiAgICAgIH50aGlzUG9zID8ga2V5cy5zcGxpY2UodGhpc1BvcywgSW5maW5pdHksIGtleSkgOiBrZXlzLnB1c2goa2V5KVxyXG4gICAgICBpZiAofnN0YWNrLmluZGV4T2YodmFsdWUpKSB2YWx1ZSA9IGRlY3ljbGVyIS5jYWxsKHRoaXMsIGtleSwgdmFsdWUpXHJcbiAgICB9IGVsc2Ugc3RhY2sucHVzaCh2YWx1ZSlcclxuXHJcbiAgICByZXR1cm4gc2VyaWFsaXplciA9PSBudWxsID8gdmFsdWUgOiBzZXJpYWxpemVyLmNhbGwodGhpcywga2V5LCB2YWx1ZSlcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBUaGUgZGVmYXVsdCBgaXNJbW11dGFibGVgIGZ1bmN0aW9uLlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNJbW11dGFibGVEZWZhdWx0KHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XHJcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgfHwgdmFsdWUgPT0gbnVsbCB8fCBPYmplY3QuaXNGcm96ZW4odmFsdWUpXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB0cmFja0Zvck11dGF0aW9ucyhcclxuICBpc0ltbXV0YWJsZTogSXNJbW11dGFibGVGdW5jLFxyXG4gIGlnbm9yZVBhdGhzOiBJZ25vcmVQYXRocyB8IHVuZGVmaW5lZCxcclxuICBvYmo6IGFueVxyXG4pIHtcclxuICBjb25zdCB0cmFja2VkUHJvcGVydGllcyA9IHRyYWNrUHJvcGVydGllcyhpc0ltbXV0YWJsZSwgaWdub3JlUGF0aHMsIG9iailcclxuICByZXR1cm4ge1xyXG4gICAgZGV0ZWN0TXV0YXRpb25zKCkge1xyXG4gICAgICByZXR1cm4gZGV0ZWN0TXV0YXRpb25zKGlzSW1tdXRhYmxlLCBpZ25vcmVQYXRocywgdHJhY2tlZFByb3BlcnRpZXMsIG9iailcclxuICAgIH0sXHJcbiAgfVxyXG59XHJcblxyXG5pbnRlcmZhY2UgVHJhY2tlZFByb3BlcnR5IHtcclxuICB2YWx1ZTogYW55XHJcbiAgY2hpbGRyZW46IFJlY29yZDxzdHJpbmcsIGFueT5cclxufVxyXG5cclxuZnVuY3Rpb24gdHJhY2tQcm9wZXJ0aWVzKFxyXG4gIGlzSW1tdXRhYmxlOiBJc0ltbXV0YWJsZUZ1bmMsXHJcbiAgaWdub3JlUGF0aHM6IElnbm9yZVBhdGhzID0gW10sXHJcbiAgb2JqOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxyXG4gIHBhdGg6IHN0cmluZyA9ICcnLFxyXG4gIGNoZWNrZWRPYmplY3RzOiBTZXQ8UmVjb3JkPHN0cmluZywgYW55Pj4gPSBuZXcgU2V0KClcclxuKSB7XHJcbiAgY29uc3QgdHJhY2tlZDogUGFydGlhbDxUcmFja2VkUHJvcGVydHk+ID0geyB2YWx1ZTogb2JqIH1cclxuXHJcbiAgaWYgKCFpc0ltbXV0YWJsZShvYmopICYmICFjaGVja2VkT2JqZWN0cy5oYXMob2JqKSkge1xyXG4gICAgY2hlY2tlZE9iamVjdHMuYWRkKG9iaik7XHJcbiAgICB0cmFja2VkLmNoaWxkcmVuID0ge31cclxuXHJcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcclxuICAgICAgY29uc3QgY2hpbGRQYXRoID0gcGF0aCA/IHBhdGggKyAnLicgKyBrZXkgOiBrZXlcclxuICAgICAgaWYgKGlnbm9yZVBhdGhzLmxlbmd0aCAmJiBpZ25vcmVQYXRocy5pbmRleE9mKGNoaWxkUGF0aCkgIT09IC0xKSB7XHJcbiAgICAgICAgY29udGludWVcclxuICAgICAgfVxyXG5cclxuICAgICAgdHJhY2tlZC5jaGlsZHJlbltrZXldID0gdHJhY2tQcm9wZXJ0aWVzKFxyXG4gICAgICAgIGlzSW1tdXRhYmxlLFxyXG4gICAgICAgIGlnbm9yZVBhdGhzLFxyXG4gICAgICAgIG9ialtrZXldLFxyXG4gICAgICAgIGNoaWxkUGF0aFxyXG4gICAgICApXHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiB0cmFja2VkIGFzIFRyYWNrZWRQcm9wZXJ0eVxyXG59XHJcblxyXG50eXBlIElnbm9yZVBhdGhzID0gcmVhZG9ubHkgKHN0cmluZyB8IFJlZ0V4cClbXVxyXG5cclxuZnVuY3Rpb24gZGV0ZWN0TXV0YXRpb25zKFxyXG4gIGlzSW1tdXRhYmxlOiBJc0ltbXV0YWJsZUZ1bmMsXHJcbiAgaWdub3JlZFBhdGhzOiBJZ25vcmVQYXRocyA9IFtdLFxyXG4gIHRyYWNrZWRQcm9wZXJ0eTogVHJhY2tlZFByb3BlcnR5LFxyXG4gIG9iajogYW55LFxyXG4gIHNhbWVQYXJlbnRSZWY6IGJvb2xlYW4gPSBmYWxzZSxcclxuICBwYXRoOiBzdHJpbmcgPSAnJ1xyXG4pOiB7IHdhc011dGF0ZWQ6IGJvb2xlYW47IHBhdGg/OiBzdHJpbmcgfSB7XHJcbiAgY29uc3QgcHJldk9iaiA9IHRyYWNrZWRQcm9wZXJ0eSA/IHRyYWNrZWRQcm9wZXJ0eS52YWx1ZSA6IHVuZGVmaW5lZFxyXG5cclxuICBjb25zdCBzYW1lUmVmID0gcHJldk9iaiA9PT0gb2JqXHJcblxyXG4gIGlmIChzYW1lUGFyZW50UmVmICYmICFzYW1lUmVmICYmICFOdW1iZXIuaXNOYU4ob2JqKSkge1xyXG4gICAgcmV0dXJuIHsgd2FzTXV0YXRlZDogdHJ1ZSwgcGF0aCB9XHJcbiAgfVxyXG5cclxuICBpZiAoaXNJbW11dGFibGUocHJldk9iaikgfHwgaXNJbW11dGFibGUob2JqKSkge1xyXG4gICAgcmV0dXJuIHsgd2FzTXV0YXRlZDogZmFsc2UgfVxyXG4gIH1cclxuXHJcbiAgLy8gR2F0aGVyIGFsbCBrZXlzIGZyb20gcHJldiAodHJhY2tlZCkgYW5kIGFmdGVyIG9ianNcclxuICBjb25zdCBrZXlzVG9EZXRlY3Q6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge31cclxuICBmb3IgKGxldCBrZXkgaW4gdHJhY2tlZFByb3BlcnR5LmNoaWxkcmVuKSB7XHJcbiAgICBrZXlzVG9EZXRlY3Rba2V5XSA9IHRydWVcclxuICB9XHJcbiAgZm9yIChsZXQga2V5IGluIG9iaikge1xyXG4gICAga2V5c1RvRGV0ZWN0W2tleV0gPSB0cnVlXHJcbiAgfVxyXG5cclxuICBjb25zdCBoYXNJZ25vcmVkUGF0aHMgPSBpZ25vcmVkUGF0aHMubGVuZ3RoID4gMFxyXG5cclxuICBmb3IgKGxldCBrZXkgaW4ga2V5c1RvRGV0ZWN0KSB7XHJcbiAgICBjb25zdCBuZXN0ZWRQYXRoID0gcGF0aCA/IHBhdGggKyAnLicgKyBrZXkgOiBrZXlcclxuXHJcbiAgICBpZiAoaGFzSWdub3JlZFBhdGhzKSB7XHJcbiAgICAgIGNvbnN0IGhhc01hdGNoZXMgPSBpZ25vcmVkUGF0aHMuc29tZSgoaWdub3JlZCkgPT4ge1xyXG4gICAgICAgIGlmIChpZ25vcmVkIGluc3RhbmNlb2YgUmVnRXhwKSB7XHJcbiAgICAgICAgICByZXR1cm4gaWdub3JlZC50ZXN0KG5lc3RlZFBhdGgpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXN0ZWRQYXRoID09PSBpZ25vcmVkXHJcbiAgICAgIH0pXHJcbiAgICAgIGlmIChoYXNNYXRjaGVzKSB7XHJcbiAgICAgICAgY29udGludWVcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHJlc3VsdCA9IGRldGVjdE11dGF0aW9ucyhcclxuICAgICAgaXNJbW11dGFibGUsXHJcbiAgICAgIGlnbm9yZWRQYXRocyxcclxuICAgICAgdHJhY2tlZFByb3BlcnR5LmNoaWxkcmVuW2tleV0sXHJcbiAgICAgIG9ialtrZXldLFxyXG4gICAgICBzYW1lUmVmLFxyXG4gICAgICBuZXN0ZWRQYXRoXHJcbiAgICApXHJcblxyXG4gICAgaWYgKHJlc3VsdC53YXNNdXRhdGVkKSB7XHJcbiAgICAgIHJldHVybiByZXN1bHRcclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIHsgd2FzTXV0YXRlZDogZmFsc2UgfVxyXG59XHJcblxyXG50eXBlIElzSW1tdXRhYmxlRnVuYyA9ICh2YWx1ZTogYW55KSA9PiBib29sZWFuXHJcblxyXG4vKipcclxuICogT3B0aW9ucyBmb3IgYGNyZWF0ZUltbXV0YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZSgpYC5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJbW11dGFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmVPcHRpb25zIHtcclxuICAvKipcclxuICAgIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGNoZWNrIGlmIGEgdmFsdWUgaXMgY29uc2lkZXJlZCB0byBiZSBpbW11dGFibGUuXHJcbiAgICBUaGlzIGZ1bmN0aW9uIGlzIGFwcGxpZWQgcmVjdXJzaXZlbHkgdG8gZXZlcnkgdmFsdWUgY29udGFpbmVkIGluIHRoZSBzdGF0ZS5cclxuICAgIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHdpbGwgcmV0dXJuIHRydWUgZm9yIHByaW1pdGl2ZSB0eXBlcyBcclxuICAgIChsaWtlIG51bWJlcnMsIHN0cmluZ3MsIGJvb2xlYW5zLCBudWxsIGFuZCB1bmRlZmluZWQpLlxyXG4gICAqL1xyXG4gIGlzSW1tdXRhYmxlPzogSXNJbW11dGFibGVGdW5jXHJcbiAgLyoqIFxyXG4gICAgQW4gYXJyYXkgb2YgZG90LXNlcGFyYXRlZCBwYXRoIHN0cmluZ3MgdGhhdCBtYXRjaCBuYW1lZCBub2RlcyBmcm9tIFxyXG4gICAgdGhlIHJvb3Qgc3RhdGUgdG8gaWdub3JlIHdoZW4gY2hlY2tpbmcgZm9yIGltbXV0YWJpbGl0eS5cclxuICAgIERlZmF1bHRzIHRvIHVuZGVmaW5lZFxyXG4gICAqL1xyXG4gIGlnbm9yZWRQYXRocz86IElnbm9yZVBhdGhzXHJcbiAgLyoqIFByaW50IGEgd2FybmluZyBpZiBjaGVja3MgdGFrZSBsb25nZXIgdGhhbiBOIG1zLiBEZWZhdWx0OiAzMm1zICovXHJcbiAgd2FybkFmdGVyPzogbnVtYmVyXHJcbiAgLy8gQGRlcHJlY2F0ZWQuIFVzZSBpZ25vcmVkUGF0aHNcclxuICBpZ25vcmU/OiBzdHJpbmdbXVxyXG59XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG1pZGRsZXdhcmUgdGhhdCBjaGVja3Mgd2hldGhlciBhbnkgc3RhdGUgd2FzIG11dGF0ZWQgaW4gYmV0d2VlblxyXG4gKiBkaXNwYXRjaGVzIG9yIGR1cmluZyBhIGRpc3BhdGNoLiBJZiBhbnkgbXV0YXRpb25zIGFyZSBkZXRlY3RlZCwgYW4gZXJyb3IgaXNcclxuICogdGhyb3duLlxyXG4gKlxyXG4gKiBAcGFyYW0gb3B0aW9ucyBNaWRkbGV3YXJlIG9wdGlvbnMuXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVJbW11dGFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmUoXHJcbiAgb3B0aW9uczogSW1tdXRhYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlT3B0aW9ucyA9IHt9XHJcbik6IE1pZGRsZXdhcmUge1xyXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XHJcbiAgICByZXR1cm4gKCkgPT4gKG5leHQpID0+IChhY3Rpb24pID0+IG5leHQoYWN0aW9uKVxyXG4gIH1cclxuXHJcbiAgbGV0IHtcclxuICAgIGlzSW1tdXRhYmxlID0gaXNJbW11dGFibGVEZWZhdWx0LFxyXG4gICAgaWdub3JlZFBhdGhzLFxyXG4gICAgd2FybkFmdGVyID0gMzIsXHJcbiAgICBpZ25vcmUsXHJcbiAgfSA9IG9wdGlvbnNcclxuXHJcbiAgLy8gQWxpYXMgaWdub3JlLT5pZ25vcmVkUGF0aHMsIGJ1dCBwcmVmZXIgaWdub3JlZFBhdGhzIGlmIHByZXNlbnRcclxuICBpZ25vcmVkUGF0aHMgPSBpZ25vcmVkUGF0aHMgfHwgaWdub3JlXHJcblxyXG4gIGNvbnN0IHRyYWNrID0gdHJhY2tGb3JNdXRhdGlvbnMuYmluZChudWxsLCBpc0ltbXV0YWJsZSwgaWdub3JlZFBhdGhzKVxyXG5cclxuICByZXR1cm4gKHsgZ2V0U3RhdGUgfSkgPT4ge1xyXG4gICAgbGV0IHN0YXRlID0gZ2V0U3RhdGUoKVxyXG4gICAgbGV0IHRyYWNrZXIgPSB0cmFjayhzdGF0ZSlcclxuXHJcbiAgICBsZXQgcmVzdWx0XHJcbiAgICByZXR1cm4gKG5leHQpID0+IChhY3Rpb24pID0+IHtcclxuICAgICAgY29uc3QgbWVhc3VyZVV0aWxzID0gZ2V0VGltZU1lYXN1cmVVdGlscyhcclxuICAgICAgICB3YXJuQWZ0ZXIsXHJcbiAgICAgICAgJ0ltbXV0YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZSdcclxuICAgICAgKVxyXG5cclxuICAgICAgbWVhc3VyZVV0aWxzLm1lYXN1cmVUaW1lKCgpID0+IHtcclxuICAgICAgICBzdGF0ZSA9IGdldFN0YXRlKClcclxuXHJcbiAgICAgICAgcmVzdWx0ID0gdHJhY2tlci5kZXRlY3RNdXRhdGlvbnMoKVxyXG4gICAgICAgIC8vIFRyYWNrIGJlZm9yZSBwb3RlbnRpYWxseSBub3QgbWVldGluZyB0aGUgaW52YXJpYW50XHJcbiAgICAgICAgdHJhY2tlciA9IHRyYWNrKHN0YXRlKVxyXG5cclxuICAgICAgICBpbnZhcmlhbnQoXHJcbiAgICAgICAgICAhcmVzdWx0Lndhc011dGF0ZWQsXHJcbiAgICAgICAgICBgQSBzdGF0ZSBtdXRhdGlvbiB3YXMgZGV0ZWN0ZWQgYmV0d2VlbiBkaXNwYXRjaGVzLCBpbiB0aGUgcGF0aCAnJHtcclxuICAgICAgICAgICAgcmVzdWx0LnBhdGggfHwgJydcclxuICAgICAgICAgIH0nLiAgVGhpcyBtYXkgY2F1c2UgaW5jb3JyZWN0IGJlaGF2aW9yLiAoaHR0cHM6Ly9yZWR1eC5qcy5vcmcvc3R5bGUtZ3VpZGUvc3R5bGUtZ3VpZGUjZG8tbm90LW11dGF0ZS1zdGF0ZSlgXHJcbiAgICAgICAgKVxyXG4gICAgICB9KVxyXG5cclxuICAgICAgY29uc3QgZGlzcGF0Y2hlZEFjdGlvbiA9IG5leHQoYWN0aW9uKVxyXG5cclxuICAgICAgbWVhc3VyZVV0aWxzLm1lYXN1cmVUaW1lKCgpID0+IHtcclxuICAgICAgICBzdGF0ZSA9IGdldFN0YXRlKClcclxuXHJcbiAgICAgICAgcmVzdWx0ID0gdHJhY2tlci5kZXRlY3RNdXRhdGlvbnMoKVxyXG4gICAgICAgIC8vIFRyYWNrIGJlZm9yZSBwb3RlbnRpYWxseSBub3QgbWVldGluZyB0aGUgaW52YXJpYW50XHJcbiAgICAgICAgdHJhY2tlciA9IHRyYWNrKHN0YXRlKVxyXG5cclxuICAgICAgICByZXN1bHQud2FzTXV0YXRlZCAmJlxyXG4gICAgICAgICAgaW52YXJpYW50KFxyXG4gICAgICAgICAgICAhcmVzdWx0Lndhc011dGF0ZWQsXHJcbiAgICAgICAgICAgIGBBIHN0YXRlIG11dGF0aW9uIHdhcyBkZXRlY3RlZCBpbnNpZGUgYSBkaXNwYXRjaCwgaW4gdGhlIHBhdGg6ICR7XHJcbiAgICAgICAgICAgICAgcmVzdWx0LnBhdGggfHwgJydcclxuICAgICAgICAgICAgfS4gVGFrZSBhIGxvb2sgYXQgdGhlIHJlZHVjZXIocykgaGFuZGxpbmcgdGhlIGFjdGlvbiAke3N0cmluZ2lmeShcclxuICAgICAgICAgICAgICBhY3Rpb25cclxuICAgICAgICAgICAgKX0uIChodHRwczovL3JlZHV4LmpzLm9yZy9zdHlsZS1ndWlkZS9zdHlsZS1ndWlkZSNkby1ub3QtbXV0YXRlLXN0YXRlKWBcclxuICAgICAgICAgIClcclxuICAgICAgfSlcclxuXHJcbiAgICAgIG1lYXN1cmVVdGlscy53YXJuSWZFeGNlZWRlZCgpXHJcblxyXG4gICAgICByZXR1cm4gZGlzcGF0Y2hlZEFjdGlvblxyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCAiaW1wb3J0IGlzUGxhaW5PYmplY3QgZnJvbSAnLi9pc1BsYWluT2JqZWN0J1xyXG5pbXBvcnQgdHlwZSB7IE1pZGRsZXdhcmUgfSBmcm9tICdyZWR1eCdcclxuaW1wb3J0IHsgZ2V0VGltZU1lYXN1cmVVdGlscyB9IGZyb20gJy4vdXRpbHMnXHJcblxyXG4vKipcclxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBwYXNzZWQgdmFsdWUgaXMgXCJwbGFpblwiLCBpLmUuIGEgdmFsdWUgdGhhdCBpcyBlaXRoZXJcclxuICogZGlyZWN0bHkgSlNPTi1zZXJpYWxpemFibGUgKGJvb2xlYW4sIG51bWJlciwgc3RyaW5nLCBhcnJheSwgcGxhaW4gb2JqZWN0KVxyXG4gKiBvciBgdW5kZWZpbmVkYC5cclxuICpcclxuICogQHBhcmFtIHZhbCBUaGUgdmFsdWUgdG8gY2hlY2suXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1BsYWluKHZhbDogYW55KSB7XHJcbiAgY29uc3QgdHlwZSA9IHR5cGVvZiB2YWxcclxuICByZXR1cm4gKFxyXG4gICAgdmFsID09IG51bGwgfHxcclxuICAgIHR5cGUgPT09ICdzdHJpbmcnIHx8XHJcbiAgICB0eXBlID09PSAnYm9vbGVhbicgfHxcclxuICAgIHR5cGUgPT09ICdudW1iZXInIHx8XHJcbiAgICBBcnJheS5pc0FycmF5KHZhbCkgfHxcclxuICAgIGlzUGxhaW5PYmplY3QodmFsKVxyXG4gIClcclxufVxyXG5cclxuaW50ZXJmYWNlIE5vblNlcmlhbGl6YWJsZVZhbHVlIHtcclxuICBrZXlQYXRoOiBzdHJpbmdcclxuICB2YWx1ZTogdW5rbm93blxyXG59XHJcblxyXG50eXBlIElnbm9yZVBhdGhzID0gcmVhZG9ubHkgKHN0cmluZyB8IFJlZ0V4cClbXVxyXG5cclxuLyoqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBmaW5kTm9uU2VyaWFsaXphYmxlVmFsdWUoXHJcbiAgdmFsdWU6IHVua25vd24sXHJcbiAgcGF0aDogc3RyaW5nID0gJycsXHJcbiAgaXNTZXJpYWxpemFibGU6ICh2YWx1ZTogdW5rbm93bikgPT4gYm9vbGVhbiA9IGlzUGxhaW4sXHJcbiAgZ2V0RW50cmllcz86ICh2YWx1ZTogdW5rbm93bikgPT4gW3N0cmluZywgYW55XVtdLFxyXG4gIGlnbm9yZWRQYXRoczogSWdub3JlUGF0aHMgPSBbXSxcclxuICBjYWNoZT86IFdlYWtTZXQ8b2JqZWN0PlxyXG4pOiBOb25TZXJpYWxpemFibGVWYWx1ZSB8IGZhbHNlIHtcclxuICBsZXQgZm91bmROZXN0ZWRTZXJpYWxpemFibGU6IE5vblNlcmlhbGl6YWJsZVZhbHVlIHwgZmFsc2VcclxuXHJcbiAgaWYgKCFpc1NlcmlhbGl6YWJsZSh2YWx1ZSkpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGtleVBhdGg6IHBhdGggfHwgJzxyb290PicsXHJcbiAgICAgIHZhbHVlOiB2YWx1ZSxcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09PSBudWxsKSB7XHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcblxyXG4gIGlmIChjYWNoZT8uaGFzKHZhbHVlKSkgcmV0dXJuIGZhbHNlXHJcblxyXG4gIGNvbnN0IGVudHJpZXMgPSBnZXRFbnRyaWVzICE9IG51bGwgPyBnZXRFbnRyaWVzKHZhbHVlKSA6IE9iamVjdC5lbnRyaWVzKHZhbHVlKVxyXG5cclxuICBjb25zdCBoYXNJZ25vcmVkUGF0aHMgPSBpZ25vcmVkUGF0aHMubGVuZ3RoID4gMFxyXG5cclxuICBmb3IgKGNvbnN0IFtrZXksIG5lc3RlZFZhbHVlXSBvZiBlbnRyaWVzKSB7XHJcbiAgICBjb25zdCBuZXN0ZWRQYXRoID0gcGF0aCA/IHBhdGggKyAnLicgKyBrZXkgOiBrZXlcclxuXHJcbiAgICBpZiAoaGFzSWdub3JlZFBhdGhzKSB7XHJcbiAgICAgIGNvbnN0IGhhc01hdGNoZXMgPSBpZ25vcmVkUGF0aHMuc29tZSgoaWdub3JlZCkgPT4ge1xyXG4gICAgICAgIGlmIChpZ25vcmVkIGluc3RhbmNlb2YgUmVnRXhwKSB7XHJcbiAgICAgICAgICByZXR1cm4gaWdub3JlZC50ZXN0KG5lc3RlZFBhdGgpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXN0ZWRQYXRoID09PSBpZ25vcmVkXHJcbiAgICAgIH0pXHJcbiAgICAgIGlmIChoYXNNYXRjaGVzKSB7XHJcbiAgICAgICAgY29udGludWVcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICghaXNTZXJpYWxpemFibGUobmVzdGVkVmFsdWUpKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAga2V5UGF0aDogbmVzdGVkUGF0aCxcclxuICAgICAgICB2YWx1ZTogbmVzdGVkVmFsdWUsXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodHlwZW9mIG5lc3RlZFZhbHVlID09PSAnb2JqZWN0Jykge1xyXG4gICAgICBmb3VuZE5lc3RlZFNlcmlhbGl6YWJsZSA9IGZpbmROb25TZXJpYWxpemFibGVWYWx1ZShcclxuICAgICAgICBuZXN0ZWRWYWx1ZSxcclxuICAgICAgICBuZXN0ZWRQYXRoLFxyXG4gICAgICAgIGlzU2VyaWFsaXphYmxlLFxyXG4gICAgICAgIGdldEVudHJpZXMsXHJcbiAgICAgICAgaWdub3JlZFBhdGhzLFxyXG4gICAgICAgIGNhY2hlXHJcbiAgICAgIClcclxuXHJcbiAgICAgIGlmIChmb3VuZE5lc3RlZFNlcmlhbGl6YWJsZSkge1xyXG4gICAgICAgIHJldHVybiBmb3VuZE5lc3RlZFNlcmlhbGl6YWJsZVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpZiAoY2FjaGUgJiYgaXNOZXN0ZWRGcm96ZW4odmFsdWUpKSBjYWNoZS5hZGQodmFsdWUpXHJcblxyXG4gIHJldHVybiBmYWxzZVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNOZXN0ZWRGcm96ZW4odmFsdWU6IG9iamVjdCkge1xyXG4gIGlmICghT2JqZWN0LmlzRnJvemVuKHZhbHVlKSkgcmV0dXJuIGZhbHNlXHJcblxyXG4gIGZvciAoY29uc3QgbmVzdGVkVmFsdWUgb2YgT2JqZWN0LnZhbHVlcyh2YWx1ZSkpIHtcclxuICAgIGlmICh0eXBlb2YgbmVzdGVkVmFsdWUgIT09ICdvYmplY3QnIHx8IG5lc3RlZFZhbHVlID09PSBudWxsKSBjb250aW51ZVxyXG5cclxuICAgIGlmICghaXNOZXN0ZWRGcm96ZW4obmVzdGVkVmFsdWUpKSByZXR1cm4gZmFsc2VcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBPcHRpb25zIGZvciBgY3JlYXRlU2VyaWFsaXphYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlKClgLlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFNlcmlhbGl6YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZU9wdGlvbnMge1xyXG4gIC8qKlxyXG4gICAqIFRoZSBmdW5jdGlvbiB0byBjaGVjayBpZiBhIHZhbHVlIGlzIGNvbnNpZGVyZWQgc2VyaWFsaXphYmxlLiBUaGlzXHJcbiAgICogZnVuY3Rpb24gaXMgYXBwbGllZCByZWN1cnNpdmVseSB0byBldmVyeSB2YWx1ZSBjb250YWluZWQgaW4gdGhlXHJcbiAgICogc3RhdGUuIERlZmF1bHRzIHRvIGBpc1BsYWluKClgLlxyXG4gICAqL1xyXG4gIGlzU2VyaWFsaXphYmxlPzogKHZhbHVlOiBhbnkpID0+IGJvb2xlYW5cclxuICAvKipcclxuICAgKiBUaGUgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIHVzZWQgdG8gcmV0cmlldmUgZW50cmllcyBmcm9tIGVhY2hcclxuICAgKiB2YWx1ZS4gIElmIHVuc3BlY2lmaWVkLCBgT2JqZWN0LmVudHJpZXNgIHdpbGwgYmUgdXNlZC4gRGVmYXVsdHNcclxuICAgKiB0byBgdW5kZWZpbmVkYC5cclxuICAgKi9cclxuICBnZXRFbnRyaWVzPzogKHZhbHVlOiBhbnkpID0+IFtzdHJpbmcsIGFueV1bXVxyXG5cclxuICAvKipcclxuICAgKiBBbiBhcnJheSBvZiBhY3Rpb24gdHlwZXMgdG8gaWdub3JlIHdoZW4gY2hlY2tpbmcgZm9yIHNlcmlhbGl6YWJpbGl0eS5cclxuICAgKiBEZWZhdWx0cyB0byBbXVxyXG4gICAqL1xyXG4gIGlnbm9yZWRBY3Rpb25zPzogc3RyaW5nW11cclxuXHJcbiAgLyoqXHJcbiAgICogQW4gYXJyYXkgb2YgZG90LXNlcGFyYXRlZCBwYXRoIHN0cmluZ3Mgb3IgcmVndWxhciBleHByZXNzaW9ucyB0byBpZ25vcmVcclxuICAgKiB3aGVuIGNoZWNraW5nIGZvciBzZXJpYWxpemFiaWxpdHksIERlZmF1bHRzIHRvXHJcbiAgICogWydtZXRhLmFyZycsICdtZXRhLmJhc2VRdWVyeU1ldGEnXVxyXG4gICAqL1xyXG4gIGlnbm9yZWRBY3Rpb25QYXRocz86IChzdHJpbmcgfCBSZWdFeHApW11cclxuXHJcbiAgLyoqXHJcbiAgICogQW4gYXJyYXkgb2YgZG90LXNlcGFyYXRlZCBwYXRoIHN0cmluZ3Mgb3IgcmVndWxhciBleHByZXNzaW9ucyB0byBpZ25vcmVcclxuICAgKiB3aGVuIGNoZWNraW5nIGZvciBzZXJpYWxpemFiaWxpdHksIERlZmF1bHRzIHRvIFtdXHJcbiAgICovXHJcbiAgaWdub3JlZFBhdGhzPzogKHN0cmluZyB8IFJlZ0V4cClbXVxyXG4gIC8qKlxyXG4gICAqIEV4ZWN1dGlvbiB0aW1lIHdhcm5pbmcgdGhyZXNob2xkLiBJZiB0aGUgbWlkZGxld2FyZSB0YWtlcyBsb25nZXJcclxuICAgKiB0aGFuIGB3YXJuQWZ0ZXJgIG1zLCBhIHdhcm5pbmcgd2lsbCBiZSBkaXNwbGF5ZWQgaW4gdGhlIGNvbnNvbGUuXHJcbiAgICogRGVmYXVsdHMgdG8gMzJtcy5cclxuICAgKi9cclxuICB3YXJuQWZ0ZXI/OiBudW1iZXJcclxuXHJcbiAgLyoqXHJcbiAgICogT3B0IG91dCBvZiBjaGVja2luZyBzdGF0ZS4gV2hlbiBzZXQgdG8gYHRydWVgLCBvdGhlciBzdGF0ZS1yZWxhdGVkIHBhcmFtcyB3aWxsIGJlIGlnbm9yZWQuXHJcbiAgICovXHJcbiAgaWdub3JlU3RhdGU/OiBib29sZWFuXHJcblxyXG4gIC8qKlxyXG4gICAqIE9wdCBvdXQgb2YgY2hlY2tpbmcgYWN0aW9ucy4gV2hlbiBzZXQgdG8gYHRydWVgLCBvdGhlciBhY3Rpb24tcmVsYXRlZCBwYXJhbXMgd2lsbCBiZSBpZ25vcmVkLlxyXG4gICAqL1xyXG4gIGlnbm9yZUFjdGlvbnM/OiBib29sZWFuXHJcblxyXG4gIC8qKlxyXG4gICAqIE9wdCBvdXQgb2YgY2FjaGluZyB0aGUgcmVzdWx0cy4gVGhlIGNhY2hlIHVzZXMgYSBXZWFrU2V0IGFuZCBzcGVlZHMgdXAgcmVwZWF0ZWQgY2hlY2tpbmcgcHJvY2Vzc2VzLlxyXG4gICAqIFRoZSBjYWNoZSBpcyBhdXRvbWF0aWNhbGx5IGRpc2FibGVkIGlmIG5vIGJyb3dzZXIgc3VwcG9ydCBmb3IgV2Vha1NldCBpcyBwcmVzZW50LlxyXG4gICAqL1xyXG4gIGRpc2FibGVDYWNoZT86IGJvb2xlYW5cclxufVxyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBtaWRkbGV3YXJlIHRoYXQsIGFmdGVyIGV2ZXJ5IHN0YXRlIGNoYW5nZSwgY2hlY2tzIGlmIHRoZSBuZXdcclxuICogc3RhdGUgaXMgc2VyaWFsaXphYmxlLiBJZiBhIG5vbi1zZXJpYWxpemFibGUgdmFsdWUgaXMgZm91bmQgd2l0aGluIHRoZVxyXG4gKiBzdGF0ZSwgYW4gZXJyb3IgaXMgcHJpbnRlZCB0byB0aGUgY29uc29sZS5cclxuICpcclxuICogQHBhcmFtIG9wdGlvbnMgTWlkZGxld2FyZSBvcHRpb25zLlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU2VyaWFsaXphYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlKFxyXG4gIG9wdGlvbnM6IFNlcmlhbGl6YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZU9wdGlvbnMgPSB7fVxyXG4pOiBNaWRkbGV3YXJlIHtcclxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xyXG4gICAgcmV0dXJuICgpID0+IChuZXh0KSA9PiAoYWN0aW9uKSA9PiBuZXh0KGFjdGlvbilcclxuICB9XHJcbiAgY29uc3Qge1xyXG4gICAgaXNTZXJpYWxpemFibGUgPSBpc1BsYWluLFxyXG4gICAgZ2V0RW50cmllcyxcclxuICAgIGlnbm9yZWRBY3Rpb25zID0gW10sXHJcbiAgICBpZ25vcmVkQWN0aW9uUGF0aHMgPSBbJ21ldGEuYXJnJywgJ21ldGEuYmFzZVF1ZXJ5TWV0YSddLFxyXG4gICAgaWdub3JlZFBhdGhzID0gW10sXHJcbiAgICB3YXJuQWZ0ZXIgPSAzMixcclxuICAgIGlnbm9yZVN0YXRlID0gZmFsc2UsXHJcbiAgICBpZ25vcmVBY3Rpb25zID0gZmFsc2UsXHJcbiAgICBkaXNhYmxlQ2FjaGUgPSBmYWxzZSxcclxuICB9ID0gb3B0aW9uc1xyXG5cclxuICBjb25zdCBjYWNoZTogV2Vha1NldDxvYmplY3Q+IHwgdW5kZWZpbmVkID1cclxuICAgICFkaXNhYmxlQ2FjaGUgJiYgV2Vha1NldCA/IG5ldyBXZWFrU2V0KCkgOiB1bmRlZmluZWRcclxuXHJcbiAgcmV0dXJuIChzdG9yZUFQSSkgPT4gKG5leHQpID0+IChhY3Rpb24pID0+IHtcclxuICAgIGNvbnN0IHJlc3VsdCA9IG5leHQoYWN0aW9uKVxyXG5cclxuICAgIGNvbnN0IG1lYXN1cmVVdGlscyA9IGdldFRpbWVNZWFzdXJlVXRpbHMoXHJcbiAgICAgIHdhcm5BZnRlcixcclxuICAgICAgJ1NlcmlhbGl6YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZSdcclxuICAgIClcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgICFpZ25vcmVBY3Rpb25zICYmXHJcbiAgICAgICEoaWdub3JlZEFjdGlvbnMubGVuZ3RoICYmIGlnbm9yZWRBY3Rpb25zLmluZGV4T2YoYWN0aW9uLnR5cGUpICE9PSAtMSlcclxuICAgICkge1xyXG4gICAgICBtZWFzdXJlVXRpbHMubWVhc3VyZVRpbWUoKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGZvdW5kQWN0aW9uTm9uU2VyaWFsaXphYmxlVmFsdWUgPSBmaW5kTm9uU2VyaWFsaXphYmxlVmFsdWUoXHJcbiAgICAgICAgICBhY3Rpb24sXHJcbiAgICAgICAgICAnJyxcclxuICAgICAgICAgIGlzU2VyaWFsaXphYmxlLFxyXG4gICAgICAgICAgZ2V0RW50cmllcyxcclxuICAgICAgICAgIGlnbm9yZWRBY3Rpb25QYXRocyxcclxuICAgICAgICAgIGNhY2hlXHJcbiAgICAgICAgKVxyXG5cclxuICAgICAgICBpZiAoZm91bmRBY3Rpb25Ob25TZXJpYWxpemFibGVWYWx1ZSkge1xyXG4gICAgICAgICAgY29uc3QgeyBrZXlQYXRoLCB2YWx1ZSB9ID0gZm91bmRBY3Rpb25Ob25TZXJpYWxpemFibGVWYWx1ZVxyXG5cclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXHJcbiAgICAgICAgICAgIGBBIG5vbi1zZXJpYWxpemFibGUgdmFsdWUgd2FzIGRldGVjdGVkIGluIGFuIGFjdGlvbiwgaW4gdGhlIHBhdGg6IFxcYCR7a2V5UGF0aH1cXGAuIFZhbHVlOmAsXHJcbiAgICAgICAgICAgIHZhbHVlLFxyXG4gICAgICAgICAgICAnXFxuVGFrZSBhIGxvb2sgYXQgdGhlIGxvZ2ljIHRoYXQgZGlzcGF0Y2hlZCB0aGlzIGFjdGlvbjogJyxcclxuICAgICAgICAgICAgYWN0aW9uLFxyXG4gICAgICAgICAgICAnXFxuKFNlZSBodHRwczovL3JlZHV4LmpzLm9yZy9mYXEvYWN0aW9ucyN3aHktc2hvdWxkLXR5cGUtYmUtYS1zdHJpbmctb3ItYXQtbGVhc3Qtc2VyaWFsaXphYmxlLXdoeS1zaG91bGQtbXktYWN0aW9uLXR5cGVzLWJlLWNvbnN0YW50cyknLFxyXG4gICAgICAgICAgICAnXFxuKFRvIGFsbG93IG5vbi1zZXJpYWxpemFibGUgdmFsdWVzIHNlZTogaHR0cHM6Ly9yZWR1eC10b29sa2l0LmpzLm9yZy91c2FnZS91c2FnZS1ndWlkZSN3b3JraW5nLXdpdGgtbm9uLXNlcmlhbGl6YWJsZS1kYXRhKSdcclxuICAgICAgICAgIClcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFpZ25vcmVTdGF0ZSkge1xyXG4gICAgICBtZWFzdXJlVXRpbHMubWVhc3VyZVRpbWUoKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHN0YXRlID0gc3RvcmVBUEkuZ2V0U3RhdGUoKVxyXG5cclxuICAgICAgICBjb25zdCBmb3VuZFN0YXRlTm9uU2VyaWFsaXphYmxlVmFsdWUgPSBmaW5kTm9uU2VyaWFsaXphYmxlVmFsdWUoXHJcbiAgICAgICAgICBzdGF0ZSxcclxuICAgICAgICAgICcnLFxyXG4gICAgICAgICAgaXNTZXJpYWxpemFibGUsXHJcbiAgICAgICAgICBnZXRFbnRyaWVzLFxyXG4gICAgICAgICAgaWdub3JlZFBhdGhzLFxyXG4gICAgICAgICAgY2FjaGVcclxuICAgICAgICApXHJcblxyXG4gICAgICAgIGlmIChmb3VuZFN0YXRlTm9uU2VyaWFsaXphYmxlVmFsdWUpIHtcclxuICAgICAgICAgIGNvbnN0IHsga2V5UGF0aCwgdmFsdWUgfSA9IGZvdW5kU3RhdGVOb25TZXJpYWxpemFibGVWYWx1ZVxyXG5cclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXHJcbiAgICAgICAgICAgIGBBIG5vbi1zZXJpYWxpemFibGUgdmFsdWUgd2FzIGRldGVjdGVkIGluIHRoZSBzdGF0ZSwgaW4gdGhlIHBhdGg6IFxcYCR7a2V5UGF0aH1cXGAuIFZhbHVlOmAsXHJcbiAgICAgICAgICAgIHZhbHVlLFxyXG4gICAgICAgICAgICBgXHJcblRha2UgYSBsb29rIGF0IHRoZSByZWR1Y2VyKHMpIGhhbmRsaW5nIHRoaXMgYWN0aW9uIHR5cGU6ICR7YWN0aW9uLnR5cGV9LlxyXG4oU2VlIGh0dHBzOi8vcmVkdXguanMub3JnL2ZhcS9vcmdhbml6aW5nLXN0YXRlI2Nhbi1pLXB1dC1mdW5jdGlvbnMtcHJvbWlzZXMtb3Itb3RoZXItbm9uLXNlcmlhbGl6YWJsZS1pdGVtcy1pbi1teS1zdG9yZS1zdGF0ZSlgXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG5cclxuICAgICAgbWVhc3VyZVV0aWxzLndhcm5JZkV4Y2VlZGVkKClcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVzdWx0XHJcbiAgfVxyXG59XHJcbiIsICJpbXBvcnQgdHlwZSB7IERyYWZ0IH0gZnJvbSAnaW1tZXInXHJcbmltcG9ydCBjcmVhdGVOZXh0U3RhdGUsIHsgaXNEcmFmdCwgaXNEcmFmdGFibGUgfSBmcm9tICdpbW1lcidcclxuaW1wb3J0IHR5cGUgeyBBbnlBY3Rpb24sIEFjdGlvbiwgUmVkdWNlciB9IGZyb20gJ3JlZHV4J1xyXG5pbXBvcnQgdHlwZSB7IEFjdGlvblJlZHVjZXJNYXBCdWlsZGVyIH0gZnJvbSAnLi9tYXBCdWlsZGVycydcclxuaW1wb3J0IHsgZXhlY3V0ZVJlZHVjZXJCdWlsZGVyQ2FsbGJhY2sgfSBmcm9tICcuL21hcEJ1aWxkZXJzJ1xyXG5pbXBvcnQgdHlwZSB7IE5vSW5mZXIgfSBmcm9tICcuL3RzSGVscGVycydcclxuaW1wb3J0IHsgZnJlZXplRHJhZnRhYmxlIH0gZnJvbSAnLi91dGlscydcclxuXHJcbi8qKlxyXG4gKiBEZWZpbmVzIGEgbWFwcGluZyBmcm9tIGFjdGlvbiB0eXBlcyB0byBjb3JyZXNwb25kaW5nIGFjdGlvbiBvYmplY3Qgc2hhcGVzLlxyXG4gKlxyXG4gKiBAZGVwcmVjYXRlZCBUaGlzIHNob3VsZCBub3QgYmUgdXNlZCBtYW51YWxseSAtIGl0IGlzIG9ubHkgdXNlZCBmb3IgaW50ZXJuYWxcclxuICogICAgICAgICAgICAgaW5mZXJlbmNlIHB1cnBvc2VzIGFuZCBzaG91bGQgbm90IGhhdmUgYW55IGZ1cnRoZXIgdmFsdWUuXHJcbiAqICAgICAgICAgICAgIEl0IG1pZ2h0IGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS5cclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IHR5cGUgQWN0aW9uczxUIGV4dGVuZHMga2V5b2YgYW55ID0gc3RyaW5nPiA9IFJlY29yZDxULCBBY3Rpb24+XHJcblxyXG4vKipcclxuICogQGRlcHJlY2F0ZWQgdXNlIGBUeXBlR3VhcmRgIGluc3RlYWRcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgQWN0aW9uTWF0Y2hlcjxBIGV4dGVuZHMgQW55QWN0aW9uPiB7XHJcbiAgKGFjdGlvbjogQW55QWN0aW9uKTogYWN0aW9uIGlzIEFcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgQWN0aW9uTWF0Y2hlckRlc2NyaXB0aW9uPFMsIEEgZXh0ZW5kcyBBbnlBY3Rpb24+ID0ge1xyXG4gIG1hdGNoZXI6IEFjdGlvbk1hdGNoZXI8QT5cclxuICByZWR1Y2VyOiBDYXNlUmVkdWNlcjxTLCBOb0luZmVyPEE+PlxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBSZWFkb25seUFjdGlvbk1hdGNoZXJEZXNjcmlwdGlvbkNvbGxlY3Rpb248Uz4gPSBSZWFkb25seUFycmF5PFxyXG4gIEFjdGlvbk1hdGNoZXJEZXNjcmlwdGlvbjxTLCBhbnk+XHJcbj5cclxuXHJcbmV4cG9ydCB0eXBlIEFjdGlvbk1hdGNoZXJEZXNjcmlwdGlvbkNvbGxlY3Rpb248Uz4gPSBBcnJheTxcclxuICBBY3Rpb25NYXRjaGVyRGVzY3JpcHRpb248UywgYW55PlxyXG4+XHJcblxyXG4vKipcclxuICogQSAqY2FzZSByZWR1Y2VyKiBpcyBhIHJlZHVjZXIgZnVuY3Rpb24gZm9yIGEgc3BlY2lmaWMgYWN0aW9uIHR5cGUuIENhc2VcclxuICogcmVkdWNlcnMgY2FuIGJlIGNvbXBvc2VkIHRvIGZ1bGwgcmVkdWNlcnMgdXNpbmcgYGNyZWF0ZVJlZHVjZXIoKWAuXHJcbiAqXHJcbiAqIFVubGlrZSBhIG5vcm1hbCBSZWR1eCByZWR1Y2VyLCBhIGNhc2UgcmVkdWNlciBpcyBuZXZlciBjYWxsZWQgd2l0aCBhblxyXG4gKiBgdW5kZWZpbmVkYCBzdGF0ZSB0byBkZXRlcm1pbmUgdGhlIGluaXRpYWwgc3RhdGUuIEluc3RlYWQsIHRoZSBpbml0aWFsXHJcbiAqIHN0YXRlIGlzIGV4cGxpY2l0bHkgc3BlY2lmaWVkIGFzIGFuIGFyZ3VtZW50IHRvIGBjcmVhdGVSZWR1Y2VyKClgLlxyXG4gKlxyXG4gKiBJbiBhZGRpdGlvbiwgYSBjYXNlIHJlZHVjZXIgY2FuIGNob29zZSB0byBtdXRhdGUgdGhlIHBhc3NlZC1pbiBgc3RhdGVgXHJcbiAqIHZhbHVlIGRpcmVjdGx5IGluc3RlYWQgb2YgcmV0dXJuaW5nIGEgbmV3IHN0YXRlLiBUaGlzIGRvZXMgbm90IGFjdHVhbGx5XHJcbiAqIGNhdXNlIHRoZSBzdG9yZSBzdGF0ZSB0byBiZSBtdXRhdGVkIGRpcmVjdGx5OyBpbnN0ZWFkLCB0aGFua3MgdG9cclxuICogW2ltbWVyXShodHRwczovL2dpdGh1Yi5jb20vbXdlc3RzdHJhdGUvaW1tZXIpLCB0aGUgbXV0YXRpb25zIGFyZVxyXG4gKiB0cmFuc2xhdGVkIHRvIGNvcHkgb3BlcmF0aW9ucyB0aGF0IHJlc3VsdCBpbiBhIG5ldyBzdGF0ZS5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IHR5cGUgQ2FzZVJlZHVjZXI8UyA9IGFueSwgQSBleHRlbmRzIEFjdGlvbiA9IEFueUFjdGlvbj4gPSAoXHJcbiAgc3RhdGU6IERyYWZ0PFM+LFxyXG4gIGFjdGlvbjogQVxyXG4pID0+IE5vSW5mZXI8Uz4gfCB2b2lkIHwgRHJhZnQ8Tm9JbmZlcjxTPj5cclxuXHJcbi8qKlxyXG4gKiBBIG1hcHBpbmcgZnJvbSBhY3Rpb24gdHlwZXMgdG8gY2FzZSByZWR1Y2VycyBmb3IgYGNyZWF0ZVJlZHVjZXIoKWAuXHJcbiAqXHJcbiAqIEBkZXByZWNhdGVkIFRoaXMgc2hvdWxkIG5vdCBiZSB1c2VkIG1hbnVhbGx5IC0gaXQgaXMgb25seSB1c2VkXHJcbiAqICAgICAgICAgICAgIGZvciBpbnRlcm5hbCBpbmZlcmVuY2UgcHVycG9zZXMgYW5kIHVzaW5nIGl0IG1hbnVhbGx5XHJcbiAqICAgICAgICAgICAgIHdvdWxkIGxlYWQgdG8gdHlwZSBlcmFzdXJlLlxyXG4gKiAgICAgICAgICAgICBJdCBtaWdodCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCB0eXBlIENhc2VSZWR1Y2VyczxTLCBBUyBleHRlbmRzIEFjdGlvbnM+ID0ge1xyXG4gIFtUIGluIGtleW9mIEFTXTogQVNbVF0gZXh0ZW5kcyBBY3Rpb24gPyBDYXNlUmVkdWNlcjxTLCBBU1tUXT4gOiB2b2lkXHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIE5vdEZ1bmN0aW9uPFQ+ID0gVCBleHRlbmRzIEZ1bmN0aW9uID8gbmV2ZXIgOiBUXHJcblxyXG5mdW5jdGlvbiBpc1N0YXRlRnVuY3Rpb248Uz4oeDogdW5rbm93bik6IHggaXMgKCkgPT4gUyB7XHJcbiAgcmV0dXJuIHR5cGVvZiB4ID09PSAnZnVuY3Rpb24nXHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIFJlZHVjZXJXaXRoSW5pdGlhbFN0YXRlPFMgZXh0ZW5kcyBOb3RGdW5jdGlvbjxhbnk+PiA9IFJlZHVjZXI8Uz4gJiB7XHJcbiAgZ2V0SW5pdGlhbFN0YXRlOiAoKSA9PiBTXHJcbn1cclxuXHJcbmxldCBoYXNXYXJuZWRBYm91dE9iamVjdE5vdGF0aW9uID0gZmFsc2VcclxuXHJcbi8qKlxyXG4gKiBBIHV0aWxpdHkgZnVuY3Rpb24gdGhhdCBhbGxvd3MgZGVmaW5pbmcgYSByZWR1Y2VyIGFzIGEgbWFwcGluZyBmcm9tIGFjdGlvblxyXG4gKiB0eXBlIHRvICpjYXNlIHJlZHVjZXIqIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZSB0aGVzZSBhY3Rpb24gdHlwZXMuIFRoZVxyXG4gKiByZWR1Y2VyJ3MgaW5pdGlhbCBzdGF0ZSBpcyBwYXNzZWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50LlxyXG4gKlxyXG4gKiBAcmVtYXJrc1xyXG4gKiBUaGUgYm9keSBvZiBldmVyeSBjYXNlIHJlZHVjZXIgaXMgaW1wbGljaXRseSB3cmFwcGVkIHdpdGggYSBjYWxsIHRvXHJcbiAqIGBwcm9kdWNlKClgIGZyb20gdGhlIFtpbW1lcl0oaHR0cHM6Ly9naXRodWIuY29tL213ZXN0c3RyYXRlL2ltbWVyKSBsaWJyYXJ5LlxyXG4gKiBUaGlzIG1lYW5zIHRoYXQgcmF0aGVyIHRoYW4gcmV0dXJuaW5nIGEgbmV3IHN0YXRlIG9iamVjdCwgeW91IGNhbiBhbHNvXHJcbiAqIG11dGF0ZSB0aGUgcGFzc2VkLWluIHN0YXRlIG9iamVjdCBkaXJlY3RseTsgdGhlc2UgbXV0YXRpb25zIHdpbGwgdGhlbiBiZVxyXG4gKiBhdXRvbWF0aWNhbGx5IGFuZCBlZmZpY2llbnRseSB0cmFuc2xhdGVkIGludG8gY29waWVzLCBnaXZpbmcgeW91IGJvdGhcclxuICogY29udmVuaWVuY2UgYW5kIGltbXV0YWJpbGl0eS5cclxuICpcclxuICogQG92ZXJsb2FkU3VtbWFyeVxyXG4gKiBUaGlzIG92ZXJsb2FkIGFjY2VwdHMgYSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IHJlY2VpdmVzIGEgYGJ1aWxkZXJgIG9iamVjdCBhcyBpdHMgYXJndW1lbnQuXHJcbiAqIFRoYXQgYnVpbGRlciBwcm92aWRlcyBgYWRkQ2FzZWAsIGBhZGRNYXRjaGVyYCBhbmQgYGFkZERlZmF1bHRDYXNlYCBmdW5jdGlvbnMgdGhhdCBtYXkgYmVcclxuICogY2FsbGVkIHRvIGRlZmluZSB3aGF0IGFjdGlvbnMgdGhpcyByZWR1Y2VyIHdpbGwgaGFuZGxlLlxyXG4gKlxyXG4gKiBAcGFyYW0gaW5pdGlhbFN0YXRlIC0gYFN0YXRlIHwgKCgpID0+IFN0YXRlKWA6IFRoZSBpbml0aWFsIHN0YXRlIHRoYXQgc2hvdWxkIGJlIHVzZWQgd2hlbiB0aGUgcmVkdWNlciBpcyBjYWxsZWQgdGhlIGZpcnN0IHRpbWUuIFRoaXMgbWF5IGFsc28gYmUgYSBcImxhenkgaW5pdGlhbGl6ZXJcIiBmdW5jdGlvbiwgd2hpY2ggc2hvdWxkIHJldHVybiBhbiBpbml0aWFsIHN0YXRlIHZhbHVlIHdoZW4gY2FsbGVkLiBUaGlzIHdpbGwgYmUgdXNlZCB3aGVuZXZlciB0aGUgcmVkdWNlciBpcyBjYWxsZWQgd2l0aCBgdW5kZWZpbmVkYCBhcyBpdHMgc3RhdGUgdmFsdWUsIGFuZCBpcyBwcmltYXJpbHkgdXNlZnVsIGZvciBjYXNlcyBsaWtlIHJlYWRpbmcgaW5pdGlhbCBzdGF0ZSBmcm9tIGBsb2NhbFN0b3JhZ2VgLlxyXG4gKiBAcGFyYW0gYnVpbGRlckNhbGxiYWNrIC0gYChidWlsZGVyOiBCdWlsZGVyKSA9PiB2b2lkYCBBIGNhbGxiYWNrIHRoYXQgcmVjZWl2ZXMgYSAqYnVpbGRlciogb2JqZWN0IHRvIGRlZmluZVxyXG4gKiAgIGNhc2UgcmVkdWNlcnMgdmlhIGNhbGxzIHRvIGBidWlsZGVyLmFkZENhc2UoYWN0aW9uQ3JlYXRvck9yVHlwZSwgcmVkdWNlcilgLlxyXG4gKiBAZXhhbXBsZVxyXG5gYGB0c1xyXG5pbXBvcnQge1xyXG4gIGNyZWF0ZUFjdGlvbixcclxuICBjcmVhdGVSZWR1Y2VyLFxyXG4gIEFueUFjdGlvbixcclxuICBQYXlsb2FkQWN0aW9uLFxyXG59IGZyb20gXCJAcmVkdXhqcy90b29sa2l0XCI7XHJcblxyXG5jb25zdCBpbmNyZW1lbnQgPSBjcmVhdGVBY3Rpb248bnVtYmVyPihcImluY3JlbWVudFwiKTtcclxuY29uc3QgZGVjcmVtZW50ID0gY3JlYXRlQWN0aW9uPG51bWJlcj4oXCJkZWNyZW1lbnRcIik7XHJcblxyXG5mdW5jdGlvbiBpc0FjdGlvbldpdGhOdW1iZXJQYXlsb2FkKFxyXG4gIGFjdGlvbjogQW55QWN0aW9uXHJcbik6IGFjdGlvbiBpcyBQYXlsb2FkQWN0aW9uPG51bWJlcj4ge1xyXG4gIHJldHVybiB0eXBlb2YgYWN0aW9uLnBheWxvYWQgPT09IFwibnVtYmVyXCI7XHJcbn1cclxuXHJcbmNvbnN0IHJlZHVjZXIgPSBjcmVhdGVSZWR1Y2VyKFxyXG4gIHtcclxuICAgIGNvdW50ZXI6IDAsXHJcbiAgICBzdW1PZk51bWJlclBheWxvYWRzOiAwLFxyXG4gICAgdW5oYW5kbGVkQWN0aW9uczogMCxcclxuICB9LFxyXG4gIChidWlsZGVyKSA9PiB7XHJcbiAgICBidWlsZGVyXHJcbiAgICAgIC5hZGRDYXNlKGluY3JlbWVudCwgKHN0YXRlLCBhY3Rpb24pID0+IHtcclxuICAgICAgICAvLyBhY3Rpb24gaXMgaW5mZXJyZWQgY29ycmVjdGx5IGhlcmVcclxuICAgICAgICBzdGF0ZS5jb3VudGVyICs9IGFjdGlvbi5wYXlsb2FkO1xyXG4gICAgICB9KVxyXG4gICAgICAvLyBZb3UgY2FuIGNoYWluIGNhbGxzLCBvciBoYXZlIHNlcGFyYXRlIGBidWlsZGVyLmFkZENhc2UoKWAgbGluZXMgZWFjaCB0aW1lXHJcbiAgICAgIC5hZGRDYXNlKGRlY3JlbWVudCwgKHN0YXRlLCBhY3Rpb24pID0+IHtcclxuICAgICAgICBzdGF0ZS5jb3VudGVyIC09IGFjdGlvbi5wYXlsb2FkO1xyXG4gICAgICB9KVxyXG4gICAgICAvLyBZb3UgY2FuIGFwcGx5IGEgXCJtYXRjaGVyIGZ1bmN0aW9uXCIgdG8gaW5jb21pbmcgYWN0aW9uc1xyXG4gICAgICAuYWRkTWF0Y2hlcihpc0FjdGlvbldpdGhOdW1iZXJQYXlsb2FkLCAoc3RhdGUsIGFjdGlvbikgPT4ge30pXHJcbiAgICAgIC8vIGFuZCBwcm92aWRlIGEgZGVmYXVsdCBjYXNlIGlmIG5vIG90aGVyIGhhbmRsZXJzIG1hdGNoZWRcclxuICAgICAgLmFkZERlZmF1bHRDYXNlKChzdGF0ZSwgYWN0aW9uKSA9PiB7fSk7XHJcbiAgfVxyXG4pO1xyXG5gYGBcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlZHVjZXI8UyBleHRlbmRzIE5vdEZ1bmN0aW9uPGFueT4+KFxyXG4gIGluaXRpYWxTdGF0ZTogUyB8ICgoKSA9PiBTKSxcclxuICBidWlsZGVyQ2FsbGJhY2s6IChidWlsZGVyOiBBY3Rpb25SZWR1Y2VyTWFwQnVpbGRlcjxTPikgPT4gdm9pZFxyXG4pOiBSZWR1Y2VyV2l0aEluaXRpYWxTdGF0ZTxTPlxyXG5cclxuLyoqXHJcbiAqIEEgdXRpbGl0eSBmdW5jdGlvbiB0aGF0IGFsbG93cyBkZWZpbmluZyBhIHJlZHVjZXIgYXMgYSBtYXBwaW5nIGZyb20gYWN0aW9uXHJcbiAqIHR5cGUgdG8gKmNhc2UgcmVkdWNlciogZnVuY3Rpb25zIHRoYXQgaGFuZGxlIHRoZXNlIGFjdGlvbiB0eXBlcy4gVGhlXHJcbiAqIHJlZHVjZXIncyBpbml0aWFsIHN0YXRlIGlzIHBhc3NlZCBhcyB0aGUgZmlyc3QgYXJndW1lbnQuXHJcbiAqXHJcbiAqIFRoZSBib2R5IG9mIGV2ZXJ5IGNhc2UgcmVkdWNlciBpcyBpbXBsaWNpdGx5IHdyYXBwZWQgd2l0aCBhIGNhbGwgdG9cclxuICogYHByb2R1Y2UoKWAgZnJvbSB0aGUgW2ltbWVyXShodHRwczovL2dpdGh1Yi5jb20vbXdlc3RzdHJhdGUvaW1tZXIpIGxpYnJhcnkuXHJcbiAqIFRoaXMgbWVhbnMgdGhhdCByYXRoZXIgdGhhbiByZXR1cm5pbmcgYSBuZXcgc3RhdGUgb2JqZWN0LCB5b3UgY2FuIGFsc29cclxuICogbXV0YXRlIHRoZSBwYXNzZWQtaW4gc3RhdGUgb2JqZWN0IGRpcmVjdGx5OyB0aGVzZSBtdXRhdGlvbnMgd2lsbCB0aGVuIGJlXHJcbiAqIGF1dG9tYXRpY2FsbHkgYW5kIGVmZmljaWVudGx5IHRyYW5zbGF0ZWQgaW50byBjb3BpZXMsIGdpdmluZyB5b3UgYm90aFxyXG4gKiBjb252ZW5pZW5jZSBhbmQgaW1tdXRhYmlsaXR5LlxyXG4gKiBcclxuICogQG92ZXJsb2FkU3VtbWFyeVxyXG4gKiBUaGlzIG92ZXJsb2FkIGFjY2VwdHMgYW4gb2JqZWN0IHdoZXJlIHRoZSBrZXlzIGFyZSBzdHJpbmcgYWN0aW9uIHR5cGVzLCBhbmQgdGhlIHZhbHVlc1xyXG4gKiBhcmUgY2FzZSByZWR1Y2VyIGZ1bmN0aW9ucyB0byBoYW5kbGUgdGhvc2UgYWN0aW9uIHR5cGVzLlxyXG4gKlxyXG4gKiBAcGFyYW0gaW5pdGlhbFN0YXRlIC0gYFN0YXRlIHwgKCgpID0+IFN0YXRlKWA6IFRoZSBpbml0aWFsIHN0YXRlIHRoYXQgc2hvdWxkIGJlIHVzZWQgd2hlbiB0aGUgcmVkdWNlciBpcyBjYWxsZWQgdGhlIGZpcnN0IHRpbWUuIFRoaXMgbWF5IGFsc28gYmUgYSBcImxhenkgaW5pdGlhbGl6ZXJcIiBmdW5jdGlvbiwgd2hpY2ggc2hvdWxkIHJldHVybiBhbiBpbml0aWFsIHN0YXRlIHZhbHVlIHdoZW4gY2FsbGVkLiBUaGlzIHdpbGwgYmUgdXNlZCB3aGVuZXZlciB0aGUgcmVkdWNlciBpcyBjYWxsZWQgd2l0aCBgdW5kZWZpbmVkYCBhcyBpdHMgc3RhdGUgdmFsdWUsIGFuZCBpcyBwcmltYXJpbHkgdXNlZnVsIGZvciBjYXNlcyBsaWtlIHJlYWRpbmcgaW5pdGlhbCBzdGF0ZSBmcm9tIGBsb2NhbFN0b3JhZ2VgLlxyXG4gKiBAcGFyYW0gYWN0aW9uc01hcCAtIEFuIG9iamVjdCBtYXBwaW5nIGZyb20gYWN0aW9uIHR5cGVzIHRvIF9jYXNlIHJlZHVjZXJzXywgZWFjaCBvZiB3aGljaCBoYW5kbGVzIG9uZSBzcGVjaWZpYyBhY3Rpb24gdHlwZS5cclxuICogQHBhcmFtIGFjdGlvbk1hdGNoZXJzIC0gQW4gYXJyYXkgb2YgbWF0Y2hlciBkZWZpbml0aW9ucyBpbiB0aGUgZm9ybSBge21hdGNoZXIsIHJlZHVjZXJ9YC5cclxuICogICBBbGwgbWF0Y2hpbmcgcmVkdWNlcnMgd2lsbCBiZSBleGVjdXRlZCBpbiBvcmRlciwgaW5kZXBlbmRlbnRseSBpZiBhIGNhc2UgcmVkdWNlciBtYXRjaGVkIG9yIG5vdC5cclxuICogQHBhcmFtIGRlZmF1bHRDYXNlUmVkdWNlciAtIEEgXCJkZWZhdWx0IGNhc2VcIiByZWR1Y2VyIHRoYXQgaXMgZXhlY3V0ZWQgaWYgbm8gY2FzZSByZWR1Y2VyIGFuZCBubyBtYXRjaGVyXHJcbiAqICAgcmVkdWNlciB3YXMgZXhlY3V0ZWQgZm9yIHRoaXMgYWN0aW9uLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG5gYGBqc1xyXG5jb25zdCBjb3VudGVyUmVkdWNlciA9IGNyZWF0ZVJlZHVjZXIoMCwge1xyXG4gIGluY3JlbWVudDogKHN0YXRlLCBhY3Rpb24pID0+IHN0YXRlICsgYWN0aW9uLnBheWxvYWQsXHJcbiAgZGVjcmVtZW50OiAoc3RhdGUsIGFjdGlvbikgPT4gc3RhdGUgLSBhY3Rpb24ucGF5bG9hZFxyXG59KVxyXG5cclxuLy8gQWx0ZXJuYXRlbHksIHVzZSBhIFwibGF6eSBpbml0aWFsaXplclwiIHRvIHByb3ZpZGUgdGhlIGluaXRpYWwgc3RhdGVcclxuLy8gKHdvcmtzIHdpdGggZWl0aGVyIGZvcm0gb2YgY3JlYXRlUmVkdWNlcilcclxuY29uc3QgaW5pdGlhbFN0YXRlID0gKCkgPT4gMFxyXG5jb25zdCBjb3VudGVyUmVkdWNlciA9IGNyZWF0ZVJlZHVjZXIoaW5pdGlhbFN0YXRlLCB7XHJcbiAgaW5jcmVtZW50OiAoc3RhdGUsIGFjdGlvbikgPT4gc3RhdGUgKyBhY3Rpb24ucGF5bG9hZCxcclxuICBkZWNyZW1lbnQ6IChzdGF0ZSwgYWN0aW9uKSA9PiBzdGF0ZSAtIGFjdGlvbi5wYXlsb2FkXHJcbn0pXHJcbmBgYFxyXG4gXHJcbiAqIEFjdGlvbiBjcmVhdG9ycyB0aGF0IHdlcmUgZ2VuZXJhdGVkIHVzaW5nIFtgY3JlYXRlQWN0aW9uYF0oLi9jcmVhdGVBY3Rpb24pIG1heSBiZSB1c2VkIGRpcmVjdGx5IGFzIHRoZSBrZXlzIGhlcmUsIHVzaW5nIGNvbXB1dGVkIHByb3BlcnR5IHN5bnRheDpcclxuXHJcbmBgYGpzXHJcbmNvbnN0IGluY3JlbWVudCA9IGNyZWF0ZUFjdGlvbignaW5jcmVtZW50JylcclxuY29uc3QgZGVjcmVtZW50ID0gY3JlYXRlQWN0aW9uKCdkZWNyZW1lbnQnKVxyXG5cclxuY29uc3QgY291bnRlclJlZHVjZXIgPSBjcmVhdGVSZWR1Y2VyKDAsIHtcclxuICBbaW5jcmVtZW50XTogKHN0YXRlLCBhY3Rpb24pID0+IHN0YXRlICsgYWN0aW9uLnBheWxvYWQsXHJcbiAgW2RlY3JlbWVudC50eXBlXTogKHN0YXRlLCBhY3Rpb24pID0+IHN0YXRlIC0gYWN0aW9uLnBheWxvYWRcclxufSlcclxuYGBgXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZWR1Y2VyPFxyXG4gIFMgZXh0ZW5kcyBOb3RGdW5jdGlvbjxhbnk+LFxyXG4gIENSIGV4dGVuZHMgQ2FzZVJlZHVjZXJzPFMsIGFueT4gPSBDYXNlUmVkdWNlcnM8UywgYW55PlxyXG4+KFxyXG4gIGluaXRpYWxTdGF0ZTogUyB8ICgoKSA9PiBTKSxcclxuICBhY3Rpb25zTWFwOiBDUixcclxuICBhY3Rpb25NYXRjaGVycz86IEFjdGlvbk1hdGNoZXJEZXNjcmlwdGlvbkNvbGxlY3Rpb248Uz4sXHJcbiAgZGVmYXVsdENhc2VSZWR1Y2VyPzogQ2FzZVJlZHVjZXI8Uz5cclxuKTogUmVkdWNlcldpdGhJbml0aWFsU3RhdGU8Uz5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZWR1Y2VyPFMgZXh0ZW5kcyBOb3RGdW5jdGlvbjxhbnk+PihcclxuICBpbml0aWFsU3RhdGU6IFMgfCAoKCkgPT4gUyksXHJcbiAgbWFwT3JCdWlsZGVyQ2FsbGJhY2s6XHJcbiAgICB8IENhc2VSZWR1Y2VyczxTLCBhbnk+XHJcbiAgICB8ICgoYnVpbGRlcjogQWN0aW9uUmVkdWNlck1hcEJ1aWxkZXI8Uz4pID0+IHZvaWQpLFxyXG4gIGFjdGlvbk1hdGNoZXJzOiBSZWFkb25seUFjdGlvbk1hdGNoZXJEZXNjcmlwdGlvbkNvbGxlY3Rpb248Uz4gPSBbXSxcclxuICBkZWZhdWx0Q2FzZVJlZHVjZXI/OiBDYXNlUmVkdWNlcjxTPlxyXG4pOiBSZWR1Y2VyV2l0aEluaXRpYWxTdGF0ZTxTPiB7XHJcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcclxuICAgIGlmICh0eXBlb2YgbWFwT3JCdWlsZGVyQ2FsbGJhY2sgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgIGlmICghaGFzV2FybmVkQWJvdXRPYmplY3ROb3RhdGlvbikge1xyXG4gICAgICAgIGhhc1dhcm5lZEFib3V0T2JqZWN0Tm90YXRpb24gPSB0cnVlXHJcbiAgICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICAgXCJUaGUgb2JqZWN0IG5vdGF0aW9uIGZvciBgY3JlYXRlUmVkdWNlcmAgaXMgZGVwcmVjYXRlZCwgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBSVEsgMi4wLiBQbGVhc2UgdXNlIHRoZSAnYnVpbGRlciBjYWxsYmFjaycgbm90YXRpb24gaW5zdGVhZDogaHR0cHM6Ly9yZWR1eC10b29sa2l0LmpzLm9yZy9hcGkvY3JlYXRlUmVkdWNlclwiXHJcbiAgICAgICAgKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsZXQgW2FjdGlvbnNNYXAsIGZpbmFsQWN0aW9uTWF0Y2hlcnMsIGZpbmFsRGVmYXVsdENhc2VSZWR1Y2VyXSA9XHJcbiAgICB0eXBlb2YgbWFwT3JCdWlsZGVyQ2FsbGJhY2sgPT09ICdmdW5jdGlvbidcclxuICAgICAgPyBleGVjdXRlUmVkdWNlckJ1aWxkZXJDYWxsYmFjayhtYXBPckJ1aWxkZXJDYWxsYmFjaylcclxuICAgICAgOiBbbWFwT3JCdWlsZGVyQ2FsbGJhY2ssIGFjdGlvbk1hdGNoZXJzLCBkZWZhdWx0Q2FzZVJlZHVjZXJdXHJcblxyXG4gIC8vIEVuc3VyZSB0aGUgaW5pdGlhbCBzdGF0ZSBnZXRzIGZyb3plbiBlaXRoZXIgd2F5IChpZiBkcmFmdGFibGUpXHJcbiAgbGV0IGdldEluaXRpYWxTdGF0ZTogKCkgPT4gU1xyXG4gIGlmIChpc1N0YXRlRnVuY3Rpb24oaW5pdGlhbFN0YXRlKSkge1xyXG4gICAgZ2V0SW5pdGlhbFN0YXRlID0gKCkgPT4gZnJlZXplRHJhZnRhYmxlKGluaXRpYWxTdGF0ZSgpKVxyXG4gIH0gZWxzZSB7XHJcbiAgICBjb25zdCBmcm96ZW5Jbml0aWFsU3RhdGUgPSBmcmVlemVEcmFmdGFibGUoaW5pdGlhbFN0YXRlKVxyXG4gICAgZ2V0SW5pdGlhbFN0YXRlID0gKCkgPT4gZnJvemVuSW5pdGlhbFN0YXRlXHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiByZWR1Y2VyKHN0YXRlID0gZ2V0SW5pdGlhbFN0YXRlKCksIGFjdGlvbjogYW55KTogUyB7XHJcbiAgICBsZXQgY2FzZVJlZHVjZXJzID0gW1xyXG4gICAgICBhY3Rpb25zTWFwW2FjdGlvbi50eXBlXSxcclxuICAgICAgLi4uZmluYWxBY3Rpb25NYXRjaGVyc1xyXG4gICAgICAgIC5maWx0ZXIoKHsgbWF0Y2hlciB9KSA9PiBtYXRjaGVyKGFjdGlvbikpXHJcbiAgICAgICAgLm1hcCgoeyByZWR1Y2VyIH0pID0+IHJlZHVjZXIpLFxyXG4gICAgXVxyXG4gICAgaWYgKGNhc2VSZWR1Y2Vycy5maWx0ZXIoKGNyKSA9PiAhIWNyKS5sZW5ndGggPT09IDApIHtcclxuICAgICAgY2FzZVJlZHVjZXJzID0gW2ZpbmFsRGVmYXVsdENhc2VSZWR1Y2VyXVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjYXNlUmVkdWNlcnMucmVkdWNlKChwcmV2aW91c1N0YXRlLCBjYXNlUmVkdWNlcik6IFMgPT4ge1xyXG4gICAgICBpZiAoY2FzZVJlZHVjZXIpIHtcclxuICAgICAgICBpZiAoaXNEcmFmdChwcmV2aW91c1N0YXRlKSkge1xyXG4gICAgICAgICAgLy8gSWYgaXQncyBhbHJlYWR5IGEgZHJhZnQsIHdlIG11c3QgYWxyZWFkeSBiZSBpbnNpZGUgYSBgY3JlYXRlTmV4dFN0YXRlYCBjYWxsLFxyXG4gICAgICAgICAgLy8gbGlrZWx5IGJlY2F1c2UgdGhpcyBpcyBiZWluZyB3cmFwcGVkIGluIGBjcmVhdGVSZWR1Y2VyYCwgYGNyZWF0ZVNsaWNlYCwgb3IgbmVzdGVkXHJcbiAgICAgICAgICAvLyBpbnNpZGUgYW4gZXhpc3RpbmcgZHJhZnQuIEl0J3Mgc2FmZSB0byBqdXN0IHBhc3MgdGhlIGRyYWZ0IHRvIHRoZSBtdXRhdG9yLlxyXG4gICAgICAgICAgY29uc3QgZHJhZnQgPSBwcmV2aW91c1N0YXRlIGFzIERyYWZ0PFM+IC8vIFdlIGNhbiBhc3N1bWUgdGhpcyBpcyBhbHJlYWR5IGEgZHJhZnRcclxuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNhc2VSZWR1Y2VyKGRyYWZ0LCBhY3Rpb24pXHJcblxyXG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBwcmV2aW91c1N0YXRlXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdCBhcyBTXHJcbiAgICAgICAgfSBlbHNlIGlmICghaXNEcmFmdGFibGUocHJldmlvdXNTdGF0ZSkpIHtcclxuICAgICAgICAgIC8vIElmIHN0YXRlIGlzIG5vdCBkcmFmdGFibGUgKGV4OiBhIHByaW1pdGl2ZSwgc3VjaCBhcyAwKSwgd2Ugd2FudCB0byBkaXJlY3RseVxyXG4gICAgICAgICAgLy8gcmV0dXJuIHRoZSBjYXNlUmVkdWNlciBmdW5jIGFuZCBub3Qgd3JhcCBpdCB3aXRoIHByb2R1Y2UuXHJcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBjYXNlUmVkdWNlcihwcmV2aW91c1N0YXRlIGFzIGFueSwgYWN0aW9uKVxyXG5cclxuICAgICAgICAgIGlmIChyZXN1bHQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBpZiAocHJldmlvdXNTdGF0ZSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBwcmV2aW91c1N0YXRlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXHJcbiAgICAgICAgICAgICAgJ0EgY2FzZSByZWR1Y2VyIG9uIGEgbm9uLWRyYWZ0YWJsZSB2YWx1ZSBtdXN0IG5vdCByZXR1cm4gdW5kZWZpbmVkJ1xyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdCBhcyBTXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIEB0cy1pZ25vcmUgY3JlYXRlTmV4dFN0YXRlKCkgcHJvZHVjZXMgYW4gSW1tdXRhYmxlPERyYWZ0PFM+PiByYXRoZXJcclxuICAgICAgICAgIC8vIHRoYW4gYW4gSW1tdXRhYmxlPFM+LCBhbmQgVHlwZVNjcmlwdCBjYW5ub3QgZmluZCBvdXQgaG93IHRvIHJlY29uY2lsZVxyXG4gICAgICAgICAgLy8gdGhlc2UgdHdvIHR5cGVzLlxyXG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZU5leHRTdGF0ZShwcmV2aW91c1N0YXRlLCAoZHJhZnQ6IERyYWZ0PFM+KSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBjYXNlUmVkdWNlcihkcmFmdCwgYWN0aW9uKVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBwcmV2aW91c1N0YXRlXHJcbiAgICB9LCBzdGF0ZSlcclxuICB9XHJcblxyXG4gIHJlZHVjZXIuZ2V0SW5pdGlhbFN0YXRlID0gZ2V0SW5pdGlhbFN0YXRlXHJcblxyXG4gIHJldHVybiByZWR1Y2VyIGFzIFJlZHVjZXJXaXRoSW5pdGlhbFN0YXRlPFM+XHJcbn1cclxuIiwgImltcG9ydCB0eXBlIHsgQWN0aW9uLCBBbnlBY3Rpb24gfSBmcm9tICdyZWR1eCdcclxuaW1wb3J0IHR5cGUge1xyXG4gIENhc2VSZWR1Y2VyLFxyXG4gIENhc2VSZWR1Y2VycyxcclxuICBBY3Rpb25NYXRjaGVyRGVzY3JpcHRpb25Db2xsZWN0aW9uLFxyXG59IGZyb20gJy4vY3JlYXRlUmVkdWNlcidcclxuaW1wb3J0IHR5cGUgeyBUeXBlR3VhcmQgfSBmcm9tICcuL3RzSGVscGVycydcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgVHlwZWRBY3Rpb25DcmVhdG9yPFR5cGUgZXh0ZW5kcyBzdHJpbmc+IHtcclxuICAoLi4uYXJnczogYW55W10pOiBBY3Rpb248VHlwZT5cclxuICB0eXBlOiBUeXBlXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBIGJ1aWxkZXIgZm9yIGFuIGFjdGlvbiA8LT4gcmVkdWNlciBtYXAuXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgQWN0aW9uUmVkdWNlck1hcEJ1aWxkZXI8U3RhdGU+IHtcclxuICAvKipcclxuICAgKiBBZGRzIGEgY2FzZSByZWR1Y2VyIHRvIGhhbmRsZSBhIHNpbmdsZSBleGFjdCBhY3Rpb24gdHlwZS5cclxuICAgKiBAcmVtYXJrc1xyXG4gICAqIEFsbCBjYWxscyB0byBgYnVpbGRlci5hZGRDYXNlYCBtdXN0IGNvbWUgYmVmb3JlIGFueSBjYWxscyB0byBgYnVpbGRlci5hZGRNYXRjaGVyYCBvciBgYnVpbGRlci5hZGREZWZhdWx0Q2FzZWAuXHJcbiAgICogQHBhcmFtIGFjdGlvbkNyZWF0b3IgLSBFaXRoZXIgYSBwbGFpbiBhY3Rpb24gdHlwZSBzdHJpbmcsIG9yIGFuIGFjdGlvbiBjcmVhdG9yIGdlbmVyYXRlZCBieSBbYGNyZWF0ZUFjdGlvbmBdKC4vY3JlYXRlQWN0aW9uKSB0aGF0IGNhbiBiZSB1c2VkIHRvIGRldGVybWluZSB0aGUgYWN0aW9uIHR5cGUuXHJcbiAgICogQHBhcmFtIHJlZHVjZXIgLSBUaGUgYWN0dWFsIGNhc2UgcmVkdWNlciBmdW5jdGlvbi5cclxuICAgKi9cclxuICBhZGRDYXNlPEFjdGlvbkNyZWF0b3IgZXh0ZW5kcyBUeXBlZEFjdGlvbkNyZWF0b3I8c3RyaW5nPj4oXHJcbiAgICBhY3Rpb25DcmVhdG9yOiBBY3Rpb25DcmVhdG9yLFxyXG4gICAgcmVkdWNlcjogQ2FzZVJlZHVjZXI8U3RhdGUsIFJldHVyblR5cGU8QWN0aW9uQ3JlYXRvcj4+XHJcbiAgKTogQWN0aW9uUmVkdWNlck1hcEJ1aWxkZXI8U3RhdGU+XHJcbiAgLyoqXHJcbiAgICogQWRkcyBhIGNhc2UgcmVkdWNlciB0byBoYW5kbGUgYSBzaW5nbGUgZXhhY3QgYWN0aW9uIHR5cGUuXHJcbiAgICogQHJlbWFya3NcclxuICAgKiBBbGwgY2FsbHMgdG8gYGJ1aWxkZXIuYWRkQ2FzZWAgbXVzdCBjb21lIGJlZm9yZSBhbnkgY2FsbHMgdG8gYGJ1aWxkZXIuYWRkTWF0Y2hlcmAgb3IgYGJ1aWxkZXIuYWRkRGVmYXVsdENhc2VgLlxyXG4gICAqIEBwYXJhbSBhY3Rpb25DcmVhdG9yIC0gRWl0aGVyIGEgcGxhaW4gYWN0aW9uIHR5cGUgc3RyaW5nLCBvciBhbiBhY3Rpb24gY3JlYXRvciBnZW5lcmF0ZWQgYnkgW2BjcmVhdGVBY3Rpb25gXSguL2NyZWF0ZUFjdGlvbikgdGhhdCBjYW4gYmUgdXNlZCB0byBkZXRlcm1pbmUgdGhlIGFjdGlvbiB0eXBlLlxyXG4gICAqIEBwYXJhbSByZWR1Y2VyIC0gVGhlIGFjdHVhbCBjYXNlIHJlZHVjZXIgZnVuY3Rpb24uXHJcbiAgICovXHJcbiAgYWRkQ2FzZTxUeXBlIGV4dGVuZHMgc3RyaW5nLCBBIGV4dGVuZHMgQWN0aW9uPFR5cGU+PihcclxuICAgIHR5cGU6IFR5cGUsXHJcbiAgICByZWR1Y2VyOiBDYXNlUmVkdWNlcjxTdGF0ZSwgQT5cclxuICApOiBBY3Rpb25SZWR1Y2VyTWFwQnVpbGRlcjxTdGF0ZT5cclxuXHJcbiAgLyoqXHJcbiAgICogQWxsb3dzIHlvdSB0byBtYXRjaCB5b3VyIGluY29taW5nIGFjdGlvbnMgYWdhaW5zdCB5b3VyIG93biBmaWx0ZXIgZnVuY3Rpb24gaW5zdGVhZCBvZiBvbmx5IHRoZSBgYWN0aW9uLnR5cGVgIHByb3BlcnR5LlxyXG4gICAqIEByZW1hcmtzXHJcbiAgICogSWYgbXVsdGlwbGUgbWF0Y2hlciByZWR1Y2VycyBtYXRjaCwgYWxsIG9mIHRoZW0gd2lsbCBiZSBleGVjdXRlZCBpbiB0aGUgb3JkZXJcclxuICAgKiB0aGV5IHdlcmUgZGVmaW5lZCBpbiAtIGV2ZW4gaWYgYSBjYXNlIHJlZHVjZXIgYWxyZWFkeSBtYXRjaGVkLlxyXG4gICAqIEFsbCBjYWxscyB0byBgYnVpbGRlci5hZGRNYXRjaGVyYCBtdXN0IGNvbWUgYWZ0ZXIgYW55IGNhbGxzIHRvIGBidWlsZGVyLmFkZENhc2VgIGFuZCBiZWZvcmUgYW55IGNhbGxzIHRvIGBidWlsZGVyLmFkZERlZmF1bHRDYXNlYC5cclxuICAgKiBAcGFyYW0gbWF0Y2hlciAtIEEgbWF0Y2hlciBmdW5jdGlvbi4gSW4gVHlwZVNjcmlwdCwgdGhpcyBzaG91bGQgYmUgYSBbdHlwZSBwcmVkaWNhdGVdKGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rLzIvbmFycm93aW5nLmh0bWwjdXNpbmctdHlwZS1wcmVkaWNhdGVzKVxyXG4gICAqICAgZnVuY3Rpb25cclxuICAgKiBAcGFyYW0gcmVkdWNlciAtIFRoZSBhY3R1YWwgY2FzZSByZWR1Y2VyIGZ1bmN0aW9uLlxyXG4gICAqXHJcbiAgICogQGV4YW1wbGVcclxuYGBgdHNcclxuaW1wb3J0IHtcclxuICBjcmVhdGVBY3Rpb24sXHJcbiAgY3JlYXRlUmVkdWNlcixcclxuICBBc3luY1RodW5rLFxyXG4gIEFueUFjdGlvbixcclxufSBmcm9tIFwiQHJlZHV4anMvdG9vbGtpdFwiO1xyXG5cclxudHlwZSBHZW5lcmljQXN5bmNUaHVuayA9IEFzeW5jVGh1bms8dW5rbm93biwgdW5rbm93biwgYW55PjtcclxuXHJcbnR5cGUgUGVuZGluZ0FjdGlvbiA9IFJldHVyblR5cGU8R2VuZXJpY0FzeW5jVGh1bmtbXCJwZW5kaW5nXCJdPjtcclxudHlwZSBSZWplY3RlZEFjdGlvbiA9IFJldHVyblR5cGU8R2VuZXJpY0FzeW5jVGh1bmtbXCJyZWplY3RlZFwiXT47XHJcbnR5cGUgRnVsZmlsbGVkQWN0aW9uID0gUmV0dXJuVHlwZTxHZW5lcmljQXN5bmNUaHVua1tcImZ1bGZpbGxlZFwiXT47XHJcblxyXG5jb25zdCBpbml0aWFsU3RhdGU6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcclxuY29uc3QgcmVzZXRBY3Rpb24gPSBjcmVhdGVBY3Rpb24oXCJyZXNldC10cmFja2VkLWxvYWRpbmctc3RhdGVcIik7XHJcblxyXG5mdW5jdGlvbiBpc1BlbmRpbmdBY3Rpb24oYWN0aW9uOiBBbnlBY3Rpb24pOiBhY3Rpb24gaXMgUGVuZGluZ0FjdGlvbiB7XHJcbiAgcmV0dXJuIGFjdGlvbi50eXBlLmVuZHNXaXRoKFwiL3BlbmRpbmdcIik7XHJcbn1cclxuXHJcbmNvbnN0IHJlZHVjZXIgPSBjcmVhdGVSZWR1Y2VyKGluaXRpYWxTdGF0ZSwgKGJ1aWxkZXIpID0+IHtcclxuICBidWlsZGVyXHJcbiAgICAuYWRkQ2FzZShyZXNldEFjdGlvbiwgKCkgPT4gaW5pdGlhbFN0YXRlKVxyXG4gICAgLy8gbWF0Y2hlciBjYW4gYmUgZGVmaW5lZCBvdXRzaWRlIGFzIGEgdHlwZSBwcmVkaWNhdGUgZnVuY3Rpb25cclxuICAgIC5hZGRNYXRjaGVyKGlzUGVuZGluZ0FjdGlvbiwgKHN0YXRlLCBhY3Rpb24pID0+IHtcclxuICAgICAgc3RhdGVbYWN0aW9uLm1ldGEucmVxdWVzdElkXSA9IFwicGVuZGluZ1wiO1xyXG4gICAgfSlcclxuICAgIC5hZGRNYXRjaGVyKFxyXG4gICAgICAvLyBtYXRjaGVyIGNhbiBiZSBkZWZpbmVkIGlubGluZSBhcyBhIHR5cGUgcHJlZGljYXRlIGZ1bmN0aW9uXHJcbiAgICAgIChhY3Rpb24pOiBhY3Rpb24gaXMgUmVqZWN0ZWRBY3Rpb24gPT4gYWN0aW9uLnR5cGUuZW5kc1dpdGgoXCIvcmVqZWN0ZWRcIiksXHJcbiAgICAgIChzdGF0ZSwgYWN0aW9uKSA9PiB7XHJcbiAgICAgICAgc3RhdGVbYWN0aW9uLm1ldGEucmVxdWVzdElkXSA9IFwicmVqZWN0ZWRcIjtcclxuICAgICAgfVxyXG4gICAgKVxyXG4gICAgLy8gbWF0Y2hlciBjYW4ganVzdCByZXR1cm4gYm9vbGVhbiBhbmQgdGhlIG1hdGNoZXIgY2FuIHJlY2VpdmUgYSBnZW5lcmljIGFyZ3VtZW50XHJcbiAgICAuYWRkTWF0Y2hlcjxGdWxmaWxsZWRBY3Rpb24+KFxyXG4gICAgICAoYWN0aW9uKSA9PiBhY3Rpb24udHlwZS5lbmRzV2l0aChcIi9mdWxmaWxsZWRcIiksXHJcbiAgICAgIChzdGF0ZSwgYWN0aW9uKSA9PiB7XHJcbiAgICAgICAgc3RhdGVbYWN0aW9uLm1ldGEucmVxdWVzdElkXSA9IFwiZnVsZmlsbGVkXCI7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbn0pO1xyXG5gYGBcclxuICAgKi9cclxuICBhZGRNYXRjaGVyPEE+KFxyXG4gICAgbWF0Y2hlcjogVHlwZUd1YXJkPEE+IHwgKChhY3Rpb246IGFueSkgPT4gYm9vbGVhbiksXHJcbiAgICByZWR1Y2VyOiBDYXNlUmVkdWNlcjxTdGF0ZSwgQSBleHRlbmRzIEFueUFjdGlvbiA/IEEgOiBBICYgQW55QWN0aW9uPlxyXG4gICk6IE9taXQ8QWN0aW9uUmVkdWNlck1hcEJ1aWxkZXI8U3RhdGU+LCAnYWRkQ2FzZSc+XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZHMgYSBcImRlZmF1bHQgY2FzZVwiIHJlZHVjZXIgdGhhdCBpcyBleGVjdXRlZCBpZiBubyBjYXNlIHJlZHVjZXIgYW5kIG5vIG1hdGNoZXJcclxuICAgKiByZWR1Y2VyIHdhcyBleGVjdXRlZCBmb3IgdGhpcyBhY3Rpb24uXHJcbiAgICogQHBhcmFtIHJlZHVjZXIgLSBUaGUgZmFsbGJhY2sgXCJkZWZhdWx0IGNhc2VcIiByZWR1Y2VyIGZ1bmN0aW9uLlxyXG4gICAqXHJcbiAgICogQGV4YW1wbGVcclxuYGBgdHNcclxuaW1wb3J0IHsgY3JlYXRlUmVkdWNlciB9IGZyb20gJ0ByZWR1eGpzL3Rvb2xraXQnXHJcbmNvbnN0IGluaXRpYWxTdGF0ZSA9IHsgb3RoZXJBY3Rpb25zOiAwIH1cclxuY29uc3QgcmVkdWNlciA9IGNyZWF0ZVJlZHVjZXIoaW5pdGlhbFN0YXRlLCBidWlsZGVyID0+IHtcclxuICBidWlsZGVyXHJcbiAgICAvLyAuYWRkQ2FzZSguLi4pXHJcbiAgICAvLyAuYWRkTWF0Y2hlciguLi4pXHJcbiAgICAuYWRkRGVmYXVsdENhc2UoKHN0YXRlLCBhY3Rpb24pID0+IHtcclxuICAgICAgc3RhdGUub3RoZXJBY3Rpb25zKytcclxuICAgIH0pXHJcbn0pXHJcbmBgYFxyXG4gICAqL1xyXG4gIGFkZERlZmF1bHRDYXNlKHJlZHVjZXI6IENhc2VSZWR1Y2VyPFN0YXRlLCBBbnlBY3Rpb24+KToge31cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGV4ZWN1dGVSZWR1Y2VyQnVpbGRlckNhbGxiYWNrPFM+KFxyXG4gIGJ1aWxkZXJDYWxsYmFjazogKGJ1aWxkZXI6IEFjdGlvblJlZHVjZXJNYXBCdWlsZGVyPFM+KSA9PiB2b2lkXHJcbik6IFtcclxuICBDYXNlUmVkdWNlcnM8UywgYW55PixcclxuICBBY3Rpb25NYXRjaGVyRGVzY3JpcHRpb25Db2xsZWN0aW9uPFM+LFxyXG4gIENhc2VSZWR1Y2VyPFMsIEFueUFjdGlvbj4gfCB1bmRlZmluZWRcclxuXSB7XHJcbiAgY29uc3QgYWN0aW9uc01hcDogQ2FzZVJlZHVjZXJzPFMsIGFueT4gPSB7fVxyXG4gIGNvbnN0IGFjdGlvbk1hdGNoZXJzOiBBY3Rpb25NYXRjaGVyRGVzY3JpcHRpb25Db2xsZWN0aW9uPFM+ID0gW11cclxuICBsZXQgZGVmYXVsdENhc2VSZWR1Y2VyOiBDYXNlUmVkdWNlcjxTLCBBbnlBY3Rpb24+IHwgdW5kZWZpbmVkXHJcbiAgY29uc3QgYnVpbGRlciA9IHtcclxuICAgIGFkZENhc2UoXHJcbiAgICAgIHR5cGVPckFjdGlvbkNyZWF0b3I6IHN0cmluZyB8IFR5cGVkQWN0aW9uQ3JlYXRvcjxhbnk+LFxyXG4gICAgICByZWR1Y2VyOiBDYXNlUmVkdWNlcjxTPlxyXG4gICAgKSB7XHJcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XHJcbiAgICAgICAgLypcclxuICAgICAgICAgdG8ga2VlcCB0aGUgZGVmaW5pdGlvbiBieSB0aGUgdXNlciBpbiBsaW5lIHdpdGggYWN0dWFsIGJlaGF2aW9yLFxyXG4gICAgICAgICB3ZSBlbmZvcmNlIGBhZGRDYXNlYCB0byBhbHdheXMgYmUgY2FsbGVkIGJlZm9yZSBjYWxsaW5nIGBhZGRNYXRjaGVyYFxyXG4gICAgICAgICBhcyBtYXRjaGluZyBjYXNlcyB0YWtlIHByZWNlZGVuY2Ugb3ZlciBtYXRjaGVyc1xyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGlmIChhY3Rpb25NYXRjaGVycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgICAgICdgYnVpbGRlci5hZGRDYXNlYCBzaG91bGQgb25seSBiZSBjYWxsZWQgYmVmb3JlIGNhbGxpbmcgYGJ1aWxkZXIuYWRkTWF0Y2hlcmAnXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkZWZhdWx0Q2FzZVJlZHVjZXIpIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgICAgJ2BidWlsZGVyLmFkZENhc2VgIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBiZWZvcmUgY2FsbGluZyBgYnVpbGRlci5hZGREZWZhdWx0Q2FzZWAnXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHR5cGUgPVxyXG4gICAgICAgIHR5cGVvZiB0eXBlT3JBY3Rpb25DcmVhdG9yID09PSAnc3RyaW5nJ1xyXG4gICAgICAgICAgPyB0eXBlT3JBY3Rpb25DcmVhdG9yXHJcbiAgICAgICAgICA6IHR5cGVPckFjdGlvbkNyZWF0b3IudHlwZVxyXG4gICAgICBpZiAoIXR5cGUpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgICAnYGJ1aWxkZXIuYWRkQ2FzZWAgY2Fubm90IGJlIGNhbGxlZCB3aXRoIGFuIGVtcHR5IGFjdGlvbiB0eXBlJ1xyXG4gICAgICAgIClcclxuICAgICAgfVxyXG4gICAgICBpZiAodHlwZSBpbiBhY3Rpb25zTWFwKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgJ2BidWlsZGVyLmFkZENhc2VgIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCB0d28gcmVkdWNlcnMgZm9yIHRoZSBzYW1lIGFjdGlvbiB0eXBlJ1xyXG4gICAgICAgIClcclxuICAgICAgfVxyXG4gICAgICBhY3Rpb25zTWFwW3R5cGVdID0gcmVkdWNlclxyXG4gICAgICByZXR1cm4gYnVpbGRlclxyXG4gICAgfSxcclxuICAgIGFkZE1hdGNoZXI8QT4oXHJcbiAgICAgIG1hdGNoZXI6IFR5cGVHdWFyZDxBPixcclxuICAgICAgcmVkdWNlcjogQ2FzZVJlZHVjZXI8UywgQSBleHRlbmRzIEFueUFjdGlvbiA/IEEgOiBBICYgQW55QWN0aW9uPlxyXG4gICAgKSB7XHJcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XHJcbiAgICAgICAgaWYgKGRlZmF1bHRDYXNlUmVkdWNlcikge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgICAnYGJ1aWxkZXIuYWRkTWF0Y2hlcmAgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJlZm9yZSBjYWxsaW5nIGBidWlsZGVyLmFkZERlZmF1bHRDYXNlYCdcclxuICAgICAgICAgIClcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgYWN0aW9uTWF0Y2hlcnMucHVzaCh7IG1hdGNoZXIsIHJlZHVjZXIgfSlcclxuICAgICAgcmV0dXJuIGJ1aWxkZXJcclxuICAgIH0sXHJcbiAgICBhZGREZWZhdWx0Q2FzZShyZWR1Y2VyOiBDYXNlUmVkdWNlcjxTLCBBbnlBY3Rpb24+KSB7XHJcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XHJcbiAgICAgICAgaWYgKGRlZmF1bHRDYXNlUmVkdWNlcikge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdgYnVpbGRlci5hZGREZWZhdWx0Q2FzZWAgY2FuIG9ubHkgYmUgY2FsbGVkIG9uY2UnKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBkZWZhdWx0Q2FzZVJlZHVjZXIgPSByZWR1Y2VyXHJcbiAgICAgIHJldHVybiBidWlsZGVyXHJcbiAgICB9LFxyXG4gIH1cclxuICBidWlsZGVyQ2FsbGJhY2soYnVpbGRlcilcclxuICByZXR1cm4gW2FjdGlvbnNNYXAsIGFjdGlvbk1hdGNoZXJzLCBkZWZhdWx0Q2FzZVJlZHVjZXJdXHJcbn1cclxuIiwgImltcG9ydCB0eXBlIHsgQW55QWN0aW9uLCBSZWR1Y2VyIH0gZnJvbSAncmVkdXgnXHJcbmltcG9ydCB7IGNyZWF0ZU5leHRTdGF0ZSB9IGZyb20gJy4nXHJcbmltcG9ydCB0eXBlIHtcclxuICBBY3Rpb25DcmVhdG9yV2l0aG91dFBheWxvYWQsXHJcbiAgUGF5bG9hZEFjdGlvbixcclxuICBQYXlsb2FkQWN0aW9uQ3JlYXRvcixcclxuICBQcmVwYXJlQWN0aW9uLFxyXG4gIF9BY3Rpb25DcmVhdG9yV2l0aFByZXBhcmVkUGF5bG9hZCxcclxufSBmcm9tICcuL2NyZWF0ZUFjdGlvbidcclxuaW1wb3J0IHsgY3JlYXRlQWN0aW9uIH0gZnJvbSAnLi9jcmVhdGVBY3Rpb24nXHJcbmltcG9ydCB0eXBlIHtcclxuICBDYXNlUmVkdWNlcixcclxuICBDYXNlUmVkdWNlcnMsXHJcbiAgUmVkdWNlcldpdGhJbml0aWFsU3RhdGUsXHJcbn0gZnJvbSAnLi9jcmVhdGVSZWR1Y2VyJ1xyXG5pbXBvcnQgeyBjcmVhdGVSZWR1Y2VyLCBOb3RGdW5jdGlvbiB9IGZyb20gJy4vY3JlYXRlUmVkdWNlcidcclxuaW1wb3J0IHR5cGUgeyBBY3Rpb25SZWR1Y2VyTWFwQnVpbGRlciB9IGZyb20gJy4vbWFwQnVpbGRlcnMnXHJcbmltcG9ydCB7IGV4ZWN1dGVSZWR1Y2VyQnVpbGRlckNhbGxiYWNrIH0gZnJvbSAnLi9tYXBCdWlsZGVycydcclxuaW1wb3J0IHR5cGUgeyBOb0luZmVyIH0gZnJvbSAnLi90c0hlbHBlcnMnXHJcbmltcG9ydCB7IGZyZWV6ZURyYWZ0YWJsZSB9IGZyb20gJy4vdXRpbHMnXHJcblxyXG5sZXQgaGFzV2FybmVkQWJvdXRPYmplY3ROb3RhdGlvbiA9IGZhbHNlXHJcblxyXG4vKipcclxuICogQW4gYWN0aW9uIGNyZWF0b3IgYXR0YWNoZWQgdG8gYSBzbGljZS5cclxuICpcclxuICogQGRlcHJlY2F0ZWQgcGxlYXNlIHVzZSBQYXlsb2FkQWN0aW9uQ3JlYXRvciBkaXJlY3RseVxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBTbGljZUFjdGlvbkNyZWF0b3I8UD4gPSBQYXlsb2FkQWN0aW9uQ3JlYXRvcjxQPlxyXG5cclxuLyoqXHJcbiAqIFRoZSByZXR1cm4gdmFsdWUgb2YgYGNyZWF0ZVNsaWNlYFxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFNsaWNlPFxyXG4gIFN0YXRlID0gYW55LFxyXG4gIENhc2VSZWR1Y2VycyBleHRlbmRzIFNsaWNlQ2FzZVJlZHVjZXJzPFN0YXRlPiA9IFNsaWNlQ2FzZVJlZHVjZXJzPFN0YXRlPixcclxuICBOYW1lIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nXHJcbj4ge1xyXG4gIC8qKlxyXG4gICAqIFRoZSBzbGljZSBuYW1lLlxyXG4gICAqL1xyXG4gIG5hbWU6IE5hbWVcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIHNsaWNlJ3MgcmVkdWNlci5cclxuICAgKi9cclxuICByZWR1Y2VyOiBSZWR1Y2VyPFN0YXRlPlxyXG5cclxuICAvKipcclxuICAgKiBBY3Rpb24gY3JlYXRvcnMgZm9yIHRoZSB0eXBlcyBvZiBhY3Rpb25zIHRoYXQgYXJlIGhhbmRsZWQgYnkgdGhlIHNsaWNlXHJcbiAgICogcmVkdWNlci5cclxuICAgKi9cclxuICBhY3Rpb25zOiBDYXNlUmVkdWNlckFjdGlvbnM8Q2FzZVJlZHVjZXJzLCBOYW1lPlxyXG5cclxuICAvKipcclxuICAgKiBUaGUgaW5kaXZpZHVhbCBjYXNlIHJlZHVjZXIgZnVuY3Rpb25zIHRoYXQgd2VyZSBwYXNzZWQgaW4gdGhlIGByZWR1Y2Vyc2AgcGFyYW1ldGVyLlxyXG4gICAqIFRoaXMgZW5hYmxlcyByZXVzZSBhbmQgdGVzdGluZyBpZiB0aGV5IHdlcmUgZGVmaW5lZCBpbmxpbmUgd2hlbiBjYWxsaW5nIGBjcmVhdGVTbGljZWAuXHJcbiAgICovXHJcbiAgY2FzZVJlZHVjZXJzOiBTbGljZURlZmluZWRDYXNlUmVkdWNlcnM8Q2FzZVJlZHVjZXJzPlxyXG5cclxuICAvKipcclxuICAgKiBQcm92aWRlcyBhY2Nlc3MgdG8gdGhlIGluaXRpYWwgc3RhdGUgdmFsdWUgZ2l2ZW4gdG8gdGhlIHNsaWNlLlxyXG4gICAqIElmIGEgbGF6eSBzdGF0ZSBpbml0aWFsaXplciB3YXMgcHJvdmlkZWQsIGl0IHdpbGwgYmUgY2FsbGVkIGFuZCBhIGZyZXNoIHZhbHVlIHJldHVybmVkLlxyXG4gICAqL1xyXG4gIGdldEluaXRpYWxTdGF0ZTogKCkgPT4gU3RhdGVcclxufVxyXG5cclxuLyoqXHJcbiAqIE9wdGlvbnMgZm9yIGBjcmVhdGVTbGljZSgpYC5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVTbGljZU9wdGlvbnM8XHJcbiAgU3RhdGUgPSBhbnksXHJcbiAgQ1IgZXh0ZW5kcyBTbGljZUNhc2VSZWR1Y2VyczxTdGF0ZT4gPSBTbGljZUNhc2VSZWR1Y2VyczxTdGF0ZT4sXHJcbiAgTmFtZSBleHRlbmRzIHN0cmluZyA9IHN0cmluZ1xyXG4+IHtcclxuICAvKipcclxuICAgKiBUaGUgc2xpY2UncyBuYW1lLiBVc2VkIHRvIG5hbWVzcGFjZSB0aGUgZ2VuZXJhdGVkIGFjdGlvbiB0eXBlcy5cclxuICAgKi9cclxuICBuYW1lOiBOYW1lXHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBpbml0aWFsIHN0YXRlIHRoYXQgc2hvdWxkIGJlIHVzZWQgd2hlbiB0aGUgcmVkdWNlciBpcyBjYWxsZWQgdGhlIGZpcnN0IHRpbWUuIFRoaXMgbWF5IGFsc28gYmUgYSBcImxhenkgaW5pdGlhbGl6ZXJcIiBmdW5jdGlvbiwgd2hpY2ggc2hvdWxkIHJldHVybiBhbiBpbml0aWFsIHN0YXRlIHZhbHVlIHdoZW4gY2FsbGVkLiBUaGlzIHdpbGwgYmUgdXNlZCB3aGVuZXZlciB0aGUgcmVkdWNlciBpcyBjYWxsZWQgd2l0aCBgdW5kZWZpbmVkYCBhcyBpdHMgc3RhdGUgdmFsdWUsIGFuZCBpcyBwcmltYXJpbHkgdXNlZnVsIGZvciBjYXNlcyBsaWtlIHJlYWRpbmcgaW5pdGlhbCBzdGF0ZSBmcm9tIGBsb2NhbFN0b3JhZ2VgLlxyXG4gICAqL1xyXG4gIGluaXRpYWxTdGF0ZTogU3RhdGUgfCAoKCkgPT4gU3RhdGUpXHJcblxyXG4gIC8qKlxyXG4gICAqIEEgbWFwcGluZyBmcm9tIGFjdGlvbiB0eXBlcyB0byBhY3Rpb24tdHlwZS1zcGVjaWZpYyAqY2FzZSByZWR1Y2VyKlxyXG4gICAqIGZ1bmN0aW9ucy4gRm9yIGV2ZXJ5IGFjdGlvbiB0eXBlLCBhIG1hdGNoaW5nIGFjdGlvbiBjcmVhdG9yIHdpbGwgYmVcclxuICAgKiBnZW5lcmF0ZWQgdXNpbmcgYGNyZWF0ZUFjdGlvbigpYC5cclxuICAgKi9cclxuICByZWR1Y2VyczogVmFsaWRhdGVTbGljZUNhc2VSZWR1Y2VyczxTdGF0ZSwgQ1I+XHJcblxyXG4gIC8qKlxyXG4gICAqIEEgY2FsbGJhY2sgdGhhdCByZWNlaXZlcyBhICpidWlsZGVyKiBvYmplY3QgdG8gZGVmaW5lXHJcbiAgICogY2FzZSByZWR1Y2VycyB2aWEgY2FsbHMgdG8gYGJ1aWxkZXIuYWRkQ2FzZShhY3Rpb25DcmVhdG9yT3JUeXBlLCByZWR1Y2VyKWAuXHJcbiAgICogXHJcbiAgICogQWx0ZXJuYXRpdmVseSwgYSBtYXBwaW5nIGZyb20gYWN0aW9uIHR5cGVzIHRvIGFjdGlvbi10eXBlLXNwZWNpZmljICpjYXNlIHJlZHVjZXIqXHJcbiAgICogZnVuY3Rpb25zLiBUaGVzZSByZWR1Y2VycyBzaG91bGQgaGF2ZSBleGlzdGluZyBhY3Rpb24gdHlwZXMgdXNlZFxyXG4gICAqIGFzIHRoZSBrZXlzLCBhbmQgYWN0aW9uIGNyZWF0b3JzIHdpbGwgX25vdF8gYmUgZ2VuZXJhdGVkLlxyXG4gICAqIFxyXG4gICAqIEBleGFtcGxlXHJcbmBgYHRzXHJcbmltcG9ydCB7IGNyZWF0ZUFjdGlvbiwgY3JlYXRlU2xpY2UsIEFjdGlvbiwgQW55QWN0aW9uIH0gZnJvbSAnQHJlZHV4anMvdG9vbGtpdCdcclxuY29uc3QgaW5jcmVtZW50QnkgPSBjcmVhdGVBY3Rpb248bnVtYmVyPignaW5jcmVtZW50QnknKVxyXG5jb25zdCBkZWNyZW1lbnQgPSBjcmVhdGVBY3Rpb24oJ2RlY3JlbWVudCcpXHJcblxyXG5pbnRlcmZhY2UgUmVqZWN0ZWRBY3Rpb24gZXh0ZW5kcyBBY3Rpb24ge1xyXG4gIGVycm9yOiBFcnJvclxyXG59XHJcblxyXG5mdW5jdGlvbiBpc1JlamVjdGVkQWN0aW9uKGFjdGlvbjogQW55QWN0aW9uKTogYWN0aW9uIGlzIFJlamVjdGVkQWN0aW9uIHtcclxuICByZXR1cm4gYWN0aW9uLnR5cGUuZW5kc1dpdGgoJ3JlamVjdGVkJylcclxufVxyXG5cclxuY3JlYXRlU2xpY2Uoe1xyXG4gIG5hbWU6ICdjb3VudGVyJyxcclxuICBpbml0aWFsU3RhdGU6IDAsXHJcbiAgcmVkdWNlcnM6IHt9LFxyXG4gIGV4dHJhUmVkdWNlcnM6IGJ1aWxkZXIgPT4ge1xyXG4gICAgYnVpbGRlclxyXG4gICAgICAuYWRkQ2FzZShpbmNyZW1lbnRCeSwgKHN0YXRlLCBhY3Rpb24pID0+IHtcclxuICAgICAgICAvLyBhY3Rpb24gaXMgaW5mZXJyZWQgY29ycmVjdGx5IGhlcmUgaWYgdXNpbmcgVFNcclxuICAgICAgfSlcclxuICAgICAgLy8gWW91IGNhbiBjaGFpbiBjYWxscywgb3IgaGF2ZSBzZXBhcmF0ZSBgYnVpbGRlci5hZGRDYXNlKClgIGxpbmVzIGVhY2ggdGltZVxyXG4gICAgICAuYWRkQ2FzZShkZWNyZW1lbnQsIChzdGF0ZSwgYWN0aW9uKSA9PiB7fSlcclxuICAgICAgLy8gWW91IGNhbiBtYXRjaCBhIHJhbmdlIG9mIGFjdGlvbiB0eXBlc1xyXG4gICAgICAuYWRkTWF0Y2hlcihcclxuICAgICAgICBpc1JlamVjdGVkQWN0aW9uLFxyXG4gICAgICAgIC8vIGBhY3Rpb25gIHdpbGwgYmUgaW5mZXJyZWQgYXMgYSBSZWplY3RlZEFjdGlvbiBkdWUgdG8gaXNSZWplY3RlZEFjdGlvbiBiZWluZyBkZWZpbmVkIGFzIGEgdHlwZSBndWFyZFxyXG4gICAgICAgIChzdGF0ZSwgYWN0aW9uKSA9PiB7fVxyXG4gICAgICApXHJcbiAgICAgIC8vIGFuZCBwcm92aWRlIGEgZGVmYXVsdCBjYXNlIGlmIG5vIG90aGVyIGhhbmRsZXJzIG1hdGNoZWRcclxuICAgICAgLmFkZERlZmF1bHRDYXNlKChzdGF0ZSwgYWN0aW9uKSA9PiB7fSlcclxuICAgIH1cclxufSlcclxuYGBgXHJcbiAgICovXHJcbiAgZXh0cmFSZWR1Y2Vycz86XHJcbiAgICB8IENhc2VSZWR1Y2VyczxOb0luZmVyPFN0YXRlPiwgYW55PlxyXG4gICAgfCAoKGJ1aWxkZXI6IEFjdGlvblJlZHVjZXJNYXBCdWlsZGVyPE5vSW5mZXI8U3RhdGU+PikgPT4gdm9pZClcclxufVxyXG5cclxuLyoqXHJcbiAqIEEgQ2FzZVJlZHVjZXIgd2l0aCBhIGBwcmVwYXJlYCBtZXRob2QuXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCB0eXBlIENhc2VSZWR1Y2VyV2l0aFByZXBhcmU8U3RhdGUsIEFjdGlvbiBleHRlbmRzIFBheWxvYWRBY3Rpb24+ID0ge1xyXG4gIHJlZHVjZXI6IENhc2VSZWR1Y2VyPFN0YXRlLCBBY3Rpb24+XHJcbiAgcHJlcGFyZTogUHJlcGFyZUFjdGlvbjxBY3Rpb25bJ3BheWxvYWQnXT5cclxufVxyXG5cclxuLyoqXHJcbiAqIFRoZSB0eXBlIGRlc2NyaWJpbmcgYSBzbGljZSdzIGByZWR1Y2Vyc2Agb3B0aW9uLlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBTbGljZUNhc2VSZWR1Y2VyczxTdGF0ZT4gPSB7XHJcbiAgW0s6IHN0cmluZ106XHJcbiAgICB8IENhc2VSZWR1Y2VyPFN0YXRlLCBQYXlsb2FkQWN0aW9uPGFueT4+XHJcbiAgICB8IENhc2VSZWR1Y2VyV2l0aFByZXBhcmU8U3RhdGUsIFBheWxvYWRBY3Rpb248YW55LCBzdHJpbmcsIGFueSwgYW55Pj5cclxufVxyXG5cclxudHlwZSBTbGljZUFjdGlvblR5cGU8XHJcbiAgU2xpY2VOYW1lIGV4dGVuZHMgc3RyaW5nLFxyXG4gIEFjdGlvbk5hbWUgZXh0ZW5kcyBrZXlvZiBhbnlcclxuPiA9IEFjdGlvbk5hbWUgZXh0ZW5kcyBzdHJpbmcgfCBudW1iZXIgPyBgJHtTbGljZU5hbWV9LyR7QWN0aW9uTmFtZX1gIDogc3RyaW5nXHJcblxyXG4vKipcclxuICogRGVyaXZlcyB0aGUgc2xpY2UncyBgYWN0aW9uc2AgcHJvcGVydHkgZnJvbSB0aGUgYHJlZHVjZXJzYCBvcHRpb25zXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCB0eXBlIENhc2VSZWR1Y2VyQWN0aW9uczxcclxuICBDYXNlUmVkdWNlcnMgZXh0ZW5kcyBTbGljZUNhc2VSZWR1Y2Vyczxhbnk+LFxyXG4gIFNsaWNlTmFtZSBleHRlbmRzIHN0cmluZ1xyXG4+ID0ge1xyXG4gIFtUeXBlIGluIGtleW9mIENhc2VSZWR1Y2Vyc106IENhc2VSZWR1Y2Vyc1tUeXBlXSBleHRlbmRzIHsgcHJlcGFyZTogYW55IH1cclxuICAgID8gQWN0aW9uQ3JlYXRvckZvckNhc2VSZWR1Y2VyV2l0aFByZXBhcmU8XHJcbiAgICAgICAgQ2FzZVJlZHVjZXJzW1R5cGVdLFxyXG4gICAgICAgIFNsaWNlQWN0aW9uVHlwZTxTbGljZU5hbWUsIFR5cGU+XHJcbiAgICAgID5cclxuICAgIDogQWN0aW9uQ3JlYXRvckZvckNhc2VSZWR1Y2VyPFxyXG4gICAgICAgIENhc2VSZWR1Y2Vyc1tUeXBlXSxcclxuICAgICAgICBTbGljZUFjdGlvblR5cGU8U2xpY2VOYW1lLCBUeXBlPlxyXG4gICAgICA+XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZXQgYSBgUGF5bG9hZEFjdGlvbkNyZWF0b3JgIHR5cGUgZm9yIGEgcGFzc2VkIGBDYXNlUmVkdWNlcldpdGhQcmVwYXJlYFxyXG4gKlxyXG4gKiBAaW50ZXJuYWxcclxuICovXHJcbnR5cGUgQWN0aW9uQ3JlYXRvckZvckNhc2VSZWR1Y2VyV2l0aFByZXBhcmU8XHJcbiAgQ1IgZXh0ZW5kcyB7IHByZXBhcmU6IGFueSB9LFxyXG4gIFR5cGUgZXh0ZW5kcyBzdHJpbmdcclxuPiA9IF9BY3Rpb25DcmVhdG9yV2l0aFByZXBhcmVkUGF5bG9hZDxDUlsncHJlcGFyZSddLCBUeXBlPlxyXG5cclxuLyoqXHJcbiAqIEdldCBhIGBQYXlsb2FkQWN0aW9uQ3JlYXRvcmAgdHlwZSBmb3IgYSBwYXNzZWQgYENhc2VSZWR1Y2VyYFxyXG4gKlxyXG4gKiBAaW50ZXJuYWxcclxuICovXHJcbnR5cGUgQWN0aW9uQ3JlYXRvckZvckNhc2VSZWR1Y2VyPENSLCBUeXBlIGV4dGVuZHMgc3RyaW5nPiA9IENSIGV4dGVuZHMgKFxyXG4gIHN0YXRlOiBhbnksXHJcbiAgYWN0aW9uOiBpbmZlciBBY3Rpb25cclxuKSA9PiBhbnlcclxuICA/IEFjdGlvbiBleHRlbmRzIHsgcGF5bG9hZDogaW5mZXIgUCB9XHJcbiAgICA/IFBheWxvYWRBY3Rpb25DcmVhdG9yPFAsIFR5cGU+XHJcbiAgICA6IEFjdGlvbkNyZWF0b3JXaXRob3V0UGF5bG9hZDxUeXBlPlxyXG4gIDogQWN0aW9uQ3JlYXRvcldpdGhvdXRQYXlsb2FkPFR5cGU+XHJcblxyXG4vKipcclxuICogRXh0cmFjdHMgdGhlIENhc2VSZWR1Y2VycyBvdXQgb2YgYSBgcmVkdWNlcnNgIG9iamVjdCwgZXZlbiBpZiB0aGV5IGFyZVxyXG4gKiB0ZXN0ZWQgaW50byBhIGBDYXNlUmVkdWNlcldpdGhQcmVwYXJlYC5cclxuICpcclxuICogQGludGVybmFsXHJcbiAqL1xyXG50eXBlIFNsaWNlRGVmaW5lZENhc2VSZWR1Y2VyczxDYXNlUmVkdWNlcnMgZXh0ZW5kcyBTbGljZUNhc2VSZWR1Y2Vyczxhbnk+PiA9IHtcclxuICBbVHlwZSBpbiBrZXlvZiBDYXNlUmVkdWNlcnNdOiBDYXNlUmVkdWNlcnNbVHlwZV0gZXh0ZW5kcyB7XHJcbiAgICByZWR1Y2VyOiBpbmZlciBSZWR1Y2VyXHJcbiAgfVxyXG4gICAgPyBSZWR1Y2VyXHJcbiAgICA6IENhc2VSZWR1Y2Vyc1tUeXBlXVxyXG59XHJcblxyXG4vKipcclxuICogVXNlZCBvbiBhIFNsaWNlQ2FzZVJlZHVjZXJzIG9iamVjdC5cclxuICogRW5zdXJlcyB0aGF0IGlmIGEgQ2FzZVJlZHVjZXIgaXMgYSBgQ2FzZVJlZHVjZXJXaXRoUHJlcGFyZWAsIHRoYXRcclxuICogdGhlIGByZWR1Y2VyYCBhbmQgdGhlIGBwcmVwYXJlYCBmdW5jdGlvbiB1c2UgdGhlIHNhbWUgdHlwZSBvZiBgcGF5bG9hZGAuXHJcbiAqXHJcbiAqIE1pZ2h0IGRvIGFkZGl0aW9uYWwgc3VjaCBjaGVja3MgaW4gdGhlIGZ1dHVyZS5cclxuICpcclxuICogVGhpcyB0eXBlIGlzIG9ubHkgZXZlciB1c2VmdWwgaWYgeW91IHdhbnQgdG8gd3JpdGUgeW91ciBvd24gd3JhcHBlciBhcm91bmRcclxuICogYGNyZWF0ZVNsaWNlYC4gUGxlYXNlIGRvbid0IHVzZSBpdCBvdGhlcndpc2UhXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCB0eXBlIFZhbGlkYXRlU2xpY2VDYXNlUmVkdWNlcnM8XHJcbiAgUyxcclxuICBBQ1IgZXh0ZW5kcyBTbGljZUNhc2VSZWR1Y2VyczxTPlxyXG4+ID0gQUNSICZcclxuICB7XHJcbiAgICBbVCBpbiBrZXlvZiBBQ1JdOiBBQ1JbVF0gZXh0ZW5kcyB7XHJcbiAgICAgIHJlZHVjZXIoczogUywgYWN0aW9uPzogaW5mZXIgQSk6IGFueVxyXG4gICAgfVxyXG4gICAgICA/IHtcclxuICAgICAgICAgIHByZXBhcmUoLi4uYTogbmV2ZXJbXSk6IE9taXQ8QSwgJ3R5cGUnPlxyXG4gICAgICAgIH1cclxuICAgICAgOiB7fVxyXG4gIH1cclxuXHJcbmZ1bmN0aW9uIGdldFR5cGUoc2xpY2U6IHN0cmluZywgYWN0aW9uS2V5OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gIHJldHVybiBgJHtzbGljZX0vJHthY3Rpb25LZXl9YFxyXG59XHJcblxyXG4vKipcclxuICogQSBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgYW4gaW5pdGlhbCBzdGF0ZSwgYW4gb2JqZWN0IGZ1bGwgb2YgcmVkdWNlclxyXG4gKiBmdW5jdGlvbnMsIGFuZCBhIFwic2xpY2UgbmFtZVwiLCBhbmQgYXV0b21hdGljYWxseSBnZW5lcmF0ZXNcclxuICogYWN0aW9uIGNyZWF0b3JzIGFuZCBhY3Rpb24gdHlwZXMgdGhhdCBjb3JyZXNwb25kIHRvIHRoZVxyXG4gKiByZWR1Y2VycyBhbmQgc3RhdGUuXHJcbiAqXHJcbiAqIFRoZSBgcmVkdWNlcmAgYXJndW1lbnQgaXMgcGFzc2VkIHRvIGBjcmVhdGVSZWR1Y2VyKClgLlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU2xpY2U8XHJcbiAgU3RhdGUsXHJcbiAgQ2FzZVJlZHVjZXJzIGV4dGVuZHMgU2xpY2VDYXNlUmVkdWNlcnM8U3RhdGU+LFxyXG4gIE5hbWUgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmdcclxuPihcclxuICBvcHRpb25zOiBDcmVhdGVTbGljZU9wdGlvbnM8U3RhdGUsIENhc2VSZWR1Y2VycywgTmFtZT5cclxuKTogU2xpY2U8U3RhdGUsIENhc2VSZWR1Y2VycywgTmFtZT4ge1xyXG4gIGNvbnN0IHsgbmFtZSB9ID0gb3B0aW9uc1xyXG4gIGlmICghbmFtZSkge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdgbmFtZWAgaXMgYSByZXF1aXJlZCBvcHRpb24gZm9yIGNyZWF0ZVNsaWNlJylcclxuICB9XHJcblxyXG4gIGlmIChcclxuICAgIHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJlxyXG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCdcclxuICApIHtcclxuICAgIGlmIChvcHRpb25zLmluaXRpYWxTdGF0ZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXHJcbiAgICAgICAgJ1lvdSBtdXN0IHByb3ZpZGUgYW4gYGluaXRpYWxTdGF0ZWAgdmFsdWUgdGhhdCBpcyBub3QgYHVuZGVmaW5lZGAuIFlvdSBtYXkgaGF2ZSBtaXNzcGVsbGVkIGBpbml0aWFsU3RhdGVgJ1xyXG4gICAgICApXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb25zdCBpbml0aWFsU3RhdGUgPVxyXG4gICAgdHlwZW9mIG9wdGlvbnMuaW5pdGlhbFN0YXRlID09ICdmdW5jdGlvbidcclxuICAgICAgPyBvcHRpb25zLmluaXRpYWxTdGF0ZVxyXG4gICAgICA6IGZyZWV6ZURyYWZ0YWJsZShvcHRpb25zLmluaXRpYWxTdGF0ZSlcclxuXHJcbiAgY29uc3QgcmVkdWNlcnMgPSBvcHRpb25zLnJlZHVjZXJzIHx8IHt9XHJcblxyXG4gIGNvbnN0IHJlZHVjZXJOYW1lcyA9IE9iamVjdC5rZXlzKHJlZHVjZXJzKVxyXG5cclxuICBjb25zdCBzbGljZUNhc2VSZWR1Y2Vyc0J5TmFtZTogUmVjb3JkPHN0cmluZywgQ2FzZVJlZHVjZXI+ID0ge31cclxuICBjb25zdCBzbGljZUNhc2VSZWR1Y2Vyc0J5VHlwZTogUmVjb3JkPHN0cmluZywgQ2FzZVJlZHVjZXI+ID0ge31cclxuICBjb25zdCBhY3Rpb25DcmVhdG9yczogUmVjb3JkPHN0cmluZywgRnVuY3Rpb24+ID0ge31cclxuXHJcbiAgcmVkdWNlck5hbWVzLmZvckVhY2goKHJlZHVjZXJOYW1lKSA9PiB7XHJcbiAgICBjb25zdCBtYXliZVJlZHVjZXJXaXRoUHJlcGFyZSA9IHJlZHVjZXJzW3JlZHVjZXJOYW1lXVxyXG4gICAgY29uc3QgdHlwZSA9IGdldFR5cGUobmFtZSwgcmVkdWNlck5hbWUpXHJcblxyXG4gICAgbGV0IGNhc2VSZWR1Y2VyOiBDYXNlUmVkdWNlcjxTdGF0ZSwgYW55PlxyXG4gICAgbGV0IHByZXBhcmVDYWxsYmFjazogUHJlcGFyZUFjdGlvbjxhbnk+IHwgdW5kZWZpbmVkXHJcblxyXG4gICAgaWYgKCdyZWR1Y2VyJyBpbiBtYXliZVJlZHVjZXJXaXRoUHJlcGFyZSkge1xyXG4gICAgICBjYXNlUmVkdWNlciA9IG1heWJlUmVkdWNlcldpdGhQcmVwYXJlLnJlZHVjZXJcclxuICAgICAgcHJlcGFyZUNhbGxiYWNrID0gbWF5YmVSZWR1Y2VyV2l0aFByZXBhcmUucHJlcGFyZVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY2FzZVJlZHVjZXIgPSBtYXliZVJlZHVjZXJXaXRoUHJlcGFyZVxyXG4gICAgfVxyXG5cclxuICAgIHNsaWNlQ2FzZVJlZHVjZXJzQnlOYW1lW3JlZHVjZXJOYW1lXSA9IGNhc2VSZWR1Y2VyXHJcbiAgICBzbGljZUNhc2VSZWR1Y2Vyc0J5VHlwZVt0eXBlXSA9IGNhc2VSZWR1Y2VyXHJcbiAgICBhY3Rpb25DcmVhdG9yc1tyZWR1Y2VyTmFtZV0gPSBwcmVwYXJlQ2FsbGJhY2tcclxuICAgICAgPyBjcmVhdGVBY3Rpb24odHlwZSwgcHJlcGFyZUNhbGxiYWNrKVxyXG4gICAgICA6IGNyZWF0ZUFjdGlvbih0eXBlKVxyXG4gIH0pXHJcblxyXG4gIGZ1bmN0aW9uIGJ1aWxkUmVkdWNlcigpIHtcclxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XHJcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5leHRyYVJlZHVjZXJzID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgIGlmICghaGFzV2FybmVkQWJvdXRPYmplY3ROb3RhdGlvbikge1xyXG4gICAgICAgICAgaGFzV2FybmVkQWJvdXRPYmplY3ROb3RhdGlvbiA9IHRydWVcclxuICAgICAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICAgICAgXCJUaGUgb2JqZWN0IG5vdGF0aW9uIGZvciBgY3JlYXRlU2xpY2UuZXh0cmFSZWR1Y2Vyc2AgaXMgZGVwcmVjYXRlZCwgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBSVEsgMi4wLiBQbGVhc2UgdXNlIHRoZSAnYnVpbGRlciBjYWxsYmFjaycgbm90YXRpb24gaW5zdGVhZDogaHR0cHM6Ly9yZWR1eC10b29sa2l0LmpzLm9yZy9hcGkvY3JlYXRlU2xpY2VcIlxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3QgW1xyXG4gICAgICBleHRyYVJlZHVjZXJzID0ge30sXHJcbiAgICAgIGFjdGlvbk1hdGNoZXJzID0gW10sXHJcbiAgICAgIGRlZmF1bHRDYXNlUmVkdWNlciA9IHVuZGVmaW5lZCxcclxuICAgIF0gPVxyXG4gICAgICB0eXBlb2Ygb3B0aW9ucy5leHRyYVJlZHVjZXJzID09PSAnZnVuY3Rpb24nXHJcbiAgICAgICAgPyBleGVjdXRlUmVkdWNlckJ1aWxkZXJDYWxsYmFjayhvcHRpb25zLmV4dHJhUmVkdWNlcnMpXHJcbiAgICAgICAgOiBbb3B0aW9ucy5leHRyYVJlZHVjZXJzXVxyXG5cclxuICAgIGNvbnN0IGZpbmFsQ2FzZVJlZHVjZXJzID0geyAuLi5leHRyYVJlZHVjZXJzLCAuLi5zbGljZUNhc2VSZWR1Y2Vyc0J5VHlwZSB9XHJcblxyXG4gICAgcmV0dXJuIGNyZWF0ZVJlZHVjZXIoaW5pdGlhbFN0YXRlLCAoYnVpbGRlcikgPT4ge1xyXG4gICAgICBmb3IgKGxldCBrZXkgaW4gZmluYWxDYXNlUmVkdWNlcnMpIHtcclxuICAgICAgICBidWlsZGVyLmFkZENhc2Uoa2V5LCBmaW5hbENhc2VSZWR1Y2Vyc1trZXldIGFzIENhc2VSZWR1Y2VyPGFueT4pXHJcbiAgICAgIH1cclxuICAgICAgZm9yIChsZXQgbSBvZiBhY3Rpb25NYXRjaGVycykge1xyXG4gICAgICAgIGJ1aWxkZXIuYWRkTWF0Y2hlcihtLm1hdGNoZXIsIG0ucmVkdWNlcilcclxuICAgICAgfVxyXG4gICAgICBpZiAoZGVmYXVsdENhc2VSZWR1Y2VyKSB7XHJcbiAgICAgICAgYnVpbGRlci5hZGREZWZhdWx0Q2FzZShkZWZhdWx0Q2FzZVJlZHVjZXIpXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBsZXQgX3JlZHVjZXI6IFJlZHVjZXJXaXRoSW5pdGlhbFN0YXRlPFN0YXRlPlxyXG5cclxuICByZXR1cm4ge1xyXG4gICAgbmFtZSxcclxuICAgIHJlZHVjZXIoc3RhdGUsIGFjdGlvbikge1xyXG4gICAgICBpZiAoIV9yZWR1Y2VyKSBfcmVkdWNlciA9IGJ1aWxkUmVkdWNlcigpXHJcblxyXG4gICAgICByZXR1cm4gX3JlZHVjZXIoc3RhdGUsIGFjdGlvbilcclxuICAgIH0sXHJcbiAgICBhY3Rpb25zOiBhY3Rpb25DcmVhdG9ycyBhcyBhbnksXHJcbiAgICBjYXNlUmVkdWNlcnM6IHNsaWNlQ2FzZVJlZHVjZXJzQnlOYW1lIGFzIGFueSxcclxuICAgIGdldEluaXRpYWxTdGF0ZSgpIHtcclxuICAgICAgaWYgKCFfcmVkdWNlcikgX3JlZHVjZXIgPSBidWlsZFJlZHVjZXIoKVxyXG5cclxuICAgICAgcmV0dXJuIF9yZWR1Y2VyLmdldEluaXRpYWxTdGF0ZSgpXHJcbiAgICB9LFxyXG4gIH1cclxufVxyXG4iLCAiaW1wb3J0IHR5cGUgeyBFbnRpdHlTdGF0ZSB9IGZyb20gJy4vbW9kZWxzJ1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEluaXRpYWxFbnRpdHlTdGF0ZTxWPigpOiBFbnRpdHlTdGF0ZTxWPiB7XHJcbiAgcmV0dXJuIHtcclxuICAgIGlkczogW10sXHJcbiAgICBlbnRpdGllczoge30sXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSW5pdGlhbFN0YXRlRmFjdG9yeTxWPigpIHtcclxuICBmdW5jdGlvbiBnZXRJbml0aWFsU3RhdGUoKTogRW50aXR5U3RhdGU8Vj5cclxuICBmdW5jdGlvbiBnZXRJbml0aWFsU3RhdGU8UyBleHRlbmRzIG9iamVjdD4oXHJcbiAgICBhZGRpdGlvbmFsU3RhdGU6IFNcclxuICApOiBFbnRpdHlTdGF0ZTxWPiAmIFNcclxuICBmdW5jdGlvbiBnZXRJbml0aWFsU3RhdGUoYWRkaXRpb25hbFN0YXRlOiBhbnkgPSB7fSk6IGFueSB7XHJcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihnZXRJbml0aWFsRW50aXR5U3RhdGUoKSwgYWRkaXRpb25hbFN0YXRlKVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHsgZ2V0SW5pdGlhbFN0YXRlIH1cclxufVxyXG4iLCAiaW1wb3J0IHR5cGUgeyBTZWxlY3RvciB9IGZyb20gJ3Jlc2VsZWN0J1xyXG5pbXBvcnQgeyBjcmVhdGVEcmFmdFNhZmVTZWxlY3RvciB9IGZyb20gJy4uL2NyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yJ1xyXG5pbXBvcnQgdHlwZSB7XHJcbiAgRW50aXR5U3RhdGUsXHJcbiAgRW50aXR5U2VsZWN0b3JzLFxyXG4gIERpY3Rpb25hcnksXHJcbiAgRW50aXR5SWQsXHJcbn0gZnJvbSAnLi9tb2RlbHMnXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU2VsZWN0b3JzRmFjdG9yeTxUPigpIHtcclxuICBmdW5jdGlvbiBnZXRTZWxlY3RvcnMoKTogRW50aXR5U2VsZWN0b3JzPFQsIEVudGl0eVN0YXRlPFQ+PlxyXG4gIGZ1bmN0aW9uIGdldFNlbGVjdG9yczxWPihcclxuICAgIHNlbGVjdFN0YXRlOiAoc3RhdGU6IFYpID0+IEVudGl0eVN0YXRlPFQ+XHJcbiAgKTogRW50aXR5U2VsZWN0b3JzPFQsIFY+XHJcbiAgZnVuY3Rpb24gZ2V0U2VsZWN0b3JzPFY+KFxyXG4gICAgc2VsZWN0U3RhdGU/OiAoc3RhdGU6IFYpID0+IEVudGl0eVN0YXRlPFQ+XHJcbiAgKTogRW50aXR5U2VsZWN0b3JzPFQsIGFueT4ge1xyXG4gICAgY29uc3Qgc2VsZWN0SWRzID0gKHN0YXRlOiBFbnRpdHlTdGF0ZTxUPikgPT4gc3RhdGUuaWRzXHJcblxyXG4gICAgY29uc3Qgc2VsZWN0RW50aXRpZXMgPSAoc3RhdGU6IEVudGl0eVN0YXRlPFQ+KSA9PiBzdGF0ZS5lbnRpdGllc1xyXG5cclxuICAgIGNvbnN0IHNlbGVjdEFsbCA9IGNyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yKFxyXG4gICAgICBzZWxlY3RJZHMsXHJcbiAgICAgIHNlbGVjdEVudGl0aWVzLFxyXG4gICAgICAoaWRzLCBlbnRpdGllcyk6IFRbXSA9PiBpZHMubWFwKChpZCkgPT4gZW50aXRpZXNbaWRdISlcclxuICAgIClcclxuXHJcbiAgICBjb25zdCBzZWxlY3RJZCA9IChfOiB1bmtub3duLCBpZDogRW50aXR5SWQpID0+IGlkXHJcblxyXG4gICAgY29uc3Qgc2VsZWN0QnlJZCA9IChlbnRpdGllczogRGljdGlvbmFyeTxUPiwgaWQ6IEVudGl0eUlkKSA9PiBlbnRpdGllc1tpZF1cclxuXHJcbiAgICBjb25zdCBzZWxlY3RUb3RhbCA9IGNyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yKHNlbGVjdElkcywgKGlkcykgPT4gaWRzLmxlbmd0aClcclxuXHJcbiAgICBpZiAoIXNlbGVjdFN0YXRlKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgc2VsZWN0SWRzLFxyXG4gICAgICAgIHNlbGVjdEVudGl0aWVzLFxyXG4gICAgICAgIHNlbGVjdEFsbCxcclxuICAgICAgICBzZWxlY3RUb3RhbCxcclxuICAgICAgICBzZWxlY3RCeUlkOiBjcmVhdGVEcmFmdFNhZmVTZWxlY3RvcihcclxuICAgICAgICAgIHNlbGVjdEVudGl0aWVzLFxyXG4gICAgICAgICAgc2VsZWN0SWQsXHJcbiAgICAgICAgICBzZWxlY3RCeUlkXHJcbiAgICAgICAgKSxcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHNlbGVjdEdsb2JhbGl6ZWRFbnRpdGllcyA9IGNyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yKFxyXG4gICAgICBzZWxlY3RTdGF0ZSBhcyBTZWxlY3RvcjxWLCBFbnRpdHlTdGF0ZTxUPj4sXHJcbiAgICAgIHNlbGVjdEVudGl0aWVzXHJcbiAgICApXHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgc2VsZWN0SWRzOiBjcmVhdGVEcmFmdFNhZmVTZWxlY3RvcihzZWxlY3RTdGF0ZSwgc2VsZWN0SWRzKSxcclxuICAgICAgc2VsZWN0RW50aXRpZXM6IHNlbGVjdEdsb2JhbGl6ZWRFbnRpdGllcyxcclxuICAgICAgc2VsZWN0QWxsOiBjcmVhdGVEcmFmdFNhZmVTZWxlY3RvcihzZWxlY3RTdGF0ZSwgc2VsZWN0QWxsKSxcclxuICAgICAgc2VsZWN0VG90YWw6IGNyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yKHNlbGVjdFN0YXRlLCBzZWxlY3RUb3RhbCksXHJcbiAgICAgIHNlbGVjdEJ5SWQ6IGNyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yKFxyXG4gICAgICAgIHNlbGVjdEdsb2JhbGl6ZWRFbnRpdGllcyxcclxuICAgICAgICBzZWxlY3RJZCxcclxuICAgICAgICBzZWxlY3RCeUlkXHJcbiAgICAgICksXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4geyBnZXRTZWxlY3RvcnMgfVxyXG59XHJcbiIsICJpbXBvcnQgY3JlYXRlTmV4dFN0YXRlLCB7IGlzRHJhZnQgfSBmcm9tICdpbW1lcidcclxuaW1wb3J0IHR5cGUgeyBFbnRpdHlTdGF0ZSwgUHJldmVudEFueSB9IGZyb20gJy4vbW9kZWxzJ1xyXG5pbXBvcnQgdHlwZSB7IFBheWxvYWRBY3Rpb24gfSBmcm9tICcuLi9jcmVhdGVBY3Rpb24nXHJcbmltcG9ydCB7IGlzRlNBIH0gZnJvbSAnLi4vY3JlYXRlQWN0aW9uJ1xyXG5pbXBvcnQgeyBJc0FueSB9IGZyb20gJy4uL3RzSGVscGVycydcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTaW5nbGVBcmd1bWVudFN0YXRlT3BlcmF0b3I8Vj4oXHJcbiAgbXV0YXRvcjogKHN0YXRlOiBFbnRpdHlTdGF0ZTxWPikgPT4gdm9pZFxyXG4pIHtcclxuICBjb25zdCBvcGVyYXRvciA9IGNyZWF0ZVN0YXRlT3BlcmF0b3IoKF86IHVuZGVmaW5lZCwgc3RhdGU6IEVudGl0eVN0YXRlPFY+KSA9PlxyXG4gICAgbXV0YXRvcihzdGF0ZSlcclxuICApXHJcblxyXG4gIHJldHVybiBmdW5jdGlvbiBvcGVyYXRpb248UyBleHRlbmRzIEVudGl0eVN0YXRlPFY+PihcclxuICAgIHN0YXRlOiBQcmV2ZW50QW55PFMsIFY+XHJcbiAgKTogUyB7XHJcbiAgICByZXR1cm4gb3BlcmF0b3Ioc3RhdGUgYXMgUywgdW5kZWZpbmVkKVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVN0YXRlT3BlcmF0b3I8ViwgUj4oXHJcbiAgbXV0YXRvcjogKGFyZzogUiwgc3RhdGU6IEVudGl0eVN0YXRlPFY+KSA9PiB2b2lkXHJcbikge1xyXG4gIHJldHVybiBmdW5jdGlvbiBvcGVyYXRpb248UyBleHRlbmRzIEVudGl0eVN0YXRlPFY+PihcclxuICAgIHN0YXRlOiBTLFxyXG4gICAgYXJnOiBSIHwgUGF5bG9hZEFjdGlvbjxSPlxyXG4gICk6IFMge1xyXG4gICAgZnVuY3Rpb24gaXNQYXlsb2FkQWN0aW9uQXJndW1lbnQoXHJcbiAgICAgIGFyZzogUiB8IFBheWxvYWRBY3Rpb248Uj5cclxuICAgICk6IGFyZyBpcyBQYXlsb2FkQWN0aW9uPFI+IHtcclxuICAgICAgcmV0dXJuIGlzRlNBKGFyZylcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBydW5NdXRhdG9yID0gKGRyYWZ0OiBFbnRpdHlTdGF0ZTxWPikgPT4ge1xyXG4gICAgICBpZiAoaXNQYXlsb2FkQWN0aW9uQXJndW1lbnQoYXJnKSkge1xyXG4gICAgICAgIG11dGF0b3IoYXJnLnBheWxvYWQsIGRyYWZ0KVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG11dGF0b3IoYXJnLCBkcmFmdClcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChpc0RyYWZ0KHN0YXRlKSkge1xyXG4gICAgICAvLyB3ZSBtdXN0IGFscmVhZHkgYmUgaW5zaWRlIGEgYGNyZWF0ZU5leHRTdGF0ZWAgY2FsbCwgbGlrZWx5IGJlY2F1c2VcclxuICAgICAgLy8gdGhpcyBpcyBiZWluZyB3cmFwcGVkIGluIGBjcmVhdGVSZWR1Y2VyYCBvciBgY3JlYXRlU2xpY2VgLlxyXG4gICAgICAvLyBJdCdzIHNhZmUgdG8ganVzdCBwYXNzIHRoZSBkcmFmdCB0byB0aGUgbXV0YXRvci5cclxuICAgICAgcnVuTXV0YXRvcihzdGF0ZSlcclxuXHJcbiAgICAgIC8vIHNpbmNlIGl0J3MgYSBkcmFmdCwgd2UnbGwganVzdCByZXR1cm4gaXRcclxuICAgICAgcmV0dXJuIHN0YXRlXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBAdHMtaWdub3JlIGNyZWF0ZU5leHRTdGF0ZSgpIHByb2R1Y2VzIGFuIEltbXV0YWJsZTxEcmFmdDxTPj4gcmF0aGVyXHJcbiAgICAgIC8vIHRoYW4gYW4gSW1tdXRhYmxlPFM+LCBhbmQgVHlwZVNjcmlwdCBjYW5ub3QgZmluZCBvdXQgaG93IHRvIHJlY29uY2lsZVxyXG4gICAgICAvLyB0aGVzZSB0d28gdHlwZXMuXHJcbiAgICAgIHJldHVybiBjcmVhdGVOZXh0U3RhdGUoc3RhdGUsIHJ1bk11dGF0b3IpXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsICJpbXBvcnQgdHlwZSB7IEVudGl0eVN0YXRlLCBJZFNlbGVjdG9yLCBVcGRhdGUsIEVudGl0eUlkIH0gZnJvbSAnLi9tb2RlbHMnXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2VsZWN0SWRWYWx1ZTxUPihlbnRpdHk6IFQsIHNlbGVjdElkOiBJZFNlbGVjdG9yPFQ+KSB7XHJcbiAgY29uc3Qga2V5ID0gc2VsZWN0SWQoZW50aXR5KVxyXG5cclxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBrZXkgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgY29uc29sZS53YXJuKFxyXG4gICAgICAnVGhlIGVudGl0eSBwYXNzZWQgdG8gdGhlIGBzZWxlY3RJZGAgaW1wbGVtZW50YXRpb24gcmV0dXJuZWQgdW5kZWZpbmVkLicsXHJcbiAgICAgICdZb3Ugc2hvdWxkIHByb2JhYmx5IHByb3ZpZGUgeW91ciBvd24gYHNlbGVjdElkYCBpbXBsZW1lbnRhdGlvbi4nLFxyXG4gICAgICAnVGhlIGVudGl0eSB0aGF0IHdhcyBwYXNzZWQ6JyxcclxuICAgICAgZW50aXR5LFxyXG4gICAgICAnVGhlIGBzZWxlY3RJZGAgaW1wbGVtZW50YXRpb246JyxcclxuICAgICAgc2VsZWN0SWQudG9TdHJpbmcoKVxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGtleVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlRW50aXRpZXNBcnJheTxUPihcclxuICBlbnRpdGllczogcmVhZG9ubHkgVFtdIHwgUmVjb3JkPEVudGl0eUlkLCBUPlxyXG4pOiByZWFkb25seSBUW10ge1xyXG4gIGlmICghQXJyYXkuaXNBcnJheShlbnRpdGllcykpIHtcclxuICAgIGVudGl0aWVzID0gT2JqZWN0LnZhbHVlcyhlbnRpdGllcylcclxuICB9XHJcblxyXG4gIHJldHVybiBlbnRpdGllc1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc3BsaXRBZGRlZFVwZGF0ZWRFbnRpdGllczxUPihcclxuICBuZXdFbnRpdGllczogcmVhZG9ubHkgVFtdIHwgUmVjb3JkPEVudGl0eUlkLCBUPixcclxuICBzZWxlY3RJZDogSWRTZWxlY3RvcjxUPixcclxuICBzdGF0ZTogRW50aXR5U3RhdGU8VD5cclxuKTogW1RbXSwgVXBkYXRlPFQ+W11dIHtcclxuICBuZXdFbnRpdGllcyA9IGVuc3VyZUVudGl0aWVzQXJyYXkobmV3RW50aXRpZXMpXHJcblxyXG4gIGNvbnN0IGFkZGVkOiBUW10gPSBbXVxyXG4gIGNvbnN0IHVwZGF0ZWQ6IFVwZGF0ZTxUPltdID0gW11cclxuXHJcbiAgZm9yIChjb25zdCBlbnRpdHkgb2YgbmV3RW50aXRpZXMpIHtcclxuICAgIGNvbnN0IGlkID0gc2VsZWN0SWRWYWx1ZShlbnRpdHksIHNlbGVjdElkKVxyXG4gICAgaWYgKGlkIGluIHN0YXRlLmVudGl0aWVzKSB7XHJcbiAgICAgIHVwZGF0ZWQucHVzaCh7IGlkLCBjaGFuZ2VzOiBlbnRpdHkgfSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGFkZGVkLnB1c2goZW50aXR5KVxyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gW2FkZGVkLCB1cGRhdGVkXVxyXG59XHJcbiIsICJpbXBvcnQgdHlwZSB7XHJcbiAgRW50aXR5U3RhdGUsXHJcbiAgRW50aXR5U3RhdGVBZGFwdGVyLFxyXG4gIElkU2VsZWN0b3IsXHJcbiAgVXBkYXRlLFxyXG4gIEVudGl0eUlkLFxyXG59IGZyb20gJy4vbW9kZWxzJ1xyXG5pbXBvcnQge1xyXG4gIGNyZWF0ZVN0YXRlT3BlcmF0b3IsXHJcbiAgY3JlYXRlU2luZ2xlQXJndW1lbnRTdGF0ZU9wZXJhdG9yLFxyXG59IGZyb20gJy4vc3RhdGVfYWRhcHRlcidcclxuaW1wb3J0IHtcclxuICBzZWxlY3RJZFZhbHVlLFxyXG4gIGVuc3VyZUVudGl0aWVzQXJyYXksXHJcbiAgc3BsaXRBZGRlZFVwZGF0ZWRFbnRpdGllcyxcclxufSBmcm9tICcuL3V0aWxzJ1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVVuc29ydGVkU3RhdGVBZGFwdGVyPFQ+KFxyXG4gIHNlbGVjdElkOiBJZFNlbGVjdG9yPFQ+XHJcbik6IEVudGl0eVN0YXRlQWRhcHRlcjxUPiB7XHJcbiAgdHlwZSBSID0gRW50aXR5U3RhdGU8VD5cclxuXHJcbiAgZnVuY3Rpb24gYWRkT25lTXV0YWJseShlbnRpdHk6IFQsIHN0YXRlOiBSKTogdm9pZCB7XHJcbiAgICBjb25zdCBrZXkgPSBzZWxlY3RJZFZhbHVlKGVudGl0eSwgc2VsZWN0SWQpXHJcblxyXG4gICAgaWYgKGtleSBpbiBzdGF0ZS5lbnRpdGllcykge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuXHJcbiAgICBzdGF0ZS5pZHMucHVzaChrZXkpXHJcbiAgICBzdGF0ZS5lbnRpdGllc1trZXldID0gZW50aXR5XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBhZGRNYW55TXV0YWJseShcclxuICAgIG5ld0VudGl0aWVzOiByZWFkb25seSBUW10gfCBSZWNvcmQ8RW50aXR5SWQsIFQ+LFxyXG4gICAgc3RhdGU6IFJcclxuICApOiB2b2lkIHtcclxuICAgIG5ld0VudGl0aWVzID0gZW5zdXJlRW50aXRpZXNBcnJheShuZXdFbnRpdGllcylcclxuXHJcbiAgICBmb3IgKGNvbnN0IGVudGl0eSBvZiBuZXdFbnRpdGllcykge1xyXG4gICAgICBhZGRPbmVNdXRhYmx5KGVudGl0eSwgc3RhdGUpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBzZXRPbmVNdXRhYmx5KGVudGl0eTogVCwgc3RhdGU6IFIpOiB2b2lkIHtcclxuICAgIGNvbnN0IGtleSA9IHNlbGVjdElkVmFsdWUoZW50aXR5LCBzZWxlY3RJZClcclxuICAgIGlmICghKGtleSBpbiBzdGF0ZS5lbnRpdGllcykpIHtcclxuICAgICAgc3RhdGUuaWRzLnB1c2goa2V5KVxyXG4gICAgfVxyXG4gICAgc3RhdGUuZW50aXRpZXNba2V5XSA9IGVudGl0eVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gc2V0TWFueU11dGFibHkoXHJcbiAgICBuZXdFbnRpdGllczogcmVhZG9ubHkgVFtdIHwgUmVjb3JkPEVudGl0eUlkLCBUPixcclxuICAgIHN0YXRlOiBSXHJcbiAgKTogdm9pZCB7XHJcbiAgICBuZXdFbnRpdGllcyA9IGVuc3VyZUVudGl0aWVzQXJyYXkobmV3RW50aXRpZXMpXHJcbiAgICBmb3IgKGNvbnN0IGVudGl0eSBvZiBuZXdFbnRpdGllcykge1xyXG4gICAgICBzZXRPbmVNdXRhYmx5KGVudGl0eSwgc3RhdGUpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBzZXRBbGxNdXRhYmx5KFxyXG4gICAgbmV3RW50aXRpZXM6IHJlYWRvbmx5IFRbXSB8IFJlY29yZDxFbnRpdHlJZCwgVD4sXHJcbiAgICBzdGF0ZTogUlxyXG4gICk6IHZvaWQge1xyXG4gICAgbmV3RW50aXRpZXMgPSBlbnN1cmVFbnRpdGllc0FycmF5KG5ld0VudGl0aWVzKVxyXG5cclxuICAgIHN0YXRlLmlkcyA9IFtdXHJcbiAgICBzdGF0ZS5lbnRpdGllcyA9IHt9XHJcblxyXG4gICAgYWRkTWFueU11dGFibHkobmV3RW50aXRpZXMsIHN0YXRlKVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gcmVtb3ZlT25lTXV0YWJseShrZXk6IEVudGl0eUlkLCBzdGF0ZTogUik6IHZvaWQge1xyXG4gICAgcmV0dXJuIHJlbW92ZU1hbnlNdXRhYmx5KFtrZXldLCBzdGF0ZSlcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHJlbW92ZU1hbnlNdXRhYmx5KGtleXM6IHJlYWRvbmx5IEVudGl0eUlkW10sIHN0YXRlOiBSKTogdm9pZCB7XHJcbiAgICBsZXQgZGlkTXV0YXRlID0gZmFsc2VcclxuXHJcbiAgICBrZXlzLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICBpZiAoa2V5IGluIHN0YXRlLmVudGl0aWVzKSB7XHJcbiAgICAgICAgZGVsZXRlIHN0YXRlLmVudGl0aWVzW2tleV1cclxuICAgICAgICBkaWRNdXRhdGUgPSB0cnVlXHJcbiAgICAgIH1cclxuICAgIH0pXHJcblxyXG4gICAgaWYgKGRpZE11dGF0ZSkge1xyXG4gICAgICBzdGF0ZS5pZHMgPSBzdGF0ZS5pZHMuZmlsdGVyKChpZCkgPT4gaWQgaW4gc3RhdGUuZW50aXRpZXMpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiByZW1vdmVBbGxNdXRhYmx5KHN0YXRlOiBSKTogdm9pZCB7XHJcbiAgICBPYmplY3QuYXNzaWduKHN0YXRlLCB7XHJcbiAgICAgIGlkczogW10sXHJcbiAgICAgIGVudGl0aWVzOiB7fSxcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiB0YWtlTmV3S2V5KFxyXG4gICAga2V5czogeyBbaWQ6IHN0cmluZ106IEVudGl0eUlkIH0sXHJcbiAgICB1cGRhdGU6IFVwZGF0ZTxUPixcclxuICAgIHN0YXRlOiBSXHJcbiAgKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBvcmlnaW5hbCA9IHN0YXRlLmVudGl0aWVzW3VwZGF0ZS5pZF1cclxuICAgIGNvbnN0IHVwZGF0ZWQ6IFQgPSBPYmplY3QuYXNzaWduKHt9LCBvcmlnaW5hbCwgdXBkYXRlLmNoYW5nZXMpXHJcbiAgICBjb25zdCBuZXdLZXkgPSBzZWxlY3RJZFZhbHVlKHVwZGF0ZWQsIHNlbGVjdElkKVxyXG4gICAgY29uc3QgaGFzTmV3S2V5ID0gbmV3S2V5ICE9PSB1cGRhdGUuaWRcclxuXHJcbiAgICBpZiAoaGFzTmV3S2V5KSB7XHJcbiAgICAgIGtleXNbdXBkYXRlLmlkXSA9IG5ld0tleVxyXG4gICAgICBkZWxldGUgc3RhdGUuZW50aXRpZXNbdXBkYXRlLmlkXVxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRlLmVudGl0aWVzW25ld0tleV0gPSB1cGRhdGVkXHJcblxyXG4gICAgcmV0dXJuIGhhc05ld0tleVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gdXBkYXRlT25lTXV0YWJseSh1cGRhdGU6IFVwZGF0ZTxUPiwgc3RhdGU6IFIpOiB2b2lkIHtcclxuICAgIHJldHVybiB1cGRhdGVNYW55TXV0YWJseShbdXBkYXRlXSwgc3RhdGUpXHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiB1cGRhdGVNYW55TXV0YWJseShcclxuICAgIHVwZGF0ZXM6IFJlYWRvbmx5QXJyYXk8VXBkYXRlPFQ+PixcclxuICAgIHN0YXRlOiBSXHJcbiAgKTogdm9pZCB7XHJcbiAgICBjb25zdCBuZXdLZXlzOiB7IFtpZDogc3RyaW5nXTogRW50aXR5SWQgfSA9IHt9XHJcblxyXG4gICAgY29uc3QgdXBkYXRlc1BlckVudGl0eTogeyBbaWQ6IHN0cmluZ106IFVwZGF0ZTxUPiB9ID0ge31cclxuXHJcbiAgICB1cGRhdGVzLmZvckVhY2goKHVwZGF0ZSkgPT4ge1xyXG4gICAgICAvLyBPbmx5IGFwcGx5IHVwZGF0ZXMgdG8gZW50aXRpZXMgdGhhdCBjdXJyZW50bHkgZXhpc3RcclxuICAgICAgaWYgKHVwZGF0ZS5pZCBpbiBzdGF0ZS5lbnRpdGllcykge1xyXG4gICAgICAgIC8vIElmIHRoZXJlIGFyZSBtdWx0aXBsZSB1cGRhdGVzIHRvIG9uZSBlbnRpdHksIG1lcmdlIHRoZW0gdG9nZXRoZXJcclxuICAgICAgICB1cGRhdGVzUGVyRW50aXR5W3VwZGF0ZS5pZF0gPSB7XHJcbiAgICAgICAgICBpZDogdXBkYXRlLmlkLFxyXG4gICAgICAgICAgLy8gU3ByZWFkcyBpZ25vcmUgZmFsc3kgdmFsdWVzLCBzbyB0aGlzIHdvcmtzIGV2ZW4gaWYgdGhlcmUgaXNuJ3RcclxuICAgICAgICAgIC8vIGFuIGV4aXN0aW5nIHVwZGF0ZSBhbHJlYWR5IGF0IHRoaXMga2V5XHJcbiAgICAgICAgICBjaGFuZ2VzOiB7XHJcbiAgICAgICAgICAgIC4uLih1cGRhdGVzUGVyRW50aXR5W3VwZGF0ZS5pZF1cclxuICAgICAgICAgICAgICA/IHVwZGF0ZXNQZXJFbnRpdHlbdXBkYXRlLmlkXS5jaGFuZ2VzXHJcbiAgICAgICAgICAgICAgOiBudWxsKSxcclxuICAgICAgICAgICAgLi4udXBkYXRlLmNoYW5nZXMsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSlcclxuXHJcbiAgICB1cGRhdGVzID0gT2JqZWN0LnZhbHVlcyh1cGRhdGVzUGVyRW50aXR5KVxyXG5cclxuICAgIGNvbnN0IGRpZE11dGF0ZUVudGl0aWVzID0gdXBkYXRlcy5sZW5ndGggPiAwXHJcblxyXG4gICAgaWYgKGRpZE11dGF0ZUVudGl0aWVzKSB7XHJcbiAgICAgIGNvbnN0IGRpZE11dGF0ZUlkcyA9XHJcbiAgICAgICAgdXBkYXRlcy5maWx0ZXIoKHVwZGF0ZSkgPT4gdGFrZU5ld0tleShuZXdLZXlzLCB1cGRhdGUsIHN0YXRlKSkubGVuZ3RoID5cclxuICAgICAgICAwXHJcblxyXG4gICAgICBpZiAoZGlkTXV0YXRlSWRzKSB7XHJcbiAgICAgICAgc3RhdGUuaWRzID0gT2JqZWN0LmtleXMoc3RhdGUuZW50aXRpZXMpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHVwc2VydE9uZU11dGFibHkoZW50aXR5OiBULCBzdGF0ZTogUik6IHZvaWQge1xyXG4gICAgcmV0dXJuIHVwc2VydE1hbnlNdXRhYmx5KFtlbnRpdHldLCBzdGF0ZSlcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHVwc2VydE1hbnlNdXRhYmx5KFxyXG4gICAgbmV3RW50aXRpZXM6IHJlYWRvbmx5IFRbXSB8IFJlY29yZDxFbnRpdHlJZCwgVD4sXHJcbiAgICBzdGF0ZTogUlxyXG4gICk6IHZvaWQge1xyXG4gICAgY29uc3QgW2FkZGVkLCB1cGRhdGVkXSA9IHNwbGl0QWRkZWRVcGRhdGVkRW50aXRpZXM8VD4oXHJcbiAgICAgIG5ld0VudGl0aWVzLFxyXG4gICAgICBzZWxlY3RJZCxcclxuICAgICAgc3RhdGVcclxuICAgIClcclxuXHJcbiAgICB1cGRhdGVNYW55TXV0YWJseSh1cGRhdGVkLCBzdGF0ZSlcclxuICAgIGFkZE1hbnlNdXRhYmx5KGFkZGVkLCBzdGF0ZSlcclxuICB9XHJcblxyXG4gIHJldHVybiB7XHJcbiAgICByZW1vdmVBbGw6IGNyZWF0ZVNpbmdsZUFyZ3VtZW50U3RhdGVPcGVyYXRvcihyZW1vdmVBbGxNdXRhYmx5KSxcclxuICAgIGFkZE9uZTogY3JlYXRlU3RhdGVPcGVyYXRvcihhZGRPbmVNdXRhYmx5KSxcclxuICAgIGFkZE1hbnk6IGNyZWF0ZVN0YXRlT3BlcmF0b3IoYWRkTWFueU11dGFibHkpLFxyXG4gICAgc2V0T25lOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHNldE9uZU11dGFibHkpLFxyXG4gICAgc2V0TWFueTogY3JlYXRlU3RhdGVPcGVyYXRvcihzZXRNYW55TXV0YWJseSksXHJcbiAgICBzZXRBbGw6IGNyZWF0ZVN0YXRlT3BlcmF0b3Ioc2V0QWxsTXV0YWJseSksXHJcbiAgICB1cGRhdGVPbmU6IGNyZWF0ZVN0YXRlT3BlcmF0b3IodXBkYXRlT25lTXV0YWJseSksXHJcbiAgICB1cGRhdGVNYW55OiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHVwZGF0ZU1hbnlNdXRhYmx5KSxcclxuICAgIHVwc2VydE9uZTogY3JlYXRlU3RhdGVPcGVyYXRvcih1cHNlcnRPbmVNdXRhYmx5KSxcclxuICAgIHVwc2VydE1hbnk6IGNyZWF0ZVN0YXRlT3BlcmF0b3IodXBzZXJ0TWFueU11dGFibHkpLFxyXG4gICAgcmVtb3ZlT25lOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHJlbW92ZU9uZU11dGFibHkpLFxyXG4gICAgcmVtb3ZlTWFueTogY3JlYXRlU3RhdGVPcGVyYXRvcihyZW1vdmVNYW55TXV0YWJseSksXHJcbiAgfVxyXG59XHJcbiIsICJpbXBvcnQgdHlwZSB7XHJcbiAgRW50aXR5U3RhdGUsXHJcbiAgSWRTZWxlY3RvcixcclxuICBDb21wYXJlcixcclxuICBFbnRpdHlTdGF0ZUFkYXB0ZXIsXHJcbiAgVXBkYXRlLFxyXG4gIEVudGl0eUlkLFxyXG59IGZyb20gJy4vbW9kZWxzJ1xyXG5pbXBvcnQgeyBjcmVhdGVTdGF0ZU9wZXJhdG9yIH0gZnJvbSAnLi9zdGF0ZV9hZGFwdGVyJ1xyXG5pbXBvcnQgeyBjcmVhdGVVbnNvcnRlZFN0YXRlQWRhcHRlciB9IGZyb20gJy4vdW5zb3J0ZWRfc3RhdGVfYWRhcHRlcidcclxuaW1wb3J0IHtcclxuICBzZWxlY3RJZFZhbHVlLFxyXG4gIGVuc3VyZUVudGl0aWVzQXJyYXksXHJcbiAgc3BsaXRBZGRlZFVwZGF0ZWRFbnRpdGllcyxcclxufSBmcm9tICcuL3V0aWxzJ1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNvcnRlZFN0YXRlQWRhcHRlcjxUPihcclxuICBzZWxlY3RJZDogSWRTZWxlY3RvcjxUPixcclxuICBzb3J0OiBDb21wYXJlcjxUPlxyXG4pOiBFbnRpdHlTdGF0ZUFkYXB0ZXI8VD4ge1xyXG4gIHR5cGUgUiA9IEVudGl0eVN0YXRlPFQ+XHJcblxyXG4gIGNvbnN0IHsgcmVtb3ZlT25lLCByZW1vdmVNYW55LCByZW1vdmVBbGwgfSA9XHJcbiAgICBjcmVhdGVVbnNvcnRlZFN0YXRlQWRhcHRlcihzZWxlY3RJZClcclxuXHJcbiAgZnVuY3Rpb24gYWRkT25lTXV0YWJseShlbnRpdHk6IFQsIHN0YXRlOiBSKTogdm9pZCB7XHJcbiAgICByZXR1cm4gYWRkTWFueU11dGFibHkoW2VudGl0eV0sIHN0YXRlKVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gYWRkTWFueU11dGFibHkoXHJcbiAgICBuZXdFbnRpdGllczogcmVhZG9ubHkgVFtdIHwgUmVjb3JkPEVudGl0eUlkLCBUPixcclxuICAgIHN0YXRlOiBSXHJcbiAgKTogdm9pZCB7XHJcbiAgICBuZXdFbnRpdGllcyA9IGVuc3VyZUVudGl0aWVzQXJyYXkobmV3RW50aXRpZXMpXHJcblxyXG4gICAgY29uc3QgbW9kZWxzID0gbmV3RW50aXRpZXMuZmlsdGVyKFxyXG4gICAgICAobW9kZWwpID0+ICEoc2VsZWN0SWRWYWx1ZShtb2RlbCwgc2VsZWN0SWQpIGluIHN0YXRlLmVudGl0aWVzKVxyXG4gICAgKVxyXG5cclxuICAgIGlmIChtb2RlbHMubGVuZ3RoICE9PSAwKSB7XHJcbiAgICAgIG1lcmdlKG1vZGVscywgc3RhdGUpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBzZXRPbmVNdXRhYmx5KGVudGl0eTogVCwgc3RhdGU6IFIpOiB2b2lkIHtcclxuICAgIHJldHVybiBzZXRNYW55TXV0YWJseShbZW50aXR5XSwgc3RhdGUpXHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBzZXRNYW55TXV0YWJseShcclxuICAgIG5ld0VudGl0aWVzOiByZWFkb25seSBUW10gfCBSZWNvcmQ8RW50aXR5SWQsIFQ+LFxyXG4gICAgc3RhdGU6IFJcclxuICApOiB2b2lkIHtcclxuICAgIG5ld0VudGl0aWVzID0gZW5zdXJlRW50aXRpZXNBcnJheShuZXdFbnRpdGllcylcclxuICAgIGlmIChuZXdFbnRpdGllcy5sZW5ndGggIT09IDApIHtcclxuICAgICAgbWVyZ2UobmV3RW50aXRpZXMsIHN0YXRlKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gc2V0QWxsTXV0YWJseShcclxuICAgIG5ld0VudGl0aWVzOiByZWFkb25seSBUW10gfCBSZWNvcmQ8RW50aXR5SWQsIFQ+LFxyXG4gICAgc3RhdGU6IFJcclxuICApOiB2b2lkIHtcclxuICAgIG5ld0VudGl0aWVzID0gZW5zdXJlRW50aXRpZXNBcnJheShuZXdFbnRpdGllcylcclxuICAgIHN0YXRlLmVudGl0aWVzID0ge31cclxuICAgIHN0YXRlLmlkcyA9IFtdXHJcblxyXG4gICAgYWRkTWFueU11dGFibHkobmV3RW50aXRpZXMsIHN0YXRlKVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gdXBkYXRlT25lTXV0YWJseSh1cGRhdGU6IFVwZGF0ZTxUPiwgc3RhdGU6IFIpOiB2b2lkIHtcclxuICAgIHJldHVybiB1cGRhdGVNYW55TXV0YWJseShbdXBkYXRlXSwgc3RhdGUpXHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiB1cGRhdGVNYW55TXV0YWJseShcclxuICAgIHVwZGF0ZXM6IFJlYWRvbmx5QXJyYXk8VXBkYXRlPFQ+PixcclxuICAgIHN0YXRlOiBSXHJcbiAgKTogdm9pZCB7XHJcbiAgICBsZXQgYXBwbGllZFVwZGF0ZXMgPSBmYWxzZVxyXG5cclxuICAgIGZvciAobGV0IHVwZGF0ZSBvZiB1cGRhdGVzKSB7XHJcbiAgICAgIGNvbnN0IGVudGl0eSA9IHN0YXRlLmVudGl0aWVzW3VwZGF0ZS5pZF1cclxuICAgICAgaWYgKCFlbnRpdHkpIHtcclxuICAgICAgICBjb250aW51ZVxyXG4gICAgICB9XHJcblxyXG4gICAgICBhcHBsaWVkVXBkYXRlcyA9IHRydWVcclxuXHJcbiAgICAgIE9iamVjdC5hc3NpZ24oZW50aXR5LCB1cGRhdGUuY2hhbmdlcylcclxuICAgICAgY29uc3QgbmV3SWQgPSBzZWxlY3RJZChlbnRpdHkpXHJcbiAgICAgIGlmICh1cGRhdGUuaWQgIT09IG5ld0lkKSB7XHJcbiAgICAgICAgZGVsZXRlIHN0YXRlLmVudGl0aWVzW3VwZGF0ZS5pZF1cclxuICAgICAgICBzdGF0ZS5lbnRpdGllc1tuZXdJZF0gPSBlbnRpdHlcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChhcHBsaWVkVXBkYXRlcykge1xyXG4gICAgICByZXNvcnRFbnRpdGllcyhzdGF0ZSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHVwc2VydE9uZU11dGFibHkoZW50aXR5OiBULCBzdGF0ZTogUik6IHZvaWQge1xyXG4gICAgcmV0dXJuIHVwc2VydE1hbnlNdXRhYmx5KFtlbnRpdHldLCBzdGF0ZSlcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHVwc2VydE1hbnlNdXRhYmx5KFxyXG4gICAgbmV3RW50aXRpZXM6IHJlYWRvbmx5IFRbXSB8IFJlY29yZDxFbnRpdHlJZCwgVD4sXHJcbiAgICBzdGF0ZTogUlxyXG4gICk6IHZvaWQge1xyXG4gICAgY29uc3QgW2FkZGVkLCB1cGRhdGVkXSA9IHNwbGl0QWRkZWRVcGRhdGVkRW50aXRpZXM8VD4oXHJcbiAgICAgIG5ld0VudGl0aWVzLFxyXG4gICAgICBzZWxlY3RJZCxcclxuICAgICAgc3RhdGVcclxuICAgIClcclxuXHJcbiAgICB1cGRhdGVNYW55TXV0YWJseSh1cGRhdGVkLCBzdGF0ZSlcclxuICAgIGFkZE1hbnlNdXRhYmx5KGFkZGVkLCBzdGF0ZSlcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGFyZUFycmF5c0VxdWFsKGE6IHJlYWRvbmx5IHVua25vd25bXSwgYjogcmVhZG9ubHkgdW5rbm93bltdKSB7XHJcbiAgICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYS5sZW5ndGggJiYgaSA8IGIubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKGFbaV0gPT09IGJbaV0pIHtcclxuICAgICAgICBjb250aW51ZVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWVcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIG1lcmdlKG1vZGVsczogcmVhZG9ubHkgVFtdLCBzdGF0ZTogUik6IHZvaWQge1xyXG4gICAgLy8gSW5zZXJ0L292ZXJ3cml0ZSBhbGwgbmV3L3VwZGF0ZWRcclxuICAgIG1vZGVscy5mb3JFYWNoKChtb2RlbCkgPT4ge1xyXG4gICAgICBzdGF0ZS5lbnRpdGllc1tzZWxlY3RJZChtb2RlbCldID0gbW9kZWxcclxuICAgIH0pXHJcblxyXG4gICAgcmVzb3J0RW50aXRpZXMoc3RhdGUpXHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiByZXNvcnRFbnRpdGllcyhzdGF0ZTogUikge1xyXG4gICAgY29uc3QgYWxsRW50aXRpZXMgPSBPYmplY3QudmFsdWVzKHN0YXRlLmVudGl0aWVzKSBhcyBUW11cclxuICAgIGFsbEVudGl0aWVzLnNvcnQoc29ydClcclxuXHJcbiAgICBjb25zdCBuZXdTb3J0ZWRJZHMgPSBhbGxFbnRpdGllcy5tYXAoc2VsZWN0SWQpXHJcbiAgICBjb25zdCB7IGlkcyB9ID0gc3RhdGVcclxuXHJcbiAgICBpZiAoIWFyZUFycmF5c0VxdWFsKGlkcywgbmV3U29ydGVkSWRzKSkge1xyXG4gICAgICBzdGF0ZS5pZHMgPSBuZXdTb3J0ZWRJZHNcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybiB7XHJcbiAgICByZW1vdmVPbmUsXHJcbiAgICByZW1vdmVNYW55LFxyXG4gICAgcmVtb3ZlQWxsLFxyXG4gICAgYWRkT25lOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKGFkZE9uZU11dGFibHkpLFxyXG4gICAgdXBkYXRlT25lOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHVwZGF0ZU9uZU11dGFibHkpLFxyXG4gICAgdXBzZXJ0T25lOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHVwc2VydE9uZU11dGFibHkpLFxyXG4gICAgc2V0T25lOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHNldE9uZU11dGFibHkpLFxyXG4gICAgc2V0TWFueTogY3JlYXRlU3RhdGVPcGVyYXRvcihzZXRNYW55TXV0YWJseSksXHJcbiAgICBzZXRBbGw6IGNyZWF0ZVN0YXRlT3BlcmF0b3Ioc2V0QWxsTXV0YWJseSksXHJcbiAgICBhZGRNYW55OiBjcmVhdGVTdGF0ZU9wZXJhdG9yKGFkZE1hbnlNdXRhYmx5KSxcclxuICAgIHVwZGF0ZU1hbnk6IGNyZWF0ZVN0YXRlT3BlcmF0b3IodXBkYXRlTWFueU11dGFibHkpLFxyXG4gICAgdXBzZXJ0TWFueTogY3JlYXRlU3RhdGVPcGVyYXRvcih1cHNlcnRNYW55TXV0YWJseSksXHJcbiAgfVxyXG59XHJcbiIsICJpbXBvcnQgdHlwZSB7XHJcbiAgRW50aXR5RGVmaW5pdGlvbixcclxuICBDb21wYXJlcixcclxuICBJZFNlbGVjdG9yLFxyXG4gIEVudGl0eUFkYXB0ZXIsXHJcbn0gZnJvbSAnLi9tb2RlbHMnXHJcbmltcG9ydCB7IGNyZWF0ZUluaXRpYWxTdGF0ZUZhY3RvcnkgfSBmcm9tICcuL2VudGl0eV9zdGF0ZSdcclxuaW1wb3J0IHsgY3JlYXRlU2VsZWN0b3JzRmFjdG9yeSB9IGZyb20gJy4vc3RhdGVfc2VsZWN0b3JzJ1xyXG5pbXBvcnQgeyBjcmVhdGVTb3J0ZWRTdGF0ZUFkYXB0ZXIgfSBmcm9tICcuL3NvcnRlZF9zdGF0ZV9hZGFwdGVyJ1xyXG5pbXBvcnQgeyBjcmVhdGVVbnNvcnRlZFN0YXRlQWRhcHRlciB9IGZyb20gJy4vdW5zb3J0ZWRfc3RhdGVfYWRhcHRlcidcclxuXHJcbi8qKlxyXG4gKlxyXG4gKiBAcGFyYW0gb3B0aW9uc1xyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRW50aXR5QWRhcHRlcjxUPihcclxuICBvcHRpb25zOiB7XHJcbiAgICBzZWxlY3RJZD86IElkU2VsZWN0b3I8VD5cclxuICAgIHNvcnRDb21wYXJlcj86IGZhbHNlIHwgQ29tcGFyZXI8VD5cclxuICB9ID0ge31cclxuKTogRW50aXR5QWRhcHRlcjxUPiB7XHJcbiAgY29uc3QgeyBzZWxlY3RJZCwgc29ydENvbXBhcmVyIH06IEVudGl0eURlZmluaXRpb248VD4gPSB7XHJcbiAgICBzb3J0Q29tcGFyZXI6IGZhbHNlLFxyXG4gICAgc2VsZWN0SWQ6IChpbnN0YW5jZTogYW55KSA9PiBpbnN0YW5jZS5pZCxcclxuICAgIC4uLm9wdGlvbnMsXHJcbiAgfVxyXG5cclxuICBjb25zdCBzdGF0ZUZhY3RvcnkgPSBjcmVhdGVJbml0aWFsU3RhdGVGYWN0b3J5PFQ+KClcclxuICBjb25zdCBzZWxlY3RvcnNGYWN0b3J5ID0gY3JlYXRlU2VsZWN0b3JzRmFjdG9yeTxUPigpXHJcbiAgY29uc3Qgc3RhdGVBZGFwdGVyID0gc29ydENvbXBhcmVyXHJcbiAgICA/IGNyZWF0ZVNvcnRlZFN0YXRlQWRhcHRlcihzZWxlY3RJZCwgc29ydENvbXBhcmVyKVxyXG4gICAgOiBjcmVhdGVVbnNvcnRlZFN0YXRlQWRhcHRlcihzZWxlY3RJZClcclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIHNlbGVjdElkLFxyXG4gICAgc29ydENvbXBhcmVyLFxyXG4gICAgLi4uc3RhdGVGYWN0b3J5LFxyXG4gICAgLi4uc2VsZWN0b3JzRmFjdG9yeSxcclxuICAgIC4uLnN0YXRlQWRhcHRlcixcclxuICB9XHJcbn1cclxuIiwgIi8vIEJvcnJvd2VkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2FpL25hbm9pZC9ibG9iLzMuMC4yL25vbi1zZWN1cmUvaW5kZXguanNcclxuLy8gVGhpcyBhbHBoYWJldCB1c2VzIGBBLVphLXowLTlfLWAgc3ltYm9scy4gQSBnZW5ldGljIGFsZ29yaXRobSBoZWxwZWRcclxuLy8gb3B0aW1pemUgdGhlIGd6aXAgY29tcHJlc3Npb24gZm9yIHRoaXMgYWxwaGFiZXQuXHJcbmxldCB1cmxBbHBoYWJldCA9XHJcbiAgJ01vZHVsZVN5bWJoYXNPd25Qci0wMTIzNDU2Nzg5QUJDREVGR0hOUlZmZ2N0aVV2el9LcVlUSmtMeHBaWElqUVcnXHJcblxyXG4vKipcclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGxldCBuYW5vaWQgPSAoc2l6ZSA9IDIxKSA9PiB7XHJcbiAgbGV0IGlkID0gJydcclxuICAvLyBBIGNvbXBhY3QgYWx0ZXJuYXRpdmUgZm9yIGBmb3IgKHZhciBpID0gMDsgaSA8IHN0ZXA7IGkrKylgLlxyXG4gIGxldCBpID0gc2l6ZVxyXG4gIHdoaWxlIChpLS0pIHtcclxuICAgIC8vIGB8IDBgIGlzIG1vcmUgY29tcGFjdCBhbmQgZmFzdGVyIHRoYW4gYE1hdGguZmxvb3IoKWAuXHJcbiAgICBpZCArPSB1cmxBbHBoYWJldFsoTWF0aC5yYW5kb20oKSAqIDY0KSB8IDBdXHJcbiAgfVxyXG4gIHJldHVybiBpZFxyXG59XHJcbiIsICJpbXBvcnQgdHlwZSB7IERpc3BhdGNoLCBBbnlBY3Rpb24gfSBmcm9tICdyZWR1eCdcclxuaW1wb3J0IHR5cGUge1xyXG4gIFBheWxvYWRBY3Rpb24sXHJcbiAgQWN0aW9uQ3JlYXRvcldpdGhQcmVwYXJlZFBheWxvYWQsXHJcbn0gZnJvbSAnLi9jcmVhdGVBY3Rpb24nXHJcbmltcG9ydCB7IGNyZWF0ZUFjdGlvbiB9IGZyb20gJy4vY3JlYXRlQWN0aW9uJ1xyXG5pbXBvcnQgdHlwZSB7IFRodW5rRGlzcGF0Y2ggfSBmcm9tICdyZWR1eC10aHVuaydcclxuaW1wb3J0IHR5cGUgeyBGYWxsYmFja0lmVW5rbm93biwgSWQsIElzQW55LCBJc1Vua25vd24gfSBmcm9tICcuL3RzSGVscGVycydcclxuaW1wb3J0IHsgbmFub2lkIH0gZnJvbSAnLi9uYW5vaWQnXHJcblxyXG4vLyBAdHMtaWdub3JlIHdlIG5lZWQgdGhlIGltcG9ydCBvZiB0aGVzZSB0eXBlcyBkdWUgdG8gYSBidW5kbGluZyBpc3N1ZS5cclxudHlwZSBfS2VlcCA9IFBheWxvYWRBY3Rpb24gfCBBY3Rpb25DcmVhdG9yV2l0aFByZXBhcmVkUGF5bG9hZDxhbnksIHVua25vd24+XHJcblxyXG5leHBvcnQgdHlwZSBCYXNlVGh1bmtBUEk8XHJcbiAgUyxcclxuICBFLFxyXG4gIEQgZXh0ZW5kcyBEaXNwYXRjaCA9IERpc3BhdGNoLFxyXG4gIFJlamVjdGVkVmFsdWUgPSB1bmtub3duLFxyXG4gIFJlamVjdGVkTWV0YSA9IHVua25vd24sXHJcbiAgRnVsZmlsbGVkTWV0YSA9IHVua25vd25cclxuPiA9IHtcclxuICBkaXNwYXRjaDogRFxyXG4gIGdldFN0YXRlOiAoKSA9PiBTXHJcbiAgZXh0cmE6IEVcclxuICByZXF1ZXN0SWQ6IHN0cmluZ1xyXG4gIHNpZ25hbDogQWJvcnRTaWduYWxcclxuICBhYm9ydDogKHJlYXNvbj86IHN0cmluZykgPT4gdm9pZFxyXG4gIHJlamVjdFdpdGhWYWx1ZTogSXNVbmtub3duPFxyXG4gICAgUmVqZWN0ZWRNZXRhLFxyXG4gICAgKHZhbHVlOiBSZWplY3RlZFZhbHVlKSA9PiBSZWplY3RXaXRoVmFsdWU8UmVqZWN0ZWRWYWx1ZSwgUmVqZWN0ZWRNZXRhPixcclxuICAgIChcclxuICAgICAgdmFsdWU6IFJlamVjdGVkVmFsdWUsXHJcbiAgICAgIG1ldGE6IFJlamVjdGVkTWV0YVxyXG4gICAgKSA9PiBSZWplY3RXaXRoVmFsdWU8UmVqZWN0ZWRWYWx1ZSwgUmVqZWN0ZWRNZXRhPlxyXG4gID5cclxuICBmdWxmaWxsV2l0aFZhbHVlOiBJc1Vua25vd248XHJcbiAgICBGdWxmaWxsZWRNZXRhLFxyXG4gICAgPEZ1bGZpbGxlZFZhbHVlPih2YWx1ZTogRnVsZmlsbGVkVmFsdWUpID0+IEZ1bGZpbGxlZFZhbHVlLFxyXG4gICAgPEZ1bGZpbGxlZFZhbHVlPihcclxuICAgICAgdmFsdWU6IEZ1bGZpbGxlZFZhbHVlLFxyXG4gICAgICBtZXRhOiBGdWxmaWxsZWRNZXRhXHJcbiAgICApID0+IEZ1bGZpbGxXaXRoTWV0YTxGdWxmaWxsZWRWYWx1ZSwgRnVsZmlsbGVkTWV0YT5cclxuICA+XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFNlcmlhbGl6ZWRFcnJvciB7XHJcbiAgbmFtZT86IHN0cmluZ1xyXG4gIG1lc3NhZ2U/OiBzdHJpbmdcclxuICBzdGFjaz86IHN0cmluZ1xyXG4gIGNvZGU/OiBzdHJpbmdcclxufVxyXG5cclxuY29uc3QgY29tbW9uUHJvcGVydGllczogQXJyYXk8a2V5b2YgU2VyaWFsaXplZEVycm9yPiA9IFtcclxuICAnbmFtZScsXHJcbiAgJ21lc3NhZ2UnLFxyXG4gICdzdGFjaycsXHJcbiAgJ2NvZGUnLFxyXG5dXHJcblxyXG5jbGFzcyBSZWplY3RXaXRoVmFsdWU8UGF5bG9hZCwgUmVqZWN0ZWRNZXRhPiB7XHJcbiAgLypcclxuICB0eXBlLW9ubHkgcHJvcGVydHkgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBSZWplY3RXaXRoVmFsdWUgYW5kIEZ1bGZpbGxXaXRoTWV0YVxyXG4gIGRvZXMgbm90IGV4aXN0IGF0IHJ1bnRpbWVcclxuICAqL1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX3R5cGUhOiAnUmVqZWN0V2l0aFZhbHVlJ1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIHJlYWRvbmx5IHBheWxvYWQ6IFBheWxvYWQsXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgbWV0YTogUmVqZWN0ZWRNZXRhXHJcbiAgKSB7fVxyXG59XHJcblxyXG5jbGFzcyBGdWxmaWxsV2l0aE1ldGE8UGF5bG9hZCwgRnVsZmlsbGVkTWV0YT4ge1xyXG4gIC8qXHJcbiAgdHlwZS1vbmx5IHByb3BlcnR5IHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gUmVqZWN0V2l0aFZhbHVlIGFuZCBGdWxmaWxsV2l0aE1ldGFcclxuICBkb2VzIG5vdCBleGlzdCBhdCBydW50aW1lXHJcbiAgKi9cclxuICBwcml2YXRlIHJlYWRvbmx5IF90eXBlITogJ0Z1bGZpbGxXaXRoTWV0YSdcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyByZWFkb25seSBwYXlsb2FkOiBQYXlsb2FkLFxyXG4gICAgcHVibGljIHJlYWRvbmx5IG1ldGE6IEZ1bGZpbGxlZE1ldGFcclxuICApIHt9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBTZXJpYWxpemVzIGFuIGVycm9yIGludG8gYSBwbGFpbiBvYmplY3QuXHJcbiAqIFJld29ya2VkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9zZXJpYWxpemUtZXJyb3JcclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IG1pbmlTZXJpYWxpemVFcnJvciA9ICh2YWx1ZTogYW55KTogU2VyaWFsaXplZEVycm9yID0+IHtcclxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCkge1xyXG4gICAgY29uc3Qgc2ltcGxlRXJyb3I6IFNlcmlhbGl6ZWRFcnJvciA9IHt9XHJcbiAgICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIGNvbW1vblByb3BlcnRpZXMpIHtcclxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZVtwcm9wZXJ0eV0gPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgc2ltcGxlRXJyb3JbcHJvcGVydHldID0gdmFsdWVbcHJvcGVydHldXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gc2ltcGxlRXJyb3JcclxuICB9XHJcblxyXG4gIHJldHVybiB7IG1lc3NhZ2U6IFN0cmluZyh2YWx1ZSkgfVxyXG59XHJcblxyXG50eXBlIEFzeW5jVGh1bmtDb25maWcgPSB7XHJcbiAgc3RhdGU/OiB1bmtub3duXHJcbiAgZGlzcGF0Y2g/OiBEaXNwYXRjaFxyXG4gIGV4dHJhPzogdW5rbm93blxyXG4gIHJlamVjdFZhbHVlPzogdW5rbm93blxyXG4gIHNlcmlhbGl6ZWRFcnJvclR5cGU/OiB1bmtub3duXHJcbiAgcGVuZGluZ01ldGE/OiB1bmtub3duXHJcbiAgZnVsZmlsbGVkTWV0YT86IHVua25vd25cclxuICByZWplY3RlZE1ldGE/OiB1bmtub3duXHJcbn1cclxuXHJcbnR5cGUgR2V0U3RhdGU8VGh1bmtBcGlDb25maWc+ID0gVGh1bmtBcGlDb25maWcgZXh0ZW5kcyB7XHJcbiAgc3RhdGU6IGluZmVyIFN0YXRlXHJcbn1cclxuICA/IFN0YXRlXHJcbiAgOiB1bmtub3duXHJcbnR5cGUgR2V0RXh0cmE8VGh1bmtBcGlDb25maWc+ID0gVGh1bmtBcGlDb25maWcgZXh0ZW5kcyB7IGV4dHJhOiBpbmZlciBFeHRyYSB9XHJcbiAgPyBFeHRyYVxyXG4gIDogdW5rbm93blxyXG50eXBlIEdldERpc3BhdGNoPFRodW5rQXBpQ29uZmlnPiA9IFRodW5rQXBpQ29uZmlnIGV4dGVuZHMge1xyXG4gIGRpc3BhdGNoOiBpbmZlciBEaXNwYXRjaFxyXG59XHJcbiAgPyBGYWxsYmFja0lmVW5rbm93bjxcclxuICAgICAgRGlzcGF0Y2gsXHJcbiAgICAgIFRodW5rRGlzcGF0Y2g8XHJcbiAgICAgICAgR2V0U3RhdGU8VGh1bmtBcGlDb25maWc+LFxyXG4gICAgICAgIEdldEV4dHJhPFRodW5rQXBpQ29uZmlnPixcclxuICAgICAgICBBbnlBY3Rpb25cclxuICAgICAgPlxyXG4gICAgPlxyXG4gIDogVGh1bmtEaXNwYXRjaDxHZXRTdGF0ZTxUaHVua0FwaUNvbmZpZz4sIEdldEV4dHJhPFRodW5rQXBpQ29uZmlnPiwgQW55QWN0aW9uPlxyXG5cclxuZXhwb3J0IHR5cGUgR2V0VGh1bmtBUEk8VGh1bmtBcGlDb25maWc+ID0gQmFzZVRodW5rQVBJPFxyXG4gIEdldFN0YXRlPFRodW5rQXBpQ29uZmlnPixcclxuICBHZXRFeHRyYTxUaHVua0FwaUNvbmZpZz4sXHJcbiAgR2V0RGlzcGF0Y2g8VGh1bmtBcGlDb25maWc+LFxyXG4gIEdldFJlamVjdFZhbHVlPFRodW5rQXBpQ29uZmlnPixcclxuICBHZXRSZWplY3RlZE1ldGE8VGh1bmtBcGlDb25maWc+LFxyXG4gIEdldEZ1bGZpbGxlZE1ldGE8VGh1bmtBcGlDb25maWc+XHJcbj5cclxuXHJcbnR5cGUgR2V0UmVqZWN0VmFsdWU8VGh1bmtBcGlDb25maWc+ID0gVGh1bmtBcGlDb25maWcgZXh0ZW5kcyB7XHJcbiAgcmVqZWN0VmFsdWU6IGluZmVyIFJlamVjdFZhbHVlXHJcbn1cclxuICA/IFJlamVjdFZhbHVlXHJcbiAgOiB1bmtub3duXHJcblxyXG50eXBlIEdldFBlbmRpbmdNZXRhPFRodW5rQXBpQ29uZmlnPiA9IFRodW5rQXBpQ29uZmlnIGV4dGVuZHMge1xyXG4gIHBlbmRpbmdNZXRhOiBpbmZlciBQZW5kaW5nTWV0YVxyXG59XHJcbiAgPyBQZW5kaW5nTWV0YVxyXG4gIDogdW5rbm93blxyXG5cclxudHlwZSBHZXRGdWxmaWxsZWRNZXRhPFRodW5rQXBpQ29uZmlnPiA9IFRodW5rQXBpQ29uZmlnIGV4dGVuZHMge1xyXG4gIGZ1bGZpbGxlZE1ldGE6IGluZmVyIEZ1bGZpbGxlZE1ldGFcclxufVxyXG4gID8gRnVsZmlsbGVkTWV0YVxyXG4gIDogdW5rbm93blxyXG5cclxudHlwZSBHZXRSZWplY3RlZE1ldGE8VGh1bmtBcGlDb25maWc+ID0gVGh1bmtBcGlDb25maWcgZXh0ZW5kcyB7XHJcbiAgcmVqZWN0ZWRNZXRhOiBpbmZlciBSZWplY3RlZE1ldGFcclxufVxyXG4gID8gUmVqZWN0ZWRNZXRhXHJcbiAgOiB1bmtub3duXHJcblxyXG50eXBlIEdldFNlcmlhbGl6ZWRFcnJvclR5cGU8VGh1bmtBcGlDb25maWc+ID0gVGh1bmtBcGlDb25maWcgZXh0ZW5kcyB7XHJcbiAgc2VyaWFsaXplZEVycm9yVHlwZTogaW5mZXIgR2V0U2VyaWFsaXplZEVycm9yVHlwZVxyXG59XHJcbiAgPyBHZXRTZXJpYWxpemVkRXJyb3JUeXBlXHJcbiAgOiBTZXJpYWxpemVkRXJyb3JcclxuXHJcbnR5cGUgTWF5YmVQcm9taXNlPFQ+ID0gVCB8IFByb21pc2U8VD4gfCAoVCBleHRlbmRzIGFueSA/IFByb21pc2U8VD4gOiBuZXZlcilcclxuXHJcbi8qKlxyXG4gKiBBIHR5cGUgZGVzY3JpYmluZyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBgcGF5bG9hZENyZWF0b3JgIGFyZ3VtZW50IHRvIGBjcmVhdGVBc3luY1RodW5rYC5cclxuICogTWlnaHQgYmUgdXNlZnVsIGZvciB3cmFwcGluZyBgY3JlYXRlQXN5bmNUaHVua2AgaW4gY3VzdG9tIGFic3RyYWN0aW9ucy5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IHR5cGUgQXN5bmNUaHVua1BheWxvYWRDcmVhdG9yUmV0dXJuVmFsdWU8XHJcbiAgUmV0dXJuZWQsXHJcbiAgVGh1bmtBcGlDb25maWcgZXh0ZW5kcyBBc3luY1RodW5rQ29uZmlnXHJcbj4gPSBNYXliZVByb21pc2U8XHJcbiAgfCBJc1Vua25vd248XHJcbiAgICAgIEdldEZ1bGZpbGxlZE1ldGE8VGh1bmtBcGlDb25maWc+LFxyXG4gICAgICBSZXR1cm5lZCxcclxuICAgICAgRnVsZmlsbFdpdGhNZXRhPFJldHVybmVkLCBHZXRGdWxmaWxsZWRNZXRhPFRodW5rQXBpQ29uZmlnPj5cclxuICAgID5cclxuICB8IFJlamVjdFdpdGhWYWx1ZTxcclxuICAgICAgR2V0UmVqZWN0VmFsdWU8VGh1bmtBcGlDb25maWc+LFxyXG4gICAgICBHZXRSZWplY3RlZE1ldGE8VGh1bmtBcGlDb25maWc+XHJcbiAgICA+XHJcbj5cclxuLyoqXHJcbiAqIEEgdHlwZSBkZXNjcmliaW5nIHRoZSBgcGF5bG9hZENyZWF0b3JgIGFyZ3VtZW50IHRvIGBjcmVhdGVBc3luY1RodW5rYC5cclxuICogTWlnaHQgYmUgdXNlZnVsIGZvciB3cmFwcGluZyBgY3JlYXRlQXN5bmNUaHVua2AgaW4gY3VzdG9tIGFic3RyYWN0aW9ucy5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IHR5cGUgQXN5bmNUaHVua1BheWxvYWRDcmVhdG9yPFxyXG4gIFJldHVybmVkLFxyXG4gIFRodW5rQXJnID0gdm9pZCxcclxuICBUaHVua0FwaUNvbmZpZyBleHRlbmRzIEFzeW5jVGh1bmtDb25maWcgPSB7fVxyXG4+ID0gKFxyXG4gIGFyZzogVGh1bmtBcmcsXHJcbiAgdGh1bmtBUEk6IEdldFRodW5rQVBJPFRodW5rQXBpQ29uZmlnPlxyXG4pID0+IEFzeW5jVGh1bmtQYXlsb2FkQ3JlYXRvclJldHVyblZhbHVlPFJldHVybmVkLCBUaHVua0FwaUNvbmZpZz5cclxuXHJcbi8qKlxyXG4gKiBBIFRodW5rQWN0aW9uIGNyZWF0ZWQgYnkgYGNyZWF0ZUFzeW5jVGh1bmtgLlxyXG4gKiBEaXNwYXRjaGluZyBpdCByZXR1cm5zIGEgUHJvbWlzZSBmb3IgZWl0aGVyIGFcclxuICogZnVsZmlsbGVkIG9yIHJlamVjdGVkIGFjdGlvbi5cclxuICogQWxzbywgdGhlIHJldHVybmVkIHZhbHVlIGNvbnRhaW5zIGFuIGBhYm9ydCgpYCBtZXRob2RcclxuICogdGhhdCBhbGxvd3MgdGhlIGFzeW5jQWN0aW9uIHRvIGJlIGNhbmNlbGxlZCBmcm9tIHRoZSBvdXRzaWRlLlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBBc3luY1RodW5rQWN0aW9uPFxyXG4gIFJldHVybmVkLFxyXG4gIFRodW5rQXJnLFxyXG4gIFRodW5rQXBpQ29uZmlnIGV4dGVuZHMgQXN5bmNUaHVua0NvbmZpZ1xyXG4+ID0gKFxyXG4gIGRpc3BhdGNoOiBHZXREaXNwYXRjaDxUaHVua0FwaUNvbmZpZz4sXHJcbiAgZ2V0U3RhdGU6ICgpID0+IEdldFN0YXRlPFRodW5rQXBpQ29uZmlnPixcclxuICBleHRyYTogR2V0RXh0cmE8VGh1bmtBcGlDb25maWc+XHJcbikgPT4gUHJvbWlzZTxcclxuICB8IFJldHVyblR5cGU8QXN5bmNUaHVua0Z1bGZpbGxlZEFjdGlvbkNyZWF0b3I8UmV0dXJuZWQsIFRodW5rQXJnPj5cclxuICB8IFJldHVyblR5cGU8QXN5bmNUaHVua1JlamVjdGVkQWN0aW9uQ3JlYXRvcjxUaHVua0FyZywgVGh1bmtBcGlDb25maWc+PlxyXG4+ICYge1xyXG4gIGFib3J0OiAocmVhc29uPzogc3RyaW5nKSA9PiB2b2lkXHJcbiAgcmVxdWVzdElkOiBzdHJpbmdcclxuICBhcmc6IFRodW5rQXJnXHJcbiAgdW53cmFwOiAoKSA9PiBQcm9taXNlPFJldHVybmVkPlxyXG59XHJcblxyXG50eXBlIEFzeW5jVGh1bmtBY3Rpb25DcmVhdG9yPFxyXG4gIFJldHVybmVkLFxyXG4gIFRodW5rQXJnLFxyXG4gIFRodW5rQXBpQ29uZmlnIGV4dGVuZHMgQXN5bmNUaHVua0NvbmZpZ1xyXG4+ID0gSXNBbnk8XHJcbiAgVGh1bmtBcmcsXHJcbiAgLy8gYW55IGhhbmRsaW5nXHJcbiAgKGFyZzogVGh1bmtBcmcpID0+IEFzeW5jVGh1bmtBY3Rpb248UmV0dXJuZWQsIFRodW5rQXJnLCBUaHVua0FwaUNvbmZpZz4sXHJcbiAgLy8gdW5rbm93biBoYW5kbGluZ1xyXG4gIHVua25vd24gZXh0ZW5kcyBUaHVua0FyZ1xyXG4gICAgPyAoYXJnOiBUaHVua0FyZykgPT4gQXN5bmNUaHVua0FjdGlvbjxSZXR1cm5lZCwgVGh1bmtBcmcsIFRodW5rQXBpQ29uZmlnPiAvLyBhcmd1bWVudCBub3Qgc3BlY2lmaWVkIG9yIHNwZWNpZmllZCBhcyB2b2lkIG9yIHVuZGVmaW5lZFxyXG4gICAgOiBbVGh1bmtBcmddIGV4dGVuZHMgW3ZvaWRdIHwgW3VuZGVmaW5lZF1cclxuICAgID8gKCkgPT4gQXN5bmNUaHVua0FjdGlvbjxSZXR1cm5lZCwgVGh1bmtBcmcsIFRodW5rQXBpQ29uZmlnPiAvLyBhcmd1bWVudCBjb250YWlucyB2b2lkXHJcbiAgICA6IFt2b2lkXSBleHRlbmRzIFtUaHVua0FyZ10gLy8gbWFrZSBvcHRpb25hbFxyXG4gICAgPyAoYXJnPzogVGh1bmtBcmcpID0+IEFzeW5jVGh1bmtBY3Rpb248UmV0dXJuZWQsIFRodW5rQXJnLCBUaHVua0FwaUNvbmZpZz4gLy8gYXJndW1lbnQgY29udGFpbnMgdW5kZWZpbmVkXHJcbiAgICA6IFt1bmRlZmluZWRdIGV4dGVuZHMgW1RodW5rQXJnXVxyXG4gICAgPyBXaXRoU3RyaWN0TnVsbENoZWNrczxcclxuICAgICAgICAvLyB3aXRoIHN0cmljdCBudWxsQ2hlY2tzOiBtYWtlIG9wdGlvbmFsXHJcbiAgICAgICAgKFxyXG4gICAgICAgICAgYXJnPzogVGh1bmtBcmdcclxuICAgICAgICApID0+IEFzeW5jVGh1bmtBY3Rpb248UmV0dXJuZWQsIFRodW5rQXJnLCBUaHVua0FwaUNvbmZpZz4sXHJcbiAgICAgICAgLy8gd2l0aG91dCBzdHJpY3QgbnVsbCBjaGVja3MgdGhpcyB3aWxsIG1hdGNoIGV2ZXJ5dGhpbmcsIHNvIGRvbid0IG1ha2UgaXQgb3B0aW9uYWxcclxuICAgICAgICAoYXJnOiBUaHVua0FyZykgPT4gQXN5bmNUaHVua0FjdGlvbjxSZXR1cm5lZCwgVGh1bmtBcmcsIFRodW5rQXBpQ29uZmlnPlxyXG4gICAgICA+IC8vIGRlZmF1bHQgY2FzZTogbm9ybWFsIGFyZ3VtZW50XHJcbiAgICA6IChhcmc6IFRodW5rQXJnKSA9PiBBc3luY1RodW5rQWN0aW9uPFJldHVybmVkLCBUaHVua0FyZywgVGh1bmtBcGlDb25maWc+XHJcbj5cclxuXHJcbi8qKlxyXG4gKiBPcHRpb25zIG9iamVjdCBmb3IgYGNyZWF0ZUFzeW5jVGh1bmtgLlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBBc3luY1RodW5rT3B0aW9uczxcclxuICBUaHVua0FyZyA9IHZvaWQsXHJcbiAgVGh1bmtBcGlDb25maWcgZXh0ZW5kcyBBc3luY1RodW5rQ29uZmlnID0ge31cclxuPiA9IHtcclxuICAvKipcclxuICAgKiBBIG1ldGhvZCB0byBjb250cm9sIHdoZXRoZXIgdGhlIGFzeW5jVGh1bmsgc2hvdWxkIGJlIGV4ZWN1dGVkLiBIYXMgYWNjZXNzIHRvIHRoZVxyXG4gICAqIGBhcmdgLCBgYXBpLmdldFN0YXRlKClgIGFuZCBgYXBpLmV4dHJhYCBhcmd1bWVudHMuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyBgZmFsc2VgIGlmIGl0IHNob3VsZCBiZSBza2lwcGVkXHJcbiAgICovXHJcbiAgY29uZGl0aW9uPyhcclxuICAgIGFyZzogVGh1bmtBcmcsXHJcbiAgICBhcGk6IFBpY2s8R2V0VGh1bmtBUEk8VGh1bmtBcGlDb25maWc+LCAnZ2V0U3RhdGUnIHwgJ2V4dHJhJz5cclxuICApOiBNYXliZVByb21pc2U8Ym9vbGVhbiB8IHVuZGVmaW5lZD5cclxuICAvKipcclxuICAgKiBJZiBgY29uZGl0aW9uYCByZXR1cm5zIGBmYWxzZWAsIHRoZSBhc3luY1RodW5rIHdpbGwgYmUgc2tpcHBlZC5cclxuICAgKiBUaGlzIG9wdGlvbiBhbGxvd3MgeW91IHRvIGNvbnRyb2wgd2hldGhlciBhIGByZWplY3RlZGAgYWN0aW9uIHdpdGggYG1ldGEuY29uZGl0aW9uID09IGZhbHNlYFxyXG4gICAqIHdpbGwgYmUgZGlzcGF0Y2hlZCBvciBub3QuXHJcbiAgICpcclxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXHJcbiAgICovXHJcbiAgZGlzcGF0Y2hDb25kaXRpb25SZWplY3Rpb24/OiBib29sZWFuXHJcblxyXG4gIHNlcmlhbGl6ZUVycm9yPzogKHg6IHVua25vd24pID0+IEdldFNlcmlhbGl6ZWRFcnJvclR5cGU8VGh1bmtBcGlDb25maWc+XHJcblxyXG4gIC8qKlxyXG4gICAqIEEgZnVuY3Rpb24gdG8gdXNlIHdoZW4gZ2VuZXJhdGluZyB0aGUgYHJlcXVlc3RJZGAgZm9yIHRoZSByZXF1ZXN0IHNlcXVlbmNlLlxyXG4gICAqXHJcbiAgICogQGRlZmF1bHQgYG5hbm9pZGBcclxuICAgKi9cclxuICBpZEdlbmVyYXRvcj86IChhcmc6IFRodW5rQXJnKSA9PiBzdHJpbmdcclxufSAmIElzVW5rbm93bjxcclxuICBHZXRQZW5kaW5nTWV0YTxUaHVua0FwaUNvbmZpZz4sXHJcbiAge1xyXG4gICAgLyoqXHJcbiAgICAgKiBBIG1ldGhvZCB0byBnZW5lcmF0ZSBhZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gYmUgYWRkZWQgdG8gYG1ldGFgIG9mIHRoZSBwZW5kaW5nIGFjdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBVc2luZyB0aGlzIG9wdGlvbmFsIG92ZXJsb2FkIHdpbGwgbm90IG1vZGlmeSB0aGUgdHlwZXMgY29ycmVjdGx5LCB0aGlzIG92ZXJsb2FkIGlzIG9ubHkgaW4gcGxhY2UgdG8gc3VwcG9ydCBKYXZhU2NyaXB0IHVzZXJzLlxyXG4gICAgICogUGxlYXNlIHVzZSB0aGUgYFRodW5rQXBpQ29uZmlnYCBwYXJhbWV0ZXIgYHBlbmRpbmdNZXRhYCB0byBnZXQgYWNjZXNzIHRvIGEgY29ycmVjdGx5IHR5cGVkIG92ZXJsb2FkXHJcbiAgICAgKi9cclxuICAgIGdldFBlbmRpbmdNZXRhPyhcclxuICAgICAgYmFzZToge1xyXG4gICAgICAgIGFyZzogVGh1bmtBcmdcclxuICAgICAgICByZXF1ZXN0SWQ6IHN0cmluZ1xyXG4gICAgICB9LFxyXG4gICAgICBhcGk6IFBpY2s8R2V0VGh1bmtBUEk8VGh1bmtBcGlDb25maWc+LCAnZ2V0U3RhdGUnIHwgJ2V4dHJhJz5cclxuICAgICk6IEdldFBlbmRpbmdNZXRhPFRodW5rQXBpQ29uZmlnPlxyXG4gIH0sXHJcbiAge1xyXG4gICAgLyoqXHJcbiAgICAgKiBBIG1ldGhvZCB0byBnZW5lcmF0ZSBhZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gYmUgYWRkZWQgdG8gYG1ldGFgIG9mIHRoZSBwZW5kaW5nIGFjdGlvbi5cclxuICAgICAqL1xyXG4gICAgZ2V0UGVuZGluZ01ldGEoXHJcbiAgICAgIGJhc2U6IHtcclxuICAgICAgICBhcmc6IFRodW5rQXJnXHJcbiAgICAgICAgcmVxdWVzdElkOiBzdHJpbmdcclxuICAgICAgfSxcclxuICAgICAgYXBpOiBQaWNrPEdldFRodW5rQVBJPFRodW5rQXBpQ29uZmlnPiwgJ2dldFN0YXRlJyB8ICdleHRyYSc+XHJcbiAgICApOiBHZXRQZW5kaW5nTWV0YTxUaHVua0FwaUNvbmZpZz5cclxuICB9XHJcbj5cclxuXHJcbmV4cG9ydCB0eXBlIEFzeW5jVGh1bmtQZW5kaW5nQWN0aW9uQ3JlYXRvcjxcclxuICBUaHVua0FyZyxcclxuICBUaHVua0FwaUNvbmZpZyA9IHt9XHJcbj4gPSBBY3Rpb25DcmVhdG9yV2l0aFByZXBhcmVkUGF5bG9hZDxcclxuICBbc3RyaW5nLCBUaHVua0FyZywgR2V0UGVuZGluZ01ldGE8VGh1bmtBcGlDb25maWc+P10sXHJcbiAgdW5kZWZpbmVkLFxyXG4gIHN0cmluZyxcclxuICBuZXZlcixcclxuICB7XHJcbiAgICBhcmc6IFRodW5rQXJnXHJcbiAgICByZXF1ZXN0SWQ6IHN0cmluZ1xyXG4gICAgcmVxdWVzdFN0YXR1czogJ3BlbmRpbmcnXHJcbiAgfSAmIEdldFBlbmRpbmdNZXRhPFRodW5rQXBpQ29uZmlnPlxyXG4+XHJcblxyXG5leHBvcnQgdHlwZSBBc3luY1RodW5rUmVqZWN0ZWRBY3Rpb25DcmVhdG9yPFxyXG4gIFRodW5rQXJnLFxyXG4gIFRodW5rQXBpQ29uZmlnID0ge31cclxuPiA9IEFjdGlvbkNyZWF0b3JXaXRoUHJlcGFyZWRQYXlsb2FkPFxyXG4gIFtcclxuICAgIEVycm9yIHwgbnVsbCxcclxuICAgIHN0cmluZyxcclxuICAgIFRodW5rQXJnLFxyXG4gICAgR2V0UmVqZWN0VmFsdWU8VGh1bmtBcGlDb25maWc+PyxcclxuICAgIEdldFJlamVjdGVkTWV0YTxUaHVua0FwaUNvbmZpZz4/XHJcbiAgXSxcclxuICBHZXRSZWplY3RWYWx1ZTxUaHVua0FwaUNvbmZpZz4gfCB1bmRlZmluZWQsXHJcbiAgc3RyaW5nLFxyXG4gIEdldFNlcmlhbGl6ZWRFcnJvclR5cGU8VGh1bmtBcGlDb25maWc+LFxyXG4gIHtcclxuICAgIGFyZzogVGh1bmtBcmdcclxuICAgIHJlcXVlc3RJZDogc3RyaW5nXHJcbiAgICByZXF1ZXN0U3RhdHVzOiAncmVqZWN0ZWQnXHJcbiAgICBhYm9ydGVkOiBib29sZWFuXHJcbiAgICBjb25kaXRpb246IGJvb2xlYW5cclxuICB9ICYgKFxyXG4gICAgfCAoeyByZWplY3RlZFdpdGhWYWx1ZTogZmFsc2UgfSAmIHtcclxuICAgICAgICBbSyBpbiBrZXlvZiBHZXRSZWplY3RlZE1ldGE8VGh1bmtBcGlDb25maWc+XT86IHVuZGVmaW5lZFxyXG4gICAgICB9KVxyXG4gICAgfCAoeyByZWplY3RlZFdpdGhWYWx1ZTogdHJ1ZSB9ICYgR2V0UmVqZWN0ZWRNZXRhPFRodW5rQXBpQ29uZmlnPilcclxuICApXHJcbj5cclxuXHJcbmV4cG9ydCB0eXBlIEFzeW5jVGh1bmtGdWxmaWxsZWRBY3Rpb25DcmVhdG9yPFxyXG4gIFJldHVybmVkLFxyXG4gIFRodW5rQXJnLFxyXG4gIFRodW5rQXBpQ29uZmlnID0ge31cclxuPiA9IEFjdGlvbkNyZWF0b3JXaXRoUHJlcGFyZWRQYXlsb2FkPFxyXG4gIFtSZXR1cm5lZCwgc3RyaW5nLCBUaHVua0FyZywgR2V0RnVsZmlsbGVkTWV0YTxUaHVua0FwaUNvbmZpZz4/XSxcclxuICBSZXR1cm5lZCxcclxuICBzdHJpbmcsXHJcbiAgbmV2ZXIsXHJcbiAge1xyXG4gICAgYXJnOiBUaHVua0FyZ1xyXG4gICAgcmVxdWVzdElkOiBzdHJpbmdcclxuICAgIHJlcXVlc3RTdGF0dXM6ICdmdWxmaWxsZWQnXHJcbiAgfSAmIEdldEZ1bGZpbGxlZE1ldGE8VGh1bmtBcGlDb25maWc+XHJcbj5cclxuXHJcbi8qKlxyXG4gKiBBIHR5cGUgZGVzY3JpYmluZyB0aGUgcmV0dXJuIHZhbHVlIG9mIGBjcmVhdGVBc3luY1RodW5rYC5cclxuICogTWlnaHQgYmUgdXNlZnVsIGZvciB3cmFwcGluZyBgY3JlYXRlQXN5bmNUaHVua2AgaW4gY3VzdG9tIGFic3RyYWN0aW9ucy5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IHR5cGUgQXN5bmNUaHVuazxcclxuICBSZXR1cm5lZCxcclxuICBUaHVua0FyZyxcclxuICBUaHVua0FwaUNvbmZpZyBleHRlbmRzIEFzeW5jVGh1bmtDb25maWdcclxuPiA9IEFzeW5jVGh1bmtBY3Rpb25DcmVhdG9yPFJldHVybmVkLCBUaHVua0FyZywgVGh1bmtBcGlDb25maWc+ICYge1xyXG4gIHBlbmRpbmc6IEFzeW5jVGh1bmtQZW5kaW5nQWN0aW9uQ3JlYXRvcjxUaHVua0FyZywgVGh1bmtBcGlDb25maWc+XHJcbiAgcmVqZWN0ZWQ6IEFzeW5jVGh1bmtSZWplY3RlZEFjdGlvbkNyZWF0b3I8VGh1bmtBcmcsIFRodW5rQXBpQ29uZmlnPlxyXG4gIGZ1bGZpbGxlZDogQXN5bmNUaHVua0Z1bGZpbGxlZEFjdGlvbkNyZWF0b3I8XHJcbiAgICBSZXR1cm5lZCxcclxuICAgIFRodW5rQXJnLFxyXG4gICAgVGh1bmtBcGlDb25maWdcclxuICA+XHJcbiAgdHlwZVByZWZpeDogc3RyaW5nXHJcbn1cclxuXHJcbnR5cGUgT3ZlcnJpZGVUaHVua0FwaUNvbmZpZ3M8T2xkQ29uZmlnLCBOZXdDb25maWc+ID0gSWQ8XHJcbiAgTmV3Q29uZmlnICYgT21pdDxPbGRDb25maWcsIGtleW9mIE5ld0NvbmZpZz5cclxuPlxyXG5cclxudHlwZSBDcmVhdGVBc3luY1RodW5rPEN1cnJpZWRUaHVua0FwaUNvbmZpZyBleHRlbmRzIEFzeW5jVGh1bmtDb25maWc+ID0ge1xyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHR5cGVQcmVmaXhcclxuICAgKiBAcGFyYW0gcGF5bG9hZENyZWF0b3JcclxuICAgKiBAcGFyYW0gb3B0aW9uc1xyXG4gICAqXHJcbiAgICogQHB1YmxpY1xyXG4gICAqL1xyXG4gIC8vIHNlcGFyYXRlIHNpZ25hdHVyZSB3aXRob3V0IGBBc3luY1RodW5rQ29uZmlnYCBmb3IgYmV0dGVyIGluZmVyZW5jZVxyXG4gIDxSZXR1cm5lZCwgVGh1bmtBcmcgPSB2b2lkPihcclxuICAgIHR5cGVQcmVmaXg6IHN0cmluZyxcclxuICAgIHBheWxvYWRDcmVhdG9yOiBBc3luY1RodW5rUGF5bG9hZENyZWF0b3I8XHJcbiAgICAgIFJldHVybmVkLFxyXG4gICAgICBUaHVua0FyZyxcclxuICAgICAgQ3VycmllZFRodW5rQXBpQ29uZmlnXHJcbiAgICA+LFxyXG4gICAgb3B0aW9ucz86IEFzeW5jVGh1bmtPcHRpb25zPFRodW5rQXJnLCBDdXJyaWVkVGh1bmtBcGlDb25maWc+XHJcbiAgKTogQXN5bmNUaHVuazxSZXR1cm5lZCwgVGh1bmtBcmcsIEN1cnJpZWRUaHVua0FwaUNvbmZpZz5cclxuXHJcbiAgLyoqXHJcbiAgICpcclxuICAgKiBAcGFyYW0gdHlwZVByZWZpeFxyXG4gICAqIEBwYXJhbSBwYXlsb2FkQ3JlYXRvclxyXG4gICAqIEBwYXJhbSBvcHRpb25zXHJcbiAgICpcclxuICAgKiBAcHVibGljXHJcbiAgICovXHJcbiAgPFJldHVybmVkLCBUaHVua0FyZywgVGh1bmtBcGlDb25maWcgZXh0ZW5kcyBBc3luY1RodW5rQ29uZmlnPihcclxuICAgIHR5cGVQcmVmaXg6IHN0cmluZyxcclxuICAgIHBheWxvYWRDcmVhdG9yOiBBc3luY1RodW5rUGF5bG9hZENyZWF0b3I8XHJcbiAgICAgIFJldHVybmVkLFxyXG4gICAgICBUaHVua0FyZyxcclxuICAgICAgT3ZlcnJpZGVUaHVua0FwaUNvbmZpZ3M8Q3VycmllZFRodW5rQXBpQ29uZmlnLCBUaHVua0FwaUNvbmZpZz5cclxuICAgID4sXHJcbiAgICBvcHRpb25zPzogQXN5bmNUaHVua09wdGlvbnM8XHJcbiAgICAgIFRodW5rQXJnLFxyXG4gICAgICBPdmVycmlkZVRodW5rQXBpQ29uZmlnczxDdXJyaWVkVGh1bmtBcGlDb25maWcsIFRodW5rQXBpQ29uZmlnPlxyXG4gICAgPlxyXG4gICk6IEFzeW5jVGh1bms8XHJcbiAgICBSZXR1cm5lZCxcclxuICAgIFRodW5rQXJnLFxyXG4gICAgT3ZlcnJpZGVUaHVua0FwaUNvbmZpZ3M8Q3VycmllZFRodW5rQXBpQ29uZmlnLCBUaHVua0FwaUNvbmZpZz5cclxuICA+XHJcblxyXG4gIHdpdGhUeXBlczxUaHVua0FwaUNvbmZpZyBleHRlbmRzIEFzeW5jVGh1bmtDb25maWc+KCk6IENyZWF0ZUFzeW5jVGh1bms8XHJcbiAgICBPdmVycmlkZVRodW5rQXBpQ29uZmlnczxDdXJyaWVkVGh1bmtBcGlDb25maWcsIFRodW5rQXBpQ29uZmlnPlxyXG4gID5cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGNyZWF0ZUFzeW5jVGh1bmsgPSAoKCkgPT4ge1xyXG4gIGZ1bmN0aW9uIGNyZWF0ZUFzeW5jVGh1bms8XHJcbiAgICBSZXR1cm5lZCxcclxuICAgIFRodW5rQXJnLFxyXG4gICAgVGh1bmtBcGlDb25maWcgZXh0ZW5kcyBBc3luY1RodW5rQ29uZmlnXHJcbiAgPihcclxuICAgIHR5cGVQcmVmaXg6IHN0cmluZyxcclxuICAgIHBheWxvYWRDcmVhdG9yOiBBc3luY1RodW5rUGF5bG9hZENyZWF0b3I8XHJcbiAgICAgIFJldHVybmVkLFxyXG4gICAgICBUaHVua0FyZyxcclxuICAgICAgVGh1bmtBcGlDb25maWdcclxuICAgID4sXHJcbiAgICBvcHRpb25zPzogQXN5bmNUaHVua09wdGlvbnM8VGh1bmtBcmcsIFRodW5rQXBpQ29uZmlnPlxyXG4gICk6IEFzeW5jVGh1bms8UmV0dXJuZWQsIFRodW5rQXJnLCBUaHVua0FwaUNvbmZpZz4ge1xyXG4gICAgdHlwZSBSZWplY3RlZFZhbHVlID0gR2V0UmVqZWN0VmFsdWU8VGh1bmtBcGlDb25maWc+XHJcbiAgICB0eXBlIFBlbmRpbmdNZXRhID0gR2V0UGVuZGluZ01ldGE8VGh1bmtBcGlDb25maWc+XHJcbiAgICB0eXBlIEZ1bGZpbGxlZE1ldGEgPSBHZXRGdWxmaWxsZWRNZXRhPFRodW5rQXBpQ29uZmlnPlxyXG4gICAgdHlwZSBSZWplY3RlZE1ldGEgPSBHZXRSZWplY3RlZE1ldGE8VGh1bmtBcGlDb25maWc+XHJcblxyXG4gICAgY29uc3QgZnVsZmlsbGVkOiBBc3luY1RodW5rRnVsZmlsbGVkQWN0aW9uQ3JlYXRvcjxcclxuICAgICAgUmV0dXJuZWQsXHJcbiAgICAgIFRodW5rQXJnLFxyXG4gICAgICBUaHVua0FwaUNvbmZpZ1xyXG4gICAgPiA9IGNyZWF0ZUFjdGlvbihcclxuICAgICAgdHlwZVByZWZpeCArICcvZnVsZmlsbGVkJyxcclxuICAgICAgKFxyXG4gICAgICAgIHBheWxvYWQ6IFJldHVybmVkLFxyXG4gICAgICAgIHJlcXVlc3RJZDogc3RyaW5nLFxyXG4gICAgICAgIGFyZzogVGh1bmtBcmcsXHJcbiAgICAgICAgbWV0YT86IEZ1bGZpbGxlZE1ldGFcclxuICAgICAgKSA9PiAoe1xyXG4gICAgICAgIHBheWxvYWQsXHJcbiAgICAgICAgbWV0YToge1xyXG4gICAgICAgICAgLi4uKChtZXRhIGFzIGFueSkgfHwge30pLFxyXG4gICAgICAgICAgYXJnLFxyXG4gICAgICAgICAgcmVxdWVzdElkLFxyXG4gICAgICAgICAgcmVxdWVzdFN0YXR1czogJ2Z1bGZpbGxlZCcgYXMgY29uc3QsXHJcbiAgICAgICAgfSxcclxuICAgICAgfSlcclxuICAgIClcclxuXHJcbiAgICBjb25zdCBwZW5kaW5nOiBBc3luY1RodW5rUGVuZGluZ0FjdGlvbkNyZWF0b3I8VGh1bmtBcmcsIFRodW5rQXBpQ29uZmlnPiA9XHJcbiAgICAgIGNyZWF0ZUFjdGlvbihcclxuICAgICAgICB0eXBlUHJlZml4ICsgJy9wZW5kaW5nJyxcclxuICAgICAgICAocmVxdWVzdElkOiBzdHJpbmcsIGFyZzogVGh1bmtBcmcsIG1ldGE/OiBQZW5kaW5nTWV0YSkgPT4gKHtcclxuICAgICAgICAgIHBheWxvYWQ6IHVuZGVmaW5lZCxcclxuICAgICAgICAgIG1ldGE6IHtcclxuICAgICAgICAgICAgLi4uKChtZXRhIGFzIGFueSkgfHwge30pLFxyXG4gICAgICAgICAgICBhcmcsXHJcbiAgICAgICAgICAgIHJlcXVlc3RJZCxcclxuICAgICAgICAgICAgcmVxdWVzdFN0YXR1czogJ3BlbmRpbmcnIGFzIGNvbnN0LFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9KVxyXG4gICAgICApXHJcblxyXG4gICAgY29uc3QgcmVqZWN0ZWQ6IEFzeW5jVGh1bmtSZWplY3RlZEFjdGlvbkNyZWF0b3I8VGh1bmtBcmcsIFRodW5rQXBpQ29uZmlnPiA9XHJcbiAgICAgIGNyZWF0ZUFjdGlvbihcclxuICAgICAgICB0eXBlUHJlZml4ICsgJy9yZWplY3RlZCcsXHJcbiAgICAgICAgKFxyXG4gICAgICAgICAgZXJyb3I6IEVycm9yIHwgbnVsbCxcclxuICAgICAgICAgIHJlcXVlc3RJZDogc3RyaW5nLFxyXG4gICAgICAgICAgYXJnOiBUaHVua0FyZyxcclxuICAgICAgICAgIHBheWxvYWQ/OiBSZWplY3RlZFZhbHVlLFxyXG4gICAgICAgICAgbWV0YT86IFJlamVjdGVkTWV0YVxyXG4gICAgICAgICkgPT4gKHtcclxuICAgICAgICAgIHBheWxvYWQsXHJcbiAgICAgICAgICBlcnJvcjogKChvcHRpb25zICYmIG9wdGlvbnMuc2VyaWFsaXplRXJyb3IpIHx8IG1pbmlTZXJpYWxpemVFcnJvcikoXHJcbiAgICAgICAgICAgIGVycm9yIHx8ICdSZWplY3RlZCdcclxuICAgICAgICAgICkgYXMgR2V0U2VyaWFsaXplZEVycm9yVHlwZTxUaHVua0FwaUNvbmZpZz4sXHJcbiAgICAgICAgICBtZXRhOiB7XHJcbiAgICAgICAgICAgIC4uLigobWV0YSBhcyBhbnkpIHx8IHt9KSxcclxuICAgICAgICAgICAgYXJnLFxyXG4gICAgICAgICAgICByZXF1ZXN0SWQsXHJcbiAgICAgICAgICAgIHJlamVjdGVkV2l0aFZhbHVlOiAhIXBheWxvYWQsXHJcbiAgICAgICAgICAgIHJlcXVlc3RTdGF0dXM6ICdyZWplY3RlZCcgYXMgY29uc3QsXHJcbiAgICAgICAgICAgIGFib3J0ZWQ6IGVycm9yPy5uYW1lID09PSAnQWJvcnRFcnJvcicsXHJcbiAgICAgICAgICAgIGNvbmRpdGlvbjogZXJyb3I/Lm5hbWUgPT09ICdDb25kaXRpb25FcnJvcicsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuXHJcbiAgICBsZXQgZGlzcGxheWVkV2FybmluZyA9IGZhbHNlXHJcblxyXG4gICAgY29uc3QgQUMgPVxyXG4gICAgICB0eXBlb2YgQWJvcnRDb250cm9sbGVyICE9PSAndW5kZWZpbmVkJ1xyXG4gICAgICAgID8gQWJvcnRDb250cm9sbGVyXHJcbiAgICAgICAgOiBjbGFzcyBpbXBsZW1lbnRzIEFib3J0Q29udHJvbGxlciB7XHJcbiAgICAgICAgICAgIHNpZ25hbCA9IHtcclxuICAgICAgICAgICAgICBhYm9ydGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICBhZGRFdmVudExpc3RlbmVyKCkge30sXHJcbiAgICAgICAgICAgICAgZGlzcGF0Y2hFdmVudCgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgb25hYm9ydCgpIHt9LFxyXG4gICAgICAgICAgICAgIHJlbW92ZUV2ZW50TGlzdGVuZXIoKSB7fSxcclxuICAgICAgICAgICAgICByZWFzb246IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICB0aHJvd0lmQWJvcnRlZCgpIHt9LFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGFib3J0KCkge1xyXG4gICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWRpc3BsYXllZFdhcm5pbmcpIHtcclxuICAgICAgICAgICAgICAgICAgZGlzcGxheWVkV2FybmluZyA9IHRydWVcclxuICAgICAgICAgICAgICAgICAgY29uc29sZS5pbmZvKFxyXG4gICAgICAgICAgICAgICAgICAgIGBUaGlzIHBsYXRmb3JtIGRvZXMgbm90IGltcGxlbWVudCBBYm9ydENvbnRyb2xsZXIuIFxyXG5JZiB5b3Ugd2FudCB0byB1c2UgdGhlIEFib3J0Q29udHJvbGxlciB0byByZWFjdCB0byBcXGBhYm9ydFxcYCBldmVudHMsIHBsZWFzZSBjb25zaWRlciBpbXBvcnRpbmcgYSBwb2x5ZmlsbCBsaWtlICdhYm9ydGNvbnRyb2xsZXItcG9seWZpbGwvZGlzdC9hYm9ydGNvbnRyb2xsZXItcG9seWZpbGwtb25seScuYFxyXG4gICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gYWN0aW9uQ3JlYXRvcihcclxuICAgICAgYXJnOiBUaHVua0FyZ1xyXG4gICAgKTogQXN5bmNUaHVua0FjdGlvbjxSZXR1cm5lZCwgVGh1bmtBcmcsIFRodW5rQXBpQ29uZmlnPiB7XHJcbiAgICAgIHJldHVybiAoZGlzcGF0Y2gsIGdldFN0YXRlLCBleHRyYSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHJlcXVlc3RJZCA9IG9wdGlvbnM/LmlkR2VuZXJhdG9yXHJcbiAgICAgICAgICA/IG9wdGlvbnMuaWRHZW5lcmF0b3IoYXJnKVxyXG4gICAgICAgICAgOiBuYW5vaWQoKVxyXG5cclxuICAgICAgICBjb25zdCBhYm9ydENvbnRyb2xsZXIgPSBuZXcgQUMoKVxyXG4gICAgICAgIGxldCBhYm9ydFJlYXNvbjogc3RyaW5nIHwgdW5kZWZpbmVkXHJcblxyXG4gICAgICAgIGxldCBzdGFydGVkID0gZmFsc2VcclxuICAgICAgICBmdW5jdGlvbiBhYm9ydChyZWFzb24/OiBzdHJpbmcpIHtcclxuICAgICAgICAgIGFib3J0UmVhc29uID0gcmVhc29uXHJcbiAgICAgICAgICBhYm9ydENvbnRyb2xsZXIuYWJvcnQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcHJvbWlzZSA9IChhc3luYyBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICBsZXQgZmluYWxBY3Rpb246IFJldHVyblR5cGU8dHlwZW9mIGZ1bGZpbGxlZCB8IHR5cGVvZiByZWplY3RlZD5cclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGxldCBjb25kaXRpb25SZXN1bHQgPSBvcHRpb25zPy5jb25kaXRpb24/LihhcmcsIHsgZ2V0U3RhdGUsIGV4dHJhIH0pXHJcbiAgICAgICAgICAgIGlmIChpc1RoZW5hYmxlKGNvbmRpdGlvblJlc3VsdCkpIHtcclxuICAgICAgICAgICAgICBjb25kaXRpb25SZXN1bHQgPSBhd2FpdCBjb25kaXRpb25SZXN1bHRcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGNvbmRpdGlvblJlc3VsdCA9PT0gZmFsc2UgfHwgYWJvcnRDb250cm9sbGVyLnNpZ25hbC5hYm9ydGVkKSB7XHJcbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcclxuICAgICAgICAgICAgICB0aHJvdyB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiAnQ29uZGl0aW9uRXJyb3InLFxyXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ0Fib3J0ZWQgZHVlIHRvIGNvbmRpdGlvbiBjYWxsYmFjayByZXR1cm5pbmcgZmFsc2UuJyxcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc3RhcnRlZCA9IHRydWVcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGFib3J0ZWRQcm9taXNlID0gbmV3IFByb21pc2U8bmV2ZXI+KChfLCByZWplY3QpID0+XHJcbiAgICAgICAgICAgICAgYWJvcnRDb250cm9sbGVyLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsICgpID0+XHJcbiAgICAgICAgICAgICAgICByZWplY3Qoe1xyXG4gICAgICAgICAgICAgICAgICBuYW1lOiAnQWJvcnRFcnJvcicsXHJcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGFib3J0UmVhc29uIHx8ICdBYm9ydGVkJyxcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIGRpc3BhdGNoKFxyXG4gICAgICAgICAgICAgIHBlbmRpbmcoXHJcbiAgICAgICAgICAgICAgICByZXF1ZXN0SWQsXHJcbiAgICAgICAgICAgICAgICBhcmcsXHJcbiAgICAgICAgICAgICAgICBvcHRpb25zPy5nZXRQZW5kaW5nTWV0YT8uKFxyXG4gICAgICAgICAgICAgICAgICB7IHJlcXVlc3RJZCwgYXJnIH0sXHJcbiAgICAgICAgICAgICAgICAgIHsgZ2V0U3RhdGUsIGV4dHJhIH1cclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgZmluYWxBY3Rpb24gPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xyXG4gICAgICAgICAgICAgIGFib3J0ZWRQcm9taXNlLFxyXG4gICAgICAgICAgICAgIFByb21pc2UucmVzb2x2ZShcclxuICAgICAgICAgICAgICAgIHBheWxvYWRDcmVhdG9yKGFyZywge1xyXG4gICAgICAgICAgICAgICAgICBkaXNwYXRjaCxcclxuICAgICAgICAgICAgICAgICAgZ2V0U3RhdGUsXHJcbiAgICAgICAgICAgICAgICAgIGV4dHJhLFxyXG4gICAgICAgICAgICAgICAgICByZXF1ZXN0SWQsXHJcbiAgICAgICAgICAgICAgICAgIHNpZ25hbDogYWJvcnRDb250cm9sbGVyLnNpZ25hbCxcclxuICAgICAgICAgICAgICAgICAgYWJvcnQsXHJcbiAgICAgICAgICAgICAgICAgIHJlamVjdFdpdGhWYWx1ZTogKChcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogUmVqZWN0ZWRWYWx1ZSxcclxuICAgICAgICAgICAgICAgICAgICBtZXRhPzogUmVqZWN0ZWRNZXRhXHJcbiAgICAgICAgICAgICAgICAgICkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUmVqZWN0V2l0aFZhbHVlKHZhbHVlLCBtZXRhKVxyXG4gICAgICAgICAgICAgICAgICB9KSBhcyBhbnksXHJcbiAgICAgICAgICAgICAgICAgIGZ1bGZpbGxXaXRoVmFsdWU6ICgodmFsdWU6IHVua25vd24sIG1ldGE/OiBGdWxmaWxsZWRNZXRhKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBGdWxmaWxsV2l0aE1ldGEodmFsdWUsIG1ldGEpXHJcbiAgICAgICAgICAgICAgICAgIH0pIGFzIGFueSxcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgKS50aGVuKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBSZWplY3RXaXRoVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgdGhyb3cgcmVzdWx0XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgRnVsZmlsbFdpdGhNZXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiBmdWxmaWxsZWQocmVzdWx0LnBheWxvYWQsIHJlcXVlc3RJZCwgYXJnLCByZXN1bHQubWV0YSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBmdWxmaWxsZWQocmVzdWx0IGFzIGFueSwgcmVxdWVzdElkLCBhcmcpXHJcbiAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIF0pXHJcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgZmluYWxBY3Rpb24gPVxyXG4gICAgICAgICAgICAgIGVyciBpbnN0YW5jZW9mIFJlamVjdFdpdGhWYWx1ZVxyXG4gICAgICAgICAgICAgICAgPyByZWplY3RlZChudWxsLCByZXF1ZXN0SWQsIGFyZywgZXJyLnBheWxvYWQsIGVyci5tZXRhKVxyXG4gICAgICAgICAgICAgICAgOiByZWplY3RlZChlcnIgYXMgYW55LCByZXF1ZXN0SWQsIGFyZylcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIFdlIGRpc3BhdGNoIHRoZSByZXN1bHQgYWN0aW9uIF9hZnRlcl8gdGhlIGNhdGNoLCB0byBhdm9pZCBoYXZpbmcgYW55IGVycm9yc1xyXG4gICAgICAgICAgLy8gaGVyZSBnZXQgc3dhbGxvd2VkIGJ5IHRoZSB0cnkvY2F0Y2ggYmxvY2ssXHJcbiAgICAgICAgICAvLyBwZXIgaHR0cHM6Ly90d2l0dGVyLmNvbS9kYW5fYWJyYW1vdi9zdGF0dXMvNzcwOTE0MjIxNjM4OTQyNzIwXHJcbiAgICAgICAgICAvLyBhbmQgaHR0cHM6Ly9naXRodWIuY29tL3JlZHV4anMvcmVkdXgtdG9vbGtpdC9ibG9iL2U4NWViMTdiMzlhMjExOGQ4NTlmN2I3NzQ2ZTBmM2ZlZTUyM2UwODkvZG9jcy90dXRvcmlhbHMvYWR2YW5jZWQtdHV0b3JpYWwubWQjYXN5bmMtZXJyb3ItaGFuZGxpbmctbG9naWMtaW4tdGh1bmtzXHJcblxyXG4gICAgICAgICAgY29uc3Qgc2tpcERpc3BhdGNoID1cclxuICAgICAgICAgICAgb3B0aW9ucyAmJlxyXG4gICAgICAgICAgICAhb3B0aW9ucy5kaXNwYXRjaENvbmRpdGlvblJlamVjdGlvbiAmJlxyXG4gICAgICAgICAgICByZWplY3RlZC5tYXRjaChmaW5hbEFjdGlvbikgJiZcclxuICAgICAgICAgICAgKGZpbmFsQWN0aW9uIGFzIGFueSkubWV0YS5jb25kaXRpb25cclxuXHJcbiAgICAgICAgICBpZiAoIXNraXBEaXNwYXRjaCkge1xyXG4gICAgICAgICAgICBkaXNwYXRjaChmaW5hbEFjdGlvbilcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBmaW5hbEFjdGlvblxyXG4gICAgICAgIH0pKClcclxuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihwcm9taXNlIGFzIFByb21pc2U8YW55Piwge1xyXG4gICAgICAgICAgYWJvcnQsXHJcbiAgICAgICAgICByZXF1ZXN0SWQsXHJcbiAgICAgICAgICBhcmcsXHJcbiAgICAgICAgICB1bndyYXAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBwcm9taXNlLnRoZW48YW55Pih1bndyYXBSZXN1bHQpXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihcclxuICAgICAgYWN0aW9uQ3JlYXRvciBhcyBBc3luY1RodW5rQWN0aW9uQ3JlYXRvcjxcclxuICAgICAgICBSZXR1cm5lZCxcclxuICAgICAgICBUaHVua0FyZyxcclxuICAgICAgICBUaHVua0FwaUNvbmZpZ1xyXG4gICAgICA+LFxyXG4gICAgICB7XHJcbiAgICAgICAgcGVuZGluZyxcclxuICAgICAgICByZWplY3RlZCxcclxuICAgICAgICBmdWxmaWxsZWQsXHJcbiAgICAgICAgdHlwZVByZWZpeCxcclxuICAgICAgfVxyXG4gICAgKVxyXG4gIH1cclxuICBjcmVhdGVBc3luY1RodW5rLndpdGhUeXBlcyA9ICgpID0+IGNyZWF0ZUFzeW5jVGh1bmtcclxuXHJcbiAgcmV0dXJuIGNyZWF0ZUFzeW5jVGh1bmsgYXMgQ3JlYXRlQXN5bmNUaHVuazxBc3luY1RodW5rQ29uZmlnPlxyXG59KSgpXHJcblxyXG5pbnRlcmZhY2UgVW53cmFwcGFibGVBY3Rpb24ge1xyXG4gIHBheWxvYWQ6IGFueVxyXG4gIG1ldGE/OiBhbnlcclxuICBlcnJvcj86IGFueVxyXG59XHJcblxyXG50eXBlIFVud3JhcHBlZEFjdGlvblBheWxvYWQ8VCBleHRlbmRzIFVud3JhcHBhYmxlQWN0aW9uPiA9IEV4Y2x1ZGU8XHJcbiAgVCxcclxuICB7IGVycm9yOiBhbnkgfVxyXG4+WydwYXlsb2FkJ11cclxuXHJcbi8qKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gdW53cmFwUmVzdWx0PFIgZXh0ZW5kcyBVbndyYXBwYWJsZUFjdGlvbj4oXHJcbiAgYWN0aW9uOiBSXHJcbik6IFVud3JhcHBlZEFjdGlvblBheWxvYWQ8Uj4ge1xyXG4gIGlmIChhY3Rpb24ubWV0YSAmJiBhY3Rpb24ubWV0YS5yZWplY3RlZFdpdGhWYWx1ZSkge1xyXG4gICAgdGhyb3cgYWN0aW9uLnBheWxvYWRcclxuICB9XHJcbiAgaWYgKGFjdGlvbi5lcnJvcikge1xyXG4gICAgdGhyb3cgYWN0aW9uLmVycm9yXHJcbiAgfVxyXG4gIHJldHVybiBhY3Rpb24ucGF5bG9hZFxyXG59XHJcblxyXG50eXBlIFdpdGhTdHJpY3ROdWxsQ2hlY2tzPFRydWUsIEZhbHNlPiA9IHVuZGVmaW5lZCBleHRlbmRzIGJvb2xlYW5cclxuICA/IEZhbHNlXHJcbiAgOiBUcnVlXHJcblxyXG5mdW5jdGlvbiBpc1RoZW5hYmxlKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBQcm9taXNlTGlrZTxhbnk+IHtcclxuICByZXR1cm4gKFxyXG4gICAgdmFsdWUgIT09IG51bGwgJiZcclxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcclxuICAgIHR5cGVvZiB2YWx1ZS50aGVuID09PSAnZnVuY3Rpb24nXHJcbiAgKVxyXG59XHJcbiIsICJpbXBvcnQgdHlwZSB7XHJcbiAgQWN0aW9uRnJvbU1hdGNoZXIsXHJcbiAgTWF0Y2hlcixcclxuICBVbmlvblRvSW50ZXJzZWN0aW9uLFxyXG59IGZyb20gJy4vdHNIZWxwZXJzJ1xyXG5pbXBvcnQgeyBoYXNNYXRjaEZ1bmN0aW9uIH0gZnJvbSAnLi90c0hlbHBlcnMnXHJcbmltcG9ydCB0eXBlIHtcclxuICBBc3luY1RodW5rLFxyXG4gIEFzeW5jVGh1bmtGdWxmaWxsZWRBY3Rpb25DcmVhdG9yLFxyXG4gIEFzeW5jVGh1bmtQZW5kaW5nQWN0aW9uQ3JlYXRvcixcclxuICBBc3luY1RodW5rUmVqZWN0ZWRBY3Rpb25DcmVhdG9yLFxyXG59IGZyb20gJy4vY3JlYXRlQXN5bmNUaHVuaydcclxuXHJcbi8qKiBAcHVibGljICovXHJcbmV4cG9ydCB0eXBlIEFjdGlvbk1hdGNoaW5nQW55T2Y8TWF0Y2hlcnMgZXh0ZW5kcyBbLi4uTWF0Y2hlcjxhbnk+W11dPiA9XHJcbiAgQWN0aW9uRnJvbU1hdGNoZXI8TWF0Y2hlcnNbbnVtYmVyXT5cclxuXHJcbi8qKiBAcHVibGljICovXHJcbmV4cG9ydCB0eXBlIEFjdGlvbk1hdGNoaW5nQWxsT2Y8TWF0Y2hlcnMgZXh0ZW5kcyBbLi4uTWF0Y2hlcjxhbnk+W11dPiA9XHJcbiAgVW5pb25Ub0ludGVyc2VjdGlvbjxBY3Rpb25NYXRjaGluZ0FueU9mPE1hdGNoZXJzPj5cclxuXHJcbmNvbnN0IG1hdGNoZXMgPSAobWF0Y2hlcjogTWF0Y2hlcjxhbnk+LCBhY3Rpb246IGFueSkgPT4ge1xyXG4gIGlmIChoYXNNYXRjaEZ1bmN0aW9uKG1hdGNoZXIpKSB7XHJcbiAgICByZXR1cm4gbWF0Y2hlci5tYXRjaChhY3Rpb24pXHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiBtYXRjaGVyKGFjdGlvbilcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBIGhpZ2hlci1vcmRlciBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBmdW5jdGlvbiB0aGF0IG1heSBiZSB1c2VkIHRvIGNoZWNrXHJcbiAqIHdoZXRoZXIgYW4gYWN0aW9uIG1hdGNoZXMgYW55IG9uZSBvZiB0aGUgc3VwcGxpZWQgdHlwZSBndWFyZHMgb3IgYWN0aW9uXHJcbiAqIGNyZWF0b3JzLlxyXG4gKlxyXG4gKiBAcGFyYW0gbWF0Y2hlcnMgVGhlIHR5cGUgZ3VhcmRzIG9yIGFjdGlvbiBjcmVhdG9ycyB0byBtYXRjaCBhZ2FpbnN0LlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNBbnlPZjxNYXRjaGVycyBleHRlbmRzIFsuLi5NYXRjaGVyPGFueT5bXV0+KFxyXG4gIC4uLm1hdGNoZXJzOiBNYXRjaGVyc1xyXG4pIHtcclxuICByZXR1cm4gKGFjdGlvbjogYW55KTogYWN0aW9uIGlzIEFjdGlvbk1hdGNoaW5nQW55T2Y8TWF0Y2hlcnM+ID0+IHtcclxuICAgIHJldHVybiBtYXRjaGVycy5zb21lKChtYXRjaGVyKSA9PiBtYXRjaGVzKG1hdGNoZXIsIGFjdGlvbikpXHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogQSBoaWdoZXItb3JkZXIgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBtYXkgYmUgdXNlZCB0byBjaGVja1xyXG4gKiB3aGV0aGVyIGFuIGFjdGlvbiBtYXRjaGVzIGFsbCBvZiB0aGUgc3VwcGxpZWQgdHlwZSBndWFyZHMgb3IgYWN0aW9uXHJcbiAqIGNyZWF0b3JzLlxyXG4gKlxyXG4gKiBAcGFyYW0gbWF0Y2hlcnMgVGhlIHR5cGUgZ3VhcmRzIG9yIGFjdGlvbiBjcmVhdG9ycyB0byBtYXRjaCBhZ2FpbnN0LlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNBbGxPZjxNYXRjaGVycyBleHRlbmRzIFsuLi5NYXRjaGVyPGFueT5bXV0+KFxyXG4gIC4uLm1hdGNoZXJzOiBNYXRjaGVyc1xyXG4pIHtcclxuICByZXR1cm4gKGFjdGlvbjogYW55KTogYWN0aW9uIGlzIEFjdGlvbk1hdGNoaW5nQWxsT2Y8TWF0Y2hlcnM+ID0+IHtcclxuICAgIHJldHVybiBtYXRjaGVycy5ldmVyeSgobWF0Y2hlcikgPT4gbWF0Y2hlcyhtYXRjaGVyLCBhY3Rpb24pKVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSBhY3Rpb24gQSByZWR1eCBhY3Rpb25cclxuICogQHBhcmFtIHZhbGlkU3RhdHVzIEFuIGFycmF5IG9mIHZhbGlkIG1ldGEucmVxdWVzdFN0YXR1cyB2YWx1ZXNcclxuICpcclxuICogQGludGVybmFsXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaGFzRXhwZWN0ZWRSZXF1ZXN0TWV0YWRhdGEoXHJcbiAgYWN0aW9uOiBhbnksXHJcbiAgdmFsaWRTdGF0dXM6IHJlYWRvbmx5IHN0cmluZ1tdXHJcbikge1xyXG4gIGlmICghYWN0aW9uIHx8ICFhY3Rpb24ubWV0YSkgcmV0dXJuIGZhbHNlXHJcblxyXG4gIGNvbnN0IGhhc1ZhbGlkUmVxdWVzdElkID0gdHlwZW9mIGFjdGlvbi5tZXRhLnJlcXVlc3RJZCA9PT0gJ3N0cmluZydcclxuICBjb25zdCBoYXNWYWxpZFJlcXVlc3RTdGF0dXMgPVxyXG4gICAgdmFsaWRTdGF0dXMuaW5kZXhPZihhY3Rpb24ubWV0YS5yZXF1ZXN0U3RhdHVzKSA+IC0xXHJcblxyXG4gIHJldHVybiBoYXNWYWxpZFJlcXVlc3RJZCAmJiBoYXNWYWxpZFJlcXVlc3RTdGF0dXNcclxufVxyXG5cclxuZnVuY3Rpb24gaXNBc3luY1RodW5rQXJyYXkoYTogW2FueV0gfCBBbnlBc3luY1RodW5rW10pOiBhIGlzIEFueUFzeW5jVGh1bmtbXSB7XHJcbiAgcmV0dXJuIChcclxuICAgIHR5cGVvZiBhWzBdID09PSAnZnVuY3Rpb24nICYmXHJcbiAgICAncGVuZGluZycgaW4gYVswXSAmJlxyXG4gICAgJ2Z1bGZpbGxlZCcgaW4gYVswXSAmJlxyXG4gICAgJ3JlamVjdGVkJyBpbiBhWzBdXHJcbiAgKVxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBVbmtub3duQXN5bmNUaHVua1BlbmRpbmdBY3Rpb24gPSBSZXR1cm5UeXBlPFxyXG4gIEFzeW5jVGh1bmtQZW5kaW5nQWN0aW9uQ3JlYXRvcjx1bmtub3duPlxyXG4+XHJcblxyXG5leHBvcnQgdHlwZSBQZW5kaW5nQWN0aW9uRnJvbUFzeW5jVGh1bms8VCBleHRlbmRzIEFueUFzeW5jVGh1bms+ID1cclxuICBBY3Rpb25Gcm9tTWF0Y2hlcjxUWydwZW5kaW5nJ10+XHJcblxyXG4vKipcclxuICogQSBoaWdoZXItb3JkZXIgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBtYXkgYmUgdXNlZCB0byBjaGVja1xyXG4gKiB3aGV0aGVyIGFuIGFjdGlvbiB3YXMgY3JlYXRlZCBieSBhbiBhc3luYyB0aHVuayBhY3Rpb24gY3JlYXRvciwgYW5kIHRoYXRcclxuICogdGhlIGFjdGlvbiBpcyBwZW5kaW5nLlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNQZW5kaW5nKCk6IChcclxuICBhY3Rpb246IGFueVxyXG4pID0+IGFjdGlvbiBpcyBVbmtub3duQXN5bmNUaHVua1BlbmRpbmdBY3Rpb25cclxuLyoqXHJcbiAqIEEgaGlnaGVyLW9yZGVyIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgbWF5IGJlIHVzZWQgdG8gY2hlY2tcclxuICogd2hldGhlciBhbiBhY3Rpb24gYmVsb25ncyB0byBvbmUgb2YgdGhlIHByb3ZpZGVkIGFzeW5jIHRodW5rIGFjdGlvbiBjcmVhdG9ycyxcclxuICogYW5kIHRoYXQgdGhlIGFjdGlvbiBpcyBwZW5kaW5nLlxyXG4gKlxyXG4gKiBAcGFyYW0gYXN5bmNUaHVua3MgKG9wdGlvbmFsKSBUaGUgYXN5bmMgdGh1bmsgYWN0aW9uIGNyZWF0b3JzIHRvIG1hdGNoIGFnYWluc3QuXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1BlbmRpbmc8XHJcbiAgQXN5bmNUaHVua3MgZXh0ZW5kcyBbQW55QXN5bmNUaHVuaywgLi4uQW55QXN5bmNUaHVua1tdXVxyXG4+KFxyXG4gIC4uLmFzeW5jVGh1bmtzOiBBc3luY1RodW5rc1xyXG4pOiAoYWN0aW9uOiBhbnkpID0+IGFjdGlvbiBpcyBQZW5kaW5nQWN0aW9uRnJvbUFzeW5jVGh1bms8QXN5bmNUaHVua3NbbnVtYmVyXT5cclxuLyoqXHJcbiAqIFRlc3RzIGlmIGBhY3Rpb25gIGlzIGEgcGVuZGluZyB0aHVuayBhY3Rpb25cclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzUGVuZGluZyhhY3Rpb246IGFueSk6IGFjdGlvbiBpcyBVbmtub3duQXN5bmNUaHVua1BlbmRpbmdBY3Rpb25cclxuZXhwb3J0IGZ1bmN0aW9uIGlzUGVuZGluZzxcclxuICBBc3luY1RodW5rcyBleHRlbmRzIFtBbnlBc3luY1RodW5rLCAuLi5BbnlBc3luY1RodW5rW11dXHJcbj4oLi4uYXN5bmNUaHVua3M6IEFzeW5jVGh1bmtzIHwgW2FueV0pIHtcclxuICBpZiAoYXN5bmNUaHVua3MubGVuZ3RoID09PSAwKSB7XHJcbiAgICByZXR1cm4gKGFjdGlvbjogYW55KSA9PiBoYXNFeHBlY3RlZFJlcXVlc3RNZXRhZGF0YShhY3Rpb24sIFsncGVuZGluZyddKVxyXG4gIH1cclxuXHJcbiAgaWYgKCFpc0FzeW5jVGh1bmtBcnJheShhc3luY1RodW5rcykpIHtcclxuICAgIHJldHVybiBpc1BlbmRpbmcoKShhc3luY1RodW5rc1swXSlcclxuICB9XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICBhY3Rpb246IGFueVxyXG4gICk6IGFjdGlvbiBpcyBQZW5kaW5nQWN0aW9uRnJvbUFzeW5jVGh1bms8QXN5bmNUaHVua3NbbnVtYmVyXT4gPT4ge1xyXG4gICAgLy8gbm90ZTogdGhpcyB0eXBlIHdpbGwgYmUgY29ycmVjdCBiZWNhdXNlIHdlIGhhdmUgYXQgbGVhc3QgMSBhc3luY1RodW5rXHJcbiAgICBjb25zdCBtYXRjaGVyczogW01hdGNoZXI8YW55PiwgLi4uTWF0Y2hlcjxhbnk+W11dID0gYXN5bmNUaHVua3MubWFwKFxyXG4gICAgICAoYXN5bmNUaHVuaykgPT4gYXN5bmNUaHVuay5wZW5kaW5nXHJcbiAgICApIGFzIGFueVxyXG5cclxuICAgIGNvbnN0IGNvbWJpbmVkTWF0Y2hlciA9IGlzQW55T2YoLi4ubWF0Y2hlcnMpXHJcblxyXG4gICAgcmV0dXJuIGNvbWJpbmVkTWF0Y2hlcihhY3Rpb24pXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBVbmtub3duQXN5bmNUaHVua1JlamVjdGVkQWN0aW9uID0gUmV0dXJuVHlwZTxcclxuICBBc3luY1RodW5rUmVqZWN0ZWRBY3Rpb25DcmVhdG9yPHVua25vd24sIHVua25vd24+XHJcbj5cclxuXHJcbmV4cG9ydCB0eXBlIFJlamVjdGVkQWN0aW9uRnJvbUFzeW5jVGh1bms8VCBleHRlbmRzIEFueUFzeW5jVGh1bms+ID1cclxuICBBY3Rpb25Gcm9tTWF0Y2hlcjxUWydyZWplY3RlZCddPlxyXG5cclxuLyoqXHJcbiAqIEEgaGlnaGVyLW9yZGVyIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgbWF5IGJlIHVzZWQgdG8gY2hlY2tcclxuICogd2hldGhlciBhbiBhY3Rpb24gd2FzIGNyZWF0ZWQgYnkgYW4gYXN5bmMgdGh1bmsgYWN0aW9uIGNyZWF0b3IsIGFuZCB0aGF0XHJcbiAqIHRoZSBhY3Rpb24gaXMgcmVqZWN0ZWQuXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1JlamVjdGVkKCk6IChcclxuICBhY3Rpb246IGFueVxyXG4pID0+IGFjdGlvbiBpcyBVbmtub3duQXN5bmNUaHVua1JlamVjdGVkQWN0aW9uXHJcbi8qKlxyXG4gKiBBIGhpZ2hlci1vcmRlciBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBmdW5jdGlvbiB0aGF0IG1heSBiZSB1c2VkIHRvIGNoZWNrXHJcbiAqIHdoZXRoZXIgYW4gYWN0aW9uIGJlbG9uZ3MgdG8gb25lIG9mIHRoZSBwcm92aWRlZCBhc3luYyB0aHVuayBhY3Rpb24gY3JlYXRvcnMsXHJcbiAqIGFuZCB0aGF0IHRoZSBhY3Rpb24gaXMgcmVqZWN0ZWQuXHJcbiAqXHJcbiAqIEBwYXJhbSBhc3luY1RodW5rcyAob3B0aW9uYWwpIFRoZSBhc3luYyB0aHVuayBhY3Rpb24gY3JlYXRvcnMgdG8gbWF0Y2ggYWdhaW5zdC5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzUmVqZWN0ZWQ8XHJcbiAgQXN5bmNUaHVua3MgZXh0ZW5kcyBbQW55QXN5bmNUaHVuaywgLi4uQW55QXN5bmNUaHVua1tdXVxyXG4+KFxyXG4gIC4uLmFzeW5jVGh1bmtzOiBBc3luY1RodW5rc1xyXG4pOiAoYWN0aW9uOiBhbnkpID0+IGFjdGlvbiBpcyBSZWplY3RlZEFjdGlvbkZyb21Bc3luY1RodW5rPEFzeW5jVGh1bmtzW251bWJlcl0+XHJcbi8qKlxyXG4gKiBUZXN0cyBpZiBgYWN0aW9uYCBpcyBhIHJlamVjdGVkIHRodW5rIGFjdGlvblxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNSZWplY3RlZChcclxuICBhY3Rpb246IGFueVxyXG4pOiBhY3Rpb24gaXMgVW5rbm93bkFzeW5jVGh1bmtSZWplY3RlZEFjdGlvblxyXG5leHBvcnQgZnVuY3Rpb24gaXNSZWplY3RlZDxcclxuICBBc3luY1RodW5rcyBleHRlbmRzIFtBbnlBc3luY1RodW5rLCAuLi5BbnlBc3luY1RodW5rW11dXHJcbj4oLi4uYXN5bmNUaHVua3M6IEFzeW5jVGh1bmtzIHwgW2FueV0pIHtcclxuICBpZiAoYXN5bmNUaHVua3MubGVuZ3RoID09PSAwKSB7XHJcbiAgICByZXR1cm4gKGFjdGlvbjogYW55KSA9PiBoYXNFeHBlY3RlZFJlcXVlc3RNZXRhZGF0YShhY3Rpb24sIFsncmVqZWN0ZWQnXSlcclxuICB9XHJcblxyXG4gIGlmICghaXNBc3luY1RodW5rQXJyYXkoYXN5bmNUaHVua3MpKSB7XHJcbiAgICByZXR1cm4gaXNSZWplY3RlZCgpKGFzeW5jVGh1bmtzWzBdKVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIChcclxuICAgIGFjdGlvbjogYW55XHJcbiAgKTogYWN0aW9uIGlzIFJlamVjdGVkQWN0aW9uRnJvbUFzeW5jVGh1bms8QXN5bmNUaHVua3NbbnVtYmVyXT4gPT4ge1xyXG4gICAgLy8gbm90ZTogdGhpcyB0eXBlIHdpbGwgYmUgY29ycmVjdCBiZWNhdXNlIHdlIGhhdmUgYXQgbGVhc3QgMSBhc3luY1RodW5rXHJcbiAgICBjb25zdCBtYXRjaGVyczogW01hdGNoZXI8YW55PiwgLi4uTWF0Y2hlcjxhbnk+W11dID0gYXN5bmNUaHVua3MubWFwKFxyXG4gICAgICAoYXN5bmNUaHVuaykgPT4gYXN5bmNUaHVuay5yZWplY3RlZFxyXG4gICAgKSBhcyBhbnlcclxuXHJcbiAgICBjb25zdCBjb21iaW5lZE1hdGNoZXIgPSBpc0FueU9mKC4uLm1hdGNoZXJzKVxyXG5cclxuICAgIHJldHVybiBjb21iaW5lZE1hdGNoZXIoYWN0aW9uKVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IHR5cGUgVW5rbm93bkFzeW5jVGh1bmtSZWplY3RlZFdpdGhWYWx1ZUFjdGlvbiA9IFJldHVyblR5cGU8XHJcbiAgQXN5bmNUaHVua1JlamVjdGVkQWN0aW9uQ3JlYXRvcjx1bmtub3duLCB1bmtub3duPlxyXG4+XHJcblxyXG5leHBvcnQgdHlwZSBSZWplY3RlZFdpdGhWYWx1ZUFjdGlvbkZyb21Bc3luY1RodW5rPFQgZXh0ZW5kcyBBbnlBc3luY1RodW5rPiA9XHJcbiAgQWN0aW9uRnJvbU1hdGNoZXI8VFsncmVqZWN0ZWQnXT4gJlxyXG4gICAgKFQgZXh0ZW5kcyBBc3luY1RodW5rPGFueSwgYW55LCB7IHJlamVjdFZhbHVlOiBpbmZlciBSZWplY3RlZFZhbHVlIH0+XHJcbiAgICAgID8geyBwYXlsb2FkOiBSZWplY3RlZFZhbHVlIH1cclxuICAgICAgOiB1bmtub3duKVxyXG5cclxuLyoqXHJcbiAqIEEgaGlnaGVyLW9yZGVyIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgbWF5IGJlIHVzZWQgdG8gY2hlY2tcclxuICogd2hldGhlciBhbiBhY3Rpb24gd2FzIGNyZWF0ZWQgYnkgYW4gYXN5bmMgdGh1bmsgYWN0aW9uIGNyZWF0b3IsIGFuZCB0aGF0XHJcbiAqIHRoZSBhY3Rpb24gaXMgcmVqZWN0ZWQgd2l0aCB2YWx1ZS5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzUmVqZWN0ZWRXaXRoVmFsdWUoKTogKFxyXG4gIGFjdGlvbjogYW55XHJcbikgPT4gYWN0aW9uIGlzIFVua25vd25Bc3luY1RodW5rUmVqZWN0ZWRBY3Rpb25cclxuLyoqXHJcbiAqIEEgaGlnaGVyLW9yZGVyIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgbWF5IGJlIHVzZWQgdG8gY2hlY2tcclxuICogd2hldGhlciBhbiBhY3Rpb24gYmVsb25ncyB0byBvbmUgb2YgdGhlIHByb3ZpZGVkIGFzeW5jIHRodW5rIGFjdGlvbiBjcmVhdG9ycyxcclxuICogYW5kIHRoYXQgdGhlIGFjdGlvbiBpcyByZWplY3RlZCB3aXRoIHZhbHVlLlxyXG4gKlxyXG4gKiBAcGFyYW0gYXN5bmNUaHVua3MgKG9wdGlvbmFsKSBUaGUgYXN5bmMgdGh1bmsgYWN0aW9uIGNyZWF0b3JzIHRvIG1hdGNoIGFnYWluc3QuXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1JlamVjdGVkV2l0aFZhbHVlPFxyXG4gIEFzeW5jVGh1bmtzIGV4dGVuZHMgW0FueUFzeW5jVGh1bmssIC4uLkFueUFzeW5jVGh1bmtbXV1cclxuPihcclxuICAuLi5hc3luY1RodW5rczogQXN5bmNUaHVua3NcclxuKTogKFxyXG4gIGFjdGlvbjogYW55XHJcbikgPT4gYWN0aW9uIGlzIFJlamVjdGVkV2l0aFZhbHVlQWN0aW9uRnJvbUFzeW5jVGh1bms8QXN5bmNUaHVua3NbbnVtYmVyXT5cclxuLyoqXHJcbiAqIFRlc3RzIGlmIGBhY3Rpb25gIGlzIGEgcmVqZWN0ZWQgdGh1bmsgYWN0aW9uIHdpdGggdmFsdWVcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzUmVqZWN0ZWRXaXRoVmFsdWUoXHJcbiAgYWN0aW9uOiBhbnlcclxuKTogYWN0aW9uIGlzIFVua25vd25Bc3luY1RodW5rUmVqZWN0ZWRBY3Rpb25cclxuZXhwb3J0IGZ1bmN0aW9uIGlzUmVqZWN0ZWRXaXRoVmFsdWU8XHJcbiAgQXN5bmNUaHVua3MgZXh0ZW5kcyBbQW55QXN5bmNUaHVuaywgLi4uQW55QXN5bmNUaHVua1tdXVxyXG4+KC4uLmFzeW5jVGh1bmtzOiBBc3luY1RodW5rcyB8IFthbnldKSB7XHJcbiAgY29uc3QgaGFzRmxhZyA9IChhY3Rpb246IGFueSk6IGFjdGlvbiBpcyBhbnkgPT4ge1xyXG4gICAgcmV0dXJuIGFjdGlvbiAmJiBhY3Rpb24ubWV0YSAmJiBhY3Rpb24ubWV0YS5yZWplY3RlZFdpdGhWYWx1ZVxyXG4gIH1cclxuXHJcbiAgaWYgKGFzeW5jVGh1bmtzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgcmV0dXJuIChhY3Rpb246IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCBjb21iaW5lZE1hdGNoZXIgPSBpc0FsbE9mKGlzUmVqZWN0ZWQoLi4uYXN5bmNUaHVua3MpLCBoYXNGbGFnKVxyXG5cclxuICAgICAgcmV0dXJuIGNvbWJpbmVkTWF0Y2hlcihhY3Rpb24pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpZiAoIWlzQXN5bmNUaHVua0FycmF5KGFzeW5jVGh1bmtzKSkge1xyXG4gICAgcmV0dXJuIGlzUmVqZWN0ZWRXaXRoVmFsdWUoKShhc3luY1RodW5rc1swXSlcclxuICB9XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICBhY3Rpb246IGFueVxyXG4gICk6IGFjdGlvbiBpcyBSZWplY3RlZEFjdGlvbkZyb21Bc3luY1RodW5rPEFzeW5jVGh1bmtzW251bWJlcl0+ID0+IHtcclxuICAgIGNvbnN0IGNvbWJpbmVkTWF0Y2hlciA9IGlzQWxsT2YoaXNSZWplY3RlZCguLi5hc3luY1RodW5rcyksIGhhc0ZsYWcpXHJcblxyXG4gICAgcmV0dXJuIGNvbWJpbmVkTWF0Y2hlcihhY3Rpb24pXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBVbmtub3duQXN5bmNUaHVua0Z1bGZpbGxlZEFjdGlvbiA9IFJldHVyblR5cGU8XHJcbiAgQXN5bmNUaHVua0Z1bGZpbGxlZEFjdGlvbkNyZWF0b3I8dW5rbm93biwgdW5rbm93bj5cclxuPlxyXG5cclxuZXhwb3J0IHR5cGUgRnVsZmlsbGVkQWN0aW9uRnJvbUFzeW5jVGh1bms8VCBleHRlbmRzIEFueUFzeW5jVGh1bms+ID1cclxuICBBY3Rpb25Gcm9tTWF0Y2hlcjxUWydmdWxmaWxsZWQnXT5cclxuXHJcbi8qKlxyXG4gKiBBIGhpZ2hlci1vcmRlciBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBmdW5jdGlvbiB0aGF0IG1heSBiZSB1c2VkIHRvIGNoZWNrXHJcbiAqIHdoZXRoZXIgYW4gYWN0aW9uIHdhcyBjcmVhdGVkIGJ5IGFuIGFzeW5jIHRodW5rIGFjdGlvbiBjcmVhdG9yLCBhbmQgdGhhdFxyXG4gKiB0aGUgYWN0aW9uIGlzIGZ1bGZpbGxlZC5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzRnVsZmlsbGVkKCk6IChcclxuICBhY3Rpb246IGFueVxyXG4pID0+IGFjdGlvbiBpcyBVbmtub3duQXN5bmNUaHVua0Z1bGZpbGxlZEFjdGlvblxyXG4vKipcclxuICogQSBoaWdoZXItb3JkZXIgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBtYXkgYmUgdXNlZCB0byBjaGVja1xyXG4gKiB3aGV0aGVyIGFuIGFjdGlvbiBiZWxvbmdzIHRvIG9uZSBvZiB0aGUgcHJvdmlkZWQgYXN5bmMgdGh1bmsgYWN0aW9uIGNyZWF0b3JzLFxyXG4gKiBhbmQgdGhhdCB0aGUgYWN0aW9uIGlzIGZ1bGZpbGxlZC5cclxuICpcclxuICogQHBhcmFtIGFzeW5jVGh1bmtzIChvcHRpb25hbCkgVGhlIGFzeW5jIHRodW5rIGFjdGlvbiBjcmVhdG9ycyB0byBtYXRjaCBhZ2FpbnN0LlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNGdWxmaWxsZWQ8XHJcbiAgQXN5bmNUaHVua3MgZXh0ZW5kcyBbQW55QXN5bmNUaHVuaywgLi4uQW55QXN5bmNUaHVua1tdXVxyXG4+KFxyXG4gIC4uLmFzeW5jVGh1bmtzOiBBc3luY1RodW5rc1xyXG4pOiAoYWN0aW9uOiBhbnkpID0+IGFjdGlvbiBpcyBGdWxmaWxsZWRBY3Rpb25Gcm9tQXN5bmNUaHVuazxBc3luY1RodW5rc1tudW1iZXJdPlxyXG4vKipcclxuICogVGVzdHMgaWYgYGFjdGlvbmAgaXMgYSBmdWxmaWxsZWQgdGh1bmsgYWN0aW9uXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0Z1bGZpbGxlZChcclxuICBhY3Rpb246IGFueVxyXG4pOiBhY3Rpb24gaXMgVW5rbm93bkFzeW5jVGh1bmtGdWxmaWxsZWRBY3Rpb25cclxuZXhwb3J0IGZ1bmN0aW9uIGlzRnVsZmlsbGVkPFxyXG4gIEFzeW5jVGh1bmtzIGV4dGVuZHMgW0FueUFzeW5jVGh1bmssIC4uLkFueUFzeW5jVGh1bmtbXV1cclxuPiguLi5hc3luY1RodW5rczogQXN5bmNUaHVua3MgfCBbYW55XSkge1xyXG4gIGlmIChhc3luY1RodW5rcy5sZW5ndGggPT09IDApIHtcclxuICAgIHJldHVybiAoYWN0aW9uOiBhbnkpID0+IGhhc0V4cGVjdGVkUmVxdWVzdE1ldGFkYXRhKGFjdGlvbiwgWydmdWxmaWxsZWQnXSlcclxuICB9XHJcblxyXG4gIGlmICghaXNBc3luY1RodW5rQXJyYXkoYXN5bmNUaHVua3MpKSB7XHJcbiAgICByZXR1cm4gaXNGdWxmaWxsZWQoKShhc3luY1RodW5rc1swXSlcclxuICB9XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICBhY3Rpb246IGFueVxyXG4gICk6IGFjdGlvbiBpcyBGdWxmaWxsZWRBY3Rpb25Gcm9tQXN5bmNUaHVuazxBc3luY1RodW5rc1tudW1iZXJdPiA9PiB7XHJcbiAgICAvLyBub3RlOiB0aGlzIHR5cGUgd2lsbCBiZSBjb3JyZWN0IGJlY2F1c2Ugd2UgaGF2ZSBhdCBsZWFzdCAxIGFzeW5jVGh1bmtcclxuICAgIGNvbnN0IG1hdGNoZXJzOiBbTWF0Y2hlcjxhbnk+LCAuLi5NYXRjaGVyPGFueT5bXV0gPSBhc3luY1RodW5rcy5tYXAoXHJcbiAgICAgIChhc3luY1RodW5rKSA9PiBhc3luY1RodW5rLmZ1bGZpbGxlZFxyXG4gICAgKSBhcyBhbnlcclxuXHJcbiAgICBjb25zdCBjb21iaW5lZE1hdGNoZXIgPSBpc0FueU9mKC4uLm1hdGNoZXJzKVxyXG5cclxuICAgIHJldHVybiBjb21iaW5lZE1hdGNoZXIoYWN0aW9uKVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IHR5cGUgVW5rbm93bkFzeW5jVGh1bmtBY3Rpb24gPVxyXG4gIHwgVW5rbm93bkFzeW5jVGh1bmtQZW5kaW5nQWN0aW9uXHJcbiAgfCBVbmtub3duQXN5bmNUaHVua1JlamVjdGVkQWN0aW9uXHJcbiAgfCBVbmtub3duQXN5bmNUaHVua0Z1bGZpbGxlZEFjdGlvblxyXG5cclxuZXhwb3J0IHR5cGUgQW55QXN5bmNUaHVuayA9IHtcclxuICBwZW5kaW5nOiB7IG1hdGNoOiAoYWN0aW9uOiBhbnkpID0+IGFjdGlvbiBpcyBhbnkgfVxyXG4gIGZ1bGZpbGxlZDogeyBtYXRjaDogKGFjdGlvbjogYW55KSA9PiBhY3Rpb24gaXMgYW55IH1cclxuICByZWplY3RlZDogeyBtYXRjaDogKGFjdGlvbjogYW55KSA9PiBhY3Rpb24gaXMgYW55IH1cclxufVxyXG5cclxuZXhwb3J0IHR5cGUgQWN0aW9uc0Zyb21Bc3luY1RodW5rPFQgZXh0ZW5kcyBBbnlBc3luY1RodW5rPiA9XHJcbiAgfCBBY3Rpb25Gcm9tTWF0Y2hlcjxUWydwZW5kaW5nJ10+XHJcbiAgfCBBY3Rpb25Gcm9tTWF0Y2hlcjxUWydmdWxmaWxsZWQnXT5cclxuICB8IEFjdGlvbkZyb21NYXRjaGVyPFRbJ3JlamVjdGVkJ10+XHJcblxyXG4vKipcclxuICogQSBoaWdoZXItb3JkZXIgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBtYXkgYmUgdXNlZCB0byBjaGVja1xyXG4gKiB3aGV0aGVyIGFuIGFjdGlvbiB3YXMgY3JlYXRlZCBieSBhbiBhc3luYyB0aHVuayBhY3Rpb24gY3JlYXRvci5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzQXN5bmNUaHVua0FjdGlvbigpOiAoXHJcbiAgYWN0aW9uOiBhbnlcclxuKSA9PiBhY3Rpb24gaXMgVW5rbm93bkFzeW5jVGh1bmtBY3Rpb25cclxuLyoqXHJcbiAqIEEgaGlnaGVyLW9yZGVyIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgbWF5IGJlIHVzZWQgdG8gY2hlY2tcclxuICogd2hldGhlciBhbiBhY3Rpb24gYmVsb25ncyB0byBvbmUgb2YgdGhlIHByb3ZpZGVkIGFzeW5jIHRodW5rIGFjdGlvbiBjcmVhdG9ycy5cclxuICpcclxuICogQHBhcmFtIGFzeW5jVGh1bmtzIChvcHRpb25hbCkgVGhlIGFzeW5jIHRodW5rIGFjdGlvbiBjcmVhdG9ycyB0byBtYXRjaCBhZ2FpbnN0LlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNBc3luY1RodW5rQWN0aW9uPFxyXG4gIEFzeW5jVGh1bmtzIGV4dGVuZHMgW0FueUFzeW5jVGh1bmssIC4uLkFueUFzeW5jVGh1bmtbXV1cclxuPihcclxuICAuLi5hc3luY1RodW5rczogQXN5bmNUaHVua3NcclxuKTogKGFjdGlvbjogYW55KSA9PiBhY3Rpb24gaXMgQWN0aW9uc0Zyb21Bc3luY1RodW5rPEFzeW5jVGh1bmtzW251bWJlcl0+XHJcbi8qKlxyXG4gKiBUZXN0cyBpZiBgYWN0aW9uYCBpcyBhIHRodW5rIGFjdGlvblxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNBc3luY1RodW5rQWN0aW9uKFxyXG4gIGFjdGlvbjogYW55XHJcbik6IGFjdGlvbiBpcyBVbmtub3duQXN5bmNUaHVua0FjdGlvblxyXG5leHBvcnQgZnVuY3Rpb24gaXNBc3luY1RodW5rQWN0aW9uPFxyXG4gIEFzeW5jVGh1bmtzIGV4dGVuZHMgW0FueUFzeW5jVGh1bmssIC4uLkFueUFzeW5jVGh1bmtbXV1cclxuPiguLi5hc3luY1RodW5rczogQXN5bmNUaHVua3MgfCBbYW55XSkge1xyXG4gIGlmIChhc3luY1RodW5rcy5sZW5ndGggPT09IDApIHtcclxuICAgIHJldHVybiAoYWN0aW9uOiBhbnkpID0+XHJcbiAgICAgIGhhc0V4cGVjdGVkUmVxdWVzdE1ldGFkYXRhKGFjdGlvbiwgWydwZW5kaW5nJywgJ2Z1bGZpbGxlZCcsICdyZWplY3RlZCddKVxyXG4gIH1cclxuXHJcbiAgaWYgKCFpc0FzeW5jVGh1bmtBcnJheShhc3luY1RodW5rcykpIHtcclxuICAgIHJldHVybiBpc0FzeW5jVGh1bmtBY3Rpb24oKShhc3luY1RodW5rc1swXSlcclxuICB9XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICBhY3Rpb246IGFueVxyXG4gICk6IGFjdGlvbiBpcyBBY3Rpb25zRnJvbUFzeW5jVGh1bms8QXN5bmNUaHVua3NbbnVtYmVyXT4gPT4ge1xyXG4gICAgLy8gbm90ZTogdGhpcyB0eXBlIHdpbGwgYmUgY29ycmVjdCBiZWNhdXNlIHdlIGhhdmUgYXQgbGVhc3QgMSBhc3luY1RodW5rXHJcbiAgICBjb25zdCBtYXRjaGVyczogW01hdGNoZXI8YW55PiwgLi4uTWF0Y2hlcjxhbnk+W11dID0gW10gYXMgYW55XHJcblxyXG4gICAgZm9yIChjb25zdCBhc3luY1RodW5rIG9mIGFzeW5jVGh1bmtzKSB7XHJcbiAgICAgIG1hdGNoZXJzLnB1c2goXHJcbiAgICAgICAgYXN5bmNUaHVuay5wZW5kaW5nLFxyXG4gICAgICAgIGFzeW5jVGh1bmsucmVqZWN0ZWQsXHJcbiAgICAgICAgYXN5bmNUaHVuay5mdWxmaWxsZWRcclxuICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNvbWJpbmVkTWF0Y2hlciA9IGlzQW55T2YoLi4ubWF0Y2hlcnMpXHJcblxyXG4gICAgcmV0dXJuIGNvbWJpbmVkTWF0Y2hlcihhY3Rpb24pXHJcbiAgfVxyXG59XHJcbiIsICJpbXBvcnQgdHlwZSB7IEFib3J0U2lnbmFsV2l0aFJlYXNvbiB9IGZyb20gJy4vdHlwZXMnXHJcblxyXG5leHBvcnQgY29uc3QgYXNzZXJ0RnVuY3Rpb246IChcclxuICBmdW5jOiB1bmtub3duLFxyXG4gIGV4cGVjdGVkOiBzdHJpbmdcclxuKSA9PiBhc3NlcnRzIGZ1bmMgaXMgKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdW5rbm93biA9IChcclxuICBmdW5jOiB1bmtub3duLFxyXG4gIGV4cGVjdGVkOiBzdHJpbmdcclxuKSA9PiB7XHJcbiAgaWYgKHR5cGVvZiBmdW5jICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAke2V4cGVjdGVkfSBpcyBub3QgYSBmdW5jdGlvbmApXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY29uc3Qgbm9vcCA9ICgpID0+IHt9XHJcblxyXG5leHBvcnQgY29uc3QgY2F0Y2hSZWplY3Rpb24gPSA8VD4oXHJcbiAgcHJvbWlzZTogUHJvbWlzZTxUPixcclxuICBvbkVycm9yID0gbm9vcFxyXG4pOiBQcm9taXNlPFQ+ID0+IHtcclxuICBwcm9taXNlLmNhdGNoKG9uRXJyb3IpXHJcblxyXG4gIHJldHVybiBwcm9taXNlXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBhZGRBYm9ydFNpZ25hbExpc3RlbmVyID0gKFxyXG4gIGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbCxcclxuICBjYWxsYmFjazogKGV2dDogRXZlbnQpID0+IHZvaWRcclxuKSA9PiB7XHJcbiAgYWJvcnRTaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBjYWxsYmFjaywgeyBvbmNlOiB0cnVlIH0pXHJcbiAgcmV0dXJuICgpID0+IGFib3J0U2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgY2FsbGJhY2spXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDYWxscyBgYWJvcnRDb250cm9sbGVyLmFib3J0KHJlYXNvbilgIGFuZCBwYXRjaGVzIGBzaWduYWwucmVhc29uYC5cclxuICogaWYgaXQgaXMgbm90IHN1cHBvcnRlZC5cclxuICpcclxuICogQXQgdGhlIHRpbWUgb2Ygd3JpdGluZyBgc2lnbmFsLnJlYXNvbmAgaXMgYXZhaWxhYmxlIGluIEZGIGNocm9tZSwgZWRnZSBub2RlIDE3IGFuZCBkZW5vLlxyXG4gKiBAcGFyYW0gYWJvcnRDb250cm9sbGVyXHJcbiAqIEBwYXJhbSByZWFzb25cclxuICogQHJldHVybnNcclxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvQWJvcnRTaWduYWwvcmVhc29uXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgYWJvcnRDb250cm9sbGVyV2l0aFJlYXNvbiA9IDxUPihcclxuICBhYm9ydENvbnRyb2xsZXI6IEFib3J0Q29udHJvbGxlcixcclxuICByZWFzb246IFRcclxuKTogdm9pZCA9PiB7XHJcbiAgdHlwZSBDb25zdW1lcjxUPiA9ICh2YWw6IFQpID0+IHZvaWRcclxuXHJcbiAgY29uc3Qgc2lnbmFsID0gYWJvcnRDb250cm9sbGVyLnNpZ25hbCBhcyBBYm9ydFNpZ25hbFdpdGhSZWFzb248VD5cclxuXHJcbiAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XHJcbiAgICByZXR1cm5cclxuICB9XHJcblxyXG4gIC8vIFBhdGNoIGByZWFzb25gIGlmIG5lY2Vzc2FyeS5cclxuICAvLyAtIFdlIHVzZSBkZWZpbmVQcm9wZXJ0eSBoZXJlIGJlY2F1c2UgcmVhc29uIGlzIGEgZ2V0dGVyIG9mIGBBYm9ydFNpZ25hbC5fX3Byb3RvX19gLlxyXG4gIC8vIC0gV2UgbmVlZCB0byBwYXRjaCAncmVhc29uJyBiZWZvcmUgY2FsbGluZyBgLmFib3J0KClgIGJlY2F1c2UgbGlzdGVuZXJzIHRvIHRoZSAnYWJvcnQnXHJcbiAgLy8gZXZlbnQgYXJlIGFyZSBub3RpZmllZCBpbW1lZGlhdGVseS5cclxuICBpZiAoISgncmVhc29uJyBpbiBzaWduYWwpKSB7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc2lnbmFsLCAncmVhc29uJywge1xyXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxyXG4gICAgICB2YWx1ZTogcmVhc29uLFxyXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXHJcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIDsoYWJvcnRDb250cm9sbGVyLmFib3J0IGFzIENvbnN1bWVyPHR5cGVvZiByZWFzb24+KShyZWFzb24pXHJcbn1cclxuIiwgImltcG9ydCB0eXBlIHsgU2VyaWFsaXplZEVycm9yIH0gZnJvbSAnQHJlZHV4anMvdG9vbGtpdCdcclxuXHJcbmNvbnN0IHRhc2sgPSAndGFzaydcclxuY29uc3QgbGlzdGVuZXIgPSAnbGlzdGVuZXInXHJcbmNvbnN0IGNvbXBsZXRlZCA9ICdjb21wbGV0ZWQnXHJcbmNvbnN0IGNhbmNlbGxlZCA9ICdjYW5jZWxsZWQnXHJcblxyXG4vKiBUYXNrQWJvcnRFcnJvciBlcnJvciBjb2RlcyAgKi9cclxuZXhwb3J0IGNvbnN0IHRhc2tDYW5jZWxsZWQgPSBgdGFzay0ke2NhbmNlbGxlZH1gIGFzIGNvbnN0XHJcbmV4cG9ydCBjb25zdCB0YXNrQ29tcGxldGVkID0gYHRhc2stJHtjb21wbGV0ZWR9YCBhcyBjb25zdFxyXG5leHBvcnQgY29uc3QgbGlzdGVuZXJDYW5jZWxsZWQgPSBgJHtsaXN0ZW5lcn0tJHtjYW5jZWxsZWR9YCBhcyBjb25zdFxyXG5leHBvcnQgY29uc3QgbGlzdGVuZXJDb21wbGV0ZWQgPSBgJHtsaXN0ZW5lcn0tJHtjb21wbGV0ZWR9YCBhcyBjb25zdFxyXG5cclxuZXhwb3J0IGNsYXNzIFRhc2tBYm9ydEVycm9yIGltcGxlbWVudHMgU2VyaWFsaXplZEVycm9yIHtcclxuICBuYW1lID0gJ1Rhc2tBYm9ydEVycm9yJ1xyXG4gIG1lc3NhZ2U6IHN0cmluZ1xyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBjb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMubWVzc2FnZSA9IGAke3Rhc2t9ICR7Y2FuY2VsbGVkfSAocmVhc29uOiAke2NvZGV9KWBcclxuICB9XHJcbn1cclxuIiwgImltcG9ydCB7IFRhc2tBYm9ydEVycm9yIH0gZnJvbSAnLi9leGNlcHRpb25zJ1xyXG5pbXBvcnQgdHlwZSB7IEFib3J0U2lnbmFsV2l0aFJlYXNvbiwgVGFza1Jlc3VsdCB9IGZyb20gJy4vdHlwZXMnXHJcbmltcG9ydCB7IGFkZEFib3J0U2lnbmFsTGlzdGVuZXIsIGNhdGNoUmVqZWN0aW9uLCBub29wIH0gZnJvbSAnLi91dGlscydcclxuXHJcbi8qKlxyXG4gKiBTeW5jaHJvbm91c2x5IHJhaXNlcyB7QGxpbmsgVGFza0Fib3J0RXJyb3J9IGlmIHRoZSB0YXNrIHRpZWQgdG8gdGhlIGlucHV0IGBzaWduYWxgIGhhcyBiZWVuIGNhbmNlbGxlZC5cclxuICogQHBhcmFtIHNpZ25hbFxyXG4gKiBAcGFyYW0gcmVhc29uXHJcbiAqIEBzZWUge1Rhc2tBYm9ydEVycm9yfVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlQWN0aXZlID0gKHNpZ25hbDogQWJvcnRTaWduYWwpOiB2b2lkID0+IHtcclxuICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcclxuICAgIHRocm93IG5ldyBUYXNrQWJvcnRFcnJvcigoc2lnbmFsIGFzIEFib3J0U2lnbmFsV2l0aFJlYXNvbjxzdHJpbmc+KS5yZWFzb24pXHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogR2VuZXJhdGVzIGEgcmFjZSBiZXR3ZWVuIHRoZSBwcm9taXNlKHMpIGFuZCB0aGUgQWJvcnRTaWduYWxcclxuICogVGhpcyBhdm9pZHMgYFByb21pc2UucmFjZSgpYC1yZWxhdGVkIG1lbW9yeSBsZWFrczpcclxuICogaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2lzc3Vlcy8xNzQ2OSNpc3N1ZWNvbW1lbnQtMzQ5Nzk0OTA5XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gcmFjZVdpdGhTaWduYWw8VD4oXHJcbiAgc2lnbmFsOiBBYm9ydFNpZ25hbFdpdGhSZWFzb248c3RyaW5nPixcclxuICBwcm9taXNlOiBQcm9taXNlPFQ+XHJcbik6IFByb21pc2U8VD4ge1xyXG4gIGxldCBjbGVhbnVwID0gbm9vcFxyXG4gIHJldHVybiBuZXcgUHJvbWlzZTxUPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICBjb25zdCBub3RpZnlSZWplY3Rpb24gPSAoKSA9PiByZWplY3QobmV3IFRhc2tBYm9ydEVycm9yKHNpZ25hbC5yZWFzb24pKVxyXG5cclxuICAgIGlmIChzaWduYWwuYWJvcnRlZCkge1xyXG4gICAgICBub3RpZnlSZWplY3Rpb24oKVxyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuXHJcbiAgICBjbGVhbnVwID0gYWRkQWJvcnRTaWduYWxMaXN0ZW5lcihzaWduYWwsIG5vdGlmeVJlamVjdGlvbilcclxuICAgIHByb21pc2UuZmluYWxseSgoKSA9PiBjbGVhbnVwKCkpLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KVxyXG4gIH0pLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgLy8gYWZ0ZXIgdGhpcyBwb2ludCwgcmVwbGFjZSBgY2xlYW51cGAgd2l0aCBhIG5vb3AsIHNvIHRoZXJlIGlzIG5vIHJlZmVyZW5jZSB0byBgc2lnbmFsYCBhbnkgbW9yZVxyXG4gICAgY2xlYW51cCA9IG5vb3BcclxuICB9KVxyXG59XHJcblxyXG4vKipcclxuICogUnVucyBhIHRhc2sgYW5kIHJldHVybnMgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHtAbGluayBUYXNrUmVzdWx0fS5cclxuICogU2Vjb25kIGFyZ3VtZW50IGlzIGFuIG9wdGlvbmFsIGBjbGVhblVwYCBmdW5jdGlvbiB0aGF0IGFsd2F5cyBydW5zIGFmdGVyIHRhc2suXHJcbiAqXHJcbiAqICoqTm90ZToqKiBgcnVuVGFza2AgcnVucyB0aGUgZXhlY3V0b3IgaW4gdGhlIG5leHQgbWljcm90YXNrLlxyXG4gKiBAcmV0dXJuc1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IHJ1blRhc2sgPSBhc3luYyA8VD4oXHJcbiAgdGFzazogKCkgPT4gUHJvbWlzZTxUPixcclxuICBjbGVhblVwPzogKCkgPT4gdm9pZFxyXG4pOiBQcm9taXNlPFRhc2tSZXN1bHQ8VD4+ID0+IHtcclxuICB0cnkge1xyXG4gICAgYXdhaXQgUHJvbWlzZS5yZXNvbHZlKClcclxuICAgIGNvbnN0IHZhbHVlID0gYXdhaXQgdGFzaygpXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBzdGF0dXM6ICdvaycsXHJcbiAgICAgIHZhbHVlLFxyXG4gICAgfVxyXG4gIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHN0YXR1czogZXJyb3IgaW5zdGFuY2VvZiBUYXNrQWJvcnRFcnJvciA/ICdjYW5jZWxsZWQnIDogJ3JlamVjdGVkJyxcclxuICAgICAgZXJyb3IsXHJcbiAgICB9XHJcbiAgfSBmaW5hbGx5IHtcclxuICAgIGNsZWFuVXA/LigpXHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogR2l2ZW4gYW4gaW5wdXQgYEFib3J0U2lnbmFsYCBhbmQgYSBwcm9taXNlIHJldHVybnMgYW5vdGhlciBwcm9taXNlIHRoYXQgcmVzb2x2ZXNcclxuICogYXMgc29vbiB0aGUgaW5wdXQgcHJvbWlzZSBpcyBwcm92aWRlZCBvciByZWplY3RzIGFzIHNvb24gYXNcclxuICogYEFib3J0U2lnbmFsLmFib3J0YCBpcyBgdHJ1ZWAuXHJcbiAqIEBwYXJhbSBzaWduYWxcclxuICogQHJldHVybnNcclxuICovXHJcbmV4cG9ydCBjb25zdCBjcmVhdGVQYXVzZSA9IDxUPihzaWduYWw6IEFib3J0U2lnbmFsKSA9PiB7XHJcbiAgcmV0dXJuIChwcm9taXNlOiBQcm9taXNlPFQ+KTogUHJvbWlzZTxUPiA9PiB7XHJcbiAgICByZXR1cm4gY2F0Y2hSZWplY3Rpb24oXHJcbiAgICAgIHJhY2VXaXRoU2lnbmFsKHNpZ25hbCwgcHJvbWlzZSkudGhlbigob3V0cHV0KSA9PiB7XHJcbiAgICAgICAgdmFsaWRhdGVBY3RpdmUoc2lnbmFsKVxyXG4gICAgICAgIHJldHVybiBvdXRwdXRcclxuICAgICAgfSlcclxuICAgIClcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHaXZlbiBhbiBpbnB1dCBgQWJvcnRTaWduYWxgIGFuZCBgdGltZW91dE1zYCByZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzXHJcbiAqIGFmdGVyIGB0aW1lb3V0TXNgIG9yIHJlamVjdHMgYXMgc29vbiBhcyBgQWJvcnRTaWduYWwuYWJvcnRgIGlzIGB0cnVlYC5cclxuICogQHBhcmFtIHNpZ25hbFxyXG4gKiBAcmV0dXJuc1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGNyZWF0ZURlbGF5ID0gKHNpZ25hbDogQWJvcnRTaWduYWwpID0+IHtcclxuICBjb25zdCBwYXVzZSA9IGNyZWF0ZVBhdXNlPHZvaWQ+KHNpZ25hbClcclxuICByZXR1cm4gKHRpbWVvdXRNczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiA9PiB7XHJcbiAgICByZXR1cm4gcGF1c2UobmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgdGltZW91dE1zKSkpXHJcbiAgfVxyXG59XHJcbiIsICJpbXBvcnQgdHlwZSB7IERpc3BhdGNoLCBBbnlBY3Rpb24sIE1pZGRsZXdhcmVBUEkgfSBmcm9tICdyZWR1eCdcclxuaW1wb3J0IHR5cGUgeyBUaHVua0Rpc3BhdGNoIH0gZnJvbSAncmVkdXgtdGh1bmsnXHJcbmltcG9ydCB7IGNyZWF0ZUFjdGlvbiwgaXNBY3Rpb24gfSBmcm9tICcuLi9jcmVhdGVBY3Rpb24nXHJcbmltcG9ydCB7IG5hbm9pZCB9IGZyb20gJy4uL25hbm9pZCdcclxuXHJcbmltcG9ydCB0eXBlIHtcclxuICBMaXN0ZW5lck1pZGRsZXdhcmUsXHJcbiAgTGlzdGVuZXJNaWRkbGV3YXJlSW5zdGFuY2UsXHJcbiAgQWRkTGlzdGVuZXJPdmVybG9hZHMsXHJcbiAgQW55TGlzdGVuZXJQcmVkaWNhdGUsXHJcbiAgQ3JlYXRlTGlzdGVuZXJNaWRkbGV3YXJlT3B0aW9ucyxcclxuICBUeXBlZEFkZExpc3RlbmVyLFxyXG4gIFR5cGVkQ3JlYXRlTGlzdGVuZXJFbnRyeSxcclxuICBGYWxsYmFja0FkZExpc3RlbmVyT3B0aW9ucyxcclxuICBMaXN0ZW5lckVudHJ5LFxyXG4gIExpc3RlbmVyRXJyb3JIYW5kbGVyLFxyXG4gIFVuc3Vic2NyaWJlTGlzdGVuZXIsXHJcbiAgVGFrZVBhdHRlcm4sXHJcbiAgTGlzdGVuZXJFcnJvckluZm8sXHJcbiAgRm9ya2VkVGFza0V4ZWN1dG9yLFxyXG4gIEZvcmtlZFRhc2ssXHJcbiAgVHlwZWRSZW1vdmVMaXN0ZW5lcixcclxuICBUYXNrUmVzdWx0LFxyXG4gIEFib3J0U2lnbmFsV2l0aFJlYXNvbixcclxuICBVbnN1YnNjcmliZUxpc3RlbmVyT3B0aW9ucyxcclxuICBGb3JrT3B0aW9ucyxcclxufSBmcm9tICcuL3R5cGVzJ1xyXG5pbXBvcnQge1xyXG4gIGFib3J0Q29udHJvbGxlcldpdGhSZWFzb24sXHJcbiAgYWRkQWJvcnRTaWduYWxMaXN0ZW5lcixcclxuICBhc3NlcnRGdW5jdGlvbixcclxuICBjYXRjaFJlamVjdGlvbixcclxufSBmcm9tICcuL3V0aWxzJ1xyXG5pbXBvcnQge1xyXG4gIGxpc3RlbmVyQ2FuY2VsbGVkLFxyXG4gIGxpc3RlbmVyQ29tcGxldGVkLFxyXG4gIFRhc2tBYm9ydEVycm9yLFxyXG4gIHRhc2tDYW5jZWxsZWQsXHJcbiAgdGFza0NvbXBsZXRlZCxcclxufSBmcm9tICcuL2V4Y2VwdGlvbnMnXHJcbmltcG9ydCB7XHJcbiAgcnVuVGFzayxcclxuICB2YWxpZGF0ZUFjdGl2ZSxcclxuICBjcmVhdGVQYXVzZSxcclxuICBjcmVhdGVEZWxheSxcclxuICByYWNlV2l0aFNpZ25hbCxcclxufSBmcm9tICcuL3Rhc2snXHJcbmV4cG9ydCB7IFRhc2tBYm9ydEVycm9yIH0gZnJvbSAnLi9leGNlcHRpb25zJ1xyXG5leHBvcnQgdHlwZSB7XHJcbiAgTGlzdGVuZXJFZmZlY3QsXHJcbiAgTGlzdGVuZXJNaWRkbGV3YXJlLFxyXG4gIExpc3RlbmVyRWZmZWN0QVBJLFxyXG4gIExpc3RlbmVyTWlkZGxld2FyZUluc3RhbmNlLFxyXG4gIENyZWF0ZUxpc3RlbmVyTWlkZGxld2FyZU9wdGlvbnMsXHJcbiAgTGlzdGVuZXJFcnJvckhhbmRsZXIsXHJcbiAgVHlwZWRTdGFydExpc3RlbmluZyxcclxuICBUeXBlZEFkZExpc3RlbmVyLFxyXG4gIFR5cGVkU3RvcExpc3RlbmluZyxcclxuICBUeXBlZFJlbW92ZUxpc3RlbmVyLFxyXG4gIFVuc3Vic2NyaWJlTGlzdGVuZXIsXHJcbiAgVW5zdWJzY3JpYmVMaXN0ZW5lck9wdGlvbnMsXHJcbiAgRm9ya2VkVGFza0V4ZWN1dG9yLFxyXG4gIEZvcmtlZFRhc2ssXHJcbiAgRm9ya2VkVGFza0FQSSxcclxuICBBc3luY1Rhc2tFeGVjdXRvcixcclxuICBTeW5jVGFza0V4ZWN1dG9yLFxyXG4gIFRhc2tDYW5jZWxsZWQsXHJcbiAgVGFza1JlamVjdGVkLFxyXG4gIFRhc2tSZXNvbHZlZCxcclxuICBUYXNrUmVzdWx0LFxyXG59IGZyb20gJy4vdHlwZXMnXHJcblxyXG4vL092ZXJseS1hZ2dyZXNzaXZlIGJ5dGUtc2hhdmluZ1xyXG5jb25zdCB7IGFzc2lnbiB9ID0gT2JqZWN0XHJcbi8qKlxyXG4gKiBAaW50ZXJuYWxcclxuICovXHJcbmNvbnN0IElOVEVSTkFMX05JTF9UT0tFTiA9IHt9IGFzIGNvbnN0XHJcblxyXG5jb25zdCBhbG0gPSAnbGlzdGVuZXJNaWRkbGV3YXJlJyBhcyBjb25zdFxyXG5cclxuY29uc3QgY3JlYXRlRm9yayA9IChcclxuICBwYXJlbnRBYm9ydFNpZ25hbDogQWJvcnRTaWduYWxXaXRoUmVhc29uPHVua25vd24+LFxyXG4gIHBhcmVudEJsb2NraW5nUHJvbWlzZXM6IFByb21pc2U8YW55PltdXHJcbikgPT4ge1xyXG4gIGNvbnN0IGxpbmtDb250cm9sbGVycyA9IChjb250cm9sbGVyOiBBYm9ydENvbnRyb2xsZXIpID0+XHJcbiAgICBhZGRBYm9ydFNpZ25hbExpc3RlbmVyKHBhcmVudEFib3J0U2lnbmFsLCAoKSA9PlxyXG4gICAgICBhYm9ydENvbnRyb2xsZXJXaXRoUmVhc29uKGNvbnRyb2xsZXIsIHBhcmVudEFib3J0U2lnbmFsLnJlYXNvbilcclxuICAgIClcclxuXHJcbiAgcmV0dXJuIDxUPihcclxuICAgIHRhc2tFeGVjdXRvcjogRm9ya2VkVGFza0V4ZWN1dG9yPFQ+LFxyXG4gICAgb3B0cz86IEZvcmtPcHRpb25zXHJcbiAgKTogRm9ya2VkVGFzazxUPiA9PiB7XHJcbiAgICBhc3NlcnRGdW5jdGlvbih0YXNrRXhlY3V0b3IsICd0YXNrRXhlY3V0b3InKVxyXG4gICAgY29uc3QgY2hpbGRBYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKClcclxuXHJcbiAgICBsaW5rQ29udHJvbGxlcnMoY2hpbGRBYm9ydENvbnRyb2xsZXIpXHJcblxyXG4gICAgY29uc3QgcmVzdWx0ID0gcnVuVGFzazxUPihcclxuICAgICAgYXN5bmMgKCk6IFByb21pc2U8VD4gPT4ge1xyXG4gICAgICAgIHZhbGlkYXRlQWN0aXZlKHBhcmVudEFib3J0U2lnbmFsKVxyXG4gICAgICAgIHZhbGlkYXRlQWN0aXZlKGNoaWxkQWJvcnRDb250cm9sbGVyLnNpZ25hbClcclxuICAgICAgICBjb25zdCByZXN1bHQgPSAoYXdhaXQgdGFza0V4ZWN1dG9yKHtcclxuICAgICAgICAgIHBhdXNlOiBjcmVhdGVQYXVzZShjaGlsZEFib3J0Q29udHJvbGxlci5zaWduYWwpLFxyXG4gICAgICAgICAgZGVsYXk6IGNyZWF0ZURlbGF5KGNoaWxkQWJvcnRDb250cm9sbGVyLnNpZ25hbCksXHJcbiAgICAgICAgICBzaWduYWw6IGNoaWxkQWJvcnRDb250cm9sbGVyLnNpZ25hbCxcclxuICAgICAgICB9KSkgYXMgVFxyXG4gICAgICAgIHZhbGlkYXRlQWN0aXZlKGNoaWxkQWJvcnRDb250cm9sbGVyLnNpZ25hbClcclxuICAgICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICAgIH0sXHJcbiAgICAgICgpID0+IGFib3J0Q29udHJvbGxlcldpdGhSZWFzb24oY2hpbGRBYm9ydENvbnRyb2xsZXIsIHRhc2tDb21wbGV0ZWQpXHJcbiAgICApXHJcblxyXG4gICAgaWYgKG9wdHM/LmF1dG9Kb2luKSB7XHJcbiAgICAgIHBhcmVudEJsb2NraW5nUHJvbWlzZXMucHVzaChyZXN1bHQpXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcmVzdWx0OiBjcmVhdGVQYXVzZTxUYXNrUmVzdWx0PFQ+PihwYXJlbnRBYm9ydFNpZ25hbCkocmVzdWx0KSxcclxuICAgICAgY2FuY2VsKCkge1xyXG4gICAgICAgIGFib3J0Q29udHJvbGxlcldpdGhSZWFzb24oY2hpbGRBYm9ydENvbnRyb2xsZXIsIHRhc2tDYW5jZWxsZWQpXHJcbiAgICAgIH0sXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBjcmVhdGVUYWtlUGF0dGVybiA9IDxTPihcclxuICBzdGFydExpc3RlbmluZzogQWRkTGlzdGVuZXJPdmVybG9hZHM8XHJcbiAgICBVbnN1YnNjcmliZUxpc3RlbmVyLFxyXG4gICAgUyxcclxuICAgIERpc3BhdGNoPEFueUFjdGlvbj5cclxuICA+LFxyXG4gIHNpZ25hbDogQWJvcnRTaWduYWxcclxuKTogVGFrZVBhdHRlcm48Uz4gPT4ge1xyXG4gIC8qKlxyXG4gICAqIEEgZnVuY3Rpb24gdGhhdCB0YWtlcyBhIExpc3RlbmVyUHJlZGljYXRlIGFuZCBhbiBvcHRpb25hbCB0aW1lb3V0LFxyXG4gICAqIGFuZCByZXNvbHZlcyB3aGVuIGVpdGhlciB0aGUgcHJlZGljYXRlIHJldHVybnMgYHRydWVgIGJhc2VkIG9uIGFuIGFjdGlvblxyXG4gICAqIHN0YXRlIGNvbWJpbmF0aW9uIG9yIHdoZW4gdGhlIHRpbWVvdXQgZXhwaXJlcy5cclxuICAgKiBJZiB0aGUgcGFyZW50IGxpc3RlbmVyIGlzIGNhbmNlbGVkIHdoaWxlIHdhaXRpbmcsIHRoaXMgd2lsbCB0aHJvdyBhXHJcbiAgICogVGFza0Fib3J0RXJyb3IuXHJcbiAgICovXHJcbiAgY29uc3QgdGFrZSA9IGFzeW5jIDxQIGV4dGVuZHMgQW55TGlzdGVuZXJQcmVkaWNhdGU8Uz4+KFxyXG4gICAgcHJlZGljYXRlOiBQLFxyXG4gICAgdGltZW91dDogbnVtYmVyIHwgdW5kZWZpbmVkXHJcbiAgKSA9PiB7XHJcbiAgICB2YWxpZGF0ZUFjdGl2ZShzaWduYWwpXHJcblxyXG4gICAgLy8gUGxhY2Vob2xkZXIgdW5zdWJzY3JpYmUgZnVuY3Rpb24gdW50aWwgdGhlIGxpc3RlbmVyIGlzIGFkZGVkXHJcbiAgICBsZXQgdW5zdWJzY3JpYmU6IFVuc3Vic2NyaWJlTGlzdGVuZXIgPSAoKSA9PiB7fVxyXG5cclxuICAgIGNvbnN0IHR1cGxlUHJvbWlzZSA9IG5ldyBQcm9taXNlPFtBbnlBY3Rpb24sIFMsIFNdPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIC8vIEluc2lkZSB0aGUgUHJvbWlzZSwgd2Ugc3luY2hyb25vdXNseSBhZGQgdGhlIGxpc3RlbmVyLlxyXG4gICAgICBsZXQgc3RvcExpc3RlbmluZyA9IHN0YXJ0TGlzdGVuaW5nKHtcclxuICAgICAgICBwcmVkaWNhdGU6IHByZWRpY2F0ZSBhcyBhbnksXHJcbiAgICAgICAgZWZmZWN0OiAoYWN0aW9uLCBsaXN0ZW5lckFwaSk6IHZvaWQgPT4ge1xyXG4gICAgICAgICAgLy8gT25lLXNob3QgbGlzdGVuZXIgdGhhdCBjbGVhbnMgdXAgYXMgc29vbiBhcyB0aGUgcHJlZGljYXRlIHBhc3Nlc1xyXG4gICAgICAgICAgbGlzdGVuZXJBcGkudW5zdWJzY3JpYmUoKVxyXG4gICAgICAgICAgLy8gUmVzb2x2ZSB0aGUgcHJvbWlzZSB3aXRoIHRoZSBzYW1lIGFyZ3VtZW50cyB0aGUgcHJlZGljYXRlIHNhd1xyXG4gICAgICAgICAgcmVzb2x2ZShbXHJcbiAgICAgICAgICAgIGFjdGlvbixcclxuICAgICAgICAgICAgbGlzdGVuZXJBcGkuZ2V0U3RhdGUoKSxcclxuICAgICAgICAgICAgbGlzdGVuZXJBcGkuZ2V0T3JpZ2luYWxTdGF0ZSgpLFxyXG4gICAgICAgICAgXSlcclxuICAgICAgICB9LFxyXG4gICAgICB9KVxyXG4gICAgICB1bnN1YnNjcmliZSA9ICgpID0+IHtcclxuICAgICAgICBzdG9wTGlzdGVuaW5nKClcclxuICAgICAgICByZWplY3QoKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG5cclxuICAgIGNvbnN0IHByb21pc2VzOiAoUHJvbWlzZTxudWxsPiB8IFByb21pc2U8W0FueUFjdGlvbiwgUywgU10+KVtdID0gW1xyXG4gICAgICB0dXBsZVByb21pc2UsXHJcbiAgICBdXHJcblxyXG4gICAgaWYgKHRpbWVvdXQgIT0gbnVsbCkge1xyXG4gICAgICBwcm9taXNlcy5wdXNoKFxyXG4gICAgICAgIG5ldyBQcm9taXNlPG51bGw+KChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIHRpbWVvdXQsIG51bGwpKVxyXG4gICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgcmFjZVdpdGhTaWduYWwoc2lnbmFsLCBQcm9taXNlLnJhY2UocHJvbWlzZXMpKVxyXG5cclxuICAgICAgdmFsaWRhdGVBY3RpdmUoc2lnbmFsKVxyXG4gICAgICByZXR1cm4gb3V0cHV0XHJcbiAgICB9IGZpbmFsbHkge1xyXG4gICAgICAvLyBBbHdheXMgY2xlYW4gdXAgdGhlIGxpc3RlbmVyXHJcbiAgICAgIHVuc3Vic2NyaWJlKClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybiAoKHByZWRpY2F0ZTogQW55TGlzdGVuZXJQcmVkaWNhdGU8Uz4sIHRpbWVvdXQ6IG51bWJlciB8IHVuZGVmaW5lZCkgPT5cclxuICAgIGNhdGNoUmVqZWN0aW9uKHRha2UocHJlZGljYXRlLCB0aW1lb3V0KSkpIGFzIFRha2VQYXR0ZXJuPFM+XHJcbn1cclxuXHJcbmNvbnN0IGdldExpc3RlbmVyRW50cnlQcm9wc0Zyb20gPSAob3B0aW9uczogRmFsbGJhY2tBZGRMaXN0ZW5lck9wdGlvbnMpID0+IHtcclxuICBsZXQgeyB0eXBlLCBhY3Rpb25DcmVhdG9yLCBtYXRjaGVyLCBwcmVkaWNhdGUsIGVmZmVjdCB9ID0gb3B0aW9uc1xyXG5cclxuICBpZiAodHlwZSkge1xyXG4gICAgcHJlZGljYXRlID0gY3JlYXRlQWN0aW9uKHR5cGUpLm1hdGNoXHJcbiAgfSBlbHNlIGlmIChhY3Rpb25DcmVhdG9yKSB7XHJcbiAgICB0eXBlID0gYWN0aW9uQ3JlYXRvciEudHlwZVxyXG4gICAgcHJlZGljYXRlID0gYWN0aW9uQ3JlYXRvci5tYXRjaFxyXG4gIH0gZWxzZSBpZiAobWF0Y2hlcikge1xyXG4gICAgcHJlZGljYXRlID0gbWF0Y2hlclxyXG4gIH0gZWxzZSBpZiAocHJlZGljYXRlKSB7XHJcbiAgICAvLyBwYXNzXHJcbiAgfSBlbHNlIHtcclxuICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgJ0NyZWF0aW5nIG9yIHJlbW92aW5nIGEgbGlzdGVuZXIgcmVxdWlyZXMgb25lIG9mIHRoZSBrbm93biBmaWVsZHMgZm9yIG1hdGNoaW5nIGFuIGFjdGlvbidcclxuICAgIClcclxuICB9XHJcblxyXG4gIGFzc2VydEZ1bmN0aW9uKGVmZmVjdCwgJ29wdGlvbnMubGlzdGVuZXInKVxyXG5cclxuICByZXR1cm4geyBwcmVkaWNhdGUsIHR5cGUsIGVmZmVjdCB9XHJcbn1cclxuXHJcbi8qKiBBY2NlcHRzIHRoZSBwb3NzaWJsZSBvcHRpb25zIGZvciBjcmVhdGluZyBhIGxpc3RlbmVyLCBhbmQgcmV0dXJucyBhIGZvcm1hdHRlZCBsaXN0ZW5lciBlbnRyeSAqL1xyXG5leHBvcnQgY29uc3QgY3JlYXRlTGlzdGVuZXJFbnRyeTogVHlwZWRDcmVhdGVMaXN0ZW5lckVudHJ5PHVua25vd24+ID0gKFxyXG4gIG9wdGlvbnM6IEZhbGxiYWNrQWRkTGlzdGVuZXJPcHRpb25zXHJcbikgPT4ge1xyXG4gIGNvbnN0IHsgdHlwZSwgcHJlZGljYXRlLCBlZmZlY3QgfSA9IGdldExpc3RlbmVyRW50cnlQcm9wc0Zyb20ob3B0aW9ucylcclxuXHJcbiAgY29uc3QgaWQgPSBuYW5vaWQoKVxyXG4gIGNvbnN0IGVudHJ5OiBMaXN0ZW5lckVudHJ5PHVua25vd24+ID0ge1xyXG4gICAgaWQsXHJcbiAgICBlZmZlY3QsXHJcbiAgICB0eXBlLFxyXG4gICAgcHJlZGljYXRlLFxyXG4gICAgcGVuZGluZzogbmV3IFNldDxBYm9ydENvbnRyb2xsZXI+KCksXHJcbiAgICB1bnN1YnNjcmliZTogKCkgPT4ge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3Vic2NyaWJlIG5vdCBpbml0aWFsaXplZCcpXHJcbiAgICB9LFxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGVudHJ5XHJcbn1cclxuXHJcbmNvbnN0IGNhbmNlbEFjdGl2ZUxpc3RlbmVycyA9IChcclxuICBlbnRyeTogTGlzdGVuZXJFbnRyeTx1bmtub3duLCBEaXNwYXRjaDxBbnlBY3Rpb24+PlxyXG4pID0+IHtcclxuICBlbnRyeS5wZW5kaW5nLmZvckVhY2goKGNvbnRyb2xsZXIpID0+IHtcclxuICAgIGFib3J0Q29udHJvbGxlcldpdGhSZWFzb24oY29udHJvbGxlciwgbGlzdGVuZXJDYW5jZWxsZWQpXHJcbiAgfSlcclxufVxyXG5cclxuY29uc3QgY3JlYXRlQ2xlYXJMaXN0ZW5lck1pZGRsZXdhcmUgPSAoXHJcbiAgbGlzdGVuZXJNYXA6IE1hcDxzdHJpbmcsIExpc3RlbmVyRW50cnk+XHJcbikgPT4ge1xyXG4gIHJldHVybiAoKSA9PiB7XHJcbiAgICBsaXN0ZW5lck1hcC5mb3JFYWNoKGNhbmNlbEFjdGl2ZUxpc3RlbmVycylcclxuXHJcbiAgICBsaXN0ZW5lck1hcC5jbGVhcigpXHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogU2FmZWx5IHJlcG9ydHMgZXJyb3JzIHRvIHRoZSBgZXJyb3JIYW5kbGVyYCBwcm92aWRlZC5cclxuICogRXJyb3JzIHRoYXQgb2NjdXIgaW5zaWRlIGBlcnJvckhhbmRsZXJgIGFyZSBub3RpZmllZCBpbiBhIG5ldyB0YXNrLlxyXG4gKiBJbnNwaXJlZCBieSBbcnhqcyByZXBvcnRVbmhhbmRsZWRFcnJvcl0oaHR0cHM6Ly9naXRodWIuY29tL1JlYWN0aXZlWC9yeGpzL2Jsb2IvNmZhZmNmNTNkYzllNTU3NDM5YjI1ZGViYWVhZGZkMjI0YjI0NWE2Ni9zcmMvaW50ZXJuYWwvdXRpbC9yZXBvcnRVbmhhbmRsZWRFcnJvci50cylcclxuICogQHBhcmFtIGVycm9ySGFuZGxlclxyXG4gKiBAcGFyYW0gZXJyb3JUb05vdGlmeVxyXG4gKi9cclxuY29uc3Qgc2FmZWx5Tm90aWZ5RXJyb3IgPSAoXHJcbiAgZXJyb3JIYW5kbGVyOiBMaXN0ZW5lckVycm9ySGFuZGxlcixcclxuICBlcnJvclRvTm90aWZ5OiB1bmtub3duLFxyXG4gIGVycm9ySW5mbzogTGlzdGVuZXJFcnJvckluZm9cclxuKTogdm9pZCA9PiB7XHJcbiAgdHJ5IHtcclxuICAgIGVycm9ySGFuZGxlcihlcnJvclRvTm90aWZ5LCBlcnJvckluZm8pXHJcbiAgfSBjYXRjaCAoZXJyb3JIYW5kbGVyRXJyb3IpIHtcclxuICAgIC8vIFdlIGNhbm5vdCBsZXQgYW4gZXJyb3IgcmFpc2VkIGhlcmUgYmxvY2sgdGhlIGxpc3RlbmVyIHF1ZXVlLlxyXG4gICAgLy8gVGhlIGVycm9yIHJhaXNlZCBoZXJlIHdpbGwgYmUgcGlja2VkIHVwIGJ5IGB3aW5kb3cub25lcnJvcmAsIGBwcm9jZXNzLm9uKCdlcnJvcicpYCBldGMuLi5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aHJvdyBlcnJvckhhbmRsZXJFcnJvclxyXG4gICAgfSwgMClcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgYWRkTGlzdGVuZXIgPSBjcmVhdGVBY3Rpb24oXHJcbiAgYCR7YWxtfS9hZGRgXHJcbikgYXMgVHlwZWRBZGRMaXN0ZW5lcjx1bmtub3duPlxyXG5cclxuLyoqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBjb25zdCBjbGVhckFsbExpc3RlbmVycyA9IGNyZWF0ZUFjdGlvbihgJHthbG19L3JlbW92ZUFsbGApXHJcblxyXG4vKipcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IHJlbW92ZUxpc3RlbmVyID0gY3JlYXRlQWN0aW9uKFxyXG4gIGAke2FsbX0vcmVtb3ZlYFxyXG4pIGFzIFR5cGVkUmVtb3ZlTGlzdGVuZXI8dW5rbm93bj5cclxuXHJcbmNvbnN0IGRlZmF1bHRFcnJvckhhbmRsZXI6IExpc3RlbmVyRXJyb3JIYW5kbGVyID0gKC4uLmFyZ3M6IHVua25vd25bXSkgPT4ge1xyXG4gIGNvbnNvbGUuZXJyb3IoYCR7YWxtfS9lcnJvcmAsIC4uLmFyZ3MpXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTGlzdGVuZXJNaWRkbGV3YXJlPFxyXG4gIFMgPSB1bmtub3duLFxyXG4gIEQgZXh0ZW5kcyBEaXNwYXRjaDxBbnlBY3Rpb24+ID0gVGh1bmtEaXNwYXRjaDxTLCB1bmtub3duLCBBbnlBY3Rpb24+LFxyXG4gIEV4dHJhQXJndW1lbnQgPSB1bmtub3duXHJcbj4obWlkZGxld2FyZU9wdGlvbnM6IENyZWF0ZUxpc3RlbmVyTWlkZGxld2FyZU9wdGlvbnM8RXh0cmFBcmd1bWVudD4gPSB7fSkge1xyXG4gIGNvbnN0IGxpc3RlbmVyTWFwID0gbmV3IE1hcDxzdHJpbmcsIExpc3RlbmVyRW50cnk+KClcclxuICBjb25zdCB7IGV4dHJhLCBvbkVycm9yID0gZGVmYXVsdEVycm9ySGFuZGxlciB9ID0gbWlkZGxld2FyZU9wdGlvbnNcclxuXHJcbiAgYXNzZXJ0RnVuY3Rpb24ob25FcnJvciwgJ29uRXJyb3InKVxyXG5cclxuICBjb25zdCBpbnNlcnRFbnRyeSA9IChlbnRyeTogTGlzdGVuZXJFbnRyeSkgPT4ge1xyXG4gICAgZW50cnkudW5zdWJzY3JpYmUgPSAoKSA9PiBsaXN0ZW5lck1hcC5kZWxldGUoZW50cnkhLmlkKVxyXG5cclxuICAgIGxpc3RlbmVyTWFwLnNldChlbnRyeS5pZCwgZW50cnkpXHJcbiAgICByZXR1cm4gKGNhbmNlbE9wdGlvbnM/OiBVbnN1YnNjcmliZUxpc3RlbmVyT3B0aW9ucykgPT4ge1xyXG4gICAgICBlbnRyeS51bnN1YnNjcmliZSgpXHJcbiAgICAgIGlmIChjYW5jZWxPcHRpb25zPy5jYW5jZWxBY3RpdmUpIHtcclxuICAgICAgICBjYW5jZWxBY3RpdmVMaXN0ZW5lcnMoZW50cnkpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbnN0IGZpbmRMaXN0ZW5lckVudHJ5ID0gKFxyXG4gICAgY29tcGFyYXRvcjogKGVudHJ5OiBMaXN0ZW5lckVudHJ5KSA9PiBib29sZWFuXHJcbiAgKTogTGlzdGVuZXJFbnRyeSB8IHVuZGVmaW5lZCA9PiB7XHJcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIEFycmF5LmZyb20obGlzdGVuZXJNYXAudmFsdWVzKCkpKSB7XHJcbiAgICAgIGlmIChjb21wYXJhdG9yKGVudHJ5KSkge1xyXG4gICAgICAgIHJldHVybiBlbnRyeVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHVuZGVmaW5lZFxyXG4gIH1cclxuXHJcbiAgY29uc3Qgc3RhcnRMaXN0ZW5pbmcgPSAob3B0aW9uczogRmFsbGJhY2tBZGRMaXN0ZW5lck9wdGlvbnMpID0+IHtcclxuICAgIGxldCBlbnRyeSA9IGZpbmRMaXN0ZW5lckVudHJ5KFxyXG4gICAgICAoZXhpc3RpbmdFbnRyeSkgPT4gZXhpc3RpbmdFbnRyeS5lZmZlY3QgPT09IG9wdGlvbnMuZWZmZWN0XHJcbiAgICApXHJcblxyXG4gICAgaWYgKCFlbnRyeSkge1xyXG4gICAgICBlbnRyeSA9IGNyZWF0ZUxpc3RlbmVyRW50cnkob3B0aW9ucyBhcyBhbnkpXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGluc2VydEVudHJ5KGVudHJ5KVxyXG4gIH1cclxuXHJcbiAgY29uc3Qgc3RvcExpc3RlbmluZyA9IChcclxuICAgIG9wdGlvbnM6IEZhbGxiYWNrQWRkTGlzdGVuZXJPcHRpb25zICYgVW5zdWJzY3JpYmVMaXN0ZW5lck9wdGlvbnNcclxuICApOiBib29sZWFuID0+IHtcclxuICAgIGNvbnN0IHsgdHlwZSwgZWZmZWN0LCBwcmVkaWNhdGUgfSA9IGdldExpc3RlbmVyRW50cnlQcm9wc0Zyb20ob3B0aW9ucylcclxuXHJcbiAgICBjb25zdCBlbnRyeSA9IGZpbmRMaXN0ZW5lckVudHJ5KChlbnRyeSkgPT4ge1xyXG4gICAgICBjb25zdCBtYXRjaFByZWRpY2F0ZU9yVHlwZSA9XHJcbiAgICAgICAgdHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnXHJcbiAgICAgICAgICA/IGVudHJ5LnR5cGUgPT09IHR5cGVcclxuICAgICAgICAgIDogZW50cnkucHJlZGljYXRlID09PSBwcmVkaWNhdGVcclxuXHJcbiAgICAgIHJldHVybiBtYXRjaFByZWRpY2F0ZU9yVHlwZSAmJiBlbnRyeS5lZmZlY3QgPT09IGVmZmVjdFxyXG4gICAgfSlcclxuXHJcbiAgICBpZiAoZW50cnkpIHtcclxuICAgICAgZW50cnkudW5zdWJzY3JpYmUoKVxyXG4gICAgICBpZiAob3B0aW9ucy5jYW5jZWxBY3RpdmUpIHtcclxuICAgICAgICBjYW5jZWxBY3RpdmVMaXN0ZW5lcnMoZW50cnkpXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gISFlbnRyeVxyXG4gIH1cclxuXHJcbiAgY29uc3Qgbm90aWZ5TGlzdGVuZXIgPSBhc3luYyAoXHJcbiAgICBlbnRyeTogTGlzdGVuZXJFbnRyeTx1bmtub3duLCBEaXNwYXRjaDxBbnlBY3Rpb24+PixcclxuICAgIGFjdGlvbjogQW55QWN0aW9uLFxyXG4gICAgYXBpOiBNaWRkbGV3YXJlQVBJLFxyXG4gICAgZ2V0T3JpZ2luYWxTdGF0ZTogKCkgPT4gU1xyXG4gICkgPT4ge1xyXG4gICAgY29uc3QgaW50ZXJuYWxUYXNrQ29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxyXG4gICAgY29uc3QgdGFrZSA9IGNyZWF0ZVRha2VQYXR0ZXJuKFxyXG4gICAgICBzdGFydExpc3RlbmluZyxcclxuICAgICAgaW50ZXJuYWxUYXNrQ29udHJvbGxlci5zaWduYWxcclxuICAgIClcclxuICAgIGNvbnN0IGF1dG9Kb2luUHJvbWlzZXM6IFByb21pc2U8YW55PltdID0gW11cclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBlbnRyeS5wZW5kaW5nLmFkZChpbnRlcm5hbFRhc2tDb250cm9sbGVyKVxyXG4gICAgICBhd2FpdCBQcm9taXNlLnJlc29sdmUoXHJcbiAgICAgICAgZW50cnkuZWZmZWN0KFxyXG4gICAgICAgICAgYWN0aW9uLFxyXG4gICAgICAgICAgLy8gVXNlIGFzc2lnbigpIHJhdGhlciB0aGFuIC4uLiB0byBhdm9pZCBleHRyYSBoZWxwZXIgZnVuY3Rpb25zIGFkZGVkIHRvIGJ1bmRsZVxyXG4gICAgICAgICAgYXNzaWduKHt9LCBhcGksIHtcclxuICAgICAgICAgICAgZ2V0T3JpZ2luYWxTdGF0ZSxcclxuICAgICAgICAgICAgY29uZGl0aW9uOiAoXHJcbiAgICAgICAgICAgICAgcHJlZGljYXRlOiBBbnlMaXN0ZW5lclByZWRpY2F0ZTxhbnk+LFxyXG4gICAgICAgICAgICAgIHRpbWVvdXQ/OiBudW1iZXJcclxuICAgICAgICAgICAgKSA9PiB0YWtlKHByZWRpY2F0ZSwgdGltZW91dCkudGhlbihCb29sZWFuKSxcclxuICAgICAgICAgICAgdGFrZSxcclxuICAgICAgICAgICAgZGVsYXk6IGNyZWF0ZURlbGF5KGludGVybmFsVGFza0NvbnRyb2xsZXIuc2lnbmFsKSxcclxuICAgICAgICAgICAgcGF1c2U6IGNyZWF0ZVBhdXNlPGFueT4oaW50ZXJuYWxUYXNrQ29udHJvbGxlci5zaWduYWwpLFxyXG4gICAgICAgICAgICBleHRyYSxcclxuICAgICAgICAgICAgc2lnbmFsOiBpbnRlcm5hbFRhc2tDb250cm9sbGVyLnNpZ25hbCxcclxuICAgICAgICAgICAgZm9yazogY3JlYXRlRm9yayhpbnRlcm5hbFRhc2tDb250cm9sbGVyLnNpZ25hbCwgYXV0b0pvaW5Qcm9taXNlcyksXHJcbiAgICAgICAgICAgIHVuc3Vic2NyaWJlOiBlbnRyeS51bnN1YnNjcmliZSxcclxuICAgICAgICAgICAgc3Vic2NyaWJlOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgbGlzdGVuZXJNYXAuc2V0KGVudHJ5LmlkLCBlbnRyeSlcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY2FuY2VsQWN0aXZlTGlzdGVuZXJzOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgZW50cnkucGVuZGluZy5mb3JFYWNoKChjb250cm9sbGVyLCBfLCBzZXQpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChjb250cm9sbGVyICE9PSBpbnRlcm5hbFRhc2tDb250cm9sbGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgIGFib3J0Q29udHJvbGxlcldpdGhSZWFzb24oY29udHJvbGxlciwgbGlzdGVuZXJDYW5jZWxsZWQpXHJcbiAgICAgICAgICAgICAgICAgIHNldC5kZWxldGUoY29udHJvbGxlcilcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgfSlcclxuICAgICAgICApXHJcbiAgICAgIClcclxuICAgIH0gY2F0Y2ggKGxpc3RlbmVyRXJyb3IpIHtcclxuICAgICAgaWYgKCEobGlzdGVuZXJFcnJvciBpbnN0YW5jZW9mIFRhc2tBYm9ydEVycm9yKSkge1xyXG4gICAgICAgIHNhZmVseU5vdGlmeUVycm9yKG9uRXJyb3IsIGxpc3RlbmVyRXJyb3IsIHtcclxuICAgICAgICAgIHJhaXNlZEJ5OiAnZWZmZWN0JyxcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9IGZpbmFsbHkge1xyXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoYXV0b0pvaW5Qcm9taXNlcylcclxuXHJcbiAgICAgIGFib3J0Q29udHJvbGxlcldpdGhSZWFzb24oaW50ZXJuYWxUYXNrQ29udHJvbGxlciwgbGlzdGVuZXJDb21wbGV0ZWQpIC8vIE5vdGlmeSB0aGF0IHRoZSB0YXNrIGhhcyBjb21wbGV0ZWRcclxuICAgICAgZW50cnkucGVuZGluZy5kZWxldGUoaW50ZXJuYWxUYXNrQ29udHJvbGxlcilcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbnN0IGNsZWFyTGlzdGVuZXJNaWRkbGV3YXJlID0gY3JlYXRlQ2xlYXJMaXN0ZW5lck1pZGRsZXdhcmUobGlzdGVuZXJNYXApXHJcblxyXG4gIGNvbnN0IG1pZGRsZXdhcmU6IExpc3RlbmVyTWlkZGxld2FyZTxTLCBELCBFeHRyYUFyZ3VtZW50PiA9XHJcbiAgICAoYXBpKSA9PiAobmV4dCkgPT4gKGFjdGlvbikgPT4ge1xyXG4gICAgICBpZiAoIWlzQWN0aW9uKGFjdGlvbikpIHtcclxuICAgICAgICAvLyB3ZSBvbmx5IHdhbnQgdG8gbm90aWZ5IGxpc3RlbmVycyBmb3IgYWN0aW9uIG9iamVjdHNcclxuICAgICAgICByZXR1cm4gbmV4dChhY3Rpb24pXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChhZGRMaXN0ZW5lci5tYXRjaChhY3Rpb24pKSB7XHJcbiAgICAgICAgcmV0dXJuIHN0YXJ0TGlzdGVuaW5nKGFjdGlvbi5wYXlsb2FkKVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoY2xlYXJBbGxMaXN0ZW5lcnMubWF0Y2goYWN0aW9uKSkge1xyXG4gICAgICAgIGNsZWFyTGlzdGVuZXJNaWRkbGV3YXJlKClcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHJlbW92ZUxpc3RlbmVyLm1hdGNoKGFjdGlvbikpIHtcclxuICAgICAgICByZXR1cm4gc3RvcExpc3RlbmluZyhhY3Rpb24ucGF5bG9hZClcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gTmVlZCB0byBnZXQgdGhpcyBzdGF0ZSBfYmVmb3JlXyB0aGUgcmVkdWNlciBwcm9jZXNzZXMgdGhlIGFjdGlvblxyXG4gICAgICBsZXQgb3JpZ2luYWxTdGF0ZTogUyB8IHR5cGVvZiBJTlRFUk5BTF9OSUxfVE9LRU4gPSBhcGkuZ2V0U3RhdGUoKVxyXG5cclxuICAgICAgLy8gYGdldE9yaWdpbmFsU3RhdGVgIGNhbiBvbmx5IGJlIGNhbGxlZCBzeW5jaHJvbm91c2x5LlxyXG4gICAgICAvLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWR1eGpzL3JlZHV4LXRvb2xraXQvZGlzY3Vzc2lvbnMvMTY0OCNkaXNjdXNzaW9uY29tbWVudC0xOTMyODIwXHJcbiAgICAgIGNvbnN0IGdldE9yaWdpbmFsU3RhdGUgPSAoKTogUyA9PiB7XHJcbiAgICAgICAgaWYgKG9yaWdpbmFsU3RhdGUgPT09IElOVEVSTkFMX05JTF9UT0tFTikge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgICBgJHthbG19OiBnZXRPcmlnaW5hbFN0YXRlIGNhbiBvbmx5IGJlIGNhbGxlZCBzeW5jaHJvbm91c2x5YFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG9yaWdpbmFsU3RhdGUgYXMgU1xyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgcmVzdWx0OiB1bmtub3duXHJcblxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIC8vIEFjdHVhbGx5IGZvcndhcmQgdGhlIGFjdGlvbiB0byB0aGUgcmVkdWNlciBiZWZvcmUgd2UgaGFuZGxlIGxpc3RlbmVyc1xyXG4gICAgICAgIHJlc3VsdCA9IG5leHQoYWN0aW9uKVxyXG5cclxuICAgICAgICBpZiAobGlzdGVuZXJNYXAuc2l6ZSA+IDApIHtcclxuICAgICAgICAgIGxldCBjdXJyZW50U3RhdGUgPSBhcGkuZ2V0U3RhdGUoKVxyXG4gICAgICAgICAgLy8gV29yayBhcm91bmQgRVNCdWlsZCtUUyB0cmFuc3BpbGF0aW9uIGlzc3VlXHJcbiAgICAgICAgICBjb25zdCBsaXN0ZW5lckVudHJpZXMgPSBBcnJheS5mcm9tKGxpc3RlbmVyTWFwLnZhbHVlcygpKVxyXG4gICAgICAgICAgZm9yIChsZXQgZW50cnkgb2YgbGlzdGVuZXJFbnRyaWVzKSB7XHJcbiAgICAgICAgICAgIGxldCBydW5MaXN0ZW5lciA9IGZhbHNlXHJcblxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgIHJ1bkxpc3RlbmVyID0gZW50cnkucHJlZGljYXRlKGFjdGlvbiwgY3VycmVudFN0YXRlLCBvcmlnaW5hbFN0YXRlKVxyXG4gICAgICAgICAgICB9IGNhdGNoIChwcmVkaWNhdGVFcnJvcikge1xyXG4gICAgICAgICAgICAgIHJ1bkxpc3RlbmVyID0gZmFsc2VcclxuXHJcbiAgICAgICAgICAgICAgc2FmZWx5Tm90aWZ5RXJyb3Iob25FcnJvciwgcHJlZGljYXRlRXJyb3IsIHtcclxuICAgICAgICAgICAgICAgIHJhaXNlZEJ5OiAncHJlZGljYXRlJyxcclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIXJ1bkxpc3RlbmVyKSB7XHJcbiAgICAgICAgICAgICAgY29udGludWVcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbm90aWZ5TGlzdGVuZXIoZW50cnksIGFjdGlvbiwgYXBpLCBnZXRPcmlnaW5hbFN0YXRlKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAvLyBSZW1vdmUgYG9yaWdpbmFsU3RhdGVgIHN0b3JlIGZyb20gdGhpcyBzY29wZS5cclxuICAgICAgICBvcmlnaW5hbFN0YXRlID0gSU5URVJOQUxfTklMX1RPS0VOXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiByZXN1bHRcclxuICAgIH1cclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIG1pZGRsZXdhcmUsXHJcbiAgICBzdGFydExpc3RlbmluZyxcclxuICAgIHN0b3BMaXN0ZW5pbmcsXHJcbiAgICBjbGVhckxpc3RlbmVyczogY2xlYXJMaXN0ZW5lck1pZGRsZXdhcmUsXHJcbiAgfSBhcyBMaXN0ZW5lck1pZGRsZXdhcmVJbnN0YW5jZTxTLCBELCBFeHRyYUFyZ3VtZW50PlxyXG59XHJcbiIsICJpbXBvcnQgdHlwZSB7IFN0b3JlRW5oYW5jZXIgfSBmcm9tICdyZWR1eCdcclxuXHJcbmV4cG9ydCBjb25zdCBTSE9VTERfQVVUT0JBVENIID0gJ1JUS19hdXRvQmF0Y2gnXHJcblxyXG5leHBvcnQgY29uc3QgcHJlcGFyZUF1dG9CYXRjaGVkID1cclxuICA8VD4oKSA9PlxyXG4gIChwYXlsb2FkOiBUKTogeyBwYXlsb2FkOiBUOyBtZXRhOiB1bmtub3duIH0gPT4gKHtcclxuICAgIHBheWxvYWQsXHJcbiAgICBtZXRhOiB7IFtTSE9VTERfQVVUT0JBVENIXTogdHJ1ZSB9LFxyXG4gIH0pXHJcblxyXG4vLyBUT0RPIFJlbW92ZSB0aGlzIGluIDIuMFxyXG4vLyBDb3BpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL3F1ZXVlLW1pY3JvdGFza1xyXG5sZXQgcHJvbWlzZTogUHJvbWlzZTxhbnk+XHJcbmNvbnN0IHF1ZXVlTWljcm90YXNrU2hpbSA9XHJcbiAgdHlwZW9mIHF1ZXVlTWljcm90YXNrID09PSAnZnVuY3Rpb24nXHJcbiAgICA/IHF1ZXVlTWljcm90YXNrLmJpbmQoXHJcbiAgICAgICAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCdcclxuICAgICAgICAgID8gd2luZG93XHJcbiAgICAgICAgICA6IHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnXHJcbiAgICAgICAgICA/IGdsb2JhbFxyXG4gICAgICAgICAgOiBnbG9iYWxUaGlzXHJcbiAgICAgIClcclxuICAgIDogLy8gcmV1c2UgcmVzb2x2ZWQgcHJvbWlzZSwgYW5kIGFsbG9jYXRlIGl0IGxhemlseVxyXG4gICAgICAoY2I6ICgpID0+IHZvaWQpID0+XHJcbiAgICAgICAgKHByb21pc2UgfHwgKHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoKSkpLnRoZW4oY2IpLmNhdGNoKChlcnI6IGFueSkgPT5cclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aHJvdyBlcnJcclxuICAgICAgICAgIH0sIDApXHJcbiAgICAgICAgKVxyXG5cclxuY29uc3QgY3JlYXRlUXVldWVXaXRoVGltZXIgPSAodGltZW91dDogbnVtYmVyKSA9PiB7XHJcbiAgcmV0dXJuIChub3RpZnk6ICgpID0+IHZvaWQpID0+IHtcclxuICAgIHNldFRpbWVvdXQobm90aWZ5LCB0aW1lb3V0KVxyXG4gIH1cclxufVxyXG5cclxuLy8gcmVxdWVzdEFuaW1hdGlvbkZyYW1lIHdvbid0IGV4aXN0IGluIFNTUiBlbnZpcm9ubWVudHMuXHJcbi8vIEZhbGwgYmFjayB0byBhIHZhZ3VlIGFwcHJveGltYXRpb24ganVzdCB0byBrZWVwIGZyb20gZXJyb3JpbmcuXHJcbmNvbnN0IHJBRiA9XHJcbiAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZVxyXG4gICAgPyB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lXHJcbiAgICA6IGNyZWF0ZVF1ZXVlV2l0aFRpbWVyKDEwKVxyXG5cclxuZXhwb3J0IHR5cGUgQXV0b0JhdGNoT3B0aW9ucyA9XHJcbiAgfCB7IHR5cGU6ICd0aWNrJyB9XHJcbiAgfCB7IHR5cGU6ICd0aW1lcic7IHRpbWVvdXQ6IG51bWJlciB9XHJcbiAgfCB7IHR5cGU6ICdyYWYnIH1cclxuICB8IHsgdHlwZTogJ2NhbGxiYWNrJzsgcXVldWVOb3RpZmljYXRpb246IChub3RpZnk6ICgpID0+IHZvaWQpID0+IHZvaWQgfVxyXG5cclxuLyoqXHJcbiAqIEEgUmVkdXggc3RvcmUgZW5oYW5jZXIgdGhhdCB3YXRjaGVzIGZvciBcImxvdy1wcmlvcml0eVwiIGFjdGlvbnMsIGFuZCBkZWxheXNcclxuICogbm90aWZ5aW5nIHN1YnNjcmliZXJzIHVudGlsIGVpdGhlciB0aGUgcXVldWVkIGNhbGxiYWNrIGV4ZWN1dGVzIG9yIHRoZVxyXG4gKiBuZXh0IFwic3RhbmRhcmQtcHJpb3JpdHlcIiBhY3Rpb24gaXMgZGlzcGF0Y2hlZC5cclxuICpcclxuICogVGhpcyBhbGxvd3MgZGlzcGF0Y2hpbmcgbXVsdGlwbGUgXCJsb3ctcHJpb3JpdHlcIiBhY3Rpb25zIGluIGEgcm93IHdpdGggb25seVxyXG4gKiBhIHNpbmdsZSBzdWJzY3JpYmVyIG5vdGlmaWNhdGlvbiB0byB0aGUgVUkgYWZ0ZXIgdGhlIHNlcXVlbmNlIG9mIGFjdGlvbnNcclxuICogaXMgZmluaXNoZWQsIHRodXMgaW1wcm92aW5nIFVJIHJlLXJlbmRlciBwZXJmb3JtYW5jZS5cclxuICpcclxuICogV2F0Y2hlcyBmb3IgYWN0aW9ucyB3aXRoIHRoZSBgYWN0aW9uLm1ldGFbU0hPVUxEX0FVVE9CQVRDSF1gIGF0dHJpYnV0ZS5cclxuICogVGhpcyBjYW4gYmUgYWRkZWQgdG8gYGFjdGlvbi5tZXRhYCBtYW51YWxseSwgb3IgYnkgdXNpbmcgdGhlXHJcbiAqIGBwcmVwYXJlQXV0b0JhdGNoZWRgIGhlbHBlci5cclxuICpcclxuICogQnkgZGVmYXVsdCwgaXQgd2lsbCBxdWV1ZSBhIG5vdGlmaWNhdGlvbiBmb3IgdGhlIGVuZCBvZiB0aGUgZXZlbnQgbG9vcCB0aWNrLlxyXG4gKiBIb3dldmVyLCB5b3UgY2FuIHBhc3Mgc2V2ZXJhbCBvdGhlciBvcHRpb25zIHRvIGNvbmZpZ3VyZSB0aGUgYmVoYXZpb3I6XHJcbiAqIC0gYHt0eXBlOiAndGljayd9OiBxdWV1ZXMgdXNpbmcgYHF1ZXVlTWljcm90YXNrYCAoZGVmYXVsdClcclxuICogLSBge3R5cGU6ICd0aW1lciwgdGltZW91dDogbnVtYmVyfWA6IHF1ZXVlcyB1c2luZyBgc2V0VGltZW91dGBcclxuICogLSBge3R5cGU6ICdyYWYnfWA6IHF1ZXVlcyB1c2luZyBgcmVxdWVzdEFuaW1hdGlvbkZyYW1lYFxyXG4gKiAtIGB7dHlwZTogJ2NhbGxiYWNrJywgcXVldWVOb3RpZmljYXRpb246IChub3RpZnk6ICgpID0+IHZvaWQpID0+IHZvaWR9OiBsZXRzIHlvdSBwcm92aWRlIHlvdXIgb3duIGNhbGxiYWNrXHJcbiAqXHJcbiAqXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgYXV0b0JhdGNoRW5oYW5jZXIgPVxyXG4gIChvcHRpb25zOiBBdXRvQmF0Y2hPcHRpb25zID0geyB0eXBlOiAncmFmJyB9KTogU3RvcmVFbmhhbmNlciA9PlxyXG4gIChuZXh0KSA9PlxyXG4gICguLi5hcmdzKSA9PiB7XHJcbiAgICBjb25zdCBzdG9yZSA9IG5leHQoLi4uYXJncylcclxuXHJcbiAgICBsZXQgbm90aWZ5aW5nID0gdHJ1ZVxyXG4gICAgbGV0IHNob3VsZE5vdGlmeUF0RW5kT2ZUaWNrID0gZmFsc2VcclxuICAgIGxldCBub3RpZmljYXRpb25RdWV1ZWQgPSBmYWxzZVxyXG5cclxuICAgIGNvbnN0IGxpc3RlbmVycyA9IG5ldyBTZXQ8KCkgPT4gdm9pZD4oKVxyXG5cclxuICAgIGNvbnN0IHF1ZXVlQ2FsbGJhY2sgPVxyXG4gICAgICBvcHRpb25zLnR5cGUgPT09ICd0aWNrJ1xyXG4gICAgICAgID8gcXVldWVNaWNyb3Rhc2tTaGltXHJcbiAgICAgICAgOiBvcHRpb25zLnR5cGUgPT09ICdyYWYnXHJcbiAgICAgICAgPyByQUZcclxuICAgICAgICA6IG9wdGlvbnMudHlwZSA9PT0gJ2NhbGxiYWNrJ1xyXG4gICAgICAgID8gb3B0aW9ucy5xdWV1ZU5vdGlmaWNhdGlvblxyXG4gICAgICAgIDogY3JlYXRlUXVldWVXaXRoVGltZXIob3B0aW9ucy50aW1lb3V0KVxyXG5cclxuICAgIGNvbnN0IG5vdGlmeUxpc3RlbmVycyA9ICgpID0+IHtcclxuICAgICAgLy8gV2UncmUgcnVubmluZyBhdCB0aGUgZW5kIG9mIHRoZSBldmVudCBsb29wIHRpY2suXHJcbiAgICAgIC8vIFJ1biB0aGUgcmVhbCBsaXN0ZW5lciBjYWxsYmFja3MgdG8gYWN0dWFsbHkgdXBkYXRlIHRoZSBVSS5cclxuICAgICAgbm90aWZpY2F0aW9uUXVldWVkID0gZmFsc2VcclxuICAgICAgaWYgKHNob3VsZE5vdGlmeUF0RW5kT2ZUaWNrKSB7XHJcbiAgICAgICAgc2hvdWxkTm90aWZ5QXRFbmRPZlRpY2sgPSBmYWxzZVxyXG4gICAgICAgIGxpc3RlbmVycy5mb3JFYWNoKChsKSA9PiBsKCkpXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RvcmUsIHtcclxuICAgICAgLy8gT3ZlcnJpZGUgdGhlIGJhc2UgYHN0b3JlLnN1YnNjcmliZWAgbWV0aG9kIHRvIGtlZXAgb3JpZ2luYWwgbGlzdGVuZXJzXHJcbiAgICAgIC8vIGZyb20gcnVubmluZyBpZiB3ZSdyZSBkZWxheWluZyBub3RpZmljYXRpb25zXHJcbiAgICAgIHN1YnNjcmliZShsaXN0ZW5lcjogKCkgPT4gdm9pZCkge1xyXG4gICAgICAgIC8vIEVhY2ggd3JhcHBlZCBsaXN0ZW5lciB3aWxsIG9ubHkgY2FsbCB0aGUgcmVhbCBsaXN0ZW5lciBpZlxyXG4gICAgICAgIC8vIHRoZSBgbm90aWZ5aW5nYCBmbGFnIGlzIGN1cnJlbnRseSBhY3RpdmUgd2hlbiBpdCdzIGNhbGxlZC5cclxuICAgICAgICAvLyBUaGlzIGxldHMgdGhlIGJhc2Ugc3RvcmUgd29yayBhcyBub3JtYWwsIHdoaWxlIHRoZSBhY3R1YWwgVUlcclxuICAgICAgICAvLyB1cGRhdGUgYmVjb21lcyBjb250cm9sbGVkIGJ5IHRoaXMgZW5oYW5jZXIuXHJcbiAgICAgICAgY29uc3Qgd3JhcHBlZExpc3RlbmVyOiB0eXBlb2YgbGlzdGVuZXIgPSAoKSA9PiBub3RpZnlpbmcgJiYgbGlzdGVuZXIoKVxyXG4gICAgICAgIGNvbnN0IHVuc3Vic2NyaWJlID0gc3RvcmUuc3Vic2NyaWJlKHdyYXBwZWRMaXN0ZW5lcilcclxuICAgICAgICBsaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKVxyXG4gICAgICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgICB1bnN1YnNjcmliZSgpXHJcbiAgICAgICAgICBsaXN0ZW5lcnMuZGVsZXRlKGxpc3RlbmVyKVxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgLy8gT3ZlcnJpZGUgdGhlIGJhc2UgYHN0b3JlLmRpc3BhdGNoYCBtZXRob2Qgc28gdGhhdCB3ZSBjYW4gY2hlY2sgYWN0aW9uc1xyXG4gICAgICAvLyBmb3IgdGhlIGBzaG91bGRBdXRvQmF0Y2hgIGZsYWcgYW5kIGRldGVybWluZSBpZiBiYXRjaGluZyBpcyBhY3RpdmVcclxuICAgICAgZGlzcGF0Y2goYWN0aW9uOiBhbnkpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgLy8gSWYgdGhlIGFjdGlvbiBkb2VzIF9ub3RfIGhhdmUgdGhlIGBzaG91bGRBdXRvQmF0Y2hgIGZsYWcsXHJcbiAgICAgICAgICAvLyB3ZSByZXN1bWUvY29udGludWUgbm9ybWFsIG5vdGlmeS1hZnRlci1lYWNoLWRpc3BhdGNoIGJlaGF2aW9yXHJcbiAgICAgICAgICBub3RpZnlpbmcgPSAhYWN0aW9uPy5tZXRhPy5bU0hPVUxEX0FVVE9CQVRDSF1cclxuICAgICAgICAgIC8vIElmIGEgYG5vdGlmeUxpc3RlbmVyc2AgbWljcm90YXNrIHdhcyBxdWV1ZWQsIHlvdSBjYW4ndCBjYW5jZWwgaXQuXHJcbiAgICAgICAgICAvLyBJbnN0ZWFkLCB3ZSBzZXQgYSBmbGFnIHNvIHRoYXQgaXQncyBhIG5vLW9wIHdoZW4gaXQgZG9lcyBydW5cclxuICAgICAgICAgIHNob3VsZE5vdGlmeUF0RW5kT2ZUaWNrID0gIW5vdGlmeWluZ1xyXG4gICAgICAgICAgaWYgKHNob3VsZE5vdGlmeUF0RW5kT2ZUaWNrKSB7XHJcbiAgICAgICAgICAgIC8vIFdlJ3ZlIHNlZW4gYXQgbGVhc3QgMSBhY3Rpb24gd2l0aCBgU0hPVUxEX0FVVE9CQVRDSGAuIFRyeSB0byBxdWV1ZVxyXG4gICAgICAgICAgICAvLyBhIG1pY3JvdGFzayB0byBub3RpZnkgbGlzdGVuZXJzIGF0IHRoZSBlbmQgb2YgdGhlIGV2ZW50IGxvb3AgdGljay5cclxuICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHdlIG9ubHkgZW5xdWV1ZSB0aGlzIF9vbmNlXyBwZXIgdGljay5cclxuICAgICAgICAgICAgaWYgKCFub3RpZmljYXRpb25RdWV1ZWQpIHtcclxuICAgICAgICAgICAgICBub3RpZmljYXRpb25RdWV1ZWQgPSB0cnVlXHJcbiAgICAgICAgICAgICAgcXVldWVDYWxsYmFjayhub3RpZnlMaXN0ZW5lcnMpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIEdvIGFoZWFkIGFuZCBwcm9jZXNzIHRoZSBhY3Rpb24gYXMgdXN1YWwsIGluY2x1ZGluZyByZWR1Y2Vycy5cclxuICAgICAgICAgIC8vIElmIG5vcm1hbCBub3RpZmljYXRpb24gYmVoYXZpb3IgaXMgZW5hYmxlZCwgdGhlIHN0b3JlIHdpbGwgbm90aWZ5XHJcbiAgICAgICAgICAvLyBhbGwgb2YgaXRzIG93biBsaXN0ZW5lcnMsIGFuZCB0aGUgd3JhcHBlciBjYWxsYmFja3MgYWJvdmUgd2lsbFxyXG4gICAgICAgICAgLy8gc2VlIGBub3RpZnlpbmdgIGlzIHRydWUgYW5kIHBhc3Mgb24gdG8gdGhlIHJlYWwgbGlzdGVuZXIgY2FsbGJhY2tzLlxyXG4gICAgICAgICAgLy8gSWYgd2UncmUgXCJiYXRjaGluZ1wiIGJlaGF2aW9yLCB0aGVuIHRoZSB3cmFwcGVkIGNhbGxiYWNrcyB3aWxsXHJcbiAgICAgICAgICAvLyBiYWlsIG91dCwgY2F1c2luZyB0aGUgYmFzZSBzdG9yZSBub3RpZmljYXRpb24gYmVoYXZpb3IgdG8gYmUgbm8tb3BzLlxyXG4gICAgICAgICAgcmV0dXJuIHN0b3JlLmRpc3BhdGNoKGFjdGlvbilcclxuICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgLy8gQXNzdW1lIHdlJ3JlIGJhY2sgdG8gbm9ybWFsIGJlaGF2aW9yIGFmdGVyIGVhY2ggYWN0aW9uXHJcbiAgICAgICAgICBub3RpZnlpbmcgPSB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgfSlcclxuICB9XHJcbiIsICJ2YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XHJcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XHJcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xyXG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XHJcbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG4gICAgfTtcclxufSkoKTtcclxudmFyIF9fZ2VuZXJhdG9yID0gKHRoaXMgJiYgdGhpcy5fX2dlbmVyYXRvcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIGJvZHkpIHtcclxuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XHJcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xyXG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcclxuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xyXG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XHJcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxyXG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xyXG4gICAgfVxyXG59O1xyXG52YXIgX19zcHJlYWRBcnJheSA9ICh0aGlzICYmIHRoaXMuX19zcHJlYWRBcnJheSkgfHwgZnVuY3Rpb24gKHRvLCBmcm9tKSB7XHJcbiAgICBmb3IgKHZhciBpID0gMCwgaWwgPSBmcm9tLmxlbmd0aCwgaiA9IHRvLmxlbmd0aDsgaSA8IGlsOyBpKyssIGorKylcclxuICAgICAgICB0b1tqXSA9IGZyb21baV07XHJcbiAgICByZXR1cm4gdG87XHJcbn07XHJcbnZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XHJcbnZhciBfX2RlZlByb3BzID0gT2JqZWN0LmRlZmluZVByb3BlcnRpZXM7XHJcbnZhciBfX2dldE93blByb3BEZXNjcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzO1xyXG52YXIgX19nZXRPd25Qcm9wU3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XHJcbnZhciBfX2hhc093blByb3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xyXG52YXIgX19wcm9wSXNFbnVtID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcclxudmFyIF9fZGVmTm9ybWFsUHJvcCA9IGZ1bmN0aW9uIChvYmosIGtleSwgdmFsdWUpIHsgcmV0dXJuIGtleSBpbiBvYmogPyBfX2RlZlByb3Aob2JqLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pIDogb2JqW2tleV0gPSB2YWx1ZTsgfTtcclxudmFyIF9fc3ByZWFkVmFsdWVzID0gZnVuY3Rpb24gKGEsIGIpIHtcclxuICAgIGZvciAodmFyIHByb3AgaW4gYiB8fCAoYiA9IHt9KSlcclxuICAgICAgICBpZiAoX19oYXNPd25Qcm9wLmNhbGwoYiwgcHJvcCkpXHJcbiAgICAgICAgICAgIF9fZGVmTm9ybWFsUHJvcChhLCBwcm9wLCBiW3Byb3BdKTtcclxuICAgIGlmIChfX2dldE93blByb3BTeW1ib2xzKVxyXG4gICAgICAgIGZvciAodmFyIF9pID0gMCwgX2MgPSBfX2dldE93blByb3BTeW1ib2xzKGIpOyBfaSA8IF9jLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgICAgICB2YXIgcHJvcCA9IF9jW19pXTtcclxuICAgICAgICAgICAgaWYgKF9fcHJvcElzRW51bS5jYWxsKGIsIHByb3ApKVxyXG4gICAgICAgICAgICAgICAgX19kZWZOb3JtYWxQcm9wKGEsIHByb3AsIGJbcHJvcF0pO1xyXG4gICAgICAgIH1cclxuICAgIHJldHVybiBhO1xyXG59O1xyXG52YXIgX19zcHJlYWRQcm9wcyA9IGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBfX2RlZlByb3BzKGEsIF9fZ2V0T3duUHJvcERlc2NzKGIpKTsgfTtcclxudmFyIF9fYXN5bmMgPSBmdW5jdGlvbiAoX190aGlzLCBfX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgIHZhciBmdWxmaWxsZWQgPSBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICB2YXIgcmVqZWN0ZWQgPSBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHN0ZXAoZ2VuZXJhdG9yLnRocm93KHZhbHVlKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHJlamVjdChlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdmFyIHN0ZXAgPSBmdW5jdGlvbiAoeCkgeyByZXR1cm4geC5kb25lID8gcmVzb2x2ZSh4LnZhbHVlKSA6IFByb21pc2UucmVzb2x2ZSh4LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9O1xyXG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseShfX3RoaXMsIF9fYXJndW1lbnRzKSkubmV4dCgpKTtcclxuICAgIH0pO1xyXG59O1xyXG4vLyBzcmMvaW5kZXgudHNcclxuaW1wb3J0IHsgZW5hYmxlRVM1IH0gZnJvbSBcImltbWVyXCI7XHJcbmV4cG9ydCAqIGZyb20gXCJyZWR1eFwiO1xyXG5pbXBvcnQgeyBkZWZhdWx0IGFzIGRlZmF1bHQyLCBjdXJyZW50IGFzIGN1cnJlbnQyLCBmcmVlemUsIG9yaWdpbmFsLCBpc0RyYWZ0IGFzIGlzRHJhZnQ0IH0gZnJvbSBcImltbWVyXCI7XHJcbmltcG9ydCB7IGNyZWF0ZVNlbGVjdG9yIGFzIGNyZWF0ZVNlbGVjdG9yMiB9IGZyb20gXCJyZXNlbGVjdFwiO1xyXG4vLyBzcmMvY3JlYXRlRHJhZnRTYWZlU2VsZWN0b3IudHNcclxuaW1wb3J0IHsgY3VycmVudCwgaXNEcmFmdCB9IGZyb20gXCJpbW1lclwiO1xyXG5pbXBvcnQgeyBjcmVhdGVTZWxlY3RvciB9IGZyb20gXCJyZXNlbGVjdFwiO1xyXG52YXIgY3JlYXRlRHJhZnRTYWZlU2VsZWN0b3IgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgYXJncyA9IFtdO1xyXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICB9XHJcbiAgICB2YXIgc2VsZWN0b3IgPSBjcmVhdGVTZWxlY3Rvci5hcHBseSh2b2lkIDAsIGFyZ3MpO1xyXG4gICAgdmFyIHdyYXBwZWRTZWxlY3RvciA9IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgIHZhciByZXN0ID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgX2kgPSAxOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgcmVzdFtfaSAtIDFdID0gYXJndW1lbnRzW19pXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHNlbGVjdG9yLmFwcGx5KHZvaWQgMCwgX19zcHJlYWRBcnJheShbaXNEcmFmdCh2YWx1ZSkgPyBjdXJyZW50KHZhbHVlKSA6IHZhbHVlXSwgcmVzdCkpO1xyXG4gICAgfTtcclxuICAgIHJldHVybiB3cmFwcGVkU2VsZWN0b3I7XHJcbn07XHJcbi8vIHNyYy9jb25maWd1cmVTdG9yZS50c1xyXG5pbXBvcnQgeyBjcmVhdGVTdG9yZSwgY29tcG9zZSBhcyBjb21wb3NlMiwgYXBwbHlNaWRkbGV3YXJlLCBjb21iaW5lUmVkdWNlcnMgfSBmcm9tIFwicmVkdXhcIjtcclxuLy8gc3JjL2RldnRvb2xzRXh0ZW5zaW9uLnRzXHJcbmltcG9ydCB7IGNvbXBvc2UgfSBmcm9tIFwicmVkdXhcIjtcclxudmFyIGNvbXBvc2VXaXRoRGV2VG9vbHMgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHdpbmRvdy5fX1JFRFVYX0RFVlRPT0xTX0VYVEVOU0lPTl9DT01QT1NFX18gPyB3aW5kb3cuX19SRURVWF9ERVZUT09MU19FWFRFTlNJT05fQ09NUE9TRV9fIDogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApXHJcbiAgICAgICAgcmV0dXJuIHZvaWQgMDtcclxuICAgIGlmICh0eXBlb2YgYXJndW1lbnRzWzBdID09PSBcIm9iamVjdFwiKVxyXG4gICAgICAgIHJldHVybiBjb21wb3NlO1xyXG4gICAgcmV0dXJuIGNvbXBvc2UuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcclxufTtcclxudmFyIGRldlRvb2xzRW5oYW5jZXIgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHdpbmRvdy5fX1JFRFVYX0RFVlRPT0xTX0VYVEVOU0lPTl9fID8gd2luZG93Ll9fUkVEVVhfREVWVE9PTFNfRVhURU5TSU9OX18gOiBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKG5vb3AyKSB7XHJcbiAgICAgICAgcmV0dXJuIG5vb3AyO1xyXG4gICAgfTtcclxufTtcclxuLy8gc3JjL2lzUGxhaW5PYmplY3QudHNcclxuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZSkge1xyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiB8fCB2YWx1ZSA9PT0gbnVsbClcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB2YXIgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpO1xyXG4gICAgaWYgKHByb3RvID09PSBudWxsKVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgdmFyIGJhc2VQcm90byA9IHByb3RvO1xyXG4gICAgd2hpbGUgKE9iamVjdC5nZXRQcm90b3R5cGVPZihiYXNlUHJvdG8pICE9PSBudWxsKSB7XHJcbiAgICAgICAgYmFzZVByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGJhc2VQcm90byk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcHJvdG8gPT09IGJhc2VQcm90bztcclxufVxyXG4vLyBzcmMvZ2V0RGVmYXVsdE1pZGRsZXdhcmUudHNcclxuaW1wb3J0IHRodW5rTWlkZGxld2FyZSBmcm9tIFwicmVkdXgtdGh1bmtcIjtcclxuLy8gc3JjL3RzSGVscGVycy50c1xyXG52YXIgaGFzTWF0Y2hGdW5jdGlvbiA9IGZ1bmN0aW9uICh2KSB7XHJcbiAgICByZXR1cm4gdiAmJiB0eXBlb2Ygdi5tYXRjaCA9PT0gXCJmdW5jdGlvblwiO1xyXG59O1xyXG4vLyBzcmMvY3JlYXRlQWN0aW9uLnRzXHJcbmZ1bmN0aW9uIGNyZWF0ZUFjdGlvbih0eXBlLCBwcmVwYXJlQWN0aW9uKSB7XHJcbiAgICBmdW5jdGlvbiBhY3Rpb25DcmVhdG9yKCkge1xyXG4gICAgICAgIHZhciBhcmdzID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocHJlcGFyZUFjdGlvbikge1xyXG4gICAgICAgICAgICB2YXIgcHJlcGFyZWQgPSBwcmVwYXJlQWN0aW9uLmFwcGx5KHZvaWQgMCwgYXJncyk7XHJcbiAgICAgICAgICAgIGlmICghcHJlcGFyZWQpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInByZXBhcmVBY3Rpb24gZGlkIG5vdCByZXR1cm4gYW4gb2JqZWN0XCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBfX3NwcmVhZFZhbHVlcyhfX3NwcmVhZFZhbHVlcyh7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiB0eXBlLFxyXG4gICAgICAgICAgICAgICAgcGF5bG9hZDogcHJlcGFyZWQucGF5bG9hZFxyXG4gICAgICAgICAgICB9LCBcIm1ldGFcIiBpbiBwcmVwYXJlZCAmJiB7IG1ldGE6IHByZXBhcmVkLm1ldGEgfSksIFwiZXJyb3JcIiBpbiBwcmVwYXJlZCAmJiB7IGVycm9yOiBwcmVwYXJlZC5lcnJvciB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogdHlwZSwgcGF5bG9hZDogYXJnc1swXSB9O1xyXG4gICAgfVxyXG4gICAgYWN0aW9uQ3JlYXRvci50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFwiXCIgKyB0eXBlOyB9O1xyXG4gICAgYWN0aW9uQ3JlYXRvci50eXBlID0gdHlwZTtcclxuICAgIGFjdGlvbkNyZWF0b3IubWF0Y2ggPSBmdW5jdGlvbiAoYWN0aW9uKSB7IHJldHVybiBhY3Rpb24udHlwZSA9PT0gdHlwZTsgfTtcclxuICAgIHJldHVybiBhY3Rpb25DcmVhdG9yO1xyXG59XHJcbmZ1bmN0aW9uIGlzQWN0aW9uKGFjdGlvbikge1xyXG4gICAgcmV0dXJuIGlzUGxhaW5PYmplY3QoYWN0aW9uKSAmJiBcInR5cGVcIiBpbiBhY3Rpb247XHJcbn1cclxuZnVuY3Rpb24gaXNBY3Rpb25DcmVhdG9yKGFjdGlvbikge1xyXG4gICAgcmV0dXJuIHR5cGVvZiBhY3Rpb24gPT09IFwiZnVuY3Rpb25cIiAmJiBcInR5cGVcIiBpbiBhY3Rpb24gJiYgaGFzTWF0Y2hGdW5jdGlvbihhY3Rpb24pO1xyXG59XHJcbmZ1bmN0aW9uIGlzRlNBKGFjdGlvbikge1xyXG4gICAgcmV0dXJuIGlzQWN0aW9uKGFjdGlvbikgJiYgdHlwZW9mIGFjdGlvbi50eXBlID09PSBcInN0cmluZ1wiICYmIE9iamVjdC5rZXlzKGFjdGlvbikuZXZlcnkoaXNWYWxpZEtleSk7XHJcbn1cclxuZnVuY3Rpb24gaXNWYWxpZEtleShrZXkpIHtcclxuICAgIHJldHVybiBbXCJ0eXBlXCIsIFwicGF5bG9hZFwiLCBcImVycm9yXCIsIFwibWV0YVwiXS5pbmRleE9mKGtleSkgPiAtMTtcclxufVxyXG5mdW5jdGlvbiBnZXRUeXBlKGFjdGlvbkNyZWF0b3IpIHtcclxuICAgIHJldHVybiBcIlwiICsgYWN0aW9uQ3JlYXRvcjtcclxufVxyXG4vLyBzcmMvYWN0aW9uQ3JlYXRvckludmFyaWFudE1pZGRsZXdhcmUudHNcclxuZnVuY3Rpb24gZ2V0TWVzc2FnZSh0eXBlKSB7XHJcbiAgICB2YXIgc3BsaXRUeXBlID0gdHlwZSA/IChcIlwiICsgdHlwZSkuc3BsaXQoXCIvXCIpIDogW107XHJcbiAgICB2YXIgYWN0aW9uTmFtZSA9IHNwbGl0VHlwZVtzcGxpdFR5cGUubGVuZ3RoIC0gMV0gfHwgXCJhY3Rpb25DcmVhdG9yXCI7XHJcbiAgICByZXR1cm4gXCJEZXRlY3RlZCBhbiBhY3Rpb24gY3JlYXRvciB3aXRoIHR5cGUgXFxcIlwiICsgKHR5cGUgfHwgXCJ1bmtub3duXCIpICsgXCJcXFwiIGJlaW5nIGRpc3BhdGNoZWQuIFxcbk1ha2Ugc3VyZSB5b3UncmUgY2FsbGluZyB0aGUgYWN0aW9uIGNyZWF0b3IgYmVmb3JlIGRpc3BhdGNoaW5nLCBpLmUuIGBkaXNwYXRjaChcIiArIGFjdGlvbk5hbWUgKyBcIigpKWAgaW5zdGVhZCBvZiBgZGlzcGF0Y2goXCIgKyBhY3Rpb25OYW1lICsgXCIpYC4gVGhpcyBpcyBuZWNlc3NhcnkgZXZlbiBpZiB0aGUgYWN0aW9uIGhhcyBubyBwYXlsb2FkLlwiO1xyXG59XHJcbmZ1bmN0aW9uIGNyZWF0ZUFjdGlvbkNyZWF0b3JJbnZhcmlhbnRNaWRkbGV3YXJlKG9wdGlvbnMpIHtcclxuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XHJcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiKSB7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZ1bmN0aW9uIChuZXh0KSB7IHJldHVybiBmdW5jdGlvbiAoYWN0aW9uKSB7IHJldHVybiBuZXh0KGFjdGlvbik7IH07IH07IH07XHJcbiAgICB9XHJcbiAgICB2YXIgX2MgPSBvcHRpb25zLmlzQWN0aW9uQ3JlYXRvciwgaXNBY3Rpb25DcmVhdG9yMiA9IF9jID09PSB2b2lkIDAgPyBpc0FjdGlvbkNyZWF0b3IgOiBfYztcclxuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBmdW5jdGlvbiAobmV4dCkgeyByZXR1cm4gZnVuY3Rpb24gKGFjdGlvbikge1xyXG4gICAgICAgIGlmIChpc0FjdGlvbkNyZWF0b3IyKGFjdGlvbikpIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKGdldE1lc3NhZ2UoYWN0aW9uLnR5cGUpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5leHQoYWN0aW9uKTtcclxuICAgIH07IH07IH07XHJcbn1cclxuLy8gc3JjL3V0aWxzLnRzXHJcbmltcG9ydCBjcmVhdGVOZXh0U3RhdGUsIHsgaXNEcmFmdGFibGUgfSBmcm9tIFwiaW1tZXJcIjtcclxuZnVuY3Rpb24gZ2V0VGltZU1lYXN1cmVVdGlscyhtYXhEZWxheSwgZm5OYW1lKSB7XHJcbiAgICB2YXIgZWxhcHNlZCA9IDA7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIG1lYXN1cmVUaW1lOiBmdW5jdGlvbiAoZm4pIHtcclxuICAgICAgICAgICAgdmFyIHN0YXJ0ZWQgPSBEYXRlLm5vdygpO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xyXG4gICAgICAgICAgICAgICAgZWxhcHNlZCArPSBmaW5pc2hlZCAtIHN0YXJ0ZWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHdhcm5JZkV4Y2VlZGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChlbGFwc2VkID4gbWF4RGVsYXkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2Fybihmbk5hbWUgKyBcIiB0b29rIFwiICsgZWxhcHNlZCArIFwibXMsIHdoaWNoIGlzIG1vcmUgdGhhbiB0aGUgd2FybmluZyB0aHJlc2hvbGQgb2YgXCIgKyBtYXhEZWxheSArIFwibXMuIFxcbklmIHlvdXIgc3RhdGUgb3IgYWN0aW9ucyBhcmUgdmVyeSBsYXJnZSwgeW91IG1heSB3YW50IHRvIGRpc2FibGUgdGhlIG1pZGRsZXdhcmUgYXMgaXQgbWlnaHQgY2F1c2UgdG9vIG11Y2ggb2YgYSBzbG93ZG93biBpbiBkZXZlbG9wbWVudCBtb2RlLiBTZWUgaHR0cHM6Ly9yZWR1eC10b29sa2l0LmpzLm9yZy9hcGkvZ2V0RGVmYXVsdE1pZGRsZXdhcmUgZm9yIGluc3RydWN0aW9ucy5cXG5JdCBpcyBkaXNhYmxlZCBpbiBwcm9kdWN0aW9uIGJ1aWxkcywgc28geW91IGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgdGhhdC5cIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59XHJcbnZhciBNaWRkbGV3YXJlQXJyYXkgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XHJcbiAgICBfX2V4dGVuZHMoTWlkZGxld2FyZUFycmF5LCBfc3VwZXIpO1xyXG4gICAgZnVuY3Rpb24gTWlkZGxld2FyZUFycmF5KCkge1xyXG4gICAgICAgIHZhciBhcmdzID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuYXBwbHkodGhpcywgYXJncykgfHwgdGhpcztcclxuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoX3RoaXMsIE1pZGRsZXdhcmVBcnJheS5wcm90b3R5cGUpO1xyXG4gICAgICAgIHJldHVybiBfdGhpcztcclxuICAgIH1cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNaWRkbGV3YXJlQXJyYXksIFN5bWJvbC5zcGVjaWVzLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBNaWRkbGV3YXJlQXJyYXk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcclxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcclxuICAgIH0pO1xyXG4gICAgTWlkZGxld2FyZUFycmF5LnByb3RvdHlwZS5jb25jYXQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGFyciA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgICAgIGFycltfaV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5jb25jYXQuYXBwbHkodGhpcywgYXJyKTtcclxuICAgIH07XHJcbiAgICBNaWRkbGV3YXJlQXJyYXkucHJvdG90eXBlLnByZXBlbmQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGFyciA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgICAgIGFycltfaV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYXJyLmxlbmd0aCA9PT0gMSAmJiBBcnJheS5pc0FycmF5KGFyclswXSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyAoTWlkZGxld2FyZUFycmF5LmJpbmQuYXBwbHkoTWlkZGxld2FyZUFycmF5LCBfX3NwcmVhZEFycmF5KFt2b2lkIDBdLCBhcnJbMF0uY29uY2F0KHRoaXMpKSkpKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXcgKE1pZGRsZXdhcmVBcnJheS5iaW5kLmFwcGx5KE1pZGRsZXdhcmVBcnJheSwgX19zcHJlYWRBcnJheShbdm9pZCAwXSwgYXJyLmNvbmNhdCh0aGlzKSkpKSgpO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBNaWRkbGV3YXJlQXJyYXk7XHJcbn0oQXJyYXkpKTtcclxudmFyIEVuaGFuY2VyQXJyYXkgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XHJcbiAgICBfX2V4dGVuZHMoRW5oYW5jZXJBcnJheSwgX3N1cGVyKTtcclxuICAgIGZ1bmN0aW9uIEVuaGFuY2VyQXJyYXkoKSB7XHJcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5hcHBseSh0aGlzLCBhcmdzKSB8fCB0aGlzO1xyXG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihfdGhpcywgRW5oYW5jZXJBcnJheS5wcm90b3R5cGUpO1xyXG4gICAgICAgIHJldHVybiBfdGhpcztcclxuICAgIH1cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFbmhhbmNlckFycmF5LCBTeW1ib2wuc3BlY2llcywge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gRW5oYW5jZXJBcnJheTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxyXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxyXG4gICAgfSk7XHJcbiAgICBFbmhhbmNlckFycmF5LnByb3RvdHlwZS5jb25jYXQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGFyciA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgICAgIGFycltfaV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5jb25jYXQuYXBwbHkodGhpcywgYXJyKTtcclxuICAgIH07XHJcbiAgICBFbmhhbmNlckFycmF5LnByb3RvdHlwZS5wcmVwZW5kID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBhcnIgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgICAgICBhcnJbX2ldID0gYXJndW1lbnRzW19pXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGFyci5sZW5ndGggPT09IDEgJiYgQXJyYXkuaXNBcnJheShhcnJbMF0pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgKEVuaGFuY2VyQXJyYXkuYmluZC5hcHBseShFbmhhbmNlckFycmF5LCBfX3NwcmVhZEFycmF5KFt2b2lkIDBdLCBhcnJbMF0uY29uY2F0KHRoaXMpKSkpKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXcgKEVuaGFuY2VyQXJyYXkuYmluZC5hcHBseShFbmhhbmNlckFycmF5LCBfX3NwcmVhZEFycmF5KFt2b2lkIDBdLCBhcnIuY29uY2F0KHRoaXMpKSkpKCk7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIEVuaGFuY2VyQXJyYXk7XHJcbn0oQXJyYXkpKTtcclxuZnVuY3Rpb24gZnJlZXplRHJhZnRhYmxlKHZhbCkge1xyXG4gICAgcmV0dXJuIGlzRHJhZnRhYmxlKHZhbCkgPyBjcmVhdGVOZXh0U3RhdGUodmFsLCBmdW5jdGlvbiAoKSB7XHJcbiAgICB9KSA6IHZhbDtcclxufVxyXG4vLyBzcmMvaW1tdXRhYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlLnRzXHJcbnZhciBpc1Byb2R1Y3Rpb24gPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCI7XHJcbnZhciBwcmVmaXggPSBcIkludmFyaWFudCBmYWlsZWRcIjtcclxuZnVuY3Rpb24gaW52YXJpYW50KGNvbmRpdGlvbiwgbWVzc2FnZSkge1xyXG4gICAgaWYgKGNvbmRpdGlvbikge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChpc1Byb2R1Y3Rpb24pIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IocHJlZml4KTtcclxuICAgIH1cclxuICAgIHRocm93IG5ldyBFcnJvcihwcmVmaXggKyBcIjogXCIgKyAobWVzc2FnZSB8fCBcIlwiKSk7XHJcbn1cclxuZnVuY3Rpb24gc3RyaW5naWZ5KG9iaiwgc2VyaWFsaXplciwgaW5kZW50LCBkZWN5Y2xlcikge1xyXG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG9iaiwgZ2V0U2VyaWFsaXplKHNlcmlhbGl6ZXIsIGRlY3ljbGVyKSwgaW5kZW50KTtcclxufVxyXG5mdW5jdGlvbiBnZXRTZXJpYWxpemUoc2VyaWFsaXplciwgZGVjeWNsZXIpIHtcclxuICAgIHZhciBzdGFjayA9IFtdLCBrZXlzID0gW107XHJcbiAgICBpZiAoIWRlY3ljbGVyKVxyXG4gICAgICAgIGRlY3ljbGVyID0gZnVuY3Rpb24gKF8sIHZhbHVlKSB7XHJcbiAgICAgICAgICAgIGlmIChzdGFja1swXSA9PT0gdmFsdWUpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJbQ2lyY3VsYXIgfl1cIjtcclxuICAgICAgICAgICAgcmV0dXJuIFwiW0NpcmN1bGFyIH4uXCIgKyBrZXlzLnNsaWNlKDAsIHN0YWNrLmluZGV4T2YodmFsdWUpKS5qb2luKFwiLlwiKSArIFwiXVwiO1xyXG4gICAgICAgIH07XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcclxuICAgICAgICBpZiAoc3RhY2subGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB2YXIgdGhpc1BvcyA9IHN0YWNrLmluZGV4T2YodGhpcyk7XHJcbiAgICAgICAgICAgIH50aGlzUG9zID8gc3RhY2suc3BsaWNlKHRoaXNQb3MgKyAxKSA6IHN0YWNrLnB1c2godGhpcyk7XHJcbiAgICAgICAgICAgIH50aGlzUG9zID8ga2V5cy5zcGxpY2UodGhpc1BvcywgSW5maW5pdHksIGtleSkgOiBrZXlzLnB1c2goa2V5KTtcclxuICAgICAgICAgICAgaWYgKH5zdGFjay5pbmRleE9mKHZhbHVlKSlcclxuICAgICAgICAgICAgICAgIHZhbHVlID0gZGVjeWNsZXIuY2FsbCh0aGlzLCBrZXksIHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICBzdGFjay5wdXNoKHZhbHVlKTtcclxuICAgICAgICByZXR1cm4gc2VyaWFsaXplciA9PSBudWxsID8gdmFsdWUgOiBzZXJpYWxpemVyLmNhbGwodGhpcywga2V5LCB2YWx1ZSk7XHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIGlzSW1tdXRhYmxlRGVmYXVsdCh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiB8fCB2YWx1ZSA9PSBudWxsIHx8IE9iamVjdC5pc0Zyb3plbih2YWx1ZSk7XHJcbn1cclxuZnVuY3Rpb24gdHJhY2tGb3JNdXRhdGlvbnMoaXNJbW11dGFibGUsIGlnbm9yZVBhdGhzLCBvYmopIHtcclxuICAgIHZhciB0cmFja2VkUHJvcGVydGllcyA9IHRyYWNrUHJvcGVydGllcyhpc0ltbXV0YWJsZSwgaWdub3JlUGF0aHMsIG9iaik7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGRldGVjdE11dGF0aW9uczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZGV0ZWN0TXV0YXRpb25zKGlzSW1tdXRhYmxlLCBpZ25vcmVQYXRocywgdHJhY2tlZFByb3BlcnRpZXMsIG9iaik7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiB0cmFja1Byb3BlcnRpZXMoaXNJbW11dGFibGUsIGlnbm9yZVBhdGhzLCBvYmosIHBhdGgsIGNoZWNrZWRPYmplY3RzKSB7XHJcbiAgICBpZiAoaWdub3JlUGF0aHMgPT09IHZvaWQgMCkgeyBpZ25vcmVQYXRocyA9IFtdOyB9XHJcbiAgICBpZiAocGF0aCA9PT0gdm9pZCAwKSB7IHBhdGggPSBcIlwiOyB9XHJcbiAgICBpZiAoY2hlY2tlZE9iamVjdHMgPT09IHZvaWQgMCkgeyBjaGVja2VkT2JqZWN0cyA9IG5ldyBTZXQoKTsgfVxyXG4gICAgdmFyIHRyYWNrZWQgPSB7IHZhbHVlOiBvYmogfTtcclxuICAgIGlmICghaXNJbW11dGFibGUob2JqKSAmJiAhY2hlY2tlZE9iamVjdHMuaGFzKG9iaikpIHtcclxuICAgICAgICBjaGVja2VkT2JqZWN0cy5hZGQob2JqKTtcclxuICAgICAgICB0cmFja2VkLmNoaWxkcmVuID0ge307XHJcbiAgICAgICAgZm9yICh2YXIga2V5IGluIG9iaikge1xyXG4gICAgICAgICAgICB2YXIgY2hpbGRQYXRoID0gcGF0aCA/IHBhdGggKyBcIi5cIiArIGtleSA6IGtleTtcclxuICAgICAgICAgICAgaWYgKGlnbm9yZVBhdGhzLmxlbmd0aCAmJiBpZ25vcmVQYXRocy5pbmRleE9mKGNoaWxkUGF0aCkgIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0cmFja2VkLmNoaWxkcmVuW2tleV0gPSB0cmFja1Byb3BlcnRpZXMoaXNJbW11dGFibGUsIGlnbm9yZVBhdGhzLCBvYmpba2V5XSwgY2hpbGRQYXRoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJhY2tlZDtcclxufVxyXG5mdW5jdGlvbiBkZXRlY3RNdXRhdGlvbnMoaXNJbW11dGFibGUsIGlnbm9yZWRQYXRocywgdHJhY2tlZFByb3BlcnR5LCBvYmosIHNhbWVQYXJlbnRSZWYsIHBhdGgpIHtcclxuICAgIGlmIChpZ25vcmVkUGF0aHMgPT09IHZvaWQgMCkgeyBpZ25vcmVkUGF0aHMgPSBbXTsgfVxyXG4gICAgaWYgKHNhbWVQYXJlbnRSZWYgPT09IHZvaWQgMCkgeyBzYW1lUGFyZW50UmVmID0gZmFsc2U7IH1cclxuICAgIGlmIChwYXRoID09PSB2b2lkIDApIHsgcGF0aCA9IFwiXCI7IH1cclxuICAgIHZhciBwcmV2T2JqID0gdHJhY2tlZFByb3BlcnR5ID8gdHJhY2tlZFByb3BlcnR5LnZhbHVlIDogdm9pZCAwO1xyXG4gICAgdmFyIHNhbWVSZWYgPSBwcmV2T2JqID09PSBvYmo7XHJcbiAgICBpZiAoc2FtZVBhcmVudFJlZiAmJiAhc2FtZVJlZiAmJiAhTnVtYmVyLmlzTmFOKG9iaikpIHtcclxuICAgICAgICByZXR1cm4geyB3YXNNdXRhdGVkOiB0cnVlLCBwYXRoOiBwYXRoIH07XHJcbiAgICB9XHJcbiAgICBpZiAoaXNJbW11dGFibGUocHJldk9iaikgfHwgaXNJbW11dGFibGUob2JqKSkge1xyXG4gICAgICAgIHJldHVybiB7IHdhc011dGF0ZWQ6IGZhbHNlIH07XHJcbiAgICB9XHJcbiAgICB2YXIga2V5c1RvRGV0ZWN0ID0ge307XHJcbiAgICBmb3IgKHZhciBrZXkgaW4gdHJhY2tlZFByb3BlcnR5LmNoaWxkcmVuKSB7XHJcbiAgICAgICAga2V5c1RvRGV0ZWN0W2tleV0gPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgZm9yICh2YXIga2V5IGluIG9iaikge1xyXG4gICAgICAgIGtleXNUb0RldGVjdFtrZXldID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHZhciBoYXNJZ25vcmVkUGF0aHMgPSBpZ25vcmVkUGF0aHMubGVuZ3RoID4gMDtcclxuICAgIHZhciBfbG9vcF8xID0gZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgIHZhciBuZXN0ZWRQYXRoID0gcGF0aCA/IHBhdGggKyBcIi5cIiArIGtleSA6IGtleTtcclxuICAgICAgICBpZiAoaGFzSWdub3JlZFBhdGhzKSB7XHJcbiAgICAgICAgICAgIHZhciBoYXNNYXRjaGVzID0gaWdub3JlZFBhdGhzLnNvbWUoZnVuY3Rpb24gKGlnbm9yZWQpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpZ25vcmVkIGluc3RhbmNlb2YgUmVnRXhwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlnbm9yZWQudGVzdChuZXN0ZWRQYXRoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXN0ZWRQYXRoID09PSBpZ25vcmVkO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgaWYgKGhhc01hdGNoZXMpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBcImNvbnRpbnVlXCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IGRldGVjdE11dGF0aW9ucyhpc0ltbXV0YWJsZSwgaWdub3JlZFBhdGhzLCB0cmFja2VkUHJvcGVydHkuY2hpbGRyZW5ba2V5XSwgb2JqW2tleV0sIHNhbWVSZWYsIG5lc3RlZFBhdGgpO1xyXG4gICAgICAgIGlmIChyZXN1bHQud2FzTXV0YXRlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogcmVzdWx0IH07XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIGZvciAodmFyIGtleSBpbiBrZXlzVG9EZXRlY3QpIHtcclxuICAgICAgICB2YXIgc3RhdGVfMSA9IF9sb29wXzEoa2V5KTtcclxuICAgICAgICBpZiAodHlwZW9mIHN0YXRlXzEgPT09IFwib2JqZWN0XCIpXHJcbiAgICAgICAgICAgIHJldHVybiBzdGF0ZV8xLnZhbHVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgd2FzTXV0YXRlZDogZmFsc2UgfTtcclxufVxyXG5mdW5jdGlvbiBjcmVhdGVJbW11dGFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmUob3B0aW9ucykge1xyXG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cclxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIpIHtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gZnVuY3Rpb24gKG5leHQpIHsgcmV0dXJuIGZ1bmN0aW9uIChhY3Rpb24pIHsgcmV0dXJuIG5leHQoYWN0aW9uKTsgfTsgfTsgfTtcclxuICAgIH1cclxuICAgIHZhciBfYyA9IG9wdGlvbnMuaXNJbW11dGFibGUsIGlzSW1tdXRhYmxlID0gX2MgPT09IHZvaWQgMCA/IGlzSW1tdXRhYmxlRGVmYXVsdCA6IF9jLCBpZ25vcmVkUGF0aHMgPSBvcHRpb25zLmlnbm9yZWRQYXRocywgX2QgPSBvcHRpb25zLndhcm5BZnRlciwgd2FybkFmdGVyID0gX2QgPT09IHZvaWQgMCA/IDMyIDogX2QsIGlnbm9yZSA9IG9wdGlvbnMuaWdub3JlO1xyXG4gICAgaWdub3JlZFBhdGhzID0gaWdub3JlZFBhdGhzIHx8IGlnbm9yZTtcclxuICAgIHZhciB0cmFjayA9IHRyYWNrRm9yTXV0YXRpb25zLmJpbmQobnVsbCwgaXNJbW11dGFibGUsIGlnbm9yZWRQYXRocyk7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKF9jKSB7XHJcbiAgICAgICAgdmFyIGdldFN0YXRlID0gX2MuZ2V0U3RhdGU7XHJcbiAgICAgICAgdmFyIHN0YXRlID0gZ2V0U3RhdGUoKTtcclxuICAgICAgICB2YXIgdHJhY2tlciA9IHRyYWNrKHN0YXRlKTtcclxuICAgICAgICB2YXIgcmVzdWx0O1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAobmV4dCkgeyByZXR1cm4gZnVuY3Rpb24gKGFjdGlvbikge1xyXG4gICAgICAgICAgICB2YXIgbWVhc3VyZVV0aWxzID0gZ2V0VGltZU1lYXN1cmVVdGlscyh3YXJuQWZ0ZXIsIFwiSW1tdXRhYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlXCIpO1xyXG4gICAgICAgICAgICBtZWFzdXJlVXRpbHMubWVhc3VyZVRpbWUoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgc3RhdGUgPSBnZXRTdGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJhY2tlci5kZXRlY3RNdXRhdGlvbnMoKTtcclxuICAgICAgICAgICAgICAgIHRyYWNrZXIgPSB0cmFjayhzdGF0ZSk7XHJcbiAgICAgICAgICAgICAgICBpbnZhcmlhbnQoIXJlc3VsdC53YXNNdXRhdGVkLCBcIkEgc3RhdGUgbXV0YXRpb24gd2FzIGRldGVjdGVkIGJldHdlZW4gZGlzcGF0Y2hlcywgaW4gdGhlIHBhdGggJ1wiICsgKHJlc3VsdC5wYXRoIHx8IFwiXCIpICsgXCInLiAgVGhpcyBtYXkgY2F1c2UgaW5jb3JyZWN0IGJlaGF2aW9yLiAoaHR0cHM6Ly9yZWR1eC5qcy5vcmcvc3R5bGUtZ3VpZGUvc3R5bGUtZ3VpZGUjZG8tbm90LW11dGF0ZS1zdGF0ZSlcIik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB2YXIgZGlzcGF0Y2hlZEFjdGlvbiA9IG5leHQoYWN0aW9uKTtcclxuICAgICAgICAgICAgbWVhc3VyZVV0aWxzLm1lYXN1cmVUaW1lKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHN0YXRlID0gZ2V0U3RhdGUoKTtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRyYWNrZXIuZGV0ZWN0TXV0YXRpb25zKCk7XHJcbiAgICAgICAgICAgICAgICB0cmFja2VyID0gdHJhY2soc3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0Lndhc011dGF0ZWQgJiYgaW52YXJpYW50KCFyZXN1bHQud2FzTXV0YXRlZCwgXCJBIHN0YXRlIG11dGF0aW9uIHdhcyBkZXRlY3RlZCBpbnNpZGUgYSBkaXNwYXRjaCwgaW4gdGhlIHBhdGg6IFwiICsgKHJlc3VsdC5wYXRoIHx8IFwiXCIpICsgXCIuIFRha2UgYSBsb29rIGF0IHRoZSByZWR1Y2VyKHMpIGhhbmRsaW5nIHRoZSBhY3Rpb24gXCIgKyBzdHJpbmdpZnkoYWN0aW9uKSArIFwiLiAoaHR0cHM6Ly9yZWR1eC5qcy5vcmcvc3R5bGUtZ3VpZGUvc3R5bGUtZ3VpZGUjZG8tbm90LW11dGF0ZS1zdGF0ZSlcIik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBtZWFzdXJlVXRpbHMud2FybklmRXhjZWVkZWQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIGRpc3BhdGNoZWRBY3Rpb247XHJcbiAgICAgICAgfTsgfTtcclxuICAgIH07XHJcbn1cclxuLy8gc3JjL3NlcmlhbGl6YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZS50c1xyXG5mdW5jdGlvbiBpc1BsYWluKHZhbCkge1xyXG4gICAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsO1xyXG4gICAgcmV0dXJuIHZhbCA9PSBudWxsIHx8IHR5cGUgPT09IFwic3RyaW5nXCIgfHwgdHlwZSA9PT0gXCJib29sZWFuXCIgfHwgdHlwZSA9PT0gXCJudW1iZXJcIiB8fCBBcnJheS5pc0FycmF5KHZhbCkgfHwgaXNQbGFpbk9iamVjdCh2YWwpO1xyXG59XHJcbmZ1bmN0aW9uIGZpbmROb25TZXJpYWxpemFibGVWYWx1ZSh2YWx1ZSwgcGF0aCwgaXNTZXJpYWxpemFibGUsIGdldEVudHJpZXMsIGlnbm9yZWRQYXRocywgY2FjaGUpIHtcclxuICAgIGlmIChwYXRoID09PSB2b2lkIDApIHsgcGF0aCA9IFwiXCI7IH1cclxuICAgIGlmIChpc1NlcmlhbGl6YWJsZSA9PT0gdm9pZCAwKSB7IGlzU2VyaWFsaXphYmxlID0gaXNQbGFpbjsgfVxyXG4gICAgaWYgKGlnbm9yZWRQYXRocyA9PT0gdm9pZCAwKSB7IGlnbm9yZWRQYXRocyA9IFtdOyB9XHJcbiAgICB2YXIgZm91bmROZXN0ZWRTZXJpYWxpemFibGU7XHJcbiAgICBpZiAoIWlzU2VyaWFsaXphYmxlKHZhbHVlKSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGtleVBhdGg6IHBhdGggfHwgXCI8cm9vdD5cIixcclxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgfHwgdmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAoY2FjaGUgPT0gbnVsbCA/IHZvaWQgMCA6IGNhY2hlLmhhcyh2YWx1ZSkpXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgdmFyIGVudHJpZXMgPSBnZXRFbnRyaWVzICE9IG51bGwgPyBnZXRFbnRyaWVzKHZhbHVlKSA6IE9iamVjdC5lbnRyaWVzKHZhbHVlKTtcclxuICAgIHZhciBoYXNJZ25vcmVkUGF0aHMgPSBpZ25vcmVkUGF0aHMubGVuZ3RoID4gMDtcclxuICAgIHZhciBfbG9vcF8yID0gZnVuY3Rpb24gKGtleSwgbmVzdGVkVmFsdWUpIHtcclxuICAgICAgICB2YXIgbmVzdGVkUGF0aCA9IHBhdGggPyBwYXRoICsgXCIuXCIgKyBrZXkgOiBrZXk7XHJcbiAgICAgICAgaWYgKGhhc0lnbm9yZWRQYXRocykge1xyXG4gICAgICAgICAgICB2YXIgaGFzTWF0Y2hlcyA9IGlnbm9yZWRQYXRocy5zb21lKGZ1bmN0aW9uIChpZ25vcmVkKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaWdub3JlZCBpbnN0YW5jZW9mIFJlZ0V4cCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpZ25vcmVkLnRlc3QobmVzdGVkUGF0aCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmVzdGVkUGF0aCA9PT0gaWdub3JlZDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmIChoYXNNYXRjaGVzKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJjb250aW51ZVwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghaXNTZXJpYWxpemFibGUobmVzdGVkVmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAga2V5UGF0aDogbmVzdGVkUGF0aCxcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbmVzdGVkVmFsdWVcclxuICAgICAgICAgICAgICAgIH0gfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR5cGVvZiBuZXN0ZWRWYWx1ZSA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgICAgICBmb3VuZE5lc3RlZFNlcmlhbGl6YWJsZSA9IGZpbmROb25TZXJpYWxpemFibGVWYWx1ZShuZXN0ZWRWYWx1ZSwgbmVzdGVkUGF0aCwgaXNTZXJpYWxpemFibGUsIGdldEVudHJpZXMsIGlnbm9yZWRQYXRocywgY2FjaGUpO1xyXG4gICAgICAgICAgICBpZiAoZm91bmROZXN0ZWRTZXJpYWxpemFibGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBmb3VuZE5lc3RlZFNlcmlhbGl6YWJsZSB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIGZvciAodmFyIF9pID0gMCwgZW50cmllc18xID0gZW50cmllczsgX2kgPCBlbnRyaWVzXzEubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgdmFyIF9jID0gZW50cmllc18xW19pXSwga2V5ID0gX2NbMF0sIG5lc3RlZFZhbHVlID0gX2NbMV07XHJcbiAgICAgICAgdmFyIHN0YXRlXzIgPSBfbG9vcF8yKGtleSwgbmVzdGVkVmFsdWUpO1xyXG4gICAgICAgIGlmICh0eXBlb2Ygc3RhdGVfMiA9PT0gXCJvYmplY3RcIilcclxuICAgICAgICAgICAgcmV0dXJuIHN0YXRlXzIudmFsdWU7XHJcbiAgICB9XHJcbiAgICBpZiAoY2FjaGUgJiYgaXNOZXN0ZWRGcm96ZW4odmFsdWUpKVxyXG4gICAgICAgIGNhY2hlLmFkZCh2YWx1ZSk7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn1cclxuZnVuY3Rpb24gaXNOZXN0ZWRGcm96ZW4odmFsdWUpIHtcclxuICAgIGlmICghT2JqZWN0LmlzRnJvemVuKHZhbHVlKSlcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICBmb3IgKHZhciBfaSA9IDAsIF9jID0gT2JqZWN0LnZhbHVlcyh2YWx1ZSk7IF9pIDwgX2MubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgdmFyIG5lc3RlZFZhbHVlID0gX2NbX2ldO1xyXG4gICAgICAgIGlmICh0eXBlb2YgbmVzdGVkVmFsdWUgIT09IFwib2JqZWN0XCIgfHwgbmVzdGVkVmFsdWUgPT09IG51bGwpXHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIGlmICghaXNOZXN0ZWRGcm96ZW4obmVzdGVkVmFsdWUpKVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufVxyXG5mdW5jdGlvbiBjcmVhdGVTZXJpYWxpemFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmUob3B0aW9ucykge1xyXG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cclxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIpIHtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gZnVuY3Rpb24gKG5leHQpIHsgcmV0dXJuIGZ1bmN0aW9uIChhY3Rpb24pIHsgcmV0dXJuIG5leHQoYWN0aW9uKTsgfTsgfTsgfTtcclxuICAgIH1cclxuICAgIHZhciBfYyA9IG9wdGlvbnMuaXNTZXJpYWxpemFibGUsIGlzU2VyaWFsaXphYmxlID0gX2MgPT09IHZvaWQgMCA/IGlzUGxhaW4gOiBfYywgZ2V0RW50cmllcyA9IG9wdGlvbnMuZ2V0RW50cmllcywgX2QgPSBvcHRpb25zLmlnbm9yZWRBY3Rpb25zLCBpZ25vcmVkQWN0aW9ucyA9IF9kID09PSB2b2lkIDAgPyBbXSA6IF9kLCBfZSA9IG9wdGlvbnMuaWdub3JlZEFjdGlvblBhdGhzLCBpZ25vcmVkQWN0aW9uUGF0aHMgPSBfZSA9PT0gdm9pZCAwID8gW1wibWV0YS5hcmdcIiwgXCJtZXRhLmJhc2VRdWVyeU1ldGFcIl0gOiBfZSwgX2YgPSBvcHRpb25zLmlnbm9yZWRQYXRocywgaWdub3JlZFBhdGhzID0gX2YgPT09IHZvaWQgMCA/IFtdIDogX2YsIF9nID0gb3B0aW9ucy53YXJuQWZ0ZXIsIHdhcm5BZnRlciA9IF9nID09PSB2b2lkIDAgPyAzMiA6IF9nLCBfaCA9IG9wdGlvbnMuaWdub3JlU3RhdGUsIGlnbm9yZVN0YXRlID0gX2ggPT09IHZvaWQgMCA/IGZhbHNlIDogX2gsIF9qID0gb3B0aW9ucy5pZ25vcmVBY3Rpb25zLCBpZ25vcmVBY3Rpb25zID0gX2ogPT09IHZvaWQgMCA/IGZhbHNlIDogX2osIF9rID0gb3B0aW9ucy5kaXNhYmxlQ2FjaGUsIGRpc2FibGVDYWNoZSA9IF9rID09PSB2b2lkIDAgPyBmYWxzZSA6IF9rO1xyXG4gICAgdmFyIGNhY2hlID0gIWRpc2FibGVDYWNoZSAmJiBXZWFrU2V0ID8gbmV3IFdlYWtTZXQoKSA6IHZvaWQgMDtcclxuICAgIHJldHVybiBmdW5jdGlvbiAoc3RvcmVBUEkpIHsgcmV0dXJuIGZ1bmN0aW9uIChuZXh0KSB7IHJldHVybiBmdW5jdGlvbiAoYWN0aW9uKSB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IG5leHQoYWN0aW9uKTtcclxuICAgICAgICB2YXIgbWVhc3VyZVV0aWxzID0gZ2V0VGltZU1lYXN1cmVVdGlscyh3YXJuQWZ0ZXIsIFwiU2VyaWFsaXphYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlXCIpO1xyXG4gICAgICAgIGlmICghaWdub3JlQWN0aW9ucyAmJiAhKGlnbm9yZWRBY3Rpb25zLmxlbmd0aCAmJiBpZ25vcmVkQWN0aW9ucy5pbmRleE9mKGFjdGlvbi50eXBlKSAhPT0gLTEpKSB7XHJcbiAgICAgICAgICAgIG1lYXN1cmVVdGlscy5tZWFzdXJlVGltZShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZm91bmRBY3Rpb25Ob25TZXJpYWxpemFibGVWYWx1ZSA9IGZpbmROb25TZXJpYWxpemFibGVWYWx1ZShhY3Rpb24sIFwiXCIsIGlzU2VyaWFsaXphYmxlLCBnZXRFbnRyaWVzLCBpZ25vcmVkQWN0aW9uUGF0aHMsIGNhY2hlKTtcclxuICAgICAgICAgICAgICAgIGlmIChmb3VuZEFjdGlvbk5vblNlcmlhbGl6YWJsZVZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGtleVBhdGggPSBmb3VuZEFjdGlvbk5vblNlcmlhbGl6YWJsZVZhbHVlLmtleVBhdGgsIHZhbHVlID0gZm91bmRBY3Rpb25Ob25TZXJpYWxpemFibGVWYWx1ZS52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiQSBub24tc2VyaWFsaXphYmxlIHZhbHVlIHdhcyBkZXRlY3RlZCBpbiBhbiBhY3Rpb24sIGluIHRoZSBwYXRoOiBgXCIgKyBrZXlQYXRoICsgXCJgLiBWYWx1ZTpcIiwgdmFsdWUsIFwiXFxuVGFrZSBhIGxvb2sgYXQgdGhlIGxvZ2ljIHRoYXQgZGlzcGF0Y2hlZCB0aGlzIGFjdGlvbjogXCIsIGFjdGlvbiwgXCJcXG4oU2VlIGh0dHBzOi8vcmVkdXguanMub3JnL2ZhcS9hY3Rpb25zI3doeS1zaG91bGQtdHlwZS1iZS1hLXN0cmluZy1vci1hdC1sZWFzdC1zZXJpYWxpemFibGUtd2h5LXNob3VsZC1teS1hY3Rpb24tdHlwZXMtYmUtY29uc3RhbnRzKVwiLCBcIlxcbihUbyBhbGxvdyBub24tc2VyaWFsaXphYmxlIHZhbHVlcyBzZWU6IGh0dHBzOi8vcmVkdXgtdG9vbGtpdC5qcy5vcmcvdXNhZ2UvdXNhZ2UtZ3VpZGUjd29ya2luZy13aXRoLW5vbi1zZXJpYWxpemFibGUtZGF0YSlcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWlnbm9yZVN0YXRlKSB7XHJcbiAgICAgICAgICAgIG1lYXN1cmVVdGlscy5tZWFzdXJlVGltZShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgc3RhdGUgPSBzdG9yZUFQSS5nZXRTdGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGZvdW5kU3RhdGVOb25TZXJpYWxpemFibGVWYWx1ZSA9IGZpbmROb25TZXJpYWxpemFibGVWYWx1ZShzdGF0ZSwgXCJcIiwgaXNTZXJpYWxpemFibGUsIGdldEVudHJpZXMsIGlnbm9yZWRQYXRocywgY2FjaGUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZvdW5kU3RhdGVOb25TZXJpYWxpemFibGVWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBrZXlQYXRoID0gZm91bmRTdGF0ZU5vblNlcmlhbGl6YWJsZVZhbHVlLmtleVBhdGgsIHZhbHVlID0gZm91bmRTdGF0ZU5vblNlcmlhbGl6YWJsZVZhbHVlLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJBIG5vbi1zZXJpYWxpemFibGUgdmFsdWUgd2FzIGRldGVjdGVkIGluIHRoZSBzdGF0ZSwgaW4gdGhlIHBhdGg6IGBcIiArIGtleVBhdGggKyBcImAuIFZhbHVlOlwiLCB2YWx1ZSwgXCJcXG5UYWtlIGEgbG9vayBhdCB0aGUgcmVkdWNlcihzKSBoYW5kbGluZyB0aGlzIGFjdGlvbiB0eXBlOiBcIiArIGFjdGlvbi50eXBlICsgXCIuXFxuKFNlZSBodHRwczovL3JlZHV4LmpzLm9yZy9mYXEvb3JnYW5pemluZy1zdGF0ZSNjYW4taS1wdXQtZnVuY3Rpb25zLXByb21pc2VzLW9yLW90aGVyLW5vbi1zZXJpYWxpemFibGUtaXRlbXMtaW4tbXktc3RvcmUtc3RhdGUpXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgbWVhc3VyZVV0aWxzLndhcm5JZkV4Y2VlZGVkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9OyB9OyB9O1xyXG59XHJcbi8vIHNyYy9nZXREZWZhdWx0TWlkZGxld2FyZS50c1xyXG5mdW5jdGlvbiBpc0Jvb2xlYW4oeCkge1xyXG4gICAgcmV0dXJuIHR5cGVvZiB4ID09PSBcImJvb2xlYW5cIjtcclxufVxyXG5mdW5jdGlvbiBjdXJyeUdldERlZmF1bHRNaWRkbGV3YXJlKCkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGN1cnJpZWRHZXREZWZhdWx0TWlkZGxld2FyZShvcHRpb25zKSB7XHJcbiAgICAgICAgcmV0dXJuIGdldERlZmF1bHRNaWRkbGV3YXJlKG9wdGlvbnMpO1xyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiBnZXREZWZhdWx0TWlkZGxld2FyZShvcHRpb25zKSB7XHJcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxyXG4gICAgdmFyIF9jID0gb3B0aW9ucy50aHVuaywgdGh1bmsgPSBfYyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9jLCBfZCA9IG9wdGlvbnMuaW1tdXRhYmxlQ2hlY2ssIGltbXV0YWJsZUNoZWNrID0gX2QgPT09IHZvaWQgMCA/IHRydWUgOiBfZCwgX2UgPSBvcHRpb25zLnNlcmlhbGl6YWJsZUNoZWNrLCBzZXJpYWxpemFibGVDaGVjayA9IF9lID09PSB2b2lkIDAgPyB0cnVlIDogX2UsIF9mID0gb3B0aW9ucy5hY3Rpb25DcmVhdG9yQ2hlY2ssIGFjdGlvbkNyZWF0b3JDaGVjayA9IF9mID09PSB2b2lkIDAgPyB0cnVlIDogX2Y7XHJcbiAgICB2YXIgbWlkZGxld2FyZUFycmF5ID0gbmV3IE1pZGRsZXdhcmVBcnJheSgpO1xyXG4gICAgaWYgKHRodW5rKSB7XHJcbiAgICAgICAgaWYgKGlzQm9vbGVhbih0aHVuaykpIHtcclxuICAgICAgICAgICAgbWlkZGxld2FyZUFycmF5LnB1c2godGh1bmtNaWRkbGV3YXJlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG1pZGRsZXdhcmVBcnJheS5wdXNoKHRodW5rTWlkZGxld2FyZS53aXRoRXh0cmFBcmd1bWVudCh0aHVuay5leHRyYUFyZ3VtZW50KSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xyXG4gICAgICAgIGlmIChpbW11dGFibGVDaGVjaykge1xyXG4gICAgICAgICAgICB2YXIgaW1tdXRhYmxlT3B0aW9ucyA9IHt9O1xyXG4gICAgICAgICAgICBpZiAoIWlzQm9vbGVhbihpbW11dGFibGVDaGVjaykpIHtcclxuICAgICAgICAgICAgICAgIGltbXV0YWJsZU9wdGlvbnMgPSBpbW11dGFibGVDaGVjaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBtaWRkbGV3YXJlQXJyYXkudW5zaGlmdChjcmVhdGVJbW11dGFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmUoaW1tdXRhYmxlT3B0aW9ucykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2VyaWFsaXphYmxlQ2hlY2spIHtcclxuICAgICAgICAgICAgdmFyIHNlcmlhbGl6YWJsZU9wdGlvbnMgPSB7fTtcclxuICAgICAgICAgICAgaWYgKCFpc0Jvb2xlYW4oc2VyaWFsaXphYmxlQ2hlY2spKSB7XHJcbiAgICAgICAgICAgICAgICBzZXJpYWxpemFibGVPcHRpb25zID0gc2VyaWFsaXphYmxlQ2hlY2s7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbWlkZGxld2FyZUFycmF5LnB1c2goY3JlYXRlU2VyaWFsaXphYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlKHNlcmlhbGl6YWJsZU9wdGlvbnMpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGFjdGlvbkNyZWF0b3JDaGVjaykge1xyXG4gICAgICAgICAgICB2YXIgYWN0aW9uQ3JlYXRvck9wdGlvbnMgPSB7fTtcclxuICAgICAgICAgICAgaWYgKCFpc0Jvb2xlYW4oYWN0aW9uQ3JlYXRvckNoZWNrKSkge1xyXG4gICAgICAgICAgICAgICAgYWN0aW9uQ3JlYXRvck9wdGlvbnMgPSBhY3Rpb25DcmVhdG9yQ2hlY2s7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbWlkZGxld2FyZUFycmF5LnVuc2hpZnQoY3JlYXRlQWN0aW9uQ3JlYXRvckludmFyaWFudE1pZGRsZXdhcmUoYWN0aW9uQ3JlYXRvck9wdGlvbnMpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbWlkZGxld2FyZUFycmF5O1xyXG59XHJcbi8vIHNyYy9jb25maWd1cmVTdG9yZS50c1xyXG52YXIgSVNfUFJPRFVDVElPTiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIjtcclxuZnVuY3Rpb24gY29uZmlndXJlU3RvcmUob3B0aW9ucykge1xyXG4gICAgdmFyIGN1cnJpZWRHZXREZWZhdWx0TWlkZGxld2FyZSA9IGN1cnJ5R2V0RGVmYXVsdE1pZGRsZXdhcmUoKTtcclxuICAgIHZhciBfYyA9IG9wdGlvbnMgfHwge30sIF9kID0gX2MucmVkdWNlciwgcmVkdWNlciA9IF9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZCwgX2UgPSBfYy5taWRkbGV3YXJlLCBtaWRkbGV3YXJlID0gX2UgPT09IHZvaWQgMCA/IGN1cnJpZWRHZXREZWZhdWx0TWlkZGxld2FyZSgpIDogX2UsIF9mID0gX2MuZGV2VG9vbHMsIGRldlRvb2xzID0gX2YgPT09IHZvaWQgMCA/IHRydWUgOiBfZiwgX2cgPSBfYy5wcmVsb2FkZWRTdGF0ZSwgcHJlbG9hZGVkU3RhdGUgPSBfZyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2csIF9oID0gX2MuZW5oYW5jZXJzLCBlbmhhbmNlcnMgPSBfaCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2g7XHJcbiAgICB2YXIgcm9vdFJlZHVjZXI7XHJcbiAgICBpZiAodHlwZW9mIHJlZHVjZXIgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgIHJvb3RSZWR1Y2VyID0gcmVkdWNlcjtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGlzUGxhaW5PYmplY3QocmVkdWNlcikpIHtcclxuICAgICAgICByb290UmVkdWNlciA9IGNvbWJpbmVSZWR1Y2VycyhyZWR1Y2VyKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignXCJyZWR1Y2VyXCIgaXMgYSByZXF1aXJlZCBhcmd1bWVudCwgYW5kIG11c3QgYmUgYSBmdW5jdGlvbiBvciBhbiBvYmplY3Qgb2YgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHBhc3NlZCB0byBjb21iaW5lUmVkdWNlcnMnKTtcclxuICAgIH1cclxuICAgIHZhciBmaW5hbE1pZGRsZXdhcmUgPSBtaWRkbGV3YXJlO1xyXG4gICAgaWYgKHR5cGVvZiBmaW5hbE1pZGRsZXdhcmUgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgIGZpbmFsTWlkZGxld2FyZSA9IGZpbmFsTWlkZGxld2FyZShjdXJyaWVkR2V0RGVmYXVsdE1pZGRsZXdhcmUpO1xyXG4gICAgICAgIGlmICghSVNfUFJPRFVDVElPTiAmJiAhQXJyYXkuaXNBcnJheShmaW5hbE1pZGRsZXdhcmUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIndoZW4gdXNpbmcgYSBtaWRkbGV3YXJlIGJ1aWxkZXIgZnVuY3Rpb24sIGFuIGFycmF5IG9mIG1pZGRsZXdhcmUgbXVzdCBiZSByZXR1cm5lZFwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIUlTX1BST0RVQ1RJT04gJiYgZmluYWxNaWRkbGV3YXJlLnNvbWUoZnVuY3Rpb24gKGl0ZW0pIHsgcmV0dXJuIHR5cGVvZiBpdGVtICE9PSBcImZ1bmN0aW9uXCI7IH0pKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZWFjaCBtaWRkbGV3YXJlIHByb3ZpZGVkIHRvIGNvbmZpZ3VyZVN0b3JlIG11c3QgYmUgYSBmdW5jdGlvblwiKTtcclxuICAgIH1cclxuICAgIHZhciBtaWRkbGV3YXJlRW5oYW5jZXIgPSBhcHBseU1pZGRsZXdhcmUuYXBwbHkodm9pZCAwLCBmaW5hbE1pZGRsZXdhcmUpO1xyXG4gICAgdmFyIGZpbmFsQ29tcG9zZSA9IGNvbXBvc2UyO1xyXG4gICAgaWYgKGRldlRvb2xzKSB7XHJcbiAgICAgICAgZmluYWxDb21wb3NlID0gY29tcG9zZVdpdGhEZXZUb29scyhfX3NwcmVhZFZhbHVlcyh7XHJcbiAgICAgICAgICAgIHRyYWNlOiAhSVNfUFJPRFVDVElPTlxyXG4gICAgICAgIH0sIHR5cGVvZiBkZXZUb29scyA9PT0gXCJvYmplY3RcIiAmJiBkZXZUb29scykpO1xyXG4gICAgfVxyXG4gICAgdmFyIGRlZmF1bHRFbmhhbmNlcnMgPSBuZXcgRW5oYW5jZXJBcnJheShtaWRkbGV3YXJlRW5oYW5jZXIpO1xyXG4gICAgdmFyIHN0b3JlRW5oYW5jZXJzID0gZGVmYXVsdEVuaGFuY2VycztcclxuICAgIGlmIChBcnJheS5pc0FycmF5KGVuaGFuY2VycykpIHtcclxuICAgICAgICBzdG9yZUVuaGFuY2VycyA9IF9fc3ByZWFkQXJyYXkoW21pZGRsZXdhcmVFbmhhbmNlcl0sIGVuaGFuY2Vycyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0eXBlb2YgZW5oYW5jZXJzID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICBzdG9yZUVuaGFuY2VycyA9IGVuaGFuY2VycyhkZWZhdWx0RW5oYW5jZXJzKTtcclxuICAgIH1cclxuICAgIHZhciBjb21wb3NlZEVuaGFuY2VyID0gZmluYWxDb21wb3NlLmFwcGx5KHZvaWQgMCwgc3RvcmVFbmhhbmNlcnMpO1xyXG4gICAgcmV0dXJuIGNyZWF0ZVN0b3JlKHJvb3RSZWR1Y2VyLCBwcmVsb2FkZWRTdGF0ZSwgY29tcG9zZWRFbmhhbmNlcik7XHJcbn1cclxuLy8gc3JjL2NyZWF0ZVJlZHVjZXIudHNcclxuaW1wb3J0IGNyZWF0ZU5leHRTdGF0ZTIsIHsgaXNEcmFmdCBhcyBpc0RyYWZ0MiwgaXNEcmFmdGFibGUgYXMgaXNEcmFmdGFibGUyIH0gZnJvbSBcImltbWVyXCI7XHJcbi8vIHNyYy9tYXBCdWlsZGVycy50c1xyXG5mdW5jdGlvbiBleGVjdXRlUmVkdWNlckJ1aWxkZXJDYWxsYmFjayhidWlsZGVyQ2FsbGJhY2spIHtcclxuICAgIHZhciBhY3Rpb25zTWFwID0ge307XHJcbiAgICB2YXIgYWN0aW9uTWF0Y2hlcnMgPSBbXTtcclxuICAgIHZhciBkZWZhdWx0Q2FzZVJlZHVjZXI7XHJcbiAgICB2YXIgYnVpbGRlciA9IHtcclxuICAgICAgICBhZGRDYXNlOiBmdW5jdGlvbiAodHlwZU9yQWN0aW9uQ3JlYXRvciwgcmVkdWNlcikge1xyXG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYWN0aW9uTWF0Y2hlcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImBidWlsZGVyLmFkZENhc2VgIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBiZWZvcmUgY2FsbGluZyBgYnVpbGRlci5hZGRNYXRjaGVyYFwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChkZWZhdWx0Q2FzZVJlZHVjZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJgYnVpbGRlci5hZGRDYXNlYCBzaG91bGQgb25seSBiZSBjYWxsZWQgYmVmb3JlIGNhbGxpbmcgYGJ1aWxkZXIuYWRkRGVmYXVsdENhc2VgXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciB0eXBlID0gdHlwZW9mIHR5cGVPckFjdGlvbkNyZWF0b3IgPT09IFwic3RyaW5nXCIgPyB0eXBlT3JBY3Rpb25DcmVhdG9yIDogdHlwZU9yQWN0aW9uQ3JlYXRvci50eXBlO1xyXG4gICAgICAgICAgICBpZiAoIXR5cGUpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImBidWlsZGVyLmFkZENhc2VgIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBhbiBlbXB0eSBhY3Rpb24gdHlwZVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodHlwZSBpbiBhY3Rpb25zTWFwKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJgYnVpbGRlci5hZGRDYXNlYCBjYW5ub3QgYmUgY2FsbGVkIHdpdGggdHdvIHJlZHVjZXJzIGZvciB0aGUgc2FtZSBhY3Rpb24gdHlwZVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhY3Rpb25zTWFwW3R5cGVdID0gcmVkdWNlcjtcclxuICAgICAgICAgICAgcmV0dXJuIGJ1aWxkZXI7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBhZGRNYXRjaGVyOiBmdW5jdGlvbiAobWF0Y2hlciwgcmVkdWNlcikge1xyXG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGVmYXVsdENhc2VSZWR1Y2VyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYGJ1aWxkZXIuYWRkTWF0Y2hlcmAgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJlZm9yZSBjYWxsaW5nIGBidWlsZGVyLmFkZERlZmF1bHRDYXNlYFwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhY3Rpb25NYXRjaGVycy5wdXNoKHsgbWF0Y2hlcjogbWF0Y2hlciwgcmVkdWNlcjogcmVkdWNlciB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIGJ1aWxkZXI7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBhZGREZWZhdWx0Q2FzZTogZnVuY3Rpb24gKHJlZHVjZXIpIHtcclxuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGRlZmF1bHRDYXNlUmVkdWNlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImBidWlsZGVyLmFkZERlZmF1bHRDYXNlYCBjYW4gb25seSBiZSBjYWxsZWQgb25jZVwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkZWZhdWx0Q2FzZVJlZHVjZXIgPSByZWR1Y2VyO1xyXG4gICAgICAgICAgICByZXR1cm4gYnVpbGRlcjtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgYnVpbGRlckNhbGxiYWNrKGJ1aWxkZXIpO1xyXG4gICAgcmV0dXJuIFthY3Rpb25zTWFwLCBhY3Rpb25NYXRjaGVycywgZGVmYXVsdENhc2VSZWR1Y2VyXTtcclxufVxyXG4vLyBzcmMvY3JlYXRlUmVkdWNlci50c1xyXG5mdW5jdGlvbiBpc1N0YXRlRnVuY3Rpb24oeCkge1xyXG4gICAgcmV0dXJuIHR5cGVvZiB4ID09PSBcImZ1bmN0aW9uXCI7XHJcbn1cclxudmFyIGhhc1dhcm5lZEFib3V0T2JqZWN0Tm90YXRpb24gPSBmYWxzZTtcclxuZnVuY3Rpb24gY3JlYXRlUmVkdWNlcihpbml0aWFsU3RhdGUsIG1hcE9yQnVpbGRlckNhbGxiYWNrLCBhY3Rpb25NYXRjaGVycywgZGVmYXVsdENhc2VSZWR1Y2VyKSB7XHJcbiAgICBpZiAoYWN0aW9uTWF0Y2hlcnMgPT09IHZvaWQgMCkgeyBhY3Rpb25NYXRjaGVycyA9IFtdOyB9XHJcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBtYXBPckJ1aWxkZXJDYWxsYmFjayA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgICAgICBpZiAoIWhhc1dhcm5lZEFib3V0T2JqZWN0Tm90YXRpb24pIHtcclxuICAgICAgICAgICAgICAgIGhhc1dhcm5lZEFib3V0T2JqZWN0Tm90YXRpb24gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFwiVGhlIG9iamVjdCBub3RhdGlvbiBmb3IgYGNyZWF0ZVJlZHVjZXJgIGlzIGRlcHJlY2F0ZWQsIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gUlRLIDIuMC4gUGxlYXNlIHVzZSB0aGUgJ2J1aWxkZXIgY2FsbGJhY2snIG5vdGF0aW9uIGluc3RlYWQ6IGh0dHBzOi8vcmVkdXgtdG9vbGtpdC5qcy5vcmcvYXBpL2NyZWF0ZVJlZHVjZXJcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB2YXIgX2MgPSB0eXBlb2YgbWFwT3JCdWlsZGVyQ2FsbGJhY2sgPT09IFwiZnVuY3Rpb25cIiA/IGV4ZWN1dGVSZWR1Y2VyQnVpbGRlckNhbGxiYWNrKG1hcE9yQnVpbGRlckNhbGxiYWNrKSA6IFttYXBPckJ1aWxkZXJDYWxsYmFjaywgYWN0aW9uTWF0Y2hlcnMsIGRlZmF1bHRDYXNlUmVkdWNlcl0sIGFjdGlvbnNNYXAgPSBfY1swXSwgZmluYWxBY3Rpb25NYXRjaGVycyA9IF9jWzFdLCBmaW5hbERlZmF1bHRDYXNlUmVkdWNlciA9IF9jWzJdO1xyXG4gICAgdmFyIGdldEluaXRpYWxTdGF0ZTtcclxuICAgIGlmIChpc1N0YXRlRnVuY3Rpb24oaW5pdGlhbFN0YXRlKSkge1xyXG4gICAgICAgIGdldEluaXRpYWxTdGF0ZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZyZWV6ZURyYWZ0YWJsZShpbml0aWFsU3RhdGUoKSk7IH07XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICB2YXIgZnJvemVuSW5pdGlhbFN0YXRlXzEgPSBmcmVlemVEcmFmdGFibGUoaW5pdGlhbFN0YXRlKTtcclxuICAgICAgICBnZXRJbml0aWFsU3RhdGUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBmcm96ZW5Jbml0aWFsU3RhdGVfMTsgfTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHJlZHVjZXIoc3RhdGUsIGFjdGlvbikge1xyXG4gICAgICAgIGlmIChzdGF0ZSA9PT0gdm9pZCAwKSB7IHN0YXRlID0gZ2V0SW5pdGlhbFN0YXRlKCk7IH1cclxuICAgICAgICB2YXIgY2FzZVJlZHVjZXJzID0gX19zcHJlYWRBcnJheShbXHJcbiAgICAgICAgICAgIGFjdGlvbnNNYXBbYWN0aW9uLnR5cGVdXHJcbiAgICAgICAgXSwgZmluYWxBY3Rpb25NYXRjaGVycy5maWx0ZXIoZnVuY3Rpb24gKF9jKSB7XHJcbiAgICAgICAgICAgIHZhciBtYXRjaGVyID0gX2MubWF0Y2hlcjtcclxuICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXIoYWN0aW9uKTtcclxuICAgICAgICB9KS5tYXAoZnVuY3Rpb24gKF9jKSB7XHJcbiAgICAgICAgICAgIHZhciByZWR1Y2VyMiA9IF9jLnJlZHVjZXI7XHJcbiAgICAgICAgICAgIHJldHVybiByZWR1Y2VyMjtcclxuICAgICAgICB9KSk7XHJcbiAgICAgICAgaWYgKGNhc2VSZWR1Y2Vycy5maWx0ZXIoZnVuY3Rpb24gKGNyKSB7IHJldHVybiAhIWNyOyB9KS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgY2FzZVJlZHVjZXJzID0gW2ZpbmFsRGVmYXVsdENhc2VSZWR1Y2VyXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNhc2VSZWR1Y2Vycy5yZWR1Y2UoZnVuY3Rpb24gKHByZXZpb3VzU3RhdGUsIGNhc2VSZWR1Y2VyKSB7XHJcbiAgICAgICAgICAgIGlmIChjYXNlUmVkdWNlcikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzRHJhZnQyKHByZXZpb3VzU3RhdGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRyYWZ0ID0gcHJldmlvdXNTdGF0ZTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gY2FzZVJlZHVjZXIoZHJhZnQsIGFjdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmV2aW91c1N0YXRlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoIWlzRHJhZnRhYmxlMihwcmV2aW91c1N0YXRlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBjYXNlUmVkdWNlcihwcmV2aW91c1N0YXRlLCBhY3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNTdGF0ZSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzU3RhdGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJBIGNhc2UgcmVkdWNlciBvbiBhIG5vbi1kcmFmdGFibGUgdmFsdWUgbXVzdCBub3QgcmV0dXJuIHVuZGVmaW5lZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVOZXh0U3RhdGUyKHByZXZpb3VzU3RhdGUsIGZ1bmN0aW9uIChkcmFmdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FzZVJlZHVjZXIoZHJhZnQsIGFjdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzU3RhdGU7XHJcbiAgICAgICAgfSwgc3RhdGUpO1xyXG4gICAgfVxyXG4gICAgcmVkdWNlci5nZXRJbml0aWFsU3RhdGUgPSBnZXRJbml0aWFsU3RhdGU7XHJcbiAgICByZXR1cm4gcmVkdWNlcjtcclxufVxyXG4vLyBzcmMvY3JlYXRlU2xpY2UudHNcclxudmFyIGhhc1dhcm5lZEFib3V0T2JqZWN0Tm90YXRpb24yID0gZmFsc2U7XHJcbmZ1bmN0aW9uIGdldFR5cGUyKHNsaWNlLCBhY3Rpb25LZXkpIHtcclxuICAgIHJldHVybiBzbGljZSArIFwiL1wiICsgYWN0aW9uS2V5O1xyXG59XHJcbmZ1bmN0aW9uIGNyZWF0ZVNsaWNlKG9wdGlvbnMpIHtcclxuICAgIHZhciBuYW1lID0gb3B0aW9ucy5uYW1lO1xyXG4gICAgaWYgKCFuYW1lKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYG5hbWVgIGlzIGEgcmVxdWlyZWQgb3B0aW9uIGZvciBjcmVhdGVTbGljZVwiKTtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgcHJvY2VzcyAhPT0gXCJ1bmRlZmluZWRcIiAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJkZXZlbG9wbWVudFwiKSB7XHJcbiAgICAgICAgaWYgKG9wdGlvbnMuaW5pdGlhbFN0YXRlID09PSB2b2lkIDApIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIllvdSBtdXN0IHByb3ZpZGUgYW4gYGluaXRpYWxTdGF0ZWAgdmFsdWUgdGhhdCBpcyBub3QgYHVuZGVmaW5lZGAuIFlvdSBtYXkgaGF2ZSBtaXNzcGVsbGVkIGBpbml0aWFsU3RhdGVgXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHZhciBpbml0aWFsU3RhdGUgPSB0eXBlb2Ygb3B0aW9ucy5pbml0aWFsU3RhdGUgPT0gXCJmdW5jdGlvblwiID8gb3B0aW9ucy5pbml0aWFsU3RhdGUgOiBmcmVlemVEcmFmdGFibGUob3B0aW9ucy5pbml0aWFsU3RhdGUpO1xyXG4gICAgdmFyIHJlZHVjZXJzID0gb3B0aW9ucy5yZWR1Y2VycyB8fCB7fTtcclxuICAgIHZhciByZWR1Y2VyTmFtZXMgPSBPYmplY3Qua2V5cyhyZWR1Y2Vycyk7XHJcbiAgICB2YXIgc2xpY2VDYXNlUmVkdWNlcnNCeU5hbWUgPSB7fTtcclxuICAgIHZhciBzbGljZUNhc2VSZWR1Y2Vyc0J5VHlwZSA9IHt9O1xyXG4gICAgdmFyIGFjdGlvbkNyZWF0b3JzID0ge307XHJcbiAgICByZWR1Y2VyTmFtZXMuZm9yRWFjaChmdW5jdGlvbiAocmVkdWNlck5hbWUpIHtcclxuICAgICAgICB2YXIgbWF5YmVSZWR1Y2VyV2l0aFByZXBhcmUgPSByZWR1Y2Vyc1tyZWR1Y2VyTmFtZV07XHJcbiAgICAgICAgdmFyIHR5cGUgPSBnZXRUeXBlMihuYW1lLCByZWR1Y2VyTmFtZSk7XHJcbiAgICAgICAgdmFyIGNhc2VSZWR1Y2VyO1xyXG4gICAgICAgIHZhciBwcmVwYXJlQ2FsbGJhY2s7XHJcbiAgICAgICAgaWYgKFwicmVkdWNlclwiIGluIG1heWJlUmVkdWNlcldpdGhQcmVwYXJlKSB7XHJcbiAgICAgICAgICAgIGNhc2VSZWR1Y2VyID0gbWF5YmVSZWR1Y2VyV2l0aFByZXBhcmUucmVkdWNlcjtcclxuICAgICAgICAgICAgcHJlcGFyZUNhbGxiYWNrID0gbWF5YmVSZWR1Y2VyV2l0aFByZXBhcmUucHJlcGFyZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNhc2VSZWR1Y2VyID0gbWF5YmVSZWR1Y2VyV2l0aFByZXBhcmU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNsaWNlQ2FzZVJlZHVjZXJzQnlOYW1lW3JlZHVjZXJOYW1lXSA9IGNhc2VSZWR1Y2VyO1xyXG4gICAgICAgIHNsaWNlQ2FzZVJlZHVjZXJzQnlUeXBlW3R5cGVdID0gY2FzZVJlZHVjZXI7XHJcbiAgICAgICAgYWN0aW9uQ3JlYXRvcnNbcmVkdWNlck5hbWVdID0gcHJlcGFyZUNhbGxiYWNrID8gY3JlYXRlQWN0aW9uKHR5cGUsIHByZXBhcmVDYWxsYmFjaykgOiBjcmVhdGVBY3Rpb24odHlwZSk7XHJcbiAgICB9KTtcclxuICAgIGZ1bmN0aW9uIGJ1aWxkUmVkdWNlcigpIHtcclxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5leHRyYVJlZHVjZXJzID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWhhc1dhcm5lZEFib3V0T2JqZWN0Tm90YXRpb24yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaGFzV2FybmVkQWJvdXRPYmplY3ROb3RhdGlvbjIgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcIlRoZSBvYmplY3Qgbm90YXRpb24gZm9yIGBjcmVhdGVTbGljZS5leHRyYVJlZHVjZXJzYCBpcyBkZXByZWNhdGVkLCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIFJUSyAyLjAuIFBsZWFzZSB1c2UgdGhlICdidWlsZGVyIGNhbGxiYWNrJyBub3RhdGlvbiBpbnN0ZWFkOiBodHRwczovL3JlZHV4LXRvb2xraXQuanMub3JnL2FwaS9jcmVhdGVTbGljZVwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgX2MgPSB0eXBlb2Ygb3B0aW9ucy5leHRyYVJlZHVjZXJzID09PSBcImZ1bmN0aW9uXCIgPyBleGVjdXRlUmVkdWNlckJ1aWxkZXJDYWxsYmFjayhvcHRpb25zLmV4dHJhUmVkdWNlcnMpIDogW29wdGlvbnMuZXh0cmFSZWR1Y2Vyc10sIF9kID0gX2NbMF0sIGV4dHJhUmVkdWNlcnMgPSBfZCA9PT0gdm9pZCAwID8ge30gOiBfZCwgX2UgPSBfY1sxXSwgYWN0aW9uTWF0Y2hlcnMgPSBfZSA9PT0gdm9pZCAwID8gW10gOiBfZSwgX2YgPSBfY1syXSwgZGVmYXVsdENhc2VSZWR1Y2VyID0gX2YgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9mO1xyXG4gICAgICAgIHZhciBmaW5hbENhc2VSZWR1Y2VycyA9IF9fc3ByZWFkVmFsdWVzKF9fc3ByZWFkVmFsdWVzKHt9LCBleHRyYVJlZHVjZXJzKSwgc2xpY2VDYXNlUmVkdWNlcnNCeVR5cGUpO1xyXG4gICAgICAgIHJldHVybiBjcmVhdGVSZWR1Y2VyKGluaXRpYWxTdGF0ZSwgZnVuY3Rpb24gKGJ1aWxkZXIpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIGZpbmFsQ2FzZVJlZHVjZXJzKSB7XHJcbiAgICAgICAgICAgICAgICBidWlsZGVyLmFkZENhc2Uoa2V5LCBmaW5hbENhc2VSZWR1Y2Vyc1trZXldKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmb3IgKHZhciBfaSA9IDAsIGFjdGlvbk1hdGNoZXJzXzEgPSBhY3Rpb25NYXRjaGVyczsgX2kgPCBhY3Rpb25NYXRjaGVyc18xLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIG0gPSBhY3Rpb25NYXRjaGVyc18xW19pXTtcclxuICAgICAgICAgICAgICAgIGJ1aWxkZXIuYWRkTWF0Y2hlcihtLm1hdGNoZXIsIG0ucmVkdWNlcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGRlZmF1bHRDYXNlUmVkdWNlcikge1xyXG4gICAgICAgICAgICAgICAgYnVpbGRlci5hZGREZWZhdWx0Q2FzZShkZWZhdWx0Q2FzZVJlZHVjZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICB2YXIgX3JlZHVjZXI7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIG5hbWU6IG5hbWUsXHJcbiAgICAgICAgcmVkdWNlcjogZnVuY3Rpb24gKHN0YXRlLCBhY3Rpb24pIHtcclxuICAgICAgICAgICAgaWYgKCFfcmVkdWNlcilcclxuICAgICAgICAgICAgICAgIF9yZWR1Y2VyID0gYnVpbGRSZWR1Y2VyKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBfcmVkdWNlcihzdGF0ZSwgYWN0aW9uKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGFjdGlvbnM6IGFjdGlvbkNyZWF0b3JzLFxyXG4gICAgICAgIGNhc2VSZWR1Y2Vyczogc2xpY2VDYXNlUmVkdWNlcnNCeU5hbWUsXHJcbiAgICAgICAgZ2V0SW5pdGlhbFN0YXRlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICghX3JlZHVjZXIpXHJcbiAgICAgICAgICAgICAgICBfcmVkdWNlciA9IGJ1aWxkUmVkdWNlcigpO1xyXG4gICAgICAgICAgICByZXR1cm4gX3JlZHVjZXIuZ2V0SW5pdGlhbFN0YXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxyXG4vLyBzcmMvZW50aXRpZXMvZW50aXR5X3N0YXRlLnRzXHJcbmZ1bmN0aW9uIGdldEluaXRpYWxFbnRpdHlTdGF0ZSgpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgaWRzOiBbXSxcclxuICAgICAgICBlbnRpdGllczoge31cclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gY3JlYXRlSW5pdGlhbFN0YXRlRmFjdG9yeSgpIHtcclxuICAgIGZ1bmN0aW9uIGdldEluaXRpYWxTdGF0ZShhZGRpdGlvbmFsU3RhdGUpIHtcclxuICAgICAgICBpZiAoYWRkaXRpb25hbFN0YXRlID09PSB2b2lkIDApIHsgYWRkaXRpb25hbFN0YXRlID0ge307IH1cclxuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihnZXRJbml0aWFsRW50aXR5U3RhdGUoKSwgYWRkaXRpb25hbFN0YXRlKTtcclxuICAgIH1cclxuICAgIHJldHVybiB7IGdldEluaXRpYWxTdGF0ZTogZ2V0SW5pdGlhbFN0YXRlIH07XHJcbn1cclxuLy8gc3JjL2VudGl0aWVzL3N0YXRlX3NlbGVjdG9ycy50c1xyXG5mdW5jdGlvbiBjcmVhdGVTZWxlY3RvcnNGYWN0b3J5KCkge1xyXG4gICAgZnVuY3Rpb24gZ2V0U2VsZWN0b3JzKHNlbGVjdFN0YXRlKSB7XHJcbiAgICAgICAgdmFyIHNlbGVjdElkcyA9IGZ1bmN0aW9uIChzdGF0ZSkgeyByZXR1cm4gc3RhdGUuaWRzOyB9O1xyXG4gICAgICAgIHZhciBzZWxlY3RFbnRpdGllcyA9IGZ1bmN0aW9uIChzdGF0ZSkgeyByZXR1cm4gc3RhdGUuZW50aXRpZXM7IH07XHJcbiAgICAgICAgdmFyIHNlbGVjdEFsbCA9IGNyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yKHNlbGVjdElkcywgc2VsZWN0RW50aXRpZXMsIGZ1bmN0aW9uIChpZHMsIGVudGl0aWVzKSB7IHJldHVybiBpZHMubWFwKGZ1bmN0aW9uIChpZCkgeyByZXR1cm4gZW50aXRpZXNbaWRdOyB9KTsgfSk7XHJcbiAgICAgICAgdmFyIHNlbGVjdElkID0gZnVuY3Rpb24gKF8sIGlkKSB7IHJldHVybiBpZDsgfTtcclxuICAgICAgICB2YXIgc2VsZWN0QnlJZCA9IGZ1bmN0aW9uIChlbnRpdGllcywgaWQpIHsgcmV0dXJuIGVudGl0aWVzW2lkXTsgfTtcclxuICAgICAgICB2YXIgc2VsZWN0VG90YWwgPSBjcmVhdGVEcmFmdFNhZmVTZWxlY3RvcihzZWxlY3RJZHMsIGZ1bmN0aW9uIChpZHMpIHsgcmV0dXJuIGlkcy5sZW5ndGg7IH0pO1xyXG4gICAgICAgIGlmICghc2VsZWN0U3RhdGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHNlbGVjdElkczogc2VsZWN0SWRzLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0RW50aXRpZXM6IHNlbGVjdEVudGl0aWVzLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0QWxsOiBzZWxlY3RBbGwsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RUb3RhbDogc2VsZWN0VG90YWwsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RCeUlkOiBjcmVhdGVEcmFmdFNhZmVTZWxlY3RvcihzZWxlY3RFbnRpdGllcywgc2VsZWN0SWQsIHNlbGVjdEJ5SWQpXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBzZWxlY3RHbG9iYWxpemVkRW50aXRpZXMgPSBjcmVhdGVEcmFmdFNhZmVTZWxlY3RvcihzZWxlY3RTdGF0ZSwgc2VsZWN0RW50aXRpZXMpO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHNlbGVjdElkczogY3JlYXRlRHJhZnRTYWZlU2VsZWN0b3Ioc2VsZWN0U3RhdGUsIHNlbGVjdElkcyksXHJcbiAgICAgICAgICAgIHNlbGVjdEVudGl0aWVzOiBzZWxlY3RHbG9iYWxpemVkRW50aXRpZXMsXHJcbiAgICAgICAgICAgIHNlbGVjdEFsbDogY3JlYXRlRHJhZnRTYWZlU2VsZWN0b3Ioc2VsZWN0U3RhdGUsIHNlbGVjdEFsbCksXHJcbiAgICAgICAgICAgIHNlbGVjdFRvdGFsOiBjcmVhdGVEcmFmdFNhZmVTZWxlY3RvcihzZWxlY3RTdGF0ZSwgc2VsZWN0VG90YWwpLFxyXG4gICAgICAgICAgICBzZWxlY3RCeUlkOiBjcmVhdGVEcmFmdFNhZmVTZWxlY3RvcihzZWxlY3RHbG9iYWxpemVkRW50aXRpZXMsIHNlbGVjdElkLCBzZWxlY3RCeUlkKVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyBnZXRTZWxlY3RvcnM6IGdldFNlbGVjdG9ycyB9O1xyXG59XHJcbi8vIHNyYy9lbnRpdGllcy9zdGF0ZV9hZGFwdGVyLnRzXHJcbmltcG9ydCBjcmVhdGVOZXh0U3RhdGUzLCB7IGlzRHJhZnQgYXMgaXNEcmFmdDMgfSBmcm9tIFwiaW1tZXJcIjtcclxuZnVuY3Rpb24gY3JlYXRlU2luZ2xlQXJndW1lbnRTdGF0ZU9wZXJhdG9yKG11dGF0b3IpIHtcclxuICAgIHZhciBvcGVyYXRvciA9IGNyZWF0ZVN0YXRlT3BlcmF0b3IoZnVuY3Rpb24gKF8sIHN0YXRlKSB7IHJldHVybiBtdXRhdG9yKHN0YXRlKTsgfSk7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gb3BlcmF0aW9uKHN0YXRlKSB7XHJcbiAgICAgICAgcmV0dXJuIG9wZXJhdG9yKHN0YXRlLCB2b2lkIDApO1xyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiBjcmVhdGVTdGF0ZU9wZXJhdG9yKG11dGF0b3IpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiBvcGVyYXRpb24oc3RhdGUsIGFyZykge1xyXG4gICAgICAgIGZ1bmN0aW9uIGlzUGF5bG9hZEFjdGlvbkFyZ3VtZW50KGFyZzIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGlzRlNBKGFyZzIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcnVuTXV0YXRvciA9IGZ1bmN0aW9uIChkcmFmdCkge1xyXG4gICAgICAgICAgICBpZiAoaXNQYXlsb2FkQWN0aW9uQXJndW1lbnQoYXJnKSkge1xyXG4gICAgICAgICAgICAgICAgbXV0YXRvcihhcmcucGF5bG9hZCwgZHJhZnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbXV0YXRvcihhcmcsIGRyYWZ0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKGlzRHJhZnQzKHN0YXRlKSkge1xyXG4gICAgICAgICAgICBydW5NdXRhdG9yKHN0YXRlKTtcclxuICAgICAgICAgICAgcmV0dXJuIHN0YXRlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZU5leHRTdGF0ZTMoc3RhdGUsIHJ1bk11dGF0b3IpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cclxuLy8gc3JjL2VudGl0aWVzL3V0aWxzLnRzXHJcbmZ1bmN0aW9uIHNlbGVjdElkVmFsdWUoZW50aXR5LCBzZWxlY3RJZCkge1xyXG4gICAgdmFyIGtleSA9IHNlbGVjdElkKGVudGl0eSk7XHJcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmIGtleSA9PT0gdm9pZCAwKSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKFwiVGhlIGVudGl0eSBwYXNzZWQgdG8gdGhlIGBzZWxlY3RJZGAgaW1wbGVtZW50YXRpb24gcmV0dXJuZWQgdW5kZWZpbmVkLlwiLCBcIllvdSBzaG91bGQgcHJvYmFibHkgcHJvdmlkZSB5b3VyIG93biBgc2VsZWN0SWRgIGltcGxlbWVudGF0aW9uLlwiLCBcIlRoZSBlbnRpdHkgdGhhdCB3YXMgcGFzc2VkOlwiLCBlbnRpdHksIFwiVGhlIGBzZWxlY3RJZGAgaW1wbGVtZW50YXRpb246XCIsIHNlbGVjdElkLnRvU3RyaW5nKCkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGtleTtcclxufVxyXG5mdW5jdGlvbiBlbnN1cmVFbnRpdGllc0FycmF5KGVudGl0aWVzKSB7XHJcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZW50aXRpZXMpKSB7XHJcbiAgICAgICAgZW50aXRpZXMgPSBPYmplY3QudmFsdWVzKGVudGl0aWVzKTtcclxuICAgIH1cclxuICAgIHJldHVybiBlbnRpdGllcztcclxufVxyXG5mdW5jdGlvbiBzcGxpdEFkZGVkVXBkYXRlZEVudGl0aWVzKG5ld0VudGl0aWVzLCBzZWxlY3RJZCwgc3RhdGUpIHtcclxuICAgIG5ld0VudGl0aWVzID0gZW5zdXJlRW50aXRpZXNBcnJheShuZXdFbnRpdGllcyk7XHJcbiAgICB2YXIgYWRkZWQgPSBbXTtcclxuICAgIHZhciB1cGRhdGVkID0gW107XHJcbiAgICBmb3IgKHZhciBfaSA9IDAsIG5ld0VudGl0aWVzXzEgPSBuZXdFbnRpdGllczsgX2kgPCBuZXdFbnRpdGllc18xLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgIHZhciBlbnRpdHkgPSBuZXdFbnRpdGllc18xW19pXTtcclxuICAgICAgICB2YXIgaWQgPSBzZWxlY3RJZFZhbHVlKGVudGl0eSwgc2VsZWN0SWQpO1xyXG4gICAgICAgIGlmIChpZCBpbiBzdGF0ZS5lbnRpdGllcykge1xyXG4gICAgICAgICAgICB1cGRhdGVkLnB1c2goeyBpZDogaWQsIGNoYW5nZXM6IGVudGl0eSB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGFkZGVkLnB1c2goZW50aXR5KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gW2FkZGVkLCB1cGRhdGVkXTtcclxufVxyXG4vLyBzcmMvZW50aXRpZXMvdW5zb3J0ZWRfc3RhdGVfYWRhcHRlci50c1xyXG5mdW5jdGlvbiBjcmVhdGVVbnNvcnRlZFN0YXRlQWRhcHRlcihzZWxlY3RJZCkge1xyXG4gICAgZnVuY3Rpb24gYWRkT25lTXV0YWJseShlbnRpdHksIHN0YXRlKSB7XHJcbiAgICAgICAgdmFyIGtleSA9IHNlbGVjdElkVmFsdWUoZW50aXR5LCBzZWxlY3RJZCk7XHJcbiAgICAgICAgaWYgKGtleSBpbiBzdGF0ZS5lbnRpdGllcykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHN0YXRlLmlkcy5wdXNoKGtleSk7XHJcbiAgICAgICAgc3RhdGUuZW50aXRpZXNba2V5XSA9IGVudGl0eTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGFkZE1hbnlNdXRhYmx5KG5ld0VudGl0aWVzLCBzdGF0ZSkge1xyXG4gICAgICAgIG5ld0VudGl0aWVzID0gZW5zdXJlRW50aXRpZXNBcnJheShuZXdFbnRpdGllcyk7XHJcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBuZXdFbnRpdGllc18yID0gbmV3RW50aXRpZXM7IF9pIDwgbmV3RW50aXRpZXNfMi5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgdmFyIGVudGl0eSA9IG5ld0VudGl0aWVzXzJbX2ldO1xyXG4gICAgICAgICAgICBhZGRPbmVNdXRhYmx5KGVudGl0eSwgc3RhdGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHNldE9uZU11dGFibHkoZW50aXR5LCBzdGF0ZSkge1xyXG4gICAgICAgIHZhciBrZXkgPSBzZWxlY3RJZFZhbHVlKGVudGl0eSwgc2VsZWN0SWQpO1xyXG4gICAgICAgIGlmICghKGtleSBpbiBzdGF0ZS5lbnRpdGllcykpIHtcclxuICAgICAgICAgICAgc3RhdGUuaWRzLnB1c2goa2V5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc3RhdGUuZW50aXRpZXNba2V5XSA9IGVudGl0eTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHNldE1hbnlNdXRhYmx5KG5ld0VudGl0aWVzLCBzdGF0ZSkge1xyXG4gICAgICAgIG5ld0VudGl0aWVzID0gZW5zdXJlRW50aXRpZXNBcnJheShuZXdFbnRpdGllcyk7XHJcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBuZXdFbnRpdGllc18zID0gbmV3RW50aXRpZXM7IF9pIDwgbmV3RW50aXRpZXNfMy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgdmFyIGVudGl0eSA9IG5ld0VudGl0aWVzXzNbX2ldO1xyXG4gICAgICAgICAgICBzZXRPbmVNdXRhYmx5KGVudGl0eSwgc3RhdGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHNldEFsbE11dGFibHkobmV3RW50aXRpZXMsIHN0YXRlKSB7XHJcbiAgICAgICAgbmV3RW50aXRpZXMgPSBlbnN1cmVFbnRpdGllc0FycmF5KG5ld0VudGl0aWVzKTtcclxuICAgICAgICBzdGF0ZS5pZHMgPSBbXTtcclxuICAgICAgICBzdGF0ZS5lbnRpdGllcyA9IHt9O1xyXG4gICAgICAgIGFkZE1hbnlNdXRhYmx5KG5ld0VudGl0aWVzLCBzdGF0ZSk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiByZW1vdmVPbmVNdXRhYmx5KGtleSwgc3RhdGUpIHtcclxuICAgICAgICByZXR1cm4gcmVtb3ZlTWFueU11dGFibHkoW2tleV0sIHN0YXRlKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHJlbW92ZU1hbnlNdXRhYmx5KGtleXMsIHN0YXRlKSB7XHJcbiAgICAgICAgdmFyIGRpZE11dGF0ZSA9IGZhbHNlO1xyXG4gICAgICAgIGtleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgICAgIGlmIChrZXkgaW4gc3RhdGUuZW50aXRpZXMpIHtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBzdGF0ZS5lbnRpdGllc1trZXldO1xyXG4gICAgICAgICAgICAgICAgZGlkTXV0YXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChkaWRNdXRhdGUpIHtcclxuICAgICAgICAgICAgc3RhdGUuaWRzID0gc3RhdGUuaWRzLmZpbHRlcihmdW5jdGlvbiAoaWQpIHsgcmV0dXJuIGlkIGluIHN0YXRlLmVudGl0aWVzOyB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiByZW1vdmVBbGxNdXRhYmx5KHN0YXRlKSB7XHJcbiAgICAgICAgT2JqZWN0LmFzc2lnbihzdGF0ZSwge1xyXG4gICAgICAgICAgICBpZHM6IFtdLFxyXG4gICAgICAgICAgICBlbnRpdGllczoge31cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHRha2VOZXdLZXkoa2V5cywgdXBkYXRlLCBzdGF0ZSkge1xyXG4gICAgICAgIHZhciBvcmlnaW5hbDIgPSBzdGF0ZS5lbnRpdGllc1t1cGRhdGUuaWRdO1xyXG4gICAgICAgIHZhciB1cGRhdGVkID0gT2JqZWN0LmFzc2lnbih7fSwgb3JpZ2luYWwyLCB1cGRhdGUuY2hhbmdlcyk7XHJcbiAgICAgICAgdmFyIG5ld0tleSA9IHNlbGVjdElkVmFsdWUodXBkYXRlZCwgc2VsZWN0SWQpO1xyXG4gICAgICAgIHZhciBoYXNOZXdLZXkgPSBuZXdLZXkgIT09IHVwZGF0ZS5pZDtcclxuICAgICAgICBpZiAoaGFzTmV3S2V5KSB7XHJcbiAgICAgICAgICAgIGtleXNbdXBkYXRlLmlkXSA9IG5ld0tleTtcclxuICAgICAgICAgICAgZGVsZXRlIHN0YXRlLmVudGl0aWVzW3VwZGF0ZS5pZF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHN0YXRlLmVudGl0aWVzW25ld0tleV0gPSB1cGRhdGVkO1xyXG4gICAgICAgIHJldHVybiBoYXNOZXdLZXk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiB1cGRhdGVPbmVNdXRhYmx5KHVwZGF0ZSwgc3RhdGUpIHtcclxuICAgICAgICByZXR1cm4gdXBkYXRlTWFueU11dGFibHkoW3VwZGF0ZV0sIHN0YXRlKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHVwZGF0ZU1hbnlNdXRhYmx5KHVwZGF0ZXMsIHN0YXRlKSB7XHJcbiAgICAgICAgdmFyIG5ld0tleXMgPSB7fTtcclxuICAgICAgICB2YXIgdXBkYXRlc1BlckVudGl0eSA9IHt9O1xyXG4gICAgICAgIHVwZGF0ZXMuZm9yRWFjaChmdW5jdGlvbiAodXBkYXRlKSB7XHJcbiAgICAgICAgICAgIGlmICh1cGRhdGUuaWQgaW4gc3RhdGUuZW50aXRpZXMpIHtcclxuICAgICAgICAgICAgICAgIHVwZGF0ZXNQZXJFbnRpdHlbdXBkYXRlLmlkXSA9IHtcclxuICAgICAgICAgICAgICAgICAgICBpZDogdXBkYXRlLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgIGNoYW5nZXM6IF9fc3ByZWFkVmFsdWVzKF9fc3ByZWFkVmFsdWVzKHt9LCB1cGRhdGVzUGVyRW50aXR5W3VwZGF0ZS5pZF0gPyB1cGRhdGVzUGVyRW50aXR5W3VwZGF0ZS5pZF0uY2hhbmdlcyA6IG51bGwpLCB1cGRhdGUuY2hhbmdlcylcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB1cGRhdGVzID0gT2JqZWN0LnZhbHVlcyh1cGRhdGVzUGVyRW50aXR5KTtcclxuICAgICAgICB2YXIgZGlkTXV0YXRlRW50aXRpZXMgPSB1cGRhdGVzLmxlbmd0aCA+IDA7XHJcbiAgICAgICAgaWYgKGRpZE11dGF0ZUVudGl0aWVzKSB7XHJcbiAgICAgICAgICAgIHZhciBkaWRNdXRhdGVJZHMgPSB1cGRhdGVzLmZpbHRlcihmdW5jdGlvbiAodXBkYXRlKSB7IHJldHVybiB0YWtlTmV3S2V5KG5ld0tleXMsIHVwZGF0ZSwgc3RhdGUpOyB9KS5sZW5ndGggPiAwO1xyXG4gICAgICAgICAgICBpZiAoZGlkTXV0YXRlSWRzKSB7XHJcbiAgICAgICAgICAgICAgICBzdGF0ZS5pZHMgPSBPYmplY3Qua2V5cyhzdGF0ZS5lbnRpdGllcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiB1cHNlcnRPbmVNdXRhYmx5KGVudGl0eSwgc3RhdGUpIHtcclxuICAgICAgICByZXR1cm4gdXBzZXJ0TWFueU11dGFibHkoW2VudGl0eV0sIHN0YXRlKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHVwc2VydE1hbnlNdXRhYmx5KG5ld0VudGl0aWVzLCBzdGF0ZSkge1xyXG4gICAgICAgIHZhciBfYyA9IHNwbGl0QWRkZWRVcGRhdGVkRW50aXRpZXMobmV3RW50aXRpZXMsIHNlbGVjdElkLCBzdGF0ZSksIGFkZGVkID0gX2NbMF0sIHVwZGF0ZWQgPSBfY1sxXTtcclxuICAgICAgICB1cGRhdGVNYW55TXV0YWJseSh1cGRhdGVkLCBzdGF0ZSk7XHJcbiAgICAgICAgYWRkTWFueU11dGFibHkoYWRkZWQsIHN0YXRlKTtcclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgcmVtb3ZlQWxsOiBjcmVhdGVTaW5nbGVBcmd1bWVudFN0YXRlT3BlcmF0b3IocmVtb3ZlQWxsTXV0YWJseSksXHJcbiAgICAgICAgYWRkT25lOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKGFkZE9uZU11dGFibHkpLFxyXG4gICAgICAgIGFkZE1hbnk6IGNyZWF0ZVN0YXRlT3BlcmF0b3IoYWRkTWFueU11dGFibHkpLFxyXG4gICAgICAgIHNldE9uZTogY3JlYXRlU3RhdGVPcGVyYXRvcihzZXRPbmVNdXRhYmx5KSxcclxuICAgICAgICBzZXRNYW55OiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHNldE1hbnlNdXRhYmx5KSxcclxuICAgICAgICBzZXRBbGw6IGNyZWF0ZVN0YXRlT3BlcmF0b3Ioc2V0QWxsTXV0YWJseSksXHJcbiAgICAgICAgdXBkYXRlT25lOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHVwZGF0ZU9uZU11dGFibHkpLFxyXG4gICAgICAgIHVwZGF0ZU1hbnk6IGNyZWF0ZVN0YXRlT3BlcmF0b3IodXBkYXRlTWFueU11dGFibHkpLFxyXG4gICAgICAgIHVwc2VydE9uZTogY3JlYXRlU3RhdGVPcGVyYXRvcih1cHNlcnRPbmVNdXRhYmx5KSxcclxuICAgICAgICB1cHNlcnRNYW55OiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHVwc2VydE1hbnlNdXRhYmx5KSxcclxuICAgICAgICByZW1vdmVPbmU6IGNyZWF0ZVN0YXRlT3BlcmF0b3IocmVtb3ZlT25lTXV0YWJseSksXHJcbiAgICAgICAgcmVtb3ZlTWFueTogY3JlYXRlU3RhdGVPcGVyYXRvcihyZW1vdmVNYW55TXV0YWJseSlcclxuICAgIH07XHJcbn1cclxuLy8gc3JjL2VudGl0aWVzL3NvcnRlZF9zdGF0ZV9hZGFwdGVyLnRzXHJcbmZ1bmN0aW9uIGNyZWF0ZVNvcnRlZFN0YXRlQWRhcHRlcihzZWxlY3RJZCwgc29ydCkge1xyXG4gICAgdmFyIF9jID0gY3JlYXRlVW5zb3J0ZWRTdGF0ZUFkYXB0ZXIoc2VsZWN0SWQpLCByZW1vdmVPbmUgPSBfYy5yZW1vdmVPbmUsIHJlbW92ZU1hbnkgPSBfYy5yZW1vdmVNYW55LCByZW1vdmVBbGwgPSBfYy5yZW1vdmVBbGw7XHJcbiAgICBmdW5jdGlvbiBhZGRPbmVNdXRhYmx5KGVudGl0eSwgc3RhdGUpIHtcclxuICAgICAgICByZXR1cm4gYWRkTWFueU11dGFibHkoW2VudGl0eV0sIHN0YXRlKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGFkZE1hbnlNdXRhYmx5KG5ld0VudGl0aWVzLCBzdGF0ZSkge1xyXG4gICAgICAgIG5ld0VudGl0aWVzID0gZW5zdXJlRW50aXRpZXNBcnJheShuZXdFbnRpdGllcyk7XHJcbiAgICAgICAgdmFyIG1vZGVscyA9IG5ld0VudGl0aWVzLmZpbHRlcihmdW5jdGlvbiAobW9kZWwpIHsgcmV0dXJuICEoc2VsZWN0SWRWYWx1ZShtb2RlbCwgc2VsZWN0SWQpIGluIHN0YXRlLmVudGl0aWVzKTsgfSk7XHJcbiAgICAgICAgaWYgKG1vZGVscy5sZW5ndGggIT09IDApIHtcclxuICAgICAgICAgICAgbWVyZ2UobW9kZWxzLCBzdGF0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gc2V0T25lTXV0YWJseShlbnRpdHksIHN0YXRlKSB7XHJcbiAgICAgICAgcmV0dXJuIHNldE1hbnlNdXRhYmx5KFtlbnRpdHldLCBzdGF0ZSk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBzZXRNYW55TXV0YWJseShuZXdFbnRpdGllcywgc3RhdGUpIHtcclxuICAgICAgICBuZXdFbnRpdGllcyA9IGVuc3VyZUVudGl0aWVzQXJyYXkobmV3RW50aXRpZXMpO1xyXG4gICAgICAgIGlmIChuZXdFbnRpdGllcy5sZW5ndGggIT09IDApIHtcclxuICAgICAgICAgICAgbWVyZ2UobmV3RW50aXRpZXMsIHN0YXRlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBzZXRBbGxNdXRhYmx5KG5ld0VudGl0aWVzLCBzdGF0ZSkge1xyXG4gICAgICAgIG5ld0VudGl0aWVzID0gZW5zdXJlRW50aXRpZXNBcnJheShuZXdFbnRpdGllcyk7XHJcbiAgICAgICAgc3RhdGUuZW50aXRpZXMgPSB7fTtcclxuICAgICAgICBzdGF0ZS5pZHMgPSBbXTtcclxuICAgICAgICBhZGRNYW55TXV0YWJseShuZXdFbnRpdGllcywgc3RhdGUpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gdXBkYXRlT25lTXV0YWJseSh1cGRhdGUsIHN0YXRlKSB7XHJcbiAgICAgICAgcmV0dXJuIHVwZGF0ZU1hbnlNdXRhYmx5KFt1cGRhdGVdLCBzdGF0ZSk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiB1cGRhdGVNYW55TXV0YWJseSh1cGRhdGVzLCBzdGF0ZSkge1xyXG4gICAgICAgIHZhciBhcHBsaWVkVXBkYXRlcyA9IGZhbHNlO1xyXG4gICAgICAgIGZvciAodmFyIF9pID0gMCwgdXBkYXRlc18xID0gdXBkYXRlczsgX2kgPCB1cGRhdGVzXzEubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciB1cGRhdGUgPSB1cGRhdGVzXzFbX2ldO1xyXG4gICAgICAgICAgICB2YXIgZW50aXR5ID0gc3RhdGUuZW50aXRpZXNbdXBkYXRlLmlkXTtcclxuICAgICAgICAgICAgaWYgKCFlbnRpdHkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGFwcGxpZWRVcGRhdGVzID0gdHJ1ZTtcclxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihlbnRpdHksIHVwZGF0ZS5jaGFuZ2VzKTtcclxuICAgICAgICAgICAgdmFyIG5ld0lkID0gc2VsZWN0SWQoZW50aXR5KTtcclxuICAgICAgICAgICAgaWYgKHVwZGF0ZS5pZCAhPT0gbmV3SWQpIHtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBzdGF0ZS5lbnRpdGllc1t1cGRhdGUuaWRdO1xyXG4gICAgICAgICAgICAgICAgc3RhdGUuZW50aXRpZXNbbmV3SWRdID0gZW50aXR5O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChhcHBsaWVkVXBkYXRlcykge1xyXG4gICAgICAgICAgICByZXNvcnRFbnRpdGllcyhzdGF0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gdXBzZXJ0T25lTXV0YWJseShlbnRpdHksIHN0YXRlKSB7XHJcbiAgICAgICAgcmV0dXJuIHVwc2VydE1hbnlNdXRhYmx5KFtlbnRpdHldLCBzdGF0ZSk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiB1cHNlcnRNYW55TXV0YWJseShuZXdFbnRpdGllcywgc3RhdGUpIHtcclxuICAgICAgICB2YXIgX2MgPSBzcGxpdEFkZGVkVXBkYXRlZEVudGl0aWVzKG5ld0VudGl0aWVzLCBzZWxlY3RJZCwgc3RhdGUpLCBhZGRlZCA9IF9jWzBdLCB1cGRhdGVkID0gX2NbMV07XHJcbiAgICAgICAgdXBkYXRlTWFueU11dGFibHkodXBkYXRlZCwgc3RhdGUpO1xyXG4gICAgICAgIGFkZE1hbnlNdXRhYmx5KGFkZGVkLCBzdGF0ZSk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBhcmVBcnJheXNFcXVhbChhLCBiKSB7XHJcbiAgICAgICAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYS5sZW5ndGggJiYgaSA8IGIubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGFbaV0gPT09IGJbaV0pIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBtZXJnZShtb2RlbHMsIHN0YXRlKSB7XHJcbiAgICAgICAgbW9kZWxzLmZvckVhY2goZnVuY3Rpb24gKG1vZGVsKSB7XHJcbiAgICAgICAgICAgIHN0YXRlLmVudGl0aWVzW3NlbGVjdElkKG1vZGVsKV0gPSBtb2RlbDtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXNvcnRFbnRpdGllcyhzdGF0ZSk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiByZXNvcnRFbnRpdGllcyhzdGF0ZSkge1xyXG4gICAgICAgIHZhciBhbGxFbnRpdGllcyA9IE9iamVjdC52YWx1ZXMoc3RhdGUuZW50aXRpZXMpO1xyXG4gICAgICAgIGFsbEVudGl0aWVzLnNvcnQoc29ydCk7XHJcbiAgICAgICAgdmFyIG5ld1NvcnRlZElkcyA9IGFsbEVudGl0aWVzLm1hcChzZWxlY3RJZCk7XHJcbiAgICAgICAgdmFyIGlkcyA9IHN0YXRlLmlkcztcclxuICAgICAgICBpZiAoIWFyZUFycmF5c0VxdWFsKGlkcywgbmV3U29ydGVkSWRzKSkge1xyXG4gICAgICAgICAgICBzdGF0ZS5pZHMgPSBuZXdTb3J0ZWRJZHM7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICByZW1vdmVPbmU6IHJlbW92ZU9uZSxcclxuICAgICAgICByZW1vdmVNYW55OiByZW1vdmVNYW55LFxyXG4gICAgICAgIHJlbW92ZUFsbDogcmVtb3ZlQWxsLFxyXG4gICAgICAgIGFkZE9uZTogY3JlYXRlU3RhdGVPcGVyYXRvcihhZGRPbmVNdXRhYmx5KSxcclxuICAgICAgICB1cGRhdGVPbmU6IGNyZWF0ZVN0YXRlT3BlcmF0b3IodXBkYXRlT25lTXV0YWJseSksXHJcbiAgICAgICAgdXBzZXJ0T25lOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHVwc2VydE9uZU11dGFibHkpLFxyXG4gICAgICAgIHNldE9uZTogY3JlYXRlU3RhdGVPcGVyYXRvcihzZXRPbmVNdXRhYmx5KSxcclxuICAgICAgICBzZXRNYW55OiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHNldE1hbnlNdXRhYmx5KSxcclxuICAgICAgICBzZXRBbGw6IGNyZWF0ZVN0YXRlT3BlcmF0b3Ioc2V0QWxsTXV0YWJseSksXHJcbiAgICAgICAgYWRkTWFueTogY3JlYXRlU3RhdGVPcGVyYXRvcihhZGRNYW55TXV0YWJseSksXHJcbiAgICAgICAgdXBkYXRlTWFueTogY3JlYXRlU3RhdGVPcGVyYXRvcih1cGRhdGVNYW55TXV0YWJseSksXHJcbiAgICAgICAgdXBzZXJ0TWFueTogY3JlYXRlU3RhdGVPcGVyYXRvcih1cHNlcnRNYW55TXV0YWJseSlcclxuICAgIH07XHJcbn1cclxuLy8gc3JjL2VudGl0aWVzL2NyZWF0ZV9hZGFwdGVyLnRzXHJcbmZ1bmN0aW9uIGNyZWF0ZUVudGl0eUFkYXB0ZXIob3B0aW9ucykge1xyXG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cclxuICAgIHZhciBfYyA9IF9fc3ByZWFkVmFsdWVzKHtcclxuICAgICAgICBzb3J0Q29tcGFyZXI6IGZhbHNlLFxyXG4gICAgICAgIHNlbGVjdElkOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHsgcmV0dXJuIGluc3RhbmNlLmlkOyB9XHJcbiAgICB9LCBvcHRpb25zKSwgc2VsZWN0SWQgPSBfYy5zZWxlY3RJZCwgc29ydENvbXBhcmVyID0gX2Muc29ydENvbXBhcmVyO1xyXG4gICAgdmFyIHN0YXRlRmFjdG9yeSA9IGNyZWF0ZUluaXRpYWxTdGF0ZUZhY3RvcnkoKTtcclxuICAgIHZhciBzZWxlY3RvcnNGYWN0b3J5ID0gY3JlYXRlU2VsZWN0b3JzRmFjdG9yeSgpO1xyXG4gICAgdmFyIHN0YXRlQWRhcHRlciA9IHNvcnRDb21wYXJlciA/IGNyZWF0ZVNvcnRlZFN0YXRlQWRhcHRlcihzZWxlY3RJZCwgc29ydENvbXBhcmVyKSA6IGNyZWF0ZVVuc29ydGVkU3RhdGVBZGFwdGVyKHNlbGVjdElkKTtcclxuICAgIHJldHVybiBfX3NwcmVhZFZhbHVlcyhfX3NwcmVhZFZhbHVlcyhfX3NwcmVhZFZhbHVlcyh7XHJcbiAgICAgICAgc2VsZWN0SWQ6IHNlbGVjdElkLFxyXG4gICAgICAgIHNvcnRDb21wYXJlcjogc29ydENvbXBhcmVyXHJcbiAgICB9LCBzdGF0ZUZhY3RvcnkpLCBzZWxlY3RvcnNGYWN0b3J5KSwgc3RhdGVBZGFwdGVyKTtcclxufVxyXG4vLyBzcmMvbmFub2lkLnRzXHJcbnZhciB1cmxBbHBoYWJldCA9IFwiTW9kdWxlU3ltYmhhc093blByLTAxMjM0NTY3ODlBQkNERUZHSE5SVmZnY3RpVXZ6X0txWVRKa0x4cFpYSWpRV1wiO1xyXG52YXIgbmFub2lkID0gZnVuY3Rpb24gKHNpemUpIHtcclxuICAgIGlmIChzaXplID09PSB2b2lkIDApIHsgc2l6ZSA9IDIxOyB9XHJcbiAgICB2YXIgaWQgPSBcIlwiO1xyXG4gICAgdmFyIGkgPSBzaXplO1xyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICAgIGlkICs9IHVybEFscGhhYmV0W01hdGgucmFuZG9tKCkgKiA2NCB8IDBdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGlkO1xyXG59O1xyXG4vLyBzcmMvY3JlYXRlQXN5bmNUaHVuay50c1xyXG52YXIgY29tbW9uUHJvcGVydGllcyA9IFtcclxuICAgIFwibmFtZVwiLFxyXG4gICAgXCJtZXNzYWdlXCIsXHJcbiAgICBcInN0YWNrXCIsXHJcbiAgICBcImNvZGVcIlxyXG5dO1xyXG52YXIgUmVqZWN0V2l0aFZhbHVlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gUmVqZWN0V2l0aFZhbHVlKHBheWxvYWQsIG1ldGEpIHtcclxuICAgICAgICB0aGlzLnBheWxvYWQgPSBwYXlsb2FkO1xyXG4gICAgICAgIHRoaXMubWV0YSA9IG1ldGE7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gUmVqZWN0V2l0aFZhbHVlO1xyXG59KCkpO1xyXG52YXIgRnVsZmlsbFdpdGhNZXRhID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gRnVsZmlsbFdpdGhNZXRhKHBheWxvYWQsIG1ldGEpIHtcclxuICAgICAgICB0aGlzLnBheWxvYWQgPSBwYXlsb2FkO1xyXG4gICAgICAgIHRoaXMubWV0YSA9IG1ldGE7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gRnVsZmlsbFdpdGhNZXRhO1xyXG59KCkpO1xyXG52YXIgbWluaVNlcmlhbGl6ZUVycm9yID0gZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHZhbHVlICE9PSBudWxsKSB7XHJcbiAgICAgICAgdmFyIHNpbXBsZUVycm9yID0ge307XHJcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBjb21tb25Qcm9wZXJ0aWVzXzEgPSBjb21tb25Qcm9wZXJ0aWVzOyBfaSA8IGNvbW1vblByb3BlcnRpZXNfMS5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgdmFyIHByb3BlcnR5ID0gY29tbW9uUHJvcGVydGllc18xW19pXTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZVtwcm9wZXJ0eV0gPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgICAgIHNpbXBsZUVycm9yW3Byb3BlcnR5XSA9IHZhbHVlW3Byb3BlcnR5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc2ltcGxlRXJyb3I7XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyBtZXNzYWdlOiBTdHJpbmcodmFsdWUpIH07XHJcbn07XHJcbnZhciBjcmVhdGVBc3luY1RodW5rID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIGNyZWF0ZUFzeW5jVGh1bmsyKHR5cGVQcmVmaXgsIHBheWxvYWRDcmVhdG9yLCBvcHRpb25zKSB7XHJcbiAgICAgICAgdmFyIGZ1bGZpbGxlZCA9IGNyZWF0ZUFjdGlvbih0eXBlUHJlZml4ICsgXCIvZnVsZmlsbGVkXCIsIGZ1bmN0aW9uIChwYXlsb2FkLCByZXF1ZXN0SWQsIGFyZywgbWV0YSkgeyByZXR1cm4gKHtcclxuICAgICAgICAgICAgcGF5bG9hZDogcGF5bG9hZCxcclxuICAgICAgICAgICAgbWV0YTogX19zcHJlYWRQcm9wcyhfX3NwcmVhZFZhbHVlcyh7fSwgbWV0YSB8fCB7fSksIHtcclxuICAgICAgICAgICAgICAgIGFyZzogYXJnLFxyXG4gICAgICAgICAgICAgICAgcmVxdWVzdElkOiByZXF1ZXN0SWQsXHJcbiAgICAgICAgICAgICAgICByZXF1ZXN0U3RhdHVzOiBcImZ1bGZpbGxlZFwiXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSk7IH0pO1xyXG4gICAgICAgIHZhciBwZW5kaW5nID0gY3JlYXRlQWN0aW9uKHR5cGVQcmVmaXggKyBcIi9wZW5kaW5nXCIsIGZ1bmN0aW9uIChyZXF1ZXN0SWQsIGFyZywgbWV0YSkgeyByZXR1cm4gKHtcclxuICAgICAgICAgICAgcGF5bG9hZDogdm9pZCAwLFxyXG4gICAgICAgICAgICBtZXRhOiBfX3NwcmVhZFByb3BzKF9fc3ByZWFkVmFsdWVzKHt9LCBtZXRhIHx8IHt9KSwge1xyXG4gICAgICAgICAgICAgICAgYXJnOiBhcmcsXHJcbiAgICAgICAgICAgICAgICByZXF1ZXN0SWQ6IHJlcXVlc3RJZCxcclxuICAgICAgICAgICAgICAgIHJlcXVlc3RTdGF0dXM6IFwicGVuZGluZ1wiXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSk7IH0pO1xyXG4gICAgICAgIHZhciByZWplY3RlZCA9IGNyZWF0ZUFjdGlvbih0eXBlUHJlZml4ICsgXCIvcmVqZWN0ZWRcIiwgZnVuY3Rpb24gKGVycm9yLCByZXF1ZXN0SWQsIGFyZywgcGF5bG9hZCwgbWV0YSkgeyByZXR1cm4gKHtcclxuICAgICAgICAgICAgcGF5bG9hZDogcGF5bG9hZCxcclxuICAgICAgICAgICAgZXJyb3I6IChvcHRpb25zICYmIG9wdGlvbnMuc2VyaWFsaXplRXJyb3IgfHwgbWluaVNlcmlhbGl6ZUVycm9yKShlcnJvciB8fCBcIlJlamVjdGVkXCIpLFxyXG4gICAgICAgICAgICBtZXRhOiBfX3NwcmVhZFByb3BzKF9fc3ByZWFkVmFsdWVzKHt9LCBtZXRhIHx8IHt9KSwge1xyXG4gICAgICAgICAgICAgICAgYXJnOiBhcmcsXHJcbiAgICAgICAgICAgICAgICByZXF1ZXN0SWQ6IHJlcXVlc3RJZCxcclxuICAgICAgICAgICAgICAgIHJlamVjdGVkV2l0aFZhbHVlOiAhIXBheWxvYWQsXHJcbiAgICAgICAgICAgICAgICByZXF1ZXN0U3RhdHVzOiBcInJlamVjdGVkXCIsXHJcbiAgICAgICAgICAgICAgICBhYm9ydGVkOiAoZXJyb3IgPT0gbnVsbCA/IHZvaWQgMCA6IGVycm9yLm5hbWUpID09PSBcIkFib3J0RXJyb3JcIixcclxuICAgICAgICAgICAgICAgIGNvbmRpdGlvbjogKGVycm9yID09IG51bGwgPyB2b2lkIDAgOiBlcnJvci5uYW1lKSA9PT0gXCJDb25kaXRpb25FcnJvclwiXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSk7IH0pO1xyXG4gICAgICAgIHZhciBkaXNwbGF5ZWRXYXJuaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIEFDID0gdHlwZW9mIEFib3J0Q29udHJvbGxlciAhPT0gXCJ1bmRlZmluZWRcIiA/IEFib3J0Q29udHJvbGxlciA6IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgZnVuY3Rpb24gY2xhc3NfMSgpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2lnbmFsID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGFib3J0ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIGFkZEV2ZW50TGlzdGVuZXI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoRXZlbnQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgb25hYm9ydDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlRXZlbnRMaXN0ZW5lcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgcmVhc29uOiB2b2lkIDAsXHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3dJZkFib3J0ZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNsYXNzXzEucHJvdG90eXBlLmFib3J0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghZGlzcGxheWVkV2FybmluZykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5ZWRXYXJuaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5pbmZvKFwiVGhpcyBwbGF0Zm9ybSBkb2VzIG5vdCBpbXBsZW1lbnQgQWJvcnRDb250cm9sbGVyLiBcXG5JZiB5b3Ugd2FudCB0byB1c2UgdGhlIEFib3J0Q29udHJvbGxlciB0byByZWFjdCB0byBgYWJvcnRgIGV2ZW50cywgcGxlYXNlIGNvbnNpZGVyIGltcG9ydGluZyBhIHBvbHlmaWxsIGxpa2UgJ2Fib3J0Y29udHJvbGxlci1wb2x5ZmlsbC9kaXN0L2Fib3J0Y29udHJvbGxlci1wb2x5ZmlsbC1vbmx5Jy5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICByZXR1cm4gY2xhc3NfMTtcclxuICAgICAgICB9KCkpO1xyXG4gICAgICAgIGZ1bmN0aW9uIGFjdGlvbkNyZWF0b3IoYXJnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoZGlzcGF0Y2gsIGdldFN0YXRlLCBleHRyYSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHJlcXVlc3RJZCA9IChvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLmlkR2VuZXJhdG9yKSA/IG9wdGlvbnMuaWRHZW5lcmF0b3IoYXJnKSA6IG5hbm9pZCgpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGFib3J0Q29udHJvbGxlciA9IG5ldyBBQygpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGFib3J0UmVhc29uO1xyXG4gICAgICAgICAgICAgICAgdmFyIHN0YXJ0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGFib3J0KHJlYXNvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIGFib3J0UmVhc29uID0gcmVhc29uO1xyXG4gICAgICAgICAgICAgICAgICAgIGFib3J0Q29udHJvbGxlci5hYm9ydCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmFyIHByb21pc2UyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfX2FzeW5jKHRoaXMsIG51bGwsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9hLCBfYiwgZmluYWxBY3Rpb24sIGNvbmRpdGlvblJlc3VsdCwgYWJvcnRlZFByb21pc2UsIGVycl8xLCBza2lwRGlzcGF0Y2g7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoX2MubGFiZWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jLnRyeXMucHVzaChbMCwgNCwgLCA1XSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblJlc3VsdCA9IChfYSA9IG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMuY29uZGl0aW9uKSA9PSBudWxsID8gdm9pZCAwIDogX2EuY2FsbChvcHRpb25zLCBhcmcsIHsgZ2V0U3RhdGU6IGdldFN0YXRlLCBleHRyYTogZXh0cmEgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNUaGVuYWJsZShjb25kaXRpb25SZXN1bHQpKSByZXR1cm4gWzMgLypicmVhayovLCAyXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgY29uZGl0aW9uUmVzdWx0XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblJlc3VsdCA9IF9jLnNlbnQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MubGFiZWwgPSAyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmRpdGlvblJlc3VsdCA9PT0gZmFsc2UgfHwgYWJvcnRDb250cm9sbGVyLnNpZ25hbC5hYm9ydGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb25kaXRpb25FcnJvclwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IFwiQWJvcnRlZCBkdWUgdG8gY29uZGl0aW9uIGNhbGxiYWNrIHJldHVybmluZyBmYWxzZS5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJvcnRlZFByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAoXywgcmVqZWN0KSB7IHJldHVybiBhYm9ydENvbnRyb2xsZXIuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBmdW5jdGlvbiAoKSB7IHJldHVybiByZWplY3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJBYm9ydEVycm9yXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBhYm9ydFJlYXNvbiB8fCBcIkFib3J0ZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsgfSk7IH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaChwZW5kaW5nKHJlcXVlc3RJZCwgYXJnLCAoX2IgPSBvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLmdldFBlbmRpbmdNZXRhKSA9PSBudWxsID8gdm9pZCAwIDogX2IuY2FsbChvcHRpb25zLCB7IHJlcXVlc3RJZDogcmVxdWVzdElkLCBhcmc6IGFyZyB9LCB7IGdldFN0YXRlOiBnZXRTdGF0ZSwgZXh0cmE6IGV4dHJhIH0pKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIFByb21pc2UucmFjZShbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJvcnRlZFByb21pc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKHBheWxvYWRDcmVhdG9yKGFyZywge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaDogZGlzcGF0Y2gsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldFN0YXRlOiBnZXRTdGF0ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IGV4dHJhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SWQ6IHJlcXVlc3RJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmFsOiBhYm9ydENvbnRyb2xsZXIuc2lnbmFsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYm9ydDogYWJvcnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdFdpdGhWYWx1ZTogZnVuY3Rpb24gKHZhbHVlLCBtZXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFJlamVjdFdpdGhWYWx1ZSh2YWx1ZSwgbWV0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGZpbGxXaXRoVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgbWV0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBGdWxmaWxsV2l0aE1ldGEodmFsdWUsIG1ldGEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUmVqZWN0V2l0aFZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIEZ1bGZpbGxXaXRoTWV0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bGZpbGxlZChyZXN1bHQucGF5bG9hZCwgcmVxdWVzdElkLCBhcmcsIHJlc3VsdC5tZXRhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVsZmlsbGVkKHJlc3VsdCwgcmVxdWVzdElkLCBhcmcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbEFjdGlvbiA9IF9jLnNlbnQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszIC8qYnJlYWsqLywgNV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJfMSA9IF9jLnNlbnQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxBY3Rpb24gPSBlcnJfMSBpbnN0YW5jZW9mIFJlamVjdFdpdGhWYWx1ZSA/IHJlamVjdGVkKG51bGwsIHJlcXVlc3RJZCwgYXJnLCBlcnJfMS5wYXlsb2FkLCBlcnJfMS5tZXRhKSA6IHJlamVjdGVkKGVycl8xLCByZXF1ZXN0SWQsIGFyZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDVdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tpcERpc3BhdGNoID0gb3B0aW9ucyAmJiAhb3B0aW9ucy5kaXNwYXRjaENvbmRpdGlvblJlamVjdGlvbiAmJiByZWplY3RlZC5tYXRjaChmaW5hbEFjdGlvbikgJiYgZmluYWxBY3Rpb24ubWV0YS5jb25kaXRpb247XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2tpcERpc3BhdGNoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaChmaW5hbEFjdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIGZpbmFsQWN0aW9uXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihwcm9taXNlMiwge1xyXG4gICAgICAgICAgICAgICAgICAgIGFib3J0OiBhYm9ydCxcclxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SWQ6IHJlcXVlc3RJZCxcclxuICAgICAgICAgICAgICAgICAgICBhcmc6IGFyZyxcclxuICAgICAgICAgICAgICAgICAgICB1bndyYXA6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb21pc2UyLnRoZW4odW53cmFwUmVzdWx0KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oYWN0aW9uQ3JlYXRvciwge1xyXG4gICAgICAgICAgICBwZW5kaW5nOiBwZW5kaW5nLFxyXG4gICAgICAgICAgICByZWplY3RlZDogcmVqZWN0ZWQsXHJcbiAgICAgICAgICAgIGZ1bGZpbGxlZDogZnVsZmlsbGVkLFxyXG4gICAgICAgICAgICB0eXBlUHJlZml4OiB0eXBlUHJlZml4XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBjcmVhdGVBc3luY1RodW5rMi53aXRoVHlwZXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBjcmVhdGVBc3luY1RodW5rMjsgfTtcclxuICAgIHJldHVybiBjcmVhdGVBc3luY1RodW5rMjtcclxufSkoKTtcclxuZnVuY3Rpb24gdW53cmFwUmVzdWx0KGFjdGlvbikge1xyXG4gICAgaWYgKGFjdGlvbi5tZXRhICYmIGFjdGlvbi5tZXRhLnJlamVjdGVkV2l0aFZhbHVlKSB7XHJcbiAgICAgICAgdGhyb3cgYWN0aW9uLnBheWxvYWQ7XHJcbiAgICB9XHJcbiAgICBpZiAoYWN0aW9uLmVycm9yKSB7XHJcbiAgICAgICAgdGhyb3cgYWN0aW9uLmVycm9yO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFjdGlvbi5wYXlsb2FkO1xyXG59XHJcbmZ1bmN0aW9uIGlzVGhlbmFibGUodmFsdWUpIHtcclxuICAgIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHZhbHVlLnRoZW4gPT09IFwiZnVuY3Rpb25cIjtcclxufVxyXG4vLyBzcmMvbWF0Y2hlcnMudHNcclxudmFyIG1hdGNoZXMgPSBmdW5jdGlvbiAobWF0Y2hlciwgYWN0aW9uKSB7XHJcbiAgICBpZiAoaGFzTWF0Y2hGdW5jdGlvbihtYXRjaGVyKSkge1xyXG4gICAgICAgIHJldHVybiBtYXRjaGVyLm1hdGNoKGFjdGlvbik7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4gbWF0Y2hlcihhY3Rpb24pO1xyXG4gICAgfVxyXG59O1xyXG5mdW5jdGlvbiBpc0FueU9mKCkge1xyXG4gICAgdmFyIG1hdGNoZXJzID0gW107XHJcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgIG1hdGNoZXJzW19pXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKGFjdGlvbikge1xyXG4gICAgICAgIHJldHVybiBtYXRjaGVycy5zb21lKGZ1bmN0aW9uIChtYXRjaGVyKSB7IHJldHVybiBtYXRjaGVzKG1hdGNoZXIsIGFjdGlvbik7IH0pO1xyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiBpc0FsbE9mKCkge1xyXG4gICAgdmFyIG1hdGNoZXJzID0gW107XHJcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgIG1hdGNoZXJzW19pXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKGFjdGlvbikge1xyXG4gICAgICAgIHJldHVybiBtYXRjaGVycy5ldmVyeShmdW5jdGlvbiAobWF0Y2hlcikgeyByZXR1cm4gbWF0Y2hlcyhtYXRjaGVyLCBhY3Rpb24pOyB9KTtcclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gaGFzRXhwZWN0ZWRSZXF1ZXN0TWV0YWRhdGEoYWN0aW9uLCB2YWxpZFN0YXR1cykge1xyXG4gICAgaWYgKCFhY3Rpb24gfHwgIWFjdGlvbi5tZXRhKVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIHZhciBoYXNWYWxpZFJlcXVlc3RJZCA9IHR5cGVvZiBhY3Rpb24ubWV0YS5yZXF1ZXN0SWQgPT09IFwic3RyaW5nXCI7XHJcbiAgICB2YXIgaGFzVmFsaWRSZXF1ZXN0U3RhdHVzID0gdmFsaWRTdGF0dXMuaW5kZXhPZihhY3Rpb24ubWV0YS5yZXF1ZXN0U3RhdHVzKSA+IC0xO1xyXG4gICAgcmV0dXJuIGhhc1ZhbGlkUmVxdWVzdElkICYmIGhhc1ZhbGlkUmVxdWVzdFN0YXR1cztcclxufVxyXG5mdW5jdGlvbiBpc0FzeW5jVGh1bmtBcnJheShhKSB7XHJcbiAgICByZXR1cm4gdHlwZW9mIGFbMF0gPT09IFwiZnVuY3Rpb25cIiAmJiBcInBlbmRpbmdcIiBpbiBhWzBdICYmIFwiZnVsZmlsbGVkXCIgaW4gYVswXSAmJiBcInJlamVjdGVkXCIgaW4gYVswXTtcclxufVxyXG5mdW5jdGlvbiBpc1BlbmRpbmcoKSB7XHJcbiAgICB2YXIgYXN5bmNUaHVua3MgPSBbXTtcclxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgYXN5bmNUaHVua3NbX2ldID0gYXJndW1lbnRzW19pXTtcclxuICAgIH1cclxuICAgIGlmIChhc3luY1RodW5rcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGFjdGlvbikgeyByZXR1cm4gaGFzRXhwZWN0ZWRSZXF1ZXN0TWV0YWRhdGEoYWN0aW9uLCBbXCJwZW5kaW5nXCJdKTsgfTtcclxuICAgIH1cclxuICAgIGlmICghaXNBc3luY1RodW5rQXJyYXkoYXN5bmNUaHVua3MpKSB7XHJcbiAgICAgICAgcmV0dXJuIGlzUGVuZGluZygpKGFzeW5jVGh1bmtzWzBdKTtcclxuICAgIH1cclxuICAgIHJldHVybiBmdW5jdGlvbiAoYWN0aW9uKSB7XHJcbiAgICAgICAgdmFyIG1hdGNoZXJzID0gYXN5bmNUaHVua3MubWFwKGZ1bmN0aW9uIChhc3luY1RodW5rKSB7IHJldHVybiBhc3luY1RodW5rLnBlbmRpbmc7IH0pO1xyXG4gICAgICAgIHZhciBjb21iaW5lZE1hdGNoZXIgPSBpc0FueU9mLmFwcGx5KHZvaWQgMCwgbWF0Y2hlcnMpO1xyXG4gICAgICAgIHJldHVybiBjb21iaW5lZE1hdGNoZXIoYWN0aW9uKTtcclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gaXNSZWplY3RlZCgpIHtcclxuICAgIHZhciBhc3luY1RodW5rcyA9IFtdO1xyXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICBhc3luY1RodW5rc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgfVxyXG4gICAgaWYgKGFzeW5jVGh1bmtzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoYWN0aW9uKSB7IHJldHVybiBoYXNFeHBlY3RlZFJlcXVlc3RNZXRhZGF0YShhY3Rpb24sIFtcInJlamVjdGVkXCJdKTsgfTtcclxuICAgIH1cclxuICAgIGlmICghaXNBc3luY1RodW5rQXJyYXkoYXN5bmNUaHVua3MpKSB7XHJcbiAgICAgICAgcmV0dXJuIGlzUmVqZWN0ZWQoKShhc3luY1RodW5rc1swXSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKGFjdGlvbikge1xyXG4gICAgICAgIHZhciBtYXRjaGVycyA9IGFzeW5jVGh1bmtzLm1hcChmdW5jdGlvbiAoYXN5bmNUaHVuaykgeyByZXR1cm4gYXN5bmNUaHVuay5yZWplY3RlZDsgfSk7XHJcbiAgICAgICAgdmFyIGNvbWJpbmVkTWF0Y2hlciA9IGlzQW55T2YuYXBwbHkodm9pZCAwLCBtYXRjaGVycyk7XHJcbiAgICAgICAgcmV0dXJuIGNvbWJpbmVkTWF0Y2hlcihhY3Rpb24pO1xyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiBpc1JlamVjdGVkV2l0aFZhbHVlKCkge1xyXG4gICAgdmFyIGFzeW5jVGh1bmtzID0gW107XHJcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgIGFzeW5jVGh1bmtzW19pXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICB9XHJcbiAgICB2YXIgaGFzRmxhZyA9IGZ1bmN0aW9uIChhY3Rpb24pIHtcclxuICAgICAgICByZXR1cm4gYWN0aW9uICYmIGFjdGlvbi5tZXRhICYmIGFjdGlvbi5tZXRhLnJlamVjdGVkV2l0aFZhbHVlO1xyXG4gICAgfTtcclxuICAgIGlmIChhc3luY1RodW5rcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGFjdGlvbikge1xyXG4gICAgICAgICAgICB2YXIgY29tYmluZWRNYXRjaGVyID0gaXNBbGxPZihpc1JlamVjdGVkLmFwcGx5KHZvaWQgMCwgYXN5bmNUaHVua3MpLCBoYXNGbGFnKTtcclxuICAgICAgICAgICAgcmV0dXJuIGNvbWJpbmVkTWF0Y2hlcihhY3Rpb24pO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzQXN5bmNUaHVua0FycmF5KGFzeW5jVGh1bmtzKSkge1xyXG4gICAgICAgIHJldHVybiBpc1JlamVjdGVkV2l0aFZhbHVlKCkoYXN5bmNUaHVua3NbMF0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChhY3Rpb24pIHtcclxuICAgICAgICB2YXIgY29tYmluZWRNYXRjaGVyID0gaXNBbGxPZihpc1JlamVjdGVkLmFwcGx5KHZvaWQgMCwgYXN5bmNUaHVua3MpLCBoYXNGbGFnKTtcclxuICAgICAgICByZXR1cm4gY29tYmluZWRNYXRjaGVyKGFjdGlvbik7XHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIGlzRnVsZmlsbGVkKCkge1xyXG4gICAgdmFyIGFzeW5jVGh1bmtzID0gW107XHJcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgIGFzeW5jVGh1bmtzW19pXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICB9XHJcbiAgICBpZiAoYXN5bmNUaHVua3MubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChhY3Rpb24pIHsgcmV0dXJuIGhhc0V4cGVjdGVkUmVxdWVzdE1ldGFkYXRhKGFjdGlvbiwgW1wiZnVsZmlsbGVkXCJdKTsgfTtcclxuICAgIH1cclxuICAgIGlmICghaXNBc3luY1RodW5rQXJyYXkoYXN5bmNUaHVua3MpKSB7XHJcbiAgICAgICAgcmV0dXJuIGlzRnVsZmlsbGVkKCkoYXN5bmNUaHVua3NbMF0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChhY3Rpb24pIHtcclxuICAgICAgICB2YXIgbWF0Y2hlcnMgPSBhc3luY1RodW5rcy5tYXAoZnVuY3Rpb24gKGFzeW5jVGh1bmspIHsgcmV0dXJuIGFzeW5jVGh1bmsuZnVsZmlsbGVkOyB9KTtcclxuICAgICAgICB2YXIgY29tYmluZWRNYXRjaGVyID0gaXNBbnlPZi5hcHBseSh2b2lkIDAsIG1hdGNoZXJzKTtcclxuICAgICAgICByZXR1cm4gY29tYmluZWRNYXRjaGVyKGFjdGlvbik7XHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIGlzQXN5bmNUaHVua0FjdGlvbigpIHtcclxuICAgIHZhciBhc3luY1RodW5rcyA9IFtdO1xyXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICBhc3luY1RodW5rc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgfVxyXG4gICAgaWYgKGFzeW5jVGh1bmtzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoYWN0aW9uKSB7IHJldHVybiBoYXNFeHBlY3RlZFJlcXVlc3RNZXRhZGF0YShhY3Rpb24sIFtcInBlbmRpbmdcIiwgXCJmdWxmaWxsZWRcIiwgXCJyZWplY3RlZFwiXSk7IH07XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzQXN5bmNUaHVua0FycmF5KGFzeW5jVGh1bmtzKSkge1xyXG4gICAgICAgIHJldHVybiBpc0FzeW5jVGh1bmtBY3Rpb24oKShhc3luY1RodW5rc1swXSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKGFjdGlvbikge1xyXG4gICAgICAgIHZhciBtYXRjaGVycyA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIF9pID0gMCwgYXN5bmNUaHVua3NfMSA9IGFzeW5jVGh1bmtzOyBfaSA8IGFzeW5jVGh1bmtzXzEubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBhc3luY1RodW5rID0gYXN5bmNUaHVua3NfMVtfaV07XHJcbiAgICAgICAgICAgIG1hdGNoZXJzLnB1c2goYXN5bmNUaHVuay5wZW5kaW5nLCBhc3luY1RodW5rLnJlamVjdGVkLCBhc3luY1RodW5rLmZ1bGZpbGxlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBjb21iaW5lZE1hdGNoZXIgPSBpc0FueU9mLmFwcGx5KHZvaWQgMCwgbWF0Y2hlcnMpO1xyXG4gICAgICAgIHJldHVybiBjb21iaW5lZE1hdGNoZXIoYWN0aW9uKTtcclxuICAgIH07XHJcbn1cclxuLy8gc3JjL2xpc3RlbmVyTWlkZGxld2FyZS91dGlscy50c1xyXG52YXIgYXNzZXJ0RnVuY3Rpb24gPSBmdW5jdGlvbiAoZnVuYywgZXhwZWN0ZWQpIHtcclxuICAgIGlmICh0eXBlb2YgZnVuYyAhPT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihleHBlY3RlZCArIFwiIGlzIG5vdCBhIGZ1bmN0aW9uXCIpO1xyXG4gICAgfVxyXG59O1xyXG52YXIgbm9vcCA9IGZ1bmN0aW9uICgpIHtcclxufTtcclxudmFyIGNhdGNoUmVqZWN0aW9uID0gZnVuY3Rpb24gKHByb21pc2UyLCBvbkVycm9yKSB7XHJcbiAgICBpZiAob25FcnJvciA9PT0gdm9pZCAwKSB7IG9uRXJyb3IgPSBub29wOyB9XHJcbiAgICBwcm9taXNlMi5jYXRjaChvbkVycm9yKTtcclxuICAgIHJldHVybiBwcm9taXNlMjtcclxufTtcclxudmFyIGFkZEFib3J0U2lnbmFsTGlzdGVuZXIgPSBmdW5jdGlvbiAoYWJvcnRTaWduYWwsIGNhbGxiYWNrKSB7XHJcbiAgICBhYm9ydFNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgY2FsbGJhY2ssIHsgb25jZTogdHJ1ZSB9KTtcclxuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBhYm9ydFNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgY2FsbGJhY2spOyB9O1xyXG59O1xyXG52YXIgYWJvcnRDb250cm9sbGVyV2l0aFJlYXNvbiA9IGZ1bmN0aW9uIChhYm9ydENvbnRyb2xsZXIsIHJlYXNvbikge1xyXG4gICAgdmFyIHNpZ25hbCA9IGFib3J0Q29udHJvbGxlci5zaWduYWw7XHJcbiAgICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoIShcInJlYXNvblwiIGluIHNpZ25hbCkpIHtcclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc2lnbmFsLCBcInJlYXNvblwiLCB7XHJcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXHJcbiAgICAgICAgICAgIHZhbHVlOiByZWFzb24sXHJcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWVcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIDtcclxuICAgIGFib3J0Q29udHJvbGxlci5hYm9ydChyZWFzb24pO1xyXG59O1xyXG4vLyBzcmMvbGlzdGVuZXJNaWRkbGV3YXJlL2V4Y2VwdGlvbnMudHNcclxudmFyIHRhc2sgPSBcInRhc2tcIjtcclxudmFyIGxpc3RlbmVyID0gXCJsaXN0ZW5lclwiO1xyXG52YXIgY29tcGxldGVkID0gXCJjb21wbGV0ZWRcIjtcclxudmFyIGNhbmNlbGxlZCA9IFwiY2FuY2VsbGVkXCI7XHJcbnZhciB0YXNrQ2FuY2VsbGVkID0gXCJ0YXNrLVwiICsgY2FuY2VsbGVkO1xyXG52YXIgdGFza0NvbXBsZXRlZCA9IFwidGFzay1cIiArIGNvbXBsZXRlZDtcclxudmFyIGxpc3RlbmVyQ2FuY2VsbGVkID0gbGlzdGVuZXIgKyBcIi1cIiArIGNhbmNlbGxlZDtcclxudmFyIGxpc3RlbmVyQ29tcGxldGVkID0gbGlzdGVuZXIgKyBcIi1cIiArIGNvbXBsZXRlZDtcclxudmFyIFRhc2tBYm9ydEVycm9yID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gVGFza0Fib3J0RXJyb3IoY29kZSkge1xyXG4gICAgICAgIHRoaXMuY29kZSA9IGNvZGU7XHJcbiAgICAgICAgdGhpcy5uYW1lID0gXCJUYXNrQWJvcnRFcnJvclwiO1xyXG4gICAgICAgIHRoaXMubWVzc2FnZSA9IHRhc2sgKyBcIiBcIiArIGNhbmNlbGxlZCArIFwiIChyZWFzb246IFwiICsgY29kZSArIFwiKVwiO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFRhc2tBYm9ydEVycm9yO1xyXG59KCkpO1xyXG4vLyBzcmMvbGlzdGVuZXJNaWRkbGV3YXJlL3Rhc2sudHNcclxudmFyIHZhbGlkYXRlQWN0aXZlID0gZnVuY3Rpb24gKHNpZ25hbCkge1xyXG4gICAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IFRhc2tBYm9ydEVycm9yKHNpZ25hbC5yZWFzb24pO1xyXG4gICAgfVxyXG59O1xyXG5mdW5jdGlvbiByYWNlV2l0aFNpZ25hbChzaWduYWwsIHByb21pc2UyKSB7XHJcbiAgICB2YXIgY2xlYW51cCA9IG5vb3A7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgIHZhciBub3RpZnlSZWplY3Rpb24gPSBmdW5jdGlvbiAoKSB7IHJldHVybiByZWplY3QobmV3IFRhc2tBYm9ydEVycm9yKHNpZ25hbC5yZWFzb24pKTsgfTtcclxuICAgICAgICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcclxuICAgICAgICAgICAgbm90aWZ5UmVqZWN0aW9uKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2xlYW51cCA9IGFkZEFib3J0U2lnbmFsTGlzdGVuZXIoc2lnbmFsLCBub3RpZnlSZWplY3Rpb24pO1xyXG4gICAgICAgIHByb21pc2UyLmZpbmFsbHkoZnVuY3Rpb24gKCkgeyByZXR1cm4gY2xlYW51cCgpOyB9KS50aGVuKHJlc29sdmUsIHJlamVjdCk7XHJcbiAgICB9KS5maW5hbGx5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBjbGVhbnVwID0gbm9vcDtcclxuICAgIH0pO1xyXG59XHJcbnZhciBydW5UYXNrID0gZnVuY3Rpb24gKHRhc2syLCBjbGVhblVwKSB7IHJldHVybiBfX2FzeW5jKHZvaWQgMCwgbnVsbCwgZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIHZhbHVlLCBlcnJvcl8xO1xyXG4gICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYykge1xyXG4gICAgICAgIHN3aXRjaCAoX2MubGFiZWwpIHtcclxuICAgICAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAgICAgX2MudHJ5cy5wdXNoKFswLCAzLCA0LCA1XSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCBQcm9taXNlLnJlc29sdmUoKV07XHJcbiAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgIF9jLnNlbnQoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHRhc2syKCldO1xyXG4gICAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IF9jLnNlbnQoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1czogXCJva1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWVcclxuICAgICAgICAgICAgICAgICAgICB9XTtcclxuICAgICAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICAgICAgZXJyb3JfMSA9IF9jLnNlbnQoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1czogZXJyb3JfMSBpbnN0YW5jZW9mIFRhc2tBYm9ydEVycm9yID8gXCJjYW5jZWxsZWRcIiA6IFwicmVqZWN0ZWRcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yXzFcclxuICAgICAgICAgICAgICAgICAgICB9XTtcclxuICAgICAgICAgICAgY2FzZSA0OlxyXG4gICAgICAgICAgICAgICAgY2xlYW5VcCA9PSBudWxsID8gdm9pZCAwIDogY2xlYW5VcCgpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFs3IC8qZW5kZmluYWxseSovXTtcclxuICAgICAgICAgICAgY2FzZSA1OiByZXR1cm4gWzIgLypyZXR1cm4qL107XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn0pOyB9O1xyXG52YXIgY3JlYXRlUGF1c2UgPSBmdW5jdGlvbiAoc2lnbmFsKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHByb21pc2UyKSB7XHJcbiAgICAgICAgcmV0dXJuIGNhdGNoUmVqZWN0aW9uKHJhY2VXaXRoU2lnbmFsKHNpZ25hbCwgcHJvbWlzZTIpLnRoZW4oZnVuY3Rpb24gKG91dHB1dCkge1xyXG4gICAgICAgICAgICB2YWxpZGF0ZUFjdGl2ZShzaWduYWwpO1xyXG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xyXG4gICAgICAgIH0pKTtcclxuICAgIH07XHJcbn07XHJcbnZhciBjcmVhdGVEZWxheSA9IGZ1bmN0aW9uIChzaWduYWwpIHtcclxuICAgIHZhciBwYXVzZSA9IGNyZWF0ZVBhdXNlKHNpZ25hbCk7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRpbWVvdXRNcykge1xyXG4gICAgICAgIHJldHVybiBwYXVzZShuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXR1cm4gc2V0VGltZW91dChyZXNvbHZlLCB0aW1lb3V0TXMpOyB9KSk7XHJcbiAgICB9O1xyXG59O1xyXG4vLyBzcmMvbGlzdGVuZXJNaWRkbGV3YXJlL2luZGV4LnRzXHJcbnZhciBhc3NpZ24gPSBPYmplY3QuYXNzaWduO1xyXG52YXIgSU5URVJOQUxfTklMX1RPS0VOID0ge307XHJcbnZhciBhbG0gPSBcImxpc3RlbmVyTWlkZGxld2FyZVwiO1xyXG52YXIgY3JlYXRlRm9yayA9IGZ1bmN0aW9uIChwYXJlbnRBYm9ydFNpZ25hbCwgcGFyZW50QmxvY2tpbmdQcm9taXNlcykge1xyXG4gICAgdmFyIGxpbmtDb250cm9sbGVycyA9IGZ1bmN0aW9uIChjb250cm9sbGVyKSB7IHJldHVybiBhZGRBYm9ydFNpZ25hbExpc3RlbmVyKHBhcmVudEFib3J0U2lnbmFsLCBmdW5jdGlvbiAoKSB7IHJldHVybiBhYm9ydENvbnRyb2xsZXJXaXRoUmVhc29uKGNvbnRyb2xsZXIsIHBhcmVudEFib3J0U2lnbmFsLnJlYXNvbik7IH0pOyB9O1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXNrRXhlY3V0b3IsIG9wdHMpIHtcclxuICAgICAgICBhc3NlcnRGdW5jdGlvbih0YXNrRXhlY3V0b3IsIFwidGFza0V4ZWN1dG9yXCIpO1xyXG4gICAgICAgIHZhciBjaGlsZEFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcclxuICAgICAgICBsaW5rQ29udHJvbGxlcnMoY2hpbGRBYm9ydENvbnRyb2xsZXIpO1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBydW5UYXNrKGZ1bmN0aW9uICgpIHsgcmV0dXJuIF9fYXN5bmModm9pZCAwLCBudWxsLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciByZXN1bHQyO1xyXG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9jKSB7XHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKF9jLmxhYmVsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZUFjdGl2ZShwYXJlbnRBYm9ydFNpZ25hbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlQWN0aXZlKGNoaWxkQWJvcnRDb250cm9sbGVyLnNpZ25hbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHRhc2tFeGVjdXRvcih7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF1c2U6IGNyZWF0ZVBhdXNlKGNoaWxkQWJvcnRDb250cm9sbGVyLnNpZ25hbCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsYXk6IGNyZWF0ZURlbGF5KGNoaWxkQWJvcnRDb250cm9sbGVyLnNpZ25hbCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmFsOiBjaGlsZEFib3J0Q29udHJvbGxlci5zaWduYWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXTtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdDIgPSBfYy5zZW50KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlQWN0aXZlKGNoaWxkQWJvcnRDb250cm9sbGVyLnNpZ25hbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCByZXN1bHQyXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7IH0sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFib3J0Q29udHJvbGxlcldpdGhSZWFzb24oY2hpbGRBYm9ydENvbnRyb2xsZXIsIHRhc2tDb21wbGV0ZWQpOyB9KTtcclxuICAgICAgICBpZiAob3B0cyA9PSBudWxsID8gdm9pZCAwIDogb3B0cy5hdXRvSm9pbikge1xyXG4gICAgICAgICAgICBwYXJlbnRCbG9ja2luZ1Byb21pc2VzLnB1c2gocmVzdWx0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgcmVzdWx0OiBjcmVhdGVQYXVzZShwYXJlbnRBYm9ydFNpZ25hbCkocmVzdWx0KSxcclxuICAgICAgICAgICAgY2FuY2VsOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBhYm9ydENvbnRyb2xsZXJXaXRoUmVhc29uKGNoaWxkQWJvcnRDb250cm9sbGVyLCB0YXNrQ2FuY2VsbGVkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICB9O1xyXG59O1xyXG52YXIgY3JlYXRlVGFrZVBhdHRlcm4gPSBmdW5jdGlvbiAoc3RhcnRMaXN0ZW5pbmcsIHNpZ25hbCkge1xyXG4gICAgdmFyIHRha2UgPSBmdW5jdGlvbiAocHJlZGljYXRlLCB0aW1lb3V0KSB7IHJldHVybiBfX2FzeW5jKHZvaWQgMCwgbnVsbCwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciB1bnN1YnNjcmliZSwgdHVwbGVQcm9taXNlLCBwcm9taXNlcywgb3V0cHV0O1xyXG4gICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2MpIHtcclxuICAgICAgICAgICAgc3dpdGNoIChfYy5sYWJlbCkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlQWN0aXZlKHNpZ25hbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB0dXBsZVByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdG9wTGlzdGVuaW5nID0gc3RhcnRMaXN0ZW5pbmcoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZGljYXRlOiBwcmVkaWNhdGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZmZlY3Q6IGZ1bmN0aW9uIChhY3Rpb24sIGxpc3RlbmVyQXBpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJBcGkudW5zdWJzY3JpYmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lckFwaS5nZXRTdGF0ZSgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lckFwaS5nZXRPcmlnaW5hbFN0YXRlKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcExpc3RlbmluZygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbWlzZXMgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR1cGxlUHJvbWlzZVxyXG4gICAgICAgICAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRpbWVvdXQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlcy5wdXNoKG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJldHVybiBzZXRUaW1lb3V0KHJlc29sdmUsIHRpbWVvdXQsIG51bGwpOyB9KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIF9jLmxhYmVsID0gMTtcclxuICAgICAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgICAgICBfYy50cnlzLnB1c2goWzEsICwgMywgNF0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHJhY2VXaXRoU2lnbmFsKHNpZ25hbCwgUHJvbWlzZS5yYWNlKHByb21pc2VzKSldO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IF9jLnNlbnQoKTtcclxuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZUFjdGl2ZShzaWduYWwpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBvdXRwdXRdO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICAgICAgICAgIHVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs3IC8qZW5kZmluYWxseSovXTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFsyIC8qcmV0dXJuKi9dO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTsgfTtcclxuICAgIHJldHVybiBmdW5jdGlvbiAocHJlZGljYXRlLCB0aW1lb3V0KSB7IHJldHVybiBjYXRjaFJlamVjdGlvbih0YWtlKHByZWRpY2F0ZSwgdGltZW91dCkpOyB9O1xyXG59O1xyXG52YXIgZ2V0TGlzdGVuZXJFbnRyeVByb3BzRnJvbSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XHJcbiAgICB2YXIgdHlwZSA9IG9wdGlvbnMudHlwZSwgYWN0aW9uQ3JlYXRvciA9IG9wdGlvbnMuYWN0aW9uQ3JlYXRvciwgbWF0Y2hlciA9IG9wdGlvbnMubWF0Y2hlciwgcHJlZGljYXRlID0gb3B0aW9ucy5wcmVkaWNhdGUsIGVmZmVjdCA9IG9wdGlvbnMuZWZmZWN0O1xyXG4gICAgaWYgKHR5cGUpIHtcclxuICAgICAgICBwcmVkaWNhdGUgPSBjcmVhdGVBY3Rpb24odHlwZSkubWF0Y2g7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChhY3Rpb25DcmVhdG9yKSB7XHJcbiAgICAgICAgdHlwZSA9IGFjdGlvbkNyZWF0b3IudHlwZTtcclxuICAgICAgICBwcmVkaWNhdGUgPSBhY3Rpb25DcmVhdG9yLm1hdGNoO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAobWF0Y2hlcikge1xyXG4gICAgICAgIHByZWRpY2F0ZSA9IG1hdGNoZXI7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChwcmVkaWNhdGUpIHtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNyZWF0aW5nIG9yIHJlbW92aW5nIGEgbGlzdGVuZXIgcmVxdWlyZXMgb25lIG9mIHRoZSBrbm93biBmaWVsZHMgZm9yIG1hdGNoaW5nIGFuIGFjdGlvblwiKTtcclxuICAgIH1cclxuICAgIGFzc2VydEZ1bmN0aW9uKGVmZmVjdCwgXCJvcHRpb25zLmxpc3RlbmVyXCIpO1xyXG4gICAgcmV0dXJuIHsgcHJlZGljYXRlOiBwcmVkaWNhdGUsIHR5cGU6IHR5cGUsIGVmZmVjdDogZWZmZWN0IH07XHJcbn07XHJcbnZhciBjcmVhdGVMaXN0ZW5lckVudHJ5ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcclxuICAgIHZhciBfYyA9IGdldExpc3RlbmVyRW50cnlQcm9wc0Zyb20ob3B0aW9ucyksIHR5cGUgPSBfYy50eXBlLCBwcmVkaWNhdGUgPSBfYy5wcmVkaWNhdGUsIGVmZmVjdCA9IF9jLmVmZmVjdDtcclxuICAgIHZhciBpZCA9IG5hbm9pZCgpO1xyXG4gICAgdmFyIGVudHJ5ID0ge1xyXG4gICAgICAgIGlkOiBpZCxcclxuICAgICAgICBlZmZlY3Q6IGVmZmVjdCxcclxuICAgICAgICB0eXBlOiB0eXBlLFxyXG4gICAgICAgIHByZWRpY2F0ZTogcHJlZGljYXRlLFxyXG4gICAgICAgIHBlbmRpbmc6IG5ldyBTZXQoKSxcclxuICAgICAgICB1bnN1YnNjcmliZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbnN1YnNjcmliZSBub3QgaW5pdGlhbGl6ZWRcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHJldHVybiBlbnRyeTtcclxufTtcclxudmFyIGNhbmNlbEFjdGl2ZUxpc3RlbmVycyA9IGZ1bmN0aW9uIChlbnRyeSkge1xyXG4gICAgZW50cnkucGVuZGluZy5mb3JFYWNoKGZ1bmN0aW9uIChjb250cm9sbGVyKSB7XHJcbiAgICAgICAgYWJvcnRDb250cm9sbGVyV2l0aFJlYXNvbihjb250cm9sbGVyLCBsaXN0ZW5lckNhbmNlbGxlZCk7XHJcbiAgICB9KTtcclxufTtcclxudmFyIGNyZWF0ZUNsZWFyTGlzdGVuZXJNaWRkbGV3YXJlID0gZnVuY3Rpb24gKGxpc3RlbmVyTWFwKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGxpc3RlbmVyTWFwLmZvckVhY2goY2FuY2VsQWN0aXZlTGlzdGVuZXJzKTtcclxuICAgICAgICBsaXN0ZW5lck1hcC5jbGVhcigpO1xyXG4gICAgfTtcclxufTtcclxudmFyIHNhZmVseU5vdGlmeUVycm9yID0gZnVuY3Rpb24gKGVycm9ySGFuZGxlciwgZXJyb3JUb05vdGlmeSwgZXJyb3JJbmZvKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIGVycm9ySGFuZGxlcihlcnJvclRvTm90aWZ5LCBlcnJvckluZm8pO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGVycm9ySGFuZGxlckVycm9yKSB7XHJcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRocm93IGVycm9ySGFuZGxlckVycm9yO1xyXG4gICAgICAgIH0sIDApO1xyXG4gICAgfVxyXG59O1xyXG52YXIgYWRkTGlzdGVuZXIgPSBjcmVhdGVBY3Rpb24oYWxtICsgXCIvYWRkXCIpO1xyXG52YXIgY2xlYXJBbGxMaXN0ZW5lcnMgPSBjcmVhdGVBY3Rpb24oYWxtICsgXCIvcmVtb3ZlQWxsXCIpO1xyXG52YXIgcmVtb3ZlTGlzdGVuZXIgPSBjcmVhdGVBY3Rpb24oYWxtICsgXCIvcmVtb3ZlXCIpO1xyXG52YXIgZGVmYXVsdEVycm9ySGFuZGxlciA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBhcmdzID0gW107XHJcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcclxuICAgIH1cclxuICAgIGNvbnNvbGUuZXJyb3IuYXBwbHkoY29uc29sZSwgX19zcHJlYWRBcnJheShbYWxtICsgXCIvZXJyb3JcIl0sIGFyZ3MpKTtcclxufTtcclxuZnVuY3Rpb24gY3JlYXRlTGlzdGVuZXJNaWRkbGV3YXJlKG1pZGRsZXdhcmVPcHRpb25zKSB7XHJcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgaWYgKG1pZGRsZXdhcmVPcHRpb25zID09PSB2b2lkIDApIHsgbWlkZGxld2FyZU9wdGlvbnMgPSB7fTsgfVxyXG4gICAgdmFyIGxpc3RlbmVyTWFwID0gbmV3IE1hcCgpO1xyXG4gICAgdmFyIGV4dHJhID0gbWlkZGxld2FyZU9wdGlvbnMuZXh0cmEsIF9jID0gbWlkZGxld2FyZU9wdGlvbnMub25FcnJvciwgb25FcnJvciA9IF9jID09PSB2b2lkIDAgPyBkZWZhdWx0RXJyb3JIYW5kbGVyIDogX2M7XHJcbiAgICBhc3NlcnRGdW5jdGlvbihvbkVycm9yLCBcIm9uRXJyb3JcIik7XHJcbiAgICB2YXIgaW5zZXJ0RW50cnkgPSBmdW5jdGlvbiAoZW50cnkpIHtcclxuICAgICAgICBlbnRyeS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGxpc3RlbmVyTWFwLmRlbGV0ZShlbnRyeS5pZCk7IH07XHJcbiAgICAgICAgbGlzdGVuZXJNYXAuc2V0KGVudHJ5LmlkLCBlbnRyeSk7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjYW5jZWxPcHRpb25zKSB7XHJcbiAgICAgICAgICAgIGVudHJ5LnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgICAgIGlmIChjYW5jZWxPcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBjYW5jZWxPcHRpb25zLmNhbmNlbEFjdGl2ZSkge1xyXG4gICAgICAgICAgICAgICAgY2FuY2VsQWN0aXZlTGlzdGVuZXJzKGVudHJ5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICB9O1xyXG4gICAgdmFyIGZpbmRMaXN0ZW5lckVudHJ5ID0gZnVuY3Rpb24gKGNvbXBhcmF0b3IpIHtcclxuICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9jID0gQXJyYXkuZnJvbShsaXN0ZW5lck1hcC52YWx1ZXMoKSk7IF9pIDwgX2MubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBlbnRyeSA9IF9jW19pXTtcclxuICAgICAgICAgICAgaWYgKGNvbXBhcmF0b3IoZW50cnkpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZW50cnk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHZvaWQgMDtcclxuICAgIH07XHJcbiAgICB2YXIgc3RhcnRMaXN0ZW5pbmcgPSBmdW5jdGlvbiAob3B0aW9ucykge1xyXG4gICAgICAgIHZhciBlbnRyeSA9IGZpbmRMaXN0ZW5lckVudHJ5KGZ1bmN0aW9uIChleGlzdGluZ0VudHJ5KSB7IHJldHVybiBleGlzdGluZ0VudHJ5LmVmZmVjdCA9PT0gb3B0aW9ucy5lZmZlY3Q7IH0pO1xyXG4gICAgICAgIGlmICghZW50cnkpIHtcclxuICAgICAgICAgICAgZW50cnkgPSBjcmVhdGVMaXN0ZW5lckVudHJ5KG9wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaW5zZXJ0RW50cnkoZW50cnkpO1xyXG4gICAgfTtcclxuICAgIHZhciBzdG9wTGlzdGVuaW5nID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcclxuICAgICAgICB2YXIgX2MgPSBnZXRMaXN0ZW5lckVudHJ5UHJvcHNGcm9tKG9wdGlvbnMpLCB0eXBlID0gX2MudHlwZSwgZWZmZWN0ID0gX2MuZWZmZWN0LCBwcmVkaWNhdGUgPSBfYy5wcmVkaWNhdGU7XHJcbiAgICAgICAgdmFyIGVudHJ5ID0gZmluZExpc3RlbmVyRW50cnkoZnVuY3Rpb24gKGVudHJ5Mikge1xyXG4gICAgICAgICAgICB2YXIgbWF0Y2hQcmVkaWNhdGVPclR5cGUgPSB0eXBlb2YgdHlwZSA9PT0gXCJzdHJpbmdcIiA/IGVudHJ5Mi50eXBlID09PSB0eXBlIDogZW50cnkyLnByZWRpY2F0ZSA9PT0gcHJlZGljYXRlO1xyXG4gICAgICAgICAgICByZXR1cm4gbWF0Y2hQcmVkaWNhdGVPclR5cGUgJiYgZW50cnkyLmVmZmVjdCA9PT0gZWZmZWN0O1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChlbnRyeSkge1xyXG4gICAgICAgICAgICBlbnRyeS51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5jYW5jZWxBY3RpdmUpIHtcclxuICAgICAgICAgICAgICAgIGNhbmNlbEFjdGl2ZUxpc3RlbmVycyhlbnRyeSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICEhZW50cnk7XHJcbiAgICB9O1xyXG4gICAgdmFyIG5vdGlmeUxpc3RlbmVyID0gZnVuY3Rpb24gKGVudHJ5LCBhY3Rpb24sIGFwaSwgZ2V0T3JpZ2luYWxTdGF0ZSkgeyByZXR1cm4gX19hc3luYyhfdGhpcywgbnVsbCwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBpbnRlcm5hbFRhc2tDb250cm9sbGVyLCB0YWtlLCBhdXRvSm9pblByb21pc2VzLCBsaXN0ZW5lckVycm9yXzE7XHJcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYykge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKF9jLmxhYmVsKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxUYXNrQ29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcclxuICAgICAgICAgICAgICAgICAgICB0YWtlID0gY3JlYXRlVGFrZVBhdHRlcm4oc3RhcnRMaXN0ZW5pbmcsIGludGVybmFsVGFza0NvbnRyb2xsZXIuc2lnbmFsKTtcclxuICAgICAgICAgICAgICAgICAgICBhdXRvSm9pblByb21pc2VzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgX2MubGFiZWwgPSAxO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgICAgICAgIF9jLnRyeXMucHVzaChbMSwgMywgNCwgNl0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGVudHJ5LnBlbmRpbmcuYWRkKGludGVybmFsVGFza0NvbnRyb2xsZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIFByb21pc2UucmVzb2x2ZShlbnRyeS5lZmZlY3QoYWN0aW9uLCBhc3NpZ24oe30sIGFwaSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0T3JpZ2luYWxTdGF0ZTogZ2V0T3JpZ2luYWxTdGF0ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbjogZnVuY3Rpb24gKHByZWRpY2F0ZSwgdGltZW91dCkgeyByZXR1cm4gdGFrZShwcmVkaWNhdGUsIHRpbWVvdXQpLnRoZW4oQm9vbGVhbik7IH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWtlOiB0YWtlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsYXk6IGNyZWF0ZURlbGF5KGludGVybmFsVGFza0NvbnRyb2xsZXIuc2lnbmFsKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdXNlOiBjcmVhdGVQYXVzZShpbnRlcm5hbFRhc2tDb250cm9sbGVyLnNpZ25hbCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYTogZXh0cmEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYWw6IGludGVybmFsVGFza0NvbnRyb2xsZXIuc2lnbmFsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yazogY3JlYXRlRm9yayhpbnRlcm5hbFRhc2tDb250cm9sbGVyLnNpZ25hbCwgYXV0b0pvaW5Qcm9taXNlcyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnN1YnNjcmliZTogZW50cnkudW5zdWJzY3JpYmUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lck1hcC5zZXQoZW50cnkuaWQsIGVudHJ5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxBY3RpdmVMaXN0ZW5lcnM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS5wZW5kaW5nLmZvckVhY2goZnVuY3Rpb24gKGNvbnRyb2xsZXIsIF8sIHNldCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udHJvbGxlciAhPT0gaW50ZXJuYWxUYXNrQ29udHJvbGxlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJvcnRDb250cm9sbGVyV2l0aFJlYXNvbihjb250cm9sbGVyLCBsaXN0ZW5lckNhbmNlbGxlZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQuZGVsZXRlKGNvbnRyb2xsZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKSldO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgICAgIF9jLnNlbnQoKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMgLypicmVhayovLCA2XTtcclxuICAgICAgICAgICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lckVycm9yXzEgPSBfYy5zZW50KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEobGlzdGVuZXJFcnJvcl8xIGluc3RhbmNlb2YgVGFza0Fib3J0RXJyb3IpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNhZmVseU5vdGlmeUVycm9yKG9uRXJyb3IsIGxpc3RlbmVyRXJyb3JfMSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2VkQnk6IFwiZWZmZWN0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDZdO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gWzQgLyp5aWVsZCovLCBQcm9taXNlLmFsbFNldHRsZWQoYXV0b0pvaW5Qcm9taXNlcyldO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA1OlxyXG4gICAgICAgICAgICAgICAgICAgIF9jLnNlbnQoKTtcclxuICAgICAgICAgICAgICAgICAgICBhYm9ydENvbnRyb2xsZXJXaXRoUmVhc29uKGludGVybmFsVGFza0NvbnRyb2xsZXIsIGxpc3RlbmVyQ29tcGxldGVkKTtcclxuICAgICAgICAgICAgICAgICAgICBlbnRyeS5wZW5kaW5nLmRlbGV0ZShpbnRlcm5hbFRhc2tDb250cm9sbGVyKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzcgLyplbmRmaW5hbGx5Ki9dO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA2OiByZXR1cm4gWzIgLypyZXR1cm4qL107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH0pOyB9O1xyXG4gICAgdmFyIGNsZWFyTGlzdGVuZXJNaWRkbGV3YXJlID0gY3JlYXRlQ2xlYXJMaXN0ZW5lck1pZGRsZXdhcmUobGlzdGVuZXJNYXApO1xyXG4gICAgdmFyIG1pZGRsZXdhcmUgPSBmdW5jdGlvbiAoYXBpKSB7IHJldHVybiBmdW5jdGlvbiAobmV4dCkgeyByZXR1cm4gZnVuY3Rpb24gKGFjdGlvbikge1xyXG4gICAgICAgIGlmICghaXNBY3Rpb24oYWN0aW9uKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV4dChhY3Rpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYWRkTGlzdGVuZXIubWF0Y2goYWN0aW9uKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gc3RhcnRMaXN0ZW5pbmcoYWN0aW9uLnBheWxvYWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY2xlYXJBbGxMaXN0ZW5lcnMubWF0Y2goYWN0aW9uKSkge1xyXG4gICAgICAgICAgICBjbGVhckxpc3RlbmVyTWlkZGxld2FyZSgpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChyZW1vdmVMaXN0ZW5lci5tYXRjaChhY3Rpb24pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzdG9wTGlzdGVuaW5nKGFjdGlvbi5wYXlsb2FkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIG9yaWdpbmFsU3RhdGUgPSBhcGkuZ2V0U3RhdGUoKTtcclxuICAgICAgICB2YXIgZ2V0T3JpZ2luYWxTdGF0ZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKG9yaWdpbmFsU3RhdGUgPT09IElOVEVSTkFMX05JTF9UT0tFTikge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGFsbSArIFwiOiBnZXRPcmlnaW5hbFN0YXRlIGNhbiBvbmx5IGJlIGNhbGxlZCBzeW5jaHJvbm91c2x5XCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbFN0YXRlO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdmFyIHJlc3VsdDtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICByZXN1bHQgPSBuZXh0KGFjdGlvbik7XHJcbiAgICAgICAgICAgIGlmIChsaXN0ZW5lck1hcC5zaXplID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRTdGF0ZSA9IGFwaS5nZXRTdGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGxpc3RlbmVyRW50cmllcyA9IEFycmF5LmZyb20obGlzdGVuZXJNYXAudmFsdWVzKCkpO1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBsaXN0ZW5lckVudHJpZXNfMSA9IGxpc3RlbmVyRW50cmllczsgX2kgPCBsaXN0ZW5lckVudHJpZXNfMS5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZW50cnkgPSBsaXN0ZW5lckVudHJpZXNfMVtfaV07XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJ1bkxpc3RlbmVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcnVuTGlzdGVuZXIgPSBlbnRyeS5wcmVkaWNhdGUoYWN0aW9uLCBjdXJyZW50U3RhdGUsIG9yaWdpbmFsU3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAocHJlZGljYXRlRXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcnVuTGlzdGVuZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2FmZWx5Tm90aWZ5RXJyb3Iob25FcnJvciwgcHJlZGljYXRlRXJyb3IsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlZEJ5OiBcInByZWRpY2F0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXJ1bkxpc3RlbmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBub3RpZnlMaXN0ZW5lcihlbnRyeSwgYWN0aW9uLCBhcGksIGdldE9yaWdpbmFsU3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpbmFsbHkge1xyXG4gICAgICAgICAgICBvcmlnaW5hbFN0YXRlID0gSU5URVJOQUxfTklMX1RPS0VOO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfTsgfTsgfTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgbWlkZGxld2FyZTogbWlkZGxld2FyZSxcclxuICAgICAgICBzdGFydExpc3RlbmluZzogc3RhcnRMaXN0ZW5pbmcsXHJcbiAgICAgICAgc3RvcExpc3RlbmluZzogc3RvcExpc3RlbmluZyxcclxuICAgICAgICBjbGVhckxpc3RlbmVyczogY2xlYXJMaXN0ZW5lck1pZGRsZXdhcmVcclxuICAgIH07XHJcbn1cclxuLy8gc3JjL2F1dG9CYXRjaEVuaGFuY2VyLnRzXHJcbnZhciBTSE9VTERfQVVUT0JBVENIID0gXCJSVEtfYXV0b0JhdGNoXCI7XHJcbnZhciBwcmVwYXJlQXV0b0JhdGNoZWQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBmdW5jdGlvbiAocGF5bG9hZCkge1xyXG4gICAgdmFyIF9jO1xyXG4gICAgcmV0dXJuICh7XHJcbiAgICAgICAgcGF5bG9hZDogcGF5bG9hZCxcclxuICAgICAgICBtZXRhOiAoX2MgPSB7fSwgX2NbU0hPVUxEX0FVVE9CQVRDSF0gPSB0cnVlLCBfYylcclxuICAgIH0pO1xyXG59OyB9O1xyXG52YXIgcHJvbWlzZTtcclxudmFyIHF1ZXVlTWljcm90YXNrU2hpbSA9IHR5cGVvZiBxdWV1ZU1pY3JvdGFzayA9PT0gXCJmdW5jdGlvblwiID8gcXVldWVNaWNyb3Rhc2suYmluZCh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93IDogdHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbCA6IGdsb2JhbFRoaXMpIDogZnVuY3Rpb24gKGNiKSB7IHJldHVybiAocHJvbWlzZSB8fCAocHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSgpKSkudGhlbihjYikuY2F0Y2goZnVuY3Rpb24gKGVycikgeyByZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICB0aHJvdyBlcnI7XHJcbn0sIDApOyB9KTsgfTtcclxudmFyIGNyZWF0ZVF1ZXVlV2l0aFRpbWVyID0gZnVuY3Rpb24gKHRpbWVvdXQpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAobm90aWZ5KSB7XHJcbiAgICAgICAgc2V0VGltZW91dChub3RpZnksIHRpbWVvdXQpO1xyXG4gICAgfTtcclxufTtcclxudmFyIHJBRiA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSA/IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgOiBjcmVhdGVRdWV1ZVdpdGhUaW1lcigxMCk7XHJcbnZhciBhdXRvQmF0Y2hFbmhhbmNlciA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XHJcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7IHR5cGU6IFwicmFmXCIgfTsgfVxyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChuZXh0KSB7IHJldHVybiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBzdG9yZSA9IG5leHQuYXBwbHkodm9pZCAwLCBhcmdzKTtcclxuICAgICAgICB2YXIgbm90aWZ5aW5nID0gdHJ1ZTtcclxuICAgICAgICB2YXIgc2hvdWxkTm90aWZ5QXRFbmRPZlRpY2sgPSBmYWxzZTtcclxuICAgICAgICB2YXIgbm90aWZpY2F0aW9uUXVldWVkID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIGxpc3RlbmVycyA9IG5ldyBTZXQoKTtcclxuICAgICAgICB2YXIgcXVldWVDYWxsYmFjayA9IG9wdGlvbnMudHlwZSA9PT0gXCJ0aWNrXCIgPyBxdWV1ZU1pY3JvdGFza1NoaW0gOiBvcHRpb25zLnR5cGUgPT09IFwicmFmXCIgPyByQUYgOiBvcHRpb25zLnR5cGUgPT09IFwiY2FsbGJhY2tcIiA/IG9wdGlvbnMucXVldWVOb3RpZmljYXRpb24gOiBjcmVhdGVRdWV1ZVdpdGhUaW1lcihvcHRpb25zLnRpbWVvdXQpO1xyXG4gICAgICAgIHZhciBub3RpZnlMaXN0ZW5lcnMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIG5vdGlmaWNhdGlvblF1ZXVlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAoc2hvdWxkTm90aWZ5QXRFbmRPZlRpY2spIHtcclxuICAgICAgICAgICAgICAgIHNob3VsZE5vdGlmeUF0RW5kT2ZUaWNrID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBsaXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbiAobCkgeyByZXR1cm4gbCgpOyB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN0b3JlLCB7XHJcbiAgICAgICAgICAgIHN1YnNjcmliZTogZnVuY3Rpb24gKGxpc3RlbmVyMikge1xyXG4gICAgICAgICAgICAgICAgdmFyIHdyYXBwZWRMaXN0ZW5lciA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5vdGlmeWluZyAmJiBsaXN0ZW5lcjIoKTsgfTtcclxuICAgICAgICAgICAgICAgIHZhciB1bnN1YnNjcmliZSA9IHN0b3JlLnN1YnNjcmliZSh3cmFwcGVkTGlzdGVuZXIpO1xyXG4gICAgICAgICAgICAgICAgbGlzdGVuZXJzLmFkZChsaXN0ZW5lcjIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICB1bnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVycy5kZWxldGUobGlzdGVuZXIyKTtcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGRpc3BhdGNoOiBmdW5jdGlvbiAoYWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgX2E7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vdGlmeWluZyA9ICEoKF9hID0gYWN0aW9uID09IG51bGwgPyB2b2lkIDAgOiBhY3Rpb24ubWV0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hW1NIT1VMRF9BVVRPQkFUQ0hdKTtcclxuICAgICAgICAgICAgICAgICAgICBzaG91bGROb3RpZnlBdEVuZE9mVGljayA9ICFub3RpZnlpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZE5vdGlmeUF0RW5kT2ZUaWNrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbm90aWZpY2F0aW9uUXVldWVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZmljYXRpb25RdWV1ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVldWVDYWxsYmFjayhub3RpZnlMaXN0ZW5lcnMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdG9yZS5kaXNwYXRjaChhY3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm90aWZ5aW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfTsgfTtcclxufTtcclxuLy8gc3JjL2luZGV4LnRzXHJcbmVuYWJsZUVTNSgpO1xyXG5leHBvcnQgeyBFbmhhbmNlckFycmF5LCBNaWRkbGV3YXJlQXJyYXksIFNIT1VMRF9BVVRPQkFUQ0gsIFRhc2tBYm9ydEVycm9yLCBhZGRMaXN0ZW5lciwgYXV0b0JhdGNoRW5oYW5jZXIsIGNsZWFyQWxsTGlzdGVuZXJzLCBjb25maWd1cmVTdG9yZSwgY3JlYXRlQWN0aW9uLCBjcmVhdGVBY3Rpb25DcmVhdG9ySW52YXJpYW50TWlkZGxld2FyZSwgY3JlYXRlQXN5bmNUaHVuaywgY3JlYXRlRHJhZnRTYWZlU2VsZWN0b3IsIGNyZWF0ZUVudGl0eUFkYXB0ZXIsIGNyZWF0ZUltbXV0YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZSwgY3JlYXRlTGlzdGVuZXJNaWRkbGV3YXJlLCBkZWZhdWx0MiBhcyBjcmVhdGVOZXh0U3RhdGUsIGNyZWF0ZVJlZHVjZXIsIGNyZWF0ZVNlbGVjdG9yMiBhcyBjcmVhdGVTZWxlY3RvciwgY3JlYXRlU2VyaWFsaXphYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlLCBjcmVhdGVTbGljZSwgY3VycmVudDIgYXMgY3VycmVudCwgZmluZE5vblNlcmlhbGl6YWJsZVZhbHVlLCBmcmVlemUsIGdldERlZmF1bHRNaWRkbGV3YXJlLCBnZXRUeXBlLCBpc0FjdGlvbiwgaXNBY3Rpb25DcmVhdG9yLCBpc0FsbE9mLCBpc0FueU9mLCBpc0FzeW5jVGh1bmtBY3Rpb24sIGlzRHJhZnQ0IGFzIGlzRHJhZnQsIGlzRlNBIGFzIGlzRmx1eFN0YW5kYXJkQWN0aW9uLCBpc0Z1bGZpbGxlZCwgaXNJbW11dGFibGVEZWZhdWx0LCBpc1BlbmRpbmcsIGlzUGxhaW4sIGlzUGxhaW5PYmplY3QsIGlzUmVqZWN0ZWQsIGlzUmVqZWN0ZWRXaXRoVmFsdWUsIG1pbmlTZXJpYWxpemVFcnJvciwgbmFub2lkLCBvcmlnaW5hbCwgcHJlcGFyZUF1dG9CYXRjaGVkLCByZW1vdmVMaXN0ZW5lciwgdW53cmFwUmVzdWx0IH07XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlZHV4LXRvb2xraXQuZXNtLmpzLm1hcCIsICJcbnR5cGUgUmVxUGFyYW1zID0ge1trOnN0cmluZ106c3RyaW5nfXx1bmRlZmluZWQgXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXF1ZXN0KFxuICBwYXRoOiBzdHJpbmcsXG4gIHJlcVBhcmFtczpSZXFQYXJhbXMsXG4gIGluaXQ/OiBSZXF1ZXN0SW5pdCB8IHVuZGVmaW5lZCxcbiAgYXBpVXJsPzogc3RyaW5nXG4pOiBQcm9taXNlPGFueT4ge1xuICBjb25zdCB1cmwgPSAoYXBpVXJsIHx8IHByb2Nlc3MuZW52LlJFQUNUX0FQUF9BUElVUkwpICsgcGF0aDtcbiAgLy9jb25zdCByZXMgPSBhd2FpdCBmZXRjaCh1cmwucmVwbGFjZSgvKFteOl1cXC8pXFwvKy9nLCBcIiQxXCIpLCB7XG4gIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKHVybCArIChyZXFQYXJhbXMgPyAoJz8nICsgbmV3IFVSTFNlYXJjaFBhcmFtcyhPYmplY3QuZW50cmllcyhyZXFQYXJhbXMpKS50b1N0cmluZygpKSA6ICcnKSwge1xuICAgIC4uLihpbml0ID8gaW5pdCA6IHt9KSxcbiAgICAvL2hlYWRlcnM6IHsgLi4uKGluaXQ/LmhlYWRlcnMgfHwge30pLCAuLi5nZXRBdXRoSGVhZGVycygpIH1cbiAgfSk7XG4gIGlmICghcmVzLm9rKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGBGYWlsdXJlIGxvYWRpbmcgJHtyZXMudXJsfSB3aXRoIHN0YXR1cyAke3Jlcy5zdGF0dXN9ICgke3Jlcy5zdGF0dXNUZXh0fSlgO1xuICAgIGNvbnNvbGUuZGlyKG1lc3NhZ2UpO1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IobWVzc2FnZSkpXG4gIH1cbiAgcmV0dXJuIGF3YWl0IHJlcy5qc29uKCk7XG59XG5cbmV4cG9ydCBjbGFzcyBQYWdlPFQ+IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHBhZ2U6IG51bWJlcixcbiAgICBwdWJsaWMgbnVtRWxlbWVudHM6IG51bWJlcixcbiAgICBwdWJsaWMgdG90YWxQYWdlczogbnVtYmVyLFxuICAgIHB1YmxpYyB0b3RhbEVsZW1lbnRzOiBudW1iZXIsXG4gICAgcHVibGljIGVsZW1lbnRzOiBUW10sXG4gICAgcHVibGljIGZhY2V0RmllbGRzVG9Db3VudHM6IE1hcDxzdHJpbmcsIE1hcDxzdHJpbmcsIG51bWJlcj4+XG4gICkge31cblxuICBtYXA8TmV3VHlwZT4oZm46IChUKSA9PiBOZXdUeXBlKSB7XG4gICAgcmV0dXJuIG5ldyBQYWdlPE5ld1R5cGU+KFxuICAgICAgdGhpcy5wYWdlLFxuICAgICAgdGhpcy5udW1FbGVtZW50cyxcbiAgICAgIHRoaXMudG90YWxQYWdlcyxcbiAgICAgIHRoaXMudG90YWxFbGVtZW50cyxcbiAgICAgIHRoaXMuZWxlbWVudHMubWFwKGZuKSxcbiAgICAgIHRoaXMuZmFjZXRGaWVsZHNUb0NvdW50c1xuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFBhZ2luYXRlZDxSZXNUeXBlPihcbiAgcGF0aDogc3RyaW5nLFxuICByZXFQYXJhbXM/OiBSZXFQYXJhbXMsXG4gIGFwaVVybD86IHN0cmluZ1xuKTogUHJvbWlzZTxQYWdlPFJlc1R5cGU+PiB7XG4gIGNvbnN0IHJlcyA9IGF3YWl0IGdldDxhbnk+KHBhdGgsIHJlcVBhcmFtcywgYXBpVXJsKTtcblxuICByZXR1cm4gbmV3IFBhZ2U8UmVzVHlwZT4oXG5cdHJlcy5wYWdlIHx8IDAsXG5cdHJlcy5udW1FbGVtZW50cyB8fCAwLFxuXHRyZXMudG90YWxQYWdlcyB8fCAwLFxuXHRyZXMudG90YWxFbGVtZW50cyB8fCAwLFxuXHRyZXMuZWxlbWVudHMgfHwgW10sXG5cdHJlcy5mYWNldEZpZWxkc1RvQ291bnRzIHx8IG5ldyBNYXAoKVxuICApO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0PFJlc1R5cGU+KHBhdGg6IHN0cmluZywgcmVxUGFyYW1zPzpSZXFQYXJhbXMsIGFwaVVybD86IHN0cmluZyk6IFByb21pc2U8UmVzVHlwZT4ge1xuICByZXR1cm4gcmVxdWVzdChwYXRoLCByZXFQYXJhbXMsIHVuZGVmaW5lZCwgYXBpVXJsKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBvc3Q8UmVxVHlwZSwgUmVzVHlwZSA9IGFueT4oXG4gIHBhdGg6IHN0cmluZyxcbiAgcmVxUGFyYW1zOiBSZXFQYXJhbXMsXG4gIGJvZHk6IFJlcVR5cGVcbik6IFByb21pc2U8UmVzVHlwZT4ge1xuICByZXR1cm4gcmVxdWVzdChwYXRoLCByZXFQYXJhbXMsIHtcbiAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGJvZHkpLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgIFwiY29udGVudC10eXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgIH0sXG4gIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHV0PFJlcVR5cGUsIFJlc1R5cGUgPSBhbnk+KFxuICBwYXRoOiBzdHJpbmcsXG4gIHJlcVBhcmFtczogUmVxUGFyYW1zLFxuICBib2R5OiBSZXFUeXBlXG4pOiBQcm9taXNlPFJlc1R5cGU+IHtcbiAgcmV0dXJuIHJlcXVlc3QocGF0aCwgcmVxUGFyYW1zLCB7XG4gICAgbWV0aG9kOiBcIlBVVFwiLFxuICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGJvZHkpLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgIFwiY29udGVudC10eXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgIH0sXG4gIH0pO1xufVxuIiwgImZ1bmN0aW9uIG5vcm1hbGl6ZSAoc3RyQXJyYXkpIHtcbiAgdmFyIHJlc3VsdEFycmF5ID0gW107XG4gIGlmIChzdHJBcnJheS5sZW5ndGggPT09IDApIHsgcmV0dXJuICcnOyB9XG5cbiAgaWYgKHR5cGVvZiBzdHJBcnJheVswXSAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVcmwgbXVzdCBiZSBhIHN0cmluZy4gUmVjZWl2ZWQgJyArIHN0ckFycmF5WzBdKTtcbiAgfVxuXG4gIC8vIElmIHRoZSBmaXJzdCBwYXJ0IGlzIGEgcGxhaW4gcHJvdG9jb2wsIHdlIGNvbWJpbmUgaXQgd2l0aCB0aGUgbmV4dCBwYXJ0LlxuICBpZiAoc3RyQXJyYXlbMF0ubWF0Y2goL15bXi86XSs6XFwvKiQvKSAmJiBzdHJBcnJheS5sZW5ndGggPiAxKSB7XG4gICAgdmFyIGZpcnN0ID0gc3RyQXJyYXkuc2hpZnQoKTtcbiAgICBzdHJBcnJheVswXSA9IGZpcnN0ICsgc3RyQXJyYXlbMF07XG4gIH1cblxuICAvLyBUaGVyZSBtdXN0IGJlIHR3byBvciB0aHJlZSBzbGFzaGVzIGluIHRoZSBmaWxlIHByb3RvY29sLCB0d28gc2xhc2hlcyBpbiBhbnl0aGluZyBlbHNlLlxuICBpZiAoc3RyQXJyYXlbMF0ubWF0Y2goL15maWxlOlxcL1xcL1xcLy8pKSB7XG4gICAgc3RyQXJyYXlbMF0gPSBzdHJBcnJheVswXS5yZXBsYWNlKC9eKFteLzpdKyk6XFwvKi8sICckMTovLy8nKTtcbiAgfSBlbHNlIHtcbiAgICBzdHJBcnJheVswXSA9IHN0ckFycmF5WzBdLnJlcGxhY2UoL14oW14vOl0rKTpcXC8qLywgJyQxOi8vJyk7XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ckFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGNvbXBvbmVudCA9IHN0ckFycmF5W2ldO1xuXG4gICAgaWYgKHR5cGVvZiBjb21wb25lbnQgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVcmwgbXVzdCBiZSBhIHN0cmluZy4gUmVjZWl2ZWQgJyArIGNvbXBvbmVudCk7XG4gICAgfVxuXG4gICAgaWYgKGNvbXBvbmVudCA9PT0gJycpIHsgY29udGludWU7IH1cblxuICAgIGlmIChpID4gMCkge1xuICAgICAgLy8gUmVtb3ZpbmcgdGhlIHN0YXJ0aW5nIHNsYXNoZXMgZm9yIGVhY2ggY29tcG9uZW50IGJ1dCB0aGUgZmlyc3QuXG4gICAgICBjb21wb25lbnQgPSBjb21wb25lbnQucmVwbGFjZSgvXltcXC9dKy8sICcnKTtcbiAgICB9XG4gICAgaWYgKGkgPCBzdHJBcnJheS5sZW5ndGggLSAxKSB7XG4gICAgICAvLyBSZW1vdmluZyB0aGUgZW5kaW5nIHNsYXNoZXMgZm9yIGVhY2ggY29tcG9uZW50IGJ1dCB0aGUgbGFzdC5cbiAgICAgIGNvbXBvbmVudCA9IGNvbXBvbmVudC5yZXBsYWNlKC9bXFwvXSskLywgJycpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBGb3IgdGhlIGxhc3QgY29tcG9uZW50IHdlIHdpbGwgY29tYmluZSBtdWx0aXBsZSBzbGFzaGVzIHRvIGEgc2luZ2xlIG9uZS5cbiAgICAgIGNvbXBvbmVudCA9IGNvbXBvbmVudC5yZXBsYWNlKC9bXFwvXSskLywgJy8nKTtcbiAgICB9XG5cbiAgICByZXN1bHRBcnJheS5wdXNoKGNvbXBvbmVudCk7XG5cbiAgfVxuXG4gIHZhciBzdHIgPSByZXN1bHRBcnJheS5qb2luKCcvJyk7XG4gIC8vIEVhY2ggaW5wdXQgY29tcG9uZW50IGlzIG5vdyBzZXBhcmF0ZWQgYnkgYSBzaW5nbGUgc2xhc2ggZXhjZXB0IHRoZSBwb3NzaWJsZSBmaXJzdCBwbGFpbiBwcm90b2NvbCBwYXJ0LlxuXG4gIC8vIHJlbW92ZSB0cmFpbGluZyBzbGFzaCBiZWZvcmUgcGFyYW1ldGVycyBvciBoYXNoXG4gIHN0ciA9IHN0ci5yZXBsYWNlKC9cXC8oXFw/fCZ8I1teIV0pL2csICckMScpO1xuXG4gIC8vIHJlcGxhY2UgPyBpbiBwYXJhbWV0ZXJzIHdpdGggJlxuICB2YXIgcGFydHMgPSBzdHIuc3BsaXQoJz8nKTtcbiAgc3RyID0gcGFydHMuc2hpZnQoKSArIChwYXJ0cy5sZW5ndGggPiAwID8gJz8nOiAnJykgKyBwYXJ0cy5qb2luKCcmJyk7XG5cbiAgcmV0dXJuIHN0cjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXJsSm9pbigpIHtcbiAgdmFyIGlucHV0O1xuXG4gIGlmICh0eXBlb2YgYXJndW1lbnRzWzBdID09PSAnb2JqZWN0Jykge1xuICAgIGlucHV0ID0gYXJndW1lbnRzWzBdO1xuICB9IGVsc2Uge1xuICAgIGlucHV0ID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICB9XG5cbiAgcmV0dXJuIG5vcm1hbGl6ZShpbnB1dCk7XG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlQXN5bmNUaHVuaywgY3JlYXRlU2xpY2UsIFBheWxvYWRBY3Rpb24gfSBmcm9tIFwiQHJlZHV4anMvdG9vbGtpdFwiO1xuaW1wb3J0IHsgZ2V0IH0gZnJvbSBcIi4uLy4uL2FwcC9hcGlcIjtcbmltcG9ydCB1cmxKb2luIGZyb20gXCJ1cmwtam9pblwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEhvbWVTdGF0ZSB7XG4gIGJhbm5lclRleHQ6IHN0cmluZztcbiAgc3RhdHM6IFN0YXRzIHwgdW5kZWZpbmVkO1xufVxuZXhwb3J0IGludGVyZmFjZSBTdGF0cyB7XG4gIG51bWJlck9mT250b2xvZ2llczogbnVtYmVyO1xuICBudW1iZXJPZkNsYXNzZXM6IG51bWJlcjtcbiAgbnVtYmVyT2ZQcm9wZXJ0aWVzOiBudW1iZXI7XG4gIG51bWJlck9mSW5kaXZpZHVhbHM6IG51bWJlcjtcbiAgbGFzdE1vZGlmaWVkOiBzdHJpbmc7XG59XG5jb25zdCBpbml0aWFsU3RhdGU6IEhvbWVTdGF0ZSA9IHtcbiAgc3RhdHM6IHVuZGVmaW5lZCxcbiAgYmFubmVyVGV4dDogXCJcIixcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTdGF0cyA9IGNyZWF0ZUFzeW5jVGh1bmsoXG4gIFwiaG9tZV9zdGF0c1wiLFxuICBhc3luYyAoYXJnLCB7IHJlamVjdFdpdGhWYWx1ZSB9KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBnZXQ8U3RhdHM+KGBhcGkvdjIvc3RhdHNgKTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICByZXR1cm4gcmVqZWN0V2l0aFZhbHVlKGVycm9yLm1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuKTtcbmV4cG9ydCBjb25zdCBnZXRCYW5uZXJUZXh0ID0gY3JlYXRlQXN5bmNUaHVuayhcbiAgXCJob21lX2Jhbm5lclwiLFxuICBhc3luYyAoYXJnLCB7IHJlamVjdFdpdGhWYWx1ZSB9KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKHVybEpvaW4ocHJvY2Vzcy5lbnYuUFVCTElDX1VSTCEsIFwiYmFubmVyLnR4dFwiKSk7XG4gICAgICByZXR1cm4gcmVzLnRleHQoKTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICByZXR1cm4gcmVqZWN0V2l0aFZhbHVlKGVycm9yLm1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuKTtcblxuY29uc3QgaG9tZVNsaWNlID0gY3JlYXRlU2xpY2Uoe1xuICBuYW1lOiBcImhvbWVcIixcbiAgaW5pdGlhbFN0YXRlLFxuICByZWR1Y2Vyczoge30sXG4gIGV4dHJhUmVkdWNlcnM6IChidWlsZGVyKSA9PiB7XG4gICAgYnVpbGRlci5hZGRDYXNlKFxuICAgICAgZ2V0U3RhdHMuZnVsZmlsbGVkLFxuICAgICAgKHN0YXRlOiBIb21lU3RhdGUsIGFjdGlvbjogUGF5bG9hZEFjdGlvbjxTdGF0cz4pID0+IHtcbiAgICAgICAgc3RhdGUuc3RhdHMgPSBhY3Rpb24ucGF5bG9hZDtcbiAgICAgIH1cbiAgICApO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShnZXRTdGF0cy5yZWplY3RlZCwgKHN0YXRlOiBIb21lU3RhdGUpID0+IHtcbiAgICAgIHN0YXRlLnN0YXRzID0gaW5pdGlhbFN0YXRlLnN0YXRzO1xuICAgIH0pO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShcbiAgICAgIGdldEJhbm5lclRleHQuZnVsZmlsbGVkLFxuICAgICAgKHN0YXRlOiBIb21lU3RhdGUsIGFjdGlvbjogYW55KSA9PiB7XG4gICAgICAgIHN0YXRlLmJhbm5lclRleHQgPSBhY3Rpb24ucGF5bG9hZDtcbiAgICAgIH1cbiAgICApO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShnZXRCYW5uZXJUZXh0LnJlamVjdGVkLCAoc3RhdGU6IEhvbWVTdGF0ZSkgPT4ge1xuICAgICAgc3RhdGUuYmFubmVyVGV4dCA9IGluaXRpYWxTdGF0ZS5iYW5uZXJUZXh0O1xuICAgIH0pO1xuICB9LFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGhvbWVTbGljZS5yZWR1Y2VyO1xuIiwgImltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgQ2xhc3MgZnJvbSBcIi4uL21vZGVsL0NsYXNzXCI7XG5pbXBvcnQgRW50aXR5IGZyb20gXCIuLi9tb2RlbC9FbnRpdHlcIjtcbmltcG9ydCBJbmRpdmlkdWFsIGZyb20gXCIuLi9tb2RlbC9JbmRpdmlkdWFsXCI7XG5pbXBvcnQgUHJvcGVydHkgZnJvbSBcIi4uL21vZGVsL1Byb3BlcnR5XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBhc0FycmF5PFQ+KG9iajogVCB8IFRbXSk6IFRbXSB7XG4gIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICByZXR1cm4gb2JqO1xuICB9IGVsc2UgaWYgKG9iaikge1xuICAgIHJldHVybiBbb2JqXTtcbiAgfVxuICByZXR1cm4gW107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByYW5kb21TdHJpbmcoKSB7XG4gIHJldHVybiAoTWF0aC5yYW5kb20oKSAqIE1hdGgucG93KDIsIDU0KSkudG9TdHJpbmcoMzYpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc29ydEJ5S2V5cyhhOiBhbnksIGI6IGFueSkge1xuICBjb25zdCBrZXlBID0gYS5rZXkudG9VcHBlckNhc2UoKTtcbiAgY29uc3Qga2V5QiA9IGIua2V5LnRvVXBwZXJDYXNlKCk7XG4gIHJldHVybiBrZXlBID09PSBrZXlCID8gMCA6IGtleUEgPiBrZXlCID8gMSA6IC0xO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29weVRvQ2xpcGJvYXJkKHRleHQ6IHN0cmluZykge1xuICBpZiAoXCJjbGlwYm9hcmRcIiBpbiBuYXZpZ2F0b3IpIHtcbiAgICByZXR1cm4gYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGV4dCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmV4ZWNDb21tYW5kKFwiY29weVwiLCB0cnVlLCB0ZXh0KTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlUHJldmlvdXModmFsdWU6IGFueSkge1xuICBjb25zdCByZWYgPSB1c2VSZWYoKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICByZWYuY3VycmVudCA9IHZhbHVlO1xuICB9LCBbdmFsdWVdKTtcbiAgcmV0dXJuIHJlZi5jdXJyZW50O1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRoaW5nRnJvbUpzb25Qcm9wZXJ0aWVzKHByb3BlcnRpZXM6IGFueSk6IEVudGl0eSB7XG4gIGNvbnN0IHR5cGVzID0gcHJvcGVydGllc1tcInR5cGVcIl0gfHwgW107XG4gIGlmICh0eXBlcy5pbmRleE9mKFwiY2xhc3NcIikgIT09IC0xKSByZXR1cm4gbmV3IENsYXNzKHByb3BlcnRpZXMpO1xuICBpZiAodHlwZXMuaW5kZXhPZihcInByb3BlcnR5XCIpICE9PSAtMSkgcmV0dXJuIG5ldyBQcm9wZXJ0eShwcm9wZXJ0aWVzKTtcbiAgaWYgKHR5cGVzLmluZGV4T2YoXCJpbmRpdmlkdWFsXCIpICE9PSAtMSkgcmV0dXJuIG5ldyBJbmRpdmlkdWFsKHByb3BlcnRpZXMpO1xuICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIGVudGl0eSB0eXBlOiBcIiArIEpTT04uc3RyaW5naWZ5KHByb3BlcnRpZXMpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hcFRvQXBpUGFyYW1zKHNlYXJjaFBhcmFtczogVVJMU2VhcmNoUGFyYW1zKSB7XG4gIGNvbnN0IHNlYXJjaFBhcmFtc0NvcHkgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gIHNlYXJjaFBhcmFtcy5mb3JFYWNoKCh2YWx1ZTogc3RyaW5nLCBrZXk6IHN0cmluZykgPT4ge1xuICAgIGxldCBuZXdLZXkgPSBrZXkuaW5jbHVkZXMoXCJfXCIpID8gdG9DYW1lbChrZXkpIDoga2V5O1xuICAgIC8vIHNwZWNpYWwgY2FzZXNcbiAgICBpZiAobmV3S2V5ID09PSBcIm9ib0lkXCIpIG5ld0tleSA9IFwiY3VyaWVcIjtcbiAgICBzZWFyY2hQYXJhbXNDb3B5LmFwcGVuZChuZXdLZXksIHZhbHVlKTtcbiAgfSk7XG4gIHJldHVybiBzZWFyY2hQYXJhbXNDb3B5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9DYW1lbChzdHI6IHN0cmluZykge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoLyhbLV9dW2Etel0pL2dpLCAoJDEpID0+IHtcbiAgICByZXR1cm4gJDEudG9VcHBlckNhc2UoKS5yZXBsYWNlKFwiLVwiLCBcIlwiKS5yZXBsYWNlKFwiX1wiLCBcIlwiKTtcbiAgfSk7XG59XG4iLCAiZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVpZmllZDxUPiB7XG4gIHZhbHVlOiBUO1xuICBheGlvbXM6IGFueVtdIHwgbnVsbDtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHZhbHVlOiBULCBheGlvbXM6IGFueVtdIHwgbnVsbCkge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLmF4aW9tcyA9IGF4aW9tcztcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUpzb248VD4oanNvbk5vZGU6IGFueSk6IFJlaWZpZWQ8VD5bXSB7XG4gICAgaWYgKCFqc29uTm9kZSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheShqc29uTm9kZSkpIHtcbiAgICAgIGpzb25Ob2RlID0gW2pzb25Ob2RlXTtcbiAgICB9XG5cbiAgICByZXR1cm4ganNvbk5vZGUubWFwKCh2YWx1ZTogYW55KSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICBBcnJheS5pc0FycmF5KHZhbHVlLnR5cGUpICYmXG4gICAgICAgIHZhbHVlLnR5cGUuaW5kZXhPZihcInJlaWZpY2F0aW9uXCIpICE9PSAtMVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVpZmllZDxUPih2YWx1ZS52YWx1ZSwgdmFsdWUuYXhpb21zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVpZmllZDxUPih2YWx1ZSwgbnVsbCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBoYXNNZXRhZGF0YSgpIHtcbiAgICByZXR1cm4gdGhpcy5heGlvbXMgIT0gbnVsbDtcbiAgfVxuXG4gIC8vIENvbWJpbmUgYWxsIG9mIHRoZSBheGlvbXMgaW50byBvbmUgbWV0YWRhdGEgb2JqZWN0IGZvciB0aGUgcHJvcGVydHkuXG4gIC8vXG4gIC8vIG5vdGU6IFRoaXMgbWVhbnMgdGhhdCBpZiB0aGUgc2FtZSBwcm9wZXJ0eSBpcyByZWlmaWVkIG11bHRpcGxlIHRpbWVzIHdpdGhcbiAgLy8gZGlmZmVyZW50IG1ldGFkYXRhLCBpdCB3aWxsIGFsbCBiZSBjb21iaW5lZCBpbiB0aGUgVUkuIFdoZXRoZXIgdGhpcyBpc1xuICAvLyB0aGUgZGVzaXJlZCBiZWhhdmlvdXIgaXMgVEJELlxuICAvL1xuICBnZXRNZXRhZGF0YSgpOiBhbnkgfCBudWxsIHtcbiAgICBpZiAoIXRoaXMuYXhpb21zKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBsZXQgcHJvcGVydGllczogYW55ID0ge307XG5cbiAgICBmb3IgKGxldCBheGlvbSBvZiB0aGlzLmF4aW9tcykge1xuICAgICAgZm9yIChsZXQgayBvZiBPYmplY3Qua2V5cyhheGlvbSkpIHtcbiAgICAgICAgbGV0IHYgPSBheGlvbVtrXTtcbiAgICAgICAgbGV0IGV4aXN0aW5nOiBhbnlbXSB8IHVuZGVmaW5lZCA9IHByb3BlcnRpZXNba107XG4gICAgICAgIGlmIChleGlzdGluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZXhpc3RpbmcucHVzaCh2KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcm9wZXJ0aWVzW2tdID0gW3ZdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb3BlcnRpZXM7XG4gIH1cbn1cbiIsICJpbXBvcnQgUmVpZmllZCBmcm9tIFwiLi9SZWlmaWVkXCJcblxuZXhwb3J0IGludGVyZmFjZSBMaW5rZWRFbnRpdHkge1xuXHRkZWZpbmVkQnk/OnN0cmluZ1tdXG5cdGlyaT86c3RyaW5nXG5cdHVybD86c3RyaW5nXG5cdG51bUFwcGVhcnNJbjpzdHJpbmdcblx0aGFzTG9jYWxEZWZpbml0aW9uOmJvb2xlYW5cblx0bGFiZWw6c3RyaW5nfHN0cmluZ1tdXG5cdHR5cGU6c3RyaW5nW11cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGlua2VkRW50aXRpZXMge1xuXG5cdGxpbmtlZEVudGl0aWVzOnsgW2tleTpzdHJpbmddOkxpbmtlZEVudGl0eSB9XG5cblx0Y29uc3RydWN0b3IobGlua2VkRW50aXRpZXM6YW55KSB7XG5cdFx0aWYobGlua2VkRW50aXRpZXMpXG5cdFx0XHR0aGlzLmxpbmtlZEVudGl0aWVzID0gey4uLmxpbmtlZEVudGl0aWVzfVxuXHRcdGVsc2Vcblx0XHRcdHRoaXMubGlua2VkRW50aXRpZXMgPSB7fVxuXHR9XG5cblx0bWVyZ2VXaXRoKGxpbmtlZEVudGl0aWVzOmFueSk6TGlua2VkRW50aXRpZXMge1xuXHRcdGlmKGxpbmtlZEVudGl0aWVzKVxuXHRcdFx0cmV0dXJuIG5ldyBMaW5rZWRFbnRpdGllcyh7IC4uLnRoaXMubGlua2VkRW50aXRpZXMsIGxpbmtlZEVudGl0aWVzIH0pXG5cdFx0ZWxzZVxuXHRcdFx0cmV0dXJuIG5ldyBMaW5rZWRFbnRpdGllcyh7IC4uLnRoaXMubGlua2VkRW50aXRpZXMgfSlcblx0fVxuXG5cdGdldExhYmVsRm9ySXJpKGlyaTpzdHJpbmcpOnN0cmluZ3x1bmRlZmluZWQge1xuXG5cdFx0bGV0IGxpbmtlZEVudGl0eSA9IHRoaXMubGlua2VkRW50aXRpZXNbaXJpXVxuXG5cdFx0aWYobGlua2VkRW50aXR5KSB7XG5cdFx0XHRsZXQgbGFiZWwgPSBSZWlmaWVkLmZyb21Kc29uPHN0cmluZz4oIGxpbmtlZEVudGl0eS5sYWJlbCApXG5cdFx0XHRpZihsYWJlbCAmJiBsYWJlbC5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdHJldHVybiBsYWJlbFswXS52YWx1ZVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGdldChpcmk6c3RyaW5nKTpMaW5rZWRFbnRpdHl8dW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGhpcy5saW5rZWRFbnRpdGllc1tpcmldXG5cdH1cbn1cbiIsICJpbXBvcnQgeyBhc0FycmF5IH0gZnJvbSBcIi4uL2FwcC91dGlsXCI7XG5pbXBvcnQgTGlua2VkRW50aXRpZXMgZnJvbSBcIi4vTGlua2VkRW50aXRpZXNcIjtcbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuL1JlaWZpZWRcIjtcblxuZXhwb3J0IGRlZmF1bHQgYWJzdHJhY3QgY2xhc3MgVGhpbmcge1xuICBwcm9wZXJ0aWVzOiBhbnk7XG5cbiAgY29uc3RydWN0b3IocHJvcGVydGllczogYW55KSB7XG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcbiAgfVxuXG4gIGdldElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImlkXCJdO1xuICB9XG5cbiAgZ2V0SXJpKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImlyaVwiXTtcbiAgfVxuXG4gIGdldFR5cGUoKTogXCJvbnRvbG9neVwiIHwgXCJjbGFzc1wiIHwgXCJwcm9wZXJ0eVwiIHwgXCJpbmRpdmlkdWFsXCIge1xuICAgIGNvbnN0IHR5cGVzID0gdGhpcy5wcm9wZXJ0aWVzW1widHlwZVwiXSBhcyBzdHJpbmdbXTtcblxuICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgICAgaWYgKFxuICAgICAgICBbXCJvbnRvbG9neVwiLCBcImNsYXNzXCIsIFwicHJvcGVydHlcIiwgXCJpbmRpdmlkdWFsXCJdLmluZGV4T2YodHlwZSkgIT09IC0xXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIHR5cGUgYXMgYW55O1xuICAgICAgfVxuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihcInVua25vd24gdHlwZVwiKTtcbiAgfVxuXG4gIGdldFR5cGVQbHVyYWwoKTogXCJvbnRvbG9naWVzXCIgfCBcImNsYXNzZXNcIiB8IFwicHJvcGVydGllc1wiIHwgXCJpbmRpdmlkdWFsc1wiIHtcbiAgICBjb25zdCB0eXBlID0gdGhpcy5nZXRUeXBlKCk7XG5cbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgXCJvbnRvbG9neVwiOlxuICAgICAgICByZXR1cm4gXCJvbnRvbG9naWVzXCI7XG4gICAgICBjYXNlIFwiY2xhc3NcIjpcbiAgICAgICAgcmV0dXJuIFwiY2xhc3Nlc1wiO1xuICAgICAgY2FzZSBcInByb3BlcnR5XCI6XG4gICAgICAgIHJldHVybiBcInByb3BlcnRpZXNcIjtcbiAgICAgIGNhc2UgXCJpbmRpdmlkdWFsXCI6XG4gICAgICAgIHJldHVybiBcImluZGl2aWR1YWxzXCI7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIHR5cGVcIik7XG4gICAgfVxuICB9XG5cbiAgZ2V0UmRmVHlwZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcbiAgICAgIFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zI3R5cGVcIlxuICAgIF0pXG4gIH1cblxuICBnZXROYW1lKCk6IHN0cmluZyB7XG5cdHJldHVybiB0aGlzLmdldE5hbWVzKClbMF07XG4gIH1cblxuICBnZXROYW1lcygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgbGFiZWxzID0gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wibGFiZWxcIl1cbiAgICApO1xuICAgIGlmIChsYWJlbHMgJiYgbGFiZWxzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBsYWJlbHMubWFwKGxhYmVsID0+IGxhYmVsLnZhbHVlKVxuICAgIH1cbiAgICByZXR1cm4gW3RoaXMuZ2V0SXJpKCldO1xuICB9XG5cbiAgZ2V0RGVzY3JpcHRpb24oKTogc3RyaW5nIHtcbiAgICBjb25zdCBkZWZpbml0aW9uID0gUmVpZmllZC5mcm9tSnNvbjxhbnk+KHRoaXMucHJvcGVydGllc1tcImRlZmluaXRpb25cIl0pO1xuICAgIGlmIChkZWZpbml0aW9uICYmIGRlZmluaXRpb24ubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIGRlZmluaXRpb24ubWFwKChkZWYpID0+IGRlZi52YWx1ZSB8fCBcIlwiKS5qb2luKFwiIFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICBnZXRPbnRvbG9neUlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcIm9udG9sb2d5SWRcIl07XG4gIH1cblxuICBnZXRMYWJlbEZvcklyaShpZDogc3RyaW5nKSB7XG4gICAgY29uc3QgbGlua2VkRW50aXRpZXMgPSB0aGlzLnByb3BlcnRpZXNbXCJsaW5rZWRFbnRpdGllc1wiXTtcbiAgICBpZiAobGlua2VkRW50aXRpZXMpIHtcbiAgICAgIGNvbnN0IGxhYmVsOlJlaWZpZWQ8c3RyaW5nPltdID0gUmVpZmllZC5mcm9tSnNvbjxzdHJpbmc+KCBsaW5rZWRFbnRpdGllc1tpZF0/LmxhYmVsICk7XG4gICAgICByZXR1cm4gbGFiZWxbMF0/LnZhbHVlIHx8IGlkXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBpZDtcbiAgICB9XG4gIH1cblxuICBnZXRBbm5vdGF0aW9uQnlJZChpZDogc3RyaW5nKTpSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb24oYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbaWRdKSlcbiAgfVxuXG4gIGdldExpbmtlZEVudGl0aWVzKCk6IExpbmtlZEVudGl0aWVzIHtcbiAgICByZXR1cm4gbmV3IExpbmtlZEVudGl0aWVzKHRoaXMucHJvcGVydGllc1tcImxpbmtlZEVudGl0aWVzXCJdIHx8IHt9KTtcbiAgfVxufVxuIiwgImltcG9ydCB7IGFzQXJyYXkgfSBmcm9tIFwiLi4vYXBwL3V0aWxcIjtcbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuL1JlaWZpZWRcIjtcbmltcG9ydCBUaGluZyBmcm9tIFwiLi9UaGluZ1wiO1xuXG5leHBvcnQgZGVmYXVsdCBhYnN0cmFjdCBjbGFzcyBFbnRpdHkgZXh0ZW5kcyBUaGluZyB7XG4gIGFic3RyYWN0IGdldFBhcmVudHMoKTogUmVpZmllZDxhbnk+W107XG4gIGFic3RyYWN0IGdldFN1cGVyRW50aXRpZXMoKTogUmVpZmllZDxhbnk+W107XG4gIGFic3RyYWN0IGdldEVxdWl2YWxlbnRzKCk6IFJlaWZpZWQ8YW55PltdO1xuXG4gIGlzQ2Fub25pY2FsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJpc0RlZmluaW5nT250b2xvZ3lcIl0gPT09IHRydWU7XG4gIH1cblxuICBpc0RlcHJlY2F0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2RlcHJlY2F0ZWRcIl0gPT09IFwidHJ1ZVwiXG4gICAgKTtcbiAgfVxuXG4gIGdldERlcHJlY2F0aW9uVmVyc2lvbigpOiBzdHJpbmcge1xuICAgIC8vIG9ubHkgc3VwcG9ydHMgRUZPIGZvciBub3dcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy5lYmkuYWMudWsvZWZvL29ic29sZXRlZF9pbl92ZXJzaW9uXCJdO1xuICB9XG5cbiAgZ2V0RGVwcmVjYXRpb25SZWFzb24oKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vcHVybC5vYm9saWJyYXJ5Lm9yZy9vYm8vSUFPXzAwMDAyMzFcIl1cbiAgICApLmNvbmNhdChcbiAgICAgIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy5lYmkuYWMudWsvZWZvL3JlYXNvbl9mb3Jfb2Jzb2xlc2NlbmNlXCJdXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGdldERlcHJlY2F0aW9uUmVwbGFjZW1lbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3B1cmwub2JvbGlicmFyeS5vcmcvb2JvL0lBT18wMTAwMDAxXCJdO1xuICB9XG5cbiAgZ2V0UmVsYXRlZEZyb20oKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4odGhpcy5wcm9wZXJ0aWVzW1wicmVsYXRlZEZyb21cIl0pO1xuICB9XG5cbiAgZ2V0RGVzY3JpcHRpb25Bc0FycmF5KCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KHRoaXMucHJvcGVydGllc1tcImRlZmluaXRpb25cIl0pO1xuICB9XG5cbiAgaGFzRGlyZWN0Q2hpbGRyZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImhhc0RpcmVjdENoaWxkcmVuXCJdID09PSBcInRydWVcIjtcbiAgfVxuXG4gIGhhc0hpZXJhcmNoaWNhbENoaWxkcmVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJoYXNIaWVyYXJjaGljYWxDaGlsZHJlblwiXSA9PT0gXCJ0cnVlXCI7XG4gIH1cblxuICBoYXNDaGlsZHJlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXNEaXJlY3RDaGlsZHJlbigpIHx8IHRoaXMuaGFzSGllcmFyY2hpY2FsQ2hpbGRyZW4oKTtcbiAgfVxuXG4gIGdldEFuY2VzdG9ySXJpcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiYW5jZXN0b3JcIl0pO1xuICB9XG5cbiAgZ2V0SGllcmFyY2hpY2FsQW5jZXN0b3JJcmlzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJoaWVyYXJjaGljYWxBbmNlc3RvclwiXSk7XG4gIH1cblxuICBnZXRTeW5vbnltcygpIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KHRoaXMucHJvcGVydGllc1tcInN5bm9ueW1cIl0pO1xuICB9XG5cbiAgZ2V0QXBwZWFyc0luKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gKHRoaXMucHJvcGVydGllc1tcImFwcGVhcnNJblwiXSB8fCBbXSkgYXMgc3RyaW5nW107XG4gIH1cblxuICBnZXREZWZpbmVkQnkoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiAodGhpcy5wcm9wZXJ0aWVzW1wiZGVmaW5lZEJ5XCJdIHx8IFtdKSBhcyBzdHJpbmdbXTtcbiAgfVxuXG4gIGdldFNob3J0Rm9ybSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJjdXJpZVwiXSB8fCB0aGlzLnByb3BlcnRpZXNbXCJzaG9ydEZvcm1cIl07XG4gIH1cblxuICBnZXREZXBpY3RlZEJ5KCk6IFJlaWZpZWQ8c3RyaW5nPltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxzdHJpbmc+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3htbG5zLmNvbS9mb2FmLzAuMS9kZXBpY3RlZF9ieVwiXVxuICAgICk7XG4gIH1cblxuICBnZXRBbm5vdGF0aW9uUHJlZGljYXRlcygpOiBzdHJpbmdbXSB7XG4gICAgbGV0IGRlZmluaXRpb25Qcm9wZXJ0aWVzID0gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJkZWZpbml0aW9uUHJvcGVydHlcIl0pO1xuICAgIGxldCBzeW5vbnltUHJvcGVydGllcyA9IGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wic3lub255bVByb3BlcnR5XCJdKTtcbiAgICBsZXQgaGllcmFyY2hpY2FsUHJvcGVydGllcyA9IGFzQXJyYXkoXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJoaWVyYXJjaGljYWxQcm9wZXJ0eVwiXVxuICAgICk7XG4gICAgbGV0IGFubm90YXRpb25QcmVkaWNhdGVzID0gbmV3IFNldCgpO1xuXG4gICAgZm9yIChsZXQgcHJlZGljYXRlIG9mIE9iamVjdC5rZXlzKHRoaXMucHJvcGVydGllcykpIHtcbiAgICAgIC8vIHByb3BlcnRpZXMgd2l0aG91dCBhbiBJUkkgYXJlIHRoaW5ncyB0aGF0IHdlcmUgYWRkZWQgYnkgcmRmMmpzb24gc28gc2hvdWxkIG5vdFxuICAgICAgLy8gYmUgaW5jbHVkZWQgYXMgYW5ub3RhdGlvbnNcbiAgICAgIGlmIChwcmVkaWNhdGUuaW5kZXhPZihcIjovL1wiKSA9PT0gLTEpIGNvbnRpbnVlO1xuXG4gICAgICAvLyB0aGlzIGlzIGhhbmRsZWQgZXhwbGljaXRseSBpbiBFbnRpdHlQYWdlXG4gICAgICBpZiAocHJlZGljYXRlLnN0YXJ0c1dpdGgoXCJuZWdhdGl2ZVByb3BlcnR5QXNzZXJ0aW9uK1wiKSkgY29udGludWU7XG5cbiAgICAgIC8vIHRoaXMgaXMgaGFuZGxlZCBleHBsaWNpdGx5IGluIEVudGl0eVBhZ2VcbiAgICAgIGlmIChwcmVkaWNhdGUgPT09IFwiaHR0cDovL3htbG5zLmNvbS9mb2FmLzAuMS9kZXBpY3RlZF9ieVwiKSBjb250aW51ZTtcblxuICAgICAgbGV0IGxpbmtlZEVudGl0eSA9IHRoaXMuZ2V0TGlua2VkRW50aXRpZXMoKS5nZXQocHJlZGljYXRlKVxuICAgICAgaWYgKGxpbmtlZEVudGl0eSAhPSB1bmRlZmluZWQgJiYgbGlua2VkRW50aXR5LnR5cGUuaW5kZXhPZihcIm9iamVjdFByb3BlcnR5XCIpICE9PSAtMSkgY29udGludWU7XG4gICAgICBpZiAobGlua2VkRW50aXR5ICE9IHVuZGVmaW5lZCAmJiBsaW5rZWRFbnRpdHkudHlwZS5pbmRleE9mKFwiZGF0YVByb3BlcnR5XCIpICE9PSAtMSkgY29udGludWU7XG5cbiAgICAgIC8vIElmIHRoZSB2YWx1ZSB3YXMgYWxyZWFkeSBpbnRlcnByZXRlZCBhcyBkZWZpbml0aW9uL3N5bm9ueW0vaGllcmFyY2hpY2FsLCBkb1xuICAgICAgLy8gbm90IGluY2x1ZGUgaXQgYXMgYW4gYW5ub3RhdGlvblxuICAgICAgaWYgKFxuICAgICAgICBkZWZpbml0aW9uUHJvcGVydGllcy5pbmRleE9mKHByZWRpY2F0ZSkgIT09IC0xIHx8XG4gICAgICAgIHN5bm9ueW1Qcm9wZXJ0aWVzLmluZGV4T2YocHJlZGljYXRlKSAhPT0gLTEgfHxcbiAgICAgICAgaGllcmFyY2hpY2FsUHJvcGVydGllcy5pbmRleE9mKHByZWRpY2F0ZSkgIT09IC0xXG4gICAgICApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIGFueXRoaW5nIGluIHRoZSByZGYsIHJkZnMsIG93bCBuYW1lc3BhY2VzIGFyZW4ndCBkaXNwbGF5ZWQgaW4gdGhlIGFubm90YXRpb25zIHNlY3Rpb24uLi5cbiAgICAgIGlmIChcbiAgICAgICAgcHJlZGljYXRlLnN0YXJ0c1dpdGgoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjXCIpIHx8XG4gICAgICAgIHByZWRpY2F0ZS5zdGFydHNXaXRoKFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zI1wiKSB8fFxuICAgICAgICBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI1wiKVxuICAgICAgKSB7XG4gICAgICAgIC8vIC4uLmFwYXJ0IGZyb20gdGhlc2Ugb25lc1xuICAgICAgICBpZiAoXG4gICAgICAgICAgcHJlZGljYXRlICE9PSBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNjb21tZW50XCIgJiZcbiAgICAgICAgICBwcmVkaWNhdGUgIT09IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI3NlZUFsc29cIiAmJlxuICAgICAgICAgIC8vIHByZWRpY2F0ZSAhPT0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNoYXNLZXlcIiAmJlxuICAgICAgICAgIHByZWRpY2F0ZSAhPT0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNkaXNqb2ludFVuaW9uT2ZcIlxuICAgICAgICApIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyB3aGlsZSBpbiBnZW5lcmFsIG9ib0luT3dsIG5hbWVzcGFjZSBwcm9wZXJ0aWVzIGFyZSBhbm5vdGF0aW9ucywgc29tZVxuICAgICAgLy8gb2YgdGhlbSB3ZSBkb24ndCB3YW50IHRvIGRpc3BsYXlcbiAgICAgIC8vXG4gICAgICBpZiAoXG4gICAgICAgIC8vcHJlZGljYXRlID09PSBcImh0dHA6Ly93d3cuZ2VuZW9udG9sb2d5Lm9yZy9mb3JtYXRzL29ib0luT3dsI2luU3Vic2V0XCJcbiAgICAgICAgcHJlZGljYXRlID09PSBcImh0dHA6Ly93d3cuZ2VuZW9udG9sb2d5Lm9yZy9mb3JtYXRzL29ib0luT3dsI2lkXCJcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgYW5ub3RhdGlvblByZWRpY2F0ZXMuYWRkKHByZWRpY2F0ZSk7XG4gICAgfVxuXG4gICAgLy8gY29uc29sZS5sb2coXCJBUHNcIik7XG4gICAgLy8gY29uc29sZS5kaXIoQXJyYXkuZnJvbShhbm5vdGF0aW9uUHJlZGljYXRlcykpO1xuXG4gICAgcmV0dXJuIEFycmF5LmZyb20oYW5ub3RhdGlvblByZWRpY2F0ZXMpIGFzIHN0cmluZ1tdO1xuICB9XG5cbiAgZ2V0TnVtSGllcmFyY2hpY2FsRGVzY2VuZGFudHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wibnVtSGllcmFyY2hpY2FsRGVzY2VuZGFudHNcIl1cbiAgICAgID8gcGFyc2VJbnQodGhpcy5wcm9wZXJ0aWVzW1wibnVtSGllcmFyY2hpY2FsRGVzY2VuZGFudHNcIl0pXG4gICAgICA6IDA7XG4gIH1cblxuICBnZXROdW1EZXNjZW5kYW50cygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJudW1EZXNjZW5kYW50c1wiXVxuICAgICAgPyBwYXJzZUludCh0aGlzLnByb3BlcnRpZXNbXCJudW1EZXNjZW5kYW50c1wiXSlcbiAgICAgIDogMDtcbiAgfVxuXG4gIGdldEhpZXJhcmNoaWNhbFBhcmVudFJlaWZpY2F0aW9uQXhpb21zKHBhcmVudElyaTogc3RyaW5nKTogYW55IHtcbiAgICBsZXQgaGllcmFyY2hpY2FsUGFyZW50cyA9IFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImhpZXJhcmNoaWNhbFBhcmVudFwiXVxuICAgICk7XG5cbiAgICBmb3IgKGxldCBwIG9mIGhpZXJhcmNoaWNhbFBhcmVudHMpIHtcbiAgICAgIGlmIChwLnZhbHVlID09PSBwYXJlbnRJcmkpIHtcbiAgICAgICAgcmV0dXJuIHAuZ2V0TWV0YWRhdGEoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBhc0FycmF5IH0gZnJvbSBcIi4uL2FwcC91dGlsXCI7XG5pbXBvcnQgRW50aXR5IGZyb20gXCIuL0VudGl0eVwiO1xuaW1wb3J0IFJlaWZpZWQgZnJvbSBcIi4vUmVpZmllZFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDbGFzcyBleHRlbmRzIEVudGl0eSB7XG4gIGdldFBhcmVudHMoKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJoaWVyYXJjaGljYWxQYXJlbnRcIl1cbiAgICApO1xuICB9XG4gIGdldFN1cGVyRW50aXRpZXMoKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjc3ViQ2xhc3NPZlwiXVxuICAgICk7XG4gIH1cbiAgZ2V0RXF1aXZhbGVudHMoKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNlcXVpdmFsZW50Q2xhc3NcIl1cbiAgICApO1xuICB9XG5cbiAgZ2V0RGlzam9pbnRXaXRoKCkge1xuXHRyZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbJ2h0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2Rpc2pvaW50V2l0aCddKVxuICB9XG5cbiAgZ2V0SGFzS2V5KCkge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1snaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjaGFzS2V5J10pXG4gIH1cbn1cbiIsICJpbXBvcnQgeyBhc0FycmF5IH0gZnJvbSBcIi4uL2FwcC91dGlsXCI7XG5pbXBvcnQgRW50aXR5IGZyb20gXCIuL0VudGl0eVwiO1xuaW1wb3J0IFJlaWZpZWQgZnJvbSBcIi4vUmVpZmllZFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbmRpdmlkdWFsIGV4dGVuZHMgRW50aXR5IHtcbiAgZ2V0UGFyZW50cygpIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiZGlyZWN0UGFyZW50XCJdXG4gICAgKTtcbiAgfVxuICBnZXRFcXVpdmFsZW50cygpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgZ2V0U3VwZXJFbnRpdGllcygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihbXSlcbiAgfVxuXG4gIGdldERpZmZlcmVudEZyb20oKSB7XG4gICAgcmV0dXJuIGFzQXJyYXkoXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNkaWZmZXJlbnRGcm9tXCJdXG4gICAgKTtcbiAgfVxuXG4gIGdldFNhbWVBcygpIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNzYW1lQXNcIl0pO1xuICB9XG5cbiAgZ2V0SW5kaXZpZHVhbFR5cGVzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCByZGZUeXBlczogYW55ID0gdGhpcy5nZXRSZGZUeXBlcygpO1xuXG4gICAgaWYgKCFyZGZUeXBlcyB8fCAhQXJyYXkuaXNBcnJheShyZGZUeXBlcykpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmRmVHlwZXMuZmlsdGVyKFxuICAgICAgKHQ6IGFueSkgPT5cbiAgICAgICAgdCAhPT0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNOYW1lZEluZGl2aWR1YWxcIiAmJlxuXHRcdCggKCEgKHR5cGVvZiB0ID09PSAnc3RyaW5nJykgfHwgIXQuc3RhcnRzV2l0aChcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNcIikpKVxuICAgICk7XG4gIH1cblxufVxuIiwgImltcG9ydCB7IGFzQXJyYXkgfSBmcm9tIFwiLi4vYXBwL3V0aWxcIjtcbmltcG9ydCBFbnRpdHkgZnJvbSBcIi4vRW50aXR5XCI7XG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi9SZWlmaWVkXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFByb3BlcnR5IGV4dGVuZHMgRW50aXR5IHtcbiAgZ2V0UGFyZW50cygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNzdWJQcm9wZXJ0eU9mXCJdXG4gICAgKTtcbiAgfVxuICBnZXRTdXBlckVudGl0aWVzKCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI3N1YlByb3BlcnR5T2ZcIl1cbiAgICApO1xuICB9XG4gIGdldEVxdWl2YWxlbnRzKCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjZXF1aXZhbGVudFByb3BlcnR5XCJdXG4gICAgKTtcbiAgfVxuXG5cbiAgZ2V0RGlzam9pbnRXaXRoKCkge1xuXHRyZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbJ2h0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI3Byb3BlcnR5RGlzam9pbnRXaXRoJ10pXG4gIH1cblxuICBnZXRJbnZlcnNlT2YoKSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjaW52ZXJzZU9mXCJdKTtcbiAgfVxuXG4gIGdldERvbWFpbigpIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNkb21haW4nXSlcbiAgfVxuXG4gIGdldFJhbmdlKCkge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1snaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI3JhbmdlJ10pXG4gIH1cblxuICBnZXRQcm9wZXJ0eUNoYWlucygpOlJlaWZpZWQ8YW55PltdIHtcblx0cmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55Pihcblx0XHR0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNwcm9wZXJ0eUNoYWluQXhpb21cIl1cblx0KVxuICB9XG5cbn1cbiIsICJpbXBvcnQgeyBhc0FycmF5IH0gZnJvbSBcIi4uL2FwcC91dGlsXCI7XG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi9SZWlmaWVkXCI7XG5pbXBvcnQgVGhpbmcgZnJvbSBcIi4vVGhpbmdcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT250b2xvZ3kgZXh0ZW5kcyBUaGluZyB7XG4gIGdldE9udG9sb2d5SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wib250b2xvZ3lJZFwiXTtcbiAgfVxuICBnZXROYW1lKCk6IHN0cmluZyB7XG4gICAgbGV0IG5hbWVzID0gUmVpZmllZC5mcm9tSnNvbjxzdHJpbmc+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wibGFiZWxcIl0gfHwgdGhpcy5wcm9wZXJ0aWVzW1widGl0bGVcIl0gfHwgXCJcIlxuICAgICk7XG4gICAgcmV0dXJuIChuYW1lc1swXSAmJiBuYW1lc1swXS52YWx1ZSkgfHwgdGhpcy5nZXRPbnRvbG9neUlkKCk7XG4gIH1cbiAgZ2V0RGVzY3JpcHRpb24oKTogc3RyaW5nIHtcbiAgICBsZXQgZGVzY3JpcHRpb25zID0gUmVpZmllZC5mcm9tSnNvbjxzdHJpbmc+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiZGVmaW5pdGlvblwiXSB8fCB0aGlzLnByb3BlcnRpZXNbXCJkZXNjcmlwdGlvblwiXSB8fCBcIlwiXG4gICAgKTtcbiAgICByZXR1cm4gKGRlc2NyaXB0aW9uc1swXSAmJiBkZXNjcmlwdGlvbnNbMF0udmFsdWUpIHx8IFwiXCI7XG4gIH1cbiAgZ2V0U291cmNlRmlsZVRpbWVzdGFtcCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJzb3VyY2VGaWxlVGltZXN0YW1wXCJdO1xuICB9XG4gIGdldE51bUVudGl0aWVzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHBhcnNlSW50KHRoaXMucHJvcGVydGllc1tcIm51bWJlck9mRW50aXRpZXNcIl0pO1xuICB9XG4gIGdldE51bUNsYXNzZXMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcGFyc2VJbnQodGhpcy5wcm9wZXJ0aWVzW1wibnVtYmVyT2ZDbGFzc2VzXCJdKTtcbiAgfVxuICBnZXROdW1Qcm9wZXJ0aWVzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHBhcnNlSW50KHRoaXMucHJvcGVydGllc1tcIm51bWJlck9mUHJvcGVydGllc1wiXSk7XG4gIH1cbiAgZ2V0TnVtSW5kaXZpZHVhbHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcGFyc2VJbnQodGhpcy5wcm9wZXJ0aWVzW1wibnVtYmVyT2ZJbmRpdmlkdWFsc1wiXSk7XG4gIH1cbiAgZ2V0TG9nb1VSTCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJkZXBpY3RlZF9ieVwiXSB8fCB1bmRlZmluZWQ7XG4gIH1cbiAgZ2V0T250b2xvZ3lQdXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcIm9udG9sb2d5X3B1cmxcIl07XG4gIH1cbiAgZ2V0SG9tZXBhZ2UoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaG9tZXBhZ2VcIl07XG4gIH1cbiAgZ2V0TWFpbGluZ0xpc3QoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wibWFpbGluZ19saXN0XCJdO1xuICB9XG4gIGdldFRyYWNrZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1widHJhY2tlclwiXTtcbiAgfVxuICBnZXRWZXJzaW9uSXJpKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI3ZlcnNpb25JUklcIl07XG4gIH1cbiAgZ2V0VmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCN2ZXJzaW9uSW5mb1wiXTtcbiAgfVxuICBnZXRWZXJzaW9uRnJvbUlyaSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHZlcnNpb25JcmkgPVxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjdmVyc2lvbklSSVwiXTtcbiAgICBpZiAoIXZlcnNpb25JcmkpIHJldHVybiBcIlwiO1xuICAgIGNvbnN0IHZlcnNpb25Gcm9tRGF0ZSA9IHZlcnNpb25JcmkubWF0Y2goL1xcZHs0fS1cXGR7Mn0tXFxkezJ9Lyk7XG5cbiAgICBpZiAodmVyc2lvbkZyb21EYXRlICYmIHZlcnNpb25Gcm9tRGF0ZS5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gdmVyc2lvbkZyb21EYXRlWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB2ZXJzaW9uRnJvbU51bWJlciA9IHZlcnNpb25JcmkubWF0Y2goL1xcL3ZbZC5dLipcXC8vKTtcbiAgICAgIHJldHVybiB2ZXJzaW9uRnJvbU51bWJlclxuICAgICAgICA/IHZlcnNpb25Gcm9tTnVtYmVyWzBdLnJlcGxhY2VBbGwoXCIvXCIsIFwiXCIpLnJlcGxhY2UoXCJ2XCIsIFwiXCIpXG4gICAgICAgIDogXCJcIjtcbiAgICB9XG4gIH1cbiAgZ2V0TG9hZGVkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImxvYWRlZFwiXTtcbiAgfVxuICBnZXRBbm5vdGF0aW9uUHJlZGljYXRlcygpOiBzdHJpbmdbXSB7XG4gICAgbGV0IGFubm90YXRpb25QcmVkaWNhdGVzID0gbmV3IFNldCgpO1xuXG4gICAgZm9yIChsZXQgcHJlZGljYXRlIG9mIE9iamVjdC5rZXlzKHRoaXMucHJvcGVydGllcykpIHtcbiAgICAgIC8vIHByb3BlcnRpZXMgd2l0aG91dCBhbiBJUkkgYXJlIHRoaW5ncyB0aGF0IHdlcmUgYWRkZWQgYnkgcmRmMmpzb24gc28gc2hvdWxkIG5vdFxuICAgICAgLy8gYmUgaW5jbHVkZWQgYXMgYW5ub3RhdGlvbnNcbiAgICAgIGlmIChwcmVkaWNhdGUuaW5kZXhPZihcIjovL1wiKSA9PT0gLTEpIGNvbnRpbnVlO1xuXG4gICAgICBpZiAocHJlZGljYXRlID09PSBcImh0dHA6Ly9wdXJsLm9ib2xpYnJhcnkub3JnL29iby9JQU9fMDAwMDcwMFwiKSB7XG4gICAgICAgIC8vIFwiaGFzIHByZWZlcnJlZCByb290IHRlcm1cIlxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gYW55dGhpbmcgaW4gdGhlIHJkZiwgcmRmcywgb3dsIG5hbWVzcGFjZXMgYXJlbid0IGNvbnNpZGVyZWQgYW5ub3RhdGlvbnNcbiAgICAgIGlmIChcbiAgICAgICAgIShcbiAgICAgICAgICBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNcIikgfHxcbiAgICAgICAgICBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyNcIikgfHxcbiAgICAgICAgICBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI1wiKVxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgYW5ub3RhdGlvblByZWRpY2F0ZXMuYWRkKHByZWRpY2F0ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIEFycmF5LmZyb20oYW5ub3RhdGlvblByZWRpY2F0ZXMpIGFzIHN0cmluZ1tdO1xuICB9XG4gIGdldFByZWZlcnJlZFJvb3RzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJoYXNQcmVmZXJyZWRSb290XCJdKTtcbiAgfVxuICBnZXRMYW5ndWFnZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImxhbmd1YWdlXCJdKTtcbiAgfVxuICBnZXRJbXBvcnRzRnJvbSgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiaW1wb3J0c0Zyb21cIl0pO1xuICB9XG4gIGdldEV4cG9ydHNUbygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiZXhwb3J0c1RvXCJdKTtcbiAgfVxufVxuIiwgImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IE11bHRpbWFwIGZyb20gXCJtdWx0aW1hcFwiO1xuaW1wb3J0IEVudGl0eSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvRW50aXR5XCI7XG5cbi8qIFVuZmxhdHRlbnMgYSBsaXN0IG9mIGVudGl0aWVzIGludG86XG4gKlx0LSBBIGxpc3Qgb2Ygcm9vdCBlbnRpdGllc1xuICogXHQtIEEgbWFwcGluZyBvZiBVUkkgdG8gbGlzdCBvZiBjaGlsZCBlbnRpdGllc1xuICpcbiAqIFVzZWQgYnkgRW50aXR5VHJlZSBhbmQgRW50aXR5R3JhcGhcbiAqL1xuXG4gaW50ZXJmYWNlIFBhcmVudENoaWxkUmVsYXRpb24ge1xuXHRwYXJlbnQ6RW50aXR5LFxuXHRjaGlsZDpFbnRpdHlcblx0cGFyZW50UmVsYXRpb25Ub0NoaWxkOnN0cmluZ3xudWxsXG5cdGNoaWxkUmVsYXRpb25Ub1BhcmVudDpzdHJpbmd8bnVsbFxuIH1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZXh0cmFjdEVudGl0eUhpZXJhcmNoeShlbnRpdGllczogRW50aXR5W10pOiB7XG4gIHJvb3RFbnRpdGllczogRW50aXR5W107XG4gIHBhcmVudFRvQ2hpbGRSZWxhdGlvbnM6IE11bHRpbWFwPHN0cmluZywgUGFyZW50Q2hpbGRSZWxhdGlvbj47XG59IHtcbiAgbGV0IGNoaWxkVG9QYXJlbnRSZWxhdGlvbnM6IE11bHRpbWFwPHN0cmluZywgUGFyZW50Q2hpbGRSZWxhdGlvbj4gPSBuZXcgTXVsdGltYXAoKTtcblxuICBsZXQgdXJpVG9Ob2RlOiBNYXA8c3RyaW5nLCBFbnRpdHk+ID0gbmV3IE1hcCgpO1xuICBmb3IgKGxldCBlbnRpdHkgb2YgZW50aXRpZXMpIHtcbiAgICB1cmlUb05vZGUuc2V0KGVudGl0eS5nZXRJcmkoKSwgZW50aXR5KTtcbiAgfVxuXG4gIGZvciAobGV0IGVudGl0eSBvZiBlbnRpdGllcykge1xuICAgIGlmIChpc1RvcChlbnRpdHkuZ2V0SXJpKCkpKSBjb250aW51ZTtcblxuICAgIGZvciAobGV0IHBhcmVudFJlbGF0aW9uIG9mIGVudGl0eS5nZXRQYXJlbnRzKCkpIHtcblxuICAgICAgbGV0IHBhcmVudElyaSA9IHBhcmVudFJlbGF0aW9uLnZhbHVlO1xuICAgICAgbGV0IHBhcmVudEVudGl0eSA9IHVyaVRvTm9kZS5nZXQocGFyZW50SXJpKTtcblxuICAgICAgaWYgKGlzVG9wKHBhcmVudElyaSkpIGNvbnRpbnVlO1xuXG4gICAgICBpZighIChwYXJlbnRFbnRpdHkgaW5zdGFuY2VvZiBFbnRpdHkpKSB7XG5cdGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgcGFyZW50UmVsYXRpb25Ub0NoaWxkLCBjaGlsZFJlbGF0aW9uVG9QYXJlbnRcblxuICAgICAgaWYoZW50aXR5LmdldFR5cGUoKSA9PT0gJ2luZGl2aWR1YWwnKSB7XG5cblx0Ly8gSW4gdGhlIGNhc2Ugb2YgaW5kaXZpZHVhbHMsIHRoZSBjaGlsZC0+cGFyZW50IHJlbGF0aW9uc2hpcCBpcyBhbHdheXNcblx0Ly8gcmRmOnR5cGUgYW5kIHRoZXJlIGlzIG5vIGV4cGxpY2l0IHBhcmVudC0+Y2hpbGQgcmVsYXRpb25zaGlwLlxuXG5cdGNoaWxkUmVsYXRpb25Ub1BhcmVudCA9ICdodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjdHlwZSdcblx0cGFyZW50UmVsYXRpb25Ub0NoaWxkID0gbnVsbFxuXG4gICAgICB9IGVsc2UgaWYoZW50aXR5LmdldFR5cGUoKSA9PSAnY2xhc3MnKSB7XG5cblx0Ly8gSW4gdGhlIGNhc2Ugb2YgY2xhc3NlcywgdGhlIHJlbGF0aW9ucyBhcmUgcHJvdmlkZWQgaW4gdGhlIG1ldGFkYXRhLlxuXG5cdHBhcmVudFJlbGF0aW9uVG9DaGlsZCA9IFxuXHRcdHBhcmVudFJlbGF0aW9uLmdldE1ldGFkYXRhKClcblx0XHRcdCYmIHBhcmVudFJlbGF0aW9uLmdldE1ldGFkYXRhKClbJ3BhcmVudFJlbGF0aW9uVG9DaGlsZCddIFxuXHRcdFx0JiYgcGFyZW50UmVsYXRpb24uZ2V0TWV0YWRhdGEoKVsncGFyZW50UmVsYXRpb25Ub0NoaWxkJ11bMF07XG5cblx0Y2hpbGRSZWxhdGlvblRvUGFyZW50ID0gXG5cdFx0cGFyZW50UmVsYXRpb24uZ2V0TWV0YWRhdGEoKVxuXHRcdFx0JiYgcGFyZW50UmVsYXRpb24uZ2V0TWV0YWRhdGEoKVsnY2hpbGRSZWxhdGlvblRvUGFyZW50J10gXG5cdFx0XHQmJiBwYXJlbnRSZWxhdGlvbi5nZXRNZXRhZGF0YSgpWydjaGlsZFJlbGF0aW9uVG9QYXJlbnQnXVswXTtcblxuICAgICAgfSBlbHNlIHtcblxuXHQvLyBJbiB0aGUgY2FzZSBvZiBwcm9wZXJ0aWVzLCB0aGVyZSBhcmUgbm8gcmVsYXRpb25zIHRvIHNob3cuXG5cdC8vIChpdCB3b3VsZCBhbHdheXMgYmUganVzdCBzdWJQcm9wZXJ0eU9mKVxuXHQvL1xuXG4gICAgICB9XG5cbiAgICAgIGxldCByZWxhdGlvbiA9IHtcblx0cGFyZW50OiBwYXJlbnRFbnRpdHksXG5cdGNoaWxkOiBlbnRpdHksXG5cdHBhcmVudFJlbGF0aW9uVG9DaGlsZCxcblx0Y2hpbGRSZWxhdGlvblRvUGFyZW50XG4gICAgICB9XG5cbiAgICAgIGNoaWxkVG9QYXJlbnRSZWxhdGlvbnMuc2V0KGVudGl0eS5nZXRJcmkoKSwgcmVsYXRpb24pO1xuICAgIH1cbiAgfVxuXG4gIHZhciBicmVha0N5Y2xlcyA9IGZ1bmN0aW9uIChjdXJyZW50SXJpOnN0cmluZywgdmlzaXRlZElyaXM6IFNldDxzdHJpbmc+KSB7XG4gICAgdmlzaXRlZElyaXMuYWRkKGN1cnJlbnRJcmkpO1xuXG4gICAgbGV0IHBhcmVudFJlbGF0aW9ucyA9IGNoaWxkVG9QYXJlbnRSZWxhdGlvbnMuZ2V0KGN1cnJlbnRJcmkpO1xuICAgIGlmIChwYXJlbnRSZWxhdGlvbnMpIHtcbiAgICAgIGZvciAobGV0IHBhcmVudFJlbGF0aW9uIG9mIHBhcmVudFJlbGF0aW9ucykge1xuICAgICAgICBpZiAodmlzaXRlZElyaXMuaGFzKHBhcmVudFJlbGF0aW9uLnBhcmVudC5nZXRJcmkoKSkpIHtcbiAgICAgICAgICAvLyB3ZSBhbHJlYWR5IHNhdyB0aGlzIHBhcmVudCwgcmVtb3ZlIGl0XG5cdCAgY2hpbGRUb1BhcmVudFJlbGF0aW9ucy5kZWxldGUoY3VycmVudElyaSwgcGFyZW50UmVsYXRpb24pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYnJlYWtDeWNsZXMocGFyZW50UmVsYXRpb24ucGFyZW50LmdldElyaSgpLCBuZXcgU2V0KHZpc2l0ZWRJcmlzKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgLy8gYnJlYWsgY3ljbGVzIHN0YXJ0aW5nIGZyb20gbGVhZiBlbnRpdGllc1xuICBmb3IgKGxldCBlbnRpdHkgb2YgZW50aXRpZXMpIHtcbiAgICBicmVha0N5Y2xlcyhlbnRpdHkuZ2V0SXJpKCksIG5ldyBTZXQoKSk7XG4gIH1cblxuICBsZXQgcGFyZW50VG9DaGlsZFJlbGF0aW9uczogTXVsdGltYXA8c3RyaW5nLCBQYXJlbnRDaGlsZFJlbGF0aW9uPiA9IG5ldyBNdWx0aW1hcCgpO1xuXG4gIGZvcihsZXQgY2hpbGRJcmkgb2YgQXJyYXkuZnJvbShjaGlsZFRvUGFyZW50UmVsYXRpb25zLmtleXMoKSkpIHtcbiAgXHRsZXQgcmVsYXRpb25zID0gY2hpbGRUb1BhcmVudFJlbGF0aW9ucy5nZXQoY2hpbGRJcmkpO1xuXHRmb3IobGV0IHIgb2YgcmVsYXRpb25zKSB7XG5cdFx0cGFyZW50VG9DaGlsZFJlbGF0aW9ucy5zZXQoci5wYXJlbnQuZ2V0SXJpKCksIHIpXG5cdH1cbiAgfVxuXG4gIGxldCByb290RW50aXRpZXMgPSBlbnRpdGllcy5maWx0ZXIoKG5vZGUpID0+IHtcbiAgICBpZiAoaXNUb3Aobm9kZS5nZXRJcmkoKSkpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gKGNoaWxkVG9QYXJlbnRSZWxhdGlvbnMuZ2V0KG5vZGUuZ2V0SXJpKCkpIHx8IFtdKS5sZW5ndGggPT09IDA7XG4gIH0pO1xuXG4gIHJldHVybiB7IHJvb3RFbnRpdGllcywgcGFyZW50VG9DaGlsZFJlbGF0aW9ucyB9O1xufVxuXG5mdW5jdGlvbiBpc1RvcChpcmkpIHtcbiAgcmV0dXJuIChcbiAgICBpcmkgPT09IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjVGhpbmdcIiB8fFxuICAgIGlyaSA9PT0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNUb3BPYmplY3RQcm9wZXJ0eVwiXG4gICk7XG59XG4iLCAiaW1wb3J0IEVudGl0eSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvRW50aXR5XCI7XG5pbXBvcnQgT250b2xvZ3kgZnJvbSBcIi4uLy4uLy4uL21vZGVsL09udG9sb2d5XCI7XG5pbXBvcnQgZXh0cmFjdEVudGl0eUhpZXJhcmNoeSBmcm9tIFwiLi9leHRyYWN0RW50aXR5SGllcmFyY2h5XCI7XG5pbXBvcnQgeyBUcmVlTm9kZSB9IGZyb20gXCIuLi9vbnRvbG9naWVzU2xpY2VcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlVHJlZUZyb21FbnRpdGllcyhcbiAgZW50aXRpZXM6IEVudGl0eVtdLFxuICBwcmVmZXJyZWRSb290czogYm9vbGVhbixcbiAgb250b2xvZ3k6IE9udG9sb2d5XG4pOiB7IGFsbE5vZGVzOlRyZWVOb2RlW10sIHJvb3ROb2RlczogVHJlZU5vZGVbXTsgYXV0b21hdGljYWxseUV4cGFuZGVkTm9kZXM6U2V0PHN0cmluZz4sIG5vZGVDaGlsZHJlbjogYW55IH0ge1xuICBsZXQgeyByb290RW50aXRpZXMsIHBhcmVudFRvQ2hpbGRSZWxhdGlvbnMgfSA9IGV4dHJhY3RFbnRpdHlIaWVyYXJjaHkoZW50aXRpZXMpO1xuXG4gIGNvbnNvbGUubG9nKCdyb290RW50aXRpZXMnKVxuICBjb25zb2xlLmRpcihyb290RW50aXRpZXMpXG4gIGNvbnNvbGUubG9nKCdwYXJlbnRUb0NoaWxkUmVsYXRpb25zJylcbiAgY29uc29sZS5kaXIocGFyZW50VG9DaGlsZFJlbGF0aW9ucylcblxuICBpZiAocHJlZmVycmVkUm9vdHMpIHtcbiAgICBsZXQgcHJlZmVycmVkID0gb250b2xvZ3kuZ2V0UHJlZmVycmVkUm9vdHMoKTtcbiAgICBpZiAocHJlZmVycmVkLmxlbmd0aCA+IDApIHtcbiAgICAgIGxldCBwcmVmZXJyZWRSb290RW50aXRpZXMgPSBwcmVmZXJyZWQubWFwKFxuICAgICAgICAoaXJpKSA9PiBlbnRpdGllcy5maWx0ZXIoKGVudGl0eSkgPT4gZW50aXR5LmdldElyaSgpID09PSBpcmkpWzBdXG4gICAgICApO1xuICAgICAgcm9vdEVudGl0aWVzID0gcHJlZmVycmVkUm9vdEVudGl0aWVzLmZpbHRlcigoZW50aXR5KSA9PiAhIWVudGl0eSk7XG4gICAgfVxuICB9XG5cbiAgbGV0IGFsbE5vZGVzOlRyZWVOb2RlW10gPSBbXVxuICBsZXQgbm9kZUNoaWxkcmVuOiBhbnkgPSB7fTtcbiAgbGV0IGF1dG9tYXRpY2FsbHlFeHBhbmRlZE5vZGVzOlNldDxzdHJpbmc+ID0gbmV3IFNldCgpXG5cbiAgcmV0dXJuIHtcbiAgICBhbGxOb2RlczogYWxsTm9kZXMsXG4gICAgcm9vdE5vZGVzOiByb290RW50aXRpZXMubWFwKChyb290RW50aXR5KSA9PlxuICAgICAgY3JlYXRlVHJlZU5vZGUocm9vdEVudGl0eSwgdW5kZWZpbmVkLCAwLCBudWxsLCBudWxsKVxuICAgICksXG4gICAgbm9kZUNoaWxkcmVuLFxuICAgIGF1dG9tYXRpY2FsbHlFeHBhbmRlZE5vZGVzXG4gIH07XG5cbiAgZnVuY3Rpb24gY3JlYXRlVHJlZU5vZGUoXG4gICAgbm9kZTogRW50aXR5LFxuICAgIHBhcmVudDogVHJlZU5vZGUgfCB1bmRlZmluZWQsXG4gICAgZGVidWdOdW1JdGVyYXRpb25zOiBudW1iZXIsXG4gICAgcGFyZW50UmVsYXRpb25Ub0NoaWxkOnN0cmluZ3xudWxsLFxuICAgIGNoaWxkUmVsYXRpb25Ub1BhcmVudDpzdHJpbmd8bnVsbCxcbiAgKTogVHJlZU5vZGUge1xuICAgIGlmIChkZWJ1Z051bUl0ZXJhdGlvbnMgPiAxMDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcInByb2JhYmxlIGN5Y2xpYyB0cmVlIChjcmVhdGVUcmVlTm9kZSlcIik7XG4gICAgfVxuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSBwYXJlbnRUb0NoaWxkUmVsYXRpb25zLmdldChub2RlLmdldElyaSgpKSB8fCBbXTtcblxuICAgIGNvbnN0IHRyZWVOb2RlOiBUcmVlTm9kZSA9IHtcbiAgICAgIGFic29sdXRlSWRlbnRpdHk6IHBhcmVudFxuICAgICAgICA/IHBhcmVudC5hYnNvbHV0ZUlkZW50aXR5ICsgXCI7XCIgKyBub2RlLmdldElyaSgpXG4gICAgICAgIDogbm9kZS5nZXRJcmkoKSxcbiAgICAgIGlyaTogbm9kZS5nZXRJcmkoKSxcbiAgICAgIHRpdGxlOiBub2RlLmdldE5hbWUoKSxcbiAgICAgIGV4cGFuZGFibGU6IG5vZGUuaGFzQ2hpbGRyZW4oKSxcbiAgICAgIGVudGl0eTogbm9kZSxcbiAgICAgIG51bURlc2NlbmRhbnRzOlxuICAgICAgICBub2RlLmdldE51bUhpZXJhcmNoaWNhbERlc2NlbmRhbnRzKCkgfHwgbm9kZS5nZXROdW1EZXNjZW5kYW50cygpLFxuICAgICAgcGFyZW50UmVsYXRpb25Ub0NoaWxkLFxuICAgICAgY2hpbGRSZWxhdGlvblRvUGFyZW50XG4gICAgfTtcblxuICAgIGFsbE5vZGVzLnB1c2godHJlZU5vZGUpXG5cbiAgICBub2RlQ2hpbGRyZW5bdHJlZU5vZGUuYWJzb2x1dGVJZGVudGl0eV0gPSBjaGlsZE5vZGVzLm1hcCgoY2hpbGROb2RlKSA9PlxuICAgICAgY3JlYXRlVHJlZU5vZGUoY2hpbGROb2RlLmNoaWxkLCB0cmVlTm9kZSwgZGVidWdOdW1JdGVyYXRpb25zICsgMSwgY2hpbGROb2RlLnBhcmVudFJlbGF0aW9uVG9DaGlsZCwgY2hpbGROb2RlLmNoaWxkUmVsYXRpb25Ub1BhcmVudClcbiAgICApO1xuXG4gICAgaWYobm9kZS5oYXNDaGlsZHJlbigpICYmIGNoaWxkTm9kZXMubGVuZ3RoID4gMCkge1xuXHRhdXRvbWF0aWNhbGx5RXhwYW5kZWROb2Rlcy5hZGQodHJlZU5vZGUuYWJzb2x1dGVJZGVudGl0eSlcbiAgICB9XG5cbiAgICByZXR1cm4gdHJlZU5vZGU7XG4gIH1cbn1cbiIsICJpbXBvcnQge1xuICBjcmVhdGVBY3Rpb24sXG4gIGNyZWF0ZUFzeW5jVGh1bmssXG4gIGNyZWF0ZVNsaWNlLFxuICBQYXlsb2FkQWN0aW9uLFxufSBmcm9tIFwiQHJlZHV4anMvdG9vbGtpdFwiO1xuaW1wb3J0IHsgZ2V0LCBnZXRQYWdpbmF0ZWQsIFBhZ2UgfSBmcm9tIFwiLi4vLi4vYXBwL2FwaVwiO1xuaW1wb3J0IHsgbWFwVG9BcGlQYXJhbXMsIHRoaW5nRnJvbUpzb25Qcm9wZXJ0aWVzIH0gZnJvbSBcIi4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQgRW50aXR5IGZyb20gXCIuLi8uLi9tb2RlbC9FbnRpdHlcIjtcbmltcG9ydCBPbnRvbG9neSBmcm9tIFwiLi4vLi4vbW9kZWwvT250b2xvZ3lcIjtcbmltcG9ydCBjcmVhdGVUcmVlRnJvbUVudGl0aWVzIGZyb20gXCIuL2VudGl0aWVzL2NyZWF0ZVRyZWVGcm9tRW50aXRpZXNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBPbnRvbG9naWVzU3RhdGUge1xuICBvbnRvbG9neTogT250b2xvZ3kgfCB1bmRlZmluZWQ7XG4gIGVudGl0eTogRW50aXR5IHwgdW5kZWZpbmVkO1xuICBub2Rlc1dpdGhDaGlsZHJlbkxvYWRlZDogc3RyaW5nW107XG4gIG5vZGVDaGlsZHJlbjogYW55O1xuICByb290Tm9kZXM6IFRyZWVOb2RlW107XG4gIG9udG9sb2dpZXM6IE9udG9sb2d5W107XG4gIHRvdGFsT250b2xvZ2llczogbnVtYmVyO1xuICBlbnRpdGllczogRW50aXR5W107XG4gIHRvdGFsRW50aXRpZXM6IG51bWJlcjtcbiAgbG9hZGluZ09udG9sb2dpZXM6IGJvb2xlYW47XG4gIGxvYWRpbmdFbnRpdGllczogYm9vbGVhbjtcbiAgbnVtUGVuZGluZ1RyZWVSZXF1ZXN0czogbnVtYmVyO1xuICBsb2FkaW5nT250b2xvZ3k6IGJvb2xlYW47XG4gIGxvYWRpbmdFbnRpdHk6IGJvb2xlYW47XG4gIGNsYXNzSW5zdGFuY2VzOiBQYWdlPEVudGl0eT4gfCBudWxsO1xuICBsb2FkaW5nQ2xhc3NJbnN0YW5jZXM6IGJvb2xlYW47XG4gIGF1dG9tYXRpY2FsbHlFeHBhbmRlZE5vZGVzOiBzdHJpbmdbXTtcbiAgbWFudWFsbHlFeHBhbmRlZE5vZGVzOiBzdHJpbmdbXTtcbiAgcHJlZmVycmVkUm9vdHM6IGJvb2xlYW47XG4gIGRpc3BsYXlPYnNvbGV0ZTogYm9vbGVhbjtcbiAgZGlzcGxheVNpYmxpbmdzOiBib29sZWFuO1xuICBkaXNwbGF5Q291bnRzOiBib29sZWFuO1xuICBlcnJvck1lc3NhZ2U6IHN0cmluZztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgVHJlZU5vZGUge1xuICBhYnNvbHV0ZUlkZW50aXR5OiBzdHJpbmc7IC8vIHRoZSBJUklzIG9mIHRoaXMgbm9kZSBhbmQgaXRzIGFuY2VzdG9ycyBkZWxpbWl0ZWQgYnkgYSA7XG4gIGlyaTogc3RyaW5nO1xuICB0aXRsZTogc3RyaW5nO1xuICBleHBhbmRhYmxlOiBib29sZWFuO1xuICBlbnRpdHk6IEVudGl0eTtcbiAgbnVtRGVzY2VuZGFudHM6IG51bWJlcjtcbiAgcGFyZW50UmVsYXRpb25Ub0NoaWxkOiBzdHJpbmcgfCBudWxsOyAvLyBpZiBhcHBsaWNhYmxlLCByZWxhdGlvbiBmcm9tIHRoZSBwYXJlbnQgbm9kZSB0byB0aGlzIG5vZGUgKGUuZy4gaGFzX3BhcnQpXG4gIGNoaWxkUmVsYXRpb25Ub1BhcmVudDogc3RyaW5nIHwgbnVsbDsgLy8gaWYgYXBwbGljYWJsZSwgcmVsYXRpb24gZnJvbSB0aGlzIG5vZGUgdG8gdGhlIHBhcmVudCBub2RlIChlLmcuIHBhcnRfb2YpXG59XG5cbmNvbnN0IGluaXRpYWxTdGF0ZTogT250b2xvZ2llc1N0YXRlID0ge1xuICBvbnRvbG9neTogdW5kZWZpbmVkLFxuICBlbnRpdHk6IHVuZGVmaW5lZCxcbiAgbm9kZXNXaXRoQ2hpbGRyZW5Mb2FkZWQ6IFtdLFxuICBub2RlQ2hpbGRyZW46IHt9LFxuICByb290Tm9kZXM6IFtdLFxuICBvbnRvbG9naWVzOiBbXSxcbiAgdG90YWxPbnRvbG9naWVzOiAwLFxuICBlbnRpdGllczogW10sXG4gIHRvdGFsRW50aXRpZXM6IDAsXG4gIGxvYWRpbmdPbnRvbG9naWVzOiBmYWxzZSxcbiAgbG9hZGluZ0VudGl0aWVzOiBmYWxzZSxcbiAgbnVtUGVuZGluZ1RyZWVSZXF1ZXN0czogMCxcbiAgbG9hZGluZ09udG9sb2d5OiBmYWxzZSxcbiAgbG9hZGluZ0VudGl0eTogZmFsc2UsXG4gIGNsYXNzSW5zdGFuY2VzOiBudWxsLFxuICBsb2FkaW5nQ2xhc3NJbnN0YW5jZXM6IGZhbHNlLFxuICBhdXRvbWF0aWNhbGx5RXhwYW5kZWROb2RlczogW10sXG4gIG1hbnVhbGx5RXhwYW5kZWROb2RlczogW10sXG4gIHByZWZlcnJlZFJvb3RzOiBmYWxzZSxcbiAgZGlzcGxheU9ic29sZXRlOiBmYWxzZSxcbiAgZGlzcGxheVNpYmxpbmdzOiBmYWxzZSxcbiAgZGlzcGxheUNvdW50czogdHJ1ZSxcbiAgZXJyb3JNZXNzYWdlOiBcIlwiLFxufTtcblxuZXhwb3J0IGNvbnN0IHJlc2V0VHJlZUNvbnRlbnQgPSBjcmVhdGVBY3Rpb24oXCJvbnRvbG9naWVzX3RyZWVfcmVzZXRfY29udGVudFwiKTtcbmV4cG9ydCBjb25zdCByZXNldFRyZWVTZXR0aW5ncyA9IGNyZWF0ZUFjdGlvbjx7XG4gIGVudGl0eVR5cGU6IHN0cmluZztcbiAgc2VsZWN0ZWRFbnRpdHk/OiBFbnRpdHk7XG59PihcIm9udG9sb2dpZXNfdHJlZV9yZXNldF9zZXR0aW5nc1wiKTtcblxuZXhwb3J0IGNvbnN0IGVuYWJsZVByZWZlcnJlZFJvb3RzID0gY3JlYXRlQWN0aW9uKFxuICBcIm9udG9sb2dpZXNfcHJlZmVycmVkX2VuYWJsZWRcIlxuKTtcbmV4cG9ydCBjb25zdCBkaXNhYmxlUHJlZmVycmVkUm9vdHMgPSBjcmVhdGVBY3Rpb24oXG4gIFwib250b2xvZ2llc19wcmVmZXJyZWRfZGlzYWJsZWRcIlxuKTtcbmV4cG9ydCBjb25zdCBvcGVuTm9kZSA9IGNyZWF0ZUFjdGlvbjxUcmVlTm9kZT4oXCJvbnRvbG9naWVzX25vZGVfb3BlblwiKTtcbmV4cG9ydCBjb25zdCBjbG9zZU5vZGUgPSBjcmVhdGVBY3Rpb248VHJlZU5vZGU+KFwib250b2xvZ2llc19ub2RlX2Nsb3NlXCIpO1xuXG5leHBvcnQgY29uc3Qgc2hvd09ic29sZXRlID0gY3JlYXRlQWN0aW9uKFwib250b2xvZ2llc19zaG93X29ic29sZXRlXCIpO1xuZXhwb3J0IGNvbnN0IGhpZGVPYnNvbGV0ZSA9IGNyZWF0ZUFjdGlvbihcIm9udG9sb2dpZXNfaGlkZV9vYnNvbGV0ZVwiKTtcblxuZXhwb3J0IGNvbnN0IHNob3dTaWJsaW5ncyA9IGNyZWF0ZUFjdGlvbihcIm9udG9sb2dpZXNfc2hvd19zaWJsaW5nc1wiKTtcbmV4cG9ydCBjb25zdCBoaWRlU2libGluZ3MgPSBjcmVhdGVBY3Rpb24oXCJvbnRvbG9naWVzX2hpZGVfc2libGluZ3NcIik7XG5cbmV4cG9ydCBjb25zdCBzaG93Q291bnRzID0gY3JlYXRlQWN0aW9uKFwib250b2xvZ2llc19zaG93X2NvdW50c1wiKTtcbmV4cG9ydCBjb25zdCBoaWRlQ291bnRzID0gY3JlYXRlQWN0aW9uKFwib250b2xvZ2llc19oaWRlX2NvdW50c1wiKTtcblxuZXhwb3J0IGNvbnN0IGdldE9udG9sb2d5ID0gY3JlYXRlQXN5bmNUaHVuayhcbiAgXCJvbnRvbG9naWVzX29udG9sb2d5XCIsXG4gIGFzeW5jIChcbiAgICB7XG4gICAgICBvbnRvbG9neUlkLFxuICAgICAgbGFuZyxcbiAgICAgIGFwaVVybCxcbiAgICB9OiB7IG9udG9sb2d5SWQ6IHN0cmluZzsgbGFuZzogc3RyaW5nOyBhcGlVcmw/OiBzdHJpbmcgfSxcbiAgICB7IHJlamVjdFdpdGhWYWx1ZSB9XG4gICkgPT4ge1xuICAgIGNvbnN0IHBhdGggPSBgYXBpL3YyL29udG9sb2dpZXMvJHtvbnRvbG9neUlkfWA7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG9udG9sb2d5UHJvcGVydGllcyA9IGF3YWl0IGdldDxhbnk+KHBhdGgsIHsgbGFuZyB9LCBhcGlVcmwpO1xuICAgICAgcmV0dXJuIG5ldyBPbnRvbG9neShvbnRvbG9neVByb3BlcnRpZXMpO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIHJldHVybiByZWplY3RXaXRoVmFsdWUoYEVycm9yIGFjY2Vzc2luZzogJHtwYXRofTsgJHtlcnJvci5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuKTtcbmV4cG9ydCBjb25zdCBnZXRFbnRpdHlXaXRoVHlwZSA9IGNyZWF0ZUFzeW5jVGh1bmsoXG4gIFwib250b2xvZ2llc19lbnRpdHlfdHlwZVwiLFxuICBhc3luYyAoXG4gICAge1xuICAgICAgb250b2xvZ3lJZCxcbiAgICAgIGVudGl0eVR5cGUsXG4gICAgICBlbnRpdHlJcmksXG4gICAgICBzZWFyY2hQYXJhbXMsXG4gICAgfToge1xuICAgICAgb250b2xvZ3lJZDogc3RyaW5nO1xuICAgICAgZW50aXR5VHlwZTogc3RyaW5nO1xuICAgICAgZW50aXR5SXJpOiBzdHJpbmc7XG4gICAgICBzZWFyY2hQYXJhbXM6IFVSTFNlYXJjaFBhcmFtcztcbiAgICB9LFxuICAgIHsgcmVqZWN0V2l0aFZhbHVlIH1cbiAgKSA9PiB7XG4gICAgY29uc3QgYXBpU2VhcmNoUGFyYW1zID0gbWFwVG9BcGlQYXJhbXMoc2VhcmNoUGFyYW1zKTtcbiAgICBjb25zdCBkb3VibGVFbmNvZGVkVGVybVVyaSA9IGVuY29kZVVSSUNvbXBvbmVudChcbiAgICAgIGVuY29kZVVSSUNvbXBvbmVudChlbnRpdHlJcmkpXG4gICAgKTtcbiAgICBsZXQgcGF0aCA9IFwiXCI7XG4gICAgdHJ5IHtcbiAgICAgIGxldCBlbnRpdHlKc29uUHJvcGVydGllcyA9IG51bGw7XG4gICAgICBpZiAoZW50aXR5SXJpKSB7XG4gICAgICAgIHBhdGggPSBgYXBpL3YyL29udG9sb2dpZXMvJHtvbnRvbG9neUlkfS8ke2VudGl0eVR5cGV9LyR7ZG91YmxlRW5jb2RlZFRlcm1Vcml9PyR7bmV3IFVSTFNlYXJjaFBhcmFtcyhcbiAgICAgICAgICBhcGlTZWFyY2hQYXJhbXNcbiAgICAgICAgKX1gO1xuICAgICAgICBlbnRpdHlKc29uUHJvcGVydGllcyA9IGF3YWl0IGdldDxhbnk+KHBhdGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGF0aCA9IGBhcGkvdjIvb250b2xvZ2llcy8ke29udG9sb2d5SWR9LyR7ZW50aXR5VHlwZX0/JHtuZXcgVVJMU2VhcmNoUGFyYW1zKFxuICAgICAgICAgIGFwaVNlYXJjaFBhcmFtc1xuICAgICAgICApfWA7XG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBnZXRQYWdpbmF0ZWQ8YW55PihwYXRoKTtcbiAgICAgICAgaWYgKHJlc3VsdHMuZWxlbWVudHMubGVuZ3RoID09PSAxICYmIHJlc3VsdHMudG90YWxFbGVtZW50cyA9PT0gMSkge1xuICAgICAgICAgIGVudGl0eUpzb25Qcm9wZXJ0aWVzID0gcmVzdWx0cy5lbGVtZW50c1swXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gcmVqZWN0V2l0aFZhbHVlKFxuICAgICAgICAgICAgYEVycm9yIGFjY2Vzc2luZzogJHtwYXRofTsgUmV0cmlldmVkIG5vbmRpc3RpbmN0IGVudGl0eTogJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICAgICAgcmVzdWx0c1xuICAgICAgICAgICAgKX1gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaW5nRnJvbUpzb25Qcm9wZXJ0aWVzKGVudGl0eUpzb25Qcm9wZXJ0aWVzKTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICByZXR1cm4gcmVqZWN0V2l0aFZhbHVlKGBFcnJvciBhY2Nlc3Npbmc6ICR7cGF0aH07ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cbik7XG5leHBvcnQgY29uc3QgZ2V0RW50aXR5ID0gY3JlYXRlQXN5bmNUaHVuayhcbiAgXCJvbnRvbG9naWVzX2VudGl0eVwiLFxuICBhc3luYyAoXG4gICAge1xuICAgICAgb250b2xvZ3lJZCxcbiAgICAgIGVudGl0eUlyaSxcbiAgICB9OiB7XG4gICAgICBvbnRvbG9neUlkOiBzdHJpbmc7XG4gICAgICBlbnRpdHlJcmk6IHN0cmluZztcbiAgICB9LFxuICAgIHsgcmVqZWN0V2l0aFZhbHVlIH1cbiAgKSA9PiB7XG4gICAgY29uc3QgZG91YmxlRW5jb2RlZFRlcm1VcmkgPSBlbmNvZGVVUklDb21wb25lbnQoXG4gICAgICBlbmNvZGVVUklDb21wb25lbnQoZW50aXR5SXJpKVxuICAgICk7XG4gICAgbGV0IHBhdGggPSBcIlwiO1xuICAgIHRyeSB7XG4gICAgICBwYXRoID0gYGFwaS92Mi9vbnRvbG9naWVzLyR7b250b2xvZ3lJZH0vZW50aXRpZXMvJHtkb3VibGVFbmNvZGVkVGVybVVyaX1gO1xuICAgICAgY29uc3QgZW50aXR5SnNvblByb3BlcnRpZXMgPSBhd2FpdCBnZXQ8YW55PihwYXRoKTtcbiAgICAgIHJldHVybiB0aGluZ0Zyb21Kc29uUHJvcGVydGllcyhlbnRpdHlKc29uUHJvcGVydGllcyk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgcmV0dXJuIHJlamVjdFdpdGhWYWx1ZShgRXJyb3IgYWNjZXNzaW5nOiAke3BhdGh9OyAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG4pO1xuZXhwb3J0IGNvbnN0IGdldENsYXNzSW5zdGFuY2VzID0gY3JlYXRlQXN5bmNUaHVuayhcbiAgXCJvbnRvbG9naWVzX2VudGl0eV9jbGFzc19pbnN0YW5jZXNcIixcbiAgYXN5bmMgKFxuICAgIHtcbiAgICAgIG9udG9sb2d5SWQsXG4gICAgICBjbGFzc0lyaSxcbiAgICAgIHNlYXJjaFBhcmFtcyxcbiAgICB9OiB7XG4gICAgICBvbnRvbG9neUlkOiBzdHJpbmc7XG4gICAgICBjbGFzc0lyaTogc3RyaW5nO1xuICAgICAgc2VhcmNoUGFyYW1zOiBVUkxTZWFyY2hQYXJhbXM7XG4gICAgfSxcbiAgICB7IHJlamVjdFdpdGhWYWx1ZSB9XG4gICkgPT4ge1xuICAgIGxldCBwYXRoID0gXCJcIjtcbiAgICB0cnkge1xuICAgICAgaWYgKGNsYXNzSXJpKSB7XG4gICAgICAgIGNvbnN0IGFwaVNlYXJjaFBhcmFtcyA9IG1hcFRvQXBpUGFyYW1zKHNlYXJjaFBhcmFtcyk7XG4gICAgICAgIGNvbnN0IGRvdWJsZUVuY29kZWRUZXJtVXJpID0gZW5jb2RlVVJJQ29tcG9uZW50KFxuICAgICAgICAgIGVuY29kZVVSSUNvbXBvbmVudChjbGFzc0lyaSlcbiAgICAgICAgKTtcbiAgICAgICAgcGF0aCA9IGBhcGkvdjIvb250b2xvZ2llcy8ke29udG9sb2d5SWR9L2NsYXNzZXMvJHtkb3VibGVFbmNvZGVkVGVybVVyaX0vaW5zdGFuY2VzPyR7bmV3IFVSTFNlYXJjaFBhcmFtcyhcbiAgICAgICAgICBhcGlTZWFyY2hQYXJhbXNcbiAgICAgICAgKX1gO1xuICAgICAgICBjb25zdCBpbnN0YW5jZXMgPSAoYXdhaXQgZ2V0UGFnaW5hdGVkPGFueT4ocGF0aCkpLm1hcCgoaSkgPT5cbiAgICAgICAgICB0aGluZ0Zyb21Kc29uUHJvcGVydGllcyhpKVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gaW5zdGFuY2VzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdFdpdGhWYWx1ZShcbiAgICAgICAgICBgV2FybmluZyBhY2Nlc3Npbmc6ICR7cGF0aH07IENsYXNzIElSSSBub3QgcHJvdmlkZWRgXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgcmV0dXJuIHJlamVjdFdpdGhWYWx1ZShgRXJyb3IgYWNjZXNzaW5nOiAke3BhdGh9OyAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG4pO1xuZXhwb3J0IGNvbnN0IGdldE9udG9sb2dpZXMgPSBjcmVhdGVBc3luY1RodW5rKFxuICBcIm9udG9sb2dpZXNfb250b2xvZ2llc1wiLFxuICBhc3luYyAoeyBwYWdlLCByb3dzUGVyUGFnZSwgc2VhcmNoIH06IGFueSwgeyByZWplY3RXaXRoVmFsdWUgfSkgPT4ge1xuICAgIGlmIChzZWFyY2gubGVuZ3RoID4gMSAmJiAhc2VhcmNoLmluY2x1ZGVzKFwiIFwiKSkgc2VhcmNoID0gXCIqXCIgKyBzZWFyY2ggKyBcIipcIjtcbiAgICBjb25zdCBwYXRoID0gYGFwaS92Mi9vbnRvbG9naWVzP3BhZ2U9JHtwYWdlfSZzaXplPSR7cm93c1BlclBhZ2V9JHtcbiAgICAgIHNlYXJjaCA/IFwiJnNlYXJjaD1cIiArIHNlYXJjaCA6IFwiXCJcbiAgICB9YDtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZGF0YSA9IChhd2FpdCBnZXRQYWdpbmF0ZWQ8YW55PihwYXRoKSkubWFwKChvKSA9PiBuZXcgT250b2xvZ3kobykpO1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgcmV0dXJuIHJlamVjdFdpdGhWYWx1ZShgRXJyb3IgYWNjZXNzaW5nOiAke3BhdGh9OyAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG4pO1xuZXhwb3J0IGNvbnN0IGdldEVudGl0aWVzID0gY3JlYXRlQXN5bmNUaHVuayhcbiAgXCJvbnRvbG9naWVzX2VudGl0aWVzXCIsXG4gIGFzeW5jIChcbiAgICB7IG9udG9sb2d5SWQsIGVudGl0eVR5cGUsIHBhZ2UsIHJvd3NQZXJQYWdlLCBzZWFyY2ggfTogYW55LFxuICAgIHsgcmVqZWN0V2l0aFZhbHVlIH1cbiAgKSA9PiB7XG4gICAgY29uc3QgcGF0aCA9IGBhcGkvdjIvb250b2xvZ2llcy8ke29udG9sb2d5SWR9LyR7ZW50aXR5VHlwZX0/cGFnZT0ke3BhZ2V9JnNpemU9JHtyb3dzUGVyUGFnZX0ke1xuICAgICAgc2VhcmNoID8gXCImc2VhcmNoPVwiICsgc2VhcmNoIDogXCJcIlxuICAgIH1gO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBkYXRhID0gKGF3YWl0IGdldFBhZ2luYXRlZDxhbnk+KHBhdGgpKS5tYXAoKGUpID0+XG4gICAgICAgIHRoaW5nRnJvbUpzb25Qcm9wZXJ0aWVzKGUpXG4gICAgICApO1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgcmV0dXJuIHJlamVjdFdpdGhWYWx1ZShgRXJyb3IgYWNjZXNzaW5nOiAke3BhdGh9OyAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG4pO1xuZXhwb3J0IGNvbnN0IGdldEFuY2VzdG9ycyA9IGNyZWF0ZUFzeW5jVGh1bmsoXG4gIFwib250b2xvZ2llc19hbmNlc3RvcnNcIixcbiAgYXN5bmMgKHtcbiAgICBvbnRvbG9neUlkLFxuICAgIGVudGl0eVR5cGUsXG4gICAgZW50aXR5SXJpLFxuICAgIGxhbmcsXG4gICAgc2hvd09ic29sZXRlRW5hYmxlZCxcbiAgICBhcGlVcmwsXG4gIH06IGFueSkgPT4ge1xuICAgIGNvbnN0IGRvdWJsZUVuY29kZWRVcmkgPSBlbmNvZGVVUklDb21wb25lbnQoZW5jb2RlVVJJQ29tcG9uZW50KGVudGl0eUlyaSkpO1xuICAgIHZhciBhbmNlc3RvcnNQYWdlOiBhbnk7XG4gICAgaWYgKGVudGl0eVR5cGUgPT09IFwiY2xhc3Nlc1wiKSB7XG4gICAgICBhbmNlc3RvcnNQYWdlID0gYXdhaXQgZ2V0UGFnaW5hdGVkPGFueT4oXG4gICAgICAgIGBhcGkvdjIvb250b2xvZ2llcy8ke29udG9sb2d5SWR9L2NsYXNzZXMvJHtkb3VibGVFbmNvZGVkVXJpfS9oaWVyYXJjaGljYWxBbmNlc3RvcnM/JHtuZXcgVVJMU2VhcmNoUGFyYW1zKFxuICAgICAgICAgIHsgc2l6ZTogXCIxMDAwXCIsIGxhbmcsIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzOiBzaG93T2Jzb2xldGVFbmFibGVkIH1cbiAgICAgICAgKX1gLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIGFwaVVybFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYW5jZXN0b3JzUGFnZSA9IGF3YWl0IGdldFBhZ2luYXRlZDxhbnk+KFxuICAgICAgICBgYXBpL3YyL29udG9sb2dpZXMvJHtvbnRvbG9neUlkfS8ke2VudGl0eVR5cGV9LyR7ZG91YmxlRW5jb2RlZFVyaX0vYW5jZXN0b3JzPyR7bmV3IFVSTFNlYXJjaFBhcmFtcyhcbiAgICAgICAgICB7IHNpemU6IFwiMTAwMFwiLCBsYW5nLCBpbmNsdWRlT2Jzb2xldGVFbnRpdGllczogc2hvd09ic29sZXRlRW5hYmxlZCB9XG4gICAgICAgICl9YCxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICBhcGlVcmxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBhbmNlc3RvcnNQYWdlLmVsZW1lbnRzLm1hcCgob2JqOiBhbnkpID0+XG4gICAgICB0aGluZ0Zyb21Kc29uUHJvcGVydGllcyhvYmopXG4gICAgKTtcbiAgfVxuKTtcbmV4cG9ydCBjb25zdCBnZXRSb290RW50aXRpZXMgPSBjcmVhdGVBc3luY1RodW5rKFxuICBcIm9udG9sb2dpZXNfcm9vdHNcIixcbiAgYXN5bmMgKHtcbiAgICBvbnRvbG9neUlkLFxuICAgIGVudGl0eVR5cGUsXG4gICAgcHJlZmVycmVkUm9vdHMsXG4gICAgbGFuZyxcbiAgICBzaG93T2Jzb2xldGVFbmFibGVkLFxuICAgIGFwaVVybCxcbiAgfTogYW55KSA9PiB7XG4gICAgaWYgKGVudGl0eVR5cGUgPT09IFwiaW5kaXZpZHVhbHNcIikge1xuICAgICAgY29uc3QgW2NsYXNzZXNXaXRoSW5kaXZpZHVhbHMsIG9ycGhhbmVkSW5kaXZpZHVhbHNdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICBnZXRQYWdpbmF0ZWQ8YW55PihcbiAgICAgICAgICBgYXBpL3YyL29udG9sb2dpZXMvJHtvbnRvbG9neUlkfS9jbGFzc2VzPyR7bmV3IFVSTFNlYXJjaFBhcmFtcyh7XG4gICAgICAgICAgICBoYXNJbmRpdmlkdWFsczogXCJ0cnVlXCIsXG4gICAgICAgICAgICBzaXplOiBcIjEwMDBcIixcbiAgICAgICAgICAgIGxhbmcsXG4gICAgICAgICAgICBpbmNsdWRlT2Jzb2xldGVFbnRpdGllczogc2hvd09ic29sZXRlRW5hYmxlZCxcbiAgICAgICAgICB9KX1gLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICBhcGlVcmxcbiAgICAgICAgKSxcbiAgICAgICAgZ2V0UGFnaW5hdGVkPGFueT4oXG4gICAgICAgICAgYGFwaS92Mi9vbnRvbG9naWVzLyR7b250b2xvZ3lJZH0vaW5kaXZpZHVhbHM/JHtuZXcgVVJMU2VhcmNoUGFyYW1zKHtcbiAgICAgICAgICAgIGhhc0RpcmVjdFBhcmVudDogXCJmYWxzZVwiLFxuICAgICAgICAgICAgc2l6ZTogXCIxMDAwXCIsXG4gICAgICAgICAgICBsYW5nLFxuICAgICAgICAgICAgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM6IHNob3dPYnNvbGV0ZUVuYWJsZWQsXG4gICAgICAgICAgfSl9YCxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgYXBpVXJsXG4gICAgICAgICksXG4gICAgICBdKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVudGl0eVR5cGUsXG4gICAgICAgIHJvb3RUZXJtczogbnVsbCxcbiAgICAgICAgY2xhc3Nlc1dpdGhJbmRpdmlkdWFsczogY2xhc3Nlc1dpdGhJbmRpdmlkdWFscy5lbGVtZW50cy5tYXAoKG9iaikgPT5cbiAgICAgICAgICB0aGluZ0Zyb21Kc29uUHJvcGVydGllcyhvYmopXG4gICAgICAgICksXG4gICAgICAgIG9ycGhhbmVkSW5kaXZpZHVhbHM6IG9ycGhhbmVkSW5kaXZpZHVhbHMuZWxlbWVudHMubWFwKChvYmopID0+XG4gICAgICAgICAgdGhpbmdGcm9tSnNvblByb3BlcnRpZXMob2JqKVxuICAgICAgICApLFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGVudGl0eVR5cGUgPT09IFwiY2xhc3Nlc1wiICYmIHByZWZlcnJlZFJvb3RzKSB7XG4gICAgICBjb25zdCByb290c1BhZ2UgPSBhd2FpdCBnZXRQYWdpbmF0ZWQ8YW55PihcbiAgICAgICAgYGFwaS92Mi9vbnRvbG9naWVzLyR7b250b2xvZ3lJZH0vJHtlbnRpdHlUeXBlfT8ke25ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgICAgICAgIGlzUHJlZmVycmVkUm9vdDogXCJ0cnVlXCIsXG4gICAgICAgICAgc2l6ZTogXCIxMDAwXCIsXG4gICAgICAgICAgbGFuZyxcbiAgICAgICAgICBpbmNsdWRlT2Jzb2xldGVFbnRpdGllczogc2hvd09ic29sZXRlRW5hYmxlZCxcbiAgICAgICAgfSl9YCxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICBhcGlVcmxcbiAgICAgICk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBlbnRpdHlUeXBlLFxuICAgICAgICByb290VGVybXM6IHJvb3RzUGFnZS5lbGVtZW50cy5tYXAoKG9iaikgPT5cbiAgICAgICAgICB0aGluZ0Zyb21Kc29uUHJvcGVydGllcyhvYmopXG4gICAgICAgICksXG4gICAgICAgIGNsYXNzZXNXaXRoSW5kaXZpZHVhbHM6IG51bGwsXG4gICAgICAgIG9ycGhhbmVkSW5kaXZpZHVhbHM6IG51bGwsXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCByb290c1BhZ2UgPSBhd2FpdCBnZXRQYWdpbmF0ZWQ8YW55PihcbiAgICAgICAgYGFwaS92Mi9vbnRvbG9naWVzLyR7b250b2xvZ3lJZH0vJHtlbnRpdHlUeXBlfT8ke25ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgICAgICAgIGhhc0RpcmVjdFBhcmVudDogXCJmYWxzZVwiLFxuICAgICAgICAgIHNpemU6IFwiMTAwMFwiLFxuICAgICAgICAgIGxhbmcsXG4gICAgICAgICAgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM6IHNob3dPYnNvbGV0ZUVuYWJsZWQsXG4gICAgICAgIH0pfWAsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgYXBpVXJsXG4gICAgICApO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZW50aXR5VHlwZSxcbiAgICAgICAgcm9vdFRlcm1zOiByb290c1BhZ2UuZWxlbWVudHMubWFwKChvYmopID0+XG4gICAgICAgICAgdGhpbmdGcm9tSnNvblByb3BlcnRpZXMob2JqKVxuICAgICAgICApLFxuICAgICAgICBjbGFzc2VzV2l0aEluZGl2aWR1YWxzOiBudWxsLFxuICAgICAgICBvcnBoYW5lZEluZGl2aWR1YWxzOiBudWxsLFxuICAgICAgfTtcbiAgICB9XG4gIH1cbik7XG5leHBvcnQgY29uc3QgZ2V0Tm9kZUNoaWxkcmVuID0gY3JlYXRlQXN5bmNUaHVuayhcbiAgXCJvbnRvbG9naWVzX25vZGVfY2hpbGRyZW5cIixcbiAgYXN5bmMgKHtcbiAgICBvbnRvbG9neUlkLFxuICAgIGVudGl0eVR5cGVQbHVyYWwsXG4gICAgZW50aXR5SXJpLFxuICAgIGFic29sdXRlSWRlbnRpdHksXG4gICAgbGFuZyxcbiAgICBhcGlVcmwsXG4gICAgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM6IHNob3dPYnNvbGV0ZUVuYWJsZWQsXG4gIH06IGFueSkgPT4ge1xuICAgIGNvbnN0IGRvdWJsZUVuY29kZWRVcmkgPSBlbmNvZGVVUklDb21wb25lbnQoZW5jb2RlVVJJQ29tcG9uZW50KGVudGl0eUlyaSkpO1xuICAgIHZhciBjaGlsZHJlblBhZ2U6IGFueTtcbiAgICBpZiAoZW50aXR5VHlwZVBsdXJhbCA9PT0gXCJjbGFzc2VzXCIpIHtcbiAgICAgIGNoaWxkcmVuUGFnZSA9IGF3YWl0IGdldFBhZ2luYXRlZDxhbnk+KFxuICAgICAgICBgYXBpL3YyL29udG9sb2dpZXMvJHtvbnRvbG9neUlkfS9jbGFzc2VzLyR7ZG91YmxlRW5jb2RlZFVyaX0vaGllcmFyY2hpY2FsQ2hpbGRyZW4/JHtuZXcgVVJMU2VhcmNoUGFyYW1zKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNpemU6IFwiMTAwMFwiLFxuICAgICAgICAgICAgbGFuZyxcbiAgICAgICAgICAgIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzOiBzaG93T2Jzb2xldGVFbmFibGVkLFxuICAgICAgICAgIH1cbiAgICAgICAgKX1gLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIGFwaVVybFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKGVudGl0eVR5cGVQbHVyYWwgPT09IFwiaW5kaXZpZHVhbHNcIikge1xuICAgICAgY2hpbGRyZW5QYWdlID0gYXdhaXQgZ2V0UGFnaW5hdGVkPGFueT4oXG4gICAgICAgIGBhcGkvdjIvb250b2xvZ2llcy8ke29udG9sb2d5SWR9L2NsYXNzZXMvJHtkb3VibGVFbmNvZGVkVXJpfS9pbnN0YW5jZXM/JHtuZXcgVVJMU2VhcmNoUGFyYW1zKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNpemU6IFwiMTAwMFwiLFxuICAgICAgICAgICAgbGFuZyxcbiAgICAgICAgICAgIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzOiBzaG93T2Jzb2xldGVFbmFibGVkLFxuICAgICAgICAgIH1cbiAgICAgICAgKX1gLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIGFwaVVybFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2hpbGRyZW5QYWdlID0gYXdhaXQgZ2V0UGFnaW5hdGVkPGFueT4oXG4gICAgICAgIGBhcGkvdjIvb250b2xvZ2llcy8ke29udG9sb2d5SWR9LyR7ZW50aXR5VHlwZVBsdXJhbH0vJHtkb3VibGVFbmNvZGVkVXJpfS9jaGlsZHJlbj8ke25ldyBVUkxTZWFyY2hQYXJhbXMoXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2l6ZTogXCIxMDAwXCIsXG4gICAgICAgICAgICBsYW5nLFxuICAgICAgICAgICAgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM6IHNob3dPYnNvbGV0ZUVuYWJsZWQsXG4gICAgICAgICAgfVxuICAgICAgICApfWAsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgYXBpVXJsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgYWJzb2x1dGVJZGVudGl0eSxcbiAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblBhZ2UuZWxlbWVudHNcbiAgICAgICAgLm1hcCgob2JqOiBhbnkpID0+IHRoaW5nRnJvbUpzb25Qcm9wZXJ0aWVzKG9iaikpXG4gICAgICAgIC5tYXAoKHRlcm06IEVudGl0eSkgPT4ge1xuICAgICAgICAgIGxldCBwYXJlbnRob29kTWV0YWRhdGEgPVxuICAgICAgICAgICAgdGVybS5nZXRIaWVyYXJjaGljYWxQYXJlbnRSZWlmaWNhdGlvbkF4aW9tcyhlbnRpdHlJcmkpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpcmk6IHRlcm0uZ2V0SXJpKCksXG4gICAgICAgICAgICBhYnNvbHV0ZUlkZW50aXR5OiBhYnNvbHV0ZUlkZW50aXR5ICsgXCI7XCIgKyB0ZXJtLmdldElyaSgpLFxuICAgICAgICAgICAgdGl0bGU6IHRlcm0uZ2V0TmFtZSgpLFxuICAgICAgICAgICAgZXhwYW5kYWJsZTogdGVybS5oYXNDaGlsZHJlbigpLFxuICAgICAgICAgICAgZW50aXR5OiB0ZXJtLFxuICAgICAgICAgICAgbnVtRGVzY2VuZGFudHM6XG4gICAgICAgICAgICAgIHRlcm0uZ2V0TnVtSGllcmFyY2hpY2FsRGVzY2VuZGFudHMoKSB8fCB0ZXJtLmdldE51bURlc2NlbmRhbnRzKCksXG4gICAgICAgICAgICBwYXJlbnRSZWxhdGlvblRvQ2hpbGQ6XG4gICAgICAgICAgICAgIChwYXJlbnRob29kTWV0YWRhdGEgJiZcbiAgICAgICAgICAgICAgICBwYXJlbnRob29kTWV0YWRhdGFbXCJwYXJlbnRSZWxhdGlvblRvQ2hpbGRcIl0/LlswXSkgfHxcbiAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIGNoaWxkUmVsYXRpb25Ub1BhcmVudDpcbiAgICAgICAgICAgICAgKHBhcmVudGhvb2RNZXRhZGF0YSAmJlxuICAgICAgICAgICAgICAgIHBhcmVudGhvb2RNZXRhZGF0YVtcImNoaWxkUmVsYXRpb25Ub1BhcmVudFwiXT8uWzBdKSB8fFxuICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgIH07XG4gICAgICAgIH0pLFxuICAgIH07XG4gIH1cbik7XG5cbmNvbnN0IG9udG9sb2dpZXNTbGljZSA9IGNyZWF0ZVNsaWNlKHtcbiAgbmFtZTogXCJvbnRvbG9naWVzXCIsXG4gIGluaXRpYWxTdGF0ZSxcbiAgcmVkdWNlcnM6IHt9LFxuICBleHRyYVJlZHVjZXJzOiAoYnVpbGRlcikgPT4ge1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShcbiAgICAgIGdldE9udG9sb2d5LmZ1bGZpbGxlZCxcbiAgICAgIChzdGF0ZTogT250b2xvZ2llc1N0YXRlLCBhY3Rpb246IFBheWxvYWRBY3Rpb248T250b2xvZ3k+KSA9PiB7XG4gICAgICAgIHN0YXRlLm9udG9sb2d5ID0gYWN0aW9uLnBheWxvYWQ7XG4gICAgICAgIHN0YXRlLmxvYWRpbmdPbnRvbG9neSA9IGZhbHNlO1xuICAgICAgfVxuICAgICk7XG4gICAgYnVpbGRlci5hZGRDYXNlKGdldE9udG9sb2d5LnBlbmRpbmcsIChzdGF0ZTogT250b2xvZ2llc1N0YXRlKSA9PiB7XG4gICAgICBzdGF0ZS5sb2FkaW5nT250b2xvZ3kgPSB0cnVlO1xuICAgICAgc3RhdGUuZXJyb3JNZXNzYWdlID0gaW5pdGlhbFN0YXRlLmVycm9yTWVzc2FnZTtcbiAgICB9KTtcbiAgICBidWlsZGVyLmFkZENhc2UoXG4gICAgICBnZXRPbnRvbG9neS5yZWplY3RlZCxcbiAgICAgIChzdGF0ZTogT250b2xvZ2llc1N0YXRlLCBlcnJvcjogYW55KSA9PiB7XG4gICAgICAgIHN0YXRlLm9udG9sb2d5ID0gaW5pdGlhbFN0YXRlLm9udG9sb2d5O1xuICAgICAgICBzdGF0ZS5sb2FkaW5nT250b2xvZ3kgPSBmYWxzZTtcbiAgICAgICAgc3RhdGUuZXJyb3JNZXNzYWdlID0gZXJyb3IucGF5bG9hZDtcbiAgICAgIH1cbiAgICApO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShcbiAgICAgIGdldEVudGl0eVdpdGhUeXBlLmZ1bGZpbGxlZCxcbiAgICAgIChzdGF0ZTogT250b2xvZ2llc1N0YXRlLCBhY3Rpb246IFBheWxvYWRBY3Rpb248RW50aXR5PikgPT4ge1xuICAgICAgICBzdGF0ZS5lbnRpdHkgPSBhY3Rpb24ucGF5bG9hZDtcbiAgICAgICAgc3RhdGUubG9hZGluZ0VudGl0eSA9IGZhbHNlO1xuICAgICAgfVxuICAgICk7XG4gICAgYnVpbGRlci5hZGRDYXNlKGdldEVudGl0eVdpdGhUeXBlLnBlbmRpbmcsIChzdGF0ZTogT250b2xvZ2llc1N0YXRlKSA9PiB7XG4gICAgICBzdGF0ZS5sb2FkaW5nRW50aXR5ID0gdHJ1ZTtcbiAgICAgIHN0YXRlLmVycm9yTWVzc2FnZSA9IGluaXRpYWxTdGF0ZS5lcnJvck1lc3NhZ2U7XG4gICAgfSk7XG4gICAgYnVpbGRlci5hZGRDYXNlKFxuICAgICAgZ2V0RW50aXR5V2l0aFR5cGUucmVqZWN0ZWQsXG4gICAgICAoc3RhdGU6IE9udG9sb2dpZXNTdGF0ZSwgZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICBzdGF0ZS5sb2FkaW5nRW50aXR5ID0gZmFsc2U7XG4gICAgICAgIHN0YXRlLmVudGl0eSA9IGluaXRpYWxTdGF0ZS5lbnRpdHk7XG4gICAgICAgIHN0YXRlLmVycm9yTWVzc2FnZSA9IGVycm9yLnBheWxvYWQ7XG4gICAgICB9XG4gICAgKTtcbiAgICBidWlsZGVyLmFkZENhc2UoXG4gICAgICBnZXRFbnRpdHkuZnVsZmlsbGVkLFxuICAgICAgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUsIGFjdGlvbjogUGF5bG9hZEFjdGlvbjxFbnRpdHk+KSA9PiB7XG4gICAgICAgIHN0YXRlLmVudGl0eSA9IGFjdGlvbi5wYXlsb2FkO1xuICAgICAgICBzdGF0ZS5sb2FkaW5nRW50aXR5ID0gZmFsc2U7XG4gICAgICB9XG4gICAgKTtcbiAgICBidWlsZGVyLmFkZENhc2UoZ2V0RW50aXR5LnBlbmRpbmcsIChzdGF0ZTogT250b2xvZ2llc1N0YXRlKSA9PiB7XG4gICAgICBzdGF0ZS5sb2FkaW5nRW50aXR5ID0gdHJ1ZTtcbiAgICAgIHN0YXRlLmVycm9yTWVzc2FnZSA9IGluaXRpYWxTdGF0ZS5lcnJvck1lc3NhZ2U7XG4gICAgfSk7XG4gICAgYnVpbGRlci5hZGRDYXNlKFxuICAgICAgZ2V0RW50aXR5LnJlamVjdGVkLFxuICAgICAgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUsIGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgc3RhdGUubG9hZGluZ0VudGl0eSA9IGZhbHNlO1xuICAgICAgICBzdGF0ZS5lbnRpdHkgPSBpbml0aWFsU3RhdGUuZW50aXR5O1xuICAgICAgICBzdGF0ZS5lcnJvck1lc3NhZ2UgPSBlcnJvci5wYXlsb2FkO1xuICAgICAgfVxuICAgICk7XG4gICAgYnVpbGRlci5hZGRDYXNlKFxuICAgICAgZ2V0Q2xhc3NJbnN0YW5jZXMuZnVsZmlsbGVkLFxuICAgICAgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUsIGFjdGlvbjogUGF5bG9hZEFjdGlvbjxQYWdlPEVudGl0eT4+KSA9PiB7XG4gICAgICAgIHN0YXRlLmNsYXNzSW5zdGFuY2VzID0gYWN0aW9uLnBheWxvYWQ7XG4gICAgICAgIHN0YXRlLmxvYWRpbmdDbGFzc0luc3RhbmNlcyA9IGZhbHNlO1xuICAgICAgfVxuICAgICk7XG4gICAgYnVpbGRlci5hZGRDYXNlKGdldENsYXNzSW5zdGFuY2VzLnBlbmRpbmcsIChzdGF0ZTogT250b2xvZ2llc1N0YXRlKSA9PiB7XG4gICAgICBzdGF0ZS5sb2FkaW5nQ2xhc3NJbnN0YW5jZXMgPSB0cnVlO1xuICAgICAgc3RhdGUuZXJyb3JNZXNzYWdlID0gaW5pdGlhbFN0YXRlLmVycm9yTWVzc2FnZTtcbiAgICB9KTtcbiAgICBidWlsZGVyLmFkZENhc2UoXG4gICAgICBnZXRDbGFzc0luc3RhbmNlcy5yZWplY3RlZCxcbiAgICAgIChzdGF0ZTogT250b2xvZ2llc1N0YXRlLCBlcnJvcjogYW55KSA9PiB7XG4gICAgICAgIHN0YXRlLmxvYWRpbmdDbGFzc0luc3RhbmNlcyA9IGZhbHNlO1xuICAgICAgICBzdGF0ZS5jbGFzc0luc3RhbmNlcyA9IGluaXRpYWxTdGF0ZS5jbGFzc0luc3RhbmNlcztcbiAgICAgICAgc3RhdGUuZXJyb3JNZXNzYWdlID0gZXJyb3IucGF5bG9hZDtcbiAgICAgIH1cbiAgICApO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShnZXRBbmNlc3RvcnMucGVuZGluZywgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUpID0+IHtcbiAgICAgICsrc3RhdGUubnVtUGVuZGluZ1RyZWVSZXF1ZXN0cztcbiAgICB9KTtcbiAgICBidWlsZGVyLmFkZENhc2UoXG4gICAgICBnZXRBbmNlc3RvcnMuZnVsZmlsbGVkLFxuICAgICAgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUsIGFjdGlvbjogUGF5bG9hZEFjdGlvbjxFbnRpdHlbXT4pID0+IHtcbiAgICAgICAgbGV0IHsgcm9vdE5vZGVzLCBub2RlQ2hpbGRyZW4sIGF1dG9tYXRpY2FsbHlFeHBhbmRlZE5vZGVzIH0gPVxuICAgICAgICAgIGNyZWF0ZVRyZWVGcm9tRW50aXRpZXMoXG4gICAgICAgICAgICBbc3RhdGUuZW50aXR5ISwgLi4uYWN0aW9uLnBheWxvYWRdLFxuICAgICAgICAgICAgc3RhdGUucHJlZmVycmVkUm9vdHMsXG4gICAgICAgICAgICBzdGF0ZS5vbnRvbG9neSFcbiAgICAgICAgICApO1xuICAgICAgICBzdGF0ZS5yb290Tm9kZXMgPSByb290Tm9kZXM7XG4gICAgICAgIHN0YXRlLm5vZGVDaGlsZHJlbiA9IG5vZGVDaGlsZHJlbjtcbiAgICAgICAgc3RhdGUuYXV0b21hdGljYWxseUV4cGFuZGVkTm9kZXMgPSBBcnJheS5mcm9tKFxuICAgICAgICAgIG5ldyBTZXQoW1xuICAgICAgICAgICAgLi4uc3RhdGUuYXV0b21hdGljYWxseUV4cGFuZGVkTm9kZXMsXG4gICAgICAgICAgICAuLi5BcnJheS5mcm9tKGF1dG9tYXRpY2FsbHlFeHBhbmRlZE5vZGVzKSxcbiAgICAgICAgICBdKVxuICAgICAgICApO1xuICAgICAgICAtLXN0YXRlLm51bVBlbmRpbmdUcmVlUmVxdWVzdHM7XG4gICAgICB9XG4gICAgKTtcbiAgICBidWlsZGVyLmFkZENhc2UoZ2V0QW5jZXN0b3JzLnJlamVjdGVkLCAoc3RhdGU6IE9udG9sb2dpZXNTdGF0ZSkgPT4ge1xuICAgICAgLS1zdGF0ZS5udW1QZW5kaW5nVHJlZVJlcXVlc3RzO1xuICAgIH0pO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShnZXROb2RlQ2hpbGRyZW4ucGVuZGluZywgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUpID0+IHtcbiAgICAgICsrc3RhdGUubnVtUGVuZGluZ1RyZWVSZXF1ZXN0cztcbiAgICB9KTtcbiAgICBidWlsZGVyLmFkZENhc2UoXG4gICAgICBnZXROb2RlQ2hpbGRyZW4uZnVsZmlsbGVkLFxuICAgICAgKFxuICAgICAgICBzdGF0ZTogT250b2xvZ2llc1N0YXRlLFxuICAgICAgICBhY3Rpb246IFBheWxvYWRBY3Rpb248e1xuICAgICAgICAgIGFic29sdXRlSWRlbnRpdHk6IHN0cmluZztcbiAgICAgICAgICBjaGlsZHJlbjogVHJlZU5vZGVbXTtcbiAgICAgICAgfT5cbiAgICAgICkgPT4ge1xuICAgICAgICBzdGF0ZS5ub2RlQ2hpbGRyZW4gPSB7XG4gICAgICAgICAgLi4uc3RhdGUubm9kZUNoaWxkcmVuLFxuICAgICAgICAgIFthY3Rpb24ucGF5bG9hZC5hYnNvbHV0ZUlkZW50aXR5XTogYWN0aW9uLnBheWxvYWQuY2hpbGRyZW4sXG4gICAgICAgIH07XG4gICAgICAgIHN0YXRlLm5vZGVzV2l0aENoaWxkcmVuTG9hZGVkLnB1c2goYWN0aW9uLnBheWxvYWQuYWJzb2x1dGVJZGVudGl0eSk7XG4gICAgICAgIC0tc3RhdGUubnVtUGVuZGluZ1RyZWVSZXF1ZXN0cztcbiAgICAgIH1cbiAgICApO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShnZXROb2RlQ2hpbGRyZW4ucmVqZWN0ZWQsIChzdGF0ZTogT250b2xvZ2llc1N0YXRlKSA9PiB7XG4gICAgICAtLXN0YXRlLm51bVBlbmRpbmdUcmVlUmVxdWVzdHM7XG4gICAgfSk7XG4gICAgYnVpbGRlci5hZGRDYXNlKGdldFJvb3RFbnRpdGllcy5wZW5kaW5nLCAoc3RhdGU6IE9udG9sb2dpZXNTdGF0ZSkgPT4ge1xuICAgICAgKytzdGF0ZS5udW1QZW5kaW5nVHJlZVJlcXVlc3RzO1xuICAgIH0pO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShcbiAgICAgIGdldFJvb3RFbnRpdGllcy5mdWxmaWxsZWQsXG4gICAgICAoc3RhdGU6IE9udG9sb2dpZXNTdGF0ZSwgYWN0aW9uOiBQYXlsb2FkQWN0aW9uPGFueT4pID0+IHtcbiAgICAgICAgbGV0IHsgcm9vdFRlcm1zLCBjbGFzc2VzV2l0aEluZGl2aWR1YWxzLCBvcnBoYW5lZEluZGl2aWR1YWxzIH0gPVxuICAgICAgICAgIGFjdGlvbi5wYXlsb2FkO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhcInJvb3RUZXJtc1wiKTtcbiAgICAgICAgLy8gY29uc29sZS5kaXIocm9vdFRlcm1zKTtcbiAgICAgICAgbGV0IHsgcm9vdE5vZGVzLCBub2RlQ2hpbGRyZW4sIGF1dG9tYXRpY2FsbHlFeHBhbmRlZE5vZGVzIH0gPVxuICAgICAgICAgIGNyZWF0ZVRyZWVGcm9tRW50aXRpZXMoXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIC4uLihyb290VGVybXMgfHwgW10pLFxuICAgICAgICAgICAgICAuLi4oY2xhc3Nlc1dpdGhJbmRpdmlkdWFscyB8fCBbXSksXG4gICAgICAgICAgICAgIC4uLihvcnBoYW5lZEluZGl2aWR1YWxzIHx8IFtdKSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBzdGF0ZS5wcmVmZXJyZWRSb290cyxcbiAgICAgICAgICAgIHN0YXRlLm9udG9sb2d5IVxuICAgICAgICAgICk7XG5cbiAgICAgICAgc3RhdGUucm9vdE5vZGVzID0gcm9vdE5vZGVzO1xuICAgICAgICBzdGF0ZS5ub2RlQ2hpbGRyZW4gPSBub2RlQ2hpbGRyZW47XG4gICAgICAgIHN0YXRlLmF1dG9tYXRpY2FsbHlFeHBhbmRlZE5vZGVzID0gQXJyYXkuZnJvbShcbiAgICAgICAgICBuZXcgU2V0KFtcbiAgICAgICAgICAgIC4uLnN0YXRlLmF1dG9tYXRpY2FsbHlFeHBhbmRlZE5vZGVzLFxuICAgICAgICAgICAgLi4uQXJyYXkuZnJvbShhdXRvbWF0aWNhbGx5RXhwYW5kZWROb2RlcyksXG4gICAgICAgICAgXSlcbiAgICAgICAgKTtcbiAgICAgICAgLS1zdGF0ZS5udW1QZW5kaW5nVHJlZVJlcXVlc3RzO1xuICAgICAgfVxuICAgICk7XG4gICAgYnVpbGRlci5hZGRDYXNlKGdldFJvb3RFbnRpdGllcy5yZWplY3RlZCwgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUpID0+IHtcbiAgICAgIC0tc3RhdGUubnVtUGVuZGluZ1RyZWVSZXF1ZXN0cztcbiAgICB9KTtcbiAgICBidWlsZGVyLmFkZENhc2UoXG4gICAgICBnZXRPbnRvbG9naWVzLmZ1bGZpbGxlZCxcbiAgICAgIChzdGF0ZTogT250b2xvZ2llc1N0YXRlLCBhY3Rpb246IFBheWxvYWRBY3Rpb248UGFnZTxPbnRvbG9neT4+KSA9PiB7XG4gICAgICAgIHN0YXRlLm9udG9sb2dpZXMgPSBhY3Rpb24ucGF5bG9hZC5lbGVtZW50cztcbiAgICAgICAgc3RhdGUudG90YWxPbnRvbG9naWVzID0gYWN0aW9uLnBheWxvYWQudG90YWxFbGVtZW50cztcbiAgICAgICAgc3RhdGUubG9hZGluZ09udG9sb2dpZXMgPSBmYWxzZTtcbiAgICAgIH1cbiAgICApO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShnZXRPbnRvbG9naWVzLnBlbmRpbmcsIChzdGF0ZTogT250b2xvZ2llc1N0YXRlKSA9PiB7XG4gICAgICBzdGF0ZS5sb2FkaW5nT250b2xvZ2llcyA9IHRydWU7XG4gICAgICBzdGF0ZS5lcnJvck1lc3NhZ2UgPSBpbml0aWFsU3RhdGUuZXJyb3JNZXNzYWdlO1xuICAgIH0pO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShcbiAgICAgIGdldE9udG9sb2dpZXMucmVqZWN0ZWQsXG4gICAgICAoc3RhdGU6IE9udG9sb2dpZXNTdGF0ZSwgZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICBzdGF0ZS5vbnRvbG9naWVzID0gaW5pdGlhbFN0YXRlLm9udG9sb2dpZXM7XG4gICAgICAgIHN0YXRlLmxvYWRpbmdPbnRvbG9naWVzID0gZmFsc2U7XG4gICAgICAgIHN0YXRlLmVycm9yTWVzc2FnZSA9IGVycm9yLnBheWxvYWQ7XG4gICAgICB9XG4gICAgKTtcbiAgICBidWlsZGVyLmFkZENhc2UoXG4gICAgICBnZXRFbnRpdGllcy5mdWxmaWxsZWQsXG4gICAgICAoc3RhdGU6IE9udG9sb2dpZXNTdGF0ZSwgYWN0aW9uOiBQYXlsb2FkQWN0aW9uPFBhZ2U8RW50aXR5Pj4pID0+IHtcbiAgICAgICAgc3RhdGUuZW50aXRpZXMgPSBhY3Rpb24ucGF5bG9hZC5lbGVtZW50cztcbiAgICAgICAgc3RhdGUudG90YWxFbnRpdGllcyA9IGFjdGlvbi5wYXlsb2FkLnRvdGFsRWxlbWVudHM7XG4gICAgICAgIHN0YXRlLmxvYWRpbmdFbnRpdGllcyA9IGZhbHNlO1xuICAgICAgfVxuICAgICk7XG4gICAgYnVpbGRlci5hZGRDYXNlKGdldEVudGl0aWVzLnBlbmRpbmcsIChzdGF0ZTogT250b2xvZ2llc1N0YXRlKSA9PiB7XG4gICAgICBzdGF0ZS5sb2FkaW5nRW50aXRpZXMgPSB0cnVlO1xuICAgICAgc3RhdGUuZXJyb3JNZXNzYWdlID0gaW5pdGlhbFN0YXRlLmVycm9yTWVzc2FnZTtcbiAgICB9KTtcbiAgICBidWlsZGVyLmFkZENhc2UoXG4gICAgICBnZXRFbnRpdGllcy5yZWplY3RlZCxcbiAgICAgIChzdGF0ZTogT250b2xvZ2llc1N0YXRlLCBlcnJvcjogYW55KSA9PiB7XG4gICAgICAgIHN0YXRlLmVudGl0aWVzID0gaW5pdGlhbFN0YXRlLmVudGl0aWVzO1xuICAgICAgICBzdGF0ZS5sb2FkaW5nRW50aXRpZXMgPSBmYWxzZTtcbiAgICAgICAgc3RhdGUuZXJyb3JNZXNzYWdlID0gZXJyb3IucGF5bG9hZDtcbiAgICAgIH1cbiAgICApO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShyZXNldFRyZWVDb250ZW50LCAoc3RhdGU6IE9udG9sb2dpZXNTdGF0ZSkgPT4ge1xuICAgICAgc3RhdGUubm9kZXNXaXRoQ2hpbGRyZW5Mb2FkZWQgPSBbXTtcbiAgICAgIHN0YXRlLm5vZGVDaGlsZHJlbiA9IHt9O1xuICAgICAgc3RhdGUucm9vdE5vZGVzID0gW107XG4gICAgICBzdGF0ZS5hdXRvbWF0aWNhbGx5RXhwYW5kZWROb2RlcyA9IFtdO1xuICAgIH0pO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShcbiAgICAgIHJlc2V0VHJlZVNldHRpbmdzLFxuICAgICAgKFxuICAgICAgICBzdGF0ZTogT250b2xvZ2llc1N0YXRlLFxuICAgICAgICBhY3Rpb246IFBheWxvYWRBY3Rpb248eyBlbnRpdHlUeXBlOiBzdHJpbmc7IHNlbGVjdGVkRW50aXR5PzogRW50aXR5IH0+XG4gICAgICApID0+IHtcbiAgICAgICAgc3RhdGUucHJlZmVycmVkUm9vdHMgPVxuICAgICAgICAgIGFjdGlvbi5wYXlsb2FkLmVudGl0eVR5cGUgPT09IFwiY2xhc3Nlc1wiICYmXG4gICAgICAgICAgc3RhdGUub250b2xvZ3khLmdldFByZWZlcnJlZFJvb3RzKCkubGVuZ3RoID4gMDtcblxuICAgICAgICBpZiAoYWN0aW9uLnBheWxvYWQuc2VsZWN0ZWRFbnRpdHkpIHtcbiAgICAgICAgICBsZXQgc2VsZWN0ZWRJc0Rlc2NlbmRhbnRPZlByZWZlcnJlZFJvb3RzID0gZmFsc2U7XG4gICAgICAgICAgZm9yIChsZXQgcm9vdCBvZiBzdGF0ZS5vbnRvbG9neSEuZ2V0UHJlZmVycmVkUm9vdHMoKSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBhY3Rpb24ucGF5bG9hZC5zZWxlY3RlZEVudGl0eVxuICAgICAgICAgICAgICAgIC5nZXRIaWVyYXJjaGljYWxBbmNlc3RvcklyaXMoKVxuICAgICAgICAgICAgICAgIC5pbmRleE9mKHJvb3QpICE9PSAtMVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHNlbGVjdGVkSXNEZXNjZW5kYW50T2ZQcmVmZXJyZWRSb290cyA9IHRydWU7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIXNlbGVjdGVkSXNEZXNjZW5kYW50T2ZQcmVmZXJyZWRSb290cykge1xuICAgICAgICAgICAgc3RhdGUucHJlZmVycmVkUm9vdHMgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGUuZGlzcGxheU9ic29sZXRlID0gZmFsc2U7XG4gICAgICAgIHN0YXRlLmRpc3BsYXlTaWJsaW5ncyA9IGZhbHNlO1xuICAgICAgICBzdGF0ZS5kaXNwbGF5Q291bnRzID0gdHJ1ZTtcbiAgICAgICAgc3RhdGUubWFudWFsbHlFeHBhbmRlZE5vZGVzID0gW107XG4gICAgICB9XG4gICAgKTtcbiAgICBidWlsZGVyLmFkZENhc2UoZW5hYmxlUHJlZmVycmVkUm9vdHMsIChzdGF0ZTogT250b2xvZ2llc1N0YXRlKSA9PiB7XG4gICAgICBzdGF0ZS5wcmVmZXJyZWRSb290cyA9IHRydWU7XG4gICAgfSk7XG4gICAgYnVpbGRlci5hZGRDYXNlKGRpc2FibGVQcmVmZXJyZWRSb290cywgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUpID0+IHtcbiAgICAgIHN0YXRlLnByZWZlcnJlZFJvb3RzID0gZmFsc2U7XG4gICAgfSk7XG4gICAgYnVpbGRlci5hZGRDYXNlKHNob3dPYnNvbGV0ZSwgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUpID0+IHtcbiAgICAgIHN0YXRlLmRpc3BsYXlPYnNvbGV0ZSA9IHRydWU7XG4gICAgfSk7XG4gICAgYnVpbGRlci5hZGRDYXNlKGhpZGVPYnNvbGV0ZSwgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUpID0+IHtcbiAgICAgIHN0YXRlLmRpc3BsYXlPYnNvbGV0ZSA9IGZhbHNlO1xuICAgIH0pO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShzaG93U2libGluZ3MsIChzdGF0ZTogT250b2xvZ2llc1N0YXRlKSA9PiB7XG4gICAgICBzdGF0ZS5kaXNwbGF5U2libGluZ3MgPSB0cnVlO1xuICAgIH0pO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShoaWRlU2libGluZ3MsIChzdGF0ZTogT250b2xvZ2llc1N0YXRlKSA9PiB7XG4gICAgICBzdGF0ZS5kaXNwbGF5U2libGluZ3MgPSBmYWxzZTtcbiAgICB9KTtcbiAgICBidWlsZGVyLmFkZENhc2Uoc2hvd0NvdW50cywgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUpID0+IHtcbiAgICAgIHN0YXRlLmRpc3BsYXlDb3VudHMgPSB0cnVlO1xuICAgIH0pO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShoaWRlQ291bnRzLCAoc3RhdGU6IE9udG9sb2dpZXNTdGF0ZSkgPT4ge1xuICAgICAgc3RhdGUuZGlzcGxheUNvdW50cyA9IGZhbHNlO1xuICAgIH0pO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShcbiAgICAgIG9wZW5Ob2RlLFxuICAgICAgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUsIGFjdGlvbjogUGF5bG9hZEFjdGlvbjxUcmVlTm9kZT4pID0+IHtcbiAgICAgICAgc3RhdGUubWFudWFsbHlFeHBhbmRlZE5vZGVzID0gQXJyYXkuZnJvbShcbiAgICAgICAgICBuZXcgU2V0KFtcbiAgICAgICAgICAgIC4uLnN0YXRlLm1hbnVhbGx5RXhwYW5kZWROb2RlcyxcbiAgICAgICAgICAgIGFjdGlvbi5wYXlsb2FkLmFic29sdXRlSWRlbnRpdHksXG4gICAgICAgICAgXSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICApO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShcbiAgICAgIGNsb3NlTm9kZSxcbiAgICAgIChzdGF0ZTogT250b2xvZ2llc1N0YXRlLCBhY3Rpb246IFBheWxvYWRBY3Rpb248VHJlZU5vZGU+KSA9PiB7XG4gICAgICAgIHN0YXRlLm1hbnVhbGx5RXhwYW5kZWROb2RlcyA9IHN0YXRlLm1hbnVhbGx5RXhwYW5kZWROb2Rlcy5maWx0ZXIoXG4gICAgICAgICAgKG5vZGUpID0+IG5vZGUgIT09IGFjdGlvbi5wYXlsb2FkLmFic29sdXRlSWRlbnRpdHlcbiAgICAgICAgKTtcbiAgICAgICAgc3RhdGUuYXV0b21hdGljYWxseUV4cGFuZGVkTm9kZXMgPVxuICAgICAgICAgIHN0YXRlLmF1dG9tYXRpY2FsbHlFeHBhbmRlZE5vZGVzLmZpbHRlcihcbiAgICAgICAgICAgIChub2RlKSA9PiBub2RlICE9PSBhY3Rpb24ucGF5bG9hZC5hYnNvbHV0ZUlkZW50aXR5XG4gICAgICAgICAgKTtcbiAgICAgICAgZGVsZXRlIHN0YXRlLm5vZGVDaGlsZHJlblthY3Rpb24ucGF5bG9hZC5hYnNvbHV0ZUlkZW50aXR5XTtcbiAgICAgICAgc3RhdGUubm9kZXNXaXRoQ2hpbGRyZW5Mb2FkZWQgPSBzdGF0ZS5ub2Rlc1dpdGhDaGlsZHJlbkxvYWRlZC5maWx0ZXIoXG4gICAgICAgICAgKGFic0lkKSA9PiBhYnNJZCAhPT0gYWN0aW9uLnBheWxvYWQuYWJzb2x1dGVJZGVudGl0eVxuICAgICAgICApO1xuICAgICAgfVxuICAgICk7XG4gIH0sXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgb250b2xvZ2llc1NsaWNlLnJlZHVjZXI7XG4iLCAiaW1wb3J0IHsgY3JlYXRlQXN5bmNUaHVuaywgY3JlYXRlU2xpY2UsIFBheWxvYWRBY3Rpb24gfSBmcm9tIFwiQHJlZHV4anMvdG9vbGtpdFwiO1xuaW1wb3J0IHsgZ2V0UGFnaW5hdGVkLCBQYWdlIH0gZnJvbSBcIi4uLy4uL2FwcC9hcGlcIjtcbmltcG9ydCB7IHRoaW5nRnJvbUpzb25Qcm9wZXJ0aWVzIH0gZnJvbSBcIi4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQgRW50aXR5IGZyb20gXCIuLi8uLi9tb2RlbC9FbnRpdHlcIjtcblxuZXhwb3J0IGludGVyZmFjZSBTZWFyY2hTdGF0ZSB7XG4gIHNlYXJjaFJlc3VsdHM6IEVudGl0eVtdO1xuICBsb2FkaW5nU2VhcmNoUmVzdWx0czogYm9vbGVhbjtcbiAgdG90YWxTZWFyY2hSZXN1bHRzOiBudW1iZXI7XG4gIGZhY2V0czogT2JqZWN0O1xufVxuY29uc3QgaW5pdGlhbFN0YXRlOiBTZWFyY2hTdGF0ZSA9IHtcbiAgc2VhcmNoUmVzdWx0czogW10sXG4gIGxvYWRpbmdTZWFyY2hSZXN1bHRzOiBmYWxzZSxcbiAgdG90YWxTZWFyY2hSZXN1bHRzOiAwLFxuICBmYWNldHM6IE9iamVjdC5jcmVhdGUobnVsbCksXG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U2VhcmNoUmVzdWx0cyA9IGNyZWF0ZUFzeW5jVGh1bmsoXG4gIFwic2VhcmNoX3Jlc3VsdHNcIixcbiAgYXN5bmMgKFxuICAgIHsgcGFnZSwgcm93c1BlclBhZ2UsIHNlYXJjaCwgb250b2xvZ3lJZCwgdHlwZSwgc2VhcmNoUGFyYW1zIH06IGFueSxcbiAgICB7IHJlamVjdFdpdGhWYWx1ZSB9XG4gICkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBsZXQgcXVlcnkgPSB7XG4gICAgICAgIHNlYXJjaDogc2VhcmNoLFxuICAgICAgICBzaXplOiByb3dzUGVyUGFnZSxcbiAgICAgICAgcGFnZSxcbiAgICAgICAgZmFjZXRGaWVsZHM6IFwib250b2xvZ3lJZCB0eXBlXCIsXG4gICAgICAgIG9udG9sb2d5SWQ6IG9udG9sb2d5SWQubGVuZ3RoID4gMCA/IG9udG9sb2d5SWRbMF0gOiBudWxsLFxuICAgICAgICB0eXBlOiB0eXBlLmxlbmd0aCA+IDAgPyB0eXBlWzBdIDogbnVsbCxcbiAgICAgICAgLy8gbGFuZzogXCJhbGxcIixcblxuICAgICAgICAuLi5PYmplY3QuZnJvbUVudHJpZXMoc2VhcmNoUGFyYW1zIGFzIFVSTFNlYXJjaFBhcmFtcyksXG4gICAgICB9O1xuICAgICAgZm9yIChjb25zdCBwYXJhbSBpbiBxdWVyeSkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgcXVlcnlbcGFyYW1dID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICBxdWVyeVtwYXJhbV0gPT09IG51bGwgfHxcbiAgICAgICAgICBxdWVyeVtwYXJhbV0gPT09IFwiXCJcbiAgICAgICAgKSB7XG4gICAgICAgICAgZGVsZXRlIHF1ZXJ5W3BhcmFtXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgcGFyc2VkUXVlcnkgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHF1ZXJ5KTtcbiAgICAgIC8vIHJlbW92ZSByZWR1bmRhbnQgcGFyYW1ldGVyc1xuICAgICAgaWYgKHNlYXJjaFBhcmFtcy5nZXQoXCJvbnRvbG9neVwiKSkge1xuICAgICAgICBwYXJzZWRRdWVyeS5zZXQoXCJvbnRvbG9neUlkXCIsIHNlYXJjaFBhcmFtcy5nZXQoXCJvbnRvbG9neVwiKSk7XG4gICAgICAgIHBhcnNlZFF1ZXJ5LmRlbGV0ZShcIm9udG9sb2d5XCIpO1xuICAgICAgfVxuICAgICAgaWYgKHNlYXJjaFBhcmFtcy5nZXQoXCJxXCIpKSBwYXJzZWRRdWVyeS5kZWxldGUoXCJxXCIpO1xuXG4gICAgICBjb25zdCBkYXRhID0gKFxuICAgICAgICBhd2FpdCBnZXRQYWdpbmF0ZWQ8YW55PihgYXBpL3YyL2VudGl0aWVzPyR7cGFyc2VkUXVlcnl9YClcbiAgICAgICkubWFwKChlKSA9PiB0aGluZ0Zyb21Kc29uUHJvcGVydGllcyhlKSk7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICByZXR1cm4gcmVqZWN0V2l0aFZhbHVlKGVycm9yLm1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuKTtcblxuY29uc3Qgc2VhcmNoU2xpY2UgPSBjcmVhdGVTbGljZSh7XG4gIG5hbWU6IFwic2VhcmNoXCIsXG4gIGluaXRpYWxTdGF0ZSxcbiAgcmVkdWNlcnM6IHt9LFxuICBleHRyYVJlZHVjZXJzOiAoYnVpbGRlcikgPT4ge1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShcbiAgICAgIGdldFNlYXJjaFJlc3VsdHMuZnVsZmlsbGVkLFxuICAgICAgKHN0YXRlOiBTZWFyY2hTdGF0ZSwgYWN0aW9uOiBQYXlsb2FkQWN0aW9uPFBhZ2U8RW50aXR5Pj4pID0+IHtcbiAgICAgICAgc3RhdGUuc2VhcmNoUmVzdWx0cyA9IGFjdGlvbi5wYXlsb2FkLmVsZW1lbnRzO1xuICAgICAgICBzdGF0ZS50b3RhbFNlYXJjaFJlc3VsdHMgPSBhY3Rpb24ucGF5bG9hZC50b3RhbEVsZW1lbnRzO1xuICAgICAgICBzdGF0ZS5mYWNldHMgPSBhY3Rpb24ucGF5bG9hZC5mYWNldEZpZWxkc1RvQ291bnRzO1xuICAgICAgICBzdGF0ZS5sb2FkaW5nU2VhcmNoUmVzdWx0cyA9IGZhbHNlO1xuICAgICAgfVxuICAgICk7XG4gICAgYnVpbGRlci5hZGRDYXNlKGdldFNlYXJjaFJlc3VsdHMucGVuZGluZywgKHN0YXRlOiBTZWFyY2hTdGF0ZSkgPT4ge1xuICAgICAgc3RhdGUubG9hZGluZ1NlYXJjaFJlc3VsdHMgPSB0cnVlO1xuICAgIH0pO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShnZXRTZWFyY2hSZXN1bHRzLnJlamVjdGVkLCAoc3RhdGU6IFNlYXJjaFN0YXRlKSA9PiB7XG4gICAgICBzdGF0ZS5sb2FkaW5nU2VhcmNoUmVzdWx0cyA9IGZhbHNlO1xuICAgICAgc3RhdGUuc2VhcmNoUmVzdWx0cyA9IGluaXRpYWxTdGF0ZS5zZWFyY2hSZXN1bHRzO1xuICAgICAgc3RhdGUuZmFjZXRzID0gaW5pdGlhbFN0YXRlLmZhY2V0cztcbiAgICB9KTtcbiAgfSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBzZWFyY2hTbGljZS5yZWR1Y2VyO1xuIiwgImltcG9ydCB7IGNvbmZpZ3VyZVN0b3JlIH0gZnJvbSBcIkByZWR1eGpzL3Rvb2xraXRcIjtcbmltcG9ydCBob21lUmVkdWNlciBmcm9tIFwiLi4vcGFnZXMvaG9tZS9ob21lU2xpY2VcIjtcbmltcG9ydCBvbnRvbG9naWVzUmVkdWNlciBmcm9tIFwiLi4vcGFnZXMvb250b2xvZ2llcy9vbnRvbG9naWVzU2xpY2VcIjtcbmltcG9ydCBzZWFyY2hSZWR1Y2VyIGZyb20gJy4uL3BhZ2VzL3NlYXJjaC9zZWFyY2hTbGljZSc7XG5cbmV4cG9ydCBjb25zdCBzdG9yZSA9IGNvbmZpZ3VyZVN0b3JlKHtcbiAgcmVkdWNlcjoge1xuICAgIGhvbWU6IGhvbWVSZWR1Y2VyLFxuICAgIHNlYXJjaDogc2VhcmNoUmVkdWNlcixcbiAgICBvbnRvbG9naWVzOiBvbnRvbG9naWVzUmVkdWNlcixcbiAgfSxcbiAgbWlkZGxld2FyZTogKGdldERlZmF1bHRNaWRkbGV3YXJlKSA9PlxuICAgIGdldERlZmF1bHRNaWRkbGV3YXJlKHtcbiAgICAgIHNlcmlhbGl6YWJsZUNoZWNrOiBmYWxzZSxcbiAgICB9KSxcbn0pO1xuXG5leHBvcnQgdHlwZSBSb290U3RhdGUgPSBSZXR1cm5UeXBlPHR5cGVvZiBzdG9yZS5nZXRTdGF0ZT47XG5leHBvcnQgdHlwZSBBcHBEaXNwYXRjaCA9IHR5cGVvZiBzdG9yZS5kaXNwYXRjaDtcbiIsICJpbXBvcnQgeyBUaGVtZVByb3ZpZGVyIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5pbXBvcnQge1xuICBDaGVja2JveCxcbiAgRm9ybUNvbnRyb2wsXG4gIEZvcm1Db250cm9sTGFiZWwsXG4gIFJhZGlvLFxuICBSYWRpb0dyb3VwLFxufSBmcm9tIFwiQG11aS9tYXRlcmlhbFwiO1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHVybEpvaW4gZnJvbSBcInVybC1qb2luXCI7XG5pbXBvcnQgeyB1c2VBcHBEaXNwYXRjaCwgdXNlQXBwU2VsZWN0b3IgfSBmcm9tIFwiLi4vLi4vLi4vYXBwL2hvb2tzXCI7XG5pbXBvcnQgeyB0aGVtZSB9IGZyb20gXCIuLi8uLi8uLi9hcHAvbXVpXCI7XG5pbXBvcnQgeyByYW5kb21TdHJpbmcgfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCBOb2RlIGZyb20gXCIuLi8uLi8uLi9jb21wb25lbnRzL05vZGVcIjtcbmltcG9ydCBFbnRpdHkgZnJvbSBcIi4uLy4uLy4uL21vZGVsL0VudGl0eVwiO1xuaW1wb3J0IE9udG9sb2d5IGZyb20gXCIuLi8uLi8uLi9tb2RlbC9PbnRvbG9neVwiO1xuaW1wb3J0IHtcbiAgVHJlZU5vZGUsXG4gIGNsb3NlTm9kZSxcbiAgZGlzYWJsZVByZWZlcnJlZFJvb3RzLFxuICBlbmFibGVQcmVmZXJyZWRSb290cyxcbiAgZ2V0QW5jZXN0b3JzLFxuICBnZXROb2RlQ2hpbGRyZW4sXG4gIGdldFJvb3RFbnRpdGllcyxcbiAgaGlkZUNvdW50cyxcbiAgaGlkZU9ic29sZXRlLFxuICBoaWRlU2libGluZ3MsXG4gIG9wZW5Ob2RlLFxuICByZXNldFRyZWVDb250ZW50LFxuICByZXNldFRyZWVTZXR0aW5ncyxcbiAgc2hvd0NvdW50cyxcbiAgc2hvd09ic29sZXRlLFxuICBzaG93U2libGluZ3MsXG59IGZyb20gXCIuLi9vbnRvbG9naWVzU2xpY2VcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRW50aXR5VHJlZSh7XG4gIG9udG9sb2d5LFxuICBlbnRpdHlUeXBlLFxuICBzZWxlY3RlZEVudGl0eSxcbiAgbGFuZyxcbiAgb25OYXZpZ2F0ZVRvRW50aXR5LFxuICBvbk5hdmlnYXRlVG9PbnRvbG9neSxcbiAgYXBpVXJsLFxufToge1xuICBvbnRvbG9neTogT250b2xvZ3k7XG4gIHNlbGVjdGVkRW50aXR5PzogRW50aXR5O1xuICBlbnRpdHlUeXBlOiBcImVudGl0aWVzXCIgfCBcImNsYXNzZXNcIiB8IFwicHJvcGVydGllc1wiIHwgXCJpbmRpdmlkdWFsc1wiO1xuICBsYW5nOiBzdHJpbmc7XG4gIG9uTmF2aWdhdGVUb0VudGl0eTogKG9udG9sb2d5OiBPbnRvbG9neSwgZW50aXR5OiBFbnRpdHkpID0+IHZvaWQ7XG4gIG9uTmF2aWdhdGVUb09udG9sb2d5OiAob250b2xvZ3lJZDogc3RyaW5nLCBlbnRpdHk6IEVudGl0eSkgPT4gdm9pZDtcbiAgYXBpVXJsPzogc3RyaW5nO1xufSkge1xuICBjb25zdCBkaXNwYXRjaCA9IHVzZUFwcERpc3BhdGNoKCk7XG4gIGNvbnN0IG5vZGVzV2l0aENoaWxkcmVuTG9hZGVkID0gdXNlQXBwU2VsZWN0b3IoXG4gICAgKHN0YXRlKSA9PiBzdGF0ZS5vbnRvbG9naWVzLm5vZGVzV2l0aENoaWxkcmVuTG9hZGVkXG4gICk7XG4gIGNvbnN0IG5vZGVDaGlsZHJlbiA9IHVzZUFwcFNlbGVjdG9yKChzdGF0ZSkgPT4gc3RhdGUub250b2xvZ2llcy5ub2RlQ2hpbGRyZW4pO1xuICBjb25zdCByb290Tm9kZXMgPSB1c2VBcHBTZWxlY3Rvcigoc3RhdGUpID0+IHN0YXRlLm9udG9sb2dpZXMucm9vdE5vZGVzKTtcbiAgY29uc3QgbnVtUGVuZGluZ1RyZWVSZXF1ZXN0cyA9IHVzZUFwcFNlbGVjdG9yKFxuICAgIChzdGF0ZSkgPT4gc3RhdGUub250b2xvZ2llcy5udW1QZW5kaW5nVHJlZVJlcXVlc3RzXG4gICk7XG4gIGNvbnN0IHByZWZlcnJlZFJvb3RzID0gdXNlQXBwU2VsZWN0b3IoXG4gICAgKHN0YXRlKSA9PiBzdGF0ZS5vbnRvbG9naWVzLnByZWZlcnJlZFJvb3RzXG4gICk7XG4gIGNvbnN0IGF1dG9tYXRpY2FsbHlFeHBhbmRlZE5vZGVzID0gdXNlQXBwU2VsZWN0b3IoXG4gICAgKHN0YXRlKSA9PiBzdGF0ZS5vbnRvbG9naWVzLmF1dG9tYXRpY2FsbHlFeHBhbmRlZE5vZGVzXG4gICk7XG4gIGNvbnN0IG1hbnVhbGx5RXhwYW5kZWROb2RlcyA9IHVzZUFwcFNlbGVjdG9yKFxuICAgIChzdGF0ZSkgPT4gc3RhdGUub250b2xvZ2llcy5tYW51YWxseUV4cGFuZGVkTm9kZXNcbiAgKTtcblxuICBjb25zdCBzaG93T2Jzb2xldGVFbmFibGVkID0gc2VsZWN0ZWRFbnRpdHlcbiAgICA/IHNlbGVjdGVkRW50aXR5LmlzRGVwcmVjYXRlZCgpXG4gICAgOiB1c2VBcHBTZWxlY3Rvcigoc3RhdGUpID0+IHN0YXRlLm9udG9sb2dpZXMuZGlzcGxheU9ic29sZXRlKTtcbiAgY29uc3Qgc2hvd1NpYmxpbmdzRW5hYmxlZCA9IHVzZUFwcFNlbGVjdG9yKFxuICAgIChzdGF0ZSkgPT4gc3RhdGUub250b2xvZ2llcy5kaXNwbGF5U2libGluZ3NcbiAgKTtcbiAgY29uc3Qgc2hvd0NvdW50c0VuYWJsZWQgPSB1c2VBcHBTZWxlY3RvcihcbiAgICAoc3RhdGUpID0+IHN0YXRlLm9udG9sb2dpZXMuZGlzcGxheUNvdW50c1xuICApO1xuXG4gIGNvbnN0IHRvZ2dsZU5vZGUgPSB1c2VDYWxsYmFjayhcbiAgICAobm9kZTogYW55KSA9PiB7XG4gICAgICBsZXQgaXNFeHBhbmRlZCA9XG4gICAgICAgIG1hbnVhbGx5RXhwYW5kZWROb2Rlcy5pbmRleE9mKG5vZGUuYWJzb2x1dGVJZGVudGl0eSkgIT09IC0xIHx8XG4gICAgICAgIGF1dG9tYXRpY2FsbHlFeHBhbmRlZE5vZGVzLmluZGV4T2Yobm9kZS5hYnNvbHV0ZUlkZW50aXR5KSAhPT0gLTE7XG5cbiAgICAgIGlmIChpc0V4cGFuZGVkKSB7XG4gICAgICAgIGRpc3BhdGNoKGNsb3NlTm9kZShub2RlKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkaXNwYXRjaChvcGVuTm9kZShub2RlKSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBkaXNwYXRjaCxcbiAgICAgIEpTT04uc3RyaW5naWZ5KGF1dG9tYXRpY2FsbHlFeHBhbmRlZE5vZGVzKSxcbiAgICAgIEpTT04uc3RyaW5naWZ5KG1hbnVhbGx5RXhwYW5kZWROb2RlcyksXG4gICAgXVxuICApO1xuXG4gIC8vIElmIHRoZSBvbnRvbG9neSwgZW50aXR5IHR5cGUsIHNlbGVjdGVkIGVudGl0eSBJUkksIG9yIGxhbmcgY2hhbmdlLCByZXNldCB0aGUgdHJlZSBzZXR0aW5ncyAoaW5jbHVkaW5nIHNob3dvYnNvbGV0ZS9wcmVmZXJyZWQgcm9vdHMpXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgZGlzcGF0Y2gocmVzZXRUcmVlU2V0dGluZ3MoeyBlbnRpdHlUeXBlLCBzZWxlY3RlZEVudGl0eSB9KSk7XG4gIH0sIFtcbiAgICBkaXNwYXRjaCxcbiAgICBvbnRvbG9neS5nZXRPbnRvbG9neUlkKCksXG4gICAgZW50aXR5VHlwZSxcbiAgICBzZWxlY3RlZEVudGl0eT8uZ2V0SXJpKCksXG4gIF0pO1xuXG4gIC8vIElmIHRoZSBvbnRvbG9neSwgZW50aXR5IHR5cGUsIHNlbGVjdGVkIGVudGl0eSwgbGFuZyBPUiB0aGUgc2hvd09ic29sZXRlRW5hYmxlZC9wcmVmZXJyZWRSb290cyBjaGFuZ2UsIHJlc2V0IHRoZSB0cmVlIGNvbnRlbnQgYnV0IG5vdCB0aGUgc2V0dGluZ3NcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBkaXNwYXRjaChyZXNldFRyZWVDb250ZW50KCkpO1xuICB9LCBbXG4gICAgZGlzcGF0Y2gsXG4gICAgb250b2xvZ3kuZ2V0T250b2xvZ3lJZCgpLFxuICAgIGVudGl0eVR5cGUsXG4gICAgSlNPTi5zdHJpbmdpZnkoc2VsZWN0ZWRFbnRpdHkpLFxuICAgIHNob3dPYnNvbGV0ZUVuYWJsZWQsXG4gICAgcHJlZmVycmVkUm9vdHMsXG4gICAgbGFuZyxcbiAgXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoc2VsZWN0ZWRFbnRpdHkpIHtcbiAgICAgIGNvbnN0IGVudGl0eUlyaSA9IHNlbGVjdGVkRW50aXR5LmdldElyaSgpO1xuICAgICAgbGV0IHByb21pc2UgPSBkaXNwYXRjaChcbiAgICAgICAgZ2V0QW5jZXN0b3JzKHtcbiAgICAgICAgICBvbnRvbG9neUlkOiBvbnRvbG9neS5nZXRPbnRvbG9neUlkKCksXG4gICAgICAgICAgZW50aXR5VHlwZTogc2VsZWN0ZWRFbnRpdHkuZ2V0VHlwZVBsdXJhbCgpLFxuICAgICAgICAgIGVudGl0eUlyaSxcbiAgICAgICAgICBsYW5nLFxuICAgICAgICAgIHNob3dPYnNvbGV0ZUVuYWJsZWQsXG4gICAgICAgICAgc2hvd1NpYmxpbmdzRW5hYmxlZCxcbiAgICAgICAgICBhcGlVcmwsXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgcmV0dXJuICgpID0+IHByb21pc2UuYWJvcnQoKTsgLy8gY29tcG9uZW50IHdhcyB1bm1vdW50ZWRcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IHByb21pc2UgPSBkaXNwYXRjaChcbiAgICAgICAgZ2V0Um9vdEVudGl0aWVzKHtcbiAgICAgICAgICBvbnRvbG9neUlkOiBvbnRvbG9neS5nZXRPbnRvbG9neUlkKCksXG4gICAgICAgICAgZW50aXR5VHlwZSxcbiAgICAgICAgICBwcmVmZXJyZWRSb290cyxcbiAgICAgICAgICBsYW5nLFxuICAgICAgICAgIHNob3dPYnNvbGV0ZUVuYWJsZWQsXG4gICAgICAgICAgYXBpVXJsLFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICAgIHJldHVybiAoKSA9PiBwcm9taXNlLmFib3J0KCk7IC8vIGNvbXBvbmVudCB3YXMgdW5tb3VudGVkXG4gICAgfVxuICB9LCBbXG4gICAgZGlzcGF0Y2gsXG4gICAgZW50aXR5VHlwZSxcbiAgICBKU09OLnN0cmluZ2lmeShzZWxlY3RlZEVudGl0eSksXG4gICAgb250b2xvZ3kuZ2V0T250b2xvZ3lJZCgpLFxuICAgIHByZWZlcnJlZFJvb3RzLFxuICAgIGxhbmcsXG4gICAgc2hvd09ic29sZXRlRW5hYmxlZCxcbiAgXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBsZXQgbm9kZXNNaXNzaW5nQ2hpbGRyZW46IHN0cmluZ1tdID0gbWFudWFsbHlFeHBhbmRlZE5vZGVzLmZpbHRlcihcbiAgICAgIChhYnNvbHV0ZUlkZW50aXR5KSA9PlxuICAgICAgICBub2Rlc1dpdGhDaGlsZHJlbkxvYWRlZC5pbmRleE9mKGFic29sdXRlSWRlbnRpdHkpID09PSAtMVxuICAgICk7XG5cbiAgICBpZiAoc2hvd1NpYmxpbmdzRW5hYmxlZCkge1xuICAgICAgbm9kZXNNaXNzaW5nQ2hpbGRyZW4gPSBbXG4gICAgICAgIC4uLm5vZGVzTWlzc2luZ0NoaWxkcmVuLFxuICAgICAgICAuLi5hdXRvbWF0aWNhbGx5RXhwYW5kZWROb2Rlcy5maWx0ZXIoXG4gICAgICAgICAgKGFic29sdXRlSWRlbnRpdHkpID0+XG4gICAgICAgICAgICBub2Rlc1dpdGhDaGlsZHJlbkxvYWRlZC5pbmRleE9mKGFic29sdXRlSWRlbnRpdHkpID09PSAtMVxuICAgICAgICApLFxuICAgICAgXTtcbiAgICB9XG4gICAgLy8gY29uc29sZS5sb2coXG4gICAgLy8gICBcIiEhISEgR2V0dGluZyBtaXNzaW5nIG5vZGUgY2hpbGRyZW46IFwiICtcbiAgICAvLyAgICAgSlNPTi5zdHJpbmdpZnkobm9kZXNNaXNzaW5nQ2hpbGRyZW4pXG4gICAgLy8gKTtcblxuICAgIGxldCBwcm9taXNlczogYW55ID0gW107XG4gICAgZm9yIChsZXQgYWJzSWQgb2Ygbm9kZXNNaXNzaW5nQ2hpbGRyZW4pIHtcbiAgICAgIHByb21pc2VzLnB1c2goXG4gICAgICAgIGRpc3BhdGNoKFxuICAgICAgICAgIGdldE5vZGVDaGlsZHJlbih7XG4gICAgICAgICAgICBvbnRvbG9neUlkOiBvbnRvbG9neS5nZXRPbnRvbG9neUlkKCksXG4gICAgICAgICAgICBlbnRpdHlUeXBlUGx1cmFsOiBzZWxlY3RlZEVudGl0eT8uZ2V0VHlwZVBsdXJhbCgpIHx8IGVudGl0eVR5cGUsIC8vIFRPRE86IHNob3VsZCBhY3R1YWxseSBiZSB0eXBlIG9mIGN1cnJlbnQgZW50aXR5IHdpdGggaXJpIGFic0lkLCBub3QgdHlwZSBvZiBzZWxlY3RlZEVudGl0eVxuICAgICAgICAgICAgZW50aXR5SXJpOiBhYnNJZC5zcGxpdChcIjtcIikucG9wKCksXG4gICAgICAgICAgICBhYnNvbHV0ZUlkZW50aXR5OiBhYnNJZCxcbiAgICAgICAgICAgIGxhbmcsXG4gICAgICAgICAgICBzaG93T2Jzb2xldGVFbmFibGVkLFxuICAgICAgICAgICAgYXBpVXJsLFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGZvciAobGV0IHByb21pc2Ugb2YgcHJvbWlzZXMpIHByb21pc2UuYWJvcnQoKTsgLy8gY29tcG9uZW50IHdhcyB1bm1vdW50ZWRcbiAgICB9O1xuICB9LCBbXG4gICAgZGlzcGF0Y2gsXG4gICAgbGFuZyxcbiAgICBKU09OLnN0cmluZ2lmeShtYW51YWxseUV4cGFuZGVkTm9kZXMpLFxuICAgIEpTT04uc3RyaW5naWZ5KGF1dG9tYXRpY2FsbHlFeHBhbmRlZE5vZGVzKSxcbiAgICBKU09OLnN0cmluZ2lmeShub2RlQ2hpbGRyZW4pLFxuICAgIG9udG9sb2d5LmdldE9udG9sb2d5SWQoKSxcbiAgICBlbnRpdHlUeXBlLFxuICAgIHByZWZlcnJlZFJvb3RzLFxuICAgIHNob3dPYnNvbGV0ZUVuYWJsZWQsXG4gICAgc2hvd1NpYmxpbmdzRW5hYmxlZCxcbiAgXSk7XG5cbiAgbGV0IHRvZ2dsZVNob3dPYnNvbGV0ZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoc2hvd09ic29sZXRlRW5hYmxlZCkgZGlzcGF0Y2goaGlkZU9ic29sZXRlKCkpO1xuICAgIGVsc2UgZGlzcGF0Y2goc2hvd09ic29sZXRlKCkpO1xuICB9LCBbZGlzcGF0Y2gsIHNob3dPYnNvbGV0ZUVuYWJsZWRdKTtcblxuICBsZXQgdG9nZ2xlU2hvd1NpYmxpbmdzID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChzaG93U2libGluZ3NFbmFibGVkKSBkaXNwYXRjaChoaWRlU2libGluZ3MoKSk7XG4gICAgZWxzZSBkaXNwYXRjaChzaG93U2libGluZ3MoKSk7XG4gIH0sIFtkaXNwYXRjaCwgc2hvd1NpYmxpbmdzRW5hYmxlZF0pO1xuXG4gIGxldCB0b2dnbGVTaG93Q291bnRzID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChzaG93Q291bnRzRW5hYmxlZCkgZGlzcGF0Y2goaGlkZUNvdW50cygpKTtcbiAgICBlbHNlIGRpc3BhdGNoKHNob3dDb3VudHMoKSk7XG4gIH0sIFtkaXNwYXRjaCwgc2hvd0NvdW50c0VuYWJsZWRdKTtcblxuICBmdW5jdGlvbiByZW5kZXJOb2RlQ2hpbGRyZW4oXG4gICAgY2hpbGRyZW46IFRyZWVOb2RlW10sXG4gICAgZGVidWdOdW1JdGVyYXRpb25zOiBudW1iZXJcbiAgKSB7XG4gICAgaWYgKGRlYnVnTnVtSXRlcmF0aW9ucyA+IDEwMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwicHJvYmFibGUgY3ljbGljIHRyZWUgKHJlbmRlck5vZGVDaGlsZHJlbilcIik7XG4gICAgfVxuICAgIGNvbnN0IGNoaWxkcmVuQ29weSA9IFsuLi5jaGlsZHJlbl07XG4gICAgY2hpbGRyZW5Db3B5LnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIGNvbnN0IHRpdGxlQSA9IGE/LnRpdGxlID8gYS50aXRsZS50b1N0cmluZygpLnRvVXBwZXJDYXNlKCkgOiBcIlwiO1xuICAgICAgY29uc3QgdGl0bGVCID0gYj8udGl0bGUgPyBiLnRpdGxlLnRvU3RyaW5nKCkudG9VcHBlckNhc2UoKSA6IFwiXCI7XG4gICAgICByZXR1cm4gdGl0bGVBID09PSB0aXRsZUIgPyAwIDogdGl0bGVBID4gdGl0bGVCID8gMSA6IC0xO1xuICAgIH0pO1xuICAgIGNvbnN0IGNoaWxkcmVuU29ydGVkID0gY2hpbGRyZW5Db3B5LmZpbHRlcihcbiAgICAgIChjaGlsZCwgaSwgYXJyKSA9PlxuICAgICAgICAhaSB8fCBjaGlsZC5hYnNvbHV0ZUlkZW50aXR5ICE9PSBhcnJbaSAtIDFdLmFic29sdXRlSWRlbnRpdHlcbiAgICApO1xuICAgIHJldHVybiAoXG4gICAgICA8dWxcbiAgICAgICAgcm9sZT1cImdyb3VwXCJcbiAgICAgICAgY2xhc3NOYW1lPVwianN0cmVlLWNvbnRhaW5lci11bCBqc3RyZWUtY2hpbGRyZW4ganN0cmVlLW5vLWljb25zXCJcbiAgICAgID5cbiAgICAgICAge2NoaWxkcmVuU29ydGVkLm1hcCgoY2hpbGROb2RlOiBUcmVlTm9kZSwgaSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGlzRXhwYW5kZWQgPVxuICAgICAgICAgICAgbWFudWFsbHlFeHBhbmRlZE5vZGVzLmluZGV4T2YoY2hpbGROb2RlLmFic29sdXRlSWRlbnRpdHkpICE9PSAtMSB8fFxuICAgICAgICAgICAgYXV0b21hdGljYWxseUV4cGFuZGVkTm9kZXMuaW5kZXhPZihjaGlsZE5vZGUuYWJzb2x1dGVJZGVudGl0eSkgIT09XG4gICAgICAgICAgICAgIC0xO1xuICAgICAgICAgIGNvbnN0IGlzTGFzdCA9IGkgPT09IGNoaWxkcmVuU29ydGVkIS5sZW5ndGggLSAxO1xuICAgICAgICAgIGNvbnN0IGhpZ2hsaWdodCA9XG4gICAgICAgICAgICAoc2VsZWN0ZWRFbnRpdHkgJiYgY2hpbGROb2RlLmlyaSA9PT0gc2VsZWN0ZWRFbnRpdHkuZ2V0SXJpKCkpIHx8XG4gICAgICAgICAgICBmYWxzZTtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPE5vZGVcbiAgICAgICAgICAgICAgZXhwYW5kYWJsZT17Y2hpbGROb2RlLmV4cGFuZGFibGV9XG4gICAgICAgICAgICAgIGV4cGFuZGVkPXtpc0V4cGFuZGVkfVxuICAgICAgICAgICAgICBoaWdobGlnaHQ9e2hpZ2hsaWdodH1cbiAgICAgICAgICAgICAgaXNMYXN0PXtpc0xhc3R9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICB0b2dnbGVOb2RlKGNoaWxkTm9kZSk7XG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIGtleT17cmFuZG9tU3RyaW5nKCl9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHtjaGlsZE5vZGUuY2hpbGRSZWxhdGlvblRvUGFyZW50ID09PVxuICAgICAgICAgICAgICAgIFwiaHR0cDovL3B1cmwub2JvbGlicmFyeS5vcmcvb2JvL0JGT18wMDAwMDUwXCIgJiYgKFxuICAgICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm1yLTFcIlxuICAgICAgICAgICAgICAgICAgc3JjPXt1cmxKb2luKHByb2Nlc3MuZW52LlBVQkxJQ19VUkwhLCBcIi9wYXJ0LnN2Z1wiKX1cbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IGhlaWdodDogXCIxZW1cIiwgZGlzcGxheTogXCJpbmxpbmVcIiB9fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIHtjaGlsZE5vZGUuY2hpbGRSZWxhdGlvblRvUGFyZW50ID09PVxuICAgICAgICAgICAgICAgIFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zI3R5cGVcIiAmJiAoXG4gICAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibXItMVwiXG4gICAgICAgICAgICAgICAgICBzcmM9e3VybEpvaW4ocHJvY2Vzcy5lbnYuUFVCTElDX1VSTCEsIFwiL2luc3RhbmNlLnN2Z1wiKX1cbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IGhlaWdodDogXCIxZW1cIiwgZGlzcGxheTogXCJpbmxpbmVcIiB9fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDxUcmVlTGlua1xuICAgICAgICAgICAgICAgIG9udG9sb2d5PXtvbnRvbG9neX1cbiAgICAgICAgICAgICAgICBlbnRpdHk9e2NoaWxkTm9kZS5lbnRpdHl9XG4gICAgICAgICAgICAgICAgdGl0bGU9e2NoaWxkTm9kZS50aXRsZX1cbiAgICAgICAgICAgICAgICBsYW5nPXtsYW5nfVxuICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb0VudGl0eT17b25OYXZpZ2F0ZVRvRW50aXR5fVxuICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5PXtvbk5hdmlnYXRlVG9PbnRvbG9neX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgeyFzaG93T2Jzb2xldGVFbmFibGVkICYmXG4gICAgICAgICAgICAgICAgc2hvd0NvdW50c0VuYWJsZWQgJiZcbiAgICAgICAgICAgICAgICBjaGlsZE5vZGUubnVtRGVzY2VuZGFudHMgPiAwICYmIChcbiAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IGNvbG9yOiBcImdyYXlcIiB9fT5cbiAgICAgICAgICAgICAgICAgICAge1wiIChcIiArIGNoaWxkTm9kZS5udW1EZXNjZW5kYW50cy50b0xvY2FsZVN0cmluZygpICsgXCIpXCJ9XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAge2lzRXhwYW5kZWQgJiZcbiAgICAgICAgICAgICAgICByZW5kZXJOb2RlQ2hpbGRyZW4oXG4gICAgICAgICAgICAgICAgICBub2RlQ2hpbGRyZW5bY2hpbGROb2RlLmFic29sdXRlSWRlbnRpdHldIHx8IFtdLFxuICAgICAgICAgICAgICAgICAgZGVidWdOdW1JdGVyYXRpb25zICsgMVxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L05vZGU+XG4gICAgICAgICAgKTtcbiAgICAgICAgfSl9XG4gICAgICA8L3VsPlxuICAgICk7XG4gIH1cbiAgcmV0dXJuIChcbiAgICA8VGhlbWVQcm92aWRlciB0aGVtZT17dGhlbWV9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sLXJldmVyc2UgbGc6Z3JpZCBsZzpncmlkLWNvbHMtMyBsZzpnYXAtNFwiPlxuICAgICAgICB7cm9vdE5vZGVzID8gKFxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibGc6Y29sLXNwYW4tMiByZWxhdGl2ZVwiPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJweC0zIHBiLTMganN0cmVlIGpzdHJlZS0xIGpzdHJlZS1wcm90b24gb3ZlcmZsb3cteC1hdXRvXCJcbiAgICAgICAgICAgICAgcm9sZT1cInRyZWVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7cmVuZGVyTm9kZUNoaWxkcmVuKHJvb3ROb2RlcywgMCl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIHtudW1QZW5kaW5nVHJlZVJlcXVlc3RzID4gMCA/IChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSBzcGlubmVyLWRlZmF1bHQgdy03IGgtNyAtdG9wLTEgLWxlZnQtNCB6LWF1dG9cIiAvPlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImxnOmNvbC1zcGFuLTEgZmxleCBmbGV4LWNvbCBiZy13aGl0ZSBweC0yIG1iLTIgcm91bmRlZC1sZ1wiPlxuICAgICAgICAgIHtlbnRpdHlUeXBlID09PSBcImNsYXNzZXNcIiAmJlxuICAgICAgICAgICAgb250b2xvZ3kuZ2V0UHJlZmVycmVkUm9vdHMoKS5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYi0yXCI+XG4gICAgICAgICAgICAgICAgPEZvcm1Db250cm9sPlxuICAgICAgICAgICAgICAgICAgPFJhZGlvR3JvdXBcbiAgICAgICAgICAgICAgICAgICAgbmFtZT1cInJhZGlvLWJ1dHRvbnMtZ3JvdXBcIlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17cHJlZmVycmVkUm9vdHMgPyBcInRydWVcIiA6IFwiZmFsc2VcIn1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPEZvcm1Db250cm9sTGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGRpc3BhdGNoKGVuYWJsZVByZWZlcnJlZFJvb3RzKCkpfVxuICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2w9ezxSYWRpbyAvPn1cbiAgICAgICAgICAgICAgICAgICAgICBsYWJlbD1cIlByZWZlcnJlZCByb290c1wiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDxGb3JtQ29udHJvbExhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gZGlzcGF0Y2goZGlzYWJsZVByZWZlcnJlZFJvb3RzKCkpfVxuICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2w9ezxSYWRpbyAvPn1cbiAgICAgICAgICAgICAgICAgICAgICBsYWJlbD1cIkFsbCBjbGFzc2VzXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDwvUmFkaW9Hcm91cD5cbiAgICAgICAgICAgICAgICA8L0Zvcm1Db250cm9sPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPEZvcm1Db250cm9sTGFiZWxcbiAgICAgICAgICAgIGNvbnRyb2w9e1xuICAgICAgICAgICAgICA8Q2hlY2tib3hcbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17c2hvd09ic29sZXRlRW5hYmxlZH1cbiAgICAgICAgICAgICAgICBjaGVja2VkPXshc2hvd09ic29sZXRlRW5hYmxlZCAmJiBzaG93Q291bnRzRW5hYmxlZH1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXt0b2dnbGVTaG93Q291bnRzfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGFiZWw9XCJTaG93IGNvdW50c1wiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8Rm9ybUNvbnRyb2xMYWJlbFxuICAgICAgICAgICAgY29udHJvbD17XG4gICAgICAgICAgICAgIDxDaGVja2JveFxuICAgICAgICAgICAgICAgIGNoZWNrZWQ9e3Nob3dPYnNvbGV0ZUVuYWJsZWR9XG4gICAgICAgICAgICAgICAgb25DbGljaz17dG9nZ2xlU2hvd09ic29sZXRlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGFiZWw9XCJTaG93IG9ic29sZXRlIHRlcm1zXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIHtzZWxlY3RlZEVudGl0eSAmJiAoXG4gICAgICAgICAgICA8Rm9ybUNvbnRyb2xMYWJlbFxuICAgICAgICAgICAgICBjb250cm9sPXtcbiAgICAgICAgICAgICAgICA8Q2hlY2tib3hcbiAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e3Nob3dTaWJsaW5nc0VuYWJsZWR9XG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXt0b2dnbGVTaG93U2libGluZ3N9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBsYWJlbD1cIlNob3cgYWxsIHNpYmxpbmdzXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L1RoZW1lUHJvdmlkZXI+XG4gICk7XG59XG5cbmZ1bmN0aW9uIFRyZWVMaW5rKHtcbiAgb250b2xvZ3ksXG4gIGVudGl0eSxcbiAgdGl0bGUsXG4gIGxhbmcsXG4gIG9uTmF2aWdhdGVUb0VudGl0eSxcbiAgb25OYXZpZ2F0ZVRvT250b2xvZ3ksXG59OiB7XG4gIG9udG9sb2d5OiBPbnRvbG9neTtcbiAgZW50aXR5OiBFbnRpdHk7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGxhbmc6IHN0cmluZztcbiAgb25OYXZpZ2F0ZVRvRW50aXR5OiAob250b2xvZ3k6IE9udG9sb2d5LCBlbnRpdHk6IEVudGl0eSkgPT4gdm9pZDtcbiAgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IChvbnRvbG9neUlkOiBzdHJpbmcsIGVudGl0eTogRW50aXR5KSA9PiB2b2lkO1xufSkge1xuICBsZXQgZGVmaW5lZEJ5OiBzdHJpbmdbXSA9IGVudGl0eS5nZXREZWZpbmVkQnkoKTtcblxuICBpZiAoZGVmaW5lZEJ5LmluZGV4T2Yob250b2xvZ3kuZ2V0T250b2xvZ3lJZCgpKSAhPT0gLTEpIGRlZmluZWRCeSA9IFtdOyAvLyBkb24ndCBzaG93IGRlZmluZWRCeSBsaW5rcyBmb3IgdGVybXMgaW4gY3VycmVudCBvbnRvbG9neVxuXG4gIHJldHVybiAoXG4gICAgPHNwYW4+XG4gICAgICA8YVxuICAgICAgICB0aXRsZT17ZW50aXR5LmdldElyaSgpfVxuICAgICAgICBjbGFzc05hbWU9e1wibGluay1kZWZhdWx0XCJ9XG4gICAgICAgIG9uQ2xpY2s9eygpID0+IG9uTmF2aWdhdGVUb0VudGl0eShvbnRvbG9neSwgZW50aXR5KX1cbiAgICAgID5cbiAgICAgICAge3RpdGxlfVxuICAgICAgPC9hPlxuICAgICAge2RlZmluZWRCeS5sZW5ndGggPiAwICYmXG4gICAgICAgIGRlZmluZWRCeS5tYXAoKGRlZmluaW5nT250b2xvZ3kpID0+IHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gb25OYXZpZ2F0ZVRvT250b2xvZ3koZGVmaW5pbmdPbnRvbG9neSwgZW50aXR5KX1cbiAgICAgICAgICAgICAgdGl0bGU9e2RlZmluaW5nT250b2xvZ3kudG9VcHBlckNhc2UoKX1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibXgtMSBsaW5rLW9udG9sb2d5IHB4LTIgcHktMC41IHJvdW5kZWQtbWQgdGV4dC1zbSB0ZXh0LXdoaXRlIHVwcGVyY2FzZSBtbC0xXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge2RlZmluaW5nT250b2xvZ3l9XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgKTtcbiAgICAgICAgfSl9XG4gICAgPC9zcGFuPlxuICApO1xufVxuIiwgImNvbnN0IGNvbW1vbiA9IHtcbiAgYmxhY2s6ICcjMDAwJyxcbiAgd2hpdGU6ICcjZmZmJ1xufTtcbmV4cG9ydCBkZWZhdWx0IGNvbW1vbjsiLCAiY29uc3QgcmVkID0ge1xuICA1MDogJyNmZmViZWUnLFxuICAxMDA6ICcjZmZjZGQyJyxcbiAgMjAwOiAnI2VmOWE5YScsXG4gIDMwMDogJyNlNTczNzMnLFxuICA0MDA6ICcjZWY1MzUwJyxcbiAgNTAwOiAnI2Y0NDMzNicsXG4gIDYwMDogJyNlNTM5MzUnLFxuICA3MDA6ICcjZDMyZjJmJyxcbiAgODAwOiAnI2M2MjgyOCcsXG4gIDkwMDogJyNiNzFjMWMnLFxuICBBMTAwOiAnI2ZmOGE4MCcsXG4gIEEyMDA6ICcjZmY1MjUyJyxcbiAgQTQwMDogJyNmZjE3NDQnLFxuICBBNzAwOiAnI2Q1MDAwMCdcbn07XG5leHBvcnQgZGVmYXVsdCByZWQ7IiwgImNvbnN0IHB1cnBsZSA9IHtcbiAgNTA6ICcjZjNlNWY1JyxcbiAgMTAwOiAnI2UxYmVlNycsXG4gIDIwMDogJyNjZTkzZDgnLFxuICAzMDA6ICcjYmE2OGM4JyxcbiAgNDAwOiAnI2FiNDdiYycsXG4gIDUwMDogJyM5YzI3YjAnLFxuICA2MDA6ICcjOGUyNGFhJyxcbiAgNzAwOiAnIzdiMWZhMicsXG4gIDgwMDogJyM2YTFiOWEnLFxuICA5MDA6ICcjNGExNDhjJyxcbiAgQTEwMDogJyNlYTgwZmMnLFxuICBBMjAwOiAnI2UwNDBmYicsXG4gIEE0MDA6ICcjZDUwMGY5JyxcbiAgQTcwMDogJyNhYTAwZmYnXG59O1xuZXhwb3J0IGRlZmF1bHQgcHVycGxlOyIsICJjb25zdCBibHVlID0ge1xuICA1MDogJyNlM2YyZmQnLFxuICAxMDA6ICcjYmJkZWZiJyxcbiAgMjAwOiAnIzkwY2FmOScsXG4gIDMwMDogJyM2NGI1ZjYnLFxuICA0MDA6ICcjNDJhNWY1JyxcbiAgNTAwOiAnIzIxOTZmMycsXG4gIDYwMDogJyMxZTg4ZTUnLFxuICA3MDA6ICcjMTk3NmQyJyxcbiAgODAwOiAnIzE1NjVjMCcsXG4gIDkwMDogJyMwZDQ3YTEnLFxuICBBMTAwOiAnIzgyYjFmZicsXG4gIEEyMDA6ICcjNDQ4YWZmJyxcbiAgQTQwMDogJyMyOTc5ZmYnLFxuICBBNzAwOiAnIzI5NjJmZidcbn07XG5leHBvcnQgZGVmYXVsdCBibHVlOyIsICJjb25zdCBsaWdodEJsdWUgPSB7XG4gIDUwOiAnI2UxZjVmZScsXG4gIDEwMDogJyNiM2U1ZmMnLFxuICAyMDA6ICcjODFkNGZhJyxcbiAgMzAwOiAnIzRmYzNmNycsXG4gIDQwMDogJyMyOWI2ZjYnLFxuICA1MDA6ICcjMDNhOWY0JyxcbiAgNjAwOiAnIzAzOWJlNScsXG4gIDcwMDogJyMwMjg4ZDEnLFxuICA4MDA6ICcjMDI3N2JkJyxcbiAgOTAwOiAnIzAxNTc5YicsXG4gIEExMDA6ICcjODBkOGZmJyxcbiAgQTIwMDogJyM0MGM0ZmYnLFxuICBBNDAwOiAnIzAwYjBmZicsXG4gIEE3MDA6ICcjMDA5MWVhJ1xufTtcbmV4cG9ydCBkZWZhdWx0IGxpZ2h0Qmx1ZTsiLCAiY29uc3QgZ3JlZW4gPSB7XG4gIDUwOiAnI2U4ZjVlOScsXG4gIDEwMDogJyNjOGU2YzknLFxuICAyMDA6ICcjYTVkNmE3JyxcbiAgMzAwOiAnIzgxYzc4NCcsXG4gIDQwMDogJyM2NmJiNmEnLFxuICA1MDA6ICcjNGNhZjUwJyxcbiAgNjAwOiAnIzQzYTA0NycsXG4gIDcwMDogJyMzODhlM2MnLFxuICA4MDA6ICcjMmU3ZDMyJyxcbiAgOTAwOiAnIzFiNWUyMCcsXG4gIEExMDA6ICcjYjlmNmNhJyxcbiAgQTIwMDogJyM2OWYwYWUnLFxuICBBNDAwOiAnIzAwZTY3NicsXG4gIEE3MDA6ICcjMDBjODUzJ1xufTtcbmV4cG9ydCBkZWZhdWx0IGdyZWVuOyIsICJjb25zdCBvcmFuZ2UgPSB7XG4gIDUwOiAnI2ZmZjNlMCcsXG4gIDEwMDogJyNmZmUwYjInLFxuICAyMDA6ICcjZmZjYzgwJyxcbiAgMzAwOiAnI2ZmYjc0ZCcsXG4gIDQwMDogJyNmZmE3MjYnLFxuICA1MDA6ICcjZmY5ODAwJyxcbiAgNjAwOiAnI2ZiOGMwMCcsXG4gIDcwMDogJyNmNTdjMDAnLFxuICA4MDA6ICcjZWY2YzAwJyxcbiAgOTAwOiAnI2U2NTEwMCcsXG4gIEExMDA6ICcjZmZkMTgwJyxcbiAgQTIwMDogJyNmZmFiNDAnLFxuICBBNDAwOiAnI2ZmOTEwMCcsXG4gIEE3MDA6ICcjZmY2ZDAwJ1xufTtcbmV4cG9ydCBkZWZhdWx0IG9yYW5nZTsiLCAiY29uc3QgZ3JleSA9IHtcbiAgNTA6ICcjZmFmYWZhJyxcbiAgMTAwOiAnI2Y1ZjVmNScsXG4gIDIwMDogJyNlZWVlZWUnLFxuICAzMDA6ICcjZTBlMGUwJyxcbiAgNDAwOiAnI2JkYmRiZCcsXG4gIDUwMDogJyM5ZTllOWUnLFxuICA2MDA6ICcjNzU3NTc1JyxcbiAgNzAwOiAnIzYxNjE2MScsXG4gIDgwMDogJyM0MjQyNDInLFxuICA5MDA6ICcjMjEyMTIxJyxcbiAgQTEwMDogJyNmNWY1ZjUnLFxuICBBMjAwOiAnI2VlZWVlZScsXG4gIEE0MDA6ICcjYmRiZGJkJyxcbiAgQTcwMDogJyM2MTYxNjEnXG59O1xuZXhwb3J0IGRlZmF1bHQgZ3JleTsiLCAiZXhwb3J0IGRlZmF1bHQgJyQkbWF0ZXJpYWwnOyIsICJpbXBvcnQgX2Zvcm1hdE11aUVycm9yTWVzc2FnZSBmcm9tIFwiQG11aS91dGlscy9mb3JtYXRNdWlFcnJvck1lc3NhZ2VcIjtcbmV4cG9ydCB7IGNzcywga2V5ZnJhbWVzLCBTdHlsZWRFbmdpbmVQcm92aWRlciB9IGZyb20gJ0BtdWkvc3R5bGVkLWVuZ2luZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEdsb2JhbFN0eWxlcyB9IGZyb20gJy4vR2xvYmFsU3R5bGVzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgYm9yZGVycyB9IGZyb20gJy4vYm9yZGVycyc7XG5leHBvcnQgKiBmcm9tICcuL2JvcmRlcnMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBicmVha3BvaW50cyB9IGZyb20gJy4vYnJlYWtwb2ludHMnO1xuZXhwb3J0IHsgaGFuZGxlQnJlYWtwb2ludHMsIG1lcmdlQnJlYWtwb2ludHNJbk9yZGVyLCByZXNvbHZlQnJlYWtwb2ludFZhbHVlcyBhcyB1bnN0YWJsZV9yZXNvbHZlQnJlYWtwb2ludFZhbHVlcyB9IGZyb20gJy4vYnJlYWtwb2ludHMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjb21wb3NlIH0gZnJvbSAnLi9jb21wb3NlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZGlzcGxheSB9IGZyb20gJy4vZGlzcGxheSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGZsZXhib3ggfSBmcm9tICcuL2ZsZXhib3gnO1xuZXhwb3J0ICogZnJvbSAnLi9mbGV4Ym94JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZ3JpZCB9IGZyb20gJy4vY3NzR3JpZCc7XG5leHBvcnQgKiBmcm9tICcuL2Nzc0dyaWQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBwYWxldHRlIH0gZnJvbSAnLi9wYWxldHRlJztcbmV4cG9ydCAqIGZyb20gJy4vcGFsZXR0ZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHBvc2l0aW9ucyB9IGZyb20gJy4vcG9zaXRpb25zJztcbmV4cG9ydCAqIGZyb20gJy4vcG9zaXRpb25zJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc2hhZG93cyB9IGZyb20gJy4vc2hhZG93cyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHNpemluZyB9IGZyb20gJy4vc2l6aW5nJztcbmV4cG9ydCAqIGZyb20gJy4vc2l6aW5nJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc3BhY2luZyB9IGZyb20gJy4vc3BhY2luZyc7XG5leHBvcnQgKiBmcm9tICcuL3NwYWNpbmcnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzdHlsZSwgZ2V0UGF0aCwgZ2V0U3R5bGVWYWx1ZSB9IGZyb20gJy4vc3R5bGUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB0eXBvZ3JhcGh5IH0gZnJvbSAnLi90eXBvZ3JhcGh5JztcbmV4cG9ydCAqIGZyb20gJy4vdHlwb2dyYXBoeSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHVuc3RhYmxlX3N0eWxlRnVuY3Rpb25TeCwgdW5zdGFibGVfY3JlYXRlU3R5bGVGdW5jdGlvblN4LCBleHRlbmRTeFByb3AgYXMgdW5zdGFibGVfZXh0ZW5kU3hQcm9wLCB1bnN0YWJsZV9kZWZhdWx0U3hDb25maWcgfSBmcm9tICcuL3N0eWxlRnVuY3Rpb25TeCc7XG4vLyBUT0RPOiBSZW1vdmUgdGhpcyBmdW5jdGlvbiBpbiB2NlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuZXhwb3J0IGZ1bmN0aW9uIGV4cGVyaW1lbnRhbF9zeCgpIHtcbiAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGBNVUk6IFRoZSBcXGBleHBlcmltZW50YWxfc3hcXGAgaGFzIGJlZW4gbW92ZWQgdG8gXFxgdGhlbWUudW5zdGFibGVfc3hcXGAuRm9yIG1vcmUgZGV0YWlscywgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tdWkvbWF0ZXJpYWwtdWkvcHVsbC8zNTE1MC5gIDogX2Zvcm1hdE11aUVycm9yTWVzc2FnZSgyMCkpO1xufVxuZXhwb3J0IHsgZGVmYXVsdCBhcyB1bnN0YWJsZV9nZXRUaGVtZVZhbHVlIH0gZnJvbSAnLi9nZXRUaGVtZVZhbHVlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQm94IH0gZnJvbSAnLi9Cb3gnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjcmVhdGVCb3ggfSBmcm9tICcuL2NyZWF0ZUJveCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNyZWF0ZVN0eWxlZCB9IGZyb20gJy4vY3JlYXRlU3R5bGVkJztcbmV4cG9ydCAqIGZyb20gJy4vY3JlYXRlU3R5bGVkJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc3R5bGVkIH0gZnJvbSAnLi9zdHlsZWQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjcmVhdGVUaGVtZSB9IGZyb20gJy4vY3JlYXRlVGhlbWUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjcmVhdGVCcmVha3BvaW50cyB9IGZyb20gJy4vY3JlYXRlVGhlbWUvY3JlYXRlQnJlYWtwb2ludHMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjcmVhdGVTcGFjaW5nIH0gZnJvbSAnLi9jcmVhdGVUaGVtZS9jcmVhdGVTcGFjaW5nJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc2hhcGUgfSBmcm9tICcuL2NyZWF0ZVRoZW1lL3NoYXBlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdXNlVGhlbWVQcm9wcywgZ2V0VGhlbWVQcm9wcyB9IGZyb20gJy4vdXNlVGhlbWVQcm9wcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHVzZVRoZW1lIH0gZnJvbSAnLi91c2VUaGVtZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHVzZVRoZW1lV2l0aG91dERlZmF1bHQgfSBmcm9tICcuL3VzZVRoZW1lV2l0aG91dERlZmF1bHQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB1c2VNZWRpYVF1ZXJ5IH0gZnJvbSAnLi91c2VNZWRpYVF1ZXJ5JztcbmV4cG9ydCAqIGZyb20gJy4vY29sb3JNYW5pcHVsYXRvcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFRoZW1lUHJvdmlkZXIgfSBmcm9tICcuL1RoZW1lUHJvdmlkZXInO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB1bnN0YWJsZV9jcmVhdGVDc3NWYXJzUHJvdmlkZXIgfSBmcm9tICcuL2Nzc1ZhcnMvY3JlYXRlQ3NzVmFyc1Byb3ZpZGVyJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdW5zdGFibGVfY3JlYXRlR2V0Q3NzVmFyIH0gZnJvbSAnLi9jc3NWYXJzL2NyZWF0ZUdldENzc1Zhcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHVuc3RhYmxlX2Nzc1ZhcnNQYXJzZXIgfSBmcm9tICcuL2Nzc1ZhcnMvY3NzVmFyc1BhcnNlcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHVuc3RhYmxlX3ByZXBhcmVDc3NWYXJzIH0gZnJvbSAnLi9jc3NWYXJzL3ByZXBhcmVDc3NWYXJzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdW5zdGFibGVfY3JlYXRlQ3NzVmFyc1RoZW1lIH0gZnJvbSAnLi9jc3NWYXJzL2NyZWF0ZUNzc1ZhcnNUaGVtZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHJlc3BvbnNpdmVQcm9wVHlwZSB9IGZyb20gJy4vcmVzcG9uc2l2ZVByb3BUeXBlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUnRsUHJvdmlkZXIgfSBmcm9tICcuL1J0bFByb3ZpZGVyJztcbmV4cG9ydCAqIGZyb20gJy4vUnRsUHJvdmlkZXInO1xuXG4vKiogLS0tLS0tLS0tLS0tLS0tLS0gKi9cbi8qKiBMYXlvdXQgY29tcG9uZW50cyAqL1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjcmVhdGVDb250YWluZXIgfSBmcm9tICcuL0NvbnRhaW5lci9jcmVhdGVDb250YWluZXInO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDb250YWluZXIgfSBmcm9tICcuL0NvbnRhaW5lcic7XG5leHBvcnQgKiBmcm9tICcuL0NvbnRhaW5lcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFVuc3RhYmxlX0dyaWQgfSBmcm9tICcuL1Vuc3RhYmxlX0dyaWQvR3JpZCc7XG5leHBvcnQgKiBmcm9tICcuL1Vuc3RhYmxlX0dyaWQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTdGFjayB9IGZyb20gJy4vU3RhY2svU3RhY2snO1xuZXhwb3J0ICogZnJvbSAnLi9TdGFjayc7IiwgImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJicmVha3BvaW50c1wiLCBcInBhbGV0dGVcIiwgXCJzcGFjaW5nXCIsIFwic2hhcGVcIl07XG5pbXBvcnQgZGVlcG1lcmdlIGZyb20gJ0BtdWkvdXRpbHMvZGVlcG1lcmdlJztcbmltcG9ydCBjcmVhdGVCcmVha3BvaW50cyBmcm9tICcuL2NyZWF0ZUJyZWFrcG9pbnRzJztcbmltcG9ydCBzaGFwZSBmcm9tICcuL3NoYXBlJztcbmltcG9ydCBjcmVhdGVTcGFjaW5nIGZyb20gJy4vY3JlYXRlU3BhY2luZyc7XG5pbXBvcnQgc3R5bGVGdW5jdGlvblN4IGZyb20gJy4uL3N0eWxlRnVuY3Rpb25TeC9zdHlsZUZ1bmN0aW9uU3gnO1xuaW1wb3J0IGRlZmF1bHRTeENvbmZpZyBmcm9tICcuLi9zdHlsZUZ1bmN0aW9uU3gvZGVmYXVsdFN4Q29uZmlnJztcbmltcG9ydCBhcHBseVN0eWxlcyBmcm9tICcuL2FwcGx5U3R5bGVzJztcbmZ1bmN0aW9uIGNyZWF0ZVRoZW1lKG9wdGlvbnMgPSB7fSwgLi4uYXJncykge1xuICBjb25zdCB7XG4gICAgICBicmVha3BvaW50czogYnJlYWtwb2ludHNJbnB1dCA9IHt9LFxuICAgICAgcGFsZXR0ZTogcGFsZXR0ZUlucHV0ID0ge30sXG4gICAgICBzcGFjaW5nOiBzcGFjaW5nSW5wdXQsXG4gICAgICBzaGFwZTogc2hhcGVJbnB1dCA9IHt9XG4gICAgfSA9IG9wdGlvbnMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShvcHRpb25zLCBfZXhjbHVkZWQpO1xuICBjb25zdCBicmVha3BvaW50cyA9IGNyZWF0ZUJyZWFrcG9pbnRzKGJyZWFrcG9pbnRzSW5wdXQpO1xuICBjb25zdCBzcGFjaW5nID0gY3JlYXRlU3BhY2luZyhzcGFjaW5nSW5wdXQpO1xuICBsZXQgbXVpVGhlbWUgPSBkZWVwbWVyZ2Uoe1xuICAgIGJyZWFrcG9pbnRzLFxuICAgIGRpcmVjdGlvbjogJ2x0cicsXG4gICAgY29tcG9uZW50czoge30sXG4gICAgLy8gSW5qZWN0IGNvbXBvbmVudCBkZWZpbml0aW9ucy5cbiAgICBwYWxldHRlOiBfZXh0ZW5kcyh7XG4gICAgICBtb2RlOiAnbGlnaHQnXG4gICAgfSwgcGFsZXR0ZUlucHV0KSxcbiAgICBzcGFjaW5nLFxuICAgIHNoYXBlOiBfZXh0ZW5kcyh7fSwgc2hhcGUsIHNoYXBlSW5wdXQpXG4gIH0sIG90aGVyKTtcbiAgbXVpVGhlbWUuYXBwbHlTdHlsZXMgPSBhcHBseVN0eWxlcztcbiAgbXVpVGhlbWUgPSBhcmdzLnJlZHVjZSgoYWNjLCBhcmd1bWVudCkgPT4gZGVlcG1lcmdlKGFjYywgYXJndW1lbnQpLCBtdWlUaGVtZSk7XG4gIG11aVRoZW1lLnVuc3RhYmxlX3N4Q29uZmlnID0gX2V4dGVuZHMoe30sIGRlZmF1bHRTeENvbmZpZywgb3RoZXIgPT0gbnVsbCA/IHZvaWQgMCA6IG90aGVyLnVuc3RhYmxlX3N4Q29uZmlnKTtcbiAgbXVpVGhlbWUudW5zdGFibGVfc3ggPSBmdW5jdGlvbiBzeChwcm9wcykge1xuICAgIHJldHVybiBzdHlsZUZ1bmN0aW9uU3goe1xuICAgICAgc3g6IHByb3BzLFxuICAgICAgdGhlbWU6IHRoaXNcbiAgICB9KTtcbiAgfTtcbiAgcmV0dXJuIG11aVRoZW1lO1xufVxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlVGhlbWU7IiwgImltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJ2YWx1ZXNcIiwgXCJ1bml0XCIsIFwic3RlcFwiXTtcbi8vIFNvcnRlZCBBU0MgYnkgc2l6ZS4gVGhhdCdzIGltcG9ydGFudC5cbi8vIEl0IGNhbid0IGJlIGNvbmZpZ3VyZWQgYXMgaXQncyB1c2VkIHN0YXRpY2FsbHkgZm9yIHByb3BUeXBlcy5cbmV4cG9ydCBjb25zdCBicmVha3BvaW50S2V5cyA9IFsneHMnLCAnc20nLCAnbWQnLCAnbGcnLCAneGwnXTtcbmNvbnN0IHNvcnRCcmVha3BvaW50c1ZhbHVlcyA9IHZhbHVlcyA9PiB7XG4gIGNvbnN0IGJyZWFrcG9pbnRzQXNBcnJheSA9IE9iamVjdC5rZXlzKHZhbHVlcykubWFwKGtleSA9PiAoe1xuICAgIGtleSxcbiAgICB2YWw6IHZhbHVlc1trZXldXG4gIH0pKSB8fCBbXTtcbiAgLy8gU29ydCBpbiBhc2NlbmRpbmcgb3JkZXJcbiAgYnJlYWtwb2ludHNBc0FycmF5LnNvcnQoKGJyZWFrcG9pbnQxLCBicmVha3BvaW50MikgPT4gYnJlYWtwb2ludDEudmFsIC0gYnJlYWtwb2ludDIudmFsKTtcbiAgcmV0dXJuIGJyZWFrcG9pbnRzQXNBcnJheS5yZWR1Y2UoKGFjYywgb2JqKSA9PiB7XG4gICAgcmV0dXJuIF9leHRlbmRzKHt9LCBhY2MsIHtcbiAgICAgIFtvYmoua2V5XTogb2JqLnZhbFxuICAgIH0pO1xuICB9LCB7fSk7XG59O1xuXG4vLyBLZWVwIGluIG1pbmQgdGhhdCBAbWVkaWEgaXMgaW5jbHVzaXZlIGJ5IHRoZSBDU1Mgc3BlY2lmaWNhdGlvbi5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZUJyZWFrcG9pbnRzKGJyZWFrcG9pbnRzKSB7XG4gIGNvbnN0IHtcbiAgICAgIC8vIFRoZSBicmVha3BvaW50ICoqc3RhcnQqKiBhdCB0aGlzIHZhbHVlLlxuICAgICAgLy8gRm9yIGluc3RhbmNlIHdpdGggdGhlIGZpcnN0IGJyZWFrcG9pbnQgeHM6IFt4cywgc20pLlxuICAgICAgdmFsdWVzID0ge1xuICAgICAgICB4czogMCxcbiAgICAgICAgLy8gcGhvbmVcbiAgICAgICAgc206IDYwMCxcbiAgICAgICAgLy8gdGFibGV0XG4gICAgICAgIG1kOiA5MDAsXG4gICAgICAgIC8vIHNtYWxsIGxhcHRvcFxuICAgICAgICBsZzogMTIwMCxcbiAgICAgICAgLy8gZGVza3RvcFxuICAgICAgICB4bDogMTUzNiAvLyBsYXJnZSBzY3JlZW5cbiAgICAgIH0sXG4gICAgICB1bml0ID0gJ3B4JyxcbiAgICAgIHN0ZXAgPSA1XG4gICAgfSA9IGJyZWFrcG9pbnRzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoYnJlYWtwb2ludHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IHNvcnRlZFZhbHVlcyA9IHNvcnRCcmVha3BvaW50c1ZhbHVlcyh2YWx1ZXMpO1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoc29ydGVkVmFsdWVzKTtcbiAgZnVuY3Rpb24gdXAoa2V5KSB7XG4gICAgY29uc3QgdmFsdWUgPSB0eXBlb2YgdmFsdWVzW2tleV0gPT09ICdudW1iZXInID8gdmFsdWVzW2tleV0gOiBrZXk7XG4gICAgcmV0dXJuIGBAbWVkaWEgKG1pbi13aWR0aDoke3ZhbHVlfSR7dW5pdH0pYDtcbiAgfVxuICBmdW5jdGlvbiBkb3duKGtleSkge1xuICAgIGNvbnN0IHZhbHVlID0gdHlwZW9mIHZhbHVlc1trZXldID09PSAnbnVtYmVyJyA/IHZhbHVlc1trZXldIDoga2V5O1xuICAgIHJldHVybiBgQG1lZGlhIChtYXgtd2lkdGg6JHt2YWx1ZSAtIHN0ZXAgLyAxMDB9JHt1bml0fSlgO1xuICB9XG4gIGZ1bmN0aW9uIGJldHdlZW4oc3RhcnQsIGVuZCkge1xuICAgIGNvbnN0IGVuZEluZGV4ID0ga2V5cy5pbmRleE9mKGVuZCk7XG4gICAgcmV0dXJuIGBAbWVkaWEgKG1pbi13aWR0aDoke3R5cGVvZiB2YWx1ZXNbc3RhcnRdID09PSAnbnVtYmVyJyA/IHZhbHVlc1tzdGFydF0gOiBzdGFydH0ke3VuaXR9KSBhbmQgYCArIGAobWF4LXdpZHRoOiR7KGVuZEluZGV4ICE9PSAtMSAmJiB0eXBlb2YgdmFsdWVzW2tleXNbZW5kSW5kZXhdXSA9PT0gJ251bWJlcicgPyB2YWx1ZXNba2V5c1tlbmRJbmRleF1dIDogZW5kKSAtIHN0ZXAgLyAxMDB9JHt1bml0fSlgO1xuICB9XG4gIGZ1bmN0aW9uIG9ubHkoa2V5KSB7XG4gICAgaWYgKGtleXMuaW5kZXhPZihrZXkpICsgMSA8IGtleXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gYmV0d2VlbihrZXksIGtleXNba2V5cy5pbmRleE9mKGtleSkgKyAxXSk7XG4gICAgfVxuICAgIHJldHVybiB1cChrZXkpO1xuICB9XG4gIGZ1bmN0aW9uIG5vdChrZXkpIHtcbiAgICAvLyBoYW5kbGUgZmlyc3QgYW5kIGxhc3Qga2V5IHNlcGFyYXRlbHksIGZvciBiZXR0ZXIgcmVhZGFiaWxpdHlcbiAgICBjb25zdCBrZXlJbmRleCA9IGtleXMuaW5kZXhPZihrZXkpO1xuICAgIGlmIChrZXlJbmRleCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHVwKGtleXNbMV0pO1xuICAgIH1cbiAgICBpZiAoa2V5SW5kZXggPT09IGtleXMubGVuZ3RoIC0gMSkge1xuICAgICAgcmV0dXJuIGRvd24oa2V5c1trZXlJbmRleF0pO1xuICAgIH1cbiAgICByZXR1cm4gYmV0d2VlbihrZXksIGtleXNba2V5cy5pbmRleE9mKGtleSkgKyAxXSkucmVwbGFjZSgnQG1lZGlhJywgJ0BtZWRpYSBub3QgYWxsIGFuZCcpO1xuICB9XG4gIHJldHVybiBfZXh0ZW5kcyh7XG4gICAga2V5cyxcbiAgICB2YWx1ZXM6IHNvcnRlZFZhbHVlcyxcbiAgICB1cCxcbiAgICBkb3duLFxuICAgIGJldHdlZW4sXG4gICAgb25seSxcbiAgICBub3QsXG4gICAgdW5pdFxuICB9LCBvdGhlcik7XG59IiwgImNvbnN0IHNoYXBlID0ge1xuICBib3JkZXJSYWRpdXM6IDRcbn07XG5leHBvcnQgZGVmYXVsdCBzaGFwZTsiLCAiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGRlZXBtZXJnZSBmcm9tICdAbXVpL3V0aWxzL2RlZXBtZXJnZSc7XG5pbXBvcnQgbWVyZ2UgZnJvbSAnLi9tZXJnZSc7XG5cbi8vIFRoZSBicmVha3BvaW50ICoqc3RhcnQqKiBhdCB0aGlzIHZhbHVlLlxuLy8gRm9yIGluc3RhbmNlIHdpdGggdGhlIGZpcnN0IGJyZWFrcG9pbnQgeHM6IFt4cywgc21bLlxuZXhwb3J0IGNvbnN0IHZhbHVlcyA9IHtcbiAgeHM6IDAsXG4gIC8vIHBob25lXG4gIHNtOiA2MDAsXG4gIC8vIHRhYmxldFxuICBtZDogOTAwLFxuICAvLyBzbWFsbCBsYXB0b3BcbiAgbGc6IDEyMDAsXG4gIC8vIGRlc2t0b3BcbiAgeGw6IDE1MzYgLy8gbGFyZ2Ugc2NyZWVuXG59O1xuY29uc3QgZGVmYXVsdEJyZWFrcG9pbnRzID0ge1xuICAvLyBTb3J0ZWQgQVNDIGJ5IHNpemUuIFRoYXQncyBpbXBvcnRhbnQuXG4gIC8vIEl0IGNhbid0IGJlIGNvbmZpZ3VyZWQgYXMgaXQncyB1c2VkIHN0YXRpY2FsbHkgZm9yIHByb3BUeXBlcy5cbiAga2V5czogWyd4cycsICdzbScsICdtZCcsICdsZycsICd4bCddLFxuICB1cDoga2V5ID0+IGBAbWVkaWEgKG1pbi13aWR0aDoke3ZhbHVlc1trZXldfXB4KWBcbn07XG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlQnJlYWtwb2ludHMocHJvcHMsIHByb3BWYWx1ZSwgc3R5bGVGcm9tUHJvcFZhbHVlKSB7XG4gIGNvbnN0IHRoZW1lID0gcHJvcHMudGhlbWUgfHwge307XG4gIGlmIChBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHtcbiAgICBjb25zdCB0aGVtZUJyZWFrcG9pbnRzID0gdGhlbWUuYnJlYWtwb2ludHMgfHwgZGVmYXVsdEJyZWFrcG9pbnRzO1xuICAgIHJldHVybiBwcm9wVmFsdWUucmVkdWNlKChhY2MsIGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICBhY2NbdGhlbWVCcmVha3BvaW50cy51cCh0aGVtZUJyZWFrcG9pbnRzLmtleXNbaW5kZXhdKV0gPSBzdHlsZUZyb21Qcm9wVmFsdWUocHJvcFZhbHVlW2luZGV4XSk7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KTtcbiAgfVxuICBpZiAodHlwZW9mIHByb3BWYWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICBjb25zdCB0aGVtZUJyZWFrcG9pbnRzID0gdGhlbWUuYnJlYWtwb2ludHMgfHwgZGVmYXVsdEJyZWFrcG9pbnRzO1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhwcm9wVmFsdWUpLnJlZHVjZSgoYWNjLCBicmVha3BvaW50KSA9PiB7XG4gICAgICAvLyBrZXkgaXMgYnJlYWtwb2ludFxuICAgICAgaWYgKE9iamVjdC5rZXlzKHRoZW1lQnJlYWtwb2ludHMudmFsdWVzIHx8IHZhbHVlcykuaW5kZXhPZihicmVha3BvaW50KSAhPT0gLTEpIHtcbiAgICAgICAgY29uc3QgbWVkaWFLZXkgPSB0aGVtZUJyZWFrcG9pbnRzLnVwKGJyZWFrcG9pbnQpO1xuICAgICAgICBhY2NbbWVkaWFLZXldID0gc3R5bGVGcm9tUHJvcFZhbHVlKHByb3BWYWx1ZVticmVha3BvaW50XSwgYnJlYWtwb2ludCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjc3NLZXkgPSBicmVha3BvaW50O1xuICAgICAgICBhY2NbY3NzS2V5XSA9IHByb3BWYWx1ZVtjc3NLZXldO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG4gIH1cbiAgY29uc3Qgb3V0cHV0ID0gc3R5bGVGcm9tUHJvcFZhbHVlKHByb3BWYWx1ZSk7XG4gIHJldHVybiBvdXRwdXQ7XG59XG5mdW5jdGlvbiBicmVha3BvaW50cyhzdHlsZUZ1bmN0aW9uKSB7XG4gIC8vIGZhbHNlIHBvc2l0aXZlXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvblxuICBjb25zdCBuZXdTdHlsZUZ1bmN0aW9uID0gcHJvcHMgPT4ge1xuICAgIGNvbnN0IHRoZW1lID0gcHJvcHMudGhlbWUgfHwge307XG4gICAgY29uc3QgYmFzZSA9IHN0eWxlRnVuY3Rpb24ocHJvcHMpO1xuICAgIGNvbnN0IHRoZW1lQnJlYWtwb2ludHMgPSB0aGVtZS5icmVha3BvaW50cyB8fCBkZWZhdWx0QnJlYWtwb2ludHM7XG4gICAgY29uc3QgZXh0ZW5kZWQgPSB0aGVtZUJyZWFrcG9pbnRzLmtleXMucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAgICAgaWYgKHByb3BzW2tleV0pIHtcbiAgICAgICAgYWNjID0gYWNjIHx8IHt9O1xuICAgICAgICBhY2NbdGhlbWVCcmVha3BvaW50cy51cChrZXkpXSA9IHN0eWxlRnVuY3Rpb24oX2V4dGVuZHMoe1xuICAgICAgICAgIHRoZW1lXG4gICAgICAgIH0sIHByb3BzW2tleV0pKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgbnVsbCk7XG4gICAgcmV0dXJuIG1lcmdlKGJhc2UsIGV4dGVuZGVkKTtcbiAgfTtcbiAgbmV3U3R5bGVGdW5jdGlvbi5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gX2V4dGVuZHMoe30sIHN0eWxlRnVuY3Rpb24ucHJvcFR5cGVzLCB7XG4gICAgeHM6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgc206IFByb3BUeXBlcy5vYmplY3QsXG4gICAgbWQ6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgbGc6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgeGw6IFByb3BUeXBlcy5vYmplY3RcbiAgfSkgOiB7fTtcbiAgbmV3U3R5bGVGdW5jdGlvbi5maWx0ZXJQcm9wcyA9IFsneHMnLCAnc20nLCAnbWQnLCAnbGcnLCAneGwnLCAuLi5zdHlsZUZ1bmN0aW9uLmZpbHRlclByb3BzXTtcbiAgcmV0dXJuIG5ld1N0eWxlRnVuY3Rpb247XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRW1wdHlCcmVha3BvaW50T2JqZWN0KGJyZWFrcG9pbnRzSW5wdXQgPSB7fSkge1xuICB2YXIgX2JyZWFrcG9pbnRzSW5wdXQka2V5O1xuICBjb25zdCBicmVha3BvaW50c0luT3JkZXIgPSAoX2JyZWFrcG9pbnRzSW5wdXQka2V5ID0gYnJlYWtwb2ludHNJbnB1dC5rZXlzKSA9PSBudWxsID8gdm9pZCAwIDogX2JyZWFrcG9pbnRzSW5wdXQka2V5LnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcbiAgICBjb25zdCBicmVha3BvaW50U3R5bGVLZXkgPSBicmVha3BvaW50c0lucHV0LnVwKGtleSk7XG4gICAgYWNjW2JyZWFrcG9pbnRTdHlsZUtleV0gPSB7fTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG4gIHJldHVybiBicmVha3BvaW50c0luT3JkZXIgfHwge307XG59XG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlVW51c2VkQnJlYWtwb2ludHMoYnJlYWtwb2ludEtleXMsIHN0eWxlKSB7XG4gIHJldHVybiBicmVha3BvaW50S2V5cy5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gICAgY29uc3QgYnJlYWtwb2ludE91dHB1dCA9IGFjY1trZXldO1xuICAgIGNvbnN0IGlzQnJlYWtwb2ludFVudXNlZCA9ICFicmVha3BvaW50T3V0cHV0IHx8IE9iamVjdC5rZXlzKGJyZWFrcG9pbnRPdXRwdXQpLmxlbmd0aCA9PT0gMDtcbiAgICBpZiAoaXNCcmVha3BvaW50VW51c2VkKSB7XG4gICAgICBkZWxldGUgYWNjW2tleV07XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIHN0eWxlKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUJyZWFrcG9pbnRzSW5PcmRlcihicmVha3BvaW50c0lucHV0LCAuLi5zdHlsZXMpIHtcbiAgY29uc3QgZW1wdHlCcmVha3BvaW50cyA9IGNyZWF0ZUVtcHR5QnJlYWtwb2ludE9iamVjdChicmVha3BvaW50c0lucHV0KTtcbiAgY29uc3QgbWVyZ2VkT3V0cHV0ID0gW2VtcHR5QnJlYWtwb2ludHMsIC4uLnN0eWxlc10ucmVkdWNlKChwcmV2LCBuZXh0KSA9PiBkZWVwbWVyZ2UocHJldiwgbmV4dCksIHt9KTtcbiAgcmV0dXJuIHJlbW92ZVVudXNlZEJyZWFrcG9pbnRzKE9iamVjdC5rZXlzKGVtcHR5QnJlYWtwb2ludHMpLCBtZXJnZWRPdXRwdXQpO1xufVxuXG4vLyBjb21wdXRlIGJhc2UgZm9yIHJlc3BvbnNpdmUgdmFsdWVzOyBlLmcuLFxuLy8gWzEsMiwzXSA9PiB7eHM6IHRydWUsIHNtOiB0cnVlLCBtZDogdHJ1ZX1cbi8vIHt4czogMSwgc206IDIsIG1kOiAzfSA9PiB7eHM6IHRydWUsIHNtOiB0cnVlLCBtZDogdHJ1ZX1cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlQnJlYWtwb2ludHNCYXNlKGJyZWFrcG9pbnRWYWx1ZXMsIHRoZW1lQnJlYWtwb2ludHMpIHtcbiAgLy8gZml4ZWQgdmFsdWVcbiAgaWYgKHR5cGVvZiBicmVha3BvaW50VmFsdWVzICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiB7fTtcbiAgfVxuICBjb25zdCBiYXNlID0ge307XG4gIGNvbnN0IGJyZWFrcG9pbnRzS2V5cyA9IE9iamVjdC5rZXlzKHRoZW1lQnJlYWtwb2ludHMpO1xuICBpZiAoQXJyYXkuaXNBcnJheShicmVha3BvaW50VmFsdWVzKSkge1xuICAgIGJyZWFrcG9pbnRzS2V5cy5mb3JFYWNoKChicmVha3BvaW50LCBpKSA9PiB7XG4gICAgICBpZiAoaSA8IGJyZWFrcG9pbnRWYWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgIGJhc2VbYnJlYWtwb2ludF0gPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGJyZWFrcG9pbnRzS2V5cy5mb3JFYWNoKGJyZWFrcG9pbnQgPT4ge1xuICAgICAgaWYgKGJyZWFrcG9pbnRWYWx1ZXNbYnJlYWtwb2ludF0gIT0gbnVsbCkge1xuICAgICAgICBiYXNlW2JyZWFrcG9pbnRdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4gYmFzZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlQnJlYWtwb2ludFZhbHVlcyh7XG4gIHZhbHVlczogYnJlYWtwb2ludFZhbHVlcyxcbiAgYnJlYWtwb2ludHM6IHRoZW1lQnJlYWtwb2ludHMsXG4gIGJhc2U6IGN1c3RvbUJhc2Vcbn0pIHtcbiAgY29uc3QgYmFzZSA9IGN1c3RvbUJhc2UgfHwgY29tcHV0ZUJyZWFrcG9pbnRzQmFzZShicmVha3BvaW50VmFsdWVzLCB0aGVtZUJyZWFrcG9pbnRzKTtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGJhc2UpO1xuICBpZiAoa2V5cy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gYnJlYWtwb2ludFZhbHVlcztcbiAgfVxuICBsZXQgcHJldmlvdXM7XG4gIHJldHVybiBrZXlzLnJlZHVjZSgoYWNjLCBicmVha3BvaW50LCBpKSA9PiB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYnJlYWtwb2ludFZhbHVlcykpIHtcbiAgICAgIGFjY1ticmVha3BvaW50XSA9IGJyZWFrcG9pbnRWYWx1ZXNbaV0gIT0gbnVsbCA/IGJyZWFrcG9pbnRWYWx1ZXNbaV0gOiBicmVha3BvaW50VmFsdWVzW3ByZXZpb3VzXTtcbiAgICAgIHByZXZpb3VzID0gaTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBicmVha3BvaW50VmFsdWVzID09PSAnb2JqZWN0Jykge1xuICAgICAgYWNjW2JyZWFrcG9pbnRdID0gYnJlYWtwb2ludFZhbHVlc1ticmVha3BvaW50XSAhPSBudWxsID8gYnJlYWtwb2ludFZhbHVlc1ticmVha3BvaW50XSA6IGJyZWFrcG9pbnRWYWx1ZXNbcHJldmlvdXNdO1xuICAgICAgcHJldmlvdXMgPSBicmVha3BvaW50O1xuICAgIH0gZWxzZSB7XG4gICAgICBhY2NbYnJlYWtwb2ludF0gPSBicmVha3BvaW50VmFsdWVzO1xuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG59XG5leHBvcnQgZGVmYXVsdCBicmVha3BvaW50czsiLCAiaW1wb3J0IGRlZXBtZXJnZSBmcm9tICdAbXVpL3V0aWxzL2RlZXBtZXJnZSc7XG5mdW5jdGlvbiBtZXJnZShhY2MsIGl0ZW0pIHtcbiAgaWYgKCFpdGVtKSB7XG4gICAgcmV0dXJuIGFjYztcbiAgfVxuICByZXR1cm4gZGVlcG1lcmdlKGFjYywgaXRlbSwge1xuICAgIGNsb25lOiBmYWxzZSAvLyBObyBuZWVkIHRvIGNsb25lIGRlZXAsIGl0J3Mgd2F5IGZhc3Rlci5cbiAgfSk7XG59XG5leHBvcnQgZGVmYXVsdCBtZXJnZTsiLCAiaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnQG11aS91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCByZXNwb25zaXZlUHJvcFR5cGUgZnJvbSAnLi9yZXNwb25zaXZlUHJvcFR5cGUnO1xuaW1wb3J0IHsgaGFuZGxlQnJlYWtwb2ludHMgfSBmcm9tICcuL2JyZWFrcG9pbnRzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXRoKG9iaiwgcGF0aCwgY2hlY2tWYXJzID0gdHJ1ZSkge1xuICBpZiAoIXBhdGggfHwgdHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBDaGVjayBpZiBDU1MgdmFyaWFibGVzIGFyZSB1c2VkXG4gIGlmIChvYmogJiYgb2JqLnZhcnMgJiYgY2hlY2tWYXJzKSB7XG4gICAgY29uc3QgdmFsID0gYHZhcnMuJHtwYXRofWAuc3BsaXQoJy4nKS5yZWR1Y2UoKGFjYywgaXRlbSkgPT4gYWNjICYmIGFjY1tpdGVtXSA/IGFjY1tpdGVtXSA6IG51bGwsIG9iaik7XG4gICAgaWYgKHZhbCAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gdmFsO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcGF0aC5zcGxpdCgnLicpLnJlZHVjZSgoYWNjLCBpdGVtKSA9PiB7XG4gICAgaWYgKGFjYyAmJiBhY2NbaXRlbV0gIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGFjY1tpdGVtXTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH0sIG9iaik7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0U3R5bGVWYWx1ZSh0aGVtZU1hcHBpbmcsIHRyYW5zZm9ybSwgcHJvcFZhbHVlRmluYWwsIHVzZXJWYWx1ZSA9IHByb3BWYWx1ZUZpbmFsKSB7XG4gIGxldCB2YWx1ZTtcbiAgaWYgKHR5cGVvZiB0aGVtZU1hcHBpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YWx1ZSA9IHRoZW1lTWFwcGluZyhwcm9wVmFsdWVGaW5hbCk7XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh0aGVtZU1hcHBpbmcpKSB7XG4gICAgdmFsdWUgPSB0aGVtZU1hcHBpbmdbcHJvcFZhbHVlRmluYWxdIHx8IHVzZXJWYWx1ZTtcbiAgfSBlbHNlIHtcbiAgICB2YWx1ZSA9IGdldFBhdGgodGhlbWVNYXBwaW5nLCBwcm9wVmFsdWVGaW5hbCkgfHwgdXNlclZhbHVlO1xuICB9XG4gIGlmICh0cmFuc2Zvcm0pIHtcbiAgICB2YWx1ZSA9IHRyYW5zZm9ybSh2YWx1ZSwgdXNlclZhbHVlLCB0aGVtZU1hcHBpbmcpO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cbmZ1bmN0aW9uIHN0eWxlKG9wdGlvbnMpIHtcbiAgY29uc3Qge1xuICAgIHByb3AsXG4gICAgY3NzUHJvcGVydHkgPSBvcHRpb25zLnByb3AsXG4gICAgdGhlbWVLZXksXG4gICAgdHJhbnNmb3JtXG4gIH0gPSBvcHRpb25zO1xuXG4gIC8vIGZhbHNlIHBvc2l0aXZlXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvblxuICBjb25zdCBmbiA9IHByb3BzID0+IHtcbiAgICBpZiAocHJvcHNbcHJvcF0gPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHByb3BWYWx1ZSA9IHByb3BzW3Byb3BdO1xuICAgIGNvbnN0IHRoZW1lID0gcHJvcHMudGhlbWU7XG4gICAgY29uc3QgdGhlbWVNYXBwaW5nID0gZ2V0UGF0aCh0aGVtZSwgdGhlbWVLZXkpIHx8IHt9O1xuICAgIGNvbnN0IHN0eWxlRnJvbVByb3BWYWx1ZSA9IHByb3BWYWx1ZUZpbmFsID0+IHtcbiAgICAgIGxldCB2YWx1ZSA9IGdldFN0eWxlVmFsdWUodGhlbWVNYXBwaW5nLCB0cmFuc2Zvcm0sIHByb3BWYWx1ZUZpbmFsKTtcbiAgICAgIGlmIChwcm9wVmFsdWVGaW5hbCA9PT0gdmFsdWUgJiYgdHlwZW9mIHByb3BWYWx1ZUZpbmFsID09PSAnc3RyaW5nJykge1xuICAgICAgICAvLyBIYXZlbid0IGZvdW5kIHZhbHVlXG4gICAgICAgIHZhbHVlID0gZ2V0U3R5bGVWYWx1ZSh0aGVtZU1hcHBpbmcsIHRyYW5zZm9ybSwgYCR7cHJvcH0ke3Byb3BWYWx1ZUZpbmFsID09PSAnZGVmYXVsdCcgPyAnJyA6IGNhcGl0YWxpemUocHJvcFZhbHVlRmluYWwpfWAsIHByb3BWYWx1ZUZpbmFsKTtcbiAgICAgIH1cbiAgICAgIGlmIChjc3NQcm9wZXJ0eSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW2Nzc1Byb3BlcnR5XTogdmFsdWVcbiAgICAgIH07XG4gICAgfTtcbiAgICByZXR1cm4gaGFuZGxlQnJlYWtwb2ludHMocHJvcHMsIHByb3BWYWx1ZSwgc3R5bGVGcm9tUHJvcFZhbHVlKTtcbiAgfTtcbiAgZm4ucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHtcbiAgICBbcHJvcF06IHJlc3BvbnNpdmVQcm9wVHlwZVxuICB9IDoge307XG4gIGZuLmZpbHRlclByb3BzID0gW3Byb3BdO1xuICByZXR1cm4gZm47XG59XG5leHBvcnQgZGVmYXVsdCBzdHlsZTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWVtb2l6ZShmbikge1xuICBjb25zdCBjYWNoZSA9IHt9O1xuICByZXR1cm4gYXJnID0+IHtcbiAgICBpZiAoY2FjaGVbYXJnXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjYWNoZVthcmddID0gZm4oYXJnKTtcbiAgICB9XG4gICAgcmV0dXJuIGNhY2hlW2FyZ107XG4gIH07XG59IiwgImltcG9ydCByZXNwb25zaXZlUHJvcFR5cGUgZnJvbSAnLi9yZXNwb25zaXZlUHJvcFR5cGUnO1xuaW1wb3J0IHsgaGFuZGxlQnJlYWtwb2ludHMgfSBmcm9tICcuL2JyZWFrcG9pbnRzJztcbmltcG9ydCB7IGdldFBhdGggfSBmcm9tICcuL3N0eWxlJztcbmltcG9ydCBtZXJnZSBmcm9tICcuL21lcmdlJztcbmltcG9ydCBtZW1vaXplIGZyb20gJy4vbWVtb2l6ZSc7XG5jb25zdCBwcm9wZXJ0aWVzID0ge1xuICBtOiAnbWFyZ2luJyxcbiAgcDogJ3BhZGRpbmcnXG59O1xuY29uc3QgZGlyZWN0aW9ucyA9IHtcbiAgdDogJ1RvcCcsXG4gIHI6ICdSaWdodCcsXG4gIGI6ICdCb3R0b20nLFxuICBsOiAnTGVmdCcsXG4gIHg6IFsnTGVmdCcsICdSaWdodCddLFxuICB5OiBbJ1RvcCcsICdCb3R0b20nXVxufTtcbmNvbnN0IGFsaWFzZXMgPSB7XG4gIG1hcmdpblg6ICdteCcsXG4gIG1hcmdpblk6ICdteScsXG4gIHBhZGRpbmdYOiAncHgnLFxuICBwYWRkaW5nWTogJ3B5J1xufTtcblxuLy8gbWVtb2l6ZSgpIGltcGFjdDpcbi8vIEZyb20gMzAwLDAwMCBvcHMvc2VjXG4vLyBUbyAzNTAsMDAwIG9wcy9zZWNcbmNvbnN0IGdldENzc1Byb3BlcnRpZXMgPSBtZW1vaXplKHByb3AgPT4ge1xuICAvLyBJdCdzIG5vdCBhIHNob3J0aGFuZCBub3RhdGlvbi5cbiAgaWYgKHByb3AubGVuZ3RoID4gMikge1xuICAgIGlmIChhbGlhc2VzW3Byb3BdKSB7XG4gICAgICBwcm9wID0gYWxpYXNlc1twcm9wXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFtwcm9wXTtcbiAgICB9XG4gIH1cbiAgY29uc3QgW2EsIGJdID0gcHJvcC5zcGxpdCgnJyk7XG4gIGNvbnN0IHByb3BlcnR5ID0gcHJvcGVydGllc1thXTtcbiAgY29uc3QgZGlyZWN0aW9uID0gZGlyZWN0aW9uc1tiXSB8fCAnJztcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoZGlyZWN0aW9uKSA/IGRpcmVjdGlvbi5tYXAoZGlyID0+IHByb3BlcnR5ICsgZGlyKSA6IFtwcm9wZXJ0eSArIGRpcmVjdGlvbl07XG59KTtcbmV4cG9ydCBjb25zdCBtYXJnaW5LZXlzID0gWydtJywgJ210JywgJ21yJywgJ21iJywgJ21sJywgJ214JywgJ215JywgJ21hcmdpbicsICdtYXJnaW5Ub3AnLCAnbWFyZ2luUmlnaHQnLCAnbWFyZ2luQm90dG9tJywgJ21hcmdpbkxlZnQnLCAnbWFyZ2luWCcsICdtYXJnaW5ZJywgJ21hcmdpbklubGluZScsICdtYXJnaW5JbmxpbmVTdGFydCcsICdtYXJnaW5JbmxpbmVFbmQnLCAnbWFyZ2luQmxvY2snLCAnbWFyZ2luQmxvY2tTdGFydCcsICdtYXJnaW5CbG9ja0VuZCddO1xuZXhwb3J0IGNvbnN0IHBhZGRpbmdLZXlzID0gWydwJywgJ3B0JywgJ3ByJywgJ3BiJywgJ3BsJywgJ3B4JywgJ3B5JywgJ3BhZGRpbmcnLCAncGFkZGluZ1RvcCcsICdwYWRkaW5nUmlnaHQnLCAncGFkZGluZ0JvdHRvbScsICdwYWRkaW5nTGVmdCcsICdwYWRkaW5nWCcsICdwYWRkaW5nWScsICdwYWRkaW5nSW5saW5lJywgJ3BhZGRpbmdJbmxpbmVTdGFydCcsICdwYWRkaW5nSW5saW5lRW5kJywgJ3BhZGRpbmdCbG9jaycsICdwYWRkaW5nQmxvY2tTdGFydCcsICdwYWRkaW5nQmxvY2tFbmQnXTtcbmNvbnN0IHNwYWNpbmdLZXlzID0gWy4uLm1hcmdpbktleXMsIC4uLnBhZGRpbmdLZXlzXTtcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVVbmFyeVVuaXQodGhlbWUsIHRoZW1lS2V5LCBkZWZhdWx0VmFsdWUsIHByb3BOYW1lKSB7XG4gIHZhciBfZ2V0UGF0aDtcbiAgY29uc3QgdGhlbWVTcGFjaW5nID0gKF9nZXRQYXRoID0gZ2V0UGF0aCh0aGVtZSwgdGhlbWVLZXksIGZhbHNlKSkgIT0gbnVsbCA/IF9nZXRQYXRoIDogZGVmYXVsdFZhbHVlO1xuICBpZiAodHlwZW9mIHRoZW1lU3BhY2luZyA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gYWJzID0+IHtcbiAgICAgIGlmICh0eXBlb2YgYWJzID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gYWJzO1xuICAgICAgfVxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBhYnMgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgTVVJOiBFeHBlY3RlZCAke3Byb3BOYW1lfSBhcmd1bWVudCB0byBiZSBhIG51bWJlciBvciBhIHN0cmluZywgZ290ICR7YWJzfS5gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoZW1lU3BhY2luZyAqIGFicztcbiAgICB9O1xuICB9XG4gIGlmIChBcnJheS5pc0FycmF5KHRoZW1lU3BhY2luZykpIHtcbiAgICByZXR1cm4gYWJzID0+IHtcbiAgICAgIGlmICh0eXBlb2YgYWJzID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gYWJzO1xuICAgICAgfVxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGFicykpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFtgTVVJOiBUaGUgXFxgdGhlbWUuJHt0aGVtZUtleX1cXGAgYXJyYXkgdHlwZSBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCBub24gaW50ZWdlciB2YWx1ZXMuYCArIGBZb3Ugc2hvdWxkIGVpdGhlciB1c2UgYW4gaW50ZWdlciB2YWx1ZSB0aGF0IGNhbiBiZSB1c2VkIGFzIGluZGV4LCBvciBkZWZpbmUgdGhlIFxcYHRoZW1lLiR7dGhlbWVLZXl9XFxgIGFzIGEgbnVtYmVyLmBdLmpvaW4oJ1xcbicpKTtcbiAgICAgICAgfSBlbHNlIGlmIChhYnMgPiB0aGVtZVNwYWNpbmcubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoW2BNVUk6IFRoZSB2YWx1ZSBwcm92aWRlZCAoJHthYnN9KSBvdmVyZmxvd3MuYCwgYFRoZSBzdXBwb3J0ZWQgdmFsdWVzIGFyZTogJHtKU09OLnN0cmluZ2lmeSh0aGVtZVNwYWNpbmcpfS5gLCBgJHthYnN9ID4gJHt0aGVtZVNwYWNpbmcubGVuZ3RoIC0gMX0sIHlvdSBuZWVkIHRvIGFkZCB0aGUgbWlzc2luZyB2YWx1ZXMuYF0uam9pbignXFxuJykpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhlbWVTcGFjaW5nW2Fic107XG4gICAgfTtcbiAgfVxuICBpZiAodHlwZW9mIHRoZW1lU3BhY2luZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB0aGVtZVNwYWNpbmc7XG4gIH1cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBjb25zb2xlLmVycm9yKFtgTVVJOiBUaGUgXFxgdGhlbWUuJHt0aGVtZUtleX1cXGAgdmFsdWUgKCR7dGhlbWVTcGFjaW5nfSkgaXMgaW52YWxpZC5gLCAnSXQgc2hvdWxkIGJlIGEgbnVtYmVyLCBhbiBhcnJheSBvciBhIGZ1bmN0aW9uLiddLmpvaW4oJ1xcbicpKTtcbiAgfVxuICByZXR1cm4gKCkgPT4gdW5kZWZpbmVkO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVVuYXJ5U3BhY2luZyh0aGVtZSkge1xuICByZXR1cm4gY3JlYXRlVW5hcnlVbml0KHRoZW1lLCAnc3BhY2luZycsIDgsICdzcGFjaW5nJyk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0VmFsdWUodHJhbnNmb3JtZXIsIHByb3BWYWx1ZSkge1xuICBpZiAodHlwZW9mIHByb3BWYWx1ZSA9PT0gJ3N0cmluZycgfHwgcHJvcFZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gcHJvcFZhbHVlO1xuICB9XG4gIGNvbnN0IGFicyA9IE1hdGguYWJzKHByb3BWYWx1ZSk7XG4gIGNvbnN0IHRyYW5zZm9ybWVkID0gdHJhbnNmb3JtZXIoYWJzKTtcbiAgaWYgKHByb3BWYWx1ZSA+PSAwKSB7XG4gICAgcmV0dXJuIHRyYW5zZm9ybWVkO1xuICB9XG4gIGlmICh0eXBlb2YgdHJhbnNmb3JtZWQgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIC10cmFuc2Zvcm1lZDtcbiAgfVxuICByZXR1cm4gYC0ke3RyYW5zZm9ybWVkfWA7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0U3R5bGVGcm9tUHJvcFZhbHVlKGNzc1Byb3BlcnRpZXMsIHRyYW5zZm9ybWVyKSB7XG4gIHJldHVybiBwcm9wVmFsdWUgPT4gY3NzUHJvcGVydGllcy5yZWR1Y2UoKGFjYywgY3NzUHJvcGVydHkpID0+IHtcbiAgICBhY2NbY3NzUHJvcGVydHldID0gZ2V0VmFsdWUodHJhbnNmb3JtZXIsIHByb3BWYWx1ZSk7XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xufVxuZnVuY3Rpb24gcmVzb2x2ZUNzc1Byb3BlcnR5KHByb3BzLCBrZXlzLCBwcm9wLCB0cmFuc2Zvcm1lcikge1xuICAvLyBVc2luZyBhIGhhc2ggY29tcHV0YXRpb24gb3ZlciBhbiBhcnJheSBpdGVyYXRpb24gY291bGQgYmUgZmFzdGVyLCBidXQgd2l0aCBvbmx5IDI4IGl0ZW1zLFxuICAvLyBpdCdzIGRvZXNuJ3Qgd29ydGggdGhlIGJ1bmRsZSBzaXplLlxuICBpZiAoa2V5cy5pbmRleE9mKHByb3ApID09PSAtMSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IGNzc1Byb3BlcnRpZXMgPSBnZXRDc3NQcm9wZXJ0aWVzKHByb3ApO1xuICBjb25zdCBzdHlsZUZyb21Qcm9wVmFsdWUgPSBnZXRTdHlsZUZyb21Qcm9wVmFsdWUoY3NzUHJvcGVydGllcywgdHJhbnNmb3JtZXIpO1xuICBjb25zdCBwcm9wVmFsdWUgPSBwcm9wc1twcm9wXTtcbiAgcmV0dXJuIGhhbmRsZUJyZWFrcG9pbnRzKHByb3BzLCBwcm9wVmFsdWUsIHN0eWxlRnJvbVByb3BWYWx1ZSk7XG59XG5mdW5jdGlvbiBzdHlsZShwcm9wcywga2V5cykge1xuICBjb25zdCB0cmFuc2Zvcm1lciA9IGNyZWF0ZVVuYXJ5U3BhY2luZyhwcm9wcy50aGVtZSk7XG4gIHJldHVybiBPYmplY3Qua2V5cyhwcm9wcykubWFwKHByb3AgPT4gcmVzb2x2ZUNzc1Byb3BlcnR5KHByb3BzLCBrZXlzLCBwcm9wLCB0cmFuc2Zvcm1lcikpLnJlZHVjZShtZXJnZSwge30pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG1hcmdpbihwcm9wcykge1xuICByZXR1cm4gc3R5bGUocHJvcHMsIG1hcmdpbktleXMpO1xufVxubWFyZ2luLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBtYXJnaW5LZXlzLnJlZHVjZSgob2JqLCBrZXkpID0+IHtcbiAgb2JqW2tleV0gPSByZXNwb25zaXZlUHJvcFR5cGU7XG4gIHJldHVybiBvYmo7XG59LCB7fSkgOiB7fTtcbm1hcmdpbi5maWx0ZXJQcm9wcyA9IG1hcmdpbktleXM7XG5leHBvcnQgZnVuY3Rpb24gcGFkZGluZyhwcm9wcykge1xuICByZXR1cm4gc3R5bGUocHJvcHMsIHBhZGRpbmdLZXlzKTtcbn1cbnBhZGRpbmcucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHBhZGRpbmdLZXlzLnJlZHVjZSgob2JqLCBrZXkpID0+IHtcbiAgb2JqW2tleV0gPSByZXNwb25zaXZlUHJvcFR5cGU7XG4gIHJldHVybiBvYmo7XG59LCB7fSkgOiB7fTtcbnBhZGRpbmcuZmlsdGVyUHJvcHMgPSBwYWRkaW5nS2V5cztcbmZ1bmN0aW9uIHNwYWNpbmcocHJvcHMpIHtcbiAgcmV0dXJuIHN0eWxlKHByb3BzLCBzcGFjaW5nS2V5cyk7XG59XG5zcGFjaW5nLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBzcGFjaW5nS2V5cy5yZWR1Y2UoKG9iaiwga2V5KSA9PiB7XG4gIG9ialtrZXldID0gcmVzcG9uc2l2ZVByb3BUeXBlO1xuICByZXR1cm4gb2JqO1xufSwge30pIDoge307XG5zcGFjaW5nLmZpbHRlclByb3BzID0gc3BhY2luZ0tleXM7XG5leHBvcnQgZGVmYXVsdCBzcGFjaW5nOyIsICJpbXBvcnQgeyBjcmVhdGVVbmFyeVNwYWNpbmcgfSBmcm9tICcuLi9zcGFjaW5nJztcblxuLy8gVGhlIGRpZmZlcmVudCBzaWduYXR1cmVzIGltcGx5IGRpZmZlcmVudCBtZWFuaW5nIGZvciB0aGVpciBhcmd1bWVudHMgdGhhdCBjYW4ndCBiZSBleHByZXNzZWQgc3RydWN0dXJhbGx5LlxuLy8gV2UgZXhwcmVzcyB0aGUgZGlmZmVyZW5jZSB3aXRoIHZhcmlhYmxlIG5hbWVzLlxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVTcGFjaW5nKHNwYWNpbmdJbnB1dCA9IDgpIHtcbiAgLy8gQWxyZWFkeSB0cmFuc2Zvcm1lZC5cbiAgaWYgKHNwYWNpbmdJbnB1dC5tdWkpIHtcbiAgICByZXR1cm4gc3BhY2luZ0lucHV0O1xuICB9XG5cbiAgLy8gTWF0ZXJpYWwgRGVzaWduIGxheW91dHMgYXJlIHZpc3VhbGx5IGJhbGFuY2VkLiBNb3N0IG1lYXN1cmVtZW50cyBhbGlnbiB0byBhbiA4ZHAgZ3JpZCwgd2hpY2ggYWxpZ25zIGJvdGggc3BhY2luZyBhbmQgdGhlIG92ZXJhbGwgbGF5b3V0LlxuICAvLyBTbWFsbGVyIGNvbXBvbmVudHMsIHN1Y2ggYXMgaWNvbnMsIGNhbiBhbGlnbiB0byBhIDRkcCBncmlkLlxuICAvLyBodHRwczovL20yLm1hdGVyaWFsLmlvL2Rlc2lnbi9sYXlvdXQvdW5kZXJzdGFuZGluZy1sYXlvdXQuaHRtbFxuICBjb25zdCB0cmFuc2Zvcm0gPSBjcmVhdGVVbmFyeVNwYWNpbmcoe1xuICAgIHNwYWNpbmc6IHNwYWNpbmdJbnB1dFxuICB9KTtcbiAgY29uc3Qgc3BhY2luZyA9ICguLi5hcmdzSW5wdXQpID0+IHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKCEoYXJnc0lucHV0Lmxlbmd0aCA8PSA0KSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBNVUk6IFRvbyBtYW55IGFyZ3VtZW50cyBwcm92aWRlZCwgZXhwZWN0ZWQgYmV0d2VlbiAwIGFuZCA0LCBnb3QgJHthcmdzSW5wdXQubGVuZ3RofWApO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBhcmdzID0gYXJnc0lucHV0Lmxlbmd0aCA9PT0gMCA/IFsxXSA6IGFyZ3NJbnB1dDtcbiAgICByZXR1cm4gYXJncy5tYXAoYXJndW1lbnQgPT4ge1xuICAgICAgY29uc3Qgb3V0cHV0ID0gdHJhbnNmb3JtKGFyZ3VtZW50KTtcbiAgICAgIHJldHVybiB0eXBlb2Ygb3V0cHV0ID09PSAnbnVtYmVyJyA/IGAke291dHB1dH1weGAgOiBvdXRwdXQ7XG4gICAgfSkuam9pbignICcpO1xuICB9O1xuICBzcGFjaW5nLm11aSA9IHRydWU7XG4gIHJldHVybiBzcGFjaW5nO1xufSIsICJpbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICdAbXVpL3V0aWxzL2NhcGl0YWxpemUnO1xuaW1wb3J0IG1lcmdlIGZyb20gJy4uL21lcmdlJztcbmltcG9ydCB7IGdldFBhdGgsIGdldFN0eWxlVmFsdWUgYXMgZ2V0VmFsdWUgfSBmcm9tICcuLi9zdHlsZSc7XG5pbXBvcnQgeyBoYW5kbGVCcmVha3BvaW50cywgY3JlYXRlRW1wdHlCcmVha3BvaW50T2JqZWN0LCByZW1vdmVVbnVzZWRCcmVha3BvaW50cyB9IGZyb20gJy4uL2JyZWFrcG9pbnRzJztcbmltcG9ydCBkZWZhdWx0U3hDb25maWcgZnJvbSAnLi9kZWZhdWx0U3hDb25maWcnO1xuZnVuY3Rpb24gb2JqZWN0c0hhdmVTYW1lS2V5cyguLi5vYmplY3RzKSB7XG4gIGNvbnN0IGFsbEtleXMgPSBvYmplY3RzLnJlZHVjZSgoa2V5cywgb2JqZWN0KSA9PiBrZXlzLmNvbmNhdChPYmplY3Qua2V5cyhvYmplY3QpKSwgW10pO1xuICBjb25zdCB1bmlvbiA9IG5ldyBTZXQoYWxsS2V5cyk7XG4gIHJldHVybiBvYmplY3RzLmV2ZXJ5KG9iamVjdCA9PiB1bmlvbi5zaXplID09PSBPYmplY3Qua2V5cyhvYmplY3QpLmxlbmd0aCk7XG59XG5mdW5jdGlvbiBjYWxsSWZGbihtYXliZUZuLCBhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBtYXliZUZuID09PSAnZnVuY3Rpb24nID8gbWF5YmVGbihhcmcpIDogbWF5YmVGbjtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuZXhwb3J0IGZ1bmN0aW9uIHVuc3RhYmxlX2NyZWF0ZVN0eWxlRnVuY3Rpb25TeCgpIHtcbiAgZnVuY3Rpb24gZ2V0VGhlbWVWYWx1ZShwcm9wLCB2YWwsIHRoZW1lLCBjb25maWcpIHtcbiAgICBjb25zdCBwcm9wcyA9IHtcbiAgICAgIFtwcm9wXTogdmFsLFxuICAgICAgdGhlbWVcbiAgICB9O1xuICAgIGNvbnN0IG9wdGlvbnMgPSBjb25maWdbcHJvcF07XG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBbcHJvcF06IHZhbFxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3Qge1xuICAgICAgY3NzUHJvcGVydHkgPSBwcm9wLFxuICAgICAgdGhlbWVLZXksXG4gICAgICB0cmFuc2Zvcm0sXG4gICAgICBzdHlsZVxuICAgIH0gPSBvcHRpb25zO1xuICAgIGlmICh2YWwgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gVE9ETyB2NjogcmVtb3ZlLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL211aS9tYXRlcmlhbC11aS9wdWxsLzM4MTIzXG4gICAgaWYgKHRoZW1lS2V5ID09PSAndHlwb2dyYXBoeScgJiYgdmFsID09PSAnaW5oZXJpdCcpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIFtwcm9wXTogdmFsXG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCB0aGVtZU1hcHBpbmcgPSBnZXRQYXRoKHRoZW1lLCB0aGVtZUtleSkgfHwge307XG4gICAgaWYgKHN0eWxlKSB7XG4gICAgICByZXR1cm4gc3R5bGUocHJvcHMpO1xuICAgIH1cbiAgICBjb25zdCBzdHlsZUZyb21Qcm9wVmFsdWUgPSBwcm9wVmFsdWVGaW5hbCA9PiB7XG4gICAgICBsZXQgdmFsdWUgPSBnZXRWYWx1ZSh0aGVtZU1hcHBpbmcsIHRyYW5zZm9ybSwgcHJvcFZhbHVlRmluYWwpO1xuICAgICAgaWYgKHByb3BWYWx1ZUZpbmFsID09PSB2YWx1ZSAmJiB0eXBlb2YgcHJvcFZhbHVlRmluYWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIC8vIEhhdmVuJ3QgZm91bmQgdmFsdWVcbiAgICAgICAgdmFsdWUgPSBnZXRWYWx1ZSh0aGVtZU1hcHBpbmcsIHRyYW5zZm9ybSwgYCR7cHJvcH0ke3Byb3BWYWx1ZUZpbmFsID09PSAnZGVmYXVsdCcgPyAnJyA6IGNhcGl0YWxpemUocHJvcFZhbHVlRmluYWwpfWAsIHByb3BWYWx1ZUZpbmFsKTtcbiAgICAgIH1cbiAgICAgIGlmIChjc3NQcm9wZXJ0eSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW2Nzc1Byb3BlcnR5XTogdmFsdWVcbiAgICAgIH07XG4gICAgfTtcbiAgICByZXR1cm4gaGFuZGxlQnJlYWtwb2ludHMocHJvcHMsIHZhbCwgc3R5bGVGcm9tUHJvcFZhbHVlKTtcbiAgfVxuICBmdW5jdGlvbiBzdHlsZUZ1bmN0aW9uU3gocHJvcHMpIHtcbiAgICB2YXIgX3RoZW1lJHVuc3RhYmxlX3N4Q29uO1xuICAgIGNvbnN0IHtcbiAgICAgIHN4LFxuICAgICAgdGhlbWUgPSB7fVxuICAgIH0gPSBwcm9wcyB8fCB7fTtcbiAgICBpZiAoIXN4KSB7XG4gICAgICByZXR1cm4gbnVsbDsgLy8gRW1vdGlvbiAmIHN0eWxlZC1jb21wb25lbnRzIHdpbGwgbmVnbGVjdCBudWxsXG4gICAgfVxuICAgIGNvbnN0IGNvbmZpZyA9IChfdGhlbWUkdW5zdGFibGVfc3hDb24gPSB0aGVtZS51bnN0YWJsZV9zeENvbmZpZykgIT0gbnVsbCA/IF90aGVtZSR1bnN0YWJsZV9zeENvbiA6IGRlZmF1bHRTeENvbmZpZztcblxuICAgIC8qXG4gICAgICogUmVjZWl2ZSBgc3hJbnB1dGAgYXMgb2JqZWN0IG9yIGNhbGxiYWNrXG4gICAgICogYW5kIHRoZW4gcmVjdXJzaXZlbHkgY2hlY2sga2V5cyAmIHZhbHVlcyB0byBjcmVhdGUgbWVkaWEgcXVlcnkgb2JqZWN0IHN0eWxlcy5cbiAgICAgKiAodGhlIHJlc3VsdCB3aWxsIGJlIHVzZWQgaW4gYHN0eWxlZGApXG4gICAgICovXG4gICAgZnVuY3Rpb24gdHJhdmVyc2Uoc3hJbnB1dCkge1xuICAgICAgbGV0IHN4T2JqZWN0ID0gc3hJbnB1dDtcbiAgICAgIGlmICh0eXBlb2Ygc3hJbnB1dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBzeE9iamVjdCA9IHN4SW5wdXQodGhlbWUpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygc3hJbnB1dCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgLy8gdmFsdWVcbiAgICAgICAgcmV0dXJuIHN4SW5wdXQ7XG4gICAgICB9XG4gICAgICBpZiAoIXN4T2JqZWN0KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgZW1wdHlCcmVha3BvaW50cyA9IGNyZWF0ZUVtcHR5QnJlYWtwb2ludE9iamVjdCh0aGVtZS5icmVha3BvaW50cyk7XG4gICAgICBjb25zdCBicmVha3BvaW50c0tleXMgPSBPYmplY3Qua2V5cyhlbXB0eUJyZWFrcG9pbnRzKTtcbiAgICAgIGxldCBjc3MgPSBlbXB0eUJyZWFrcG9pbnRzO1xuICAgICAgT2JqZWN0LmtleXMoc3hPYmplY3QpLmZvckVhY2goc3R5bGVLZXkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGNhbGxJZkZuKHN4T2JqZWN0W3N0eWxlS2V5XSwgdGhlbWUpO1xuICAgICAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBpZiAoY29uZmlnW3N0eWxlS2V5XSkge1xuICAgICAgICAgICAgICBjc3MgPSBtZXJnZShjc3MsIGdldFRoZW1lVmFsdWUoc3R5bGVLZXksIHZhbHVlLCB0aGVtZSwgY29uZmlnKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25zdCBicmVha3BvaW50c1ZhbHVlcyA9IGhhbmRsZUJyZWFrcG9pbnRzKHtcbiAgICAgICAgICAgICAgICB0aGVtZVxuICAgICAgICAgICAgICB9LCB2YWx1ZSwgeCA9PiAoe1xuICAgICAgICAgICAgICAgIFtzdHlsZUtleV06IHhcbiAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICBpZiAob2JqZWN0c0hhdmVTYW1lS2V5cyhicmVha3BvaW50c1ZhbHVlcywgdmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgY3NzW3N0eWxlS2V5XSA9IHN0eWxlRnVuY3Rpb25TeCh7XG4gICAgICAgICAgICAgICAgICBzeDogdmFsdWUsXG4gICAgICAgICAgICAgICAgICB0aGVtZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNzcyA9IG1lcmdlKGNzcywgYnJlYWtwb2ludHNWYWx1ZXMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNzcyA9IG1lcmdlKGNzcywgZ2V0VGhlbWVWYWx1ZShzdHlsZUtleSwgdmFsdWUsIHRoZW1lLCBjb25maWcpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlbW92ZVVudXNlZEJyZWFrcG9pbnRzKGJyZWFrcG9pbnRzS2V5cywgY3NzKTtcbiAgICB9XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoc3gpID8gc3gubWFwKHRyYXZlcnNlKSA6IHRyYXZlcnNlKHN4KTtcbiAgfVxuICByZXR1cm4gc3R5bGVGdW5jdGlvblN4O1xufVxuY29uc3Qgc3R5bGVGdW5jdGlvblN4ID0gdW5zdGFibGVfY3JlYXRlU3R5bGVGdW5jdGlvblN4KCk7XG5zdHlsZUZ1bmN0aW9uU3guZmlsdGVyUHJvcHMgPSBbJ3N4J107XG5leHBvcnQgZGVmYXVsdCBzdHlsZUZ1bmN0aW9uU3g7IiwgImltcG9ydCBtZXJnZSBmcm9tICcuL21lcmdlJztcbmZ1bmN0aW9uIGNvbXBvc2UoLi4uc3R5bGVzKSB7XG4gIGNvbnN0IGhhbmRsZXJzID0gc3R5bGVzLnJlZHVjZSgoYWNjLCBzdHlsZSkgPT4ge1xuICAgIHN0eWxlLmZpbHRlclByb3BzLmZvckVhY2gocHJvcCA9PiB7XG4gICAgICBhY2NbcHJvcF0gPSBzdHlsZTtcbiAgICB9KTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG5cbiAgLy8gZmFsc2UgcG9zaXRpdmVcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L2Z1bmN0aW9uLWNvbXBvbmVudC1kZWZpbml0aW9uXG4gIGNvbnN0IGZuID0gcHJvcHMgPT4ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhwcm9wcykucmVkdWNlKChhY2MsIHByb3ApID0+IHtcbiAgICAgIGlmIChoYW5kbGVyc1twcm9wXSkge1xuICAgICAgICByZXR1cm4gbWVyZ2UoYWNjLCBoYW5kbGVyc1twcm9wXShwcm9wcykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG4gIH07XG4gIGZuLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBzdHlsZXMucmVkdWNlKChhY2MsIHN0eWxlKSA9PiBPYmplY3QuYXNzaWduKGFjYywgc3R5bGUucHJvcFR5cGVzKSwge30pIDoge307XG4gIGZuLmZpbHRlclByb3BzID0gc3R5bGVzLnJlZHVjZSgoYWNjLCBzdHlsZSkgPT4gYWNjLmNvbmNhdChzdHlsZS5maWx0ZXJQcm9wcyksIFtdKTtcbiAgcmV0dXJuIGZuO1xufVxuZXhwb3J0IGRlZmF1bHQgY29tcG9zZTsiLCAiaW1wb3J0IHJlc3BvbnNpdmVQcm9wVHlwZSBmcm9tICcuL3Jlc3BvbnNpdmVQcm9wVHlwZSc7XG5pbXBvcnQgc3R5bGUgZnJvbSAnLi9zdHlsZSc7XG5pbXBvcnQgY29tcG9zZSBmcm9tICcuL2NvbXBvc2UnO1xuaW1wb3J0IHsgY3JlYXRlVW5hcnlVbml0LCBnZXRWYWx1ZSB9IGZyb20gJy4vc3BhY2luZyc7XG5pbXBvcnQgeyBoYW5kbGVCcmVha3BvaW50cyB9IGZyb20gJy4vYnJlYWtwb2ludHMnO1xuZXhwb3J0IGZ1bmN0aW9uIGJvcmRlclRyYW5zZm9ybSh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICByZXR1cm4gYCR7dmFsdWV9cHggc29saWRgO1xufVxuZnVuY3Rpb24gY3JlYXRlQm9yZGVyU3R5bGUocHJvcCwgdHJhbnNmb3JtKSB7XG4gIHJldHVybiBzdHlsZSh7XG4gICAgcHJvcCxcbiAgICB0aGVtZUtleTogJ2JvcmRlcnMnLFxuICAgIHRyYW5zZm9ybVxuICB9KTtcbn1cbmV4cG9ydCBjb25zdCBib3JkZXIgPSBjcmVhdGVCb3JkZXJTdHlsZSgnYm9yZGVyJywgYm9yZGVyVHJhbnNmb3JtKTtcbmV4cG9ydCBjb25zdCBib3JkZXJUb3AgPSBjcmVhdGVCb3JkZXJTdHlsZSgnYm9yZGVyVG9wJywgYm9yZGVyVHJhbnNmb3JtKTtcbmV4cG9ydCBjb25zdCBib3JkZXJSaWdodCA9IGNyZWF0ZUJvcmRlclN0eWxlKCdib3JkZXJSaWdodCcsIGJvcmRlclRyYW5zZm9ybSk7XG5leHBvcnQgY29uc3QgYm9yZGVyQm90dG9tID0gY3JlYXRlQm9yZGVyU3R5bGUoJ2JvcmRlckJvdHRvbScsIGJvcmRlclRyYW5zZm9ybSk7XG5leHBvcnQgY29uc3QgYm9yZGVyTGVmdCA9IGNyZWF0ZUJvcmRlclN0eWxlKCdib3JkZXJMZWZ0JywgYm9yZGVyVHJhbnNmb3JtKTtcbmV4cG9ydCBjb25zdCBib3JkZXJDb2xvciA9IGNyZWF0ZUJvcmRlclN0eWxlKCdib3JkZXJDb2xvcicpO1xuZXhwb3J0IGNvbnN0IGJvcmRlclRvcENvbG9yID0gY3JlYXRlQm9yZGVyU3R5bGUoJ2JvcmRlclRvcENvbG9yJyk7XG5leHBvcnQgY29uc3QgYm9yZGVyUmlnaHRDb2xvciA9IGNyZWF0ZUJvcmRlclN0eWxlKCdib3JkZXJSaWdodENvbG9yJyk7XG5leHBvcnQgY29uc3QgYm9yZGVyQm90dG9tQ29sb3IgPSBjcmVhdGVCb3JkZXJTdHlsZSgnYm9yZGVyQm90dG9tQ29sb3InKTtcbmV4cG9ydCBjb25zdCBib3JkZXJMZWZ0Q29sb3IgPSBjcmVhdGVCb3JkZXJTdHlsZSgnYm9yZGVyTGVmdENvbG9yJyk7XG5leHBvcnQgY29uc3Qgb3V0bGluZSA9IGNyZWF0ZUJvcmRlclN0eWxlKCdvdXRsaW5lJywgYm9yZGVyVHJhbnNmb3JtKTtcbmV4cG9ydCBjb25zdCBvdXRsaW5lQ29sb3IgPSBjcmVhdGVCb3JkZXJTdHlsZSgnb3V0bGluZUNvbG9yJyk7XG5cbi8vIGZhbHNlIHBvc2l0aXZlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvZnVuY3Rpb24tY29tcG9uZW50LWRlZmluaXRpb25cbmV4cG9ydCBjb25zdCBib3JkZXJSYWRpdXMgPSBwcm9wcyA9PiB7XG4gIGlmIChwcm9wcy5ib3JkZXJSYWRpdXMgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5ib3JkZXJSYWRpdXMgIT09IG51bGwpIHtcbiAgICBjb25zdCB0cmFuc2Zvcm1lciA9IGNyZWF0ZVVuYXJ5VW5pdChwcm9wcy50aGVtZSwgJ3NoYXBlLmJvcmRlclJhZGl1cycsIDQsICdib3JkZXJSYWRpdXMnKTtcbiAgICBjb25zdCBzdHlsZUZyb21Qcm9wVmFsdWUgPSBwcm9wVmFsdWUgPT4gKHtcbiAgICAgIGJvcmRlclJhZGl1czogZ2V0VmFsdWUodHJhbnNmb3JtZXIsIHByb3BWYWx1ZSlcbiAgICB9KTtcbiAgICByZXR1cm4gaGFuZGxlQnJlYWtwb2ludHMocHJvcHMsIHByb3BzLmJvcmRlclJhZGl1cywgc3R5bGVGcm9tUHJvcFZhbHVlKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5ib3JkZXJSYWRpdXMucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHtcbiAgYm9yZGVyUmFkaXVzOiByZXNwb25zaXZlUHJvcFR5cGVcbn0gOiB7fTtcbmJvcmRlclJhZGl1cy5maWx0ZXJQcm9wcyA9IFsnYm9yZGVyUmFkaXVzJ107XG5jb25zdCBib3JkZXJzID0gY29tcG9zZShib3JkZXIsIGJvcmRlclRvcCwgYm9yZGVyUmlnaHQsIGJvcmRlckJvdHRvbSwgYm9yZGVyTGVmdCwgYm9yZGVyQ29sb3IsIGJvcmRlclRvcENvbG9yLCBib3JkZXJSaWdodENvbG9yLCBib3JkZXJCb3R0b21Db2xvciwgYm9yZGVyTGVmdENvbG9yLCBib3JkZXJSYWRpdXMsIG91dGxpbmUsIG91dGxpbmVDb2xvcik7XG5leHBvcnQgZGVmYXVsdCBib3JkZXJzOyIsICJpbXBvcnQgc3R5bGUgZnJvbSAnLi9zdHlsZSc7XG5pbXBvcnQgY29tcG9zZSBmcm9tICcuL2NvbXBvc2UnO1xuaW1wb3J0IHsgY3JlYXRlVW5hcnlVbml0LCBnZXRWYWx1ZSB9IGZyb20gJy4vc3BhY2luZyc7XG5pbXBvcnQgeyBoYW5kbGVCcmVha3BvaW50cyB9IGZyb20gJy4vYnJlYWtwb2ludHMnO1xuaW1wb3J0IHJlc3BvbnNpdmVQcm9wVHlwZSBmcm9tICcuL3Jlc3BvbnNpdmVQcm9wVHlwZSc7XG5cbi8vIGZhbHNlIHBvc2l0aXZlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvZnVuY3Rpb24tY29tcG9uZW50LWRlZmluaXRpb25cbmV4cG9ydCBjb25zdCBnYXAgPSBwcm9wcyA9PiB7XG4gIGlmIChwcm9wcy5nYXAgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5nYXAgIT09IG51bGwpIHtcbiAgICBjb25zdCB0cmFuc2Zvcm1lciA9IGNyZWF0ZVVuYXJ5VW5pdChwcm9wcy50aGVtZSwgJ3NwYWNpbmcnLCA4LCAnZ2FwJyk7XG4gICAgY29uc3Qgc3R5bGVGcm9tUHJvcFZhbHVlID0gcHJvcFZhbHVlID0+ICh7XG4gICAgICBnYXA6IGdldFZhbHVlKHRyYW5zZm9ybWVyLCBwcm9wVmFsdWUpXG4gICAgfSk7XG4gICAgcmV0dXJuIGhhbmRsZUJyZWFrcG9pbnRzKHByb3BzLCBwcm9wcy5nYXAsIHN0eWxlRnJvbVByb3BWYWx1ZSk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuZ2FwLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB7XG4gIGdhcDogcmVzcG9uc2l2ZVByb3BUeXBlXG59IDoge307XG5nYXAuZmlsdGVyUHJvcHMgPSBbJ2dhcCddO1xuXG4vLyBmYWxzZSBwb3NpdGl2ZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L2Z1bmN0aW9uLWNvbXBvbmVudC1kZWZpbml0aW9uXG5leHBvcnQgY29uc3QgY29sdW1uR2FwID0gcHJvcHMgPT4ge1xuICBpZiAocHJvcHMuY29sdW1uR2FwICE9PSB1bmRlZmluZWQgJiYgcHJvcHMuY29sdW1uR2FwICE9PSBudWxsKSB7XG4gICAgY29uc3QgdHJhbnNmb3JtZXIgPSBjcmVhdGVVbmFyeVVuaXQocHJvcHMudGhlbWUsICdzcGFjaW5nJywgOCwgJ2NvbHVtbkdhcCcpO1xuICAgIGNvbnN0IHN0eWxlRnJvbVByb3BWYWx1ZSA9IHByb3BWYWx1ZSA9PiAoe1xuICAgICAgY29sdW1uR2FwOiBnZXRWYWx1ZSh0cmFuc2Zvcm1lciwgcHJvcFZhbHVlKVxuICAgIH0pO1xuICAgIHJldHVybiBoYW5kbGVCcmVha3BvaW50cyhwcm9wcywgcHJvcHMuY29sdW1uR2FwLCBzdHlsZUZyb21Qcm9wVmFsdWUpO1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcbmNvbHVtbkdhcC5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8ge1xuICBjb2x1bW5HYXA6IHJlc3BvbnNpdmVQcm9wVHlwZVxufSA6IHt9O1xuY29sdW1uR2FwLmZpbHRlclByb3BzID0gWydjb2x1bW5HYXAnXTtcblxuLy8gZmFsc2UgcG9zaXRpdmVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvblxuZXhwb3J0IGNvbnN0IHJvd0dhcCA9IHByb3BzID0+IHtcbiAgaWYgKHByb3BzLnJvd0dhcCAhPT0gdW5kZWZpbmVkICYmIHByb3BzLnJvd0dhcCAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHRyYW5zZm9ybWVyID0gY3JlYXRlVW5hcnlVbml0KHByb3BzLnRoZW1lLCAnc3BhY2luZycsIDgsICdyb3dHYXAnKTtcbiAgICBjb25zdCBzdHlsZUZyb21Qcm9wVmFsdWUgPSBwcm9wVmFsdWUgPT4gKHtcbiAgICAgIHJvd0dhcDogZ2V0VmFsdWUodHJhbnNmb3JtZXIsIHByb3BWYWx1ZSlcbiAgICB9KTtcbiAgICByZXR1cm4gaGFuZGxlQnJlYWtwb2ludHMocHJvcHMsIHByb3BzLnJvd0dhcCwgc3R5bGVGcm9tUHJvcFZhbHVlKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5yb3dHYXAucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHtcbiAgcm93R2FwOiByZXNwb25zaXZlUHJvcFR5cGVcbn0gOiB7fTtcbnJvd0dhcC5maWx0ZXJQcm9wcyA9IFsncm93R2FwJ107XG5leHBvcnQgY29uc3QgZ3JpZENvbHVtbiA9IHN0eWxlKHtcbiAgcHJvcDogJ2dyaWRDb2x1bW4nXG59KTtcbmV4cG9ydCBjb25zdCBncmlkUm93ID0gc3R5bGUoe1xuICBwcm9wOiAnZ3JpZFJvdydcbn0pO1xuZXhwb3J0IGNvbnN0IGdyaWRBdXRvRmxvdyA9IHN0eWxlKHtcbiAgcHJvcDogJ2dyaWRBdXRvRmxvdydcbn0pO1xuZXhwb3J0IGNvbnN0IGdyaWRBdXRvQ29sdW1ucyA9IHN0eWxlKHtcbiAgcHJvcDogJ2dyaWRBdXRvQ29sdW1ucydcbn0pO1xuZXhwb3J0IGNvbnN0IGdyaWRBdXRvUm93cyA9IHN0eWxlKHtcbiAgcHJvcDogJ2dyaWRBdXRvUm93cydcbn0pO1xuZXhwb3J0IGNvbnN0IGdyaWRUZW1wbGF0ZUNvbHVtbnMgPSBzdHlsZSh7XG4gIHByb3A6ICdncmlkVGVtcGxhdGVDb2x1bW5zJ1xufSk7XG5leHBvcnQgY29uc3QgZ3JpZFRlbXBsYXRlUm93cyA9IHN0eWxlKHtcbiAgcHJvcDogJ2dyaWRUZW1wbGF0ZVJvd3MnXG59KTtcbmV4cG9ydCBjb25zdCBncmlkVGVtcGxhdGVBcmVhcyA9IHN0eWxlKHtcbiAgcHJvcDogJ2dyaWRUZW1wbGF0ZUFyZWFzJ1xufSk7XG5leHBvcnQgY29uc3QgZ3JpZEFyZWEgPSBzdHlsZSh7XG4gIHByb3A6ICdncmlkQXJlYSdcbn0pO1xuY29uc3QgZ3JpZCA9IGNvbXBvc2UoZ2FwLCBjb2x1bW5HYXAsIHJvd0dhcCwgZ3JpZENvbHVtbiwgZ3JpZFJvdywgZ3JpZEF1dG9GbG93LCBncmlkQXV0b0NvbHVtbnMsIGdyaWRBdXRvUm93cywgZ3JpZFRlbXBsYXRlQ29sdW1ucywgZ3JpZFRlbXBsYXRlUm93cywgZ3JpZFRlbXBsYXRlQXJlYXMsIGdyaWRBcmVhKTtcbmV4cG9ydCBkZWZhdWx0IGdyaWQ7IiwgImltcG9ydCBzdHlsZSBmcm9tICcuL3N0eWxlJztcbmltcG9ydCBjb21wb3NlIGZyb20gJy4vY29tcG9zZSc7XG5leHBvcnQgZnVuY3Rpb24gcGFsZXR0ZVRyYW5zZm9ybSh2YWx1ZSwgdXNlclZhbHVlKSB7XG4gIGlmICh1c2VyVmFsdWUgPT09ICdncmV5Jykge1xuICAgIHJldHVybiB1c2VyVmFsdWU7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuZXhwb3J0IGNvbnN0IGNvbG9yID0gc3R5bGUoe1xuICBwcm9wOiAnY29sb3InLFxuICB0aGVtZUtleTogJ3BhbGV0dGUnLFxuICB0cmFuc2Zvcm06IHBhbGV0dGVUcmFuc2Zvcm1cbn0pO1xuZXhwb3J0IGNvbnN0IGJnY29sb3IgPSBzdHlsZSh7XG4gIHByb3A6ICdiZ2NvbG9yJyxcbiAgY3NzUHJvcGVydHk6ICdiYWNrZ3JvdW5kQ29sb3InLFxuICB0aGVtZUtleTogJ3BhbGV0dGUnLFxuICB0cmFuc2Zvcm06IHBhbGV0dGVUcmFuc2Zvcm1cbn0pO1xuZXhwb3J0IGNvbnN0IGJhY2tncm91bmRDb2xvciA9IHN0eWxlKHtcbiAgcHJvcDogJ2JhY2tncm91bmRDb2xvcicsXG4gIHRoZW1lS2V5OiAncGFsZXR0ZScsXG4gIHRyYW5zZm9ybTogcGFsZXR0ZVRyYW5zZm9ybVxufSk7XG5jb25zdCBwYWxldHRlID0gY29tcG9zZShjb2xvciwgYmdjb2xvciwgYmFja2dyb3VuZENvbG9yKTtcbmV4cG9ydCBkZWZhdWx0IHBhbGV0dGU7IiwgImltcG9ydCBzdHlsZSBmcm9tICcuL3N0eWxlJztcbmltcG9ydCBjb21wb3NlIGZyb20gJy4vY29tcG9zZSc7XG5pbXBvcnQgeyBoYW5kbGVCcmVha3BvaW50cywgdmFsdWVzIGFzIGJyZWFrcG9pbnRzVmFsdWVzIH0gZnJvbSAnLi9icmVha3BvaW50cyc7XG5leHBvcnQgZnVuY3Rpb24gc2l6aW5nVHJhbnNmb3JtKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA8PSAxICYmIHZhbHVlICE9PSAwID8gYCR7dmFsdWUgKiAxMDB9JWAgOiB2YWx1ZTtcbn1cbmV4cG9ydCBjb25zdCB3aWR0aCA9IHN0eWxlKHtcbiAgcHJvcDogJ3dpZHRoJyxcbiAgdHJhbnNmb3JtOiBzaXppbmdUcmFuc2Zvcm1cbn0pO1xuZXhwb3J0IGNvbnN0IG1heFdpZHRoID0gcHJvcHMgPT4ge1xuICBpZiAocHJvcHMubWF4V2lkdGggIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5tYXhXaWR0aCAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0eWxlRnJvbVByb3BWYWx1ZSA9IHByb3BWYWx1ZSA9PiB7XG4gICAgICB2YXIgX3Byb3BzJHRoZW1lLCBfcHJvcHMkdGhlbWUyO1xuICAgICAgY29uc3QgYnJlYWtwb2ludCA9ICgoX3Byb3BzJHRoZW1lID0gcHJvcHMudGhlbWUpID09IG51bGwgfHwgKF9wcm9wcyR0aGVtZSA9IF9wcm9wcyR0aGVtZS5icmVha3BvaW50cykgPT0gbnVsbCB8fCAoX3Byb3BzJHRoZW1lID0gX3Byb3BzJHRoZW1lLnZhbHVlcykgPT0gbnVsbCA/IHZvaWQgMCA6IF9wcm9wcyR0aGVtZVtwcm9wVmFsdWVdKSB8fCBicmVha3BvaW50c1ZhbHVlc1twcm9wVmFsdWVdO1xuICAgICAgaWYgKCFicmVha3BvaW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbWF4V2lkdGg6IHNpemluZ1RyYW5zZm9ybShwcm9wVmFsdWUpXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBpZiAoKChfcHJvcHMkdGhlbWUyID0gcHJvcHMudGhlbWUpID09IG51bGwgfHwgKF9wcm9wcyR0aGVtZTIgPSBfcHJvcHMkdGhlbWUyLmJyZWFrcG9pbnRzKSA9PSBudWxsID8gdm9pZCAwIDogX3Byb3BzJHRoZW1lMi51bml0KSAhPT0gJ3B4Jykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG1heFdpZHRoOiBgJHticmVha3BvaW50fSR7cHJvcHMudGhlbWUuYnJlYWtwb2ludHMudW5pdH1gXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtYXhXaWR0aDogYnJlYWtwb2ludFxuICAgICAgfTtcbiAgICB9O1xuICAgIHJldHVybiBoYW5kbGVCcmVha3BvaW50cyhwcm9wcywgcHJvcHMubWF4V2lkdGgsIHN0eWxlRnJvbVByb3BWYWx1ZSk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xubWF4V2lkdGguZmlsdGVyUHJvcHMgPSBbJ21heFdpZHRoJ107XG5leHBvcnQgY29uc3QgbWluV2lkdGggPSBzdHlsZSh7XG4gIHByb3A6ICdtaW5XaWR0aCcsXG4gIHRyYW5zZm9ybTogc2l6aW5nVHJhbnNmb3JtXG59KTtcbmV4cG9ydCBjb25zdCBoZWlnaHQgPSBzdHlsZSh7XG4gIHByb3A6ICdoZWlnaHQnLFxuICB0cmFuc2Zvcm06IHNpemluZ1RyYW5zZm9ybVxufSk7XG5leHBvcnQgY29uc3QgbWF4SGVpZ2h0ID0gc3R5bGUoe1xuICBwcm9wOiAnbWF4SGVpZ2h0JyxcbiAgdHJhbnNmb3JtOiBzaXppbmdUcmFuc2Zvcm1cbn0pO1xuZXhwb3J0IGNvbnN0IG1pbkhlaWdodCA9IHN0eWxlKHtcbiAgcHJvcDogJ21pbkhlaWdodCcsXG4gIHRyYW5zZm9ybTogc2l6aW5nVHJhbnNmb3JtXG59KTtcbmV4cG9ydCBjb25zdCBzaXplV2lkdGggPSBzdHlsZSh7XG4gIHByb3A6ICdzaXplJyxcbiAgY3NzUHJvcGVydHk6ICd3aWR0aCcsXG4gIHRyYW5zZm9ybTogc2l6aW5nVHJhbnNmb3JtXG59KTtcbmV4cG9ydCBjb25zdCBzaXplSGVpZ2h0ID0gc3R5bGUoe1xuICBwcm9wOiAnc2l6ZScsXG4gIGNzc1Byb3BlcnR5OiAnaGVpZ2h0JyxcbiAgdHJhbnNmb3JtOiBzaXppbmdUcmFuc2Zvcm1cbn0pO1xuZXhwb3J0IGNvbnN0IGJveFNpemluZyA9IHN0eWxlKHtcbiAgcHJvcDogJ2JveFNpemluZydcbn0pO1xuY29uc3Qgc2l6aW5nID0gY29tcG9zZSh3aWR0aCwgbWF4V2lkdGgsIG1pbldpZHRoLCBoZWlnaHQsIG1heEhlaWdodCwgbWluSGVpZ2h0LCBib3hTaXppbmcpO1xuZXhwb3J0IGRlZmF1bHQgc2l6aW5nOyIsICJpbXBvcnQgeyBwYWRkaW5nLCBtYXJnaW4gfSBmcm9tICcuLi9zcGFjaW5nJztcbmltcG9ydCB7IGJvcmRlclJhZGl1cywgYm9yZGVyVHJhbnNmb3JtIH0gZnJvbSAnLi4vYm9yZGVycyc7XG5pbXBvcnQgeyBnYXAsIHJvd0dhcCwgY29sdW1uR2FwIH0gZnJvbSAnLi4vY3NzR3JpZCc7XG5pbXBvcnQgeyBwYWxldHRlVHJhbnNmb3JtIH0gZnJvbSAnLi4vcGFsZXR0ZSc7XG5pbXBvcnQgeyBtYXhXaWR0aCwgc2l6aW5nVHJhbnNmb3JtIH0gZnJvbSAnLi4vc2l6aW5nJztcbmNvbnN0IGRlZmF1bHRTeENvbmZpZyA9IHtcbiAgLy8gYm9yZGVyc1xuICBib3JkZXI6IHtcbiAgICB0aGVtZUtleTogJ2JvcmRlcnMnLFxuICAgIHRyYW5zZm9ybTogYm9yZGVyVHJhbnNmb3JtXG4gIH0sXG4gIGJvcmRlclRvcDoge1xuICAgIHRoZW1lS2V5OiAnYm9yZGVycycsXG4gICAgdHJhbnNmb3JtOiBib3JkZXJUcmFuc2Zvcm1cbiAgfSxcbiAgYm9yZGVyUmlnaHQ6IHtcbiAgICB0aGVtZUtleTogJ2JvcmRlcnMnLFxuICAgIHRyYW5zZm9ybTogYm9yZGVyVHJhbnNmb3JtXG4gIH0sXG4gIGJvcmRlckJvdHRvbToge1xuICAgIHRoZW1lS2V5OiAnYm9yZGVycycsXG4gICAgdHJhbnNmb3JtOiBib3JkZXJUcmFuc2Zvcm1cbiAgfSxcbiAgYm9yZGVyTGVmdDoge1xuICAgIHRoZW1lS2V5OiAnYm9yZGVycycsXG4gICAgdHJhbnNmb3JtOiBib3JkZXJUcmFuc2Zvcm1cbiAgfSxcbiAgYm9yZGVyQ29sb3I6IHtcbiAgICB0aGVtZUtleTogJ3BhbGV0dGUnXG4gIH0sXG4gIGJvcmRlclRvcENvbG9yOiB7XG4gICAgdGhlbWVLZXk6ICdwYWxldHRlJ1xuICB9LFxuICBib3JkZXJSaWdodENvbG9yOiB7XG4gICAgdGhlbWVLZXk6ICdwYWxldHRlJ1xuICB9LFxuICBib3JkZXJCb3R0b21Db2xvcjoge1xuICAgIHRoZW1lS2V5OiAncGFsZXR0ZSdcbiAgfSxcbiAgYm9yZGVyTGVmdENvbG9yOiB7XG4gICAgdGhlbWVLZXk6ICdwYWxldHRlJ1xuICB9LFxuICBvdXRsaW5lOiB7XG4gICAgdGhlbWVLZXk6ICdib3JkZXJzJyxcbiAgICB0cmFuc2Zvcm06IGJvcmRlclRyYW5zZm9ybVxuICB9LFxuICBvdXRsaW5lQ29sb3I6IHtcbiAgICB0aGVtZUtleTogJ3BhbGV0dGUnXG4gIH0sXG4gIGJvcmRlclJhZGl1czoge1xuICAgIHRoZW1lS2V5OiAnc2hhcGUuYm9yZGVyUmFkaXVzJyxcbiAgICBzdHlsZTogYm9yZGVyUmFkaXVzXG4gIH0sXG4gIC8vIHBhbGV0dGVcbiAgY29sb3I6IHtcbiAgICB0aGVtZUtleTogJ3BhbGV0dGUnLFxuICAgIHRyYW5zZm9ybTogcGFsZXR0ZVRyYW5zZm9ybVxuICB9LFxuICBiZ2NvbG9yOiB7XG4gICAgdGhlbWVLZXk6ICdwYWxldHRlJyxcbiAgICBjc3NQcm9wZXJ0eTogJ2JhY2tncm91bmRDb2xvcicsXG4gICAgdHJhbnNmb3JtOiBwYWxldHRlVHJhbnNmb3JtXG4gIH0sXG4gIGJhY2tncm91bmRDb2xvcjoge1xuICAgIHRoZW1lS2V5OiAncGFsZXR0ZScsXG4gICAgdHJhbnNmb3JtOiBwYWxldHRlVHJhbnNmb3JtXG4gIH0sXG4gIC8vIHNwYWNpbmdcbiAgcDoge1xuICAgIHN0eWxlOiBwYWRkaW5nXG4gIH0sXG4gIHB0OiB7XG4gICAgc3R5bGU6IHBhZGRpbmdcbiAgfSxcbiAgcHI6IHtcbiAgICBzdHlsZTogcGFkZGluZ1xuICB9LFxuICBwYjoge1xuICAgIHN0eWxlOiBwYWRkaW5nXG4gIH0sXG4gIHBsOiB7XG4gICAgc3R5bGU6IHBhZGRpbmdcbiAgfSxcbiAgcHg6IHtcbiAgICBzdHlsZTogcGFkZGluZ1xuICB9LFxuICBweToge1xuICAgIHN0eWxlOiBwYWRkaW5nXG4gIH0sXG4gIHBhZGRpbmc6IHtcbiAgICBzdHlsZTogcGFkZGluZ1xuICB9LFxuICBwYWRkaW5nVG9wOiB7XG4gICAgc3R5bGU6IHBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZ1JpZ2h0OiB7XG4gICAgc3R5bGU6IHBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZ0JvdHRvbToge1xuICAgIHN0eWxlOiBwYWRkaW5nXG4gIH0sXG4gIHBhZGRpbmdMZWZ0OiB7XG4gICAgc3R5bGU6IHBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZ1g6IHtcbiAgICBzdHlsZTogcGFkZGluZ1xuICB9LFxuICBwYWRkaW5nWToge1xuICAgIHN0eWxlOiBwYWRkaW5nXG4gIH0sXG4gIHBhZGRpbmdJbmxpbmU6IHtcbiAgICBzdHlsZTogcGFkZGluZ1xuICB9LFxuICBwYWRkaW5nSW5saW5lU3RhcnQ6IHtcbiAgICBzdHlsZTogcGFkZGluZ1xuICB9LFxuICBwYWRkaW5nSW5saW5lRW5kOiB7XG4gICAgc3R5bGU6IHBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZ0Jsb2NrOiB7XG4gICAgc3R5bGU6IHBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZ0Jsb2NrU3RhcnQ6IHtcbiAgICBzdHlsZTogcGFkZGluZ1xuICB9LFxuICBwYWRkaW5nQmxvY2tFbmQ6IHtcbiAgICBzdHlsZTogcGFkZGluZ1xuICB9LFxuICBtOiB7XG4gICAgc3R5bGU6IG1hcmdpblxuICB9LFxuICBtdDoge1xuICAgIHN0eWxlOiBtYXJnaW5cbiAgfSxcbiAgbXI6IHtcbiAgICBzdHlsZTogbWFyZ2luXG4gIH0sXG4gIG1iOiB7XG4gICAgc3R5bGU6IG1hcmdpblxuICB9LFxuICBtbDoge1xuICAgIHN0eWxlOiBtYXJnaW5cbiAgfSxcbiAgbXg6IHtcbiAgICBzdHlsZTogbWFyZ2luXG4gIH0sXG4gIG15OiB7XG4gICAgc3R5bGU6IG1hcmdpblxuICB9LFxuICBtYXJnaW46IHtcbiAgICBzdHlsZTogbWFyZ2luXG4gIH0sXG4gIG1hcmdpblRvcDoge1xuICAgIHN0eWxlOiBtYXJnaW5cbiAgfSxcbiAgbWFyZ2luUmlnaHQ6IHtcbiAgICBzdHlsZTogbWFyZ2luXG4gIH0sXG4gIG1hcmdpbkJvdHRvbToge1xuICAgIHN0eWxlOiBtYXJnaW5cbiAgfSxcbiAgbWFyZ2luTGVmdDoge1xuICAgIHN0eWxlOiBtYXJnaW5cbiAgfSxcbiAgbWFyZ2luWDoge1xuICAgIHN0eWxlOiBtYXJnaW5cbiAgfSxcbiAgbWFyZ2luWToge1xuICAgIHN0eWxlOiBtYXJnaW5cbiAgfSxcbiAgbWFyZ2luSW5saW5lOiB7XG4gICAgc3R5bGU6IG1hcmdpblxuICB9LFxuICBtYXJnaW5JbmxpbmVTdGFydDoge1xuICAgIHN0eWxlOiBtYXJnaW5cbiAgfSxcbiAgbWFyZ2luSW5saW5lRW5kOiB7XG4gICAgc3R5bGU6IG1hcmdpblxuICB9LFxuICBtYXJnaW5CbG9jazoge1xuICAgIHN0eWxlOiBtYXJnaW5cbiAgfSxcbiAgbWFyZ2luQmxvY2tTdGFydDoge1xuICAgIHN0eWxlOiBtYXJnaW5cbiAgfSxcbiAgbWFyZ2luQmxvY2tFbmQ6IHtcbiAgICBzdHlsZTogbWFyZ2luXG4gIH0sXG4gIC8vIGRpc3BsYXlcbiAgZGlzcGxheVByaW50OiB7XG4gICAgY3NzUHJvcGVydHk6IGZhbHNlLFxuICAgIHRyYW5zZm9ybTogdmFsdWUgPT4gKHtcbiAgICAgICdAbWVkaWEgcHJpbnQnOiB7XG4gICAgICAgIGRpc3BsYXk6IHZhbHVlXG4gICAgICB9XG4gICAgfSlcbiAgfSxcbiAgZGlzcGxheToge30sXG4gIG92ZXJmbG93OiB7fSxcbiAgdGV4dE92ZXJmbG93OiB7fSxcbiAgdmlzaWJpbGl0eToge30sXG4gIHdoaXRlU3BhY2U6IHt9LFxuICAvLyBmbGV4Ym94XG4gIGZsZXhCYXNpczoge30sXG4gIGZsZXhEaXJlY3Rpb246IHt9LFxuICBmbGV4V3JhcDoge30sXG4gIGp1c3RpZnlDb250ZW50OiB7fSxcbiAgYWxpZ25JdGVtczoge30sXG4gIGFsaWduQ29udGVudDoge30sXG4gIG9yZGVyOiB7fSxcbiAgZmxleDoge30sXG4gIGZsZXhHcm93OiB7fSxcbiAgZmxleFNocmluazoge30sXG4gIGFsaWduU2VsZjoge30sXG4gIGp1c3RpZnlJdGVtczoge30sXG4gIGp1c3RpZnlTZWxmOiB7fSxcbiAgLy8gZ3JpZFxuICBnYXA6IHtcbiAgICBzdHlsZTogZ2FwXG4gIH0sXG4gIHJvd0dhcDoge1xuICAgIHN0eWxlOiByb3dHYXBcbiAgfSxcbiAgY29sdW1uR2FwOiB7XG4gICAgc3R5bGU6IGNvbHVtbkdhcFxuICB9LFxuICBncmlkQ29sdW1uOiB7fSxcbiAgZ3JpZFJvdzoge30sXG4gIGdyaWRBdXRvRmxvdzoge30sXG4gIGdyaWRBdXRvQ29sdW1uczoge30sXG4gIGdyaWRBdXRvUm93czoge30sXG4gIGdyaWRUZW1wbGF0ZUNvbHVtbnM6IHt9LFxuICBncmlkVGVtcGxhdGVSb3dzOiB7fSxcbiAgZ3JpZFRlbXBsYXRlQXJlYXM6IHt9LFxuICBncmlkQXJlYToge30sXG4gIC8vIHBvc2l0aW9uc1xuICBwb3NpdGlvbjoge30sXG4gIHpJbmRleDoge1xuICAgIHRoZW1lS2V5OiAnekluZGV4J1xuICB9LFxuICB0b3A6IHt9LFxuICByaWdodDoge30sXG4gIGJvdHRvbToge30sXG4gIGxlZnQ6IHt9LFxuICAvLyBzaGFkb3dzXG4gIGJveFNoYWRvdzoge1xuICAgIHRoZW1lS2V5OiAnc2hhZG93cydcbiAgfSxcbiAgLy8gc2l6aW5nXG4gIHdpZHRoOiB7XG4gICAgdHJhbnNmb3JtOiBzaXppbmdUcmFuc2Zvcm1cbiAgfSxcbiAgbWF4V2lkdGg6IHtcbiAgICBzdHlsZTogbWF4V2lkdGhcbiAgfSxcbiAgbWluV2lkdGg6IHtcbiAgICB0cmFuc2Zvcm06IHNpemluZ1RyYW5zZm9ybVxuICB9LFxuICBoZWlnaHQ6IHtcbiAgICB0cmFuc2Zvcm06IHNpemluZ1RyYW5zZm9ybVxuICB9LFxuICBtYXhIZWlnaHQ6IHtcbiAgICB0cmFuc2Zvcm06IHNpemluZ1RyYW5zZm9ybVxuICB9LFxuICBtaW5IZWlnaHQ6IHtcbiAgICB0cmFuc2Zvcm06IHNpemluZ1RyYW5zZm9ybVxuICB9LFxuICBib3hTaXppbmc6IHt9LFxuICAvLyB0eXBvZ3JhcGh5XG4gIGZvbnRGYW1pbHk6IHtcbiAgICB0aGVtZUtleTogJ3R5cG9ncmFwaHknXG4gIH0sXG4gIGZvbnRTaXplOiB7XG4gICAgdGhlbWVLZXk6ICd0eXBvZ3JhcGh5J1xuICB9LFxuICBmb250U3R5bGU6IHtcbiAgICB0aGVtZUtleTogJ3R5cG9ncmFwaHknXG4gIH0sXG4gIGZvbnRXZWlnaHQ6IHtcbiAgICB0aGVtZUtleTogJ3R5cG9ncmFwaHknXG4gIH0sXG4gIGxldHRlclNwYWNpbmc6IHt9LFxuICB0ZXh0VHJhbnNmb3JtOiB7fSxcbiAgbGluZUhlaWdodDoge30sXG4gIHRleHRBbGlnbjoge30sXG4gIHR5cG9ncmFwaHk6IHtcbiAgICBjc3NQcm9wZXJ0eTogZmFsc2UsXG4gICAgdGhlbWVLZXk6ICd0eXBvZ3JhcGh5J1xuICB9XG59O1xuZXhwb3J0IGRlZmF1bHQgZGVmYXVsdFN4Q29uZmlnOyIsICIvKipcbiAqIEEgdW5pdmVyc2FsIHV0aWxpdHkgdG8gc3R5bGUgY29tcG9uZW50cyB3aXRoIG11bHRpcGxlIGNvbG9yIG1vZGVzLiBBbHdheXMgdXNlIGl0IGZyb20gdGhlIHRoZW1lIG9iamVjdC5cbiAqIEl0IHdvcmtzIHdpdGg6XG4gKiAgLSBbQmFzaWMgdGhlbWVdKGh0dHBzOi8vbXVpLmNvbS9tYXRlcmlhbC11aS9jdXN0b21pemF0aW9uL2RhcmstbW9kZS8pXG4gKiAgLSBbQ1NTIHRoZW1lIHZhcmlhYmxlc10oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL2V4cGVyaW1lbnRhbC1hcGkvY3NzLXRoZW1lLXZhcmlhYmxlcy9vdmVydmlldy8pXG4gKiAgLSBaZXJvLXJ1bnRpbWUgZW5naW5lXG4gKlxuICogVGlwczogVXNlIGFuIGFycmF5IG92ZXIgb2JqZWN0IHNwcmVhZCBhbmQgcGxhY2UgYHRoZW1lLmFwcGx5U3R5bGVzKClgIGxhc3QuXG4gKlxuICogXHUyNzA1IFt7IGJhY2tncm91bmQ6ICcjZTVlNWU1JyB9LCB0aGVtZS5hcHBseVN0eWxlcygnZGFyaycsIHsgYmFja2dyb3VuZDogJyMxYzFjMWMnIH0pXVxuICpcbiAqIFx1RDgzRFx1REVBQiB7IGJhY2tncm91bmQ6ICcjZTVlNWU1JywgLi4udGhlbWUuYXBwbHlTdHlsZXMoJ2RhcmsnLCB7IGJhY2tncm91bmQ6ICcjMWMxYzFjJyB9KX1cbiAqXG4gKiBAZXhhbXBsZVxuICogMS4gdXNpbmcgd2l0aCBgc3R5bGVkYDpcbiAqIGBgYGpzeFxuICogICBjb25zdCBDb21wb25lbnQgPSBzdHlsZWQoJ2RpdicpKCh7IHRoZW1lIH0pID0+IFtcbiAqICAgICB7IGJhY2tncm91bmQ6ICcjZTVlNWU1JyB9LFxuICogICAgIHRoZW1lLmFwcGx5U3R5bGVzKCdkYXJrJywge1xuICogICAgICAgYmFja2dyb3VuZDogJyMxYzFjMWMnLFxuICogICAgICAgY29sb3I6ICcjZmZmJyxcbiAqICAgICB9KSxcbiAqICAgXSk7XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICogMi4gdXNpbmcgd2l0aCBgc3hgIHByb3A6XG4gKiBgYGBqc3hcbiAqICAgPEJveCBzeD17dGhlbWUgPT4gW1xuICogICAgIHsgYmFja2dyb3VuZDogJyNlNWU1ZTUnIH0sXG4gKiAgICAgdGhlbWUuYXBwbHlTdHlsZXMoJ2RhcmsnLCB7XG4gKiAgICAgICAgYmFja2dyb3VuZDogJyMxYzFjMWMnLFxuICogICAgICAgIGNvbG9yOiAnI2ZmZicsXG4gKiAgICAgIH0pLFxuICogICAgIF19XG4gKiAgIC8+XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICogMy4gdGhlbWluZyBhIGNvbXBvbmVudDpcbiAqIGBgYGpzeFxuICogICBleHRlbmRUaGVtZSh7XG4gKiAgICAgY29tcG9uZW50czoge1xuICogICAgICAgTXVpQnV0dG9uOiB7XG4gKiAgICAgICAgIHN0eWxlT3ZlcnJpZGVzOiB7XG4gKiAgICAgICAgICAgcm9vdDogKHsgdGhlbWUgfSkgPT4gW1xuICogICAgICAgICAgICAgeyBiYWNrZ3JvdW5kOiAnI2U1ZTVlNScgfSxcbiAqICAgICAgICAgICAgIHRoZW1lLmFwcGx5U3R5bGVzKCdkYXJrJywge1xuICogICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAnIzFjMWMxYycsXG4gKiAgICAgICAgICAgICAgIGNvbG9yOiAnI2ZmZicsXG4gKiAgICAgICAgICAgICB9KSxcbiAqICAgICAgICAgICBdLFxuICogICAgICAgICB9LFxuICogICAgICAgfVxuICogICAgIH1cbiAqICAgfSlcbiAqYGBgXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGFwcGx5U3R5bGVzKGtleSwgc3R5bGVzKSB7XG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgdGhpcyBpcyAnYW55JyB0eXBlXG4gIGNvbnN0IHRoZW1lID0gdGhpcztcbiAgaWYgKHRoZW1lLnZhcnMgJiYgdHlwZW9mIHRoZW1lLmdldENvbG9yU2NoZW1lU2VsZWN0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBJZiBDc3NWYXJzUHJvdmlkZXIgaXMgdXNlZCBhcyBhIHByb3ZpZGVyLFxuICAgIC8vIHJldHVybnMgJyogOndoZXJlKFtkYXRhLW11aS1jb2xvci1zY2hlbWU9XCJsaWdodHxkYXJrXCJdKSAmJ1xuICAgIGNvbnN0IHNlbGVjdG9yID0gdGhlbWUuZ2V0Q29sb3JTY2hlbWVTZWxlY3RvcihrZXkpLnJlcGxhY2UoLyhcXFtbXlxcXV0rXFxdKS8sICcqOndoZXJlKCQxKScpO1xuICAgIHJldHVybiB7XG4gICAgICBbc2VsZWN0b3JdOiBzdHlsZXNcbiAgICB9O1xuICB9XG4gIGlmICh0aGVtZS5wYWxldHRlLm1vZGUgPT09IGtleSkge1xuICAgIHJldHVybiBzdHlsZXM7XG4gIH1cbiAgcmV0dXJuIHt9O1xufSIsICIndXNlIGNsaWVudCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFRoZW1lQ29udGV4dCB9IGZyb20gJ0BtdWkvc3R5bGVkLWVuZ2luZSc7XG5mdW5jdGlvbiBpc09iamVjdEVtcHR5KG9iaikge1xuICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5sZW5ndGggPT09IDA7XG59XG5mdW5jdGlvbiB1c2VUaGVtZShkZWZhdWx0VGhlbWUgPSBudWxsKSB7XG4gIGNvbnN0IGNvbnRleHRUaGVtZSA9IFJlYWN0LnVzZUNvbnRleHQoVGhlbWVDb250ZXh0KTtcbiAgcmV0dXJuICFjb250ZXh0VGhlbWUgfHwgaXNPYmplY3RFbXB0eShjb250ZXh0VGhlbWUpID8gZGVmYXVsdFRoZW1lIDogY29udGV4dFRoZW1lO1xufVxuZXhwb3J0IGRlZmF1bHQgdXNlVGhlbWU7IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0IGNyZWF0ZVRoZW1lIGZyb20gJy4vY3JlYXRlVGhlbWUnO1xuaW1wb3J0IHVzZVRoZW1lV2l0aG91dERlZmF1bHQgZnJvbSAnLi91c2VUaGVtZVdpdGhvdXREZWZhdWx0JztcbmV4cG9ydCBjb25zdCBzeXN0ZW1EZWZhdWx0VGhlbWUgPSBjcmVhdGVUaGVtZSgpO1xuZnVuY3Rpb24gdXNlVGhlbWUoZGVmYXVsdFRoZW1lID0gc3lzdGVtRGVmYXVsdFRoZW1lKSB7XG4gIHJldHVybiB1c2VUaGVtZVdpdGhvdXREZWZhdWx0KGRlZmF1bHRUaGVtZSk7XG59XG5leHBvcnQgZGVmYXVsdCB1c2VUaGVtZTsiLCAiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcInN4XCJdO1xuaW1wb3J0IHsgaXNQbGFpbk9iamVjdCB9IGZyb20gJ0BtdWkvdXRpbHMvZGVlcG1lcmdlJztcbmltcG9ydCBkZWZhdWx0U3hDb25maWcgZnJvbSAnLi9kZWZhdWx0U3hDb25maWcnO1xuY29uc3Qgc3BsaXRQcm9wcyA9IHByb3BzID0+IHtcbiAgdmFyIF9wcm9wcyR0aGVtZSR1bnN0YWJsZSwgX3Byb3BzJHRoZW1lO1xuICBjb25zdCByZXN1bHQgPSB7XG4gICAgc3lzdGVtUHJvcHM6IHt9LFxuICAgIG90aGVyUHJvcHM6IHt9XG4gIH07XG4gIGNvbnN0IGNvbmZpZyA9IChfcHJvcHMkdGhlbWUkdW5zdGFibGUgPSBwcm9wcyA9PSBudWxsIHx8IChfcHJvcHMkdGhlbWUgPSBwcm9wcy50aGVtZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9wcm9wcyR0aGVtZS51bnN0YWJsZV9zeENvbmZpZykgIT0gbnVsbCA/IF9wcm9wcyR0aGVtZSR1bnN0YWJsZSA6IGRlZmF1bHRTeENvbmZpZztcbiAgT2JqZWN0LmtleXMocHJvcHMpLmZvckVhY2gocHJvcCA9PiB7XG4gICAgaWYgKGNvbmZpZ1twcm9wXSkge1xuICAgICAgcmVzdWx0LnN5c3RlbVByb3BzW3Byb3BdID0gcHJvcHNbcHJvcF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdC5vdGhlclByb3BzW3Byb3BdID0gcHJvcHNbcHJvcF07XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBleHRlbmRTeFByb3AocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgICAgc3g6IGluU3hcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3Qge1xuICAgIHN5c3RlbVByb3BzLFxuICAgIG90aGVyUHJvcHNcbiAgfSA9IHNwbGl0UHJvcHMob3RoZXIpO1xuICBsZXQgZmluYWxTeDtcbiAgaWYgKEFycmF5LmlzQXJyYXkoaW5TeCkpIHtcbiAgICBmaW5hbFN4ID0gW3N5c3RlbVByb3BzLCAuLi5pblN4XTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgaW5TeCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGZpbmFsU3ggPSAoLi4uYXJncykgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaW5TeCguLi5hcmdzKTtcbiAgICAgIGlmICghaXNQbGFpbk9iamVjdChyZXN1bHQpKSB7XG4gICAgICAgIHJldHVybiBzeXN0ZW1Qcm9wcztcbiAgICAgIH1cbiAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3lzdGVtUHJvcHMsIHJlc3VsdCk7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBmaW5hbFN4ID0gX2V4dGVuZHMoe30sIHN5c3RlbVByb3BzLCBpblN4KTtcbiAgfVxuICByZXR1cm4gX2V4dGVuZHMoe30sIG90aGVyUHJvcHMsIHtcbiAgICBzeDogZmluYWxTeFxuICB9KTtcbn0iLCAiY29uc3QgZGVmYXVsdEdlbmVyYXRvciA9IGNvbXBvbmVudE5hbWUgPT4gY29tcG9uZW50TmFtZTtcbmNvbnN0IGNyZWF0ZUNsYXNzTmFtZUdlbmVyYXRvciA9ICgpID0+IHtcbiAgbGV0IGdlbmVyYXRlID0gZGVmYXVsdEdlbmVyYXRvcjtcbiAgcmV0dXJuIHtcbiAgICBjb25maWd1cmUoZ2VuZXJhdG9yKSB7XG4gICAgICBnZW5lcmF0ZSA9IGdlbmVyYXRvcjtcbiAgICB9LFxuICAgIGdlbmVyYXRlKGNvbXBvbmVudE5hbWUpIHtcbiAgICAgIHJldHVybiBnZW5lcmF0ZShjb21wb25lbnROYW1lKTtcbiAgICB9LFxuICAgIHJlc2V0KCkge1xuICAgICAgZ2VuZXJhdGUgPSBkZWZhdWx0R2VuZXJhdG9yO1xuICAgIH1cbiAgfTtcbn07XG5jb25zdCBDbGFzc05hbWVHZW5lcmF0b3IgPSBjcmVhdGVDbGFzc05hbWVHZW5lcmF0b3IoKTtcbmV4cG9ydCBkZWZhdWx0IENsYXNzTmFtZUdlbmVyYXRvcjsiLCAiZnVuY3Rpb24gcihlKXt2YXIgdCxmLG49XCJcIjtpZihcInN0cmluZ1wiPT10eXBlb2YgZXx8XCJudW1iZXJcIj09dHlwZW9mIGUpbis9ZTtlbHNlIGlmKFwib2JqZWN0XCI9PXR5cGVvZiBlKWlmKEFycmF5LmlzQXJyYXkoZSkpe3ZhciBvPWUubGVuZ3RoO2Zvcih0PTA7dDxvO3QrKyllW3RdJiYoZj1yKGVbdF0pKSYmKG4mJihuKz1cIiBcIiksbis9Zil9ZWxzZSBmb3IoZiBpbiBlKWVbZl0mJihuJiYobis9XCIgXCIpLG4rPWYpO3JldHVybiBufWV4cG9ydCBmdW5jdGlvbiBjbHN4KCl7Zm9yKHZhciBlLHQsZj0wLG49XCJcIixvPWFyZ3VtZW50cy5sZW5ndGg7ZjxvO2YrKykoZT1hcmd1bWVudHNbZl0pJiYodD1yKGUpKSYmKG4mJihuKz1cIiBcIiksbis9dCk7cmV0dXJuIG59ZXhwb3J0IGRlZmF1bHQgY2xzeDsiLCAiaW1wb3J0IENsYXNzTmFtZUdlbmVyYXRvciBmcm9tICcuLi9DbGFzc05hbWVHZW5lcmF0b3InO1xuZXhwb3J0IGNvbnN0IGdsb2JhbFN0YXRlQ2xhc3NlcyA9IHtcbiAgYWN0aXZlOiAnYWN0aXZlJyxcbiAgY2hlY2tlZDogJ2NoZWNrZWQnLFxuICBjb21wbGV0ZWQ6ICdjb21wbGV0ZWQnLFxuICBkaXNhYmxlZDogJ2Rpc2FibGVkJyxcbiAgZXJyb3I6ICdlcnJvcicsXG4gIGV4cGFuZGVkOiAnZXhwYW5kZWQnLFxuICBmb2N1c2VkOiAnZm9jdXNlZCcsXG4gIGZvY3VzVmlzaWJsZTogJ2ZvY3VzVmlzaWJsZScsXG4gIG9wZW46ICdvcGVuJyxcbiAgcmVhZE9ubHk6ICdyZWFkT25seScsXG4gIHJlcXVpcmVkOiAncmVxdWlyZWQnLFxuICBzZWxlY3RlZDogJ3NlbGVjdGVkJ1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdlbmVyYXRlVXRpbGl0eUNsYXNzKGNvbXBvbmVudE5hbWUsIHNsb3QsIGdsb2JhbFN0YXRlUHJlZml4ID0gJ011aScpIHtcbiAgY29uc3QgZ2xvYmFsU3RhdGVDbGFzcyA9IGdsb2JhbFN0YXRlQ2xhc3Nlc1tzbG90XTtcbiAgcmV0dXJuIGdsb2JhbFN0YXRlQ2xhc3MgPyBgJHtnbG9iYWxTdGF0ZVByZWZpeH0tJHtnbG9iYWxTdGF0ZUNsYXNzfWAgOiBgJHtDbGFzc05hbWVHZW5lcmF0b3IuZ2VuZXJhdGUoY29tcG9uZW50TmFtZSl9LSR7c2xvdH1gO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzR2xvYmFsU3RhdGUoc2xvdCkge1xuICByZXR1cm4gZ2xvYmFsU3RhdGVDbGFzc2VzW3Nsb3RdICE9PSB1bmRlZmluZWQ7XG59IiwgImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICcuLi9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKGNvbXBvbmVudE5hbWUsIHNsb3RzLCBnbG9iYWxTdGF0ZVByZWZpeCA9ICdNdWknKSB7XG4gIGNvbnN0IHJlc3VsdCA9IHt9O1xuICBzbG90cy5mb3JFYWNoKHNsb3QgPT4ge1xuICAgIHJlc3VsdFtzbG90XSA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzKGNvbXBvbmVudE5hbWUsIHNsb3QsIGdsb2JhbFN0YXRlUHJlZml4KTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59IiwgImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJvd25lclN0YXRlXCJdLFxuICBfZXhjbHVkZWQyID0gW1widmFyaWFudHNcIl0sXG4gIF9leGNsdWRlZDMgPSBbXCJuYW1lXCIsIFwic2xvdFwiLCBcInNraXBWYXJpYW50c1Jlc29sdmVyXCIsIFwic2tpcFN4XCIsIFwib3ZlcnJpZGVzUmVzb2x2ZXJcIl07XG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlcnNjb3JlLWRhbmdsZSAqL1xuaW1wb3J0IHN0eWxlZEVuZ2luZVN0eWxlZCwgeyBpbnRlcm5hbF9wcm9jZXNzU3R5bGVzIGFzIHByb2Nlc3NTdHlsZXMgfSBmcm9tICdAbXVpL3N0eWxlZC1lbmdpbmUnO1xuaW1wb3J0IHsgaXNQbGFpbk9iamVjdCB9IGZyb20gJ0BtdWkvdXRpbHMvZGVlcG1lcmdlJztcbmltcG9ydCBjYXBpdGFsaXplIGZyb20gJ0BtdWkvdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgZ2V0RGlzcGxheU5hbWUgZnJvbSAnQG11aS91dGlscy9nZXREaXNwbGF5TmFtZSc7XG5pbXBvcnQgY3JlYXRlVGhlbWUgZnJvbSAnLi9jcmVhdGVUaGVtZSc7XG5pbXBvcnQgc3R5bGVGdW5jdGlvblN4IGZyb20gJy4vc3R5bGVGdW5jdGlvblN4JztcbmZ1bmN0aW9uIGlzRW1wdHkob2JqKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA9PT0gMDtcbn1cblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Vtb3Rpb24tanMvZW1vdGlvbi9ibG9iLzI2ZGVkNjEwOWZjZDhjYTk4NzVjYzJjZTQ1NjRmZWU2NzhhM2YzYzUvcGFja2FnZXMvc3R5bGVkL3NyYy91dGlscy5qcyNMNDBcbmZ1bmN0aW9uIGlzU3RyaW5nVGFnKHRhZykge1xuICByZXR1cm4gdHlwZW9mIHRhZyA9PT0gJ3N0cmluZycgJiZcbiAgLy8gOTYgaXMgb25lIGxlc3MgdGhhbiB0aGUgY2hhciBjb2RlXG4gIC8vIGZvciBcImFcIiBzbyB0aGlzIGlzIGNoZWNraW5nIHRoYXRcbiAgLy8gaXQncyBhIGxvd2VyY2FzZSBjaGFyYWN0ZXJcbiAgdGFnLmNoYXJDb2RlQXQoMCkgPiA5Njtcbn1cblxuLy8gVXBkYXRlIC9zeXN0ZW0vc3R5bGVkLyNhcGkgaW4gY2FzZSBpZiB0aGlzIGNoYW5nZXNcbmV4cG9ydCBmdW5jdGlvbiBzaG91bGRGb3J3YXJkUHJvcChwcm9wKSB7XG4gIHJldHVybiBwcm9wICE9PSAnb3duZXJTdGF0ZScgJiYgcHJvcCAhPT0gJ3RoZW1lJyAmJiBwcm9wICE9PSAnc3gnICYmIHByb3AgIT09ICdhcyc7XG59XG5leHBvcnQgY29uc3Qgc3lzdGVtRGVmYXVsdFRoZW1lID0gY3JlYXRlVGhlbWUoKTtcbmNvbnN0IGxvd2VyY2FzZUZpcnN0TGV0dGVyID0gc3RyaW5nID0+IHtcbiAgaWYgKCFzdHJpbmcpIHtcbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG4gIHJldHVybiBzdHJpbmcuY2hhckF0KDApLnRvTG93ZXJDYXNlKCkgKyBzdHJpbmcuc2xpY2UoMSk7XG59O1xuZnVuY3Rpb24gcmVzb2x2ZVRoZW1lKHtcbiAgZGVmYXVsdFRoZW1lLFxuICB0aGVtZSxcbiAgdGhlbWVJZFxufSkge1xuICByZXR1cm4gaXNFbXB0eSh0aGVtZSkgPyBkZWZhdWx0VGhlbWUgOiB0aGVtZVt0aGVtZUlkXSB8fCB0aGVtZTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRPdmVycmlkZXNSZXNvbHZlcihzbG90KSB7XG4gIGlmICghc2xvdCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiAocHJvcHMsIHN0eWxlcykgPT4gc3R5bGVzW3Nsb3RdO1xufVxuZnVuY3Rpb24gcHJvY2Vzc1N0eWxlQXJnKGNhbGxhYmxlU3R5bGUsIF9yZWYpIHtcbiAgbGV0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gX3JlZixcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKF9yZWYsIF9leGNsdWRlZCk7XG4gIGNvbnN0IHJlc29sdmVkU3R5bGVzQXJnID0gdHlwZW9mIGNhbGxhYmxlU3R5bGUgPT09ICdmdW5jdGlvbicgPyBjYWxsYWJsZVN0eWxlKF9leHRlbmRzKHtcbiAgICBvd25lclN0YXRlXG4gIH0sIHByb3BzKSkgOiBjYWxsYWJsZVN0eWxlO1xuICBpZiAoQXJyYXkuaXNBcnJheShyZXNvbHZlZFN0eWxlc0FyZykpIHtcbiAgICByZXR1cm4gcmVzb2x2ZWRTdHlsZXNBcmcuZmxhdE1hcChyZXNvbHZlZFN0eWxlID0+IHByb2Nlc3NTdHlsZUFyZyhyZXNvbHZlZFN0eWxlLCBfZXh0ZW5kcyh7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSwgcHJvcHMpKSk7XG4gIH1cbiAgaWYgKCEhcmVzb2x2ZWRTdHlsZXNBcmcgJiYgdHlwZW9mIHJlc29sdmVkU3R5bGVzQXJnID09PSAnb2JqZWN0JyAmJiBBcnJheS5pc0FycmF5KHJlc29sdmVkU3R5bGVzQXJnLnZhcmlhbnRzKSkge1xuICAgIGNvbnN0IHtcbiAgICAgICAgdmFyaWFudHMgPSBbXVxuICAgICAgfSA9IHJlc29sdmVkU3R5bGVzQXJnLFxuICAgICAgb3RoZXJTdHlsZXMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyZXNvbHZlZFN0eWxlc0FyZywgX2V4Y2x1ZGVkMik7XG4gICAgbGV0IHJlc3VsdCA9IG90aGVyU3R5bGVzO1xuICAgIHZhcmlhbnRzLmZvckVhY2godmFyaWFudCA9PiB7XG4gICAgICBsZXQgaXNNYXRjaCA9IHRydWU7XG4gICAgICBpZiAodHlwZW9mIHZhcmlhbnQucHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaXNNYXRjaCA9IHZhcmlhbnQucHJvcHMoX2V4dGVuZHMoe1xuICAgICAgICAgIG93bmVyU3RhdGVcbiAgICAgICAgfSwgcHJvcHMsIG93bmVyU3RhdGUpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIE9iamVjdC5rZXlzKHZhcmlhbnQucHJvcHMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICBpZiAoKG93bmVyU3RhdGUgPT0gbnVsbCA/IHZvaWQgMCA6IG93bmVyU3RhdGVba2V5XSkgIT09IHZhcmlhbnQucHJvcHNba2V5XSAmJiBwcm9wc1trZXldICE9PSB2YXJpYW50LnByb3BzW2tleV0pIHtcbiAgICAgICAgICAgIGlzTWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKGlzTWF0Y2gpIHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHJlc3VsdCkpIHtcbiAgICAgICAgICByZXN1bHQgPSBbcmVzdWx0XTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQucHVzaCh0eXBlb2YgdmFyaWFudC5zdHlsZSA9PT0gJ2Z1bmN0aW9uJyA/IHZhcmlhbnQuc3R5bGUoX2V4dGVuZHMoe1xuICAgICAgICAgIG93bmVyU3RhdGVcbiAgICAgICAgfSwgcHJvcHMsIG93bmVyU3RhdGUpKSA6IHZhcmlhbnQuc3R5bGUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgcmV0dXJuIHJlc29sdmVkU3R5bGVzQXJnO1xufVxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlU3R5bGVkKGlucHV0ID0ge30pIHtcbiAgY29uc3Qge1xuICAgIHRoZW1lSWQsXG4gICAgZGVmYXVsdFRoZW1lID0gc3lzdGVtRGVmYXVsdFRoZW1lLFxuICAgIHJvb3RTaG91bGRGb3J3YXJkUHJvcCA9IHNob3VsZEZvcndhcmRQcm9wLFxuICAgIHNsb3RTaG91bGRGb3J3YXJkUHJvcCA9IHNob3VsZEZvcndhcmRQcm9wXG4gIH0gPSBpbnB1dDtcbiAgY29uc3Qgc3lzdGVtU3ggPSBwcm9wcyA9PiB7XG4gICAgcmV0dXJuIHN0eWxlRnVuY3Rpb25TeChfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICAgIHRoZW1lOiByZXNvbHZlVGhlbWUoX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgICAgIGRlZmF1bHRUaGVtZSxcbiAgICAgICAgdGhlbWVJZFxuICAgICAgfSkpXG4gICAgfSkpO1xuICB9O1xuICBzeXN0ZW1TeC5fX211aV9zeXN0ZW1TeCA9IHRydWU7XG4gIHJldHVybiAodGFnLCBpbnB1dE9wdGlvbnMgPSB7fSkgPT4ge1xuICAgIC8vIEZpbHRlciBvdXQgdGhlIGBzeGAgc3R5bGUgZnVuY3Rpb24gZnJvbSB0aGUgcHJldmlvdXMgc3R5bGVkIGNvbXBvbmVudCB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHN0eWxlcyBnZW5lcmF0ZWQgYnkgdGhlIGNvbXBvc2l0ZSBjb21wb25lbnRzLlxuICAgIHByb2Nlc3NTdHlsZXModGFnLCBzdHlsZXMgPT4gc3R5bGVzLmZpbHRlcihzdHlsZSA9PiAhKHN0eWxlICE9IG51bGwgJiYgc3R5bGUuX19tdWlfc3lzdGVtU3gpKSk7XG4gICAgY29uc3Qge1xuICAgICAgICBuYW1lOiBjb21wb25lbnROYW1lLFxuICAgICAgICBzbG90OiBjb21wb25lbnRTbG90LFxuICAgICAgICBza2lwVmFyaWFudHNSZXNvbHZlcjogaW5wdXRTa2lwVmFyaWFudHNSZXNvbHZlcixcbiAgICAgICAgc2tpcFN4OiBpbnB1dFNraXBTeCxcbiAgICAgICAgLy8gVE9ETyB2NjogcmVtb3ZlIGBsb3dlcmNhc2VGaXJzdExldHRlcigpYCBpbiB0aGUgbmV4dCBtYWpvciByZWxlYXNlXG4gICAgICAgIC8vIEZvciBtb3JlIGRldGFpbHM6IGh0dHBzOi8vZ2l0aHViLmNvbS9tdWkvbWF0ZXJpYWwtdWkvcHVsbC8zNzkwOFxuICAgICAgICBvdmVycmlkZXNSZXNvbHZlciA9IGRlZmF1bHRPdmVycmlkZXNSZXNvbHZlcihsb3dlcmNhc2VGaXJzdExldHRlcihjb21wb25lbnRTbG90KSlcbiAgICAgIH0gPSBpbnB1dE9wdGlvbnMsXG4gICAgICBvcHRpb25zID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoaW5wdXRPcHRpb25zLCBfZXhjbHVkZWQzKTtcblxuICAgIC8vIGlmIHNraXBWYXJpYW50c1Jlc29sdmVyIG9wdGlvbiBpcyBkZWZpbmVkLCB0YWtlIHRoZSB2YWx1ZSwgb3RoZXJ3aXNlLCB0cnVlIGZvciByb290IGFuZCBmYWxzZSBmb3Igb3RoZXIgc2xvdHMuXG4gICAgY29uc3Qgc2tpcFZhcmlhbnRzUmVzb2x2ZXIgPSBpbnB1dFNraXBWYXJpYW50c1Jlc29sdmVyICE9PSB1bmRlZmluZWQgPyBpbnB1dFNraXBWYXJpYW50c1Jlc29sdmVyIDpcbiAgICAvLyBUT0RPIHY2OiByZW1vdmUgYFJvb3RgIGluIHRoZSBuZXh0IG1ham9yIHJlbGVhc2VcbiAgICAvLyBGb3IgbW9yZSBkZXRhaWxzOiBodHRwczovL2dpdGh1Yi5jb20vbXVpL21hdGVyaWFsLXVpL3B1bGwvMzc5MDhcbiAgICBjb21wb25lbnRTbG90ICYmIGNvbXBvbmVudFNsb3QgIT09ICdSb290JyAmJiBjb21wb25lbnRTbG90ICE9PSAncm9vdCcgfHwgZmFsc2U7XG4gICAgY29uc3Qgc2tpcFN4ID0gaW5wdXRTa2lwU3ggfHwgZmFsc2U7XG4gICAgbGV0IGxhYmVsO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAoY29tcG9uZW50TmFtZSkge1xuICAgICAgICAvLyBUT0RPIHY2OiByZW1vdmUgYGxvd2VyY2FzZUZpcnN0TGV0dGVyKClgIGluIHRoZSBuZXh0IG1ham9yIHJlbGVhc2VcbiAgICAgICAgLy8gRm9yIG1vcmUgZGV0YWlsczogaHR0cHM6Ly9naXRodWIuY29tL211aS9tYXRlcmlhbC11aS9wdWxsLzM3OTA4XG4gICAgICAgIGxhYmVsID0gYCR7Y29tcG9uZW50TmFtZX0tJHtsb3dlcmNhc2VGaXJzdExldHRlcihjb21wb25lbnRTbG90IHx8ICdSb290Jyl9YDtcbiAgICAgIH1cbiAgICB9XG4gICAgbGV0IHNob3VsZEZvcndhcmRQcm9wT3B0aW9uID0gc2hvdWxkRm9yd2FyZFByb3A7XG5cbiAgICAvLyBUT0RPIHY2OiByZW1vdmUgYFJvb3RgIGluIHRoZSBuZXh0IG1ham9yIHJlbGVhc2VcbiAgICAvLyBGb3IgbW9yZSBkZXRhaWxzOiBodHRwczovL2dpdGh1Yi5jb20vbXVpL21hdGVyaWFsLXVpL3B1bGwvMzc5MDhcbiAgICBpZiAoY29tcG9uZW50U2xvdCA9PT0gJ1Jvb3QnIHx8IGNvbXBvbmVudFNsb3QgPT09ICdyb290Jykge1xuICAgICAgc2hvdWxkRm9yd2FyZFByb3BPcHRpb24gPSByb290U2hvdWxkRm9yd2FyZFByb3A7XG4gICAgfSBlbHNlIGlmIChjb21wb25lbnRTbG90KSB7XG4gICAgICAvLyBhbnkgb3RoZXIgc2xvdCBzcGVjaWZpZWRcbiAgICAgIHNob3VsZEZvcndhcmRQcm9wT3B0aW9uID0gc2xvdFNob3VsZEZvcndhcmRQcm9wO1xuICAgIH0gZWxzZSBpZiAoaXNTdHJpbmdUYWcodGFnKSkge1xuICAgICAgLy8gZm9yIHN0cmluZyAoaHRtbCkgdGFnLCBwcmVzZXJ2ZSB0aGUgYmVoYXZpb3IgaW4gZW1vdGlvbiAmIHN0eWxlZC1jb21wb25lbnRzLlxuICAgICAgc2hvdWxkRm9yd2FyZFByb3BPcHRpb24gPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IGRlZmF1bHRTdHlsZWRSZXNvbHZlciA9IHN0eWxlZEVuZ2luZVN0eWxlZCh0YWcsIF9leHRlbmRzKHtcbiAgICAgIHNob3VsZEZvcndhcmRQcm9wOiBzaG91bGRGb3J3YXJkUHJvcE9wdGlvbixcbiAgICAgIGxhYmVsXG4gICAgfSwgb3B0aW9ucykpO1xuICAgIGNvbnN0IHRyYW5zZm9ybVN0eWxlQXJnID0gc3R5bGVzQXJnID0+IHtcbiAgICAgIC8vIE9uIHRoZSBzZXJ2ZXIgRW1vdGlvbiBkb2Vzbid0IHVzZSBSZWFjdC5mb3J3YXJkUmVmIGZvciBjcmVhdGluZyBjb21wb25lbnRzLCBzbyB0aGUgY3JlYXRlZFxuICAgICAgLy8gY29tcG9uZW50IHN0YXlzIGFzIGEgZnVuY3Rpb24uIFRoaXMgY29uZGl0aW9uIG1ha2VzIHN1cmUgdGhhdCB3ZSBkbyBub3QgaW50ZXJwb2xhdGUgZnVuY3Rpb25zXG4gICAgICAvLyB3aGljaCBhcmUgYmFzaWNhbGx5IGNvbXBvbmVudHMgdXNlZCBhcyBhIHNlbGVjdG9ycy5cbiAgICAgIGlmICh0eXBlb2Ygc3R5bGVzQXJnID09PSAnZnVuY3Rpb24nICYmIHN0eWxlc0FyZy5fX2Vtb3Rpb25fcmVhbCAhPT0gc3R5bGVzQXJnIHx8IGlzUGxhaW5PYmplY3Qoc3R5bGVzQXJnKSkge1xuICAgICAgICByZXR1cm4gcHJvcHMgPT4gcHJvY2Vzc1N0eWxlQXJnKHN0eWxlc0FyZywgX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgICAgICAgdGhlbWU6IHJlc29sdmVUaGVtZSh7XG4gICAgICAgICAgICB0aGVtZTogcHJvcHMudGhlbWUsXG4gICAgICAgICAgICBkZWZhdWx0VGhlbWUsXG4gICAgICAgICAgICB0aGVtZUlkXG4gICAgICAgICAgfSlcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN0eWxlc0FyZztcbiAgICB9O1xuICAgIGNvbnN0IG11aVN0eWxlZFJlc29sdmVyID0gKHN0eWxlQXJnLCAuLi5leHByZXNzaW9ucykgPT4ge1xuICAgICAgbGV0IHRyYW5zZm9ybWVkU3R5bGVBcmcgPSB0cmFuc2Zvcm1TdHlsZUFyZyhzdHlsZUFyZyk7XG4gICAgICBjb25zdCBleHByZXNzaW9uc1dpdGhEZWZhdWx0VGhlbWUgPSBleHByZXNzaW9ucyA/IGV4cHJlc3Npb25zLm1hcCh0cmFuc2Zvcm1TdHlsZUFyZykgOiBbXTtcbiAgICAgIGlmIChjb21wb25lbnROYW1lICYmIG92ZXJyaWRlc1Jlc29sdmVyKSB7XG4gICAgICAgIGV4cHJlc3Npb25zV2l0aERlZmF1bHRUaGVtZS5wdXNoKHByb3BzID0+IHtcbiAgICAgICAgICBjb25zdCB0aGVtZSA9IHJlc29sdmVUaGVtZShfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICAgICAgICAgIGRlZmF1bHRUaGVtZSxcbiAgICAgICAgICAgIHRoZW1lSWRcbiAgICAgICAgICB9KSk7XG4gICAgICAgICAgaWYgKCF0aGVtZS5jb21wb25lbnRzIHx8ICF0aGVtZS5jb21wb25lbnRzW2NvbXBvbmVudE5hbWVdIHx8ICF0aGVtZS5jb21wb25lbnRzW2NvbXBvbmVudE5hbWVdLnN0eWxlT3ZlcnJpZGVzKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3Qgc3R5bGVPdmVycmlkZXMgPSB0aGVtZS5jb21wb25lbnRzW2NvbXBvbmVudE5hbWVdLnN0eWxlT3ZlcnJpZGVzO1xuICAgICAgICAgIGNvbnN0IHJlc29sdmVkU3R5bGVPdmVycmlkZXMgPSB7fTtcbiAgICAgICAgICAvLyBUT0RPOiB2NyByZW1vdmUgaXRlcmF0aW9uIGFuZCB1c2UgYHJlc29sdmVTdHlsZUFyZyhzdHlsZU92ZXJyaWRlc1tzbG90XSlgIGRpcmVjdGx5XG4gICAgICAgICAgT2JqZWN0LmVudHJpZXMoc3R5bGVPdmVycmlkZXMpLmZvckVhY2goKFtzbG90S2V5LCBzbG90U3R5bGVdKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlZFN0eWxlT3ZlcnJpZGVzW3Nsb3RLZXldID0gcHJvY2Vzc1N0eWxlQXJnKHNsb3RTdHlsZSwgX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgICAgICAgICAgIHRoZW1lXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIG92ZXJyaWRlc1Jlc29sdmVyKHByb3BzLCByZXNvbHZlZFN0eWxlT3ZlcnJpZGVzKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoY29tcG9uZW50TmFtZSAmJiAhc2tpcFZhcmlhbnRzUmVzb2x2ZXIpIHtcbiAgICAgICAgZXhwcmVzc2lvbnNXaXRoRGVmYXVsdFRoZW1lLnB1c2gocHJvcHMgPT4ge1xuICAgICAgICAgIHZhciBfdGhlbWUkY29tcG9uZW50cztcbiAgICAgICAgICBjb25zdCB0aGVtZSA9IHJlc29sdmVUaGVtZShfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICAgICAgICAgIGRlZmF1bHRUaGVtZSxcbiAgICAgICAgICAgIHRoZW1lSWRcbiAgICAgICAgICB9KSk7XG4gICAgICAgICAgY29uc3QgdGhlbWVWYXJpYW50cyA9IHRoZW1lID09IG51bGwgfHwgKF90aGVtZSRjb21wb25lbnRzID0gdGhlbWUuY29tcG9uZW50cykgPT0gbnVsbCB8fCAoX3RoZW1lJGNvbXBvbmVudHMgPSBfdGhlbWUkY29tcG9uZW50c1tjb21wb25lbnROYW1lXSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGVtZSRjb21wb25lbnRzLnZhcmlhbnRzO1xuICAgICAgICAgIHJldHVybiBwcm9jZXNzU3R5bGVBcmcoe1xuICAgICAgICAgICAgdmFyaWFudHM6IHRoZW1lVmFyaWFudHNcbiAgICAgICAgICB9LCBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICAgICAgICAgIHRoZW1lXG4gICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICghc2tpcFN4KSB7XG4gICAgICAgIGV4cHJlc3Npb25zV2l0aERlZmF1bHRUaGVtZS5wdXNoKHN5c3RlbVN4KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG51bU9mQ3VzdG9tRm5zQXBwbGllZCA9IGV4cHJlc3Npb25zV2l0aERlZmF1bHRUaGVtZS5sZW5ndGggLSBleHByZXNzaW9ucy5sZW5ndGg7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShzdHlsZUFyZykgJiYgbnVtT2ZDdXN0b21GbnNBcHBsaWVkID4gMCkge1xuICAgICAgICBjb25zdCBwbGFjZWhvbGRlcnMgPSBuZXcgQXJyYXkobnVtT2ZDdXN0b21GbnNBcHBsaWVkKS5maWxsKCcnKTtcbiAgICAgICAgLy8gSWYgdGhlIHR5cGUgaXMgYXJyYXksIHRoYW4gd2UgbmVlZCB0byBhZGQgcGxhY2Vob2xkZXJzIGluIHRoZSB0ZW1wbGF0ZSBmb3IgdGhlIG92ZXJyaWRlcywgdmFyaWFudHMgYW5kIHRoZSBzeCBzdHlsZXMuXG4gICAgICAgIHRyYW5zZm9ybWVkU3R5bGVBcmcgPSBbLi4uc3R5bGVBcmcsIC4uLnBsYWNlaG9sZGVyc107XG4gICAgICAgIHRyYW5zZm9ybWVkU3R5bGVBcmcucmF3ID0gWy4uLnN0eWxlQXJnLnJhdywgLi4ucGxhY2Vob2xkZXJzXTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IENvbXBvbmVudCA9IGRlZmF1bHRTdHlsZWRSZXNvbHZlcih0cmFuc2Zvcm1lZFN0eWxlQXJnLCAuLi5leHByZXNzaW9uc1dpdGhEZWZhdWx0VGhlbWUpO1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgbGV0IGRpc3BsYXlOYW1lO1xuICAgICAgICBpZiAoY29tcG9uZW50TmFtZSkge1xuICAgICAgICAgIGRpc3BsYXlOYW1lID0gYCR7Y29tcG9uZW50TmFtZX0ke2NhcGl0YWxpemUoY29tcG9uZW50U2xvdCB8fCAnJyl9YDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGlzcGxheU5hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGRpc3BsYXlOYW1lID0gYFN0eWxlZCgke2dldERpc3BsYXlOYW1lKHRhZyl9KWA7XG4gICAgICAgIH1cbiAgICAgICAgQ29tcG9uZW50LmRpc3BsYXlOYW1lID0gZGlzcGxheU5hbWU7XG4gICAgICB9XG4gICAgICBpZiAodGFnLm11aU5hbWUpIHtcbiAgICAgICAgQ29tcG9uZW50Lm11aU5hbWUgPSB0YWcubXVpTmFtZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBDb21wb25lbnQ7XG4gICAgfTtcbiAgICBpZiAoZGVmYXVsdFN0eWxlZFJlc29sdmVyLndpdGhDb25maWcpIHtcbiAgICAgIG11aVN0eWxlZFJlc29sdmVyLndpdGhDb25maWcgPSBkZWZhdWx0U3R5bGVkUmVzb2x2ZXIud2l0aENvbmZpZztcbiAgICB9XG4gICAgcmV0dXJuIG11aVN0eWxlZFJlc29sdmVyO1xuICB9O1xufSIsICJpbXBvcnQgY3JlYXRlU3R5bGVkIGZyb20gJy4vY3JlYXRlU3R5bGVkJztcbmNvbnN0IHN0eWxlZCA9IGNyZWF0ZVN0eWxlZCgpO1xuZXhwb3J0IGRlZmF1bHQgc3R5bGVkOyIsICJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbi8qKlxuICogQWRkIGtleXMsIHZhbHVlcyBvZiBgZGVmYXVsdFByb3BzYCB0aGF0IGRvZXMgbm90IGV4aXN0IGluIGBwcm9wc2BcbiAqIEBwYXJhbSB7b2JqZWN0fSBkZWZhdWx0UHJvcHNcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wc1xuICogQHJldHVybnMge29iamVjdH0gcmVzb2x2ZWQgcHJvcHNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVzb2x2ZVByb3BzKGRlZmF1bHRQcm9wcywgcHJvcHMpIHtcbiAgY29uc3Qgb3V0cHV0ID0gX2V4dGVuZHMoe30sIHByb3BzKTtcbiAgT2JqZWN0LmtleXMoZGVmYXVsdFByb3BzKS5mb3JFYWNoKHByb3BOYW1lID0+IHtcbiAgICBpZiAocHJvcE5hbWUudG9TdHJpbmcoKS5tYXRjaCgvXihjb21wb25lbnRzfHNsb3RzKSQvKSkge1xuICAgICAgb3V0cHV0W3Byb3BOYW1lXSA9IF9leHRlbmRzKHt9LCBkZWZhdWx0UHJvcHNbcHJvcE5hbWVdLCBvdXRwdXRbcHJvcE5hbWVdKTtcbiAgICB9IGVsc2UgaWYgKHByb3BOYW1lLnRvU3RyaW5nKCkubWF0Y2goL14oY29tcG9uZW50c1Byb3BzfHNsb3RQcm9wcykkLykpIHtcbiAgICAgIGNvbnN0IGRlZmF1bHRTbG90UHJvcHMgPSBkZWZhdWx0UHJvcHNbcHJvcE5hbWVdIHx8IHt9O1xuICAgICAgY29uc3Qgc2xvdFByb3BzID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgb3V0cHV0W3Byb3BOYW1lXSA9IHt9O1xuICAgICAgaWYgKCFzbG90UHJvcHMgfHwgIU9iamVjdC5rZXlzKHNsb3RQcm9wcykpIHtcbiAgICAgICAgLy8gUmVkdWNlIHRoZSBpdGVyYXRpb24gaWYgdGhlIHNsb3QgcHJvcHMgaXMgZW1wdHlcbiAgICAgICAgb3V0cHV0W3Byb3BOYW1lXSA9IGRlZmF1bHRTbG90UHJvcHM7XG4gICAgICB9IGVsc2UgaWYgKCFkZWZhdWx0U2xvdFByb3BzIHx8ICFPYmplY3Qua2V5cyhkZWZhdWx0U2xvdFByb3BzKSkge1xuICAgICAgICAvLyBSZWR1Y2UgdGhlIGl0ZXJhdGlvbiBpZiB0aGUgZGVmYXVsdCBzbG90IHByb3BzIGlzIGVtcHR5XG4gICAgICAgIG91dHB1dFtwcm9wTmFtZV0gPSBzbG90UHJvcHM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXRwdXRbcHJvcE5hbWVdID0gX2V4dGVuZHMoe30sIHNsb3RQcm9wcyk7XG4gICAgICAgIE9iamVjdC5rZXlzKGRlZmF1bHRTbG90UHJvcHMpLmZvckVhY2goc2xvdFByb3BOYW1lID0+IHtcbiAgICAgICAgICBvdXRwdXRbcHJvcE5hbWVdW3Nsb3RQcm9wTmFtZV0gPSByZXNvbHZlUHJvcHMoZGVmYXVsdFNsb3RQcm9wc1tzbG90UHJvcE5hbWVdLCBzbG90UHJvcHNbc2xvdFByb3BOYW1lXSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAob3V0cHV0W3Byb3BOYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBvdXRwdXRbcHJvcE5hbWVdID0gZGVmYXVsdFByb3BzW3Byb3BOYW1lXTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gb3V0cHV0O1xufSIsICJpbXBvcnQgcmVzb2x2ZVByb3BzIGZyb20gJ0BtdWkvdXRpbHMvcmVzb2x2ZVByb3BzJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFRoZW1lUHJvcHMocGFyYW1zKSB7XG4gIGNvbnN0IHtcbiAgICB0aGVtZSxcbiAgICBuYW1lLFxuICAgIHByb3BzXG4gIH0gPSBwYXJhbXM7XG4gIGlmICghdGhlbWUgfHwgIXRoZW1lLmNvbXBvbmVudHMgfHwgIXRoZW1lLmNvbXBvbmVudHNbbmFtZV0gfHwgIXRoZW1lLmNvbXBvbmVudHNbbmFtZV0uZGVmYXVsdFByb3BzKSB7XG4gICAgcmV0dXJuIHByb3BzO1xuICB9XG4gIHJldHVybiByZXNvbHZlUHJvcHModGhlbWUuY29tcG9uZW50c1tuYW1lXS5kZWZhdWx0UHJvcHMsIHByb3BzKTtcbn0iLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgZ2V0VGhlbWVQcm9wcyBmcm9tICcuL2dldFRoZW1lUHJvcHMnO1xuaW1wb3J0IHVzZVRoZW1lIGZyb20gJy4uL3VzZVRoZW1lJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZVRoZW1lUHJvcHMoe1xuICBwcm9wcyxcbiAgbmFtZSxcbiAgZGVmYXVsdFRoZW1lLFxuICB0aGVtZUlkXG59KSB7XG4gIGxldCB0aGVtZSA9IHVzZVRoZW1lKGRlZmF1bHRUaGVtZSk7XG4gIGlmICh0aGVtZUlkKSB7XG4gICAgdGhlbWUgPSB0aGVtZVt0aGVtZUlkXSB8fCB0aGVtZTtcbiAgfVxuICBjb25zdCBtZXJnZWRQcm9wcyA9IGdldFRoZW1lUHJvcHMoe1xuICAgIHRoZW1lLFxuICAgIG5hbWUsXG4gICAgcHJvcHNcbiAgfSk7XG4gIHJldHVybiBtZXJnZWRQcm9wcztcbn0iLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbi8qKlxuICogQSB2ZXJzaW9uIG9mIGBSZWFjdC51c2VMYXlvdXRFZmZlY3RgIHRoYXQgZG9lcyBub3Qgc2hvdyBhIHdhcm5pbmcgd2hlbiBzZXJ2ZXItc2lkZSByZW5kZXJpbmcuXG4gKiBUaGlzIGlzIHVzZWZ1bCBmb3IgZWZmZWN0cyB0aGF0IGFyZSBvbmx5IG5lZWRlZCBmb3IgY2xpZW50LXNpZGUgcmVuZGVyaW5nIGJ1dCBub3QgZm9yIFNTUi5cbiAqXG4gKiBCZWZvcmUgeW91IHVzZSB0aGlzIGhvb2ssIG1ha2Ugc3VyZSB0byByZWFkIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2dhZWFyb24vZTdkOTdjZGYzOGEyOTA3OTI0ZWExMmU0ZWJkZjNjODVcbiAqIGFuZCBjb25maXJtIGl0IGRvZXNuJ3QgYXBwbHkgdG8geW91ciB1c2UtY2FzZS5cbiAqL1xuY29uc3QgdXNlRW5oYW5jZWRFZmZlY3QgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IFJlYWN0LnVzZUxheW91dEVmZmVjdCA6IFJlYWN0LnVzZUVmZmVjdDtcbmV4cG9ydCBkZWZhdWx0IHVzZUVuaGFuY2VkRWZmZWN0OyIsICIvKipcbiAqIFNhZmUgY2hhaW5lZCBmdW5jdGlvbi5cbiAqXG4gKiBXaWxsIG9ubHkgY3JlYXRlIGEgbmV3IGZ1bmN0aW9uIGlmIG5lZWRlZCxcbiAqIG90aGVyd2lzZSB3aWxsIHBhc3MgYmFjayBleGlzdGluZyBmdW5jdGlvbnMgb3IgbnVsbC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uKC4uLmZ1bmNzKSB7XG4gIHJldHVybiBmdW5jcy5yZWR1Y2UoKGFjYywgZnVuYykgPT4ge1xuICAgIGlmIChmdW5jID09IG51bGwpIHtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbiBjaGFpbmVkRnVuY3Rpb24oLi4uYXJncykge1xuICAgICAgYWNjLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9O1xuICB9LCAoKSA9PiB7fSk7XG59IiwgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzTXVpRWxlbWVudChlbGVtZW50LCBtdWlOYW1lcykge1xuICB2YXIgX211aU5hbWUsIF9lbGVtZW50JHR5cGU7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuaXNWYWxpZEVsZW1lbnQoZWxlbWVudCkgJiYgbXVpTmFtZXMuaW5kZXhPZiggLy8gRm9yIHNlcnZlciBjb21wb25lbnRzIGBtdWlOYW1lYCBpcyBhdmFpYWxibGUgaW4gZWxlbWVudC50eXBlLl9wYXlsb2FkLnZhbHVlLm11aU5hbWVcbiAgLy8gcmVsZXZhbnQgaW5mbyAtIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9ibG9iLzI4MDdkNzgxYTA4ZGI4ZTk4NzM2ODdmY2NjMjVjMGYxMmI0ZmIzZDQvcGFja2FnZXMvcmVhY3Qvc3JjL1JlYWN0TGF6eS5qcyNMNDVcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVyc2NvcmUtZGFuZ2xlXG4gIChfbXVpTmFtZSA9IGVsZW1lbnQudHlwZS5tdWlOYW1lKSAhPSBudWxsID8gX211aU5hbWUgOiAoX2VsZW1lbnQkdHlwZSA9IGVsZW1lbnQudHlwZSkgPT0gbnVsbCB8fCAoX2VsZW1lbnQkdHlwZSA9IF9lbGVtZW50JHR5cGUuX3BheWxvYWQpID09IG51bGwgfHwgKF9lbGVtZW50JHR5cGUgPSBfZWxlbWVudCR0eXBlLnZhbHVlKSA9PSBudWxsID8gdm9pZCAwIDogX2VsZW1lbnQkdHlwZS5tdWlOYW1lKSAhPT0gLTE7XG59IiwgIi8qKlxuICogVE9ETyB2NTogY29uc2lkZXIgbWFraW5nIGl0IHByaXZhdGVcbiAqXG4gKiBwYXNzZXMge3ZhbHVlfSB0byB7cmVmfVxuICpcbiAqIFdBUk5JTkc6IEJlIHN1cmUgdG8gb25seSBjYWxsIHRoaXMgaW5zaWRlIGEgY2FsbGJhY2sgdGhhdCBpcyBwYXNzZWQgYXMgYSByZWYuXG4gKiBPdGhlcndpc2UsIG1ha2Ugc3VyZSB0byBjbGVhbnVwIHRoZSBwcmV2aW91cyB7cmVmfSBpZiBpdCBjaGFuZ2VzLiBTZWVcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9tdWkvbWF0ZXJpYWwtdWkvaXNzdWVzLzEzNTM5XG4gKlxuICogVXNlZnVsIGlmIHlvdSB3YW50IHRvIGV4cG9zZSB0aGUgcmVmIG9mIGFuIGlubmVyIGNvbXBvbmVudCB0byB0aGUgcHVibGljIEFQSVxuICogd2hpbGUgc3RpbGwgdXNpbmcgaXQgaW5zaWRlIHRoZSBjb21wb25lbnQuXG4gKiBAcGFyYW0gcmVmIEEgcmVmIGNhbGxiYWNrIG9yIHJlZiBvYmplY3QuIElmIGFueXRoaW5nIGZhbHN5LCB0aGlzIGlzIGEgbm8tb3AuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNldFJlZihyZWYsIHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgcmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmVmKHZhbHVlKTtcbiAgfSBlbHNlIGlmIChyZWYpIHtcbiAgICByZWYuY3VycmVudCA9IHZhbHVlO1xuICB9XG59IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xubGV0IGdsb2JhbElkID0gMDtcbmZ1bmN0aW9uIHVzZUdsb2JhbElkKGlkT3ZlcnJpZGUpIHtcbiAgY29uc3QgW2RlZmF1bHRJZCwgc2V0RGVmYXVsdElkXSA9IFJlYWN0LnVzZVN0YXRlKGlkT3ZlcnJpZGUpO1xuICBjb25zdCBpZCA9IGlkT3ZlcnJpZGUgfHwgZGVmYXVsdElkO1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChkZWZhdWx0SWQgPT0gbnVsbCkge1xuICAgICAgLy8gRmFsbGJhY2sgdG8gdGhpcyBkZWZhdWx0IGlkIHdoZW4gcG9zc2libGUuXG4gICAgICAvLyBVc2UgdGhlIGluY3JlbWVudGluZyB2YWx1ZSBmb3IgY2xpZW50LXNpZGUgcmVuZGVyaW5nIG9ubHkuXG4gICAgICAvLyBXZSBjYW4ndCB1c2UgaXQgc2VydmVyLXNpZGUuXG4gICAgICAvLyBJZiB5b3Ugd2FudCB0byB1c2UgcmFuZG9tIHZhbHVlcyBwbGVhc2UgY29uc2lkZXIgdGhlIEJpcnRoZGF5IFByb2JsZW06IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0JpcnRoZGF5X3Byb2JsZW1cbiAgICAgIGdsb2JhbElkICs9IDE7XG4gICAgICBzZXREZWZhdWx0SWQoYG11aS0ke2dsb2JhbElkfWApO1xuICAgIH1cbiAgfSwgW2RlZmF1bHRJZF0pO1xuICByZXR1cm4gaWQ7XG59XG5cbi8vIGRvd25zdHJlYW0gYnVuZGxlcnMgbWF5IHJlbW92ZSB1bm5lY2Vzc2FyeSBjb25jYXRlbmF0aW9uLCBidXQgd29uJ3QgcmVtb3ZlIHRvU3RyaW5nIGNhbGwgLS0gV29ya2Fyb3VuZCBmb3IgaHR0cHM6Ly9naXRodWIuY29tL3dlYnBhY2svd2VicGFjay9pc3N1ZXMvMTQ4MTRcbmNvbnN0IG1heWJlUmVhY3RVc2VJZCA9IFJlYWN0Wyd1c2VJZCcudG9TdHJpbmcoKV07XG4vKipcbiAqXG4gKiBAZXhhbXBsZSA8ZGl2IGlkPXt1c2VJZCgpfSAvPlxuICogQHBhcmFtIGlkT3ZlcnJpZGVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZUlkKGlkT3ZlcnJpZGUpIHtcbiAgaWYgKG1heWJlUmVhY3RVc2VJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgcmVhY3RJZCA9IG1heWJlUmVhY3RVc2VJZCgpO1xuICAgIHJldHVybiBpZE92ZXJyaWRlICE9IG51bGwgPyBpZE92ZXJyaWRlIDogcmVhY3RJZDtcbiAgfVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvcnVsZXMtb2YtaG9va3MgLS0gYFJlYWN0LnVzZUlkYCBpcyBpbnZhcmlhbnQgYXQgcnVudGltZS5cbiAgcmV0dXJuIHVzZUdsb2JhbElkKGlkT3ZlcnJpZGUpO1xufSIsICIndXNlIGNsaWVudCc7XG5cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzLCByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHMgKi9cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZUNvbnRyb2xsZWQoe1xuICBjb250cm9sbGVkLFxuICBkZWZhdWx0OiBkZWZhdWx0UHJvcCxcbiAgbmFtZSxcbiAgc3RhdGUgPSAndmFsdWUnXG59KSB7XG4gIC8vIGlzQ29udHJvbGxlZCBpcyBpZ25vcmVkIGluIHRoZSBob29rIGRlcGVuZGVuY3kgbGlzdHMgYXMgaXQgc2hvdWxkIG5ldmVyIGNoYW5nZS5cbiAgY29uc3Qge1xuICAgIGN1cnJlbnQ6IGlzQ29udHJvbGxlZFxuICB9ID0gUmVhY3QudXNlUmVmKGNvbnRyb2xsZWQgIT09IHVuZGVmaW5lZCk7XG4gIGNvbnN0IFt2YWx1ZVN0YXRlLCBzZXRWYWx1ZV0gPSBSZWFjdC51c2VTdGF0ZShkZWZhdWx0UHJvcCk7XG4gIGNvbnN0IHZhbHVlID0gaXNDb250cm9sbGVkID8gY29udHJvbGxlZCA6IHZhbHVlU3RhdGU7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIGlmIChpc0NvbnRyb2xsZWQgIT09IChjb250cm9sbGVkICE9PSB1bmRlZmluZWQpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoW2BNVUk6IEEgY29tcG9uZW50IGlzIGNoYW5naW5nIHRoZSAke2lzQ29udHJvbGxlZCA/ICcnIDogJ3VuJ31jb250cm9sbGVkICR7c3RhdGV9IHN0YXRlIG9mICR7bmFtZX0gdG8gYmUgJHtpc0NvbnRyb2xsZWQgPyAndW4nIDogJyd9Y29udHJvbGxlZC5gLCAnRWxlbWVudHMgc2hvdWxkIG5vdCBzd2l0Y2ggZnJvbSB1bmNvbnRyb2xsZWQgdG8gY29udHJvbGxlZCAob3IgdmljZSB2ZXJzYSkuJywgYERlY2lkZSBiZXR3ZWVuIHVzaW5nIGEgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgJHtuYW1lfSBgICsgJ2VsZW1lbnQgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUgY29tcG9uZW50LicsIFwiVGhlIG5hdHVyZSBvZiB0aGUgc3RhdGUgaXMgZGV0ZXJtaW5lZCBkdXJpbmcgdGhlIGZpcnN0IHJlbmRlci4gSXQncyBjb25zaWRlcmVkIGNvbnRyb2xsZWQgaWYgdGhlIHZhbHVlIGlzIG5vdCBgdW5kZWZpbmVkYC5cIiwgJ01vcmUgaW5mbzogaHR0cHM6Ly9mYi5tZS9yZWFjdC1jb250cm9sbGVkLWNvbXBvbmVudHMnXS5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgfSwgW3N0YXRlLCBuYW1lLCBjb250cm9sbGVkXSk7XG4gICAgY29uc3Qge1xuICAgICAgY3VycmVudDogZGVmYXVsdFZhbHVlXG4gICAgfSA9IFJlYWN0LnVzZVJlZihkZWZhdWx0UHJvcCk7XG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIGlmICghaXNDb250cm9sbGVkICYmIGRlZmF1bHRWYWx1ZSAhPT0gZGVmYXVsdFByb3ApIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihbYE1VSTogQSBjb21wb25lbnQgaXMgY2hhbmdpbmcgdGhlIGRlZmF1bHQgJHtzdGF0ZX0gc3RhdGUgb2YgYW4gdW5jb250cm9sbGVkICR7bmFtZX0gYWZ0ZXIgYmVpbmcgaW5pdGlhbGl6ZWQuIGAgKyBgVG8gc3VwcHJlc3MgdGhpcyB3YXJuaW5nIG9wdCB0byB1c2UgYSBjb250cm9sbGVkICR7bmFtZX0uYF0uam9pbignXFxuJykpO1xuICAgICAgfVxuICAgIH0sIFtKU09OLnN0cmluZ2lmeShkZWZhdWx0UHJvcCldKTtcbiAgfVxuICBjb25zdCBzZXRWYWx1ZUlmVW5jb250cm9sbGVkID0gUmVhY3QudXNlQ2FsbGJhY2sobmV3VmFsdWUgPT4ge1xuICAgIGlmICghaXNDb250cm9sbGVkKSB7XG4gICAgICBzZXRWYWx1ZShuZXdWYWx1ZSk7XG4gICAgfVxuICB9LCBbXSk7XG4gIHJldHVybiBbdmFsdWUsIHNldFZhbHVlSWZVbmNvbnRyb2xsZWRdO1xufSIsICIndXNlIGNsaWVudCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB1c2VFbmhhbmNlZEVmZmVjdCBmcm9tICcuLi91c2VFbmhhbmNlZEVmZmVjdCc7XG5cbi8qKlxuICogSW5zcGlyZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xNDA5OSNpc3N1ZWNvbW1lbnQtNDQwMDEzODkyXG4gKiBTZWUgUkZDIGluIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdGpzL3JmY3MvcHVsbC8yMjBcbiAqL1xuXG5mdW5jdGlvbiB1c2VFdmVudENhbGxiYWNrKGZuKSB7XG4gIGNvbnN0IHJlZiA9IFJlYWN0LnVzZVJlZihmbik7XG4gIHVzZUVuaGFuY2VkRWZmZWN0KCgpID0+IHtcbiAgICByZWYuY3VycmVudCA9IGZuO1xuICB9KTtcbiAgcmV0dXJuIFJlYWN0LnVzZVJlZigoLi4uYXJncykgPT5cbiAgLy8gQHRzLWV4cGVjdC1lcnJvciBoaWRlIGB0aGlzYFxuICAoMCwgcmVmLmN1cnJlbnQpKC4uLmFyZ3MpKS5jdXJyZW50O1xufVxuZXhwb3J0IGRlZmF1bHQgdXNlRXZlbnRDYWxsYmFjazsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgc2V0UmVmIGZyb20gJy4uL3NldFJlZic7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VGb3JrUmVmKC4uLnJlZnMpIHtcbiAgLyoqXG4gICAqIFRoaXMgd2lsbCBjcmVhdGUgYSBuZXcgZnVuY3Rpb24gaWYgdGhlIHJlZnMgcGFzc2VkIHRvIHRoaXMgaG9vayBjaGFuZ2UgYW5kIGFyZSBhbGwgZGVmaW5lZC5cbiAgICogVGhpcyBtZWFucyByZWFjdCB3aWxsIGNhbGwgdGhlIG9sZCBmb3JrUmVmIHdpdGggYG51bGxgIGFuZCB0aGUgbmV3IGZvcmtSZWZcbiAgICogd2l0aCB0aGUgcmVmLiBDbGVhbnVwIG5hdHVyYWxseSBlbWVyZ2VzIGZyb20gdGhpcyBiZWhhdmlvci5cbiAgICovXG4gIHJldHVybiBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICBpZiAocmVmcy5ldmVyeShyZWYgPT4gcmVmID09IG51bGwpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGluc3RhbmNlID0+IHtcbiAgICAgIHJlZnMuZm9yRWFjaChyZWYgPT4ge1xuICAgICAgICBzZXRSZWYocmVmLCBpbnN0YW5jZSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgcmVmcyk7XG59IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuY29uc3QgVU5JTklUSUFMSVpFRCA9IHt9O1xuXG4vKipcbiAqIEEgUmVhY3QudXNlUmVmKCkgdGhhdCBpcyBpbml0aWFsaXplZCBsYXppbHkgd2l0aCBhIGZ1bmN0aW9uLiBOb3RlIHRoYXQgaXQgYWNjZXB0cyBhbiBvcHRpb25hbFxuICogaW5pdGlhbGl6YXRpb24gYXJndW1lbnQsIHNvIHRoZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBkb2Vzbid0IG5lZWQgdG8gYmUgYW4gaW5saW5lIGNsb3N1cmUuXG4gKlxuICogQHVzYWdlXG4gKiAgIGNvbnN0IHJlZiA9IHVzZUxhenlSZWYoc29ydENvbHVtbnMsIGNvbHVtbnMpXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZUxhenlSZWYoaW5pdCwgaW5pdEFyZykge1xuICBjb25zdCByZWYgPSBSZWFjdC51c2VSZWYoVU5JTklUSUFMSVpFRCk7XG4gIGlmIChyZWYuY3VycmVudCA9PT0gVU5JTklUSUFMSVpFRCkge1xuICAgIHJlZi5jdXJyZW50ID0gaW5pdChpbml0QXJnKTtcbiAgfVxuICByZXR1cm4gcmVmO1xufSIsICIndXNlIGNsaWVudCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmNvbnN0IEVNUFRZID0gW107XG5cbi8qKlxuICogQSBSZWFjdC51c2VFZmZlY3QgZXF1aXZhbGVudCB0aGF0IHJ1bnMgb25jZSwgd2hlbiB0aGUgY29tcG9uZW50IGlzIG1vdW50ZWQuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZU9uTW91bnQoZm4pIHtcbiAgLyogZXNsaW50LWRpc2FibGUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzICovXG4gIFJlYWN0LnVzZUVmZmVjdChmbiwgRU1QVFkpO1xuICAvKiBlc2xpbnQtZW5hYmxlIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwcyAqL1xufSIsICIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB1c2VMYXp5UmVmIGZyb20gJy4uL3VzZUxhenlSZWYvdXNlTGF6eVJlZic7XG5pbXBvcnQgdXNlT25Nb3VudCBmcm9tICcuLi91c2VPbk1vdW50L3VzZU9uTW91bnQnO1xuZXhwb3J0IGNsYXNzIFRpbWVvdXQge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmN1cnJlbnRJZCA9IG51bGw7XG4gICAgdGhpcy5jbGVhciA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLmN1cnJlbnRJZCAhPT0gbnVsbCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5jdXJyZW50SWQpO1xuICAgICAgICB0aGlzLmN1cnJlbnRJZCA9IG51bGw7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLmRpc3Bvc2VFZmZlY3QgPSAoKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5jbGVhcjtcbiAgICB9O1xuICB9XG4gIHN0YXRpYyBjcmVhdGUoKSB7XG4gICAgcmV0dXJuIG5ldyBUaW1lb3V0KCk7XG4gIH1cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIGBmbmAgYWZ0ZXIgYGRlbGF5YCwgY2xlYXJpbmcgYW55IHByZXZpb3VzbHkgc2NoZWR1bGVkIGNhbGwuXG4gICAqL1xuICBzdGFydChkZWxheSwgZm4pIHtcbiAgICB0aGlzLmNsZWFyKCk7XG4gICAgdGhpcy5jdXJyZW50SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuY3VycmVudElkID0gbnVsbDtcbiAgICAgIGZuKCk7XG4gICAgfSwgZGVsYXkpO1xuICB9XG59XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VUaW1lb3V0KCkge1xuICBjb25zdCB0aW1lb3V0ID0gdXNlTGF6eVJlZihUaW1lb3V0LmNyZWF0ZSkuY3VycmVudDtcbiAgdXNlT25Nb3VudCh0aW1lb3V0LmRpc3Bvc2VFZmZlY3QpO1xuICByZXR1cm4gdGltZW91dDtcbn0iLCAiJ3VzZSBjbGllbnQnO1xuXG4vLyBiYXNlZCBvbiBodHRwczovL2dpdGh1Yi5jb20vV0lDRy9mb2N1cy12aXNpYmxlL2Jsb2IvdjQuMS41L3NyYy9mb2N1cy12aXNpYmxlLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBUaW1lb3V0IH0gZnJvbSAnLi4vdXNlVGltZW91dC91c2VUaW1lb3V0JztcbmxldCBoYWRLZXlib2FyZEV2ZW50ID0gdHJ1ZTtcbmxldCBoYWRGb2N1c1Zpc2libGVSZWNlbnRseSA9IGZhbHNlO1xuY29uc3QgaGFkRm9jdXNWaXNpYmxlUmVjZW50bHlUaW1lb3V0ID0gbmV3IFRpbWVvdXQoKTtcbmNvbnN0IGlucHV0VHlwZXNXaGl0ZWxpc3QgPSB7XG4gIHRleHQ6IHRydWUsXG4gIHNlYXJjaDogdHJ1ZSxcbiAgdXJsOiB0cnVlLFxuICB0ZWw6IHRydWUsXG4gIGVtYWlsOiB0cnVlLFxuICBwYXNzd29yZDogdHJ1ZSxcbiAgbnVtYmVyOiB0cnVlLFxuICBkYXRlOiB0cnVlLFxuICBtb250aDogdHJ1ZSxcbiAgd2VlazogdHJ1ZSxcbiAgdGltZTogdHJ1ZSxcbiAgZGF0ZXRpbWU6IHRydWUsXG4gICdkYXRldGltZS1sb2NhbCc6IHRydWVcbn07XG5cbi8qKlxuICogQ29tcHV0ZXMgd2hldGhlciB0aGUgZ2l2ZW4gZWxlbWVudCBzaG91bGQgYXV0b21hdGljYWxseSB0cmlnZ2VyIHRoZVxuICogYGZvY3VzLXZpc2libGVgIGNsYXNzIGJlaW5nIGFkZGVkLCBpLmUuIHdoZXRoZXIgaXQgc2hvdWxkIGFsd2F5cyBtYXRjaFxuICogYDpmb2N1cy12aXNpYmxlYCB3aGVuIGZvY3VzZWQuXG4gKiBAcGFyYW0ge0VsZW1lbnR9IG5vZGVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBmb2N1c1RyaWdnZXJzS2V5Ym9hcmRNb2RhbGl0eShub2RlKSB7XG4gIGNvbnN0IHtcbiAgICB0eXBlLFxuICAgIHRhZ05hbWVcbiAgfSA9IG5vZGU7XG4gIGlmICh0YWdOYW1lID09PSAnSU5QVVQnICYmIGlucHV0VHlwZXNXaGl0ZWxpc3RbdHlwZV0gJiYgIW5vZGUucmVhZE9ubHkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAodGFnTmFtZSA9PT0gJ1RFWFRBUkVBJyAmJiAhbm9kZS5yZWFkT25seSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChub2RlLmlzQ29udGVudEVkaXRhYmxlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIEtlZXAgdHJhY2sgb2Ygb3VyIGtleWJvYXJkIG1vZGFsaXR5IHN0YXRlIHdpdGggYGhhZEtleWJvYXJkRXZlbnRgLlxuICogSWYgdGhlIG1vc3QgcmVjZW50IHVzZXIgaW50ZXJhY3Rpb24gd2FzIHZpYSB0aGUga2V5Ym9hcmQ7XG4gKiBhbmQgdGhlIGtleSBwcmVzcyBkaWQgbm90IGluY2x1ZGUgYSBtZXRhLCBhbHQvb3B0aW9uLCBvciBjb250cm9sIGtleTtcbiAqIHRoZW4gdGhlIG1vZGFsaXR5IGlzIGtleWJvYXJkLiBPdGhlcndpc2UsIHRoZSBtb2RhbGl0eSBpcyBub3Qga2V5Ym9hcmQuXG4gKiBAcGFyYW0ge0tleWJvYXJkRXZlbnR9IGV2ZW50XG4gKi9cbmZ1bmN0aW9uIGhhbmRsZUtleURvd24oZXZlbnQpIHtcbiAgaWYgKGV2ZW50Lm1ldGFLZXkgfHwgZXZlbnQuYWx0S2V5IHx8IGV2ZW50LmN0cmxLZXkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaGFkS2V5Ym9hcmRFdmVudCA9IHRydWU7XG59XG5cbi8qKlxuICogSWYgYXQgYW55IHBvaW50IGEgdXNlciBjbGlja3Mgd2l0aCBhIHBvaW50aW5nIGRldmljZSwgZW5zdXJlIHRoYXQgd2UgY2hhbmdlXG4gKiB0aGUgbW9kYWxpdHkgYXdheSBmcm9tIGtleWJvYXJkLlxuICogVGhpcyBhdm9pZHMgdGhlIHNpdHVhdGlvbiB3aGVyZSBhIHVzZXIgcHJlc3NlcyBhIGtleSBvbiBhbiBhbHJlYWR5IGZvY3VzZWRcbiAqIGVsZW1lbnQsIGFuZCB0aGVuIGNsaWNrcyBvbiBhIGRpZmZlcmVudCBlbGVtZW50LCBmb2N1c2luZyBpdCB3aXRoIGFcbiAqIHBvaW50aW5nIGRldmljZSwgd2hpbGUgd2Ugc3RpbGwgdGhpbmsgd2UncmUgaW4ga2V5Ym9hcmQgbW9kYWxpdHkuXG4gKi9cbmZ1bmN0aW9uIGhhbmRsZVBvaW50ZXJEb3duKCkge1xuICBoYWRLZXlib2FyZEV2ZW50ID0gZmFsc2U7XG59XG5mdW5jdGlvbiBoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlKCkge1xuICBpZiAodGhpcy52aXNpYmlsaXR5U3RhdGUgPT09ICdoaWRkZW4nKSB7XG4gICAgLy8gSWYgdGhlIHRhYiBiZWNvbWVzIGFjdGl2ZSBhZ2FpbiwgdGhlIGJyb3dzZXIgd2lsbCBoYW5kbGUgY2FsbGluZyBmb2N1c1xuICAgIC8vIG9uIHRoZSBlbGVtZW50IChTYWZhcmkgYWN0dWFsbHkgY2FsbHMgaXQgdHdpY2UpLlxuICAgIC8vIElmIHRoaXMgdGFiIGNoYW5nZSBjYXVzZWQgYSBibHVyIG9uIGFuIGVsZW1lbnQgd2l0aCBmb2N1cy12aXNpYmxlLFxuICAgIC8vIHJlLWFwcGx5IHRoZSBjbGFzcyB3aGVuIHRoZSB1c2VyIHN3aXRjaGVzIGJhY2sgdG8gdGhlIHRhYi5cbiAgICBpZiAoaGFkRm9jdXNWaXNpYmxlUmVjZW50bHkpIHtcbiAgICAgIGhhZEtleWJvYXJkRXZlbnQgPSB0cnVlO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gcHJlcGFyZShkb2MpIHtcbiAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBoYW5kbGVLZXlEb3duLCB0cnVlKTtcbiAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGhhbmRsZVBvaW50ZXJEb3duLCB0cnVlKTtcbiAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgaGFuZGxlUG9pbnRlckRvd24sIHRydWUpO1xuICBkb2MuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIGhhbmRsZVBvaW50ZXJEb3duLCB0cnVlKTtcbiAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCBoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlLCB0cnVlKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0ZWFyZG93bihkb2MpIHtcbiAgZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBoYW5kbGVLZXlEb3duLCB0cnVlKTtcbiAgZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGhhbmRsZVBvaW50ZXJEb3duLCB0cnVlKTtcbiAgZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgaGFuZGxlUG9pbnRlckRvd24sIHRydWUpO1xuICBkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIGhhbmRsZVBvaW50ZXJEb3duLCB0cnVlKTtcbiAgZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCBoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlLCB0cnVlKTtcbn1cbmZ1bmN0aW9uIGlzRm9jdXNWaXNpYmxlKGV2ZW50KSB7XG4gIGNvbnN0IHtcbiAgICB0YXJnZXRcbiAgfSA9IGV2ZW50O1xuICB0cnkge1xuICAgIHJldHVybiB0YXJnZXQubWF0Y2hlcygnOmZvY3VzLXZpc2libGUnKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAvLyBCcm93c2VycyBub3QgaW1wbGVtZW50aW5nIDpmb2N1cy12aXNpYmxlIHdpbGwgdGhyb3cgYSBTeW50YXhFcnJvci5cbiAgICAvLyBXZSB1c2Ugb3VyIG93biBoZXVyaXN0aWMgZm9yIHRob3NlIGJyb3dzZXJzLlxuICAgIC8vIFJldGhyb3cgbWlnaHQgYmUgYmV0dGVyIGlmIGl0J3Mgbm90IHRoZSBleHBlY3RlZCBlcnJvciBidXQgZG8gd2UgcmVhbGx5XG4gICAgLy8gd2FudCB0byBjcmFzaCBpZiBmb2N1cy12aXNpYmxlIG1hbGZ1bmN0aW9uZWQ/XG4gIH1cblxuICAvLyBObyBuZWVkIGZvciB2YWxpZEZvY3VzVGFyZ2V0IGNoZWNrLiBUaGUgdXNlciBkb2VzIHRoYXQgYnkgYXR0YWNoaW5nIGl0IHRvXG4gIC8vIGZvY3VzYWJsZSBldmVudHMgb25seS5cbiAgcmV0dXJuIGhhZEtleWJvYXJkRXZlbnQgfHwgZm9jdXNUcmlnZ2Vyc0tleWJvYXJkTW9kYWxpdHkodGFyZ2V0KTtcbn1cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZUlzRm9jdXNWaXNpYmxlKCkge1xuICBjb25zdCByZWYgPSBSZWFjdC51c2VDYWxsYmFjayhub2RlID0+IHtcbiAgICBpZiAobm9kZSAhPSBudWxsKSB7XG4gICAgICBwcmVwYXJlKG5vZGUub3duZXJEb2N1bWVudCk7XG4gICAgfVxuICB9LCBbXSk7XG4gIGNvbnN0IGlzRm9jdXNWaXNpYmxlUmVmID0gUmVhY3QudXNlUmVmKGZhbHNlKTtcblxuICAvKipcbiAgICogU2hvdWxkIGJlIGNhbGxlZCBpZiBhIGJsdXIgZXZlbnQgaXMgZmlyZWRcbiAgICovXG4gIGZ1bmN0aW9uIGhhbmRsZUJsdXJWaXNpYmxlKCkge1xuICAgIC8vIGNoZWNraW5nIGFnYWluc3QgcG90ZW50aWFsIHN0YXRlIHZhcmlhYmxlIGRvZXMgbm90IHN1ZmZpY2UgaWYgd2UgZm9jdXMgYW5kIGJsdXIgc3luY2hyb25vdXNseS5cbiAgICAvLyBSZWFjdCB3b3VsZG4ndCBoYXZlIHRpbWUgdG8gdHJpZ2dlciBhIHJlLXJlbmRlciBzbyBgZm9jdXNWaXNpYmxlYCB3b3VsZCBiZSBzdGFsZS5cbiAgICAvLyBJZGVhbGx5IHdlIHdvdWxkIGFkanVzdCBgaXNGb2N1c1Zpc2libGUoZXZlbnQpYCB0byBsb29rIGF0IGByZWxhdGVkVGFyZ2V0YCBmb3IgYmx1ciBldmVudHMuXG4gICAgLy8gVGhpcyBkb2Vzbid0IHdvcmsgaW4gSUUxMSBkdWUgdG8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8zNzUxXG4gICAgLy8gVE9ETzogY2hlY2sgYWdhaW4gaWYgUmVhY3QgcmVsZWFzZXMgdGhlaXIgaW50ZXJuYWwgY2hhbmdlcyB0byBmb2N1cyBldmVudCBoYW5kbGluZyAoaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L3B1bGwvMTkxODYpLlxuICAgIGlmIChpc0ZvY3VzVmlzaWJsZVJlZi5jdXJyZW50KSB7XG4gICAgICAvLyBUbyBkZXRlY3QgYSB0YWIvd2luZG93IHN3aXRjaCwgd2UgbG9vayBmb3IgYSBibHVyIGV2ZW50IGZvbGxvd2VkXG4gICAgICAvLyByYXBpZGx5IGJ5IGEgdmlzaWJpbGl0eSBjaGFuZ2UuXG4gICAgICAvLyBJZiB3ZSBkb24ndCBzZWUgYSB2aXNpYmlsaXR5IGNoYW5nZSB3aXRoaW4gMTAwbXMsIGl0J3MgcHJvYmFibHkgYVxuICAgICAgLy8gcmVndWxhciBmb2N1cyBjaGFuZ2UuXG4gICAgICBoYWRGb2N1c1Zpc2libGVSZWNlbnRseSA9IHRydWU7XG4gICAgICBoYWRGb2N1c1Zpc2libGVSZWNlbnRseVRpbWVvdXQuc3RhcnQoMTAwLCAoKSA9PiB7XG4gICAgICAgIGhhZEZvY3VzVmlzaWJsZVJlY2VudGx5ID0gZmFsc2U7XG4gICAgICB9KTtcbiAgICAgIGlzRm9jdXNWaXNpYmxlUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogU2hvdWxkIGJlIGNhbGxlZCBpZiBhIGJsdXIgZXZlbnQgaXMgZmlyZWRcbiAgICovXG4gIGZ1bmN0aW9uIGhhbmRsZUZvY3VzVmlzaWJsZShldmVudCkge1xuICAgIGlmIChpc0ZvY3VzVmlzaWJsZShldmVudCkpIHtcbiAgICAgIGlzRm9jdXNWaXNpYmxlUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGlzRm9jdXNWaXNpYmxlUmVmLFxuICAgIG9uRm9jdXM6IGhhbmRsZUZvY3VzVmlzaWJsZSxcbiAgICBvbkJsdXI6IGhhbmRsZUJsdXJWaXNpYmxlLFxuICAgIHJlZlxuICB9O1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0VXRpbGl0eUNsYXNzLCBjbGFzc2VzID0gdW5kZWZpbmVkKSB7XG4gIGNvbnN0IG91dHB1dCA9IHt9O1xuICBPYmplY3Qua2V5cyhzbG90cykuZm9yRWFjaChcbiAgLy8gYE9iamVjdC5rZXlzKHNsb3RzKWAgY2FuJ3QgYmUgd2lkZXIgdGhhbiBgVGAgYmVjYXVzZSB3ZSBpbmZlciBgVGAgZnJvbSBgc2xvdHNgLlxuICAvLyBAdHMtZXhwZWN0LWVycm9yIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvVHlwZVNjcmlwdC9wdWxsLzEyMjUzI2lzc3VlY29tbWVudC0yNjMxMzIyMDhcbiAgc2xvdCA9PiB7XG4gICAgb3V0cHV0W3Nsb3RdID0gc2xvdHNbc2xvdF0ucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAgICAgaWYgKGtleSkge1xuICAgICAgICBjb25zdCB1dGlsaXR5Q2xhc3MgPSBnZXRVdGlsaXR5Q2xhc3Moa2V5KTtcbiAgICAgICAgaWYgKHV0aWxpdHlDbGFzcyAhPT0gJycpIHtcbiAgICAgICAgICBhY2MucHVzaCh1dGlsaXR5Q2xhc3MpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjbGFzc2VzICYmIGNsYXNzZXNba2V5XSkge1xuICAgICAgICAgIGFjYy5wdXNoKGNsYXNzZXNba2V5XSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgW10pLmpvaW4oJyAnKTtcbiAgfSk7XG4gIHJldHVybiBvdXRwdXQ7XG59IiwgImltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjb21wb25lbnRcIiwgXCJkaXJlY3Rpb25cIiwgXCJzcGFjaW5nXCIsIFwiZGl2aWRlclwiLCBcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwidXNlRmxleEdhcFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCBkZWVwbWVyZ2UgZnJvbSAnQG11aS91dGlscy9kZWVwbWVyZ2UnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHN5c3RlbVN0eWxlZCBmcm9tICcuLi9zdHlsZWQnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHNTeXN0ZW0gZnJvbSAnLi4vdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgeyBleHRlbmRTeFByb3AgfSBmcm9tICcuLi9zdHlsZUZ1bmN0aW9uU3gnO1xuaW1wb3J0IGNyZWF0ZVRoZW1lIGZyb20gJy4uL2NyZWF0ZVRoZW1lJztcbmltcG9ydCB7IGhhbmRsZUJyZWFrcG9pbnRzLCBtZXJnZUJyZWFrcG9pbnRzSW5PcmRlciwgcmVzb2x2ZUJyZWFrcG9pbnRWYWx1ZXMgfSBmcm9tICcuLi9icmVha3BvaW50cyc7XG5pbXBvcnQgeyBjcmVhdGVVbmFyeVNwYWNpbmcsIGdldFZhbHVlIH0gZnJvbSAnLi4vc3BhY2luZyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgZGVmYXVsdFRoZW1lID0gY3JlYXRlVGhlbWUoKTtcbi8vIHdpZGVuaW5nIFRoZW1lIHRvIGFueSBzbyB0aGF0IHRoZSBjb25zdW1lciBjYW4gb3duIHRoZSB0aGVtZSBzdHJ1Y3R1cmUuXG5jb25zdCBkZWZhdWx0Q3JlYXRlU3R5bGVkQ29tcG9uZW50ID0gc3lzdGVtU3R5bGVkKCdkaXYnLCB7XG4gIG5hbWU6ICdNdWlTdGFjaycsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMucm9vdFxufSk7XG5mdW5jdGlvbiB1c2VUaGVtZVByb3BzRGVmYXVsdChwcm9wcykge1xuICByZXR1cm4gdXNlVGhlbWVQcm9wc1N5c3RlbSh7XG4gICAgcHJvcHMsXG4gICAgbmFtZTogJ011aVN0YWNrJyxcbiAgICBkZWZhdWx0VGhlbWVcbiAgfSk7XG59XG5cbi8qKlxuICogUmV0dXJuIGFuIGFycmF5IHdpdGggdGhlIHNlcGFyYXRvciBSZWFjdCBlbGVtZW50IGludGVyc3BlcnNlZCBiZXR3ZWVuXG4gKiBlYWNoIFJlYWN0IG5vZGUgb2YgdGhlIGlucHV0IGNoaWxkcmVuLlxuICpcbiAqID4gam9pbkNoaWxkcmVuKFsxLDIsM10sIDApXG4gKiBbMSwwLDIsMCwzXVxuICovXG5mdW5jdGlvbiBqb2luQ2hpbGRyZW4oY2hpbGRyZW4sIHNlcGFyYXRvcikge1xuICBjb25zdCBjaGlsZHJlbkFycmF5ID0gUmVhY3QuQ2hpbGRyZW4udG9BcnJheShjaGlsZHJlbikuZmlsdGVyKEJvb2xlYW4pO1xuICByZXR1cm4gY2hpbGRyZW5BcnJheS5yZWR1Y2UoKG91dHB1dCwgY2hpbGQsIGluZGV4KSA9PiB7XG4gICAgb3V0cHV0LnB1c2goY2hpbGQpO1xuICAgIGlmIChpbmRleCA8IGNoaWxkcmVuQXJyYXkubGVuZ3RoIC0gMSkge1xuICAgICAgb3V0cHV0LnB1c2goIC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQoc2VwYXJhdG9yLCB7XG4gICAgICAgIGtleTogYHNlcGFyYXRvci0ke2luZGV4fWBcbiAgICAgIH0pKTtcbiAgICB9XG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfSwgW10pO1xufVxuY29uc3QgZ2V0U2lkZUZyb21EaXJlY3Rpb24gPSBkaXJlY3Rpb24gPT4ge1xuICByZXR1cm4ge1xuICAgIHJvdzogJ0xlZnQnLFxuICAgICdyb3ctcmV2ZXJzZSc6ICdSaWdodCcsXG4gICAgY29sdW1uOiAnVG9wJyxcbiAgICAnY29sdW1uLXJldmVyc2UnOiAnQm90dG9tJ1xuICB9W2RpcmVjdGlvbl07XG59O1xuZXhwb3J0IGNvbnN0IHN0eWxlID0gKHtcbiAgb3duZXJTdGF0ZSxcbiAgdGhlbWVcbn0pID0+IHtcbiAgbGV0IHN0eWxlcyA9IF9leHRlbmRzKHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbidcbiAgfSwgaGFuZGxlQnJlYWtwb2ludHMoe1xuICAgIHRoZW1lXG4gIH0sIHJlc29sdmVCcmVha3BvaW50VmFsdWVzKHtcbiAgICB2YWx1ZXM6IG93bmVyU3RhdGUuZGlyZWN0aW9uLFxuICAgIGJyZWFrcG9pbnRzOiB0aGVtZS5icmVha3BvaW50cy52YWx1ZXNcbiAgfSksIHByb3BWYWx1ZSA9PiAoe1xuICAgIGZsZXhEaXJlY3Rpb246IHByb3BWYWx1ZVxuICB9KSkpO1xuICBpZiAob3duZXJTdGF0ZS5zcGFjaW5nKSB7XG4gICAgY29uc3QgdHJhbnNmb3JtZXIgPSBjcmVhdGVVbmFyeVNwYWNpbmcodGhlbWUpO1xuICAgIGNvbnN0IGJhc2UgPSBPYmplY3Qua2V5cyh0aGVtZS5icmVha3BvaW50cy52YWx1ZXMpLnJlZHVjZSgoYWNjLCBicmVha3BvaW50KSA9PiB7XG4gICAgICBpZiAodHlwZW9mIG93bmVyU3RhdGUuc3BhY2luZyA9PT0gJ29iamVjdCcgJiYgb3duZXJTdGF0ZS5zcGFjaW5nW2JyZWFrcG9pbnRdICE9IG51bGwgfHwgdHlwZW9mIG93bmVyU3RhdGUuZGlyZWN0aW9uID09PSAnb2JqZWN0JyAmJiBvd25lclN0YXRlLmRpcmVjdGlvblticmVha3BvaW50XSAhPSBudWxsKSB7XG4gICAgICAgIGFjY1ticmVha3BvaW50XSA9IHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KTtcbiAgICBjb25zdCBkaXJlY3Rpb25WYWx1ZXMgPSByZXNvbHZlQnJlYWtwb2ludFZhbHVlcyh7XG4gICAgICB2YWx1ZXM6IG93bmVyU3RhdGUuZGlyZWN0aW9uLFxuICAgICAgYmFzZVxuICAgIH0pO1xuICAgIGNvbnN0IHNwYWNpbmdWYWx1ZXMgPSByZXNvbHZlQnJlYWtwb2ludFZhbHVlcyh7XG4gICAgICB2YWx1ZXM6IG93bmVyU3RhdGUuc3BhY2luZyxcbiAgICAgIGJhc2VcbiAgICB9KTtcbiAgICBpZiAodHlwZW9mIGRpcmVjdGlvblZhbHVlcyA9PT0gJ29iamVjdCcpIHtcbiAgICAgIE9iamVjdC5rZXlzKGRpcmVjdGlvblZhbHVlcykuZm9yRWFjaCgoYnJlYWtwb2ludCwgaW5kZXgsIGJyZWFrcG9pbnRzKSA9PiB7XG4gICAgICAgIGNvbnN0IGRpcmVjdGlvblZhbHVlID0gZGlyZWN0aW9uVmFsdWVzW2JyZWFrcG9pbnRdO1xuICAgICAgICBpZiAoIWRpcmVjdGlvblZhbHVlKSB7XG4gICAgICAgICAgY29uc3QgcHJldmlvdXNEaXJlY3Rpb25WYWx1ZSA9IGluZGV4ID4gMCA/IGRpcmVjdGlvblZhbHVlc1ticmVha3BvaW50c1tpbmRleCAtIDFdXSA6ICdjb2x1bW4nO1xuICAgICAgICAgIGRpcmVjdGlvblZhbHVlc1ticmVha3BvaW50XSA9IHByZXZpb3VzRGlyZWN0aW9uVmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCBzdHlsZUZyb21Qcm9wVmFsdWUgPSAocHJvcFZhbHVlLCBicmVha3BvaW50KSA9PiB7XG4gICAgICBpZiAob3duZXJTdGF0ZS51c2VGbGV4R2FwKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZ2FwOiBnZXRWYWx1ZSh0cmFuc2Zvcm1lciwgcHJvcFZhbHVlKVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLy8gVGhlIHVzZUZsZXhHYXA9e2ZhbHNlfSBpbXBsZW1lbnQgcmVsaWVzIG9uIGVhY2ggY2hpbGQgdG8gZ2l2ZSB1cCBjb250cm9sIG9mIHRoZSBtYXJnaW4uXG4gICAgICAgIC8vIFdlIG5lZWQgdG8gcmVzZXQgdGhlIG1hcmdpbiB0byBhdm9pZCBkb3VibGUgc3BhY2luZy5cbiAgICAgICAgJyYgPiA6bm90KHN0eWxlKTpub3Qoc3R5bGUpJzoge1xuICAgICAgICAgIG1hcmdpbjogMFxuICAgICAgICB9LFxuICAgICAgICAnJiA+IDpub3Qoc3R5bGUpIH4gOm5vdChzdHlsZSknOiB7XG4gICAgICAgICAgW2BtYXJnaW4ke2dldFNpZGVGcm9tRGlyZWN0aW9uKGJyZWFrcG9pbnQgPyBkaXJlY3Rpb25WYWx1ZXNbYnJlYWtwb2ludF0gOiBvd25lclN0YXRlLmRpcmVjdGlvbil9YF06IGdldFZhbHVlKHRyYW5zZm9ybWVyLCBwcm9wVmFsdWUpXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfTtcbiAgICBzdHlsZXMgPSBkZWVwbWVyZ2Uoc3R5bGVzLCBoYW5kbGVCcmVha3BvaW50cyh7XG4gICAgICB0aGVtZVxuICAgIH0sIHNwYWNpbmdWYWx1ZXMsIHN0eWxlRnJvbVByb3BWYWx1ZSkpO1xuICB9XG4gIHN0eWxlcyA9IG1lcmdlQnJlYWtwb2ludHNJbk9yZGVyKHRoZW1lLmJyZWFrcG9pbnRzLCBzdHlsZXMpO1xuICByZXR1cm4gc3R5bGVzO1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVN0YWNrKG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgLy8gVGhpcyB3aWxsIGFsbG93IGFkZGluZyBjdXN0b20gc3R5bGVkIGZuIChmb3IgZXhhbXBsZSBmb3IgY3VzdG9tIHN4IHN0eWxlIGZ1bmN0aW9uKVxuICAgIGNyZWF0ZVN0eWxlZENvbXBvbmVudCA9IGRlZmF1bHRDcmVhdGVTdHlsZWRDb21wb25lbnQsXG4gICAgdXNlVGhlbWVQcm9wcyA9IHVzZVRoZW1lUHJvcHNEZWZhdWx0LFxuICAgIGNvbXBvbmVudE5hbWUgPSAnTXVpU3RhY2snXG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9ICgpID0+IHtcbiAgICBjb25zdCBzbG90cyA9IHtcbiAgICAgIHJvb3Q6IFsncm9vdCddXG4gICAgfTtcbiAgICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIHNsb3QgPT4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoY29tcG9uZW50TmFtZSwgc2xvdCksIHt9KTtcbiAgfTtcbiAgY29uc3QgU3RhY2tSb290ID0gY3JlYXRlU3R5bGVkQ29tcG9uZW50KHN0eWxlKTtcbiAgY29uc3QgU3RhY2sgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBHcmlkKGluUHJvcHMsIHJlZikge1xuICAgIGNvbnN0IHRoZW1lUHJvcHMgPSB1c2VUaGVtZVByb3BzKGluUHJvcHMpO1xuICAgIGNvbnN0IHByb3BzID0gZXh0ZW5kU3hQcm9wKHRoZW1lUHJvcHMpOyAvLyBgY29sb3JgIHR5cGUgY29uZmxpY3RzIHdpdGggaHRtbCBjb2xvciBhdHRyaWJ1dGUuXG4gICAgY29uc3Qge1xuICAgICAgICBjb21wb25lbnQgPSAnZGl2JyxcbiAgICAgICAgZGlyZWN0aW9uID0gJ2NvbHVtbicsXG4gICAgICAgIHNwYWNpbmcgPSAwLFxuICAgICAgICBkaXZpZGVyLFxuICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICB1c2VGbGV4R2FwID0gZmFsc2VcbiAgICAgIH0gPSBwcm9wcyxcbiAgICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gICAgY29uc3Qgb3duZXJTdGF0ZSA9IHtcbiAgICAgIGRpcmVjdGlvbixcbiAgICAgIHNwYWNpbmcsXG4gICAgICB1c2VGbGV4R2FwXG4gICAgfTtcbiAgICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMoKTtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL19qc3goU3RhY2tSb290LCBfZXh0ZW5kcyh7XG4gICAgICBhczogY29tcG9uZW50LFxuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICAgIHJlZjogcmVmLFxuICAgICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKVxuICAgIH0sIG90aGVyLCB7XG4gICAgICBjaGlsZHJlbjogZGl2aWRlciA/IGpvaW5DaGlsZHJlbihjaGlsZHJlbiwgZGl2aWRlcikgOiBjaGlsZHJlblxuICAgIH0pKTtcbiAgfSk7XG4gIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFN0YWNrLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAgIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgICBkaXJlY3Rpb246IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2NvbHVtbi1yZXZlcnNlJywgJ2NvbHVtbicsICdyb3ctcmV2ZXJzZScsICdyb3cnXSksIFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZihbJ2NvbHVtbi1yZXZlcnNlJywgJ2NvbHVtbicsICdyb3ctcmV2ZXJzZScsICdyb3cnXSkpLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gICAgZGl2aWRlcjogUHJvcFR5cGVzLm5vZGUsXG4gICAgc3BhY2luZzogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pKSwgUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAgIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSlcbiAgfSA6IHZvaWQgMDtcbiAgcmV0dXJuIFN0YWNrO1xufSIsICJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UgZnJvbSBcIkBtdWkvdXRpbHMvZm9ybWF0TXVpRXJyb3JNZXNzYWdlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJicmVha3BvaW50c1wiLCBcIm1peGluc1wiLCBcInNwYWNpbmdcIiwgXCJwYWxldHRlXCIsIFwidHJhbnNpdGlvbnNcIiwgXCJ0eXBvZ3JhcGh5XCIsIFwic2hhcGVcIl07XG5pbXBvcnQgZGVlcG1lcmdlIGZyb20gJ0BtdWkvdXRpbHMvZGVlcG1lcmdlJztcbmltcG9ydCBzdHlsZUZ1bmN0aW9uU3gsIHsgdW5zdGFibGVfZGVmYXVsdFN4Q29uZmlnIGFzIGRlZmF1bHRTeENvbmZpZyB9IGZyb20gJ0BtdWkvc3lzdGVtL3N0eWxlRnVuY3Rpb25TeCc7XG5pbXBvcnQgc3lzdGVtQ3JlYXRlVGhlbWUgZnJvbSAnQG11aS9zeXN0ZW0vY3JlYXRlVGhlbWUnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuaW1wb3J0IGNyZWF0ZU1peGlucyBmcm9tICcuL2NyZWF0ZU1peGlucyc7XG5pbXBvcnQgY3JlYXRlUGFsZXR0ZSBmcm9tICcuL2NyZWF0ZVBhbGV0dGUnO1xuaW1wb3J0IGNyZWF0ZVR5cG9ncmFwaHkgZnJvbSAnLi9jcmVhdGVUeXBvZ3JhcGh5JztcbmltcG9ydCBzaGFkb3dzIGZyb20gJy4vc2hhZG93cyc7XG5pbXBvcnQgY3JlYXRlVHJhbnNpdGlvbnMgZnJvbSAnLi9jcmVhdGVUcmFuc2l0aW9ucyc7XG5pbXBvcnQgekluZGV4IGZyb20gJy4vekluZGV4JztcbmZ1bmN0aW9uIGNyZWF0ZVRoZW1lKG9wdGlvbnMgPSB7fSwgLi4uYXJncykge1xuICBjb25zdCB7XG4gICAgICBtaXhpbnM6IG1peGluc0lucHV0ID0ge30sXG4gICAgICBwYWxldHRlOiBwYWxldHRlSW5wdXQgPSB7fSxcbiAgICAgIHRyYW5zaXRpb25zOiB0cmFuc2l0aW9uc0lucHV0ID0ge30sXG4gICAgICB0eXBvZ3JhcGh5OiB0eXBvZ3JhcGh5SW5wdXQgPSB7fVxuICAgIH0gPSBvcHRpb25zLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uob3B0aW9ucywgX2V4Y2x1ZGVkKTtcbiAgaWYgKG9wdGlvbnMudmFycykge1xuICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBgTVVJOiBcXGB2YXJzXFxgIGlzIGEgcHJpdmF0ZSBmaWVsZCB1c2VkIGZvciBDU1MgdmFyaWFibGVzIHN1cHBvcnQuXG5QbGVhc2UgdXNlIGFub3RoZXIgbmFtZS5gIDogX2Zvcm1hdE11aUVycm9yTWVzc2FnZSgxOCkpO1xuICB9XG4gIGNvbnN0IHBhbGV0dGUgPSBjcmVhdGVQYWxldHRlKHBhbGV0dGVJbnB1dCk7XG4gIGNvbnN0IHN5c3RlbVRoZW1lID0gc3lzdGVtQ3JlYXRlVGhlbWUob3B0aW9ucyk7XG4gIGxldCBtdWlUaGVtZSA9IGRlZXBtZXJnZShzeXN0ZW1UaGVtZSwge1xuICAgIG1peGluczogY3JlYXRlTWl4aW5zKHN5c3RlbVRoZW1lLmJyZWFrcG9pbnRzLCBtaXhpbnNJbnB1dCksXG4gICAgcGFsZXR0ZSxcbiAgICAvLyBEb24ndCB1c2UgWy4uLnNoYWRvd3NdIHVudGlsIHlvdSd2ZSB2ZXJpZmllZCBpdHMgdHJhbnNwaWxlZCBjb2RlIGlzIG5vdCBpbnZva2luZyB0aGUgaXRlcmF0b3IgcHJvdG9jb2wuXG4gICAgc2hhZG93czogc2hhZG93cy5zbGljZSgpLFxuICAgIHR5cG9ncmFwaHk6IGNyZWF0ZVR5cG9ncmFwaHkocGFsZXR0ZSwgdHlwb2dyYXBoeUlucHV0KSxcbiAgICB0cmFuc2l0aW9uczogY3JlYXRlVHJhbnNpdGlvbnModHJhbnNpdGlvbnNJbnB1dCksXG4gICAgekluZGV4OiBfZXh0ZW5kcyh7fSwgekluZGV4KVxuICB9KTtcbiAgbXVpVGhlbWUgPSBkZWVwbWVyZ2UobXVpVGhlbWUsIG90aGVyKTtcbiAgbXVpVGhlbWUgPSBhcmdzLnJlZHVjZSgoYWNjLCBhcmd1bWVudCkgPT4gZGVlcG1lcmdlKGFjYywgYXJndW1lbnQpLCBtdWlUaGVtZSk7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gVE9ETyB2NjogUmVmYWN0b3IgdG8gdXNlIGdsb2JhbFN0YXRlQ2xhc3Nlc01hcHBpbmcgZnJvbSBAbXVpL3V0aWxzIG9uY2UgYHJlYWRPbmx5YCBzdGF0ZSBjbGFzcyBpcyB1c2VkIGluIFJhdGluZyBjb21wb25lbnQuXG4gICAgY29uc3Qgc3RhdGVDbGFzc2VzID0gWydhY3RpdmUnLCAnY2hlY2tlZCcsICdjb21wbGV0ZWQnLCAnZGlzYWJsZWQnLCAnZXJyb3InLCAnZXhwYW5kZWQnLCAnZm9jdXNlZCcsICdmb2N1c1Zpc2libGUnLCAncmVxdWlyZWQnLCAnc2VsZWN0ZWQnXTtcbiAgICBjb25zdCB0cmF2ZXJzZSA9IChub2RlLCBjb21wb25lbnQpID0+IHtcbiAgICAgIGxldCBrZXk7XG5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBndWFyZC1mb3ItaW4sIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG4gICAgICBmb3IgKGtleSBpbiBub2RlKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkID0gbm9kZVtrZXldO1xuICAgICAgICBpZiAoc3RhdGVDbGFzc2VzLmluZGV4T2Yoa2V5KSAhPT0gLTEgJiYgT2JqZWN0LmtleXMoY2hpbGQpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgY29uc3Qgc3RhdGVDbGFzcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzKCcnLCBrZXkpO1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihbYE1VSTogVGhlIFxcYCR7Y29tcG9uZW50fVxcYCBjb21wb25lbnQgaW5jcmVhc2VzIGAgKyBgdGhlIENTUyBzcGVjaWZpY2l0eSBvZiB0aGUgXFxgJHtrZXl9XFxgIGludGVybmFsIHN0YXRlLmAsICdZb3UgY2FuIG5vdCBvdmVycmlkZSBpdCBsaWtlIHRoaXM6ICcsIEpTT04uc3RyaW5naWZ5KG5vZGUsIG51bGwsIDIpLCAnJywgYEluc3RlYWQsIHlvdSBuZWVkIHRvIHVzZSB0aGUgJyYuJHtzdGF0ZUNsYXNzfScgc3ludGF4OmAsIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgcm9vdDoge1xuICAgICAgICAgICAgICAgIFtgJi4ke3N0YXRlQ2xhc3N9YF06IGNoaWxkXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIG51bGwsIDIpLCAnJywgJ2h0dHBzOi8vbXVpLmNvbS9yL3N0YXRlLWNsYXNzZXMtZ3VpZGUnXS5qb2luKCdcXG4nKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFJlbW92ZSB0aGUgc3R5bGUgdG8gcHJldmVudCBnbG9iYWwgY29uZmxpY3RzLlxuICAgICAgICAgIG5vZGVba2V5XSA9IHt9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBPYmplY3Qua2V5cyhtdWlUaGVtZS5jb21wb25lbnRzKS5mb3JFYWNoKGNvbXBvbmVudCA9PiB7XG4gICAgICBjb25zdCBzdHlsZU92ZXJyaWRlcyA9IG11aVRoZW1lLmNvbXBvbmVudHNbY29tcG9uZW50XS5zdHlsZU92ZXJyaWRlcztcbiAgICAgIGlmIChzdHlsZU92ZXJyaWRlcyAmJiBjb21wb25lbnQuaW5kZXhPZignTXVpJykgPT09IDApIHtcbiAgICAgICAgdHJhdmVyc2Uoc3R5bGVPdmVycmlkZXMsIGNvbXBvbmVudCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgbXVpVGhlbWUudW5zdGFibGVfc3hDb25maWcgPSBfZXh0ZW5kcyh7fSwgZGVmYXVsdFN4Q29uZmlnLCBvdGhlciA9PSBudWxsID8gdm9pZCAwIDogb3RoZXIudW5zdGFibGVfc3hDb25maWcpO1xuICBtdWlUaGVtZS51bnN0YWJsZV9zeCA9IGZ1bmN0aW9uIHN4KHByb3BzKSB7XG4gICAgcmV0dXJuIHN0eWxlRnVuY3Rpb25TeCh7XG4gICAgICBzeDogcHJvcHMsXG4gICAgICB0aGVtZTogdGhpc1xuICAgIH0pO1xuICB9O1xuICByZXR1cm4gbXVpVGhlbWU7XG59XG5sZXQgd2FybmVkT25jZSA9IGZhbHNlO1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU11aVRoZW1lKC4uLmFyZ3MpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAoIXdhcm5lZE9uY2UpIHtcbiAgICAgIHdhcm5lZE9uY2UgPSB0cnVlO1xuICAgICAgY29uc29sZS5lcnJvcihbJ01VSTogdGhlIGNyZWF0ZU11aVRoZW1lIGZ1bmN0aW9uIHdhcyByZW5hbWVkIHRvIGNyZWF0ZVRoZW1lLicsICcnLCBcIllvdSBzaG91bGQgdXNlIGBpbXBvcnQgeyBjcmVhdGVUaGVtZSB9IGZyb20gJ0BtdWkvbWF0ZXJpYWwvc3R5bGVzJ2BcIl0uam9pbignXFxuJykpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY3JlYXRlVGhlbWUoLi4uYXJncyk7XG59XG5leHBvcnQgZGVmYXVsdCBjcmVhdGVUaGVtZTsiLCAiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVNaXhpbnMoYnJlYWtwb2ludHMsIG1peGlucykge1xuICByZXR1cm4gX2V4dGVuZHMoe1xuICAgIHRvb2xiYXI6IHtcbiAgICAgIG1pbkhlaWdodDogNTYsXG4gICAgICBbYnJlYWtwb2ludHMudXAoJ3hzJyldOiB7XG4gICAgICAgICdAbWVkaWEgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpJzoge1xuICAgICAgICAgIG1pbkhlaWdodDogNDhcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFticmVha3BvaW50cy51cCgnc20nKV06IHtcbiAgICAgICAgbWluSGVpZ2h0OiA2NFxuICAgICAgfVxuICAgIH1cbiAgfSwgbWl4aW5zKTtcbn0iLCAiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZm9ybWF0TXVpRXJyb3JNZXNzYWdlIGZyb20gXCJAbXVpL3V0aWxzL2Zvcm1hdE11aUVycm9yTWVzc2FnZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wibW9kZVwiLCBcImNvbnRyYXN0VGhyZXNob2xkXCIsIFwidG9uYWxPZmZzZXRcIl07XG5pbXBvcnQgZGVlcG1lcmdlIGZyb20gJ0BtdWkvdXRpbHMvZGVlcG1lcmdlJztcbmltcG9ydCB7IGRhcmtlbiwgZ2V0Q29udHJhc3RSYXRpbywgbGlnaHRlbiB9IGZyb20gJ0BtdWkvc3lzdGVtL2NvbG9yTWFuaXB1bGF0b3InO1xuaW1wb3J0IGNvbW1vbiBmcm9tICcuLi9jb2xvcnMvY29tbW9uJztcbmltcG9ydCBncmV5IGZyb20gJy4uL2NvbG9ycy9ncmV5JztcbmltcG9ydCBwdXJwbGUgZnJvbSAnLi4vY29sb3JzL3B1cnBsZSc7XG5pbXBvcnQgcmVkIGZyb20gJy4uL2NvbG9ycy9yZWQnO1xuaW1wb3J0IG9yYW5nZSBmcm9tICcuLi9jb2xvcnMvb3JhbmdlJztcbmltcG9ydCBibHVlIGZyb20gJy4uL2NvbG9ycy9ibHVlJztcbmltcG9ydCBsaWdodEJsdWUgZnJvbSAnLi4vY29sb3JzL2xpZ2h0Qmx1ZSc7XG5pbXBvcnQgZ3JlZW4gZnJvbSAnLi4vY29sb3JzL2dyZWVuJztcbmV4cG9ydCBjb25zdCBsaWdodCA9IHtcbiAgLy8gVGhlIGNvbG9ycyB1c2VkIHRvIHN0eWxlIHRoZSB0ZXh0LlxuICB0ZXh0OiB7XG4gICAgLy8gVGhlIG1vc3QgaW1wb3J0YW50IHRleHQuXG4gICAgcHJpbWFyeTogJ3JnYmEoMCwgMCwgMCwgMC44NyknLFxuICAgIC8vIFNlY29uZGFyeSB0ZXh0LlxuICAgIHNlY29uZGFyeTogJ3JnYmEoMCwgMCwgMCwgMC42KScsXG4gICAgLy8gRGlzYWJsZWQgdGV4dCBoYXZlIGV2ZW4gbG93ZXIgdmlzdWFsIHByb21pbmVuY2UuXG4gICAgZGlzYWJsZWQ6ICdyZ2JhKDAsIDAsIDAsIDAuMzgpJ1xuICB9LFxuICAvLyBUaGUgY29sb3IgdXNlZCB0byBkaXZpZGUgZGlmZmVyZW50IGVsZW1lbnRzLlxuICBkaXZpZGVyOiAncmdiYSgwLCAwLCAwLCAwLjEyKScsXG4gIC8vIFRoZSBiYWNrZ3JvdW5kIGNvbG9ycyB1c2VkIHRvIHN0eWxlIHRoZSBzdXJmYWNlcy5cbiAgLy8gQ29uc2lzdGVuY3kgYmV0d2VlbiB0aGVzZSB2YWx1ZXMgaXMgaW1wb3J0YW50LlxuICBiYWNrZ3JvdW5kOiB7XG4gICAgcGFwZXI6IGNvbW1vbi53aGl0ZSxcbiAgICBkZWZhdWx0OiBjb21tb24ud2hpdGVcbiAgfSxcbiAgLy8gVGhlIGNvbG9ycyB1c2VkIHRvIHN0eWxlIHRoZSBhY3Rpb24gZWxlbWVudHMuXG4gIGFjdGlvbjoge1xuICAgIC8vIFRoZSBjb2xvciBvZiBhbiBhY3RpdmUgYWN0aW9uIGxpa2UgYW4gaWNvbiBidXR0b24uXG4gICAgYWN0aXZlOiAncmdiYSgwLCAwLCAwLCAwLjU0KScsXG4gICAgLy8gVGhlIGNvbG9yIG9mIGFuIGhvdmVyZWQgYWN0aW9uLlxuICAgIGhvdmVyOiAncmdiYSgwLCAwLCAwLCAwLjA0KScsXG4gICAgaG92ZXJPcGFjaXR5OiAwLjA0LFxuICAgIC8vIFRoZSBjb2xvciBvZiBhIHNlbGVjdGVkIGFjdGlvbi5cbiAgICBzZWxlY3RlZDogJ3JnYmEoMCwgMCwgMCwgMC4wOCknLFxuICAgIHNlbGVjdGVkT3BhY2l0eTogMC4wOCxcbiAgICAvLyBUaGUgY29sb3Igb2YgYSBkaXNhYmxlZCBhY3Rpb24uXG4gICAgZGlzYWJsZWQ6ICdyZ2JhKDAsIDAsIDAsIDAuMjYpJyxcbiAgICAvLyBUaGUgYmFja2dyb3VuZCBjb2xvciBvZiBhIGRpc2FibGVkIGFjdGlvbi5cbiAgICBkaXNhYmxlZEJhY2tncm91bmQ6ICdyZ2JhKDAsIDAsIDAsIDAuMTIpJyxcbiAgICBkaXNhYmxlZE9wYWNpdHk6IDAuMzgsXG4gICAgZm9jdXM6ICdyZ2JhKDAsIDAsIDAsIDAuMTIpJyxcbiAgICBmb2N1c09wYWNpdHk6IDAuMTIsXG4gICAgYWN0aXZhdGVkT3BhY2l0eTogMC4xMlxuICB9XG59O1xuZXhwb3J0IGNvbnN0IGRhcmsgPSB7XG4gIHRleHQ6IHtcbiAgICBwcmltYXJ5OiBjb21tb24ud2hpdGUsXG4gICAgc2Vjb25kYXJ5OiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpJyxcbiAgICBkaXNhYmxlZDogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC41KScsXG4gICAgaWNvbjogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC41KSdcbiAgfSxcbiAgZGl2aWRlcjogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMiknLFxuICBiYWNrZ3JvdW5kOiB7XG4gICAgcGFwZXI6ICcjMTIxMjEyJyxcbiAgICBkZWZhdWx0OiAnIzEyMTIxMidcbiAgfSxcbiAgYWN0aW9uOiB7XG4gICAgYWN0aXZlOiBjb21tb24ud2hpdGUsXG4gICAgaG92ZXI6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpJyxcbiAgICBob3Zlck9wYWNpdHk6IDAuMDgsXG4gICAgc2VsZWN0ZWQ6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTYpJyxcbiAgICBzZWxlY3RlZE9wYWNpdHk6IDAuMTYsXG4gICAgZGlzYWJsZWQ6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMyknLFxuICAgIGRpc2FibGVkQmFja2dyb3VuZDogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMiknLFxuICAgIGRpc2FibGVkT3BhY2l0eTogMC4zOCxcbiAgICBmb2N1czogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMiknLFxuICAgIGZvY3VzT3BhY2l0eTogMC4xMixcbiAgICBhY3RpdmF0ZWRPcGFjaXR5OiAwLjI0XG4gIH1cbn07XG5mdW5jdGlvbiBhZGRMaWdodE9yRGFyayhpbnRlbnQsIGRpcmVjdGlvbiwgc2hhZGUsIHRvbmFsT2Zmc2V0KSB7XG4gIGNvbnN0IHRvbmFsT2Zmc2V0TGlnaHQgPSB0b25hbE9mZnNldC5saWdodCB8fCB0b25hbE9mZnNldDtcbiAgY29uc3QgdG9uYWxPZmZzZXREYXJrID0gdG9uYWxPZmZzZXQuZGFyayB8fCB0b25hbE9mZnNldCAqIDEuNTtcbiAgaWYgKCFpbnRlbnRbZGlyZWN0aW9uXSkge1xuICAgIGlmIChpbnRlbnQuaGFzT3duUHJvcGVydHkoc2hhZGUpKSB7XG4gICAgICBpbnRlbnRbZGlyZWN0aW9uXSA9IGludGVudFtzaGFkZV07XG4gICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICdsaWdodCcpIHtcbiAgICAgIGludGVudC5saWdodCA9IGxpZ2h0ZW4oaW50ZW50Lm1haW4sIHRvbmFsT2Zmc2V0TGlnaHQpO1xuICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSAnZGFyaycpIHtcbiAgICAgIGludGVudC5kYXJrID0gZGFya2VuKGludGVudC5tYWluLCB0b25hbE9mZnNldERhcmspO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZ2V0RGVmYXVsdFByaW1hcnkobW9kZSA9ICdsaWdodCcpIHtcbiAgaWYgKG1vZGUgPT09ICdkYXJrJykge1xuICAgIHJldHVybiB7XG4gICAgICBtYWluOiBibHVlWzIwMF0sXG4gICAgICBsaWdodDogYmx1ZVs1MF0sXG4gICAgICBkYXJrOiBibHVlWzQwMF1cbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbWFpbjogYmx1ZVs3MDBdLFxuICAgIGxpZ2h0OiBibHVlWzQwMF0sXG4gICAgZGFyazogYmx1ZVs4MDBdXG4gIH07XG59XG5mdW5jdGlvbiBnZXREZWZhdWx0U2Vjb25kYXJ5KG1vZGUgPSAnbGlnaHQnKSB7XG4gIGlmIChtb2RlID09PSAnZGFyaycpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWFpbjogcHVycGxlWzIwMF0sXG4gICAgICBsaWdodDogcHVycGxlWzUwXSxcbiAgICAgIGRhcms6IHB1cnBsZVs0MDBdXG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG1haW46IHB1cnBsZVs1MDBdLFxuICAgIGxpZ2h0OiBwdXJwbGVbMzAwXSxcbiAgICBkYXJrOiBwdXJwbGVbNzAwXVxuICB9O1xufVxuZnVuY3Rpb24gZ2V0RGVmYXVsdEVycm9yKG1vZGUgPSAnbGlnaHQnKSB7XG4gIGlmIChtb2RlID09PSAnZGFyaycpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWFpbjogcmVkWzUwMF0sXG4gICAgICBsaWdodDogcmVkWzMwMF0sXG4gICAgICBkYXJrOiByZWRbNzAwXVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBtYWluOiByZWRbNzAwXSxcbiAgICBsaWdodDogcmVkWzQwMF0sXG4gICAgZGFyazogcmVkWzgwMF1cbiAgfTtcbn1cbmZ1bmN0aW9uIGdldERlZmF1bHRJbmZvKG1vZGUgPSAnbGlnaHQnKSB7XG4gIGlmIChtb2RlID09PSAnZGFyaycpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWFpbjogbGlnaHRCbHVlWzQwMF0sXG4gICAgICBsaWdodDogbGlnaHRCbHVlWzMwMF0sXG4gICAgICBkYXJrOiBsaWdodEJsdWVbNzAwXVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBtYWluOiBsaWdodEJsdWVbNzAwXSxcbiAgICBsaWdodDogbGlnaHRCbHVlWzUwMF0sXG4gICAgZGFyazogbGlnaHRCbHVlWzkwMF1cbiAgfTtcbn1cbmZ1bmN0aW9uIGdldERlZmF1bHRTdWNjZXNzKG1vZGUgPSAnbGlnaHQnKSB7XG4gIGlmIChtb2RlID09PSAnZGFyaycpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWFpbjogZ3JlZW5bNDAwXSxcbiAgICAgIGxpZ2h0OiBncmVlblszMDBdLFxuICAgICAgZGFyazogZ3JlZW5bNzAwXVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBtYWluOiBncmVlbls4MDBdLFxuICAgIGxpZ2h0OiBncmVlbls1MDBdLFxuICAgIGRhcms6IGdyZWVuWzkwMF1cbiAgfTtcbn1cbmZ1bmN0aW9uIGdldERlZmF1bHRXYXJuaW5nKG1vZGUgPSAnbGlnaHQnKSB7XG4gIGlmIChtb2RlID09PSAnZGFyaycpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWFpbjogb3JhbmdlWzQwMF0sXG4gICAgICBsaWdodDogb3JhbmdlWzMwMF0sXG4gICAgICBkYXJrOiBvcmFuZ2VbNzAwXVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBtYWluOiAnI2VkNmMwMicsXG4gICAgLy8gY2xvc2VzdCB0byBvcmFuZ2VbODAwXSB0aGF0IHBhc3MgMzoxLlxuICAgIGxpZ2h0OiBvcmFuZ2VbNTAwXSxcbiAgICBkYXJrOiBvcmFuZ2VbOTAwXVxuICB9O1xufVxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlUGFsZXR0ZShwYWxldHRlKSB7XG4gIGNvbnN0IHtcbiAgICAgIG1vZGUgPSAnbGlnaHQnLFxuICAgICAgY29udHJhc3RUaHJlc2hvbGQgPSAzLFxuICAgICAgdG9uYWxPZmZzZXQgPSAwLjJcbiAgICB9ID0gcGFsZXR0ZSxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHBhbGV0dGUsIF9leGNsdWRlZCk7XG4gIGNvbnN0IHByaW1hcnkgPSBwYWxldHRlLnByaW1hcnkgfHwgZ2V0RGVmYXVsdFByaW1hcnkobW9kZSk7XG4gIGNvbnN0IHNlY29uZGFyeSA9IHBhbGV0dGUuc2Vjb25kYXJ5IHx8IGdldERlZmF1bHRTZWNvbmRhcnkobW9kZSk7XG4gIGNvbnN0IGVycm9yID0gcGFsZXR0ZS5lcnJvciB8fCBnZXREZWZhdWx0RXJyb3IobW9kZSk7XG4gIGNvbnN0IGluZm8gPSBwYWxldHRlLmluZm8gfHwgZ2V0RGVmYXVsdEluZm8obW9kZSk7XG4gIGNvbnN0IHN1Y2Nlc3MgPSBwYWxldHRlLnN1Y2Nlc3MgfHwgZ2V0RGVmYXVsdFN1Y2Nlc3MobW9kZSk7XG4gIGNvbnN0IHdhcm5pbmcgPSBwYWxldHRlLndhcm5pbmcgfHwgZ2V0RGVmYXVsdFdhcm5pbmcobW9kZSk7XG5cbiAgLy8gVXNlIHRoZSBzYW1lIGxvZ2ljIGFzXG4gIC8vIEJvb3RzdHJhcDogaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvMWQ2ZTM3MTBkZDQ0N2RlMWEyMDBmMjllOGZhNTIxZjhhMDkwOGY3MC9zY3NzL19mdW5jdGlvbnMuc2NzcyNMNTlcbiAgLy8gYW5kIG1hdGVyaWFsLWNvbXBvbmVudHMtd2ViIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRlcmlhbC1jb21wb25lbnRzL21hdGVyaWFsLWNvbXBvbmVudHMtd2ViL2Jsb2IvYWM0NmI4ODYzYzRkYWI5ZmMyMmM0YzY2MmRjNmJkMWI2NWRkNjUyZi9wYWNrYWdlcy9tZGMtdGhlbWUvX2Z1bmN0aW9ucy5zY3NzI0w1NFxuICBmdW5jdGlvbiBnZXRDb250cmFzdFRleHQoYmFja2dyb3VuZCkge1xuICAgIGNvbnN0IGNvbnRyYXN0VGV4dCA9IGdldENvbnRyYXN0UmF0aW8oYmFja2dyb3VuZCwgZGFyay50ZXh0LnByaW1hcnkpID49IGNvbnRyYXN0VGhyZXNob2xkID8gZGFyay50ZXh0LnByaW1hcnkgOiBsaWdodC50ZXh0LnByaW1hcnk7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGNvbnN0IGNvbnRyYXN0ID0gZ2V0Q29udHJhc3RSYXRpbyhiYWNrZ3JvdW5kLCBjb250cmFzdFRleHQpO1xuICAgICAgaWYgKGNvbnRyYXN0IDwgMykge1xuICAgICAgICBjb25zb2xlLmVycm9yKFtgTVVJOiBUaGUgY29udHJhc3QgcmF0aW8gb2YgJHtjb250cmFzdH06MSBmb3IgJHtjb250cmFzdFRleHR9IG9uICR7YmFja2dyb3VuZH1gLCAnZmFsbHMgYmVsb3cgdGhlIFdDQUcgcmVjb21tZW5kZWQgYWJzb2x1dGUgbWluaW11bSBjb250cmFzdCByYXRpbyBvZiAzOjEuJywgJ2h0dHBzOi8vd3d3LnczLm9yZy9UUi8yMDA4L1JFQy1XQ0FHMjAtMjAwODEyMTEvI3Zpc3VhbC1hdWRpby1jb250cmFzdC1jb250cmFzdCddLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvbnRyYXN0VGV4dDtcbiAgfVxuICBjb25zdCBhdWdtZW50Q29sb3IgPSAoe1xuICAgIGNvbG9yLFxuICAgIG5hbWUsXG4gICAgbWFpblNoYWRlID0gNTAwLFxuICAgIGxpZ2h0U2hhZGUgPSAzMDAsXG4gICAgZGFya1NoYWRlID0gNzAwXG4gIH0pID0+IHtcbiAgICBjb2xvciA9IF9leHRlbmRzKHt9LCBjb2xvcik7XG4gICAgaWYgKCFjb2xvci5tYWluICYmIGNvbG9yW21haW5TaGFkZV0pIHtcbiAgICAgIGNvbG9yLm1haW4gPSBjb2xvclttYWluU2hhZGVdO1xuICAgIH1cbiAgICBpZiAoIWNvbG9yLmhhc093blByb3BlcnR5KCdtYWluJykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBgTVVJOiBUaGUgY29sb3Ike25hbWUgPyBgICgke25hbWV9KWAgOiAnJ30gcHJvdmlkZWQgdG8gYXVnbWVudENvbG9yKGNvbG9yKSBpcyBpbnZhbGlkLlxuVGhlIGNvbG9yIG9iamVjdCBuZWVkcyB0byBoYXZlIGEgXFxgbWFpblxcYCBwcm9wZXJ0eSBvciBhIFxcYCR7bWFpblNoYWRlfVxcYCBwcm9wZXJ0eS5gIDogX2Zvcm1hdE11aUVycm9yTWVzc2FnZSgxMSwgbmFtZSA/IGAgKCR7bmFtZX0pYCA6ICcnLCBtYWluU2hhZGUpKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBjb2xvci5tYWluICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGBNVUk6IFRoZSBjb2xvciR7bmFtZSA/IGAgKCR7bmFtZX0pYCA6ICcnfSBwcm92aWRlZCB0byBhdWdtZW50Q29sb3IoY29sb3IpIGlzIGludmFsaWQuXG5cXGBjb2xvci5tYWluXFxgIHNob3VsZCBiZSBhIHN0cmluZywgYnV0IFxcYCR7SlNPTi5zdHJpbmdpZnkoY29sb3IubWFpbil9XFxgIHdhcyBwcm92aWRlZCBpbnN0ZWFkLlxuXG5EaWQgeW91IGludGVuZCB0byB1c2Ugb25lIG9mIHRoZSBmb2xsb3dpbmcgYXBwcm9hY2hlcz9cblxuaW1wb3J0IHsgZ3JlZW4gfSBmcm9tIFwiQG11aS9tYXRlcmlhbC9jb2xvcnNcIjtcblxuY29uc3QgdGhlbWUxID0gY3JlYXRlVGhlbWUoeyBwYWxldHRlOiB7XG4gIHByaW1hcnk6IGdyZWVuLFxufSB9KTtcblxuY29uc3QgdGhlbWUyID0gY3JlYXRlVGhlbWUoeyBwYWxldHRlOiB7XG4gIHByaW1hcnk6IHsgbWFpbjogZ3JlZW5bNTAwXSB9LFxufSB9KTtgIDogX2Zvcm1hdE11aUVycm9yTWVzc2FnZSgxMiwgbmFtZSA/IGAgKCR7bmFtZX0pYCA6ICcnLCBKU09OLnN0cmluZ2lmeShjb2xvci5tYWluKSkpO1xuICAgIH1cbiAgICBhZGRMaWdodE9yRGFyayhjb2xvciwgJ2xpZ2h0JywgbGlnaHRTaGFkZSwgdG9uYWxPZmZzZXQpO1xuICAgIGFkZExpZ2h0T3JEYXJrKGNvbG9yLCAnZGFyaycsIGRhcmtTaGFkZSwgdG9uYWxPZmZzZXQpO1xuICAgIGlmICghY29sb3IuY29udHJhc3RUZXh0KSB7XG4gICAgICBjb2xvci5jb250cmFzdFRleHQgPSBnZXRDb250cmFzdFRleHQoY29sb3IubWFpbik7XG4gICAgfVxuICAgIHJldHVybiBjb2xvcjtcbiAgfTtcbiAgY29uc3QgbW9kZXMgPSB7XG4gICAgZGFyayxcbiAgICBsaWdodFxuICB9O1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmICghbW9kZXNbbW9kZV0pIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYE1VSTogVGhlIHBhbGV0dGUgbW9kZSBcXGAke21vZGV9XFxgIGlzIG5vdCBzdXBwb3J0ZWQuYCk7XG4gICAgfVxuICB9XG4gIGNvbnN0IHBhbGV0dGVPdXRwdXQgPSBkZWVwbWVyZ2UoX2V4dGVuZHMoe1xuICAgIC8vIEEgY29sbGVjdGlvbiBvZiBjb21tb24gY29sb3JzLlxuICAgIGNvbW1vbjogX2V4dGVuZHMoe30sIGNvbW1vbiksXG4gICAgLy8gcHJldmVudCBtdXRhYmxlIG9iamVjdC5cbiAgICAvLyBUaGUgcGFsZXR0ZSBtb2RlLCBjYW4gYmUgbGlnaHQgb3IgZGFyay5cbiAgICBtb2RlLFxuICAgIC8vIFRoZSBjb2xvcnMgdXNlZCB0byByZXByZXNlbnQgcHJpbWFyeSBpbnRlcmZhY2UgZWxlbWVudHMgZm9yIGEgdXNlci5cbiAgICBwcmltYXJ5OiBhdWdtZW50Q29sb3Ioe1xuICAgICAgY29sb3I6IHByaW1hcnksXG4gICAgICBuYW1lOiAncHJpbWFyeSdcbiAgICB9KSxcbiAgICAvLyBUaGUgY29sb3JzIHVzZWQgdG8gcmVwcmVzZW50IHNlY29uZGFyeSBpbnRlcmZhY2UgZWxlbWVudHMgZm9yIGEgdXNlci5cbiAgICBzZWNvbmRhcnk6IGF1Z21lbnRDb2xvcih7XG4gICAgICBjb2xvcjogc2Vjb25kYXJ5LFxuICAgICAgbmFtZTogJ3NlY29uZGFyeScsXG4gICAgICBtYWluU2hhZGU6ICdBNDAwJyxcbiAgICAgIGxpZ2h0U2hhZGU6ICdBMjAwJyxcbiAgICAgIGRhcmtTaGFkZTogJ0E3MDAnXG4gICAgfSksXG4gICAgLy8gVGhlIGNvbG9ycyB1c2VkIHRvIHJlcHJlc2VudCBpbnRlcmZhY2UgZWxlbWVudHMgdGhhdCB0aGUgdXNlciBzaG91bGQgYmUgbWFkZSBhd2FyZSBvZi5cbiAgICBlcnJvcjogYXVnbWVudENvbG9yKHtcbiAgICAgIGNvbG9yOiBlcnJvcixcbiAgICAgIG5hbWU6ICdlcnJvcidcbiAgICB9KSxcbiAgICAvLyBUaGUgY29sb3JzIHVzZWQgdG8gcmVwcmVzZW50IHBvdGVudGlhbGx5IGRhbmdlcm91cyBhY3Rpb25zIG9yIGltcG9ydGFudCBtZXNzYWdlcy5cbiAgICB3YXJuaW5nOiBhdWdtZW50Q29sb3Ioe1xuICAgICAgY29sb3I6IHdhcm5pbmcsXG4gICAgICBuYW1lOiAnd2FybmluZydcbiAgICB9KSxcbiAgICAvLyBUaGUgY29sb3JzIHVzZWQgdG8gcHJlc2VudCBpbmZvcm1hdGlvbiB0byB0aGUgdXNlciB0aGF0IGlzIG5ldXRyYWwgYW5kIG5vdCBuZWNlc3NhcmlseSBpbXBvcnRhbnQuXG4gICAgaW5mbzogYXVnbWVudENvbG9yKHtcbiAgICAgIGNvbG9yOiBpbmZvLFxuICAgICAgbmFtZTogJ2luZm8nXG4gICAgfSksXG4gICAgLy8gVGhlIGNvbG9ycyB1c2VkIHRvIGluZGljYXRlIHRoZSBzdWNjZXNzZnVsIGNvbXBsZXRpb24gb2YgYW4gYWN0aW9uIHRoYXQgdXNlciB0cmlnZ2VyZWQuXG4gICAgc3VjY2VzczogYXVnbWVudENvbG9yKHtcbiAgICAgIGNvbG9yOiBzdWNjZXNzLFxuICAgICAgbmFtZTogJ3N1Y2Nlc3MnXG4gICAgfSksXG4gICAgLy8gVGhlIGdyZXkgY29sb3JzLlxuICAgIGdyZXksXG4gICAgLy8gVXNlZCBieSBgZ2V0Q29udHJhc3RUZXh0KClgIHRvIG1heGltaXplIHRoZSBjb250cmFzdCBiZXR3ZWVuXG4gICAgLy8gdGhlIGJhY2tncm91bmQgYW5kIHRoZSB0ZXh0LlxuICAgIGNvbnRyYXN0VGhyZXNob2xkLFxuICAgIC8vIFRha2VzIGEgYmFja2dyb3VuZCBjb2xvciBhbmQgcmV0dXJucyB0aGUgdGV4dCBjb2xvciB0aGF0IG1heGltaXplcyB0aGUgY29udHJhc3QuXG4gICAgZ2V0Q29udHJhc3RUZXh0LFxuICAgIC8vIEdlbmVyYXRlIGEgcmljaCBjb2xvciBvYmplY3QuXG4gICAgYXVnbWVudENvbG9yLFxuICAgIC8vIFVzZWQgYnkgdGhlIGZ1bmN0aW9ucyBiZWxvdyB0byBzaGlmdCBhIGNvbG9yJ3MgbHVtaW5hbmNlIGJ5IGFwcHJveGltYXRlbHlcbiAgICAvLyB0d28gaW5kZXhlcyB3aXRoaW4gaXRzIHRvbmFsIHBhbGV0dGUuXG4gICAgLy8gRS5nLiwgc2hpZnQgZnJvbSBSZWQgNTAwIHRvIFJlZCAzMDAgb3IgUmVkIDcwMC5cbiAgICB0b25hbE9mZnNldFxuICB9LCBtb2Rlc1ttb2RlXSksIG90aGVyKTtcbiAgcmV0dXJuIHBhbGV0dGVPdXRwdXQ7XG59IiwgImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJmb250RmFtaWx5XCIsIFwiZm9udFNpemVcIiwgXCJmb250V2VpZ2h0TGlnaHRcIiwgXCJmb250V2VpZ2h0UmVndWxhclwiLCBcImZvbnRXZWlnaHRNZWRpdW1cIiwgXCJmb250V2VpZ2h0Qm9sZFwiLCBcImh0bWxGb250U2l6ZVwiLCBcImFsbFZhcmlhbnRzXCIsIFwicHhUb1JlbVwiXTtcbmltcG9ydCBkZWVwbWVyZ2UgZnJvbSAnQG11aS91dGlscy9kZWVwbWVyZ2UnO1xuZnVuY3Rpb24gcm91bmQodmFsdWUpIHtcbiAgcmV0dXJuIE1hdGgucm91bmQodmFsdWUgKiAxZTUpIC8gMWU1O1xufVxuY29uc3QgY2FzZUFsbENhcHMgPSB7XG4gIHRleHRUcmFuc2Zvcm06ICd1cHBlcmNhc2UnXG59O1xuY29uc3QgZGVmYXVsdEZvbnRGYW1pbHkgPSAnXCJSb2JvdG9cIiwgXCJIZWx2ZXRpY2FcIiwgXCJBcmlhbFwiLCBzYW5zLXNlcmlmJztcblxuLyoqXG4gKiBAc2VlIEBsaW5re2h0dHBzOi8vbTIubWF0ZXJpYWwuaW8vZGVzaWduL3R5cG9ncmFwaHkvdGhlLXR5cGUtc3lzdGVtLmh0bWx9XG4gKiBAc2VlIEBsaW5re2h0dHBzOi8vbTIubWF0ZXJpYWwuaW8vZGVzaWduL3R5cG9ncmFwaHkvdW5kZXJzdGFuZGluZy10eXBvZ3JhcGh5Lmh0bWx9XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVR5cG9ncmFwaHkocGFsZXR0ZSwgdHlwb2dyYXBoeSkge1xuICBjb25zdCBfcmVmID0gdHlwZW9mIHR5cG9ncmFwaHkgPT09ICdmdW5jdGlvbicgPyB0eXBvZ3JhcGh5KHBhbGV0dGUpIDogdHlwb2dyYXBoeSxcbiAgICB7XG4gICAgICBmb250RmFtaWx5ID0gZGVmYXVsdEZvbnRGYW1pbHksXG4gICAgICAvLyBUaGUgZGVmYXVsdCBmb250IHNpemUgb2YgdGhlIE1hdGVyaWFsIFNwZWNpZmljYXRpb24uXG4gICAgICBmb250U2l6ZSA9IDE0LFxuICAgICAgLy8gcHhcbiAgICAgIGZvbnRXZWlnaHRMaWdodCA9IDMwMCxcbiAgICAgIGZvbnRXZWlnaHRSZWd1bGFyID0gNDAwLFxuICAgICAgZm9udFdlaWdodE1lZGl1bSA9IDUwMCxcbiAgICAgIGZvbnRXZWlnaHRCb2xkID0gNzAwLFxuICAgICAgLy8gVGVsbCBNVUkgd2hhdCdzIHRoZSBmb250LXNpemUgb24gdGhlIGh0bWwgZWxlbWVudC5cbiAgICAgIC8vIDE2cHggaXMgdGhlIGRlZmF1bHQgZm9udC1zaXplIHVzZWQgYnkgYnJvd3NlcnMuXG4gICAgICBodG1sRm9udFNpemUgPSAxNixcbiAgICAgIC8vIEFwcGx5IHRoZSBDU1MgcHJvcGVydGllcyB0byBhbGwgdGhlIHZhcmlhbnRzLlxuICAgICAgYWxsVmFyaWFudHMsXG4gICAgICBweFRvUmVtOiBweFRvUmVtMlxuICAgIH0gPSBfcmVmLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAodHlwZW9mIGZvbnRTaXplICE9PSAnbnVtYmVyJykge1xuICAgICAgY29uc29sZS5lcnJvcignTVVJOiBgZm9udFNpemVgIGlzIHJlcXVpcmVkIHRvIGJlIGEgbnVtYmVyLicpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGh0bWxGb250U2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ01VSTogYGh0bWxGb250U2l6ZWAgaXMgcmVxdWlyZWQgdG8gYmUgYSBudW1iZXIuJyk7XG4gICAgfVxuICB9XG4gIGNvbnN0IGNvZWYgPSBmb250U2l6ZSAvIDE0O1xuICBjb25zdCBweFRvUmVtID0gcHhUb1JlbTIgfHwgKHNpemUgPT4gYCR7c2l6ZSAvIGh0bWxGb250U2l6ZSAqIGNvZWZ9cmVtYCk7XG4gIGNvbnN0IGJ1aWxkVmFyaWFudCA9IChmb250V2VpZ2h0LCBzaXplLCBsaW5lSGVpZ2h0LCBsZXR0ZXJTcGFjaW5nLCBjYXNpbmcpID0+IF9leHRlbmRzKHtcbiAgICBmb250RmFtaWx5LFxuICAgIGZvbnRXZWlnaHQsXG4gICAgZm9udFNpemU6IHB4VG9SZW0oc2l6ZSksXG4gICAgLy8gVW5pdGxlc3MgZm9sbG93aW5nIGh0dHBzOi8vbWV5ZXJ3ZWIuY29tL2VyaWMvdGhvdWdodHMvMjAwNi8wMi8wOC91bml0bGVzcy1saW5lLWhlaWdodHMvXG4gICAgbGluZUhlaWdodFxuICB9LCBmb250RmFtaWx5ID09PSBkZWZhdWx0Rm9udEZhbWlseSA/IHtcbiAgICBsZXR0ZXJTcGFjaW5nOiBgJHtyb3VuZChsZXR0ZXJTcGFjaW5nIC8gc2l6ZSl9ZW1gXG4gIH0gOiB7fSwgY2FzaW5nLCBhbGxWYXJpYW50cyk7XG4gIGNvbnN0IHZhcmlhbnRzID0ge1xuICAgIGgxOiBidWlsZFZhcmlhbnQoZm9udFdlaWdodExpZ2h0LCA5NiwgMS4xNjcsIC0xLjUpLFxuICAgIGgyOiBidWlsZFZhcmlhbnQoZm9udFdlaWdodExpZ2h0LCA2MCwgMS4yLCAtMC41KSxcbiAgICBoMzogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRSZWd1bGFyLCA0OCwgMS4xNjcsIDApLFxuICAgIGg0OiBidWlsZFZhcmlhbnQoZm9udFdlaWdodFJlZ3VsYXIsIDM0LCAxLjIzNSwgMC4yNSksXG4gICAgaDU6IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0UmVndWxhciwgMjQsIDEuMzM0LCAwKSxcbiAgICBoNjogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRNZWRpdW0sIDIwLCAxLjYsIDAuMTUpLFxuICAgIHN1YnRpdGxlMTogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRSZWd1bGFyLCAxNiwgMS43NSwgMC4xNSksXG4gICAgc3VidGl0bGUyOiBidWlsZFZhcmlhbnQoZm9udFdlaWdodE1lZGl1bSwgMTQsIDEuNTcsIDAuMSksXG4gICAgYm9keTE6IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0UmVndWxhciwgMTYsIDEuNSwgMC4xNSksXG4gICAgYm9keTI6IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0UmVndWxhciwgMTQsIDEuNDMsIDAuMTUpLFxuICAgIGJ1dHRvbjogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRNZWRpdW0sIDE0LCAxLjc1LCAwLjQsIGNhc2VBbGxDYXBzKSxcbiAgICBjYXB0aW9uOiBidWlsZFZhcmlhbnQoZm9udFdlaWdodFJlZ3VsYXIsIDEyLCAxLjY2LCAwLjQpLFxuICAgIG92ZXJsaW5lOiBidWlsZFZhcmlhbnQoZm9udFdlaWdodFJlZ3VsYXIsIDEyLCAyLjY2LCAxLCBjYXNlQWxsQ2FwcyksXG4gICAgLy8gVE9ETyB2NjogUmVtb3ZlIGhhbmRsaW5nIG9mICdpbmhlcml0JyB2YXJpYW50IGZyb20gdGhlIHRoZW1lIGFzIGl0IGlzIGFscmVhZHkgaGFuZGxlZCBpbiBNYXRlcmlhbCBVSSdzIFR5cG9ncmFwaHkgY29tcG9uZW50LiBBbHNvLCByZW1lbWJlciB0byByZW1vdmUgdGhlIGFzc29jaWF0ZWQgdHlwZXMuXG4gICAgaW5oZXJpdDoge1xuICAgICAgZm9udEZhbWlseTogJ2luaGVyaXQnLFxuICAgICAgZm9udFdlaWdodDogJ2luaGVyaXQnLFxuICAgICAgZm9udFNpemU6ICdpbmhlcml0JyxcbiAgICAgIGxpbmVIZWlnaHQ6ICdpbmhlcml0JyxcbiAgICAgIGxldHRlclNwYWNpbmc6ICdpbmhlcml0J1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIGRlZXBtZXJnZShfZXh0ZW5kcyh7XG4gICAgaHRtbEZvbnRTaXplLFxuICAgIHB4VG9SZW0sXG4gICAgZm9udEZhbWlseSxcbiAgICBmb250U2l6ZSxcbiAgICBmb250V2VpZ2h0TGlnaHQsXG4gICAgZm9udFdlaWdodFJlZ3VsYXIsXG4gICAgZm9udFdlaWdodE1lZGl1bSxcbiAgICBmb250V2VpZ2h0Qm9sZFxuICB9LCB2YXJpYW50cyksIG90aGVyLCB7XG4gICAgY2xvbmU6IGZhbHNlIC8vIE5vIG5lZWQgdG8gY2xvbmUgZGVlcFxuICB9KTtcbn0iLCAiY29uc3Qgc2hhZG93S2V5VW1icmFPcGFjaXR5ID0gMC4yO1xuY29uc3Qgc2hhZG93S2V5UGVudW1icmFPcGFjaXR5ID0gMC4xNDtcbmNvbnN0IHNoYWRvd0FtYmllbnRTaGFkb3dPcGFjaXR5ID0gMC4xMjtcbmZ1bmN0aW9uIGNyZWF0ZVNoYWRvdyguLi5weCkge1xuICByZXR1cm4gW2Ake3B4WzBdfXB4ICR7cHhbMV19cHggJHtweFsyXX1weCAke3B4WzNdfXB4IHJnYmEoMCwwLDAsJHtzaGFkb3dLZXlVbWJyYU9wYWNpdHl9KWAsIGAke3B4WzRdfXB4ICR7cHhbNV19cHggJHtweFs2XX1weCAke3B4WzddfXB4IHJnYmEoMCwwLDAsJHtzaGFkb3dLZXlQZW51bWJyYU9wYWNpdHl9KWAsIGAke3B4WzhdfXB4ICR7cHhbOV19cHggJHtweFsxMF19cHggJHtweFsxMV19cHggcmdiYSgwLDAsMCwke3NoYWRvd0FtYmllbnRTaGFkb3dPcGFjaXR5fSlgXS5qb2luKCcsJyk7XG59XG5cbi8vIFZhbHVlcyBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRlcmlhbC1jb21wb25lbnRzL21hdGVyaWFsLWNvbXBvbmVudHMtd2ViL2Jsb2IvYmU4NzQ3Zjk0NTc0NjY5Y2I1ZTdhZGQxYTdjNTRmYTQxYTg5Y2VjNy9wYWNrYWdlcy9tZGMtZWxldmF0aW9uL192YXJpYWJsZXMuc2Nzc1xuY29uc3Qgc2hhZG93cyA9IFsnbm9uZScsIGNyZWF0ZVNoYWRvdygwLCAyLCAxLCAtMSwgMCwgMSwgMSwgMCwgMCwgMSwgMywgMCksIGNyZWF0ZVNoYWRvdygwLCAzLCAxLCAtMiwgMCwgMiwgMiwgMCwgMCwgMSwgNSwgMCksIGNyZWF0ZVNoYWRvdygwLCAzLCAzLCAtMiwgMCwgMywgNCwgMCwgMCwgMSwgOCwgMCksIGNyZWF0ZVNoYWRvdygwLCAyLCA0LCAtMSwgMCwgNCwgNSwgMCwgMCwgMSwgMTAsIDApLCBjcmVhdGVTaGFkb3coMCwgMywgNSwgLTEsIDAsIDUsIDgsIDAsIDAsIDEsIDE0LCAwKSwgY3JlYXRlU2hhZG93KDAsIDMsIDUsIC0xLCAwLCA2LCAxMCwgMCwgMCwgMSwgMTgsIDApLCBjcmVhdGVTaGFkb3coMCwgNCwgNSwgLTIsIDAsIDcsIDEwLCAxLCAwLCAyLCAxNiwgMSksIGNyZWF0ZVNoYWRvdygwLCA1LCA1LCAtMywgMCwgOCwgMTAsIDEsIDAsIDMsIDE0LCAyKSwgY3JlYXRlU2hhZG93KDAsIDUsIDYsIC0zLCAwLCA5LCAxMiwgMSwgMCwgMywgMTYsIDIpLCBjcmVhdGVTaGFkb3coMCwgNiwgNiwgLTMsIDAsIDEwLCAxNCwgMSwgMCwgNCwgMTgsIDMpLCBjcmVhdGVTaGFkb3coMCwgNiwgNywgLTQsIDAsIDExLCAxNSwgMSwgMCwgNCwgMjAsIDMpLCBjcmVhdGVTaGFkb3coMCwgNywgOCwgLTQsIDAsIDEyLCAxNywgMiwgMCwgNSwgMjIsIDQpLCBjcmVhdGVTaGFkb3coMCwgNywgOCwgLTQsIDAsIDEzLCAxOSwgMiwgMCwgNSwgMjQsIDQpLCBjcmVhdGVTaGFkb3coMCwgNywgOSwgLTQsIDAsIDE0LCAyMSwgMiwgMCwgNSwgMjYsIDQpLCBjcmVhdGVTaGFkb3coMCwgOCwgOSwgLTUsIDAsIDE1LCAyMiwgMiwgMCwgNiwgMjgsIDUpLCBjcmVhdGVTaGFkb3coMCwgOCwgMTAsIC01LCAwLCAxNiwgMjQsIDIsIDAsIDYsIDMwLCA1KSwgY3JlYXRlU2hhZG93KDAsIDgsIDExLCAtNSwgMCwgMTcsIDI2LCAyLCAwLCA2LCAzMiwgNSksIGNyZWF0ZVNoYWRvdygwLCA5LCAxMSwgLTUsIDAsIDE4LCAyOCwgMiwgMCwgNywgMzQsIDYpLCBjcmVhdGVTaGFkb3coMCwgOSwgMTIsIC02LCAwLCAxOSwgMjksIDIsIDAsIDcsIDM2LCA2KSwgY3JlYXRlU2hhZG93KDAsIDEwLCAxMywgLTYsIDAsIDIwLCAzMSwgMywgMCwgOCwgMzgsIDcpLCBjcmVhdGVTaGFkb3coMCwgMTAsIDEzLCAtNiwgMCwgMjEsIDMzLCAzLCAwLCA4LCA0MCwgNyksIGNyZWF0ZVNoYWRvdygwLCAxMCwgMTQsIC02LCAwLCAyMiwgMzUsIDMsIDAsIDgsIDQyLCA3KSwgY3JlYXRlU2hhZG93KDAsIDExLCAxNCwgLTcsIDAsIDIzLCAzNiwgMywgMCwgOSwgNDQsIDgpLCBjcmVhdGVTaGFkb3coMCwgMTEsIDE1LCAtNywgMCwgMjQsIDM4LCAzLCAwLCA5LCA0NiwgOCldO1xuZXhwb3J0IGRlZmF1bHQgc2hhZG93czsiLCAiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImR1cmF0aW9uXCIsIFwiZWFzaW5nXCIsIFwiZGVsYXlcIl07XG4vLyBGb2xsb3cgaHR0cHM6Ly9tYXRlcmlhbC5nb29nbGUuY29tL21vdGlvbi9kdXJhdGlvbi1lYXNpbmcuaHRtbCNkdXJhdGlvbi1lYXNpbmctbmF0dXJhbC1lYXNpbmctY3VydmVzXG4vLyB0byBsZWFybiB0aGUgY29udGV4dCBpbiB3aGljaCBlYWNoIGVhc2luZyBzaG91bGQgYmUgdXNlZC5cbmV4cG9ydCBjb25zdCBlYXNpbmcgPSB7XG4gIC8vIFRoaXMgaXMgdGhlIG1vc3QgY29tbW9uIGVhc2luZyBjdXJ2ZS5cbiAgZWFzZUluT3V0OiAnY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKScsXG4gIC8vIE9iamVjdHMgZW50ZXIgdGhlIHNjcmVlbiBhdCBmdWxsIHZlbG9jaXR5IGZyb20gb2ZmLXNjcmVlbiBhbmRcbiAgLy8gc2xvd2x5IGRlY2VsZXJhdGUgdG8gYSByZXN0aW5nIHBvaW50LlxuICBlYXNlT3V0OiAnY3ViaWMtYmV6aWVyKDAuMCwgMCwgMC4yLCAxKScsXG4gIC8vIE9iamVjdHMgbGVhdmUgdGhlIHNjcmVlbiBhdCBmdWxsIHZlbG9jaXR5LiBUaGV5IGRvIG5vdCBkZWNlbGVyYXRlIHdoZW4gb2ZmLXNjcmVlbi5cbiAgZWFzZUluOiAnY3ViaWMtYmV6aWVyKDAuNCwgMCwgMSwgMSknLFxuICAvLyBUaGUgc2hhcnAgY3VydmUgaXMgdXNlZCBieSBvYmplY3RzIHRoYXQgbWF5IHJldHVybiB0byB0aGUgc2NyZWVuIGF0IGFueSB0aW1lLlxuICBzaGFycDogJ2N1YmljLWJlemllcigwLjQsIDAsIDAuNiwgMSknXG59O1xuXG4vLyBGb2xsb3cgaHR0cHM6Ly9tMi5tYXRlcmlhbC5pby9ndWlkZWxpbmVzL21vdGlvbi9kdXJhdGlvbi1lYXNpbmcuaHRtbCNkdXJhdGlvbi1lYXNpbmctY29tbW9uLWR1cmF0aW9uc1xuLy8gdG8gbGVhcm4gd2hlbiB1c2Ugd2hhdCB0aW1pbmdcbmV4cG9ydCBjb25zdCBkdXJhdGlvbiA9IHtcbiAgc2hvcnRlc3Q6IDE1MCxcbiAgc2hvcnRlcjogMjAwLFxuICBzaG9ydDogMjUwLFxuICAvLyBtb3N0IGJhc2ljIHJlY29tbWVuZGVkIHRpbWluZ1xuICBzdGFuZGFyZDogMzAwLFxuICAvLyB0aGlzIGlzIHRvIGJlIHVzZWQgaW4gY29tcGxleCBhbmltYXRpb25zXG4gIGNvbXBsZXg6IDM3NSxcbiAgLy8gcmVjb21tZW5kZWQgd2hlbiBzb21ldGhpbmcgaXMgZW50ZXJpbmcgc2NyZWVuXG4gIGVudGVyaW5nU2NyZWVuOiAyMjUsXG4gIC8vIHJlY29tbWVuZGVkIHdoZW4gc29tZXRoaW5nIGlzIGxlYXZpbmcgc2NyZWVuXG4gIGxlYXZpbmdTY3JlZW46IDE5NVxufTtcbmZ1bmN0aW9uIGZvcm1hdE1zKG1pbGxpc2Vjb25kcykge1xuICByZXR1cm4gYCR7TWF0aC5yb3VuZChtaWxsaXNlY29uZHMpfW1zYDtcbn1cbmZ1bmN0aW9uIGdldEF1dG9IZWlnaHREdXJhdGlvbihoZWlnaHQpIHtcbiAgaWYgKCFoZWlnaHQpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuICBjb25zdCBjb25zdGFudCA9IGhlaWdodCAvIDM2O1xuXG4gIC8vIGh0dHBzOi8vd3d3LndvbGZyYW1hbHBoYS5jb20vaW5wdXQvP2k9KDQrJTJCKzE1KyorKHgrJTJGKzM2KykrKiorMC4yNSslMkIrKHgrJTJGKzM2KSslMkYrNSkrKisxMFxuICByZXR1cm4gTWF0aC5yb3VuZCgoNCArIDE1ICogY29uc3RhbnQgKiogMC4yNSArIGNvbnN0YW50IC8gNSkgKiAxMCk7XG59XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVUcmFuc2l0aW9ucyhpbnB1dFRyYW5zaXRpb25zKSB7XG4gIGNvbnN0IG1lcmdlZEVhc2luZyA9IF9leHRlbmRzKHt9LCBlYXNpbmcsIGlucHV0VHJhbnNpdGlvbnMuZWFzaW5nKTtcbiAgY29uc3QgbWVyZ2VkRHVyYXRpb24gPSBfZXh0ZW5kcyh7fSwgZHVyYXRpb24sIGlucHV0VHJhbnNpdGlvbnMuZHVyYXRpb24pO1xuICBjb25zdCBjcmVhdGUgPSAocHJvcHMgPSBbJ2FsbCddLCBvcHRpb25zID0ge30pID0+IHtcbiAgICBjb25zdCB7XG4gICAgICAgIGR1cmF0aW9uOiBkdXJhdGlvbk9wdGlvbiA9IG1lcmdlZER1cmF0aW9uLnN0YW5kYXJkLFxuICAgICAgICBlYXNpbmc6IGVhc2luZ09wdGlvbiA9IG1lcmdlZEVhc2luZy5lYXNlSW5PdXQsXG4gICAgICAgIGRlbGF5ID0gMFxuICAgICAgfSA9IG9wdGlvbnMsXG4gICAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKG9wdGlvbnMsIF9leGNsdWRlZCk7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGNvbnN0IGlzU3RyaW5nID0gdmFsdWUgPT4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJztcbiAgICAgIC8vIElFMTEgc3VwcG9ydCwgcmVwbGFjZSB3aXRoIE51bWJlci5pc05hTlxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFsc1xuICAgICAgY29uc3QgaXNOdW1iZXIgPSB2YWx1ZSA9PiAhaXNOYU4ocGFyc2VGbG9hdCh2YWx1ZSkpO1xuICAgICAgaWYgKCFpc1N0cmluZyhwcm9wcykgJiYgIUFycmF5LmlzQXJyYXkocHJvcHMpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ01VSTogQXJndW1lbnQgXCJwcm9wc1wiIG11c3QgYmUgYSBzdHJpbmcgb3IgQXJyYXkuJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzTnVtYmVyKGR1cmF0aW9uT3B0aW9uKSAmJiAhaXNTdHJpbmcoZHVyYXRpb25PcHRpb24pKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYE1VSTogQXJndW1lbnQgXCJkdXJhdGlvblwiIG11c3QgYmUgYSBudW1iZXIgb3IgYSBzdHJpbmcgYnV0IGZvdW5kICR7ZHVyYXRpb25PcHRpb259LmApO1xuICAgICAgfVxuICAgICAgaWYgKCFpc1N0cmluZyhlYXNpbmdPcHRpb24pKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ01VSTogQXJndW1lbnQgXCJlYXNpbmdcIiBtdXN0IGJlIGEgc3RyaW5nLicpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc051bWJlcihkZWxheSkgJiYgIWlzU3RyaW5nKGRlbGF5KSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdNVUk6IEFyZ3VtZW50IFwiZGVsYXlcIiBtdXN0IGJlIGEgbnVtYmVyIG9yIGEgc3RyaW5nLicpO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgICAgICBjb25zb2xlLmVycm9yKFsnTVVJOiBTZWNvbmcgYXJndW1lbnQgb2YgdHJhbnNpdGlvbi5jcmVhdGUgbXVzdCBiZSBhbiBvYmplY3QuJywgXCJBcmd1bWVudHMgc2hvdWxkIGJlIGVpdGhlciBgY3JlYXRlKCdwcm9wMScsIG9wdGlvbnMpYCBvciBgY3JlYXRlKFsncHJvcDEnLCAncHJvcDInXSwgb3B0aW9ucylgXCJdLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICAgIGlmIChPYmplY3Qua2V5cyhvdGhlcikubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYE1VSTogVW5yZWNvZ25pemVkIGFyZ3VtZW50KHMpIFske09iamVjdC5rZXlzKG90aGVyKS5qb2luKCcsJyl9XS5gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIChBcnJheS5pc0FycmF5KHByb3BzKSA/IHByb3BzIDogW3Byb3BzXSkubWFwKGFuaW1hdGVkUHJvcCA9PiBgJHthbmltYXRlZFByb3B9ICR7dHlwZW9mIGR1cmF0aW9uT3B0aW9uID09PSAnc3RyaW5nJyA/IGR1cmF0aW9uT3B0aW9uIDogZm9ybWF0TXMoZHVyYXRpb25PcHRpb24pfSAke2Vhc2luZ09wdGlvbn0gJHt0eXBlb2YgZGVsYXkgPT09ICdzdHJpbmcnID8gZGVsYXkgOiBmb3JtYXRNcyhkZWxheSl9YCkuam9pbignLCcpO1xuICB9O1xuICByZXR1cm4gX2V4dGVuZHMoe1xuICAgIGdldEF1dG9IZWlnaHREdXJhdGlvbixcbiAgICBjcmVhdGVcbiAgfSwgaW5wdXRUcmFuc2l0aW9ucywge1xuICAgIGVhc2luZzogbWVyZ2VkRWFzaW5nLFxuICAgIGR1cmF0aW9uOiBtZXJnZWREdXJhdGlvblxuICB9KTtcbn0iLCAiLy8gV2UgbmVlZCB0byBjZW50cmFsaXplIHRoZSB6SW5kZXggZGVmaW5pdGlvbnMgYXMgdGhleSB3b3JrXG4vLyBsaWtlIGdsb2JhbCB2YWx1ZXMgaW4gdGhlIGJyb3dzZXIuXG5jb25zdCB6SW5kZXggPSB7XG4gIG1vYmlsZVN0ZXBwZXI6IDEwMDAsXG4gIGZhYjogMTA1MCxcbiAgc3BlZWREaWFsOiAxMDUwLFxuICBhcHBCYXI6IDExMDAsXG4gIGRyYXdlcjogMTIwMCxcbiAgbW9kYWw6IDEzMDAsXG4gIHNuYWNrYmFyOiAxNDAwLFxuICB0b29sdGlwOiAxNTAwXG59O1xuZXhwb3J0IGRlZmF1bHQgekluZGV4OyIsICIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBjcmVhdGVUaGVtZSBmcm9tICcuL2NyZWF0ZVRoZW1lJztcbmNvbnN0IGRlZmF1bHRUaGVtZSA9IGNyZWF0ZVRoZW1lKCk7XG5leHBvcnQgZGVmYXVsdCBkZWZhdWx0VGhlbWU7IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0IHN5c3RlbVVzZVRoZW1lUHJvcHMgZnJvbSAnQG11aS9zeXN0ZW0vdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgZGVmYXVsdFRoZW1lIGZyb20gJy4vZGVmYXVsdFRoZW1lJztcbmltcG9ydCBUSEVNRV9JRCBmcm9tICcuL2lkZW50aWZpZXInO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlVGhlbWVQcm9wcyh7XG4gIHByb3BzLFxuICBuYW1lXG59KSB7XG4gIHJldHVybiBzeXN0ZW1Vc2VUaGVtZVByb3BzKHtcbiAgICBwcm9wcyxcbiAgICBuYW1lLFxuICAgIGRlZmF1bHRUaGVtZSxcbiAgICB0aGVtZUlkOiBUSEVNRV9JRFxuICB9KTtcbn0iLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgY3JlYXRlU3R5bGVkLCB7IHNob3VsZEZvcndhcmRQcm9wIH0gZnJvbSAnQG11aS9zeXN0ZW0vY3JlYXRlU3R5bGVkJztcbmltcG9ydCBkZWZhdWx0VGhlbWUgZnJvbSAnLi9kZWZhdWx0VGhlbWUnO1xuaW1wb3J0IFRIRU1FX0lEIGZyb20gJy4vaWRlbnRpZmllcic7XG5leHBvcnQgY29uc3Qgcm9vdFNob3VsZEZvcndhcmRQcm9wID0gcHJvcCA9PiBzaG91bGRGb3J3YXJkUHJvcChwcm9wKSAmJiBwcm9wICE9PSAnY2xhc3Nlcyc7XG5leHBvcnQgY29uc3Qgc2xvdFNob3VsZEZvcndhcmRQcm9wID0gc2hvdWxkRm9yd2FyZFByb3A7XG5jb25zdCBzdHlsZWQgPSBjcmVhdGVTdHlsZWQoe1xuICB0aGVtZUlkOiBUSEVNRV9JRCxcbiAgZGVmYXVsdFRoZW1lLFxuICByb290U2hvdWxkRm9yd2FyZFByb3Bcbn0pO1xuZXhwb3J0IGRlZmF1bHQgc3R5bGVkOyIsICJpbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICdAbXVpL3V0aWxzL2NhcGl0YWxpemUnO1xuZXhwb3J0IGRlZmF1bHQgY2FwaXRhbGl6ZTsiLCAiaW1wb3J0IGNyZWF0ZUNoYWluZWRGdW5jdGlvbiBmcm9tICdAbXVpL3V0aWxzL2NyZWF0ZUNoYWluZWRGdW5jdGlvbic7XG5leHBvcnQgZGVmYXVsdCBjcmVhdGVDaGFpbmVkRnVuY3Rpb247IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgU3ZnSWNvbiBmcm9tICcuLi9TdmdJY29uJztcblxuLyoqXG4gKiBQcml2YXRlIG1vZHVsZSByZXNlcnZlZCBmb3IgQG11aSBwYWNrYWdlcy5cbiAqL1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVN2Z0ljb24ocGF0aCwgZGlzcGxheU5hbWUpIHtcbiAgZnVuY3Rpb24gQ29tcG9uZW50KHByb3BzLCByZWYpIHtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL19qc3goU3ZnSWNvbiwgX2V4dGVuZHMoe1xuICAgICAgXCJkYXRhLXRlc3RpZFwiOiBgJHtkaXNwbGF5TmFtZX1JY29uYCxcbiAgICAgIHJlZjogcmVmXG4gICAgfSwgcHJvcHMsIHtcbiAgICAgIGNoaWxkcmVuOiBwYXRoXG4gICAgfSkpO1xuICB9XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gTmVlZCB0byBzZXQgYGRpc3BsYXlOYW1lYCBvbiB0aGUgaW5uZXIgY29tcG9uZW50IGZvciBSZWFjdC5tZW1vLlxuICAgIC8vIFJlYWN0IHByaW9yIHRvIDE2LjE0IGlnbm9yZXMgYGRpc3BsYXlOYW1lYCBvbiB0aGUgd3JhcHBlci5cbiAgICBDb21wb25lbnQuZGlzcGxheU5hbWUgPSBgJHtkaXNwbGF5TmFtZX1JY29uYDtcbiAgfVxuICBDb21wb25lbnQubXVpTmFtZSA9IFN2Z0ljb24ubXVpTmFtZTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5tZW1vKCAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihDb21wb25lbnQpKTtcbn0iLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJjb2xvclwiLCBcImNvbXBvbmVudFwiLCBcImZvbnRTaXplXCIsIFwiaHRtbENvbG9yXCIsIFwiaW5oZXJpdFZpZXdCb3hcIiwgXCJ0aXRsZUFjY2Vzc1wiLCBcInZpZXdCb3hcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgY29tcG9zZUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgeyBnZXRTdmdJY29uVXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9zdmdJY29uQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNvbG9yLFxuICAgIGZvbnRTaXplLFxuICAgIGNsYXNzZXNcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIGNvbG9yICE9PSAnaW5oZXJpdCcgJiYgYGNvbG9yJHtjYXBpdGFsaXplKGNvbG9yKX1gLCBgZm9udFNpemUke2NhcGl0YWxpemUoZm9udFNpemUpfWBdXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0U3ZnSWNvblV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG59O1xuY29uc3QgU3ZnSWNvblJvb3QgPSBzdHlsZWQoJ3N2ZycsIHtcbiAgbmFtZTogJ011aVN2Z0ljb24nLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMucm9vdCwgb3duZXJTdGF0ZS5jb2xvciAhPT0gJ2luaGVyaXQnICYmIHN0eWxlc1tgY29sb3Ike2NhcGl0YWxpemUob3duZXJTdGF0ZS5jb2xvcil9YF0sIHN0eWxlc1tgZm9udFNpemUke2NhcGl0YWxpemUob3duZXJTdGF0ZS5mb250U2l6ZSl9YF1dO1xuICB9XG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4ge1xuICB2YXIgX3RoZW1lJHRyYW5zaXRpb25zLCBfdGhlbWUkdHJhbnNpdGlvbnMkY3IsIF90aGVtZSR0cmFuc2l0aW9uczIsIF90aGVtZSR0eXBvZ3JhcGh5LCBfdGhlbWUkdHlwb2dyYXBoeSRweFQsIF90aGVtZSR0eXBvZ3JhcGh5MiwgX3RoZW1lJHR5cG9ncmFwaHkyJHB4LCBfdGhlbWUkdHlwb2dyYXBoeTMsIF90aGVtZSR0eXBvZ3JhcGh5MyRweCwgX3BhbGV0dGUkb3duZXJTdGF0ZSRjLCBfcGFsZXR0ZSwgX3BhbGV0dGUyLCBfcGFsZXR0ZTM7XG4gIHJldHVybiB7XG4gICAgdXNlclNlbGVjdDogJ25vbmUnLFxuICAgIHdpZHRoOiAnMWVtJyxcbiAgICBoZWlnaHQ6ICcxZW0nLFxuICAgIGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snLFxuICAgIC8vIHRoZSA8c3ZnPiB3aWxsIGRlZmluZSB0aGUgcHJvcGVydHkgdGhhdCBoYXMgYGN1cnJlbnRDb2xvcmBcbiAgICAvLyBlLmcuIGhlcm9pY29ucyB1c2VzIGZpbGw9XCJub25lXCIgYW5kIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiXG4gICAgZmlsbDogb3duZXJTdGF0ZS5oYXNTdmdBc0NoaWxkID8gdW5kZWZpbmVkIDogJ2N1cnJlbnRDb2xvcicsXG4gICAgZmxleFNocmluazogMCxcbiAgICB0cmFuc2l0aW9uOiAoX3RoZW1lJHRyYW5zaXRpb25zID0gdGhlbWUudHJhbnNpdGlvbnMpID09IG51bGwgfHwgKF90aGVtZSR0cmFuc2l0aW9ucyRjciA9IF90aGVtZSR0cmFuc2l0aW9ucy5jcmVhdGUpID09IG51bGwgPyB2b2lkIDAgOiBfdGhlbWUkdHJhbnNpdGlvbnMkY3IuY2FsbChfdGhlbWUkdHJhbnNpdGlvbnMsICdmaWxsJywge1xuICAgICAgZHVyYXRpb246IChfdGhlbWUkdHJhbnNpdGlvbnMyID0gdGhlbWUudHJhbnNpdGlvbnMpID09IG51bGwgfHwgKF90aGVtZSR0cmFuc2l0aW9uczIgPSBfdGhlbWUkdHJhbnNpdGlvbnMyLmR1cmF0aW9uKSA9PSBudWxsID8gdm9pZCAwIDogX3RoZW1lJHRyYW5zaXRpb25zMi5zaG9ydGVyXG4gICAgfSksXG4gICAgZm9udFNpemU6IHtcbiAgICAgIGluaGVyaXQ6ICdpbmhlcml0JyxcbiAgICAgIHNtYWxsOiAoKF90aGVtZSR0eXBvZ3JhcGh5ID0gdGhlbWUudHlwb2dyYXBoeSkgPT0gbnVsbCB8fCAoX3RoZW1lJHR5cG9ncmFwaHkkcHhUID0gX3RoZW1lJHR5cG9ncmFwaHkucHhUb1JlbSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGVtZSR0eXBvZ3JhcGh5JHB4VC5jYWxsKF90aGVtZSR0eXBvZ3JhcGh5LCAyMCkpIHx8ICcxLjI1cmVtJyxcbiAgICAgIG1lZGl1bTogKChfdGhlbWUkdHlwb2dyYXBoeTIgPSB0aGVtZS50eXBvZ3JhcGh5KSA9PSBudWxsIHx8IChfdGhlbWUkdHlwb2dyYXBoeTIkcHggPSBfdGhlbWUkdHlwb2dyYXBoeTIucHhUb1JlbSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGVtZSR0eXBvZ3JhcGh5MiRweC5jYWxsKF90aGVtZSR0eXBvZ3JhcGh5MiwgMjQpKSB8fCAnMS41cmVtJyxcbiAgICAgIGxhcmdlOiAoKF90aGVtZSR0eXBvZ3JhcGh5MyA9IHRoZW1lLnR5cG9ncmFwaHkpID09IG51bGwgfHwgKF90aGVtZSR0eXBvZ3JhcGh5MyRweCA9IF90aGVtZSR0eXBvZ3JhcGh5My5weFRvUmVtKSA9PSBudWxsID8gdm9pZCAwIDogX3RoZW1lJHR5cG9ncmFwaHkzJHB4LmNhbGwoX3RoZW1lJHR5cG9ncmFwaHkzLCAzNSkpIHx8ICcyLjE4NzVyZW0nXG4gICAgfVtvd25lclN0YXRlLmZvbnRTaXplXSxcbiAgICAvLyBUT0RPIHY1IGRlcHJlY2F0ZSwgdjYgcmVtb3ZlIGZvciBzeFxuICAgIGNvbG9yOiAoX3BhbGV0dGUkb3duZXJTdGF0ZSRjID0gKF9wYWxldHRlID0gKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUpID09IG51bGwgfHwgKF9wYWxldHRlID0gX3BhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0pID09IG51bGwgPyB2b2lkIDAgOiBfcGFsZXR0ZS5tYWluKSAhPSBudWxsID8gX3BhbGV0dGUkb3duZXJTdGF0ZSRjIDoge1xuICAgICAgYWN0aW9uOiAoX3BhbGV0dGUyID0gKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUpID09IG51bGwgfHwgKF9wYWxldHRlMiA9IF9wYWxldHRlMi5hY3Rpb24pID09IG51bGwgPyB2b2lkIDAgOiBfcGFsZXR0ZTIuYWN0aXZlLFxuICAgICAgZGlzYWJsZWQ6IChfcGFsZXR0ZTMgPSAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZSkgPT0gbnVsbCB8fCAoX3BhbGV0dGUzID0gX3BhbGV0dGUzLmFjdGlvbikgPT0gbnVsbCA/IHZvaWQgMCA6IF9wYWxldHRlMy5kaXNhYmxlZCxcbiAgICAgIGluaGVyaXQ6IHVuZGVmaW5lZFxuICAgIH1bb3duZXJTdGF0ZS5jb2xvcl1cbiAgfTtcbn0pO1xuY29uc3QgU3ZnSWNvbiA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIFN2Z0ljb24oaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aVN2Z0ljb24nXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBjaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNvbG9yID0gJ2luaGVyaXQnLFxuICAgICAgY29tcG9uZW50ID0gJ3N2ZycsXG4gICAgICBmb250U2l6ZSA9ICdtZWRpdW0nLFxuICAgICAgaHRtbENvbG9yLFxuICAgICAgaW5oZXJpdFZpZXdCb3ggPSBmYWxzZSxcbiAgICAgIHRpdGxlQWNjZXNzLFxuICAgICAgdmlld0JveCA9ICcwIDAgMjQgMjQnXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IGhhc1N2Z0FzQ2hpbGQgPSAvKiNfX1BVUkVfXyovUmVhY3QuaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pICYmIGNoaWxkcmVuLnR5cGUgPT09ICdzdmcnO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY29sb3IsXG4gICAgY29tcG9uZW50LFxuICAgIGZvbnRTaXplLFxuICAgIGluc3RhbmNlRm9udFNpemU6IGluUHJvcHMuZm9udFNpemUsXG4gICAgaW5oZXJpdFZpZXdCb3gsXG4gICAgdmlld0JveCxcbiAgICBoYXNTdmdBc0NoaWxkXG4gIH0pO1xuICBjb25zdCBtb3JlID0ge307XG4gIGlmICghaW5oZXJpdFZpZXdCb3gpIHtcbiAgICBtb3JlLnZpZXdCb3ggPSB2aWV3Qm94O1xuICB9XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4cyhTdmdJY29uUm9vdCwgX2V4dGVuZHMoe1xuICAgIGFzOiBjb21wb25lbnQsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICBmb2N1c2FibGU6IFwiZmFsc2VcIixcbiAgICBjb2xvcjogaHRtbENvbG9yLFxuICAgIFwiYXJpYS1oaWRkZW5cIjogdGl0bGVBY2Nlc3MgPyB1bmRlZmluZWQgOiB0cnVlLFxuICAgIHJvbGU6IHRpdGxlQWNjZXNzID8gJ2ltZycgOiB1bmRlZmluZWQsXG4gICAgcmVmOiByZWZcbiAgfSwgbW9yZSwgb3RoZXIsIGhhc1N2Z0FzQ2hpbGQgJiYgY2hpbGRyZW4ucHJvcHMsIHtcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgIGNoaWxkcmVuOiBbaGFzU3ZnQXNDaGlsZCA/IGNoaWxkcmVuLnByb3BzLmNoaWxkcmVuIDogY2hpbGRyZW4sIHRpdGxlQWNjZXNzID8gLyojX19QVVJFX18qL19qc3goXCJ0aXRsZVwiLCB7XG4gICAgICBjaGlsZHJlbjogdGl0bGVBY2Nlc3NcbiAgICB9KSA6IG51bGxdXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gU3ZnSWNvbi5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gXHUyNTBDXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwIFdhcm5pbmcgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTEwXG4gIC8vIFx1MjUwMiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIFx1MjUwMlxuICAvLyBcdTI1MDIgICAgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuICAgICBcdTI1MDJcbiAgLy8gXHUyNTE0XHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTE4XG4gIC8qKlxuICAgKiBOb2RlIHBhc3NlZCBpbnRvIHRoZSBTVkcgZWxlbWVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgY29sb3Igb2YgdGhlIGNvbXBvbmVudC5cbiAgICogSXQgc3VwcG9ydHMgYm90aCBkZWZhdWx0IGFuZCBjdXN0b20gdGhlbWUgY29sb3JzLCB3aGljaCBjYW4gYmUgYWRkZWQgYXMgc2hvd24gaW4gdGhlXG4gICAqIFtwYWxldHRlIGN1c3RvbWl6YXRpb24gZ3VpZGVdKGh0dHBzOi8vbXVpLmNvbS9tYXRlcmlhbC11aS9jdXN0b21pemF0aW9uL3BhbGV0dGUvI2N1c3RvbS1jb2xvcnMpLlxuICAgKiBZb3UgY2FuIHVzZSB0aGUgYGh0bWxDb2xvcmAgcHJvcCB0byBhcHBseSBhIGNvbG9yIGF0dHJpYnV0ZSB0byB0aGUgU1ZHIGVsZW1lbnQuXG4gICAqIEBkZWZhdWx0ICdpbmhlcml0J1xuICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnaW5oZXJpdCcsICdhY3Rpb24nLCAnZGlzYWJsZWQnLCAncHJpbWFyeScsICdzZWNvbmRhcnknLCAnZXJyb3InLCAnaW5mbycsICdzdWNjZXNzJywgJ3dhcm5pbmcnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogVGhlIGZvbnRTaXplIGFwcGxpZWQgdG8gdGhlIGljb24uIERlZmF1bHRzIHRvIDI0cHgsIGJ1dCBjYW4gYmUgY29uZmlndXJlIHRvIGluaGVyaXQgZm9udCBzaXplLlxuICAgKiBAZGVmYXVsdCAnbWVkaXVtJ1xuICAgKi9cbiAgZm9udFNpemU6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnaW5oZXJpdCcsICdsYXJnZScsICdtZWRpdW0nLCAnc21hbGwnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIEFwcGxpZXMgYSBjb2xvciBhdHRyaWJ1dGUgdG8gdGhlIFNWRyBlbGVtZW50LlxuICAgKi9cbiAgaHRtbENvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgcm9vdCBub2RlIHdpbGwgaW5oZXJpdCB0aGUgY3VzdG9tIGBjb21wb25lbnRgJ3Mgdmlld0JveCBhbmQgdGhlIGB2aWV3Qm94YFxuICAgKiBwcm9wIHdpbGwgYmUgaWdub3JlZC5cbiAgICogVXNlZnVsIHdoZW4geW91IHdhbnQgdG8gcmVmZXJlbmNlIGEgY3VzdG9tIGBjb21wb25lbnRgIGFuZCBoYXZlIGBTdmdJY29uYCBwYXNzIHRoYXRcbiAgICogYGNvbXBvbmVudGAncyB2aWV3Qm94IHRvIHRoZSByb290IG5vZGUuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBpbmhlcml0Vmlld0JveDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgc2hhcGUtcmVuZGVyaW5nIGF0dHJpYnV0ZS4gVGhlIGJlaGF2aW9yIG9mIHRoZSBkaWZmZXJlbnQgb3B0aW9ucyBpcyBkZXNjcmliZWQgb24gdGhlXG4gICAqIFtNRE4gV2ViIERvY3NdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL1NWRy9BdHRyaWJ1dGUvc2hhcGUtcmVuZGVyaW5nKS5cbiAgICogSWYgeW91IGFyZSBoYXZpbmcgaXNzdWVzIHdpdGggYmx1cnJ5IGljb25zIHlvdSBzaG91bGQgaW52ZXN0aWdhdGUgdGhpcyBwcm9wLlxuICAgKi9cbiAgc2hhcGVSZW5kZXJpbmc6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBQcm92aWRlcyBhIGh1bWFuLXJlYWRhYmxlIHRpdGxlIGZvciB0aGUgZWxlbWVudCB0aGF0IGNvbnRhaW5zIGl0LlxuICAgKiBodHRwczovL3d3dy53My5vcmcvVFIvU1ZHLWFjY2Vzcy8jRXF1aXZhbGVudFxuICAgKi9cbiAgdGl0bGVBY2Nlc3M6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBBbGxvd3MgeW91IHRvIHJlZGVmaW5lIHdoYXQgdGhlIGNvb3JkaW5hdGVzIHdpdGhvdXQgdW5pdHMgbWVhbiBpbnNpZGUgYW4gU1ZHIGVsZW1lbnQuXG4gICAqIEZvciBleGFtcGxlLCBpZiB0aGUgU1ZHIGVsZW1lbnQgaXMgNTAwICh3aWR0aCkgYnkgMjAwIChoZWlnaHQpLFxuICAgKiBhbmQgeW91IHBhc3Mgdmlld0JveD1cIjAgMCA1MCAyMFwiLFxuICAgKiB0aGlzIG1lYW5zIHRoYXQgdGhlIGNvb3JkaW5hdGVzIGluc2lkZSB0aGUgU1ZHIHdpbGwgZ28gZnJvbSB0aGUgdG9wIGxlZnQgY29ybmVyICgwLDApXG4gICAqIHRvIGJvdHRvbSByaWdodCAoNTAsMjApIGFuZCBlYWNoIHVuaXQgd2lsbCBiZSB3b3J0aCAxMHB4LlxuICAgKiBAZGVmYXVsdCAnMCAwIDI0IDI0J1xuICAgKi9cbiAgdmlld0JveDogUHJvcFR5cGVzLnN0cmluZ1xufSA6IHZvaWQgMDtcblN2Z0ljb24ubXVpTmFtZSA9ICdTdmdJY29uJztcbmV4cG9ydCBkZWZhdWx0IFN2Z0ljb247IiwgImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0U3ZnSWNvblV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpU3ZnSWNvbicsIHNsb3QpO1xufVxuY29uc3Qgc3ZnSWNvbkNsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlTdmdJY29uJywgWydyb290JywgJ2NvbG9yUHJpbWFyeScsICdjb2xvclNlY29uZGFyeScsICdjb2xvckFjdGlvbicsICdjb2xvckVycm9yJywgJ2NvbG9yRGlzYWJsZWQnLCAnZm9udFNpemVJbmhlcml0JywgJ2ZvbnRTaXplU21hbGwnLCAnZm9udFNpemVNZWRpdW0nLCAnZm9udFNpemVMYXJnZSddKTtcbmV4cG9ydCBkZWZhdWx0IHN2Z0ljb25DbGFzc2VzOyIsICJpbXBvcnQgaXNNdWlFbGVtZW50IGZyb20gJ0BtdWkvdXRpbHMvaXNNdWlFbGVtZW50JztcbmV4cG9ydCBkZWZhdWx0IGlzTXVpRWxlbWVudDsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgdXNlSWQgZnJvbSAnQG11aS91dGlscy91c2VJZCc7XG5leHBvcnQgZGVmYXVsdCB1c2VJZDsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgdXNlQ29udHJvbGxlZCBmcm9tICdAbXVpL3V0aWxzL3VzZUNvbnRyb2xsZWQnO1xuZXhwb3J0IGRlZmF1bHQgdXNlQ29udHJvbGxlZDsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgdXNlRXZlbnRDYWxsYmFjayBmcm9tICdAbXVpL3V0aWxzL3VzZUV2ZW50Q2FsbGJhY2snO1xuZXhwb3J0IGRlZmF1bHQgdXNlRXZlbnRDYWxsYmFjazsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgdXNlRm9ya1JlZiBmcm9tICdAbXVpL3V0aWxzL3VzZUZvcmtSZWYnO1xuZXhwb3J0IGRlZmF1bHQgdXNlRm9ya1JlZjsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgdXNlSXNGb2N1c1Zpc2libGUgZnJvbSAnQG11aS91dGlscy91c2VJc0ZvY3VzVmlzaWJsZSc7XG5leHBvcnQgZGVmYXVsdCB1c2VJc0ZvY3VzVmlzaWJsZTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgby5fX3Byb3RvX18gPSBwO1xuICAgIHJldHVybiBvO1xuICB9O1xuICByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApO1xufSIsICJpbXBvcnQgc2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vc2V0UHJvdG90eXBlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pbmhlcml0c0xvb3NlKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcy5wcm90b3R5cGUpO1xuICBzdWJDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWJDbGFzcztcbiAgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufSIsICJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuZXhwb3J0IGRlZmF1bHQgUmVhY3QuY3JlYXRlQ29udGV4dChudWxsKTsiLCAiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfYXNzZXJ0VGhpc0luaXRpYWxpemVkIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWRcIjtcbmltcG9ydCBfaW5oZXJpdHNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZVwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgVHJhbnNpdGlvbkdyb3VwQ29udGV4dCBmcm9tICcuL1RyYW5zaXRpb25Hcm91cENvbnRleHQnO1xuaW1wb3J0IHsgZ2V0Q2hpbGRNYXBwaW5nLCBnZXRJbml0aWFsQ2hpbGRNYXBwaW5nLCBnZXROZXh0Q2hpbGRNYXBwaW5nIH0gZnJvbSAnLi91dGlscy9DaGlsZE1hcHBpbmcnO1xuXG52YXIgdmFsdWVzID0gT2JqZWN0LnZhbHVlcyB8fCBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopLm1hcChmdW5jdGlvbiAoaykge1xuICAgIHJldHVybiBvYmpba107XG4gIH0pO1xufTtcblxudmFyIGRlZmF1bHRQcm9wcyA9IHtcbiAgY29tcG9uZW50OiAnZGl2JyxcbiAgY2hpbGRGYWN0b3J5OiBmdW5jdGlvbiBjaGlsZEZhY3RvcnkoY2hpbGQpIHtcbiAgICByZXR1cm4gY2hpbGQ7XG4gIH1cbn07XG4vKipcbiAqIFRoZSBgPFRyYW5zaXRpb25Hcm91cD5gIGNvbXBvbmVudCBtYW5hZ2VzIGEgc2V0IG9mIHRyYW5zaXRpb24gY29tcG9uZW50c1xuICogKGA8VHJhbnNpdGlvbj5gIGFuZCBgPENTU1RyYW5zaXRpb24+YCkgaW4gYSBsaXN0LiBMaWtlIHdpdGggdGhlIHRyYW5zaXRpb25cbiAqIGNvbXBvbmVudHMsIGA8VHJhbnNpdGlvbkdyb3VwPmAgaXMgYSBzdGF0ZSBtYWNoaW5lIGZvciBtYW5hZ2luZyB0aGUgbW91bnRpbmdcbiAqIGFuZCB1bm1vdW50aW5nIG9mIGNvbXBvbmVudHMgb3ZlciB0aW1lLlxuICpcbiAqIENvbnNpZGVyIHRoZSBleGFtcGxlIGJlbG93LiBBcyBpdGVtcyBhcmUgcmVtb3ZlZCBvciBhZGRlZCB0byB0aGUgVG9kb0xpc3QgdGhlXG4gKiBgaW5gIHByb3AgaXMgdG9nZ2xlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBgPFRyYW5zaXRpb25Hcm91cD5gLlxuICpcbiAqIE5vdGUgdGhhdCBgPFRyYW5zaXRpb25Hcm91cD5gICBkb2VzIG5vdCBkZWZpbmUgYW55IGFuaW1hdGlvbiBiZWhhdmlvciFcbiAqIEV4YWN0bHkgX2hvd18gYSBsaXN0IGl0ZW0gYW5pbWF0ZXMgaXMgdXAgdG8gdGhlIGluZGl2aWR1YWwgdHJhbnNpdGlvblxuICogY29tcG9uZW50LiBUaGlzIG1lYW5zIHlvdSBjYW4gbWl4IGFuZCBtYXRjaCBhbmltYXRpb25zIGFjcm9zcyBkaWZmZXJlbnQgbGlzdFxuICogaXRlbXMuXG4gKi9cblxudmFyIFRyYW5zaXRpb25Hcm91cCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHNMb29zZShUcmFuc2l0aW9uR3JvdXAsIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFRyYW5zaXRpb25Hcm91cChwcm9wcywgY29udGV4dCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF90aGlzID0gX1JlYWN0JENvbXBvbmVudC5jYWxsKHRoaXMsIHByb3BzLCBjb250ZXh0KSB8fCB0aGlzO1xuXG4gICAgdmFyIGhhbmRsZUV4aXRlZCA9IF90aGlzLmhhbmRsZUV4aXRlZC5iaW5kKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKTsgLy8gSW5pdGlhbCBjaGlsZHJlbiBzaG91bGQgYWxsIGJlIGVudGVyaW5nLCBkZXBlbmRlbnQgb24gYXBwZWFyXG5cblxuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgY29udGV4dFZhbHVlOiB7XG4gICAgICAgIGlzTW91bnRpbmc6IHRydWVcbiAgICAgIH0sXG4gICAgICBoYW5kbGVFeGl0ZWQ6IGhhbmRsZUV4aXRlZCxcbiAgICAgIGZpcnN0UmVuZGVyOiB0cnVlXG4gICAgfTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gVHJhbnNpdGlvbkdyb3VwLnByb3RvdHlwZTtcblxuICBfcHJvdG8uY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICB0aGlzLm1vdW50ZWQgPSB0cnVlO1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgY29udGV4dFZhbHVlOiB7XG4gICAgICAgIGlzTW91bnRpbmc6IGZhbHNlXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmNvbXBvbmVudFdpbGxVbm1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgdGhpcy5tb3VudGVkID0gZmFsc2U7XG4gIH07XG5cbiAgVHJhbnNpdGlvbkdyb3VwLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9IGZ1bmN0aW9uIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhuZXh0UHJvcHMsIF9yZWYpIHtcbiAgICB2YXIgcHJldkNoaWxkTWFwcGluZyA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICAgIGhhbmRsZUV4aXRlZCA9IF9yZWYuaGFuZGxlRXhpdGVkLFxuICAgICAgICBmaXJzdFJlbmRlciA9IF9yZWYuZmlyc3RSZW5kZXI7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNoaWxkcmVuOiBmaXJzdFJlbmRlciA/IGdldEluaXRpYWxDaGlsZE1hcHBpbmcobmV4dFByb3BzLCBoYW5kbGVFeGl0ZWQpIDogZ2V0TmV4dENoaWxkTWFwcGluZyhuZXh0UHJvcHMsIHByZXZDaGlsZE1hcHBpbmcsIGhhbmRsZUV4aXRlZCksXG4gICAgICBmaXJzdFJlbmRlcjogZmFsc2VcbiAgICB9O1xuICB9IC8vIG5vZGUgaXMgYHVuZGVmaW5lZGAgd2hlbiB1c2VyIHByb3ZpZGVkIGBub2RlUmVmYCBwcm9wXG4gIDtcblxuICBfcHJvdG8uaGFuZGxlRXhpdGVkID0gZnVuY3Rpb24gaGFuZGxlRXhpdGVkKGNoaWxkLCBub2RlKSB7XG4gICAgdmFyIGN1cnJlbnRDaGlsZE1hcHBpbmcgPSBnZXRDaGlsZE1hcHBpbmcodGhpcy5wcm9wcy5jaGlsZHJlbik7XG4gICAgaWYgKGNoaWxkLmtleSBpbiBjdXJyZW50Q2hpbGRNYXBwaW5nKSByZXR1cm47XG5cbiAgICBpZiAoY2hpbGQucHJvcHMub25FeGl0ZWQpIHtcbiAgICAgIGNoaWxkLnByb3BzLm9uRXhpdGVkKG5vZGUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm1vdW50ZWQpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKHN0YXRlKSB7XG4gICAgICAgIHZhciBjaGlsZHJlbiA9IF9leHRlbmRzKHt9LCBzdGF0ZS5jaGlsZHJlbik7XG5cbiAgICAgICAgZGVsZXRlIGNoaWxkcmVuW2NoaWxkLmtleV07XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBDb21wb25lbnQgPSBfdGhpcyRwcm9wcy5jb21wb25lbnQsXG4gICAgICAgIGNoaWxkRmFjdG9yeSA9IF90aGlzJHByb3BzLmNoaWxkRmFjdG9yeSxcbiAgICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShfdGhpcyRwcm9wcywgW1wiY29tcG9uZW50XCIsIFwiY2hpbGRGYWN0b3J5XCJdKTtcblxuICAgIHZhciBjb250ZXh0VmFsdWUgPSB0aGlzLnN0YXRlLmNvbnRleHRWYWx1ZTtcbiAgICB2YXIgY2hpbGRyZW4gPSB2YWx1ZXModGhpcy5zdGF0ZS5jaGlsZHJlbikubWFwKGNoaWxkRmFjdG9yeSk7XG4gICAgZGVsZXRlIHByb3BzLmFwcGVhcjtcbiAgICBkZWxldGUgcHJvcHMuZW50ZXI7XG4gICAgZGVsZXRlIHByb3BzLmV4aXQ7XG5cbiAgICBpZiAoQ29tcG9uZW50ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbkdyb3VwQ29udGV4dC5Qcm92aWRlciwge1xuICAgICAgICB2YWx1ZTogY29udGV4dFZhbHVlXG4gICAgICB9LCBjaGlsZHJlbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRyYW5zaXRpb25Hcm91cENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgIHZhbHVlOiBjb250ZXh0VmFsdWVcbiAgICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChDb21wb25lbnQsIHByb3BzLCBjaGlsZHJlbikpO1xuICB9O1xuXG4gIHJldHVybiBUcmFuc2l0aW9uR3JvdXA7XG59KFJlYWN0LkNvbXBvbmVudCk7XG5cblRyYW5zaXRpb25Hcm91cC5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIC8qKlxuICAgKiBgPFRyYW5zaXRpb25Hcm91cD5gIHJlbmRlcnMgYSBgPGRpdj5gIGJ5IGRlZmF1bHQuIFlvdSBjYW4gY2hhbmdlIHRoaXNcbiAgICogYmVoYXZpb3IgYnkgcHJvdmlkaW5nIGEgYGNvbXBvbmVudGAgcHJvcC5cbiAgICogSWYgeW91IHVzZSBSZWFjdCB2MTYrIGFuZCB3b3VsZCBsaWtlIHRvIGF2b2lkIGEgd3JhcHBpbmcgYDxkaXY+YCBlbGVtZW50XG4gICAqIHlvdSBjYW4gcGFzcyBpbiBgY29tcG9uZW50PXtudWxsfWAuIFRoaXMgaXMgdXNlZnVsIGlmIHRoZSB3cmFwcGluZyBkaXZcbiAgICogYm9ya3MgeW91ciBjc3Mgc3R5bGVzLlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgKiBBIHNldCBvZiBgPFRyYW5zaXRpb24+YCBjb21wb25lbnRzLCB0aGF0IGFyZSB0b2dnbGVkIGBpbmAgYW5kIG91dCBhcyB0aGV5XG4gICAqIGxlYXZlLiB0aGUgYDxUcmFuc2l0aW9uR3JvdXA+YCB3aWxsIGluamVjdCBzcGVjaWZpYyB0cmFuc2l0aW9uIHByb3BzLCBzb1xuICAgKiByZW1lbWJlciB0byBzcHJlYWQgdGhlbSB0aHJvdWdoIGlmIHlvdSBhcmUgd3JhcHBpbmcgdGhlIGA8VHJhbnNpdGlvbj5gIGFzXG4gICAqIHdpdGggb3VyIGA8RmFkZT5gIGV4YW1wbGUuXG4gICAqXG4gICAqIFdoaWxlIHRoaXMgY29tcG9uZW50IGlzIG1lYW50IGZvciBtdWx0aXBsZSBgVHJhbnNpdGlvbmAgb3IgYENTU1RyYW5zaXRpb25gXG4gICAqIGNoaWxkcmVuLCBzb21ldGltZXMgeW91IG1heSB3YW50IHRvIGhhdmUgYSBzaW5nbGUgdHJhbnNpdGlvbiBjaGlsZCB3aXRoXG4gICAqIGNvbnRlbnQgdGhhdCB5b3Ugd2FudCB0byBiZSB0cmFuc2l0aW9uZWQgb3V0IGFuZCBpbiB3aGVuIHlvdSBjaGFuZ2UgaXRcbiAgICogKGUuZy4gcm91dGVzLCBpbWFnZXMgZXRjLikgSW4gdGhhdCBjYXNlIHlvdSBjYW4gY2hhbmdlIHRoZSBga2V5YCBwcm9wIG9mXG4gICAqIHRoZSB0cmFuc2l0aW9uIGNoaWxkIGFzIHlvdSBjaGFuZ2UgaXRzIGNvbnRlbnQsIHRoaXMgd2lsbCBjYXVzZVxuICAgKiBgVHJhbnNpdGlvbkdyb3VwYCB0byB0cmFuc2l0aW9uIHRoZSBjaGlsZCBvdXQgYW5kIGJhY2sgaW4uXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAqIEEgY29udmVuaWVuY2UgcHJvcCB0aGF0IGVuYWJsZXMgb3IgZGlzYWJsZXMgYXBwZWFyIGFuaW1hdGlvbnNcbiAgICogZm9yIGFsbCBjaGlsZHJlbi4gTm90ZSB0aGF0IHNwZWNpZnlpbmcgdGhpcyB3aWxsIG92ZXJyaWRlIGFueSBkZWZhdWx0cyBzZXRcbiAgICogb24gaW5kaXZpZHVhbCBjaGlsZHJlbiBUcmFuc2l0aW9ucy5cbiAgICovXG4gIGFwcGVhcjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEEgY29udmVuaWVuY2UgcHJvcCB0aGF0IGVuYWJsZXMgb3IgZGlzYWJsZXMgZW50ZXIgYW5pbWF0aW9uc1xuICAgKiBmb3IgYWxsIGNoaWxkcmVuLiBOb3RlIHRoYXQgc3BlY2lmeWluZyB0aGlzIHdpbGwgb3ZlcnJpZGUgYW55IGRlZmF1bHRzIHNldFxuICAgKiBvbiBpbmRpdmlkdWFsIGNoaWxkcmVuIFRyYW5zaXRpb25zLlxuICAgKi9cbiAgZW50ZXI6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBBIGNvbnZlbmllbmNlIHByb3AgdGhhdCBlbmFibGVzIG9yIGRpc2FibGVzIGV4aXQgYW5pbWF0aW9uc1xuICAgKiBmb3IgYWxsIGNoaWxkcmVuLiBOb3RlIHRoYXQgc3BlY2lmeWluZyB0aGlzIHdpbGwgb3ZlcnJpZGUgYW55IGRlZmF1bHRzIHNldFxuICAgKiBvbiBpbmRpdmlkdWFsIGNoaWxkcmVuIFRyYW5zaXRpb25zLlxuICAgKi9cbiAgZXhpdDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIFlvdSBtYXkgbmVlZCB0byBhcHBseSByZWFjdGl2ZSB1cGRhdGVzIHRvIGEgY2hpbGQgYXMgaXQgaXMgZXhpdGluZy5cbiAgICogVGhpcyBpcyBnZW5lcmFsbHkgZG9uZSBieSB1c2luZyBgY2xvbmVFbGVtZW50YCBob3dldmVyIGluIHRoZSBjYXNlIG9mIGFuIGV4aXRpbmdcbiAgICogY2hpbGQgdGhlIGVsZW1lbnQgaGFzIGFscmVhZHkgYmVlbiByZW1vdmVkIGFuZCBub3QgYWNjZXNzaWJsZSB0byB0aGUgY29uc3VtZXIuXG4gICAqXG4gICAqIElmIHlvdSBkbyBuZWVkIHRvIHVwZGF0ZSBhIGNoaWxkIGFzIGl0IGxlYXZlcyB5b3UgY2FuIHByb3ZpZGUgYSBgY2hpbGRGYWN0b3J5YFxuICAgKiB0byB3cmFwIGV2ZXJ5IGNoaWxkLCBldmVuIHRoZSBvbmVzIHRoYXQgYXJlIGxlYXZpbmcuXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKGNoaWxkOiBSZWFjdEVsZW1lbnQpIC0+IFJlYWN0RWxlbWVudFxuICAgKi9cbiAgY2hpbGRGYWN0b3J5OiBQcm9wVHlwZXMuZnVuY1xufSA6IHt9O1xuVHJhbnNpdGlvbkdyb3VwLmRlZmF1bHRQcm9wcyA9IGRlZmF1bHRQcm9wcztcbmV4cG9ydCBkZWZhdWx0IFRyYW5zaXRpb25Hcm91cDsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gIGlmIChzZWxmID09PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIH1cbiAgcmV0dXJuIHNlbGY7XG59IiwgImltcG9ydCB7IENoaWxkcmVuLCBjbG9uZUVsZW1lbnQsIGlzVmFsaWRFbGVtZW50IH0gZnJvbSAncmVhY3QnO1xuLyoqXG4gKiBHaXZlbiBgdGhpcy5wcm9wcy5jaGlsZHJlbmAsIHJldHVybiBhbiBvYmplY3QgbWFwcGluZyBrZXkgdG8gY2hpbGQuXG4gKlxuICogQHBhcmFtIHsqfSBjaGlsZHJlbiBgdGhpcy5wcm9wcy5jaGlsZHJlbmBcbiAqIEByZXR1cm4ge29iamVjdH0gTWFwcGluZyBvZiBrZXkgdG8gY2hpbGRcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hpbGRNYXBwaW5nKGNoaWxkcmVuLCBtYXBGbikge1xuICB2YXIgbWFwcGVyID0gZnVuY3Rpb24gbWFwcGVyKGNoaWxkKSB7XG4gICAgcmV0dXJuIG1hcEZuICYmIGlzVmFsaWRFbGVtZW50KGNoaWxkKSA/IG1hcEZuKGNoaWxkKSA6IGNoaWxkO1xuICB9O1xuXG4gIHZhciByZXN1bHQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBpZiAoY2hpbGRyZW4pIENoaWxkcmVuLm1hcChjaGlsZHJlbiwgZnVuY3Rpb24gKGMpIHtcbiAgICByZXR1cm4gYztcbiAgfSkuZm9yRWFjaChmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAvLyBydW4gdGhlIG1hcCBmdW5jdGlvbiBoZXJlIGluc3RlYWQgc28gdGhhdCB0aGUga2V5IGlzIHRoZSBjb21wdXRlZCBvbmVcbiAgICByZXN1bHRbY2hpbGQua2V5XSA9IG1hcHBlcihjaGlsZCk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuLyoqXG4gKiBXaGVuIHlvdSdyZSBhZGRpbmcgb3IgcmVtb3ZpbmcgY2hpbGRyZW4gc29tZSBtYXkgYmUgYWRkZWQgb3IgcmVtb3ZlZCBpbiB0aGVcbiAqIHNhbWUgcmVuZGVyIHBhc3MuIFdlIHdhbnQgdG8gc2hvdyAqYm90aCogc2luY2Ugd2Ugd2FudCB0byBzaW11bHRhbmVvdXNseVxuICogYW5pbWF0ZSBlbGVtZW50cyBpbiBhbmQgb3V0LiBUaGlzIGZ1bmN0aW9uIHRha2VzIGEgcHJldmlvdXMgc2V0IG9mIGtleXNcbiAqIGFuZCBhIG5ldyBzZXQgb2Yga2V5cyBhbmQgbWVyZ2VzIHRoZW0gd2l0aCBpdHMgYmVzdCBndWVzcyBvZiB0aGUgY29ycmVjdFxuICogb3JkZXJpbmcuIEluIHRoZSBmdXR1cmUgd2UgbWF5IGV4cG9zZSBzb21lIG9mIHRoZSB1dGlsaXRpZXMgaW5cbiAqIFJlYWN0TXVsdGlDaGlsZCB0byBtYWtlIHRoaXMgZWFzeSwgYnV0IGZvciBub3cgUmVhY3QgaXRzZWxmIGRvZXMgbm90XG4gKiBkaXJlY3RseSBoYXZlIHRoaXMgY29uY2VwdCBvZiB0aGUgdW5pb24gb2YgcHJldkNoaWxkcmVuIGFuZCBuZXh0Q2hpbGRyZW5cbiAqIHNvIHdlIGltcGxlbWVudCBpdCBoZXJlLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcmV2IHByZXYgY2hpbGRyZW4gYXMgcmV0dXJuZWQgZnJvbVxuICogYFJlYWN0VHJhbnNpdGlvbkNoaWxkTWFwcGluZy5nZXRDaGlsZE1hcHBpbmcoKWAuXG4gKiBAcGFyYW0ge29iamVjdH0gbmV4dCBuZXh0IGNoaWxkcmVuIGFzIHJldHVybmVkIGZyb21cbiAqIGBSZWFjdFRyYW5zaXRpb25DaGlsZE1hcHBpbmcuZ2V0Q2hpbGRNYXBwaW5nKClgLlxuICogQHJldHVybiB7b2JqZWN0fSBhIGtleSBzZXQgdGhhdCBjb250YWlucyBhbGwga2V5cyBpbiBgcHJldmAgYW5kIGFsbCBrZXlzXG4gKiBpbiBgbmV4dGAgaW4gYSByZWFzb25hYmxlIG9yZGVyLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUNoaWxkTWFwcGluZ3MocHJldiwgbmV4dCkge1xuICBwcmV2ID0gcHJldiB8fCB7fTtcbiAgbmV4dCA9IG5leHQgfHwge307XG5cbiAgZnVuY3Rpb24gZ2V0VmFsdWVGb3JLZXkoa2V5KSB7XG4gICAgcmV0dXJuIGtleSBpbiBuZXh0ID8gbmV4dFtrZXldIDogcHJldltrZXldO1xuICB9IC8vIEZvciBlYWNoIGtleSBvZiBgbmV4dGAsIHRoZSBsaXN0IG9mIGtleXMgdG8gaW5zZXJ0IGJlZm9yZSB0aGF0IGtleSBpblxuICAvLyB0aGUgY29tYmluZWQgbGlzdFxuXG5cbiAgdmFyIG5leHRLZXlzUGVuZGluZyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHZhciBwZW5kaW5nS2V5cyA9IFtdO1xuXG4gIGZvciAodmFyIHByZXZLZXkgaW4gcHJldikge1xuICAgIGlmIChwcmV2S2V5IGluIG5leHQpIHtcbiAgICAgIGlmIChwZW5kaW5nS2V5cy5sZW5ndGgpIHtcbiAgICAgICAgbmV4dEtleXNQZW5kaW5nW3ByZXZLZXldID0gcGVuZGluZ0tleXM7XG4gICAgICAgIHBlbmRpbmdLZXlzID0gW107XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlbmRpbmdLZXlzLnB1c2gocHJldktleSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGk7XG4gIHZhciBjaGlsZE1hcHBpbmcgPSB7fTtcblxuICBmb3IgKHZhciBuZXh0S2V5IGluIG5leHQpIHtcbiAgICBpZiAobmV4dEtleXNQZW5kaW5nW25leHRLZXldKSB7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbmV4dEtleXNQZW5kaW5nW25leHRLZXldLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBwZW5kaW5nTmV4dEtleSA9IG5leHRLZXlzUGVuZGluZ1tuZXh0S2V5XVtpXTtcbiAgICAgICAgY2hpbGRNYXBwaW5nW25leHRLZXlzUGVuZGluZ1tuZXh0S2V5XVtpXV0gPSBnZXRWYWx1ZUZvcktleShwZW5kaW5nTmV4dEtleSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2hpbGRNYXBwaW5nW25leHRLZXldID0gZ2V0VmFsdWVGb3JLZXkobmV4dEtleSk7XG4gIH0gLy8gRmluYWxseSwgYWRkIHRoZSBrZXlzIHdoaWNoIGRpZG4ndCBhcHBlYXIgYmVmb3JlIGFueSBrZXkgaW4gYG5leHRgXG5cblxuICBmb3IgKGkgPSAwOyBpIDwgcGVuZGluZ0tleXMubGVuZ3RoOyBpKyspIHtcbiAgICBjaGlsZE1hcHBpbmdbcGVuZGluZ0tleXNbaV1dID0gZ2V0VmFsdWVGb3JLZXkocGVuZGluZ0tleXNbaV0pO1xuICB9XG5cbiAgcmV0dXJuIGNoaWxkTWFwcGluZztcbn1cblxuZnVuY3Rpb24gZ2V0UHJvcChjaGlsZCwgcHJvcCwgcHJvcHMpIHtcbiAgcmV0dXJuIHByb3BzW3Byb3BdICE9IG51bGwgPyBwcm9wc1twcm9wXSA6IGNoaWxkLnByb3BzW3Byb3BdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5pdGlhbENoaWxkTWFwcGluZyhwcm9wcywgb25FeGl0ZWQpIHtcbiAgcmV0dXJuIGdldENoaWxkTWFwcGluZyhwcm9wcy5jaGlsZHJlbiwgZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgcmV0dXJuIGNsb25lRWxlbWVudChjaGlsZCwge1xuICAgICAgb25FeGl0ZWQ6IG9uRXhpdGVkLmJpbmQobnVsbCwgY2hpbGQpLFxuICAgICAgaW46IHRydWUsXG4gICAgICBhcHBlYXI6IGdldFByb3AoY2hpbGQsICdhcHBlYXInLCBwcm9wcyksXG4gICAgICBlbnRlcjogZ2V0UHJvcChjaGlsZCwgJ2VudGVyJywgcHJvcHMpLFxuICAgICAgZXhpdDogZ2V0UHJvcChjaGlsZCwgJ2V4aXQnLCBwcm9wcylcbiAgICB9KTtcbiAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0TmV4dENoaWxkTWFwcGluZyhuZXh0UHJvcHMsIHByZXZDaGlsZE1hcHBpbmcsIG9uRXhpdGVkKSB7XG4gIHZhciBuZXh0Q2hpbGRNYXBwaW5nID0gZ2V0Q2hpbGRNYXBwaW5nKG5leHRQcm9wcy5jaGlsZHJlbik7XG4gIHZhciBjaGlsZHJlbiA9IG1lcmdlQ2hpbGRNYXBwaW5ncyhwcmV2Q2hpbGRNYXBwaW5nLCBuZXh0Q2hpbGRNYXBwaW5nKTtcbiAgT2JqZWN0LmtleXMoY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBjaGlsZCA9IGNoaWxkcmVuW2tleV07XG4gICAgaWYgKCFpc1ZhbGlkRWxlbWVudChjaGlsZCkpIHJldHVybjtcbiAgICB2YXIgaGFzUHJldiA9IChrZXkgaW4gcHJldkNoaWxkTWFwcGluZyk7XG4gICAgdmFyIGhhc05leHQgPSAoa2V5IGluIG5leHRDaGlsZE1hcHBpbmcpO1xuICAgIHZhciBwcmV2Q2hpbGQgPSBwcmV2Q2hpbGRNYXBwaW5nW2tleV07XG4gICAgdmFyIGlzTGVhdmluZyA9IGlzVmFsaWRFbGVtZW50KHByZXZDaGlsZCkgJiYgIXByZXZDaGlsZC5wcm9wcy5pbjsgLy8gaXRlbSBpcyBuZXcgKGVudGVyaW5nKVxuXG4gICAgaWYgKGhhc05leHQgJiYgKCFoYXNQcmV2IHx8IGlzTGVhdmluZykpIHtcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdlbnRlcmluZycsIGtleSlcbiAgICAgIGNoaWxkcmVuW2tleV0gPSBjbG9uZUVsZW1lbnQoY2hpbGQsIHtcbiAgICAgICAgb25FeGl0ZWQ6IG9uRXhpdGVkLmJpbmQobnVsbCwgY2hpbGQpLFxuICAgICAgICBpbjogdHJ1ZSxcbiAgICAgICAgZXhpdDogZ2V0UHJvcChjaGlsZCwgJ2V4aXQnLCBuZXh0UHJvcHMpLFxuICAgICAgICBlbnRlcjogZ2V0UHJvcChjaGlsZCwgJ2VudGVyJywgbmV4dFByb3BzKVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICghaGFzTmV4dCAmJiBoYXNQcmV2ICYmICFpc0xlYXZpbmcpIHtcbiAgICAgIC8vIGl0ZW0gaXMgb2xkIChleGl0aW5nKVxuICAgICAgLy8gY29uc29sZS5sb2coJ2xlYXZpbmcnLCBrZXkpXG4gICAgICBjaGlsZHJlbltrZXldID0gY2xvbmVFbGVtZW50KGNoaWxkLCB7XG4gICAgICAgIGluOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChoYXNOZXh0ICYmIGhhc1ByZXYgJiYgaXNWYWxpZEVsZW1lbnQocHJldkNoaWxkKSkge1xuICAgICAgLy8gaXRlbSBoYXNuJ3QgY2hhbmdlZCB0cmFuc2l0aW9uIHN0YXRlc1xuICAgICAgLy8gY29weSBvdmVyIHRoZSBsYXN0IHRyYW5zaXRpb24gcHJvcHM7XG4gICAgICAvLyBjb25zb2xlLmxvZygndW5jaGFuZ2VkJywga2V5KVxuICAgICAgY2hpbGRyZW5ba2V5XSA9IGNsb25lRWxlbWVudChjaGlsZCwge1xuICAgICAgICBvbkV4aXRlZDogb25FeGl0ZWQuYmluZChudWxsLCBjaGlsZCksXG4gICAgICAgIGluOiBwcmV2Q2hpbGQucHJvcHMuaW4sXG4gICAgICAgIGV4aXQ6IGdldFByb3AoY2hpbGQsICdleGl0JywgbmV4dFByb3BzKSxcbiAgICAgICAgZW50ZXI6IGdldFByb3AoY2hpbGQsICdlbnRlcicsIG5leHRQcm9wcylcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBjaGlsZHJlbjtcbn0iLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiYWN0aW9uXCIsIFwiY2VudGVyUmlwcGxlXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJjb21wb25lbnRcIiwgXCJkaXNhYmxlZFwiLCBcImRpc2FibGVSaXBwbGVcIiwgXCJkaXNhYmxlVG91Y2hSaXBwbGVcIiwgXCJmb2N1c1JpcHBsZVwiLCBcImZvY3VzVmlzaWJsZUNsYXNzTmFtZVwiLCBcIkxpbmtDb21wb25lbnRcIiwgXCJvbkJsdXJcIiwgXCJvbkNsaWNrXCIsIFwib25Db250ZXh0TWVudVwiLCBcIm9uRHJhZ0xlYXZlXCIsIFwib25Gb2N1c1wiLCBcIm9uRm9jdXNWaXNpYmxlXCIsIFwib25LZXlEb3duXCIsIFwib25LZXlVcFwiLCBcIm9uTW91c2VEb3duXCIsIFwib25Nb3VzZUxlYXZlXCIsIFwib25Nb3VzZVVwXCIsIFwib25Ub3VjaEVuZFwiLCBcIm9uVG91Y2hNb3ZlXCIsIFwib25Ub3VjaFN0YXJ0XCIsIFwidGFiSW5kZXhcIiwgXCJUb3VjaFJpcHBsZVByb3BzXCIsIFwidG91Y2hSaXBwbGVSZWZcIiwgXCJ0eXBlXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHJlZlR5cGUgZnJvbSAnQG11aS91dGlscy9yZWZUeXBlJztcbmltcG9ydCBlbGVtZW50VHlwZUFjY2VwdGluZ1JlZiBmcm9tICdAbXVpL3V0aWxzL2VsZW1lbnRUeXBlQWNjZXB0aW5nUmVmJztcbmltcG9ydCBjb21wb3NlQ2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgdXNlRm9ya1JlZiBmcm9tICcuLi91dGlscy91c2VGb3JrUmVmJztcbmltcG9ydCB1c2VFdmVudENhbGxiYWNrIGZyb20gJy4uL3V0aWxzL3VzZUV2ZW50Q2FsbGJhY2snO1xuaW1wb3J0IHVzZUlzRm9jdXNWaXNpYmxlIGZyb20gJy4uL3V0aWxzL3VzZUlzRm9jdXNWaXNpYmxlJztcbmltcG9ydCBUb3VjaFJpcHBsZSBmcm9tICcuL1RvdWNoUmlwcGxlJztcbmltcG9ydCBidXR0b25CYXNlQ2xhc3NlcywgeyBnZXRCdXR0b25CYXNlVXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9idXR0b25CYXNlQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGRpc2FibGVkLFxuICAgIGZvY3VzVmlzaWJsZSxcbiAgICBmb2N1c1Zpc2libGVDbGFzc05hbWUsXG4gICAgY2xhc3Nlc1xuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgZGlzYWJsZWQgJiYgJ2Rpc2FibGVkJywgZm9jdXNWaXNpYmxlICYmICdmb2N1c1Zpc2libGUnXVxuICB9O1xuICBjb25zdCBjb21wb3NlZENsYXNzZXMgPSBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0QnV0dG9uQmFzZVV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG4gIGlmIChmb2N1c1Zpc2libGUgJiYgZm9jdXNWaXNpYmxlQ2xhc3NOYW1lKSB7XG4gICAgY29tcG9zZWRDbGFzc2VzLnJvb3QgKz0gYCAke2ZvY3VzVmlzaWJsZUNsYXNzTmFtZX1gO1xuICB9XG4gIHJldHVybiBjb21wb3NlZENsYXNzZXM7XG59O1xuZXhwb3J0IGNvbnN0IEJ1dHRvbkJhc2VSb290ID0gc3R5bGVkKCdidXR0b24nLCB7XG4gIG5hbWU6ICdNdWlCdXR0b25CYXNlJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlcy5yb290XG59KSh7XG4gIGRpc3BsYXk6ICdpbmxpbmUtZmxleCcsXG4gIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICBib3hTaXppbmc6ICdib3JkZXItYm94JyxcbiAgV2Via2l0VGFwSGlnaGxpZ2h0Q29sb3I6ICd0cmFuc3BhcmVudCcsXG4gIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgLy8gUmVzZXQgZGVmYXVsdCB2YWx1ZVxuICAvLyBXZSBkaXNhYmxlIHRoZSBmb2N1cyByaW5nIGZvciBtb3VzZSwgdG91Y2ggYW5kIGtleWJvYXJkIHVzZXJzLlxuICBvdXRsaW5lOiAwLFxuICBib3JkZXI6IDAsXG4gIG1hcmdpbjogMCxcbiAgLy8gUmVtb3ZlIHRoZSBtYXJnaW4gaW4gU2FmYXJpXG4gIGJvcmRlclJhZGl1czogMCxcbiAgcGFkZGluZzogMCxcbiAgLy8gUmVtb3ZlIHRoZSBwYWRkaW5nIGluIEZpcmVmb3hcbiAgY3Vyc29yOiAncG9pbnRlcicsXG4gIHVzZXJTZWxlY3Q6ICdub25lJyxcbiAgdmVydGljYWxBbGlnbjogJ21pZGRsZScsXG4gIE1vekFwcGVhcmFuY2U6ICdub25lJyxcbiAgLy8gUmVzZXRcbiAgV2Via2l0QXBwZWFyYW5jZTogJ25vbmUnLFxuICAvLyBSZXNldFxuICB0ZXh0RGVjb3JhdGlvbjogJ25vbmUnLFxuICAvLyBTbyB3ZSB0YWtlIHByZWNlZGVudCBvdmVyIHRoZSBzdHlsZSBvZiBhIG5hdGl2ZSA8YSAvPiBlbGVtZW50LlxuICBjb2xvcjogJ2luaGVyaXQnLFxuICAnJjo6LW1vei1mb2N1cy1pbm5lcic6IHtcbiAgICBib3JkZXJTdHlsZTogJ25vbmUnIC8vIFJlbW92ZSBGaXJlZm94IGRvdHRlZCBvdXRsaW5lLlxuICB9LFxuICBbYCYuJHtidXR0b25CYXNlQ2xhc3Nlcy5kaXNhYmxlZH1gXToge1xuICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgICAvLyBEaXNhYmxlIGxpbmsgaW50ZXJhY3Rpb25zXG4gICAgY3Vyc29yOiAnZGVmYXVsdCdcbiAgfSxcbiAgJ0BtZWRpYSBwcmludCc6IHtcbiAgICBjb2xvckFkanVzdDogJ2V4YWN0J1xuICB9XG59KTtcblxuLyoqXG4gKiBgQnV0dG9uQmFzZWAgY29udGFpbnMgYXMgZmV3IHN0eWxlcyBhcyBwb3NzaWJsZS5cbiAqIEl0IGFpbXMgdG8gYmUgYSBzaW1wbGUgYnVpbGRpbmcgYmxvY2sgZm9yIGNyZWF0aW5nIGEgYnV0dG9uLlxuICogSXQgY29udGFpbnMgYSBsb2FkIG9mIHN0eWxlIHJlc2V0IGFuZCBzb21lIGZvY3VzL3JpcHBsZSBsb2dpYy5cbiAqL1xuY29uc3QgQnV0dG9uQmFzZSA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIEJ1dHRvbkJhc2UoaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUJ1dHRvbkJhc2UnXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBhY3Rpb24sXG4gICAgICBjZW50ZXJSaXBwbGUgPSBmYWxzZSxcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29tcG9uZW50ID0gJ2J1dHRvbicsXG4gICAgICBkaXNhYmxlZCA9IGZhbHNlLFxuICAgICAgZGlzYWJsZVJpcHBsZSA9IGZhbHNlLFxuICAgICAgZGlzYWJsZVRvdWNoUmlwcGxlID0gZmFsc2UsXG4gICAgICBmb2N1c1JpcHBsZSA9IGZhbHNlLFxuICAgICAgTGlua0NvbXBvbmVudCA9ICdhJyxcbiAgICAgIG9uQmx1cixcbiAgICAgIG9uQ2xpY2ssXG4gICAgICBvbkNvbnRleHRNZW51LFxuICAgICAgb25EcmFnTGVhdmUsXG4gICAgICBvbkZvY3VzLFxuICAgICAgb25Gb2N1c1Zpc2libGUsXG4gICAgICBvbktleURvd24sXG4gICAgICBvbktleVVwLFxuICAgICAgb25Nb3VzZURvd24sXG4gICAgICBvbk1vdXNlTGVhdmUsXG4gICAgICBvbk1vdXNlVXAsXG4gICAgICBvblRvdWNoRW5kLFxuICAgICAgb25Ub3VjaE1vdmUsXG4gICAgICBvblRvdWNoU3RhcnQsXG4gICAgICB0YWJJbmRleCA9IDAsXG4gICAgICBUb3VjaFJpcHBsZVByb3BzLFxuICAgICAgdG91Y2hSaXBwbGVSZWYsXG4gICAgICB0eXBlXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IGJ1dHRvblJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3QgcmlwcGxlUmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBoYW5kbGVSaXBwbGVSZWYgPSB1c2VGb3JrUmVmKHJpcHBsZVJlZiwgdG91Y2hSaXBwbGVSZWYpO1xuICBjb25zdCB7XG4gICAgaXNGb2N1c1Zpc2libGVSZWYsXG4gICAgb25Gb2N1czogaGFuZGxlRm9jdXNWaXNpYmxlLFxuICAgIG9uQmx1cjogaGFuZGxlQmx1clZpc2libGUsXG4gICAgcmVmOiBmb2N1c1Zpc2libGVSZWZcbiAgfSA9IHVzZUlzRm9jdXNWaXNpYmxlKCk7XG4gIGNvbnN0IFtmb2N1c1Zpc2libGUsIHNldEZvY3VzVmlzaWJsZV0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGlmIChkaXNhYmxlZCAmJiBmb2N1c1Zpc2libGUpIHtcbiAgICBzZXRGb2N1c1Zpc2libGUoZmFsc2UpO1xuICB9XG4gIFJlYWN0LnVzZUltcGVyYXRpdmVIYW5kbGUoYWN0aW9uLCAoKSA9PiAoe1xuICAgIGZvY3VzVmlzaWJsZTogKCkgPT4ge1xuICAgICAgc2V0Rm9jdXNWaXNpYmxlKHRydWUpO1xuICAgICAgYnV0dG9uUmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICB9XG4gIH0pLCBbXSk7XG4gIGNvbnN0IFttb3VudGVkU3RhdGUsIHNldE1vdW50ZWRTdGF0ZV0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0TW91bnRlZFN0YXRlKHRydWUpO1xuICB9LCBbXSk7XG4gIGNvbnN0IGVuYWJsZVRvdWNoUmlwcGxlID0gbW91bnRlZFN0YXRlICYmICFkaXNhYmxlUmlwcGxlICYmICFkaXNhYmxlZDtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoZm9jdXNWaXNpYmxlICYmIGZvY3VzUmlwcGxlICYmICFkaXNhYmxlUmlwcGxlICYmIG1vdW50ZWRTdGF0ZSkge1xuICAgICAgcmlwcGxlUmVmLmN1cnJlbnQucHVsc2F0ZSgpO1xuICAgIH1cbiAgfSwgW2Rpc2FibGVSaXBwbGUsIGZvY3VzUmlwcGxlLCBmb2N1c1Zpc2libGUsIG1vdW50ZWRTdGF0ZV0pO1xuICBmdW5jdGlvbiB1c2VSaXBwbGVIYW5kbGVyKHJpcHBsZUFjdGlvbiwgZXZlbnRDYWxsYmFjaywgc2tpcFJpcHBsZUFjdGlvbiA9IGRpc2FibGVUb3VjaFJpcHBsZSkge1xuICAgIHJldHVybiB1c2VFdmVudENhbGxiYWNrKGV2ZW50ID0+IHtcbiAgICAgIGlmIChldmVudENhbGxiYWNrKSB7XG4gICAgICAgIGV2ZW50Q2FsbGJhY2soZXZlbnQpO1xuICAgICAgfVxuICAgICAgY29uc3QgaWdub3JlID0gc2tpcFJpcHBsZUFjdGlvbjtcbiAgICAgIGlmICghaWdub3JlICYmIHJpcHBsZVJlZi5jdXJyZW50KSB7XG4gICAgICAgIHJpcHBsZVJlZi5jdXJyZW50W3JpcHBsZUFjdGlvbl0oZXZlbnQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG4gIH1cbiAgY29uc3QgaGFuZGxlTW91c2VEb3duID0gdXNlUmlwcGxlSGFuZGxlcignc3RhcnQnLCBvbk1vdXNlRG93bik7XG4gIGNvbnN0IGhhbmRsZUNvbnRleHRNZW51ID0gdXNlUmlwcGxlSGFuZGxlcignc3RvcCcsIG9uQ29udGV4dE1lbnUpO1xuICBjb25zdCBoYW5kbGVEcmFnTGVhdmUgPSB1c2VSaXBwbGVIYW5kbGVyKCdzdG9wJywgb25EcmFnTGVhdmUpO1xuICBjb25zdCBoYW5kbGVNb3VzZVVwID0gdXNlUmlwcGxlSGFuZGxlcignc3RvcCcsIG9uTW91c2VVcCk7XG4gIGNvbnN0IGhhbmRsZU1vdXNlTGVhdmUgPSB1c2VSaXBwbGVIYW5kbGVyKCdzdG9wJywgZXZlbnQgPT4ge1xuICAgIGlmIChmb2N1c1Zpc2libGUpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICAgIGlmIChvbk1vdXNlTGVhdmUpIHtcbiAgICAgIG9uTW91c2VMZWF2ZShldmVudCk7XG4gICAgfVxuICB9KTtcbiAgY29uc3QgaGFuZGxlVG91Y2hTdGFydCA9IHVzZVJpcHBsZUhhbmRsZXIoJ3N0YXJ0Jywgb25Ub3VjaFN0YXJ0KTtcbiAgY29uc3QgaGFuZGxlVG91Y2hFbmQgPSB1c2VSaXBwbGVIYW5kbGVyKCdzdG9wJywgb25Ub3VjaEVuZCk7XG4gIGNvbnN0IGhhbmRsZVRvdWNoTW92ZSA9IHVzZVJpcHBsZUhhbmRsZXIoJ3N0b3AnLCBvblRvdWNoTW92ZSk7XG4gIGNvbnN0IGhhbmRsZUJsdXIgPSB1c2VSaXBwbGVIYW5kbGVyKCdzdG9wJywgZXZlbnQgPT4ge1xuICAgIGhhbmRsZUJsdXJWaXNpYmxlKGV2ZW50KTtcbiAgICBpZiAoaXNGb2N1c1Zpc2libGVSZWYuY3VycmVudCA9PT0gZmFsc2UpIHtcbiAgICAgIHNldEZvY3VzVmlzaWJsZShmYWxzZSk7XG4gICAgfVxuICAgIGlmIChvbkJsdXIpIHtcbiAgICAgIG9uQmx1cihldmVudCk7XG4gICAgfVxuICB9LCBmYWxzZSk7XG4gIGNvbnN0IGhhbmRsZUZvY3VzID0gdXNlRXZlbnRDYWxsYmFjayhldmVudCA9PiB7XG4gICAgLy8gRml4IGZvciBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzc3NjlcbiAgICBpZiAoIWJ1dHRvblJlZi5jdXJyZW50KSB7XG4gICAgICBidXR0b25SZWYuY3VycmVudCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQ7XG4gICAgfVxuICAgIGhhbmRsZUZvY3VzVmlzaWJsZShldmVudCk7XG4gICAgaWYgKGlzRm9jdXNWaXNpYmxlUmVmLmN1cnJlbnQgPT09IHRydWUpIHtcbiAgICAgIHNldEZvY3VzVmlzaWJsZSh0cnVlKTtcbiAgICAgIGlmIChvbkZvY3VzVmlzaWJsZSkge1xuICAgICAgICBvbkZvY3VzVmlzaWJsZShldmVudCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChvbkZvY3VzKSB7XG4gICAgICBvbkZvY3VzKGV2ZW50KTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBpc05vbk5hdGl2ZUJ1dHRvbiA9ICgpID0+IHtcbiAgICBjb25zdCBidXR0b24gPSBidXR0b25SZWYuY3VycmVudDtcbiAgICByZXR1cm4gY29tcG9uZW50ICYmIGNvbXBvbmVudCAhPT0gJ2J1dHRvbicgJiYgIShidXR0b24udGFnTmFtZSA9PT0gJ0EnICYmIGJ1dHRvbi5ocmVmKTtcbiAgfTtcblxuICAvKipcbiAgICogSUUxMSBzaGltIGZvciBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvS2V5Ym9hcmRFdmVudC9yZXBlYXRcbiAgICovXG4gIGNvbnN0IGtleWRvd25SZWYgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuICBjb25zdCBoYW5kbGVLZXlEb3duID0gdXNlRXZlbnRDYWxsYmFjayhldmVudCA9PiB7XG4gICAgLy8gQ2hlY2sgaWYga2V5IGlzIGFscmVhZHkgZG93biB0byBhdm9pZCByZXBlYXRzIGJlaW5nIGNvdW50ZWQgYXMgbXVsdGlwbGUgYWN0aXZhdGlvbnNcbiAgICBpZiAoZm9jdXNSaXBwbGUgJiYgIWtleWRvd25SZWYuY3VycmVudCAmJiBmb2N1c1Zpc2libGUgJiYgcmlwcGxlUmVmLmN1cnJlbnQgJiYgZXZlbnQua2V5ID09PSAnICcpIHtcbiAgICAgIGtleWRvd25SZWYuY3VycmVudCA9IHRydWU7XG4gICAgICByaXBwbGVSZWYuY3VycmVudC5zdG9wKGV2ZW50LCAoKSA9PiB7XG4gICAgICAgIHJpcHBsZVJlZi5jdXJyZW50LnN0YXJ0KGV2ZW50KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoZXZlbnQudGFyZ2V0ID09PSBldmVudC5jdXJyZW50VGFyZ2V0ICYmIGlzTm9uTmF0aXZlQnV0dG9uKCkgJiYgZXZlbnQua2V5ID09PSAnICcpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICAgIGlmIChvbktleURvd24pIHtcbiAgICAgIG9uS2V5RG93bihldmVudCk7XG4gICAgfVxuXG4gICAgLy8gS2V5Ym9hcmQgYWNjZXNzaWJpbGl0eSBmb3Igbm9uIGludGVyYWN0aXZlIGVsZW1lbnRzXG4gICAgaWYgKGV2ZW50LnRhcmdldCA9PT0gZXZlbnQuY3VycmVudFRhcmdldCAmJiBpc05vbk5hdGl2ZUJ1dHRvbigpICYmIGV2ZW50LmtleSA9PT0gJ0VudGVyJyAmJiAhZGlzYWJsZWQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBpZiAob25DbGljaykge1xuICAgICAgICBvbkNsaWNrKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICBjb25zdCBoYW5kbGVLZXlVcCA9IHVzZUV2ZW50Q2FsbGJhY2soZXZlbnQgPT4ge1xuICAgIC8vIGNhbGxpbmcgcHJldmVudERlZmF1bHQgaW4ga2V5VXAgb24gYSA8YnV0dG9uPiB3aWxsIG5vdCBkaXNwYXRjaCBhIGNsaWNrIGV2ZW50IGlmIFNwYWNlIGlzIHByZXNzZWRcbiAgICAvLyBodHRwczovL2NvZGVzYW5kYm94LmlvL3Avc2FuZGJveC9idXR0b24ta2V5dXAtcHJldmVudGRlZmF1bHQtZG43ZjBcbiAgICBpZiAoZm9jdXNSaXBwbGUgJiYgZXZlbnQua2V5ID09PSAnICcgJiYgcmlwcGxlUmVmLmN1cnJlbnQgJiYgZm9jdXNWaXNpYmxlICYmICFldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICBrZXlkb3duUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIHJpcHBsZVJlZi5jdXJyZW50LnN0b3AoZXZlbnQsICgpID0+IHtcbiAgICAgICAgcmlwcGxlUmVmLmN1cnJlbnQucHVsc2F0ZShldmVudCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKG9uS2V5VXApIHtcbiAgICAgIG9uS2V5VXAoZXZlbnQpO1xuICAgIH1cblxuICAgIC8vIEtleWJvYXJkIGFjY2Vzc2liaWxpdHkgZm9yIG5vbiBpbnRlcmFjdGl2ZSBlbGVtZW50c1xuICAgIGlmIChvbkNsaWNrICYmIGV2ZW50LnRhcmdldCA9PT0gZXZlbnQuY3VycmVudFRhcmdldCAmJiBpc05vbk5hdGl2ZUJ1dHRvbigpICYmIGV2ZW50LmtleSA9PT0gJyAnICYmICFldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICBvbkNsaWNrKGV2ZW50KTtcbiAgICB9XG4gIH0pO1xuICBsZXQgQ29tcG9uZW50UHJvcCA9IGNvbXBvbmVudDtcbiAgaWYgKENvbXBvbmVudFByb3AgPT09ICdidXR0b24nICYmIChvdGhlci5ocmVmIHx8IG90aGVyLnRvKSkge1xuICAgIENvbXBvbmVudFByb3AgPSBMaW5rQ29tcG9uZW50O1xuICB9XG4gIGNvbnN0IGJ1dHRvblByb3BzID0ge307XG4gIGlmIChDb21wb25lbnRQcm9wID09PSAnYnV0dG9uJykge1xuICAgIGJ1dHRvblByb3BzLnR5cGUgPSB0eXBlID09PSB1bmRlZmluZWQgPyAnYnV0dG9uJyA6IHR5cGU7XG4gICAgYnV0dG9uUHJvcHMuZGlzYWJsZWQgPSBkaXNhYmxlZDtcbiAgfSBlbHNlIHtcbiAgICBpZiAoIW90aGVyLmhyZWYgJiYgIW90aGVyLnRvKSB7XG4gICAgICBidXR0b25Qcm9wcy5yb2xlID0gJ2J1dHRvbic7XG4gICAgfVxuICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgYnV0dG9uUHJvcHNbJ2FyaWEtZGlzYWJsZWQnXSA9IGRpc2FibGVkO1xuICAgIH1cbiAgfVxuICBjb25zdCBoYW5kbGVSZWYgPSB1c2VGb3JrUmVmKHJlZiwgZm9jdXNWaXNpYmxlUmVmLCBidXR0b25SZWYpO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9ydWxlcy1vZi1ob29rc1xuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAoZW5hYmxlVG91Y2hSaXBwbGUgJiYgIXJpcHBsZVJlZi5jdXJyZW50KSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoWydNVUk6IFRoZSBgY29tcG9uZW50YCBwcm9wIHByb3ZpZGVkIHRvIEJ1dHRvbkJhc2UgaXMgaW52YWxpZC4nLCAnUGxlYXNlIG1ha2Ugc3VyZSB0aGUgY2hpbGRyZW4gcHJvcCBpcyByZW5kZXJlZCBpbiB0aGlzIGN1c3RvbSBjb21wb25lbnQuJ10uam9pbignXFxuJykpO1xuICAgICAgfVxuICAgIH0sIFtlbmFibGVUb3VjaFJpcHBsZV0pO1xuICB9XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjZW50ZXJSaXBwbGUsXG4gICAgY29tcG9uZW50LFxuICAgIGRpc2FibGVkLFxuICAgIGRpc2FibGVSaXBwbGUsXG4gICAgZGlzYWJsZVRvdWNoUmlwcGxlLFxuICAgIGZvY3VzUmlwcGxlLFxuICAgIHRhYkluZGV4LFxuICAgIGZvY3VzVmlzaWJsZVxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3hzKEJ1dHRvbkJhc2VSb290LCBfZXh0ZW5kcyh7XG4gICAgYXM6IENvbXBvbmVudFByb3AsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgIG9uQmx1cjogaGFuZGxlQmx1cixcbiAgICBvbkNsaWNrOiBvbkNsaWNrLFxuICAgIG9uQ29udGV4dE1lbnU6IGhhbmRsZUNvbnRleHRNZW51LFxuICAgIG9uRm9jdXM6IGhhbmRsZUZvY3VzLFxuICAgIG9uS2V5RG93bjogaGFuZGxlS2V5RG93bixcbiAgICBvbktleVVwOiBoYW5kbGVLZXlVcCxcbiAgICBvbk1vdXNlRG93bjogaGFuZGxlTW91c2VEb3duLFxuICAgIG9uTW91c2VMZWF2ZTogaGFuZGxlTW91c2VMZWF2ZSxcbiAgICBvbk1vdXNlVXA6IGhhbmRsZU1vdXNlVXAsXG4gICAgb25EcmFnTGVhdmU6IGhhbmRsZURyYWdMZWF2ZSxcbiAgICBvblRvdWNoRW5kOiBoYW5kbGVUb3VjaEVuZCxcbiAgICBvblRvdWNoTW92ZTogaGFuZGxlVG91Y2hNb3ZlLFxuICAgIG9uVG91Y2hTdGFydDogaGFuZGxlVG91Y2hTdGFydCxcbiAgICByZWY6IGhhbmRsZVJlZixcbiAgICB0YWJJbmRleDogZGlzYWJsZWQgPyAtMSA6IHRhYkluZGV4LFxuICAgIHR5cGU6IHR5cGVcbiAgfSwgYnV0dG9uUHJvcHMsIG90aGVyLCB7XG4gICAgY2hpbGRyZW46IFtjaGlsZHJlbiwgZW5hYmxlVG91Y2hSaXBwbGUgP1xuICAgIC8qI19fUFVSRV9fKi9cbiAgICAvKiBUb3VjaFJpcHBsZSBpcyBvbmx5IG5lZWRlZCBjbGllbnQtc2lkZSwgeDIgYm9vc3Qgb24gdGhlIHNlcnZlci4gKi9cbiAgICBfanN4KFRvdWNoUmlwcGxlLCBfZXh0ZW5kcyh7XG4gICAgICByZWY6IGhhbmRsZVJpcHBsZVJlZixcbiAgICAgIGNlbnRlcjogY2VudGVyUmlwcGxlXG4gICAgfSwgVG91Y2hSaXBwbGVQcm9wcykpIDogbnVsbF1cbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBCdXR0b25CYXNlLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyBcdTI1MENcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDAgV2FybmluZyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MTBcbiAgLy8gXHUyNTAyIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4gXHUyNTAyXG4gIC8vIFx1MjUwMiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIFx1MjUwMlxuICAvLyBcdTI1MTRcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MThcbiAgLyoqXG4gICAqIEEgcmVmIGZvciBpbXBlcmF0aXZlIGFjdGlvbnMuXG4gICAqIEl0IGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIGBmb2N1c1Zpc2libGUoKWAgYWN0aW9uLlxuICAgKi9cbiAgYWN0aW9uOiByZWZUeXBlLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgcmlwcGxlcyBhcmUgY2VudGVyZWQuXG4gICAqIFRoZXkgd29uJ3Qgc3RhcnQgYXQgdGhlIGN1cnNvciBpbnRlcmFjdGlvbiBwb3NpdGlvbi5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGNlbnRlclJpcHBsZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogZWxlbWVudFR5cGVBY2NlcHRpbmdSZWYsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgZGlzYWJsZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSByaXBwbGUgZWZmZWN0IGlzIGRpc2FibGVkLlxuICAgKlxuICAgKiBcdTI2QTBcdUZFMEYgV2l0aG91dCBhIHJpcHBsZSB0aGVyZSBpcyBubyBzdHlsaW5nIGZvciA6Zm9jdXMtdmlzaWJsZSBieSBkZWZhdWx0LiBCZSBzdXJlXG4gICAqIHRvIGhpZ2hsaWdodCB0aGUgZWxlbWVudCBieSBhcHBseWluZyBzZXBhcmF0ZSBzdHlsZXMgd2l0aCB0aGUgYC5NdWktZm9jdXNWaXNpYmxlYCBjbGFzcy5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVSaXBwbGU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgdG91Y2ggcmlwcGxlIGVmZmVjdCBpcyBkaXNhYmxlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVUb3VjaFJpcHBsZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBiYXNlIGJ1dHRvbiB3aWxsIGhhdmUgYSBrZXlib2FyZCBmb2N1cyByaXBwbGUuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBmb2N1c1JpcHBsZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGlzIHByb3AgY2FuIGhlbHAgaWRlbnRpZnkgd2hpY2ggZWxlbWVudCBoYXMga2V5Ym9hcmQgZm9jdXMuXG4gICAqIFRoZSBjbGFzcyBuYW1lIHdpbGwgYmUgYXBwbGllZCB3aGVuIHRoZSBlbGVtZW50IGdhaW5zIHRoZSBmb2N1cyB0aHJvdWdoIGtleWJvYXJkIGludGVyYWN0aW9uLlxuICAgKiBJdCdzIGEgcG9seWZpbGwgZm9yIHRoZSBbQ1NTIDpmb2N1cy12aXNpYmxlIHNlbGVjdG9yXShodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvc2VsZWN0b3JzLTQvI3RoZS1mb2N1cy12aXNpYmxlLXBzZXVkbykuXG4gICAqIFRoZSByYXRpb25hbGUgZm9yIHVzaW5nIHRoaXMgZmVhdHVyZSBbaXMgZXhwbGFpbmVkIGhlcmVdKGh0dHBzOi8vZ2l0aHViLmNvbS9XSUNHL2ZvY3VzLXZpc2libGUvYmxvYi9IRUFEL2V4cGxhaW5lci5tZCkuXG4gICAqIEEgW3BvbHlmaWxsIGNhbiBiZSB1c2VkXShodHRwczovL2dpdGh1Yi5jb20vV0lDRy9mb2N1cy12aXNpYmxlKSB0byBhcHBseSBhIGBmb2N1cy12aXNpYmxlYCBjbGFzcyB0byBvdGhlciBjb21wb25lbnRzXG4gICAqIGlmIG5lZWRlZC5cbiAgICovXG4gIGZvY3VzVmlzaWJsZUNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGhyZWY6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLmFueSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCB0byByZW5kZXIgYSBsaW5rIHdoZW4gdGhlIGBocmVmYCBwcm9wIGlzIHByb3ZpZGVkLlxuICAgKiBAZGVmYXVsdCAnYSdcbiAgICovXG4gIExpbmtDb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uQmx1cjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uQ29udGV4dE1lbnU6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25EcmFnTGVhdmU6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25Gb2N1czogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgZm9jdXNlZCB3aXRoIGEga2V5Ym9hcmQuXG4gICAqIFdlIHRyaWdnZXIgYSBgb25Gb2N1c2AgY2FsbGJhY2sgdG9vLlxuICAgKi9cbiAgb25Gb2N1c1Zpc2libGU6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25LZXlEb3duOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uS2V5VXA6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25Nb3VzZURvd246IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25Nb3VzZUxlYXZlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uTW91c2VVcDogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvblRvdWNoRW5kOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uVG91Y2hNb3ZlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uVG91Y2hTdGFydDogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBAZGVmYXVsdCAwXG4gICAqL1xuICB0YWJJbmRleDogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAqIFByb3BzIGFwcGxpZWQgdG8gdGhlIGBUb3VjaFJpcHBsZWAgZWxlbWVudC5cbiAgICovXG4gIFRvdWNoUmlwcGxlUHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBBIHJlZiB0aGF0IHBvaW50cyB0byB0aGUgYFRvdWNoUmlwcGxlYCBlbGVtZW50LlxuICAgKi9cbiAgdG91Y2hSaXBwbGVSZWY6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGN1cnJlbnQ6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBwdWxzYXRlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgICAgc3RhcnQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgICBzdG9wOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXG4gICAgfSlcbiAgfSldKSxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2J1dHRvbicsICdyZXNldCcsICdzdWJtaXQnXSksIFByb3BUeXBlcy5zdHJpbmddKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IEJ1dHRvbkJhc2U7IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNlbnRlclwiLCBcImNsYXNzZXNcIiwgXCJjbGFzc05hbWVcIl07XG5sZXQgXyA9IHQgPT4gdCxcbiAgX3QsXG4gIF90MixcbiAgX3QzLFxuICBfdDQ7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgVHJhbnNpdGlvbkdyb3VwIH0gZnJvbSAncmVhY3QtdHJhbnNpdGlvbi1ncm91cCc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IGtleWZyYW1lcyB9IGZyb20gJ0BtdWkvc3lzdGVtJztcbmltcG9ydCB1c2VUaW1lb3V0IGZyb20gJ0BtdWkvdXRpbHMvdXNlVGltZW91dCc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IFJpcHBsZSBmcm9tICcuL1JpcHBsZSc7XG5pbXBvcnQgdG91Y2hSaXBwbGVDbGFzc2VzIGZyb20gJy4vdG91Y2hSaXBwbGVDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCBEVVJBVElPTiA9IDU1MDtcbmV4cG9ydCBjb25zdCBERUxBWV9SSVBQTEUgPSA4MDtcbmNvbnN0IGVudGVyS2V5ZnJhbWUgPSBrZXlmcmFtZXMoX3QgfHwgKF90ID0gX2BcbiAgMCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMCk7XG4gICAgb3BhY2l0eTogMC4xO1xuICB9XG5cbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICBvcGFjaXR5OiAwLjM7XG4gIH1cbmApKTtcbmNvbnN0IGV4aXRLZXlmcmFtZSA9IGtleWZyYW1lcyhfdDIgfHwgKF90MiA9IF9gXG4gIDAlIHtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG5cbiAgMTAwJSB7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuYCkpO1xuY29uc3QgcHVsc2F0ZUtleWZyYW1lID0ga2V5ZnJhbWVzKF90MyB8fCAoX3QzID0gX2BcbiAgMCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gIH1cblxuICA1MCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMC45Mik7XG4gIH1cblxuICAxMDAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICB9XG5gKSk7XG5leHBvcnQgY29uc3QgVG91Y2hSaXBwbGVSb290ID0gc3R5bGVkKCdzcGFuJywge1xuICBuYW1lOiAnTXVpVG91Y2hSaXBwbGUnLFxuICBzbG90OiAnUm9vdCdcbn0pKHtcbiAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG4gIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICB6SW5kZXg6IDAsXG4gIHRvcDogMCxcbiAgcmlnaHQ6IDAsXG4gIGJvdHRvbTogMCxcbiAgbGVmdDogMCxcbiAgYm9yZGVyUmFkaXVzOiAnaW5oZXJpdCdcbn0pO1xuXG4vLyBUaGlzIGBzdHlsZWQoKWAgZnVuY3Rpb24gaW52b2tlcyBrZXlmcmFtZXMuIGBzdHlsZWQtY29tcG9uZW50c2Agb25seSBzdXBwb3J0cyBrZXlmcmFtZXNcbi8vIGluIHN0cmluZyB0ZW1wbGF0ZXMuIERvIG5vdCBjb252ZXJ0IHRoZXNlIHN0eWxlcyBpbiBKUyBvYmplY3QgYXMgaXQgd2lsbCBicmVhay5cbmV4cG9ydCBjb25zdCBUb3VjaFJpcHBsZVJpcHBsZSA9IHN0eWxlZChSaXBwbGUsIHtcbiAgbmFtZTogJ011aVRvdWNoUmlwcGxlJyxcbiAgc2xvdDogJ1JpcHBsZSdcbn0pKF90NCB8fCAoX3Q0ID0gX2BcbiAgb3BhY2l0eTogMDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuXG4gICYuJHswfSB7XG4gICAgb3BhY2l0eTogMC4zO1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgYW5pbWF0aW9uLW5hbWU6ICR7MH07XG4gICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAkezB9bXM7XG4gICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogJHswfTtcbiAgfVxuXG4gICYuJHswfSB7XG4gICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAkezB9bXM7XG4gIH1cblxuICAmIC4kezB9IHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogY3VycmVudENvbG9yO1xuICB9XG5cbiAgJiAuJHswfSB7XG4gICAgb3BhY2l0eTogMDtcbiAgICBhbmltYXRpb24tbmFtZTogJHswfTtcbiAgICBhbmltYXRpb24tZHVyYXRpb246ICR7MH1tcztcbiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiAkezB9O1xuICB9XG5cbiAgJiAuJHswfSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIC8qIEBub2ZsaXAgKi9cbiAgICBsZWZ0OiAwcHg7XG4gICAgdG9wOiAwO1xuICAgIGFuaW1hdGlvbi1uYW1lOiAkezB9O1xuICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogMjUwMG1zO1xuICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246ICR7MH07XG4gICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogaW5maW5pdGU7XG4gICAgYW5pbWF0aW9uLWRlbGF5OiAyMDBtcztcbiAgfVxuYCksIHRvdWNoUmlwcGxlQ2xhc3Nlcy5yaXBwbGVWaXNpYmxlLCBlbnRlcktleWZyYW1lLCBEVVJBVElPTiwgKHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLnRyYW5zaXRpb25zLmVhc2luZy5lYXNlSW5PdXQsIHRvdWNoUmlwcGxlQ2xhc3Nlcy5yaXBwbGVQdWxzYXRlLCAoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24uc2hvcnRlciwgdG91Y2hSaXBwbGVDbGFzc2VzLmNoaWxkLCB0b3VjaFJpcHBsZUNsYXNzZXMuY2hpbGRMZWF2aW5nLCBleGl0S2V5ZnJhbWUsIERVUkFUSU9OLCAoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUudHJhbnNpdGlvbnMuZWFzaW5nLmVhc2VJbk91dCwgdG91Y2hSaXBwbGVDbGFzc2VzLmNoaWxkUHVsc2F0ZSwgcHVsc2F0ZUtleWZyYW1lLCAoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUudHJhbnNpdGlvbnMuZWFzaW5nLmVhc2VJbk91dCk7XG5cbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqXG4gKiBUT0RPIHY1OiBNYWtlIHByaXZhdGVcbiAqL1xuY29uc3QgVG91Y2hSaXBwbGUgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBUb3VjaFJpcHBsZShpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpVG91Y2hSaXBwbGUnXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBjZW50ZXI6IGNlbnRlclByb3AgPSBmYWxzZSxcbiAgICAgIGNsYXNzZXMgPSB7fSxcbiAgICAgIGNsYXNzTmFtZVxuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBbcmlwcGxlcywgc2V0UmlwcGxlc10gPSBSZWFjdC51c2VTdGF0ZShbXSk7XG4gIGNvbnN0IG5leHRLZXkgPSBSZWFjdC51c2VSZWYoMCk7XG4gIGNvbnN0IHJpcHBsZUNhbGxiYWNrID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChyaXBwbGVDYWxsYmFjay5jdXJyZW50KSB7XG4gICAgICByaXBwbGVDYWxsYmFjay5jdXJyZW50KCk7XG4gICAgICByaXBwbGVDYWxsYmFjay5jdXJyZW50ID0gbnVsbDtcbiAgICB9XG4gIH0sIFtyaXBwbGVzXSk7XG5cbiAgLy8gVXNlZCB0byBmaWx0ZXIgb3V0IG1vdXNlIGVtdWxhdGVkIGV2ZW50cyBvbiBtb2JpbGUuXG4gIGNvbnN0IGlnbm9yaW5nTW91c2VEb3duID0gUmVhY3QudXNlUmVmKGZhbHNlKTtcbiAgLy8gV2UgdXNlIGEgdGltZXIgaW4gb3JkZXIgdG8gb25seSBzaG93IHRoZSByaXBwbGVzIGZvciB0b3VjaCBcImNsaWNrXCIgbGlrZSBldmVudHMuXG4gIC8vIFdlIGRvbid0IHdhbnQgdG8gZGlzcGxheSB0aGUgcmlwcGxlIGZvciB0b3VjaCBzY3JvbGwgZXZlbnRzLlxuICBjb25zdCBzdGFydFRpbWVyID0gdXNlVGltZW91dCgpO1xuXG4gIC8vIFRoaXMgaXMgdGhlIGhvb2sgY2FsbGVkIG9uY2UgdGhlIHByZXZpb3VzIHRpbWVvdXQgaXMgcmVhZHkuXG4gIGNvbnN0IHN0YXJ0VGltZXJDb21taXQgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IGNvbnRhaW5lciA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3Qgc3RhcnRDb21taXQgPSBSZWFjdC51c2VDYWxsYmFjayhwYXJhbXMgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIHB1bHNhdGUsXG4gICAgICByaXBwbGVYLFxuICAgICAgcmlwcGxlWSxcbiAgICAgIHJpcHBsZVNpemUsXG4gICAgICBjYlxuICAgIH0gPSBwYXJhbXM7XG4gICAgc2V0UmlwcGxlcyhvbGRSaXBwbGVzID0+IFsuLi5vbGRSaXBwbGVzLCAvKiNfX1BVUkVfXyovX2pzeChUb3VjaFJpcHBsZVJpcHBsZSwge1xuICAgICAgY2xhc3Nlczoge1xuICAgICAgICByaXBwbGU6IGNsc3goY2xhc3Nlcy5yaXBwbGUsIHRvdWNoUmlwcGxlQ2xhc3Nlcy5yaXBwbGUpLFxuICAgICAgICByaXBwbGVWaXNpYmxlOiBjbHN4KGNsYXNzZXMucmlwcGxlVmlzaWJsZSwgdG91Y2hSaXBwbGVDbGFzc2VzLnJpcHBsZVZpc2libGUpLFxuICAgICAgICByaXBwbGVQdWxzYXRlOiBjbHN4KGNsYXNzZXMucmlwcGxlUHVsc2F0ZSwgdG91Y2hSaXBwbGVDbGFzc2VzLnJpcHBsZVB1bHNhdGUpLFxuICAgICAgICBjaGlsZDogY2xzeChjbGFzc2VzLmNoaWxkLCB0b3VjaFJpcHBsZUNsYXNzZXMuY2hpbGQpLFxuICAgICAgICBjaGlsZExlYXZpbmc6IGNsc3goY2xhc3Nlcy5jaGlsZExlYXZpbmcsIHRvdWNoUmlwcGxlQ2xhc3Nlcy5jaGlsZExlYXZpbmcpLFxuICAgICAgICBjaGlsZFB1bHNhdGU6IGNsc3goY2xhc3Nlcy5jaGlsZFB1bHNhdGUsIHRvdWNoUmlwcGxlQ2xhc3Nlcy5jaGlsZFB1bHNhdGUpXG4gICAgICB9LFxuICAgICAgdGltZW91dDogRFVSQVRJT04sXG4gICAgICBwdWxzYXRlOiBwdWxzYXRlLFxuICAgICAgcmlwcGxlWDogcmlwcGxlWCxcbiAgICAgIHJpcHBsZVk6IHJpcHBsZVksXG4gICAgICByaXBwbGVTaXplOiByaXBwbGVTaXplXG4gICAgfSwgbmV4dEtleS5jdXJyZW50KV0pO1xuICAgIG5leHRLZXkuY3VycmVudCArPSAxO1xuICAgIHJpcHBsZUNhbGxiYWNrLmN1cnJlbnQgPSBjYjtcbiAgfSwgW2NsYXNzZXNdKTtcbiAgY29uc3Qgc3RhcnQgPSBSZWFjdC51c2VDYWxsYmFjaygoZXZlbnQgPSB7fSwgb3B0aW9ucyA9IHt9LCBjYiA9ICgpID0+IHt9KSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgcHVsc2F0ZSA9IGZhbHNlLFxuICAgICAgY2VudGVyID0gY2VudGVyUHJvcCB8fCBvcHRpb25zLnB1bHNhdGUsXG4gICAgICBmYWtlRWxlbWVudCA9IGZhbHNlIC8vIEZvciB0ZXN0IHB1cnBvc2VzXG4gICAgfSA9IG9wdGlvbnM7XG4gICAgaWYgKChldmVudCA9PSBudWxsID8gdm9pZCAwIDogZXZlbnQudHlwZSkgPT09ICdtb3VzZWRvd24nICYmIGlnbm9yaW5nTW91c2VEb3duLmN1cnJlbnQpIHtcbiAgICAgIGlnbm9yaW5nTW91c2VEb3duLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKChldmVudCA9PSBudWxsID8gdm9pZCAwIDogZXZlbnQudHlwZSkgPT09ICd0b3VjaHN0YXJ0Jykge1xuICAgICAgaWdub3JpbmdNb3VzZURvd24uY3VycmVudCA9IHRydWU7XG4gICAgfVxuICAgIGNvbnN0IGVsZW1lbnQgPSBmYWtlRWxlbWVudCA/IG51bGwgOiBjb250YWluZXIuY3VycmVudDtcbiAgICBjb25zdCByZWN0ID0gZWxlbWVudCA/IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkgOiB7XG4gICAgICB3aWR0aDogMCxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IDAsXG4gICAgICB0b3A6IDBcbiAgICB9O1xuXG4gICAgLy8gR2V0IHRoZSBzaXplIG9mIHRoZSByaXBwbGVcbiAgICBsZXQgcmlwcGxlWDtcbiAgICBsZXQgcmlwcGxlWTtcbiAgICBsZXQgcmlwcGxlU2l6ZTtcbiAgICBpZiAoY2VudGVyIHx8IGV2ZW50ID09PSB1bmRlZmluZWQgfHwgZXZlbnQuY2xpZW50WCA9PT0gMCAmJiBldmVudC5jbGllbnRZID09PSAwIHx8ICFldmVudC5jbGllbnRYICYmICFldmVudC50b3VjaGVzKSB7XG4gICAgICByaXBwbGVYID0gTWF0aC5yb3VuZChyZWN0LndpZHRoIC8gMik7XG4gICAgICByaXBwbGVZID0gTWF0aC5yb3VuZChyZWN0LmhlaWdodCAvIDIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGNsaWVudFgsXG4gICAgICAgIGNsaWVudFlcbiAgICAgIH0gPSBldmVudC50b3VjaGVzICYmIGV2ZW50LnRvdWNoZXMubGVuZ3RoID4gMCA/IGV2ZW50LnRvdWNoZXNbMF0gOiBldmVudDtcbiAgICAgIHJpcHBsZVggPSBNYXRoLnJvdW5kKGNsaWVudFggLSByZWN0LmxlZnQpO1xuICAgICAgcmlwcGxlWSA9IE1hdGgucm91bmQoY2xpZW50WSAtIHJlY3QudG9wKTtcbiAgICB9XG4gICAgaWYgKGNlbnRlcikge1xuICAgICAgcmlwcGxlU2l6ZSA9IE1hdGguc3FydCgoMiAqIHJlY3Qud2lkdGggKiogMiArIHJlY3QuaGVpZ2h0ICoqIDIpIC8gMyk7XG5cbiAgICAgIC8vIEZvciBzb21lIHJlYXNvbiB0aGUgYW5pbWF0aW9uIGlzIGJyb2tlbiBvbiBNb2JpbGUgQ2hyb21lIGlmIHRoZSBzaXplIGlzIGV2ZW4uXG4gICAgICBpZiAocmlwcGxlU2l6ZSAlIDIgPT09IDApIHtcbiAgICAgICAgcmlwcGxlU2l6ZSArPSAxO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzaXplWCA9IE1hdGgubWF4KE1hdGguYWJzKChlbGVtZW50ID8gZWxlbWVudC5jbGllbnRXaWR0aCA6IDApIC0gcmlwcGxlWCksIHJpcHBsZVgpICogMiArIDI7XG4gICAgICBjb25zdCBzaXplWSA9IE1hdGgubWF4KE1hdGguYWJzKChlbGVtZW50ID8gZWxlbWVudC5jbGllbnRIZWlnaHQgOiAwKSAtIHJpcHBsZVkpLCByaXBwbGVZKSAqIDIgKyAyO1xuICAgICAgcmlwcGxlU2l6ZSA9IE1hdGguc3FydChzaXplWCAqKiAyICsgc2l6ZVkgKiogMik7XG4gICAgfVxuXG4gICAgLy8gVG91Y2hlIGRldmljZXNcbiAgICBpZiAoZXZlbnQgIT0gbnVsbCAmJiBldmVudC50b3VjaGVzKSB7XG4gICAgICAvLyBjaGVjayB0aGF0IHRoaXMgaXNuJ3QgYW5vdGhlciB0b3VjaHN0YXJ0IGR1ZSB0byBtdWx0aXRvdWNoXG4gICAgICAvLyBvdGhlcndpc2Ugd2Ugd2lsbCBvbmx5IGNsZWFyIGEgc2luZ2xlIHRpbWVyIHdoZW4gdW5tb3VudGluZyB3aGlsZSB0d29cbiAgICAgIC8vIGFyZSBydW5uaW5nXG4gICAgICBpZiAoc3RhcnRUaW1lckNvbW1pdC5jdXJyZW50ID09PSBudWxsKSB7XG4gICAgICAgIC8vIFByZXBhcmUgdGhlIHJpcHBsZSBlZmZlY3QuXG4gICAgICAgIHN0YXJ0VGltZXJDb21taXQuY3VycmVudCA9ICgpID0+IHtcbiAgICAgICAgICBzdGFydENvbW1pdCh7XG4gICAgICAgICAgICBwdWxzYXRlLFxuICAgICAgICAgICAgcmlwcGxlWCxcbiAgICAgICAgICAgIHJpcHBsZVksXG4gICAgICAgICAgICByaXBwbGVTaXplLFxuICAgICAgICAgICAgY2JcbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgLy8gRGVsYXkgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgcmlwcGxlIGVmZmVjdC5cbiAgICAgICAgLy8gV2UgaGF2ZSB0byBtYWtlIGEgdHJhZGVvZmYgd2l0aCB0aGlzIGRlbGF5IHZhbHVlLlxuICAgICAgICBzdGFydFRpbWVyLnN0YXJ0KERFTEFZX1JJUFBMRSwgKCkgPT4ge1xuICAgICAgICAgIGlmIChzdGFydFRpbWVyQ29tbWl0LmN1cnJlbnQpIHtcbiAgICAgICAgICAgIHN0YXJ0VGltZXJDb21taXQuY3VycmVudCgpO1xuICAgICAgICAgICAgc3RhcnRUaW1lckNvbW1pdC5jdXJyZW50ID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzdGFydENvbW1pdCh7XG4gICAgICAgIHB1bHNhdGUsXG4gICAgICAgIHJpcHBsZVgsXG4gICAgICAgIHJpcHBsZVksXG4gICAgICAgIHJpcHBsZVNpemUsXG4gICAgICAgIGNiXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIFtjZW50ZXJQcm9wLCBzdGFydENvbW1pdCwgc3RhcnRUaW1lcl0pO1xuICBjb25zdCBwdWxzYXRlID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHN0YXJ0KHt9LCB7XG4gICAgICBwdWxzYXRlOiB0cnVlXG4gICAgfSk7XG4gIH0sIFtzdGFydF0pO1xuICBjb25zdCBzdG9wID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50LCBjYikgPT4ge1xuICAgIHN0YXJ0VGltZXIuY2xlYXIoKTtcblxuICAgIC8vIFRoZSB0b3VjaCBpbnRlcmFjdGlvbiBvY2N1cnMgdG9vIHF1aWNrbHkuXG4gICAgLy8gV2Ugc3RpbGwgd2FudCB0byBzaG93IHJpcHBsZSBlZmZlY3QuXG4gICAgaWYgKChldmVudCA9PSBudWxsID8gdm9pZCAwIDogZXZlbnQudHlwZSkgPT09ICd0b3VjaGVuZCcgJiYgc3RhcnRUaW1lckNvbW1pdC5jdXJyZW50KSB7XG4gICAgICBzdGFydFRpbWVyQ29tbWl0LmN1cnJlbnQoKTtcbiAgICAgIHN0YXJ0VGltZXJDb21taXQuY3VycmVudCA9IG51bGw7XG4gICAgICBzdGFydFRpbWVyLnN0YXJ0KDAsICgpID0+IHtcbiAgICAgICAgc3RvcChldmVudCwgY2IpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHN0YXJ0VGltZXJDb21taXQuY3VycmVudCA9IG51bGw7XG4gICAgc2V0UmlwcGxlcyhvbGRSaXBwbGVzID0+IHtcbiAgICAgIGlmIChvbGRSaXBwbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIG9sZFJpcHBsZXMuc2xpY2UoMSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gb2xkUmlwcGxlcztcbiAgICB9KTtcbiAgICByaXBwbGVDYWxsYmFjay5jdXJyZW50ID0gY2I7XG4gIH0sIFtzdGFydFRpbWVyXSk7XG4gIFJlYWN0LnVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiAoe1xuICAgIHB1bHNhdGUsXG4gICAgc3RhcnQsXG4gICAgc3RvcFxuICB9KSwgW3B1bHNhdGUsIHN0YXJ0LCBzdG9wXSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChUb3VjaFJpcHBsZVJvb3QsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsc3godG91Y2hSaXBwbGVDbGFzc2VzLnJvb3QsIGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICByZWY6IGNvbnRhaW5lclxuICB9LCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeChUcmFuc2l0aW9uR3JvdXAsIHtcbiAgICAgIGNvbXBvbmVudDogbnVsbCxcbiAgICAgIGV4aXQ6IHRydWUsXG4gICAgICBjaGlsZHJlbjogcmlwcGxlc1xuICAgIH0pXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gVG91Y2hSaXBwbGUucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgcmlwcGxlIHN0YXJ0cyBhdCB0aGUgY2VudGVyIG9mIHRoZSBjb21wb25lbnRcbiAgICogcmF0aGVyIHRoYW4gYXQgdGhlIHBvaW50IG9mIGludGVyYWN0aW9uLlxuICAgKi9cbiAgY2VudGVyOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmdcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBUb3VjaFJpcHBsZTsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5cbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqL1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmZ1bmN0aW9uIFJpcHBsZShwcm9wcykge1xuICBjb25zdCB7XG4gICAgY2xhc3NOYW1lLFxuICAgIGNsYXNzZXMsXG4gICAgcHVsc2F0ZSA9IGZhbHNlLFxuICAgIHJpcHBsZVgsXG4gICAgcmlwcGxlWSxcbiAgICByaXBwbGVTaXplLFxuICAgIGluOiBpblByb3AsXG4gICAgb25FeGl0ZWQsXG4gICAgdGltZW91dFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IFtsZWF2aW5nLCBzZXRMZWF2aW5nXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgcmlwcGxlQ2xhc3NOYW1lID0gY2xzeChjbGFzc05hbWUsIGNsYXNzZXMucmlwcGxlLCBjbGFzc2VzLnJpcHBsZVZpc2libGUsIHB1bHNhdGUgJiYgY2xhc3Nlcy5yaXBwbGVQdWxzYXRlKTtcbiAgY29uc3QgcmlwcGxlU3R5bGVzID0ge1xuICAgIHdpZHRoOiByaXBwbGVTaXplLFxuICAgIGhlaWdodDogcmlwcGxlU2l6ZSxcbiAgICB0b3A6IC0ocmlwcGxlU2l6ZSAvIDIpICsgcmlwcGxlWSxcbiAgICBsZWZ0OiAtKHJpcHBsZVNpemUgLyAyKSArIHJpcHBsZVhcbiAgfTtcbiAgY29uc3QgY2hpbGRDbGFzc05hbWUgPSBjbHN4KGNsYXNzZXMuY2hpbGQsIGxlYXZpbmcgJiYgY2xhc3Nlcy5jaGlsZExlYXZpbmcsIHB1bHNhdGUgJiYgY2xhc3Nlcy5jaGlsZFB1bHNhdGUpO1xuICBpZiAoIWluUHJvcCAmJiAhbGVhdmluZykge1xuICAgIHNldExlYXZpbmcodHJ1ZSk7XG4gIH1cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWluUHJvcCAmJiBvbkV4aXRlZCAhPSBudWxsKSB7XG4gICAgICAvLyByZWFjdC10cmFuc2l0aW9uLWdyb3VwI29uRXhpdGVkXG4gICAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KG9uRXhpdGVkLCB0aW1lb3V0KTtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfSwgW29uRXhpdGVkLCBpblByb3AsIHRpbWVvdXRdKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFwic3BhblwiLCB7XG4gICAgY2xhc3NOYW1lOiByaXBwbGVDbGFzc05hbWUsXG4gICAgc3R5bGU6IHJpcHBsZVN0eWxlcyxcbiAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3goXCJzcGFuXCIsIHtcbiAgICAgIGNsYXNzTmFtZTogY2hpbGRDbGFzc05hbWVcbiAgICB9KVxuICB9KTtcbn1cbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFJpcHBsZS5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIEBpZ25vcmUgLSBpbmplY3RlZCBmcm9tIFRyYW5zaXRpb25Hcm91cFxuICAgKi9cbiAgaW46IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogQGlnbm9yZSAtIGluamVjdGVkIGZyb20gVHJhbnNpdGlvbkdyb3VwXG4gICAqL1xuICBvbkV4aXRlZDogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSByaXBwbGUgcHVsc2F0ZXMsIHR5cGljYWxseSBpbmRpY2F0aW5nIHRoZSBrZXlib2FyZCBmb2N1cyBzdGF0ZSBvZiBhbiBlbGVtZW50LlxuICAgKi9cbiAgcHVsc2F0ZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBEaWFtZXRlciBvZiB0aGUgcmlwcGxlLlxuICAgKi9cbiAgcmlwcGxlU2l6ZTogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAqIEhvcml6b250YWwgcG9zaXRpb24gb2YgdGhlIHJpcHBsZSBjZW50ZXIuXG4gICAqL1xuICByaXBwbGVYOiBQcm9wVHlwZXMubnVtYmVyLFxuICAvKipcbiAgICogVmVydGljYWwgcG9zaXRpb24gb2YgdGhlIHJpcHBsZSBjZW50ZXIuXG4gICAqL1xuICByaXBwbGVZOiBQcm9wVHlwZXMubnVtYmVyLFxuICAvKipcbiAgICogZXhpdCBkZWxheVxuICAgKi9cbiAgdGltZW91dDogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgUmlwcGxlOyIsICJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRvdWNoUmlwcGxlVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlUb3VjaFJpcHBsZScsIHNsb3QpO1xufVxuY29uc3QgdG91Y2hSaXBwbGVDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpVG91Y2hSaXBwbGUnLCBbJ3Jvb3QnLCAncmlwcGxlJywgJ3JpcHBsZVZpc2libGUnLCAncmlwcGxlUHVsc2F0ZScsICdjaGlsZCcsICdjaGlsZExlYXZpbmcnLCAnY2hpbGRQdWxzYXRlJ10pO1xuZXhwb3J0IGRlZmF1bHQgdG91Y2hSaXBwbGVDbGFzc2VzOyIsICJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJ1dHRvbkJhc2VVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUJ1dHRvbkJhc2UnLCBzbG90KTtcbn1cbmNvbnN0IGJ1dHRvbkJhc2VDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpQnV0dG9uQmFzZScsIFsncm9vdCcsICdkaXNhYmxlZCcsICdmb2N1c1Zpc2libGUnXSk7XG5leHBvcnQgZGVmYXVsdCBidXR0b25CYXNlQ2xhc3NlczsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiYWxpZ25cIiwgXCJjbGFzc05hbWVcIiwgXCJjb21wb25lbnRcIiwgXCJndXR0ZXJCb3R0b21cIiwgXCJub1dyYXBcIiwgXCJwYXJhZ3JhcGhcIiwgXCJ2YXJpYW50XCIsIFwidmFyaWFudE1hcHBpbmdcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyBleHRlbmRTeFByb3AgfSBmcm9tICdAbXVpL3N5c3RlbS9zdHlsZUZ1bmN0aW9uU3gnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCBjYXBpdGFsaXplIGZyb20gJy4uL3V0aWxzL2NhcGl0YWxpemUnO1xuaW1wb3J0IHsgZ2V0VHlwb2dyYXBoeVV0aWxpdHlDbGFzcyB9IGZyb20gJy4vdHlwb2dyYXBoeUNsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBhbGlnbixcbiAgICBndXR0ZXJCb3R0b20sXG4gICAgbm9XcmFwLFxuICAgIHBhcmFncmFwaCxcbiAgICB2YXJpYW50LFxuICAgIGNsYXNzZXNcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIHZhcmlhbnQsIG93bmVyU3RhdGUuYWxpZ24gIT09ICdpbmhlcml0JyAmJiBgYWxpZ24ke2NhcGl0YWxpemUoYWxpZ24pfWAsIGd1dHRlckJvdHRvbSAmJiAnZ3V0dGVyQm90dG9tJywgbm9XcmFwICYmICdub1dyYXAnLCBwYXJhZ3JhcGggJiYgJ3BhcmFncmFwaCddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0VHlwb2dyYXBoeVV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG59O1xuZXhwb3J0IGNvbnN0IFR5cG9ncmFwaHlSb290ID0gc3R5bGVkKCdzcGFuJywge1xuICBuYW1lOiAnTXVpVHlwb2dyYXBoeScsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5yb290LCBvd25lclN0YXRlLnZhcmlhbnQgJiYgc3R5bGVzW293bmVyU3RhdGUudmFyaWFudF0sIG93bmVyU3RhdGUuYWxpZ24gIT09ICdpbmhlcml0JyAmJiBzdHlsZXNbYGFsaWduJHtjYXBpdGFsaXplKG93bmVyU3RhdGUuYWxpZ24pfWBdLCBvd25lclN0YXRlLm5vV3JhcCAmJiBzdHlsZXMubm9XcmFwLCBvd25lclN0YXRlLmd1dHRlckJvdHRvbSAmJiBzdHlsZXMuZ3V0dGVyQm90dG9tLCBvd25lclN0YXRlLnBhcmFncmFwaCAmJiBzdHlsZXMucGFyYWdyYXBoXTtcbiAgfVxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgbWFyZ2luOiAwXG59LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdpbmhlcml0JyAmJiB7XG4gIC8vIFNvbWUgZWxlbWVudHMsIGxpa2UgPGJ1dHRvbj4gb24gQ2hyb21lIGhhdmUgZGVmYXVsdCBmb250IHRoYXQgZG9lc24ndCBpbmhlcml0LCByZXNldCB0aGlzLlxuICBmb250OiAnaW5oZXJpdCdcbn0sIG93bmVyU3RhdGUudmFyaWFudCAhPT0gJ2luaGVyaXQnICYmIHRoZW1lLnR5cG9ncmFwaHlbb3duZXJTdGF0ZS52YXJpYW50XSwgb3duZXJTdGF0ZS5hbGlnbiAhPT0gJ2luaGVyaXQnICYmIHtcbiAgdGV4dEFsaWduOiBvd25lclN0YXRlLmFsaWduXG59LCBvd25lclN0YXRlLm5vV3JhcCAmJiB7XG4gIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgdGV4dE92ZXJmbG93OiAnZWxsaXBzaXMnLFxuICB3aGl0ZVNwYWNlOiAnbm93cmFwJ1xufSwgb3duZXJTdGF0ZS5ndXR0ZXJCb3R0b20gJiYge1xuICBtYXJnaW5Cb3R0b206ICcwLjM1ZW0nXG59LCBvd25lclN0YXRlLnBhcmFncmFwaCAmJiB7XG4gIG1hcmdpbkJvdHRvbTogMTZcbn0pKTtcbmNvbnN0IGRlZmF1bHRWYXJpYW50TWFwcGluZyA9IHtcbiAgaDE6ICdoMScsXG4gIGgyOiAnaDInLFxuICBoMzogJ2gzJyxcbiAgaDQ6ICdoNCcsXG4gIGg1OiAnaDUnLFxuICBoNjogJ2g2JyxcbiAgc3VidGl0bGUxOiAnaDYnLFxuICBzdWJ0aXRsZTI6ICdoNicsXG4gIGJvZHkxOiAncCcsXG4gIGJvZHkyOiAncCcsXG4gIGluaGVyaXQ6ICdwJ1xufTtcblxuLy8gVE9ETyB2NjogZGVwcmVjYXRlIHRoZXNlIGNvbG9yIHZhbHVlcyBpbiB2NS54IGFuZCByZW1vdmUgdGhlIHRyYW5zZm9ybWF0aW9uIGluIHY2XG5jb25zdCBjb2xvclRyYW5zZm9ybWF0aW9ucyA9IHtcbiAgcHJpbWFyeTogJ3ByaW1hcnkubWFpbicsXG4gIHRleHRQcmltYXJ5OiAndGV4dC5wcmltYXJ5JyxcbiAgc2Vjb25kYXJ5OiAnc2Vjb25kYXJ5Lm1haW4nLFxuICB0ZXh0U2Vjb25kYXJ5OiAndGV4dC5zZWNvbmRhcnknLFxuICBlcnJvcjogJ2Vycm9yLm1haW4nXG59O1xuY29uc3QgdHJhbnNmb3JtRGVwcmVjYXRlZENvbG9ycyA9IGNvbG9yID0+IHtcbiAgcmV0dXJuIGNvbG9yVHJhbnNmb3JtYXRpb25zW2NvbG9yXSB8fCBjb2xvcjtcbn07XG5jb25zdCBUeXBvZ3JhcGh5ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gVHlwb2dyYXBoeShpblByb3BzLCByZWYpIHtcbiAgY29uc3QgdGhlbWVQcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlUeXBvZ3JhcGh5J1xuICB9KTtcbiAgY29uc3QgY29sb3IgPSB0cmFuc2Zvcm1EZXByZWNhdGVkQ29sb3JzKHRoZW1lUHJvcHMuY29sb3IpO1xuICBjb25zdCBwcm9wcyA9IGV4dGVuZFN4UHJvcChfZXh0ZW5kcyh7fSwgdGhlbWVQcm9wcywge1xuICAgIGNvbG9yXG4gIH0pKTtcbiAgY29uc3Qge1xuICAgICAgYWxpZ24gPSAnaW5oZXJpdCcsXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBjb21wb25lbnQsXG4gICAgICBndXR0ZXJCb3R0b20gPSBmYWxzZSxcbiAgICAgIG5vV3JhcCA9IGZhbHNlLFxuICAgICAgcGFyYWdyYXBoID0gZmFsc2UsXG4gICAgICB2YXJpYW50ID0gJ2JvZHkxJyxcbiAgICAgIHZhcmlhbnRNYXBwaW5nID0gZGVmYXVsdFZhcmlhbnRNYXBwaW5nXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBhbGlnbixcbiAgICBjb2xvcixcbiAgICBjbGFzc05hbWUsXG4gICAgY29tcG9uZW50LFxuICAgIGd1dHRlckJvdHRvbSxcbiAgICBub1dyYXAsXG4gICAgcGFyYWdyYXBoLFxuICAgIHZhcmlhbnQsXG4gICAgdmFyaWFudE1hcHBpbmdcbiAgfSk7XG4gIGNvbnN0IENvbXBvbmVudCA9IGNvbXBvbmVudCB8fCAocGFyYWdyYXBoID8gJ3AnIDogdmFyaWFudE1hcHBpbmdbdmFyaWFudF0gfHwgZGVmYXVsdFZhcmlhbnRNYXBwaW5nW3ZhcmlhbnRdKSB8fCAnc3Bhbic7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFR5cG9ncmFwaHlSb290LCBfZXh0ZW5kcyh7XG4gICAgYXM6IENvbXBvbmVudCxcbiAgICByZWY6IHJlZixcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSlcbiAgfSwgb3RoZXIpKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gVHlwb2dyYXBoeS5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gXHUyNTBDXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwIFdhcm5pbmcgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTEwXG4gIC8vIFx1MjUwMiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIFx1MjUwMlxuICAvLyBcdTI1MDIgICAgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuICAgICBcdTI1MDJcbiAgLy8gXHUyNTE0XHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTE4XG4gIC8qKlxuICAgKiBTZXQgdGhlIHRleHQtYWxpZ24gb24gdGhlIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgJ2luaGVyaXQnXG4gICAqL1xuICBhbGlnbjogUHJvcFR5cGVzLm9uZU9mKFsnY2VudGVyJywgJ2luaGVyaXQnLCAnanVzdGlmeScsICdsZWZ0JywgJ3JpZ2h0J10pLFxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHRleHQgd2lsbCBoYXZlIGEgYm90dG9tIG1hcmdpbi5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGd1dHRlckJvdHRvbTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSB0ZXh0IHdpbGwgbm90IHdyYXAsIGJ1dCBpbnN0ZWFkIHdpbGwgdHJ1bmNhdGUgd2l0aCBhIHRleHQgb3ZlcmZsb3cgZWxsaXBzaXMuXG4gICAqXG4gICAqIE5vdGUgdGhhdCB0ZXh0IG92ZXJmbG93IGNhbiBvbmx5IGhhcHBlbiB3aXRoIGJsb2NrIG9yIGlubGluZS1ibG9jayBsZXZlbCBlbGVtZW50c1xuICAgKiAodGhlIGVsZW1lbnQgbmVlZHMgdG8gaGF2ZSBhIHdpZHRoIGluIG9yZGVyIHRvIG92ZXJmbG93KS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIG5vV3JhcDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBlbGVtZW50IHdpbGwgYmUgYSBwYXJhZ3JhcGggZWxlbWVudC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHBhcmFncmFwaDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBBcHBsaWVzIHRoZSB0aGVtZSB0eXBvZ3JhcGh5IHN0eWxlcy5cbiAgICogQGRlZmF1bHQgJ2JvZHkxJ1xuICAgKi9cbiAgdmFyaWFudDogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydib2R5MScsICdib2R5MicsICdidXR0b24nLCAnY2FwdGlvbicsICdoMScsICdoMicsICdoMycsICdoNCcsICdoNScsICdoNicsICdpbmhlcml0JywgJ292ZXJsaW5lJywgJ3N1YnRpdGxlMScsICdzdWJ0aXRsZTInXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgbWFwcyB0aGUgdmFyaWFudCBwcm9wIHRvIGEgcmFuZ2Ugb2YgZGlmZmVyZW50IEhUTUwgZWxlbWVudCB0eXBlcy5cbiAgICogRm9yIGluc3RhbmNlLCBzdWJ0aXRsZTEgdG8gYDxoNj5gLlxuICAgKiBJZiB5b3Ugd2lzaCB0byBjaGFuZ2UgdGhhdCBtYXBwaW5nLCB5b3UgY2FuIHByb3ZpZGUgeW91ciBvd24uXG4gICAqIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gdXNlIHRoZSBgY29tcG9uZW50YCBwcm9wLlxuICAgKiBAZGVmYXVsdCB7XG4gICAqICAgaDE6ICdoMScsXG4gICAqICAgaDI6ICdoMicsXG4gICAqICAgaDM6ICdoMycsXG4gICAqICAgaDQ6ICdoNCcsXG4gICAqICAgaDU6ICdoNScsXG4gICAqICAgaDY6ICdoNicsXG4gICAqICAgc3VidGl0bGUxOiAnaDYnLFxuICAgKiAgIHN1YnRpdGxlMjogJ2g2JyxcbiAgICogICBib2R5MTogJ3AnLFxuICAgKiAgIGJvZHkyOiAncCcsXG4gICAqICAgaW5oZXJpdDogJ3AnLFxuICAgKiB9XG4gICAqL1xuICB2YXJpYW50TWFwcGluZzogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub2JqZWN0XG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgVHlwb2dyYXBoeTsiLCAiaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRUeXBvZ3JhcGh5VXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlUeXBvZ3JhcGh5Jywgc2xvdCk7XG59XG5jb25zdCB0eXBvZ3JhcGh5Q2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aVR5cG9ncmFwaHknLCBbJ3Jvb3QnLCAnaDEnLCAnaDInLCAnaDMnLCAnaDQnLCAnaDUnLCAnaDYnLCAnc3VidGl0bGUxJywgJ3N1YnRpdGxlMicsICdib2R5MScsICdib2R5MicsICdpbmhlcml0JywgJ2J1dHRvbicsICdjYXB0aW9uJywgJ292ZXJsaW5lJywgJ2FsaWduTGVmdCcsICdhbGlnblJpZ2h0JywgJ2FsaWduQ2VudGVyJywgJ2FsaWduSnVzdGlmeScsICdub1dyYXAnLCAnZ3V0dGVyQm90dG9tJywgJ3BhcmFncmFwaCddKTtcbmV4cG9ydCBkZWZhdWx0IHR5cG9ncmFwaHlDbGFzc2VzOyIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBmb3JtQ29udHJvbFN0YXRlKHtcbiAgcHJvcHMsXG4gIHN0YXRlcyxcbiAgbXVpRm9ybUNvbnRyb2xcbn0pIHtcbiAgcmV0dXJuIHN0YXRlcy5yZWR1Y2UoKGFjYywgc3RhdGUpID0+IHtcbiAgICBhY2Nbc3RhdGVdID0gcHJvcHNbc3RhdGVdO1xuICAgIGlmIChtdWlGb3JtQ29udHJvbCkge1xuICAgICAgaWYgKHR5cGVvZiBwcm9wc1tzdGF0ZV0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGFjY1tzdGF0ZV0gPSBtdWlGb3JtQ29udHJvbFtzdGF0ZV07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbn0iLCAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuLyoqXG4gKiBAaWdub3JlIC0gaW50ZXJuYWwgY29tcG9uZW50LlxuICovXG5jb25zdCBGb3JtQ29udHJvbENvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dCh1bmRlZmluZWQpO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgRm9ybUNvbnRyb2xDb250ZXh0LmRpc3BsYXlOYW1lID0gJ0Zvcm1Db250cm9sQ29udGV4dCc7XG59XG5leHBvcnQgZGVmYXVsdCBGb3JtQ29udHJvbENvbnRleHQ7IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IEZvcm1Db250cm9sQ29udGV4dCBmcm9tICcuL0Zvcm1Db250cm9sQ29udGV4dCc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VGb3JtQ29udHJvbCgpIHtcbiAgcmV0dXJuIFJlYWN0LnVzZUNvbnRleHQoRm9ybUNvbnRyb2xDb250ZXh0KTtcbn0iLCAiLy8gU3VwcG9ydHMgZGV0ZXJtaW5hdGlvbiBvZiBpc0NvbnRyb2xsZWQoKS5cbi8vIENvbnRyb2xsZWQgaW5wdXQgYWNjZXB0cyBpdHMgY3VycmVudCB2YWx1ZSBhcyBhIHByb3AuXG4vL1xuLy8gQHNlZSBodHRwczovL2ZhY2Vib29rLmdpdGh1Yi5pby9yZWFjdC9kb2NzL2Zvcm1zLmh0bWwjY29udHJvbGxlZC1jb21wb25lbnRzXG4vLyBAcGFyYW0gdmFsdWVcbi8vIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIHN0cmluZyAoaW5jbHVkaW5nICcnKSBvciBudW1iZXIgKGluY2x1ZGluZyB6ZXJvKVxuZXhwb3J0IGZ1bmN0aW9uIGhhc1ZhbHVlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmICEoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSAwKTtcbn1cblxuLy8gRGV0ZXJtaW5lIGlmIGZpZWxkIGlzIGVtcHR5IG9yIGZpbGxlZC5cbi8vIFJlc3BvbnNlIGRldGVybWluZXMgaWYgbGFiZWwgaXMgcHJlc2VudGVkIGFib3ZlIGZpZWxkIG9yIGFzIHBsYWNlaG9sZGVyLlxuLy9cbi8vIEBwYXJhbSBvYmpcbi8vIEBwYXJhbSBTU1Jcbi8vIEByZXR1cm5zIHtib29sZWFufSBGYWxzZSB3aGVuIG5vdCBwcmVzZW50IG9yIGVtcHR5IHN0cmluZy5cbi8vICAgICAgICAgICAgICAgICAgICBUcnVlIHdoZW4gYW55IG51bWJlciBvciBzdHJpbmcgd2l0aCBsZW5ndGguXG5leHBvcnQgZnVuY3Rpb24gaXNGaWxsZWQob2JqLCBTU1IgPSBmYWxzZSkge1xuICByZXR1cm4gb2JqICYmIChoYXNWYWx1ZShvYmoudmFsdWUpICYmIG9iai52YWx1ZSAhPT0gJycgfHwgU1NSICYmIGhhc1ZhbHVlKG9iai5kZWZhdWx0VmFsdWUpICYmIG9iai5kZWZhdWx0VmFsdWUgIT09ICcnKTtcbn1cblxuLy8gRGV0ZXJtaW5lIGlmIGFuIElucHV0IGlzIGFkb3JuZWQgb24gc3RhcnQuXG4vLyBJdCdzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGxlZnQgd2l0aCBMVFIuXG4vL1xuLy8gQHBhcmFtIG9ialxuLy8gQHJldHVybnMge2Jvb2xlYW59IEZhbHNlIHdoZW4gbm8gYWRvcm5tZW50cy5cbi8vICAgICAgICAgICAgICAgICAgICBUcnVlIHdoZW4gYWRvcm5lZCBhdCB0aGUgc3RhcnQuXG5leHBvcnQgZnVuY3Rpb24gaXNBZG9ybmVkU3RhcnQob2JqKSB7XG4gIHJldHVybiBvYmouc3RhcnRBZG9ybm1lbnQ7XG59IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNoZWNrZWRJY29uXCIsIFwiY29sb3JcIiwgXCJpY29uXCIsIFwiaW5kZXRlcm1pbmF0ZVwiLCBcImluZGV0ZXJtaW5hdGVJY29uXCIsIFwiaW5wdXRQcm9wc1wiLCBcInNpemVcIiwgXCJjbGFzc05hbWVcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgcmVmVHlwZSBmcm9tICdAbXVpL3V0aWxzL3JlZlR5cGUnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHsgYWxwaGEgfSBmcm9tICdAbXVpL3N5c3RlbS9jb2xvck1hbmlwdWxhdG9yJztcbmltcG9ydCBTd2l0Y2hCYXNlIGZyb20gJy4uL2ludGVybmFsL1N3aXRjaEJhc2UnO1xuaW1wb3J0IENoZWNrQm94T3V0bGluZUJsYW5rSWNvbiBmcm9tICcuLi9pbnRlcm5hbC9zdmctaWNvbnMvQ2hlY2tCb3hPdXRsaW5lQmxhbmsnO1xuaW1wb3J0IENoZWNrQm94SWNvbiBmcm9tICcuLi9pbnRlcm5hbC9zdmctaWNvbnMvQ2hlY2tCb3gnO1xuaW1wb3J0IEluZGV0ZXJtaW5hdGVDaGVja0JveEljb24gZnJvbSAnLi4vaW50ZXJuYWwvc3ZnLWljb25zL0luZGV0ZXJtaW5hdGVDaGVja0JveCc7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCBzdHlsZWQsIHsgcm9vdFNob3VsZEZvcndhcmRQcm9wIH0gZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgY2hlY2tib3hDbGFzc2VzLCB7IGdldENoZWNrYm94VXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9jaGVja2JveENsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIGluZGV0ZXJtaW5hdGUsXG4gICAgY29sb3IsXG4gICAgc2l6ZVxuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgaW5kZXRlcm1pbmF0ZSAmJiAnaW5kZXRlcm1pbmF0ZScsIGBjb2xvciR7Y2FwaXRhbGl6ZShjb2xvcil9YCwgYHNpemUke2NhcGl0YWxpemUoc2l6ZSl9YF1cbiAgfTtcbiAgY29uc3QgY29tcG9zZWRDbGFzc2VzID0gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldENoZWNrYm94VXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBjbGFzc2VzLCBjb21wb3NlZENsYXNzZXMpO1xufTtcbmNvbnN0IENoZWNrYm94Um9vdCA9IHN0eWxlZChTd2l0Y2hCYXNlLCB7XG4gIHNob3VsZEZvcndhcmRQcm9wOiBwcm9wID0+IHJvb3RTaG91bGRGb3J3YXJkUHJvcChwcm9wKSB8fCBwcm9wID09PSAnY2xhc3NlcycsXG4gIG5hbWU6ICdNdWlDaGVja2JveCcsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5yb290LCBvd25lclN0YXRlLmluZGV0ZXJtaW5hdGUgJiYgc3R5bGVzLmluZGV0ZXJtaW5hdGUsIHN0eWxlc1tgc2l6ZSR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLnNpemUpfWBdLCBvd25lclN0YXRlLmNvbG9yICE9PSAnZGVmYXVsdCcgJiYgc3R5bGVzW2Bjb2xvciR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLmNvbG9yKX1gXV07XG4gIH1cbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS50ZXh0LnNlY29uZGFyeVxufSwgIW93bmVyU3RhdGUuZGlzYWJsZVJpcHBsZSAmJiB7XG4gICcmOmhvdmVyJzoge1xuICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUudmFycyA/IGByZ2JhKCR7b3duZXJTdGF0ZS5jb2xvciA9PT0gJ2RlZmF1bHQnID8gdGhlbWUudmFycy5wYWxldHRlLmFjdGlvbi5hY3RpdmVDaGFubmVsIDogdGhlbWUudmFycy5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW5DaGFubmVsfSAvICR7dGhlbWUudmFycy5wYWxldHRlLmFjdGlvbi5ob3Zlck9wYWNpdHl9KWAgOiBhbHBoYShvd25lclN0YXRlLmNvbG9yID09PSAnZGVmYXVsdCcgPyB0aGVtZS5wYWxldHRlLmFjdGlvbi5hY3RpdmUgOiB0aGVtZS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW4sIHRoZW1lLnBhbGV0dGUuYWN0aW9uLmhvdmVyT3BhY2l0eSksXG4gICAgLy8gUmVzZXQgb24gdG91Y2ggZGV2aWNlcywgaXQgZG9lc24ndCBhZGQgc3BlY2lmaWNpdHlcbiAgICAnQG1lZGlhIChob3Zlcjogbm9uZSknOiB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCdcbiAgICB9XG4gIH1cbn0sIG93bmVyU3RhdGUuY29sb3IgIT09ICdkZWZhdWx0JyAmJiB7XG4gIFtgJi4ke2NoZWNrYm94Q2xhc3Nlcy5jaGVja2VkfSwgJi4ke2NoZWNrYm94Q2xhc3Nlcy5pbmRldGVybWluYXRlfWBdOiB7XG4gICAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW5cbiAgfSxcbiAgW2AmLiR7Y2hlY2tib3hDbGFzc2VzLmRpc2FibGVkfWBdOiB7XG4gICAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmFjdGlvbi5kaXNhYmxlZFxuICB9XG59KSk7XG5jb25zdCBkZWZhdWx0Q2hlY2tlZEljb24gPSAvKiNfX1BVUkVfXyovX2pzeChDaGVja0JveEljb24sIHt9KTtcbmNvbnN0IGRlZmF1bHRJY29uID0gLyojX19QVVJFX18qL19qc3goQ2hlY2tCb3hPdXRsaW5lQmxhbmtJY29uLCB7fSk7XG5jb25zdCBkZWZhdWx0SW5kZXRlcm1pbmF0ZUljb24gPSAvKiNfX1BVUkVfXyovX2pzeChJbmRldGVybWluYXRlQ2hlY2tCb3hJY29uLCB7fSk7XG5jb25zdCBDaGVja2JveCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIENoZWNrYm94KGluUHJvcHMsIHJlZikge1xuICB2YXIgX2ljb24kcHJvcHMkZm9udFNpemUsIF9pbmRldGVybWluYXRlSWNvbiRwcjtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpQ2hlY2tib3gnXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBjaGVja2VkSWNvbiA9IGRlZmF1bHRDaGVja2VkSWNvbixcbiAgICAgIGNvbG9yID0gJ3ByaW1hcnknLFxuICAgICAgaWNvbjogaWNvblByb3AgPSBkZWZhdWx0SWNvbixcbiAgICAgIGluZGV0ZXJtaW5hdGUgPSBmYWxzZSxcbiAgICAgIGluZGV0ZXJtaW5hdGVJY29uOiBpbmRldGVybWluYXRlSWNvblByb3AgPSBkZWZhdWx0SW5kZXRlcm1pbmF0ZUljb24sXG4gICAgICBpbnB1dFByb3BzLFxuICAgICAgc2l6ZSA9ICdtZWRpdW0nLFxuICAgICAgY2xhc3NOYW1lXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IGljb24gPSBpbmRldGVybWluYXRlID8gaW5kZXRlcm1pbmF0ZUljb25Qcm9wIDogaWNvblByb3A7XG4gIGNvbnN0IGluZGV0ZXJtaW5hdGVJY29uID0gaW5kZXRlcm1pbmF0ZSA/IGluZGV0ZXJtaW5hdGVJY29uUHJvcCA6IGNoZWNrZWRJY29uO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY29sb3IsXG4gICAgaW5kZXRlcm1pbmF0ZSxcbiAgICBzaXplXG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChDaGVja2JveFJvb3QsIF9leHRlbmRzKHtcbiAgICB0eXBlOiBcImNoZWNrYm94XCIsXG4gICAgaW5wdXRQcm9wczogX2V4dGVuZHMoe1xuICAgICAgJ2RhdGEtaW5kZXRlcm1pbmF0ZSc6IGluZGV0ZXJtaW5hdGVcbiAgICB9LCBpbnB1dFByb3BzKSxcbiAgICBpY29uOiAvKiNfX1BVUkVfXyovUmVhY3QuY2xvbmVFbGVtZW50KGljb24sIHtcbiAgICAgIGZvbnRTaXplOiAoX2ljb24kcHJvcHMkZm9udFNpemUgPSBpY29uLnByb3BzLmZvbnRTaXplKSAhPSBudWxsID8gX2ljb24kcHJvcHMkZm9udFNpemUgOiBzaXplXG4gICAgfSksXG4gICAgY2hlY2tlZEljb246IC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQoaW5kZXRlcm1pbmF0ZUljb24sIHtcbiAgICAgIGZvbnRTaXplOiAoX2luZGV0ZXJtaW5hdGVJY29uJHByID0gaW5kZXRlcm1pbmF0ZUljb24ucHJvcHMuZm9udFNpemUpICE9IG51bGwgPyBfaW5kZXRlcm1pbmF0ZUljb24kcHIgOiBzaXplXG4gICAgfSksXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICByZWY6IHJlZixcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpXG4gIH0sIG90aGVyLCB7XG4gICAgY2xhc3NlczogY2xhc3Nlc1xuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IENoZWNrYm94LnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyBcdTI1MENcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDAgV2FybmluZyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MTBcbiAgLy8gXHUyNTAyIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4gXHUyNTAyXG4gIC8vIFx1MjUwMiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIFx1MjUwMlxuICAvLyBcdTI1MTRcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MThcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBjaGVja2VkLlxuICAgKi9cbiAgY2hlY2tlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgaWNvbiB0byBkaXNwbGF5IHdoZW4gdGhlIGNvbXBvbmVudCBpcyBjaGVja2VkLlxuICAgKiBAZGVmYXVsdCA8Q2hlY2tCb3hJY29uIC8+XG4gICAqL1xuICBjaGVja2VkSWNvbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbG9yIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEl0IHN1cHBvcnRzIGJvdGggZGVmYXVsdCBhbmQgY3VzdG9tIHRoZW1lIGNvbG9ycywgd2hpY2ggY2FuIGJlIGFkZGVkIGFzIHNob3duIGluIHRoZVxuICAgKiBbcGFsZXR0ZSBjdXN0b21pemF0aW9uIGd1aWRlXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvY3VzdG9taXphdGlvbi9wYWxldHRlLyNjdXN0b20tY29sb3JzKS5cbiAgICogQGRlZmF1bHQgJ3ByaW1hcnknXG4gICAqL1xuICBjb2xvcjogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydkZWZhdWx0JywgJ3ByaW1hcnknLCAnc2Vjb25kYXJ5JywgJ2Vycm9yJywgJ2luZm8nLCAnc3VjY2VzcycsICd3YXJuaW5nJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCBjaGVja2VkIHN0YXRlLiBVc2Ugd2hlbiB0aGUgY29tcG9uZW50IGlzIG5vdCBjb250cm9sbGVkLlxuICAgKi9cbiAgZGVmYXVsdENoZWNrZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIGRpc2FibGVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgcmlwcGxlIGVmZmVjdCBpcyBkaXNhYmxlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVSaXBwbGU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIGljb24gdG8gZGlzcGxheSB3aGVuIHRoZSBjb21wb25lbnQgaXMgdW5jaGVja2VkLlxuICAgKiBAZGVmYXVsdCA8Q2hlY2tCb3hPdXRsaW5lQmxhbmtJY29uIC8+XG4gICAqL1xuICBpY29uOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIFRoZSBpZCBvZiB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgYXBwZWFycyBpbmRldGVybWluYXRlLlxuICAgKiBUaGlzIGRvZXMgbm90IHNldCB0aGUgbmF0aXZlIGlucHV0IGVsZW1lbnQgdG8gaW5kZXRlcm1pbmF0ZSBkdWVcbiAgICogdG8gaW5jb25zaXN0ZW50IGJlaGF2aW9yIGFjcm9zcyBicm93c2Vycy5cbiAgICogSG93ZXZlciwgd2Ugc2V0IGEgYGRhdGEtaW5kZXRlcm1pbmF0ZWAgYXR0cmlidXRlIG9uIHRoZSBgaW5wdXRgLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgaW5kZXRlcm1pbmF0ZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgaWNvbiB0byBkaXNwbGF5IHdoZW4gdGhlIGNvbXBvbmVudCBpcyBpbmRldGVybWluYXRlLlxuICAgKiBAZGVmYXVsdCA8SW5kZXRlcm1pbmF0ZUNoZWNrQm94SWNvbiAvPlxuICAgKi9cbiAgaW5kZXRlcm1pbmF0ZUljb246IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogW0F0dHJpYnV0ZXNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCNBdHRyaWJ1dGVzKSBhcHBsaWVkIHRvIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBpbnB1dFByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogUGFzcyBhIHJlZiB0byB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgaW5wdXRSZWY6IHJlZlR5cGUsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSBzdGF0ZSBpcyBjaGFuZ2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0LkNoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+fSBldmVudCBUaGUgZXZlbnQgc291cmNlIG9mIHRoZSBjYWxsYmFjay5cbiAgICogWW91IGNhbiBwdWxsIG91dCB0aGUgbmV3IGNoZWNrZWQgc3RhdGUgYnkgYWNjZXNzaW5nIGBldmVudC50YXJnZXQuY2hlY2tlZGAgKGJvb2xlYW4pLlxuICAgKi9cbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCBlbGVtZW50IGlzIHJlcXVpcmVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVxdWlyZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIHNpemUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICogYHNtYWxsYCBpcyBlcXVpdmFsZW50IHRvIHRoZSBkZW5zZSBjaGVja2JveCBzdHlsaW5nLlxuICAgKiBAZGVmYXVsdCAnbWVkaXVtJ1xuICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydtZWRpdW0nLCAnc21hbGwnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBvZiB0aGUgY29tcG9uZW50LiBUaGUgRE9NIEFQSSBjYXN0cyB0aGlzIHRvIGEgc3RyaW5nLlxuICAgKiBUaGUgYnJvd3NlciB1c2VzIFwib25cIiBhcyB0aGUgZGVmYXVsdCB2YWx1ZS5cbiAgICovXG4gIHZhbHVlOiBQcm9wVHlwZXMuYW55XG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgQ2hlY2tib3g7IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImF1dG9Gb2N1c1wiLCBcImNoZWNrZWRcIiwgXCJjaGVja2VkSWNvblwiLCBcImNsYXNzTmFtZVwiLCBcImRlZmF1bHRDaGVja2VkXCIsIFwiZGlzYWJsZWRcIiwgXCJkaXNhYmxlRm9jdXNSaXBwbGVcIiwgXCJlZGdlXCIsIFwiaWNvblwiLCBcImlkXCIsIFwiaW5wdXRQcm9wc1wiLCBcImlucHV0UmVmXCIsIFwibmFtZVwiLCBcIm9uQmx1clwiLCBcIm9uQ2hhbmdlXCIsIFwib25Gb2N1c1wiLCBcInJlYWRPbmx5XCIsIFwicmVxdWlyZWRcIiwgXCJ0YWJJbmRleFwiLCBcInR5cGVcIiwgXCJ2YWx1ZVwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCByZWZUeXBlIGZyb20gJ0BtdWkvdXRpbHMvcmVmVHlwZSc7XG5pbXBvcnQgY29tcG9zZUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCBzdHlsZWQsIHsgcm9vdFNob3VsZEZvcndhcmRQcm9wIH0gZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgdXNlQ29udHJvbGxlZCBmcm9tICcuLi91dGlscy91c2VDb250cm9sbGVkJztcbmltcG9ydCB1c2VGb3JtQ29udHJvbCBmcm9tICcuLi9Gb3JtQ29udHJvbC91c2VGb3JtQ29udHJvbCc7XG5pbXBvcnQgQnV0dG9uQmFzZSBmcm9tICcuLi9CdXR0b25CYXNlJztcbmltcG9ydCB7IGdldFN3aXRjaEJhc2VVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL3N3aXRjaEJhc2VDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICBjaGVja2VkLFxuICAgIGRpc2FibGVkLFxuICAgIGVkZ2VcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIGNoZWNrZWQgJiYgJ2NoZWNrZWQnLCBkaXNhYmxlZCAmJiAnZGlzYWJsZWQnLCBlZGdlICYmIGBlZGdlJHtjYXBpdGFsaXplKGVkZ2UpfWBdLFxuICAgIGlucHV0OiBbJ2lucHV0J11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRTd2l0Y2hCYXNlVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5jb25zdCBTd2l0Y2hCYXNlUm9vdCA9IHN0eWxlZChCdXR0b25CYXNlKSgoe1xuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIHBhZGRpbmc6IDksXG4gIGJvcmRlclJhZGl1czogJzUwJSdcbn0sIG93bmVyU3RhdGUuZWRnZSA9PT0gJ3N0YXJ0JyAmJiB7XG4gIG1hcmdpbkxlZnQ6IG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyA/IC0zIDogLTEyXG59LCBvd25lclN0YXRlLmVkZ2UgPT09ICdlbmQnICYmIHtcbiAgbWFyZ2luUmlnaHQ6IG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyA/IC0zIDogLTEyXG59KSk7XG5jb25zdCBTd2l0Y2hCYXNlSW5wdXQgPSBzdHlsZWQoJ2lucHV0Jywge1xuICBzaG91bGRGb3J3YXJkUHJvcDogcm9vdFNob3VsZEZvcndhcmRQcm9wXG59KSh7XG4gIGN1cnNvcjogJ2luaGVyaXQnLFxuICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgb3BhY2l0eTogMCxcbiAgd2lkdGg6ICcxMDAlJyxcbiAgaGVpZ2h0OiAnMTAwJScsXG4gIHRvcDogMCxcbiAgbGVmdDogMCxcbiAgbWFyZ2luOiAwLFxuICBwYWRkaW5nOiAwLFxuICB6SW5kZXg6IDFcbn0pO1xuXG4vKipcbiAqIEBpZ25vcmUgLSBpbnRlcm5hbCBjb21wb25lbnQuXG4gKi9cbmNvbnN0IFN3aXRjaEJhc2UgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBTd2l0Y2hCYXNlKHByb3BzLCByZWYpIHtcbiAgY29uc3Qge1xuICAgICAgYXV0b0ZvY3VzLFxuICAgICAgY2hlY2tlZDogY2hlY2tlZFByb3AsXG4gICAgICBjaGVja2VkSWNvbixcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGRlZmF1bHRDaGVja2VkLFxuICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkUHJvcCxcbiAgICAgIGRpc2FibGVGb2N1c1JpcHBsZSA9IGZhbHNlLFxuICAgICAgZWRnZSA9IGZhbHNlLFxuICAgICAgaWNvbixcbiAgICAgIGlkLFxuICAgICAgaW5wdXRQcm9wcyxcbiAgICAgIGlucHV0UmVmLFxuICAgICAgbmFtZSxcbiAgICAgIG9uQmx1cixcbiAgICAgIG9uQ2hhbmdlLFxuICAgICAgb25Gb2N1cyxcbiAgICAgIHJlYWRPbmx5LFxuICAgICAgcmVxdWlyZWQgPSBmYWxzZSxcbiAgICAgIHRhYkluZGV4LFxuICAgICAgdHlwZSxcbiAgICAgIHZhbHVlXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IFtjaGVja2VkLCBzZXRDaGVja2VkU3RhdGVdID0gdXNlQ29udHJvbGxlZCh7XG4gICAgY29udHJvbGxlZDogY2hlY2tlZFByb3AsXG4gICAgZGVmYXVsdDogQm9vbGVhbihkZWZhdWx0Q2hlY2tlZCksXG4gICAgbmFtZTogJ1N3aXRjaEJhc2UnLFxuICAgIHN0YXRlOiAnY2hlY2tlZCdcbiAgfSk7XG4gIGNvbnN0IG11aUZvcm1Db250cm9sID0gdXNlRm9ybUNvbnRyb2woKTtcbiAgY29uc3QgaGFuZGxlRm9jdXMgPSBldmVudCA9PiB7XG4gICAgaWYgKG9uRm9jdXMpIHtcbiAgICAgIG9uRm9jdXMoZXZlbnQpO1xuICAgIH1cbiAgICBpZiAobXVpRm9ybUNvbnRyb2wgJiYgbXVpRm9ybUNvbnRyb2wub25Gb2N1cykge1xuICAgICAgbXVpRm9ybUNvbnRyb2wub25Gb2N1cyhldmVudCk7XG4gICAgfVxuICB9O1xuICBjb25zdCBoYW5kbGVCbHVyID0gZXZlbnQgPT4ge1xuICAgIGlmIChvbkJsdXIpIHtcbiAgICAgIG9uQmx1cihldmVudCk7XG4gICAgfVxuICAgIGlmIChtdWlGb3JtQ29udHJvbCAmJiBtdWlGb3JtQ29udHJvbC5vbkJsdXIpIHtcbiAgICAgIG11aUZvcm1Db250cm9sLm9uQmx1cihldmVudCk7XG4gICAgfVxuICB9O1xuICBjb25zdCBoYW5kbGVJbnB1dENoYW5nZSA9IGV2ZW50ID0+IHtcbiAgICAvLyBXb3JrYXJvdW5kIGZvciBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzkwMjNcbiAgICBpZiAoZXZlbnQubmF0aXZlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBuZXdDaGVja2VkID0gZXZlbnQudGFyZ2V0LmNoZWNrZWQ7XG4gICAgc2V0Q2hlY2tlZFN0YXRlKG5ld0NoZWNrZWQpO1xuICAgIGlmIChvbkNoYW5nZSkge1xuICAgICAgLy8gVE9ETyB2NjogcmVtb3ZlIHRoZSBzZWNvbmQgYXJndW1lbnQuXG4gICAgICBvbkNoYW5nZShldmVudCwgbmV3Q2hlY2tlZCk7XG4gICAgfVxuICB9O1xuICBsZXQgZGlzYWJsZWQgPSBkaXNhYmxlZFByb3A7XG4gIGlmIChtdWlGb3JtQ29udHJvbCkge1xuICAgIGlmICh0eXBlb2YgZGlzYWJsZWQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBkaXNhYmxlZCA9IG11aUZvcm1Db250cm9sLmRpc2FibGVkO1xuICAgIH1cbiAgfVxuICBjb25zdCBoYXNMYWJlbEZvciA9IHR5cGUgPT09ICdjaGVja2JveCcgfHwgdHlwZSA9PT0gJ3JhZGlvJztcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNoZWNrZWQsXG4gICAgZGlzYWJsZWQsXG4gICAgZGlzYWJsZUZvY3VzUmlwcGxlLFxuICAgIGVkZ2VcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4cyhTd2l0Y2hCYXNlUm9vdCwgX2V4dGVuZHMoe1xuICAgIGNvbXBvbmVudDogXCJzcGFuXCIsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICBjZW50ZXJSaXBwbGU6IHRydWUsXG4gICAgZm9jdXNSaXBwbGU6ICFkaXNhYmxlRm9jdXNSaXBwbGUsXG4gICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgIHRhYkluZGV4OiBudWxsLFxuICAgIHJvbGU6IHVuZGVmaW5lZCxcbiAgICBvbkZvY3VzOiBoYW5kbGVGb2N1cyxcbiAgICBvbkJsdXI6IGhhbmRsZUJsdXIsXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICByZWY6IHJlZlxuICB9LCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiBbLyojX19QVVJFX18qL19qc3goU3dpdGNoQmFzZUlucHV0LCBfZXh0ZW5kcyh7XG4gICAgICBhdXRvRm9jdXM6IGF1dG9Gb2N1cyxcbiAgICAgIGNoZWNrZWQ6IGNoZWNrZWRQcm9wLFxuICAgICAgZGVmYXVsdENoZWNrZWQ6IGRlZmF1bHRDaGVja2VkLFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLmlucHV0LFxuICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgICAgaWQ6IGhhc0xhYmVsRm9yID8gaWQgOiB1bmRlZmluZWQsXG4gICAgICBuYW1lOiBuYW1lLFxuICAgICAgb25DaGFuZ2U6IGhhbmRsZUlucHV0Q2hhbmdlLFxuICAgICAgcmVhZE9ubHk6IHJlYWRPbmx5LFxuICAgICAgcmVmOiBpbnB1dFJlZixcbiAgICAgIHJlcXVpcmVkOiByZXF1aXJlZCxcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICB0YWJJbmRleDogdGFiSW5kZXgsXG4gICAgICB0eXBlOiB0eXBlXG4gICAgfSwgdHlwZSA9PT0gJ2NoZWNrYm94JyAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkID8ge30gOiB7XG4gICAgICB2YWx1ZVxuICAgIH0sIGlucHV0UHJvcHMpKSwgY2hlY2tlZCA/IGNoZWNrZWRJY29uIDogaWNvbl1cbiAgfSkpO1xufSk7XG5cbi8vIE5COiBJZiBjaGFuZ2VkLCBwbGVhc2UgdXBkYXRlIENoZWNrYm94LCBTd2l0Y2ggYW5kIFJhZGlvXG4vLyBzbyB0aGF0IHRoZSBBUEkgZG9jdW1lbnRhdGlvbiBpcyB1cGRhdGVkLlxucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gU3dpdGNoQmFzZS5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIGVsZW1lbnQgaXMgZm9jdXNlZCBkdXJpbmcgdGhlIGZpcnN0IG1vdW50LlxuICAgKi9cbiAgYXV0b0ZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBjaGVja2VkLlxuICAgKi9cbiAgY2hlY2tlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgaWNvbiB0byBkaXNwbGF5IHdoZW4gdGhlIGNvbXBvbmVudCBpcyBjaGVja2VkLlxuICAgKi9cbiAgY2hlY2tlZEljb246IFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgZGVmYXVsdENoZWNrZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIGRpc2FibGVkLlxuICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgIGtleWJvYXJkIGZvY3VzIHJpcHBsZSBpcyBkaXNhYmxlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVGb2N1c1JpcHBsZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBnaXZlbiwgdXNlcyBhIG5lZ2F0aXZlIG1hcmdpbiB0byBjb3VudGVyYWN0IHRoZSBwYWRkaW5nIG9uIG9uZVxuICAgKiBzaWRlICh0aGlzIGlzIG9mdGVuIGhlbHBmdWwgZm9yIGFsaWduaW5nIHRoZSBsZWZ0IG9yIHJpZ2h0XG4gICAqIHNpZGUgb2YgdGhlIGljb24gd2l0aCBjb250ZW50IGFib3ZlIG9yIGJlbG93LCB3aXRob3V0IHJ1aW5pbmcgdGhlIGJvcmRlclxuICAgKiBzaXplIGFuZCBzaGFwZSkuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBlZGdlOiBQcm9wVHlwZXMub25lT2YoWydlbmQnLCAnc3RhcnQnLCBmYWxzZV0pLFxuICAvKipcbiAgICogVGhlIGljb24gdG8gZGlzcGxheSB3aGVuIHRoZSBjb21wb25lbnQgaXMgdW5jaGVja2VkLlxuICAgKi9cbiAgaWNvbjogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAqIFRoZSBpZCBvZiB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBbQXR0cmlidXRlc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0I0F0dHJpYnV0ZXMpIGFwcGxpZWQgdG8gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIGlucHV0UHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBQYXNzIGEgcmVmIHRvIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBpbnB1dFJlZjogcmVmVHlwZSxcbiAgLypcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uQmx1cjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSBzdGF0ZSBpcyBjaGFuZ2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqIFlvdSBjYW4gcHVsbCBvdXQgdGhlIG5ldyBjaGVja2VkIHN0YXRlIGJ5IGFjY2Vzc2luZyBgZXZlbnQudGFyZ2V0LmNoZWNrZWRgIChib29sZWFuKS5cbiAgICovXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRm9jdXM6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogSXQgcHJldmVudHMgdGhlIHVzZXIgZnJvbSBjaGFuZ2luZyB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkXG4gICAqIChub3QgZnJvbSBpbnRlcmFjdGluZyB3aXRoIHRoZSBmaWVsZCkuXG4gICAqL1xuICByZWFkT25seTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIGVsZW1lbnQgaXMgcmVxdWlyZWQuXG4gICAqL1xuICByZXF1aXJlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgdGFiSW5kZXg6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBpbnB1dCBjb21wb25lbnQgcHJvcCBgdHlwZWAuXG4gICAqL1xuICB0eXBlOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIHZhbHVlOiBQcm9wVHlwZXMuYW55XG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgU3dpdGNoQmFzZTsiLCAiaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRTd2l0Y2hCYXNlVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdQcml2YXRlU3dpdGNoQmFzZScsIHNsb3QpO1xufVxuY29uc3Qgc3dpdGNoQmFzZUNsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdQcml2YXRlU3dpdGNoQmFzZScsIFsncm9vdCcsICdjaGVja2VkJywgJ2Rpc2FibGVkJywgJ2lucHV0JywgJ2VkZ2VTdGFydCcsICdlZGdlRW5kJ10pO1xuZXhwb3J0IGRlZmF1bHQgc3dpdGNoQmFzZUNsYXNzZXM7IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNyZWF0ZVN2Z0ljb24gZnJvbSAnLi4vLi4vdXRpbHMvY3JlYXRlU3ZnSWNvbic7XG5cbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqL1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZVN2Z0ljb24oIC8qI19fUFVSRV9fKi9fanN4KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTE5IDV2MTRINVY1aDE0bTAtMkg1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6XCJcbn0pLCAnQ2hlY2tCb3hPdXRsaW5lQmxhbmsnKTsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY3JlYXRlU3ZnSWNvbiBmcm9tICcuLi8uLi91dGlscy9jcmVhdGVTdmdJY29uJztcblxuLyoqXG4gKiBAaWdub3JlIC0gaW50ZXJuYWwgY29tcG9uZW50LlxuICovXG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZXhwb3J0IGRlZmF1bHQgY3JlYXRlU3ZnSWNvbiggLyojX19QVVJFX18qL19qc3goXCJwYXRoXCIsIHtcbiAgZDogXCJNMTkgM0g1Yy0xLjExIDAtMiAuOS0yIDJ2MTRjMCAxLjEuODkgMiAyIDJoMTRjMS4xMSAwIDItLjkgMi0yVjVjMC0xLjEtLjg5LTItMi0yem0tOSAxNGwtNS01IDEuNDEtMS40MUwxMCAxNC4xN2w3LjU5LTcuNTlMMTkgOGwtOSA5elwiXG59KSwgJ0NoZWNrQm94Jyk7IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNyZWF0ZVN2Z0ljb24gZnJvbSAnLi4vLi4vdXRpbHMvY3JlYXRlU3ZnSWNvbic7XG5cbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqL1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZVN2Z0ljb24oIC8qI19fUFVSRV9fKi9fanN4KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTE5IDNINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tMiAxMEg3di0yaDEwdjJ6XCJcbn0pLCAnSW5kZXRlcm1pbmF0ZUNoZWNrQm94Jyk7IiwgImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hlY2tib3hVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUNoZWNrYm94Jywgc2xvdCk7XG59XG5jb25zdCBjaGVja2JveENsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlDaGVja2JveCcsIFsncm9vdCcsICdjaGVja2VkJywgJ2Rpc2FibGVkJywgJ2luZGV0ZXJtaW5hdGUnLCAnY29sb3JQcmltYXJ5JywgJ2NvbG9yU2Vjb25kYXJ5JywgJ3NpemVTbWFsbCcsICdzaXplTWVkaXVtJ10pO1xuZXhwb3J0IGRlZmF1bHQgY2hlY2tib3hDbGFzc2VzOyIsICIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJjb2xvclwiLCBcImRpc2FibGVTaHJpbmtcIiwgXCJzaXplXCIsIFwic3R5bGVcIiwgXCJ0aGlja25lc3NcIiwgXCJ2YWx1ZVwiLCBcInZhcmlhbnRcIl07XG5sZXQgXyA9IHQgPT4gdCxcbiAgX3QsXG4gIF90MixcbiAgX3QzLFxuICBfdDQ7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgY2hhaW5Qcm9wVHlwZXMgZnJvbSAnQG11aS91dGlscy9jaGFpblByb3BUeXBlcyc7XG5pbXBvcnQgY29tcG9zZUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgeyBrZXlmcmFtZXMsIGNzcyB9IGZyb20gJ0BtdWkvc3lzdGVtJztcbmltcG9ydCBjYXBpdGFsaXplIGZyb20gJy4uL3V0aWxzL2NhcGl0YWxpemUnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB7IGdldENpcmN1bGFyUHJvZ3Jlc3NVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL2NpcmN1bGFyUHJvZ3Jlc3NDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCBTSVpFID0gNDQ7XG5jb25zdCBjaXJjdWxhclJvdGF0ZUtleWZyYW1lID0ga2V5ZnJhbWVzKF90IHx8IChfdCA9IF9gXG4gIDAlIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcbiAgfVxuXG4gIDEwMCUge1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XG4gIH1cbmApKTtcbmNvbnN0IGNpcmN1bGFyRGFzaEtleWZyYW1lID0ga2V5ZnJhbWVzKF90MiB8fCAoX3QyID0gX2BcbiAgMCUge1xuICAgIHN0cm9rZS1kYXNoYXJyYXk6IDFweCwgMjAwcHg7XG4gICAgc3Ryb2tlLWRhc2hvZmZzZXQ6IDA7XG4gIH1cblxuICA1MCUge1xuICAgIHN0cm9rZS1kYXNoYXJyYXk6IDEwMHB4LCAyMDBweDtcbiAgICBzdHJva2UtZGFzaG9mZnNldDogLTE1cHg7XG4gIH1cblxuICAxMDAlIHtcbiAgICBzdHJva2UtZGFzaGFycmF5OiAxMDBweCwgMjAwcHg7XG4gICAgc3Ryb2tlLWRhc2hvZmZzZXQ6IC0xMjVweDtcbiAgfVxuYCkpO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgdmFyaWFudCxcbiAgICBjb2xvcixcbiAgICBkaXNhYmxlU2hyaW5rXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCB2YXJpYW50LCBgY29sb3Ike2NhcGl0YWxpemUoY29sb3IpfWBdLFxuICAgIHN2ZzogWydzdmcnXSxcbiAgICBjaXJjbGU6IFsnY2lyY2xlJywgYGNpcmNsZSR7Y2FwaXRhbGl6ZSh2YXJpYW50KX1gLCBkaXNhYmxlU2hyaW5rICYmICdjaXJjbGVEaXNhYmxlU2hyaW5rJ11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRDaXJjdWxhclByb2dyZXNzVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5jb25zdCBDaXJjdWxhclByb2dyZXNzUm9vdCA9IHN0eWxlZCgnc3BhbicsIHtcbiAgbmFtZTogJ011aUNpcmN1bGFyUHJvZ3Jlc3MnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMucm9vdCwgc3R5bGVzW293bmVyU3RhdGUudmFyaWFudF0sIHN0eWxlc1tgY29sb3Ike2NhcGl0YWxpemUob3duZXJTdGF0ZS5jb2xvcil9YF1dO1xuICB9XG59KSgoe1xuICBvd25lclN0YXRlLFxuICB0aGVtZVxufSkgPT4gX2V4dGVuZHMoe1xuICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJ1xufSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnZGV0ZXJtaW5hdGUnICYmIHtcbiAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCd0cmFuc2Zvcm0nKVxufSwgb3duZXJTdGF0ZS5jb2xvciAhPT0gJ2luaGVyaXQnICYmIHtcbiAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW5cbn0pLCAoe1xuICBvd25lclN0YXRlXG59KSA9PiBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdpbmRldGVybWluYXRlJyAmJiBjc3MoX3QzIHx8IChfdDMgPSBfYFxuICAgICAgYW5pbWF0aW9uOiAkezB9IDEuNHMgbGluZWFyIGluZmluaXRlO1xuICAgIGApLCBjaXJjdWxhclJvdGF0ZUtleWZyYW1lKSk7XG5jb25zdCBDaXJjdWxhclByb2dyZXNzU1ZHID0gc3R5bGVkKCdzdmcnLCB7XG4gIG5hbWU6ICdNdWlDaXJjdWxhclByb2dyZXNzJyxcbiAgc2xvdDogJ1N2ZycsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4gc3R5bGVzLnN2Z1xufSkoe1xuICBkaXNwbGF5OiAnYmxvY2snIC8vIEtlZXBzIHRoZSBwcm9ncmVzcyBjZW50ZXJlZFxufSk7XG5jb25zdCBDaXJjdWxhclByb2dyZXNzQ2lyY2xlID0gc3R5bGVkKCdjaXJjbGUnLCB7XG4gIG5hbWU6ICdNdWlDaXJjdWxhclByb2dyZXNzJyxcbiAgc2xvdDogJ0NpcmNsZScsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMuY2lyY2xlLCBzdHlsZXNbYGNpcmNsZSR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLnZhcmlhbnQpfWBdLCBvd25lclN0YXRlLmRpc2FibGVTaHJpbmsgJiYgc3R5bGVzLmNpcmNsZURpc2FibGVTaHJpbmtdO1xuICB9XG59KSgoe1xuICBvd25lclN0YXRlLFxuICB0aGVtZVxufSkgPT4gX2V4dGVuZHMoe1xuICBzdHJva2U6ICdjdXJyZW50Q29sb3InXG59LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdkZXRlcm1pbmF0ZScgJiYge1xuICB0cmFuc2l0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ3N0cm9rZS1kYXNob2Zmc2V0Jylcbn0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2luZGV0ZXJtaW5hdGUnICYmIHtcbiAgLy8gU29tZSBkZWZhdWx0IHZhbHVlIHRoYXQgbG9va3MgZmluZSB3YWl0aW5nIGZvciB0aGUgYW5pbWF0aW9uIHRvIGtpY2tzIGluLlxuICBzdHJva2VEYXNoYXJyYXk6ICc4MHB4LCAyMDBweCcsXG4gIHN0cm9rZURhc2hvZmZzZXQ6IDAgLy8gQWRkIHRoZSB1bml0IHRvIGZpeCBhIEVkZ2UgMTYgYW5kIGJlbG93IGJ1Zy5cbn0pLCAoe1xuICBvd25lclN0YXRlXG59KSA9PiBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdpbmRldGVybWluYXRlJyAmJiAhb3duZXJTdGF0ZS5kaXNhYmxlU2hyaW5rICYmIGNzcyhfdDQgfHwgKF90NCA9IF9gXG4gICAgICBhbmltYXRpb246ICR7MH0gMS40cyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbiAgICBgKSwgY2lyY3VsYXJEYXNoS2V5ZnJhbWUpKTtcblxuLyoqXG4gKiAjIyBBUklBXG4gKlxuICogSWYgdGhlIHByb2dyZXNzIGJhciBpcyBkZXNjcmliaW5nIHRoZSBsb2FkaW5nIHByb2dyZXNzIG9mIGEgcGFydGljdWxhciByZWdpb24gb2YgYSBwYWdlLFxuICogeW91IHNob3VsZCB1c2UgYGFyaWEtZGVzY3JpYmVkYnlgIHRvIHBvaW50IHRvIHRoZSBwcm9ncmVzcyBiYXIsIGFuZCBzZXQgdGhlIGBhcmlhLWJ1c3lgXG4gKiBhdHRyaWJ1dGUgdG8gYHRydWVgIG9uIHRoYXQgcmVnaW9uIHVudGlsIGl0IGhhcyBmaW5pc2hlZCBsb2FkaW5nLlxuICovXG5jb25zdCBDaXJjdWxhclByb2dyZXNzID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gQ2lyY3VsYXJQcm9ncmVzcyhpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpQ2lyY3VsYXJQcm9ncmVzcydcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNvbG9yID0gJ3ByaW1hcnknLFxuICAgICAgZGlzYWJsZVNocmluayA9IGZhbHNlLFxuICAgICAgc2l6ZSA9IDQwLFxuICAgICAgc3R5bGUsXG4gICAgICB0aGlja25lc3MgPSAzLjYsXG4gICAgICB2YWx1ZSA9IDAsXG4gICAgICB2YXJpYW50ID0gJ2luZGV0ZXJtaW5hdGUnXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjb2xvcixcbiAgICBkaXNhYmxlU2hyaW5rLFxuICAgIHNpemUsXG4gICAgdGhpY2tuZXNzLFxuICAgIHZhbHVlLFxuICAgIHZhcmlhbnRcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgY29uc3QgY2lyY2xlU3R5bGUgPSB7fTtcbiAgY29uc3Qgcm9vdFN0eWxlID0ge307XG4gIGNvbnN0IHJvb3RQcm9wcyA9IHt9O1xuICBpZiAodmFyaWFudCA9PT0gJ2RldGVybWluYXRlJykge1xuICAgIGNvbnN0IGNpcmN1bWZlcmVuY2UgPSAyICogTWF0aC5QSSAqICgoU0laRSAtIHRoaWNrbmVzcykgLyAyKTtcbiAgICBjaXJjbGVTdHlsZS5zdHJva2VEYXNoYXJyYXkgPSBjaXJjdW1mZXJlbmNlLnRvRml4ZWQoMyk7XG4gICAgcm9vdFByb3BzWydhcmlhLXZhbHVlbm93J10gPSBNYXRoLnJvdW5kKHZhbHVlKTtcbiAgICBjaXJjbGVTdHlsZS5zdHJva2VEYXNob2Zmc2V0ID0gYCR7KCgxMDAgLSB2YWx1ZSkgLyAxMDAgKiBjaXJjdW1mZXJlbmNlKS50b0ZpeGVkKDMpfXB4YDtcbiAgICByb290U3R5bGUudHJhbnNmb3JtID0gJ3JvdGF0ZSgtOTBkZWcpJztcbiAgfVxuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goQ2lyY3VsYXJQcm9ncmVzc1Jvb3QsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgIHN0eWxlOiBfZXh0ZW5kcyh7XG4gICAgICB3aWR0aDogc2l6ZSxcbiAgICAgIGhlaWdodDogc2l6ZVxuICAgIH0sIHJvb3RTdHlsZSwgc3R5bGUpLFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgcmVmOiByZWYsXG4gICAgcm9sZTogXCJwcm9ncmVzc2JhclwiXG4gIH0sIHJvb3RQcm9wcywgb3RoZXIsIHtcbiAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3goQ2lyY3VsYXJQcm9ncmVzc1NWRywge1xuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLnN2ZyxcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICB2aWV3Qm94OiBgJHtTSVpFIC8gMn0gJHtTSVpFIC8gMn0gJHtTSVpFfSAke1NJWkV9YCxcbiAgICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeChDaXJjdWxhclByb2dyZXNzQ2lyY2xlLCB7XG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5jaXJjbGUsXG4gICAgICAgIHN0eWxlOiBjaXJjbGVTdHlsZSxcbiAgICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICAgICAgY3g6IFNJWkUsXG4gICAgICAgIGN5OiBTSVpFLFxuICAgICAgICByOiAoU0laRSAtIHRoaWNrbmVzcykgLyAyLFxuICAgICAgICBmaWxsOiBcIm5vbmVcIixcbiAgICAgICAgc3Ryb2tlV2lkdGg6IHRoaWNrbmVzc1xuICAgICAgfSlcbiAgICB9KVxuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IENpcmN1bGFyUHJvZ3Jlc3MucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIFx1MjUwQ1x1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMCBXYXJuaW5nIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUxMFxuICAvLyBcdTI1MDIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiBcdTI1MDJcbiAgLy8gXHUyNTAyICAgIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiAgICAgXHUyNTAyXG4gIC8vIFx1MjUxNFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUxOFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb2xvciBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBJdCBzdXBwb3J0cyBib3RoIGRlZmF1bHQgYW5kIGN1c3RvbSB0aGVtZSBjb2xvcnMsIHdoaWNoIGNhbiBiZSBhZGRlZCBhcyBzaG93biBpbiB0aGVcbiAgICogW3BhbGV0dGUgY3VzdG9taXphdGlvbiBndWlkZV0oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL2N1c3RvbWl6YXRpb24vcGFsZXR0ZS8jY3VzdG9tLWNvbG9ycykuXG4gICAqIEBkZWZhdWx0ICdwcmltYXJ5J1xuICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnaW5oZXJpdCcsICdwcmltYXJ5JywgJ3NlY29uZGFyeScsICdlcnJvcicsICdpbmZvJywgJ3N1Y2Nlc3MnLCAnd2FybmluZyddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgc2hyaW5rIGFuaW1hdGlvbiBpcyBkaXNhYmxlZC5cbiAgICogVGhpcyBvbmx5IHdvcmtzIGlmIHZhcmlhbnQgaXMgYGluZGV0ZXJtaW5hdGVgLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZVNocmluazogY2hhaW5Qcm9wVHlwZXMoUHJvcFR5cGVzLmJvb2wsIHByb3BzID0+IHtcbiAgICBpZiAocHJvcHMuZGlzYWJsZVNocmluayAmJiBwcm9wcy52YXJpYW50ICYmIHByb3BzLnZhcmlhbnQgIT09ICdpbmRldGVybWluYXRlJykge1xuICAgICAgcmV0dXJuIG5ldyBFcnJvcignTVVJOiBZb3UgaGF2ZSBwcm92aWRlZCB0aGUgYGRpc2FibGVTaHJpbmtgIHByb3AgJyArICd3aXRoIGEgdmFyaWFudCBvdGhlciB0aGFuIGBpbmRldGVybWluYXRlYC4gVGhpcyB3aWxsIGhhdmUgbm8gZWZmZWN0LicpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgc2l6ZSBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBJZiB1c2luZyBhIG51bWJlciwgdGhlIHBpeGVsIHVuaXQgaXMgYXNzdW1lZC5cbiAgICogSWYgdXNpbmcgYSBzdHJpbmcsIHlvdSBuZWVkIHRvIHByb3ZpZGUgdGhlIENTUyB1bml0LCBlLmcuICczcmVtJy5cbiAgICogQGRlZmF1bHQgNDBcbiAgICovXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogVGhlIHRoaWNrbmVzcyBvZiB0aGUgY2lyY2xlLlxuICAgKiBAZGVmYXVsdCAzLjZcbiAgICovXG4gIHRoaWNrbmVzczogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBvZiB0aGUgcHJvZ3Jlc3MgaW5kaWNhdG9yIGZvciB0aGUgZGV0ZXJtaW5hdGUgdmFyaWFudC5cbiAgICogVmFsdWUgYmV0d2VlbiAwIGFuZCAxMDAuXG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIHZhbHVlOiBQcm9wVHlwZXMubnVtYmVyLFxuICAvKipcbiAgICogVGhlIHZhcmlhbnQgdG8gdXNlLlxuICAgKiBVc2UgaW5kZXRlcm1pbmF0ZSB3aGVuIHRoZXJlIGlzIG5vIHByb2dyZXNzIHZhbHVlLlxuICAgKiBAZGVmYXVsdCAnaW5kZXRlcm1pbmF0ZSdcbiAgICovXG4gIHZhcmlhbnQ6IFByb3BUeXBlcy5vbmVPZihbJ2RldGVybWluYXRlJywgJ2luZGV0ZXJtaW5hdGUnXSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBDaXJjdWxhclByb2dyZXNzOyIsICJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldENpcmN1bGFyUHJvZ3Jlc3NVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUNpcmN1bGFyUHJvZ3Jlc3MnLCBzbG90KTtcbn1cbmNvbnN0IGNpcmN1bGFyUHJvZ3Jlc3NDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpQ2lyY3VsYXJQcm9ncmVzcycsIFsncm9vdCcsICdkZXRlcm1pbmF0ZScsICdpbmRldGVybWluYXRlJywgJ2NvbG9yUHJpbWFyeScsICdjb2xvclNlY29uZGFyeScsICdzdmcnLCAnY2lyY2xlJywgJ2NpcmNsZURldGVybWluYXRlJywgJ2NpcmNsZUluZGV0ZXJtaW5hdGUnLCAnY2lyY2xlRGlzYWJsZVNocmluayddKTtcbmV4cG9ydCBkZWZhdWx0IGNpcmN1bGFyUHJvZ3Jlc3NDbGFzc2VzOyIsICIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImNvbG9yXCIsIFwiY29tcG9uZW50XCIsIFwiZGlzYWJsZWRcIiwgXCJlcnJvclwiLCBcImZvY3VzZWRcIiwgXCJmdWxsV2lkdGhcIiwgXCJoaWRkZW5MYWJlbFwiLCBcIm1hcmdpblwiLCBcInJlcXVpcmVkXCIsIFwic2l6ZVwiLCBcInZhcmlhbnRcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgY29tcG9zZUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHsgaXNGaWxsZWQsIGlzQWRvcm5lZFN0YXJ0IH0gZnJvbSAnLi4vSW5wdXRCYXNlL3V0aWxzJztcbmltcG9ydCBjYXBpdGFsaXplIGZyb20gJy4uL3V0aWxzL2NhcGl0YWxpemUnO1xuaW1wb3J0IGlzTXVpRWxlbWVudCBmcm9tICcuLi91dGlscy9pc011aUVsZW1lbnQnO1xuaW1wb3J0IEZvcm1Db250cm9sQ29udGV4dCBmcm9tICcuL0Zvcm1Db250cm9sQ29udGV4dCc7XG5pbXBvcnQgeyBnZXRGb3JtQ29udHJvbFV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnLi9mb3JtQ29udHJvbENsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIG1hcmdpbixcbiAgICBmdWxsV2lkdGhcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIG1hcmdpbiAhPT0gJ25vbmUnICYmIGBtYXJnaW4ke2NhcGl0YWxpemUobWFyZ2luKX1gLCBmdWxsV2lkdGggJiYgJ2Z1bGxXaWR0aCddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0Rm9ybUNvbnRyb2xVdGlsaXR5Q2xhc3NlcywgY2xhc3Nlcyk7XG59O1xuY29uc3QgRm9ybUNvbnRyb2xSb290ID0gc3R5bGVkKCdkaXYnLCB7XG4gIG5hbWU6ICdNdWlGb3JtQ29udHJvbCcsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6ICh7XG4gICAgb3duZXJTdGF0ZVxuICB9LCBzdHlsZXMpID0+IHtcbiAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0eWxlcy5yb290LCBzdHlsZXNbYG1hcmdpbiR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLm1hcmdpbil9YF0sIG93bmVyU3RhdGUuZnVsbFdpZHRoICYmIHN0eWxlcy5mdWxsV2lkdGgpO1xuICB9XG59KSgoe1xuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGRpc3BsYXk6ICdpbmxpbmUtZmxleCcsXG4gIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgLy8gUmVzZXQgZmllbGRzZXQgZGVmYXVsdCBzdHlsZS5cbiAgbWluV2lkdGg6IDAsXG4gIHBhZGRpbmc6IDAsXG4gIG1hcmdpbjogMCxcbiAgYm9yZGVyOiAwLFxuICB2ZXJ0aWNhbEFsaWduOiAndG9wJ1xufSwgb3duZXJTdGF0ZS5tYXJnaW4gPT09ICdub3JtYWwnICYmIHtcbiAgbWFyZ2luVG9wOiAxNixcbiAgbWFyZ2luQm90dG9tOiA4XG59LCBvd25lclN0YXRlLm1hcmdpbiA9PT0gJ2RlbnNlJyAmJiB7XG4gIG1hcmdpblRvcDogOCxcbiAgbWFyZ2luQm90dG9tOiA0XG59LCBvd25lclN0YXRlLmZ1bGxXaWR0aCAmJiB7XG4gIHdpZHRoOiAnMTAwJSdcbn0pKTtcblxuLyoqXG4gKiBQcm92aWRlcyBjb250ZXh0IHN1Y2ggYXMgZmlsbGVkL2ZvY3VzZWQvZXJyb3IvcmVxdWlyZWQgZm9yIGZvcm0gaW5wdXRzLlxuICogUmVseWluZyBvbiB0aGUgY29udGV4dCBwcm92aWRlcyBoaWdoIGZsZXhpYmlsaXR5IGFuZCBlbnN1cmVzIHRoYXQgdGhlIHN0YXRlIGFsd2F5cyBzdGF5c1xuICogY29uc2lzdGVudCBhY3Jvc3MgdGhlIGNoaWxkcmVuIG9mIHRoZSBgRm9ybUNvbnRyb2xgLlxuICogVGhpcyBjb250ZXh0IGlzIHVzZWQgYnkgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOlxuICpcbiAqICAtIEZvcm1MYWJlbFxuICogIC0gRm9ybUhlbHBlclRleHRcbiAqICAtIElucHV0XG4gKiAgLSBJbnB1dExhYmVsXG4gKlxuICogWW91IGNhbiBmaW5kIG9uZSBjb21wb3NpdGlvbiBleGFtcGxlIGJlbG93IGFuZCBtb3JlIGdvaW5nIHRvIFt0aGUgZGVtb3NdKC9tYXRlcmlhbC11aS9yZWFjdC10ZXh0LWZpZWxkLyNjb21wb25lbnRzKS5cbiAqXG4gKiBgYGBqc3hcbiAqIDxGb3JtQ29udHJvbD5cbiAqICAgPElucHV0TGFiZWwgaHRtbEZvcj1cIm15LWlucHV0XCI+RW1haWwgYWRkcmVzczwvSW5wdXRMYWJlbD5cbiAqICAgPElucHV0IGlkPVwibXktaW5wdXRcIiBhcmlhLWRlc2NyaWJlZGJ5PVwibXktaGVscGVyLXRleHRcIiAvPlxuICogICA8Rm9ybUhlbHBlclRleHQgaWQ9XCJteS1oZWxwZXItdGV4dFwiPldlJ2xsIG5ldmVyIHNoYXJlIHlvdXIgZW1haWwuPC9Gb3JtSGVscGVyVGV4dD5cbiAqIDwvRm9ybUNvbnRyb2w+XG4gKiBgYGBcbiAqXG4gKiBcdTI2QTBcdUZFMEYgT25seSBvbmUgYElucHV0QmFzZWAgY2FuIGJlIHVzZWQgd2l0aGluIGEgRm9ybUNvbnRyb2wgYmVjYXVzZSBpdCBjcmVhdGVzIHZpc3VhbCBpbmNvbnNpc3RlbmNpZXMuXG4gKiBGb3IgaW5zdGFuY2UsIG9ubHkgb25lIGlucHV0IGNhbiBiZSBmb2N1c2VkIGF0IHRoZSBzYW1lIHRpbWUsIHRoZSBzdGF0ZSBzaG91bGRuJ3QgYmUgc2hhcmVkLlxuICovXG5jb25zdCBGb3JtQ29udHJvbCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIEZvcm1Db250cm9sKGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlGb3JtQ29udHJvbCdcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29sb3IgPSAncHJpbWFyeScsXG4gICAgICBjb21wb25lbnQgPSAnZGl2JyxcbiAgICAgIGRpc2FibGVkID0gZmFsc2UsXG4gICAgICBlcnJvciA9IGZhbHNlLFxuICAgICAgZm9jdXNlZDogdmlzdWFsbHlGb2N1c2VkLFxuICAgICAgZnVsbFdpZHRoID0gZmFsc2UsXG4gICAgICBoaWRkZW5MYWJlbCA9IGZhbHNlLFxuICAgICAgbWFyZ2luID0gJ25vbmUnLFxuICAgICAgcmVxdWlyZWQgPSBmYWxzZSxcbiAgICAgIHNpemUgPSAnbWVkaXVtJyxcbiAgICAgIHZhcmlhbnQgPSAnb3V0bGluZWQnXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjb2xvcixcbiAgICBjb21wb25lbnQsXG4gICAgZGlzYWJsZWQsXG4gICAgZXJyb3IsXG4gICAgZnVsbFdpZHRoLFxuICAgIGhpZGRlbkxhYmVsLFxuICAgIG1hcmdpbixcbiAgICByZXF1aXJlZCxcbiAgICBzaXplLFxuICAgIHZhcmlhbnRcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgY29uc3QgW2Fkb3JuZWRTdGFydCwgc2V0QWRvcm5lZFN0YXJ0XSA9IFJlYWN0LnVzZVN0YXRlKCgpID0+IHtcbiAgICAvLyBXZSBuZWVkIHRvIGl0ZXJhdGUgdGhyb3VnaCB0aGUgY2hpbGRyZW4gYW5kIGZpbmQgdGhlIElucHV0IGluIG9yZGVyXG4gICAgLy8gdG8gZnVsbHkgc3VwcG9ydCBzZXJ2ZXItc2lkZSByZW5kZXJpbmcuXG4gICAgbGV0IGluaXRpYWxBZG9ybmVkU3RhcnQgPSBmYWxzZTtcbiAgICBpZiAoY2hpbGRyZW4pIHtcbiAgICAgIFJlYWN0LkNoaWxkcmVuLmZvckVhY2goY2hpbGRyZW4sIGNoaWxkID0+IHtcbiAgICAgICAgaWYgKCFpc011aUVsZW1lbnQoY2hpbGQsIFsnSW5wdXQnLCAnU2VsZWN0J10pKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlucHV0ID0gaXNNdWlFbGVtZW50KGNoaWxkLCBbJ1NlbGVjdCddKSA/IGNoaWxkLnByb3BzLmlucHV0IDogY2hpbGQ7XG4gICAgICAgIGlmIChpbnB1dCAmJiBpc0Fkb3JuZWRTdGFydChpbnB1dC5wcm9wcykpIHtcbiAgICAgICAgICBpbml0aWFsQWRvcm5lZFN0YXJ0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBpbml0aWFsQWRvcm5lZFN0YXJ0O1xuICB9KTtcbiAgY29uc3QgW2ZpbGxlZCwgc2V0RmlsbGVkXSA9IFJlYWN0LnVzZVN0YXRlKCgpID0+IHtcbiAgICAvLyBXZSBuZWVkIHRvIGl0ZXJhdGUgdGhyb3VnaCB0aGUgY2hpbGRyZW4gYW5kIGZpbmQgdGhlIElucHV0IGluIG9yZGVyXG4gICAgLy8gdG8gZnVsbHkgc3VwcG9ydCBzZXJ2ZXItc2lkZSByZW5kZXJpbmcuXG4gICAgbGV0IGluaXRpYWxGaWxsZWQgPSBmYWxzZTtcbiAgICBpZiAoY2hpbGRyZW4pIHtcbiAgICAgIFJlYWN0LkNoaWxkcmVuLmZvckVhY2goY2hpbGRyZW4sIGNoaWxkID0+IHtcbiAgICAgICAgaWYgKCFpc011aUVsZW1lbnQoY2hpbGQsIFsnSW5wdXQnLCAnU2VsZWN0J10pKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0ZpbGxlZChjaGlsZC5wcm9wcywgdHJ1ZSkgfHwgaXNGaWxsZWQoY2hpbGQucHJvcHMuaW5wdXRQcm9wcywgdHJ1ZSkpIHtcbiAgICAgICAgICBpbml0aWFsRmlsbGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBpbml0aWFsRmlsbGVkO1xuICB9KTtcbiAgY29uc3QgW2ZvY3VzZWRTdGF0ZSwgc2V0Rm9jdXNlZF0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGlmIChkaXNhYmxlZCAmJiBmb2N1c2VkU3RhdGUpIHtcbiAgICBzZXRGb2N1c2VkKGZhbHNlKTtcbiAgfVxuICBjb25zdCBmb2N1c2VkID0gdmlzdWFsbHlGb2N1c2VkICE9PSB1bmRlZmluZWQgJiYgIWRpc2FibGVkID8gdmlzdWFsbHlGb2N1c2VkIDogZm9jdXNlZFN0YXRlO1xuICBsZXQgcmVnaXN0ZXJFZmZlY3Q7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzXG4gICAgY29uc3QgcmVnaXN0ZXJlZElucHV0ID0gUmVhY3QudXNlUmVmKGZhbHNlKTtcbiAgICByZWdpc3RlckVmZmVjdCA9ICgpID0+IHtcbiAgICAgIGlmIChyZWdpc3RlcmVkSW5wdXQuY3VycmVudCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFsnTVVJOiBUaGVyZSBhcmUgbXVsdGlwbGUgYElucHV0QmFzZWAgY29tcG9uZW50cyBpbnNpZGUgYSBGb3JtQ29udHJvbC4nLCAnVGhpcyBjcmVhdGVzIHZpc3VhbCBpbmNvbnNpc3RlbmNpZXMsIG9ubHkgdXNlIG9uZSBgSW5wdXRCYXNlYC4nXS5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgICByZWdpc3RlcmVkSW5wdXQuY3VycmVudCA9IHRydWU7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICByZWdpc3RlcmVkSW5wdXQuY3VycmVudCA9IGZhbHNlO1xuICAgICAgfTtcbiAgICB9O1xuICB9XG4gIGNvbnN0IGNoaWxkQ29udGV4dCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBhZG9ybmVkU3RhcnQsXG4gICAgICBzZXRBZG9ybmVkU3RhcnQsXG4gICAgICBjb2xvcixcbiAgICAgIGRpc2FibGVkLFxuICAgICAgZXJyb3IsXG4gICAgICBmaWxsZWQsXG4gICAgICBmb2N1c2VkLFxuICAgICAgZnVsbFdpZHRoLFxuICAgICAgaGlkZGVuTGFiZWwsXG4gICAgICBzaXplLFxuICAgICAgb25CbHVyOiAoKSA9PiB7XG4gICAgICAgIHNldEZvY3VzZWQoZmFsc2UpO1xuICAgICAgfSxcbiAgICAgIG9uRW1wdHk6ICgpID0+IHtcbiAgICAgICAgc2V0RmlsbGVkKGZhbHNlKTtcbiAgICAgIH0sXG4gICAgICBvbkZpbGxlZDogKCkgPT4ge1xuICAgICAgICBzZXRGaWxsZWQodHJ1ZSk7XG4gICAgICB9LFxuICAgICAgb25Gb2N1czogKCkgPT4ge1xuICAgICAgICBzZXRGb2N1c2VkKHRydWUpO1xuICAgICAgfSxcbiAgICAgIHJlZ2lzdGVyRWZmZWN0LFxuICAgICAgcmVxdWlyZWQsXG4gICAgICB2YXJpYW50XG4gICAgfTtcbiAgfSwgW2Fkb3JuZWRTdGFydCwgY29sb3IsIGRpc2FibGVkLCBlcnJvciwgZmlsbGVkLCBmb2N1c2VkLCBmdWxsV2lkdGgsIGhpZGRlbkxhYmVsLCByZWdpc3RlckVmZmVjdCwgcmVxdWlyZWQsIHNpemUsIHZhcmlhbnRdKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KEZvcm1Db250cm9sQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBjaGlsZENvbnRleHQsXG4gICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4KEZvcm1Db250cm9sUm9vdCwgX2V4dGVuZHMoe1xuICAgICAgYXM6IGNvbXBvbmVudCxcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgICAgcmVmOiByZWZcbiAgICB9LCBvdGhlciwge1xuICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgfSkpXG4gIH0pO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBGb3JtQ29udHJvbC5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gXHUyNTBDXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwIFdhcm5pbmcgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTEwXG4gIC8vIFx1MjUwMiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIFx1MjUwMlxuICAvLyBcdTI1MDIgICAgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuICAgICBcdTI1MDJcbiAgLy8gXHUyNTE0XHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTE4XG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb2xvciBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBJdCBzdXBwb3J0cyBib3RoIGRlZmF1bHQgYW5kIGN1c3RvbSB0aGVtZSBjb2xvcnMsIHdoaWNoIGNhbiBiZSBhZGRlZCBhcyBzaG93biBpbiB0aGVcbiAgICogW3BhbGV0dGUgY3VzdG9taXphdGlvbiBndWlkZV0oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL2N1c3RvbWl6YXRpb24vcGFsZXR0ZS8jY3VzdG9tLWNvbG9ycykuXG4gICAqIEBkZWZhdWx0ICdwcmltYXJ5J1xuICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsncHJpbWFyeScsICdzZWNvbmRhcnknLCAnZXJyb3InLCAnaW5mbycsICdzdWNjZXNzJywgJ3dhcm5pbmcnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbGFiZWwsIGlucHV0IGFuZCBoZWxwZXIgdGV4dCBzaG91bGQgYmUgZGlzcGxheWVkIGluIGEgZGlzYWJsZWQgc3RhdGUuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsYWJlbCBpcyBkaXNwbGF5ZWQgaW4gYW4gZXJyb3Igc3RhdGUuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBlcnJvcjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgZGlzcGxheWVkIGluIGZvY3VzZWQgc3RhdGUuXG4gICAqL1xuICBmb2N1c2VkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCB3aWxsIHRha2UgdXAgdGhlIGZ1bGwgd2lkdGggb2YgaXRzIGNvbnRhaW5lci5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGZ1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsYWJlbCBpcyBoaWRkZW4uXG4gICAqIFRoaXMgaXMgdXNlZCB0byBpbmNyZWFzZSBkZW5zaXR5IGZvciBhIGBGaWxsZWRJbnB1dGAuXG4gICAqIEJlIHN1cmUgdG8gYWRkIGBhcmlhLWxhYmVsYCB0byB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgaGlkZGVuTGFiZWw6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYGRlbnNlYCBvciBgbm9ybWFsYCwgd2lsbCBhZGp1c3QgdmVydGljYWwgc3BhY2luZyBvZiB0aGlzIGFuZCBjb250YWluZWQgY29tcG9uZW50cy5cbiAgICogQGRlZmF1bHQgJ25vbmUnXG4gICAqL1xuICBtYXJnaW46IFByb3BUeXBlcy5vbmVPZihbJ2RlbnNlJywgJ25vbmUnLCAnbm9ybWFsJ10pLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbGFiZWwgd2lsbCBpbmRpY2F0ZSB0aGF0IHRoZSBgaW5wdXRgIGlzIHJlcXVpcmVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVxdWlyZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIHNpemUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgJ21lZGl1bSdcbiAgICovXG4gIHNpemU6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnbWVkaXVtJywgJ3NtYWxsJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBUaGUgdmFyaWFudCB0byB1c2UuXG4gICAqIEBkZWZhdWx0ICdvdXRsaW5lZCdcbiAgICovXG4gIHZhcmlhbnQ6IFByb3BUeXBlcy5vbmVPZihbJ2ZpbGxlZCcsICdvdXRsaW5lZCcsICdzdGFuZGFyZCddKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IEZvcm1Db250cm9sOyIsICJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1Db250cm9sVXRpbGl0eUNsYXNzZXMoc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUZvcm1Db250cm9sJywgc2xvdCk7XG59XG5jb25zdCBmb3JtQ29udHJvbENsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlGb3JtQ29udHJvbCcsIFsncm9vdCcsICdtYXJnaW5Ob25lJywgJ21hcmdpbk5vcm1hbCcsICdtYXJnaW5EZW5zZScsICdmdWxsV2lkdGgnLCAnZGlzYWJsZWQnXSk7XG5leHBvcnQgZGVmYXVsdCBmb3JtQ29udHJvbENsYXNzZXM7IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNoZWNrZWRcIiwgXCJjbGFzc05hbWVcIiwgXCJjb21wb25lbnRzUHJvcHNcIiwgXCJjb250cm9sXCIsIFwiZGlzYWJsZWRcIiwgXCJkaXNhYmxlVHlwb2dyYXBoeVwiLCBcImlucHV0UmVmXCIsIFwibGFiZWxcIiwgXCJsYWJlbFBsYWNlbWVudFwiLCBcIm5hbWVcIiwgXCJvbkNoYW5nZVwiLCBcInJlcXVpcmVkXCIsIFwic2xvdFByb3BzXCIsIFwidmFsdWVcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgcmVmVHlwZSBmcm9tICdAbXVpL3V0aWxzL3JlZlR5cGUnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHsgdXNlRm9ybUNvbnRyb2wgfSBmcm9tICcuLi9Gb3JtQ29udHJvbCc7XG5pbXBvcnQgU3RhY2sgZnJvbSAnLi4vU3RhY2snO1xuaW1wb3J0IFR5cG9ncmFwaHkgZnJvbSAnLi4vVHlwb2dyYXBoeSc7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgZm9ybUNvbnRyb2xMYWJlbENsYXNzZXMsIHsgZ2V0Rm9ybUNvbnRyb2xMYWJlbFV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnLi9mb3JtQ29udHJvbExhYmVsQ2xhc3Nlcyc7XG5pbXBvcnQgZm9ybUNvbnRyb2xTdGF0ZSBmcm9tICcuLi9Gb3JtQ29udHJvbC9mb3JtQ29udHJvbFN0YXRlJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICBkaXNhYmxlZCxcbiAgICBsYWJlbFBsYWNlbWVudCxcbiAgICBlcnJvcixcbiAgICByZXF1aXJlZFxuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgZGlzYWJsZWQgJiYgJ2Rpc2FibGVkJywgYGxhYmVsUGxhY2VtZW50JHtjYXBpdGFsaXplKGxhYmVsUGxhY2VtZW50KX1gLCBlcnJvciAmJiAnZXJyb3InLCByZXF1aXJlZCAmJiAncmVxdWlyZWQnXSxcbiAgICBsYWJlbDogWydsYWJlbCcsIGRpc2FibGVkICYmICdkaXNhYmxlZCddLFxuICAgIGFzdGVyaXNrOiBbJ2FzdGVyaXNrJywgZXJyb3IgJiYgJ2Vycm9yJ11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRGb3JtQ29udHJvbExhYmVsVXRpbGl0eUNsYXNzZXMsIGNsYXNzZXMpO1xufTtcbmV4cG9ydCBjb25zdCBGb3JtQ29udHJvbExhYmVsUm9vdCA9IHN0eWxlZCgnbGFiZWwnLCB7XG4gIG5hbWU6ICdNdWlGb3JtQ29udHJvbExhYmVsJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbe1xuICAgICAgW2AmIC4ke2Zvcm1Db250cm9sTGFiZWxDbGFzc2VzLmxhYmVsfWBdOiBzdHlsZXMubGFiZWxcbiAgICB9LCBzdHlsZXMucm9vdCwgc3R5bGVzW2BsYWJlbFBsYWNlbWVudCR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLmxhYmVsUGxhY2VtZW50KX1gXV07XG4gIH1cbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGRpc3BsYXk6ICdpbmxpbmUtZmxleCcsXG4gIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgLy8gRm9yIGNvcnJlY3QgYWxpZ25tZW50IHdpdGggdGhlIHRleHQuXG4gIHZlcnRpY2FsQWxpZ246ICdtaWRkbGUnLFxuICBXZWJraXRUYXBIaWdobGlnaHRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgbWFyZ2luTGVmdDogLTExLFxuICBtYXJnaW5SaWdodDogMTYsXG4gIC8vIHVzZWQgZm9yIHJvdyBwcmVzZW50YXRpb24gb2YgcmFkaW8vY2hlY2tib3hcbiAgW2AmLiR7Zm9ybUNvbnRyb2xMYWJlbENsYXNzZXMuZGlzYWJsZWR9YF06IHtcbiAgICBjdXJzb3I6ICdkZWZhdWx0J1xuICB9XG59LCBvd25lclN0YXRlLmxhYmVsUGxhY2VtZW50ID09PSAnc3RhcnQnICYmIHtcbiAgZmxleERpcmVjdGlvbjogJ3Jvdy1yZXZlcnNlJyxcbiAgbWFyZ2luTGVmdDogMTYsXG4gIC8vIHVzZWQgZm9yIHJvdyBwcmVzZW50YXRpb24gb2YgcmFkaW8vY2hlY2tib3hcbiAgbWFyZ2luUmlnaHQ6IC0xMVxufSwgb3duZXJTdGF0ZS5sYWJlbFBsYWNlbWVudCA9PT0gJ3RvcCcgJiYge1xuICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uLXJldmVyc2UnLFxuICBtYXJnaW5MZWZ0OiAxNlxufSwgb3duZXJTdGF0ZS5sYWJlbFBsYWNlbWVudCA9PT0gJ2JvdHRvbScgJiYge1xuICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgbWFyZ2luTGVmdDogMTZcbn0sIHtcbiAgW2AmIC4ke2Zvcm1Db250cm9sTGFiZWxDbGFzc2VzLmxhYmVsfWBdOiB7XG4gICAgW2AmLiR7Zm9ybUNvbnRyb2xMYWJlbENsYXNzZXMuZGlzYWJsZWR9YF06IHtcbiAgICAgIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS50ZXh0LmRpc2FibGVkXG4gICAgfVxuICB9XG59KSk7XG5jb25zdCBBc3Rlcmlza0NvbXBvbmVudCA9IHN0eWxlZCgnc3BhbicsIHtcbiAgbmFtZTogJ011aUZvcm1Db250cm9sTGFiZWwnLFxuICBzbG90OiAnQXN0ZXJpc2snLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlcy5hc3Rlcmlza1xufSkoKHtcbiAgdGhlbWVcbn0pID0+ICh7XG4gIFtgJi4ke2Zvcm1Db250cm9sTGFiZWxDbGFzc2VzLmVycm9yfWBdOiB7XG4gICAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmVycm9yLm1haW5cbiAgfVxufSkpO1xuXG4vKipcbiAqIERyb3AtaW4gcmVwbGFjZW1lbnQgb2YgdGhlIGBSYWRpb2AsIGBTd2l0Y2hgIGFuZCBgQ2hlY2tib3hgIGNvbXBvbmVudC5cbiAqIFVzZSB0aGlzIGNvbXBvbmVudCBpZiB5b3Ugd2FudCB0byBkaXNwbGF5IGFuIGV4dHJhIGxhYmVsLlxuICovXG5jb25zdCBGb3JtQ29udHJvbExhYmVsID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gRm9ybUNvbnRyb2xMYWJlbChpblByb3BzLCByZWYpIHtcbiAgdmFyIF9yZWYsIF9zbG90UHJvcHMkdHlwb2dyYXBoeTtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpRm9ybUNvbnRyb2xMYWJlbCdcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNvbXBvbmVudHNQcm9wcyA9IHt9LFxuICAgICAgY29udHJvbCxcbiAgICAgIGRpc2FibGVkOiBkaXNhYmxlZFByb3AsXG4gICAgICBkaXNhYmxlVHlwb2dyYXBoeSxcbiAgICAgIGxhYmVsOiBsYWJlbFByb3AsXG4gICAgICBsYWJlbFBsYWNlbWVudCA9ICdlbmQnLFxuICAgICAgcmVxdWlyZWQ6IHJlcXVpcmVkUHJvcCxcbiAgICAgIHNsb3RQcm9wcyA9IHt9XG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IG11aUZvcm1Db250cm9sID0gdXNlRm9ybUNvbnRyb2woKTtcbiAgY29uc3QgZGlzYWJsZWQgPSAoX3JlZiA9IGRpc2FibGVkUHJvcCAhPSBudWxsID8gZGlzYWJsZWRQcm9wIDogY29udHJvbC5wcm9wcy5kaXNhYmxlZCkgIT0gbnVsbCA/IF9yZWYgOiBtdWlGb3JtQ29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogbXVpRm9ybUNvbnRyb2wuZGlzYWJsZWQ7XG4gIGNvbnN0IHJlcXVpcmVkID0gcmVxdWlyZWRQcm9wICE9IG51bGwgPyByZXF1aXJlZFByb3AgOiBjb250cm9sLnByb3BzLnJlcXVpcmVkO1xuICBjb25zdCBjb250cm9sUHJvcHMgPSB7XG4gICAgZGlzYWJsZWQsXG4gICAgcmVxdWlyZWRcbiAgfTtcbiAgWydjaGVja2VkJywgJ25hbWUnLCAnb25DaGFuZ2UnLCAndmFsdWUnLCAnaW5wdXRSZWYnXS5mb3JFYWNoKGtleSA9PiB7XG4gICAgaWYgKHR5cGVvZiBjb250cm9sLnByb3BzW2tleV0gPT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBwcm9wc1trZXldICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29udHJvbFByb3BzW2tleV0gPSBwcm9wc1trZXldO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IGZjcyA9IGZvcm1Db250cm9sU3RhdGUoe1xuICAgIHByb3BzLFxuICAgIG11aUZvcm1Db250cm9sLFxuICAgIHN0YXRlczogWydlcnJvciddXG4gIH0pO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgZGlzYWJsZWQsXG4gICAgbGFiZWxQbGFjZW1lbnQsXG4gICAgcmVxdWlyZWQsXG4gICAgZXJyb3I6IGZjcy5lcnJvclxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICBjb25zdCB0eXBvZ3JhcGh5U2xvdFByb3BzID0gKF9zbG90UHJvcHMkdHlwb2dyYXBoeSA9IHNsb3RQcm9wcy50eXBvZ3JhcGh5KSAhPSBudWxsID8gX3Nsb3RQcm9wcyR0eXBvZ3JhcGh5IDogY29tcG9uZW50c1Byb3BzLnR5cG9ncmFwaHk7XG4gIGxldCBsYWJlbCA9IGxhYmVsUHJvcDtcbiAgaWYgKGxhYmVsICE9IG51bGwgJiYgbGFiZWwudHlwZSAhPT0gVHlwb2dyYXBoeSAmJiAhZGlzYWJsZVR5cG9ncmFwaHkpIHtcbiAgICBsYWJlbCA9IC8qI19fUFVSRV9fKi9fanN4KFR5cG9ncmFwaHksIF9leHRlbmRzKHtcbiAgICAgIGNvbXBvbmVudDogXCJzcGFuXCJcbiAgICB9LCB0eXBvZ3JhcGh5U2xvdFByb3BzLCB7XG4gICAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5sYWJlbCwgdHlwb2dyYXBoeVNsb3RQcm9wcyA9PSBudWxsID8gdm9pZCAwIDogdHlwb2dyYXBoeVNsb3RQcm9wcy5jbGFzc05hbWUpLFxuICAgICAgY2hpbGRyZW46IGxhYmVsXG4gICAgfSkpO1xuICB9XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeHMoRm9ybUNvbnRyb2xMYWJlbFJvb3QsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgcmVmOiByZWZcbiAgfSwgb3RoZXIsIHtcbiAgICBjaGlsZHJlbjogWy8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQoY29udHJvbCwgY29udHJvbFByb3BzKSwgcmVxdWlyZWQgPyAvKiNfX1BVUkVfXyovX2pzeHMoU3RhY2ssIHtcbiAgICAgIGRpc3BsYXk6IFwiYmxvY2tcIixcbiAgICAgIGNoaWxkcmVuOiBbbGFiZWwsIC8qI19fUFVSRV9fKi9fanN4cyhBc3Rlcmlza0NvbXBvbmVudCwge1xuICAgICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgICAgICBcImFyaWEtaGlkZGVuXCI6IHRydWUsXG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5hc3RlcmlzayxcbiAgICAgICAgY2hpbGRyZW46IFtcIlxcdTIwMDlcIiwgJyonXVxuICAgICAgfSldXG4gICAgfSkgOiBsYWJlbF1cbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBGb3JtQ29udHJvbExhYmVsLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyBcdTI1MENcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDAgV2FybmluZyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MTBcbiAgLy8gXHUyNTAyIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4gXHUyNTAyXG4gIC8vIFx1MjUwMiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIFx1MjUwMlxuICAvLyBcdTI1MTRcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MThcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBhcHBlYXJzIHNlbGVjdGVkLlxuICAgKi9cbiAgY2hlY2tlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIHByb3BzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBjb21wb25lbnRzUHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgdHlwb2dyYXBoeTogUHJvcFR5cGVzLm9iamVjdFxuICB9KSxcbiAgLyoqXG4gICAqIEEgY29udHJvbCBlbGVtZW50LiBGb3IgaW5zdGFuY2UsIGl0IGNhbiBiZSBhIGBSYWRpb2AsIGEgYFN3aXRjaGAgb3IgYSBgQ2hlY2tib3hgLlxuICAgKi9cbiAgY29udHJvbDogUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbnRyb2wgaXMgZGlzYWJsZWQuXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsYWJlbCBpcyByZW5kZXJlZCBhcyBpdCBpcyBwYXNzZWQgd2l0aG91dCBhbiBhZGRpdGlvbmFsIHR5cG9ncmFwaHkgbm9kZS5cbiAgICovXG4gIGRpc2FibGVUeXBvZ3JhcGh5OiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFBhc3MgYSByZWYgdG8gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIGlucHV0UmVmOiByZWZUeXBlLFxuICAvKipcbiAgICogQSB0ZXh0IG9yIGFuIGVsZW1lbnQgdG8gYmUgdXNlZCBpbiBhbiBlbmNsb3NpbmcgbGFiZWwgZWxlbWVudC5cbiAgICovXG4gIGxhYmVsOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgbGFiZWwuXG4gICAqIEBkZWZhdWx0ICdlbmQnXG4gICAqL1xuICBsYWJlbFBsYWNlbWVudDogUHJvcFR5cGVzLm9uZU9mKFsnYm90dG9tJywgJ2VuZCcsICdzdGFydCcsICd0b3AnXSksXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBuYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiB0aGUgc3RhdGUgaXMgY2hhbmdlZC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdC5TeW50aGV0aWNFdmVudH0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqIFlvdSBjYW4gcHVsbCBvdXQgdGhlIG5ldyBjaGVja2VkIHN0YXRlIGJ5IGFjY2Vzc2luZyBgZXZlbnQudGFyZ2V0LmNoZWNrZWRgIChib29sZWFuKS5cbiAgICovXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxhYmVsIHdpbGwgaW5kaWNhdGUgdGhhdCB0aGUgYGlucHV0YCBpcyByZXF1aXJlZC5cbiAgICovXG4gIHJlcXVpcmVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBwcm9wcyB1c2VkIGZvciBlYWNoIHNsb3QgaW5zaWRlLlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgc2xvdFByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIHR5cG9ncmFwaHk6IFByb3BUeXBlcy5vYmplY3RcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIHZhbHVlOiBQcm9wVHlwZXMuYW55XG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgRm9ybUNvbnRyb2xMYWJlbDsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgY3JlYXRlU3RhY2sgfSBmcm9tICdAbXVpL3N5c3RlbSc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuY29uc3QgU3RhY2sgPSBjcmVhdGVTdGFjayh7XG4gIGNyZWF0ZVN0eWxlZENvbXBvbmVudDogc3R5bGVkKCdkaXYnLCB7XG4gICAgbmFtZTogJ011aVN0YWNrJyxcbiAgICBzbG90OiAnUm9vdCcsXG4gICAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMucm9vdFxuICB9KSxcbiAgdXNlVGhlbWVQcm9wczogaW5Qcm9wcyA9PiB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpU3RhY2snXG4gIH0pXG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFN0YWNrLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyBcdTI1MENcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDAgV2FybmluZyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MTBcbiAgLy8gXHUyNTAyIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4gXHUyNTAyXG4gIC8vIFx1MjUwMiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIFx1MjUwMlxuICAvLyBcdTI1MTRcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MThcbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIERlZmluZXMgdGhlIGBmbGV4LWRpcmVjdGlvbmAgc3R5bGUgcHJvcGVydHkuXG4gICAqIEl0IGlzIGFwcGxpZWQgZm9yIGFsbCBzY3JlZW4gc2l6ZXMuXG4gICAqIEBkZWZhdWx0ICdjb2x1bW4nXG4gICAqL1xuICBkaXJlY3Rpb246IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2NvbHVtbi1yZXZlcnNlJywgJ2NvbHVtbicsICdyb3ctcmV2ZXJzZScsICdyb3cnXSksIFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZihbJ2NvbHVtbi1yZXZlcnNlJywgJ2NvbHVtbicsICdyb3ctcmV2ZXJzZScsICdyb3cnXSkpLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBBZGQgYW4gZWxlbWVudCBiZXR3ZWVuIGVhY2ggY2hpbGQuXG4gICAqL1xuICBkaXZpZGVyOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIERlZmluZXMgdGhlIHNwYWNlIGJldHdlZW4gaW1tZWRpYXRlIGNoaWxkcmVuLlxuICAgKiBAZGVmYXVsdCAwXG4gICAqL1xuICBzcGFjaW5nOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSkpLCBQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AsIHdoaWNoIGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIENTUyBmbGV4Ym94IGBnYXBgIGlzIHVzZWQgaW5zdGVhZCBvZiBhcHBseWluZyBgbWFyZ2luYCB0byBjaGlsZHJlbi5cbiAgICpcbiAgICogV2hpbGUgQ1NTIGBnYXBgIHJlbW92ZXMgdGhlIFtrbm93biBsaW1pdGF0aW9uc10oaHR0cHM6Ly9tdWkuY29tL2pveS11aS9yZWFjdC1zdGFjay8jbGltaXRhdGlvbnMpLFxuICAgKiBpdCBpcyBub3QgZnVsbHkgc3VwcG9ydGVkIGluIHNvbWUgYnJvd3NlcnMuIFdlIHJlY29tbWVuZCBjaGVja2luZyBodHRwczovL2Nhbml1c2UuY29tLz9zZWFyY2g9ZmxleCUyMGdhcCBiZWZvcmUgdXNpbmcgdGhpcyBmbGFnLlxuICAgKlxuICAgKiBUbyBlbmFibGUgdGhpcyBmbGFnIGdsb2JhbGx5LCBmb2xsb3cgdGhlIFt0aGVtZSdzIGRlZmF1bHQgcHJvcHNdKGh0dHBzOi8vbXVpLmNvbS9tYXRlcmlhbC11aS9jdXN0b21pemF0aW9uL3RoZW1lLWNvbXBvbmVudHMvI2RlZmF1bHQtcHJvcHMpIGNvbmZpZ3VyYXRpb24uXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICB1c2VGbGV4R2FwOiBQcm9wVHlwZXMuYm9vbFxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IFN0YWNrOyIsICJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1Db250cm9sTGFiZWxVdGlsaXR5Q2xhc3NlcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpRm9ybUNvbnRyb2xMYWJlbCcsIHNsb3QpO1xufVxuY29uc3QgZm9ybUNvbnRyb2xMYWJlbENsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlGb3JtQ29udHJvbExhYmVsJywgWydyb290JywgJ2xhYmVsUGxhY2VtZW50U3RhcnQnLCAnbGFiZWxQbGFjZW1lbnRUb3AnLCAnbGFiZWxQbGFjZW1lbnRCb3R0b20nLCAnZGlzYWJsZWQnLCAnbGFiZWwnLCAnZXJyb3InLCAncmVxdWlyZWQnLCAnYXN0ZXJpc2snXSk7XG5leHBvcnQgZGVmYXVsdCBmb3JtQ29udHJvbExhYmVsQ2xhc3NlczsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwicm93XCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCB7IGdldEZvcm1Hcm91cFV0aWxpdHlDbGFzcyB9IGZyb20gJy4vZm9ybUdyb3VwQ2xhc3Nlcyc7XG5pbXBvcnQgdXNlRm9ybUNvbnRyb2wgZnJvbSAnLi4vRm9ybUNvbnRyb2wvdXNlRm9ybUNvbnRyb2wnO1xuaW1wb3J0IGZvcm1Db250cm9sU3RhdGUgZnJvbSAnLi4vRm9ybUNvbnRyb2wvZm9ybUNvbnRyb2xTdGF0ZSc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgcm93LFxuICAgIGVycm9yXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCByb3cgJiYgJ3JvdycsIGVycm9yICYmICdlcnJvciddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0Rm9ybUdyb3VwVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5jb25zdCBGb3JtR3JvdXBSb290ID0gc3R5bGVkKCdkaXYnLCB7XG4gIG5hbWU6ICdNdWlGb3JtR3JvdXAnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMucm9vdCwgb3duZXJTdGF0ZS5yb3cgJiYgc3R5bGVzLnJvd107XG4gIH1cbn0pKCh7XG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgZGlzcGxheTogJ2ZsZXgnLFxuICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgZmxleFdyYXA6ICd3cmFwJ1xufSwgb3duZXJTdGF0ZS5yb3cgJiYge1xuICBmbGV4RGlyZWN0aW9uOiAncm93J1xufSkpO1xuXG4vKipcbiAqIGBGb3JtR3JvdXBgIHdyYXBzIGNvbnRyb2xzIHN1Y2ggYXMgYENoZWNrYm94YCBhbmQgYFN3aXRjaGAuXG4gKiBJdCBwcm92aWRlcyBjb21wYWN0IHJvdyBsYXlvdXQuXG4gKiBGb3IgdGhlIGBSYWRpb2AsIHlvdSBzaG91bGQgYmUgdXNpbmcgdGhlIGBSYWRpb0dyb3VwYCBjb21wb25lbnQgaW5zdGVhZCBvZiB0aGlzIG9uZS5cbiAqL1xuY29uc3QgRm9ybUdyb3VwID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gRm9ybUdyb3VwKGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlGb3JtR3JvdXAnXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBjbGFzc05hbWUsXG4gICAgICByb3cgPSBmYWxzZVxuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBtdWlGb3JtQ29udHJvbCA9IHVzZUZvcm1Db250cm9sKCk7XG4gIGNvbnN0IGZjcyA9IGZvcm1Db250cm9sU3RhdGUoe1xuICAgIHByb3BzLFxuICAgIG11aUZvcm1Db250cm9sLFxuICAgIHN0YXRlczogWydlcnJvciddXG4gIH0pO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgcm93LFxuICAgIGVycm9yOiBmY3MuZXJyb3JcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KEZvcm1Hcm91cFJvb3QsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgcmVmOiByZWZcbiAgfSwgb3RoZXIpKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gRm9ybUdyb3VwLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyBcdTI1MENcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDAgV2FybmluZyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MTBcbiAgLy8gXHUyNTAyIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4gXHUyNTAyXG4gIC8vIFx1MjUwMiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIFx1MjUwMlxuICAvLyBcdTI1MTRcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MThcbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogRGlzcGxheSBncm91cCBvZiBlbGVtZW50cyBpbiBhIGNvbXBhY3Qgcm93LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcm93OiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IEZvcm1Hcm91cDsiLCAiaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtR3JvdXBVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUZvcm1Hcm91cCcsIHNsb3QpO1xufVxuY29uc3QgZm9ybUdyb3VwQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUZvcm1Hcm91cCcsIFsncm9vdCcsICdyb3cnLCAnZXJyb3InXSk7XG5leHBvcnQgZGVmYXVsdCBmb3JtR3JvdXBDbGFzc2VzOyIsICIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjaGVja2VkXCIsIFwiY2hlY2tlZEljb25cIiwgXCJjb2xvclwiLCBcImljb25cIiwgXCJuYW1lXCIsIFwib25DaGFuZ2VcIiwgXCJzaXplXCIsIFwiY2xhc3NOYW1lXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHJlZlR5cGUgZnJvbSAnQG11aS91dGlscy9yZWZUeXBlJztcbmltcG9ydCBjb21wb3NlQ2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCB7IGFscGhhIH0gZnJvbSAnQG11aS9zeXN0ZW0vY29sb3JNYW5pcHVsYXRvcic7XG5pbXBvcnQgU3dpdGNoQmFzZSBmcm9tICcuLi9pbnRlcm5hbC9Td2l0Y2hCYXNlJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCBSYWRpb0J1dHRvbkljb24gZnJvbSAnLi9SYWRpb0J1dHRvbkljb24nO1xuaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnLi4vdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uIGZyb20gJy4uL3V0aWxzL2NyZWF0ZUNoYWluZWRGdW5jdGlvbic7XG5pbXBvcnQgdXNlUmFkaW9Hcm91cCBmcm9tICcuLi9SYWRpb0dyb3VwL3VzZVJhZGlvR3JvdXAnO1xuaW1wb3J0IHJhZGlvQ2xhc3NlcywgeyBnZXRSYWRpb1V0aWxpdHlDbGFzcyB9IGZyb20gJy4vcmFkaW9DbGFzc2VzJztcbmltcG9ydCBzdHlsZWQsIHsgcm9vdFNob3VsZEZvcndhcmRQcm9wIH0gZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgY29sb3IsXG4gICAgc2l6ZVxuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgYGNvbG9yJHtjYXBpdGFsaXplKGNvbG9yKX1gLCBzaXplICE9PSAnbWVkaXVtJyAmJiBgc2l6ZSR7Y2FwaXRhbGl6ZShzaXplKX1gXVxuICB9O1xuICByZXR1cm4gX2V4dGVuZHMoe30sIGNsYXNzZXMsIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRSYWRpb1V0aWxpdHlDbGFzcywgY2xhc3NlcykpO1xufTtcbmNvbnN0IFJhZGlvUm9vdCA9IHN0eWxlZChTd2l0Y2hCYXNlLCB7XG4gIHNob3VsZEZvcndhcmRQcm9wOiBwcm9wID0+IHJvb3RTaG91bGRGb3J3YXJkUHJvcChwcm9wKSB8fCBwcm9wID09PSAnY2xhc3NlcycsXG4gIG5hbWU6ICdNdWlSYWRpbycsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5yb290LCBvd25lclN0YXRlLnNpemUgIT09ICdtZWRpdW0nICYmIHN0eWxlc1tgc2l6ZSR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLnNpemUpfWBdLCBzdHlsZXNbYGNvbG9yJHtjYXBpdGFsaXplKG93bmVyU3RhdGUuY29sb3IpfWBdXTtcbiAgfVxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLnRleHQuc2Vjb25kYXJ5XG59LCAhb3duZXJTdGF0ZS5kaXNhYmxlUmlwcGxlICYmIHtcbiAgJyY6aG92ZXInOiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS52YXJzID8gYHJnYmEoJHtvd25lclN0YXRlLmNvbG9yID09PSAnZGVmYXVsdCcgPyB0aGVtZS52YXJzLnBhbGV0dGUuYWN0aW9uLmFjdGl2ZUNoYW5uZWwgOiB0aGVtZS52YXJzLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0ubWFpbkNoYW5uZWx9IC8gJHt0aGVtZS52YXJzLnBhbGV0dGUuYWN0aW9uLmhvdmVyT3BhY2l0eX0pYCA6IGFscGhhKG93bmVyU3RhdGUuY29sb3IgPT09ICdkZWZhdWx0JyA/IHRoZW1lLnBhbGV0dGUuYWN0aW9uLmFjdGl2ZSA6IHRoZW1lLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0ubWFpbiwgdGhlbWUucGFsZXR0ZS5hY3Rpb24uaG92ZXJPcGFjaXR5KSxcbiAgICAvLyBSZXNldCBvbiB0b3VjaCBkZXZpY2VzLCBpdCBkb2Vzbid0IGFkZCBzcGVjaWZpY2l0eVxuICAgICdAbWVkaWEgKGhvdmVyOiBub25lKSc6IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50J1xuICAgIH1cbiAgfVxufSwgb3duZXJTdGF0ZS5jb2xvciAhPT0gJ2RlZmF1bHQnICYmIHtcbiAgW2AmLiR7cmFkaW9DbGFzc2VzLmNoZWNrZWR9YF06IHtcbiAgICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0ubWFpblxuICB9XG59LCB7XG4gIFtgJi4ke3JhZGlvQ2xhc3Nlcy5kaXNhYmxlZH1gXToge1xuICAgIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5hY3Rpb24uZGlzYWJsZWRcbiAgfVxufSkpO1xuZnVuY3Rpb24gYXJlRXF1YWxWYWx1ZXMoYSwgYikge1xuICBpZiAodHlwZW9mIGIgPT09ICdvYmplY3QnICYmIGIgIT09IG51bGwpIHtcbiAgICByZXR1cm4gYSA9PT0gYjtcbiAgfVxuXG4gIC8vIFRoZSB2YWx1ZSBjb3VsZCBiZSBhIG51bWJlciwgdGhlIERPTSB3aWxsIHN0cmluZ2lmeSBpdCBhbnl3YXkuXG4gIHJldHVybiBTdHJpbmcoYSkgPT09IFN0cmluZyhiKTtcbn1cbmNvbnN0IGRlZmF1bHRDaGVja2VkSWNvbiA9IC8qI19fUFVSRV9fKi9fanN4KFJhZGlvQnV0dG9uSWNvbiwge1xuICBjaGVja2VkOiB0cnVlXG59KTtcbmNvbnN0IGRlZmF1bHRJY29uID0gLyojX19QVVJFX18qL19qc3goUmFkaW9CdXR0b25JY29uLCB7fSk7XG5jb25zdCBSYWRpbyA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIFJhZGlvKGluUHJvcHMsIHJlZikge1xuICB2YXIgX2RlZmF1bHRJY29uJHByb3BzJGZvLCBfZGVmYXVsdENoZWNrZWRJY29uJHA7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aVJhZGlvJ1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgY2hlY2tlZDogY2hlY2tlZFByb3AsXG4gICAgICBjaGVja2VkSWNvbiA9IGRlZmF1bHRDaGVja2VkSWNvbixcbiAgICAgIGNvbG9yID0gJ3ByaW1hcnknLFxuICAgICAgaWNvbiA9IGRlZmF1bHRJY29uLFxuICAgICAgbmFtZTogbmFtZVByb3AsXG4gICAgICBvbkNoYW5nZTogb25DaGFuZ2VQcm9wLFxuICAgICAgc2l6ZSA9ICdtZWRpdW0nLFxuICAgICAgY2xhc3NOYW1lXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjb2xvcixcbiAgICBzaXplXG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIGNvbnN0IHJhZGlvR3JvdXAgPSB1c2VSYWRpb0dyb3VwKCk7XG4gIGxldCBjaGVja2VkID0gY2hlY2tlZFByb3A7XG4gIGNvbnN0IG9uQ2hhbmdlID0gY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uKG9uQ2hhbmdlUHJvcCwgcmFkaW9Hcm91cCAmJiByYWRpb0dyb3VwLm9uQ2hhbmdlKTtcbiAgbGV0IG5hbWUgPSBuYW1lUHJvcDtcbiAgaWYgKHJhZGlvR3JvdXApIHtcbiAgICBpZiAodHlwZW9mIGNoZWNrZWQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjaGVja2VkID0gYXJlRXF1YWxWYWx1ZXMocmFkaW9Hcm91cC52YWx1ZSwgcHJvcHMudmFsdWUpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG5hbWUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBuYW1lID0gcmFkaW9Hcm91cC5uYW1lO1xuICAgIH1cbiAgfVxuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goUmFkaW9Sb290LCBfZXh0ZW5kcyh7XG4gICAgdHlwZTogXCJyYWRpb1wiLFxuICAgIGljb246IC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQoaWNvbiwge1xuICAgICAgZm9udFNpemU6IChfZGVmYXVsdEljb24kcHJvcHMkZm8gPSBkZWZhdWx0SWNvbi5wcm9wcy5mb250U2l6ZSkgIT0gbnVsbCA/IF9kZWZhdWx0SWNvbiRwcm9wcyRmbyA6IHNpemVcbiAgICB9KSxcbiAgICBjaGVja2VkSWNvbjogLyojX19QVVJFX18qL1JlYWN0LmNsb25lRWxlbWVudChjaGVja2VkSWNvbiwge1xuICAgICAgZm9udFNpemU6IChfZGVmYXVsdENoZWNrZWRJY29uJHAgPSBkZWZhdWx0Q2hlY2tlZEljb24ucHJvcHMuZm9udFNpemUpICE9IG51bGwgPyBfZGVmYXVsdENoZWNrZWRJY29uJHAgOiBzaXplXG4gICAgfSksXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICBjbGFzc2VzOiBjbGFzc2VzLFxuICAgIG5hbWU6IG5hbWUsXG4gICAgY2hlY2tlZDogY2hlY2tlZCxcbiAgICBvbkNoYW5nZTogb25DaGFuZ2UsXG4gICAgcmVmOiByZWYsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKVxuICB9LCBvdGhlcikpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBSYWRpby5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gXHUyNTBDXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwIFdhcm5pbmcgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTEwXG4gIC8vIFx1MjUwMiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIFx1MjUwMlxuICAvLyBcdTI1MDIgICAgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuICAgICBcdTI1MDJcbiAgLy8gXHUyNTE0XHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTE4XG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgY2hlY2tlZC5cbiAgICovXG4gIGNoZWNrZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIGljb24gdG8gZGlzcGxheSB3aGVuIHRoZSBjb21wb25lbnQgaXMgY2hlY2tlZC5cbiAgICogQGRlZmF1bHQgPFJhZGlvQnV0dG9uSWNvbiBjaGVja2VkIC8+XG4gICAqL1xuICBjaGVja2VkSWNvbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbG9yIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEl0IHN1cHBvcnRzIGJvdGggZGVmYXVsdCBhbmQgY3VzdG9tIHRoZW1lIGNvbG9ycywgd2hpY2ggY2FuIGJlIGFkZGVkIGFzIHNob3duIGluIHRoZVxuICAgKiBbcGFsZXR0ZSBjdXN0b21pemF0aW9uIGd1aWRlXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvY3VzdG9taXphdGlvbi9wYWxldHRlLyNjdXN0b20tY29sb3JzKS5cbiAgICogQGRlZmF1bHQgJ3ByaW1hcnknXG4gICAqL1xuICBjb2xvcjogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydkZWZhdWx0JywgJ3ByaW1hcnknLCAnc2Vjb25kYXJ5JywgJ2Vycm9yJywgJ2luZm8nLCAnc3VjY2VzcycsICd3YXJuaW5nJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgZGlzYWJsZWQuXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSByaXBwbGUgZWZmZWN0IGlzIGRpc2FibGVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZVJpcHBsZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgaWNvbiB0byBkaXNwbGF5IHdoZW4gdGhlIGNvbXBvbmVudCBpcyB1bmNoZWNrZWQuXG4gICAqIEBkZWZhdWx0IDxSYWRpb0J1dHRvbkljb24gLz5cbiAgICovXG4gIGljb246IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFtBdHRyaWJ1dGVzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQjQXR0cmlidXRlcykgYXBwbGllZCB0byB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgaW5wdXRQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIFBhc3MgYSByZWYgdG8gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIGlucHV0UmVmOiByZWZUeXBlLFxuICAvKipcbiAgICogTmFtZSBhdHRyaWJ1dGUgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIG5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSBzdGF0ZSBpcyBjaGFuZ2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0LkNoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+fSBldmVudCBUaGUgZXZlbnQgc291cmNlIG9mIHRoZSBjYWxsYmFjay5cbiAgICogWW91IGNhbiBwdWxsIG91dCB0aGUgbmV3IHZhbHVlIGJ5IGFjY2Vzc2luZyBgZXZlbnQudGFyZ2V0LnZhbHVlYCAoc3RyaW5nKS5cbiAgICogWW91IGNhbiBwdWxsIG91dCB0aGUgbmV3IGNoZWNrZWQgc3RhdGUgYnkgYWNjZXNzaW5nIGBldmVudC50YXJnZXQuY2hlY2tlZGAgKGJvb2xlYW4pLlxuICAgKi9cbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCBlbGVtZW50IGlzIHJlcXVpcmVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVxdWlyZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIHNpemUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICogYHNtYWxsYCBpcyBlcXVpdmFsZW50IHRvIHRoZSBkZW5zZSByYWRpbyBzdHlsaW5nLlxuICAgKiBAZGVmYXVsdCAnbWVkaXVtJ1xuICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydtZWRpdW0nLCAnc21hbGwnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBvZiB0aGUgY29tcG9uZW50LiBUaGUgRE9NIEFQSSBjYXN0cyB0aGlzIHRvIGEgc3RyaW5nLlxuICAgKi9cbiAgdmFsdWU6IFByb3BUeXBlcy5hbnlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBSYWRpbzsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmFkaW9CdXR0b25VbmNoZWNrZWRJY29uIGZyb20gJy4uL2ludGVybmFsL3N2Zy1pY29ucy9SYWRpb0J1dHRvblVuY2hlY2tlZCc7XG5pbXBvcnQgUmFkaW9CdXR0b25DaGVja2VkSWNvbiBmcm9tICcuLi9pbnRlcm5hbC9zdmctaWNvbnMvUmFkaW9CdXR0b25DaGVja2VkJztcbmltcG9ydCBzdHlsZWQsIHsgcm9vdFNob3VsZEZvcndhcmRQcm9wIH0gZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgUmFkaW9CdXR0b25JY29uUm9vdCA9IHN0eWxlZCgnc3BhbicsIHtcbiAgc2hvdWxkRm9yd2FyZFByb3A6IHJvb3RTaG91bGRGb3J3YXJkUHJvcFxufSkoe1xuICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgZGlzcGxheTogJ2ZsZXgnXG59KTtcbmNvbnN0IFJhZGlvQnV0dG9uSWNvbkJhY2tncm91bmQgPSBzdHlsZWQoUmFkaW9CdXR0b25VbmNoZWNrZWRJY29uKSh7XG4gIC8vIFNjYWxlIGFwcGxpZWQgdG8gcHJldmVudCBkb3QgbWlzYWxpZ25tZW50IGluIFNhZmFyaVxuICB0cmFuc2Zvcm06ICdzY2FsZSgxKSdcbn0pO1xuY29uc3QgUmFkaW9CdXR0b25JY29uRG90ID0gc3R5bGVkKFJhZGlvQnV0dG9uQ2hlY2tlZEljb24pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGxlZnQ6IDAsXG4gIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICB0cmFuc2Zvcm06ICdzY2FsZSgwKScsXG4gIHRyYW5zaXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgndHJhbnNmb3JtJywge1xuICAgIGVhc2luZzogdGhlbWUudHJhbnNpdGlvbnMuZWFzaW5nLmVhc2VJbixcbiAgICBkdXJhdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24uc2hvcnRlc3RcbiAgfSlcbn0sIG93bmVyU3RhdGUuY2hlY2tlZCAmJiB7XG4gIHRyYW5zZm9ybTogJ3NjYWxlKDEpJyxcbiAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCd0cmFuc2Zvcm0nLCB7XG4gICAgZWFzaW5nOiB0aGVtZS50cmFuc2l0aW9ucy5lYXNpbmcuZWFzZU91dCxcbiAgICBkdXJhdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24uc2hvcnRlc3RcbiAgfSlcbn0pKTtcblxuLyoqXG4gKiBAaWdub3JlIC0gaW50ZXJuYWwgY29tcG9uZW50LlxuICovXG5mdW5jdGlvbiBSYWRpb0J1dHRvbkljb24ocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGNoZWNrZWQgPSBmYWxzZSxcbiAgICBjbGFzc2VzID0ge30sXG4gICAgZm9udFNpemVcbiAgfSA9IHByb3BzO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY2hlY2tlZFxuICB9KTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4cyhSYWRpb0J1dHRvbkljb25Sb290LCB7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLnJvb3QsXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICBjaGlsZHJlbjogWy8qI19fUFVSRV9fKi9fanN4KFJhZGlvQnV0dG9uSWNvbkJhY2tncm91bmQsIHtcbiAgICAgIGZvbnRTaXplOiBmb250U2l6ZSxcbiAgICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5iYWNrZ3JvdW5kLFxuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZVxuICAgIH0pLCAvKiNfX1BVUkVfXyovX2pzeChSYWRpb0J1dHRvbkljb25Eb3QsIHtcbiAgICAgIGZvbnRTaXplOiBmb250U2l6ZSxcbiAgICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5kb3QsXG4gICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlXG4gICAgfSldXG4gIH0pO1xufVxucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gUmFkaW9CdXR0b25JY29uLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBjaGVja2VkLlxuICAgKi9cbiAgY2hlY2tlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogVGhlIHNpemUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICogYHNtYWxsYCBpcyBlcXVpdmFsZW50IHRvIHRoZSBkZW5zZSByYWRpbyBzdHlsaW5nLlxuICAgKi9cbiAgZm9udFNpemU6IFByb3BUeXBlcy5vbmVPZihbJ3NtYWxsJywgJ21lZGl1bSddKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IFJhZGlvQnV0dG9uSWNvbjsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY3JlYXRlU3ZnSWNvbiBmcm9tICcuLi8uLi91dGlscy9jcmVhdGVTdmdJY29uJztcblxuLyoqXG4gKiBAaWdub3JlIC0gaW50ZXJuYWwgY29tcG9uZW50LlxuICovXG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZXhwb3J0IGRlZmF1bHQgY3JlYXRlU3ZnSWNvbiggLyojX19QVVJFX18qL19qc3goXCJwYXRoXCIsIHtcbiAgZDogXCJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MiAwLTgtMy41OC04LThzMy41OC04IDgtOCA4IDMuNTggOCA4LTMuNTggOC04IDh6XCJcbn0pLCAnUmFkaW9CdXR0b25VbmNoZWNrZWQnKTsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY3JlYXRlU3ZnSWNvbiBmcm9tICcuLi8uLi91dGlscy9jcmVhdGVTdmdJY29uJztcblxuLyoqXG4gKiBAaWdub3JlIC0gaW50ZXJuYWwgY29tcG9uZW50LlxuICovXG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZXhwb3J0IGRlZmF1bHQgY3JlYXRlU3ZnSWNvbiggLyojX19QVVJFX18qL19qc3goXCJwYXRoXCIsIHtcbiAgZDogXCJNOC40NjUgOC40NjVDOS4zNyA3LjU2IDEwLjYyIDcgMTIgN0MxNC43NiA3IDE3IDkuMjQgMTcgMTJDMTcgMTMuMzggMTYuNDQgMTQuNjMgMTUuNTM1IDE1LjUzNUMxNC42MyAxNi40NCAxMy4zOCAxNyAxMiAxN0M5LjI0IDE3IDcgMTQuNzYgNyAxMkM3IDEwLjYyIDcuNTYgOS4zNyA4LjQ2NSA4LjQ2NVpcIlxufSksICdSYWRpb0J1dHRvbkNoZWNrZWQnKTsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUmFkaW9Hcm91cENvbnRleHQgZnJvbSAnLi9SYWRpb0dyb3VwQ29udGV4dCc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VSYWRpb0dyb3VwKCkge1xuICByZXR1cm4gUmVhY3QudXNlQ29udGV4dChSYWRpb0dyb3VwQ29udGV4dCk7XG59IiwgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0Jztcbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqL1xuY29uc3QgUmFkaW9Hcm91cENvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dCh1bmRlZmluZWQpO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgUmFkaW9Hcm91cENvbnRleHQuZGlzcGxheU5hbWUgPSAnUmFkaW9Hcm91cENvbnRleHQnO1xufVxuZXhwb3J0IGRlZmF1bHQgUmFkaW9Hcm91cENvbnRleHQ7IiwgImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0UmFkaW9VdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aVJhZGlvJywgc2xvdCk7XG59XG5jb25zdCByYWRpb0NsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlSYWRpbycsIFsncm9vdCcsICdjaGVja2VkJywgJ2Rpc2FibGVkJywgJ2NvbG9yUHJpbWFyeScsICdjb2xvclNlY29uZGFyeScsICdzaXplU21hbGwnXSk7XG5leHBvcnQgZGVmYXVsdCByYWRpb0NsYXNzZXM7IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImFjdGlvbnNcIiwgXCJjaGlsZHJlblwiLCBcImRlZmF1bHRWYWx1ZVwiLCBcIm5hbWVcIiwgXCJvbkNoYW5nZVwiLCBcInZhbHVlXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBGb3JtR3JvdXAgZnJvbSAnLi4vRm9ybUdyb3VwJztcbmltcG9ydCB1c2VGb3JrUmVmIGZyb20gJy4uL3V0aWxzL3VzZUZvcmtSZWYnO1xuaW1wb3J0IHVzZUNvbnRyb2xsZWQgZnJvbSAnLi4vdXRpbHMvdXNlQ29udHJvbGxlZCc7XG5pbXBvcnQgUmFkaW9Hcm91cENvbnRleHQgZnJvbSAnLi9SYWRpb0dyb3VwQ29udGV4dCc7XG5pbXBvcnQgdXNlSWQgZnJvbSAnLi4vdXRpbHMvdXNlSWQnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IFJhZGlvR3JvdXAgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBSYWRpb0dyb3VwKHByb3BzLCByZWYpIHtcbiAgY29uc3Qge1xuICAgICAgLy8gcHJpdmF0ZVxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L3Byb3AtdHlwZXNcbiAgICAgIGFjdGlvbnMsXG4gICAgICBjaGlsZHJlbixcbiAgICAgIGRlZmF1bHRWYWx1ZSxcbiAgICAgIG5hbWU6IG5hbWVQcm9wLFxuICAgICAgb25DaGFuZ2UsXG4gICAgICB2YWx1ZTogdmFsdWVQcm9wXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IHJvb3RSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IFt2YWx1ZSwgc2V0VmFsdWVTdGF0ZV0gPSB1c2VDb250cm9sbGVkKHtcbiAgICBjb250cm9sbGVkOiB2YWx1ZVByb3AsXG4gICAgZGVmYXVsdDogZGVmYXVsdFZhbHVlLFxuICAgIG5hbWU6ICdSYWRpb0dyb3VwJ1xuICB9KTtcbiAgUmVhY3QudXNlSW1wZXJhdGl2ZUhhbmRsZShhY3Rpb25zLCAoKSA9PiAoe1xuICAgIGZvY3VzOiAoKSA9PiB7XG4gICAgICBsZXQgaW5wdXQgPSByb290UmVmLmN1cnJlbnQucXVlcnlTZWxlY3RvcignaW5wdXQ6bm90KDpkaXNhYmxlZCk6Y2hlY2tlZCcpO1xuICAgICAgaWYgKCFpbnB1dCkge1xuICAgICAgICBpbnB1dCA9IHJvb3RSZWYuY3VycmVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dDpub3QoOmRpc2FibGVkKScpO1xuICAgICAgfVxuICAgICAgaWYgKGlucHV0KSB7XG4gICAgICAgIGlucHV0LmZvY3VzKCk7XG4gICAgICB9XG4gICAgfVxuICB9KSwgW10pO1xuICBjb25zdCBoYW5kbGVSZWYgPSB1c2VGb3JrUmVmKHJlZiwgcm9vdFJlZik7XG4gIGNvbnN0IG5hbWUgPSB1c2VJZChuYW1lUHJvcCk7XG4gIGNvbnN0IGNvbnRleHRWYWx1ZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcbiAgICBuYW1lLFxuICAgIG9uQ2hhbmdlKGV2ZW50KSB7XG4gICAgICBzZXRWYWx1ZVN0YXRlKGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgICBpZiAob25DaGFuZ2UpIHtcbiAgICAgICAgb25DaGFuZ2UoZXZlbnQsIGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICB2YWx1ZVxuICB9KSwgW25hbWUsIG9uQ2hhbmdlLCBzZXRWYWx1ZVN0YXRlLCB2YWx1ZV0pO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goUmFkaW9Hcm91cENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogY29udGV4dFZhbHVlLFxuICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeChGb3JtR3JvdXAsIF9leHRlbmRzKHtcbiAgICAgIHJvbGU6IFwicmFkaW9ncm91cFwiLFxuICAgICAgcmVmOiBoYW5kbGVSZWZcbiAgICB9LCBvdGhlciwge1xuICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgfSkpXG4gIH0pO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBSYWRpb0dyb3VwLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyBcdTI1MENcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDAgV2FybmluZyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MTBcbiAgLy8gXHUyNTAyIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4gXHUyNTAyXG4gIC8vIFx1MjUwMiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIFx1MjUwMlxuICAvLyBcdTI1MTRcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MThcbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCB2YWx1ZS4gVXNlIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBub3QgY29udHJvbGxlZC5cbiAgICovXG4gIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAqIFRoZSBuYW1lIHVzZWQgdG8gcmVmZXJlbmNlIHRoZSB2YWx1ZSBvZiB0aGUgY29udHJvbC5cbiAgICogSWYgeW91IGRvbid0IHByb3ZpZGUgdGhpcyBwcm9wLCBpdCBmYWxscyBiYWNrIHRvIGEgcmFuZG9tbHkgZ2VuZXJhdGVkIG5hbWUuXG4gICAqL1xuICBuYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiBhIHJhZGlvIGJ1dHRvbiBpcyBzZWxlY3RlZC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdC5DaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50Pn0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSBUaGUgdmFsdWUgb2YgdGhlIHNlbGVjdGVkIHJhZGlvIGJ1dHRvbi5cbiAgICogWW91IGNhbiBwdWxsIG91dCB0aGUgbmV3IHZhbHVlIGJ5IGFjY2Vzc2luZyBgZXZlbnQudGFyZ2V0LnZhbHVlYCAoc3RyaW5nKS5cbiAgICovXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIFZhbHVlIG9mIHRoZSBzZWxlY3RlZCByYWRpbyBidXR0b24uIFRoZSBET00gQVBJIGNhc3RzIHRoaXMgdG8gYSBzdHJpbmcuXG4gICAqL1xuICB2YWx1ZTogUHJvcFR5cGVzLmFueVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IFJhZGlvR3JvdXA7IiwgImltcG9ydCB7IGNyZWF0ZVRoZW1lIH0gZnJvbSBcIkBtdWkvbWF0ZXJpYWxcIjtcblxuZXhwb3J0IGNvbnN0IHRoZW1lID0gY3JlYXRlVGhlbWUoe1xuICBwYWxldHRlOiB7XG4gICAgcHJpbWFyeToge1xuICAgICAgbWFpbjogXCIjMDA4MjdjXCIsXG4gICAgfSxcbiAgfSxcbn0pO1xuIiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE5vZGUoe1xuICBleHBhbmRhYmxlLFxuICBleHBhbmRlZCxcbiAgaGlnaGxpZ2h0LFxuICBpc0xhc3QsXG4gIGNoaWxkcmVuLFxuICBvbkNsaWNrLFxufToge1xuICBleHBhbmRhYmxlOiBib29sZWFuO1xuICBleHBhbmRlZDogYm9vbGVhbjtcbiAgaGlnaGxpZ2h0OiBib29sZWFuO1xuICBpc0xhc3Q6IGJvb2xlYW47XG4gIGNoaWxkcmVuOiBhbnk7XG4gIG9uQ2xpY2s6ICgpID0+IHZvaWQ7XG59KSB7XG4gIGNvbnN0IGNsYXNzZXM6IHN0cmluZ1tdID0gW1wianN0cmVlLW5vZGVcIl07XG5cbiAgaWYgKGV4cGFuZGVkKSB7XG4gICAgY2xhc3Nlcy5wdXNoKFwianN0cmVlLW9wZW5cIik7XG4gIH0gZWxzZSB7XG4gICAgY2xhc3Nlcy5wdXNoKFwianN0cmVlLWNsb3NlZFwiKTtcbiAgfVxuXG4gIGlmICghZXhwYW5kYWJsZSkge1xuICAgIGNsYXNzZXMucHVzaChcImpzdHJlZS1sZWFmXCIpO1xuICB9XG5cbiAgaWYgKGlzTGFzdCkge1xuICAgIGNsYXNzZXMucHVzaChcImpzdHJlZS1sYXN0XCIpO1xuICB9XG5cbiAgaWYgKGhpZ2hsaWdodCkge1xuICAgIGNoaWxkcmVuID0gPHNwYW4gY2xhc3NOYW1lPVwianN0cmVlLWNsaWNrZWRcIj57Y2hpbGRyZW59PC9zcGFuPjtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGxpIHJvbGU9XCJ0cmVlaXRlbVwiIGNsYXNzTmFtZT17Y2xhc3Nlcy5qb2luKFwiIFwiKX0+XG4gICAgICA8aVxuICAgICAgICBjbGFzc05hbWU9XCJqc3RyZWUtaWNvbiBqc3RyZWUtb2NsXCJcbiAgICAgICAgcm9sZT1cInByZXNlbnRhdGlvblwiXG4gICAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgICAvPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvbGk+XG4gICk7XG59XG4iLCAiZXhwb3J0IHZhciBTdWJzY3JpYmFibGUgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBTdWJzY3JpYmFibGUoKSB7XG4gICAgdGhpcy5saXN0ZW5lcnMgPSBbXTtcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBTdWJzY3JpYmFibGUucHJvdG90eXBlO1xuXG4gIF9wcm90by5zdWJzY3JpYmUgPSBmdW5jdGlvbiBzdWJzY3JpYmUobGlzdGVuZXIpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdmFyIGNhbGxiYWNrID0gbGlzdGVuZXIgfHwgZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9O1xuXG4gICAgdGhpcy5saXN0ZW5lcnMucHVzaChjYWxsYmFjayk7XG4gICAgdGhpcy5vblN1YnNjcmliZSgpO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5saXN0ZW5lcnMgPSBfdGhpcy5saXN0ZW5lcnMuZmlsdGVyKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHJldHVybiB4ICE9PSBjYWxsYmFjaztcbiAgICAgIH0pO1xuXG4gICAgICBfdGhpcy5vblVuc3Vic2NyaWJlKCk7XG4gICAgfTtcbiAgfTtcblxuICBfcHJvdG8uaGFzTGlzdGVuZXJzID0gZnVuY3Rpb24gaGFzTGlzdGVuZXJzKCkge1xuICAgIHJldHVybiB0aGlzLmxpc3RlbmVycy5sZW5ndGggPiAwO1xuICB9O1xuXG4gIF9wcm90by5vblN1YnNjcmliZSA9IGZ1bmN0aW9uIG9uU3Vic2NyaWJlKCkgey8vIERvIG5vdGhpbmdcbiAgfTtcblxuICBfcHJvdG8ub25VbnN1YnNjcmliZSA9IGZ1bmN0aW9uIG9uVW5zdWJzY3JpYmUoKSB7Ly8gRG8gbm90aGluZ1xuICB9O1xuXG4gIHJldHVybiBTdWJzY3JpYmFibGU7XG59KCk7IiwgImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuLy8gVFlQRVNcbi8vIFVUSUxTXG5leHBvcnQgdmFyIGlzU2VydmVyID0gdHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCc7XG5leHBvcnQgZnVuY3Rpb24gbm9vcCgpIHtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBmdW5jdGlvbmFsVXBkYXRlKHVwZGF0ZXIsIGlucHV0KSB7XG4gIHJldHVybiB0eXBlb2YgdXBkYXRlciA9PT0gJ2Z1bmN0aW9uJyA/IHVwZGF0ZXIoaW5wdXQpIDogdXBkYXRlcjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkVGltZW91dCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiB2YWx1ZSA+PSAwICYmIHZhbHVlICE9PSBJbmZpbml0eTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVRdWVyeUtleUFycmF5KHZhbHVlKSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBkaWZmZXJlbmNlKGFycmF5MSwgYXJyYXkyKSB7XG4gIHJldHVybiBhcnJheTEuZmlsdGVyKGZ1bmN0aW9uICh4KSB7XG4gICAgcmV0dXJuIGFycmF5Mi5pbmRleE9mKHgpID09PSAtMTtcbiAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZUF0KGFycmF5LCBpbmRleCwgdmFsdWUpIHtcbiAgdmFyIGNvcHkgPSBhcnJheS5zbGljZSgwKTtcbiAgY29weVtpbmRleF0gPSB2YWx1ZTtcbiAgcmV0dXJuIGNvcHk7XG59XG5leHBvcnQgZnVuY3Rpb24gdGltZVVudGlsU3RhbGUodXBkYXRlZEF0LCBzdGFsZVRpbWUpIHtcbiAgcmV0dXJuIE1hdGgubWF4KHVwZGF0ZWRBdCArIChzdGFsZVRpbWUgfHwgMCkgLSBEYXRlLm5vdygpLCAwKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVF1ZXJ5QXJncyhhcmcxLCBhcmcyLCBhcmczKSB7XG4gIGlmICghaXNRdWVyeUtleShhcmcxKSkge1xuICAgIHJldHVybiBhcmcxO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBhcmcyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIF9leHRlbmRzKHt9LCBhcmczLCB7XG4gICAgICBxdWVyeUtleTogYXJnMSxcbiAgICAgIHF1ZXJ5Rm46IGFyZzJcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgYXJnMiwge1xuICAgIHF1ZXJ5S2V5OiBhcmcxXG4gIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTXV0YXRpb25BcmdzKGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgaWYgKGlzUXVlcnlLZXkoYXJnMSkpIHtcbiAgICBpZiAodHlwZW9mIGFyZzIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgYXJnMywge1xuICAgICAgICBtdXRhdGlvbktleTogYXJnMSxcbiAgICAgICAgbXV0YXRpb25GbjogYXJnMlxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIF9leHRlbmRzKHt9LCBhcmcyLCB7XG4gICAgICBtdXRhdGlvbktleTogYXJnMVxuICAgIH0pO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBhcmcxID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIF9leHRlbmRzKHt9LCBhcmcyLCB7XG4gICAgICBtdXRhdGlvbkZuOiBhcmcxXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gX2V4dGVuZHMoe30sIGFyZzEpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRmlsdGVyQXJncyhhcmcxLCBhcmcyLCBhcmczKSB7XG4gIHJldHVybiBpc1F1ZXJ5S2V5KGFyZzEpID8gW19leHRlbmRzKHt9LCBhcmcyLCB7XG4gICAgcXVlcnlLZXk6IGFyZzFcbiAgfSksIGFyZzNdIDogW2FyZzEgfHwge30sIGFyZzJdO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTXV0YXRpb25GaWx0ZXJBcmdzKGFyZzEsIGFyZzIpIHtcbiAgcmV0dXJuIGlzUXVlcnlLZXkoYXJnMSkgPyBfZXh0ZW5kcyh7fSwgYXJnMiwge1xuICAgIG11dGF0aW9uS2V5OiBhcmcxXG4gIH0pIDogYXJnMTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBtYXBRdWVyeVN0YXR1c0ZpbHRlcihhY3RpdmUsIGluYWN0aXZlKSB7XG4gIGlmIChhY3RpdmUgPT09IHRydWUgJiYgaW5hY3RpdmUgPT09IHRydWUgfHwgYWN0aXZlID09IG51bGwgJiYgaW5hY3RpdmUgPT0gbnVsbCkge1xuICAgIHJldHVybiAnYWxsJztcbiAgfSBlbHNlIGlmIChhY3RpdmUgPT09IGZhbHNlICYmIGluYWN0aXZlID09PSBmYWxzZSkge1xuICAgIHJldHVybiAnbm9uZSc7XG4gIH0gZWxzZSB7XG4gICAgLy8gQXQgdGhpcyBwb2ludCwgYWN0aXZlfGluYWN0aXZlIGNhbiBvbmx5IGJlIHRydWV8ZmFsc2Ugb3IgZmFsc2V8dHJ1ZVxuICAgIC8vIHNvLCB3aGVuIG9ubHkgb25lIHZhbHVlIGlzIHByb3ZpZGVkLCB0aGUgbWlzc2luZyBvbmUgaGFzIHRvIGJlIHRoZSBuZWdhdGVkIHZhbHVlXG4gICAgdmFyIGlzQWN0aXZlID0gYWN0aXZlICE9IG51bGwgPyBhY3RpdmUgOiAhaW5hY3RpdmU7XG4gICAgcmV0dXJuIGlzQWN0aXZlID8gJ2FjdGl2ZScgOiAnaW5hY3RpdmUnO1xuICB9XG59XG5leHBvcnQgZnVuY3Rpb24gbWF0Y2hRdWVyeShmaWx0ZXJzLCBxdWVyeSkge1xuICB2YXIgYWN0aXZlID0gZmlsdGVycy5hY3RpdmUsXG4gICAgICBleGFjdCA9IGZpbHRlcnMuZXhhY3QsXG4gICAgICBmZXRjaGluZyA9IGZpbHRlcnMuZmV0Y2hpbmcsXG4gICAgICBpbmFjdGl2ZSA9IGZpbHRlcnMuaW5hY3RpdmUsXG4gICAgICBwcmVkaWNhdGUgPSBmaWx0ZXJzLnByZWRpY2F0ZSxcbiAgICAgIHF1ZXJ5S2V5ID0gZmlsdGVycy5xdWVyeUtleSxcbiAgICAgIHN0YWxlID0gZmlsdGVycy5zdGFsZTtcblxuICBpZiAoaXNRdWVyeUtleShxdWVyeUtleSkpIHtcbiAgICBpZiAoZXhhY3QpIHtcbiAgICAgIGlmIChxdWVyeS5xdWVyeUhhc2ggIT09IGhhc2hRdWVyeUtleUJ5T3B0aW9ucyhxdWVyeUtleSwgcXVlcnkub3B0aW9ucykpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIXBhcnRpYWxNYXRjaEtleShxdWVyeS5xdWVyeUtleSwgcXVlcnlLZXkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgdmFyIHF1ZXJ5U3RhdHVzRmlsdGVyID0gbWFwUXVlcnlTdGF0dXNGaWx0ZXIoYWN0aXZlLCBpbmFjdGl2ZSk7XG5cbiAgaWYgKHF1ZXJ5U3RhdHVzRmlsdGVyID09PSAnbm9uZScpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gZWxzZSBpZiAocXVlcnlTdGF0dXNGaWx0ZXIgIT09ICdhbGwnKSB7XG4gICAgdmFyIGlzQWN0aXZlID0gcXVlcnkuaXNBY3RpdmUoKTtcblxuICAgIGlmIChxdWVyeVN0YXR1c0ZpbHRlciA9PT0gJ2FjdGl2ZScgJiYgIWlzQWN0aXZlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHF1ZXJ5U3RhdHVzRmlsdGVyID09PSAnaW5hY3RpdmUnICYmIGlzQWN0aXZlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiBzdGFsZSA9PT0gJ2Jvb2xlYW4nICYmIHF1ZXJ5LmlzU3RhbGUoKSAhPT0gc3RhbGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAodHlwZW9mIGZldGNoaW5nID09PSAnYm9vbGVhbicgJiYgcXVlcnkuaXNGZXRjaGluZygpICE9PSBmZXRjaGluZykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChwcmVkaWNhdGUgJiYgIXByZWRpY2F0ZShxdWVyeSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBtYXRjaE11dGF0aW9uKGZpbHRlcnMsIG11dGF0aW9uKSB7XG4gIHZhciBleGFjdCA9IGZpbHRlcnMuZXhhY3QsXG4gICAgICBmZXRjaGluZyA9IGZpbHRlcnMuZmV0Y2hpbmcsXG4gICAgICBwcmVkaWNhdGUgPSBmaWx0ZXJzLnByZWRpY2F0ZSxcbiAgICAgIG11dGF0aW9uS2V5ID0gZmlsdGVycy5tdXRhdGlvbktleTtcblxuICBpZiAoaXNRdWVyeUtleShtdXRhdGlvbktleSkpIHtcbiAgICBpZiAoIW11dGF0aW9uLm9wdGlvbnMubXV0YXRpb25LZXkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoZXhhY3QpIHtcbiAgICAgIGlmIChoYXNoUXVlcnlLZXkobXV0YXRpb24ub3B0aW9ucy5tdXRhdGlvbktleSkgIT09IGhhc2hRdWVyeUtleShtdXRhdGlvbktleSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIXBhcnRpYWxNYXRjaEtleShtdXRhdGlvbi5vcHRpb25zLm11dGF0aW9uS2V5LCBtdXRhdGlvbktleSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIGZldGNoaW5nID09PSAnYm9vbGVhbicgJiYgbXV0YXRpb24uc3RhdGUuc3RhdHVzID09PSAnbG9hZGluZycgIT09IGZldGNoaW5nKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHByZWRpY2F0ZSAmJiAhcHJlZGljYXRlKG11dGF0aW9uKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGhhc2hRdWVyeUtleUJ5T3B0aW9ucyhxdWVyeUtleSwgb3B0aW9ucykge1xuICB2YXIgaGFzaEZuID0gKG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMucXVlcnlLZXlIYXNoRm4pIHx8IGhhc2hRdWVyeUtleTtcbiAgcmV0dXJuIGhhc2hGbihxdWVyeUtleSk7XG59XG4vKipcbiAqIERlZmF1bHQgcXVlcnkga2V5cyBoYXNoIGZ1bmN0aW9uLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNoUXVlcnlLZXkocXVlcnlLZXkpIHtcbiAgdmFyIGFzQXJyYXkgPSBlbnN1cmVRdWVyeUtleUFycmF5KHF1ZXJ5S2V5KTtcbiAgcmV0dXJuIHN0YWJsZVZhbHVlSGFzaChhc0FycmF5KTtcbn1cbi8qKlxuICogSGFzaGVzIHRoZSB2YWx1ZSBpbnRvIGEgc3RhYmxlIGhhc2guXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YWJsZVZhbHVlSGFzaCh2YWx1ZSkge1xuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUsIGZ1bmN0aW9uIChfLCB2YWwpIHtcbiAgICByZXR1cm4gaXNQbGFpbk9iamVjdCh2YWwpID8gT2JqZWN0LmtleXModmFsKS5zb3J0KCkucmVkdWNlKGZ1bmN0aW9uIChyZXN1bHQsIGtleSkge1xuICAgICAgcmVzdWx0W2tleV0gPSB2YWxba2V5XTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSwge30pIDogdmFsO1xuICB9KTtcbn1cbi8qKlxuICogQ2hlY2tzIGlmIGtleSBgYmAgcGFydGlhbGx5IG1hdGNoZXMgd2l0aCBrZXkgYGFgLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJ0aWFsTWF0Y2hLZXkoYSwgYikge1xuICByZXR1cm4gcGFydGlhbERlZXBFcXVhbChlbnN1cmVRdWVyeUtleUFycmF5KGEpLCBlbnN1cmVRdWVyeUtleUFycmF5KGIpKTtcbn1cbi8qKlxuICogQ2hlY2tzIGlmIGBiYCBwYXJ0aWFsbHkgbWF0Y2hlcyB3aXRoIGBhYC5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcGFydGlhbERlZXBFcXVhbChhLCBiKSB7XG4gIGlmIChhID09PSBiKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAodHlwZW9mIGEgIT09IHR5cGVvZiBiKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKGEgJiYgYiAmJiB0eXBlb2YgYSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIGIgPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuICFPYmplY3Qua2V5cyhiKS5zb21lKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHJldHVybiAhcGFydGlhbERlZXBFcXVhbChhW2tleV0sIGJba2V5XSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBgYWAgaWYgYGJgIGlzIGRlZXBseSBlcXVhbC5cbiAqIElmIG5vdCwgaXQgd2lsbCByZXBsYWNlIGFueSBkZWVwbHkgZXF1YWwgY2hpbGRyZW4gb2YgYGJgIHdpdGggdGhvc2Ugb2YgYGFgLlxuICogVGhpcyBjYW4gYmUgdXNlZCBmb3Igc3RydWN0dXJhbCBzaGFyaW5nIGJldHdlZW4gSlNPTiB2YWx1ZXMgZm9yIGV4YW1wbGUuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VFcXVhbERlZXAoYSwgYikge1xuICBpZiAoYSA9PT0gYikge1xuICAgIHJldHVybiBhO1xuICB9XG5cbiAgdmFyIGFycmF5ID0gQXJyYXkuaXNBcnJheShhKSAmJiBBcnJheS5pc0FycmF5KGIpO1xuXG4gIGlmIChhcnJheSB8fCBpc1BsYWluT2JqZWN0KGEpICYmIGlzUGxhaW5PYmplY3QoYikpIHtcbiAgICB2YXIgYVNpemUgPSBhcnJheSA/IGEubGVuZ3RoIDogT2JqZWN0LmtleXMoYSkubGVuZ3RoO1xuICAgIHZhciBiSXRlbXMgPSBhcnJheSA/IGIgOiBPYmplY3Qua2V5cyhiKTtcbiAgICB2YXIgYlNpemUgPSBiSXRlbXMubGVuZ3RoO1xuICAgIHZhciBjb3B5ID0gYXJyYXkgPyBbXSA6IHt9O1xuICAgIHZhciBlcXVhbEl0ZW1zID0gMDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYlNpemU7IGkrKykge1xuICAgICAgdmFyIGtleSA9IGFycmF5ID8gaSA6IGJJdGVtc1tpXTtcbiAgICAgIGNvcHlba2V5XSA9IHJlcGxhY2VFcXVhbERlZXAoYVtrZXldLCBiW2tleV0pO1xuXG4gICAgICBpZiAoY29weVtrZXldID09PSBhW2tleV0pIHtcbiAgICAgICAgZXF1YWxJdGVtcysrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBhU2l6ZSA9PT0gYlNpemUgJiYgZXF1YWxJdGVtcyA9PT0gYVNpemUgPyBhIDogY29weTtcbiAgfVxuXG4gIHJldHVybiBiO1xufVxuLyoqXG4gKiBTaGFsbG93IGNvbXBhcmUgb2JqZWN0cy4gT25seSB3b3JrcyB3aXRoIG9iamVjdHMgdGhhdCBhbHdheXMgaGF2ZSB0aGUgc2FtZSBwcm9wZXJ0aWVzLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzaGFsbG93RXF1YWxPYmplY3RzKGEsIGIpIHtcbiAgaWYgKGEgJiYgIWIgfHwgYiAmJiAhYSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZvciAodmFyIGtleSBpbiBhKSB7XG4gICAgaWYgKGFba2V5XSAhPT0gYltrZXldKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59IC8vIENvcGllZCBmcm9tOiBodHRwczovL2dpdGh1Yi5jb20vam9uc2NobGlua2VydC9pcy1wbGFpbi1vYmplY3RcblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGxhaW5PYmplY3Qobykge1xuICBpZiAoIWhhc09iamVjdFByb3RvdHlwZShvKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSAvLyBJZiBoYXMgbW9kaWZpZWQgY29uc3RydWN0b3JcblxuXG4gIHZhciBjdG9yID0gby5jb25zdHJ1Y3RvcjtcblxuICBpZiAodHlwZW9mIGN0b3IgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gLy8gSWYgaGFzIG1vZGlmaWVkIHByb3RvdHlwZVxuXG5cbiAgdmFyIHByb3QgPSBjdG9yLnByb3RvdHlwZTtcblxuICBpZiAoIWhhc09iamVjdFByb3RvdHlwZShwcm90KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSAvLyBJZiBjb25zdHJ1Y3RvciBkb2VzIG5vdCBoYXZlIGFuIE9iamVjdC1zcGVjaWZpYyBtZXRob2RcblxuXG4gIGlmICghcHJvdC5oYXNPd25Qcm9wZXJ0eSgnaXNQcm90b3R5cGVPZicpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IC8vIE1vc3QgbGlrZWx5IGEgcGxhaW4gT2JqZWN0XG5cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaGFzT2JqZWN0UHJvdG90eXBlKG8pIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKSA9PT0gJ1tvYmplY3QgT2JqZWN0XSc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1F1ZXJ5S2V5KHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzRXJyb3IodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgRXJyb3I7XG59XG5leHBvcnQgZnVuY3Rpb24gc2xlZXAodGltZW91dCkge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICBzZXRUaW1lb3V0KHJlc29sdmUsIHRpbWVvdXQpO1xuICB9KTtcbn1cbi8qKlxuICogU2NoZWR1bGVzIGEgbWljcm90YXNrLlxuICogVGhpcyBjYW4gYmUgdXNlZnVsIHRvIHNjaGVkdWxlIHN0YXRlIHVwZGF0ZXMgYWZ0ZXIgcmVuZGVyaW5nLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzY2hlZHVsZU1pY3JvdGFzayhjYWxsYmFjaykge1xuICBQcm9taXNlLnJlc29sdmUoKS50aGVuKGNhbGxiYWNrKS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICByZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9KTtcbiAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0QWJvcnRDb250cm9sbGVyKCkge1xuICBpZiAodHlwZW9mIEFib3J0Q29udHJvbGxlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIH1cbn0iLCAiaW1wb3J0IF9pbmhlcml0c0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlXCI7XG5pbXBvcnQgeyBTdWJzY3JpYmFibGUgfSBmcm9tICcuL3N1YnNjcmliYWJsZSc7XG5pbXBvcnQgeyBpc1NlcnZlciB9IGZyb20gJy4vdXRpbHMnO1xuZXhwb3J0IHZhciBGb2N1c01hbmFnZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9TdWJzY3JpYmFibGUpIHtcbiAgX2luaGVyaXRzTG9vc2UoRm9jdXNNYW5hZ2VyLCBfU3Vic2NyaWJhYmxlKTtcblxuICBmdW5jdGlvbiBGb2N1c01hbmFnZXIoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX3RoaXMgPSBfU3Vic2NyaWJhYmxlLmNhbGwodGhpcykgfHwgdGhpcztcblxuICAgIF90aGlzLnNldHVwID0gZnVuY3Rpb24gKG9uRm9jdXMpIHtcbiAgICAgIHZhciBfd2luZG93O1xuXG4gICAgICBpZiAoIWlzU2VydmVyICYmICgoX3dpbmRvdyA9IHdpbmRvdykgPT0gbnVsbCA/IHZvaWQgMCA6IF93aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcikpIHtcbiAgICAgICAgdmFyIGxpc3RlbmVyID0gZnVuY3Rpb24gbGlzdGVuZXIoKSB7XG4gICAgICAgICAgcmV0dXJuIG9uRm9jdXMoKTtcbiAgICAgICAgfTsgLy8gTGlzdGVuIHRvIHZpc2liaWxsaXR5Y2hhbmdlIGFuZCBmb2N1c1xuXG5cbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCBsaXN0ZW5lciwgZmFsc2UpO1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCBsaXN0ZW5lciwgZmFsc2UpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIC8vIEJlIHN1cmUgdG8gdW5zdWJzY3JpYmUgaWYgYSBuZXcgaGFuZGxlciBpcyBzZXRcbiAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIGxpc3RlbmVyKTtcbiAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignZm9jdXMnLCBsaXN0ZW5lcik7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBGb2N1c01hbmFnZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5vblN1YnNjcmliZSA9IGZ1bmN0aW9uIG9uU3Vic2NyaWJlKCkge1xuICAgIGlmICghdGhpcy5jbGVhbnVwKSB7XG4gICAgICB0aGlzLnNldEV2ZW50TGlzdGVuZXIodGhpcy5zZXR1cCk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5vblVuc3Vic2NyaWJlID0gZnVuY3Rpb24gb25VbnN1YnNjcmliZSgpIHtcbiAgICBpZiAoIXRoaXMuaGFzTGlzdGVuZXJzKCkpIHtcbiAgICAgIHZhciBfdGhpcyRjbGVhbnVwO1xuXG4gICAgICAoX3RoaXMkY2xlYW51cCA9IHRoaXMuY2xlYW51cCkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJGNsZWFudXAuY2FsbCh0aGlzKTtcbiAgICAgIHRoaXMuY2xlYW51cCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnNldEV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbiBzZXRFdmVudExpc3RlbmVyKHNldHVwKSB7XG4gICAgdmFyIF90aGlzJGNsZWFudXAyLFxuICAgICAgICBfdGhpczIgPSB0aGlzO1xuXG4gICAgdGhpcy5zZXR1cCA9IHNldHVwO1xuICAgIChfdGhpcyRjbGVhbnVwMiA9IHRoaXMuY2xlYW51cCkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJGNsZWFudXAyLmNhbGwodGhpcyk7XG4gICAgdGhpcy5jbGVhbnVwID0gc2V0dXAoZnVuY3Rpb24gKGZvY3VzZWQpIHtcbiAgICAgIGlmICh0eXBlb2YgZm9jdXNlZCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIF90aGlzMi5zZXRGb2N1c2VkKGZvY3VzZWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgX3RoaXMyLm9uRm9jdXMoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uc2V0Rm9jdXNlZCA9IGZ1bmN0aW9uIHNldEZvY3VzZWQoZm9jdXNlZCkge1xuICAgIHRoaXMuZm9jdXNlZCA9IGZvY3VzZWQ7XG5cbiAgICBpZiAoZm9jdXNlZCkge1xuICAgICAgdGhpcy5vbkZvY3VzKCk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5vbkZvY3VzID0gZnVuY3Rpb24gb25Gb2N1cygpIHtcbiAgICB0aGlzLmxpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uIChsaXN0ZW5lcikge1xuICAgICAgbGlzdGVuZXIoKTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uaXNGb2N1c2VkID0gZnVuY3Rpb24gaXNGb2N1c2VkKCkge1xuICAgIGlmICh0eXBlb2YgdGhpcy5mb2N1c2VkID09PSAnYm9vbGVhbicpIHtcbiAgICAgIHJldHVybiB0aGlzLmZvY3VzZWQ7XG4gICAgfSAvLyBkb2N1bWVudCBnbG9iYWwgY2FuIGJlIHVuYXZhaWxhYmxlIGluIHJlYWN0IG5hdGl2ZVxuXG5cbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIFt1bmRlZmluZWQsICd2aXNpYmxlJywgJ3ByZXJlbmRlciddLmluY2x1ZGVzKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSk7XG4gIH07XG5cbiAgcmV0dXJuIEZvY3VzTWFuYWdlcjtcbn0oU3Vic2NyaWJhYmxlKTtcbmV4cG9ydCB2YXIgZm9jdXNNYW5hZ2VyID0gbmV3IEZvY3VzTWFuYWdlcigpOyIsICJpbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2VcIjtcbmltcG9ydCB7IFN1YnNjcmliYWJsZSB9IGZyb20gJy4vc3Vic2NyaWJhYmxlJztcbmltcG9ydCB7IGlzU2VydmVyIH0gZnJvbSAnLi91dGlscyc7XG5leHBvcnQgdmFyIE9ubGluZU1hbmFnZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9TdWJzY3JpYmFibGUpIHtcbiAgX2luaGVyaXRzTG9vc2UoT25saW5lTWFuYWdlciwgX1N1YnNjcmliYWJsZSk7XG5cbiAgZnVuY3Rpb24gT25saW5lTWFuYWdlcigpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfdGhpcyA9IF9TdWJzY3JpYmFibGUuY2FsbCh0aGlzKSB8fCB0aGlzO1xuXG4gICAgX3RoaXMuc2V0dXAgPSBmdW5jdGlvbiAob25PbmxpbmUpIHtcbiAgICAgIHZhciBfd2luZG93O1xuXG4gICAgICBpZiAoIWlzU2VydmVyICYmICgoX3dpbmRvdyA9IHdpbmRvdykgPT0gbnVsbCA/IHZvaWQgMCA6IF93aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcikpIHtcbiAgICAgICAgdmFyIGxpc3RlbmVyID0gZnVuY3Rpb24gbGlzdGVuZXIoKSB7XG4gICAgICAgICAgcmV0dXJuIG9uT25saW5lKCk7XG4gICAgICAgIH07IC8vIExpc3RlbiB0byBvbmxpbmVcblxuXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdvbmxpbmUnLCBsaXN0ZW5lciwgZmFsc2UpO1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignb2ZmbGluZScsIGxpc3RlbmVyLCBmYWxzZSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLy8gQmUgc3VyZSB0byB1bnN1YnNjcmliZSBpZiBhIG5ldyBoYW5kbGVyIGlzIHNldFxuICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdvbmxpbmUnLCBsaXN0ZW5lcik7XG4gICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ29mZmxpbmUnLCBsaXN0ZW5lcik7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBPbmxpbmVNYW5hZ2VyLnByb3RvdHlwZTtcblxuICBfcHJvdG8ub25TdWJzY3JpYmUgPSBmdW5jdGlvbiBvblN1YnNjcmliZSgpIHtcbiAgICBpZiAoIXRoaXMuY2xlYW51cCkge1xuICAgICAgdGhpcy5zZXRFdmVudExpc3RlbmVyKHRoaXMuc2V0dXApO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ub25VbnN1YnNjcmliZSA9IGZ1bmN0aW9uIG9uVW5zdWJzY3JpYmUoKSB7XG4gICAgaWYgKCF0aGlzLmhhc0xpc3RlbmVycygpKSB7XG4gICAgICB2YXIgX3RoaXMkY2xlYW51cDtcblxuICAgICAgKF90aGlzJGNsZWFudXAgPSB0aGlzLmNsZWFudXApID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRjbGVhbnVwLmNhbGwodGhpcyk7XG4gICAgICB0aGlzLmNsZWFudXAgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5zZXRFdmVudExpc3RlbmVyID0gZnVuY3Rpb24gc2V0RXZlbnRMaXN0ZW5lcihzZXR1cCkge1xuICAgIHZhciBfdGhpcyRjbGVhbnVwMixcbiAgICAgICAgX3RoaXMyID0gdGhpcztcblxuICAgIHRoaXMuc2V0dXAgPSBzZXR1cDtcbiAgICAoX3RoaXMkY2xlYW51cDIgPSB0aGlzLmNsZWFudXApID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRjbGVhbnVwMi5jYWxsKHRoaXMpO1xuICAgIHRoaXMuY2xlYW51cCA9IHNldHVwKGZ1bmN0aW9uIChvbmxpbmUpIHtcbiAgICAgIGlmICh0eXBlb2Ygb25saW5lID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgX3RoaXMyLnNldE9ubGluZShvbmxpbmUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgX3RoaXMyLm9uT25saW5lKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLnNldE9ubGluZSA9IGZ1bmN0aW9uIHNldE9ubGluZShvbmxpbmUpIHtcbiAgICB0aGlzLm9ubGluZSA9IG9ubGluZTtcblxuICAgIGlmIChvbmxpbmUpIHtcbiAgICAgIHRoaXMub25PbmxpbmUoKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLm9uT25saW5lID0gZnVuY3Rpb24gb25PbmxpbmUoKSB7XG4gICAgdGhpcy5saXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbiAobGlzdGVuZXIpIHtcbiAgICAgIGxpc3RlbmVyKCk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmlzT25saW5lID0gZnVuY3Rpb24gaXNPbmxpbmUoKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLm9ubGluZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICByZXR1cm4gdGhpcy5vbmxpbmU7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IgPT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiBuYXZpZ2F0b3Iub25MaW5lID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5hdmlnYXRvci5vbkxpbmU7XG4gIH07XG5cbiAgcmV0dXJuIE9ubGluZU1hbmFnZXI7XG59KFN1YnNjcmliYWJsZSk7XG5leHBvcnQgdmFyIG9ubGluZU1hbmFnZXIgPSBuZXcgT25saW5lTWFuYWdlcigpOyIsICJpbXBvcnQgeyBmb2N1c01hbmFnZXIgfSBmcm9tICcuL2ZvY3VzTWFuYWdlcic7XG5pbXBvcnQgeyBvbmxpbmVNYW5hZ2VyIH0gZnJvbSAnLi9vbmxpbmVNYW5hZ2VyJztcbmltcG9ydCB7IHNsZWVwIH0gZnJvbSAnLi91dGlscyc7XG5cbmZ1bmN0aW9uIGRlZmF1bHRSZXRyeURlbGF5KGZhaWx1cmVDb3VudCkge1xuICByZXR1cm4gTWF0aC5taW4oMTAwMCAqIE1hdGgucG93KDIsIGZhaWx1cmVDb3VudCksIDMwMDAwKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ2FuY2VsYWJsZSh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mICh2YWx1ZSA9PSBudWxsID8gdm9pZCAwIDogdmFsdWUuY2FuY2VsKSA9PT0gJ2Z1bmN0aW9uJztcbn1cbmV4cG9ydCB2YXIgQ2FuY2VsbGVkRXJyb3IgPSBmdW5jdGlvbiBDYW5jZWxsZWRFcnJvcihvcHRpb25zKSB7XG4gIHRoaXMucmV2ZXJ0ID0gb3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5yZXZlcnQ7XG4gIHRoaXMuc2lsZW50ID0gb3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5zaWxlbnQ7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ2FuY2VsbGVkRXJyb3IodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgQ2FuY2VsbGVkRXJyb3I7XG59IC8vIENMQVNTXG5cbmV4cG9ydCB2YXIgUmV0cnllciA9IGZ1bmN0aW9uIFJldHJ5ZXIoY29uZmlnKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgdmFyIGNhbmNlbFJldHJ5ID0gZmFsc2U7XG4gIHZhciBjYW5jZWxGbjtcbiAgdmFyIGNvbnRpbnVlRm47XG4gIHZhciBwcm9taXNlUmVzb2x2ZTtcbiAgdmFyIHByb21pc2VSZWplY3Q7XG4gIHRoaXMuYWJvcnQgPSBjb25maWcuYWJvcnQ7XG5cbiAgdGhpcy5jYW5jZWwgPSBmdW5jdGlvbiAoY2FuY2VsT3B0aW9ucykge1xuICAgIHJldHVybiBjYW5jZWxGbiA9PSBudWxsID8gdm9pZCAwIDogY2FuY2VsRm4oY2FuY2VsT3B0aW9ucyk7XG4gIH07XG5cbiAgdGhpcy5jYW5jZWxSZXRyeSA9IGZ1bmN0aW9uICgpIHtcbiAgICBjYW5jZWxSZXRyeSA9IHRydWU7XG4gIH07XG5cbiAgdGhpcy5jb250aW51ZVJldHJ5ID0gZnVuY3Rpb24gKCkge1xuICAgIGNhbmNlbFJldHJ5ID0gZmFsc2U7XG4gIH07XG5cbiAgdGhpcy5jb250aW51ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY29udGludWVGbiA9PSBudWxsID8gdm9pZCAwIDogY29udGludWVGbigpO1xuICB9O1xuXG4gIHRoaXMuZmFpbHVyZUNvdW50ID0gMDtcbiAgdGhpcy5pc1BhdXNlZCA9IGZhbHNlO1xuICB0aGlzLmlzUmVzb2x2ZWQgPSBmYWxzZTtcbiAgdGhpcy5pc1RyYW5zcG9ydENhbmNlbGFibGUgPSBmYWxzZTtcbiAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKG91dGVyUmVzb2x2ZSwgb3V0ZXJSZWplY3QpIHtcbiAgICBwcm9taXNlUmVzb2x2ZSA9IG91dGVyUmVzb2x2ZTtcbiAgICBwcm9taXNlUmVqZWN0ID0gb3V0ZXJSZWplY3Q7XG4gIH0pO1xuXG4gIHZhciByZXNvbHZlID0gZnVuY3Rpb24gcmVzb2x2ZSh2YWx1ZSkge1xuICAgIGlmICghX3RoaXMuaXNSZXNvbHZlZCkge1xuICAgICAgX3RoaXMuaXNSZXNvbHZlZCA9IHRydWU7XG4gICAgICBjb25maWcub25TdWNjZXNzID09IG51bGwgPyB2b2lkIDAgOiBjb25maWcub25TdWNjZXNzKHZhbHVlKTtcbiAgICAgIGNvbnRpbnVlRm4gPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRpbnVlRm4oKTtcbiAgICAgIHByb21pc2VSZXNvbHZlKHZhbHVlKTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIHJlamVjdCA9IGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkge1xuICAgIGlmICghX3RoaXMuaXNSZXNvbHZlZCkge1xuICAgICAgX3RoaXMuaXNSZXNvbHZlZCA9IHRydWU7XG4gICAgICBjb25maWcub25FcnJvciA9PSBudWxsID8gdm9pZCAwIDogY29uZmlnLm9uRXJyb3IodmFsdWUpO1xuICAgICAgY29udGludWVGbiA9PSBudWxsID8gdm9pZCAwIDogY29udGludWVGbigpO1xuICAgICAgcHJvbWlzZVJlamVjdCh2YWx1ZSk7XG4gICAgfVxuICB9O1xuXG4gIHZhciBwYXVzZSA9IGZ1bmN0aW9uIHBhdXNlKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoY29udGludWVSZXNvbHZlKSB7XG4gICAgICBjb250aW51ZUZuID0gY29udGludWVSZXNvbHZlO1xuICAgICAgX3RoaXMuaXNQYXVzZWQgPSB0cnVlO1xuICAgICAgY29uZmlnLm9uUGF1c2UgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbmZpZy5vblBhdXNlKCk7XG4gICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICBjb250aW51ZUZuID0gdW5kZWZpbmVkO1xuICAgICAgX3RoaXMuaXNQYXVzZWQgPSBmYWxzZTtcbiAgICAgIGNvbmZpZy5vbkNvbnRpbnVlID09IG51bGwgPyB2b2lkIDAgOiBjb25maWcub25Db250aW51ZSgpO1xuICAgIH0pO1xuICB9OyAvLyBDcmVhdGUgbG9vcCBmdW5jdGlvblxuXG5cbiAgdmFyIHJ1biA9IGZ1bmN0aW9uIHJ1bigpIHtcbiAgICAvLyBEbyBub3RoaW5nIGlmIGFscmVhZHkgcmVzb2x2ZWRcbiAgICBpZiAoX3RoaXMuaXNSZXNvbHZlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBwcm9taXNlT3JWYWx1ZTsgLy8gRXhlY3V0ZSBxdWVyeVxuXG4gICAgdHJ5IHtcbiAgICAgIHByb21pc2VPclZhbHVlID0gY29uZmlnLmZuKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHByb21pc2VPclZhbHVlID0gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgIH0gLy8gQ3JlYXRlIGNhbGxiYWNrIHRvIGNhbmNlbCB0aGlzIGZldGNoXG5cblxuICAgIGNhbmNlbEZuID0gZnVuY3Rpb24gY2FuY2VsRm4oY2FuY2VsT3B0aW9ucykge1xuICAgICAgaWYgKCFfdGhpcy5pc1Jlc29sdmVkKSB7XG4gICAgICAgIHJlamVjdChuZXcgQ2FuY2VsbGVkRXJyb3IoY2FuY2VsT3B0aW9ucykpO1xuICAgICAgICBfdGhpcy5hYm9ydCA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMuYWJvcnQoKTsgLy8gQ2FuY2VsIHRyYW5zcG9ydCBpZiBzdXBwb3J0ZWRcblxuICAgICAgICBpZiAoaXNDYW5jZWxhYmxlKHByb21pc2VPclZhbHVlKSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBwcm9taXNlT3JWYWx1ZS5jYW5jZWwoKTtcbiAgICAgICAgICB9IGNhdGNoIChfdW51c2VkKSB7fVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTsgLy8gQ2hlY2sgaWYgdGhlIHRyYW5zcG9ydCBsYXllciBzdXBwb3J0IGNhbmNlbGxhdGlvblxuXG5cbiAgICBfdGhpcy5pc1RyYW5zcG9ydENhbmNlbGFibGUgPSBpc0NhbmNlbGFibGUocHJvbWlzZU9yVmFsdWUpO1xuICAgIFByb21pc2UucmVzb2x2ZShwcm9taXNlT3JWYWx1ZSkudGhlbihyZXNvbHZlKS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgIHZhciBfY29uZmlnJHJldHJ5LCBfY29uZmlnJHJldHJ5RGVsYXk7XG5cbiAgICAgIC8vIFN0b3AgaWYgdGhlIGZldGNoIGlzIGFscmVhZHkgcmVzb2x2ZWRcbiAgICAgIGlmIChfdGhpcy5pc1Jlc29sdmVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gLy8gRG8gd2UgbmVlZCB0byByZXRyeSB0aGUgcmVxdWVzdD9cblxuXG4gICAgICB2YXIgcmV0cnkgPSAoX2NvbmZpZyRyZXRyeSA9IGNvbmZpZy5yZXRyeSkgIT0gbnVsbCA/IF9jb25maWckcmV0cnkgOiAzO1xuICAgICAgdmFyIHJldHJ5RGVsYXkgPSAoX2NvbmZpZyRyZXRyeURlbGF5ID0gY29uZmlnLnJldHJ5RGVsYXkpICE9IG51bGwgPyBfY29uZmlnJHJldHJ5RGVsYXkgOiBkZWZhdWx0UmV0cnlEZWxheTtcbiAgICAgIHZhciBkZWxheSA9IHR5cGVvZiByZXRyeURlbGF5ID09PSAnZnVuY3Rpb24nID8gcmV0cnlEZWxheShfdGhpcy5mYWlsdXJlQ291bnQsIGVycm9yKSA6IHJldHJ5RGVsYXk7XG4gICAgICB2YXIgc2hvdWxkUmV0cnkgPSByZXRyeSA9PT0gdHJ1ZSB8fCB0eXBlb2YgcmV0cnkgPT09ICdudW1iZXInICYmIF90aGlzLmZhaWx1cmVDb3VudCA8IHJldHJ5IHx8IHR5cGVvZiByZXRyeSA9PT0gJ2Z1bmN0aW9uJyAmJiByZXRyeShfdGhpcy5mYWlsdXJlQ291bnQsIGVycm9yKTtcblxuICAgICAgaWYgKGNhbmNlbFJldHJ5IHx8ICFzaG91bGRSZXRyeSkge1xuICAgICAgICAvLyBXZSBhcmUgZG9uZSBpZiB0aGUgcXVlcnkgZG9lcyBub3QgbmVlZCB0byBiZSByZXRyaWVkXG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgX3RoaXMuZmFpbHVyZUNvdW50Kys7IC8vIE5vdGlmeSBvbiBmYWlsXG5cbiAgICAgIGNvbmZpZy5vbkZhaWwgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbmZpZy5vbkZhaWwoX3RoaXMuZmFpbHVyZUNvdW50LCBlcnJvcik7IC8vIERlbGF5XG5cbiAgICAgIHNsZWVwKGRlbGF5KSAvLyBQYXVzZSBpZiB0aGUgZG9jdW1lbnQgaXMgbm90IHZpc2libGUgb3Igd2hlbiB0aGUgZGV2aWNlIGlzIG9mZmxpbmVcbiAgICAgIC50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFmb2N1c01hbmFnZXIuaXNGb2N1c2VkKCkgfHwgIW9ubGluZU1hbmFnZXIuaXNPbmxpbmUoKSkge1xuICAgICAgICAgIHJldHVybiBwYXVzZSgpO1xuICAgICAgICB9XG4gICAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKGNhbmNlbFJldHJ5KSB7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBydW4oKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH07IC8vIFN0YXJ0IGxvb3BcblxuXG4gIHJ1bigpO1xufTsiLCAiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgeyBnZXRBYm9ydENvbnRyb2xsZXIsIGZ1bmN0aW9uYWxVcGRhdGUsIGlzVmFsaWRUaW1lb3V0LCBub29wLCByZXBsYWNlRXF1YWxEZWVwLCB0aW1lVW50aWxTdGFsZSwgZW5zdXJlUXVlcnlLZXlBcnJheSB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgbm90aWZ5TWFuYWdlciB9IGZyb20gJy4vbm90aWZ5TWFuYWdlcic7XG5pbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyBSZXRyeWVyLCBpc0NhbmNlbGxlZEVycm9yIH0gZnJvbSAnLi9yZXRyeWVyJzsgLy8gVFlQRVNcblxuLy8gQ0xBU1NcbmV4cG9ydCB2YXIgUXVlcnkgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBRdWVyeShjb25maWcpIHtcbiAgICB0aGlzLmFib3J0U2lnbmFsQ29uc3VtZWQgPSBmYWxzZTtcbiAgICB0aGlzLmhhZE9ic2VydmVycyA9IGZhbHNlO1xuICAgIHRoaXMuZGVmYXVsdE9wdGlvbnMgPSBjb25maWcuZGVmYXVsdE9wdGlvbnM7XG4gICAgdGhpcy5zZXRPcHRpb25zKGNvbmZpZy5vcHRpb25zKTtcbiAgICB0aGlzLm9ic2VydmVycyA9IFtdO1xuICAgIHRoaXMuY2FjaGUgPSBjb25maWcuY2FjaGU7XG4gICAgdGhpcy5xdWVyeUtleSA9IGNvbmZpZy5xdWVyeUtleTtcbiAgICB0aGlzLnF1ZXJ5SGFzaCA9IGNvbmZpZy5xdWVyeUhhc2g7XG4gICAgdGhpcy5pbml0aWFsU3RhdGUgPSBjb25maWcuc3RhdGUgfHwgdGhpcy5nZXREZWZhdWx0U3RhdGUodGhpcy5vcHRpb25zKTtcbiAgICB0aGlzLnN0YXRlID0gdGhpcy5pbml0aWFsU3RhdGU7XG4gICAgdGhpcy5tZXRhID0gY29uZmlnLm1ldGE7XG4gICAgdGhpcy5zY2hlZHVsZUdjKCk7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gUXVlcnkucHJvdG90eXBlO1xuXG4gIF9wcm90by5zZXRPcHRpb25zID0gZnVuY3Rpb24gc2V0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzJG9wdGlvbnMkY2FjaGVUaTtcblxuICAgIHRoaXMub3B0aW9ucyA9IF9leHRlbmRzKHt9LCB0aGlzLmRlZmF1bHRPcHRpb25zLCBvcHRpb25zKTtcbiAgICB0aGlzLm1ldGEgPSBvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLm1ldGE7IC8vIERlZmF1bHQgdG8gNSBtaW51dGVzIGlmIG5vdCBjYWNoZSB0aW1lIGlzIHNldFxuXG4gICAgdGhpcy5jYWNoZVRpbWUgPSBNYXRoLm1heCh0aGlzLmNhY2hlVGltZSB8fCAwLCAoX3RoaXMkb3B0aW9ucyRjYWNoZVRpID0gdGhpcy5vcHRpb25zLmNhY2hlVGltZSkgIT0gbnVsbCA/IF90aGlzJG9wdGlvbnMkY2FjaGVUaSA6IDUgKiA2MCAqIDEwMDApO1xuICB9O1xuXG4gIF9wcm90by5zZXREZWZhdWx0T3B0aW9ucyA9IGZ1bmN0aW9uIHNldERlZmF1bHRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICB0aGlzLmRlZmF1bHRPcHRpb25zID0gb3B0aW9ucztcbiAgfTtcblxuICBfcHJvdG8uc2NoZWR1bGVHYyA9IGZ1bmN0aW9uIHNjaGVkdWxlR2MoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMuY2xlYXJHY1RpbWVvdXQoKTtcblxuICAgIGlmIChpc1ZhbGlkVGltZW91dCh0aGlzLmNhY2hlVGltZSkpIHtcbiAgICAgIHRoaXMuZ2NUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzLm9wdGlvbmFsUmVtb3ZlKCk7XG4gICAgICB9LCB0aGlzLmNhY2hlVGltZSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5jbGVhckdjVGltZW91dCA9IGZ1bmN0aW9uIGNsZWFyR2NUaW1lb3V0KCkge1xuICAgIGlmICh0aGlzLmdjVGltZW91dCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZ2NUaW1lb3V0KTtcbiAgICAgIHRoaXMuZ2NUaW1lb3V0ID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ub3B0aW9uYWxSZW1vdmUgPSBmdW5jdGlvbiBvcHRpb25hbFJlbW92ZSgpIHtcbiAgICBpZiAoIXRoaXMub2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgaWYgKHRoaXMuc3RhdGUuaXNGZXRjaGluZykge1xuICAgICAgICBpZiAodGhpcy5oYWRPYnNlcnZlcnMpIHtcbiAgICAgICAgICB0aGlzLnNjaGVkdWxlR2MoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jYWNoZS5yZW1vdmUodGhpcyk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5zZXREYXRhID0gZnVuY3Rpb24gc2V0RGF0YSh1cGRhdGVyLCBvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzJG9wdGlvbnMkaXNEYXRhRSwgX3RoaXMkb3B0aW9ucztcblxuICAgIHZhciBwcmV2RGF0YSA9IHRoaXMuc3RhdGUuZGF0YTsgLy8gR2V0IHRoZSBuZXcgZGF0YVxuXG4gICAgdmFyIGRhdGEgPSBmdW5jdGlvbmFsVXBkYXRlKHVwZGF0ZXIsIHByZXZEYXRhKTsgLy8gVXNlIHByZXYgZGF0YSBpZiBhbiBpc0RhdGFFcXVhbCBmdW5jdGlvbiBpcyBkZWZpbmVkIGFuZCByZXR1cm5zIGB0cnVlYFxuXG4gICAgaWYgKChfdGhpcyRvcHRpb25zJGlzRGF0YUUgPSAoX3RoaXMkb3B0aW9ucyA9IHRoaXMub3B0aW9ucykuaXNEYXRhRXF1YWwpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRvcHRpb25zJGlzRGF0YUUuY2FsbChfdGhpcyRvcHRpb25zLCBwcmV2RGF0YSwgZGF0YSkpIHtcbiAgICAgIGRhdGEgPSBwcmV2RGF0YTtcbiAgICB9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy5zdHJ1Y3R1cmFsU2hhcmluZyAhPT0gZmFsc2UpIHtcbiAgICAgIC8vIFN0cnVjdHVyYWxseSBzaGFyZSBkYXRhIGJldHdlZW4gcHJldiBhbmQgbmV3IGRhdGEgaWYgbmVlZGVkXG4gICAgICBkYXRhID0gcmVwbGFjZUVxdWFsRGVlcChwcmV2RGF0YSwgZGF0YSk7XG4gICAgfSAvLyBTZXQgZGF0YSBhbmQgbWFyayBpdCBhcyBjYWNoZWRcblxuXG4gICAgdGhpcy5kaXNwYXRjaCh7XG4gICAgICBkYXRhOiBkYXRhLFxuICAgICAgdHlwZTogJ3N1Y2Nlc3MnLFxuICAgICAgZGF0YVVwZGF0ZWRBdDogb3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy51cGRhdGVkQXRcbiAgICB9KTtcbiAgICByZXR1cm4gZGF0YTtcbiAgfTtcblxuICBfcHJvdG8uc2V0U3RhdGUgPSBmdW5jdGlvbiBzZXRTdGF0ZShzdGF0ZSwgc2V0U3RhdGVPcHRpb25zKSB7XG4gICAgdGhpcy5kaXNwYXRjaCh7XG4gICAgICB0eXBlOiAnc2V0U3RhdGUnLFxuICAgICAgc3RhdGU6IHN0YXRlLFxuICAgICAgc2V0U3RhdGVPcHRpb25zOiBzZXRTdGF0ZU9wdGlvbnNcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uY2FuY2VsID0gZnVuY3Rpb24gY2FuY2VsKG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXMkcmV0cnllcjtcblxuICAgIHZhciBwcm9taXNlID0gdGhpcy5wcm9taXNlO1xuICAgIChfdGhpcyRyZXRyeWVyID0gdGhpcy5yZXRyeWVyKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkcmV0cnllci5jYW5jZWwob3B0aW9ucyk7XG4gICAgcmV0dXJuIHByb21pc2UgPyBwcm9taXNlLnRoZW4obm9vcCkuY2F0Y2gobm9vcCkgOiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfTtcblxuICBfcHJvdG8uZGVzdHJveSA9IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5jbGVhckdjVGltZW91dCgpO1xuICAgIHRoaXMuY2FuY2VsKHtcbiAgICAgIHNpbGVudDogdHJ1ZVxuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5yZXNldCA9IGZ1bmN0aW9uIHJlc2V0KCkge1xuICAgIHRoaXMuZGVzdHJveSgpO1xuICAgIHRoaXMuc2V0U3RhdGUodGhpcy5pbml0aWFsU3RhdGUpO1xuICB9O1xuXG4gIF9wcm90by5pc0FjdGl2ZSA9IGZ1bmN0aW9uIGlzQWN0aXZlKCkge1xuICAgIHJldHVybiB0aGlzLm9ic2VydmVycy5zb21lKGZ1bmN0aW9uIChvYnNlcnZlcikge1xuICAgICAgcmV0dXJuIG9ic2VydmVyLm9wdGlvbnMuZW5hYmxlZCAhPT0gZmFsc2U7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmlzRmV0Y2hpbmcgPSBmdW5jdGlvbiBpc0ZldGNoaW5nKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlLmlzRmV0Y2hpbmc7XG4gIH07XG5cbiAgX3Byb3RvLmlzU3RhbGUgPSBmdW5jdGlvbiBpc1N0YWxlKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlLmlzSW52YWxpZGF0ZWQgfHwgIXRoaXMuc3RhdGUuZGF0YVVwZGF0ZWRBdCB8fCB0aGlzLm9ic2VydmVycy5zb21lKGZ1bmN0aW9uIChvYnNlcnZlcikge1xuICAgICAgcmV0dXJuIG9ic2VydmVyLmdldEN1cnJlbnRSZXN1bHQoKS5pc1N0YWxlO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5pc1N0YWxlQnlUaW1lID0gZnVuY3Rpb24gaXNTdGFsZUJ5VGltZShzdGFsZVRpbWUpIHtcbiAgICBpZiAoc3RhbGVUaW1lID09PSB2b2lkIDApIHtcbiAgICAgIHN0YWxlVGltZSA9IDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc3RhdGUuaXNJbnZhbGlkYXRlZCB8fCAhdGhpcy5zdGF0ZS5kYXRhVXBkYXRlZEF0IHx8ICF0aW1lVW50aWxTdGFsZSh0aGlzLnN0YXRlLmRhdGFVcGRhdGVkQXQsIHN0YWxlVGltZSk7XG4gIH07XG5cbiAgX3Byb3RvLm9uRm9jdXMgPSBmdW5jdGlvbiBvbkZvY3VzKCkge1xuICAgIHZhciBfdGhpcyRyZXRyeWVyMjtcblxuICAgIHZhciBvYnNlcnZlciA9IHRoaXMub2JzZXJ2ZXJzLmZpbmQoZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiB4LnNob3VsZEZldGNoT25XaW5kb3dGb2N1cygpO1xuICAgIH0pO1xuXG4gICAgaWYgKG9ic2VydmVyKSB7XG4gICAgICBvYnNlcnZlci5yZWZldGNoKCk7XG4gICAgfSAvLyBDb250aW51ZSBmZXRjaCBpZiBjdXJyZW50bHkgcGF1c2VkXG5cblxuICAgIChfdGhpcyRyZXRyeWVyMiA9IHRoaXMucmV0cnllcikgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJHJldHJ5ZXIyLmNvbnRpbnVlKCk7XG4gIH07XG5cbiAgX3Byb3RvLm9uT25saW5lID0gZnVuY3Rpb24gb25PbmxpbmUoKSB7XG4gICAgdmFyIF90aGlzJHJldHJ5ZXIzO1xuXG4gICAgdmFyIG9ic2VydmVyID0gdGhpcy5vYnNlcnZlcnMuZmluZChmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHguc2hvdWxkRmV0Y2hPblJlY29ubmVjdCgpO1xuICAgIH0pO1xuXG4gICAgaWYgKG9ic2VydmVyKSB7XG4gICAgICBvYnNlcnZlci5yZWZldGNoKCk7XG4gICAgfSAvLyBDb250aW51ZSBmZXRjaCBpZiBjdXJyZW50bHkgcGF1c2VkXG5cblxuICAgIChfdGhpcyRyZXRyeWVyMyA9IHRoaXMucmV0cnllcikgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJHJldHJ5ZXIzLmNvbnRpbnVlKCk7XG4gIH07XG5cbiAgX3Byb3RvLmFkZE9ic2VydmVyID0gZnVuY3Rpb24gYWRkT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcbiAgICBpZiAodGhpcy5vYnNlcnZlcnMuaW5kZXhPZihvYnNlcnZlcikgPT09IC0xKSB7XG4gICAgICB0aGlzLm9ic2VydmVycy5wdXNoKG9ic2VydmVyKTtcbiAgICAgIHRoaXMuaGFkT2JzZXJ2ZXJzID0gdHJ1ZTsgLy8gU3RvcCB0aGUgcXVlcnkgZnJvbSBiZWluZyBnYXJiYWdlIGNvbGxlY3RlZFxuXG4gICAgICB0aGlzLmNsZWFyR2NUaW1lb3V0KCk7XG4gICAgICB0aGlzLmNhY2hlLm5vdGlmeSh7XG4gICAgICAgIHR5cGU6ICdvYnNlcnZlckFkZGVkJyxcbiAgICAgICAgcXVlcnk6IHRoaXMsXG4gICAgICAgIG9ic2VydmVyOiBvYnNlcnZlclxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5yZW1vdmVPYnNlcnZlciA9IGZ1bmN0aW9uIHJlbW92ZU9ic2VydmVyKG9ic2VydmVyKSB7XG4gICAgaWYgKHRoaXMub2JzZXJ2ZXJzLmluZGV4T2Yob2JzZXJ2ZXIpICE9PSAtMSkge1xuICAgICAgdGhpcy5vYnNlcnZlcnMgPSB0aGlzLm9ic2VydmVycy5maWx0ZXIoZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgcmV0dXJuIHggIT09IG9ic2VydmVyO1xuICAgICAgfSk7XG5cbiAgICAgIGlmICghdGhpcy5vYnNlcnZlcnMubGVuZ3RoKSB7XG4gICAgICAgIC8vIElmIHRoZSB0cmFuc3BvcnQgbGF5ZXIgZG9lcyBub3Qgc3VwcG9ydCBjYW5jZWxsYXRpb25cbiAgICAgICAgLy8gd2UnbGwgbGV0IHRoZSBxdWVyeSBjb250aW51ZSBzbyB0aGUgcmVzdWx0IGNhbiBiZSBjYWNoZWRcbiAgICAgICAgaWYgKHRoaXMucmV0cnllcikge1xuICAgICAgICAgIGlmICh0aGlzLnJldHJ5ZXIuaXNUcmFuc3BvcnRDYW5jZWxhYmxlIHx8IHRoaXMuYWJvcnRTaWduYWxDb25zdW1lZCkge1xuICAgICAgICAgICAgdGhpcy5yZXRyeWVyLmNhbmNlbCh7XG4gICAgICAgICAgICAgIHJldmVydDogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmV0cnllci5jYW5jZWxSZXRyeSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmNhY2hlVGltZSkge1xuICAgICAgICAgIHRoaXMuc2NoZWR1bGVHYygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY2FjaGUucmVtb3ZlKHRoaXMpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY2FjaGUubm90aWZ5KHtcbiAgICAgICAgdHlwZTogJ29ic2VydmVyUmVtb3ZlZCcsXG4gICAgICAgIHF1ZXJ5OiB0aGlzLFxuICAgICAgICBvYnNlcnZlcjogb2JzZXJ2ZXJcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uZ2V0T2JzZXJ2ZXJzQ291bnQgPSBmdW5jdGlvbiBnZXRPYnNlcnZlcnNDb3VudCgpIHtcbiAgICByZXR1cm4gdGhpcy5vYnNlcnZlcnMubGVuZ3RoO1xuICB9O1xuXG4gIF9wcm90by5pbnZhbGlkYXRlID0gZnVuY3Rpb24gaW52YWxpZGF0ZSgpIHtcbiAgICBpZiAoIXRoaXMuc3RhdGUuaXNJbnZhbGlkYXRlZCkge1xuICAgICAgdGhpcy5kaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6ICdpbnZhbGlkYXRlJ1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5mZXRjaCA9IGZ1bmN0aW9uIGZldGNoKG9wdGlvbnMsIGZldGNoT3B0aW9ucykge1xuICAgIHZhciBfdGhpczIgPSB0aGlzLFxuICAgICAgICBfdGhpcyRvcHRpb25zJGJlaGF2aW8sXG4gICAgICAgIF9jb250ZXh0JGZldGNoT3B0aW9ucyxcbiAgICAgICAgX2Fib3J0Q29udHJvbGxlciRhYm9yO1xuXG4gICAgaWYgKHRoaXMuc3RhdGUuaXNGZXRjaGluZykge1xuICAgICAgaWYgKHRoaXMuc3RhdGUuZGF0YVVwZGF0ZWRBdCAmJiAoZmV0Y2hPcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBmZXRjaE9wdGlvbnMuY2FuY2VsUmVmZXRjaCkpIHtcbiAgICAgICAgLy8gU2lsZW50bHkgY2FuY2VsIGN1cnJlbnQgZmV0Y2ggaWYgdGhlIHVzZXIgd2FudHMgdG8gY2FuY2VsIHJlZmV0Y2hlc1xuICAgICAgICB0aGlzLmNhbmNlbCh7XG4gICAgICAgICAgc2lsZW50OiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnByb21pc2UpIHtcbiAgICAgICAgdmFyIF90aGlzJHJldHJ5ZXI0O1xuXG4gICAgICAgIC8vIG1ha2Ugc3VyZSB0aGF0IHJldHJpZXMgdGhhdCB3ZXJlIHBvdGVudGlhbGx5IGNhbmNlbGxlZCBkdWUgdG8gdW5tb3VudHMgY2FuIGNvbnRpbnVlXG4gICAgICAgIChfdGhpcyRyZXRyeWVyNCA9IHRoaXMucmV0cnllcikgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJHJldHJ5ZXI0LmNvbnRpbnVlUmV0cnkoKTsgLy8gUmV0dXJuIGN1cnJlbnQgcHJvbWlzZSBpZiB3ZSBhcmUgYWxyZWFkeSBmZXRjaGluZ1xuXG4gICAgICAgIHJldHVybiB0aGlzLnByb21pc2U7XG4gICAgICB9XG4gICAgfSAvLyBVcGRhdGUgY29uZmlnIGlmIHBhc3NlZCwgb3RoZXJ3aXNlIHRoZSBjb25maWcgZnJvbSB0aGUgbGFzdCBleGVjdXRpb24gaXMgdXNlZFxuXG5cbiAgICBpZiAob3B0aW9ucykge1xuICAgICAgdGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpO1xuICAgIH0gLy8gVXNlIHRoZSBvcHRpb25zIGZyb20gdGhlIGZpcnN0IG9ic2VydmVyIHdpdGggYSBxdWVyeSBmdW5jdGlvbiBpZiBubyBmdW5jdGlvbiBpcyBmb3VuZC5cbiAgICAvLyBUaGlzIGNhbiBoYXBwZW4gd2hlbiB0aGUgcXVlcnkgaXMgaHlkcmF0ZWQgb3IgY3JlYXRlZCB3aXRoIHNldFF1ZXJ5RGF0YS5cblxuXG4gICAgaWYgKCF0aGlzLm9wdGlvbnMucXVlcnlGbikge1xuICAgICAgdmFyIG9ic2VydmVyID0gdGhpcy5vYnNlcnZlcnMuZmluZChmdW5jdGlvbiAoeCkge1xuICAgICAgICByZXR1cm4geC5vcHRpb25zLnF1ZXJ5Rm47XG4gICAgICB9KTtcblxuICAgICAgaWYgKG9ic2VydmVyKSB7XG4gICAgICAgIHRoaXMuc2V0T3B0aW9ucyhvYnNlcnZlci5vcHRpb25zKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcXVlcnlLZXkgPSBlbnN1cmVRdWVyeUtleUFycmF5KHRoaXMucXVlcnlLZXkpO1xuICAgIHZhciBhYm9ydENvbnRyb2xsZXIgPSBnZXRBYm9ydENvbnRyb2xsZXIoKTsgLy8gQ3JlYXRlIHF1ZXJ5IGZ1bmN0aW9uIGNvbnRleHRcblxuICAgIHZhciBxdWVyeUZuQ29udGV4dCA9IHtcbiAgICAgIHF1ZXJ5S2V5OiBxdWVyeUtleSxcbiAgICAgIHBhZ2VQYXJhbTogdW5kZWZpbmVkLFxuICAgICAgbWV0YTogdGhpcy5tZXRhXG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocXVlcnlGbkNvbnRleHQsICdzaWduYWwnLCB7XG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIGlmIChhYm9ydENvbnRyb2xsZXIpIHtcbiAgICAgICAgICBfdGhpczIuYWJvcnRTaWduYWxDb25zdW1lZCA9IHRydWU7XG4gICAgICAgICAgcmV0dXJuIGFib3J0Q29udHJvbGxlci5zaWduYWw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH0pOyAvLyBDcmVhdGUgZmV0Y2ggZnVuY3Rpb25cblxuICAgIHZhciBmZXRjaEZuID0gZnVuY3Rpb24gZmV0Y2hGbigpIHtcbiAgICAgIGlmICghX3RoaXMyLm9wdGlvbnMucXVlcnlGbikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoJ01pc3NpbmcgcXVlcnlGbicpO1xuICAgICAgfVxuXG4gICAgICBfdGhpczIuYWJvcnRTaWduYWxDb25zdW1lZCA9IGZhbHNlO1xuICAgICAgcmV0dXJuIF90aGlzMi5vcHRpb25zLnF1ZXJ5Rm4ocXVlcnlGbkNvbnRleHQpO1xuICAgIH07IC8vIFRyaWdnZXIgYmVoYXZpb3IgaG9va1xuXG5cbiAgICB2YXIgY29udGV4dCA9IHtcbiAgICAgIGZldGNoT3B0aW9uczogZmV0Y2hPcHRpb25zLFxuICAgICAgb3B0aW9uczogdGhpcy5vcHRpb25zLFxuICAgICAgcXVlcnlLZXk6IHF1ZXJ5S2V5LFxuICAgICAgc3RhdGU6IHRoaXMuc3RhdGUsXG4gICAgICBmZXRjaEZuOiBmZXRjaEZuLFxuICAgICAgbWV0YTogdGhpcy5tZXRhXG4gICAgfTtcblxuICAgIGlmICgoX3RoaXMkb3B0aW9ucyRiZWhhdmlvID0gdGhpcy5vcHRpb25zLmJlaGF2aW9yKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkb3B0aW9ucyRiZWhhdmlvLm9uRmV0Y2gpIHtcbiAgICAgIHZhciBfdGhpcyRvcHRpb25zJGJlaGF2aW8yO1xuXG4gICAgICAoX3RoaXMkb3B0aW9ucyRiZWhhdmlvMiA9IHRoaXMub3B0aW9ucy5iZWhhdmlvcikgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJG9wdGlvbnMkYmVoYXZpbzIub25GZXRjaChjb250ZXh0KTtcbiAgICB9IC8vIFN0b3JlIHN0YXRlIGluIGNhc2UgdGhlIGN1cnJlbnQgZmV0Y2ggbmVlZHMgdG8gYmUgcmV2ZXJ0ZWRcblxuXG4gICAgdGhpcy5yZXZlcnRTdGF0ZSA9IHRoaXMuc3RhdGU7IC8vIFNldCB0byBmZXRjaGluZyBzdGF0ZSBpZiBub3QgYWxyZWFkeSBpbiBpdFxuXG4gICAgaWYgKCF0aGlzLnN0YXRlLmlzRmV0Y2hpbmcgfHwgdGhpcy5zdGF0ZS5mZXRjaE1ldGEgIT09ICgoX2NvbnRleHQkZmV0Y2hPcHRpb25zID0gY29udGV4dC5mZXRjaE9wdGlvbnMpID09IG51bGwgPyB2b2lkIDAgOiBfY29udGV4dCRmZXRjaE9wdGlvbnMubWV0YSkpIHtcbiAgICAgIHZhciBfY29udGV4dCRmZXRjaE9wdGlvbnMyO1xuXG4gICAgICB0aGlzLmRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogJ2ZldGNoJyxcbiAgICAgICAgbWV0YTogKF9jb250ZXh0JGZldGNoT3B0aW9uczIgPSBjb250ZXh0LmZldGNoT3B0aW9ucykgPT0gbnVsbCA/IHZvaWQgMCA6IF9jb250ZXh0JGZldGNoT3B0aW9uczIubWV0YVxuICAgICAgfSk7XG4gICAgfSAvLyBUcnkgdG8gZmV0Y2ggdGhlIGRhdGFcblxuXG4gICAgdGhpcy5yZXRyeWVyID0gbmV3IFJldHJ5ZXIoe1xuICAgICAgZm46IGNvbnRleHQuZmV0Y2hGbixcbiAgICAgIGFib3J0OiBhYm9ydENvbnRyb2xsZXIgPT0gbnVsbCA/IHZvaWQgMCA6IChfYWJvcnRDb250cm9sbGVyJGFib3IgPSBhYm9ydENvbnRyb2xsZXIuYWJvcnQpID09IG51bGwgPyB2b2lkIDAgOiBfYWJvcnRDb250cm9sbGVyJGFib3IuYmluZChhYm9ydENvbnRyb2xsZXIpLFxuICAgICAgb25TdWNjZXNzOiBmdW5jdGlvbiBvblN1Y2Nlc3MoZGF0YSkge1xuICAgICAgICBfdGhpczIuc2V0RGF0YShkYXRhKTsgLy8gTm90aWZ5IGNhY2hlIGNhbGxiYWNrXG5cblxuICAgICAgICBfdGhpczIuY2FjaGUuY29uZmlnLm9uU3VjY2VzcyA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMyLmNhY2hlLmNvbmZpZy5vblN1Y2Nlc3MoZGF0YSwgX3RoaXMyKTsgLy8gUmVtb3ZlIHF1ZXJ5IGFmdGVyIGZldGNoaW5nIGlmIGNhY2hlIHRpbWUgaXMgMFxuXG4gICAgICAgIGlmIChfdGhpczIuY2FjaGVUaW1lID09PSAwKSB7XG4gICAgICAgICAgX3RoaXMyLm9wdGlvbmFsUmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBvbkVycm9yOiBmdW5jdGlvbiBvbkVycm9yKGVycm9yKSB7XG4gICAgICAgIC8vIE9wdGltaXN0aWNhbGx5IHVwZGF0ZSBzdGF0ZSBpZiBuZWVkZWRcbiAgICAgICAgaWYgKCEoaXNDYW5jZWxsZWRFcnJvcihlcnJvcikgJiYgZXJyb3Iuc2lsZW50KSkge1xuICAgICAgICAgIF90aGlzMi5kaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgZXJyb3I6IGVycm9yXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzQ2FuY2VsbGVkRXJyb3IoZXJyb3IpKSB7XG4gICAgICAgICAgLy8gTm90aWZ5IGNhY2hlIGNhbGxiYWNrXG4gICAgICAgICAgX3RoaXMyLmNhY2hlLmNvbmZpZy5vbkVycm9yID09IG51bGwgPyB2b2lkIDAgOiBfdGhpczIuY2FjaGUuY29uZmlnLm9uRXJyb3IoZXJyb3IsIF90aGlzMik7IC8vIExvZyBlcnJvclxuXG4gICAgICAgICAgZ2V0TG9nZ2VyKCkuZXJyb3IoZXJyb3IpO1xuICAgICAgICB9IC8vIFJlbW92ZSBxdWVyeSBhZnRlciBmZXRjaGluZyBpZiBjYWNoZSB0aW1lIGlzIDBcblxuXG4gICAgICAgIGlmIChfdGhpczIuY2FjaGVUaW1lID09PSAwKSB7XG4gICAgICAgICAgX3RoaXMyLm9wdGlvbmFsUmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBvbkZhaWw6IGZ1bmN0aW9uIG9uRmFpbCgpIHtcbiAgICAgICAgX3RoaXMyLmRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiAnZmFpbGVkJ1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBvblBhdXNlOiBmdW5jdGlvbiBvblBhdXNlKCkge1xuICAgICAgICBfdGhpczIuZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6ICdwYXVzZSdcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgb25Db250aW51ZTogZnVuY3Rpb24gb25Db250aW51ZSgpIHtcbiAgICAgICAgX3RoaXMyLmRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiAnY29udGludWUnXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIHJldHJ5OiBjb250ZXh0Lm9wdGlvbnMucmV0cnksXG4gICAgICByZXRyeURlbGF5OiBjb250ZXh0Lm9wdGlvbnMucmV0cnlEZWxheVxuICAgIH0pO1xuICAgIHRoaXMucHJvbWlzZSA9IHRoaXMucmV0cnllci5wcm9taXNlO1xuICAgIHJldHVybiB0aGlzLnByb21pc2U7XG4gIH07XG5cbiAgX3Byb3RvLmRpc3BhdGNoID0gZnVuY3Rpb24gZGlzcGF0Y2goYWN0aW9uKSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICB0aGlzLnN0YXRlID0gdGhpcy5yZWR1Y2VyKHRoaXMuc3RhdGUsIGFjdGlvbik7XG4gICAgbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczMub2JzZXJ2ZXJzLmZvckVhY2goZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICAgIG9ic2VydmVyLm9uUXVlcnlVcGRhdGUoYWN0aW9uKTtcbiAgICAgIH0pO1xuXG4gICAgICBfdGhpczMuY2FjaGUubm90aWZ5KHtcbiAgICAgICAgcXVlcnk6IF90aGlzMyxcbiAgICAgICAgdHlwZTogJ3F1ZXJ5VXBkYXRlZCcsXG4gICAgICAgIGFjdGlvbjogYWN0aW9uXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0RGVmYXVsdFN0YXRlID0gZnVuY3Rpb24gZ2V0RGVmYXVsdFN0YXRlKG9wdGlvbnMpIHtcbiAgICB2YXIgZGF0YSA9IHR5cGVvZiBvcHRpb25zLmluaXRpYWxEYXRhID09PSAnZnVuY3Rpb24nID8gb3B0aW9ucy5pbml0aWFsRGF0YSgpIDogb3B0aW9ucy5pbml0aWFsRGF0YTtcbiAgICB2YXIgaGFzSW5pdGlhbERhdGEgPSB0eXBlb2Ygb3B0aW9ucy5pbml0aWFsRGF0YSAhPT0gJ3VuZGVmaW5lZCc7XG4gICAgdmFyIGluaXRpYWxEYXRhVXBkYXRlZEF0ID0gaGFzSW5pdGlhbERhdGEgPyB0eXBlb2Ygb3B0aW9ucy5pbml0aWFsRGF0YVVwZGF0ZWRBdCA9PT0gJ2Z1bmN0aW9uJyA/IG9wdGlvbnMuaW5pdGlhbERhdGFVcGRhdGVkQXQoKSA6IG9wdGlvbnMuaW5pdGlhbERhdGFVcGRhdGVkQXQgOiAwO1xuICAgIHZhciBoYXNEYXRhID0gdHlwZW9mIGRhdGEgIT09ICd1bmRlZmluZWQnO1xuICAgIHJldHVybiB7XG4gICAgICBkYXRhOiBkYXRhLFxuICAgICAgZGF0YVVwZGF0ZUNvdW50OiAwLFxuICAgICAgZGF0YVVwZGF0ZWRBdDogaGFzRGF0YSA/IGluaXRpYWxEYXRhVXBkYXRlZEF0ICE9IG51bGwgPyBpbml0aWFsRGF0YVVwZGF0ZWRBdCA6IERhdGUubm93KCkgOiAwLFxuICAgICAgZXJyb3I6IG51bGwsXG4gICAgICBlcnJvclVwZGF0ZUNvdW50OiAwLFxuICAgICAgZXJyb3JVcGRhdGVkQXQ6IDAsXG4gICAgICBmZXRjaEZhaWx1cmVDb3VudDogMCxcbiAgICAgIGZldGNoTWV0YTogbnVsbCxcbiAgICAgIGlzRmV0Y2hpbmc6IGZhbHNlLFxuICAgICAgaXNJbnZhbGlkYXRlZDogZmFsc2UsXG4gICAgICBpc1BhdXNlZDogZmFsc2UsXG4gICAgICBzdGF0dXM6IGhhc0RhdGEgPyAnc3VjY2VzcycgOiAnaWRsZSdcbiAgICB9O1xuICB9O1xuXG4gIF9wcm90by5yZWR1Y2VyID0gZnVuY3Rpb24gcmVkdWNlcihzdGF0ZSwgYWN0aW9uKSB7XG4gICAgdmFyIF9hY3Rpb24kbWV0YSwgX2FjdGlvbiRkYXRhVXBkYXRlZEF0O1xuXG4gICAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwge1xuICAgICAgICAgIGZldGNoRmFpbHVyZUNvdW50OiBzdGF0ZS5mZXRjaEZhaWx1cmVDb3VudCArIDFcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ3BhdXNlJzpcbiAgICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwge1xuICAgICAgICAgIGlzUGF1c2VkOiB0cnVlXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdjb250aW51ZSc6XG4gICAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgICBpc1BhdXNlZDogZmFsc2VcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ2ZldGNoJzpcbiAgICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwge1xuICAgICAgICAgIGZldGNoRmFpbHVyZUNvdW50OiAwLFxuICAgICAgICAgIGZldGNoTWV0YTogKF9hY3Rpb24kbWV0YSA9IGFjdGlvbi5tZXRhKSAhPSBudWxsID8gX2FjdGlvbiRtZXRhIDogbnVsbCxcbiAgICAgICAgICBpc0ZldGNoaW5nOiB0cnVlLFxuICAgICAgICAgIGlzUGF1c2VkOiBmYWxzZVxuICAgICAgICB9LCAhc3RhdGUuZGF0YVVwZGF0ZWRBdCAmJiB7XG4gICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgc3RhdHVzOiAnbG9hZGluZydcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ3N1Y2Nlc3MnOlxuICAgICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCB7XG4gICAgICAgICAgZGF0YTogYWN0aW9uLmRhdGEsXG4gICAgICAgICAgZGF0YVVwZGF0ZUNvdW50OiBzdGF0ZS5kYXRhVXBkYXRlQ291bnQgKyAxLFxuICAgICAgICAgIGRhdGFVcGRhdGVkQXQ6IChfYWN0aW9uJGRhdGFVcGRhdGVkQXQgPSBhY3Rpb24uZGF0YVVwZGF0ZWRBdCkgIT0gbnVsbCA/IF9hY3Rpb24kZGF0YVVwZGF0ZWRBdCA6IERhdGUubm93KCksXG4gICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgZmV0Y2hGYWlsdXJlQ291bnQ6IDAsXG4gICAgICAgICAgaXNGZXRjaGluZzogZmFsc2UsXG4gICAgICAgICAgaXNJbnZhbGlkYXRlZDogZmFsc2UsXG4gICAgICAgICAgaXNQYXVzZWQ6IGZhbHNlLFxuICAgICAgICAgIHN0YXR1czogJ3N1Y2Nlc3MnXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdlcnJvcic6XG4gICAgICAgIHZhciBlcnJvciA9IGFjdGlvbi5lcnJvcjtcblxuICAgICAgICBpZiAoaXNDYW5jZWxsZWRFcnJvcihlcnJvcikgJiYgZXJyb3IucmV2ZXJ0ICYmIHRoaXMucmV2ZXJ0U3RhdGUpIHtcbiAgICAgICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHRoaXMucmV2ZXJ0U3RhdGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwge1xuICAgICAgICAgIGVycm9yOiBlcnJvcixcbiAgICAgICAgICBlcnJvclVwZGF0ZUNvdW50OiBzdGF0ZS5lcnJvclVwZGF0ZUNvdW50ICsgMSxcbiAgICAgICAgICBlcnJvclVwZGF0ZWRBdDogRGF0ZS5ub3coKSxcbiAgICAgICAgICBmZXRjaEZhaWx1cmVDb3VudDogc3RhdGUuZmV0Y2hGYWlsdXJlQ291bnQgKyAxLFxuICAgICAgICAgIGlzRmV0Y2hpbmc6IGZhbHNlLFxuICAgICAgICAgIGlzUGF1c2VkOiBmYWxzZSxcbiAgICAgICAgICBzdGF0dXM6ICdlcnJvcidcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ2ludmFsaWRhdGUnOlxuICAgICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCB7XG4gICAgICAgICAgaXNJbnZhbGlkYXRlZDogdHJ1ZVxuICAgICAgICB9KTtcblxuICAgICAgY2FzZSAnc2V0U3RhdGUnOlxuICAgICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCBhY3Rpb24uc3RhdGUpO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBRdWVyeTtcbn0oKTsiLCAiaW1wb3J0IHsgc2NoZWR1bGVNaWNyb3Rhc2sgfSBmcm9tICcuL3V0aWxzJzsgLy8gVFlQRVNcblxuLy8gQ0xBU1NcbmV4cG9ydCB2YXIgTm90aWZ5TWFuYWdlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIE5vdGlmeU1hbmFnZXIoKSB7XG4gICAgdGhpcy5xdWV1ZSA9IFtdO1xuICAgIHRoaXMudHJhbnNhY3Rpb25zID0gMDtcblxuICAgIHRoaXMubm90aWZ5Rm4gPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgIGNhbGxiYWNrKCk7XG4gICAgfTtcblxuICAgIHRoaXMuYmF0Y2hOb3RpZnlGbiA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgY2FsbGJhY2soKTtcbiAgICB9O1xuICB9XG5cbiAgdmFyIF9wcm90byA9IE5vdGlmeU1hbmFnZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5iYXRjaCA9IGZ1bmN0aW9uIGJhdGNoKGNhbGxiYWNrKSB7XG4gICAgdmFyIHJlc3VsdDtcbiAgICB0aGlzLnRyYW5zYWN0aW9ucysrO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJlc3VsdCA9IGNhbGxiYWNrKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25zLS07XG5cbiAgICAgIGlmICghdGhpcy50cmFuc2FjdGlvbnMpIHtcbiAgICAgICAgdGhpcy5mbHVzaCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgX3Byb3RvLnNjaGVkdWxlID0gZnVuY3Rpb24gc2NoZWR1bGUoY2FsbGJhY2spIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgaWYgKHRoaXMudHJhbnNhY3Rpb25zKSB7XG4gICAgICB0aGlzLnF1ZXVlLnB1c2goY2FsbGJhY2spO1xuICAgIH0gZWxzZSB7XG4gICAgICBzY2hlZHVsZU1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzLm5vdGlmeUZuKGNhbGxiYWNrKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogQWxsIGNhbGxzIHRvIHRoZSB3cmFwcGVkIGZ1bmN0aW9uIHdpbGwgYmUgYmF0Y2hlZC5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uYmF0Y2hDYWxscyA9IGZ1bmN0aW9uIGJhdGNoQ2FsbHMoY2FsbGJhY2spIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgIH1cblxuICAgICAgX3RoaXMyLnNjaGVkdWxlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY2FsbGJhY2suYXBwbHkodm9pZCAwLCBhcmdzKTtcbiAgICAgIH0pO1xuICAgIH07XG4gIH07XG5cbiAgX3Byb3RvLmZsdXNoID0gZnVuY3Rpb24gZmx1c2goKSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICB2YXIgcXVldWUgPSB0aGlzLnF1ZXVlO1xuICAgIHRoaXMucXVldWUgPSBbXTtcblxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgIHNjaGVkdWxlTWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMzLmJhdGNoTm90aWZ5Rm4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHF1ZXVlLmZvckVhY2goZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBfdGhpczMubm90aWZ5Rm4oY2FsbGJhY2spO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgbWV0aG9kIHRvIHNldCBhIGN1c3RvbSBub3RpZnkgZnVuY3Rpb24uXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gZm9yIGV4YW1wbGUgd3JhcCBub3RpZmljYXRpb25zIHdpdGggYFJlYWN0LmFjdGAgd2hpbGUgcnVubmluZyB0ZXN0cy5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uc2V0Tm90aWZ5RnVuY3Rpb24gPSBmdW5jdGlvbiBzZXROb3RpZnlGdW5jdGlvbihmbikge1xuICAgIHRoaXMubm90aWZ5Rm4gPSBmbjtcbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgbWV0aG9kIHRvIHNldCBhIGN1c3RvbSBmdW5jdGlvbiB0byBiYXRjaCBub3RpZmljYXRpb25zIHRvZ2V0aGVyIGludG8gYSBzaW5nbGUgdGljay5cbiAgICogQnkgZGVmYXVsdCBSZWFjdCBRdWVyeSB3aWxsIHVzZSB0aGUgYmF0Y2ggZnVuY3Rpb24gcHJvdmlkZWQgYnkgUmVhY3RET00gb3IgUmVhY3QgTmF0aXZlLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5zZXRCYXRjaE5vdGlmeUZ1bmN0aW9uID0gZnVuY3Rpb24gc2V0QmF0Y2hOb3RpZnlGdW5jdGlvbihmbikge1xuICAgIHRoaXMuYmF0Y2hOb3RpZnlGbiA9IGZuO1xuICB9O1xuXG4gIHJldHVybiBOb3RpZnlNYW5hZ2VyO1xufSgpOyAvLyBTSU5HTEVUT05cblxuZXhwb3J0IHZhciBub3RpZnlNYW5hZ2VyID0gbmV3IE5vdGlmeU1hbmFnZXIoKTsiLCAiLy8gVFlQRVNcbi8vIEZVTkNUSU9OU1xudmFyIGxvZ2dlciA9IGNvbnNvbGU7XG5leHBvcnQgZnVuY3Rpb24gZ2V0TG9nZ2VyKCkge1xuICByZXR1cm4gbG9nZ2VyO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHNldExvZ2dlcihuZXdMb2dnZXIpIHtcbiAgbG9nZ2VyID0gbmV3TG9nZ2VyO1xufSIsICJpbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2VcIjtcbmltcG9ydCB7IGhhc2hRdWVyeUtleUJ5T3B0aW9ucywgbWF0Y2hRdWVyeSwgcGFyc2VGaWx0ZXJBcmdzIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBRdWVyeSB9IGZyb20gJy4vcXVlcnknO1xuaW1wb3J0IHsgbm90aWZ5TWFuYWdlciB9IGZyb20gJy4vbm90aWZ5TWFuYWdlcic7XG5pbXBvcnQgeyBTdWJzY3JpYmFibGUgfSBmcm9tICcuL3N1YnNjcmliYWJsZSc7XG4vLyBDTEFTU1xuZXhwb3J0IHZhciBRdWVyeUNhY2hlID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfU3Vic2NyaWJhYmxlKSB7XG4gIF9pbmhlcml0c0xvb3NlKFF1ZXJ5Q2FjaGUsIF9TdWJzY3JpYmFibGUpO1xuXG4gIGZ1bmN0aW9uIFF1ZXJ5Q2FjaGUoY29uZmlnKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX3RoaXMgPSBfU3Vic2NyaWJhYmxlLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICBfdGhpcy5jb25maWcgPSBjb25maWcgfHwge307XG4gICAgX3RoaXMucXVlcmllcyA9IFtdO1xuICAgIF90aGlzLnF1ZXJpZXNNYXAgPSB7fTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gUXVlcnlDYWNoZS5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmJ1aWxkID0gZnVuY3Rpb24gYnVpbGQoY2xpZW50LCBvcHRpb25zLCBzdGF0ZSkge1xuICAgIHZhciBfb3B0aW9ucyRxdWVyeUhhc2g7XG5cbiAgICB2YXIgcXVlcnlLZXkgPSBvcHRpb25zLnF1ZXJ5S2V5O1xuICAgIHZhciBxdWVyeUhhc2ggPSAoX29wdGlvbnMkcXVlcnlIYXNoID0gb3B0aW9ucy5xdWVyeUhhc2gpICE9IG51bGwgPyBfb3B0aW9ucyRxdWVyeUhhc2ggOiBoYXNoUXVlcnlLZXlCeU9wdGlvbnMocXVlcnlLZXksIG9wdGlvbnMpO1xuICAgIHZhciBxdWVyeSA9IHRoaXMuZ2V0KHF1ZXJ5SGFzaCk7XG5cbiAgICBpZiAoIXF1ZXJ5KSB7XG4gICAgICBxdWVyeSA9IG5ldyBRdWVyeSh7XG4gICAgICAgIGNhY2hlOiB0aGlzLFxuICAgICAgICBxdWVyeUtleTogcXVlcnlLZXksXG4gICAgICAgIHF1ZXJ5SGFzaDogcXVlcnlIYXNoLFxuICAgICAgICBvcHRpb25zOiBjbGllbnQuZGVmYXVsdFF1ZXJ5T3B0aW9ucyhvcHRpb25zKSxcbiAgICAgICAgc3RhdGU6IHN0YXRlLFxuICAgICAgICBkZWZhdWx0T3B0aW9uczogY2xpZW50LmdldFF1ZXJ5RGVmYXVsdHMocXVlcnlLZXkpLFxuICAgICAgICBtZXRhOiBvcHRpb25zLm1ldGFcbiAgICAgIH0pO1xuICAgICAgdGhpcy5hZGQocXVlcnkpO1xuICAgIH1cblxuICAgIHJldHVybiBxdWVyeTtcbiAgfTtcblxuICBfcHJvdG8uYWRkID0gZnVuY3Rpb24gYWRkKHF1ZXJ5KSB7XG4gICAgaWYgKCF0aGlzLnF1ZXJpZXNNYXBbcXVlcnkucXVlcnlIYXNoXSkge1xuICAgICAgdGhpcy5xdWVyaWVzTWFwW3F1ZXJ5LnF1ZXJ5SGFzaF0gPSBxdWVyeTtcbiAgICAgIHRoaXMucXVlcmllcy5wdXNoKHF1ZXJ5KTtcbiAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgdHlwZTogJ3F1ZXJ5QWRkZWQnLFxuICAgICAgICBxdWVyeTogcXVlcnlcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ucmVtb3ZlID0gZnVuY3Rpb24gcmVtb3ZlKHF1ZXJ5KSB7XG4gICAgdmFyIHF1ZXJ5SW5NYXAgPSB0aGlzLnF1ZXJpZXNNYXBbcXVlcnkucXVlcnlIYXNoXTtcblxuICAgIGlmIChxdWVyeUluTWFwKSB7XG4gICAgICBxdWVyeS5kZXN0cm95KCk7XG4gICAgICB0aGlzLnF1ZXJpZXMgPSB0aGlzLnF1ZXJpZXMuZmlsdGVyKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHJldHVybiB4ICE9PSBxdWVyeTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAocXVlcnlJbk1hcCA9PT0gcXVlcnkpIHtcbiAgICAgICAgZGVsZXRlIHRoaXMucXVlcmllc01hcFtxdWVyeS5xdWVyeUhhc2hdO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgIHR5cGU6ICdxdWVyeVJlbW92ZWQnLFxuICAgICAgICBxdWVyeTogcXVlcnlcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uY2xlYXIgPSBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMyLnF1ZXJpZXMuZm9yRWFjaChmdW5jdGlvbiAocXVlcnkpIHtcbiAgICAgICAgX3RoaXMyLnJlbW92ZShxdWVyeSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0ID0gZnVuY3Rpb24gZ2V0KHF1ZXJ5SGFzaCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXJpZXNNYXBbcXVlcnlIYXNoXTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0QWxsID0gZnVuY3Rpb24gZ2V0QWxsKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXJpZXM7XG4gIH07XG5cbiAgX3Byb3RvLmZpbmQgPSBmdW5jdGlvbiBmaW5kKGFyZzEsIGFyZzIpIHtcbiAgICB2YXIgX3BhcnNlRmlsdGVyQXJncyA9IHBhcnNlRmlsdGVyQXJncyhhcmcxLCBhcmcyKSxcbiAgICAgICAgZmlsdGVycyA9IF9wYXJzZUZpbHRlckFyZ3NbMF07XG5cbiAgICBpZiAodHlwZW9mIGZpbHRlcnMuZXhhY3QgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBmaWx0ZXJzLmV4YWN0ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5xdWVyaWVzLmZpbmQoZnVuY3Rpb24gKHF1ZXJ5KSB7XG4gICAgICByZXR1cm4gbWF0Y2hRdWVyeShmaWx0ZXJzLCBxdWVyeSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmZpbmRBbGwgPSBmdW5jdGlvbiBmaW5kQWxsKGFyZzEsIGFyZzIpIHtcbiAgICB2YXIgX3BhcnNlRmlsdGVyQXJnczIgPSBwYXJzZUZpbHRlckFyZ3MoYXJnMSwgYXJnMiksXG4gICAgICAgIGZpbHRlcnMgPSBfcGFyc2VGaWx0ZXJBcmdzMlswXTtcblxuICAgIHJldHVybiBPYmplY3Qua2V5cyhmaWx0ZXJzKS5sZW5ndGggPiAwID8gdGhpcy5xdWVyaWVzLmZpbHRlcihmdW5jdGlvbiAocXVlcnkpIHtcbiAgICAgIHJldHVybiBtYXRjaFF1ZXJ5KGZpbHRlcnMsIHF1ZXJ5KTtcbiAgICB9KSA6IHRoaXMucXVlcmllcztcbiAgfTtcblxuICBfcHJvdG8ubm90aWZ5ID0gZnVuY3Rpb24gbm90aWZ5KGV2ZW50KSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzMy5saXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbiAobGlzdGVuZXIpIHtcbiAgICAgICAgbGlzdGVuZXIoZXZlbnQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLm9uRm9jdXMgPSBmdW5jdGlvbiBvbkZvY3VzKCkge1xuICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczQucXVlcmllcy5mb3JFYWNoKGZ1bmN0aW9uIChxdWVyeSkge1xuICAgICAgICBxdWVyeS5vbkZvY3VzKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8ub25PbmxpbmUgPSBmdW5jdGlvbiBvbk9ubGluZSgpIHtcbiAgICB2YXIgX3RoaXM1ID0gdGhpcztcblxuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXM1LnF1ZXJpZXMuZm9yRWFjaChmdW5jdGlvbiAocXVlcnkpIHtcbiAgICAgICAgcXVlcnkub25PbmxpbmUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiBRdWVyeUNhY2hlO1xufShTdWJzY3JpYmFibGUpOyIsICJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCB7IGhhc2hRdWVyeUtleSwgbm9vcCwgcGFyc2VGaWx0ZXJBcmdzLCBwYXJzZVF1ZXJ5QXJncywgcGFydGlhbE1hdGNoS2V5LCBoYXNoUXVlcnlLZXlCeU9wdGlvbnMgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IFF1ZXJ5Q2FjaGUgfSBmcm9tICcuL3F1ZXJ5Q2FjaGUnO1xuaW1wb3J0IHsgTXV0YXRpb25DYWNoZSB9IGZyb20gJy4vbXV0YXRpb25DYWNoZSc7XG5pbXBvcnQgeyBmb2N1c01hbmFnZXIgfSBmcm9tICcuL2ZvY3VzTWFuYWdlcic7XG5pbXBvcnQgeyBvbmxpbmVNYW5hZ2VyIH0gZnJvbSAnLi9vbmxpbmVNYW5hZ2VyJztcbmltcG9ydCB7IG5vdGlmeU1hbmFnZXIgfSBmcm9tICcuL25vdGlmeU1hbmFnZXInO1xuaW1wb3J0IHsgaW5maW5pdGVRdWVyeUJlaGF2aW9yIH0gZnJvbSAnLi9pbmZpbml0ZVF1ZXJ5QmVoYXZpb3InO1xuLy8gQ0xBU1NcbmV4cG9ydCB2YXIgUXVlcnlDbGllbnQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBRdWVyeUNsaWVudChjb25maWcpIHtcbiAgICBpZiAoY29uZmlnID09PSB2b2lkIDApIHtcbiAgICAgIGNvbmZpZyA9IHt9O1xuICAgIH1cblxuICAgIHRoaXMucXVlcnlDYWNoZSA9IGNvbmZpZy5xdWVyeUNhY2hlIHx8IG5ldyBRdWVyeUNhY2hlKCk7XG4gICAgdGhpcy5tdXRhdGlvbkNhY2hlID0gY29uZmlnLm11dGF0aW9uQ2FjaGUgfHwgbmV3IE11dGF0aW9uQ2FjaGUoKTtcbiAgICB0aGlzLmRlZmF1bHRPcHRpb25zID0gY29uZmlnLmRlZmF1bHRPcHRpb25zIHx8IHt9O1xuICAgIHRoaXMucXVlcnlEZWZhdWx0cyA9IFtdO1xuICAgIHRoaXMubXV0YXRpb25EZWZhdWx0cyA9IFtdO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFF1ZXJ5Q2xpZW50LnByb3RvdHlwZTtcblxuICBfcHJvdG8ubW91bnQgPSBmdW5jdGlvbiBtb3VudCgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdGhpcy51bnN1YnNjcmliZUZvY3VzID0gZm9jdXNNYW5hZ2VyLnN1YnNjcmliZShmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoZm9jdXNNYW5hZ2VyLmlzRm9jdXNlZCgpICYmIG9ubGluZU1hbmFnZXIuaXNPbmxpbmUoKSkge1xuICAgICAgICBfdGhpcy5tdXRhdGlvbkNhY2hlLm9uRm9jdXMoKTtcblxuICAgICAgICBfdGhpcy5xdWVyeUNhY2hlLm9uRm9jdXMoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnVuc3Vic2NyaWJlT25saW5lID0gb25saW5lTWFuYWdlci5zdWJzY3JpYmUoZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKGZvY3VzTWFuYWdlci5pc0ZvY3VzZWQoKSAmJiBvbmxpbmVNYW5hZ2VyLmlzT25saW5lKCkpIHtcbiAgICAgICAgX3RoaXMubXV0YXRpb25DYWNoZS5vbk9ubGluZSgpO1xuXG4gICAgICAgIF90aGlzLnF1ZXJ5Q2FjaGUub25PbmxpbmUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8udW5tb3VudCA9IGZ1bmN0aW9uIHVubW91bnQoKSB7XG4gICAgdmFyIF90aGlzJHVuc3Vic2NyaWJlRm9jdSwgX3RoaXMkdW5zdWJzY3JpYmVPbmxpO1xuXG4gICAgKF90aGlzJHVuc3Vic2NyaWJlRm9jdSA9IHRoaXMudW5zdWJzY3JpYmVGb2N1cykgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJHVuc3Vic2NyaWJlRm9jdS5jYWxsKHRoaXMpO1xuICAgIChfdGhpcyR1bnN1YnNjcmliZU9ubGkgPSB0aGlzLnVuc3Vic2NyaWJlT25saW5lKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkdW5zdWJzY3JpYmVPbmxpLmNhbGwodGhpcyk7XG4gIH07XG5cbiAgX3Byb3RvLmlzRmV0Y2hpbmcgPSBmdW5jdGlvbiBpc0ZldGNoaW5nKGFyZzEsIGFyZzIpIHtcbiAgICB2YXIgX3BhcnNlRmlsdGVyQXJncyA9IHBhcnNlRmlsdGVyQXJncyhhcmcxLCBhcmcyKSxcbiAgICAgICAgZmlsdGVycyA9IF9wYXJzZUZpbHRlckFyZ3NbMF07XG5cbiAgICBmaWx0ZXJzLmZldGNoaW5nID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcy5xdWVyeUNhY2hlLmZpbmRBbGwoZmlsdGVycykubGVuZ3RoO1xuICB9O1xuXG4gIF9wcm90by5pc011dGF0aW5nID0gZnVuY3Rpb24gaXNNdXRhdGluZyhmaWx0ZXJzKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRpb25DYWNoZS5maW5kQWxsKF9leHRlbmRzKHt9LCBmaWx0ZXJzLCB7XG4gICAgICBmZXRjaGluZzogdHJ1ZVxuICAgIH0pKS5sZW5ndGg7XG4gIH07XG5cbiAgX3Byb3RvLmdldFF1ZXJ5RGF0YSA9IGZ1bmN0aW9uIGdldFF1ZXJ5RGF0YShxdWVyeUtleSwgZmlsdGVycykge1xuICAgIHZhciBfdGhpcyRxdWVyeUNhY2hlJGZpbmQ7XG5cbiAgICByZXR1cm4gKF90aGlzJHF1ZXJ5Q2FjaGUkZmluZCA9IHRoaXMucXVlcnlDYWNoZS5maW5kKHF1ZXJ5S2V5LCBmaWx0ZXJzKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJHF1ZXJ5Q2FjaGUkZmluZC5zdGF0ZS5kYXRhO1xuICB9O1xuXG4gIF9wcm90by5nZXRRdWVyaWVzRGF0YSA9IGZ1bmN0aW9uIGdldFF1ZXJpZXNEYXRhKHF1ZXJ5S2V5T3JGaWx0ZXJzKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UXVlcnlDYWNoZSgpLmZpbmRBbGwocXVlcnlLZXlPckZpbHRlcnMpLm1hcChmdW5jdGlvbiAoX3JlZikge1xuICAgICAgdmFyIHF1ZXJ5S2V5ID0gX3JlZi5xdWVyeUtleSxcbiAgICAgICAgICBzdGF0ZSA9IF9yZWYuc3RhdGU7XG4gICAgICB2YXIgZGF0YSA9IHN0YXRlLmRhdGE7XG4gICAgICByZXR1cm4gW3F1ZXJ5S2V5LCBkYXRhXTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uc2V0UXVlcnlEYXRhID0gZnVuY3Rpb24gc2V0UXVlcnlEYXRhKHF1ZXJ5S2V5LCB1cGRhdGVyLCBvcHRpb25zKSB7XG4gICAgdmFyIHBhcnNlZE9wdGlvbnMgPSBwYXJzZVF1ZXJ5QXJncyhxdWVyeUtleSk7XG4gICAgdmFyIGRlZmF1bHRlZE9wdGlvbnMgPSB0aGlzLmRlZmF1bHRRdWVyeU9wdGlvbnMocGFyc2VkT3B0aW9ucyk7XG4gICAgcmV0dXJuIHRoaXMucXVlcnlDYWNoZS5idWlsZCh0aGlzLCBkZWZhdWx0ZWRPcHRpb25zKS5zZXREYXRhKHVwZGF0ZXIsIG9wdGlvbnMpO1xuICB9O1xuXG4gIF9wcm90by5zZXRRdWVyaWVzRGF0YSA9IGZ1bmN0aW9uIHNldFF1ZXJpZXNEYXRhKHF1ZXJ5S2V5T3JGaWx0ZXJzLCB1cGRhdGVyLCBvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICByZXR1cm4gbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3RoaXMyLmdldFF1ZXJ5Q2FjaGUoKS5maW5kQWxsKHF1ZXJ5S2V5T3JGaWx0ZXJzKS5tYXAoZnVuY3Rpb24gKF9yZWYyKSB7XG4gICAgICAgIHZhciBxdWVyeUtleSA9IF9yZWYyLnF1ZXJ5S2V5O1xuICAgICAgICByZXR1cm4gW3F1ZXJ5S2V5LCBfdGhpczIuc2V0UXVlcnlEYXRhKHF1ZXJ5S2V5LCB1cGRhdGVyLCBvcHRpb25zKV07XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0UXVlcnlTdGF0ZSA9IGZ1bmN0aW9uIGdldFF1ZXJ5U3RhdGUocXVlcnlLZXksIGZpbHRlcnMpIHtcbiAgICB2YXIgX3RoaXMkcXVlcnlDYWNoZSRmaW5kMjtcblxuICAgIHJldHVybiAoX3RoaXMkcXVlcnlDYWNoZSRmaW5kMiA9IHRoaXMucXVlcnlDYWNoZS5maW5kKHF1ZXJ5S2V5LCBmaWx0ZXJzKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJHF1ZXJ5Q2FjaGUkZmluZDIuc3RhdGU7XG4gIH07XG5cbiAgX3Byb3RvLnJlbW92ZVF1ZXJpZXMgPSBmdW5jdGlvbiByZW1vdmVRdWVyaWVzKGFyZzEsIGFyZzIpIHtcbiAgICB2YXIgX3BhcnNlRmlsdGVyQXJnczIgPSBwYXJzZUZpbHRlckFyZ3MoYXJnMSwgYXJnMiksXG4gICAgICAgIGZpbHRlcnMgPSBfcGFyc2VGaWx0ZXJBcmdzMlswXTtcblxuICAgIHZhciBxdWVyeUNhY2hlID0gdGhpcy5xdWVyeUNhY2hlO1xuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgcXVlcnlDYWNoZS5maW5kQWxsKGZpbHRlcnMpLmZvckVhY2goZnVuY3Rpb24gKHF1ZXJ5KSB7XG4gICAgICAgIHF1ZXJ5Q2FjaGUucmVtb3ZlKHF1ZXJ5KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5yZXNldFF1ZXJpZXMgPSBmdW5jdGlvbiByZXNldFF1ZXJpZXMoYXJnMSwgYXJnMiwgYXJnMykge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgdmFyIF9wYXJzZUZpbHRlckFyZ3MzID0gcGFyc2VGaWx0ZXJBcmdzKGFyZzEsIGFyZzIsIGFyZzMpLFxuICAgICAgICBmaWx0ZXJzID0gX3BhcnNlRmlsdGVyQXJnczNbMF0sXG4gICAgICAgIG9wdGlvbnMgPSBfcGFyc2VGaWx0ZXJBcmdzM1sxXTtcblxuICAgIHZhciBxdWVyeUNhY2hlID0gdGhpcy5xdWVyeUNhY2hlO1xuXG4gICAgdmFyIHJlZmV0Y2hGaWx0ZXJzID0gX2V4dGVuZHMoe30sIGZpbHRlcnMsIHtcbiAgICAgIGFjdGl2ZTogdHJ1ZVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgcXVlcnlDYWNoZS5maW5kQWxsKGZpbHRlcnMpLmZvckVhY2goZnVuY3Rpb24gKHF1ZXJ5KSB7XG4gICAgICAgIHF1ZXJ5LnJlc2V0KCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBfdGhpczMucmVmZXRjaFF1ZXJpZXMocmVmZXRjaEZpbHRlcnMsIG9wdGlvbnMpO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5jYW5jZWxRdWVyaWVzID0gZnVuY3Rpb24gY2FuY2VsUXVlcmllcyhhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICB2YXIgX3BhcnNlRmlsdGVyQXJnczQgPSBwYXJzZUZpbHRlckFyZ3MoYXJnMSwgYXJnMiwgYXJnMyksXG4gICAgICAgIGZpbHRlcnMgPSBfcGFyc2VGaWx0ZXJBcmdzNFswXSxcbiAgICAgICAgX3BhcnNlRmlsdGVyQXJnczQkID0gX3BhcnNlRmlsdGVyQXJnczRbMV0sXG4gICAgICAgIGNhbmNlbE9wdGlvbnMgPSBfcGFyc2VGaWx0ZXJBcmdzNCQgPT09IHZvaWQgMCA/IHt9IDogX3BhcnNlRmlsdGVyQXJnczQkO1xuXG4gICAgaWYgKHR5cGVvZiBjYW5jZWxPcHRpb25zLnJldmVydCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNhbmNlbE9wdGlvbnMucmV2ZXJ0ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgcHJvbWlzZXMgPSBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpczQucXVlcnlDYWNoZS5maW5kQWxsKGZpbHRlcnMpLm1hcChmdW5jdGlvbiAocXVlcnkpIHtcbiAgICAgICAgcmV0dXJuIHF1ZXJ5LmNhbmNlbChjYW5jZWxPcHRpb25zKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbihub29wKS5jYXRjaChub29wKTtcbiAgfTtcblxuICBfcHJvdG8uaW52YWxpZGF0ZVF1ZXJpZXMgPSBmdW5jdGlvbiBpbnZhbGlkYXRlUXVlcmllcyhhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgdmFyIF9yZWYzLFxuICAgICAgICBfZmlsdGVycyRyZWZldGNoQWN0aXYsXG4gICAgICAgIF9maWx0ZXJzJHJlZmV0Y2hJbmFjdCxcbiAgICAgICAgX3RoaXM1ID0gdGhpcztcblxuICAgIHZhciBfcGFyc2VGaWx0ZXJBcmdzNSA9IHBhcnNlRmlsdGVyQXJncyhhcmcxLCBhcmcyLCBhcmczKSxcbiAgICAgICAgZmlsdGVycyA9IF9wYXJzZUZpbHRlckFyZ3M1WzBdLFxuICAgICAgICBvcHRpb25zID0gX3BhcnNlRmlsdGVyQXJnczVbMV07XG5cbiAgICB2YXIgcmVmZXRjaEZpbHRlcnMgPSBfZXh0ZW5kcyh7fSwgZmlsdGVycywge1xuICAgICAgLy8gaWYgZmlsdGVycy5yZWZldGNoQWN0aXZlIGlzIG5vdCBwcm92aWRlZCBhbmQgZmlsdGVycy5hY3RpdmUgaXMgZXhwbGljaXRseSBmYWxzZSxcbiAgICAgIC8vIGUuZy4gaW52YWxpZGF0ZVF1ZXJpZXMoeyBhY3RpdmU6IGZhbHNlIH0pLCB3ZSBkb24ndCB3YW50IHRvIHJlZmV0Y2ggYWN0aXZlIHF1ZXJpZXNcbiAgICAgIGFjdGl2ZTogKF9yZWYzID0gKF9maWx0ZXJzJHJlZmV0Y2hBY3RpdiA9IGZpbHRlcnMucmVmZXRjaEFjdGl2ZSkgIT0gbnVsbCA/IF9maWx0ZXJzJHJlZmV0Y2hBY3RpdiA6IGZpbHRlcnMuYWN0aXZlKSAhPSBudWxsID8gX3JlZjMgOiB0cnVlLFxuICAgICAgaW5hY3RpdmU6IChfZmlsdGVycyRyZWZldGNoSW5hY3QgPSBmaWx0ZXJzLnJlZmV0Y2hJbmFjdGl2ZSkgIT0gbnVsbCA/IF9maWx0ZXJzJHJlZmV0Y2hJbmFjdCA6IGZhbHNlXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczUucXVlcnlDYWNoZS5maW5kQWxsKGZpbHRlcnMpLmZvckVhY2goZnVuY3Rpb24gKHF1ZXJ5KSB7XG4gICAgICAgIHF1ZXJ5LmludmFsaWRhdGUoKTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gX3RoaXM1LnJlZmV0Y2hRdWVyaWVzKHJlZmV0Y2hGaWx0ZXJzLCBvcHRpb25zKTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8ucmVmZXRjaFF1ZXJpZXMgPSBmdW5jdGlvbiByZWZldGNoUXVlcmllcyhhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgdmFyIF90aGlzNiA9IHRoaXM7XG5cbiAgICB2YXIgX3BhcnNlRmlsdGVyQXJnczYgPSBwYXJzZUZpbHRlckFyZ3MoYXJnMSwgYXJnMiwgYXJnMyksXG4gICAgICAgIGZpbHRlcnMgPSBfcGFyc2VGaWx0ZXJBcmdzNlswXSxcbiAgICAgICAgb3B0aW9ucyA9IF9wYXJzZUZpbHRlckFyZ3M2WzFdO1xuXG4gICAgdmFyIHByb21pc2VzID0gbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3RoaXM2LnF1ZXJ5Q2FjaGUuZmluZEFsbChmaWx0ZXJzKS5tYXAoZnVuY3Rpb24gKHF1ZXJ5KSB7XG4gICAgICAgIHJldHVybiBxdWVyeS5mZXRjaCh1bmRlZmluZWQsIF9leHRlbmRzKHt9LCBvcHRpb25zLCB7XG4gICAgICAgICAgbWV0YToge1xuICAgICAgICAgICAgcmVmZXRjaFBhZ2U6IGZpbHRlcnMgPT0gbnVsbCA/IHZvaWQgMCA6IGZpbHRlcnMucmVmZXRjaFBhZ2VcbiAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHZhciBwcm9taXNlID0gUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4obm9vcCk7XG5cbiAgICBpZiAoIShvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLnRocm93T25FcnJvcikpIHtcbiAgICAgIHByb21pc2UgPSBwcm9taXNlLmNhdGNoKG5vb3ApO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9taXNlO1xuICB9O1xuXG4gIF9wcm90by5mZXRjaFF1ZXJ5ID0gZnVuY3Rpb24gZmV0Y2hRdWVyeShhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgdmFyIHBhcnNlZE9wdGlvbnMgPSBwYXJzZVF1ZXJ5QXJncyhhcmcxLCBhcmcyLCBhcmczKTtcbiAgICB2YXIgZGVmYXVsdGVkT3B0aW9ucyA9IHRoaXMuZGVmYXVsdFF1ZXJ5T3B0aW9ucyhwYXJzZWRPcHRpb25zKTsgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Rhbm5lcmxpbnNsZXkvcmVhY3QtcXVlcnkvaXNzdWVzLzY1MlxuXG4gICAgaWYgKHR5cGVvZiBkZWZhdWx0ZWRPcHRpb25zLnJldHJ5ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgZGVmYXVsdGVkT3B0aW9ucy5yZXRyeSA9IGZhbHNlO1xuICAgIH1cblxuICAgIHZhciBxdWVyeSA9IHRoaXMucXVlcnlDYWNoZS5idWlsZCh0aGlzLCBkZWZhdWx0ZWRPcHRpb25zKTtcbiAgICByZXR1cm4gcXVlcnkuaXNTdGFsZUJ5VGltZShkZWZhdWx0ZWRPcHRpb25zLnN0YWxlVGltZSkgPyBxdWVyeS5mZXRjaChkZWZhdWx0ZWRPcHRpb25zKSA6IFByb21pc2UucmVzb2x2ZShxdWVyeS5zdGF0ZS5kYXRhKTtcbiAgfTtcblxuICBfcHJvdG8ucHJlZmV0Y2hRdWVyeSA9IGZ1bmN0aW9uIHByZWZldGNoUXVlcnkoYXJnMSwgYXJnMiwgYXJnMykge1xuICAgIHJldHVybiB0aGlzLmZldGNoUXVlcnkoYXJnMSwgYXJnMiwgYXJnMykudGhlbihub29wKS5jYXRjaChub29wKTtcbiAgfTtcblxuICBfcHJvdG8uZmV0Y2hJbmZpbml0ZVF1ZXJ5ID0gZnVuY3Rpb24gZmV0Y2hJbmZpbml0ZVF1ZXJ5KGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgICB2YXIgcGFyc2VkT3B0aW9ucyA9IHBhcnNlUXVlcnlBcmdzKGFyZzEsIGFyZzIsIGFyZzMpO1xuICAgIHBhcnNlZE9wdGlvbnMuYmVoYXZpb3IgPSBpbmZpbml0ZVF1ZXJ5QmVoYXZpb3IoKTtcbiAgICByZXR1cm4gdGhpcy5mZXRjaFF1ZXJ5KHBhcnNlZE9wdGlvbnMpO1xuICB9O1xuXG4gIF9wcm90by5wcmVmZXRjaEluZmluaXRlUXVlcnkgPSBmdW5jdGlvbiBwcmVmZXRjaEluZmluaXRlUXVlcnkoYXJnMSwgYXJnMiwgYXJnMykge1xuICAgIHJldHVybiB0aGlzLmZldGNoSW5maW5pdGVRdWVyeShhcmcxLCBhcmcyLCBhcmczKS50aGVuKG5vb3ApLmNhdGNoKG5vb3ApO1xuICB9O1xuXG4gIF9wcm90by5jYW5jZWxNdXRhdGlvbnMgPSBmdW5jdGlvbiBjYW5jZWxNdXRhdGlvbnMoKSB7XG4gICAgdmFyIF90aGlzNyA9IHRoaXM7XG5cbiAgICB2YXIgcHJvbWlzZXMgPSBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpczcubXV0YXRpb25DYWNoZS5nZXRBbGwoKS5tYXAoZnVuY3Rpb24gKG11dGF0aW9uKSB7XG4gICAgICAgIHJldHVybiBtdXRhdGlvbi5jYW5jZWwoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbihub29wKS5jYXRjaChub29wKTtcbiAgfTtcblxuICBfcHJvdG8ucmVzdW1lUGF1c2VkTXV0YXRpb25zID0gZnVuY3Rpb24gcmVzdW1lUGF1c2VkTXV0YXRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmdldE11dGF0aW9uQ2FjaGUoKS5yZXN1bWVQYXVzZWRNdXRhdGlvbnMoKTtcbiAgfTtcblxuICBfcHJvdG8uZXhlY3V0ZU11dGF0aW9uID0gZnVuY3Rpb24gZXhlY3V0ZU11dGF0aW9uKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGlvbkNhY2hlLmJ1aWxkKHRoaXMsIG9wdGlvbnMpLmV4ZWN1dGUoKTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0UXVlcnlDYWNoZSA9IGZ1bmN0aW9uIGdldFF1ZXJ5Q2FjaGUoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcnlDYWNoZTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0TXV0YXRpb25DYWNoZSA9IGZ1bmN0aW9uIGdldE11dGF0aW9uQ2FjaGUoKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRpb25DYWNoZTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0RGVmYXVsdE9wdGlvbnMgPSBmdW5jdGlvbiBnZXREZWZhdWx0T3B0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5kZWZhdWx0T3B0aW9ucztcbiAgfTtcblxuICBfcHJvdG8uc2V0RGVmYXVsdE9wdGlvbnMgPSBmdW5jdGlvbiBzZXREZWZhdWx0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgdGhpcy5kZWZhdWx0T3B0aW9ucyA9IG9wdGlvbnM7XG4gIH07XG5cbiAgX3Byb3RvLnNldFF1ZXJ5RGVmYXVsdHMgPSBmdW5jdGlvbiBzZXRRdWVyeURlZmF1bHRzKHF1ZXJ5S2V5LCBvcHRpb25zKSB7XG4gICAgdmFyIHJlc3VsdCA9IHRoaXMucXVlcnlEZWZhdWx0cy5maW5kKGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4gaGFzaFF1ZXJ5S2V5KHF1ZXJ5S2V5KSA9PT0gaGFzaFF1ZXJ5S2V5KHgucXVlcnlLZXkpO1xuICAgIH0pO1xuXG4gICAgaWYgKHJlc3VsdCkge1xuICAgICAgcmVzdWx0LmRlZmF1bHRPcHRpb25zID0gb3B0aW9ucztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5xdWVyeURlZmF1bHRzLnB1c2goe1xuICAgICAgICBxdWVyeUtleTogcXVlcnlLZXksXG4gICAgICAgIGRlZmF1bHRPcHRpb25zOiBvcHRpb25zXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLmdldFF1ZXJ5RGVmYXVsdHMgPSBmdW5jdGlvbiBnZXRRdWVyeURlZmF1bHRzKHF1ZXJ5S2V5KSB7XG4gICAgdmFyIF90aGlzJHF1ZXJ5RGVmYXVsdHMkZjtcblxuICAgIHJldHVybiBxdWVyeUtleSA/IChfdGhpcyRxdWVyeURlZmF1bHRzJGYgPSB0aGlzLnF1ZXJ5RGVmYXVsdHMuZmluZChmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHBhcnRpYWxNYXRjaEtleShxdWVyeUtleSwgeC5xdWVyeUtleSk7XG4gICAgfSkpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRxdWVyeURlZmF1bHRzJGYuZGVmYXVsdE9wdGlvbnMgOiB1bmRlZmluZWQ7XG4gIH07XG5cbiAgX3Byb3RvLnNldE11dGF0aW9uRGVmYXVsdHMgPSBmdW5jdGlvbiBzZXRNdXRhdGlvbkRlZmF1bHRzKG11dGF0aW9uS2V5LCBvcHRpb25zKSB7XG4gICAgdmFyIHJlc3VsdCA9IHRoaXMubXV0YXRpb25EZWZhdWx0cy5maW5kKGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4gaGFzaFF1ZXJ5S2V5KG11dGF0aW9uS2V5KSA9PT0gaGFzaFF1ZXJ5S2V5KHgubXV0YXRpb25LZXkpO1xuICAgIH0pO1xuXG4gICAgaWYgKHJlc3VsdCkge1xuICAgICAgcmVzdWx0LmRlZmF1bHRPcHRpb25zID0gb3B0aW9ucztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tdXRhdGlvbkRlZmF1bHRzLnB1c2goe1xuICAgICAgICBtdXRhdGlvbktleTogbXV0YXRpb25LZXksXG4gICAgICAgIGRlZmF1bHRPcHRpb25zOiBvcHRpb25zXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLmdldE11dGF0aW9uRGVmYXVsdHMgPSBmdW5jdGlvbiBnZXRNdXRhdGlvbkRlZmF1bHRzKG11dGF0aW9uS2V5KSB7XG4gICAgdmFyIF90aGlzJG11dGF0aW9uRGVmYXVsdDtcblxuICAgIHJldHVybiBtdXRhdGlvbktleSA/IChfdGhpcyRtdXRhdGlvbkRlZmF1bHQgPSB0aGlzLm11dGF0aW9uRGVmYXVsdHMuZmluZChmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHBhcnRpYWxNYXRjaEtleShtdXRhdGlvbktleSwgeC5tdXRhdGlvbktleSk7XG4gICAgfSkpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRtdXRhdGlvbkRlZmF1bHQuZGVmYXVsdE9wdGlvbnMgOiB1bmRlZmluZWQ7XG4gIH07XG5cbiAgX3Byb3RvLmRlZmF1bHRRdWVyeU9wdGlvbnMgPSBmdW5jdGlvbiBkZWZhdWx0UXVlcnlPcHRpb25zKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5fZGVmYXVsdGVkKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdGVkT3B0aW9ucyA9IF9leHRlbmRzKHt9LCB0aGlzLmRlZmF1bHRPcHRpb25zLnF1ZXJpZXMsIHRoaXMuZ2V0UXVlcnlEZWZhdWx0cyhvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLnF1ZXJ5S2V5KSwgb3B0aW9ucywge1xuICAgICAgX2RlZmF1bHRlZDogdHJ1ZVxuICAgIH0pO1xuXG4gICAgaWYgKCFkZWZhdWx0ZWRPcHRpb25zLnF1ZXJ5SGFzaCAmJiBkZWZhdWx0ZWRPcHRpb25zLnF1ZXJ5S2V5KSB7XG4gICAgICBkZWZhdWx0ZWRPcHRpb25zLnF1ZXJ5SGFzaCA9IGhhc2hRdWVyeUtleUJ5T3B0aW9ucyhkZWZhdWx0ZWRPcHRpb25zLnF1ZXJ5S2V5LCBkZWZhdWx0ZWRPcHRpb25zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGVmYXVsdGVkT3B0aW9ucztcbiAgfTtcblxuICBfcHJvdG8uZGVmYXVsdFF1ZXJ5T2JzZXJ2ZXJPcHRpb25zID0gZnVuY3Rpb24gZGVmYXVsdFF1ZXJ5T2JzZXJ2ZXJPcHRpb25zKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5kZWZhdWx0UXVlcnlPcHRpb25zKG9wdGlvbnMpO1xuICB9O1xuXG4gIF9wcm90by5kZWZhdWx0TXV0YXRpb25PcHRpb25zID0gZnVuY3Rpb24gZGVmYXVsdE11dGF0aW9uT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMuX2RlZmF1bHRlZCkge1xuICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgfVxuXG4gICAgcmV0dXJuIF9leHRlbmRzKHt9LCB0aGlzLmRlZmF1bHRPcHRpb25zLm11dGF0aW9ucywgdGhpcy5nZXRNdXRhdGlvbkRlZmF1bHRzKG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMubXV0YXRpb25LZXkpLCBvcHRpb25zLCB7XG4gICAgICBfZGVmYXVsdGVkOiB0cnVlXG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmNsZWFyID0gZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgdGhpcy5xdWVyeUNhY2hlLmNsZWFyKCk7XG4gICAgdGhpcy5tdXRhdGlvbkNhY2hlLmNsZWFyKCk7XG4gIH07XG5cbiAgcmV0dXJuIFF1ZXJ5Q2xpZW50O1xufSgpOyIsICJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IG5vdGlmeU1hbmFnZXIgfSBmcm9tICcuL25vdGlmeU1hbmFnZXInO1xuaW1wb3J0IHsgUmV0cnllciB9IGZyb20gJy4vcmV0cnllcic7XG5pbXBvcnQgeyBub29wIH0gZnJvbSAnLi91dGlscyc7IC8vIFRZUEVTXG5cbi8vIENMQVNTXG5leHBvcnQgdmFyIE11dGF0aW9uID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gTXV0YXRpb24oY29uZmlnKSB7XG4gICAgdGhpcy5vcHRpb25zID0gX2V4dGVuZHMoe30sIGNvbmZpZy5kZWZhdWx0T3B0aW9ucywgY29uZmlnLm9wdGlvbnMpO1xuICAgIHRoaXMubXV0YXRpb25JZCA9IGNvbmZpZy5tdXRhdGlvbklkO1xuICAgIHRoaXMubXV0YXRpb25DYWNoZSA9IGNvbmZpZy5tdXRhdGlvbkNhY2hlO1xuICAgIHRoaXMub2JzZXJ2ZXJzID0gW107XG4gICAgdGhpcy5zdGF0ZSA9IGNvbmZpZy5zdGF0ZSB8fCBnZXREZWZhdWx0U3RhdGUoKTtcbiAgICB0aGlzLm1ldGEgPSBjb25maWcubWV0YTtcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBNdXRhdGlvbi5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLnNldFN0YXRlID0gZnVuY3Rpb24gc2V0U3RhdGUoc3RhdGUpIHtcbiAgICB0aGlzLmRpc3BhdGNoKHtcbiAgICAgIHR5cGU6ICdzZXRTdGF0ZScsXG4gICAgICBzdGF0ZTogc3RhdGVcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uYWRkT2JzZXJ2ZXIgPSBmdW5jdGlvbiBhZGRPYnNlcnZlcihvYnNlcnZlcikge1xuICAgIGlmICh0aGlzLm9ic2VydmVycy5pbmRleE9mKG9ic2VydmVyKSA9PT0gLTEpIHtcbiAgICAgIHRoaXMub2JzZXJ2ZXJzLnB1c2gob2JzZXJ2ZXIpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ucmVtb3ZlT2JzZXJ2ZXIgPSBmdW5jdGlvbiByZW1vdmVPYnNlcnZlcihvYnNlcnZlcikge1xuICAgIHRoaXMub2JzZXJ2ZXJzID0gdGhpcy5vYnNlcnZlcnMuZmlsdGVyKGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4geCAhPT0gb2JzZXJ2ZXI7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmNhbmNlbCA9IGZ1bmN0aW9uIGNhbmNlbCgpIHtcbiAgICBpZiAodGhpcy5yZXRyeWVyKSB7XG4gICAgICB0aGlzLnJldHJ5ZXIuY2FuY2VsKCk7XG4gICAgICByZXR1cm4gdGhpcy5yZXRyeWVyLnByb21pc2UudGhlbihub29wKS5jYXRjaChub29wKTtcbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH07XG5cbiAgX3Byb3RvLmNvbnRpbnVlID0gZnVuY3Rpb24gX2NvbnRpbnVlKCkge1xuICAgIGlmICh0aGlzLnJldHJ5ZXIpIHtcbiAgICAgIHRoaXMucmV0cnllci5jb250aW51ZSgpO1xuICAgICAgcmV0dXJuIHRoaXMucmV0cnllci5wcm9taXNlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUoKTtcbiAgfTtcblxuICBfcHJvdG8uZXhlY3V0ZSA9IGZ1bmN0aW9uIGV4ZWN1dGUoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHZhciBkYXRhO1xuICAgIHZhciByZXN0b3JlZCA9IHRoaXMuc3RhdGUuc3RhdHVzID09PSAnbG9hZGluZyc7XG4gICAgdmFyIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoKTtcblxuICAgIGlmICghcmVzdG9yZWQpIHtcbiAgICAgIHRoaXMuZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiAnbG9hZGluZycsXG4gICAgICAgIHZhcmlhYmxlczogdGhpcy5vcHRpb25zLnZhcmlhYmxlc1xuICAgICAgfSk7XG4gICAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gTm90aWZ5IGNhY2hlIGNhbGxiYWNrXG4gICAgICAgIF90aGlzLm11dGF0aW9uQ2FjaGUuY29uZmlnLm9uTXV0YXRlID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcy5tdXRhdGlvbkNhY2hlLmNvbmZpZy5vbk11dGF0ZShfdGhpcy5zdGF0ZS52YXJpYWJsZXMsIF90aGlzKTtcbiAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX3RoaXMub3B0aW9ucy5vbk11dGF0ZSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMub3B0aW9ucy5vbk11dGF0ZShfdGhpcy5zdGF0ZS52YXJpYWJsZXMpO1xuICAgICAgfSkudGhlbihmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgICBpZiAoY29udGV4dCAhPT0gX3RoaXMuc3RhdGUuY29udGV4dCkge1xuICAgICAgICAgIF90aGlzLmRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdsb2FkaW5nJyxcbiAgICAgICAgICAgIGNvbnRleHQ6IGNvbnRleHQsXG4gICAgICAgICAgICB2YXJpYWJsZXM6IF90aGlzLnN0YXRlLnZhcmlhYmxlc1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpcy5leGVjdXRlTXV0YXRpb24oKTtcbiAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgIGRhdGEgPSByZXN1bHQ7IC8vIE5vdGlmeSBjYWNoZSBjYWxsYmFja1xuXG4gICAgICBfdGhpcy5tdXRhdGlvbkNhY2hlLmNvbmZpZy5vblN1Y2Nlc3MgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzLm11dGF0aW9uQ2FjaGUuY29uZmlnLm9uU3VjY2VzcyhkYXRhLCBfdGhpcy5zdGF0ZS52YXJpYWJsZXMsIF90aGlzLnN0YXRlLmNvbnRleHQsIF90aGlzKTtcbiAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpcy5vcHRpb25zLm9uU3VjY2VzcyA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMub3B0aW9ucy5vblN1Y2Nlc3MoZGF0YSwgX3RoaXMuc3RhdGUudmFyaWFibGVzLCBfdGhpcy5zdGF0ZS5jb250ZXh0KTtcbiAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpcy5vcHRpb25zLm9uU2V0dGxlZCA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMub3B0aW9ucy5vblNldHRsZWQoZGF0YSwgbnVsbCwgX3RoaXMuc3RhdGUudmFyaWFibGVzLCBfdGhpcy5zdGF0ZS5jb250ZXh0KTtcbiAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLmRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogJ3N1Y2Nlc3MnLFxuICAgICAgICBkYXRhOiBkYXRhXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAvLyBOb3RpZnkgY2FjaGUgY2FsbGJhY2tcbiAgICAgIF90aGlzLm11dGF0aW9uQ2FjaGUuY29uZmlnLm9uRXJyb3IgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzLm11dGF0aW9uQ2FjaGUuY29uZmlnLm9uRXJyb3IoZXJyb3IsIF90aGlzLnN0YXRlLnZhcmlhYmxlcywgX3RoaXMuc3RhdGUuY29udGV4dCwgX3RoaXMpOyAvLyBMb2cgZXJyb3JcblxuICAgICAgZ2V0TG9nZ2VyKCkuZXJyb3IoZXJyb3IpO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX3RoaXMub3B0aW9ucy5vbkVycm9yID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcy5vcHRpb25zLm9uRXJyb3IoZXJyb3IsIF90aGlzLnN0YXRlLnZhcmlhYmxlcywgX3RoaXMuc3RhdGUuY29udGV4dCk7XG4gICAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLm9wdGlvbnMub25TZXR0bGVkID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcy5vcHRpb25zLm9uU2V0dGxlZCh1bmRlZmluZWQsIGVycm9yLCBfdGhpcy5zdGF0ZS52YXJpYWJsZXMsIF90aGlzLnN0YXRlLmNvbnRleHQpO1xuICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzLmRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgIGVycm9yOiBlcnJvclxuICAgICAgICB9KTtcblxuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5leGVjdXRlTXV0YXRpb24gPSBmdW5jdGlvbiBleGVjdXRlTXV0YXRpb24oKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXMsXG4gICAgICAgIF90aGlzJG9wdGlvbnMkcmV0cnk7XG5cbiAgICB0aGlzLnJldHJ5ZXIgPSBuZXcgUmV0cnllcih7XG4gICAgICBmbjogZnVuY3Rpb24gZm4oKSB7XG4gICAgICAgIGlmICghX3RoaXMyLm9wdGlvbnMubXV0YXRpb25Gbikge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCgnTm8gbXV0YXRpb25GbiBmb3VuZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIF90aGlzMi5vcHRpb25zLm11dGF0aW9uRm4oX3RoaXMyLnN0YXRlLnZhcmlhYmxlcyk7XG4gICAgICB9LFxuICAgICAgb25GYWlsOiBmdW5jdGlvbiBvbkZhaWwoKSB7XG4gICAgICAgIF90aGlzMi5kaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogJ2ZhaWxlZCdcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgb25QYXVzZTogZnVuY3Rpb24gb25QYXVzZSgpIHtcbiAgICAgICAgX3RoaXMyLmRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiAncGF1c2UnXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIG9uQ29udGludWU6IGZ1bmN0aW9uIG9uQ29udGludWUoKSB7XG4gICAgICAgIF90aGlzMi5kaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogJ2NvbnRpbnVlJ1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICByZXRyeTogKF90aGlzJG9wdGlvbnMkcmV0cnkgPSB0aGlzLm9wdGlvbnMucmV0cnkpICE9IG51bGwgPyBfdGhpcyRvcHRpb25zJHJldHJ5IDogMCxcbiAgICAgIHJldHJ5RGVsYXk6IHRoaXMub3B0aW9ucy5yZXRyeURlbGF5XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMucmV0cnllci5wcm9taXNlO1xuICB9O1xuXG4gIF9wcm90by5kaXNwYXRjaCA9IGZ1bmN0aW9uIGRpc3BhdGNoKGFjdGlvbikge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHJlZHVjZXIodGhpcy5zdGF0ZSwgYWN0aW9uKTtcbiAgICBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzMy5vYnNlcnZlcnMuZm9yRWFjaChmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgICAgb2JzZXJ2ZXIub25NdXRhdGlvblVwZGF0ZShhY3Rpb24pO1xuICAgICAgfSk7XG5cbiAgICAgIF90aGlzMy5tdXRhdGlvbkNhY2hlLm5vdGlmeShfdGhpczMpO1xuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiBNdXRhdGlvbjtcbn0oKTtcbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0U3RhdGUoKSB7XG4gIHJldHVybiB7XG4gICAgY29udGV4dDogdW5kZWZpbmVkLFxuICAgIGRhdGE6IHVuZGVmaW5lZCxcbiAgICBlcnJvcjogbnVsbCxcbiAgICBmYWlsdXJlQ291bnQ6IDAsXG4gICAgaXNQYXVzZWQ6IGZhbHNlLFxuICAgIHN0YXR1czogJ2lkbGUnLFxuICAgIHZhcmlhYmxlczogdW5kZWZpbmVkXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlZHVjZXIoc3RhdGUsIGFjdGlvbikge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgZmFpbHVyZUNvdW50OiBzdGF0ZS5mYWlsdXJlQ291bnQgKyAxXG4gICAgICB9KTtcblxuICAgIGNhc2UgJ3BhdXNlJzpcbiAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgaXNQYXVzZWQ6IHRydWVcbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnY29udGludWUnOlxuICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwge1xuICAgICAgICBpc1BhdXNlZDogZmFsc2VcbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnbG9hZGluZyc6XG4gICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCB7XG4gICAgICAgIGNvbnRleHQ6IGFjdGlvbi5jb250ZXh0LFxuICAgICAgICBkYXRhOiB1bmRlZmluZWQsXG4gICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICBpc1BhdXNlZDogZmFsc2UsXG4gICAgICAgIHN0YXR1czogJ2xvYWRpbmcnLFxuICAgICAgICB2YXJpYWJsZXM6IGFjdGlvbi52YXJpYWJsZXNcbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnc3VjY2Vzcyc6XG4gICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCB7XG4gICAgICAgIGRhdGE6IGFjdGlvbi5kYXRhLFxuICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgc3RhdHVzOiAnc3VjY2VzcycsXG4gICAgICAgIGlzUGF1c2VkOiBmYWxzZVxuICAgICAgfSk7XG5cbiAgICBjYXNlICdlcnJvcic6XG4gICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCB7XG4gICAgICAgIGRhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgZXJyb3I6IGFjdGlvbi5lcnJvcixcbiAgICAgICAgZmFpbHVyZUNvdW50OiBzdGF0ZS5mYWlsdXJlQ291bnQgKyAxLFxuICAgICAgICBpc1BhdXNlZDogZmFsc2UsXG4gICAgICAgIHN0YXR1czogJ2Vycm9yJ1xuICAgICAgfSk7XG5cbiAgICBjYXNlICdzZXRTdGF0ZSc6XG4gICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCBhY3Rpb24uc3RhdGUpO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgfVxufSIsICJpbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2VcIjtcbmltcG9ydCB7IG5vdGlmeU1hbmFnZXIgfSBmcm9tICcuL25vdGlmeU1hbmFnZXInO1xuaW1wb3J0IHsgTXV0YXRpb24gfSBmcm9tICcuL211dGF0aW9uJztcbmltcG9ydCB7IG1hdGNoTXV0YXRpb24sIG5vb3AgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IFN1YnNjcmliYWJsZSB9IGZyb20gJy4vc3Vic2NyaWJhYmxlJzsgLy8gVFlQRVNcblxuLy8gQ0xBU1NcbmV4cG9ydCB2YXIgTXV0YXRpb25DYWNoZSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1N1YnNjcmliYWJsZSkge1xuICBfaW5oZXJpdHNMb29zZShNdXRhdGlvbkNhY2hlLCBfU3Vic2NyaWJhYmxlKTtcblxuICBmdW5jdGlvbiBNdXRhdGlvbkNhY2hlKGNvbmZpZykge1xuICAgIHZhciBfdGhpcztcblxuICAgIF90aGlzID0gX1N1YnNjcmliYWJsZS5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgX3RoaXMuY29uZmlnID0gY29uZmlnIHx8IHt9O1xuICAgIF90aGlzLm11dGF0aW9ucyA9IFtdO1xuICAgIF90aGlzLm11dGF0aW9uSWQgPSAwO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBNdXRhdGlvbkNhY2hlLnByb3RvdHlwZTtcblxuICBfcHJvdG8uYnVpbGQgPSBmdW5jdGlvbiBidWlsZChjbGllbnQsIG9wdGlvbnMsIHN0YXRlKSB7XG4gICAgdmFyIG11dGF0aW9uID0gbmV3IE11dGF0aW9uKHtcbiAgICAgIG11dGF0aW9uQ2FjaGU6IHRoaXMsXG4gICAgICBtdXRhdGlvbklkOiArK3RoaXMubXV0YXRpb25JZCxcbiAgICAgIG9wdGlvbnM6IGNsaWVudC5kZWZhdWx0TXV0YXRpb25PcHRpb25zKG9wdGlvbnMpLFxuICAgICAgc3RhdGU6IHN0YXRlLFxuICAgICAgZGVmYXVsdE9wdGlvbnM6IG9wdGlvbnMubXV0YXRpb25LZXkgPyBjbGllbnQuZ2V0TXV0YXRpb25EZWZhdWx0cyhvcHRpb25zLm11dGF0aW9uS2V5KSA6IHVuZGVmaW5lZCxcbiAgICAgIG1ldGE6IG9wdGlvbnMubWV0YVxuICAgIH0pO1xuICAgIHRoaXMuYWRkKG11dGF0aW9uKTtcbiAgICByZXR1cm4gbXV0YXRpb247XG4gIH07XG5cbiAgX3Byb3RvLmFkZCA9IGZ1bmN0aW9uIGFkZChtdXRhdGlvbikge1xuICAgIHRoaXMubXV0YXRpb25zLnB1c2gobXV0YXRpb24pO1xuICAgIHRoaXMubm90aWZ5KG11dGF0aW9uKTtcbiAgfTtcblxuICBfcHJvdG8ucmVtb3ZlID0gZnVuY3Rpb24gcmVtb3ZlKG11dGF0aW9uKSB7XG4gICAgdGhpcy5tdXRhdGlvbnMgPSB0aGlzLm11dGF0aW9ucy5maWx0ZXIoZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiB4ICE9PSBtdXRhdGlvbjtcbiAgICB9KTtcbiAgICBtdXRhdGlvbi5jYW5jZWwoKTtcbiAgICB0aGlzLm5vdGlmeShtdXRhdGlvbik7XG4gIH07XG5cbiAgX3Byb3RvLmNsZWFyID0gZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzMi5tdXRhdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAobXV0YXRpb24pIHtcbiAgICAgICAgX3RoaXMyLnJlbW92ZShtdXRhdGlvbik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0QWxsID0gZnVuY3Rpb24gZ2V0QWxsKCkge1xuICAgIHJldHVybiB0aGlzLm11dGF0aW9ucztcbiAgfTtcblxuICBfcHJvdG8uZmluZCA9IGZ1bmN0aW9uIGZpbmQoZmlsdGVycykge1xuICAgIGlmICh0eXBlb2YgZmlsdGVycy5leGFjdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGZpbHRlcnMuZXhhY3QgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLm11dGF0aW9ucy5maW5kKGZ1bmN0aW9uIChtdXRhdGlvbikge1xuICAgICAgcmV0dXJuIG1hdGNoTXV0YXRpb24oZmlsdGVycywgbXV0YXRpb24pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5maW5kQWxsID0gZnVuY3Rpb24gZmluZEFsbChmaWx0ZXJzKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRpb25zLmZpbHRlcihmdW5jdGlvbiAobXV0YXRpb24pIHtcbiAgICAgIHJldHVybiBtYXRjaE11dGF0aW9uKGZpbHRlcnMsIG11dGF0aW9uKTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8ubm90aWZ5ID0gZnVuY3Rpb24gbm90aWZ5KG11dGF0aW9uKSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzMy5saXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbiAobGlzdGVuZXIpIHtcbiAgICAgICAgbGlzdGVuZXIobXV0YXRpb24pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLm9uRm9jdXMgPSBmdW5jdGlvbiBvbkZvY3VzKCkge1xuICAgIHRoaXMucmVzdW1lUGF1c2VkTXV0YXRpb25zKCk7XG4gIH07XG5cbiAgX3Byb3RvLm9uT25saW5lID0gZnVuY3Rpb24gb25PbmxpbmUoKSB7XG4gICAgdGhpcy5yZXN1bWVQYXVzZWRNdXRhdGlvbnMoKTtcbiAgfTtcblxuICBfcHJvdG8ucmVzdW1lUGF1c2VkTXV0YXRpb25zID0gZnVuY3Rpb24gcmVzdW1lUGF1c2VkTXV0YXRpb25zKCkge1xuICAgIHZhciBwYXVzZWRNdXRhdGlvbnMgPSB0aGlzLm11dGF0aW9ucy5maWx0ZXIoZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiB4LnN0YXRlLmlzUGF1c2VkO1xuICAgIH0pO1xuICAgIHJldHVybiBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBwYXVzZWRNdXRhdGlvbnMucmVkdWNlKGZ1bmN0aW9uIChwcm9taXNlLCBtdXRhdGlvbikge1xuICAgICAgICByZXR1cm4gcHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gbXV0YXRpb24uY29udGludWUoKS5jYXRjaChub29wKTtcbiAgICAgICAgfSk7XG4gICAgICB9LCBQcm9taXNlLnJlc29sdmUoKSk7XG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIE11dGF0aW9uQ2FjaGU7XG59KFN1YnNjcmliYWJsZSk7IiwgImltcG9ydCB7IGlzQ2FuY2VsYWJsZSB9IGZyb20gJy4vcmV0cnllcic7XG5pbXBvcnQgeyBnZXRBYm9ydENvbnRyb2xsZXIgfSBmcm9tICcuL3V0aWxzJztcbmV4cG9ydCBmdW5jdGlvbiBpbmZpbml0ZVF1ZXJ5QmVoYXZpb3IoKSB7XG4gIHJldHVybiB7XG4gICAgb25GZXRjaDogZnVuY3Rpb24gb25GZXRjaChjb250ZXh0KSB7XG4gICAgICBjb250ZXh0LmZldGNoRm4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfY29udGV4dCRmZXRjaE9wdGlvbnMsIF9jb250ZXh0JGZldGNoT3B0aW9uczIsIF9jb250ZXh0JGZldGNoT3B0aW9uczMsIF9jb250ZXh0JGZldGNoT3B0aW9uczQsIF9jb250ZXh0JHN0YXRlJGRhdGEsIF9jb250ZXh0JHN0YXRlJGRhdGEyO1xuXG4gICAgICAgIHZhciByZWZldGNoUGFnZSA9IChfY29udGV4dCRmZXRjaE9wdGlvbnMgPSBjb250ZXh0LmZldGNoT3B0aW9ucykgPT0gbnVsbCA/IHZvaWQgMCA6IChfY29udGV4dCRmZXRjaE9wdGlvbnMyID0gX2NvbnRleHQkZmV0Y2hPcHRpb25zLm1ldGEpID09IG51bGwgPyB2b2lkIDAgOiBfY29udGV4dCRmZXRjaE9wdGlvbnMyLnJlZmV0Y2hQYWdlO1xuICAgICAgICB2YXIgZmV0Y2hNb3JlID0gKF9jb250ZXh0JGZldGNoT3B0aW9uczMgPSBjb250ZXh0LmZldGNoT3B0aW9ucykgPT0gbnVsbCA/IHZvaWQgMCA6IChfY29udGV4dCRmZXRjaE9wdGlvbnM0ID0gX2NvbnRleHQkZmV0Y2hPcHRpb25zMy5tZXRhKSA9PSBudWxsID8gdm9pZCAwIDogX2NvbnRleHQkZmV0Y2hPcHRpb25zNC5mZXRjaE1vcmU7XG4gICAgICAgIHZhciBwYWdlUGFyYW0gPSBmZXRjaE1vcmUgPT0gbnVsbCA/IHZvaWQgMCA6IGZldGNoTW9yZS5wYWdlUGFyYW07XG4gICAgICAgIHZhciBpc0ZldGNoaW5nTmV4dFBhZ2UgPSAoZmV0Y2hNb3JlID09IG51bGwgPyB2b2lkIDAgOiBmZXRjaE1vcmUuZGlyZWN0aW9uKSA9PT0gJ2ZvcndhcmQnO1xuICAgICAgICB2YXIgaXNGZXRjaGluZ1ByZXZpb3VzUGFnZSA9IChmZXRjaE1vcmUgPT0gbnVsbCA/IHZvaWQgMCA6IGZldGNoTW9yZS5kaXJlY3Rpb24pID09PSAnYmFja3dhcmQnO1xuICAgICAgICB2YXIgb2xkUGFnZXMgPSAoKF9jb250ZXh0JHN0YXRlJGRhdGEgPSBjb250ZXh0LnN0YXRlLmRhdGEpID09IG51bGwgPyB2b2lkIDAgOiBfY29udGV4dCRzdGF0ZSRkYXRhLnBhZ2VzKSB8fCBbXTtcbiAgICAgICAgdmFyIG9sZFBhZ2VQYXJhbXMgPSAoKF9jb250ZXh0JHN0YXRlJGRhdGEyID0gY29udGV4dC5zdGF0ZS5kYXRhKSA9PSBudWxsID8gdm9pZCAwIDogX2NvbnRleHQkc3RhdGUkZGF0YTIucGFnZVBhcmFtcykgfHwgW107XG4gICAgICAgIHZhciBhYm9ydENvbnRyb2xsZXIgPSBnZXRBYm9ydENvbnRyb2xsZXIoKTtcbiAgICAgICAgdmFyIGFib3J0U2lnbmFsID0gYWJvcnRDb250cm9sbGVyID09IG51bGwgPyB2b2lkIDAgOiBhYm9ydENvbnRyb2xsZXIuc2lnbmFsO1xuICAgICAgICB2YXIgbmV3UGFnZVBhcmFtcyA9IG9sZFBhZ2VQYXJhbXM7XG4gICAgICAgIHZhciBjYW5jZWxsZWQgPSBmYWxzZTsgLy8gR2V0IHF1ZXJ5IGZ1bmN0aW9uXG5cbiAgICAgICAgdmFyIHF1ZXJ5Rm4gPSBjb250ZXh0Lm9wdGlvbnMucXVlcnlGbiB8fCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCdNaXNzaW5nIHF1ZXJ5Rm4nKTtcbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgYnVpbGROZXdQYWdlcyA9IGZ1bmN0aW9uIGJ1aWxkTmV3UGFnZXMocGFnZXMsIHBhcmFtLCBwYWdlLCBwcmV2aW91cykge1xuICAgICAgICAgIG5ld1BhZ2VQYXJhbXMgPSBwcmV2aW91cyA/IFtwYXJhbV0uY29uY2F0KG5ld1BhZ2VQYXJhbXMpIDogW10uY29uY2F0KG5ld1BhZ2VQYXJhbXMsIFtwYXJhbV0pO1xuICAgICAgICAgIHJldHVybiBwcmV2aW91cyA/IFtwYWdlXS5jb25jYXQocGFnZXMpIDogW10uY29uY2F0KHBhZ2VzLCBbcGFnZV0pO1xuICAgICAgICB9OyAvLyBDcmVhdGUgZnVuY3Rpb24gdG8gZmV0Y2ggYSBwYWdlXG5cblxuICAgICAgICB2YXIgZmV0Y2hQYWdlID0gZnVuY3Rpb24gZmV0Y2hQYWdlKHBhZ2VzLCBtYW51YWwsIHBhcmFtLCBwcmV2aW91cykge1xuICAgICAgICAgIGlmIChjYW5jZWxsZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCgnQ2FuY2VsbGVkJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHR5cGVvZiBwYXJhbSA9PT0gJ3VuZGVmaW5lZCcgJiYgIW1hbnVhbCAmJiBwYWdlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocGFnZXMpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBxdWVyeUZuQ29udGV4dCA9IHtcbiAgICAgICAgICAgIHF1ZXJ5S2V5OiBjb250ZXh0LnF1ZXJ5S2V5LFxuICAgICAgICAgICAgc2lnbmFsOiBhYm9ydFNpZ25hbCxcbiAgICAgICAgICAgIHBhZ2VQYXJhbTogcGFyYW0sXG4gICAgICAgICAgICBtZXRhOiBjb250ZXh0Lm1ldGFcbiAgICAgICAgICB9O1xuICAgICAgICAgIHZhciBxdWVyeUZuUmVzdWx0ID0gcXVlcnlGbihxdWVyeUZuQ29udGV4dCk7XG4gICAgICAgICAgdmFyIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUocXVlcnlGblJlc3VsdCkudGhlbihmdW5jdGlvbiAocGFnZSkge1xuICAgICAgICAgICAgcmV0dXJuIGJ1aWxkTmV3UGFnZXMocGFnZXMsIHBhcmFtLCBwYWdlLCBwcmV2aW91cyk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpZiAoaXNDYW5jZWxhYmxlKHF1ZXJ5Rm5SZXN1bHQpKSB7XG4gICAgICAgICAgICB2YXIgcHJvbWlzZUFzQW55ID0gcHJvbWlzZTtcbiAgICAgICAgICAgIHByb21pc2VBc0FueS5jYW5jZWwgPSBxdWVyeUZuUmVzdWx0LmNhbmNlbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgcHJvbWlzZTsgLy8gRmV0Y2ggZmlyc3QgcGFnZT9cblxuICAgICAgICBpZiAoIW9sZFBhZ2VzLmxlbmd0aCkge1xuICAgICAgICAgIHByb21pc2UgPSBmZXRjaFBhZ2UoW10pO1xuICAgICAgICB9IC8vIEZldGNoIG5leHQgcGFnZT9cbiAgICAgICAgZWxzZSBpZiAoaXNGZXRjaGluZ05leHRQYWdlKSB7XG4gICAgICAgICAgICB2YXIgbWFudWFsID0gdHlwZW9mIHBhZ2VQYXJhbSAhPT0gJ3VuZGVmaW5lZCc7XG4gICAgICAgICAgICB2YXIgcGFyYW0gPSBtYW51YWwgPyBwYWdlUGFyYW0gOiBnZXROZXh0UGFnZVBhcmFtKGNvbnRleHQub3B0aW9ucywgb2xkUGFnZXMpO1xuICAgICAgICAgICAgcHJvbWlzZSA9IGZldGNoUGFnZShvbGRQYWdlcywgbWFudWFsLCBwYXJhbSk7XG4gICAgICAgICAgfSAvLyBGZXRjaCBwcmV2aW91cyBwYWdlP1xuICAgICAgICAgIGVsc2UgaWYgKGlzRmV0Y2hpbmdQcmV2aW91c1BhZ2UpIHtcbiAgICAgICAgICAgICAgdmFyIF9tYW51YWwgPSB0eXBlb2YgcGFnZVBhcmFtICE9PSAndW5kZWZpbmVkJztcblxuICAgICAgICAgICAgICB2YXIgX3BhcmFtID0gX21hbnVhbCA/IHBhZ2VQYXJhbSA6IGdldFByZXZpb3VzUGFnZVBhcmFtKGNvbnRleHQub3B0aW9ucywgb2xkUGFnZXMpO1xuXG4gICAgICAgICAgICAgIHByb21pc2UgPSBmZXRjaFBhZ2Uob2xkUGFnZXMsIF9tYW51YWwsIF9wYXJhbSwgdHJ1ZSk7XG4gICAgICAgICAgICB9IC8vIFJlZmV0Y2ggcGFnZXNcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICBuZXdQYWdlUGFyYW1zID0gW107XG4gICAgICAgICAgICAgICAgICB2YXIgbWFudWFsID0gdHlwZW9mIGNvbnRleHQub3B0aW9ucy5nZXROZXh0UGFnZVBhcmFtID09PSAndW5kZWZpbmVkJztcbiAgICAgICAgICAgICAgICAgIHZhciBzaG91bGRGZXRjaEZpcnN0UGFnZSA9IHJlZmV0Y2hQYWdlICYmIG9sZFBhZ2VzWzBdID8gcmVmZXRjaFBhZ2Uob2xkUGFnZXNbMF0sIDAsIG9sZFBhZ2VzKSA6IHRydWU7IC8vIEZldGNoIGZpcnN0IHBhZ2VcblxuICAgICAgICAgICAgICAgICAgcHJvbWlzZSA9IHNob3VsZEZldGNoRmlyc3RQYWdlID8gZmV0Y2hQYWdlKFtdLCBtYW51YWwsIG9sZFBhZ2VQYXJhbXNbMF0pIDogUHJvbWlzZS5yZXNvbHZlKGJ1aWxkTmV3UGFnZXMoW10sIG9sZFBhZ2VQYXJhbXNbMF0sIG9sZFBhZ2VzWzBdKSk7IC8vIEZldGNoIHJlbWFpbmluZyBwYWdlc1xuXG4gICAgICAgICAgICAgICAgICB2YXIgX2xvb3AgPSBmdW5jdGlvbiBfbG9vcChpKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4oZnVuY3Rpb24gKHBhZ2VzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdmFyIHNob3VsZEZldGNoTmV4dFBhZ2UgPSByZWZldGNoUGFnZSAmJiBvbGRQYWdlc1tpXSA/IHJlZmV0Y2hQYWdlKG9sZFBhZ2VzW2ldLCBpLCBvbGRQYWdlcykgOiB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZEZldGNoTmV4dFBhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfcGFyYW0yID0gbWFudWFsID8gb2xkUGFnZVBhcmFtc1tpXSA6IGdldE5leHRQYWdlUGFyYW0oY29udGV4dC5vcHRpb25zLCBwYWdlcyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmZXRjaFBhZ2UocGFnZXMsIG1hbnVhbCwgX3BhcmFtMik7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShidWlsZE5ld1BhZ2VzKHBhZ2VzLCBvbGRQYWdlUGFyYW1zW2ldLCBvbGRQYWdlc1tpXSkpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgb2xkUGFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgX2xvb3AoaSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgIHZhciBmaW5hbFByb21pc2UgPSBwcm9taXNlLnRoZW4oZnVuY3Rpb24gKHBhZ2VzKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHBhZ2VzOiBwYWdlcyxcbiAgICAgICAgICAgIHBhZ2VQYXJhbXM6IG5ld1BhZ2VQYXJhbXNcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgdmFyIGZpbmFsUHJvbWlzZUFzQW55ID0gZmluYWxQcm9taXNlO1xuXG4gICAgICAgIGZpbmFsUHJvbWlzZUFzQW55LmNhbmNlbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjYW5jZWxsZWQgPSB0cnVlO1xuICAgICAgICAgIGFib3J0Q29udHJvbGxlciA9PSBudWxsID8gdm9pZCAwIDogYWJvcnRDb250cm9sbGVyLmFib3J0KCk7XG5cbiAgICAgICAgICBpZiAoaXNDYW5jZWxhYmxlKHByb21pc2UpKSB7XG4gICAgICAgICAgICBwcm9taXNlLmNhbmNlbCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gZmluYWxQcm9taXNlO1xuICAgICAgfTtcbiAgICB9XG4gIH07XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0TmV4dFBhZ2VQYXJhbShvcHRpb25zLCBwYWdlcykge1xuICByZXR1cm4gb3B0aW9ucy5nZXROZXh0UGFnZVBhcmFtID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLmdldE5leHRQYWdlUGFyYW0ocGFnZXNbcGFnZXMubGVuZ3RoIC0gMV0sIHBhZ2VzKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRQcmV2aW91c1BhZ2VQYXJhbShvcHRpb25zLCBwYWdlcykge1xuICByZXR1cm4gb3B0aW9ucy5nZXRQcmV2aW91c1BhZ2VQYXJhbSA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5nZXRQcmV2aW91c1BhZ2VQYXJhbShwYWdlc1swXSwgcGFnZXMpO1xufVxuLyoqXG4gKiBDaGVja3MgaWYgdGhlcmUgaXMgYSBuZXh0IHBhZ2UuXG4gKiBSZXR1cm5zIGB1bmRlZmluZWRgIGlmIGl0IGNhbm5vdCBiZSBkZXRlcm1pbmVkLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNOZXh0UGFnZShvcHRpb25zLCBwYWdlcykge1xuICBpZiAob3B0aW9ucy5nZXROZXh0UGFnZVBhcmFtICYmIEFycmF5LmlzQXJyYXkocGFnZXMpKSB7XG4gICAgdmFyIG5leHRQYWdlUGFyYW0gPSBnZXROZXh0UGFnZVBhcmFtKG9wdGlvbnMsIHBhZ2VzKTtcbiAgICByZXR1cm4gdHlwZW9mIG5leHRQYWdlUGFyYW0gIT09ICd1bmRlZmluZWQnICYmIG5leHRQYWdlUGFyYW0gIT09IG51bGwgJiYgbmV4dFBhZ2VQYXJhbSAhPT0gZmFsc2U7XG4gIH1cbn1cbi8qKlxuICogQ2hlY2tzIGlmIHRoZXJlIGlzIGEgcHJldmlvdXMgcGFnZS5cbiAqIFJldHVybnMgYHVuZGVmaW5lZGAgaWYgaXQgY2Fubm90IGJlIGRldGVybWluZWQuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1ByZXZpb3VzUGFnZShvcHRpb25zLCBwYWdlcykge1xuICBpZiAob3B0aW9ucy5nZXRQcmV2aW91c1BhZ2VQYXJhbSAmJiBBcnJheS5pc0FycmF5KHBhZ2VzKSkge1xuICAgIHZhciBwcmV2aW91c1BhZ2VQYXJhbSA9IGdldFByZXZpb3VzUGFnZVBhcmFtKG9wdGlvbnMsIHBhZ2VzKTtcbiAgICByZXR1cm4gdHlwZW9mIHByZXZpb3VzUGFnZVBhcmFtICE9PSAndW5kZWZpbmVkJyAmJiBwcmV2aW91c1BhZ2VQYXJhbSAhPT0gbnVsbCAmJiBwcmV2aW91c1BhZ2VQYXJhbSAhPT0gZmFsc2U7XG4gIH1cbn0iLCAiaW1wb3J0IFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSc7XG5leHBvcnQgdmFyIHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzID0gUmVhY3RET00udW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXM7IiwgImltcG9ydCB7IG5vdGlmeU1hbmFnZXIgfSBmcm9tICcuLi9jb3JlJztcbmltcG9ydCB7IHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzIH0gZnJvbSAnLi9yZWFjdEJhdGNoZWRVcGRhdGVzJztcbm5vdGlmeU1hbmFnZXIuc2V0QmF0Y2hOb3RpZnlGdW5jdGlvbih1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyk7IiwgImV4cG9ydCB2YXIgbG9nZ2VyID0gY29uc29sZTsiLCAiaW1wb3J0IHsgc2V0TG9nZ2VyIH0gZnJvbSAnLi4vY29yZSc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuL2xvZ2dlcic7XG5zZXRMb2dnZXIobG9nZ2VyKTsiLCAiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbnZhciBkZWZhdWx0Q29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KHVuZGVmaW5lZCk7XG52YXIgUXVlcnlDbGllbnRTaGFyaW5nQ29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KGZhbHNlKTsgLy8gaWYgY29udGV4dFNoYXJpbmcgaXMgb24sIHdlIHNoYXJlIHRoZSBmaXJzdCBhbmQgYXQgbGVhc3Qgb25lXG4vLyBpbnN0YW5jZSBvZiB0aGUgY29udGV4dCBhY3Jvc3MgdGhlIHdpbmRvd1xuLy8gdG8gZW5zdXJlIHRoYXQgaWYgUmVhY3QgUXVlcnkgaXMgdXNlZCBhY3Jvc3Ncbi8vIGRpZmZlcmVudCBidW5kbGVzIG9yIG1pY3JvZnJvbnRlbmRzIHRoZXkgd2lsbFxuLy8gYWxsIHVzZSB0aGUgc2FtZSAqKmluc3RhbmNlKiogb2YgY29udGV4dCwgcmVnYXJkbGVzc1xuLy8gb2YgbW9kdWxlIHNjb3BpbmcuXG5cbmZ1bmN0aW9uIGdldFF1ZXJ5Q2xpZW50Q29udGV4dChjb250ZXh0U2hhcmluZykge1xuICBpZiAoY29udGV4dFNoYXJpbmcgJiYgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBpZiAoIXdpbmRvdy5SZWFjdFF1ZXJ5Q2xpZW50Q29udGV4dCkge1xuICAgICAgd2luZG93LlJlYWN0UXVlcnlDbGllbnRDb250ZXh0ID0gZGVmYXVsdENvbnRleHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHdpbmRvdy5SZWFjdFF1ZXJ5Q2xpZW50Q29udGV4dDtcbiAgfVxuXG4gIHJldHVybiBkZWZhdWx0Q29udGV4dDtcbn1cblxuZXhwb3J0IHZhciB1c2VRdWVyeUNsaWVudCA9IGZ1bmN0aW9uIHVzZVF1ZXJ5Q2xpZW50KCkge1xuICB2YXIgcXVlcnlDbGllbnQgPSBSZWFjdC51c2VDb250ZXh0KGdldFF1ZXJ5Q2xpZW50Q29udGV4dChSZWFjdC51c2VDb250ZXh0KFF1ZXJ5Q2xpZW50U2hhcmluZ0NvbnRleHQpKSk7XG5cbiAgaWYgKCFxdWVyeUNsaWVudCkge1xuICAgIHRocm93IG5ldyBFcnJvcignTm8gUXVlcnlDbGllbnQgc2V0LCB1c2UgUXVlcnlDbGllbnRQcm92aWRlciB0byBzZXQgb25lJyk7XG4gIH1cblxuICByZXR1cm4gcXVlcnlDbGllbnQ7XG59O1xuZXhwb3J0IHZhciBRdWVyeUNsaWVudFByb3ZpZGVyID0gZnVuY3Rpb24gUXVlcnlDbGllbnRQcm92aWRlcihfcmVmKSB7XG4gIHZhciBjbGllbnQgPSBfcmVmLmNsaWVudCxcbiAgICAgIF9yZWYkY29udGV4dFNoYXJpbmcgPSBfcmVmLmNvbnRleHRTaGFyaW5nLFxuICAgICAgY29udGV4dFNoYXJpbmcgPSBfcmVmJGNvbnRleHRTaGFyaW5nID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkY29udGV4dFNoYXJpbmcsXG4gICAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW47XG4gIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgY2xpZW50Lm1vdW50KCk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNsaWVudC51bm1vdW50KCk7XG4gICAgfTtcbiAgfSwgW2NsaWVudF0pO1xuICB2YXIgQ29udGV4dCA9IGdldFF1ZXJ5Q2xpZW50Q29udGV4dChjb250ZXh0U2hhcmluZyk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChRdWVyeUNsaWVudFNoYXJpbmdDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IGNvbnRleHRTaGFyaW5nXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogY2xpZW50XG4gIH0sIGNoaWxkcmVuKSk7XG59OyIsICJcbmltcG9ydCB7IGNyZWF0ZUVudGl0eVRyZWUgfSBmcm9tIFwiLi9FbnRpdHlUcmVlV2lkZ2V0XCJcblxud2luZG93WydPTFNXaWRnZXRzJ10gPSB7XG4gICAgY3JlYXRlRW50aXR5VHJlZVxufVxuXG5leHBvcnQgeyBjcmVhdGVFbnRpdHlUcmVlIH1cbiIsICJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge0V1aUxvYWRpbmdTcGlubmVyLCBFdWlQcm92aWRlciwgRXVpVGV4dH0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHtRdWVyeUNsaWVudCwgUXVlcnlDbGllbnRQcm92aWRlciwgdXNlUXVlcnl9IGZyb20gXCJyZWFjdC1xdWVyeVwiO1xuaW1wb3J0IHtPbHNBcGl9IGZyb20gXCIuLi8uLi8uLi8uLi9hcGkvT2xzQXBpXCI7XG5pbXBvcnQge1RhYldpZGdldFByb3BzfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgeyBFbnRpdHkgfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWwvaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgVGFiUHJlc2VudGF0aW9uIH0gZnJvbSBcIi4vVGFiUHJlc2VudGF0aW9uXCI7XG5pbXBvcnQgeyBnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkgfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCB7RW50aXR5VHlwZU5hbWUsIGlzRW50aXR5fSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWwvTW9kZWxUeXBlQ2hlY2tcIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5cbmZ1bmN0aW9uIFRhYldpZGdldChwcm9wczogVGFiV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgeyBpcmksIGFwaSwgb250b2xvZ3lJZCwgZW50aXR5VHlwZSwgcGFyYW1ldGVyLCB1c2VMZWdhY3ksIC4uLnJlc3QgfSA9IHByb3BzO1xuICBjb25zdCBvbHNBcGkgPSBuZXcgT2xzQXBpKGFwaSk7XG5cbiAgY29uc3Qge1xuICAgIGRhdGEsXG4gICAgaXNMb2FkaW5nLFxuICAgIGlzU3VjY2VzcyxcbiAgICBpc0Vycm9yLFxuICAgIGVycm9yXG4gIH0gPSB1c2VRdWVyeTxFbnRpdHk+KFxuICAgIFtcInRhYmRhdGFcIiwgYXBpLCBwYXJhbWV0ZXIsIGVudGl0eVR5cGUsIGlyaSwgb250b2xvZ3lJZCwgdXNlTGVnYWN5XSxcbiAgICBhc3luYyAoKSA9PiB7XG4gICAgICByZXR1cm4gb2xzQXBpLmdldEVudGl0eU9iamVjdChpcmksIGVudGl0eVR5cGUsIG9udG9sb2d5SWQsIHBhcmFtZXRlciwgdXNlTGVnYWN5KTtcbiAgICB9XG4gICk7XG5cbiAgZnVuY3Rpb24gcmVuZGVyKGRhdGE6IEVudGl0eSkge1xuICAgIHJldHVybiAoXG4gICAgICA8VGFiUHJlc2VudGF0aW9uIHsuLi5yZXN0fVxuICAgICAgICBkYXRhPXtkYXRhfVxuICAgICAgICBpcmk9e2lyaX1cbiAgICAgICAgYXBpPXthcGl9XG4gICAgICAgIHVzZUxlZ2FjeT17dXNlTGVnYWN5fVxuICAgICAgICBlbnRpdHlUeXBlPXtkYXRhLmdldFR5cGUoKSBhcyBFbnRpdHlUeXBlTmFtZX1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHtpc0xvYWRpbmcgJiYgPEV1aUxvYWRpbmdTcGlubmVyIC8+fVxuICAgICAge2lzRXJyb3IgJiYgPEV1aVRleHQ+e2dldEVycm9yTWVzc2FnZVRvRGlzcGxheShlcnJvciwgXCJkZXNjcmlwdGlvblwiKX08L0V1aVRleHQ+fVxuICAgICAge2lzU3VjY2VzcyAmJiBkYXRhICYmXG4gICAgICAgIDw+XG4gICAgICAgICAge2lzRW50aXR5KGRhdGEpID8gcmVuZGVyKGRhdGEpIDogbnVsbH1cbiAgICAgICAgPC8+XG4gICAgICB9XG4gICAgPC8+XG4gICk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVRhYihwcm9wczogVGFiV2lkZ2V0UHJvcHMsIGNvbnRhaW5lcjogRWxlbWVudCwgY2FsbGJhY2s/OiAoKT0+dm9pZCkge1xuICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZFRhYldpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkVGFiV2lkZ2V0KHByb3BzOiBUYWJXaWRnZXRQcm9wcykge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gKFxuICAgICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCI+XG4gICAgICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgICAgIDxUYWJXaWRnZXRcbiAgICAgICAgICAgICAgaXJpPXtwcm9wcy5pcml9XG4gICAgICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgICAgICBvbnRvbG9neUlkPXtwcm9wcy5vbnRvbG9neUlkfVxuICAgICAgICAgICAgICBlbnRpdHlUeXBlPXtwcm9wcy5lbnRpdHlUeXBlfVxuICAgICAgICAgICAgICBwYXJhbWV0ZXI9e3Byb3BzLnBhcmFtZXRlcn1cbiAgICAgICAgICAgICAgdXNlTGVnYWN5PXtwcm9wcy51c2VMZWdhY3l9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICAgICAgPC9FdWlQcm92aWRlcj5cbiAgKVxufVxuXG5leHBvcnQgeyBUYWJXaWRnZXQsIGNyZWF0ZVRhYiB9O1xuIiwgImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEV1aUZsZXhJdGVtLCBFdWlUYWJiZWRDb250ZW50IH0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHsgSGllcmFyY2h5V2lkZ2V0IH0gZnJvbSBcIi4vSGllcmFyY2h5V2lkZ2V0XCI7XG5pbXBvcnQgeyBFbnRpdHkgfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWwvaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgaXNFbnRpdHksIGlzSW5kaXZpZHVhbCwgaXNQcm9wZXJ0eSB9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbC9Nb2RlbFR5cGVDaGVja1wiO1xuaW1wb3J0IHsgQWx0ZXJuYXRpdmVOYW1lVGFiUHJlc2VudGF0aW9uIH0gZnJvbSBcIi4vQWx0ZXJuYXRpdmVOYW1lVGFiV2lkZ2V0L0FsdGVybmF0aXZlTmFtZVRhYlByZXNlbnRhdGlvblwiO1xuaW1wb3J0IHsgQ3Jvc3NSZWZUYWJQcmVzZW50YXRpb24gfSBmcm9tIFwiLi9Dcm9zc1JlZldpZGdldC9Dcm9zc1JlZlRhYlByZXNlbnRhdGlvblwiO1xuaW1wb3J0IHsgSGllcmFyY2h5V2lkZ2V0RGVwcmVjYXRlZCB9IGZyb20gXCIuL0hpZXJhcmNoeVdpZGdldERlcHJlY2F0ZWRcIjtcbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbC9SZWlmaWVkXCI7XG5pbXBvcnQge1RhYlByZXNlbnRhdGlvblByb3BzfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5cbmZ1bmN0aW9uIFRhYlByZXNlbnRhdGlvbihwcm9wczogVGFiUHJlc2VudGF0aW9uUHJvcHMpIHtcbiAgZnVuY3Rpb24gcmVuZGVyKGRhdGE6IEVudGl0eSkge1xuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgPEV1aVRhYmJlZENvbnRlbnQgc2l6ZT1cInNcIiB0YWJzPXtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IChcbiAgICAgICAgICAgICAgICAgIDxBbHRlcm5hdGl2ZU5hbWVUYWJQcmVzZW50YXRpb24gc3lub255bXM9e2RhdGEuZ2V0U3lub255bXMoKS5tYXAoc3lub255bSA9PiBzeW5vbnltLnZhbHVlKX0gLz5cbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGlkOiBcInRhYjFcIixcbiAgICAgICAgICAgICAgICBuYW1lOiBcIkFsdGVybmF0aXZlIE5hbWVzXCJcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IChcbiAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIHtwcm9wcy51c2VMZWdhY3kgPT0gdW5kZWZpbmVkIHx8IHByb3BzLnVzZUxlZ2FjeVxuICAgICAgICAgICAgICAgICAgICAgID8gPEhpZXJhcmNoeVdpZGdldERlcHJlY2F0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIG9udG9sb2d5SWQ9e3Byb3BzLm9udG9sb2d5SWQgfHwgKChkYXRhICYmIGRhdGEuZ2V0T250b2xvZ3lJZCgpICE9PSB1bmRlZmluZWQpID8gZGF0YS5nZXRPbnRvbG9neUlkKCkgOiBcIlwiKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgICAgICAgICAgICAgICAgaXJpPXtwcm9wcy5pcml9XG5cbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgIDogPEhpZXJhcmNoeVdpZGdldFxuICAgICAgICAgICAgICAgICAgICAgICAgYXBpPXtwcm9wcy5hcGl9XG4gICAgICAgICAgICAgICAgICAgICAgICBpcmk9e3Byb3BzLmlyaX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9udG9sb2d5SWQ9e3Byb3BzLm9udG9sb2d5SWQgfHwgKChkYXRhICYmIGRhdGEuZ2V0T250b2xvZ3lJZCgpICE9PSB1bmRlZmluZWQpID8gZGF0YS5nZXRPbnRvbG9neUlkKCkgOiBcIlwiKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eVR5cGU9e3Byb3BzLmVudGl0eVR5cGV9XG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBpZDogXCJ0YWIyXCIsXG4gICAgICAgICAgICAgICAgbmFtZTogXCJIaWVyYXJjaHlcIlxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGVudDpcbiAgICAgICAgICAgICAgICAgIDxDcm9zc1JlZlRhYlByZXNlbnRhdGlvbiBjcm9zc3JlZnM9e1JlaWZpZWQuZnJvbUpzb24oZGF0YS5nZXRDcm9zc1JlZmVyZW5jZXMoKSkubWFwKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUudmFsdWU7XG4gICAgICAgICAgICAgICAgICB9KX0gLz4sXG4gICAgICAgICAgICAgICAgaWQ6IFwidGFiM1wiLFxuICAgICAgICAgICAgICAgIG5hbWU6IFwiQ3Jvc3MgcmVmZXJlbmNlc1wiXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9IC8+XG4gICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICA8Lz5cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAge2lzRW50aXR5KHByb3BzLmRhdGEpIHx8IGlzUHJvcGVydHkocHJvcHMuZGF0YSkgfHwgaXNJbmRpdmlkdWFsKHByb3BzLmRhdGEpID8gcmVuZGVyKHByb3BzLmRhdGEpIDogbnVsbH1cbiAgICA8Lz5cbiAgKTtcbn1cblxuZXhwb3J0IHsgVGFiUHJlc2VudGF0aW9uIH07XG4iLCAiaW1wb3J0IHtFdWlQYW5lbCwgRXVpUHJvdmlkZXIsIEV1aVRyZWVWaWV3fSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQgeyBOb2RlIH0gZnJvbSBcIkBlbGFzdGljL2V1aS9zcmMvY29tcG9uZW50cy90cmVlX3ZpZXcvdHJlZV92aWV3XCI7XG5pbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7UXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIsIHVzZVF1ZXJ5fSBmcm9tIFwicmVhY3QtcXVlcnlcIjtcbmltcG9ydCB7IGZldGNoX2RhdGEsIGdldF91cmxfcHJlZml4IH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL2FwaS9oaWVyYXJjaHlfd2lkZ2V0X2RlcHJlY2F0ZWRcIjtcbmltcG9ydCB7IE9sc0FwaSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9hcGkvT2xzQXBpXCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuLyoqXG4gKiBSZXNwb25zZSBmcm9tIE9MU1xuICovXG5pbnRlcmZhY2UgU2VtYW50aWNSZXNwb25zZSB7XG4gIGlkOiBzdHJpbmc7XG4gIHBhcmVudDogc3RyaW5nO1xuICBpcmk6IHN0cmluZztcbiAgdGV4dDogc3RyaW5nO1xuICAvKiBzdGF0ZToge1xuICAgIG9wZW5lZDogYm9vbGVhbjtcbiAgfTsgKi9cbiAgY2hpbGRyZW46IGJvb2xlYW47XG4gIC8qIGFfYXR0cjoge1xuICAgIGlyaTogc3RyaW5nO1xuICAgIG9udG9sb2d5X25hbWU6IHN0cmluZztcbiAgICB0aXRsZTogc3RyaW5nO1xuICAgIGNsYXNzOiBzdHJpbmc7XG4gIH07ICovXG4gIC8vIG9udG9sb2d5X25hbWU6IHN0cmluZztcbn1cbmNsYXNzIEhpZXJhcmNoeVRyZWUgaW1wbGVtZW50cyBOb2RlIHtcbiAgdXJsOiBzdHJpbmc7XG4gIGlyaTogc3RyaW5nO1xuICBsYWJlbDogUmVhY3QuUmVhY3ROb2RlO1xuICBpZDogc3RyaW5nO1xuICBpc0V4cGFuZGVkPzogYm9vbGVhbiA9IHRydWU7XG4gIGNoaWxkcmVuOiBBcnJheTxIaWVyYXJjaHlUcmVlPiA9IFtdO1xuICBpY29uOiBSZWFjdC5SZWFjdEVsZW1lbnQgPSAoPD4rPC8+KTtcbiAgaWNvbldoZW5FeHBhbmRlZDogUmVhY3QuUmVhY3RFbGVtZW50ID0gKDw+LTwvPik7XG4gIGNvbnN0cnVjdG9yKGxhYmVsOiBSZWFjdC5SZWFjdE5vZGUsIGlkOiBzdHJpbmcsIHVybDogc3RyaW5nLCBpcmk6IHN0cmluZykge1xuICAgIHRoaXMubGFiZWwgPSBsYWJlbDtcbiAgICB0aGlzLmlkID0gaWQ7XG4gICAgdGhpcy5pcmkgPSBpcmk7XG4gICAgdGhpcy51cmwgPSB1cmw7XG4gIH1cbiAgc2V0Y2hpbGQoY2hpbGQ6IEhpZXJhcmNoeVRyZWUpIHtcbiAgICB0aGlzLmNoaWxkcmVuLnB1c2goY2hpbGQpO1xuICAgIGlmICh0aGlzLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuaWNvbiA9IDw+KzwvPjtcbiAgICB9XG4gIH1cbiAgaXNfcm9vdCgpIHtcbiAgICByZXR1cm4gdGhpcy5pZCA9PT0gXCIjXCI7XG4gIH1cbiAgdG9fc3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMubGFiZWwgKyBcIlsgXCIgKyB0aGlzLmNoaWxkcmVuLm1hcCgodmFsdWUpID0+IHZhbHVlLnRvX3N0cmluZygpKSArIFwiIF1cIlxuICAgICk7XG4gIH1cbiAgY2FsbGJhY2soKSB7IC8vVE9ETyBoYW5kbGUgdmlhIE9sc0FwaS5nZXRUZXJtVHJlZSB3aXRoIGNoaWxkIHBhcmFtXG4gICAgaWYgKHRoaXMuaXNFeHBhbmRlZCkgcmV0dXJuIFwiXCI7XG4gICAgY29uc3QgYXBpX2RhdGFfb25jbGljayA9XG4gICAgICB0aGlzLnVybCArXG4gICAgICBlbmNvZGVVUklDb21wb25lbnQoZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMuaXJpKSkgK1xuICAgICAgXCIvanN0cmVlL2NoaWxkcmVuL1wiICtcbiAgICAgIHRoaXMuaWQ7XG4gICAgZmV0Y2hfZGF0YShhcGlfZGF0YV9vbmNsaWNrKS50aGVuKChyZXMpID0+IHtcbiAgICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgICAgIGNyZWF0ZV90cmVlKHRoaXMsIHJlcywgdGhpcy51cmwpO1xuICAgIH0pO1xuICAgIHJldHVybiBcIlwiO1xuICB9XG59XG5jb25zdCBjcmVhdGVfdHJlZSA9IChcbiAgdHJlZTogSGllcmFyY2h5VHJlZSxcbiAgYXJyOiBBcnJheTxTZW1hbnRpY1Jlc3BvbnNlPixcbiAgdXJsOiBzdHJpbmdcbikgPT4ge1xuICBhcnJcbiAgICAuZmlsdGVyKCh2YWx1ZSkgPT4gdmFsdWUucGFyZW50ID09PSB0cmVlLmlkKVxuICAgIC5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuICAgICAgdHJlZS5zZXRjaGlsZChcbiAgICAgICAgbmV3IEhpZXJhcmNoeVRyZWUodmFsdWUudGV4dCwgdmFsdWUuaWQsIHVybCwgdmFsdWUuaXJpKVxuICAgICAgKTtcbiAgICB9KTtcbiAgICB0cmVlLmNoaWxkcmVuLm1hcCgodmFsdWUpID0+IGNyZWF0ZV90cmVlKHZhbHVlLCBhcnIsIHVybCkpO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBIaWVyYXJjaHlXaWRnZXREZXByZWNhdGVkUHJvcHMge1xuICBpcmk/OiBzdHJpbmc7XG4gIG9udG9sb2d5SWQ6IHN0cmluZztcbiAgYXBpOiBzdHJpbmc7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFRyZWUob2xzQXBpOiBPbHNBcGksIG9udG9sb2d5SUQ6IHN0cmluZywgaXJpPzogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBvbHNBcGkuZ2V0VGVybVRyZWUoe29udG9sb2d5SWQ6IG9udG9sb2d5SUQsIHRlcm1Jcmk6IGlyaX0sIHt2aWV3TW9kZTogXCJBbGxcIiwgc2libGluZ3M6IGZhbHNlfSwgdW5kZWZpbmVkLCB1bmRlZmluZWQpXG4gICAgLmNhdGNoKChlcnJvcikgPT4gY29uc29sZS5sb2coZXJyb3IpKTtcbiAgaWYgKGlyaSkgcmV0dXJuIHJlc3BvbnNlXG4gIGVsc2UgeyAvL3Jvb3RzIGhhdmUgYmVlbiBxdWVyaWVkLCBhbmQgdGhlIHJlc3BvbnNlIG5lZWRzIHJlc3RydWN0dXJpbmcgdG8gYmVjb21lIFNlbWFudGljUmVzcG9uc2VcbiAgICByZXR1cm4gcmVzcG9uc2UuX2VtYmVkZGVkLnRlcm1zLm1hcChcbiAgICAgICh4OiB7IGlyaTogc3RyaW5nLCBsYWJlbDogc3RyaW5nLCBoYXNfY2hpbGRyZW46IGJvb2xlYW4gfSwgaTogbnVtYmVyKSA9PlxuICAgICAgICAoe2lkOiAoKytpKS50b1N0cmluZygpLCBwYXJlbnQ6ICcjJywgaXJpOiB4LmlyaSwgdGV4dDogeC5sYWJlbCwgY2hpbGRyZW46IHguaGFzX2NoaWxkcmVufSlcbiAgICApO1xuICB9XG59XG5cbmNvbnN0IEhpZXJhcmNoeVdpZGdldERlcHJlY2F0ZWQgPSAocHJvcHM6IEhpZXJhcmNoeVdpZGdldERlcHJlY2F0ZWRQcm9wcykgPT4ge1xuICBjb25zdCB7IGlyaSwgb250b2xvZ3lJZCwgYXBpIH0gPSBwcm9wcztcbiAgY29uc3QgW3RyZWVJdGVtcywgc2V0VHJlZUl0ZW1zXSA9IHVzZVN0YXRlPEhpZXJhcmNoeVRyZWVbXT4oKTtcbiAgY29uc3Qgb2xzQXBpID0gbmV3IE9sc0FwaShhcGkpO1xuICBjb25zdCBsaW5rVG9TZWxmID0gYXBpK1wib250b2xvZ2llcy9cIitvbnRvbG9neUlkK1wiL3Rlcm1zL1wiXG5cbiAgY29uc3QgZmV0Y2hDaGlsZHJlbiA9IGFzeW5jIChjaGlsZDogSGllcmFyY2h5VHJlZSkgPT4geyAvL2NvdWxkIGJlIGdpdmVuIHRvIEhpZXJhcmNoeVRyZWUgbm9kZXMgZm9yIG9uQ2xpY2sgY2FsbGJhY2tzXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBvbHNBcGkuZ2V0VGVybVRyZWUoe29udG9sb2d5SWQ6IG9udG9sb2d5SWQsIHRlcm1Jcmk6IGlyaX0sIHtjaGlsZDogY2hpbGQuaWR9LCB1bmRlZmluZWQsIHVuZGVmaW5lZClcbiAgICAgIC5jYXRjaCgoZXJyb3IpID0+IGNvbnNvbGUubG9nKGVycm9yKSk7XG4gICAgY2hpbGQuY2hpbGRyZW4gPSBbXTtcbiAgICBjcmVhdGVfdHJlZShjaGlsZCwgcmVzcG9uc2UsIGdldF91cmxfcHJlZml4KGxpbmtUb1NlbGYpKTtcbiAgfVxuXG4gIC8vaW5pdGlhbCB0cmVlIHF1ZXJ5XG4gIHVzZVF1ZXJ5PEFycmF5PFNlbWFudGljUmVzcG9uc2U+PihbYXBpLCBcImdldFRlcm1UcmVlXCIsIG9udG9sb2d5SWQsIGlyaV0sICgpID0+IHtcbiAgICByZXR1cm4gZ2V0VHJlZShvbHNBcGksIG9udG9sb2d5SWQsIGlyaSlcbiAgICAgIC50aGVuKChyZXMpID0+IHtcbiAgICAgICAgY29uc3Qgcm9vdCA9IG5ldyBIaWVyYXJjaHlUcmVlKFwiI1wiLCBcIiNcIiwgXCJcIiwgXCJcIik7XG4gICAgICAgIGlmIChyZXMpIGNyZWF0ZV90cmVlKHJvb3QsIHJlcywgZ2V0X3VybF9wcmVmaXgobGlua1RvU2VsZikpO1xuICAgICAgICBzZXRUcmVlSXRlbXMocm9vdC5jaGlsZHJlbik7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KTtcbiAgfSk7XG4gIHJldHVybiAoXG4gICAgPEV1aVBhbmVsPlxuICAgICAge3RyZWVJdGVtcyAmJiAoXG4gICAgICAgIDxFdWlUcmVlVmlld1xuICAgICAgICAgIGV4cGFuZEJ5RGVmYXVsdD17dHJ1ZX1cbiAgICAgICAgICBhcmlhLWxhYmVsPVwiSGllcmFyY2h5VGFiXCJcbiAgICAgICAgICBpdGVtcz17dHJlZUl0ZW1zfVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICA8L0V1aVBhbmVsPlxuICApO1xufTtcblxuZnVuY3Rpb24gY3JlYXRlSGllcmFyY2h5RGVwcmVjYXRlZChwcm9wczogSGllcmFyY2h5V2lkZ2V0RGVwcmVjYXRlZFByb3BzLCBjb250YWluZXI6IGFueSwgY2FsbGJhY2s/OiAoKT0+dm9pZCkge1xuICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZEhpZXJhcmNoeVdpZGdldERlcHJlY2F0ZWQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZEhpZXJhcmNoeVdpZGdldERlcHJlY2F0ZWQocHJvcHM6IEhpZXJhcmNoeVdpZGdldERlcHJlY2F0ZWRQcm9wcykge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gKFxuICAgICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCI+XG4gICAgICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgICAgIDxIaWVyYXJjaHlXaWRnZXREZXByZWNhdGVkXG4gICAgICAgICAgICAgIG9udG9sb2d5SWQ9e3Byb3BzLm9udG9sb2d5SWR9XG4gICAgICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgICAgICBpcmk9e3Byb3BzLmlyaX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgICA8L0V1aVByb3ZpZGVyPlxuICApXG59XG5cbmV4cG9ydCB7IGNyZWF0ZUhpZXJhcmNoeURlcHJlY2F0ZWQsIEhpZXJhcmNoeVdpZGdldERlcHJlY2F0ZWQgfTsiLCAiZXhwb3J0IGZ1bmN0aW9uIGdldENsYXNzTmFtZShjbGFzc2lkOiBzdHJpbmcpIHtcbiAgcmV0dXJuIGZldGNoKFxuICAgIFwiaHR0cHM6Ly9zZW1hbnRpY2xvb2t1cC56Ym1lZC5kZS9vbHMvYXBpL29udG9sb2dpZXMvXCIgK1xuICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KGNsYXNzaWQpLFxuICAgIHtcbiAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgQWNjZXB0OiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICB9LFxuICAgIH1cbiAgKVxuICAgIC50aGVuKChzKSA9PiBzLmpzb24oKSlcbiAgICAudGhlbigocykgPT4ge1xuICAgICAgcmV0dXJuIHsgY2xhc3NJRDogY2xhc3NpZCwgcHJlZkxhYmVsOiBzLmNvbmZpZz8udGl0bGUgfTtcbiAgICB9KVxuICAgIC5jYXRjaCgocykgPT4ge1xuICAgICAgcmV0dXJuIHsgY2xhc3NJRDogY2xhc3NpZCwgcHJlZkxhYmVsOiB1bmRlZmluZWQgfTtcbiAgICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZldGNoQ29uY2VwdEJ5SWQoaWQ6IHN0cmluZykge1xuICByZXR1cm4gZmV0Y2goXG4gICAgXCJodHRwczovL3NlbWFudGljbG9va3VwLnpibWVkLmRlL29scy9hcGkvdGVybXMvXCIgK1xuICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KGVuY29kZVVSSUNvbXBvbmVudChpZCkpLFxuICAgIHtcbiAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgQWNjZXB0OiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICB9LFxuICAgIH1cbiAgKVxuICAgIC50aGVuKChzKSA9PiBzLmpzb24oKSlcbiAgICAudGhlbigocykgPT4ge1xuICAgICAgcmV0dXJuIHsgY29uY2VwdElkOiBpZCwgY29uY2VwdDogcz8uX2VtYmVkZGVkPy50ZXJtc1swXSB9O1xuICAgIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXV0b2NvbXBsZXRlQ29uY2VwdChcbiAgdGV4dDogc3RyaW5nLFxuICBvbnRvbG9neTogc3RyaW5nIHwgdW5kZWZpbmVkXG4pIHtcbiAgbGV0IHF1ZXJ0ID0gXCJcIjtcbiAgaWYgKG9udG9sb2d5ICE9PSB1bmRlZmluZWQpIHtcbiAgICBxdWVydCA9IFwiJm9udG9sb2d5PVwiICsgb250b2xvZ3k7XG4gIH1cbiAgcmV0dXJuIGZldGNoKFxuICAgIFwiaHR0cHM6Ly9zZW1hbnRpY2xvb2t1cC56Ym1lZC5kZS9vbHMvYXBpL3NlbGVjdD9xdWVyeUZpZWxkcz1sYWJlbCxzeW5vbnltLHNob3J0X2Zvcm0sb2JvX2lkJmdyb3VwRmllbGQ9dHJ1ZSZ0eXBlPWNsYXNzJnE9XCIgK1xuICAgICAgdGV4dCArXG4gICAgICBxdWVydCxcbiAgICB7XG4gICAgICBtZXRob2Q6IFwiR0VUXCIsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgIEFjY2VwdDogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgfSxcbiAgICB9XG4gIClcbiAgICAudGhlbigocykgPT4gcy5qc29uKCkpXG4gICAgLnRoZW4oKHMpID0+IHtcbiAgICAgIHJldHVybiBzPy5yZXNwb25zZT8uZG9jcy5tYXAoKHA6IGFueSkgPT4gbWFwT2xzVG9JcmlBbmROYW1lVHVwbGUocCkpO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBtYXBPbHNUb0lyaUFuZE5hbWVUdXBsZShpdGVtOiBhbnkpIHtcbiAgcmV0dXJuIHsgaXJpOiBpdGVtPy5pcmksIGxhYmVsOiBpdGVtPy5sYWJlbCB9O1xufVxuXG5leHBvcnQgY29uc3QgZmV0Y2hfZGF0YSA9ICh1cmw6IHN0cmluZykgPT4ge1xuICByZXR1cm4gKFxuICAgIGZldGNoKHVybCwge1xuICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICBBY2NlcHQ6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgIH0sXG4gICAgfSlcbiAgICAgIC50aGVuKChyZXMpID0+IHJlcy5qc29uKCkpXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm9kZS9oYW5kbGUtY2FsbGJhY2stZXJyXG4gICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9KVxuICApO1xufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIHVybCBHZXQgdXJsIHdpdGggaHR0cCBvciBodHRwcyBwcm90b2NvbFxuICogQHJldHVybnMgY29uY2F0aW5hdGUgcyB0byBodHRwXG4gKi9cbmV4cG9ydCBjb25zdCBmaXhfdXJsID0gKHVybDogc3RyaW5nKSA9PiB7XG4gIGlmICh1cmwuc3Vic3RyKDAsIDUpID09PSBcImh0dHA6XCIpIHtcbiAgICByZXR1cm4gdXJsLnJlcGxhY2UoXCJodHRwXCIsIFwiaHR0cHNcIik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIHVybFxuICogQHJldHVybnMgcmV0dXJuIHVybCBmcm9tIGh0dHBzIHRvIC90ZXJtc1xuICovXG5leHBvcnQgY29uc3QgZ2V0X3VybF9wcmVmaXggPSAodXJsOiBzdHJpbmcgfCB1bmRlZmluZWQpID0+IHtcbiAgaWYgKHVybCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gXCJcIjtcbiAgcmV0dXJuIGZpeF91cmwodXJsLnN1YnN0cmluZygwLCB1cmwuc2VhcmNoKFwiL3Rlcm1zXCIpICsgNykpO1xufTsiLCAiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtRdWVyeUNsaWVudCwgUXVlcnlDbGllbnRQcm92aWRlciwgdXNlUXVlcnl9IGZyb20gXCJyZWFjdC1xdWVyeVwiO1xuaW1wb3J0IHtFdWlMb2FkaW5nU3Bpbm5lciwgRXVpUHJvdmlkZXIsIEV1aVRleHR9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7T2xzQXBpfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBpL09sc0FwaVwiO1xuaW1wb3J0IHsgZ2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5IH0gZnJvbSBcIi4uLy4uLy4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQge1RpdGxlV2lkZ2V0UHJvcHN9IGZyb20gXCIuLi8uLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCB7aXNPbnRvbG9neX0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVsL01vZGVsVHlwZUNoZWNrXCI7XG5pbXBvcnQgeyBUaGluZyB9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbC9pbnRlcmZhY2VzXCI7XG5pbXBvcnQgeyBUaXRsZVByZXNlbnRhdGlvbiB9IGZyb20gXCIuL1RpdGxlUHJlc2VudGF0aW9uXCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuXG5jb25zdCBOT19USVRMRSA9IFwiTm8gdGl0bGUgYXZhaWxhYmxlLlwiO1xuXG5mdW5jdGlvbiBUaXRsZVdpZGdldChwcm9wczogVGl0bGVXaWRnZXRQcm9wcykge1xuICAgIGNvbnN0IHtpcmksIG9udG9sb2d5SWQsIGFwaSwgdGl0bGVUZXh0LCB0aGluZ1R5cGUsIHBhcmFtZXRlciwgdXNlTGVnYWN5LCBkZWZhdWx0X3ZhbHVlfSA9IHByb3BzO1xuICAgIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICBjb25zdCB7XG4gICAgZGF0YSxcbiAgICBpc0xvYWRpbmcsXG4gICAgaXNTdWNjZXNzLFxuICAgIGlzRXJyb3IsXG4gICAgZXJyb3JcbiAgfSA9IHVzZVF1ZXJ5PFRoaW5nPihcbiAgICBbXCJtZXRhZGF0YVwiLCBhcGksIHBhcmFtZXRlciwgdGhpbmdUeXBlLCBpcmksIG9udG9sb2d5SWQsIHVzZUxlZ2FjeV0sXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgcmV0dXJuIG9sc0FwaS5nZXRUaGluZ09iamVjdChpcmksIHRoaW5nVHlwZSwgb250b2xvZ3lJZCwgcGFyYW1ldGVyLCB1c2VMZWdhY3kpO1xuICAgIH1cbiAgKTtcblxuXG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAge2lzTG9hZGluZyAmJiA8RXVpTG9hZGluZ1NwaW5uZXIgc2l6ZT1cInNcIiAvPn1cbiAgICAgIHtpc1N1Y2Nlc3MgJiYgZGF0YSAmJlxuICAgICAgICA8VGl0bGVQcmVzZW50YXRpb24gdGl0bGU9e3RpdGxlVGV4dCB8fCAoaXNPbnRvbG9neShkYXRhKSA/IGRhdGEuZ2V0TmFtZSgpIDogZGF0YS5nZXRMYWJlbCgpKSB8fCBkZWZhdWx0X3ZhbHVlIHx8IE5PX1RJVExFfSAvPlxuICAgICAgfVxuICAgICAge2lzRXJyb3IgJiYgPEV1aVRleHQ+e2dldEVycm9yTWVzc2FnZVRvRGlzcGxheShlcnJvciwgXCJ0aXRsZVwiKX08L0V1aVRleHQ+fVxuICAgIDwvPlxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVUaXRsZShwcm9wczogVGl0bGVXaWRnZXRQcm9wcywgY29udGFpbmVyOiBFbGVtZW50LCBjYWxsYmFjaz86ICgpPT52b2lkKSB7XG4gICAgUmVhY3RET00ucmVuZGVyKFdyYXBwZWRUaXRsZVdpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkVGl0bGVXaWRnZXQocHJvcHM6IFRpdGxlV2lkZ2V0UHJvcHMpIHtcbiAgICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICAgIHJldHVybiAoXG4gICAgICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgICAgICAgICAgPFRpdGxlV2lkZ2V0XG4gICAgICAgICAgICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgICAgICAgICAgICB0aGluZ1R5cGU9e3Byb3BzLnRoaW5nVHlwZX1cbiAgICAgICAgICAgICAgICAgICAgaXJpPXtwcm9wcy5pcml9XG4gICAgICAgICAgICAgICAgICAgIG9udG9sb2d5SWQ9e3Byb3BzLm9udG9sb2d5SWR9XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlVGV4dD17cHJvcHMudGl0bGVUZXh0fVxuICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXI9e3Byb3BzLnBhcmFtZXRlcn1cbiAgICAgICAgICAgICAgICAgICAgdXNlTGVnYWN5PXtwcm9wcy51c2VMZWdhY3l9XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRfdmFsdWU9e3Byb3BzLmRlZmF1bHRfdmFsdWV9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICAgICAgPC9FdWlQcm92aWRlcj5cbiAgICApXG59XG5cbmV4cG9ydCB7IFRpdGxlV2lkZ2V0LCBjcmVhdGVUaXRsZSB9O1xuIiwgImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEV1aVRleHQgfSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQge1RpdGxlUHJlc2VudGF0aW9uUHJvcHN9IGZyb20gXCIuLi8uLi8uLi8uLi9hcHAvdHlwZXNcIjtcblxuZnVuY3Rpb24gVGl0bGVQcmVzZW50YXRpb24ocHJvcHM6IFRpdGxlUHJlc2VudGF0aW9uUHJvcHMpIHtcblxuICByZXR1cm4gKFxuICAgIDxFdWlUZXh0Pntwcm9wcy50aXRsZVRleHQgfHwgcHJvcHMudGl0bGV9PC9FdWlUZXh0PlxuICApO1xufVxuXG5leHBvcnQgeyBUaXRsZVByZXNlbnRhdGlvbiB9O1xuIiwgImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7RXVpRmxleEdyb3VwLCBFdWlGbGV4SXRlbSwgRXVpTG9hZGluZ1NwaW5uZXIsIEV1aVByb3ZpZGVyLCBFdWlUZXh0fSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQgeyBJcmlXaWRnZXQgfSBmcm9tIFwiLi9JcmlXaWRnZXRcIjtcbmltcG9ydCB7UXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIsIHVzZVF1ZXJ5fSBmcm9tIFwicmVhY3QtcXVlcnlcIjtcbmltcG9ydCB7T2xzQXBpfSBmcm9tIFwiLi4vLi4vLi4vYXBpL09sc0FwaVwiO1xuaW1wb3J0IHtNZXRhZGF0YVdpZGdldFByb3BzfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgeyBFbnRpdHksIFRoaW5nIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVsL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7IEJyZWFkY3J1bWJQcmVzZW50YXRpb24gfSBmcm9tIFwiLi9CcmVhZGNydW1iV2lkZ2V0L0JyZWFkY3J1bWJQcmVzZW50YXRpb25cIjtcbmltcG9ydCB7IFRhYlByZXNlbnRhdGlvbiB9IGZyb20gXCIuL1RhYldpZGdldC9UYWJQcmVzZW50YXRpb25cIjtcbmltcG9ydCB7IERlc2NyaXB0aW9uUHJlc2VudGF0aW9uIH0gZnJvbSBcIi4vRGVzY3JpcHRpb25XaWRnZXQvRGVzY3JpcHRpb25QcmVzZW50YXRpb25cIjtcbmltcG9ydCB7IFRpdGxlUHJlc2VudGF0aW9uIH0gZnJvbSBcIi4vVGl0bGVXaWRnZXQvVGl0bGVQcmVzZW50YXRpb25cIjtcbmltcG9ydCB7IGdldEVycm9yTWVzc2FnZVRvRGlzcGxheSB9IGZyb20gXCIuLi8uLi8uLi9hcHAvdXRpbFwiO1xuaW1wb3J0IHsgaXNFbnRpdHkgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvTW9kZWxUeXBlQ2hlY2tcIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5cbmZ1bmN0aW9uIE1ldGFkYXRhV2lkZ2V0KHByb3BzOiBNZXRhZGF0YVdpZGdldFByb3BzKSB7XG4gIGNvbnN0IHsgaXJpLCBhcGksIG9udG9sb2d5SWQsIGVudGl0eVR5cGUsIHBhcmFtZXRlciwgdXNlTGVnYWN5IH0gPSBwcm9wcztcbiAgY29uc3Qgb2xzQXBpID0gbmV3IE9sc0FwaShhcGkpO1xuXG4gIGNvbnN0IHtcbiAgICBkYXRhLFxuICAgIGlzTG9hZGluZyxcbiAgICBpc1N1Y2Nlc3MsXG4gICAgaXNFcnJvcixcbiAgICBlcnJvclxuICB9ID0gdXNlUXVlcnk8VGhpbmc+KFxuICAgIFtcIm1ldGFkYXRhXCIsIGFwaSwgcGFyYW1ldGVyLCBlbnRpdHlUeXBlLCBpcmksIG9udG9sb2d5SWQsIHVzZUxlZ2FjeV0sXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgcmV0dXJuIG9sc0FwaS5nZXRFbnRpdHlPYmplY3QoaXJpLCBlbnRpdHlUeXBlLCBvbnRvbG9neUlkLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSk7XG4gICAgfVxuICApO1xuXG4gIGZ1bmN0aW9uIHJlbmRlcihkYXRhOiBFbnRpdHkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAgPEV1aUZsZXhHcm91cCBkaXJlY3Rpb249XCJjb2x1bW5cIiBzdHlsZT17eyBtYXhXaWR0aDogNjAwIH19PlxuICAgICAgICAgIDxFdWlGbGV4SXRlbSBncm93PXtmYWxzZX0+XG4gICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICA8QnJlYWRjcnVtYlByZXNlbnRhdGlvblxuICAgICAgICAgICAgICAgICAgICBpc0RlZmluaW5nT250b2xvZ3k9e2RhdGEuZ2V0SXNEZWZpbmluZ09udG9sb2d5KCl9XG4gICAgICAgICAgICAgICAgICAgIG9udG9sb2d5TmFtZT17ZGF0YS5nZXRPbnRvbG9neUlkKCl9XG4gICAgICAgICAgICAgICAgICAgIHNob3J0Rm9ybT17ZGF0YS5nZXRTaG9ydEZvcm0oKX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICAgPEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgPEV1aUZsZXhHcm91cCBkaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICAgICAgPEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgIDxFdWlGbGV4R3JvdXA+XG4gICAgICAgICAgICAgICAgICA8RXVpRmxleEl0ZW0gZ3Jvdz17ZmFsc2V9PlxuICAgICAgICAgICAgICAgICAgICA8SXJpV2lkZ2V0XG4gICAgICAgICAgICAgICAgICAgICAgaXJpPXtpcml9XG4gICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyPXtwYXJhbWV0ZXJ9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgIDwvRXVpRmxleEdyb3VwPlxuICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICA8RXVpRmxleEl0ZW0gZ3Jvdz17ZmFsc2V9PlxuICAgICAgICAgICAgICAgIDxUaXRsZVByZXNlbnRhdGlvblxuICAgICAgICAgICAgICAgICAgdGl0bGU9e2RhdGEuZ2V0TGFiZWwoKX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICAgICAgPC9FdWlGbGV4R3JvdXA+XG4gICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICA8RGVzY3JpcHRpb25QcmVzZW50YXRpb25cbiAgICAgICAgICAgICAgZGVzY3JpcHRpb249e2RhdGEuZ2V0RGVzY3JpcHRpb24oKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IG1heEhlaWdodDogXCI1MDBweFwiLCBvdmVyZmxvdzogXCJhdXRvXCIgfX0+XG4gICAgICAgICAgICAgIDxUYWJQcmVzZW50YXRpb25cbiAgICAgICAgICAgICAgICBkYXRhPXtkYXRhfVxuICAgICAgICAgICAgICAgIGlyaT17aXJpfVxuICAgICAgICAgICAgICAgIGVudGl0eVR5cGU9e3Byb3BzLmVudGl0eVR5cGV9XG4gICAgICAgICAgICAgICAgYXBpPXthcGl9XG4gICAgICAgICAgICAgICAgb250b2xvZ3lJZD17cHJvcHMub250b2xvZ3lJZCA/IHByb3BzLm9udG9sb2d5SWQgOiBkYXRhLmdldE9udG9sb2d5SWQoKX1cbiAgICAgICAgICAgICAgICB1c2VMZWdhY3k9e3VzZUxlZ2FjeX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgIDwvRXVpRmxleEdyb3VwPlxuICAgICAgPC8+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHtpc0xvYWRpbmcgJiYgPEV1aUxvYWRpbmdTcGlubmVyIC8+fVxuICAgICAge2lzRXJyb3IgJiYgPEV1aVRleHQ+e2dldEVycm9yTWVzc2FnZVRvRGlzcGxheShlcnJvciwgXCJtZXRhZGF0YVwiKX08L0V1aVRleHQ+fVxuICAgICAge2lzU3VjY2VzcyAmJiBkYXRhICYmXG4gICAgICAgIDw+XG4gICAgICAgICAge2lzRW50aXR5KGRhdGEpID8gcmVuZGVyKGRhdGEpIDogbnVsbH1cbiAgICAgICAgPC8+XG4gICAgICB9XG4gICAgPC8+XG4gICk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU1ldGFkYXRhKHByb3BzOiBNZXRhZGF0YVdpZGdldFByb3BzLCBjb250YWluZXI6IEVsZW1lbnQsIGNhbGxiYWNrPzogKCk9PnZvaWQpIHtcbiAgICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZE1ldGFkYXRhV2lkZ2V0KHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIFdyYXBwZWRNZXRhZGF0YVdpZGdldChwcm9wczogTWV0YWRhdGFXaWRnZXRQcm9wcykge1xuICAgIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCI+XG4gICAgICAgICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgICAgICAgICA8TWV0YWRhdGFXaWRnZXRcbiAgICAgICAgICAgICAgICAgICAgaXJpPXtwcm9wcy5pcml9XG4gICAgICAgICAgICAgICAgICAgIG9udG9sb2d5SWQ9e3Byb3BzLm9udG9sb2d5SWR9XG4gICAgICAgICAgICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgICAgICAgICAgICBlbnRpdHlUeXBlPXtwcm9wcy5lbnRpdHlUeXBlfVxuICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXI9e3Byb3BzLnBhcmFtZXRlcn1cbiAgICAgICAgICAgICAgICAgICAgdXNlTGVnYWN5PXtwcm9wcy51c2VMZWdhY3l9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICAgICAgPC9FdWlQcm92aWRlcj5cbiAgICApXG59XG5cbmV4cG9ydCB7IE1ldGFkYXRhV2lkZ2V0LCBjcmVhdGVNZXRhZGF0YSB9O1xuIiwgImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7RXVpQ2FyZCwgRXVpTG9hZGluZ1NwaW5uZXIsIEV1aVByb3ZpZGVyLCBFdWlUZXh0fSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQge1F1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyLCB1c2VRdWVyeX0gZnJvbSBcInJlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQgeyBPbHNBcGkgfSBmcm9tIFwiLi4vLi4vLi4vYXBpL09sc0FwaVwiO1xuaW1wb3J0IHtPbnRvbG9naWVzfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHtEYXRhQ29udGVudFdpZGdldFByb3BzfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuXG5mdW5jdGlvbiBEYXRhQ29udGVudFdpZGdldChwcm9wczogRGF0YUNvbnRlbnRXaWRnZXRQcm9wcykge1xuICBjb25zdCB7IGFwaSwgcGFyYW1ldGVyLCAuLi5yZXN0IH0gPSBwcm9wcztcbiAgY29uc3Qgb2xzQXBpID0gbmV3IE9sc0FwaShhcGkpO1xuXG4gIGNvbnN0IHtcbiAgICBkYXRhOiBvbnRvbG9naWVzRGF0YSxcbiAgICBpc0xvYWRpbmcsXG4gICAgaXNFcnJvcixcbiAgICBkYXRhVXBkYXRlZEF0XG4gIH0gPSB1c2VRdWVyeTxPbnRvbG9naWVzPihcbiAgICBbXCJvbnRvbG9naWVzRGF0YVwiLCBhcGksIHBhcmFtZXRlcl0sXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgcmV0dXJuIG9sc0FwaS5nZXRPbnRvbG9naWVzRGF0YShcbiAgICAgICAgcHJvcHMucGFyYW1ldGVyXG4gICAgICApO1xuICAgIH1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8RXVpQ2FyZFxuICAgICAgICB0aXRsZT1cIkRhdGEgQ29udGVudFwiXG4gICAgICAgIGRlc2NyaXB0aW9uPXtkYXRhVXBkYXRlZEF0ID8gYFVwZGF0ZWQgJHtuZXcgRGF0ZShkYXRhVXBkYXRlZEF0KS50b0xvY2FsZVN0cmluZygpfWAgOiBcIlwifVxuICAgICAgICBsYXlvdXQ9XCJob3Jpem9udGFsXCJcbiAgICAgID5cbiAgICAgICAgPEV1aVRleHQgey4uLnJlc3R9PlxuICAgICAgICAgIHsoaXNFcnJvcikgJiYgPEV1aVRleHQ+Tm8gZGF0YSBjb250ZW50IGF2YWlsYWJsZTwvRXVpVGV4dD59XG4gICAgICAgICAge2lzTG9hZGluZ1xuICAgICAgICAgICAgPyA8RXVpTG9hZGluZ1NwaW5uZXIgc2l6ZT1cInNcIiAvPlxuICAgICAgICAgICAgOlxuICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICB7KG9udG9sb2dpZXNEYXRhPy5nZXRUb3RhbE9udG9sb2dpZXMoKVxuICAgICAgICAgICAgICAgID8gPGxpPntvbnRvbG9naWVzRGF0YT8uZ2V0VG90YWxPbnRvbG9naWVzKCkudG9Mb2NhbGVTdHJpbmcoKX0gb250b2xvZ2llcyBhbmQgdGVybWlub2xvZ2llczwvbGk+XG4gICAgICAgICAgICAgICAgOiA8bGkgc3R5bGU9e3sgZm9udFN0eWxlOiBcIml0YWxpY1wiIH19Pm9udG9sb2d5IG51bWJlciBub3QgYXZhaWxhYmxlPC9saT4pfVxuICAgICAgICAgICAgICB7KG9udG9sb2dpZXNEYXRhPy5nZXROdW1DbGFzc2VzKClcbiAgICAgICAgICAgICAgICA/IDxsaT57b250b2xvZ2llc0RhdGE/LmdldE51bUNsYXNzZXMoKS50b0xvY2FsZVN0cmluZygpfSB0ZXJtczwvbGk+XG4gICAgICAgICAgICAgICAgOiA8bGkgc3R5bGU9e3sgZm9udFN0eWxlOiBcIml0YWxpY1wiIH19PnRlcm0gbnVtYmVyIG5vdCBhdmFpbGFibGU8L2xpPil9XG4gICAgICAgICAgICAgIHsob250b2xvZ2llc0RhdGE/LmdldE51bVByb3BlcnRpZXMoKVxuICAgICAgICAgICAgICAgID8gPGxpPntvbnRvbG9naWVzRGF0YT8uZ2V0TnVtUHJvcGVydGllcygpLnRvTG9jYWxlU3RyaW5nKCl9IHByb3BlcnRpZXM8L2xpPlxuICAgICAgICAgICAgICAgIDogPGxpIHN0eWxlPXt7IGZvbnRTdHlsZTogXCJpdGFsaWNcIiB9fT5wcm9wZXJ0eSBudW1iZXIgbm90IGF2YWlsYWJsZTwvbGk+KX1cbiAgICAgICAgICAgICAgeyhvbnRvbG9naWVzRGF0YT8uZ2V0TnVtSW5kaXZpZHVhbHMoKVxuICAgICAgICAgICAgICAgID8gPGxpPntvbnRvbG9naWVzRGF0YT8uZ2V0TnVtSW5kaXZpZHVhbHMoKS50b0xvY2FsZVN0cmluZygpfSBpbmRpdmlkdWFsczwvbGk+XG4gICAgICAgICAgICAgICAgOiA8bGkgc3R5bGU9e3sgZm9udFN0eWxlOiBcIml0YWxpY1wiIH19PmluZGl2aWR1YWwgbnVtYmVyIG5vdCBhdmFpbGFibGU8L2xpPil9XG4gICAgICAgICAgICAgIHsvKiA8bGk+VmVyc2lvbiB7Tk9UX0FWQUlMQUJMRX08L2xpPiAqL30gey8qIFRPRE8gaG93IHRvIGdldCBBUEkgdmVyc2lvbj8gKi99XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9FdWlUZXh0PlxuICAgICAgPC9FdWlDYXJkPlxuICAgIDwvPlxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVEYXRhQ29udGVudChwcm9wczogRGF0YUNvbnRlbnRXaWRnZXRQcm9wcywgY29udGFpbmVyOiBhbnksIGNhbGxiYWNrPzogKCk9PnZvaWQpIHtcbiAgUmVhY3RET00ucmVuZGVyKFdyYXBwZWREYXRhQ29udGVudFdpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkRGF0YUNvbnRlbnRXaWRnZXQocHJvcHM6IERhdGFDb250ZW50V2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTtcbiAgcmV0dXJuIChcbiAgICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgICA8RGF0YUNvbnRlbnRXaWRnZXRcbiAgICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgICAgcGFyYW1ldGVyPXtwcm9wcy5wYXJhbWV0ZXJ9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICAgICAgPC9FdWlQcm92aWRlcj5cbiAgKVxufVxuXG5leHBvcnQgeyBEYXRhQ29udGVudFdpZGdldCwgY3JlYXRlRGF0YUNvbnRlbnQgfTtcbiIsICJpbXBvcnQgUmVhY3QsIHtSZWFjdEVsZW1lbnR9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtFdWlDYXJkLCBFdWlGbGV4SXRlbSwgRXVpTG9hZGluZ1NwaW5uZXIsIEV1aVByb3ZpZGVyLCBFdWlTcGFjZXIsIEV1aVRleHR9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7T2xzQXBpfSBmcm9tIFwiLi4vLi4vLi4vYXBpL09sc0FwaVwiO1xuaW1wb3J0IHtRdWVyeUNsaWVudCwgUXVlcnlDbGllbnRQcm92aWRlciwgdXNlUXVlcnl9IGZyb20gJ3JlYWN0LXF1ZXJ5JztcbmltcG9ydCB7YXNBcnJheSwgY2FwaXRhbGl6ZSwgZGVDYW1lbENhc2UsIGRlVW5kZXJzY29yZSwgZ2V0RW50aXR5VHlwZU5hbWUsIHJhbmRvbVN0cmluZywgZ2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5fSBmcm9tIFwiLi4vLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYLCBnZXRFbnRpdHlMaW5rSlNYLCBnZXRSZWlmaWVkSlNYLCBnZXRUb29sdGlwfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvU3RydWN0dXJlUmVuZGVyaW5nXCI7XG5pbXBvcnQge1Byb3BlcnR5LCBUaGluZywgQ2xhc3MsIEVudGl0eSwgSW5kaXZpZHVhbH0gZnJvbSBcIi4uLy4uLy4uL21vZGVsL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7aXNDbGFzcywgaXNQcm9wZXJ0eSwgaXNJbmRpdmlkdWFsfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvTW9kZWxUeXBlQ2hlY2tcIjtcbmltcG9ydCB7RW50aXR5SW5mb1dpZGdldFByb3BzfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuXG5jb25zdCBERUZBVUxUX0hBU19USVRMRSA9IHRydWU7XG5cbmZ1bmN0aW9uIEVudGl0eUluZm9XaWRnZXQocHJvcHM6IEVudGl0eUluZm9XaWRnZXRQcm9wcykge1xuICAgIGNvbnN0IHsgYXBpLCBpcmksIG9udG9sb2d5SWQsIGhhc1RpdGxlID0gREVGQVVMVF9IQVNfVElUTEUsIGVudGl0eVR5cGUsIHBhcmFtZXRlciwgc2hvd0JhZGdlcyAsIHVzZUxlZ2FjeSAsIC4uLnJlc3QgfSA9IHByb3BzO1xuICAgIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICAgIGNvbnN0IHtcbiAgICAgICAgZGF0YTogZW50aXR5LFxuICAgICAgICBpc0xvYWRpbmc6IGlzTG9hZGluZ0VudGl0eSxcbiAgICAgICAgaXNTdWNjZXNzOiBpc1N1Y2Nlc3NFbnRpdHksXG4gICAgICAgIGlzRXJyb3I6IGlzRXJyb3JFbnRpdHksXG4gICAgICAgIGVycm9yOiBlcnJvckVudGl0eSxcbiAgICB9ID0gdXNlUXVlcnkoXG4gICAgICAgIFtcbiAgICAgICAgICAgIFwiZW50aXR5SW5mb1wiLFxuICAgICAgICAgICAgcHJvcHNcbiAgICAgICAgXSxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG9sc0FwaS5nZXRFbnRpdHlPYmplY3QoaXJpLCBlbnRpdHlUeXBlLCBvbnRvbG9neUlkLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSk7XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgZnVuY3Rpb24gZ2V0TGFiZWxTZWN0aW9uKGVudGl0eTogRW50aXR5KSA6IFJlYWN0RWxlbWVudCB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgIHtlbnRpdHkuZ2V0TGFiZWwoKSAmJlxuICAgICAgICAgICAgICAgICAgICA8PjxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxiPkxhYmVsOjwvYj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtlbnRpdHkuZ2V0TGFiZWwoKX1cbiAgICAgICAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT48RXVpU3BhY2VyLz48Lz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTeW5vbnltc1NlY3Rpb24oZW50aXR5OiBFbnRpdHkpIDogUmVhY3RFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAge2VudGl0eS5nZXRTeW5vbnltcygpLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgPD48RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Yj5TeW5vbnltczo8L2I+XG4gICAgICAgICAgICAgICAgICAgICAgICB7ZW50aXR5LmdldFN5bm9ueW1zKCkubGVuZ3RoID4gMSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsPntlbnRpdHkuZ2V0U3lub255bXMoKS5tYXAoKHN5bm9ueW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxsaSBrZXk9e3JhbmRvbVN0cmluZygpfSBpZD17c3lub255bS52YWx1ZX0+e2dldFJlaWZpZWRKU1goZW50aXR5LCBzeW5vbnltLCBhcGksIHNob3dCYWRnZXMpfTwvbGk+O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pfTwvdWw+IDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD57Z2V0UmVpZmllZEpTWChlbnRpdHksIGVudGl0eS5nZXRTeW5vbnltcygpWzBdLCBhcGksIHNob3dCYWRnZXMpfTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT48Lz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRIYXNLZXlTZWN0aW9uKHRlcm06IENsYXNzKSA6IFJlYWN0RWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGtleXMgPSB0ZXJtLmdldEhhc0tleSgpO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICB7a2V5cy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICAgIDw+PEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGI+SGFzIEtleTo8L2I+XG4gICAgICAgICAgICAgICAgICAgICAgICB7a2V5cy5sZW5ndGggPiAxID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWw+e2tleXMubWFwKChrZXlzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8bGkga2V5PXtyYW5kb21TdHJpbmcoKX0+e2dldENsYXNzRXhwcmVzc2lvbkpTWCh0ZXJtLCB0ZXJtLmdldExpbmtlZEVudGl0aWVzKCksIGtleXMsIGFwaSwgc2hvd0JhZGdlcyl9PC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KX08L3VsPiA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+e2dldENsYXNzRXhwcmVzc2lvbkpTWCh0ZXJtLCB0ZXJtLmdldExpbmtlZEVudGl0aWVzKCksIGtleXNbMF0sIGFwaSwgc2hvd0JhZGdlcyl9PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPjwvPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvPlxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFN1YnNldHNTZWN0aW9uKHRlcm06IENsYXNzKSA6IFJlYWN0RWxlbWVudCB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgIHsgdGVybS5nZXRTdWJzZXRzKCkubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgICAgICA8PjxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxiPkluIFN1YnNldHM6PC9iPlxuICAgICAgICAgICAgICAgICAgICAgICAge3Rlcm0uZ2V0U3Vic2V0cygpLmxlbmd0aCA+IDEgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bD57dGVybS5nZXRTdWJzZXRzKCkubWFwKChzdWJzZXQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxsaSBrZXk9e3JhbmRvbVN0cmluZygpfSBpZD17c3Vic2V0ICsgcmFuZG9tU3RyaW5nKCl9PntnZXRFbnRpdHlMaW5rSlNYKHRlcm0sIHRlcm0uZ2V0TGlua2VkRW50aXRpZXMoKSwgc3Vic2V0LCBhcGksIHNob3dCYWRnZXMpfTwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSl9PC91bD4gOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPntnZXRFbnRpdHlMaW5rSlNYKHRlcm0sIHRlcm0uZ2V0TGlua2VkRW50aXRpZXMoKSwgdGVybS5nZXRTdWJzZXRzKClbMF0sIGFwaSwgc2hvd0JhZGdlcyl9PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPjwvPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvPlxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFByb3BlcnR5Q2hhcmFjdGVyaXN0aWNzU2VjdGlvbihwcm9wZXJ0eTogUHJvcGVydHkpIDogUmVhY3RFbGVtZW50IHtcbiAgICAgICAgY29uc3QgY2hhcmFjdGVyaXN0aWNzID0gcHJvcGVydHkuZ2V0UmRmVHlwZXMoKS5tYXAodHlwZSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gKHtcbiAgICAgICAgICAgICAgICAnaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjRnVuY3Rpb25hbFByb3BlcnR5JzogJ0Z1bmN0aW9uYWwnLFxuICAgICAgICAgICAgICAgICdodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNJbnZlcnNlRnVuY3Rpb25hbFByb3BlcnR5JzogJ0ludmVyc2UgRnVuY3Rpb25hbCcsXG4gICAgICAgICAgICAgICAgJ2h0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI1RyYW5zaXRpdmVQcm9wZXJ0eSc6ICdUcmFuc2l0aXZlJyxcbiAgICAgICAgICAgICAgICAnaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjU3ltbWV0cmljUHJvcGVydHknOiAnU3ltbWV0cmljJyxcbiAgICAgICAgICAgICAgICAnaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjQXN5bW1ldHJpY1Byb3BlcnR5JzogJ0FzeW1tZXRyaWMnLFxuICAgICAgICAgICAgICAgICdodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNSZWZsZXhpdmVQcm9wZXJ0eSc6ICdSZWZsZXhpdmUnLFxuICAgICAgICAgICAgICAgICdodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNJcnJlZmxleGl2ZVByb3BlcnR5JzogJ0lycmVmbGV4aXZlJyxcbiAgICAgICAgICAgIH0pW3R5cGVdO1xuICAgICAgICB9KS5maWx0ZXIoKHR5cGUpID0+ICEhdHlwZSk7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAge2NoYXJhY3RlcmlzdGljcy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICAgIDw+PEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGI+Q2hhcmFjdGVyaXN0aWNzOjwvYj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtjaGFyYWN0ZXJpc3RpY3MubGVuZ3RoID4gMSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsPntjaGFyYWN0ZXJpc3RpY3MubWFwKChjaGFyYWN0ZXJpc3RpYykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPGxpIGtleT17cmFuZG9tU3RyaW5nKCl9PntjaGFyYWN0ZXJpc3RpY308L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zb3J0KCl9PC91bD4gOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPntjaGFyYWN0ZXJpc3RpY3NbMF19PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPjwvPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvPlxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldERvbWFpblNlY3Rpb24ocHJvcGVydHk6IFByb3BlcnR5KSA6IFJlYWN0RWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGRvbWFpbnMgPSBwcm9wZXJ0eS5nZXREb21haW4oKTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAge2RvbWFpbnMubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgICAgICA8PjxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxiPkRvbWFpbjo8L2I+XG4gICAgICAgICAgICAgICAgICAgICAgICB7ZG9tYWlucy5sZW5ndGggPiAxID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWw+e2RvbWFpbnMubWFwKChkb21haW5zKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8bGkga2V5PXtyYW5kb21TdHJpbmcoKX0+e2dldENsYXNzRXhwcmVzc2lvbkpTWChwcm9wZXJ0eSwgcHJvcGVydHkuZ2V0TGlua2VkRW50aXRpZXMoKSwgZG9tYWlucywgYXBpLCBzaG93QmFkZ2VzKX08L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pfTwvdWw+IDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD57Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKHByb3BlcnR5LCBwcm9wZXJ0eS5nZXRMaW5rZWRFbnRpdGllcygpLCBkb21haW5zWzBdLCBhcGksIHNob3dCYWRnZXMpfTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT48Lz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRSYW5nZVNlY3Rpb24ocHJvcGVydHk6IFByb3BlcnR5KSA6IFJlYWN0RWxlbWVudCB7XG4gICAgICAgIGNvbnN0IHJhbmdlcyA9IHByb3BlcnR5LmdldFJhbmdlKCk7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgIHtyYW5nZXMubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Yj5SYW5nZTo8L2I+XG4gICAgICAgICAgICAgICAgICAgICAgICB7cmFuZ2VzLmxlbmd0aCA+IDEgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bD57cmFuZ2VzLm1hcCgocmFuZ2VzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8bGkga2V5PXtyYW5kb21TdHJpbmcoKX0+e2dldENsYXNzRXhwcmVzc2lvbkpTWChwcm9wZXJ0eSwgcHJvcGVydHkuZ2V0TGlua2VkRW50aXRpZXMoKSwgcmFuZ2VzLCBhcGksIHNob3dCYWRnZXMpfTwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSl9PC91bD4gOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPntnZXRDbGFzc0V4cHJlc3Npb25KU1gocHJvcGVydHksIHByb3BlcnR5LmdldExpbmtlZEVudGl0aWVzKCksIHJhbmdlc1swXSwgYXBpLCBzaG93QmFkZ2VzKX08L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC8+XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0SW5kaXZpZHVhbFByb3BlcnR5QXNzZXJ0aW9uc1NlY3Rpb24oaW5kaXZpZHVhbDogSW5kaXZpZHVhbCkgOiBSZWFjdEVsZW1lbnQge1xuICAgICAgICBjb25zdCBwcm9wZXJ0eUlyaXMgPSBPYmplY3Qua2V5cyhpbmRpdmlkdWFsLnByb3BlcnRpZXMpO1xuICAgICAgICBjb25zdCBuZWdhdGl2ZVByb3BlcnRpZXMgPSBwcm9wZXJ0eUlyaXMuZmlsdGVyKChrZXkpID0+IGtleS5zdGFydHNXaXRoKFwibmVnYXRpdmVQcm9wZXJ0eUFzc2VydGlvbitcIikpO1xuICAgICAgICBjb25zdCBvYmplY3RQcm9wZXJ0aWVzID0gcHJvcGVydHlJcmlzLmZpbHRlcigoa2V5KSA9PiBpbmRpdmlkdWFsLmdldExpbmtlZEVudGl0aWVzKCkuZ2V0KGtleSkgJiYgaW5kaXZpZHVhbC5nZXRMaW5rZWRFbnRpdGllcygpLmdldChrZXkpPy50eXBlLmluZGV4T2YoXCJvYmplY3RQcm9wZXJ0eVwiKSAhPT0gLTEpXG4gICAgICAgIGNvbnN0IGRhdGFQcm9wZXJ0aWVzID0gcHJvcGVydHlJcmlzLmZpbHRlcigoa2V5KSA9PiBpbmRpdmlkdWFsLmdldExpbmtlZEVudGl0aWVzKCkuZ2V0KGtleSkgJiYgaW5kaXZpZHVhbC5nZXRMaW5rZWRFbnRpdGllcygpLmdldChrZXkpPy50eXBlLmluZGV4T2YoXCJkYXRhUHJvcGVydHlcIikgIT09IC0xKVxuICAgICAgICBjb25zdCBwcm9wZXJ0eUFzc2VydGlvbnM6IFJlYWN0RWxlbWVudFtdID0gW107XG5cbiAgICAgICAgZm9yKGNvbnN0IGlyaSBvZiBvYmplY3RQcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSBhc0FycmF5KGluZGl2aWR1YWwucHJvcGVydGllc1tpcmldKTtcbiAgICAgICAgICAgIGZvcihjb25zdCB2IG9mIHZhbHVlcykge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5QXNzZXJ0aW9ucy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAge2dldENsYXNzRXhwcmVzc2lvbkpTWChpbmRpdmlkdWFsLCBpbmRpdmlkdWFsLmdldExpbmtlZEVudGl0aWVzKCksIGlyaSwgYXBpLCBzaG93QmFkZ2VzKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHt0eXBlb2YgdiA9PT0gXCJzdHJpbmdcIiAmJiB2LmluY2x1ZGVzKFwiaHR0cFwiKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7Zm9udFNpemU6IFwibWVkaXVtXCIsIGNvbG9yOiBcImdyYXlcIn19PiYjOTY1Njs8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Z2V0RW50aXR5TGlua0pTWChpbmRpdmlkdWFsLCBpbmRpdmlkdWFsLmdldExpbmtlZEVudGl0aWVzKCksIHYsIGFwaSwgc2hvd0JhZGdlcyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC8+IDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRUb29sdGlwKCh0eXBlb2YgdiA9PT0gXCJzdHJpbmdcIiA/IHYgOiB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheSh2KSAmJiB2LnZhbHVlID8gSlNPTi5zdHJpbmdpZnkodi52YWx1ZSkgOiBKU09OLnN0cmluZ2lmeSh2KSkpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvcihjb25zdCBpcmkgb2YgZGF0YVByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IGFzQXJyYXkoaW5kaXZpZHVhbC5wcm9wZXJ0aWVzW2lyaV0pO1xuICAgICAgICAgICAgZm9yKGNvbnN0IHYgb2YgdmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHlBc3NlcnRpb25zLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKGluZGl2aWR1YWwsIGluZGl2aWR1YWwuZ2V0TGlua2VkRW50aXRpZXMoKSwgaXJpLCBhcGksIHNob3dCYWRnZXMpfVxuICAgICAgICAgICAgICAgICAgICAgICAgezw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3tmb250U2l6ZTogXCJtZWRpdW1cIiwgY29sb3I6IFwiZ3JheVwifX0+JiM5NjU2Ozwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Z2V0RW50aXR5TGlua0pTWChpbmRpdmlkdWFsLCBpbmRpdmlkdWFsLmdldExpbmtlZEVudGl0aWVzKCksIHYsIGFwaSwgc2hvd0JhZGdlcyl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8Lz59XG4gICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvcihjb25zdCBrZXkgb2YgbmVnYXRpdmVQcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICBjb25zdCBpcmkgPSBrZXkuc2xpY2UoXCJuZWdhdGl2ZVByb3BlcnR5QXNzZXJ0aW9uK1wiLmxlbmd0aCk7XG4gICAgICAgICAgICBjb25zdCBsaW5rZWRFbnRpdHkgPSBpbmRpdmlkdWFsLmdldExpbmtlZEVudGl0aWVzKCkuZ2V0KGlyaSk7XG4gICAgICAgICAgICBjb25zdCBoYXNEYXRhUHJvcGVydHkgPSBsaW5rZWRFbnRpdHk/LnR5cGUuaW5kZXhPZihcImRhdGFQcm9wZXJ0eVwiKSAhPT0gLTE7XG4gICAgICAgICAgICBjb25zdCBoYXNPYmplY3RQcm9wZXJ0eSA9IGxpbmtlZEVudGl0eT8udHlwZS5pbmRleE9mKFwib2JqZWN0UHJvcGVydHlcIikgIT09IC0xO1xuICAgICAgICAgICAgY29uc3QgdmFsdWVzID0gYXNBcnJheShpbmRpdmlkdWFsLnByb3BlcnRpZXNba2V5XSk7XG5cbiAgICAgICAgICAgIGZvcihjb25zdCB2IG9mIHZhbHVlcykge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5QXNzZXJ0aW9ucy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgc3R5bGU9e3tjb2xvcjogXCJwdXJwbGVcIn19Pm5vdDwvaT57XCIgXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKGluZGl2aWR1YWwsIGluZGl2aWR1YWwuZ2V0TGlua2VkRW50aXRpZXMoKSwgaXJpLCBhcGksIHNob3dCYWRnZXMpfVxuICAgICAgICAgICAgICAgICAgICAgICAge3R5cGVvZiB2ID09PSBcInN0cmluZ1wiICYmIHYuaW5jbHVkZXMoXCJodHRwXCIpID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17e2ZvbnRTaXplOiBcIm1lZGl1bVwiLCBjb2xvcjogXCJncmF5XCJ9fT4mIzk2NTY7PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2dldEVudGl0eUxpbmtKU1goaW5kaXZpZHVhbCwgaW5kaXZpZHVhbC5nZXRMaW5rZWRFbnRpdGllcygpLCB2LCBhcGksIHNob3dCYWRnZXMpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNPYmplY3RQcm9wZXJ0eSA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRUb29sdGlwKCh0eXBlb2YgdiA9PT0gXCJzdHJpbmdcIiA/IHYgOiB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheSh2KSAmJiB2LnZhbHVlID8gSlNPTi5zdHJpbmdpZnkodi52YWx1ZSkgOiBKU09OLnN0cmluZ2lmeSh2KSkpXG4gICAgICAgICAgICAgICAgICAgICAgICApIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc0RhdGFQcm9wZXJ0eSA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3tmb250U2l6ZTogXCJtZWRpdW1cIiwgY29sb3I6IFwiZ3JheVwifX0+JiM5NjU2Ozwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtnZXRFbnRpdHlMaW5rSlNYKGluZGl2aWR1YWwsIGluZGl2aWR1YWwuZ2V0TGlua2VkRW50aXRpZXMoKSwgdiwgYXBpLCBzaG93QmFkZ2VzKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgICkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw+PC8+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgIHtwcm9wZXJ0eUFzc2VydGlvbnMubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgICAgICA8PjxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxiPlByb3BlcnR5IGFzc2VydGlvbnM6PC9iPlxuICAgICAgICAgICAgICAgICAgICAgICAge3Byb3BlcnR5QXNzZXJ0aW9ucy5sZW5ndGggPiAxID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWw+e3Byb3BlcnR5QXNzZXJ0aW9ucy5tYXAoKHBhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8bGkga2V5PXtyYW5kb21TdHJpbmcoKX0+e3BhfTwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNvcnQoKX08L3VsPiA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+e3Byb3BlcnR5QXNzZXJ0aW9uc1swXX08L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+PC8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC8+XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0QW5ub3RhdGlvblNlY3Rpb24odGhpbmc6IFRoaW5nKSA6IFJlYWN0RWxlbWVudCB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgIHt0aGluZy5nZXRBbm5vdGF0aW9uUHJlZGljYXRlcygpLm1hcCgoYW5ub0tleSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhbm5vcyA9IHRoaW5nLmdldEFubm90YXRpb25CeUlkKGFubm9LZXkpO1xuICAgICAgICAgICAgICAgICAgICBpZihhbm5vcy5sZW5ndGggPT0gMCkgcmV0dXJuIDw+PC8+O1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiA8RXVpRmxleEl0ZW0gZ3Jvdz17ZmFsc2V9IGtleT17YW5ub0tleX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Yj57Y2FwaXRhbGl6ZShkZVVuZGVyc2NvcmUoZGVDYW1lbENhc2UodGhpbmcuZ2V0QW5ub3RhdGlvblRpdGxlQnlJZChhbm5vS2V5KSkpKX06PC9iPlxuICAgICAgICAgICAgICAgICAgICAgICAge2Fubm9zLmxlbmd0aCA+IDEgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bD57YW5ub3MubWFwKChhbm5vdGF0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8bGkga2V5PXtyYW5kb21TdHJpbmcoKX0gaWQ9e2Fubm90YXRpb24udmFsdWV9PntnZXRSZWlmaWVkSlNYKHRoaW5nLCBhbm5vdGF0aW9uLCBhcGksIHNob3dCYWRnZXMpfTwvbGk+O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pfTwvdWw+IDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBrZXk9e3JhbmRvbVN0cmluZygpfT57Z2V0UmVpZmllZEpTWCh0aGluZywgYW5ub3NbMF0sIGFwaSwgc2hvd0JhZGdlcyl9PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvPlxuICAgICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICAgIDw+XG4gICAgICAgICAgICA8RXVpQ2FyZFxuICAgICAgICAgICAgICAgIHRpdGxlPXtoYXNUaXRsZSA/IChlbnRpdHlUeXBlID8gY2FwaXRhbGl6ZShnZXRFbnRpdHlUeXBlTmFtZShlbnRpdHlUeXBlKSkgOiAoaXNTdWNjZXNzRW50aXR5ICYmIGVudGl0eSkgPyBjYXBpdGFsaXplKGVudGl0eS5nZXRUeXBlKCkpIDogXCJcIikgICsgXCIgSW5mb3JtYXRpb25cIiA6IFwiXCJ9XG4gICAgICAgICAgICAgICAgbGF5b3V0PVwiaG9yaXpvbnRhbFwiXG4gICAgICAgICAgICA+XG5cbiAgICAgICAgICAgICAgICB7aXNMb2FkaW5nRW50aXR5ICYmIDxFdWlMb2FkaW5nU3Bpbm5lciBzaXplPXsncyd9Lz59XG4gICAgICAgICAgICAgICAge2lzU3VjY2Vzc0VudGl0eSAmJiBlbnRpdHkgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICAgICA8RXVpVGV4dCB7Li4ucmVzdH0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Z2V0TGFiZWxTZWN0aW9uKGVudGl0eSl9XG4gICAgICAgICAgICAgICAgICAgICAgICB7Z2V0U3lub255bXNTZWN0aW9uKGVudGl0eSl9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtpc0NsYXNzKGVudGl0eSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Z2V0U3Vic2V0c1NlY3Rpb24oZW50aXR5KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2dldEhhc0tleVNlY3Rpb24oZW50aXR5KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAge2lzUHJvcGVydHkoZW50aXR5KSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtnZXRQcm9wZXJ0eUNoYXJhY3RlcmlzdGljc1NlY3Rpb24oZW50aXR5KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2dldERvbWFpblNlY3Rpb24oZW50aXR5KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2dldFJhbmdlU2VjdGlvbihlbnRpdHkpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB7aXNJbmRpdmlkdWFsKGVudGl0eSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Z2V0SW5kaXZpZHVhbFByb3BlcnR5QXNzZXJ0aW9uc1NlY3Rpb24oZW50aXR5KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAge2dldEFubm90YXRpb25TZWN0aW9uKGVudGl0eSl9XG4gICAgICAgICAgICAgICAgICAgIDwvRXVpVGV4dD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAge2lzRXJyb3JFbnRpdHkgJiYgPEV1aVRleHQ+e2dldEVycm9yTWVzc2FnZVRvRGlzcGxheShlcnJvckVudGl0eSwgXCJpbmZvcm1hdGlvblwiKX08L0V1aVRleHQ+fVxuICAgICAgICAgICAgPC9FdWlDYXJkPlxuICAgICAgICA8Lz5cbiAgICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVFbnRpdHlJbmZvKHByb3BzOiBFbnRpdHlJbmZvV2lkZ2V0UHJvcHMsIGNvbnRhaW5lcjogYW55LCBjYWxsYmFjaz86ICgpPT52b2lkKSB7XG4gICAgUmVhY3RET00ucmVuZGVyKFdyYXBwZWRFbnRpdGl5SW5mb1dpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkRW50aXRpeUluZm9XaWRnZXQocHJvcHM6IEVudGl0eUluZm9XaWRnZXRQcm9wcykge1xuICAgIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCI+XG4gICAgICAgICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgICAgICAgICA8RW50aXR5SW5mb1dpZGdldFxuICAgICAgICAgICAgICAgICAgICBhcGk9e3Byb3BzLmFwaX1cbiAgICAgICAgICAgICAgICAgICAgaXJpPXtwcm9wcy5pcml9XG4gICAgICAgICAgICAgICAgICAgIG9udG9sb2d5SWQ9e3Byb3BzLm9udG9sb2d5SWR9XG4gICAgICAgICAgICAgICAgICAgIGhhc1RpdGxlPXtwcm9wcy5oYXNUaXRsZX1cbiAgICAgICAgICAgICAgICAgICAgZW50aXR5VHlwZT17cHJvcHMuZW50aXR5VHlwZX1cbiAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyPXtwcm9wcy5wYXJhbWV0ZXJ9XG4gICAgICAgICAgICAgICAgICAgIHVzZUxlZ2FjeT17cHJvcHMudXNlTGVnYWN5fVxuICAgICAgICAgICAgICAgICAgICBzaG93QmFkZ2VzPXtwcm9wcy5zaG93QmFkZ2VzfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgICAgIDwvRXVpUHJvdmlkZXI+XG4gICAgKVxufVxuXG5leHBvcnQgeyBFbnRpdHlJbmZvV2lkZ2V0LCBjcmVhdGVFbnRpdHlJbmZvIH07XG4iLCAiaW1wb3J0IHtUaGluZ30gZnJvbSBcIi4vaW50ZXJmYWNlc1wiO1xuaW1wb3J0IFJlYWN0LCB7UmVhY3RFbGVtZW50fSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7RXVpQmFkZ2UsIEV1aUljb25UaXAsIEV1aUljb259IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7YXNBcnJheSwgZ2V0RnJvbnRFbmRBcGksIGdldFRlcm1Jbk9udG9sb2d5U3VmZml4LCByYW5kb21TdHJpbmd9IGZyb20gXCIuLi9hcHAvdXRpbFwiO1xuaW1wb3J0IExpbmtlZEVudGl0aWVzIGZyb20gXCIuL0xpbmtlZEVudGl0aWVzXCI7XG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi9SZWlmaWVkXCI7XG5cbmNvbnN0IERFRkFVTFRfU0hPV19CQURHRVMgPSB0cnVlO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VG9vbHRpcCh0ZXh0OiBzdHJpbmcpIDogUmVhY3RFbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgICA8RXVpSWNvblRpcCB0eXBlPXtcImlJbkNpcmNsZVwifSBjb2xvcj17XCJzdWJkdWVkXCJ9IGNvbnRlbnQ9e3RleHR9Lz5cbiAgICApO1xufVxuXG4vKipcbiAqIE9OTFkgVVNBQkxFIFdJVEggVjItQVBJIEVOVElUSUVTXG4gKlxuICogUmV0dXJucyBSZWlmaWVkIGF4aW9tcyBhcyBKU1ggZWxlbWVudCAoc2ltaWxhciB0byBNZXRhZGF0YVRvb2x0aXAgY29tcG9uZW50IGluIG9sczQgcHJvamVjdClcbiAqIEBwYXJhbSBwYXJlbnRFbnRpdHkgdGhlIHN1cnJvdW5kaW5nIGVudGl0eSBvZiB0aGUgYXhpb21zIGFycmF5IChmb3IgZXZlbnR1YWwgbGFiZWwgZmV0Y2hpbmcpXG4gKiBAcGFyYW0gYXhpb21zRGljdCB0aGUgZW50aXRpZXMgYXhpb21zIGluIHRoZSBmb3JtYXQgcmV0dXJuZWQgYnkgUmVpZmllZDo6Z2V0TWV0YWRhdGEoKVxuICogQHJldHVybnMgUmVhY3RFbGVtZW50IHRoZSBheGlvbXMgaW4gSlNYIGZvcm1hdCB0byBkaXNwbGF5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBeGlvbXNJbmZvcm1hdGlvbkpTWChwYXJlbnRFbnRpdHk6IFRoaW5nLCBheGlvbXNEaWN0OiBhbnkgfCBudWxsKSA6IFJlYWN0RWxlbWVudCB7XG4gICAgY29uc3QgYXhpb21zVGV4dCA9IE9iamVjdC5rZXlzKGF4aW9tc0RpY3QpXG4gICAgICAgIC5tYXAoKGtleSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbGFiZWwgPSBwYXJlbnRFbnRpdHkuZ2V0TGlua2VkRW50aXRpZXMoKS5nZXRMYWJlbEZvcklyaShrZXkpIHx8IGtleTtcbiAgICAgICAgICAgIGlmIChsYWJlbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIFwiKlwiICsgYXhpb21zRGljdFtrZXldICsgXCIgKFwiICsgbGFiZWwgKyBcIilcIlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHJldHVybiBcIlwiO1xuICAgICAgICB9KVxuICAgICAgICAuam9pbihcIlxcblwiKVxuXG4gICAgcmV0dXJuIGdldFRvb2x0aXAoYXhpb21zVGV4dCk7XG59XG5cbi8qKlxuICogT05MWSBVU0FCTEUgV0lUSCBWMi1BUEkgRU5USVRJRVNcbiAqXG4gKiBSZXR1cm5zIGEgbGFiZWxlZCBlbnRpdHkgbGluayBhcyBKU1ggZWxlbWVudFxuICogQHBhcmFtIHBhcmVudEVudGl0eSB0aGUgZW50aXR5IG9iamVjdCBpbiB3aGljaCB0aGUgbGlua2VkIGVudGl0eSBleGlzdHNcbiAqIEBwYXJhbSBsaW5rZWRFbnRpdGllcyB0aGUgbGlua2VkRW50aXRpZXMgb2JqZWN0IChleGlzdHMgYXMgcGFyYW0gYmVjYXVzZSBpdCBpcyBuZWNlc3NhcnkgdGhhdCB0aGUgZW50aXR5IGhhcyBhIGxpbmtlZEVudGl0aWVzIGJsb2NrIGluIHByb3BlcnRpZXMpXG4gKiBAcGFyYW0gaXJpICAgdGhlIGVudGl0aWVzJyBpcmlcbiAqIEBwYXJhbSBhcGkgICB0aGUgYXBpIHVzZWQgdG8gZXh0cmFjdCB0aGUgZnJvbnRlbmQgYXBpIHRvIGxpbmsgdG8gbGlua2VkIGVudGl0eVxuICogQHBhcmFtIHNob3dCYWRnZXMgICAgYm9vbGVhbiB3aGljaCBpbmRpY2F0ZXMgaWYgYmFkZ2VzIHNob3VsZCBiZSBzaG93blxuICogQHJldHVybnMgUmVhY3RFbGVtZW50IHRoZSBlbnRpdHkgbGluayBKU1hcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVudGl0eUxpbmtKU1gocGFyZW50RW50aXR5OiBUaGluZywgbGlua2VkRW50aXRpZXM6IExpbmtlZEVudGl0aWVzLCBpcmk6IHN0cmluZywgYXBpOiBzdHJpbmcsIHNob3dCYWRnZXMgOiBib29sZWFuID0gREVGQVVMVF9TSE9XX0JBREdFUyk6IFJlYWN0RWxlbWVudCB7XG4gICAgY29uc3QgZnJvbnRlbmRBcGkgPSBnZXRGcm9udEVuZEFwaShhcGkpO1xuICAgIGNvbnN0IGxhYmVsID0gbGlua2VkRW50aXRpZXMuZ2V0TGFiZWxGb3JJcmkoaXJpKSB8fCBpcmkuc3BsaXQoXCIvXCIpLnBvcCgpIHx8IGlyaTtcbiAgICBjb25zdCBsaW5rZWRFbnRpdHkgPSBsaW5rZWRFbnRpdGllcy5nZXQoaXJpKTtcbiAgICBjb25zdCBsb2NhbE9udG9sb2d5ID0gcGFyZW50RW50aXR5LmdldE9udG9sb2d5SWQoKTtcblxuICAgIC8vIHJlZmVyZW5jZSB0byBzZWxmOiBqdXN0IGRpc3BsYXkgbGFiZWwgYmVjYXVzZSB3ZSBhcmUgYWxyZWFkeSBvbiB0aGF0IHBhZ2VcbiAgICBpZiAocGFyZW50RW50aXR5LmdldFR5cGUoKSAhPT0gXCJvbnRvbG9neVwiICYmIGlyaSA9PT0gcGFyZW50RW50aXR5Py5nZXRJcmkoKSkge1xuICAgICAgICByZXR1cm4gPGI+e3BhcmVudEVudGl0eS5nZXRMYWJlbCgpfTwvYj5cbiAgICB9XG5cbiAgICBpZiAoIWxpbmtlZEVudGl0eSkge1xuICAgICAgICBpZihpcmkuc3RhcnRzV2l0aChcImh0dHBcIikpIHtcbiAgICAgICAgICAgIHJldHVybiA8YSBocmVmPXtpcml9PntsYWJlbH08L2E+O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gU28gZmFyIG9ubHkga25vd24gb2NjdXJyZW5jZSBvZiB0aGlzIGJyYW5jaCBpcyBmb3Igb3dsI1RoaW5nXG4gICAgICAgICAgICByZXR1cm4gPHNwYW4+e2xhYmVsfTwvc3Bhbj47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBvdGhlckRlZmluZWRCeSA9IGxpbmtlZEVudGl0eVtcImRlZmluZWRCeVwiXSA/IGxpbmtlZEVudGl0eVtcImRlZmluZWRCeVwiXS5maWx0ZXIoKGVsZW06IGFueSkgPT4ge3JldHVybiBlbGVtICE9PSBsb2NhbE9udG9sb2d5fSkgOiBbXTtcbiAgICBjb25zdCBsaW5rZWRFbnRpdHlUeXBlID0gbGlua2VkRW50aXR5W1widHlwZVwiXTsgLy8gVE9ETzogZG9lcyB0eXBlIGtleSBhbHdheXMgZXhpc3QgaW4gbGlua2VkRW50aXR5IHJlbGV2YW50IGZvciByZWxhdGlvbnNXaWRnZXQ/XG5cbiAgICAvLyBzZWUgaHR0cHM6Ly9naXRsYWIuemJtZWQuZGUva20vc2VtbG9va3Avb2xzNC8tL2Jsb2IvZGV2L2Zyb250ZW5kL3NyYy9jb21wb25lbnRzL0VudGl0eUxpbmsudHN4IGZvciBvcmlnaW5hbCByZWZlcmVuY2VcbiAgICBpZihvdGhlckRlZmluZWRCeS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgaWYobGlua2VkRW50aXR5W1wiaGFzTG9jYWxEZWZpbml0aW9uXCJdKSB7XG4gICAgICAgICAgICAvLyBzaG93IDxsYWJlbD4gPG9udG9sb2d5SWQ+IHdoZXJlIDxsYWJlbD4gbGlua3MgdG8gdGhlIHRlcm0gaW4gdGhpcyBvbnRvbG9neSBhbmQgPG9udG9sb2d5SWQ+IGxpbmtzIHRvIHRoZSB0ZXJtIGluIHRoZSBkZWZpbmluZyBvbnRvbG9neVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICA8YSBocmVmPXtmcm9udGVuZEFwaSArIGdldFRlcm1Jbk9udG9sb2d5U3VmZml4KGxvY2FsT250b2xvZ3ksIGlyaSwgbGlua2VkRW50aXR5VHlwZSl9PntsYWJlbH08L2E+XG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNob3dCYWRnZXMgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPXtmcm9udGVuZEFwaSArIGdldFRlcm1Jbk9udG9sb2d5U3VmZml4KG90aGVyRGVmaW5lZEJ5WzBdLCBpcmksIGxpbmtlZEVudGl0eVR5cGUpfT57PEV1aUJhZGdlIGNvbG9yPXtcInN1Y2Nlc3NcIn0+e290aGVyRGVmaW5lZEJ5WzBdLnRvVXBwZXJDYXNlKCl9PC9FdWlCYWRnZT59PC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvPiA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD48Lz5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gc2hvdyA8bGFiZWw+IDxvbnRvbG9neUlkPiBsaW5raW5nIHRvIHRoZSB0ZXJtIGluIHRoZSBkZWZpbmluZyBvbnRvbG9neVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICA8YSBocmVmPXtmcm9udGVuZEFwaSArIGdldFRlcm1Jbk9udG9sb2d5U3VmZml4KG90aGVyRGVmaW5lZEJ5WzBdLCBpcmksIGxpbmtlZEVudGl0eVR5cGUpfT57bGFiZWx9PC9hPlxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaG93QmFkZ2VzID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj17ZnJvbnRlbmRBcGkgKyBnZXRUZXJtSW5PbnRvbG9neVN1ZmZpeChvdGhlckRlZmluZWRCeVswXSwgaXJpLCBsaW5rZWRFbnRpdHlUeXBlKX0+ezxFdWlCYWRnZSBjb2xvcj17XCJzdWNjZXNzXCJ9PntvdGhlckRlZmluZWRCeVswXS50b1VwcGVyQ2FzZSgpfTwvRXVpQmFkZ2U+fTwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Lz4gOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw+PC8+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgIClcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmKG90aGVyRGVmaW5lZEJ5Lmxlbmd0aCA+IDEpIHtcbiAgICAgICAgaWYobGlua2VkRW50aXR5W1wiaGFzTG9jYWxEZWZpbml0aW9uXCJdKSB7XG4gICAgICAgICAgICAvLyBzaG93IDxsYWJlbD4gPG9udG9sb2d5SWQxPiA8b250b2xvZ3lJZDI+IC4uLiA8b250b2xvZ3lJZE4+IHdoZXJlIDxsYWJlbD4gbGlua3MgdG8gdGhlIHRlcm0gaW4gdGhpcyBvbnRvbG9neSBhbmQgPG9udG9sb2d5SWRJPiBsaW5rcyB0byB0aGUgdGVybSBpbiB0aGF0IGRlZmluaW5nIG9udG9sb2d5XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9e2Zyb250ZW5kQXBpICsgZ2V0VGVybUluT250b2xvZ3lTdWZmaXgobG9jYWxPbnRvbG9neSwgaXJpLCBsaW5rZWRFbnRpdHlUeXBlKX0+e2xhYmVsfTwvYT5cbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0JhZGdlcyA/XG4gICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtvdGhlckRlZmluZWRCeS5tYXAoKGVsZW06IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEga2V5PXtyYW5kb21TdHJpbmcoKX0gaHJlZj17ZnJvbnRlbmRBcGkgKyBnZXRUZXJtSW5PbnRvbG9neVN1ZmZpeChlbGVtLCBpcmksIGxpbmtlZEVudGl0eVR5cGUpfT57PEV1aUJhZGdlIGNvbG9yPXtcInN1Y2Nlc3NcIn0+e2VsZW0udG9VcHBlckNhc2UoKX08L0V1aUJhZGdlPn08L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8Lz4gOlxuICAgICAgICAgICAgICAgICAgICAgICAgPD48Lz5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gc2hvdyA8bGFiZWw+PElDT04+IHdoZXJlIDxsYWJlbD4gbGlua3MgdG8gdGhlIHRlcm1zJyBpcmkgYW5kIDxJQ09OPiBsaW5rcyB0byBkaXNhbWJpZ3VhdGlvbiBwYWdlXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9e2lyaX0+e2xhYmVsfTwvYT5cbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0JhZGdlcyA/XG4gICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGtleT17cmFuZG9tU3RyaW5nKCl9IGhyZWY9e2Zyb250ZW5kQXBpICsgYC9zZWFyY2g/cT0ke2VuY29kZVVSSUNvbXBvbmVudChsYWJlbCl9JmV4YWN0TWF0Y2g9dHJ1ZWB9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RXVpQmFkZ2UgY29sb3I9e1wic3VjY2Vzc1wifT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxFdWlJY29uIHR5cGU9e1wic2VhcmNoXCJ9IHNpemU9e1wic1wifS8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtvdGhlckRlZmluZWRCeS5sZW5ndGh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcIm9udG9sb2dpZXNcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9FdWlCYWRnZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Lz4gOlxuICAgICAgICAgICAgICAgICAgICAgICAgPD48Lz5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYobGlua2VkRW50aXR5W1wiaGFzTG9jYWxEZWZpbml0aW9uXCJdKSB7XG4gICAgICAgICAgICAvLyBzaG93IDxsYWJlbD4gd2hlcmUgPGxhYmVsPiBsaW5rcyB0byB0aGUgdGVybSBpbiB0aGlzIG9udG9sb2d5XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9e2Zyb250ZW5kQXBpICsgZ2V0VGVybUluT250b2xvZ3lTdWZmaXgobG9jYWxPbnRvbG9neSwgaXJpLCBsaW5rZWRFbnRpdHlUeXBlKX0+e2xhYmVsfTwvYT5cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmKHBhcnNlSW50KGxpbmtlZEVudGl0eVtcIm51bUFwcGVhcnNJblwiXSkgPiAwKSB7XG4gICAgICAgICAgICAgICAgLy8gc2hvdyA8bGFiZWw+PElDT04+IHdoZXJlIDxsYWJlbD4gbGlua3MgdG8gdGhlIHRlcm1zJyBpcmkgYW5kIDxJQ09OPiBsaW5rcyB0byBkaXNhbWJpZ3VhdGlvbiBwYWdlXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9e2lyaX0+e2xhYmVsfTwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93QmFkZ2VzID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEga2V5PXtyYW5kb21TdHJpbmcoKX0gaHJlZj17ZnJvbnRlbmRBcGkgKyBgL3NlYXJjaD9xPSR7ZW5jb2RlVVJJQ29tcG9uZW50KGxhYmVsKX0mZXhhY3RNYXRjaD10cnVlYH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEV1aUJhZGdlIGNvbG9yPXtcInN1Y2Nlc3NcIn0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxFdWlJY29uIHR5cGU9e1wic2VhcmNoXCJ9IHNpemU9e1wic1wifS8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7bGlua2VkRW50aXR5W1wibnVtQXBwZWFyc0luXCJdfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3BhcnNlSW50KGxpbmtlZEVudGl0eVtcIm51bUFwcGVhcnNJblwiXSkgPiAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFwib250b2xvZ2llc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwib250b2xvZ3lcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0V1aUJhZGdlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Lz4gOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PjwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBzaG93IHJhdyBpcmlcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj17aXJpfT57bGFiZWx9PC9hPlxuICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8qKlxuICogT05MWSBVU0FCTEUgV0lUSCBWMi1BUEkgRU5USVRJRVNcbiAqXG4gKiBCdWlsZHMgYW5kIHJldHVybnMgb25lIGVsZW1lbnQgb2YgYSBzZWN0aW9ucycgbGlzdCwgcG9zc2libHkgaW4gYSByZWN1cnNpdmUgZmFzaGlvbiBieSBwYXJzaW5nIHRoZSByZXNwb25zZSBvYmplY3QgYXQgdGhlIGN1cnJlbnRSZXNwb25zZVBhdGggdG8gc2hvdyBNYW5jaGVzdGVyIHN5bnRheC5cbiAqIEBwYXJhbSBwYXJlbnRFbnRpdHkgdGhlIGVudGl0eSBvYmplY3QgcG9zc2Vzc2luZyB0aGUgd2hvbGUgcmVzcG9uc2Ugb2JqZWN0XG4gKiBAcGFyYW0gbGlua2VkRW50aXRpZXMgdGhlIGxpbmtlZEVudGl0aWVzIG9iamVjdCAoZXhpc3RzIGFzIHBhcmFtIGJlY2F1c2UgaXQgaXMgbmVjZXNzYXJ5IHRoYXQgdGhlIGVudGl0eSBoYXMgYSBsaW5rZWRFbnRpdGllcyBibG9jayBpbiBwcm9wZXJ0aWVzKVxuICogQHBhcmFtIGN1cnJlbnRSZXNwb25zZVBhdGggdGhlIGN1cnJlbnQgc3ViLW9iamVjdCBvZiB0aGUgcGFyZW50RW50aXRpZXMgcmVzcG9uc2Ugb2JqZWN0IHBhcnNlZCBhcyBjbGFzcyBleHByZXNzaW9uXG4gKiBAcGFyYW0gYXBpIHRoZSBhcGkgdXNlZCB0byBleHRyYWN0IHRoZSBmcm9udGVuZCBhcGkgdG8gbGluayB0byBsaW5rZWQgZW50aXR5IChuZWNlc3NhcnkgZm9yIGNhbGwgdG8gZ2V0RW50aXR5TGlua0pTWCgpKVxuICogQHBhcmFtIHNob3dCYWRnZXMgYm9vbGVhbiB3aGljaCBpbmRpY2F0ZXMgaWYgYmFkZ2VzIHNob3VsZCBiZSBzaG93blxuICogQHJldHVybnMgUmVhY3RFbGVtZW50IHRoZSBjbGFzcyBleHByZXNzaW9uIEpTWFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2xhc3NFeHByZXNzaW9uSlNYKHBhcmVudEVudGl0eTogVGhpbmcsIGxpbmtlZEVudGl0aWVzOiBMaW5rZWRFbnRpdGllcywgY3VycmVudFJlc3BvbnNlUGF0aDogYW55LCBhcGk6IHN0cmluZywgc2hvd0JhZGdlczogYm9vbGVhbiA9IERFRkFVTFRfU0hPV19CQURHRVMpOiBSZWFjdEVsZW1lbnQge1xuICAgIGxldCByZXN1bHQgPSA8PjwvPjtcblxuICAgIC8vIG1lcmdlIGxpbmtlZEVudGl0aWVzIG9mIGN1cnJlbnRSZXNwb25zZVBhdGggaWYgY3VycmVudFJlc3BvbnNlUGF0aC5saW5rZWRFbnRpdGllcyBpcyBub3QgdW5kZWZpbmVkXG4gICAgbGlua2VkRW50aXRpZXMgPSBsaW5rZWRFbnRpdGllcy5tZXJnZVdpdGgoY3VycmVudFJlc3BvbnNlUGF0aC5saW5rZWRFbnRpdGllcyk7XG5cbiAgICBpZiAodHlwZW9mIGN1cnJlbnRSZXNwb25zZVBhdGggPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmVzdWx0ID0gZ2V0RW50aXR5TGlua0pTWChwYXJlbnRFbnRpdHksIGxpbmtlZEVudGl0aWVzLCBjdXJyZW50UmVzcG9uc2VQYXRoLCBhcGksIHNob3dCYWRnZXMpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2YgY3VycmVudFJlc3BvbnNlUGF0aCA9PT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheShjdXJyZW50UmVzcG9uc2VQYXRoKSAmJiBBcnJheS5pc0FycmF5KGN1cnJlbnRSZXNwb25zZVBhdGhbXCJ0eXBlXCJdKSAmJiBjdXJyZW50UmVzcG9uc2VQYXRoW1widHlwZVwiXS5pbmRleE9mKFwicmVpZmljYXRpb25cIikgIT09IC0xKSB7IC8vIFRPRE86IENvbmNhdCB3aXRoIGVsc2UgcGFydD8gU2VlIHJlbGF0ZWRGcm9tIChNYW5jaGVzdGVyIHN5bnRheCBkb2VzIG5vdCBnZXQgZGlzcGxheWVkLCBidXQgbmVpdGhlciBpbiBvbHM0KVxuICAgICAgICAvLyBjdXJyZW50IHJlc3BvbnNlIHBhdGggaXMgcmVpZmljYXRpb25cbiAgICAgICAgcmVzdWx0ID0gZ2V0UmVpZmllZEpTWChwYXJlbnRFbnRpdHksIFJlaWZpZWQuZnJvbUpzb248YW55PihjdXJyZW50UmVzcG9uc2VQYXRoKVswXSwgYXBpLCBzaG93QmFkZ2VzKTtcbiAgICB9XG4gICAgZWxzZSB7IC8vIHR5cGUgPT09IFwib2JqZWN0XCJcbiAgICAgICAgY29uc3Qgc29tZVZhbHVlc0Zyb20gPSBjdXJyZW50UmVzcG9uc2VQYXRoW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjc29tZVZhbHVlc0Zyb21cIl07XG4gICAgICAgIGNvbnN0IGFsbFZhbHVlc0Zyb20gPSBjdXJyZW50UmVzcG9uc2VQYXRoW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjYWxsVmFsdWVzRnJvbVwiXTtcbiAgICAgICAgY29uc3QgaW50ZXJzZWN0aW9uT2YgPSBhc0FycmF5KGN1cnJlbnRSZXNwb25zZVBhdGhbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNpbnRlcnNlY3Rpb25PZlwiXSk7XG4gICAgICAgIGNvbnN0IHVuaW9uT2YgPSBhc0FycmF5KGN1cnJlbnRSZXNwb25zZVBhdGhbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCN1bmlvbk9mXCJdKTtcbiAgICAgICAgY29uc3QgaGFzVmFsdWUgPSBjdXJyZW50UmVzcG9uc2VQYXRoW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjaGFzVmFsdWVcIl07XG4gICAgICAgIGNvbnN0IG1pbkNhcmRpbmFsaXR5ID0gY3VycmVudFJlc3BvbnNlUGF0aFtcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI21pbkNhcmRpbmFsaXR5XCJdIHx8IGN1cnJlbnRSZXNwb25zZVBhdGhbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNtaW5RdWFsaWZpZWRDYXJkaW5hbGl0eVwiXTtcbiAgICAgICAgY29uc3QgbWF4Q2FyZGluYWxpdHkgPSBjdXJyZW50UmVzcG9uc2VQYXRoW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjbWF4Q2FyZGluYWxpdHlcIl0gfHwgY3VycmVudFJlc3BvbnNlUGF0aFtcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI21heFF1YWxpZmllZENhcmRpbmFsaXR5XCJdO1xuICAgICAgICBjb25zdCBjYXJkaW5hbGl0eSA9IGN1cnJlbnRSZXNwb25zZVBhdGhbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNjYXJkaW5hbGl0eVwiXSB8fCBjdXJyZW50UmVzcG9uc2VQYXRoW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjcXVhbGlmaWVkQ2FyZGluYWxpdHlcIl07XG4gICAgICAgIGNvbnN0IGhhc1NlbGYgPSBjdXJyZW50UmVzcG9uc2VQYXRoW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjaGFzU2VsZlwiXTtcbiAgICAgICAgY29uc3QgY29tcGxlbWVudE9mID0gY3VycmVudFJlc3BvbnNlUGF0aFtcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2NvbXBsZW1lbnRPZlwiXTtcbiAgICAgICAgY29uc3Qgb25lT2YgPSBhc0FycmF5KGN1cnJlbnRSZXNwb25zZVBhdGhbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNvbmVPZlwiXSk7XG4gICAgICAgIGNvbnN0IGludmVyc2VPZiA9IGN1cnJlbnRSZXNwb25zZVBhdGhbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNpbnZlcnNlT2ZcIl07XG4gICAgICAgIGNvbnN0IG9uUHJvcGVydHkgPSBjdXJyZW50UmVzcG9uc2VQYXRoW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjb25Qcm9wZXJ0eVwiXTtcbiAgICAgICAgY29uc3Qgb25EYXRhVHlwZSA9IGN1cnJlbnRSZXNwb25zZVBhdGhbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNvbkRhdGF0eXBlXCJdO1xuXG4gICAgICAgIGlmKG9uRGF0YVR5cGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRzOiBSZWFjdEVsZW1lbnRbXSA9IFtcbiAgICAgICAgICAgICAgICBnZXRDbGFzc0V4cHJlc3Npb25KU1gocGFyZW50RW50aXR5LCBsaW5rZWRFbnRpdGllcywgb25EYXRhVHlwZSwgYXBpLCBzaG93QmFkZ2VzKVxuICAgICAgICAgICAgXTtcblxuICAgICAgICAgICAgY29uc3Qgd2l0aFJlc3RyaWN0aW9ucyA9IGFzQXJyYXkoY3VycmVudFJlc3BvbnNlUGF0aFtcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI3dpdGhSZXN0cmljdGlvbnNcIl0pO1xuICAgICAgICAgICAgaWYod2l0aFJlc3RyaWN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaCg8Pls8Lz4pO1xuXG4gICAgICAgICAgICAgICAgbGV0IGlzRmlyc3QgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGZvcihjb25zdCByZXN0cmljdGlvbiBvZiB3aXRoUmVzdHJpY3Rpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmKGlzRmlyc3QpIGlzRmlyc3QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBlbGVtZW50cy5wdXNoKDw+LCZuYnNwOzwvPik7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWluRXhjbHVzaXZlID0gcmVzdHJpY3Rpb25bXCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNtaW5FeGNsdXNpdmVcIl07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1pbkluY2x1c2l2ZSA9IHJlc3RyaWN0aW9uW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjbWluSW5jbHVzaXZlXCJdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXhFeGNsdXNpdmUgPSByZXN0cmljdGlvbltcImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI21heEV4Y2x1c2l2ZVwiXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF4SW5jbHVzaXZlID0gcmVzdHJpY3Rpb25bXCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNtYXhJbmNsdXNpdmVcIl07XG5cbiAgICAgICAgICAgICAgICAgICAgaWYobWluRXhjbHVzaXZlKSBlbGVtZW50cy5wdXNoKDw+Jmd0OyB7bWluRXhjbHVzaXZlfTwvPik7XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYobWluSW5jbHVzaXZlKSBlbGVtZW50cy5wdXNoKDw+JmdlOyB7bWluSW5jbHVzaXZlfTwvPik7XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYobWF4RXhjbHVzaXZlKSBlbGVtZW50cy5wdXNoKDw+Jmx0OyB7bWF4RXhjbHVzaXZlfTwvPik7XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYobWF4SW5jbHVzaXZlKSBlbGVtZW50cy5wdXNoKDw+JmxlOyB7bWF4SW5jbHVzaXZlfTwvPik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaCg8Pl08Lz4pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXN1bHQgPSA8PntlbGVtZW50cy5tYXAoKGVsZW0pID0+IDxzcGFuIGtleT17cmFuZG9tU3RyaW5nKCl9PntlbGVtfTwvc3Bhbj4pfTwvPlxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHNvbWVWYWx1ZXNGcm9tKSB7XG4gICAgICAgICAgICByZXN1bHQgPSAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAge2dldENsYXNzRXhwcmVzc2lvbkpTWChwYXJlbnRFbnRpdHksIGxpbmtlZEVudGl0aWVzLCBvblByb3BlcnR5LCBhcGksIHNob3dCYWRnZXMpfVxuICAgICAgICAgICAgICAgICAgICA8aSBzdHlsZT17e2NvbG9yOiBcInB1cnBsZVwifX0+IHNvbWUgPC9pPlxuICAgICAgICAgICAgICAgICAgICB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKHBhcmVudEVudGl0eSwgbGlua2VkRW50aXRpZXMsIGFzQXJyYXkoc29tZVZhbHVlc0Zyb20pWzBdLCBhcGksIHNob3dCYWRnZXMpfVxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChhbGxWYWx1ZXNGcm9tKSB7XG4gICAgICAgICAgICByZXN1bHQgPSAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAge2dldENsYXNzRXhwcmVzc2lvbkpTWChwYXJlbnRFbnRpdHksIGxpbmtlZEVudGl0aWVzLCBvblByb3BlcnR5LCBhcGksIHNob3dCYWRnZXMpfVxuICAgICAgICAgICAgICAgICAgICA8aSBzdHlsZT17e2NvbG9yOiBcInB1cnBsZVwifX0+IG9ubHkgPC9pPlxuICAgICAgICAgICAgICAgICAgICB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKHBhcmVudEVudGl0eSwgbGlua2VkRW50aXRpZXMsIGFzQXJyYXkoYWxsVmFsdWVzRnJvbSlbMF0sIGFwaSwgc2hvd0JhZGdlcyl9XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGludGVyc2VjdGlvbk9mLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRzOiBSZWFjdEVsZW1lbnRbXSA9IFtcbiAgICAgICAgICAgICAgICA8c3BhbiBrZXk9e3JhbmRvbVN0cmluZygpfSBjbGFzc05hbWU9XCJ0ZXh0LW5ldXRyYWwtZGVmYXVsdFwiPlxuICAgICAgICAgICAgICAgICAgICAmIzQwO1xuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGVsZW0gb2YgaW50ZXJzZWN0aW9uT2YpIHtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGk+IGFuZCA8L2k+XG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIGdldENsYXNzRXhwcmVzc2lvbkpTWChwYXJlbnRFbnRpdHksIGxpbmtlZEVudGl0aWVzLCBlbGVtLCBhcGksIHNob3dCYWRnZXMpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsZW1lbnRzLnB1c2goXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1uZXV0cmFsLWRlZmF1bHRcIj5cbiAgICAgICAgICAgICAgICAgICAgJiM0MTtcbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmVzdWx0ID0gKFxuICAgICAgICAgICAgICAgIDxzcGFuPntlbGVtZW50cy5tYXAoKGVsZW0pID0+IDxzcGFuIGtleT17cmFuZG9tU3RyaW5nKCl9PntlbGVtfTwvc3Bhbj4pfTwvc3Bhbj5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodW5pb25PZi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50czogUmVhY3RFbGVtZW50W10gPSBbXG4gICAgICAgICAgICAgICAgPHNwYW4ga2V5PXtyYW5kb21TdHJpbmcoKX0gY2xhc3NOYW1lPVwidGV4dC1uZXV0cmFsLWRlZmF1bHRcIj5cbiAgICAgICAgICAgICAgICAgICAgJiM0MDtcbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBlbGVtIG9mIHVuaW9uT2YpIHtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGk+IG9yIDwvaT5cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaChcbiAgICAgICAgICAgICAgICAgICAgZ2V0Q2xhc3NFeHByZXNzaW9uSlNYKHBhcmVudEVudGl0eSwgbGlua2VkRW50aXRpZXMsIGVsZW0sIGFwaSwgc2hvd0JhZGdlcylcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxlbWVudHMucHVzaChcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LW5ldXRyYWwtZGVmYXVsdFwiPlxuICAgICAgICAgICAgICAgICAgICAmIzQxO1xuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXN1bHQgPSAoXG4gICAgICAgICAgICAgICAgPHNwYW4+e2VsZW1lbnRzLm1hcCgoZWxlbSkgPT4gPHNwYW4ga2V5PXtyYW5kb21TdHJpbmcoKX0+e2VsZW19PC9zcGFuPil9PC9zcGFuPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChoYXNWYWx1ZSkge1xuICAgICAgICAgICAgcmVzdWx0ID0gKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1gocGFyZW50RW50aXR5LCBsaW5rZWRFbnRpdGllcywgb25Qcm9wZXJ0eSwgYXBpLCBzaG93QmFkZ2VzKX1cbiAgICAgICAgICAgICAgICAgICAgPGkgc3R5bGU9e3tjb2xvcjogXCJwdXJwbGVcIn19PiB2YWx1ZSA8L2k+XG4gICAgICAgICAgICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1gocGFyZW50RW50aXR5LCBsaW5rZWRFbnRpdGllcywgYXNBcnJheShoYXNWYWx1ZSlbMF0sIGFwaSwgc2hvd0JhZGdlcyl9XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1pbkNhcmRpbmFsaXR5KSB7XG4gICAgICAgICAgICByZXN1bHQgPSAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAge2dldENsYXNzRXhwcmVzc2lvbkpTWChwYXJlbnRFbnRpdHksIGxpbmtlZEVudGl0aWVzLCBvblByb3BlcnR5LCBhcGksIHNob3dCYWRnZXMpfVxuICAgICAgICAgICAgICAgICAgICA8aSBzdHlsZT17e2NvbG9yOiBcInB1cnBsZVwifX0+IG1pbiA8L2k+XG4gICAgICAgICAgICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1gocGFyZW50RW50aXR5LCBsaW5rZWRFbnRpdGllcywgYXNBcnJheShtaW5DYXJkaW5hbGl0eSlbMF0sIGFwaSwgc2hvd0JhZGdlcyl9XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1heENhcmRpbmFsaXR5KSB7XG4gICAgICAgICAgICByZXN1bHQgPSAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAge2dldENsYXNzRXhwcmVzc2lvbkpTWChwYXJlbnRFbnRpdHksIGxpbmtlZEVudGl0aWVzLCBvblByb3BlcnR5LCBhcGksIHNob3dCYWRnZXMpfVxuICAgICAgICAgICAgICAgICAgICA8aSBzdHlsZT17e2NvbG9yOiBcInB1cnBsZVwifX0+IG1heCA8L2k+XG4gICAgICAgICAgICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1gocGFyZW50RW50aXR5LCBsaW5rZWRFbnRpdGllcywgYXNBcnJheShtYXhDYXJkaW5hbGl0eSlbMF0sIGFwaSwgc2hvd0JhZGdlcyl9XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNhcmRpbmFsaXR5KSB7XG4gICAgICAgICAgICByZXN1bHQgPSAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAge2dldENsYXNzRXhwcmVzc2lvbkpTWChwYXJlbnRFbnRpdHksIGxpbmtlZEVudGl0aWVzLCBvblByb3BlcnR5LCBhcGksIHNob3dCYWRnZXMpfVxuICAgICAgICAgICAgICAgICAgICA8aSBzdHlsZT17e2NvbG9yOiBcInB1cnBsZVwifX0+IGV4YWN0bHkgPC9pPlxuICAgICAgICAgICAgICAgICAgICB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKHBhcmVudEVudGl0eSwgbGlua2VkRW50aXRpZXMsIGFzQXJyYXkoY2FyZGluYWxpdHkpWzBdLCBhcGksIHNob3dCYWRnZXMpfVxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChoYXNTZWxmKSB7XG4gICAgICAgICAgICByZXN1bHQgPSAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAge2dldENsYXNzRXhwcmVzc2lvbkpTWChwYXJlbnRFbnRpdHksIGxpbmtlZEVudGl0aWVzLCBvblByb3BlcnR5LCBhcGksIHNob3dCYWRnZXMpfVxuICAgICAgICAgICAgICAgICAgICA8aSBzdHlsZT17e2NvbG9yOiBcInB1cnBsZVwifX0+IFNlbGYgPC9pPlxuICAgICAgICAgICAgICAgICAgICB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKHBhcmVudEVudGl0eSwgbGlua2VkRW50aXRpZXMsIGFzQXJyYXkoaGFzU2VsZilbMF0sIGFwaSwgc2hvd0JhZGdlcyl9XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNvbXBsZW1lbnRPZikge1xuICAgICAgICAgICAgcmVzdWx0ID0gKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIDxpPm5vdCA8L2k+XG4gICAgICAgICAgICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1gocGFyZW50RW50aXR5LCBsaW5rZWRFbnRpdGllcywgYXNBcnJheShjb21wbGVtZW50T2YpWzBdLCBhcGksIHNob3dCYWRnZXMpfVxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChvbmVPZi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50czogUmVhY3RFbGVtZW50W10gPSBbXG4gICAgICAgICAgICAgICAgPHNwYW4ga2V5PXtyYW5kb21TdHJpbmcoKX0gY2xhc3NOYW1lPVwidGV4dC1uZXV0cmFsLWRlZmF1bHRcIj5cbiAgICAgICAgICAgICAgICAgICAgJiMxMjM7XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZWxlbSBvZiBvbmVPZikge1xuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBrZXk9e3JhbmRvbVN0cmluZygpfSBjbGFzc05hbWU9XCJ0ZXh0LW5ldXRyYWwtZGVmYXVsdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAmIzQ0OyZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICBnZXRDbGFzc0V4cHJlc3Npb25KU1gocGFyZW50RW50aXR5LCBsaW5rZWRFbnRpdGllcywgZWxlbSwgYXBpLCBzaG93QmFkZ2VzKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbGVtZW50cy5wdXNoKFxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtbmV1dHJhbC1kZWZhdWx0XCI+XG4gICAgICAgICAgICAgICAgICAgICYjMTI1O1xuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXN1bHQgPSAoXG4gICAgICAgICAgICAgICAgPHNwYW4+e2VsZW1lbnRzLm1hcCgoZWxlbSkgPT4gPHNwYW4ga2V5PXtyYW5kb21TdHJpbmcoKX0+e2VsZW19PC9zcGFuPil9PC9zcGFuPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpbnZlcnNlT2YpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICA8aSBzdHlsZT17e2NvbG9yOiBcInB1cnBsZVwifX0+aW52ZXJzZSA8L2k+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGtleT17cmFuZG9tU3RyaW5nKCl9IGNsYXNzTmFtZT1cInRleHQtbmV1dHJhbC1kZWZhdWx0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgJiM0MDtcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKHBhcmVudEVudGl0eSwgbGlua2VkRW50aXRpZXMsIGludmVyc2VPZiwgYXBpLCBzaG93QmFkZ2VzKX1cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4ga2V5PXtyYW5kb21TdHJpbmcoKX0gY2xhc3NOYW1lPVwidGV4dC1uZXV0cmFsLWRlZmF1bHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAmIzQxO1xuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBCdWlsZHMgYW5kIHJldHVybnMgYW4gYXJyYXkgb2Ygc2VjdGlvbiBsaXN0IGVsZW1lbnRzIHNwZWNpZmllZCBhdCBgY3VycmVudFJlc3BvbnNlUGF0aGBcbiAqIEBwYXJhbSBwYXJlbnRFbnRpdHlcbiAqIEBwYXJhbSBsaW5rZWRFbnRpdGllc1xuICogQHBhcmFtIGFycmF5XG4gKiBAcGFyYW0gYXBpXG4gKiBAcGFyYW0gc2hvd0JhZGdlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VjdGlvbkxpc3RKU1gocGFyZW50RW50aXR5OiBUaGluZywgbGlua2VkRW50aXRpZXM6IExpbmtlZEVudGl0aWVzLCBhcnJheTogYW55W10sIGFwaTogc3RyaW5nLCBzaG93QmFkZ2VzOiBib29sZWFuID0gREVGQVVMVF9TSE9XX0JBREdFUyk6IFJlYWN0RWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICAgIHthcnJheS5sZW5ndGggPT09IDEgPyAoXG4gICAgICAgICAgICAgICAgPHA+e2dldENsYXNzRXhwcmVzc2lvbkpTWChwYXJlbnRFbnRpdHksIHBhcmVudEVudGl0eS5nZXRMaW5rZWRFbnRpdGllcygpLCBhcnJheVswXSwgYXBpLCBzaG93QmFkZ2VzKX08L3A+XG4gICAgICAgICAgICApIDpcbiAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGFycmF5Lm1hcCgoaXRlbTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDxsaSBrZXk9e3JhbmRvbVN0cmluZygpfSA+e2dldENsYXNzRXhwcmVzc2lvbkpTWChwYXJlbnRFbnRpdHksIHBhcmVudEVudGl0eS5nZXRMaW5rZWRFbnRpdGllcygpLCBpdGVtLCBhcGksIHNob3dCYWRnZXMpfTwvbGk+KTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3VsPn1cbiAgICAgICAgPC8+XG4gICAgKTtcbn1cblxuLyoqXG4gKiBJbnNlcnRzIGxpbmtzIGludG8gdGV4dCAocG90ZW50aWFsbHkgd2l0aCBsYWJlbCBpbnN0ZWFkIG9mIGxpbmsgZGlzcGxheWVkIGlmIGxpbmsgZXhpc3RzIGFzIGtleSBpbnNpZGUgbGlua2VkRW50aXRpZXMpIGFuZCByZXR1cm5zIHRoZSByZXN1bHRpbmcgSlNYIGVsZW1lbnRcbiAqIEBwYXJhbSBwYXJlbnRFbnRpdHkgdGhlIGVudGl0eSBvYmplY3QgcG9zc2Vzc2luZyB0aGUgd2hvbGUgcmVzcG9uc2Ugb2JqZWN0XG4gKiBAcGFyYW0gdGV4dCB0aGUgdGV4dCB0byBpbnNlcnQgbGlua3MgaW50b1xuICogQHBhcmFtIGxpbmtlZEVudGl0aWVzIHRoZSBsaW5rZWRFbnRpdGllcyBvYmplY3QgKGlmIHVuZGVmaW5lZCwgbm8gbGFiZWxzIGFyZSBpbmZlcnJlZClcbiAqIEBwYXJhbSBhcGkgdGhlIGFwaSB1c2VkIHRvIGV4dHJhY3QgdGhlIGZyb250ZW5kIGFwaSB0byBsaW5rIHRvIGxpbmtlZCBlbnRpdHkgKG5lY2Vzc2FyeSBmb3IgY2FsbCB0byBnZXRFbnRpdHlMaW5rSlNYKCkpXG4gKiBAcGFyYW0gc2hvd0JhZGdlcyBib29sZWFuIHdoaWNoIGluZGljYXRlcyBpZiBiYWRnZXMgc2hvdWxkIGJlIHNob3duXG4gKi9cbmZ1bmN0aW9uIGFkZExpbmtzVG9UZXh0KHBhcmVudEVudGl0eTogVGhpbmcsIHRleHQ6IHN0cmluZywgbGlua2VkRW50aXRpZXM6IExpbmtlZEVudGl0aWVzIHwgdW5kZWZpbmVkLCBhcGk6IHN0cmluZywgc2hvd0JhZGdlczogYm9vbGVhbiA9IERFRkFVTFRfU0hPV19CQURHRVMpIHtcbiAgICBjb25zdCBsaW5rc1RvU3BsaWNlOiBBcnJheTx7IHN0YXJ0OiBudW1iZXI7IGVuZDogbnVtYmVyOyBsaW5rOiBSZWFjdEVsZW1lbnQgfT4gPVxuICAgICAgICBbXTtcblxuICAgIGlmKGxpbmtlZEVudGl0aWVzKSB7XG4gICAgICAgIGZvciAoY29uc3QgZW50aXR5SWQgb2YgT2JqZWN0LmtleXMobGlua2VkRW50aXRpZXMubGlua2VkRW50aXRpZXMpKSB7XG4gICAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgICAgIGxldCBuID0gdGV4dC5pbmRleE9mKGVudGl0eUlkLCAwKTtcbiAgICAgICAgICAgICAgICBuICE9PSAtMTtcbiAgICAgICAgICAgICAgICBuID0gdGV4dC5pbmRleE9mKGVudGl0eUlkLCBuKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgbGlua3NUb1NwbGljZS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IG4sXG4gICAgICAgICAgICAgICAgICAgIGVuZDogbiArIGVudGl0eUlkLmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgbGluazogZ2V0RW50aXR5TGlua0pTWChwYXJlbnRFbnRpdHksIGxpbmtlZEVudGl0aWVzLCBlbnRpdHlJZCwgYXBpLCBzaG93QmFkZ2VzKSxcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIG4gKz0gZW50aXR5SWQubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgdXJsUmUgPSAvW0Etel0rOlxcL1xcL1teXFxzXSsvZztcbiAgICBmb3IgKGxldCBtYXRjaCA9IHVybFJlLmV4ZWModGV4dCk7IG1hdGNoOyBtYXRjaCA9IHVybFJlLmV4ZWModGV4dCkpIHtcbiAgICAgICAgY29uc3QgdXJsID0gbWF0Y2hbMF07XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiZm91bmQgbWF0Y2ggXCIgKyB1cmwpO1xuXG4gICAgICAgIGxpbmtzVG9TcGxpY2UucHVzaCh7XG4gICAgICAgICAgICBzdGFydDogbWF0Y2guaW5kZXgsXG4gICAgICAgICAgICBlbmQ6IG1hdGNoLmluZGV4ICsgdXJsLmxlbmd0aCxcbiAgICAgICAgICAgIGxpbms6IChcbiAgICAgICAgICAgICAgICA8c3BhbiBrZXk9e3JhbmRvbVN0cmluZygpfT5cbiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj17dXJsfT57dXJsfTwvYT5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICApLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBsaW5rc1RvU3BsaWNlLnNvcnQoKGEsYikgPT4gYS5zdGFydCAtIGIuc3RhcnQpO1xuXG4gICAgcmVtb3ZlT3ZlcmxhcHBpbmc6IGZvciAobGV0IG4gPSAwOyBuIDwgbGlua3NUb1NwbGljZS5sZW5ndGg7ICkge1xuICAgICAgICBmb3IgKGxldCBuMiA9IG4gKyAxOyBuMiA8IGxpbmtzVG9TcGxpY2UubGVuZ3RoOyArK24yKSB7XG4gICAgICAgICAgICBjb25zdCBzcGxpY2VBID0gbGlua3NUb1NwbGljZVtuXTtcbiAgICAgICAgICAgIGNvbnN0IHNwbGljZUIgPSBsaW5rc1RvU3BsaWNlW24yXTtcblxuICAgICAgICAgICAgaWYgKHNwbGljZUEgPT09IHNwbGljZUIpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAvLyBUaGUgc3BsaWNlcyBvdmVybGFwIGlmIG5laXRoZXIgZW5kcyBiZWZvcmUgdGhlIG90aGVyIHN0YXJ0c1xuICAgICAgICAgICAgaWYgKHNwbGljZUEuZW5kID49IHNwbGljZUIuc3RhcnQgJiYgc3BsaWNlQi5lbmQgPj0gc3BsaWNlQS5zdGFydCkge1xuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiUmVtb3Zpbmcgb3ZlcmxhcHBpbmdcIik7XG5cbiAgICAgICAgICAgICAgICAvLyByZW1vdmUgdGhlIHNob3J0ZXIgbGluayBvZiBib3RoXG4gICAgICAgICAgICAgICAgaWYoc3BsaWNlQS5lbmQgLSBzcGxpY2VBLnN0YXJ0IDwgc3BsaWNlQi5lbmQgLSBzcGxpY2VCLnN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgIGxpbmtzVG9TcGxpY2Uuc3BsaWNlKG4sIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbGlua3NUb1NwbGljZS5zcGxpY2UobjIsIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb250aW51ZSByZW1vdmVPdmVybGFwcGluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICArK247XG4gICAgfVxuXG4gICAgaWYgKGxpbmtzVG9TcGxpY2UubGVuZ3RoID09PSAwKSByZXR1cm4gPD57dGV4dH08Lz47XG5cbiAgICBjb25zdCByZXM6IFJlYWN0RWxlbWVudFtdID0gW107XG4gICAgbGV0IG4gPSAwO1xuXG4gICAgZm9yIChjb25zdCBsaW5rIG9mIGxpbmtzVG9TcGxpY2UpIHtcbiAgICAgICAgcmVzLnB1c2goXG4gICAgICAgICAgICA8c3BhbiBrZXk9e3JhbmRvbVN0cmluZygpfT5cbiAgICAgICAgICAgICAgICB7dGV4dC5zdWJzdHJpbmcobiwgbGluay5zdGFydCl9XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICk7XG4gICAgICAgIHJlcy5wdXNoKGxpbmsubGluayk7XG4gICAgICAgIG4gPSBsaW5rLmVuZDtcbiAgICB9XG4gICAgcmVzLnB1c2goXG4gICAgICAgIDxzcGFuIGtleT17cmFuZG9tU3RyaW5nKCl9Pnt0ZXh0LnNsaWNlKG4pfTwvc3Bhbj5cbiAgICApO1xuXG4gICAgcmV0dXJuIDw+e3Jlc308Lz47XG59XG5cblxuLyoqXG4gKiBSZW5kZXJzIGEgZ2l2ZW4gUmVpZmllZFxuICogQHBhcmFtIGVudGl0eSB0aGUgZW50aXR5IHRoZSBSZWlmaWVkIGV4aXN0cyBpblxuICogQHBhcmFtIHJlaWZpZWQgdGhlIFJlaWZpZWRcbiAqIEBwYXJhbSBhcGkgdGhlIGFwaSB1c2VkIHRvIGV4dHJhY3QgdGhlIGZyb250ZW5kIGFwaSB0byBsaW5rIHRvIGxpbmtlZCBlbnRpdGllc1xuICogQHBhcmFtIHNob3dCYWRnZXMgYm9vbGVhbiB3aGljaCBpbmRpY2F0ZXMgaWYgYmFkZ2VzIHNob3VsZCBiZSBzaG93blxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVpZmllZEpTWChlbnRpdHk6IFRoaW5nLCByZWlmaWVkOiBSZWlmaWVkPGFueT4sIGFwaTogc3RyaW5nLCBzaG93QmFkZ2VzOiBib29sZWFuID0gREVGQVVMVF9TSE9XX0JBREdFUyk6IFJlYWN0RWxlbWVudCB7XG4gICAgZnVuY3Rpb24gZ2V0VmFsdWVKU1godmFsdWU6IFJlaWZpZWQ8YW55Pik6IFJlYWN0RWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGxpbmtlZEVudGl0aWVzID0gZW50aXR5LmdldExpbmtlZEVudGl0aWVzKCk7XG5cbiAgICAgICAgLy8gbGlua2VkRW50aXRpZXMgbm90IGV4aXN0ZW50IG9uIGVudGl0eSAoLT4gcHJvYmFibHkgbGVnYWN5IGFwaSB2ZXJzaW9uKVxuICAgICAgICBpZihPYmplY3Qua2V5cyhsaW5rZWRFbnRpdGllcy5saW5rZWRFbnRpdGllcykubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgIGlmKHR5cGVvZiB2YWx1ZS52YWx1ZSA9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFkZExpbmtzVG9UZXh0KGVudGl0eSwgdmFsdWUudmFsdWUudG9TdHJpbmcoKSwgdW5kZWZpbmVkLCBhcGksIHNob3dCYWRnZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gVE9ETzogc2hvdWxkIG5vdCBoYXBwZW4sIHByb3ZlIHRoYXQgdGhpcyBpcyBuZXZlciB0aGUgY2FzZVxuICAgICAgICAgICAgICAgIHJldHVybiA8PntKU09OLnN0cmluZ2lmeSh2YWx1ZS52YWx1ZSl9PC8+O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbGlua2VkRW50aXR5ID0gbGlua2VkRW50aXRpZXMuZ2V0KHZhbHVlLnZhbHVlKTtcblxuICAgICAgICAgICAgaWYgKGxpbmtlZEVudGl0eSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBnZXRFbnRpdHlMaW5rSlNYKGVudGl0eSwgbGlua2VkRW50aXRpZXMsIHZhbHVlLnZhbHVlLCBhcGksIHNob3dCYWRnZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZS52YWx1ZSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICBpZihlbnRpdHkuZ2V0VHlwZSgpID09IFwib250b2xvZ3lcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDw+e0pTT04uc3RyaW5naWZ5KHZhbHVlLnZhbHVlKX08Lz47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0Q2xhc3NFeHByZXNzaW9uSlNYKGVudGl0eSwgbGlua2VkRW50aXRpZXMsIHZhbHVlLnZhbHVlLCBhcGksIHNob3dCYWRnZXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWRkTGlua3NUb1RleHQoZW50aXR5LCB2YWx1ZS52YWx1ZS50b1N0cmluZygpLCBsaW5rZWRFbnRpdGllcywgYXBpLCBzaG93QmFkZ2VzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8PlxuICAgICAgICAgICAge2dldFZhbHVlSlNYKHJlaWZpZWQpfVxuICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICB7cmVpZmllZC5oYXNNZXRhZGF0YSgpICYmIGdldEF4aW9tc0luZm9ybWF0aW9uSlNYKGVudGl0eSwgcmVpZmllZC5nZXRNZXRhZGF0YSgpKX1cbiAgICAgICAgPC8+XG4gICAgKTtcbn0iLCAiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtFdWlCdXR0b24sIEV1aVByb3ZpZGVyfSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQge0pzb25BcGlXaWRnZXRQcm9wc30gZnJvbSBcIi4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcbmltcG9ydCB7UXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXJ9IGZyb20gXCJyZWFjdC1xdWVyeVwiO1xuXG5mdW5jdGlvbiBKc29uQXBpV2lkZ2V0KHByb3BzOiBKc29uQXBpV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgeyBhcGlRdWVyeSwgYnV0dG9uVGV4dCwgYnV0dG9uU2l6ZSB9ID0gcHJvcHM7XG5cbiAgcmV0dXJuIChcbiAgICA8RXVpQnV0dG9uIGhyZWY9e2FwaVF1ZXJ5fSB0YXJnZXQ9XCJfYmxhbmtcIiBzaXplPXtidXR0b25TaXplIHx8IFwibVwifT57YnV0dG9uVGV4dH08L0V1aUJ1dHRvbj5cbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlSnNvbkFwaShwcm9wczogSnNvbkFwaVdpZGdldFByb3BzLCBjb250YWluZXI6IEVsZW1lbnQsIGNhbGxiYWNrPzogKCk9PnZvaWQpIHtcbiAgUmVhY3RET00ucmVuZGVyKFdyYXBwZWRKc29uQXBpV2lkZ2V0KHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIFdyYXBwZWRKc29uQXBpV2lkZ2V0KHByb3BzOiBKc29uQXBpV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTtcbiAgcmV0dXJuIChcbiAgICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgICA8SnNvbkFwaVdpZGdldFxuICAgICAgICAgICAgICBhcGlRdWVyeT17cHJvcHMuYXBpUXVlcnl9XG4gICAgICAgICAgICAgIGJ1dHRvblRleHQ9e3Byb3BzLmJ1dHRvblRleHR9XG4gICAgICAgICAgICAgIGJ1dHRvblNpemU9e3Byb3BzLmJ1dHRvblNpemV9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICAgICAgPC9FdWlQcm92aWRlcj5cbiAgKVxufVxuXG5leHBvcnQgeyBKc29uQXBpV2lkZ2V0LCBjcmVhdGVKc29uQXBpIH07XG4iLCAiaW1wb3J0IFJlYWN0LCB7UmVhY3RFbGVtZW50fSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7RXVpQ2FyZCwgRXVpRmxleEl0ZW0sIEV1aUxvYWRpbmdTcGlubmVyLCBFdWlQcm92aWRlciwgRXVpU3BhY2VyLCBFdWlUZXh0fSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQge1F1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyLCB1c2VRdWVyeX0gZnJvbSBcInJlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQgeyBPbHNBcGkgfSBmcm9tIFwiLi4vLi4vLi4vYXBpL09sc0FwaVwiO1xuaW1wb3J0IHtPbnRvbG9neSwgVGhpbmd9IGZyb20gXCIuLi8uLi8uLi9tb2RlbC9pbnRlcmZhY2VzXCI7XG5pbXBvcnQge2NhcGl0YWxpemUsIGRlQ2FtZWxDYXNlLCBkZVVuZGVyc2NvcmUsIHJhbmRvbVN0cmluZ30gZnJvbSBcIi4uLy4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQge2dldEVudGl0eUxpbmtKU1gsIGdldFJlaWZpZWRKU1h9IGZyb20gXCIuLi8uLi8uLi9tb2RlbC9TdHJ1Y3R1cmVSZW5kZXJpbmdcIjtcbmltcG9ydCB7Z2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5fSBmcm9tIFwiLi4vLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCB7T250b2xvZ3lJbmZvV2lkZ2V0UHJvcHN9IGZyb20gXCIuLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5cbmNvbnN0IERFRkFVTFRfSEFTX1RJVExFID0gdHJ1ZTtcblxuZnVuY3Rpb24gT250b2xvZ3lJbmZvV2lkZ2V0KHByb3BzOiBPbnRvbG9neUluZm9XaWRnZXRQcm9wcykge1xuICBjb25zdCB7IG9udG9sb2d5SWQsIGFwaSwgcGFyYW1ldGVyLCBoYXNUaXRsZSA9IERFRkFVTFRfSEFTX1RJVExFLCB1c2VMZWdhY3ksIHNob3dCYWRnZXMsIC4uLnJlc3QgfSA9IHByb3BzO1xuICBjb25zdCBvbHNBcGkgPSBuZXcgT2xzQXBpKGFwaSk7XG5cbiAgY29uc3Qge1xuICAgIGRhdGE6IG9udG9sb2d5LFxuICAgIGlzTG9hZGluZzogaXNMb2FkaW5nT250b2xvZ3ksXG4gICAgaXNTdWNjZXNzOiBpc1N1Y2Nlc3NPbnRvbG9neSxcbiAgICBpc0Vycm9yOiBpc0Vycm9yT250b2xvZ3ksXG4gICAgZXJyb3I6IGVycm9yT250b2xvZ3ksXG4gIH0gPSB1c2VRdWVyeShcbiAgICAgIFtcbiAgICAgICAgXCJvbnRvbG9neUluZm9cIixcbiAgICAgICAgcHJvcHNcbiAgICAgIF0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHJldHVybiBvbHNBcGkuZ2V0T250b2xvZ3lPYmplY3Qob250b2xvZ3lJZCwgcGFyYW1ldGVyLCB1c2VMZWdhY3kpO1xuICAgICAgfVxuICApO1xuXG4gIGZ1bmN0aW9uIGdldE9udG9sb2d5SXJpU2VjdGlvbihvbnRvbG9neTogT250b2xvZ3kpOiBSZWFjdEVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICAgIDw+XG4gICAgICAgICAgeyhvbnRvbG9neS5nZXRJcmkoKSB8fCBvbnRvbG9neS5nZXRPbnRvbG9neVB1cmwoKSkgJiZcbiAgICAgICAgICAgICAgPEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgIDxiPk9udG9sb2d5IElSSTo8L2I+XG4gICAgICAgICAgICAgICAgPHA+PGEgaWQ9e1wib250b2xvZ3lJcmlcIn0gaHJlZj17b250b2xvZ3kuZ2V0SXJpKCkgfHwgb250b2xvZ3kuZ2V0T250b2xvZ3lQdXJsKCl9PlxuICAgICAgICAgICAgICAgICAge29udG9sb2d5LmdldElyaSgpIHx8IG9udG9sb2d5LmdldE9udG9sb2d5UHVybCgpfVxuICAgICAgICAgICAgICAgIDwvYT48L3A+XG4gICAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICAgfVxuICAgICAgICA8Lz5cbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0VmVyc2lvbklyaVNlY3Rpb24ob250b2xvZ3k6IE9udG9sb2d5KSA6IFJlYWN0RWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICB7b250b2xvZ3kuZ2V0VmVyc2lvbklyaSgpICYmXG4gICAgICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICA8Yj5WZXJzaW9uIElSSTo8L2I+XG4gICAgICAgICAgICAgICAgPHA+PGEgaWQ9e1widmVyc2lvbklyaVwifSBocmVmPXtvbnRvbG9neS5nZXRWZXJzaW9uSXJpKCl9PlxuICAgICAgICAgICAgICAgICAge29udG9sb2d5LmdldFZlcnNpb25JcmkoKX1cbiAgICAgICAgICAgICAgICA8L2E+PC9wPlxuICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICAgIH1cbiAgICAgICAgPC8+XG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldExhc3RMb2FkU2VjdGlvbihvbnRvbG9neTogT250b2xvZ3kpIDogUmVhY3RFbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgICA8PlxuICAgICAgICAgIHtvbnRvbG9neS5nZXRTb3VyY2VGaWxlVGltZXN0YW1wKCkgJiZcbiAgICAgICAgICAgICAgPEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgIDxiPkxhc3QgbG9hZGVkOjwvYj5cbiAgICAgICAgICAgICAgICA8cD57bmV3IERhdGUob250b2xvZ3kuZ2V0U291cmNlRmlsZVRpbWVzdGFtcCgpKS50b1N0cmluZygpfTwvcD5cbiAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgICB9XG4gICAgICAgIDwvPlxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRPbnRvbG9neUlkU2VjdGlvbihvbnRvbG9neTogT250b2xvZ3kpIDogUmVhY3RFbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgICA8PlxuICAgICAgICAgIHtvbnRvbG9neS5nZXRPbnRvbG9neUlkKCkgJiZcbiAgICAgICAgICAgICAgPEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgIDxiPk9udG9sb2d5IElEOjwvYj5cbiAgICAgICAgICAgICAgICA8cD57b250b2xvZ3kuZ2V0T250b2xvZ3lJZCgpfTwvcD5cbiAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgICB9XG4gICAgICAgIDwvPlxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRWZXJzaW9uU2VjdGlvbihvbnRvbG9neTogT250b2xvZ3kpIDogUmVhY3RFbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgICA8PlxuICAgICAgICAgIHtvbnRvbG9neS5nZXRWZXJzaW9uKCkgJiZcbiAgICAgICAgICAgICAgPEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgIDxiPlZlcnNpb246PC9iPlxuICAgICAgICAgICAgICAgIDxwPntvbnRvbG9neS5nZXRWZXJzaW9uKCl9PC9wPlxuICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICAgIH1cbiAgICAgICAgPC8+XG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldE51bUNsYXNzZXNTZWN0aW9uKG9udG9sb2d5OiBPbnRvbG9neSkgOiBSZWFjdEVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICAgIDw+XG4gICAgICAgICAge29udG9sb2d5LmdldE51bUNsYXNzZXMoKSAmJlxuICAgICAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgPGI+TnVtYmVyIG9mIGNsYXNzZXM6PC9iPlxuICAgICAgICAgICAgICAgIDxwPntvbnRvbG9neS5nZXROdW1DbGFzc2VzKCkudG9Mb2NhbGVTdHJpbmcoKX08L3A+XG4gICAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICAgfVxuICAgICAgICA8Lz5cbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0Q3JlYXRvcnNTZWN0aW9uKG9udG9sb2d5OiBPbnRvbG9neSkgOiBSZWFjdEVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICAgIDw+XG4gICAgICAgICAge29udG9sb2d5LmdldENyZWF0b3JzKCkubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICA8PjxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICA8Yj5DcmVhdG9yczo8L2I+XG4gICAgICAgICAgICAgICAge29udG9sb2d5LmdldENyZWF0b3JzKCkubGVuZ3RoID4gMSA/XG4gICAgICAgICAgICAgICAgICAgIDx1bD57b250b2xvZ3kuZ2V0Q3JlYXRvcnMoKS5tYXAoKGNyZWF0b3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPGxpIGtleT17Y3JlYXRvciArIHJhbmRvbVN0cmluZygpfT57Z2V0RW50aXR5TGlua0pTWChvbnRvbG9neSwgb250b2xvZ3kuZ2V0TGlua2VkRW50aXRpZXMoKSwgY3JlYXRvciwgYXBpLCBzaG93QmFkZ2VzKX08L2xpPlxuICAgICAgICAgICAgICAgICAgICB9KX08L3VsPiA6XG4gICAgICAgICAgICAgICAgICAgIDxwPntnZXRFbnRpdHlMaW5rSlNYKG9udG9sb2d5LCBvbnRvbG9neS5nZXRMaW5rZWRFbnRpdGllcygpLCBvbnRvbG9neS5nZXRDcmVhdG9ycygpWzBdLCBhcGksIHNob3dCYWRnZXMpfTwvcD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+PEV1aVNwYWNlci8+PC8+XG4gICAgICAgICAgfVxuICAgICAgICA8Lz5cbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0QW5ub3RhdGlvblNlY3Rpb24odGhpbmc6IFRoaW5nKSA6IFJlYWN0RWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICB7dGhpbmcuZ2V0QW5ub3RhdGlvblByZWRpY2F0ZXMoKS5tYXAoKGFubm9LZXkpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhbm5vcyA9IHRoaW5nLmdldEFubm90YXRpb25CeUlkKGFubm9LZXkpO1xuICAgICAgICAgICAgICAgIGlmKGFubm9zLmxlbmd0aCA9PSAwKSByZXR1cm4gPD48Lz47XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gPEV1aUZsZXhJdGVtIGdyb3c9e2ZhbHNlfSBrZXk9e2Fubm9LZXl9PlxuICAgICAgICAgICAgICAgICAgPGI+e2NhcGl0YWxpemUoZGVVbmRlcnNjb3JlKGRlQ2FtZWxDYXNlKHRoaW5nLmdldEFubm90YXRpb25UaXRsZUJ5SWQoYW5ub0tleSkpKSl9OjwvYj5cbiAgICAgICAgICAgICAgICAgIHthbm5vcy5sZW5ndGggPiAxID9cbiAgICAgICAgICAgICAgICAgICAgICA8dWw+e2Fubm9zLm1hcCgoYW5ub3RhdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxsaSBrZXk9e3JhbmRvbVN0cmluZygpfSBpZD17YW5ub3RhdGlvbi52YWx1ZX0+e2dldFJlaWZpZWRKU1godGhpbmcsIGFubm90YXRpb24sIGFwaSwgc2hvd0JhZGdlcyl9PC9saT47XG4gICAgICAgICAgICAgICAgICAgICAgfSl9PC91bD4gOlxuICAgICAgICAgICAgICAgICAgICAgIDxwIGtleT17cmFuZG9tU3RyaW5nKCl9PntnZXRSZWlmaWVkSlNYKHRoaW5nLCBhbm5vc1swXSwgYXBpLCBzaG93QmFkZ2VzKX08L3A+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICl9XG4gICAgICAgIDwvPlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAgPEV1aUNhcmRcbiAgICAgICAgICAgIHRpdGxlPXtoYXNUaXRsZSA/IFwiT250b2xvZ3kgSW5mb3JtYXRpb25cIiA6IFwiXCJ9XG4gICAgICAgICAgICBsYXlvdXQ9XCJob3Jpem9udGFsXCJcbiAgICAgICAgPlxuXG4gICAgICAgICAge2lzTG9hZGluZ09udG9sb2d5ICYmIDxFdWlMb2FkaW5nU3Bpbm5lciBzaXplPXsncyd9Lz59XG4gICAgICAgICAge2lzU3VjY2Vzc09udG9sb2d5ICYmIG9udG9sb2d5ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgPEV1aVRleHQgey4uLnJlc3R9PlxuXG4gICAgICAgICAgICAgICAge2dldE9udG9sb2d5SXJpU2VjdGlvbihvbnRvbG9neSl9XG4gICAgICAgICAgICAgICAge2dldFZlcnNpb25JcmlTZWN0aW9uKG9udG9sb2d5KX1cbiAgICAgICAgICAgICAgICB7Z2V0TGFzdExvYWRTZWN0aW9uKG9udG9sb2d5KX1cbiAgICAgICAgICAgICAgICB7LyogVE9ETzogRG8gd2Ugd2FudCB0aGUgZm9sbG93aW5nIG9uIHRoZSBpbmZvcm1hdGlvbiB3aWRnZXQ/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFYmkgZG9lcyBub3QgaGF2ZSB0aGVtIHRoZXJlLCBidXQgb24gb3RoZXIgcGFydHMgb2YgdGhlIGVudGl0eSBwYWdlICovXG4gICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICB7Z2V0T250b2xvZ3lJZFNlY3Rpb24ob250b2xvZ3kpfVxuICAgICAgICAgICAgICAgICAgICB7Z2V0VmVyc2lvblNlY3Rpb24ob250b2xvZ3kpfVxuICAgICAgICAgICAgICAgICAgICB7Z2V0TnVtQ2xhc3Nlc1NlY3Rpb24ob250b2xvZ3kpfVxuICAgICAgICAgICAgICAgICAgICB7Lyp7Z2V0Q3JlYXRvcnNTZWN0aW9uKGVudGl0eUluZm8pfSovIC8qIHJlZHVuZGFudCBhcyBpdCdzIGxpc3RlZCBpbiBhbm5vdGF0aW9ucyBhbnl3YXkgKi99XG4gICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB7Z2V0QW5ub3RhdGlvblNlY3Rpb24ob250b2xvZ3kpfVxuICAgICAgICAgICAgICA8L0V1aVRleHQ+XG4gICAgICAgICAgfVxuICAgICAgICAgIHtpc0Vycm9yT250b2xvZ3kgJiYgPEV1aVRleHQ+e2dldEVycm9yTWVzc2FnZVRvRGlzcGxheShlcnJvck9udG9sb2d5LCBcImluZm9ybWF0aW9uXCIpfTwvRXVpVGV4dD59XG4gICAgICAgIDwvRXVpQ2FyZD5cbiAgICAgIDwvPlxuICApO1xuXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU9udG9sb2d5SW5mbyhwcm9wczogT250b2xvZ3lJbmZvV2lkZ2V0UHJvcHMsIGNvbnRhaW5lcjogRWxlbWVudCwgY2FsbGJhY2s/OiAoKT0+dm9pZCkge1xuICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZE9udG9sb2d5SW5mb1dpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkT250b2xvZ3lJbmZvV2lkZ2V0KHByb3BzOiBPbnRvbG9neUluZm9XaWRnZXRQcm9wcykge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gKFxuICAgICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCI+XG4gICAgICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgICAgIDxPbnRvbG9neUluZm9XaWRnZXRcbiAgICAgICAgICAgICAgb250b2xvZ3lJZD17cHJvcHMub250b2xvZ3lJZH1cbiAgICAgICAgICAgICAgYXBpPXtwcm9wcy5hcGl9XG4gICAgICAgICAgICAgIHBhcmFtZXRlcj17cHJvcHMucGFyYW1ldGVyfVxuICAgICAgICAgICAgICB1c2VMZWdhY3k9e3Byb3BzLnVzZUxlZ2FjeX1cbiAgICAgICAgICAgICAgc2hvd0JhZGdlcz17cHJvcHMuc2hvd0JhZGdlc31cbiAgICAgICAgICAgICAgaGFzVGl0bGU9e3Byb3BzLmhhc1RpdGxlfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICAgIDwvRXVpUHJvdmlkZXI+XG4gIClcbn1cblxuZXhwb3J0IHsgT250b2xvZ3lJbmZvV2lkZ2V0LCBjcmVhdGVPbnRvbG9neUluZm8gfTtcbiIsICJpbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7RXVpQmFzaWNUYWJsZSwgRXVpQnV0dG9uSWNvbiwgRXVpTGluaywgQ3JpdGVyaWFXaXRoUGFnaW5hdGlvbiwgRXVpUHJvdmlkZXJ9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7UXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIsIHVzZVF1ZXJ5fSBmcm9tIFwicmVhY3QtcXVlcnlcIjtcbmltcG9ydCB7IE9sc0FwaSB9IGZyb20gXCIuLi8uLi8uLi9hcGkvT2xzQXBpXCI7XG5pbXBvcnQgeyBjc3MsIFNlcmlhbGl6ZWRTdHlsZXMgfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmltcG9ydCB7IEV1aUJhc2ljVGFibGVDb2x1bW4gfSBmcm9tIFwiQGVsYXN0aWMvZXVpL3NyYy9jb21wb25lbnRzL2Jhc2ljX3RhYmxlL2Jhc2ljX3RhYmxlXCI7XG5pbXBvcnQgeyBnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkgfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCB7T2xzUmVzb3VyY2UsIFJlc291cmNlc1dpZGdldFByb3BzfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuXG5jb25zdCBERUZBVUxUX0lOSVRJQUxfRU5UUklFU19QRVJfUEFHRSA9IDEwO1xuY29uc3QgREVGQVVMVF9QQUdFX1NJWkVfT1BUSU9OUyA9IFsxMCwgMjUsIDUwLCAxMDBdO1xuY29uc3QgREVGQVVMVF9JTklUSUFMX1NPUlRfRklFTEQgPSBcImNvbmZpZy5wcmVmZXJyZWRQcmVmaXhcIjtcbmNvbnN0IERFRkFVTFRfSU5JVElBTF9TT1JUX0RJUiA9IFwiYXNjXCIgYXMgY29uc3Q7XG5cbmZ1bmN0aW9uIFJlc291cmNlc1dpZGdldChwcm9wczogUmVzb3VyY2VzV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGFwaSxcbiAgICBpbml0aWFsRW50cmllc1BlclBhZ2UgPSBERUZBVUxUX0lOSVRJQUxfRU5UUklFU19QRVJfUEFHRSxcbiAgICBwYWdlU2l6ZU9wdGlvbnMgPSBERUZBVUxUX1BBR0VfU0laRV9PUFRJT05TLFxuICAgIGluaXRpYWxTb3J0RmllbGQgPSBERUZBVUxUX0lOSVRJQUxfU09SVF9GSUVMRCxcbiAgICBpbml0aWFsU29ydERpciA9IERFRkFVTFRfSU5JVElBTF9TT1JUX0RJUixcbiAgICB0YXJnZXRMaW5rLFxuICAgIHBhcmFtZXRlcixcbiAgfSA9IHByb3BzO1xuICBjb25zdCBvbHNBcGkgPSBuZXcgT2xzQXBpKGFwaSk7XG5cbiAgY29uc3QgW3BhZ2VJbmRleCwgc2V0UGFnZUluZGV4XSA9IHVzZVN0YXRlKDApO1xuICBjb25zdCBbZW50cmllc1BlclBhZ2UsIHNldEVudHJpZXNQZXJQYWdlXSA9IHVzZVN0YXRlKGluaXRpYWxFbnRyaWVzUGVyUGFnZSk7XG4gIGNvbnN0IFtzb3J0RmllbGQsIHNldFNvcnRGaWVsZF0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudW1iZXI+KGluaXRpYWxTb3J0RmllbGQpO1xuICBjb25zdCBbc29ydERpcmVjdGlvbiwgc2V0U29ydERpcmVjdGlvbl0gPSB1c2VTdGF0ZShpbml0aWFsU29ydERpcik7XG4gIGNvbnN0IFt0b3RhbE9udG9sb2dpZXMsIHNldFRvdGFsT250b2xvZ2llc10gPSB1c2VTdGF0ZSgwKTtcblxuXG4gIGNvbnN0IGNvbHVtbnM6IEFycmF5PEV1aUJhc2ljVGFibGVDb2x1bW48T2xzUmVzb3VyY2U+ICYge2Nzcz86U2VyaWFsaXplZFN0eWxlc30+ID0gW1xuICAgIHtcbiAgICAgIG5hbWU6IFwiUmVzb3VyY2UgTmFtZVwiLFxuICAgICAgZmllbGQ6IFwiY29uZmlnLnRpdGxlXCIsXG4gICAgICB3aWR0aDogXCIxNSVcIixcbiAgICAgIHNvcnRhYmxlOiB0cnVlLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJTaG9ydCBOYW1lXCIsXG4gICAgICBmaWVsZDogXCJjb25maWcucHJlZmVycmVkUHJlZml4XCIsXG4gICAgICByZW5kZXI6ICh2YWx1ZTogc3RyaW5nKSA9PiAoXG4gICAgICAgICAgdGFyZ2V0TGluayA/IDxFdWlMaW5rIGhyZWY9e3RhcmdldExpbmsgKyBcIm9udG9sb2dpZXMvXCIgKyB2YWx1ZS50b0xvd2VyQ2FzZSgpICsgXCIvXCJ9Pnt2YWx1ZX08L0V1aUxpbms+IDogdmFsdWVcbiAgICAgICksXG4gICAgICB3aWR0aDogXCIxMCVcIixcbiAgICAgIHNvcnRhYmxlOiB0cnVlLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJEZXNjcmlwdGlvblwiLFxuICAgICAgZmllbGQ6IFwiY29uZmlnLmRlc2NyaXB0aW9uXCIsXG4gICAgICB3aWR0aDogXCIzMCVcIixcbiAgICAgIGNzczogY3NzYFxuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgbWF4LWhlaWdodDogMjAwcHg7XG4gICAgICAgIG92ZXJmbG93OiBhdXRvO1xuICAgICAgYCxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiVmVyc2lvblwiLFxuICAgICAgZmllbGQ6IFwiY29uZmlnLnZlcnNpb25cIixcbiAgICAgIHdpZHRoOiBcIjcuNSVcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiTG9hZGVkIG9uXCIsXG4gICAgICBmaWVsZDogXCJsb2FkZWRcIixcbiAgICAgIHdpZHRoOiBcIjEwJVwiLFxuICAgICAgZGF0YVR5cGU6IFwiZGF0ZVwiIGFzIGNvbnN0LFxuICAgICAgc29ydGFibGU6IHRydWUsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcIlRlcm1zXCIsXG4gICAgICBmaWVsZDogXCJudW1iZXJPZlRlcm1zXCIsXG4gICAgICByZW5kZXI6ICh2YWx1ZTogbnVtYmVyKSA9PiA8Pnt2YWx1ZS50b0xvY2FsZVN0cmluZygpfTwvPixcbiAgICAgIHdpZHRoOiBcIjcuNSVcIixcbiAgICAgIHNvcnRhYmxlOiB0cnVlLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJQcm9wZXJ0aWVzXCIsXG4gICAgICBmaWVsZDogXCJudW1iZXJPZlByb3BlcnRpZXNcIixcbiAgICAgIHJlbmRlcjogKHZhbHVlOiBudW1iZXIpID0+IDw+e3ZhbHVlLnRvTG9jYWxlU3RyaW5nKCl9PC8+LFxuICAgICAgd2lkdGg6IFwiNy41JVwiLFxuICAgICAgc29ydGFibGU6IHRydWUsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcIkluZGl2aWR1YWxzXCIsXG4gICAgICBmaWVsZDogXCJudW1iZXJPZkluZGl2aWR1YWxzXCIsXG4gICAgICByZW5kZXI6ICh2YWx1ZTogbnVtYmVyKSA9PiA8Pnt2YWx1ZS50b0xvY2FsZVN0cmluZygpfTwvPixcbiAgICAgIHdpZHRoOiBcIjcuNSVcIixcbiAgICAgIHNvcnRhYmxlOiB0cnVlLFxuICAgIH0sXG4gICAge1xuICAgICAgd2lkdGg6IFwiNSVcIixcbiAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgLi4uKHByb3BzLmFjdGlvbnMgfHwgW10pLFxuICAgICAgICB7XG4gICAgICAgICAgcmVuZGVyOiAoaXRlbTogT2xzUmVzb3VyY2UpID0+IChcbiAgICAgICAgICAgIDxFdWlCdXR0b25JY29uXG4gICAgICAgICAgICAgIGhyZWY9e2l0ZW0uY29uZmlnLmZpbGVMb2NhdGlvbn1cbiAgICAgICAgICAgICAgaWNvblR5cGU9XCJkb3dubG9hZFwiXG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJEb3dubG9hZFwiXG4gICAgICAgICAgICAgIGlzRGlzYWJsZWQ9e1xuICAgICAgICAgICAgICAgICFpdGVtLmNvbmZpZy5hbGxvd0Rvd25sb2FkIHx8XG4gICAgICAgICAgICAgICAgaXRlbS5jb25maWcuZmlsZUxvY2F0aW9uLnN0YXJ0c1dpdGgoXCJmaWxlOi8vXCIpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgXTtcblxuICBjb25zdCBwYWdpbmF0aW9uID0ge1xuICAgIHBhZ2VJbmRleDogcGFnZUluZGV4LFxuICAgIHBhZ2VTaXplOiBlbnRyaWVzUGVyUGFnZSxcbiAgICB0b3RhbEl0ZW1Db3VudDogdG90YWxPbnRvbG9naWVzLFxuICAgIHBhZ2VTaXplT3B0aW9uczogcGFnZVNpemVPcHRpb25zLFxuICB9O1xuXG4gIGNvbnN0IHNvcnRpbmcgPSB7XG4gICAgc29ydDoge1xuICAgICAgZmllbGQ6IHNvcnRGaWVsZCxcbiAgICAgIGRpcmVjdGlvbjogc29ydERpcmVjdGlvbixcbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0IG9uVGFibGVDaGFuZ2UgPSAoe1xuICAgIHBhZ2UsXG4gICAgc29ydCxcbiAgfTogQ3JpdGVyaWFXaXRoUGFnaW5hdGlvbjxPbHNSZXNvdXJjZT4pID0+IHtcbiAgICBjb25zdCB7IGluZGV4OiBwYWdlSW5kZXgsIHNpemU6IGVudHJpZXNQZXJQYWdlIH0gPSBwYWdlO1xuICAgIHNldFBhZ2VJbmRleChwYWdlSW5kZXgpO1xuICAgIHNldEVudHJpZXNQZXJQYWdlKGVudHJpZXNQZXJQYWdlKTtcblxuICAgIGlmIChzb3J0KSB7XG4gICAgICBjb25zdCB7IGZpZWxkOiBzb3J0RmllbGQsIGRpcmVjdGlvbjogc29ydERpcmVjdGlvbiB9ID0gc29ydDtcbiAgICAgIHNldFNvcnRGaWVsZChzb3J0RmllbGQpO1xuICAgICAgc2V0U29ydERpcmVjdGlvbihzb3J0RGlyZWN0aW9uKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3Qge1xuICAgIGRhdGE6IG9udG9sb2dpZXMsXG4gICAgaXNTdWNjZXNzLFxuICAgIGlzTG9hZGluZyxcbiAgICBpc0Vycm9yLFxuICAgIGVycm9yLFxuICB9ID0gdXNlUXVlcnkoXG4gICAgW1xuICAgICAgYXBpLFxuICAgICAgXCJvbnRvbG9naWVzTWV0YWRhdGFcIixcbiAgICAgIGVudHJpZXNQZXJQYWdlLFxuICAgICAgcGFnZUluZGV4LFxuICAgICAgc29ydEZpZWxkLFxuICAgICAgc29ydERpcmVjdGlvbixcbiAgICAgIHBhcmFtZXRlcixcbiAgICBdLFxuICAgIGFzeW5jICgpID0+IHtcbiAgICAgIHJldHVybiBvbHNBcGlcbiAgICAgICAgLmdldE9udG9sb2dpZXMoXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2l6ZTogZW50cmllc1BlclBhZ2UudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIHBhZ2U6IHBhZ2VJbmRleC50b1N0cmluZygpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgc29ydEZpZWxkOiBzb3J0RmllbGQsXG4gICAgICAgICAgICBzb3J0RGlyOiBzb3J0RGlyZWN0aW9uLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgcHJvcHMucGFyYW1ldGVyXG4gICAgICAgIClcbiAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgcmVzcG9uc2VbXCJwYWdlXCJdW1widG90YWxFbGVtZW50c1wiXSAhPSBudWxsICYmXG4gICAgICAgICAgICByZXNwb25zZVtcIl9lbWJlZGRlZFwiXSAmJlxuICAgICAgICAgICAgcmVzcG9uc2VbXCJfZW1iZWRkZWRcIl1bXCJvbnRvbG9naWVzXCJdXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBUT0RPIFJlZmFjdG9yIChjb2RlIGR1cGxpY2F0aW9uLCBwb3NzaWJseSByZXVzZSBnZXRUb3RhbEVsZW1lbnRzIGZyb20gRGF0YUNvbnRlbnRXaWRnZXQ/KVxuICAgICAgICAgICAgc2V0VG90YWxPbnRvbG9naWVzKHJlc3BvbnNlW1wicGFnZVwiXVtcInRvdGFsRWxlbWVudHNcIl0pO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlW1wiX2VtYmVkZGVkXCJdW1wib250b2xvZ2llc1wiXTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZCBBUEkgcmVzcG9uc2VcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIHtpc1N1Y2Nlc3MgJiZcbiAgICAgICAgICAgIDxFdWlCYXNpY1RhYmxlXG4gICAgICAgICAgICAgICAgY29sdW1ucz17Y29sdW1uc31cbiAgICAgICAgICAgICAgICBpdGVtcz17b250b2xvZ2llc31cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17b25UYWJsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICBwYWdpbmF0aW9uPXtwYWdpbmF0aW9ufVxuICAgICAgICAgICAgICAgIHNvcnRpbmc9e3NvcnRpbmd9XG4gICAgICAgICAgICAvPlxuICAgICAgICB9XG4gICAgICAgIHtpc0xvYWRpbmcgJiZcbiAgICAgICAgICAgIDxFdWlCYXNpY1RhYmxlXG4gICAgICAgICAgICAgICAgY29sdW1ucz17Y29sdW1uc31cbiAgICAgICAgICAgICAgICBpdGVtcz17W119XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9e29uVGFibGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgcGFnaW5hdGlvbj17cGFnaW5hdGlvbn1cbiAgICAgICAgICAgICAgICBzb3J0aW5nPXtzb3J0aW5nfVxuICAgICAgICAgICAgICAgIGxvYWRpbmdcbiAgICAgICAgICAgIC8+XG5cbiAgICAgICAgfVxuICAgICAgICB7aXNFcnJvciAmJlxuICAgICAgICAgICAgPEV1aUJhc2ljVGFibGVcbiAgICAgICAgICAgICAgICBjb2x1bW5zPXtjb2x1bW5zfVxuICAgICAgICAgICAgICAgIGl0ZW1zPXtbXX1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17b25UYWJsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICBwYWdpbmF0aW9uPXtwYWdpbmF0aW9ufVxuICAgICAgICAgICAgICAgIHNvcnRpbmc9e3NvcnRpbmd9XG4gICAgICAgICAgICAgICAgZXJyb3I9e2dldEVycm9yTWVzc2FnZVRvRGlzcGxheShlcnJvciwgXCJyZXNvdXJjZXNcIil9XG4gICAgICAgICAgICAvPlxuICAgICAgICB9XG4gICAgICA8Lz5cbiAgKVxufVxuXG5mdW5jdGlvbiBjcmVhdGVSZXNvdXJjZXMocHJvcHM6IFJlc291cmNlc1dpZGdldFByb3BzLCBjb250YWluZXI6IEVsZW1lbnQsIGNhbGxiYWNrPzogKCk9PnZvaWQpIHtcbiAgUmVhY3RET00ucmVuZGVyKFdyYXBwZWRSZXNvdXJjZXNXaWRnZXQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZFJlc291cmNlc1dpZGdldChwcm9wczogUmVzb3VyY2VzV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTtcbiAgcmV0dXJuIChcbiAgICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgICA8UmVzb3VyY2VzV2lkZ2V0XG4gICAgICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgICAgICBpbml0aWFsRW50cmllc1BlclBhZ2U9e3Byb3BzLmluaXRpYWxFbnRyaWVzUGVyUGFnZX1cbiAgICAgICAgICAgICAgcGFnZVNpemVPcHRpb25zPXtwcm9wcy5wYWdlU2l6ZU9wdGlvbnN9XG4gICAgICAgICAgICAgIGluaXRpYWxTb3J0RmllbGQ9e3Byb3BzLmluaXRpYWxTb3J0RmllbGR9XG4gICAgICAgICAgICAgIGluaXRpYWxTb3J0RGlyPXtwcm9wcy5pbml0aWFsU29ydERpcn1cbiAgICAgICAgICAgICAgdGFyZ2V0TGluaz17cHJvcHMudGFyZ2V0TGlua31cbiAgICAgICAgICAgICAgYWN0aW9ucz17cHJvcHMuYWN0aW9uc31cbiAgICAgICAgICAgICAgcGFyYW1ldGVyPXtwcm9wcy5wYXJhbWV0ZXJ9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICAgICAgPC9FdWlQcm92aWRlcj5cbiAgKVxufVxuXG5leHBvcnQgeyBSZXNvdXJjZXNXaWRnZXQsIGNyZWF0ZVJlc291cmNlcyB9O1xuIiwgImltcG9ydCB7RXVpUHJvdmlkZXIsIEV1aVN1Z2dlc3QsIEV1aVN1Z2dlc3Rpb25Qcm9wc30gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IE9sc0FwaSB9IGZyb20gXCIuLi8uLi8uLi9hcGkvT2xzQXBpXCI7XG5pbXBvcnQge1F1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyLCB1c2VRdWVyeX0gZnJvbSBcInJlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQge1NlYXJjaEJhcldpZGdldFByb3BzfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuXG5mdW5jdGlvbiBTZWFyY2hCYXJXaWRnZXQocHJvcHM6IFNlYXJjaEJhcldpZGdldFByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBhcGksXG4gICAgcXVlcnksXG4gICAgb25TZWFyY2hWYWx1ZUNoYW5nZSxcbiAgICAuLi5yZXN0XG4gIH0gPSBwcm9wcztcbiAgY29uc3Qgb2xzQXBpID0gbmV3IE9sc0FwaShhcGkpO1xuXG4gIGNvbnN0IFtzZWFyY2hWYWx1ZSwgc2V0U2VhcmNoVmFsdWVdID0gdXNlU3RhdGUocXVlcnkpO1xuICBjb25zdCBbc3VnZ2VzdGlvbnMsIHNldFN1Z2dlc3Rpb25zXSA9IHVzZVN0YXRlPEFycmF5PEV1aVN1Z2dlc3Rpb25Qcm9wcz4+KFtdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldFNlYXJjaFZhbHVlKHF1ZXJ5KTtcbiAgfSwgW3F1ZXJ5XSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBvblNlYXJjaFZhbHVlQ2hhbmdlKHNlYXJjaFZhbHVlKTtcbiAgfSwgW29uU2VhcmNoVmFsdWVDaGFuZ2UsIHNlYXJjaFZhbHVlXSk7XG5cbiAgLyoqXG4gICAqIGZldGNoZXMgc3VnZ2VzdGlvbnMgd2hlbiBzZWFyY2hWYWx1ZSBjaGFuZ2VzIChzZXRTZWFyY2hWYWx1ZSBpcyBwYXNzZWQgYXMgRXVpU3VnZ2VzdCBvbkNoYW5nZSlcbiAgICovXG4gIHVzZVF1ZXJ5KFxuICAgICAgW1xuICAgICAgICAgIFwib25DaGFuZ2VcIixcbiAgICAgICAgICBzZWFyY2hWYWx1ZVxuICAgICAgXSxcbiAgICAgIGFzeW5jICgpID0+IHtcbiAgICAgICAgICByZXR1cm4gb2xzQXBpLnN1Z2dlc3QoXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBxdWVyeTogc2VhcmNoVmFsdWUsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICBwcm9wcy5wYXJhbWV0ZXIsXG4gICAgICAgICAgKS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnJlc3BvbnNlICYmIHJlc3BvbnNlLnJlc3BvbnNlLmRvY3MpIHtcbiAgICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbnMocmVzcG9uc2UucmVzcG9uc2UuZG9jcy5tYXAoKHN1Z2dlc3Rpb246IGFueSkgPT4gKFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogc3VnZ2VzdGlvbi5hdXRvc3VnZ2VzdCxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogeyBjb2xvcjogXCJ0aW50MVwiLCBpY29uVHlwZTogXCJcIn0sXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgKVxuXG4gIGZ1bmN0aW9uIG9uSXRlbUNsaWNrKGl0ZW06IEV1aVN1Z2dlc3Rpb25Qcm9wcykge1xuICAgIHNldFNlYXJjaFZhbHVlKGl0ZW0ubGFiZWwpO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPEV1aVN1Z2dlc3RcbiAgICAgICAgYXJpYS1sYWJlbD1cIlNlYXJjaCBmb3IgQ29uY2VwdFwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIGZvciBDb25jZXB0XCJcbiAgICAgICAgaXNDbGVhcmFibGVcbiAgICAgICAgey4uLnJlc3R9XG4gICAgICAgIHN1Z2dlc3Rpb25zPXtzdWdnZXN0aW9uc31cbiAgICAgICAgb25DaGFuZ2U9e3NldFNlYXJjaFZhbHVlfVxuICAgICAgICBvbkl0ZW1DbGljaz17b25JdGVtQ2xpY2t9XG4gICAgICAgIHZhbHVlPXtzZWFyY2hWYWx1ZX1cbiAgICAgIC8+XG4gICAgPC8+XG4gICk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVNlYXJjaEJhcihwcm9wczogU2VhcmNoQmFyV2lkZ2V0UHJvcHMsIGNvbnRhaW5lcjogYW55LCBjYWxsYmFjaz86ICgpPT52b2lkKSB7XG4gIFJlYWN0RE9NLnJlbmRlcihXcmFwcGVkU2VhcmNoQmFyV2lkZ2V0KHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIFdyYXBwZWRTZWFyY2hCYXJXaWRnZXQocHJvcHM6IFNlYXJjaEJhcldpZGdldFByb3BzKSB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7XG4gIHJldHVybiAoXG4gICAgICA8RXVpUHJvdmlkZXIgY29sb3JNb2RlPVwibGlnaHRcIj5cbiAgICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgICAgPFNlYXJjaEJhcldpZGdldFxuICAgICAgICAgICAgICBhcGk9e3Byb3BzLmFwaX1cbiAgICAgICAgICAgICAgcXVlcnk9e3Byb3BzLnF1ZXJ5fVxuICAgICAgICAgICAgICBvblNlYXJjaFZhbHVlQ2hhbmdlPXtwcm9wcy5vblNlYXJjaFZhbHVlQ2hhbmdlfVxuICAgICAgICAgICAgICBwYXJhbWV0ZXI9e3Byb3BzLnBhcmFtZXRlcn1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgICA8L0V1aVByb3ZpZGVyPlxuICApXG59XG5cbmV4cG9ydCB7IFNlYXJjaEJhcldpZGdldCwgY3JlYXRlU2VhcmNoQmFyIH07XG4iLCAiaW1wb3J0IHtcbiAgICBFdWlCdXR0b25FbXB0eSxcbiAgICBFdWlGbGV4R3JvdXAsXG4gICAgRXVpRmxleEl0ZW0sXG4gICAgRXVpRm9ybVJvdyxcbiAgICBFdWlIb3Jpem9udGFsUnVsZSxcbiAgICBFdWlMb2FkaW5nU3Bpbm5lcixcbiAgICBFdWlQYW5lbCwgRXVpUHJvdmlkZXIsXG4gICAgRXVpU2VsZWN0YWJsZSxcbiAgICBFdWlTZWxlY3RhYmxlT3B0aW9uLFxuICAgIEV1aVNwYWNlcixcbiAgICBFdWlTd2l0Y2gsXG4gICAgRXVpVGFibGVQYWdpbmF0aW9uLFxuICAgIEV1aVRleHQsXG59IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge1F1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyLCB1c2VRdWVyeX0gZnJvbSAncmVhY3QtcXVlcnknO1xuaW1wb3J0IHsgT2xzQXBpIH0gZnJvbSBcIi4uLy4uLy4uL2FwaS9PbHNBcGlcIjtcbmltcG9ydCB7IE1ldGFkYXRhQ29tcGFjdCB9IGZyb20gJy4vTWV0YWRhdGFDb21wYWN0J1xuaW1wb3J0IHtTZWFyY2hSZXN1bHRzTGlzdFdpZGdldFByb3BzfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgeyBBdXRvY29tcGxldGVXaWRnZXQgfSBmcm9tIFwiLi4vQXV0b2NvbXBsZXRlV2lkZ2V0XCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuXG5jb25zdCBERUZBVUxUX0lOSVRJQUxfSVRFTVNfUEVSX1BBR0UgPSAxMDtcbmNvbnN0IERFRkFVTFRfUEFHRV9TSVpFX09QVElPTlMgPSBbMTAsIDI1LCA1MCwgMTAwXTtcblxuZnVuY3Rpb24gU2VhcmNoUmVzdWx0c0xpc3RXaWRnZXQocHJvcHM6IFNlYXJjaFJlc3VsdHNMaXN0V2lkZ2V0UHJvcHMpIHtcbiAgICBjb25zdCB7XG4gICAgICAgIGFwaSxcbiAgICAgICAgcXVlcnksXG4gICAgICAgIHBhcmFtZXRlcixcbiAgICAgICAgaW5pdGlhbEl0ZW1zUGVyUGFnZSA9IERFRkFVTFRfSU5JVElBTF9JVEVNU19QRVJfUEFHRSxcbiAgICAgICAgaXRlbXNQZXJQYWdlT3B0aW9ucyA9IERFRkFVTFRfUEFHRV9TSVpFX09QVElPTlMsXG4gICAgICAgIHRhcmdldExpbmssXG4gICAgICAgIC4uLnJlc3RcbiAgICB9ID0gcHJvcHM7XG4gICAgY29uc3Qgb2xzQXBpID0gbmV3IE9sc0FwaShhcGkpO1xuXG4gICAgY29uc3QgW3NlYXJjaFZhbHVlLCBzZXRTZWFyY2hWYWx1ZV0gPSB1c2VTdGF0ZShxdWVyeSk7XG4gICAgY29uc3QgW2FjdGl2ZVBhZ2UsIHNldEFjdGl2ZVBhZ2VdID0gdXNlU3RhdGUoMCk7XG4gICAgY29uc3QgW3BhZ2VDb3VudCwgc2V0UGFnZUNvdW50XSA9IHVzZVN0YXRlKDApO1xuICAgIGNvbnN0IFtpdGVtc1BlclBhZ2UsIHNldEl0ZW1zUGVyUGFnZV0gPSB1c2VTdGF0ZShpbml0aWFsSXRlbXNQZXJQYWdlKTtcbiAgICBjb25zdCBbdG90YWxJdGVtcywgc2V0VG90YWxJdGVtc10gPSB1c2VTdGF0ZSgwKTtcbiAgICBjb25zdCBbZXhhY3RNYXRjaCwgc2V0RXhhY3RNYXRjaF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgW3Nob3dPYnNvbGV0ZVRlcm1zLCBzZXRTaG93T2Jzb2xldGVUZXJtc10gPSB1c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgW2ZpbHRlckJ5VHlwZU9wdGlvbnMsIHNldEZpbHRlckJ5VHlwZU9wdGlvbnNdID0gdXNlU3RhdGU8RXVpU2VsZWN0YWJsZU9wdGlvbltdPihbXSk7XG4gICAgY29uc3QgW2ZpbHRlckJ5T250b2xvZ3lPcHRpb25zLCBzZXRGaWx0ZXJCeU9udG9sb2d5T3B0aW9uc10gPSB1c2VTdGF0ZTxFdWlTZWxlY3RhYmxlT3B0aW9uW10+KFtdKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHNldFNlYXJjaFZhbHVlKHF1ZXJ5KTtcbiAgICB9LCBbcXVlcnldKTtcblxuICAgIGZ1bmN0aW9uIHVwZGF0ZUZpbHRlck9wdGlvbnMoY3VycmVudE9wdGlvbnM6IEV1aVNlbGVjdGFibGVPcHRpb25bXSwgb3B0aW9uQ291bnRzOiBhbnlbXSwgc2V0T3B0aW9uczogRnVuY3Rpb24sIHJlbmRlcj86ICh2YWx1ZTogc3RyaW5nKSA9PiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKGN1cnJlbnRPcHRpb25zLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICBzZXRPcHRpb25zKG9wdGlvbkNvdW50cy5yZWR1Y2UoKGFjY3VtdWxhdG9yOiBhbnlbXSwgY3VycmVudFZhbHVlOiBzdHJpbmcsIGN1cnJlbnRJbmRleDogbnVtYmVyLCBhcnJheTogYW55W10pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudEluZGV4ICUgMiA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBhY2N1bXVsYXRvci5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiByZW5kZXIgPyByZW5kZXIoY3VycmVudFZhbHVlKSA6IGN1cnJlbnRWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleTogY3VycmVudFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kOiBcIihcIiArIGFycmF5W2N1cnJlbnRJbmRleCArIDFdICsgXCIpXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogYXJyYXlbY3VycmVudEluZGV4ICsgMV0gPT0gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHsgdG90YWxDb3VudDogYXJyYXlbY3VycmVudEluZGV4ICsgMV0gfSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBhY2N1bXVsYXRvcjtcbiAgICAgICAgICAgIH0sIFtdKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBuZXdPcHRpb25zOiBFdWlTZWxlY3RhYmxlT3B0aW9uW10gPSBbXTtcbiAgICAgICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCBjdXJyZW50T3B0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIG5ld09wdGlvbnMucHVzaChPYmplY3QuYXNzaWduKHt9LCBjdXJyZW50T3B0aW9uc1tpXSkpOyAvLyB1c2luZyBPYmplY3QuYXNzaWduIHRvIHBhc3MgYnkgdmFsdWUsIG5vdCBieSByZWZlcmVuY2VcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgb3B0aW9uQ291bnRzLmZvckVhY2goKGN1cnJlbnRWYWx1ZTogc3RyaW5nLCBjdXJyZW50SW5kZXg6IG51bWJlciwgYXJyYXk6IGFueVtdKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRJbmRleCAlIDIgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9uID0gbmV3T3B0aW9ucy5maW5kKChvcHRpb246IEV1aVNlbGVjdGFibGVPcHRpb24pID0+IG9wdGlvbi5rZXkgPT0gY3VycmVudFZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uLmFwcGVuZCA9IFwiKFwiICsgYXJyYXlbY3VycmVudEluZGV4ICsgMV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9uLmRhdGEgJiYgYXJyYXlbY3VycmVudEluZGV4ICsgMV0gPCBvcHRpb24uZGF0YS50b3RhbENvdW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uLmFwcGVuZCArPSBcIi9cIiArIG9wdGlvbi5kYXRhLnRvdGFsQ291bnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb24uYXBwZW5kICs9IFwiKVwiO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzZXRPcHRpb25zKG5ld09wdGlvbnMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZmlsdGVyU2VsZWN0ZWRPcHRpb25zID0gKG9wdGlvbjogRXVpU2VsZWN0YWJsZU9wdGlvbikgPT4gb3B0aW9uLmNoZWNrZWQgPT09IFwib25cIjtcblxuICAgIGNvbnN0IHtcbiAgICAgICAgZGF0YTogc2VhcmNoUmVzdWx0cyxcbiAgICAgICAgaXNMb2FkaW5nLFxuICAgICAgICBpc1N1Y2Nlc3MsXG4gICAgICAgIGlzRXJyb3IsXG4gICAgICAgIGVycm9yLFxuICAgIH0gPSB1c2VRdWVyeShcbiAgICAgICAgW1xuICAgICAgICAgICAgXCJzZWFyY2hSZXN1bHRzXCIsXG4gICAgICAgICAgICBhcGksXG4gICAgICAgICAgICBzZWFyY2hWYWx1ZSxcbiAgICAgICAgICAgIGV4YWN0TWF0Y2gsXG4gICAgICAgICAgICBzaG93T2Jzb2xldGVUZXJtcyxcbiAgICAgICAgICAgIGFjdGl2ZVBhZ2UsXG4gICAgICAgICAgICBpdGVtc1BlclBhZ2UsXG4gICAgICAgICAgICBmaWx0ZXJCeVR5cGVPcHRpb25zLmZpbHRlcihmaWx0ZXJTZWxlY3RlZE9wdGlvbnMpLm1hcCgob3B0aW9uOiBFdWlTZWxlY3RhYmxlT3B0aW9uKSA9PiBvcHRpb24ua2V5KSxcbiAgICAgICAgICAgIGZpbHRlckJ5T250b2xvZ3lPcHRpb25zLmZpbHRlcihmaWx0ZXJTZWxlY3RlZE9wdGlvbnMpLm1hcCgob3B0aW9uOiBFdWlTZWxlY3RhYmxlT3B0aW9uKSA9PiBvcHRpb24ua2V5KSxcbiAgICAgICAgICAgIHBhcmFtZXRlclxuICAgICAgICBdLFxuICAgICAgICBhc3luYyAoe3NpZ25hbH0pID0+IHtcbiAgICAgICAgICAgIHJldHVybiBvbHNBcGkuc2VhcmNoKFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcXVlcnk6IHNlYXJjaFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBleGFjdE1hdGNoOiBleGFjdE1hdGNoLFxuICAgICAgICAgICAgICAgICAgICBzaG93T2Jzb2xldGVUZXJtczogc2hvd09ic29sZXRlVGVybXMsXG4gICAgICAgICAgICAgICAgICAgIHR5cGVzOiBmaWx0ZXJCeVR5cGVPcHRpb25zLmZpbHRlcihmaWx0ZXJTZWxlY3RlZE9wdGlvbnMpLm1hcCgob3B0aW9uOiBFdWlTZWxlY3RhYmxlT3B0aW9uKSA9PiBvcHRpb24ua2V5KS5qb2luKFwiLFwiKSxcbiAgICAgICAgICAgICAgICAgICAgb250b2xvZ3k6IGZpbHRlckJ5T250b2xvZ3lPcHRpb25zLmZpbHRlcihmaWx0ZXJTZWxlY3RlZE9wdGlvbnMpLm1hcCgob3B0aW9uOiBFdWlTZWxlY3RhYmxlT3B0aW9uKSA9PiBvcHRpb24ua2V5KS5qb2luKFwiLFwiKSxcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBCeUlyaTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcGFnZTogYWN0aXZlUGFnZS50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgICAgICBzaXplOiBpdGVtc1BlclBhZ2UudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBwcm9wcy5wYXJhbWV0ZXIsXG4gICAgICAgICAgICAgICAgc2lnbmFsXG4gICAgICAgICAgICApLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlW1wicmVzcG9uc2VcIl0gJiYgcmVzcG9uc2VbXCJyZXNwb25zZVwiXVtcImRvY3NcIl0gIT0gbnVsbCAmJiByZXNwb25zZVtcInJlc3BvbnNlXCJdW1wibnVtRm91bmRcIl0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2VbXCJmYWNldF9jb3VudHNcIl0gJiYgcmVzcG9uc2VbXCJmYWNldF9jb3VudHNcIl1bXCJmYWNldF9maWVsZHNcIl0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZVtcImZhY2V0X2NvdW50c1wiXVtcImZhY2V0X2ZpZWxkc1wiXVtcInR5cGVcIl0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVGaWx0ZXJPcHRpb25zKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJCeVR5cGVPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZVtcImZhY2V0X2NvdW50c1wiXVtcImZhY2V0X2ZpZWxkc1wiXVtcInR5cGVcIl0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEZpbHRlckJ5VHlwZU9wdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjdXJyZW50VmFsdWU6IHN0cmluZykgPT4gYCR7Y3VycmVudFZhbHVlWzBdLnRvVXBwZXJDYXNlKCl9JHtjdXJyZW50VmFsdWUuc2xpY2UoMSl9YFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2VbXCJmYWNldF9jb3VudHNcIl1bXCJmYWNldF9maWVsZHNcIl1bXCJvbnRvbG9neV9uYW1lXCJdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlRmlsdGVyT3B0aW9ucyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyQnlPbnRvbG9neU9wdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlW1wiZmFjZXRfY291bnRzXCJdW1wiZmFjZXRfZmllbGRzXCJdW1wib250b2xvZ3lfbmFtZVwiXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0RmlsdGVyQnlPbnRvbG9neU9wdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjdXJyZW50VmFsdWU6IHN0cmluZykgPT4gY3VycmVudFZhbHVlLnRvVXBwZXJDYXNlKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgc2V0VG90YWxJdGVtcyhyZXNwb25zZVtcInJlc3BvbnNlXCJdW1wibnVtRm91bmRcIl0pO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdQYWdlQ291bnQgPSBNYXRoLmNlaWwocmVzcG9uc2VbXCJyZXNwb25zZVwiXVtcIm51bUZvdW5kXCJdIC8gaXRlbXNQZXJQYWdlKVxuICAgICAgICAgICAgICAgICAgICBzZXRQYWdlQ291bnQobmV3UGFnZUNvdW50KTtcbiAgICAgICAgICAgICAgICAgICAgaWYoYWN0aXZlUGFnZSA+PSBuZXdQYWdlQ291bnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEFjdGl2ZVBhZ2UoMCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UucmVzcG9uc2UuZG9jcztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIEFQSSByZXNwb25zZVwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2VlcFByZXZpb3VzRGF0YTogdHJ1ZVxuICAgICAgICB9IC8vIFNlZTogaHR0cHM6Ly9yZWFjdC1xdWVyeS12My50YW5zdGFjay5jb20vZ3VpZGVzL3BhZ2luYXRlZC1xdWVyaWVzXG4gICAgKTtcblxuICAgIGZ1bmN0aW9uIG9uQ2hhbmdlSXRlbXNQZXJQYWdlKG5ld0l0ZW1zUGVyUGFnZTogbnVtYmVyKSB7XG4gICAgICAgIHNldEFjdGl2ZVBhZ2UoTWF0aC5mbG9vcigoYWN0aXZlUGFnZSAqIGl0ZW1zUGVyUGFnZSArIDEpIC8gbmV3SXRlbXNQZXJQYWdlKSk7XG4gICAgICAgIHNldEl0ZW1zUGVyUGFnZShuZXdJdGVtc1BlclBhZ2UpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvZ2dsZUV4YWN0TWF0Y2goKSB7XG4gICAgICAgIHNldEV4YWN0TWF0Y2goIWV4YWN0TWF0Y2gpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvZ2dsZVNob3dPYnNvbGV0ZVRlcm1zKCkge1xuICAgICAgICBzZXRTaG93T2Jzb2xldGVUZXJtcyghc2hvd09ic29sZXRlVGVybXMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNsZWFyRmlsdGVyKGN1cnJlbnRPcHRpb25zOiBFdWlTZWxlY3RhYmxlT3B0aW9uW10sIHNldE9wdGlvbnM6IEZ1bmN0aW9uKSB7XG4gICAgICAgIGNvbnN0IG5ld09wdGlvbnMgPSBbLi4uY3VycmVudE9wdGlvbnNdO1xuICAgICAgICBzZXRPcHRpb25zKG5ld09wdGlvbnMubWFwKChvcHRpb246IEV1aVNlbGVjdGFibGVPcHRpb24pID0+ICh7IC4uLm9wdGlvbiwgY2hlY2tlZDogdW5kZWZpbmVkIH0pKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2xlYXJBbGxGaWx0ZXJzKCkge1xuICAgICAgICBjbGVhckZpbHRlcihmaWx0ZXJCeVR5cGVPcHRpb25zLCBzZXRGaWx0ZXJCeVR5cGVPcHRpb25zKTtcbiAgICAgICAgY2xlYXJGaWx0ZXIoZmlsdGVyQnlPbnRvbG9neU9wdGlvbnMsIHNldEZpbHRlckJ5T250b2xvZ3lPcHRpb25zKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0cmFuc2Zvcm1fdG9fc2VhcmNoVmFsdWUoc2VsZWN0ZWRPcHRpb246IHtcbiAgICAgICAgbGFiZWw6IHN0cmluZztcbiAgICAgICAgaXJpPzogc3RyaW5nO1xuICAgICAgICBvbnRvbG9neV9uYW1lPzogc3RyaW5nO1xuICAgICAgICB0eXBlPzogc3RyaW5nXG4gICAgfVtdKSB7XG4gICAgICAgIHNldFNlYXJjaFZhbHVlKHNlbGVjdGVkT3B0aW9uWzBdID8gc2VsZWN0ZWRPcHRpb25bMF0ubGFiZWwgOiBcIlwiKVxuICAgIH1cblxuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICAgIDxBdXRvY29tcGxldGVXaWRnZXRcbiAgICAgICAgICAgICAgICBhcGk9e2FwaX1cbiAgICAgICAgICAgICAgICBzZWxlY3Rpb25DaGFuZ2VkRXZlbnQ9eyhzZWxlY3RlZE9wdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1fdG9fc2VhcmNoVmFsdWUoc2VsZWN0ZWRPcHRpb24pO1xuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgYWxsb3dDdXN0b21UZXJtcz17dHJ1ZX1cbiAgICAgICAgICAgICAgICBzaW5nbGVTZWxlY3Rpb249e3RydWV9XG4gICAgICAgICAgICAgICAgaGFzU2hvcnRTZWxlY3RlZExhYmVsPXt0cnVlfVxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtcIlNlYXJjaFwifVxuICAgICAgICAgICAgLz5cblxuICAgICAgICAgICAgPEV1aVNwYWNlciBzaXplPVwic1wiLz5cblxuICAgICAgICAgICAgPEV1aUZsZXhHcm91cD5cbiAgICAgICAgICAgICAgICA8RXVpRmxleEl0ZW0gZ3Jvdz17M30gc3R5bGU9e3sgbWluV2lkdGg6IDI1MCB9fT5cbiAgICAgICAgICAgICAgICAgICAgPEV1aVBhbmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAge2lzU3VjY2VzcyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxFdWlGb3JtUm93IGxhYmVsPVwiRmlsdGVyIGJ5IHR5cGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEV1aVNlbGVjdGFibGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM9e2ZpbHRlckJ5VHlwZU9wdGlvbnN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17c2V0RmlsdGVyQnlUeXBlT3B0aW9uc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RQcm9wcz17eyBib3JkZXJlZDogdHJ1ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KGxpc3QpID0+IGxpc3R9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRXVpU2VsZWN0YWJsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0V1aUZvcm1Sb3c+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB7aXNMb2FkaW5nICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEV1aUZvcm1Sb3cgbGFiZWw9XCJGaWx0ZXIgYnkgdHlwZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RXVpTG9hZGluZ1NwaW5uZXIgc2l6ZT1cInNcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRXVpRm9ybVJvdz5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHtpc0Vycm9yICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEV1aUZvcm1Sb3cgbGFiZWw9XCJGaWx0ZXIgYnkgdHlwZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RXVpU2VsZWN0YWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz17W119XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17c2V0RmlsdGVyQnlUeXBlT3B0aW9uc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RQcm9wcz17eyBib3JkZXJlZDogdHJ1ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KGxpc3QpID0+IGxpc3R9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRXVpU2VsZWN0YWJsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0V1aUZvcm1Sb3c+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtpc1N1Y2Nlc3MgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RXVpRm9ybVJvdyBsYWJlbD1cIkZpbHRlciBieSBvbnRvbG9neVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RXVpU2VsZWN0YWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz17ZmlsdGVyQnlPbnRvbG9neU9wdGlvbnN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17c2V0RmlsdGVyQnlPbnRvbG9neU9wdGlvbnN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0UHJvcHM9e3sgYm9yZGVyZWQ6IHRydWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaGFibGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyhsaXN0LCBzZWFyY2gpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c2VhcmNofVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7bGlzdH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRXVpU2VsZWN0YWJsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0V1aUZvcm1Sb3c+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB7aXNMb2FkaW5nICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEV1aUZvcm1Sb3cgbGFiZWw9XCJGaWx0ZXIgYnkgb250b2xvZ3lcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEV1aUxvYWRpbmdTcGlubmVyIHNpemU9XCJzXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0V1aUZvcm1Sb3c+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB7aXNFcnJvciAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxFdWlGb3JtUm93IGxhYmVsPVwiRmlsdGVyIGJ5IG9udG9sb2d5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxFdWlTZWxlY3RhYmxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zPXtbXX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtzZXRGaWx0ZXJCeU9udG9sb2d5T3B0aW9uc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RQcm9wcz17eyBib3JkZXJlZDogdHJ1ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoYWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KGxpc3QsIHNlYXJjaCkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzZWFyY2h9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtsaXN0fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9FdWlTZWxlY3RhYmxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRXVpRm9ybVJvdz5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgPEV1aUJ1dHRvbkVtcHR5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17Y2xlYXJBbGxGaWx0ZXJzfVxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsZWFyIGFsbCBmaWx0ZXJzXG4gICAgICAgICAgICAgICAgICAgICAgICA8L0V1aUJ1dHRvbkVtcHR5PlxuICAgICAgICAgICAgICAgICAgICA8L0V1aVBhbmVsPlxuICAgICAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG5cbiAgICAgICAgICAgICAgICA8RXVpRmxleEl0ZW0gZ3Jvdz17N30+XG4gICAgICAgICAgICAgICAgICAgIDxFdWlQYW5lbCBjb2xvcj1cInRyYW5zcGFyZW50XCIgZ3Jvdz17ZmFsc2V9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPEV1aUZsZXhHcm91cD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RXVpRmxleEl0ZW0gZ3Jvdz17ZmFsc2V9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RXVpU3dpdGNoIGxhYmVsPVwiRXhhY3QgbWF0Y2hcIiBjaGVja2VkPXtleGFjdE1hdGNofSBvbkNoYW5nZT17dG9nZ2xlRXhhY3RNYXRjaH0vPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RXVpU3dpdGNoIGxhYmVsPVwiU2hvdyBvbmx5IG9ic29sZXRlIHRlcm1zXCIgY2hlY2tlZD17c2hvd09ic29sZXRlVGVybXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RvZ2dsZVNob3dPYnNvbGV0ZVRlcm1zfS8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvRXVpRmxleEdyb3VwPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8RXVpU3BhY2VyIHNpemU9XCJtXCIvPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8RXVpVGV4dCBzaXplPVwieHNcIiBzdHlsZT17eyBwYWRkaW5nOiBcIjAgOHB4XCIgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hvd2luZyB7TWF0aC5taW4oYWN0aXZlUGFnZSAqIGl0ZW1zUGVyUGFnZSArIDEsIHRvdGFsSXRlbXMpfSB0byB7TWF0aC5taW4oKGFjdGl2ZVBhZ2UgKyAxKSAqIGl0ZW1zUGVyUGFnZSwgdG90YWxJdGVtcyl9IG9mIHt0b3RhbEl0ZW1zfSByZXN1bHRzXG4gICAgICAgICAgICAgICAgICAgICAgICA8L0V1aVRleHQ+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxFdWlTcGFjZXIgc2l6ZT1cInNcIi8+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxFdWlIb3Jpem9udGFsUnVsZSBtYXJnaW49XCJub25lXCIgc3R5bGU9e3sgaGVpZ2h0OiAyIH19Lz5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPEV1aVNwYWNlciBzaXplPVwic1wiLz5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPEV1aVRhYmxlUGFnaW5hdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJTZWFyY2ggcmVzdWx0IHBhZ2luYXRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VDb3VudD17cGFnZUNvdW50fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZVBhZ2U9e2FjdGl2ZVBhZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2VQYWdlPXtzZXRBY3RpdmVQYWdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zUGVyUGFnZT17aXRlbXNQZXJQYWdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlSXRlbXNQZXJQYWdlPXtvbkNoYW5nZUl0ZW1zUGVyUGFnZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtc1BlclBhZ2VPcHRpb25zPXtpdGVtc1BlclBhZ2VPcHRpb25zfVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPEV1aVNwYWNlciBzaXplPVwic1wiLz5cblxuICAgICAgICAgICAgICAgICAgICAgICAge3NlYXJjaFJlc3VsdHMgJiYgc2VhcmNoUmVzdWx0cy5tYXAoKHJlc3VsdDogYW55KSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJlYWN0LkZyYWdtZW50IGtleT17cmVzdWx0LmlkfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPE1ldGFkYXRhQ29tcGFjdCBhcGk9e2FwaX0gcmVzdWx0PXtyZXN1bHR9IHRhcmdldExpbms9e3RhcmdldExpbmt9Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEV1aVNwYWNlci8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgICA8L0V1aVBhbmVsPlxuICAgICAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICAgICA8L0V1aUZsZXhHcm91cD5cbiAgICAgICAgPC8+XG4gICAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlU2VhcmNoUmVzdWx0c0xpc3QocHJvcHM6IFNlYXJjaFJlc3VsdHNMaXN0V2lkZ2V0UHJvcHMsIGNvbnRhaW5lcjogYW55LCBjYWxsYmFjaz86ICgpPT52b2lkKSB7XG4gICAgUmVhY3RET00ucmVuZGVyKFdyYXBwZWRTZWFyY2hSZXN1bHRzTGlzdFdpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkU2VhcmNoUmVzdWx0c0xpc3RXaWRnZXQocHJvcHM6IFNlYXJjaFJlc3VsdHNMaXN0V2lkZ2V0UHJvcHMpIHtcbiAgICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICAgIHJldHVybiAoXG4gICAgICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgICAgICAgICAgPFNlYXJjaFJlc3VsdHNMaXN0V2lkZ2V0XG4gICAgICAgICAgICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgICAgICAgICAgICBxdWVyeT17cHJvcHMucXVlcnl9XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcj17cHJvcHMucGFyYW1ldGVyfVxuICAgICAgICAgICAgICAgICAgICBpbml0aWFsSXRlbXNQZXJQYWdlPXtwcm9wcy5pbml0aWFsSXRlbXNQZXJQYWdlfVxuICAgICAgICAgICAgICAgICAgICBpdGVtc1BlclBhZ2VPcHRpb25zPXtwcm9wcy5pdGVtc1BlclBhZ2VPcHRpb25zfVxuICAgICAgICAgICAgICAgICAgICB0YXJnZXRMaW5rPXtwcm9wcy50YXJnZXRMaW5rfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgICAgIDwvRXVpUHJvdmlkZXI+XG4gICAgKVxufVxuXG5leHBvcnQgeyBTZWFyY2hSZXN1bHRzTGlzdFdpZGdldCwgY3JlYXRlU2VhcmNoUmVzdWx0c0xpc3QgfTtcbiIsICJpbXBvcnQgeyBFdWlDYXJkLCBFdWlGbGV4R3JvdXAsIEV1aUZsZXhJdGVtLCBFdWlTcGFjZXIsIEV1aVRpdGxlIH0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQnJlYWRjcnVtYldpZGdldCwgRGVzY3JpcHRpb25XaWRnZXQsIElyaVdpZGdldCB9IGZyb20gXCIuLi9NZXRhZGF0YVdpZGdldFwiO1xuaW1wb3J0IHtNZXRhZGF0YUNvbXBhY3RQcm9wc30gZnJvbSBcIi4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IHtwbHVyYWxpemVUeXBlfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3V0aWxcIjtcblxuZnVuY3Rpb24gTWV0YWRhdGFDb21wYWN0KHByb3BzOiBNZXRhZGF0YUNvbXBhY3RQcm9wcykge1xuICAgIGNvbnN0IHtcbiAgICAgICAgYXBpLFxuICAgICAgICByZXN1bHQsXG4gICAgICAgIHRhcmdldExpbmssXG4gICAgICAgIC4uLnJlc3RcbiAgICB9ID0gcHJvcHM7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8RXVpQ2FyZFxuICAgICAgICAgICAgdGV4dEFsaWduPVwibGVmdFwiXG4gICAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICAgIGhyZWY9e3RhcmdldExpbmsgP1xuICAgICAgICAgICAgICAgIChyZXN1bHQudHlwZSAhPSBcIm9udG9sb2d5XCIgP1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRMaW5rICsgXCJvbnRvbG9naWVzL1wiICsgcmVzdWx0Lm9udG9sb2d5X25hbWUgKyBcIi9cIiArIHBsdXJhbGl6ZVR5cGUocmVzdWx0LnR5cGUsIHRydWUpICsgXCI/aXJpPVwiICsgcmVzdWx0LmlyaVxuICAgICAgICAgICAgICAgICAgICA6IHRhcmdldExpbmsgKyBcIm9udG9sb2dpZXMvXCIgKyByZXN1bHQub250b2xvZ3lfbmFtZSlcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgIHRpdGxlPXtcbiAgICAgICAgICAgICAgICA8RXVpRmxleEdyb3VwPlxuICAgICAgICAgICAgICAgICAgICA8RXVpRmxleEl0ZW0gZ3Jvdz17ZmFsc2V9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPEV1aVRpdGxlPjxoMj57cmVzdWx0LmxhYmVsfTwvaDI+PC9FdWlUaXRsZT5cbiAgICAgICAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICAgICAgPEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAge3Jlc3VsdC50eXBlICE9IFwib250b2xvZ3lcIiAmJiA8QnJlYWRjcnVtYldpZGdldCBhcGk9e2FwaX0gaXJpPXtyZXN1bHQuaXJpfSBlbnRpdHlUeXBlPXtyZXN1bHQudHlwZX0gb250b2xvZ3lJZD17cmVzdWx0Lm9udG9sb2d5X25hbWV9Lz59XG4gICAgICAgICAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgPC9FdWlGbGV4R3JvdXA+XG4gICAgICAgICAgICB9XG4gICAgICAgID5cbiAgICAgICAgICAgIHtyZXN1bHQudHlwZSAhPSBcIm9udG9sb2d5XCIgPyA8SXJpV2lkZ2V0IGlyaT17cmVzdWx0LmlyaX0vPiA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgIDxFdWlTcGFjZXIgc2l6ZT1cInNcIi8+XG4gICAgICAgICAgICA8RGVzY3JpcHRpb25XaWRnZXQgYXBpPXthcGl9IG9udG9sb2d5SWQ9e3Jlc3VsdC5vbnRvbG9neV9uYW1lfSBpcmk9e3Jlc3VsdC5pcml9IHRoaW5nVHlwZT17cmVzdWx0LnR5cGV9Lz5cbiAgICAgICAgPC9FdWlDYXJkPlxuXG4gICAgKTtcbn1cblxuZXhwb3J0IHsgTWV0YWRhdGFDb21wYWN0IH07XG4iLCAiaW1wb3J0IFJlYWN0LCB7UmVhY3RFbGVtZW50fSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IE9sc0FwaSB9IGZyb20gXCIuLi8uLi8uLi9hcGkvT2xzQXBpXCI7XG5pbXBvcnQge1F1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyLCB1c2VRdWVyeX0gZnJvbSBcInJlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQge0V1aUNhcmQsIEV1aUZsZXhJdGVtLCBFdWlMb2FkaW5nU3Bpbm5lciwgRXVpUHJvdmlkZXIsIEV1aVRleHR9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7Q2xhc3MsIEluZGl2aWR1YWwsIFByb3BlcnR5LCBUaGluZ30gZnJvbSBcIi4uLy4uLy4uL21vZGVsL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYLCBnZXRFbnRpdHlMaW5rSlNYLCBnZXRSZWlmaWVkSlNYLCBnZXRTZWN0aW9uTGlzdEpTWH0gZnJvbSBcIi4uLy4uLy4uL21vZGVsL1N0cnVjdHVyZVJlbmRlcmluZ1wiO1xuaW1wb3J0IHtpc0NsYXNzLCBpc0luZGl2aWR1YWwsIGlzUHJvcGVydHl9IGZyb20gXCIuLi8uLi8uLi9tb2RlbC9Nb2RlbFR5cGVDaGVja1wiO1xuaW1wb3J0IFJlaWZpZWQgZnJvbSBcIi4uLy4uLy4uL21vZGVsL1JlaWZpZWRcIjtcbmltcG9ydCB7Y3JlYXRlTW9kZWxPYmplY3R9IGZyb20gXCIuLi8uLi8uLi9tb2RlbC9Nb2RlbE9iamVjdENyZWF0b3JcIjtcbmltcG9ydCB7YXNBcnJheSwgY2FwaXRhbGl6ZSwgZ2V0RW50aXR5VHlwZU5hbWUsIHJhbmRvbVN0cmluZ30gZnJvbSBcIi4uLy4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQge0VudGl0eVJlbGF0aW9uc1dpZGdldFByb3BzfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuXG5jb25zdCBERUZBVUxUX0hBU19USVRMRSA9IHRydWU7XG5cbi8qKlxuICogQnVpbGRzIGFuZCByZXR1cm5zIHRoZSB0eXBlIHNlY3Rpb24gSlNYIGVsZW1lbnQuXG4gKiBAcGFyYW0gaW5kaXZpZHVhbFxuICogQHBhcmFtIHByb3BzIHRoZSBlbnRpdGllcycgcHJvcGVydGllc1xuICogQHJldHVybnMge1JlYWN0RWxlbWVudH0gdGhlIHNlY3Rpb25zJyBKU1ggZWxlbWVudFxuICovXG5mdW5jdGlvbiBnZXRJbmRpdmlkdWFsVHlwZXNTZWN0aW9uSlNYKGluZGl2aWR1YWw6IEluZGl2aWR1YWwsIHByb3BzOiBFbnRpdHlSZWxhdGlvbnNXaWRnZXRQcm9wcyk6IFJlYWN0RWxlbWVudCB7XG4gICAgY29uc3QgdHlwZXMgPSBpbmRpdmlkdWFsLmdldFJkZlR5cGVzKCkuZmlsdGVyKChlbGVtOiBzdHJpbmcpID0+IGVsZW0gIT09IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjTmFtZWRJbmRpdmlkdWFsXCIgJiYgIWVsZW0uc3RhcnRzV2l0aChcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNcIikpO1xuXG4gICAgaWYoaW5kaXZpZHVhbC5nZXRSZGZUeXBlcygpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuICg8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICA8Yj5UeXBlPC9iPlxuICAgICAgICAgICAge2dldFNlY3Rpb25MaXN0SlNYKGluZGl2aWR1YWwsIGluZGl2aWR1YWwuZ2V0TGlua2VkRW50aXRpZXMoKSwgdHlwZXMsIHByb3BzLmFwaSwgcHJvcHMuc2hvd0JhZGdlcyl9XG4gICAgICAgIDwvRXVpRmxleEl0ZW0+KTtcbiAgICB9XG4gICAgZWxzZSByZXR1cm4gPD48Lz47XG59XG5cbi8qKlxuICogQnVpbGRzIGFuZCByZXR1cm5zIHRoZSBzYW1lIGFzIHNlY3Rpb24gSlNYIGVsZW1lbnQuXG4gKiBAcGFyYW0gaW5kaXZpZHVhbFxuICogQHBhcmFtIHByb3BzIHRoZSBlbnRpdGllcycgcHJvcGVydGllc1xuICogQHJldHVybnMge1JlYWN0RWxlbWVudH0gdGhlIHNlY3Rpb25zJyBKU1ggZWxlbWVudFxuICovXG5mdW5jdGlvbiBnZXRJbmRpdmlkdWFsU2FtZUFzU2VjdGlvbkpTWChpbmRpdmlkdWFsOiBJbmRpdmlkdWFsLCBwcm9wczogRW50aXR5UmVsYXRpb25zV2lkZ2V0UHJvcHMpOiBSZWFjdEVsZW1lbnQge1xuICAgIGNvbnN0IHNhbWVBcyA9IGluZGl2aWR1YWwuZ2V0U2FtZUFzKCk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8PlxuICAgICAgICAgICAge3NhbWVBcy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgPEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgICAgICA8Yj5TYW1lIEFzPC9iPlxuICAgICAgICAgICAgICAgICAgICB7Z2V0U2VjdGlvbkxpc3RKU1goaW5kaXZpZHVhbCwgaW5kaXZpZHVhbC5nZXRMaW5rZWRFbnRpdGllcygpLCBzYW1lQXMsIHByb3BzLmFwaSwgcHJvcHMuc2hvd0JhZGdlcyl9XG4gICAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC8+KTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgYW5kIHJldHVybnMgdGhlIGRpZmZlcmVudCBmcm9tIHNlY3Rpb24gSlNYIGVsZW1lbnQuXG4gKiBAcGFyYW0gaW5kaXZpZHVhbFxuICogQHBhcmFtIHByb3BzIHRoZSBlbnRpdGllcycgcHJvcGVydGllc1xuICogQHJldHVybnMge1JlYWN0RWxlbWVudH0gdGhlIHNlY3Rpb25zJyBKU1ggZWxlbWVudFxuICovXG5mdW5jdGlvbiBnZXRJbmRpdmlkdWFsRGlmZmVyZW50RnJvbVNlY3Rpb25KU1goaW5kaXZpZHVhbDogSW5kaXZpZHVhbCwgcHJvcHM6IEVudGl0eVJlbGF0aW9uc1dpZGdldFByb3BzKTogUmVhY3RFbGVtZW50IHtcbiAgICBjb25zdCBkaWZmZXJlbnRGcm9tID0gaW5kaXZpZHVhbC5nZXREaWZmZXJlbnRGcm9tKCk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8PlxuICAgICAgICAgICAge2RpZmZlcmVudEZyb20ubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICAgICAgPGI+RGlmZmVyZW50IGZyb208L2I+XG4gICAgICAgICAgICAgICAgICAgIHtnZXRTZWN0aW9uTGlzdEpTWChpbmRpdmlkdWFsLCBpbmRpdmlkdWFsLmdldExpbmtlZEVudGl0aWVzKCksIGRpZmZlcmVudEZyb20sIHByb3BzLmFwaSwgcHJvcHMuc2hvd0JhZGdlcyl9XG4gICAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC8+XG4gICAgKTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgYW5kIHJldHVybnMgdGhlIGRpc2pvaW50IHdpdGggc2VjdGlvbiBKU1ggZWxlbWVudC5cbiAqIEBwYXJhbSBlbnRpdHlcbiAqIEBwYXJhbSBwcm9wcyB0aGUgZW50aXRpZXMnIHByb3BlcnRpZXNcbiAqIEByZXR1cm5zIHtSZWFjdEVsZW1lbnR9IHRoZSBzZWN0aW9ucycgSlNYIGVsZW1lbnRcbiAqL1xuZnVuY3Rpb24gZ2V0RGlzam9pbnRXaXRoU2VjdGlvbkpTWChlbnRpdHk6IFByb3BlcnR5IHwgQ2xhc3MsIHByb3BzOiBFbnRpdHlSZWxhdGlvbnNXaWRnZXRQcm9wcyk6IFJlYWN0RWxlbWVudCB7XG4gICAgY29uc3QgZGlzam9pbnRXaXRoID0gZW50aXR5LmdldERpc2pvaW50V2l0aCgpO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICAgIHtkaXNqb2ludFdpdGgubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICAgICAgPGI+RGlzam9pbnQgd2l0aDwvYj5cbiAgICAgICAgICAgICAgICAgICAge2dldFNlY3Rpb25MaXN0SlNYKGVudGl0eSwgZW50aXR5LmdldExpbmtlZEVudGl0aWVzKCksIGRpc2pvaW50V2l0aCwgcHJvcHMuYXBpLCBwcm9wcy5zaG93QmFkZ2VzKX1cbiAgICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICAgICAgfVxuICAgICAgICA8Lz5cbiAgICApO1xufVxuXG4vKipcbiAqIEJ1aWxkcyBhbmQgcmV0dXJucyB0aGUgaW52ZXJzZSBvZiBzZWN0aW9uIEpTWCBlbGVtZW50LlxuICogQHBhcmFtIHByb3BlcnR5XG4gKiBAcGFyYW0gcHJvcHMgdGhlIGVudGl0aWVzJyBwcm9wZXJ0aWVzXG4gKiBAcmV0dXJucyB7UmVhY3RFbGVtZW50fSB0aGUgc2VjdGlvbnMnIEpTWCBlbGVtZW50XG4gKi9cbmZ1bmN0aW9uIGdldFByb3BlcnR5SW52ZXJzZU9mU2VjdGlvbkpTWChwcm9wZXJ0eTogUHJvcGVydHksIHByb3BzOiBFbnRpdHlSZWxhdGlvbnNXaWRnZXRQcm9wcyk6IFJlYWN0RWxlbWVudCB7XG4gICAgY29uc3QgaW52ZXJzZU9mcyA9IHByb3BlcnR5LmdldEludmVyc2VPZigpO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICAgIHtpbnZlcnNlT2ZzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgICAgIDxiPkludmVyc2Ugb2Y8L2I+XG4gICAgICAgICAgICAgICAgICAgIHtnZXRTZWN0aW9uTGlzdEpTWChwcm9wZXJ0eSwgcHJvcGVydHkuZ2V0TGlua2VkRW50aXRpZXMoKSwgaW52ZXJzZU9mcywgcHJvcHMuYXBpLCBwcm9wcy5zaG93QmFkZ2VzKX1cbiAgICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICAgICAgfVxuICAgICAgICA8Lz5cbiAgICApO1xufVxuXG4vKipcbiAqIEJ1aWxkcyBhbmQgcmV0dXJucyBvbmUgcHJvcGVydHkgY2hhaW4gSlNYIGVsZW1lbnQuIElzIHVzZWQgZm9yIHtAbGluayBnZXRQcm9wZXJ0eUNoYWluU2VjdGlvbkpTWH0uXG4gKiBAcGFyYW0gcHJvcGVydHlDaGFpbiB0aGUgcHJvcGVydHkgY2hhaW5cbiAqIEBwYXJhbSBwcm9wZXJ0eVxuICogQHBhcmFtIHByb3BzICAgICB0aGUgZW50aXRpZXMnIHByb3BlcnRpZXNcbiAqIEByZXR1cm5zIHtSZWFjdEVsZW1lbnRbXX0gdGhlIGNoYWlucyBKU1ggZWxlbWVudFxuICovXG5mdW5jdGlvbiBnZXRQcm9wZXJ0eUNoYWluSlNYKHByb3BlcnR5Q2hhaW46IGFueVtdLCBwcm9wZXJ0eTogUHJvcGVydHksIHByb3BzOiBFbnRpdHlSZWxhdGlvbnNXaWRnZXRQcm9wcyk6IFJlYWN0RWxlbWVudFtdIHtcbiAgICByZXR1cm4gYXNBcnJheShwcm9wZXJ0eUNoYWluKS5zbGljZSgpLnJldmVyc2UoKS5tYXAoKHByb3BlcnR5RXhwciwgaSkgPT4geyAvLyB1c2luZyAuc2xpY2UoKSBoZXJlIGlzIGltcG9ydGFudCBiZWNhdXNlIGEgbXV0YXRpb24gb2YgcHJvcGVydHlDaGFpbiB3b3VsZCB0cmlnZ2VyIGEgdXNlUXVlcnkoKVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPHNwYW4ga2V5PXtwcm9wZXJ0eUV4cHJ9PlxuICAgICAgICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1gocHJvcGVydHksIHByb3BlcnR5LmdldExpbmtlZEVudGl0aWVzKCksIHByb3BlcnR5RXhwciwgcHJvcHMuYXBpLCBwcm9wcy5zaG93QmFkZ2VzKX1cbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICB7aSA8IGFzQXJyYXkocHJvcGVydHlDaGFpbikubGVuZ3RoIC0gMSAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17e2ZvbnRTaXplOiBcIm1lZGl1bVwiLCBjb2xvcjogXCJncmF5XCJ9fT4mbmJzcDsmIzk2NjY7Jm5ic3A7PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICApO1xuICAgIH0pO1xufVxuXG4vKipcbiAqIEJ1aWxkcyBhbmQgcmV0dXJucyB0aGUgcHJvcGVydHkgY2hhaW5zIHNlY3Rpb24gSlNYIGVsZW1lbnQuXG4gKiBAcGFyYW0gcHJvcGVydHlcbiAqIEBwYXJhbSBwcm9wcyB0aGUgZW50aXRpZXMnIHByb3BlcnRpZXNcbiAqIEByZXR1cm5zIHtSZWFjdEVsZW1lbnR9IHRoZSBzZWN0aW9ucycgSlNYIGVsZW1lbnRcbiAqL1xuZnVuY3Rpb24gZ2V0UHJvcGVydHlDaGFpblNlY3Rpb25KU1gocHJvcGVydHk6IFByb3BlcnR5LCBwcm9wczogRW50aXR5UmVsYXRpb25zV2lkZ2V0UHJvcHMpOiBSZWFjdEVsZW1lbnQge1xuICAgIGNvbnN0IHByb3BlcnR5Q2hhaW5zID0gcHJvcGVydHkuZ2V0UHJvcGVydHlDaGFpbnMoKS5tYXAoKHJlaWZpZWQgOiBSZWlmaWVkPGFueT4pID0+IHJlaWZpZWQudmFsdWUpO1xuXG4gICAgY29uc3QgaGFzTXVsdGlwbGVDaGFpbnMgPSBwcm9wZXJ0eUNoYWlucy5maWx0ZXIoKGVsZW06IGFueSkgPT4gQXJyYXkuaXNBcnJheShlbGVtKSkubGVuZ3RoID4gMDtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDw+XG4gICAgICAgICAgICB7cHJvcGVydHlDaGFpbnMubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICAgICAgPGI+eyFoYXNNdWx0aXBsZUNoYWlucyA/IFwiUHJvcGVydHkgY2hhaW5cIiA6IFwiUHJvcGVydHkgY2hhaW5zXCJ9PC9iPlxuICAgICAgICAgICAgICAgICAgICB7IWhhc011bHRpcGxlQ2hhaW5zID9cbiAgICAgICAgICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD57Z2V0UHJvcGVydHlDaGFpbkpTWChwcm9wZXJ0eUNoYWlucywgcHJvcGVydHksIHByb3BzKX08L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICApIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5Q2hhaW5zLm1hcCgoaXRlbTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDxsaSBrZXk9e3JhbmRvbVN0cmluZygpfT57Z2V0UHJvcGVydHlDaGFpbkpTWChpdGVtLCBwcm9wZXJ0eSwgcHJvcHMpfTwvbGk+KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC8+XG4gICAgKTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgYW5kIHJldHVybnMgdGhlIGVxdWl2YWxlbnQgdG8gc2VjdGlvbiBKU1ggZWxlbWVudC5cbiAqIEBwYXJhbSBlbnRpdHlcbiAqIEBwYXJhbSBwcm9wcyB0aGUgZW50aXRpZXMnIHByb3BlcnRpZXNcbiAqIEByZXR1cm5zIHtSZWFjdEVsZW1lbnR9IHRoZSBzZWN0aW9ucycgSlNYIGVsZW1lbnRcbiAqL1xuZnVuY3Rpb24gZ2V0RW50aXR5RXF1aXZhbGVudFRvU2VjdGlvbkpTWChlbnRpdHk6IFByb3BlcnR5IHwgQ2xhc3MsIHByb3BzOiBFbnRpdHlSZWxhdGlvbnNXaWRnZXRQcm9wcyk6IFJlYWN0RWxlbWVudCB7XG4gICAgY29uc3QgZXF1aXZhbGVudHMgPSBlbnRpdHkuZ2V0RXF1aXZhbGVudHMoKTtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDw+XG4gICAgICAgICAgICB7ZXF1aXZhbGVudHMubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICAgICAgPGI+RXF1aXZhbGVudCB0bzwvYj5cbiAgICAgICAgICAgICAgICAgICAge2VxdWl2YWxlbnRzLmxlbmd0aCA9PT0gMSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+e2dldFJlaWZpZWRKU1goZW50aXR5LCBlcXVpdmFsZW50c1swXSwgcHJvcHMuYXBpLCBwcm9wcy5zaG93QmFkZ2VzKX08L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICApIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVxdWl2YWxlbnRzLm1hcCgoaXRlbTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDxsaSBrZXk9e3JhbmRvbVN0cmluZygpfSA+e2dldFJlaWZpZWRKU1goZW50aXR5LCBpdGVtLCBwcm9wcy5hcGksIHByb3BzLnNob3dCYWRnZXMpfTwvbGk+KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC8+XG4gICAgKTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgYW5kIHJldHVybnMgdGhlIHN1YmVudGl0eSBvZiBzZWN0aW9uIEpTWCBlbGVtZW50LlxuICogQHBhcmFtIGVudGl0eVxuICogQHBhcmFtIHByb3BzIHRoZSBlbnRpdGllcycgcHJvcGVydGllc1xuICogQHJldHVybnMge1JlYWN0RWxlbWVudH0gdGhlIHNlY3Rpb25zJyBKU1ggZWxlbWVudFxuICovXG5mdW5jdGlvbiBnZXRTdWJFbnRpdHlPZlNlY3Rpb25KU1goZW50aXR5OiBQcm9wZXJ0eSB8IENsYXNzLCBwcm9wczogRW50aXR5UmVsYXRpb25zV2lkZ2V0UHJvcHMpOiBSZWFjdEVsZW1lbnQge1xuICAgIGNvbnN0IHN1cGVyRW50aXRpZXMgPSBlbnRpdHkuZ2V0U3VwZXJFbnRpdGllcygpO1xuICAgIHJldHVybiAoXG4gICAgICAgIDw+XG4gICAgICAgICAgICB7c3VwZXJFbnRpdGllcy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgPEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgICAgICA8Yj5TdWJ7ZW50aXR5LmdldFR5cGUoKX0gb2Y8L2I+XG4gICAgICAgICAgICAgICAgICAgIHtzdXBlckVudGl0aWVzLmxlbmd0aCA9PT0gMSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+e2dldFJlaWZpZWRKU1goZW50aXR5LCBzdXBlckVudGl0aWVzWzBdLCBwcm9wcy5hcGksIHByb3BzLnNob3dCYWRnZXMpfTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwZXJFbnRpdGllcy5tYXAoKGl0ZW06IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICg8bGkga2V5PXtyYW5kb21TdHJpbmcoKX0+e2dldFJlaWZpZWRKU1goZW50aXR5LCBpdGVtLCBwcm9wcy5hcGksIHByb3BzLnNob3dCYWRnZXMpfTwvbGk+KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC8+XG4gICAgKTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgYW5kIHJldHVybnMgdGhlIHJlbGF0ZWQgZnJvbSBzZWN0aW9uIEpTWCBlbGVtZW50LlxuICogQHBhcmFtIGVudGl0eVxuICogQHBhcmFtIHByb3BzIHRoZSBlbnRpdGllcycgcHJvcGVydGllc1xuICogQHJldHVybnMge1JlYWN0RWxlbWVudH0gdGhlIHNlY3Rpb25zJyBKU1ggZWxlbWVudFxuICovXG5mdW5jdGlvbiBnZXRFbnRpdHlSZWxhdGVkRnJvbVNlY3Rpb25KU1goZW50aXR5OiBQcm9wZXJ0eSB8IENsYXNzLCBwcm9wczogRW50aXR5UmVsYXRpb25zV2lkZ2V0UHJvcHMpOiBSZWFjdEVsZW1lbnQge1xuICAgIGNvbnN0IHJlbGF0ZWRGcm9tcyA9IGVudGl0eS5nZXRSZWxhdGVkRnJvbSgpO1xuICAgIGNvbnN0IHByZWRpY2F0ZXM6IHN0cmluZ1tdID0gQXJyYXkuZnJvbShuZXcgU2V0KHJlbGF0ZWRGcm9tcy5tYXAoKGVsZW06IGFueSkgPT4ge3JldHVybiBlbGVtLnZhbHVlW1wicHJvcGVydHlcIl19KSkpO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICAgIHtyZWxhdGVkRnJvbXMubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICAgICAgPGI+UmVsYXRlZCBmcm9tPC9iPlxuICAgICAgICAgICAgICAgICAgICB7cHJlZGljYXRlcy5tYXAoKHApID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gZW50aXR5LmdldExpbmtlZEVudGl0aWVzKCkuZ2V0TGFiZWxGb3JJcmkocCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYga2V5PXtwLnRvU3RyaW5nKCkgKyByYW5kb21TdHJpbmcoKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBzdHlsZT17e2NvbG9yOiBcImJsYWNrXCJ9fSBocmVmPXtwfT48aT57bGFiZWwgfHwgcH08L2k+PC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsIHN0eWxlPXt7bWFyZ2luQm90dG9tOiAwfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cmVsYXRlZEZyb21zLmZpbHRlcigoZWxlbTogYW55KSA9PiB7cmV0dXJuIGVsZW0udmFsdWVbXCJwcm9wZXJ0eVwiXSA9PT0gcH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCgoZWxlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkga2V5PXtyYW5kb21TdHJpbmcoKX0+e2dldENsYXNzRXhwcmVzc2lvbkpTWChlbnRpdHksIGVudGl0eS5nZXRMaW5rZWRFbnRpdGllcygpLCBlbGVtLnZhbHVlW1widmFsdWVcIl0sIHByb3BzLmFwaSwgcHJvcHMuc2hvd0JhZGdlcyl9PC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD48L3A+IHsvKiBXb3JrcyBhcyBlbXB0eSBzcGFjZSBsZWZ0IHRvIG5leHQgc2VjdGlvbiAqL31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICk7fSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvPlxuICAgICk7XG59XG5cbi8qKlxuICogQnVpbGRzIGFuZCByZXR1cm5zIHRoZSBjbGFzcyBpbnN0YW5jZXMgc2VjdGlvbiBKU1ggZWxlbWVudC5cbiAqIEBwYXJhbSB0ZXJtXG4gKiBAcGFyYW0gaW5zdGFuY2VzIGFuIGFycmF5IG9mIHRoZSBjbGFzc2VzJyBpbnN0YW5jZXNcbiAqIEBwYXJhbSBwcm9wc1xuICogQHJldHVybnMge1JlYWN0RWxlbWVudH0gdGhlIHNlY3Rpb25zJyBKU1ggZWxlbWVudFxuICovXG5mdW5jdGlvbiBnZXRDbGFzc0luc3RhbmNlc1NlY3Rpb25KU1godGVybTogQ2xhc3MsIGluc3RhbmNlczogVGhpbmdbXSwgcHJvcHM6IEVudGl0eVJlbGF0aW9uc1dpZGdldFByb3BzKTogUmVhY3RFbGVtZW50IHtcbiAgICBpZihpbnN0YW5jZXMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gKDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICA8Yj5JbnN0YW5jZXM8L2I+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZXMubWFwKChpbnN0YW5jZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICg8bGkga2V5PXtyYW5kb21TdHJpbmcoKX0gPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2dldEVudGl0eUxpbmtKU1godGVybSwgdGVybS5nZXRMaW5rZWRFbnRpdGllcygpLCBpbnN0YW5jZS5nZXRJcmkoKSwgcHJvcHMuYXBpLCBwcm9wcy5zaG93QmFkZ2VzKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+KTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICA8L0V1aUZsZXhJdGVtPik7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gPD48Lz47XG4gICAgfVxufVxuXG4vKipcbiAqIEZldGNoZXMgYSBjbGFzc2VzIGluc3RhbmNlcyBmcm9tIHRoZSBKU09OIGFwaS5cbiAqIEBwYXJhbSB0ZXJtXG4gKiBAcGFyYW0gYXBpICAgYSByZWZlcmVuY2UgdG8gdGhlIGFwaVxuICogQHBhcmFtIHByb3BzIHRoZSBjbGFzc2VzJyBwcm9wZXJ0aWVzXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGZldGNoSW5zdGFuY2VzKHRlcm06IENsYXNzLCBhcGk6IE9sc0FwaSwgcHJvcHM6IEVudGl0eVJlbGF0aW9uc1dpZGdldFByb3BzKSAge1xuICAgIGNvbnN0IGRvdWJsZUVuY29kZWRUZXJtSXJpID0gZW5jb2RlVVJJQ29tcG9uZW50KGVuY29kZVVSSUNvbXBvbmVudCh0ZXJtLmdldElyaSgpKSk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBhcGkuZ2V0Q2xhc3NJbnN0YW5jZXModW5kZWZpbmVkLCB1bmRlZmluZWQsIHtvbnRvbG9neUlkOiBwcm9wcy5vbnRvbG9neUlkIHx8IHRlcm0uZ2V0T250b2xvZ3lJZCgpLCB0ZXJtSXJpOiBkb3VibGVFbmNvZGVkVGVybUlyaX0sIHByb3BzLnBhcmFtZXRlcilcbiAgICAgICAgLmNhdGNoKChlcnJvcikgPT4gY29uc29sZS5sb2coZXJyb3IpKTtcbiAgICBpZiAocmVzcG9uc2VbXCJlbGVtZW50c1wiXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBhc0FycmF5KHJlc3BvbnNlW1wiZWxlbWVudHNcIl0pLm1hcCgoaW5zdGFuY2UpID0+IGNyZWF0ZU1vZGVsT2JqZWN0KHtlbGVtZW50czogW2luc3RhbmNlXX0pKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRocm93IEVycm9yKFwiRXJyb3IgZmV0Y2hpbmcgaW5zdGFuY2VzIG9mICdcIiArIHByb3BzLmlyaSArIFwiJ1wiKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIEVudGl0eVJlbGF0aW9uc1dpZGdldChwcm9wczogRW50aXR5UmVsYXRpb25zV2lkZ2V0UHJvcHMpIHtcbiAgICBjb25zdCB7IGFwaSwgaXJpLCBvbnRvbG9neUlkLCBoYXNUaXRsZSA9IERFRkFVTFRfSEFTX1RJVExFLCBzaG93QmFkZ2VzLCBlbnRpdHlUeXBlLCBwYXJhbWV0ZXIsIC4uLnJlc3QgfSA9IHByb3BzO1xuXG4gICAgY29uc3Qgb2xzQXBpID0gbmV3IE9sc0FwaShhcGkpO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byBmZXRjaCBhbiBlbnRpdGllcycgZGF0YSB0byBiZSBzaG93biBpbiBkaWZmZXJlbnQgc2VjdGlvbnNcbiAgICAgKi9cbiAgICBjb25zdCB7XG4gICAgICAgIGRhdGE6IGVudGl0eSxcbiAgICAgICAgaXNMb2FkaW5nOiBpc0xvYWRpbmdFbnRpdHlSZWxhdGlvbixcbiAgICAgICAgaXNTdWNjZXNzOiBpc1N1Y2Nlc3NFbnRpdHlSZWxhdGlvbixcbiAgICAgICAgaXNFcnJvcjogaXNFcnJvckVudGl0eVJlbGF0aW9uLFxuICAgIH0gPSB1c2VRdWVyeShcbiAgICAgICAgW1xuICAgICAgICAgICAgXCJlbnRpdHlKc29uXCIsXG4gICAgICAgICAgICBhcGksXG4gICAgICAgICAgICBpcmksXG4gICAgICAgICAgICBvbnRvbG9neUlkLFxuICAgICAgICAgICAgZW50aXR5VHlwZSxcbiAgICAgICAgICAgIHBhcmFtZXRlcixcbiAgICAgICAgICAgIHNob3dCYWRnZXNcbiAgICAgICAgXSxcbiAgICAgICAgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG9sc0FwaS5nZXRFbnRpdHlPYmplY3QoaXJpLCBlbnRpdHlUeXBlLCBvbnRvbG9neUlkLCBwYXJhbWV0ZXIsICBmYWxzZSk7IC8vIGFsd2F5cyB1c2UgdjIvIEFQSVxuICAgICAgICB9LFxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGZldGNoIGEgY2xhc3NlcyBpbnN0YW5jZXMgdG8gYmUgc2hvd24gaW4gY2xhc3MgaW5zdGFuY2VzIHNlY3Rpb25cbiAgICAgKi9cbiAgICBjb25zdCB7XG4gICAgICAgIGRhdGE6IGluc3RhbmNlc0pzb24sXG4gICAgICAgIGlzTG9hZGluZzogaXNMb2FkaW5nSW5zdGFuY2VzLFxuICAgICAgICBpc1N1Y2Nlc3M6IGlzU3VjY2Vzc0luc3RhbmNlcyxcbiAgICB9ID0gdXNlUXVlcnkoe1xuICAgICAgICBxdWVyeUtleTogW1xuICAgICAgICAgICAgXCJpbnN0YW5jZXNKc29uXCIsXG4gICAgICAgICAgICBlbnRpdHlcbiAgICAgICAgXSxcbiAgICAgICAgcXVlcnlGbjogYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIChlbnRpdHkgJiYgaXNDbGFzcyhlbnRpdHkpICYmIGVudGl0eS5oYXNEaXJlY3RDaGlsZHJlbigpKSA/IGZldGNoSW5zdGFuY2VzKGVudGl0eSwgb2xzQXBpLCBwcm9wcykgOiBbXTtcbiAgICAgICAgfSxcbiAgICAgICAgZW5hYmxlZDogISFlbnRpdHl9LFxuICAgICk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8PlxuICAgICAgICAgICAgPEV1aUNhcmRcbiAgICAgICAgICAgICAgICB0aXRsZT17aGFzVGl0bGUgPyAoZW50aXR5VHlwZSA/IGNhcGl0YWxpemUoZ2V0RW50aXR5VHlwZU5hbWUoZW50aXR5VHlwZSkpIDogKGlzU3VjY2Vzc0VudGl0eVJlbGF0aW9uICYmIGVudGl0eSkgPyBjYXBpdGFsaXplKGVudGl0eS5nZXRUeXBlKCkpIDogXCJcIikgKyBcIiBSZWxhdGlvbnNcIiA6IFwiXCJ9XG4gICAgICAgICAgICAgICAgbGF5b3V0PVwiaG9yaXpvbnRhbFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgeyhpc0xvYWRpbmdFbnRpdHlSZWxhdGlvbiB8fCBpc0xvYWRpbmdJbnN0YW5jZXMpICYmIDxFdWlMb2FkaW5nU3Bpbm5lciBzaXplPXsncyd9Lz59XG4gICAgICAgICAgICAgICAge2lzRXJyb3JFbnRpdHlSZWxhdGlvbiAmJiA8RXVpVGV4dD5SZXF1ZXN0ZWQgcmVzb3VyY2Ugbm90IGF2YWlsYWJsZTwvRXVpVGV4dD59XG4gICAgICAgICAgICAgICAgeyhpc1N1Y2Nlc3NFbnRpdHlSZWxhdGlvbiAmJiBpc1N1Y2Nlc3NJbnN0YW5jZXMpICYmIGVudGl0eSAhPT0gdW5kZWZpbmVkICYmIGluc3RhbmNlc0pzb24gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICAgICA8RXVpVGV4dCB7Li4ucmVzdH0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7aXNJbmRpdmlkdWFsKGVudGl0eSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Z2V0SW5kaXZpZHVhbFR5cGVzU2VjdGlvbkpTWChlbnRpdHksIHByb3BzKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2dldEluZGl2aWR1YWxTYW1lQXNTZWN0aW9uSlNYKGVudGl0eSwgcHJvcHMpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Z2V0SW5kaXZpZHVhbERpZmZlcmVudEZyb21TZWN0aW9uSlNYKGVudGl0eSwgcHJvcHMpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB7KGlzUHJvcGVydHkoZW50aXR5KSB8fCBpc0NsYXNzKGVudGl0eSkpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2dldERpc2pvaW50V2l0aFNlY3Rpb25KU1goZW50aXR5LCBwcm9wcyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtpc1Byb3BlcnR5KGVudGl0eSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Z2V0UHJvcGVydHlJbnZlcnNlT2ZTZWN0aW9uSlNYKGVudGl0eSwgcHJvcHMpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Z2V0UHJvcGVydHlDaGFpblNlY3Rpb25KU1goZW50aXR5LCBwcm9wcyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHsoaXNQcm9wZXJ0eShlbnRpdHkpIHx8IGlzQ2xhc3MoZW50aXR5KSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Z2V0RW50aXR5RXF1aXZhbGVudFRvU2VjdGlvbkpTWChlbnRpdHksIHByb3BzKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2dldFN1YkVudGl0eU9mU2VjdGlvbkpTWChlbnRpdHksIHByb3BzKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2dldEVudGl0eVJlbGF0ZWRGcm9tU2VjdGlvbkpTWChlbnRpdHksIHByb3BzKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAge2lzQ2xhc3MoZW50aXR5KSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtnZXRDbGFzc0luc3RhbmNlc1NlY3Rpb25KU1goZW50aXR5LCBpbnN0YW5jZXNKc29uLCBwcm9wcyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvRXVpVGV4dD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L0V1aUNhcmQ+XG4gICAgICAgIDwvPlxuICAgICk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUVudGl0eVJlbGF0aW9ucyhwcm9wczogRW50aXR5UmVsYXRpb25zV2lkZ2V0UHJvcHMsIGNvbnRhaW5lcjogRWxlbWVudCwgY2FsbGJhY2s/OiAoKT0+dm9pZCkge1xuICAgIFJlYWN0RE9NLnJlbmRlcihXcmFwcGVkRW50aXRpeVJlbGF0aW9uc1dpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkRW50aXRpeVJlbGF0aW9uc1dpZGdldChwcm9wczogRW50aXR5UmVsYXRpb25zV2lkZ2V0UHJvcHMpIHtcbiAgICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICAgIHJldHVybiAoXG4gICAgICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgICAgICAgICAgPEVudGl0eVJlbGF0aW9uc1dpZGdldFxuICAgICAgICAgICAgICAgICAgICBhcGk9e3Byb3BzLmFwaX1cbiAgICAgICAgICAgICAgICAgICAgaXJpPXtwcm9wcy5pcml9XG4gICAgICAgICAgICAgICAgICAgIG9udG9sb2d5SWQ9e3Byb3BzLm9udG9sb2d5SWR9XG4gICAgICAgICAgICAgICAgICAgIGhhc1RpdGxlPXtwcm9wcy5oYXNUaXRsZX1cbiAgICAgICAgICAgICAgICAgICAgZW50aXR5VHlwZT17cHJvcHMuZW50aXR5VHlwZX1cbiAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyPXtwcm9wcy5wYXJhbWV0ZXJ9XG4gICAgICAgICAgICAgICAgICAgIHNob3dCYWRnZXM9e3Byb3BzLnNob3dCYWRnZXN9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICAgICAgPC9FdWlQcm92aWRlcj5cbiAgICApXG59XG5cbmV4cG9ydCB7IGNyZWF0ZUVudGl0eVJlbGF0aW9ucywgRW50aXR5UmVsYXRpb25zV2lkZ2V0IH07IiwgImltcG9ydCB7IGNyZWF0ZUF1dG9jb21wbGV0ZSB9IGZyb20gXCIuL0F1dG9jb21wbGV0ZVdpZGdldC9BdXRvY29tcGxldGVXaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZURhdGFDb250ZW50IH0gZnJvbSBcIi4vRGF0YUNvbnRlbnRXaWRnZXQvRGF0YUNvbnRlbnRXaWRnZXRcIlxuaW1wb3J0IHsgY3JlYXRlRW50aXR5SW5mbyB9IGZyb20gXCIuL0VudGl0eUluZm9XaWRnZXQvRW50aXR5SW5mb1dpZGdldFwiO1xuaW1wb3J0IHsgY3JlYXRlSnNvbkFwaX0gZnJvbSBcIi4vSnNvbkFwaVdpZGdldC9Kc29uQXBpV2lkZ2V0XCI7XG5pbXBvcnQgeyBjcmVhdGVCcmVhZGNydW1iIH0gZnJvbSBcIi4vTWV0YWRhdGFXaWRnZXQvQnJlYWRjcnVtYldpZGdldC9CcmVhZGNydW1iV2lkZ2V0XCI7XG5pbXBvcnQgeyBjcmVhdGVEZXNjcmlwdGlvbiB9IGZyb20gXCIuL01ldGFkYXRhV2lkZ2V0L0Rlc2NyaXB0aW9uV2lkZ2V0L0Rlc2NyaXB0aW9uV2lkZ2V0XCJcbmltcG9ydCB7IGNyZWF0ZUlyaSB9IGZyb20gXCIuL01ldGFkYXRhV2lkZ2V0L0lyaVdpZGdldC9JcmlXaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZVRhYiB9IGZyb20gXCIuL01ldGFkYXRhV2lkZ2V0L1RhYldpZGdldC9UYWJXaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZUFsdGVybmF0aXZlTmFtZVRhYiB9IGZyb20gXCIuL01ldGFkYXRhV2lkZ2V0L1RhYldpZGdldC9BbHRlcm5hdGl2ZU5hbWVUYWJXaWRnZXQvQWx0ZXJuYXRpdmVOYW1lVGFiV2lkZ2V0XCI7XG5pbXBvcnQgeyBjcmVhdGVDcm9zc1JlZlRhYiB9IGZyb20gXCIuL01ldGFkYXRhV2lkZ2V0L1RhYldpZGdldC9Dcm9zc1JlZldpZGdldC9Dcm9zc1JlZlRhYldpZGdldFwiO1xuaW1wb3J0IHsgY3JlYXRlSGllcmFyY2h5IH0gZnJvbSBcIi4vTWV0YWRhdGFXaWRnZXQvVGFiV2lkZ2V0L0hpZXJhcmNoeVdpZGdldC9IaWVyYXJjaHlXaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZUhpZXJhcmNoeURlcHJlY2F0ZWQgfSBmcm9tIFwiLi9NZXRhZGF0YVdpZGdldC9UYWJXaWRnZXQvSGllcmFyY2h5V2lkZ2V0RGVwcmVjYXRlZC9IaWVyYXJjaHlXaWRnZXREZXByZWNhdGVkXCI7XG5pbXBvcnQgeyBjcmVhdGVUaXRsZX0gZnJvbSBcIi4vTWV0YWRhdGFXaWRnZXQvVGl0bGVXaWRnZXQvVGl0bGVXaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZU1ldGFkYXRhIH0gZnJvbSBcIi4vTWV0YWRhdGFXaWRnZXQvTWV0YWRhdGFXaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZU9udG9sb2d5SW5mbyB9IGZyb20gXCIuL09udG9sb2d5SW5mb1dpZGdldC9PbnRvbG9neUluZm9XaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZVJlc291cmNlcyB9IGZyb20gXCIuL1Jlc291cmNlc1dpZGdldC9SZXNvdXJjZXNXaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZVNlYXJjaEJhciB9IGZyb20gXCIuL1NlYXJjaEJhcldpZGdldC9TZWFyY2hCYXJXaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZVNlYXJjaFJlc3VsdHNMaXN0IH0gZnJvbSBcIi4vU2VhcmNoUmVzdWx0c0xpc3RXaWRnZXQvU2VhcmNoUmVzdWx0c0xpc3RXaWRnZXRcIjtcbmltcG9ydCB7Y3JlYXRlRW50aXR5UmVsYXRpb25zfSBmcm9tIFwiLi9FbnRpdHlSZWxhdGlvbnNXaWRnZXQvRW50aXR5UmVsYXRpb25zV2lkZ2V0XCI7XG5cbih3aW5kb3cgYXMgYW55KVsnU2VtTG9va1BXaWRnZXRzJ10gPSB7XG4gICAgY3JlYXRlQXV0b2NvbXBsZXRlLFxuICAgIGNyZWF0ZURhdGFDb250ZW50LFxuICAgIGNyZWF0ZUVudGl0eUluZm8sXG4gICAgY3JlYXRlRW50aXR5UmVsYXRpb25zLFxuICAgIGNyZWF0ZUpzb25BcGksXG4gICAgY3JlYXRlQnJlYWRjcnVtYixcbiAgICBjcmVhdGVEZXNjcmlwdGlvbixcbiAgICBjcmVhdGVJcmksXG4gICAgY3JlYXRlVGFiLFxuICAgIGNyZWF0ZUFsdGVybmF0aXZlTmFtZVRhYixcbiAgICBjcmVhdGVDcm9zc1JlZlRhYixcbiAgICBjcmVhdGVIaWVyYXJjaHksXG4gICAgY3JlYXRlSGllcmFyY2h5RGVwcmVjYXRlZCxcbiAgICBjcmVhdGVUaXRsZSxcbiAgICBjcmVhdGVPbnRvbG9neUluZm8sXG4gICAgY3JlYXRlUmVzb3VyY2VzLFxuICAgIGNyZWF0ZVNlYXJjaEJhcixcbiAgICBjcmVhdGVTZWFyY2hSZXN1bHRzTGlzdCxcbiAgICBjcmVhdGVNZXRhZGF0YVxufVxuXG5leHBvcnQge1xuICAgIGNyZWF0ZUF1dG9jb21wbGV0ZSxcbiAgICBjcmVhdGVEYXRhQ29udGVudCxcbiAgICBjcmVhdGVFbnRpdHlJbmZvLFxuICAgIGNyZWF0ZUVudGl0eVJlbGF0aW9ucyxcbiAgICBjcmVhdGVKc29uQXBpLFxuICAgIGNyZWF0ZUJyZWFkY3J1bWIsXG4gICAgY3JlYXRlRGVzY3JpcHRpb24sXG4gICAgY3JlYXRlSXJpLFxuICAgIGNyZWF0ZVRhYixcbiAgICBjcmVhdGVBbHRlcm5hdGl2ZU5hbWVUYWIsXG4gICAgY3JlYXRlQ3Jvc3NSZWZUYWIsXG4gICAgY3JlYXRlSGllcmFyY2h5LFxuICAgIGNyZWF0ZUhpZXJhcmNoeURlcHJlY2F0ZWQsXG4gICAgY3JlYXRlVGl0bGUsXG4gICAgY3JlYXRlT250b2xvZ3lJbmZvLFxuICAgIGNyZWF0ZVJlc291cmNlcyxcbiAgICBjcmVhdGVTZWFyY2hCYXIsXG4gICAgY3JlYXRlU2VhcmNoUmVzdWx0c0xpc3QsXG4gICAgY3JlYXRlTWV0YWRhdGFcbn1cblxuZXhwb3J0ICogZnJvbSBcIi4vTWV0YWRhdGFXaWRnZXRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL0F1dG9jb21wbGV0ZVdpZGdldFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vSnNvbkFwaVdpZGdldFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vRGF0YUNvbnRlbnRXaWRnZXRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL1Jlc291cmNlc1dpZGdldFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vT250b2xvZ3lJbmZvV2lkZ2V0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9TZWFyY2hCYXJXaWRnZXRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL1NlYXJjaFJlc3VsdHNMaXN0V2lkZ2V0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9FbnRpdHlJbmZvV2lkZ2V0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9FbnRpdHlSZWxhdGlvbnNXaWRnZXRcIiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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QUFBQSxZQUNWLFVBQVU7QUFBQSxZQUNWLFNBQVM7QUFBQSxZQUNULGFBQWE7QUFBQSxZQUNiLGFBQWE7QUFBQSxZQUNiLFdBQVc7QUFBQSxZQUNYLFNBQVM7QUFBQSxZQUNULFNBQVM7QUFBQSxZQUNULFVBQVU7QUFBQSxZQUNWLE1BQU07QUFBQSxZQUNOLE9BQU87QUFBQSxZQUNQLFNBQVM7QUFBQSxZQUNULFdBQVc7QUFBQSxZQUNYLE1BQU07QUFBQSxZQUNOLFNBQVM7QUFBQSxZQUNULFNBQVM7QUFBQSxZQUNULGlCQUFpQjtBQUFBLFlBQ2pCLGFBQWE7QUFBQSxZQUNiLFVBQVU7QUFBQSxZQUNWLGNBQWM7QUFBQSxZQUNkLFFBQVE7QUFBQSxZQUNSLGFBQWE7QUFBQSxZQUNiLHlCQUF5QjtBQUFBLFlBQ3pCLE1BQU07QUFBQSxZQUNOLFVBQVU7QUFBQSxZQUNWLFNBQVM7QUFBQSxZQUNULGdCQUFnQjtBQUFBLFlBQ2hCLGNBQWM7QUFBQSxZQUNkLE9BQU87QUFBQSxZQUNQLEtBQUs7QUFBQSxZQUNMLFVBQVU7QUFBQSxZQUNWLHlCQUF5QjtBQUFBLFlBQ3pCLHVCQUF1QjtBQUFBLFlBQ3ZCLFVBQVU7QUFBQSxZQUNWLFdBQVc7QUFBQSxZQUNYLFNBQVM7QUFBQSxZQUNULGNBQWM7QUFBQSxZQUNkLEtBQUs7QUFBQSxZQUNMLE1BQU07QUFBQSxZQUNOLFlBQVk7QUFBQSxZQUNaLFlBQVk7QUFBQSxZQUNaLGFBQWE7QUFBQSxZQUNiLGdCQUFnQjtBQUFBLFlBQ2hCLFlBQVk7QUFBQSxZQUNaLGFBQWE7QUFBQSxZQUNiLFNBQVM7QUFBQSxZQUNULFFBQVE7QUFBQSxZQUNSLFFBQVE7QUFBQSxZQUNSLE1BQU07QUFBQSxZQUNOLE1BQU07QUFBQSxZQUNOLFVBQVU7QUFBQSxZQUNWLFNBQVM7QUFBQSxZQUNULFdBQVc7QUFBQSxZQUNYLGNBQWM7QUFBQSxZQUNkLE1BQU07QUFBQSxZQUNOLElBQUk7QUFBQSxZQUNKLFdBQVc7QUFBQSxZQUNYLFdBQVc7QUFBQSxZQUNYLFdBQVc7QUFBQSxZQUNYLElBQUk7QUFBQSxZQUNKLFFBQVE7QUFBQSxZQUNSLFVBQVU7QUFBQSxZQUNWLFNBQVM7QUFBQSxZQUNULFdBQVc7QUFBQSxZQUNYLFVBQVU7QUFBQSxZQUNWLFdBQVc7QUFBQSxZQUNYLFNBQVM7QUFBQSxZQUNULE1BQU07QUFBQSxZQUNOLE9BQU87QUFBQSxZQUNQLE1BQU07QUFBQSxZQUNOLE1BQU07QUFBQSxZQUNOLE1BQU07QUFBQSxZQUNOLEtBQUs7QUFBQSxZQUNMLFVBQVU7QUFBQSxZQUNWLGFBQWE7QUFBQSxZQUNiLGNBQWM7QUFBQSxZQUNkLEtBQUs7QUFBQSxZQUNMLFdBQVc7QUFBQSxZQUNYLE9BQU87QUFBQSxZQUNQLFlBQVk7QUFBQSxZQUNaLFFBQVE7QUFBQSxZQUNSLEtBQUs7QUFBQSxZQUNMLFdBQVc7QUFBQSxZQUNYLFVBQVU7QUFBQSxZQUNWLE9BQU87QUFBQSxZQUNQLE1BQU07QUFBQSxZQUNOLFVBQVU7QUFBQSxZQUNWLE9BQU87QUFBQSxZQUNQLFlBQVk7QUFBQSxZQUNaLE1BQU07QUFBQSxZQUNOLFNBQVM7QUFBQSxZQUNULFNBQVM7QUFBQSxZQUNULGFBQWE7QUFBQSxZQUNiLGFBQWE7QUFBQSxZQUNiLFFBQVE7QUFBQSxZQUNSLFNBQVM7QUFBQSxZQUNULFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxZQUNaLFVBQVU7QUFBQSxZQUNWLGdCQUFnQjtBQUFBLFlBQ2hCLEtBQUs7QUFBQSxZQUNMLFVBQVU7QUFBQSxZQUNWLFVBQVU7QUFBQSxZQUNWLE1BQU07QUFBQSxZQUNOLE1BQU07QUFBQSxZQUNOLFNBQVM7QUFBQSxZQUNULFNBQVM7QUFBQSxZQUNULE9BQU87QUFBQSxZQUNQLFFBQVE7QUFBQSxZQUNSLFdBQVc7QUFBQSxZQUNYLFVBQVU7QUFBQSxZQUNWLFVBQVU7QUFBQSxZQUNWLE9BQU87QUFBQSxZQUNQLE1BQU07QUFBQSxZQUNOLE9BQU87QUFBQSxZQUNQLE1BQU07QUFBQSxZQUNOLFlBQVk7QUFBQSxZQUNaLEtBQUs7QUFBQSxZQUNMLFFBQVE7QUFBQSxZQUNSLFNBQVM7QUFBQSxZQUNULFFBQVE7QUFBQSxZQUNSLE9BQU87QUFBQSxZQUNQLE1BQU07QUFBQSxZQUNOLE9BQU87QUFBQSxZQUNQLFNBQVM7QUFBQSxZQUNULFVBQVU7QUFBQSxZQUNWLFFBQVE7QUFBQSxZQUNSLE9BQU87QUFBQSxZQUNQLE1BQU07QUFBQSxZQUNOLFFBQVE7QUFBQSxZQUNSLE9BQU87QUFBQSxZQUNQLE9BQU87QUFBQSxZQUNQLE9BQU87QUFBQSxZQUNQLE1BQU07QUFBQTtBQUFBLFlBRU4sT0FBTztBQUFBLFlBQ1AsY0FBYztBQUFBLFlBQ2QsaUJBQWlCO0FBQUEsWUFDakIsWUFBWTtBQUFBLFlBQ1osVUFBVTtBQUFBLFlBQ1YsbUJBQW1CO0FBQUEsWUFDbkIsc0JBQXNCO0FBQUEsWUFDdEIsY0FBYztBQUFBLFlBQ2QsWUFBWTtBQUFBLFlBQ1osV0FBVztBQUFBLFlBQ1gsWUFBWTtBQUFBLFlBQ1osZUFBZTtBQUFBLFlBQ2YsUUFBUTtBQUFBLFlBQ1IsZUFBZTtBQUFBLFlBQ2YsZUFBZTtBQUFBLFlBQ2YsYUFBYTtBQUFBLFlBQ2IsU0FBUztBQUFBLFlBQ1QsZUFBZTtBQUFBLFlBQ2YsZUFBZTtBQUFBLFlBQ2Ysa0JBQWtCO0FBQUEsWUFDbEIsYUFBYTtBQUFBLFlBQ2IsTUFBTTtBQUFBLFlBQ04sT0FBTztBQUFBLFlBQ1AsTUFBTTtBQUFBLFlBQ04sSUFBSTtBQUFBLFlBQ0osVUFBVTtBQUFBLFlBQ1YsV0FBVztBQUFBLFlBQ1gsY0FBYztBQUFBLFlBQ2QsTUFBTTtBQUFBLFlBQ04sVUFBVTtBQUFBLFlBQ1YsYUFBYTtBQUFBLFlBQ2IsZUFBZTtBQUFBLFlBQ2YsVUFBVTtBQUFBLFlBQ1YsYUFBYTtBQUFBLFlBQ2IsT0FBTztBQUFBLFlBQ1Asb0JBQW9CO0FBQUEsWUFDcEIsdUJBQXVCO0FBQUEsWUFDdkIsMkJBQTJCO0FBQUEsWUFDM0IsK0JBQStCO0FBQUEsWUFDL0IsY0FBYztBQUFBLFlBQ2QsaUJBQWlCO0FBQUEsWUFDakIsZ0JBQWdCO0FBQUEsWUFDaEIsbUJBQW1CO0FBQUEsWUFDbkIsbUJBQW1CO0FBQUEsWUFDbkIsa0JBQWtCO0FBQUEsWUFDbEIsUUFBUTtBQUFBLFlBQ1IsSUFBSTtBQUFBLFlBQ0osSUFBSTtBQUFBLFlBQ0osR0FBRztBQUFBLFlBQ0gsVUFBVTtBQUFBLFlBQ1YsWUFBWTtBQUFBLFlBQ1osU0FBUztBQUFBLFlBQ1QsaUJBQWlCO0FBQUEsWUFDakIsV0FBVztBQUFBLFlBQ1gsU0FBUztBQUFBLFlBQ1QsU0FBUztBQUFBLFlBQ1Qsa0JBQWtCO0FBQUEsWUFDbEIscUJBQXFCO0FBQUEsWUFDckIsS0FBSztBQUFBLFlBQ0wsSUFBSTtBQUFBLFlBQ0osSUFBSTtBQUFBLFlBQ0osVUFBVTtBQUFBLFlBQ1YsV0FBVztBQUFBLFlBQ1gsa0JBQWtCO0FBQUEsWUFDbEIscUJBQXFCO0FBQUEsWUFDckIsS0FBSztBQUFBLFlBQ0wsVUFBVTtBQUFBLFlBQ1YsMkJBQTJCO0FBQUEsWUFDM0IsTUFBTTtBQUFBLFlBQ04sYUFBYTtBQUFBLFlBQ2IsZ0JBQWdCO0FBQUEsWUFDaEIsVUFBVTtBQUFBLFlBQ1YsYUFBYTtBQUFBLFlBQ2IsUUFBUTtBQUFBLFlBQ1IsV0FBVztBQUFBLFlBQ1gsYUFBYTtBQUFBLFlBQ2IsY0FBYztBQUFBLFlBQ2QsaUJBQWlCO0FBQUEsWUFDakIsWUFBWTtBQUFBLFlBQ1osZUFBZTtBQUFBLFlBQ2YsV0FBVztBQUFBLFlBQ1gsWUFBWTtBQUFBLFlBQ1osZUFBZTtBQUFBLFlBQ2YsVUFBVTtBQUFBLFlBQ1YsYUFBYTtBQUFBLFlBQ2IsZ0JBQWdCO0FBQUEsWUFDaEIsb0JBQW9CO0FBQUEsWUFDcEIsYUFBYTtBQUFBLFlBQ2IsZ0JBQWdCO0FBQUEsWUFDaEIsV0FBVztBQUFBLFlBQ1gsY0FBYztBQUFBLFlBQ2QsYUFBYTtBQUFBLFlBQ2IsZ0JBQWdCO0FBQUEsWUFDaEIsWUFBWTtBQUFBLFlBQ1osZUFBZTtBQUFBLFlBQ2YsUUFBUTtBQUFBLFlBQ1IsTUFBTTtBQUFBLFlBQ04sSUFBSTtBQUFBLFlBQ0osSUFBSTtBQUFBLFlBQ0osSUFBSTtBQUFBLFlBQ0osSUFBSTtBQUFBLFlBQ0osV0FBVztBQUFBLFlBQ1gsY0FBYztBQUFBLFlBQ2QsNEJBQTRCO0FBQUEsWUFDNUIsZ0NBQWdDO0FBQUEsWUFDaEMsMEJBQTBCO0FBQUEsWUFDMUIsOEJBQThCO0FBQUEsWUFDOUIsVUFBVTtBQUFBLFlBQ1YsbUJBQW1CO0FBQUEsWUFDbkIsZUFBZTtBQUFBLFlBQ2YsU0FBUztBQUFBLFlBQ1QsV0FBVztBQUFBLFlBQ1gsZUFBZTtBQUFBLFlBQ2YsY0FBYztBQUFBLFlBQ2Qsa0JBQWtCO0FBQUEsWUFDbEIsYUFBYTtBQUFBLFlBQ2IsZ0JBQWdCO0FBQUEsWUFDaEIsbUJBQW1CO0FBQUEsWUFDbkIsS0FBSztBQUFBLFlBQ0wsSUFBSTtBQUFBLFlBQ0osUUFBUTtBQUFBLFlBQ1IsV0FBVztBQUFBLFlBQ1gsSUFBSTtBQUFBLFlBQ0osSUFBSTtBQUFBLFlBQ0osSUFBSTtBQUFBLFlBQ0osSUFBSTtBQUFBLFlBQ0osR0FBRztBQUFBLFlBQ0gsY0FBYztBQUFBLFlBQ2Qsa0JBQWtCO0FBQUEsWUFDbEIsU0FBUztBQUFBLFlBQ1QsV0FBVztBQUFBLFlBQ1gsWUFBWTtBQUFBLFlBQ1osVUFBVTtBQUFBLFlBQ1YsY0FBYztBQUFBLFlBQ2QsZUFBZTtBQUFBLFlBQ2Ysa0JBQWtCO0FBQUEsWUFDbEIsZUFBZTtBQUFBLFlBQ2Ysa0JBQWtCO0FBQUEsWUFDbEIsbUJBQW1CO0FBQUEsWUFDbkIsT0FBTztBQUFBLFlBQ1AsV0FBVztBQUFBLFlBQ1gsY0FBYztBQUFBLFlBQ2QsY0FBYztBQUFBLFlBQ2QsV0FBVztBQUFBLFlBQ1gsY0FBYztBQUFBLFlBQ2QsYUFBYTtBQUFBLFlBQ2IsZ0JBQWdCO0FBQUEsWUFDaEIsYUFBYTtBQUFBLFlBQ2IsYUFBYTtBQUFBLFlBQ2IsTUFBTTtBQUFBLFlBQ04sa0JBQWtCO0FBQUEsWUFDbEIsV0FBVztBQUFBLFlBQ1gsY0FBYztBQUFBLFlBQ2QsTUFBTTtBQUFBLFlBQ04sWUFBWTtBQUFBLFlBQ1osUUFBUTtBQUFBLFlBQ1IsU0FBUztBQUFBLFlBQ1QsVUFBVTtBQUFBLFlBQ1YsT0FBTztBQUFBLFlBQ1AsUUFBUTtBQUFBLFlBQ1IsYUFBYTtBQUFBLFlBQ2IsUUFBUTtBQUFBLFlBQ1IsVUFBVTtBQUFBLFlBQ1Ysa0JBQWtCO0FBQUEsWUFDbEIscUJBQXFCO0FBQUEsWUFDckIsbUJBQW1CO0FBQUEsWUFDbkIsc0JBQXNCO0FBQUEsWUFDdEIsWUFBWTtBQUFBLFlBQ1osZUFBZTtBQUFBLFlBQ2YsU0FBUztBQUFBLFlBQ1QsWUFBWTtBQUFBLFlBQ1osWUFBWTtBQUFBLFlBQ1oscUJBQXFCO0FBQUEsWUFDckIsa0JBQWtCO0FBQUEsWUFDbEIsY0FBYztBQUFBLFlBQ2QsZUFBZTtBQUFBLFlBQ2Ysa0JBQWtCO0FBQUEsWUFDbEIsUUFBUTtBQUFBLFlBQ1IsV0FBVztBQUFBLFlBQ1gsV0FBVztBQUFBLFlBQ1gsV0FBVztBQUFBLFlBQ1gsUUFBUTtBQUFBLFlBQ1IsZUFBZTtBQUFBLFlBQ2YscUJBQXFCO0FBQUEsWUFDckIsZ0JBQWdCO0FBQUEsWUFDaEIsVUFBVTtBQUFBLFlBQ1YsR0FBRztBQUFBLFlBQ0gsUUFBUTtBQUFBLFlBQ1IsTUFBTTtBQUFBLFlBQ04sTUFBTTtBQUFBLFlBQ04saUJBQWlCO0FBQUEsWUFDakIsb0JBQW9CO0FBQUEsWUFDcEIsYUFBYTtBQUFBLFlBQ2IsV0FBVztBQUFBLFlBQ1gsb0JBQW9CO0FBQUEsWUFDcEIsa0JBQWtCO0FBQUEsWUFDbEIsVUFBVTtBQUFBLFlBQ1YsU0FBUztBQUFBLFlBQ1QsUUFBUTtBQUFBLFlBQ1IsU0FBUztBQUFBLFlBQ1QsUUFBUTtBQUFBLFlBQ1IsSUFBSTtBQUFBLFlBQ0osSUFBSTtBQUFBLFlBQ0osT0FBTztBQUFBLFlBQ1AsVUFBVTtBQUFBLFlBQ1YsTUFBTTtBQUFBLFlBQ04sZ0JBQWdCO0FBQUEsWUFDaEIsbUJBQW1CO0FBQUEsWUFDbkIsT0FBTztBQUFBLFlBQ1AsU0FBUztBQUFBLFlBQ1Qsa0JBQWtCO0FBQUEsWUFDbEIsa0JBQWtCO0FBQUEsWUFDbEIsT0FBTztBQUFBLFlBQ1AsY0FBYztBQUFBLFlBQ2QsYUFBYTtBQUFBLFlBQ2IsY0FBYztBQUFBLFlBQ2QsT0FBTztBQUFBLFlBQ1AsT0FBTztBQUFBLFlBQ1AsYUFBYTtBQUFBLFlBQ2IsV0FBVztBQUFBLFlBQ1gsY0FBYztBQUFBLFlBQ2QsYUFBYTtBQUFBLFlBQ2IsZ0JBQWdCO0FBQUEsWUFDaEIsdUJBQXVCO0FBQUEsWUFDdkIsMEJBQTBCO0FBQUEsWUFDMUIsd0JBQXdCO0FBQUEsWUFDeEIsMkJBQTJCO0FBQUEsWUFDM0IsUUFBUTtBQUFBLFlBQ1IsUUFBUTtBQUFBLFlBQ1IsaUJBQWlCO0FBQUEsWUFDakIsb0JBQW9CO0FBQUEsWUFDcEIsa0JBQWtCO0FBQUEsWUFDbEIscUJBQXFCO0FBQUEsWUFDckIsZUFBZTtBQUFBLFlBQ2Ysa0JBQWtCO0FBQUEsWUFDbEIsZ0JBQWdCO0FBQUEsWUFDaEIsbUJBQW1CO0FBQUEsWUFDbkIsa0JBQWtCO0FBQUEsWUFDbEIscUJBQXFCO0FBQUEsWUFDckIsYUFBYTtBQUFBLFlBQ2IsZ0JBQWdCO0FBQUEsWUFDaEIsZUFBZTtBQUFBLFlBQ2Ysa0JBQWtCO0FBQUEsWUFDbEIsZ0NBQWdDO0FBQUEsWUFDaEMsMEJBQTBCO0FBQUEsWUFDMUIsY0FBYztBQUFBLFlBQ2QsZ0JBQWdCO0FBQUEsWUFDaEIsYUFBYTtBQUFBLFlBQ2IsU0FBUztBQUFBLFlBQ1QsU0FBUztBQUFBLFlBQ1QsWUFBWTtBQUFBLFlBQ1osZUFBZTtBQUFBLFlBQ2YsZ0JBQWdCO0FBQUEsWUFDaEIsbUJBQW1CO0FBQUEsWUFDbkIsWUFBWTtBQUFBLFlBQ1osZUFBZTtBQUFBLFlBQ2Ysa0JBQWtCO0FBQUEsWUFDbEIsSUFBSTtBQUFBLFlBQ0osV0FBVztBQUFBLFlBQ1gsUUFBUTtBQUFBLFlBQ1IsSUFBSTtBQUFBLFlBQ0osSUFBSTtBQUFBLFlBQ0osbUJBQW1CO0FBQUEsWUFDbkIsc0JBQXNCO0FBQUEsWUFDdEIsb0JBQW9CO0FBQUEsWUFDcEIsdUJBQXVCO0FBQUEsWUFDdkIsU0FBUztBQUFBLFlBQ1QsYUFBYTtBQUFBLFlBQ2IsZ0JBQWdCO0FBQUEsWUFDaEIsY0FBYztBQUFBLFlBQ2QsaUJBQWlCO0FBQUEsWUFDakIsWUFBWTtBQUFBLFlBQ1osZ0JBQWdCO0FBQUEsWUFDaEIsY0FBYztBQUFBLFlBQ2QsYUFBYTtBQUFBLFlBQ2IsZ0JBQWdCO0FBQUEsWUFDaEIsUUFBUTtBQUFBLFlBQ1IsY0FBYztBQUFBLFlBQ2QsaUJBQWlCO0FBQUEsWUFDakIsU0FBUztBQUFBLFlBQ1QsVUFBVTtBQUFBLFlBQ1YsY0FBYztBQUFBLFlBQ2QsYUFBYTtBQUFBLFlBQ2IsaUJBQWlCO0FBQUEsWUFDakIsYUFBYTtBQUFBLFlBQ2IsaUJBQWlCO0FBQUEsWUFDakIsVUFBVTtBQUFBLFlBQ1YsYUFBYTtBQUFBLFlBQ2IsY0FBYztBQUFBLFlBQ2QsaUJBQWlCO0FBQUEsWUFDakIsU0FBUztBQUFBLFlBQ1QsWUFBWTtBQUFBLFlBQ1osWUFBWTtBQUFBLFlBQ1osZUFBZTtBQUFBLFlBQ2Ysa0JBQWtCO0FBQUEsWUFDbEIsT0FBTztBQUFBLFlBQ1AsUUFBUTtBQUFBLFlBQ1IsYUFBYTtBQUFBLFlBQ2IsZ0JBQWdCO0FBQUEsWUFDaEIsYUFBYTtBQUFBLFlBQ2IsZ0JBQWdCO0FBQUEsWUFDaEIsSUFBSTtBQUFBLFlBQ0osSUFBSTtBQUFBLFlBQ0osR0FBRztBQUFBLFlBQ0gsa0JBQWtCO0FBQUEsWUFDbEIsU0FBUztBQUFBLFlBQ1QsWUFBWTtBQUFBLFlBQ1osY0FBYztBQUFBLFlBQ2QsaUJBQWlCO0FBQUEsWUFDakIsY0FBYztBQUFBLFlBQ2QsaUJBQWlCO0FBQUEsWUFDakIsV0FBVztBQUFBLFlBQ1gsY0FBYztBQUFBLFlBQ2QsV0FBVztBQUFBLFlBQ1gsY0FBYztBQUFBLFlBQ2QsV0FBVztBQUFBLFlBQ1gsY0FBYztBQUFBLFlBQ2QsWUFBWTtBQUFBLFlBQ1osZUFBZTtBQUFBLFlBQ2YsV0FBVztBQUFBLFlBQ1gsY0FBYztBQUFBLFlBQ2QsU0FBUztBQUFBLFlBQ1QsWUFBWTtBQUFBLFlBQ1osU0FBUztBQUFBLFlBQ1QsWUFBWTtBQUFBLFlBQ1osT0FBTztB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QUNQLFlBQVk7QUFBQSxVQUNaLGdCQUFnQjtBQUFBLFVBQ2hCLFVBQVU7QUFBQSxVQUNWLFNBQVM7QUFBQSxVQUNULE1BQU07QUFBQSxVQUNOLFVBQVU7QUFBQSxVQUNWLFVBQVU7QUFBQSxVQUNWLGVBQWU7QUFBQSxVQUNmLFVBQVU7QUFBQSxVQUNWLFdBQVc7QUFBQSxVQUNYLFVBQVU7QUFBQSxVQUNWLFdBQVc7QUFBQSxVQUNYLGFBQWE7QUFBQSxVQUNiLGdCQUFnQjtBQUFBLFVBQ2hCLFlBQVk7QUFBQSxVQUNaLFlBQVk7QUFBQSxVQUNaLFNBQVM7QUFBQSxVQUNULFlBQVk7QUFBQSxVQUNaLGNBQWM7QUFBQSxVQUNkLGVBQWU7QUFBQSxVQUNmLGVBQWU7QUFBQSxVQUNmLGVBQWU7QUFBQSxVQUNmLGVBQWU7QUFBQSxVQUNmLFlBQVk7QUFBQSxVQUNaLFVBQVU7QUFBQSxVQUNWLGFBQWE7QUFBQSxVQUNiLFNBQVM7QUFBQSxVQUNULFNBQVM7QUFBQSxVQUNULFlBQVk7QUFBQSxVQUNaLFdBQVc7QUFBQSxVQUNYLGFBQWE7QUFBQSxVQUNiLGFBQWE7QUFBQSxVQUNiLFNBQVM7QUFBQSxVQUNULFdBQVc7QUFBQSxVQUNYLFlBQVk7QUFBQSxVQUNaLE1BQU07QUFBQSxVQUNOLFdBQVc7QUFBQSxVQUNYLE1BQU07QUFBQSxVQUNOLE9BQU87QUFBQSxVQUNQLGFBQWE7QUFBQSxVQUNiLE1BQU07QUFBQSxVQUNOLFVBQVU7QUFBQSxVQUNWLFNBQVM7QUFBQSxVQUNULFdBQVc7QUFBQSxVQUNYLFFBQVE7QUFBQSxVQUNSLE9BQU87QUFBQSxVQUNQLE9BQU87QUFBQSxVQUNQLFlBQVk7QUFBQSxVQUNaLFVBQVU7QUFBQSxVQUNWLGVBQWU7QUFBQSxVQUNmLFdBQVc7QUFBQSxVQUNYLGNBQWM7QUFBQSxVQUNkLFdBQVc7QUFBQSxVQUNYLFlBQVk7QUFBQSxVQUNaLFdBQVc7QUFBQSxVQUNYLGdCQUFnQjtBQUFBLFVBQ2hCLHNCQUFzQjtBQUFBLFVBQ3RCLFdBQVc7QUFBQSxVQUNYLFlBQVk7QUFBQSxVQUNaLFdBQVc7QUFBQSxVQUNYLFdBQVc7QUFBQSxVQUNYLGFBQWE7QUFBQSxVQUNiLGVBQWU7QUFBQSxVQUNmLGNBQWM7QUFBQSxVQUNkLGdCQUFnQjtBQUFBLFVBQ2hCLGdCQUFnQjtBQUFBLFVBQ2hCLGdCQUFnQjtBQUFBLFVBQ2hCLGFBQWE7QUFBQSxVQUNiLE1BQU07QUFBQSxVQUNOLFdBQVc7QUFBQSxVQUNYLE9BQU87QUFBQSxVQUNQLFNBQVM7QUFBQSxVQUNULFFBQVE7QUFBQSxVQUNSLFNBQVM7QUFBQSxVQUNULFNBQVM7QUFBQSxVQUNULGtCQUFrQjtBQUFBLFVBQ2xCLFlBQVk7QUFBQSxVQUNaLGNBQWM7QUFBQSxVQUNkLGNBQWM7QUFBQSxVQUNkLGdCQUFnQjtBQUFBLFVBQ2hCLGlCQUFpQjtBQUFBLFVBQ2pCLG1CQUFtQjtBQUFBLFVBQ25CLGlCQUFpQjtBQUFBLFVBQ2pCLGlCQUFpQjtBQUFBLFVBQ2pCLGNBQWM7QUFBQSxVQUNkLFdBQVc7QUFBQSxVQUNYLFdBQVc7QUFBQSxVQUNYLFVBQVU7QUFBQSxVQUNWLGFBQWE7QUFBQSxVQUNiLE1BQU07QUFBQSxVQUNOLFNBQVM7QUFBQSxVQUNULE9BQU87QUFBQSxVQUNQLFdBQVc7QUFBQSxVQUNYLFFBQVE7QUFBQSxVQUNSLFdBQVc7QUFBQSxVQUNYLFFBQVE7QUFBQSxVQUNSLGVBQWU7QUFBQSxVQUNmLFdBQVc7QUFBQSxVQUNYLGVBQWU7QUFBQSxVQUNmLGVBQWU7QUFBQSxVQUNmLFlBQVk7QUFBQSxVQUNaLFdBQVc7QUFBQSxVQUNYLE1BQU07QUFBQSxVQUNOLE1BQU07QUFBQSxVQUNOLE1BQU07QUFBQSxVQUNOLFlBQVk7QUFBQSxVQUNaLFFBQVE7QUFBQSxVQUNSLFNBQVM7QUFBQSxVQUNULFNBQVM7QUFBQSxVQUNULGVBQWU7QUFBQSxVQUNmLEtBQUs7QUFBQSxVQUNMLFdBQVc7QUFBQSxVQUNYLFdBQVc7QUFBQSxVQUNYLGFBQWE7QUFBQSxVQUNiLFFBQVE7QUFBQSxVQUNSLFlBQVk7QUFBQSxVQUNaLFVBQVU7QUFBQSxVQUNWLFVB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QUFBRSxtQkFBTyxNQUFNLENBQUMsUUFBTyxRQUFPLFFBQU8sTUFBTSxDQUFDLEVBQUUsS0FBSyxLQUFLO0FBQUEsVUFBRTtBQUFBLFFBQy9FO0FBbUJBLFlBQUksY0FBYztBQUFBO0FBQUEsVUFFZCxNQUFNLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxVQUN4RyxNQUFNLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxVQUN4RyxNQUFNLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxVQUN4RyxTQUFTLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxVQUMzRyxNQUFNLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxVQUN4RyxRQUFRLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxVQUMxRyxNQUFNLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxVQUN4RyxNQUFNLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxVQUN4RyxNQUFNLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxVQUN4RyxRQUFRLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxVQUMxRyxRQUFRLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxVQUMxRyxTQUFTLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxVQUMzRyxNQUFNLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxVQUN4RyxPQUFPLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxVQUN6RyxRQUFRLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxVQUMxRyxNQUFNLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxVQUN4RyxPQUFPLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxVQUN6RyxRQUFRLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxVQUMxRyxTQUFTLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQTtBQUFBLFVBSTNHLFVBQVUsQ0FBQyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxVQUNsSSxRQUFRLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsVUFDaEksTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsU0FBUztBQUFBLFVBQzlILE1BQU0sQ0FBQyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxVQUM5SCxNQUFNLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsVUFDOUgsUUFBUSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FB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QTZCO0FBQUEsSUFDN0IsV0FBVztBQUFBLElBQ1gsY0FBYztBQUFBLElBQ2QsZ0JBQWdCO0FBQUEsSUFDaEIsYUFBYTtBQUFBLElBQ2IsaUJBQWlCO0FBQUEsSUFDakIsUUFBUTtBQUFBLElBQ1IsaUJBQWlCO0FBQUEsSUFDakIsa0JBQWtCO0FBQUEsSUFDbEIsT0FBTztBQUFBLElBQ1AsVUFBVTtBQUFBLElBQ1YsYUFBYTtBQUFBLElBQ2IsVUFBVTtBQUFBLElBQ1YsUUFBUTtBQUFBLElBQ1IsbUJBQW1CO0FBQUEsSUFDbkIsbUJBQW1CO0FBQUEsSUFDbkIsWUFBWTtBQUFBLElBQ1osY0FBYztBQUFBLElBQ2QsaUJBQWlCO0FBQUEsSUFDakIsV0FBVztBQUFBLElBQ1gsVUFBVTtBQUFBLElBQ1Ysa0JBQWtCO0FBQUEsSUFDbEIsZUFBZTtBQUFBLElBQ2YsNkJBQTZCO0FBQUEsSUFDN0IsZ0JBQWdCO0FBQUEsSUFDaEIsVUFBVTtBQUFBLElBQ1YsTUFBTTtBQUFBLElBQ04sZ0JBQWdCO0FBQUEsSUFDaEIsb0JBQW9CO0FBQUEsSUFDcEIsaUJBQWlCO0FBQUEsSUFDakIsWUFBWTtBQUFBLElBQ1osc0JBQXNCO0FBQUEsSUFDdEIscUJBQXFCO0FBQUEsSUFDckIsbUJBQW1CO0FBQUEsSUFDbkIsV0FBVztBQUFBLElBQ1gsb0JBQW9CO0FBQUEsSUFDcEIscUJBQXFCO0FBQUEsSUFDckIsUUFBUTtBQUFBLElBQ1Isa0JBQWtCO0FBQUEsSUFDbEIsVUFBVTtBQUFBLElBQ1YsaUJBQWlCO0FBQUEsSUFDakIsc0JBQXNCO0FBQUEsSUFDdEIsaUJBQWlCO0FBQUEsSUFDakIsNkJBQTZCO0FBQUEsSUFDN0IsNEJBQTRCO0FBQUEsSUFDNUIscUJBQXFCO0FBQUEsSUFDckIsZ0JBQWdCO0FBQUEsSUFDaEIsWUFBWTtBQUFBLElBQ1osb0JBQW9CO0FBQUEsSUFDcEIsZ0JBQWdCO0FBQUEsSUFDaEIseUJBQXlCO0FBQUEsSUFDekIsdUJBQXVCO0FBQUEsSUFDdkIscUJBQXFCO0FBQUEsSUFDckIsY0FBYztBQUFBLElB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QUFRO0FBQUEsTUFDeEIsR0FBRztBQUFBLE1BQ0gsTUFBTTtBQUFBLElBQ1IsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLEdBQUc7QUFBQSxNQUNILE1BQU07QUFBQSxJQUNSLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixHQUFHO0FBQUEsTUFDSCxNQUFNO0FBQUEsSUFDUixDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsR0FBRztBQUFBLE1BQ0gsTUFBTTtBQUFBLElBQ1IsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLEdBQUc7QUFBQSxNQUNILE1BQU07QUFBQSxJQUNSLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixHQUFHO0FBQUEsTUFDSCxNQUFNO0FBQUEsSUFDUixDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsR0FBRztBQUFBLE1BQ0gsTUFBTTtBQUFBLElBQ1IsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLEdBQUc7QUFBQSxNQUNILE1BQU07QUFBQSxJQUNSLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixHQUFHO0FBQUEsTUFDSCxNQUFNO0FBQUEsSUFDUixDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsR0FBRztBQUFBLE1BQ0gsTUFBTTtBQUFBLElBQ1IsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLEdBQUc7QUFBQSxNQUNILE1BQU07QUFBQSxJQUNSLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixHQUFHO0FBQUEsTUFDSCxNQUFNO0FBQUEsSUFDUixDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsR0FBRztBQUFBLE1BQ0gsTUFBTTtBQUFBLElBQ1IsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLEdBQUc7QUFBQSxNQUNILE1BQU07QUFBQSxJQUNSLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixHQUFHO0FBQUEsTUFDSCxNQUFNO0FBQUEsSUFDUixD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R0FBQUEsS0FBQUEsU0FBQUEsR0FBQUEsR0FBQUE7QUFBQUEsVUFBQUEsSUFBQUEsRUFBQUEsT0FBQUEsR0FBQUEsTUFBQUEsV0FBQUE7QUFBQUEsWUFBQUEsRUFBQUEsQ0FBQUEsSUFBQUE7QUFBQUEsZ0JBQUFBLEVBQUFBLENBQUFBO0FBQUFBLGVBQUFBLEVBQUFBLENBQUFBO01BQUFBLEdBQUFBLE1BQUFBLENBQUFBLEdBQUFBLEtBQUFBLENBQUFBLEVBQUFBLEdBQUFBLEdBQUFBLEdBQUFBLEdBQUFBO0FBQUFBLGFBQUFBLElBQUFBLEVBQUFBLE1BQUFBLEVBQUFBLENBQUFBLEdBQUFBLE9BQUFBLEVBQUFBLENBQUFBLEdBQUFBLFFBQUFBLEVBQUFBLENBQUFBLEVBQUFBLEdBQUFBLE9BQUFBLFVBQUFBLGVBQUFBLEVBQUFBLE9BQUFBLFFBQUFBLElBQUFBLFdBQUFBO0FBQUFBLGVBQUFBO01BQUFBLElBQUFBO0FBQUFBLGVBQUFBLEVBQUFBLEdBQUFBO0FBQUFBLGVBQUFBLFNBQUFBLEdBQUFBO0FBQUFBLGlCQUFBQSxFQUFBQSxDQUFBQSxHQUFBQSxDQUFBQSxDQUFBQTtRQUFBQTtNQUFBQTtBQUFBQSxlQUFBQSxFQUFBQSxHQUFBQTtBQUFBQSxZQUFBQTtBQUFBQSxnQkFBQUEsSUFBQUEsVUFBQUEsaUNBQUFBO0FBQUFBLGVBQUFBO0FBQUFBLGNBQUFBO0FBQUFBLGdCQUFBQSxJQUFBQSxHQUFBQSxNQUFBQSxJQUFBQSxFQUFBQSxDQUFBQSxJQUFBQSxJQUFBQSxFQUFBQSxTQUFBQSxFQUFBQSxDQUFBQSxJQUFBQSxFQUFBQSxXQUFBQSxJQUFBQSxFQUFBQSxXQUFBQSxFQUFBQSxLQUFBQSxDQUFBQSxHQUFBQSxLQUFBQSxFQUFBQSxTQUFBQSxFQUFBQSxJQUFBQSxFQUFBQSxLQUFBQSxHQUFBQSxFQUFBQSxDQUFBQSxDQUFBQSxHQUFBQTtBQUFBQSxxQkFBQUE7QUFBQUEsb0JBQUFBLElBQUFBLEdBQUFBLE1BQUFBLElBQUFBLENBQUFBLEVBQUFBLENBQUFBLElBQUFBLEdBQUFBLEVBQUFBLEtBQUFBLElBQUFBLEVBQUFBLENBQUFBLEdBQUFBO2NBQUFBLEtBQUFBO2NBQUFBLEtBQUFBO0FBQUFBLG9CQUFBQTtBQUFBQTtjQUFBQSxLQUFBQTtBQUFBQSx1QkFBQUEsRUFBQUEsU0FBQUEsRUFBQUEsT0FBQUEsRUFBQUEsQ0FBQUEsR0FBQUEsTUFBQUEsTUFBQUE7Y0FBQUEsS0FBQUE7QUFBQUEsa0JBQUFBLFNBQUFBLElBQUFBLEVBQUFBLENBQUFBLEdBQUFBLElBQUFBLENBQUFBLENBQUFBO0FBQUFBO2NBQUFBLEtBQUFBO0FBQUFBLG9CQUFBQSxFQUFBQSxJQUFBQSxJQUFBQSxHQUFBQSxFQUFBQSxLQUFBQSxJQUFBQTtBQUFBQTtjQUFBQTtBQUFBQSxvQkFBQUEsSUFBQUEsRUFBQUEsTUFBQUEsRUFBQUEsSUFBQUEsRUFBQUEsU0FBQUEsS0FBQUEsRUFBQUEsRUFBQUEsU0FBQUEsQ0FBQUEsT0FBQUEsRUFBQUEsQ0FBQUEsTUFBQUEsS0FBQUEsRUFBQUEsQ0FBQUEsTUFBQUEsSUFBQUE7QUFBQUEsc0JBQUFBO0FBQUFBO2dCQUFBQTtBQUFBQSxvQkFBQUEsRUFBQUEsQ0FBQUEsTUFBQUEsTUFBQUEsQ0FBQUEsS0FBQUEsRUFBQUEsQ0FBQUEsSUFBQUEsRUFBQUEsQ0FBQUEsS0FBQUEsRUFBQUEsQ0FBQUEsSUFBQUEsRUFBQUEsQ0FBQUEsSUFBQUE7QUFBQUEsb0JBQUFBLFFBQUFBLEVBQUFBLENBQUFBO0FBQUFBO2dCQUFBQTtBQUFBQSxvQkFBQUEsRUFBQUEsQ0FBQUEsTUFBQUEsS0FBQUEsRUFBQUEsUUFBQUEsRUFBQUEsQ0FBQUEsR0FBQUE7QUFBQUEsb0JBQUFBLFFBQUFBLEVBQUFBLENBQUFBLEdBQUFBLElBQUFBO0FBQUFBO2dCQUFBQTtBQUFBQSxvQkFBQUEsS0FBQUEsRUFBQUEsUUFBQUEsRUFBQUEsQ0FBQUEsR0FBQUE7QUFBQUEsb0JBQUFBLFFBQUFBLEVBQUFBLENBQUFBLEdBQUFBLEVBQUFBLElBQUFBLEtBQUFBLENBQUFBO0FBQUFBO2dCQUFBQTtBQUFBQSxrQkFBQUEsQ0FBQUEsS0FBQUEsRUFBQUEsSUFBQUEsSUFBQUEsR0FBQUEsRUFBQUEsS0FBQUEsSUFBQUE7QUFBQUE7WUFBQUE7QUFBQUEsZ0JBQUFBLEVBQUFBLEtBQUFBLEdBQUFBLENBQUFBO1VBQUFBLFNBQUFBLEdBQUFBO0FBQUFBLGdCQUFBQSxDQUFBQSxHQUFBQSxDQUFBQSxHQUFBQSxJQUFBQTtVQUFBQSxVQUFBQTtBQUFBQSxnQkFBQUEsSUFBQUE7VUFBQUE7QUFBQUEsWUFBQUEsRUFBQUEsQ0FBQUEsSUFBQUE7QUFBQUEsZ0JBQUFBLEVBQUFBLENBQUFBO0FBQUFBLGVBQUFBLEVBQUFBLE9BQUFBLEVBQUFBLENBQUFBLElBQUFBLEVBQUFBLENBQUFBLElBQUFBLFFBQUFBLE1BQUFBLEtBQUFBO01BQUFBO0lBQUFBLEdBQUFBLEtBQUFBLFNBQUFBLEdBQUFBLEdBQUFBO0FBQUFBLGVBQUFBLElBQUFBLEdBQUFBLElBQUFBLEVBQUFBLFFBQUFBLElBQUFBLEVBQUFBLFFBQUFBLElBQUFBLEdBQUFBLEtBQUFBO0FBQUFBLFVBQUFBLENBQUFBLElBQUFBLEVBQUFBLENBQUFBO0FBQUFBLGFBQUFBO0lBQUFBLEdBQUFBLEtBQUFBLE9BQUFBLGdCQUFBQSxLQUFBQSxPQUFBQSxrQkFBQUEsS0FBQUEsT0FBQUEsMkJBQUFBLEtBQUFBLE9BQUFBLHVCQUFBQSxLQUFBQSxPQUFBQSxVQUFBQSxnQkFBQUEsS0FBQUEsT0FBQUEsVUFBQUEsc0JBQUFBLEtBQUFBLFNBQUFBLEdBQUFBLEdBQUFBLEdBQUFBO0FBQUFBLGFBQUFBLEtBQUFBLElBQUFBLEdBQUFBLEdBQUFBLEdBQUFBLEVBQUFBLFlBQUFBLE1BQUFBLGNBQUFBLE1BQUFBLFVBQUFBLE1BQUFBLE9BQUFBLEVBQUFBLENBQUFBLElBQUFBLEVBQUFBLENBQUFBLElBQUFBO0lBQUFBLEdBQUFBLEtBQUFBLFNBQUFBLEdBQUFBLEdBQUFBO0FBQUFBLGVBQUFBLEtBQUFBLE1BQUFBLElBQUFBLENBQUFBO0FBQUFBLFdBQUFBLEtBQUFBLEdBQUFBLENBQUFBLEtBQUFBLEdBQUFBLEdBQUFBLEdBQUFBLEVBQUFBLENBQUFBLENBQUFBO0FBQUFBLFVBQUFBO0FBQUFBLGlCQUFBQSxJQUFBQSxHQUFBQSxJQUFBQSxHQUFBQSxDQUFBQSxHQUFBQSxJQUFBQSxFQUFBQSxRQUFBQSxLQUFBQTtBQUFBQSxjQUFBQSxJQUFBQSxFQUFBQSxDQUFBQTtBQUFBQSxhQUFBQSxLQUFBQSxHQUFBQSxDQUFBQSxLQUFBQSxHQUFBQSxHQUFBQSxHQUFBQSxFQUFBQSxDQUFBQSxDQUFBQTtRQUFBQTtBQUFBQSxhQUFBQTtJQUFBQSxHQUFBQSxLQUFBQSxTQUFBQSxHQUFBQSxHQUFBQTtBQUFBQSxhQUFBQSxHQUFBQSxHQUFBQSxHQUFBQSxDQUFBQSxDQUFBQTtJQUFBQSxHQUFBQSxLQUFBQSxTQUFBQSxHQUFBQSxHQUFBQSxHQUFBQTtBQUFBQSxhQUFBQSxJQUFBQSxRQUFBQSxTQUFBQSxHQUFBQSxHQUFBQTtBQUFBQSxZQUFBQSxJQUFBQSxTQUFBQSxHQUFBQTtBQUFBQSxjQUFBQTtBQUFBQSxjQUFBQSxFQUFBQSxLQUFBQSxDQUFBQSxDQUFBQTtVQUFBQSxTQUFBQSxHQUFBQTtBQUFBQSxjQUFBQSxDQUFBQTtVQUFBQTtRQUFBQSxHQUFBQSxJQUFBQSxTQUFBQSxHQUFBQTtBQUFBQSxjQUFBQTtBQUFBQSxjQUFBQSxFQUFBQSxNQUFBQSxDQUFBQSxDQUFBQTtVQUFBQSxTQUFBQSxHQUFBQTtBQUFBQSxjQUFBQSxDQUFBQTtVQUFBQTtRQUFBQSxHQUFBQSxJQUFBQSxTQUFBQSxHQUFBQTtBQUFBQSxpQkFBQUEsRUFBQUEsT0FBQUEsRUFBQUEsRUFBQUEsS0FBQUEsSUFBQUEsUUFBQUEsUUFBQUEsRUFBQUEsS0FBQUEsRUFBQUEsS0FBQUEsR0FBQUEsQ0FBQUE7UUFBQUE7QUFBQUEsV0FBQUEsSUFBQUEsRUFBQUEsTUFBQUEsR0FBQUEsQ0FBQUEsR0FBQUEsS0FBQUEsQ0FBQUE7TUFBQUEsQ0FBQUE7SUFBQUE7QUlxTVIsUUFBTUUsS0FDWCxPQUFPLFNBQVcsT0FDakIsT0FBZSx1Q0FD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R0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUdBLEdBQWEsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBR0EsR0FBYSxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHQSxHQUFhLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUdBLEdBQWEsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBR0EsR0FBYSxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsSUFBSSxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHQSxHQUFhLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxJQUFJLElBQUksR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUdBLEdBQWEsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUksSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBR0EsR0FBYSxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsSUFBSSxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHQSxHQUFhLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxJQUFJLElBQUksR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUdBLEdBQWEsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUksSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBR0EsR0FBYSxHQUFHLEdBQUcsSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHQSxHQUFhLEdBQUcsR0FBRyxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksR0FBRyxHQUFHLEdBQUcsSUFB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LAogICJuYW1lcyI6IFsiaGFzT3duUHJvcGVydHkiLCAiZnJvbSIsICJSZWFjdERlYnVnQ3VycmVudEZyYW1lIiwgIkNvbXBvbmVudCIsICJQdXJlQ29tcG9uZW50IiwgImNyZWF0ZVJlZiIsICJ4IiwgImhhc093blByb3BlcnR5IiwgIlJlYWN0RWxlbWVudCIsICJzZWxmIiwgImNyZWF0ZUVsZW1lbnQiLCAiY2xvbmVFbGVtZW50IiwgImlzVmFsaWRFbGVtZW50IiwgIm9iamVjdCIsICJtYXRjaCIsICJmdW5jIiwgInRvQXJyYXkiLCAiY3JlYXRlQ29udGV4dCIsICJlcnJvciIsICJmb3J3YXJkUmVmIiwgInJlbmRlciIsICJtZW1vIiwgInVzZUNvbnRleHQiLCAidXNlU3RhdGUiLCAicmVkdWNlciIsICJ1c2VSZWYiLCAidXNlRWZmZWN0IiwgInVzZUxheW91dEVmZmVjdCIsICJ1c2VDYWxsYmFjayIsICJ1c2VNZW1vIiwgInByZWZpeCIsICJwcm90b3R5cGUiLCAibm9kZSIsICJrZXlzIiwgIkNoaWxkcmVuIiwgInJlcXVlc3RBbmltYXRpb25GcmFtZSIsICJjYW5jZWxBbmltYXRpb25GcmFtZSIsICJub2RlIiwgInBlZWsiLCAibGVuZ3RoIiwgImIiLCAiaW5pdGlhbFRpbWUiLCAiUmVhY3QiLCAiUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSIsICJGcmFnbWVudCIsICJoYXNPd25Qcm9wZXJ0eSIsICJwcmVmaXgiLCAic2FuaXRpemVVUkwiLCAiX3JlZiIsICJjYXBpdGFsaXplIiwgInRva2VuIiwgIm5vZGUiLCAieCIsICJtYXRjaCIsICJDb21wb25lbnQiLCAicHJvdG90eXBlIiwgIndvcmtJblByb2dyZXNzIiwgInRvU3RyaW5nIiwgImdldCIsICJzZXQiLCAiZ2V0QWN0aXZlRWxlbWVudCIsICJpc0h5ZHJhdGluZyIsICJ2YWxpZGF0ZVByb3BzIiwgImlzQXJyYXkiLCAib3B0aW9ucyIsICJmdW5jIiwgImlzQ3VzdG9tUHJvcGVydHkiLCAic3RyaW5nIiwgImNoYXJhY3RlciIsICJzdHlsZXMiLCAiZGVsaW1pdGVyIiwgInN0eWxlIiwgInJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXMiLCAicG9zc2libGVSZWdpc3RyYXRpb25OYW1lcyIsICJiIiwgImVycm9yIiwgImNhbGxDYWxsYmFjayIsICJjdXJyZW50IiwgInJvb3QiLCAicXVldWVkRXZlbnQiLCAicHJlZml4ZXMiLCAiaW5kZXgiLCAiaXNFdmVudFN1cHBvcnRlZCIsICJmcm9tIiwgImxlbmd0aCIsICJuZXh0IiwgIm5vb3AiLCAiY3JlYXRlRWxlbWVudCIsICJjcmVhdGVJbnN0YW5jZSIsICJjYW5jZWxUaW1lb3V0IiwgImhhcyIsICJjdXJzb3IiLCAibm93IiwgIl9xdWV1ZSIsICJyZW5kZXJMYW5lcyIsICJ1cGRhdGVGcmFnbWVudCIsICJjaGlsZCIsICJyZWNvbmNpbGVDaGlsZEZpYmVycyIsICJpc09iamVjdCIsICJyZWR1Y2VyIiwgInJlbmRlciIsICJzdWJ0cmVlUmVuZGVyTGFuZXMiLCAiaXNIaWRkZW4iLCAiZXJyb3IkMSIsICJjb21taXRUaW1lIiwgImh5ZHJhdGUiLCAiY3JlYXRlUG9ydGFsIiwgImN1cnJlbnRIb29rIiwgIlJlYWN0Q3VycmVudERpc3BhdGNoZXIiLCAib2JqZWN0IiwgIkVsZW1lbnQiLCAiRnJhZ21lbnQiLCAiaXNFbGVtZW50IiwgIngiLCAiYXNzaWduIiwgIngiLCAiaXNWYWxpZEVsZW1lbnQiLCAidmFsaWRhdGUiLCAiaSIsICJjaGVja2VyIiwgImhhc093biIsICJjbGFzc05hbWVzIiwgInJlcXVpcmVfcmVhY3RfaXNfZGV2ZWxvcG1lbnQiLCAib2JqZWN0IiwgIkVsZW1lbnQiLCAiRnJhZ21lbnQiLCAiaXNFbGVtZW50IiwgInJlcXVpcmVfcmVhY3RfaXMiLCAiZ2V0UHJvdG90eXBlT2YiLCAia2V5cyIsICJnbG9iYWwiLCAieCIsICJtaW4iLCAibWF4IiwgInJnYiIsICJpIiwgIkNvbG9yIiwgImIiLCAibGlzdCIsICJ0b1N0cmluZyIsICJhc3NpZ24iLCAiY3NzIiwgImkkMSIsICJoc2wiLCAidiIsICJuYW1lIiwgIm51bSIsICJybmQiLCAiYWJzIiwgImxhYiIsICJsY2giLCAiY29sb3JzIiwgIkEiLCAiZCIsICJmIiwgIl9wb3MiLCAibGlnaHRuZXNzIiwgImtleSIsICJsaW1pdHMiLCAiYjIiLCAiY2hyb21hIiwgImxlbmd0aCIsICJsZW5ndGgiLCAiU3ltYm9sIiwgIlN5bWJvbCIsICJoYXNPd25Qcm9wZXJ0eSIsICJTeW1ib2wiLCAiaXNPYmplY3QiLCAiaXNPYmplY3QiLCAiaXNGdW5jdGlvbiIsICJmdW5jIiwgImZ1bmMiLCAiaXNGdW5jdGlvbiIsICJpc09iamVjdCIsICJoYXNPd25Qcm9wZXJ0eSIsICJvYmplY3QiLCAib2JqZWN0IiwgIk1hcCIsICJoYXNPd25Qcm9wZXJ0eSIsICJoYXNPd25Qcm9wZXJ0eSIsICJsZW5ndGgiLCAiTWFwIiwgInNpemUiLCAibGVuZ3RoIiwgIk1hcCIsICJsZW5ndGgiLCAibGVuZ3RoIiwgIm90aFZhbHVlIiwgIlVpbnQ4QXJyYXkiLCAiU3ltYm9sIiwgIlVpbnQ4QXJyYXkiLCAib2JqZWN0IiwgImxlbmd0aCIsICJpc0FycmF5IiwgImlzQXJyYXkiLCAib2JqZWN0IiwgImxlbmd0aCIsICJvYmplY3QiLCAiaGFzT3duUHJvcGVydHkiLCAiQnVmZmVyIiwgImlzQnVmZmVyIiwgImxlbmd0aCIsICJmdW5jIiwgImlzVHlwZWRBcnJheSIsICJpc0FycmF5IiwgImlzQnVmZmVyIiwgImlzVHlwZWRBcnJheSIsICJoYXNPd25Qcm9wZXJ0eSIsICJsZW5ndGgiLCAiZnVuYyIsICJoYXNPd25Qcm9wZXJ0eSIsICJvYmplY3QiLCAiaXNGdW5jdGlvbiIsICJrZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIm9iamVjdCIsICJoYXNPd25Qcm9wZXJ0eSIsICJvYmplY3QiLCAiUHJvbWlzZSIsICJTZXQiLCAiV2Vha01hcCIsICJNYXAiLCAiUHJvbWlzZSIsICJTZXQiLCAiV2Vha01hcCIsICJpc0FycmF5IiwgImlzQnVmZmVyIiwgImlzVHlwZWRBcnJheSIsICJoYXNPd25Qcm9wZXJ0eSIsICJvYmplY3QiLCAiaXNFcXVhbCIsICJnbG9iYWwiLCAiaXNBcnJheSIsICJpc09iamVjdCIsICJiIiwgImlzVW5kZWZpbmVkIiwgImlzTnVtYmVyIiwgImlzRGF0ZSIsICJleHRlbmQiLCAiZm9ybWF0IiwgImxvY2FsZSIsICJ0byIsICJmcm9tIiwgImlzRnVuY3Rpb24iLCAia2V5cyIsICJjYWxlbmRhciIsICJub3ciLCAic2lnbiIsICJ0b2tlbiIsICJvcmRpbmFsIiwgImZ1bmMiLCAibGVuZ3RoIiwgImkiLCAic3RyaW5nIiwgImRpZmYiLCAibG9jYWxlRGF0YSIsICJnZXQiLCAieCIsICJob3VycyIsICJtaW51dGVzIiwgIm5leHQiLCAibWF0Y2giLCAiZGVmYXVsdHMiLCAidG9rZW5zIiwgIm1lcmlkaWVtIiwgInllYXJzIiwgIm1vbnRocyIsICJ3ZWVrcyIsICJkYXlzIiwgInNlY29uZHMiLCAibWlsbGlzZWNvbmRzIiwgIm9mZnNldCIsICJtYXRjaGVzIiwgImJhc2UiLCAiaXNTdHJpbmciLCAidG9TdHJpbmciLCAicHJlZml4IiwgInRvQXJyYXkiLCAidG9KU09OIiwgImFicyIsICJ0aHJlc2hvbGRzIiwgImlzQXJyYXkiLCAiaXNTdHJpbmciLCAiaXNCb29sZWFuIiwgImlzTnVtYmVyIiwgImlzTnVtYmVyIiwgImlzTmFOIiwgImdsb2JhbCIsICJudW1lcmFsIiwgIlZFUlNJT04iLCAiZGVmYXVsdHMiLCAiYWJzIiwgInN0cmluZyIsICJ4IiwgIm5leHQiLCAiYiIsICJtZW1vaXplIiwgImZ1bmMiLCAiaXNBcnJheSIsICJvYmplY3QiLCAibWVtb2l6ZSIsICJmdW5jIiwgInN0cmluZyIsICJtYXRjaCIsICJsZW5ndGgiLCAiU3ltYm9sIiwgImlzQXJyYXkiLCAidG9TdHJpbmciLCAiaXNBcnJheSIsICJ0b1N0cmluZyIsICJvYmplY3QiLCAib2JqZWN0IiwgImxlbmd0aCIsICJnZXQiLCAib2JqZWN0IiwgImxlbmd0aCIsICJmdW5jIiwgIm9iamVjdCIsICJoYXNPd25Qcm9wZXJ0eSIsICJvYmplY3QiLCAib2JqZWN0IiwgImxlbmd0aCIsICJrZXlzIiwgIm9iamVjdCIsICJvYmplY3QiLCAiaXNPYmplY3QiLCAiaGFzT3duUHJvcGVydHkiLCAib2JqZWN0IiwgIm9iamVjdCIsICJvYmplY3QiLCAiQnVmZmVyIiwgImxlbmd0aCIsICJsZW5ndGgiLCAib2JqZWN0IiwgIm9iamVjdCIsICJvYmplY3QiLCAib2JqZWN0IiwgImhhc093blByb3BlcnR5IiwgImxlbmd0aCIsICJVaW50OEFycmF5IiwgIlN5bWJvbCIsICJvYmplY3QiLCAiaXNPYmplY3QiLCAib2JqZWN0IiwgIm9iamVjdCIsICJpc0FycmF5IiwgImlzQnVmZmVyIiwgImlzT2JqZWN0IiwgImtleXMiLCAib2JqZWN0IiwgImtleSIsICJsZW5ndGgiLCAibGVuZ3RoIiwgIm9iamVjdCIsICJvYmplY3QiLCAiaGFzT3duUHJvcGVydHkiLCAiaXNQbGFpbk9iamVjdCIsICJpc1BsYWluT2JqZWN0IiwgIlN5bWJvbCIsICJpc0FycmF5IiwgImxlbmd0aCIsICJmbGF0dGVuIiwgImxlbmd0aCIsICJmdW5jIiwgImZ1bmMiLCAibGVuZ3RoIiwgImZ1bmMiLCAic3RyaW5nIiwgImZ1bmMiLCAiZmxhdHRlbiIsICJmdW5jIiwgIm9iamVjdCIsICJsZW5ndGgiLCAicmVxdWlyZV9yZWFjdF9pc19kZXZlbG9wbWVudCIsICJvYmplY3QiLCAiRWxlbWVudCIsICJGcmFnbWVudCIsICJpc0VsZW1lbnQiLCAicmVxdWlyZV9yZWFjdF9pcyIsICJlbmNvZGUiLCAicHJlZml4IiwgIm1hdGNoIiwgImJhc2UiLCAicGFyc2UiLCAiY2hhciIsICJ0b1N0cmluZyIsICJzdHJpbmdpZnkiLCAiX2V4dGVuZHMiLCAiX2NyZWF0ZUNsYXNzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJrZXlzIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJzZWxmIiwgIl9pbmhlcml0cyIsICJjbGVhbklucHV0UHJvcHMiLCAiY29weVN0eWxlcyIsICJzdHlsZXMiLCAibm9kZSIsICJnZW5lcmF0ZUlkIiwgIkF1dG9zaXplSW5wdXQiLCAiZm9jdXMiLCAiaW5qZWN0U3R5bGVzIiwgInJlbmRlciIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJwcm90b3R5cGUiLCAia2V5cyIsICJiIiwgImRlc2NyaXB0b3JzIiwgImZpbHRlciIsICJwb3NpdGlvbiIsICJtYXRjaGVzIiwgImhhc093blByb3BlcnR5IiwgInJlZHVjZXIiLCAiZGVsaW1pdGVyIiwgImRlZmluZSIsICJzaXplIiwgImxlbmd0aCIsICJmaWx0ZXIiLCAidG9rZW4iLCAibWF0Y2giLCAicHJvdG90eXBlIiwgInRvU3RyaW5nIiwgImVuY29kZSIsICJtYXRjaCIsICJrZXlzIiwgImlzRm9ybURhdGEiLCAiaXNGaWxlTGlzdCIsICJ0cmFuc2l0aW9uYWwiLCAibGluZSIsICJtYXRjaCIsICJmaWx0ZXIiLCAiY2hhciIsICJzZWxmIiwgImtleXMiLCAiY29tcHV0ZWQiLCAicHJvdG90eXBlIiwgInZhbGlkYXRlU3RhdHVzIiwgIm1hdGNoIiwgIm1hdGNoIiwgIm5vdyIsICJ0b2tlbiIsICJ0cmFuc2l0aW9uYWwiLCAibGVuZ3RoIiwgImIiLCAibWVyZ2UiLCAia2V5cyIsICJ2YWxpZGF0b3JzIiwgInRyYW5zaXRpb25hbCIsICJ0b2tlbiIsICJBeGlvcyIsICJBeGlvc0Vycm9yIiwgIkNhbmNlbGVkRXJyb3IiLCAiaXNDYW5jZWwiLCAiQ2FuY2VsVG9rZW4iLCAiVkVSU0lPTiIsICJhbGwiLCAiaXNBeGlvc0Vycm9yIiwgInNwcmVhZCIsICJ0b0Zvcm1EYXRhIiwgIkF4aW9zSGVhZGVycyIsICJIdHRwU3RhdHVzQ29kZSIsICJtZXJnZUNvbmZpZyIsICJ2IiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJSZWFjdCIsICJTdHlsZVNoZWV0IiwgImlzSW1wb3J0UnVsZSIsICJsZW5ndGgiLCAidHJpbSIsICJhcHBlbmQiLCAibGVuZ3RoIiwgInRyaW0iLCAibGVuZ3RoIiwgImNoYXJhY3RlciIsICJjaGFyYWN0ZXJzIiwgImFwcGVuZCIsICJzaXplIiwgIngiLCAidHJpbSIsICJsZW5ndGgiLCAibGVuZ3RoIiwgImlkZW50aWZpZXJXaXRoUG9pbnRUcmFja2luZyIsICJjaGFyYWN0ZXIiLCAidG9SdWxlcyIsICJnZXRSdWxlcyIsICJjb21wYXQiLCAicmVtb3ZlTGFiZWwiLCAiaXNJZ25vcmluZ0NvbW1lbnQiLCAiY3JlYXRlVW5zYWZlU2VsZWN0b3JzQWxhcm0iLCAibm9kZSIsICJpc0ltcG9ydFJ1bGUiLCAiaXNQcmVwZW5kZWRXaXRoUmVndWxhclJ1bGVzIiwgIm51bGxpZnlFbGVtZW50IiwgImluY29ycmVjdEltcG9ydEFsYXJtIiwgImxlbmd0aCIsICJwcmVmaXhlciIsICJjcmVhdGVDYWNoZSIsICJzdHlsaXMiLCAic3R5bGVzIiwgImluc2VydCIsICJjbGFzc05hbWVzIiwgInJlZ2lzdGVyU3R5bGVzIiwgImluc2VydFN0eWxlcyIsICJpc0N1c3RvbVByb3BlcnR5IiwgImlzUHJvY2Vzc2FibGVWYWx1ZSIsICJwcm9jZXNzU3R5bGVWYWx1ZSIsICJtYXRjaCIsICJuZXh0IiwgInN0eWxlcyIsICJzdHJpbmciLCAic2VyaWFsaXplU3R5bGVzIiwgInRvU3RyaW5nIiwgInN5bmNGYWxsYmFjayIsICJ1c2VJbnNlcnRpb25FZmZlY3QiLCAiaXNCcm93c2VyIiwgIndpdGhFbW90aW9uQ2FjaGUiLCAiZnVuYyIsICJpc0Jyb3dzZXIiLCAiZ2V0TGFzdFBhcnQiLCAiZ2V0RnVuY3Rpb25OYW1lRnJvbVN0YWNrVHJhY2VMaW5lIiwgImxpbmUiLCAibWF0Y2giLCAic2FuaXRpemVJZGVudGlmaWVyIiwgImlkZW50aWZpZXIiLCAiZ2V0TGFiZWxGcm9tU3RhY2tUcmFjZSIsICJjcmVhdGVFbW90aW9uUHJvcHMiLCAiSW5zZXJ0aW9uIiwgIl9yZWYiLCAiUmVhY3QiLCAianN4IiwgInN0eWxlcyIsICJpc0Jyb3dzZXIiLCAiX3JlZiIsICJuZXh0IiwgIm5vZGUiLCAia2V5ZnJhbWVzIiwgInRvU3RyaW5nIiwgImNsYXNzbmFtZXMiLCAibWVyZ2UiLCAiY3NzIiwgIkluc2VydGlvbiIsICJjeCIsICJvYmplY3QiLCAia2V5cyIsICJjbG9uZUVsZW1lbnRXaXRoQ3NzIiwgImV1aVNjcmVlblJlYWRlck9ubHkiLCAiZXVpU2NyZWVuUmVhZGVyT25seVN0eWxlcyIsICJFdWlTY3JlZW5SZWFkZXJPbmx5IiwgIl9yZWYiLCAiY2xhc3NOYW1lcyIsICJzdHlsZXMiLCAiUHJvcFR5cGVzIiwgIkV1aVNjcmVlblJlYWRlckxpdmUiLCAiX3JlZiIsICJ0b2dnbGUiLCAiUHJvcFR5cGVzIiwgImNhbmRpZGF0ZVNlbGVjdG9ycyIsICJjYW5kaWRhdGVTZWxlY3RvciIsICJqb2luIiwgIk5vRWxlbWVudCIsICJFbGVtZW50IiwgIm1hdGNoZXMiLCAicHJvdG90eXBlIiwgIm1zTWF0Y2hlc1NlbGVjdG9yIiwgIndlYmtpdE1hdGNoZXNTZWxlY3RvciIsICJnZXRSb290Tm9kZSIsICJlbGVtZW50IiwgIm93bmVyRG9jdW1lbnQiLCAiZ2V0Q2FuZGlkYXRlcyIsICJlbCIsICJpbmNsdWRlQ29udGFpbmVyIiwgImZpbHRlciIsICJjYW5kaWRhdGVzIiwgIkFycmF5IiwgInNsaWNlIiwgImFwcGx5IiwgInF1ZXJ5U2VsZWN0b3JBbGwiLCAiY2FsbCIsICJ1bnNoaWZ0IiwgImdldENhbmRpZGF0ZXNJdGVyYXRpdmVseSIsICJlbGVtZW50cyIsICJvcHRpb25zIiwgImVsZW1lbnRzVG9DaGVjayIsICJmcm9tIiwgImxlbmd0aCIsICJzaGlmdCIsICJ0YWdOYW1lIiwgImFzc2lnbmVkIiwgImFzc2lnbmVkRWxlbWVudHMiLCAiY29udGVudCIsICJjaGlsZHJlbiIsICJuZXN0ZWRDYW5kaWRhdGVzIiwgImZsYXR0ZW4iLCAicHVzaCIsICJzY29wZSIsICJ2YWxpZENhbmRpZGF0ZSIsICJpbmNsdWRlcyIsICJzaGFkb3dSb290IiwgImdldFNoYWRvd1Jvb3QiLCAidmFsaWRTaGFkb3dSb290IiwgInNoYWRvd1Jvb3RGaWx0ZXIiLCAiZ2V0VGFiaW5kZXgiLCAibm9kZSIsICJpc1Njb3BlIiwgInRhYkluZGV4IiwgInRlc3QiLCAiaXNDb250ZW50RWRpdGFibGUiLCAiaXNOYU4iLCAicGFyc2VJbnQiLCAiZ2V0QXR0cmlidXRlIiwgInNvcnRPcmRlcmVkVGFiYmFibGVzIiwgImEiLCAiYiIsICJkb2N1bWVudE9yZGVyIiwgImlzSW5wdXQiLCAiaXNIaWRkZW5JbnB1dCIsICJ0eXBlIiwgImlzRGV0YWlsc1dpdGhTdW1tYXJ5IiwgInIiLCAic29tZSIsICJjaGlsZCIsICJnZXRDaGVja2VkUmFkaW8iLCAibm9kZXMiLCAiZm9ybSIsICJpIiwgImNoZWNrZWQiLCAiaXNUYWJiYWJsZVJhZGlvIiwgIm5hbWUiLCAicmFkaW9TY29wZSIsICJxdWVyeVJhZGlvcyIsICJyYWRpb1NldCIsICJ3aW5kb3ciLCAiQ1NTIiwgImVzY2FwZSIsICJlcnIiLCAiY29uc29sZSIsICJlcnJvciIsICJtZXNzYWdlIiwgImlzUmFkaW8iLCAiaXNOb25UYWJiYWJsZVJhZGlvIiwgImlzWmVyb0FyZWEiLCAiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwgIndpZHRoIiwgImhlaWdodCIsICJpc0hpZGRlbiIsICJfcmVmIiwgImRpc3BsYXlDaGVjayIsICJnZXRDb21wdXRlZFN0eWxlIiwgInZpc2liaWxpdHkiLCAiaXNEaXJlY3RTdW1tYXJ5IiwgIm5vZGVVbmRlckRldGFpbHMiLCAicGFyZW50RWxlbWVudCIsICJub2RlUm9vdEhvc3QiLCAiaG9zdCIsICJub2RlSXNBdHRhY2hlZCIsICJjb250YWlucyIsICJvcmlnaW5hbE5vZGUiLCAicm9vdE5vZGUiLCAiYXNzaWduZWRTbG90IiwgImdldENsaWVudFJlY3RzIiwgImlzRGlzYWJsZWRGcm9tRmllbGRzZXQiLCAicGFyZW50Tm9kZSIsICJkaXNhYmxlZCIsICJpdGVtIiwgImlzTm9kZU1hdGNoaW5nU2VsZWN0b3JGb2N1c2FibGUiLCAiaXNOb2RlTWF0Y2hpbmdTZWxlY3RvclRhYmJhYmxlIiwgImlzVmFsaWRTaGFkb3dSb290VGFiYmFibGUiLCAic2hhZG93SG9zdE5vZGUiLCAic29ydEJ5T3JkZXIiLCAicmVndWxhclRhYmJhYmxlcyIsICJvcmRlcmVkVGFiYmFibGVzIiwgImZvckVhY2giLCAiY2FuZGlkYXRlVGFiaW5kZXgiLCAic29ydCIsICJyZWR1Y2UiLCAiYWNjIiwgInNvcnRhYmxlIiwgImNvbmNhdCIsICJ0YWJiYWJsZSIsICJiaW5kIiwgImZvY3VzYWJsZSIsICJrZXlzIiwgInN0cmluZ2lmeSIsICJiIiwgIm5vZGUiLCAiaW1wb3J0X3JlYWN0IiwgInByZWZpeCIsICJ1c2VHZW5lcmF0ZWRIdG1sSWQiLCAiX3JlZiIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0IiwgIm93bktleXMiLCAib2JqZWN0IiwgImtleXMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIl90eXBlb2YiLCAib2JqIiwgImlzT2JqZWN0IiwgImlzSW52ZXJzZUNvbG9yTW9kZSIsICJnZXRDb2xvck1vZGUiLCAiZ2V0T24iLCAibm9kZSIsICJzZXRPbiIsICJDb21wdXRlZCIsICJiYXNlIiwgIl9yZWYiLCAiX3JlZjIiLCAiZ2V0Q29tcHV0ZWQiLCAib3ZlciIsICJidWlsZFRoZW1lIiwgImdldFByb3RvdHlwZU9mIiwgInByb3RvdHlwZSIsICJrZXkiLCAiZ2V0IiwgIm1lcmdlRGVlcCIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9hcnJheUxpa2VUb0FycmF5IiwgImIiLCAiaW1wb3J0X2Nocm9tYV9qcyIsICJjb2xvcnMiLCAiY2hyb21hIiwgIl90b0NvbnN1bWFibGVBcnJheSIsICJfYXJyYXlXaXRob3V0SG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheSIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlU3ByZWFkIiwgIl9hcnJheUxpa2VUb0FycmF5IiwgImZsYXR0ZW4iLCAiX3JlZiIsICJldWlQYWxldHRlQ29sb3JCbGluZCIsICJfcmVmMiIsICJjb2xvcnMiLCAiYmFzZSIsICJfdG9Db25zdW1hYmxlQXJyYXkiLCAiYiIsICJjaHJvbWEiLCAiX2xvb3AiLCAiaSIsICJldWlQYWxldHRlQ29sb3JCbGluZEJlaGluZFRleHQiLCAiaW1wb3J0X2Nocm9tYV9qcyIsICJpbk9yaWdpbmFsRm9ybWF0IiwgInRyYW5zcGFyZW50aXplIiwgImNocm9tYSIsICJ0aW50IiwgInNoYWRlIiwgImxpZ2h0bmVzcyIsICJjaHJvbWEiLCAiaW1wb3J0X2Nocm9tYV9qcyIsICJfdHlwZW9mIiwgIm9iaiIsICJtYWtlSGlnaENvbnRyYXN0Q29sb3IiLCAiY2hyb21hIiwgImxpZ2h0bmVzcyIsICJtYWtlRGlzYWJsZWRDb250cmFzdENvbG9yIiwgIm93bktleXMiLCAib2JqZWN0IiwgImtleXMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJfcmVmIiwgIl9yZWYyIiwgIl9yZWYzIiwgIl9yZWY0IiwgIl9yZWY1IiwgImNvbG9ycyIsICJfcmVmNiIsICJfcmVmNyIsICJfcmVmOCIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIm93bktleXMiLCAib2JqZWN0IiwgImtleXMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAibG9naWNhbENTUyIsICJsb2dpY2FsU2l6ZUNTUyIsICJsb2dpY2FsVGV4dEFsaWduQ1NTIiwgIl90eXBlb2YiLCAib2JqIiwgInNpemVUb1BpeGVsIiwgImJhc2UiLCAiX3JlZiIsICJiYXNlIiwgImZvbnQiLCAiX3JlZjIiLCAiX3JlZjMiLCAiX3JlZjQiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJfcmVmIiwgIl9yZWYyIiwgIl9yZWYzIiwgIl9yZWY0IiwgIl9yZWY1IiwgIl9yZWY2IiwgIl9yZWY3IiwgIl9yZWY4IiwgIm93bktleXMiLCAib2JqZWN0IiwgImtleXMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJfcmVmIiwgIl9yZWYyIiwgImJhc2UiLCAiaW1wb3J0X3JlYWN0IiwgIl9leHRlbmRzIiwgInVzZUV1aVRoZW1lIiwgIndpdGhFdWlUaGVtZSIsICJDb21wb25lbnQiLCAiUmVuZGVyIiwgImltcG9ydF9yZWFjdCIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIkV1aVRoZW1lUHJvdmlkZXIiLCAiX3JlZiIsICJpc0VxdWFsIiwgInRocm90dGxlIiwgIl9zbGljZWRUb0FycmF5IiwgIl9hcnJheVdpdGhIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5TGltaXQiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVJlc3QiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiQ3VycmVudEV1aUJyZWFrcG9pbnRQcm92aWRlciIsICJfcmVmIiwgImltcG9ydF9yZWFjdCIsICJ1c2VDdXJyZW50RXVpQnJlYWtwb2ludCIsICJ1c2VJc1dpdGhpbkJyZWFrcG9pbnRzIiwgImZpbmRFbGVtZW50QnlTZWxlY3Rvck9yUmVmIiwgIm5vZGUiLCAiaXNVbmRlZmluZWQiLCAiaXNOdWxsIiwgImlzTmlsIiwgImlzRGF0ZSIsICJtb21lbnQiLCAiaXNGdW5jdGlvbiIsICJfaXNGdW5jdGlvbiIsICJpc0FycmF5IiwgIl9pc0FycmF5IiwgImlzU3RyaW5nIiwgIl9pc1N0cmluZyIsICJpc0Jvb2xlYW4iLCAiX2lzQm9vbGVhbiIsICJpc051bWJlciIsICJfaXNOdW1iZXIiLCAiaXNOYU4iLCAiX2lzTmFOIiwgImZvcm1hdEJvb2xlYW4iLCAiX3JlZiIsICJpbXBvcnRfbW9tZW50IiwgIl90eXBlb2YiLCAib2JqIiwgIm93bktleXMiLCAib2JqZWN0IiwgImtleXMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiY2FsZW5kYXIiLCAibW9tZW50IiwgIngiLCAiZm9ybWF0RGF0ZSIsICJpc1N0cmluZyIsICJpc0Z1bmN0aW9uIiwgImZvcm1hdE51bWJlciIsICJpc1N0cmluZyIsICJudW1lcmFsIiwgImZvcm1hdFRleHQiLCAiZm9ybWF0QXV0byIsICJpc05hTiIsICJpc1N0cmluZyIsICJpc0RhdGUiLCAiaXNCb29sZWFuIiwgImlzTnVtYmVyIiwgImlzQXJyYXkiLCAiaXNEb21haW5TZWN1cmUiLCAiZ2V0U2VjdXJlUmVsRm9yVGFyZ2V0IiwgIl9yZWYiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiUHJvcFR5cGVzIiwgImdldCIsICJvYmplY3QiLCAiX2dldCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJnZXRCdWZmZXJWYWx1ZXMiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX3JlZiIsICJwb3NpdGlvbiIsICJfcmVmMiIsICJfcmVmMyIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3JlZjQiLCAiX3JlZjUiLCAibm9kZSIsICJnZXRUcmFuc2l0aW9uVGltaW5ncyIsICJnZXRXYWl0RHVyYXRpb24iLCAicGVyZm9ybU9uRnJhbWUiLCAib25GcmFtZSIsICJpbXBvcnRfcmVhY3QiLCAidXNlQ29tYmluZWRSZWZzIiwgIm5vZGUiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJSZWFjdCIsICJfZXh0ZW5kcyIsICJFdWlJY29uQWNjZXNzaWJpbGl0eSIsICJfcmVmIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQWdncmVnYXRlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFsZXJ0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFuYWx5emVFdmVudCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BbmFseXplRXZlbnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQW5ub3RhdGlvbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcG1UcmFjZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBBZGREYXRhIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcEFkdmFuY2VkU2V0dGluZ3MiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwQWdlbnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwQXBtIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcEFwcFNlYXJjaCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBBdWRpdGJlYXQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwQ2FudmFzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcENhc2VzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcENvZGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwQ29uc29sZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBDcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBEYXNoYm9hcmQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwRGV2dG9vbHMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwRGlzY292ZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwRW1zIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcEZpbGViZWF0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcEZsZWV0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcEdpcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBHcmFwaCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBHcm9rIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcEhlYXJ0YmVhdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBJbmRleE1hbmFnZW1lbnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwSW5kZXhQYXR0ZXJuIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcEluZGV4Um9sbHVwIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcExlbnMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwTG9ncyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBNYW5hZ2VtZW50IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcE1ldHJpY2JlYXQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwTWV0cmljcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBNbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBNb25pdG9yaW5nIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcE5vdGVib29rIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcFBhY2tldGJlYXQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwUGlwZWxpbmUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwUmVjZW50bHlWaWV3ZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwUmVwb3J0aW5nIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcFNhdmVkT2JqZWN0cyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBTZWFyY2hQcm9maWxlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBTZWN1cml0eSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBTZWN1cml0eUFuYWx5dGljcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBTcGFjZXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwU3FsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcFRpbWVsaW9uIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcFVwZ3JhZGVBc3Npc3RhbnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwVXB0aW1lIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcFVzZXJzUm9sZXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwVmlzdWFsaXplIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcFdhdGNoZXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwV29ya3BsYWNlU2VhcmNoIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcHMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXJyb3dFbmQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXJyb3dTdGFydCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcnJvd0Rvd24iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXJyb3dMZWZ0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFycm93UmlnaHQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXJyb3dVcCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Bc3RlcmlzayIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25CZWFrZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQmVsbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25CZWxsU2xhc2giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQm9sdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Cb3hlc0hvcml6b250YWwiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQm94ZXNWZXJ0aWNhbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25CcmFuY2giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQnJhbmNoVXNlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ccm9vbSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25CcnVzaCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25CdWciLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQnVsbHNleWUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ2FsZW5kYXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ2hlY2siLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ2hlY2tJbkNpcmNsZUZpbGxlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25DaGVlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25DbG9jayIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25DbG91ZERyaXp6bGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ2xvdWRTdG9ybXkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ2xvdWRTdW5ueSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25DbHVzdGVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNvbG9yIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNvbXB1dGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ29uc29sZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Db250YWluZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ29udGludWl0eUFib3ZlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNvbnRpbnVpdHlBYm92ZUJlbG93IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNvbnRpbnVpdHlCZWxvdyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Db250aW51aXR5V2l0aGluIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNvbnRyb2xzSG9yaXpvbnRhbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Db250cm9sc1ZlcnRpY2FsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNvcHkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ29weUNsaXBib2FyZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Dcm9zcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Dcm9zc0luQUNpcmNsZUZpbGxlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Dcm9zc2hhaXJzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkN1cnJlbmN5IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkN1dCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25EYXRhYmFzZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25EZXNrdG9wIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkRvY3VtZW50IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkRvY3VtZW50RWRpdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Eb2N1bWVudGF0aW9uIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkRvY3VtZW50cyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Eb3QiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRG91YmxlQXJyb3dMZWZ0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkRvdWJsZUFycm93UmlnaHQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRG93bmxvYWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWwiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvckl0ZW1BbGlnbkJvdHRvbSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JJdGVtQWxpZ25DZW50ZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9ySXRlbUFsaWduTGVmdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JJdGVtQWxpZ25NaWRkbGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9ySXRlbUFsaWduUmlnaHQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9ySXRlbUFsaWduVG9wIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvclBvc2l0aW9uQm90dG9tTGVmdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvclBvc2l0aW9uVG9wTGVmdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JQb3NpdGlvblRvcFJpZ2h0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvckFsaWduQ2VudGVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvckFsaWduTGVmdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JBbGlnblJpZ2h0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvckJvbGQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9yQ2hlY2tsaXN0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvckNvZGVCbG9jayIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JDb21tZW50IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvckhlYWRpbmciLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9ySXRhbGljIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvckxpbmsiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9yT3JkZXJlZExpc3QiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9yUmVkbyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JTdHJpa2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9yVGFibGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9yVW5kZXJsaW5lIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvclVuZG8iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9yVW5vcmRlcmVkTGlzdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FbWFpbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FbXB0eSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FcWwiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRXJhc2VyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkV4aXQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRXhwYW5kIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkV4cGFuZE1pbmkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRXhwb3J0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkV5ZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FeWVDbG9zZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRmFjZUhhcHB5IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkZhY2VOZXV0cmFsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkZhY2VTYWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRmlsdGVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkZsYWciLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRm9sZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Gb2xkZXJDaGVjayIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Gb2xkZXJDbG9zZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRm9sZGVyRXhjbGFtYXRpb24iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRm9sZGVyT3BlbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25GcmFtZU5leHQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRnJhbWVQcmV2aW91cyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25GdWxsU2NyZWVuRXhpdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25GdWxsU2NyZWVuIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkZ1bmN0aW9uIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkdlYXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uR2xhc3NlcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25HbG9iZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25HcmFiIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkdyYWJIb3Jpem9udGFsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkdyaWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uSGVhcnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uSGVhdG1hcCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25IZWxwIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkhvbWUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uSUluQ2lyY2xlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkltYWdlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkltcG9ydCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25JbmRleENsb3NlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkluZGV4RWRpdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25JbmRleEZsdXNoIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkluZGV4TWFwcGluZyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25JbmRleE9wZW4iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uSW5kZXhSdW50aW1lIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkluZGV4U2V0dGluZ3MiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uSW5wdXRPdXRwdXQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uSW5zcGVjdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25JbnZlcnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uSXAiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uS2V5Ym9hcmQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uS3FsRmllbGQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uS3FsRnVuY3Rpb24iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uS3FsT3BlcmFuZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25LcWxTZWxlY3RvciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25LcWxWYWx1ZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25LdWJlcm5ldGVzTm9kZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25LdWJlcm5ldGVzUG9kIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxheWVycyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25MZXR0ZXJpbmciLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTGluZURhc2hlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25MaW5lRG90dGVkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxpbmVTb2xpZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25MaW5rIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxpc3QiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTGlzdEFkZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2NrIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvY2tPcGVuIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29BZXJvc3Bpa2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0FwYWNoZSIsICJfcmVmIiwgImdlbmVyYXRlSWQiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29BcHBTZWFyY2giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0F3cyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvQXdzTW9ubyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvQXp1cmUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0F6dXJlTW9ubyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvQmVhdHMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0J1c2luZXNzQW5hbHl0aWNzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29DZXBoIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29DbG91ZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvQ2xvdWRFY2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0NvZGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0NvZGVzYW5kYm94IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29Db3VjaGJhc2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0RvY2tlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvRHJvcHdpemFyZCIsICJfcmVmIiwgImdlbmVyYXRlSWQiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29FbGFzdGljIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29FbGFzdGljU3RhY2siLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0VsYXN0aWNzZWFyY2giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0VudGVycHJpc2VTZWFyY2giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0V0Y2QiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0djcCIsICJfcmVmIiwgImdlbmVyYXRlSWQiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29HY3BNb25vIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29HaXRodWIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0dtYWlsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29Hb2xhbmciLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0dvb2dsZUciLCAiX3JlZiIsICJnZW5lcmF0ZUlkIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvSGFwcm94eSIsICJfcmVmIiwgImdlbmVyYXRlSWQiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29JYm0iLCAiX3JlZiIsICJnZW5lcmF0ZUlkIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvSWJtTW9ubyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvS2Fma2EiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0tpYmFuYSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvS3ViZXJuZXRlcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvTG9nZ2luZyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvTG9nc3Rhc2giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb01hcHMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb01lbWNhY2hlZCIsICJfcmVmIiwgImdlbmVyYXRlSWQiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29NZXRyaWNzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29Nb25nb2RiIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29NeXNxbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvTmdpbngiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb09ic2VydmFiaWxpdHkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb09zcXVlcnkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb1BocCIsICJfcmVmIiwgImdlbmVyYXRlSWQiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29Qb3N0Z3JlcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvUHJvbWV0aGV1cyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvUmFiYml0bXEiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb1JlZGlzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29TZWN1cml0eSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvU2l0ZVNlYXJjaCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvU2tldGNoIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29TbGFjayIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvVXB0aW1lIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29XZWJob29rIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29XaW5kb3dzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29Xb3JrcGxhY2VTZWFyY2giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nc3Rhc2hGaWx0ZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nc3Rhc2hJZiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dzdGFzaElucHV0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ3N0YXNoT3V0cHV0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ3N0YXNoUXVldWUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWFnbmV0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1hZ25pZnlXaXRoRXhjbGFtYXRpb24iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWFnbmlmeVdpdGhNaW51cyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NYWduaWZ5V2l0aFBsdXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWFwTWFya2VyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1lbW9yeSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NZW51IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1lbnVEb3duIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1lbnVMZWZ0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1lbnVSaWdodCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NZW51VXAiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWVyZ2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWluaW1pemUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWludXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWludXNJbkNpcmNsZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NaW51c0luQ2lyY2xlRmlsbGVkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1sQ2xhc3NpZmljYXRpb25Kb2IiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWxDcmVhdGVBZHZhbmNlZEpvYiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NbENyZWF0ZU11bHRpTWV0cmljSm9iIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1sQ3JlYXRlUG9wdWxhdGlvbkpvYiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NbENyZWF0ZVNpbmdsZU1ldHJpY0pvYiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NbERhdGFWaXN1YWxpemVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1sT3V0bGllckRldGVjdGlvbkpvYiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NbFJlZ3Jlc3Npb25Kb2IiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTW9iaWxlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1vb24iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTmFtZXNwYWNlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk5lc3RlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ob2RlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk51bWJlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25PZmZsaW5lIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk9ubGluZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25QYWNrYWdlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblBhZ2VTZWxlY3QiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUGFnZXNTZWxlY3QiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUGFpbnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUGFwZXJDbGlwIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblBhcnRpYWwiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUGF1c2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUGF5bWVudCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25QZW5jaWwiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUGVyY2VudCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25QaW4iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUGluRmlsbGVkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblBsYXkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUGxheUZpbGxlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25QbHVzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblBsdXNJbkNpcmNsZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25QbHVzSW5DaXJjbGVGaWxsZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUG9wb3V0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblB1c2giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUXVlc3Rpb25JbkNpcmNsZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25RdW90ZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25SZWZyZXNoIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblJlcG9ydGVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblJldHVybktleSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TYXZlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblNjYWxlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblNlYXJjaCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TZWN1cml0eVNpZ25hbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TZWN1cml0eVNpZ25hbERldGVjdGVkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblNlY3VyaXR5U2lnbmFsUmVzb2x2ZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU2Vzc2lvblZpZXdlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TaGFyZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TaGFyZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Tbm93Zmxha2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU29ydExlZnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU29ydFJpZ2h0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblNvcnREb3duIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblNvcnRVcCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Tb3J0YWJsZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TdGFyUGx1c0VtcHR5IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblN0YXJQbHVzRmlsbGVkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblN0YXJFbXB0eSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TdGFyRW1wdHlTcGFjZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TdGFyRmlsbGVkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblN0YXJGaWxsZWRTcGFjZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TdGFyTWludXNFbXB0eSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TdGFyTWludXNGaWxsZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3RhdHMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3RvcCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TdG9wRmlsbGVkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblN0b3BTbGFzaCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TdG9yYWdlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblN0cmluZyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TdWJtb2R1bGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3VuIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblN3YXRjaElucHV0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblN5bWxpbmsiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVGFibGVPZkNvbnRlbnRzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRhYmxlRGVuc2l0eUNvbXBhY3QiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVGFibGVEZW5zaXR5RXhwYW5kZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVGFibGVEZW5zaXR5Tm9ybWFsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRhZyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25UZWFyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRlbXBlcmF0dXJlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRpbWVSZWZyZXNoIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRpbWVsaW5lIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRpbWVzbGlkZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5BbGlhcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbkFubm90YXRpb24iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5BcnJheSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbkJpbmFyeSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbkJvb2xlYW4iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5DbGFzcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbkNvbXBsZXRpb25TdWdnZXN0ZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5Db25zdGFudCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbkRhdGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5EZW5zZVZlY3RvciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbkVsZW1lbnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5FbnVtIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuRW51bU1lbWJlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbkV2ZW50IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuRXhjZXB0aW9uIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuRmllbGQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5GaWxlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuRmxhdHRlbmVkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuRnVuY3Rpb24iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5HZW8iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5IaXN0b2dyYW0iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5JUCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbkludGVyZmFjZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbkpvaW4iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5LZXkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5LZXl3b3JkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuTWV0aG9kIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuTWV0cmljQ291bnRlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbk1ldHJpY0dhdWdlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuTW9kdWxlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuTmFtZXNwYWNlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuTmVzdGVkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuTnVsbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbk51bWJlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbk9iamVjdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbk9wZXJhdG9yIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuUGFja2FnZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlblBhcmFtZXRlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlblBlcmNvbGF0b3IiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5Qcm9wZXJ0eSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlblJhbmdlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuUmFua0ZlYXR1cmUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5SYW5rRmVhdHVyZXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5SZXBvIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuU2VhcmNoVHlwZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlblNoYXBlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuU3RyaW5nIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuU3RydWN0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuU3ltYm9sIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuVGFnIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuVGV4dCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlblRva2VuQ291bnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5WYXJpYWJsZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25UcmFpbmluZyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25UcmFzaCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25VbmZvbGQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVW5saW5rIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblVzZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVXNlckF2YXRhciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Vc2VycyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WZWN0b3IiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVmlkZW9QbGF5ZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVmlzQXJlYSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNBcmVhU3RhY2tlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNCYXJIb3Jpem9udGFsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblZpc0Jhckhvcml6b250YWxTdGFja2VkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblZpc0JhclZlcnRpY2FsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblZpc0JhclZlcnRpY2FsU3RhY2tlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNHYXVnZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNHb2FsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblZpc0xpbmUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVmlzTWFwQ29vcmRpbmF0ZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNNYXBSZWdpb24iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVmlzTWV0cmljIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblZpc1BpZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNUYWJsZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNUYWdDbG91ZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNUZXh0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblZpc1RpbWVsaW9uIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblZpc1ZlZ2EiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVmlzVmlzdWFsQnVpbGRlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Xb3JkV3JhcCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Xb3JkV3JhcERpc2FibGVkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbldyZW5jaCIsICJfcmVmIiwgImljb24iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9yZWFjdCIsICJldWlCYWNrZ3JvdW5kQ29sb3IiLCAiX3JlZiIsICJfcmVmMiIsICJ0aW50T3JTaGFkZSIsICJjb2xvciIsICJ1c2VFdWlCYWNrZ3JvdW5kQ29sb3IiLCAiX3JlZjMiLCAidXNlRXVpQmFja2dyb3VuZENvbG9yQ1NTIiwgImV1aVNjcm9sbEJhclN0eWxlcyIsICJfcmVmIiwgImNvbG9ycyIsICJzaXplIiwgIl9yZWYyIiwgImV1aVBhZGRpbmdTaXplIiwgIl9yZWYiLCAic2l6ZSIsICJ1c2VFdWlQYWRkaW5nU2l6ZSIsICJ1c2VFdWlQYWRkaW5nQ1NTIiwgImV1aUZvY3VzUmluZyIsICJldWlGb250U2l6ZSIsICJfcmVmIiwgImV1aVRleHRCcmVha1dvcmQiLCAiRXVpR2xvYmFsU3R5bGVzIiwgIl9yZWYiLCAiYmFzZSIsICJjb2xvcnMiLCAiZm9udCIsICJzdHlsZXMiLCAiaWNvblNpemUiLCAic2l6ZSIsICJldWlJY29uU3R5bGVzIiwgIl9yZWYzIiwgIl90eXBlb2YiLCAib2JqIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX2NyZWF0ZUNsYXNzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJvIiwgInAiLCAic2VsZiIsICJfZ2V0UHJvdG90eXBlT2YiLCAiZ2V0SXNBcHBJY29uIiwgIngiLCAiaWNvbiIsICJFdWlJY29uQ2xhc3MiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfcmVmIiwgImljb24iLCAiX2NyZWF0ZUNsYXNzIiwgInJlbmRlciIsICJzaXplIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfZXhjbHVkZWQiLCAiX29iamVjdFNwcmVhZCIsICJjbGFzc05hbWVzIiwgInN0eWxlcyIsICJmb2N1c2FibGUiLCAiX2V4dGVuZHMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiRXVpQ29udGV4dCIsICJfcmVmIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiX3R5cGVvZiIsICJvYmoiLCAiaXNCb29sZWFuIiwgImlzU3RyaW5nIiwgImlzTnVtYmVyIiwgImlzVW5kZWZpbmVkIiwgImNoYXIiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJ0b2tlbiIsICJyZW5kZXIiLCAiQ29tcG9uZW50IiwgIlJlYWN0IiwgIngiLCAiRXVpSTE4biIsICJfcmVmIiwgIl9yZWYyIiwgInVzZUxvYWRpbmdBcmlhTGFiZWwiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl90ZW1wbGF0ZU9iamVjdCIsICJfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsIiwgInNwaW5uZXJDb2xvcnNDU1MiLCAiYm9yZGVyIiwgImhpZ2hsaWdodCIsICJldWlMb2FkaW5nU3Bpbm5lclN0eWxlcyIsICJfcmVmIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpTG9hZGluZ1NwaW5uZXIiLCAiX3JlZiIsICJzaXplIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfZXhjbHVkZWQiLCAic3R5bGVzIiwgImNsYXNzTmFtZXMiLCAiX2V4dGVuZHMiLCAiUHJvcFR5cGVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpQnV0dG9uQ29udGVudERlcHJlY2F0ZWQiLCAiX3JlZiIsICJpY29uU2l6ZSIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJVUkwiLCAiX2V4Y2x1ZGVkIiwgIl9leGNsdWRlZDIiLCAiX2V4dGVuZHMiLCAib3duS2V5cyIsICJvYmplY3QiLCAia2V5cyIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiQ09MT1JTIiwgIlNJWkVTIiwgIkV1aUJ1dHRvbiIsICJfcmVmIiwgIlByb3BUeXBlcyIsICJfcmVmMiIsICJzaXplIiwgImNsYXNzTmFtZXMiLCAiUmVhY3QiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdCIsICJfdHlwZW9mIiwgIm9iaiIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX2NyZWF0ZUNsYXNzIiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAibyIsICJwIiwgIl9jcmVhdGVTdXBlciIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJzZWxmIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIkV1aU9ic2VydmVyIiwgInJlbmRlciIsICJfdHlwZW9mIiwgIm9iaiIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJvIiwgInAiLCAiX2NyZWF0ZVN1cGVyIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgInNlbGYiLCAiX3R5cGVvZiIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJFdWlSZXNpemVPYnNlcnZlciIsICJtYWtlUmVzaXplT2JzZXJ2ZXIiLCAibm9kZSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18iLCAiX2NvbG9yQ1NTIiwgImV1aUxpbmtIb3ZlckNTUyIsICJldWlMaW5rRm9jdXNDU1MiLCAiZXVpTGlua0NTUyIsICJfcmVmIiwgImV1aUxpbmtTdHlsZXMiLCAiX3JlZjIiLCAib3duS2V5cyIsICJvYmplY3QiLCAia2V5cyIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJldWlUaXRsZSIsICJfcmVmIiwgIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fIiwgImV1aVRpdGxlU3R5bGVzIiwgImV1aVRleHQiLCAiZXVpU2NhbGVUZXh0IiwgImV1aVRleHRTdHlsZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fIiwgIl9yZWYiLCAiZXVpVGV4dENvbG9yU3R5bGVzIiwgIl9yZWYyIiwgIl9leGNsdWRlZCIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJDT0xPUlMiLCAiRXVpVGV4dENvbG9yIiwgIl9yZWYiLCAiY2xvbmVFbGVtZW50IiwgImlzTmFtZWRDb2xvciIsICJzdHlsZXMiLCAiQ29tcG9uZW50IiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiZXVpVGV4dEFsaWduU3R5bGVzIiwgIl9leGNsdWRlZCIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlUZXh0QWxpZ24iLCAiX3JlZiIsICJjbG9uZUVsZW1lbnQiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJzdHlsZXMiLCAiX29iamVjdFNwcmVhZCIsICJQcm9wVHlwZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlUZXh0IiwgIl9yZWYiLCAic2l6ZSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX2V4Y2x1ZGVkIiwgInN0eWxlcyIsICJjbGFzc05hbWVzIiwgIl9leHRlbmRzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIm93bktleXMiLCAib2JqZWN0IiwgImtleXMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgImNvbG9yVG9DbGFzc05hbWVNYXAiLCAiQ09MT1JTIiwgInNpemVUb0NsYXNzTmFtZU1hcCIsICJTSVpFUyIsICJFdWlCdXR0b25FbXB0eSIsICJfcmVmIiwgImljb25TaXplIiwgInNpemUiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiY29sb3JUb0NsYXNzTmFtZU1hcCIsICJDT0xPUlMiLCAic2l6ZVRvQ2xhc3NOYW1lTWFwIiwgIlNJWkVTIiwgIkV1aUJ1dHRvbkljb24iLCAiX3JlZiIsICJpY29uU2l6ZSIsICJzaXplIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9yZWFjdCIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIm5vZGUiLCAiRXVpSW5uZXJUZXh0IiwgIl9yZWYiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJjYW5jZWxGcmFtZSIsICJhbmltYXRpb24iLCAiY3NzIiwgIl90eXBlb2YiLCAib2JqIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgIm8iLCAicCIsICJfY3JlYXRlU3VwZXIiLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAic2VsZiIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIkV1aUF1dG9TaXplciIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X2Nocm9tYV9qcyIsICJpbXBvcnRfY2hyb21hX2pzIiwgIl90eXBlb2YiLCAib2JqIiwgInBhcnNlQ29sb3IiLCAiY2hyb21hVmFsaWQiLCAiX3R5cGVvZiIsICJjaHJvbWEiLCAiX2V4Y2x1ZGVkIiwgIl90b0NvbnN1bWFibGVBcnJheSIsICJfYXJyYXlXaXRob3V0SG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheSIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlU3ByZWFkIiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIl9leHRlbmRzIiwgIm93bktleXMiLCAib2JqZWN0IiwgImtleXMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkNPTE9SUyIsICJpY29uU2lkZVRvQ2xhc3NOYW1lTWFwIiwgIklDT05fU0lERVMiLCAiRXVpQmFkZ2UiLCAiX3JlZiIsICJjbGFzc05hbWVzIiwgIkVsZW1lbnQiLCAiUHJvcFR5cGVzIiwgImNocm9tYSIsICJpc05hbWVkQ29sb3IiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJfdHlwZW9mIiwgIm9iaiIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX2NyZWF0ZUNsYXNzIiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAibyIsICJwIiwgIl9jcmVhdGVTdXBlciIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJzZWxmIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIkV1aVBvcnRhbCIsICJwb3NpdGlvbiIsICJyZW5kZXIiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfdHlwZW9mIiwgIm9iaiIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfY3JlYXRlQ2xhc3MiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJvIiwgInAiLCAiX2NyZWF0ZVN1cGVyIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgInNlbGYiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiRXVpVG9vbFRpcFBvcG92ZXIiLCAicmVuZGVyIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgIl90eXBlb2YiLCAib2JqIiwgIl9leGNsdWRlZCIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX2NyZWF0ZUNsYXNzIiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAibyIsICJwIiwgIl9jcmVhdGVTdXBlciIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJzZWxmIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiZGlzcGxheVRvQ2xhc3NOYW1lTWFwIiwgIkV1aVRvb2xUaXAiLCAicG9zaXRpb24iLCAicmVuZGVyIiwgImNsYXNzTmFtZXMiLCAiYW5jaG9yIiwgIm9uRm9jdXMiLCAib25CbHVyIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVGlwIiwgIl9yZWYiLCAic2l6ZSIsICJwb3NpdGlvbiIsICJQcm9wVHlwZXMiLCAiX2V4Y2x1ZGVkIiwgIl90eXBlb2YiLCAib2JqIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJDT0xPUlMiLCAiU0laRVMiLCAiRXVpQmV0YUJhZGdlIiwgIl9yZWYiLCAic2l6ZSIsICJjbGFzc05hbWVzIiwgImljb24iLCAiRWxlbWVudCIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X2Nocm9tYV9qcyIsICJnZXRTaGFkb3dDb2xvciIsICJjaHJvbWEiLCAiZXVpU2hhZG93WFNtYWxsIiwgIl9yZWYiLCAiX3JlZjIiLCAiZXVpU2hhZG93U21hbGwiLCAiX3JlZjMiLCAiX3JlZjQiLCAiZXVpU2hhZG93TWVkaXVtIiwgIl9yZWY1IiwgIl9yZWY2IiwgInYiLCAiZXVpU2hhZG93TGFyZ2UiLCAiX3JlZjciLCAiX3JlZjgiLCAiZXVpU2hhZG93WExhcmdlIiwgInJldmVyc2UiLCAiZXVpU2hhZG93RmxhdCIsICJldWlTaGFkb3ciLCAic2l6ZSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIm93bktleXMiLCAib2JqZWN0IiwgImtleXMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9yZWYiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJzdHlsZXMiLCAiX29iamVjdFNwcmVhZCIsICJjbGFzc05hbWVzIiwgIl9leHRlbmRzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIl9fYXNzaWduIiwgImZyb20iLCAiUmVhY3QiLCAiUmVhY3QiLCAiUmVhY3QiLCAiaW1wb3J0X3JlYWN0IiwgIlJlYWN0IiwgImRlZmF1bHRzIiwgIm1pZGRsZXdhcmUiLCAieCIsICJjYnMiLCAiZmlsdGVyIiwgIlJlYWN0IiwgIlNpZGVDYXIiLCAiUmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiUmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiSW5Gb2N1c0d1YXJkIiwgIl9yZWYiLCAiUHJvcFR5cGVzIiwgIl9yZWYiLCAiaW1wb3J0X3JlYWN0IiwgIl9leHRlbmRzMiIsICJTaWRlQ2FyIiwgIl9yZWYiLCAiY2FwdHVyZUZvY3VzUmVzdG9yZSIsICJvbkZvY3VzIiwgIm9uQmx1ciIsICJleHRyYWN0UmVmIiwgImVmZmVjdENhciIsICJTaWRlQ2FyIiwgImVmZmVjdENhciIsICJSZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJfc2V0UHJvdG90eXBlT2YiLCAibyIsICJwIiwgIl9zZXRQcm90b3R5cGVPZiIsICJfdHlwZW9mIiwgIm8iLCAiX3R5cGVvZiIsICJfdHlwZW9mIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJpbXBvcnRfcmVhY3QiLCAicmVkdWNlUHJvcHNUb1N0YXRlIiwgImhhbmRsZVN0YXRlQ2hhbmdlT25DbGllbnQiLCAiU2lkZUVmZmVjdCIsICJwZWVrIiwgInJlbmRlciIsICJSZWFjdCIsICJfZGVmaW5lUHJvcGVydHkiLCAidG9BcnJheSIsICJhc0FycmF5IiwgIm5vZGUiLCAieCIsICJiIiwgIm5vZGUiLCAidG9BcnJheSIsICJ0b0FycmF5IiwgIm5vZGUiLCAidG9BcnJheSIsICJub2RlIiwgInBvc2l0aW9uIiwgIm5vZGUiLCAiYXNBcnJheSIsICJ0b0FycmF5IiwgInRvQXJyYXkiLCAibm9kZSIsICJ0b0FycmF5IiwgIm5vZGUiLCAibm9kZSIsICJub2RlIiwgIm5vZGUiLCAibm9kZSIsICJhc0FycmF5IiwgIm5vZGUiLCAiYXNBcnJheSIsICJub2RlIiwgImZvY3VzYWJsZSIsICJsaW5lIiwgImZvY3VzYWJsZSIsICJhc0FycmF5IiwgIm5vZGUiLCAibmV4dCIsICJwcmV2IiwgImZvY3VzT25Cb2R5IiwgImlzRnJlZUZvY3VzIiwgImRlZmF1bHRXaGl0ZWxpc3QiLCAiZm9jdXNXaGl0ZWxpc3RlZCIsICJyZWNvcmRQb3J0YWwiLCAiZm9jdXNJc1BvcnRhbGVkUGFpciIsICJmb2N1c1dhc091dHNpZGUiLCAiY2hlY2tJbkhvc3QiLCAid2l0aGluSG9zdCIsICJhY3RpdmF0ZVRyYXAiLCAiX3JlZiIsICJub2RlIiwgIl9yZWYyIiwgIl9yZWYzIiwgIm9uVHJhcCIsICJvbkJsdXIiLCAib25Gb2N1cyIsICJGb2N1c1dhdGNoZXIiLCAiRm9jdXNUcmFwIiwgIl9yZWY0IiwgIlByb3BUeXBlcyIsICJvbldpbmRvd0JsdXIiLCAiYXR0YWNoSGFuZGxlciIsICJkZXRhY2hIYW5kbGVyIiwgIl9yZWY1IiwgIl9yZWY2IiwgIlJlYWN0IiwgIlJlYWN0IiwgIlJlYWN0IiwgImNzcyIsICJzdHlsZXMiLCAic3R5bGVzIiwgInBhcnNlIiwgIngiLCAibm9kZSIsICJzdHlsZXMiLCAicG9zaXRpb24iLCAiZXh0cmFjdFJlZiIsICJ4IiwgIlN0eWxlIiwgIm5vZGUiLCAic2lkZWNhcl9kZWZhdWx0IiwgIlJlYWN0IiwgIm5vZGUiLCAieCIsICJSZWFjdCIsICJTdHlsZSIsICJpbXBvcnRfcmVhY3QiLCAiZXh0cmFjdFJlZiIsICJub2RlIiwgInNpZGVjYXJfZGVmYXVsdCIsICJlZmZlY3RDYXIiLCAic2lkZWNhcl9kZWZhdWx0IiwgIkZvY3VzT24iLCAiX3R5cGVvZiIsICJvYmoiLCAiX2V4Y2x1ZGVkIiwgIm93bktleXMiLCAib2JqZWN0IiwgImtleXMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfY3JlYXRlQ2xhc3MiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJvIiwgInAiLCAiX2NyZWF0ZVN1cGVyIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgInNlbGYiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJFdWlGb2N1c1RyYXAiLCAibm9kZSIsICJyZW5kZXIiLCAiRm9jdXNPbiIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9yZWFjdCIsICJfdHlwZW9mIiwgIm9iaiIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9jbGFzc0NhbGxDaGVjayIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgIm8iLCAicCIsICJfY3JlYXRlU3VwZXIiLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAic2VsZiIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIkV1aU11dGF0aW9uT2JzZXJ2ZXIiLCAibWFrZU11dGF0aW9uT2JzZXJ2ZXIiLCAibm9kZSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiX3R5cGVvZiIsICJvYmoiLCAib3duS2V5cyIsICJvYmplY3QiLCAia2V5cyIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX2NyZWF0ZUNsYXNzIiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAibyIsICJwIiwgIl9jcmVhdGVTdXBlciIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJzZWxmIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiRXVpT3V0c2lkZUNsaWNrRGV0ZWN0b3IiLCAicmVuZGVyIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiZXVpUG9wb3ZlckFycm93U3R5bGVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpUG9wb3ZlckFycm93IiwgIl9yZWYiLCAicG9zaXRpb24iLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJzdHlsZXMiLCAiX2V4dGVuZHMiLCAiUHJvcFR5cGVzIiwgImV1aVBvcG92ZXJTdHlsZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJfcmVmIiwgIl9yZWYyIiwgImV1aVBhbmVsU3R5bGVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfZGVmaW5lUHJvcGVydHkiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVBhbmVsIiwgIl9yZWYiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJzdHlsZXMiLCAiY2xhc3NOYW1lcyIsICJfZGVmaW5lUHJvcGVydHkiLCAiX2V4dGVuZHMiLCAiUHJvcFR5cGVzIiwgImV1aVBvcG92ZXJQYW5lbFN0eWxlcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX3RvQ29uc3VtYWJsZUFycmF5IiwgIl9hcnJheVdpdGhvdXRIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVTcHJlYWQiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVBvcG92ZXJQYW5lbCIsICJfcmVmIiwgInBvc2l0aW9uIiwgImNsYXNzTmFtZXMiLCAic3R5bGVzIiwgIlByb3BUeXBlcyIsICJfdHlwZW9mIiwgIm9iaiIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIm93bktleXMiLCAib2JqZWN0IiwgImtleXMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3RvQ29uc3VtYWJsZUFycmF5IiwgIl9hcnJheVdpdGhvdXRIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVTcHJlYWQiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl9jcmVhdGVDbGFzcyIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgIm8iLCAicCIsICJfY3JlYXRlU3VwZXIiLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAic2VsZiIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIl9zbGljZWRUb0FycmF5IiwgIl9hcnJheVdpdGhIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5TGltaXQiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfcmVmIiwgIl9yZWYyIiwgIl9zbGljZWRUb0FycmF5IiwgIl9yZWYzIiwgIl9yZWY0IiwgIl9pbmhlcml0cyIsICJFdWlQb3BvdmVyIiwgIl9jcmVhdGVTdXBlciIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnR5IiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiX3RvQ29uc3VtYWJsZUFycmF5IiwgIl9yZWY1IiwgImR1cmF0aW9uTWF0Y2giLCAiZGVsYXlNYXRjaCIsICJfcmVmNiIsICJwb3NpdGlvbiIsICJfb2JqZWN0U3ByZWFkIiwgIm5vZGUiLCAiX2NyZWF0ZUNsYXNzIiwgInJlbmRlciIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX2V4Y2x1ZGVkIiwgInN0eWxlcyIsICJjbGFzc05hbWVzIiwgImluaXRpYWxGb2N1cyIsICJfZXh0ZW5kcyIsICJQcm9wVHlwZXMiLCAiZXVpRm9ybU1heFdpZHRoIiwgIl9yZWYiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9zbGljZWRUb0FycmF5IiwgIl9hcnJheVdpdGhIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5TGltaXQiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVJlc3QiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUlucHV0UG9wb3ZlciIsICJfcmVmIiwgIm9uS2V5RG93biIsICJlbCIsICJjbGFzc25hbWVzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJfZXhjbHVkZWQiLCAib3duS2V5cyIsICJvYmplY3QiLCAia2V5cyIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpVGl0bGUiLCAiX3JlZiIsICJzaXplIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfZXhjbHVkZWQiLCAic3R5bGVzIiwgImNsYXNzTmFtZXMiLCAiX29iamVjdFNwcmVhZCIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUNhcmRTZWxlY3QiLCAiX3JlZiIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUNhcmQiLCAiX3JlZiIsICJpY29uIiwgIm91dGVyT25DbGljayIsICJjbGFzc05hbWVzIiwgIlJlYWN0IiwgIm5vZGUiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfdHlwZW9mIiwgIm9iaiIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfY3JlYXRlQ2xhc3MiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJvIiwgInAiLCAiX2NyZWF0ZVN1cGVyIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgInNlbGYiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiVFlQRVMiLCAiRXVpQ2hlY2tib3giLCAicmVuZGVyIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgImlzVmFsaWRFbGVtZW50IiwgIl9yZWYiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfZGVmaW5lUHJvcGVydHkiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUZsZXhJdGVtIiwgIl9yZWYiLCAiQ29tcG9uZW50IiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAic2l6ZVRvQ2xhc3NOYW1lTWFwIiwgIlNJWkVTIiwgIkV1aUZvcm1Db250cm9sTGF5b3V0Q2xlYXJCdXR0b24iLCAiX3JlZiIsICJzaXplIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUZvcm1Db250cm9sTGF5b3V0Q3VzdG9tSWNvbiIsICJfcmVmIiwgInNpemUiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiX3R5cGVvZiIsICJvYmoiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX2NyZWF0ZUNsYXNzIiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAibyIsICJwIiwgIl9jcmVhdGVTdXBlciIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJzZWxmIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiaWNvbiIsICJfaW5oZXJpdHMiLCAiRXVpRm9ybUNvbnRyb2xMYXlvdXRJY29ucyIsICJfY3JlYXRlU3VwZXIiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9jcmVhdGVDbGFzcyIsICJyZW5kZXIiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpRm9ybUxhYmVsIiwgIl9yZWYiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiX3R5cGVvZiIsICJvYmoiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX2NyZWF0ZUNsYXNzIiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAibyIsICJwIiwgIl9jcmVhdGVTdXBlciIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJzZWxmIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiRXVpRm9ybUNvbnRyb2xMYXlvdXQiLCAicmVuZGVyIiwgImljb24iLCAiYXBwZW5kIiwgImNsYXNzTmFtZXMiLCAiUmVhY3QiLCAic3RyaW5nIiwgIm5vZGUiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJFdWlWYWxpZGF0YWJsZUNvbnRyb2wiLCAiX3JlZiIsICJQcm9wVHlwZXMiLCAiX3JlZiIsICJpY29uIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfdHlwZW9mIiwgIm9iaiIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfY3JlYXRlQ2xhc3MiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJvIiwgInAiLCAiX2NyZWF0ZVN1cGVyIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgInNlbGYiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiRXVpRmllbGRTZWFyY2giLCAib25TZWFyY2giLCAib25DaGFuZ2UiLCAicmVuZGVyIiwgImFwcGVuZCIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlGb3JtRXJyb3JUZXh0IiwgIl9yZWYiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpRm9ybUhlbHBUZXh0IiwgIl9yZWYiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl90eXBlb2YiLCAib2JqIiwgIl9leGNsdWRlZCIsICJfdG9Db25zdW1hYmxlQXJyYXkiLCAiX2FycmF5V2l0aG91dEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXkiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVNwcmVhZCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJfZXh0ZW5kcyIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX2NyZWF0ZUNsYXNzIiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAibyIsICJwIiwgIl9jcmVhdGVTdXBlciIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJzZWxmIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiZGlzcGxheVRvQ2xhc3NOYW1lTWFwIiwgIkRJU1BMQVlTIiwgIkV1aUZvcm1Sb3ciLCAiX3JlZiIsICJyZW5kZXIiLCAiX3JlZjIiLCAiY2xhc3NOYW1lcyIsICJoZWxwVGV4dCIsICJlcnJvciIsICJSZWFjdCIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX3R5cGVvZiIsICJvYmoiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfY3JlYXRlQ2xhc3MiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJvIiwgInAiLCAiX2NyZWF0ZVN1cGVyIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgInNlbGYiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJzaXplVG9DbGFzc05hbWVNYXAiLCAiU0laRVMiLCAiRXVpQ29udGV4dE1lbnVJdGVtIiwgInJlbmRlciIsICJpY29uIiwgInNpemUiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiX3R5cGVvZiIsICJvYmoiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX2NyZWF0ZUNsYXNzIiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAibyIsICJwIiwgIl9jcmVhdGVTdXBlciIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJzZWxmIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIlNJWkVTIiwgIkV1aUNvbnRleHRNZW51UGFuZWwiLCAibm9kZSIsICJyZW5kZXIiLCAic2l6ZSIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiZXVpSG9yaXpvbnRhbFJ1bGVTdHlsZXMiLCAiX3JlZiIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlIb3Jpem9udGFsUnVsZSIsICJfcmVmIiwgInNpemUiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJzdHlsZXMiLCAiY2xhc3NOYW1lcyIsICJfZGVmaW5lUHJvcGVydHkiLCAiX2V4dGVuZHMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVN3aXRjaCIsICJfcmVmIiwgImNsYXNzTmFtZXMiLCAiUmVhY3QiLCAiUHJvcFR5cGVzIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAic2VsZiIsICJpc0VxdWFsIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgImhhc05hdGl2ZVBlcmZvcm1hbmNlTm93IiwgInBlcmZvcm1hbmNlIiwgIm5vdyIsICJEYXRlIiwgImNhbmNlbFRpbWVvdXQiLCAidGltZW91dElEIiwgImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwgImlkIiwgInJlcXVlc3RUaW1lb3V0IiwgImNhbGxiYWNrIiwgImRlbGF5IiwgInN0YXJ0IiwgInRpY2siLCAiY2FsbCIsICJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCAic2l6ZSIsICJnZXRTY3JvbGxiYXJTaXplIiwgInJlY2FsY3VsYXRlIiwgImRpdiIsICJkb2N1bWVudCIsICJjcmVhdGVFbGVtZW50IiwgInN0eWxlIiwgIndpZHRoIiwgImhlaWdodCIsICJvdmVyZmxvdyIsICJib2R5IiwgImFwcGVuZENoaWxkIiwgIm9mZnNldFdpZHRoIiwgImNsaWVudFdpZHRoIiwgInJlbW92ZUNoaWxkIiwgImNhY2hlZFJUTFJlc3VsdCIsICJnZXRSVExPZmZzZXRUeXBlIiwgIm91dGVyRGl2IiwgIm91dGVyU3R5bGUiLCAiZGlyZWN0aW9uIiwgImlubmVyRGl2IiwgImlubmVyU3R5bGUiLCAic2Nyb2xsTGVmdCIsICJkZXZXYXJuaW5nc092ZXJzY2FuQ291bnQiLCAiZGV2V2FybmluZ3NPdmVyc2NhblJvd3NDb2x1bW5zQ291bnQiLCAiZGV2V2FybmluZ3NUYWdOYW1lIiwgInByb2Nlc3MiLCAid2luZG93IiwgIldlYWtTZXQiLCAiSVNfU0NST0xMSU5HX0RFQk9VTkNFX0lOVEVSVkFMIiwgImRlZmF1bHRJdGVtS2V5IiwgImluZGV4IiwgImRhdGEiLCAiZGV2V2FybmluZ3NEaXJlY3Rpb24iLCAiZGV2V2FybmluZ3NUYWdOYW1lIiwgInByb2Nlc3MiLCAid2luZG93IiwgIldlYWtTZXQiLCAiY3JlYXRlTGlzdENvbXBvbmVudCIsICJfcmVmIiwgImdldEl0ZW1PZmZzZXQiLCAiZ2V0RXN0aW1hdGVkVG90YWxTaXplIiwgImdldEl0ZW1TaXplIiwgImdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50IiwgImdldFN0YXJ0SW5kZXhGb3JPZmZzZXQiLCAiZ2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleCIsICJpbml0SW5zdGFuY2VQcm9wcyIsICJzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlIiwgInZhbGlkYXRlUHJvcHMiLCAicHJvcHMiLCAiX2luc3RhbmNlUHJvcHMiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJfb3V0ZXJSZWYiLCAiX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQiLCAic3RhdGUiLCAiaW5zdGFuY2UiLCAiaXNTY3JvbGxpbmciLCAic2Nyb2xsRGlyZWN0aW9uIiwgInNjcm9sbE9mZnNldCIsICJpbml0aWFsU2Nyb2xsT2Zmc2V0IiwgInNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCIsICJfY2FsbE9uSXRlbXNSZW5kZXJlZCIsICJtZW1vaXplT25lIiwgIm92ZXJzY2FuU3RhcnRJbmRleCIsICJvdmVyc2NhblN0b3BJbmRleCIsICJ2aXNpYmxlU3RhcnRJbmRleCIsICJ2aXNpYmxlU3RvcEluZGV4IiwgIm9uSXRlbXNSZW5kZXJlZCIsICJfY2FsbE9uU2Nyb2xsIiwgIm9uU2Nyb2xsIiwgIl9nZXRJdGVtU3R5bGUiLCAiZGlyZWN0aW9uIiwgIml0ZW1TaXplIiwgImxheW91dCIsICJpdGVtU3R5bGVDYWNoZSIsICJfZ2V0SXRlbVN0eWxlQ2FjaGUiLCAic3R5bGUiLCAiaGFzT3duUHJvcGVydHkiLCAib2Zmc2V0IiwgInNpemUiLCAiaXNIb3Jpem9udGFsIiwgImlzUnRsIiwgIm9mZnNldEhvcml6b250YWwiLCAicG9zaXRpb24iLCAibGVmdCIsICJ1bmRlZmluZWQiLCAicmlnaHQiLCAidG9wIiwgImhlaWdodCIsICJ3aWR0aCIsICJfIiwgIl9fIiwgIl9fXyIsICJfb25TY3JvbGxIb3Jpem9udGFsIiwgImV2ZW50IiwgImN1cnJlbnRUYXJnZXQiLCAiY2xpZW50V2lkdGgiLCAic2Nyb2xsTGVmdCIsICJzY3JvbGxXaWR0aCIsICJzZXRTdGF0ZSIsICJwcmV2U3RhdGUiLCAiZ2V0UlRMT2Zmc2V0VHlwZSIsICJNYXRoIiwgIm1heCIsICJtaW4iLCAiX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQiLCAiX29uU2Nyb2xsVmVydGljYWwiLCAiY2xpZW50SGVpZ2h0IiwgInNjcm9sbEhlaWdodCIsICJzY3JvbGxUb3AiLCAiX291dGVyUmVmU2V0dGVyIiwgInJlZiIsICJvdXRlclJlZiIsICJjdXJyZW50IiwgImNhbmNlbFRpbWVvdXQiLCAicmVxdWVzdFRpbWVvdXQiLCAiX3Jlc2V0SXNTY3JvbGxpbmciLCAiZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzIiwgIm5leHRQcm9wcyIsICJ2YWxpZGF0ZVNoYXJlZFByb3BzIiwgInNjcm9sbFRvIiwgInNjcm9sbFRvSXRlbSIsICJhbGlnbiIsICJpdGVtQ291bnQiLCAic2Nyb2xsYmFyU2l6ZSIsICJnZXRTY3JvbGxiYXJTaXplIiwgImNvbXBvbmVudERpZE1vdW50IiwgIl9jYWxsUHJvcHNDYWxsYmFja3MiLCAiY29tcG9uZW50RGlkVXBkYXRlIiwgImNvbXBvbmVudFdpbGxVbm1vdW50IiwgInJlbmRlciIsICJjaGlsZHJlbiIsICJjbGFzc05hbWUiLCAiaW5uZXJSZWYiLCAiaW5uZXJFbGVtZW50VHlwZSIsICJpbm5lclRhZ05hbWUiLCAiaXRlbURhdGEiLCAiaXRlbUtleSIsICJvdXRlckVsZW1lbnRUeXBlIiwgIm91dGVyVGFnTmFtZSIsICJ1c2VJc1Njcm9sbGluZyIsICJfZ2V0UmFuZ2VUb1JlbmRlciIsICJzdGFydEluZGV4IiwgInN0b3BJbmRleCIsICJpdGVtcyIsICJwdXNoIiwgImNyZWF0ZUVsZW1lbnQiLCAia2V5IiwgImVzdGltYXRlZFRvdGFsU2l6ZSIsICJvdmVyZmxvdyIsICJXZWJraXRPdmVyZmxvd1Njcm9sbGluZyIsICJ3aWxsQ2hhbmdlIiwgInBvaW50ZXJFdmVudHMiLCAib3ZlcnNjYW5Db3VudCIsICJvdmVyc2NhbkJhY2t3YXJkIiwgIm92ZXJzY2FuRm9yd2FyZCIsICJQdXJlQ29tcG9uZW50IiwgImRlZmF1bHRQcm9wcyIsICJfcmVmMiIsICJfcmVmMyIsICJoYXMiLCAiYWRkIiwgImNvbnNvbGUiLCAid2FybiIsICJFcnJvciIsICJGaXhlZFNpemVMaXN0IiwgImNyZWF0ZUxpc3RDb21wb25lbnQiLCAiZ2V0SXRlbU9mZnNldCIsICJfcmVmIiwgImluZGV4IiwgIml0ZW1TaXplIiwgImdldEl0ZW1TaXplIiwgIl9yZWYyIiwgImdldEVzdGltYXRlZFRvdGFsU2l6ZSIsICJfcmVmMyIsICJpdGVtQ291bnQiLCAiZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQiLCAiX3JlZjQiLCAiYWxpZ24iLCAic2Nyb2xsT2Zmc2V0IiwgImluc3RhbmNlUHJvcHMiLCAic2Nyb2xsYmFyU2l6ZSIsICJkaXJlY3Rpb24iLCAiaGVpZ2h0IiwgImxheW91dCIsICJ3aWR0aCIsICJpc0hvcml6b250YWwiLCAic2l6ZSIsICJsYXN0SXRlbU9mZnNldCIsICJNYXRoIiwgIm1heCIsICJtYXhPZmZzZXQiLCAibWluIiwgIm1pbk9mZnNldCIsICJtaWRkbGVPZmZzZXQiLCAicm91bmQiLCAiY2VpbCIsICJmbG9vciIsICJnZXRTdGFydEluZGV4Rm9yT2Zmc2V0IiwgIl9yZWY1IiwgIm9mZnNldCIsICJnZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4IiwgIl9yZWY2IiwgInN0YXJ0SW5kZXgiLCAibnVtVmlzaWJsZUl0ZW1zIiwgImluaXRJbnN0YW5jZVByb3BzIiwgInByb3BzIiwgInNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UiLCAidmFsaWRhdGVQcm9wcyIsICJfcmVmNyIsICJwcm9jZXNzIiwgIkVycm9yIiwgInNoYWxsb3dEaWZmZXJzIiwgInByZXYiLCAibmV4dCIsICJhdHRyaWJ1dGUiLCAiYXJlRXF1YWwiLCAicHJldlByb3BzIiwgIm5leHRQcm9wcyIsICJwcmV2U3R5bGUiLCAic3R5bGUiLCAicHJldlJlc3QiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX2V4Y2x1ZGVkIiwgIm5leHRTdHlsZSIsICJuZXh0UmVzdCIsICJfZXhjbHVkZWQyIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJfcmVmIiwgImV1aVNwYWNlclN0eWxlcyIsICJfcmVmMiIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlTcGFjZXIiLCAiX3JlZiIsICJzaXplIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfZXhjbHVkZWQiLCAic3R5bGVzIiwgImNsYXNzTmFtZXMiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9leHRlbmRzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiZXVpTWFya1N0eWxlcyIsICJfcmVmIiwgIl9yZWYyIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpTWFyayIsICJfcmVmIiwgInVzZVRoZW1lIiwgInN0eWxlcyIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgImhpZ2hsaWdodCIsICJtYXRjaCIsICJnZXRIaWdodGxpZ2h0V29yZHMiLCAibWF0Y2hlcyIsICJmaWxsSW5DaHVua3MiLCAiYXBwZW5kIiwgIkV1aUhpZ2hsaWdodCIsICJfcmVmIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiRXVpQ29tYm9Cb3hUaXRsZSIsICJfcmVmIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfdHlwZW9mIiwgIm9iaiIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfY3JlYXRlQ2xhc3MiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJvIiwgInAiLCAiX2NyZWF0ZVN1cGVyIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgInNlbGYiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJfZGVmaW5lUHJvcGVydHkiLCAicmVzb2x2ZUljb25BbmRDb2xvciIsICJFdWlGaWx0ZXJTZWxlY3RJdGVtIiwgInJlbmRlciIsICJjbGFzc05hbWVzIiwgImljb24iLCAiX3JlZiIsICJQcm9wVHlwZXMiLCAiX3R5cGVvZiIsICJvYmoiLCAiX2V4Y2x1ZGVkIiwgIl9leGNsdWRlZDIiLCAib3duS2V5cyIsICJvYmplY3QiLCAia2V5cyIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl9jcmVhdGVDbGFzcyIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgIm8iLCAicCIsICJfY3JlYXRlU3VwZXIiLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAic2VsZiIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIkV1aUNvbWJvQm94T3B0aW9uc0xpc3QiLCAiX3JlZiIsICJyZW5kZXIiLCAiZ2V0U2VsZWN0ZWRPcHRpb25Gb3JTZWFyY2hWYWx1ZSIsICJwb3NpdGlvbiIsICJkZWxpbWl0ZXIiLCAiaGlnaGxpZ2h0U2VhcmNoVmFsdWUiLCAic2VhcmNoVmFsdWUiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiX3RvQ29uc3VtYWJsZUFycmF5IiwgIl9hcnJheVdpdGhvdXRIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVTcHJlYWQiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiZmxhdHRlbk9wdGlvbkdyb3VwcyIsICJnZXRTZWxlY3RlZE9wdGlvbkZvclNlYXJjaFZhbHVlIiwgImNvbGxlY3RNYXRjaGluZ09wdGlvbiIsICJnZXRNYXRjaGluZ09wdGlvbnMiLCAib2JqZWN0IiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX3R5cGVvZiIsICJvYmoiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX2NyZWF0ZUNsYXNzIiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAibyIsICJwIiwgIl9jcmVhdGVTdXBlciIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJzZWxmIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIkV1aUNvbWJvQm94UGlsbCIsICJyZW5kZXIiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJfdHlwZW9mIiwgIm9iaiIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX2NyZWF0ZUNsYXNzIiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAibyIsICJwIiwgIl9jcmVhdGVTdXBlciIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJzZWxmIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIkV1aUNvbWJvQm94SW5wdXQiLCAicmVuZGVyIiwgImFwcGVuZCIsICJvbkNsaWNrIiwgImljb24iLCAiY2xhc3NOYW1lcyIsICJBdXRvc2l6ZUlucHV0IiwgIlByb3BUeXBlcyIsICJfdHlwZW9mIiwgIm9iaiIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIm93bktleXMiLCAib2JqZWN0IiwgImtleXMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl9jcmVhdGVDbGFzcyIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgIm8iLCAicCIsICJfY3JlYXRlU3VwZXIiLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAic2VsZiIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIkV1aUNvbWJvQm94IiwgIl9yZWYiLCAicG9zaXRpb24iLCAiX3JlZjIiLCAiX3JlZjMiLCAiZGVsaW1pdGVyIiwgInJlbmRlciIsICJvbkJsdXIiLCAiYXBwZW5kIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlQYWdpbmF0aW9uQnV0dG9uIiwgIl9yZWYiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leHRlbmRzIiwgIlRZUEVTIiwgIkV1aVBhZ2luYXRpb25CdXR0b25BcnJvdyIsICJfcmVmIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgIl9leGNsdWRlZCIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlQYWdpbmF0aW9uIiwgIl9yZWYiLCAic2FmZUNsaWNrIiwgImNsYXNzTmFtZXMiLCAiYWNjZXNzaWJsZVBhZ2VTdHJpbmciLCAiUHJvcFR5cGVzIiwgIlBhZ2luYXRpb25CdXR0b25XcmFwcGVyIiwgIl9yZWYyIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlUYWJsZVBhZ2luYXRpb24iLCAiX3JlZiIsICJSZWFjdCIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpVGFiIiwgIl9yZWYiLCAiYXBwZW5kIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgInNpemVUb0NsYXNzTmFtZU1hcCIsICJTSVpFUyIsICJfcmVmIiwgInNpemUiLCAiY2xhc3NOYW1lcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiX3R5cGVvZiIsICJvYmoiLCAiX2V4Y2x1ZGVkIiwgIl9leGNsdWRlZDIiLCAiX2V4dGVuZHMiLCAib3duS2V5cyIsICJvYmplY3QiLCAia2V5cyIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl9jcmVhdGVDbGFzcyIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgIm8iLCAicCIsICJfY3JlYXRlU3VwZXIiLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAic2VsZiIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIl9pbmhlcml0cyIsICJFdWlUYWJiZWRDb250ZW50IiwgIl9jcmVhdGVTdXBlciIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnR5IiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiX2NyZWF0ZUNsYXNzIiwgInJlbmRlciIsICJzaXplIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfZXhjbHVkZWQiLCAiX3JlZiIsICJfZXh0ZW5kcyIsICJfZXhjbHVkZWQyIiwgIl9vYmplY3RTcHJlYWQiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJfdHlwZW9mIiwgIm9iaiIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX2NyZWF0ZUNsYXNzIiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAibyIsICJwIiwgIl9jcmVhdGVTdXBlciIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJzZWxmIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIkV1aURlbGF5UmVuZGVyIiwgIl9yZWYiLCAicmVuZGVyIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18iLCAiX3JlZiIsICJfcmVmMiIsICJldWlIZWFsdGhTdHlsZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlIZWFsdGgiLCAiX3JlZiIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX2V4Y2x1ZGVkIiwgInN0eWxlcyIsICJjbGFzc05hbWVzIiwgIl9leHRlbmRzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0IiwgIkV1aVV0aWxpdHlDbGFzc2VzIiwgImltcG9ydF9yZWFjdCIsICJFdWlDYWNoZVByb3ZpZGVyIiwgIl9yZWYiLCAiUmVhY3QiLCAiaXNFbW90aW9uQ2FjaGVPYmplY3QiLCAiRXVpUHJvdmlkZXIiLCAiX3JlZiIsICJSZWFjdCIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX3R5cGVvZiIsICJvYmoiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJfdG9Db25zdW1hYmxlQXJyYXkiLCAiX2FycmF5V2l0aG91dEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXkiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVNwcmVhZCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX2NyZWF0ZUNsYXNzIiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAibyIsICJwIiwgIl9jcmVhdGVTdXBlciIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJzZWxmIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIngiLCAiZGlzcGxheVRvQ2xhc3NOYW1lTWFwIiwgIkV1aVRyZWVWaWV3IiwgIl9yZWYiLCAiX3JlZjIiLCAibm9kZSIsICJyZW5kZXIiLCAiY2xhc3NOYW1lcyIsICJSZWFjdCIsICJyZWYiLCAiX3JlZjMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiZ2V0U2VhcmNoYWJsZUxhYmVsIiwgImdldFNlbGVjdGVkT3B0aW9uRm9yU2VhcmNoVmFsdWUiLCAiY29sbGVjdE1hdGNoaW5nT3B0aW9uIiwgImdldE1hdGNoaW5nT3B0aW9ucyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVNlbGVjdGFibGVTZWFyY2giLCAiX3JlZiIsICJnZXRNYXRjaGluZ09wdGlvbnMiLCAiY2xhc3NOYW1lcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlTZWxlY3RhYmxlTWVzc2FnZSIsICJfcmVmIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiX3R5cGVvZiIsICJvYmoiLCAiX2V4Y2x1ZGVkIiwgIl9leGNsdWRlZDIiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfY3JlYXRlQ2xhc3MiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJvIiwgInAiLCAiX2NyZWF0ZVN1cGVyIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgInNlbGYiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJfZGVmaW5lUHJvcGVydHkiLCAicmVzb2x2ZUljb25BbmRDb2xvciIsICJwYWRkaW5nU2l6ZVRvQ2xhc3NOYW1lTWFwIiwgIlBBRERJTkdfU0laRVMiLCAiRXVpU2VsZWN0YWJsZUxpc3RJdGVtIiwgInJlbmRlciIsICJhcHBlbmQiLCAiY2xhc3NOYW1lcyIsICJpY29uIiwgIlByb3BUeXBlcyIsICJfdHlwZW9mIiwgIm9iaiIsICJfZXhjbHVkZWQiLCAiX2V4Y2x1ZGVkMiIsICJfZXhjbHVkZWQzIiwgIm93bktleXMiLCAib2JqZWN0IiwgImtleXMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfY3JlYXRlQ2xhc3MiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJvIiwgInAiLCAiX2NyZWF0ZVN1cGVyIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgInNlbGYiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJFdWlTZWxlY3RhYmxlTGlzdCIsICJfcmVmIiwgImFwcGVuZCIsICJvcHRpb24iLCAiX3JlZjIiLCAicmVuZGVyIiwgImNsYXNzTmFtZXMiLCAiX3JlZjMiLCAiUmVhY3QiLCAiUHJvcFR5cGVzIiwgIl90eXBlb2YiLCAib2JqIiwgIl9leGNsdWRlZCIsICJfZXhjbHVkZWQyIiwgIl9leGNsdWRlZDMiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJfZXh0ZW5kcyIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX2NyZWF0ZUNsYXNzIiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAibyIsICJwIiwgIl9jcmVhdGVTdXBlciIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJzZWxmIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiRXVpU2VsZWN0YWJsZSIsICJfcmVmIiwgImdldE1hdGNoaW5nT3B0aW9ucyIsICJpbml0aWFsU2VhcmNoVmFsdWUiLCAicmVuZGVyIiwgIl9yZWYyIiwgIl9yZWYzIiwgImNsYXNzTmFtZXMiLCAiUmVhY3QiLCAiZ2V0QWNjZXNzaWJsZU5hbWUiLCAiaW5wdXRSZWYiLCAibm9kZSIsICJfcmVmNCIsICJyZXN1bHRzTGVuZ3RoIiwgIl9yZWY1IiwgIl9yZWY2IiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJjb2xvclRvQ2xhc3NOYW1lTWFwIiwgIkNPTE9SUyIsICJFdWlTdWdnZXN0SXRlbSIsICJfcmVmIiwgImNsYXNzTmFtZXMiLCAiUmVhY3QiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfZXhjbHVkZWQiLCAib3duS2V5cyIsICJvYmplY3QiLCAia2V5cyIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlTdWdnZXN0IiwgIl9yZWYiLCAib25CbHVyIiwgIm9uRm9jdXMiLCAiYXBwZW5kIiwgIm9wZW5Qb3BvdmVyIiwgImNsb3NlUG9wb3ZlciIsICJzZWFyY2hPbkZvY3VzIiwgInNlYXJjaE9uQmx1ciIsICJzZWFyY2hPbklucHV0IiwgInNlYXJjaE9uQ2hhbmdlIiwgImljb24iLCAiY2xhc3NOYW1lcyIsICJSZWFjdCIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpVGFibGUiLCAiX3JlZiIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlUYWJsZUJvZHkiLCAiX3JlZiIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpVGFibGVGb290ZXIiLCAiX3JlZiIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJyZXNvbHZlV2lkdGhBc1N0eWxlIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpVGFibGVGb290ZXJDZWxsIiwgIl9yZWYiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpVGFibGVIZWFkZXIiLCAiX3JlZiIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiQ2VsbENvbnRlbnRzIiwgIl9yZWYiLCAiRXVpVGFibGVIZWFkZXJDZWxsIiwgIl9yZWYyIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVRhYmxlSGVhZGVyQ2VsbENoZWNrYm94IiwgIl9yZWYiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpVGFibGVIZWFkZXJNb2JpbGUiLCAiX3JlZiIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpVGFibGVTb3J0TW9iaWxlSXRlbSIsICJfcmVmIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgIl90eXBlb2YiLCAib2JqIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl9jcmVhdGVDbGFzcyIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgIm8iLCAicCIsICJfY3JlYXRlU3VwZXIiLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAic2VsZiIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJFdWlUYWJsZVNvcnRNb2JpbGUiLCAicmVuZGVyIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVRhYmxlUm93IiwgIl9yZWYiLCAiY2xhc3NOYW1lcyIsICJvbktleURvd24iLCAib25LZXlVcCIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlUYWJsZVJvd0NlbGwiLCAiX3JlZiIsICJjbGFzc05hbWVzIiwgImNoaWxkcmVuIiwgIlJlYWN0IiwgIkVsZW1lbnQiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVRhYmxlUm93Q2VsbENoZWNrYm94IiwgIl9yZWYiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJfdHlwZW9mIiwgIm9iaiIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX2NyZWF0ZUNsYXNzIiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAibyIsICJwIiwgIl9jcmVhdGVTdXBlciIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJzZWxmIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIkNvbGxhcHNlZEl0ZW1BY3Rpb25zIiwgInJlbmRlciIsICJvbkZvY3VzIiwgImNvbnRyb2xzIiwgImljb24iLCAiaXNTdHJpbmciLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJpbXBvcnRfcmVhY3QiLCAiRGVmYXVsdEl0ZW1BY3Rpb24iLCAiX3JlZiIsICJpc1N0cmluZyIsICJpY29uIiwgIlJlYWN0IiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJfdHlwZW9mIiwgIm9iaiIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX2NyZWF0ZUNsYXNzIiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAibyIsICJwIiwgIl9jcmVhdGVTdXBlciIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJzZWxmIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIkN1c3RvbUl0ZW1BY3Rpb24iLCAicmVuZGVyIiwgIlByb3BUeXBlcyIsICJpc0N1c3RvbUl0ZW1BY3Rpb24iLCAiRXhwYW5kZWRJdGVtQWN0aW9ucyIsICJfcmVmIiwgIlJlYWN0IiwgImNsYXNzTmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgImRlZmF1bHRzIiwgIlBhZ2luYXRpb25CYXIiLCAiX3JlZiIsICJfdHlwZW9mIiwgIm9iaiIsICJfZXhjbHVkZWQiLCAiX2V4Y2x1ZGVkMiIsICJfdG9Db25zdW1hYmxlQXJyYXkiLCAiX2FycmF5V2l0aG91dEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXkiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVNwcmVhZCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAib3duS2V5cyIsICJvYmplY3QiLCAia2V5cyIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX2NyZWF0ZUNsYXNzIiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAibyIsICJwIiwgIl9jcmVhdGVTdXBlciIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJzZWxmIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAicmVuZGVyIiwgImlzRnVuY3Rpb24iLCAiY29sdW1uIiwgIl9yZWYiLCAiX3JlZjIiLCAieCIsICJFdWlCYXNpY1RhYmxlIiwgImxpc3RlbmVyIiwgIm9uQ2hhbmdlIiwgIl9yZWYzIiwgIl9yZWY0IiwgInNpemUiLCAiY2xhc3NOYW1lcyIsICJfcmVmNSIsICJfcmVmNiIsICJfcmVmNyIsICJzZWxlY3Rpb24iLCAiYWN0aW9uRW5hYmxlZCIsICJpdGVtIiwgIl9yZWY4IiwgIlByb3BUeXBlcyIsICJTdWJzY3JpYmFibGUiLCAieCIsICJub29wIiwgImFzQXJyYXkiLCAiaXNQbGFpbk9iamVjdCIsICJiIiwgImNvcHkiLCAiRm9jdXNNYW5hZ2VyIiwgIm9uRm9jdXMiLCAibGlzdGVuZXIiLCAiT25saW5lTWFuYWdlciIsICJsaXN0ZW5lciIsICJDYW5jZWxsZWRFcnJvciIsICJSZXRyeWVyIiwgInJlc29sdmUiLCAicmVqZWN0IiwgInBhdXNlIiwgInJ1biIsICJjYW5jZWxGbiIsICJOb3RpZnlNYW5hZ2VyIiwgIlF1ZXJ5IiwgIm5vb3AiLCAiaXNTdGFsZSIsICJvbkZvY3VzIiwgIngiLCAiZmV0Y2giLCAiZ2V0IiwgImZldGNoRm4iLCAiZ2V0RGVmYXVsdFN0YXRlIiwgInJlZHVjZXIiLCAiUXVlcnlDYWNoZSIsICJ4IiwgImdldCIsICJvbkZvY3VzIiwgIk11dGF0aW9uIiwgIngiLCAibm9vcCIsICJNdXRhdGlvbkNhY2hlIiwgIngiLCAib25Gb2N1cyIsICJub29wIiwgImJ1aWxkTmV3UGFnZXMiLCAicGFyYW0iLCAiZmV0Y2hQYWdlIiwgIm1hbnVhbCIsICJwcm9taXNlIiwgIl9sb29wIiwgImkiLCAiUXVlcnlDbGllbnQiLCAiX3JlZiIsICJfcmVmMiIsICJub29wIiwgIl9yZWYzIiwgIngiLCAiUXVlcnlPYnNlcnZlciIsICJ0cmFja1Byb3AiLCAiZ2V0IiwgImZldGNoIiwgIm5vb3AiLCAieCIsICJpbXBvcnRfcmVhY3RfZG9tIiwgInVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzIiwgIlJlYWN0RE9NIiwgInVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzIiwgImxvZ2dlciIsICJsb2dnZXIiLCAiaW1wb3J0X3JlYWN0IiwgIlJlYWN0IiwgInVzZVF1ZXJ5Q2xpZW50IiwgIlF1ZXJ5Q2xpZW50UHJvdmlkZXIiLCAiX3JlZiIsICJpbXBvcnRfcmVhY3QiLCAiUmVhY3QiLCAidXNlUXVlcnlFcnJvclJlc2V0Qm91bmRhcnkiLCAiaW1wb3J0X3JlYWN0IiwgIlJlYWN0IiwgIngiLCAiX3JlZiIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0IiwgIlJlYWN0IiwgImltcG9ydF9yZWFjdF9kb20iLCAiUmVhY3QiLCAiUmVhY3RET00iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdF9kb20iLCAiUmVhY3QiLCAiUmVhY3RET00iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdCIsICJSZWFjdCIsICJpbXBvcnRfcmVhY3RfZG9tIiwgIlJlYWN0IiwgIlJlYWN0RE9NIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3QiLCAiUmVhY3QiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJSZWFjdCIsICJSZWFjdERPTSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0IiwgIlJlYWN0IiwgImltcG9ydF9yZWFjdF9kb20iLCAiUmVhY3QiLCAiUmVhY3RET00iLCAiaW1wb3J0X3JlYWN0IiwgInJlcXVpcmVfb2JqZWN0X2Fzc2lnbiIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdldE93blByb3BlcnR5U3ltYm9scyIsICJoYXNPd25Qcm9wZXJ0eSIsICJwcm9wSXNFbnVtZXJhYmxlIiwgInRvT2JqZWN0IiwgInZhbCIsICJzaG91bGRVc2VOYXRpdmUiLCAidGVzdDEiLCAidGVzdDIiLCAiaSIsICJvcmRlcjIiLCAibiIsICJ0ZXN0MyIsICJsZXR0ZXIiLCAidGFyZ2V0IiwgInNvdXJjZSIsICJmcm9tIiwgInRvIiwgInN5bWJvbHMiLCAicyIsICJrZXkiLCAicmVxdWlyZV9yZWFjdF9wcm9kdWN0aW9uX21pbiIsICJsIiwgInAiLCAicSIsICJyIiwgInQiLCAidSIsICJ2IiwgInciLCAieCIsICJ5IiwgImEiLCAieiIsICJiIiwgImMiLCAiQSIsICJCIiwgIkMiLCAiRCIsICJFIiwgIkYiLCAiRyIsICJIIiwgIkkiLCAiSiIsICJlIiwgImQiLCAiayIsICJoIiwgImciLCAiZiIsICJtIiwgIksiLCAiTCIsICJlc2NhcGUiLCAiTSIsICJOIiwgIk8iLCAiUCIsICJRIiwgIlIiLCAiUyIsICJUIiwgInJlcXVpcmVfcmVhY3QiLCAicmVxdWlyZV9zY2hlZHVsZXJfcHJvZHVjdGlvbl9taW4iLCAiVSIsICJWIiwgIlciLCAicmVxdWlyZV9zY2hlZHVsZXIiLCAicmVxdWlyZV9yZWFjdF9kb21fcHJvZHVjdGlvbl9taW4iLCAiYWEiLCAiYmEiLCAiY2EiLCAiZGEiLCAiZWEiLCAiZmEiLCAiaGEiLCAiaWEiLCAiamEiLCAia2EiLCAibGEiLCAibWEiLCAibmEiLCAib2EiLCAicGEiLCAicWEiLCAicmEiLCAic2EiLCAidGEiLCAidWEiLCAid2EiLCAieGEiLCAieWEiLCAiemEiLCAiQWEiLCAiQmEiLCAiQ2EiLCAiRGEiLCAiRWEiLCAiRmEiLCAiR2EiLCAiSGEiLCAiSWEiLCAiSmEiLCAiS2EiLCAiTGEiLCAiTWEiLCAiTmEiLCAiT2EiLCAiUGEiLCAiUWEiLCAiUmEiLCAiU2EiLCAiVGEiLCAiVWEiLCAiVmEiLCAiV2EiLCAiWGEiLCAiWWEiLCAiWmEiLCAiJGEiLCAiYWIiLCAiYmIiLCAiY2IiLCAiZGIiLCAiZWIiLCAiZmIiLCAiZ2IiLCAiaGIiLCAiaWIiLCAiamIiLCAia2IiLCAibGIiLCAibWIiLCAibmIiLCAib2IiLCAicGIiLCAicWIiLCAicmIiLCAic2IiLCAidGIiLCAidWIiLCAidmIiLCAid2IiLCAieGIiLCAieWIiLCAiemIiLCAiQWIiLCAiQmIiLCAiQ2IiLCAiRGIiLCAiRWIiLCAiRmIiLCAiR2IiLCAiSGIiLCAiSWIiLCAiSmIiLCAiS2IiLCAiTGIiLCAiTWIiLCAiTmIiLCAiT2IiLCAiUGIiLCAiUWIiLCAiUmIiLCAiU2IiLCAiVGIiLCAiVWIiLCAiVmIiLCAiV2IiLCAiWGIiLCAiWWIiLCAiWmIiLCAiJGIiLCAiYWMiLCAiYmMiLCAiY2MiLCAiZGMiLCAiZWMiLCAiZmMiLCAiZ2MiLCAiaGMiLCAiaWMiLCAiamMiLCAia2MiLCAibGMiLCAibWMiLCAibmMiLCAib2MiLCAicGMiLCAicWMiLCAicmMiLCAic2MiLCAidGMiLCAidWMiLCAidmMiLCAid2MiLCAieGMiLCAieWMiLCAiemMiLCAiQWMiLCAiQmMiLCAiQ2MiLCAiRGMiLCAiRWMiLCAiRmMiLCAiR2MiLCAiSGMiLCAiSWMiLCAiSmMiLCAiS2MiLCAiTGMiLCAiTWMiLCAiTmMiLCAiT2MiLCAiUGMiLCAiUWMiLCAiUmMiLCAiU2MiLCAiVGMiLCAiVWMiLCAiVmMiLCAiV2MiLCAiWGMiLCAiWWMiLCAiWmMiLCAiJGMiLCAiYWQiLCAiYmQiLCAiY2QiLCAiZGQiLCAiZWQiLCAiZmQiLCAiZ2QiLCAiaGQiLCAiaWQiLCAiamQiLCAia2QiLCAibGQiLCAibWQiLCAibmQiLCAib2QiLCAicGQiLCAicWQiLCAicmQiLCAic2QiLCAidGQiLCAidWQiLCAidmQiLCAid2QiLCAieGQiLCAieWQiLCAiQWQiLCAiemQiLCAiQmQiLCAiQ2QiLCAiRGQiLCAiRWQiLCAiRmQiLCAiR2QiLCAiSGQiLCAiSWQiLCAiSmQiLCAiS2QiLCAiTGQiLCAiTWQiLCAiTmQiLCAiT2QiLCAiUGQiLCAiUWQiLCAiUmQiLCAiU2QiLCAiVGQiLCAiVWQiLCAiVmQiLCAiV2QiLCAiWGQiLCAiWWQiLCAiWmQiLCAiJGQiLCAiYWUiLCAiYmUiLCAiY2UiLCAiZGUiLCAiZWUiLCAiZmUiLCAiZ2UiLCAiaGUiLCAiaWUiLCAiamUiLCAia2UiLCAibGUiLCAibWUiLCAibmUiLCAib2UiLCAicGUiLCAicWUiLCAicmUiLCAic2UiLCAidGUiLCAidWUiLCAidmUiLCAid2UiLCAieWUiLCAiemUiLCAieGUiLCAiQWUiLCAiQmUiLCAiQ2UiLCAiRGUiLCAiRWUiLCAiRmUiLCAiR2UiLCAiSGUiLCAiSWUiLCAiSmUiLCAiS2UiLCAiTGUiLCAiTWUiLCAiTmUiLCAiT2UiLCAiUGUiLCAiUWUiLCAiUmUiLCAiU2UiLCAiVGUiLCAiVWUiLCAiVmUiLCAiV2UiLCAiWGUiLCAiWWUiLCAiWmUiLCAiJGUiLCAiYWYiLCAiYmYiLCAiY2YiLCAiZGYiLCAiZWYiLCAiZmYiLCAiZ2YiLCAiaGYiLCAiamYiLCAia2YiLCAibGYiLCAibWYiLCAibmYiLCAib2YiLCAicGYiLCAicWYiLCAicmYiLCAic2YiLCAidGYiLCAidWYiLCAidmYiLCAid2YiLCAieGYiLCAieWYiLCAiemYiLCAiQWYiLCAiQmYiLCAiQ2YiLCAiRGYiLCAiRWYiLCAiRmYiLCAiR2YiLCAiSGYiLCAiSWYiLCAiSmYiLCAiS2YiLCAiTGYiLCAiTWYiLCAiTmYiLCAiT2YiLCAiUGYiLCAiUWYiLCAiUmYiLCAiU2YiLCAiVGYiLCAiVWYiLCAiVmYiLCAiV2YiLCAiWGYiLCAiWWYiLCAiWmYiLCAiJGYiLCAiYWciLCAiYmciLCAiY2ciLCAiZGciLCAiZWciLCAiZmciLCAiZ2ciLCAiaGciLCAiaWciLCAiamciLCAia2ciLCAibGciLCAibWciLCAibmciLCAib2ciLCAicGciLCAicWciLCAicmciLCAic2ciLCAidGciLCAidWciLCAidmciLCAid2ciLCAieGciLCAieWciLCAiemciLCAiQWciLCAiQmciLCAiQ2ciLCAiRGciLCAiRWciLCAiRmciLCAiR2ciLCAiS2ciLCAiSGciLCAiSWciLCAiSmciLCAiTGciLCAiTWciLCAiTmciLCAiT2ciLCAiUGciLCAiUWciLCAiUmciLCAiU2ciLCAiVGciLCAiVWciLCAiVmciLCAiV2ciLCAiWGciLCAiWWciLCAiWmciLCAiJGciLCAiYWgiLCAiYmgiLCAiY2giLCAiZGgiLCAiZWgiLCAiZmgiLCAiZ2giLCAiaGgiLCAiaWgiLCAiamgiLCAia2giLCAibGgiLCAibWgiLCAibmgiLCAib2giLCAicGgiLCAicWgiLCAicmgiLCAic2giLCAidGgiLCAidWgiLCAidmgiLCAid2giLCAieGgiLCAieWgiLCAiemgiLCAiQWgiLCAiQmgiLCAiQ2giLCAiRGgiLCAiRWgiLCAiRmgiLCAiR2giLCAiSGgiLCAiSWgiLCAiSmgiLCAiS2giLCAiTGgiLCAiTWgiLCAiTmgiLCAiT2giLCAiUGgiLCAiUWgiLCAiUmgiLCAiU2giLCAiVGgiLCAiVWgiLCAiVmgiLCAiV2giLCAiWGgiLCAiWWgiLCAiWmgiLCAiJGgiLCAiYWkiLCAiYmkiLCAiY2kiLCAiZGkiLCAiZWkiLCAiZmkiLCAiZ2kiLCAiaGkiLCAiaWkiLCAiamkiLCAia2kiLCAibGkiLCAibWkiLCAibmkiLCAib2kiLCAicGkiLCAicWkiLCAicmkiLCAic2kiLCAidGkiLCAidWkiLCAidmkiLCAid2kiLCAieGkiLCAieWkiLCAiemkiLCAiQWkiLCAiQmkiLCAiQ2kiLCAiRGkiLCAiRWkiLCAiRmkiLCAiR2kiLCAiSGkiLCAiSWkiLCAiSmkiLCAiS2kiLCAiTGkiLCAiTWkiLCAiTmkiLCAiT2kiLCAiUGkiLCAiUWkiLCAiUmkiLCAiU2kiLCAiVGkiLCAiVWkiLCAiVmkiLCAiV2kiLCAiWGkiLCAiWWkiLCAiWmkiLCAiJGkiLCAiYWoiLCAiYmoiLCAiY2oiLCAiZGoiLCAiZWoiLCAiZmoiLCAiZ2oiLCAiaGoiLCAiaWoiLCAiamoiLCAia2oiLCAibGoiLCAibWoiLCAibmoiLCAib2oiLCAicGoiLCAiWCIsICJZIiwgInFqIiwgInJqIiwgInNqIiwgInRqIiwgInVqIiwgInZqIiwgIndqIiwgIloiLCAieGoiLCAieWoiLCAiemoiLCAiQWoiLCAiQmoiLCAiQ2oiLCAiRGoiLCAiRWoiLCAiRmoiLCAiR2oiLCAiSGoiLCAiSWoiLCAiSmoiLCAiS2oiLCAiTGoiLCAiTWoiLCAiTmoiLCAiT2oiLCAiUGoiLCAiUWoiLCAiUmoiLCAiU2oiLCAiVGoiLCAiVWoiLCAiVmoiLCAiV2oiLCAiWGoiLCAiWWoiLCAiWmoiLCAidmEiLCAiYWsiLCAiYmsiLCAiY2siLCAiZGsiLCAiZWsiLCAiZmsiLCAiZ2siLCAiaGsiLCAiaWsiLCAiamsiLCAia2siLCAibGsiLCAibWsiLCAibmsiLCAib2siLCAicGsiLCAicWsiLCAicmsiLCAic2siLCAidGsiLCAidWsiLCAidmsiLCAid2siLCAieGsiLCAieWsiLCAicmVxdWlyZV9yZWFjdF9kb20iLCAiY2hlY2tEQ0UiLCAiZXJyIiwgInJlcXVpcmVfdXNlX3N5bmNfZXh0ZXJuYWxfc3RvcmVfc2hpbV9wcm9kdWN0aW9uX21pbiIsICJyZXF1aXJlX3NoaW0iLCAicmVxdWlyZV93aXRoX3NlbGVjdG9yX3Byb2R1Y3Rpb25fbWluIiwgInJlcXVpcmVfd2l0aF9zZWxlY3RvciIsICJfZXh0ZW5kcyIsICJpbml0X2V4dGVuZHMiLCAiX19lc21NaW4iLCAicmVxdWlyZV9yZWFjdF9pc19wcm9kdWN0aW9uX21pbiIsICJyZXF1aXJlX3JlYWN0X2lzIiwgInJlcXVpcmVfaG9pc3Rfbm9uX3JlYWN0X3N0YXRpY3NfY2pzIiwgInJlYWN0SXMiLCAiUkVBQ1RfU1RBVElDUyIsICJLTk9XTl9TVEFUSUNTIiwgIkZPUldBUkRfUkVGX1NUQVRJQ1MiLCAiTUVNT19TVEFUSUNTIiwgIlRZUEVfU1RBVElDUyIsICJnZXRTdGF0aWNzIiwgImNvbXBvbmVudCIsICJkZWZpbmVQcm9wZXJ0eSIsICJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwgImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsICJnZXRQcm90b3R5cGVPZiIsICJvYmplY3RQcm90b3R5cGUiLCAiaG9pc3ROb25SZWFjdFN0YXRpY3MiLCAidGFyZ2V0Q29tcG9uZW50IiwgInNvdXJjZUNvbXBvbmVudCIsICJibGFja2xpc3QiLCAiaW5oZXJpdGVkQ29tcG9uZW50IiwgImtleXMiLCAidGFyZ2V0U3RhdGljcyIsICJzb3VyY2VTdGF0aWNzIiwgImRlc2NyaXB0b3IiLCAicmVxdWlyZV9tdWx0aW1hcCIsICJtYXBFYWNoIiwgIm1hcCIsICJvcGVyYXRpb24iLCAibmV4dCIsICJNdWx0aW1hcCIsICJtYXBDdG9yIiwgIml0ZW0iLCAiaXRlcmFibGUiLCAic2VsZiIsICJhcmdzIiwgImVudHJ5IiwgImlkeCIsICJoYXNLZXkiLCAibWFrZUl0ZXJhdG9yIiwgInZhbHMiLCAiaXRlciIsICJ0b3RhbCIsICJ2YWx1ZSIsICJzYWZhcmlOZXh0IiwgIml0ZXJhdG9yIiwgIm5leHRJbmRleCIsICJzaGVldEZvclRhZyIsICJ0YWciLCAiY3JlYXRlU3R5bGVFbGVtZW50IiwgIm9wdGlvbnMiLCAiU3R5bGVTaGVldCIsICJpbml0X2Vtb3Rpb25fc2hlZXRfYnJvd3Nlcl9lc20iLCAiX3RoaXMiLCAiYmVmb3JlIiwgIl9wcm90byIsICJub2RlcyIsICJydWxlIiwgImlzSW1wb3J0UnVsZSIsICJzaGVldCIsICJNUyIsICJNT1oiLCAiV0VCS0lUIiwgIkNPTU1FTlQiLCAiUlVMRVNFVCIsICJERUNMQVJBVElPTiIsICJJTVBPUlQiLCAiS0VZRlJBTUVTIiwgIkxBWUVSIiwgImluaXRfRW51bSIsICJoYXNoIiwgImxlbmd0aCIsICJjaGFyYXQiLCAidHJpbSIsICJtYXRjaCIsICJwYXR0ZXJuIiwgInJlcGxhY2UiLCAicmVwbGFjZW1lbnQiLCAiaW5kZXhvZiIsICJzZWFyY2giLCAiaW5kZXgiLCAic3Vic3RyIiwgImJlZ2luIiwgImVuZCIsICJzdHJsZW4iLCAic2l6ZW9mIiwgImFwcGVuZCIsICJhcnJheSIsICJjb21iaW5lIiwgImNhbGxiYWNrIiwgImFicyIsICJhc3NpZ24iLCAiaW5pdF9VdGlsaXR5IiwgIm5vZGUiLCAicm9vdCIsICJwYXJlbnQiLCAidHlwZSIsICJwcm9wcyIsICJjaGlsZHJlbiIsICJsaW5lIiwgImNvbHVtbiIsICJjb3B5IiwgImNoYXIiLCAiY2hhcmFjdGVyIiwgInByZXYiLCAicG9zaXRpb24iLCAiY2hhcmFjdGVycyIsICJwZWVrIiwgImNhcmV0IiwgInNsaWNlIiwgInRva2VuIiwgImFsbG9jIiwgImRlYWxsb2MiLCAiZGVsaW1pdCIsICJkZWxpbWl0ZXIiLCAid2hpdGVzcGFjZSIsICJlc2NhcGluZyIsICJjb3VudCIsICJjb21tZW50ZXIiLCAiaWRlbnRpZmllciIsICJpbml0X1Rva2VuaXplciIsICJjb21waWxlIiwgInBhcnNlIiwgInJ1bGVzIiwgInJ1bGVzZXRzIiwgInBzZXVkbyIsICJwb2ludHMiLCAiZGVjbGFyYXRpb25zIiwgIm9mZnNldCIsICJhdHJ1bGUiLCAicHJvcGVydHkiLCAicHJldmlvdXMiLCAidmFyaWFibGUiLCAic2Nhbm5pbmciLCAiYW1wZXJzYW5kIiwgInJlZmVyZW5jZSIsICJjb21tZW50IiwgImRlY2xhcmF0aW9uIiwgInJ1bGVzZXQiLCAicG9zdCIsICJzaXplIiwgImoiLCAiaW5pdF9QYXJzZXIiLCAiaW5pdF9QcmVmaXhlciIsICJzZXJpYWxpemUiLCAib3V0cHV0IiwgInN0cmluZ2lmeSIsICJlbGVtZW50IiwgImluaXRfU2VyaWFsaXplciIsICJtaWRkbGV3YXJlIiwgImNvbGxlY3Rpb24iLCAicnVsZXNoZWV0IiwgImluaXRfTWlkZGxld2FyZSIsICJpbml0X3N0eWxpcyIsICJ3ZWFrTWVtb2l6ZSIsICJpbml0X2Vtb3Rpb25fd2Vha19tZW1vaXplX2VzbSIsICJmdW5jIiwgImNhY2hlIiwgImFyZyIsICJyZXQiLCAibWVtb2l6ZSIsICJmbiIsICJpbml0X2Vtb3Rpb25fbWVtb2l6ZV9lc20iLCAiZW1vdGlvbl9jYWNoZV9icm93c2VyX2VzbV9leHBvcnRzIiwgIl9fZXhwb3J0IiwgImNyZWF0ZUNhY2hlIiwgInByZWZpeCIsICJpZGVudGlmaWVyV2l0aFBvaW50VHJhY2tpbmciLCAidG9SdWxlcyIsICJnZXRSdWxlcyIsICJmaXhlZEVsZW1lbnRzIiwgImNvbXBhdCIsICJyZW1vdmVMYWJlbCIsICJwcmVmaXhlciIsICJkZWZhdWx0U3R5bGlzUGx1Z2lucyIsICJpbml0X2Vtb3Rpb25fY2FjaGVfYnJvd3Nlcl9lc20iLCAicGFyc2VkIiwgImlzSW1wbGljaXRSdWxlIiwgInBhcmVudFJ1bGVzIiwgInNzclN0eWxlcyIsICJkYXRhRW1vdGlvbkF0dHJpYnV0ZSIsICJzdHlsaXNQbHVnaW5zIiwgImluc2VydGVkIiwgImNvbnRhaW5lciIsICJub2Rlc1RvSHlkcmF0ZSIsICJhdHRyaWIiLCAiX2luc2VydCIsICJvbW5pcHJlc2VudFBsdWdpbnMiLCAiY3VycmVudFNoZWV0IiwgImZpbmFsaXppbmdQbHVnaW5zIiwgInNlcmlhbGl6ZXIiLCAic3R5bGlzIiwgInN0eWxlcyIsICJzZWxlY3RvciIsICJzZXJpYWxpemVkIiwgInNob3VsZENhY2hlIiwgImltcG9ydF9ob2lzdF9ub25fcmVhY3Rfc3RhdGljcyIsICJpbml0X2Vtb3Rpb25fcmVhY3RfaXNvbGF0ZWRfaG5yc19icm93c2VyX2VzbSIsICJob2lzdE5vblJlYWN0U3RhdGljcyQxIiwgImdldFJlZ2lzdGVyZWRTdHlsZXMiLCAicmVnaXN0ZXJlZCIsICJyZWdpc3RlcmVkU3R5bGVzIiwgImNsYXNzTmFtZXMiLCAicmF3Q2xhc3NOYW1lIiwgImNsYXNzTmFtZSIsICJpc0Jyb3dzZXIiLCAicmVnaXN0ZXJTdHlsZXMiLCAiaW5zZXJ0U3R5bGVzIiwgImluaXRfZW1vdGlvbl91dGlsc19icm93c2VyX2VzbSIsICJpc1N0cmluZ1RhZyIsICJjdXJyZW50IiwgIm11cm11cjIiLCAic3RyIiwgImxlbiIsICJpbml0X2Vtb3Rpb25faGFzaF9lc20iLCAidW5pdGxlc3NLZXlzIiwgImluaXRfZW1vdGlvbl91bml0bGVzc19lc20iLCAiaGFuZGxlSW50ZXJwb2xhdGlvbiIsICJtZXJnZWRQcm9wcyIsICJpbnRlcnBvbGF0aW9uIiwgImN1cnNvciIsICJjcmVhdGVTdHJpbmdGcm9tT2JqZWN0IiwgInByZXZpb3VzQ3Vyc29yIiwgInJlc3VsdCIsICJtYXRjaGVkIiwgInJlcGxhY2VkIiwgImNhY2hlZCIsICJvYmoiLCAic3RyaW5nIiwgIl9rZXkiLCAiaXNQcm9jZXNzYWJsZVZhbHVlIiwgInByb2Nlc3NTdHlsZU5hbWUiLCAicHJvY2Vzc1N0eWxlVmFsdWUiLCAiX2kiLCAiaW50ZXJwb2xhdGVkIiwgImh5cGhlbmF0ZVJlZ2V4IiwgImFuaW1hdGlvblJlZ2V4IiwgImlzQ3VzdG9tUHJvcGVydHkiLCAibGFiZWxQYXR0ZXJuIiwgInNlcmlhbGl6ZVN0eWxlcyIsICJpbml0X2Vtb3Rpb25fc2VyaWFsaXplX2Jyb3dzZXJfZXNtIiwgInN0eWxlTmFtZSIsICJwMSIsICJwMiIsICJzdHJpbmdNb2RlIiwgInN0cmluZ3MiLCAic291cmNlTWFwIiwgImlkZW50aWZpZXJOYW1lIiwgIm5hbWUiLCAiUmVhY3QiLCAic3luY0ZhbGxiYWNrIiwgInVzZUluc2VydGlvbkVmZmVjdCIsICJ1c2VJbnNlcnRpb25FZmZlY3RBbHdheXNXaXRoU3luY0ZhbGxiYWNrIiwgInVzZUluc2VydGlvbkVmZmVjdFdpdGhMYXlvdXRGYWxsYmFjayIsICJpbml0X2Vtb3Rpb25fdXNlX2luc2VydGlvbl9lZmZlY3Rfd2l0aF9mYWxsYmFja3NfYnJvd3Nlcl9lc20iLCAiY3JlYXRlIiwgIndpdGhUaGVtZSIsICJDb21wb25lbnQiLCAiY29tcG9uZW50TmFtZSIsICJyZW5kZXIiLCAicmVmIiwgInRoZW1lIiwgIlRoZW1lQ29udGV4dCIsICJXaXRoVGhlbWUiLCAiaW1wb3J0X3JlYWN0IiwgImhhc093biIsICJFbW90aW9uQ2FjaGVDb250ZXh0IiwgIkNhY2hlUHJvdmlkZXIiLCAiX191bnNhZmVfdXNlRW1vdGlvbkNhY2hlIiwgIndpdGhFbW90aW9uQ2FjaGUiLCAidXNlVGhlbWUiLCAiZ2V0VGhlbWUiLCAiY3JlYXRlQ2FjaGVXaXRoVGhlbWUiLCAiVGhlbWVQcm92aWRlciIsICJ0eXBlUHJvcE5hbWUiLCAiY3JlYXRlRW1vdGlvblByb3BzIiwgIkluc2VydGlvbiIsICJFbW90aW9uIiwgIkVtb3Rpb24kMSIsICJpbml0X2Vtb3Rpb25fZWxlbWVudF80M2M2ZmVhMF9icm93c2VyX2VzbSIsICJvdXRlclRoZW1lIiwgIm1lcmdlZFRoZW1lIiwgIm5ld1Byb3BzIiwgImxhYmVsIiwgIl9yZWYiLCAiY3NzUHJvcCIsICJXcmFwcGVkQ29tcG9uZW50IiwgImxhYmVsRnJvbVN0YWNrIiwgImVtb3Rpb25fcmVhY3RfYnJvd3Nlcl9lc21fZXhwb3J0cyIsICJDbGFzc05hbWVzIiwgIkdsb2JhbCIsICJqc3giLCAiY3NzIiwgImtleWZyYW1lcyIsICJfbGVuIiwgIm1lcmdlIiwgImNsYXNzbmFtZXMiLCAiaW5pdF9lbW90aW9uX3JlYWN0X2Jyb3dzZXJfZXNtIiwgImFyZ3NMZW5ndGgiLCAiY3JlYXRlRWxlbWVudEFyZ0FycmF5IiwgInNlcmlhbGl6ZWROYW1lcyIsICJzZXJpYWxpemVkU3R5bGVzIiwgInNoZWV0UmVmIiwgInJlaHlkcmF0aW5nIiwgInNoZWV0UmVmQ3VycmVudCIsICJpbnNlcnRhYmxlIiwgImNscyIsICJ0b0FkZCIsICJzZXJpYWxpemVkQXJyIiwgImhhc1JlbmRlcmVkIiwgImN4IiwgIl9sZW4yIiwgIl9rZXkyIiwgImNvbnRlbnQiLCAiZWxlIiwgInJlcXVpcmVfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwgIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCAicmVxdWlyZV9mb3JtYXRNdWlFcnJvck1lc3NhZ2UiLCAiZm9ybWF0TXVpRXJyb3JNZXNzYWdlIiwgImNvZGUiLCAidXJsIiwgIl9mb3JtYXRNdWlFcnJvck1lc3NhZ2UiLCAicmVhY3RQcm9wc1JlZ2V4IiwgImlzUHJvcFZhbGlkIiwgImluaXRfZW1vdGlvbl9pc19wcm9wX3ZhbGlkX2VzbSIsICJwcm9wIiwgInRlc3RPbWl0UHJvcHNPblN0cmluZ1RhZyIsICJ0ZXN0T21pdFByb3BzT25Db21wb25lbnQiLCAiZ2V0RGVmYXVsdFNob3VsZEZvcndhcmRQcm9wIiwgImNvbXBvc2VTaG91bGRGb3J3YXJkUHJvcHMiLCAiY3JlYXRlU3R5bGVkIiwgImluaXRfZW1vdGlvbl9zdHlsZWRfYmFzZV9icm93c2VyX2VzbSIsICJpc1JlYWwiLCAic2hvdWxkRm9yd2FyZFByb3AiLCAib3B0aW9uc1Nob3VsZEZvcndhcmRQcm9wIiwgInByb3BOYW1lIiwgImJhc2VUYWciLCAidGFyZ2V0Q2xhc3NOYW1lIiwgImRlZmF1bHRTaG91bGRGb3J3YXJkUHJvcCIsICJzaG91bGRVc2VBcyIsICJTdHlsZWQiLCAiRmluYWxUYWciLCAiY2xhc3NJbnRlcnBvbGF0aW9ucyIsICJmaW5hbFNob3VsZEZvcndhcmRQcm9wIiwgIm5leHRUYWciLCAibmV4dE9wdGlvbnMiLCAiZW1vdGlvbl9zdHlsZWRfYnJvd3Nlcl9lc21fZXhwb3J0cyIsICJuZXdTdHlsZWQiLCAidGFncyIsICJpbml0X2Vtb3Rpb25fc3R5bGVkX2Jyb3dzZXJfZXNtIiwgInRhZ05hbWUiLCAicmVxdWlyZV9SZWFjdFByb3BUeXBlc1NlY3JldCIsICJSZWFjdFByb3BUeXBlc1NlY3JldCIsICJyZXF1aXJlX2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcyIsICJlbXB0eUZ1bmN0aW9uIiwgImVtcHR5RnVuY3Rpb25XaXRoUmVzZXQiLCAic2hpbSIsICJsb2NhdGlvbiIsICJwcm9wRnVsbE5hbWUiLCAic2VjcmV0IiwgImdldFNoaW0iLCAiUmVhY3RQcm9wVHlwZXMiLCAicmVxdWlyZV9wcm9wX3R5cGVzIiwgIlJlYWN0SXMiLCAidGhyb3dPbkRpcmVjdEFjY2VzcyIsICJyZXF1aXJlX3JlYWN0X2pzeF9ydW50aW1lX3Byb2R1Y3Rpb25fbWluIiwgInJlcXVpcmVfanN4X3J1bnRpbWUiLCAicmVxdWlyZV9TdHlsZWRFbmdpbmVQcm92aWRlciIsICJTdHlsZWRFbmdpbmVQcm92aWRlciIsICJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsICJfcHJvcFR5cGVzIiwgIl9yZWFjdDIiLCAiX2NhY2hlIiwgIl9qc3hSdW50aW1lIiwgIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsICJpbmplY3RGaXJzdCIsICJfU3R5bGVkRW5naW5lUHJvdmlkZXIiLCAicmVxdWlyZV9HbG9iYWxTdHlsZXMiLCAiR2xvYmFsU3R5bGVzIiwgImlzRW1wdHkiLCAiZGVmYXVsdFRoZW1lIiwgImdsb2JhbFN0eWxlcyIsICJ0aGVtZUlucHV0IiwgIl9HbG9iYWxTdHlsZXMiLCAicmVxdWlyZV9ub2RlIiwgIl9yZWFjdCIsICJzdHlsZWQiLCAiX3N0eWxlZCIsICJpbnRlcm5hbF9wcm9jZXNzU3R5bGVzIiwgInByb2Nlc3NvciIsICJyZXF1aXJlX2V4dGVuZHMiLCAicmVxdWlyZV9kZWVwbWVyZ2UiLCAiZGVlcG1lcmdlIiwgImlzUGxhaW5PYmplY3QiLCAiX2V4dGVuZHMyIiwgInByb3RvdHlwZSIsICJkZWVwQ2xvbmUiLCAiX2V4cG9ydE5hbWVzIiwgIl9kZWVwbWVyZ2UiLCAidjEiLCAicmVxdWlyZV9jYXBpdGFsaXplIiwgImNhcGl0YWxpemUiLCAiX2Zvcm1hdE11aUVycm9yTWVzc2FnZTIiLCAiX2NhcGl0YWxpemUiLCAicmVxdWlyZV9nZXREaXNwbGF5TmFtZSIsICJnZXREaXNwbGF5TmFtZSIsICJnZXRGdW5jdGlvbk5hbWUiLCAiX3JlYWN0SXMiLCAiZm5OYW1lTWF0Y2hSZWdleCIsICJnZXRGdW5jdGlvbkNvbXBvbmVudE5hbWUiLCAiZmFsbGJhY2siLCAiZ2V0V3JhcHBlZE5hbWUiLCAib3V0ZXJUeXBlIiwgImlubmVyVHlwZSIsICJ3cmFwcGVyTmFtZSIsICJmdW5jdGlvbk5hbWUiLCAiX2dldERpc3BsYXlOYW1lIiwgInJlcXVpcmVfY2xhbXAiLCAiY2xhbXAiLCAibWluIiwgIm1heCIsICJfZGVmYXVsdCIsICJfY2xhbXAiLCAicmVxdWlyZV9tZXJnZSIsICJhY2MiLCAicmVxdWlyZV9yZXNwb25zaXZlUHJvcFR5cGUiLCAicmVzcG9uc2l2ZVByb3BUeXBlIiwgInJlcXVpcmVfYnJlYWtwb2ludHMiLCAiY29tcHV0ZUJyZWFrcG9pbnRzQmFzZSIsICJjcmVhdGVFbXB0eUJyZWFrcG9pbnRPYmplY3QiLCAiaGFuZGxlQnJlYWtwb2ludHMiLCAibWVyZ2VCcmVha3BvaW50c0luT3JkZXIiLCAicmVtb3ZlVW51c2VkQnJlYWtwb2ludHMiLCAicmVzb2x2ZUJyZWFrcG9pbnRWYWx1ZXMiLCAiX21lcmdlIiwgInZhbHVlcyIsICJkZWZhdWx0QnJlYWtwb2ludHMiLCAicHJvcFZhbHVlIiwgInN0eWxlRnJvbVByb3BWYWx1ZSIsICJ0aGVtZUJyZWFrcG9pbnRzIiwgImJyZWFrcG9pbnQiLCAibWVkaWFLZXkiLCAiY3NzS2V5IiwgImJyZWFrcG9pbnRzIiwgInN0eWxlRnVuY3Rpb24iLCAibmV3U3R5bGVGdW5jdGlvbiIsICJiYXNlIiwgImV4dGVuZGVkIiwgImJyZWFrcG9pbnRzSW5wdXQiLCAiX2JyZWFrcG9pbnRzSW5wdXQka2V5IiwgImJyZWFrcG9pbnRTdHlsZUtleSIsICJicmVha3BvaW50S2V5cyIsICJzdHlsZSIsICJicmVha3BvaW50T3V0cHV0IiwgImVtcHR5QnJlYWtwb2ludHMiLCAibWVyZ2VkT3V0cHV0IiwgImJyZWFrcG9pbnRWYWx1ZXMiLCAiYnJlYWtwb2ludHNLZXlzIiwgImN1c3RvbUJhc2UiLCAicmVxdWlyZV9zdHlsZSIsICJnZXRQYXRoIiwgImdldFN0eWxlVmFsdWUiLCAiX3Jlc3BvbnNpdmVQcm9wVHlwZSIsICJfYnJlYWtwb2ludHMiLCAicGF0aCIsICJjaGVja1ZhcnMiLCAidGhlbWVNYXBwaW5nIiwgInRyYW5zZm9ybSIsICJwcm9wVmFsdWVGaW5hbCIsICJ1c2VyVmFsdWUiLCAiY3NzUHJvcGVydHkiLCAidGhlbWVLZXkiLCAicmVxdWlyZV9tZW1vaXplIiwgInJlcXVpcmVfc3BhY2luZyIsICJjcmVhdGVVbmFyeVNwYWNpbmciLCAiY3JlYXRlVW5hcnlVbml0IiwgImdldFN0eWxlRnJvbVByb3BWYWx1ZSIsICJnZXRWYWx1ZSIsICJtYXJnaW4iLCAicGFkZGluZyIsICJfc3R5bGUiLCAiX21lbW9pemUiLCAicHJvcGVydGllcyIsICJkaXJlY3Rpb25zIiwgImFsaWFzZXMiLCAiZ2V0Q3NzUHJvcGVydGllcyIsICJkaXJlY3Rpb24iLCAiZGlyIiwgIm1hcmdpbktleXMiLCAicGFkZGluZ0tleXMiLCAic3BhY2luZ0tleXMiLCAiZGVmYXVsdFZhbHVlIiwgIl9nZXRQYXRoIiwgInRoZW1lU3BhY2luZyIsICJ0cmFuc2Zvcm1lciIsICJ0cmFuc2Zvcm1lZCIsICJjc3NQcm9wZXJ0aWVzIiwgInJlc29sdmVDc3NQcm9wZXJ0eSIsICJzcGFjaW5nIiwgInJlcXVpcmVfY29tcG9zZSIsICJjb21wb3NlIiwgImhhbmRsZXJzIiwgInJlcXVpcmVfYm9yZGVycyIsICJib3JkZXJUcmFuc2Zvcm0iLCAiX2NvbXBvc2UiLCAiX3NwYWNpbmciLCAiY3JlYXRlQm9yZGVyU3R5bGUiLCAiYm9yZGVyIiwgImJvcmRlclRvcCIsICJib3JkZXJSaWdodCIsICJib3JkZXJCb3R0b20iLCAiYm9yZGVyTGVmdCIsICJib3JkZXJDb2xvciIsICJib3JkZXJUb3BDb2xvciIsICJib3JkZXJSaWdodENvbG9yIiwgImJvcmRlckJvdHRvbUNvbG9yIiwgImJvcmRlckxlZnRDb2xvciIsICJvdXRsaW5lIiwgIm91dGxpbmVDb2xvciIsICJib3JkZXJSYWRpdXMiLCAiYm9yZGVycyIsICJyZXF1aXJlX2Nzc0dyaWQiLCAiZ2FwIiwgImNvbHVtbkdhcCIsICJyb3dHYXAiLCAiZ3JpZENvbHVtbiIsICJncmlkUm93IiwgImdyaWRBdXRvRmxvdyIsICJncmlkQXV0b0NvbHVtbnMiLCAiZ3JpZEF1dG9Sb3dzIiwgImdyaWRUZW1wbGF0ZUNvbHVtbnMiLCAiZ3JpZFRlbXBsYXRlUm93cyIsICJncmlkVGVtcGxhdGVBcmVhcyIsICJncmlkQXJlYSIsICJncmlkIiwgInJlcXVpcmVfcGFsZXR0ZSIsICJwYWxldHRlVHJhbnNmb3JtIiwgImNvbG9yIiwgImJnY29sb3IiLCAiYmFja2dyb3VuZENvbG9yIiwgInBhbGV0dGUiLCAicmVxdWlyZV9zaXppbmciLCAic2l6aW5nVHJhbnNmb3JtIiwgIndpZHRoIiwgIm1heFdpZHRoIiwgIl9wcm9wcyR0aGVtZSIsICJfcHJvcHMkdGhlbWUyIiwgIm1pbldpZHRoIiwgImhlaWdodCIsICJtYXhIZWlnaHQiLCAibWluSGVpZ2h0IiwgInNpemVXaWR0aCIsICJzaXplSGVpZ2h0IiwgImJveFNpemluZyIsICJzaXppbmciLCAicmVxdWlyZV9kZWZhdWx0U3hDb25maWciLCAiX2JvcmRlcnMiLCAiX2Nzc0dyaWQiLCAiX3BhbGV0dGUiLCAiX3NpemluZyIsICJkZWZhdWx0U3hDb25maWciLCAicmVxdWlyZV9zdHlsZUZ1bmN0aW9uU3giLCAidW5zdGFibGVfY3JlYXRlU3R5bGVGdW5jdGlvblN4IiwgIl9kZWZhdWx0U3hDb25maWciLCAib2JqZWN0c0hhdmVTYW1lS2V5cyIsICJvYmplY3RzIiwgImFsbEtleXMiLCAib2JqZWN0IiwgInVuaW9uIiwgImNhbGxJZkZuIiwgIm1heWJlRm4iLCAiZ2V0VGhlbWVWYWx1ZSIsICJjb25maWciLCAic3R5bGVGdW5jdGlvblN4IiwgIl90aGVtZSR1bnN0YWJsZV9zeENvbiIsICJzeCIsICJ0cmF2ZXJzZSIsICJzeElucHV0IiwgInN4T2JqZWN0IiwgInN0eWxlS2V5IiwgImJyZWFrcG9pbnRzVmFsdWVzIiwgInJlcXVpcmVfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJleGNsdWRlZCIsICJzb3VyY2VLZXlzIiwgInJlcXVpcmVfZXh0ZW5kU3hQcm9wIiwgImV4dGVuZFN4UHJvcCIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZTIiLCAiX2V4Y2x1ZGVkIiwgInNwbGl0UHJvcHMiLCAiX3Byb3BzJHRoZW1lJHVuc3RhYmxlIiwgImluU3giLCAib3RoZXIiLCAic3lzdGVtUHJvcHMiLCAib3RoZXJQcm9wcyIsICJmaW5hbFN4IiwgIl9zdHlsZUZ1bmN0aW9uU3giLCAiX2V4dGVuZFN4UHJvcCIsICJyZXF1aXJlX2NyZWF0ZUJyZWFrcG9pbnRzIiwgImNyZWF0ZUJyZWFrcG9pbnRzIiwgInNvcnRCcmVha3BvaW50c1ZhbHVlcyIsICJicmVha3BvaW50c0FzQXJyYXkiLCAiYnJlYWtwb2ludDEiLCAiYnJlYWtwb2ludDIiLCAidW5pdCIsICJzdGVwIiwgInNvcnRlZFZhbHVlcyIsICJ1cCIsICJkb3duIiwgImJldHdlZW4iLCAic3RhcnQiLCAiZW5kSW5kZXgiLCAib25seSIsICJub3QiLCAia2V5SW5kZXgiLCAicmVxdWlyZV9zaGFwZSIsICJzaGFwZSIsICJyZXF1aXJlX2NyZWF0ZVNwYWNpbmciLCAiY3JlYXRlU3BhY2luZyIsICJzcGFjaW5nSW5wdXQiLCAiYXJnc0lucHV0IiwgImFyZ3VtZW50IiwgInJlcXVpcmVfYXBwbHlTdHlsZXMiLCAiYXBwbHlTdHlsZXMiLCAicmVxdWlyZV9jcmVhdGVUaGVtZSIsICJfY3JlYXRlQnJlYWtwb2ludHMiLCAiX3NoYXBlIiwgIl9jcmVhdGVTcGFjaW5nIiwgIl9hcHBseVN0eWxlcyIsICJjcmVhdGVUaGVtZSIsICJwYWxldHRlSW5wdXQiLCAic2hhcGVJbnB1dCIsICJtdWlUaGVtZSIsICJfY3JlYXRlVGhlbWUiLCAicmVxdWlyZV9jb2xvck1hbmlwdWxhdG9yIiwgImFscGhhIiwgImJsZW5kIiwgImRhcmtlbiIsICJkZWNvbXBvc2VDb2xvciIsICJlbXBoYXNpemUiLCAiZ2V0Q29udHJhc3RSYXRpbyIsICJnZXRMdW1pbmFuY2UiLCAiaGV4VG9SZ2IiLCAiaHNsVG9SZ2IiLCAibGlnaHRlbiIsICJwcml2YXRlX3NhZmVBbHBoYSIsICJwcml2YXRlX3NhZmVEYXJrZW4iLCAicHJpdmF0ZV9zYWZlRW1waGFzaXplIiwgInByaXZhdGVfc2FmZUxpZ2h0ZW4iLCAicmVjb21wb3NlQ29sb3IiLCAicmdiVG9IZXgiLCAiY2xhbXBXcmFwcGVyIiwgImNvbG9ycyIsICJpbnRUb0hleCIsICJpbnQiLCAiaGV4IiwgIm1hcmtlciIsICJjb2xvclNwYWNlIiwgImNvbG9yQ2hhbm5lbCIsICJkZWNvbXBvc2VkQ29sb3IiLCAicHJpdmF0ZV9zYWZlQ29sb3JDaGFubmVsIiwgIndhcm5pbmciLCAicmdiIiwgImZvcmVncm91bmQiLCAiYmFja2dyb3VuZCIsICJsdW1BIiwgImx1bUIiLCAiY29lZmZpY2llbnQiLCAib3ZlcmxheSIsICJvcGFjaXR5IiwgImdhbW1hIiwgImJsZW5kQ2hhbm5lbCIsICJvIiwgIm92ZXJsYXlDb2xvciIsICJyZXF1aXJlX2NyZWF0ZVN0eWxlZCIsICJfc3R5bGVkRW5naW5lIiwgIl9leGNsdWRlZDIiLCAiX2V4Y2x1ZGVkMyIsICJzeXN0ZW1EZWZhdWx0VGhlbWUiLCAibG93ZXJjYXNlRmlyc3RMZXR0ZXIiLCAicmVzb2x2ZVRoZW1lIiwgInRoZW1lSWQiLCAiZGVmYXVsdE92ZXJyaWRlc1Jlc29sdmVyIiwgInNsb3QiLCAicHJvY2Vzc1N0eWxlQXJnIiwgImNhbGxhYmxlU3R5bGUiLCAib3duZXJTdGF0ZSIsICJyZXNvbHZlZFN0eWxlc0FyZyIsICJyZXNvbHZlZFN0eWxlIiwgInZhcmlhbnRzIiwgInZhcmlhbnQiLCAiaXNNYXRjaCIsICJpbnB1dCIsICJyb290U2hvdWxkRm9yd2FyZFByb3AiLCAic2xvdFNob3VsZEZvcndhcmRQcm9wIiwgInN5c3RlbVN4IiwgImlucHV0T3B0aW9ucyIsICJjb21wb25lbnRTbG90IiwgImlucHV0U2tpcFZhcmlhbnRzUmVzb2x2ZXIiLCAiaW5wdXRTa2lwU3giLCAib3ZlcnJpZGVzUmVzb2x2ZXIiLCAic2tpcFZhcmlhbnRzUmVzb2x2ZXIiLCAic2tpcFN4IiwgInNob3VsZEZvcndhcmRQcm9wT3B0aW9uIiwgImRlZmF1bHRTdHlsZWRSZXNvbHZlciIsICJ0cmFuc2Zvcm1TdHlsZUFyZyIsICJzdHlsZXNBcmciLCAibXVpU3R5bGVkUmVzb2x2ZXIiLCAic3R5bGVBcmciLCAiZXhwcmVzc2lvbnMiLCAidHJhbnNmb3JtZWRTdHlsZUFyZyIsICJleHByZXNzaW9uc1dpdGhEZWZhdWx0VGhlbWUiLCAic3R5bGVPdmVycmlkZXMiLCAicmVzb2x2ZWRTdHlsZU92ZXJyaWRlcyIsICJzbG90S2V5IiwgInNsb3RTdHlsZSIsICJfdGhlbWUkY29tcG9uZW50cyIsICJ0aGVtZVZhcmlhbnRzIiwgIm51bU9mQ3VzdG9tRm5zQXBwbGllZCIsICJwbGFjZWhvbGRlcnMiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJpbXBvcnRfc2hpbSIsICJpbXBvcnRfd2l0aF9zZWxlY3RvciIsICJkZWZhdWx0Tm9vcEJhdGNoIiwgImJhdGNoIiwgInNldEJhdGNoIiwgIm5ld0JhdGNoIiwgImdldEJhdGNoIiwgIkNvbnRleHRLZXkiLCAiZ1QiLCAiZ2V0Q29udGV4dCIsICJfZ1QkQ29udGV4dEtleSIsICJjb250ZXh0TWFwIiwgInJlYWxDb250ZXh0IiwgIlJlYWN0UmVkdXhDb250ZXh0IiwgImNyZWF0ZVJlZHV4Q29udGV4dEhvb2siLCAiY29udGV4dCIsICJ1c2VSZWR1eENvbnRleHQiLCAibm90SW5pdGlhbGl6ZWQiLCAidXNlU3luY0V4dGVybmFsU3RvcmVXaXRoU2VsZWN0b3IiLCAiaW5pdGlhbGl6ZVVzZVNlbGVjdG9yIiwgInJlZkVxdWFsaXR5IiwgImNyZWF0ZVNlbGVjdG9ySG9vayIsICJlcXVhbGl0eUZuT3JPcHRpb25zIiwgImVxdWFsaXR5Rm4iLCAic3RhYmlsaXR5Q2hlY2siLCAibm9vcENoZWNrIiwgInN0b3JlIiwgInN1YnNjcmlwdGlvbiIsICJnZXRTZXJ2ZXJTdGF0ZSIsICJnbG9iYWxTdGFiaWxpdHlDaGVjayIsICJnbG9iYWxOb29wQ2hlY2siLCAiZmlyc3RSdW4iLCAid3JhcHBlZFNlbGVjdG9yIiwgInN0YXRlIiwgInNlbGVjdGVkIiwgImZpbmFsU3RhYmlsaXR5Q2hlY2siLCAidG9Db21wYXJlIiwgImZpbmFsTm9vcENoZWNrIiwgInNlbGVjdGVkU3RhdGUiLCAidXNlU2VsZWN0b3IiLCAiaW1wb3J0X3JlYWN0X2lzIiwgImNyZWF0ZUxpc3RlbmVyQ29sbGVjdGlvbiIsICJmaXJzdCIsICJsYXN0IiwgImxpc3RlbmVyIiwgImxpc3RlbmVycyIsICJpc1N1YnNjcmliZWQiLCAibnVsbExpc3RlbmVycyIsICJjcmVhdGVTdWJzY3JpcHRpb24iLCAicGFyZW50U3ViIiwgInVuc3Vic2NyaWJlIiwgInN1YnNjcmlwdGlvbnNBbW91bnQiLCAic2VsZlN1YnNjcmliZWQiLCAiYWRkTmVzdGVkU3ViIiwgInRyeVN1YnNjcmliZSIsICJjbGVhbnVwTGlzdGVuZXIiLCAicmVtb3ZlZCIsICJ0cnlVbnN1YnNjcmliZSIsICJub3RpZnlOZXN0ZWRTdWJzIiwgImhhbmRsZUNoYW5nZVdyYXBwZXIiLCAidHJ5U3Vic2NyaWJlU2VsZiIsICJ0cnlVbnN1YnNjcmliZVNlbGYiLCAiY2FuVXNlRE9NIiwgInVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QiLCAidXNlU3luY0V4dGVybmFsU3RvcmUiLCAiaW5pdGlhbGl6ZUNvbm5lY3QiLCAiUHJvdmlkZXIiLCAic2VydmVyU3RhdGUiLCAiY29udGV4dFZhbHVlIiwgInByZXZpb3VzU3RhdGUiLCAiUHJvdmlkZXJfZGVmYXVsdCIsICJjcmVhdGVTdG9yZUhvb2siLCAidXNlU3RvcmUiLCAiY3JlYXRlRGlzcGF0Y2hIb29rIiwgInVzZURpc3BhdGNoIiwgInVzZUFwcERpc3BhdGNoIiwgInVzZUFwcFNlbGVjdG9yIiwgImRpZSIsICJlcnJvciIsICJtc2ciLCAiRXJyb3IiLCAiam9pbiIsICJpc0RyYWZ0IiwgIkRSQUZUX1NUQVRFIiwgImlzRHJhZnRhYmxlIiwgInByb3RvIiwgIk9iamVjdCIsICJDdG9yIiwgImNhbGwiLCAiY29uc3RydWN0b3IiLCAiRnVuY3Rpb24iLCAidG9TdHJpbmciLCAib2JqZWN0Q3RvclN0cmluZyIsICJBcnJheSIsICJpc0FycmF5IiwgIkRSQUZUQUJMRSIsICJfdmFsdWUkY29uc3RydWN0b3IiLCAiaXNNYXAiLCAiaXNTZXQiLCAiZWFjaCIsICJlbnVtZXJhYmxlT25seSIsICJnZXRBcmNodHlwZSIsICJvd25LZXlzIiwgImZvckVhY2giLCAidGhpbmciLCAidHlwZV8iLCAiaGFzIiwgImdldCIsICJzZXQiLCAicHJvcE9yT2xkVmFsdWUiLCAiYWRkIiwgImlzIiwgImhhc01hcCIsICJNYXAiLCAiaGFzU2V0IiwgIlNldCIsICJsYXRlc3QiLCAiY29weV8iLCAiYmFzZV8iLCAic2hhbGxvd0NvcHkiLCAiZGVzY3JpcHRvcnMiLCAiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsICJkZXNjIiwgIndyaXRhYmxlIiwgImNvbmZpZ3VyYWJsZSIsICJlbnVtZXJhYmxlIiwgImZyZWV6ZSIsICJkZWVwIiwgImlzRnJvemVuIiwgImNsZWFyIiwgImRlbGV0ZSIsICJkb250TXV0YXRlRnJvemVuQ29sbGVjdGlvbnMiLCAiZ2V0UGx1Z2luIiwgInBsdWdpbktleSIsICJwbHVnaW4iLCAicGx1Z2lucyIsICJsb2FkUGx1Z2luIiwgImltcGxlbWVudGF0aW9uIiwgImdldEN1cnJlbnRTY29wZSIsICJjdXJyZW50U2NvcGUiLCAidXNlUGF0Y2hlc0luU2NvcGUiLCAic2NvcGUiLCAicGF0Y2hMaXN0ZW5lciIsICJwYXRjaGVzXyIsICJpbnZlcnNlUGF0Y2hlc18iLCAicGF0Y2hMaXN0ZW5lcl8iLCAicmV2b2tlU2NvcGUiLCAibGVhdmVTY29wZSIsICJkcmFmdHNfIiwgInJldm9rZURyYWZ0IiwgInBhcmVudF8iLCAiZW50ZXJTY29wZSIsICJpbW1lciIsICJpbW1lcl8iLCAiY2FuQXV0b0ZyZWV6ZV8iLCAidW5maW5hbGl6ZWREcmFmdHNfIiwgImRyYWZ0IiwgInJldm9rZV8iLCAicmV2b2tlZF8iLCAicHJvY2Vzc1Jlc3VsdCIsICJiYXNlRHJhZnQiLCAiaXNSZXBsYWNlZCIsICJ1c2VQcm94aWVzXyIsICJ3aWxsRmluYWxpemVFUzVfIiwgIm1vZGlmaWVkXyIsICJmaW5hbGl6ZSIsICJtYXliZUZyZWV6ZSIsICJnZW5lcmF0ZVJlcGxhY2VtZW50UGF0Y2hlc18iLCAiTk9USElORyIsICJ1bmRlZmluZWQiLCAicm9vdFNjb3BlIiwgImNoaWxkVmFsdWUiLCAiZmluYWxpemVQcm9wZXJ0eSIsICJzY29wZV8iLCAiZmluYWxpemVkXyIsICJkcmFmdF8iLCAicmVzdWx0RWFjaCIsICJnZW5lcmF0ZVBhdGNoZXNfIiwgInBhcmVudFN0YXRlIiwgInRhcmdldE9iamVjdCIsICJyb290UGF0aCIsICJ0YXJnZXRJc1NldCIsICJyZXMiLCAiYXNzaWduZWRfIiwgImNvbmNhdCIsICJhdXRvRnJlZXplXyIsICJnZXREZXNjcmlwdG9yRnJvbVByb3RvIiwgIm1hcmtDaGFuZ2VkIiwgInByZXBhcmVDb3B5IiwgImNyZWF0ZVByb3h5IiwgInByb3h5TWFwXyIsICJwcm94eVNldF8iLCAiaXNNYW51YWxfIiwgInRyYXBzIiwgIm9iamVjdFRyYXBzIiwgImFycmF5VHJhcHMiLCAiUHJveHkiLCAicmV2b2NhYmxlIiwgInJldm9rZSIsICJwcm94eSIsICJjcmVhdGVFUzVQcm94eV8iLCAicHVzaCIsICJjdXJyZW50SW1wbCIsICJhcmNoVHlwZSIsICJoYXNDaGFuZ2VzXyIsICJjb3B5SGVscGVyIiwgImVuYWJsZUVTNSIsICJwcm94eVByb3BlcnR5IiwgInRoaXMiLCAibWFya0NoYW5nZXNTd2VlcCIsICJkcmFmdHMiLCAiaGFzQXJyYXlDaGFuZ2VzIiwgImhhc09iamVjdENoYW5nZXMiLCAiYmFzZVZhbHVlIiwgImJhc2VJc0RyYWZ0IiwgImFzc2VydFVucmV2b2tlZCIsICJKU09OIiwgIm1hcmtDaGFuZ2VzUmVjdXJzaXZlbHkiLCAiTWF0aCIsICJoYXNTeW1ib2wiLCAiU3ltYm9sIiwgImhhc1Byb3hpZXMiLCAiUmVmbGVjdCIsICJmb3IiLCAiX2Rlc2MkZ2V0IiwgImN1cnJlbnRTdGF0ZSIsICJOdW1iZXIiLCAiaXNOYU4iLCAiZGVsZXRlUHJvcGVydHkiLCAib3duZXIiLCAic2V0UHJvdG90eXBlT2YiLCAiYXJndW1lbnRzIiwgImFwcGx5IiwgIkltbWVyIiwgInJlY2lwZSIsICJkZWZhdWx0QmFzZSIsICJwcm9kdWNlIiwgIl90aGlzMiIsICJoYXNFcnJvciIsICJQcm9taXNlIiwgInRoZW4iLCAiaXAiLCAicHJvZHVjZVdpdGhQYXRjaGVzIiwgInBhdGNoZXMiLCAiaW52ZXJzZVBhdGNoZXMiLCAibmV4dFN0YXRlIiwgInVzZVByb3hpZXMiLCAic2V0VXNlUHJveGllcyIsICJhdXRvRnJlZXplIiwgInNldEF1dG9GcmVlemUiLCAiY3JlYXRlRHJhZnQiLCAiZmluaXNoRHJhZnQiLCAiYXBwbHlQYXRjaGVzIiwgInBhdGNoIiwgIm9wIiwgImFwcGx5UGF0Y2hlc0ltcGwiLCAiYXBwbHlQYXRjaGVzXyIsICJiaW5kIiwgIl90eXBlb2YiLCAidG9QcmltaXRpdmUiLCAidG9Qcm9wZXJ0eUtleSIsICJfZGVmaW5lUHJvcGVydHkiLCAiX29iamVjdFNwcmVhZDIiLCAiZm9ybWF0UHJvZEVycm9yTWVzc2FnZSIsICIkJG9ic2VydmFibGUiLCAicmFuZG9tU3RyaW5nIiwgIkFjdGlvblR5cGVzIiwgImNyZWF0ZVN0b3JlIiwgInJlZHVjZXIiLCAicHJlbG9hZGVkU3RhdGUiLCAiZW5oYW5jZXIiLCAiX3JlZjIiLCAiY3VycmVudFJlZHVjZXIiLCAiY3VycmVudExpc3RlbmVycyIsICJuZXh0TGlzdGVuZXJzIiwgImlzRGlzcGF0Y2hpbmciLCAiZW5zdXJlQ2FuTXV0YXRlTmV4dExpc3RlbmVycyIsICJnZXRTdGF0ZSIsICJzdWJzY3JpYmUiLCAiZGlzcGF0Y2giLCAiYWN0aW9uIiwgInJlcGxhY2VSZWR1Y2VyIiwgIm5leHRSZWR1Y2VyIiwgIm9ic2VydmFibGUiLCAib3V0ZXJTdWJzY3JpYmUiLCAib2JzZXJ2ZXIiLCAib2JzZXJ2ZVN0YXRlIiwgImFzc2VydFJlZHVjZXJTaGFwZSIsICJyZWR1Y2VycyIsICJpbml0aWFsU3RhdGUiLCAiY29tYmluZVJlZHVjZXJzIiwgInJlZHVjZXJLZXlzIiwgImZpbmFsUmVkdWNlcnMiLCAiZmluYWxSZWR1Y2VyS2V5cyIsICJ1bmV4cGVjdGVkS2V5Q2FjaGUiLCAic2hhcGVBc3NlcnRpb25FcnJvciIsICJ3YXJuaW5nTWVzc2FnZSIsICJoYXNDaGFuZ2VkIiwgInByZXZpb3VzU3RhdGVGb3JLZXkiLCAibmV4dFN0YXRlRm9yS2V5IiwgImFjdGlvblR5cGUiLCAiZnVuY3MiLCAiYXBwbHlNaWRkbGV3YXJlIiwgIm1pZGRsZXdhcmVzIiwgIl9kaXNwYXRjaCIsICJtaWRkbGV3YXJlQVBJIiwgImNoYWluIiwgImNyZWF0ZVRodW5rTWlkZGxld2FyZSIsICJleHRyYUFyZ3VtZW50IiwgInRodW5rIiwgImVzX2RlZmF1bHQiLCAiY29tcG9zZVdpdGhEZXZUb29scyIsICJkZXZUb29sc0VuaGFuY2VyIiwgIm5vb3AyIiwgImJhc2VQcm90byIsICJjcmVhdGVBY3Rpb24iLCAicHJlcGFyZUFjdGlvbiIsICJhY3Rpb25DcmVhdG9yIiwgInByZXBhcmVkIiwgIl9fc3ByZWFkVmFsdWVzIiwgIk1pZGRsZXdhcmVBcnJheSIsICJfc3VwZXIiLCAiX19leHRlbmRzIiwgImFyciIsICJfX3NwcmVhZEFycmF5IiwgIkVuaGFuY2VyQXJyYXkiLCAiZnJlZXplRHJhZnRhYmxlIiwgImltbWVyX2VzbV9kZWZhdWx0IiwgImlzQm9vbGVhbiIsICJjdXJyeUdldERlZmF1bHRNaWRkbGV3YXJlIiwgImdldERlZmF1bHRNaWRkbGV3YXJlIiwgIl9jIiwgIl9kIiwgImltbXV0YWJsZUNoZWNrIiwgIl9lIiwgInNlcmlhbGl6YWJsZUNoZWNrIiwgIl9mIiwgImFjdGlvbkNyZWF0b3JDaGVjayIsICJtaWRkbGV3YXJlQXJyYXkiLCAiaW1tdXRhYmxlT3B0aW9ucyIsICJzZXJpYWxpemFibGVPcHRpb25zIiwgImFjdGlvbkNyZWF0b3JPcHRpb25zIiwgIklTX1BST0RVQ1RJT04iLCAiY29uZmlndXJlU3RvcmUiLCAiY3VycmllZEdldERlZmF1bHRNaWRkbGV3YXJlIiwgImRldlRvb2xzIiwgIl9nIiwgIl9oIiwgImVuaGFuY2VycyIsICJyb290UmVkdWNlciIsICJmaW5hbE1pZGRsZXdhcmUiLCAibWlkZGxld2FyZUVuaGFuY2VyIiwgImZpbmFsQ29tcG9zZSIsICJkZWZhdWx0RW5oYW5jZXJzIiwgInN0b3JlRW5oYW5jZXJzIiwgImNvbXBvc2VkRW5oYW5jZXIiLCAiZXhlY3V0ZVJlZHVjZXJCdWlsZGVyQ2FsbGJhY2siLCAiYnVpbGRlckNhbGxiYWNrIiwgImFjdGlvbnNNYXAiLCAiYWN0aW9uTWF0Y2hlcnMiLCAiZGVmYXVsdENhc2VSZWR1Y2VyIiwgImJ1aWxkZXIiLCAidHlwZU9yQWN0aW9uQ3JlYXRvciIsICJtYXRjaGVyIiwgImlzU3RhdGVGdW5jdGlvbiIsICJjcmVhdGVSZWR1Y2VyIiwgIm1hcE9yQnVpbGRlckNhbGxiYWNrIiwgImZpbmFsQWN0aW9uTWF0Y2hlcnMiLCAiZmluYWxEZWZhdWx0Q2FzZVJlZHVjZXIiLCAiZ2V0SW5pdGlhbFN0YXRlIiwgImZyb3plbkluaXRpYWxTdGF0ZV8xIiwgImNhc2VSZWR1Y2VycyIsICJyZWR1Y2VyMiIsICJjciIsICJjYXNlUmVkdWNlciIsICJnZXRUeXBlMiIsICJhY3Rpb25LZXkiLCAiY3JlYXRlU2xpY2UiLCAicmVkdWNlck5hbWVzIiwgInNsaWNlQ2FzZVJlZHVjZXJzQnlOYW1lIiwgInNsaWNlQ2FzZVJlZHVjZXJzQnlUeXBlIiwgImFjdGlvbkNyZWF0b3JzIiwgInJlZHVjZXJOYW1lIiwgIm1heWJlUmVkdWNlcldpdGhQcmVwYXJlIiwgInByZXBhcmVDYWxsYmFjayIsICJidWlsZFJlZHVjZXIiLCAiZXh0cmFSZWR1Y2VycyIsICJmaW5hbENhc2VSZWR1Y2VycyIsICJhY3Rpb25NYXRjaGVyc18xIiwgIl9yZWR1Y2VyIiwgInVybEFscGhhYmV0IiwgIm5hbm9pZCIsICJjb21tb25Qcm9wZXJ0aWVzIiwgIlJlamVjdFdpdGhWYWx1ZSIsICJwYXlsb2FkIiwgIm1ldGEiLCAiRnVsZmlsbFdpdGhNZXRhIiwgIm1pbmlTZXJpYWxpemVFcnJvciIsICJzaW1wbGVFcnJvciIsICJjb21tb25Qcm9wZXJ0aWVzXzEiLCAiY3JlYXRlQXN5bmNUaHVuayIsICJjcmVhdGVBc3luY1RodW5rMiIsICJ0eXBlUHJlZml4IiwgInBheWxvYWRDcmVhdG9yIiwgImZ1bGZpbGxlZCIsICJyZXF1ZXN0SWQiLCAiX19zcHJlYWRQcm9wcyIsICJwZW5kaW5nIiwgInJlamVjdGVkIiwgImRpc3BsYXllZFdhcm5pbmciLCAiQUMiLCAiY2xhc3NfMSIsICJleHRyYSIsICJhYm9ydENvbnRyb2xsZXIiLCAiYWJvcnRSZWFzb24iLCAic3RhcnRlZCIsICJhYm9ydCIsICJyZWFzb24iLCAicHJvbWlzZTIiLCAiX19hc3luYyIsICJjb25kaXRpb25SZXN1bHQiLCAiX2EiLCAiaXNUaGVuYWJsZSIsICJhYm9ydGVkUHJvbWlzZSIsICJfIiwgInJlamVjdCIsICJfYiIsICJmaW5hbEFjdGlvbiIsICJlcnJfMSIsICJza2lwRGlzcGF0Y2giLCAidW53cmFwUmVzdWx0IiwgInRhc2siLCAiY29tcGxldGVkIiwgImNhbmNlbGxlZCIsICJ0YXNrQ2FuY2VsbGVkIiwgInRhc2tDb21wbGV0ZWQiLCAibGlzdGVuZXJDYW5jZWxsZWQiLCAibGlzdGVuZXJDb21wbGV0ZWQiLCAiVGFza0Fib3J0RXJyb3IiLCAiYWxtIiwgImFkZExpc3RlbmVyIiwgImNsZWFyQWxsTGlzdGVuZXJzIiwgInJlbW92ZUxpc3RlbmVyIiwgInByb21pc2UiLCAicXVldWVNaWNyb3Rhc2tTaGltIiwgImNyZWF0ZVF1ZXVlV2l0aFRpbWVyIiwgInRpbWVvdXQiLCAibm90aWZ5IiwgInJBRiIsICJyZXF1ZXN0IiwgInJlcVBhcmFtcyIsICJpbml0IiwgImFwaVVybCIsICJtZXNzYWdlIiwgIlBhZ2UiLCAiX1BhZ2UiLCAicGFnZSIsICJudW1FbGVtZW50cyIsICJ0b3RhbFBhZ2VzIiwgInRvdGFsRWxlbWVudHMiLCAiZWxlbWVudHMiLCAiZmFjZXRGaWVsZHNUb0NvdW50cyIsICJnZXRQYWdpbmF0ZWQiLCAibm9ybWFsaXplIiwgInN0ckFycmF5IiwgInJlc3VsdEFycmF5IiwgInBhcnRzIiwgInVybEpvaW4iLCAiZ2V0U3RhdHMiLCAicmVqZWN0V2l0aFZhbHVlIiwgImdldEJhbm5lclRleHQiLCAiaG9tZVNsaWNlIiwgImhvbWVTbGljZV9kZWZhdWx0IiwgIlJlaWZpZWQiLCAiX1JlaWZpZWQiLCAiYXhpb21zIiwgImpzb25Ob2RlIiwgImF4aW9tIiwgImV4aXN0aW5nIiwgIkxpbmtlZEVudGl0aWVzIiwgIl9MaW5rZWRFbnRpdGllcyIsICJsaW5rZWRFbnRpdGllcyIsICJpcmkiLCAibGlua2VkRW50aXR5IiwgIlRoaW5nIiwgInR5cGVzIiwgImFzQXJyYXkiLCAibGFiZWxzIiwgImRlZmluaXRpb24iLCAiZGVmIiwgIkVudGl0eSIsICJkZWZpbml0aW9uUHJvcGVydGllcyIsICJzeW5vbnltUHJvcGVydGllcyIsICJoaWVyYXJjaGljYWxQcm9wZXJ0aWVzIiwgImFubm90YXRpb25QcmVkaWNhdGVzIiwgInByZWRpY2F0ZSIsICJwYXJlbnRJcmkiLCAiaGllcmFyY2hpY2FsUGFyZW50cyIsICJDbGFzcyIsICJJbmRpdmlkdWFsIiwgInJkZlR5cGVzIiwgIlByb3BlcnR5IiwgInRoaW5nRnJvbUpzb25Qcm9wZXJ0aWVzIiwgIm1hcFRvQXBpUGFyYW1zIiwgInNlYXJjaFBhcmFtcyIsICJzZWFyY2hQYXJhbXNDb3B5IiwgIm5ld0tleSIsICJ0b0NhbWVsIiwgIiQxIiwgIk9udG9sb2d5IiwgIm5hbWVzIiwgImRlc2NyaXB0aW9ucyIsICJ2ZXJzaW9uSXJpIiwgInZlcnNpb25Gcm9tRGF0ZSIsICJ2ZXJzaW9uRnJvbU51bWJlciIsICJpbXBvcnRfbXVsdGltYXAiLCAiZXh0cmFjdEVudGl0eUhpZXJhcmNoeSIsICJlbnRpdGllcyIsICJjaGlsZFRvUGFyZW50UmVsYXRpb25zIiwgInVyaVRvTm9kZSIsICJlbnRpdHkiLCAiaXNUb3AiLCAicGFyZW50UmVsYXRpb24iLCAicGFyZW50RW50aXR5IiwgInBhcmVudFJlbGF0aW9uVG9DaGlsZCIsICJjaGlsZFJlbGF0aW9uVG9QYXJlbnQiLCAicmVsYXRpb24iLCAiYnJlYWtDeWNsZXMiLCAiY3VycmVudElyaSIsICJ2aXNpdGVkSXJpcyIsICJwYXJlbnRSZWxhdGlvbnMiLCAicGFyZW50VG9DaGlsZFJlbGF0aW9ucyIsICJjaGlsZElyaSIsICJyZWxhdGlvbnMiLCAiY3JlYXRlVHJlZUZyb21FbnRpdGllcyIsICJwcmVmZXJyZWRSb290cyIsICJvbnRvbG9neSIsICJyb290RW50aXRpZXMiLCAicHJlZmVycmVkIiwgImFsbE5vZGVzIiwgIm5vZGVDaGlsZHJlbiIsICJhdXRvbWF0aWNhbGx5RXhwYW5kZWROb2RlcyIsICJyb290RW50aXR5IiwgImNyZWF0ZVRyZWVOb2RlIiwgImRlYnVnTnVtSXRlcmF0aW9ucyIsICJjaGlsZE5vZGVzIiwgInRyZWVOb2RlIiwgImNoaWxkTm9kZSIsICJyZXNldFRyZWVDb250ZW50IiwgInJlc2V0VHJlZVNldHRpbmdzIiwgImVuYWJsZVByZWZlcnJlZFJvb3RzIiwgImRpc2FibGVQcmVmZXJyZWRSb290cyIsICJvcGVuTm9kZSIsICJjbG9zZU5vZGUiLCAic2hvd09ic29sZXRlIiwgImhpZGVPYnNvbGV0ZSIsICJzaG93U2libGluZ3MiLCAiaGlkZVNpYmxpbmdzIiwgInNob3dDb3VudHMiLCAiaGlkZUNvdW50cyIsICJnZXRPbnRvbG9neSIsICJvbnRvbG9neUlkIiwgImxhbmciLCAib250b2xvZ3lQcm9wZXJ0aWVzIiwgImdldEVudGl0eVdpdGhUeXBlIiwgImVudGl0eVR5cGUiLCAiZW50aXR5SXJpIiwgImFwaVNlYXJjaFBhcmFtcyIsICJkb3VibGVFbmNvZGVkVGVybVVyaSIsICJlbnRpdHlKc29uUHJvcGVydGllcyIsICJyZXN1bHRzIiwgImdldEVudGl0eSIsICJnZXRDbGFzc0luc3RhbmNlcyIsICJjbGFzc0lyaSIsICJnZXRPbnRvbG9naWVzIiwgInJvd3NQZXJQYWdlIiwgImdldEVudGl0aWVzIiwgImdldEFuY2VzdG9ycyIsICJzaG93T2Jzb2xldGVFbmFibGVkIiwgImRvdWJsZUVuY29kZWRVcmkiLCAiYW5jZXN0b3JzUGFnZSIsICJnZXRSb290RW50aXRpZXMiLCAiY2xhc3Nlc1dpdGhJbmRpdmlkdWFscyIsICJvcnBoYW5lZEluZGl2aWR1YWxzIiwgInJvb3RzUGFnZSIsICJnZXROb2RlQ2hpbGRyZW4iLCAiZW50aXR5VHlwZVBsdXJhbCIsICJhYnNvbHV0ZUlkZW50aXR5IiwgImNoaWxkcmVuUGFnZSIsICJ0ZXJtIiwgInBhcmVudGhvb2RNZXRhZGF0YSIsICJvbnRvbG9naWVzU2xpY2UiLCAicm9vdE5vZGVzIiwgInJvb3RUZXJtcyIsICJzZWxlY3RlZElzRGVzY2VuZGFudE9mUHJlZmVycmVkUm9vdHMiLCAiYWJzSWQiLCAib250b2xvZ2llc1NsaWNlX2RlZmF1bHQiLCAiZ2V0U2VhcmNoUmVzdWx0cyIsICJxdWVyeSIsICJwYXJhbSIsICJwYXJzZWRRdWVyeSIsICJzZWFyY2hTbGljZSIsICJzZWFyY2hTbGljZV9kZWZhdWx0IiwgImNvbW1vbiIsICJjb21tb25fZGVmYXVsdCIsICJyZWQiLCAicmVkX2RlZmF1bHQiLCAicHVycGxlIiwgInB1cnBsZV9kZWZhdWx0IiwgImJsdWUiLCAiYmx1ZV9kZWZhdWx0IiwgImxpZ2h0Qmx1ZSIsICJsaWdodEJsdWVfZGVmYXVsdCIsICJncmVlbiIsICJncmVlbl9kZWZhdWx0IiwgIm9yYW5nZSIsICJvcmFuZ2VfZGVmYXVsdCIsICJncmV5IiwgImdyZXlfZGVmYXVsdCIsICJpZGVudGlmaWVyX2RlZmF1bHQiLCAiaW1wb3J0X3N0eWxlZF9lbmdpbmUiLCAiaW1wb3J0X2RlZXBtZXJnZSIsICJzaGFwZV9kZWZhdWx0IiwgIm1lcmdlX2RlZmF1bHQiLCAiaW1wb3J0X2NhcGl0YWxpemUiLCAic3R5bGVfZGVmYXVsdCIsICJjb21wb3NlX2RlZmF1bHQiLCAiZGVmYXVsdFN4Q29uZmlnX2RlZmF1bHQiLCAic3R5bGVGdW5jdGlvblN4X2RlZmF1bHQiLCAiY3JlYXRlVGhlbWVfZGVmYXVsdCIsICJpc09iamVjdEVtcHR5IiwgImNvbnRleHRUaGVtZSIsICJ1c2VUaGVtZVdpdGhvdXREZWZhdWx0X2RlZmF1bHQiLCAidXNlVGhlbWVfZGVmYXVsdCIsICJkZWZhdWx0R2VuZXJhdG9yIiwgImNyZWF0ZUNsYXNzTmFtZUdlbmVyYXRvciIsICJnZW5lcmF0ZSIsICJnZW5lcmF0b3IiLCAiQ2xhc3NOYW1lR2VuZXJhdG9yIiwgIkNsYXNzTmFtZUdlbmVyYXRvcl9kZWZhdWx0IiwgImNsc3giLCAiY2xzeF9kZWZhdWx0IiwgImdsb2JhbFN0YXRlQ2xhc3NlcyIsICJnZW5lcmF0ZVV0aWxpdHlDbGFzcyIsICJnbG9iYWxTdGF0ZVByZWZpeCIsICJnbG9iYWxTdGF0ZUNsYXNzIiwgImdlbmVyYXRlVXRpbGl0eUNsYXNzZXMiLCAic2xvdHMiLCAicHJvY2Vzc1N0eWxlcyIsICJzdHlsZWRFbmdpbmVTdHlsZWQiLCAic3R5bGVkX2RlZmF1bHQiLCAicmVzb2x2ZVByb3BzIiwgImRlZmF1bHRQcm9wcyIsICJkZWZhdWx0U2xvdFByb3BzIiwgInNsb3RQcm9wcyIsICJzbG90UHJvcE5hbWUiLCAiZ2V0VGhlbWVQcm9wcyIsICJwYXJhbXMiLCAidXNlVGhlbWVQcm9wcyIsICJ1c2VFbmhhbmNlZEVmZmVjdCIsICJ1c2VFbmhhbmNlZEVmZmVjdF9kZWZhdWx0IiwgImNyZWF0ZUNoYWluZWRGdW5jdGlvbiIsICJpc011aUVsZW1lbnQiLCAibXVpTmFtZXMiLCAiX211aU5hbWUiLCAiX2VsZW1lbnQkdHlwZSIsICJzZXRSZWYiLCAiZ2xvYmFsSWQiLCAidXNlR2xvYmFsSWQiLCAiaWRPdmVycmlkZSIsICJkZWZhdWx0SWQiLCAic2V0RGVmYXVsdElkIiwgIm1heWJlUmVhY3RVc2VJZCIsICJ1c2VJZCIsICJyZWFjdElkIiwgInVzZUNvbnRyb2xsZWQiLCAiY29udHJvbGxlZCIsICJkZWZhdWx0UHJvcCIsICJpc0NvbnRyb2xsZWQiLCAidmFsdWVTdGF0ZSIsICJzZXRWYWx1ZSIsICJzZXRWYWx1ZUlmVW5jb250cm9sbGVkIiwgIm5ld1ZhbHVlIiwgInVzZUV2ZW50Q2FsbGJhY2siLCAidXNlRXZlbnRDYWxsYmFja19kZWZhdWx0IiwgInVzZUZvcmtSZWYiLCAicmVmcyIsICJpbnN0YW5jZSIsICJVTklOSVRJQUxJWkVEIiwgInVzZUxhenlSZWYiLCAiaW5pdEFyZyIsICJFTVBUWSIsICJ1c2VPbk1vdW50IiwgIlRpbWVvdXQiLCAiX1RpbWVvdXQiLCAiZGVsYXkiLCAidXNlVGltZW91dCIsICJoYWRLZXlib2FyZEV2ZW50IiwgImhhZEZvY3VzVmlzaWJsZVJlY2VudGx5IiwgImhhZEZvY3VzVmlzaWJsZVJlY2VudGx5VGltZW91dCIsICJpbnB1dFR5cGVzV2hpdGVsaXN0IiwgImZvY3VzVHJpZ2dlcnNLZXlib2FyZE1vZGFsaXR5IiwgImhhbmRsZUtleURvd24iLCAiZXZlbnQiLCAiaGFuZGxlUG9pbnRlckRvd24iLCAiaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSIsICJwcmVwYXJlIiwgImRvYyIsICJpc0ZvY3VzVmlzaWJsZSIsICJ1c2VJc0ZvY3VzVmlzaWJsZSIsICJpc0ZvY3VzVmlzaWJsZVJlZiIsICJoYW5kbGVCbHVyVmlzaWJsZSIsICJoYW5kbGVGb2N1c1Zpc2libGUiLCAiY29tcG9zZUNsYXNzZXMiLCAiZ2V0VXRpbGl0eUNsYXNzIiwgImNsYXNzZXMiLCAidXRpbGl0eUNsYXNzIiwgImltcG9ydF9qc3hfcnVudGltZSIsICJkZWZhdWx0Q3JlYXRlU3R5bGVkQ29tcG9uZW50IiwgInVzZVRoZW1lUHJvcHNEZWZhdWx0IiwgImpvaW5DaGlsZHJlbiIsICJzZXBhcmF0b3IiLCAiY2hpbGRyZW5BcnJheSIsICJjaGlsZCIsICJnZXRTaWRlRnJvbURpcmVjdGlvbiIsICJkaXJlY3Rpb25WYWx1ZXMiLCAic3BhY2luZ1ZhbHVlcyIsICJwcmV2aW91c0RpcmVjdGlvblZhbHVlIiwgImNyZWF0ZVN0YWNrIiwgImNyZWF0ZVN0eWxlZENvbXBvbmVudCIsICJ1c2VVdGlsaXR5Q2xhc3NlcyIsICJTdGFja1Jvb3QiLCAiaW5Qcm9wcyIsICJ0aGVtZVByb3BzIiwgImRpdmlkZXIiLCAidXNlRmxleEdhcCIsICJfanN4IiwgImltcG9ydF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UiLCAiaW1wb3J0X3N0eWxlRnVuY3Rpb25TeCIsICJpbXBvcnRfY3JlYXRlVGhlbWUiLCAiY3JlYXRlTWl4aW5zIiwgIm1peGlucyIsICJpbXBvcnRfY29sb3JNYW5pcHVsYXRvciIsICJsaWdodCIsICJkYXJrIiwgImFkZExpZ2h0T3JEYXJrIiwgImludGVudCIsICJzaGFkZSIsICJ0b25hbE9mZnNldCIsICJ0b25hbE9mZnNldExpZ2h0IiwgInRvbmFsT2Zmc2V0RGFyayIsICJnZXREZWZhdWx0UHJpbWFyeSIsICJtb2RlIiwgImdldERlZmF1bHRTZWNvbmRhcnkiLCAiZ2V0RGVmYXVsdEVycm9yIiwgImdldERlZmF1bHRJbmZvIiwgImdldERlZmF1bHRTdWNjZXNzIiwgImdldERlZmF1bHRXYXJuaW5nIiwgImNyZWF0ZVBhbGV0dGUiLCAiY29udHJhc3RUaHJlc2hvbGQiLCAicHJpbWFyeSIsICJzZWNvbmRhcnkiLCAiaW5mbyIsICJzdWNjZXNzIiwgImdldENvbnRyYXN0VGV4dCIsICJhdWdtZW50Q29sb3IiLCAibWFpblNoYWRlIiwgImxpZ2h0U2hhZGUiLCAiZGFya1NoYWRlIiwgIm1vZGVzIiwgInJvdW5kIiwgImNhc2VBbGxDYXBzIiwgImRlZmF1bHRGb250RmFtaWx5IiwgImNyZWF0ZVR5cG9ncmFwaHkiLCAidHlwb2dyYXBoeSIsICJmb250RmFtaWx5IiwgImZvbnRTaXplIiwgImZvbnRXZWlnaHRMaWdodCIsICJmb250V2VpZ2h0UmVndWxhciIsICJmb250V2VpZ2h0TWVkaXVtIiwgImZvbnRXZWlnaHRCb2xkIiwgImh0bWxGb250U2l6ZSIsICJhbGxWYXJpYW50cyIsICJweFRvUmVtMiIsICJjb2VmIiwgInB4VG9SZW0iLCAiYnVpbGRWYXJpYW50IiwgImZvbnRXZWlnaHQiLCAibGluZUhlaWdodCIsICJsZXR0ZXJTcGFjaW5nIiwgImNhc2luZyIsICJjcmVhdGVTaGFkb3ciLCAicHgiLCAic2hhZG93cyIsICJzaGFkb3dzX2RlZmF1bHQiLCAiZWFzaW5nIiwgImR1cmF0aW9uIiwgImZvcm1hdE1zIiwgIm1pbGxpc2Vjb25kcyIsICJnZXRBdXRvSGVpZ2h0RHVyYXRpb24iLCAiY29uc3RhbnQiLCAiY3JlYXRlVHJhbnNpdGlvbnMiLCAiaW5wdXRUcmFuc2l0aW9ucyIsICJtZXJnZWRFYXNpbmciLCAibWVyZ2VkRHVyYXRpb24iLCAiZHVyYXRpb25PcHRpb24iLCAiZWFzaW5nT3B0aW9uIiwgImFuaW1hdGVkUHJvcCIsICJ6SW5kZXgiLCAiekluZGV4X2RlZmF1bHQiLCAibWl4aW5zSW5wdXQiLCAidHJhbnNpdGlvbnNJbnB1dCIsICJ0eXBvZ3JhcGh5SW5wdXQiLCAic3lzdGVtVGhlbWUiLCAic3lzdGVtQ3JlYXRlVGhlbWUiLCAiZGVmYXVsdFRoZW1lX2RlZmF1bHQiLCAiaW1wb3J0X2NyZWF0ZVN0eWxlZCIsICJjYXBpdGFsaXplX2RlZmF1bHQiLCAiY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uX2RlZmF1bHQiLCAiZ2V0U3ZnSWNvblV0aWxpdHlDbGFzcyIsICJzdmdJY29uQ2xhc3NlcyIsICJTdmdJY29uUm9vdCIsICJfdGhlbWUkdHJhbnNpdGlvbnMiLCAiX3RoZW1lJHRyYW5zaXRpb25zJGNyIiwgIl90aGVtZSR0cmFuc2l0aW9uczIiLCAiX3RoZW1lJHR5cG9ncmFwaHkiLCAiX3RoZW1lJHR5cG9ncmFwaHkkcHhUIiwgIl90aGVtZSR0eXBvZ3JhcGh5MiIsICJfdGhlbWUkdHlwb2dyYXBoeTIkcHgiLCAiX3RoZW1lJHR5cG9ncmFwaHkzIiwgIl90aGVtZSR0eXBvZ3JhcGh5MyRweCIsICJfcGFsZXR0ZSRvd25lclN0YXRlJGMiLCAiX3BhbGV0dGUyIiwgIl9wYWxldHRlMyIsICJTdmdJY29uIiwgImh0bWxDb2xvciIsICJpbmhlcml0Vmlld0JveCIsICJ0aXRsZUFjY2VzcyIsICJ2aWV3Qm94IiwgImhhc1N2Z0FzQ2hpbGQiLCAibW9yZSIsICJfanN4cyIsICJTdmdJY29uX2RlZmF1bHQiLCAiY3JlYXRlU3ZnSWNvbiIsICJkaXNwbGF5TmFtZSIsICJpc011aUVsZW1lbnRfZGVmYXVsdCIsICJ1c2VJZF9kZWZhdWx0IiwgInVzZUNvbnRyb2xsZWRfZGVmYXVsdCIsICJ1c2VGb3JrUmVmX2RlZmF1bHQiLCAidXNlSXNGb2N1c1Zpc2libGVfZGVmYXVsdCIsICJfc2V0UHJvdG90eXBlT2YiLCAiX2luaGVyaXRzTG9vc2UiLCAic3ViQ2xhc3MiLCAic3VwZXJDbGFzcyIsICJUcmFuc2l0aW9uR3JvdXBDb250ZXh0X2RlZmF1bHQiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJnZXRDaGlsZE1hcHBpbmciLCAibWFwRm4iLCAibWFwcGVyIiwgIm1lcmdlQ2hpbGRNYXBwaW5ncyIsICJnZXRWYWx1ZUZvcktleSIsICJuZXh0S2V5c1BlbmRpbmciLCAicGVuZGluZ0tleXMiLCAicHJldktleSIsICJjaGlsZE1hcHBpbmciLCAibmV4dEtleSIsICJwZW5kaW5nTmV4dEtleSIsICJnZXRQcm9wIiwgImdldEluaXRpYWxDaGlsZE1hcHBpbmciLCAib25FeGl0ZWQiLCAiZ2V0TmV4dENoaWxkTWFwcGluZyIsICJuZXh0UHJvcHMiLCAicHJldkNoaWxkTWFwcGluZyIsICJuZXh0Q2hpbGRNYXBwaW5nIiwgImhhc1ByZXYiLCAiaGFzTmV4dCIsICJwcmV2Q2hpbGQiLCAiaXNMZWF2aW5nIiwgIlRyYW5zaXRpb25Hcm91cCIsICJfUmVhY3QkQ29tcG9uZW50IiwgImhhbmRsZUV4aXRlZCIsICJmaXJzdFJlbmRlciIsICJjdXJyZW50Q2hpbGRNYXBwaW5nIiwgIl90aGlzJHByb3BzIiwgImNoaWxkRmFjdG9yeSIsICJUcmFuc2l0aW9uR3JvdXBfZGVmYXVsdCIsICJSaXBwbGUiLCAicHVsc2F0ZSIsICJyaXBwbGVYIiwgInJpcHBsZVkiLCAicmlwcGxlU2l6ZSIsICJpblByb3AiLCAibGVhdmluZyIsICJzZXRMZWF2aW5nIiwgInJpcHBsZUNsYXNzTmFtZSIsICJyaXBwbGVTdHlsZXMiLCAiY2hpbGRDbGFzc05hbWUiLCAidGltZW91dElkIiwgIlJpcHBsZV9kZWZhdWx0IiwgInRvdWNoUmlwcGxlQ2xhc3NlcyIsICJ0b3VjaFJpcHBsZUNsYXNzZXNfZGVmYXVsdCIsICJfdCIsICJfdDIiLCAiX3QzIiwgIl90NCIsICJEVVJBVElPTiIsICJERUxBWV9SSVBQTEUiLCAiZW50ZXJLZXlmcmFtZSIsICJleGl0S2V5ZnJhbWUiLCAicHVsc2F0ZUtleWZyYW1lIiwgIlRvdWNoUmlwcGxlUm9vdCIsICJUb3VjaFJpcHBsZVJpcHBsZSIsICJUb3VjaFJpcHBsZSIsICJjZW50ZXJQcm9wIiwgInJpcHBsZXMiLCAic2V0UmlwcGxlcyIsICJyaXBwbGVDYWxsYmFjayIsICJpZ25vcmluZ01vdXNlRG93biIsICJzdGFydFRpbWVyIiwgInN0YXJ0VGltZXJDb21taXQiLCAic3RhcnRDb21taXQiLCAib2xkUmlwcGxlcyIsICJjZW50ZXIiLCAiZmFrZUVsZW1lbnQiLCAicmVjdCIsICJjbGllbnRYIiwgImNsaWVudFkiLCAic2l6ZVgiLCAic2l6ZVkiLCAic3RvcCIsICJUb3VjaFJpcHBsZV9kZWZhdWx0IiwgImdldEJ1dHRvbkJhc2VVdGlsaXR5Q2xhc3MiLCAiYnV0dG9uQmFzZUNsYXNzZXMiLCAiYnV0dG9uQmFzZUNsYXNzZXNfZGVmYXVsdCIsICJkaXNhYmxlZCIsICJmb2N1c1Zpc2libGUiLCAiZm9jdXNWaXNpYmxlQ2xhc3NOYW1lIiwgImNvbXBvc2VkQ2xhc3NlcyIsICJCdXR0b25CYXNlUm9vdCIsICJCdXR0b25CYXNlIiwgImNlbnRlclJpcHBsZSIsICJkaXNhYmxlUmlwcGxlIiwgImRpc2FibGVUb3VjaFJpcHBsZSIsICJmb2N1c1JpcHBsZSIsICJMaW5rQ29tcG9uZW50IiwgIm9uQmx1ciIsICJvbkNsaWNrIiwgIm9uQ29udGV4dE1lbnUiLCAib25EcmFnTGVhdmUiLCAib25Gb2N1cyIsICJvbkZvY3VzVmlzaWJsZSIsICJvbktleURvd24iLCAib25LZXlVcCIsICJvbk1vdXNlRG93biIsICJvbk1vdXNlTGVhdmUiLCAib25Nb3VzZVVwIiwgIm9uVG91Y2hFbmQiLCAib25Ub3VjaE1vdmUiLCAib25Ub3VjaFN0YXJ0IiwgInRhYkluZGV4IiwgIlRvdWNoUmlwcGxlUHJvcHMiLCAidG91Y2hSaXBwbGVSZWYiLCAiYnV0dG9uUmVmIiwgInJpcHBsZVJlZiIsICJoYW5kbGVSaXBwbGVSZWYiLCAiZm9jdXNWaXNpYmxlUmVmIiwgInNldEZvY3VzVmlzaWJsZSIsICJtb3VudGVkU3RhdGUiLCAic2V0TW91bnRlZFN0YXRlIiwgImVuYWJsZVRvdWNoUmlwcGxlIiwgInVzZVJpcHBsZUhhbmRsZXIiLCAicmlwcGxlQWN0aW9uIiwgImV2ZW50Q2FsbGJhY2siLCAic2tpcFJpcHBsZUFjdGlvbiIsICJoYW5kbGVNb3VzZURvd24iLCAiaGFuZGxlQ29udGV4dE1lbnUiLCAiaGFuZGxlRHJhZ0xlYXZlIiwgImhhbmRsZU1vdXNlVXAiLCAiaGFuZGxlTW91c2VMZWF2ZSIsICJoYW5kbGVUb3VjaFN0YXJ0IiwgImhhbmRsZVRvdWNoRW5kIiwgImhhbmRsZVRvdWNoTW92ZSIsICJoYW5kbGVCbHVyIiwgImhhbmRsZUZvY3VzIiwgImlzTm9uTmF0aXZlQnV0dG9uIiwgImJ1dHRvbiIsICJrZXlkb3duUmVmIiwgImhhbmRsZUtleVVwIiwgIkNvbXBvbmVudFByb3AiLCAiYnV0dG9uUHJvcHMiLCAiaGFuZGxlUmVmIiwgIkJ1dHRvbkJhc2VfZGVmYXVsdCIsICJnZXRUeXBvZ3JhcGh5VXRpbGl0eUNsYXNzIiwgInR5cG9ncmFwaHlDbGFzc2VzIiwgImFsaWduIiwgImd1dHRlckJvdHRvbSIsICJub1dyYXAiLCAicGFyYWdyYXBoIiwgIlR5cG9ncmFwaHlSb290IiwgImRlZmF1bHRWYXJpYW50TWFwcGluZyIsICJjb2xvclRyYW5zZm9ybWF0aW9ucyIsICJ0cmFuc2Zvcm1EZXByZWNhdGVkQ29sb3JzIiwgIlR5cG9ncmFwaHkiLCAidmFyaWFudE1hcHBpbmciLCAiVHlwb2dyYXBoeV9kZWZhdWx0IiwgImZvcm1Db250cm9sU3RhdGUiLCAic3RhdGVzIiwgIm11aUZvcm1Db250cm9sIiwgIkZvcm1Db250cm9sQ29udGV4dCIsICJGb3JtQ29udHJvbENvbnRleHRfZGVmYXVsdCIsICJ1c2VGb3JtQ29udHJvbCIsICJoYXNWYWx1ZSIsICJpc0ZpbGxlZCIsICJTU1IiLCAiaXNBZG9ybmVkU3RhcnQiLCAiZ2V0U3dpdGNoQmFzZVV0aWxpdHlDbGFzcyIsICJzd2l0Y2hCYXNlQ2xhc3NlcyIsICJjaGVja2VkIiwgImVkZ2UiLCAiU3dpdGNoQmFzZVJvb3QiLCAiU3dpdGNoQmFzZUlucHV0IiwgIlN3aXRjaEJhc2UiLCAiYXV0b0ZvY3VzIiwgImNoZWNrZWRQcm9wIiwgImNoZWNrZWRJY29uIiwgImRlZmF1bHRDaGVja2VkIiwgImRpc2FibGVkUHJvcCIsICJkaXNhYmxlRm9jdXNSaXBwbGUiLCAiaWNvbiIsICJpbnB1dFByb3BzIiwgImlucHV0UmVmIiwgIm9uQ2hhbmdlIiwgInJlYWRPbmx5IiwgInJlcXVpcmVkIiwgInNldENoZWNrZWRTdGF0ZSIsICJoYW5kbGVJbnB1dENoYW5nZSIsICJuZXdDaGVja2VkIiwgImhhc0xhYmVsRm9yIiwgIlN3aXRjaEJhc2VfZGVmYXVsdCIsICJDaGVja0JveE91dGxpbmVCbGFua19kZWZhdWx0IiwgIkNoZWNrQm94X2RlZmF1bHQiLCAiSW5kZXRlcm1pbmF0ZUNoZWNrQm94X2RlZmF1bHQiLCAiZ2V0Q2hlY2tib3hVdGlsaXR5Q2xhc3MiLCAiY2hlY2tib3hDbGFzc2VzIiwgImNoZWNrYm94Q2xhc3Nlc19kZWZhdWx0IiwgImluZGV0ZXJtaW5hdGUiLCAiQ2hlY2tib3hSb290IiwgImRlZmF1bHRDaGVja2VkSWNvbiIsICJkZWZhdWx0SWNvbiIsICJkZWZhdWx0SW5kZXRlcm1pbmF0ZUljb24iLCAiQ2hlY2tib3giLCAiX2ljb24kcHJvcHMkZm9udFNpemUiLCAiX2luZGV0ZXJtaW5hdGVJY29uJHByIiwgImljb25Qcm9wIiwgImluZGV0ZXJtaW5hdGVJY29uUHJvcCIsICJpbmRldGVybWluYXRlSWNvbiIsICJDaGVja2JveF9kZWZhdWx0IiwgImdldENpcmN1bGFyUHJvZ3Jlc3NVdGlsaXR5Q2xhc3MiLCAiY2lyY3VsYXJQcm9ncmVzc0NsYXNzZXMiLCAiU0laRSIsICJjaXJjdWxhclJvdGF0ZUtleWZyYW1lIiwgImNpcmN1bGFyRGFzaEtleWZyYW1lIiwgImRpc2FibGVTaHJpbmsiLCAiQ2lyY3VsYXJQcm9ncmVzc1Jvb3QiLCAiQ2lyY3VsYXJQcm9ncmVzc1NWRyIsICJDaXJjdWxhclByb2dyZXNzQ2lyY2xlIiwgIkNpcmN1bGFyUHJvZ3Jlc3MiLCAidGhpY2tuZXNzIiwgImNpcmNsZVN0eWxlIiwgInJvb3RTdHlsZSIsICJyb290UHJvcHMiLCAiY2lyY3VtZmVyZW5jZSIsICJDaXJjdWxhclByb2dyZXNzX2RlZmF1bHQiLCAiZ2V0Rm9ybUNvbnRyb2xVdGlsaXR5Q2xhc3NlcyIsICJmb3JtQ29udHJvbENsYXNzZXMiLCAiZnVsbFdpZHRoIiwgIkZvcm1Db250cm9sUm9vdCIsICJGb3JtQ29udHJvbCIsICJ2aXN1YWxseUZvY3VzZWQiLCAiaGlkZGVuTGFiZWwiLCAiYWRvcm5lZFN0YXJ0IiwgInNldEFkb3JuZWRTdGFydCIsICJpbml0aWFsQWRvcm5lZFN0YXJ0IiwgImZpbGxlZCIsICJzZXRGaWxsZWQiLCAiaW5pdGlhbEZpbGxlZCIsICJmb2N1c2VkU3RhdGUiLCAic2V0Rm9jdXNlZCIsICJmb2N1c2VkIiwgInJlZ2lzdGVyRWZmZWN0IiwgImNoaWxkQ29udGV4dCIsICJGb3JtQ29udHJvbF9kZWZhdWx0IiwgIlN0YWNrIiwgIlN0YWNrX2RlZmF1bHQiLCAiZ2V0Rm9ybUNvbnRyb2xMYWJlbFV0aWxpdHlDbGFzc2VzIiwgImZvcm1Db250cm9sTGFiZWxDbGFzc2VzIiwgImZvcm1Db250cm9sTGFiZWxDbGFzc2VzX2RlZmF1bHQiLCAibGFiZWxQbGFjZW1lbnQiLCAiRm9ybUNvbnRyb2xMYWJlbFJvb3QiLCAiQXN0ZXJpc2tDb21wb25lbnQiLCAiRm9ybUNvbnRyb2xMYWJlbCIsICJfc2xvdFByb3BzJHR5cG9ncmFwaHkiLCAiY29tcG9uZW50c1Byb3BzIiwgImNvbnRyb2wiLCAiZGlzYWJsZVR5cG9ncmFwaHkiLCAibGFiZWxQcm9wIiwgInJlcXVpcmVkUHJvcCIsICJjb250cm9sUHJvcHMiLCAiZmNzIiwgInR5cG9ncmFwaHlTbG90UHJvcHMiLCAiRm9ybUNvbnRyb2xMYWJlbF9kZWZhdWx0IiwgImdldEZvcm1Hcm91cFV0aWxpdHlDbGFzcyIsICJmb3JtR3JvdXBDbGFzc2VzIiwgInJvdyIsICJGb3JtR3JvdXBSb290IiwgIkZvcm1Hcm91cCIsICJGb3JtR3JvdXBfZGVmYXVsdCIsICJSYWRpb0J1dHRvblVuY2hlY2tlZF9kZWZhdWx0IiwgIlJhZGlvQnV0dG9uQ2hlY2tlZF9kZWZhdWx0IiwgIlJhZGlvQnV0dG9uSWNvblJvb3QiLCAiUmFkaW9CdXR0b25JY29uQmFja2dyb3VuZCIsICJSYWRpb0J1dHRvbkljb25Eb3QiLCAiUmFkaW9CdXR0b25JY29uIiwgIlJhZGlvQnV0dG9uSWNvbl9kZWZhdWx0IiwgIlJhZGlvR3JvdXBDb250ZXh0IiwgIlJhZGlvR3JvdXBDb250ZXh0X2RlZmF1bHQiLCAidXNlUmFkaW9Hcm91cCIsICJnZXRSYWRpb1V0aWxpdHlDbGFzcyIsICJyYWRpb0NsYXNzZXMiLCAicmFkaW9DbGFzc2VzX2RlZmF1bHQiLCAiUmFkaW9Sb290IiwgImFyZUVxdWFsVmFsdWVzIiwgIlJhZGlvIiwgIl9kZWZhdWx0SWNvbiRwcm9wcyRmbyIsICJfZGVmYXVsdENoZWNrZWRJY29uJHAiLCAibmFtZVByb3AiLCAib25DaGFuZ2VQcm9wIiwgInJhZGlvR3JvdXAiLCAiUmFkaW9fZGVmYXVsdCIsICJSYWRpb0dyb3VwIiwgImFjdGlvbnMiLCAidmFsdWVQcm9wIiwgInJvb3RSZWYiLCAic2V0VmFsdWVTdGF0ZSIsICJSYWRpb0dyb3VwX2RlZmF1bHQiLCAiTm9kZSIsICJleHBhbmRhYmxlIiwgImV4cGFuZGVkIiwgImhpZ2hsaWdodCIsICJpc0xhc3QiLCAiRW50aXR5VHJlZSIsICJzZWxlY3RlZEVudGl0eSIsICJvbk5hdmlnYXRlVG9FbnRpdHkiLCAib25OYXZpZ2F0ZVRvT250b2xvZ3kiLCAibm9kZXNXaXRoQ2hpbGRyZW5Mb2FkZWQiLCAibnVtUGVuZGluZ1RyZWVSZXF1ZXN0cyIsICJtYW51YWxseUV4cGFuZGVkTm9kZXMiLCAic2hvd1NpYmxpbmdzRW5hYmxlZCIsICJzaG93Q291bnRzRW5hYmxlZCIsICJ0b2dnbGVOb2RlIiwgImlzRXhwYW5kZWQiLCAibm9kZXNNaXNzaW5nQ2hpbGRyZW4iLCAicHJvbWlzZXMiLCAidG9nZ2xlU2hvd09ic29sZXRlIiwgInRvZ2dsZVNob3dTaWJsaW5ncyIsICJ0b2dnbGVTaG93Q291bnRzIiwgInJlbmRlck5vZGVDaGlsZHJlbiIsICJjaGlsZHJlbkNvcHkiLCAidGl0bGVBIiwgInRpdGxlQiIsICJjaGlsZHJlblNvcnRlZCIsICJUcmVlTGluayIsICJ0aXRsZSIsICJkZWZpbmVkQnkiLCAiZGVmaW5pbmdPbnRvbG9neSIsICJTdWJzY3JpYmFibGUiLCAiaXNTZXJ2ZXIiLCAibm9vcCIsICJmdW5jdGlvbmFsVXBkYXRlIiwgInVwZGF0ZXIiLCAiaXNWYWxpZFRpbWVvdXQiLCAiZW5zdXJlUXVlcnlLZXlBcnJheSIsICJ0aW1lVW50aWxTdGFsZSIsICJ1cGRhdGVkQXQiLCAic3RhbGVUaW1lIiwgInBhcnNlUXVlcnlBcmdzIiwgImFyZzEiLCAiYXJnMiIsICJhcmczIiwgImlzUXVlcnlLZXkiLCAicGFyc2VGaWx0ZXJBcmdzIiwgIm1hcFF1ZXJ5U3RhdHVzRmlsdGVyIiwgImFjdGl2ZSIsICJpbmFjdGl2ZSIsICJpc0FjdGl2ZSIsICJtYXRjaFF1ZXJ5IiwgImZpbHRlcnMiLCAiZXhhY3QiLCAiZmV0Y2hpbmciLCAicXVlcnlLZXkiLCAic3RhbGUiLCAiaGFzaFF1ZXJ5S2V5QnlPcHRpb25zIiwgInBhcnRpYWxNYXRjaEtleSIsICJxdWVyeVN0YXR1c0ZpbHRlciIsICJtYXRjaE11dGF0aW9uIiwgIm11dGF0aW9uIiwgIm11dGF0aW9uS2V5IiwgImhhc2hRdWVyeUtleSIsICJoYXNoRm4iLCAic3RhYmxlVmFsdWVIYXNoIiwgInBhcnRpYWxEZWVwRXF1YWwiLCAicmVwbGFjZUVxdWFsRGVlcCIsICJhU2l6ZSIsICJiSXRlbXMiLCAiYlNpemUiLCAiZXF1YWxJdGVtcyIsICJoYXNPYmplY3RQcm90b3R5cGUiLCAiY3RvciIsICJwcm90IiwgInNsZWVwIiwgInJlc29sdmUiLCAic2NoZWR1bGVNaWNyb3Rhc2siLCAiZ2V0QWJvcnRDb250cm9sbGVyIiwgIkZvY3VzTWFuYWdlciIsICJfU3Vic2NyaWJhYmxlIiwgIl93aW5kb3ciLCAiX3RoaXMkY2xlYW51cCIsICJzZXR1cCIsICJfdGhpcyRjbGVhbnVwMiIsICJmb2N1c01hbmFnZXIiLCAiT25saW5lTWFuYWdlciIsICJvbk9ubGluZSIsICJvbmxpbmUiLCAib25saW5lTWFuYWdlciIsICJkZWZhdWx0UmV0cnlEZWxheSIsICJmYWlsdXJlQ291bnQiLCAiaXNDYW5jZWxhYmxlIiwgIkNhbmNlbGxlZEVycm9yIiwgImlzQ2FuY2VsbGVkRXJyb3IiLCAiUmV0cnllciIsICJjYW5jZWxSZXRyeSIsICJjYW5jZWxGbiIsICJjb250aW51ZUZuIiwgInByb21pc2VSZXNvbHZlIiwgInByb21pc2VSZWplY3QiLCAiY2FuY2VsT3B0aW9ucyIsICJvdXRlclJlc29sdmUiLCAib3V0ZXJSZWplY3QiLCAicGF1c2UiLCAiY29udGludWVSZXNvbHZlIiwgInJ1biIsICJwcm9taXNlT3JWYWx1ZSIsICJfY29uZmlnJHJldHJ5IiwgIl9jb25maWckcmV0cnlEZWxheSIsICJyZXRyeSIsICJyZXRyeURlbGF5IiwgInNob3VsZFJldHJ5IiwgIk5vdGlmeU1hbmFnZXIiLCAiX3RoaXMzIiwgInF1ZXVlIiwgIm5vdGlmeU1hbmFnZXIiLCAibG9nZ2VyIiwgImdldExvZ2dlciIsICJzZXRMb2dnZXIiLCAibmV3TG9nZ2VyIiwgIlF1ZXJ5IiwgIl90aGlzJG9wdGlvbnMkY2FjaGVUaSIsICJfdGhpcyRvcHRpb25zJGlzRGF0YUUiLCAiX3RoaXMkb3B0aW9ucyIsICJwcmV2RGF0YSIsICJkYXRhIiwgInNldFN0YXRlT3B0aW9ucyIsICJfdGhpcyRyZXRyeWVyIiwgIl90aGlzJHJldHJ5ZXIyIiwgIl90aGlzJHJldHJ5ZXIzIiwgImZldGNoT3B0aW9ucyIsICJfdGhpcyRvcHRpb25zJGJlaGF2aW8iLCAiX2NvbnRleHQkZmV0Y2hPcHRpb25zIiwgIl9hYm9ydENvbnRyb2xsZXIkYWJvciIsICJfdGhpcyRyZXRyeWVyNCIsICJxdWVyeUZuQ29udGV4dCIsICJmZXRjaEZuIiwgIl90aGlzJG9wdGlvbnMkYmVoYXZpbzIiLCAiX2NvbnRleHQkZmV0Y2hPcHRpb25zMiIsICJoYXNJbml0aWFsRGF0YSIsICJpbml0aWFsRGF0YVVwZGF0ZWRBdCIsICJoYXNEYXRhIiwgIl9hY3Rpb24kbWV0YSIsICJfYWN0aW9uJGRhdGFVcGRhdGVkQXQiLCAiUXVlcnlDYWNoZSIsICJjbGllbnQiLCAiX29wdGlvbnMkcXVlcnlIYXNoIiwgInF1ZXJ5SGFzaCIsICJxdWVyeUluTWFwIiwgIl9wYXJzZUZpbHRlckFyZ3MiLCAiX3BhcnNlRmlsdGVyQXJnczIiLCAiX3RoaXM0IiwgIl90aGlzNSIsICJNdXRhdGlvbiIsICJnZXREZWZhdWx0U3RhdGUiLCAicmVzdG9yZWQiLCAiX3RoaXMkb3B0aW9ucyRyZXRyeSIsICJNdXRhdGlvbkNhY2hlIiwgInBhdXNlZE11dGF0aW9ucyIsICJpbmZpbml0ZVF1ZXJ5QmVoYXZpb3IiLCAiX2NvbnRleHQkZmV0Y2hPcHRpb25zMyIsICJfY29udGV4dCRmZXRjaE9wdGlvbnM0IiwgIl9jb250ZXh0JHN0YXRlJGRhdGEiLCAiX2NvbnRleHQkc3RhdGUkZGF0YTIiLCAicmVmZXRjaFBhZ2UiLCAiZmV0Y2hNb3JlIiwgInBhZ2VQYXJhbSIsICJpc0ZldGNoaW5nTmV4dFBhZ2UiLCAiaXNGZXRjaGluZ1ByZXZpb3VzUGFnZSIsICJvbGRQYWdlcyIsICJvbGRQYWdlUGFyYW1zIiwgImFib3J0U2lnbmFsIiwgIm5ld1BhZ2VQYXJhbXMiLCAicXVlcnlGbiIsICJidWlsZE5ld1BhZ2VzIiwgInBhZ2VzIiwgImZldGNoUGFnZSIsICJtYW51YWwiLCAicXVlcnlGblJlc3VsdCIsICJwcm9taXNlQXNBbnkiLCAiZ2V0TmV4dFBhZ2VQYXJhbSIsICJfbWFudWFsIiwgIl9wYXJhbSIsICJnZXRQcmV2aW91c1BhZ2VQYXJhbSIsICJzaG91bGRGZXRjaEZpcnN0UGFnZSIsICJfbG9vcCIsICJzaG91bGRGZXRjaE5leHRQYWdlIiwgIl9wYXJhbTIiLCAiZmluYWxQcm9taXNlIiwgImZpbmFsUHJvbWlzZUFzQW55IiwgIlF1ZXJ5Q2xpZW50IiwgIl90aGlzJHVuc3Vic2NyaWJlRm9jdSIsICJfdGhpcyR1bnN1YnNjcmliZU9ubGkiLCAiX3RoaXMkcXVlcnlDYWNoZSRmaW5kIiwgInF1ZXJ5S2V5T3JGaWx0ZXJzIiwgInBhcnNlZE9wdGlvbnMiLCAiZGVmYXVsdGVkT3B0aW9ucyIsICJfdGhpcyRxdWVyeUNhY2hlJGZpbmQyIiwgInF1ZXJ5Q2FjaGUiLCAiX3BhcnNlRmlsdGVyQXJnczMiLCAicmVmZXRjaEZpbHRlcnMiLCAiX3BhcnNlRmlsdGVyQXJnczQiLCAiX3BhcnNlRmlsdGVyQXJnczQkIiwgIl9yZWYzIiwgIl9maWx0ZXJzJHJlZmV0Y2hBY3RpdiIsICJfZmlsdGVycyRyZWZldGNoSW5hY3QiLCAiX3BhcnNlRmlsdGVyQXJnczUiLCAiX3RoaXM2IiwgIl9wYXJzZUZpbHRlckFyZ3M2IiwgIl90aGlzNyIsICJfdGhpcyRxdWVyeURlZmF1bHRzJGYiLCAiX3RoaXMkbXV0YXRpb25EZWZhdWx0IiwgInVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzIiwgIlJlYWN0RE9NIiwgImRlZmF1bHRDb250ZXh0IiwgIlF1ZXJ5Q2xpZW50U2hhcmluZ0NvbnRleHQiLCAiZ2V0UXVlcnlDbGllbnRDb250ZXh0IiwgImNvbnRleHRTaGFyaW5nIiwgIlF1ZXJ5Q2xpZW50UHJvdmlkZXIiLCAiX3JlZiRjb250ZXh0U2hhcmluZyIsICJDb250ZXh0IiwgImNyZWF0ZUVudGl0eVRyZWUiLCAiRW50aXR5VHJlZVdpZGdldCIsICJxdWVyeUNsaWVudCIsICJFbnRpdHlUcmVlV2lkZ2V0SW5uZXIiLCAibG9hZGluZ09udG9sb2d5IiwgImxvYWRpbmdFbnRpdHkiLCAibG9hZGluZ0NsYXNzSW5zdGFuY2VzIiwgImhhbmRsZU5hdmlnYXRlVG9FbnRpdHkiLCAiaGFuZGxlTmF2aWdhdGVUb09udG9sb2d5IiwgImltcG9ydF9yZWFjdF9kb20iLCAiUmVhY3QiLCAiUmVhY3RET00iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJSZWFjdCIsICJ4IiwgIlJlYWN0RE9NIiwgInJlbmRlciIsICJSZWFjdCIsICJpbXBvcnRfcmVhY3RfZG9tIiwgInJlbmRlciIsICJkYXRhIiwgIlJlYWN0IiwgIlJlYWN0RE9NIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3QiLCAiUmVhY3QiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJSZWFjdCIsICJSZWFjdERPTSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJyZW5kZXIiLCAiZGF0YSIsICJSZWFjdCIsICJSZWFjdERPTSIsICJ2aXNDb2xvcnMiLCAic2VhcmNoVmFsdWUiLCAiUmVhY3QiLCAieCIsICJvcHRpb25zIiwgIlJlYWN0RE9NIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3RfZG9tIiwgIlJlYWN0IiwgIlJlYWN0RE9NIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3QiLCAiUmVhY3QiLCAibiIsICJtYXRjaCIsICJiIiwgIm4yIiwgImltcG9ydF9yZWFjdF9kb20iLCAiZW50aXR5IiwgIlJlYWN0IiwgImtleXMiLCAiZG9tYWlucyIsICJyYW5nZXMiLCAiaXJpIiwgInYiLCAiUmVhY3RET00iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdF9kb20iLCAiUmVhY3QiLCAiUmVhY3RET00iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdF9kb20iLCAiREVGQVVMVF9IQVNfVElUTEUiLCAib250b2xvZ3kiLCAiUmVhY3QiLCAiUmVhY3RET00iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdF9kb20iLCAiUmVhY3QiLCAicGFnZUluZGV4IiwgImVudHJpZXNQZXJQYWdlIiwgInNvcnRGaWVsZCIsICJzb3J0RGlyZWN0aW9uIiwgIlJlYWN0RE9NIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3RfZG9tIiwgIlJlYWN0IiwgIlJlYWN0RE9NIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3QiLCAiUmVhY3QiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJERUZBVUxUX1BBR0VfU0laRV9PUFRJT05TIiwgInJlbmRlciIsICJvcHRpb24iLCAiUmVhY3QiLCAiUmVhY3RET00iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdF9kb20iLCAiREVGQVVMVF9IQVNfVElUTEUiLCAiUmVhY3QiLCAicHJlZGljYXRlcyIsICJSZWFjdERPTSJdCn0K +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0L2Nqcy9yZWFjdC5kZXZlbG9wbWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NjaGVkdWxlci9janMvc2NoZWR1bGVyLmRldmVsb3BtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zY2hlZHVsZXIvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NjaGVkdWxlci9janMvc2NoZWR1bGVyLXRyYWNpbmcuZGV2ZWxvcG1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NjaGVkdWxlci90cmFjaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vY2pzL3JlYWN0LWRvbS5kZXZlbG9wbWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL25vZGVfbW9kdWxlcy9yZWFjdC1pcy9janMvcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvbm9kZV9tb2R1bGVzL3JlYWN0LWlzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9saWIvaGFzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2NoZWNrUHJvcFR5cGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2ZhY3RvcnlXaXRoVHlwZUNoZWNrZXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9ob2lzdC1ub24tcmVhY3Qtc3RhdGljcy9ub2RlX21vZHVsZXMvcmVhY3QtaXMvY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9ob2lzdC1ub24tcmVhY3Qtc3RhdGljcy9ub2RlX21vZHVsZXMvcmVhY3QtaXMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzL2Rpc3QvaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3MuY2pzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvY2hyb21hLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZUNsZWFyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZXEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNzb2NJbmRleE9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZURlbGV0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19saXN0Q2FjaGVHZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlSGFzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZVNldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19MaXN0Q2FjaGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tDbGVhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0RlbGV0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0dldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0hhcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19mcmVlR2xvYmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3Jvb3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU3ltYm9sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFJhd1RhZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19vYmplY3RUb1N0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0VGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNPYmplY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0Z1bmN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NvcmVKc0RhdGEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNNYXNrZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fdG9Tb3VyY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzTmF0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFZhbHVlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldE5hdGl2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19NYXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbmF0aXZlQ3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hDbGVhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoRGVsZXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hHZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaEhhcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoU2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0hhc2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVDbGVhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0tleWFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0TWFwRGF0YS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZURlbGV0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZUdldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZUhhcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZVNldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19NYXBDYWNoZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja1NldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19TdGFjay5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRDYWNoZUFkZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRDYWNoZUhhcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19TZXRDYWNoZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheVNvbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2FjaGVIYXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZXF1YWxBcnJheXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fVWludDhBcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBUb0FycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3NldFRvQXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZXF1YWxCeVRhZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheVB1c2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VHZXRBbGxLZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5RmlsdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvc3R1YkFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFN5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVRpbWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNPYmplY3RMaWtlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc0FyZ3VtZW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJndW1lbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvc3R1YkZhbHNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNCdWZmZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNJbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzTGVuZ3RoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc1R5cGVkQXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVVuYXJ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25vZGVVdGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNUeXBlZEFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5TGlrZUtleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNQcm90b3R5cGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fb3ZlckFyZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19uYXRpdmVLZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VLZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcnJheUxpa2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9rZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldEFsbEtleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZXF1YWxPYmplY3RzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0RhdGFWaWV3LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1Byb21pc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1dlYWtNYXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0VGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc0VxdWFsRGVlcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNFcXVhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzRXF1YWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1N0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQm9vbGVhbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzTnVtYmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNOYU4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL251bWVyYWwvbnVtZXJhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL21lbW9pemUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1N5bWJvbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0tleS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tZW1vaXplQ2FwcGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0cmluZ1RvUGF0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheU1hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVG9TdHJpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC90b1N0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jYXN0UGF0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL190b0tleS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZ2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5RWFjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19kZWZpbmVQcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlQXNzaWduVmFsdWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNzaWduVmFsdWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29weU9iamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlQXNzaWduLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25hdGl2ZUtleXNJbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlS2V5c0luLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gva2V5c0luLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VBc3NpZ25Jbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jbG9uZUJ1ZmZlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3B5QXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29weVN5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0UHJvdG90eXBlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFN5bWJvbHNJbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3B5U3ltYm9sc0luLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldEFsbEtleXNJbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pbml0Q2xvbmVBcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jbG9uZUFycmF5QnVmZmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nsb25lRGF0YVZpZXcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVSZWdFeHAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVTeW1ib2wuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVUeXBlZEFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2luaXRDbG9uZUJ5VGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VDcmVhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faW5pdENsb25lT2JqZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc01hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzTWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc1NldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzU2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VDbG9uZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2xhc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVNsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3BhcmVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVW5zZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1BsYWluT2JqZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2N1c3RvbU9taXRDbG9uZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0ZsYXR0ZW5hYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VGbGF0dGVuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZmxhdHRlbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcHBseS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19vdmVyUmVzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2NvbnN0YW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaWRlbnRpdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVNldFRvU3RyaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3Nob3J0T3V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3NldFRvU3RyaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2ZsYXRSZXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvb21pdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtaXMvY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1pcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVxdWlyZXMtcG9ydC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmdpZnkvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VybC1wYXJzZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtaW5wdXQtYXV0b3NpemUvbGliL0F1dG9zaXplSW5wdXQuanMiLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9BdXRvY29tcGxldGVXaWRnZXQvQXV0b2NvbXBsZXRlV2lkZ2V0LnRzeCIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYmluZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3V0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9BeGlvc0Vycm9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9udWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy90b0Zvcm1EYXRhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9BeGlvc1VSTFNlYXJjaFBhcmFtcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYnVpbGRVUkwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0ludGVyY2VwdG9yTWFuYWdlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2RlZmF1bHRzL3RyYW5zaXRpb25hbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3BsYXRmb3JtL2Jyb3dzZXIvY2xhc3Nlcy9VUkxTZWFyY2hQYXJhbXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9wbGF0Zm9ybS9icm93c2VyL2NsYXNzZXMvRm9ybURhdGEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9wbGF0Zm9ybS9icm93c2VyL2NsYXNzZXMvQmxvYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3BsYXRmb3JtL2Jyb3dzZXIvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9wbGF0Zm9ybS9jb21tb24vdXRpbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9wbGF0Zm9ybS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvdG9VUkxFbmNvZGVkRm9ybS5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvZm9ybURhdGFUb0pTT04uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9kZWZhdWx0cy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvcGFyc2VIZWFkZXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9BeGlvc0hlYWRlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL3RyYW5zZm9ybURhdGEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvaXNDYW5jZWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsZWRFcnJvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvc2V0dGxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9jb29raWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc0Fic29sdXRlVVJMLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9jb21iaW5lVVJMcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvYnVpbGRGdWxsUGF0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNVUkxTYW1lT3JpZ2luLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9wYXJzZVByb3RvY29sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9zcGVlZG9tZXRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2FkYXB0ZXJzL3hoci5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2FkYXB0ZXJzL2FkYXB0ZXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9kaXNwYXRjaFJlcXVlc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL21lcmdlQ29uZmlnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvZW52L2RhdGEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3ZhbGlkYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsVG9rZW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3NwcmVhZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNBeGlvc0Vycm9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9IdHRwU3RhdHVzQ29kZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2F4aW9zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9pbmRleC5qcyIsICIuLi9zcmMvYXBwL3V0aWwudHMiLCAiLi4vc3JjL21vZGVsL1JlaWZpZWQudHMiLCAiLi4vc3JjL21vZGVsL0xpbmtlZEVudGl0aWVzLnRzIiwgIi4uL3NyYy9tb2RlbC9vbHMzLW1vZGVsL09MUzNUaGluZy50cyIsICIuLi9zcmMvbW9kZWwvb2xzMy1tb2RlbC9PTFMzRW50aXR5LnRzIiwgIi4uL3NyYy9tb2RlbC9vbHMzLW1vZGVsL09MUzNDbGFzcy50cyIsICIuLi9zcmMvbW9kZWwvb2xzMy1tb2RlbC9PTFMzUHJvcGVydHkudHMiLCAiLi4vc3JjL21vZGVsL29sczMtbW9kZWwvT0xTM0luZGl2aWR1YWwudHMiLCAiLi4vc3JjL21vZGVsL29sczMtbW9kZWwvT0xTM09udG9sb2d5LnRzIiwgIi4uL3NyYy9tb2RlbC9vbHMzLW1vZGVsL09MUzNPbnRvbG9naWVzLnRzIiwgIi4uL3NyYy9tb2RlbC9vbHM0LW1vZGVsL09MUzRUaGluZy50cyIsICIuLi9zcmMvbW9kZWwvb2xzNC1tb2RlbC9PTFM0RW50aXR5LnRzIiwgIi4uL3NyYy9tb2RlbC9vbHM0LW1vZGVsL09MUzRDbGFzcy50cyIsICIuLi9zcmMvbW9kZWwvb2xzNC1tb2RlbC9PTFM0UHJvcGVydHkudHMiLCAiLi4vc3JjL21vZGVsL29sczQtbW9kZWwvT0xTNEluZGl2aWR1YWwudHMiLCAiLi4vc3JjL21vZGVsL29sczQtbW9kZWwvT0xTNE9udG9sb2d5LnRzIiwgIi4uL3NyYy9tb2RlbC9Nb2RlbFR5cGVDaGVjay50cyIsICIuLi9zcmMvbW9kZWwvTW9kZWxPYmplY3RDcmVhdG9yLnRzIiwgIi4uL3NyYy9hcGkvT2xzQXBpLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9hY2Nlc3NpYmlsaXR5L3NjcmVlbl9yZWFkZXJfbGl2ZS9zY3JlZW5fcmVhZGVyX2xpdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2FjY2Vzc2liaWxpdHkvc2NyZWVuX3JlYWRlcl9vbmx5L3NjcmVlbl9yZWFkZXJfb25seS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vcmVhY3QvZGlzdC9lbW90aW9uLWVsZW1lbnQtNDNjNmZlYTAuYnJvd3Nlci5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3NoZWV0L2Rpc3QvZW1vdGlvbi1zaGVldC5icm93c2VyLmVzbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9FbnVtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zdHlsaXMvc3JjL1V0aWxpdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvVG9rZW5pemVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zdHlsaXMvc3JjL1BhcnNlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9TZXJpYWxpemVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zdHlsaXMvc3JjL01pZGRsZXdhcmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL21lbW9pemUvZGlzdC9lbW90aW9uLW1lbW9pemUuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9jYWNoZS9kaXN0L2Vtb3Rpb24tY2FjaGUuYnJvd3Nlci5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3V0aWxzL2Rpc3QvZW1vdGlvbi11dGlscy5icm93c2VyLmVzbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vaGFzaC9kaXN0L2Vtb3Rpb24taGFzaC5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3VuaXRsZXNzL2Rpc3QvZW1vdGlvbi11bml0bGVzcy5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3NlcmlhbGl6ZS9kaXN0L2Vtb3Rpb24tc2VyaWFsaXplLmJyb3dzZXIuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi91c2UtaW5zZXJ0aW9uLWVmZmVjdC13aXRoLWZhbGxiYWNrcy9kaXN0L2Vtb3Rpb24tdXNlLWluc2VydGlvbi1lZmZlY3Qtd2l0aC1mYWxsYmFja3MuYnJvd3Nlci5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3JlYWN0L2Rpc3QvZW1vdGlvbi1yZWFjdC5icm93c2VyLmVzbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL3RoZW1lL2Nsb25lX2VsZW1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2FjY2Vzc2liaWxpdHkvc2NyZWVuX3JlYWRlcl9vbmx5L3NjcmVlbl9yZWFkZXJfb25seS5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3RhYmJhYmxlL3NyYy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL2tleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9hY2Nlc3NpYmlsaXR5L2Nhc2NhZGluZ19tZW51X2tleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9lc20tYnJvd3Nlci9ybmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9lc20tYnJvd3Nlci9yZWdleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2VzbS1icm93c2VyL3ZhbGlkYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvZXNtLWJyb3dzZXIvc3RyaW5naWZ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvZXNtLWJyb3dzZXIvdjEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9hY2Nlc3NpYmlsaXR5L2h0bWxfaWRfZ2VuZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvYWxpZ25tZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9jb21tb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy90aGVtZXMvYW1zdGVyZGFtL2dsb2JhbF9zdHlsaW5nL3ZhcmlhYmxlcy9fYnJlYWtwb2ludC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL2JyZWFrcG9pbnQvYnJlYWtwb2ludC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL2JyZWFrcG9pbnQvY3VycmVudF9icmVha3BvaW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvdGhlbWUvY29udGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL3RoZW1lL3R5cGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvdGhlbWUvdXRpbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9jb2xvci9pc19jb2xvcl9kYXJrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvY29sb3IvaXNfdmFsaWRfaGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvY29sb3IvZXVpX3BhbGV0dGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvY29sb3IvY29sb3JfcGFsZXR0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL2NvbG9yL21hbmlwdWxhdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL2NvbG9yL2NvbnRyYXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvdGhlbWVzL2Ftc3RlcmRhbS9nbG9iYWxfc3R5bGluZy92YXJpYWJsZXMvX2NvbG9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3RoZW1lcy9hbXN0ZXJkYW0vZ2xvYmFsX3N0eWxpbmcvdmFyaWFibGVzL19hbmltYXRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9nbG9iYWxfc3R5bGluZy9mdW5jdGlvbnMvbG9naWNhbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9nbG9iYWxfc3R5bGluZy9mdW5jdGlvbnMvc2l6ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2dsb2JhbF9zdHlsaW5nL2Z1bmN0aW9ucy90eXBvZ3JhcGh5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvdGhlbWVzL2Ftc3RlcmRhbS9nbG9iYWxfc3R5bGluZy92YXJpYWJsZXMvX3NpemUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy90aGVtZXMvYW1zdGVyZGFtL2dsb2JhbF9zdHlsaW5nL3ZhcmlhYmxlcy9fYm9yZGVycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3RoZW1lcy9hbXN0ZXJkYW0vZ2xvYmFsX3N0eWxpbmcvdmFyaWFibGVzL19sZXZlbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy90aGVtZXMvYW1zdGVyZGFtL2dsb2JhbF9zdHlsaW5nL3ZhcmlhYmxlcy9fdHlwb2dyYXBoeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3RoZW1lcy9hbXN0ZXJkYW0vZ2xvYmFsX3N0eWxpbmcvdmFyaWFibGVzL19zdGF0ZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy90aGVtZXMvYW1zdGVyZGFtL3RoZW1lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvdGhlbWUvaG9va3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy90aGVtZS9wcm92aWRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL3Rocm90dGxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvYnJlYWtwb2ludC9jdXJyZW50X2JyZWFrcG9pbnRfaG9vay5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL2JyZWFrcG9pbnQvdXNlSXNXaXRoaW5CcmVha3BvaW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL2ZpbmRFbGVtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvcHJlZGljYXRlL2NvbW1vbl9wcmVkaWNhdGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvcHJlZGljYXRlL2xvZGFzaF9wcmVkaWNhdGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvZm9ybWF0L2Zvcm1hdF9ib29sZWFuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvZm9ybWF0L2Zvcm1hdF9kYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvZm9ybWF0L2Zvcm1hdF9udW1iZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9mb3JtYXQvZm9ybWF0X3RleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9mb3JtYXQvZm9ybWF0X2F1dG8uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy91cmwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9zZWN1cml0eS9nZXRfc2VjdXJlX3JlbF9mb3JfdGFyZ2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvc29ydC9zb3J0X2RpcmVjdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL29iamVjdHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9zb3J0L2NvbXBhcmF0b3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvcG9wb3Zlci9wb3BvdmVyX3Bvc2l0aW9uaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvdHJhbnNpdGlvbi90cmFuc2l0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvaG9va3MvdXNlQ29tYmluZWRSZWZzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9idXR0b24vYnV0dG9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9idXR0b24vX2J1dHRvbl9jb250ZW50X2RlcHJlY2F0ZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FjY2Vzc2liaWxpdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FnZ3JlZ2F0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYWxlcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FuYWx5emVFdmVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYW5hbHl6ZV9ldmVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYW5ub3RhdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBtX3RyYWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfYWRkX2RhdGEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9hZHZhbmNlZF9zZXR0aW5ncy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2FnZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfYXBtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfYXBwX3NlYXJjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2F1ZGl0YmVhdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2NhbnZhcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2Nhc2VzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfY29kZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2NvbnNvbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9jcm9zc19jbHVzdGVyX3JlcGxpY2F0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfZGFzaGJvYXJkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfZGV2dG9vbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9kaXNjb3Zlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2Vtcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2ZpbGViZWF0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfZmxlZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9naXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9ncmFwaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2dyb2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9oZWFydGJlYXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9pbmRleF9tYW5hZ2VtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfaW5kZXhfcGF0dGVybi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2luZGV4X3JvbGx1cC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2xlbnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9sb2dzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfbWFuYWdlbWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX21ldHJpY2JlYXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9tZXRyaWNzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfbWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9tb25pdG9yaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfbm90ZWJvb2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9wYWNrZXRiZWF0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfcGlwZWxpbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9yZWNlbnRseV92aWV3ZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9yZXBvcnRpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9zYXZlZF9vYmplY3RzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfc2VhcmNoX3Byb2ZpbGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfc2VjdXJpdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9zZWN1cml0eV9hbmFseXRpY3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9zcGFjZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9zcWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF90aW1lbGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX3VwZ3JhZGVfYXNzaXN0YW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfdXB0aW1lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfdXNlcnNfcm9sZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF92aXN1YWxpemUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF93YXRjaGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfd29ya3BsYWNlX3NlYXJjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXJyb3dFbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Fycm93U3RhcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Fycm93X2Rvd24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Fycm93X2xlZnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Fycm93X3JpZ2h0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcnJvd191cC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXN0ZXJpc2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2JlYWtlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYmVsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYmVsbFNsYXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9ib2x0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9ib3hlc19ob3Jpem9udGFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9ib3hlc192ZXJ0aWNhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYnJhbmNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9icmFuY2hVc2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9icm9vbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYnJ1c2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2J1Zy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYnVsbHNleWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2NhbGVuZGFyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jaGVjay5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY2hlY2tJbkNpcmNsZUZpbGxlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY2hlZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Nsb2NrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jbG91ZERyaXp6bGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Nsb3VkU3Rvcm15LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jbG91ZFN1bm55LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jbHVzdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jb2xvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY29tcHV0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY29uc29sZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY29udGFpbmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jb250aW51aXR5QWJvdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2NvbnRpbnVpdHlBYm92ZUJlbG93LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jb250aW51aXR5QmVsb3cuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2NvbnRpbnVpdHlXaXRoaW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2NvbnRyb2xzX2hvcml6b250YWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2NvbnRyb2xzX3ZlcnRpY2FsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jb3B5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jb3B5X2NsaXBib2FyZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY3Jvc3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Nyb3NzSW5BQ2lyY2xlRmlsbGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jcm9zc2hhaXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jdXJyZW5jeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY3V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9kYXRhYmFzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZGVza3RvcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZG9jdW1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2RvY3VtZW50RWRpdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZG9jdW1lbnRhdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZG9jdW1lbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9kb3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2RvdWJsZUFycm93TGVmdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZG91YmxlQXJyb3dSaWdodC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZG93bmxvYWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JEaXN0cmlidXRlVmVydGljYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvckl0ZW1BbGlnbkJvdHRvbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9ySXRlbUFsaWduQ2VudGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25MZWZ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25NaWRkbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvckl0ZW1BbGlnblJpZ2h0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25Ub3AuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvclBvc2l0aW9uQm90dG9tTGVmdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yUG9zaXRpb25Ub3BMZWZ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JQb3NpdGlvblRvcFJpZ2h0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JfYWxpZ25fY2VudGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JfYWxpZ25fbGVmdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yX2FsaWduX3JpZ2h0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JfYm9sZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yX2NoZWNrbGlzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yX2NvZGVfYmxvY2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvcl9jb21tZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JfaGVhZGluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yX2l0YWxpYy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yX2xpbmsuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvcl9vcmRlcmVkX2xpc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvcl9yZWRvLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3Jfc3RyaWtlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JfdGFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvcl91bmRlcmxpbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvcl91bmRvLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JfdW5vcmRlcmVkX2xpc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VtYWlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lbXB0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZXFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lcmFzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2V4aXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2V4cGFuZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZXhwYW5kTWluaS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZXhwb3J0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9leWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2V5ZV9jbG9zZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2ZhY2VfaGFwcHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2ZhY2VfbmV1dHJhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZmFjZV9zYWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2ZpbHRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZmxhZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZm9sZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZm9sZGVyX2NoZWNrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9mb2xkZXJfY2xvc2VkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9mb2xkZXJfZXhjbGFtYXRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2ZvbGRlcl9vcGVuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9mcmFtZU5leHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2ZyYW1lUHJldmlvdXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Z1bGxTY3JlZW5FeGl0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9mdWxsX3NjcmVlbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZnVuY3Rpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2dlYXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2dsYXNzZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2dsb2JlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9ncmFiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9ncmFiX2hvcml6b250YWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2dyaWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2hlYXJ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9oZWF0bWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9oZWxwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9ob21lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9pSW5DaXJjbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2ltYWdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9pbXBvcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2luZGV4X2Nsb3NlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9pbmRleF9lZGl0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9pbmRleF9mbHVzaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvaW5kZXhfbWFwcGluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvaW5kZXhfb3Blbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvaW5kZXhfcnVudGltZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvaW5kZXhfc2V0dGluZ3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2lucHV0T3V0cHV0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9pbnNwZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9pbnZlcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2lwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9rZXlib2FyZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMva3FsX2ZpZWxkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9rcWxfZnVuY3Rpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2txbF9vcGVyYW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9rcWxfc2VsZWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2txbF92YWx1ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMva3ViZXJuZXRlc05vZGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2t1YmVybmV0ZXNQb2QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xheWVycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbGV0dGVyaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9saW5lRGFzaGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9saW5lRG90dGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9saW5lU29saWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xpbmsuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xpc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xpc3RfYWRkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2NrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2NrT3Blbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19hZXJvc3Bpa2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fYXBhY2hlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2FwcF9zZWFyY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fYXdzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2F3c19tb25vLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2F6dXJlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2F6dXJlX21vbm8uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fYmVhdHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fYnVzaW5lc3NfYW5hbHl0aWNzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2NlcGguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fY2xvdWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fY2xvdWRfZWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2NvZGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fY29kZXNhbmRib3guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fY291Y2hiYXNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2RvY2tlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19kcm9wd2l6YXJkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2VsYXN0aWMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fZWxhc3RpY19zdGFjay5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19lbGFzdGljc2VhcmNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2VudGVycHJpc2Vfc2VhcmNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2V0Y2QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fZ2NwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2djcF9tb25vLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2dpdGh1Yi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19nbWFpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19nb2xhbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fZ29vZ2xlX2cuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29faGFwcm94eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19pYm0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29faWJtX21vbm8uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fa2Fma2EuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fa2liYW5hLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2t1YmVybmV0ZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fbG9nZ2luZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19sb2dzdGFzaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19tYXBzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX21lbWNhY2hlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19tZXRyaWNzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX21vbmdvZGIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fbXlzcWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fbmdpbnguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fb2JzZXJ2YWJpbGl0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19vc3F1ZXJ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX3BocC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19wb3N0Z3Jlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19wcm9tZXRoZXVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX3JhYmJpdG1xLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX3JlZGlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX3NlY3VyaXR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX3NpdGVfc2VhcmNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX3NrZXRjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19zbGFjay5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb191cHRpbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fd2ViaG9vay5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb193aW5kb3dzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX3dvcmtwbGFjZV9zZWFyY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ3N0YXNoX2ZpbHRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nc3Rhc2hfaWYuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ3N0YXNoX2lucHV0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dzdGFzaF9vdXRwdXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ3N0YXNoX3F1ZXVlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tYWduZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21hZ25pZnlXaXRoRXhjbGFtYXRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21hZ25pZnlXaXRoTWludXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21hZ25pZnlXaXRoUGx1cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWFwX21hcmtlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWVtb3J5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tZW51LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tZW51RG93bi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWVudUxlZnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21lbnVSaWdodC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWVudVVwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tZXJnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWluaW1pemUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21pbnVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9taW51c19pbl9jaXJjbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21pbnVzX2luX2NpcmNsZV9maWxsZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21sX2NsYXNzaWZpY2F0aW9uX2pvYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWxfY3JlYXRlX2FkdmFuY2VkX2pvYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWxfY3JlYXRlX211bHRpX21ldHJpY19qb2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21sX2NyZWF0ZV9wb3B1bGF0aW9uX2pvYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWxfY3JlYXRlX3NpbmdsZV9tZXRyaWNfam9iLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tbF9kYXRhX3Zpc3VhbGl6ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21sX291dGxpZXJfZGV0ZWN0aW9uX2pvYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWxfcmVncmVzc2lvbl9qb2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21vYmlsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbW9vbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbmFtZXNwYWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9uZXN0ZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL25vZGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL251bWJlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvb2ZmbGluZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvb25saW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9wYWNrYWdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9wYWdlU2VsZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9wYWdlc1NlbGVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcGFpbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3BhcGVyX2NsaXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3BhcnRpYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3BhdXNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9wYXltZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9wZW5jaWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3BlcmNlbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Bpbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcGluX2ZpbGxlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcGxheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcGxheUZpbGxlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcGx1cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcGx1c19pbl9jaXJjbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3BsdXNfaW5fY2lyY2xlX2ZpbGxlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcG9wb3V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9wdXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9xdWVzdGlvbl9pbl9jaXJjbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3F1b3RlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9yZWZyZXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9yZXBvcnRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcmV0dXJuX2tleS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc2F2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc2NhbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3NlYXJjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc2VjdXJpdHlTaWduYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3NlY3VyaXR5U2lnbmFsRGV0ZWN0ZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3NlY3VyaXR5U2lnbmFsUmVzb2x2ZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Nlc3Npb25WaWV3ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3NoYXJkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zaGFyZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc25vd2ZsYWtlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zb3J0TGVmdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc29ydFJpZ2h0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zb3J0X2Rvd24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3NvcnRfdXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3NvcnRhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zdGFyUGx1c0VtcHR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zdGFyUGx1c0ZpbGxlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc3Rhcl9lbXB0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc3Rhcl9lbXB0eV9zcGFjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc3Rhcl9maWxsZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3N0YXJfZmlsbGVkX3NwYWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zdGFyX21pbnVzX2VtcHR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zdGFyX21pbnVzX2ZpbGxlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc3RhdHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3N0b3AuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3N0b3BfZmlsbGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zdG9wX3NsYXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zdG9yYWdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zdHJpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3N1Ym1vZHVsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc3VuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zd2F0Y2hfaW5wdXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3N5bWxpbmsuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3RhYmxlT2ZDb250ZW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdGFibGVfZGVuc2l0eV9jb21wYWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90YWJsZV9kZW5zaXR5X2V4cGFuZGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90YWJsZV9kZW5zaXR5X25vcm1hbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90ZWFyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90ZW1wZXJhdHVyZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdGltZVJlZnJlc2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3RpbWVsaW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90aW1lc2xpZGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbkFsaWFzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbkFubm90YXRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuQXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuQmluYXJ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbkJvb2xlYW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuQ2xhc3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuQ29tcGxldGlvblN1Z2dlc3Rlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5Db25zdGFudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5EYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbkRlbnNlVmVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbkVsZW1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuRW51bS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5FbnVtTWVtYmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbkV2ZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbkV4Y2VwdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5GaWVsZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5GaWxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbkZsYXR0ZW5lZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5GdW5jdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5HZW8uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuSGlzdG9ncmFtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbklQLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbkludGVyZmFjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5Kb2luLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbktleS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5LZXl3b3JkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbk1ldGhvZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5NZXRyaWNDb3VudGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbk1ldHJpY0dhdWdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbk1vZHVsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5OYW1lc3BhY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuTmVzdGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbk51bGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuTnVtYmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbk9iamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5PcGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5QYWNrYWdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlblBhcmFtZXRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5QZXJjb2xhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlblByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlblJhbmdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlblJhbmtGZWF0dXJlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlblJhbmtGZWF0dXJlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5SZXBvLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlblNlYXJjaFR5cGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuU2hhcGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuU3RyaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlblN0cnVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5TeW1ib2wuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuVGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlblRleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuVG9rZW5Db3VudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5WYXJpYWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdHJhaW5pbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3RyYXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy91bmZvbGQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3VubGluay5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdXNlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdXNlckF2YXRhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdXNlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3ZlY3Rvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdmlkZW9QbGF5ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Zpc19hcmVhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfYXJlYV9zdGFja2VkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfYmFyX2hvcml6b250YWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Zpc19iYXJfaG9yaXpvbnRhbF9zdGFja2VkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfYmFyX3ZlcnRpY2FsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfYmFyX3ZlcnRpY2FsX3N0YWNrZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Zpc19nYXVnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdmlzX2dvYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Zpc19saW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfbWFwX2Nvb3JkaW5hdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Zpc19tYXBfcmVnaW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfbWV0cmljLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfcGllLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfdGFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Zpc190YWdfY2xvdWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Zpc190ZXh0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfdGltZWxpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Zpc192ZWdhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfdmlzdWFsX2J1aWxkZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3dvcmRXcmFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy93b3JkV3JhcERpc2FibGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy93cmVuY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vaWNvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9pY29uX21hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL3JlYWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL25hbWVkX2NvbG9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2dsb2JhbF9zdHlsaW5nL3Jlc2V0L2dsb2JhbF9zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9nbG9iYWxfc3R5bGluZy9taXhpbnMvX2NvbG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvZ2xvYmFsX3N0eWxpbmcvbWl4aW5zL19oZWxwZXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvZ2xvYmFsX3N0eWxpbmcvbWl4aW5zL19wYWRkaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvZ2xvYmFsX3N0eWxpbmcvbWl4aW5zL19zdGF0ZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9nbG9iYWxfc3R5bGluZy9taXhpbnMvX3R5cG9ncmFwaHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9nbG9iYWxfc3R5bGluZy92YXJpYWJsZXMvYW5pbWF0aW9ucy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2dsb2JhbF9zdHlsaW5nL3Jlc2V0L3Jlc2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2ljb24uc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pMThuL2kxOG4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2NvbnRleHQvY29udGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaTE4bi9pMThuX3V0aWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2xvYWRpbmcvX2xvYWRpbmdfc3RyaW5ncy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvbG9hZGluZy9sb2FkaW5nX3NwaW5uZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2xvYWRpbmcvbG9hZGluZ19zcGlubmVyLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL3NlY3VyaXR5L2hyZWZfdmFsaWRhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9vYnNlcnZlci9yZXNpemVfb2JzZXJ2ZXIvcmVzaXplX29ic2VydmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9vYnNlcnZlci9vYnNlcnZlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGV4dC90ZXh0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9saW5rL2xpbmsuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90aXRsZS90aXRsZS5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RleHQvdGV4dC5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RleHQvdGV4dF9jb2xvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGV4dC90ZXh0X2NvbG9yLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGV4dC90ZXh0X2FsaWduLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90ZXh0L3RleHRfYWxpZ24uc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9idXR0b24vYnV0dG9uX2VtcHR5L2J1dHRvbl9lbXB0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYnV0dG9uL2J1dHRvbl9pY29uL2J1dHRvbl9pY29uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pbm5lcl90ZXh0L2lubmVyX3RleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXZpcnR1YWxpemVkLWF1dG8tc2l6ZXIvZGlzdC9yZWFjdC12aXJ0dWFsaXplZC1hdXRvLXNpemVyLmVzbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYXV0b19zaXplci9hdXRvX3NpemVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9iYWRnZS9iYWRnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvY29sb3JfcGlja2VyL3V0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9iYWRnZS9iZXRhX2JhZGdlL2JldGFfYmFkZ2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3Rvb2xfdGlwL3Rvb2xfdGlwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9wb3J0YWwvcG9ydGFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90b29sX3RpcC90b29sX3RpcF9wb3BvdmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90b29sX3RpcC9pY29uX3RpcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3RoZW1lcy9hbXN0ZXJkYW0vZ2xvYmFsX3N0eWxpbmcvZnVuY3Rpb25zL3NoYWRvd3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy90aGVtZXMvYW1zdGVyZGFtL2dsb2JhbF9zdHlsaW5nL21peGlucy9zaGFkb3cuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2xpbmsvbGluay5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvcG9wb3Zlci9pbnB1dF9wb3BvdmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9mb2N1c190cmFwL2ZvY3VzX3RyYXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLW9uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYubWpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1mb2N1cy1vbi9kaXN0L2VzMjAxNS9Db21iaW5hdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtb24vZGlzdC9lczIwMTUvVUkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLW9uL25vZGVfbW9kdWxlcy9yZWFjdC1yZW1vdmUtc2Nyb2xsL2Rpc3QvZXMyMDE1L1VJLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1yZW1vdmUtc2Nyb2xsLWJhci9kaXN0L2VzMjAxNS9jb25zdGFudHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VzZS1jYWxsYmFjay1yZWYvZGlzdC9lczIwMTUvYXNzaWduUmVmLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91c2UtY2FsbGJhY2stcmVmL2Rpc3QvZXMyMDE1L3VzZVJlZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdXNlLWNhbGxiYWNrLXJlZi9kaXN0L2VzMjAxNS91c2VNZXJnZVJlZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdXNlLXNpZGVjYXIvbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5tanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VzZS1zaWRlY2FyL2Rpc3QvZXMyMDE1L21lZGl1bS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdXNlLXNpZGVjYXIvZGlzdC9lczIwMTUvZXhwb3J0cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtb24vbm9kZV9tb2R1bGVzL3JlYWN0LXJlbW92ZS1zY3JvbGwvZGlzdC9lczIwMTUvbWVkaXVtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L0xvY2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvY29uc3RhbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L0ZvY3VzR3VhcmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLWxvY2svZGlzdC9lczIwMTUvbWVkaXVtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3Njb3BlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3V0aWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLWxvY2svZGlzdC9lczIwMTUvVUkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLW9uL2Rpc3QvZXMyMDE1L21lZGl1bS5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtbG9jay9kaXN0L2VzMjAxNS9UcmFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zZXRQcm90b3R5cGVPZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b1ByaW1pdGl2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Qcm9wZXJ0eUtleS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWNsaWVudHNpZGUtZWZmZWN0L2xpYi9pbmRleC5lcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS91dGlscy9hcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS91dGlscy9pcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS91dGlscy90YWJPcmRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS91dGlscy90YWJiYWJsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvdXRpbHMvdGFiVXRpbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvdXRpbHMvRE9NdXRpbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvdXRpbHMvYWxsLWFmZmVjdGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3V0aWxzL3NhZmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvdXRpbHMvZ2V0QWN0aXZlRWxlbWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS9mb2N1c0luc2lkZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS9mb2N1c0lzSGlkZGVuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3V0aWxzL2NvcnJlY3RGb2N1cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS91dGlscy9maXJzdEZvY3VzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3NvbHZlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS91dGlscy9hdXRvLWZvY3VzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3V0aWxzL3BhcmVudGluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS9mb2N1c1NvbHZlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS9mb2N1c2FibGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L2NvbW1hbmRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L21vdmVGb2N1c0luc2lkZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS9yZXR1cm4tZm9jdXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvc2libGluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtbG9jay9kaXN0L2VzMjAxNS9zaWRlY2FyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1mb2N1cy1vbi9ub2RlX21vZHVsZXMvcmVhY3QtcmVtb3ZlLXNjcm9sbC9kaXN0L2VzMjAxNS9TaWRlRWZmZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1yZW1vdmUtc2Nyb2xsLWJhci9kaXN0L2VzMjAxNS9jb21wb25lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXN0eWxlLXNpbmdsZXRvbi9kaXN0L2VzMjAxNS9ob29rLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9nZXQtbm9uY2UvZGlzdC9lczIwMTUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXN0eWxlLXNpbmdsZXRvbi9kaXN0L2VzMjAxNS9zaW5nbGV0b24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXN0eWxlLXNpbmdsZXRvbi9kaXN0L2VzMjAxNS9jb21wb25lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXJlbW92ZS1zY3JvbGwtYmFyL2Rpc3QvZXMyMDE1L3V0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1mb2N1cy1vbi9ub2RlX21vZHVsZXMvcmVhY3QtcmVtb3ZlLXNjcm9sbC9kaXN0L2VzMjAxNS9hZ2dyZXNpdmVDYXB0dXJlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1mb2N1cy1vbi9ub2RlX21vZHVsZXMvcmVhY3QtcmVtb3ZlLXNjcm9sbC9kaXN0L2VzMjAxNS9oYW5kbGVTY3JvbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLW9uL25vZGVfbW9kdWxlcy9yZWFjdC1yZW1vdmUtc2Nyb2xsL2Rpc3QvZXMyMDE1L3NpZGVjYXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLW9uL2Rpc3QvZXMyMDE1L0VmZmVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXJpYS1oaWRkZW4vZGlzdC9lczIwMTUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLW9uL2Rpc3QvZXMyMDE1L0ludGVyYWN0aXZpdHlEaXNhYmxlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtb24vZGlzdC9lczIwMTUvc2lkZWNhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvcG9wb3Zlci9wb3BvdmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9vYnNlcnZlci9tdXRhdGlvbl9vYnNlcnZlci9tdXRhdGlvbl9vYnNlcnZlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvb3V0c2lkZV9jbGlja19kZXRlY3Rvci9vdXRzaWRlX2NsaWNrX2RldGVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9wb3BvdmVyL3BvcG92ZXJfYXJyb3cvX3BvcG92ZXJfYXJyb3cuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3BvcG92ZXIvcG9wb3Zlcl9hcnJvdy9fcG9wb3Zlcl9hcnJvdy5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3BvcG92ZXIvcG9wb3Zlci5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3BvcG92ZXIvcG9wb3Zlcl9wYW5lbC9fcG9wb3Zlcl9wYW5lbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvcGFuZWwvcGFuZWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3BhbmVsL3BhbmVsLnN0eWxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9wb3BvdmVyL3BvcG92ZXJfcGFuZWwvX3BvcG92ZXJfcGFuZWwuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9mb3JtL2Zvcm0uc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90aXRsZS90aXRsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvY2FyZC9jYXJkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9jYXJkL2NhcmRfc2VsZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9mb3JtL2NoZWNrYm94L2NoZWNrYm94LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9mbGV4L2ZsZXhfZ3JvdXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ZsZXgvZmxleF9pdGVtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9mb3JtL2Zvcm1fY29udHJvbF9sYXlvdXQvZm9ybV9jb250cm9sX2xheW91dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZm9ybS9mb3JtX2NvbnRyb2xfbGF5b3V0L2Zvcm1fY29udHJvbF9sYXlvdXRfaWNvbnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Zvcm0vZm9ybV9jb250cm9sX2xheW91dC9mb3JtX2NvbnRyb2xfbGF5b3V0X2NsZWFyX2J1dHRvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZm9ybS9mb3JtX2NvbnRyb2xfbGF5b3V0L2Zvcm1fY29udHJvbF9sYXlvdXRfY3VzdG9tX2ljb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Zvcm0vZm9ybV9sYWJlbC9mb3JtX2xhYmVsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9mb3JtL3ZhbGlkYXRhYmxlX2NvbnRyb2wvdmFsaWRhdGFibGVfY29udHJvbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZm9ybS9mb3JtX2NvbnRyb2xfbGF5b3V0L19udW1faWNvbnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Zvcm0vZmllbGRfc2VhcmNoL2ZpZWxkX3NlYXJjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL2Jyb3dzZXIvYnJvd3Nlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZm9ybS9mb3JtX2Vycm9yX3RleHQvZm9ybV9lcnJvcl90ZXh0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9mb3JtL2Zvcm1faGVscF90ZXh0L2Zvcm1faGVscF90ZXh0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9mb3JtL2Zvcm1fcm93L2Zvcm1fcm93LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9jb250ZXh0X21lbnUvY29udGV4dF9tZW51X3BhbmVsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9jb250ZXh0X21lbnUvY29udGV4dF9tZW51X2l0ZW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2hvcml6b250YWxfcnVsZS9ob3Jpem9udGFsX3J1bGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2hvcml6b250YWxfcnVsZS9ob3Jpem9udGFsX3J1bGUuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9mb3JtL3N3aXRjaC9zd2l0Y2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbWVtb2l6ZS1vbmUvZGlzdC9tZW1vaXplLW9uZS5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXdpbmRvdy9zcmMvdGltZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXdpbmRvdy9zcmMvZG9tSGVscGVycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3Qtd2luZG93L3NyYy9jcmVhdGVHcmlkQ29tcG9uZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC13aW5kb3cvc3JjL1ZhcmlhYmxlU2l6ZUdyaWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXdpbmRvdy9zcmMvY3JlYXRlTGlzdENvbXBvbmVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3Qtd2luZG93L3NyYy9WYXJpYWJsZVNpemVMaXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC13aW5kb3cvc3JjL0ZpeGVkU2l6ZUdyaWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXdpbmRvdy9zcmMvRml4ZWRTaXplTGlzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3Qtd2luZG93L3NyYy9zaGFsbG93RGlmZmVycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3Qtd2luZG93L3NyYy9hcmVFcXVhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3Qtd2luZG93L3NyYy9zaG91bGRDb21wb25lbnRVcGRhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3NwYWNlci9zcGFjZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3NwYWNlci9zcGFjZXIuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9jb21ib19ib3gvY29tYm9fYm94LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9jb21ib19ib3gvY29tYm9fYm94X29wdGlvbnNfbGlzdC9jb21ib19ib3hfb3B0aW9uc19saXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9oaWdobGlnaHQvaGlnaGxpZ2h0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9tYXJrL21hcmsuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL21hcmsvbWFyay5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2NvbWJvX2JveC9jb21ib19ib3hfb3B0aW9uc19saXN0L2NvbWJvX2JveF90aXRsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZmlsdGVyX2dyb3VwL2ZpbHRlcl9zZWxlY3RfaXRlbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvY29tYm9fYm94L21hdGNoaW5nX29wdGlvbnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2NvbWJvX2JveC9jb21ib19ib3hfaW5wdXQvY29tYm9fYm94X2lucHV0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9jb21ib19ib3gvY29tYm9fYm94X2lucHV0L2NvbWJvX2JveF9waWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90YWJsZS90YWJsZV9wYWdpbmF0aW9uL3RhYmxlX3BhZ2luYXRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3BhZ2luYXRpb24vcGFnaW5hdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvcGFnaW5hdGlvbi9wYWdpbmF0aW9uX2J1dHRvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvcGFnaW5hdGlvbi9wYWdpbmF0aW9uX2J1dHRvbl9hcnJvdy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFicy90YWIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYnMvdGFicy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFicy90YWJiZWRfY29udGVudC90YWJiZWRfY29udGVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZGVsYXlfcmVuZGVyL2RlbGF5X3JlbmRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaGVhbHRoL2hlYWx0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaGVhbHRoL2hlYWx0aC5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3Byb3ZpZGVyL3Byb3ZpZGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvZ2xvYmFsX3N0eWxpbmcvdXRpbGl0eS91dGlsaXR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9wcm92aWRlci9jYWNoZS9jYWNoZV9wcm92aWRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdHJlZV92aWV3L3RyZWVfdmlldy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvc2VsZWN0YWJsZS9zZWxlY3RhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9zZWxlY3RhYmxlL3NlbGVjdGFibGVfc2VhcmNoL3NlbGVjdGFibGVfc2VhcmNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9zZWxlY3RhYmxlL21hdGNoaW5nX29wdGlvbnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3NlbGVjdGFibGUvc2VsZWN0YWJsZV9tZXNzYWdlL3NlbGVjdGFibGVfbWVzc2FnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvc2VsZWN0YWJsZS9zZWxlY3RhYmxlX2xpc3Qvc2VsZWN0YWJsZV9saXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9zZWxlY3RhYmxlL3NlbGVjdGFibGVfbGlzdC9zZWxlY3RhYmxlX2xpc3RfaXRlbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvc3VnZ2VzdC9zdWdnZXN0X2l0ZW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3N1Z2dlc3Qvc3VnZ2VzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFibGUvdGFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYmxlL3RhYmxlX2JvZHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYmxlL3RhYmxlX2Zvb3Rlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFibGUvdGFibGVfZm9vdGVyX2NlbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYmxlL3V0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90YWJsZS90YWJsZV9oZWFkZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYmxlL3RhYmxlX2hlYWRlcl9jZWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90YWJsZS90YWJsZV9oZWFkZXJfY2VsbF9jaGVja2JveC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFibGUvbW9iaWxlL3RhYmxlX2hlYWRlcl9tb2JpbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYmxlL21vYmlsZS90YWJsZV9zb3J0X21vYmlsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFibGUvbW9iaWxlL3RhYmxlX3NvcnRfbW9iaWxlX2l0ZW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYmxlL3RhYmxlX3Jvdy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFibGUvdGFibGVfcm93X2NlbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYmxlL3RhYmxlX3Jvd19jZWxsX2NoZWNrYm94LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9iYXNpY190YWJsZS9iYXNpY190YWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYmFzaWNfdGFibGUvY29sbGFwc2VkX2l0ZW1fYWN0aW9ucy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYmFzaWNfdGFibGUvZXhwYW5kZWRfaXRlbV9hY3Rpb25zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9iYXNpY190YWJsZS9kZWZhdWx0X2l0ZW1fYWN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9iYXNpY190YWJsZS9jdXN0b21faXRlbV9hY3Rpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Jhc2ljX3RhYmxlL2FjdGlvbl90eXBlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYmFzaWNfdGFibGUvcGFnaW5hdGlvbl9iYXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvc3Vic2NyaWJhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9jb3JlL3V0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9jb3JlL2ZvY3VzTWFuYWdlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS9vbmxpbmVNYW5hZ2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9jb3JlL3JldHJ5ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvbm90aWZ5TWFuYWdlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS9sb2dnZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvcXVlcnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvcXVlcnlDYWNoZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS9tdXRhdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS9tdXRhdGlvbkNhY2hlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9jb3JlL2luZmluaXRlUXVlcnlCZWhhdmlvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS9xdWVyeUNsaWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS9xdWVyeU9ic2VydmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9yZWFjdC9yZWFjdEJhdGNoZWRVcGRhdGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9yZWFjdC9zZXRCYXRjaFVwZGF0ZXNGbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvcmVhY3QvbG9nZ2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9yZWFjdC9zZXRMb2dnZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL3JlYWN0L1F1ZXJ5Q2xpZW50UHJvdmlkZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL3JlYWN0L1F1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9yZWFjdC91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvcmVhY3QvdXNlQmFzZVF1ZXJ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9yZWFjdC91c2VRdWVyeS5qcyIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L0Rlc2NyaXB0aW9uV2lkZ2V0L0Rlc2NyaXB0aW9uV2lkZ2V0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L0Rlc2NyaXB0aW9uV2lkZ2V0L0Rlc2NyaXB0aW9uUHJlc2VudGF0aW9uLnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L0lyaVdpZGdldC9JcmlXaWRnZXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvTWV0YWRhdGFXaWRnZXQvQnJlYWRjcnVtYldpZGdldC9CcmVhZGNydW1iV2lkZ2V0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L0JyZWFkY3J1bWJXaWRnZXQvQnJlYWRjcnVtYlByZXNlbnRhdGlvbi50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9NZXRhZGF0YVdpZGdldC9UYWJXaWRnZXQvQWx0ZXJuYXRpdmVOYW1lVGFiV2lkZ2V0L0FsdGVybmF0aXZlTmFtZVRhYldpZGdldC50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9NZXRhZGF0YVdpZGdldC9UYWJXaWRnZXQvQWx0ZXJuYXRpdmVOYW1lVGFiV2lkZ2V0L0FsdGVybmF0aXZlTmFtZVRhYlByZXNlbnRhdGlvbi50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9NZXRhZGF0YVdpZGdldC9UYWJXaWRnZXQvQ3Jvc3NSZWZXaWRnZXQvQ3Jvc3NSZWZUYWJXaWRnZXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvTWV0YWRhdGFXaWRnZXQvVGFiV2lkZ2V0L0Nyb3NzUmVmV2lkZ2V0L0Nyb3NzUmVmVGFiUHJlc2VudGF0aW9uLnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L1RhYldpZGdldC9IaWVyYXJjaHlXaWRnZXQvSGllcmFyY2h5V2lkZ2V0LnRzeCIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvb2JqZWN0LWFzc2lnbi9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QvY2pzL3JlYWN0LnByb2R1Y3Rpb24ubWluLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvc2NoZWR1bGVyL2Nqcy9zY2hlZHVsZXIucHJvZHVjdGlvbi5taW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3NjaGVkdWxlci9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2Nqcy9yZWFjdC1kb20ucHJvZHVjdGlvbi5taW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUvY2pzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlLXNoaW0ucHJvZHVjdGlvbi5taW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlL3NoaW0vaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlL2Nqcy91c2Utc3luYy1leHRlcm5hbC1zdG9yZS1zaGltL3dpdGgtc2VsZWN0b3IucHJvZHVjdGlvbi5taW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlL3NoaW0vd2l0aC1zZWxlY3Rvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3Mvbm9kZV9tb2R1bGVzL3JlYWN0LWlzL2Nqcy9yZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3Mvbm9kZV9tb2R1bGVzL3JlYWN0LWlzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9ob2lzdC1ub24tcmVhY3Qtc3RhdGljcy9kaXN0L2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzLmNqcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QtaXMvY2pzL3JlYWN0LWlzLnByb2R1Y3Rpb24ubWluLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC1pcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvbXVsdGltYXAvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BlbW90aW9uL3NoZWV0L2Rpc3QvZW1vdGlvbi1zaGVldC5icm93c2VyLmVzbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9FbnVtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9zdHlsaXMvc3JjL1V0aWxpdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvVG9rZW5pemVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9zdHlsaXMvc3JjL1BhcnNlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9QcmVmaXhlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9TZXJpYWxpemVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9zdHlsaXMvc3JjL01pZGRsZXdhcmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3N0eWxpcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQGVtb3Rpb24vd2Vhay1tZW1vaXplL2Rpc3QvZW1vdGlvbi13ZWFrLW1lbW9pemUuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AZW1vdGlvbi9tZW1vaXplL2Rpc3QvZW1vdGlvbi1tZW1vaXplLmVzbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQGVtb3Rpb24vY2FjaGUvZGlzdC9lbW90aW9uLWNhY2hlLmJyb3dzZXIuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AZW1vdGlvbi9yZWFjdC9faXNvbGF0ZWQtaG5ycy9kaXN0L2Vtb3Rpb24tcmVhY3QtX2lzb2xhdGVkLWhucnMuYnJvd3Nlci5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BlbW90aW9uL3V0aWxzL2Rpc3QvZW1vdGlvbi11dGlscy5icm93c2VyLmVzbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQGVtb3Rpb24vaGFzaC9kaXN0L2Vtb3Rpb24taGFzaC5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BlbW90aW9uL3VuaXRsZXNzL2Rpc3QvZW1vdGlvbi11bml0bGVzcy5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BlbW90aW9uL3NlcmlhbGl6ZS9kaXN0L2Vtb3Rpb24tc2VyaWFsaXplLmJyb3dzZXIuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AZW1vdGlvbi91c2UtaW5zZXJ0aW9uLWVmZmVjdC13aXRoLWZhbGxiYWNrcy9kaXN0L2Vtb3Rpb24tdXNlLWluc2VydGlvbi1lZmZlY3Qtd2l0aC1mYWxsYmFja3MuYnJvd3Nlci5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BlbW90aW9uL3JlYWN0L2Rpc3QvZW1vdGlvbi1lbGVtZW50LTQzYzZmZWEwLmJyb3dzZXIuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AZW1vdGlvbi9yZWFjdC9kaXN0L2Vtb3Rpb24tcmVhY3QuYnJvd3Nlci5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL25vZGUvZm9ybWF0TXVpRXJyb3JNZXNzYWdlL2Zvcm1hdE11aUVycm9yTWVzc2FnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS91dGlscy9ub2RlL2Zvcm1hdE11aUVycm9yTWVzc2FnZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQGVtb3Rpb24vaXMtcHJvcC12YWxpZC9kaXN0L2Vtb3Rpb24taXMtcHJvcC12YWxpZC5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BlbW90aW9uL3N0eWxlZC9iYXNlL2Rpc3QvZW1vdGlvbi1zdHlsZWQtYmFzZS5icm93c2VyLmVzbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQGVtb3Rpb24vc3R5bGVkL2Rpc3QvZW1vdGlvbi1zdHlsZWQuYnJvd3Nlci5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QvY2pzL3JlYWN0LWpzeC1ydW50aW1lLnByb2R1Y3Rpb24ubWluLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC9qc3gtcnVudGltZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zdHlsZWQtZW5naW5lL25vZGUvU3R5bGVkRW5naW5lUHJvdmlkZXIvU3R5bGVkRW5naW5lUHJvdmlkZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3R5bGVkLWVuZ2luZS9ub2RlL1N0eWxlZEVuZ2luZVByb3ZpZGVyL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N0eWxlZC1lbmdpbmUvbm9kZS9HbG9iYWxTdHlsZXMvR2xvYmFsU3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N0eWxlZC1lbmdpbmUvbm9kZS9HbG9iYWxTdHlsZXMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3R5bGVkLWVuZ2luZS9ub2RlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2V4dGVuZHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvbm9kZS9kZWVwbWVyZ2UvZGVlcG1lcmdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL25vZGUvZGVlcG1lcmdlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL25vZGUvY2FwaXRhbGl6ZS9jYXBpdGFsaXplLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL25vZGUvY2FwaXRhbGl6ZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS91dGlscy9ub2RlL2dldERpc3BsYXlOYW1lL2dldERpc3BsYXlOYW1lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL25vZGUvZ2V0RGlzcGxheU5hbWUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvbm9kZS9jbGFtcC9jbGFtcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS91dGlscy9ub2RlL2NsYW1wL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9tZXJnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vcmVzcG9uc2l2ZVByb3BUeXBlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9icmVha3BvaW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vc3R5bGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL21lbW9pemUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL3NwYWNpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2NvbXBvc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2JvcmRlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2Nzc0dyaWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL3BhbGV0dGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL3NpemluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vc3R5bGVGdW5jdGlvblN4L2RlZmF1bHRTeENvbmZpZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vc3R5bGVGdW5jdGlvblN4L3N0eWxlRnVuY3Rpb25TeC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9zdHlsZUZ1bmN0aW9uU3gvZXh0ZW5kU3hQcm9wLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9zdHlsZUZ1bmN0aW9uU3gvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2NyZWF0ZVRoZW1lL2NyZWF0ZUJyZWFrcG9pbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9jcmVhdGVUaGVtZS9zaGFwZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vY3JlYXRlVGhlbWUvY3JlYXRlU3BhY2luZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vY3JlYXRlVGhlbWUvYXBwbHlTdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2NyZWF0ZVRoZW1lL2NyZWF0ZVRoZW1lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9jcmVhdGVUaGVtZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vY29sb3JNYW5pcHVsYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vY3JlYXRlU3R5bGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L3NyYy93aWRnZXRzL0VudGl0eVRyZWVXaWRnZXQudHN4IiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvdXRpbHMvcmVhY3RCYXRjaGVkVXBkYXRlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvdXRpbHMvYmF0Y2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2hvb2tzL3VzZVNlbGVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9ob29rcy91c2VSZWR1eENvbnRleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2NvbXBvbmVudHMvQ29udGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvdXRpbHMvdXNlU3luY0V4dGVybmFsU3RvcmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2NvbXBvbmVudHMvY29ubmVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvY29ubmVjdC9tZXJnZVByb3BzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy91dGlscy9TdWJzY3JpcHRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL3V0aWxzL3VzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2NvbXBvbmVudHMvUHJvdmlkZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2hvb2tzL3VzZVN0b3JlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9ob29rcy91c2VEaXNwYXRjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9zcmMvYXBwL2hvb2tzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9pbW1lci9zcmMvdXRpbHMvZXJyb3JzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9pbW1lci9zcmMvdXRpbHMvY29tbW9uLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9pbW1lci9zcmMvdXRpbHMvcGx1Z2lucy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvaW1tZXIvc3JjL2NvcmUvc2NvcGUudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL2ltbWVyL3NyYy9jb3JlL2ZpbmFsaXplLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9pbW1lci9zcmMvY29yZS9wcm94eS50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvaW1tZXIvc3JjL2NvcmUvaW1tZXJDbGFzcy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvaW1tZXIvc3JjL2NvcmUvY3VycmVudC50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvaW1tZXIvc3JjL3BsdWdpbnMvZXM1LnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9pbW1lci9zcmMvcGx1Z2lucy9wYXRjaGVzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9pbW1lci9zcmMvcGx1Z2lucy9tYXBzZXQudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL2ltbWVyL3NyYy9wbHVnaW5zL2FsbC50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvaW1tZXIvc3JjL2ltbWVyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9pbW1lci9zcmMvdXRpbHMvZW52LnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvUHJpbWl0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b1Byb3BlcnR5S2V5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0U3ByZWFkMi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVkdXgvZXMvcmVkdXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlZHV4LXRodW5rL2VzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AcmVkdXhqcy90b29sa2l0L3NyYy9pbmRleC50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9zcmMvY3JlYXRlRHJhZnRTYWZlU2VsZWN0b3IudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0ByZWR1eGpzL3Rvb2xraXQvc3JjL2NvbmZpZ3VyZVN0b3JlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AcmVkdXhqcy90b29sa2l0L3NyYy9kZXZ0b29sc0V4dGVuc2lvbi50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9zcmMvaXNQbGFpbk9iamVjdC50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9zcmMvZ2V0RGVmYXVsdE1pZGRsZXdhcmUudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0ByZWR1eGpzL3Rvb2xraXQvc3JjL3RzSGVscGVycy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9zcmMvY3JlYXRlQWN0aW9uLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AcmVkdXhqcy90b29sa2l0L3NyYy9hY3Rpb25DcmVhdG9ySW52YXJpYW50TWlkZGxld2FyZS50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9zcmMvdXRpbHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0ByZWR1eGpzL3Rvb2xraXQvc3JjL2ltbXV0YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZS50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9zcmMvc2VyaWFsaXphYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AcmVkdXhqcy90b29sa2l0L3NyYy9jcmVhdGVSZWR1Y2VyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AcmVkdXhqcy90b29sa2l0L3NyYy9tYXBCdWlsZGVycy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9zcmMvY3JlYXRlU2xpY2UudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0ByZWR1eGpzL3Rvb2xraXQvc3JjL2VudGl0aWVzL2VudGl0eV9zdGF0ZS50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9zcmMvZW50aXRpZXMvc3RhdGVfc2VsZWN0b3JzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AcmVkdXhqcy90b29sa2l0L3NyYy9lbnRpdGllcy9zdGF0ZV9hZGFwdGVyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AcmVkdXhqcy90b29sa2l0L3NyYy9lbnRpdGllcy91dGlscy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9zcmMvZW50aXRpZXMvdW5zb3J0ZWRfc3RhdGVfYWRhcHRlci50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9zcmMvZW50aXRpZXMvc29ydGVkX3N0YXRlX2FkYXB0ZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0ByZWR1eGpzL3Rvb2xraXQvc3JjL2VudGl0aWVzL2NyZWF0ZV9hZGFwdGVyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AcmVkdXhqcy90b29sa2l0L3NyYy9uYW5vaWQudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0ByZWR1eGpzL3Rvb2xraXQvc3JjL2NyZWF0ZUFzeW5jVGh1bmsudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0ByZWR1eGpzL3Rvb2xraXQvc3JjL21hdGNoZXJzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AcmVkdXhqcy90b29sa2l0L3NyYy9saXN0ZW5lck1pZGRsZXdhcmUvdXRpbHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0ByZWR1eGpzL3Rvb2xraXQvc3JjL2xpc3RlbmVyTWlkZGxld2FyZS9leGNlcHRpb25zLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AcmVkdXhqcy90b29sa2l0L3NyYy9saXN0ZW5lck1pZGRsZXdhcmUvdGFzay50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9zcmMvbGlzdGVuZXJNaWRkbGV3YXJlL2luZGV4LnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AcmVkdXhqcy90b29sa2l0L3NyYy9hdXRvQmF0Y2hFbmhhbmNlci50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9kaXN0L3JlZHV4LXRvb2xraXQuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L3NyYy9hcHAvYXBpLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy91cmwtam9pbi9saWIvdXJsLWpvaW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvc3JjL3BhZ2VzL2hvbWUvaG9tZVNsaWNlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L3NyYy9hcHAvdXRpbC50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9zcmMvbW9kZWwvUmVpZmllZC50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9zcmMvbW9kZWwvTGlua2VkRW50aXRpZXMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvc3JjL21vZGVsL1RoaW5nLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L3NyYy9tb2RlbC9FbnRpdHkudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvc3JjL21vZGVsL0NsYXNzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L3NyYy9tb2RlbC9JbmRpdmlkdWFsLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L3NyYy9tb2RlbC9Qcm9wZXJ0eS50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9zcmMvbW9kZWwvT250b2xvZ3kudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvc3JjL3BhZ2VzL29udG9sb2dpZXMvZW50aXRpZXMvZXh0cmFjdEVudGl0eUhpZXJhcmNoeS50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9zcmMvcGFnZXMvb250b2xvZ2llcy9lbnRpdGllcy9jcmVhdGVUcmVlRnJvbUVudGl0aWVzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L3NyYy9wYWdlcy9vbnRvbG9naWVzL29udG9sb2dpZXNTbGljZS50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9zcmMvcGFnZXMvc2VhcmNoL3NlYXJjaFNsaWNlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L3NyYy9hcHAvc3RvcmUudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvc3JjL3BhZ2VzL29udG9sb2dpZXMvZW50aXRpZXMvRW50aXR5VHJlZS50c3giLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvY29sb3JzL2NvbW1vbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9jb2xvcnMvcmVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2NvbG9ycy9wdXJwbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvY29sb3JzL2JsdWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvY29sb3JzL2xpZ2h0Qmx1ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9jb2xvcnMvZ3JlZW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvY29sb3JzL29yYW5nZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9jb2xvcnMvZ3JleS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvaWRlbnRpZmllci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vY3JlYXRlVGhlbWUvY3JlYXRlVGhlbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9jcmVhdGVUaGVtZS9jcmVhdGVCcmVha3BvaW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL2NyZWF0ZVRoZW1lL3NoYXBlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vYnJlYWtwb2ludHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9tZXJnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL3N0eWxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vbWVtb2l6ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL3NwYWNpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9jcmVhdGVUaGVtZS9jcmVhdGVTcGFjaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vc3R5bGVGdW5jdGlvblN4L3N0eWxlRnVuY3Rpb25TeC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL2NvbXBvc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9ib3JkZXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vY3NzR3JpZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL3BhbGV0dGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9zaXppbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9zdHlsZUZ1bmN0aW9uU3gvZGVmYXVsdFN4Q29uZmlnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vY3JlYXRlVGhlbWUvYXBwbHlTdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS91c2VUaGVtZVdpdGhvdXREZWZhdWx0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vdXNlVGhlbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9zdHlsZUZ1bmN0aW9uU3gvZXh0ZW5kU3hQcm9wLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL0NsYXNzTmFtZUdlbmVyYXRvci9DbGFzc05hbWVHZW5lcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL2Nsc3gvZGlzdC9jbHN4Lm1qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcy9nZW5lcmF0ZVV0aWxpdHlDbGFzcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9jcmVhdGVTdHlsZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9zdHlsZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvcmVzb2x2ZVByb3BzL3Jlc29sdmVQcm9wcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL3VzZVRoZW1lUHJvcHMvZ2V0VGhlbWVQcm9wcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL3VzZVRoZW1lUHJvcHMvdXNlVGhlbWVQcm9wcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS91dGlscy91c2VFbmhhbmNlZEVmZmVjdC91c2VFbmhhbmNlZEVmZmVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS91dGlscy9jcmVhdGVDaGFpbmVkRnVuY3Rpb24vY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL2lzTXVpRWxlbWVudC9pc011aUVsZW1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvc2V0UmVmL3NldFJlZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS91dGlscy91c2VJZC91c2VJZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS91dGlscy91c2VDb250cm9sbGVkL3VzZUNvbnRyb2xsZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvdXNlRXZlbnRDYWxsYmFjay91c2VFdmVudENhbGxiYWNrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL3VzZUZvcmtSZWYvdXNlRm9ya1JlZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS91dGlscy91c2VMYXp5UmVmL3VzZUxhenlSZWYuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvdXNlT25Nb3VudC91c2VPbk1vdW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL3VzZVRpbWVvdXQvdXNlVGltZW91dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS91dGlscy91c2VJc0ZvY3VzVmlzaWJsZS91c2VJc0ZvY3VzVmlzaWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS91dGlscy9jb21wb3NlQ2xhc3Nlcy9jb21wb3NlQ2xhc3Nlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL1N0YWNrL2NyZWF0ZVN0YWNrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3N0eWxlcy9jcmVhdGVUaGVtZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvY3JlYXRlTWl4aW5zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3N0eWxlcy9jcmVhdGVQYWxldHRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3N0eWxlcy9jcmVhdGVUeXBvZ3JhcGh5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3N0eWxlcy9zaGFkb3dzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3N0eWxlcy9jcmVhdGVUcmFuc2l0aW9ucy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvekluZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3N0eWxlcy9kZWZhdWx0VGhlbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvc3R5bGVzL3VzZVRoZW1lUHJvcHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvc3R5bGVzL3N0eWxlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy9jYXBpdGFsaXplLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3V0aWxzL2NyZWF0ZUNoYWluZWRGdW5jdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy9jcmVhdGVTdmdJY29uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1N2Z0ljb24vU3ZnSWNvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9TdmdJY29uL3N2Z0ljb25DbGFzc2VzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3V0aWxzL2lzTXVpRWxlbWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy91c2VJZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy91c2VDb250cm9sbGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3V0aWxzL3VzZUV2ZW50Q2FsbGJhY2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdXRpbHMvdXNlRm9ya1JlZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy91c2VJc0ZvY3VzVmlzaWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2V0UHJvdG90eXBlT2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL1RyYW5zaXRpb25Hcm91cENvbnRleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL1RyYW5zaXRpb25Hcm91cC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS91dGlscy9DaGlsZE1hcHBpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQnV0dG9uQmFzZS9CdXR0b25CYXNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0J1dHRvbkJhc2UvVG91Y2hSaXBwbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQnV0dG9uQmFzZS9SaXBwbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQnV0dG9uQmFzZS90b3VjaFJpcHBsZUNsYXNzZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQnV0dG9uQmFzZS9idXR0b25CYXNlQ2xhc3Nlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9UeXBvZ3JhcGh5L1R5cG9ncmFwaHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvVHlwb2dyYXBoeS90eXBvZ3JhcGh5Q2xhc3Nlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Gb3JtQ29udHJvbC9mb3JtQ29udHJvbFN0YXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0Zvcm1Db250cm9sL0Zvcm1Db250cm9sQ29udGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Gb3JtQ29udHJvbC91c2VGb3JtQ29udHJvbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9JbnB1dEJhc2UvdXRpbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQ2hlY2tib3gvQ2hlY2tib3guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvaW50ZXJuYWwvU3dpdGNoQmFzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9pbnRlcm5hbC9zd2l0Y2hCYXNlQ2xhc3Nlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9pbnRlcm5hbC9zdmctaWNvbnMvQ2hlY2tCb3hPdXRsaW5lQmxhbmsuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvaW50ZXJuYWwvc3ZnLWljb25zL0NoZWNrQm94LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2ludGVybmFsL3N2Zy1pY29ucy9JbmRldGVybWluYXRlQ2hlY2tCb3guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQ2hlY2tib3gvY2hlY2tib3hDbGFzc2VzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0NpcmN1bGFyUHJvZ3Jlc3MvQ2lyY3VsYXJQcm9ncmVzcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9DaXJjdWxhclByb2dyZXNzL2NpcmN1bGFyUHJvZ3Jlc3NDbGFzc2VzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0Zvcm1Db250cm9sL0Zvcm1Db250cm9sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0Zvcm1Db250cm9sL2Zvcm1Db250cm9sQ2xhc3Nlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Gb3JtQ29udHJvbExhYmVsL0Zvcm1Db250cm9sTGFiZWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvU3RhY2svU3RhY2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvRm9ybUNvbnRyb2xMYWJlbC9mb3JtQ29udHJvbExhYmVsQ2xhc3Nlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Gb3JtR3JvdXAvRm9ybUdyb3VwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0Zvcm1Hcm91cC9mb3JtR3JvdXBDbGFzc2VzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1JhZGlvL1JhZGlvLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1JhZGlvL1JhZGlvQnV0dG9uSWNvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9pbnRlcm5hbC9zdmctaWNvbnMvUmFkaW9CdXR0b25VbmNoZWNrZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvaW50ZXJuYWwvc3ZnLWljb25zL1JhZGlvQnV0dG9uQ2hlY2tlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9SYWRpb0dyb3VwL3VzZVJhZGlvR3JvdXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvUmFkaW9Hcm91cC9SYWRpb0dyb3VwQ29udGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9SYWRpby9yYWRpb0NsYXNzZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvUmFkaW9Hcm91cC9SYWRpb0dyb3VwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L3NyYy9hcHAvbXVpLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L3NyYy9jb21wb25lbnRzL05vZGUudHN4IiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9jb3JlL3N1YnNjcmliYWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS9mb2N1c01hbmFnZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvb25saW5lTWFuYWdlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS9yZXRyeWVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9jb3JlL3F1ZXJ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9jb3JlL25vdGlmeU1hbmFnZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvbG9nZ2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9jb3JlL3F1ZXJ5Q2FjaGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvcXVlcnlDbGllbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvbXV0YXRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvbXV0YXRpb25DYWNoZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS9pbmZpbml0ZVF1ZXJ5QmVoYXZpb3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL3JlYWN0L3JlYWN0QmF0Y2hlZFVwZGF0ZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL3JlYWN0L3NldEJhdGNoVXBkYXRlc0ZuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9yZWFjdC9sb2dnZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL3JlYWN0L3NldExvZ2dlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvcmVhY3QvUXVlcnlDbGllbnRQcm92aWRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9zcmMvd2lkZ2V0cy9pbmRleC50cyIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L1RhYldpZGdldC9UYWJXaWRnZXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvTWV0YWRhdGFXaWRnZXQvVGFiV2lkZ2V0L1RhYlByZXNlbnRhdGlvbi50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9NZXRhZGF0YVdpZGdldC9UYWJXaWRnZXQvSGllcmFyY2h5V2lkZ2V0RGVwcmVjYXRlZC9IaWVyYXJjaHlXaWRnZXREZXByZWNhdGVkLnRzeCIsICIuLi9zcmMvYXBpL2hpZXJhcmNoeV93aWRnZXRfZGVwcmVjYXRlZC50cyIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L1RpdGxlV2lkZ2V0L1RpdGxlV2lkZ2V0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L1RpdGxlV2lkZ2V0L1RpdGxlUHJlc2VudGF0aW9uLnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L01ldGFkYXRhV2lkZ2V0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL0RhdGFDb250ZW50V2lkZ2V0L0RhdGFDb250ZW50V2lkZ2V0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL0VudGl0eUluZm9XaWRnZXQvRW50aXR5SW5mb1dpZGdldC50c3giLCAiLi4vc3JjL21vZGVsL1N0cnVjdHVyZVJlbmRlcmluZy50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9Kc29uQXBpV2lkZ2V0L0pzb25BcGlXaWRnZXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvT250b2xvZ3lJbmZvV2lkZ2V0L09udG9sb2d5SW5mb1dpZGdldC50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9SZXNvdXJjZXNXaWRnZXQvUmVzb3VyY2VzV2lkZ2V0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL1NlYXJjaEJhcldpZGdldC9TZWFyY2hCYXJXaWRnZXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvU2VhcmNoUmVzdWx0c0xpc3RXaWRnZXQvU2VhcmNoUmVzdWx0c0xpc3RXaWRnZXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvU2VhcmNoUmVzdWx0c0xpc3RXaWRnZXQvTWV0YWRhdGFDb21wYWN0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL0VudGl0eVJlbGF0aW9uc1dpZGdldC9FbnRpdHlSZWxhdGlvbnNXaWRnZXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvaW5kZXgudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qXG5vYmplY3QtYXNzaWduXG4oYykgU2luZHJlIFNvcmh1c1xuQGxpY2Vuc2UgTUlUXG4qL1xuXG4ndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xudmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHByb3BJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG5mdW5jdGlvbiB0b09iamVjdCh2YWwpIHtcblx0aWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkJyk7XG5cdH1cblxuXHRyZXR1cm4gT2JqZWN0KHZhbCk7XG59XG5cbmZ1bmN0aW9uIHNob3VsZFVzZU5hdGl2ZSgpIHtcblx0dHJ5IHtcblx0XHRpZiAoIU9iamVjdC5hc3NpZ24pIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBEZXRlY3QgYnVnZ3kgcHJvcGVydHkgZW51bWVyYXRpb24gb3JkZXIgaW4gb2xkZXIgVjggdmVyc2lvbnMuXG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD00MTE4XG5cdFx0dmFyIHRlc3QxID0gbmV3IFN0cmluZygnYWJjJyk7ICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ldy13cmFwcGVyc1xuXHRcdHRlc3QxWzVdID0gJ2RlJztcblx0XHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDEpWzBdID09PSAnNScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XG5cdFx0dmFyIHRlc3QyID0ge307XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG5cdFx0XHR0ZXN0MlsnXycgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGkpXSA9IGk7XG5cdFx0fVxuXHRcdHZhciBvcmRlcjIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MikubWFwKGZ1bmN0aW9uIChuKSB7XG5cdFx0XHRyZXR1cm4gdGVzdDJbbl07XG5cdFx0fSk7XG5cdFx0aWYgKG9yZGVyMi5qb2luKCcnKSAhPT0gJzAxMjM0NTY3ODknKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MyA9IHt9O1xuXHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGxldHRlcikge1xuXHRcdFx0dGVzdDNbbGV0dGVyXSA9IGxldHRlcjtcblx0XHR9KTtcblx0XHRpZiAoT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSwgdGVzdDMpKS5qb2luKCcnKSAhPT1cblx0XHRcdFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlcnIpIHtcblx0XHQvLyBXZSBkb24ndCBleHBlY3QgYW55IG9mIHRoZSBhYm92ZSB0byB0aHJvdywgYnV0IGJldHRlciB0byBiZSBzYWZlLlxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNob3VsZFVzZU5hdGl2ZSgpID8gT2JqZWN0LmFzc2lnbiA6IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xuXHR2YXIgZnJvbTtcblx0dmFyIHRvID0gdG9PYmplY3QodGFyZ2V0KTtcblx0dmFyIHN5bWJvbHM7XG5cblx0Zm9yICh2YXIgcyA9IDE7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspIHtcblx0XHRmcm9tID0gT2JqZWN0KGFyZ3VtZW50c1tzXSk7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuXHRcdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwoZnJvbSwga2V5KSkge1xuXHRcdFx0XHR0b1trZXldID0gZnJvbVtrZXldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcblx0XHRcdHN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKHByb3BJc0VudW1lcmFibGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkge1xuXHRcdFx0XHRcdHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0bztcbn07XG4iLCAiLyoqIEBsaWNlbnNlIFJlYWN0IHYxNy4wLjJcbiAqIHJlYWN0LmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIChmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxudmFyIF9hc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG5cbi8vIFRPRE86IHRoaXMgaXMgc3BlY2lhbCBiZWNhdXNlIGl0IGdldHMgaW1wb3J0ZWQgZHVyaW5nIGJ1aWxkLlxudmFyIFJlYWN0VmVyc2lvbiA9ICcxNy4wLjInO1xuXG4vLyBBVFRFTlRJT05cbi8vIFdoZW4gYWRkaW5nIG5ldyBzeW1ib2xzIHRvIHRoaXMgZmlsZSxcbi8vIFBsZWFzZSBjb25zaWRlciBhbHNvIGFkZGluZyB0byAncmVhY3QtZGV2dG9vbHMtc2hhcmVkL3NyYy9iYWNrZW5kL1JlYWN0U3ltYm9scydcbi8vIFRoZSBTeW1ib2wgdXNlZCB0byB0YWcgdGhlIFJlYWN0RWxlbWVudC1saWtlIHR5cGVzLiBJZiB0aGVyZSBpcyBubyBuYXRpdmUgU3ltYm9sXG4vLyBub3IgcG9seWZpbGwsIHRoZW4gYSBwbGFpbiBudW1iZXIgaXMgdXNlZCBmb3IgcGVyZm9ybWFuY2UuXG52YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0gMHhlYWM3O1xudmFyIFJFQUNUX1BPUlRBTF9UWVBFID0gMHhlYWNhO1xuZXhwb3J0cy5GcmFnbWVudCA9IDB4ZWFjYjtcbmV4cG9ydHMuU3RyaWN0TW9kZSA9IDB4ZWFjYztcbmV4cG9ydHMuUHJvZmlsZXIgPSAweGVhZDI7XG52YXIgUkVBQ1RfUFJPVklERVJfVFlQRSA9IDB4ZWFjZDtcbnZhciBSRUFDVF9DT05URVhUX1RZUEUgPSAweGVhY2U7XG52YXIgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IDB4ZWFkMDtcbmV4cG9ydHMuU3VzcGVuc2UgPSAweGVhZDE7XG52YXIgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFID0gMHhlYWQ4O1xudmFyIFJFQUNUX01FTU9fVFlQRSA9IDB4ZWFkMztcbnZhciBSRUFDVF9MQVpZX1RZUEUgPSAweGVhZDQ7XG52YXIgUkVBQ1RfQkxPQ0tfVFlQRSA9IDB4ZWFkOTtcbnZhciBSRUFDVF9TRVJWRVJfQkxPQ0tfVFlQRSA9IDB4ZWFkYTtcbnZhciBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFID0gMHhlYWQ1O1xudmFyIFJFQUNUX1NDT1BFX1RZUEUgPSAweGVhZDc7XG52YXIgUkVBQ1RfT1BBUVVFX0lEX1RZUEUgPSAweGVhZTA7XG52YXIgUkVBQ1RfREVCVUdfVFJBQ0lOR19NT0RFX1RZUEUgPSAweGVhZTE7XG52YXIgUkVBQ1RfT0ZGU0NSRUVOX1RZUEUgPSAweGVhZTI7XG52YXIgUkVBQ1RfTEVHQUNZX0hJRERFTl9UWVBFID0gMHhlYWUzO1xuXG5pZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuZm9yKSB7XG4gIHZhciBzeW1ib2xGb3IgPSBTeW1ib2wuZm9yO1xuICBSRUFDVF9FTEVNRU5UX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmVsZW1lbnQnKTtcbiAgUkVBQ1RfUE9SVEFMX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnBvcnRhbCcpO1xuICBleHBvcnRzLkZyYWdtZW50ID0gc3ltYm9sRm9yKCdyZWFjdC5mcmFnbWVudCcpO1xuICBleHBvcnRzLlN0cmljdE1vZGUgPSBzeW1ib2xGb3IoJ3JlYWN0LnN0cmljdF9tb2RlJyk7XG4gIGV4cG9ydHMuUHJvZmlsZXIgPSBzeW1ib2xGb3IoJ3JlYWN0LnByb2ZpbGVyJyk7XG4gIFJFQUNUX1BST1ZJREVSX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnByb3ZpZGVyJyk7XG4gIFJFQUNUX0NPTlRFWFRfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuY29udGV4dCcpO1xuICBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5mb3J3YXJkX3JlZicpO1xuICBleHBvcnRzLlN1c3BlbnNlID0gc3ltYm9sRm9yKCdyZWFjdC5zdXNwZW5zZScpO1xuICBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnN1c3BlbnNlX2xpc3QnKTtcbiAgUkVBQ1RfTUVNT19UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5tZW1vJyk7XG4gIFJFQUNUX0xBWllfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QubGF6eScpO1xuICBSRUFDVF9CTE9DS19UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5ibG9jaycpO1xuICBSRUFDVF9TRVJWRVJfQkxPQ0tfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Quc2VydmVyLmJsb2NrJyk7XG4gIFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmZ1bmRhbWVudGFsJyk7XG4gIFJFQUNUX1NDT1BFX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnNjb3BlJyk7XG4gIFJFQUNUX09QQVFVRV9JRF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5vcGFxdWUuaWQnKTtcbiAgUkVBQ1RfREVCVUdfVFJBQ0lOR19NT0RFX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmRlYnVnX3RyYWNlX21vZGUnKTtcbiAgUkVBQ1RfT0ZGU0NSRUVOX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0Lm9mZnNjcmVlbicpO1xuICBSRUFDVF9MRUdBQ1lfSElEREVOX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmxlZ2FjeV9oaWRkZW4nKTtcbn1cblxudmFyIE1BWUJFX0lURVJBVE9SX1NZTUJPTCA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLml0ZXJhdG9yO1xudmFyIEZBVVhfSVRFUkFUT1JfU1lNQk9MID0gJ0BAaXRlcmF0b3InO1xuZnVuY3Rpb24gZ2V0SXRlcmF0b3JGbihtYXliZUl0ZXJhYmxlKSB7XG4gIGlmIChtYXliZUl0ZXJhYmxlID09PSBudWxsIHx8IHR5cGVvZiBtYXliZUl0ZXJhYmxlICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIG1heWJlSXRlcmF0b3IgPSBNQVlCRV9JVEVSQVRPUl9TWU1CT0wgJiYgbWF5YmVJdGVyYWJsZVtNQVlCRV9JVEVSQVRPUl9TWU1CT0xdIHx8IG1heWJlSXRlcmFibGVbRkFVWF9JVEVSQVRPUl9TWU1CT0xdO1xuXG4gIGlmICh0eXBlb2YgbWF5YmVJdGVyYXRvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBtYXliZUl0ZXJhdG9yO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogS2VlcHMgdHJhY2sgb2YgdGhlIGN1cnJlbnQgZGlzcGF0Y2hlci5cbiAqL1xudmFyIFJlYWN0Q3VycmVudERpc3BhdGNoZXIgPSB7XG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICogQHR5cGUge1JlYWN0Q29tcG9uZW50fVxuICAgKi9cbiAgY3VycmVudDogbnVsbFxufTtcblxuLyoqXG4gKiBLZWVwcyB0cmFjayBvZiB0aGUgY3VycmVudCBiYXRjaCdzIGNvbmZpZ3VyYXRpb24gc3VjaCBhcyBob3cgbG9uZyBhbiB1cGRhdGVcbiAqIHNob3VsZCBzdXNwZW5kIGZvciBpZiBpdCBuZWVkcyB0by5cbiAqL1xudmFyIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnID0ge1xuICB0cmFuc2l0aW9uOiAwXG59O1xuXG4vKipcbiAqIEtlZXBzIHRyYWNrIG9mIHRoZSBjdXJyZW50IG93bmVyLlxuICpcbiAqIFRoZSBjdXJyZW50IG93bmVyIGlzIHRoZSBjb21wb25lbnQgd2hvIHNob3VsZCBvd24gYW55IGNvbXBvbmVudHMgdGhhdCBhcmVcbiAqIGN1cnJlbnRseSBiZWluZyBjb25zdHJ1Y3RlZC5cbiAqL1xudmFyIFJlYWN0Q3VycmVudE93bmVyID0ge1xuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIEB0eXBlIHtSZWFjdENvbXBvbmVudH1cbiAgICovXG4gIGN1cnJlbnQ6IG51bGxcbn07XG5cbnZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lID0ge307XG52YXIgY3VycmVudEV4dHJhU3RhY2tGcmFtZSA9IG51bGw7XG5mdW5jdGlvbiBzZXRFeHRyYVN0YWNrRnJhbWUoc3RhY2spIHtcbiAge1xuICAgIGN1cnJlbnRFeHRyYVN0YWNrRnJhbWUgPSBzdGFjaztcbiAgfVxufVxuXG57XG4gIFJlYWN0RGVidWdDdXJyZW50RnJhbWUuc2V0RXh0cmFTdGFja0ZyYW1lID0gZnVuY3Rpb24gKHN0YWNrKSB7XG4gICAge1xuICAgICAgY3VycmVudEV4dHJhU3RhY2tGcmFtZSA9IHN0YWNrO1xuICAgIH1cbiAgfTsgLy8gU3RhY2sgaW1wbGVtZW50YXRpb24gaW5qZWN0ZWQgYnkgdGhlIGN1cnJlbnQgcmVuZGVyZXIuXG5cblxuICBSZWFjdERlYnVnQ3VycmVudEZyYW1lLmdldEN1cnJlbnRTdGFjayA9IG51bGw7XG5cbiAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5nZXRTdGFja0FkZGVuZHVtID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzdGFjayA9ICcnOyAvLyBBZGQgYW4gZXh0cmEgdG9wIGZyYW1lIHdoaWxlIGFuIGVsZW1lbnQgaXMgYmVpbmcgdmFsaWRhdGVkXG5cbiAgICBpZiAoY3VycmVudEV4dHJhU3RhY2tGcmFtZSkge1xuICAgICAgc3RhY2sgKz0gY3VycmVudEV4dHJhU3RhY2tGcmFtZTtcbiAgICB9IC8vIERlbGVnYXRlIHRvIHRoZSBpbmplY3RlZCByZW5kZXJlci1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvblxuXG5cbiAgICB2YXIgaW1wbCA9IFJlYWN0RGVidWdDdXJyZW50RnJhbWUuZ2V0Q3VycmVudFN0YWNrO1xuXG4gICAgaWYgKGltcGwpIHtcbiAgICAgIHN0YWNrICs9IGltcGwoKSB8fCAnJztcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhY2s7XG4gIH07XG59XG5cbi8qKlxuICogVXNlZCBieSBhY3QoKSB0byB0cmFjayB3aGV0aGVyIHlvdSdyZSBpbnNpZGUgYW4gYWN0KCkgc2NvcGUuXG4gKi9cbnZhciBJc1NvbWVSZW5kZXJlckFjdGluZyA9IHtcbiAgY3VycmVudDogZmFsc2Vcbn07XG5cbnZhciBSZWFjdFNoYXJlZEludGVybmFscyA9IHtcbiAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlcjogUmVhY3RDdXJyZW50RGlzcGF0Y2hlcixcbiAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWc6IFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnLFxuICBSZWFjdEN1cnJlbnRPd25lcjogUmVhY3RDdXJyZW50T3duZXIsXG4gIElzU29tZVJlbmRlcmVyQWN0aW5nOiBJc1NvbWVSZW5kZXJlckFjdGluZyxcbiAgLy8gVXNlZCBieSByZW5kZXJlcnMgdG8gYXZvaWQgYnVuZGxpbmcgb2JqZWN0LWFzc2lnbiB0d2ljZSBpbiBVTUQgYnVuZGxlczpcbiAgYXNzaWduOiBfYXNzaWduXG59O1xuXG57XG4gIFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0RGVidWdDdXJyZW50RnJhbWUgPSBSZWFjdERlYnVnQ3VycmVudEZyYW1lO1xufVxuXG4vLyBieSBjYWxscyB0byB0aGVzZSBtZXRob2RzIGJ5IGEgQmFiZWwgcGx1Z2luLlxuLy9cbi8vIEluIFBST0QgKG9yIGluIHBhY2thZ2VzIHdpdGhvdXQgYWNjZXNzIHRvIFJlYWN0IGludGVybmFscyksXG4vLyB0aGV5IGFyZSBsZWZ0IGFzIHRoZXkgYXJlIGluc3RlYWQuXG5cbmZ1bmN0aW9uIHdhcm4oZm9ybWF0KSB7XG4gIHtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBwcmludFdhcm5pbmcoJ3dhcm4nLCBmb3JtYXQsIGFyZ3MpO1xuICB9XG59XG5mdW5jdGlvbiBlcnJvcihmb3JtYXQpIHtcbiAge1xuICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiA+IDEgPyBfbGVuMiAtIDEgOiAwKSwgX2tleTIgPSAxOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICBhcmdzW19rZXkyIC0gMV0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgIH1cblxuICAgIHByaW50V2FybmluZygnZXJyb3InLCBmb3JtYXQsIGFyZ3MpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHByaW50V2FybmluZyhsZXZlbCwgZm9ybWF0LCBhcmdzKSB7XG4gIC8vIFdoZW4gY2hhbmdpbmcgdGhpcyBsb2dpYywgeW91IG1pZ2h0IHdhbnQgdG8gYWxzb1xuICAvLyB1cGRhdGUgY29uc29sZVdpdGhTdGFja0Rldi53d3cuanMgYXMgd2VsbC5cbiAge1xuICAgIHZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcbiAgICB2YXIgc3RhY2sgPSBSZWFjdERlYnVnQ3VycmVudEZyYW1lLmdldFN0YWNrQWRkZW5kdW0oKTtcblxuICAgIGlmIChzdGFjayAhPT0gJycpIHtcbiAgICAgIGZvcm1hdCArPSAnJXMnO1xuICAgICAgYXJncyA9IGFyZ3MuY29uY2F0KFtzdGFja10pO1xuICAgIH1cblxuICAgIHZhciBhcmdzV2l0aEZvcm1hdCA9IGFyZ3MubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICByZXR1cm4gJycgKyBpdGVtO1xuICAgIH0pOyAvLyBDYXJlZnVsOiBSTiBjdXJyZW50bHkgZGVwZW5kcyBvbiB0aGlzIHByZWZpeFxuXG4gICAgYXJnc1dpdGhGb3JtYXQudW5zaGlmdCgnV2FybmluZzogJyArIGZvcm1hdCk7IC8vIFdlIGludGVudGlvbmFsbHkgZG9uJ3QgdXNlIHNwcmVhZCAob3IgLmFwcGx5KSBkaXJlY3RseSBiZWNhdXNlIGl0XG4gICAgLy8gYnJlYWtzIElFOTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMzYxMFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmdcblxuICAgIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5jYWxsKGNvbnNvbGVbbGV2ZWxdLCBjb25zb2xlLCBhcmdzV2l0aEZvcm1hdCk7XG4gIH1cbn1cblxudmFyIGRpZFdhcm5TdGF0ZVVwZGF0ZUZvclVubW91bnRlZENvbXBvbmVudCA9IHt9O1xuXG5mdW5jdGlvbiB3YXJuTm9vcChwdWJsaWNJbnN0YW5jZSwgY2FsbGVyTmFtZSkge1xuICB7XG4gICAgdmFyIF9jb25zdHJ1Y3RvciA9IHB1YmxpY0luc3RhbmNlLmNvbnN0cnVjdG9yO1xuICAgIHZhciBjb21wb25lbnROYW1lID0gX2NvbnN0cnVjdG9yICYmIChfY29uc3RydWN0b3IuZGlzcGxheU5hbWUgfHwgX2NvbnN0cnVjdG9yLm5hbWUpIHx8ICdSZWFjdENsYXNzJztcbiAgICB2YXIgd2FybmluZ0tleSA9IGNvbXBvbmVudE5hbWUgKyBcIi5cIiArIGNhbGxlck5hbWU7XG5cbiAgICBpZiAoZGlkV2FyblN0YXRlVXBkYXRlRm9yVW5tb3VudGVkQ29tcG9uZW50W3dhcm5pbmdLZXldKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZXJyb3IoXCJDYW4ndCBjYWxsICVzIG9uIGEgY29tcG9uZW50IHRoYXQgaXMgbm90IHlldCBtb3VudGVkLiBcIiArICdUaGlzIGlzIGEgbm8tb3AsIGJ1dCBpdCBtaWdodCBpbmRpY2F0ZSBhIGJ1ZyBpbiB5b3VyIGFwcGxpY2F0aW9uLiAnICsgJ0luc3RlYWQsIGFzc2lnbiB0byBgdGhpcy5zdGF0ZWAgZGlyZWN0bHkgb3IgZGVmaW5lIGEgYHN0YXRlID0ge307YCAnICsgJ2NsYXNzIHByb3BlcnR5IHdpdGggdGhlIGRlc2lyZWQgc3RhdGUgaW4gdGhlICVzIGNvbXBvbmVudC4nLCBjYWxsZXJOYW1lLCBjb21wb25lbnROYW1lKTtcblxuICAgIGRpZFdhcm5TdGF0ZVVwZGF0ZUZvclVubW91bnRlZENvbXBvbmVudFt3YXJuaW5nS2V5XSA9IHRydWU7XG4gIH1cbn1cbi8qKlxuICogVGhpcyBpcyB0aGUgYWJzdHJhY3QgQVBJIGZvciBhbiB1cGRhdGUgcXVldWUuXG4gKi9cblxuXG52YXIgUmVhY3ROb29wVXBkYXRlUXVldWUgPSB7XG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciBvciBub3QgdGhpcyBjb21wb3NpdGUgY29tcG9uZW50IGlzIG1vdW50ZWQuXG4gICAqIEBwYXJhbSB7UmVhY3RDbGFzc30gcHVibGljSW5zdGFuY2UgVGhlIGluc3RhbmNlIHdlIHdhbnQgdG8gdGVzdC5cbiAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBtb3VudGVkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqIEBwcm90ZWN0ZWRcbiAgICogQGZpbmFsXG4gICAqL1xuICBpc01vdW50ZWQ6IGZ1bmN0aW9uIChwdWJsaWNJbnN0YW5jZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcblxuICAvKipcbiAgICogRm9yY2VzIGFuIHVwZGF0ZS4gVGhpcyBzaG91bGQgb25seSBiZSBpbnZva2VkIHdoZW4gaXQgaXMga25vd24gd2l0aFxuICAgKiBjZXJ0YWludHkgdGhhdCB3ZSBhcmUgKipub3QqKiBpbiBhIERPTSB0cmFuc2FjdGlvbi5cbiAgICpcbiAgICogWW91IG1heSB3YW50IHRvIGNhbGwgdGhpcyB3aGVuIHlvdSBrbm93IHRoYXQgc29tZSBkZWVwZXIgYXNwZWN0IG9mIHRoZVxuICAgKiBjb21wb25lbnQncyBzdGF0ZSBoYXMgY2hhbmdlZCBidXQgYHNldFN0YXRlYCB3YXMgbm90IGNhbGxlZC5cbiAgICpcbiAgICogVGhpcyB3aWxsIG5vdCBpbnZva2UgYHNob3VsZENvbXBvbmVudFVwZGF0ZWAsIGJ1dCBpdCB3aWxsIGludm9rZVxuICAgKiBgY29tcG9uZW50V2lsbFVwZGF0ZWAgYW5kIGBjb21wb25lbnREaWRVcGRhdGVgLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1YmxpY0luc3RhbmNlIFRoZSBpbnN0YW5jZSB0aGF0IHNob3VsZCByZXJlbmRlci5cbiAgICogQHBhcmFtIHs/ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCBhZnRlciBjb21wb25lbnQgaXMgdXBkYXRlZC5cbiAgICogQHBhcmFtIHs/c3RyaW5nfSBjYWxsZXJOYW1lIG5hbWUgb2YgdGhlIGNhbGxpbmcgZnVuY3Rpb24gaW4gdGhlIHB1YmxpYyBBUEkuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZW5xdWV1ZUZvcmNlVXBkYXRlOiBmdW5jdGlvbiAocHVibGljSW5zdGFuY2UsIGNhbGxiYWNrLCBjYWxsZXJOYW1lKSB7XG4gICAgd2Fybk5vb3AocHVibGljSW5zdGFuY2UsICdmb3JjZVVwZGF0ZScpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZXBsYWNlcyBhbGwgb2YgdGhlIHN0YXRlLiBBbHdheXMgdXNlIHRoaXMgb3IgYHNldFN0YXRlYCB0byBtdXRhdGUgc3RhdGUuXG4gICAqIFlvdSBzaG91bGQgdHJlYXQgYHRoaXMuc3RhdGVgIGFzIGltbXV0YWJsZS5cbiAgICpcbiAgICogVGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgYHRoaXMuc3RhdGVgIHdpbGwgYmUgaW1tZWRpYXRlbHkgdXBkYXRlZCwgc29cbiAgICogYWNjZXNzaW5nIGB0aGlzLnN0YXRlYCBhZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kIG1heSByZXR1cm4gdGhlIG9sZCB2YWx1ZS5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdENsYXNzfSBwdWJsaWNJbnN0YW5jZSBUaGUgaW5zdGFuY2UgdGhhdCBzaG91bGQgcmVyZW5kZXIuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjb21wbGV0ZVN0YXRlIE5leHQgc3RhdGUuXG4gICAqIEBwYXJhbSB7P2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsZWQgYWZ0ZXIgY29tcG9uZW50IGlzIHVwZGF0ZWQuXG4gICAqIEBwYXJhbSB7P3N0cmluZ30gY2FsbGVyTmFtZSBuYW1lIG9mIHRoZSBjYWxsaW5nIGZ1bmN0aW9uIGluIHRoZSBwdWJsaWMgQVBJLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGVucXVldWVSZXBsYWNlU3RhdGU6IGZ1bmN0aW9uIChwdWJsaWNJbnN0YW5jZSwgY29tcGxldGVTdGF0ZSwgY2FsbGJhY2ssIGNhbGxlck5hbWUpIHtcbiAgICB3YXJuTm9vcChwdWJsaWNJbnN0YW5jZSwgJ3JlcGxhY2VTdGF0ZScpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBTZXRzIGEgc3Vic2V0IG9mIHRoZSBzdGF0ZS4gVGhpcyBvbmx5IGV4aXN0cyBiZWNhdXNlIF9wZW5kaW5nU3RhdGUgaXNcbiAgICogaW50ZXJuYWwuIFRoaXMgcHJvdmlkZXMgYSBtZXJnaW5nIHN0cmF0ZWd5IHRoYXQgaXMgbm90IGF2YWlsYWJsZSB0byBkZWVwXG4gICAqIHByb3BlcnRpZXMgd2hpY2ggaXMgY29uZnVzaW5nLiBUT0RPOiBFeHBvc2UgcGVuZGluZ1N0YXRlIG9yIGRvbid0IHVzZSBpdFxuICAgKiBkdXJpbmcgdGhlIG1lcmdlLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1YmxpY0luc3RhbmNlIFRoZSBpbnN0YW5jZSB0aGF0IHNob3VsZCByZXJlbmRlci5cbiAgICogQHBhcmFtIHtvYmplY3R9IHBhcnRpYWxTdGF0ZSBOZXh0IHBhcnRpYWwgc3RhdGUgdG8gYmUgbWVyZ2VkIHdpdGggc3RhdGUuXG4gICAqIEBwYXJhbSB7P2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsZWQgYWZ0ZXIgY29tcG9uZW50IGlzIHVwZGF0ZWQuXG4gICAqIEBwYXJhbSB7P3N0cmluZ30gTmFtZSBvZiB0aGUgY2FsbGluZyBmdW5jdGlvbiBpbiB0aGUgcHVibGljIEFQSS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBlbnF1ZXVlU2V0U3RhdGU6IGZ1bmN0aW9uIChwdWJsaWNJbnN0YW5jZSwgcGFydGlhbFN0YXRlLCBjYWxsYmFjaywgY2FsbGVyTmFtZSkge1xuICAgIHdhcm5Ob29wKHB1YmxpY0luc3RhbmNlLCAnc2V0U3RhdGUnKTtcbiAgfVxufTtcblxudmFyIGVtcHR5T2JqZWN0ID0ge307XG5cbntcbiAgT2JqZWN0LmZyZWV6ZShlbXB0eU9iamVjdCk7XG59XG4vKipcbiAqIEJhc2UgY2xhc3MgaGVscGVycyBmb3IgdGhlIHVwZGF0aW5nIHN0YXRlIG9mIGEgY29tcG9uZW50LlxuICovXG5cblxuZnVuY3Rpb24gQ29tcG9uZW50KHByb3BzLCBjb250ZXh0LCB1cGRhdGVyKSB7XG4gIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgdGhpcy5jb250ZXh0ID0gY29udGV4dDsgLy8gSWYgYSBjb21wb25lbnQgaGFzIHN0cmluZyByZWZzLCB3ZSB3aWxsIGFzc2lnbiBhIGRpZmZlcmVudCBvYmplY3QgbGF0ZXIuXG5cbiAgdGhpcy5yZWZzID0gZW1wdHlPYmplY3Q7IC8vIFdlIGluaXRpYWxpemUgdGhlIGRlZmF1bHQgdXBkYXRlciBidXQgdGhlIHJlYWwgb25lIGdldHMgaW5qZWN0ZWQgYnkgdGhlXG4gIC8vIHJlbmRlcmVyLlxuXG4gIHRoaXMudXBkYXRlciA9IHVwZGF0ZXIgfHwgUmVhY3ROb29wVXBkYXRlUXVldWU7XG59XG5cbkNvbXBvbmVudC5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudCA9IHt9O1xuLyoqXG4gKiBTZXRzIGEgc3Vic2V0IG9mIHRoZSBzdGF0ZS4gQWx3YXlzIHVzZSB0aGlzIHRvIG11dGF0ZVxuICogc3RhdGUuIFlvdSBzaG91bGQgdHJlYXQgYHRoaXMuc3RhdGVgIGFzIGltbXV0YWJsZS5cbiAqXG4gKiBUaGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCBgdGhpcy5zdGF0ZWAgd2lsbCBiZSBpbW1lZGlhdGVseSB1cGRhdGVkLCBzb1xuICogYWNjZXNzaW5nIGB0aGlzLnN0YXRlYCBhZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kIG1heSByZXR1cm4gdGhlIG9sZCB2YWx1ZS5cbiAqXG4gKiBUaGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCBjYWxscyB0byBgc2V0U3RhdGVgIHdpbGwgcnVuIHN5bmNocm9ub3VzbHksXG4gKiBhcyB0aGV5IG1heSBldmVudHVhbGx5IGJlIGJhdGNoZWQgdG9nZXRoZXIuICBZb3UgY2FuIHByb3ZpZGUgYW4gb3B0aW9uYWxcbiAqIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB3aGVuIHRoZSBjYWxsIHRvIHNldFN0YXRlIGlzIGFjdHVhbGx5XG4gKiBjb21wbGV0ZWQuXG4gKlxuICogV2hlbiBhIGZ1bmN0aW9uIGlzIHByb3ZpZGVkIHRvIHNldFN0YXRlLCBpdCB3aWxsIGJlIGNhbGxlZCBhdCBzb21lIHBvaW50IGluXG4gKiB0aGUgZnV0dXJlIChub3Qgc3luY2hyb25vdXNseSkuIEl0IHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIHVwIHRvIGRhdGVcbiAqIGNvbXBvbmVudCBhcmd1bWVudHMgKHN0YXRlLCBwcm9wcywgY29udGV4dCkuIFRoZXNlIHZhbHVlcyBjYW4gYmUgZGlmZmVyZW50XG4gKiBmcm9tIHRoaXMuKiBiZWNhdXNlIHlvdXIgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBhZnRlciByZWNlaXZlUHJvcHMgYnV0IGJlZm9yZVxuICogc2hvdWxkQ29tcG9uZW50VXBkYXRlLCBhbmQgdGhpcyBuZXcgc3RhdGUsIHByb3BzLCBhbmQgY29udGV4dCB3aWxsIG5vdCB5ZXQgYmVcbiAqIGFzc2lnbmVkIHRvIHRoaXMuXG4gKlxuICogQHBhcmFtIHtvYmplY3R8ZnVuY3Rpb259IHBhcnRpYWxTdGF0ZSBOZXh0IHBhcnRpYWwgc3RhdGUgb3IgZnVuY3Rpb24gdG9cbiAqICAgICAgICBwcm9kdWNlIG5leHQgcGFydGlhbCBzdGF0ZSB0byBiZSBtZXJnZWQgd2l0aCBjdXJyZW50IHN0YXRlLlxuICogQHBhcmFtIHs/ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCBhZnRlciBzdGF0ZSBpcyB1cGRhdGVkLlxuICogQGZpbmFsXG4gKiBAcHJvdGVjdGVkXG4gKi9cblxuQ29tcG9uZW50LnByb3RvdHlwZS5zZXRTdGF0ZSA9IGZ1bmN0aW9uIChwYXJ0aWFsU3RhdGUsIGNhbGxiYWNrKSB7XG4gIGlmICghKHR5cGVvZiBwYXJ0aWFsU3RhdGUgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBwYXJ0aWFsU3RhdGUgPT09ICdmdW5jdGlvbicgfHwgcGFydGlhbFN0YXRlID09IG51bGwpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwic2V0U3RhdGUoLi4uKTogdGFrZXMgYW4gb2JqZWN0IG9mIHN0YXRlIHZhcmlhYmxlcyB0byB1cGRhdGUgb3IgYSBmdW5jdGlvbiB3aGljaCByZXR1cm5zIGFuIG9iamVjdCBvZiBzdGF0ZSB2YXJpYWJsZXMuXCIgKTtcbiAgICB9XG4gIH1cblxuICB0aGlzLnVwZGF0ZXIuZW5xdWV1ZVNldFN0YXRlKHRoaXMsIHBhcnRpYWxTdGF0ZSwgY2FsbGJhY2ssICdzZXRTdGF0ZScpO1xufTtcbi8qKlxuICogRm9yY2VzIGFuIHVwZGF0ZS4gVGhpcyBzaG91bGQgb25seSBiZSBpbnZva2VkIHdoZW4gaXQgaXMga25vd24gd2l0aFxuICogY2VydGFpbnR5IHRoYXQgd2UgYXJlICoqbm90KiogaW4gYSBET00gdHJhbnNhY3Rpb24uXG4gKlxuICogWW91IG1heSB3YW50IHRvIGNhbGwgdGhpcyB3aGVuIHlvdSBrbm93IHRoYXQgc29tZSBkZWVwZXIgYXNwZWN0IG9mIHRoZVxuICogY29tcG9uZW50J3Mgc3RhdGUgaGFzIGNoYW5nZWQgYnV0IGBzZXRTdGF0ZWAgd2FzIG5vdCBjYWxsZWQuXG4gKlxuICogVGhpcyB3aWxsIG5vdCBpbnZva2UgYHNob3VsZENvbXBvbmVudFVwZGF0ZWAsIGJ1dCBpdCB3aWxsIGludm9rZVxuICogYGNvbXBvbmVudFdpbGxVcGRhdGVgIGFuZCBgY29tcG9uZW50RGlkVXBkYXRlYC5cbiAqXG4gKiBAcGFyYW0gez9mdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGVkIGFmdGVyIHVwZGF0ZSBpcyBjb21wbGV0ZS5cbiAqIEBmaW5hbFxuICogQHByb3RlY3RlZFxuICovXG5cblxuQ29tcG9uZW50LnByb3RvdHlwZS5mb3JjZVVwZGF0ZSA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICB0aGlzLnVwZGF0ZXIuZW5xdWV1ZUZvcmNlVXBkYXRlKHRoaXMsIGNhbGxiYWNrLCAnZm9yY2VVcGRhdGUnKTtcbn07XG4vKipcbiAqIERlcHJlY2F0ZWQgQVBJcy4gVGhlc2UgQVBJcyB1c2VkIHRvIGV4aXN0IG9uIGNsYXNzaWMgUmVhY3QgY2xhc3NlcyBidXQgc2luY2VcbiAqIHdlIHdvdWxkIGxpa2UgdG8gZGVwcmVjYXRlIHRoZW0sIHdlJ3JlIG5vdCBnb2luZyB0byBtb3ZlIHRoZW0gb3ZlciB0byB0aGlzXG4gKiBtb2Rlcm4gYmFzZSBjbGFzcy4gSW5zdGVhZCwgd2UgZGVmaW5lIGEgZ2V0dGVyIHRoYXQgd2FybnMgaWYgaXQncyBhY2Nlc3NlZC5cbiAqL1xuXG5cbntcbiAgdmFyIGRlcHJlY2F0ZWRBUElzID0ge1xuICAgIGlzTW91bnRlZDogWydpc01vdW50ZWQnLCAnSW5zdGVhZCwgbWFrZSBzdXJlIHRvIGNsZWFuIHVwIHN1YnNjcmlwdGlvbnMgYW5kIHBlbmRpbmcgcmVxdWVzdHMgaW4gJyArICdjb21wb25lbnRXaWxsVW5tb3VudCB0byBwcmV2ZW50IG1lbW9yeSBsZWFrcy4nXSxcbiAgICByZXBsYWNlU3RhdGU6IFsncmVwbGFjZVN0YXRlJywgJ1JlZmFjdG9yIHlvdXIgY29kZSB0byB1c2Ugc2V0U3RhdGUgaW5zdGVhZCAoc2VlICcgKyAnaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8zMjM2KS4nXVxuICB9O1xuXG4gIHZhciBkZWZpbmVEZXByZWNhdGlvbldhcm5pbmcgPSBmdW5jdGlvbiAobWV0aG9kTmFtZSwgaW5mbykge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb21wb25lbnQucHJvdG90eXBlLCBtZXRob2ROYW1lLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgd2FybignJXMoLi4uKSBpcyBkZXByZWNhdGVkIGluIHBsYWluIEphdmFTY3JpcHQgUmVhY3QgY2xhc3Nlcy4gJXMnLCBpbmZvWzBdLCBpbmZvWzFdKTtcblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIGZvciAodmFyIGZuTmFtZSBpbiBkZXByZWNhdGVkQVBJcykge1xuICAgIGlmIChkZXByZWNhdGVkQVBJcy5oYXNPd25Qcm9wZXJ0eShmbk5hbWUpKSB7XG4gICAgICBkZWZpbmVEZXByZWNhdGlvbldhcm5pbmcoZm5OYW1lLCBkZXByZWNhdGVkQVBJc1tmbk5hbWVdKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gQ29tcG9uZW50RHVtbXkoKSB7fVxuXG5Db21wb25lbnREdW1teS5wcm90b3R5cGUgPSBDb21wb25lbnQucHJvdG90eXBlO1xuLyoqXG4gKiBDb252ZW5pZW5jZSBjb21wb25lbnQgd2l0aCBkZWZhdWx0IHNoYWxsb3cgZXF1YWxpdHkgY2hlY2sgZm9yIHNDVS5cbiAqL1xuXG5mdW5jdGlvbiBQdXJlQ29tcG9uZW50KHByb3BzLCBjb250ZXh0LCB1cGRhdGVyKSB7XG4gIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgdGhpcy5jb250ZXh0ID0gY29udGV4dDsgLy8gSWYgYSBjb21wb25lbnQgaGFzIHN0cmluZyByZWZzLCB3ZSB3aWxsIGFzc2lnbiBhIGRpZmZlcmVudCBvYmplY3QgbGF0ZXIuXG5cbiAgdGhpcy5yZWZzID0gZW1wdHlPYmplY3Q7XG4gIHRoaXMudXBkYXRlciA9IHVwZGF0ZXIgfHwgUmVhY3ROb29wVXBkYXRlUXVldWU7XG59XG5cbnZhciBwdXJlQ29tcG9uZW50UHJvdG90eXBlID0gUHVyZUNvbXBvbmVudC5wcm90b3R5cGUgPSBuZXcgQ29tcG9uZW50RHVtbXkoKTtcbnB1cmVDb21wb25lbnRQcm90b3R5cGUuY29uc3RydWN0b3IgPSBQdXJlQ29tcG9uZW50OyAvLyBBdm9pZCBhbiBleHRyYSBwcm90b3R5cGUganVtcCBmb3IgdGhlc2UgbWV0aG9kcy5cblxuX2Fzc2lnbihwdXJlQ29tcG9uZW50UHJvdG90eXBlLCBDb21wb25lbnQucHJvdG90eXBlKTtcblxucHVyZUNvbXBvbmVudFByb3RvdHlwZS5pc1B1cmVSZWFjdENvbXBvbmVudCA9IHRydWU7XG5cbi8vIGFuIGltbXV0YWJsZSBvYmplY3Qgd2l0aCBhIHNpbmdsZSBtdXRhYmxlIHZhbHVlXG5mdW5jdGlvbiBjcmVhdGVSZWYoKSB7XG4gIHZhciByZWZPYmplY3QgPSB7XG4gICAgY3VycmVudDogbnVsbFxuICB9O1xuXG4gIHtcbiAgICBPYmplY3Quc2VhbChyZWZPYmplY3QpO1xuICB9XG5cbiAgcmV0dXJuIHJlZk9iamVjdDtcbn1cblxuZnVuY3Rpb24gZ2V0V3JhcHBlZE5hbWUob3V0ZXJUeXBlLCBpbm5lclR5cGUsIHdyYXBwZXJOYW1lKSB7XG4gIHZhciBmdW5jdGlvbk5hbWUgPSBpbm5lclR5cGUuZGlzcGxheU5hbWUgfHwgaW5uZXJUeXBlLm5hbWUgfHwgJyc7XG4gIHJldHVybiBvdXRlclR5cGUuZGlzcGxheU5hbWUgfHwgKGZ1bmN0aW9uTmFtZSAhPT0gJycgPyB3cmFwcGVyTmFtZSArIFwiKFwiICsgZnVuY3Rpb25OYW1lICsgXCIpXCIgOiB3cmFwcGVyTmFtZSk7XG59XG5cbmZ1bmN0aW9uIGdldENvbnRleHROYW1lKHR5cGUpIHtcbiAgcmV0dXJuIHR5cGUuZGlzcGxheU5hbWUgfHwgJ0NvbnRleHQnO1xufVxuXG5mdW5jdGlvbiBnZXRDb21wb25lbnROYW1lKHR5cGUpIHtcbiAgaWYgKHR5cGUgPT0gbnVsbCkge1xuICAgIC8vIEhvc3Qgcm9vdCwgdGV4dCBub2RlIG9yIGp1c3QgaW52YWxpZCB0eXBlLlxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAge1xuICAgIGlmICh0eXBlb2YgdHlwZS50YWcgPT09ICdudW1iZXInKSB7XG4gICAgICBlcnJvcignUmVjZWl2ZWQgYW4gdW5leHBlY3RlZCBvYmplY3QgaW4gZ2V0Q29tcG9uZW50TmFtZSgpLiAnICsgJ1RoaXMgaXMgbGlrZWx5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdHlwZS5kaXNwbGF5TmFtZSB8fCB0eXBlLm5hbWUgfHwgbnVsbDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdHlwZTtcbiAgfVxuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgZXhwb3J0cy5GcmFnbWVudDpcbiAgICAgIHJldHVybiAnRnJhZ21lbnQnO1xuXG4gICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgIHJldHVybiAnUG9ydGFsJztcblxuICAgIGNhc2UgZXhwb3J0cy5Qcm9maWxlcjpcbiAgICAgIHJldHVybiAnUHJvZmlsZXInO1xuXG4gICAgY2FzZSBleHBvcnRzLlN0cmljdE1vZGU6XG4gICAgICByZXR1cm4gJ1N0cmljdE1vZGUnO1xuXG4gICAgY2FzZSBleHBvcnRzLlN1c3BlbnNlOlxuICAgICAgcmV0dXJuICdTdXNwZW5zZSc7XG5cbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgIHJldHVybiAnU3VzcGVuc2VMaXN0JztcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICBzd2l0Y2ggKHR5cGUuJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfQ09OVEVYVF9UWVBFOlxuICAgICAgICB2YXIgY29udGV4dCA9IHR5cGU7XG4gICAgICAgIHJldHVybiBnZXRDb250ZXh0TmFtZShjb250ZXh0KSArICcuQ29uc3VtZXInO1xuXG4gICAgICBjYXNlIFJFQUNUX1BST1ZJREVSX1RZUEU6XG4gICAgICAgIHZhciBwcm92aWRlciA9IHR5cGU7XG4gICAgICAgIHJldHVybiBnZXRDb250ZXh0TmFtZShwcm92aWRlci5fY29udGV4dCkgKyAnLlByb3ZpZGVyJztcblxuICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICByZXR1cm4gZ2V0V3JhcHBlZE5hbWUodHlwZSwgdHlwZS5yZW5kZXIsICdGb3J3YXJkUmVmJyk7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZSh0eXBlLnR5cGUpO1xuXG4gICAgICBjYXNlIFJFQUNUX0JMT0NLX1RZUEU6XG4gICAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lKHR5cGUuX3JlbmRlcik7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIGxhenlDb21wb25lbnQgPSB0eXBlO1xuICAgICAgICAgIHZhciBwYXlsb2FkID0gbGF6eUNvbXBvbmVudC5fcGF5bG9hZDtcbiAgICAgICAgICB2YXIgaW5pdCA9IGxhenlDb21wb25lbnQuX2luaXQ7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWUoaW5pdChwYXlsb2FkKSk7XG4gICAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgUkVTRVJWRURfUFJPUFMgPSB7XG4gIGtleTogdHJ1ZSxcbiAgcmVmOiB0cnVlLFxuICBfX3NlbGY6IHRydWUsXG4gIF9fc291cmNlOiB0cnVlXG59O1xudmFyIHNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duLCBzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93biwgZGlkV2FybkFib3V0U3RyaW5nUmVmcztcblxue1xuICBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzID0ge307XG59XG5cbmZ1bmN0aW9uIGhhc1ZhbGlkUmVmKGNvbmZpZykge1xuICB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCAncmVmJykpIHtcbiAgICAgIHZhciBnZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGNvbmZpZywgJ3JlZicpLmdldDtcblxuICAgICAgaWYgKGdldHRlciAmJiBnZXR0ZXIuaXNSZWFjdFdhcm5pbmcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb25maWcucmVmICE9PSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGhhc1ZhbGlkS2V5KGNvbmZpZykge1xuICB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCAna2V5JykpIHtcbiAgICAgIHZhciBnZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGNvbmZpZywgJ2tleScpLmdldDtcblxuICAgICAgaWYgKGdldHRlciAmJiBnZXR0ZXIuaXNSZWFjdFdhcm5pbmcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb25maWcua2V5ICE9PSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGRlZmluZUtleVByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSkge1xuICB2YXIgd2FybkFib3V0QWNjZXNzaW5nS2V5ID0gZnVuY3Rpb24gKCkge1xuICAgIHtcbiAgICAgIGlmICghc3BlY2lhbFByb3BLZXlXYXJuaW5nU2hvd24pIHtcbiAgICAgICAgc3BlY2lhbFByb3BLZXlXYXJuaW5nU2hvd24gPSB0cnVlO1xuXG4gICAgICAgIGVycm9yKCclczogYGtleWAgaXMgbm90IGEgcHJvcC4gVHJ5aW5nIHRvIGFjY2VzcyBpdCB3aWxsIHJlc3VsdCAnICsgJ2luIGB1bmRlZmluZWRgIGJlaW5nIHJldHVybmVkLiBJZiB5b3UgbmVlZCB0byBhY2Nlc3MgdGhlIHNhbWUgJyArICd2YWx1ZSB3aXRoaW4gdGhlIGNoaWxkIGNvbXBvbmVudCwgeW91IHNob3VsZCBwYXNzIGl0IGFzIGEgZGlmZmVyZW50ICcgKyAncHJvcC4gKGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9zcGVjaWFsLXByb3BzKScsIGRpc3BsYXlOYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgd2FybkFib3V0QWNjZXNzaW5nS2V5LmlzUmVhY3RXYXJuaW5nID0gdHJ1ZTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3BzLCAna2V5Jywge1xuICAgIGdldDogd2FybkFib3V0QWNjZXNzaW5nS2V5LFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KTtcbn1cblxuZnVuY3Rpb24gZGVmaW5lUmVmUHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKSB7XG4gIHZhciB3YXJuQWJvdXRBY2Nlc3NpbmdSZWYgPSBmdW5jdGlvbiAoKSB7XG4gICAge1xuICAgICAgaWYgKCFzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93bikge1xuICAgICAgICBzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93biA9IHRydWU7XG5cbiAgICAgICAgZXJyb3IoJyVzOiBgcmVmYCBpcyBub3QgYSBwcm9wLiBUcnlpbmcgdG8gYWNjZXNzIGl0IHdpbGwgcmVzdWx0ICcgKyAnaW4gYHVuZGVmaW5lZGAgYmVpbmcgcmV0dXJuZWQuIElmIHlvdSBuZWVkIHRvIGFjY2VzcyB0aGUgc2FtZSAnICsgJ3ZhbHVlIHdpdGhpbiB0aGUgY2hpbGQgY29tcG9uZW50LCB5b3Ugc2hvdWxkIHBhc3MgaXQgYXMgYSBkaWZmZXJlbnQgJyArICdwcm9wLiAoaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3NwZWNpYWwtcHJvcHMpJywgZGlzcGxheU5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICB3YXJuQWJvdXRBY2Nlc3NpbmdSZWYuaXNSZWFjdFdhcm5pbmcgPSB0cnVlO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvcHMsICdyZWYnLCB7XG4gICAgZ2V0OiB3YXJuQWJvdXRBY2Nlc3NpbmdSZWYsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pO1xufVxuXG5mdW5jdGlvbiB3YXJuSWZTdHJpbmdSZWZDYW5ub3RCZUF1dG9Db252ZXJ0ZWQoY29uZmlnKSB7XG4gIHtcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5yZWYgPT09ICdzdHJpbmcnICYmIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQgJiYgY29uZmlnLl9fc2VsZiAmJiBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LnN0YXRlTm9kZSAhPT0gY29uZmlnLl9fc2VsZikge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQudHlwZSk7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0U3RyaW5nUmVmc1tjb21wb25lbnROYW1lXSkge1xuICAgICAgICBlcnJvcignQ29tcG9uZW50IFwiJXNcIiBjb250YWlucyB0aGUgc3RyaW5nIHJlZiBcIiVzXCIuICcgKyAnU3VwcG9ydCBmb3Igc3RyaW5nIHJlZnMgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIG1ham9yIHJlbGVhc2UuICcgKyAnVGhpcyBjYXNlIGNhbm5vdCBiZSBhdXRvbWF0aWNhbGx5IGNvbnZlcnRlZCB0byBhbiBhcnJvdyBmdW5jdGlvbi4gJyArICdXZSBhc2sgeW91IHRvIG1hbnVhbGx5IGZpeCB0aGlzIGNhc2UgYnkgdXNpbmcgdXNlUmVmKCkgb3IgY3JlYXRlUmVmKCkgaW5zdGVhZC4gJyArICdMZWFybiBtb3JlIGFib3V0IHVzaW5nIHJlZnMgc2FmZWx5IGhlcmU6ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3N0cmljdC1tb2RlLXN0cmluZy1yZWYnLCBjb21wb25lbnROYW1lLCBjb25maWcucmVmKTtcblxuICAgICAgICBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzW2NvbXBvbmVudE5hbWVdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbi8qKlxuICogRmFjdG9yeSBtZXRob2QgdG8gY3JlYXRlIGEgbmV3IFJlYWN0IGVsZW1lbnQuIFRoaXMgbm8gbG9uZ2VyIGFkaGVyZXMgdG9cbiAqIHRoZSBjbGFzcyBwYXR0ZXJuLCBzbyBkbyBub3QgdXNlIG5ldyB0byBjYWxsIGl0LiBBbHNvLCBpbnN0YW5jZW9mIGNoZWNrXG4gKiB3aWxsIG5vdCB3b3JrLiBJbnN0ZWFkIHRlc3QgJCR0eXBlb2YgZmllbGQgYWdhaW5zdCBTeW1ib2wuZm9yKCdyZWFjdC5lbGVtZW50JykgdG8gY2hlY2tcbiAqIGlmIHNvbWV0aGluZyBpcyBhIFJlYWN0IEVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHsqfSB0eXBlXG4gKiBAcGFyYW0geyp9IHByb3BzXG4gKiBAcGFyYW0geyp9IGtleVxuICogQHBhcmFtIHtzdHJpbmd8b2JqZWN0fSByZWZcbiAqIEBwYXJhbSB7Kn0gb3duZXJcbiAqIEBwYXJhbSB7Kn0gc2VsZiBBICp0ZW1wb3JhcnkqIGhlbHBlciB0byBkZXRlY3QgcGxhY2VzIHdoZXJlIGB0aGlzYCBpc1xuICogZGlmZmVyZW50IGZyb20gdGhlIGBvd25lcmAgd2hlbiBSZWFjdC5jcmVhdGVFbGVtZW50IGlzIGNhbGxlZCwgc28gdGhhdCB3ZVxuICogY2FuIHdhcm4uIFdlIHdhbnQgdG8gZ2V0IHJpZCBvZiBvd25lciBhbmQgcmVwbGFjZSBzdHJpbmcgYHJlZmBzIHdpdGggYXJyb3dcbiAqIGZ1bmN0aW9ucywgYW5kIGFzIGxvbmcgYXMgYHRoaXNgIGFuZCBvd25lciBhcmUgdGhlIHNhbWUsIHRoZXJlIHdpbGwgYmUgbm9cbiAqIGNoYW5nZSBpbiBiZWhhdmlvci5cbiAqIEBwYXJhbSB7Kn0gc291cmNlIEFuIGFubm90YXRpb24gb2JqZWN0IChhZGRlZCBieSBhIHRyYW5zcGlsZXIgb3Igb3RoZXJ3aXNlKVxuICogaW5kaWNhdGluZyBmaWxlbmFtZSwgbGluZSBudW1iZXIsIGFuZC9vciBvdGhlciBpbmZvcm1hdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG5cblxudmFyIFJlYWN0RWxlbWVudCA9IGZ1bmN0aW9uICh0eXBlLCBrZXksIHJlZiwgc2VsZiwgc291cmNlLCBvd25lciwgcHJvcHMpIHtcbiAgdmFyIGVsZW1lbnQgPSB7XG4gICAgLy8gVGhpcyB0YWcgYWxsb3dzIHVzIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IHRoaXMgYXMgYSBSZWFjdCBFbGVtZW50XG4gICAgJCR0eXBlb2Y6IFJFQUNUX0VMRU1FTlRfVFlQRSxcbiAgICAvLyBCdWlsdC1pbiBwcm9wZXJ0aWVzIHRoYXQgYmVsb25nIG9uIHRoZSBlbGVtZW50XG4gICAgdHlwZTogdHlwZSxcbiAgICBrZXk6IGtleSxcbiAgICByZWY6IHJlZixcbiAgICBwcm9wczogcHJvcHMsXG4gICAgLy8gUmVjb3JkIHRoZSBjb21wb25lbnQgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIHRoaXMgZWxlbWVudC5cbiAgICBfb3duZXI6IG93bmVyXG4gIH07XG5cbiAge1xuICAgIC8vIFRoZSB2YWxpZGF0aW9uIGZsYWcgaXMgY3VycmVudGx5IG11dGF0aXZlLiBXZSBwdXQgaXQgb25cbiAgICAvLyBhbiBleHRlcm5hbCBiYWNraW5nIHN0b3JlIHNvIHRoYXQgd2UgY2FuIGZyZWV6ZSB0aGUgd2hvbGUgb2JqZWN0LlxuICAgIC8vIFRoaXMgY2FuIGJlIHJlcGxhY2VkIHdpdGggYSBXZWFrTWFwIG9uY2UgdGhleSBhcmUgaW1wbGVtZW50ZWQgaW5cbiAgICAvLyBjb21tb25seSB1c2VkIGRldmVsb3BtZW50IGVudmlyb25tZW50cy5cbiAgICBlbGVtZW50Ll9zdG9yZSA9IHt9OyAvLyBUbyBtYWtlIGNvbXBhcmluZyBSZWFjdEVsZW1lbnRzIGVhc2llciBmb3IgdGVzdGluZyBwdXJwb3Nlcywgd2UgbWFrZVxuICAgIC8vIHRoZSB2YWxpZGF0aW9uIGZsYWcgbm9uLWVudW1lcmFibGUgKHdoZXJlIHBvc3NpYmxlLCB3aGljaCBzaG91bGRcbiAgICAvLyBpbmNsdWRlIGV2ZXJ5IGVudmlyb25tZW50IHdlIHJ1biB0ZXN0cyBpbiksIHNvIHRoZSB0ZXN0IGZyYW1ld29ya1xuICAgIC8vIGlnbm9yZXMgaXQuXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudC5fc3RvcmUsICd2YWxpZGF0ZWQnLCB7XG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIHZhbHVlOiBmYWxzZVxuICAgIH0pOyAvLyBzZWxmIGFuZCBzb3VyY2UgYXJlIERFViBvbmx5IHByb3BlcnRpZXMuXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudCwgJ19zZWxmJywge1xuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgdmFsdWU6IHNlbGZcbiAgICB9KTsgLy8gVHdvIGVsZW1lbnRzIGNyZWF0ZWQgaW4gdHdvIGRpZmZlcmVudCBwbGFjZXMgc2hvdWxkIGJlIGNvbnNpZGVyZWRcbiAgICAvLyBlcXVhbCBmb3IgdGVzdGluZyBwdXJwb3NlcyBhbmQgdGhlcmVmb3JlIHdlIGhpZGUgaXQgZnJvbSBlbnVtZXJhdGlvbi5cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50LCAnX3NvdXJjZScsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIHZhbHVlOiBzb3VyY2VcbiAgICB9KTtcblxuICAgIGlmIChPYmplY3QuZnJlZXplKSB7XG4gICAgICBPYmplY3QuZnJlZXplKGVsZW1lbnQucHJvcHMpO1xuICAgICAgT2JqZWN0LmZyZWV6ZShlbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZWxlbWVudDtcbn07XG4vKipcbiAqIENyZWF0ZSBhbmQgcmV0dXJuIGEgbmV3IFJlYWN0RWxlbWVudCBvZiB0aGUgZ2l2ZW4gdHlwZS5cbiAqIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjY3JlYXRlZWxlbWVudFxuICovXG5cbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQodHlwZSwgY29uZmlnLCBjaGlsZHJlbikge1xuICB2YXIgcHJvcE5hbWU7IC8vIFJlc2VydmVkIG5hbWVzIGFyZSBleHRyYWN0ZWRcblxuICB2YXIgcHJvcHMgPSB7fTtcbiAgdmFyIGtleSA9IG51bGw7XG4gIHZhciByZWYgPSBudWxsO1xuICB2YXIgc2VsZiA9IG51bGw7XG4gIHZhciBzb3VyY2UgPSBudWxsO1xuXG4gIGlmIChjb25maWcgIT0gbnVsbCkge1xuICAgIGlmIChoYXNWYWxpZFJlZihjb25maWcpKSB7XG4gICAgICByZWYgPSBjb25maWcucmVmO1xuXG4gICAgICB7XG4gICAgICAgIHdhcm5JZlN0cmluZ1JlZkNhbm5vdEJlQXV0b0NvbnZlcnRlZChjb25maWcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChoYXNWYWxpZEtleShjb25maWcpKSB7XG4gICAgICBrZXkgPSAnJyArIGNvbmZpZy5rZXk7XG4gICAgfVxuXG4gICAgc2VsZiA9IGNvbmZpZy5fX3NlbGYgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBjb25maWcuX19zZWxmO1xuICAgIHNvdXJjZSA9IGNvbmZpZy5fX3NvdXJjZSA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGNvbmZpZy5fX3NvdXJjZTsgLy8gUmVtYWluaW5nIHByb3BlcnRpZXMgYXJlIGFkZGVkIHRvIGEgbmV3IHByb3BzIG9iamVjdFxuXG4gICAgZm9yIChwcm9wTmFtZSBpbiBjb25maWcpIHtcbiAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgcHJvcE5hbWUpICYmICFSRVNFUlZFRF9QUk9QUy5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSkpIHtcbiAgICAgICAgcHJvcHNbcHJvcE5hbWVdID0gY29uZmlnW3Byb3BOYW1lXTtcbiAgICAgIH1cbiAgICB9XG4gIH0gLy8gQ2hpbGRyZW4gY2FuIGJlIG1vcmUgdGhhbiBvbmUgYXJndW1lbnQsIGFuZCB0aG9zZSBhcmUgdHJhbnNmZXJyZWQgb250b1xuICAvLyB0aGUgbmV3bHkgYWxsb2NhdGVkIHByb3BzIG9iamVjdC5cblxuXG4gIHZhciBjaGlsZHJlbkxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGggLSAyO1xuXG4gIGlmIChjaGlsZHJlbkxlbmd0aCA9PT0gMSkge1xuICAgIHByb3BzLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gIH0gZWxzZSBpZiAoY2hpbGRyZW5MZW5ndGggPiAxKSB7XG4gICAgdmFyIGNoaWxkQXJyYXkgPSBBcnJheShjaGlsZHJlbkxlbmd0aCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuTGVuZ3RoOyBpKyspIHtcbiAgICAgIGNoaWxkQXJyYXlbaV0gPSBhcmd1bWVudHNbaSArIDJdO1xuICAgIH1cblxuICAgIHtcbiAgICAgIGlmIChPYmplY3QuZnJlZXplKSB7XG4gICAgICAgIE9iamVjdC5mcmVlemUoY2hpbGRBcnJheSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHJvcHMuY2hpbGRyZW4gPSBjaGlsZEFycmF5O1xuICB9IC8vIFJlc29sdmUgZGVmYXVsdCBwcm9wc1xuXG5cbiAgaWYgKHR5cGUgJiYgdHlwZS5kZWZhdWx0UHJvcHMpIHtcbiAgICB2YXIgZGVmYXVsdFByb3BzID0gdHlwZS5kZWZhdWx0UHJvcHM7XG5cbiAgICBmb3IgKHByb3BOYW1lIGluIGRlZmF1bHRQcm9wcykge1xuICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHByb3BzW3Byb3BOYW1lXSA9IGRlZmF1bHRQcm9wc1twcm9wTmFtZV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAge1xuICAgIGlmIChrZXkgfHwgcmVmKSB7XG4gICAgICB2YXIgZGlzcGxheU5hbWUgPSB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJyA/IHR5cGUuZGlzcGxheU5hbWUgfHwgdHlwZS5uYW1lIHx8ICdVbmtub3duJyA6IHR5cGU7XG5cbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgZGVmaW5lS2V5UHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlZikge1xuICAgICAgICBkZWZpbmVSZWZQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBSZWFjdEVsZW1lbnQodHlwZSwga2V5LCByZWYsIHNlbGYsIHNvdXJjZSwgUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCwgcHJvcHMpO1xufVxuZnVuY3Rpb24gY2xvbmVBbmRSZXBsYWNlS2V5KG9sZEVsZW1lbnQsIG5ld0tleSkge1xuICB2YXIgbmV3RWxlbWVudCA9IFJlYWN0RWxlbWVudChvbGRFbGVtZW50LnR5cGUsIG5ld0tleSwgb2xkRWxlbWVudC5yZWYsIG9sZEVsZW1lbnQuX3NlbGYsIG9sZEVsZW1lbnQuX3NvdXJjZSwgb2xkRWxlbWVudC5fb3duZXIsIG9sZEVsZW1lbnQucHJvcHMpO1xuICByZXR1cm4gbmV3RWxlbWVudDtcbn1cbi8qKlxuICogQ2xvbmUgYW5kIHJldHVybiBhIG5ldyBSZWFjdEVsZW1lbnQgdXNpbmcgZWxlbWVudCBhcyB0aGUgc3RhcnRpbmcgcG9pbnQuXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI2Nsb25lZWxlbWVudFxuICovXG5cbmZ1bmN0aW9uIGNsb25lRWxlbWVudChlbGVtZW50LCBjb25maWcsIGNoaWxkcmVuKSB7XG4gIGlmICghIShlbGVtZW50ID09PSBudWxsIHx8IGVsZW1lbnQgPT09IHVuZGVmaW5lZCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJSZWFjdC5jbG9uZUVsZW1lbnQoLi4uKTogVGhlIGFyZ3VtZW50IG11c3QgYmUgYSBSZWFjdCBlbGVtZW50LCBidXQgeW91IHBhc3NlZCBcIiArIGVsZW1lbnQgKyBcIi5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHZhciBwcm9wTmFtZTsgLy8gT3JpZ2luYWwgcHJvcHMgYXJlIGNvcGllZFxuXG4gIHZhciBwcm9wcyA9IF9hc3NpZ24oe30sIGVsZW1lbnQucHJvcHMpOyAvLyBSZXNlcnZlZCBuYW1lcyBhcmUgZXh0cmFjdGVkXG5cblxuICB2YXIga2V5ID0gZWxlbWVudC5rZXk7XG4gIHZhciByZWYgPSBlbGVtZW50LnJlZjsgLy8gU2VsZiBpcyBwcmVzZXJ2ZWQgc2luY2UgdGhlIG93bmVyIGlzIHByZXNlcnZlZC5cblxuICB2YXIgc2VsZiA9IGVsZW1lbnQuX3NlbGY7IC8vIFNvdXJjZSBpcyBwcmVzZXJ2ZWQgc2luY2UgY2xvbmVFbGVtZW50IGlzIHVubGlrZWx5IHRvIGJlIHRhcmdldGVkIGJ5IGFcbiAgLy8gdHJhbnNwaWxlciwgYW5kIHRoZSBvcmlnaW5hbCBzb3VyY2UgaXMgcHJvYmFibHkgYSBiZXR0ZXIgaW5kaWNhdG9yIG9mIHRoZVxuICAvLyB0cnVlIG93bmVyLlxuXG4gIHZhciBzb3VyY2UgPSBlbGVtZW50Ll9zb3VyY2U7IC8vIE93bmVyIHdpbGwgYmUgcHJlc2VydmVkLCB1bmxlc3MgcmVmIGlzIG92ZXJyaWRkZW5cblxuICB2YXIgb3duZXIgPSBlbGVtZW50Ll9vd25lcjtcblxuICBpZiAoY29uZmlnICE9IG51bGwpIHtcbiAgICBpZiAoaGFzVmFsaWRSZWYoY29uZmlnKSkge1xuICAgICAgLy8gU2lsZW50bHkgc3RlYWwgdGhlIHJlZiBmcm9tIHRoZSBwYXJlbnQuXG4gICAgICByZWYgPSBjb25maWcucmVmO1xuICAgICAgb3duZXIgPSBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50O1xuICAgIH1cblxuICAgIGlmIChoYXNWYWxpZEtleShjb25maWcpKSB7XG4gICAgICBrZXkgPSAnJyArIGNvbmZpZy5rZXk7XG4gICAgfSAvLyBSZW1haW5pbmcgcHJvcGVydGllcyBvdmVycmlkZSBleGlzdGluZyBwcm9wc1xuXG5cbiAgICB2YXIgZGVmYXVsdFByb3BzO1xuXG4gICAgaWYgKGVsZW1lbnQudHlwZSAmJiBlbGVtZW50LnR5cGUuZGVmYXVsdFByb3BzKSB7XG4gICAgICBkZWZhdWx0UHJvcHMgPSBlbGVtZW50LnR5cGUuZGVmYXVsdFByb3BzO1xuICAgIH1cblxuICAgIGZvciAocHJvcE5hbWUgaW4gY29uZmlnKSB7XG4gICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsIHByb3BOYW1lKSAmJiAhUkVTRVJWRURfUFJPUFMuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSB7XG4gICAgICAgIGlmIChjb25maWdbcHJvcE5hbWVdID09PSB1bmRlZmluZWQgJiYgZGVmYXVsdFByb3BzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyBSZXNvbHZlIGRlZmF1bHQgcHJvcHNcbiAgICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBkZWZhdWx0UHJvcHNbcHJvcE5hbWVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByb3BzW3Byb3BOYW1lXSA9IGNvbmZpZ1twcm9wTmFtZV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gLy8gQ2hpbGRyZW4gY2FuIGJlIG1vcmUgdGhhbiBvbmUgYXJndW1lbnQsIGFuZCB0aG9zZSBhcmUgdHJhbnNmZXJyZWQgb250b1xuICAvLyB0aGUgbmV3bHkgYWxsb2NhdGVkIHByb3BzIG9iamVjdC5cblxuXG4gIHZhciBjaGlsZHJlbkxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGggLSAyO1xuXG4gIGlmIChjaGlsZHJlbkxlbmd0aCA9PT0gMSkge1xuICAgIHByb3BzLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gIH0gZWxzZSBpZiAoY2hpbGRyZW5MZW5ndGggPiAxKSB7XG4gICAgdmFyIGNoaWxkQXJyYXkgPSBBcnJheShjaGlsZHJlbkxlbmd0aCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuTGVuZ3RoOyBpKyspIHtcbiAgICAgIGNoaWxkQXJyYXlbaV0gPSBhcmd1bWVudHNbaSArIDJdO1xuICAgIH1cblxuICAgIHByb3BzLmNoaWxkcmVuID0gY2hpbGRBcnJheTtcbiAgfVxuXG4gIHJldHVybiBSZWFjdEVsZW1lbnQoZWxlbWVudC50eXBlLCBrZXksIHJlZiwgc2VsZiwgc291cmNlLCBvd25lciwgcHJvcHMpO1xufVxuLyoqXG4gKiBWZXJpZmllcyB0aGUgb2JqZWN0IGlzIGEgUmVhY3RFbGVtZW50LlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNpc3ZhbGlkZWxlbWVudFxuICogQHBhcmFtIHs/b2JqZWN0fSBvYmplY3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgYG9iamVjdGAgaXMgYSBSZWFjdEVsZW1lbnQuXG4gKiBAZmluYWxcbiAqL1xuXG5mdW5jdGlvbiBpc1ZhbGlkRWxlbWVudChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCAmJiBvYmplY3QuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRTtcbn1cblxudmFyIFNFUEFSQVRPUiA9ICcuJztcbnZhciBTVUJTRVBBUkFUT1IgPSAnOic7XG4vKipcbiAqIEVzY2FwZSBhbmQgd3JhcCBrZXkgc28gaXQgaXMgc2FmZSB0byB1c2UgYXMgYSByZWFjdGlkXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSB0byBiZSBlc2NhcGVkLlxuICogQHJldHVybiB7c3RyaW5nfSB0aGUgZXNjYXBlZCBrZXkuXG4gKi9cblxuZnVuY3Rpb24gZXNjYXBlKGtleSkge1xuICB2YXIgZXNjYXBlUmVnZXggPSAvWz06XS9nO1xuICB2YXIgZXNjYXBlckxvb2t1cCA9IHtcbiAgICAnPSc6ICc9MCcsXG4gICAgJzonOiAnPTInXG4gIH07XG4gIHZhciBlc2NhcGVkU3RyaW5nID0ga2V5LnJlcGxhY2UoZXNjYXBlUmVnZXgsIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgIHJldHVybiBlc2NhcGVyTG9va3VwW21hdGNoXTtcbiAgfSk7XG4gIHJldHVybiAnJCcgKyBlc2NhcGVkU3RyaW5nO1xufVxuLyoqXG4gKiBUT0RPOiBUZXN0IHRoYXQgYSBzaW5nbGUgY2hpbGQgYW5kIGFuIGFycmF5IHdpdGggb25lIGl0ZW0gaGF2ZSB0aGUgc2FtZSBrZXlcbiAqIHBhdHRlcm4uXG4gKi9cblxuXG52YXIgZGlkV2FybkFib3V0TWFwcyA9IGZhbHNlO1xudmFyIHVzZXJQcm92aWRlZEtleUVzY2FwZVJlZ2V4ID0gL1xcLysvZztcblxuZnVuY3Rpb24gZXNjYXBlVXNlclByb3ZpZGVkS2V5KHRleHQpIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZSh1c2VyUHJvdmlkZWRLZXlFc2NhcGVSZWdleCwgJyQmLycpO1xufVxuLyoqXG4gKiBHZW5lcmF0ZSBhIGtleSBzdHJpbmcgdGhhdCBpZGVudGlmaWVzIGEgZWxlbWVudCB3aXRoaW4gYSBzZXQuXG4gKlxuICogQHBhcmFtIHsqfSBlbGVtZW50IEEgZWxlbWVudCB0aGF0IGNvdWxkIGNvbnRhaW4gYSBtYW51YWwga2V5LlxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IEluZGV4IHRoYXQgaXMgdXNlZCBpZiBhIG1hbnVhbCBrZXkgaXMgbm90IHByb3ZpZGVkLlxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5cblxuZnVuY3Rpb24gZ2V0RWxlbWVudEtleShlbGVtZW50LCBpbmRleCkge1xuICAvLyBEbyBzb21lIHR5cGVjaGVja2luZyBoZXJlIHNpbmNlIHdlIGNhbGwgdGhpcyBibGluZGx5LiBXZSB3YW50IHRvIGVuc3VyZVxuICAvLyB0aGF0IHdlIGRvbid0IGJsb2NrIHBvdGVudGlhbCBmdXR1cmUgRVMgQVBJcy5cbiAgaWYgKHR5cGVvZiBlbGVtZW50ID09PSAnb2JqZWN0JyAmJiBlbGVtZW50ICE9PSBudWxsICYmIGVsZW1lbnQua2V5ICE9IG51bGwpIHtcbiAgICAvLyBFeHBsaWNpdCBrZXlcbiAgICByZXR1cm4gZXNjYXBlKCcnICsgZWxlbWVudC5rZXkpO1xuICB9IC8vIEltcGxpY2l0IGtleSBkZXRlcm1pbmVkIGJ5IHRoZSBpbmRleCBpbiB0aGUgc2V0XG5cblxuICByZXR1cm4gaW5kZXgudG9TdHJpbmcoMzYpO1xufVxuXG5mdW5jdGlvbiBtYXBJbnRvQXJyYXkoY2hpbGRyZW4sIGFycmF5LCBlc2NhcGVkUHJlZml4LCBuYW1lU29GYXIsIGNhbGxiYWNrKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIGNoaWxkcmVuO1xuXG4gIGlmICh0eXBlID09PSAndW5kZWZpbmVkJyB8fCB0eXBlID09PSAnYm9vbGVhbicpIHtcbiAgICAvLyBBbGwgb2YgdGhlIGFib3ZlIGFyZSBwZXJjZWl2ZWQgYXMgbnVsbC5cbiAgICBjaGlsZHJlbiA9IG51bGw7XG4gIH1cblxuICB2YXIgaW52b2tlQ2FsbGJhY2sgPSBmYWxzZTtcblxuICBpZiAoY2hpbGRyZW4gPT09IG51bGwpIHtcbiAgICBpbnZva2VDYWxsYmFjayA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgaW52b2tlQ2FsbGJhY2sgPSB0cnVlO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgc3dpdGNoIChjaGlsZHJlbi4kJHR5cGVvZikge1xuICAgICAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgICAgICBpbnZva2VDYWxsYmFjayA9IHRydWU7XG4gICAgICAgIH1cblxuICAgIH1cbiAgfVxuXG4gIGlmIChpbnZva2VDYWxsYmFjaykge1xuICAgIHZhciBfY2hpbGQgPSBjaGlsZHJlbjtcbiAgICB2YXIgbWFwcGVkQ2hpbGQgPSBjYWxsYmFjayhfY2hpbGQpOyAvLyBJZiBpdCdzIHRoZSBvbmx5IGNoaWxkLCB0cmVhdCB0aGUgbmFtZSBhcyBpZiBpdCB3YXMgd3JhcHBlZCBpbiBhbiBhcnJheVxuICAgIC8vIHNvIHRoYXQgaXQncyBjb25zaXN0ZW50IGlmIHRoZSBudW1iZXIgb2YgY2hpbGRyZW4gZ3Jvd3M6XG5cbiAgICB2YXIgY2hpbGRLZXkgPSBuYW1lU29GYXIgPT09ICcnID8gU0VQQVJBVE9SICsgZ2V0RWxlbWVudEtleShfY2hpbGQsIDApIDogbmFtZVNvRmFyO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkobWFwcGVkQ2hpbGQpKSB7XG4gICAgICB2YXIgZXNjYXBlZENoaWxkS2V5ID0gJyc7XG5cbiAgICAgIGlmIChjaGlsZEtleSAhPSBudWxsKSB7XG4gICAgICAgIGVzY2FwZWRDaGlsZEtleSA9IGVzY2FwZVVzZXJQcm92aWRlZEtleShjaGlsZEtleSkgKyAnLyc7XG4gICAgICB9XG5cbiAgICAgIG1hcEludG9BcnJheShtYXBwZWRDaGlsZCwgYXJyYXksIGVzY2FwZWRDaGlsZEtleSwgJycsIGZ1bmN0aW9uIChjKSB7XG4gICAgICAgIHJldHVybiBjO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChtYXBwZWRDaGlsZCAhPSBudWxsKSB7XG4gICAgICBpZiAoaXNWYWxpZEVsZW1lbnQobWFwcGVkQ2hpbGQpKSB7XG4gICAgICAgIG1hcHBlZENoaWxkID0gY2xvbmVBbmRSZXBsYWNlS2V5KG1hcHBlZENoaWxkLCAvLyBLZWVwIGJvdGggdGhlIChtYXBwZWQpIGFuZCBvbGQga2V5cyBpZiB0aGV5IGRpZmZlciwganVzdCBhc1xuICAgICAgICAvLyB0cmF2ZXJzZUFsbENoaWxkcmVuIHVzZWQgdG8gZG8gZm9yIG9iamVjdHMgYXMgY2hpbGRyZW5cbiAgICAgICAgZXNjYXBlZFByZWZpeCArICggLy8gJEZsb3dGaXhNZSBGbG93IGluY29ycmVjdGx5IHRoaW5rcyBSZWFjdC5Qb3J0YWwgZG9lc24ndCBoYXZlIGEga2V5XG4gICAgICAgIG1hcHBlZENoaWxkLmtleSAmJiAoIV9jaGlsZCB8fCBfY2hpbGQua2V5ICE9PSBtYXBwZWRDaGlsZC5rZXkpID8gLy8gJEZsb3dGaXhNZSBGbG93IGluY29ycmVjdGx5IHRoaW5rcyBleGlzdGluZyBlbGVtZW50J3Mga2V5IGNhbiBiZSBhIG51bWJlclxuICAgICAgICBlc2NhcGVVc2VyUHJvdmlkZWRLZXkoJycgKyBtYXBwZWRDaGlsZC5rZXkpICsgJy8nIDogJycpICsgY2hpbGRLZXkpO1xuICAgICAgfVxuXG4gICAgICBhcnJheS5wdXNoKG1hcHBlZENoaWxkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIHZhciBjaGlsZDtcbiAgdmFyIG5leHROYW1lO1xuICB2YXIgc3VidHJlZUNvdW50ID0gMDsgLy8gQ291bnQgb2YgY2hpbGRyZW4gZm91bmQgaW4gdGhlIGN1cnJlbnQgc3VidHJlZS5cblxuICB2YXIgbmV4dE5hbWVQcmVmaXggPSBuYW1lU29GYXIgPT09ICcnID8gU0VQQVJBVE9SIDogbmFtZVNvRmFyICsgU1VCU0VQQVJBVE9SO1xuXG4gIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNoaWxkID0gY2hpbGRyZW5baV07XG4gICAgICBuZXh0TmFtZSA9IG5leHROYW1lUHJlZml4ICsgZ2V0RWxlbWVudEtleShjaGlsZCwgaSk7XG4gICAgICBzdWJ0cmVlQ291bnQgKz0gbWFwSW50b0FycmF5KGNoaWxkLCBhcnJheSwgZXNjYXBlZFByZWZpeCwgbmV4dE5hbWUsIGNhbGxiYWNrKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKGNoaWxkcmVuKTtcblxuICAgIGlmICh0eXBlb2YgaXRlcmF0b3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdmFyIGl0ZXJhYmxlQ2hpbGRyZW4gPSBjaGlsZHJlbjtcblxuICAgICAge1xuICAgICAgICAvLyBXYXJuIGFib3V0IHVzaW5nIE1hcHMgYXMgY2hpbGRyZW5cbiAgICAgICAgaWYgKGl0ZXJhdG9yRm4gPT09IGl0ZXJhYmxlQ2hpbGRyZW4uZW50cmllcykge1xuICAgICAgICAgIGlmICghZGlkV2FybkFib3V0TWFwcykge1xuICAgICAgICAgICAgd2FybignVXNpbmcgTWFwcyBhcyBjaGlsZHJlbiBpcyBub3Qgc3VwcG9ydGVkLiAnICsgJ1VzZSBhbiBhcnJheSBvZiBrZXllZCBSZWFjdEVsZW1lbnRzIGluc3RlYWQuJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGlkV2FybkFib3V0TWFwcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKGl0ZXJhYmxlQ2hpbGRyZW4pO1xuICAgICAgdmFyIHN0ZXA7XG4gICAgICB2YXIgaWkgPSAwO1xuXG4gICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgICAgIGNoaWxkID0gc3RlcC52YWx1ZTtcbiAgICAgICAgbmV4dE5hbWUgPSBuZXh0TmFtZVByZWZpeCArIGdldEVsZW1lbnRLZXkoY2hpbGQsIGlpKyspO1xuICAgICAgICBzdWJ0cmVlQ291bnQgKz0gbWFwSW50b0FycmF5KGNoaWxkLCBhcnJheSwgZXNjYXBlZFByZWZpeCwgbmV4dE5hbWUsIGNhbGxiYWNrKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICB2YXIgY2hpbGRyZW5TdHJpbmcgPSAnJyArIGNoaWxkcmVuO1xuXG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJPYmplY3RzIGFyZSBub3QgdmFsaWQgYXMgYSBSZWFjdCBjaGlsZCAoZm91bmQ6IFwiICsgKGNoaWxkcmVuU3RyaW5nID09PSAnW29iamVjdCBPYmplY3RdJyA/ICdvYmplY3Qgd2l0aCBrZXlzIHsnICsgT2JqZWN0LmtleXMoY2hpbGRyZW4pLmpvaW4oJywgJykgKyAnfScgOiBjaGlsZHJlblN0cmluZykgKyBcIikuIElmIHlvdSBtZWFudCB0byByZW5kZXIgYSBjb2xsZWN0aW9uIG9mIGNoaWxkcmVuLCB1c2UgYW4gYXJyYXkgaW5zdGVhZC5cIiApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN1YnRyZWVDb3VudDtcbn1cblxuLyoqXG4gKiBNYXBzIGNoaWxkcmVuIHRoYXQgYXJlIHR5cGljYWxseSBzcGVjaWZpZWQgYXMgYHByb3BzLmNoaWxkcmVuYC5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI3JlYWN0Y2hpbGRyZW5tYXBcbiAqXG4gKiBUaGUgcHJvdmlkZWQgbWFwRnVuY3Rpb24oY2hpbGQsIGluZGV4KSB3aWxsIGJlIGNhbGxlZCBmb3IgZWFjaFxuICogbGVhZiBjaGlsZC5cbiAqXG4gKiBAcGFyYW0gez8qfSBjaGlsZHJlbiBDaGlsZHJlbiB0cmVlIGNvbnRhaW5lci5cbiAqIEBwYXJhbSB7ZnVuY3Rpb24oKiwgaW50KX0gZnVuYyBUaGUgbWFwIGZ1bmN0aW9uLlxuICogQHBhcmFtIHsqfSBjb250ZXh0IENvbnRleHQgZm9yIG1hcEZ1bmN0aW9uLlxuICogQHJldHVybiB7b2JqZWN0fSBPYmplY3QgY29udGFpbmluZyB0aGUgb3JkZXJlZCBtYXAgb2YgcmVzdWx0cy5cbiAqL1xuZnVuY3Rpb24gbWFwQ2hpbGRyZW4oY2hpbGRyZW4sIGZ1bmMsIGNvbnRleHQpIHtcbiAgaWYgKGNoaWxkcmVuID09IG51bGwpIHtcbiAgICByZXR1cm4gY2hpbGRyZW47XG4gIH1cblxuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBjb3VudCA9IDA7XG4gIG1hcEludG9BcnJheShjaGlsZHJlbiwgcmVzdWx0LCAnJywgJycsIGZ1bmN0aW9uIChjaGlsZCkge1xuICAgIHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgY2hpbGQsIGNvdW50KyspO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKlxuICogQ291bnQgdGhlIG51bWJlciBvZiBjaGlsZHJlbiB0aGF0IGFyZSB0eXBpY2FsbHkgc3BlY2lmaWVkIGFzXG4gKiBgcHJvcHMuY2hpbGRyZW5gLlxuICpcbiAqIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjcmVhY3RjaGlsZHJlbmNvdW50XG4gKlxuICogQHBhcmFtIHs/Kn0gY2hpbGRyZW4gQ2hpbGRyZW4gdHJlZSBjb250YWluZXIuXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgY2hpbGRyZW4uXG4gKi9cblxuXG5mdW5jdGlvbiBjb3VudENoaWxkcmVuKGNoaWxkcmVuKSB7XG4gIHZhciBuID0gMDtcbiAgbWFwQ2hpbGRyZW4oY2hpbGRyZW4sIGZ1bmN0aW9uICgpIHtcbiAgICBuKys7IC8vIERvbid0IHJldHVybiBhbnl0aGluZ1xuICB9KTtcbiAgcmV0dXJuIG47XG59XG5cbi8qKlxuICogSXRlcmF0ZXMgdGhyb3VnaCBjaGlsZHJlbiB0aGF0IGFyZSB0eXBpY2FsbHkgc3BlY2lmaWVkIGFzIGBwcm9wcy5jaGlsZHJlbmAuXG4gKlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNyZWFjdGNoaWxkcmVuZm9yZWFjaFxuICpcbiAqIFRoZSBwcm92aWRlZCBmb3JFYWNoRnVuYyhjaGlsZCwgaW5kZXgpIHdpbGwgYmUgY2FsbGVkIGZvciBlYWNoXG4gKiBsZWFmIGNoaWxkLlxuICpcbiAqIEBwYXJhbSB7Pyp9IGNoaWxkcmVuIENoaWxkcmVuIHRyZWUgY29udGFpbmVyLlxuICogQHBhcmFtIHtmdW5jdGlvbigqLCBpbnQpfSBmb3JFYWNoRnVuY1xuICogQHBhcmFtIHsqfSBmb3JFYWNoQ29udGV4dCBDb250ZXh0IGZvciBmb3JFYWNoQ29udGV4dC5cbiAqL1xuZnVuY3Rpb24gZm9yRWFjaENoaWxkcmVuKGNoaWxkcmVuLCBmb3JFYWNoRnVuYywgZm9yRWFjaENvbnRleHQpIHtcbiAgbWFwQ2hpbGRyZW4oY2hpbGRyZW4sIGZ1bmN0aW9uICgpIHtcbiAgICBmb3JFYWNoRnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyAvLyBEb24ndCByZXR1cm4gYW55dGhpbmcuXG4gIH0sIGZvckVhY2hDb250ZXh0KTtcbn1cbi8qKlxuICogRmxhdHRlbiBhIGNoaWxkcmVuIG9iamVjdCAodHlwaWNhbGx5IHNwZWNpZmllZCBhcyBgcHJvcHMuY2hpbGRyZW5gKSBhbmRcbiAqIHJldHVybiBhbiBhcnJheSB3aXRoIGFwcHJvcHJpYXRlbHkgcmUta2V5ZWQgY2hpbGRyZW4uXG4gKlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNyZWFjdGNoaWxkcmVudG9hcnJheVxuICovXG5cblxuZnVuY3Rpb24gdG9BcnJheShjaGlsZHJlbikge1xuICByZXR1cm4gbWFwQ2hpbGRyZW4oY2hpbGRyZW4sIGZ1bmN0aW9uIChjaGlsZCkge1xuICAgIHJldHVybiBjaGlsZDtcbiAgfSkgfHwgW107XG59XG4vKipcbiAqIFJldHVybnMgdGhlIGZpcnN0IGNoaWxkIGluIGEgY29sbGVjdGlvbiBvZiBjaGlsZHJlbiBhbmQgdmVyaWZpZXMgdGhhdCB0aGVyZVxuICogaXMgb25seSBvbmUgY2hpbGQgaW4gdGhlIGNvbGxlY3Rpb24uXG4gKlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNyZWFjdGNoaWxkcmVub25seVxuICpcbiAqIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IGEgc2luZ2xlIGNoaWxkIGdldHNcbiAqIHBhc3NlZCB3aXRob3V0IGEgd3JhcHBlciwgYnV0IHRoZSBwdXJwb3NlIG9mIHRoaXMgaGVscGVyIGZ1bmN0aW9uIGlzIHRvXG4gKiBhYnN0cmFjdCBhd2F5IHRoZSBwYXJ0aWN1bGFyIHN0cnVjdHVyZSBvZiBjaGlsZHJlbi5cbiAqXG4gKiBAcGFyYW0gez9vYmplY3R9IGNoaWxkcmVuIENoaWxkIGNvbGxlY3Rpb24gc3RydWN0dXJlLlxuICogQHJldHVybiB7UmVhY3RFbGVtZW50fSBUaGUgZmlyc3QgYW5kIG9ubHkgYFJlYWN0RWxlbWVudGAgY29udGFpbmVkIGluIHRoZVxuICogc3RydWN0dXJlLlxuICovXG5cblxuZnVuY3Rpb24gb25seUNoaWxkKGNoaWxkcmVuKSB7XG4gIGlmICghaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiUmVhY3QuQ2hpbGRyZW4ub25seSBleHBlY3RlZCB0byByZWNlaXZlIGEgc2luZ2xlIFJlYWN0IGVsZW1lbnQgY2hpbGQuXCIgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY2hpbGRyZW47XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNvbnRleHQoZGVmYXVsdFZhbHVlLCBjYWxjdWxhdGVDaGFuZ2VkQml0cykge1xuICBpZiAoY2FsY3VsYXRlQ2hhbmdlZEJpdHMgPT09IHVuZGVmaW5lZCkge1xuICAgIGNhbGN1bGF0ZUNoYW5nZWRCaXRzID0gbnVsbDtcbiAgfSBlbHNlIHtcbiAgICB7XG4gICAgICBpZiAoY2FsY3VsYXRlQ2hhbmdlZEJpdHMgIT09IG51bGwgJiYgdHlwZW9mIGNhbGN1bGF0ZUNoYW5nZWRCaXRzICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGVycm9yKCdjcmVhdGVDb250ZXh0OiBFeHBlY3RlZCB0aGUgb3B0aW9uYWwgc2Vjb25kIGFyZ3VtZW50IHRvIGJlIGEgJyArICdmdW5jdGlvbi4gSW5zdGVhZCByZWNlaXZlZDogJXMnLCBjYWxjdWxhdGVDaGFuZ2VkQml0cyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIGNvbnRleHQgPSB7XG4gICAgJCR0eXBlb2Y6IFJFQUNUX0NPTlRFWFRfVFlQRSxcbiAgICBfY2FsY3VsYXRlQ2hhbmdlZEJpdHM6IGNhbGN1bGF0ZUNoYW5nZWRCaXRzLFxuICAgIC8vIEFzIGEgd29ya2Fyb3VuZCB0byBzdXBwb3J0IG11bHRpcGxlIGNvbmN1cnJlbnQgcmVuZGVyZXJzLCB3ZSBjYXRlZ29yaXplXG4gICAgLy8gc29tZSByZW5kZXJlcnMgYXMgcHJpbWFyeSBhbmQgb3RoZXJzIGFzIHNlY29uZGFyeS4gV2Ugb25seSBleHBlY3RcbiAgICAvLyB0aGVyZSB0byBiZSB0d28gY29uY3VycmVudCByZW5kZXJlcnMgYXQgbW9zdDogUmVhY3QgTmF0aXZlIChwcmltYXJ5KSBhbmRcbiAgICAvLyBGYWJyaWMgKHNlY29uZGFyeSk7IFJlYWN0IERPTSAocHJpbWFyeSkgYW5kIFJlYWN0IEFSVCAoc2Vjb25kYXJ5KS5cbiAgICAvLyBTZWNvbmRhcnkgcmVuZGVyZXJzIHN0b3JlIHRoZWlyIGNvbnRleHQgdmFsdWVzIG9uIHNlcGFyYXRlIGZpZWxkcy5cbiAgICBfY3VycmVudFZhbHVlOiBkZWZhdWx0VmFsdWUsXG4gICAgX2N1cnJlbnRWYWx1ZTI6IGRlZmF1bHRWYWx1ZSxcbiAgICAvLyBVc2VkIHRvIHRyYWNrIGhvdyBtYW55IGNvbmN1cnJlbnQgcmVuZGVyZXJzIHRoaXMgY29udGV4dCBjdXJyZW50bHlcbiAgICAvLyBzdXBwb3J0cyB3aXRoaW4gaW4gYSBzaW5nbGUgcmVuZGVyZXIuIFN1Y2ggYXMgcGFyYWxsZWwgc2VydmVyIHJlbmRlcmluZy5cbiAgICBfdGhyZWFkQ291bnQ6IDAsXG4gICAgLy8gVGhlc2UgYXJlIGNpcmN1bGFyXG4gICAgUHJvdmlkZXI6IG51bGwsXG4gICAgQ29uc3VtZXI6IG51bGxcbiAgfTtcbiAgY29udGV4dC5Qcm92aWRlciA9IHtcbiAgICAkJHR5cGVvZjogUkVBQ1RfUFJPVklERVJfVFlQRSxcbiAgICBfY29udGV4dDogY29udGV4dFxuICB9O1xuICB2YXIgaGFzV2FybmVkQWJvdXRVc2luZ05lc3RlZENvbnRleHRDb25zdW1lcnMgPSBmYWxzZTtcbiAgdmFyIGhhc1dhcm5lZEFib3V0VXNpbmdDb25zdW1lclByb3ZpZGVyID0gZmFsc2U7XG4gIHZhciBoYXNXYXJuZWRBYm91dERpc3BsYXlOYW1lT25Db25zdW1lciA9IGZhbHNlO1xuXG4gIHtcbiAgICAvLyBBIHNlcGFyYXRlIG9iamVjdCwgYnV0IHByb3hpZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgY29udGV4dCBvYmplY3QgZm9yXG4gICAgLy8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuIEl0IGhhcyBhIGRpZmZlcmVudCAkJHR5cGVvZiwgc28gd2UgY2FuIHByb3Blcmx5XG4gICAgLy8gd2FybiBmb3IgdGhlIGluY29ycmVjdCB1c2FnZSBvZiBDb250ZXh0IGFzIGEgQ29uc3VtZXIuXG4gICAgdmFyIENvbnN1bWVyID0ge1xuICAgICAgJCR0eXBlb2Y6IFJFQUNUX0NPTlRFWFRfVFlQRSxcbiAgICAgIF9jb250ZXh0OiBjb250ZXh0LFxuICAgICAgX2NhbGN1bGF0ZUNoYW5nZWRCaXRzOiBjb250ZXh0Ll9jYWxjdWxhdGVDaGFuZ2VkQml0c1xuICAgIH07IC8vICRGbG93Rml4TWU6IEZsb3cgY29tcGxhaW5zIGFib3V0IG5vdCBzZXR0aW5nIGEgdmFsdWUsIHdoaWNoIGlzIGludGVudGlvbmFsIGhlcmVcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENvbnN1bWVyLCB7XG4gICAgICBQcm92aWRlcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoIWhhc1dhcm5lZEFib3V0VXNpbmdDb25zdW1lclByb3ZpZGVyKSB7XG4gICAgICAgICAgICBoYXNXYXJuZWRBYm91dFVzaW5nQ29uc3VtZXJQcm92aWRlciA9IHRydWU7XG5cbiAgICAgICAgICAgIGVycm9yKCdSZW5kZXJpbmcgPENvbnRleHQuQ29uc3VtZXIuUHJvdmlkZXI+IGlzIG5vdCBzdXBwb3J0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiAnICsgJ2EgZnV0dXJlIG1ham9yIHJlbGVhc2UuIERpZCB5b3UgbWVhbiB0byByZW5kZXIgPENvbnRleHQuUHJvdmlkZXI+IGluc3RlYWQ/Jyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbnRleHQuUHJvdmlkZXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKF9Qcm92aWRlcikge1xuICAgICAgICAgIGNvbnRleHQuUHJvdmlkZXIgPSBfUHJvdmlkZXI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBfY3VycmVudFZhbHVlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBjb250ZXh0Ll9jdXJyZW50VmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKF9jdXJyZW50VmFsdWUpIHtcbiAgICAgICAgICBjb250ZXh0Ll9jdXJyZW50VmFsdWUgPSBfY3VycmVudFZhbHVlO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgX2N1cnJlbnRWYWx1ZTI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbnRleHQuX2N1cnJlbnRWYWx1ZTI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKF9jdXJyZW50VmFsdWUyKSB7XG4gICAgICAgICAgY29udGV4dC5fY3VycmVudFZhbHVlMiA9IF9jdXJyZW50VmFsdWUyO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgX3RocmVhZENvdW50OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBjb250ZXh0Ll90aHJlYWRDb3VudDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoX3RocmVhZENvdW50KSB7XG4gICAgICAgICAgY29udGV4dC5fdGhyZWFkQ291bnQgPSBfdGhyZWFkQ291bnQ7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBDb25zdW1lcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoIWhhc1dhcm5lZEFib3V0VXNpbmdOZXN0ZWRDb250ZXh0Q29uc3VtZXJzKSB7XG4gICAgICAgICAgICBoYXNXYXJuZWRBYm91dFVzaW5nTmVzdGVkQ29udGV4dENvbnN1bWVycyA9IHRydWU7XG5cbiAgICAgICAgICAgIGVycm9yKCdSZW5kZXJpbmcgPENvbnRleHQuQ29uc3VtZXIuQ29uc3VtZXI+IGlzIG5vdCBzdXBwb3J0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiAnICsgJ2EgZnV0dXJlIG1ham9yIHJlbGVhc2UuIERpZCB5b3UgbWVhbiB0byByZW5kZXIgPENvbnRleHQuQ29uc3VtZXI+IGluc3RlYWQ/Jyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbnRleHQuQ29uc3VtZXI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBkaXNwbGF5TmFtZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gY29udGV4dC5kaXNwbGF5TmFtZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoZGlzcGxheU5hbWUpIHtcbiAgICAgICAgICBpZiAoIWhhc1dhcm5lZEFib3V0RGlzcGxheU5hbWVPbkNvbnN1bWVyKSB7XG4gICAgICAgICAgICB3YXJuKCdTZXR0aW5nIGBkaXNwbGF5TmFtZWAgb24gQ29udGV4dC5Db25zdW1lciBoYXMgbm8gZWZmZWN0LiAnICsgXCJZb3Ugc2hvdWxkIHNldCBpdCBkaXJlY3RseSBvbiB0aGUgY29udGV4dCB3aXRoIENvbnRleHQuZGlzcGxheU5hbWUgPSAnJXMnLlwiLCBkaXNwbGF5TmFtZSk7XG5cbiAgICAgICAgICAgIGhhc1dhcm5lZEFib3V0RGlzcGxheU5hbWVPbkNvbnN1bWVyID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTsgLy8gJEZsb3dGaXhNZTogRmxvdyBjb21wbGFpbnMgYWJvdXQgbWlzc2luZyBwcm9wZXJ0aWVzIGJlY2F1c2UgaXQgZG9lc24ndCB1bmRlcnN0YW5kIGRlZmluZVByb3BlcnR5XG5cbiAgICBjb250ZXh0LkNvbnN1bWVyID0gQ29uc3VtZXI7XG4gIH1cblxuICB7XG4gICAgY29udGV4dC5fY3VycmVudFJlbmRlcmVyID0gbnVsbDtcbiAgICBjb250ZXh0Ll9jdXJyZW50UmVuZGVyZXIyID0gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBjb250ZXh0O1xufVxuXG52YXIgVW5pbml0aWFsaXplZCA9IC0xO1xudmFyIFBlbmRpbmcgPSAwO1xudmFyIFJlc29sdmVkID0gMTtcbnZhciBSZWplY3RlZCA9IDI7XG5cbmZ1bmN0aW9uIGxhenlJbml0aWFsaXplcihwYXlsb2FkKSB7XG4gIGlmIChwYXlsb2FkLl9zdGF0dXMgPT09IFVuaW5pdGlhbGl6ZWQpIHtcbiAgICB2YXIgY3RvciA9IHBheWxvYWQuX3Jlc3VsdDtcbiAgICB2YXIgdGhlbmFibGUgPSBjdG9yKCk7IC8vIFRyYW5zaXRpb24gdG8gdGhlIG5leHQgc3RhdGUuXG5cbiAgICB2YXIgcGVuZGluZyA9IHBheWxvYWQ7XG4gICAgcGVuZGluZy5fc3RhdHVzID0gUGVuZGluZztcbiAgICBwZW5kaW5nLl9yZXN1bHQgPSB0aGVuYWJsZTtcbiAgICB0aGVuYWJsZS50aGVuKGZ1bmN0aW9uIChtb2R1bGVPYmplY3QpIHtcbiAgICAgIGlmIChwYXlsb2FkLl9zdGF0dXMgPT09IFBlbmRpbmcpIHtcbiAgICAgICAgdmFyIGRlZmF1bHRFeHBvcnQgPSBtb2R1bGVPYmplY3QuZGVmYXVsdDtcblxuICAgICAgICB7XG4gICAgICAgICAgaWYgKGRlZmF1bHRFeHBvcnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZXJyb3IoJ2xhenk6IEV4cGVjdGVkIHRoZSByZXN1bHQgb2YgYSBkeW5hbWljIGltcG9ydCgpIGNhbGwuICcgKyAnSW5zdGVhZCByZWNlaXZlZDogJXNcXG5cXG5Zb3VyIGNvZGUgc2hvdWxkIGxvb2sgbGlrZTogXFxuICAnICsgLy8gQnJlYWsgdXAgaW1wb3J0cyB0byBhdm9pZCBhY2NpZGVudGFsbHkgcGFyc2luZyB0aGVtIGFzIGRlcGVuZGVuY2llcy5cbiAgICAgICAgICAgICdjb25zdCBNeUNvbXBvbmVudCA9IGxhenkoKCkgPT4gaW1wJyArIFwib3J0KCcuL015Q29tcG9uZW50JykpXCIsIG1vZHVsZU9iamVjdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIFRyYW5zaXRpb24gdG8gdGhlIG5leHQgc3RhdGUuXG5cblxuICAgICAgICB2YXIgcmVzb2x2ZWQgPSBwYXlsb2FkO1xuICAgICAgICByZXNvbHZlZC5fc3RhdHVzID0gUmVzb2x2ZWQ7XG4gICAgICAgIHJlc29sdmVkLl9yZXN1bHQgPSBkZWZhdWx0RXhwb3J0O1xuICAgICAgfVxuICAgIH0sIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgaWYgKHBheWxvYWQuX3N0YXR1cyA9PT0gUGVuZGluZykge1xuICAgICAgICAvLyBUcmFuc2l0aW9uIHRvIHRoZSBuZXh0IHN0YXRlLlxuICAgICAgICB2YXIgcmVqZWN0ZWQgPSBwYXlsb2FkO1xuICAgICAgICByZWplY3RlZC5fc3RhdHVzID0gUmVqZWN0ZWQ7XG4gICAgICAgIHJlamVjdGVkLl9yZXN1bHQgPSBlcnJvcjtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGlmIChwYXlsb2FkLl9zdGF0dXMgPT09IFJlc29sdmVkKSB7XG4gICAgcmV0dXJuIHBheWxvYWQuX3Jlc3VsdDtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBwYXlsb2FkLl9yZXN1bHQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gbGF6eShjdG9yKSB7XG4gIHZhciBwYXlsb2FkID0ge1xuICAgIC8vIFdlIHVzZSB0aGVzZSBmaWVsZHMgdG8gc3RvcmUgdGhlIHJlc3VsdC5cbiAgICBfc3RhdHVzOiAtMSxcbiAgICBfcmVzdWx0OiBjdG9yXG4gIH07XG4gIHZhciBsYXp5VHlwZSA9IHtcbiAgICAkJHR5cGVvZjogUkVBQ1RfTEFaWV9UWVBFLFxuICAgIF9wYXlsb2FkOiBwYXlsb2FkLFxuICAgIF9pbml0OiBsYXp5SW5pdGlhbGl6ZXJcbiAgfTtcblxuICB7XG4gICAgLy8gSW4gcHJvZHVjdGlvbiwgdGhpcyB3b3VsZCBqdXN0IHNldCBpdCBvbiB0aGUgb2JqZWN0LlxuICAgIHZhciBkZWZhdWx0UHJvcHM7XG4gICAgdmFyIHByb3BUeXBlczsgLy8gJEZsb3dGaXhNZVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMobGF6eVR5cGUsIHtcbiAgICAgIGRlZmF1bHRQcm9wczoge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBkZWZhdWx0UHJvcHM7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKG5ld0RlZmF1bHRQcm9wcykge1xuICAgICAgICAgIGVycm9yKCdSZWFjdC5sYXp5KC4uLik6IEl0IGlzIG5vdCBzdXBwb3J0ZWQgdG8gYXNzaWduIGBkZWZhdWx0UHJvcHNgIHRvICcgKyAnYSBsYXp5IGNvbXBvbmVudCBpbXBvcnQuIEVpdGhlciBzcGVjaWZ5IHRoZW0gd2hlcmUgdGhlIGNvbXBvbmVudCAnICsgJ2lzIGRlZmluZWQsIG9yIGNyZWF0ZSBhIHdyYXBwaW5nIGNvbXBvbmVudCBhcm91bmQgaXQuJyk7XG5cbiAgICAgICAgICBkZWZhdWx0UHJvcHMgPSBuZXdEZWZhdWx0UHJvcHM7IC8vIE1hdGNoIHByb2R1Y3Rpb24gYmVoYXZpb3IgbW9yZSBjbG9zZWx5OlxuICAgICAgICAgIC8vICRGbG93Rml4TWVcblxuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsYXp5VHlwZSwgJ2RlZmF1bHRQcm9wcycsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHByb3BUeXBlczoge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBwcm9wVHlwZXM7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKG5ld1Byb3BUeXBlcykge1xuICAgICAgICAgIGVycm9yKCdSZWFjdC5sYXp5KC4uLik6IEl0IGlzIG5vdCBzdXBwb3J0ZWQgdG8gYXNzaWduIGBwcm9wVHlwZXNgIHRvICcgKyAnYSBsYXp5IGNvbXBvbmVudCBpbXBvcnQuIEVpdGhlciBzcGVjaWZ5IHRoZW0gd2hlcmUgdGhlIGNvbXBvbmVudCAnICsgJ2lzIGRlZmluZWQsIG9yIGNyZWF0ZSBhIHdyYXBwaW5nIGNvbXBvbmVudCBhcm91bmQgaXQuJyk7XG5cbiAgICAgICAgICBwcm9wVHlwZXMgPSBuZXdQcm9wVHlwZXM7IC8vIE1hdGNoIHByb2R1Y3Rpb24gYmVoYXZpb3IgbW9yZSBjbG9zZWx5OlxuICAgICAgICAgIC8vICRGbG93Rml4TWVcblxuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsYXp5VHlwZSwgJ3Byb3BUeXBlcycsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGxhenlUeXBlO1xufVxuXG5mdW5jdGlvbiBmb3J3YXJkUmVmKHJlbmRlcikge1xuICB7XG4gICAgaWYgKHJlbmRlciAhPSBudWxsICYmIHJlbmRlci4kJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFKSB7XG4gICAgICBlcnJvcignZm9yd2FyZFJlZiByZXF1aXJlcyBhIHJlbmRlciBmdW5jdGlvbiBidXQgcmVjZWl2ZWQgYSBgbWVtb2AgJyArICdjb21wb25lbnQuIEluc3RlYWQgb2YgZm9yd2FyZFJlZihtZW1vKC4uLikpLCB1c2UgJyArICdtZW1vKGZvcndhcmRSZWYoLi4uKSkuJyk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgcmVuZGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignZm9yd2FyZFJlZiByZXF1aXJlcyBhIHJlbmRlciBmdW5jdGlvbiBidXQgd2FzIGdpdmVuICVzLicsIHJlbmRlciA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiByZW5kZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocmVuZGVyLmxlbmd0aCAhPT0gMCAmJiByZW5kZXIubGVuZ3RoICE9PSAyKSB7XG4gICAgICAgIGVycm9yKCdmb3J3YXJkUmVmIHJlbmRlciBmdW5jdGlvbnMgYWNjZXB0IGV4YWN0bHkgdHdvIHBhcmFtZXRlcnM6IHByb3BzIGFuZCByZWYuICVzJywgcmVuZGVyLmxlbmd0aCA9PT0gMSA/ICdEaWQgeW91IGZvcmdldCB0byB1c2UgdGhlIHJlZiBwYXJhbWV0ZXI/JyA6ICdBbnkgYWRkaXRpb25hbCBwYXJhbWV0ZXIgd2lsbCBiZSB1bmRlZmluZWQuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHJlbmRlciAhPSBudWxsKSB7XG4gICAgICBpZiAocmVuZGVyLmRlZmF1bHRQcm9wcyAhPSBudWxsIHx8IHJlbmRlci5wcm9wVHlwZXMgIT0gbnVsbCkge1xuICAgICAgICBlcnJvcignZm9yd2FyZFJlZiByZW5kZXIgZnVuY3Rpb25zIGRvIG5vdCBzdXBwb3J0IHByb3BUeXBlcyBvciBkZWZhdWx0UHJvcHMuICcgKyAnRGlkIHlvdSBhY2NpZGVudGFsbHkgcGFzcyBhIFJlYWN0IGNvbXBvbmVudD8nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgZWxlbWVudFR5cGUgPSB7XG4gICAgJCR0eXBlb2Y6IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUsXG4gICAgcmVuZGVyOiByZW5kZXJcbiAgfTtcblxuICB7XG4gICAgdmFyIG93bk5hbWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVsZW1lbnRUeXBlLCAnZGlzcGxheU5hbWUnLCB7XG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gb3duTmFtZTtcbiAgICAgIH0sXG4gICAgICBzZXQ6IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIG93bk5hbWUgPSBuYW1lO1xuXG4gICAgICAgIGlmIChyZW5kZXIuZGlzcGxheU5hbWUgPT0gbnVsbCkge1xuICAgICAgICAgIHJlbmRlci5kaXNwbGF5TmFtZSA9IG5hbWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50VHlwZTtcbn1cblxuLy8gRmlsdGVyIGNlcnRhaW4gRE9NIGF0dHJpYnV0ZXMgKGUuZy4gc3JjLCBocmVmKSBpZiB0aGVpciB2YWx1ZXMgYXJlIGVtcHR5IHN0cmluZ3MuXG5cbnZhciBlbmFibGVTY29wZUFQSSA9IGZhbHNlOyAvLyBFeHBlcmltZW50YWwgQ3JlYXRlIEV2ZW50IEhhbmRsZSBBUEkuXG5cbmZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKSB7XG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSAvLyBOb3RlOiB0eXBlb2YgbWlnaHQgYmUgb3RoZXIgdGhhbiAnc3ltYm9sJyBvciAnbnVtYmVyJyAoZS5nLiBpZiBpdCdzIGEgcG9seWZpbGwpLlxuXG5cbiAgaWYgKHR5cGUgPT09IGV4cG9ydHMuRnJhZ21lbnQgfHwgdHlwZSA9PT0gZXhwb3J0cy5Qcm9maWxlciB8fCB0eXBlID09PSBSRUFDVF9ERUJVR19UUkFDSU5HX01PREVfVFlQRSB8fCB0eXBlID09PSBleHBvcnRzLlN0cmljdE1vZGUgfHwgdHlwZSA9PT0gZXhwb3J0cy5TdXNwZW5zZSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfTEVHQUNZX0hJRERFTl9UWVBFIHx8IGVuYWJsZVNjb3BlQVBJICkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsKSB7XG4gICAgaWYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfUFJPVklERVJfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9DT05URVhUX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0JMT0NLX1RZUEUgfHwgdHlwZVswXSA9PT0gUkVBQ1RfU0VSVkVSX0JMT0NLX1RZUEUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gbWVtbyh0eXBlLCBjb21wYXJlKSB7XG4gIHtcbiAgICBpZiAoIWlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKSkge1xuICAgICAgZXJyb3IoJ21lbW86IFRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgY29tcG9uZW50LiBJbnN0ZWFkICcgKyAncmVjZWl2ZWQ6ICVzJywgdHlwZSA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiB0eXBlKTtcbiAgICB9XG4gIH1cblxuICB2YXIgZWxlbWVudFR5cGUgPSB7XG4gICAgJCR0eXBlb2Y6IFJFQUNUX01FTU9fVFlQRSxcbiAgICB0eXBlOiB0eXBlLFxuICAgIGNvbXBhcmU6IGNvbXBhcmUgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBjb21wYXJlXG4gIH07XG5cbiAge1xuICAgIHZhciBvd25OYW1lO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50VHlwZSwgJ2Rpc3BsYXlOYW1lJywge1xuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG93bk5hbWU7XG4gICAgICB9LFxuICAgICAgc2V0OiBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICBvd25OYW1lID0gbmFtZTtcblxuICAgICAgICBpZiAodHlwZS5kaXNwbGF5TmFtZSA9PSBudWxsKSB7XG4gICAgICAgICAgdHlwZS5kaXNwbGF5TmFtZSA9IG5hbWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50VHlwZTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZURpc3BhdGNoZXIoKSB7XG4gIHZhciBkaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlci5jdXJyZW50O1xuXG4gIGlmICghKGRpc3BhdGNoZXIgIT09IG51bGwpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiSW52YWxpZCBob29rIGNhbGwuIEhvb2tzIGNhbiBvbmx5IGJlIGNhbGxlZCBpbnNpZGUgb2YgdGhlIGJvZHkgb2YgYSBmdW5jdGlvbiBjb21wb25lbnQuIFRoaXMgY291bGQgaGFwcGVuIGZvciBvbmUgb2YgdGhlIGZvbGxvd2luZyByZWFzb25zOlxcbjEuIFlvdSBtaWdodCBoYXZlIG1pc21hdGNoaW5nIHZlcnNpb25zIG9mIFJlYWN0IGFuZCB0aGUgcmVuZGVyZXIgKHN1Y2ggYXMgUmVhY3QgRE9NKVxcbjIuIFlvdSBtaWdodCBiZSBicmVha2luZyB0aGUgUnVsZXMgb2YgSG9va3NcXG4zLiBZb3UgbWlnaHQgaGF2ZSBtb3JlIHRoYW4gb25lIGNvcHkgb2YgUmVhY3QgaW4gdGhlIHNhbWUgYXBwXFxuU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9pbnZhbGlkLWhvb2stY2FsbCBmb3IgdGlwcyBhYm91dCBob3cgdG8gZGVidWcgYW5kIGZpeCB0aGlzIHByb2JsZW0uXCIgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGlzcGF0Y2hlcjtcbn1cblxuZnVuY3Rpb24gdXNlQ29udGV4dChDb250ZXh0LCB1bnN0YWJsZV9vYnNlcnZlZEJpdHMpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuXG4gIHtcbiAgICBpZiAodW5zdGFibGVfb2JzZXJ2ZWRCaXRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGVycm9yKCd1c2VDb250ZXh0KCkgc2Vjb25kIGFyZ3VtZW50IGlzIHJlc2VydmVkIGZvciBmdXR1cmUgJyArICd1c2UgaW4gUmVhY3QuIFBhc3NpbmcgaXQgaXMgbm90IHN1cHBvcnRlZC4gJyArICdZb3UgcGFzc2VkOiAlcy4lcycsIHVuc3RhYmxlX29ic2VydmVkQml0cywgdHlwZW9mIHVuc3RhYmxlX29ic2VydmVkQml0cyA9PT0gJ251bWJlcicgJiYgQXJyYXkuaXNBcnJheShhcmd1bWVudHNbMl0pID8gJ1xcblxcbkRpZCB5b3UgY2FsbCBhcnJheS5tYXAodXNlQ29udGV4dCk/ICcgKyAnQ2FsbGluZyBIb29rcyBpbnNpZGUgYSBsb29wIGlzIG5vdCBzdXBwb3J0ZWQuICcgKyAnTGVhcm4gbW9yZSBhdCBodHRwczovL3JlYWN0anMub3JnL2xpbmsvcnVsZXMtb2YtaG9va3MnIDogJycpO1xuICAgIH0gLy8gVE9ETzogYWRkIGEgbW9yZSBnZW5lcmljIHdhcm5pbmcgZm9yIGludmFsaWQgdmFsdWVzLlxuXG5cbiAgICBpZiAoQ29udGV4dC5fY29udGV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YXIgcmVhbENvbnRleHQgPSBDb250ZXh0Ll9jb250ZXh0OyAvLyBEb24ndCBkZWR1cGxpY2F0ZSBiZWNhdXNlIHRoaXMgbGVnaXRpbWF0ZWx5IGNhdXNlcyBidWdzXG4gICAgICAvLyBhbmQgbm9ib2R5IHNob3VsZCBiZSB1c2luZyB0aGlzIGluIGV4aXN0aW5nIGNvZGUuXG5cbiAgICAgIGlmIChyZWFsQ29udGV4dC5Db25zdW1lciA9PT0gQ29udGV4dCkge1xuICAgICAgICBlcnJvcignQ2FsbGluZyB1c2VDb250ZXh0KENvbnRleHQuQ29uc3VtZXIpIGlzIG5vdCBzdXBwb3J0ZWQsIG1heSBjYXVzZSBidWdzLCBhbmQgd2lsbCBiZSAnICsgJ3JlbW92ZWQgaW4gYSBmdXR1cmUgbWFqb3IgcmVsZWFzZS4gRGlkIHlvdSBtZWFuIHRvIGNhbGwgdXNlQ29udGV4dChDb250ZXh0KSBpbnN0ZWFkPycpO1xuICAgICAgfSBlbHNlIGlmIChyZWFsQ29udGV4dC5Qcm92aWRlciA9PT0gQ29udGV4dCkge1xuICAgICAgICBlcnJvcignQ2FsbGluZyB1c2VDb250ZXh0KENvbnRleHQuUHJvdmlkZXIpIGlzIG5vdCBzdXBwb3J0ZWQuICcgKyAnRGlkIHlvdSBtZWFuIHRvIGNhbGwgdXNlQ29udGV4dChDb250ZXh0KSBpbnN0ZWFkPycpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZUNvbnRleHQoQ29udGV4dCwgdW5zdGFibGVfb2JzZXJ2ZWRCaXRzKTtcbn1cbmZ1bmN0aW9uIHVzZVN0YXRlKGluaXRpYWxTdGF0ZSkge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZVN0YXRlKGluaXRpYWxTdGF0ZSk7XG59XG5mdW5jdGlvbiB1c2VSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpO1xufVxuZnVuY3Rpb24gdXNlUmVmKGluaXRpYWxWYWx1ZSkge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZVJlZihpbml0aWFsVmFsdWUpO1xufVxuZnVuY3Rpb24gdXNlRWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZUVmZmVjdChjcmVhdGUsIGRlcHMpO1xufVxuZnVuY3Rpb24gdXNlTGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZUxheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpO1xufVxuZnVuY3Rpb24gdXNlQ2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG59XG5mdW5jdGlvbiB1c2VNZW1vKGNyZWF0ZSwgZGVwcykge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZU1lbW8oY3JlYXRlLCBkZXBzKTtcbn1cbmZ1bmN0aW9uIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbn1cbmZ1bmN0aW9uIHVzZURlYnVnVmFsdWUodmFsdWUsIGZvcm1hdHRlckZuKSB7XG4gIHtcbiAgICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gICAgcmV0dXJuIGRpc3BhdGNoZXIudXNlRGVidWdWYWx1ZSh2YWx1ZSwgZm9ybWF0dGVyRm4pO1xuICB9XG59XG5cbi8vIEhlbHBlcnMgdG8gcGF0Y2ggY29uc29sZS5sb2dzIHRvIGF2b2lkIGxvZ2dpbmcgZHVyaW5nIHNpZGUtZWZmZWN0IGZyZWVcbi8vIHJlcGxheWluZyBvbiByZW5kZXIgZnVuY3Rpb24uIFRoaXMgY3VycmVudGx5IG9ubHkgcGF0Y2hlcyB0aGUgb2JqZWN0XG4vLyBsYXppbHkgd2hpY2ggd29uJ3QgY292ZXIgaWYgdGhlIGxvZyBmdW5jdGlvbiB3YXMgZXh0cmFjdGVkIGVhZ2VybHkuXG4vLyBXZSBjb3VsZCBhbHNvIGVhZ2VybHkgcGF0Y2ggdGhlIG1ldGhvZC5cbnZhciBkaXNhYmxlZERlcHRoID0gMDtcbnZhciBwcmV2TG9nO1xudmFyIHByZXZJbmZvO1xudmFyIHByZXZXYXJuO1xudmFyIHByZXZFcnJvcjtcbnZhciBwcmV2R3JvdXA7XG52YXIgcHJldkdyb3VwQ29sbGFwc2VkO1xudmFyIHByZXZHcm91cEVuZDtcblxuZnVuY3Rpb24gZGlzYWJsZWRMb2coKSB7fVxuXG5kaXNhYmxlZExvZy5fX3JlYWN0RGlzYWJsZWRMb2cgPSB0cnVlO1xuZnVuY3Rpb24gZGlzYWJsZUxvZ3MoKSB7XG4gIHtcbiAgICBpZiAoZGlzYWJsZWREZXB0aCA9PT0gMCkge1xuICAgICAgLyogZXNsaW50LWRpc2FibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXG4gICAgICBwcmV2TG9nID0gY29uc29sZS5sb2c7XG4gICAgICBwcmV2SW5mbyA9IGNvbnNvbGUuaW5mbztcbiAgICAgIHByZXZXYXJuID0gY29uc29sZS53YXJuO1xuICAgICAgcHJldkVycm9yID0gY29uc29sZS5lcnJvcjtcbiAgICAgIHByZXZHcm91cCA9IGNvbnNvbGUuZ3JvdXA7XG4gICAgICBwcmV2R3JvdXBDb2xsYXBzZWQgPSBjb25zb2xlLmdyb3VwQ29sbGFwc2VkO1xuICAgICAgcHJldkdyb3VwRW5kID0gY29uc29sZS5ncm91cEVuZDsgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xOTA5OVxuXG4gICAgICB2YXIgcHJvcHMgPSB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IGRpc2FibGVkTG9nLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZVxuICAgICAgfTsgLy8gJEZsb3dGaXhNZSBGbG93IHRoaW5rcyBjb25zb2xlIGlzIGltbXV0YWJsZS5cblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY29uc29sZSwge1xuICAgICAgICBpbmZvOiBwcm9wcyxcbiAgICAgICAgbG9nOiBwcm9wcyxcbiAgICAgICAgd2FybjogcHJvcHMsXG4gICAgICAgIGVycm9yOiBwcm9wcyxcbiAgICAgICAgZ3JvdXA6IHByb3BzLFxuICAgICAgICBncm91cENvbGxhcHNlZDogcHJvcHMsXG4gICAgICAgIGdyb3VwRW5kOiBwcm9wc1xuICAgICAgfSk7XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgIH1cblxuICAgIGRpc2FibGVkRGVwdGgrKztcbiAgfVxufVxuZnVuY3Rpb24gcmVlbmFibGVMb2dzKCkge1xuICB7XG4gICAgZGlzYWJsZWREZXB0aC0tO1xuXG4gICAgaWYgKGRpc2FibGVkRGVwdGggPT09IDApIHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgICAgdmFyIHByb3BzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICB9OyAvLyAkRmxvd0ZpeE1lIEZsb3cgdGhpbmtzIGNvbnNvbGUgaXMgaW1tdXRhYmxlLlxuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhjb25zb2xlLCB7XG4gICAgICAgIGxvZzogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkxvZ1xuICAgICAgICB9KSxcbiAgICAgICAgaW5mbzogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkluZm9cbiAgICAgICAgfSksXG4gICAgICAgIHdhcm46IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZXYXJuXG4gICAgICAgIH0pLFxuICAgICAgICBlcnJvcjogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkVycm9yXG4gICAgICAgIH0pLFxuICAgICAgICBncm91cDogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkdyb3VwXG4gICAgICAgIH0pLFxuICAgICAgICBncm91cENvbGxhcHNlZDogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkdyb3VwQ29sbGFwc2VkXG4gICAgICAgIH0pLFxuICAgICAgICBncm91cEVuZDogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkdyb3VwRW5kXG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICAgIC8qIGVzbGludC1lbmFibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXG4gICAgfVxuXG4gICAgaWYgKGRpc2FibGVkRGVwdGggPCAwKSB7XG4gICAgICBlcnJvcignZGlzYWJsZWREZXB0aCBmZWxsIGJlbG93IHplcm8uICcgKyAnVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG4gICAgfVxuICB9XG59XG5cbnZhciBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnREaXNwYXRjaGVyO1xudmFyIHByZWZpeDtcbmZ1bmN0aW9uIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKG5hbWUsIHNvdXJjZSwgb3duZXJGbikge1xuICB7XG4gICAgaWYgKHByZWZpeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBFeHRyYWN0IHRoZSBWTSBzcGVjaWZpYyBwcmVmaXggdXNlZCBieSBlYWNoIGxpbmUuXG4gICAgICB0cnkge1xuICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICB2YXIgbWF0Y2ggPSB4LnN0YWNrLnRyaW0oKS5tYXRjaCgvXFxuKCAqKGF0ICk/KS8pO1xuICAgICAgICBwcmVmaXggPSBtYXRjaCAmJiBtYXRjaFsxXSB8fCAnJztcbiAgICAgIH1cbiAgICB9IC8vIFdlIHVzZSB0aGUgcHJlZml4IHRvIGVuc3VyZSBvdXIgc3RhY2tzIGxpbmUgdXAgd2l0aCBuYXRpdmUgc3RhY2sgZnJhbWVzLlxuXG5cbiAgICByZXR1cm4gJ1xcbicgKyBwcmVmaXggKyBuYW1lO1xuICB9XG59XG52YXIgcmVlbnRyeSA9IGZhbHNlO1xudmFyIGNvbXBvbmVudEZyYW1lQ2FjaGU7XG5cbntcbiAgdmFyIFBvc3NpYmx5V2Vha01hcCA9IHR5cGVvZiBXZWFrTWFwID09PSAnZnVuY3Rpb24nID8gV2Vha01hcCA6IE1hcDtcbiAgY29tcG9uZW50RnJhbWVDYWNoZSA9IG5ldyBQb3NzaWJseVdlYWtNYXAoKTtcbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZShmbiwgY29uc3RydWN0KSB7XG4gIC8vIElmIHNvbWV0aGluZyBhc2tlZCBmb3IgYSBzdGFjayBpbnNpZGUgYSBmYWtlIHJlbmRlciwgaXQgc2hvdWxkIGdldCBpZ25vcmVkLlxuICBpZiAoIWZuIHx8IHJlZW50cnkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICB7XG4gICAgdmFyIGZyYW1lID0gY29tcG9uZW50RnJhbWVDYWNoZS5nZXQoZm4pO1xuXG4gICAgaWYgKGZyYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmcmFtZTtcbiAgICB9XG4gIH1cblxuICB2YXIgY29udHJvbDtcbiAgcmVlbnRyeSA9IHRydWU7XG4gIHZhciBwcmV2aW91c1ByZXBhcmVTdGFja1RyYWNlID0gRXJyb3IucHJlcGFyZVN0YWNrVHJhY2U7IC8vICRGbG93Rml4TWUgSXQgZG9lcyBhY2NlcHQgdW5kZWZpbmVkLlxuXG4gIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gdW5kZWZpbmVkO1xuICB2YXIgcHJldmlvdXNEaXNwYXRjaGVyO1xuXG4gIHtcbiAgICBwcmV2aW91c0Rpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDsgLy8gU2V0IHRoZSBkaXNwYXRjaGVyIGluIERFViBiZWNhdXNlIHRoaXMgbWlnaHQgYmUgY2FsbCBpbiB0aGUgcmVuZGVyIGZ1bmN0aW9uXG4gICAgLy8gZm9yIHdhcm5pbmdzLlxuXG4gICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBudWxsO1xuICAgIGRpc2FibGVMb2dzKCk7XG4gIH1cblxuICB0cnkge1xuICAgIC8vIFRoaXMgc2hvdWxkIHRocm93LlxuICAgIGlmIChjb25zdHJ1Y3QpIHtcbiAgICAgIC8vIFNvbWV0aGluZyBzaG91bGQgYmUgc2V0dGluZyB0aGUgcHJvcHMgaW4gdGhlIGNvbnN0cnVjdG9yLlxuICAgICAgdmFyIEZha2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICB9OyAvLyAkRmxvd0ZpeE1lXG5cblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZha2UucHJvdG90eXBlLCAncHJvcHMnLCB7XG4gICAgICAgIHNldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIC8vIFdlIHVzZSBhIHRocm93aW5nIHNldHRlciBpbnN0ZWFkIG9mIGZyb3plbiBvciBub24td3JpdGFibGUgcHJvcHNcbiAgICAgICAgICAvLyBiZWNhdXNlIHRoYXQgd29uJ3QgdGhyb3cgaW4gYSBub24tc3RyaWN0IG1vZGUgZnVuY3Rpb24uXG4gICAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gJ29iamVjdCcgJiYgUmVmbGVjdC5jb25zdHJ1Y3QpIHtcbiAgICAgICAgLy8gV2UgY29uc3RydWN0IGEgZGlmZmVyZW50IGNvbnRyb2wgZm9yIHRoaXMgY2FzZSB0byBpbmNsdWRlIGFueSBleHRyYVxuICAgICAgICAvLyBmcmFtZXMgYWRkZWQgYnkgdGhlIGNvbnN0cnVjdCBjYWxsLlxuICAgICAgICB0cnkge1xuICAgICAgICAgIFJlZmxlY3QuY29uc3RydWN0KEZha2UsIFtdKTtcbiAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgIGNvbnRyb2wgPSB4O1xuICAgICAgICB9XG5cbiAgICAgICAgUmVmbGVjdC5jb25zdHJ1Y3QoZm4sIFtdLCBGYWtlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgRmFrZS5jYWxsKCk7XG4gICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICBjb250cm9sID0geDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZuLmNhbGwoRmFrZS5wcm90b3R5cGUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICBjb250cm9sID0geDtcbiAgICAgIH1cblxuICAgICAgZm4oKTtcbiAgICB9XG4gIH0gY2F0Y2ggKHNhbXBsZSkge1xuICAgIC8vIFRoaXMgaXMgaW5saW5lZCBtYW51YWxseSBiZWNhdXNlIGNsb3N1cmUgZG9lc24ndCBkbyBpdCBmb3IgdXMuXG4gICAgaWYgKHNhbXBsZSAmJiBjb250cm9sICYmIHR5cGVvZiBzYW1wbGUuc3RhY2sgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBUaGlzIGV4dHJhY3RzIHRoZSBmaXJzdCBmcmFtZSBmcm9tIHRoZSBzYW1wbGUgdGhhdCBpc24ndCBhbHNvIGluIHRoZSBjb250cm9sLlxuICAgICAgLy8gU2tpcHBpbmcgb25lIGZyYW1lIHRoYXQgd2UgYXNzdW1lIGlzIHRoZSBmcmFtZSB0aGF0IGNhbGxzIHRoZSB0d28uXG4gICAgICB2YXIgc2FtcGxlTGluZXMgPSBzYW1wbGUuc3RhY2suc3BsaXQoJ1xcbicpO1xuICAgICAgdmFyIGNvbnRyb2xMaW5lcyA9IGNvbnRyb2wuc3RhY2suc3BsaXQoJ1xcbicpO1xuICAgICAgdmFyIHMgPSBzYW1wbGVMaW5lcy5sZW5ndGggLSAxO1xuICAgICAgdmFyIGMgPSBjb250cm9sTGluZXMubGVuZ3RoIC0gMTtcblxuICAgICAgd2hpbGUgKHMgPj0gMSAmJiBjID49IDAgJiYgc2FtcGxlTGluZXNbc10gIT09IGNvbnRyb2xMaW5lc1tjXSkge1xuICAgICAgICAvLyBXZSBleHBlY3QgYXQgbGVhc3Qgb25lIHN0YWNrIGZyYW1lIHRvIGJlIHNoYXJlZC5cbiAgICAgICAgLy8gVHlwaWNhbGx5IHRoaXMgd2lsbCBiZSB0aGUgcm9vdCBtb3N0IG9uZS4gSG93ZXZlciwgc3RhY2sgZnJhbWVzIG1heSBiZVxuICAgICAgICAvLyBjdXQgb2ZmIGR1ZSB0byBtYXhpbXVtIHN0YWNrIGxpbWl0cy4gSW4gdGhpcyBjYXNlLCBvbmUgbWF5YmUgY3V0IG9mZlxuICAgICAgICAvLyBlYXJsaWVyIHRoYW4gdGhlIG90aGVyLiBXZSBhc3N1bWUgdGhhdCB0aGUgc2FtcGxlIGlzIGxvbmdlciBvciB0aGUgc2FtZVxuICAgICAgICAvLyBhbmQgdGhlcmUgZm9yIGN1dCBvZmYgZWFybGllci4gU28gd2Ugc2hvdWxkIGZpbmQgdGhlIHJvb3QgbW9zdCBmcmFtZSBpblxuICAgICAgICAvLyB0aGUgc2FtcGxlIHNvbWV3aGVyZSBpbiB0aGUgY29udHJvbC5cbiAgICAgICAgYy0tO1xuICAgICAgfVxuXG4gICAgICBmb3IgKDsgcyA+PSAxICYmIGMgPj0gMDsgcy0tLCBjLS0pIHtcbiAgICAgICAgLy8gTmV4dCB3ZSBmaW5kIHRoZSBmaXJzdCBvbmUgdGhhdCBpc24ndCB0aGUgc2FtZSB3aGljaCBzaG91bGQgYmUgdGhlXG4gICAgICAgIC8vIGZyYW1lIHRoYXQgY2FsbGVkIG91ciBzYW1wbGUgZnVuY3Rpb24gYW5kIHRoZSBjb250cm9sLlxuICAgICAgICBpZiAoc2FtcGxlTGluZXNbc10gIT09IGNvbnRyb2xMaW5lc1tjXSkge1xuICAgICAgICAgIC8vIEluIFY4LCB0aGUgZmlyc3QgbGluZSBpcyBkZXNjcmliaW5nIHRoZSBtZXNzYWdlIGJ1dCBvdGhlciBWTXMgZG9uJ3QuXG4gICAgICAgICAgLy8gSWYgd2UncmUgYWJvdXQgdG8gcmV0dXJuIHRoZSBmaXJzdCBsaW5lLCBhbmQgdGhlIGNvbnRyb2wgaXMgYWxzbyBvbiB0aGUgc2FtZVxuICAgICAgICAgIC8vIGxpbmUsIHRoYXQncyBhIHByZXR0eSBnb29kIGluZGljYXRvciB0aGF0IG91ciBzYW1wbGUgdGhyZXcgYXQgc2FtZSBsaW5lIGFzXG4gICAgICAgICAgLy8gdGhlIGNvbnRyb2wuIEkuZS4gYmVmb3JlIHdlIGVudGVyZWQgdGhlIHNhbXBsZSBmcmFtZS4gU28gd2UgaWdub3JlIHRoaXMgcmVzdWx0LlxuICAgICAgICAgIC8vIFRoaXMgY2FuIGhhcHBlbiBpZiB5b3UgcGFzc2VkIGEgY2xhc3MgdG8gZnVuY3Rpb24gY29tcG9uZW50LCBvciBub24tZnVuY3Rpb24uXG4gICAgICAgICAgaWYgKHMgIT09IDEgfHwgYyAhPT0gMSkge1xuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICBzLS07XG4gICAgICAgICAgICAgIGMtLTsgLy8gV2UgbWF5IHN0aWxsIGhhdmUgc2ltaWxhciBpbnRlcm1lZGlhdGUgZnJhbWVzIGZyb20gdGhlIGNvbnN0cnVjdCBjYWxsLlxuICAgICAgICAgICAgICAvLyBUaGUgbmV4dCBvbmUgdGhhdCBpc24ndCB0aGUgc2FtZSBzaG91bGQgYmUgb3VyIG1hdGNoIHRob3VnaC5cblxuICAgICAgICAgICAgICBpZiAoYyA8IDAgfHwgc2FtcGxlTGluZXNbc10gIT09IGNvbnRyb2xMaW5lc1tjXSkge1xuICAgICAgICAgICAgICAgIC8vIFY4IGFkZHMgYSBcIm5ld1wiIHByZWZpeCBmb3IgbmF0aXZlIGNsYXNzZXMuIExldCdzIHJlbW92ZSBpdCB0byBtYWtlIGl0IHByZXR0aWVyLlxuICAgICAgICAgICAgICAgIHZhciBfZnJhbWUgPSAnXFxuJyArIHNhbXBsZUxpbmVzW3NdLnJlcGxhY2UoJyBhdCBuZXcgJywgJyBhdCAnKTtcblxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50RnJhbWVDYWNoZS5zZXQoZm4sIF9mcmFtZSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSAvLyBSZXR1cm4gdGhlIGxpbmUgd2UgZm91bmQuXG5cblxuICAgICAgICAgICAgICAgIHJldHVybiBfZnJhbWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gd2hpbGUgKHMgPj0gMSAmJiBjID49IDApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIHJlZW50cnkgPSBmYWxzZTtcblxuICAgIHtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldmlvdXNEaXNwYXRjaGVyO1xuICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgfVxuXG4gICAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSBwcmV2aW91c1ByZXBhcmVTdGFja1RyYWNlO1xuICB9IC8vIEZhbGxiYWNrIHRvIGp1c3QgdXNpbmcgdGhlIG5hbWUgaWYgd2UgY291bGRuJ3QgbWFrZSBpdCB0aHJvdy5cblxuXG4gIHZhciBuYW1lID0gZm4gPyBmbi5kaXNwbGF5TmFtZSB8fCBmbi5uYW1lIDogJyc7XG4gIHZhciBzeW50aGV0aWNGcmFtZSA9IG5hbWUgPyBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShuYW1lKSA6ICcnO1xuXG4gIHtcbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb21wb25lbnRGcmFtZUNhY2hlLnNldChmbiwgc3ludGhldGljRnJhbWUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzeW50aGV0aWNGcmFtZTtcbn1cbmZ1bmN0aW9uIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZShmbiwgc291cmNlLCBvd25lckZuKSB7XG4gIHtcbiAgICByZXR1cm4gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZShmbiwgZmFsc2UpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNob3VsZENvbnN0cnVjdChDb21wb25lbnQpIHtcbiAgdmFyIHByb3RvdHlwZSA9IENvbXBvbmVudC5wcm90b3R5cGU7XG4gIHJldHVybiAhIShwcm90b3R5cGUgJiYgcHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQpO1xufVxuXG5mdW5jdGlvbiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYodHlwZSwgc291cmNlLCBvd25lckZuKSB7XG5cbiAgaWYgKHR5cGUgPT0gbnVsbCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHtcbiAgICAgIHJldHVybiBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKHR5cGUsIHNob3VsZENvbnN0cnVjdCh0eXBlKSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSh0eXBlKTtcbiAgfVxuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgZXhwb3J0cy5TdXNwZW5zZTpcbiAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSgnU3VzcGVuc2UnKTtcblxuICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKCdTdXNwZW5zZUxpc3QnKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICBzd2l0Y2ggKHR5cGUuJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgcmV0dXJuIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZSh0eXBlLnJlbmRlcik7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAvLyBNZW1vIG1heSBjb250YWluIGFueSBjb21wb25lbnQgdHlwZSBzbyB3ZSByZWN1cnNpdmVseSByZXNvbHZlIGl0LlxuICAgICAgICByZXR1cm4gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKHR5cGUudHlwZSwgc291cmNlLCBvd25lckZuKTtcblxuICAgICAgY2FzZSBSRUFDVF9CTE9DS19UWVBFOlxuICAgICAgICByZXR1cm4gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKHR5cGUuX3JlbmRlcik7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIGxhenlDb21wb25lbnQgPSB0eXBlO1xuICAgICAgICAgIHZhciBwYXlsb2FkID0gbGF6eUNvbXBvbmVudC5fcGF5bG9hZDtcbiAgICAgICAgICB2YXIgaW5pdCA9IGxhenlDb21wb25lbnQuX2luaXQ7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gTGF6eSBtYXkgY29udGFpbiBhbnkgY29tcG9uZW50IHR5cGUgc28gd2UgcmVjdXJzaXZlbHkgcmVzb2x2ZSBpdC5cbiAgICAgICAgICAgIHJldHVybiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYoaW5pdChwYXlsb2FkKSwgc291cmNlLCBvd25lckZuKTtcbiAgICAgICAgICB9IGNhdGNoICh4KSB7fVxuICAgICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG52YXIgbG9nZ2VkVHlwZUZhaWx1cmVzID0ge307XG52YXIgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSQxID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcblxuZnVuY3Rpb24gc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZWxlbWVudCkge1xuICB7XG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIHZhciBvd25lciA9IGVsZW1lbnQuX293bmVyO1xuICAgICAgdmFyIHN0YWNrID0gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKGVsZW1lbnQudHlwZSwgZWxlbWVudC5fc291cmNlLCBvd25lciA/IG93bmVyLnR5cGUgOiBudWxsKTtcbiAgICAgIFJlYWN0RGVidWdDdXJyZW50RnJhbWUkMS5zZXRFeHRyYVN0YWNrRnJhbWUoc3RhY2spO1xuICAgIH0gZWxzZSB7XG4gICAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lJDEuc2V0RXh0cmFTdGFja0ZyYW1lKG51bGwpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja1Byb3BUeXBlcyh0eXBlU3BlY3MsIHZhbHVlcywgbG9jYXRpb24sIGNvbXBvbmVudE5hbWUsIGVsZW1lbnQpIHtcbiAge1xuICAgIC8vICRGbG93Rml4TWUgVGhpcyBpcyBva2F5IGJ1dCBGbG93IGRvZXNuJ3Qga25vdyBpdC5cbiAgICB2YXIgaGFzID0gRnVuY3Rpb24uY2FsbC5iaW5kKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpO1xuXG4gICAgZm9yICh2YXIgdHlwZVNwZWNOYW1lIGluIHR5cGVTcGVjcykge1xuICAgICAgaWYgKGhhcyh0eXBlU3BlY3MsIHR5cGVTcGVjTmFtZSkpIHtcbiAgICAgICAgdmFyIGVycm9yJDEgPSB2b2lkIDA7IC8vIFByb3AgdHlwZSB2YWxpZGF0aW9uIG1heSB0aHJvdy4gSW4gY2FzZSB0aGV5IGRvLCB3ZSBkb24ndCB3YW50IHRvXG4gICAgICAgIC8vIGZhaWwgdGhlIHJlbmRlciBwaGFzZSB3aGVyZSBpdCBkaWRuJ3QgZmFpbCBiZWZvcmUuIFNvIHdlIGxvZyBpdC5cbiAgICAgICAgLy8gQWZ0ZXIgdGhlc2UgaGF2ZSBiZWVuIGNsZWFuZWQgdXAsIHdlJ2xsIGxldCB0aGVtIHRocm93LlxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBpbnRlbnRpb25hbGx5IGFuIGludmFyaWFudCB0aGF0IGdldHMgY2F1Z2h0LiBJdCdzIHRoZSBzYW1lXG4gICAgICAgICAgLy8gYmVoYXZpb3IgYXMgd2l0aG91dCB0aGlzIHN0YXRlbWVudCBleGNlcHQgd2l0aCBhIGJldHRlciBtZXNzYWdlLlxuICAgICAgICAgIGlmICh0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHZhciBlcnIgPSBFcnJvcigoY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnKSArICc6ICcgKyBsb2NhdGlvbiArICcgdHlwZSBgJyArIHR5cGVTcGVjTmFtZSArICdgIGlzIGludmFsaWQ7ICcgKyAnaXQgbXVzdCBiZSBhIGZ1bmN0aW9uLCB1c3VhbGx5IGZyb20gdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLCBidXQgcmVjZWl2ZWQgYCcgKyB0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gKyAnYC4nICsgJ1RoaXMgb2Z0ZW4gaGFwcGVucyBiZWNhdXNlIG9mIHR5cG9zIHN1Y2ggYXMgYFByb3BUeXBlcy5mdW5jdGlvbmAgaW5zdGVhZCBvZiBgUHJvcFR5cGVzLmZ1bmNgLicpO1xuICAgICAgICAgICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZXJyb3IkMSA9IHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdKHZhbHVlcywgdHlwZVNwZWNOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgbnVsbCwgJ1NFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEJyk7XG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgZXJyb3IkMSA9IGV4O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVycm9yJDEgJiYgIShlcnJvciQxIGluc3RhbmNlb2YgRXJyb3IpKSB7XG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZWxlbWVudCk7XG5cbiAgICAgICAgICBlcnJvcignJXM6IHR5cGUgc3BlY2lmaWNhdGlvbiBvZiAlcycgKyAnIGAlc2AgaXMgaW52YWxpZDsgdGhlIHR5cGUgY2hlY2tlciAnICsgJ2Z1bmN0aW9uIG11c3QgcmV0dXJuIGBudWxsYCBvciBhbiBgRXJyb3JgIGJ1dCByZXR1cm5lZCBhICVzLiAnICsgJ1lvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gcGFzcyBhbiBhcmd1bWVudCB0byB0aGUgdHlwZSBjaGVja2VyICcgKyAnY3JlYXRvciAoYXJyYXlPZiwgaW5zdGFuY2VPZiwgb2JqZWN0T2YsIG9uZU9mLCBvbmVPZlR5cGUsIGFuZCAnICsgJ3NoYXBlIGFsbCByZXF1aXJlIGFuIGFyZ3VtZW50KS4nLCBjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycsIGxvY2F0aW9uLCB0eXBlU3BlY05hbWUsIHR5cGVvZiBlcnJvciQxKTtcblxuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KG51bGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVycm9yJDEgaW5zdGFuY2VvZiBFcnJvciAmJiAhKGVycm9yJDEubWVzc2FnZSBpbiBsb2dnZWRUeXBlRmFpbHVyZXMpKSB7XG4gICAgICAgICAgLy8gT25seSBtb25pdG9yIHRoaXMgZmFpbHVyZSBvbmNlIGJlY2F1c2UgdGhlcmUgdGVuZHMgdG8gYmUgYSBsb3Qgb2YgdGhlXG4gICAgICAgICAgLy8gc2FtZSBlcnJvci5cbiAgICAgICAgICBsb2dnZWRUeXBlRmFpbHVyZXNbZXJyb3IkMS5tZXNzYWdlXSA9IHRydWU7XG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZWxlbWVudCk7XG5cbiAgICAgICAgICBlcnJvcignRmFpbGVkICVzIHR5cGU6ICVzJywgbG9jYXRpb24sIGVycm9yJDEubWVzc2FnZSk7XG5cbiAgICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChudWxsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKGVsZW1lbnQpIHtcbiAge1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICB2YXIgb3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgICAgIHZhciBzdGFjayA9IGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVihlbGVtZW50LnR5cGUsIGVsZW1lbnQuX3NvdXJjZSwgb3duZXIgPyBvd25lci50eXBlIDogbnVsbCk7XG4gICAgICBzZXRFeHRyYVN0YWNrRnJhbWUoc3RhY2spO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRFeHRyYVN0YWNrRnJhbWUobnVsbCk7XG4gICAgfVxuICB9XG59XG5cbnZhciBwcm9wVHlwZXNNaXNzcGVsbFdhcm5pbmdTaG93bjtcblxue1xuICBwcm9wVHlwZXNNaXNzcGVsbFdhcm5pbmdTaG93biA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKSB7XG4gIGlmIChSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50KSB7XG4gICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lKFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQudHlwZSk7XG5cbiAgICBpZiAobmFtZSkge1xuICAgICAgcmV0dXJuICdcXG5cXG5DaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgJyArIG5hbWUgKyAnYC4nO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAnJztcbn1cblxuZnVuY3Rpb24gZ2V0U291cmNlSW5mb0Vycm9yQWRkZW5kdW0oc291cmNlKSB7XG4gIGlmIChzb3VyY2UgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBmaWxlTmFtZSA9IHNvdXJjZS5maWxlTmFtZS5yZXBsYWNlKC9eLipbXFxcXFxcL10vLCAnJyk7XG4gICAgdmFyIGxpbmVOdW1iZXIgPSBzb3VyY2UubGluZU51bWJlcjtcbiAgICByZXR1cm4gJ1xcblxcbkNoZWNrIHlvdXIgY29kZSBhdCAnICsgZmlsZU5hbWUgKyAnOicgKyBsaW5lTnVtYmVyICsgJy4nO1xuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG5mdW5jdGlvbiBnZXRTb3VyY2VJbmZvRXJyb3JBZGRlbmR1bUZvclByb3BzKGVsZW1lbnRQcm9wcykge1xuICBpZiAoZWxlbWVudFByb3BzICE9PSBudWxsICYmIGVsZW1lbnRQcm9wcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGdldFNvdXJjZUluZm9FcnJvckFkZGVuZHVtKGVsZW1lbnRQcm9wcy5fX3NvdXJjZSk7XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG4vKipcbiAqIFdhcm4gaWYgdGhlcmUncyBubyBrZXkgZXhwbGljaXRseSBzZXQgb24gZHluYW1pYyBhcnJheXMgb2YgY2hpbGRyZW4gb3JcbiAqIG9iamVjdCBrZXlzIGFyZSBub3QgdmFsaWQuIFRoaXMgYWxsb3dzIHVzIHRvIGtlZXAgdHJhY2sgb2YgY2hpbGRyZW4gYmV0d2VlblxuICogdXBkYXRlcy5cbiAqL1xuXG5cbnZhciBvd25lckhhc0tleVVzZVdhcm5pbmcgPSB7fTtcblxuZnVuY3Rpb24gZ2V0Q3VycmVudENvbXBvbmVudEVycm9ySW5mbyhwYXJlbnRUeXBlKSB7XG4gIHZhciBpbmZvID0gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCk7XG5cbiAgaWYgKCFpbmZvKSB7XG4gICAgdmFyIHBhcmVudE5hbWUgPSB0eXBlb2YgcGFyZW50VHlwZSA9PT0gJ3N0cmluZycgPyBwYXJlbnRUeXBlIDogcGFyZW50VHlwZS5kaXNwbGF5TmFtZSB8fCBwYXJlbnRUeXBlLm5hbWU7XG5cbiAgICBpZiAocGFyZW50TmFtZSkge1xuICAgICAgaW5mbyA9IFwiXFxuXFxuQ2hlY2sgdGhlIHRvcC1sZXZlbCByZW5kZXIgY2FsbCB1c2luZyA8XCIgKyBwYXJlbnROYW1lICsgXCI+LlwiO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpbmZvO1xufVxuLyoqXG4gKiBXYXJuIGlmIHRoZSBlbGVtZW50IGRvZXNuJ3QgaGF2ZSBhbiBleHBsaWNpdCBrZXkgYXNzaWduZWQgdG8gaXQuXG4gKiBUaGlzIGVsZW1lbnQgaXMgaW4gYW4gYXJyYXkuIFRoZSBhcnJheSBjb3VsZCBncm93IGFuZCBzaHJpbmsgb3IgYmVcbiAqIHJlb3JkZXJlZC4gQWxsIGNoaWxkcmVuIHRoYXQgaGF2ZW4ndCBhbHJlYWR5IGJlZW4gdmFsaWRhdGVkIGFyZSByZXF1aXJlZCB0b1xuICogaGF2ZSBhIFwia2V5XCIgcHJvcGVydHkgYXNzaWduZWQgdG8gaXQuIEVycm9yIHN0YXR1c2VzIGFyZSBjYWNoZWQgc28gYSB3YXJuaW5nXG4gKiB3aWxsIG9ubHkgYmUgc2hvd24gb25jZS5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBlbGVtZW50IEVsZW1lbnQgdGhhdCByZXF1aXJlcyBhIGtleS5cbiAqIEBwYXJhbSB7Kn0gcGFyZW50VHlwZSBlbGVtZW50J3MgcGFyZW50J3MgdHlwZS5cbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlRXhwbGljaXRLZXkoZWxlbWVudCwgcGFyZW50VHlwZSkge1xuICBpZiAoIWVsZW1lbnQuX3N0b3JlIHx8IGVsZW1lbnQuX3N0b3JlLnZhbGlkYXRlZCB8fCBlbGVtZW50LmtleSAhPSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZWxlbWVudC5fc3RvcmUudmFsaWRhdGVkID0gdHJ1ZTtcbiAgdmFyIGN1cnJlbnRDb21wb25lbnRFcnJvckluZm8gPSBnZXRDdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvKHBhcmVudFR5cGUpO1xuXG4gIGlmIChvd25lckhhc0tleVVzZVdhcm5pbmdbY3VycmVudENvbXBvbmVudEVycm9ySW5mb10pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBvd25lckhhc0tleVVzZVdhcm5pbmdbY3VycmVudENvbXBvbmVudEVycm9ySW5mb10gPSB0cnVlOyAvLyBVc3VhbGx5IHRoZSBjdXJyZW50IG93bmVyIGlzIHRoZSBvZmZlbmRlciwgYnV0IGlmIGl0IGFjY2VwdHMgY2hpbGRyZW4gYXMgYVxuICAvLyBwcm9wZXJ0eSwgaXQgbWF5IGJlIHRoZSBjcmVhdG9yIG9mIHRoZSBjaGlsZCB0aGF0J3MgcmVzcG9uc2libGUgZm9yXG4gIC8vIGFzc2lnbmluZyBpdCBhIGtleS5cblxuICB2YXIgY2hpbGRPd25lciA9ICcnO1xuXG4gIGlmIChlbGVtZW50ICYmIGVsZW1lbnQuX293bmVyICYmIGVsZW1lbnQuX293bmVyICE9PSBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50KSB7XG4gICAgLy8gR2l2ZSB0aGUgY29tcG9uZW50IHRoYXQgb3JpZ2luYWxseSBjcmVhdGVkIHRoaXMgY2hpbGQuXG4gICAgY2hpbGRPd25lciA9IFwiIEl0IHdhcyBwYXNzZWQgYSBjaGlsZCBmcm9tIFwiICsgZ2V0Q29tcG9uZW50TmFtZShlbGVtZW50Ll9vd25lci50eXBlKSArIFwiLlwiO1xuICB9XG5cbiAge1xuICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEoZWxlbWVudCk7XG5cbiAgICBlcnJvcignRWFjaCBjaGlsZCBpbiBhIGxpc3Qgc2hvdWxkIGhhdmUgYSB1bmlxdWUgXCJrZXlcIiBwcm9wLicgKyAnJXMlcyBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3dhcm5pbmcta2V5cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4nLCBjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvLCBjaGlsZE93bmVyKTtcblxuICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEobnVsbCk7XG4gIH1cbn1cbi8qKlxuICogRW5zdXJlIHRoYXQgZXZlcnkgZWxlbWVudCBlaXRoZXIgaXMgcGFzc2VkIGluIGEgc3RhdGljIGxvY2F0aW9uLCBpbiBhblxuICogYXJyYXkgd2l0aCBhbiBleHBsaWNpdCBrZXlzIHByb3BlcnR5IGRlZmluZWQsIG9yIGluIGFuIG9iamVjdCBsaXRlcmFsXG4gKiB3aXRoIHZhbGlkIGtleSBwcm9wZXJ0eS5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqIEBwYXJhbSB7UmVhY3ROb2RlfSBub2RlIFN0YXRpY2FsbHkgcGFzc2VkIGNoaWxkIG9mIGFueSB0eXBlLlxuICogQHBhcmFtIHsqfSBwYXJlbnRUeXBlIG5vZGUncyBwYXJlbnQncyB0eXBlLlxuICovXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVDaGlsZEtleXMobm9kZSwgcGFyZW50VHlwZSkge1xuICBpZiAodHlwZW9mIG5vZGUgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkobm9kZSkpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjaGlsZCA9IG5vZGVbaV07XG5cbiAgICAgIGlmIChpc1ZhbGlkRWxlbWVudChjaGlsZCkpIHtcbiAgICAgICAgdmFsaWRhdGVFeHBsaWNpdEtleShjaGlsZCwgcGFyZW50VHlwZSk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzVmFsaWRFbGVtZW50KG5vZGUpKSB7XG4gICAgLy8gVGhpcyBlbGVtZW50IHdhcyBwYXNzZWQgaW4gYSB2YWxpZCBsb2NhdGlvbi5cbiAgICBpZiAobm9kZS5fc3RvcmUpIHtcbiAgICAgIG5vZGUuX3N0b3JlLnZhbGlkYXRlZCA9IHRydWU7XG4gICAgfVxuICB9IGVsc2UgaWYgKG5vZGUpIHtcbiAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4obm9kZSk7XG5cbiAgICBpZiAodHlwZW9mIGl0ZXJhdG9yRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIC8vIEVudHJ5IGl0ZXJhdG9ycyB1c2VkIHRvIHByb3ZpZGUgaW1wbGljaXQga2V5cyxcbiAgICAgIC8vIGJ1dCBub3cgd2UgcHJpbnQgYSBzZXBhcmF0ZSB3YXJuaW5nIGZvciB0aGVtIGxhdGVyLlxuICAgICAgaWYgKGl0ZXJhdG9yRm4gIT09IG5vZGUuZW50cmllcykge1xuICAgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwobm9kZSk7XG4gICAgICAgIHZhciBzdGVwO1xuXG4gICAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcbiAgICAgICAgICBpZiAoaXNWYWxpZEVsZW1lbnQoc3RlcC52YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbGlkYXRlRXhwbGljaXRLZXkoc3RlcC52YWx1ZSwgcGFyZW50VHlwZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4vKipcbiAqIEdpdmVuIGFuIGVsZW1lbnQsIHZhbGlkYXRlIHRoYXQgaXRzIHByb3BzIGZvbGxvdyB0aGUgcHJvcFR5cGVzIGRlZmluaXRpb24sXG4gKiBwcm92aWRlZCBieSB0aGUgdHlwZS5cbiAqXG4gKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZWxlbWVudFxuICovXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVQcm9wVHlwZXMoZWxlbWVudCkge1xuICB7XG4gICAgdmFyIHR5cGUgPSBlbGVtZW50LnR5cGU7XG5cbiAgICBpZiAodHlwZSA9PT0gbnVsbCB8fCB0eXBlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHByb3BUeXBlcztcblxuICAgIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcHJvcFR5cGVzID0gdHlwZS5wcm9wVHlwZXM7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgfHwgLy8gTm90ZTogTWVtbyBvbmx5IGNoZWNrcyBvdXRlciBwcm9wcyBoZXJlLlxuICAgIC8vIElubmVyIHByb3BzIGFyZSBjaGVja2VkIGluIHRoZSByZWNvbmNpbGVyLlxuICAgIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX01FTU9fVFlQRSkpIHtcbiAgICAgIHByb3BUeXBlcyA9IHR5cGUucHJvcFR5cGVzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHByb3BUeXBlcykge1xuICAgICAgLy8gSW50ZW50aW9uYWxseSBpbnNpZGUgdG8gYXZvaWQgdHJpZ2dlcmluZyBsYXp5IGluaXRpYWxpemVyczpcbiAgICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZSh0eXBlKTtcbiAgICAgIGNoZWNrUHJvcFR5cGVzKHByb3BUeXBlcywgZWxlbWVudC5wcm9wcywgJ3Byb3AnLCBuYW1lLCBlbGVtZW50KTtcbiAgICB9IGVsc2UgaWYgKHR5cGUuUHJvcFR5cGVzICE9PSB1bmRlZmluZWQgJiYgIXByb3BUeXBlc01pc3NwZWxsV2FybmluZ1Nob3duKSB7XG4gICAgICBwcm9wVHlwZXNNaXNzcGVsbFdhcm5pbmdTaG93biA9IHRydWU7IC8vIEludGVudGlvbmFsbHkgaW5zaWRlIHRvIGF2b2lkIHRyaWdnZXJpbmcgbGF6eSBpbml0aWFsaXplcnM6XG5cbiAgICAgIHZhciBfbmFtZSA9IGdldENvbXBvbmVudE5hbWUodHlwZSk7XG5cbiAgICAgIGVycm9yKCdDb21wb25lbnQgJXMgZGVjbGFyZWQgYFByb3BUeXBlc2AgaW5zdGVhZCBvZiBgcHJvcFR5cGVzYC4gRGlkIHlvdSBtaXNzcGVsbCB0aGUgcHJvcGVydHkgYXNzaWdubWVudD8nLCBfbmFtZSB8fCAnVW5rbm93bicpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdHlwZS5nZXREZWZhdWx0UHJvcHMgPT09ICdmdW5jdGlvbicgJiYgIXR5cGUuZ2V0RGVmYXVsdFByb3BzLmlzUmVhY3RDbGFzc0FwcHJvdmVkKSB7XG4gICAgICBlcnJvcignZ2V0RGVmYXVsdFByb3BzIGlzIG9ubHkgdXNlZCBvbiBjbGFzc2ljIFJlYWN0LmNyZWF0ZUNsYXNzICcgKyAnZGVmaW5pdGlvbnMuIFVzZSBhIHN0YXRpYyBwcm9wZXJ0eSBuYW1lZCBgZGVmYXVsdFByb3BzYCBpbnN0ZWFkLicpO1xuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBHaXZlbiBhIGZyYWdtZW50LCB2YWxpZGF0ZSB0aGF0IGl0IGNhbiBvbmx5IGJlIHByb3ZpZGVkIHdpdGggZnJhZ21lbnQgcHJvcHNcbiAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBmcmFnbWVudFxuICovXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVGcmFnbWVudFByb3BzKGZyYWdtZW50KSB7XG4gIHtcbiAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGZyYWdtZW50LnByb3BzKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IGtleXNbaV07XG5cbiAgICAgIGlmIChrZXkgIT09ICdjaGlsZHJlbicgJiYga2V5ICE9PSAna2V5Jykge1xuICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKGZyYWdtZW50KTtcblxuICAgICAgICBlcnJvcignSW52YWxpZCBwcm9wIGAlc2Agc3VwcGxpZWQgdG8gYFJlYWN0LkZyYWdtZW50YC4gJyArICdSZWFjdC5GcmFnbWVudCBjYW4gb25seSBoYXZlIGBrZXlgIGFuZCBgY2hpbGRyZW5gIHByb3BzLicsIGtleSk7XG5cbiAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShudWxsKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGZyYWdtZW50LnJlZiAhPT0gbnVsbCkge1xuICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShmcmFnbWVudCk7XG5cbiAgICAgIGVycm9yKCdJbnZhbGlkIGF0dHJpYnV0ZSBgcmVmYCBzdXBwbGllZCB0byBgUmVhY3QuRnJhZ21lbnRgLicpO1xuXG4gICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKG51bGwpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gY3JlYXRlRWxlbWVudFdpdGhWYWxpZGF0aW9uKHR5cGUsIHByb3BzLCBjaGlsZHJlbikge1xuICB2YXIgdmFsaWRUeXBlID0gaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpOyAvLyBXZSB3YXJuIGluIHRoaXMgY2FzZSBidXQgZG9uJ3QgdGhyb3cuIFdlIGV4cGVjdCB0aGUgZWxlbWVudCBjcmVhdGlvbiB0b1xuICAvLyBzdWNjZWVkIGFuZCB0aGVyZSB3aWxsIGxpa2VseSBiZSBlcnJvcnMgaW4gcmVuZGVyLlxuXG4gIGlmICghdmFsaWRUeXBlKSB7XG4gICAgdmFyIGluZm8gPSAnJztcblxuICAgIGlmICh0eXBlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwgJiYgT2JqZWN0LmtleXModHlwZSkubGVuZ3RoID09PSAwKSB7XG4gICAgICBpbmZvICs9ICcgWW91IGxpa2VseSBmb3Jnb3QgdG8gZXhwb3J0IHlvdXIgY29tcG9uZW50IGZyb20gdGhlIGZpbGUgJyArIFwiaXQncyBkZWZpbmVkIGluLCBvciB5b3UgbWlnaHQgaGF2ZSBtaXhlZCB1cCBkZWZhdWx0IGFuZCBuYW1lZCBpbXBvcnRzLlwiO1xuICAgIH1cblxuICAgIHZhciBzb3VyY2VJbmZvID0gZ2V0U291cmNlSW5mb0Vycm9yQWRkZW5kdW1Gb3JQcm9wcyhwcm9wcyk7XG5cbiAgICBpZiAoc291cmNlSW5mbykge1xuICAgICAgaW5mbyArPSBzb3VyY2VJbmZvO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbmZvICs9IGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpO1xuICAgIH1cblxuICAgIHZhciB0eXBlU3RyaW5nO1xuXG4gICAgaWYgKHR5cGUgPT09IG51bGwpIHtcbiAgICAgIHR5cGVTdHJpbmcgPSAnbnVsbCc7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHR5cGUpKSB7XG4gICAgICB0eXBlU3RyaW5nID0gJ2FycmF5JztcbiAgICB9IGVsc2UgaWYgKHR5cGUgIT09IHVuZGVmaW5lZCAmJiB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEUpIHtcbiAgICAgIHR5cGVTdHJpbmcgPSBcIjxcIiArIChnZXRDb21wb25lbnROYW1lKHR5cGUudHlwZSkgfHwgJ1Vua25vd24nKSArIFwiIC8+XCI7XG4gICAgICBpbmZvID0gJyBEaWQgeW91IGFjY2lkZW50YWxseSBleHBvcnQgYSBKU1ggbGl0ZXJhbCBpbnN0ZWFkIG9mIGEgY29tcG9uZW50Pyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHR5cGVTdHJpbmcgPSB0eXBlb2YgdHlwZTtcbiAgICB9XG5cbiAgICB7XG4gICAgICBlcnJvcignUmVhY3QuY3JlYXRlRWxlbWVudDogdHlwZSBpcyBpbnZhbGlkIC0tIGV4cGVjdGVkIGEgc3RyaW5nIChmb3IgJyArICdidWlsdC1pbiBjb21wb25lbnRzKSBvciBhIGNsYXNzL2Z1bmN0aW9uIChmb3IgY29tcG9zaXRlICcgKyAnY29tcG9uZW50cykgYnV0IGdvdDogJXMuJXMnLCB0eXBlU3RyaW5nLCBpbmZvKTtcbiAgICB9XG4gIH1cblxuICB2YXIgZWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgLy8gVGhlIHJlc3VsdCBjYW4gYmUgbnVsbGlzaCBpZiBhIG1vY2sgb3IgYSBjdXN0b20gZnVuY3Rpb24gaXMgdXNlZC5cbiAgLy8gVE9ETzogRHJvcCB0aGlzIHdoZW4gdGhlc2UgYXJlIG5vIGxvbmdlciBhbGxvd2VkIGFzIHRoZSB0eXBlIGFyZ3VtZW50LlxuXG4gIGlmIChlbGVtZW50ID09IG51bGwpIHtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfSAvLyBTa2lwIGtleSB3YXJuaW5nIGlmIHRoZSB0eXBlIGlzbid0IHZhbGlkIHNpbmNlIG91ciBrZXkgdmFsaWRhdGlvbiBsb2dpY1xuICAvLyBkb2Vzbid0IGV4cGVjdCBhIG5vbi1zdHJpbmcvZnVuY3Rpb24gdHlwZSBhbmQgY2FuIHRocm93IGNvbmZ1c2luZyBlcnJvcnMuXG4gIC8vIFdlIGRvbid0IHdhbnQgZXhjZXB0aW9uIGJlaGF2aW9yIHRvIGRpZmZlciBiZXR3ZWVuIGRldiBhbmQgcHJvZC5cbiAgLy8gKFJlbmRlcmluZyB3aWxsIHRocm93IHdpdGggYSBoZWxwZnVsIG1lc3NhZ2UgYW5kIGFzIHNvb24gYXMgdGhlIHR5cGUgaXNcbiAgLy8gZml4ZWQsIHRoZSBrZXkgd2FybmluZ3Mgd2lsbCBhcHBlYXIuKVxuXG5cbiAgaWYgKHZhbGlkVHlwZSkge1xuICAgIGZvciAodmFyIGkgPSAyOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YWxpZGF0ZUNoaWxkS2V5cyhhcmd1bWVudHNbaV0sIHR5cGUpO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlID09PSBleHBvcnRzLkZyYWdtZW50KSB7XG4gICAgdmFsaWRhdGVGcmFnbWVudFByb3BzKGVsZW1lbnQpO1xuICB9IGVsc2Uge1xuICAgIHZhbGlkYXRlUHJvcFR5cGVzKGVsZW1lbnQpO1xuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQ7XG59XG52YXIgZGlkV2FybkFib3V0RGVwcmVjYXRlZENyZWF0ZUZhY3RvcnkgPSBmYWxzZTtcbmZ1bmN0aW9uIGNyZWF0ZUZhY3RvcnlXaXRoVmFsaWRhdGlvbih0eXBlKSB7XG4gIHZhciB2YWxpZGF0ZWRGYWN0b3J5ID0gY3JlYXRlRWxlbWVudFdpdGhWYWxpZGF0aW9uLmJpbmQobnVsbCwgdHlwZSk7XG4gIHZhbGlkYXRlZEZhY3RvcnkudHlwZSA9IHR5cGU7XG5cbiAge1xuICAgIGlmICghZGlkV2FybkFib3V0RGVwcmVjYXRlZENyZWF0ZUZhY3RvcnkpIHtcbiAgICAgIGRpZFdhcm5BYm91dERlcHJlY2F0ZWRDcmVhdGVGYWN0b3J5ID0gdHJ1ZTtcblxuICAgICAgd2FybignUmVhY3QuY3JlYXRlRmFjdG9yeSgpIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiAnICsgJ2EgZnV0dXJlIG1ham9yIHJlbGVhc2UuIENvbnNpZGVyIHVzaW5nIEpTWCAnICsgJ29yIHVzZSBSZWFjdC5jcmVhdGVFbGVtZW50KCkgZGlyZWN0bHkgaW5zdGVhZC4nKTtcbiAgICB9IC8vIExlZ2FjeSBob29rOiByZW1vdmUgaXRcblxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHZhbGlkYXRlZEZhY3RvcnksICd0eXBlJywge1xuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgd2FybignRmFjdG9yeS50eXBlIGlzIGRlcHJlY2F0ZWQuIEFjY2VzcyB0aGUgY2xhc3MgZGlyZWN0bHkgJyArICdiZWZvcmUgcGFzc2luZyBpdCB0byBjcmVhdGVGYWN0b3J5LicpO1xuXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAndHlwZScsIHtcbiAgICAgICAgICB2YWx1ZTogdHlwZVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gdmFsaWRhdGVkRmFjdG9yeTtcbn1cbmZ1bmN0aW9uIGNsb25lRWxlbWVudFdpdGhWYWxpZGF0aW9uKGVsZW1lbnQsIHByb3BzLCBjaGlsZHJlbikge1xuICB2YXIgbmV3RWxlbWVudCA9IGNsb25lRWxlbWVudC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gIGZvciAodmFyIGkgPSAyOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFsaWRhdGVDaGlsZEtleXMoYXJndW1lbnRzW2ldLCBuZXdFbGVtZW50LnR5cGUpO1xuICB9XG5cbiAgdmFsaWRhdGVQcm9wVHlwZXMobmV3RWxlbWVudCk7XG4gIHJldHVybiBuZXdFbGVtZW50O1xufVxuXG57XG5cbiAgdHJ5IHtcbiAgICB2YXIgZnJvemVuT2JqZWN0ID0gT2JqZWN0LmZyZWV6ZSh7fSk7XG4gICAgLyogZXNsaW50LWRpc2FibGUgbm8tbmV3ICovXG5cbiAgICBuZXcgTWFwKFtbZnJvemVuT2JqZWN0LCBudWxsXV0pO1xuICAgIG5ldyBTZXQoW2Zyb3plbk9iamVjdF0pO1xuICAgIC8qIGVzbGludC1lbmFibGUgbm8tbmV3ICovXG4gIH0gY2F0Y2ggKGUpIHtcbiAgfVxufVxuXG52YXIgY3JlYXRlRWxlbWVudCQxID0gIGNyZWF0ZUVsZW1lbnRXaXRoVmFsaWRhdGlvbiA7XG52YXIgY2xvbmVFbGVtZW50JDEgPSAgY2xvbmVFbGVtZW50V2l0aFZhbGlkYXRpb24gO1xudmFyIGNyZWF0ZUZhY3RvcnkgPSAgY3JlYXRlRmFjdG9yeVdpdGhWYWxpZGF0aW9uIDtcbnZhciBDaGlsZHJlbiA9IHtcbiAgbWFwOiBtYXBDaGlsZHJlbixcbiAgZm9yRWFjaDogZm9yRWFjaENoaWxkcmVuLFxuICBjb3VudDogY291bnRDaGlsZHJlbixcbiAgdG9BcnJheTogdG9BcnJheSxcbiAgb25seTogb25seUNoaWxkXG59O1xuXG5leHBvcnRzLkNoaWxkcmVuID0gQ2hpbGRyZW47XG5leHBvcnRzLkNvbXBvbmVudCA9IENvbXBvbmVudDtcbmV4cG9ydHMuUHVyZUNvbXBvbmVudCA9IFB1cmVDb21wb25lbnQ7XG5leHBvcnRzLl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEID0gUmVhY3RTaGFyZWRJbnRlcm5hbHM7XG5leHBvcnRzLmNsb25lRWxlbWVudCA9IGNsb25lRWxlbWVudCQxO1xuZXhwb3J0cy5jcmVhdGVDb250ZXh0ID0gY3JlYXRlQ29udGV4dDtcbmV4cG9ydHMuY3JlYXRlRWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQkMTtcbmV4cG9ydHMuY3JlYXRlRmFjdG9yeSA9IGNyZWF0ZUZhY3Rvcnk7XG5leHBvcnRzLmNyZWF0ZVJlZiA9IGNyZWF0ZVJlZjtcbmV4cG9ydHMuZm9yd2FyZFJlZiA9IGZvcndhcmRSZWY7XG5leHBvcnRzLmlzVmFsaWRFbGVtZW50ID0gaXNWYWxpZEVsZW1lbnQ7XG5leHBvcnRzLmxhenkgPSBsYXp5O1xuZXhwb3J0cy5tZW1vID0gbWVtbztcbmV4cG9ydHMudXNlQ2FsbGJhY2sgPSB1c2VDYWxsYmFjaztcbmV4cG9ydHMudXNlQ29udGV4dCA9IHVzZUNvbnRleHQ7XG5leHBvcnRzLnVzZURlYnVnVmFsdWUgPSB1c2VEZWJ1Z1ZhbHVlO1xuZXhwb3J0cy51c2VFZmZlY3QgPSB1c2VFZmZlY3Q7XG5leHBvcnRzLnVzZUltcGVyYXRpdmVIYW5kbGUgPSB1c2VJbXBlcmF0aXZlSGFuZGxlO1xuZXhwb3J0cy51c2VMYXlvdXRFZmZlY3QgPSB1c2VMYXlvdXRFZmZlY3Q7XG5leHBvcnRzLnVzZU1lbW8gPSB1c2VNZW1vO1xuZXhwb3J0cy51c2VSZWR1Y2VyID0gdXNlUmVkdWNlcjtcbmV4cG9ydHMudXNlUmVmID0gdXNlUmVmO1xuZXhwb3J0cy51c2VTdGF0ZSA9IHVzZVN0YXRlO1xuZXhwb3J0cy52ZXJzaW9uID0gUmVhY3RWZXJzaW9uO1xuICB9KSgpO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwgIi8qKiBAbGljZW5zZSBSZWFjdCB2MC4yMC4yXG4gKiBzY2hlZHVsZXIuZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgZW5hYmxlU2NoZWR1bGVyRGVidWdnaW5nID0gZmFsc2U7XG52YXIgZW5hYmxlUHJvZmlsaW5nID0gZmFsc2U7XG5cbnZhciByZXF1ZXN0SG9zdENhbGxiYWNrO1xudmFyIHJlcXVlc3RIb3N0VGltZW91dDtcbnZhciBjYW5jZWxIb3N0VGltZW91dDtcbnZhciByZXF1ZXN0UGFpbnQ7XG52YXIgaGFzUGVyZm9ybWFuY2VOb3cgPSB0eXBlb2YgcGVyZm9ybWFuY2UgPT09ICdvYmplY3QnICYmIHR5cGVvZiBwZXJmb3JtYW5jZS5ub3cgPT09ICdmdW5jdGlvbic7XG5cbmlmIChoYXNQZXJmb3JtYW5jZU5vdykge1xuICB2YXIgbG9jYWxQZXJmb3JtYW5jZSA9IHBlcmZvcm1hbmNlO1xuXG4gIGV4cG9ydHMudW5zdGFibGVfbm93ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBsb2NhbFBlcmZvcm1hbmNlLm5vdygpO1xuICB9O1xufSBlbHNlIHtcbiAgdmFyIGxvY2FsRGF0ZSA9IERhdGU7XG4gIHZhciBpbml0aWFsVGltZSA9IGxvY2FsRGF0ZS5ub3coKTtcblxuICBleHBvcnRzLnVuc3RhYmxlX25vdyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbG9jYWxEYXRlLm5vdygpIC0gaW5pdGlhbFRpbWU7XG4gIH07XG59XG5cbmlmICggLy8gSWYgU2NoZWR1bGVyIHJ1bnMgaW4gYSBub24tRE9NIGVudmlyb25tZW50LCBpdCBmYWxscyBiYWNrIHRvIGEgbmFpdmVcbi8vIGltcGxlbWVudGF0aW9uIHVzaW5nIHNldFRpbWVvdXQuXG50eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAvLyBDaGVjayBpZiBNZXNzYWdlQ2hhbm5lbCBpcyBzdXBwb3J0ZWQsIHRvby5cbnR5cGVvZiBNZXNzYWdlQ2hhbm5lbCAhPT0gJ2Z1bmN0aW9uJykge1xuICAvLyBJZiB0aGlzIGFjY2lkZW50YWxseSBnZXRzIGltcG9ydGVkIGluIGEgbm9uLWJyb3dzZXIgZW52aXJvbm1lbnQsIGUuZy4gSmF2YVNjcmlwdENvcmUsXG4gIC8vIGZhbGxiYWNrIHRvIGEgbmFpdmUgaW1wbGVtZW50YXRpb24uXG4gIHZhciBfY2FsbGJhY2sgPSBudWxsO1xuICB2YXIgX3RpbWVvdXRJRCA9IG51bGw7XG5cbiAgdmFyIF9mbHVzaENhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgIGlmIChfY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBjdXJyZW50VGltZSA9IGV4cG9ydHMudW5zdGFibGVfbm93KCk7XG4gICAgICAgIHZhciBoYXNSZW1haW5pbmdUaW1lID0gdHJ1ZTtcblxuICAgICAgICBfY2FsbGJhY2soaGFzUmVtYWluaW5nVGltZSwgY3VycmVudFRpbWUpO1xuXG4gICAgICAgIF9jYWxsYmFjayA9IG51bGw7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHNldFRpbWVvdXQoX2ZsdXNoQ2FsbGJhY2ssIDApO1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICByZXF1ZXN0SG9zdENhbGxiYWNrID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgaWYgKF9jYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgLy8gUHJvdGVjdCBhZ2FpbnN0IHJlLWVudHJhbmN5LlxuICAgICAgc2V0VGltZW91dChyZXF1ZXN0SG9zdENhbGxiYWNrLCAwLCBjYik7XG4gICAgfSBlbHNlIHtcbiAgICAgIF9jYWxsYmFjayA9IGNiO1xuICAgICAgc2V0VGltZW91dChfZmx1c2hDYWxsYmFjaywgMCk7XG4gICAgfVxuICB9O1xuXG4gIHJlcXVlc3RIb3N0VGltZW91dCA9IGZ1bmN0aW9uIChjYiwgbXMpIHtcbiAgICBfdGltZW91dElEID0gc2V0VGltZW91dChjYiwgbXMpO1xuICB9O1xuXG4gIGNhbmNlbEhvc3RUaW1lb3V0ID0gZnVuY3Rpb24gKCkge1xuICAgIGNsZWFyVGltZW91dChfdGltZW91dElEKTtcbiAgfTtcblxuICBleHBvcnRzLnVuc3RhYmxlX3Nob3VsZFlpZWxkID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcblxuICByZXF1ZXN0UGFpbnQgPSBleHBvcnRzLnVuc3RhYmxlX2ZvcmNlRnJhbWVSYXRlID0gZnVuY3Rpb24gKCkge307XG59IGVsc2Uge1xuICAvLyBDYXB0dXJlIGxvY2FsIHJlZmVyZW5jZXMgdG8gbmF0aXZlIEFQSXMsIGluIGNhc2UgYSBwb2x5ZmlsbCBvdmVycmlkZXMgdGhlbS5cbiAgdmFyIF9zZXRUaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQ7XG4gIHZhciBfY2xlYXJUaW1lb3V0ID0gd2luZG93LmNsZWFyVGltZW91dDtcblxuICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgLy8gVE9ETzogU2NoZWR1bGVyIG5vIGxvbmdlciByZXF1aXJlcyB0aGVzZSBtZXRob2RzIHRvIGJlIHBvbHlmaWxsZWQuIEJ1dFxuICAgIC8vIG1heWJlIHdlIHdhbnQgdG8gY29udGludWUgd2FybmluZyBpZiB0aGV5IGRvbid0IGV4aXN0LCB0byBwcmVzZXJ2ZSB0aGVcbiAgICAvLyBvcHRpb24gdG8gcmVseSBvbiBpdCBpbiB0aGUgZnV0dXJlP1xuICAgIHZhciByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lO1xuICAgIHZhciBjYW5jZWxBbmltYXRpb25GcmFtZSA9IHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZTtcblxuICAgIGlmICh0eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBVc2luZyBjb25zb2xlWydlcnJvciddIHRvIGV2YWRlIEJhYmVsIGFuZCBFU0xpbnRcbiAgICAgIGNvbnNvbGVbJ2Vycm9yJ10oXCJUaGlzIGJyb3dzZXIgZG9lc24ndCBzdXBwb3J0IHJlcXVlc3RBbmltYXRpb25GcmFtZS4gXCIgKyAnTWFrZSBzdXJlIHRoYXQgeW91IGxvYWQgYSAnICsgJ3BvbHlmaWxsIGluIG9sZGVyIGJyb3dzZXJzLiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvcmVhY3QtcG9seWZpbGxzJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjYW5jZWxBbmltYXRpb25GcmFtZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gVXNpbmcgY29uc29sZVsnZXJyb3InXSB0byBldmFkZSBCYWJlbCBhbmQgRVNMaW50XG4gICAgICBjb25zb2xlWydlcnJvciddKFwiVGhpcyBicm93c2VyIGRvZXNuJ3Qgc3VwcG9ydCBjYW5jZWxBbmltYXRpb25GcmFtZS4gXCIgKyAnTWFrZSBzdXJlIHRoYXQgeW91IGxvYWQgYSAnICsgJ3BvbHlmaWxsIGluIG9sZGVyIGJyb3dzZXJzLiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvcmVhY3QtcG9seWZpbGxzJyk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGlzTWVzc2FnZUxvb3BSdW5uaW5nID0gZmFsc2U7XG4gIHZhciBzY2hlZHVsZWRIb3N0Q2FsbGJhY2sgPSBudWxsO1xuICB2YXIgdGFza1RpbWVvdXRJRCA9IC0xOyAvLyBTY2hlZHVsZXIgcGVyaW9kaWNhbGx5IHlpZWxkcyBpbiBjYXNlIHRoZXJlIGlzIG90aGVyIHdvcmsgb24gdGhlIG1haW5cbiAgLy8gdGhyZWFkLCBsaWtlIHVzZXIgZXZlbnRzLiBCeSBkZWZhdWx0LCBpdCB5aWVsZHMgbXVsdGlwbGUgdGltZXMgcGVyIGZyYW1lLlxuICAvLyBJdCBkb2VzIG5vdCBhdHRlbXB0IHRvIGFsaWduIHdpdGggZnJhbWUgYm91bmRhcmllcywgc2luY2UgbW9zdCB0YXNrcyBkb24ndFxuICAvLyBuZWVkIHRvIGJlIGZyYW1lIGFsaWduZWQ7IGZvciB0aG9zZSB0aGF0IGRvLCB1c2UgcmVxdWVzdEFuaW1hdGlvbkZyYW1lLlxuXG4gIHZhciB5aWVsZEludGVydmFsID0gNTtcbiAgdmFyIGRlYWRsaW5lID0gMDsgLy8gVE9ETzogTWFrZSB0aGlzIGNvbmZpZ3VyYWJsZVxuXG4gIHtcbiAgICAvLyBgaXNJbnB1dFBlbmRpbmdgIGlzIG5vdCBhdmFpbGFibGUuIFNpbmNlIHdlIGhhdmUgbm8gd2F5IG9mIGtub3dpbmcgaWZcbiAgICAvLyB0aGVyZSdzIHBlbmRpbmcgaW5wdXQsIGFsd2F5cyB5aWVsZCBhdCB0aGUgZW5kIG9mIHRoZSBmcmFtZS5cbiAgICBleHBvcnRzLnVuc3RhYmxlX3Nob3VsZFlpZWxkID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGV4cG9ydHMudW5zdGFibGVfbm93KCkgPj0gZGVhZGxpbmU7XG4gICAgfTsgLy8gU2luY2Ugd2UgeWllbGQgZXZlcnkgZnJhbWUgcmVnYXJkbGVzcywgYHJlcXVlc3RQYWludGAgaGFzIG5vIGVmZmVjdC5cblxuXG4gICAgcmVxdWVzdFBhaW50ID0gZnVuY3Rpb24gKCkge307XG4gIH1cblxuICBleHBvcnRzLnVuc3RhYmxlX2ZvcmNlRnJhbWVSYXRlID0gZnVuY3Rpb24gKGZwcykge1xuICAgIGlmIChmcHMgPCAwIHx8IGZwcyA+IDEyNSkge1xuICAgICAgLy8gVXNpbmcgY29uc29sZVsnZXJyb3InXSB0byBldmFkZSBCYWJlbCBhbmQgRVNMaW50XG4gICAgICBjb25zb2xlWydlcnJvciddKCdmb3JjZUZyYW1lUmF0ZSB0YWtlcyBhIHBvc2l0aXZlIGludCBiZXR3ZWVuIDAgYW5kIDEyNSwgJyArICdmb3JjaW5nIGZyYW1lIHJhdGVzIGhpZ2hlciB0aGFuIDEyNSBmcHMgaXMgbm90IHN1cHBvcnRlZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChmcHMgPiAwKSB7XG4gICAgICB5aWVsZEludGVydmFsID0gTWF0aC5mbG9vcigxMDAwIC8gZnBzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gcmVzZXQgdGhlIGZyYW1lcmF0ZVxuICAgICAgeWllbGRJbnRlcnZhbCA9IDU7XG4gICAgfVxuICB9O1xuXG4gIHZhciBwZXJmb3JtV29ya1VudGlsRGVhZGxpbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHNjaGVkdWxlZEhvc3RDYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgdmFyIGN1cnJlbnRUaW1lID0gZXhwb3J0cy51bnN0YWJsZV9ub3coKTsgLy8gWWllbGQgYWZ0ZXIgYHlpZWxkSW50ZXJ2YWxgIG1zLCByZWdhcmRsZXNzIG9mIHdoZXJlIHdlIGFyZSBpbiB0aGUgdnN5bmNcbiAgICAgIC8vIGN5Y2xlLiBUaGlzIG1lYW5zIHRoZXJlJ3MgYWx3YXlzIHRpbWUgcmVtYWluaW5nIGF0IHRoZSBiZWdpbm5pbmcgb2ZcbiAgICAgIC8vIHRoZSBtZXNzYWdlIGV2ZW50LlxuXG4gICAgICBkZWFkbGluZSA9IGN1cnJlbnRUaW1lICsgeWllbGRJbnRlcnZhbDtcbiAgICAgIHZhciBoYXNUaW1lUmVtYWluaW5nID0gdHJ1ZTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIGhhc01vcmVXb3JrID0gc2NoZWR1bGVkSG9zdENhbGxiYWNrKGhhc1RpbWVSZW1haW5pbmcsIGN1cnJlbnRUaW1lKTtcblxuICAgICAgICBpZiAoIWhhc01vcmVXb3JrKSB7XG4gICAgICAgICAgaXNNZXNzYWdlTG9vcFJ1bm5pbmcgPSBmYWxzZTtcbiAgICAgICAgICBzY2hlZHVsZWRIb3N0Q2FsbGJhY2sgPSBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIElmIHRoZXJlJ3MgbW9yZSB3b3JrLCBzY2hlZHVsZSB0aGUgbmV4dCBtZXNzYWdlIGV2ZW50IGF0IHRoZSBlbmRcbiAgICAgICAgICAvLyBvZiB0aGUgcHJlY2VkaW5nIG9uZS5cbiAgICAgICAgICBwb3J0LnBvc3RNZXNzYWdlKG51bGwpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBJZiBhIHNjaGVkdWxlciB0YXNrIHRocm93cywgZXhpdCB0aGUgY3VycmVudCBicm93c2VyIHRhc2sgc28gdGhlXG4gICAgICAgIC8vIGVycm9yIGNhbiBiZSBvYnNlcnZlZC5cbiAgICAgICAgcG9ydC5wb3N0TWVzc2FnZShudWxsKTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlzTWVzc2FnZUxvb3BSdW5uaW5nID0gZmFsc2U7XG4gICAgfSAvLyBZaWVsZGluZyB0byB0aGUgYnJvd3NlciB3aWxsIGdpdmUgaXQgYSBjaGFuY2UgdG8gcGFpbnQsIHNvIHdlIGNhblxuICB9O1xuXG4gIHZhciBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XG4gIHZhciBwb3J0ID0gY2hhbm5lbC5wb3J0MjtcbiAgY2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSBwZXJmb3JtV29ya1VudGlsRGVhZGxpbmU7XG5cbiAgcmVxdWVzdEhvc3RDYWxsYmFjayA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIHNjaGVkdWxlZEhvc3RDYWxsYmFjayA9IGNhbGxiYWNrO1xuXG4gICAgaWYgKCFpc01lc3NhZ2VMb29wUnVubmluZykge1xuICAgICAgaXNNZXNzYWdlTG9vcFJ1bm5pbmcgPSB0cnVlO1xuICAgICAgcG9ydC5wb3N0TWVzc2FnZShudWxsKTtcbiAgICB9XG4gIH07XG5cbiAgcmVxdWVzdEhvc3RUaW1lb3V0ID0gZnVuY3Rpb24gKGNhbGxiYWNrLCBtcykge1xuICAgIHRhc2tUaW1lb3V0SUQgPSBfc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsYmFjayhleHBvcnRzLnVuc3RhYmxlX25vdygpKTtcbiAgICB9LCBtcyk7XG4gIH07XG5cbiAgY2FuY2VsSG9zdFRpbWVvdXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgX2NsZWFyVGltZW91dCh0YXNrVGltZW91dElEKTtcblxuICAgIHRhc2tUaW1lb3V0SUQgPSAtMTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gcHVzaChoZWFwLCBub2RlKSB7XG4gIHZhciBpbmRleCA9IGhlYXAubGVuZ3RoO1xuICBoZWFwLnB1c2gobm9kZSk7XG4gIHNpZnRVcChoZWFwLCBub2RlLCBpbmRleCk7XG59XG5mdW5jdGlvbiBwZWVrKGhlYXApIHtcbiAgdmFyIGZpcnN0ID0gaGVhcFswXTtcbiAgcmV0dXJuIGZpcnN0ID09PSB1bmRlZmluZWQgPyBudWxsIDogZmlyc3Q7XG59XG5mdW5jdGlvbiBwb3AoaGVhcCkge1xuICB2YXIgZmlyc3QgPSBoZWFwWzBdO1xuXG4gIGlmIChmaXJzdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdmFyIGxhc3QgPSBoZWFwLnBvcCgpO1xuXG4gICAgaWYgKGxhc3QgIT09IGZpcnN0KSB7XG4gICAgICBoZWFwWzBdID0gbGFzdDtcbiAgICAgIHNpZnREb3duKGhlYXAsIGxhc3QsIDApO1xuICAgIH1cblxuICAgIHJldHVybiBmaXJzdDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBzaWZ0VXAoaGVhcCwgbm9kZSwgaSkge1xuICB2YXIgaW5kZXggPSBpO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgdmFyIHBhcmVudEluZGV4ID0gaW5kZXggLSAxID4+PiAxO1xuICAgIHZhciBwYXJlbnQgPSBoZWFwW3BhcmVudEluZGV4XTtcblxuICAgIGlmIChwYXJlbnQgIT09IHVuZGVmaW5lZCAmJiBjb21wYXJlKHBhcmVudCwgbm9kZSkgPiAwKSB7XG4gICAgICAvLyBUaGUgcGFyZW50IGlzIGxhcmdlci4gU3dhcCBwb3NpdGlvbnMuXG4gICAgICBoZWFwW3BhcmVudEluZGV4XSA9IG5vZGU7XG4gICAgICBoZWFwW2luZGV4XSA9IHBhcmVudDtcbiAgICAgIGluZGV4ID0gcGFyZW50SW5kZXg7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoZSBwYXJlbnQgaXMgc21hbGxlci4gRXhpdC5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc2lmdERvd24oaGVhcCwgbm9kZSwgaSkge1xuICB2YXIgaW5kZXggPSBpO1xuICB2YXIgbGVuZ3RoID0gaGVhcC5sZW5ndGg7XG5cbiAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGxlZnRJbmRleCA9IChpbmRleCArIDEpICogMiAtIDE7XG4gICAgdmFyIGxlZnQgPSBoZWFwW2xlZnRJbmRleF07XG4gICAgdmFyIHJpZ2h0SW5kZXggPSBsZWZ0SW5kZXggKyAxO1xuICAgIHZhciByaWdodCA9IGhlYXBbcmlnaHRJbmRleF07IC8vIElmIHRoZSBsZWZ0IG9yIHJpZ2h0IG5vZGUgaXMgc21hbGxlciwgc3dhcCB3aXRoIHRoZSBzbWFsbGVyIG9mIHRob3NlLlxuXG4gICAgaWYgKGxlZnQgIT09IHVuZGVmaW5lZCAmJiBjb21wYXJlKGxlZnQsIG5vZGUpIDwgMCkge1xuICAgICAgaWYgKHJpZ2h0ICE9PSB1bmRlZmluZWQgJiYgY29tcGFyZShyaWdodCwgbGVmdCkgPCAwKSB7XG4gICAgICAgIGhlYXBbaW5kZXhdID0gcmlnaHQ7XG4gICAgICAgIGhlYXBbcmlnaHRJbmRleF0gPSBub2RlO1xuICAgICAgICBpbmRleCA9IHJpZ2h0SW5kZXg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoZWFwW2luZGV4XSA9IGxlZnQ7XG4gICAgICAgIGhlYXBbbGVmdEluZGV4XSA9IG5vZGU7XG4gICAgICAgIGluZGV4ID0gbGVmdEluZGV4O1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocmlnaHQgIT09IHVuZGVmaW5lZCAmJiBjb21wYXJlKHJpZ2h0LCBub2RlKSA8IDApIHtcbiAgICAgIGhlYXBbaW5kZXhdID0gcmlnaHQ7XG4gICAgICBoZWFwW3JpZ2h0SW5kZXhdID0gbm9kZTtcbiAgICAgIGluZGV4ID0gcmlnaHRJbmRleDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTmVpdGhlciBjaGlsZCBpcyBzbWFsbGVyLiBFeGl0LlxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21wYXJlKGEsIGIpIHtcbiAgLy8gQ29tcGFyZSBzb3J0IGluZGV4IGZpcnN0LCB0aGVuIHRhc2sgaWQuXG4gIHZhciBkaWZmID0gYS5zb3J0SW5kZXggLSBiLnNvcnRJbmRleDtcbiAgcmV0dXJuIGRpZmYgIT09IDAgPyBkaWZmIDogYS5pZCAtIGIuaWQ7XG59XG5cbi8vIFRPRE86IFVzZSBzeW1ib2xzP1xudmFyIEltbWVkaWF0ZVByaW9yaXR5ID0gMTtcbnZhciBVc2VyQmxvY2tpbmdQcmlvcml0eSA9IDI7XG52YXIgTm9ybWFsUHJpb3JpdHkgPSAzO1xudmFyIExvd1ByaW9yaXR5ID0gNDtcbnZhciBJZGxlUHJpb3JpdHkgPSA1O1xuXG5mdW5jdGlvbiBtYXJrVGFza0Vycm9yZWQodGFzaywgbXMpIHtcbn1cblxuLyogZXNsaW50LWRpc2FibGUgbm8tdmFyICovXG4vLyBNYXRoLnBvdygyLCAzMCkgLSAxXG4vLyAwYjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMVxuXG52YXIgbWF4U2lnbmVkMzFCaXRJbnQgPSAxMDczNzQxODIzOyAvLyBUaW1lcyBvdXQgaW1tZWRpYXRlbHlcblxudmFyIElNTUVESUFURV9QUklPUklUWV9USU1FT1VUID0gLTE7IC8vIEV2ZW50dWFsbHkgdGltZXMgb3V0XG5cbnZhciBVU0VSX0JMT0NLSU5HX1BSSU9SSVRZX1RJTUVPVVQgPSAyNTA7XG52YXIgTk9STUFMX1BSSU9SSVRZX1RJTUVPVVQgPSA1MDAwO1xudmFyIExPV19QUklPUklUWV9USU1FT1VUID0gMTAwMDA7IC8vIE5ldmVyIHRpbWVzIG91dFxuXG52YXIgSURMRV9QUklPUklUWV9USU1FT1VUID0gbWF4U2lnbmVkMzFCaXRJbnQ7IC8vIFRhc2tzIGFyZSBzdG9yZWQgb24gYSBtaW4gaGVhcFxuXG52YXIgdGFza1F1ZXVlID0gW107XG52YXIgdGltZXJRdWV1ZSA9IFtdOyAvLyBJbmNyZW1lbnRpbmcgaWQgY291bnRlci4gVXNlZCB0byBtYWludGFpbiBpbnNlcnRpb24gb3JkZXIuXG5cbnZhciB0YXNrSWRDb3VudGVyID0gMTsgLy8gUGF1c2luZyB0aGUgc2NoZWR1bGVyIGlzIHVzZWZ1bCBmb3IgZGVidWdnaW5nLlxudmFyIGN1cnJlbnRUYXNrID0gbnVsbDtcbnZhciBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IE5vcm1hbFByaW9yaXR5OyAvLyBUaGlzIGlzIHNldCB3aGlsZSBwZXJmb3JtaW5nIHdvcmssIHRvIHByZXZlbnQgcmUtZW50cmFuY3kuXG5cbnZhciBpc1BlcmZvcm1pbmdXb3JrID0gZmFsc2U7XG52YXIgaXNIb3N0Q2FsbGJhY2tTY2hlZHVsZWQgPSBmYWxzZTtcbnZhciBpc0hvc3RUaW1lb3V0U2NoZWR1bGVkID0gZmFsc2U7XG5cbmZ1bmN0aW9uIGFkdmFuY2VUaW1lcnMoY3VycmVudFRpbWUpIHtcbiAgLy8gQ2hlY2sgZm9yIHRhc2tzIHRoYXQgYXJlIG5vIGxvbmdlciBkZWxheWVkIGFuZCBhZGQgdGhlbSB0byB0aGUgcXVldWUuXG4gIHZhciB0aW1lciA9IHBlZWsodGltZXJRdWV1ZSk7XG5cbiAgd2hpbGUgKHRpbWVyICE9PSBudWxsKSB7XG4gICAgaWYgKHRpbWVyLmNhbGxiYWNrID09PSBudWxsKSB7XG4gICAgICAvLyBUaW1lciB3YXMgY2FuY2VsbGVkLlxuICAgICAgcG9wKHRpbWVyUXVldWUpO1xuICAgIH0gZWxzZSBpZiAodGltZXIuc3RhcnRUaW1lIDw9IGN1cnJlbnRUaW1lKSB7XG4gICAgICAvLyBUaW1lciBmaXJlZC4gVHJhbnNmZXIgdG8gdGhlIHRhc2sgcXVldWUuXG4gICAgICBwb3AodGltZXJRdWV1ZSk7XG4gICAgICB0aW1lci5zb3J0SW5kZXggPSB0aW1lci5leHBpcmF0aW9uVGltZTtcbiAgICAgIHB1c2godGFza1F1ZXVlLCB0aW1lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlbWFpbmluZyB0aW1lcnMgYXJlIHBlbmRpbmcuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGltZXIgPSBwZWVrKHRpbWVyUXVldWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZVRpbWVvdXQoY3VycmVudFRpbWUpIHtcbiAgaXNIb3N0VGltZW91dFNjaGVkdWxlZCA9IGZhbHNlO1xuICBhZHZhbmNlVGltZXJzKGN1cnJlbnRUaW1lKTtcblxuICBpZiAoIWlzSG9zdENhbGxiYWNrU2NoZWR1bGVkKSB7XG4gICAgaWYgKHBlZWsodGFza1F1ZXVlKSAhPT0gbnVsbCkge1xuICAgICAgaXNIb3N0Q2FsbGJhY2tTY2hlZHVsZWQgPSB0cnVlO1xuICAgICAgcmVxdWVzdEhvc3RDYWxsYmFjayhmbHVzaFdvcmspO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgZmlyc3RUaW1lciA9IHBlZWsodGltZXJRdWV1ZSk7XG5cbiAgICAgIGlmIChmaXJzdFRpbWVyICE9PSBudWxsKSB7XG4gICAgICAgIHJlcXVlc3RIb3N0VGltZW91dChoYW5kbGVUaW1lb3V0LCBmaXJzdFRpbWVyLnN0YXJ0VGltZSAtIGN1cnJlbnRUaW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmx1c2hXb3JrKGhhc1RpbWVSZW1haW5pbmcsIGluaXRpYWxUaW1lKSB7XG5cblxuICBpc0hvc3RDYWxsYmFja1NjaGVkdWxlZCA9IGZhbHNlO1xuXG4gIGlmIChpc0hvc3RUaW1lb3V0U2NoZWR1bGVkKSB7XG4gICAgLy8gV2Ugc2NoZWR1bGVkIGEgdGltZW91dCBidXQgaXQncyBubyBsb25nZXIgbmVlZGVkLiBDYW5jZWwgaXQuXG4gICAgaXNIb3N0VGltZW91dFNjaGVkdWxlZCA9IGZhbHNlO1xuICAgIGNhbmNlbEhvc3RUaW1lb3V0KCk7XG4gIH1cblxuICBpc1BlcmZvcm1pbmdXb3JrID0gdHJ1ZTtcbiAgdmFyIHByZXZpb3VzUHJpb3JpdHlMZXZlbCA9IGN1cnJlbnRQcmlvcml0eUxldmVsO1xuXG4gIHRyeSB7XG4gICAgaWYgKGVuYWJsZVByb2ZpbGluZykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHdvcmtMb29wKGhhc1RpbWVSZW1haW5pbmcsIGluaXRpYWxUaW1lKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChjdXJyZW50VGFzayAhPT0gbnVsbCkge1xuICAgICAgICAgIHZhciBjdXJyZW50VGltZSA9IGV4cG9ydHMudW5zdGFibGVfbm93KCk7XG4gICAgICAgICAgbWFya1Rhc2tFcnJvcmVkKGN1cnJlbnRUYXNrLCBjdXJyZW50VGltZSk7XG4gICAgICAgICAgY3VycmVudFRhc2suaXNRdWV1ZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBObyBjYXRjaCBpbiBwcm9kIGNvZGUgcGF0aC5cbiAgICAgIHJldHVybiB3b3JrTG9vcChoYXNUaW1lUmVtYWluaW5nLCBpbml0aWFsVGltZSk7XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIGN1cnJlbnRUYXNrID0gbnVsbDtcbiAgICBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IHByZXZpb3VzUHJpb3JpdHlMZXZlbDtcbiAgICBpc1BlcmZvcm1pbmdXb3JrID0gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gd29ya0xvb3AoaGFzVGltZVJlbWFpbmluZywgaW5pdGlhbFRpbWUpIHtcbiAgdmFyIGN1cnJlbnRUaW1lID0gaW5pdGlhbFRpbWU7XG4gIGFkdmFuY2VUaW1lcnMoY3VycmVudFRpbWUpO1xuICBjdXJyZW50VGFzayA9IHBlZWsodGFza1F1ZXVlKTtcblxuICB3aGlsZSAoY3VycmVudFRhc2sgIT09IG51bGwgJiYgIShlbmFibGVTY2hlZHVsZXJEZWJ1Z2dpbmcgKSkge1xuICAgIGlmIChjdXJyZW50VGFzay5leHBpcmF0aW9uVGltZSA+IGN1cnJlbnRUaW1lICYmICghaGFzVGltZVJlbWFpbmluZyB8fCBleHBvcnRzLnVuc3RhYmxlX3Nob3VsZFlpZWxkKCkpKSB7XG4gICAgICAvLyBUaGlzIGN1cnJlbnRUYXNrIGhhc24ndCBleHBpcmVkLCBhbmQgd2UndmUgcmVhY2hlZCB0aGUgZGVhZGxpbmUuXG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICB2YXIgY2FsbGJhY2sgPSBjdXJyZW50VGFzay5jYWxsYmFjaztcblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGN1cnJlbnRUYXNrLmNhbGxiYWNrID0gbnVsbDtcbiAgICAgIGN1cnJlbnRQcmlvcml0eUxldmVsID0gY3VycmVudFRhc2sucHJpb3JpdHlMZXZlbDtcbiAgICAgIHZhciBkaWRVc2VyQ2FsbGJhY2tUaW1lb3V0ID0gY3VycmVudFRhc2suZXhwaXJhdGlvblRpbWUgPD0gY3VycmVudFRpbWU7XG5cbiAgICAgIHZhciBjb250aW51YXRpb25DYWxsYmFjayA9IGNhbGxiYWNrKGRpZFVzZXJDYWxsYmFja1RpbWVvdXQpO1xuICAgICAgY3VycmVudFRpbWUgPSBleHBvcnRzLnVuc3RhYmxlX25vdygpO1xuXG4gICAgICBpZiAodHlwZW9mIGNvbnRpbnVhdGlvbkNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGN1cnJlbnRUYXNrLmNhbGxiYWNrID0gY29udGludWF0aW9uQ2FsbGJhY2s7XG4gICAgICB9IGVsc2Uge1xuXG4gICAgICAgIGlmIChjdXJyZW50VGFzayA9PT0gcGVlayh0YXNrUXVldWUpKSB7XG4gICAgICAgICAgcG9wKHRhc2tRdWV1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYWR2YW5jZVRpbWVycyhjdXJyZW50VGltZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBvcCh0YXNrUXVldWUpO1xuICAgIH1cblxuICAgIGN1cnJlbnRUYXNrID0gcGVlayh0YXNrUXVldWUpO1xuICB9IC8vIFJldHVybiB3aGV0aGVyIHRoZXJlJ3MgYWRkaXRpb25hbCB3b3JrXG5cblxuICBpZiAoY3VycmVudFRhc2sgIT09IG51bGwpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgZmlyc3RUaW1lciA9IHBlZWsodGltZXJRdWV1ZSk7XG5cbiAgICBpZiAoZmlyc3RUaW1lciAhPT0gbnVsbCkge1xuICAgICAgcmVxdWVzdEhvc3RUaW1lb3V0KGhhbmRsZVRpbWVvdXQsIGZpcnN0VGltZXIuc3RhcnRUaW1lIC0gY3VycmVudFRpbWUpO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV9ydW5XaXRoUHJpb3JpdHkocHJpb3JpdHlMZXZlbCwgZXZlbnRIYW5kbGVyKSB7XG4gIHN3aXRjaCAocHJpb3JpdHlMZXZlbCkge1xuICAgIGNhc2UgSW1tZWRpYXRlUHJpb3JpdHk6XG4gICAgY2FzZSBVc2VyQmxvY2tpbmdQcmlvcml0eTpcbiAgICBjYXNlIE5vcm1hbFByaW9yaXR5OlxuICAgIGNhc2UgTG93UHJpb3JpdHk6XG4gICAgY2FzZSBJZGxlUHJpb3JpdHk6XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICBwcmlvcml0eUxldmVsID0gTm9ybWFsUHJpb3JpdHk7XG4gIH1cblxuICB2YXIgcHJldmlvdXNQcmlvcml0eUxldmVsID0gY3VycmVudFByaW9yaXR5TGV2ZWw7XG4gIGN1cnJlbnRQcmlvcml0eUxldmVsID0gcHJpb3JpdHlMZXZlbDtcblxuICB0cnkge1xuICAgIHJldHVybiBldmVudEhhbmRsZXIoKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IHByZXZpb3VzUHJpb3JpdHlMZXZlbDtcbiAgfVxufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV9uZXh0KGV2ZW50SGFuZGxlcikge1xuICB2YXIgcHJpb3JpdHlMZXZlbDtcblxuICBzd2l0Y2ggKGN1cnJlbnRQcmlvcml0eUxldmVsKSB7XG4gICAgY2FzZSBJbW1lZGlhdGVQcmlvcml0eTpcbiAgICBjYXNlIFVzZXJCbG9ja2luZ1ByaW9yaXR5OlxuICAgIGNhc2UgTm9ybWFsUHJpb3JpdHk6XG4gICAgICAvLyBTaGlmdCBkb3duIHRvIG5vcm1hbCBwcmlvcml0eVxuICAgICAgcHJpb3JpdHlMZXZlbCA9IE5vcm1hbFByaW9yaXR5O1xuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgLy8gQW55dGhpbmcgbG93ZXIgdGhhbiBub3JtYWwgcHJpb3JpdHkgc2hvdWxkIHJlbWFpbiBhdCB0aGUgY3VycmVudCBsZXZlbC5cbiAgICAgIHByaW9yaXR5TGV2ZWwgPSBjdXJyZW50UHJpb3JpdHlMZXZlbDtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgdmFyIHByZXZpb3VzUHJpb3JpdHlMZXZlbCA9IGN1cnJlbnRQcmlvcml0eUxldmVsO1xuICBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IHByaW9yaXR5TGV2ZWw7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gZXZlbnRIYW5kbGVyKCk7XG4gIH0gZmluYWxseSB7XG4gICAgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBwcmV2aW91c1ByaW9yaXR5TGV2ZWw7XG4gIH1cbn1cblxuZnVuY3Rpb24gdW5zdGFibGVfd3JhcENhbGxiYWNrKGNhbGxiYWNrKSB7XG4gIHZhciBwYXJlbnRQcmlvcml0eUxldmVsID0gY3VycmVudFByaW9yaXR5TGV2ZWw7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgLy8gVGhpcyBpcyBhIGZvcmsgb2YgcnVuV2l0aFByaW9yaXR5LCBpbmxpbmVkIGZvciBwZXJmb3JtYW5jZS5cbiAgICB2YXIgcHJldmlvdXNQcmlvcml0eUxldmVsID0gY3VycmVudFByaW9yaXR5TGV2ZWw7XG4gICAgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBwYXJlbnRQcmlvcml0eUxldmVsO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBjYWxsYmFjay5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IHByZXZpb3VzUHJpb3JpdHlMZXZlbDtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIHVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2socHJpb3JpdHlMZXZlbCwgY2FsbGJhY2ssIG9wdGlvbnMpIHtcbiAgdmFyIGN1cnJlbnRUaW1lID0gZXhwb3J0cy51bnN0YWJsZV9ub3coKTtcbiAgdmFyIHN0YXJ0VGltZTtcblxuICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdvYmplY3QnICYmIG9wdGlvbnMgIT09IG51bGwpIHtcbiAgICB2YXIgZGVsYXkgPSBvcHRpb25zLmRlbGF5O1xuXG4gICAgaWYgKHR5cGVvZiBkZWxheSA9PT0gJ251bWJlcicgJiYgZGVsYXkgPiAwKSB7XG4gICAgICBzdGFydFRpbWUgPSBjdXJyZW50VGltZSArIGRlbGF5O1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGFydFRpbWUgPSBjdXJyZW50VGltZTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgc3RhcnRUaW1lID0gY3VycmVudFRpbWU7XG4gIH1cblxuICB2YXIgdGltZW91dDtcblxuICBzd2l0Y2ggKHByaW9yaXR5TGV2ZWwpIHtcbiAgICBjYXNlIEltbWVkaWF0ZVByaW9yaXR5OlxuICAgICAgdGltZW91dCA9IElNTUVESUFURV9QUklPUklUWV9USU1FT1VUO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFVzZXJCbG9ja2luZ1ByaW9yaXR5OlxuICAgICAgdGltZW91dCA9IFVTRVJfQkxPQ0tJTkdfUFJJT1JJVFlfVElNRU9VVDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBJZGxlUHJpb3JpdHk6XG4gICAgICB0aW1lb3V0ID0gSURMRV9QUklPUklUWV9USU1FT1VUO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIExvd1ByaW9yaXR5OlxuICAgICAgdGltZW91dCA9IExPV19QUklPUklUWV9USU1FT1VUO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIE5vcm1hbFByaW9yaXR5OlxuICAgIGRlZmF1bHQ6XG4gICAgICB0aW1lb3V0ID0gTk9STUFMX1BSSU9SSVRZX1RJTUVPVVQ7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHZhciBleHBpcmF0aW9uVGltZSA9IHN0YXJ0VGltZSArIHRpbWVvdXQ7XG4gIHZhciBuZXdUYXNrID0ge1xuICAgIGlkOiB0YXNrSWRDb3VudGVyKyssXG4gICAgY2FsbGJhY2s6IGNhbGxiYWNrLFxuICAgIHByaW9yaXR5TGV2ZWw6IHByaW9yaXR5TGV2ZWwsXG4gICAgc3RhcnRUaW1lOiBzdGFydFRpbWUsXG4gICAgZXhwaXJhdGlvblRpbWU6IGV4cGlyYXRpb25UaW1lLFxuICAgIHNvcnRJbmRleDogLTFcbiAgfTtcblxuICBpZiAoc3RhcnRUaW1lID4gY3VycmVudFRpbWUpIHtcbiAgICAvLyBUaGlzIGlzIGEgZGVsYXllZCB0YXNrLlxuICAgIG5ld1Rhc2suc29ydEluZGV4ID0gc3RhcnRUaW1lO1xuICAgIHB1c2godGltZXJRdWV1ZSwgbmV3VGFzayk7XG5cbiAgICBpZiAocGVlayh0YXNrUXVldWUpID09PSBudWxsICYmIG5ld1Rhc2sgPT09IHBlZWsodGltZXJRdWV1ZSkpIHtcbiAgICAgIC8vIEFsbCB0YXNrcyBhcmUgZGVsYXllZCwgYW5kIHRoaXMgaXMgdGhlIHRhc2sgd2l0aCB0aGUgZWFybGllc3QgZGVsYXkuXG4gICAgICBpZiAoaXNIb3N0VGltZW91dFNjaGVkdWxlZCkge1xuICAgICAgICAvLyBDYW5jZWwgYW4gZXhpc3RpbmcgdGltZW91dC5cbiAgICAgICAgY2FuY2VsSG9zdFRpbWVvdXQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlzSG9zdFRpbWVvdXRTY2hlZHVsZWQgPSB0cnVlO1xuICAgICAgfSAvLyBTY2hlZHVsZSBhIHRpbWVvdXQuXG5cblxuICAgICAgcmVxdWVzdEhvc3RUaW1lb3V0KGhhbmRsZVRpbWVvdXQsIHN0YXJ0VGltZSAtIGN1cnJlbnRUaW1lKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbmV3VGFzay5zb3J0SW5kZXggPSBleHBpcmF0aW9uVGltZTtcbiAgICBwdXNoKHRhc2tRdWV1ZSwgbmV3VGFzayk7XG4gICAgLy8gd2FpdCB1bnRpbCB0aGUgbmV4dCB0aW1lIHdlIHlpZWxkLlxuXG5cbiAgICBpZiAoIWlzSG9zdENhbGxiYWNrU2NoZWR1bGVkICYmICFpc1BlcmZvcm1pbmdXb3JrKSB7XG4gICAgICBpc0hvc3RDYWxsYmFja1NjaGVkdWxlZCA9IHRydWU7XG4gICAgICByZXF1ZXN0SG9zdENhbGxiYWNrKGZsdXNoV29yayk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ld1Rhc2s7XG59XG5cbmZ1bmN0aW9uIHVuc3RhYmxlX3BhdXNlRXhlY3V0aW9uKCkge1xufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV9jb250aW51ZUV4ZWN1dGlvbigpIHtcblxuICBpZiAoIWlzSG9zdENhbGxiYWNrU2NoZWR1bGVkICYmICFpc1BlcmZvcm1pbmdXb3JrKSB7XG4gICAgaXNIb3N0Q2FsbGJhY2tTY2hlZHVsZWQgPSB0cnVlO1xuICAgIHJlcXVlc3RIb3N0Q2FsbGJhY2soZmx1c2hXb3JrKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV9nZXRGaXJzdENhbGxiYWNrTm9kZSgpIHtcbiAgcmV0dXJuIHBlZWsodGFza1F1ZXVlKTtcbn1cblxuZnVuY3Rpb24gdW5zdGFibGVfY2FuY2VsQ2FsbGJhY2sodGFzaykge1xuICAvLyByZW1vdmUgZnJvbSB0aGUgcXVldWUgYmVjYXVzZSB5b3UgY2FuJ3QgcmVtb3ZlIGFyYml0cmFyeSBub2RlcyBmcm9tIGFuXG4gIC8vIGFycmF5IGJhc2VkIGhlYXAsIG9ubHkgdGhlIGZpcnN0IG9uZS4pXG5cblxuICB0YXNrLmNhbGxiYWNrID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gdW5zdGFibGVfZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwoKSB7XG4gIHJldHVybiBjdXJyZW50UHJpb3JpdHlMZXZlbDtcbn1cblxudmFyIHVuc3RhYmxlX3JlcXVlc3RQYWludCA9IHJlcXVlc3RQYWludDtcbnZhciB1bnN0YWJsZV9Qcm9maWxpbmcgPSAgbnVsbDtcblxuZXhwb3J0cy51bnN0YWJsZV9JZGxlUHJpb3JpdHkgPSBJZGxlUHJpb3JpdHk7XG5leHBvcnRzLnVuc3RhYmxlX0ltbWVkaWF0ZVByaW9yaXR5ID0gSW1tZWRpYXRlUHJpb3JpdHk7XG5leHBvcnRzLnVuc3RhYmxlX0xvd1ByaW9yaXR5ID0gTG93UHJpb3JpdHk7XG5leHBvcnRzLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5ID0gTm9ybWFsUHJpb3JpdHk7XG5leHBvcnRzLnVuc3RhYmxlX1Byb2ZpbGluZyA9IHVuc3RhYmxlX1Byb2ZpbGluZztcbmV4cG9ydHMudW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHkgPSBVc2VyQmxvY2tpbmdQcmlvcml0eTtcbmV4cG9ydHMudW5zdGFibGVfY2FuY2VsQ2FsbGJhY2sgPSB1bnN0YWJsZV9jYW5jZWxDYWxsYmFjaztcbmV4cG9ydHMudW5zdGFibGVfY29udGludWVFeGVjdXRpb24gPSB1bnN0YWJsZV9jb250aW51ZUV4ZWN1dGlvbjtcbmV4cG9ydHMudW5zdGFibGVfZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwgPSB1bnN0YWJsZV9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbDtcbmV4cG9ydHMudW5zdGFibGVfZ2V0Rmlyc3RDYWxsYmFja05vZGUgPSB1bnN0YWJsZV9nZXRGaXJzdENhbGxiYWNrTm9kZTtcbmV4cG9ydHMudW5zdGFibGVfbmV4dCA9IHVuc3RhYmxlX25leHQ7XG5leHBvcnRzLnVuc3RhYmxlX3BhdXNlRXhlY3V0aW9uID0gdW5zdGFibGVfcGF1c2VFeGVjdXRpb247XG5leHBvcnRzLnVuc3RhYmxlX3JlcXVlc3RQYWludCA9IHVuc3RhYmxlX3JlcXVlc3RQYWludDtcbmV4cG9ydHMudW5zdGFibGVfcnVuV2l0aFByaW9yaXR5ID0gdW5zdGFibGVfcnVuV2l0aFByaW9yaXR5O1xuZXhwb3J0cy51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrID0gdW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjaztcbmV4cG9ydHMudW5zdGFibGVfd3JhcENhbGxiYWNrID0gdW5zdGFibGVfd3JhcENhbGxiYWNrO1xuICB9KSgpO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9zY2hlZHVsZXIucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvc2NoZWR1bGVyLmRldmVsb3BtZW50LmpzJyk7XG59XG4iLCAiLyoqIEBsaWNlbnNlIFJlYWN0IHYwLjIwLjJcbiAqIHNjaGVkdWxlci10cmFjaW5nLmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIChmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxudmFyIERFRkFVTFRfVEhSRUFEX0lEID0gMDsgLy8gQ291bnRlcnMgdXNlZCB0byBnZW5lcmF0ZSB1bmlxdWUgSURzLlxuXG52YXIgaW50ZXJhY3Rpb25JRENvdW50ZXIgPSAwO1xudmFyIHRocmVhZElEQ291bnRlciA9IDA7IC8vIFNldCBvZiBjdXJyZW50bHkgdHJhY2VkIGludGVyYWN0aW9ucy5cbi8vIEludGVyYWN0aW9ucyBcInN0YWNrXCJcdTIwMTNcbi8vIE1lYW5pbmcgdGhhdCBuZXdseSB0cmFjZWQgaW50ZXJhY3Rpb25zIGFyZSBhcHBlbmRlZCB0byB0aGUgcHJldmlvdXNseSBhY3RpdmUgc2V0LlxuLy8gV2hlbiBhbiBpbnRlcmFjdGlvbiBnb2VzIG91dCBvZiBzY29wZSwgdGhlIHByZXZpb3VzIHNldCAoaWYgYW55KSBpcyByZXN0b3JlZC5cblxuZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZiA9IG51bGw7IC8vIExpc3RlbmVyKHMpIHRvIG5vdGlmeSB3aGVuIGludGVyYWN0aW9ucyBiZWdpbiBhbmQgZW5kLlxuXG5leHBvcnRzLl9fc3Vic2NyaWJlclJlZiA9IG51bGw7XG5cbntcbiAgZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZiA9IHtcbiAgICBjdXJyZW50OiBuZXcgU2V0KClcbiAgfTtcbiAgZXhwb3J0cy5fX3N1YnNjcmliZXJSZWYgPSB7XG4gICAgY3VycmVudDogbnVsbFxuICB9O1xufVxuZnVuY3Rpb24gdW5zdGFibGVfY2xlYXIoY2FsbGJhY2spIHtcblxuICB2YXIgcHJldkludGVyYWN0aW9ucyA9IGV4cG9ydHMuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudDtcbiAgZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50ID0gbmV3IFNldCgpO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gIH0gZmluYWxseSB7XG4gICAgZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50ID0gcHJldkludGVyYWN0aW9ucztcbiAgfVxufVxuZnVuY3Rpb24gdW5zdGFibGVfZ2V0Q3VycmVudCgpIHtcbiAge1xuICAgIHJldHVybiBleHBvcnRzLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQ7XG4gIH1cbn1cbmZ1bmN0aW9uIHVuc3RhYmxlX2dldFRocmVhZElEKCkge1xuICByZXR1cm4gKyt0aHJlYWRJRENvdW50ZXI7XG59XG5mdW5jdGlvbiB1bnN0YWJsZV90cmFjZShuYW1lLCB0aW1lc3RhbXAsIGNhbGxiYWNrKSB7XG4gIHZhciB0aHJlYWRJRCA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDogREVGQVVMVF9USFJFQURfSUQ7XG5cbiAgdmFyIGludGVyYWN0aW9uID0ge1xuICAgIF9fY291bnQ6IDEsXG4gICAgaWQ6IGludGVyYWN0aW9uSURDb3VudGVyKyssXG4gICAgbmFtZTogbmFtZSxcbiAgICB0aW1lc3RhbXA6IHRpbWVzdGFtcFxuICB9O1xuICB2YXIgcHJldkludGVyYWN0aW9ucyA9IGV4cG9ydHMuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudDsgLy8gVHJhY2VkIGludGVyYWN0aW9ucyBzaG91bGQgc3RhY2svYWNjdW11bGF0ZS5cbiAgLy8gVG8gZG8gdGhhdCwgY2xvbmUgdGhlIGN1cnJlbnQgaW50ZXJhY3Rpb25zLlxuICAvLyBUaGUgcHJldmlvdXMgc2V0IHdpbGwgYmUgcmVzdG9yZWQgdXBvbiBjb21wbGV0aW9uLlxuXG4gIHZhciBpbnRlcmFjdGlvbnMgPSBuZXcgU2V0KHByZXZJbnRlcmFjdGlvbnMpO1xuICBpbnRlcmFjdGlvbnMuYWRkKGludGVyYWN0aW9uKTtcbiAgZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50ID0gaW50ZXJhY3Rpb25zO1xuICB2YXIgc3Vic2NyaWJlciA9IGV4cG9ydHMuX19zdWJzY3JpYmVyUmVmLmN1cnJlbnQ7XG4gIHZhciByZXR1cm5WYWx1ZTtcblxuICB0cnkge1xuICAgIGlmIChzdWJzY3JpYmVyICE9PSBudWxsKSB7XG4gICAgICBzdWJzY3JpYmVyLm9uSW50ZXJhY3Rpb25UcmFjZWQoaW50ZXJhY3Rpb24pO1xuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgaWYgKHN1YnNjcmliZXIgIT09IG51bGwpIHtcbiAgICAgICAgc3Vic2NyaWJlci5vbldvcmtTdGFydGVkKGludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm5WYWx1ZSA9IGNhbGxiYWNrKCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBleHBvcnRzLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQgPSBwcmV2SW50ZXJhY3Rpb25zO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKHN1YnNjcmliZXIgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIub25Xb3JrU3RvcHBlZChpbnRlcmFjdGlvbnMsIHRocmVhZElEKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgaW50ZXJhY3Rpb24uX19jb3VudC0tOyAvLyBJZiBubyBhc3luYyB3b3JrIHdhcyBzY2hlZHVsZWQgZm9yIHRoaXMgaW50ZXJhY3Rpb24sXG4gICAgICAgICAgLy8gTm90aWZ5IHN1YnNjcmliZXJzIHRoYXQgaXQncyBjb21wbGV0ZWQuXG5cbiAgICAgICAgICBpZiAoc3Vic2NyaWJlciAhPT0gbnVsbCAmJiBpbnRlcmFjdGlvbi5fX2NvdW50ID09PSAwKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm9uSW50ZXJhY3Rpb25TY2hlZHVsZWRXb3JrQ29tcGxldGVkKGludGVyYWN0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmV0dXJuVmFsdWU7XG59XG5mdW5jdGlvbiB1bnN0YWJsZV93cmFwKGNhbGxiYWNrKSB7XG4gIHZhciB0aHJlYWRJRCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogREVGQVVMVF9USFJFQURfSUQ7XG5cbiAgdmFyIHdyYXBwZWRJbnRlcmFjdGlvbnMgPSBleHBvcnRzLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQ7XG4gIHZhciBzdWJzY3JpYmVyID0gZXhwb3J0cy5fX3N1YnNjcmliZXJSZWYuY3VycmVudDtcblxuICBpZiAoc3Vic2NyaWJlciAhPT0gbnVsbCkge1xuICAgIHN1YnNjcmliZXIub25Xb3JrU2NoZWR1bGVkKHdyYXBwZWRJbnRlcmFjdGlvbnMsIHRocmVhZElEKTtcbiAgfSAvLyBVcGRhdGUgdGhlIHBlbmRpbmcgYXN5bmMgd29yayBjb3VudCBmb3IgdGhlIGN1cnJlbnQgaW50ZXJhY3Rpb25zLlxuICAvLyBVcGRhdGUgYWZ0ZXIgY2FsbGluZyBzdWJzY3JpYmVycyBpbiBjYXNlIG9mIGVycm9yLlxuXG5cbiAgd3JhcHBlZEludGVyYWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChpbnRlcmFjdGlvbikge1xuICAgIGludGVyYWN0aW9uLl9fY291bnQrKztcbiAgfSk7XG4gIHZhciBoYXNSdW4gPSBmYWxzZTtcblxuICBmdW5jdGlvbiB3cmFwcGVkKCkge1xuICAgIHZhciBwcmV2SW50ZXJhY3Rpb25zID0gZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50O1xuICAgIGV4cG9ydHMuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudCA9IHdyYXBwZWRJbnRlcmFjdGlvbnM7XG4gICAgc3Vic2NyaWJlciA9IGV4cG9ydHMuX19zdWJzY3JpYmVyUmVmLmN1cnJlbnQ7XG5cbiAgICB0cnkge1xuICAgICAgdmFyIHJldHVyblZhbHVlO1xuXG4gICAgICB0cnkge1xuICAgICAgICBpZiAoc3Vic2NyaWJlciAhPT0gbnVsbCkge1xuICAgICAgICAgIHN1YnNjcmliZXIub25Xb3JrU3RhcnRlZCh3cmFwcGVkSW50ZXJhY3Rpb25zLCB0aHJlYWRJRCk7XG4gICAgICAgIH1cbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuVmFsdWUgPSBjYWxsYmFjay5hcHBseSh1bmRlZmluZWQsIGFyZ3VtZW50cyk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50ID0gcHJldkludGVyYWN0aW9ucztcblxuICAgICAgICAgIGlmIChzdWJzY3JpYmVyICE9PSBudWxsKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm9uV29ya1N0b3BwZWQod3JhcHBlZEludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmV0dXJuVmFsdWU7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmICghaGFzUnVuKSB7XG4gICAgICAgIC8vIFdlIG9ubHkgZXhwZWN0IGEgd3JhcHBlZCBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCBvbmNlLFxuICAgICAgICAvLyBCdXQgaW4gdGhlIGV2ZW50IHRoYXQgaXQncyBleGVjdXRlZCBtb3JlIHRoYW4gb25jZVx1MjAxM1xuICAgICAgICAvLyBPbmx5IGRlY3JlbWVudCB0aGUgb3V0c3RhbmRpbmcgaW50ZXJhY3Rpb24gY291bnRzIG9uY2UuXG4gICAgICAgIGhhc1J1biA9IHRydWU7IC8vIFVwZGF0ZSBwZW5kaW5nIGFzeW5jIGNvdW50cyBmb3IgYWxsIHdyYXBwZWQgaW50ZXJhY3Rpb25zLlxuICAgICAgICAvLyBJZiB0aGlzIHdhcyB0aGUgbGFzdCBzY2hlZHVsZWQgYXN5bmMgd29yayBmb3IgYW55IG9mIHRoZW0sXG4gICAgICAgIC8vIE1hcmsgdGhlbSBhcyBjb21wbGV0ZWQuXG5cbiAgICAgICAgd3JhcHBlZEludGVyYWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChpbnRlcmFjdGlvbikge1xuICAgICAgICAgIGludGVyYWN0aW9uLl9fY291bnQtLTtcblxuICAgICAgICAgIGlmIChzdWJzY3JpYmVyICE9PSBudWxsICYmIGludGVyYWN0aW9uLl9fY291bnQgPT09IDApIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIub25JbnRlcmFjdGlvblNjaGVkdWxlZFdvcmtDb21wbGV0ZWQoaW50ZXJhY3Rpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgd3JhcHBlZC5jYW5jZWwgPSBmdW5jdGlvbiBjYW5jZWwoKSB7XG4gICAgc3Vic2NyaWJlciA9IGV4cG9ydHMuX19zdWJzY3JpYmVyUmVmLmN1cnJlbnQ7XG5cbiAgICB0cnkge1xuICAgICAgaWYgKHN1YnNjcmliZXIgIT09IG51bGwpIHtcbiAgICAgICAgc3Vic2NyaWJlci5vbldvcmtDYW5jZWxlZCh3cmFwcGVkSW50ZXJhY3Rpb25zLCB0aHJlYWRJRCk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIC8vIFVwZGF0ZSBwZW5kaW5nIGFzeW5jIGNvdW50cyBmb3IgYWxsIHdyYXBwZWQgaW50ZXJhY3Rpb25zLlxuICAgICAgLy8gSWYgdGhpcyB3YXMgdGhlIGxhc3Qgc2NoZWR1bGVkIGFzeW5jIHdvcmsgZm9yIGFueSBvZiB0aGVtLFxuICAgICAgLy8gTWFyayB0aGVtIGFzIGNvbXBsZXRlZC5cbiAgICAgIHdyYXBwZWRJbnRlcmFjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoaW50ZXJhY3Rpb24pIHtcbiAgICAgICAgaW50ZXJhY3Rpb24uX19jb3VudC0tO1xuXG4gICAgICAgIGlmIChzdWJzY3JpYmVyICYmIGludGVyYWN0aW9uLl9fY291bnQgPT09IDApIHtcbiAgICAgICAgICBzdWJzY3JpYmVyLm9uSW50ZXJhY3Rpb25TY2hlZHVsZWRXb3JrQ29tcGxldGVkKGludGVyYWN0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiB3cmFwcGVkO1xufVxuXG52YXIgc3Vic2NyaWJlcnMgPSBudWxsO1xuXG57XG4gIHN1YnNjcmliZXJzID0gbmV3IFNldCgpO1xufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV9zdWJzY3JpYmUoc3Vic2NyaWJlcikge1xuICB7XG4gICAgc3Vic2NyaWJlcnMuYWRkKHN1YnNjcmliZXIpO1xuXG4gICAgaWYgKHN1YnNjcmliZXJzLnNpemUgPT09IDEpIHtcbiAgICAgIGV4cG9ydHMuX19zdWJzY3JpYmVyUmVmLmN1cnJlbnQgPSB7XG4gICAgICAgIG9uSW50ZXJhY3Rpb25TY2hlZHVsZWRXb3JrQ29tcGxldGVkOiBvbkludGVyYWN0aW9uU2NoZWR1bGVkV29ya0NvbXBsZXRlZCxcbiAgICAgICAgb25JbnRlcmFjdGlvblRyYWNlZDogb25JbnRlcmFjdGlvblRyYWNlZCxcbiAgICAgICAgb25Xb3JrQ2FuY2VsZWQ6IG9uV29ya0NhbmNlbGVkLFxuICAgICAgICBvbldvcmtTY2hlZHVsZWQ6IG9uV29ya1NjaGVkdWxlZCxcbiAgICAgICAgb25Xb3JrU3RhcnRlZDogb25Xb3JrU3RhcnRlZCxcbiAgICAgICAgb25Xb3JrU3RvcHBlZDogb25Xb3JrU3RvcHBlZFxuICAgICAgfTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHVuc3RhYmxlX3Vuc3Vic2NyaWJlKHN1YnNjcmliZXIpIHtcbiAge1xuICAgIHN1YnNjcmliZXJzLmRlbGV0ZShzdWJzY3JpYmVyKTtcblxuICAgIGlmIChzdWJzY3JpYmVycy5zaXplID09PSAwKSB7XG4gICAgICBleHBvcnRzLl9fc3Vic2NyaWJlclJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gb25JbnRlcmFjdGlvblRyYWNlZChpbnRlcmFjdGlvbikge1xuICB2YXIgZGlkQ2F0Y2hFcnJvciA9IGZhbHNlO1xuICB2YXIgY2F1Z2h0RXJyb3IgPSBudWxsO1xuICBzdWJzY3JpYmVycy5mb3JFYWNoKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgdHJ5IHtcbiAgICAgIHN1YnNjcmliZXIub25JbnRlcmFjdGlvblRyYWNlZChpbnRlcmFjdGlvbik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICghZGlkQ2F0Y2hFcnJvcikge1xuICAgICAgICBkaWRDYXRjaEVycm9yID0gdHJ1ZTtcbiAgICAgICAgY2F1Z2h0RXJyb3IgPSBlcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIGlmIChkaWRDYXRjaEVycm9yKSB7XG4gICAgdGhyb3cgY2F1Z2h0RXJyb3I7XG4gIH1cbn1cblxuZnVuY3Rpb24gb25JbnRlcmFjdGlvblNjaGVkdWxlZFdvcmtDb21wbGV0ZWQoaW50ZXJhY3Rpb24pIHtcbiAgdmFyIGRpZENhdGNoRXJyb3IgPSBmYWxzZTtcbiAgdmFyIGNhdWdodEVycm9yID0gbnVsbDtcbiAgc3Vic2NyaWJlcnMuZm9yRWFjaChmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgIHRyeSB7XG4gICAgICBzdWJzY3JpYmVyLm9uSW50ZXJhY3Rpb25TY2hlZHVsZWRXb3JrQ29tcGxldGVkKGludGVyYWN0aW9uKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKCFkaWRDYXRjaEVycm9yKSB7XG4gICAgICAgIGRpZENhdGNoRXJyb3IgPSB0cnVlO1xuICAgICAgICBjYXVnaHRFcnJvciA9IGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgaWYgKGRpZENhdGNoRXJyb3IpIHtcbiAgICB0aHJvdyBjYXVnaHRFcnJvcjtcbiAgfVxufVxuXG5mdW5jdGlvbiBvbldvcmtTY2hlZHVsZWQoaW50ZXJhY3Rpb25zLCB0aHJlYWRJRCkge1xuICB2YXIgZGlkQ2F0Y2hFcnJvciA9IGZhbHNlO1xuICB2YXIgY2F1Z2h0RXJyb3IgPSBudWxsO1xuICBzdWJzY3JpYmVycy5mb3JFYWNoKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgdHJ5IHtcbiAgICAgIHN1YnNjcmliZXIub25Xb3JrU2NoZWR1bGVkKGludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoIWRpZENhdGNoRXJyb3IpIHtcbiAgICAgICAgZGlkQ2F0Y2hFcnJvciA9IHRydWU7XG4gICAgICAgIGNhdWdodEVycm9yID0gZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICBpZiAoZGlkQ2F0Y2hFcnJvcikge1xuICAgIHRocm93IGNhdWdodEVycm9yO1xuICB9XG59XG5cbmZ1bmN0aW9uIG9uV29ya1N0YXJ0ZWQoaW50ZXJhY3Rpb25zLCB0aHJlYWRJRCkge1xuICB2YXIgZGlkQ2F0Y2hFcnJvciA9IGZhbHNlO1xuICB2YXIgY2F1Z2h0RXJyb3IgPSBudWxsO1xuICBzdWJzY3JpYmVycy5mb3JFYWNoKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgdHJ5IHtcbiAgICAgIHN1YnNjcmliZXIub25Xb3JrU3RhcnRlZChpbnRlcmFjdGlvbnMsIHRocmVhZElEKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKCFkaWRDYXRjaEVycm9yKSB7XG4gICAgICAgIGRpZENhdGNoRXJyb3IgPSB0cnVlO1xuICAgICAgICBjYXVnaHRFcnJvciA9IGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgaWYgKGRpZENhdGNoRXJyb3IpIHtcbiAgICB0aHJvdyBjYXVnaHRFcnJvcjtcbiAgfVxufVxuXG5mdW5jdGlvbiBvbldvcmtTdG9wcGVkKGludGVyYWN0aW9ucywgdGhyZWFkSUQpIHtcbiAgdmFyIGRpZENhdGNoRXJyb3IgPSBmYWxzZTtcbiAgdmFyIGNhdWdodEVycm9yID0gbnVsbDtcbiAgc3Vic2NyaWJlcnMuZm9yRWFjaChmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgIHRyeSB7XG4gICAgICBzdWJzY3JpYmVyLm9uV29ya1N0b3BwZWQoaW50ZXJhY3Rpb25zLCB0aHJlYWRJRCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICghZGlkQ2F0Y2hFcnJvcikge1xuICAgICAgICBkaWRDYXRjaEVycm9yID0gdHJ1ZTtcbiAgICAgICAgY2F1Z2h0RXJyb3IgPSBlcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIGlmIChkaWRDYXRjaEVycm9yKSB7XG4gICAgdGhyb3cgY2F1Z2h0RXJyb3I7XG4gIH1cbn1cblxuZnVuY3Rpb24gb25Xb3JrQ2FuY2VsZWQoaW50ZXJhY3Rpb25zLCB0aHJlYWRJRCkge1xuICB2YXIgZGlkQ2F0Y2hFcnJvciA9IGZhbHNlO1xuICB2YXIgY2F1Z2h0RXJyb3IgPSBudWxsO1xuICBzdWJzY3JpYmVycy5mb3JFYWNoKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgdHJ5IHtcbiAgICAgIHN1YnNjcmliZXIub25Xb3JrQ2FuY2VsZWQoaW50ZXJhY3Rpb25zLCB0aHJlYWRJRCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICghZGlkQ2F0Y2hFcnJvcikge1xuICAgICAgICBkaWRDYXRjaEVycm9yID0gdHJ1ZTtcbiAgICAgICAgY2F1Z2h0RXJyb3IgPSBlcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIGlmIChkaWRDYXRjaEVycm9yKSB7XG4gICAgdGhyb3cgY2F1Z2h0RXJyb3I7XG4gIH1cbn1cblxuZXhwb3J0cy51bnN0YWJsZV9jbGVhciA9IHVuc3RhYmxlX2NsZWFyO1xuZXhwb3J0cy51bnN0YWJsZV9nZXRDdXJyZW50ID0gdW5zdGFibGVfZ2V0Q3VycmVudDtcbmV4cG9ydHMudW5zdGFibGVfZ2V0VGhyZWFkSUQgPSB1bnN0YWJsZV9nZXRUaHJlYWRJRDtcbmV4cG9ydHMudW5zdGFibGVfc3Vic2NyaWJlID0gdW5zdGFibGVfc3Vic2NyaWJlO1xuZXhwb3J0cy51bnN0YWJsZV90cmFjZSA9IHVuc3RhYmxlX3RyYWNlO1xuZXhwb3J0cy51bnN0YWJsZV91bnN1YnNjcmliZSA9IHVuc3RhYmxlX3Vuc3Vic2NyaWJlO1xuZXhwb3J0cy51bnN0YWJsZV93cmFwID0gdW5zdGFibGVfd3JhcDtcbiAgfSkoKTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvc2NoZWR1bGVyLXRyYWNpbmcucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvc2NoZWR1bGVyLXRyYWNpbmcuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsICIvKiogQGxpY2Vuc2UgUmVhY3QgdjE3LjAuMlxuICogcmVhY3QtZG9tLmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIChmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcbnZhciBfYXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xudmFyIFNjaGVkdWxlciA9IHJlcXVpcmUoJ3NjaGVkdWxlcicpO1xudmFyIHRyYWNpbmcgPSByZXF1aXJlKCdzY2hlZHVsZXIvdHJhY2luZycpO1xuXG52YXIgUmVhY3RTaGFyZWRJbnRlcm5hbHMgPSBSZWFjdC5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRDtcblxuLy8gYnkgY2FsbHMgdG8gdGhlc2UgbWV0aG9kcyBieSBhIEJhYmVsIHBsdWdpbi5cbi8vXG4vLyBJbiBQUk9EIChvciBpbiBwYWNrYWdlcyB3aXRob3V0IGFjY2VzcyB0byBSZWFjdCBpbnRlcm5hbHMpLFxuLy8gdGhleSBhcmUgbGVmdCBhcyB0aGV5IGFyZSBpbnN0ZWFkLlxuXG5mdW5jdGlvbiB3YXJuKGZvcm1hdCkge1xuICB7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgcHJpbnRXYXJuaW5nKCd3YXJuJywgZm9ybWF0LCBhcmdzKTtcbiAgfVxufVxuZnVuY3Rpb24gZXJyb3IoZm9ybWF0KSB7XG4gIHtcbiAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIgPiAxID8gX2xlbjIgLSAxIDogMCksIF9rZXkyID0gMTsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgYXJnc1tfa2V5MiAtIDFdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICB9XG5cbiAgICBwcmludFdhcm5pbmcoJ2Vycm9yJywgZm9ybWF0LCBhcmdzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwcmludFdhcm5pbmcobGV2ZWwsIGZvcm1hdCwgYXJncykge1xuICAvLyBXaGVuIGNoYW5naW5nIHRoaXMgbG9naWMsIHlvdSBtaWdodCB3YW50IHRvIGFsc29cbiAgLy8gdXBkYXRlIGNvbnNvbGVXaXRoU3RhY2tEZXYud3d3LmpzIGFzIHdlbGwuXG4gIHtcbiAgICB2YXIgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0RGVidWdDdXJyZW50RnJhbWU7XG4gICAgdmFyIHN0YWNrID0gUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5nZXRTdGFja0FkZGVuZHVtKCk7XG5cbiAgICBpZiAoc3RhY2sgIT09ICcnKSB7XG4gICAgICBmb3JtYXQgKz0gJyVzJztcbiAgICAgIGFyZ3MgPSBhcmdzLmNvbmNhdChbc3RhY2tdKTtcbiAgICB9XG5cbiAgICB2YXIgYXJnc1dpdGhGb3JtYXQgPSBhcmdzLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgcmV0dXJuICcnICsgaXRlbTtcbiAgICB9KTsgLy8gQ2FyZWZ1bDogUk4gY3VycmVudGx5IGRlcGVuZHMgb24gdGhpcyBwcmVmaXhcblxuICAgIGFyZ3NXaXRoRm9ybWF0LnVuc2hpZnQoJ1dhcm5pbmc6ICcgKyBmb3JtYXQpOyAvLyBXZSBpbnRlbnRpb25hbGx5IGRvbid0IHVzZSBzcHJlYWQgKG9yIC5hcHBseSkgZGlyZWN0bHkgYmVjYXVzZSBpdFxuICAgIC8vIGJyZWFrcyBJRTk6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTM2MTBcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nXG5cbiAgICBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbChjb25zb2xlW2xldmVsXSwgY29uc29sZSwgYXJnc1dpdGhGb3JtYXQpO1xuICB9XG59XG5cbmlmICghUmVhY3QpIHtcbiAge1xuICAgIHRocm93IEVycm9yKCBcIlJlYWN0RE9NIHdhcyBsb2FkZWQgYmVmb3JlIFJlYWN0LiBNYWtlIHN1cmUgeW91IGxvYWQgdGhlIFJlYWN0IHBhY2thZ2UgYmVmb3JlIGxvYWRpbmcgUmVhY3RET00uXCIgKTtcbiAgfVxufVxuXG52YXIgRnVuY3Rpb25Db21wb25lbnQgPSAwO1xudmFyIENsYXNzQ29tcG9uZW50ID0gMTtcbnZhciBJbmRldGVybWluYXRlQ29tcG9uZW50ID0gMjsgLy8gQmVmb3JlIHdlIGtub3cgd2hldGhlciBpdCBpcyBmdW5jdGlvbiBvciBjbGFzc1xuXG52YXIgSG9zdFJvb3QgPSAzOyAvLyBSb290IG9mIGEgaG9zdCB0cmVlLiBDb3VsZCBiZSBuZXN0ZWQgaW5zaWRlIGFub3RoZXIgbm9kZS5cblxudmFyIEhvc3RQb3J0YWwgPSA0OyAvLyBBIHN1YnRyZWUuIENvdWxkIGJlIGFuIGVudHJ5IHBvaW50IHRvIGEgZGlmZmVyZW50IHJlbmRlcmVyLlxuXG52YXIgSG9zdENvbXBvbmVudCA9IDU7XG52YXIgSG9zdFRleHQgPSA2O1xudmFyIEZyYWdtZW50ID0gNztcbnZhciBNb2RlID0gODtcbnZhciBDb250ZXh0Q29uc3VtZXIgPSA5O1xudmFyIENvbnRleHRQcm92aWRlciA9IDEwO1xudmFyIEZvcndhcmRSZWYgPSAxMTtcbnZhciBQcm9maWxlciA9IDEyO1xudmFyIFN1c3BlbnNlQ29tcG9uZW50ID0gMTM7XG52YXIgTWVtb0NvbXBvbmVudCA9IDE0O1xudmFyIFNpbXBsZU1lbW9Db21wb25lbnQgPSAxNTtcbnZhciBMYXp5Q29tcG9uZW50ID0gMTY7XG52YXIgSW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50ID0gMTc7XG52YXIgRGVoeWRyYXRlZEZyYWdtZW50ID0gMTg7XG52YXIgU3VzcGVuc2VMaXN0Q29tcG9uZW50ID0gMTk7XG52YXIgRnVuZGFtZW50YWxDb21wb25lbnQgPSAyMDtcbnZhciBTY29wZUNvbXBvbmVudCA9IDIxO1xudmFyIEJsb2NrID0gMjI7XG52YXIgT2Zmc2NyZWVuQ29tcG9uZW50ID0gMjM7XG52YXIgTGVnYWN5SGlkZGVuQ29tcG9uZW50ID0gMjQ7XG5cbi8vIEZpbHRlciBjZXJ0YWluIERPTSBhdHRyaWJ1dGVzIChlLmcuIHNyYywgaHJlZikgaWYgdGhlaXIgdmFsdWVzIGFyZSBlbXB0eSBzdHJpbmdzLlxuXG52YXIgZW5hYmxlUHJvZmlsZXJUaW1lciA9IHRydWU7IC8vIFJlY29yZCBkdXJhdGlvbnMgZm9yIGNvbW1pdCBhbmQgcGFzc2l2ZSBlZmZlY3RzIHBoYXNlcy5cblxudmFyIGVuYWJsZUZ1bmRhbWVudGFsQVBJID0gZmFsc2U7IC8vIEV4cGVyaW1lbnRhbCBTY29wZSBzdXBwb3J0LlxudmFyIGVuYWJsZU5ld1JlY29uY2lsZXIgPSBmYWxzZTsgLy8gRXJyb3JzIHRoYXQgYXJlIHRocm93biB3aGlsZSB1bm1vdW50aW5nIChvciBhZnRlciBpbiB0aGUgY2FzZSBvZiBwYXNzaXZlIGVmZmVjdHMpXG52YXIgd2FybkFib3V0U3RyaW5nUmVmcyA9IGZhbHNlO1xuXG52YXIgYWxsTmF0aXZlRXZlbnRzID0gbmV3IFNldCgpO1xuLyoqXG4gKiBNYXBwaW5nIGZyb20gcmVnaXN0cmF0aW9uIG5hbWUgdG8gZXZlbnQgbmFtZVxuICovXG5cblxudmFyIHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXMgPSB7fTtcbi8qKlxuICogTWFwcGluZyBmcm9tIGxvd2VyY2FzZSByZWdpc3RyYXRpb24gbmFtZXMgdG8gdGhlIHByb3Blcmx5IGNhc2VkIHZlcnNpb24sXG4gKiB1c2VkIHRvIHdhcm4gaW4gdGhlIGNhc2Ugb2YgbWlzc2luZyBldmVudCBoYW5kbGVycy4gQXZhaWxhYmxlXG4gKiBvbmx5IGluIHRydWUuXG4gKiBAdHlwZSB7T2JqZWN0fVxuICovXG5cbnZhciBwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzID0gIHt9IDsgLy8gVHJ1c3QgdGhlIGRldmVsb3BlciB0byBvbmx5IHVzZSBwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzIGluIHRydWVcblxuZnVuY3Rpb24gcmVnaXN0ZXJUd29QaGFzZUV2ZW50KHJlZ2lzdHJhdGlvbk5hbWUsIGRlcGVuZGVuY2llcykge1xuICByZWdpc3RlckRpcmVjdEV2ZW50KHJlZ2lzdHJhdGlvbk5hbWUsIGRlcGVuZGVuY2llcyk7XG4gIHJlZ2lzdGVyRGlyZWN0RXZlbnQocmVnaXN0cmF0aW9uTmFtZSArICdDYXB0dXJlJywgZGVwZW5kZW5jaWVzKTtcbn1cbmZ1bmN0aW9uIHJlZ2lzdGVyRGlyZWN0RXZlbnQocmVnaXN0cmF0aW9uTmFtZSwgZGVwZW5kZW5jaWVzKSB7XG4gIHtcbiAgICBpZiAocmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llc1tyZWdpc3RyYXRpb25OYW1lXSkge1xuICAgICAgZXJyb3IoJ0V2ZW50UmVnaXN0cnk6IE1vcmUgdGhhbiBvbmUgcGx1Z2luIGF0dGVtcHRlZCB0byBwdWJsaXNoIHRoZSBzYW1lICcgKyAncmVnaXN0cmF0aW9uIG5hbWUsIGAlc2AuJywgcmVnaXN0cmF0aW9uTmFtZSk7XG4gICAgfVxuICB9XG5cbiAgcmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llc1tyZWdpc3RyYXRpb25OYW1lXSA9IGRlcGVuZGVuY2llcztcblxuICB7XG4gICAgdmFyIGxvd2VyQ2FzZWROYW1lID0gcmVnaXN0cmF0aW9uTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXNbbG93ZXJDYXNlZE5hbWVdID0gcmVnaXN0cmF0aW9uTmFtZTtcblxuICAgIGlmIChyZWdpc3RyYXRpb25OYW1lID09PSAnb25Eb3VibGVDbGljaycpIHtcbiAgICAgIHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXMub25kYmxjbGljayA9IHJlZ2lzdHJhdGlvbk5hbWU7XG4gICAgfVxuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZXBlbmRlbmNpZXMubGVuZ3RoOyBpKyspIHtcbiAgICBhbGxOYXRpdmVFdmVudHMuYWRkKGRlcGVuZGVuY2llc1tpXSk7XG4gIH1cbn1cblxudmFyIGNhblVzZURPTSA9ICEhKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcpO1xuXG4vLyBBIHJlc2VydmVkIGF0dHJpYnV0ZS5cbi8vIEl0IGlzIGhhbmRsZWQgYnkgUmVhY3Qgc2VwYXJhdGVseSBhbmQgc2hvdWxkbid0IGJlIHdyaXR0ZW4gdG8gdGhlIERPTS5cbnZhciBSRVNFUlZFRCA9IDA7IC8vIEEgc2ltcGxlIHN0cmluZyBhdHRyaWJ1dGUuXG4vLyBBdHRyaWJ1dGVzIHRoYXQgYXJlbid0IGluIHRoZSBmaWx0ZXIgYXJlIHByZXN1bWVkIHRvIGhhdmUgdGhpcyB0eXBlLlxuXG52YXIgU1RSSU5HID0gMTsgLy8gQSBzdHJpbmcgYXR0cmlidXRlIHRoYXQgYWNjZXB0cyBib29sZWFucyBpbiBSZWFjdC4gSW4gSFRNTCwgdGhlc2UgYXJlIGNhbGxlZFxuLy8gXCJlbnVtZXJhdGVkXCIgYXR0cmlidXRlcyB3aXRoIFwidHJ1ZVwiIGFuZCBcImZhbHNlXCIgYXMgcG9zc2libGUgdmFsdWVzLlxuLy8gV2hlbiB0cnVlLCBpdCBzaG91bGQgYmUgc2V0IHRvIGEgXCJ0cnVlXCIgc3RyaW5nLlxuLy8gV2hlbiBmYWxzZSwgaXQgc2hvdWxkIGJlIHNldCB0byBhIFwiZmFsc2VcIiBzdHJpbmcuXG5cbnZhciBCT09MRUFOSVNIX1NUUklORyA9IDI7IC8vIEEgcmVhbCBib29sZWFuIGF0dHJpYnV0ZS5cbi8vIFdoZW4gdHJ1ZSwgaXQgc2hvdWxkIGJlIHByZXNlbnQgKHNldCBlaXRoZXIgdG8gYW4gZW1wdHkgc3RyaW5nIG9yIGl0cyBuYW1lKS5cbi8vIFdoZW4gZmFsc2UsIGl0IHNob3VsZCBiZSBvbWl0dGVkLlxuXG52YXIgQk9PTEVBTiA9IDM7IC8vIEFuIGF0dHJpYnV0ZSB0aGF0IGNhbiBiZSB1c2VkIGFzIGEgZmxhZyBhcyB3ZWxsIGFzIHdpdGggYSB2YWx1ZS5cbi8vIFdoZW4gdHJ1ZSwgaXQgc2hvdWxkIGJlIHByZXNlbnQgKHNldCBlaXRoZXIgdG8gYW4gZW1wdHkgc3RyaW5nIG9yIGl0cyBuYW1lKS5cbi8vIFdoZW4gZmFsc2UsIGl0IHNob3VsZCBiZSBvbWl0dGVkLlxuLy8gRm9yIGFueSBvdGhlciB2YWx1ZSwgc2hvdWxkIGJlIHByZXNlbnQgd2l0aCB0aGF0IHZhbHVlLlxuXG52YXIgT1ZFUkxPQURFRF9CT09MRUFOID0gNDsgLy8gQW4gYXR0cmlidXRlIHRoYXQgbXVzdCBiZSBudW1lcmljIG9yIHBhcnNlIGFzIGEgbnVtZXJpYy5cbi8vIFdoZW4gZmFsc3ksIGl0IHNob3VsZCBiZSByZW1vdmVkLlxuXG52YXIgTlVNRVJJQyA9IDU7IC8vIEFuIGF0dHJpYnV0ZSB0aGF0IG11c3QgYmUgcG9zaXRpdmUgbnVtZXJpYyBvciBwYXJzZSBhcyBhIHBvc2l0aXZlIG51bWVyaWMuXG4vLyBXaGVuIGZhbHN5LCBpdCBzaG91bGQgYmUgcmVtb3ZlZC5cblxudmFyIFBPU0lUSVZFX05VTUVSSUMgPSA2O1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXG52YXIgQVRUUklCVVRFX05BTUVfU1RBUlRfQ0hBUiA9IFwiOkEtWl9hLXpcXFxcdTAwQzAtXFxcXHUwMEQ2XFxcXHUwMEQ4LVxcXFx1MDBGNlxcXFx1MDBGOC1cXFxcdTAyRkZcXFxcdTAzNzAtXFxcXHUwMzdEXFxcXHUwMzdGLVxcXFx1MUZGRlxcXFx1MjAwQy1cXFxcdTIwMERcXFxcdTIwNzAtXFxcXHUyMThGXFxcXHUyQzAwLVxcXFx1MkZFRlxcXFx1MzAwMS1cXFxcdUQ3RkZcXFxcdUY5MDAtXFxcXHVGRENGXFxcXHVGREYwLVxcXFx1RkZGRFwiO1xuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuICovXG5cbnZhciBBVFRSSUJVVEVfTkFNRV9DSEFSID0gQVRUUklCVVRFX05BTUVfU1RBUlRfQ0hBUiArIFwiXFxcXC0uMC05XFxcXHUwMEI3XFxcXHUwMzAwLVxcXFx1MDM2RlxcXFx1MjAzRi1cXFxcdTIwNDBcIjtcbnZhciBST09UX0FUVFJJQlVURV9OQU1FID0gJ2RhdGEtcmVhY3Ryb290JztcbnZhciBWQUxJRF9BVFRSSUJVVEVfTkFNRV9SRUdFWCA9IG5ldyBSZWdFeHAoJ15bJyArIEFUVFJJQlVURV9OQU1FX1NUQVJUX0NIQVIgKyAnXVsnICsgQVRUUklCVVRFX05BTUVfQ0hBUiArICddKiQnKTtcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgaWxsZWdhbEF0dHJpYnV0ZU5hbWVDYWNoZSA9IHt9O1xudmFyIHZhbGlkYXRlZEF0dHJpYnV0ZU5hbWVDYWNoZSA9IHt9O1xuZnVuY3Rpb24gaXNBdHRyaWJ1dGVOYW1lU2FmZShhdHRyaWJ1dGVOYW1lKSB7XG4gIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbGlkYXRlZEF0dHJpYnV0ZU5hbWVDYWNoZSwgYXR0cmlidXRlTmFtZSkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGlsbGVnYWxBdHRyaWJ1dGVOYW1lQ2FjaGUsIGF0dHJpYnV0ZU5hbWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKFZBTElEX0FUVFJJQlVURV9OQU1FX1JFR0VYLnRlc3QoYXR0cmlidXRlTmFtZSkpIHtcbiAgICB2YWxpZGF0ZWRBdHRyaWJ1dGVOYW1lQ2FjaGVbYXR0cmlidXRlTmFtZV0gPSB0cnVlO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWxsZWdhbEF0dHJpYnV0ZU5hbWVDYWNoZVthdHRyaWJ1dGVOYW1lXSA9IHRydWU7XG5cbiAge1xuICAgIGVycm9yKCdJbnZhbGlkIGF0dHJpYnV0ZSBuYW1lOiBgJXNgJywgYXR0cmlidXRlTmFtZSk7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBzaG91bGRJZ25vcmVBdHRyaWJ1dGUobmFtZSwgcHJvcGVydHlJbmZvLCBpc0N1c3RvbUNvbXBvbmVudFRhZykge1xuICBpZiAocHJvcGVydHlJbmZvICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIHByb3BlcnR5SW5mby50eXBlID09PSBSRVNFUlZFRDtcbiAgfVxuXG4gIGlmIChpc0N1c3RvbUNvbXBvbmVudFRhZykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChuYW1lLmxlbmd0aCA+IDIgJiYgKG5hbWVbMF0gPT09ICdvJyB8fCBuYW1lWzBdID09PSAnTycpICYmIChuYW1lWzFdID09PSAnbicgfHwgbmFtZVsxXSA9PT0gJ04nKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gc2hvdWxkUmVtb3ZlQXR0cmlidXRlV2l0aFdhcm5pbmcobmFtZSwgdmFsdWUsIHByb3BlcnR5SW5mbywgaXNDdXN0b21Db21wb25lbnRUYWcpIHtcbiAgaWYgKHByb3BlcnR5SW5mbyAhPT0gbnVsbCAmJiBwcm9wZXJ0eUluZm8udHlwZSA9PT0gUkVTRVJWRUQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgIGNhc2UgJ2Z1bmN0aW9uJzogLy8gJEZsb3dJc3N1ZSBzeW1ib2wgaXMgcGVyZmVjdGx5IHZhbGlkIGhlcmVcblxuICAgIGNhc2UgJ3N5bWJvbCc6XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICByZXR1cm4gdHJ1ZTtcblxuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAge1xuICAgICAgICBpZiAoaXNDdXN0b21Db21wb25lbnRUYWcpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvcGVydHlJbmZvICE9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuICFwcm9wZXJ0eUluZm8uYWNjZXB0c0Jvb2xlYW5zO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBwcmVmaXggPSBuYW1lLnRvTG93ZXJDYXNlKCkuc2xpY2UoMCwgNSk7XG4gICAgICAgICAgcmV0dXJuIHByZWZpeCAhPT0gJ2RhdGEtJyAmJiBwcmVmaXggIT09ICdhcmlhLSc7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbmZ1bmN0aW9uIHNob3VsZFJlbW92ZUF0dHJpYnV0ZShuYW1lLCB2YWx1ZSwgcHJvcGVydHlJbmZvLCBpc0N1c3RvbUNvbXBvbmVudFRhZykge1xuICBpZiAodmFsdWUgPT09IG51bGwgfHwgdHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHNob3VsZFJlbW92ZUF0dHJpYnV0ZVdpdGhXYXJuaW5nKG5hbWUsIHZhbHVlLCBwcm9wZXJ0eUluZm8sIGlzQ3VzdG9tQ29tcG9uZW50VGFnKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKGlzQ3VzdG9tQ29tcG9uZW50VGFnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHByb3BlcnR5SW5mbyAhPT0gbnVsbCkge1xuXG4gICAgc3dpdGNoIChwcm9wZXJ0eUluZm8udHlwZSkge1xuICAgICAgY2FzZSBCT09MRUFOOlxuICAgICAgICByZXR1cm4gIXZhbHVlO1xuXG4gICAgICBjYXNlIE9WRVJMT0FERURfQk9PTEVBTjpcbiAgICAgICAgcmV0dXJuIHZhbHVlID09PSBmYWxzZTtcblxuICAgICAgY2FzZSBOVU1FUklDOlxuICAgICAgICByZXR1cm4gaXNOYU4odmFsdWUpO1xuXG4gICAgICBjYXNlIFBPU0lUSVZFX05VTUVSSUM6XG4gICAgICAgIHJldHVybiBpc05hTih2YWx1ZSkgfHwgdmFsdWUgPCAxO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGdldFByb3BlcnR5SW5mbyhuYW1lKSB7XG4gIHJldHVybiBwcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KG5hbWUpID8gcHJvcGVydGllc1tuYW1lXSA6IG51bGw7XG59XG5cbmZ1bmN0aW9uIFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCB0eXBlLCBtdXN0VXNlUHJvcGVydHksIGF0dHJpYnV0ZU5hbWUsIGF0dHJpYnV0ZU5hbWVzcGFjZSwgc2FuaXRpemVVUkwsIHJlbW92ZUVtcHR5U3RyaW5nKSB7XG4gIHRoaXMuYWNjZXB0c0Jvb2xlYW5zID0gdHlwZSA9PT0gQk9PTEVBTklTSF9TVFJJTkcgfHwgdHlwZSA9PT0gQk9PTEVBTiB8fCB0eXBlID09PSBPVkVSTE9BREVEX0JPT0xFQU47XG4gIHRoaXMuYXR0cmlidXRlTmFtZSA9IGF0dHJpYnV0ZU5hbWU7XG4gIHRoaXMuYXR0cmlidXRlTmFtZXNwYWNlID0gYXR0cmlidXRlTmFtZXNwYWNlO1xuICB0aGlzLm11c3RVc2VQcm9wZXJ0eSA9IG11c3RVc2VQcm9wZXJ0eTtcbiAgdGhpcy5wcm9wZXJ0eU5hbWUgPSBuYW1lO1xuICB0aGlzLnR5cGUgPSB0eXBlO1xuICB0aGlzLnNhbml0aXplVVJMID0gc2FuaXRpemVVUkw7XG4gIHRoaXMucmVtb3ZlRW1wdHlTdHJpbmcgPSByZW1vdmVFbXB0eVN0cmluZztcbn0gLy8gV2hlbiBhZGRpbmcgYXR0cmlidXRlcyB0byB0aGlzIGxpc3QsIGJlIHN1cmUgdG8gYWxzbyBhZGQgdGhlbSB0b1xuLy8gdGhlIGBwb3NzaWJsZVN0YW5kYXJkTmFtZXNgIG1vZHVsZSB0byBlbnN1cmUgY2FzaW5nIGFuZCBpbmNvcnJlY3Rcbi8vIG5hbWUgd2FybmluZ3MuXG5cblxudmFyIHByb3BlcnRpZXMgPSB7fTsgLy8gVGhlc2UgcHJvcHMgYXJlIHJlc2VydmVkIGJ5IFJlYWN0LiBUaGV5IHNob3VsZG4ndCBiZSB3cml0dGVuIHRvIHRoZSBET00uXG5cbnZhciByZXNlcnZlZFByb3BzID0gWydjaGlsZHJlbicsICdkYW5nZXJvdXNseVNldElubmVySFRNTCcsIC8vIFRPRE86IFRoaXMgcHJldmVudHMgdGhlIGFzc2lnbm1lbnQgb2YgZGVmYXVsdFZhbHVlIHRvIHJlZ3VsYXJcbi8vIGVsZW1lbnRzIChub3QganVzdCBpbnB1dHMpLiBOb3cgdGhhdCBSZWFjdERPTUlucHV0IGFzc2lnbnMgdG8gdGhlXG4vLyBkZWZhdWx0VmFsdWUgcHJvcGVydHkgLS0gZG8gd2UgbmVlZCB0aGlzP1xuJ2RlZmF1bHRWYWx1ZScsICdkZWZhdWx0Q2hlY2tlZCcsICdpbm5lckhUTUwnLCAnc3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nJywgJ3N1cHByZXNzSHlkcmF0aW9uV2FybmluZycsICdzdHlsZSddO1xucmVzZXJ2ZWRQcm9wcy5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIFJFU0VSVkVELCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIG5hbWUsIC8vIGF0dHJpYnV0ZU5hbWVcbiAgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTsgLy8gQSBmZXcgUmVhY3Qgc3RyaW5nIGF0dHJpYnV0ZXMgaGF2ZSBhIGRpZmZlcmVudCBuYW1lLlxuLy8gVGhpcyBpcyBhIG1hcHBpbmcgZnJvbSBSZWFjdCBwcm9wIG5hbWVzIHRvIHRoZSBhdHRyaWJ1dGUgbmFtZXMuXG5cbltbJ2FjY2VwdENoYXJzZXQnLCAnYWNjZXB0LWNoYXJzZXQnXSwgWydjbGFzc05hbWUnLCAnY2xhc3MnXSwgWydodG1sRm9yJywgJ2ZvciddLCBbJ2h0dHBFcXVpdicsICdodHRwLWVxdWl2J11dLmZvckVhY2goZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIG5hbWUgPSBfcmVmWzBdLFxuICAgICAgYXR0cmlidXRlTmFtZSA9IF9yZWZbMV07XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIFNUUklORywgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBhdHRyaWJ1dGVOYW1lLCAvLyBhdHRyaWJ1dGVOYW1lXG4gIG51bGwsIC8vIGF0dHJpYnV0ZU5hbWVzcGFjZVxuICBmYWxzZSwgLy8gc2FuaXRpemVVUkxcbiAgZmFsc2UpO1xufSk7IC8vIFRoZXNlIGFyZSBcImVudW1lcmF0ZWRcIiBIVE1MIGF0dHJpYnV0ZXMgdGhhdCBhY2NlcHQgXCJ0cnVlXCIgYW5kIFwiZmFsc2VcIi5cbi8vIEluIFJlYWN0LCB3ZSBsZXQgdXNlcnMgcGFzcyBgdHJ1ZWAgYW5kIGBmYWxzZWAgZXZlbiB0aG91Z2ggdGVjaG5pY2FsbHlcbi8vIHRoZXNlIGFyZW4ndCBib29sZWFuIGF0dHJpYnV0ZXMgKHRoZXkgYXJlIGNvZXJjZWQgdG8gc3RyaW5ncykuXG5cblsnY29udGVudEVkaXRhYmxlJywgJ2RyYWdnYWJsZScsICdzcGVsbENoZWNrJywgJ3ZhbHVlJ10uZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICBwcm9wZXJ0aWVzW25hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCBCT09MRUFOSVNIX1NUUklORywgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBuYW1lLnRvTG93ZXJDYXNlKCksIC8vIGF0dHJpYnV0ZU5hbWVcbiAgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTsgLy8gVGhlc2UgYXJlIFwiZW51bWVyYXRlZFwiIFNWRyBhdHRyaWJ1dGVzIHRoYXQgYWNjZXB0IFwidHJ1ZVwiIGFuZCBcImZhbHNlXCIuXG4vLyBJbiBSZWFjdCwgd2UgbGV0IHVzZXJzIHBhc3MgYHRydWVgIGFuZCBgZmFsc2VgIGV2ZW4gdGhvdWdoIHRlY2huaWNhbGx5XG4vLyB0aGVzZSBhcmVuJ3QgYm9vbGVhbiBhdHRyaWJ1dGVzICh0aGV5IGFyZSBjb2VyY2VkIHRvIHN0cmluZ3MpLlxuLy8gU2luY2UgdGhlc2UgYXJlIFNWRyBhdHRyaWJ1dGVzLCB0aGVpciBhdHRyaWJ1dGUgbmFtZXMgYXJlIGNhc2Utc2Vuc2l0aXZlLlxuXG5bJ2F1dG9SZXZlcnNlJywgJ2V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQnLCAnZm9jdXNhYmxlJywgJ3ByZXNlcnZlQWxwaGEnXS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIEJPT0xFQU5JU0hfU1RSSU5HLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIG5hbWUsIC8vIGF0dHJpYnV0ZU5hbWVcbiAgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTsgLy8gVGhlc2UgYXJlIEhUTUwgYm9vbGVhbiBhdHRyaWJ1dGVzLlxuXG5bJ2FsbG93RnVsbFNjcmVlbicsICdhc3luYycsIC8vIE5vdGU6IHRoZXJlIGlzIGEgc3BlY2lhbCBjYXNlIHRoYXQgcHJldmVudHMgaXQgZnJvbSBiZWluZyB3cml0dGVuIHRvIHRoZSBET01cbi8vIG9uIHRoZSBjbGllbnQgc2lkZSBiZWNhdXNlIHRoZSBicm93c2VycyBhcmUgaW5jb25zaXN0ZW50LiBJbnN0ZWFkIHdlIGNhbGwgZm9jdXMoKS5cbidhdXRvRm9jdXMnLCAnYXV0b1BsYXknLCAnY29udHJvbHMnLCAnZGVmYXVsdCcsICdkZWZlcicsICdkaXNhYmxlZCcsICdkaXNhYmxlUGljdHVyZUluUGljdHVyZScsICdkaXNhYmxlUmVtb3RlUGxheWJhY2snLCAnZm9ybU5vVmFsaWRhdGUnLCAnaGlkZGVuJywgJ2xvb3AnLCAnbm9Nb2R1bGUnLCAnbm9WYWxpZGF0ZScsICdvcGVuJywgJ3BsYXlzSW5saW5lJywgJ3JlYWRPbmx5JywgJ3JlcXVpcmVkJywgJ3JldmVyc2VkJywgJ3Njb3BlZCcsICdzZWFtbGVzcycsIC8vIE1pY3JvZGF0YVxuJ2l0ZW1TY29wZSddLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgQk9PTEVBTiwgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBuYW1lLnRvTG93ZXJDYXNlKCksIC8vIGF0dHJpYnV0ZU5hbWVcbiAgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTsgLy8gVGhlc2UgYXJlIHRoZSBmZXcgUmVhY3QgcHJvcHMgdGhhdCB3ZSBzZXQgYXMgRE9NIHByb3BlcnRpZXNcbi8vIHJhdGhlciB0aGFuIGF0dHJpYnV0ZXMuIFRoZXNlIGFyZSBhbGwgYm9vbGVhbnMuXG5cblsnY2hlY2tlZCcsIC8vIE5vdGU6IGBvcHRpb24uc2VsZWN0ZWRgIGlzIG5vdCB1cGRhdGVkIGlmIGBzZWxlY3QubXVsdGlwbGVgIGlzXG4vLyBkaXNhYmxlZCB3aXRoIGByZW1vdmVBdHRyaWJ1dGVgLiBXZSBoYXZlIHNwZWNpYWwgbG9naWMgZm9yIGhhbmRsaW5nIHRoaXMuXG4nbXVsdGlwbGUnLCAnbXV0ZWQnLCAnc2VsZWN0ZWQnIC8vIE5PVEU6IGlmIHlvdSBhZGQgYSBjYW1lbENhc2VkIHByb3AgdG8gdGhpcyBsaXN0LFxuLy8geW91J2xsIG5lZWQgdG8gc2V0IGF0dHJpYnV0ZU5hbWUgdG8gbmFtZS50b0xvd2VyQ2FzZSgpXG4vLyBpbnN0ZWFkIGluIHRoZSBhc3NpZ25tZW50IGJlbG93LlxuXS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIEJPT0xFQU4sIHRydWUsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBuYW1lLCAvLyBhdHRyaWJ1dGVOYW1lXG4gIG51bGwsIC8vIGF0dHJpYnV0ZU5hbWVzcGFjZVxuICBmYWxzZSwgLy8gc2FuaXRpemVVUkxcbiAgZmFsc2UpO1xufSk7IC8vIFRoZXNlIGFyZSBIVE1MIGF0dHJpYnV0ZXMgdGhhdCBhcmUgXCJvdmVybG9hZGVkIGJvb2xlYW5zXCI6IHRoZXkgYmVoYXZlIGxpa2Vcbi8vIGJvb2xlYW5zLCBidXQgY2FuIGFsc28gYWNjZXB0IGEgc3RyaW5nIHZhbHVlLlxuXG5bJ2NhcHR1cmUnLCAnZG93bmxvYWQnIC8vIE5PVEU6IGlmIHlvdSBhZGQgYSBjYW1lbENhc2VkIHByb3AgdG8gdGhpcyBsaXN0LFxuLy8geW91J2xsIG5lZWQgdG8gc2V0IGF0dHJpYnV0ZU5hbWUgdG8gbmFtZS50b0xvd2VyQ2FzZSgpXG4vLyBpbnN0ZWFkIGluIHRoZSBhc3NpZ25tZW50IGJlbG93LlxuXS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIE9WRVJMT0FERURfQk9PTEVBTiwgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBuYW1lLCAvLyBhdHRyaWJ1dGVOYW1lXG4gIG51bGwsIC8vIGF0dHJpYnV0ZU5hbWVzcGFjZVxuICBmYWxzZSwgLy8gc2FuaXRpemVVUkxcbiAgZmFsc2UpO1xufSk7IC8vIFRoZXNlIGFyZSBIVE1MIGF0dHJpYnV0ZXMgdGhhdCBtdXN0IGJlIHBvc2l0aXZlIG51bWJlcnMuXG5cblsnY29scycsICdyb3dzJywgJ3NpemUnLCAnc3BhbicgLy8gTk9URTogaWYgeW91IGFkZCBhIGNhbWVsQ2FzZWQgcHJvcCB0byB0aGlzIGxpc3QsXG4vLyB5b3UnbGwgbmVlZCB0byBzZXQgYXR0cmlidXRlTmFtZSB0byBuYW1lLnRvTG93ZXJDYXNlKClcbi8vIGluc3RlYWQgaW4gdGhlIGFzc2lnbm1lbnQgYmVsb3cuXG5dLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgUE9TSVRJVkVfTlVNRVJJQywgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBuYW1lLCAvLyBhdHRyaWJ1dGVOYW1lXG4gIG51bGwsIC8vIGF0dHJpYnV0ZU5hbWVzcGFjZVxuICBmYWxzZSwgLy8gc2FuaXRpemVVUkxcbiAgZmFsc2UpO1xufSk7IC8vIFRoZXNlIGFyZSBIVE1MIGF0dHJpYnV0ZXMgdGhhdCBtdXN0IGJlIG51bWJlcnMuXG5cblsncm93U3BhbicsICdzdGFydCddLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgTlVNRVJJQywgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBuYW1lLnRvTG93ZXJDYXNlKCksIC8vIGF0dHJpYnV0ZU5hbWVcbiAgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTtcbnZhciBDQU1FTElaRSA9IC9bXFwtXFw6XShbYS16XSkvZztcblxudmFyIGNhcGl0YWxpemUgPSBmdW5jdGlvbiAodG9rZW4pIHtcbiAgcmV0dXJuIHRva2VuWzFdLnRvVXBwZXJDYXNlKCk7XG59OyAvLyBUaGlzIGlzIGEgbGlzdCBvZiBhbGwgU1ZHIGF0dHJpYnV0ZXMgdGhhdCBuZWVkIHNwZWNpYWwgY2FzaW5nLCBuYW1lc3BhY2luZyxcbi8vIG9yIGJvb2xlYW4gdmFsdWUgYXNzaWdubWVudC4gUmVndWxhciBhdHRyaWJ1dGVzIHRoYXQganVzdCBhY2NlcHQgc3RyaW5nc1xuLy8gYW5kIGhhdmUgdGhlIHNhbWUgbmFtZXMgYXJlIG9taXR0ZWQsIGp1c3QgbGlrZSBpbiB0aGUgSFRNTCBhdHRyaWJ1dGUgZmlsdGVyLlxuLy8gU29tZSBvZiB0aGVzZSBhdHRyaWJ1dGVzIGNhbiBiZSBoYXJkIHRvIGZpbmQuIFRoaXMgbGlzdCB3YXMgY3JlYXRlZCBieVxuLy8gc2NyYXBpbmcgdGhlIE1ETiBkb2N1bWVudGF0aW9uLlxuXG5cblsnYWNjZW50LWhlaWdodCcsICdhbGlnbm1lbnQtYmFzZWxpbmUnLCAnYXJhYmljLWZvcm0nLCAnYmFzZWxpbmUtc2hpZnQnLCAnY2FwLWhlaWdodCcsICdjbGlwLXBhdGgnLCAnY2xpcC1ydWxlJywgJ2NvbG9yLWludGVycG9sYXRpb24nLCAnY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzJywgJ2NvbG9yLXByb2ZpbGUnLCAnY29sb3ItcmVuZGVyaW5nJywgJ2RvbWluYW50LWJhc2VsaW5lJywgJ2VuYWJsZS1iYWNrZ3JvdW5kJywgJ2ZpbGwtb3BhY2l0eScsICdmaWxsLXJ1bGUnLCAnZmxvb2QtY29sb3InLCAnZmxvb2Qtb3BhY2l0eScsICdmb250LWZhbWlseScsICdmb250LXNpemUnLCAnZm9udC1zaXplLWFkanVzdCcsICdmb250LXN0cmV0Y2gnLCAnZm9udC1zdHlsZScsICdmb250LXZhcmlhbnQnLCAnZm9udC13ZWlnaHQnLCAnZ2x5cGgtbmFtZScsICdnbHlwaC1vcmllbnRhdGlvbi1ob3Jpem9udGFsJywgJ2dseXBoLW9yaWVudGF0aW9uLXZlcnRpY2FsJywgJ2hvcml6LWFkdi14JywgJ2hvcml6LW9yaWdpbi14JywgJ2ltYWdlLXJlbmRlcmluZycsICdsZXR0ZXItc3BhY2luZycsICdsaWdodGluZy1jb2xvcicsICdtYXJrZXItZW5kJywgJ21hcmtlci1taWQnLCAnbWFya2VyLXN0YXJ0JywgJ292ZXJsaW5lLXBvc2l0aW9uJywgJ292ZXJsaW5lLXRoaWNrbmVzcycsICdwYWludC1vcmRlcicsICdwYW5vc2UtMScsICdwb2ludGVyLWV2ZW50cycsICdyZW5kZXJpbmctaW50ZW50JywgJ3NoYXBlLXJlbmRlcmluZycsICdzdG9wLWNvbG9yJywgJ3N0b3Atb3BhY2l0eScsICdzdHJpa2V0aHJvdWdoLXBvc2l0aW9uJywgJ3N0cmlrZXRocm91Z2gtdGhpY2tuZXNzJywgJ3N0cm9rZS1kYXNoYXJyYXknLCAnc3Ryb2tlLWRhc2hvZmZzZXQnLCAnc3Ryb2tlLWxpbmVjYXAnLCAnc3Ryb2tlLWxpbmVqb2luJywgJ3N0cm9rZS1taXRlcmxpbWl0JywgJ3N0cm9rZS1vcGFjaXR5JywgJ3N0cm9rZS13aWR0aCcsICd0ZXh0LWFuY2hvcicsICd0ZXh0LWRlY29yYXRpb24nLCAndGV4dC1yZW5kZXJpbmcnLCAndW5kZXJsaW5lLXBvc2l0aW9uJywgJ3VuZGVybGluZS10aGlja25lc3MnLCAndW5pY29kZS1iaWRpJywgJ3VuaWNvZGUtcmFuZ2UnLCAndW5pdHMtcGVyLWVtJywgJ3YtYWxwaGFiZXRpYycsICd2LWhhbmdpbmcnLCAndi1pZGVvZ3JhcGhpYycsICd2LW1hdGhlbWF0aWNhbCcsICd2ZWN0b3ItZWZmZWN0JywgJ3ZlcnQtYWR2LXknLCAndmVydC1vcmlnaW4teCcsICd2ZXJ0LW9yaWdpbi15JywgJ3dvcmQtc3BhY2luZycsICd3cml0aW5nLW1vZGUnLCAneG1sbnM6eGxpbmsnLCAneC1oZWlnaHQnIC8vIE5PVEU6IGlmIHlvdSBhZGQgYSBjYW1lbENhc2VkIHByb3AgdG8gdGhpcyBsaXN0LFxuLy8geW91J2xsIG5lZWQgdG8gc2V0IGF0dHJpYnV0ZU5hbWUgdG8gbmFtZS50b0xvd2VyQ2FzZSgpXG4vLyBpbnN0ZWFkIGluIHRoZSBhc3NpZ25tZW50IGJlbG93LlxuXS5mb3JFYWNoKGZ1bmN0aW9uIChhdHRyaWJ1dGVOYW1lKSB7XG4gIHZhciBuYW1lID0gYXR0cmlidXRlTmFtZS5yZXBsYWNlKENBTUVMSVpFLCBjYXBpdGFsaXplKTtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgU1RSSU5HLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIGF0dHJpYnV0ZU5hbWUsIG51bGwsIC8vIGF0dHJpYnV0ZU5hbWVzcGFjZVxuICBmYWxzZSwgLy8gc2FuaXRpemVVUkxcbiAgZmFsc2UpO1xufSk7IC8vIFN0cmluZyBTVkcgYXR0cmlidXRlcyB3aXRoIHRoZSB4bGluayBuYW1lc3BhY2UuXG5cblsneGxpbms6YWN0dWF0ZScsICd4bGluazphcmNyb2xlJywgJ3hsaW5rOnJvbGUnLCAneGxpbms6c2hvdycsICd4bGluazp0aXRsZScsICd4bGluazp0eXBlJyAvLyBOT1RFOiBpZiB5b3UgYWRkIGEgY2FtZWxDYXNlZCBwcm9wIHRvIHRoaXMgbGlzdCxcbi8vIHlvdSdsbCBuZWVkIHRvIHNldCBhdHRyaWJ1dGVOYW1lIHRvIG5hbWUudG9Mb3dlckNhc2UoKVxuLy8gaW5zdGVhZCBpbiB0aGUgYXNzaWdubWVudCBiZWxvdy5cbl0uZm9yRWFjaChmdW5jdGlvbiAoYXR0cmlidXRlTmFtZSkge1xuICB2YXIgbmFtZSA9IGF0dHJpYnV0ZU5hbWUucmVwbGFjZShDQU1FTElaRSwgY2FwaXRhbGl6ZSk7XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIFNUUklORywgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBhdHRyaWJ1dGVOYW1lLCAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluaycsIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTsgLy8gU3RyaW5nIFNWRyBhdHRyaWJ1dGVzIHdpdGggdGhlIHhtbCBuYW1lc3BhY2UuXG5cblsneG1sOmJhc2UnLCAneG1sOmxhbmcnLCAneG1sOnNwYWNlJyAvLyBOT1RFOiBpZiB5b3UgYWRkIGEgY2FtZWxDYXNlZCBwcm9wIHRvIHRoaXMgbGlzdCxcbi8vIHlvdSdsbCBuZWVkIHRvIHNldCBhdHRyaWJ1dGVOYW1lIHRvIG5hbWUudG9Mb3dlckNhc2UoKVxuLy8gaW5zdGVhZCBpbiB0aGUgYXNzaWdubWVudCBiZWxvdy5cbl0uZm9yRWFjaChmdW5jdGlvbiAoYXR0cmlidXRlTmFtZSkge1xuICB2YXIgbmFtZSA9IGF0dHJpYnV0ZU5hbWUucmVwbGFjZShDQU1FTElaRSwgY2FwaXRhbGl6ZSk7XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIFNUUklORywgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBhdHRyaWJ1dGVOYW1lLCAnaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlJywgZmFsc2UsIC8vIHNhbml0aXplVVJMXG4gIGZhbHNlKTtcbn0pOyAvLyBUaGVzZSBhdHRyaWJ1dGUgZXhpc3RzIGJvdGggaW4gSFRNTCBhbmQgU1ZHLlxuLy8gVGhlIGF0dHJpYnV0ZSBuYW1lIGlzIGNhc2Utc2Vuc2l0aXZlIGluIFNWRyBzbyB3ZSBjYW4ndCBqdXN0IHVzZVxuLy8gdGhlIFJlYWN0IG5hbWUgbGlrZSB3ZSBkbyBmb3IgYXR0cmlidXRlcyB0aGF0IGV4aXN0IG9ubHkgaW4gSFRNTC5cblxuWyd0YWJJbmRleCcsICdjcm9zc09yaWdpbiddLmZvckVhY2goZnVuY3Rpb24gKGF0dHJpYnV0ZU5hbWUpIHtcbiAgcHJvcGVydGllc1thdHRyaWJ1dGVOYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQoYXR0cmlidXRlTmFtZSwgU1RSSU5HLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIGF0dHJpYnV0ZU5hbWUudG9Mb3dlckNhc2UoKSwgLy8gYXR0cmlidXRlTmFtZVxuICBudWxsLCAvLyBhdHRyaWJ1dGVOYW1lc3BhY2VcbiAgZmFsc2UsIC8vIHNhbml0aXplVVJMXG4gIGZhbHNlKTtcbn0pOyAvLyBUaGVzZSBhdHRyaWJ1dGVzIGFjY2VwdCBVUkxzLiBUaGVzZSBtdXN0IG5vdCBhbGxvdyBqYXZhc2NyaXB0OiBVUkxTLlxuLy8gVGhlc2Ugd2lsbCBhbHNvIG5lZWQgdG8gYWNjZXB0IFRydXN0ZWQgVHlwZXMgb2JqZWN0IGluIHRoZSBmdXR1cmUuXG5cbnZhciB4bGlua0hyZWYgPSAneGxpbmtIcmVmJztcbnByb3BlcnRpZXNbeGxpbmtIcmVmXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQoJ3hsaW5rSHJlZicsIFNUUklORywgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuJ3hsaW5rOmhyZWYnLCAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluaycsIHRydWUsIC8vIHNhbml0aXplVVJMXG5mYWxzZSk7XG5bJ3NyYycsICdocmVmJywgJ2FjdGlvbicsICdmb3JtQWN0aW9uJ10uZm9yRWFjaChmdW5jdGlvbiAoYXR0cmlidXRlTmFtZSkge1xuICBwcm9wZXJ0aWVzW2F0dHJpYnV0ZU5hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChhdHRyaWJ1dGVOYW1lLCBTVFJJTkcsIGZhbHNlLCAvLyBtdXN0VXNlUHJvcGVydHlcbiAgYXR0cmlidXRlTmFtZS50b0xvd2VyQ2FzZSgpLCAvLyBhdHRyaWJ1dGVOYW1lXG4gIG51bGwsIC8vIGF0dHJpYnV0ZU5hbWVzcGFjZVxuICB0cnVlLCAvLyBzYW5pdGl6ZVVSTFxuICB0cnVlKTtcbn0pO1xuXG4vLyBhbmQgYW55IG5ld2xpbmUgb3IgdGFiIGFyZSBmaWx0ZXJlZCBvdXQgYXMgaWYgdGhleSdyZSBub3QgcGFydCBvZiB0aGUgVVJMLlxuLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyN1cmwtcGFyc2luZ1xuLy8gVGFiIG9yIG5ld2xpbmUgYXJlIGRlZmluZWQgYXMgXFxyXFxuXFx0OlxuLy8gaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI2FzY2lpLXRhYi1vci1uZXdsaW5lXG4vLyBBIEMwIGNvbnRyb2wgaXMgYSBjb2RlIHBvaW50IGluIHRoZSByYW5nZSBcXHUwMDAwIE5VTEwgdG8gXFx1MDAxRlxuLy8gSU5GT1JNQVRJT04gU0VQQVJBVE9SIE9ORSwgaW5jbHVzaXZlOlxuLy8gaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI2MwLWNvbnRyb2wtb3Itc3BhY2VcblxuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuXG52YXIgaXNKYXZhU2NyaXB0UHJvdG9jb2wgPSAvXltcXHUwMDAwLVxcdTAwMUYgXSpqW1xcclxcblxcdF0qYVtcXHJcXG5cXHRdKnZbXFxyXFxuXFx0XSphW1xcclxcblxcdF0qc1tcXHJcXG5cXHRdKmNbXFxyXFxuXFx0XSpyW1xcclxcblxcdF0qaVtcXHJcXG5cXHRdKnBbXFxyXFxuXFx0XSp0W1xcclxcblxcdF0qXFw6L2k7XG52YXIgZGlkV2FybiA9IGZhbHNlO1xuXG5mdW5jdGlvbiBzYW5pdGl6ZVVSTCh1cmwpIHtcbiAge1xuICAgIGlmICghZGlkV2FybiAmJiBpc0phdmFTY3JpcHRQcm90b2NvbC50ZXN0KHVybCkpIHtcbiAgICAgIGRpZFdhcm4gPSB0cnVlO1xuXG4gICAgICBlcnJvcignQSBmdXR1cmUgdmVyc2lvbiBvZiBSZWFjdCB3aWxsIGJsb2NrIGphdmFzY3JpcHQ6IFVSTHMgYXMgYSBzZWN1cml0eSBwcmVjYXV0aW9uLiAnICsgJ1VzZSBldmVudCBoYW5kbGVycyBpbnN0ZWFkIGlmIHlvdSBjYW4uIElmIHlvdSBuZWVkIHRvIGdlbmVyYXRlIHVuc2FmZSBIVE1MIHRyeSAnICsgJ3VzaW5nIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIGluc3RlYWQuIFJlYWN0IHdhcyBwYXNzZWQgJXMuJywgSlNPTi5zdHJpbmdpZnkodXJsKSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogR2V0IHRoZSB2YWx1ZSBmb3IgYSBwcm9wZXJ0eSBvbiBhIG5vZGUuIE9ubHkgdXNlZCBpbiBERVYgZm9yIFNTUiB2YWxpZGF0aW9uLlxuICogVGhlIFwiZXhwZWN0ZWRcIiBhcmd1bWVudCBpcyB1c2VkIGFzIGEgaGludCBvZiB3aGF0IHRoZSBleHBlY3RlZCB2YWx1ZSBpcy5cbiAqIFNvbWUgcHJvcGVydGllcyBoYXZlIG11bHRpcGxlIGVxdWl2YWxlbnQgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBnZXRWYWx1ZUZvclByb3BlcnR5KG5vZGUsIG5hbWUsIGV4cGVjdGVkLCBwcm9wZXJ0eUluZm8pIHtcbiAge1xuICAgIGlmIChwcm9wZXJ0eUluZm8ubXVzdFVzZVByb3BlcnR5KSB7XG4gICAgICB2YXIgcHJvcGVydHlOYW1lID0gcHJvcGVydHlJbmZvLnByb3BlcnR5TmFtZTtcbiAgICAgIHJldHVybiBub2RlW3Byb3BlcnR5TmFtZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICggcHJvcGVydHlJbmZvLnNhbml0aXplVVJMKSB7XG4gICAgICAgIC8vIElmIHdlIGhhdmVuJ3QgZnVsbHkgZGlzYWJsZWQgamF2YXNjcmlwdDogVVJMcywgYW5kIGlmXG4gICAgICAgIC8vIHRoZSBoeWRyYXRpb24gaXMgc3VjY2Vzc2Z1bCBvZiBhIGphdmFzY3JpcHQ6IFVSTCwgd2VcbiAgICAgICAgLy8gc3RpbGwgd2FudCB0byB3YXJuIG9uIHRoZSBjbGllbnQuXG4gICAgICAgIHNhbml0aXplVVJMKCcnICsgZXhwZWN0ZWQpO1xuICAgICAgfVxuXG4gICAgICB2YXIgYXR0cmlidXRlTmFtZSA9IHByb3BlcnR5SW5mby5hdHRyaWJ1dGVOYW1lO1xuICAgICAgdmFyIHN0cmluZ1ZhbHVlID0gbnVsbDtcblxuICAgICAgaWYgKHByb3BlcnR5SW5mby50eXBlID09PSBPVkVSTE9BREVEX0JPT0xFQU4pIHtcbiAgICAgICAgaWYgKG5vZGUuaGFzQXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpKSB7XG4gICAgICAgICAgdmFyIHZhbHVlID0gbm9kZS5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSk7XG5cbiAgICAgICAgICBpZiAodmFsdWUgPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoc2hvdWxkUmVtb3ZlQXR0cmlidXRlKG5hbWUsIGV4cGVjdGVkLCBwcm9wZXJ0eUluZm8sIGZhbHNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh2YWx1ZSA9PT0gJycgKyBleHBlY3RlZCkge1xuICAgICAgICAgICAgcmV0dXJuIGV4cGVjdGVkO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChub2RlLmhhc0F0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSkge1xuICAgICAgICBpZiAoc2hvdWxkUmVtb3ZlQXR0cmlidXRlKG5hbWUsIGV4cGVjdGVkLCBwcm9wZXJ0eUluZm8sIGZhbHNlKSkge1xuICAgICAgICAgIC8vIFdlIGhhZCBhbiBhdHRyaWJ1dGUgYnV0IHNob3VsZG4ndCBoYXZlIGhhZCBvbmUsIHNvIHJlYWQgaXRcbiAgICAgICAgICAvLyBmb3IgdGhlIGVycm9yIG1lc3NhZ2UuXG4gICAgICAgICAgcmV0dXJuIG5vZGUuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb3BlcnR5SW5mby50eXBlID09PSBCT09MRUFOKSB7XG4gICAgICAgICAgLy8gSWYgdGhpcyB3YXMgYSBib29sZWFuLCBpdCBkb2Vzbid0IG1hdHRlciB3aGF0IHRoZSB2YWx1ZSBpc1xuICAgICAgICAgIC8vIHRoZSBmYWN0IHRoYXQgd2UgaGF2ZSBpdCBpcyB0aGUgc2FtZSBhcyB0aGUgZXhwZWN0ZWQuXG4gICAgICAgICAgcmV0dXJuIGV4cGVjdGVkO1xuICAgICAgICB9IC8vIEV2ZW4gaWYgdGhpcyBwcm9wZXJ0eSB1c2VzIGEgbmFtZXNwYWNlIHdlIHVzZSBnZXRBdHRyaWJ1dGVcbiAgICAgICAgLy8gYmVjYXVzZSB3ZSBhc3N1bWUgaXRzIG5hbWVzcGFjZWQgbmFtZSBpcyB0aGUgc2FtZSBhcyBvdXIgY29uZmlnLlxuICAgICAgICAvLyBUbyB1c2UgZ2V0QXR0cmlidXRlTlMgd2UgbmVlZCB0aGUgbG9jYWwgbmFtZSB3aGljaCB3ZSBkb24ndCBoYXZlXG4gICAgICAgIC8vIGluIG91ciBjb25maWcgYXRtLlxuXG5cbiAgICAgICAgc3RyaW5nVmFsdWUgPSBub2RlLmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNob3VsZFJlbW92ZUF0dHJpYnV0ZShuYW1lLCBleHBlY3RlZCwgcHJvcGVydHlJbmZvLCBmYWxzZSkpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZ1ZhbHVlID09PSBudWxsID8gZXhwZWN0ZWQgOiBzdHJpbmdWYWx1ZTtcbiAgICAgIH0gZWxzZSBpZiAoc3RyaW5nVmFsdWUgPT09ICcnICsgZXhwZWN0ZWQpIHtcbiAgICAgICAgcmV0dXJuIGV4cGVjdGVkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZ1ZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBHZXQgdGhlIHZhbHVlIGZvciBhIGF0dHJpYnV0ZSBvbiBhIG5vZGUuIE9ubHkgdXNlZCBpbiBERVYgZm9yIFNTUiB2YWxpZGF0aW9uLlxuICogVGhlIHRoaXJkIGFyZ3VtZW50IGlzIHVzZWQgYXMgYSBoaW50IG9mIHdoYXQgdGhlIGV4cGVjdGVkIHZhbHVlIGlzLiBTb21lXG4gKiBhdHRyaWJ1dGVzIGhhdmUgbXVsdGlwbGUgZXF1aXZhbGVudCB2YWx1ZXMuXG4gKi9cblxuZnVuY3Rpb24gZ2V0VmFsdWVGb3JBdHRyaWJ1dGUobm9kZSwgbmFtZSwgZXhwZWN0ZWQpIHtcbiAge1xuICAgIGlmICghaXNBdHRyaWJ1dGVOYW1lU2FmZShuYW1lKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gSWYgdGhlIG9iamVjdCBpcyBhbiBvcGFxdWUgcmVmZXJlbmNlIElELCBpdCdzIGV4cGVjdGVkIHRoYXRcbiAgICAvLyB0aGUgbmV4dCBwcm9wIGlzIGRpZmZlcmVudCB0aGFuIHRoZSBzZXJ2ZXIgdmFsdWUsIHNvIGp1c3QgcmV0dXJuXG4gICAgLy8gZXhwZWN0ZWRcblxuXG4gICAgaWYgKGlzT3BhcXVlSHlkcmF0aW5nT2JqZWN0KGV4cGVjdGVkKSkge1xuICAgICAgcmV0dXJuIGV4cGVjdGVkO1xuICAgIH1cblxuICAgIGlmICghbm9kZS5oYXNBdHRyaWJ1dGUobmFtZSkpIHtcbiAgICAgIHJldHVybiBleHBlY3RlZCA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgdmFsdWUgPSBub2RlLmdldEF0dHJpYnV0ZShuYW1lKTtcblxuICAgIGlmICh2YWx1ZSA9PT0gJycgKyBleHBlY3RlZCkge1xuICAgICAgcmV0dXJuIGV4cGVjdGVkO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufVxuLyoqXG4gKiBTZXRzIHRoZSB2YWx1ZSBmb3IgYSBwcm9wZXJ0eSBvbiBhIG5vZGUuXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fSBub2RlXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICovXG5cbmZ1bmN0aW9uIHNldFZhbHVlRm9yUHJvcGVydHkobm9kZSwgbmFtZSwgdmFsdWUsIGlzQ3VzdG9tQ29tcG9uZW50VGFnKSB7XG4gIHZhciBwcm9wZXJ0eUluZm8gPSBnZXRQcm9wZXJ0eUluZm8obmFtZSk7XG5cbiAgaWYgKHNob3VsZElnbm9yZUF0dHJpYnV0ZShuYW1lLCBwcm9wZXJ0eUluZm8sIGlzQ3VzdG9tQ29tcG9uZW50VGFnKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChzaG91bGRSZW1vdmVBdHRyaWJ1dGUobmFtZSwgdmFsdWUsIHByb3BlcnR5SW5mbywgaXNDdXN0b21Db21wb25lbnRUYWcpKSB7XG4gICAgdmFsdWUgPSBudWxsO1xuICB9IC8vIElmIHRoZSBwcm9wIGlzbid0IGluIHRoZSBzcGVjaWFsIGxpc3QsIHRyZWF0IGl0IGFzIGEgc2ltcGxlIGF0dHJpYnV0ZS5cblxuXG4gIGlmIChpc0N1c3RvbUNvbXBvbmVudFRhZyB8fCBwcm9wZXJ0eUluZm8gPT09IG51bGwpIHtcbiAgICBpZiAoaXNBdHRyaWJ1dGVOYW1lU2FmZShuYW1lKSkge1xuICAgICAgdmFyIF9hdHRyaWJ1dGVOYW1lID0gbmFtZTtcblxuICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKF9hdHRyaWJ1dGVOYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKF9hdHRyaWJ1dGVOYW1lLCAgJycgKyB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIG11c3RVc2VQcm9wZXJ0eSA9IHByb3BlcnR5SW5mby5tdXN0VXNlUHJvcGVydHk7XG5cbiAgaWYgKG11c3RVc2VQcm9wZXJ0eSkge1xuICAgIHZhciBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eUluZm8ucHJvcGVydHlOYW1lO1xuXG4gICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICB2YXIgdHlwZSA9IHByb3BlcnR5SW5mby50eXBlO1xuICAgICAgbm9kZVtwcm9wZXJ0eU5hbWVdID0gdHlwZSA9PT0gQk9PTEVBTiA/IGZhbHNlIDogJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENvbnRyYXJ5IHRvIGBzZXRBdHRyaWJ1dGVgLCBvYmplY3QgcHJvcGVydGllcyBhcmUgcHJvcGVybHlcbiAgICAgIC8vIGB0b1N0cmluZ2BlZCBieSBJRTgvOS5cbiAgICAgIG5vZGVbcHJvcGVydHlOYW1lXSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybjtcbiAgfSAvLyBUaGUgcmVzdCBhcmUgdHJlYXRlZCBhcyBhdHRyaWJ1dGVzIHdpdGggc3BlY2lhbCBjYXNlcy5cblxuXG4gIHZhciBhdHRyaWJ1dGVOYW1lID0gcHJvcGVydHlJbmZvLmF0dHJpYnV0ZU5hbWUsXG4gICAgICBhdHRyaWJ1dGVOYW1lc3BhY2UgPSBwcm9wZXJ0eUluZm8uYXR0cmlidXRlTmFtZXNwYWNlO1xuXG4gIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpO1xuICB9IGVsc2Uge1xuICAgIHZhciBfdHlwZSA9IHByb3BlcnR5SW5mby50eXBlO1xuICAgIHZhciBhdHRyaWJ1dGVWYWx1ZTtcblxuICAgIGlmIChfdHlwZSA9PT0gQk9PTEVBTiB8fCBfdHlwZSA9PT0gT1ZFUkxPQURFRF9CT09MRUFOICYmIHZhbHVlID09PSB0cnVlKSB7XG4gICAgICAvLyBJZiBhdHRyaWJ1dGUgdHlwZSBpcyBib29sZWFuLCB3ZSBrbm93IGZvciBzdXJlIGl0IHdvbid0IGJlIGFuIGV4ZWN1dGlvbiBzaW5rXG4gICAgICAvLyBhbmQgd2Ugd29uJ3QgcmVxdWlyZSBUcnVzdGVkIFR5cGUgaGVyZS5cbiAgICAgIGF0dHJpYnV0ZVZhbHVlID0gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGBzZXRBdHRyaWJ1dGVgIHdpdGggb2JqZWN0cyBiZWNvbWVzIG9ubHkgYFtvYmplY3RdYCBpbiBJRTgvOSxcbiAgICAgIC8vICgnJyArIHZhbHVlKSBtYWtlcyBpdCBvdXRwdXQgdGhlIGNvcnJlY3QgdG9TdHJpbmcoKS12YWx1ZS5cbiAgICAgIHtcbiAgICAgICAgYXR0cmlidXRlVmFsdWUgPSAnJyArIHZhbHVlO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvcGVydHlJbmZvLnNhbml0aXplVVJMKSB7XG4gICAgICAgIHNhbml0aXplVVJMKGF0dHJpYnV0ZVZhbHVlLnRvU3RyaW5nKCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhdHRyaWJ1dGVOYW1lc3BhY2UpIHtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlTlMoYXR0cmlidXRlTmFtZXNwYWNlLCBhdHRyaWJ1dGVOYW1lLCBhdHRyaWJ1dGVWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUsIGF0dHJpYnV0ZVZhbHVlKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gQVRURU5USU9OXG4vLyBXaGVuIGFkZGluZyBuZXcgc3ltYm9scyB0byB0aGlzIGZpbGUsXG4vLyBQbGVhc2UgY29uc2lkZXIgYWxzbyBhZGRpbmcgdG8gJ3JlYWN0LWRldnRvb2xzLXNoYXJlZC9zcmMvYmFja2VuZC9SZWFjdFN5bWJvbHMnXG4vLyBUaGUgU3ltYm9sIHVzZWQgdG8gdGFnIHRoZSBSZWFjdEVsZW1lbnQtbGlrZSB0eXBlcy4gSWYgdGhlcmUgaXMgbm8gbmF0aXZlIFN5bWJvbFxuLy8gbm9yIHBvbHlmaWxsLCB0aGVuIGEgcGxhaW4gbnVtYmVyIGlzIHVzZWQgZm9yIHBlcmZvcm1hbmNlLlxudmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IDB4ZWFjNztcbnZhciBSRUFDVF9QT1JUQUxfVFlQRSA9IDB4ZWFjYTtcbnZhciBSRUFDVF9GUkFHTUVOVF9UWVBFID0gMHhlYWNiO1xudmFyIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSAweGVhY2M7XG52YXIgUkVBQ1RfUFJPRklMRVJfVFlQRSA9IDB4ZWFkMjtcbnZhciBSRUFDVF9QUk9WSURFUl9UWVBFID0gMHhlYWNkO1xudmFyIFJFQUNUX0NPTlRFWFRfVFlQRSA9IDB4ZWFjZTtcbnZhciBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gMHhlYWQwO1xudmFyIFJFQUNUX1NVU1BFTlNFX1RZUEUgPSAweGVhZDE7XG52YXIgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFID0gMHhlYWQ4O1xudmFyIFJFQUNUX01FTU9fVFlQRSA9IDB4ZWFkMztcbnZhciBSRUFDVF9MQVpZX1RZUEUgPSAweGVhZDQ7XG52YXIgUkVBQ1RfQkxPQ0tfVFlQRSA9IDB4ZWFkOTtcbnZhciBSRUFDVF9TRVJWRVJfQkxPQ0tfVFlQRSA9IDB4ZWFkYTtcbnZhciBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFID0gMHhlYWQ1O1xudmFyIFJFQUNUX1NDT1BFX1RZUEUgPSAweGVhZDc7XG52YXIgUkVBQ1RfT1BBUVVFX0lEX1RZUEUgPSAweGVhZTA7XG52YXIgUkVBQ1RfREVCVUdfVFJBQ0lOR19NT0RFX1RZUEUgPSAweGVhZTE7XG52YXIgUkVBQ1RfT0ZGU0NSRUVOX1RZUEUgPSAweGVhZTI7XG52YXIgUkVBQ1RfTEVHQUNZX0hJRERFTl9UWVBFID0gMHhlYWUzO1xuXG5pZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuZm9yKSB7XG4gIHZhciBzeW1ib2xGb3IgPSBTeW1ib2wuZm9yO1xuICBSRUFDVF9FTEVNRU5UX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmVsZW1lbnQnKTtcbiAgUkVBQ1RfUE9SVEFMX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnBvcnRhbCcpO1xuICBSRUFDVF9GUkFHTUVOVF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5mcmFnbWVudCcpO1xuICBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5zdHJpY3RfbW9kZScpO1xuICBSRUFDVF9QUk9GSUxFUl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5wcm9maWxlcicpO1xuICBSRUFDVF9QUk9WSURFUl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5wcm92aWRlcicpO1xuICBSRUFDVF9DT05URVhUX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmNvbnRleHQnKTtcbiAgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuZm9yd2FyZF9yZWYnKTtcbiAgUkVBQ1RfU1VTUEVOU0VfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Quc3VzcGVuc2UnKTtcbiAgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5zdXNwZW5zZV9saXN0Jyk7XG4gIFJFQUNUX01FTU9fVFlQRSA9IHN5bWJvbEZvcigncmVhY3QubWVtbycpO1xuICBSRUFDVF9MQVpZX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmxhenknKTtcbiAgUkVBQ1RfQkxPQ0tfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuYmxvY2snKTtcbiAgUkVBQ1RfU0VSVkVSX0JMT0NLX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnNlcnZlci5ibG9jaycpO1xuICBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5mdW5kYW1lbnRhbCcpO1xuICBSRUFDVF9TQ09QRV9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5zY29wZScpO1xuICBSRUFDVF9PUEFRVUVfSURfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Qub3BhcXVlLmlkJyk7XG4gIFJFQUNUX0RFQlVHX1RSQUNJTkdfTU9ERV9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5kZWJ1Z190cmFjZV9tb2RlJyk7XG4gIFJFQUNUX09GRlNDUkVFTl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5vZmZzY3JlZW4nKTtcbiAgUkVBQ1RfTEVHQUNZX0hJRERFTl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5sZWdhY3lfaGlkZGVuJyk7XG59XG5cbnZhciBNQVlCRV9JVEVSQVRPUl9TWU1CT0wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5pdGVyYXRvcjtcbnZhciBGQVVYX0lURVJBVE9SX1NZTUJPTCA9ICdAQGl0ZXJhdG9yJztcbmZ1bmN0aW9uIGdldEl0ZXJhdG9yRm4obWF5YmVJdGVyYWJsZSkge1xuICBpZiAobWF5YmVJdGVyYWJsZSA9PT0gbnVsbCB8fCB0eXBlb2YgbWF5YmVJdGVyYWJsZSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBtYXliZUl0ZXJhdG9yID0gTUFZQkVfSVRFUkFUT1JfU1lNQk9MICYmIG1heWJlSXRlcmFibGVbTUFZQkVfSVRFUkFUT1JfU1lNQk9MXSB8fCBtYXliZUl0ZXJhYmxlW0ZBVVhfSVRFUkFUT1JfU1lNQk9MXTtcblxuICBpZiAodHlwZW9mIG1heWJlSXRlcmF0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gbWF5YmVJdGVyYXRvcjtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vLyBIZWxwZXJzIHRvIHBhdGNoIGNvbnNvbGUubG9ncyB0byBhdm9pZCBsb2dnaW5nIGR1cmluZyBzaWRlLWVmZmVjdCBmcmVlXG4vLyByZXBsYXlpbmcgb24gcmVuZGVyIGZ1bmN0aW9uLiBUaGlzIGN1cnJlbnRseSBvbmx5IHBhdGNoZXMgdGhlIG9iamVjdFxuLy8gbGF6aWx5IHdoaWNoIHdvbid0IGNvdmVyIGlmIHRoZSBsb2cgZnVuY3Rpb24gd2FzIGV4dHJhY3RlZCBlYWdlcmx5LlxuLy8gV2UgY291bGQgYWxzbyBlYWdlcmx5IHBhdGNoIHRoZSBtZXRob2QuXG52YXIgZGlzYWJsZWREZXB0aCA9IDA7XG52YXIgcHJldkxvZztcbnZhciBwcmV2SW5mbztcbnZhciBwcmV2V2FybjtcbnZhciBwcmV2RXJyb3I7XG52YXIgcHJldkdyb3VwO1xudmFyIHByZXZHcm91cENvbGxhcHNlZDtcbnZhciBwcmV2R3JvdXBFbmQ7XG5cbmZ1bmN0aW9uIGRpc2FibGVkTG9nKCkge31cblxuZGlzYWJsZWRMb2cuX19yZWFjdERpc2FibGVkTG9nID0gdHJ1ZTtcbmZ1bmN0aW9uIGRpc2FibGVMb2dzKCkge1xuICB7XG4gICAgaWYgKGRpc2FibGVkRGVwdGggPT09IDApIHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgICAgcHJldkxvZyA9IGNvbnNvbGUubG9nO1xuICAgICAgcHJldkluZm8gPSBjb25zb2xlLmluZm87XG4gICAgICBwcmV2V2FybiA9IGNvbnNvbGUud2FybjtcbiAgICAgIHByZXZFcnJvciA9IGNvbnNvbGUuZXJyb3I7XG4gICAgICBwcmV2R3JvdXAgPSBjb25zb2xlLmdyb3VwO1xuICAgICAgcHJldkdyb3VwQ29sbGFwc2VkID0gY29uc29sZS5ncm91cENvbGxhcHNlZDtcbiAgICAgIHByZXZHcm91cEVuZCA9IGNvbnNvbGUuZ3JvdXBFbmQ7IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTkwOTlcblxuICAgICAgdmFyIHByb3BzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIHZhbHVlOiBkaXNhYmxlZExvZyxcbiAgICAgICAgd3JpdGFibGU6IHRydWVcbiAgICAgIH07IC8vICRGbG93Rml4TWUgRmxvdyB0aGlua3MgY29uc29sZSBpcyBpbW11dGFibGUuXG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvbnNvbGUsIHtcbiAgICAgICAgaW5mbzogcHJvcHMsXG4gICAgICAgIGxvZzogcHJvcHMsXG4gICAgICAgIHdhcm46IHByb3BzLFxuICAgICAgICBlcnJvcjogcHJvcHMsXG4gICAgICAgIGdyb3VwOiBwcm9wcyxcbiAgICAgICAgZ3JvdXBDb2xsYXBzZWQ6IHByb3BzLFxuICAgICAgICBncm91cEVuZDogcHJvcHNcbiAgICAgIH0pO1xuICAgICAgLyogZXNsaW50LWVuYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICB9XG5cbiAgICBkaXNhYmxlZERlcHRoKys7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlZW5hYmxlTG9ncygpIHtcbiAge1xuICAgIGRpc2FibGVkRGVwdGgtLTtcblxuICAgIGlmIChkaXNhYmxlZERlcHRoID09PSAwKSB7XG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICAgIHZhciBwcm9wcyA9IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZVxuICAgICAgfTsgLy8gJEZsb3dGaXhNZSBGbG93IHRoaW5rcyBjb25zb2xlIGlzIGltbXV0YWJsZS5cblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY29uc29sZSwge1xuICAgICAgICBsb2c6IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZMb2dcbiAgICAgICAgfSksXG4gICAgICAgIGluZm86IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZJbmZvXG4gICAgICAgIH0pLFxuICAgICAgICB3YXJuOiBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2V2FyblxuICAgICAgICB9KSxcbiAgICAgICAgZXJyb3I6IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZFcnJvclxuICAgICAgICB9KSxcbiAgICAgICAgZ3JvdXA6IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZHcm91cFxuICAgICAgICB9KSxcbiAgICAgICAgZ3JvdXBDb2xsYXBzZWQ6IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZHcm91cENvbGxhcHNlZFxuICAgICAgICB9KSxcbiAgICAgICAgZ3JvdXBFbmQ6IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZHcm91cEVuZFxuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgIH1cblxuICAgIGlmIChkaXNhYmxlZERlcHRoIDwgMCkge1xuICAgICAgZXJyb3IoJ2Rpc2FibGVkRGVwdGggZmVsbCBiZWxvdyB6ZXJvLiAnICsgJ1RoaXMgaXMgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICAgIH1cbiAgfVxufVxuXG52YXIgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudERpc3BhdGNoZXI7XG52YXIgcHJlZml4O1xuZnVuY3Rpb24gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUobmFtZSwgc291cmNlLCBvd25lckZuKSB7XG4gIHtcbiAgICBpZiAocHJlZml4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIEV4dHJhY3QgdGhlIFZNIHNwZWNpZmljIHByZWZpeCB1c2VkIGJ5IGVhY2ggbGluZS5cbiAgICAgIHRyeSB7XG4gICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgIHZhciBtYXRjaCA9IHguc3RhY2sudHJpbSgpLm1hdGNoKC9cXG4oICooYXQgKT8pLyk7XG4gICAgICAgIHByZWZpeCA9IG1hdGNoICYmIG1hdGNoWzFdIHx8ICcnO1xuICAgICAgfVxuICAgIH0gLy8gV2UgdXNlIHRoZSBwcmVmaXggdG8gZW5zdXJlIG91ciBzdGFja3MgbGluZSB1cCB3aXRoIG5hdGl2ZSBzdGFjayBmcmFtZXMuXG5cblxuICAgIHJldHVybiAnXFxuJyArIHByZWZpeCArIG5hbWU7XG4gIH1cbn1cbnZhciByZWVudHJ5ID0gZmFsc2U7XG52YXIgY29tcG9uZW50RnJhbWVDYWNoZTtcblxue1xuICB2YXIgUG9zc2libHlXZWFrTWFwID0gdHlwZW9mIFdlYWtNYXAgPT09ICdmdW5jdGlvbicgPyBXZWFrTWFwIDogTWFwO1xuICBjb21wb25lbnRGcmFtZUNhY2hlID0gbmV3IFBvc3NpYmx5V2Vha01hcCgpO1xufVxuXG5mdW5jdGlvbiBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKGZuLCBjb25zdHJ1Y3QpIHtcbiAgLy8gSWYgc29tZXRoaW5nIGFza2VkIGZvciBhIHN0YWNrIGluc2lkZSBhIGZha2UgcmVuZGVyLCBpdCBzaG91bGQgZ2V0IGlnbm9yZWQuXG4gIGlmICghZm4gfHwgcmVlbnRyeSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHtcbiAgICB2YXIgZnJhbWUgPSBjb21wb25lbnRGcmFtZUNhY2hlLmdldChmbik7XG5cbiAgICBpZiAoZnJhbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGZyYW1lO1xuICAgIH1cbiAgfVxuXG4gIHZhciBjb250cm9sO1xuICByZWVudHJ5ID0gdHJ1ZTtcbiAgdmFyIHByZXZpb3VzUHJlcGFyZVN0YWNrVHJhY2UgPSBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZTsgLy8gJEZsb3dGaXhNZSBJdCBkb2VzIGFjY2VwdCB1bmRlZmluZWQuXG5cbiAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSB1bmRlZmluZWQ7XG4gIHZhciBwcmV2aW91c0Rpc3BhdGNoZXI7XG5cbiAge1xuICAgIHByZXZpb3VzRGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIuY3VycmVudDsgLy8gU2V0IHRoZSBkaXNwYXRjaGVyIGluIERFViBiZWNhdXNlIHRoaXMgbWlnaHQgYmUgY2FsbCBpbiB0aGUgcmVuZGVyIGZ1bmN0aW9uXG4gICAgLy8gZm9yIHdhcm5pbmdzLlxuXG4gICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlci5jdXJyZW50ID0gbnVsbDtcbiAgICBkaXNhYmxlTG9ncygpO1xuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBUaGlzIHNob3VsZCB0aHJvdy5cbiAgICBpZiAoY29uc3RydWN0KSB7XG4gICAgICAvLyBTb21ldGhpbmcgc2hvdWxkIGJlIHNldHRpbmcgdGhlIHByb3BzIGluIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICAgIHZhciBGYWtlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgfTsgLy8gJEZsb3dGaXhNZVxuXG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGYWtlLnByb3RvdHlwZSwgJ3Byb3BzJywge1xuICAgICAgICBzZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAvLyBXZSB1c2UgYSB0aHJvd2luZyBzZXR0ZXIgaW5zdGVhZCBvZiBmcm96ZW4gb3Igbm9uLXdyaXRhYmxlIHByb3BzXG4gICAgICAgICAgLy8gYmVjYXVzZSB0aGF0IHdvbid0IHRocm93IGluIGEgbm9uLXN0cmljdCBtb2RlIGZ1bmN0aW9uLlxuICAgICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09ICdvYmplY3QnICYmIFJlZmxlY3QuY29uc3RydWN0KSB7XG4gICAgICAgIC8vIFdlIGNvbnN0cnVjdCBhIGRpZmZlcmVudCBjb250cm9sIGZvciB0aGlzIGNhc2UgdG8gaW5jbHVkZSBhbnkgZXh0cmFcbiAgICAgICAgLy8gZnJhbWVzIGFkZGVkIGJ5IHRoZSBjb25zdHJ1Y3QgY2FsbC5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBSZWZsZWN0LmNvbnN0cnVjdChGYWtlLCBbXSk7XG4gICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICBjb250cm9sID0geDtcbiAgICAgICAgfVxuXG4gICAgICAgIFJlZmxlY3QuY29uc3RydWN0KGZuLCBbXSwgRmFrZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIEZha2UuY2FsbCgpO1xuICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgY29udHJvbCA9IHg7XG4gICAgICAgIH1cblxuICAgICAgICBmbi5jYWxsKEZha2UucHJvdG90eXBlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgY29udHJvbCA9IHg7XG4gICAgICB9XG5cbiAgICAgIGZuKCk7XG4gICAgfVxuICB9IGNhdGNoIChzYW1wbGUpIHtcbiAgICAvLyBUaGlzIGlzIGlubGluZWQgbWFudWFsbHkgYmVjYXVzZSBjbG9zdXJlIGRvZXNuJ3QgZG8gaXQgZm9yIHVzLlxuICAgIGlmIChzYW1wbGUgJiYgY29udHJvbCAmJiB0eXBlb2Ygc2FtcGxlLnN0YWNrID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gVGhpcyBleHRyYWN0cyB0aGUgZmlyc3QgZnJhbWUgZnJvbSB0aGUgc2FtcGxlIHRoYXQgaXNuJ3QgYWxzbyBpbiB0aGUgY29udHJvbC5cbiAgICAgIC8vIFNraXBwaW5nIG9uZSBmcmFtZSB0aGF0IHdlIGFzc3VtZSBpcyB0aGUgZnJhbWUgdGhhdCBjYWxscyB0aGUgdHdvLlxuICAgICAgdmFyIHNhbXBsZUxpbmVzID0gc2FtcGxlLnN0YWNrLnNwbGl0KCdcXG4nKTtcbiAgICAgIHZhciBjb250cm9sTGluZXMgPSBjb250cm9sLnN0YWNrLnNwbGl0KCdcXG4nKTtcbiAgICAgIHZhciBzID0gc2FtcGxlTGluZXMubGVuZ3RoIC0gMTtcbiAgICAgIHZhciBjID0gY29udHJvbExpbmVzLmxlbmd0aCAtIDE7XG5cbiAgICAgIHdoaWxlIChzID49IDEgJiYgYyA+PSAwICYmIHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcbiAgICAgICAgLy8gV2UgZXhwZWN0IGF0IGxlYXN0IG9uZSBzdGFjayBmcmFtZSB0byBiZSBzaGFyZWQuXG4gICAgICAgIC8vIFR5cGljYWxseSB0aGlzIHdpbGwgYmUgdGhlIHJvb3QgbW9zdCBvbmUuIEhvd2V2ZXIsIHN0YWNrIGZyYW1lcyBtYXkgYmVcbiAgICAgICAgLy8gY3V0IG9mZiBkdWUgdG8gbWF4aW11bSBzdGFjayBsaW1pdHMuIEluIHRoaXMgY2FzZSwgb25lIG1heWJlIGN1dCBvZmZcbiAgICAgICAgLy8gZWFybGllciB0aGFuIHRoZSBvdGhlci4gV2UgYXNzdW1lIHRoYXQgdGhlIHNhbXBsZSBpcyBsb25nZXIgb3IgdGhlIHNhbWVcbiAgICAgICAgLy8gYW5kIHRoZXJlIGZvciBjdXQgb2ZmIGVhcmxpZXIuIFNvIHdlIHNob3VsZCBmaW5kIHRoZSByb290IG1vc3QgZnJhbWUgaW5cbiAgICAgICAgLy8gdGhlIHNhbXBsZSBzb21ld2hlcmUgaW4gdGhlIGNvbnRyb2wuXG4gICAgICAgIGMtLTtcbiAgICAgIH1cblxuICAgICAgZm9yICg7IHMgPj0gMSAmJiBjID49IDA7IHMtLSwgYy0tKSB7XG4gICAgICAgIC8vIE5leHQgd2UgZmluZCB0aGUgZmlyc3Qgb25lIHRoYXQgaXNuJ3QgdGhlIHNhbWUgd2hpY2ggc2hvdWxkIGJlIHRoZVxuICAgICAgICAvLyBmcmFtZSB0aGF0IGNhbGxlZCBvdXIgc2FtcGxlIGZ1bmN0aW9uIGFuZCB0aGUgY29udHJvbC5cbiAgICAgICAgaWYgKHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcbiAgICAgICAgICAvLyBJbiBWOCwgdGhlIGZpcnN0IGxpbmUgaXMgZGVzY3JpYmluZyB0aGUgbWVzc2FnZSBidXQgb3RoZXIgVk1zIGRvbid0LlxuICAgICAgICAgIC8vIElmIHdlJ3JlIGFib3V0IHRvIHJldHVybiB0aGUgZmlyc3QgbGluZSwgYW5kIHRoZSBjb250cm9sIGlzIGFsc28gb24gdGhlIHNhbWVcbiAgICAgICAgICAvLyBsaW5lLCB0aGF0J3MgYSBwcmV0dHkgZ29vZCBpbmRpY2F0b3IgdGhhdCBvdXIgc2FtcGxlIHRocmV3IGF0IHNhbWUgbGluZSBhc1xuICAgICAgICAgIC8vIHRoZSBjb250cm9sLiBJLmUuIGJlZm9yZSB3ZSBlbnRlcmVkIHRoZSBzYW1wbGUgZnJhbWUuIFNvIHdlIGlnbm9yZSB0aGlzIHJlc3VsdC5cbiAgICAgICAgICAvLyBUaGlzIGNhbiBoYXBwZW4gaWYgeW91IHBhc3NlZCBhIGNsYXNzIHRvIGZ1bmN0aW9uIGNvbXBvbmVudCwgb3Igbm9uLWZ1bmN0aW9uLlxuICAgICAgICAgIGlmIChzICE9PSAxIHx8IGMgIT09IDEpIHtcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgcy0tO1xuICAgICAgICAgICAgICBjLS07IC8vIFdlIG1heSBzdGlsbCBoYXZlIHNpbWlsYXIgaW50ZXJtZWRpYXRlIGZyYW1lcyBmcm9tIHRoZSBjb25zdHJ1Y3QgY2FsbC5cbiAgICAgICAgICAgICAgLy8gVGhlIG5leHQgb25lIHRoYXQgaXNuJ3QgdGhlIHNhbWUgc2hvdWxkIGJlIG91ciBtYXRjaCB0aG91Z2guXG5cbiAgICAgICAgICAgICAgaWYgKGMgPCAwIHx8IHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcbiAgICAgICAgICAgICAgICAvLyBWOCBhZGRzIGEgXCJuZXdcIiBwcmVmaXggZm9yIG5hdGl2ZSBjbGFzc2VzLiBMZXQncyByZW1vdmUgaXQgdG8gbWFrZSBpdCBwcmV0dGllci5cbiAgICAgICAgICAgICAgICB2YXIgX2ZyYW1lID0gJ1xcbicgKyBzYW1wbGVMaW5lc1tzXS5yZXBsYWNlKCcgYXQgbmV3ICcsICcgYXQgJyk7XG5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudEZyYW1lQ2FjaGUuc2V0KGZuLCBfZnJhbWUpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gLy8gUmV0dXJuIHRoZSBsaW5lIHdlIGZvdW5kLlxuXG5cbiAgICAgICAgICAgICAgICByZXR1cm4gX2ZyYW1lO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IHdoaWxlIChzID49IDEgJiYgYyA+PSAwKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICByZWVudHJ5ID0gZmFsc2U7XG5cbiAgICB7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyLmN1cnJlbnQgPSBwcmV2aW91c0Rpc3BhdGNoZXI7XG4gICAgICByZWVuYWJsZUxvZ3MoKTtcbiAgICB9XG5cbiAgICBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IHByZXZpb3VzUHJlcGFyZVN0YWNrVHJhY2U7XG4gIH0gLy8gRmFsbGJhY2sgdG8ganVzdCB1c2luZyB0aGUgbmFtZSBpZiB3ZSBjb3VsZG4ndCBtYWtlIGl0IHRocm93LlxuXG5cbiAgdmFyIG5hbWUgPSBmbiA/IGZuLmRpc3BsYXlOYW1lIHx8IGZuLm5hbWUgOiAnJztcbiAgdmFyIHN5bnRoZXRpY0ZyYW1lID0gbmFtZSA/IGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKG5hbWUpIDogJyc7XG5cbiAge1xuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbXBvbmVudEZyYW1lQ2FjaGUuc2V0KGZuLCBzeW50aGV0aWNGcmFtZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN5bnRoZXRpY0ZyYW1lO1xufVxuXG5mdW5jdGlvbiBkZXNjcmliZUNsYXNzQ29tcG9uZW50RnJhbWUoY3Rvciwgc291cmNlLCBvd25lckZuKSB7XG4gIHtcbiAgICByZXR1cm4gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZShjdG9yLCB0cnVlKTtcbiAgfVxufVxuZnVuY3Rpb24gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKGZuLCBzb3VyY2UsIG93bmVyRm4pIHtcbiAge1xuICAgIHJldHVybiBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKGZuLCBmYWxzZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2hvdWxkQ29uc3RydWN0KENvbXBvbmVudCkge1xuICB2YXIgcHJvdG90eXBlID0gQ29tcG9uZW50LnByb3RvdHlwZTtcbiAgcmV0dXJuICEhKHByb3RvdHlwZSAmJiBwcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudCk7XG59XG5cbmZ1bmN0aW9uIGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVih0eXBlLCBzb3VyY2UsIG93bmVyRm4pIHtcblxuICBpZiAodHlwZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAge1xuICAgICAgcmV0dXJuIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUodHlwZSwgc2hvdWxkQ29uc3RydWN0KHR5cGUpKTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKHR5cGUpO1xuICB9XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKCdTdXNwZW5zZScpO1xuXG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU6XG4gICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoJ1N1c3BlbnNlTGlzdCcpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0Jykge1xuICAgIHN3aXRjaCAodHlwZS4kJHR5cGVvZikge1xuICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICByZXR1cm4gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKHR5cGUucmVuZGVyKTtcblxuICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgIC8vIE1lbW8gbWF5IGNvbnRhaW4gYW55IGNvbXBvbmVudCB0eXBlIHNvIHdlIHJlY3Vyc2l2ZWx5IHJlc29sdmUgaXQuXG4gICAgICAgIHJldHVybiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYodHlwZS50eXBlLCBzb3VyY2UsIG93bmVyRm4pO1xuXG4gICAgICBjYXNlIFJFQUNUX0JMT0NLX1RZUEU6XG4gICAgICAgIHJldHVybiBkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWUodHlwZS5fcmVuZGVyKTtcblxuICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgbGF6eUNvbXBvbmVudCA9IHR5cGU7XG4gICAgICAgICAgdmFyIHBheWxvYWQgPSBsYXp5Q29tcG9uZW50Ll9wYXlsb2FkO1xuICAgICAgICAgIHZhciBpbml0ID0gbGF6eUNvbXBvbmVudC5faW5pdDtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBMYXp5IG1heSBjb250YWluIGFueSBjb21wb25lbnQgdHlwZSBzbyB3ZSByZWN1cnNpdmVseSByZXNvbHZlIGl0LlxuICAgICAgICAgICAgcmV0dXJuIGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVihpbml0KHBheWxvYWQpLCBzb3VyY2UsIG93bmVyRm4pO1xuICAgICAgICAgIH0gY2F0Y2ggKHgpIHt9XG4gICAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG5cbmZ1bmN0aW9uIGRlc2NyaWJlRmliZXIoZmliZXIpIHtcbiAgdmFyIG93bmVyID0gIGZpYmVyLl9kZWJ1Z093bmVyID8gZmliZXIuX2RlYnVnT3duZXIudHlwZSA6IG51bGwgO1xuICB2YXIgc291cmNlID0gIGZpYmVyLl9kZWJ1Z1NvdXJjZSA7XG5cbiAgc3dpdGNoIChmaWJlci50YWcpIHtcbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoZmliZXIudHlwZSk7XG5cbiAgICBjYXNlIExhenlDb21wb25lbnQ6XG4gICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoJ0xhenknKTtcblxuICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoJ1N1c3BlbnNlJyk7XG5cbiAgICBjYXNlIFN1c3BlbnNlTGlzdENvbXBvbmVudDpcbiAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSgnU3VzcGVuc2VMaXN0Jyk7XG5cbiAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgIGNhc2UgSW5kZXRlcm1pbmF0ZUNvbXBvbmVudDpcbiAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgICByZXR1cm4gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKGZpYmVyLnR5cGUpO1xuXG4gICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgICAgcmV0dXJuIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZShmaWJlci50eXBlLnJlbmRlcik7XG5cbiAgICBjYXNlIEJsb2NrOlxuICAgICAgcmV0dXJuIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZShmaWJlci50eXBlLl9yZW5kZXIpO1xuXG4gICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgIHJldHVybiBkZXNjcmliZUNsYXNzQ29tcG9uZW50RnJhbWUoZmliZXIudHlwZSk7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuICcnO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFN0YWNrQnlGaWJlckluRGV2QW5kUHJvZCh3b3JrSW5Qcm9ncmVzcykge1xuICB0cnkge1xuICAgIHZhciBpbmZvID0gJyc7XG4gICAgdmFyIG5vZGUgPSB3b3JrSW5Qcm9ncmVzcztcblxuICAgIGRvIHtcbiAgICAgIGluZm8gKz0gZGVzY3JpYmVGaWJlcihub2RlKTtcbiAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICB9IHdoaWxlIChub2RlKTtcblxuICAgIHJldHVybiBpbmZvO1xuICB9IGNhdGNoICh4KSB7XG4gICAgcmV0dXJuICdcXG5FcnJvciBnZW5lcmF0aW5nIHN0YWNrOiAnICsgeC5tZXNzYWdlICsgJ1xcbicgKyB4LnN0YWNrO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFdyYXBwZWROYW1lKG91dGVyVHlwZSwgaW5uZXJUeXBlLCB3cmFwcGVyTmFtZSkge1xuICB2YXIgZnVuY3Rpb25OYW1lID0gaW5uZXJUeXBlLmRpc3BsYXlOYW1lIHx8IGlubmVyVHlwZS5uYW1lIHx8ICcnO1xuICByZXR1cm4gb3V0ZXJUeXBlLmRpc3BsYXlOYW1lIHx8IChmdW5jdGlvbk5hbWUgIT09ICcnID8gd3JhcHBlck5hbWUgKyBcIihcIiArIGZ1bmN0aW9uTmFtZSArIFwiKVwiIDogd3JhcHBlck5hbWUpO1xufVxuXG5mdW5jdGlvbiBnZXRDb250ZXh0TmFtZSh0eXBlKSB7XG4gIHJldHVybiB0eXBlLmRpc3BsYXlOYW1lIHx8ICdDb250ZXh0Jztcbn1cblxuZnVuY3Rpb24gZ2V0Q29tcG9uZW50TmFtZSh0eXBlKSB7XG4gIGlmICh0eXBlID09IG51bGwpIHtcbiAgICAvLyBIb3N0IHJvb3QsIHRleHQgbm9kZSBvciBqdXN0IGludmFsaWQgdHlwZS5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHtcbiAgICBpZiAodHlwZW9mIHR5cGUudGFnID09PSAnbnVtYmVyJykge1xuICAgICAgZXJyb3IoJ1JlY2VpdmVkIGFuIHVuZXhwZWN0ZWQgb2JqZWN0IGluIGdldENvbXBvbmVudE5hbWUoKS4gJyArICdUaGlzIGlzIGxpa2VseSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHR5cGUuZGlzcGxheU5hbWUgfHwgdHlwZS5uYW1lIHx8IG51bGw7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIFJFQUNUX0ZSQUdNRU5UX1RZUEU6XG4gICAgICByZXR1cm4gJ0ZyYWdtZW50JztcblxuICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICByZXR1cm4gJ1BvcnRhbCc7XG5cbiAgICBjYXNlIFJFQUNUX1BST0ZJTEVSX1RZUEU6XG4gICAgICByZXR1cm4gJ1Byb2ZpbGVyJztcblxuICAgIGNhc2UgUkVBQ1RfU1RSSUNUX01PREVfVFlQRTpcbiAgICAgIHJldHVybiAnU3RyaWN0TW9kZSc7XG5cbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG4gICAgICByZXR1cm4gJ1N1c3BlbnNlJztcblxuICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgcmV0dXJuICdTdXNwZW5zZUxpc3QnO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0Jykge1xuICAgIHN3aXRjaCAodHlwZS4kJHR5cGVvZikge1xuICAgICAgY2FzZSBSRUFDVF9DT05URVhUX1RZUEU6XG4gICAgICAgIHZhciBjb250ZXh0ID0gdHlwZTtcbiAgICAgICAgcmV0dXJuIGdldENvbnRleHROYW1lKGNvbnRleHQpICsgJy5Db25zdW1lcic7XG5cbiAgICAgIGNhc2UgUkVBQ1RfUFJPVklERVJfVFlQRTpcbiAgICAgICAgdmFyIHByb3ZpZGVyID0gdHlwZTtcbiAgICAgICAgcmV0dXJuIGdldENvbnRleHROYW1lKHByb3ZpZGVyLl9jb250ZXh0KSArICcuUHJvdmlkZXInO1xuXG4gICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgIHJldHVybiBnZXRXcmFwcGVkTmFtZSh0eXBlLCB0eXBlLnJlbmRlciwgJ0ZvcndhcmRSZWYnKTtcblxuICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lKHR5cGUudHlwZSk7XG5cbiAgICAgIGNhc2UgUkVBQ1RfQkxPQ0tfVFlQRTpcbiAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWUodHlwZS5fcmVuZGVyKTtcblxuICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgbGF6eUNvbXBvbmVudCA9IHR5cGU7XG4gICAgICAgICAgdmFyIHBheWxvYWQgPSBsYXp5Q29tcG9uZW50Ll9wYXlsb2FkO1xuICAgICAgICAgIHZhciBpbml0ID0gbGF6eUNvbXBvbmVudC5faW5pdDtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZShpbml0KHBheWxvYWQpKTtcbiAgICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxudmFyIFJlYWN0RGVidWdDdXJyZW50RnJhbWUgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdERlYnVnQ3VycmVudEZyYW1lO1xudmFyIGN1cnJlbnQgPSBudWxsO1xudmFyIGlzUmVuZGVyaW5nID0gZmFsc2U7XG5mdW5jdGlvbiBnZXRDdXJyZW50RmliZXJPd25lck5hbWVJbkRldk9yTnVsbCgpIHtcbiAge1xuICAgIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgb3duZXIgPSBjdXJyZW50Ll9kZWJ1Z093bmVyO1xuXG4gICAgaWYgKG93bmVyICE9PSBudWxsICYmIHR5cGVvZiBvd25lciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lKG93bmVyLnR5cGUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBnZXRDdXJyZW50RmliZXJTdGFja0luRGV2KCkge1xuICB7XG4gICAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9IC8vIFNhZmUgYmVjYXVzZSBpZiBjdXJyZW50IGZpYmVyIGV4aXN0cywgd2UgYXJlIHJlY29uY2lsaW5nLFxuICAgIC8vIGFuZCBpdCBpcyBndWFyYW50ZWVkIHRvIGJlIHRoZSB3b3JrLWluLXByb2dyZXNzIHZlcnNpb24uXG5cblxuICAgIHJldHVybiBnZXRTdGFja0J5RmliZXJJbkRldkFuZFByb2QoY3VycmVudCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzZXRDdXJyZW50RmliZXIoKSB7XG4gIHtcbiAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lLmdldEN1cnJlbnRTdGFjayA9IG51bGw7XG4gICAgY3VycmVudCA9IG51bGw7XG4gICAgaXNSZW5kZXJpbmcgPSBmYWxzZTtcbiAgfVxufVxuZnVuY3Rpb24gc2V0Q3VycmVudEZpYmVyKGZpYmVyKSB7XG4gIHtcbiAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lLmdldEN1cnJlbnRTdGFjayA9IGdldEN1cnJlbnRGaWJlclN0YWNrSW5EZXY7XG4gICAgY3VycmVudCA9IGZpYmVyO1xuICAgIGlzUmVuZGVyaW5nID0gZmFsc2U7XG4gIH1cbn1cbmZ1bmN0aW9uIHNldElzUmVuZGVyaW5nKHJlbmRlcmluZykge1xuICB7XG4gICAgaXNSZW5kZXJpbmcgPSByZW5kZXJpbmc7XG4gIH1cbn1cbmZ1bmN0aW9uIGdldElzUmVuZGVyaW5nKCkge1xuICB7XG4gICAgcmV0dXJuIGlzUmVuZGVyaW5nO1xuICB9XG59XG5cbi8vIEZsb3cgZG9lcyBub3QgYWxsb3cgc3RyaW5nIGNvbmNhdGVuYXRpb24gb2YgbW9zdCBub24tc3RyaW5nIHR5cGVzLiBUbyB3b3JrXG4vLyBhcm91bmQgdGhpcyBsaW1pdGF0aW9uLCB3ZSB1c2UgYW4gb3BhcXVlIHR5cGUgdGhhdCBjYW4gb25seSBiZSBvYnRhaW5lZCBieVxuLy8gcGFzc2luZyB0aGUgdmFsdWUgdGhyb3VnaCBnZXRUb1N0cmluZ1ZhbHVlIGZpcnN0LlxuZnVuY3Rpb24gdG9TdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuICcnICsgdmFsdWU7XG59XG5mdW5jdGlvbiBnZXRUb1N0cmluZ1ZhbHVlKHZhbHVlKSB7XG4gIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgY2FzZSAnYm9vbGVhbic6XG4gICAgY2FzZSAnbnVtYmVyJzpcbiAgICBjYXNlICdvYmplY3QnOlxuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICAgIHJldHVybiB2YWx1ZTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICAvLyBmdW5jdGlvbiwgc3ltYm9sIGFyZSBhc3NpZ25lZCBhcyBlbXB0eSBzdHJpbmdzXG4gICAgICByZXR1cm4gJyc7XG4gIH1cbn1cblxudmFyIGhhc1JlYWRPbmx5VmFsdWUgPSB7XG4gIGJ1dHRvbjogdHJ1ZSxcbiAgY2hlY2tib3g6IHRydWUsXG4gIGltYWdlOiB0cnVlLFxuICBoaWRkZW46IHRydWUsXG4gIHJhZGlvOiB0cnVlLFxuICByZXNldDogdHJ1ZSxcbiAgc3VibWl0OiB0cnVlXG59O1xuZnVuY3Rpb24gY2hlY2tDb250cm9sbGVkVmFsdWVQcm9wcyh0YWdOYW1lLCBwcm9wcykge1xuICB7XG4gICAgaWYgKCEoaGFzUmVhZE9ubHlWYWx1ZVtwcm9wcy50eXBlXSB8fCBwcm9wcy5vbkNoYW5nZSB8fCBwcm9wcy5vbklucHV0IHx8IHByb3BzLnJlYWRPbmx5IHx8IHByb3BzLmRpc2FibGVkIHx8IHByb3BzLnZhbHVlID09IG51bGwpKSB7XG4gICAgICBlcnJvcignWW91IHByb3ZpZGVkIGEgYHZhbHVlYCBwcm9wIHRvIGEgZm9ybSBmaWVsZCB3aXRob3V0IGFuICcgKyAnYG9uQ2hhbmdlYCBoYW5kbGVyLiBUaGlzIHdpbGwgcmVuZGVyIGEgcmVhZC1vbmx5IGZpZWxkLiBJZiAnICsgJ3RoZSBmaWVsZCBzaG91bGQgYmUgbXV0YWJsZSB1c2UgYGRlZmF1bHRWYWx1ZWAuIE90aGVyd2lzZSwgJyArICdzZXQgZWl0aGVyIGBvbkNoYW5nZWAgb3IgYHJlYWRPbmx5YC4nKTtcbiAgICB9XG5cbiAgICBpZiAoIShwcm9wcy5vbkNoYW5nZSB8fCBwcm9wcy5yZWFkT25seSB8fCBwcm9wcy5kaXNhYmxlZCB8fCBwcm9wcy5jaGVja2VkID09IG51bGwpKSB7XG4gICAgICBlcnJvcignWW91IHByb3ZpZGVkIGEgYGNoZWNrZWRgIHByb3AgdG8gYSBmb3JtIGZpZWxkIHdpdGhvdXQgYW4gJyArICdgb25DaGFuZ2VgIGhhbmRsZXIuIFRoaXMgd2lsbCByZW5kZXIgYSByZWFkLW9ubHkgZmllbGQuIElmICcgKyAndGhlIGZpZWxkIHNob3VsZCBiZSBtdXRhYmxlIHVzZSBgZGVmYXVsdENoZWNrZWRgLiBPdGhlcndpc2UsICcgKyAnc2V0IGVpdGhlciBgb25DaGFuZ2VgIG9yIGByZWFkT25seWAuJyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzQ2hlY2thYmxlKGVsZW0pIHtcbiAgdmFyIHR5cGUgPSBlbGVtLnR5cGU7XG4gIHZhciBub2RlTmFtZSA9IGVsZW0ubm9kZU5hbWU7XG4gIHJldHVybiBub2RlTmFtZSAmJiBub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnaW5wdXQnICYmICh0eXBlID09PSAnY2hlY2tib3gnIHx8IHR5cGUgPT09ICdyYWRpbycpO1xufVxuXG5mdW5jdGlvbiBnZXRUcmFja2VyKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUuX3ZhbHVlVHJhY2tlcjtcbn1cblxuZnVuY3Rpb24gZGV0YWNoVHJhY2tlcihub2RlKSB7XG4gIG5vZGUuX3ZhbHVlVHJhY2tlciA9IG51bGw7XG59XG5cbmZ1bmN0aW9uIGdldFZhbHVlRnJvbU5vZGUobm9kZSkge1xuICB2YXIgdmFsdWUgPSAnJztcblxuICBpZiAoIW5vZGUpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBpZiAoaXNDaGVja2FibGUobm9kZSkpIHtcbiAgICB2YWx1ZSA9IG5vZGUuY2hlY2tlZCA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gIH0gZWxzZSB7XG4gICAgdmFsdWUgPSBub2RlLnZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5mdW5jdGlvbiB0cmFja1ZhbHVlT25Ob2RlKG5vZGUpIHtcbiAgdmFyIHZhbHVlRmllbGQgPSBpc0NoZWNrYWJsZShub2RlKSA/ICdjaGVja2VkJyA6ICd2YWx1ZSc7XG4gIHZhciBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihub2RlLmNvbnN0cnVjdG9yLnByb3RvdHlwZSwgdmFsdWVGaWVsZCk7XG4gIHZhciBjdXJyZW50VmFsdWUgPSAnJyArIG5vZGVbdmFsdWVGaWVsZF07IC8vIGlmIHNvbWVvbmUgaGFzIGFscmVhZHkgZGVmaW5lZCBhIHZhbHVlIG9yIFNhZmFyaSwgdGhlbiBiYWlsXG4gIC8vIGFuZCBkb24ndCB0cmFjayB2YWx1ZSB3aWxsIGNhdXNlIG92ZXIgcmVwb3J0aW5nIG9mIGNoYW5nZXMsXG4gIC8vIGJ1dCBpdCdzIGJldHRlciB0aGVuIGEgaGFyZCBmYWlsdXJlXG4gIC8vIChuZWVkZWQgZm9yIGNlcnRhaW4gdGVzdHMgdGhhdCBzcHlPbiBpbnB1dCB2YWx1ZXMgYW5kIFNhZmFyaSlcblxuICBpZiAobm9kZS5oYXNPd25Qcm9wZXJ0eSh2YWx1ZUZpZWxkKSB8fCB0eXBlb2YgZGVzY3JpcHRvciA9PT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mIGRlc2NyaXB0b3IuZ2V0ICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBkZXNjcmlwdG9yLnNldCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBnZXQgPSBkZXNjcmlwdG9yLmdldCxcbiAgICAgIHNldCA9IGRlc2NyaXB0b3Iuc2V0O1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobm9kZSwgdmFsdWVGaWVsZCwge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBnZXQuY2FsbCh0aGlzKTtcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBjdXJyZW50VmFsdWUgPSAnJyArIHZhbHVlO1xuICAgICAgc2V0LmNhbGwodGhpcywgdmFsdWUpO1xuICAgIH1cbiAgfSk7IC8vIFdlIGNvdWxkJ3ZlIHBhc3NlZCB0aGlzIHRoZSBmaXJzdCB0aW1lXG4gIC8vIGJ1dCBpdCB0cmlnZ2VycyBhIGJ1ZyBpbiBJRTExIGFuZCBFZGdlIDE0LzE1LlxuICAvLyBDYWxsaW5nIGRlZmluZVByb3BlcnR5KCkgYWdhaW4gc2hvdWxkIGJlIGVxdWl2YWxlbnQuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTE3NjhcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobm9kZSwgdmFsdWVGaWVsZCwge1xuICAgIGVudW1lcmFibGU6IGRlc2NyaXB0b3IuZW51bWVyYWJsZVxuICB9KTtcbiAgdmFyIHRyYWNrZXIgPSB7XG4gICAgZ2V0VmFsdWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBjdXJyZW50VmFsdWU7XG4gICAgfSxcbiAgICBzZXRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBjdXJyZW50VmFsdWUgPSAnJyArIHZhbHVlO1xuICAgIH0sXG4gICAgc3RvcFRyYWNraW5nOiBmdW5jdGlvbiAoKSB7XG4gICAgICBkZXRhY2hUcmFja2VyKG5vZGUpO1xuICAgICAgZGVsZXRlIG5vZGVbdmFsdWVGaWVsZF07XG4gICAgfVxuICB9O1xuICByZXR1cm4gdHJhY2tlcjtcbn1cblxuZnVuY3Rpb24gdHJhY2sobm9kZSkge1xuICBpZiAoZ2V0VHJhY2tlcihub2RlKSkge1xuICAgIHJldHVybjtcbiAgfSAvLyBUT0RPOiBPbmNlIGl0J3MganVzdCBGaWJlciB3ZSBjYW4gbW92ZSB0aGlzIHRvIG5vZGUuX3dyYXBwZXJTdGF0ZVxuXG5cbiAgbm9kZS5fdmFsdWVUcmFja2VyID0gdHJhY2tWYWx1ZU9uTm9kZShub2RlKTtcbn1cbmZ1bmN0aW9uIHVwZGF0ZVZhbHVlSWZDaGFuZ2VkKG5vZGUpIHtcbiAgaWYgKCFub2RlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIHRyYWNrZXIgPSBnZXRUcmFja2VyKG5vZGUpOyAvLyBpZiB0aGVyZSBpcyBubyB0cmFja2VyIGF0IHRoaXMgcG9pbnQgaXQncyB1bmxpa2VseVxuICAvLyB0aGF0IHRyeWluZyBhZ2FpbiB3aWxsIHN1Y2NlZWRcblxuICBpZiAoIXRyYWNrZXIpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHZhciBsYXN0VmFsdWUgPSB0cmFja2VyLmdldFZhbHVlKCk7XG4gIHZhciBuZXh0VmFsdWUgPSBnZXRWYWx1ZUZyb21Ob2RlKG5vZGUpO1xuXG4gIGlmIChuZXh0VmFsdWUgIT09IGxhc3RWYWx1ZSkge1xuICAgIHRyYWNrZXIuc2V0VmFsdWUobmV4dFZhbHVlKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZ2V0QWN0aXZlRWxlbWVudChkb2MpIHtcbiAgZG9jID0gZG9jIHx8ICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnID8gZG9jdW1lbnQgOiB1bmRlZmluZWQpO1xuXG4gIGlmICh0eXBlb2YgZG9jID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gZG9jLmFjdGl2ZUVsZW1lbnQgfHwgZG9jLmJvZHk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZG9jLmJvZHk7XG4gIH1cbn1cblxudmFyIGRpZFdhcm5WYWx1ZURlZmF1bHRWYWx1ZSA9IGZhbHNlO1xudmFyIGRpZFdhcm5DaGVja2VkRGVmYXVsdENoZWNrZWQgPSBmYWxzZTtcbnZhciBkaWRXYXJuQ29udHJvbGxlZFRvVW5jb250cm9sbGVkID0gZmFsc2U7XG52YXIgZGlkV2FyblVuY29udHJvbGxlZFRvQ29udHJvbGxlZCA9IGZhbHNlO1xuXG5mdW5jdGlvbiBpc0NvbnRyb2xsZWQocHJvcHMpIHtcbiAgdmFyIHVzZXNDaGVja2VkID0gcHJvcHMudHlwZSA9PT0gJ2NoZWNrYm94JyB8fCBwcm9wcy50eXBlID09PSAncmFkaW8nO1xuICByZXR1cm4gdXNlc0NoZWNrZWQgPyBwcm9wcy5jaGVja2VkICE9IG51bGwgOiBwcm9wcy52YWx1ZSAhPSBudWxsO1xufVxuLyoqXG4gKiBJbXBsZW1lbnRzIGFuIDxpbnB1dD4gaG9zdCBjb21wb25lbnQgdGhhdCBhbGxvd3Mgc2V0dGluZyB0aGVzZSBvcHRpb25hbFxuICogcHJvcHM6IGBjaGVja2VkYCwgYHZhbHVlYCwgYGRlZmF1bHRDaGVja2VkYCwgYW5kIGBkZWZhdWx0VmFsdWVgLlxuICpcbiAqIElmIGBjaGVja2VkYCBvciBgdmFsdWVgIGFyZSBub3Qgc3VwcGxpZWQgKG9yIG51bGwvdW5kZWZpbmVkKSwgdXNlciBhY3Rpb25zXG4gKiB0aGF0IGFmZmVjdCB0aGUgY2hlY2tlZCBzdGF0ZSBvciB2YWx1ZSB3aWxsIHRyaWdnZXIgdXBkYXRlcyB0byB0aGUgZWxlbWVudC5cbiAqXG4gKiBJZiB0aGV5IGFyZSBzdXBwbGllZCAoYW5kIG5vdCBudWxsL3VuZGVmaW5lZCksIHRoZSByZW5kZXJlZCBlbGVtZW50IHdpbGwgbm90XG4gKiB0cmlnZ2VyIHVwZGF0ZXMgdG8gdGhlIGVsZW1lbnQuIEluc3RlYWQsIHRoZSBwcm9wcyBtdXN0IGNoYW5nZSBpbiBvcmRlciBmb3JcbiAqIHRoZSByZW5kZXJlZCBlbGVtZW50IHRvIGJlIHVwZGF0ZWQuXG4gKlxuICogVGhlIHJlbmRlcmVkIGVsZW1lbnQgd2lsbCBiZSBpbml0aWFsaXplZCBhcyB1bmNoZWNrZWQgKG9yIGBkZWZhdWx0Q2hlY2tlZGApXG4gKiB3aXRoIGFuIGVtcHR5IHZhbHVlIChvciBgZGVmYXVsdFZhbHVlYCkuXG4gKlxuICogU2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvV0QtaHRtbDUtMjAxMjEwMjUvdGhlLWlucHV0LWVsZW1lbnQuaHRtbFxuICovXG5cblxuZnVuY3Rpb24gZ2V0SG9zdFByb3BzKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcbiAgdmFyIGNoZWNrZWQgPSBwcm9wcy5jaGVja2VkO1xuXG4gIHZhciBob3N0UHJvcHMgPSBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgIGRlZmF1bHRDaGVja2VkOiB1bmRlZmluZWQsXG4gICAgZGVmYXVsdFZhbHVlOiB1bmRlZmluZWQsXG4gICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICBjaGVja2VkOiBjaGVja2VkICE9IG51bGwgPyBjaGVja2VkIDogbm9kZS5fd3JhcHBlclN0YXRlLmluaXRpYWxDaGVja2VkXG4gIH0pO1xuXG4gIHJldHVybiBob3N0UHJvcHM7XG59XG5mdW5jdGlvbiBpbml0V3JhcHBlclN0YXRlKGVsZW1lbnQsIHByb3BzKSB7XG4gIHtcbiAgICBjaGVja0NvbnRyb2xsZWRWYWx1ZVByb3BzKCdpbnB1dCcsIHByb3BzKTtcblxuICAgIGlmIChwcm9wcy5jaGVja2VkICE9PSB1bmRlZmluZWQgJiYgcHJvcHMuZGVmYXVsdENoZWNrZWQgIT09IHVuZGVmaW5lZCAmJiAhZGlkV2FybkNoZWNrZWREZWZhdWx0Q2hlY2tlZCkge1xuICAgICAgZXJyb3IoJyVzIGNvbnRhaW5zIGFuIGlucHV0IG9mIHR5cGUgJXMgd2l0aCBib3RoIGNoZWNrZWQgYW5kIGRlZmF1bHRDaGVja2VkIHByb3BzLiAnICsgJ0lucHV0IGVsZW1lbnRzIG11c3QgYmUgZWl0aGVyIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkICcgKyAnKHNwZWNpZnkgZWl0aGVyIHRoZSBjaGVja2VkIHByb3AsIG9yIHRoZSBkZWZhdWx0Q2hlY2tlZCBwcm9wLCBidXQgbm90ICcgKyAnYm90aCkuIERlY2lkZSBiZXR3ZWVuIHVzaW5nIGEgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgaW5wdXQgJyArICdlbGVtZW50IGFuZCByZW1vdmUgb25lIG9mIHRoZXNlIHByb3BzLiBNb3JlIGluZm86ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2NvbnRyb2xsZWQtY29tcG9uZW50cycsIGdldEN1cnJlbnRGaWJlck93bmVyTmFtZUluRGV2T3JOdWxsKCkgfHwgJ0EgY29tcG9uZW50JywgcHJvcHMudHlwZSk7XG5cbiAgICAgIGRpZFdhcm5DaGVja2VkRGVmYXVsdENoZWNrZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkICYmICFkaWRXYXJuVmFsdWVEZWZhdWx0VmFsdWUpIHtcbiAgICAgIGVycm9yKCclcyBjb250YWlucyBhbiBpbnB1dCBvZiB0eXBlICVzIHdpdGggYm90aCB2YWx1ZSBhbmQgZGVmYXVsdFZhbHVlIHByb3BzLiAnICsgJ0lucHV0IGVsZW1lbnRzIG11c3QgYmUgZWl0aGVyIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkICcgKyAnKHNwZWNpZnkgZWl0aGVyIHRoZSB2YWx1ZSBwcm9wLCBvciB0aGUgZGVmYXVsdFZhbHVlIHByb3AsIGJ1dCBub3QgJyArICdib3RoKS4gRGVjaWRlIGJldHdlZW4gdXNpbmcgYSBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCBpbnB1dCAnICsgJ2VsZW1lbnQgYW5kIHJlbW92ZSBvbmUgb2YgdGhlc2UgcHJvcHMuIE1vcmUgaW5mbzogJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvY29udHJvbGxlZC1jb21wb25lbnRzJywgZ2V0Q3VycmVudEZpYmVyT3duZXJOYW1lSW5EZXZPck51bGwoKSB8fCAnQSBjb21wb25lbnQnLCBwcm9wcy50eXBlKTtcblxuICAgICAgZGlkV2FyblZhbHVlRGVmYXVsdFZhbHVlID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICB2YXIgbm9kZSA9IGVsZW1lbnQ7XG4gIHZhciBkZWZhdWx0VmFsdWUgPSBwcm9wcy5kZWZhdWx0VmFsdWUgPT0gbnVsbCA/ICcnIDogcHJvcHMuZGVmYXVsdFZhbHVlO1xuICBub2RlLl93cmFwcGVyU3RhdGUgPSB7XG4gICAgaW5pdGlhbENoZWNrZWQ6IHByb3BzLmNoZWNrZWQgIT0gbnVsbCA/IHByb3BzLmNoZWNrZWQgOiBwcm9wcy5kZWZhdWx0Q2hlY2tlZCxcbiAgICBpbml0aWFsVmFsdWU6IGdldFRvU3RyaW5nVmFsdWUocHJvcHMudmFsdWUgIT0gbnVsbCA/IHByb3BzLnZhbHVlIDogZGVmYXVsdFZhbHVlKSxcbiAgICBjb250cm9sbGVkOiBpc0NvbnRyb2xsZWQocHJvcHMpXG4gIH07XG59XG5mdW5jdGlvbiB1cGRhdGVDaGVja2VkKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcbiAgdmFyIGNoZWNrZWQgPSBwcm9wcy5jaGVja2VkO1xuXG4gIGlmIChjaGVja2VkICE9IG51bGwpIHtcbiAgICBzZXRWYWx1ZUZvclByb3BlcnR5KG5vZGUsICdjaGVja2VkJywgY2hlY2tlZCwgZmFsc2UpO1xuICB9XG59XG5mdW5jdGlvbiB1cGRhdGVXcmFwcGVyKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcblxuICB7XG4gICAgdmFyIGNvbnRyb2xsZWQgPSBpc0NvbnRyb2xsZWQocHJvcHMpO1xuXG4gICAgaWYgKCFub2RlLl93cmFwcGVyU3RhdGUuY29udHJvbGxlZCAmJiBjb250cm9sbGVkICYmICFkaWRXYXJuVW5jb250cm9sbGVkVG9Db250cm9sbGVkKSB7XG4gICAgICBlcnJvcignQSBjb21wb25lbnQgaXMgY2hhbmdpbmcgYW4gdW5jb250cm9sbGVkIGlucHV0IHRvIGJlIGNvbnRyb2xsZWQuICcgKyAnVGhpcyBpcyBsaWtlbHkgY2F1c2VkIGJ5IHRoZSB2YWx1ZSBjaGFuZ2luZyBmcm9tIHVuZGVmaW5lZCB0byAnICsgJ2EgZGVmaW5lZCB2YWx1ZSwgd2hpY2ggc2hvdWxkIG5vdCBoYXBwZW4uICcgKyAnRGVjaWRlIGJldHdlZW4gdXNpbmcgYSBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCBpbnB1dCAnICsgJ2VsZW1lbnQgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUgY29tcG9uZW50LiBNb3JlIGluZm86IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9jb250cm9sbGVkLWNvbXBvbmVudHMnKTtcblxuICAgICAgZGlkV2FyblVuY29udHJvbGxlZFRvQ29udHJvbGxlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUuX3dyYXBwZXJTdGF0ZS5jb250cm9sbGVkICYmICFjb250cm9sbGVkICYmICFkaWRXYXJuQ29udHJvbGxlZFRvVW5jb250cm9sbGVkKSB7XG4gICAgICBlcnJvcignQSBjb21wb25lbnQgaXMgY2hhbmdpbmcgYSBjb250cm9sbGVkIGlucHV0IHRvIGJlIHVuY29udHJvbGxlZC4gJyArICdUaGlzIGlzIGxpa2VseSBjYXVzZWQgYnkgdGhlIHZhbHVlIGNoYW5naW5nIGZyb20gYSBkZWZpbmVkIHRvICcgKyAndW5kZWZpbmVkLCB3aGljaCBzaG91bGQgbm90IGhhcHBlbi4gJyArICdEZWNpZGUgYmV0d2VlbiB1c2luZyBhIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkIGlucHV0ICcgKyAnZWxlbWVudCBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBjb21wb25lbnQuIE1vcmUgaW5mbzogaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2NvbnRyb2xsZWQtY29tcG9uZW50cycpO1xuXG4gICAgICBkaWRXYXJuQ29udHJvbGxlZFRvVW5jb250cm9sbGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVDaGVja2VkKGVsZW1lbnQsIHByb3BzKTtcbiAgdmFyIHZhbHVlID0gZ2V0VG9TdHJpbmdWYWx1ZShwcm9wcy52YWx1ZSk7XG4gIHZhciB0eXBlID0gcHJvcHMudHlwZTtcblxuICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgIGlmICh0eXBlID09PSAnbnVtYmVyJykge1xuICAgICAgaWYgKHZhbHVlID09PSAwICYmIG5vZGUudmFsdWUgPT09ICcnIHx8IC8vIFdlIGV4cGxpY2l0bHkgd2FudCB0byBjb2VyY2UgdG8gbnVtYmVyIGhlcmUgaWYgcG9zc2libGUuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgIG5vZGUudmFsdWUgIT0gdmFsdWUpIHtcbiAgICAgICAgbm9kZS52YWx1ZSA9IHRvU3RyaW5nKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG5vZGUudmFsdWUgIT09IHRvU3RyaW5nKHZhbHVlKSkge1xuICAgICAgbm9kZS52YWx1ZSA9IHRvU3RyaW5nKHZhbHVlKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3N1Ym1pdCcgfHwgdHlwZSA9PT0gJ3Jlc2V0Jykge1xuICAgIC8vIFN1Ym1pdC9yZXNldCBpbnB1dHMgbmVlZCB0aGUgYXR0cmlidXRlIHJlbW92ZWQgY29tcGxldGVseSB0byBhdm9pZFxuICAgIC8vIGJsYW5rLXRleHQgYnV0dG9ucy5cbiAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZSgndmFsdWUnKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB7XG4gICAgLy8gV2hlbiBzeW5jaW5nIHRoZSB2YWx1ZSBhdHRyaWJ1dGUsIHRoZSB2YWx1ZSBjb21lcyBmcm9tIGEgY2FzY2FkZSBvZlxuICAgIC8vIHByb3BlcnRpZXM6XG4gICAgLy8gIDEuIFRoZSB2YWx1ZSBSZWFjdCBwcm9wZXJ0eVxuICAgIC8vICAyLiBUaGUgZGVmYXVsdFZhbHVlIFJlYWN0IHByb3BlcnR5XG4gICAgLy8gIDMuIE90aGVyd2lzZSB0aGVyZSBzaG91bGQgYmUgbm8gY2hhbmdlXG4gICAgaWYgKHByb3BzLmhhc093blByb3BlcnR5KCd2YWx1ZScpKSB7XG4gICAgICBzZXREZWZhdWx0VmFsdWUobm9kZSwgcHJvcHMudHlwZSwgdmFsdWUpO1xuICAgIH0gZWxzZSBpZiAocHJvcHMuaGFzT3duUHJvcGVydHkoJ2RlZmF1bHRWYWx1ZScpKSB7XG4gICAgICBzZXREZWZhdWx0VmFsdWUobm9kZSwgcHJvcHMudHlwZSwgZ2V0VG9TdHJpbmdWYWx1ZShwcm9wcy5kZWZhdWx0VmFsdWUpKTtcbiAgICB9XG4gIH1cblxuICB7XG4gICAgLy8gV2hlbiBzeW5jaW5nIHRoZSBjaGVja2VkIGF0dHJpYnV0ZSwgaXQgb25seSBjaGFuZ2VzIHdoZW4gaXQgbmVlZHNcbiAgICAvLyB0byBiZSByZW1vdmVkLCBzdWNoIGFzIHRyYW5zaXRpb25pbmcgZnJvbSBhIGNoZWNrYm94IGludG8gYSB0ZXh0IGlucHV0XG4gICAgaWYgKHByb3BzLmNoZWNrZWQgPT0gbnVsbCAmJiBwcm9wcy5kZWZhdWx0Q2hlY2tlZCAhPSBudWxsKSB7XG4gICAgICBub2RlLmRlZmF1bHRDaGVja2VkID0gISFwcm9wcy5kZWZhdWx0Q2hlY2tlZDtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHBvc3RNb3VudFdyYXBwZXIoZWxlbWVudCwgcHJvcHMsIGlzSHlkcmF0aW5nKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDsgLy8gRG8gbm90IGFzc2lnbiB2YWx1ZSBpZiBpdCBpcyBhbHJlYWR5IHNldC4gVGhpcyBwcmV2ZW50cyB1c2VyIHRleHQgaW5wdXRcbiAgLy8gZnJvbSBiZWluZyBsb3N0IGR1cmluZyBTU1IgaHlkcmF0aW9uLlxuXG4gIGlmIChwcm9wcy5oYXNPd25Qcm9wZXJ0eSgndmFsdWUnKSB8fCBwcm9wcy5oYXNPd25Qcm9wZXJ0eSgnZGVmYXVsdFZhbHVlJykpIHtcbiAgICB2YXIgdHlwZSA9IHByb3BzLnR5cGU7XG4gICAgdmFyIGlzQnV0dG9uID0gdHlwZSA9PT0gJ3N1Ym1pdCcgfHwgdHlwZSA9PT0gJ3Jlc2V0JzsgLy8gQXZvaWQgc2V0dGluZyB2YWx1ZSBhdHRyaWJ1dGUgb24gc3VibWl0L3Jlc2V0IGlucHV0cyBhcyBpdCBvdmVycmlkZXMgdGhlXG4gICAgLy8gZGVmYXVsdCB2YWx1ZSBwcm92aWRlZCBieSB0aGUgYnJvd3Nlci4gU2VlOiAjMTI4NzJcblxuICAgIGlmIChpc0J1dHRvbiAmJiAocHJvcHMudmFsdWUgPT09IHVuZGVmaW5lZCB8fCBwcm9wcy52YWx1ZSA9PT0gbnVsbCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgaW5pdGlhbFZhbHVlID0gdG9TdHJpbmcobm9kZS5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZSk7IC8vIERvIG5vdCBhc3NpZ24gdmFsdWUgaWYgaXQgaXMgYWxyZWFkeSBzZXQuIFRoaXMgcHJldmVudHMgdXNlciB0ZXh0IGlucHV0XG4gICAgLy8gZnJvbSBiZWluZyBsb3N0IGR1cmluZyBTU1IgaHlkcmF0aW9uLlxuXG4gICAgaWYgKCFpc0h5ZHJhdGluZykge1xuICAgICAge1xuICAgICAgICAvLyBXaGVuIHN5bmNpbmcgdGhlIHZhbHVlIGF0dHJpYnV0ZSwgdGhlIHZhbHVlIHByb3BlcnR5IHNob3VsZCB1c2VcbiAgICAgICAgLy8gdGhlIHdyYXBwZXJTdGF0ZS5faW5pdGlhbFZhbHVlIHByb3BlcnR5LiBUaGlzIHVzZXM6XG4gICAgICAgIC8vXG4gICAgICAgIC8vICAgMS4gVGhlIHZhbHVlIFJlYWN0IHByb3BlcnR5IHdoZW4gcHJlc2VudFxuICAgICAgICAvLyAgIDIuIFRoZSBkZWZhdWx0VmFsdWUgUmVhY3QgcHJvcGVydHkgd2hlbiBwcmVzZW50XG4gICAgICAgIC8vICAgMy4gQW4gZW1wdHkgc3RyaW5nXG4gICAgICAgIGlmIChpbml0aWFsVmFsdWUgIT09IG5vZGUudmFsdWUpIHtcbiAgICAgICAgICBub2RlLnZhbHVlID0gaW5pdGlhbFZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAge1xuICAgICAgLy8gT3RoZXJ3aXNlLCB0aGUgdmFsdWUgYXR0cmlidXRlIGlzIHN5bmNocm9uaXplZCB0byB0aGUgcHJvcGVydHksXG4gICAgICAvLyBzbyB3ZSBhc3NpZ24gZGVmYXVsdFZhbHVlIHRvIHRoZSBzYW1lIHRoaW5nIGFzIHRoZSB2YWx1ZSBwcm9wZXJ0eVxuICAgICAgLy8gYXNzaWdubWVudCBzdGVwIGFib3ZlLlxuICAgICAgbm9kZS5kZWZhdWx0VmFsdWUgPSBpbml0aWFsVmFsdWU7XG4gICAgfVxuICB9IC8vIE5vcm1hbGx5LCB3ZSdkIGp1c3QgZG8gYG5vZGUuY2hlY2tlZCA9IG5vZGUuY2hlY2tlZGAgdXBvbiBpbml0aWFsIG1vdW50LCBsZXNzIHRoaXMgYnVnXG4gIC8vIHRoaXMgaXMgbmVlZGVkIHRvIHdvcmsgYXJvdW5kIGEgY2hyb21lIGJ1ZyB3aGVyZSBzZXR0aW5nIGRlZmF1bHRDaGVja2VkXG4gIC8vIHdpbGwgc29tZXRpbWVzIGluZmx1ZW5jZSB0aGUgdmFsdWUgb2YgY2hlY2tlZCAoZXZlbiBhZnRlciBkZXRhY2htZW50KS5cbiAgLy8gUmVmZXJlbmNlOiBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD02MDg0MTZcbiAgLy8gV2UgbmVlZCB0byB0ZW1wb3JhcmlseSB1bnNldCBuYW1lIHRvIGF2b2lkIGRpc3J1cHRpbmcgcmFkaW8gYnV0dG9uIGdyb3Vwcy5cblxuXG4gIHZhciBuYW1lID0gbm9kZS5uYW1lO1xuXG4gIGlmIChuYW1lICE9PSAnJykge1xuICAgIG5vZGUubmFtZSA9ICcnO1xuICB9XG5cbiAge1xuICAgIC8vIFdoZW4gc3luY2luZyB0aGUgY2hlY2tlZCBhdHRyaWJ1dGUsIGJvdGggdGhlIGNoZWNrZWQgcHJvcGVydHkgYW5kXG4gICAgLy8gYXR0cmlidXRlIGFyZSBhc3NpZ25lZCBhdCB0aGUgc2FtZSB0aW1lIHVzaW5nIGRlZmF1bHRDaGVja2VkLiBUaGlzIHVzZXM6XG4gICAgLy9cbiAgICAvLyAgIDEuIFRoZSBjaGVja2VkIFJlYWN0IHByb3BlcnR5IHdoZW4gcHJlc2VudFxuICAgIC8vICAgMi4gVGhlIGRlZmF1bHRDaGVja2VkIFJlYWN0IHByb3BlcnR5IHdoZW4gcHJlc2VudFxuICAgIC8vICAgMy4gT3RoZXJ3aXNlLCBmYWxzZVxuICAgIG5vZGUuZGVmYXVsdENoZWNrZWQgPSAhbm9kZS5kZWZhdWx0Q2hlY2tlZDtcbiAgICBub2RlLmRlZmF1bHRDaGVja2VkID0gISFub2RlLl93cmFwcGVyU3RhdGUuaW5pdGlhbENoZWNrZWQ7XG4gIH1cblxuICBpZiAobmFtZSAhPT0gJycpIHtcbiAgICBub2RlLm5hbWUgPSBuYW1lO1xuICB9XG59XG5mdW5jdGlvbiByZXN0b3JlQ29udHJvbGxlZFN0YXRlKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcbiAgdXBkYXRlV3JhcHBlcihub2RlLCBwcm9wcyk7XG4gIHVwZGF0ZU5hbWVkQ291c2lucyhub2RlLCBwcm9wcyk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZU5hbWVkQ291c2lucyhyb290Tm9kZSwgcHJvcHMpIHtcbiAgdmFyIG5hbWUgPSBwcm9wcy5uYW1lO1xuXG4gIGlmIChwcm9wcy50eXBlID09PSAncmFkaW8nICYmIG5hbWUgIT0gbnVsbCkge1xuICAgIHZhciBxdWVyeVJvb3QgPSByb290Tm9kZTtcblxuICAgIHdoaWxlIChxdWVyeVJvb3QucGFyZW50Tm9kZSkge1xuICAgICAgcXVlcnlSb290ID0gcXVlcnlSb290LnBhcmVudE5vZGU7XG4gICAgfSAvLyBJZiBgcm9vdE5vZGUuZm9ybWAgd2FzIG5vbi1udWxsLCB0aGVuIHdlIGNvdWxkIHRyeSBgZm9ybS5lbGVtZW50c2AsXG4gICAgLy8gYnV0IHRoYXQgc29tZXRpbWVzIGJlaGF2ZXMgc3RyYW5nZWx5IGluIElFOC4gV2UgY291bGQgYWxzbyB0cnkgdXNpbmdcbiAgICAvLyBgZm9ybS5nZXRFbGVtZW50c0J5TmFtZWAsIGJ1dCB0aGF0IHdpbGwgb25seSByZXR1cm4gZGlyZWN0IGNoaWxkcmVuXG4gICAgLy8gYW5kIHdvbid0IGluY2x1ZGUgaW5wdXRzIHRoYXQgdXNlIHRoZSBIVE1MNSBgZm9ybT1gIGF0dHJpYnV0ZS4gU2luY2VcbiAgICAvLyB0aGUgaW5wdXQgbWlnaHQgbm90IGV2ZW4gYmUgaW4gYSBmb3JtLiBJdCBtaWdodCBub3QgZXZlbiBiZSBpbiB0aGVcbiAgICAvLyBkb2N1bWVudC4gTGV0J3MganVzdCB1c2UgdGhlIGxvY2FsIGBxdWVyeVNlbGVjdG9yQWxsYCB0byBlbnN1cmUgd2UgZG9uJ3RcbiAgICAvLyBtaXNzIGFueXRoaW5nLlxuXG5cbiAgICB2YXIgZ3JvdXAgPSBxdWVyeVJvb3QucXVlcnlTZWxlY3RvckFsbCgnaW5wdXRbbmFtZT0nICsgSlNPTi5zdHJpbmdpZnkoJycgKyBuYW1lKSArICddW3R5cGU9XCJyYWRpb1wiXScpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBncm91cC5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIG90aGVyTm9kZSA9IGdyb3VwW2ldO1xuXG4gICAgICBpZiAob3RoZXJOb2RlID09PSByb290Tm9kZSB8fCBvdGhlck5vZGUuZm9ybSAhPT0gcm9vdE5vZGUuZm9ybSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gLy8gVGhpcyB3aWxsIHRocm93IGlmIHJhZGlvIGJ1dHRvbnMgcmVuZGVyZWQgYnkgZGlmZmVyZW50IGNvcGllcyBvZiBSZWFjdFxuICAgICAgLy8gYW5kIHRoZSBzYW1lIG5hbWUgYXJlIHJlbmRlcmVkIGludG8gdGhlIHNhbWUgZm9ybSAoc2FtZSBhcyAjMTkzOSkuXG4gICAgICAvLyBUaGF0J3MgcHJvYmFibHkgb2theTsgd2UgZG9uJ3Qgc3VwcG9ydCBpdCBqdXN0IGFzIHdlIGRvbid0IHN1cHBvcnRcbiAgICAgIC8vIG1peGluZyBSZWFjdCByYWRpbyBidXR0b25zIHdpdGggbm9uLVJlYWN0IG9uZXMuXG5cblxuICAgICAgdmFyIG90aGVyUHJvcHMgPSBnZXRGaWJlckN1cnJlbnRQcm9wc0Zyb21Ob2RlKG90aGVyTm9kZSk7XG5cbiAgICAgIGlmICghb3RoZXJQcm9wcykge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiUmVhY3RET01JbnB1dDogTWl4aW5nIFJlYWN0IGFuZCBub24tUmVhY3QgcmFkaW8gaW5wdXRzIHdpdGggdGhlIHNhbWUgYG5hbWVgIGlzIG5vdCBzdXBwb3J0ZWQuXCIgKTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBXZSBuZWVkIHVwZGF0ZSB0aGUgdHJhY2tlZCB2YWx1ZSBvbiB0aGUgbmFtZWQgY291c2luIHNpbmNlIHRoZSB2YWx1ZVxuICAgICAgLy8gd2FzIGNoYW5nZWQgYnV0IHRoZSBpbnB1dCBzYXcgbm8gZXZlbnQgb3IgdmFsdWUgc2V0XG5cblxuICAgICAgdXBkYXRlVmFsdWVJZkNoYW5nZWQob3RoZXJOb2RlKTsgLy8gSWYgdGhpcyBpcyBhIGNvbnRyb2xsZWQgcmFkaW8gYnV0dG9uIGdyb3VwLCBmb3JjaW5nIHRoZSBpbnB1dCB0aGF0XG4gICAgICAvLyB3YXMgcHJldmlvdXNseSBjaGVja2VkIHRvIHVwZGF0ZSB3aWxsIGNhdXNlIGl0IHRvIGJlIGNvbWUgcmUtY2hlY2tlZFxuICAgICAgLy8gYXMgYXBwcm9wcmlhdGUuXG5cbiAgICAgIHVwZGF0ZVdyYXBwZXIob3RoZXJOb2RlLCBvdGhlclByb3BzKTtcbiAgICB9XG4gIH1cbn0gLy8gSW4gQ2hyb21lLCBhc3NpZ25pbmcgZGVmYXVsdFZhbHVlIHRvIGNlcnRhaW4gaW5wdXQgdHlwZXMgdHJpZ2dlcnMgaW5wdXQgdmFsaWRhdGlvbi5cbi8vIEZvciBudW1iZXIgaW5wdXRzLCB0aGUgZGlzcGxheSB2YWx1ZSBsb3NlcyB0cmFpbGluZyBkZWNpbWFsIHBvaW50cy4gRm9yIGVtYWlsIGlucHV0cyxcbi8vIENocm9tZSByYWlzZXMgXCJUaGUgc3BlY2lmaWVkIHZhbHVlIDx4PiBpcyBub3QgYSB2YWxpZCBlbWFpbCBhZGRyZXNzXCIuXG4vL1xuLy8gSGVyZSB3ZSBjaGVjayB0byBzZWUgaWYgdGhlIGRlZmF1bHRWYWx1ZSBoYXMgYWN0dWFsbHkgY2hhbmdlZCwgYXZvaWRpbmcgdGhlc2UgcHJvYmxlbXNcbi8vIHdoZW4gdGhlIHVzZXIgaXMgaW5wdXR0aW5nIHRleHRcbi8vXG4vLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzcyNTNcblxuXG5mdW5jdGlvbiBzZXREZWZhdWx0VmFsdWUobm9kZSwgdHlwZSwgdmFsdWUpIHtcbiAgaWYgKCAvLyBGb2N1c2VkIG51bWJlciBpbnB1dHMgc3luY2hyb25pemUgb24gYmx1ci4gU2VlIENoYW5nZUV2ZW50UGx1Z2luLmpzXG4gIHR5cGUgIT09ICdudW1iZXInIHx8IGdldEFjdGl2ZUVsZW1lbnQobm9kZS5vd25lckRvY3VtZW50KSAhPT0gbm9kZSkge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICBub2RlLmRlZmF1bHRWYWx1ZSA9IHRvU3RyaW5nKG5vZGUuX3dyYXBwZXJTdGF0ZS5pbml0aWFsVmFsdWUpO1xuICAgIH0gZWxzZSBpZiAobm9kZS5kZWZhdWx0VmFsdWUgIT09IHRvU3RyaW5nKHZhbHVlKSkge1xuICAgICAgbm9kZS5kZWZhdWx0VmFsdWUgPSB0b1N0cmluZyh2YWx1ZSk7XG4gICAgfVxuICB9XG59XG5cbnZhciBkaWRXYXJuU2VsZWN0ZWRTZXRPbk9wdGlvbiA9IGZhbHNlO1xudmFyIGRpZFdhcm5JbnZhbGlkQ2hpbGQgPSBmYWxzZTtcblxuZnVuY3Rpb24gZmxhdHRlbkNoaWxkcmVuKGNoaWxkcmVuKSB7XG4gIHZhciBjb250ZW50ID0gJyc7IC8vIEZsYXR0ZW4gY2hpbGRyZW4uIFdlJ2xsIHdhcm4gaWYgdGhleSBhcmUgaW52YWxpZFxuICAvLyBkdXJpbmcgdmFsaWRhdGVQcm9wcygpIHdoaWNoIHJ1bnMgZm9yIGh5ZHJhdGlvbiB0b28uXG4gIC8vIE5vdGUgdGhhdCB0aGlzIHdvdWxkIHRocm93IG9uIG5vbi1lbGVtZW50IG9iamVjdHMuXG4gIC8vIEVsZW1lbnRzIGFyZSBzdHJpbmdpZmllZCAod2hpY2ggaXMgbm9ybWFsbHkgaXJyZWxldmFudFxuICAvLyBidXQgbWF0dGVycyBmb3IgPGZidD4pLlxuXG4gIFJlYWN0LkNoaWxkcmVuLmZvckVhY2goY2hpbGRyZW4sIGZ1bmN0aW9uIChjaGlsZCkge1xuICAgIGlmIChjaGlsZCA9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29udGVudCArPSBjaGlsZDsgLy8gTm90ZTogd2UgZG9uJ3Qgd2FybiBhYm91dCBpbnZhbGlkIGNoaWxkcmVuIGhlcmUuXG4gICAgLy8gSW5zdGVhZCwgdGhpcyBpcyBkb25lIHNlcGFyYXRlbHkgYmVsb3cgc28gdGhhdFxuICAgIC8vIGl0IGhhcHBlbnMgZHVyaW5nIHRoZSBoeWRyYXRpb24gY29kZSBwYXRoIHRvby5cbiAgfSk7XG4gIHJldHVybiBjb250ZW50O1xufVxuLyoqXG4gKiBJbXBsZW1lbnRzIGFuIDxvcHRpb24+IGhvc3QgY29tcG9uZW50IHRoYXQgd2FybnMgd2hlbiBgc2VsZWN0ZWRgIGlzIHNldC5cbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlUHJvcHMoZWxlbWVudCwgcHJvcHMpIHtcbiAge1xuICAgIC8vIFRoaXMgbWlycm9ycyB0aGUgY29kZSBwYXRoIGFib3ZlLCBidXQgcnVucyBmb3IgaHlkcmF0aW9uIHRvby5cbiAgICAvLyBXYXJuIGFib3V0IGludmFsaWQgY2hpbGRyZW4gaGVyZSBzbyB0aGF0IGNsaWVudCBhbmQgaHlkcmF0aW9uIGFyZSBjb25zaXN0ZW50LlxuICAgIC8vIFRPRE86IHRoaXMgc2VlbXMgbGlrZSBpdCBjb3VsZCBjYXVzZSBhIERFVi1vbmx5IHRocm93IGZvciBoeWRyYXRpb25cbiAgICAvLyBpZiBjaGlsZHJlbiBjb250YWlucyBhIG5vbi1lbGVtZW50IG9iamVjdC4gV2Ugc2hvdWxkIHRyeSB0byBhdm9pZCB0aGF0LlxuICAgIGlmICh0eXBlb2YgcHJvcHMuY2hpbGRyZW4gPT09ICdvYmplY3QnICYmIHByb3BzLmNoaWxkcmVuICE9PSBudWxsKSB7XG4gICAgICBSZWFjdC5DaGlsZHJlbi5mb3JFYWNoKHByb3BzLmNoaWxkcmVuLCBmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgICAgaWYgKGNoaWxkID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGNoaWxkID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgY2hpbGQgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBjaGlsZC50eXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZGlkV2FybkludmFsaWRDaGlsZCkge1xuICAgICAgICAgIGRpZFdhcm5JbnZhbGlkQ2hpbGQgPSB0cnVlO1xuXG4gICAgICAgICAgZXJyb3IoJ09ubHkgc3RyaW5ncyBhbmQgbnVtYmVycyBhcmUgc3VwcG9ydGVkIGFzIDxvcHRpb24+IGNoaWxkcmVuLicpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IC8vIFRPRE86IFJlbW92ZSBzdXBwb3J0IGZvciBgc2VsZWN0ZWRgIGluIDxvcHRpb24+LlxuXG5cbiAgICBpZiAocHJvcHMuc2VsZWN0ZWQgIT0gbnVsbCAmJiAhZGlkV2FyblNlbGVjdGVkU2V0T25PcHRpb24pIHtcbiAgICAgIGVycm9yKCdVc2UgdGhlIGBkZWZhdWx0VmFsdWVgIG9yIGB2YWx1ZWAgcHJvcHMgb24gPHNlbGVjdD4gaW5zdGVhZCBvZiAnICsgJ3NldHRpbmcgYHNlbGVjdGVkYCBvbiA8b3B0aW9uPi4nKTtcblxuICAgICAgZGlkV2FyblNlbGVjdGVkU2V0T25PcHRpb24gPSB0cnVlO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gcG9zdE1vdW50V3JhcHBlciQxKGVsZW1lbnQsIHByb3BzKSB7XG4gIC8vIHZhbHVlPVwiXCIgc2hvdWxkIG1ha2UgYSB2YWx1ZSBhdHRyaWJ1dGUgKCM2MjE5KVxuICBpZiAocHJvcHMudmFsdWUgIT0gbnVsbCkge1xuICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCd2YWx1ZScsIHRvU3RyaW5nKGdldFRvU3RyaW5nVmFsdWUocHJvcHMudmFsdWUpKSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGdldEhvc3RQcm9wcyQxKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBob3N0UHJvcHMgPSBfYXNzaWduKHtcbiAgICBjaGlsZHJlbjogdW5kZWZpbmVkXG4gIH0sIHByb3BzKTtcblxuICB2YXIgY29udGVudCA9IGZsYXR0ZW5DaGlsZHJlbihwcm9wcy5jaGlsZHJlbik7XG5cbiAgaWYgKGNvbnRlbnQpIHtcbiAgICBob3N0UHJvcHMuY2hpbGRyZW4gPSBjb250ZW50O1xuICB9XG5cbiAgcmV0dXJuIGhvc3RQcm9wcztcbn1cblxudmFyIGRpZFdhcm5WYWx1ZURlZmF1bHRWYWx1ZSQxO1xuXG57XG4gIGRpZFdhcm5WYWx1ZURlZmF1bHRWYWx1ZSQxID0gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpIHtcbiAgdmFyIG93bmVyTmFtZSA9IGdldEN1cnJlbnRGaWJlck93bmVyTmFtZUluRGV2T3JOdWxsKCk7XG5cbiAgaWYgKG93bmVyTmFtZSkge1xuICAgIHJldHVybiAnXFxuXFxuQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgYCcgKyBvd25lck5hbWUgKyAnYC4nO1xuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG52YXIgdmFsdWVQcm9wTmFtZXMgPSBbJ3ZhbHVlJywgJ2RlZmF1bHRWYWx1ZSddO1xuLyoqXG4gKiBWYWxpZGF0aW9uIGZ1bmN0aW9uIGZvciBgdmFsdWVgIGFuZCBgZGVmYXVsdFZhbHVlYC5cbiAqL1xuXG5mdW5jdGlvbiBjaGVja1NlbGVjdFByb3BUeXBlcyhwcm9wcykge1xuICB7XG4gICAgY2hlY2tDb250cm9sbGVkVmFsdWVQcm9wcygnc2VsZWN0JywgcHJvcHMpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZVByb3BOYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHByb3BOYW1lID0gdmFsdWVQcm9wTmFtZXNbaV07XG5cbiAgICAgIGlmIChwcm9wc1twcm9wTmFtZV0gPT0gbnVsbCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5KHByb3BzW3Byb3BOYW1lXSk7XG5cbiAgICAgIGlmIChwcm9wcy5tdWx0aXBsZSAmJiAhaXNBcnJheSkge1xuICAgICAgICBlcnJvcignVGhlIGAlc2AgcHJvcCBzdXBwbGllZCB0byA8c2VsZWN0PiBtdXN0IGJlIGFuIGFycmF5IGlmICcgKyAnYG11bHRpcGxlYCBpcyB0cnVlLiVzJywgcHJvcE5hbWUsIGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpKTtcbiAgICAgIH0gZWxzZSBpZiAoIXByb3BzLm11bHRpcGxlICYmIGlzQXJyYXkpIHtcbiAgICAgICAgZXJyb3IoJ1RoZSBgJXNgIHByb3Agc3VwcGxpZWQgdG8gPHNlbGVjdD4gbXVzdCBiZSBhIHNjYWxhciAnICsgJ3ZhbHVlIGlmIGBtdWx0aXBsZWAgaXMgZmFsc2UuJXMnLCBwcm9wTmFtZSwgZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB1cGRhdGVPcHRpb25zKG5vZGUsIG11bHRpcGxlLCBwcm9wVmFsdWUsIHNldERlZmF1bHRTZWxlY3RlZCkge1xuICB2YXIgb3B0aW9ucyA9IG5vZGUub3B0aW9ucztcblxuICBpZiAobXVsdGlwbGUpIHtcbiAgICB2YXIgc2VsZWN0ZWRWYWx1ZXMgPSBwcm9wVmFsdWU7XG4gICAgdmFyIHNlbGVjdGVkVmFsdWUgPSB7fTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VsZWN0ZWRWYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIC8vIFByZWZpeCB0byBhdm9pZCBjaGFvcyB3aXRoIHNwZWNpYWwga2V5cy5cbiAgICAgIHNlbGVjdGVkVmFsdWVbJyQnICsgc2VsZWN0ZWRWYWx1ZXNbaV1dID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgb3B0aW9ucy5sZW5ndGg7IF9pKyspIHtcbiAgICAgIHZhciBzZWxlY3RlZCA9IHNlbGVjdGVkVmFsdWUuaGFzT3duUHJvcGVydHkoJyQnICsgb3B0aW9uc1tfaV0udmFsdWUpO1xuXG4gICAgICBpZiAob3B0aW9uc1tfaV0uc2VsZWN0ZWQgIT09IHNlbGVjdGVkKSB7XG4gICAgICAgIG9wdGlvbnNbX2ldLnNlbGVjdGVkID0gc2VsZWN0ZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChzZWxlY3RlZCAmJiBzZXREZWZhdWx0U2VsZWN0ZWQpIHtcbiAgICAgICAgb3B0aW9uc1tfaV0uZGVmYXVsdFNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gRG8gbm90IHNldCBgc2VsZWN0LnZhbHVlYCBhcyBleGFjdCBiZWhhdmlvciBpc24ndCBjb25zaXN0ZW50IGFjcm9zcyBhbGxcbiAgICAvLyBicm93c2VycyBmb3IgYWxsIGNhc2VzLlxuICAgIHZhciBfc2VsZWN0ZWRWYWx1ZSA9IHRvU3RyaW5nKGdldFRvU3RyaW5nVmFsdWUocHJvcFZhbHVlKSk7XG5cbiAgICB2YXIgZGVmYXVsdFNlbGVjdGVkID0gbnVsbDtcblxuICAgIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IG9wdGlvbnMubGVuZ3RoOyBfaTIrKykge1xuICAgICAgaWYgKG9wdGlvbnNbX2kyXS52YWx1ZSA9PT0gX3NlbGVjdGVkVmFsdWUpIHtcbiAgICAgICAgb3B0aW9uc1tfaTJdLnNlbGVjdGVkID0gdHJ1ZTtcblxuICAgICAgICBpZiAoc2V0RGVmYXVsdFNlbGVjdGVkKSB7XG4gICAgICAgICAgb3B0aW9uc1tfaTJdLmRlZmF1bHRTZWxlY3RlZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChkZWZhdWx0U2VsZWN0ZWQgPT09IG51bGwgJiYgIW9wdGlvbnNbX2kyXS5kaXNhYmxlZCkge1xuICAgICAgICBkZWZhdWx0U2VsZWN0ZWQgPSBvcHRpb25zW19pMl07XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRlZmF1bHRTZWxlY3RlZCAhPT0gbnVsbCkge1xuICAgICAgZGVmYXVsdFNlbGVjdGVkLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cbi8qKlxuICogSW1wbGVtZW50cyBhIDxzZWxlY3Q+IGhvc3QgY29tcG9uZW50IHRoYXQgYWxsb3dzIG9wdGlvbmFsbHkgc2V0dGluZyB0aGVcbiAqIHByb3BzIGB2YWx1ZWAgYW5kIGBkZWZhdWx0VmFsdWVgLiBJZiBgbXVsdGlwbGVgIGlzIGZhbHNlLCB0aGUgcHJvcCBtdXN0IGJlIGFcbiAqIHN0cmluZ2FibGUuIElmIGBtdWx0aXBsZWAgaXMgdHJ1ZSwgdGhlIHByb3AgbXVzdCBiZSBhbiBhcnJheSBvZiBzdHJpbmdhYmxlcy5cbiAqXG4gKiBJZiBgdmFsdWVgIGlzIG5vdCBzdXBwbGllZCAob3IgbnVsbC91bmRlZmluZWQpLCB1c2VyIGFjdGlvbnMgdGhhdCBjaGFuZ2UgdGhlXG4gKiBzZWxlY3RlZCBvcHRpb24gd2lsbCB0cmlnZ2VyIHVwZGF0ZXMgdG8gdGhlIHJlbmRlcmVkIG9wdGlvbnMuXG4gKlxuICogSWYgaXQgaXMgc3VwcGxpZWQgKGFuZCBub3QgbnVsbC91bmRlZmluZWQpLCB0aGUgcmVuZGVyZWQgb3B0aW9ucyB3aWxsIG5vdFxuICogdXBkYXRlIGluIHJlc3BvbnNlIHRvIHVzZXIgYWN0aW9ucy4gSW5zdGVhZCwgdGhlIGB2YWx1ZWAgcHJvcCBtdXN0IGNoYW5nZSBpblxuICogb3JkZXIgZm9yIHRoZSByZW5kZXJlZCBvcHRpb25zIHRvIHVwZGF0ZS5cbiAqXG4gKiBJZiBgZGVmYXVsdFZhbHVlYCBpcyBwcm92aWRlZCwgYW55IG9wdGlvbnMgd2l0aCB0aGUgc3VwcGxpZWQgdmFsdWVzIHdpbGwgYmVcbiAqIHNlbGVjdGVkLlxuICovXG5cblxuZnVuY3Rpb24gZ2V0SG9zdFByb3BzJDIoZWxlbWVudCwgcHJvcHMpIHtcbiAgcmV0dXJuIF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgdmFsdWU6IHVuZGVmaW5lZFxuICB9KTtcbn1cbmZ1bmN0aW9uIGluaXRXcmFwcGVyU3RhdGUkMShlbGVtZW50LCBwcm9wcykge1xuICB2YXIgbm9kZSA9IGVsZW1lbnQ7XG5cbiAge1xuICAgIGNoZWNrU2VsZWN0UHJvcFR5cGVzKHByb3BzKTtcbiAgfVxuXG4gIG5vZGUuX3dyYXBwZXJTdGF0ZSA9IHtcbiAgICB3YXNNdWx0aXBsZTogISFwcm9wcy5tdWx0aXBsZVxuICB9O1xuXG4gIHtcbiAgICBpZiAocHJvcHMudmFsdWUgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCAmJiAhZGlkV2FyblZhbHVlRGVmYXVsdFZhbHVlJDEpIHtcbiAgICAgIGVycm9yKCdTZWxlY3QgZWxlbWVudHMgbXVzdCBiZSBlaXRoZXIgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgJyArICcoc3BlY2lmeSBlaXRoZXIgdGhlIHZhbHVlIHByb3AsIG9yIHRoZSBkZWZhdWx0VmFsdWUgcHJvcCwgYnV0IG5vdCAnICsgJ2JvdGgpLiBEZWNpZGUgYmV0d2VlbiB1c2luZyBhIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkIHNlbGVjdCAnICsgJ2VsZW1lbnQgYW5kIHJlbW92ZSBvbmUgb2YgdGhlc2UgcHJvcHMuIE1vcmUgaW5mbzogJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvY29udHJvbGxlZC1jb21wb25lbnRzJyk7XG5cbiAgICAgIGRpZFdhcm5WYWx1ZURlZmF1bHRWYWx1ZSQxID0gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHBvc3RNb3VudFdyYXBwZXIkMihlbGVtZW50LCBwcm9wcykge1xuICB2YXIgbm9kZSA9IGVsZW1lbnQ7XG4gIG5vZGUubXVsdGlwbGUgPSAhIXByb3BzLm11bHRpcGxlO1xuICB2YXIgdmFsdWUgPSBwcm9wcy52YWx1ZTtcblxuICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgIHVwZGF0ZU9wdGlvbnMobm9kZSwgISFwcm9wcy5tdWx0aXBsZSwgdmFsdWUsIGZhbHNlKTtcbiAgfSBlbHNlIGlmIChwcm9wcy5kZWZhdWx0VmFsdWUgIT0gbnVsbCkge1xuICAgIHVwZGF0ZU9wdGlvbnMobm9kZSwgISFwcm9wcy5tdWx0aXBsZSwgcHJvcHMuZGVmYXVsdFZhbHVlLCB0cnVlKTtcbiAgfVxufVxuZnVuY3Rpb24gcG9zdFVwZGF0ZVdyYXBwZXIoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50O1xuICB2YXIgd2FzTXVsdGlwbGUgPSBub2RlLl93cmFwcGVyU3RhdGUud2FzTXVsdGlwbGU7XG4gIG5vZGUuX3dyYXBwZXJTdGF0ZS53YXNNdWx0aXBsZSA9ICEhcHJvcHMubXVsdGlwbGU7XG4gIHZhciB2YWx1ZSA9IHByb3BzLnZhbHVlO1xuXG4gIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgdXBkYXRlT3B0aW9ucyhub2RlLCAhIXByb3BzLm11bHRpcGxlLCB2YWx1ZSwgZmFsc2UpO1xuICB9IGVsc2UgaWYgKHdhc011bHRpcGxlICE9PSAhIXByb3BzLm11bHRpcGxlKSB7XG4gICAgLy8gRm9yIHNpbXBsaWNpdHksIHJlYXBwbHkgYGRlZmF1bHRWYWx1ZWAgaWYgYG11bHRpcGxlYCBpcyB0b2dnbGVkLlxuICAgIGlmIChwcm9wcy5kZWZhdWx0VmFsdWUgIT0gbnVsbCkge1xuICAgICAgdXBkYXRlT3B0aW9ucyhub2RlLCAhIXByb3BzLm11bHRpcGxlLCBwcm9wcy5kZWZhdWx0VmFsdWUsIHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZXZlcnQgdGhlIHNlbGVjdCBiYWNrIHRvIGl0cyBkZWZhdWx0IHVuc2VsZWN0ZWQgc3RhdGUuXG4gICAgICB1cGRhdGVPcHRpb25zKG5vZGUsICEhcHJvcHMubXVsdGlwbGUsIHByb3BzLm11bHRpcGxlID8gW10gOiAnJywgZmFsc2UpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gcmVzdG9yZUNvbnRyb2xsZWRTdGF0ZSQxKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcbiAgdmFyIHZhbHVlID0gcHJvcHMudmFsdWU7XG5cbiAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICB1cGRhdGVPcHRpb25zKG5vZGUsICEhcHJvcHMubXVsdGlwbGUsIHZhbHVlLCBmYWxzZSk7XG4gIH1cbn1cblxudmFyIGRpZFdhcm5WYWxEZWZhdWx0VmFsID0gZmFsc2U7XG5cbi8qKlxuICogSW1wbGVtZW50cyBhIDx0ZXh0YXJlYT4gaG9zdCBjb21wb25lbnQgdGhhdCBhbGxvd3Mgc2V0dGluZyBgdmFsdWVgLCBhbmRcbiAqIGBkZWZhdWx0VmFsdWVgLiBUaGlzIGRpZmZlcnMgZnJvbSB0aGUgdHJhZGl0aW9uYWwgRE9NIEFQSSBiZWNhdXNlIHZhbHVlIGlzXG4gKiB1c3VhbGx5IHNldCBhcyBQQ0RBVEEgY2hpbGRyZW4uXG4gKlxuICogSWYgYHZhbHVlYCBpcyBub3Qgc3VwcGxpZWQgKG9yIG51bGwvdW5kZWZpbmVkKSwgdXNlciBhY3Rpb25zIHRoYXQgYWZmZWN0IHRoZVxuICogdmFsdWUgd2lsbCB0cmlnZ2VyIHVwZGF0ZXMgdG8gdGhlIGVsZW1lbnQuXG4gKlxuICogSWYgYHZhbHVlYCBpcyBzdXBwbGllZCAoYW5kIG5vdCBudWxsL3VuZGVmaW5lZCksIHRoZSByZW5kZXJlZCBlbGVtZW50IHdpbGxcbiAqIG5vdCB0cmlnZ2VyIHVwZGF0ZXMgdG8gdGhlIGVsZW1lbnQuIEluc3RlYWQsIHRoZSBgdmFsdWVgIHByb3AgbXVzdCBjaGFuZ2UgaW5cbiAqIG9yZGVyIGZvciB0aGUgcmVuZGVyZWQgZWxlbWVudCB0byBiZSB1cGRhdGVkLlxuICpcbiAqIFRoZSByZW5kZXJlZCBlbGVtZW50IHdpbGwgYmUgaW5pdGlhbGl6ZWQgd2l0aCBhbiBlbXB0eSB2YWx1ZSwgdGhlIHByb3BcbiAqIGBkZWZhdWx0VmFsdWVgIGlmIHNwZWNpZmllZCwgb3IgdGhlIGNoaWxkcmVuIGNvbnRlbnQgKGRlcHJlY2F0ZWQpLlxuICovXG5mdW5jdGlvbiBnZXRIb3N0UHJvcHMkMyhlbGVtZW50LCBwcm9wcykge1xuICB2YXIgbm9kZSA9IGVsZW1lbnQ7XG5cbiAgaWYgKCEocHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgPT0gbnVsbCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgIGRvZXMgbm90IG1ha2Ugc2Vuc2Ugb24gPHRleHRhcmVhPi5cIiApO1xuICAgIH1cbiAgfSAvLyBBbHdheXMgc2V0IGNoaWxkcmVuIHRvIHRoZSBzYW1lIHRoaW5nLiBJbiBJRTksIHRoZSBzZWxlY3Rpb24gcmFuZ2Ugd2lsbFxuICAvLyBnZXQgcmVzZXQgaWYgYHRleHRDb250ZW50YCBpcyBtdXRhdGVkLiAgV2UgY291bGQgYWRkIGEgY2hlY2sgaW4gc2V0VGV4dENvbnRlbnRcbiAgLy8gdG8gb25seSBzZXQgdGhlIHZhbHVlIGlmL3doZW4gdGhlIHZhbHVlIGRpZmZlcnMgZnJvbSB0aGUgbm9kZSB2YWx1ZSAod2hpY2ggd291bGRcbiAgLy8gY29tcGxldGVseSBzb2x2ZSB0aGlzIElFOSBidWcpLCBidXQgU2ViYXN0aWFuK1NvcGhpZSBzZWVtZWQgdG8gbGlrZSB0aGlzXG4gIC8vIHNvbHV0aW9uLiBUaGUgdmFsdWUgY2FuIGJlIGEgYm9vbGVhbiBvciBvYmplY3Qgc28gdGhhdCdzIHdoeSBpdCdzIGZvcmNlZFxuICAvLyB0byBiZSBhIHN0cmluZy5cblxuXG4gIHZhciBob3N0UHJvcHMgPSBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgZGVmYXVsdFZhbHVlOiB1bmRlZmluZWQsXG4gICAgY2hpbGRyZW46IHRvU3RyaW5nKG5vZGUuX3dyYXBwZXJTdGF0ZS5pbml0aWFsVmFsdWUpXG4gIH0pO1xuXG4gIHJldHVybiBob3N0UHJvcHM7XG59XG5mdW5jdGlvbiBpbml0V3JhcHBlclN0YXRlJDIoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50O1xuXG4gIHtcbiAgICBjaGVja0NvbnRyb2xsZWRWYWx1ZVByb3BzKCd0ZXh0YXJlYScsIHByb3BzKTtcblxuICAgIGlmIChwcm9wcy52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkICYmICFkaWRXYXJuVmFsRGVmYXVsdFZhbCkge1xuICAgICAgZXJyb3IoJyVzIGNvbnRhaW5zIGEgdGV4dGFyZWEgd2l0aCBib3RoIHZhbHVlIGFuZCBkZWZhdWx0VmFsdWUgcHJvcHMuICcgKyAnVGV4dGFyZWEgZWxlbWVudHMgbXVzdCBiZSBlaXRoZXIgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgJyArICcoc3BlY2lmeSBlaXRoZXIgdGhlIHZhbHVlIHByb3AsIG9yIHRoZSBkZWZhdWx0VmFsdWUgcHJvcCwgYnV0IG5vdCAnICsgJ2JvdGgpLiBEZWNpZGUgYmV0d2VlbiB1c2luZyBhIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkIHRleHRhcmVhICcgKyAnYW5kIHJlbW92ZSBvbmUgb2YgdGhlc2UgcHJvcHMuIE1vcmUgaW5mbzogJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvY29udHJvbGxlZC1jb21wb25lbnRzJywgZ2V0Q3VycmVudEZpYmVyT3duZXJOYW1lSW5EZXZPck51bGwoKSB8fCAnQSBjb21wb25lbnQnKTtcblxuICAgICAgZGlkV2FyblZhbERlZmF1bHRWYWwgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHZhciBpbml0aWFsVmFsdWUgPSBwcm9wcy52YWx1ZTsgLy8gT25seSBib3RoZXIgZmV0Y2hpbmcgZGVmYXVsdCB2YWx1ZSBpZiB3ZSdyZSBnb2luZyB0byB1c2UgaXRcblxuICBpZiAoaW5pdGlhbFZhbHVlID09IG51bGwpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbixcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gcHJvcHMuZGVmYXVsdFZhbHVlO1xuXG4gICAgaWYgKGNoaWxkcmVuICE9IG51bGwpIHtcbiAgICAgIHtcbiAgICAgICAgZXJyb3IoJ1VzZSB0aGUgYGRlZmF1bHRWYWx1ZWAgb3IgYHZhbHVlYCBwcm9wcyBpbnN0ZWFkIG9mIHNldHRpbmcgJyArICdjaGlsZHJlbiBvbiA8dGV4dGFyZWE+LicpO1xuICAgICAgfVxuXG4gICAgICB7XG4gICAgICAgIGlmICghKGRlZmF1bHRWYWx1ZSA9PSBudWxsKSkge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCBcIklmIHlvdSBzdXBwbHkgYGRlZmF1bHRWYWx1ZWAgb24gYSA8dGV4dGFyZWE+LCBkbyBub3QgcGFzcyBjaGlsZHJlbi5cIiApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkge1xuICAgICAgICAgIGlmICghKGNoaWxkcmVuLmxlbmd0aCA8PSAxKSkge1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0aHJvdyBFcnJvciggXCI8dGV4dGFyZWE+IGNhbiBvbmx5IGhhdmUgYXQgbW9zdCBvbmUgY2hpbGQuXCIgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjaGlsZHJlbiA9IGNoaWxkcmVuWzBdO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVmYXVsdFZhbHVlID0gY2hpbGRyZW47XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRlZmF1bHRWYWx1ZSA9PSBudWxsKSB7XG4gICAgICBkZWZhdWx0VmFsdWUgPSAnJztcbiAgICB9XG5cbiAgICBpbml0aWFsVmFsdWUgPSBkZWZhdWx0VmFsdWU7XG4gIH1cblxuICBub2RlLl93cmFwcGVyU3RhdGUgPSB7XG4gICAgaW5pdGlhbFZhbHVlOiBnZXRUb1N0cmluZ1ZhbHVlKGluaXRpYWxWYWx1ZSlcbiAgfTtcbn1cbmZ1bmN0aW9uIHVwZGF0ZVdyYXBwZXIkMShlbGVtZW50LCBwcm9wcykge1xuICB2YXIgbm9kZSA9IGVsZW1lbnQ7XG4gIHZhciB2YWx1ZSA9IGdldFRvU3RyaW5nVmFsdWUocHJvcHMudmFsdWUpO1xuICB2YXIgZGVmYXVsdFZhbHVlID0gZ2V0VG9TdHJpbmdWYWx1ZShwcm9wcy5kZWZhdWx0VmFsdWUpO1xuXG4gIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgLy8gQ2FzdCBgdmFsdWVgIHRvIGEgc3RyaW5nIHRvIGVuc3VyZSB0aGUgdmFsdWUgaXMgc2V0IGNvcnJlY3RseS4gV2hpbGVcbiAgICAvLyBicm93c2VycyB0eXBpY2FsbHkgZG8gdGhpcyBhcyBuZWNlc3NhcnksIGpzZG9tIGRvZXNuJ3QuXG4gICAgdmFyIG5ld1ZhbHVlID0gdG9TdHJpbmcodmFsdWUpOyAvLyBUbyBhdm9pZCBzaWRlIGVmZmVjdHMgKHN1Y2ggYXMgbG9zaW5nIHRleHQgc2VsZWN0aW9uKSwgb25seSBzZXQgdmFsdWUgaWYgY2hhbmdlZFxuXG4gICAgaWYgKG5ld1ZhbHVlICE9PSBub2RlLnZhbHVlKSB7XG4gICAgICBub2RlLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLmRlZmF1bHRWYWx1ZSA9PSBudWxsICYmIG5vZGUuZGVmYXVsdFZhbHVlICE9PSBuZXdWYWx1ZSkge1xuICAgICAgbm9kZS5kZWZhdWx0VmFsdWUgPSBuZXdWYWx1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAoZGVmYXVsdFZhbHVlICE9IG51bGwpIHtcbiAgICBub2RlLmRlZmF1bHRWYWx1ZSA9IHRvU3RyaW5nKGRlZmF1bHRWYWx1ZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIHBvc3RNb3VudFdyYXBwZXIkMyhlbGVtZW50LCBwcm9wcykge1xuICB2YXIgbm9kZSA9IGVsZW1lbnQ7IC8vIFRoaXMgaXMgaW4gcG9zdE1vdW50IGJlY2F1c2Ugd2UgbmVlZCBhY2Nlc3MgdG8gdGhlIERPTSBub2RlLCB3aGljaCBpcyBub3RcbiAgLy8gYXZhaWxhYmxlIHVudGlsIGFmdGVyIHRoZSBjb21wb25lbnQgaGFzIG1vdW50ZWQuXG5cbiAgdmFyIHRleHRDb250ZW50ID0gbm9kZS50ZXh0Q29udGVudDsgLy8gT25seSBzZXQgbm9kZS52YWx1ZSBpZiB0ZXh0Q29udGVudCBpcyBlcXVhbCB0byB0aGUgZXhwZWN0ZWRcbiAgLy8gaW5pdGlhbCB2YWx1ZS4gSW4gSUUxMC9JRTExIHRoZXJlIGlzIGEgYnVnIHdoZXJlIHRoZSBwbGFjZWhvbGRlciBhdHRyaWJ1dGVcbiAgLy8gd2lsbCBwb3B1bGF0ZSB0ZXh0Q29udGVudCBhcyB3ZWxsLlxuICAvLyBodHRwczovL2RldmVsb3Blci5taWNyb3NvZnQuY29tL21pY3Jvc29mdC1lZGdlL3BsYXRmb3JtL2lzc3Vlcy8xMDE1MjUvXG5cbiAgaWYgKHRleHRDb250ZW50ID09PSBub2RlLl93cmFwcGVyU3RhdGUuaW5pdGlhbFZhbHVlKSB7XG4gICAgaWYgKHRleHRDb250ZW50ICE9PSAnJyAmJiB0ZXh0Q29udGVudCAhPT0gbnVsbCkge1xuICAgICAgbm9kZS52YWx1ZSA9IHRleHRDb250ZW50O1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gcmVzdG9yZUNvbnRyb2xsZWRTdGF0ZSQyKGVsZW1lbnQsIHByb3BzKSB7XG4gIC8vIERPTSBjb21wb25lbnQgaXMgc3RpbGwgbW91bnRlZDsgdXBkYXRlXG4gIHVwZGF0ZVdyYXBwZXIkMShlbGVtZW50LCBwcm9wcyk7XG59XG5cbnZhciBIVE1MX05BTUVTUEFDRSA9ICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJztcbnZhciBNQVRIX05BTUVTUEFDRSA9ICdodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MJztcbnZhciBTVkdfTkFNRVNQQUNFID0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJztcbnZhciBOYW1lc3BhY2VzID0ge1xuICBodG1sOiBIVE1MX05BTUVTUEFDRSxcbiAgbWF0aG1sOiBNQVRIX05BTUVTUEFDRSxcbiAgc3ZnOiBTVkdfTkFNRVNQQUNFXG59OyAvLyBBc3N1bWVzIHRoZXJlIGlzIG5vIHBhcmVudCBuYW1lc3BhY2UuXG5cbmZ1bmN0aW9uIGdldEludHJpbnNpY05hbWVzcGFjZSh0eXBlKSB7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ3N2Zyc6XG4gICAgICByZXR1cm4gU1ZHX05BTUVTUEFDRTtcblxuICAgIGNhc2UgJ21hdGgnOlxuICAgICAgcmV0dXJuIE1BVEhfTkFNRVNQQUNFO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBIVE1MX05BTUVTUEFDRTtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0Q2hpbGROYW1lc3BhY2UocGFyZW50TmFtZXNwYWNlLCB0eXBlKSB7XG4gIGlmIChwYXJlbnROYW1lc3BhY2UgPT0gbnVsbCB8fCBwYXJlbnROYW1lc3BhY2UgPT09IEhUTUxfTkFNRVNQQUNFKSB7XG4gICAgLy8gTm8gKG9yIGRlZmF1bHQpIHBhcmVudCBuYW1lc3BhY2U6IHBvdGVudGlhbCBlbnRyeSBwb2ludC5cbiAgICByZXR1cm4gZ2V0SW50cmluc2ljTmFtZXNwYWNlKHR5cGUpO1xuICB9XG5cbiAgaWYgKHBhcmVudE5hbWVzcGFjZSA9PT0gU1ZHX05BTUVTUEFDRSAmJiB0eXBlID09PSAnZm9yZWlnbk9iamVjdCcpIHtcbiAgICAvLyBXZSdyZSBsZWF2aW5nIFNWRy5cbiAgICByZXR1cm4gSFRNTF9OQU1FU1BBQ0U7XG4gIH0gLy8gQnkgZGVmYXVsdCwgcGFzcyBuYW1lc3BhY2UgYmVsb3cuXG5cblxuICByZXR1cm4gcGFyZW50TmFtZXNwYWNlO1xufVxuXG4vKiBnbG9iYWxzIE1TQXBwICovXG5cbi8qKlxuICogQ3JlYXRlIGEgZnVuY3Rpb24gd2hpY2ggaGFzICd1bnNhZmUnIHByaXZpbGVnZXMgKHJlcXVpcmVkIGJ5IHdpbmRvd3M4IGFwcHMpXG4gKi9cbnZhciBjcmVhdGVNaWNyb3NvZnRVbnNhZmVMb2NhbEZ1bmN0aW9uID0gZnVuY3Rpb24gKGZ1bmMpIHtcbiAgaWYgKHR5cGVvZiBNU0FwcCAhPT0gJ3VuZGVmaW5lZCcgJiYgTVNBcHAuZXhlY1Vuc2FmZUxvY2FsRnVuY3Rpb24pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGFyZzAsIGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgICAgIE1TQXBwLmV4ZWNVbnNhZmVMb2NhbEZ1bmN0aW9uKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmMoYXJnMCwgYXJnMSwgYXJnMiwgYXJnMyk7XG4gICAgICB9KTtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmdW5jO1xuICB9XG59O1xuXG52YXIgcmV1c2FibGVTVkdDb250YWluZXI7XG4vKipcbiAqIFNldCB0aGUgaW5uZXJIVE1MIHByb3BlcnR5IG9mIGEgbm9kZVxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gbm9kZVxuICogQHBhcmFtIHtzdHJpbmd9IGh0bWxcbiAqIEBpbnRlcm5hbFxuICovXG5cbnZhciBzZXRJbm5lckhUTUwgPSBjcmVhdGVNaWNyb3NvZnRVbnNhZmVMb2NhbEZ1bmN0aW9uKGZ1bmN0aW9uIChub2RlLCBodG1sKSB7XG4gIGlmIChub2RlLm5hbWVzcGFjZVVSSSA9PT0gTmFtZXNwYWNlcy5zdmcpIHtcblxuICAgIGlmICghKCdpbm5lckhUTUwnIGluIG5vZGUpKSB7XG4gICAgICAvLyBJRSBkb2VzIG5vdCBoYXZlIGlubmVySFRNTCBmb3IgU1ZHIG5vZGVzLCBzbyBpbnN0ZWFkIHdlIGluamVjdCB0aGVcbiAgICAgIC8vIG5ldyBtYXJrdXAgaW4gYSB0ZW1wIG5vZGUgYW5kIHRoZW4gbW92ZSB0aGUgY2hpbGQgbm9kZXMgYWNyb3NzIGludG9cbiAgICAgIC8vIHRoZSB0YXJnZXQgbm9kZVxuICAgICAgcmV1c2FibGVTVkdDb250YWluZXIgPSByZXVzYWJsZVNWR0NvbnRhaW5lciB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIHJldXNhYmxlU1ZHQ29udGFpbmVyLmlubmVySFRNTCA9ICc8c3ZnPicgKyBodG1sLnZhbHVlT2YoKS50b1N0cmluZygpICsgJzwvc3ZnPic7XG4gICAgICB2YXIgc3ZnTm9kZSA9IHJldXNhYmxlU1ZHQ29udGFpbmVyLmZpcnN0Q2hpbGQ7XG5cbiAgICAgIHdoaWxlIChub2RlLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgbm9kZS5yZW1vdmVDaGlsZChub2RlLmZpcnN0Q2hpbGQpO1xuICAgICAgfVxuXG4gICAgICB3aGlsZSAoc3ZnTm9kZS5maXJzdENoaWxkKSB7XG4gICAgICAgIG5vZGUuYXBwZW5kQ2hpbGQoc3ZnTm9kZS5maXJzdENoaWxkKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIG5vZGUuaW5uZXJIVE1MID0gaHRtbDtcbn0pO1xuXG4vKipcbiAqIEhUTUwgbm9kZVR5cGUgdmFsdWVzIHRoYXQgcmVwcmVzZW50IHRoZSB0eXBlIG9mIHRoZSBub2RlXG4gKi9cbnZhciBFTEVNRU5UX05PREUgPSAxO1xudmFyIFRFWFRfTk9ERSA9IDM7XG52YXIgQ09NTUVOVF9OT0RFID0gODtcbnZhciBET0NVTUVOVF9OT0RFID0gOTtcbnZhciBET0NVTUVOVF9GUkFHTUVOVF9OT0RFID0gMTE7XG5cbi8qKlxuICogU2V0IHRoZSB0ZXh0Q29udGVudCBwcm9wZXJ0eSBvZiBhIG5vZGUuIEZvciB0ZXh0IHVwZGF0ZXMsIGl0J3MgZmFzdGVyXG4gKiB0byBzZXQgdGhlIGBub2RlVmFsdWVgIG9mIHRoZSBUZXh0IG5vZGUgZGlyZWN0bHkgaW5zdGVhZCBvZiB1c2luZ1xuICogYC50ZXh0Q29udGVudGAgd2hpY2ggd2lsbCByZW1vdmUgdGhlIGV4aXN0aW5nIG5vZGUgYW5kIGNyZWF0ZSBhIG5ldyBvbmUuXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fSBub2RlXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuICogQGludGVybmFsXG4gKi9cblxudmFyIHNldFRleHRDb250ZW50ID0gZnVuY3Rpb24gKG5vZGUsIHRleHQpIHtcbiAgaWYgKHRleHQpIHtcbiAgICB2YXIgZmlyc3RDaGlsZCA9IG5vZGUuZmlyc3RDaGlsZDtcblxuICAgIGlmIChmaXJzdENoaWxkICYmIGZpcnN0Q2hpbGQgPT09IG5vZGUubGFzdENoaWxkICYmIGZpcnN0Q2hpbGQubm9kZVR5cGUgPT09IFRFWFRfTk9ERSkge1xuICAgICAgZmlyc3RDaGlsZC5ub2RlVmFsdWUgPSB0ZXh0O1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIG5vZGUudGV4dENvbnRlbnQgPSB0ZXh0O1xufTtcblxuLy8gTGlzdCBkZXJpdmVkIGZyb20gR2Vja28gc291cmNlIGNvZGU6XG4vLyBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9nZWNrby1kZXYvYmxvYi80ZTYzOGVmYzcxL2xheW91dC9zdHlsZS90ZXN0L3Byb3BlcnR5X2RhdGFiYXNlLmpzXG52YXIgc2hvcnRoYW5kVG9Mb25naGFuZCA9IHtcbiAgYW5pbWF0aW9uOiBbJ2FuaW1hdGlvbkRlbGF5JywgJ2FuaW1hdGlvbkRpcmVjdGlvbicsICdhbmltYXRpb25EdXJhdGlvbicsICdhbmltYXRpb25GaWxsTW9kZScsICdhbmltYXRpb25JdGVyYXRpb25Db3VudCcsICdhbmltYXRpb25OYW1lJywgJ2FuaW1hdGlvblBsYXlTdGF0ZScsICdhbmltYXRpb25UaW1pbmdGdW5jdGlvbiddLFxuICBiYWNrZ3JvdW5kOiBbJ2JhY2tncm91bmRBdHRhY2htZW50JywgJ2JhY2tncm91bmRDbGlwJywgJ2JhY2tncm91bmRDb2xvcicsICdiYWNrZ3JvdW5kSW1hZ2UnLCAnYmFja2dyb3VuZE9yaWdpbicsICdiYWNrZ3JvdW5kUG9zaXRpb25YJywgJ2JhY2tncm91bmRQb3NpdGlvblknLCAnYmFja2dyb3VuZFJlcGVhdCcsICdiYWNrZ3JvdW5kU2l6ZSddLFxuICBiYWNrZ3JvdW5kUG9zaXRpb246IFsnYmFja2dyb3VuZFBvc2l0aW9uWCcsICdiYWNrZ3JvdW5kUG9zaXRpb25ZJ10sXG4gIGJvcmRlcjogWydib3JkZXJCb3R0b21Db2xvcicsICdib3JkZXJCb3R0b21TdHlsZScsICdib3JkZXJCb3R0b21XaWR0aCcsICdib3JkZXJJbWFnZU91dHNldCcsICdib3JkZXJJbWFnZVJlcGVhdCcsICdib3JkZXJJbWFnZVNsaWNlJywgJ2JvcmRlckltYWdlU291cmNlJywgJ2JvcmRlckltYWdlV2lkdGgnLCAnYm9yZGVyTGVmdENvbG9yJywgJ2JvcmRlckxlZnRTdHlsZScsICdib3JkZXJMZWZ0V2lkdGgnLCAnYm9yZGVyUmlnaHRDb2xvcicsICdib3JkZXJSaWdodFN0eWxlJywgJ2JvcmRlclJpZ2h0V2lkdGgnLCAnYm9yZGVyVG9wQ29sb3InLCAnYm9yZGVyVG9wU3R5bGUnLCAnYm9yZGVyVG9wV2lkdGgnXSxcbiAgYm9yZGVyQmxvY2tFbmQ6IFsnYm9yZGVyQmxvY2tFbmRDb2xvcicsICdib3JkZXJCbG9ja0VuZFN0eWxlJywgJ2JvcmRlckJsb2NrRW5kV2lkdGgnXSxcbiAgYm9yZGVyQmxvY2tTdGFydDogWydib3JkZXJCbG9ja1N0YXJ0Q29sb3InLCAnYm9yZGVyQmxvY2tTdGFydFN0eWxlJywgJ2JvcmRlckJsb2NrU3RhcnRXaWR0aCddLFxuICBib3JkZXJCb3R0b206IFsnYm9yZGVyQm90dG9tQ29sb3InLCAnYm9yZGVyQm90dG9tU3R5bGUnLCAnYm9yZGVyQm90dG9tV2lkdGgnXSxcbiAgYm9yZGVyQ29sb3I6IFsnYm9yZGVyQm90dG9tQ29sb3InLCAnYm9yZGVyTGVmdENvbG9yJywgJ2JvcmRlclJpZ2h0Q29sb3InLCAnYm9yZGVyVG9wQ29sb3InXSxcbiAgYm9yZGVySW1hZ2U6IFsnYm9yZGVySW1hZ2VPdXRzZXQnLCAnYm9yZGVySW1hZ2VSZXBlYXQnLCAnYm9yZGVySW1hZ2VTbGljZScsICdib3JkZXJJbWFnZVNvdXJjZScsICdib3JkZXJJbWFnZVdpZHRoJ10sXG4gIGJvcmRlcklubGluZUVuZDogWydib3JkZXJJbmxpbmVFbmRDb2xvcicsICdib3JkZXJJbmxpbmVFbmRTdHlsZScsICdib3JkZXJJbmxpbmVFbmRXaWR0aCddLFxuICBib3JkZXJJbmxpbmVTdGFydDogWydib3JkZXJJbmxpbmVTdGFydENvbG9yJywgJ2JvcmRlcklubGluZVN0YXJ0U3R5bGUnLCAnYm9yZGVySW5saW5lU3RhcnRXaWR0aCddLFxuICBib3JkZXJMZWZ0OiBbJ2JvcmRlckxlZnRDb2xvcicsICdib3JkZXJMZWZ0U3R5bGUnLCAnYm9yZGVyTGVmdFdpZHRoJ10sXG4gIGJvcmRlclJhZGl1czogWydib3JkZXJCb3R0b21MZWZ0UmFkaXVzJywgJ2JvcmRlckJvdHRvbVJpZ2h0UmFkaXVzJywgJ2JvcmRlclRvcExlZnRSYWRpdXMnLCAnYm9yZGVyVG9wUmlnaHRSYWRpdXMnXSxcbiAgYm9yZGVyUmlnaHQ6IFsnYm9yZGVyUmlnaHRDb2xvcicsICdib3JkZXJSaWdodFN0eWxlJywgJ2JvcmRlclJpZ2h0V2lkdGgnXSxcbiAgYm9yZGVyU3R5bGU6IFsnYm9yZGVyQm90dG9tU3R5bGUnLCAnYm9yZGVyTGVmdFN0eWxlJywgJ2JvcmRlclJpZ2h0U3R5bGUnLCAnYm9yZGVyVG9wU3R5bGUnXSxcbiAgYm9yZGVyVG9wOiBbJ2JvcmRlclRvcENvbG9yJywgJ2JvcmRlclRvcFN0eWxlJywgJ2JvcmRlclRvcFdpZHRoJ10sXG4gIGJvcmRlcldpZHRoOiBbJ2JvcmRlckJvdHRvbVdpZHRoJywgJ2JvcmRlckxlZnRXaWR0aCcsICdib3JkZXJSaWdodFdpZHRoJywgJ2JvcmRlclRvcFdpZHRoJ10sXG4gIGNvbHVtblJ1bGU6IFsnY29sdW1uUnVsZUNvbG9yJywgJ2NvbHVtblJ1bGVTdHlsZScsICdjb2x1bW5SdWxlV2lkdGgnXSxcbiAgY29sdW1uczogWydjb2x1bW5Db3VudCcsICdjb2x1bW5XaWR0aCddLFxuICBmbGV4OiBbJ2ZsZXhCYXNpcycsICdmbGV4R3JvdycsICdmbGV4U2hyaW5rJ10sXG4gIGZsZXhGbG93OiBbJ2ZsZXhEaXJlY3Rpb24nLCAnZmxleFdyYXAnXSxcbiAgZm9udDogWydmb250RmFtaWx5JywgJ2ZvbnRGZWF0dXJlU2V0dGluZ3MnLCAnZm9udEtlcm5pbmcnLCAnZm9udExhbmd1YWdlT3ZlcnJpZGUnLCAnZm9udFNpemUnLCAnZm9udFNpemVBZGp1c3QnLCAnZm9udFN0cmV0Y2gnLCAnZm9udFN0eWxlJywgJ2ZvbnRWYXJpYW50JywgJ2ZvbnRWYXJpYW50QWx0ZXJuYXRlcycsICdmb250VmFyaWFudENhcHMnLCAnZm9udFZhcmlhbnRFYXN0QXNpYW4nLCAnZm9udFZhcmlhbnRMaWdhdHVyZXMnLCAnZm9udFZhcmlhbnROdW1lcmljJywgJ2ZvbnRWYXJpYW50UG9zaXRpb24nLCAnZm9udFdlaWdodCcsICdsaW5lSGVpZ2h0J10sXG4gIGZvbnRWYXJpYW50OiBbJ2ZvbnRWYXJpYW50QWx0ZXJuYXRlcycsICdmb250VmFyaWFudENhcHMnLCAnZm9udFZhcmlhbnRFYXN0QXNpYW4nLCAnZm9udFZhcmlhbnRMaWdhdHVyZXMnLCAnZm9udFZhcmlhbnROdW1lcmljJywgJ2ZvbnRWYXJpYW50UG9zaXRpb24nXSxcbiAgZ2FwOiBbJ2NvbHVtbkdhcCcsICdyb3dHYXAnXSxcbiAgZ3JpZDogWydncmlkQXV0b0NvbHVtbnMnLCAnZ3JpZEF1dG9GbG93JywgJ2dyaWRBdXRvUm93cycsICdncmlkVGVtcGxhdGVBcmVhcycsICdncmlkVGVtcGxhdGVDb2x1bW5zJywgJ2dyaWRUZW1wbGF0ZVJvd3MnXSxcbiAgZ3JpZEFyZWE6IFsnZ3JpZENvbHVtbkVuZCcsICdncmlkQ29sdW1uU3RhcnQnLCAnZ3JpZFJvd0VuZCcsICdncmlkUm93U3RhcnQnXSxcbiAgZ3JpZENvbHVtbjogWydncmlkQ29sdW1uRW5kJywgJ2dyaWRDb2x1bW5TdGFydCddLFxuICBncmlkQ29sdW1uR2FwOiBbJ2NvbHVtbkdhcCddLFxuICBncmlkR2FwOiBbJ2NvbHVtbkdhcCcsICdyb3dHYXAnXSxcbiAgZ3JpZFJvdzogWydncmlkUm93RW5kJywgJ2dyaWRSb3dTdGFydCddLFxuICBncmlkUm93R2FwOiBbJ3Jvd0dhcCddLFxuICBncmlkVGVtcGxhdGU6IFsnZ3JpZFRlbXBsYXRlQXJlYXMnLCAnZ3JpZFRlbXBsYXRlQ29sdW1ucycsICdncmlkVGVtcGxhdGVSb3dzJ10sXG4gIGxpc3RTdHlsZTogWydsaXN0U3R5bGVJbWFnZScsICdsaXN0U3R5bGVQb3NpdGlvbicsICdsaXN0U3R5bGVUeXBlJ10sXG4gIG1hcmdpbjogWydtYXJnaW5Cb3R0b20nLCAnbWFyZ2luTGVmdCcsICdtYXJnaW5SaWdodCcsICdtYXJnaW5Ub3AnXSxcbiAgbWFya2VyOiBbJ21hcmtlckVuZCcsICdtYXJrZXJNaWQnLCAnbWFya2VyU3RhcnQnXSxcbiAgbWFzazogWydtYXNrQ2xpcCcsICdtYXNrQ29tcG9zaXRlJywgJ21hc2tJbWFnZScsICdtYXNrTW9kZScsICdtYXNrT3JpZ2luJywgJ21hc2tQb3NpdGlvblgnLCAnbWFza1Bvc2l0aW9uWScsICdtYXNrUmVwZWF0JywgJ21hc2tTaXplJ10sXG4gIG1hc2tQb3NpdGlvbjogWydtYXNrUG9zaXRpb25YJywgJ21hc2tQb3NpdGlvblknXSxcbiAgb3V0bGluZTogWydvdXRsaW5lQ29sb3InLCAnb3V0bGluZVN0eWxlJywgJ291dGxpbmVXaWR0aCddLFxuICBvdmVyZmxvdzogWydvdmVyZmxvd1gnLCAnb3ZlcmZsb3dZJ10sXG4gIHBhZGRpbmc6IFsncGFkZGluZ0JvdHRvbScsICdwYWRkaW5nTGVmdCcsICdwYWRkaW5nUmlnaHQnLCAncGFkZGluZ1RvcCddLFxuICBwbGFjZUNvbnRlbnQ6IFsnYWxpZ25Db250ZW50JywgJ2p1c3RpZnlDb250ZW50J10sXG4gIHBsYWNlSXRlbXM6IFsnYWxpZ25JdGVtcycsICdqdXN0aWZ5SXRlbXMnXSxcbiAgcGxhY2VTZWxmOiBbJ2FsaWduU2VsZicsICdqdXN0aWZ5U2VsZiddLFxuICB0ZXh0RGVjb3JhdGlvbjogWyd0ZXh0RGVjb3JhdGlvbkNvbG9yJywgJ3RleHREZWNvcmF0aW9uTGluZScsICd0ZXh0RGVjb3JhdGlvblN0eWxlJ10sXG4gIHRleHRFbXBoYXNpczogWyd0ZXh0RW1waGFzaXNDb2xvcicsICd0ZXh0RW1waGFzaXNTdHlsZSddLFxuICB0cmFuc2l0aW9uOiBbJ3RyYW5zaXRpb25EZWxheScsICd0cmFuc2l0aW9uRHVyYXRpb24nLCAndHJhbnNpdGlvblByb3BlcnR5JywgJ3RyYW5zaXRpb25UaW1pbmdGdW5jdGlvbiddLFxuICB3b3JkV3JhcDogWydvdmVyZmxvd1dyYXAnXVxufTtcblxuLyoqXG4gKiBDU1MgcHJvcGVydGllcyB3aGljaCBhY2NlcHQgbnVtYmVycyBidXQgYXJlIG5vdCBpbiB1bml0cyBvZiBcInB4XCIuXG4gKi9cbnZhciBpc1VuaXRsZXNzTnVtYmVyID0ge1xuICBhbmltYXRpb25JdGVyYXRpb25Db3VudDogdHJ1ZSxcbiAgYm9yZGVySW1hZ2VPdXRzZXQ6IHRydWUsXG4gIGJvcmRlckltYWdlU2xpY2U6IHRydWUsXG4gIGJvcmRlckltYWdlV2lkdGg6IHRydWUsXG4gIGJveEZsZXg6IHRydWUsXG4gIGJveEZsZXhHcm91cDogdHJ1ZSxcbiAgYm94T3JkaW5hbEdyb3VwOiB0cnVlLFxuICBjb2x1bW5Db3VudDogdHJ1ZSxcbiAgY29sdW1uczogdHJ1ZSxcbiAgZmxleDogdHJ1ZSxcbiAgZmxleEdyb3c6IHRydWUsXG4gIGZsZXhQb3NpdGl2ZTogdHJ1ZSxcbiAgZmxleFNocmluazogdHJ1ZSxcbiAgZmxleE5lZ2F0aXZlOiB0cnVlLFxuICBmbGV4T3JkZXI6IHRydWUsXG4gIGdyaWRBcmVhOiB0cnVlLFxuICBncmlkUm93OiB0cnVlLFxuICBncmlkUm93RW5kOiB0cnVlLFxuICBncmlkUm93U3BhbjogdHJ1ZSxcbiAgZ3JpZFJvd1N0YXJ0OiB0cnVlLFxuICBncmlkQ29sdW1uOiB0cnVlLFxuICBncmlkQ29sdW1uRW5kOiB0cnVlLFxuICBncmlkQ29sdW1uU3BhbjogdHJ1ZSxcbiAgZ3JpZENvbHVtblN0YXJ0OiB0cnVlLFxuICBmb250V2VpZ2h0OiB0cnVlLFxuICBsaW5lQ2xhbXA6IHRydWUsXG4gIGxpbmVIZWlnaHQ6IHRydWUsXG4gIG9wYWNpdHk6IHRydWUsXG4gIG9yZGVyOiB0cnVlLFxuICBvcnBoYW5zOiB0cnVlLFxuICB0YWJTaXplOiB0cnVlLFxuICB3aWRvd3M6IHRydWUsXG4gIHpJbmRleDogdHJ1ZSxcbiAgem9vbTogdHJ1ZSxcbiAgLy8gU1ZHLXJlbGF0ZWQgcHJvcGVydGllc1xuICBmaWxsT3BhY2l0eTogdHJ1ZSxcbiAgZmxvb2RPcGFjaXR5OiB0cnVlLFxuICBzdG9wT3BhY2l0eTogdHJ1ZSxcbiAgc3Ryb2tlRGFzaGFycmF5OiB0cnVlLFxuICBzdHJva2VEYXNob2Zmc2V0OiB0cnVlLFxuICBzdHJva2VNaXRlcmxpbWl0OiB0cnVlLFxuICBzdHJva2VPcGFjaXR5OiB0cnVlLFxuICBzdHJva2VXaWR0aDogdHJ1ZVxufTtcbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHByZWZpeCB2ZW5kb3Itc3BlY2lmaWMgcHJlZml4LCBlZzogV2Via2l0XG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IHN0eWxlIG5hbWUsIGVnOiB0cmFuc2l0aW9uRHVyYXRpb25cbiAqIEByZXR1cm4ge3N0cmluZ30gc3R5bGUgbmFtZSBwcmVmaXhlZCB3aXRoIGBwcmVmaXhgLCBwcm9wZXJseSBjYW1lbENhc2VkLCBlZzpcbiAqIFdlYmtpdFRyYW5zaXRpb25EdXJhdGlvblxuICovXG5cbmZ1bmN0aW9uIHByZWZpeEtleShwcmVmaXgsIGtleSkge1xuICByZXR1cm4gcHJlZml4ICsga2V5LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsga2V5LnN1YnN0cmluZygxKTtcbn1cbi8qKlxuICogU3VwcG9ydCBzdHlsZSBuYW1lcyB0aGF0IG1heSBjb21lIHBhc3NlZCBpbiBwcmVmaXhlZCBieSBhZGRpbmcgcGVybXV0YXRpb25zXG4gKiBvZiB2ZW5kb3IgcHJlZml4ZXMuXG4gKi9cblxuXG52YXIgcHJlZml4ZXMgPSBbJ1dlYmtpdCcsICdtcycsICdNb3onLCAnTyddOyAvLyBVc2luZyBPYmplY3Qua2V5cyBoZXJlLCBvciBlbHNlIHRoZSB2YW5pbGxhIGZvci1pbiBsb29wIG1ha2VzIElFOCBnbyBpbnRvIGFuXG4vLyBpbmZpbml0ZSBsb29wLCBiZWNhdXNlIGl0IGl0ZXJhdGVzIG92ZXIgdGhlIG5ld2x5IGFkZGVkIHByb3BzIHRvby5cblxuT2JqZWN0LmtleXMoaXNVbml0bGVzc051bWJlcikuZm9yRWFjaChmdW5jdGlvbiAocHJvcCkge1xuICBwcmVmaXhlcy5mb3JFYWNoKGZ1bmN0aW9uIChwcmVmaXgpIHtcbiAgICBpc1VuaXRsZXNzTnVtYmVyW3ByZWZpeEtleShwcmVmaXgsIHByb3ApXSA9IGlzVW5pdGxlc3NOdW1iZXJbcHJvcF07XG4gIH0pO1xufSk7XG5cbi8qKlxuICogQ29udmVydCBhIHZhbHVlIGludG8gdGhlIHByb3BlciBjc3Mgd3JpdGFibGUgdmFsdWUuIFRoZSBzdHlsZSBuYW1lIGBuYW1lYFxuICogc2hvdWxkIGJlIGxvZ2ljYWwgKG5vIGh5cGhlbnMpLCBhcyBzcGVjaWZpZWRcbiAqIGluIGBDU1NQcm9wZXJ0eS5pc1VuaXRsZXNzTnVtYmVyYC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBDU1MgcHJvcGVydHkgbmFtZSBzdWNoIGFzIGB0b3BNYXJnaW5gLlxuICogQHBhcmFtIHsqfSB2YWx1ZSBDU1MgcHJvcGVydHkgdmFsdWUgc3VjaCBhcyBgMTBweGAuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IE5vcm1hbGl6ZWQgc3R5bGUgdmFsdWUgd2l0aCBkaW1lbnNpb25zIGFwcGxpZWQuXG4gKi9cblxuZnVuY3Rpb24gZGFuZ2Vyb3VzU3R5bGVWYWx1ZShuYW1lLCB2YWx1ZSwgaXNDdXN0b21Qcm9wZXJ0eSkge1xuICAvLyBOb3RlIHRoYXQgd2UndmUgcmVtb3ZlZCBlc2NhcGVUZXh0Rm9yQnJvd3NlcigpIGNhbGxzIGhlcmUgc2luY2UgdGhlXG4gIC8vIHdob2xlIHN0cmluZyB3aWxsIGJlIGVzY2FwZWQgd2hlbiB0aGUgYXR0cmlidXRlIGlzIGluamVjdGVkIGludG9cbiAgLy8gdGhlIG1hcmt1cC4gSWYgeW91IHByb3ZpZGUgdW5zYWZlIHVzZXIgZGF0YSBoZXJlIHRoZXkgY2FuIGluamVjdFxuICAvLyBhcmJpdHJhcnkgQ1NTIHdoaWNoIG1heSBiZSBwcm9ibGVtYXRpYyAoSSBjb3VsZG4ndCByZXBybyB0aGlzKTpcbiAgLy8gaHR0cHM6Ly93d3cub3dhc3Aub3JnL2luZGV4LnBocC9YU1NfRmlsdGVyX0V2YXNpb25fQ2hlYXRfU2hlZXRcbiAgLy8gaHR0cDovL3d3dy50aGVzcGFubmVyLmNvLnVrLzIwMDcvMTEvMjYvdWx0aW1hdGUteHNzLWNzcy1pbmplY3Rpb24vXG4gIC8vIFRoaXMgaXMgbm90IGFuIFhTUyBob2xlIGJ1dCBpbnN0ZWFkIGEgcG90ZW50aWFsIENTUyBpbmplY3Rpb24gaXNzdWVcbiAgLy8gd2hpY2ggaGFzIGxlYWQgdG8gYSBncmVhdGVyIGRpc2N1c3Npb24gYWJvdXQgaG93IHdlJ3JlIGdvaW5nIHRvXG4gIC8vIHRydXN0IFVSTHMgbW92aW5nIGZvcndhcmQuIFNlZSAjMjExNTkwMVxuICB2YXIgaXNFbXB0eSA9IHZhbHVlID09IG51bGwgfHwgdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicgfHwgdmFsdWUgPT09ICcnO1xuXG4gIGlmIChpc0VtcHR5KSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgaWYgKCFpc0N1c3RvbVByb3BlcnR5ICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgIT09IDAgJiYgIShpc1VuaXRsZXNzTnVtYmVyLmhhc093blByb3BlcnR5KG5hbWUpICYmIGlzVW5pdGxlc3NOdW1iZXJbbmFtZV0pKSB7XG4gICAgcmV0dXJuIHZhbHVlICsgJ3B4JzsgLy8gUHJlc3VtZXMgaW1wbGljaXQgJ3B4JyBzdWZmaXggZm9yIHVuaXRsZXNzIG51bWJlcnNcbiAgfVxuXG4gIHJldHVybiAoJycgKyB2YWx1ZSkudHJpbSgpO1xufVxuXG52YXIgdXBwZXJjYXNlUGF0dGVybiA9IC8oW0EtWl0pL2c7XG52YXIgbXNQYXR0ZXJuID0gL15tcy0vO1xuLyoqXG4gKiBIeXBoZW5hdGVzIGEgY2FtZWxjYXNlZCBDU1MgcHJvcGVydHkgbmFtZSwgZm9yIGV4YW1wbGU6XG4gKlxuICogICA+IGh5cGhlbmF0ZVN0eWxlTmFtZSgnYmFja2dyb3VuZENvbG9yJylcbiAqICAgPCBcImJhY2tncm91bmQtY29sb3JcIlxuICogICA+IGh5cGhlbmF0ZVN0eWxlTmFtZSgnTW96VHJhbnNpdGlvbicpXG4gKiAgIDwgXCItbW96LXRyYW5zaXRpb25cIlxuICogICA+IGh5cGhlbmF0ZVN0eWxlTmFtZSgnbXNUcmFuc2l0aW9uJylcbiAqICAgPCBcIi1tcy10cmFuc2l0aW9uXCJcbiAqXG4gKiBBcyBNb2Rlcm5penIgc3VnZ2VzdHMgKGh0dHA6Ly9tb2Rlcm5penIuY29tL2RvY3MvI3ByZWZpeGVkKSwgYW4gYG1zYCBwcmVmaXhcbiAqIGlzIGNvbnZlcnRlZCB0byBgLW1zLWAuXG4gKi9cblxuZnVuY3Rpb24gaHlwaGVuYXRlU3R5bGVOYW1lKG5hbWUpIHtcbiAgcmV0dXJuIG5hbWUucmVwbGFjZSh1cHBlcmNhc2VQYXR0ZXJuLCAnLSQxJykudG9Mb3dlckNhc2UoKS5yZXBsYWNlKG1zUGF0dGVybiwgJy1tcy0nKTtcbn1cblxudmFyIHdhcm5WYWxpZFN0eWxlID0gZnVuY3Rpb24gKCkge307XG5cbntcbiAgLy8gJ21zVHJhbnNmb3JtJyBpcyBjb3JyZWN0LCBidXQgdGhlIG90aGVyIHByZWZpeGVzIHNob3VsZCBiZSBjYXBpdGFsaXplZFxuICB2YXIgYmFkVmVuZG9yZWRTdHlsZU5hbWVQYXR0ZXJuID0gL14oPzp3ZWJraXR8bW96fG8pW0EtWl0vO1xuICB2YXIgbXNQYXR0ZXJuJDEgPSAvXi1tcy0vO1xuICB2YXIgaHlwaGVuUGF0dGVybiA9IC8tKC4pL2c7IC8vIHN0eWxlIHZhbHVlcyBzaG91bGRuJ3QgY29udGFpbiBhIHNlbWljb2xvblxuXG4gIHZhciBiYWRTdHlsZVZhbHVlV2l0aFNlbWljb2xvblBhdHRlcm4gPSAvO1xccyokLztcbiAgdmFyIHdhcm5lZFN0eWxlTmFtZXMgPSB7fTtcbiAgdmFyIHdhcm5lZFN0eWxlVmFsdWVzID0ge307XG4gIHZhciB3YXJuZWRGb3JOYU5WYWx1ZSA9IGZhbHNlO1xuICB2YXIgd2FybmVkRm9ySW5maW5pdHlWYWx1ZSA9IGZhbHNlO1xuXG4gIHZhciBjYW1lbGl6ZSA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoaHlwaGVuUGF0dGVybiwgZnVuY3Rpb24gKF8sIGNoYXJhY3Rlcikge1xuICAgICAgcmV0dXJuIGNoYXJhY3Rlci50b1VwcGVyQ2FzZSgpO1xuICAgIH0pO1xuICB9O1xuXG4gIHZhciB3YXJuSHlwaGVuYXRlZFN0eWxlTmFtZSA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgaWYgKHdhcm5lZFN0eWxlTmFtZXMuaGFzT3duUHJvcGVydHkobmFtZSkgJiYgd2FybmVkU3R5bGVOYW1lc1tuYW1lXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdhcm5lZFN0eWxlTmFtZXNbbmFtZV0gPSB0cnVlO1xuXG4gICAgZXJyb3IoJ1Vuc3VwcG9ydGVkIHN0eWxlIHByb3BlcnR5ICVzLiBEaWQgeW91IG1lYW4gJXM/JywgbmFtZSwgLy8gQXMgQW5kaSBTbWl0aCBzdWdnZXN0c1xuICAgIC8vIChodHRwOi8vd3d3LmFuZGlzbWl0aC5jb20vYmxvZy8yMDEyLzAyL21vZGVybml6ci1wcmVmaXhlZC8pLCBhbiBgLW1zYCBwcmVmaXhcbiAgICAvLyBpcyBjb252ZXJ0ZWQgdG8gbG93ZXJjYXNlIGBtc2AuXG4gICAgY2FtZWxpemUobmFtZS5yZXBsYWNlKG1zUGF0dGVybiQxLCAnbXMtJykpKTtcbiAgfTtcblxuICB2YXIgd2FybkJhZFZlbmRvcmVkU3R5bGVOYW1lID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICBpZiAod2FybmVkU3R5bGVOYW1lcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSAmJiB3YXJuZWRTdHlsZU5hbWVzW25hbWVdKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgd2FybmVkU3R5bGVOYW1lc1tuYW1lXSA9IHRydWU7XG5cbiAgICBlcnJvcignVW5zdXBwb3J0ZWQgdmVuZG9yLXByZWZpeGVkIHN0eWxlIHByb3BlcnR5ICVzLiBEaWQgeW91IG1lYW4gJXM/JywgbmFtZSwgbmFtZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIG5hbWUuc2xpY2UoMSkpO1xuICB9O1xuXG4gIHZhciB3YXJuU3R5bGVWYWx1ZVdpdGhTZW1pY29sb24gPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHtcbiAgICBpZiAod2FybmVkU3R5bGVWYWx1ZXMuaGFzT3duUHJvcGVydHkodmFsdWUpICYmIHdhcm5lZFN0eWxlVmFsdWVzW3ZhbHVlXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdhcm5lZFN0eWxlVmFsdWVzW3ZhbHVlXSA9IHRydWU7XG5cbiAgICBlcnJvcihcIlN0eWxlIHByb3BlcnR5IHZhbHVlcyBzaG91bGRuJ3QgY29udGFpbiBhIHNlbWljb2xvbi4gXCIgKyAnVHJ5IFwiJXM6ICVzXCIgaW5zdGVhZC4nLCBuYW1lLCB2YWx1ZS5yZXBsYWNlKGJhZFN0eWxlVmFsdWVXaXRoU2VtaWNvbG9uUGF0dGVybiwgJycpKTtcbiAgfTtcblxuICB2YXIgd2FyblN0eWxlVmFsdWVJc05hTiA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICAgIGlmICh3YXJuZWRGb3JOYU5WYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdhcm5lZEZvck5hTlZhbHVlID0gdHJ1ZTtcblxuICAgIGVycm9yKCdgTmFOYCBpcyBhbiBpbnZhbGlkIHZhbHVlIGZvciB0aGUgYCVzYCBjc3Mgc3R5bGUgcHJvcGVydHkuJywgbmFtZSk7XG4gIH07XG5cbiAgdmFyIHdhcm5TdHlsZVZhbHVlSXNJbmZpbml0eSA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICAgIGlmICh3YXJuZWRGb3JJbmZpbml0eVZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgd2FybmVkRm9ySW5maW5pdHlWYWx1ZSA9IHRydWU7XG5cbiAgICBlcnJvcignYEluZmluaXR5YCBpcyBhbiBpbnZhbGlkIHZhbHVlIGZvciB0aGUgYCVzYCBjc3Mgc3R5bGUgcHJvcGVydHkuJywgbmFtZSk7XG4gIH07XG5cbiAgd2FyblZhbGlkU3R5bGUgPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHtcbiAgICBpZiAobmFtZS5pbmRleE9mKCctJykgPiAtMSkge1xuICAgICAgd2Fybkh5cGhlbmF0ZWRTdHlsZU5hbWUobmFtZSk7XG4gICAgfSBlbHNlIGlmIChiYWRWZW5kb3JlZFN0eWxlTmFtZVBhdHRlcm4udGVzdChuYW1lKSkge1xuICAgICAgd2FybkJhZFZlbmRvcmVkU3R5bGVOYW1lKG5hbWUpO1xuICAgIH0gZWxzZSBpZiAoYmFkU3R5bGVWYWx1ZVdpdGhTZW1pY29sb25QYXR0ZXJuLnRlc3QodmFsdWUpKSB7XG4gICAgICB3YXJuU3R5bGVWYWx1ZVdpdGhTZW1pY29sb24obmFtZSwgdmFsdWUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICBpZiAoaXNOYU4odmFsdWUpKSB7XG4gICAgICAgIHdhcm5TdHlsZVZhbHVlSXNOYU4obmFtZSwgdmFsdWUpO1xuICAgICAgfSBlbHNlIGlmICghaXNGaW5pdGUodmFsdWUpKSB7XG4gICAgICAgIHdhcm5TdHlsZVZhbHVlSXNJbmZpbml0eShuYW1lLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuXG52YXIgd2FyblZhbGlkU3R5bGUkMSA9IHdhcm5WYWxpZFN0eWxlO1xuXG4vKipcbiAqIE9wZXJhdGlvbnMgZm9yIGRlYWxpbmcgd2l0aCBDU1MgcHJvcGVydGllcy5cbiAqL1xuXG4vKipcbiAqIFRoaXMgY3JlYXRlcyBhIHN0cmluZyB0aGF0IGlzIGV4cGVjdGVkIHRvIGJlIGVxdWl2YWxlbnQgdG8gdGhlIHN0eWxlXG4gKiBhdHRyaWJ1dGUgZ2VuZXJhdGVkIGJ5IHNlcnZlci1zaWRlIHJlbmRlcmluZy4gSXQgYnktcGFzc2VzIHdhcm5pbmdzIGFuZFxuICogc2VjdXJpdHkgY2hlY2tzIHNvIGl0J3Mgbm90IHNhZmUgdG8gdXNlIHRoaXMgdmFsdWUgZm9yIGFueXRoaW5nIG90aGVyIHRoYW5cbiAqIGNvbXBhcmlzb24uIEl0IGlzIG9ubHkgdXNlZCBpbiBERVYgZm9yIFNTUiB2YWxpZGF0aW9uLlxuICovXG5cbmZ1bmN0aW9uIGNyZWF0ZURhbmdlcm91c1N0cmluZ0ZvclN0eWxlcyhzdHlsZXMpIHtcbiAge1xuICAgIHZhciBzZXJpYWxpemVkID0gJyc7XG4gICAgdmFyIGRlbGltaXRlciA9ICcnO1xuXG4gICAgZm9yICh2YXIgc3R5bGVOYW1lIGluIHN0eWxlcykge1xuICAgICAgaWYgKCFzdHlsZXMuaGFzT3duUHJvcGVydHkoc3R5bGVOYW1lKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIHN0eWxlVmFsdWUgPSBzdHlsZXNbc3R5bGVOYW1lXTtcblxuICAgICAgaWYgKHN0eWxlVmFsdWUgIT0gbnVsbCkge1xuICAgICAgICB2YXIgaXNDdXN0b21Qcm9wZXJ0eSA9IHN0eWxlTmFtZS5pbmRleE9mKCctLScpID09PSAwO1xuICAgICAgICBzZXJpYWxpemVkICs9IGRlbGltaXRlciArIChpc0N1c3RvbVByb3BlcnR5ID8gc3R5bGVOYW1lIDogaHlwaGVuYXRlU3R5bGVOYW1lKHN0eWxlTmFtZSkpICsgJzonO1xuICAgICAgICBzZXJpYWxpemVkICs9IGRhbmdlcm91c1N0eWxlVmFsdWUoc3R5bGVOYW1lLCBzdHlsZVZhbHVlLCBpc0N1c3RvbVByb3BlcnR5KTtcbiAgICAgICAgZGVsaW1pdGVyID0gJzsnO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzZXJpYWxpemVkIHx8IG51bGw7XG4gIH1cbn1cbi8qKlxuICogU2V0cyB0aGUgdmFsdWUgZm9yIG11bHRpcGxlIHN0eWxlcyBvbiBhIG5vZGUuICBJZiBhIHZhbHVlIGlzIHNwZWNpZmllZCBhc1xuICogJycgKGVtcHR5IHN0cmluZyksIHRoZSBjb3JyZXNwb25kaW5nIHN0eWxlIHByb3BlcnR5IHdpbGwgYmUgdW5zZXQuXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fSBub2RlXG4gKiBAcGFyYW0ge29iamVjdH0gc3R5bGVzXG4gKi9cblxuZnVuY3Rpb24gc2V0VmFsdWVGb3JTdHlsZXMobm9kZSwgc3R5bGVzKSB7XG4gIHZhciBzdHlsZSA9IG5vZGUuc3R5bGU7XG5cbiAgZm9yICh2YXIgc3R5bGVOYW1lIGluIHN0eWxlcykge1xuICAgIGlmICghc3R5bGVzLmhhc093blByb3BlcnR5KHN0eWxlTmFtZSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHZhciBpc0N1c3RvbVByb3BlcnR5ID0gc3R5bGVOYW1lLmluZGV4T2YoJy0tJykgPT09IDA7XG5cbiAgICB7XG4gICAgICBpZiAoIWlzQ3VzdG9tUHJvcGVydHkpIHtcbiAgICAgICAgd2FyblZhbGlkU3R5bGUkMShzdHlsZU5hbWUsIHN0eWxlc1tzdHlsZU5hbWVdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc3R5bGVWYWx1ZSA9IGRhbmdlcm91c1N0eWxlVmFsdWUoc3R5bGVOYW1lLCBzdHlsZXNbc3R5bGVOYW1lXSwgaXNDdXN0b21Qcm9wZXJ0eSk7XG5cbiAgICBpZiAoc3R5bGVOYW1lID09PSAnZmxvYXQnKSB7XG4gICAgICBzdHlsZU5hbWUgPSAnY3NzRmxvYXQnO1xuICAgIH1cblxuICAgIGlmIChpc0N1c3RvbVByb3BlcnR5KSB7XG4gICAgICBzdHlsZS5zZXRQcm9wZXJ0eShzdHlsZU5hbWUsIHN0eWxlVmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHlsZVtzdHlsZU5hbWVdID0gc3R5bGVWYWx1ZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNWYWx1ZUVtcHR5KHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nIHx8IHZhbHVlID09PSAnJztcbn1cbi8qKlxuICogR2l2ZW4ge2NvbG9yOiAncmVkJywgb3ZlcmZsb3c6ICdoaWRkZW4nfSByZXR1cm5zIHtcbiAqICAgY29sb3I6ICdjb2xvcicsXG4gKiAgIG92ZXJmbG93WDogJ292ZXJmbG93JyxcbiAqICAgb3ZlcmZsb3dZOiAnb3ZlcmZsb3cnLFxuICogfS4gVGhpcyBjYW4gYmUgcmVhZCBhcyBcInRoZSBvdmVyZmxvd1kgcHJvcGVydHkgd2FzIHNldCBieSB0aGUgb3ZlcmZsb3dcbiAqIHNob3J0aGFuZFwiLiBUaGF0IGlzLCB0aGUgdmFsdWVzIGFyZSB0aGUgcHJvcGVydHkgdGhhdCBlYWNoIHdhcyBkZXJpdmVkIGZyb20uXG4gKi9cblxuXG5mdW5jdGlvbiBleHBhbmRTaG9ydGhhbmRNYXAoc3R5bGVzKSB7XG4gIHZhciBleHBhbmRlZCA9IHt9O1xuXG4gIGZvciAodmFyIGtleSBpbiBzdHlsZXMpIHtcbiAgICB2YXIgbG9uZ2hhbmRzID0gc2hvcnRoYW5kVG9Mb25naGFuZFtrZXldIHx8IFtrZXldO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsb25naGFuZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGV4cGFuZGVkW2xvbmdoYW5kc1tpXV0gPSBrZXk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGV4cGFuZGVkO1xufVxuLyoqXG4gKiBXaGVuIG1peGluZyBzaG9ydGhhbmQgYW5kIGxvbmdoYW5kIHByb3BlcnR5IG5hbWVzLCB3ZSB3YXJuIGR1cmluZyB1cGRhdGVzIGlmXG4gKiB3ZSBleHBlY3QgYW4gaW5jb3JyZWN0IHJlc3VsdCB0byBvY2N1ci4gSW4gcGFydGljdWxhciwgd2Ugd2FybiBmb3I6XG4gKlxuICogVXBkYXRpbmcgYSBzaG9ydGhhbmQgcHJvcGVydHkgKGxvbmdoYW5kIGdldHMgb3ZlcndyaXR0ZW4pOlxuICogICB7Zm9udDogJ2ZvbycsIGZvbnRWYXJpYW50OiAnYmFyJ30gLT4ge2ZvbnQ6ICdiYXonLCBmb250VmFyaWFudDogJ2Jhcid9XG4gKiAgIGJlY29tZXMgLnN0eWxlLmZvbnQgPSAnYmF6J1xuICogUmVtb3ZpbmcgYSBzaG9ydGhhbmQgcHJvcGVydHkgKGxvbmdoYW5kIGdldHMgbG9zdCB0b28pOlxuICogICB7Zm9udDogJ2ZvbycsIGZvbnRWYXJpYW50OiAnYmFyJ30gLT4ge2ZvbnRWYXJpYW50OiAnYmFyJ31cbiAqICAgYmVjb21lcyAuc3R5bGUuZm9udCA9ICcnXG4gKiBSZW1vdmluZyBhIGxvbmdoYW5kIHByb3BlcnR5IChzaG91bGQgcmV2ZXJ0IHRvIHNob3J0aGFuZDsgZG9lc24ndCk6XG4gKiAgIHtmb250OiAnZm9vJywgZm9udFZhcmlhbnQ6ICdiYXInfSAtPiB7Zm9udDogJ2Zvbyd9XG4gKiAgIGJlY29tZXMgLnN0eWxlLmZvbnRWYXJpYW50ID0gJydcbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlU2hvcnRoYW5kUHJvcGVydHlDb2xsaXNpb25JbkRldihzdHlsZVVwZGF0ZXMsIG5leHRTdHlsZXMpIHtcbiAge1xuICAgIGlmICghbmV4dFN0eWxlcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBleHBhbmRlZFVwZGF0ZXMgPSBleHBhbmRTaG9ydGhhbmRNYXAoc3R5bGVVcGRhdGVzKTtcbiAgICB2YXIgZXhwYW5kZWRTdHlsZXMgPSBleHBhbmRTaG9ydGhhbmRNYXAobmV4dFN0eWxlcyk7XG4gICAgdmFyIHdhcm5lZEFib3V0ID0ge307XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gZXhwYW5kZWRVcGRhdGVzKSB7XG4gICAgICB2YXIgb3JpZ2luYWxLZXkgPSBleHBhbmRlZFVwZGF0ZXNba2V5XTtcbiAgICAgIHZhciBjb3JyZWN0T3JpZ2luYWxLZXkgPSBleHBhbmRlZFN0eWxlc1trZXldO1xuXG4gICAgICBpZiAoY29ycmVjdE9yaWdpbmFsS2V5ICYmIG9yaWdpbmFsS2V5ICE9PSBjb3JyZWN0T3JpZ2luYWxLZXkpIHtcbiAgICAgICAgdmFyIHdhcm5pbmdLZXkgPSBvcmlnaW5hbEtleSArICcsJyArIGNvcnJlY3RPcmlnaW5hbEtleTtcblxuICAgICAgICBpZiAod2FybmVkQWJvdXRbd2FybmluZ0tleV0pIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHdhcm5lZEFib3V0W3dhcm5pbmdLZXldID0gdHJ1ZTtcblxuICAgICAgICBlcnJvcignJXMgYSBzdHlsZSBwcm9wZXJ0eSBkdXJpbmcgcmVyZW5kZXIgKCVzKSB3aGVuIGEgJyArICdjb25mbGljdGluZyBwcm9wZXJ0eSBpcyBzZXQgKCVzKSBjYW4gbGVhZCB0byBzdHlsaW5nIGJ1Z3MuIFRvICcgKyBcImF2b2lkIHRoaXMsIGRvbid0IG1peCBzaG9ydGhhbmQgYW5kIG5vbi1zaG9ydGhhbmQgcHJvcGVydGllcyBcIiArICdmb3IgdGhlIHNhbWUgdmFsdWU7IGluc3RlYWQsIHJlcGxhY2UgdGhlIHNob3J0aGFuZCB3aXRoICcgKyAnc2VwYXJhdGUgdmFsdWVzLicsIGlzVmFsdWVFbXB0eShzdHlsZVVwZGF0ZXNbb3JpZ2luYWxLZXldKSA/ICdSZW1vdmluZycgOiAnVXBkYXRpbmcnLCBvcmlnaW5hbEtleSwgY29ycmVjdE9yaWdpbmFsS2V5KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8gRm9yIEhUTUwsIGNlcnRhaW4gdGFncyBzaG91bGQgb21pdCB0aGVpciBjbG9zZSB0YWcuIFdlIGtlZXAgYSBsaXN0IGZvclxuLy8gdGhvc2Ugc3BlY2lhbC1jYXNlIHRhZ3MuXG52YXIgb21pdHRlZENsb3NlVGFncyA9IHtcbiAgYXJlYTogdHJ1ZSxcbiAgYmFzZTogdHJ1ZSxcbiAgYnI6IHRydWUsXG4gIGNvbDogdHJ1ZSxcbiAgZW1iZWQ6IHRydWUsXG4gIGhyOiB0cnVlLFxuICBpbWc6IHRydWUsXG4gIGlucHV0OiB0cnVlLFxuICBrZXlnZW46IHRydWUsXG4gIGxpbms6IHRydWUsXG4gIG1ldGE6IHRydWUsXG4gIHBhcmFtOiB0cnVlLFxuICBzb3VyY2U6IHRydWUsXG4gIHRyYWNrOiB0cnVlLFxuICB3YnI6IHRydWUgLy8gTk9URTogbWVudWl0ZW0ncyBjbG9zZSB0YWcgc2hvdWxkIGJlIG9taXR0ZWQsIGJ1dCB0aGF0IGNhdXNlcyBwcm9ibGVtcy5cblxufTtcblxuLy8gYG9taXR0ZWRDbG9zZVRhZ3NgIGV4Y2VwdCB0aGF0IGBtZW51aXRlbWAgc2hvdWxkIHN0aWxsIGhhdmUgaXRzIGNsb3NpbmcgdGFnLlxuXG52YXIgdm9pZEVsZW1lbnRUYWdzID0gX2Fzc2lnbih7XG4gIG1lbnVpdGVtOiB0cnVlXG59LCBvbWl0dGVkQ2xvc2VUYWdzKTtcblxudmFyIEhUTUwgPSAnX19odG1sJztcblxuZnVuY3Rpb24gYXNzZXJ0VmFsaWRQcm9wcyh0YWcsIHByb3BzKSB7XG4gIGlmICghcHJvcHMpIHtcbiAgICByZXR1cm47XG4gIH0gLy8gTm90ZSB0aGUgdXNlIG9mIGA9PWAgd2hpY2ggY2hlY2tzIGZvciBudWxsIG9yIHVuZGVmaW5lZC5cblxuXG4gIGlmICh2b2lkRWxlbWVudFRhZ3NbdGFnXSkge1xuICAgIGlmICghKHByb3BzLmNoaWxkcmVuID09IG51bGwgJiYgcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgPT0gbnVsbCkpIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIHRhZyArIFwiIGlzIGEgdm9pZCBlbGVtZW50IHRhZyBhbmQgbXVzdCBuZWl0aGVyIGhhdmUgYGNoaWxkcmVuYCBub3IgdXNlIGBkYW5nZXJvdXNseVNldElubmVySFRNTGAuXCIgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAocHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgIT0gbnVsbCkge1xuICAgIGlmICghKHByb3BzLmNoaWxkcmVuID09IG51bGwpKSB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIkNhbiBvbmx5IHNldCBvbmUgb2YgYGNoaWxkcmVuYCBvciBgcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgLlwiICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCEodHlwZW9mIHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MID09PSAnb2JqZWN0JyAmJiBIVE1MIGluIHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MKSkge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJgcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgIG11c3QgYmUgaW4gdGhlIGZvcm0gYHtfX2h0bWw6IC4uLn1gLiBQbGVhc2UgdmlzaXQgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2Rhbmdlcm91c2x5LXNldC1pbm5lci1odG1sIGZvciBtb3JlIGluZm9ybWF0aW9uLlwiICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAge1xuICAgIGlmICghcHJvcHMuc3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nICYmIHByb3BzLmNvbnRlbnRFZGl0YWJsZSAmJiBwcm9wcy5jaGlsZHJlbiAhPSBudWxsKSB7XG4gICAgICBlcnJvcignQSBjb21wb25lbnQgaXMgYGNvbnRlbnRFZGl0YWJsZWAgYW5kIGNvbnRhaW5zIGBjaGlsZHJlbmAgbWFuYWdlZCBieSAnICsgJ1JlYWN0LiBJdCBpcyBub3cgeW91ciByZXNwb25zaWJpbGl0eSB0byBndWFyYW50ZWUgdGhhdCBub25lIG9mICcgKyAndGhvc2Ugbm9kZXMgYXJlIHVuZXhwZWN0ZWRseSBtb2RpZmllZCBvciBkdXBsaWNhdGVkLiBUaGlzIGlzICcgKyAncHJvYmFibHkgbm90IGludGVudGlvbmFsLicpO1xuICAgIH1cbiAgfVxuXG4gIGlmICghKHByb3BzLnN0eWxlID09IG51bGwgfHwgdHlwZW9mIHByb3BzLnN0eWxlID09PSAnb2JqZWN0JykpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJUaGUgYHN0eWxlYCBwcm9wIGV4cGVjdHMgYSBtYXBwaW5nIGZyb20gc3R5bGUgcHJvcGVydGllcyB0byB2YWx1ZXMsIG5vdCBhIHN0cmluZy4gRm9yIGV4YW1wbGUsIHN0eWxlPXt7bWFyZ2luUmlnaHQ6IHNwYWNpbmcgKyAnZW0nfX0gd2hlbiB1c2luZyBKU1guXCIgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNDdXN0b21Db21wb25lbnQodGFnTmFtZSwgcHJvcHMpIHtcbiAgaWYgKHRhZ05hbWUuaW5kZXhPZignLScpID09PSAtMSkge1xuICAgIHJldHVybiB0eXBlb2YgcHJvcHMuaXMgPT09ICdzdHJpbmcnO1xuICB9XG5cbiAgc3dpdGNoICh0YWdOYW1lKSB7XG4gICAgLy8gVGhlc2UgYXJlIHJlc2VydmVkIFNWRyBhbmQgTWF0aE1MIGVsZW1lbnRzLlxuICAgIC8vIFdlIGRvbid0IG1pbmQgdGhpcyBsaXN0IHRvbyBtdWNoIGJlY2F1c2Ugd2UgZXhwZWN0IGl0IHRvIG5ldmVyIGdyb3cuXG4gICAgLy8gVGhlIGFsdGVybmF0aXZlIGlzIHRvIHRyYWNrIHRoZSBuYW1lc3BhY2UgaW4gYSBmZXcgcGxhY2VzIHdoaWNoIGlzIGNvbnZvbHV0ZWQuXG4gICAgLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmNvbXBvbmVudHMvc3BlYy9jdXN0b20vI2N1c3RvbS1lbGVtZW50cy1jb3JlLWNvbmNlcHRzXG4gICAgY2FzZSAnYW5ub3RhdGlvbi14bWwnOlxuICAgIGNhc2UgJ2NvbG9yLXByb2ZpbGUnOlxuICAgIGNhc2UgJ2ZvbnQtZmFjZSc6XG4gICAgY2FzZSAnZm9udC1mYWNlLXNyYyc6XG4gICAgY2FzZSAnZm9udC1mYWNlLXVyaSc6XG4gICAgY2FzZSAnZm9udC1mYWNlLWZvcm1hdCc6XG4gICAgY2FzZSAnZm9udC1mYWNlLW5hbWUnOlxuICAgIGNhc2UgJ21pc3NpbmctZ2x5cGgnOlxuICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbi8vIFdoZW4gYWRkaW5nIGF0dHJpYnV0ZXMgdG8gdGhlIEhUTUwgb3IgU1ZHIGFsbG93ZWQgYXR0cmlidXRlIGxpc3QsIGJlIHN1cmUgdG9cbi8vIGFsc28gYWRkIHRoZW0gdG8gdGhpcyBtb2R1bGUgdG8gZW5zdXJlIGNhc2luZyBhbmQgaW5jb3JyZWN0IG5hbWVcbi8vIHdhcm5pbmdzLlxudmFyIHBvc3NpYmxlU3RhbmRhcmROYW1lcyA9IHtcbiAgLy8gSFRNTFxuICBhY2NlcHQ6ICdhY2NlcHQnLFxuICBhY2NlcHRjaGFyc2V0OiAnYWNjZXB0Q2hhcnNldCcsXG4gICdhY2NlcHQtY2hhcnNldCc6ICdhY2NlcHRDaGFyc2V0JyxcbiAgYWNjZXNza2V5OiAnYWNjZXNzS2V5JyxcbiAgYWN0aW9uOiAnYWN0aW9uJyxcbiAgYWxsb3dmdWxsc2NyZWVuOiAnYWxsb3dGdWxsU2NyZWVuJyxcbiAgYWx0OiAnYWx0JyxcbiAgYXM6ICdhcycsXG4gIGFzeW5jOiAnYXN5bmMnLFxuICBhdXRvY2FwaXRhbGl6ZTogJ2F1dG9DYXBpdGFsaXplJyxcbiAgYXV0b2NvbXBsZXRlOiAnYXV0b0NvbXBsZXRlJyxcbiAgYXV0b2NvcnJlY3Q6ICdhdXRvQ29ycmVjdCcsXG4gIGF1dG9mb2N1czogJ2F1dG9Gb2N1cycsXG4gIGF1dG9wbGF5OiAnYXV0b1BsYXknLFxuICBhdXRvc2F2ZTogJ2F1dG9TYXZlJyxcbiAgY2FwdHVyZTogJ2NhcHR1cmUnLFxuICBjZWxscGFkZGluZzogJ2NlbGxQYWRkaW5nJyxcbiAgY2VsbHNwYWNpbmc6ICdjZWxsU3BhY2luZycsXG4gIGNoYWxsZW5nZTogJ2NoYWxsZW5nZScsXG4gIGNoYXJzZXQ6ICdjaGFyU2V0JyxcbiAgY2hlY2tlZDogJ2NoZWNrZWQnLFxuICBjaGlsZHJlbjogJ2NoaWxkcmVuJyxcbiAgY2l0ZTogJ2NpdGUnLFxuICBjbGFzczogJ2NsYXNzTmFtZScsXG4gIGNsYXNzaWQ6ICdjbGFzc0lEJyxcbiAgY2xhc3NuYW1lOiAnY2xhc3NOYW1lJyxcbiAgY29sczogJ2NvbHMnLFxuICBjb2xzcGFuOiAnY29sU3BhbicsXG4gIGNvbnRlbnQ6ICdjb250ZW50JyxcbiAgY29udGVudGVkaXRhYmxlOiAnY29udGVudEVkaXRhYmxlJyxcbiAgY29udGV4dG1lbnU6ICdjb250ZXh0TWVudScsXG4gIGNvbnRyb2xzOiAnY29udHJvbHMnLFxuICBjb250cm9sc2xpc3Q6ICdjb250cm9sc0xpc3QnLFxuICBjb29yZHM6ICdjb29yZHMnLFxuICBjcm9zc29yaWdpbjogJ2Nyb3NzT3JpZ2luJyxcbiAgZGFuZ2Vyb3VzbHlzZXRpbm5lcmh0bWw6ICdkYW5nZXJvdXNseVNldElubmVySFRNTCcsXG4gIGRhdGE6ICdkYXRhJyxcbiAgZGF0ZXRpbWU6ICdkYXRlVGltZScsXG4gIGRlZmF1bHQ6ICdkZWZhdWx0JyxcbiAgZGVmYXVsdGNoZWNrZWQ6ICdkZWZhdWx0Q2hlY2tlZCcsXG4gIGRlZmF1bHR2YWx1ZTogJ2RlZmF1bHRWYWx1ZScsXG4gIGRlZmVyOiAnZGVmZXInLFxuICBkaXI6ICdkaXInLFxuICBkaXNhYmxlZDogJ2Rpc2FibGVkJyxcbiAgZGlzYWJsZXBpY3R1cmVpbnBpY3R1cmU6ICdkaXNhYmxlUGljdHVyZUluUGljdHVyZScsXG4gIGRpc2FibGVyZW1vdGVwbGF5YmFjazogJ2Rpc2FibGVSZW1vdGVQbGF5YmFjaycsXG4gIGRvd25sb2FkOiAnZG93bmxvYWQnLFxuICBkcmFnZ2FibGU6ICdkcmFnZ2FibGUnLFxuICBlbmN0eXBlOiAnZW5jVHlwZScsXG4gIGVudGVya2V5aGludDogJ2VudGVyS2V5SGludCcsXG4gIGZvcjogJ2h0bWxGb3InLFxuICBmb3JtOiAnZm9ybScsXG4gIGZvcm1tZXRob2Q6ICdmb3JtTWV0aG9kJyxcbiAgZm9ybWFjdGlvbjogJ2Zvcm1BY3Rpb24nLFxuICBmb3JtZW5jdHlwZTogJ2Zvcm1FbmNUeXBlJyxcbiAgZm9ybW5vdmFsaWRhdGU6ICdmb3JtTm9WYWxpZGF0ZScsXG4gIGZvcm10YXJnZXQ6ICdmb3JtVGFyZ2V0JyxcbiAgZnJhbWVib3JkZXI6ICdmcmFtZUJvcmRlcicsXG4gIGhlYWRlcnM6ICdoZWFkZXJzJyxcbiAgaGVpZ2h0OiAnaGVpZ2h0JyxcbiAgaGlkZGVuOiAnaGlkZGVuJyxcbiAgaGlnaDogJ2hpZ2gnLFxuICBocmVmOiAnaHJlZicsXG4gIGhyZWZsYW5nOiAnaHJlZkxhbmcnLFxuICBodG1sZm9yOiAnaHRtbEZvcicsXG4gIGh0dHBlcXVpdjogJ2h0dHBFcXVpdicsXG4gICdodHRwLWVxdWl2JzogJ2h0dHBFcXVpdicsXG4gIGljb246ICdpY29uJyxcbiAgaWQ6ICdpZCcsXG4gIGlubmVyaHRtbDogJ2lubmVySFRNTCcsXG4gIGlucHV0bW9kZTogJ2lucHV0TW9kZScsXG4gIGludGVncml0eTogJ2ludGVncml0eScsXG4gIGlzOiAnaXMnLFxuICBpdGVtaWQ6ICdpdGVtSUQnLFxuICBpdGVtcHJvcDogJ2l0ZW1Qcm9wJyxcbiAgaXRlbXJlZjogJ2l0ZW1SZWYnLFxuICBpdGVtc2NvcGU6ICdpdGVtU2NvcGUnLFxuICBpdGVtdHlwZTogJ2l0ZW1UeXBlJyxcbiAga2V5cGFyYW1zOiAna2V5UGFyYW1zJyxcbiAga2V5dHlwZTogJ2tleVR5cGUnLFxuICBraW5kOiAna2luZCcsXG4gIGxhYmVsOiAnbGFiZWwnLFxuICBsYW5nOiAnbGFuZycsXG4gIGxpc3Q6ICdsaXN0JyxcbiAgbG9vcDogJ2xvb3AnLFxuICBsb3c6ICdsb3cnLFxuICBtYW5pZmVzdDogJ21hbmlmZXN0JyxcbiAgbWFyZ2lud2lkdGg6ICdtYXJnaW5XaWR0aCcsXG4gIG1hcmdpbmhlaWdodDogJ21hcmdpbkhlaWdodCcsXG4gIG1heDogJ21heCcsXG4gIG1heGxlbmd0aDogJ21heExlbmd0aCcsXG4gIG1lZGlhOiAnbWVkaWEnLFxuICBtZWRpYWdyb3VwOiAnbWVkaWFHcm91cCcsXG4gIG1ldGhvZDogJ21ldGhvZCcsXG4gIG1pbjogJ21pbicsXG4gIG1pbmxlbmd0aDogJ21pbkxlbmd0aCcsXG4gIG11bHRpcGxlOiAnbXVsdGlwbGUnLFxuICBtdXRlZDogJ211dGVkJyxcbiAgbmFtZTogJ25hbWUnLFxuICBub21vZHVsZTogJ25vTW9kdWxlJyxcbiAgbm9uY2U6ICdub25jZScsXG4gIG5vdmFsaWRhdGU6ICdub1ZhbGlkYXRlJyxcbiAgb3BlbjogJ29wZW4nLFxuICBvcHRpbXVtOiAnb3B0aW11bScsXG4gIHBhdHRlcm46ICdwYXR0ZXJuJyxcbiAgcGxhY2Vob2xkZXI6ICdwbGFjZWhvbGRlcicsXG4gIHBsYXlzaW5saW5lOiAncGxheXNJbmxpbmUnLFxuICBwb3N0ZXI6ICdwb3N0ZXInLFxuICBwcmVsb2FkOiAncHJlbG9hZCcsXG4gIHByb2ZpbGU6ICdwcm9maWxlJyxcbiAgcmFkaW9ncm91cDogJ3JhZGlvR3JvdXAnLFxuICByZWFkb25seTogJ3JlYWRPbmx5JyxcbiAgcmVmZXJyZXJwb2xpY3k6ICdyZWZlcnJlclBvbGljeScsXG4gIHJlbDogJ3JlbCcsXG4gIHJlcXVpcmVkOiAncmVxdWlyZWQnLFxuICByZXZlcnNlZDogJ3JldmVyc2VkJyxcbiAgcm9sZTogJ3JvbGUnLFxuICByb3dzOiAncm93cycsXG4gIHJvd3NwYW46ICdyb3dTcGFuJyxcbiAgc2FuZGJveDogJ3NhbmRib3gnLFxuICBzY29wZTogJ3Njb3BlJyxcbiAgc2NvcGVkOiAnc2NvcGVkJyxcbiAgc2Nyb2xsaW5nOiAnc2Nyb2xsaW5nJyxcbiAgc2VhbWxlc3M6ICdzZWFtbGVzcycsXG4gIHNlbGVjdGVkOiAnc2VsZWN0ZWQnLFxuICBzaGFwZTogJ3NoYXBlJyxcbiAgc2l6ZTogJ3NpemUnLFxuICBzaXplczogJ3NpemVzJyxcbiAgc3BhbjogJ3NwYW4nLFxuICBzcGVsbGNoZWNrOiAnc3BlbGxDaGVjaycsXG4gIHNyYzogJ3NyYycsXG4gIHNyY2RvYzogJ3NyY0RvYycsXG4gIHNyY2xhbmc6ICdzcmNMYW5nJyxcbiAgc3Jjc2V0OiAnc3JjU2V0JyxcbiAgc3RhcnQ6ICdzdGFydCcsXG4gIHN0ZXA6ICdzdGVwJyxcbiAgc3R5bGU6ICdzdHlsZScsXG4gIHN1bW1hcnk6ICdzdW1tYXJ5JyxcbiAgdGFiaW5kZXg6ICd0YWJJbmRleCcsXG4gIHRhcmdldDogJ3RhcmdldCcsXG4gIHRpdGxlOiAndGl0bGUnLFxuICB0eXBlOiAndHlwZScsXG4gIHVzZW1hcDogJ3VzZU1hcCcsXG4gIHZhbHVlOiAndmFsdWUnLFxuICB3aWR0aDogJ3dpZHRoJyxcbiAgd21vZGU6ICd3bW9kZScsXG4gIHdyYXA6ICd3cmFwJyxcbiAgLy8gU1ZHXG4gIGFib3V0OiAnYWJvdXQnLFxuICBhY2NlbnRoZWlnaHQ6ICdhY2NlbnRIZWlnaHQnLFxuICAnYWNjZW50LWhlaWdodCc6ICdhY2NlbnRIZWlnaHQnLFxuICBhY2N1bXVsYXRlOiAnYWNjdW11bGF0ZScsXG4gIGFkZGl0aXZlOiAnYWRkaXRpdmUnLFxuICBhbGlnbm1lbnRiYXNlbGluZTogJ2FsaWdubWVudEJhc2VsaW5lJyxcbiAgJ2FsaWdubWVudC1iYXNlbGluZSc6ICdhbGlnbm1lbnRCYXNlbGluZScsXG4gIGFsbG93cmVvcmRlcjogJ2FsbG93UmVvcmRlcicsXG4gIGFscGhhYmV0aWM6ICdhbHBoYWJldGljJyxcbiAgYW1wbGl0dWRlOiAnYW1wbGl0dWRlJyxcbiAgYXJhYmljZm9ybTogJ2FyYWJpY0Zvcm0nLFxuICAnYXJhYmljLWZvcm0nOiAnYXJhYmljRm9ybScsXG4gIGFzY2VudDogJ2FzY2VudCcsXG4gIGF0dHJpYnV0ZW5hbWU6ICdhdHRyaWJ1dGVOYW1lJyxcbiAgYXR0cmlidXRldHlwZTogJ2F0dHJpYnV0ZVR5cGUnLFxuICBhdXRvcmV2ZXJzZTogJ2F1dG9SZXZlcnNlJyxcbiAgYXppbXV0aDogJ2F6aW11dGgnLFxuICBiYXNlZnJlcXVlbmN5OiAnYmFzZUZyZXF1ZW5jeScsXG4gIGJhc2VsaW5lc2hpZnQ6ICdiYXNlbGluZVNoaWZ0JyxcbiAgJ2Jhc2VsaW5lLXNoaWZ0JzogJ2Jhc2VsaW5lU2hpZnQnLFxuICBiYXNlcHJvZmlsZTogJ2Jhc2VQcm9maWxlJyxcbiAgYmJveDogJ2Jib3gnLFxuICBiZWdpbjogJ2JlZ2luJyxcbiAgYmlhczogJ2JpYXMnLFxuICBieTogJ2J5JyxcbiAgY2FsY21vZGU6ICdjYWxjTW9kZScsXG4gIGNhcGhlaWdodDogJ2NhcEhlaWdodCcsXG4gICdjYXAtaGVpZ2h0JzogJ2NhcEhlaWdodCcsXG4gIGNsaXA6ICdjbGlwJyxcbiAgY2xpcHBhdGg6ICdjbGlwUGF0aCcsXG4gICdjbGlwLXBhdGgnOiAnY2xpcFBhdGgnLFxuICBjbGlwcGF0aHVuaXRzOiAnY2xpcFBhdGhVbml0cycsXG4gIGNsaXBydWxlOiAnY2xpcFJ1bGUnLFxuICAnY2xpcC1ydWxlJzogJ2NsaXBSdWxlJyxcbiAgY29sb3I6ICdjb2xvcicsXG4gIGNvbG9yaW50ZXJwb2xhdGlvbjogJ2NvbG9ySW50ZXJwb2xhdGlvbicsXG4gICdjb2xvci1pbnRlcnBvbGF0aW9uJzogJ2NvbG9ySW50ZXJwb2xhdGlvbicsXG4gIGNvbG9yaW50ZXJwb2xhdGlvbmZpbHRlcnM6ICdjb2xvckludGVycG9sYXRpb25GaWx0ZXJzJyxcbiAgJ2NvbG9yLWludGVycG9sYXRpb24tZmlsdGVycyc6ICdjb2xvckludGVycG9sYXRpb25GaWx0ZXJzJyxcbiAgY29sb3Jwcm9maWxlOiAnY29sb3JQcm9maWxlJyxcbiAgJ2NvbG9yLXByb2ZpbGUnOiAnY29sb3JQcm9maWxlJyxcbiAgY29sb3JyZW5kZXJpbmc6ICdjb2xvclJlbmRlcmluZycsXG4gICdjb2xvci1yZW5kZXJpbmcnOiAnY29sb3JSZW5kZXJpbmcnLFxuICBjb250ZW50c2NyaXB0dHlwZTogJ2NvbnRlbnRTY3JpcHRUeXBlJyxcbiAgY29udGVudHN0eWxldHlwZTogJ2NvbnRlbnRTdHlsZVR5cGUnLFxuICBjdXJzb3I6ICdjdXJzb3InLFxuICBjeDogJ2N4JyxcbiAgY3k6ICdjeScsXG4gIGQ6ICdkJyxcbiAgZGF0YXR5cGU6ICdkYXRhdHlwZScsXG4gIGRlY2VsZXJhdGU6ICdkZWNlbGVyYXRlJyxcbiAgZGVzY2VudDogJ2Rlc2NlbnQnLFxuICBkaWZmdXNlY29uc3RhbnQ6ICdkaWZmdXNlQ29uc3RhbnQnLFxuICBkaXJlY3Rpb246ICdkaXJlY3Rpb24nLFxuICBkaXNwbGF5OiAnZGlzcGxheScsXG4gIGRpdmlzb3I6ICdkaXZpc29yJyxcbiAgZG9taW5hbnRiYXNlbGluZTogJ2RvbWluYW50QmFzZWxpbmUnLFxuICAnZG9taW5hbnQtYmFzZWxpbmUnOiAnZG9taW5hbnRCYXNlbGluZScsXG4gIGR1cjogJ2R1cicsXG4gIGR4OiAnZHgnLFxuICBkeTogJ2R5JyxcbiAgZWRnZW1vZGU6ICdlZGdlTW9kZScsXG4gIGVsZXZhdGlvbjogJ2VsZXZhdGlvbicsXG4gIGVuYWJsZWJhY2tncm91bmQ6ICdlbmFibGVCYWNrZ3JvdW5kJyxcbiAgJ2VuYWJsZS1iYWNrZ3JvdW5kJzogJ2VuYWJsZUJhY2tncm91bmQnLFxuICBlbmQ6ICdlbmQnLFxuICBleHBvbmVudDogJ2V4cG9uZW50JyxcbiAgZXh0ZXJuYWxyZXNvdXJjZXNyZXF1aXJlZDogJ2V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQnLFxuICBmaWxsOiAnZmlsbCcsXG4gIGZpbGxvcGFjaXR5OiAnZmlsbE9wYWNpdHknLFxuICAnZmlsbC1vcGFjaXR5JzogJ2ZpbGxPcGFjaXR5JyxcbiAgZmlsbHJ1bGU6ICdmaWxsUnVsZScsXG4gICdmaWxsLXJ1bGUnOiAnZmlsbFJ1bGUnLFxuICBmaWx0ZXI6ICdmaWx0ZXInLFxuICBmaWx0ZXJyZXM6ICdmaWx0ZXJSZXMnLFxuICBmaWx0ZXJ1bml0czogJ2ZpbHRlclVuaXRzJyxcbiAgZmxvb2RvcGFjaXR5OiAnZmxvb2RPcGFjaXR5JyxcbiAgJ2Zsb29kLW9wYWNpdHknOiAnZmxvb2RPcGFjaXR5JyxcbiAgZmxvb2Rjb2xvcjogJ2Zsb29kQ29sb3InLFxuICAnZmxvb2QtY29sb3InOiAnZmxvb2RDb2xvcicsXG4gIGZvY3VzYWJsZTogJ2ZvY3VzYWJsZScsXG4gIGZvbnRmYW1pbHk6ICdmb250RmFtaWx5JyxcbiAgJ2ZvbnQtZmFtaWx5JzogJ2ZvbnRGYW1pbHknLFxuICBmb250c2l6ZTogJ2ZvbnRTaXplJyxcbiAgJ2ZvbnQtc2l6ZSc6ICdmb250U2l6ZScsXG4gIGZvbnRzaXplYWRqdXN0OiAnZm9udFNpemVBZGp1c3QnLFxuICAnZm9udC1zaXplLWFkanVzdCc6ICdmb250U2l6ZUFkanVzdCcsXG4gIGZvbnRzdHJldGNoOiAnZm9udFN0cmV0Y2gnLFxuICAnZm9udC1zdHJldGNoJzogJ2ZvbnRTdHJldGNoJyxcbiAgZm9udHN0eWxlOiAnZm9udFN0eWxlJyxcbiAgJ2ZvbnQtc3R5bGUnOiAnZm9udFN0eWxlJyxcbiAgZm9udHZhcmlhbnQ6ICdmb250VmFyaWFudCcsXG4gICdmb250LXZhcmlhbnQnOiAnZm9udFZhcmlhbnQnLFxuICBmb250d2VpZ2h0OiAnZm9udFdlaWdodCcsXG4gICdmb250LXdlaWdodCc6ICdmb250V2VpZ2h0JyxcbiAgZm9ybWF0OiAnZm9ybWF0JyxcbiAgZnJvbTogJ2Zyb20nLFxuICBmeDogJ2Z4JyxcbiAgZnk6ICdmeScsXG4gIGcxOiAnZzEnLFxuICBnMjogJ2cyJyxcbiAgZ2x5cGhuYW1lOiAnZ2x5cGhOYW1lJyxcbiAgJ2dseXBoLW5hbWUnOiAnZ2x5cGhOYW1lJyxcbiAgZ2x5cGhvcmllbnRhdGlvbmhvcml6b250YWw6ICdnbHlwaE9yaWVudGF0aW9uSG9yaXpvbnRhbCcsXG4gICdnbHlwaC1vcmllbnRhdGlvbi1ob3Jpem9udGFsJzogJ2dseXBoT3JpZW50YXRpb25Ib3Jpem9udGFsJyxcbiAgZ2x5cGhvcmllbnRhdGlvbnZlcnRpY2FsOiAnZ2x5cGhPcmllbnRhdGlvblZlcnRpY2FsJyxcbiAgJ2dseXBoLW9yaWVudGF0aW9uLXZlcnRpY2FsJzogJ2dseXBoT3JpZW50YXRpb25WZXJ0aWNhbCcsXG4gIGdseXBocmVmOiAnZ2x5cGhSZWYnLFxuICBncmFkaWVudHRyYW5zZm9ybTogJ2dyYWRpZW50VHJhbnNmb3JtJyxcbiAgZ3JhZGllbnR1bml0czogJ2dyYWRpZW50VW5pdHMnLFxuICBoYW5naW5nOiAnaGFuZ2luZycsXG4gIGhvcml6YWR2eDogJ2hvcml6QWR2WCcsXG4gICdob3Jpei1hZHYteCc6ICdob3JpekFkdlgnLFxuICBob3Jpem9yaWdpbng6ICdob3Jpek9yaWdpblgnLFxuICAnaG9yaXotb3JpZ2luLXgnOiAnaG9yaXpPcmlnaW5YJyxcbiAgaWRlb2dyYXBoaWM6ICdpZGVvZ3JhcGhpYycsXG4gIGltYWdlcmVuZGVyaW5nOiAnaW1hZ2VSZW5kZXJpbmcnLFxuICAnaW1hZ2UtcmVuZGVyaW5nJzogJ2ltYWdlUmVuZGVyaW5nJyxcbiAgaW4yOiAnaW4yJyxcbiAgaW46ICdpbicsXG4gIGlubGlzdDogJ2lubGlzdCcsXG4gIGludGVyY2VwdDogJ2ludGVyY2VwdCcsXG4gIGsxOiAnazEnLFxuICBrMjogJ2syJyxcbiAgazM6ICdrMycsXG4gIGs0OiAnazQnLFxuICBrOiAnaycsXG4gIGtlcm5lbG1hdHJpeDogJ2tlcm5lbE1hdHJpeCcsXG4gIGtlcm5lbHVuaXRsZW5ndGg6ICdrZXJuZWxVbml0TGVuZ3RoJyxcbiAga2VybmluZzogJ2tlcm5pbmcnLFxuICBrZXlwb2ludHM6ICdrZXlQb2ludHMnLFxuICBrZXlzcGxpbmVzOiAna2V5U3BsaW5lcycsXG4gIGtleXRpbWVzOiAna2V5VGltZXMnLFxuICBsZW5ndGhhZGp1c3Q6ICdsZW5ndGhBZGp1c3QnLFxuICBsZXR0ZXJzcGFjaW5nOiAnbGV0dGVyU3BhY2luZycsXG4gICdsZXR0ZXItc3BhY2luZyc6ICdsZXR0ZXJTcGFjaW5nJyxcbiAgbGlnaHRpbmdjb2xvcjogJ2xpZ2h0aW5nQ29sb3InLFxuICAnbGlnaHRpbmctY29sb3InOiAnbGlnaHRpbmdDb2xvcicsXG4gIGxpbWl0aW5nY29uZWFuZ2xlOiAnbGltaXRpbmdDb25lQW5nbGUnLFxuICBsb2NhbDogJ2xvY2FsJyxcbiAgbWFya2VyZW5kOiAnbWFya2VyRW5kJyxcbiAgJ21hcmtlci1lbmQnOiAnbWFya2VyRW5kJyxcbiAgbWFya2VyaGVpZ2h0OiAnbWFya2VySGVpZ2h0JyxcbiAgbWFya2VybWlkOiAnbWFya2VyTWlkJyxcbiAgJ21hcmtlci1taWQnOiAnbWFya2VyTWlkJyxcbiAgbWFya2Vyc3RhcnQ6ICdtYXJrZXJTdGFydCcsXG4gICdtYXJrZXItc3RhcnQnOiAnbWFya2VyU3RhcnQnLFxuICBtYXJrZXJ1bml0czogJ21hcmtlclVuaXRzJyxcbiAgbWFya2Vyd2lkdGg6ICdtYXJrZXJXaWR0aCcsXG4gIG1hc2s6ICdtYXNrJyxcbiAgbWFza2NvbnRlbnR1bml0czogJ21hc2tDb250ZW50VW5pdHMnLFxuICBtYXNrdW5pdHM6ICdtYXNrVW5pdHMnLFxuICBtYXRoZW1hdGljYWw6ICdtYXRoZW1hdGljYWwnLFxuICBtb2RlOiAnbW9kZScsXG4gIG51bW9jdGF2ZXM6ICdudW1PY3RhdmVzJyxcbiAgb2Zmc2V0OiAnb2Zmc2V0JyxcbiAgb3BhY2l0eTogJ29wYWNpdHknLFxuICBvcGVyYXRvcjogJ29wZXJhdG9yJyxcbiAgb3JkZXI6ICdvcmRlcicsXG4gIG9yaWVudDogJ29yaWVudCcsXG4gIG9yaWVudGF0aW9uOiAnb3JpZW50YXRpb24nLFxuICBvcmlnaW46ICdvcmlnaW4nLFxuICBvdmVyZmxvdzogJ292ZXJmbG93JyxcbiAgb3ZlcmxpbmVwb3NpdGlvbjogJ292ZXJsaW5lUG9zaXRpb24nLFxuICAnb3ZlcmxpbmUtcG9zaXRpb24nOiAnb3ZlcmxpbmVQb3NpdGlvbicsXG4gIG92ZXJsaW5ldGhpY2tuZXNzOiAnb3ZlcmxpbmVUaGlja25lc3MnLFxuICAnb3ZlcmxpbmUtdGhpY2tuZXNzJzogJ292ZXJsaW5lVGhpY2tuZXNzJyxcbiAgcGFpbnRvcmRlcjogJ3BhaW50T3JkZXInLFxuICAncGFpbnQtb3JkZXInOiAncGFpbnRPcmRlcicsXG4gIHBhbm9zZTE6ICdwYW5vc2UxJyxcbiAgJ3Bhbm9zZS0xJzogJ3Bhbm9zZTEnLFxuICBwYXRobGVuZ3RoOiAncGF0aExlbmd0aCcsXG4gIHBhdHRlcm5jb250ZW50dW5pdHM6ICdwYXR0ZXJuQ29udGVudFVuaXRzJyxcbiAgcGF0dGVybnRyYW5zZm9ybTogJ3BhdHRlcm5UcmFuc2Zvcm0nLFxuICBwYXR0ZXJudW5pdHM6ICdwYXR0ZXJuVW5pdHMnLFxuICBwb2ludGVyZXZlbnRzOiAncG9pbnRlckV2ZW50cycsXG4gICdwb2ludGVyLWV2ZW50cyc6ICdwb2ludGVyRXZlbnRzJyxcbiAgcG9pbnRzOiAncG9pbnRzJyxcbiAgcG9pbnRzYXR4OiAncG9pbnRzQXRYJyxcbiAgcG9pbnRzYXR5OiAncG9pbnRzQXRZJyxcbiAgcG9pbnRzYXR6OiAncG9pbnRzQXRaJyxcbiAgcHJlZml4OiAncHJlZml4JyxcbiAgcHJlc2VydmVhbHBoYTogJ3ByZXNlcnZlQWxwaGEnLFxuICBwcmVzZXJ2ZWFzcGVjdHJhdGlvOiAncHJlc2VydmVBc3BlY3RSYXRpbycsXG4gIHByaW1pdGl2ZXVuaXRzOiAncHJpbWl0aXZlVW5pdHMnLFxuICBwcm9wZXJ0eTogJ3Byb3BlcnR5JyxcbiAgcjogJ3InLFxuICByYWRpdXM6ICdyYWRpdXMnLFxuICByZWZ4OiAncmVmWCcsXG4gIHJlZnk6ICdyZWZZJyxcbiAgcmVuZGVyaW5naW50ZW50OiAncmVuZGVyaW5nSW50ZW50JyxcbiAgJ3JlbmRlcmluZy1pbnRlbnQnOiAncmVuZGVyaW5nSW50ZW50JyxcbiAgcmVwZWF0Y291bnQ6ICdyZXBlYXRDb3VudCcsXG4gIHJlcGVhdGR1cjogJ3JlcGVhdER1cicsXG4gIHJlcXVpcmVkZXh0ZW5zaW9uczogJ3JlcXVpcmVkRXh0ZW5zaW9ucycsXG4gIHJlcXVpcmVkZmVhdHVyZXM6ICdyZXF1aXJlZEZlYXR1cmVzJyxcbiAgcmVzb3VyY2U6ICdyZXNvdXJjZScsXG4gIHJlc3RhcnQ6ICdyZXN0YXJ0JyxcbiAgcmVzdWx0OiAncmVzdWx0JyxcbiAgcmVzdWx0czogJ3Jlc3VsdHMnLFxuICByb3RhdGU6ICdyb3RhdGUnLFxuICByeDogJ3J4JyxcbiAgcnk6ICdyeScsXG4gIHNjYWxlOiAnc2NhbGUnLFxuICBzZWN1cml0eTogJ3NlY3VyaXR5JyxcbiAgc2VlZDogJ3NlZWQnLFxuICBzaGFwZXJlbmRlcmluZzogJ3NoYXBlUmVuZGVyaW5nJyxcbiAgJ3NoYXBlLXJlbmRlcmluZyc6ICdzaGFwZVJlbmRlcmluZycsXG4gIHNsb3BlOiAnc2xvcGUnLFxuICBzcGFjaW5nOiAnc3BhY2luZycsXG4gIHNwZWN1bGFyY29uc3RhbnQ6ICdzcGVjdWxhckNvbnN0YW50JyxcbiAgc3BlY3VsYXJleHBvbmVudDogJ3NwZWN1bGFyRXhwb25lbnQnLFxuICBzcGVlZDogJ3NwZWVkJyxcbiAgc3ByZWFkbWV0aG9kOiAnc3ByZWFkTWV0aG9kJyxcbiAgc3RhcnRvZmZzZXQ6ICdzdGFydE9mZnNldCcsXG4gIHN0ZGRldmlhdGlvbjogJ3N0ZERldmlhdGlvbicsXG4gIHN0ZW1oOiAnc3RlbWgnLFxuICBzdGVtdjogJ3N0ZW12JyxcbiAgc3RpdGNodGlsZXM6ICdzdGl0Y2hUaWxlcycsXG4gIHN0b3Bjb2xvcjogJ3N0b3BDb2xvcicsXG4gICdzdG9wLWNvbG9yJzogJ3N0b3BDb2xvcicsXG4gIHN0b3BvcGFjaXR5OiAnc3RvcE9wYWNpdHknLFxuICAnc3RvcC1vcGFjaXR5JzogJ3N0b3BPcGFjaXR5JyxcbiAgc3RyaWtldGhyb3VnaHBvc2l0aW9uOiAnc3RyaWtldGhyb3VnaFBvc2l0aW9uJyxcbiAgJ3N0cmlrZXRocm91Z2gtcG9zaXRpb24nOiAnc3RyaWtldGhyb3VnaFBvc2l0aW9uJyxcbiAgc3RyaWtldGhyb3VnaHRoaWNrbmVzczogJ3N0cmlrZXRocm91Z2hUaGlja25lc3MnLFxuICAnc3RyaWtldGhyb3VnaC10aGlja25lc3MnOiAnc3RyaWtldGhyb3VnaFRoaWNrbmVzcycsXG4gIHN0cmluZzogJ3N0cmluZycsXG4gIHN0cm9rZTogJ3N0cm9rZScsXG4gIHN0cm9rZWRhc2hhcnJheTogJ3N0cm9rZURhc2hhcnJheScsXG4gICdzdHJva2UtZGFzaGFycmF5JzogJ3N0cm9rZURhc2hhcnJheScsXG4gIHN0cm9rZWRhc2hvZmZzZXQ6ICdzdHJva2VEYXNob2Zmc2V0JyxcbiAgJ3N0cm9rZS1kYXNob2Zmc2V0JzogJ3N0cm9rZURhc2hvZmZzZXQnLFxuICBzdHJva2VsaW5lY2FwOiAnc3Ryb2tlTGluZWNhcCcsXG4gICdzdHJva2UtbGluZWNhcCc6ICdzdHJva2VMaW5lY2FwJyxcbiAgc3Ryb2tlbGluZWpvaW46ICdzdHJva2VMaW5lam9pbicsXG4gICdzdHJva2UtbGluZWpvaW4nOiAnc3Ryb2tlTGluZWpvaW4nLFxuICBzdHJva2VtaXRlcmxpbWl0OiAnc3Ryb2tlTWl0ZXJsaW1pdCcsXG4gICdzdHJva2UtbWl0ZXJsaW1pdCc6ICdzdHJva2VNaXRlcmxpbWl0JyxcbiAgc3Ryb2tld2lkdGg6ICdzdHJva2VXaWR0aCcsXG4gICdzdHJva2Utd2lkdGgnOiAnc3Ryb2tlV2lkdGgnLFxuICBzdHJva2VvcGFjaXR5OiAnc3Ryb2tlT3BhY2l0eScsXG4gICdzdHJva2Utb3BhY2l0eSc6ICdzdHJva2VPcGFjaXR5JyxcbiAgc3VwcHJlc3Njb250ZW50ZWRpdGFibGV3YXJuaW5nOiAnc3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nJyxcbiAgc3VwcHJlc3NoeWRyYXRpb253YXJuaW5nOiAnc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nJyxcbiAgc3VyZmFjZXNjYWxlOiAnc3VyZmFjZVNjYWxlJyxcbiAgc3lzdGVtbGFuZ3VhZ2U6ICdzeXN0ZW1MYW5ndWFnZScsXG4gIHRhYmxldmFsdWVzOiAndGFibGVWYWx1ZXMnLFxuICB0YXJnZXR4OiAndGFyZ2V0WCcsXG4gIHRhcmdldHk6ICd0YXJnZXRZJyxcbiAgdGV4dGFuY2hvcjogJ3RleHRBbmNob3InLFxuICAndGV4dC1hbmNob3InOiAndGV4dEFuY2hvcicsXG4gIHRleHRkZWNvcmF0aW9uOiAndGV4dERlY29yYXRpb24nLFxuICAndGV4dC1kZWNvcmF0aW9uJzogJ3RleHREZWNvcmF0aW9uJyxcbiAgdGV4dGxlbmd0aDogJ3RleHRMZW5ndGgnLFxuICB0ZXh0cmVuZGVyaW5nOiAndGV4dFJlbmRlcmluZycsXG4gICd0ZXh0LXJlbmRlcmluZyc6ICd0ZXh0UmVuZGVyaW5nJyxcbiAgdG86ICd0bycsXG4gIHRyYW5zZm9ybTogJ3RyYW5zZm9ybScsXG4gIHR5cGVvZjogJ3R5cGVvZicsXG4gIHUxOiAndTEnLFxuICB1MjogJ3UyJyxcbiAgdW5kZXJsaW5lcG9zaXRpb246ICd1bmRlcmxpbmVQb3NpdGlvbicsXG4gICd1bmRlcmxpbmUtcG9zaXRpb24nOiAndW5kZXJsaW5lUG9zaXRpb24nLFxuICB1bmRlcmxpbmV0aGlja25lc3M6ICd1bmRlcmxpbmVUaGlja25lc3MnLFxuICAndW5kZXJsaW5lLXRoaWNrbmVzcyc6ICd1bmRlcmxpbmVUaGlja25lc3MnLFxuICB1bmljb2RlOiAndW5pY29kZScsXG4gIHVuaWNvZGViaWRpOiAndW5pY29kZUJpZGknLFxuICAndW5pY29kZS1iaWRpJzogJ3VuaWNvZGVCaWRpJyxcbiAgdW5pY29kZXJhbmdlOiAndW5pY29kZVJhbmdlJyxcbiAgJ3VuaWNvZGUtcmFuZ2UnOiAndW5pY29kZVJhbmdlJyxcbiAgdW5pdHNwZXJlbTogJ3VuaXRzUGVyRW0nLFxuICAndW5pdHMtcGVyLWVtJzogJ3VuaXRzUGVyRW0nLFxuICB1bnNlbGVjdGFibGU6ICd1bnNlbGVjdGFibGUnLFxuICB2YWxwaGFiZXRpYzogJ3ZBbHBoYWJldGljJyxcbiAgJ3YtYWxwaGFiZXRpYyc6ICd2QWxwaGFiZXRpYycsXG4gIHZhbHVlczogJ3ZhbHVlcycsXG4gIHZlY3RvcmVmZmVjdDogJ3ZlY3RvckVmZmVjdCcsXG4gICd2ZWN0b3ItZWZmZWN0JzogJ3ZlY3RvckVmZmVjdCcsXG4gIHZlcnNpb246ICd2ZXJzaW9uJyxcbiAgdmVydGFkdnk6ICd2ZXJ0QWR2WScsXG4gICd2ZXJ0LWFkdi15JzogJ3ZlcnRBZHZZJyxcbiAgdmVydG9yaWdpbng6ICd2ZXJ0T3JpZ2luWCcsXG4gICd2ZXJ0LW9yaWdpbi14JzogJ3ZlcnRPcmlnaW5YJyxcbiAgdmVydG9yaWdpbnk6ICd2ZXJ0T3JpZ2luWScsXG4gICd2ZXJ0LW9yaWdpbi15JzogJ3ZlcnRPcmlnaW5ZJyxcbiAgdmhhbmdpbmc6ICd2SGFuZ2luZycsXG4gICd2LWhhbmdpbmcnOiAndkhhbmdpbmcnLFxuICB2aWRlb2dyYXBoaWM6ICd2SWRlb2dyYXBoaWMnLFxuICAndi1pZGVvZ3JhcGhpYyc6ICd2SWRlb2dyYXBoaWMnLFxuICB2aWV3Ym94OiAndmlld0JveCcsXG4gIHZpZXd0YXJnZXQ6ICd2aWV3VGFyZ2V0JyxcbiAgdmlzaWJpbGl0eTogJ3Zpc2liaWxpdHknLFxuICB2bWF0aGVtYXRpY2FsOiAndk1hdGhlbWF0aWNhbCcsXG4gICd2LW1hdGhlbWF0aWNhbCc6ICd2TWF0aGVtYXRpY2FsJyxcbiAgdm9jYWI6ICd2b2NhYicsXG4gIHdpZHRoczogJ3dpZHRocycsXG4gIHdvcmRzcGFjaW5nOiAnd29yZFNwYWNpbmcnLFxuICAnd29yZC1zcGFjaW5nJzogJ3dvcmRTcGFjaW5nJyxcbiAgd3JpdGluZ21vZGU6ICd3cml0aW5nTW9kZScsXG4gICd3cml0aW5nLW1vZGUnOiAnd3JpdGluZ01vZGUnLFxuICB4MTogJ3gxJyxcbiAgeDI6ICd4MicsXG4gIHg6ICd4JyxcbiAgeGNoYW5uZWxzZWxlY3RvcjogJ3hDaGFubmVsU2VsZWN0b3InLFxuICB4aGVpZ2h0OiAneEhlaWdodCcsXG4gICd4LWhlaWdodCc6ICd4SGVpZ2h0JyxcbiAgeGxpbmthY3R1YXRlOiAneGxpbmtBY3R1YXRlJyxcbiAgJ3hsaW5rOmFjdHVhdGUnOiAneGxpbmtBY3R1YXRlJyxcbiAgeGxpbmthcmNyb2xlOiAneGxpbmtBcmNyb2xlJyxcbiAgJ3hsaW5rOmFyY3JvbGUnOiAneGxpbmtBcmNyb2xlJyxcbiAgeGxpbmtocmVmOiAneGxpbmtIcmVmJyxcbiAgJ3hsaW5rOmhyZWYnOiAneGxpbmtIcmVmJyxcbiAgeGxpbmtyb2xlOiAneGxpbmtSb2xlJyxcbiAgJ3hsaW5rOnJvbGUnOiAneGxpbmtSb2xlJyxcbiAgeGxpbmtzaG93OiAneGxpbmtTaG93JyxcbiAgJ3hsaW5rOnNob3cnOiAneGxpbmtTaG93JyxcbiAgeGxpbmt0aXRsZTogJ3hsaW5rVGl0bGUnLFxuICAneGxpbms6dGl0bGUnOiAneGxpbmtUaXRsZScsXG4gIHhsaW5rdHlwZTogJ3hsaW5rVHlwZScsXG4gICd4bGluazp0eXBlJzogJ3hsaW5rVHlwZScsXG4gIHhtbGJhc2U6ICd4bWxCYXNlJyxcbiAgJ3htbDpiYXNlJzogJ3htbEJhc2UnLFxuICB4bWxsYW5nOiAneG1sTGFuZycsXG4gICd4bWw6bGFuZyc6ICd4bWxMYW5nJyxcbiAgeG1sbnM6ICd4bWxucycsXG4gICd4bWw6c3BhY2UnOiAneG1sU3BhY2UnLFxuICB4bWxuc3hsaW5rOiAneG1sbnNYbGluaycsXG4gICd4bWxuczp4bGluayc6ICd4bWxuc1hsaW5rJyxcbiAgeG1sc3BhY2U6ICd4bWxTcGFjZScsXG4gIHkxOiAneTEnLFxuICB5MjogJ3kyJyxcbiAgeTogJ3knLFxuICB5Y2hhbm5lbHNlbGVjdG9yOiAneUNoYW5uZWxTZWxlY3RvcicsXG4gIHo6ICd6JyxcbiAgem9vbWFuZHBhbjogJ3pvb21BbmRQYW4nXG59O1xuXG52YXIgYXJpYVByb3BlcnRpZXMgPSB7XG4gICdhcmlhLWN1cnJlbnQnOiAwLFxuICAvLyBzdGF0ZVxuICAnYXJpYS1kZXRhaWxzJzogMCxcbiAgJ2FyaWEtZGlzYWJsZWQnOiAwLFxuICAvLyBzdGF0ZVxuICAnYXJpYS1oaWRkZW4nOiAwLFxuICAvLyBzdGF0ZVxuICAnYXJpYS1pbnZhbGlkJzogMCxcbiAgLy8gc3RhdGVcbiAgJ2FyaWEta2V5c2hvcnRjdXRzJzogMCxcbiAgJ2FyaWEtbGFiZWwnOiAwLFxuICAnYXJpYS1yb2xlZGVzY3JpcHRpb24nOiAwLFxuICAvLyBXaWRnZXQgQXR0cmlidXRlc1xuICAnYXJpYS1hdXRvY29tcGxldGUnOiAwLFxuICAnYXJpYS1jaGVja2VkJzogMCxcbiAgJ2FyaWEtZXhwYW5kZWQnOiAwLFxuICAnYXJpYS1oYXNwb3B1cCc6IDAsXG4gICdhcmlhLWxldmVsJzogMCxcbiAgJ2FyaWEtbW9kYWwnOiAwLFxuICAnYXJpYS1tdWx0aWxpbmUnOiAwLFxuICAnYXJpYS1tdWx0aXNlbGVjdGFibGUnOiAwLFxuICAnYXJpYS1vcmllbnRhdGlvbic6IDAsXG4gICdhcmlhLXBsYWNlaG9sZGVyJzogMCxcbiAgJ2FyaWEtcHJlc3NlZCc6IDAsXG4gICdhcmlhLXJlYWRvbmx5JzogMCxcbiAgJ2FyaWEtcmVxdWlyZWQnOiAwLFxuICAnYXJpYS1zZWxlY3RlZCc6IDAsXG4gICdhcmlhLXNvcnQnOiAwLFxuICAnYXJpYS12YWx1ZW1heCc6IDAsXG4gICdhcmlhLXZhbHVlbWluJzogMCxcbiAgJ2FyaWEtdmFsdWVub3cnOiAwLFxuICAnYXJpYS12YWx1ZXRleHQnOiAwLFxuICAvLyBMaXZlIFJlZ2lvbiBBdHRyaWJ1dGVzXG4gICdhcmlhLWF0b21pYyc6IDAsXG4gICdhcmlhLWJ1c3knOiAwLFxuICAnYXJpYS1saXZlJzogMCxcbiAgJ2FyaWEtcmVsZXZhbnQnOiAwLFxuICAvLyBEcmFnLWFuZC1Ecm9wIEF0dHJpYnV0ZXNcbiAgJ2FyaWEtZHJvcGVmZmVjdCc6IDAsXG4gICdhcmlhLWdyYWJiZWQnOiAwLFxuICAvLyBSZWxhdGlvbnNoaXAgQXR0cmlidXRlc1xuICAnYXJpYS1hY3RpdmVkZXNjZW5kYW50JzogMCxcbiAgJ2FyaWEtY29sY291bnQnOiAwLFxuICAnYXJpYS1jb2xpbmRleCc6IDAsXG4gICdhcmlhLWNvbHNwYW4nOiAwLFxuICAnYXJpYS1jb250cm9scyc6IDAsXG4gICdhcmlhLWRlc2NyaWJlZGJ5JzogMCxcbiAgJ2FyaWEtZXJyb3JtZXNzYWdlJzogMCxcbiAgJ2FyaWEtZmxvd3RvJzogMCxcbiAgJ2FyaWEtbGFiZWxsZWRieSc6IDAsXG4gICdhcmlhLW93bnMnOiAwLFxuICAnYXJpYS1wb3NpbnNldCc6IDAsXG4gICdhcmlhLXJvd2NvdW50JzogMCxcbiAgJ2FyaWEtcm93aW5kZXgnOiAwLFxuICAnYXJpYS1yb3dzcGFuJzogMCxcbiAgJ2FyaWEtc2V0c2l6ZSc6IDBcbn07XG5cbnZhciB3YXJuZWRQcm9wZXJ0aWVzID0ge307XG52YXIgckFSSUEgPSBuZXcgUmVnRXhwKCdeKGFyaWEpLVsnICsgQVRUUklCVVRFX05BTUVfQ0hBUiArICddKiQnKTtcbnZhciByQVJJQUNhbWVsID0gbmV3IFJlZ0V4cCgnXihhcmlhKVtBLVpdWycgKyBBVFRSSUJVVEVfTkFNRV9DSEFSICsgJ10qJCcpO1xudmFyIGhhc093blByb3BlcnR5JDEgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG5mdW5jdGlvbiB2YWxpZGF0ZVByb3BlcnR5KHRhZ05hbWUsIG5hbWUpIHtcbiAge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eSQxLmNhbGwod2FybmVkUHJvcGVydGllcywgbmFtZSkgJiYgd2FybmVkUHJvcGVydGllc1tuYW1lXSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHJBUklBQ2FtZWwudGVzdChuYW1lKSkge1xuICAgICAgdmFyIGFyaWFOYW1lID0gJ2FyaWEtJyArIG5hbWUuc2xpY2UoNCkudG9Mb3dlckNhc2UoKTtcbiAgICAgIHZhciBjb3JyZWN0TmFtZSA9IGFyaWFQcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KGFyaWFOYW1lKSA/IGFyaWFOYW1lIDogbnVsbDsgLy8gSWYgdGhpcyBpcyBhbiBhcmlhLSogYXR0cmlidXRlLCBidXQgaXMgbm90IGxpc3RlZCBpbiB0aGUga25vd24gRE9NXG4gICAgICAvLyBET00gcHJvcGVydGllcywgdGhlbiBpdCBpcyBhbiBpbnZhbGlkIGFyaWEtKiBhdHRyaWJ1dGUuXG5cbiAgICAgIGlmIChjb3JyZWN0TmFtZSA9PSBudWxsKSB7XG4gICAgICAgIGVycm9yKCdJbnZhbGlkIEFSSUEgYXR0cmlidXRlIGAlc2AuIEFSSUEgYXR0cmlidXRlcyBmb2xsb3cgdGhlIHBhdHRlcm4gYXJpYS0qIGFuZCBtdXN0IGJlIGxvd2VyY2FzZS4nLCBuYW1lKTtcblxuICAgICAgICB3YXJuZWRQcm9wZXJ0aWVzW25hbWVdID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IC8vIGFyaWEtKiBhdHRyaWJ1dGVzIHNob3VsZCBiZSBsb3dlcmNhc2U7IHN1Z2dlc3QgdGhlIGxvd2VyY2FzZSB2ZXJzaW9uLlxuXG5cbiAgICAgIGlmIChuYW1lICE9PSBjb3JyZWN0TmFtZSkge1xuICAgICAgICBlcnJvcignSW52YWxpZCBBUklBIGF0dHJpYnV0ZSBgJXNgLiBEaWQgeW91IG1lYW4gYCVzYD8nLCBuYW1lLCBjb3JyZWN0TmFtZSk7XG5cbiAgICAgICAgd2FybmVkUHJvcGVydGllc1tuYW1lXSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChyQVJJQS50ZXN0KG5hbWUpKSB7XG4gICAgICB2YXIgbG93ZXJDYXNlZE5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICB2YXIgc3RhbmRhcmROYW1lID0gYXJpYVByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkobG93ZXJDYXNlZE5hbWUpID8gbG93ZXJDYXNlZE5hbWUgOiBudWxsOyAvLyBJZiB0aGlzIGlzIGFuIGFyaWEtKiBhdHRyaWJ1dGUsIGJ1dCBpcyBub3QgbGlzdGVkIGluIHRoZSBrbm93biBET01cbiAgICAgIC8vIERPTSBwcm9wZXJ0aWVzLCB0aGVuIGl0IGlzIGFuIGludmFsaWQgYXJpYS0qIGF0dHJpYnV0ZS5cblxuICAgICAgaWYgKHN0YW5kYXJkTmFtZSA9PSBudWxsKSB7XG4gICAgICAgIHdhcm5lZFByb3BlcnRpZXNbbmFtZV0gPSB0cnVlO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IC8vIGFyaWEtKiBhdHRyaWJ1dGVzIHNob3VsZCBiZSBsb3dlcmNhc2U7IHN1Z2dlc3QgdGhlIGxvd2VyY2FzZSB2ZXJzaW9uLlxuXG5cbiAgICAgIGlmIChuYW1lICE9PSBzdGFuZGFyZE5hbWUpIHtcbiAgICAgICAgZXJyb3IoJ1Vua25vd24gQVJJQSBhdHRyaWJ1dGUgYCVzYC4gRGlkIHlvdSBtZWFuIGAlc2A/JywgbmFtZSwgc3RhbmRhcmROYW1lKTtcblxuICAgICAgICB3YXJuZWRQcm9wZXJ0aWVzW25hbWVdID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHdhcm5JbnZhbGlkQVJJQVByb3BzKHR5cGUsIHByb3BzKSB7XG4gIHtcbiAgICB2YXIgaW52YWxpZFByb3BzID0gW107XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHtcbiAgICAgIHZhciBpc1ZhbGlkID0gdmFsaWRhdGVQcm9wZXJ0eSh0eXBlLCBrZXkpO1xuXG4gICAgICBpZiAoIWlzVmFsaWQpIHtcbiAgICAgICAgaW52YWxpZFByb3BzLnB1c2goa2V5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgdW5rbm93blByb3BTdHJpbmcgPSBpbnZhbGlkUHJvcHMubWFwKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgICByZXR1cm4gJ2AnICsgcHJvcCArICdgJztcbiAgICB9KS5qb2luKCcsICcpO1xuXG4gICAgaWYgKGludmFsaWRQcm9wcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIGVycm9yKCdJbnZhbGlkIGFyaWEgcHJvcCAlcyBvbiA8JXM+IHRhZy4gJyArICdGb3IgZGV0YWlscywgc2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9pbnZhbGlkLWFyaWEtcHJvcHMnLCB1bmtub3duUHJvcFN0cmluZywgdHlwZSk7XG4gICAgfSBlbHNlIGlmIChpbnZhbGlkUHJvcHMubGVuZ3RoID4gMSkge1xuICAgICAgZXJyb3IoJ0ludmFsaWQgYXJpYSBwcm9wcyAlcyBvbiA8JXM+IHRhZy4gJyArICdGb3IgZGV0YWlscywgc2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9pbnZhbGlkLWFyaWEtcHJvcHMnLCB1bmtub3duUHJvcFN0cmluZywgdHlwZSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlUHJvcGVydGllcyh0eXBlLCBwcm9wcykge1xuICBpZiAoaXNDdXN0b21Db21wb25lbnQodHlwZSwgcHJvcHMpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgd2FybkludmFsaWRBUklBUHJvcHModHlwZSwgcHJvcHMpO1xufVxuXG52YXIgZGlkV2FyblZhbHVlTnVsbCA9IGZhbHNlO1xuZnVuY3Rpb24gdmFsaWRhdGVQcm9wZXJ0aWVzJDEodHlwZSwgcHJvcHMpIHtcbiAge1xuICAgIGlmICh0eXBlICE9PSAnaW5wdXQnICYmIHR5cGUgIT09ICd0ZXh0YXJlYScgJiYgdHlwZSAhPT0gJ3NlbGVjdCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMgIT0gbnVsbCAmJiBwcm9wcy52YWx1ZSA9PT0gbnVsbCAmJiAhZGlkV2FyblZhbHVlTnVsbCkge1xuICAgICAgZGlkV2FyblZhbHVlTnVsbCA9IHRydWU7XG5cbiAgICAgIGlmICh0eXBlID09PSAnc2VsZWN0JyAmJiBwcm9wcy5tdWx0aXBsZSkge1xuICAgICAgICBlcnJvcignYHZhbHVlYCBwcm9wIG9uIGAlc2Agc2hvdWxkIG5vdCBiZSBudWxsLiAnICsgJ0NvbnNpZGVyIHVzaW5nIGFuIGVtcHR5IGFycmF5IHdoZW4gYG11bHRpcGxlYCBpcyBzZXQgdG8gYHRydWVgICcgKyAndG8gY2xlYXIgdGhlIGNvbXBvbmVudCBvciBgdW5kZWZpbmVkYCBmb3IgdW5jb250cm9sbGVkIGNvbXBvbmVudHMuJywgdHlwZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlcnJvcignYHZhbHVlYCBwcm9wIG9uIGAlc2Agc2hvdWxkIG5vdCBiZSBudWxsLiAnICsgJ0NvbnNpZGVyIHVzaW5nIGFuIGVtcHR5IHN0cmluZyB0byBjbGVhciB0aGUgY29tcG9uZW50IG9yIGB1bmRlZmluZWRgICcgKyAnZm9yIHVuY29udHJvbGxlZCBjb21wb25lbnRzLicsIHR5cGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgdmFsaWRhdGVQcm9wZXJ0eSQxID0gZnVuY3Rpb24gKCkge307XG5cbntcbiAgdmFyIHdhcm5lZFByb3BlcnRpZXMkMSA9IHt9O1xuICB2YXIgX2hhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbiAgdmFyIEVWRU5UX05BTUVfUkVHRVggPSAvXm9uLi87XG4gIHZhciBJTlZBTElEX0VWRU5UX05BTUVfUkVHRVggPSAvXm9uW15BLVpdLztcbiAgdmFyIHJBUklBJDEgPSBuZXcgUmVnRXhwKCdeKGFyaWEpLVsnICsgQVRUUklCVVRFX05BTUVfQ0hBUiArICddKiQnKTtcbiAgdmFyIHJBUklBQ2FtZWwkMSA9IG5ldyBSZWdFeHAoJ14oYXJpYSlbQS1aXVsnICsgQVRUUklCVVRFX05BTUVfQ0hBUiArICddKiQnKTtcblxuICB2YWxpZGF0ZVByb3BlcnR5JDEgPSBmdW5jdGlvbiAodGFnTmFtZSwgbmFtZSwgdmFsdWUsIGV2ZW50UmVnaXN0cnkpIHtcbiAgICBpZiAoX2hhc093blByb3BlcnR5LmNhbGwod2FybmVkUHJvcGVydGllcyQxLCBuYW1lKSAmJiB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0pIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHZhciBsb3dlckNhc2VkTmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcblxuICAgIGlmIChsb3dlckNhc2VkTmFtZSA9PT0gJ29uZm9jdXNpbicgfHwgbG93ZXJDYXNlZE5hbWUgPT09ICdvbmZvY3Vzb3V0Jykge1xuICAgICAgZXJyb3IoJ1JlYWN0IHVzZXMgb25Gb2N1cyBhbmQgb25CbHVyIGluc3RlYWQgb2Ygb25Gb2N1c0luIGFuZCBvbkZvY3VzT3V0LiAnICsgJ0FsbCBSZWFjdCBldmVudHMgYXJlIG5vcm1hbGl6ZWQgdG8gYnViYmxlLCBzbyBvbkZvY3VzSW4gYW5kIG9uRm9jdXNPdXQgJyArICdhcmUgbm90IG5lZWRlZC9zdXBwb3J0ZWQgYnkgUmVhY3QuJyk7XG5cbiAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IC8vIFdlIGNhbid0IHJlbHkgb24gdGhlIGV2ZW50IHN5c3RlbSBiZWluZyBpbmplY3RlZCBvbiB0aGUgc2VydmVyLlxuXG5cbiAgICBpZiAoZXZlbnRSZWdpc3RyeSAhPSBudWxsKSB7XG4gICAgICB2YXIgcmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llcyA9IGV2ZW50UmVnaXN0cnkucmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llcyxcbiAgICAgICAgICBwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzID0gZXZlbnRSZWdpc3RyeS5wb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzO1xuXG4gICAgICBpZiAocmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIHJlZ2lzdHJhdGlvbk5hbWUgPSBwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzLmhhc093blByb3BlcnR5KGxvd2VyQ2FzZWROYW1lKSA/IHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXNbbG93ZXJDYXNlZE5hbWVdIDogbnVsbDtcblxuICAgICAgaWYgKHJlZ2lzdHJhdGlvbk5hbWUgIT0gbnVsbCkge1xuICAgICAgICBlcnJvcignSW52YWxpZCBldmVudCBoYW5kbGVyIHByb3BlcnR5IGAlc2AuIERpZCB5b3UgbWVhbiBgJXNgPycsIG5hbWUsIHJlZ2lzdHJhdGlvbk5hbWUpO1xuXG4gICAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoRVZFTlRfTkFNRV9SRUdFWC50ZXN0KG5hbWUpKSB7XG4gICAgICAgIGVycm9yKCdVbmtub3duIGV2ZW50IGhhbmRsZXIgcHJvcGVydHkgYCVzYC4gSXQgd2lsbCBiZSBpZ25vcmVkLicsIG5hbWUpO1xuXG4gICAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoRVZFTlRfTkFNRV9SRUdFWC50ZXN0KG5hbWUpKSB7XG4gICAgICAvLyBJZiBubyBldmVudCBwbHVnaW5zIGhhdmUgYmVlbiBpbmplY3RlZCwgd2UgYXJlIGluIGEgc2VydmVyIGVudmlyb25tZW50LlxuICAgICAgLy8gU28gd2UgY2FuJ3QgdGVsbCBpZiB0aGUgZXZlbnQgbmFtZSBpcyBjb3JyZWN0IGZvciBzdXJlLCBidXQgd2UgY2FuIGZpbHRlclxuICAgICAgLy8gb3V0IGtub3duIGJhZCBvbmVzIGxpa2UgYG9uY2xpY2tgLiBXZSBjYW4ndCBzdWdnZXN0IGEgc3BlY2lmaWMgcmVwbGFjZW1lbnQgdGhvdWdoLlxuICAgICAgaWYgKElOVkFMSURfRVZFTlRfTkFNRV9SRUdFWC50ZXN0KG5hbWUpKSB7XG4gICAgICAgIGVycm9yKCdJbnZhbGlkIGV2ZW50IGhhbmRsZXIgcHJvcGVydHkgYCVzYC4gJyArICdSZWFjdCBldmVudHMgdXNlIHRoZSBjYW1lbENhc2UgbmFtaW5nIGNvbnZlbnRpb24sIGZvciBleGFtcGxlIGBvbkNsaWNrYC4nLCBuYW1lKTtcbiAgICAgIH1cblxuICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gLy8gTGV0IHRoZSBBUklBIGF0dHJpYnV0ZSBob29rIHZhbGlkYXRlIEFSSUEgYXR0cmlidXRlc1xuXG5cbiAgICBpZiAockFSSUEkMS50ZXN0KG5hbWUpIHx8IHJBUklBQ2FtZWwkMS50ZXN0KG5hbWUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAobG93ZXJDYXNlZE5hbWUgPT09ICdpbm5lcmh0bWwnKSB7XG4gICAgICBlcnJvcignRGlyZWN0bHkgc2V0dGluZyBwcm9wZXJ0eSBgaW5uZXJIVE1MYCBpcyBub3QgcGVybWl0dGVkLiAnICsgJ0ZvciBtb3JlIGluZm9ybWF0aW9uLCBsb29rdXAgZG9jdW1lbnRhdGlvbiBvbiBgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgLicpO1xuXG4gICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGxvd2VyQ2FzZWROYW1lID09PSAnYXJpYScpIHtcbiAgICAgIGVycm9yKCdUaGUgYGFyaWFgIGF0dHJpYnV0ZSBpcyByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSBpbiBSZWFjdC4gJyArICdQYXNzIGluZGl2aWR1YWwgYGFyaWEtYCBhdHRyaWJ1dGVzIGluc3RlYWQuJyk7XG5cbiAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAobG93ZXJDYXNlZE5hbWUgPT09ICdpcycgJiYgdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICBlcnJvcignUmVjZWl2ZWQgYSBgJXNgIGZvciBhIHN0cmluZyBhdHRyaWJ1dGUgYGlzYC4gSWYgdGhpcyBpcyBleHBlY3RlZCwgY2FzdCAnICsgJ3RoZSB2YWx1ZSB0byBhIHN0cmluZy4nLCB0eXBlb2YgdmFsdWUpO1xuXG4gICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgaXNOYU4odmFsdWUpKSB7XG4gICAgICBlcnJvcignUmVjZWl2ZWQgTmFOIGZvciB0aGUgYCVzYCBhdHRyaWJ1dGUuIElmIHRoaXMgaXMgZXhwZWN0ZWQsIGNhc3QgJyArICd0aGUgdmFsdWUgdG8gYSBzdHJpbmcuJywgbmFtZSk7XG5cbiAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgcHJvcGVydHlJbmZvID0gZ2V0UHJvcGVydHlJbmZvKG5hbWUpO1xuICAgIHZhciBpc1Jlc2VydmVkID0gcHJvcGVydHlJbmZvICE9PSBudWxsICYmIHByb3BlcnR5SW5mby50eXBlID09PSBSRVNFUlZFRDsgLy8gS25vd24gYXR0cmlidXRlcyBzaG91bGQgbWF0Y2ggdGhlIGNhc2luZyBzcGVjaWZpZWQgaW4gdGhlIHByb3BlcnR5IGNvbmZpZy5cblxuICAgIGlmIChwb3NzaWJsZVN0YW5kYXJkTmFtZXMuaGFzT3duUHJvcGVydHkobG93ZXJDYXNlZE5hbWUpKSB7XG4gICAgICB2YXIgc3RhbmRhcmROYW1lID0gcG9zc2libGVTdGFuZGFyZE5hbWVzW2xvd2VyQ2FzZWROYW1lXTtcblxuICAgICAgaWYgKHN0YW5kYXJkTmFtZSAhPT0gbmFtZSkge1xuICAgICAgICBlcnJvcignSW52YWxpZCBET00gcHJvcGVydHkgYCVzYC4gRGlkIHlvdSBtZWFuIGAlc2A/JywgbmFtZSwgc3RhbmRhcmROYW1lKTtcblxuICAgICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFpc1Jlc2VydmVkICYmIG5hbWUgIT09IGxvd2VyQ2FzZWROYW1lKSB7XG4gICAgICAvLyBVbmtub3duIGF0dHJpYnV0ZXMgc2hvdWxkIGhhdmUgbG93ZXJjYXNlIGNhc2luZyBzaW5jZSB0aGF0J3MgaG93IHRoZXlcbiAgICAgIC8vIHdpbGwgYmUgY2FzZWQgYW55d2F5IHdpdGggc2VydmVyIHJlbmRlcmluZy5cbiAgICAgIGVycm9yKCdSZWFjdCBkb2VzIG5vdCByZWNvZ25pemUgdGhlIGAlc2AgcHJvcCBvbiBhIERPTSBlbGVtZW50LiBJZiB5b3UgJyArICdpbnRlbnRpb25hbGx5IHdhbnQgaXQgdG8gYXBwZWFyIGluIHRoZSBET00gYXMgYSBjdXN0b20gJyArICdhdHRyaWJ1dGUsIHNwZWxsIGl0IGFzIGxvd2VyY2FzZSBgJXNgIGluc3RlYWQuICcgKyAnSWYgeW91IGFjY2lkZW50YWxseSBwYXNzZWQgaXQgZnJvbSBhIHBhcmVudCBjb21wb25lbnQsIHJlbW92ZSAnICsgJ2l0IGZyb20gdGhlIERPTSBlbGVtZW50LicsIG5hbWUsIGxvd2VyQ2FzZWROYW1lKTtcblxuICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyAmJiBzaG91bGRSZW1vdmVBdHRyaWJ1dGVXaXRoV2FybmluZyhuYW1lLCB2YWx1ZSwgcHJvcGVydHlJbmZvLCBmYWxzZSkpIHtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBlcnJvcignUmVjZWl2ZWQgYCVzYCBmb3IgYSBub24tYm9vbGVhbiBhdHRyaWJ1dGUgYCVzYC5cXG5cXG4nICsgJ0lmIHlvdSB3YW50IHRvIHdyaXRlIGl0IHRvIHRoZSBET00sIHBhc3MgYSBzdHJpbmcgaW5zdGVhZDogJyArICclcz1cIiVzXCIgb3IgJXM9e3ZhbHVlLnRvU3RyaW5nKCl9LicsIHZhbHVlLCBuYW1lLCBuYW1lLCB2YWx1ZSwgbmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlcnJvcignUmVjZWl2ZWQgYCVzYCBmb3IgYSBub24tYm9vbGVhbiBhdHRyaWJ1dGUgYCVzYC5cXG5cXG4nICsgJ0lmIHlvdSB3YW50IHRvIHdyaXRlIGl0IHRvIHRoZSBET00sIHBhc3MgYSBzdHJpbmcgaW5zdGVhZDogJyArICclcz1cIiVzXCIgb3IgJXM9e3ZhbHVlLnRvU3RyaW5nKCl9LlxcblxcbicgKyAnSWYgeW91IHVzZWQgdG8gY29uZGl0aW9uYWxseSBvbWl0IGl0IHdpdGggJXM9e2NvbmRpdGlvbiAmJiB2YWx1ZX0sICcgKyAncGFzcyAlcz17Y29uZGl0aW9uID8gdmFsdWUgOiB1bmRlZmluZWR9IGluc3RlYWQuJywgdmFsdWUsIG5hbWUsIG5hbWUsIHZhbHVlLCBuYW1lLCBuYW1lLCBuYW1lKTtcbiAgICAgIH1cblxuICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gLy8gTm93IHRoYXQgd2UndmUgdmFsaWRhdGVkIGNhc2luZywgZG8gbm90IHZhbGlkYXRlXG4gICAgLy8gZGF0YSB0eXBlcyBmb3IgcmVzZXJ2ZWQgcHJvcHNcblxuXG4gICAgaWYgKGlzUmVzZXJ2ZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gLy8gV2FybiB3aGVuIGEga25vd24gYXR0cmlidXRlIGlzIGEgYmFkIHR5cGVcblxuXG4gICAgaWYgKHNob3VsZFJlbW92ZUF0dHJpYnV0ZVdpdGhXYXJuaW5nKG5hbWUsIHZhbHVlLCBwcm9wZXJ0eUluZm8sIGZhbHNlKSkge1xuICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IC8vIFdhcm4gd2hlbiBwYXNzaW5nIHRoZSBzdHJpbmdzICdmYWxzZScgb3IgJ3RydWUnIGludG8gYSBib29sZWFuIHByb3BcblxuXG4gICAgaWYgKCh2YWx1ZSA9PT0gJ2ZhbHNlJyB8fCB2YWx1ZSA9PT0gJ3RydWUnKSAmJiBwcm9wZXJ0eUluZm8gIT09IG51bGwgJiYgcHJvcGVydHlJbmZvLnR5cGUgPT09IEJPT0xFQU4pIHtcbiAgICAgIGVycm9yKCdSZWNlaXZlZCB0aGUgc3RyaW5nIGAlc2AgZm9yIHRoZSBib29sZWFuIGF0dHJpYnV0ZSBgJXNgLiAnICsgJyVzICcgKyAnRGlkIHlvdSBtZWFuICVzPXslc30/JywgdmFsdWUsIG5hbWUsIHZhbHVlID09PSAnZmFsc2UnID8gJ1RoZSBicm93c2VyIHdpbGwgaW50ZXJwcmV0IGl0IGFzIGEgdHJ1dGh5IHZhbHVlLicgOiAnQWx0aG91Z2ggdGhpcyB3b3JrcywgaXQgd2lsbCBub3Qgd29yayBhcyBleHBlY3RlZCBpZiB5b3UgcGFzcyB0aGUgc3RyaW5nIFwiZmFsc2VcIi4nLCBuYW1lLCB2YWx1ZSk7XG5cbiAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcbn1cblxudmFyIHdhcm5Vbmtub3duUHJvcGVydGllcyA9IGZ1bmN0aW9uICh0eXBlLCBwcm9wcywgZXZlbnRSZWdpc3RyeSkge1xuICB7XG4gICAgdmFyIHVua25vd25Qcm9wcyA9IFtdO1xuXG4gICAgZm9yICh2YXIga2V5IGluIHByb3BzKSB7XG4gICAgICB2YXIgaXNWYWxpZCA9IHZhbGlkYXRlUHJvcGVydHkkMSh0eXBlLCBrZXksIHByb3BzW2tleV0sIGV2ZW50UmVnaXN0cnkpO1xuXG4gICAgICBpZiAoIWlzVmFsaWQpIHtcbiAgICAgICAgdW5rbm93blByb3BzLnB1c2goa2V5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgdW5rbm93blByb3BTdHJpbmcgPSB1bmtub3duUHJvcHMubWFwKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgICByZXR1cm4gJ2AnICsgcHJvcCArICdgJztcbiAgICB9KS5qb2luKCcsICcpO1xuXG4gICAgaWYgKHVua25vd25Qcm9wcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIGVycm9yKCdJbnZhbGlkIHZhbHVlIGZvciBwcm9wICVzIG9uIDwlcz4gdGFnLiBFaXRoZXIgcmVtb3ZlIGl0IGZyb20gdGhlIGVsZW1lbnQsICcgKyAnb3IgcGFzcyBhIHN0cmluZyBvciBudW1iZXIgdmFsdWUgdG8ga2VlcCBpdCBpbiB0aGUgRE9NLiAnICsgJ0ZvciBkZXRhaWxzLCBzZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2F0dHJpYnV0ZS1iZWhhdmlvciAnLCB1bmtub3duUHJvcFN0cmluZywgdHlwZSk7XG4gICAgfSBlbHNlIGlmICh1bmtub3duUHJvcHMubGVuZ3RoID4gMSkge1xuICAgICAgZXJyb3IoJ0ludmFsaWQgdmFsdWVzIGZvciBwcm9wcyAlcyBvbiA8JXM+IHRhZy4gRWl0aGVyIHJlbW92ZSB0aGVtIGZyb20gdGhlIGVsZW1lbnQsICcgKyAnb3IgcGFzcyBhIHN0cmluZyBvciBudW1iZXIgdmFsdWUgdG8ga2VlcCB0aGVtIGluIHRoZSBET00uICcgKyAnRm9yIGRldGFpbHMsIHNlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvYXR0cmlidXRlLWJlaGF2aW9yICcsIHVua25vd25Qcm9wU3RyaW5nLCB0eXBlKTtcbiAgICB9XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHZhbGlkYXRlUHJvcGVydGllcyQyKHR5cGUsIHByb3BzLCBldmVudFJlZ2lzdHJ5KSB7XG4gIGlmIChpc0N1c3RvbUNvbXBvbmVudCh0eXBlLCBwcm9wcykpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB3YXJuVW5rbm93blByb3BlcnRpZXModHlwZSwgcHJvcHMsIGV2ZW50UmVnaXN0cnkpO1xufVxuXG52YXIgSVNfRVZFTlRfSEFORExFX05PTl9NQU5BR0VEX05PREUgPSAxO1xudmFyIElTX05PTl9ERUxFR0FURUQgPSAxIDw8IDE7XG52YXIgSVNfQ0FQVFVSRV9QSEFTRSA9IDEgPDwgMjtcbnZhciBJU19SRVBMQVlFRCA9IDEgPDwgNDtcbi8vIHNldCB0byBMRUdBQ1lfRkJfU1VQUE9SVC4gTEVHQUNZX0ZCX1NVUFBPUlQgb25seSBnZXRzIHNldCB3aGVuXG4vLyB3ZSBjYWxsIHdpbGxEZWZlckxhdGVyRm9yTGVnYWN5RkJTdXBwb3J0LCB0aHVzIG5vdCBiYWlsaW5nIG91dFxuLy8gd2lsbCByZXN1bHQgaW4gZW5kbGVzcyBjeWNsZXMgbGlrZSBhbiBpbmZpbml0ZSBsb29wLlxuLy8gV2UgYWxzbyBkb24ndCB3YW50IHRvIGRlZmVyIGR1cmluZyBldmVudCByZXBsYXlpbmcuXG5cbnZhciBTSE9VTERfTk9UX1BST0NFU1NfUE9MWUZJTExfRVZFTlRfUExVR0lOUyA9IElTX0VWRU5UX0hBTkRMRV9OT05fTUFOQUdFRF9OT0RFIHwgSVNfTk9OX0RFTEVHQVRFRCB8IElTX0NBUFRVUkVfUEhBU0U7XG5cbi8qKlxuICogR2V0cyB0aGUgdGFyZ2V0IG5vZGUgZnJvbSBhIG5hdGl2ZSBicm93c2VyIGV2ZW50IGJ5IGFjY291bnRpbmcgZm9yXG4gKiBpbmNvbnNpc3RlbmNpZXMgaW4gYnJvd3NlciBET00gQVBJcy5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQuXG4gKiBAcmV0dXJuIHtET01FdmVudFRhcmdldH0gVGFyZ2V0IG5vZGUuXG4gKi9cblxuZnVuY3Rpb24gZ2V0RXZlbnRUYXJnZXQobmF0aXZlRXZlbnQpIHtcbiAgLy8gRmFsbGJhY2sgdG8gbmF0aXZlRXZlbnQuc3JjRWxlbWVudCBmb3IgSUU5XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTI1MDZcbiAgdmFyIHRhcmdldCA9IG5hdGl2ZUV2ZW50LnRhcmdldCB8fCBuYXRpdmVFdmVudC5zcmNFbGVtZW50IHx8IHdpbmRvdzsgLy8gTm9ybWFsaXplIFNWRyA8dXNlPiBlbGVtZW50IGV2ZW50cyAjNDk2M1xuXG4gIGlmICh0YXJnZXQuY29ycmVzcG9uZGluZ1VzZUVsZW1lbnQpIHtcbiAgICB0YXJnZXQgPSB0YXJnZXQuY29ycmVzcG9uZGluZ1VzZUVsZW1lbnQ7XG4gIH0gLy8gU2FmYXJpIG1heSBmaXJlIGV2ZW50cyBvbiB0ZXh0IG5vZGVzIChOb2RlLlRFWFRfTk9ERSBpcyAzKS5cbiAgLy8gQHNlZSBodHRwOi8vd3d3LnF1aXJrc21vZGUub3JnL2pzL2V2ZW50c19wcm9wZXJ0aWVzLmh0bWxcblxuXG4gIHJldHVybiB0YXJnZXQubm9kZVR5cGUgPT09IFRFWFRfTk9ERSA/IHRhcmdldC5wYXJlbnROb2RlIDogdGFyZ2V0O1xufVxuXG52YXIgcmVzdG9yZUltcGwgPSBudWxsO1xudmFyIHJlc3RvcmVUYXJnZXQgPSBudWxsO1xudmFyIHJlc3RvcmVRdWV1ZSA9IG51bGw7XG5cbmZ1bmN0aW9uIHJlc3RvcmVTdGF0ZU9mVGFyZ2V0KHRhcmdldCkge1xuICAvLyBXZSBwZXJmb3JtIHRoaXMgdHJhbnNsYXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgZXZlbnQgbG9vcCBzbyB0aGF0IHdlXG4gIC8vIGFsd2F5cyByZWNlaXZlIHRoZSBjb3JyZWN0IGZpYmVyIGhlcmVcbiAgdmFyIGludGVybmFsSW5zdGFuY2UgPSBnZXRJbnN0YW5jZUZyb21Ob2RlKHRhcmdldCk7XG5cbiAgaWYgKCFpbnRlcm5hbEluc3RhbmNlKSB7XG4gICAgLy8gVW5tb3VudGVkXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKCEodHlwZW9mIHJlc3RvcmVJbXBsID09PSAnZnVuY3Rpb24nKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcInNldFJlc3RvcmVJbXBsZW1lbnRhdGlvbigpIG5lZWRzIHRvIGJlIGNhbGxlZCB0byBoYW5kbGUgYSB0YXJnZXQgZm9yIGNvbnRyb2xsZWQgZXZlbnRzLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgfVxuICB9XG5cbiAgdmFyIHN0YXRlTm9kZSA9IGludGVybmFsSW5zdGFuY2Uuc3RhdGVOb2RlOyAvLyBHdWFyZCBhZ2FpbnN0IEZpYmVyIGJlaW5nIHVubW91bnRlZC5cblxuICBpZiAoc3RhdGVOb2RlKSB7XG4gICAgdmFyIF9wcm9wcyA9IGdldEZpYmVyQ3VycmVudFByb3BzRnJvbU5vZGUoc3RhdGVOb2RlKTtcblxuICAgIHJlc3RvcmVJbXBsKGludGVybmFsSW5zdGFuY2Uuc3RhdGVOb2RlLCBpbnRlcm5hbEluc3RhbmNlLnR5cGUsIF9wcm9wcyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0UmVzdG9yZUltcGxlbWVudGF0aW9uKGltcGwpIHtcbiAgcmVzdG9yZUltcGwgPSBpbXBsO1xufVxuZnVuY3Rpb24gZW5xdWV1ZVN0YXRlUmVzdG9yZSh0YXJnZXQpIHtcbiAgaWYgKHJlc3RvcmVUYXJnZXQpIHtcbiAgICBpZiAocmVzdG9yZVF1ZXVlKSB7XG4gICAgICByZXN0b3JlUXVldWUucHVzaCh0YXJnZXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN0b3JlUXVldWUgPSBbdGFyZ2V0XTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmVzdG9yZVRhcmdldCA9IHRhcmdldDtcbiAgfVxufVxuZnVuY3Rpb24gbmVlZHNTdGF0ZVJlc3RvcmUoKSB7XG4gIHJldHVybiByZXN0b3JlVGFyZ2V0ICE9PSBudWxsIHx8IHJlc3RvcmVRdWV1ZSAhPT0gbnVsbDtcbn1cbmZ1bmN0aW9uIHJlc3RvcmVTdGF0ZUlmTmVlZGVkKCkge1xuICBpZiAoIXJlc3RvcmVUYXJnZXQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgdGFyZ2V0ID0gcmVzdG9yZVRhcmdldDtcbiAgdmFyIHF1ZXVlZFRhcmdldHMgPSByZXN0b3JlUXVldWU7XG4gIHJlc3RvcmVUYXJnZXQgPSBudWxsO1xuICByZXN0b3JlUXVldWUgPSBudWxsO1xuICByZXN0b3JlU3RhdGVPZlRhcmdldCh0YXJnZXQpO1xuXG4gIGlmIChxdWV1ZWRUYXJnZXRzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWV1ZWRUYXJnZXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXN0b3JlU3RhdGVPZlRhcmdldChxdWV1ZWRUYXJnZXRzW2ldKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gdGhlIHJlbmRlcmVyLiBTdWNoIGFzIHdoZW4gd2UncmUgZGlzcGF0Y2hpbmcgZXZlbnRzIG9yIGlmIHRoaXJkIHBhcnR5XG4vLyBsaWJyYXJpZXMgbmVlZCB0byBjYWxsIGJhdGNoZWRVcGRhdGVzLiBFdmVudHVhbGx5LCB0aGlzIEFQSSB3aWxsIGdvIGF3YXkgd2hlblxuLy8gZXZlcnl0aGluZyBpcyBiYXRjaGVkIGJ5IGRlZmF1bHQuIFdlJ2xsIHRoZW4gaGF2ZSBhIHNpbWlsYXIgQVBJIHRvIG9wdC1vdXQgb2Zcbi8vIHNjaGVkdWxlZCB3b3JrIGFuZCBpbnN0ZWFkIGRvIHN5bmNocm9ub3VzIHdvcmsuXG4vLyBEZWZhdWx0c1xuXG52YXIgYmF0Y2hlZFVwZGF0ZXNJbXBsID0gZnVuY3Rpb24gKGZuLCBib29ra2VlcGluZykge1xuICByZXR1cm4gZm4oYm9va2tlZXBpbmcpO1xufTtcblxudmFyIGRpc2NyZXRlVXBkYXRlc0ltcGwgPSBmdW5jdGlvbiAoZm4sIGEsIGIsIGMsIGQpIHtcbiAgcmV0dXJuIGZuKGEsIGIsIGMsIGQpO1xufTtcblxudmFyIGZsdXNoRGlzY3JldGVVcGRhdGVzSW1wbCA9IGZ1bmN0aW9uICgpIHt9O1xuXG52YXIgYmF0Y2hlZEV2ZW50VXBkYXRlc0ltcGwgPSBiYXRjaGVkVXBkYXRlc0ltcGw7XG52YXIgaXNJbnNpZGVFdmVudEhhbmRsZXIgPSBmYWxzZTtcbnZhciBpc0JhdGNoaW5nRXZlbnRVcGRhdGVzID0gZmFsc2U7XG5cbmZ1bmN0aW9uIGZpbmlzaEV2ZW50SGFuZGxlcigpIHtcbiAgLy8gSGVyZSB3ZSB3YWl0IHVudGlsIGFsbCB1cGRhdGVzIGhhdmUgcHJvcGFnYXRlZCwgd2hpY2ggaXMgaW1wb3J0YW50XG4gIC8vIHdoZW4gdXNpbmcgY29udHJvbGxlZCBjb21wb25lbnRzIHdpdGhpbiBsYXllcnM6XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTY5OFxuICAvLyBUaGVuIHdlIHJlc3RvcmUgc3RhdGUgb2YgYW55IGNvbnRyb2xsZWQgY29tcG9uZW50LlxuICB2YXIgY29udHJvbGxlZENvbXBvbmVudHNIYXZlUGVuZGluZ1VwZGF0ZXMgPSBuZWVkc1N0YXRlUmVzdG9yZSgpO1xuXG4gIGlmIChjb250cm9sbGVkQ29tcG9uZW50c0hhdmVQZW5kaW5nVXBkYXRlcykge1xuICAgIC8vIElmIGEgY29udHJvbGxlZCBldmVudCB3YXMgZmlyZWQsIHdlIG1heSBuZWVkIHRvIHJlc3RvcmUgdGhlIHN0YXRlIG9mXG4gICAgLy8gdGhlIERPTSBub2RlIGJhY2sgdG8gdGhlIGNvbnRyb2xsZWQgdmFsdWUuIFRoaXMgaXMgbmVjZXNzYXJ5IHdoZW4gUmVhY3RcbiAgICAvLyBiYWlscyBvdXQgb2YgdGhlIHVwZGF0ZSB3aXRob3V0IHRvdWNoaW5nIHRoZSBET00uXG4gICAgZmx1c2hEaXNjcmV0ZVVwZGF0ZXNJbXBsKCk7XG4gICAgcmVzdG9yZVN0YXRlSWZOZWVkZWQoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBiYXRjaGVkVXBkYXRlcyhmbiwgYm9va2tlZXBpbmcpIHtcbiAgaWYgKGlzSW5zaWRlRXZlbnRIYW5kbGVyKSB7XG4gICAgLy8gSWYgd2UgYXJlIGN1cnJlbnRseSBpbnNpZGUgYW5vdGhlciBiYXRjaCwgd2UgbmVlZCB0byB3YWl0IHVudGlsIGl0XG4gICAgLy8gZnVsbHkgY29tcGxldGVzIGJlZm9yZSByZXN0b3Jpbmcgc3RhdGUuXG4gICAgcmV0dXJuIGZuKGJvb2trZWVwaW5nKTtcbiAgfVxuXG4gIGlzSW5zaWRlRXZlbnRIYW5kbGVyID0gdHJ1ZTtcblxuICB0cnkge1xuICAgIHJldHVybiBiYXRjaGVkVXBkYXRlc0ltcGwoZm4sIGJvb2trZWVwaW5nKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBpc0luc2lkZUV2ZW50SGFuZGxlciA9IGZhbHNlO1xuICAgIGZpbmlzaEV2ZW50SGFuZGxlcigpO1xuICB9XG59XG5mdW5jdGlvbiBiYXRjaGVkRXZlbnRVcGRhdGVzKGZuLCBhLCBiKSB7XG4gIGlmIChpc0JhdGNoaW5nRXZlbnRVcGRhdGVzKSB7XG4gICAgLy8gSWYgd2UgYXJlIGN1cnJlbnRseSBpbnNpZGUgYW5vdGhlciBiYXRjaCwgd2UgbmVlZCB0byB3YWl0IHVudGlsIGl0XG4gICAgLy8gZnVsbHkgY29tcGxldGVzIGJlZm9yZSByZXN0b3Jpbmcgc3RhdGUuXG4gICAgcmV0dXJuIGZuKGEsIGIpO1xuICB9XG5cbiAgaXNCYXRjaGluZ0V2ZW50VXBkYXRlcyA9IHRydWU7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gYmF0Y2hlZEV2ZW50VXBkYXRlc0ltcGwoZm4sIGEsIGIpO1xuICB9IGZpbmFsbHkge1xuICAgIGlzQmF0Y2hpbmdFdmVudFVwZGF0ZXMgPSBmYWxzZTtcbiAgICBmaW5pc2hFdmVudEhhbmRsZXIoKTtcbiAgfVxufVxuZnVuY3Rpb24gZGlzY3JldGVVcGRhdGVzKGZuLCBhLCBiLCBjLCBkKSB7XG4gIHZhciBwcmV2SXNJbnNpZGVFdmVudEhhbmRsZXIgPSBpc0luc2lkZUV2ZW50SGFuZGxlcjtcbiAgaXNJbnNpZGVFdmVudEhhbmRsZXIgPSB0cnVlO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGRpc2NyZXRlVXBkYXRlc0ltcGwoZm4sIGEsIGIsIGMsIGQpO1xuICB9IGZpbmFsbHkge1xuICAgIGlzSW5zaWRlRXZlbnRIYW5kbGVyID0gcHJldklzSW5zaWRlRXZlbnRIYW5kbGVyO1xuXG4gICAgaWYgKCFpc0luc2lkZUV2ZW50SGFuZGxlcikge1xuICAgICAgZmluaXNoRXZlbnRIYW5kbGVyKCk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBmbHVzaERpc2NyZXRlVXBkYXRlc0lmTmVlZGVkKHRpbWVTdGFtcCkge1xuICB7XG4gICAgaWYgKCFpc0luc2lkZUV2ZW50SGFuZGxlcikge1xuICAgICAgZmx1c2hEaXNjcmV0ZVVwZGF0ZXNJbXBsKCk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBzZXRCYXRjaGluZ0ltcGxlbWVudGF0aW9uKF9iYXRjaGVkVXBkYXRlc0ltcGwsIF9kaXNjcmV0ZVVwZGF0ZXNJbXBsLCBfZmx1c2hEaXNjcmV0ZVVwZGF0ZXNJbXBsLCBfYmF0Y2hlZEV2ZW50VXBkYXRlc0ltcGwpIHtcbiAgYmF0Y2hlZFVwZGF0ZXNJbXBsID0gX2JhdGNoZWRVcGRhdGVzSW1wbDtcbiAgZGlzY3JldGVVcGRhdGVzSW1wbCA9IF9kaXNjcmV0ZVVwZGF0ZXNJbXBsO1xuICBmbHVzaERpc2NyZXRlVXBkYXRlc0ltcGwgPSBfZmx1c2hEaXNjcmV0ZVVwZGF0ZXNJbXBsO1xuICBiYXRjaGVkRXZlbnRVcGRhdGVzSW1wbCA9IF9iYXRjaGVkRXZlbnRVcGRhdGVzSW1wbDtcbn1cblxuZnVuY3Rpb24gaXNJbnRlcmFjdGl2ZSh0YWcpIHtcbiAgcmV0dXJuIHRhZyA9PT0gJ2J1dHRvbicgfHwgdGFnID09PSAnaW5wdXQnIHx8IHRhZyA9PT0gJ3NlbGVjdCcgfHwgdGFnID09PSAndGV4dGFyZWEnO1xufVxuXG5mdW5jdGlvbiBzaG91bGRQcmV2ZW50TW91c2VFdmVudChuYW1lLCB0eXBlLCBwcm9wcykge1xuICBzd2l0Y2ggKG5hbWUpIHtcbiAgICBjYXNlICdvbkNsaWNrJzpcbiAgICBjYXNlICdvbkNsaWNrQ2FwdHVyZSc6XG4gICAgY2FzZSAnb25Eb3VibGVDbGljayc6XG4gICAgY2FzZSAnb25Eb3VibGVDbGlja0NhcHR1cmUnOlxuICAgIGNhc2UgJ29uTW91c2VEb3duJzpcbiAgICBjYXNlICdvbk1vdXNlRG93bkNhcHR1cmUnOlxuICAgIGNhc2UgJ29uTW91c2VNb3ZlJzpcbiAgICBjYXNlICdvbk1vdXNlTW92ZUNhcHR1cmUnOlxuICAgIGNhc2UgJ29uTW91c2VVcCc6XG4gICAgY2FzZSAnb25Nb3VzZVVwQ2FwdHVyZSc6XG4gICAgY2FzZSAnb25Nb3VzZUVudGVyJzpcbiAgICAgIHJldHVybiAhIShwcm9wcy5kaXNhYmxlZCAmJiBpc0ludGVyYWN0aXZlKHR5cGUpKTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGluc3QgVGhlIGluc3RhbmNlLCB3aGljaCBpcyB0aGUgc291cmNlIG9mIGV2ZW50cy5cbiAqIEBwYXJhbSB7c3RyaW5nfSByZWdpc3RyYXRpb25OYW1lIE5hbWUgb2YgbGlzdGVuZXIgKGUuZy4gYG9uQ2xpY2tgKS5cbiAqIEByZXR1cm4gez9mdW5jdGlvbn0gVGhlIHN0b3JlZCBjYWxsYmFjay5cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldExpc3RlbmVyKGluc3QsIHJlZ2lzdHJhdGlvbk5hbWUpIHtcbiAgdmFyIHN0YXRlTm9kZSA9IGluc3Quc3RhdGVOb2RlO1xuXG4gIGlmIChzdGF0ZU5vZGUgPT09IG51bGwpIHtcbiAgICAvLyBXb3JrIGluIHByb2dyZXNzIChleDogb25sb2FkIGV2ZW50cyBpbiBpbmNyZW1lbnRhbCBtb2RlKS5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBwcm9wcyA9IGdldEZpYmVyQ3VycmVudFByb3BzRnJvbU5vZGUoc3RhdGVOb2RlKTtcblxuICBpZiAocHJvcHMgPT09IG51bGwpIHtcbiAgICAvLyBXb3JrIGluIHByb2dyZXNzLlxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIGxpc3RlbmVyID0gcHJvcHNbcmVnaXN0cmF0aW9uTmFtZV07XG5cbiAgaWYgKHNob3VsZFByZXZlbnRNb3VzZUV2ZW50KHJlZ2lzdHJhdGlvbk5hbWUsIGluc3QudHlwZSwgcHJvcHMpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoISghbGlzdGVuZXIgfHwgdHlwZW9mIGxpc3RlbmVyID09PSAnZnVuY3Rpb24nKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIkV4cGVjdGVkIGBcIiArIHJlZ2lzdHJhdGlvbk5hbWUgKyBcImAgbGlzdGVuZXIgdG8gYmUgYSBmdW5jdGlvbiwgaW5zdGVhZCBnb3QgYSB2YWx1ZSBvZiBgXCIgKyB0eXBlb2YgbGlzdGVuZXIgKyBcImAgdHlwZS5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBsaXN0ZW5lcjtcbn1cblxudmFyIHBhc3NpdmVCcm93c2VyRXZlbnRzU3VwcG9ydGVkID0gZmFsc2U7IC8vIENoZWNrIGlmIGJyb3dzZXIgc3VwcG9ydCBldmVudHMgd2l0aCBwYXNzaXZlIGxpc3RlbmVyc1xuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0V2ZW50VGFyZ2V0L2FkZEV2ZW50TGlzdGVuZXIjU2FmZWx5X2RldGVjdGluZ19vcHRpb25fc3VwcG9ydFxuXG5pZiAoY2FuVXNlRE9NKSB7XG4gIHRyeSB7XG4gICAgdmFyIG9wdGlvbnMgPSB7fTsgLy8gJEZsb3dGaXhNZTogSWdub3JlIEZsb3cgY29tcGxhaW5pbmcgYWJvdXQgbmVlZGluZyBhIHZhbHVlXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob3B0aW9ucywgJ3Bhc3NpdmUnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcGFzc2l2ZUJyb3dzZXJFdmVudHNTdXBwb3J0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd0ZXN0Jywgb3B0aW9ucywgb3B0aW9ucyk7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Rlc3QnLCBvcHRpb25zLCBvcHRpb25zKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHBhc3NpdmVCcm93c2VyRXZlbnRzU3VwcG9ydGVkID0gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW52b2tlR3VhcmRlZENhbGxiYWNrUHJvZChuYW1lLCBmdW5jLCBjb250ZXh0LCBhLCBiLCBjLCBkLCBlLCBmKSB7XG4gIHZhciBmdW5jQXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMyk7XG5cbiAgdHJ5IHtcbiAgICBmdW5jLmFwcGx5KGNvbnRleHQsIGZ1bmNBcmdzKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aGlzLm9uRXJyb3IoZXJyb3IpO1xuICB9XG59XG5cbnZhciBpbnZva2VHdWFyZGVkQ2FsbGJhY2tJbXBsID0gaW52b2tlR3VhcmRlZENhbGxiYWNrUHJvZDtcblxue1xuICAvLyBJbiBERVYgbW9kZSwgd2Ugc3dhcCBvdXQgaW52b2tlR3VhcmRlZENhbGxiYWNrIGZvciBhIHNwZWNpYWwgdmVyc2lvblxuICAvLyB0aGF0IHBsYXlzIG1vcmUgbmljZWx5IHdpdGggdGhlIGJyb3dzZXIncyBEZXZUb29scy4gVGhlIGlkZWEgaXMgdG8gcHJlc2VydmVcbiAgLy8gXCJQYXVzZSBvbiBleGNlcHRpb25zXCIgYmVoYXZpb3IuIEJlY2F1c2UgUmVhY3Qgd3JhcHMgYWxsIHVzZXItcHJvdmlkZWRcbiAgLy8gZnVuY3Rpb25zIGluIGludm9rZUd1YXJkZWRDYWxsYmFjaywgYW5kIHRoZSBwcm9kdWN0aW9uIHZlcnNpb24gb2ZcbiAgLy8gaW52b2tlR3VhcmRlZENhbGxiYWNrIHVzZXMgYSB0cnktY2F0Y2gsIGFsbCB1c2VyIGV4Y2VwdGlvbnMgYXJlIHRyZWF0ZWRcbiAgLy8gbGlrZSBjYXVnaHQgZXhjZXB0aW9ucywgYW5kIHRoZSBEZXZUb29scyB3b24ndCBwYXVzZSB1bmxlc3MgdGhlIGRldmVsb3BlclxuICAvLyB0YWtlcyB0aGUgZXh0cmEgc3RlcCBvZiBlbmFibGluZyBwYXVzZSBvbiBjYXVnaHQgZXhjZXB0aW9ucy4gVGhpcyBpc1xuICAvLyB1bmludHVpdGl2ZSwgdGhvdWdoLCBiZWNhdXNlIGV2ZW4gdGhvdWdoIFJlYWN0IGhhcyBjYXVnaHQgdGhlIGVycm9yLCBmcm9tXG4gIC8vIHRoZSBkZXZlbG9wZXIncyBwZXJzcGVjdGl2ZSwgdGhlIGVycm9yIGlzIHVuY2F1Z2h0LlxuICAvL1xuICAvLyBUbyBwcmVzZXJ2ZSB0aGUgZXhwZWN0ZWQgXCJQYXVzZSBvbiBleGNlcHRpb25zXCIgYmVoYXZpb3IsIHdlIGRvbid0IHVzZSBhXG4gIC8vIHRyeS1jYXRjaCBpbiBERVYuIEluc3RlYWQsIHdlIHN5bmNocm9ub3VzbHkgZGlzcGF0Y2ggYSBmYWtlIGV2ZW50IHRvIGEgZmFrZVxuICAvLyBET00gbm9kZSwgYW5kIGNhbGwgdGhlIHVzZXItcHJvdmlkZWQgY2FsbGJhY2sgZnJvbSBpbnNpZGUgYW4gZXZlbnQgaGFuZGxlclxuICAvLyBmb3IgdGhhdCBmYWtlIGV2ZW50LiBJZiB0aGUgY2FsbGJhY2sgdGhyb3dzLCB0aGUgZXJyb3IgaXMgXCJjYXB0dXJlZFwiIHVzaW5nXG4gIC8vIGEgZ2xvYmFsIGV2ZW50IGhhbmRsZXIuIEJ1dCBiZWNhdXNlIHRoZSBlcnJvciBoYXBwZW5zIGluIGEgZGlmZmVyZW50XG4gIC8vIGV2ZW50IGxvb3AgY29udGV4dCwgaXQgZG9lcyBub3QgaW50ZXJydXB0IHRoZSBub3JtYWwgcHJvZ3JhbSBmbG93LlxuICAvLyBFZmZlY3RpdmVseSwgdGhpcyBnaXZlcyB1cyB0cnktY2F0Y2ggYmVoYXZpb3Igd2l0aG91dCBhY3R1YWxseSB1c2luZ1xuICAvLyB0cnktY2F0Y2guIE5lYXQhXG4gIC8vIENoZWNrIHRoYXQgdGhlIGJyb3dzZXIgc3VwcG9ydHMgdGhlIEFQSXMgd2UgbmVlZCB0byBpbXBsZW1lbnQgb3VyIHNwZWNpYWxcbiAgLy8gREVWIHZlcnNpb24gb2YgaW52b2tlR3VhcmRlZENhbGxiYWNrXG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LmRpc3BhdGNoRXZlbnQgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRXZlbnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgZmFrZU5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdyZWFjdCcpO1xuXG4gICAgaW52b2tlR3VhcmRlZENhbGxiYWNrSW1wbCA9IGZ1bmN0aW9uIGludm9rZUd1YXJkZWRDYWxsYmFja0RldihuYW1lLCBmdW5jLCBjb250ZXh0LCBhLCBiLCBjLCBkLCBlLCBmKSB7XG4gICAgICAvLyBJZiBkb2N1bWVudCBkb2Vzbid0IGV4aXN0IHdlIGtub3cgZm9yIHN1cmUgd2Ugd2lsbCBjcmFzaCBpbiB0aGlzIG1ldGhvZFxuICAgICAgLy8gd2hlbiB3ZSBjYWxsIGRvY3VtZW50LmNyZWF0ZUV2ZW50KCkuIEhvd2V2ZXIgdGhpcyBjYW4gY2F1c2UgY29uZnVzaW5nXG4gICAgICAvLyBlcnJvcnM6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9va2luY3ViYXRvci9jcmVhdGUtcmVhY3QtYXBwL2lzc3Vlcy8zNDgyXG4gICAgICAvLyBTbyB3ZSBwcmVlbXB0aXZlbHkgdGhyb3cgd2l0aCBhIGJldHRlciBtZXNzYWdlIGluc3RlYWQuXG4gICAgICBpZiAoISh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnKSkge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiVGhlIGBkb2N1bWVudGAgZ2xvYmFsIHdhcyBkZWZpbmVkIHdoZW4gUmVhY3Qgd2FzIGluaXRpYWxpemVkLCBidXQgaXMgbm90IGRlZmluZWQgYW55bW9yZS4gVGhpcyBjYW4gaGFwcGVuIGluIGEgdGVzdCBlbnZpcm9ubWVudCBpZiBhIGNvbXBvbmVudCBzY2hlZHVsZXMgYW4gdXBkYXRlIGZyb20gYW4gYXN5bmNocm9ub3VzIGNhbGxiYWNrLCBidXQgdGhlIHRlc3QgaGFzIGFscmVhZHkgZmluaXNoZWQgcnVubmluZy4gVG8gc29sdmUgdGhpcywgeW91IGNhbiBlaXRoZXIgdW5tb3VudCB0aGUgY29tcG9uZW50IGF0IHRoZSBlbmQgb2YgeW91ciB0ZXN0IChhbmQgZW5zdXJlIHRoYXQgYW55IGFzeW5jaHJvbm91cyBvcGVyYXRpb25zIGdldCBjYW5jZWxlZCBpbiBgY29tcG9uZW50V2lsbFVubW91bnRgKSwgb3IgeW91IGNhbiBjaGFuZ2UgdGhlIHRlc3QgaXRzZWxmIHRvIGJlIGFzeW5jaHJvbm91cy5cIiApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBldnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnRXZlbnQnKTtcbiAgICAgIHZhciBkaWRDYWxsID0gZmFsc2U7IC8vIEtlZXBzIHRyYWNrIG9mIHdoZXRoZXIgdGhlIHVzZXItcHJvdmlkZWQgY2FsbGJhY2sgdGhyZXcgYW4gZXJyb3IuIFdlXG4gICAgICAvLyBzZXQgdGhpcyB0byB0cnVlIGF0IHRoZSBiZWdpbm5pbmcsIHRoZW4gc2V0IGl0IHRvIGZhbHNlIHJpZ2h0IGFmdGVyXG4gICAgICAvLyBjYWxsaW5nIHRoZSBmdW5jdGlvbi4gSWYgdGhlIGZ1bmN0aW9uIGVycm9ycywgYGRpZEVycm9yYCB3aWxsIG5ldmVyIGJlXG4gICAgICAvLyBzZXQgdG8gZmFsc2UuIFRoaXMgc3RyYXRlZ3kgd29ya3MgZXZlbiBpZiB0aGUgYnJvd3NlciBpcyBmbGFreSBhbmRcbiAgICAgIC8vIGZhaWxzIHRvIGNhbGwgb3VyIGdsb2JhbCBlcnJvciBoYW5kbGVyLCBiZWNhdXNlIGl0IGRvZXNuJ3QgcmVseSBvblxuICAgICAgLy8gdGhlIGVycm9yIGV2ZW50IGF0IGFsbC5cblxuICAgICAgdmFyIGRpZEVycm9yID0gdHJ1ZTsgLy8gS2VlcHMgdHJhY2sgb2YgdGhlIHZhbHVlIG9mIHdpbmRvdy5ldmVudCBzbyB0aGF0IHdlIGNhbiByZXNldCBpdFxuICAgICAgLy8gZHVyaW5nIHRoZSBjYWxsYmFjayB0byBsZXQgdXNlciBjb2RlIGFjY2VzcyB3aW5kb3cuZXZlbnQgaW4gdGhlXG4gICAgICAvLyBicm93c2VycyB0aGF0IHN1cHBvcnQgaXQuXG5cbiAgICAgIHZhciB3aW5kb3dFdmVudCA9IHdpbmRvdy5ldmVudDsgLy8gS2VlcHMgdHJhY2sgb2YgdGhlIGRlc2NyaXB0b3Igb2Ygd2luZG93LmV2ZW50IHRvIHJlc3RvcmUgaXQgYWZ0ZXIgZXZlbnRcbiAgICAgIC8vIGRpc3BhdGNoaW5nOiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEzNjg4XG5cbiAgICAgIHZhciB3aW5kb3dFdmVudERlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHdpbmRvdywgJ2V2ZW50Jyk7XG5cbiAgICAgIGZ1bmN0aW9uIHJlc3RvcmVBZnRlckRpc3BhdGNoKCkge1xuICAgICAgICAvLyBXZSBpbW1lZGlhdGVseSByZW1vdmUgdGhlIGNhbGxiYWNrIGZyb20gZXZlbnQgbGlzdGVuZXJzIHNvIHRoYXRcbiAgICAgICAgLy8gbmVzdGVkIGBpbnZva2VHdWFyZGVkQ2FsbGJhY2tgIGNhbGxzIGRvIG5vdCBjbGFzaC4gT3RoZXJ3aXNlLCBhXG4gICAgICAgIC8vIG5lc3RlZCBjYWxsIHdvdWxkIHRyaWdnZXIgdGhlIGZha2UgZXZlbnQgaGFuZGxlcnMgb2YgYW55IGNhbGwgaGlnaGVyXG4gICAgICAgIC8vIGluIHRoZSBzdGFjay5cbiAgICAgICAgZmFrZU5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihldnRUeXBlLCBjYWxsQ2FsbGJhY2ssIGZhbHNlKTsgLy8gV2UgY2hlY2sgZm9yIHdpbmRvdy5oYXNPd25Qcm9wZXJ0eSgnZXZlbnQnKSB0byBwcmV2ZW50IHRoZVxuICAgICAgICAvLyB3aW5kb3cuZXZlbnQgYXNzaWdubWVudCBpbiBib3RoIElFIDw9IDEwIGFzIHRoZXkgdGhyb3cgYW4gZXJyb3JcbiAgICAgICAgLy8gXCJNZW1iZXIgbm90IGZvdW5kXCIgaW4gc3RyaWN0IG1vZGUsIGFuZCBpbiBGaXJlZm94IHdoaWNoIGRvZXMgbm90XG4gICAgICAgIC8vIHN1cHBvcnQgd2luZG93LmV2ZW50LlxuXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93LmV2ZW50ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuaGFzT3duUHJvcGVydHkoJ2V2ZW50JykpIHtcbiAgICAgICAgICB3aW5kb3cuZXZlbnQgPSB3aW5kb3dFdmVudDtcbiAgICAgICAgfVxuICAgICAgfSAvLyBDcmVhdGUgYW4gZXZlbnQgaGFuZGxlciBmb3Igb3VyIGZha2UgZXZlbnQuIFdlIHdpbGwgc3luY2hyb25vdXNseVxuICAgICAgLy8gZGlzcGF0Y2ggb3VyIGZha2UgZXZlbnQgdXNpbmcgYGRpc3BhdGNoRXZlbnRgLiBJbnNpZGUgdGhlIGhhbmRsZXIsIHdlXG4gICAgICAvLyBjYWxsIHRoZSB1c2VyLXByb3ZpZGVkIGNhbGxiYWNrLlxuXG5cbiAgICAgIHZhciBmdW5jQXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMyk7XG5cbiAgICAgIGZ1bmN0aW9uIGNhbGxDYWxsYmFjaygpIHtcbiAgICAgICAgZGlkQ2FsbCA9IHRydWU7XG4gICAgICAgIHJlc3RvcmVBZnRlckRpc3BhdGNoKCk7XG4gICAgICAgIGZ1bmMuYXBwbHkoY29udGV4dCwgZnVuY0FyZ3MpO1xuICAgICAgICBkaWRFcnJvciA9IGZhbHNlO1xuICAgICAgfSAvLyBDcmVhdGUgYSBnbG9iYWwgZXJyb3IgZXZlbnQgaGFuZGxlci4gV2UgdXNlIHRoaXMgdG8gY2FwdHVyZSB0aGUgdmFsdWVcbiAgICAgIC8vIHRoYXQgd2FzIHRocm93bi4gSXQncyBwb3NzaWJsZSB0aGF0IHRoaXMgZXJyb3IgaGFuZGxlciB3aWxsIGZpcmUgbW9yZVxuICAgICAgLy8gdGhhbiBvbmNlOyBmb3IgZXhhbXBsZSwgaWYgbm9uLVJlYWN0IGNvZGUgYWxzbyBjYWxscyBgZGlzcGF0Y2hFdmVudGBcbiAgICAgIC8vIGFuZCBhIGhhbmRsZXIgZm9yIHRoYXQgZXZlbnQgdGhyb3dzLiBXZSBzaG91bGQgYmUgcmVzaWxpZW50IHRvIG1vc3Qgb2ZcbiAgICAgIC8vIHRob3NlIGNhc2VzLiBFdmVuIGlmIG91ciBlcnJvciBldmVudCBoYW5kbGVyIGZpcmVzIG1vcmUgdGhhbiBvbmNlLCB0aGVcbiAgICAgIC8vIGxhc3QgZXJyb3IgZXZlbnQgaXMgYWx3YXlzIHVzZWQuIElmIHRoZSBjYWxsYmFjayBhY3R1YWxseSBkb2VzIGVycm9yLFxuICAgICAgLy8gd2Uga25vdyB0aGF0IHRoZSBsYXN0IGVycm9yIGV2ZW50IGlzIHRoZSBjb3JyZWN0IG9uZSwgYmVjYXVzZSBpdCdzIG5vdFxuICAgICAgLy8gcG9zc2libGUgZm9yIGFueXRoaW5nIGVsc2UgdG8gaGF2ZSBoYXBwZW5lZCBpbiBiZXR3ZWVuIG91ciBjYWxsYmFja1xuICAgICAgLy8gZXJyb3JpbmcgYW5kIHRoZSBjb2RlIHRoYXQgZm9sbG93cyB0aGUgYGRpc3BhdGNoRXZlbnRgIGNhbGwgYmVsb3cuIElmXG4gICAgICAvLyB0aGUgY2FsbGJhY2sgZG9lc24ndCBlcnJvciwgYnV0IHRoZSBlcnJvciBldmVudCB3YXMgZmlyZWQsIHdlIGtub3cgdG9cbiAgICAgIC8vIGlnbm9yZSBpdCBiZWNhdXNlIGBkaWRFcnJvcmAgd2lsbCBiZSBmYWxzZSwgYXMgZGVzY3JpYmVkIGFib3ZlLlxuXG5cbiAgICAgIHZhciBlcnJvcjsgLy8gVXNlIHRoaXMgdG8gdHJhY2sgd2hldGhlciB0aGUgZXJyb3IgZXZlbnQgaXMgZXZlciBjYWxsZWQuXG5cbiAgICAgIHZhciBkaWRTZXRFcnJvciA9IGZhbHNlO1xuICAgICAgdmFyIGlzQ3Jvc3NPcmlnaW5FcnJvciA9IGZhbHNlO1xuXG4gICAgICBmdW5jdGlvbiBoYW5kbGVXaW5kb3dFcnJvcihldmVudCkge1xuICAgICAgICBlcnJvciA9IGV2ZW50LmVycm9yO1xuICAgICAgICBkaWRTZXRFcnJvciA9IHRydWU7XG5cbiAgICAgICAgaWYgKGVycm9yID09PSBudWxsICYmIGV2ZW50LmNvbG5vID09PSAwICYmIGV2ZW50LmxpbmVubyA9PT0gMCkge1xuICAgICAgICAgIGlzQ3Jvc3NPcmlnaW5FcnJvciA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICAgIC8vIFNvbWUgb3RoZXIgZXJyb3IgaGFuZGxlciBoYXMgcHJldmVudGVkIGRlZmF1bHQuXG4gICAgICAgICAgLy8gQnJvd3NlcnMgc2lsZW5jZSB0aGUgZXJyb3IgcmVwb3J0IGlmIHRoaXMgaGFwcGVucy5cbiAgICAgICAgICAvLyBXZSdsbCByZW1lbWJlciB0aGlzIHRvIGxhdGVyIGRlY2lkZSB3aGV0aGVyIHRvIGxvZyBpdCBvciBub3QuXG4gICAgICAgICAgaWYgKGVycm9yICE9IG51bGwgJiYgdHlwZW9mIGVycm9yID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgZXJyb3IuX3N1cHByZXNzTG9nZ2luZyA9IHRydWU7XG4gICAgICAgICAgICB9IGNhdGNoIChpbm5lcikgey8vIElnbm9yZS5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gLy8gQ3JlYXRlIGEgZmFrZSBldmVudCB0eXBlLlxuXG5cbiAgICAgIHZhciBldnRUeXBlID0gXCJyZWFjdC1cIiArIChuYW1lID8gbmFtZSA6ICdpbnZva2VndWFyZGVkY2FsbGJhY2snKTsgLy8gQXR0YWNoIG91ciBldmVudCBoYW5kbGVyc1xuXG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBoYW5kbGVXaW5kb3dFcnJvcik7XG4gICAgICBmYWtlTm9kZS5hZGRFdmVudExpc3RlbmVyKGV2dFR5cGUsIGNhbGxDYWxsYmFjaywgZmFsc2UpOyAvLyBTeW5jaHJvbm91c2x5IGRpc3BhdGNoIG91ciBmYWtlIGV2ZW50LiBJZiB0aGUgdXNlci1wcm92aWRlZCBmdW5jdGlvblxuICAgICAgLy8gZXJyb3JzLCBpdCB3aWxsIHRyaWdnZXIgb3VyIGdsb2JhbCBlcnJvciBoYW5kbGVyLlxuXG4gICAgICBldnQuaW5pdEV2ZW50KGV2dFR5cGUsIGZhbHNlLCBmYWxzZSk7XG4gICAgICBmYWtlTm9kZS5kaXNwYXRjaEV2ZW50KGV2dCk7XG5cbiAgICAgIGlmICh3aW5kb3dFdmVudERlc2NyaXB0b3IpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdywgJ2V2ZW50Jywgd2luZG93RXZlbnREZXNjcmlwdG9yKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRpZENhbGwgJiYgZGlkRXJyb3IpIHtcbiAgICAgICAgaWYgKCFkaWRTZXRFcnJvcikge1xuICAgICAgICAgIC8vIFRoZSBjYWxsYmFjayBlcnJvcmVkLCBidXQgdGhlIGVycm9yIGV2ZW50IG5ldmVyIGZpcmVkLlxuICAgICAgICAgIGVycm9yID0gbmV3IEVycm9yKCdBbiBlcnJvciB3YXMgdGhyb3duIGluc2lkZSBvbmUgb2YgeW91ciBjb21wb25lbnRzLCBidXQgUmVhY3QgJyArIFwiZG9lc24ndCBrbm93IHdoYXQgaXQgd2FzLiBUaGlzIGlzIGxpa2VseSBkdWUgdG8gYnJvd3NlciBcIiArICdmbGFraW5lc3MuIFJlYWN0IGRvZXMgaXRzIGJlc3QgdG8gcHJlc2VydmUgdGhlIFwiUGF1c2Ugb24gJyArICdleGNlcHRpb25zXCIgYmVoYXZpb3Igb2YgdGhlIERldlRvb2xzLCB3aGljaCByZXF1aXJlcyBzb21lICcgKyBcIkRFVi1tb2RlIG9ubHkgdHJpY2tzLiBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlc2UgZG9uJ3Qgd29yayBpbiBcIiArICd5b3VyIGJyb3dzZXIuIFRyeSB0cmlnZ2VyaW5nIHRoZSBlcnJvciBpbiBwcm9kdWN0aW9uIG1vZGUsICcgKyAnb3Igc3dpdGNoaW5nIHRvIGEgbW9kZXJuIGJyb3dzZXIuIElmIHlvdSBzdXNwZWN0IHRoYXQgdGhpcyBpcyAnICsgJ2FjdHVhbGx5IGFuIGlzc3VlIHdpdGggUmVhY3QsIHBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzQ3Jvc3NPcmlnaW5FcnJvcikge1xuICAgICAgICAgIGVycm9yID0gbmV3IEVycm9yKFwiQSBjcm9zcy1vcmlnaW4gZXJyb3Igd2FzIHRocm93bi4gUmVhY3QgZG9lc24ndCBoYXZlIGFjY2VzcyB0byBcIiArICd0aGUgYWN0dWFsIGVycm9yIG9iamVjdCBpbiBkZXZlbG9wbWVudC4gJyArICdTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2Nyb3Nzb3JpZ2luLWVycm9yIGZvciBtb3JlIGluZm9ybWF0aW9uLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vbkVycm9yKGVycm9yKTtcbiAgICAgIH0gLy8gUmVtb3ZlIG91ciBldmVudCBsaXN0ZW5lcnNcblxuXG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignZXJyb3InLCBoYW5kbGVXaW5kb3dFcnJvcik7XG5cbiAgICAgIGlmICghZGlkQ2FsbCkge1xuICAgICAgICAvLyBTb21ldGhpbmcgd2VudCByZWFsbHkgd3JvbmcsIGFuZCBvdXIgZXZlbnQgd2FzIG5vdCBkaXNwYXRjaGVkLlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzE2NzM0XG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTY1ODVcbiAgICAgICAgLy8gRmFsbCBiYWNrIHRvIHRoZSBwcm9kdWN0aW9uIGltcGxlbWVudGF0aW9uLlxuICAgICAgICByZXN0b3JlQWZ0ZXJEaXNwYXRjaCgpO1xuICAgICAgICByZXR1cm4gaW52b2tlR3VhcmRlZENhbGxiYWNrUHJvZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfVxuICAgIH07XG4gIH1cbn1cblxudmFyIGludm9rZUd1YXJkZWRDYWxsYmFja0ltcGwkMSA9IGludm9rZUd1YXJkZWRDYWxsYmFja0ltcGw7XG5cbnZhciBoYXNFcnJvciA9IGZhbHNlO1xudmFyIGNhdWdodEVycm9yID0gbnVsbDsgLy8gVXNlZCBieSBldmVudCBzeXN0ZW0gdG8gY2FwdHVyZS9yZXRocm93IHRoZSBmaXJzdCBlcnJvci5cblxudmFyIGhhc1JldGhyb3dFcnJvciA9IGZhbHNlO1xudmFyIHJldGhyb3dFcnJvciA9IG51bGw7XG52YXIgcmVwb3J0ZXIgPSB7XG4gIG9uRXJyb3I6IGZ1bmN0aW9uIChlcnJvcikge1xuICAgIGhhc0Vycm9yID0gdHJ1ZTtcbiAgICBjYXVnaHRFcnJvciA9IGVycm9yO1xuICB9XG59O1xuLyoqXG4gKiBDYWxsIGEgZnVuY3Rpb24gd2hpbGUgZ3VhcmRpbmcgYWdhaW5zdCBlcnJvcnMgdGhhdCBoYXBwZW5zIHdpdGhpbiBpdC5cbiAqIFJldHVybnMgYW4gZXJyb3IgaWYgaXQgdGhyb3dzLCBvdGhlcndpc2UgbnVsbC5cbiAqXG4gKiBJbiBwcm9kdWN0aW9uLCB0aGlzIGlzIGltcGxlbWVudGVkIHVzaW5nIGEgdHJ5LWNhdGNoLiBUaGUgcmVhc29uIHdlIGRvbid0XG4gKiB1c2UgYSB0cnktY2F0Y2ggZGlyZWN0bHkgaXMgc28gdGhhdCB3ZSBjYW4gc3dhcCBvdXQgYSBkaWZmZXJlbnRcbiAqIGltcGxlbWVudGF0aW9uIGluIERFViBtb2RlLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIG9mIHRoZSBndWFyZCB0byB1c2UgZm9yIGxvZ2dpbmcgb3IgZGVidWdnaW5nXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBpbnZva2VcbiAqIEBwYXJhbSB7Kn0gY29udGV4dCBUaGUgY29udGV4dCB0byB1c2Ugd2hlbiBjYWxsaW5nIHRoZSBmdW5jdGlvblxuICogQHBhcmFtIHsuLi4qfSBhcmdzIEFyZ3VtZW50cyBmb3IgZnVuY3Rpb25cbiAqL1xuXG5mdW5jdGlvbiBpbnZva2VHdWFyZGVkQ2FsbGJhY2sobmFtZSwgZnVuYywgY29udGV4dCwgYSwgYiwgYywgZCwgZSwgZikge1xuICBoYXNFcnJvciA9IGZhbHNlO1xuICBjYXVnaHRFcnJvciA9IG51bGw7XG4gIGludm9rZUd1YXJkZWRDYWxsYmFja0ltcGwkMS5hcHBseShyZXBvcnRlciwgYXJndW1lbnRzKTtcbn1cbi8qKlxuICogU2FtZSBhcyBpbnZva2VHdWFyZGVkQ2FsbGJhY2ssIGJ1dCBpbnN0ZWFkIG9mIHJldHVybmluZyBhbiBlcnJvciwgaXQgc3RvcmVzXG4gKiBpdCBpbiBhIGdsb2JhbCBzbyBpdCBjYW4gYmUgcmV0aHJvd24gYnkgYHJldGhyb3dDYXVnaHRFcnJvcmAgbGF0ZXIuXG4gKiBUT0RPOiBTZWUgaWYgY2F1Z2h0RXJyb3IgYW5kIHJldGhyb3dFcnJvciBjYW4gYmUgdW5pZmllZC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBvZiB0aGUgZ3VhcmQgdG8gdXNlIGZvciBsb2dnaW5nIG9yIGRlYnVnZ2luZ1xuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaW52b2tlXG4gKiBAcGFyYW0geyp9IGNvbnRleHQgVGhlIGNvbnRleHQgdG8gdXNlIHdoZW4gY2FsbGluZyB0aGUgZnVuY3Rpb25cbiAqIEBwYXJhbSB7Li4uKn0gYXJncyBBcmd1bWVudHMgZm9yIGZ1bmN0aW9uXG4gKi9cblxuZnVuY3Rpb24gaW52b2tlR3VhcmRlZENhbGxiYWNrQW5kQ2F0Y2hGaXJzdEVycm9yKG5hbWUsIGZ1bmMsIGNvbnRleHQsIGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgaW52b2tlR3VhcmRlZENhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgaWYgKGhhc0Vycm9yKSB7XG4gICAgdmFyIGVycm9yID0gY2xlYXJDYXVnaHRFcnJvcigpO1xuXG4gICAgaWYgKCFoYXNSZXRocm93RXJyb3IpIHtcbiAgICAgIGhhc1JldGhyb3dFcnJvciA9IHRydWU7XG4gICAgICByZXRocm93RXJyb3IgPSBlcnJvcjtcbiAgICB9XG4gIH1cbn1cbi8qKlxuICogRHVyaW5nIGV4ZWN1dGlvbiBvZiBndWFyZGVkIGZ1bmN0aW9ucyB3ZSB3aWxsIGNhcHR1cmUgdGhlIGZpcnN0IGVycm9yIHdoaWNoXG4gKiB3ZSB3aWxsIHJldGhyb3cgdG8gYmUgaGFuZGxlZCBieSB0aGUgdG9wIGxldmVsIGVycm9yIGhhbmRsZXIuXG4gKi9cblxuZnVuY3Rpb24gcmV0aHJvd0NhdWdodEVycm9yKCkge1xuICBpZiAoaGFzUmV0aHJvd0Vycm9yKSB7XG4gICAgdmFyIGVycm9yID0gcmV0aHJvd0Vycm9yO1xuICAgIGhhc1JldGhyb3dFcnJvciA9IGZhbHNlO1xuICAgIHJldGhyb3dFcnJvciA9IG51bGw7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cbmZ1bmN0aW9uIGhhc0NhdWdodEVycm9yKCkge1xuICByZXR1cm4gaGFzRXJyb3I7XG59XG5mdW5jdGlvbiBjbGVhckNhdWdodEVycm9yKCkge1xuICBpZiAoaGFzRXJyb3IpIHtcbiAgICB2YXIgZXJyb3IgPSBjYXVnaHRFcnJvcjtcbiAgICBoYXNFcnJvciA9IGZhbHNlO1xuICAgIGNhdWdodEVycm9yID0gbnVsbDtcbiAgICByZXR1cm4gZXJyb3I7XG4gIH0gZWxzZSB7XG4gICAge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJjbGVhckNhdWdodEVycm9yIHdhcyBjYWxsZWQgYnV0IG5vIGVycm9yIHdhcyBjYXB0dXJlZC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIGBSZWFjdEluc3RhbmNlTWFwYCBtYWludGFpbnMgYSBtYXBwaW5nIGZyb20gYSBwdWJsaWMgZmFjaW5nIHN0YXRlZnVsXG4gKiBpbnN0YW5jZSAoa2V5KSBhbmQgdGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9uICh2YWx1ZSkuIFRoaXMgYWxsb3dzIHB1YmxpY1xuICogbWV0aG9kcyB0byBhY2NlcHQgdGhlIHVzZXIgZmFjaW5nIGluc3RhbmNlIGFzIGFuIGFyZ3VtZW50IGFuZCBtYXAgdGhlbSBiYWNrXG4gKiB0byBpbnRlcm5hbCBtZXRob2RzLlxuICpcbiAqIE5vdGUgdGhhdCB0aGlzIG1vZHVsZSBpcyBjdXJyZW50bHkgc2hhcmVkIGFuZCBhc3N1bWVkIHRvIGJlIHN0YXRlbGVzcy5cbiAqIElmIHRoaXMgYmVjb21lcyBhbiBhY3R1YWwgTWFwLCB0aGF0IHdpbGwgYnJlYWsuXG4gKi9cbmZ1bmN0aW9uIGdldChrZXkpIHtcbiAgcmV0dXJuIGtleS5fcmVhY3RJbnRlcm5hbHM7XG59XG5mdW5jdGlvbiBoYXMoa2V5KSB7XG4gIHJldHVybiBrZXkuX3JlYWN0SW50ZXJuYWxzICE9PSB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICBrZXkuX3JlYWN0SW50ZXJuYWxzID0gdmFsdWU7XG59XG5cbi8vIERvbid0IGNoYW5nZSB0aGVzZSB0d28gdmFsdWVzLiBUaGV5J3JlIHVzZWQgYnkgUmVhY3QgRGV2IFRvb2xzLlxudmFyIE5vRmxhZ3MgPVxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbjA7XG52YXIgUGVyZm9ybWVkV29yayA9XG4vKiAgICAgICAgICAgICAgICAqL1xuMTsgLy8gWW91IGNhbiBjaGFuZ2UgdGhlIHJlc3QgKGFuZCBhZGQgbW9yZSkuXG5cbnZhciBQbGFjZW1lbnQgPVxuLyogICAgICAgICAgICAgICAgICAgICovXG4yO1xudmFyIFVwZGF0ZSA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbjQ7XG52YXIgUGxhY2VtZW50QW5kVXBkYXRlID1cbi8qICAgICAgICAgICAqL1xuNjtcbnZhciBEZWxldGlvbiA9XG4vKiAgICAgICAgICAgICAgICAgICAgICovXG44O1xudmFyIENvbnRlbnRSZXNldCA9XG4vKiAgICAgICAgICAgICAgICAgKi9cbjE2O1xudmFyIENhbGxiYWNrID1cbi8qICAgICAgICAgICAgICAgICAgICAgKi9cbjMyO1xudmFyIERpZENhcHR1cmUgPVxuLyogICAgICAgICAgICAgICAgICAgKi9cbjY0O1xudmFyIFJlZiA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbjEyODtcbnZhciBTbmFwc2hvdCA9XG4vKiAgICAgICAgICAgICAgICAgICAgICovXG4yNTY7XG52YXIgUGFzc2l2ZSA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuNTEyOyAvLyBUT0RPIChlZmZlY3RzKSBSZW1vdmUgdGhpcyBiaXQgb25jZSB0aGUgbmV3IHJlY29uY2lsZXIgaXMgc3luY2VkIHRvIHRoZSBvbGQuXG5cbnZhciBQYXNzaXZlVW5tb3VudFBlbmRpbmdEZXYgPVxuLyogICAgICovXG44MTkyO1xudmFyIEh5ZHJhdGluZyA9XG4vKiAgICAgICAgICAgICAgICAgICAgKi9cbjEwMjQ7XG52YXIgSHlkcmF0aW5nQW5kVXBkYXRlID1cbi8qICAgICAgICAgICAqL1xuMTAyODsgLy8gUGFzc2l2ZSAmIFVwZGF0ZSAmIENhbGxiYWNrICYgUmVmICYgU25hcHNob3RcblxudmFyIExpZmVjeWNsZUVmZmVjdE1hc2sgPVxuLyogICAgICAgICAgKi9cbjkzMjsgLy8gVW5pb24gb2YgYWxsIGhvc3QgZWZmZWN0c1xuXG52YXIgSG9zdEVmZmVjdE1hc2sgPVxuLyogICAgICAgICAgICAgICAqL1xuMjA0NzsgLy8gVGhlc2UgYXJlIG5vdCByZWFsbHkgc2lkZSBlZmZlY3RzLCBidXQgd2Ugc3RpbGwgcmV1c2UgdGhpcyBmaWVsZC5cblxudmFyIEluY29tcGxldGUgPVxuLyogICAgICAgICAgICAgICAgICAgKi9cbjIwNDg7XG52YXIgU2hvdWxkQ2FwdHVyZSA9XG4vKiAgICAgICAgICAgICAgICAqL1xuNDA5NjtcbnZhciBGb3JjZVVwZGF0ZUZvckxlZ2FjeVN1c3BlbnNlID1cbi8qICovXG4xNjM4NDsgLy8gU3RhdGljIHRhZ3MgZGVzY3JpYmUgYXNwZWN0cyBvZiBhIGZpYmVyIHRoYXQgYXJlIG5vdCBzcGVjaWZpYyB0byBhIHJlbmRlcixcblxudmFyIFJlYWN0Q3VycmVudE93bmVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50T3duZXI7XG5mdW5jdGlvbiBnZXROZWFyZXN0TW91bnRlZEZpYmVyKGZpYmVyKSB7XG4gIHZhciBub2RlID0gZmliZXI7XG4gIHZhciBuZWFyZXN0TW91bnRlZCA9IGZpYmVyO1xuXG4gIGlmICghZmliZXIuYWx0ZXJuYXRlKSB7XG4gICAgLy8gSWYgdGhlcmUgaXMgbm8gYWx0ZXJuYXRlLCB0aGlzIG1pZ2h0IGJlIGEgbmV3IHRyZWUgdGhhdCBpc24ndCBpbnNlcnRlZFxuICAgIC8vIHlldC4gSWYgaXQgaXMsIHRoZW4gaXQgd2lsbCBoYXZlIGEgcGVuZGluZyBpbnNlcnRpb24gZWZmZWN0IG9uIGl0LlxuICAgIHZhciBuZXh0Tm9kZSA9IG5vZGU7XG5cbiAgICBkbyB7XG4gICAgICBub2RlID0gbmV4dE5vZGU7XG5cbiAgICAgIGlmICgobm9kZS5mbGFncyAmIChQbGFjZW1lbnQgfCBIeWRyYXRpbmcpKSAhPT0gTm9GbGFncykge1xuICAgICAgICAvLyBUaGlzIGlzIGFuIGluc2VydGlvbiBvciBpbi1wcm9ncmVzcyBoeWRyYXRpb24uIFRoZSBuZWFyZXN0IHBvc3NpYmxlXG4gICAgICAgIC8vIG1vdW50ZWQgZmliZXIgaXMgdGhlIHBhcmVudCBidXQgd2UgbmVlZCB0byBjb250aW51ZSB0byBmaWd1cmUgb3V0XG4gICAgICAgIC8vIGlmIHRoYXQgb25lIGlzIHN0aWxsIG1vdW50ZWQuXG4gICAgICAgIG5lYXJlc3RNb3VudGVkID0gbm9kZS5yZXR1cm47XG4gICAgICB9XG5cbiAgICAgIG5leHROb2RlID0gbm9kZS5yZXR1cm47XG4gICAgfSB3aGlsZSAobmV4dE5vZGUpO1xuICB9IGVsc2Uge1xuICAgIHdoaWxlIChub2RlLnJldHVybikge1xuICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGlmIChub2RlLnRhZyA9PT0gSG9zdFJvb3QpIHtcbiAgICAvLyBUT0RPOiBDaGVjayBpZiB0aGlzIHdhcyBhIG5lc3RlZCBIb3N0Um9vdCB3aGVuIHVzZWQgd2l0aFxuICAgIC8vIHJlbmRlckNvbnRhaW5lckludG9TdWJ0cmVlLlxuICAgIHJldHVybiBuZWFyZXN0TW91bnRlZDtcbiAgfSAvLyBJZiB3ZSBkaWRuJ3QgaGl0IHRoZSByb290LCB0aGF0IG1lYW5zIHRoYXQgd2UncmUgaW4gYW4gZGlzY29ubmVjdGVkIHRyZWVcbiAgLy8gdGhhdCBoYXMgYmVlbiB1bm1vdW50ZWQuXG5cblxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGdldFN1c3BlbnNlSW5zdGFuY2VGcm9tRmliZXIoZmliZXIpIHtcbiAgaWYgKGZpYmVyLnRhZyA9PT0gU3VzcGVuc2VDb21wb25lbnQpIHtcbiAgICB2YXIgc3VzcGVuc2VTdGF0ZSA9IGZpYmVyLm1lbW9pemVkU3RhdGU7XG5cbiAgICBpZiAoc3VzcGVuc2VTdGF0ZSA9PT0gbnVsbCkge1xuICAgICAgdmFyIGN1cnJlbnQgPSBmaWJlci5hbHRlcm5hdGU7XG5cbiAgICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgIHN1c3BlbnNlU3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN1c3BlbnNlU3RhdGUgIT09IG51bGwpIHtcbiAgICAgIHJldHVybiBzdXNwZW5zZVN0YXRlLmRlaHlkcmF0ZWQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBnZXRDb250YWluZXJGcm9tRmliZXIoZmliZXIpIHtcbiAgcmV0dXJuIGZpYmVyLnRhZyA9PT0gSG9zdFJvb3QgPyBmaWJlci5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyA6IG51bGw7XG59XG5mdW5jdGlvbiBpc0ZpYmVyTW91bnRlZChmaWJlcikge1xuICByZXR1cm4gZ2V0TmVhcmVzdE1vdW50ZWRGaWJlcihmaWJlcikgPT09IGZpYmVyO1xufVxuZnVuY3Rpb24gaXNNb3VudGVkKGNvbXBvbmVudCkge1xuICB7XG4gICAgdmFyIG93bmVyID0gUmVhY3RDdXJyZW50T3duZXIuY3VycmVudDtcblxuICAgIGlmIChvd25lciAhPT0gbnVsbCAmJiBvd25lci50YWcgPT09IENsYXNzQ29tcG9uZW50KSB7XG4gICAgICB2YXIgb3duZXJGaWJlciA9IG93bmVyO1xuICAgICAgdmFyIGluc3RhbmNlID0gb3duZXJGaWJlci5zdGF0ZU5vZGU7XG5cbiAgICAgIGlmICghaW5zdGFuY2UuX3dhcm5lZEFib3V0UmVmc0luUmVuZGVyKSB7XG4gICAgICAgIGVycm9yKCclcyBpcyBhY2Nlc3NpbmcgaXNNb3VudGVkIGluc2lkZSBpdHMgcmVuZGVyKCkgZnVuY3Rpb24uICcgKyAncmVuZGVyKCkgc2hvdWxkIGJlIGEgcHVyZSBmdW5jdGlvbiBvZiBwcm9wcyBhbmQgc3RhdGUuIEl0IHNob3VsZCAnICsgJ25ldmVyIGFjY2VzcyBzb21ldGhpbmcgdGhhdCByZXF1aXJlcyBzdGFsZSBkYXRhIGZyb20gdGhlIHByZXZpb3VzICcgKyAncmVuZGVyLCBzdWNoIGFzIHJlZnMuIE1vdmUgdGhpcyBsb2dpYyB0byBjb21wb25lbnREaWRNb3VudCBhbmQgJyArICdjb21wb25lbnREaWRVcGRhdGUgaW5zdGVhZC4nLCBnZXRDb21wb25lbnROYW1lKG93bmVyRmliZXIudHlwZSkgfHwgJ0EgY29tcG9uZW50Jyk7XG4gICAgICB9XG5cbiAgICAgIGluc3RhbmNlLl93YXJuZWRBYm91dFJlZnNJblJlbmRlciA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgdmFyIGZpYmVyID0gZ2V0KGNvbXBvbmVudCk7XG5cbiAgaWYgKCFmaWJlcikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBnZXROZWFyZXN0TW91bnRlZEZpYmVyKGZpYmVyKSA9PT0gZmliZXI7XG59XG5cbmZ1bmN0aW9uIGFzc2VydElzTW91bnRlZChmaWJlcikge1xuICBpZiAoIShnZXROZWFyZXN0TW91bnRlZEZpYmVyKGZpYmVyKSA9PT0gZmliZXIpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiVW5hYmxlIHRvIGZpbmQgbm9kZSBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LlwiICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmRDdXJyZW50RmliZXJVc2luZ1Nsb3dQYXRoKGZpYmVyKSB7XG4gIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG5cbiAgaWYgKCFhbHRlcm5hdGUpIHtcbiAgICAvLyBJZiB0aGVyZSBpcyBubyBhbHRlcm5hdGUsIHRoZW4gd2Ugb25seSBuZWVkIHRvIGNoZWNrIGlmIGl0IGlzIG1vdW50ZWQuXG4gICAgdmFyIG5lYXJlc3RNb3VudGVkID0gZ2V0TmVhcmVzdE1vdW50ZWRGaWJlcihmaWJlcik7XG5cbiAgICBpZiAoIShuZWFyZXN0TW91bnRlZCAhPT0gbnVsbCkpIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiVW5hYmxlIHRvIGZpbmQgbm9kZSBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LlwiICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG5lYXJlc3RNb3VudGVkICE9PSBmaWJlcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpYmVyO1xuICB9IC8vIElmIHdlIGhhdmUgdHdvIHBvc3NpYmxlIGJyYW5jaGVzLCB3ZSdsbCB3YWxrIGJhY2t3YXJkcyB1cCB0byB0aGUgcm9vdFxuICAvLyB0byBzZWUgd2hhdCBwYXRoIHRoZSByb290IHBvaW50cyB0by4gT24gdGhlIHdheSB3ZSBtYXkgaGl0IG9uZSBvZiB0aGVcbiAgLy8gc3BlY2lhbCBjYXNlcyBhbmQgd2UnbGwgZGVhbCB3aXRoIHRoZW0uXG5cblxuICB2YXIgYSA9IGZpYmVyO1xuICB2YXIgYiA9IGFsdGVybmF0ZTtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIHZhciBwYXJlbnRBID0gYS5yZXR1cm47XG5cbiAgICBpZiAocGFyZW50QSA9PT0gbnVsbCkge1xuICAgICAgLy8gV2UncmUgYXQgdGhlIHJvb3QuXG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICB2YXIgcGFyZW50QiA9IHBhcmVudEEuYWx0ZXJuYXRlO1xuXG4gICAgaWYgKHBhcmVudEIgPT09IG51bGwpIHtcbiAgICAgIC8vIFRoZXJlIGlzIG5vIGFsdGVybmF0ZS4gVGhpcyBpcyBhbiB1bnVzdWFsIGNhc2UuIEN1cnJlbnRseSwgaXQgb25seVxuICAgICAgLy8gaGFwcGVucyB3aGVuIGEgU3VzcGVuc2UgY29tcG9uZW50IGlzIGhpZGRlbi4gQW4gZXh0cmEgZnJhZ21lbnQgZmliZXJcbiAgICAgIC8vIGlzIGluc2VydGVkIGluIGJldHdlZW4gdGhlIFN1c3BlbnNlIGZpYmVyIGFuZCBpdHMgY2hpbGRyZW4uIFNraXBcbiAgICAgIC8vIG92ZXIgdGhpcyBleHRyYSBmcmFnbWVudCBmaWJlciBhbmQgcHJvY2VlZCB0byB0aGUgbmV4dCBwYXJlbnQuXG4gICAgICB2YXIgbmV4dFBhcmVudCA9IHBhcmVudEEucmV0dXJuO1xuXG4gICAgICBpZiAobmV4dFBhcmVudCAhPT0gbnVsbCkge1xuICAgICAgICBhID0gYiA9IG5leHRQYXJlbnQ7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSAvLyBJZiB0aGVyZSdzIG5vIHBhcmVudCwgd2UncmUgYXQgdGhlIHJvb3QuXG5cblxuICAgICAgYnJlYWs7XG4gICAgfSAvLyBJZiBib3RoIGNvcGllcyBvZiB0aGUgcGFyZW50IGZpYmVyIHBvaW50IHRvIHRoZSBzYW1lIGNoaWxkLCB3ZSBjYW5cbiAgICAvLyBhc3N1bWUgdGhhdCB0aGUgY2hpbGQgaXMgY3VycmVudC4gVGhpcyBoYXBwZW5zIHdoZW4gd2UgYmFpbG91dCBvbiBsb3dcbiAgICAvLyBwcmlvcml0eTogdGhlIGJhaWxlZCBvdXQgZmliZXIncyBjaGlsZCByZXVzZXMgdGhlIGN1cnJlbnQgY2hpbGQuXG5cblxuICAgIGlmIChwYXJlbnRBLmNoaWxkID09PSBwYXJlbnRCLmNoaWxkKSB7XG4gICAgICB2YXIgY2hpbGQgPSBwYXJlbnRBLmNoaWxkO1xuXG4gICAgICB3aGlsZSAoY2hpbGQpIHtcbiAgICAgICAgaWYgKGNoaWxkID09PSBhKSB7XG4gICAgICAgICAgLy8gV2UndmUgZGV0ZXJtaW5lZCB0aGF0IEEgaXMgdGhlIGN1cnJlbnQgYnJhbmNoLlxuICAgICAgICAgIGFzc2VydElzTW91bnRlZChwYXJlbnRBKTtcbiAgICAgICAgICByZXR1cm4gZmliZXI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hpbGQgPT09IGIpIHtcbiAgICAgICAgICAvLyBXZSd2ZSBkZXRlcm1pbmVkIHRoYXQgQiBpcyB0aGUgY3VycmVudCBicmFuY2guXG4gICAgICAgICAgYXNzZXJ0SXNNb3VudGVkKHBhcmVudEEpO1xuICAgICAgICAgIHJldHVybiBhbHRlcm5hdGU7XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZCA9IGNoaWxkLnNpYmxpbmc7XG4gICAgICB9IC8vIFdlIHNob3VsZCBuZXZlciBoYXZlIGFuIGFsdGVybmF0ZSBmb3IgYW55IG1vdW50aW5nIG5vZGUuIFNvIHRoZSBvbmx5XG4gICAgICAvLyB3YXkgdGhpcyBjb3VsZCBwb3NzaWJseSBoYXBwZW4gaXMgaWYgdGhpcyB3YXMgdW5tb3VudGVkLCBpZiBhdCBhbGwuXG5cblxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiVW5hYmxlIHRvIGZpbmQgbm9kZSBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LlwiICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYS5yZXR1cm4gIT09IGIucmV0dXJuKSB7XG4gICAgICAvLyBUaGUgcmV0dXJuIHBvaW50ZXIgb2YgQSBhbmQgdGhlIHJldHVybiBwb2ludGVyIG9mIEIgcG9pbnQgdG8gZGlmZmVyZW50XG4gICAgICAvLyBmaWJlcnMuIFdlIGFzc3VtZSB0aGF0IHJldHVybiBwb2ludGVycyBuZXZlciBjcmlzcy1jcm9zcywgc28gQSBtdXN0XG4gICAgICAvLyBiZWxvbmcgdG8gdGhlIGNoaWxkIHNldCBvZiBBLnJldHVybiwgYW5kIEIgbXVzdCBiZWxvbmcgdG8gdGhlIGNoaWxkXG4gICAgICAvLyBzZXQgb2YgQi5yZXR1cm4uXG4gICAgICBhID0gcGFyZW50QTtcbiAgICAgIGIgPSBwYXJlbnRCO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGUgcmV0dXJuIHBvaW50ZXJzIHBvaW50IHRvIHRoZSBzYW1lIGZpYmVyLiBXZSdsbCBoYXZlIHRvIHVzZSB0aGVcbiAgICAgIC8vIGRlZmF1bHQsIHNsb3cgcGF0aDogc2NhbiB0aGUgY2hpbGQgc2V0cyBvZiBlYWNoIHBhcmVudCBhbHRlcm5hdGUgdG8gc2VlXG4gICAgICAvLyB3aGljaCBjaGlsZCBiZWxvbmdzIHRvIHdoaWNoIHNldC5cbiAgICAgIC8vXG4gICAgICAvLyBTZWFyY2ggcGFyZW50IEEncyBjaGlsZCBzZXRcbiAgICAgIHZhciBkaWRGaW5kQ2hpbGQgPSBmYWxzZTtcbiAgICAgIHZhciBfY2hpbGQgPSBwYXJlbnRBLmNoaWxkO1xuXG4gICAgICB3aGlsZSAoX2NoaWxkKSB7XG4gICAgICAgIGlmIChfY2hpbGQgPT09IGEpIHtcbiAgICAgICAgICBkaWRGaW5kQ2hpbGQgPSB0cnVlO1xuICAgICAgICAgIGEgPSBwYXJlbnRBO1xuICAgICAgICAgIGIgPSBwYXJlbnRCO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKF9jaGlsZCA9PT0gYikge1xuICAgICAgICAgIGRpZEZpbmRDaGlsZCA9IHRydWU7XG4gICAgICAgICAgYiA9IHBhcmVudEE7XG4gICAgICAgICAgYSA9IHBhcmVudEI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBfY2hpbGQgPSBfY2hpbGQuc2libGluZztcbiAgICAgIH1cblxuICAgICAgaWYgKCFkaWRGaW5kQ2hpbGQpIHtcbiAgICAgICAgLy8gU2VhcmNoIHBhcmVudCBCJ3MgY2hpbGQgc2V0XG4gICAgICAgIF9jaGlsZCA9IHBhcmVudEIuY2hpbGQ7XG5cbiAgICAgICAgd2hpbGUgKF9jaGlsZCkge1xuICAgICAgICAgIGlmIChfY2hpbGQgPT09IGEpIHtcbiAgICAgICAgICAgIGRpZEZpbmRDaGlsZCA9IHRydWU7XG4gICAgICAgICAgICBhID0gcGFyZW50QjtcbiAgICAgICAgICAgIGIgPSBwYXJlbnRBO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKF9jaGlsZCA9PT0gYikge1xuICAgICAgICAgICAgZGlkRmluZENoaWxkID0gdHJ1ZTtcbiAgICAgICAgICAgIGIgPSBwYXJlbnRCO1xuICAgICAgICAgICAgYSA9IHBhcmVudEE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBfY2hpbGQgPSBfY2hpbGQuc2libGluZztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZGlkRmluZENoaWxkKSB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiQ2hpbGQgd2FzIG5vdCBmb3VuZCBpbiBlaXRoZXIgcGFyZW50IHNldC4gVGhpcyBpbmRpY2F0ZXMgYSBidWcgaW4gUmVhY3QgcmVsYXRlZCB0byB0aGUgcmV0dXJuIHBvaW50ZXIuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCEoYS5hbHRlcm5hdGUgPT09IGIpKSB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIlJldHVybiBmaWJlcnMgc2hvdWxkIGFsd2F5cyBiZSBlYWNoIG90aGVycycgYWx0ZXJuYXRlcy4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgfVxuICAgIH1cbiAgfSAvLyBJZiB0aGUgcm9vdCBpcyBub3QgYSBob3N0IGNvbnRhaW5lciwgd2UncmUgaW4gYSBkaXNjb25uZWN0ZWQgdHJlZS4gSS5lLlxuICAvLyB1bm1vdW50ZWQuXG5cblxuICBpZiAoIShhLnRhZyA9PT0gSG9zdFJvb3QpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiVW5hYmxlIHRvIGZpbmQgbm9kZSBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LlwiICk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGEuc3RhdGVOb2RlLmN1cnJlbnQgPT09IGEpIHtcbiAgICAvLyBXZSd2ZSBkZXRlcm1pbmVkIHRoYXQgQSBpcyB0aGUgY3VycmVudCBicmFuY2guXG4gICAgcmV0dXJuIGZpYmVyO1xuICB9IC8vIE90aGVyd2lzZSBCIGhhcyB0byBiZSBjdXJyZW50IGJyYW5jaC5cblxuXG4gIHJldHVybiBhbHRlcm5hdGU7XG59XG5mdW5jdGlvbiBmaW5kQ3VycmVudEhvc3RGaWJlcihwYXJlbnQpIHtcbiAgdmFyIGN1cnJlbnRQYXJlbnQgPSBmaW5kQ3VycmVudEZpYmVyVXNpbmdTbG93UGF0aChwYXJlbnQpO1xuXG4gIGlmICghY3VycmVudFBhcmVudCkge1xuICAgIHJldHVybiBudWxsO1xuICB9IC8vIE5leHQgd2UnbGwgZHJpbGwgZG93biB0aGlzIGNvbXBvbmVudCB0byBmaW5kIHRoZSBmaXJzdCBIb3N0Q29tcG9uZW50L1RleHQuXG5cblxuICB2YXIgbm9kZSA9IGN1cnJlbnRQYXJlbnQ7XG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBpZiAobm9kZS50YWcgPT09IEhvc3RDb21wb25lbnQgfHwgbm9kZS50YWcgPT09IEhvc3RUZXh0KSB7XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9IGVsc2UgaWYgKG5vZGUuY2hpbGQpIHtcbiAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUgPT09IGN1cnJlbnRQYXJlbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHdoaWxlICghbm9kZS5zaWJsaW5nKSB7XG4gICAgICBpZiAoIW5vZGUucmV0dXJuIHx8IG5vZGUucmV0dXJuID09PSBjdXJyZW50UGFyZW50KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfVxuXG4gICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gIH0gLy8gRmxvdyBuZWVkcyB0aGUgcmV0dXJuIG51bGwgaGVyZSwgYnV0IEVTTGludCBjb21wbGFpbnMgYWJvdXQgaXQuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnJlYWNoYWJsZVxuXG5cbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBmaW5kQ3VycmVudEhvc3RGaWJlcldpdGhOb1BvcnRhbHMocGFyZW50KSB7XG4gIHZhciBjdXJyZW50UGFyZW50ID0gZmluZEN1cnJlbnRGaWJlclVzaW5nU2xvd1BhdGgocGFyZW50KTtcblxuICBpZiAoIWN1cnJlbnRQYXJlbnQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSAvLyBOZXh0IHdlJ2xsIGRyaWxsIGRvd24gdGhpcyBjb21wb25lbnQgdG8gZmluZCB0aGUgZmlyc3QgSG9zdENvbXBvbmVudC9UZXh0LlxuXG5cbiAgdmFyIG5vZGUgPSBjdXJyZW50UGFyZW50O1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgaWYgKG5vZGUudGFnID09PSBIb3N0Q29tcG9uZW50IHx8IG5vZGUudGFnID09PSBIb3N0VGV4dCB8fCBlbmFibGVGdW5kYW1lbnRhbEFQSSApIHtcbiAgICAgIHJldHVybiBub2RlO1xuICAgIH0gZWxzZSBpZiAobm9kZS5jaGlsZCAmJiBub2RlLnRhZyAhPT0gSG9zdFBvcnRhbCkge1xuICAgICAgbm9kZS5jaGlsZC5yZXR1cm4gPSBub2RlO1xuICAgICAgbm9kZSA9IG5vZGUuY2hpbGQ7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAobm9kZSA9PT0gY3VycmVudFBhcmVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgd2hpbGUgKCFub2RlLnNpYmxpbmcpIHtcbiAgICAgIGlmICghbm9kZS5yZXR1cm4gfHwgbm9kZS5yZXR1cm4gPT09IGN1cnJlbnRQYXJlbnQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICB9XG5cbiAgICBub2RlLnNpYmxpbmcucmV0dXJuID0gbm9kZS5yZXR1cm47XG4gICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgfSAvLyBGbG93IG5lZWRzIHRoZSByZXR1cm4gbnVsbCBoZXJlLCBidXQgRVNMaW50IGNvbXBsYWlucyBhYm91dCBpdC5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVucmVhY2hhYmxlXG5cblxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGRvZXNGaWJlckNvbnRhaW4ocGFyZW50RmliZXIsIGNoaWxkRmliZXIpIHtcbiAgdmFyIG5vZGUgPSBjaGlsZEZpYmVyO1xuICB2YXIgcGFyZW50RmliZXJBbHRlcm5hdGUgPSBwYXJlbnRGaWJlci5hbHRlcm5hdGU7XG5cbiAgd2hpbGUgKG5vZGUgIT09IG51bGwpIHtcbiAgICBpZiAobm9kZSA9PT0gcGFyZW50RmliZXIgfHwgbm9kZSA9PT0gcGFyZW50RmliZXJBbHRlcm5hdGUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxudmFyIGF0dGVtcHRVc2VyQmxvY2tpbmdIeWRyYXRpb247XG5mdW5jdGlvbiBzZXRBdHRlbXB0VXNlckJsb2NraW5nSHlkcmF0aW9uKGZuKSB7XG4gIGF0dGVtcHRVc2VyQmxvY2tpbmdIeWRyYXRpb24gPSBmbjtcbn1cbnZhciBhdHRlbXB0Q29udGludW91c0h5ZHJhdGlvbjtcbmZ1bmN0aW9uIHNldEF0dGVtcHRDb250aW51b3VzSHlkcmF0aW9uKGZuKSB7XG4gIGF0dGVtcHRDb250aW51b3VzSHlkcmF0aW9uID0gZm47XG59XG52YXIgYXR0ZW1wdEh5ZHJhdGlvbkF0Q3VycmVudFByaW9yaXR5O1xuZnVuY3Rpb24gc2V0QXR0ZW1wdEh5ZHJhdGlvbkF0Q3VycmVudFByaW9yaXR5KGZuKSB7XG4gIGF0dGVtcHRIeWRyYXRpb25BdEN1cnJlbnRQcmlvcml0eSA9IGZuO1xufVxudmFyIGF0dGVtcHRIeWRyYXRpb25BdFByaW9yaXR5O1xuZnVuY3Rpb24gc2V0QXR0ZW1wdEh5ZHJhdGlvbkF0UHJpb3JpdHkoZm4pIHtcbiAgYXR0ZW1wdEh5ZHJhdGlvbkF0UHJpb3JpdHkgPSBmbjtcbn0gLy8gVE9ETzogVXBncmFkZSB0aGlzIGRlZmluaXRpb24gb25jZSB3ZSdyZSBvbiBhIG5ld2VyIHZlcnNpb24gb2YgRmxvdyB0aGF0XG52YXIgaGFzU2NoZWR1bGVkUmVwbGF5QXR0ZW1wdCA9IGZhbHNlOyAvLyBUaGUgcXVldWUgb2YgZGlzY3JldGUgZXZlbnRzIHRvIGJlIHJlcGxheWVkLlxuXG52YXIgcXVldWVkRGlzY3JldGVFdmVudHMgPSBbXTsgLy8gSW5kaWNhdGVzIGlmIGFueSBjb250aW51b3VzIGV2ZW50IHRhcmdldHMgYXJlIG5vbi1udWxsIGZvciBlYXJseSBiYWlsb3V0LlxuLy8gaWYgdGhlIGxhc3QgdGFyZ2V0IHdhcyBkZWh5ZHJhdGVkLlxuXG52YXIgcXVldWVkRm9jdXMgPSBudWxsO1xudmFyIHF1ZXVlZERyYWcgPSBudWxsO1xudmFyIHF1ZXVlZE1vdXNlID0gbnVsbDsgLy8gRm9yIHBvaW50ZXIgZXZlbnRzIHRoZXJlIGNhbiBiZSBvbmUgbGF0ZXN0IGV2ZW50IHBlciBwb2ludGVySWQuXG5cbnZhciBxdWV1ZWRQb2ludGVycyA9IG5ldyBNYXAoKTtcbnZhciBxdWV1ZWRQb2ludGVyQ2FwdHVyZXMgPSBuZXcgTWFwKCk7IC8vIFdlIGNvdWxkIGNvbnNpZGVyIHJlcGxheWluZyBzZWxlY3Rpb25jaGFuZ2UgYW5kIHRvdWNobW92ZXMgdG9vLlxuXG52YXIgcXVldWVkRXhwbGljaXRIeWRyYXRpb25UYXJnZXRzID0gW107XG5mdW5jdGlvbiBoYXNRdWV1ZWREaXNjcmV0ZUV2ZW50cygpIHtcbiAgcmV0dXJuIHF1ZXVlZERpc2NyZXRlRXZlbnRzLmxlbmd0aCA+IDA7XG59XG52YXIgZGlzY3JldGVSZXBsYXlhYmxlRXZlbnRzID0gWydtb3VzZWRvd24nLCAnbW91c2V1cCcsICd0b3VjaGNhbmNlbCcsICd0b3VjaGVuZCcsICd0b3VjaHN0YXJ0JywgJ2F1eGNsaWNrJywgJ2RibGNsaWNrJywgJ3BvaW50ZXJjYW5jZWwnLCAncG9pbnRlcmRvd24nLCAncG9pbnRlcnVwJywgJ2RyYWdlbmQnLCAnZHJhZ3N0YXJ0JywgJ2Ryb3AnLCAnY29tcG9zaXRpb25lbmQnLCAnY29tcG9zaXRpb25zdGFydCcsICdrZXlkb3duJywgJ2tleXByZXNzJywgJ2tleXVwJywgJ2lucHV0JywgJ3RleHRJbnB1dCcsIC8vIEludGVudGlvbmFsbHkgY2FtZWxDYXNlXG4nY29weScsICdjdXQnLCAncGFzdGUnLCAnY2xpY2snLCAnY2hhbmdlJywgJ2NvbnRleHRtZW51JywgJ3Jlc2V0JywgJ3N1Ym1pdCddO1xuZnVuY3Rpb24gaXNSZXBsYXlhYmxlRGlzY3JldGVFdmVudChldmVudFR5cGUpIHtcbiAgcmV0dXJuIGRpc2NyZXRlUmVwbGF5YWJsZUV2ZW50cy5pbmRleE9mKGV2ZW50VHlwZSkgPiAtMTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlUXVldWVkUmVwbGF5YWJsZUV2ZW50KGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIG5hdGl2ZUV2ZW50KSB7XG4gIHJldHVybiB7XG4gICAgYmxvY2tlZE9uOiBibG9ja2VkT24sXG4gICAgZG9tRXZlbnROYW1lOiBkb21FdmVudE5hbWUsXG4gICAgZXZlbnRTeXN0ZW1GbGFnczogZXZlbnRTeXN0ZW1GbGFncyB8IElTX1JFUExBWUVELFxuICAgIG5hdGl2ZUV2ZW50OiBuYXRpdmVFdmVudCxcbiAgICB0YXJnZXRDb250YWluZXJzOiBbdGFyZ2V0Q29udGFpbmVyXVxuICB9O1xufVxuXG5mdW5jdGlvbiBxdWV1ZURpc2NyZXRlRXZlbnQoYmxvY2tlZE9uLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmF0aXZlRXZlbnQpIHtcbiAgdmFyIHF1ZXVlZEV2ZW50ID0gY3JlYXRlUXVldWVkUmVwbGF5YWJsZUV2ZW50KGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIG5hdGl2ZUV2ZW50KTtcbiAgcXVldWVkRGlzY3JldGVFdmVudHMucHVzaChxdWV1ZWRFdmVudCk7XG59IC8vIFJlc2V0cyB0aGUgcmVwbGF5aW5nIGZvciB0aGlzIHR5cGUgb2YgY29udGludW91cyBldmVudCB0byBubyBldmVudC5cblxuZnVuY3Rpb24gY2xlYXJJZkNvbnRpbnVvdXNFdmVudChkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KSB7XG4gIHN3aXRjaCAoZG9tRXZlbnROYW1lKSB7XG4gICAgY2FzZSAnZm9jdXNpbic6XG4gICAgY2FzZSAnZm9jdXNvdXQnOlxuICAgICAgcXVldWVkRm9jdXMgPSBudWxsO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdkcmFnZW50ZXInOlxuICAgIGNhc2UgJ2RyYWdsZWF2ZSc6XG4gICAgICBxdWV1ZWREcmFnID0gbnVsbDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnbW91c2VvdmVyJzpcbiAgICBjYXNlICdtb3VzZW91dCc6XG4gICAgICBxdWV1ZWRNb3VzZSA9IG51bGw7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3BvaW50ZXJvdmVyJzpcbiAgICBjYXNlICdwb2ludGVyb3V0JzpcbiAgICAgIHtcbiAgICAgICAgdmFyIHBvaW50ZXJJZCA9IG5hdGl2ZUV2ZW50LnBvaW50ZXJJZDtcbiAgICAgICAgcXVldWVkUG9pbnRlcnMuZGVsZXRlKHBvaW50ZXJJZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSAnZ290cG9pbnRlcmNhcHR1cmUnOlxuICAgIGNhc2UgJ2xvc3Rwb2ludGVyY2FwdHVyZSc6XG4gICAgICB7XG4gICAgICAgIHZhciBfcG9pbnRlcklkID0gbmF0aXZlRXZlbnQucG9pbnRlcklkO1xuICAgICAgICBxdWV1ZWRQb2ludGVyQ2FwdHVyZXMuZGVsZXRlKF9wb2ludGVySWQpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhY2N1bXVsYXRlT3JDcmVhdGVDb250aW51b3VzUXVldWVkUmVwbGF5YWJsZUV2ZW50KGV4aXN0aW5nUXVldWVkRXZlbnQsIGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIG5hdGl2ZUV2ZW50KSB7XG4gIGlmIChleGlzdGluZ1F1ZXVlZEV2ZW50ID09PSBudWxsIHx8IGV4aXN0aW5nUXVldWVkRXZlbnQubmF0aXZlRXZlbnQgIT09IG5hdGl2ZUV2ZW50KSB7XG4gICAgdmFyIHF1ZXVlZEV2ZW50ID0gY3JlYXRlUXVldWVkUmVwbGF5YWJsZUV2ZW50KGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIG5hdGl2ZUV2ZW50KTtcblxuICAgIGlmIChibG9ja2VkT24gIT09IG51bGwpIHtcbiAgICAgIHZhciBfZmliZXIyID0gZ2V0SW5zdGFuY2VGcm9tTm9kZShibG9ja2VkT24pO1xuXG4gICAgICBpZiAoX2ZpYmVyMiAhPT0gbnVsbCkge1xuICAgICAgICAvLyBBdHRlbXB0IHRvIGluY3JlYXNlIHRoZSBwcmlvcml0eSBvZiB0aGlzIHRhcmdldC5cbiAgICAgICAgYXR0ZW1wdENvbnRpbnVvdXNIeWRyYXRpb24oX2ZpYmVyMik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHF1ZXVlZEV2ZW50O1xuICB9IC8vIElmIHdlIGhhdmUgYWxyZWFkeSBxdWV1ZWQgdGhpcyBleGFjdCBldmVudCwgdGhlbiBpdCdzIGJlY2F1c2VcbiAgLy8gdGhlIGRpZmZlcmVudCBldmVudCBzeXN0ZW1zIGhhdmUgZGlmZmVyZW50IERPTSBldmVudCBsaXN0ZW5lcnMuXG4gIC8vIFdlIGNhbiBhY2N1bXVsYXRlIHRoZSBmbGFncywgYW5kIHRoZSB0YXJnZXRDb250YWluZXJzLCBhbmRcbiAgLy8gc3RvcmUgYSBzaW5nbGUgZXZlbnQgdG8gYmUgcmVwbGF5ZWQuXG5cblxuICBleGlzdGluZ1F1ZXVlZEV2ZW50LmV2ZW50U3lzdGVtRmxhZ3MgfD0gZXZlbnRTeXN0ZW1GbGFncztcbiAgdmFyIHRhcmdldENvbnRhaW5lcnMgPSBleGlzdGluZ1F1ZXVlZEV2ZW50LnRhcmdldENvbnRhaW5lcnM7XG5cbiAgaWYgKHRhcmdldENvbnRhaW5lciAhPT0gbnVsbCAmJiB0YXJnZXRDb250YWluZXJzLmluZGV4T2YodGFyZ2V0Q29udGFpbmVyKSA9PT0gLTEpIHtcbiAgICB0YXJnZXRDb250YWluZXJzLnB1c2godGFyZ2V0Q29udGFpbmVyKTtcbiAgfVxuXG4gIHJldHVybiBleGlzdGluZ1F1ZXVlZEV2ZW50O1xufVxuXG5mdW5jdGlvbiBxdWV1ZUlmQ29udGludW91c0V2ZW50KGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIG5hdGl2ZUV2ZW50KSB7XG4gIC8vIFRoZXNlIHNldCByZWxhdGVkVGFyZ2V0IHRvIG51bGwgYmVjYXVzZSB0aGUgcmVwbGF5ZWQgZXZlbnQgd2lsbCBiZSB0cmVhdGVkIGFzIGlmIHdlXG4gIC8vIG1vdmVkIGZyb20gb3V0c2lkZSB0aGUgd2luZG93IChubyB0YXJnZXQpIG9udG8gdGhlIHRhcmdldCBvbmNlIGl0IGh5ZHJhdGVzLlxuICAvLyBJbnN0ZWFkIG9mIG11dGF0aW5nIHdlIGNvdWxkIGNsb25lIHRoZSBldmVudC5cbiAgc3dpdGNoIChkb21FdmVudE5hbWUpIHtcbiAgICBjYXNlICdmb2N1c2luJzpcbiAgICAgIHtcbiAgICAgICAgdmFyIGZvY3VzRXZlbnQgPSBuYXRpdmVFdmVudDtcbiAgICAgICAgcXVldWVkRm9jdXMgPSBhY2N1bXVsYXRlT3JDcmVhdGVDb250aW51b3VzUXVldWVkUmVwbGF5YWJsZUV2ZW50KHF1ZXVlZEZvY3VzLCBibG9ja2VkT24sIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBmb2N1c0V2ZW50KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICBjYXNlICdkcmFnZW50ZXInOlxuICAgICAge1xuICAgICAgICB2YXIgZHJhZ0V2ZW50ID0gbmF0aXZlRXZlbnQ7XG4gICAgICAgIHF1ZXVlZERyYWcgPSBhY2N1bXVsYXRlT3JDcmVhdGVDb250aW51b3VzUXVldWVkUmVwbGF5YWJsZUV2ZW50KHF1ZXVlZERyYWcsIGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIGRyYWdFdmVudCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgY2FzZSAnbW91c2VvdmVyJzpcbiAgICAgIHtcbiAgICAgICAgdmFyIG1vdXNlRXZlbnQgPSBuYXRpdmVFdmVudDtcbiAgICAgICAgcXVldWVkTW91c2UgPSBhY2N1bXVsYXRlT3JDcmVhdGVDb250aW51b3VzUXVldWVkUmVwbGF5YWJsZUV2ZW50KHF1ZXVlZE1vdXNlLCBibG9ja2VkT24sIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBtb3VzZUV2ZW50KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICBjYXNlICdwb2ludGVyb3Zlcic6XG4gICAgICB7XG4gICAgICAgIHZhciBwb2ludGVyRXZlbnQgPSBuYXRpdmVFdmVudDtcbiAgICAgICAgdmFyIHBvaW50ZXJJZCA9IHBvaW50ZXJFdmVudC5wb2ludGVySWQ7XG4gICAgICAgIHF1ZXVlZFBvaW50ZXJzLnNldChwb2ludGVySWQsIGFjY3VtdWxhdGVPckNyZWF0ZUNvbnRpbnVvdXNRdWV1ZWRSZXBsYXlhYmxlRXZlbnQocXVldWVkUG9pbnRlcnMuZ2V0KHBvaW50ZXJJZCkgfHwgbnVsbCwgYmxvY2tlZE9uLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgcG9pbnRlckV2ZW50KSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgY2FzZSAnZ290cG9pbnRlcmNhcHR1cmUnOlxuICAgICAge1xuICAgICAgICB2YXIgX3BvaW50ZXJFdmVudCA9IG5hdGl2ZUV2ZW50O1xuICAgICAgICB2YXIgX3BvaW50ZXJJZDIgPSBfcG9pbnRlckV2ZW50LnBvaW50ZXJJZDtcbiAgICAgICAgcXVldWVkUG9pbnRlckNhcHR1cmVzLnNldChfcG9pbnRlcklkMiwgYWNjdW11bGF0ZU9yQ3JlYXRlQ29udGludW91c1F1ZXVlZFJlcGxheWFibGVFdmVudChxdWV1ZWRQb2ludGVyQ2FwdHVyZXMuZ2V0KF9wb2ludGVySWQyKSB8fCBudWxsLCBibG9ja2VkT24sIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBfcG9pbnRlckV2ZW50KSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufSAvLyBDaGVjayBpZiB0aGlzIHRhcmdldCBpcyB1bmJsb2NrZWQuIFJldHVybnMgdHJ1ZSBpZiBpdCdzIHVuYmxvY2tlZC5cblxuZnVuY3Rpb24gYXR0ZW1wdEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0KHF1ZXVlZFRhcmdldCkge1xuICAvLyBUT0RPOiBUaGlzIGZ1bmN0aW9uIHNoYXJlcyBhIGxvdCBvZiBsb2dpYyB3aXRoIGF0dGVtcHRUb0Rpc3BhdGNoRXZlbnQuXG4gIC8vIFRyeSB0byB1bmlmeSB0aGVtLiBJdCdzIGEgYml0IHRyaWNreSBzaW5jZSBpdCB3b3VsZCByZXF1aXJlIHR3byByZXR1cm5cbiAgLy8gdmFsdWVzLlxuICB2YXIgdGFyZ2V0SW5zdCA9IGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKHF1ZXVlZFRhcmdldC50YXJnZXQpO1xuXG4gIGlmICh0YXJnZXRJbnN0ICE9PSBudWxsKSB7XG4gICAgdmFyIG5lYXJlc3RNb3VudGVkID0gZ2V0TmVhcmVzdE1vdW50ZWRGaWJlcih0YXJnZXRJbnN0KTtcblxuICAgIGlmIChuZWFyZXN0TW91bnRlZCAhPT0gbnVsbCkge1xuICAgICAgdmFyIHRhZyA9IG5lYXJlc3RNb3VudGVkLnRhZztcblxuICAgICAgaWYgKHRhZyA9PT0gU3VzcGVuc2VDb21wb25lbnQpIHtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gZ2V0U3VzcGVuc2VJbnN0YW5jZUZyb21GaWJlcihuZWFyZXN0TW91bnRlZCk7XG5cbiAgICAgICAgaWYgKGluc3RhbmNlICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gV2UncmUgYmxvY2tlZCBvbiBoeWRyYXRpbmcgdGhpcyBib3VuZGFyeS5cbiAgICAgICAgICAvLyBJbmNyZWFzZSBpdHMgcHJpb3JpdHkuXG4gICAgICAgICAgcXVldWVkVGFyZ2V0LmJsb2NrZWRPbiA9IGluc3RhbmNlO1xuICAgICAgICAgIGF0dGVtcHRIeWRyYXRpb25BdFByaW9yaXR5KHF1ZXVlZFRhcmdldC5sYW5lUHJpb3JpdHksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIFNjaGVkdWxlci51bnN0YWJsZV9ydW5XaXRoUHJpb3JpdHkocXVldWVkVGFyZ2V0LnByaW9yaXR5LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIGF0dGVtcHRIeWRyYXRpb25BdEN1cnJlbnRQcmlvcml0eShuZWFyZXN0TW91bnRlZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodGFnID09PSBIb3N0Um9vdCkge1xuICAgICAgICB2YXIgcm9vdCA9IG5lYXJlc3RNb3VudGVkLnN0YXRlTm9kZTtcblxuICAgICAgICBpZiAocm9vdC5oeWRyYXRlKSB7XG4gICAgICAgICAgcXVldWVkVGFyZ2V0LmJsb2NrZWRPbiA9IGdldENvbnRhaW5lckZyb21GaWJlcihuZWFyZXN0TW91bnRlZCk7IC8vIFdlIGRvbid0IGN1cnJlbnRseSBoYXZlIGEgd2F5IHRvIGluY3JlYXNlIHRoZSBwcmlvcml0eSBvZlxuICAgICAgICAgIC8vIGEgcm9vdCBvdGhlciB0aGFuIHN5bmMuXG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBxdWV1ZWRUYXJnZXQuYmxvY2tlZE9uID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudChxdWV1ZWRFdmVudCkge1xuICBpZiAocXVldWVkRXZlbnQuYmxvY2tlZE9uICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIHRhcmdldENvbnRhaW5lcnMgPSBxdWV1ZWRFdmVudC50YXJnZXRDb250YWluZXJzO1xuXG4gIHdoaWxlICh0YXJnZXRDb250YWluZXJzLmxlbmd0aCA+IDApIHtcbiAgICB2YXIgdGFyZ2V0Q29udGFpbmVyID0gdGFyZ2V0Q29udGFpbmVyc1swXTtcbiAgICB2YXIgbmV4dEJsb2NrZWRPbiA9IGF0dGVtcHRUb0Rpc3BhdGNoRXZlbnQocXVldWVkRXZlbnQuZG9tRXZlbnROYW1lLCBxdWV1ZWRFdmVudC5ldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIHF1ZXVlZEV2ZW50Lm5hdGl2ZUV2ZW50KTtcblxuICAgIGlmIChuZXh0QmxvY2tlZE9uICE9PSBudWxsKSB7XG4gICAgICAvLyBXZSdyZSBzdGlsbCBibG9ja2VkLiBUcnkgYWdhaW4gbGF0ZXIuXG4gICAgICB2YXIgX2ZpYmVyMyA9IGdldEluc3RhbmNlRnJvbU5vZGUobmV4dEJsb2NrZWRPbik7XG5cbiAgICAgIGlmIChfZmliZXIzICE9PSBudWxsKSB7XG4gICAgICAgIGF0dGVtcHRDb250aW51b3VzSHlkcmF0aW9uKF9maWJlcjMpO1xuICAgICAgfVxuXG4gICAgICBxdWV1ZWRFdmVudC5ibG9ja2VkT24gPSBuZXh0QmxvY2tlZE9uO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gLy8gVGhpcyB0YXJnZXQgY29udGFpbmVyIHdhcyBzdWNjZXNzZnVsbHkgZGlzcGF0Y2hlZC4gVHJ5IHRoZSBuZXh0LlxuXG5cbiAgICB0YXJnZXRDb250YWluZXJzLnNoaWZ0KCk7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudEluTWFwKHF1ZXVlZEV2ZW50LCBrZXksIG1hcCkge1xuICBpZiAoYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudChxdWV1ZWRFdmVudCkpIHtcbiAgICBtYXAuZGVsZXRlKGtleSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVwbGF5VW5ibG9ja2VkRXZlbnRzKCkge1xuICBoYXNTY2hlZHVsZWRSZXBsYXlBdHRlbXB0ID0gZmFsc2U7IC8vIEZpcnN0IHJlcGxheSBkaXNjcmV0ZSBldmVudHMuXG5cbiAgd2hpbGUgKHF1ZXVlZERpc2NyZXRlRXZlbnRzLmxlbmd0aCA+IDApIHtcbiAgICB2YXIgbmV4dERpc2NyZXRlRXZlbnQgPSBxdWV1ZWREaXNjcmV0ZUV2ZW50c1swXTtcblxuICAgIGlmIChuZXh0RGlzY3JldGVFdmVudC5ibG9ja2VkT24gIT09IG51bGwpIHtcbiAgICAgIC8vIFdlJ3JlIHN0aWxsIGJsb2NrZWQuXG4gICAgICAvLyBJbmNyZWFzZSB0aGUgcHJpb3JpdHkgb2YgdGhpcyBib3VuZGFyeSB0byB1bmJsb2NrXG4gICAgICAvLyB0aGUgbmV4dCBkaXNjcmV0ZSBldmVudC5cbiAgICAgIHZhciBfZmliZXI0ID0gZ2V0SW5zdGFuY2VGcm9tTm9kZShuZXh0RGlzY3JldGVFdmVudC5ibG9ja2VkT24pO1xuXG4gICAgICBpZiAoX2ZpYmVyNCAhPT0gbnVsbCkge1xuICAgICAgICBhdHRlbXB0VXNlckJsb2NraW5nSHlkcmF0aW9uKF9maWJlcjQpO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICB2YXIgdGFyZ2V0Q29udGFpbmVycyA9IG5leHREaXNjcmV0ZUV2ZW50LnRhcmdldENvbnRhaW5lcnM7XG5cbiAgICB3aGlsZSAodGFyZ2V0Q29udGFpbmVycy5sZW5ndGggPiAwKSB7XG4gICAgICB2YXIgdGFyZ2V0Q29udGFpbmVyID0gdGFyZ2V0Q29udGFpbmVyc1swXTtcbiAgICAgIHZhciBuZXh0QmxvY2tlZE9uID0gYXR0ZW1wdFRvRGlzcGF0Y2hFdmVudChuZXh0RGlzY3JldGVFdmVudC5kb21FdmVudE5hbWUsIG5leHREaXNjcmV0ZUV2ZW50LmV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmV4dERpc2NyZXRlRXZlbnQubmF0aXZlRXZlbnQpO1xuXG4gICAgICBpZiAobmV4dEJsb2NrZWRPbiAhPT0gbnVsbCkge1xuICAgICAgICAvLyBXZSdyZSBzdGlsbCBibG9ja2VkLiBUcnkgYWdhaW4gbGF0ZXIuXG4gICAgICAgIG5leHREaXNjcmV0ZUV2ZW50LmJsb2NrZWRPbiA9IG5leHRCbG9ja2VkT247XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSAvLyBUaGlzIHRhcmdldCBjb250YWluZXIgd2FzIHN1Y2Nlc3NmdWxseSBkaXNwYXRjaGVkLiBUcnkgdGhlIG5leHQuXG5cblxuICAgICAgdGFyZ2V0Q29udGFpbmVycy5zaGlmdCgpO1xuICAgIH1cblxuICAgIGlmIChuZXh0RGlzY3JldGVFdmVudC5ibG9ja2VkT24gPT09IG51bGwpIHtcbiAgICAgIC8vIFdlJ3ZlIHN1Y2Nlc3NmdWxseSByZXBsYXllZCB0aGUgZmlyc3QgZXZlbnQuIExldCdzIHRyeSB0aGUgbmV4dCBvbmUuXG4gICAgICBxdWV1ZWREaXNjcmV0ZUV2ZW50cy5zaGlmdCgpO1xuICAgIH1cbiAgfSAvLyBOZXh0IHJlcGxheSBhbnkgY29udGludW91cyBldmVudHMuXG5cblxuICBpZiAocXVldWVkRm9jdXMgIT09IG51bGwgJiYgYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudChxdWV1ZWRGb2N1cykpIHtcbiAgICBxdWV1ZWRGb2N1cyA9IG51bGw7XG4gIH1cblxuICBpZiAocXVldWVkRHJhZyAhPT0gbnVsbCAmJiBhdHRlbXB0UmVwbGF5Q29udGludW91c1F1ZXVlZEV2ZW50KHF1ZXVlZERyYWcpKSB7XG4gICAgcXVldWVkRHJhZyA9IG51bGw7XG4gIH1cblxuICBpZiAocXVldWVkTW91c2UgIT09IG51bGwgJiYgYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudChxdWV1ZWRNb3VzZSkpIHtcbiAgICBxdWV1ZWRNb3VzZSA9IG51bGw7XG4gIH1cblxuICBxdWV1ZWRQb2ludGVycy5mb3JFYWNoKGF0dGVtcHRSZXBsYXlDb250aW51b3VzUXVldWVkRXZlbnRJbk1hcCk7XG4gIHF1ZXVlZFBvaW50ZXJDYXB0dXJlcy5mb3JFYWNoKGF0dGVtcHRSZXBsYXlDb250aW51b3VzUXVldWVkRXZlbnRJbk1hcCk7XG59XG5cbmZ1bmN0aW9uIHNjaGVkdWxlQ2FsbGJhY2tJZlVuYmxvY2tlZChxdWV1ZWRFdmVudCwgdW5ibG9ja2VkKSB7XG4gIGlmIChxdWV1ZWRFdmVudC5ibG9ja2VkT24gPT09IHVuYmxvY2tlZCkge1xuICAgIHF1ZXVlZEV2ZW50LmJsb2NrZWRPbiA9IG51bGw7XG5cbiAgICBpZiAoIWhhc1NjaGVkdWxlZFJlcGxheUF0dGVtcHQpIHtcbiAgICAgIGhhc1NjaGVkdWxlZFJlcGxheUF0dGVtcHQgPSB0cnVlOyAvLyBTY2hlZHVsZSBhIGNhbGxiYWNrIHRvIGF0dGVtcHQgcmVwbGF5aW5nIGFzIG1hbnkgZXZlbnRzIGFzIGFyZVxuICAgICAgLy8gbm93IHVuYmxvY2tlZC4gVGhpcyBmaXJzdCBtaWdodCBub3QgYWN0dWFsbHkgYmUgdW5ibG9ja2VkIHlldC5cbiAgICAgIC8vIFdlIGNvdWxkIGNoZWNrIGl0IGVhcmx5IHRvIGF2b2lkIHNjaGVkdWxpbmcgYW4gdW5uZWNlc3NhcnkgY2FsbGJhY2suXG5cbiAgICAgIFNjaGVkdWxlci51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrKFNjaGVkdWxlci51bnN0YWJsZV9Ob3JtYWxQcmlvcml0eSwgcmVwbGF5VW5ibG9ja2VkRXZlbnRzKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcmV0cnlJZkJsb2NrZWRPbih1bmJsb2NrZWQpIHtcbiAgLy8gTWFyayBhbnl0aGluZyB0aGF0IHdhcyBibG9ja2VkIG9uIHRoaXMgYXMgbm8gbG9uZ2VyIGJsb2NrZWRcbiAgLy8gYW5kIGVsaWdpYmxlIGZvciBhIHJlcGxheS5cbiAgaWYgKHF1ZXVlZERpc2NyZXRlRXZlbnRzLmxlbmd0aCA+IDApIHtcbiAgICBzY2hlZHVsZUNhbGxiYWNrSWZVbmJsb2NrZWQocXVldWVkRGlzY3JldGVFdmVudHNbMF0sIHVuYmxvY2tlZCk7IC8vIFRoaXMgaXMgYSBleHBvbmVudGlhbCBzZWFyY2ggZm9yIGVhY2ggYm91bmRhcnkgdGhhdCBjb21taXRzLiBJIHRoaW5rIGl0J3NcbiAgICAvLyB3b3J0aCBpdCBiZWNhdXNlIHdlIGV4cGVjdCB2ZXJ5IGZldyBkaXNjcmV0ZSBldmVudHMgdG8gcXVldWUgdXAgYW5kIG9uY2VcbiAgICAvLyB3ZSBhcmUgYWN0dWFsbHkgZnVsbHkgdW5ibG9ja2VkIGl0IHdpbGwgYmUgZmFzdCB0byByZXBsYXkgdGhlbS5cblxuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgcXVldWVkRGlzY3JldGVFdmVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBxdWV1ZWRFdmVudCA9IHF1ZXVlZERpc2NyZXRlRXZlbnRzW2ldO1xuXG4gICAgICBpZiAocXVldWVkRXZlbnQuYmxvY2tlZE9uID09PSB1bmJsb2NrZWQpIHtcbiAgICAgICAgcXVldWVkRXZlbnQuYmxvY2tlZE9uID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAocXVldWVkRm9jdXMgIT09IG51bGwpIHtcbiAgICBzY2hlZHVsZUNhbGxiYWNrSWZVbmJsb2NrZWQocXVldWVkRm9jdXMsIHVuYmxvY2tlZCk7XG4gIH1cblxuICBpZiAocXVldWVkRHJhZyAhPT0gbnVsbCkge1xuICAgIHNjaGVkdWxlQ2FsbGJhY2tJZlVuYmxvY2tlZChxdWV1ZWREcmFnLCB1bmJsb2NrZWQpO1xuICB9XG5cbiAgaWYgKHF1ZXVlZE1vdXNlICE9PSBudWxsKSB7XG4gICAgc2NoZWR1bGVDYWxsYmFja0lmVW5ibG9ja2VkKHF1ZXVlZE1vdXNlLCB1bmJsb2NrZWQpO1xuICB9XG5cbiAgdmFyIHVuYmxvY2sgPSBmdW5jdGlvbiAocXVldWVkRXZlbnQpIHtcbiAgICByZXR1cm4gc2NoZWR1bGVDYWxsYmFja0lmVW5ibG9ja2VkKHF1ZXVlZEV2ZW50LCB1bmJsb2NrZWQpO1xuICB9O1xuXG4gIHF1ZXVlZFBvaW50ZXJzLmZvckVhY2godW5ibG9jayk7XG4gIHF1ZXVlZFBvaW50ZXJDYXB0dXJlcy5mb3JFYWNoKHVuYmxvY2spO1xuXG4gIGZvciAodmFyIF9pID0gMDsgX2kgPCBxdWV1ZWRFeHBsaWNpdEh5ZHJhdGlvblRhcmdldHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgdmFyIHF1ZXVlZFRhcmdldCA9IHF1ZXVlZEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0c1tfaV07XG5cbiAgICBpZiAocXVldWVkVGFyZ2V0LmJsb2NrZWRPbiA9PT0gdW5ibG9ja2VkKSB7XG4gICAgICBxdWV1ZWRUYXJnZXQuYmxvY2tlZE9uID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICB3aGlsZSAocXVldWVkRXhwbGljaXRIeWRyYXRpb25UYXJnZXRzLmxlbmd0aCA+IDApIHtcbiAgICB2YXIgbmV4dEV4cGxpY2l0VGFyZ2V0ID0gcXVldWVkRXhwbGljaXRIeWRyYXRpb25UYXJnZXRzWzBdO1xuXG4gICAgaWYgKG5leHRFeHBsaWNpdFRhcmdldC5ibG9ja2VkT24gIT09IG51bGwpIHtcbiAgICAgIC8vIFdlJ3JlIHN0aWxsIGJsb2NrZWQuXG4gICAgICBicmVhaztcbiAgICB9IGVsc2Uge1xuICAgICAgYXR0ZW1wdEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0KG5leHRFeHBsaWNpdFRhcmdldCk7XG5cbiAgICAgIGlmIChuZXh0RXhwbGljaXRUYXJnZXQuYmxvY2tlZE9uID09PSBudWxsKSB7XG4gICAgICAgIC8vIFdlJ3JlIHVuYmxvY2tlZC5cbiAgICAgICAgcXVldWVkRXhwbGljaXRIeWRyYXRpb25UYXJnZXRzLnNoaWZ0KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciBEaXNjcmV0ZUV2ZW50ID0gMDtcbnZhciBVc2VyQmxvY2tpbmdFdmVudCA9IDE7XG52YXIgQ29udGludW91c0V2ZW50ID0gMjtcblxuLyoqXG4gKiBHZW5lcmF0ZSBhIG1hcHBpbmcgb2Ygc3RhbmRhcmQgdmVuZG9yIHByZWZpeGVzIHVzaW5nIHRoZSBkZWZpbmVkIHN0eWxlIHByb3BlcnR5IGFuZCBldmVudCBuYW1lLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHlsZVByb3BcbiAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWVcbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cblxuZnVuY3Rpb24gbWFrZVByZWZpeE1hcChzdHlsZVByb3AsIGV2ZW50TmFtZSkge1xuICB2YXIgcHJlZml4ZXMgPSB7fTtcbiAgcHJlZml4ZXNbc3R5bGVQcm9wLnRvTG93ZXJDYXNlKCldID0gZXZlbnROYW1lLnRvTG93ZXJDYXNlKCk7XG4gIHByZWZpeGVzWydXZWJraXQnICsgc3R5bGVQcm9wXSA9ICd3ZWJraXQnICsgZXZlbnROYW1lO1xuICBwcmVmaXhlc1snTW96JyArIHN0eWxlUHJvcF0gPSAnbW96JyArIGV2ZW50TmFtZTtcbiAgcmV0dXJuIHByZWZpeGVzO1xufVxuLyoqXG4gKiBBIGxpc3Qgb2YgZXZlbnQgbmFtZXMgdG8gYSBjb25maWd1cmFibGUgbGlzdCBvZiB2ZW5kb3IgcHJlZml4ZXMuXG4gKi9cblxuXG52YXIgdmVuZG9yUHJlZml4ZXMgPSB7XG4gIGFuaW1hdGlvbmVuZDogbWFrZVByZWZpeE1hcCgnQW5pbWF0aW9uJywgJ0FuaW1hdGlvbkVuZCcpLFxuICBhbmltYXRpb25pdGVyYXRpb246IG1ha2VQcmVmaXhNYXAoJ0FuaW1hdGlvbicsICdBbmltYXRpb25JdGVyYXRpb24nKSxcbiAgYW5pbWF0aW9uc3RhcnQ6IG1ha2VQcmVmaXhNYXAoJ0FuaW1hdGlvbicsICdBbmltYXRpb25TdGFydCcpLFxuICB0cmFuc2l0aW9uZW5kOiBtYWtlUHJlZml4TWFwKCdUcmFuc2l0aW9uJywgJ1RyYW5zaXRpb25FbmQnKVxufTtcbi8qKlxuICogRXZlbnQgbmFtZXMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBkZXRlY3RlZCBhbmQgcHJlZml4ZWQgKGlmIGFwcGxpY2FibGUpLlxuICovXG5cbnZhciBwcmVmaXhlZEV2ZW50TmFtZXMgPSB7fTtcbi8qKlxuICogRWxlbWVudCB0byBjaGVjayBmb3IgcHJlZml4ZXMgb24uXG4gKi9cblxudmFyIHN0eWxlID0ge307XG4vKipcbiAqIEJvb3RzdHJhcCBpZiBhIERPTSBleGlzdHMuXG4gKi9cblxuaWYgKGNhblVzZURPTSkge1xuICBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLnN0eWxlOyAvLyBPbiBzb21lIHBsYXRmb3JtcywgaW4gcGFydGljdWxhciBzb21lIHJlbGVhc2VzIG9mIEFuZHJvaWQgNC54LFxuICAvLyB0aGUgdW4tcHJlZml4ZWQgXCJhbmltYXRpb25cIiBhbmQgXCJ0cmFuc2l0aW9uXCIgcHJvcGVydGllcyBhcmUgZGVmaW5lZCBvbiB0aGVcbiAgLy8gc3R5bGUgb2JqZWN0IGJ1dCB0aGUgZXZlbnRzIHRoYXQgZmlyZSB3aWxsIHN0aWxsIGJlIHByZWZpeGVkLCBzbyB3ZSBuZWVkXG4gIC8vIHRvIGNoZWNrIGlmIHRoZSB1bi1wcmVmaXhlZCBldmVudHMgYXJlIHVzYWJsZSwgYW5kIGlmIG5vdCByZW1vdmUgdGhlbSBmcm9tIHRoZSBtYXAuXG5cbiAgaWYgKCEoJ0FuaW1hdGlvbkV2ZW50JyBpbiB3aW5kb3cpKSB7XG4gICAgZGVsZXRlIHZlbmRvclByZWZpeGVzLmFuaW1hdGlvbmVuZC5hbmltYXRpb247XG4gICAgZGVsZXRlIHZlbmRvclByZWZpeGVzLmFuaW1hdGlvbml0ZXJhdGlvbi5hbmltYXRpb247XG4gICAgZGVsZXRlIHZlbmRvclByZWZpeGVzLmFuaW1hdGlvbnN0YXJ0LmFuaW1hdGlvbjtcbiAgfSAvLyBTYW1lIGFzIGFib3ZlXG5cblxuICBpZiAoISgnVHJhbnNpdGlvbkV2ZW50JyBpbiB3aW5kb3cpKSB7XG4gICAgZGVsZXRlIHZlbmRvclByZWZpeGVzLnRyYW5zaXRpb25lbmQudHJhbnNpdGlvbjtcbiAgfVxufVxuLyoqXG4gKiBBdHRlbXB0cyB0byBkZXRlcm1pbmUgdGhlIGNvcnJlY3QgdmVuZG9yIHByZWZpeGVkIGV2ZW50IG5hbWUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldFZlbmRvclByZWZpeGVkRXZlbnROYW1lKGV2ZW50TmFtZSkge1xuICBpZiAocHJlZml4ZWRFdmVudE5hbWVzW2V2ZW50TmFtZV0pIHtcbiAgICByZXR1cm4gcHJlZml4ZWRFdmVudE5hbWVzW2V2ZW50TmFtZV07XG4gIH0gZWxzZSBpZiAoIXZlbmRvclByZWZpeGVzW2V2ZW50TmFtZV0pIHtcbiAgICByZXR1cm4gZXZlbnROYW1lO1xuICB9XG5cbiAgdmFyIHByZWZpeE1hcCA9IHZlbmRvclByZWZpeGVzW2V2ZW50TmFtZV07XG5cbiAgZm9yICh2YXIgc3R5bGVQcm9wIGluIHByZWZpeE1hcCkge1xuICAgIGlmIChwcmVmaXhNYXAuaGFzT3duUHJvcGVydHkoc3R5bGVQcm9wKSAmJiBzdHlsZVByb3AgaW4gc3R5bGUpIHtcbiAgICAgIHJldHVybiBwcmVmaXhlZEV2ZW50TmFtZXNbZXZlbnROYW1lXSA9IHByZWZpeE1hcFtzdHlsZVByb3BdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBldmVudE5hbWU7XG59XG5cbnZhciBBTklNQVRJT05fRU5EID0gZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5hbWUoJ2FuaW1hdGlvbmVuZCcpO1xudmFyIEFOSU1BVElPTl9JVEVSQVRJT04gPSBnZXRWZW5kb3JQcmVmaXhlZEV2ZW50TmFtZSgnYW5pbWF0aW9uaXRlcmF0aW9uJyk7XG52YXIgQU5JTUFUSU9OX1NUQVJUID0gZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5hbWUoJ2FuaW1hdGlvbnN0YXJ0Jyk7XG52YXIgVFJBTlNJVElPTl9FTkQgPSBnZXRWZW5kb3JQcmVmaXhlZEV2ZW50TmFtZSgndHJhbnNpdGlvbmVuZCcpO1xuXG52YXIgdG9wTGV2ZWxFdmVudHNUb1JlYWN0TmFtZXMgPSBuZXcgTWFwKCk7XG52YXIgZXZlbnRQcmlvcml0aWVzID0gbmV3IE1hcCgpOyAvLyBXZSBzdG9yZSBtb3N0IG9mIHRoZSBldmVudHMgaW4gdGhpcyBtb2R1bGUgaW4gcGFpcnMgb2YgdHdvIHN0cmluZ3Mgc28gd2UgY2FuIHJlLXVzZVxuLy8gdGhlIGNvZGUgcmVxdWlyZWQgdG8gYXBwbHkgdGhlIHNhbWUgbG9naWMgZm9yIGV2ZW50IHByaW9yaXRpemF0aW9uIGFuZCB0aGF0IG9mIHRoZVxuLy8gU2ltcGxlRXZlbnRQbHVnaW4uIFRoaXMgY29tcGxpY2F0ZXMgdGhpbmdzIHNsaWdodGx5LCBidXQgdGhlIGFpbSBpcyB0byByZWR1Y2UgY29kZVxuLy8gZHVwbGljYXRpb24gKGZvciB3aGljaCB0aGVyZSB3b3VsZCBiZSBxdWl0ZSBhIGJpdCkuIEZvciB0aGUgZXZlbnRzIHRoYXQgYXJlIG5vdCBuZWVkZWRcbi8vIGZvciB0aGUgU2ltcGxlRXZlbnRQbHVnaW4gKG90aGVyRGlzY3JldGVFdmVudHMpIHdlIHByb2Nlc3MgdGhlbSBzZXBhcmF0ZWx5IGFzIGFuXG4vLyBhcnJheSBvZiB0b3AgbGV2ZWwgZXZlbnRzLlxuLy8gTGFzdGx5LCB3ZSBpZ25vcmUgcHJldHRpZXIgc28gd2UgY2FuIGtlZXAgdGhlIGZvcm1hdHRpbmcgc2FuZS5cbi8vIHByZXR0aWVyLWlnbm9yZVxuXG52YXIgZGlzY3JldGVFdmVudFBhaXJzRm9yU2ltcGxlRXZlbnRQbHVnaW4gPSBbJ2NhbmNlbCcsICdjYW5jZWwnLCAnY2xpY2snLCAnY2xpY2snLCAnY2xvc2UnLCAnY2xvc2UnLCAnY29udGV4dG1lbnUnLCAnY29udGV4dE1lbnUnLCAnY29weScsICdjb3B5JywgJ2N1dCcsICdjdXQnLCAnYXV4Y2xpY2snLCAnYXV4Q2xpY2snLCAnZGJsY2xpY2snLCAnZG91YmxlQ2xpY2snLCAvLyBDYXJlZnVsIVxuJ2RyYWdlbmQnLCAnZHJhZ0VuZCcsICdkcmFnc3RhcnQnLCAnZHJhZ1N0YXJ0JywgJ2Ryb3AnLCAnZHJvcCcsICdmb2N1c2luJywgJ2ZvY3VzJywgLy8gQ2FyZWZ1bCFcbidmb2N1c291dCcsICdibHVyJywgLy8gQ2FyZWZ1bCFcbidpbnB1dCcsICdpbnB1dCcsICdpbnZhbGlkJywgJ2ludmFsaWQnLCAna2V5ZG93bicsICdrZXlEb3duJywgJ2tleXByZXNzJywgJ2tleVByZXNzJywgJ2tleXVwJywgJ2tleVVwJywgJ21vdXNlZG93bicsICdtb3VzZURvd24nLCAnbW91c2V1cCcsICdtb3VzZVVwJywgJ3Bhc3RlJywgJ3Bhc3RlJywgJ3BhdXNlJywgJ3BhdXNlJywgJ3BsYXknLCAncGxheScsICdwb2ludGVyY2FuY2VsJywgJ3BvaW50ZXJDYW5jZWwnLCAncG9pbnRlcmRvd24nLCAncG9pbnRlckRvd24nLCAncG9pbnRlcnVwJywgJ3BvaW50ZXJVcCcsICdyYXRlY2hhbmdlJywgJ3JhdGVDaGFuZ2UnLCAncmVzZXQnLCAncmVzZXQnLCAnc2Vla2VkJywgJ3NlZWtlZCcsICdzdWJtaXQnLCAnc3VibWl0JywgJ3RvdWNoY2FuY2VsJywgJ3RvdWNoQ2FuY2VsJywgJ3RvdWNoZW5kJywgJ3RvdWNoRW5kJywgJ3RvdWNoc3RhcnQnLCAndG91Y2hTdGFydCcsICd2b2x1bWVjaGFuZ2UnLCAndm9sdW1lQ2hhbmdlJ107XG52YXIgb3RoZXJEaXNjcmV0ZUV2ZW50cyA9IFsnY2hhbmdlJywgJ3NlbGVjdGlvbmNoYW5nZScsICd0ZXh0SW5wdXQnLCAnY29tcG9zaXRpb25zdGFydCcsICdjb21wb3NpdGlvbmVuZCcsICdjb21wb3NpdGlvbnVwZGF0ZSddO1xuXG5cbnZhciB1c2VyQmxvY2tpbmdQYWlyc0ZvclNpbXBsZUV2ZW50UGx1Z2luID0gWydkcmFnJywgJ2RyYWcnLCAnZHJhZ2VudGVyJywgJ2RyYWdFbnRlcicsICdkcmFnZXhpdCcsICdkcmFnRXhpdCcsICdkcmFnbGVhdmUnLCAnZHJhZ0xlYXZlJywgJ2RyYWdvdmVyJywgJ2RyYWdPdmVyJywgJ21vdXNlbW92ZScsICdtb3VzZU1vdmUnLCAnbW91c2VvdXQnLCAnbW91c2VPdXQnLCAnbW91c2VvdmVyJywgJ21vdXNlT3ZlcicsICdwb2ludGVybW92ZScsICdwb2ludGVyTW92ZScsICdwb2ludGVyb3V0JywgJ3BvaW50ZXJPdXQnLCAncG9pbnRlcm92ZXInLCAncG9pbnRlck92ZXInLCAnc2Nyb2xsJywgJ3Njcm9sbCcsICd0b2dnbGUnLCAndG9nZ2xlJywgJ3RvdWNobW92ZScsICd0b3VjaE1vdmUnLCAnd2hlZWwnLCAnd2hlZWwnXTsgLy8gcHJldHRpZXItaWdub3JlXG5cbnZhciBjb250aW51b3VzUGFpcnNGb3JTaW1wbGVFdmVudFBsdWdpbiA9IFsnYWJvcnQnLCAnYWJvcnQnLCBBTklNQVRJT05fRU5ELCAnYW5pbWF0aW9uRW5kJywgQU5JTUFUSU9OX0lURVJBVElPTiwgJ2FuaW1hdGlvbkl0ZXJhdGlvbicsIEFOSU1BVElPTl9TVEFSVCwgJ2FuaW1hdGlvblN0YXJ0JywgJ2NhbnBsYXknLCAnY2FuUGxheScsICdjYW5wbGF5dGhyb3VnaCcsICdjYW5QbGF5VGhyb3VnaCcsICdkdXJhdGlvbmNoYW5nZScsICdkdXJhdGlvbkNoYW5nZScsICdlbXB0aWVkJywgJ2VtcHRpZWQnLCAnZW5jcnlwdGVkJywgJ2VuY3J5cHRlZCcsICdlbmRlZCcsICdlbmRlZCcsICdlcnJvcicsICdlcnJvcicsICdnb3Rwb2ludGVyY2FwdHVyZScsICdnb3RQb2ludGVyQ2FwdHVyZScsICdsb2FkJywgJ2xvYWQnLCAnbG9hZGVkZGF0YScsICdsb2FkZWREYXRhJywgJ2xvYWRlZG1ldGFkYXRhJywgJ2xvYWRlZE1ldGFkYXRhJywgJ2xvYWRzdGFydCcsICdsb2FkU3RhcnQnLCAnbG9zdHBvaW50ZXJjYXB0dXJlJywgJ2xvc3RQb2ludGVyQ2FwdHVyZScsICdwbGF5aW5nJywgJ3BsYXlpbmcnLCAncHJvZ3Jlc3MnLCAncHJvZ3Jlc3MnLCAnc2Vla2luZycsICdzZWVraW5nJywgJ3N0YWxsZWQnLCAnc3RhbGxlZCcsICdzdXNwZW5kJywgJ3N1c3BlbmQnLCAndGltZXVwZGF0ZScsICd0aW1lVXBkYXRlJywgVFJBTlNJVElPTl9FTkQsICd0cmFuc2l0aW9uRW5kJywgJ3dhaXRpbmcnLCAnd2FpdGluZyddO1xuLyoqXG4gKiBUdXJuc1xuICogWydhYm9ydCcsIC4uLl1cbiAqXG4gKiBpbnRvXG4gKlxuICogdG9wTGV2ZWxFdmVudHNUb1JlYWN0TmFtZXMgPSBuZXcgTWFwKFtcbiAqICAgWydhYm9ydCcsICdvbkFib3J0J10sXG4gKiBdKTtcbiAqXG4gKiBhbmQgcmVnaXN0ZXJzIHRoZW0uXG4gKi9cblxuZnVuY3Rpb24gcmVnaXN0ZXJTaW1wbGVQbHVnaW5FdmVudHNBbmRTZXRUaGVpclByaW9yaXRpZXMoZXZlbnRUeXBlcywgcHJpb3JpdHkpIHtcbiAgLy8gQXMgdGhlIGV2ZW50IHR5cGVzIGFyZSBpbiBwYWlycyBvZiB0d28sIHdlIG5lZWQgdG8gaXRlcmF0ZVxuICAvLyB0aHJvdWdoIGluIHR3b3MuIFRoZSBldmVudHMgYXJlIGluIHBhaXJzIG9mIHR3byB0byBzYXZlIGNvZGVcbiAgLy8gYW5kIGltcHJvdmUgaW5pdCBwZXJmIG9mIHByb2Nlc3NpbmcgdGhpcyBhcnJheSwgYXMgaXQgd2lsbFxuICAvLyByZXN1bHQgaW4gZmFyIGZld2VyIG9iamVjdCBhbGxvY2F0aW9ucyBhbmQgcHJvcGVydHkgYWNjZXNzZXNcbiAgLy8gaWYgd2Ugb25seSB1c2UgdGhyZWUgYXJyYXlzIHRvIHByb2Nlc3MgYWxsIHRoZSBjYXRlZ29yaWVzIG9mXG4gIC8vIGluc3RlYWQgb2YgdHVwbGVzLlxuICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50VHlwZXMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICB2YXIgdG9wRXZlbnQgPSBldmVudFR5cGVzW2ldO1xuICAgIHZhciBldmVudCA9IGV2ZW50VHlwZXNbaSArIDFdO1xuICAgIHZhciBjYXBpdGFsaXplZEV2ZW50ID0gZXZlbnRbMF0udG9VcHBlckNhc2UoKSArIGV2ZW50LnNsaWNlKDEpO1xuICAgIHZhciByZWFjdE5hbWUgPSAnb24nICsgY2FwaXRhbGl6ZWRFdmVudDtcbiAgICBldmVudFByaW9yaXRpZXMuc2V0KHRvcEV2ZW50LCBwcmlvcml0eSk7XG4gICAgdG9wTGV2ZWxFdmVudHNUb1JlYWN0TmFtZXMuc2V0KHRvcEV2ZW50LCByZWFjdE5hbWUpO1xuICAgIHJlZ2lzdGVyVHdvUGhhc2VFdmVudChyZWFjdE5hbWUsIFt0b3BFdmVudF0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNldEV2ZW50UHJpb3JpdGllcyhldmVudFR5cGVzLCBwcmlvcml0eSkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50VHlwZXMubGVuZ3RoOyBpKyspIHtcbiAgICBldmVudFByaW9yaXRpZXMuc2V0KGV2ZW50VHlwZXNbaV0sIHByaW9yaXR5KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRFdmVudFByaW9yaXR5Rm9yUGx1Z2luU3lzdGVtKGRvbUV2ZW50TmFtZSkge1xuICB2YXIgcHJpb3JpdHkgPSBldmVudFByaW9yaXRpZXMuZ2V0KGRvbUV2ZW50TmFtZSk7IC8vIERlZmF1bHQgdG8gYSBDb250aW51b3VzRXZlbnQuIE5vdGU6IHdlIG1pZ2h0XG4gIC8vIHdhbnQgdG8gd2FybiBpZiB3ZSBjYW4ndCBkZXRlY3QgdGhlIHByaW9yaXR5XG4gIC8vIGZvciB0aGUgZXZlbnQuXG5cbiAgcmV0dXJuIHByaW9yaXR5ID09PSB1bmRlZmluZWQgPyBDb250aW51b3VzRXZlbnQgOiBwcmlvcml0eTtcbn1cbmZ1bmN0aW9uIHJlZ2lzdGVyU2ltcGxlRXZlbnRzKCkge1xuICByZWdpc3RlclNpbXBsZVBsdWdpbkV2ZW50c0FuZFNldFRoZWlyUHJpb3JpdGllcyhkaXNjcmV0ZUV2ZW50UGFpcnNGb3JTaW1wbGVFdmVudFBsdWdpbiwgRGlzY3JldGVFdmVudCk7XG4gIHJlZ2lzdGVyU2ltcGxlUGx1Z2luRXZlbnRzQW5kU2V0VGhlaXJQcmlvcml0aWVzKHVzZXJCbG9ja2luZ1BhaXJzRm9yU2ltcGxlRXZlbnRQbHVnaW4sIFVzZXJCbG9ja2luZ0V2ZW50KTtcbiAgcmVnaXN0ZXJTaW1wbGVQbHVnaW5FdmVudHNBbmRTZXRUaGVpclByaW9yaXRpZXMoY29udGludW91c1BhaXJzRm9yU2ltcGxlRXZlbnRQbHVnaW4sIENvbnRpbnVvdXNFdmVudCk7XG4gIHNldEV2ZW50UHJpb3JpdGllcyhvdGhlckRpc2NyZXRlRXZlbnRzLCBEaXNjcmV0ZUV2ZW50KTtcbn1cblxudmFyIFNjaGVkdWxlcl9ub3cgPSBTY2hlZHVsZXIudW5zdGFibGVfbm93O1xuXG57XG4gIC8vIFByb3ZpZGUgZXhwbGljaXQgZXJyb3IgbWVzc2FnZSB3aGVuIHByb2R1Y3Rpb24rcHJvZmlsaW5nIGJ1bmRsZSBvZiBlLmcuXG4gIC8vIHJlYWN0LWRvbSBpcyB1c2VkIHdpdGggcHJvZHVjdGlvbiAobm9uLXByb2ZpbGluZykgYnVuZGxlIG9mXG4gIC8vIHNjaGVkdWxlci90cmFjaW5nXG4gIGlmICghKHRyYWNpbmcuX19pbnRlcmFjdGlvbnNSZWYgIT0gbnVsbCAmJiB0cmFjaW5nLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQgIT0gbnVsbCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJJdCBpcyBub3Qgc3VwcG9ydGVkIHRvIHJ1biB0aGUgcHJvZmlsaW5nIHZlcnNpb24gb2YgYSByZW5kZXJlciAoZm9yIGV4YW1wbGUsIGByZWFjdC1kb20vcHJvZmlsaW5nYCkgd2l0aG91dCBhbHNvIHJlcGxhY2luZyB0aGUgYHNjaGVkdWxlci90cmFjaW5nYCBtb2R1bGUgd2l0aCBgc2NoZWR1bGVyL3RyYWNpbmctcHJvZmlsaW5nYC4gWW91ciBidW5kbGVyIG1pZ2h0IGhhdmUgYSBzZXR0aW5nIGZvciBhbGlhc2luZyBib3RoIG1vZHVsZXMuIExlYXJuIG1vcmUgYXQgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3Byb2ZpbGluZ1wiICk7XG4gICAgfVxuICB9XG59XG4vLyBhc2NlbmRpbmcgbnVtYmVycyBzbyB3ZSBjYW4gY29tcGFyZSB0aGVtIGxpa2UgbnVtYmVycy4gVGhleSBzdGFydCBhdCA5MCB0b1xuLy8gYXZvaWQgY2xhc2hpbmcgd2l0aCBTY2hlZHVsZXIncyBwcmlvcml0aWVzLlxuXG52YXIgSW1tZWRpYXRlUHJpb3JpdHkgPSA5OTtcbnZhciBVc2VyQmxvY2tpbmdQcmlvcml0eSA9IDk4O1xudmFyIE5vcm1hbFByaW9yaXR5ID0gOTc7XG52YXIgTG93UHJpb3JpdHkgPSA5NjtcbnZhciBJZGxlUHJpb3JpdHkgPSA5NTsgLy8gTm9Qcmlvcml0eSBpcyB0aGUgYWJzZW5jZSBvZiBwcmlvcml0eS4gQWxzbyBSZWFjdC1vbmx5LlxuXG52YXIgTm9Qcmlvcml0eSA9IDkwO1xudmFyIGluaXRpYWxUaW1lTXMgPSBTY2hlZHVsZXJfbm93KCk7IC8vIElmIHRoZSBpbml0aWFsIHRpbWVzdGFtcCBpcyByZWFzb25hYmx5IHNtYWxsLCB1c2UgU2NoZWR1bGVyJ3MgYG5vd2AgZGlyZWN0bHkuXG5cbnZhciBTeW5jTGFuZVByaW9yaXR5ID0gMTU7XG52YXIgU3luY0JhdGNoZWRMYW5lUHJpb3JpdHkgPSAxNDtcbnZhciBJbnB1dERpc2NyZXRlSHlkcmF0aW9uTGFuZVByaW9yaXR5ID0gMTM7XG52YXIgSW5wdXREaXNjcmV0ZUxhbmVQcmlvcml0eSA9IDEyO1xudmFyIElucHV0Q29udGludW91c0h5ZHJhdGlvbkxhbmVQcmlvcml0eSA9IDExO1xudmFyIElucHV0Q29udGludW91c0xhbmVQcmlvcml0eSA9IDEwO1xudmFyIERlZmF1bHRIeWRyYXRpb25MYW5lUHJpb3JpdHkgPSA5O1xudmFyIERlZmF1bHRMYW5lUHJpb3JpdHkgPSA4O1xudmFyIFRyYW5zaXRpb25IeWRyYXRpb25Qcmlvcml0eSA9IDc7XG52YXIgVHJhbnNpdGlvblByaW9yaXR5ID0gNjtcbnZhciBSZXRyeUxhbmVQcmlvcml0eSA9IDU7XG52YXIgU2VsZWN0aXZlSHlkcmF0aW9uTGFuZVByaW9yaXR5ID0gNDtcbnZhciBJZGxlSHlkcmF0aW9uTGFuZVByaW9yaXR5ID0gMztcbnZhciBJZGxlTGFuZVByaW9yaXR5ID0gMjtcbnZhciBPZmZzY3JlZW5MYW5lUHJpb3JpdHkgPSAxO1xudmFyIE5vTGFuZVByaW9yaXR5ID0gMDtcbnZhciBUb3RhbExhbmVzID0gMzE7XG52YXIgTm9MYW5lcyA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICovXG4wO1xudmFyIE5vTGFuZSA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbjA7XG52YXIgU3luY0xhbmUgPVxuLyogICAgICAgICAgICAgICAgICAgICAgICAqL1xuMTtcbnZhciBTeW5jQmF0Y2hlZExhbmUgPVxuLyogICAgICAgICAgICAgICAgICovXG4yO1xudmFyIElucHV0RGlzY3JldGVIeWRyYXRpb25MYW5lID1cbi8qICAgICAgKi9cbjQ7XG52YXIgSW5wdXREaXNjcmV0ZUxhbmVzID1cbi8qICAgICAgICAgICAgICAgICAgICAqL1xuMjQ7XG52YXIgSW5wdXRDb250aW51b3VzSHlkcmF0aW9uTGFuZSA9XG4vKiAgICAgICAgICAgKi9cbjMyO1xudmFyIElucHV0Q29udGludW91c0xhbmVzID1cbi8qICAgICAgICAgICAgICAgICAgKi9cbjE5MjtcbnZhciBEZWZhdWx0SHlkcmF0aW9uTGFuZSA9XG4vKiAgICAgICAgICAgICovXG4yNTY7XG52YXIgRGVmYXVsdExhbmVzID1cbi8qICAgICAgICAgICAgICAgICAgICovXG4zNTg0O1xudmFyIFRyYW5zaXRpb25IeWRyYXRpb25MYW5lID1cbi8qICAgICAgICAgICAgICAgICovXG40MDk2O1xudmFyIFRyYW5zaXRpb25MYW5lcyA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbjQxODYxMTI7XG52YXIgUmV0cnlMYW5lcyA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuNjI5MTQ1NjA7XG52YXIgU29tZVJldHJ5TGFuZSA9XG4vKiAgICAgICAgICAgICAgICAgICovXG4zMzU1NDQzMjtcbnZhciBTZWxlY3RpdmVIeWRyYXRpb25MYW5lID1cbi8qICAgICAgICAgICovXG42NzEwODg2NDtcbnZhciBOb25JZGxlTGFuZXMgPVxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuMTM0MjE3NzI3O1xudmFyIElkbGVIeWRyYXRpb25MYW5lID1cbi8qICAgICAgICAgICAgICAgKi9cbjEzNDIxNzcyODtcbnZhciBJZGxlTGFuZXMgPVxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG44MDUzMDYzNjg7XG52YXIgT2Zmc2NyZWVuTGFuZSA9XG4vKiAgICAgICAgICAgICAgICAgICAqL1xuMTA3Mzc0MTgyNDtcbnZhciBOb1RpbWVzdGFtcCA9IC0xO1xuZnVuY3Rpb24gc2V0Q3VycmVudFVwZGF0ZUxhbmVQcmlvcml0eShuZXdMYW5lUHJpb3JpdHkpIHtcbn0gLy8gXCJSZWdpc3RlcnNcIiB1c2VkIHRvIFwicmV0dXJuXCIgbXVsdGlwbGUgdmFsdWVzXG4vLyBVc2VkIGJ5IGdldEhpZ2hlc3RQcmlvcml0eUxhbmVzIGFuZCBnZXROZXh0TGFuZXM6XG5cbnZhciByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IERlZmF1bHRMYW5lUHJpb3JpdHk7XG5cbmZ1bmN0aW9uIGdldEhpZ2hlc3RQcmlvcml0eUxhbmVzKGxhbmVzKSB7XG4gIGlmICgoU3luY0xhbmUgJiBsYW5lcykgIT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IFN5bmNMYW5lUHJpb3JpdHk7XG4gICAgcmV0dXJuIFN5bmNMYW5lO1xuICB9XG5cbiAgaWYgKChTeW5jQmF0Y2hlZExhbmUgJiBsYW5lcykgIT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IFN5bmNCYXRjaGVkTGFuZVByaW9yaXR5O1xuICAgIHJldHVybiBTeW5jQmF0Y2hlZExhbmU7XG4gIH1cblxuICBpZiAoKElucHV0RGlzY3JldGVIeWRyYXRpb25MYW5lICYgbGFuZXMpICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBJbnB1dERpc2NyZXRlSHlkcmF0aW9uTGFuZVByaW9yaXR5O1xuICAgIHJldHVybiBJbnB1dERpc2NyZXRlSHlkcmF0aW9uTGFuZTtcbiAgfVxuXG4gIHZhciBpbnB1dERpc2NyZXRlTGFuZXMgPSBJbnB1dERpc2NyZXRlTGFuZXMgJiBsYW5lcztcblxuICBpZiAoaW5wdXREaXNjcmV0ZUxhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBJbnB1dERpc2NyZXRlTGFuZVByaW9yaXR5O1xuICAgIHJldHVybiBpbnB1dERpc2NyZXRlTGFuZXM7XG4gIH1cblxuICBpZiAoKGxhbmVzICYgSW5wdXRDb250aW51b3VzSHlkcmF0aW9uTGFuZSkgIT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IElucHV0Q29udGludW91c0h5ZHJhdGlvbkxhbmVQcmlvcml0eTtcbiAgICByZXR1cm4gSW5wdXRDb250aW51b3VzSHlkcmF0aW9uTGFuZTtcbiAgfVxuXG4gIHZhciBpbnB1dENvbnRpbnVvdXNMYW5lcyA9IElucHV0Q29udGludW91c0xhbmVzICYgbGFuZXM7XG5cbiAgaWYgKGlucHV0Q29udGludW91c0xhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBJbnB1dENvbnRpbnVvdXNMYW5lUHJpb3JpdHk7XG4gICAgcmV0dXJuIGlucHV0Q29udGludW91c0xhbmVzO1xuICB9XG5cbiAgaWYgKChsYW5lcyAmIERlZmF1bHRIeWRyYXRpb25MYW5lKSAhPT0gTm9MYW5lcykge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gRGVmYXVsdEh5ZHJhdGlvbkxhbmVQcmlvcml0eTtcbiAgICByZXR1cm4gRGVmYXVsdEh5ZHJhdGlvbkxhbmU7XG4gIH1cblxuICB2YXIgZGVmYXVsdExhbmVzID0gRGVmYXVsdExhbmVzICYgbGFuZXM7XG5cbiAgaWYgKGRlZmF1bHRMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gRGVmYXVsdExhbmVQcmlvcml0eTtcbiAgICByZXR1cm4gZGVmYXVsdExhbmVzO1xuICB9XG5cbiAgaWYgKChsYW5lcyAmIFRyYW5zaXRpb25IeWRyYXRpb25MYW5lKSAhPT0gTm9MYW5lcykge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gVHJhbnNpdGlvbkh5ZHJhdGlvblByaW9yaXR5O1xuICAgIHJldHVybiBUcmFuc2l0aW9uSHlkcmF0aW9uTGFuZTtcbiAgfVxuXG4gIHZhciB0cmFuc2l0aW9uTGFuZXMgPSBUcmFuc2l0aW9uTGFuZXMgJiBsYW5lcztcblxuICBpZiAodHJhbnNpdGlvbkxhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBUcmFuc2l0aW9uUHJpb3JpdHk7XG4gICAgcmV0dXJuIHRyYW5zaXRpb25MYW5lcztcbiAgfVxuXG4gIHZhciByZXRyeUxhbmVzID0gUmV0cnlMYW5lcyAmIGxhbmVzO1xuXG4gIGlmIChyZXRyeUxhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBSZXRyeUxhbmVQcmlvcml0eTtcbiAgICByZXR1cm4gcmV0cnlMYW5lcztcbiAgfVxuXG4gIGlmIChsYW5lcyAmIFNlbGVjdGl2ZUh5ZHJhdGlvbkxhbmUpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IFNlbGVjdGl2ZUh5ZHJhdGlvbkxhbmVQcmlvcml0eTtcbiAgICByZXR1cm4gU2VsZWN0aXZlSHlkcmF0aW9uTGFuZTtcbiAgfVxuXG4gIGlmICgobGFuZXMgJiBJZGxlSHlkcmF0aW9uTGFuZSkgIT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IElkbGVIeWRyYXRpb25MYW5lUHJpb3JpdHk7XG4gICAgcmV0dXJuIElkbGVIeWRyYXRpb25MYW5lO1xuICB9XG5cbiAgdmFyIGlkbGVMYW5lcyA9IElkbGVMYW5lcyAmIGxhbmVzO1xuXG4gIGlmIChpZGxlTGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IElkbGVMYW5lUHJpb3JpdHk7XG4gICAgcmV0dXJuIGlkbGVMYW5lcztcbiAgfVxuXG4gIGlmICgoT2Zmc2NyZWVuTGFuZSAmIGxhbmVzKSAhPT0gTm9MYW5lcykge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gT2Zmc2NyZWVuTGFuZVByaW9yaXR5O1xuICAgIHJldHVybiBPZmZzY3JlZW5MYW5lO1xuICB9XG5cbiAge1xuICAgIGVycm9yKCdTaG91bGQgaGF2ZSBmb3VuZCBtYXRjaGluZyBsYW5lcy4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4nKTtcbiAgfSAvLyBUaGlzIHNob3VsZG4ndCBiZSByZWFjaGFibGUsIGJ1dCBhcyBhIGZhbGxiYWNrLCByZXR1cm4gdGhlIGVudGlyZSBiaXRtYXNrLlxuXG5cbiAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBEZWZhdWx0TGFuZVByaW9yaXR5O1xuICByZXR1cm4gbGFuZXM7XG59XG5cbmZ1bmN0aW9uIHNjaGVkdWxlclByaW9yaXR5VG9MYW5lUHJpb3JpdHkoc2NoZWR1bGVyUHJpb3JpdHlMZXZlbCkge1xuICBzd2l0Y2ggKHNjaGVkdWxlclByaW9yaXR5TGV2ZWwpIHtcbiAgICBjYXNlIEltbWVkaWF0ZVByaW9yaXR5OlxuICAgICAgcmV0dXJuIFN5bmNMYW5lUHJpb3JpdHk7XG5cbiAgICBjYXNlIFVzZXJCbG9ja2luZ1ByaW9yaXR5OlxuICAgICAgcmV0dXJuIElucHV0Q29udGludW91c0xhbmVQcmlvcml0eTtcblxuICAgIGNhc2UgTm9ybWFsUHJpb3JpdHk6XG4gICAgY2FzZSBMb3dQcmlvcml0eTpcbiAgICAgIC8vIFRPRE86IEhhbmRsZSBMb3dTY2hlZHVsZXJQcmlvcml0eSwgc29tZWhvdy4gTWF5YmUgdGhlIHNhbWUgbGFuZSBhcyBoeWRyYXRpb24uXG4gICAgICByZXR1cm4gRGVmYXVsdExhbmVQcmlvcml0eTtcblxuICAgIGNhc2UgSWRsZVByaW9yaXR5OlxuICAgICAgcmV0dXJuIElkbGVMYW5lUHJpb3JpdHk7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIE5vTGFuZVByaW9yaXR5O1xuICB9XG59XG5mdW5jdGlvbiBsYW5lUHJpb3JpdHlUb1NjaGVkdWxlclByaW9yaXR5KGxhbmVQcmlvcml0eSkge1xuICBzd2l0Y2ggKGxhbmVQcmlvcml0eSkge1xuICAgIGNhc2UgU3luY0xhbmVQcmlvcml0eTpcbiAgICBjYXNlIFN5bmNCYXRjaGVkTGFuZVByaW9yaXR5OlxuICAgICAgcmV0dXJuIEltbWVkaWF0ZVByaW9yaXR5O1xuXG4gICAgY2FzZSBJbnB1dERpc2NyZXRlSHlkcmF0aW9uTGFuZVByaW9yaXR5OlxuICAgIGNhc2UgSW5wdXREaXNjcmV0ZUxhbmVQcmlvcml0eTpcbiAgICBjYXNlIElucHV0Q29udGludW91c0h5ZHJhdGlvbkxhbmVQcmlvcml0eTpcbiAgICBjYXNlIElucHV0Q29udGludW91c0xhbmVQcmlvcml0eTpcbiAgICAgIHJldHVybiBVc2VyQmxvY2tpbmdQcmlvcml0eTtcblxuICAgIGNhc2UgRGVmYXVsdEh5ZHJhdGlvbkxhbmVQcmlvcml0eTpcbiAgICBjYXNlIERlZmF1bHRMYW5lUHJpb3JpdHk6XG4gICAgY2FzZSBUcmFuc2l0aW9uSHlkcmF0aW9uUHJpb3JpdHk6XG4gICAgY2FzZSBUcmFuc2l0aW9uUHJpb3JpdHk6XG4gICAgY2FzZSBTZWxlY3RpdmVIeWRyYXRpb25MYW5lUHJpb3JpdHk6XG4gICAgY2FzZSBSZXRyeUxhbmVQcmlvcml0eTpcbiAgICAgIHJldHVybiBOb3JtYWxQcmlvcml0eTtcblxuICAgIGNhc2UgSWRsZUh5ZHJhdGlvbkxhbmVQcmlvcml0eTpcbiAgICBjYXNlIElkbGVMYW5lUHJpb3JpdHk6XG4gICAgY2FzZSBPZmZzY3JlZW5MYW5lUHJpb3JpdHk6XG4gICAgICByZXR1cm4gSWRsZVByaW9yaXR5O1xuXG4gICAgY2FzZSBOb0xhbmVQcmlvcml0eTpcbiAgICAgIHJldHVybiBOb1ByaW9yaXR5O1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCBcIkludmFsaWQgdXBkYXRlIHByaW9yaXR5OiBcIiArIGxhbmVQcmlvcml0eSArIFwiLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LlwiICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICB9XG59XG5mdW5jdGlvbiBnZXROZXh0TGFuZXMocm9vdCwgd2lwTGFuZXMpIHtcbiAgLy8gRWFybHkgYmFpbG91dCBpZiB0aGVyZSdzIG5vIHBlbmRpbmcgd29yayBsZWZ0LlxuICB2YXIgcGVuZGluZ0xhbmVzID0gcm9vdC5wZW5kaW5nTGFuZXM7XG5cbiAgaWYgKHBlbmRpbmdMYW5lcyA9PT0gTm9MYW5lcykge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gTm9MYW5lUHJpb3JpdHk7XG4gICAgcmV0dXJuIE5vTGFuZXM7XG4gIH1cblxuICB2YXIgbmV4dExhbmVzID0gTm9MYW5lcztcbiAgdmFyIG5leHRMYW5lUHJpb3JpdHkgPSBOb0xhbmVQcmlvcml0eTtcbiAgdmFyIGV4cGlyZWRMYW5lcyA9IHJvb3QuZXhwaXJlZExhbmVzO1xuICB2YXIgc3VzcGVuZGVkTGFuZXMgPSByb290LnN1c3BlbmRlZExhbmVzO1xuICB2YXIgcGluZ2VkTGFuZXMgPSByb290LnBpbmdlZExhbmVzOyAvLyBDaGVjayBpZiBhbnkgd29yayBoYXMgZXhwaXJlZC5cblxuICBpZiAoZXhwaXJlZExhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgbmV4dExhbmVzID0gZXhwaXJlZExhbmVzO1xuICAgIG5leHRMYW5lUHJpb3JpdHkgPSByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IFN5bmNMYW5lUHJpb3JpdHk7XG4gIH0gZWxzZSB7XG4gICAgLy8gRG8gbm90IHdvcmsgb24gYW55IGlkbGUgd29yayB1bnRpbCBhbGwgdGhlIG5vbi1pZGxlIHdvcmsgaGFzIGZpbmlzaGVkLFxuICAgIC8vIGV2ZW4gaWYgdGhlIHdvcmsgaXMgc3VzcGVuZGVkLlxuICAgIHZhciBub25JZGxlUGVuZGluZ0xhbmVzID0gcGVuZGluZ0xhbmVzICYgTm9uSWRsZUxhbmVzO1xuXG4gICAgaWYgKG5vbklkbGVQZW5kaW5nTGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICAgIHZhciBub25JZGxlVW5ibG9ja2VkTGFuZXMgPSBub25JZGxlUGVuZGluZ0xhbmVzICYgfnN1c3BlbmRlZExhbmVzO1xuXG4gICAgICBpZiAobm9uSWRsZVVuYmxvY2tlZExhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgICAgIG5leHRMYW5lcyA9IGdldEhpZ2hlc3RQcmlvcml0eUxhbmVzKG5vbklkbGVVbmJsb2NrZWRMYW5lcyk7XG4gICAgICAgIG5leHRMYW5lUHJpb3JpdHkgPSByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBub25JZGxlUGluZ2VkTGFuZXMgPSBub25JZGxlUGVuZGluZ0xhbmVzICYgcGluZ2VkTGFuZXM7XG5cbiAgICAgICAgaWYgKG5vbklkbGVQaW5nZWRMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgICAgICAgIG5leHRMYW5lcyA9IGdldEhpZ2hlc3RQcmlvcml0eUxhbmVzKG5vbklkbGVQaW5nZWRMYW5lcyk7XG4gICAgICAgICAgbmV4dExhbmVQcmlvcml0eSA9IHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoZSBvbmx5IHJlbWFpbmluZyB3b3JrIGlzIElkbGUuXG4gICAgICB2YXIgdW5ibG9ja2VkTGFuZXMgPSBwZW5kaW5nTGFuZXMgJiB+c3VzcGVuZGVkTGFuZXM7XG5cbiAgICAgIGlmICh1bmJsb2NrZWRMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgICAgICBuZXh0TGFuZXMgPSBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lcyh1bmJsb2NrZWRMYW5lcyk7XG4gICAgICAgIG5leHRMYW5lUHJpb3JpdHkgPSByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChwaW5nZWRMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgICAgICAgIG5leHRMYW5lcyA9IGdldEhpZ2hlc3RQcmlvcml0eUxhbmVzKHBpbmdlZExhbmVzKTtcbiAgICAgICAgICBuZXh0TGFuZVByaW9yaXR5ID0gcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAobmV4dExhbmVzID09PSBOb0xhbmVzKSB7XG4gICAgLy8gVGhpcyBzaG91bGQgb25seSBiZSByZWFjaGFibGUgaWYgd2UncmUgc3VzcGVuZGVkXG4gICAgLy8gVE9ETzogQ29uc2lkZXIgd2FybmluZyBpbiB0aGlzIHBhdGggaWYgYSBmYWxsYmFjayB0aW1lciBpcyBub3Qgc2NoZWR1bGVkLlxuICAgIHJldHVybiBOb0xhbmVzO1xuICB9IC8vIElmIHRoZXJlIGFyZSBoaWdoZXIgcHJpb3JpdHkgbGFuZXMsIHdlJ2xsIGluY2x1ZGUgdGhlbSBldmVuIGlmIHRoZXlcbiAgLy8gYXJlIHN1c3BlbmRlZC5cblxuXG4gIG5leHRMYW5lcyA9IHBlbmRpbmdMYW5lcyAmIGdldEVxdWFsT3JIaWdoZXJQcmlvcml0eUxhbmVzKG5leHRMYW5lcyk7IC8vIElmIHdlJ3JlIGFscmVhZHkgaW4gdGhlIG1pZGRsZSBvZiBhIHJlbmRlciwgc3dpdGNoaW5nIGxhbmVzIHdpbGwgaW50ZXJydXB0XG4gIC8vIGl0IGFuZCB3ZSdsbCBsb3NlIG91ciBwcm9ncmVzcy4gV2Ugc2hvdWxkIG9ubHkgZG8gdGhpcyBpZiB0aGUgbmV3IGxhbmVzIGFyZVxuICAvLyBoaWdoZXIgcHJpb3JpdHkuXG5cbiAgaWYgKHdpcExhbmVzICE9PSBOb0xhbmVzICYmIHdpcExhbmVzICE9PSBuZXh0TGFuZXMgJiYgLy8gSWYgd2UgYWxyZWFkeSBzdXNwZW5kZWQgd2l0aCBhIGRlbGF5LCB0aGVuIGludGVycnVwdGluZyBpcyBmaW5lLiBEb24ndFxuICAvLyBib3RoZXIgd2FpdGluZyB1bnRpbCB0aGUgcm9vdCBpcyBjb21wbGV0ZS5cbiAgKHdpcExhbmVzICYgc3VzcGVuZGVkTGFuZXMpID09PSBOb0xhbmVzKSB7XG4gICAgZ2V0SGlnaGVzdFByaW9yaXR5TGFuZXMod2lwTGFuZXMpO1xuICAgIHZhciB3aXBMYW5lUHJpb3JpdHkgPSByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eTtcblxuICAgIGlmIChuZXh0TGFuZVByaW9yaXR5IDw9IHdpcExhbmVQcmlvcml0eSkge1xuICAgICAgcmV0dXJuIHdpcExhbmVzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IG5leHRMYW5lUHJpb3JpdHk7XG4gICAgfVxuICB9IC8vIENoZWNrIGZvciBlbnRhbmdsZWQgbGFuZXMgYW5kIGFkZCB0aGVtIHRvIHRoZSBiYXRjaC5cbiAgLy9cbiAgLy8gQSBsYW5lIGlzIHNhaWQgdG8gYmUgZW50YW5nbGVkIHdpdGggYW5vdGhlciB3aGVuIGl0J3Mgbm90IGFsbG93ZWQgdG8gcmVuZGVyXG4gIC8vIGluIGEgYmF0Y2ggdGhhdCBkb2VzIG5vdCBhbHNvIGluY2x1ZGUgdGhlIG90aGVyIGxhbmUuIFR5cGljYWxseSB3ZSBkbyB0aGlzXG4gIC8vIHdoZW4gbXVsdGlwbGUgdXBkYXRlcyBoYXZlIHRoZSBzYW1lIHNvdXJjZSwgYW5kIHdlIG9ubHkgd2FudCB0byByZXNwb25kIHRvXG4gIC8vIHRoZSBtb3N0IHJlY2VudCBldmVudCBmcm9tIHRoYXQgc291cmNlLlxuICAvL1xuICAvLyBOb3RlIHRoYXQgd2UgYXBwbHkgZW50YW5nbGVtZW50cyAqYWZ0ZXIqIGNoZWNraW5nIGZvciBwYXJ0aWFsIHdvcmsgYWJvdmUuXG4gIC8vIFRoaXMgbWVhbnMgdGhhdCBpZiBhIGxhbmUgaXMgZW50YW5nbGVkIGR1cmluZyBhbiBpbnRlcmxlYXZlZCBldmVudCB3aGlsZVxuICAvLyBpdCdzIGFscmVhZHkgcmVuZGVyaW5nLCB3ZSB3b24ndCBpbnRlcnJ1cHQgaXQuIFRoaXMgaXMgaW50ZW50aW9uYWwsIHNpbmNlXG4gIC8vIGVudGFuZ2xlbWVudCBpcyB1c3VhbGx5IFwiYmVzdCBlZmZvcnRcIjogd2UnbGwgdHJ5IG91ciBiZXN0IHRvIHJlbmRlciB0aGVcbiAgLy8gbGFuZXMgaW4gdGhlIHNhbWUgYmF0Y2gsIGJ1dCBpdCdzIG5vdCB3b3J0aCB0aHJvd2luZyBvdXQgcGFydGlhbGx5XG4gIC8vIGNvbXBsZXRlZCB3b3JrIGluIG9yZGVyIHRvIGRvIGl0LlxuICAvL1xuICAvLyBGb3IgdGhvc2UgZXhjZXB0aW9ucyB3aGVyZSBlbnRhbmdsZW1lbnQgaXMgc2VtYW50aWNhbGx5IGltcG9ydGFudCwgbGlrZVxuICAvLyB1c2VNdXRhYmxlU291cmNlLCB3ZSBzaG91bGQgZW5zdXJlIHRoYXQgdGhlcmUgaXMgbm8gcGFydGlhbCB3b3JrIGF0IHRoZVxuICAvLyB0aW1lIHdlIGFwcGx5IHRoZSBlbnRhbmdsZW1lbnQuXG5cblxuICB2YXIgZW50YW5nbGVkTGFuZXMgPSByb290LmVudGFuZ2xlZExhbmVzO1xuXG4gIGlmIChlbnRhbmdsZWRMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgIHZhciBlbnRhbmdsZW1lbnRzID0gcm9vdC5lbnRhbmdsZW1lbnRzO1xuICAgIHZhciBsYW5lcyA9IG5leHRMYW5lcyAmIGVudGFuZ2xlZExhbmVzO1xuXG4gICAgd2hpbGUgKGxhbmVzID4gMCkge1xuICAgICAgdmFyIGluZGV4ID0gcGlja0FyYml0cmFyeUxhbmVJbmRleChsYW5lcyk7XG4gICAgICB2YXIgbGFuZSA9IDEgPDwgaW5kZXg7XG4gICAgICBuZXh0TGFuZXMgfD0gZW50YW5nbGVtZW50c1tpbmRleF07XG4gICAgICBsYW5lcyAmPSB+bGFuZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV4dExhbmVzO1xufVxuZnVuY3Rpb24gZ2V0TW9zdFJlY2VudEV2ZW50VGltZShyb290LCBsYW5lcykge1xuICB2YXIgZXZlbnRUaW1lcyA9IHJvb3QuZXZlbnRUaW1lcztcbiAgdmFyIG1vc3RSZWNlbnRFdmVudFRpbWUgPSBOb1RpbWVzdGFtcDtcblxuICB3aGlsZSAobGFuZXMgPiAwKSB7XG4gICAgdmFyIGluZGV4ID0gcGlja0FyYml0cmFyeUxhbmVJbmRleChsYW5lcyk7XG4gICAgdmFyIGxhbmUgPSAxIDw8IGluZGV4O1xuICAgIHZhciBldmVudFRpbWUgPSBldmVudFRpbWVzW2luZGV4XTtcblxuICAgIGlmIChldmVudFRpbWUgPiBtb3N0UmVjZW50RXZlbnRUaW1lKSB7XG4gICAgICBtb3N0UmVjZW50RXZlbnRUaW1lID0gZXZlbnRUaW1lO1xuICAgIH1cblxuICAgIGxhbmVzICY9IH5sYW5lO1xuICB9XG5cbiAgcmV0dXJuIG1vc3RSZWNlbnRFdmVudFRpbWU7XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVFeHBpcmF0aW9uVGltZShsYW5lLCBjdXJyZW50VGltZSkge1xuICAvLyBUT0RPOiBFeHBpcmF0aW9uIGhldXJpc3RpYyBpcyBjb25zdGFudCBwZXIgbGFuZSwgc28gY291bGQgdXNlIGEgbWFwLlxuICBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lcyhsYW5lKTtcbiAgdmFyIHByaW9yaXR5ID0gcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHk7XG5cbiAgaWYgKHByaW9yaXR5ID49IElucHV0Q29udGludW91c0xhbmVQcmlvcml0eSkge1xuICAgIC8vIFVzZXIgaW50ZXJhY3Rpb25zIHNob3VsZCBleHBpcmUgc2xpZ2h0bHkgbW9yZSBxdWlja2x5LlxuICAgIC8vXG4gICAgLy8gTk9URTogVGhpcyBpcyBzZXQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgY29uc3RhbnQgYXMgaW4gU2NoZWR1bGVyLmpzLiBXaGVuXG4gICAgLy8gd2UgbWFkZSBpdCBsYXJnZXIsIGEgcHJvZHVjdCBtZXRyaWMgaW4gd3d3IHJlZ3Jlc3NlZCwgc3VnZ2VzdGluZyB0aGVyZSdzXG4gICAgLy8gYSB1c2VyIGludGVyYWN0aW9uIHRoYXQncyBiZWluZyBzdGFydmVkIGJ5IGEgc2VyaWVzIG9mIHN5bmNocm9ub3VzXG4gICAgLy8gdXBkYXRlcy4gSWYgdGhhdCB0aGVvcnkgaXMgY29ycmVjdCwgdGhlIHByb3BlciBzb2x1dGlvbiBpcyB0byBmaXggdGhlXG4gICAgLy8gc3RhcnZhdGlvbi4gSG93ZXZlciwgdGhpcyBzY2VuYXJpbyBzdXBwb3J0cyB0aGUgaWRlYSB0aGF0IGV4cGlyYXRpb25cbiAgICAvLyB0aW1lcyBhcmUgYW4gaW1wb3J0YW50IHNhZmVndWFyZCB3aGVuIHN0YXJ2YXRpb24gZG9lcyBoYXBwZW4uXG4gICAgLy9cbiAgICAvLyBBbHNvIG5vdGUgdGhhdCwgaW4gdGhlIGNhc2Ugb2YgdXNlciBpbnB1dCBzcGVjaWZpY2FsbHksIHRoaXMgd2lsbCBzb29uIG5vXG4gICAgLy8gbG9uZ2VyIGJlIGFuIGlzc3VlIGJlY2F1c2Ugd2UgcGxhbiB0byBtYWtlIHVzZXIgaW5wdXQgc3luY2hyb25vdXMgYnlcbiAgICAvLyBkZWZhdWx0ICh1bnRpbCB5b3UgZW50ZXIgYHN0YXJ0VHJhbnNpdGlvbmAsIG9mIGNvdXJzZS4pXG4gICAgLy9cbiAgICAvLyBJZiB3ZXJlbid0IHBsYW5uaW5nIHRvIG1ha2UgdGhlc2UgdXBkYXRlcyBzeW5jaHJvbm91cyBzb29uIGFueXdheSwgSVxuICAgIC8vIHdvdWxkIHByb2JhYmx5IG1ha2UgdGhpcyBudW1iZXIgYSBjb25maWd1cmFibGUgcGFyYW1ldGVyLlxuICAgIHJldHVybiBjdXJyZW50VGltZSArIDI1MDtcbiAgfSBlbHNlIGlmIChwcmlvcml0eSA+PSBUcmFuc2l0aW9uUHJpb3JpdHkpIHtcbiAgICByZXR1cm4gY3VycmVudFRpbWUgKyA1MDAwO1xuICB9IGVsc2Uge1xuICAgIC8vIEFueXRoaW5nIGlkbGUgcHJpb3JpdHkgb3IgbG93ZXIgc2hvdWxkIG5ldmVyIGV4cGlyZS5cbiAgICByZXR1cm4gTm9UaW1lc3RhbXA7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFya1N0YXJ2ZWRMYW5lc0FzRXhwaXJlZChyb290LCBjdXJyZW50VGltZSkge1xuICAvLyBUT0RPOiBUaGlzIGdldHMgY2FsbGVkIGV2ZXJ5IHRpbWUgd2UgeWllbGQuIFdlIGNhbiBvcHRpbWl6ZSBieSBzdG9yaW5nXG4gIC8vIHRoZSBlYXJsaWVzdCBleHBpcmF0aW9uIHRpbWUgb24gdGhlIHJvb3QuIFRoZW4gdXNlIHRoYXQgdG8gcXVpY2tseSBiYWlsIG91dFxuICAvLyBvZiB0aGlzIGZ1bmN0aW9uLlxuICB2YXIgcGVuZGluZ0xhbmVzID0gcm9vdC5wZW5kaW5nTGFuZXM7XG4gIHZhciBzdXNwZW5kZWRMYW5lcyA9IHJvb3Quc3VzcGVuZGVkTGFuZXM7XG4gIHZhciBwaW5nZWRMYW5lcyA9IHJvb3QucGluZ2VkTGFuZXM7XG4gIHZhciBleHBpcmF0aW9uVGltZXMgPSByb290LmV4cGlyYXRpb25UaW1lczsgLy8gSXRlcmF0ZSB0aHJvdWdoIHRoZSBwZW5kaW5nIGxhbmVzIGFuZCBjaGVjayBpZiB3ZSd2ZSByZWFjaGVkIHRoZWlyXG4gIC8vIGV4cGlyYXRpb24gdGltZS4gSWYgc28sIHdlJ2xsIGFzc3VtZSB0aGUgdXBkYXRlIGlzIGJlaW5nIHN0YXJ2ZWQgYW5kIG1hcmtcbiAgLy8gaXQgYXMgZXhwaXJlZCB0byBmb3JjZSBpdCB0byBmaW5pc2guXG5cbiAgdmFyIGxhbmVzID0gcGVuZGluZ0xhbmVzO1xuXG4gIHdoaWxlIChsYW5lcyA+IDApIHtcbiAgICB2YXIgaW5kZXggPSBwaWNrQXJiaXRyYXJ5TGFuZUluZGV4KGxhbmVzKTtcbiAgICB2YXIgbGFuZSA9IDEgPDwgaW5kZXg7XG4gICAgdmFyIGV4cGlyYXRpb25UaW1lID0gZXhwaXJhdGlvblRpbWVzW2luZGV4XTtcblxuICAgIGlmIChleHBpcmF0aW9uVGltZSA9PT0gTm9UaW1lc3RhbXApIHtcbiAgICAgIC8vIEZvdW5kIGEgcGVuZGluZyBsYW5lIHdpdGggbm8gZXhwaXJhdGlvbiB0aW1lLiBJZiBpdCdzIG5vdCBzdXNwZW5kZWQsIG9yXG4gICAgICAvLyBpZiBpdCdzIHBpbmdlZCwgYXNzdW1lIGl0J3MgQ1BVLWJvdW5kLiBDb21wdXRlIGEgbmV3IGV4cGlyYXRpb24gdGltZVxuICAgICAgLy8gdXNpbmcgdGhlIGN1cnJlbnQgdGltZS5cbiAgICAgIGlmICgobGFuZSAmIHN1c3BlbmRlZExhbmVzKSA9PT0gTm9MYW5lcyB8fCAobGFuZSAmIHBpbmdlZExhbmVzKSAhPT0gTm9MYW5lcykge1xuICAgICAgICAvLyBBc3N1bWVzIHRpbWVzdGFtcHMgYXJlIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZy5cbiAgICAgICAgZXhwaXJhdGlvblRpbWVzW2luZGV4XSA9IGNvbXB1dGVFeHBpcmF0aW9uVGltZShsYW5lLCBjdXJyZW50VGltZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChleHBpcmF0aW9uVGltZSA8PSBjdXJyZW50VGltZSkge1xuICAgICAgLy8gVGhpcyBsYW5lIGV4cGlyZWRcbiAgICAgIHJvb3QuZXhwaXJlZExhbmVzIHw9IGxhbmU7XG4gICAgfVxuXG4gICAgbGFuZXMgJj0gfmxhbmU7XG4gIH1cbn0gLy8gVGhpcyByZXR1cm5zIHRoZSBoaWdoZXN0IHByaW9yaXR5IHBlbmRpbmcgbGFuZXMgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZXlcbmZ1bmN0aW9uIGdldExhbmVzVG9SZXRyeVN5bmNocm9ub3VzbHlPbkVycm9yKHJvb3QpIHtcbiAgdmFyIGV2ZXJ5dGhpbmdCdXRPZmZzY3JlZW4gPSByb290LnBlbmRpbmdMYW5lcyAmIH5PZmZzY3JlZW5MYW5lO1xuXG4gIGlmIChldmVyeXRoaW5nQnV0T2Zmc2NyZWVuICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuIGV2ZXJ5dGhpbmdCdXRPZmZzY3JlZW47XG4gIH1cblxuICBpZiAoZXZlcnl0aGluZ0J1dE9mZnNjcmVlbiAmIE9mZnNjcmVlbkxhbmUpIHtcbiAgICByZXR1cm4gT2Zmc2NyZWVuTGFuZTtcbiAgfVxuXG4gIHJldHVybiBOb0xhbmVzO1xufVxuZnVuY3Rpb24gcmV0dXJuTmV4dExhbmVzUHJpb3JpdHkoKSB7XG4gIHJldHVybiByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eTtcbn1cbmZ1bmN0aW9uIGluY2x1ZGVzTm9uSWRsZVdvcmsobGFuZXMpIHtcbiAgcmV0dXJuIChsYW5lcyAmIE5vbklkbGVMYW5lcykgIT09IE5vTGFuZXM7XG59XG5mdW5jdGlvbiBpbmNsdWRlc09ubHlSZXRyaWVzKGxhbmVzKSB7XG4gIHJldHVybiAobGFuZXMgJiBSZXRyeUxhbmVzKSA9PT0gbGFuZXM7XG59XG5mdW5jdGlvbiBpbmNsdWRlc09ubHlUcmFuc2l0aW9ucyhsYW5lcykge1xuICByZXR1cm4gKGxhbmVzICYgVHJhbnNpdGlvbkxhbmVzKSA9PT0gbGFuZXM7XG59IC8vIFRvIGVuc3VyZSBjb25zaXN0ZW5jeSBhY3Jvc3MgbXVsdGlwbGUgdXBkYXRlcyBpbiB0aGUgc2FtZSBldmVudCwgdGhpcyBzaG91bGRcbi8vIGJlIGEgcHVyZSBmdW5jdGlvbiwgc28gdGhhdCBpdCBhbHdheXMgcmV0dXJucyB0aGUgc2FtZSBsYW5lIGZvciBnaXZlbiBpbnB1dHMuXG5cbmZ1bmN0aW9uIGZpbmRVcGRhdGVMYW5lKGxhbmVQcmlvcml0eSwgd2lwTGFuZXMpIHtcbiAgc3dpdGNoIChsYW5lUHJpb3JpdHkpIHtcbiAgICBjYXNlIE5vTGFuZVByaW9yaXR5OlxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFN5bmNMYW5lUHJpb3JpdHk6XG4gICAgICByZXR1cm4gU3luY0xhbmU7XG5cbiAgICBjYXNlIFN5bmNCYXRjaGVkTGFuZVByaW9yaXR5OlxuICAgICAgcmV0dXJuIFN5bmNCYXRjaGVkTGFuZTtcblxuICAgIGNhc2UgSW5wdXREaXNjcmV0ZUxhbmVQcmlvcml0eTpcbiAgICAgIHtcbiAgICAgICAgdmFyIF9sYW5lID0gcGlja0FyYml0cmFyeUxhbmUoSW5wdXREaXNjcmV0ZUxhbmVzICYgfndpcExhbmVzKTtcblxuICAgICAgICBpZiAoX2xhbmUgPT09IE5vTGFuZSkge1xuICAgICAgICAgIC8vIFNoaWZ0IHRvIHRoZSBuZXh0IHByaW9yaXR5IGxldmVsXG4gICAgICAgICAgcmV0dXJuIGZpbmRVcGRhdGVMYW5lKElucHV0Q29udGludW91c0xhbmVQcmlvcml0eSwgd2lwTGFuZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIF9sYW5lO1xuICAgICAgfVxuXG4gICAgY2FzZSBJbnB1dENvbnRpbnVvdXNMYW5lUHJpb3JpdHk6XG4gICAgICB7XG4gICAgICAgIHZhciBfbGFuZTIgPSBwaWNrQXJiaXRyYXJ5TGFuZShJbnB1dENvbnRpbnVvdXNMYW5lcyAmIH53aXBMYW5lcyk7XG5cbiAgICAgICAgaWYgKF9sYW5lMiA9PT0gTm9MYW5lKSB7XG4gICAgICAgICAgLy8gU2hpZnQgdG8gdGhlIG5leHQgcHJpb3JpdHkgbGV2ZWxcbiAgICAgICAgICByZXR1cm4gZmluZFVwZGF0ZUxhbmUoRGVmYXVsdExhbmVQcmlvcml0eSwgd2lwTGFuZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIF9sYW5lMjtcbiAgICAgIH1cblxuICAgIGNhc2UgRGVmYXVsdExhbmVQcmlvcml0eTpcbiAgICAgIHtcbiAgICAgICAgdmFyIF9sYW5lMyA9IHBpY2tBcmJpdHJhcnlMYW5lKERlZmF1bHRMYW5lcyAmIH53aXBMYW5lcyk7XG5cbiAgICAgICAgaWYgKF9sYW5lMyA9PT0gTm9MYW5lKSB7XG4gICAgICAgICAgLy8gSWYgYWxsIHRoZSBkZWZhdWx0IGxhbmVzIGFyZSBhbHJlYWR5IGJlaW5nIHdvcmtlZCBvbiwgbG9vayBmb3IgYVxuICAgICAgICAgIC8vIGxhbmUgaW4gdGhlIHRyYW5zaXRpb24gcmFuZ2UuXG4gICAgICAgICAgX2xhbmUzID0gcGlja0FyYml0cmFyeUxhbmUoVHJhbnNpdGlvbkxhbmVzICYgfndpcExhbmVzKTtcblxuICAgICAgICAgIGlmIChfbGFuZTMgPT09IE5vTGFuZSkge1xuICAgICAgICAgICAgLy8gQWxsIHRoZSB0cmFuc2l0aW9uIGxhbmVzIGFyZSB0YWtlbiwgdG9vLiBUaGlzIHNob3VsZCBiZSB2ZXJ5XG4gICAgICAgICAgICAvLyByYXJlLCBidXQgYXMgYSBsYXN0IHJlc29ydCwgcGljayBhIGRlZmF1bHQgbGFuZS4gVGhpcyB3aWxsIGhhdmVcbiAgICAgICAgICAgIC8vIHRoZSBlZmZlY3Qgb2YgaW50ZXJydXB0aW5nIHRoZSBjdXJyZW50IHdvcmstaW4tcHJvZ3Jlc3MgcmVuZGVyLlxuICAgICAgICAgICAgX2xhbmUzID0gcGlja0FyYml0cmFyeUxhbmUoRGVmYXVsdExhbmVzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gX2xhbmUzO1xuICAgICAgfVxuXG4gICAgY2FzZSBUcmFuc2l0aW9uUHJpb3JpdHk6IC8vIFNob3VsZCBiZSBoYW5kbGVkIGJ5IGZpbmRUcmFuc2l0aW9uTGFuZSBpbnN0ZWFkXG5cbiAgICBjYXNlIFJldHJ5TGFuZVByaW9yaXR5OlxuICAgICAgLy8gU2hvdWxkIGJlIGhhbmRsZWQgYnkgZmluZFJldHJ5TGFuZSBpbnN0ZWFkXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgSWRsZUxhbmVQcmlvcml0eTpcbiAgICAgIHZhciBsYW5lID0gcGlja0FyYml0cmFyeUxhbmUoSWRsZUxhbmVzICYgfndpcExhbmVzKTtcblxuICAgICAgaWYgKGxhbmUgPT09IE5vTGFuZSkge1xuICAgICAgICBsYW5lID0gcGlja0FyYml0cmFyeUxhbmUoSWRsZUxhbmVzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGxhbmU7XG4gIH1cblxuICB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiSW52YWxpZCB1cGRhdGUgcHJpb3JpdHk6IFwiICsgbGFuZVByaW9yaXR5ICsgXCIuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuXCIgKTtcbiAgICB9XG4gIH1cbn0gLy8gVG8gZW5zdXJlIGNvbnNpc3RlbmN5IGFjcm9zcyBtdWx0aXBsZSB1cGRhdGVzIGluIHRoZSBzYW1lIGV2ZW50LCB0aGlzIHNob3VsZFxuLy8gYmUgcHVyZSBmdW5jdGlvbiwgc28gdGhhdCBpdCBhbHdheXMgcmV0dXJucyB0aGUgc2FtZSBsYW5lIGZvciBnaXZlbiBpbnB1dHMuXG5cbmZ1bmN0aW9uIGZpbmRUcmFuc2l0aW9uTGFuZSh3aXBMYW5lcywgcGVuZGluZ0xhbmVzKSB7XG4gIC8vIEZpcnN0IGxvb2sgZm9yIGxhbmVzIHRoYXQgYXJlIGNvbXBsZXRlbHkgdW5jbGFpbWVkLCBpLmUuIGhhdmUgbm9cbiAgLy8gcGVuZGluZyB3b3JrLlxuICB2YXIgbGFuZSA9IHBpY2tBcmJpdHJhcnlMYW5lKFRyYW5zaXRpb25MYW5lcyAmIH5wZW5kaW5nTGFuZXMpO1xuXG4gIGlmIChsYW5lID09PSBOb0xhbmUpIHtcbiAgICAvLyBJZiBhbGwgbGFuZXMgaGF2ZSBwZW5kaW5nIHdvcmssIGxvb2sgZm9yIGEgbGFuZSB0aGF0IGlzbid0IGN1cnJlbnRseVxuICAgIC8vIGJlaW5nIHdvcmtlZCBvbi5cbiAgICBsYW5lID0gcGlja0FyYml0cmFyeUxhbmUoVHJhbnNpdGlvbkxhbmVzICYgfndpcExhbmVzKTtcblxuICAgIGlmIChsYW5lID09PSBOb0xhbmUpIHtcbiAgICAgIC8vIElmIGV2ZXJ5dGhpbmcgaXMgYmVpbmcgd29ya2VkIG9uLCBwaWNrIGFueSBsYW5lLiBUaGlzIGhhcyB0aGVcbiAgICAgIC8vIGVmZmVjdCBvZiBpbnRlcnJ1cHRpbmcgdGhlIGN1cnJlbnQgd29yay1pbi1wcm9ncmVzcy5cbiAgICAgIGxhbmUgPSBwaWNrQXJiaXRyYXJ5TGFuZShUcmFuc2l0aW9uTGFuZXMpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBsYW5lO1xufSAvLyBUbyBlbnN1cmUgY29uc2lzdGVuY3kgYWNyb3NzIG11bHRpcGxlIHVwZGF0ZXMgaW4gdGhlIHNhbWUgZXZlbnQsIHRoaXMgc2hvdWxkXG4vLyBiZSBwdXJlIGZ1bmN0aW9uLCBzbyB0aGF0IGl0IGFsd2F5cyByZXR1cm5zIHRoZSBzYW1lIGxhbmUgZm9yIGdpdmVuIGlucHV0cy5cblxuZnVuY3Rpb24gZmluZFJldHJ5TGFuZSh3aXBMYW5lcykge1xuICAvLyBUaGlzIGlzIGEgZm9yayBvZiBgZmluZFVwZGF0ZUxhbmVgIGRlc2lnbmVkIHNwZWNpZmljYWxseSBmb3IgU3VzcGVuc2VcbiAgLy8gXCJyZXRyaWVzXCIgXHUyMDE0IGEgc3BlY2lhbCB1cGRhdGUgdGhhdCBhdHRlbXB0cyB0byBmbGlwIGEgU3VzcGVuc2UgYm91bmRhcnlcbiAgLy8gZnJvbSBpdHMgcGxhY2Vob2xkZXIgc3RhdGUgdG8gaXRzIHByaW1hcnkvcmVzb2x2ZWQgc3RhdGUuXG4gIHZhciBsYW5lID0gcGlja0FyYml0cmFyeUxhbmUoUmV0cnlMYW5lcyAmIH53aXBMYW5lcyk7XG5cbiAgaWYgKGxhbmUgPT09IE5vTGFuZSkge1xuICAgIGxhbmUgPSBwaWNrQXJiaXRyYXJ5TGFuZShSZXRyeUxhbmVzKTtcbiAgfVxuXG4gIHJldHVybiBsYW5lO1xufVxuXG5mdW5jdGlvbiBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lKGxhbmVzKSB7XG4gIHJldHVybiBsYW5lcyAmIC1sYW5lcztcbn1cblxuZnVuY3Rpb24gZ2V0TG93ZXN0UHJpb3JpdHlMYW5lKGxhbmVzKSB7XG4gIC8vIFRoaXMgZmluZHMgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgbm9uLXplcm8gYml0LlxuICB2YXIgaW5kZXggPSAzMSAtIGNsejMyKGxhbmVzKTtcbiAgcmV0dXJuIGluZGV4IDwgMCA/IE5vTGFuZXMgOiAxIDw8IGluZGV4O1xufVxuXG5mdW5jdGlvbiBnZXRFcXVhbE9ySGlnaGVyUHJpb3JpdHlMYW5lcyhsYW5lcykge1xuICByZXR1cm4gKGdldExvd2VzdFByaW9yaXR5TGFuZShsYW5lcykgPDwgMSkgLSAxO1xufVxuXG5mdW5jdGlvbiBwaWNrQXJiaXRyYXJ5TGFuZShsYW5lcykge1xuICAvLyBUaGlzIHdyYXBwZXIgZnVuY3Rpb24gZ2V0cyBpbmxpbmVkLiBPbmx5IGV4aXN0cyBzbyB0byBjb21tdW5pY2F0ZSB0aGF0IGl0XG4gIC8vIGRvZXNuJ3QgbWF0dGVyIHdoaWNoIGJpdCBpcyBzZWxlY3RlZDsgeW91IGNhbiBwaWNrIGFueSBiaXQgd2l0aG91dFxuICAvLyBhZmZlY3RpbmcgdGhlIGFsZ29yaXRobXMgd2hlcmUgaXRzIHVzZWQuIEhlcmUgSSdtIHVzaW5nXG4gIC8vIGdldEhpZ2hlc3RQcmlvcml0eUxhbmUgYmVjYXVzZSBpdCByZXF1aXJlcyB0aGUgZmV3ZXN0IG9wZXJhdGlvbnMuXG4gIHJldHVybiBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lKGxhbmVzKTtcbn1cblxuZnVuY3Rpb24gcGlja0FyYml0cmFyeUxhbmVJbmRleChsYW5lcykge1xuICByZXR1cm4gMzEgLSBjbHozMihsYW5lcyk7XG59XG5cbmZ1bmN0aW9uIGxhbmVUb0luZGV4KGxhbmUpIHtcbiAgcmV0dXJuIHBpY2tBcmJpdHJhcnlMYW5lSW5kZXgobGFuZSk7XG59XG5cbmZ1bmN0aW9uIGluY2x1ZGVzU29tZUxhbmUoYSwgYikge1xuICByZXR1cm4gKGEgJiBiKSAhPT0gTm9MYW5lcztcbn1cbmZ1bmN0aW9uIGlzU3Vic2V0T2ZMYW5lcyhzZXQsIHN1YnNldCkge1xuICByZXR1cm4gKHNldCAmIHN1YnNldCkgPT09IHN1YnNldDtcbn1cbmZ1bmN0aW9uIG1lcmdlTGFuZXMoYSwgYikge1xuICByZXR1cm4gYSB8IGI7XG59XG5mdW5jdGlvbiByZW1vdmVMYW5lcyhzZXQsIHN1YnNldCkge1xuICByZXR1cm4gc2V0ICYgfnN1YnNldDtcbn0gLy8gU2VlbXMgcmVkdW5kYW50LCBidXQgaXQgY2hhbmdlcyB0aGUgdHlwZSBmcm9tIGEgc2luZ2xlIGxhbmUgKHVzZWQgZm9yXG4vLyB1cGRhdGVzKSB0byBhIGdyb3VwIG9mIGxhbmVzICh1c2VkIGZvciBmbHVzaGluZyB3b3JrKS5cblxuZnVuY3Rpb24gbGFuZVRvTGFuZXMobGFuZSkge1xuICByZXR1cm4gbGFuZTtcbn1cbmZ1bmN0aW9uIGhpZ2hlclByaW9yaXR5TGFuZShhLCBiKSB7XG4gIC8vIFRoaXMgd29ya3MgYmVjYXVzZSB0aGUgYml0IHJhbmdlcyBkZWNyZWFzZSBpbiBwcmlvcml0eSBhcyB5b3UgZ28gbGVmdC5cbiAgcmV0dXJuIGEgIT09IE5vTGFuZSAmJiBhIDwgYiA/IGEgOiBiO1xufVxuZnVuY3Rpb24gY3JlYXRlTGFuZU1hcChpbml0aWFsKSB7XG4gIC8vIEludGVudGlvbmFsbHkgcHVzaGluZyBvbmUgYnkgb25lLlxuICAvLyBodHRwczovL3Y4LmRldi9ibG9nL2VsZW1lbnRzLWtpbmRzI2F2b2lkLWNyZWF0aW5nLWhvbGVzXG4gIHZhciBsYW5lTWFwID0gW107XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBUb3RhbExhbmVzOyBpKyspIHtcbiAgICBsYW5lTWFwLnB1c2goaW5pdGlhbCk7XG4gIH1cblxuICByZXR1cm4gbGFuZU1hcDtcbn1cbmZ1bmN0aW9uIG1hcmtSb290VXBkYXRlZChyb290LCB1cGRhdGVMYW5lLCBldmVudFRpbWUpIHtcbiAgcm9vdC5wZW5kaW5nTGFuZXMgfD0gdXBkYXRlTGFuZTsgLy8gVE9ETzogVGhlb3JldGljYWxseSwgYW55IHVwZGF0ZSB0byBhbnkgbGFuZSBjYW4gdW5ibG9jayBhbnkgb3RoZXIgbGFuZS4gQnV0XG4gIC8vIGl0J3Mgbm90IHByYWN0aWNhbCB0byB0cnkgZXZlcnkgc2luZ2xlIHBvc3NpYmxlIGNvbWJpbmF0aW9uLiBXZSBuZWVkIGFcbiAgLy8gaGV1cmlzdGljIHRvIGRlY2lkZSB3aGljaCBsYW5lcyB0byBhdHRlbXB0IHRvIHJlbmRlciwgYW5kIGluIHdoaWNoIGJhdGNoZXMuXG4gIC8vIEZvciBub3csIHdlIHVzZSB0aGUgc2FtZSBoZXVyaXN0aWMgYXMgaW4gdGhlIG9sZCBFeHBpcmF0aW9uVGltZXMgbW9kZWw6XG4gIC8vIHJldHJ5IGFueSBsYW5lIGF0IGVxdWFsIG9yIGxvd2VyIHByaW9yaXR5LCBidXQgZG9uJ3QgdHJ5IHVwZGF0ZXMgYXQgaGlnaGVyXG4gIC8vIHByaW9yaXR5IHdpdGhvdXQgYWxzbyBpbmNsdWRpbmcgdGhlIGxvd2VyIHByaW9yaXR5IHVwZGF0ZXMuIFRoaXMgd29ya3Mgd2VsbFxuICAvLyB3aGVuIGNvbnNpZGVyaW5nIHVwZGF0ZXMgYWNyb3NzIGRpZmZlcmVudCBwcmlvcml0eSBsZXZlbHMsIGJ1dCBpc24ndFxuICAvLyBzdWZmaWNpZW50IGZvciB1cGRhdGVzIHdpdGhpbiB0aGUgc2FtZSBwcmlvcml0eSwgc2luY2Ugd2Ugd2FudCB0byB0cmVhdFxuICAvLyB0aG9zZSB1cGRhdGVzIGFzIHBhcmFsbGVsLlxuICAvLyBVbnN1c3BlbmQgYW55IHVwZGF0ZSBhdCBlcXVhbCBvciBsb3dlciBwcmlvcml0eS5cblxuICB2YXIgaGlnaGVyUHJpb3JpdHlMYW5lcyA9IHVwZGF0ZUxhbmUgLSAxOyAvLyBUdXJucyAwYjEwMDAgaW50byAwYjAxMTFcblxuICByb290LnN1c3BlbmRlZExhbmVzICY9IGhpZ2hlclByaW9yaXR5TGFuZXM7XG4gIHJvb3QucGluZ2VkTGFuZXMgJj0gaGlnaGVyUHJpb3JpdHlMYW5lcztcbiAgdmFyIGV2ZW50VGltZXMgPSByb290LmV2ZW50VGltZXM7XG4gIHZhciBpbmRleCA9IGxhbmVUb0luZGV4KHVwZGF0ZUxhbmUpOyAvLyBXZSBjYW4gYWx3YXlzIG92ZXJ3cml0ZSBhbiBleGlzdGluZyB0aW1lc3RhbXAgYmVjYXVzZSB3ZSBwcmVmZXIgdGhlIG1vc3RcbiAgLy8gcmVjZW50IGV2ZW50LCBhbmQgd2UgYXNzdW1lIHRpbWUgaXMgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nLlxuXG4gIGV2ZW50VGltZXNbaW5kZXhdID0gZXZlbnRUaW1lO1xufVxuZnVuY3Rpb24gbWFya1Jvb3RTdXNwZW5kZWQocm9vdCwgc3VzcGVuZGVkTGFuZXMpIHtcbiAgcm9vdC5zdXNwZW5kZWRMYW5lcyB8PSBzdXNwZW5kZWRMYW5lcztcbiAgcm9vdC5waW5nZWRMYW5lcyAmPSB+c3VzcGVuZGVkTGFuZXM7IC8vIFRoZSBzdXNwZW5kZWQgbGFuZXMgYXJlIG5vIGxvbmdlciBDUFUtYm91bmQuIENsZWFyIHRoZWlyIGV4cGlyYXRpb24gdGltZXMuXG5cbiAgdmFyIGV4cGlyYXRpb25UaW1lcyA9IHJvb3QuZXhwaXJhdGlvblRpbWVzO1xuICB2YXIgbGFuZXMgPSBzdXNwZW5kZWRMYW5lcztcblxuICB3aGlsZSAobGFuZXMgPiAwKSB7XG4gICAgdmFyIGluZGV4ID0gcGlja0FyYml0cmFyeUxhbmVJbmRleChsYW5lcyk7XG4gICAgdmFyIGxhbmUgPSAxIDw8IGluZGV4O1xuICAgIGV4cGlyYXRpb25UaW1lc1tpbmRleF0gPSBOb1RpbWVzdGFtcDtcbiAgICBsYW5lcyAmPSB+bGFuZTtcbiAgfVxufVxuZnVuY3Rpb24gbWFya1Jvb3RQaW5nZWQocm9vdCwgcGluZ2VkTGFuZXMsIGV2ZW50VGltZSkge1xuICByb290LnBpbmdlZExhbmVzIHw9IHJvb3Quc3VzcGVuZGVkTGFuZXMgJiBwaW5nZWRMYW5lcztcbn1cbmZ1bmN0aW9uIG1hcmtEaXNjcmV0ZVVwZGF0ZXNFeHBpcmVkKHJvb3QpIHtcbiAgcm9vdC5leHBpcmVkTGFuZXMgfD0gSW5wdXREaXNjcmV0ZUxhbmVzICYgcm9vdC5wZW5kaW5nTGFuZXM7XG59XG5mdW5jdGlvbiBoYXNEaXNjcmV0ZUxhbmVzKGxhbmVzKSB7XG4gIHJldHVybiAobGFuZXMgJiBJbnB1dERpc2NyZXRlTGFuZXMpICE9PSBOb0xhbmVzO1xufVxuZnVuY3Rpb24gbWFya1Jvb3RNdXRhYmxlUmVhZChyb290LCB1cGRhdGVMYW5lKSB7XG4gIHJvb3QubXV0YWJsZVJlYWRMYW5lcyB8PSB1cGRhdGVMYW5lICYgcm9vdC5wZW5kaW5nTGFuZXM7XG59XG5mdW5jdGlvbiBtYXJrUm9vdEZpbmlzaGVkKHJvb3QsIHJlbWFpbmluZ0xhbmVzKSB7XG4gIHZhciBub0xvbmdlclBlbmRpbmdMYW5lcyA9IHJvb3QucGVuZGluZ0xhbmVzICYgfnJlbWFpbmluZ0xhbmVzO1xuICByb290LnBlbmRpbmdMYW5lcyA9IHJlbWFpbmluZ0xhbmVzOyAvLyBMZXQncyB0cnkgZXZlcnl0aGluZyBhZ2FpblxuXG4gIHJvb3Quc3VzcGVuZGVkTGFuZXMgPSAwO1xuICByb290LnBpbmdlZExhbmVzID0gMDtcbiAgcm9vdC5leHBpcmVkTGFuZXMgJj0gcmVtYWluaW5nTGFuZXM7XG4gIHJvb3QubXV0YWJsZVJlYWRMYW5lcyAmPSByZW1haW5pbmdMYW5lcztcbiAgcm9vdC5lbnRhbmdsZWRMYW5lcyAmPSByZW1haW5pbmdMYW5lcztcbiAgdmFyIGVudGFuZ2xlbWVudHMgPSByb290LmVudGFuZ2xlbWVudHM7XG4gIHZhciBldmVudFRpbWVzID0gcm9vdC5ldmVudFRpbWVzO1xuICB2YXIgZXhwaXJhdGlvblRpbWVzID0gcm9vdC5leHBpcmF0aW9uVGltZXM7IC8vIENsZWFyIHRoZSBsYW5lcyB0aGF0IG5vIGxvbmdlciBoYXZlIHBlbmRpbmcgd29ya1xuXG4gIHZhciBsYW5lcyA9IG5vTG9uZ2VyUGVuZGluZ0xhbmVzO1xuXG4gIHdoaWxlIChsYW5lcyA+IDApIHtcbiAgICB2YXIgaW5kZXggPSBwaWNrQXJiaXRyYXJ5TGFuZUluZGV4KGxhbmVzKTtcbiAgICB2YXIgbGFuZSA9IDEgPDwgaW5kZXg7XG4gICAgZW50YW5nbGVtZW50c1tpbmRleF0gPSBOb0xhbmVzO1xuICAgIGV2ZW50VGltZXNbaW5kZXhdID0gTm9UaW1lc3RhbXA7XG4gICAgZXhwaXJhdGlvblRpbWVzW2luZGV4XSA9IE5vVGltZXN0YW1wO1xuICAgIGxhbmVzICY9IH5sYW5lO1xuICB9XG59XG5mdW5jdGlvbiBtYXJrUm9vdEVudGFuZ2xlZChyb290LCBlbnRhbmdsZWRMYW5lcykge1xuICByb290LmVudGFuZ2xlZExhbmVzIHw9IGVudGFuZ2xlZExhbmVzO1xuICB2YXIgZW50YW5nbGVtZW50cyA9IHJvb3QuZW50YW5nbGVtZW50cztcbiAgdmFyIGxhbmVzID0gZW50YW5nbGVkTGFuZXM7XG5cbiAgd2hpbGUgKGxhbmVzID4gMCkge1xuICAgIHZhciBpbmRleCA9IHBpY2tBcmJpdHJhcnlMYW5lSW5kZXgobGFuZXMpO1xuICAgIHZhciBsYW5lID0gMSA8PCBpbmRleDtcbiAgICBlbnRhbmdsZW1lbnRzW2luZGV4XSB8PSBlbnRhbmdsZWRMYW5lcztcbiAgICBsYW5lcyAmPSB+bGFuZTtcbiAgfVxufVxudmFyIGNsejMyID0gTWF0aC5jbHozMiA/IE1hdGguY2x6MzIgOiBjbHozMkZhbGxiYWNrOyAvLyBDb3VudCBsZWFkaW5nIHplcm9zLiBPbmx5IHVzZWQgb24gbGFuZXMsIHNvIGFzc3VtZSBpbnB1dCBpcyBhbiBpbnRlZ2VyLlxuLy8gQmFzZWQgb246XG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9NYXRoL2NsejMyXG5cbnZhciBsb2cgPSBNYXRoLmxvZztcbnZhciBMTjIgPSBNYXRoLkxOMjtcblxuZnVuY3Rpb24gY2x6MzJGYWxsYmFjayhsYW5lcykge1xuICBpZiAobGFuZXMgPT09IDApIHtcbiAgICByZXR1cm4gMzI7XG4gIH1cblxuICByZXR1cm4gMzEgLSAobG9nKGxhbmVzKSAvIExOMiB8IDApIHwgMDtcbn1cblxuLy8gSW50ZW50aW9uYWxseSBub3QgbmFtZWQgaW1wb3J0cyBiZWNhdXNlIFJvbGx1cCB3b3VsZCB1c2UgZHluYW1pYyBkaXNwYXRjaCBmb3JcbnZhciBVc2VyQmxvY2tpbmdQcmlvcml0eSQxID0gU2NoZWR1bGVyLnVuc3RhYmxlX1VzZXJCbG9ja2luZ1ByaW9yaXR5LFxuICAgIHJ1bldpdGhQcmlvcml0eSA9IFNjaGVkdWxlci51bnN0YWJsZV9ydW5XaXRoUHJpb3JpdHk7IC8vIFRPRE86IGNhbiB3ZSBzdG9wIGV4cG9ydGluZyB0aGVzZT9cblxudmFyIF9lbmFibGVkID0gdHJ1ZTsgLy8gVGhpcyBpcyBleHBvcnRlZCBpbiBGQiBidWlsZHMgZm9yIHVzZSBieSBsZWdhY3kgRkIgbGF5ZXIgaW5mcmEuXG4vLyBXZSdkIGxpa2UgdG8gcmVtb3ZlIHRoaXMgYnV0IGl0J3Mgbm90IGNsZWFyIGlmIHRoaXMgaXMgc2FmZS5cblxuZnVuY3Rpb24gc2V0RW5hYmxlZChlbmFibGVkKSB7XG4gIF9lbmFibGVkID0gISFlbmFibGVkO1xufVxuZnVuY3Rpb24gaXNFbmFibGVkKCkge1xuICByZXR1cm4gX2VuYWJsZWQ7XG59XG5mdW5jdGlvbiBjcmVhdGVFdmVudExpc3RlbmVyV3JhcHBlcldpdGhQcmlvcml0eSh0YXJnZXRDb250YWluZXIsIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncykge1xuICB2YXIgZXZlbnRQcmlvcml0eSA9IGdldEV2ZW50UHJpb3JpdHlGb3JQbHVnaW5TeXN0ZW0oZG9tRXZlbnROYW1lKTtcbiAgdmFyIGxpc3RlbmVyV3JhcHBlcjtcblxuICBzd2l0Y2ggKGV2ZW50UHJpb3JpdHkpIHtcbiAgICBjYXNlIERpc2NyZXRlRXZlbnQ6XG4gICAgICBsaXN0ZW5lcldyYXBwZXIgPSBkaXNwYXRjaERpc2NyZXRlRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgVXNlckJsb2NraW5nRXZlbnQ6XG4gICAgICBsaXN0ZW5lcldyYXBwZXIgPSBkaXNwYXRjaFVzZXJCbG9ja2luZ1VwZGF0ZTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBDb250aW51b3VzRXZlbnQ6XG4gICAgZGVmYXVsdDpcbiAgICAgIGxpc3RlbmVyV3JhcHBlciA9IGRpc3BhdGNoRXZlbnQ7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiBsaXN0ZW5lcldyYXBwZXIuYmluZChudWxsLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lcik7XG59XG5cbmZ1bmN0aW9uIGRpc3BhdGNoRGlzY3JldGVFdmVudChkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIGNvbnRhaW5lciwgbmF0aXZlRXZlbnQpIHtcbiAge1xuICAgIGZsdXNoRGlzY3JldGVVcGRhdGVzSWZOZWVkZWQobmF0aXZlRXZlbnQudGltZVN0YW1wKTtcbiAgfVxuXG4gIGRpc2NyZXRlVXBkYXRlcyhkaXNwYXRjaEV2ZW50LCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIGNvbnRhaW5lciwgbmF0aXZlRXZlbnQpO1xufVxuXG5mdW5jdGlvbiBkaXNwYXRjaFVzZXJCbG9ja2luZ1VwZGF0ZShkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIGNvbnRhaW5lciwgbmF0aXZlRXZlbnQpIHtcbiAge1xuICAgIHJ1bldpdGhQcmlvcml0eShVc2VyQmxvY2tpbmdQcmlvcml0eSQxLCBkaXNwYXRjaEV2ZW50LmJpbmQobnVsbCwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCBjb250YWluZXIsIG5hdGl2ZUV2ZW50KSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGlzcGF0Y2hFdmVudChkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmF0aXZlRXZlbnQpIHtcbiAgaWYgKCFfZW5hYmxlZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBhbGxvd1JlcGxheSA9IHRydWU7XG5cbiAge1xuICAgIC8vIFRPRE86IHJlcGxheWluZyBjYXB0dXJlIHBoYXNlIGV2ZW50cyBpcyBjdXJyZW50bHkgYnJva2VuXG4gICAgLy8gYmVjYXVzZSB3ZSB1c2VkIHRvIGRvIGl0IGR1cmluZyB0b3AtbGV2ZWwgbmF0aXZlIGJ1YmJsZSBoYW5kbGVyc1xuICAgIC8vIGJ1dCBub3cgd2UgdXNlIGRpZmZlcmVudCBidWJibGUgYW5kIGNhcHR1cmUgaGFuZGxlcnMuXG4gICAgLy8gSW4gZWFnZXIgbW9kZSwgd2UgYXR0YWNoIGNhcHR1cmUgbGlzdGVuZXJzIGVhcmx5LCBzbyB3ZSBuZWVkXG4gICAgLy8gdG8gZmlsdGVyIHRoZW0gb3V0IHVudGlsIHdlIGZpeCB0aGUgbG9naWMgdG8gaGFuZGxlIHRoZW0gY29ycmVjdGx5LlxuICAgIC8vIFRoaXMgY291bGQndmUgYmVlbiBvdXRzaWRlIHRoZSBmbGFnIGJ1dCBJIHB1dCBpdCBpbnNpZGUgdG8gcmVkdWNlIHJpc2suXG4gICAgYWxsb3dSZXBsYXkgPSAoZXZlbnRTeXN0ZW1GbGFncyAmIElTX0NBUFRVUkVfUEhBU0UpID09PSAwO1xuICB9XG5cbiAgaWYgKGFsbG93UmVwbGF5ICYmIGhhc1F1ZXVlZERpc2NyZXRlRXZlbnRzKCkgJiYgaXNSZXBsYXlhYmxlRGlzY3JldGVFdmVudChkb21FdmVudE5hbWUpKSB7XG4gICAgLy8gSWYgd2UgYWxyZWFkeSBoYXZlIGEgcXVldWUgb2YgZGlzY3JldGUgZXZlbnRzLCBhbmQgdGhpcyBpcyBhbm90aGVyIGRpc2NyZXRlXG4gICAgLy8gZXZlbnQsIHRoZW4gd2UgY2FuJ3QgZGlzcGF0Y2ggaXQgcmVnYXJkbGVzcyBvZiBpdHMgdGFyZ2V0LCBzaW5jZSB0aGV5XG4gICAgLy8gbmVlZCB0byBkaXNwYXRjaCBpbiBvcmRlci5cbiAgICBxdWV1ZURpc2NyZXRlRXZlbnQobnVsbCwgLy8gRmxhZ3MgdGhhdCB3ZSdyZSBub3QgYWN0dWFsbHkgYmxvY2tlZCBvbiBhbnl0aGluZyBhcyBmYXIgYXMgd2Uga25vdy5cbiAgICBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmF0aXZlRXZlbnQpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBibG9ja2VkT24gPSBhdHRlbXB0VG9EaXNwYXRjaEV2ZW50KGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBuYXRpdmVFdmVudCk7XG5cbiAgaWYgKGJsb2NrZWRPbiA9PT0gbnVsbCkge1xuICAgIC8vIFdlIHN1Y2Nlc3NmdWxseSBkaXNwYXRjaGVkIHRoaXMgZXZlbnQuXG4gICAgaWYgKGFsbG93UmVwbGF5KSB7XG4gICAgICBjbGVhcklmQ29udGludW91c0V2ZW50KGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpO1xuICAgIH1cblxuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChhbGxvd1JlcGxheSkge1xuICAgIGlmIChpc1JlcGxheWFibGVEaXNjcmV0ZUV2ZW50KGRvbUV2ZW50TmFtZSkpIHtcbiAgICAgIC8vIFRoaXMgdGhpcyB0byBiZSByZXBsYXllZCBsYXRlciBvbmNlIHRoZSB0YXJnZXQgaXMgYXZhaWxhYmxlLlxuICAgICAgcXVldWVEaXNjcmV0ZUV2ZW50KGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIG5hdGl2ZUV2ZW50KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAocXVldWVJZkNvbnRpbnVvdXNFdmVudChibG9ja2VkT24sIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBuYXRpdmVFdmVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIFdlIG5lZWQgdG8gY2xlYXIgb25seSBpZiB3ZSBkaWRuJ3QgcXVldWUgYmVjYXVzZVxuICAgIC8vIHF1ZXVlaW5nIGlzIGFjY3VtbXVsYXRpdmUuXG5cblxuICAgIGNsZWFySWZDb250aW51b3VzRXZlbnQoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCk7XG4gIH0gLy8gVGhpcyBpcyBub3QgcmVwbGF5YWJsZSBzbyB3ZSdsbCBpbnZva2UgaXQgYnV0IHdpdGhvdXQgYSB0YXJnZXQsXG4gIC8vIGluIGNhc2UgdGhlIGV2ZW50IHN5c3RlbSBuZWVkcyB0byB0cmFjZSBpdC5cblxuXG4gIGRpc3BhdGNoRXZlbnRGb3JQbHVnaW5FdmVudFN5c3RlbShkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIG5hdGl2ZUV2ZW50LCBudWxsLCB0YXJnZXRDb250YWluZXIpO1xufSAvLyBBdHRlbXB0IGRpc3BhdGNoaW5nIGFuIGV2ZW50LiBSZXR1cm5zIGEgU3VzcGVuc2VJbnN0YW5jZSBvciBDb250YWluZXIgaWYgaXQncyBibG9ja2VkLlxuXG5mdW5jdGlvbiBhdHRlbXB0VG9EaXNwYXRjaEV2ZW50KGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBuYXRpdmVFdmVudCkge1xuICAvLyBUT0RPOiBXYXJuIGlmIF9lbmFibGVkIGlzIGZhbHNlLlxuICB2YXIgbmF0aXZlRXZlbnRUYXJnZXQgPSBnZXRFdmVudFRhcmdldChuYXRpdmVFdmVudCk7XG4gIHZhciB0YXJnZXRJbnN0ID0gZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUobmF0aXZlRXZlbnRUYXJnZXQpO1xuXG4gIGlmICh0YXJnZXRJbnN0ICE9PSBudWxsKSB7XG4gICAgdmFyIG5lYXJlc3RNb3VudGVkID0gZ2V0TmVhcmVzdE1vdW50ZWRGaWJlcih0YXJnZXRJbnN0KTtcblxuICAgIGlmIChuZWFyZXN0TW91bnRlZCA9PT0gbnVsbCkge1xuICAgICAgLy8gVGhpcyB0cmVlIGhhcyBiZWVuIHVubW91bnRlZCBhbHJlYWR5LiBEaXNwYXRjaCB3aXRob3V0IGEgdGFyZ2V0LlxuICAgICAgdGFyZ2V0SW5zdCA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciB0YWcgPSBuZWFyZXN0TW91bnRlZC50YWc7XG5cbiAgICAgIGlmICh0YWcgPT09IFN1c3BlbnNlQ29tcG9uZW50KSB7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IGdldFN1c3BlbnNlSW5zdGFuY2VGcm9tRmliZXIobmVhcmVzdE1vdW50ZWQpO1xuXG4gICAgICAgIGlmIChpbnN0YW5jZSAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIFF1ZXVlIHRoZSBldmVudCB0byBiZSByZXBsYXllZCBsYXRlci4gQWJvcnQgZGlzcGF0Y2hpbmcgc2luY2Ugd2VcbiAgICAgICAgICAvLyBkb24ndCB3YW50IHRoaXMgZXZlbnQgZGlzcGF0Y2hlZCB0d2ljZSB0aHJvdWdoIHRoZSBldmVudCBzeXN0ZW0uXG4gICAgICAgICAgLy8gVE9ETzogSWYgdGhpcyBpcyB0aGUgZmlyc3QgZGlzY3JldGUgZXZlbnQgaW4gdGhlIHF1ZXVlLiBTY2hlZHVsZSBhbiBpbmNyZWFzZWRcbiAgICAgICAgICAvLyBwcmlvcml0eSBmb3IgdGhpcyBib3VuZGFyeS5cbiAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgICAgIH0gLy8gVGhpcyBzaG91bGRuJ3QgaGFwcGVuLCBzb21ldGhpbmcgd2VudCB3cm9uZyBidXQgdG8gYXZvaWQgYmxvY2tpbmdcbiAgICAgICAgLy8gdGhlIHdob2xlIHN5c3RlbSwgZGlzcGF0Y2ggdGhlIGV2ZW50IHdpdGhvdXQgYSB0YXJnZXQuXG4gICAgICAgIC8vIFRPRE86IFdhcm4uXG5cblxuICAgICAgICB0YXJnZXRJbnN0ID0gbnVsbDtcbiAgICAgIH0gZWxzZSBpZiAodGFnID09PSBIb3N0Um9vdCkge1xuICAgICAgICB2YXIgcm9vdCA9IG5lYXJlc3RNb3VudGVkLnN0YXRlTm9kZTtcblxuICAgICAgICBpZiAocm9vdC5oeWRyYXRlKSB7XG4gICAgICAgICAgLy8gSWYgdGhpcyBoYXBwZW5zIGR1cmluZyBhIHJlcGxheSBzb21ldGhpbmcgd2VudCB3cm9uZyBhbmQgaXQgbWlnaHQgYmxvY2tcbiAgICAgICAgICAvLyB0aGUgd2hvbGUgc3lzdGVtLlxuICAgICAgICAgIHJldHVybiBnZXRDb250YWluZXJGcm9tRmliZXIobmVhcmVzdE1vdW50ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGFyZ2V0SW5zdCA9IG51bGw7XG4gICAgICB9IGVsc2UgaWYgKG5lYXJlc3RNb3VudGVkICE9PSB0YXJnZXRJbnN0KSB7XG4gICAgICAgIC8vIElmIHdlIGdldCBhbiBldmVudCAoZXg6IGltZyBvbmxvYWQpIGJlZm9yZSBjb21taXR0aW5nIHRoYXRcbiAgICAgICAgLy8gY29tcG9uZW50J3MgbW91bnQsIGlnbm9yZSBpdCBmb3Igbm93ICh0aGF0IGlzLCB0cmVhdCBpdCBhcyBpZiBpdCB3YXMgYW5cbiAgICAgICAgLy8gZXZlbnQgb24gYSBub24tUmVhY3QgdHJlZSkuIFdlIG1pZ2h0IGFsc28gY29uc2lkZXIgcXVldWVpbmcgZXZlbnRzIGFuZFxuICAgICAgICAvLyBkaXNwYXRjaGluZyB0aGVtIGFmdGVyIHRoZSBtb3VudC5cbiAgICAgICAgdGFyZ2V0SW5zdCA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZGlzcGF0Y2hFdmVudEZvclBsdWdpbkV2ZW50U3lzdGVtKGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgbmF0aXZlRXZlbnQsIHRhcmdldEluc3QsIHRhcmdldENvbnRhaW5lcik7IC8vIFdlJ3JlIG5vdCBibG9ja2VkIG9uIGFueXRoaW5nLlxuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBhZGRFdmVudEJ1YmJsZUxpc3RlbmVyKHRhcmdldCwgZXZlbnRUeXBlLCBsaXN0ZW5lcikge1xuICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGxpc3RlbmVyLCBmYWxzZSk7XG4gIHJldHVybiBsaXN0ZW5lcjtcbn1cbmZ1bmN0aW9uIGFkZEV2ZW50Q2FwdHVyZUxpc3RlbmVyKHRhcmdldCwgZXZlbnRUeXBlLCBsaXN0ZW5lcikge1xuICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGxpc3RlbmVyLCB0cnVlKTtcbiAgcmV0dXJuIGxpc3RlbmVyO1xufVxuZnVuY3Rpb24gYWRkRXZlbnRDYXB0dXJlTGlzdGVuZXJXaXRoUGFzc2l2ZUZsYWcodGFyZ2V0LCBldmVudFR5cGUsIGxpc3RlbmVyLCBwYXNzaXZlKSB7XG4gIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgbGlzdGVuZXIsIHtcbiAgICBjYXB0dXJlOiB0cnVlLFxuICAgIHBhc3NpdmU6IHBhc3NpdmVcbiAgfSk7XG4gIHJldHVybiBsaXN0ZW5lcjtcbn1cbmZ1bmN0aW9uIGFkZEV2ZW50QnViYmxlTGlzdGVuZXJXaXRoUGFzc2l2ZUZsYWcodGFyZ2V0LCBldmVudFR5cGUsIGxpc3RlbmVyLCBwYXNzaXZlKSB7XG4gIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgbGlzdGVuZXIsIHtcbiAgICBwYXNzaXZlOiBwYXNzaXZlXG4gIH0pO1xuICByZXR1cm4gbGlzdGVuZXI7XG59XG5cbi8qKlxuICogVGhlc2UgdmFyaWFibGVzIHN0b3JlIGluZm9ybWF0aW9uIGFib3V0IHRleHQgY29udGVudCBvZiBhIHRhcmdldCBub2RlLFxuICogYWxsb3dpbmcgY29tcGFyaXNvbiBvZiBjb250ZW50IGJlZm9yZSBhbmQgYWZ0ZXIgYSBnaXZlbiBldmVudC5cbiAqXG4gKiBJZGVudGlmeSB0aGUgbm9kZSB3aGVyZSBzZWxlY3Rpb24gY3VycmVudGx5IGJlZ2lucywgdGhlbiBvYnNlcnZlXG4gKiBib3RoIGl0cyB0ZXh0IGNvbnRlbnQgYW5kIGl0cyBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBET00uIFNpbmNlIHRoZVxuICogYnJvd3NlciBtYXkgbmF0aXZlbHkgcmVwbGFjZSB0aGUgdGFyZ2V0IG5vZGUgZHVyaW5nIGNvbXBvc2l0aW9uLCB3ZSBjYW5cbiAqIHVzZSBpdHMgcG9zaXRpb24gdG8gZmluZCBpdHMgcmVwbGFjZW1lbnQuXG4gKlxuICpcbiAqL1xudmFyIHJvb3QgPSBudWxsO1xudmFyIHN0YXJ0VGV4dCA9IG51bGw7XG52YXIgZmFsbGJhY2tUZXh0ID0gbnVsbDtcbmZ1bmN0aW9uIGluaXRpYWxpemUobmF0aXZlRXZlbnRUYXJnZXQpIHtcbiAgcm9vdCA9IG5hdGl2ZUV2ZW50VGFyZ2V0O1xuICBzdGFydFRleHQgPSBnZXRUZXh0KCk7XG4gIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gcmVzZXQoKSB7XG4gIHJvb3QgPSBudWxsO1xuICBzdGFydFRleHQgPSBudWxsO1xuICBmYWxsYmFja1RleHQgPSBudWxsO1xufVxuZnVuY3Rpb24gZ2V0RGF0YSgpIHtcbiAgaWYgKGZhbGxiYWNrVGV4dCkge1xuICAgIHJldHVybiBmYWxsYmFja1RleHQ7XG4gIH1cblxuICB2YXIgc3RhcnQ7XG4gIHZhciBzdGFydFZhbHVlID0gc3RhcnRUZXh0O1xuICB2YXIgc3RhcnRMZW5ndGggPSBzdGFydFZhbHVlLmxlbmd0aDtcbiAgdmFyIGVuZDtcbiAgdmFyIGVuZFZhbHVlID0gZ2V0VGV4dCgpO1xuICB2YXIgZW5kTGVuZ3RoID0gZW5kVmFsdWUubGVuZ3RoO1xuXG4gIGZvciAoc3RhcnQgPSAwOyBzdGFydCA8IHN0YXJ0TGVuZ3RoOyBzdGFydCsrKSB7XG4gICAgaWYgKHN0YXJ0VmFsdWVbc3RhcnRdICE9PSBlbmRWYWx1ZVtzdGFydF0pIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHZhciBtaW5FbmQgPSBzdGFydExlbmd0aCAtIHN0YXJ0O1xuXG4gIGZvciAoZW5kID0gMTsgZW5kIDw9IG1pbkVuZDsgZW5kKyspIHtcbiAgICBpZiAoc3RhcnRWYWx1ZVtzdGFydExlbmd0aCAtIGVuZF0gIT09IGVuZFZhbHVlW2VuZExlbmd0aCAtIGVuZF0pIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHZhciBzbGljZVRhaWwgPSBlbmQgPiAxID8gMSAtIGVuZCA6IHVuZGVmaW5lZDtcbiAgZmFsbGJhY2tUZXh0ID0gZW5kVmFsdWUuc2xpY2Uoc3RhcnQsIHNsaWNlVGFpbCk7XG4gIHJldHVybiBmYWxsYmFja1RleHQ7XG59XG5mdW5jdGlvbiBnZXRUZXh0KCkge1xuICBpZiAoJ3ZhbHVlJyBpbiByb290KSB7XG4gICAgcmV0dXJuIHJvb3QudmFsdWU7XG4gIH1cblxuICByZXR1cm4gcm9vdC50ZXh0Q29udGVudDtcbn1cblxuLyoqXG4gKiBgY2hhckNvZGVgIHJlcHJlc2VudHMgdGhlIGFjdHVhbCBcImNoYXJhY3RlciBjb2RlXCIgYW5kIGlzIHNhZmUgdG8gdXNlIHdpdGhcbiAqIGBTdHJpbmcuZnJvbUNoYXJDb2RlYC4gQXMgc3VjaCwgb25seSBrZXlzIHRoYXQgY29ycmVzcG9uZCB0byBwcmludGFibGVcbiAqIGNoYXJhY3RlcnMgcHJvZHVjZSBhIHZhbGlkIGBjaGFyQ29kZWAsIHRoZSBvbmx5IGV4Y2VwdGlvbiB0byB0aGlzIGlzIEVudGVyLlxuICogVGhlIFRhYi1rZXkgaXMgY29uc2lkZXJlZCBub24tcHJpbnRhYmxlIGFuZCBkb2VzIG5vdCBoYXZlIGEgYGNoYXJDb2RlYCxcbiAqIHByZXN1bWFibHkgYmVjYXVzZSBpdCBkb2VzIG5vdCBwcm9kdWNlIGEgdGFiLWNoYXJhY3RlciBpbiBicm93c2Vycy5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQuXG4gKiBAcmV0dXJuIHtudW1iZXJ9IE5vcm1hbGl6ZWQgYGNoYXJDb2RlYCBwcm9wZXJ0eS5cbiAqL1xuZnVuY3Rpb24gZ2V0RXZlbnRDaGFyQ29kZShuYXRpdmVFdmVudCkge1xuICB2YXIgY2hhckNvZGU7XG4gIHZhciBrZXlDb2RlID0gbmF0aXZlRXZlbnQua2V5Q29kZTtcblxuICBpZiAoJ2NoYXJDb2RlJyBpbiBuYXRpdmVFdmVudCkge1xuICAgIGNoYXJDb2RlID0gbmF0aXZlRXZlbnQuY2hhckNvZGU7IC8vIEZGIGRvZXMgbm90IHNldCBgY2hhckNvZGVgIGZvciB0aGUgRW50ZXIta2V5LCBjaGVjayBhZ2FpbnN0IGBrZXlDb2RlYC5cblxuICAgIGlmIChjaGFyQ29kZSA9PT0gMCAmJiBrZXlDb2RlID09PSAxMykge1xuICAgICAgY2hhckNvZGUgPSAxMztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gSUU4IGRvZXMgbm90IGltcGxlbWVudCBgY2hhckNvZGVgLCBidXQgYGtleUNvZGVgIGhhcyB0aGUgY29ycmVjdCB2YWx1ZS5cbiAgICBjaGFyQ29kZSA9IGtleUNvZGU7XG4gIH0gLy8gSUUgYW5kIEVkZ2UgKG9uIFdpbmRvd3MpIGFuZCBDaHJvbWUgLyBTYWZhcmkgKG9uIFdpbmRvd3MgYW5kIExpbnV4KVxuICAvLyByZXBvcnQgRW50ZXIgYXMgY2hhckNvZGUgMTAgd2hlbiBjdHJsIGlzIHByZXNzZWQuXG5cblxuICBpZiAoY2hhckNvZGUgPT09IDEwKSB7XG4gICAgY2hhckNvZGUgPSAxMztcbiAgfSAvLyBTb21lIG5vbi1wcmludGFibGUga2V5cyBhcmUgcmVwb3J0ZWQgaW4gYGNoYXJDb2RlYC9ga2V5Q29kZWAsIGRpc2NhcmQgdGhlbS5cbiAgLy8gTXVzdCBub3QgZGlzY2FyZCB0aGUgKG5vbi0pcHJpbnRhYmxlIEVudGVyLWtleS5cblxuXG4gIGlmIChjaGFyQ29kZSA+PSAzMiB8fCBjaGFyQ29kZSA9PT0gMTMpIHtcbiAgICByZXR1cm4gY2hhckNvZGU7XG4gIH1cblxuICByZXR1cm4gMDtcbn1cblxuZnVuY3Rpb24gZnVuY3Rpb25UaGF0UmV0dXJuc1RydWUoKSB7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBmdW5jdGlvblRoYXRSZXR1cm5zRmFsc2UoKSB7XG4gIHJldHVybiBmYWxzZTtcbn0gLy8gVGhpcyBpcyBpbnRlbnRpb25hbGx5IGEgZmFjdG9yeSBzbyB0aGF0IHdlIGhhdmUgZGlmZmVyZW50IHJldHVybmVkIGNvbnN0cnVjdG9ycy5cbi8vIElmIHdlIGhhZCBhIHNpbmdsZSBjb25zdHJ1Y3RvciwgaXQgd291bGQgYmUgbWVnYW1vcnBoaWMgYW5kIGVuZ2luZXMgd291bGQgZGVvcHQuXG5cblxuZnVuY3Rpb24gY3JlYXRlU3ludGhldGljRXZlbnQoSW50ZXJmYWNlKSB7XG4gIC8qKlxuICAgKiBTeW50aGV0aWMgZXZlbnRzIGFyZSBkaXNwYXRjaGVkIGJ5IGV2ZW50IHBsdWdpbnMsIHR5cGljYWxseSBpbiByZXNwb25zZSB0byBhXG4gICAqIHRvcC1sZXZlbCBldmVudCBkZWxlZ2F0aW9uIGhhbmRsZXIuXG4gICAqXG4gICAqIFRoZXNlIHN5c3RlbXMgc2hvdWxkIGdlbmVyYWxseSB1c2UgcG9vbGluZyB0byByZWR1Y2UgdGhlIGZyZXF1ZW5jeSBvZiBnYXJiYWdlXG4gICAqIGNvbGxlY3Rpb24uIFRoZSBzeXN0ZW0gc2hvdWxkIGNoZWNrIGBpc1BlcnNpc3RlbnRgIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZVxuICAgKiBldmVudCBzaG91bGQgYmUgcmVsZWFzZWQgaW50byB0aGUgcG9vbCBhZnRlciBiZWluZyBkaXNwYXRjaGVkLiBVc2VycyB0aGF0XG4gICAqIG5lZWQgYSBwZXJzaXN0ZWQgZXZlbnQgc2hvdWxkIGludm9rZSBgcGVyc2lzdGAuXG4gICAqXG4gICAqIFN5bnRoZXRpYyBldmVudHMgKGFuZCBzdWJjbGFzc2VzKSBpbXBsZW1lbnQgdGhlIERPTSBMZXZlbCAzIEV2ZW50cyBBUEkgYnlcbiAgICogbm9ybWFsaXppbmcgYnJvd3NlciBxdWlya3MuIFN1YmNsYXNzZXMgZG8gbm90IG5lY2Vzc2FyaWx5IGhhdmUgdG8gaW1wbGVtZW50IGFcbiAgICogRE9NIGludGVyZmFjZTsgY3VzdG9tIGFwcGxpY2F0aW9uLXNwZWNpZmljIGV2ZW50cyBjYW4gYWxzbyBzdWJjbGFzcyB0aGlzLlxuICAgKi9cbiAgZnVuY3Rpb24gU3ludGhldGljQmFzZUV2ZW50KHJlYWN0TmFtZSwgcmVhY3RFdmVudFR5cGUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCkge1xuICAgIHRoaXMuX3JlYWN0TmFtZSA9IHJlYWN0TmFtZTtcbiAgICB0aGlzLl90YXJnZXRJbnN0ID0gdGFyZ2V0SW5zdDtcbiAgICB0aGlzLnR5cGUgPSByZWFjdEV2ZW50VHlwZTtcbiAgICB0aGlzLm5hdGl2ZUV2ZW50ID0gbmF0aXZlRXZlbnQ7XG4gICAgdGhpcy50YXJnZXQgPSBuYXRpdmVFdmVudFRhcmdldDtcbiAgICB0aGlzLmN1cnJlbnRUYXJnZXQgPSBudWxsO1xuXG4gICAgZm9yICh2YXIgX3Byb3BOYW1lIGluIEludGVyZmFjZSkge1xuICAgICAgaWYgKCFJbnRlcmZhY2UuaGFzT3duUHJvcGVydHkoX3Byb3BOYW1lKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIG5vcm1hbGl6ZSA9IEludGVyZmFjZVtfcHJvcE5hbWVdO1xuXG4gICAgICBpZiAobm9ybWFsaXplKSB7XG4gICAgICAgIHRoaXNbX3Byb3BOYW1lXSA9IG5vcm1hbGl6ZShuYXRpdmVFdmVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzW19wcm9wTmFtZV0gPSBuYXRpdmVFdmVudFtfcHJvcE5hbWVdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBkZWZhdWx0UHJldmVudGVkID0gbmF0aXZlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCAhPSBudWxsID8gbmF0aXZlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCA6IG5hdGl2ZUV2ZW50LnJldHVyblZhbHVlID09PSBmYWxzZTtcblxuICAgIGlmIChkZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICB0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IGZ1bmN0aW9uVGhhdFJldHVybnNUcnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IGZ1bmN0aW9uVGhhdFJldHVybnNGYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkID0gZnVuY3Rpb25UaGF0UmV0dXJuc0ZhbHNlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgX2Fzc2lnbihTeW50aGV0aWNCYXNlRXZlbnQucHJvdG90eXBlLCB7XG4gICAgcHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoaXMuZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7XG4gICAgICB2YXIgZXZlbnQgPSB0aGlzLm5hdGl2ZUV2ZW50O1xuXG4gICAgICBpZiAoIWV2ZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50LnByZXZlbnREZWZhdWx0KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IC8vICRGbG93Rml4TWUgLSBmbG93IGlzIG5vdCBhd2FyZSBvZiBgdW5rbm93bmAgaW4gSUVcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGV2ZW50LnJldHVyblZhbHVlICE9PSAndW5rbm93bicpIHtcbiAgICAgICAgZXZlbnQucmV0dXJuVmFsdWUgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSBmdW5jdGlvblRoYXRSZXR1cm5zVHJ1ZTtcbiAgICB9LFxuICAgIHN0b3BQcm9wYWdhdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGV2ZW50ID0gdGhpcy5uYXRpdmVFdmVudDtcblxuICAgICAgaWYgKCFldmVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudC5zdG9wUHJvcGFnYXRpb24pIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IC8vICRGbG93Rml4TWUgLSBmbG93IGlzIG5vdCBhd2FyZSBvZiBgdW5rbm93bmAgaW4gSUVcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGV2ZW50LmNhbmNlbEJ1YmJsZSAhPT0gJ3Vua25vd24nKSB7XG4gICAgICAgIC8vIFRoZSBDaGFuZ2VFdmVudFBsdWdpbiByZWdpc3RlcnMgYSBcInByb3BlcnR5Y2hhbmdlXCIgZXZlbnQgZm9yXG4gICAgICAgIC8vIElFLiBUaGlzIGV2ZW50IGRvZXMgbm90IHN1cHBvcnQgYnViYmxpbmcgb3IgY2FuY2VsbGluZywgYW5kXG4gICAgICAgIC8vIGFueSByZWZlcmVuY2VzIHRvIGNhbmNlbEJ1YmJsZSB0aHJvdyBcIk1lbWJlciBub3QgZm91bmRcIi4gIEFcbiAgICAgICAgLy8gdHlwZW9mIGNoZWNrIG9mIFwidW5rbm93blwiIGNpcmN1bXZlbnRzIHRoaXMgaXNzdWUgKGFuZCBpcyBhbHNvXG4gICAgICAgIC8vIElFIHNwZWNpZmljKS5cbiAgICAgICAgZXZlbnQuY2FuY2VsQnViYmxlID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IGZ1bmN0aW9uVGhhdFJldHVybnNUcnVlO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBXZSByZWxlYXNlIGFsbCBkaXNwYXRjaGVkIGBTeW50aGV0aWNFdmVudGBzIGFmdGVyIGVhY2ggZXZlbnQgbG9vcCwgYWRkaW5nXG4gICAgICogdGhlbSBiYWNrIGludG8gdGhlIHBvb2wuIFRoaXMgYWxsb3dzIGEgd2F5IHRvIGhvbGQgb250byBhIHJlZmVyZW5jZSB0aGF0XG4gICAgICogd29uJ3QgYmUgYWRkZWQgYmFjayBpbnRvIHRoZSBwb29sLlxuICAgICAqL1xuICAgIHBlcnNpc3Q6IGZ1bmN0aW9uICgpIHsvLyBNb2Rlcm4gZXZlbnQgc3lzdGVtIGRvZXNuJ3QgdXNlIHBvb2xpbmcuXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiB0aGlzIGV2ZW50IHNob3VsZCBiZSByZWxlYXNlZCBiYWNrIGludG8gdGhlIHBvb2wuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoaXMgc2hvdWxkIG5vdCBiZSByZWxlYXNlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIGlzUGVyc2lzdGVudDogZnVuY3Rpb25UaGF0UmV0dXJuc1RydWVcbiAgfSk7XG5cbiAgcmV0dXJuIFN5bnRoZXRpY0Jhc2VFdmVudDtcbn1cbi8qKlxuICogQGludGVyZmFjZSBFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvXG4gKi9cblxuXG52YXIgRXZlbnRJbnRlcmZhY2UgPSB7XG4gIGV2ZW50UGhhc2U6IDAsXG4gIGJ1YmJsZXM6IDAsXG4gIGNhbmNlbGFibGU6IDAsXG4gIHRpbWVTdGFtcDogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgcmV0dXJuIGV2ZW50LnRpbWVTdGFtcCB8fCBEYXRlLm5vdygpO1xuICB9LFxuICBkZWZhdWx0UHJldmVudGVkOiAwLFxuICBpc1RydXN0ZWQ6IDBcbn07XG52YXIgU3ludGhldGljRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChFdmVudEludGVyZmFjZSk7XG5cbnZhciBVSUV2ZW50SW50ZXJmYWNlID0gX2Fzc2lnbih7fSwgRXZlbnRJbnRlcmZhY2UsIHtcbiAgdmlldzogMCxcbiAgZGV0YWlsOiAwXG59KTtcblxudmFyIFN5bnRoZXRpY1VJRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChVSUV2ZW50SW50ZXJmYWNlKTtcbnZhciBsYXN0TW92ZW1lbnRYO1xudmFyIGxhc3RNb3ZlbWVudFk7XG52YXIgbGFzdE1vdXNlRXZlbnQ7XG5cbmZ1bmN0aW9uIHVwZGF0ZU1vdXNlTW92ZW1lbnRQb2x5ZmlsbFN0YXRlKGV2ZW50KSB7XG4gIGlmIChldmVudCAhPT0gbGFzdE1vdXNlRXZlbnQpIHtcbiAgICBpZiAobGFzdE1vdXNlRXZlbnQgJiYgZXZlbnQudHlwZSA9PT0gJ21vdXNlbW92ZScpIHtcbiAgICAgIGxhc3RNb3ZlbWVudFggPSBldmVudC5zY3JlZW5YIC0gbGFzdE1vdXNlRXZlbnQuc2NyZWVuWDtcbiAgICAgIGxhc3RNb3ZlbWVudFkgPSBldmVudC5zY3JlZW5ZIC0gbGFzdE1vdXNlRXZlbnQuc2NyZWVuWTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGFzdE1vdmVtZW50WCA9IDA7XG4gICAgICBsYXN0TW92ZW1lbnRZID0gMDtcbiAgICB9XG5cbiAgICBsYXN0TW91c2VFdmVudCA9IGV2ZW50O1xuICB9XG59XG4vKipcbiAqIEBpbnRlcmZhY2UgTW91c2VFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvXG4gKi9cblxuXG52YXIgTW91c2VFdmVudEludGVyZmFjZSA9IF9hc3NpZ24oe30sIFVJRXZlbnRJbnRlcmZhY2UsIHtcbiAgc2NyZWVuWDogMCxcbiAgc2NyZWVuWTogMCxcbiAgY2xpZW50WDogMCxcbiAgY2xpZW50WTogMCxcbiAgcGFnZVg6IDAsXG4gIHBhZ2VZOiAwLFxuICBjdHJsS2V5OiAwLFxuICBzaGlmdEtleTogMCxcbiAgYWx0S2V5OiAwLFxuICBtZXRhS2V5OiAwLFxuICBnZXRNb2RpZmllclN0YXRlOiBnZXRFdmVudE1vZGlmaWVyU3RhdGUsXG4gIGJ1dHRvbjogMCxcbiAgYnV0dG9uczogMCxcbiAgcmVsYXRlZFRhcmdldDogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LnJlbGF0ZWRUYXJnZXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGV2ZW50LmZyb21FbGVtZW50ID09PSBldmVudC5zcmNFbGVtZW50ID8gZXZlbnQudG9FbGVtZW50IDogZXZlbnQuZnJvbUVsZW1lbnQ7XG4gICAgcmV0dXJuIGV2ZW50LnJlbGF0ZWRUYXJnZXQ7XG4gIH0sXG4gIG1vdmVtZW50WDogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgaWYgKCdtb3ZlbWVudFgnIGluIGV2ZW50KSB7XG4gICAgICByZXR1cm4gZXZlbnQubW92ZW1lbnRYO1xuICAgIH1cblxuICAgIHVwZGF0ZU1vdXNlTW92ZW1lbnRQb2x5ZmlsbFN0YXRlKGV2ZW50KTtcbiAgICByZXR1cm4gbGFzdE1vdmVtZW50WDtcbiAgfSxcbiAgbW92ZW1lbnRZOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBpZiAoJ21vdmVtZW50WScgaW4gZXZlbnQpIHtcbiAgICAgIHJldHVybiBldmVudC5tb3ZlbWVudFk7XG4gICAgfSAvLyBEb24ndCBuZWVkIHRvIGNhbGwgdXBkYXRlTW91c2VNb3ZlbWVudFBvbHlmaWxsU3RhdGUoKSBoZXJlXG4gICAgLy8gYmVjYXVzZSBpdCdzIGd1YXJhbnRlZWQgdG8gaGF2ZSBhbHJlYWR5IHJ1biB3aGVuIG1vdmVtZW50WFxuICAgIC8vIHdhcyBjb3BpZWQuXG5cblxuICAgIHJldHVybiBsYXN0TW92ZW1lbnRZO1xuICB9XG59KTtcblxudmFyIFN5bnRoZXRpY01vdXNlRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChNb3VzZUV2ZW50SW50ZXJmYWNlKTtcbi8qKlxuICogQGludGVyZmFjZSBEcmFnRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzL1xuICovXG5cbnZhciBEcmFnRXZlbnRJbnRlcmZhY2UgPSBfYXNzaWduKHt9LCBNb3VzZUV2ZW50SW50ZXJmYWNlLCB7XG4gIGRhdGFUcmFuc2ZlcjogMFxufSk7XG5cbnZhciBTeW50aGV0aWNEcmFnRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChEcmFnRXZlbnRJbnRlcmZhY2UpO1xuLyoqXG4gKiBAaW50ZXJmYWNlIEZvY3VzRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzL1xuICovXG5cbnZhciBGb2N1c0V2ZW50SW50ZXJmYWNlID0gX2Fzc2lnbih7fSwgVUlFdmVudEludGVyZmFjZSwge1xuICByZWxhdGVkVGFyZ2V0OiAwXG59KTtcblxudmFyIFN5bnRoZXRpY0ZvY3VzRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChGb2N1c0V2ZW50SW50ZXJmYWNlKTtcbi8qKlxuICogQGludGVyZmFjZSBFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLWFuaW1hdGlvbnMvI0FuaW1hdGlvbkV2ZW50LWludGVyZmFjZVxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvQW5pbWF0aW9uRXZlbnRcbiAqL1xuXG52YXIgQW5pbWF0aW9uRXZlbnRJbnRlcmZhY2UgPSBfYXNzaWduKHt9LCBFdmVudEludGVyZmFjZSwge1xuICBhbmltYXRpb25OYW1lOiAwLFxuICBlbGFwc2VkVGltZTogMCxcbiAgcHNldWRvRWxlbWVudDogMFxufSk7XG5cbnZhciBTeW50aGV0aWNBbmltYXRpb25FdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KEFuaW1hdGlvbkV2ZW50SW50ZXJmYWNlKTtcbi8qKlxuICogQGludGVyZmFjZSBFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9jbGlwYm9hcmQtYXBpcy9cbiAqL1xuXG52YXIgQ2xpcGJvYXJkRXZlbnRJbnRlcmZhY2UgPSBfYXNzaWduKHt9LCBFdmVudEludGVyZmFjZSwge1xuICBjbGlwYm9hcmREYXRhOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICByZXR1cm4gJ2NsaXBib2FyZERhdGEnIGluIGV2ZW50ID8gZXZlbnQuY2xpcGJvYXJkRGF0YSA6IHdpbmRvdy5jbGlwYm9hcmREYXRhO1xuICB9XG59KTtcblxudmFyIFN5bnRoZXRpY0NsaXBib2FyZEV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoQ2xpcGJvYXJkRXZlbnRJbnRlcmZhY2UpO1xuLyoqXG4gKiBAaW50ZXJmYWNlIEV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy8jZXZlbnRzLWNvbXBvc2l0aW9uZXZlbnRzXG4gKi9cblxudmFyIENvbXBvc2l0aW9uRXZlbnRJbnRlcmZhY2UgPSBfYXNzaWduKHt9LCBFdmVudEludGVyZmFjZSwge1xuICBkYXRhOiAwXG59KTtcblxudmFyIFN5bnRoZXRpY0NvbXBvc2l0aW9uRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChDb21wb3NpdGlvbkV2ZW50SW50ZXJmYWNlKTtcbi8qKlxuICogQGludGVyZmFjZSBFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEzL1dELURPTS1MZXZlbC0zLUV2ZW50cy0yMDEzMTEwNVxuICogICAgICAvI2V2ZW50cy1pbnB1dGV2ZW50c1xuICovXG4vLyBIYXBwZW5zIHRvIHNoYXJlIHRoZSBzYW1lIGxpc3QgZm9yIG5vdy5cblxudmFyIFN5bnRoZXRpY0lucHV0RXZlbnQgPSBTeW50aGV0aWNDb21wb3NpdGlvbkV2ZW50O1xuLyoqXG4gKiBOb3JtYWxpemF0aW9uIG9mIGRlcHJlY2F0ZWQgSFRNTDUgYGtleWAgdmFsdWVzXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9LZXlib2FyZEV2ZW50I0tleV9uYW1lc1xuICovXG5cbnZhciBub3JtYWxpemVLZXkgPSB7XG4gIEVzYzogJ0VzY2FwZScsXG4gIFNwYWNlYmFyOiAnICcsXG4gIExlZnQ6ICdBcnJvd0xlZnQnLFxuICBVcDogJ0Fycm93VXAnLFxuICBSaWdodDogJ0Fycm93UmlnaHQnLFxuICBEb3duOiAnQXJyb3dEb3duJyxcbiAgRGVsOiAnRGVsZXRlJyxcbiAgV2luOiAnT1MnLFxuICBNZW51OiAnQ29udGV4dE1lbnUnLFxuICBBcHBzOiAnQ29udGV4dE1lbnUnLFxuICBTY3JvbGw6ICdTY3JvbGxMb2NrJyxcbiAgTW96UHJpbnRhYmxlS2V5OiAnVW5pZGVudGlmaWVkJ1xufTtcbi8qKlxuICogVHJhbnNsYXRpb24gZnJvbSBsZWdhY3kgYGtleUNvZGVgIHRvIEhUTUw1IGBrZXlgXG4gKiBPbmx5IHNwZWNpYWwga2V5cyBzdXBwb3J0ZWQsIGFsbCBvdGhlcnMgZGVwZW5kIG9uIGtleWJvYXJkIGxheW91dCBvciBicm93c2VyXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9LZXlib2FyZEV2ZW50I0tleV9uYW1lc1xuICovXG5cbnZhciB0cmFuc2xhdGVUb0tleSA9IHtcbiAgJzgnOiAnQmFja3NwYWNlJyxcbiAgJzknOiAnVGFiJyxcbiAgJzEyJzogJ0NsZWFyJyxcbiAgJzEzJzogJ0VudGVyJyxcbiAgJzE2JzogJ1NoaWZ0JyxcbiAgJzE3JzogJ0NvbnRyb2wnLFxuICAnMTgnOiAnQWx0JyxcbiAgJzE5JzogJ1BhdXNlJyxcbiAgJzIwJzogJ0NhcHNMb2NrJyxcbiAgJzI3JzogJ0VzY2FwZScsXG4gICczMic6ICcgJyxcbiAgJzMzJzogJ1BhZ2VVcCcsXG4gICczNCc6ICdQYWdlRG93bicsXG4gICczNSc6ICdFbmQnLFxuICAnMzYnOiAnSG9tZScsXG4gICczNyc6ICdBcnJvd0xlZnQnLFxuICAnMzgnOiAnQXJyb3dVcCcsXG4gICczOSc6ICdBcnJvd1JpZ2h0JyxcbiAgJzQwJzogJ0Fycm93RG93bicsXG4gICc0NSc6ICdJbnNlcnQnLFxuICAnNDYnOiAnRGVsZXRlJyxcbiAgJzExMic6ICdGMScsXG4gICcxMTMnOiAnRjInLFxuICAnMTE0JzogJ0YzJyxcbiAgJzExNSc6ICdGNCcsXG4gICcxMTYnOiAnRjUnLFxuICAnMTE3JzogJ0Y2JyxcbiAgJzExOCc6ICdGNycsXG4gICcxMTknOiAnRjgnLFxuICAnMTIwJzogJ0Y5JyxcbiAgJzEyMSc6ICdGMTAnLFxuICAnMTIyJzogJ0YxMScsXG4gICcxMjMnOiAnRjEyJyxcbiAgJzE0NCc6ICdOdW1Mb2NrJyxcbiAgJzE0NSc6ICdTY3JvbGxMb2NrJyxcbiAgJzIyNCc6ICdNZXRhJ1xufTtcbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICogQHJldHVybiB7c3RyaW5nfSBOb3JtYWxpemVkIGBrZXlgIHByb3BlcnR5LlxuICovXG5cbmZ1bmN0aW9uIGdldEV2ZW50S2V5KG5hdGl2ZUV2ZW50KSB7XG4gIGlmIChuYXRpdmVFdmVudC5rZXkpIHtcbiAgICAvLyBOb3JtYWxpemUgaW5jb25zaXN0ZW50IHZhbHVlcyByZXBvcnRlZCBieSBicm93c2VycyBkdWUgdG9cbiAgICAvLyBpbXBsZW1lbnRhdGlvbnMgb2YgYSB3b3JraW5nIGRyYWZ0IHNwZWNpZmljYXRpb24uXG4gICAgLy8gRmlyZUZveCBpbXBsZW1lbnRzIGBrZXlgIGJ1dCByZXR1cm5zIGBNb3pQcmludGFibGVLZXlgIGZvciBhbGxcbiAgICAvLyBwcmludGFibGUgY2hhcmFjdGVycyAobm9ybWFsaXplZCB0byBgVW5pZGVudGlmaWVkYCksIGlnbm9yZSBpdC5cbiAgICB2YXIga2V5ID0gbm9ybWFsaXplS2V5W25hdGl2ZUV2ZW50LmtleV0gfHwgbmF0aXZlRXZlbnQua2V5O1xuXG4gICAgaWYgKGtleSAhPT0gJ1VuaWRlbnRpZmllZCcpIHtcbiAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICB9IC8vIEJyb3dzZXIgZG9lcyBub3QgaW1wbGVtZW50IGBrZXlgLCBwb2x5ZmlsbCBhcyBtdWNoIG9mIGl0IGFzIHdlIGNhbi5cblxuXG4gIGlmIChuYXRpdmVFdmVudC50eXBlID09PSAna2V5cHJlc3MnKSB7XG4gICAgdmFyIGNoYXJDb2RlID0gZ2V0RXZlbnRDaGFyQ29kZShuYXRpdmVFdmVudCk7IC8vIFRoZSBlbnRlci1rZXkgaXMgdGVjaG5pY2FsbHkgYm90aCBwcmludGFibGUgYW5kIG5vbi1wcmludGFibGUgYW5kIGNhblxuICAgIC8vIHRodXMgYmUgY2FwdHVyZWQgYnkgYGtleXByZXNzYCwgbm8gb3RoZXIgbm9uLXByaW50YWJsZSBrZXkgc2hvdWxkLlxuXG4gICAgcmV0dXJuIGNoYXJDb2RlID09PSAxMyA/ICdFbnRlcicgOiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoYXJDb2RlKTtcbiAgfVxuXG4gIGlmIChuYXRpdmVFdmVudC50eXBlID09PSAna2V5ZG93bicgfHwgbmF0aXZlRXZlbnQudHlwZSA9PT0gJ2tleXVwJykge1xuICAgIC8vIFdoaWxlIHVzZXIga2V5Ym9hcmQgbGF5b3V0IGRldGVybWluZXMgdGhlIGFjdHVhbCBtZWFuaW5nIG9mIGVhY2hcbiAgICAvLyBga2V5Q29kZWAgdmFsdWUsIGFsbW9zdCBhbGwgZnVuY3Rpb24ga2V5cyBoYXZlIGEgdW5pdmVyc2FsIHZhbHVlLlxuICAgIHJldHVybiB0cmFuc2xhdGVUb0tleVtuYXRpdmVFdmVudC5rZXlDb2RlXSB8fCAnVW5pZGVudGlmaWVkJztcbiAgfVxuXG4gIHJldHVybiAnJztcbn1cbi8qKlxuICogVHJhbnNsYXRpb24gZnJvbSBtb2RpZmllciBrZXkgdG8gdGhlIGFzc29jaWF0ZWQgcHJvcGVydHkgaW4gdGhlIGV2ZW50LlxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvI2tleXMtTW9kaWZpZXJzXG4gKi9cblxuXG52YXIgbW9kaWZpZXJLZXlUb1Byb3AgPSB7XG4gIEFsdDogJ2FsdEtleScsXG4gIENvbnRyb2w6ICdjdHJsS2V5JyxcbiAgTWV0YTogJ21ldGFLZXknLFxuICBTaGlmdDogJ3NoaWZ0S2V5J1xufTsgLy8gT2xkZXIgYnJvd3NlcnMgKFNhZmFyaSA8PSAxMCwgaU9TIFNhZmFyaSA8PSAxMC4yKSBkbyBub3Qgc3VwcG9ydFxuLy8gZ2V0TW9kaWZpZXJTdGF0ZS4gSWYgZ2V0TW9kaWZpZXJTdGF0ZSBpcyBub3Qgc3VwcG9ydGVkLCB3ZSBtYXAgaXQgdG8gYSBzZXQgb2Zcbi8vIG1vZGlmaWVyIGtleXMgZXhwb3NlZCBieSB0aGUgZXZlbnQuIEluIHRoaXMgY2FzZSwgTG9jay1rZXlzIGFyZSBub3Qgc3VwcG9ydGVkLlxuXG5mdW5jdGlvbiBtb2RpZmllclN0YXRlR2V0dGVyKGtleUFyZykge1xuICB2YXIgc3ludGhldGljRXZlbnQgPSB0aGlzO1xuICB2YXIgbmF0aXZlRXZlbnQgPSBzeW50aGV0aWNFdmVudC5uYXRpdmVFdmVudDtcblxuICBpZiAobmF0aXZlRXZlbnQuZ2V0TW9kaWZpZXJTdGF0ZSkge1xuICAgIHJldHVybiBuYXRpdmVFdmVudC5nZXRNb2RpZmllclN0YXRlKGtleUFyZyk7XG4gIH1cblxuICB2YXIga2V5UHJvcCA9IG1vZGlmaWVyS2V5VG9Qcm9wW2tleUFyZ107XG4gIHJldHVybiBrZXlQcm9wID8gISFuYXRpdmVFdmVudFtrZXlQcm9wXSA6IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBnZXRFdmVudE1vZGlmaWVyU3RhdGUobmF0aXZlRXZlbnQpIHtcbiAgcmV0dXJuIG1vZGlmaWVyU3RhdGVHZXR0ZXI7XG59XG4vKipcbiAqIEBpbnRlcmZhY2UgS2V5Ym9hcmRFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvXG4gKi9cblxuXG52YXIgS2V5Ym9hcmRFdmVudEludGVyZmFjZSA9IF9hc3NpZ24oe30sIFVJRXZlbnRJbnRlcmZhY2UsIHtcbiAga2V5OiBnZXRFdmVudEtleSxcbiAgY29kZTogMCxcbiAgbG9jYXRpb246IDAsXG4gIGN0cmxLZXk6IDAsXG4gIHNoaWZ0S2V5OiAwLFxuICBhbHRLZXk6IDAsXG4gIG1ldGFLZXk6IDAsXG4gIHJlcGVhdDogMCxcbiAgbG9jYWxlOiAwLFxuICBnZXRNb2RpZmllclN0YXRlOiBnZXRFdmVudE1vZGlmaWVyU3RhdGUsXG4gIC8vIExlZ2FjeSBJbnRlcmZhY2VcbiAgY2hhckNvZGU6IGZ1bmN0aW9uIChldmVudCkge1xuICAgIC8vIGBjaGFyQ29kZWAgaXMgdGhlIHJlc3VsdCBvZiBhIEtleVByZXNzIGV2ZW50IGFuZCByZXByZXNlbnRzIHRoZSB2YWx1ZSBvZlxuICAgIC8vIHRoZSBhY3R1YWwgcHJpbnRhYmxlIGNoYXJhY3Rlci5cbiAgICAvLyBLZXlQcmVzcyBpcyBkZXByZWNhdGVkLCBidXQgaXRzIHJlcGxhY2VtZW50IGlzIG5vdCB5ZXQgZmluYWwgYW5kIG5vdFxuICAgIC8vIGltcGxlbWVudGVkIGluIGFueSBtYWpvciBicm93c2VyLiBPbmx5IEtleVByZXNzIGhhcyBjaGFyQ29kZS5cbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2tleXByZXNzJykge1xuICAgICAgcmV0dXJuIGdldEV2ZW50Q2hhckNvZGUoZXZlbnQpO1xuICAgIH1cblxuICAgIHJldHVybiAwO1xuICB9LFxuICBrZXlDb2RlOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAvLyBga2V5Q29kZWAgaXMgdGhlIHJlc3VsdCBvZiBhIEtleURvd24vVXAgZXZlbnQgYW5kIHJlcHJlc2VudHMgdGhlIHZhbHVlIG9mXG4gICAgLy8gcGh5c2ljYWwga2V5Ym9hcmQga2V5LlxuICAgIC8vIFRoZSBhY3R1YWwgbWVhbmluZyBvZiB0aGUgdmFsdWUgZGVwZW5kcyBvbiB0aGUgdXNlcnMnIGtleWJvYXJkIGxheW91dFxuICAgIC8vIHdoaWNoIGNhbm5vdCBiZSBkZXRlY3RlZC4gQXNzdW1pbmcgdGhhdCBpdCBpcyBhIFVTIGtleWJvYXJkIGxheW91dFxuICAgIC8vIHByb3ZpZGVzIGEgc3VycHJpc2luZ2x5IGFjY3VyYXRlIG1hcHBpbmcgZm9yIFVTIGFuZCBFdXJvcGVhbiB1c2Vycy5cbiAgICAvLyBEdWUgdG8gdGhpcywgaXQgaXMgbGVmdCB0byB0aGUgdXNlciB0byBpbXBsZW1lbnQgYXQgdGhpcyB0aW1lLlxuICAgIGlmIChldmVudC50eXBlID09PSAna2V5ZG93bicgfHwgZXZlbnQudHlwZSA9PT0gJ2tleXVwJykge1xuICAgICAgcmV0dXJuIGV2ZW50LmtleUNvZGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIDA7XG4gIH0sXG4gIHdoaWNoOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAvLyBgd2hpY2hgIGlzIGFuIGFsaWFzIGZvciBlaXRoZXIgYGtleUNvZGVgIG9yIGBjaGFyQ29kZWAgZGVwZW5kaW5nIG9uIHRoZVxuICAgIC8vIHR5cGUgb2YgdGhlIGV2ZW50LlxuICAgIGlmIChldmVudC50eXBlID09PSAna2V5cHJlc3MnKSB7XG4gICAgICByZXR1cm4gZ2V0RXZlbnRDaGFyQ29kZShldmVudCk7XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09ICdrZXlkb3duJyB8fCBldmVudC50eXBlID09PSAna2V5dXAnKSB7XG4gICAgICByZXR1cm4gZXZlbnQua2V5Q29kZTtcbiAgICB9XG5cbiAgICByZXR1cm4gMDtcbiAgfVxufSk7XG5cbnZhciBTeW50aGV0aWNLZXlib2FyZEV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoS2V5Ym9hcmRFdmVudEludGVyZmFjZSk7XG4vKipcbiAqIEBpbnRlcmZhY2UgUG9pbnRlckV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL3BvaW50ZXJldmVudHMvXG4gKi9cblxudmFyIFBvaW50ZXJFdmVudEludGVyZmFjZSA9IF9hc3NpZ24oe30sIE1vdXNlRXZlbnRJbnRlcmZhY2UsIHtcbiAgcG9pbnRlcklkOiAwLFxuICB3aWR0aDogMCxcbiAgaGVpZ2h0OiAwLFxuICBwcmVzc3VyZTogMCxcbiAgdGFuZ2VudGlhbFByZXNzdXJlOiAwLFxuICB0aWx0WDogMCxcbiAgdGlsdFk6IDAsXG4gIHR3aXN0OiAwLFxuICBwb2ludGVyVHlwZTogMCxcbiAgaXNQcmltYXJ5OiAwXG59KTtcblxudmFyIFN5bnRoZXRpY1BvaW50ZXJFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KFBvaW50ZXJFdmVudEludGVyZmFjZSk7XG4vKipcbiAqIEBpbnRlcmZhY2UgVG91Y2hFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi90b3VjaC1ldmVudHMvXG4gKi9cblxudmFyIFRvdWNoRXZlbnRJbnRlcmZhY2UgPSBfYXNzaWduKHt9LCBVSUV2ZW50SW50ZXJmYWNlLCB7XG4gIHRvdWNoZXM6IDAsXG4gIHRhcmdldFRvdWNoZXM6IDAsXG4gIGNoYW5nZWRUb3VjaGVzOiAwLFxuICBhbHRLZXk6IDAsXG4gIG1ldGFLZXk6IDAsXG4gIGN0cmxLZXk6IDAsXG4gIHNoaWZ0S2V5OiAwLFxuICBnZXRNb2RpZmllclN0YXRlOiBnZXRFdmVudE1vZGlmaWVyU3RhdGVcbn0pO1xuXG52YXIgU3ludGhldGljVG91Y2hFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KFRvdWNoRXZlbnRJbnRlcmZhY2UpO1xuLyoqXG4gKiBAaW50ZXJmYWNlIEV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDkvV0QtY3NzMy10cmFuc2l0aW9ucy0yMDA5MDMyMC8jdHJhbnNpdGlvbi1ldmVudHMtXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9UcmFuc2l0aW9uRXZlbnRcbiAqL1xuXG52YXIgVHJhbnNpdGlvbkV2ZW50SW50ZXJmYWNlID0gX2Fzc2lnbih7fSwgRXZlbnRJbnRlcmZhY2UsIHtcbiAgcHJvcGVydHlOYW1lOiAwLFxuICBlbGFwc2VkVGltZTogMCxcbiAgcHNldWRvRWxlbWVudDogMFxufSk7XG5cbnZhciBTeW50aGV0aWNUcmFuc2l0aW9uRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChUcmFuc2l0aW9uRXZlbnRJbnRlcmZhY2UpO1xuLyoqXG4gKiBAaW50ZXJmYWNlIFdoZWVsRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzL1xuICovXG5cbnZhciBXaGVlbEV2ZW50SW50ZXJmYWNlID0gX2Fzc2lnbih7fSwgTW91c2VFdmVudEludGVyZmFjZSwge1xuICBkZWx0YVg6IGZ1bmN0aW9uIChldmVudCkge1xuICAgIHJldHVybiAnZGVsdGFYJyBpbiBldmVudCA/IGV2ZW50LmRlbHRhWCA6IC8vIEZhbGxiYWNrIHRvIGB3aGVlbERlbHRhWGAgZm9yIFdlYmtpdCBhbmQgbm9ybWFsaXplIChyaWdodCBpcyBwb3NpdGl2ZSkuXG4gICAgJ3doZWVsRGVsdGFYJyBpbiBldmVudCA/IC1ldmVudC53aGVlbERlbHRhWCA6IDA7XG4gIH0sXG4gIGRlbHRhWTogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgcmV0dXJuICdkZWx0YVknIGluIGV2ZW50ID8gZXZlbnQuZGVsdGFZIDogLy8gRmFsbGJhY2sgdG8gYHdoZWVsRGVsdGFZYCBmb3IgV2Via2l0IGFuZCBub3JtYWxpemUgKGRvd24gaXMgcG9zaXRpdmUpLlxuICAgICd3aGVlbERlbHRhWScgaW4gZXZlbnQgPyAtZXZlbnQud2hlZWxEZWx0YVkgOiAvLyBGYWxsYmFjayB0byBgd2hlZWxEZWx0YWAgZm9yIElFPDkgYW5kIG5vcm1hbGl6ZSAoZG93biBpcyBwb3NpdGl2ZSkuXG4gICAgJ3doZWVsRGVsdGEnIGluIGV2ZW50ID8gLWV2ZW50LndoZWVsRGVsdGEgOiAwO1xuICB9LFxuICBkZWx0YVo6IDAsXG4gIC8vIEJyb3dzZXJzIHdpdGhvdXQgXCJkZWx0YU1vZGVcIiBpcyByZXBvcnRpbmcgaW4gcmF3IHdoZWVsIGRlbHRhIHdoZXJlIG9uZVxuICAvLyBub3RjaCBvbiB0aGUgc2Nyb2xsIGlzIGFsd2F5cyArLy0gMTIwLCByb3VnaGx5IGVxdWl2YWxlbnQgdG8gcGl4ZWxzLlxuICAvLyBBIGdvb2QgYXBwcm94aW1hdGlvbiBvZiBET01fREVMVEFfTElORSAoMSkgaXMgNSUgb2Ygdmlld3BvcnQgc2l6ZSBvclxuICAvLyB+NDAgcGl4ZWxzLCBmb3IgRE9NX0RFTFRBX1NDUkVFTiAoMikgaXQgaXMgODcuNSUgb2Ygdmlld3BvcnQgc2l6ZS5cbiAgZGVsdGFNb2RlOiAwXG59KTtcblxudmFyIFN5bnRoZXRpY1doZWVsRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChXaGVlbEV2ZW50SW50ZXJmYWNlKTtcblxudmFyIEVORF9LRVlDT0RFUyA9IFs5LCAxMywgMjcsIDMyXTsgLy8gVGFiLCBSZXR1cm4sIEVzYywgU3BhY2VcblxudmFyIFNUQVJUX0tFWUNPREUgPSAyMjk7XG52YXIgY2FuVXNlQ29tcG9zaXRpb25FdmVudCA9IGNhblVzZURPTSAmJiAnQ29tcG9zaXRpb25FdmVudCcgaW4gd2luZG93O1xudmFyIGRvY3VtZW50TW9kZSA9IG51bGw7XG5cbmlmIChjYW5Vc2VET00gJiYgJ2RvY3VtZW50TW9kZScgaW4gZG9jdW1lbnQpIHtcbiAgZG9jdW1lbnRNb2RlID0gZG9jdW1lbnQuZG9jdW1lbnRNb2RlO1xufSAvLyBXZWJraXQgb2ZmZXJzIGEgdmVyeSB1c2VmdWwgYHRleHRJbnB1dGAgZXZlbnQgdGhhdCBjYW4gYmUgdXNlZCB0b1xuLy8gZGlyZWN0bHkgcmVwcmVzZW50IGBiZWZvcmVJbnB1dGAuIFRoZSBJRSBgdGV4dGlucHV0YCBldmVudCBpcyBub3QgYXNcbi8vIHVzZWZ1bCwgc28gd2UgZG9uJ3QgdXNlIGl0LlxuXG5cbnZhciBjYW5Vc2VUZXh0SW5wdXRFdmVudCA9IGNhblVzZURPTSAmJiAnVGV4dEV2ZW50JyBpbiB3aW5kb3cgJiYgIWRvY3VtZW50TW9kZTsgLy8gSW4gSUU5Kywgd2UgaGF2ZSBhY2Nlc3MgdG8gY29tcG9zaXRpb24gZXZlbnRzLCBidXQgdGhlIGRhdGEgc3VwcGxpZWRcbi8vIGJ5IHRoZSBuYXRpdmUgY29tcG9zaXRpb25lbmQgZXZlbnQgbWF5IGJlIGluY29ycmVjdC4gSmFwYW5lc2UgaWRlb2dyYXBoaWNcbi8vIHNwYWNlcywgZm9yIGluc3RhbmNlIChcXHUzMDAwKSBhcmUgbm90IHJlY29yZGVkIGNvcnJlY3RseS5cblxudmFyIHVzZUZhbGxiYWNrQ29tcG9zaXRpb25EYXRhID0gY2FuVXNlRE9NICYmICghY2FuVXNlQ29tcG9zaXRpb25FdmVudCB8fCBkb2N1bWVudE1vZGUgJiYgZG9jdW1lbnRNb2RlID4gOCAmJiBkb2N1bWVudE1vZGUgPD0gMTEpO1xudmFyIFNQQUNFQkFSX0NPREUgPSAzMjtcbnZhciBTUEFDRUJBUl9DSEFSID0gU3RyaW5nLmZyb21DaGFyQ29kZShTUEFDRUJBUl9DT0RFKTtcblxuZnVuY3Rpb24gcmVnaXN0ZXJFdmVudHMoKSB7XG4gIHJlZ2lzdGVyVHdvUGhhc2VFdmVudCgnb25CZWZvcmVJbnB1dCcsIFsnY29tcG9zaXRpb25lbmQnLCAna2V5cHJlc3MnLCAndGV4dElucHV0JywgJ3Bhc3RlJ10pO1xuICByZWdpc3RlclR3b1BoYXNlRXZlbnQoJ29uQ29tcG9zaXRpb25FbmQnLCBbJ2NvbXBvc2l0aW9uZW5kJywgJ2ZvY3Vzb3V0JywgJ2tleWRvd24nLCAna2V5cHJlc3MnLCAna2V5dXAnLCAnbW91c2Vkb3duJ10pO1xuICByZWdpc3RlclR3b1BoYXNlRXZlbnQoJ29uQ29tcG9zaXRpb25TdGFydCcsIFsnY29tcG9zaXRpb25zdGFydCcsICdmb2N1c291dCcsICdrZXlkb3duJywgJ2tleXByZXNzJywgJ2tleXVwJywgJ21vdXNlZG93biddKTtcbiAgcmVnaXN0ZXJUd29QaGFzZUV2ZW50KCdvbkNvbXBvc2l0aW9uVXBkYXRlJywgWydjb21wb3NpdGlvbnVwZGF0ZScsICdmb2N1c291dCcsICdrZXlkb3duJywgJ2tleXByZXNzJywgJ2tleXVwJywgJ21vdXNlZG93biddKTtcbn0gLy8gVHJhY2sgd2hldGhlciB3ZSd2ZSBldmVyIGhhbmRsZWQgYSBrZXlwcmVzcyBvbiB0aGUgc3BhY2Uga2V5LlxuXG5cbnZhciBoYXNTcGFjZUtleXByZXNzID0gZmFsc2U7XG4vKipcbiAqIFJldHVybiB3aGV0aGVyIGEgbmF0aXZlIGtleXByZXNzIGV2ZW50IGlzIGFzc3VtZWQgdG8gYmUgYSBjb21tYW5kLlxuICogVGhpcyBpcyByZXF1aXJlZCBiZWNhdXNlIEZpcmVmb3ggZmlyZXMgYGtleXByZXNzYCBldmVudHMgZm9yIGtleSBjb21tYW5kc1xuICogKGN1dCwgY29weSwgc2VsZWN0LWFsbCwgZXRjLikgZXZlbiB0aG91Z2ggbm8gY2hhcmFjdGVyIGlzIGluc2VydGVkLlxuICovXG5cbmZ1bmN0aW9uIGlzS2V5cHJlc3NDb21tYW5kKG5hdGl2ZUV2ZW50KSB7XG4gIHJldHVybiAobmF0aXZlRXZlbnQuY3RybEtleSB8fCBuYXRpdmVFdmVudC5hbHRLZXkgfHwgbmF0aXZlRXZlbnQubWV0YUtleSkgJiYgLy8gY3RybEtleSAmJiBhbHRLZXkgaXMgZXF1aXZhbGVudCB0byBBbHRHciwgYW5kIGlzIG5vdCBhIGNvbW1hbmQuXG4gICEobmF0aXZlRXZlbnQuY3RybEtleSAmJiBuYXRpdmVFdmVudC5hbHRLZXkpO1xufVxuLyoqXG4gKiBUcmFuc2xhdGUgbmF0aXZlIHRvcCBsZXZlbCBldmVudHMgaW50byBldmVudCB0eXBlcy5cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldENvbXBvc2l0aW9uRXZlbnRUeXBlKGRvbUV2ZW50TmFtZSkge1xuICBzd2l0Y2ggKGRvbUV2ZW50TmFtZSkge1xuICAgIGNhc2UgJ2NvbXBvc2l0aW9uc3RhcnQnOlxuICAgICAgcmV0dXJuICdvbkNvbXBvc2l0aW9uU3RhcnQnO1xuXG4gICAgY2FzZSAnY29tcG9zaXRpb25lbmQnOlxuICAgICAgcmV0dXJuICdvbkNvbXBvc2l0aW9uRW5kJztcblxuICAgIGNhc2UgJ2NvbXBvc2l0aW9udXBkYXRlJzpcbiAgICAgIHJldHVybiAnb25Db21wb3NpdGlvblVwZGF0ZSc7XG4gIH1cbn1cbi8qKlxuICogRG9lcyBvdXIgZmFsbGJhY2sgYmVzdC1ndWVzcyBtb2RlbCB0aGluayB0aGlzIGV2ZW50IHNpZ25pZmllcyB0aGF0XG4gKiBjb21wb3NpdGlvbiBoYXMgYmVndW4/XG4gKi9cblxuXG5mdW5jdGlvbiBpc0ZhbGxiYWNrQ29tcG9zaXRpb25TdGFydChkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KSB7XG4gIHJldHVybiBkb21FdmVudE5hbWUgPT09ICdrZXlkb3duJyAmJiBuYXRpdmVFdmVudC5rZXlDb2RlID09PSBTVEFSVF9LRVlDT0RFO1xufVxuLyoqXG4gKiBEb2VzIG91ciBmYWxsYmFjayBtb2RlIHRoaW5rIHRoYXQgdGhpcyBldmVudCBpcyB0aGUgZW5kIG9mIGNvbXBvc2l0aW9uP1xuICovXG5cblxuZnVuY3Rpb24gaXNGYWxsYmFja0NvbXBvc2l0aW9uRW5kKGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpIHtcbiAgc3dpdGNoIChkb21FdmVudE5hbWUpIHtcbiAgICBjYXNlICdrZXl1cCc6XG4gICAgICAvLyBDb21tYW5kIGtleXMgaW5zZXJ0IG9yIGNsZWFyIElNRSBpbnB1dC5cbiAgICAgIHJldHVybiBFTkRfS0VZQ09ERVMuaW5kZXhPZihuYXRpdmVFdmVudC5rZXlDb2RlKSAhPT0gLTE7XG5cbiAgICBjYXNlICdrZXlkb3duJzpcbiAgICAgIC8vIEV4cGVjdCBJTUUga2V5Q29kZSBvbiBlYWNoIGtleWRvd24uIElmIHdlIGdldCBhbnkgb3RoZXJcbiAgICAgIC8vIGNvZGUgd2UgbXVzdCBoYXZlIGV4aXRlZCBlYXJsaWVyLlxuICAgICAgcmV0dXJuIG5hdGl2ZUV2ZW50LmtleUNvZGUgIT09IFNUQVJUX0tFWUNPREU7XG5cbiAgICBjYXNlICdrZXlwcmVzcyc6XG4gICAgY2FzZSAnbW91c2Vkb3duJzpcbiAgICBjYXNlICdmb2N1c291dCc6XG4gICAgICAvLyBFdmVudHMgYXJlIG5vdCBwb3NzaWJsZSB3aXRob3V0IGNhbmNlbGxpbmcgSU1FLlxuICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4vKipcbiAqIEdvb2dsZSBJbnB1dCBUb29scyBwcm92aWRlcyBjb21wb3NpdGlvbiBkYXRhIHZpYSBhIEN1c3RvbUV2ZW50LFxuICogd2l0aCB0aGUgYGRhdGFgIHByb3BlcnR5IHBvcHVsYXRlZCBpbiB0aGUgYGRldGFpbGAgb2JqZWN0LiBJZiB0aGlzXG4gKiBpcyBhdmFpbGFibGUgb24gdGhlIGV2ZW50IG9iamVjdCwgdXNlIGl0LiBJZiBub3QsIHRoaXMgaXMgYSBwbGFpblxuICogY29tcG9zaXRpb24gZXZlbnQgYW5kIHdlIGhhdmUgbm90aGluZyBzcGVjaWFsIHRvIGV4dHJhY3QuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50XG4gKiBAcmV0dXJuIHs/c3RyaW5nfVxuICovXG5cblxuZnVuY3Rpb24gZ2V0RGF0YUZyb21DdXN0b21FdmVudChuYXRpdmVFdmVudCkge1xuICB2YXIgZGV0YWlsID0gbmF0aXZlRXZlbnQuZGV0YWlsO1xuXG4gIGlmICh0eXBlb2YgZGV0YWlsID09PSAnb2JqZWN0JyAmJiAnZGF0YScgaW4gZGV0YWlsKSB7XG4gICAgcmV0dXJuIGRldGFpbC5kYXRhO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4vKipcbiAqIENoZWNrIGlmIGEgY29tcG9zaXRpb24gZXZlbnQgd2FzIHRyaWdnZXJlZCBieSBLb3JlYW4gSU1FLlxuICogT3VyIGZhbGxiYWNrIG1vZGUgZG9lcyBub3Qgd29yayB3ZWxsIHdpdGggSUUncyBLb3JlYW4gSU1FLFxuICogc28ganVzdCB1c2UgbmF0aXZlIGNvbXBvc2l0aW9uIGV2ZW50cyB3aGVuIEtvcmVhbiBJTUUgaXMgdXNlZC5cbiAqIEFsdGhvdWdoIENvbXBvc2l0aW9uRXZlbnQubG9jYWxlIHByb3BlcnR5IGlzIGRlcHJlY2F0ZWQsXG4gKiBpdCBpcyBhdmFpbGFibGUgaW4gSUUsIHdoZXJlIG91ciBmYWxsYmFjayBtb2RlIGlzIGVuYWJsZWQuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50XG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5cblxuZnVuY3Rpb24gaXNVc2luZ0tvcmVhbklNRShuYXRpdmVFdmVudCkge1xuICByZXR1cm4gbmF0aXZlRXZlbnQubG9jYWxlID09PSAna28nO1xufSAvLyBUcmFjayB0aGUgY3VycmVudCBJTUUgY29tcG9zaXRpb24gc3RhdHVzLCBpZiBhbnkuXG5cblxudmFyIGlzQ29tcG9zaW5nID0gZmFsc2U7XG4vKipcbiAqIEByZXR1cm4gez9vYmplY3R9IEEgU3ludGhldGljQ29tcG9zaXRpb25FdmVudC5cbiAqL1xuXG5mdW5jdGlvbiBleHRyYWN0Q29tcG9zaXRpb25FdmVudChkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCkge1xuICB2YXIgZXZlbnRUeXBlO1xuICB2YXIgZmFsbGJhY2tEYXRhO1xuXG4gIGlmIChjYW5Vc2VDb21wb3NpdGlvbkV2ZW50KSB7XG4gICAgZXZlbnRUeXBlID0gZ2V0Q29tcG9zaXRpb25FdmVudFR5cGUoZG9tRXZlbnROYW1lKTtcbiAgfSBlbHNlIGlmICghaXNDb21wb3NpbmcpIHtcbiAgICBpZiAoaXNGYWxsYmFja0NvbXBvc2l0aW9uU3RhcnQoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCkpIHtcbiAgICAgIGV2ZW50VHlwZSA9ICdvbkNvbXBvc2l0aW9uU3RhcnQnO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc0ZhbGxiYWNrQ29tcG9zaXRpb25FbmQoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCkpIHtcbiAgICBldmVudFR5cGUgPSAnb25Db21wb3NpdGlvbkVuZCc7XG4gIH1cblxuICBpZiAoIWV2ZW50VHlwZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHVzZUZhbGxiYWNrQ29tcG9zaXRpb25EYXRhICYmICFpc1VzaW5nS29yZWFuSU1FKG5hdGl2ZUV2ZW50KSkge1xuICAgIC8vIFRoZSBjdXJyZW50IGNvbXBvc2l0aW9uIGlzIHN0b3JlZCBzdGF0aWNhbGx5IGFuZCBtdXN0IG5vdCBiZVxuICAgIC8vIG92ZXJ3cml0dGVuIHdoaWxlIGNvbXBvc2l0aW9uIGNvbnRpbnVlcy5cbiAgICBpZiAoIWlzQ29tcG9zaW5nICYmIGV2ZW50VHlwZSA9PT0gJ29uQ29tcG9zaXRpb25TdGFydCcpIHtcbiAgICAgIGlzQ29tcG9zaW5nID0gaW5pdGlhbGl6ZShuYXRpdmVFdmVudFRhcmdldCk7XG4gICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT09ICdvbkNvbXBvc2l0aW9uRW5kJykge1xuICAgICAgaWYgKGlzQ29tcG9zaW5nKSB7XG4gICAgICAgIGZhbGxiYWNrRGF0YSA9IGdldERhdGEoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgbGlzdGVuZXJzID0gYWNjdW11bGF0ZVR3b1BoYXNlTGlzdGVuZXJzKHRhcmdldEluc3QsIGV2ZW50VHlwZSk7XG5cbiAgaWYgKGxpc3RlbmVycy5sZW5ndGggPiAwKSB7XG4gICAgdmFyIGV2ZW50ID0gbmV3IFN5bnRoZXRpY0NvbXBvc2l0aW9uRXZlbnQoZXZlbnRUeXBlLCBkb21FdmVudE5hbWUsIG51bGwsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gICAgZGlzcGF0Y2hRdWV1ZS5wdXNoKHtcbiAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgIGxpc3RlbmVyczogbGlzdGVuZXJzXG4gICAgfSk7XG5cbiAgICBpZiAoZmFsbGJhY2tEYXRhKSB7XG4gICAgICAvLyBJbmplY3QgZGF0YSBnZW5lcmF0ZWQgZnJvbSBmYWxsYmFjayBwYXRoIGludG8gdGhlIHN5bnRoZXRpYyBldmVudC5cbiAgICAgIC8vIFRoaXMgbWF0Y2hlcyB0aGUgcHJvcGVydHkgb2YgbmF0aXZlIENvbXBvc2l0aW9uRXZlbnRJbnRlcmZhY2UuXG4gICAgICBldmVudC5kYXRhID0gZmFsbGJhY2tEYXRhO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgY3VzdG9tRGF0YSA9IGdldERhdGFGcm9tQ3VzdG9tRXZlbnQobmF0aXZlRXZlbnQpO1xuXG4gICAgICBpZiAoY3VzdG9tRGF0YSAhPT0gbnVsbCkge1xuICAgICAgICBldmVudC5kYXRhID0gY3VzdG9tRGF0YTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0TmF0aXZlQmVmb3JlSW5wdXRDaGFycyhkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KSB7XG4gIHN3aXRjaCAoZG9tRXZlbnROYW1lKSB7XG4gICAgY2FzZSAnY29tcG9zaXRpb25lbmQnOlxuICAgICAgcmV0dXJuIGdldERhdGFGcm9tQ3VzdG9tRXZlbnQobmF0aXZlRXZlbnQpO1xuXG4gICAgY2FzZSAna2V5cHJlc3MnOlxuICAgICAgLyoqXG4gICAgICAgKiBJZiBuYXRpdmUgYHRleHRJbnB1dGAgZXZlbnRzIGFyZSBhdmFpbGFibGUsIG91ciBnb2FsIGlzIHRvIG1ha2VcbiAgICAgICAqIHVzZSBvZiB0aGVtLiBIb3dldmVyLCB0aGVyZSBpcyBhIHNwZWNpYWwgY2FzZTogdGhlIHNwYWNlYmFyIGtleS5cbiAgICAgICAqIEluIFdlYmtpdCwgcHJldmVudGluZyBkZWZhdWx0IG9uIGEgc3BhY2ViYXIgYHRleHRJbnB1dGAgZXZlbnRcbiAgICAgICAqIGNhbmNlbHMgY2hhcmFjdGVyIGluc2VydGlvbiwgYnV0IGl0ICphbHNvKiBjYXVzZXMgdGhlIGJyb3dzZXJcbiAgICAgICAqIHRvIGZhbGwgYmFjayB0byBpdHMgZGVmYXVsdCBzcGFjZWJhciBiZWhhdmlvciBvZiBzY3JvbGxpbmcgdGhlXG4gICAgICAgKiBwYWdlLlxuICAgICAgICpcbiAgICAgICAqIFRyYWNraW5nIGF0OlxuICAgICAgICogaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTM1NTEwM1xuICAgICAgICpcbiAgICAgICAqIFRvIGF2b2lkIHRoaXMgaXNzdWUsIHVzZSB0aGUga2V5cHJlc3MgZXZlbnQgYXMgaWYgbm8gYHRleHRJbnB1dGBcbiAgICAgICAqIGV2ZW50IGlzIGF2YWlsYWJsZS5cbiAgICAgICAqL1xuICAgICAgdmFyIHdoaWNoID0gbmF0aXZlRXZlbnQud2hpY2g7XG5cbiAgICAgIGlmICh3aGljaCAhPT0gU1BBQ0VCQVJfQ09ERSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaGFzU3BhY2VLZXlwcmVzcyA9IHRydWU7XG4gICAgICByZXR1cm4gU1BBQ0VCQVJfQ0hBUjtcblxuICAgIGNhc2UgJ3RleHRJbnB1dCc6XG4gICAgICAvLyBSZWNvcmQgdGhlIGNoYXJhY3RlcnMgdG8gYmUgYWRkZWQgdG8gdGhlIERPTS5cbiAgICAgIHZhciBjaGFycyA9IG5hdGl2ZUV2ZW50LmRhdGE7IC8vIElmIGl0J3MgYSBzcGFjZWJhciBjaGFyYWN0ZXIsIGFzc3VtZSB0aGF0IHdlIGhhdmUgYWxyZWFkeSBoYW5kbGVkXG4gICAgICAvLyBpdCBhdCB0aGUga2V5cHJlc3MgbGV2ZWwgYW5kIGJhaWwgaW1tZWRpYXRlbHkuIEFuZHJvaWQgQ2hyb21lXG4gICAgICAvLyBkb2Vzbid0IGdpdmUgdXMga2V5Y29kZXMsIHNvIHdlIG5lZWQgdG8gaWdub3JlIGl0LlxuXG4gICAgICBpZiAoY2hhcnMgPT09IFNQQUNFQkFSX0NIQVIgJiYgaGFzU3BhY2VLZXlwcmVzcykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNoYXJzO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIEZvciBvdGhlciBuYXRpdmUgZXZlbnQgdHlwZXMsIGRvIG5vdGhpbmcuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuLyoqXG4gKiBGb3IgYnJvd3NlcnMgdGhhdCBkbyBub3QgcHJvdmlkZSB0aGUgYHRleHRJbnB1dGAgZXZlbnQsIGV4dHJhY3QgdGhlXG4gKiBhcHByb3ByaWF0ZSBzdHJpbmcgdG8gdXNlIGZvciBTeW50aGV0aWNJbnB1dEV2ZW50LlxuICovXG5cblxuZnVuY3Rpb24gZ2V0RmFsbGJhY2tCZWZvcmVJbnB1dENoYXJzKGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpIHtcbiAgLy8gSWYgd2UgYXJlIGN1cnJlbnRseSBjb21wb3NpbmcgKElNRSkgYW5kIHVzaW5nIGEgZmFsbGJhY2sgdG8gZG8gc28sXG4gIC8vIHRyeSB0byBleHRyYWN0IHRoZSBjb21wb3NlZCBjaGFyYWN0ZXJzIGZyb20gdGhlIGZhbGxiYWNrIG9iamVjdC5cbiAgLy8gSWYgY29tcG9zaXRpb24gZXZlbnQgaXMgYXZhaWxhYmxlLCB3ZSBleHRyYWN0IGEgc3RyaW5nIG9ubHkgYXRcbiAgLy8gY29tcG9zaXRpb25ldmVudCwgb3RoZXJ3aXNlIGV4dHJhY3QgaXQgYXQgZmFsbGJhY2sgZXZlbnRzLlxuICBpZiAoaXNDb21wb3NpbmcpIHtcbiAgICBpZiAoZG9tRXZlbnROYW1lID09PSAnY29tcG9zaXRpb25lbmQnIHx8ICFjYW5Vc2VDb21wb3NpdGlvbkV2ZW50ICYmIGlzRmFsbGJhY2tDb21wb3NpdGlvbkVuZChkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KSkge1xuICAgICAgdmFyIGNoYXJzID0gZ2V0RGF0YSgpO1xuICAgICAgcmVzZXQoKTtcbiAgICAgIGlzQ29tcG9zaW5nID0gZmFsc2U7XG4gICAgICByZXR1cm4gY2hhcnM7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzd2l0Y2ggKGRvbUV2ZW50TmFtZSkge1xuICAgIGNhc2UgJ3Bhc3RlJzpcbiAgICAgIC8vIElmIGEgcGFzdGUgZXZlbnQgb2NjdXJzIGFmdGVyIGEga2V5cHJlc3MsIHRocm93IG91dCB0aGUgaW5wdXRcbiAgICAgIC8vIGNoYXJzLiBQYXN0ZSBldmVudHMgc2hvdWxkIG5vdCBsZWFkIHRvIEJlZm9yZUlucHV0IGV2ZW50cy5cbiAgICAgIHJldHVybiBudWxsO1xuXG4gICAgY2FzZSAna2V5cHJlc3MnOlxuICAgICAgLyoqXG4gICAgICAgKiBBcyBvZiB2MjcsIEZpcmVmb3ggbWF5IGZpcmUga2V5cHJlc3MgZXZlbnRzIGV2ZW4gd2hlbiBubyBjaGFyYWN0ZXJcbiAgICAgICAqIHdpbGwgYmUgaW5zZXJ0ZWQuIEEgZmV3IHBvc3NpYmlsaXRpZXM6XG4gICAgICAgKlxuICAgICAgICogLSBgd2hpY2hgIGlzIGAwYC4gQXJyb3cga2V5cywgRXNjIGtleSwgZXRjLlxuICAgICAgICpcbiAgICAgICAqIC0gYHdoaWNoYCBpcyB0aGUgcHJlc3NlZCBrZXkgY29kZSwgYnV0IG5vIGNoYXIgaXMgYXZhaWxhYmxlLlxuICAgICAgICogICBFeDogJ0FsdEdyICsgZGAgaW4gUG9saXNoLiBUaGVyZSBpcyBubyBtb2RpZmllZCBjaGFyYWN0ZXIgZm9yXG4gICAgICAgKiAgIHRoaXMga2V5IGNvbWJpbmF0aW9uIGFuZCBubyBjaGFyYWN0ZXIgaXMgaW5zZXJ0ZWQgaW50byB0aGVcbiAgICAgICAqICAgZG9jdW1lbnQsIGJ1dCBGRiBmaXJlcyB0aGUga2V5cHJlc3MgZm9yIGNoYXIgY29kZSBgMTAwYCBhbnl3YXkuXG4gICAgICAgKiAgIE5vIGBpbnB1dGAgZXZlbnQgd2lsbCBvY2N1ci5cbiAgICAgICAqXG4gICAgICAgKiAtIGB3aGljaGAgaXMgdGhlIHByZXNzZWQga2V5IGNvZGUsIGJ1dCBhIGNvbW1hbmQgY29tYmluYXRpb24gaXNcbiAgICAgICAqICAgYmVpbmcgdXNlZC4gRXg6IGBDbWQrQ2AuIE5vIGNoYXJhY3RlciBpcyBpbnNlcnRlZCwgYW5kIG5vXG4gICAgICAgKiAgIGBpbnB1dGAgZXZlbnQgd2lsbCBvY2N1ci5cbiAgICAgICAqL1xuICAgICAgaWYgKCFpc0tleXByZXNzQ29tbWFuZChuYXRpdmVFdmVudCkpIHtcbiAgICAgICAgLy8gSUUgZmlyZXMgdGhlIGBrZXlwcmVzc2AgZXZlbnQgd2hlbiBhIHVzZXIgdHlwZXMgYW4gZW1vamkgdmlhXG4gICAgICAgIC8vIFRvdWNoIGtleWJvYXJkIG9mIFdpbmRvd3MuICBJbiBzdWNoIGEgY2FzZSwgdGhlIGBjaGFyYCBwcm9wZXJ0eVxuICAgICAgICAvLyBob2xkcyBhbiBlbW9qaSBjaGFyYWN0ZXIgbGlrZSBgXFx1RDgzRFxcdURFMEFgLiAgQmVjYXVzZSBpdHMgbGVuZ3RoXG4gICAgICAgIC8vIGlzIDIsIHRoZSBwcm9wZXJ0eSBgd2hpY2hgIGRvZXMgbm90IHJlcHJlc2VudCBhbiBlbW9qaSBjb3JyZWN0bHkuXG4gICAgICAgIC8vIEluIHN1Y2ggYSBjYXNlLCB3ZSBkaXJlY3RseSByZXR1cm4gdGhlIGBjaGFyYCBwcm9wZXJ0eSBpbnN0ZWFkIG9mXG4gICAgICAgIC8vIHVzaW5nIGB3aGljaGAuXG4gICAgICAgIGlmIChuYXRpdmVFdmVudC5jaGFyICYmIG5hdGl2ZUV2ZW50LmNoYXIubGVuZ3RoID4gMSkge1xuICAgICAgICAgIHJldHVybiBuYXRpdmVFdmVudC5jaGFyO1xuICAgICAgICB9IGVsc2UgaWYgKG5hdGl2ZUV2ZW50LndoaWNoKSB7XG4gICAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUobmF0aXZlRXZlbnQud2hpY2gpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuXG4gICAgY2FzZSAnY29tcG9zaXRpb25lbmQnOlxuICAgICAgcmV0dXJuIHVzZUZhbGxiYWNrQ29tcG9zaXRpb25EYXRhICYmICFpc1VzaW5nS29yZWFuSU1FKG5hdGl2ZUV2ZW50KSA/IG51bGwgOiBuYXRpdmVFdmVudC5kYXRhO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBudWxsO1xuICB9XG59XG4vKipcbiAqIEV4dHJhY3QgYSBTeW50aGV0aWNJbnB1dEV2ZW50IGZvciBgYmVmb3JlSW5wdXRgLCBiYXNlZCBvbiBlaXRoZXIgbmF0aXZlXG4gKiBgdGV4dElucHV0YCBvciBmYWxsYmFjayBiZWhhdmlvci5cbiAqXG4gKiBAcmV0dXJuIHs/b2JqZWN0fSBBIFN5bnRoZXRpY0lucHV0RXZlbnQuXG4gKi9cblxuXG5mdW5jdGlvbiBleHRyYWN0QmVmb3JlSW5wdXRFdmVudChkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCkge1xuICB2YXIgY2hhcnM7XG5cbiAgaWYgKGNhblVzZVRleHRJbnB1dEV2ZW50KSB7XG4gICAgY2hhcnMgPSBnZXROYXRpdmVCZWZvcmVJbnB1dENoYXJzKGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpO1xuICB9IGVsc2Uge1xuICAgIGNoYXJzID0gZ2V0RmFsbGJhY2tCZWZvcmVJbnB1dENoYXJzKGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpO1xuICB9IC8vIElmIG5vIGNoYXJhY3RlcnMgYXJlIGJlaW5nIGluc2VydGVkLCBubyBCZWZvcmVJbnB1dCBldmVudCBzaG91bGRcbiAgLy8gYmUgZmlyZWQuXG5cblxuICBpZiAoIWNoYXJzKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgbGlzdGVuZXJzID0gYWNjdW11bGF0ZVR3b1BoYXNlTGlzdGVuZXJzKHRhcmdldEluc3QsICdvbkJlZm9yZUlucHV0Jyk7XG5cbiAgaWYgKGxpc3RlbmVycy5sZW5ndGggPiAwKSB7XG4gICAgdmFyIGV2ZW50ID0gbmV3IFN5bnRoZXRpY0lucHV0RXZlbnQoJ29uQmVmb3JlSW5wdXQnLCAnYmVmb3JlaW5wdXQnLCBudWxsLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICAgIGRpc3BhdGNoUXVldWUucHVzaCh7XG4gICAgICBldmVudDogZXZlbnQsXG4gICAgICBsaXN0ZW5lcnM6IGxpc3RlbmVyc1xuICAgIH0pO1xuICAgIGV2ZW50LmRhdGEgPSBjaGFycztcbiAgfVxufVxuLyoqXG4gKiBDcmVhdGUgYW4gYG9uQmVmb3JlSW5wdXRgIGV2ZW50IHRvIG1hdGNoXG4gKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEzL1dELURPTS1MZXZlbC0zLUV2ZW50cy0yMDEzMTEwNS8jZXZlbnRzLWlucHV0ZXZlbnRzLlxuICpcbiAqIFRoaXMgZXZlbnQgcGx1Z2luIGlzIGJhc2VkIG9uIHRoZSBuYXRpdmUgYHRleHRJbnB1dGAgZXZlbnRcbiAqIGF2YWlsYWJsZSBpbiBDaHJvbWUsIFNhZmFyaSwgT3BlcmEsIGFuZCBJRS4gVGhpcyBldmVudCBmaXJlcyBhZnRlclxuICogYG9uS2V5UHJlc3NgIGFuZCBgb25Db21wb3NpdGlvbkVuZGAsIGJ1dCBiZWZvcmUgYG9uSW5wdXRgLlxuICpcbiAqIGBiZWZvcmVJbnB1dGAgaXMgc3BlYydkIGJ1dCBub3QgaW1wbGVtZW50ZWQgaW4gYW55IGJyb3dzZXJzLCBhbmRcbiAqIHRoZSBgaW5wdXRgIGV2ZW50IGRvZXMgbm90IHByb3ZpZGUgYW55IHVzZWZ1bCBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IGhhc1xuICogYWN0dWFsbHkgYmVlbiBhZGRlZCwgY29udHJhcnkgdG8gdGhlIHNwZWMuIFRodXMsIGB0ZXh0SW5wdXRgIGlzIHRoZSBiZXN0XG4gKiBhdmFpbGFibGUgZXZlbnQgdG8gaWRlbnRpZnkgdGhlIGNoYXJhY3RlcnMgdGhhdCBoYXZlIGFjdHVhbGx5IGJlZW4gaW5zZXJ0ZWRcbiAqIGludG8gdGhlIHRhcmdldCBub2RlLlxuICpcbiAqIFRoaXMgcGx1Z2luIGlzIGFsc28gcmVzcG9uc2libGUgZm9yIGVtaXR0aW5nIGBjb21wb3NpdGlvbmAgZXZlbnRzLCB0aHVzXG4gKiBhbGxvd2luZyB1cyB0byBzaGFyZSBjb21wb3NpdGlvbiBmYWxsYmFjayBjb2RlIGZvciBib3RoIGBiZWZvcmVJbnB1dGAgYW5kXG4gKiBgY29tcG9zaXRpb25gIGV2ZW50IHR5cGVzLlxuICovXG5cblxuZnVuY3Rpb24gZXh0cmFjdEV2ZW50cyhkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyKSB7XG4gIGV4dHJhY3RDb21wb3NpdGlvbkV2ZW50KGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgZXh0cmFjdEJlZm9yZUlucHV0RXZlbnQoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xufVxuXG4vKipcbiAqIEBzZWUgaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvdGhlLWlucHV0LWVsZW1lbnQuaHRtbCNpbnB1dC10eXBlLWF0dHItc3VtbWFyeVxuICovXG52YXIgc3VwcG9ydGVkSW5wdXRUeXBlcyA9IHtcbiAgY29sb3I6IHRydWUsXG4gIGRhdGU6IHRydWUsXG4gIGRhdGV0aW1lOiB0cnVlLFxuICAnZGF0ZXRpbWUtbG9jYWwnOiB0cnVlLFxuICBlbWFpbDogdHJ1ZSxcbiAgbW9udGg6IHRydWUsXG4gIG51bWJlcjogdHJ1ZSxcbiAgcGFzc3dvcmQ6IHRydWUsXG4gIHJhbmdlOiB0cnVlLFxuICBzZWFyY2g6IHRydWUsXG4gIHRlbDogdHJ1ZSxcbiAgdGV4dDogdHJ1ZSxcbiAgdGltZTogdHJ1ZSxcbiAgdXJsOiB0cnVlLFxuICB3ZWVrOiB0cnVlXG59O1xuXG5mdW5jdGlvbiBpc1RleHRJbnB1dEVsZW1lbnQoZWxlbSkge1xuICB2YXIgbm9kZU5hbWUgPSBlbGVtICYmIGVsZW0ubm9kZU5hbWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gIGlmIChub2RlTmFtZSA9PT0gJ2lucHV0Jykge1xuICAgIHJldHVybiAhIXN1cHBvcnRlZElucHV0VHlwZXNbZWxlbS50eXBlXTtcbiAgfVxuXG4gIGlmIChub2RlTmFtZSA9PT0gJ3RleHRhcmVhJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhbiBldmVudCBpcyBzdXBwb3J0ZWQgaW4gdGhlIGN1cnJlbnQgZXhlY3V0aW9uIGVudmlyb25tZW50LlxuICpcbiAqIE5PVEU6IFRoaXMgd2lsbCBub3Qgd29yayBjb3JyZWN0bHkgZm9yIG5vbi1nZW5lcmljIGV2ZW50cyBzdWNoIGFzIGBjaGFuZ2VgLFxuICogYHJlc2V0YCwgYGxvYWRgLCBgZXJyb3JgLCBhbmQgYHNlbGVjdGAuXG4gKlxuICogQm9ycm93cyBmcm9tIE1vZGVybml6ci5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lU3VmZml4IEV2ZW50IG5hbWUsIGUuZy4gXCJjbGlja1wiLlxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgZXZlbnQgaXMgc3VwcG9ydGVkLlxuICogQGludGVybmFsXG4gKiBAbGljZW5zZSBNb2Rlcm5penIgMy4wLjBwcmUgKEN1c3RvbSBCdWlsZCkgfCBNSVRcbiAqL1xuXG5mdW5jdGlvbiBpc0V2ZW50U3VwcG9ydGVkKGV2ZW50TmFtZVN1ZmZpeCkge1xuICBpZiAoIWNhblVzZURPTSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBldmVudE5hbWUgPSAnb24nICsgZXZlbnROYW1lU3VmZml4O1xuICB2YXIgaXNTdXBwb3J0ZWQgPSAoZXZlbnROYW1lIGluIGRvY3VtZW50KTtcblxuICBpZiAoIWlzU3VwcG9ydGVkKSB7XG4gICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShldmVudE5hbWUsICdyZXR1cm47Jyk7XG4gICAgaXNTdXBwb3J0ZWQgPSB0eXBlb2YgZWxlbWVudFtldmVudE5hbWVdID09PSAnZnVuY3Rpb24nO1xuICB9XG5cbiAgcmV0dXJuIGlzU3VwcG9ydGVkO1xufVxuXG5mdW5jdGlvbiByZWdpc3RlckV2ZW50cyQxKCkge1xuICByZWdpc3RlclR3b1BoYXNlRXZlbnQoJ29uQ2hhbmdlJywgWydjaGFuZ2UnLCAnY2xpY2snLCAnZm9jdXNpbicsICdmb2N1c291dCcsICdpbnB1dCcsICdrZXlkb3duJywgJ2tleXVwJywgJ3NlbGVjdGlvbmNoYW5nZSddKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQW5kQWNjdW11bGF0ZUNoYW5nZUV2ZW50KGRpc3BhdGNoUXVldWUsIGluc3QsIG5hdGl2ZUV2ZW50LCB0YXJnZXQpIHtcbiAgLy8gRmxhZyB0aGlzIGV2ZW50IGxvb3AgYXMgbmVlZGluZyBzdGF0ZSByZXN0b3JlLlxuICBlbnF1ZXVlU3RhdGVSZXN0b3JlKHRhcmdldCk7XG4gIHZhciBsaXN0ZW5lcnMgPSBhY2N1bXVsYXRlVHdvUGhhc2VMaXN0ZW5lcnMoaW5zdCwgJ29uQ2hhbmdlJyk7XG5cbiAgaWYgKGxpc3RlbmVycy5sZW5ndGggPiAwKSB7XG4gICAgdmFyIGV2ZW50ID0gbmV3IFN5bnRoZXRpY0V2ZW50KCdvbkNoYW5nZScsICdjaGFuZ2UnLCBudWxsLCBuYXRpdmVFdmVudCwgdGFyZ2V0KTtcbiAgICBkaXNwYXRjaFF1ZXVlLnB1c2goe1xuICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgbGlzdGVuZXJzOiBsaXN0ZW5lcnNcbiAgICB9KTtcbiAgfVxufVxuLyoqXG4gKiBGb3IgSUUgc2hpbXNcbiAqL1xuXG5cbnZhciBhY3RpdmVFbGVtZW50ID0gbnVsbDtcbnZhciBhY3RpdmVFbGVtZW50SW5zdCA9IG51bGw7XG4vKipcbiAqIFNFQ1RJT046IGhhbmRsZSBgY2hhbmdlYCBldmVudFxuICovXG5cbmZ1bmN0aW9uIHNob3VsZFVzZUNoYW5nZUV2ZW50KGVsZW0pIHtcbiAgdmFyIG5vZGVOYW1lID0gZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiBub2RlTmFtZSA9PT0gJ3NlbGVjdCcgfHwgbm9kZU5hbWUgPT09ICdpbnB1dCcgJiYgZWxlbS50eXBlID09PSAnZmlsZSc7XG59XG5cbmZ1bmN0aW9uIG1hbnVhbERpc3BhdGNoQ2hhbmdlRXZlbnQobmF0aXZlRXZlbnQpIHtcbiAgdmFyIGRpc3BhdGNoUXVldWUgPSBbXTtcbiAgY3JlYXRlQW5kQWNjdW11bGF0ZUNoYW5nZUV2ZW50KGRpc3BhdGNoUXVldWUsIGFjdGl2ZUVsZW1lbnRJbnN0LCBuYXRpdmVFdmVudCwgZ2V0RXZlbnRUYXJnZXQobmF0aXZlRXZlbnQpKTsgLy8gSWYgY2hhbmdlIGFuZCBwcm9wZXJ0eWNoYW5nZSBidWJibGVkLCB3ZSdkIGp1c3QgYmluZCB0byBpdCBsaWtlIGFsbCB0aGVcbiAgLy8gb3RoZXIgZXZlbnRzIGFuZCBoYXZlIGl0IGdvIHRocm91Z2ggUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLiBTaW5jZSBpdFxuICAvLyBkb2Vzbid0LCB3ZSBtYW51YWxseSBsaXN0ZW4gZm9yIHRoZSBldmVudHMgYW5kIHNvIHdlIGhhdmUgdG8gZW5xdWV1ZSBhbmRcbiAgLy8gcHJvY2VzcyB0aGUgYWJzdHJhY3QgZXZlbnQgbWFudWFsbHkuXG4gIC8vXG4gIC8vIEJhdGNoaW5nIGlzIG5lY2Vzc2FyeSBoZXJlIGluIG9yZGVyIHRvIGVuc3VyZSB0aGF0IGFsbCBldmVudCBoYW5kbGVycyBydW5cbiAgLy8gYmVmb3JlIHRoZSBuZXh0IHJlcmVuZGVyIChpbmNsdWRpbmcgZXZlbnQgaGFuZGxlcnMgYXR0YWNoZWQgdG8gYW5jZXN0b3JcbiAgLy8gZWxlbWVudHMgaW5zdGVhZCBvZiBkaXJlY3RseSBvbiB0aGUgaW5wdXQpLiBXaXRob3V0IHRoaXMsIGNvbnRyb2xsZWRcbiAgLy8gY29tcG9uZW50cyBkb24ndCB3b3JrIHByb3Blcmx5IGluIGNvbmp1bmN0aW9uIHdpdGggZXZlbnQgYnViYmxpbmcgYmVjYXVzZVxuICAvLyB0aGUgY29tcG9uZW50IGlzIHJlcmVuZGVyZWQgYW5kIHRoZSB2YWx1ZSByZXZlcnRlZCBiZWZvcmUgYWxsIHRoZSBldmVudFxuICAvLyBoYW5kbGVycyBjYW4gcnVuLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy83MDguXG5cbiAgYmF0Y2hlZFVwZGF0ZXMocnVuRXZlbnRJbkJhdGNoLCBkaXNwYXRjaFF1ZXVlKTtcbn1cblxuZnVuY3Rpb24gcnVuRXZlbnRJbkJhdGNoKGRpc3BhdGNoUXVldWUpIHtcbiAgcHJvY2Vzc0Rpc3BhdGNoUXVldWUoZGlzcGF0Y2hRdWV1ZSwgMCk7XG59XG5cbmZ1bmN0aW9uIGdldEluc3RJZlZhbHVlQ2hhbmdlZCh0YXJnZXRJbnN0KSB7XG4gIHZhciB0YXJnZXROb2RlID0gZ2V0Tm9kZUZyb21JbnN0YW5jZSh0YXJnZXRJbnN0KTtcblxuICBpZiAodXBkYXRlVmFsdWVJZkNoYW5nZWQodGFyZ2V0Tm9kZSkpIHtcbiAgICByZXR1cm4gdGFyZ2V0SW5zdDtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRUYXJnZXRJbnN0Rm9yQ2hhbmdlRXZlbnQoZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0KSB7XG4gIGlmIChkb21FdmVudE5hbWUgPT09ICdjaGFuZ2UnKSB7XG4gICAgcmV0dXJuIHRhcmdldEluc3Q7XG4gIH1cbn1cbi8qKlxuICogU0VDVElPTjogaGFuZGxlIGBpbnB1dGAgZXZlbnRcbiAqL1xuXG5cbnZhciBpc0lucHV0RXZlbnRTdXBwb3J0ZWQgPSBmYWxzZTtcblxuaWYgKGNhblVzZURPTSkge1xuICAvLyBJRTkgY2xhaW1zIHRvIHN1cHBvcnQgdGhlIGlucHV0IGV2ZW50IGJ1dCBmYWlscyB0byB0cmlnZ2VyIGl0IHdoZW5cbiAgLy8gZGVsZXRpbmcgdGV4dCwgc28gd2UgaWdub3JlIGl0cyBpbnB1dCBldmVudHMuXG4gIGlzSW5wdXRFdmVudFN1cHBvcnRlZCA9IGlzRXZlbnRTdXBwb3J0ZWQoJ2lucHV0JykgJiYgKCFkb2N1bWVudC5kb2N1bWVudE1vZGUgfHwgZG9jdW1lbnQuZG9jdW1lbnRNb2RlID4gOSk7XG59XG4vKipcbiAqIChGb3IgSUUgPD05KSBTdGFydHMgdHJhY2tpbmcgcHJvcGVydHljaGFuZ2UgZXZlbnRzIG9uIHRoZSBwYXNzZWQtaW4gZWxlbWVudFxuICogYW5kIG92ZXJyaWRlIHRoZSB2YWx1ZSBwcm9wZXJ0eSBzbyB0aGF0IHdlIGNhbiBkaXN0aW5ndWlzaCB1c2VyIGV2ZW50cyBmcm9tXG4gKiB2YWx1ZSBjaGFuZ2VzIGluIEpTLlxuICovXG5cblxuZnVuY3Rpb24gc3RhcnRXYXRjaGluZ0ZvclZhbHVlQ2hhbmdlKHRhcmdldCwgdGFyZ2V0SW5zdCkge1xuICBhY3RpdmVFbGVtZW50ID0gdGFyZ2V0O1xuICBhY3RpdmVFbGVtZW50SW5zdCA9IHRhcmdldEluc3Q7XG4gIGFjdGl2ZUVsZW1lbnQuYXR0YWNoRXZlbnQoJ29ucHJvcGVydHljaGFuZ2UnLCBoYW5kbGVQcm9wZXJ0eUNoYW5nZSk7XG59XG4vKipcbiAqIChGb3IgSUUgPD05KSBSZW1vdmVzIHRoZSBldmVudCBsaXN0ZW5lcnMgZnJvbSB0aGUgY3VycmVudGx5LXRyYWNrZWQgZWxlbWVudCxcbiAqIGlmIGFueSBleGlzdHMuXG4gKi9cblxuXG5mdW5jdGlvbiBzdG9wV2F0Y2hpbmdGb3JWYWx1ZUNoYW5nZSgpIHtcbiAgaWYgKCFhY3RpdmVFbGVtZW50KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgYWN0aXZlRWxlbWVudC5kZXRhY2hFdmVudCgnb25wcm9wZXJ0eWNoYW5nZScsIGhhbmRsZVByb3BlcnR5Q2hhbmdlKTtcbiAgYWN0aXZlRWxlbWVudCA9IG51bGw7XG4gIGFjdGl2ZUVsZW1lbnRJbnN0ID0gbnVsbDtcbn1cbi8qKlxuICogKEZvciBJRSA8PTkpIEhhbmRsZXMgYSBwcm9wZXJ0eWNoYW5nZSBldmVudCwgc2VuZGluZyBhIGBjaGFuZ2VgIGV2ZW50IGlmXG4gKiB0aGUgdmFsdWUgb2YgdGhlIGFjdGl2ZSBlbGVtZW50IGhhcyBjaGFuZ2VkLlxuICovXG5cblxuZnVuY3Rpb24gaGFuZGxlUHJvcGVydHlDaGFuZ2UobmF0aXZlRXZlbnQpIHtcbiAgaWYgKG5hdGl2ZUV2ZW50LnByb3BlcnR5TmFtZSAhPT0gJ3ZhbHVlJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChnZXRJbnN0SWZWYWx1ZUNoYW5nZWQoYWN0aXZlRWxlbWVudEluc3QpKSB7XG4gICAgbWFudWFsRGlzcGF0Y2hDaGFuZ2VFdmVudChuYXRpdmVFdmVudCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlRXZlbnRzRm9ySW5wdXRFdmVudFBvbHlmaWxsKGRvbUV2ZW50TmFtZSwgdGFyZ2V0LCB0YXJnZXRJbnN0KSB7XG4gIGlmIChkb21FdmVudE5hbWUgPT09ICdmb2N1c2luJykge1xuICAgIC8vIEluIElFOSwgcHJvcGVydHljaGFuZ2UgZmlyZXMgZm9yIG1vc3QgaW5wdXQgZXZlbnRzIGJ1dCBpcyBidWdneSBhbmRcbiAgICAvLyBkb2Vzbid0IGZpcmUgd2hlbiB0ZXh0IGlzIGRlbGV0ZWQsIGJ1dCBjb252ZW5pZW50bHksIHNlbGVjdGlvbmNoYW5nZVxuICAgIC8vIGFwcGVhcnMgdG8gZmlyZSBpbiBhbGwgb2YgdGhlIHJlbWFpbmluZyBjYXNlcyBzbyB3ZSBjYXRjaCB0aG9zZSBhbmRcbiAgICAvLyBmb3J3YXJkIHRoZSBldmVudCBpZiB0aGUgdmFsdWUgaGFzIGNoYW5nZWRcbiAgICAvLyBJbiBlaXRoZXIgY2FzZSwgd2UgZG9uJ3Qgd2FudCB0byBjYWxsIHRoZSBldmVudCBoYW5kbGVyIGlmIHRoZSB2YWx1ZVxuICAgIC8vIGlzIGNoYW5nZWQgZnJvbSBKUyBzbyB3ZSByZWRlZmluZSBhIHNldHRlciBmb3IgYC52YWx1ZWAgdGhhdCB1cGRhdGVzXG4gICAgLy8gb3VyIGFjdGl2ZUVsZW1lbnRWYWx1ZSB2YXJpYWJsZSwgYWxsb3dpbmcgdXMgdG8gaWdub3JlIHRob3NlIGNoYW5nZXNcbiAgICAvL1xuICAgIC8vIHN0b3BXYXRjaGluZygpIHNob3VsZCBiZSBhIG5vb3AgaGVyZSBidXQgd2UgY2FsbCBpdCBqdXN0IGluIGNhc2Ugd2VcbiAgICAvLyBtaXNzZWQgYSBibHVyIGV2ZW50IHNvbWVob3cuXG4gICAgc3RvcFdhdGNoaW5nRm9yVmFsdWVDaGFuZ2UoKTtcbiAgICBzdGFydFdhdGNoaW5nRm9yVmFsdWVDaGFuZ2UodGFyZ2V0LCB0YXJnZXRJbnN0KTtcbiAgfSBlbHNlIGlmIChkb21FdmVudE5hbWUgPT09ICdmb2N1c291dCcpIHtcbiAgICBzdG9wV2F0Y2hpbmdGb3JWYWx1ZUNoYW5nZSgpO1xuICB9XG59IC8vIEZvciBJRTggYW5kIElFOS5cblxuXG5mdW5jdGlvbiBnZXRUYXJnZXRJbnN0Rm9ySW5wdXRFdmVudFBvbHlmaWxsKGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCkge1xuICBpZiAoZG9tRXZlbnROYW1lID09PSAnc2VsZWN0aW9uY2hhbmdlJyB8fCBkb21FdmVudE5hbWUgPT09ICdrZXl1cCcgfHwgZG9tRXZlbnROYW1lID09PSAna2V5ZG93bicpIHtcbiAgICAvLyBPbiB0aGUgc2VsZWN0aW9uY2hhbmdlIGV2ZW50LCB0aGUgdGFyZ2V0IGlzIGp1c3QgZG9jdW1lbnQgd2hpY2ggaXNuJ3RcbiAgICAvLyBoZWxwZnVsIGZvciB1cyBzbyBqdXN0IGNoZWNrIGFjdGl2ZUVsZW1lbnQgaW5zdGVhZC5cbiAgICAvL1xuICAgIC8vIDk5JSBvZiB0aGUgdGltZSwga2V5ZG93biBhbmQga2V5dXAgYXJlbid0IG5lY2Vzc2FyeS4gSUU4IGZhaWxzIHRvIGZpcmVcbiAgICAvLyBwcm9wZXJ0eWNoYW5nZSBvbiB0aGUgZmlyc3QgaW5wdXQgZXZlbnQgYWZ0ZXIgc2V0dGluZyBgdmFsdWVgIGZyb20gYVxuICAgIC8vIHNjcmlwdCBhbmQgZmlyZXMgb25seSBrZXlkb3duLCBrZXlwcmVzcywga2V5dXAuIENhdGNoaW5nIGtleXVwIHVzdWFsbHlcbiAgICAvLyBnZXRzIGl0IGFuZCBjYXRjaGluZyBrZXlkb3duIGxldHMgdXMgZmlyZSBhbiBldmVudCBmb3IgdGhlIGZpcnN0XG4gICAgLy8ga2V5c3Ryb2tlIGlmIHVzZXIgZG9lcyBhIGtleSByZXBlYXQgKGl0J2xsIGJlIGEgbGl0dGxlIGRlbGF5ZWQ6IHJpZ2h0XG4gICAgLy8gYmVmb3JlIHRoZSBzZWNvbmQga2V5c3Ryb2tlKS4gT3RoZXIgaW5wdXQgbWV0aG9kcyAoZS5nLiwgcGFzdGUpIHNlZW0gdG9cbiAgICAvLyBmaXJlIHNlbGVjdGlvbmNoYW5nZSBub3JtYWxseS5cbiAgICByZXR1cm4gZ2V0SW5zdElmVmFsdWVDaGFuZ2VkKGFjdGl2ZUVsZW1lbnRJbnN0KTtcbiAgfVxufVxuLyoqXG4gKiBTRUNUSU9OOiBoYW5kbGUgYGNsaWNrYCBldmVudFxuICovXG5cblxuZnVuY3Rpb24gc2hvdWxkVXNlQ2xpY2tFdmVudChlbGVtKSB7XG4gIC8vIFVzZSB0aGUgYGNsaWNrYCBldmVudCB0byBkZXRlY3QgY2hhbmdlcyB0byBjaGVja2JveCBhbmQgcmFkaW8gaW5wdXRzLlxuICAvLyBUaGlzIGFwcHJvYWNoIHdvcmtzIGFjcm9zcyBhbGwgYnJvd3NlcnMsIHdoZXJlYXMgYGNoYW5nZWAgZG9lcyBub3QgZmlyZVxuICAvLyB1bnRpbCBgYmx1cmAgaW4gSUU4LlxuICB2YXIgbm9kZU5hbWUgPSBlbGVtLm5vZGVOYW1lO1xuICByZXR1cm4gbm9kZU5hbWUgJiYgbm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2lucHV0JyAmJiAoZWxlbS50eXBlID09PSAnY2hlY2tib3gnIHx8IGVsZW0udHlwZSA9PT0gJ3JhZGlvJyk7XG59XG5cbmZ1bmN0aW9uIGdldFRhcmdldEluc3RGb3JDbGlja0V2ZW50KGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCkge1xuICBpZiAoZG9tRXZlbnROYW1lID09PSAnY2xpY2snKSB7XG4gICAgcmV0dXJuIGdldEluc3RJZlZhbHVlQ2hhbmdlZCh0YXJnZXRJbnN0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRUYXJnZXRJbnN0Rm9ySW5wdXRPckNoYW5nZUV2ZW50KGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCkge1xuICBpZiAoZG9tRXZlbnROYW1lID09PSAnaW5wdXQnIHx8IGRvbUV2ZW50TmFtZSA9PT0gJ2NoYW5nZScpIHtcbiAgICByZXR1cm4gZ2V0SW5zdElmVmFsdWVDaGFuZ2VkKHRhcmdldEluc3QpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUNvbnRyb2xsZWRJbnB1dEJsdXIobm9kZSkge1xuICB2YXIgc3RhdGUgPSBub2RlLl93cmFwcGVyU3RhdGU7XG5cbiAgaWYgKCFzdGF0ZSB8fCAhc3RhdGUuY29udHJvbGxlZCB8fCBub2RlLnR5cGUgIT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAge1xuICAgIC8vIElmIGNvbnRyb2xsZWQsIGFzc2lnbiB0aGUgdmFsdWUgYXR0cmlidXRlIHRvIHRoZSBjdXJyZW50IHZhbHVlIG9uIGJsdXJcbiAgICBzZXREZWZhdWx0VmFsdWUobm9kZSwgJ251bWJlcicsIG5vZGUudmFsdWUpO1xuICB9XG59XG4vKipcbiAqIFRoaXMgcGx1Z2luIGNyZWF0ZXMgYW4gYG9uQ2hhbmdlYCBldmVudCB0aGF0IG5vcm1hbGl6ZXMgY2hhbmdlIGV2ZW50c1xuICogYWNyb3NzIGZvcm0gZWxlbWVudHMuIFRoaXMgZXZlbnQgZmlyZXMgYXQgYSB0aW1lIHdoZW4gaXQncyBwb3NzaWJsZSB0b1xuICogY2hhbmdlIHRoZSBlbGVtZW50J3MgdmFsdWUgd2l0aG91dCBzZWVpbmcgYSBmbGlja2VyLlxuICpcbiAqIFN1cHBvcnRlZCBlbGVtZW50cyBhcmU6XG4gKiAtIGlucHV0IChzZWUgYGlzVGV4dElucHV0RWxlbWVudGApXG4gKiAtIHRleHRhcmVhXG4gKiAtIHNlbGVjdFxuICovXG5cblxuZnVuY3Rpb24gZXh0cmFjdEV2ZW50cyQxKGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0LCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIpIHtcbiAgdmFyIHRhcmdldE5vZGUgPSB0YXJnZXRJbnN0ID8gZ2V0Tm9kZUZyb21JbnN0YW5jZSh0YXJnZXRJbnN0KSA6IHdpbmRvdztcbiAgdmFyIGdldFRhcmdldEluc3RGdW5jLCBoYW5kbGVFdmVudEZ1bmM7XG5cbiAgaWYgKHNob3VsZFVzZUNoYW5nZUV2ZW50KHRhcmdldE5vZGUpKSB7XG4gICAgZ2V0VGFyZ2V0SW5zdEZ1bmMgPSBnZXRUYXJnZXRJbnN0Rm9yQ2hhbmdlRXZlbnQ7XG4gIH0gZWxzZSBpZiAoaXNUZXh0SW5wdXRFbGVtZW50KHRhcmdldE5vZGUpKSB7XG4gICAgaWYgKGlzSW5wdXRFdmVudFN1cHBvcnRlZCkge1xuICAgICAgZ2V0VGFyZ2V0SW5zdEZ1bmMgPSBnZXRUYXJnZXRJbnN0Rm9ySW5wdXRPckNoYW5nZUV2ZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICBnZXRUYXJnZXRJbnN0RnVuYyA9IGdldFRhcmdldEluc3RGb3JJbnB1dEV2ZW50UG9seWZpbGw7XG4gICAgICBoYW5kbGVFdmVudEZ1bmMgPSBoYW5kbGVFdmVudHNGb3JJbnB1dEV2ZW50UG9seWZpbGw7XG4gICAgfVxuICB9IGVsc2UgaWYgKHNob3VsZFVzZUNsaWNrRXZlbnQodGFyZ2V0Tm9kZSkpIHtcbiAgICBnZXRUYXJnZXRJbnN0RnVuYyA9IGdldFRhcmdldEluc3RGb3JDbGlja0V2ZW50O1xuICB9XG5cbiAgaWYgKGdldFRhcmdldEluc3RGdW5jKSB7XG4gICAgdmFyIGluc3QgPSBnZXRUYXJnZXRJbnN0RnVuYyhkb21FdmVudE5hbWUsIHRhcmdldEluc3QpO1xuXG4gICAgaWYgKGluc3QpIHtcbiAgICAgIGNyZWF0ZUFuZEFjY3VtdWxhdGVDaGFuZ2VFdmVudChkaXNwYXRjaFF1ZXVlLCBpbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGlmIChoYW5kbGVFdmVudEZ1bmMpIHtcbiAgICBoYW5kbGVFdmVudEZ1bmMoZG9tRXZlbnROYW1lLCB0YXJnZXROb2RlLCB0YXJnZXRJbnN0KTtcbiAgfSAvLyBXaGVuIGJsdXJyaW5nLCBzZXQgdGhlIHZhbHVlIGF0dHJpYnV0ZSBmb3IgbnVtYmVyIGlucHV0c1xuXG5cbiAgaWYgKGRvbUV2ZW50TmFtZSA9PT0gJ2ZvY3Vzb3V0Jykge1xuICAgIGhhbmRsZUNvbnRyb2xsZWRJbnB1dEJsdXIodGFyZ2V0Tm9kZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVnaXN0ZXJFdmVudHMkMigpIHtcbiAgcmVnaXN0ZXJEaXJlY3RFdmVudCgnb25Nb3VzZUVudGVyJywgWydtb3VzZW91dCcsICdtb3VzZW92ZXInXSk7XG4gIHJlZ2lzdGVyRGlyZWN0RXZlbnQoJ29uTW91c2VMZWF2ZScsIFsnbW91c2VvdXQnLCAnbW91c2VvdmVyJ10pO1xuICByZWdpc3RlckRpcmVjdEV2ZW50KCdvblBvaW50ZXJFbnRlcicsIFsncG9pbnRlcm91dCcsICdwb2ludGVyb3ZlciddKTtcbiAgcmVnaXN0ZXJEaXJlY3RFdmVudCgnb25Qb2ludGVyTGVhdmUnLCBbJ3BvaW50ZXJvdXQnLCAncG9pbnRlcm92ZXInXSk7XG59XG4vKipcbiAqIEZvciBhbG1vc3QgZXZlcnkgaW50ZXJhY3Rpb24gd2UgY2FyZSBhYm91dCwgdGhlcmUgd2lsbCBiZSBib3RoIGEgdG9wLWxldmVsXG4gKiBgbW91c2VvdmVyYCBhbmQgYG1vdXNlb3V0YCBldmVudCB0aGF0IG9jY3Vycy4gT25seSB1c2UgYG1vdXNlb3V0YCBzbyB0aGF0XG4gKiB3ZSBkbyBub3QgZXh0cmFjdCBkdXBsaWNhdGUgZXZlbnRzLiBIb3dldmVyLCBtb3ZpbmcgdGhlIG1vdXNlIGludG8gdGhlXG4gKiBicm93c2VyIGZyb20gb3V0c2lkZSB3aWxsIG5vdCBmaXJlIGEgYG1vdXNlb3V0YCBldmVudC4gSW4gdGhpcyBjYXNlLCB3ZSB1c2VcbiAqIHRoZSBgbW91c2VvdmVyYCB0b3AtbGV2ZWwgZXZlbnQuXG4gKi9cblxuXG5mdW5jdGlvbiBleHRyYWN0RXZlbnRzJDIoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lcikge1xuICB2YXIgaXNPdmVyRXZlbnQgPSBkb21FdmVudE5hbWUgPT09ICdtb3VzZW92ZXInIHx8IGRvbUV2ZW50TmFtZSA9PT0gJ3BvaW50ZXJvdmVyJztcbiAgdmFyIGlzT3V0RXZlbnQgPSBkb21FdmVudE5hbWUgPT09ICdtb3VzZW91dCcgfHwgZG9tRXZlbnROYW1lID09PSAncG9pbnRlcm91dCc7XG5cbiAgaWYgKGlzT3ZlckV2ZW50ICYmIChldmVudFN5c3RlbUZsYWdzICYgSVNfUkVQTEFZRUQpID09PSAwKSB7XG4gICAgLy8gSWYgdGhpcyBpcyBhbiBvdmVyIGV2ZW50IHdpdGggYSB0YXJnZXQsIHdlIG1pZ2h0IGhhdmUgYWxyZWFkeSBkaXNwYXRjaGVkXG4gICAgLy8gdGhlIGV2ZW50IGluIHRoZSBvdXQgZXZlbnQgb2YgdGhlIG90aGVyIHRhcmdldC4gSWYgdGhpcyBpcyByZXBsYXllZCxcbiAgICAvLyB0aGVuIGl0J3MgYmVjYXVzZSB3ZSBjb3VsZG4ndCBkaXNwYXRjaCBhZ2FpbnN0IHRoaXMgdGFyZ2V0IHByZXZpb3VzbHlcbiAgICAvLyBzbyB3ZSBoYXZlIHRvIGRvIGl0IG5vdyBpbnN0ZWFkLlxuICAgIHZhciByZWxhdGVkID0gbmF0aXZlRXZlbnQucmVsYXRlZFRhcmdldCB8fCBuYXRpdmVFdmVudC5mcm9tRWxlbWVudDtcblxuICAgIGlmIChyZWxhdGVkKSB7XG4gICAgICAvLyBJZiB0aGUgcmVsYXRlZCBub2RlIGlzIG1hbmFnZWQgYnkgUmVhY3QsIHdlIGNhbiBhc3N1bWUgdGhhdCB3ZSBoYXZlXG4gICAgICAvLyBhbHJlYWR5IGRpc3BhdGNoZWQgdGhlIGNvcnJlc3BvbmRpbmcgZXZlbnRzIGR1cmluZyBpdHMgbW91c2VvdXQuXG4gICAgICBpZiAoZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUocmVsYXRlZCkgfHwgaXNDb250YWluZXJNYXJrZWRBc1Jvb3QocmVsYXRlZCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmICghaXNPdXRFdmVudCAmJiAhaXNPdmVyRXZlbnQpIHtcbiAgICAvLyBNdXN0IG5vdCBiZSBhIG1vdXNlIG9yIHBvaW50ZXIgaW4gb3Igb3V0IC0gaWdub3JpbmcuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHdpbjsgLy8gVE9ETzogd2h5IGlzIHRoaXMgbnVsbGFibGUgaW4gdGhlIHR5cGVzIGJ1dCB3ZSByZWFkIGZyb20gaXQ/XG5cbiAgaWYgKG5hdGl2ZUV2ZW50VGFyZ2V0LndpbmRvdyA9PT0gbmF0aXZlRXZlbnRUYXJnZXQpIHtcbiAgICAvLyBgbmF0aXZlRXZlbnRUYXJnZXRgIGlzIHByb2JhYmx5IGEgd2luZG93IG9iamVjdC5cbiAgICB3aW4gPSBuYXRpdmVFdmVudFRhcmdldDtcbiAgfSBlbHNlIHtcbiAgICAvLyBUT0RPOiBGaWd1cmUgb3V0IHdoeSBgb3duZXJEb2N1bWVudGAgaXMgc29tZXRpbWVzIHVuZGVmaW5lZCBpbiBJRTguXG4gICAgdmFyIGRvYyA9IG5hdGl2ZUV2ZW50VGFyZ2V0Lm93bmVyRG9jdW1lbnQ7XG5cbiAgICBpZiAoZG9jKSB7XG4gICAgICB3aW4gPSBkb2MuZGVmYXVsdFZpZXcgfHwgZG9jLnBhcmVudFdpbmRvdztcbiAgICB9IGVsc2Uge1xuICAgICAgd2luID0gd2luZG93O1xuICAgIH1cbiAgfVxuXG4gIHZhciBmcm9tO1xuICB2YXIgdG87XG5cbiAgaWYgKGlzT3V0RXZlbnQpIHtcbiAgICB2YXIgX3JlbGF0ZWQgPSBuYXRpdmVFdmVudC5yZWxhdGVkVGFyZ2V0IHx8IG5hdGl2ZUV2ZW50LnRvRWxlbWVudDtcblxuICAgIGZyb20gPSB0YXJnZXRJbnN0O1xuICAgIHRvID0gX3JlbGF0ZWQgPyBnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZShfcmVsYXRlZCkgOiBudWxsO1xuXG4gICAgaWYgKHRvICE9PSBudWxsKSB7XG4gICAgICB2YXIgbmVhcmVzdE1vdW50ZWQgPSBnZXROZWFyZXN0TW91bnRlZEZpYmVyKHRvKTtcblxuICAgICAgaWYgKHRvICE9PSBuZWFyZXN0TW91bnRlZCB8fCB0by50YWcgIT09IEhvc3RDb21wb25lbnQgJiYgdG8udGFnICE9PSBIb3N0VGV4dCkge1xuICAgICAgICB0byA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIE1vdmluZyB0byBhIG5vZGUgZnJvbSBvdXRzaWRlIHRoZSB3aW5kb3cuXG4gICAgZnJvbSA9IG51bGw7XG4gICAgdG8gPSB0YXJnZXRJbnN0O1xuICB9XG5cbiAgaWYgKGZyb20gPT09IHRvKSB7XG4gICAgLy8gTm90aGluZyBwZXJ0YWlucyB0byBvdXIgbWFuYWdlZCBjb21wb25lbnRzLlxuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNNb3VzZUV2ZW50O1xuICB2YXIgbGVhdmVFdmVudFR5cGUgPSAnb25Nb3VzZUxlYXZlJztcbiAgdmFyIGVudGVyRXZlbnRUeXBlID0gJ29uTW91c2VFbnRlcic7XG4gIHZhciBldmVudFR5cGVQcmVmaXggPSAnbW91c2UnO1xuXG4gIGlmIChkb21FdmVudE5hbWUgPT09ICdwb2ludGVyb3V0JyB8fCBkb21FdmVudE5hbWUgPT09ICdwb2ludGVyb3ZlcicpIHtcbiAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNQb2ludGVyRXZlbnQ7XG4gICAgbGVhdmVFdmVudFR5cGUgPSAnb25Qb2ludGVyTGVhdmUnO1xuICAgIGVudGVyRXZlbnRUeXBlID0gJ29uUG9pbnRlckVudGVyJztcbiAgICBldmVudFR5cGVQcmVmaXggPSAncG9pbnRlcic7XG4gIH1cblxuICB2YXIgZnJvbU5vZGUgPSBmcm9tID09IG51bGwgPyB3aW4gOiBnZXROb2RlRnJvbUluc3RhbmNlKGZyb20pO1xuICB2YXIgdG9Ob2RlID0gdG8gPT0gbnVsbCA/IHdpbiA6IGdldE5vZGVGcm9tSW5zdGFuY2UodG8pO1xuICB2YXIgbGVhdmUgPSBuZXcgU3ludGhldGljRXZlbnRDdG9yKGxlYXZlRXZlbnRUeXBlLCBldmVudFR5cGVQcmVmaXggKyAnbGVhdmUnLCBmcm9tLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICBsZWF2ZS50YXJnZXQgPSBmcm9tTm9kZTtcbiAgbGVhdmUucmVsYXRlZFRhcmdldCA9IHRvTm9kZTtcbiAgdmFyIGVudGVyID0gbnVsbDsgLy8gV2Ugc2hvdWxkIG9ubHkgcHJvY2VzcyB0aGlzIG5hdGl2ZUV2ZW50IGlmIHdlIGFyZSBwcm9jZXNzaW5nXG4gIC8vIHRoZSBmaXJzdCBhbmNlc3Rvci4gTmV4dCB0aW1lLCB3ZSB3aWxsIGlnbm9yZSB0aGUgZXZlbnQuXG5cbiAgdmFyIG5hdGl2ZVRhcmdldEluc3QgPSBnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZShuYXRpdmVFdmVudFRhcmdldCk7XG5cbiAgaWYgKG5hdGl2ZVRhcmdldEluc3QgPT09IHRhcmdldEluc3QpIHtcbiAgICB2YXIgZW50ZXJFdmVudCA9IG5ldyBTeW50aGV0aWNFdmVudEN0b3IoZW50ZXJFdmVudFR5cGUsIGV2ZW50VHlwZVByZWZpeCArICdlbnRlcicsIHRvLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICAgIGVudGVyRXZlbnQudGFyZ2V0ID0gdG9Ob2RlO1xuICAgIGVudGVyRXZlbnQucmVsYXRlZFRhcmdldCA9IGZyb21Ob2RlO1xuICAgIGVudGVyID0gZW50ZXJFdmVudDtcbiAgfVxuXG4gIGFjY3VtdWxhdGVFbnRlckxlYXZlVHdvUGhhc2VMaXN0ZW5lcnMoZGlzcGF0Y2hRdWV1ZSwgbGVhdmUsIGVudGVyLCBmcm9tLCB0byk7XG59XG5cbi8qKlxuICogaW5saW5lZCBPYmplY3QuaXMgcG9seWZpbGwgdG8gYXZvaWQgcmVxdWlyaW5nIGNvbnN1bWVycyBzaGlwIHRoZWlyIG93blxuICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2lzXG4gKi9cbmZ1bmN0aW9uIGlzKHgsIHkpIHtcbiAgcmV0dXJuIHggPT09IHkgJiYgKHggIT09IDAgfHwgMSAvIHggPT09IDEgLyB5KSB8fCB4ICE9PSB4ICYmIHkgIT09IHkgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgO1xufVxuXG52YXIgb2JqZWN0SXMgPSB0eXBlb2YgT2JqZWN0LmlzID09PSAnZnVuY3Rpb24nID8gT2JqZWN0LmlzIDogaXM7XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSQyID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbi8qKlxuICogUGVyZm9ybXMgZXF1YWxpdHkgYnkgaXRlcmF0aW5nIHRocm91Z2gga2V5cyBvbiBhbiBvYmplY3QgYW5kIHJldHVybmluZyBmYWxzZVxuICogd2hlbiBhbnkga2V5IGhhcyB2YWx1ZXMgd2hpY2ggYXJlIG5vdCBzdHJpY3RseSBlcXVhbCBiZXR3ZWVuIHRoZSBhcmd1bWVudHMuXG4gKiBSZXR1cm5zIHRydWUgd2hlbiB0aGUgdmFsdWVzIG9mIGFsbCBrZXlzIGFyZSBzdHJpY3RseSBlcXVhbC5cbiAqL1xuXG5mdW5jdGlvbiBzaGFsbG93RXF1YWwob2JqQSwgb2JqQikge1xuICBpZiAob2JqZWN0SXMob2JqQSwgb2JqQikpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb2JqQSAhPT0gJ29iamVjdCcgfHwgb2JqQSA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqQiAhPT0gJ29iamVjdCcgfHwgb2JqQiA9PT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBrZXlzQSA9IE9iamVjdC5rZXlzKG9iakEpO1xuICB2YXIga2V5c0IgPSBPYmplY3Qua2V5cyhvYmpCKTtcblxuICBpZiAoa2V5c0EubGVuZ3RoICE9PSBrZXlzQi5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gLy8gVGVzdCBmb3IgQSdzIGtleXMgZGlmZmVyZW50IGZyb20gQi5cblxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5c0EubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoIWhhc093blByb3BlcnR5JDIuY2FsbChvYmpCLCBrZXlzQVtpXSkgfHwgIW9iamVjdElzKG9iakFba2V5c0FbaV1dLCBvYmpCW2tleXNBW2ldXSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBHaXZlbiBhbnkgbm9kZSByZXR1cm4gdGhlIGZpcnN0IGxlYWYgbm9kZSB3aXRob3V0IGNoaWxkcmVuLlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudHxET01UZXh0Tm9kZX0gbm9kZVxuICogQHJldHVybiB7RE9NRWxlbWVudHxET01UZXh0Tm9kZX1cbiAqL1xuXG5mdW5jdGlvbiBnZXRMZWFmTm9kZShub2RlKSB7XG4gIHdoaWxlIChub2RlICYmIG5vZGUuZmlyc3RDaGlsZCkge1xuICAgIG5vZGUgPSBub2RlLmZpcnN0Q2hpbGQ7XG4gIH1cblxuICByZXR1cm4gbm9kZTtcbn1cbi8qKlxuICogR2V0IHRoZSBuZXh0IHNpYmxpbmcgd2l0aGluIGEgY29udGFpbmVyLiBUaGlzIHdpbGwgd2FsayB1cCB0aGVcbiAqIERPTSBpZiBhIG5vZGUncyBzaWJsaW5ncyBoYXZlIGJlZW4gZXhoYXVzdGVkLlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudHxET01UZXh0Tm9kZX0gbm9kZVxuICogQHJldHVybiB7P0RPTUVsZW1lbnR8RE9NVGV4dE5vZGV9XG4gKi9cblxuXG5mdW5jdGlvbiBnZXRTaWJsaW5nTm9kZShub2RlKSB7XG4gIHdoaWxlIChub2RlKSB7XG4gICAgaWYgKG5vZGUubmV4dFNpYmxpbmcpIHtcbiAgICAgIHJldHVybiBub2RlLm5leHRTaWJsaW5nO1xuICAgIH1cblxuICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGU7XG4gIH1cbn1cbi8qKlxuICogR2V0IG9iamVjdCBkZXNjcmliaW5nIHRoZSBub2RlcyB3aGljaCBjb250YWluIGNoYXJhY3RlcnMgYXQgb2Zmc2V0LlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudHxET01UZXh0Tm9kZX0gcm9vdFxuICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldFxuICogQHJldHVybiB7P29iamVjdH1cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldE5vZGVGb3JDaGFyYWN0ZXJPZmZzZXQocm9vdCwgb2Zmc2V0KSB7XG4gIHZhciBub2RlID0gZ2V0TGVhZk5vZGUocm9vdCk7XG4gIHZhciBub2RlU3RhcnQgPSAwO1xuICB2YXIgbm9kZUVuZCA9IDA7XG5cbiAgd2hpbGUgKG5vZGUpIHtcbiAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gVEVYVF9OT0RFKSB7XG4gICAgICBub2RlRW5kID0gbm9kZVN0YXJ0ICsgbm9kZS50ZXh0Q29udGVudC5sZW5ndGg7XG5cbiAgICAgIGlmIChub2RlU3RhcnQgPD0gb2Zmc2V0ICYmIG5vZGVFbmQgPj0gb2Zmc2V0KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbm9kZTogbm9kZSxcbiAgICAgICAgICBvZmZzZXQ6IG9mZnNldCAtIG5vZGVTdGFydFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBub2RlU3RhcnQgPSBub2RlRW5kO1xuICAgIH1cblxuICAgIG5vZGUgPSBnZXRMZWFmTm9kZShnZXRTaWJsaW5nTm9kZShub2RlKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR9IG91dGVyTm9kZVxuICogQHJldHVybiB7P29iamVjdH1cbiAqL1xuXG5mdW5jdGlvbiBnZXRPZmZzZXRzKG91dGVyTm9kZSkge1xuICB2YXIgb3duZXJEb2N1bWVudCA9IG91dGVyTm9kZS5vd25lckRvY3VtZW50O1xuICB2YXIgd2luID0gb3duZXJEb2N1bWVudCAmJiBvd25lckRvY3VtZW50LmRlZmF1bHRWaWV3IHx8IHdpbmRvdztcbiAgdmFyIHNlbGVjdGlvbiA9IHdpbi5nZXRTZWxlY3Rpb24gJiYgd2luLmdldFNlbGVjdGlvbigpO1xuXG4gIGlmICghc2VsZWN0aW9uIHx8IHNlbGVjdGlvbi5yYW5nZUNvdW50ID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgYW5jaG9yTm9kZSA9IHNlbGVjdGlvbi5hbmNob3JOb2RlLFxuICAgICAgYW5jaG9yT2Zmc2V0ID0gc2VsZWN0aW9uLmFuY2hvck9mZnNldCxcbiAgICAgIGZvY3VzTm9kZSA9IHNlbGVjdGlvbi5mb2N1c05vZGUsXG4gICAgICBmb2N1c09mZnNldCA9IHNlbGVjdGlvbi5mb2N1c09mZnNldDsgLy8gSW4gRmlyZWZveCwgYW5jaG9yTm9kZSBhbmQgZm9jdXNOb2RlIGNhbiBiZSBcImFub255bW91cyBkaXZzXCIsIGUuZy4gdGhlXG4gIC8vIHVwL2Rvd24gYnV0dG9ucyBvbiBhbiA8aW5wdXQgdHlwZT1cIm51bWJlclwiPi4gQW5vbnltb3VzIGRpdnMgZG8gbm90IHNlZW0gdG9cbiAgLy8gZXhwb3NlIHByb3BlcnRpZXMsIHRyaWdnZXJpbmcgYSBcIlBlcm1pc3Npb24gZGVuaWVkIGVycm9yXCIgaWYgYW55IG9mIGl0c1xuICAvLyBwcm9wZXJ0aWVzIGFyZSBhY2Nlc3NlZC4gVGhlIG9ubHkgc2VlbWluZ2x5IHBvc3NpYmxlIHdheSB0byBhdm9pZCBlcnJvcmluZ1xuICAvLyBpcyB0byBhY2Nlc3MgYSBwcm9wZXJ0eSB0aGF0IHR5cGljYWxseSB3b3JrcyBmb3Igbm9uLWFub255bW91cyBkaXZzIGFuZFxuICAvLyBjYXRjaCBhbnkgZXJyb3IgdGhhdCBtYXkgb3RoZXJ3aXNlIGFyaXNlLiBTZWVcbiAgLy8gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA4NDI3XG5cbiAgdHJ5IHtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtZXhwcmVzc2lvbnMgKi9cbiAgICBhbmNob3JOb2RlLm5vZGVUeXBlO1xuICAgIGZvY3VzTm9kZS5ub2RlVHlwZTtcbiAgICAvKiBlc2xpbnQtZW5hYmxlIG5vLXVudXNlZC1leHByZXNzaW9ucyAqL1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gZ2V0TW9kZXJuT2Zmc2V0c0Zyb21Qb2ludHMob3V0ZXJOb2RlLCBhbmNob3JOb2RlLCBhbmNob3JPZmZzZXQsIGZvY3VzTm9kZSwgZm9jdXNPZmZzZXQpO1xufVxuLyoqXG4gKiBSZXR1cm5zIHtzdGFydCwgZW5kfSB3aGVyZSBgc3RhcnRgIGlzIHRoZSBjaGFyYWN0ZXIvY29kZXBvaW50IGluZGV4IG9mXG4gKiAoYW5jaG9yTm9kZSwgYW5jaG9yT2Zmc2V0KSB3aXRoaW4gdGhlIHRleHRDb250ZW50IG9mIGBvdXRlck5vZGVgLCBhbmRcbiAqIGBlbmRgIGlzIHRoZSBpbmRleCBvZiAoZm9jdXNOb2RlLCBmb2N1c09mZnNldCkuXG4gKlxuICogUmV0dXJucyBudWxsIGlmIHlvdSBwYXNzIGluIGdhcmJhZ2UgaW5wdXQgYnV0IHdlIHNob3VsZCBwcm9iYWJseSBqdXN0IGNyYXNoLlxuICpcbiAqIEV4cG9ydGVkIG9ubHkgZm9yIHRlc3RpbmcuXG4gKi9cblxuZnVuY3Rpb24gZ2V0TW9kZXJuT2Zmc2V0c0Zyb21Qb2ludHMob3V0ZXJOb2RlLCBhbmNob3JOb2RlLCBhbmNob3JPZmZzZXQsIGZvY3VzTm9kZSwgZm9jdXNPZmZzZXQpIHtcbiAgdmFyIGxlbmd0aCA9IDA7XG4gIHZhciBzdGFydCA9IC0xO1xuICB2YXIgZW5kID0gLTE7XG4gIHZhciBpbmRleFdpdGhpbkFuY2hvciA9IDA7XG4gIHZhciBpbmRleFdpdGhpbkZvY3VzID0gMDtcbiAgdmFyIG5vZGUgPSBvdXRlck5vZGU7XG4gIHZhciBwYXJlbnROb2RlID0gbnVsbDtcblxuICBvdXRlcjogd2hpbGUgKHRydWUpIHtcbiAgICB2YXIgbmV4dCA9IG51bGw7XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKG5vZGUgPT09IGFuY2hvck5vZGUgJiYgKGFuY2hvck9mZnNldCA9PT0gMCB8fCBub2RlLm5vZGVUeXBlID09PSBURVhUX05PREUpKSB7XG4gICAgICAgIHN0YXJ0ID0gbGVuZ3RoICsgYW5jaG9yT2Zmc2V0O1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZSA9PT0gZm9jdXNOb2RlICYmIChmb2N1c09mZnNldCA9PT0gMCB8fCBub2RlLm5vZGVUeXBlID09PSBURVhUX05PREUpKSB7XG4gICAgICAgIGVuZCA9IGxlbmd0aCArIGZvY3VzT2Zmc2V0O1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gVEVYVF9OT0RFKSB7XG4gICAgICAgIGxlbmd0aCArPSBub2RlLm5vZGVWYWx1ZS5sZW5ndGg7XG4gICAgICB9XG5cbiAgICAgIGlmICgobmV4dCA9IG5vZGUuZmlyc3RDaGlsZCkgPT09IG51bGwpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9IC8vIE1vdmluZyBmcm9tIGBub2RlYCB0byBpdHMgZmlyc3QgY2hpbGQgYG5leHRgLlxuXG5cbiAgICAgIHBhcmVudE5vZGUgPSBub2RlO1xuICAgICAgbm9kZSA9IG5leHQ7XG4gICAgfVxuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmIChub2RlID09PSBvdXRlck5vZGUpIHtcbiAgICAgICAgLy8gSWYgYG91dGVyTm9kZWAgaGFzIGNoaWxkcmVuLCB0aGlzIGlzIGFsd2F5cyB0aGUgc2Vjb25kIHRpbWUgdmlzaXRpbmdcbiAgICAgICAgLy8gaXQuIElmIGl0IGhhcyBubyBjaGlsZHJlbiwgdGhpcyBpcyBzdGlsbCB0aGUgZmlyc3QgbG9vcCwgYW5kIHRoZSBvbmx5XG4gICAgICAgIC8vIHZhbGlkIHNlbGVjdGlvbiBpcyBhbmNob3JOb2RlIGFuZCBmb2N1c05vZGUgYm90aCBlcXVhbCB0byB0aGlzIG5vZGVcbiAgICAgICAgLy8gYW5kIGJvdGggb2Zmc2V0cyAwLCBpbiB3aGljaCBjYXNlIHdlIHdpbGwgaGF2ZSBoYW5kbGVkIGFib3ZlLlxuICAgICAgICBicmVhayBvdXRlcjtcbiAgICAgIH1cblxuICAgICAgaWYgKHBhcmVudE5vZGUgPT09IGFuY2hvck5vZGUgJiYgKytpbmRleFdpdGhpbkFuY2hvciA9PT0gYW5jaG9yT2Zmc2V0KSB7XG4gICAgICAgIHN0YXJ0ID0gbGVuZ3RoO1xuICAgICAgfVxuXG4gICAgICBpZiAocGFyZW50Tm9kZSA9PT0gZm9jdXNOb2RlICYmICsraW5kZXhXaXRoaW5Gb2N1cyA9PT0gZm9jdXNPZmZzZXQpIHtcbiAgICAgICAgZW5kID0gbGVuZ3RoO1xuICAgICAgfVxuXG4gICAgICBpZiAoKG5leHQgPSBub2RlLm5leHRTaWJsaW5nKSAhPT0gbnVsbCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgbm9kZSA9IHBhcmVudE5vZGU7XG4gICAgICBwYXJlbnROb2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICAgIH0gLy8gTW92aW5nIGZyb20gYG5vZGVgIHRvIGl0cyBuZXh0IHNpYmxpbmcgYG5leHRgLlxuXG5cbiAgICBub2RlID0gbmV4dDtcbiAgfVxuXG4gIGlmIChzdGFydCA9PT0gLTEgfHwgZW5kID09PSAtMSkge1xuICAgIC8vIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbi4gKFdvdWxkIGhhcHBlbiBpZiB0aGUgYW5jaG9yL2ZvY3VzIG5vZGVzIGFyZW4ndFxuICAgIC8vIGFjdHVhbGx5IGluc2lkZSB0aGUgcGFzc2VkLWluIG5vZGUuKVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzdGFydDogc3RhcnQsXG4gICAgZW5kOiBlbmRcbiAgfTtcbn1cbi8qKlxuICogSW4gbW9kZXJuIG5vbi1JRSBicm93c2Vycywgd2UgY2FuIHN1cHBvcnQgYm90aCBmb3J3YXJkIGFuZCBiYWNrd2FyZFxuICogc2VsZWN0aW9ucy5cbiAqXG4gKiBOb3RlOiBJRTEwKyBzdXBwb3J0cyB0aGUgU2VsZWN0aW9uIG9iamVjdCwgYnV0IGl0IGRvZXMgbm90IHN1cHBvcnRcbiAqIHRoZSBgZXh0ZW5kYCBtZXRob2QsIHdoaWNoIG1lYW5zIHRoYXQgZXZlbiBpbiBtb2Rlcm4gSUUsIGl0J3Mgbm90IHBvc3NpYmxlXG4gKiB0byBwcm9ncmFtbWF0aWNhbGx5IGNyZWF0ZSBhIGJhY2t3YXJkIHNlbGVjdGlvbi4gVGh1cywgZm9yIGFsbCBJRVxuICogdmVyc2lvbnMsIHdlIHVzZSB0aGUgb2xkIElFIEFQSSB0byBjcmVhdGUgb3VyIHNlbGVjdGlvbnMuXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fERPTVRleHROb2RlfSBub2RlXG4gKiBAcGFyYW0ge29iamVjdH0gb2Zmc2V0c1xuICovXG5cbmZ1bmN0aW9uIHNldE9mZnNldHMobm9kZSwgb2Zmc2V0cykge1xuICB2YXIgZG9jID0gbm9kZS5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50O1xuICB2YXIgd2luID0gZG9jICYmIGRvYy5kZWZhdWx0VmlldyB8fCB3aW5kb3c7IC8vIEVkZ2UgZmFpbHMgd2l0aCBcIk9iamVjdCBleHBlY3RlZFwiIGluIHNvbWUgc2NlbmFyaW9zLlxuICAvLyAoRm9yIGluc3RhbmNlOiBUaW55TUNFIGVkaXRvciB1c2VkIGluIGEgbGlzdCBjb21wb25lbnQgdGhhdCBzdXBwb3J0cyBwYXN0aW5nIHRvIGFkZCBtb3JlLFxuICAvLyBmYWlscyB3aGVuIHBhc3RpbmcgMTAwKyBpdGVtcylcblxuICBpZiAoIXdpbi5nZXRTZWxlY3Rpb24pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgc2VsZWN0aW9uID0gd2luLmdldFNlbGVjdGlvbigpO1xuICB2YXIgbGVuZ3RoID0gbm9kZS50ZXh0Q29udGVudC5sZW5ndGg7XG4gIHZhciBzdGFydCA9IE1hdGgubWluKG9mZnNldHMuc3RhcnQsIGxlbmd0aCk7XG4gIHZhciBlbmQgPSBvZmZzZXRzLmVuZCA9PT0gdW5kZWZpbmVkID8gc3RhcnQgOiBNYXRoLm1pbihvZmZzZXRzLmVuZCwgbGVuZ3RoKTsgLy8gSUUgMTEgdXNlcyBtb2Rlcm4gc2VsZWN0aW9uLCBidXQgZG9lc24ndCBzdXBwb3J0IHRoZSBleHRlbmQgbWV0aG9kLlxuICAvLyBGbGlwIGJhY2t3YXJkIHNlbGVjdGlvbnMsIHNvIHdlIGNhbiBzZXQgd2l0aCBhIHNpbmdsZSByYW5nZS5cblxuICBpZiAoIXNlbGVjdGlvbi5leHRlbmQgJiYgc3RhcnQgPiBlbmQpIHtcbiAgICB2YXIgdGVtcCA9IGVuZDtcbiAgICBlbmQgPSBzdGFydDtcbiAgICBzdGFydCA9IHRlbXA7XG4gIH1cblxuICB2YXIgc3RhcnRNYXJrZXIgPSBnZXROb2RlRm9yQ2hhcmFjdGVyT2Zmc2V0KG5vZGUsIHN0YXJ0KTtcbiAgdmFyIGVuZE1hcmtlciA9IGdldE5vZGVGb3JDaGFyYWN0ZXJPZmZzZXQobm9kZSwgZW5kKTtcblxuICBpZiAoc3RhcnRNYXJrZXIgJiYgZW5kTWFya2VyKSB7XG4gICAgaWYgKHNlbGVjdGlvbi5yYW5nZUNvdW50ID09PSAxICYmIHNlbGVjdGlvbi5hbmNob3JOb2RlID09PSBzdGFydE1hcmtlci5ub2RlICYmIHNlbGVjdGlvbi5hbmNob3JPZmZzZXQgPT09IHN0YXJ0TWFya2VyLm9mZnNldCAmJiBzZWxlY3Rpb24uZm9jdXNOb2RlID09PSBlbmRNYXJrZXIubm9kZSAmJiBzZWxlY3Rpb24uZm9jdXNPZmZzZXQgPT09IGVuZE1hcmtlci5vZmZzZXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgcmFuZ2UgPSBkb2MuY3JlYXRlUmFuZ2UoKTtcbiAgICByYW5nZS5zZXRTdGFydChzdGFydE1hcmtlci5ub2RlLCBzdGFydE1hcmtlci5vZmZzZXQpO1xuICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcblxuICAgIGlmIChzdGFydCA+IGVuZCkge1xuICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlKTtcbiAgICAgIHNlbGVjdGlvbi5leHRlbmQoZW5kTWFya2VyLm5vZGUsIGVuZE1hcmtlci5vZmZzZXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByYW5nZS5zZXRFbmQoZW5kTWFya2VyLm5vZGUsIGVuZE1hcmtlci5vZmZzZXQpO1xuICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNUZXh0Tm9kZShub2RlKSB7XG4gIHJldHVybiBub2RlICYmIG5vZGUubm9kZVR5cGUgPT09IFRFWFRfTk9ERTtcbn1cblxuZnVuY3Rpb24gY29udGFpbnNOb2RlKG91dGVyTm9kZSwgaW5uZXJOb2RlKSB7XG4gIGlmICghb3V0ZXJOb2RlIHx8ICFpbm5lck5vZGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gZWxzZSBpZiAob3V0ZXJOb2RlID09PSBpbm5lck5vZGUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIGlmIChpc1RleHROb2RlKG91dGVyTm9kZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gZWxzZSBpZiAoaXNUZXh0Tm9kZShpbm5lck5vZGUpKSB7XG4gICAgcmV0dXJuIGNvbnRhaW5zTm9kZShvdXRlck5vZGUsIGlubmVyTm9kZS5wYXJlbnROb2RlKTtcbiAgfSBlbHNlIGlmICgnY29udGFpbnMnIGluIG91dGVyTm9kZSkge1xuICAgIHJldHVybiBvdXRlck5vZGUuY29udGFpbnMoaW5uZXJOb2RlKTtcbiAgfSBlbHNlIGlmIChvdXRlck5vZGUuY29tcGFyZURvY3VtZW50UG9zaXRpb24pIHtcbiAgICByZXR1cm4gISEob3V0ZXJOb2RlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGlubmVyTm9kZSkgJiAxNik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzSW5Eb2N1bWVudChub2RlKSB7XG4gIHJldHVybiBub2RlICYmIG5vZGUub3duZXJEb2N1bWVudCAmJiBjb250YWluc05vZGUobm9kZS5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgbm9kZSk7XG59XG5cbmZ1bmN0aW9uIGlzU2FtZU9yaWdpbkZyYW1lKGlmcmFtZSkge1xuICB0cnkge1xuICAgIC8vIEFjY2Vzc2luZyB0aGUgY29udGVudERvY3VtZW50IG9mIGEgSFRNTElmcmFtZUVsZW1lbnQgY2FuIGNhdXNlIHRoZSBicm93c2VyXG4gICAgLy8gdG8gdGhyb3csIGUuZy4gaWYgaXQgaGFzIGEgY3Jvc3Mtb3JpZ2luIHNyYyBhdHRyaWJ1dGUuXG4gICAgLy8gU2FmYXJpIHdpbGwgc2hvdyBhbiBlcnJvciBpbiB0aGUgY29uc29sZSB3aGVuIHRoZSBhY2Nlc3MgcmVzdWx0cyBpbiBcIkJsb2NrZWQgYSBmcmFtZSB3aXRoIG9yaWdpblwiLiBlLmc6XG4gICAgLy8gaWZyYW1lLmNvbnRlbnREb2N1bWVudC5kZWZhdWx0VmlldztcbiAgICAvLyBBIHNhZmV0eSB3YXkgaXMgdG8gYWNjZXNzIG9uZSBvZiB0aGUgY3Jvc3Mgb3JpZ2luIHByb3BlcnRpZXM6IFdpbmRvdyBvciBMb2NhdGlvblxuICAgIC8vIFdoaWNoIG1pZ2h0IHJlc3VsdCBpbiBcIlNlY3VyaXR5RXJyb3JcIiBET00gRXhjZXB0aW9uIGFuZCBpdCBpcyBjb21wYXRpYmxlIHRvIFNhZmFyaS5cbiAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9icm93c2Vycy5odG1sI2ludGVncmF0aW9uLXdpdGgtaWRsXG4gICAgcmV0dXJuIHR5cGVvZiBpZnJhbWUuY29udGVudFdpbmRvdy5sb2NhdGlvbi5ocmVmID09PSAnc3RyaW5nJztcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldEFjdGl2ZUVsZW1lbnREZWVwKCkge1xuICB2YXIgd2luID0gd2luZG93O1xuICB2YXIgZWxlbWVudCA9IGdldEFjdGl2ZUVsZW1lbnQoKTtcblxuICB3aGlsZSAoZWxlbWVudCBpbnN0YW5jZW9mIHdpbi5IVE1MSUZyYW1lRWxlbWVudCkge1xuICAgIGlmIChpc1NhbWVPcmlnaW5GcmFtZShlbGVtZW50KSkge1xuICAgICAgd2luID0gZWxlbWVudC5jb250ZW50V2luZG93O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG5cbiAgICBlbGVtZW50ID0gZ2V0QWN0aXZlRWxlbWVudCh3aW4uZG9jdW1lbnQpO1xuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQ7XG59XG4vKipcbiAqIEBSZWFjdElucHV0U2VsZWN0aW9uOiBSZWFjdCBpbnB1dCBzZWxlY3Rpb24gbW9kdWxlLiBCYXNlZCBvbiBTZWxlY3Rpb24uanMsXG4gKiBidXQgbW9kaWZpZWQgdG8gYmUgc3VpdGFibGUgZm9yIHJlYWN0IGFuZCBoYXMgYSBjb3VwbGUgb2YgYnVnIGZpeGVzIChkb2Vzbid0XG4gKiBhc3N1bWUgYnV0dG9ucyBoYXZlIHJhbmdlIHNlbGVjdGlvbnMgYWxsb3dlZCkuXG4gKiBJbnB1dCBzZWxlY3Rpb24gbW9kdWxlIGZvciBSZWFjdC5cbiAqL1xuXG4vKipcbiAqIEBoYXNTZWxlY3Rpb25DYXBhYmlsaXRpZXM6IHdlIGdldCB0aGUgZWxlbWVudCB0eXBlcyB0aGF0IHN1cHBvcnQgc2VsZWN0aW9uXG4gKiBmcm9tIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI2RvLW5vdC1hcHBseSwgbG9va2luZyBhdCBgc2VsZWN0aW9uU3RhcnRgXG4gKiBhbmQgYHNlbGVjdGlvbkVuZGAgcm93cy5cbiAqL1xuXG5cbmZ1bmN0aW9uIGhhc1NlbGVjdGlvbkNhcGFiaWxpdGllcyhlbGVtKSB7XG4gIHZhciBub2RlTmFtZSA9IGVsZW0gJiYgZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiBub2RlTmFtZSAmJiAobm9kZU5hbWUgPT09ICdpbnB1dCcgJiYgKGVsZW0udHlwZSA9PT0gJ3RleHQnIHx8IGVsZW0udHlwZSA9PT0gJ3NlYXJjaCcgfHwgZWxlbS50eXBlID09PSAndGVsJyB8fCBlbGVtLnR5cGUgPT09ICd1cmwnIHx8IGVsZW0udHlwZSA9PT0gJ3Bhc3N3b3JkJykgfHwgbm9kZU5hbWUgPT09ICd0ZXh0YXJlYScgfHwgZWxlbS5jb250ZW50RWRpdGFibGUgPT09ICd0cnVlJyk7XG59XG5mdW5jdGlvbiBnZXRTZWxlY3Rpb25JbmZvcm1hdGlvbigpIHtcbiAgdmFyIGZvY3VzZWRFbGVtID0gZ2V0QWN0aXZlRWxlbWVudERlZXAoKTtcbiAgcmV0dXJuIHtcbiAgICBmb2N1c2VkRWxlbTogZm9jdXNlZEVsZW0sXG4gICAgc2VsZWN0aW9uUmFuZ2U6IGhhc1NlbGVjdGlvbkNhcGFiaWxpdGllcyhmb2N1c2VkRWxlbSkgPyBnZXRTZWxlY3Rpb24oZm9jdXNlZEVsZW0pIDogbnVsbFxuICB9O1xufVxuLyoqXG4gKiBAcmVzdG9yZVNlbGVjdGlvbjogSWYgYW55IHNlbGVjdGlvbiBpbmZvcm1hdGlvbiB3YXMgcG90ZW50aWFsbHkgbG9zdCxcbiAqIHJlc3RvcmUgaXQuIFRoaXMgaXMgdXNlZnVsIHdoZW4gcGVyZm9ybWluZyBvcGVyYXRpb25zIHRoYXQgY291bGQgcmVtb3ZlIGRvbVxuICogbm9kZXMgYW5kIHBsYWNlIHRoZW0gYmFjayBpbiwgcmVzdWx0aW5nIGluIGZvY3VzIGJlaW5nIGxvc3QuXG4gKi9cblxuZnVuY3Rpb24gcmVzdG9yZVNlbGVjdGlvbihwcmlvclNlbGVjdGlvbkluZm9ybWF0aW9uKSB7XG4gIHZhciBjdXJGb2N1c2VkRWxlbSA9IGdldEFjdGl2ZUVsZW1lbnREZWVwKCk7XG4gIHZhciBwcmlvckZvY3VzZWRFbGVtID0gcHJpb3JTZWxlY3Rpb25JbmZvcm1hdGlvbi5mb2N1c2VkRWxlbTtcbiAgdmFyIHByaW9yU2VsZWN0aW9uUmFuZ2UgPSBwcmlvclNlbGVjdGlvbkluZm9ybWF0aW9uLnNlbGVjdGlvblJhbmdlO1xuXG4gIGlmIChjdXJGb2N1c2VkRWxlbSAhPT0gcHJpb3JGb2N1c2VkRWxlbSAmJiBpc0luRG9jdW1lbnQocHJpb3JGb2N1c2VkRWxlbSkpIHtcbiAgICBpZiAocHJpb3JTZWxlY3Rpb25SYW5nZSAhPT0gbnVsbCAmJiBoYXNTZWxlY3Rpb25DYXBhYmlsaXRpZXMocHJpb3JGb2N1c2VkRWxlbSkpIHtcbiAgICAgIHNldFNlbGVjdGlvbihwcmlvckZvY3VzZWRFbGVtLCBwcmlvclNlbGVjdGlvblJhbmdlKTtcbiAgICB9IC8vIEZvY3VzaW5nIGEgbm9kZSBjYW4gY2hhbmdlIHRoZSBzY3JvbGwgcG9zaXRpb24sIHdoaWNoIGlzIHVuZGVzaXJhYmxlXG5cblxuICAgIHZhciBhbmNlc3RvcnMgPSBbXTtcbiAgICB2YXIgYW5jZXN0b3IgPSBwcmlvckZvY3VzZWRFbGVtO1xuXG4gICAgd2hpbGUgKGFuY2VzdG9yID0gYW5jZXN0b3IucGFyZW50Tm9kZSkge1xuICAgICAgaWYgKGFuY2VzdG9yLm5vZGVUeXBlID09PSBFTEVNRU5UX05PREUpIHtcbiAgICAgICAgYW5jZXN0b3JzLnB1c2goe1xuICAgICAgICAgIGVsZW1lbnQ6IGFuY2VzdG9yLFxuICAgICAgICAgIGxlZnQ6IGFuY2VzdG9yLnNjcm9sbExlZnQsXG4gICAgICAgICAgdG9wOiBhbmNlc3Rvci5zY3JvbGxUb3BcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBwcmlvckZvY3VzZWRFbGVtLmZvY3VzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBwcmlvckZvY3VzZWRFbGVtLmZvY3VzKCk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbmNlc3RvcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpbmZvID0gYW5jZXN0b3JzW2ldO1xuICAgICAgaW5mby5lbGVtZW50LnNjcm9sbExlZnQgPSBpbmZvLmxlZnQ7XG4gICAgICBpbmZvLmVsZW1lbnQuc2Nyb2xsVG9wID0gaW5mby50b3A7XG4gICAgfVxuICB9XG59XG4vKipcbiAqIEBnZXRTZWxlY3Rpb246IEdldHMgdGhlIHNlbGVjdGlvbiBib3VuZHMgb2YgYSBmb2N1c2VkIHRleHRhcmVhLCBpbnB1dCBvclxuICogY29udGVudEVkaXRhYmxlIG5vZGUuXG4gKiAtQGlucHV0OiBMb29rIHVwIHNlbGVjdGlvbiBib3VuZHMgb2YgdGhpcyBpbnB1dFxuICogLUByZXR1cm4ge3N0YXJ0OiBzZWxlY3Rpb25TdGFydCwgZW5kOiBzZWxlY3Rpb25FbmR9XG4gKi9cblxuZnVuY3Rpb24gZ2V0U2VsZWN0aW9uKGlucHV0KSB7XG4gIHZhciBzZWxlY3Rpb247XG5cbiAgaWYgKCdzZWxlY3Rpb25TdGFydCcgaW4gaW5wdXQpIHtcbiAgICAvLyBNb2Rlcm4gYnJvd3NlciB3aXRoIGlucHV0IG9yIHRleHRhcmVhLlxuICAgIHNlbGVjdGlvbiA9IHtcbiAgICAgIHN0YXJ0OiBpbnB1dC5zZWxlY3Rpb25TdGFydCxcbiAgICAgIGVuZDogaW5wdXQuc2VsZWN0aW9uRW5kXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICAvLyBDb250ZW50IGVkaXRhYmxlIG9yIG9sZCBJRSB0ZXh0YXJlYS5cbiAgICBzZWxlY3Rpb24gPSBnZXRPZmZzZXRzKGlucHV0KTtcbiAgfVxuXG4gIHJldHVybiBzZWxlY3Rpb24gfHwge1xuICAgIHN0YXJ0OiAwLFxuICAgIGVuZDogMFxuICB9O1xufVxuLyoqXG4gKiBAc2V0U2VsZWN0aW9uOiBTZXRzIHRoZSBzZWxlY3Rpb24gYm91bmRzIG9mIGEgdGV4dGFyZWEgb3IgaW5wdXQgYW5kIGZvY3VzZXNcbiAqIHRoZSBpbnB1dC5cbiAqIC1AaW5wdXQgICAgIFNldCBzZWxlY3Rpb24gYm91bmRzIG9mIHRoaXMgaW5wdXQgb3IgdGV4dGFyZWFcbiAqIC1Ab2Zmc2V0cyAgIE9iamVjdCBvZiBzYW1lIGZvcm0gdGhhdCBpcyByZXR1cm5lZCBmcm9tIGdldCpcbiAqL1xuXG5mdW5jdGlvbiBzZXRTZWxlY3Rpb24oaW5wdXQsIG9mZnNldHMpIHtcbiAgdmFyIHN0YXJ0ID0gb2Zmc2V0cy5zdGFydDtcbiAgdmFyIGVuZCA9IG9mZnNldHMuZW5kO1xuXG4gIGlmIChlbmQgPT09IHVuZGVmaW5lZCkge1xuICAgIGVuZCA9IHN0YXJ0O1xuICB9XG5cbiAgaWYgKCdzZWxlY3Rpb25TdGFydCcgaW4gaW5wdXQpIHtcbiAgICBpbnB1dC5zZWxlY3Rpb25TdGFydCA9IHN0YXJ0O1xuICAgIGlucHV0LnNlbGVjdGlvbkVuZCA9IE1hdGgubWluKGVuZCwgaW5wdXQudmFsdWUubGVuZ3RoKTtcbiAgfSBlbHNlIHtcbiAgICBzZXRPZmZzZXRzKGlucHV0LCBvZmZzZXRzKTtcbiAgfVxufVxuXG52YXIgc2tpcFNlbGVjdGlvbkNoYW5nZUV2ZW50ID0gY2FuVXNlRE9NICYmICdkb2N1bWVudE1vZGUnIGluIGRvY3VtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50TW9kZSA8PSAxMTtcblxuZnVuY3Rpb24gcmVnaXN0ZXJFdmVudHMkMygpIHtcbiAgcmVnaXN0ZXJUd29QaGFzZUV2ZW50KCdvblNlbGVjdCcsIFsnZm9jdXNvdXQnLCAnY29udGV4dG1lbnUnLCAnZHJhZ2VuZCcsICdmb2N1c2luJywgJ2tleWRvd24nLCAna2V5dXAnLCAnbW91c2Vkb3duJywgJ21vdXNldXAnLCAnc2VsZWN0aW9uY2hhbmdlJ10pO1xufVxuXG52YXIgYWN0aXZlRWxlbWVudCQxID0gbnVsbDtcbnZhciBhY3RpdmVFbGVtZW50SW5zdCQxID0gbnVsbDtcbnZhciBsYXN0U2VsZWN0aW9uID0gbnVsbDtcbnZhciBtb3VzZURvd24gPSBmYWxzZTtcbi8qKlxuICogR2V0IGFuIG9iamVjdCB3aGljaCBpcyBhIHVuaXF1ZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgY3VycmVudCBzZWxlY3Rpb24uXG4gKlxuICogVGhlIHJldHVybiB2YWx1ZSB3aWxsIG5vdCBiZSBjb25zaXN0ZW50IGFjcm9zcyBub2RlcyBvciBicm93c2VycywgYnV0XG4gKiB0d28gaWRlbnRpY2FsIHNlbGVjdGlvbnMgb24gdGhlIHNhbWUgbm9kZSB3aWxsIHJldHVybiBpZGVudGljYWwgb2JqZWN0cy5cbiAqL1xuXG5mdW5jdGlvbiBnZXRTZWxlY3Rpb24kMShub2RlKSB7XG4gIGlmICgnc2VsZWN0aW9uU3RhcnQnIGluIG5vZGUgJiYgaGFzU2VsZWN0aW9uQ2FwYWJpbGl0aWVzKG5vZGUpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXJ0OiBub2RlLnNlbGVjdGlvblN0YXJ0LFxuICAgICAgZW5kOiBub2RlLnNlbGVjdGlvbkVuZFxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgdmFyIHdpbiA9IG5vZGUub3duZXJEb2N1bWVudCAmJiBub2RlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcgfHwgd2luZG93O1xuICAgIHZhciBzZWxlY3Rpb24gPSB3aW4uZ2V0U2VsZWN0aW9uKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFuY2hvck5vZGU6IHNlbGVjdGlvbi5hbmNob3JOb2RlLFxuICAgICAgYW5jaG9yT2Zmc2V0OiBzZWxlY3Rpb24uYW5jaG9yT2Zmc2V0LFxuICAgICAgZm9jdXNOb2RlOiBzZWxlY3Rpb24uZm9jdXNOb2RlLFxuICAgICAgZm9jdXNPZmZzZXQ6IHNlbGVjdGlvbi5mb2N1c09mZnNldFxuICAgIH07XG4gIH1cbn1cbi8qKlxuICogR2V0IGRvY3VtZW50IGFzc29jaWF0ZWQgd2l0aCB0aGUgZXZlbnQgdGFyZ2V0LlxuICovXG5cblxuZnVuY3Rpb24gZ2V0RXZlbnRUYXJnZXREb2N1bWVudChldmVudFRhcmdldCkge1xuICByZXR1cm4gZXZlbnRUYXJnZXQud2luZG93ID09PSBldmVudFRhcmdldCA/IGV2ZW50VGFyZ2V0LmRvY3VtZW50IDogZXZlbnRUYXJnZXQubm9kZVR5cGUgPT09IERPQ1VNRU5UX05PREUgPyBldmVudFRhcmdldCA6IGV2ZW50VGFyZ2V0Lm93bmVyRG9jdW1lbnQ7XG59XG4vKipcbiAqIFBvbGwgc2VsZWN0aW9uIHRvIHNlZSB3aGV0aGVyIGl0J3MgY2hhbmdlZC5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnRcbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudFRhcmdldFxuICogQHJldHVybiB7P1N5bnRoZXRpY0V2ZW50fVxuICovXG5cblxuZnVuY3Rpb24gY29uc3RydWN0U2VsZWN0RXZlbnQoZGlzcGF0Y2hRdWV1ZSwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KSB7XG4gIC8vIEVuc3VyZSB3ZSBoYXZlIHRoZSByaWdodCBlbGVtZW50LCBhbmQgdGhhdCB0aGUgdXNlciBpcyBub3QgZHJhZ2dpbmcgYVxuICAvLyBzZWxlY3Rpb24gKHRoaXMgbWF0Y2hlcyBuYXRpdmUgYHNlbGVjdGAgZXZlbnQgYmVoYXZpb3IpLiBJbiBIVE1MNSwgc2VsZWN0XG4gIC8vIGZpcmVzIG9ubHkgb24gaW5wdXQgYW5kIHRleHRhcmVhIHRodXMgaWYgdGhlcmUncyBubyBmb2N1c2VkIGVsZW1lbnQgd2VcbiAgLy8gd29uJ3QgZGlzcGF0Y2guXG4gIHZhciBkb2MgPSBnZXRFdmVudFRhcmdldERvY3VtZW50KG5hdGl2ZUV2ZW50VGFyZ2V0KTtcblxuICBpZiAobW91c2VEb3duIHx8IGFjdGl2ZUVsZW1lbnQkMSA9PSBudWxsIHx8IGFjdGl2ZUVsZW1lbnQkMSAhPT0gZ2V0QWN0aXZlRWxlbWVudChkb2MpKSB7XG4gICAgcmV0dXJuO1xuICB9IC8vIE9ubHkgZmlyZSB3aGVuIHNlbGVjdGlvbiBoYXMgYWN0dWFsbHkgY2hhbmdlZC5cblxuXG4gIHZhciBjdXJyZW50U2VsZWN0aW9uID0gZ2V0U2VsZWN0aW9uJDEoYWN0aXZlRWxlbWVudCQxKTtcblxuICBpZiAoIWxhc3RTZWxlY3Rpb24gfHwgIXNoYWxsb3dFcXVhbChsYXN0U2VsZWN0aW9uLCBjdXJyZW50U2VsZWN0aW9uKSkge1xuICAgIGxhc3RTZWxlY3Rpb24gPSBjdXJyZW50U2VsZWN0aW9uO1xuICAgIHZhciBsaXN0ZW5lcnMgPSBhY2N1bXVsYXRlVHdvUGhhc2VMaXN0ZW5lcnMoYWN0aXZlRWxlbWVudEluc3QkMSwgJ29uU2VsZWN0Jyk7XG5cbiAgICBpZiAobGlzdGVuZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIHZhciBldmVudCA9IG5ldyBTeW50aGV0aWNFdmVudCgnb25TZWxlY3QnLCAnc2VsZWN0JywgbnVsbCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgICAgIGRpc3BhdGNoUXVldWUucHVzaCh7XG4gICAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgICAgbGlzdGVuZXJzOiBsaXN0ZW5lcnNcbiAgICAgIH0pO1xuICAgICAgZXZlbnQudGFyZ2V0ID0gYWN0aXZlRWxlbWVudCQxO1xuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBUaGlzIHBsdWdpbiBjcmVhdGVzIGFuIGBvblNlbGVjdGAgZXZlbnQgdGhhdCBub3JtYWxpemVzIHNlbGVjdCBldmVudHNcbiAqIGFjcm9zcyBmb3JtIGVsZW1lbnRzLlxuICpcbiAqIFN1cHBvcnRlZCBlbGVtZW50cyBhcmU6XG4gKiAtIGlucHV0IChzZWUgYGlzVGV4dElucHV0RWxlbWVudGApXG4gKiAtIHRleHRhcmVhXG4gKiAtIGNvbnRlbnRFZGl0YWJsZVxuICpcbiAqIFRoaXMgZGlmZmVycyBmcm9tIG5hdGl2ZSBicm93c2VyIGltcGxlbWVudGF0aW9ucyBpbiB0aGUgZm9sbG93aW5nIHdheXM6XG4gKiAtIEZpcmVzIG9uIGNvbnRlbnRFZGl0YWJsZSBmaWVsZHMgYXMgd2VsbCBhcyBpbnB1dHMuXG4gKiAtIEZpcmVzIGZvciBjb2xsYXBzZWQgc2VsZWN0aW9uLlxuICogLSBGaXJlcyBhZnRlciB1c2VyIGlucHV0LlxuICovXG5cblxuZnVuY3Rpb24gZXh0cmFjdEV2ZW50cyQzKGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0LCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIpIHtcblxuICB2YXIgdGFyZ2V0Tm9kZSA9IHRhcmdldEluc3QgPyBnZXROb2RlRnJvbUluc3RhbmNlKHRhcmdldEluc3QpIDogd2luZG93O1xuXG4gIHN3aXRjaCAoZG9tRXZlbnROYW1lKSB7XG4gICAgLy8gVHJhY2sgdGhlIGlucHV0IG5vZGUgdGhhdCBoYXMgZm9jdXMuXG4gICAgY2FzZSAnZm9jdXNpbic6XG4gICAgICBpZiAoaXNUZXh0SW5wdXRFbGVtZW50KHRhcmdldE5vZGUpIHx8IHRhcmdldE5vZGUuY29udGVudEVkaXRhYmxlID09PSAndHJ1ZScpIHtcbiAgICAgICAgYWN0aXZlRWxlbWVudCQxID0gdGFyZ2V0Tm9kZTtcbiAgICAgICAgYWN0aXZlRWxlbWVudEluc3QkMSA9IHRhcmdldEluc3Q7XG4gICAgICAgIGxhc3RTZWxlY3Rpb24gPSBudWxsO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2ZvY3Vzb3V0JzpcbiAgICAgIGFjdGl2ZUVsZW1lbnQkMSA9IG51bGw7XG4gICAgICBhY3RpdmVFbGVtZW50SW5zdCQxID0gbnVsbDtcbiAgICAgIGxhc3RTZWxlY3Rpb24gPSBudWxsO1xuICAgICAgYnJlYWs7XG4gICAgLy8gRG9uJ3QgZmlyZSB0aGUgZXZlbnQgd2hpbGUgdGhlIHVzZXIgaXMgZHJhZ2dpbmcuIFRoaXMgbWF0Y2hlcyB0aGVcbiAgICAvLyBzZW1hbnRpY3Mgb2YgdGhlIG5hdGl2ZSBzZWxlY3QgZXZlbnQuXG5cbiAgICBjYXNlICdtb3VzZWRvd24nOlxuICAgICAgbW91c2VEb3duID0gdHJ1ZTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnY29udGV4dG1lbnUnOlxuICAgIGNhc2UgJ21vdXNldXAnOlxuICAgIGNhc2UgJ2RyYWdlbmQnOlxuICAgICAgbW91c2VEb3duID0gZmFsc2U7XG4gICAgICBjb25zdHJ1Y3RTZWxlY3RFdmVudChkaXNwYXRjaFF1ZXVlLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICAgICAgYnJlYWs7XG4gICAgLy8gQ2hyb21lIGFuZCBJRSBmaXJlIG5vbi1zdGFuZGFyZCBldmVudCB3aGVuIHNlbGVjdGlvbiBpcyBjaGFuZ2VkIChhbmRcbiAgICAvLyBzb21ldGltZXMgd2hlbiBpdCBoYXNuJ3QpLiBJRSdzIGV2ZW50IGZpcmVzIG91dCBvZiBvcmRlciB3aXRoIHJlc3BlY3RcbiAgICAvLyB0byBrZXkgYW5kIGlucHV0IGV2ZW50cyBvbiBkZWxldGlvbiwgc28gd2UgZGlzY2FyZCBpdC5cbiAgICAvL1xuICAgIC8vIEZpcmVmb3ggZG9lc24ndCBzdXBwb3J0IHNlbGVjdGlvbmNoYW5nZSwgc28gY2hlY2sgc2VsZWN0aW9uIHN0YXR1c1xuICAgIC8vIGFmdGVyIGVhY2gga2V5IGVudHJ5LiBUaGUgc2VsZWN0aW9uIGNoYW5nZXMgYWZ0ZXIga2V5ZG93biBhbmQgYmVmb3JlXG4gICAgLy8ga2V5dXAsIGJ1dCB3ZSBjaGVjayBvbiBrZXlkb3duIGFzIHdlbGwgaW4gdGhlIGNhc2Ugb2YgaG9sZGluZyBkb3duIGFcbiAgICAvLyBrZXksIHdoZW4gbXVsdGlwbGUga2V5ZG93biBldmVudHMgYXJlIGZpcmVkIGJ1dCBvbmx5IG9uZSBrZXl1cCBpcy5cbiAgICAvLyBUaGlzIGlzIGFsc28gb3VyIGFwcHJvYWNoIGZvciBJRSBoYW5kbGluZywgZm9yIHRoZSByZWFzb24gYWJvdmUuXG5cbiAgICBjYXNlICdzZWxlY3Rpb25jaGFuZ2UnOlxuICAgICAgaWYgKHNraXBTZWxlY3Rpb25DaGFuZ2VFdmVudCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIC8vIGZhbGxzIHRocm91Z2hcblxuICAgIGNhc2UgJ2tleWRvd24nOlxuICAgIGNhc2UgJ2tleXVwJzpcbiAgICAgIGNvbnN0cnVjdFNlbGVjdEV2ZW50KGRpc3BhdGNoUXVldWUsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZXh0cmFjdEV2ZW50cyQ0KGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0LCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIpIHtcbiAgdmFyIHJlYWN0TmFtZSA9IHRvcExldmVsRXZlbnRzVG9SZWFjdE5hbWVzLmdldChkb21FdmVudE5hbWUpO1xuXG4gIGlmIChyZWFjdE5hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNFdmVudDtcbiAgdmFyIHJlYWN0RXZlbnRUeXBlID0gZG9tRXZlbnROYW1lO1xuXG4gIHN3aXRjaCAoZG9tRXZlbnROYW1lKSB7XG4gICAgY2FzZSAna2V5cHJlc3MnOlxuICAgICAgLy8gRmlyZWZveCBjcmVhdGVzIGEga2V5cHJlc3MgZXZlbnQgZm9yIGZ1bmN0aW9uIGtleXMgdG9vLiBUaGlzIHJlbW92ZXNcbiAgICAgIC8vIHRoZSB1bndhbnRlZCBrZXlwcmVzcyBldmVudHMuIEVudGVyIGlzIGhvd2V2ZXIgYm90aCBwcmludGFibGUgYW5kXG4gICAgICAvLyBub24tcHJpbnRhYmxlLiBPbmUgd291bGQgZXhwZWN0IFRhYiB0byBiZSBhcyB3ZWxsIChidXQgaXQgaXNuJ3QpLlxuICAgICAgaWYgKGdldEV2ZW50Q2hhckNvZGUobmF0aXZlRXZlbnQpID09PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cblxuICAgIGNhc2UgJ2tleWRvd24nOlxuICAgIGNhc2UgJ2tleXVwJzpcbiAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY0tleWJvYXJkRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2ZvY3VzaW4nOlxuICAgICAgcmVhY3RFdmVudFR5cGUgPSAnZm9jdXMnO1xuICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljRm9jdXNFdmVudDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnZm9jdXNvdXQnOlxuICAgICAgcmVhY3RFdmVudFR5cGUgPSAnYmx1cic7XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNGb2N1c0V2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdiZWZvcmVibHVyJzpcbiAgICBjYXNlICdhZnRlcmJsdXInOlxuICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljRm9jdXNFdmVudDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnY2xpY2snOlxuICAgICAgLy8gRmlyZWZveCBjcmVhdGVzIGEgY2xpY2sgZXZlbnQgb24gcmlnaHQgbW91c2UgY2xpY2tzLiBUaGlzIHJlbW92ZXMgdGhlXG4gICAgICAvLyB1bndhbnRlZCBjbGljayBldmVudHMuXG4gICAgICBpZiAobmF0aXZlRXZlbnQuYnV0dG9uID09PSAyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cblxuICAgIGNhc2UgJ2F1eGNsaWNrJzpcbiAgICBjYXNlICdkYmxjbGljayc6XG4gICAgY2FzZSAnbW91c2Vkb3duJzpcbiAgICBjYXNlICdtb3VzZW1vdmUnOlxuICAgIGNhc2UgJ21vdXNldXAnOiAvLyBUT0RPOiBEaXNhYmxlZCBlbGVtZW50cyBzaG91bGQgbm90IHJlc3BvbmQgdG8gbW91c2UgZXZlbnRzXG5cbiAgICAvKiBmYWxscyB0aHJvdWdoICovXG5cbiAgICBjYXNlICdtb3VzZW91dCc6XG4gICAgY2FzZSAnbW91c2VvdmVyJzpcbiAgICBjYXNlICdjb250ZXh0bWVudSc6XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNNb3VzZUV2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdkcmFnJzpcbiAgICBjYXNlICdkcmFnZW5kJzpcbiAgICBjYXNlICdkcmFnZW50ZXInOlxuICAgIGNhc2UgJ2RyYWdleGl0JzpcbiAgICBjYXNlICdkcmFnbGVhdmUnOlxuICAgIGNhc2UgJ2RyYWdvdmVyJzpcbiAgICBjYXNlICdkcmFnc3RhcnQnOlxuICAgIGNhc2UgJ2Ryb3AnOlxuICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljRHJhZ0V2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICd0b3VjaGNhbmNlbCc6XG4gICAgY2FzZSAndG91Y2hlbmQnOlxuICAgIGNhc2UgJ3RvdWNobW92ZSc6XG4gICAgY2FzZSAndG91Y2hzdGFydCc6XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNUb3VjaEV2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIEFOSU1BVElPTl9FTkQ6XG4gICAgY2FzZSBBTklNQVRJT05fSVRFUkFUSU9OOlxuICAgIGNhc2UgQU5JTUFUSU9OX1NUQVJUOlxuICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljQW5pbWF0aW9uRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgVFJBTlNJVElPTl9FTkQ6XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNUcmFuc2l0aW9uRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3Njcm9sbCc6XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNVSUV2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICd3aGVlbCc6XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNXaGVlbEV2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdjb3B5JzpcbiAgICBjYXNlICdjdXQnOlxuICAgIGNhc2UgJ3Bhc3RlJzpcbiAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY0NsaXBib2FyZEV2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdnb3Rwb2ludGVyY2FwdHVyZSc6XG4gICAgY2FzZSAnbG9zdHBvaW50ZXJjYXB0dXJlJzpcbiAgICBjYXNlICdwb2ludGVyY2FuY2VsJzpcbiAgICBjYXNlICdwb2ludGVyZG93bic6XG4gICAgY2FzZSAncG9pbnRlcm1vdmUnOlxuICAgIGNhc2UgJ3BvaW50ZXJvdXQnOlxuICAgIGNhc2UgJ3BvaW50ZXJvdmVyJzpcbiAgICBjYXNlICdwb2ludGVydXAnOlxuICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljUG9pbnRlckV2ZW50O1xuICAgICAgYnJlYWs7XG4gIH1cblxuICB2YXIgaW5DYXB0dXJlUGhhc2UgPSAoZXZlbnRTeXN0ZW1GbGFncyAmIElTX0NBUFRVUkVfUEhBU0UpICE9PSAwO1xuXG4gIHtcbiAgICAvLyBTb21lIGV2ZW50cyBkb24ndCBidWJibGUgaW4gdGhlIGJyb3dzZXIuXG4gICAgLy8gSW4gdGhlIHBhc3QsIFJlYWN0IGhhcyBhbHdheXMgYnViYmxlZCB0aGVtLCBidXQgdGhpcyBjYW4gYmUgc3VycHJpc2luZy5cbiAgICAvLyBXZSdyZSBnb2luZyB0byB0cnkgYWxpZ25pbmcgY2xvc2VyIHRvIHRoZSBicm93c2VyIGJlaGF2aW9yIGJ5IG5vdCBidWJibGluZ1xuICAgIC8vIHRoZW0gaW4gUmVhY3QgZWl0aGVyLiBXZSdsbCBzdGFydCBieSBub3QgYnViYmxpbmcgb25TY3JvbGwsIGFuZCB0aGVuIGV4cGFuZC5cbiAgICB2YXIgYWNjdW11bGF0ZVRhcmdldE9ubHkgPSAhaW5DYXB0dXJlUGhhc2UgJiYgLy8gVE9ETzogaWRlYWxseSwgd2UnZCBldmVudHVhbGx5IGFkZCBhbGwgZXZlbnRzIGZyb21cbiAgICAvLyBub25EZWxlZ2F0ZWRFdmVudHMgbGlzdCBpbiBET01QbHVnaW5FdmVudFN5c3RlbS5cbiAgICAvLyBUaGVuIHdlIGNhbiByZW1vdmUgdGhpcyBzcGVjaWFsIGxpc3QuXG4gICAgLy8gVGhpcyBpcyBhIGJyZWFraW5nIGNoYW5nZSB0aGF0IGNhbiB3YWl0IHVudGlsIFJlYWN0IDE4LlxuICAgIGRvbUV2ZW50TmFtZSA9PT0gJ3Njcm9sbCc7XG5cbiAgICB2YXIgX2xpc3RlbmVycyA9IGFjY3VtdWxhdGVTaW5nbGVQaGFzZUxpc3RlbmVycyh0YXJnZXRJbnN0LCByZWFjdE5hbWUsIG5hdGl2ZUV2ZW50LnR5cGUsIGluQ2FwdHVyZVBoYXNlLCBhY2N1bXVsYXRlVGFyZ2V0T25seSk7XG5cbiAgICBpZiAoX2xpc3RlbmVycy5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBJbnRlbnRpb25hbGx5IGNyZWF0ZSBldmVudCBsYXppbHkuXG4gICAgICB2YXIgX2V2ZW50ID0gbmV3IFN5bnRoZXRpY0V2ZW50Q3RvcihyZWFjdE5hbWUsIHJlYWN0RXZlbnRUeXBlLCBudWxsLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuXG4gICAgICBkaXNwYXRjaFF1ZXVlLnB1c2goe1xuICAgICAgICBldmVudDogX2V2ZW50LFxuICAgICAgICBsaXN0ZW5lcnM6IF9saXN0ZW5lcnNcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG4vLyBUT0RPOiByZW1vdmUgdG9wLWxldmVsIHNpZGUgZWZmZWN0LlxucmVnaXN0ZXJTaW1wbGVFdmVudHMoKTtcbnJlZ2lzdGVyRXZlbnRzJDIoKTtcbnJlZ2lzdGVyRXZlbnRzJDEoKTtcbnJlZ2lzdGVyRXZlbnRzJDMoKTtcbnJlZ2lzdGVyRXZlbnRzKCk7XG5cbmZ1bmN0aW9uIGV4dHJhY3RFdmVudHMkNShkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyKSB7XG4gIC8vIFRPRE86IHdlIHNob3VsZCByZW1vdmUgdGhlIGNvbmNlcHQgb2YgYSBcIlNpbXBsZUV2ZW50UGx1Z2luXCIuXG4gIC8vIFRoaXMgaXMgdGhlIGJhc2ljIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIGV2ZW50IHN5c3RlbS4gQWxsXG4gIC8vIHRoZSBvdGhlciBwbHVnaW5zIGFyZSBlc3NlbnRpYWxseSBwb2x5ZmlsbHMuIFNvIHRoZSBwbHVnaW5cbiAgLy8gc2hvdWxkIHByb2JhYmx5IGJlIGlubGluZWQgc29tZXdoZXJlIGFuZCBoYXZlIGl0cyBsb2dpY1xuICAvLyBiZSBjb3JlIHRoZSB0byBldmVudCBzeXN0ZW0uIFRoaXMgd291bGQgcG90ZW50aWFsbHkgYWxsb3dcbiAgLy8gdXMgdG8gc2hpcCBidWlsZHMgb2YgUmVhY3Qgd2l0aG91dCB0aGUgcG9seWZpbGxlZCBwbHVnaW5zIGJlbG93LlxuICBleHRyYWN0RXZlbnRzJDQoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQsIGV2ZW50U3lzdGVtRmxhZ3MpO1xuICB2YXIgc2hvdWxkUHJvY2Vzc1BvbHlmaWxsUGx1Z2lucyA9IChldmVudFN5c3RlbUZsYWdzICYgU0hPVUxEX05PVF9QUk9DRVNTX1BPTFlGSUxMX0VWRU5UX1BMVUdJTlMpID09PSAwOyAvLyBXZSBkb24ndCBwcm9jZXNzIHRoZXNlIGV2ZW50cyB1bmxlc3Mgd2UgYXJlIGluIHRoZVxuICAvLyBldmVudCdzIG5hdGl2ZSBcImJ1YmJsZVwiIHBoYXNlLCB3aGljaCBtZWFucyB0aGF0IHdlJ3JlXG4gIC8vIG5vdCBpbiB0aGUgY2FwdHVyZSBwaGFzZS4gVGhhdCdzIGJlY2F1c2Ugd2UgZW11bGF0ZVxuICAvLyB0aGUgY2FwdHVyZSBwaGFzZSBoZXJlIHN0aWxsLiBUaGlzIGlzIGEgdHJhZGUtb2ZmLFxuICAvLyBiZWNhdXNlIGluIGFuIGlkZWFsIHdvcmxkIHdlIHdvdWxkIG5vdCBlbXVsYXRlIGFuZCB1c2VcbiAgLy8gdGhlIHBoYXNlcyBwcm9wZXJseSwgbGlrZSB3ZSBkbyB3aXRoIHRoZSBTaW1wbGVFdmVudFxuICAvLyBwbHVnaW4uIEhvd2V2ZXIsIHRoZSBwbHVnaW5zIGJlbG93IGVpdGhlciBleHBlY3RcbiAgLy8gZW11bGF0aW9uIChFbnRlckxlYXZlKSBvciB1c2Ugc3RhdGUgbG9jYWxpemVkIHRvIHRoYXRcbiAgLy8gcGx1Z2luIChCZWZvcmVJbnB1dCwgQ2hhbmdlLCBTZWxlY3QpLiBUaGUgc3RhdGUgaW5cbiAgLy8gdGhlc2UgbW9kdWxlcyBjb21wbGljYXRlcyB0aGluZ3MsIGFzIHlvdSdsbCBlc3NlbnRpYWxseVxuICAvLyBnZXQgdGhlIGNhc2Ugd2hlcmUgdGhlIGNhcHR1cmUgcGhhc2UgZXZlbnQgbWlnaHQgY2hhbmdlXG4gIC8vIHN0YXRlLCBvbmx5IGZvciB0aGUgZm9sbG93aW5nIGJ1YmJsZSBldmVudCB0byBjb21lIGluXG4gIC8vIGxhdGVyIGFuZCBub3QgdHJpZ2dlciBhbnl0aGluZyBhcyB0aGUgc3RhdGUgbm93XG4gIC8vIGludmFsaWRhdGVzIHRoZSBoZXVyaXN0aWNzIG9mIHRoZSBldmVudCBwbHVnaW4uIFdlXG4gIC8vIGNvdWxkIGFsdGVyIGFsbCB0aGVzZSBwbHVnaW5zIHRvIHdvcmsgaW4gc3VjaCB3YXlzLCBidXRcbiAgLy8gdGhhdCBtaWdodCBjYXVzZSBvdGhlciB1bmtub3duIHNpZGUtZWZmZWN0cyB0aGF0IHdlXG4gIC8vIGNhbid0IGZvcnNlZSByaWdodCBub3cuXG5cbiAgaWYgKHNob3VsZFByb2Nlc3NQb2x5ZmlsbFBsdWdpbnMpIHtcbiAgICBleHRyYWN0RXZlbnRzJDIoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQsIGV2ZW50U3lzdGVtRmxhZ3MpO1xuICAgIGV4dHJhY3RFdmVudHMkMShkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gICAgZXh0cmFjdEV2ZW50cyQzKGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgICBleHRyYWN0RXZlbnRzKGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgfVxufSAvLyBMaXN0IG9mIGV2ZW50cyB0aGF0IG5lZWQgdG8gYmUgaW5kaXZpZHVhbGx5IGF0dGFjaGVkIHRvIG1lZGlhIGVsZW1lbnRzLlxuXG5cbnZhciBtZWRpYUV2ZW50VHlwZXMgPSBbJ2Fib3J0JywgJ2NhbnBsYXknLCAnY2FucGxheXRocm91Z2gnLCAnZHVyYXRpb25jaGFuZ2UnLCAnZW1wdGllZCcsICdlbmNyeXB0ZWQnLCAnZW5kZWQnLCAnZXJyb3InLCAnbG9hZGVkZGF0YScsICdsb2FkZWRtZXRhZGF0YScsICdsb2Fkc3RhcnQnLCAncGF1c2UnLCAncGxheScsICdwbGF5aW5nJywgJ3Byb2dyZXNzJywgJ3JhdGVjaGFuZ2UnLCAnc2Vla2VkJywgJ3NlZWtpbmcnLCAnc3RhbGxlZCcsICdzdXNwZW5kJywgJ3RpbWV1cGRhdGUnLCAndm9sdW1lY2hhbmdlJywgJ3dhaXRpbmcnXTsgLy8gV2Ugc2hvdWxkIG5vdCBkZWxlZ2F0ZSB0aGVzZSBldmVudHMgdG8gdGhlIGNvbnRhaW5lciwgYnV0IHJhdGhlclxuLy8gc2V0IHRoZW0gb24gdGhlIGFjdHVhbCB0YXJnZXQgZWxlbWVudCBpdHNlbGYuIFRoaXMgaXMgcHJpbWFyaWx5XG4vLyBiZWNhdXNlIHRoZXNlIGV2ZW50cyBkbyBub3QgY29uc2lzdGVudGx5IGJ1YmJsZSBpbiB0aGUgRE9NLlxuXG52YXIgbm9uRGVsZWdhdGVkRXZlbnRzID0gbmV3IFNldChbJ2NhbmNlbCcsICdjbG9zZScsICdpbnZhbGlkJywgJ2xvYWQnLCAnc2Nyb2xsJywgJ3RvZ2dsZSddLmNvbmNhdChtZWRpYUV2ZW50VHlwZXMpKTtcblxuZnVuY3Rpb24gZXhlY3V0ZURpc3BhdGNoKGV2ZW50LCBsaXN0ZW5lciwgY3VycmVudFRhcmdldCkge1xuICB2YXIgdHlwZSA9IGV2ZW50LnR5cGUgfHwgJ3Vua25vd24tZXZlbnQnO1xuICBldmVudC5jdXJyZW50VGFyZ2V0ID0gY3VycmVudFRhcmdldDtcbiAgaW52b2tlR3VhcmRlZENhbGxiYWNrQW5kQ2F0Y2hGaXJzdEVycm9yKHR5cGUsIGxpc3RlbmVyLCB1bmRlZmluZWQsIGV2ZW50KTtcbiAgZXZlbnQuY3VycmVudFRhcmdldCA9IG51bGw7XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NEaXNwYXRjaFF1ZXVlSXRlbXNJbk9yZGVyKGV2ZW50LCBkaXNwYXRjaExpc3RlbmVycywgaW5DYXB0dXJlUGhhc2UpIHtcbiAgdmFyIHByZXZpb3VzSW5zdGFuY2U7XG5cbiAgaWYgKGluQ2FwdHVyZVBoYXNlKSB7XG4gICAgZm9yICh2YXIgaSA9IGRpc3BhdGNoTGlzdGVuZXJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB2YXIgX2Rpc3BhdGNoTGlzdGVuZXJzJGkgPSBkaXNwYXRjaExpc3RlbmVyc1tpXSxcbiAgICAgICAgICBpbnN0YW5jZSA9IF9kaXNwYXRjaExpc3RlbmVycyRpLmluc3RhbmNlLFxuICAgICAgICAgIGN1cnJlbnRUYXJnZXQgPSBfZGlzcGF0Y2hMaXN0ZW5lcnMkaS5jdXJyZW50VGFyZ2V0LFxuICAgICAgICAgIGxpc3RlbmVyID0gX2Rpc3BhdGNoTGlzdGVuZXJzJGkubGlzdGVuZXI7XG5cbiAgICAgIGlmIChpbnN0YW5jZSAhPT0gcHJldmlvdXNJbnN0YW5jZSAmJiBldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZXhlY3V0ZURpc3BhdGNoKGV2ZW50LCBsaXN0ZW5lciwgY3VycmVudFRhcmdldCk7XG4gICAgICBwcmV2aW91c0luc3RhbmNlID0gaW5zdGFuY2U7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBkaXNwYXRjaExpc3RlbmVycy5sZW5ndGg7IF9pKyspIHtcbiAgICAgIHZhciBfZGlzcGF0Y2hMaXN0ZW5lcnMkX2kgPSBkaXNwYXRjaExpc3RlbmVyc1tfaV0sXG4gICAgICAgICAgX2luc3RhbmNlID0gX2Rpc3BhdGNoTGlzdGVuZXJzJF9pLmluc3RhbmNlLFxuICAgICAgICAgIF9jdXJyZW50VGFyZ2V0ID0gX2Rpc3BhdGNoTGlzdGVuZXJzJF9pLmN1cnJlbnRUYXJnZXQsXG4gICAgICAgICAgX2xpc3RlbmVyID0gX2Rpc3BhdGNoTGlzdGVuZXJzJF9pLmxpc3RlbmVyO1xuXG4gICAgICBpZiAoX2luc3RhbmNlICE9PSBwcmV2aW91c0luc3RhbmNlICYmIGV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBleGVjdXRlRGlzcGF0Y2goZXZlbnQsIF9saXN0ZW5lciwgX2N1cnJlbnRUYXJnZXQpO1xuICAgICAgcHJldmlvdXNJbnN0YW5jZSA9IF9pbnN0YW5jZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJvY2Vzc0Rpc3BhdGNoUXVldWUoZGlzcGF0Y2hRdWV1ZSwgZXZlbnRTeXN0ZW1GbGFncykge1xuICB2YXIgaW5DYXB0dXJlUGhhc2UgPSAoZXZlbnRTeXN0ZW1GbGFncyAmIElTX0NBUFRVUkVfUEhBU0UpICE9PSAwO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZGlzcGF0Y2hRdWV1ZS5sZW5ndGg7IGkrKykge1xuICAgIHZhciBfZGlzcGF0Y2hRdWV1ZSRpID0gZGlzcGF0Y2hRdWV1ZVtpXSxcbiAgICAgICAgZXZlbnQgPSBfZGlzcGF0Y2hRdWV1ZSRpLmV2ZW50LFxuICAgICAgICBsaXN0ZW5lcnMgPSBfZGlzcGF0Y2hRdWV1ZSRpLmxpc3RlbmVycztcbiAgICBwcm9jZXNzRGlzcGF0Y2hRdWV1ZUl0ZW1zSW5PcmRlcihldmVudCwgbGlzdGVuZXJzLCBpbkNhcHR1cmVQaGFzZSk7IC8vICBldmVudCBzeXN0ZW0gZG9lc24ndCB1c2UgcG9vbGluZy5cbiAgfSAvLyBUaGlzIHdvdWxkIGJlIGEgZ29vZCB0aW1lIHRvIHJldGhyb3cgaWYgYW55IG9mIHRoZSBldmVudCBoYW5kbGVycyB0aHJldy5cblxuXG4gIHJldGhyb3dDYXVnaHRFcnJvcigpO1xufVxuXG5mdW5jdGlvbiBkaXNwYXRjaEV2ZW50c0ZvclBsdWdpbnMoZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCBuYXRpdmVFdmVudCwgdGFyZ2V0SW5zdCwgdGFyZ2V0Q29udGFpbmVyKSB7XG4gIHZhciBuYXRpdmVFdmVudFRhcmdldCA9IGdldEV2ZW50VGFyZ2V0KG5hdGl2ZUV2ZW50KTtcbiAgdmFyIGRpc3BhdGNoUXVldWUgPSBbXTtcbiAgZXh0cmFjdEV2ZW50cyQ1KGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0LCBldmVudFN5c3RlbUZsYWdzKTtcbiAgcHJvY2Vzc0Rpc3BhdGNoUXVldWUoZGlzcGF0Y2hRdWV1ZSwgZXZlbnRTeXN0ZW1GbGFncyk7XG59XG5cbmZ1bmN0aW9uIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoZG9tRXZlbnROYW1lLCB0YXJnZXRFbGVtZW50KSB7XG4gIHZhciBpc0NhcHR1cmVQaGFzZUxpc3RlbmVyID0gZmFsc2U7XG4gIHZhciBsaXN0ZW5lclNldCA9IGdldEV2ZW50TGlzdGVuZXJTZXQodGFyZ2V0RWxlbWVudCk7XG4gIHZhciBsaXN0ZW5lclNldEtleSA9IGdldExpc3RlbmVyU2V0S2V5KGRvbUV2ZW50TmFtZSwgaXNDYXB0dXJlUGhhc2VMaXN0ZW5lcik7XG5cbiAgaWYgKCFsaXN0ZW5lclNldC5oYXMobGlzdGVuZXJTZXRLZXkpKSB7XG4gICAgYWRkVHJhcHBlZEV2ZW50TGlzdGVuZXIodGFyZ2V0RWxlbWVudCwgZG9tRXZlbnROYW1lLCBJU19OT05fREVMRUdBVEVELCBpc0NhcHR1cmVQaGFzZUxpc3RlbmVyKTtcbiAgICBsaXN0ZW5lclNldC5hZGQobGlzdGVuZXJTZXRLZXkpO1xuICB9XG59XG52YXIgbGlzdGVuaW5nTWFya2VyID0gJ19yZWFjdExpc3RlbmluZycgKyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyKTtcbmZ1bmN0aW9uIGxpc3RlblRvQWxsU3VwcG9ydGVkRXZlbnRzKHJvb3RDb250YWluZXJFbGVtZW50KSB7XG4gIHtcbiAgICBpZiAocm9vdENvbnRhaW5lckVsZW1lbnRbbGlzdGVuaW5nTWFya2VyXSkge1xuICAgICAgLy8gUGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uOiBkb24ndCBpdGVyYXRlIHRocm91Z2ggZXZlbnRzXG4gICAgICAvLyBmb3IgdGhlIHNhbWUgcG9ydGFsIGNvbnRhaW5lciBvciByb290IG5vZGUgbW9yZSB0aGFuIG9uY2UuXG4gICAgICAvLyBUT0RPOiBvbmNlIHdlIHJlbW92ZSB0aGUgZmxhZywgd2UgbWF5IGJlIGFibGUgdG8gYWxzb1xuICAgICAgLy8gcmVtb3ZlIHNvbWUgb2YgdGhlIGJvb2trZWVwaW5nIG1hcHMgdXNlZCBmb3IgbGF6aW5lc3MuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcm9vdENvbnRhaW5lckVsZW1lbnRbbGlzdGVuaW5nTWFya2VyXSA9IHRydWU7XG4gICAgYWxsTmF0aXZlRXZlbnRzLmZvckVhY2goZnVuY3Rpb24gKGRvbUV2ZW50TmFtZSkge1xuICAgICAgaWYgKCFub25EZWxlZ2F0ZWRFdmVudHMuaGFzKGRvbUV2ZW50TmFtZSkpIHtcbiAgICAgICAgbGlzdGVuVG9OYXRpdmVFdmVudChkb21FdmVudE5hbWUsIGZhbHNlLCByb290Q29udGFpbmVyRWxlbWVudCwgbnVsbCk7XG4gICAgICB9XG5cbiAgICAgIGxpc3RlblRvTmF0aXZlRXZlbnQoZG9tRXZlbnROYW1lLCB0cnVlLCByb290Q29udGFpbmVyRWxlbWVudCwgbnVsbCk7XG4gICAgfSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGxpc3RlblRvTmF0aXZlRXZlbnQoZG9tRXZlbnROYW1lLCBpc0NhcHR1cmVQaGFzZUxpc3RlbmVyLCByb290Q29udGFpbmVyRWxlbWVudCwgdGFyZ2V0RWxlbWVudCkge1xuICB2YXIgZXZlbnRTeXN0ZW1GbGFncyA9IGFyZ3VtZW50cy5sZW5ndGggPiA0ICYmIGFyZ3VtZW50c1s0XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzRdIDogMDtcbiAgdmFyIHRhcmdldCA9IHJvb3RDb250YWluZXJFbGVtZW50OyAvLyBzZWxlY3Rpb25jaGFuZ2UgbmVlZHMgdG8gYmUgYXR0YWNoZWQgdG8gdGhlIGRvY3VtZW50XG4gIC8vIG90aGVyd2lzZSBpdCB3b24ndCBjYXB0dXJlIGluY29taW5nIGV2ZW50cyB0aGF0IGFyZSBvbmx5XG4gIC8vIHRyaWdnZXJlZCBvbiB0aGUgZG9jdW1lbnQgZGlyZWN0bHkuXG5cbiAgaWYgKGRvbUV2ZW50TmFtZSA9PT0gJ3NlbGVjdGlvbmNoYW5nZScgJiYgcm9vdENvbnRhaW5lckVsZW1lbnQubm9kZVR5cGUgIT09IERPQ1VNRU5UX05PREUpIHtcbiAgICB0YXJnZXQgPSByb290Q29udGFpbmVyRWxlbWVudC5vd25lckRvY3VtZW50O1xuICB9IC8vIElmIHRoZSBldmVudCBjYW4gYmUgZGVsZWdhdGVkIChvciBpcyBjYXB0dXJlIHBoYXNlKSwgd2UgY2FuXG4gIC8vIHJlZ2lzdGVyIGl0IHRvIHRoZSByb290IGNvbnRhaW5lci4gT3RoZXJ3aXNlLCB3ZSBzaG91bGRcbiAgLy8gcmVnaXN0ZXIgdGhlIGV2ZW50IHRvIHRoZSB0YXJnZXQgZWxlbWVudCBhbmQgbWFyayBpdCBhc1xuICAvLyBhIG5vbi1kZWxlZ2F0ZWQgZXZlbnQuXG5cblxuICBpZiAodGFyZ2V0RWxlbWVudCAhPT0gbnVsbCAmJiAhaXNDYXB0dXJlUGhhc2VMaXN0ZW5lciAmJiBub25EZWxlZ2F0ZWRFdmVudHMuaGFzKGRvbUV2ZW50TmFtZSkpIHtcbiAgICAvLyBGb3IgYWxsIG5vbi1kZWxlZ2F0ZWQgZXZlbnRzLCBhcGFydCBmcm9tIHNjcm9sbCwgd2UgYXR0YWNoXG4gICAgLy8gdGhlaXIgZXZlbnQgbGlzdGVuZXJzIHRvIHRoZSByZXNwZWN0aXZlIGVsZW1lbnRzIHRoYXQgdGhlaXJcbiAgICAvLyBldmVudHMgZmlyZSBvbi4gVGhhdCBtZWFucyB3ZSBjYW4gc2tpcCB0aGlzIHN0ZXAsIGFzIGV2ZW50XG4gICAgLy8gbGlzdGVuZXIgaGFzIGFscmVhZHkgYmVlbiBhZGRlZCBwcmV2aW91c2x5LiBIb3dldmVyLCB3ZVxuICAgIC8vIHNwZWNpYWwgY2FzZSB0aGUgc2Nyb2xsIGV2ZW50IGJlY2F1c2UgdGhlIHJlYWxpdHkgaXMgdGhhdCBhbnlcbiAgICAvLyBlbGVtZW50IGNhbiBzY3JvbGwuXG4gICAgLy8gVE9ETzogaWRlYWxseSwgd2UnZCBldmVudHVhbGx5IGFwcGx5IHRoZSBzYW1lIGxvZ2ljIHRvIGFsbFxuICAgIC8vIGV2ZW50cyBmcm9tIHRoZSBub25EZWxlZ2F0ZWRFdmVudHMgbGlzdC4gVGhlbiB3ZSBjYW4gcmVtb3ZlXG4gICAgLy8gdGhpcyBzcGVjaWFsIGNhc2UgYW5kIHVzZSB0aGUgc2FtZSBsb2dpYyBmb3IgYWxsIGV2ZW50cy5cbiAgICBpZiAoZG9tRXZlbnROYW1lICE9PSAnc2Nyb2xsJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGV2ZW50U3lzdGVtRmxhZ3MgfD0gSVNfTk9OX0RFTEVHQVRFRDtcbiAgICB0YXJnZXQgPSB0YXJnZXRFbGVtZW50O1xuICB9XG5cbiAgdmFyIGxpc3RlbmVyU2V0ID0gZ2V0RXZlbnRMaXN0ZW5lclNldCh0YXJnZXQpO1xuICB2YXIgbGlzdGVuZXJTZXRLZXkgPSBnZXRMaXN0ZW5lclNldEtleShkb21FdmVudE5hbWUsIGlzQ2FwdHVyZVBoYXNlTGlzdGVuZXIpOyAvLyBJZiB0aGUgbGlzdGVuZXIgZW50cnkgaXMgZW1wdHkgb3Igd2Ugc2hvdWxkIHVwZ3JhZGUsIHRoZW5cbiAgLy8gd2UgbmVlZCB0byB0cmFwIGFuIGV2ZW50IGxpc3RlbmVyIG9udG8gdGhlIHRhcmdldC5cblxuICBpZiAoIWxpc3RlbmVyU2V0LmhhcyhsaXN0ZW5lclNldEtleSkpIHtcbiAgICBpZiAoaXNDYXB0dXJlUGhhc2VMaXN0ZW5lcikge1xuICAgICAgZXZlbnRTeXN0ZW1GbGFncyB8PSBJU19DQVBUVVJFX1BIQVNFO1xuICAgIH1cblxuICAgIGFkZFRyYXBwZWRFdmVudExpc3RlbmVyKHRhcmdldCwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCBpc0NhcHR1cmVQaGFzZUxpc3RlbmVyKTtcbiAgICBsaXN0ZW5lclNldC5hZGQobGlzdGVuZXJTZXRLZXkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFkZFRyYXBwZWRFdmVudExpc3RlbmVyKHRhcmdldENvbnRhaW5lciwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCBpc0NhcHR1cmVQaGFzZUxpc3RlbmVyLCBpc0RlZmVycmVkTGlzdGVuZXJGb3JMZWdhY3lGQlN1cHBvcnQpIHtcbiAgdmFyIGxpc3RlbmVyID0gY3JlYXRlRXZlbnRMaXN0ZW5lcldyYXBwZXJXaXRoUHJpb3JpdHkodGFyZ2V0Q29udGFpbmVyLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MpOyAvLyBJZiBwYXNzaXZlIG9wdGlvbiBpcyBub3Qgc3VwcG9ydGVkLCB0aGVuIHRoZSBldmVudCB3aWxsIGJlXG4gIC8vIGFjdGl2ZSBhbmQgbm90IHBhc3NpdmUuXG5cbiAgdmFyIGlzUGFzc2l2ZUxpc3RlbmVyID0gdW5kZWZpbmVkO1xuXG4gIGlmIChwYXNzaXZlQnJvd3NlckV2ZW50c1N1cHBvcnRlZCkge1xuICAgIC8vIEJyb3dzZXJzIGludHJvZHVjZWQgYW4gaW50ZXJ2ZW50aW9uLCBtYWtpbmcgdGhlc2UgZXZlbnRzXG4gICAgLy8gcGFzc2l2ZSBieSBkZWZhdWx0IG9uIGRvY3VtZW50LiBSZWFjdCBkb2Vzbid0IGJpbmQgdGhlbVxuICAgIC8vIHRvIGRvY3VtZW50IGFueW1vcmUsIGJ1dCBjaGFuZ2luZyB0aGlzIG5vdyB3b3VsZCB1bmRvXG4gICAgLy8gdGhlIHBlcmZvcm1hbmNlIHdpbnMgZnJvbSB0aGUgY2hhbmdlLiBTbyB3ZSBlbXVsYXRlXG4gICAgLy8gdGhlIGV4aXN0aW5nIGJlaGF2aW9yIG1hbnVhbGx5IG9uIHRoZSByb290cyBub3cuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xOTY1MVxuICAgIGlmIChkb21FdmVudE5hbWUgPT09ICd0b3VjaHN0YXJ0JyB8fCBkb21FdmVudE5hbWUgPT09ICd0b3VjaG1vdmUnIHx8IGRvbUV2ZW50TmFtZSA9PT0gJ3doZWVsJykge1xuICAgICAgaXNQYXNzaXZlTGlzdGVuZXIgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHRhcmdldENvbnRhaW5lciA9ICB0YXJnZXRDb250YWluZXI7XG4gIHZhciB1bnN1YnNjcmliZUxpc3RlbmVyOyAvLyBXaGVuIGxlZ2FjeUZCU3VwcG9ydCBpcyBlbmFibGVkLCBpdCdzIGZvciB3aGVuIHdlXG5cblxuICBpZiAoaXNDYXB0dXJlUGhhc2VMaXN0ZW5lcikge1xuICAgIGlmIChpc1Bhc3NpdmVMaXN0ZW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB1bnN1YnNjcmliZUxpc3RlbmVyID0gYWRkRXZlbnRDYXB0dXJlTGlzdGVuZXJXaXRoUGFzc2l2ZUZsYWcodGFyZ2V0Q29udGFpbmVyLCBkb21FdmVudE5hbWUsIGxpc3RlbmVyLCBpc1Bhc3NpdmVMaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVuc3Vic2NyaWJlTGlzdGVuZXIgPSBhZGRFdmVudENhcHR1cmVMaXN0ZW5lcih0YXJnZXRDb250YWluZXIsIGRvbUV2ZW50TmFtZSwgbGlzdGVuZXIpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoaXNQYXNzaXZlTGlzdGVuZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdW5zdWJzY3JpYmVMaXN0ZW5lciA9IGFkZEV2ZW50QnViYmxlTGlzdGVuZXJXaXRoUGFzc2l2ZUZsYWcodGFyZ2V0Q29udGFpbmVyLCBkb21FdmVudE5hbWUsIGxpc3RlbmVyLCBpc1Bhc3NpdmVMaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVuc3Vic2NyaWJlTGlzdGVuZXIgPSBhZGRFdmVudEJ1YmJsZUxpc3RlbmVyKHRhcmdldENvbnRhaW5lciwgZG9tRXZlbnROYW1lLCBsaXN0ZW5lcik7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzTWF0Y2hpbmdSb290Q29udGFpbmVyKGdyYW5kQ29udGFpbmVyLCB0YXJnZXRDb250YWluZXIpIHtcbiAgcmV0dXJuIGdyYW5kQ29udGFpbmVyID09PSB0YXJnZXRDb250YWluZXIgfHwgZ3JhbmRDb250YWluZXIubm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSAmJiBncmFuZENvbnRhaW5lci5wYXJlbnROb2RlID09PSB0YXJnZXRDb250YWluZXI7XG59XG5cbmZ1bmN0aW9uIGRpc3BhdGNoRXZlbnRGb3JQbHVnaW5FdmVudFN5c3RlbShkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIG5hdGl2ZUV2ZW50LCB0YXJnZXRJbnN0LCB0YXJnZXRDb250YWluZXIpIHtcbiAgdmFyIGFuY2VzdG9ySW5zdCA9IHRhcmdldEluc3Q7XG5cbiAgaWYgKChldmVudFN5c3RlbUZsYWdzICYgSVNfRVZFTlRfSEFORExFX05PTl9NQU5BR0VEX05PREUpID09PSAwICYmIChldmVudFN5c3RlbUZsYWdzICYgSVNfTk9OX0RFTEVHQVRFRCkgPT09IDApIHtcbiAgICB2YXIgdGFyZ2V0Q29udGFpbmVyTm9kZSA9IHRhcmdldENvbnRhaW5lcjsgLy8gSWYgd2UgYXJlIHVzaW5nIHRoZSBsZWdhY3kgRkIgc3VwcG9ydCBmbGFnLCB3ZVxuXG4gICAgaWYgKHRhcmdldEluc3QgIT09IG51bGwpIHtcbiAgICAgIC8vIFRoZSBiZWxvdyBsb2dpYyBhdHRlbXB0cyB0byB3b3JrIG91dCBpZiB3ZSBuZWVkIHRvIGNoYW5nZVxuICAgICAgLy8gdGhlIHRhcmdldCBmaWJlciB0byBhIGRpZmZlcmVudCBhbmNlc3Rvci4gV2UgaGFkIHNpbWlsYXIgbG9naWNcbiAgICAgIC8vIGluIHRoZSBsZWdhY3kgZXZlbnQgc3lzdGVtLCBleGNlcHQgdGhlIGJpZyBkaWZmZXJlbmNlIGJldHdlZW5cbiAgICAgIC8vIHN5c3RlbXMgaXMgdGhhdCB0aGUgbW9kZXJuIGV2ZW50IHN5c3RlbSBub3cgaGFzIGFuIGV2ZW50IGxpc3RlbmVyXG4gICAgICAvLyBhdHRhY2hlZCB0byBlYWNoIFJlYWN0IFJvb3QgYW5kIFJlYWN0IFBvcnRhbCBSb290LiBUb2dldGhlcixcbiAgICAgIC8vIHRoZSBET00gbm9kZXMgcmVwcmVzZW50aW5nIHRoZXNlIHJvb3RzIGFyZSB0aGUgXCJyb290Q29udGFpbmVyXCIuXG4gICAgICAvLyBUbyBmaWd1cmUgb3V0IHdoaWNoIGFuY2VzdG9yIGluc3RhbmNlIHdlIHNob3VsZCB1c2UsIHdlIHRyYXZlcnNlXG4gICAgICAvLyB1cCB0aGUgZmliZXIgdHJlZSBmcm9tIHRoZSB0YXJnZXQgaW5zdGFuY2UgYW5kIGF0dGVtcHQgdG8gZmluZFxuICAgICAgLy8gcm9vdCBib3VuZGFyaWVzIHRoYXQgbWF0Y2ggdGhhdCBvZiBvdXIgY3VycmVudCBcInJvb3RDb250YWluZXJcIi5cbiAgICAgIC8vIElmIHdlIGZpbmQgdGhhdCBcInJvb3RDb250YWluZXJcIiwgd2UgZmluZCB0aGUgcGFyZW50IGZpYmVyXG4gICAgICAvLyBzdWItdHJlZSBmb3IgdGhhdCByb290IGFuZCBtYWtlIHRoYXQgb3VyIGFuY2VzdG9yIGluc3RhbmNlLlxuICAgICAgdmFyIG5vZGUgPSB0YXJnZXRJbnN0O1xuXG4gICAgICBtYWluTG9vcDogd2hpbGUgKHRydWUpIHtcbiAgICAgICAgaWYgKG5vZGUgPT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbm9kZVRhZyA9IG5vZGUudGFnO1xuXG4gICAgICAgIGlmIChub2RlVGFnID09PSBIb3N0Um9vdCB8fCBub2RlVGFnID09PSBIb3N0UG9ydGFsKSB7XG4gICAgICAgICAgdmFyIGNvbnRhaW5lciA9IG5vZGUuc3RhdGVOb2RlLmNvbnRhaW5lckluZm87XG5cbiAgICAgICAgICBpZiAoaXNNYXRjaGluZ1Jvb3RDb250YWluZXIoY29udGFpbmVyLCB0YXJnZXRDb250YWluZXJOb2RlKSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG5vZGVUYWcgPT09IEhvc3RQb3J0YWwpIHtcbiAgICAgICAgICAgIC8vIFRoZSB0YXJnZXQgaXMgYSBwb3J0YWwsIGJ1dCBpdCdzIG5vdCB0aGUgcm9vdENvbnRhaW5lciB3ZSdyZSBsb29raW5nIGZvci5cbiAgICAgICAgICAgIC8vIE5vcm1hbGx5IHBvcnRhbHMgaGFuZGxlIHRoZWlyIG93biBldmVudHMgYWxsIHRoZSB3YXkgZG93biB0byB0aGUgcm9vdC5cbiAgICAgICAgICAgIC8vIFNvIHdlIHNob3VsZCBiZSBhYmxlIHRvIHN0b3Agbm93LiBIb3dldmVyLCB3ZSBkb24ndCBrbm93IGlmIHRoaXMgcG9ydGFsXG4gICAgICAgICAgICAvLyB3YXMgcGFydCBvZiAqb3VyKiByb290LlxuICAgICAgICAgICAgdmFyIGdyYW5kTm9kZSA9IG5vZGUucmV0dXJuO1xuXG4gICAgICAgICAgICB3aGlsZSAoZ3JhbmROb2RlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHZhciBncmFuZFRhZyA9IGdyYW5kTm9kZS50YWc7XG5cbiAgICAgICAgICAgICAgaWYgKGdyYW5kVGFnID09PSBIb3N0Um9vdCB8fCBncmFuZFRhZyA9PT0gSG9zdFBvcnRhbCkge1xuICAgICAgICAgICAgICAgIHZhciBncmFuZENvbnRhaW5lciA9IGdyYW5kTm9kZS5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztcblxuICAgICAgICAgICAgICAgIGlmIChpc01hdGNoaW5nUm9vdENvbnRhaW5lcihncmFuZENvbnRhaW5lciwgdGFyZ2V0Q29udGFpbmVyTm9kZSkpIHtcbiAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIHJvb3RDb250YWluZXIgd2UncmUgbG9va2luZyBmb3IgYW5kIHdlIGZvdW5kIGl0IGFzXG4gICAgICAgICAgICAgICAgICAvLyBhIHBhcmVudCBvZiB0aGUgUG9ydGFsLiBUaGF0IG1lYW5zIHdlIGNhbiBpZ25vcmUgaXQgYmVjYXVzZSB0aGVcbiAgICAgICAgICAgICAgICAgIC8vIFBvcnRhbCB3aWxsIGJ1YmJsZSB0aHJvdWdoIHRvIHVzLlxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGdyYW5kTm9kZSA9IGdyYW5kTm9kZS5yZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSAvLyBOb3cgd2UgbmVlZCB0byBmaW5kIGl0J3MgY29ycmVzcG9uZGluZyBob3N0IGZpYmVyIGluIHRoZSBvdGhlclxuICAgICAgICAgIC8vIHRyZWUuIFRvIGRvIHRoaXMgd2UgY2FuIHVzZSBnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZSwgYnV0IHdlXG4gICAgICAgICAgLy8gbmVlZCB0byB2YWxpZGF0ZSB0aGF0IHRoZSBmaWJlciBpcyBhIGhvc3QgaW5zdGFuY2UsIG90aGVyd2lzZVxuICAgICAgICAgIC8vIHdlIG5lZWQgdG8gdHJhdmVyc2UgdXAgdGhyb3VnaCB0aGUgRE9NIHRpbGwgd2UgZmluZCB0aGUgY29ycmVjdFxuICAgICAgICAgIC8vIG5vZGUgdGhhdCBpcyBmcm9tIHRoZSBvdGhlciB0cmVlLlxuXG5cbiAgICAgICAgICB3aGlsZSAoY29udGFpbmVyICE9PSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgcGFyZW50Tm9kZSA9IGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKGNvbnRhaW5lcik7XG5cbiAgICAgICAgICAgIGlmIChwYXJlbnROb2RlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHBhcmVudFRhZyA9IHBhcmVudE5vZGUudGFnO1xuXG4gICAgICAgICAgICBpZiAocGFyZW50VGFnID09PSBIb3N0Q29tcG9uZW50IHx8IHBhcmVudFRhZyA9PT0gSG9zdFRleHQpIHtcbiAgICAgICAgICAgICAgbm9kZSA9IGFuY2VzdG9ySW5zdCA9IHBhcmVudE5vZGU7XG4gICAgICAgICAgICAgIGNvbnRpbnVlIG1haW5Mb29wO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb250YWluZXIgPSBjb250YWluZXIucGFyZW50Tm9kZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYmF0Y2hlZEV2ZW50VXBkYXRlcyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGRpc3BhdGNoRXZlbnRzRm9yUGx1Z2lucyhkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIG5hdGl2ZUV2ZW50LCBhbmNlc3Rvckluc3QpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRGlzcGF0Y2hMaXN0ZW5lcihpbnN0YW5jZSwgbGlzdGVuZXIsIGN1cnJlbnRUYXJnZXQpIHtcbiAgcmV0dXJuIHtcbiAgICBpbnN0YW5jZTogaW5zdGFuY2UsXG4gICAgbGlzdGVuZXI6IGxpc3RlbmVyLFxuICAgIGN1cnJlbnRUYXJnZXQ6IGN1cnJlbnRUYXJnZXRcbiAgfTtcbn1cblxuZnVuY3Rpb24gYWNjdW11bGF0ZVNpbmdsZVBoYXNlTGlzdGVuZXJzKHRhcmdldEZpYmVyLCByZWFjdE5hbWUsIG5hdGl2ZUV2ZW50VHlwZSwgaW5DYXB0dXJlUGhhc2UsIGFjY3VtdWxhdGVUYXJnZXRPbmx5KSB7XG4gIHZhciBjYXB0dXJlTmFtZSA9IHJlYWN0TmFtZSAhPT0gbnVsbCA/IHJlYWN0TmFtZSArICdDYXB0dXJlJyA6IG51bGw7XG4gIHZhciByZWFjdEV2ZW50TmFtZSA9IGluQ2FwdHVyZVBoYXNlID8gY2FwdHVyZU5hbWUgOiByZWFjdE5hbWU7XG4gIHZhciBsaXN0ZW5lcnMgPSBbXTtcbiAgdmFyIGluc3RhbmNlID0gdGFyZ2V0RmliZXI7XG4gIHZhciBsYXN0SG9zdENvbXBvbmVudCA9IG51bGw7IC8vIEFjY3VtdWxhdGUgYWxsIGluc3RhbmNlcyBhbmQgbGlzdGVuZXJzIHZpYSB0aGUgdGFyZ2V0IC0+IHJvb3QgcGF0aC5cblxuICB3aGlsZSAoaW5zdGFuY2UgIT09IG51bGwpIHtcbiAgICB2YXIgX2luc3RhbmNlMiA9IGluc3RhbmNlLFxuICAgICAgICBzdGF0ZU5vZGUgPSBfaW5zdGFuY2UyLnN0YXRlTm9kZSxcbiAgICAgICAgdGFnID0gX2luc3RhbmNlMi50YWc7IC8vIEhhbmRsZSBsaXN0ZW5lcnMgdGhhdCBhcmUgb24gSG9zdENvbXBvbmVudHMgKGkuZS4gPGRpdj4pXG5cbiAgICBpZiAodGFnID09PSBIb3N0Q29tcG9uZW50ICYmIHN0YXRlTm9kZSAhPT0gbnVsbCkge1xuICAgICAgbGFzdEhvc3RDb21wb25lbnQgPSBzdGF0ZU5vZGU7IC8vIGNyZWF0ZUV2ZW50SGFuZGxlIGxpc3RlbmVyc1xuXG5cbiAgICAgIGlmIChyZWFjdEV2ZW50TmFtZSAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgbGlzdGVuZXIgPSBnZXRMaXN0ZW5lcihpbnN0YW5jZSwgcmVhY3RFdmVudE5hbWUpO1xuXG4gICAgICAgIGlmIChsaXN0ZW5lciAhPSBudWxsKSB7XG4gICAgICAgICAgbGlzdGVuZXJzLnB1c2goY3JlYXRlRGlzcGF0Y2hMaXN0ZW5lcihpbnN0YW5jZSwgbGlzdGVuZXIsIGxhc3RIb3N0Q29tcG9uZW50KSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIElmIHdlIGFyZSBvbmx5IGFjY3VtdWxhdGluZyBldmVudHMgZm9yIHRoZSB0YXJnZXQsIHRoZW4gd2UgZG9uJ3RcbiAgICAvLyBjb250aW51ZSB0byBwcm9wYWdhdGUgdGhyb3VnaCB0aGUgUmVhY3QgZmliZXIgdHJlZSB0byBmaW5kIG90aGVyXG4gICAgLy8gbGlzdGVuZXJzLlxuXG5cbiAgICBpZiAoYWNjdW11bGF0ZVRhcmdldE9ubHkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGluc3RhbmNlID0gaW5zdGFuY2UucmV0dXJuO1xuICB9XG5cbiAgcmV0dXJuIGxpc3RlbmVycztcbn0gLy8gV2Ugc2hvdWxkIG9ubHkgdXNlIHRoaXMgZnVuY3Rpb24gZm9yOlxuLy8gLSBCZWZvcmVJbnB1dEV2ZW50UGx1Z2luXG4vLyAtIENoYW5nZUV2ZW50UGx1Z2luXG4vLyAtIFNlbGVjdEV2ZW50UGx1Z2luXG4vLyBUaGlzIGlzIGJlY2F1c2Ugd2Ugb25seSBwcm9jZXNzIHRoZXNlIHBsdWdpbnNcbi8vIGluIHRoZSBidWJibGUgcGhhc2UsIHNvIHdlIG5lZWQgdG8gYWNjdW11bGF0ZSB0d29cbi8vIHBoYXNlIGV2ZW50IGxpc3RlbmVycyAodmlhIGVtdWxhdGlvbikuXG5cbmZ1bmN0aW9uIGFjY3VtdWxhdGVUd29QaGFzZUxpc3RlbmVycyh0YXJnZXRGaWJlciwgcmVhY3ROYW1lKSB7XG4gIHZhciBjYXB0dXJlTmFtZSA9IHJlYWN0TmFtZSArICdDYXB0dXJlJztcbiAgdmFyIGxpc3RlbmVycyA9IFtdO1xuICB2YXIgaW5zdGFuY2UgPSB0YXJnZXRGaWJlcjsgLy8gQWNjdW11bGF0ZSBhbGwgaW5zdGFuY2VzIGFuZCBsaXN0ZW5lcnMgdmlhIHRoZSB0YXJnZXQgLT4gcm9vdCBwYXRoLlxuXG4gIHdoaWxlIChpbnN0YW5jZSAhPT0gbnVsbCkge1xuICAgIHZhciBfaW5zdGFuY2UzID0gaW5zdGFuY2UsXG4gICAgICAgIHN0YXRlTm9kZSA9IF9pbnN0YW5jZTMuc3RhdGVOb2RlLFxuICAgICAgICB0YWcgPSBfaW5zdGFuY2UzLnRhZzsgLy8gSGFuZGxlIGxpc3RlbmVycyB0aGF0IGFyZSBvbiBIb3N0Q29tcG9uZW50cyAoaS5lLiA8ZGl2PilcblxuICAgIGlmICh0YWcgPT09IEhvc3RDb21wb25lbnQgJiYgc3RhdGVOb2RlICE9PSBudWxsKSB7XG4gICAgICB2YXIgY3VycmVudFRhcmdldCA9IHN0YXRlTm9kZTtcbiAgICAgIHZhciBjYXB0dXJlTGlzdGVuZXIgPSBnZXRMaXN0ZW5lcihpbnN0YW5jZSwgY2FwdHVyZU5hbWUpO1xuXG4gICAgICBpZiAoY2FwdHVyZUxpc3RlbmVyICE9IG51bGwpIHtcbiAgICAgICAgbGlzdGVuZXJzLnVuc2hpZnQoY3JlYXRlRGlzcGF0Y2hMaXN0ZW5lcihpbnN0YW5jZSwgY2FwdHVyZUxpc3RlbmVyLCBjdXJyZW50VGFyZ2V0KSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBidWJibGVMaXN0ZW5lciA9IGdldExpc3RlbmVyKGluc3RhbmNlLCByZWFjdE5hbWUpO1xuXG4gICAgICBpZiAoYnViYmxlTGlzdGVuZXIgIT0gbnVsbCkge1xuICAgICAgICBsaXN0ZW5lcnMucHVzaChjcmVhdGVEaXNwYXRjaExpc3RlbmVyKGluc3RhbmNlLCBidWJibGVMaXN0ZW5lciwgY3VycmVudFRhcmdldCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGluc3RhbmNlID0gaW5zdGFuY2UucmV0dXJuO1xuICB9XG5cbiAgcmV0dXJuIGxpc3RlbmVycztcbn1cblxuZnVuY3Rpb24gZ2V0UGFyZW50KGluc3QpIHtcbiAgaWYgKGluc3QgPT09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGRvIHtcbiAgICBpbnN0ID0gaW5zdC5yZXR1cm47IC8vIFRPRE86IElmIHRoaXMgaXMgYSBIb3N0Um9vdCB3ZSBtaWdodCB3YW50IHRvIGJhaWwgb3V0LlxuICAgIC8vIFRoYXQgaXMgZGVwZW5kaW5nIG9uIGlmIHdlIHdhbnQgbmVzdGVkIHN1YnRyZWVzIChsYXllcnMpIHRvIGJ1YmJsZVxuICAgIC8vIGV2ZW50cyB0byB0aGVpciBwYXJlbnQuIFdlIGNvdWxkIGFsc28gZ28gdGhyb3VnaCBwYXJlbnROb2RlIG9uIHRoZVxuICAgIC8vIGhvc3Qgbm9kZSBidXQgdGhhdCB3b3VsZG4ndCB3b3JrIGZvciBSZWFjdCBOYXRpdmUgYW5kIGRvZXNuJ3QgbGV0IHVzXG4gICAgLy8gZG8gdGhlIHBvcnRhbCBmZWF0dXJlLlxuICB9IHdoaWxlIChpbnN0ICYmIGluc3QudGFnICE9PSBIb3N0Q29tcG9uZW50KTtcblxuICBpZiAoaW5zdCkge1xuICAgIHJldHVybiBpbnN0O1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4vKipcbiAqIFJldHVybiB0aGUgbG93ZXN0IGNvbW1vbiBhbmNlc3RvciBvZiBBIGFuZCBCLCBvciBudWxsIGlmIHRoZXkgYXJlIGluXG4gKiBkaWZmZXJlbnQgdHJlZXMuXG4gKi9cblxuXG5mdW5jdGlvbiBnZXRMb3dlc3RDb21tb25BbmNlc3RvcihpbnN0QSwgaW5zdEIpIHtcbiAgdmFyIG5vZGVBID0gaW5zdEE7XG4gIHZhciBub2RlQiA9IGluc3RCO1xuICB2YXIgZGVwdGhBID0gMDtcblxuICBmb3IgKHZhciB0ZW1wQSA9IG5vZGVBOyB0ZW1wQTsgdGVtcEEgPSBnZXRQYXJlbnQodGVtcEEpKSB7XG4gICAgZGVwdGhBKys7XG4gIH1cblxuICB2YXIgZGVwdGhCID0gMDtcblxuICBmb3IgKHZhciB0ZW1wQiA9IG5vZGVCOyB0ZW1wQjsgdGVtcEIgPSBnZXRQYXJlbnQodGVtcEIpKSB7XG4gICAgZGVwdGhCKys7XG4gIH0gLy8gSWYgQSBpcyBkZWVwZXIsIGNyYXdsIHVwLlxuXG5cbiAgd2hpbGUgKGRlcHRoQSAtIGRlcHRoQiA+IDApIHtcbiAgICBub2RlQSA9IGdldFBhcmVudChub2RlQSk7XG4gICAgZGVwdGhBLS07XG4gIH0gLy8gSWYgQiBpcyBkZWVwZXIsIGNyYXdsIHVwLlxuXG5cbiAgd2hpbGUgKGRlcHRoQiAtIGRlcHRoQSA+IDApIHtcbiAgICBub2RlQiA9IGdldFBhcmVudChub2RlQik7XG4gICAgZGVwdGhCLS07XG4gIH0gLy8gV2FsayBpbiBsb2Nrc3RlcCB1bnRpbCB3ZSBmaW5kIGEgbWF0Y2guXG5cblxuICB2YXIgZGVwdGggPSBkZXB0aEE7XG5cbiAgd2hpbGUgKGRlcHRoLS0pIHtcbiAgICBpZiAobm9kZUEgPT09IG5vZGVCIHx8IG5vZGVCICE9PSBudWxsICYmIG5vZGVBID09PSBub2RlQi5hbHRlcm5hdGUpIHtcbiAgICAgIHJldHVybiBub2RlQTtcbiAgICB9XG5cbiAgICBub2RlQSA9IGdldFBhcmVudChub2RlQSk7XG4gICAgbm9kZUIgPSBnZXRQYXJlbnQobm9kZUIpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGFjY3VtdWxhdGVFbnRlckxlYXZlTGlzdGVuZXJzRm9yRXZlbnQoZGlzcGF0Y2hRdWV1ZSwgZXZlbnQsIHRhcmdldCwgY29tbW9uLCBpbkNhcHR1cmVQaGFzZSkge1xuICB2YXIgcmVnaXN0cmF0aW9uTmFtZSA9IGV2ZW50Ll9yZWFjdE5hbWU7XG4gIHZhciBsaXN0ZW5lcnMgPSBbXTtcbiAgdmFyIGluc3RhbmNlID0gdGFyZ2V0O1xuXG4gIHdoaWxlIChpbnN0YW5jZSAhPT0gbnVsbCkge1xuICAgIGlmIChpbnN0YW5jZSA9PT0gY29tbW9uKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICB2YXIgX2luc3RhbmNlNCA9IGluc3RhbmNlLFxuICAgICAgICBhbHRlcm5hdGUgPSBfaW5zdGFuY2U0LmFsdGVybmF0ZSxcbiAgICAgICAgc3RhdGVOb2RlID0gX2luc3RhbmNlNC5zdGF0ZU5vZGUsXG4gICAgICAgIHRhZyA9IF9pbnN0YW5jZTQudGFnO1xuXG4gICAgaWYgKGFsdGVybmF0ZSAhPT0gbnVsbCAmJiBhbHRlcm5hdGUgPT09IGNvbW1vbikge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHRhZyA9PT0gSG9zdENvbXBvbmVudCAmJiBzdGF0ZU5vZGUgIT09IG51bGwpIHtcbiAgICAgIHZhciBjdXJyZW50VGFyZ2V0ID0gc3RhdGVOb2RlO1xuXG4gICAgICBpZiAoaW5DYXB0dXJlUGhhc2UpIHtcbiAgICAgICAgdmFyIGNhcHR1cmVMaXN0ZW5lciA9IGdldExpc3RlbmVyKGluc3RhbmNlLCByZWdpc3RyYXRpb25OYW1lKTtcblxuICAgICAgICBpZiAoY2FwdHVyZUxpc3RlbmVyICE9IG51bGwpIHtcbiAgICAgICAgICBsaXN0ZW5lcnMudW5zaGlmdChjcmVhdGVEaXNwYXRjaExpc3RlbmVyKGluc3RhbmNlLCBjYXB0dXJlTGlzdGVuZXIsIGN1cnJlbnRUYXJnZXQpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghaW5DYXB0dXJlUGhhc2UpIHtcbiAgICAgICAgdmFyIGJ1YmJsZUxpc3RlbmVyID0gZ2V0TGlzdGVuZXIoaW5zdGFuY2UsIHJlZ2lzdHJhdGlvbk5hbWUpO1xuXG4gICAgICAgIGlmIChidWJibGVMaXN0ZW5lciAhPSBudWxsKSB7XG4gICAgICAgICAgbGlzdGVuZXJzLnB1c2goY3JlYXRlRGlzcGF0Y2hMaXN0ZW5lcihpbnN0YW5jZSwgYnViYmxlTGlzdGVuZXIsIGN1cnJlbnRUYXJnZXQpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGluc3RhbmNlID0gaW5zdGFuY2UucmV0dXJuO1xuICB9XG5cbiAgaWYgKGxpc3RlbmVycy5sZW5ndGggIT09IDApIHtcbiAgICBkaXNwYXRjaFF1ZXVlLnB1c2goe1xuICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgbGlzdGVuZXJzOiBsaXN0ZW5lcnNcbiAgICB9KTtcbiAgfVxufSAvLyBXZSBzaG91bGQgb25seSB1c2UgdGhpcyBmdW5jdGlvbiBmb3I6XG4vLyAtIEVudGVyTGVhdmVFdmVudFBsdWdpblxuLy8gVGhpcyBpcyBiZWNhdXNlIHdlIG9ubHkgcHJvY2VzcyB0aGlzIHBsdWdpblxuLy8gaW4gdGhlIGJ1YmJsZSBwaGFzZSwgc28gd2UgbmVlZCB0byBhY2N1bXVsYXRlIHR3b1xuLy8gcGhhc2UgZXZlbnQgbGlzdGVuZXJzLlxuXG5cbmZ1bmN0aW9uIGFjY3VtdWxhdGVFbnRlckxlYXZlVHdvUGhhc2VMaXN0ZW5lcnMoZGlzcGF0Y2hRdWV1ZSwgbGVhdmVFdmVudCwgZW50ZXJFdmVudCwgZnJvbSwgdG8pIHtcbiAgdmFyIGNvbW1vbiA9IGZyb20gJiYgdG8gPyBnZXRMb3dlc3RDb21tb25BbmNlc3Rvcihmcm9tLCB0bykgOiBudWxsO1xuXG4gIGlmIChmcm9tICE9PSBudWxsKSB7XG4gICAgYWNjdW11bGF0ZUVudGVyTGVhdmVMaXN0ZW5lcnNGb3JFdmVudChkaXNwYXRjaFF1ZXVlLCBsZWF2ZUV2ZW50LCBmcm9tLCBjb21tb24sIGZhbHNlKTtcbiAgfVxuXG4gIGlmICh0byAhPT0gbnVsbCAmJiBlbnRlckV2ZW50ICE9PSBudWxsKSB7XG4gICAgYWNjdW11bGF0ZUVudGVyTGVhdmVMaXN0ZW5lcnNGb3JFdmVudChkaXNwYXRjaFF1ZXVlLCBlbnRlckV2ZW50LCB0bywgY29tbW9uLCB0cnVlKTtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0TGlzdGVuZXJTZXRLZXkoZG9tRXZlbnROYW1lLCBjYXB0dXJlKSB7XG4gIHJldHVybiBkb21FdmVudE5hbWUgKyBcIl9fXCIgKyAoY2FwdHVyZSA/ICdjYXB0dXJlJyA6ICdidWJibGUnKTtcbn1cblxudmFyIGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uID0gZmFsc2U7XG52YXIgREFOR0VST1VTTFlfU0VUX0lOTkVSX0hUTUwgPSAnZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwnO1xudmFyIFNVUFBSRVNTX0NPTlRFTlRfRURJVEFCTEVfV0FSTklORyA9ICdzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmcnO1xudmFyIFNVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HID0gJ3N1cHByZXNzSHlkcmF0aW9uV2FybmluZyc7XG52YXIgQVVUT0ZPQ1VTID0gJ2F1dG9Gb2N1cyc7XG52YXIgQ0hJTERSRU4gPSAnY2hpbGRyZW4nO1xudmFyIFNUWUxFID0gJ3N0eWxlJztcbnZhciBIVE1MJDEgPSAnX19odG1sJztcbnZhciBIVE1MX05BTUVTUEFDRSQxID0gTmFtZXNwYWNlcy5odG1sO1xudmFyIHdhcm5lZFVua25vd25UYWdzO1xudmFyIHN1cHByZXNzSHlkcmF0aW9uV2FybmluZztcbnZhciB2YWxpZGF0ZVByb3BlcnRpZXNJbkRldmVsb3BtZW50O1xudmFyIHdhcm5Gb3JUZXh0RGlmZmVyZW5jZTtcbnZhciB3YXJuRm9yUHJvcERpZmZlcmVuY2U7XG52YXIgd2FybkZvckV4dHJhQXR0cmlidXRlcztcbnZhciB3YXJuRm9ySW52YWxpZEV2ZW50TGlzdGVuZXI7XG52YXIgY2FuRGlmZlN0eWxlRm9ySHlkcmF0aW9uV2FybmluZztcbnZhciBub3JtYWxpemVNYXJrdXBGb3JUZXh0T3JBdHRyaWJ1dGU7XG52YXIgbm9ybWFsaXplSFRNTDtcblxue1xuICB3YXJuZWRVbmtub3duVGFncyA9IHtcbiAgICAvLyBUaGVyZSBhcmUgd29ya2luZyBwb2x5ZmlsbHMgZm9yIDxkaWFsb2c+LiBMZXQgcGVvcGxlIHVzZSBpdC5cbiAgICBkaWFsb2c6IHRydWUsXG4gICAgLy8gRWxlY3Ryb24gc2hpcHMgYSBjdXN0b20gPHdlYnZpZXc+IHRhZyB0byBkaXNwbGF5IGV4dGVybmFsIHdlYiBjb250ZW50IGluXG4gICAgLy8gYW4gaXNvbGF0ZWQgZnJhbWUgYW5kIHByb2Nlc3MuXG4gICAgLy8gVGhpcyB0YWcgaXMgbm90IHByZXNlbnQgaW4gbm9uIEVsZWN0cm9uIGVudmlyb25tZW50cyBzdWNoIGFzIEpTRG9tIHdoaWNoXG4gICAgLy8gaXMgb2Z0ZW4gdXNlZCBmb3IgdGVzdGluZyBwdXJwb3Nlcy5cbiAgICAvLyBAc2VlIGh0dHBzOi8vZWxlY3Ryb25qcy5vcmcvZG9jcy9hcGkvd2Vidmlldy10YWdcbiAgICB3ZWJ2aWV3OiB0cnVlXG4gIH07XG5cbiAgdmFsaWRhdGVQcm9wZXJ0aWVzSW5EZXZlbG9wbWVudCA9IGZ1bmN0aW9uICh0eXBlLCBwcm9wcykge1xuICAgIHZhbGlkYXRlUHJvcGVydGllcyh0eXBlLCBwcm9wcyk7XG4gICAgdmFsaWRhdGVQcm9wZXJ0aWVzJDEodHlwZSwgcHJvcHMpO1xuICAgIHZhbGlkYXRlUHJvcGVydGllcyQyKHR5cGUsIHByb3BzLCB7XG4gICAgICByZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzOiByZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzLFxuICAgICAgcG9zc2libGVSZWdpc3RyYXRpb25OYW1lczogcG9zc2libGVSZWdpc3RyYXRpb25OYW1lc1xuICAgIH0pO1xuICB9OyAvLyBJRSAxMSBwYXJzZXMgJiBub3JtYWxpemVzIHRoZSBzdHlsZSBhdHRyaWJ1dGUgYXMgb3Bwb3NlZCB0byBvdGhlclxuICAvLyBicm93c2Vycy4gSXQgYWRkcyBzcGFjZXMgYW5kIHNvcnRzIHRoZSBwcm9wZXJ0aWVzIGluIHNvbWVcbiAgLy8gbm9uLWFscGhhYmV0aWNhbCBvcmRlci4gSGFuZGxpbmcgdGhhdCB3b3VsZCByZXF1aXJlIHNvcnRpbmcgQ1NTXG4gIC8vIHByb3BlcnRpZXMgaW4gdGhlIGNsaWVudCAmIHNlcnZlciB2ZXJzaW9ucyBvciBhcHBseWluZ1xuICAvLyBgZXhwZWN0ZWRTdHlsZWAgdG8gYSB0ZW1wb3JhcnkgRE9NIG5vZGUgdG8gcmVhZCBpdHMgYHN0eWxlYCBhdHRyaWJ1dGVcbiAgLy8gbm9ybWFsaXplZC4gU2luY2UgaXQgb25seSBhZmZlY3RzIElFLCB3ZSdyZSBza2lwcGluZyBzdHlsZSB3YXJuaW5nc1xuICAvLyBpbiB0aGF0IGJyb3dzZXIgY29tcGxldGVseSBpbiBmYXZvciBvZiBkb2luZyBhbGwgdGhhdCB3b3JrLlxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMTgwN1xuXG5cbiAgY2FuRGlmZlN0eWxlRm9ySHlkcmF0aW9uV2FybmluZyA9IGNhblVzZURPTSAmJiAhZG9jdW1lbnQuZG9jdW1lbnRNb2RlOyAvLyBIVE1MIHBhcnNpbmcgbm9ybWFsaXplcyBDUiBhbmQgQ1JMRiB0byBMRi5cbiAgLy8gSXQgYWxzbyBjYW4gdHVybiBcXHUwMDAwIGludG8gXFx1RkZGRCBpbnNpZGUgYXR0cmlidXRlcy5cbiAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2h0bWw1L3NpbmdsZS1wYWdlLmh0bWwjcHJlcHJvY2Vzc2luZy10aGUtaW5wdXQtc3RyZWFtXG4gIC8vIElmIHdlIGhhdmUgYSBtaXNtYXRjaCwgaXQgbWlnaHQgYmUgY2F1c2VkIGJ5IHRoYXQuXG4gIC8vIFdlIHdpbGwgc3RpbGwgcGF0Y2ggdXAgaW4gdGhpcyBjYXNlIGJ1dCBub3QgZmlyZSB0aGUgd2FybmluZy5cblxuICB2YXIgTk9STUFMSVpFX05FV0xJTkVTX1JFR0VYID0gL1xcclxcbj8vZztcbiAgdmFyIE5PUk1BTElaRV9OVUxMX0FORF9SRVBMQUNFTUVOVF9SRUdFWCA9IC9cXHUwMDAwfFxcdUZGRkQvZztcblxuICBub3JtYWxpemVNYXJrdXBGb3JUZXh0T3JBdHRyaWJ1dGUgPSBmdW5jdGlvbiAobWFya3VwKSB7XG4gICAgdmFyIG1hcmt1cFN0cmluZyA9IHR5cGVvZiBtYXJrdXAgPT09ICdzdHJpbmcnID8gbWFya3VwIDogJycgKyBtYXJrdXA7XG4gICAgcmV0dXJuIG1hcmt1cFN0cmluZy5yZXBsYWNlKE5PUk1BTElaRV9ORVdMSU5FU19SRUdFWCwgJ1xcbicpLnJlcGxhY2UoTk9STUFMSVpFX05VTExfQU5EX1JFUExBQ0VNRU5UX1JFR0VYLCAnJyk7XG4gIH07XG5cbiAgd2FybkZvclRleHREaWZmZXJlbmNlID0gZnVuY3Rpb24gKHNlcnZlclRleHQsIGNsaWVudFRleHQpIHtcbiAgICBpZiAoZGlkV2FybkludmFsaWRIeWRyYXRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgbm9ybWFsaXplZENsaWVudFRleHQgPSBub3JtYWxpemVNYXJrdXBGb3JUZXh0T3JBdHRyaWJ1dGUoY2xpZW50VGV4dCk7XG4gICAgdmFyIG5vcm1hbGl6ZWRTZXJ2ZXJUZXh0ID0gbm9ybWFsaXplTWFya3VwRm9yVGV4dE9yQXR0cmlidXRlKHNlcnZlclRleHQpO1xuXG4gICAgaWYgKG5vcm1hbGl6ZWRTZXJ2ZXJUZXh0ID09PSBub3JtYWxpemVkQ2xpZW50VGV4dCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uID0gdHJ1ZTtcblxuICAgIGVycm9yKCdUZXh0IGNvbnRlbnQgZGlkIG5vdCBtYXRjaC4gU2VydmVyOiBcIiVzXCIgQ2xpZW50OiBcIiVzXCInLCBub3JtYWxpemVkU2VydmVyVGV4dCwgbm9ybWFsaXplZENsaWVudFRleHQpO1xuICB9O1xuXG4gIHdhcm5Gb3JQcm9wRGlmZmVyZW5jZSA9IGZ1bmN0aW9uIChwcm9wTmFtZSwgc2VydmVyVmFsdWUsIGNsaWVudFZhbHVlKSB7XG4gICAgaWYgKGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIG5vcm1hbGl6ZWRDbGllbnRWYWx1ZSA9IG5vcm1hbGl6ZU1hcmt1cEZvclRleHRPckF0dHJpYnV0ZShjbGllbnRWYWx1ZSk7XG4gICAgdmFyIG5vcm1hbGl6ZWRTZXJ2ZXJWYWx1ZSA9IG5vcm1hbGl6ZU1hcmt1cEZvclRleHRPckF0dHJpYnV0ZShzZXJ2ZXJWYWx1ZSk7XG5cbiAgICBpZiAobm9ybWFsaXplZFNlcnZlclZhbHVlID09PSBub3JtYWxpemVkQ2xpZW50VmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbiA9IHRydWU7XG5cbiAgICBlcnJvcignUHJvcCBgJXNgIGRpZCBub3QgbWF0Y2guIFNlcnZlcjogJXMgQ2xpZW50OiAlcycsIHByb3BOYW1lLCBKU09OLnN0cmluZ2lmeShub3JtYWxpemVkU2VydmVyVmFsdWUpLCBKU09OLnN0cmluZ2lmeShub3JtYWxpemVkQ2xpZW50VmFsdWUpKTtcbiAgfTtcblxuICB3YXJuRm9yRXh0cmFBdHRyaWJ1dGVzID0gZnVuY3Rpb24gKGF0dHJpYnV0ZU5hbWVzKSB7XG4gICAgaWYgKGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGlkV2FybkludmFsaWRIeWRyYXRpb24gPSB0cnVlO1xuICAgIHZhciBuYW1lcyA9IFtdO1xuICAgIGF0dHJpYnV0ZU5hbWVzLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIG5hbWVzLnB1c2gobmFtZSk7XG4gICAgfSk7XG5cbiAgICBlcnJvcignRXh0cmEgYXR0cmlidXRlcyBmcm9tIHRoZSBzZXJ2ZXI6ICVzJywgbmFtZXMpO1xuICB9O1xuXG4gIHdhcm5Gb3JJbnZhbGlkRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uIChyZWdpc3RyYXRpb25OYW1lLCBsaXN0ZW5lcikge1xuICAgIGlmIChsaXN0ZW5lciA9PT0gZmFsc2UpIHtcbiAgICAgIGVycm9yKCdFeHBlY3RlZCBgJXNgIGxpc3RlbmVyIHRvIGJlIGEgZnVuY3Rpb24sIGluc3RlYWQgZ290IGBmYWxzZWAuXFxuXFxuJyArICdJZiB5b3UgdXNlZCB0byBjb25kaXRpb25hbGx5IG9taXQgaXQgd2l0aCAlcz17Y29uZGl0aW9uICYmIHZhbHVlfSwgJyArICdwYXNzICVzPXtjb25kaXRpb24gPyB2YWx1ZSA6IHVuZGVmaW5lZH0gaW5zdGVhZC4nLCByZWdpc3RyYXRpb25OYW1lLCByZWdpc3RyYXRpb25OYW1lLCByZWdpc3RyYXRpb25OYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXJyb3IoJ0V4cGVjdGVkIGAlc2AgbGlzdGVuZXIgdG8gYmUgYSBmdW5jdGlvbiwgaW5zdGVhZCBnb3QgYSB2YWx1ZSBvZiBgJXNgIHR5cGUuJywgcmVnaXN0cmF0aW9uTmFtZSwgdHlwZW9mIGxpc3RlbmVyKTtcbiAgICB9XG4gIH07IC8vIFBhcnNlIHRoZSBIVE1MIGFuZCByZWFkIGl0IGJhY2sgdG8gbm9ybWFsaXplIHRoZSBIVE1MIHN0cmluZyBzbyB0aGF0IGl0XG4gIC8vIGNhbiBiZSB1c2VkIGZvciBjb21wYXJpc29uLlxuXG5cbiAgbm9ybWFsaXplSFRNTCA9IGZ1bmN0aW9uIChwYXJlbnQsIGh0bWwpIHtcbiAgICAvLyBXZSBjb3VsZCBoYXZlIGNyZWF0ZWQgYSBzZXBhcmF0ZSBkb2N1bWVudCBoZXJlIHRvIGF2b2lkXG4gICAgLy8gcmUtaW5pdGlhbGl6aW5nIGN1c3RvbSBlbGVtZW50cyBpZiB0aGV5IGV4aXN0LiBCdXQgdGhpcyBicmVha3NcbiAgICAvLyBob3cgPG5vc2NyaXB0PiBpcyBiZWluZyBoYW5kbGVkLiBTbyB3ZSB1c2UgdGhlIHNhbWUgZG9jdW1lbnQuXG4gICAgLy8gU2VlIHRoZSBkaXNjdXNzaW9uIGluIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzExMTU3LlxuICAgIHZhciB0ZXN0RWxlbWVudCA9IHBhcmVudC5uYW1lc3BhY2VVUkkgPT09IEhUTUxfTkFNRVNQQUNFJDEgPyBwYXJlbnQub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KHBhcmVudC50YWdOYW1lKSA6IHBhcmVudC5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhwYXJlbnQubmFtZXNwYWNlVVJJLCBwYXJlbnQudGFnTmFtZSk7XG4gICAgdGVzdEVsZW1lbnQuaW5uZXJIVE1MID0gaHRtbDtcbiAgICByZXR1cm4gdGVzdEVsZW1lbnQuaW5uZXJIVE1MO1xuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRPd25lckRvY3VtZW50RnJvbVJvb3RDb250YWluZXIocm9vdENvbnRhaW5lckVsZW1lbnQpIHtcbiAgcmV0dXJuIHJvb3RDb250YWluZXJFbGVtZW50Lm5vZGVUeXBlID09PSBET0NVTUVOVF9OT0RFID8gcm9vdENvbnRhaW5lckVsZW1lbnQgOiByb290Q29udGFpbmVyRWxlbWVudC5vd25lckRvY3VtZW50O1xufVxuXG5mdW5jdGlvbiBub29wKCkge31cblxuZnVuY3Rpb24gdHJhcENsaWNrT25Ob25JbnRlcmFjdGl2ZUVsZW1lbnQobm9kZSkge1xuICAvLyBNb2JpbGUgU2FmYXJpIGRvZXMgbm90IGZpcmUgcHJvcGVybHkgYnViYmxlIGNsaWNrIGV2ZW50cyBvblxuICAvLyBub24taW50ZXJhY3RpdmUgZWxlbWVudHMsIHdoaWNoIG1lYW5zIGRlbGVnYXRlZCBjbGljayBsaXN0ZW5lcnMgZG8gbm90XG4gIC8vIGZpcmUuIFRoZSB3b3JrYXJvdW5kIGZvciB0aGlzIGJ1ZyBpbnZvbHZlcyBhdHRhY2hpbmcgYW4gZW1wdHkgY2xpY2tcbiAgLy8gbGlzdGVuZXIgb24gdGhlIHRhcmdldCBub2RlLlxuICAvLyBodHRwczovL3d3dy5xdWlya3Ntb2RlLm9yZy9ibG9nL2FyY2hpdmVzLzIwMTAvMDkvY2xpY2tfZXZlbnRfZGVsLmh0bWxcbiAgLy8gSnVzdCBzZXQgaXQgdXNpbmcgdGhlIG9uY2xpY2sgcHJvcGVydHkgc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRvIG1hbmFnZSBhbnlcbiAgLy8gYm9va2tlZXBpbmcgZm9yIGl0LiBOb3Qgc3VyZSBpZiB3ZSBuZWVkIHRvIGNsZWFyIGl0IHdoZW4gdGhlIGxpc3RlbmVyIGlzXG4gIC8vIHJlbW92ZWQuXG4gIC8vIFRPRE86IE9ubHkgZG8gdGhpcyBmb3IgdGhlIHJlbGV2YW50IFNhZmFyaXMgbWF5YmU/XG4gIG5vZGUub25jbGljayA9IG5vb3A7XG59XG5cbmZ1bmN0aW9uIHNldEluaXRpYWxET01Qcm9wZXJ0aWVzKHRhZywgZG9tRWxlbWVudCwgcm9vdENvbnRhaW5lckVsZW1lbnQsIG5leHRQcm9wcywgaXNDdXN0b21Db21wb25lbnRUYWcpIHtcbiAgZm9yICh2YXIgcHJvcEtleSBpbiBuZXh0UHJvcHMpIHtcbiAgICBpZiAoIW5leHRQcm9wcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgdmFyIG5leHRQcm9wID0gbmV4dFByb3BzW3Byb3BLZXldO1xuXG4gICAgaWYgKHByb3BLZXkgPT09IFNUWUxFKSB7XG4gICAgICB7XG4gICAgICAgIGlmIChuZXh0UHJvcCkge1xuICAgICAgICAgIC8vIEZyZWV6ZSB0aGUgbmV4dCBzdHlsZSBvYmplY3Qgc28gdGhhdCB3ZSBjYW4gYXNzdW1lIGl0IHdvbid0IGJlXG4gICAgICAgICAgLy8gbXV0YXRlZC4gV2UgaGF2ZSBhbHJlYWR5IHdhcm5lZCBmb3IgdGhpcyBpbiB0aGUgcGFzdC5cbiAgICAgICAgICBPYmplY3QuZnJlZXplKG5leHRQcm9wKTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBSZWxpZXMgb24gYHVwZGF0ZVN0eWxlc0J5SURgIG5vdCBtdXRhdGluZyBgc3R5bGVVcGRhdGVzYC5cblxuXG4gICAgICBzZXRWYWx1ZUZvclN0eWxlcyhkb21FbGVtZW50LCBuZXh0UHJvcCk7XG4gICAgfSBlbHNlIGlmIChwcm9wS2V5ID09PSBEQU5HRVJPVVNMWV9TRVRfSU5ORVJfSFRNTCkge1xuICAgICAgdmFyIG5leHRIdG1sID0gbmV4dFByb3AgPyBuZXh0UHJvcFtIVE1MJDFdIDogdW5kZWZpbmVkO1xuXG4gICAgICBpZiAobmV4dEh0bWwgIT0gbnVsbCkge1xuICAgICAgICBzZXRJbm5lckhUTUwoZG9tRWxlbWVudCwgbmV4dEh0bWwpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocHJvcEtleSA9PT0gQ0hJTERSRU4pIHtcbiAgICAgIGlmICh0eXBlb2YgbmV4dFByb3AgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIC8vIEF2b2lkIHNldHRpbmcgaW5pdGlhbCB0ZXh0Q29udGVudCB3aGVuIHRoZSB0ZXh0IGlzIGVtcHR5LiBJbiBJRTExIHNldHRpbmdcbiAgICAgICAgLy8gdGV4dENvbnRlbnQgb24gYSA8dGV4dGFyZWE+IHdpbGwgY2F1c2UgdGhlIHBsYWNlaG9sZGVyIHRvIG5vdFxuICAgICAgICAvLyBzaG93IHdpdGhpbiB0aGUgPHRleHRhcmVhPiB1bnRpbCBpdCBoYXMgYmVlbiBmb2N1c2VkIGFuZCBibHVycmVkIGFnYWluLlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzY3MzEjaXNzdWVjb21tZW50LTI1NDg3NDU1M1xuICAgICAgICB2YXIgY2FuU2V0VGV4dENvbnRlbnQgPSB0YWcgIT09ICd0ZXh0YXJlYScgfHwgbmV4dFByb3AgIT09ICcnO1xuXG4gICAgICAgIGlmIChjYW5TZXRUZXh0Q29udGVudCkge1xuICAgICAgICAgIHNldFRleHRDb250ZW50KGRvbUVsZW1lbnQsIG5leHRQcm9wKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgbmV4dFByb3AgPT09ICdudW1iZXInKSB7XG4gICAgICAgIHNldFRleHRDb250ZW50KGRvbUVsZW1lbnQsICcnICsgbmV4dFByb3ApO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocHJvcEtleSA9PT0gU1VQUFJFU1NfQ09OVEVOVF9FRElUQUJMRV9XQVJOSU5HIHx8IHByb3BLZXkgPT09IFNVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HKSA7IGVsc2UgaWYgKHByb3BLZXkgPT09IEFVVE9GT0NVUykgOyBlbHNlIGlmIChyZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzLmhhc093blByb3BlcnR5KHByb3BLZXkpKSB7XG4gICAgICBpZiAobmV4dFByb3AgIT0gbnVsbCkge1xuICAgICAgICBpZiAoIHR5cGVvZiBuZXh0UHJvcCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHdhcm5Gb3JJbnZhbGlkRXZlbnRMaXN0ZW5lcihwcm9wS2V5LCBuZXh0UHJvcCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvcEtleSA9PT0gJ29uU2Nyb2xsJykge1xuICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ3Njcm9sbCcsIGRvbUVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChuZXh0UHJvcCAhPSBudWxsKSB7XG4gICAgICBzZXRWYWx1ZUZvclByb3BlcnR5KGRvbUVsZW1lbnQsIHByb3BLZXksIG5leHRQcm9wLCBpc0N1c3RvbUNvbXBvbmVudFRhZyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZURPTVByb3BlcnRpZXMoZG9tRWxlbWVudCwgdXBkYXRlUGF5bG9hZCwgd2FzQ3VzdG9tQ29tcG9uZW50VGFnLCBpc0N1c3RvbUNvbXBvbmVudFRhZykge1xuICAvLyBUT0RPOiBIYW5kbGUgd2FzQ3VzdG9tQ29tcG9uZW50VGFnXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdXBkYXRlUGF5bG9hZC5sZW5ndGg7IGkgKz0gMikge1xuICAgIHZhciBwcm9wS2V5ID0gdXBkYXRlUGF5bG9hZFtpXTtcbiAgICB2YXIgcHJvcFZhbHVlID0gdXBkYXRlUGF5bG9hZFtpICsgMV07XG5cbiAgICBpZiAocHJvcEtleSA9PT0gU1RZTEUpIHtcbiAgICAgIHNldFZhbHVlRm9yU3R5bGVzKGRvbUVsZW1lbnQsIHByb3BWYWx1ZSk7XG4gICAgfSBlbHNlIGlmIChwcm9wS2V5ID09PSBEQU5HRVJPVVNMWV9TRVRfSU5ORVJfSFRNTCkge1xuICAgICAgc2V0SW5uZXJIVE1MKGRvbUVsZW1lbnQsIHByb3BWYWx1ZSk7XG4gICAgfSBlbHNlIGlmIChwcm9wS2V5ID09PSBDSElMRFJFTikge1xuICAgICAgc2V0VGV4dENvbnRlbnQoZG9tRWxlbWVudCwgcHJvcFZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0VmFsdWVGb3JQcm9wZXJ0eShkb21FbGVtZW50LCBwcm9wS2V5LCBwcm9wVmFsdWUsIGlzQ3VzdG9tQ29tcG9uZW50VGFnKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlRWxlbWVudCh0eXBlLCBwcm9wcywgcm9vdENvbnRhaW5lckVsZW1lbnQsIHBhcmVudE5hbWVzcGFjZSkge1xuICB2YXIgaXNDdXN0b21Db21wb25lbnRUYWc7IC8vIFdlIGNyZWF0ZSB0YWdzIGluIHRoZSBuYW1lc3BhY2Ugb2YgdGhlaXIgcGFyZW50IGNvbnRhaW5lciwgZXhjZXB0IEhUTUxcbiAgLy8gdGFncyBnZXQgbm8gbmFtZXNwYWNlLlxuXG4gIHZhciBvd25lckRvY3VtZW50ID0gZ2V0T3duZXJEb2N1bWVudEZyb21Sb290Q29udGFpbmVyKHJvb3RDb250YWluZXJFbGVtZW50KTtcbiAgdmFyIGRvbUVsZW1lbnQ7XG4gIHZhciBuYW1lc3BhY2VVUkkgPSBwYXJlbnROYW1lc3BhY2U7XG5cbiAgaWYgKG5hbWVzcGFjZVVSSSA9PT0gSFRNTF9OQU1FU1BBQ0UkMSkge1xuICAgIG5hbWVzcGFjZVVSSSA9IGdldEludHJpbnNpY05hbWVzcGFjZSh0eXBlKTtcbiAgfVxuXG4gIGlmIChuYW1lc3BhY2VVUkkgPT09IEhUTUxfTkFNRVNQQUNFJDEpIHtcbiAgICB7XG4gICAgICBpc0N1c3RvbUNvbXBvbmVudFRhZyA9IGlzQ3VzdG9tQ29tcG9uZW50KHR5cGUsIHByb3BzKTsgLy8gU2hvdWxkIHRoaXMgY2hlY2sgYmUgZ2F0ZWQgYnkgcGFyZW50IG5hbWVzcGFjZT8gTm90IHN1cmUgd2Ugd2FudCB0b1xuICAgICAgLy8gYWxsb3cgPFNWRz4gb3IgPG1BVEg+LlxuXG4gICAgICBpZiAoIWlzQ3VzdG9tQ29tcG9uZW50VGFnICYmIHR5cGUgIT09IHR5cGUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICBlcnJvcignPCVzIC8+IGlzIHVzaW5nIGluY29ycmVjdCBjYXNpbmcuICcgKyAnVXNlIFBhc2NhbENhc2UgZm9yIFJlYWN0IGNvbXBvbmVudHMsICcgKyAnb3IgbG93ZXJjYXNlIGZvciBIVE1MIGVsZW1lbnRzLicsIHR5cGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlID09PSAnc2NyaXB0Jykge1xuICAgICAgLy8gQ3JlYXRlIHRoZSBzY3JpcHQgdmlhIC5pbm5lckhUTUwgc28gaXRzIFwicGFyc2VyLWluc2VydGVkXCIgZmxhZyBpc1xuICAgICAgLy8gc2V0IHRvIHRydWUgYW5kIGl0IGRvZXMgbm90IGV4ZWN1dGVcbiAgICAgIHZhciBkaXYgPSBvd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXG4gICAgICBkaXYuaW5uZXJIVE1MID0gJzxzY3JpcHQ+PCcgKyAnL3NjcmlwdD4nOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICAvLyBUaGlzIGlzIGd1YXJhbnRlZWQgdG8geWllbGQgYSBzY3JpcHQgZWxlbWVudC5cblxuICAgICAgdmFyIGZpcnN0Q2hpbGQgPSBkaXYuZmlyc3RDaGlsZDtcbiAgICAgIGRvbUVsZW1lbnQgPSBkaXYucmVtb3ZlQ2hpbGQoZmlyc3RDaGlsZCk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgcHJvcHMuaXMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyAkRmxvd0lzc3VlIGBjcmVhdGVFbGVtZW50YCBzaG91bGQgYmUgdXBkYXRlZCBmb3IgV2ViIENvbXBvbmVudHNcbiAgICAgIGRvbUVsZW1lbnQgPSBvd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodHlwZSwge1xuICAgICAgICBpczogcHJvcHMuaXNcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTZXBhcmF0ZSBlbHNlIGJyYW5jaCBpbnN0ZWFkIG9mIHVzaW5nIGBwcm9wcy5pcyB8fCB1bmRlZmluZWRgIGFib3ZlIGJlY2F1c2Ugb2YgYSBGaXJlZm94IGJ1Zy5cbiAgICAgIC8vIFNlZSBkaXNjdXNzaW9uIGluIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzY4OTZcbiAgICAgIC8vIGFuZCBkaXNjdXNzaW9uIGluIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTEyNzYyNDBcbiAgICAgIGRvbUVsZW1lbnQgPSBvd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodHlwZSk7IC8vIE5vcm1hbGx5IGF0dHJpYnV0ZXMgYXJlIGFzc2lnbmVkIGluIGBzZXRJbml0aWFsRE9NUHJvcGVydGllc2AsIGhvd2V2ZXIgdGhlIGBtdWx0aXBsZWAgYW5kIGBzaXplYFxuICAgICAgLy8gYXR0cmlidXRlcyBvbiBgc2VsZWN0YHMgbmVlZHMgdG8gYmUgYWRkZWQgYmVmb3JlIGBvcHRpb25gcyBhcmUgaW5zZXJ0ZWQuXG4gICAgICAvLyBUaGlzIHByZXZlbnRzOlxuICAgICAgLy8gLSBhIGJ1ZyB3aGVyZSB0aGUgYHNlbGVjdGAgZG9lcyBub3Qgc2Nyb2xsIHRvIHRoZSBjb3JyZWN0IG9wdGlvbiBiZWNhdXNlIHNpbmd1bGFyXG4gICAgICAvLyAgYHNlbGVjdGAgZWxlbWVudHMgYXV0b21hdGljYWxseSBwaWNrIHRoZSBmaXJzdCBpdGVtICMxMzIyMlxuICAgICAgLy8gLSBhIGJ1ZyB3aGVyZSB0aGUgYHNlbGVjdGAgc2V0IHRoZSBmaXJzdCBpdGVtIGFzIHNlbGVjdGVkIGRlc3BpdGUgdGhlIGBzaXplYCBhdHRyaWJ1dGUgIzE0MjM5XG4gICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMzIyMlxuICAgICAgLy8gYW5kIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTQyMzlcblxuICAgICAgaWYgKHR5cGUgPT09ICdzZWxlY3QnKSB7XG4gICAgICAgIHZhciBub2RlID0gZG9tRWxlbWVudDtcblxuICAgICAgICBpZiAocHJvcHMubXVsdGlwbGUpIHtcbiAgICAgICAgICBub2RlLm11bHRpcGxlID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9wcy5zaXplKSB7XG4gICAgICAgICAgLy8gU2V0dGluZyBhIHNpemUgZ3JlYXRlciB0aGFuIDEgY2F1c2VzIGEgc2VsZWN0IHRvIGJlaGF2ZSBsaWtlIGBtdWx0aXBsZT10cnVlYCwgd2hlcmVcbiAgICAgICAgICAvLyBpdCBpcyBwb3NzaWJsZSB0aGF0IG5vIG9wdGlvbiBpcyBzZWxlY3RlZC5cbiAgICAgICAgICAvL1xuICAgICAgICAgIC8vIFRoaXMgaXMgb25seSBuZWNlc3Nhcnkgd2hlbiBhIHNlbGVjdCBpbiBcInNpbmdsZSBzZWxlY3Rpb24gbW9kZVwiLlxuICAgICAgICAgIG5vZGUuc2l6ZSA9IHByb3BzLnNpemU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZG9tRWxlbWVudCA9IG93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG5hbWVzcGFjZVVSSSwgdHlwZSk7XG4gIH1cblxuICB7XG4gICAgaWYgKG5hbWVzcGFjZVVSSSA9PT0gSFRNTF9OQU1FU1BBQ0UkMSkge1xuICAgICAgaWYgKCFpc0N1c3RvbUNvbXBvbmVudFRhZyAmJiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZG9tRWxlbWVudCkgPT09ICdbb2JqZWN0IEhUTUxVbmtub3duRWxlbWVudF0nICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwod2FybmVkVW5rbm93blRhZ3MsIHR5cGUpKSB7XG4gICAgICAgIHdhcm5lZFVua25vd25UYWdzW3R5cGVdID0gdHJ1ZTtcblxuICAgICAgICBlcnJvcignVGhlIHRhZyA8JXM+IGlzIHVucmVjb2duaXplZCBpbiB0aGlzIGJyb3dzZXIuICcgKyAnSWYgeW91IG1lYW50IHRvIHJlbmRlciBhIFJlYWN0IGNvbXBvbmVudCwgc3RhcnQgaXRzIG5hbWUgd2l0aCAnICsgJ2FuIHVwcGVyY2FzZSBsZXR0ZXIuJywgdHlwZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRvbUVsZW1lbnQ7XG59XG5mdW5jdGlvbiBjcmVhdGVUZXh0Tm9kZSh0ZXh0LCByb290Q29udGFpbmVyRWxlbWVudCkge1xuICByZXR1cm4gZ2V0T3duZXJEb2N1bWVudEZyb21Sb290Q29udGFpbmVyKHJvb3RDb250YWluZXJFbGVtZW50KS5jcmVhdGVUZXh0Tm9kZSh0ZXh0KTtcbn1cbmZ1bmN0aW9uIHNldEluaXRpYWxQcm9wZXJ0aWVzKGRvbUVsZW1lbnQsIHRhZywgcmF3UHJvcHMsIHJvb3RDb250YWluZXJFbGVtZW50KSB7XG4gIHZhciBpc0N1c3RvbUNvbXBvbmVudFRhZyA9IGlzQ3VzdG9tQ29tcG9uZW50KHRhZywgcmF3UHJvcHMpO1xuXG4gIHtcbiAgICB2YWxpZGF0ZVByb3BlcnRpZXNJbkRldmVsb3BtZW50KHRhZywgcmF3UHJvcHMpO1xuICB9IC8vIFRPRE86IE1ha2Ugc3VyZSB0aGF0IHdlIGNoZWNrIGlzTW91bnRlZCBiZWZvcmUgZmlyaW5nIGFueSBvZiB0aGVzZSBldmVudHMuXG5cblxuICB2YXIgcHJvcHM7XG5cbiAgc3dpdGNoICh0YWcpIHtcbiAgICBjYXNlICdkaWFsb2cnOlxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnY2FuY2VsJywgZG9tRWxlbWVudCk7XG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdjbG9zZScsIGRvbUVsZW1lbnQpO1xuICAgICAgcHJvcHMgPSByYXdQcm9wcztcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnaWZyYW1lJzpcbiAgICBjYXNlICdvYmplY3QnOlxuICAgIGNhc2UgJ2VtYmVkJzpcbiAgICAgIC8vIFdlIGxpc3RlbiB0byB0aGlzIGV2ZW50IGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIHRoZSBsb2FkIGV2ZW50LlxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnbG9hZCcsIGRvbUVsZW1lbnQpO1xuICAgICAgcHJvcHMgPSByYXdQcm9wcztcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAndmlkZW8nOlxuICAgIGNhc2UgJ2F1ZGlvJzpcbiAgICAgIC8vIFdlIGxpc3RlbiB0byB0aGVzZSBldmVudHMgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgYWxsIHRoZSBtZWRpYSBldmVudHMuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lZGlhRXZlbnRUeXBlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KG1lZGlhRXZlbnRUeXBlc1tpXSwgZG9tRWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIHByb3BzID0gcmF3UHJvcHM7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3NvdXJjZSc6XG4gICAgICAvLyBXZSBsaXN0ZW4gdG8gdGhpcyBldmVudCBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciB0aGUgZXJyb3IgZXZlbnQuXG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdlcnJvcicsIGRvbUVsZW1lbnQpO1xuICAgICAgcHJvcHMgPSByYXdQcm9wcztcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnaW1nJzpcbiAgICBjYXNlICdpbWFnZSc6XG4gICAgY2FzZSAnbGluayc6XG4gICAgICAvLyBXZSBsaXN0ZW4gdG8gdGhlc2UgZXZlbnRzIGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIGVycm9yIGFuZCBsb2FkIGV2ZW50cy5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2Vycm9yJywgZG9tRWxlbWVudCk7XG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdsb2FkJywgZG9tRWxlbWVudCk7XG4gICAgICBwcm9wcyA9IHJhd1Byb3BzO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdkZXRhaWxzJzpcbiAgICAgIC8vIFdlIGxpc3RlbiB0byB0aGlzIGV2ZW50IGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIHRoZSB0b2dnbGUgZXZlbnQuXG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCd0b2dnbGUnLCBkb21FbGVtZW50KTtcbiAgICAgIHByb3BzID0gcmF3UHJvcHM7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2lucHV0JzpcbiAgICAgIGluaXRXcmFwcGVyU3RhdGUoZG9tRWxlbWVudCwgcmF3UHJvcHMpO1xuICAgICAgcHJvcHMgPSBnZXRIb3N0UHJvcHMoZG9tRWxlbWVudCwgcmF3UHJvcHMpOyAvLyBXZSBsaXN0ZW4gdG8gdGhpcyBldmVudCBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciB0aGUgaW52YWxpZCBldmVudC5cblxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnaW52YWxpZCcsIGRvbUVsZW1lbnQpO1xuXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ29wdGlvbic6XG4gICAgICB2YWxpZGF0ZVByb3BzKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTtcbiAgICAgIHByb3BzID0gZ2V0SG9zdFByb3BzJDEoZG9tRWxlbWVudCwgcmF3UHJvcHMpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgaW5pdFdyYXBwZXJTdGF0ZSQxKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTtcbiAgICAgIHByb3BzID0gZ2V0SG9zdFByb3BzJDIoZG9tRWxlbWVudCwgcmF3UHJvcHMpOyAvLyBXZSBsaXN0ZW4gdG8gdGhpcyBldmVudCBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciB0aGUgaW52YWxpZCBldmVudC5cblxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnaW52YWxpZCcsIGRvbUVsZW1lbnQpO1xuXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3RleHRhcmVhJzpcbiAgICAgIGluaXRXcmFwcGVyU3RhdGUkMihkb21FbGVtZW50LCByYXdQcm9wcyk7XG4gICAgICBwcm9wcyA9IGdldEhvc3RQcm9wcyQzKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTsgLy8gV2UgbGlzdGVuIHRvIHRoaXMgZXZlbnQgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgdGhlIGludmFsaWQgZXZlbnQuXG5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2ludmFsaWQnLCBkb21FbGVtZW50KTtcblxuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcHJvcHMgPSByYXdQcm9wcztcbiAgfVxuXG4gIGFzc2VydFZhbGlkUHJvcHModGFnLCBwcm9wcyk7XG4gIHNldEluaXRpYWxET01Qcm9wZXJ0aWVzKHRhZywgZG9tRWxlbWVudCwgcm9vdENvbnRhaW5lckVsZW1lbnQsIHByb3BzLCBpc0N1c3RvbUNvbXBvbmVudFRhZyk7XG5cbiAgc3dpdGNoICh0YWcpIHtcbiAgICBjYXNlICdpbnB1dCc6XG4gICAgICAvLyBUT0RPOiBNYWtlIHN1cmUgd2UgY2hlY2sgaWYgdGhpcyBpcyBzdGlsbCB1bm1vdW50ZWQgb3IgZG8gYW55IGNsZWFuXG4gICAgICAvLyB1cCBuZWNlc3Nhcnkgc2luY2Ugd2UgbmV2ZXIgc3RvcCB0cmFja2luZyBhbnltb3JlLlxuICAgICAgdHJhY2soZG9tRWxlbWVudCk7XG4gICAgICBwb3N0TW91bnRXcmFwcGVyKGRvbUVsZW1lbnQsIHJhd1Byb3BzLCBmYWxzZSk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3RleHRhcmVhJzpcbiAgICAgIC8vIFRPRE86IE1ha2Ugc3VyZSB3ZSBjaGVjayBpZiB0aGlzIGlzIHN0aWxsIHVubW91bnRlZCBvciBkbyBhbnkgY2xlYW5cbiAgICAgIC8vIHVwIG5lY2Vzc2FyeSBzaW5jZSB3ZSBuZXZlciBzdG9wIHRyYWNraW5nIGFueW1vcmUuXG4gICAgICB0cmFjayhkb21FbGVtZW50KTtcbiAgICAgIHBvc3RNb3VudFdyYXBwZXIkMyhkb21FbGVtZW50KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnb3B0aW9uJzpcbiAgICAgIHBvc3RNb3VudFdyYXBwZXIkMShkb21FbGVtZW50LCByYXdQcm9wcyk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgICBwb3N0TW91bnRXcmFwcGVyJDIoZG9tRWxlbWVudCwgcmF3UHJvcHMpO1xuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgaWYgKHR5cGVvZiBwcm9wcy5vbkNsaWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIFRPRE86IFRoaXMgY2FzdCBtYXkgbm90IGJlIHNvdW5kIGZvciBTVkcsIE1hdGhNTCBvciBjdXN0b20gZWxlbWVudHMuXG4gICAgICAgIHRyYXBDbGlja09uTm9uSW50ZXJhY3RpdmVFbGVtZW50KGRvbUVsZW1lbnQpO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcbiAgfVxufSAvLyBDYWxjdWxhdGUgdGhlIGRpZmYgYmV0d2VlbiB0aGUgdHdvIG9iamVjdHMuXG5cbmZ1bmN0aW9uIGRpZmZQcm9wZXJ0aWVzKGRvbUVsZW1lbnQsIHRhZywgbGFzdFJhd1Byb3BzLCBuZXh0UmF3UHJvcHMsIHJvb3RDb250YWluZXJFbGVtZW50KSB7XG4gIHtcbiAgICB2YWxpZGF0ZVByb3BlcnRpZXNJbkRldmVsb3BtZW50KHRhZywgbmV4dFJhd1Byb3BzKTtcbiAgfVxuXG4gIHZhciB1cGRhdGVQYXlsb2FkID0gbnVsbDtcbiAgdmFyIGxhc3RQcm9wcztcbiAgdmFyIG5leHRQcm9wcztcblxuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgJ2lucHV0JzpcbiAgICAgIGxhc3RQcm9wcyA9IGdldEhvc3RQcm9wcyhkb21FbGVtZW50LCBsYXN0UmF3UHJvcHMpO1xuICAgICAgbmV4dFByb3BzID0gZ2V0SG9zdFByb3BzKGRvbUVsZW1lbnQsIG5leHRSYXdQcm9wcyk7XG4gICAgICB1cGRhdGVQYXlsb2FkID0gW107XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ29wdGlvbic6XG4gICAgICBsYXN0UHJvcHMgPSBnZXRIb3N0UHJvcHMkMShkb21FbGVtZW50LCBsYXN0UmF3UHJvcHMpO1xuICAgICAgbmV4dFByb3BzID0gZ2V0SG9zdFByb3BzJDEoZG9tRWxlbWVudCwgbmV4dFJhd1Byb3BzKTtcbiAgICAgIHVwZGF0ZVBheWxvYWQgPSBbXTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnc2VsZWN0JzpcbiAgICAgIGxhc3RQcm9wcyA9IGdldEhvc3RQcm9wcyQyKGRvbUVsZW1lbnQsIGxhc3RSYXdQcm9wcyk7XG4gICAgICBuZXh0UHJvcHMgPSBnZXRIb3N0UHJvcHMkMihkb21FbGVtZW50LCBuZXh0UmF3UHJvcHMpO1xuICAgICAgdXBkYXRlUGF5bG9hZCA9IFtdO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICd0ZXh0YXJlYSc6XG4gICAgICBsYXN0UHJvcHMgPSBnZXRIb3N0UHJvcHMkMyhkb21FbGVtZW50LCBsYXN0UmF3UHJvcHMpO1xuICAgICAgbmV4dFByb3BzID0gZ2V0SG9zdFByb3BzJDMoZG9tRWxlbWVudCwgbmV4dFJhd1Byb3BzKTtcbiAgICAgIHVwZGF0ZVBheWxvYWQgPSBbXTtcbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIGxhc3RQcm9wcyA9IGxhc3RSYXdQcm9wcztcbiAgICAgIG5leHRQcm9wcyA9IG5leHRSYXdQcm9wcztcblxuICAgICAgaWYgKHR5cGVvZiBsYXN0UHJvcHMub25DbGljayAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgbmV4dFByb3BzLm9uQ2xpY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gVE9ETzogVGhpcyBjYXN0IG1heSBub3QgYmUgc291bmQgZm9yIFNWRywgTWF0aE1MIG9yIGN1c3RvbSBlbGVtZW50cy5cbiAgICAgICAgdHJhcENsaWNrT25Ob25JbnRlcmFjdGl2ZUVsZW1lbnQoZG9tRWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgYXNzZXJ0VmFsaWRQcm9wcyh0YWcsIG5leHRQcm9wcyk7XG4gIHZhciBwcm9wS2V5O1xuICB2YXIgc3R5bGVOYW1lO1xuICB2YXIgc3R5bGVVcGRhdGVzID0gbnVsbDtcblxuICBmb3IgKHByb3BLZXkgaW4gbGFzdFByb3BzKSB7XG4gICAgaWYgKG5leHRQcm9wcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSB8fCAhbGFzdFByb3BzLmhhc093blByb3BlcnR5KHByb3BLZXkpIHx8IGxhc3RQcm9wc1twcm9wS2V5XSA9PSBudWxsKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAocHJvcEtleSA9PT0gU1RZTEUpIHtcbiAgICAgIHZhciBsYXN0U3R5bGUgPSBsYXN0UHJvcHNbcHJvcEtleV07XG5cbiAgICAgIGZvciAoc3R5bGVOYW1lIGluIGxhc3RTdHlsZSkge1xuICAgICAgICBpZiAobGFzdFN0eWxlLmhhc093blByb3BlcnR5KHN0eWxlTmFtZSkpIHtcbiAgICAgICAgICBpZiAoIXN0eWxlVXBkYXRlcykge1xuICAgICAgICAgICAgc3R5bGVVcGRhdGVzID0ge307XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3R5bGVVcGRhdGVzW3N0eWxlTmFtZV0gPSAnJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocHJvcEtleSA9PT0gREFOR0VST1VTTFlfU0VUX0lOTkVSX0hUTUwgfHwgcHJvcEtleSA9PT0gQ0hJTERSRU4pIDsgZWxzZSBpZiAocHJvcEtleSA9PT0gU1VQUFJFU1NfQ09OVEVOVF9FRElUQUJMRV9XQVJOSU5HIHx8IHByb3BLZXkgPT09IFNVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HKSA7IGVsc2UgaWYgKHByb3BLZXkgPT09IEFVVE9GT0NVUykgOyBlbHNlIGlmIChyZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzLmhhc093blByb3BlcnR5KHByb3BLZXkpKSB7XG4gICAgICAvLyBUaGlzIGlzIGEgc3BlY2lhbCBjYXNlLiBJZiBhbnkgbGlzdGVuZXIgdXBkYXRlcyB3ZSBuZWVkIHRvIGVuc3VyZVxuICAgICAgLy8gdGhhdCB0aGUgXCJjdXJyZW50XCIgZmliZXIgcG9pbnRlciBnZXRzIHVwZGF0ZWQgc28gd2UgbmVlZCBhIGNvbW1pdFxuICAgICAgLy8gdG8gdXBkYXRlIHRoaXMgZWxlbWVudC5cbiAgICAgIGlmICghdXBkYXRlUGF5bG9hZCkge1xuICAgICAgICB1cGRhdGVQYXlsb2FkID0gW107XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEZvciBhbGwgb3RoZXIgZGVsZXRlZCBwcm9wZXJ0aWVzIHdlIGFkZCBpdCB0byB0aGUgcXVldWUuIFdlIHVzZVxuICAgICAgLy8gdGhlIGFsbG93ZWQgcHJvcGVydHkgbGlzdCBpbiB0aGUgY29tbWl0IHBoYXNlIGluc3RlYWQuXG4gICAgICAodXBkYXRlUGF5bG9hZCA9IHVwZGF0ZVBheWxvYWQgfHwgW10pLnB1c2gocHJvcEtleSwgbnVsbCk7XG4gICAgfVxuICB9XG5cbiAgZm9yIChwcm9wS2V5IGluIG5leHRQcm9wcykge1xuICAgIHZhciBuZXh0UHJvcCA9IG5leHRQcm9wc1twcm9wS2V5XTtcbiAgICB2YXIgbGFzdFByb3AgPSBsYXN0UHJvcHMgIT0gbnVsbCA/IGxhc3RQcm9wc1twcm9wS2V5XSA6IHVuZGVmaW5lZDtcblxuICAgIGlmICghbmV4dFByb3BzLmhhc093blByb3BlcnR5KHByb3BLZXkpIHx8IG5leHRQcm9wID09PSBsYXN0UHJvcCB8fCBuZXh0UHJvcCA9PSBudWxsICYmIGxhc3RQcm9wID09IG51bGwpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChwcm9wS2V5ID09PSBTVFlMRSkge1xuICAgICAge1xuICAgICAgICBpZiAobmV4dFByb3ApIHtcbiAgICAgICAgICAvLyBGcmVlemUgdGhlIG5leHQgc3R5bGUgb2JqZWN0IHNvIHRoYXQgd2UgY2FuIGFzc3VtZSBpdCB3b24ndCBiZVxuICAgICAgICAgIC8vIG11dGF0ZWQuIFdlIGhhdmUgYWxyZWFkeSB3YXJuZWQgZm9yIHRoaXMgaW4gdGhlIHBhc3QuXG4gICAgICAgICAgT2JqZWN0LmZyZWV6ZShuZXh0UHJvcCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGxhc3RQcm9wKSB7XG4gICAgICAgIC8vIFVuc2V0IHN0eWxlcyBvbiBgbGFzdFByb3BgIGJ1dCBub3Qgb24gYG5leHRQcm9wYC5cbiAgICAgICAgZm9yIChzdHlsZU5hbWUgaW4gbGFzdFByb3ApIHtcbiAgICAgICAgICBpZiAobGFzdFByb3AuaGFzT3duUHJvcGVydHkoc3R5bGVOYW1lKSAmJiAoIW5leHRQcm9wIHx8ICFuZXh0UHJvcC5oYXNPd25Qcm9wZXJ0eShzdHlsZU5hbWUpKSkge1xuICAgICAgICAgICAgaWYgKCFzdHlsZVVwZGF0ZXMpIHtcbiAgICAgICAgICAgICAgc3R5bGVVcGRhdGVzID0ge307XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN0eWxlVXBkYXRlc1tzdHlsZU5hbWVdID0gJyc7XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIFVwZGF0ZSBzdHlsZXMgdGhhdCBjaGFuZ2VkIHNpbmNlIGBsYXN0UHJvcGAuXG5cblxuICAgICAgICBmb3IgKHN0eWxlTmFtZSBpbiBuZXh0UHJvcCkge1xuICAgICAgICAgIGlmIChuZXh0UHJvcC5oYXNPd25Qcm9wZXJ0eShzdHlsZU5hbWUpICYmIGxhc3RQcm9wW3N0eWxlTmFtZV0gIT09IG5leHRQcm9wW3N0eWxlTmFtZV0pIHtcbiAgICAgICAgICAgIGlmICghc3R5bGVVcGRhdGVzKSB7XG4gICAgICAgICAgICAgIHN0eWxlVXBkYXRlcyA9IHt9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzdHlsZVVwZGF0ZXNbc3R5bGVOYW1lXSA9IG5leHRQcm9wW3N0eWxlTmFtZV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBSZWxpZXMgb24gYHVwZGF0ZVN0eWxlc0J5SURgIG5vdCBtdXRhdGluZyBgc3R5bGVVcGRhdGVzYC5cbiAgICAgICAgaWYgKCFzdHlsZVVwZGF0ZXMpIHtcbiAgICAgICAgICBpZiAoIXVwZGF0ZVBheWxvYWQpIHtcbiAgICAgICAgICAgIHVwZGF0ZVBheWxvYWQgPSBbXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB1cGRhdGVQYXlsb2FkLnB1c2gocHJvcEtleSwgc3R5bGVVcGRhdGVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0eWxlVXBkYXRlcyA9IG5leHRQcm9wO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocHJvcEtleSA9PT0gREFOR0VST1VTTFlfU0VUX0lOTkVSX0hUTUwpIHtcbiAgICAgIHZhciBuZXh0SHRtbCA9IG5leHRQcm9wID8gbmV4dFByb3BbSFRNTCQxXSA6IHVuZGVmaW5lZDtcbiAgICAgIHZhciBsYXN0SHRtbCA9IGxhc3RQcm9wID8gbGFzdFByb3BbSFRNTCQxXSA6IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKG5leHRIdG1sICE9IG51bGwpIHtcbiAgICAgICAgaWYgKGxhc3RIdG1sICE9PSBuZXh0SHRtbCkge1xuICAgICAgICAgICh1cGRhdGVQYXlsb2FkID0gdXBkYXRlUGF5bG9hZCB8fCBbXSkucHVzaChwcm9wS2V5LCBuZXh0SHRtbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHByb3BLZXkgPT09IENISUxEUkVOKSB7XG4gICAgICBpZiAodHlwZW9mIG5leHRQcm9wID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgbmV4dFByb3AgPT09ICdudW1iZXInKSB7XG4gICAgICAgICh1cGRhdGVQYXlsb2FkID0gdXBkYXRlUGF5bG9hZCB8fCBbXSkucHVzaChwcm9wS2V5LCAnJyArIG5leHRQcm9wKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHByb3BLZXkgPT09IFNVUFBSRVNTX0NPTlRFTlRfRURJVEFCTEVfV0FSTklORyB8fCBwcm9wS2V5ID09PSBTVVBQUkVTU19IWURSQVRJT05fV0FSTklORykgOyBlbHNlIGlmIChyZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzLmhhc093blByb3BlcnR5KHByb3BLZXkpKSB7XG4gICAgICBpZiAobmV4dFByb3AgIT0gbnVsbCkge1xuICAgICAgICAvLyBXZSBlYWdlcmx5IGxpc3RlbiB0byB0aGlzIGV2ZW4gdGhvdWdoIHdlIGhhdmVuJ3QgY29tbWl0dGVkIHlldC5cbiAgICAgICAgaWYgKCB0eXBlb2YgbmV4dFByb3AgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB3YXJuRm9ySW52YWxpZEV2ZW50TGlzdGVuZXIocHJvcEtleSwgbmV4dFByb3ApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb3BLZXkgPT09ICdvblNjcm9sbCcpIHtcbiAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdzY3JvbGwnLCBkb21FbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIXVwZGF0ZVBheWxvYWQgJiYgbGFzdFByb3AgIT09IG5leHRQcm9wKSB7XG4gICAgICAgIC8vIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2UuIElmIGFueSBsaXN0ZW5lciB1cGRhdGVzIHdlIG5lZWQgdG8gZW5zdXJlXG4gICAgICAgIC8vIHRoYXQgdGhlIFwiY3VycmVudFwiIHByb3BzIHBvaW50ZXIgZ2V0cyB1cGRhdGVkIHNvIHdlIG5lZWQgYSBjb21taXRcbiAgICAgICAgLy8gdG8gdXBkYXRlIHRoaXMgZWxlbWVudC5cbiAgICAgICAgdXBkYXRlUGF5bG9hZCA9IFtdO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIG5leHRQcm9wID09PSAnb2JqZWN0JyAmJiBuZXh0UHJvcCAhPT0gbnVsbCAmJiBuZXh0UHJvcC4kJHR5cGVvZiA9PT0gUkVBQ1RfT1BBUVVFX0lEX1RZUEUpIHtcbiAgICAgIC8vIElmIHdlIGVuY291bnRlciB1c2VPcGFxdWVSZWZlcmVuY2UncyBvcGFxdWUgb2JqZWN0LCB0aGlzIG1lYW5zIHdlIGFyZSBoeWRyYXRpbmcuXG4gICAgICAvLyBJbiB0aGlzIGNhc2UsIGNhbGwgdGhlIG9wYXF1ZSBvYmplY3QncyB0b1N0cmluZyBmdW5jdGlvbiB3aGljaCBnZW5lcmF0ZXMgYSBuZXcgY2xpZW50XG4gICAgICAvLyBJRCBzbyBjbGllbnQgYW5kIHNlcnZlciBJRHMgbWF0Y2ggYW5kIHRocm93cyB0byByZXJlbmRlci5cbiAgICAgIG5leHRQcm9wLnRvU3RyaW5nKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEZvciBhbnkgb3RoZXIgcHJvcGVydHkgd2UgYWx3YXlzIGFkZCBpdCB0byB0aGUgcXVldWUgYW5kIHRoZW4gd2VcbiAgICAgIC8vIGZpbHRlciBpdCBvdXQgdXNpbmcgdGhlIGFsbG93ZWQgcHJvcGVydHkgbGlzdCBkdXJpbmcgdGhlIGNvbW1pdC5cbiAgICAgICh1cGRhdGVQYXlsb2FkID0gdXBkYXRlUGF5bG9hZCB8fCBbXSkucHVzaChwcm9wS2V5LCBuZXh0UHJvcCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHN0eWxlVXBkYXRlcykge1xuICAgIHtcbiAgICAgIHZhbGlkYXRlU2hvcnRoYW5kUHJvcGVydHlDb2xsaXNpb25JbkRldihzdHlsZVVwZGF0ZXMsIG5leHRQcm9wc1tTVFlMRV0pO1xuICAgIH1cblxuICAgICh1cGRhdGVQYXlsb2FkID0gdXBkYXRlUGF5bG9hZCB8fCBbXSkucHVzaChTVFlMRSwgc3R5bGVVcGRhdGVzKTtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVQYXlsb2FkO1xufSAvLyBBcHBseSB0aGUgZGlmZi5cblxuZnVuY3Rpb24gdXBkYXRlUHJvcGVydGllcyhkb21FbGVtZW50LCB1cGRhdGVQYXlsb2FkLCB0YWcsIGxhc3RSYXdQcm9wcywgbmV4dFJhd1Byb3BzKSB7XG4gIC8vIFVwZGF0ZSBjaGVja2VkICpiZWZvcmUqIG5hbWUuXG4gIC8vIEluIHRoZSBtaWRkbGUgb2YgYW4gdXBkYXRlLCBpdCBpcyBwb3NzaWJsZSB0byBoYXZlIG11bHRpcGxlIGNoZWNrZWQuXG4gIC8vIFdoZW4gYSBjaGVja2VkIHJhZGlvIHRyaWVzIHRvIGNoYW5nZSBuYW1lLCBicm93c2VyIG1ha2VzIGFub3RoZXIgcmFkaW8ncyBjaGVja2VkIGZhbHNlLlxuICBpZiAodGFnID09PSAnaW5wdXQnICYmIG5leHRSYXdQcm9wcy50eXBlID09PSAncmFkaW8nICYmIG5leHRSYXdQcm9wcy5uYW1lICE9IG51bGwpIHtcbiAgICB1cGRhdGVDaGVja2VkKGRvbUVsZW1lbnQsIG5leHRSYXdQcm9wcyk7XG4gIH1cblxuICB2YXIgd2FzQ3VzdG9tQ29tcG9uZW50VGFnID0gaXNDdXN0b21Db21wb25lbnQodGFnLCBsYXN0UmF3UHJvcHMpO1xuICB2YXIgaXNDdXN0b21Db21wb25lbnRUYWcgPSBpc0N1c3RvbUNvbXBvbmVudCh0YWcsIG5leHRSYXdQcm9wcyk7IC8vIEFwcGx5IHRoZSBkaWZmLlxuXG4gIHVwZGF0ZURPTVByb3BlcnRpZXMoZG9tRWxlbWVudCwgdXBkYXRlUGF5bG9hZCwgd2FzQ3VzdG9tQ29tcG9uZW50VGFnLCBpc0N1c3RvbUNvbXBvbmVudFRhZyk7IC8vIFRPRE86IEVuc3VyZSB0aGF0IGFuIHVwZGF0ZSBnZXRzIHNjaGVkdWxlZCBpZiBhbnkgb2YgdGhlIHNwZWNpYWwgcHJvcHNcbiAgLy8gY2hhbmdlZC5cblxuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgJ2lucHV0JzpcbiAgICAgIC8vIFVwZGF0ZSB0aGUgd3JhcHBlciBhcm91bmQgaW5wdXRzICphZnRlciogdXBkYXRpbmcgcHJvcHMuIFRoaXMgaGFzIHRvXG4gICAgICAvLyBoYXBwZW4gYWZ0ZXIgYHVwZGF0ZURPTVByb3BlcnRpZXNgLiBPdGhlcndpc2UgSFRNTDUgaW5wdXQgdmFsaWRhdGlvbnNcbiAgICAgIC8vIHJhaXNlIHdhcm5pbmdzIGFuZCBwcmV2ZW50IHRoZSBuZXcgdmFsdWUgZnJvbSBiZWluZyBhc3NpZ25lZC5cbiAgICAgIHVwZGF0ZVdyYXBwZXIoZG9tRWxlbWVudCwgbmV4dFJhd1Byb3BzKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAndGV4dGFyZWEnOlxuICAgICAgdXBkYXRlV3JhcHBlciQxKGRvbUVsZW1lbnQsIG5leHRSYXdQcm9wcyk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgICAvLyA8c2VsZWN0PiB2YWx1ZSB1cGRhdGUgbmVlZHMgdG8gb2NjdXIgYWZ0ZXIgPG9wdGlvbj4gY2hpbGRyZW5cbiAgICAgIC8vIHJlY29uY2lsaWF0aW9uXG4gICAgICBwb3N0VXBkYXRlV3JhcHBlcihkb21FbGVtZW50LCBuZXh0UmF3UHJvcHMpO1xuICAgICAgYnJlYWs7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0UG9zc2libGVTdGFuZGFyZE5hbWUocHJvcE5hbWUpIHtcbiAge1xuICAgIHZhciBsb3dlckNhc2VkTmFtZSA9IHByb3BOYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgICBpZiAoIXBvc3NpYmxlU3RhbmRhcmROYW1lcy5oYXNPd25Qcm9wZXJ0eShsb3dlckNhc2VkTmFtZSkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBwb3NzaWJsZVN0YW5kYXJkTmFtZXNbbG93ZXJDYXNlZE5hbWVdIHx8IG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGlmZkh5ZHJhdGVkUHJvcGVydGllcyhkb21FbGVtZW50LCB0YWcsIHJhd1Byb3BzLCBwYXJlbnROYW1lc3BhY2UsIHJvb3RDb250YWluZXJFbGVtZW50KSB7XG4gIHZhciBpc0N1c3RvbUNvbXBvbmVudFRhZztcbiAgdmFyIGV4dHJhQXR0cmlidXRlTmFtZXM7XG5cbiAge1xuICAgIHN1cHByZXNzSHlkcmF0aW9uV2FybmluZyA9IHJhd1Byb3BzW1NVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HXSA9PT0gdHJ1ZTtcbiAgICBpc0N1c3RvbUNvbXBvbmVudFRhZyA9IGlzQ3VzdG9tQ29tcG9uZW50KHRhZywgcmF3UHJvcHMpO1xuICAgIHZhbGlkYXRlUHJvcGVydGllc0luRGV2ZWxvcG1lbnQodGFnLCByYXdQcm9wcyk7XG4gIH0gLy8gVE9ETzogTWFrZSBzdXJlIHRoYXQgd2UgY2hlY2sgaXNNb3VudGVkIGJlZm9yZSBmaXJpbmcgYW55IG9mIHRoZXNlIGV2ZW50cy5cblxuXG4gIHN3aXRjaCAodGFnKSB7XG4gICAgY2FzZSAnZGlhbG9nJzpcbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2NhbmNlbCcsIGRvbUVsZW1lbnQpO1xuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnY2xvc2UnLCBkb21FbGVtZW50KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnaWZyYW1lJzpcbiAgICBjYXNlICdvYmplY3QnOlxuICAgIGNhc2UgJ2VtYmVkJzpcbiAgICAgIC8vIFdlIGxpc3RlbiB0byB0aGlzIGV2ZW50IGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIHRoZSBsb2FkIGV2ZW50LlxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnbG9hZCcsIGRvbUVsZW1lbnQpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICd2aWRlbyc6XG4gICAgY2FzZSAnYXVkaW8nOlxuICAgICAgLy8gV2UgbGlzdGVuIHRvIHRoZXNlIGV2ZW50cyBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciBhbGwgdGhlIG1lZGlhIGV2ZW50cy5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVkaWFFdmVudFR5cGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQobWVkaWFFdmVudFR5cGVzW2ldLCBkb21FbGVtZW50KTtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdzb3VyY2UnOlxuICAgICAgLy8gV2UgbGlzdGVuIHRvIHRoaXMgZXZlbnQgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgdGhlIGVycm9yIGV2ZW50LlxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnZXJyb3InLCBkb21FbGVtZW50KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnaW1nJzpcbiAgICBjYXNlICdpbWFnZSc6XG4gICAgY2FzZSAnbGluayc6XG4gICAgICAvLyBXZSBsaXN0ZW4gdG8gdGhlc2UgZXZlbnRzIGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIGVycm9yIGFuZCBsb2FkIGV2ZW50cy5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2Vycm9yJywgZG9tRWxlbWVudCk7XG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdsb2FkJywgZG9tRWxlbWVudCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2RldGFpbHMnOlxuICAgICAgLy8gV2UgbGlzdGVuIHRvIHRoaXMgZXZlbnQgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgdGhlIHRvZ2dsZSBldmVudC5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ3RvZ2dsZScsIGRvbUVsZW1lbnQpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdpbnB1dCc6XG4gICAgICBpbml0V3JhcHBlclN0YXRlKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTsgLy8gV2UgbGlzdGVuIHRvIHRoaXMgZXZlbnQgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgdGhlIGludmFsaWQgZXZlbnQuXG5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2ludmFsaWQnLCBkb21FbGVtZW50KTtcblxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdvcHRpb24nOlxuICAgICAgdmFsaWRhdGVQcm9wcyhkb21FbGVtZW50LCByYXdQcm9wcyk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgICBpbml0V3JhcHBlclN0YXRlJDEoZG9tRWxlbWVudCwgcmF3UHJvcHMpOyAvLyBXZSBsaXN0ZW4gdG8gdGhpcyBldmVudCBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciB0aGUgaW52YWxpZCBldmVudC5cblxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnaW52YWxpZCcsIGRvbUVsZW1lbnQpO1xuXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3RleHRhcmVhJzpcbiAgICAgIGluaXRXcmFwcGVyU3RhdGUkMihkb21FbGVtZW50LCByYXdQcm9wcyk7IC8vIFdlIGxpc3RlbiB0byB0aGlzIGV2ZW50IGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIHRoZSBpbnZhbGlkIGV2ZW50LlxuXG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdpbnZhbGlkJywgZG9tRWxlbWVudCk7XG5cbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgYXNzZXJ0VmFsaWRQcm9wcyh0YWcsIHJhd1Byb3BzKTtcblxuICB7XG4gICAgZXh0cmFBdHRyaWJ1dGVOYW1lcyA9IG5ldyBTZXQoKTtcbiAgICB2YXIgYXR0cmlidXRlcyA9IGRvbUVsZW1lbnQuYXR0cmlidXRlcztcblxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhdHRyaWJ1dGVzLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIG5hbWUgPSBhdHRyaWJ1dGVzW19pXS5uYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgIHN3aXRjaCAobmFtZSkge1xuICAgICAgICAvLyBCdWlsdC1pbiBTU1IgYXR0cmlidXRlIGlzIGFsbG93ZWRcbiAgICAgICAgY2FzZSAnZGF0YS1yZWFjdHJvb3QnOlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICAvLyBDb250cm9sbGVkIGF0dHJpYnV0ZXMgYXJlIG5vdCB2YWxpZGF0ZWRcbiAgICAgICAgLy8gVE9ETzogT25seSBpZ25vcmUgdGhlbSBvbiBjb250cm9sbGVkIHRhZ3MuXG5cbiAgICAgICAgY2FzZSAndmFsdWUnOlxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2NoZWNrZWQnOlxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3NlbGVjdGVkJzpcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIC8vIEludGVudGlvbmFsbHkgdXNlIHRoZSBvcmlnaW5hbCBuYW1lLlxuICAgICAgICAgIC8vIFNlZSBkaXNjdXNzaW9uIGluIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzEwNjc2LlxuICAgICAgICAgIGV4dHJhQXR0cmlidXRlTmFtZXMuYWRkKGF0dHJpYnV0ZXNbX2ldLm5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciB1cGRhdGVQYXlsb2FkID0gbnVsbDtcblxuICBmb3IgKHZhciBwcm9wS2V5IGluIHJhd1Byb3BzKSB7XG4gICAgaWYgKCFyYXdQcm9wcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgdmFyIG5leHRQcm9wID0gcmF3UHJvcHNbcHJvcEtleV07XG5cbiAgICBpZiAocHJvcEtleSA9PT0gQ0hJTERSRU4pIHtcbiAgICAgIC8vIEZvciB0ZXh0IGNvbnRlbnQgY2hpbGRyZW4gd2UgY29tcGFyZSBhZ2FpbnN0IHRleHRDb250ZW50LiBUaGlzXG4gICAgICAvLyBtaWdodCBtYXRjaCBhZGRpdGlvbmFsIEhUTUwgdGhhdCBpcyBoaWRkZW4gd2hlbiB3ZSByZWFkIGl0IHVzaW5nXG4gICAgICAvLyB0ZXh0Q29udGVudC4gRS5nLiBcImZvb1wiIHdpbGwgbWF0Y2ggXCJmPHNwYW4+b288L3NwYW4+XCIgYnV0IHRoYXQgc3RpbGxcbiAgICAgIC8vIHNhdGlzZmllcyBvdXIgcmVxdWlyZW1lbnQuIE91ciByZXF1aXJlbWVudCBpcyBub3QgdG8gcHJvZHVjZSBwZXJmZWN0XG4gICAgICAvLyBIVE1MIGFuZCBhdHRyaWJ1dGVzLiBJZGVhbGx5IHdlIHNob3VsZCBwcmVzZXJ2ZSBzdHJ1Y3R1cmUgYnV0IGl0J3NcbiAgICAgIC8vIG9rIG5vdCB0byBpZiB0aGUgdmlzaWJsZSBjb250ZW50IGlzIHN0aWxsIGVub3VnaCB0byBpbmRpY2F0ZSB3aGF0XG4gICAgICAvLyBldmVuIGxpc3RlbmVycyB0aGVzZSBub2RlcyBtaWdodCBiZSB3aXJlZCB1cCB0by5cbiAgICAgIC8vIFRPRE86IFdhcm4gaWYgdGhlcmUgaXMgbW9yZSB0aGFuIGEgc2luZ2xlIHRleHROb2RlIGFzIGEgY2hpbGQuXG4gICAgICAvLyBUT0RPOiBTaG91bGQgd2UgdXNlIGRvbUVsZW1lbnQuZmlyc3RDaGlsZC5ub2RlVmFsdWUgdG8gY29tcGFyZT9cbiAgICAgIGlmICh0eXBlb2YgbmV4dFByb3AgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmIChkb21FbGVtZW50LnRleHRDb250ZW50ICE9PSBuZXh0UHJvcCkge1xuICAgICAgICAgIGlmICggIXN1cHByZXNzSHlkcmF0aW9uV2FybmluZykge1xuICAgICAgICAgICAgd2FybkZvclRleHREaWZmZXJlbmNlKGRvbUVsZW1lbnQudGV4dENvbnRlbnQsIG5leHRQcm9wKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB1cGRhdGVQYXlsb2FkID0gW0NISUxEUkVOLCBuZXh0UHJvcF07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG5leHRQcm9wID09PSAnbnVtYmVyJykge1xuICAgICAgICBpZiAoZG9tRWxlbWVudC50ZXh0Q29udGVudCAhPT0gJycgKyBuZXh0UHJvcCkge1xuICAgICAgICAgIGlmICggIXN1cHByZXNzSHlkcmF0aW9uV2FybmluZykge1xuICAgICAgICAgICAgd2FybkZvclRleHREaWZmZXJlbmNlKGRvbUVsZW1lbnQudGV4dENvbnRlbnQsIG5leHRQcm9wKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB1cGRhdGVQYXlsb2FkID0gW0NISUxEUkVOLCAnJyArIG5leHRQcm9wXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSkge1xuICAgICAgaWYgKG5leHRQcm9wICE9IG51bGwpIHtcbiAgICAgICAgaWYgKCB0eXBlb2YgbmV4dFByb3AgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB3YXJuRm9ySW52YWxpZEV2ZW50TGlzdGVuZXIocHJvcEtleSwgbmV4dFByb3ApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb3BLZXkgPT09ICdvblNjcm9sbCcpIHtcbiAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdzY3JvbGwnLCBkb21FbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIC8vIENvbnZpbmNlIEZsb3cgd2UndmUgY2FsY3VsYXRlZCBpdCAoaXQncyBERVYtb25seSBpbiB0aGlzIG1ldGhvZC4pXG4gICAgdHlwZW9mIGlzQ3VzdG9tQ29tcG9uZW50VGFnID09PSAnYm9vbGVhbicpIHtcbiAgICAgIC8vIFZhbGlkYXRlIHRoYXQgdGhlIHByb3BlcnRpZXMgY29ycmVzcG9uZCB0byB0aGVpciBleHBlY3RlZCB2YWx1ZXMuXG4gICAgICB2YXIgc2VydmVyVmFsdWUgPSB2b2lkIDA7XG4gICAgICB2YXIgcHJvcGVydHlJbmZvID0gZ2V0UHJvcGVydHlJbmZvKHByb3BLZXkpO1xuXG4gICAgICBpZiAoc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nKSA7IGVsc2UgaWYgKHByb3BLZXkgPT09IFNVUFBSRVNTX0NPTlRFTlRfRURJVEFCTEVfV0FSTklORyB8fCBwcm9wS2V5ID09PSBTVVBQUkVTU19IWURSQVRJT05fV0FSTklORyB8fCAvLyBDb250cm9sbGVkIGF0dHJpYnV0ZXMgYXJlIG5vdCB2YWxpZGF0ZWRcbiAgICAgIC8vIFRPRE86IE9ubHkgaWdub3JlIHRoZW0gb24gY29udHJvbGxlZCB0YWdzLlxuICAgICAgcHJvcEtleSA9PT0gJ3ZhbHVlJyB8fCBwcm9wS2V5ID09PSAnY2hlY2tlZCcgfHwgcHJvcEtleSA9PT0gJ3NlbGVjdGVkJykgOyBlbHNlIGlmIChwcm9wS2V5ID09PSBEQU5HRVJPVVNMWV9TRVRfSU5ORVJfSFRNTCkge1xuICAgICAgICB2YXIgc2VydmVySFRNTCA9IGRvbUVsZW1lbnQuaW5uZXJIVE1MO1xuICAgICAgICB2YXIgbmV4dEh0bWwgPSBuZXh0UHJvcCA/IG5leHRQcm9wW0hUTUwkMV0gOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgaWYgKG5leHRIdG1sICE9IG51bGwpIHtcbiAgICAgICAgICB2YXIgZXhwZWN0ZWRIVE1MID0gbm9ybWFsaXplSFRNTChkb21FbGVtZW50LCBuZXh0SHRtbCk7XG5cbiAgICAgICAgICBpZiAoZXhwZWN0ZWRIVE1MICE9PSBzZXJ2ZXJIVE1MKSB7XG4gICAgICAgICAgICB3YXJuRm9yUHJvcERpZmZlcmVuY2UocHJvcEtleSwgc2VydmVySFRNTCwgZXhwZWN0ZWRIVE1MKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAocHJvcEtleSA9PT0gU1RZTEUpIHtcbiAgICAgICAgLy8gJEZsb3dGaXhNZSAtIFNob3VsZCBiZSBpbmZlcnJlZCBhcyBub3QgdW5kZWZpbmVkLlxuICAgICAgICBleHRyYUF0dHJpYnV0ZU5hbWVzLmRlbGV0ZShwcm9wS2V5KTtcblxuICAgICAgICBpZiAoY2FuRGlmZlN0eWxlRm9ySHlkcmF0aW9uV2FybmluZykge1xuICAgICAgICAgIHZhciBleHBlY3RlZFN0eWxlID0gY3JlYXRlRGFuZ2Vyb3VzU3RyaW5nRm9yU3R5bGVzKG5leHRQcm9wKTtcbiAgICAgICAgICBzZXJ2ZXJWYWx1ZSA9IGRvbUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdzdHlsZScpO1xuXG4gICAgICAgICAgaWYgKGV4cGVjdGVkU3R5bGUgIT09IHNlcnZlclZhbHVlKSB7XG4gICAgICAgICAgICB3YXJuRm9yUHJvcERpZmZlcmVuY2UocHJvcEtleSwgc2VydmVyVmFsdWUsIGV4cGVjdGVkU3R5bGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc0N1c3RvbUNvbXBvbmVudFRhZykge1xuICAgICAgICAvLyAkRmxvd0ZpeE1lIC0gU2hvdWxkIGJlIGluZmVycmVkIGFzIG5vdCB1bmRlZmluZWQuXG4gICAgICAgIGV4dHJhQXR0cmlidXRlTmFtZXMuZGVsZXRlKHByb3BLZXkudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIHNlcnZlclZhbHVlID0gZ2V0VmFsdWVGb3JBdHRyaWJ1dGUoZG9tRWxlbWVudCwgcHJvcEtleSwgbmV4dFByb3ApO1xuXG4gICAgICAgIGlmIChuZXh0UHJvcCAhPT0gc2VydmVyVmFsdWUpIHtcbiAgICAgICAgICB3YXJuRm9yUHJvcERpZmZlcmVuY2UocHJvcEtleSwgc2VydmVyVmFsdWUsIG5leHRQcm9wKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghc2hvdWxkSWdub3JlQXR0cmlidXRlKHByb3BLZXksIHByb3BlcnR5SW5mbywgaXNDdXN0b21Db21wb25lbnRUYWcpICYmICFzaG91bGRSZW1vdmVBdHRyaWJ1dGUocHJvcEtleSwgbmV4dFByb3AsIHByb3BlcnR5SW5mbywgaXNDdXN0b21Db21wb25lbnRUYWcpKSB7XG4gICAgICAgIHZhciBpc01pc21hdGNoRHVlVG9CYWRDYXNpbmcgPSBmYWxzZTtcblxuICAgICAgICBpZiAocHJvcGVydHlJbmZvICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gJEZsb3dGaXhNZSAtIFNob3VsZCBiZSBpbmZlcnJlZCBhcyBub3QgdW5kZWZpbmVkLlxuICAgICAgICAgIGV4dHJhQXR0cmlidXRlTmFtZXMuZGVsZXRlKHByb3BlcnR5SW5mby5hdHRyaWJ1dGVOYW1lKTtcbiAgICAgICAgICBzZXJ2ZXJWYWx1ZSA9IGdldFZhbHVlRm9yUHJvcGVydHkoZG9tRWxlbWVudCwgcHJvcEtleSwgbmV4dFByb3AsIHByb3BlcnR5SW5mbyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIG93bk5hbWVzcGFjZSA9IHBhcmVudE5hbWVzcGFjZTtcblxuICAgICAgICAgIGlmIChvd25OYW1lc3BhY2UgPT09IEhUTUxfTkFNRVNQQUNFJDEpIHtcbiAgICAgICAgICAgIG93bk5hbWVzcGFjZSA9IGdldEludHJpbnNpY05hbWVzcGFjZSh0YWcpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChvd25OYW1lc3BhY2UgPT09IEhUTUxfTkFNRVNQQUNFJDEpIHtcbiAgICAgICAgICAgIC8vICRGbG93Rml4TWUgLSBTaG91bGQgYmUgaW5mZXJyZWQgYXMgbm90IHVuZGVmaW5lZC5cbiAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlTmFtZXMuZGVsZXRlKHByb3BLZXkudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBzdGFuZGFyZE5hbWUgPSBnZXRQb3NzaWJsZVN0YW5kYXJkTmFtZShwcm9wS2V5KTtcblxuICAgICAgICAgICAgaWYgKHN0YW5kYXJkTmFtZSAhPT0gbnVsbCAmJiBzdGFuZGFyZE5hbWUgIT09IHByb3BLZXkpIHtcbiAgICAgICAgICAgICAgLy8gSWYgYW4gU1ZHIHByb3AgaXMgc3VwcGxpZWQgd2l0aCBiYWQgY2FzaW5nLCBpdCB3aWxsXG4gICAgICAgICAgICAgIC8vIGJlIHN1Y2Nlc3NmdWxseSBwYXJzZWQgZnJvbSBIVE1MLCBidXQgd2lsbCBwcm9kdWNlIGEgbWlzbWF0Y2hcbiAgICAgICAgICAgICAgLy8gKGFuZCB3b3VsZCBiZSBpbmNvcnJlY3RseSByZW5kZXJlZCBvbiB0aGUgY2xpZW50KS5cbiAgICAgICAgICAgICAgLy8gSG93ZXZlciwgd2UgYWxyZWFkeSB3YXJuIGFib3V0IGJhZCBjYXNpbmcgZWxzZXdoZXJlLlxuICAgICAgICAgICAgICAvLyBTbyB3ZSdsbCBza2lwIHRoZSBtaXNsZWFkaW5nIGV4dHJhIG1pc21hdGNoIHdhcm5pbmcgaW4gdGhpcyBjYXNlLlxuICAgICAgICAgICAgICBpc01pc21hdGNoRHVlVG9CYWRDYXNpbmcgPSB0cnVlOyAvLyAkRmxvd0ZpeE1lIC0gU2hvdWxkIGJlIGluZmVycmVkIGFzIG5vdCB1bmRlZmluZWQuXG5cbiAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVOYW1lcy5kZWxldGUoc3RhbmRhcmROYW1lKTtcbiAgICAgICAgICAgIH0gLy8gJEZsb3dGaXhNZSAtIFNob3VsZCBiZSBpbmZlcnJlZCBhcyBub3QgdW5kZWZpbmVkLlxuXG5cbiAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlTmFtZXMuZGVsZXRlKHByb3BLZXkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHNlcnZlclZhbHVlID0gZ2V0VmFsdWVGb3JBdHRyaWJ1dGUoZG9tRWxlbWVudCwgcHJvcEtleSwgbmV4dFByb3ApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5leHRQcm9wICE9PSBzZXJ2ZXJWYWx1ZSAmJiAhaXNNaXNtYXRjaER1ZVRvQmFkQ2FzaW5nKSB7XG4gICAgICAgICAgd2FybkZvclByb3BEaWZmZXJlbmNlKHByb3BLZXksIHNlcnZlclZhbHVlLCBuZXh0UHJvcCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB7XG4gICAgLy8gJEZsb3dGaXhNZSAtIFNob3VsZCBiZSBpbmZlcnJlZCBhcyBub3QgdW5kZWZpbmVkLlxuICAgIGlmIChleHRyYUF0dHJpYnV0ZU5hbWVzLnNpemUgPiAwICYmICFzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmcpIHtcbiAgICAgIC8vICRGbG93Rml4TWUgLSBTaG91bGQgYmUgaW5mZXJyZWQgYXMgbm90IHVuZGVmaW5lZC5cbiAgICAgIHdhcm5Gb3JFeHRyYUF0dHJpYnV0ZXMoZXh0cmFBdHRyaWJ1dGVOYW1lcyk7XG4gICAgfVxuICB9XG5cbiAgc3dpdGNoICh0YWcpIHtcbiAgICBjYXNlICdpbnB1dCc6XG4gICAgICAvLyBUT0RPOiBNYWtlIHN1cmUgd2UgY2hlY2sgaWYgdGhpcyBpcyBzdGlsbCB1bm1vdW50ZWQgb3IgZG8gYW55IGNsZWFuXG4gICAgICAvLyB1cCBuZWNlc3Nhcnkgc2luY2Ugd2UgbmV2ZXIgc3RvcCB0cmFja2luZyBhbnltb3JlLlxuICAgICAgdHJhY2soZG9tRWxlbWVudCk7XG4gICAgICBwb3N0TW91bnRXcmFwcGVyKGRvbUVsZW1lbnQsIHJhd1Byb3BzLCB0cnVlKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAndGV4dGFyZWEnOlxuICAgICAgLy8gVE9ETzogTWFrZSBzdXJlIHdlIGNoZWNrIGlmIHRoaXMgaXMgc3RpbGwgdW5tb3VudGVkIG9yIGRvIGFueSBjbGVhblxuICAgICAgLy8gdXAgbmVjZXNzYXJ5IHNpbmNlIHdlIG5ldmVyIHN0b3AgdHJhY2tpbmcgYW55bW9yZS5cbiAgICAgIHRyYWNrKGRvbUVsZW1lbnQpO1xuICAgICAgcG9zdE1vdW50V3JhcHBlciQzKGRvbUVsZW1lbnQpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdzZWxlY3QnOlxuICAgIGNhc2UgJ29wdGlvbic6XG4gICAgICAvLyBGb3IgaW5wdXQgYW5kIHRleHRhcmVhIHdlIGN1cnJlbnQgYWx3YXlzIHNldCB0aGUgdmFsdWUgcHJvcGVydHkgYXRcbiAgICAgIC8vIHBvc3QgbW91bnQgdG8gZm9yY2UgaXQgdG8gZGl2ZXJnZSBmcm9tIGF0dHJpYnV0ZXMuIEhvd2V2ZXIsIGZvclxuICAgICAgLy8gb3B0aW9uIGFuZCBzZWxlY3Qgd2UgZG9uJ3QgcXVpdGUgZG8gdGhlIHNhbWUgdGhpbmcgYW5kIHNlbGVjdFxuICAgICAgLy8gaXMgbm90IHJlc2lsaWVudCB0byB0aGUgRE9NIHN0YXRlIGNoYW5naW5nIHNvIHdlIGRvbid0IGRvIHRoYXQgaGVyZS5cbiAgICAgIC8vIFRPRE86IENvbnNpZGVyIG5vdCBkb2luZyB0aGlzIGZvciBpbnB1dCBhbmQgdGV4dGFyZWEuXG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICBpZiAodHlwZW9mIHJhd1Byb3BzLm9uQ2xpY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gVE9ETzogVGhpcyBjYXN0IG1heSBub3QgYmUgc291bmQgZm9yIFNWRywgTWF0aE1MIG9yIGN1c3RvbSBlbGVtZW50cy5cbiAgICAgICAgdHJhcENsaWNrT25Ob25JbnRlcmFjdGl2ZUVsZW1lbnQoZG9tRWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZVBheWxvYWQ7XG59XG5mdW5jdGlvbiBkaWZmSHlkcmF0ZWRUZXh0KHRleHROb2RlLCB0ZXh0KSB7XG4gIHZhciBpc0RpZmZlcmVudCA9IHRleHROb2RlLm5vZGVWYWx1ZSAhPT0gdGV4dDtcbiAgcmV0dXJuIGlzRGlmZmVyZW50O1xufVxuZnVuY3Rpb24gd2FybkZvclVubWF0Y2hlZFRleHQodGV4dE5vZGUsIHRleHQpIHtcbiAge1xuICAgIHdhcm5Gb3JUZXh0RGlmZmVyZW5jZSh0ZXh0Tm9kZS5ub2RlVmFsdWUsIHRleHQpO1xuICB9XG59XG5mdW5jdGlvbiB3YXJuRm9yRGVsZXRlZEh5ZHJhdGFibGVFbGVtZW50KHBhcmVudE5vZGUsIGNoaWxkKSB7XG4gIHtcbiAgICBpZiAoZGlkV2FybkludmFsaWRIeWRyYXRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbiA9IHRydWU7XG5cbiAgICBlcnJvcignRGlkIG5vdCBleHBlY3Qgc2VydmVyIEhUTUwgdG8gY29udGFpbiBhIDwlcz4gaW4gPCVzPi4nLCBjaGlsZC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLCBwYXJlbnROb2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpO1xuICB9XG59XG5mdW5jdGlvbiB3YXJuRm9yRGVsZXRlZEh5ZHJhdGFibGVUZXh0KHBhcmVudE5vZGUsIGNoaWxkKSB7XG4gIHtcbiAgICBpZiAoZGlkV2FybkludmFsaWRIeWRyYXRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbiA9IHRydWU7XG5cbiAgICBlcnJvcignRGlkIG5vdCBleHBlY3Qgc2VydmVyIEhUTUwgdG8gY29udGFpbiB0aGUgdGV4dCBub2RlIFwiJXNcIiBpbiA8JXM+LicsIGNoaWxkLm5vZGVWYWx1ZSwgcGFyZW50Tm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgfVxufVxuZnVuY3Rpb24gd2FybkZvckluc2VydGVkSHlkcmF0ZWRFbGVtZW50KHBhcmVudE5vZGUsIHRhZywgcHJvcHMpIHtcbiAge1xuICAgIGlmIChkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uID0gdHJ1ZTtcblxuICAgIGVycm9yKCdFeHBlY3RlZCBzZXJ2ZXIgSFRNTCB0byBjb250YWluIGEgbWF0Y2hpbmcgPCVzPiBpbiA8JXM+LicsIHRhZywgcGFyZW50Tm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgfVxufVxuZnVuY3Rpb24gd2FybkZvckluc2VydGVkSHlkcmF0ZWRUZXh0KHBhcmVudE5vZGUsIHRleHQpIHtcbiAge1xuICAgIGlmICh0ZXh0ID09PSAnJykge1xuICAgICAgLy8gV2UgZXhwZWN0IHRvIGluc2VydCBlbXB0eSB0ZXh0IG5vZGVzIHNpbmNlIHRoZXkncmUgbm90IHJlcHJlc2VudGVkIGluXG4gICAgICAvLyB0aGUgSFRNTC5cbiAgICAgIC8vIFRPRE86IFJlbW92ZSB0aGlzIHNwZWNpYWwgY2FzZSBpZiB3ZSBjYW4ganVzdCBhdm9pZCBpbnNlcnRpbmcgZW1wdHlcbiAgICAgIC8vIHRleHQgbm9kZXMuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGlkV2FybkludmFsaWRIeWRyYXRpb24gPSB0cnVlO1xuXG4gICAgZXJyb3IoJ0V4cGVjdGVkIHNlcnZlciBIVE1MIHRvIGNvbnRhaW4gYSBtYXRjaGluZyB0ZXh0IG5vZGUgZm9yIFwiJXNcIiBpbiA8JXM+LicsIHRleHQsIHBhcmVudE5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSk7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlc3RvcmVDb250cm9sbGVkU3RhdGUkMyhkb21FbGVtZW50LCB0YWcsIHByb3BzKSB7XG4gIHN3aXRjaCAodGFnKSB7XG4gICAgY2FzZSAnaW5wdXQnOlxuICAgICAgcmVzdG9yZUNvbnRyb2xsZWRTdGF0ZShkb21FbGVtZW50LCBwcm9wcyk7XG4gICAgICByZXR1cm47XG5cbiAgICBjYXNlICd0ZXh0YXJlYSc6XG4gICAgICByZXN0b3JlQ29udHJvbGxlZFN0YXRlJDIoZG9tRWxlbWVudCwgcHJvcHMpO1xuICAgICAgcmV0dXJuO1xuXG4gICAgY2FzZSAnc2VsZWN0JzpcbiAgICAgIHJlc3RvcmVDb250cm9sbGVkU3RhdGUkMShkb21FbGVtZW50LCBwcm9wcyk7XG4gICAgICByZXR1cm47XG4gIH1cbn1cblxudmFyIHZhbGlkYXRlRE9NTmVzdGluZyA9IGZ1bmN0aW9uICgpIHt9O1xuXG52YXIgdXBkYXRlZEFuY2VzdG9ySW5mbyA9IGZ1bmN0aW9uICgpIHt9O1xuXG57XG4gIC8vIFRoaXMgdmFsaWRhdGlvbiBjb2RlIHdhcyB3cml0dGVuIGJhc2VkIG9uIHRoZSBIVE1MNSBwYXJzaW5nIHNwZWM6XG4gIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI2hhcy1hbi1lbGVtZW50LWluLXNjb3BlXG4gIC8vXG4gIC8vIE5vdGU6IHRoaXMgZG9lcyBub3QgY2F0Y2ggYWxsIGludmFsaWQgbmVzdGluZywgbm9yIGRvZXMgaXQgdHJ5IHRvIChhcyBpdCdzXG4gIC8vIG5vdCBjbGVhciB3aGF0IHByYWN0aWNhbCBiZW5lZml0IGRvaW5nIHNvIHByb3ZpZGVzKTsgaW5zdGVhZCwgd2Ugd2FybiBvbmx5XG4gIC8vIGZvciBjYXNlcyB3aGVyZSB0aGUgcGFyc2VyIHdpbGwgZ2l2ZSBhIHBhcnNlIHRyZWUgZGlmZmVyaW5nIGZyb20gd2hhdCBSZWFjdFxuICAvLyBpbnRlbmRlZC4gRm9yIGV4YW1wbGUsIDxiPjxkaXY+PC9kaXY+PC9iPiBpcyBpbnZhbGlkIGJ1dCB3ZSBkb24ndCB3YXJuXG4gIC8vIGJlY2F1c2UgaXQgc3RpbGwgcGFyc2VzIGNvcnJlY3RseTsgd2UgZG8gd2FybiBmb3Igb3RoZXIgY2FzZXMgbGlrZSBuZXN0ZWRcbiAgLy8gPHA+IHRhZ3Mgd2hlcmUgdGhlIGJlZ2lubmluZyBvZiB0aGUgc2Vjb25kIGVsZW1lbnQgaW1wbGljaXRseSBjbG9zZXMgdGhlXG4gIC8vIGZpcnN0LCBjYXVzaW5nIGEgY29uZnVzaW5nIG1lc3MuXG4gIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3NwZWNpYWxcbiAgdmFyIHNwZWNpYWxUYWdzID0gWydhZGRyZXNzJywgJ2FwcGxldCcsICdhcmVhJywgJ2FydGljbGUnLCAnYXNpZGUnLCAnYmFzZScsICdiYXNlZm9udCcsICdiZ3NvdW5kJywgJ2Jsb2NrcXVvdGUnLCAnYm9keScsICdicicsICdidXR0b24nLCAnY2FwdGlvbicsICdjZW50ZXInLCAnY29sJywgJ2NvbGdyb3VwJywgJ2RkJywgJ2RldGFpbHMnLCAnZGlyJywgJ2RpdicsICdkbCcsICdkdCcsICdlbWJlZCcsICdmaWVsZHNldCcsICdmaWdjYXB0aW9uJywgJ2ZpZ3VyZScsICdmb290ZXInLCAnZm9ybScsICdmcmFtZScsICdmcmFtZXNldCcsICdoMScsICdoMicsICdoMycsICdoNCcsICdoNScsICdoNicsICdoZWFkJywgJ2hlYWRlcicsICdoZ3JvdXAnLCAnaHInLCAnaHRtbCcsICdpZnJhbWUnLCAnaW1nJywgJ2lucHV0JywgJ2lzaW5kZXgnLCAnbGknLCAnbGluaycsICdsaXN0aW5nJywgJ21haW4nLCAnbWFycXVlZScsICdtZW51JywgJ21lbnVpdGVtJywgJ21ldGEnLCAnbmF2JywgJ25vZW1iZWQnLCAnbm9mcmFtZXMnLCAnbm9zY3JpcHQnLCAnb2JqZWN0JywgJ29sJywgJ3AnLCAncGFyYW0nLCAncGxhaW50ZXh0JywgJ3ByZScsICdzY3JpcHQnLCAnc2VjdGlvbicsICdzZWxlY3QnLCAnc291cmNlJywgJ3N0eWxlJywgJ3N1bW1hcnknLCAndGFibGUnLCAndGJvZHknLCAndGQnLCAndGVtcGxhdGUnLCAndGV4dGFyZWEnLCAndGZvb3QnLCAndGgnLCAndGhlYWQnLCAndGl0bGUnLCAndHInLCAndHJhY2snLCAndWwnLCAnd2JyJywgJ3htcCddOyAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNoYXMtYW4tZWxlbWVudC1pbi1zY29wZVxuXG4gIHZhciBpblNjb3BlVGFncyA9IFsnYXBwbGV0JywgJ2NhcHRpb24nLCAnaHRtbCcsICd0YWJsZScsICd0ZCcsICd0aCcsICdtYXJxdWVlJywgJ29iamVjdCcsICd0ZW1wbGF0ZScsIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI2h0bWwtaW50ZWdyYXRpb24tcG9pbnRcbiAgLy8gVE9ETzogRGlzdGluZ3Vpc2ggYnkgbmFtZXNwYWNlIGhlcmUgLS0gZm9yIDx0aXRsZT4sIGluY2x1ZGluZyBpdCBoZXJlXG4gIC8vIGVycnMgb24gdGhlIHNpZGUgb2YgZmV3ZXIgd2FybmluZ3NcbiAgJ2ZvcmVpZ25PYmplY3QnLCAnZGVzYycsICd0aXRsZSddOyAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNoYXMtYW4tZWxlbWVudC1pbi1idXR0b24tc2NvcGVcblxuICB2YXIgYnV0dG9uU2NvcGVUYWdzID0gaW5TY29wZVRhZ3MuY29uY2F0KFsnYnV0dG9uJ10pOyAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNnZW5lcmF0ZS1pbXBsaWVkLWVuZC10YWdzXG5cbiAgdmFyIGltcGxpZWRFbmRUYWdzID0gWydkZCcsICdkdCcsICdsaScsICdvcHRpb24nLCAnb3B0Z3JvdXAnLCAncCcsICdycCcsICdydCddO1xuICB2YXIgZW1wdHlBbmNlc3RvckluZm8gPSB7XG4gICAgY3VycmVudDogbnVsbCxcbiAgICBmb3JtVGFnOiBudWxsLFxuICAgIGFUYWdJblNjb3BlOiBudWxsLFxuICAgIGJ1dHRvblRhZ0luU2NvcGU6IG51bGwsXG4gICAgbm9iclRhZ0luU2NvcGU6IG51bGwsXG4gICAgcFRhZ0luQnV0dG9uU2NvcGU6IG51bGwsXG4gICAgbGlzdEl0ZW1UYWdBdXRvY2xvc2luZzogbnVsbCxcbiAgICBkbEl0ZW1UYWdBdXRvY2xvc2luZzogbnVsbFxuICB9O1xuXG4gIHVwZGF0ZWRBbmNlc3RvckluZm8gPSBmdW5jdGlvbiAob2xkSW5mbywgdGFnKSB7XG4gICAgdmFyIGFuY2VzdG9ySW5mbyA9IF9hc3NpZ24oe30sIG9sZEluZm8gfHwgZW1wdHlBbmNlc3RvckluZm8pO1xuXG4gICAgdmFyIGluZm8gPSB7XG4gICAgICB0YWc6IHRhZ1xuICAgIH07XG5cbiAgICBpZiAoaW5TY29wZVRhZ3MuaW5kZXhPZih0YWcpICE9PSAtMSkge1xuICAgICAgYW5jZXN0b3JJbmZvLmFUYWdJblNjb3BlID0gbnVsbDtcbiAgICAgIGFuY2VzdG9ySW5mby5idXR0b25UYWdJblNjb3BlID0gbnVsbDtcbiAgICAgIGFuY2VzdG9ySW5mby5ub2JyVGFnSW5TY29wZSA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGJ1dHRvblNjb3BlVGFncy5pbmRleE9mKHRhZykgIT09IC0xKSB7XG4gICAgICBhbmNlc3RvckluZm8ucFRhZ0luQnV0dG9uU2NvcGUgPSBudWxsO1xuICAgIH0gLy8gU2VlIHJ1bGVzIGZvciAnbGknLCAnZGQnLCAnZHQnIHN0YXJ0IHRhZ3MgaW5cbiAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW5ib2R5XG5cblxuICAgIGlmIChzcGVjaWFsVGFncy5pbmRleE9mKHRhZykgIT09IC0xICYmIHRhZyAhPT0gJ2FkZHJlc3MnICYmIHRhZyAhPT0gJ2RpdicgJiYgdGFnICE9PSAncCcpIHtcbiAgICAgIGFuY2VzdG9ySW5mby5saXN0SXRlbVRhZ0F1dG9jbG9zaW5nID0gbnVsbDtcbiAgICAgIGFuY2VzdG9ySW5mby5kbEl0ZW1UYWdBdXRvY2xvc2luZyA9IG51bGw7XG4gICAgfVxuXG4gICAgYW5jZXN0b3JJbmZvLmN1cnJlbnQgPSBpbmZvO1xuXG4gICAgaWYgKHRhZyA9PT0gJ2Zvcm0nKSB7XG4gICAgICBhbmNlc3RvckluZm8uZm9ybVRhZyA9IGluZm87XG4gICAgfVxuXG4gICAgaWYgKHRhZyA9PT0gJ2EnKSB7XG4gICAgICBhbmNlc3RvckluZm8uYVRhZ0luU2NvcGUgPSBpbmZvO1xuICAgIH1cblxuICAgIGlmICh0YWcgPT09ICdidXR0b24nKSB7XG4gICAgICBhbmNlc3RvckluZm8uYnV0dG9uVGFnSW5TY29wZSA9IGluZm87XG4gICAgfVxuXG4gICAgaWYgKHRhZyA9PT0gJ25vYnInKSB7XG4gICAgICBhbmNlc3RvckluZm8ubm9iclRhZ0luU2NvcGUgPSBpbmZvO1xuICAgIH1cblxuICAgIGlmICh0YWcgPT09ICdwJykge1xuICAgICAgYW5jZXN0b3JJbmZvLnBUYWdJbkJ1dHRvblNjb3BlID0gaW5mbztcbiAgICB9XG5cbiAgICBpZiAodGFnID09PSAnbGknKSB7XG4gICAgICBhbmNlc3RvckluZm8ubGlzdEl0ZW1UYWdBdXRvY2xvc2luZyA9IGluZm87XG4gICAgfVxuXG4gICAgaWYgKHRhZyA9PT0gJ2RkJyB8fCB0YWcgPT09ICdkdCcpIHtcbiAgICAgIGFuY2VzdG9ySW5mby5kbEl0ZW1UYWdBdXRvY2xvc2luZyA9IGluZm87XG4gICAgfVxuXG4gICAgcmV0dXJuIGFuY2VzdG9ySW5mbztcbiAgfTtcbiAgLyoqXG4gICAqIFJldHVybnMgd2hldGhlclxuICAgKi9cblxuXG4gIHZhciBpc1RhZ1ZhbGlkV2l0aFBhcmVudCA9IGZ1bmN0aW9uICh0YWcsIHBhcmVudFRhZykge1xuICAgIC8vIEZpcnN0LCBsZXQncyBjaGVjayBpZiB3ZSdyZSBpbiBhbiB1bnVzdWFsIHBhcnNpbmcgbW9kZS4uLlxuICAgIHN3aXRjaCAocGFyZW50VGFnKSB7XG4gICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW5zZWxlY3RcbiAgICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICdvcHRpb24nIHx8IHRhZyA9PT0gJ29wdGdyb3VwJyB8fCB0YWcgPT09ICcjdGV4dCc7XG5cbiAgICAgIGNhc2UgJ29wdGdyb3VwJzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJ29wdGlvbicgfHwgdGFnID09PSAnI3RleHQnO1xuICAgICAgLy8gU3RyaWN0bHkgc3BlYWtpbmcsIHNlZWluZyBhbiA8b3B0aW9uPiBkb2Vzbid0IG1lYW4gd2UncmUgaW4gYSA8c2VsZWN0PlxuICAgICAgLy8gYnV0XG5cbiAgICAgIGNhc2UgJ29wdGlvbic6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICcjdGV4dCc7XG4gICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW50ZFxuICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjcGFyc2luZy1tYWluLWluY2FwdGlvblxuICAgICAgLy8gTm8gc3BlY2lhbCBiZWhhdmlvciBzaW5jZSB0aGVzZSBydWxlcyBmYWxsIGJhY2sgdG8gXCJpbiBib2R5XCIgbW9kZSBmb3JcbiAgICAgIC8vIGFsbCBleGNlcHQgc3BlY2lhbCB0YWJsZSBub2RlcyB3aGljaCBjYXVzZSBiYWQgcGFyc2luZyBiZWhhdmlvciBhbnl3YXkuXG4gICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW50clxuXG4gICAgICBjYXNlICd0cic6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICd0aCcgfHwgdGFnID09PSAndGQnIHx8IHRhZyA9PT0gJ3N0eWxlJyB8fCB0YWcgPT09ICdzY3JpcHQnIHx8IHRhZyA9PT0gJ3RlbXBsYXRlJztcbiAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbnRib2R5XG5cbiAgICAgIGNhc2UgJ3Rib2R5JzpcbiAgICAgIGNhc2UgJ3RoZWFkJzpcbiAgICAgIGNhc2UgJ3Rmb290JzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJ3RyJyB8fCB0YWcgPT09ICdzdHlsZScgfHwgdGFnID09PSAnc2NyaXB0JyB8fCB0YWcgPT09ICd0ZW1wbGF0ZSc7XG4gICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW5jb2xncm91cFxuXG4gICAgICBjYXNlICdjb2xncm91cCc6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICdjb2wnIHx8IHRhZyA9PT0gJ3RlbXBsYXRlJztcbiAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbnRhYmxlXG5cbiAgICAgIGNhc2UgJ3RhYmxlJzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJ2NhcHRpb24nIHx8IHRhZyA9PT0gJ2NvbGdyb3VwJyB8fCB0YWcgPT09ICd0Ym9keScgfHwgdGFnID09PSAndGZvb3QnIHx8IHRhZyA9PT0gJ3RoZWFkJyB8fCB0YWcgPT09ICdzdHlsZScgfHwgdGFnID09PSAnc2NyaXB0JyB8fCB0YWcgPT09ICd0ZW1wbGF0ZSc7XG4gICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW5oZWFkXG5cbiAgICAgIGNhc2UgJ2hlYWQnOlxuICAgICAgICByZXR1cm4gdGFnID09PSAnYmFzZScgfHwgdGFnID09PSAnYmFzZWZvbnQnIHx8IHRhZyA9PT0gJ2Jnc291bmQnIHx8IHRhZyA9PT0gJ2xpbmsnIHx8IHRhZyA9PT0gJ21ldGEnIHx8IHRhZyA9PT0gJ3RpdGxlJyB8fCB0YWcgPT09ICdub3NjcmlwdCcgfHwgdGFnID09PSAnbm9mcmFtZXMnIHx8IHRhZyA9PT0gJ3N0eWxlJyB8fCB0YWcgPT09ICdzY3JpcHQnIHx8IHRhZyA9PT0gJ3RlbXBsYXRlJztcbiAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3NlbWFudGljcy5odG1sI3RoZS1odG1sLWVsZW1lbnRcblxuICAgICAgY2FzZSAnaHRtbCc6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICdoZWFkJyB8fCB0YWcgPT09ICdib2R5JyB8fCB0YWcgPT09ICdmcmFtZXNldCc7XG5cbiAgICAgIGNhc2UgJ2ZyYW1lc2V0JzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJ2ZyYW1lJztcblxuICAgICAgY2FzZSAnI2RvY3VtZW50JzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJ2h0bWwnO1xuICAgIH0gLy8gUHJvYmFibHkgaW4gdGhlIFwiaW4gYm9keVwiIHBhcnNpbmcgbW9kZSwgc28gd2Ugb3V0bGF3IG9ubHkgdGFnIGNvbWJvc1xuICAgIC8vIHdoZXJlIHRoZSBwYXJzaW5nIHJ1bGVzIGNhdXNlIGltcGxpY2l0IG9wZW5zIG9yIGNsb3NlcyB0byBiZSBhZGRlZC5cbiAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW5ib2R5XG5cblxuICAgIHN3aXRjaCAodGFnKSB7XG4gICAgICBjYXNlICdoMSc6XG4gICAgICBjYXNlICdoMic6XG4gICAgICBjYXNlICdoMyc6XG4gICAgICBjYXNlICdoNCc6XG4gICAgICBjYXNlICdoNSc6XG4gICAgICBjYXNlICdoNic6XG4gICAgICAgIHJldHVybiBwYXJlbnRUYWcgIT09ICdoMScgJiYgcGFyZW50VGFnICE9PSAnaDInICYmIHBhcmVudFRhZyAhPT0gJ2gzJyAmJiBwYXJlbnRUYWcgIT09ICdoNCcgJiYgcGFyZW50VGFnICE9PSAnaDUnICYmIHBhcmVudFRhZyAhPT0gJ2g2JztcblxuICAgICAgY2FzZSAncnAnOlxuICAgICAgY2FzZSAncnQnOlxuICAgICAgICByZXR1cm4gaW1wbGllZEVuZFRhZ3MuaW5kZXhPZihwYXJlbnRUYWcpID09PSAtMTtcblxuICAgICAgY2FzZSAnYm9keSc6XG4gICAgICBjYXNlICdjYXB0aW9uJzpcbiAgICAgIGNhc2UgJ2NvbCc6XG4gICAgICBjYXNlICdjb2xncm91cCc6XG4gICAgICBjYXNlICdmcmFtZXNldCc6XG4gICAgICBjYXNlICdmcmFtZSc6XG4gICAgICBjYXNlICdoZWFkJzpcbiAgICAgIGNhc2UgJ2h0bWwnOlxuICAgICAgY2FzZSAndGJvZHknOlxuICAgICAgY2FzZSAndGQnOlxuICAgICAgY2FzZSAndGZvb3QnOlxuICAgICAgY2FzZSAndGgnOlxuICAgICAgY2FzZSAndGhlYWQnOlxuICAgICAgY2FzZSAndHInOlxuICAgICAgICAvLyBUaGVzZSB0YWdzIGFyZSBvbmx5IHZhbGlkIHdpdGggYSBmZXcgcGFyZW50cyB0aGF0IGhhdmUgc3BlY2lhbCBjaGlsZFxuICAgICAgICAvLyBwYXJzaW5nIHJ1bGVzIC0tIGlmIHdlJ3JlIGRvd24gaGVyZSwgdGhlbiBub25lIG9mIHRob3NlIG1hdGNoZWQgYW5kXG4gICAgICAgIC8vIHNvIHdlIGFsbG93IGl0IG9ubHkgaWYgd2UgZG9uJ3Qga25vdyB3aGF0IHRoZSBwYXJlbnQgaXMsIGFzIGFsbCBvdGhlclxuICAgICAgICAvLyBjYXNlcyBhcmUgaW52YWxpZC5cbiAgICAgICAgcmV0dXJuIHBhcmVudFRhZyA9PSBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyXG4gICAqL1xuXG5cbiAgdmFyIGZpbmRJbnZhbGlkQW5jZXN0b3JGb3JUYWcgPSBmdW5jdGlvbiAodGFnLCBhbmNlc3RvckluZm8pIHtcbiAgICBzd2l0Y2ggKHRhZykge1xuICAgICAgY2FzZSAnYWRkcmVzcyc6XG4gICAgICBjYXNlICdhcnRpY2xlJzpcbiAgICAgIGNhc2UgJ2FzaWRlJzpcbiAgICAgIGNhc2UgJ2Jsb2NrcXVvdGUnOlxuICAgICAgY2FzZSAnY2VudGVyJzpcbiAgICAgIGNhc2UgJ2RldGFpbHMnOlxuICAgICAgY2FzZSAnZGlhbG9nJzpcbiAgICAgIGNhc2UgJ2Rpcic6XG4gICAgICBjYXNlICdkaXYnOlxuICAgICAgY2FzZSAnZGwnOlxuICAgICAgY2FzZSAnZmllbGRzZXQnOlxuICAgICAgY2FzZSAnZmlnY2FwdGlvbic6XG4gICAgICBjYXNlICdmaWd1cmUnOlxuICAgICAgY2FzZSAnZm9vdGVyJzpcbiAgICAgIGNhc2UgJ2hlYWRlcic6XG4gICAgICBjYXNlICdoZ3JvdXAnOlxuICAgICAgY2FzZSAnbWFpbic6XG4gICAgICBjYXNlICdtZW51JzpcbiAgICAgIGNhc2UgJ25hdic6XG4gICAgICBjYXNlICdvbCc6XG4gICAgICBjYXNlICdwJzpcbiAgICAgIGNhc2UgJ3NlY3Rpb24nOlxuICAgICAgY2FzZSAnc3VtbWFyeSc6XG4gICAgICBjYXNlICd1bCc6XG4gICAgICBjYXNlICdwcmUnOlxuICAgICAgY2FzZSAnbGlzdGluZyc6XG4gICAgICBjYXNlICd0YWJsZSc6XG4gICAgICBjYXNlICdocic6XG4gICAgICBjYXNlICd4bXAnOlxuICAgICAgY2FzZSAnaDEnOlxuICAgICAgY2FzZSAnaDInOlxuICAgICAgY2FzZSAnaDMnOlxuICAgICAgY2FzZSAnaDQnOlxuICAgICAgY2FzZSAnaDUnOlxuICAgICAgY2FzZSAnaDYnOlxuICAgICAgICByZXR1cm4gYW5jZXN0b3JJbmZvLnBUYWdJbkJ1dHRvblNjb3BlO1xuXG4gICAgICBjYXNlICdmb3JtJzpcbiAgICAgICAgcmV0dXJuIGFuY2VzdG9ySW5mby5mb3JtVGFnIHx8IGFuY2VzdG9ySW5mby5wVGFnSW5CdXR0b25TY29wZTtcblxuICAgICAgY2FzZSAnbGknOlxuICAgICAgICByZXR1cm4gYW5jZXN0b3JJbmZvLmxpc3RJdGVtVGFnQXV0b2Nsb3Npbmc7XG5cbiAgICAgIGNhc2UgJ2RkJzpcbiAgICAgIGNhc2UgJ2R0JzpcbiAgICAgICAgcmV0dXJuIGFuY2VzdG9ySW5mby5kbEl0ZW1UYWdBdXRvY2xvc2luZztcblxuICAgICAgY2FzZSAnYnV0dG9uJzpcbiAgICAgICAgcmV0dXJuIGFuY2VzdG9ySW5mby5idXR0b25UYWdJblNjb3BlO1xuXG4gICAgICBjYXNlICdhJzpcbiAgICAgICAgLy8gU3BlYyBzYXlzIHNvbWV0aGluZyBhYm91dCBzdG9yaW5nIGEgbGlzdCBvZiBtYXJrZXJzLCBidXQgaXQgc291bmRzXG4gICAgICAgIC8vIGVxdWl2YWxlbnQgdG8gdGhpcyBjaGVjay5cbiAgICAgICAgcmV0dXJuIGFuY2VzdG9ySW5mby5hVGFnSW5TY29wZTtcblxuICAgICAgY2FzZSAnbm9icic6XG4gICAgICAgIHJldHVybiBhbmNlc3RvckluZm8ubm9iclRhZ0luU2NvcGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG5cbiAgdmFyIGRpZFdhcm4kMSA9IHt9O1xuXG4gIHZhbGlkYXRlRE9NTmVzdGluZyA9IGZ1bmN0aW9uIChjaGlsZFRhZywgY2hpbGRUZXh0LCBhbmNlc3RvckluZm8pIHtcbiAgICBhbmNlc3RvckluZm8gPSBhbmNlc3RvckluZm8gfHwgZW1wdHlBbmNlc3RvckluZm87XG4gICAgdmFyIHBhcmVudEluZm8gPSBhbmNlc3RvckluZm8uY3VycmVudDtcbiAgICB2YXIgcGFyZW50VGFnID0gcGFyZW50SW5mbyAmJiBwYXJlbnRJbmZvLnRhZztcblxuICAgIGlmIChjaGlsZFRleHQgIT0gbnVsbCkge1xuICAgICAgaWYgKGNoaWxkVGFnICE9IG51bGwpIHtcbiAgICAgICAgZXJyb3IoJ3ZhbGlkYXRlRE9NTmVzdGluZzogd2hlbiBjaGlsZFRleHQgaXMgcGFzc2VkLCBjaGlsZFRhZyBzaG91bGQgYmUgbnVsbCcpO1xuICAgICAgfVxuXG4gICAgICBjaGlsZFRhZyA9ICcjdGV4dCc7XG4gICAgfVxuXG4gICAgdmFyIGludmFsaWRQYXJlbnQgPSBpc1RhZ1ZhbGlkV2l0aFBhcmVudChjaGlsZFRhZywgcGFyZW50VGFnKSA/IG51bGwgOiBwYXJlbnRJbmZvO1xuICAgIHZhciBpbnZhbGlkQW5jZXN0b3IgPSBpbnZhbGlkUGFyZW50ID8gbnVsbCA6IGZpbmRJbnZhbGlkQW5jZXN0b3JGb3JUYWcoY2hpbGRUYWcsIGFuY2VzdG9ySW5mbyk7XG4gICAgdmFyIGludmFsaWRQYXJlbnRPckFuY2VzdG9yID0gaW52YWxpZFBhcmVudCB8fCBpbnZhbGlkQW5jZXN0b3I7XG5cbiAgICBpZiAoIWludmFsaWRQYXJlbnRPckFuY2VzdG9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGFuY2VzdG9yVGFnID0gaW52YWxpZFBhcmVudE9yQW5jZXN0b3IudGFnO1xuICAgIHZhciB3YXJuS2V5ID0gISFpbnZhbGlkUGFyZW50ICsgJ3wnICsgY2hpbGRUYWcgKyAnfCcgKyBhbmNlc3RvclRhZztcblxuICAgIGlmIChkaWRXYXJuJDFbd2FybktleV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkaWRXYXJuJDFbd2FybktleV0gPSB0cnVlO1xuICAgIHZhciB0YWdEaXNwbGF5TmFtZSA9IGNoaWxkVGFnO1xuICAgIHZhciB3aGl0ZXNwYWNlSW5mbyA9ICcnO1xuXG4gICAgaWYgKGNoaWxkVGFnID09PSAnI3RleHQnKSB7XG4gICAgICBpZiAoL1xcUy8udGVzdChjaGlsZFRleHQpKSB7XG4gICAgICAgIHRhZ0Rpc3BsYXlOYW1lID0gJ1RleHQgbm9kZXMnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFnRGlzcGxheU5hbWUgPSAnV2hpdGVzcGFjZSB0ZXh0IG5vZGVzJztcbiAgICAgICAgd2hpdGVzcGFjZUluZm8gPSBcIiBNYWtlIHN1cmUgeW91IGRvbid0IGhhdmUgYW55IGV4dHJhIHdoaXRlc3BhY2UgYmV0d2VlbiB0YWdzIG9uIFwiICsgJ2VhY2ggbGluZSBvZiB5b3VyIHNvdXJjZSBjb2RlLic7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhZ0Rpc3BsYXlOYW1lID0gJzwnICsgY2hpbGRUYWcgKyAnPic7XG4gICAgfVxuXG4gICAgaWYgKGludmFsaWRQYXJlbnQpIHtcbiAgICAgIHZhciBpbmZvID0gJyc7XG5cbiAgICAgIGlmIChhbmNlc3RvclRhZyA9PT0gJ3RhYmxlJyAmJiBjaGlsZFRhZyA9PT0gJ3RyJykge1xuICAgICAgICBpbmZvICs9ICcgQWRkIGEgPHRib2R5PiwgPHRoZWFkPiBvciA8dGZvb3Q+IHRvIHlvdXIgY29kZSB0byBtYXRjaCB0aGUgRE9NIHRyZWUgZ2VuZXJhdGVkIGJ5ICcgKyAndGhlIGJyb3dzZXIuJztcbiAgICAgIH1cblxuICAgICAgZXJyb3IoJ3ZhbGlkYXRlRE9NTmVzdGluZyguLi4pOiAlcyBjYW5ub3QgYXBwZWFyIGFzIGEgY2hpbGQgb2YgPCVzPi4lcyVzJywgdGFnRGlzcGxheU5hbWUsIGFuY2VzdG9yVGFnLCB3aGl0ZXNwYWNlSW5mbywgaW5mbyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVycm9yKCd2YWxpZGF0ZURPTU5lc3RpbmcoLi4uKTogJXMgY2Fubm90IGFwcGVhciBhcyBhIGRlc2NlbmRhbnQgb2YgJyArICc8JXM+LicsIHRhZ0Rpc3BsYXlOYW1lLCBhbmNlc3RvclRhZyk7XG4gICAgfVxuICB9O1xufVxuXG52YXIgU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkckMTtcblxue1xuICBTVVBQUkVTU19IWURSQVRJT05fV0FSTklORyQxID0gJ3N1cHByZXNzSHlkcmF0aW9uV2FybmluZyc7XG59XG5cbnZhciBTVVNQRU5TRV9TVEFSVF9EQVRBID0gJyQnO1xudmFyIFNVU1BFTlNFX0VORF9EQVRBID0gJy8kJztcbnZhciBTVVNQRU5TRV9QRU5ESU5HX1NUQVJUX0RBVEEgPSAnJD8nO1xudmFyIFNVU1BFTlNFX0ZBTExCQUNLX1NUQVJUX0RBVEEgPSAnJCEnO1xudmFyIFNUWUxFJDEgPSAnc3R5bGUnO1xudmFyIGV2ZW50c0VuYWJsZWQgPSBudWxsO1xudmFyIHNlbGVjdGlvbkluZm9ybWF0aW9uID0gbnVsbDtcblxuZnVuY3Rpb24gc2hvdWxkQXV0b0ZvY3VzSG9zdENvbXBvbmVudCh0eXBlLCBwcm9wcykge1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICdidXR0b24nOlxuICAgIGNhc2UgJ2lucHV0JzpcbiAgICBjYXNlICdzZWxlY3QnOlxuICAgIGNhc2UgJ3RleHRhcmVhJzpcbiAgICAgIHJldHVybiAhIXByb3BzLmF1dG9Gb2N1cztcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGdldFJvb3RIb3N0Q29udGV4dChyb290Q29udGFpbmVySW5zdGFuY2UpIHtcbiAgdmFyIHR5cGU7XG4gIHZhciBuYW1lc3BhY2U7XG4gIHZhciBub2RlVHlwZSA9IHJvb3RDb250YWluZXJJbnN0YW5jZS5ub2RlVHlwZTtcblxuICBzd2l0Y2ggKG5vZGVUeXBlKSB7XG4gICAgY2FzZSBET0NVTUVOVF9OT0RFOlxuICAgIGNhc2UgRE9DVU1FTlRfRlJBR01FTlRfTk9ERTpcbiAgICAgIHtcbiAgICAgICAgdHlwZSA9IG5vZGVUeXBlID09PSBET0NVTUVOVF9OT0RFID8gJyNkb2N1bWVudCcgOiAnI2ZyYWdtZW50JztcbiAgICAgICAgdmFyIHJvb3QgPSByb290Q29udGFpbmVySW5zdGFuY2UuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgICBuYW1lc3BhY2UgPSByb290ID8gcm9vdC5uYW1lc3BhY2VVUkkgOiBnZXRDaGlsZE5hbWVzcGFjZShudWxsLCAnJyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIHtcbiAgICAgICAgdmFyIGNvbnRhaW5lciA9IG5vZGVUeXBlID09PSBDT01NRU5UX05PREUgPyByb290Q29udGFpbmVySW5zdGFuY2UucGFyZW50Tm9kZSA6IHJvb3RDb250YWluZXJJbnN0YW5jZTtcbiAgICAgICAgdmFyIG93bk5hbWVzcGFjZSA9IGNvbnRhaW5lci5uYW1lc3BhY2VVUkkgfHwgbnVsbDtcbiAgICAgICAgdHlwZSA9IGNvbnRhaW5lci50YWdOYW1lO1xuICAgICAgICBuYW1lc3BhY2UgPSBnZXRDaGlsZE5hbWVzcGFjZShvd25OYW1lc3BhY2UsIHR5cGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgfVxuXG4gIHtcbiAgICB2YXIgdmFsaWRhdGVkVGFnID0gdHlwZS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhciBhbmNlc3RvckluZm8gPSB1cGRhdGVkQW5jZXN0b3JJbmZvKG51bGwsIHZhbGlkYXRlZFRhZyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWVzcGFjZTogbmFtZXNwYWNlLFxuICAgICAgYW5jZXN0b3JJbmZvOiBhbmNlc3RvckluZm9cbiAgICB9O1xuICB9XG59XG5mdW5jdGlvbiBnZXRDaGlsZEhvc3RDb250ZXh0KHBhcmVudEhvc3RDb250ZXh0LCB0eXBlLCByb290Q29udGFpbmVySW5zdGFuY2UpIHtcbiAge1xuICAgIHZhciBwYXJlbnRIb3N0Q29udGV4dERldiA9IHBhcmVudEhvc3RDb250ZXh0O1xuICAgIHZhciBuYW1lc3BhY2UgPSBnZXRDaGlsZE5hbWVzcGFjZShwYXJlbnRIb3N0Q29udGV4dERldi5uYW1lc3BhY2UsIHR5cGUpO1xuICAgIHZhciBhbmNlc3RvckluZm8gPSB1cGRhdGVkQW5jZXN0b3JJbmZvKHBhcmVudEhvc3RDb250ZXh0RGV2LmFuY2VzdG9ySW5mbywgdHlwZSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWVzcGFjZTogbmFtZXNwYWNlLFxuICAgICAgYW5jZXN0b3JJbmZvOiBhbmNlc3RvckluZm9cbiAgICB9O1xuICB9XG59XG5mdW5jdGlvbiBnZXRQdWJsaWNJbnN0YW5jZShpbnN0YW5jZSkge1xuICByZXR1cm4gaW5zdGFuY2U7XG59XG5mdW5jdGlvbiBwcmVwYXJlRm9yQ29tbWl0KGNvbnRhaW5lckluZm8pIHtcbiAgZXZlbnRzRW5hYmxlZCA9IGlzRW5hYmxlZCgpO1xuICBzZWxlY3Rpb25JbmZvcm1hdGlvbiA9IGdldFNlbGVjdGlvbkluZm9ybWF0aW9uKCk7XG4gIHZhciBhY3RpdmVJbnN0YW5jZSA9IG51bGw7XG5cbiAgc2V0RW5hYmxlZChmYWxzZSk7XG4gIHJldHVybiBhY3RpdmVJbnN0YW5jZTtcbn1cbmZ1bmN0aW9uIHJlc2V0QWZ0ZXJDb21taXQoY29udGFpbmVySW5mbykge1xuICByZXN0b3JlU2VsZWN0aW9uKHNlbGVjdGlvbkluZm9ybWF0aW9uKTtcbiAgc2V0RW5hYmxlZChldmVudHNFbmFibGVkKTtcbiAgZXZlbnRzRW5hYmxlZCA9IG51bGw7XG4gIHNlbGVjdGlvbkluZm9ybWF0aW9uID0gbnVsbDtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlKHR5cGUsIHByb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UsIGhvc3RDb250ZXh0LCBpbnRlcm5hbEluc3RhbmNlSGFuZGxlKSB7XG4gIHZhciBwYXJlbnROYW1lc3BhY2U7XG5cbiAge1xuICAgIC8vIFRPRE86IHRha2UgbmFtZXNwYWNlIGludG8gYWNjb3VudCB3aGVuIHZhbGlkYXRpbmcuXG4gICAgdmFyIGhvc3RDb250ZXh0RGV2ID0gaG9zdENvbnRleHQ7XG4gICAgdmFsaWRhdGVET01OZXN0aW5nKHR5cGUsIG51bGwsIGhvc3RDb250ZXh0RGV2LmFuY2VzdG9ySW5mbyk7XG5cbiAgICBpZiAodHlwZW9mIHByb3BzLmNoaWxkcmVuID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgcHJvcHMuY2hpbGRyZW4gPT09ICdudW1iZXInKSB7XG4gICAgICB2YXIgc3RyaW5nID0gJycgKyBwcm9wcy5jaGlsZHJlbjtcbiAgICAgIHZhciBvd25BbmNlc3RvckluZm8gPSB1cGRhdGVkQW5jZXN0b3JJbmZvKGhvc3RDb250ZXh0RGV2LmFuY2VzdG9ySW5mbywgdHlwZSk7XG4gICAgICB2YWxpZGF0ZURPTU5lc3RpbmcobnVsbCwgc3RyaW5nLCBvd25BbmNlc3RvckluZm8pO1xuICAgIH1cblxuICAgIHBhcmVudE5hbWVzcGFjZSA9IGhvc3RDb250ZXh0RGV2Lm5hbWVzcGFjZTtcbiAgfVxuXG4gIHZhciBkb21FbGVtZW50ID0gY3JlYXRlRWxlbWVudCh0eXBlLCBwcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlLCBwYXJlbnROYW1lc3BhY2UpO1xuICBwcmVjYWNoZUZpYmVyTm9kZShpbnRlcm5hbEluc3RhbmNlSGFuZGxlLCBkb21FbGVtZW50KTtcbiAgdXBkYXRlRmliZXJQcm9wcyhkb21FbGVtZW50LCBwcm9wcyk7XG4gIHJldHVybiBkb21FbGVtZW50O1xufVxuZnVuY3Rpb24gYXBwZW5kSW5pdGlhbENoaWxkKHBhcmVudEluc3RhbmNlLCBjaGlsZCkge1xuICBwYXJlbnRJbnN0YW5jZS5hcHBlbmRDaGlsZChjaGlsZCk7XG59XG5mdW5jdGlvbiBmaW5hbGl6ZUluaXRpYWxDaGlsZHJlbihkb21FbGVtZW50LCB0eXBlLCBwcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlLCBob3N0Q29udGV4dCkge1xuICBzZXRJbml0aWFsUHJvcGVydGllcyhkb21FbGVtZW50LCB0eXBlLCBwcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlKTtcbiAgcmV0dXJuIHNob3VsZEF1dG9Gb2N1c0hvc3RDb21wb25lbnQodHlwZSwgcHJvcHMpO1xufVxuZnVuY3Rpb24gcHJlcGFyZVVwZGF0ZShkb21FbGVtZW50LCB0eXBlLCBvbGRQcm9wcywgbmV3UHJvcHMsIHJvb3RDb250YWluZXJJbnN0YW5jZSwgaG9zdENvbnRleHQpIHtcbiAge1xuICAgIHZhciBob3N0Q29udGV4dERldiA9IGhvc3RDb250ZXh0O1xuXG4gICAgaWYgKHR5cGVvZiBuZXdQcm9wcy5jaGlsZHJlbiAhPT0gdHlwZW9mIG9sZFByb3BzLmNoaWxkcmVuICYmICh0eXBlb2YgbmV3UHJvcHMuY2hpbGRyZW4gPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBuZXdQcm9wcy5jaGlsZHJlbiA9PT0gJ251bWJlcicpKSB7XG4gICAgICB2YXIgc3RyaW5nID0gJycgKyBuZXdQcm9wcy5jaGlsZHJlbjtcbiAgICAgIHZhciBvd25BbmNlc3RvckluZm8gPSB1cGRhdGVkQW5jZXN0b3JJbmZvKGhvc3RDb250ZXh0RGV2LmFuY2VzdG9ySW5mbywgdHlwZSk7XG4gICAgICB2YWxpZGF0ZURPTU5lc3RpbmcobnVsbCwgc3RyaW5nLCBvd25BbmNlc3RvckluZm8pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkaWZmUHJvcGVydGllcyhkb21FbGVtZW50LCB0eXBlLCBvbGRQcm9wcywgbmV3UHJvcHMpO1xufVxuZnVuY3Rpb24gc2hvdWxkU2V0VGV4dENvbnRlbnQodHlwZSwgcHJvcHMpIHtcbiAgcmV0dXJuIHR5cGUgPT09ICd0ZXh0YXJlYScgfHwgdHlwZSA9PT0gJ29wdGlvbicgfHwgdHlwZSA9PT0gJ25vc2NyaXB0JyB8fCB0eXBlb2YgcHJvcHMuY2hpbGRyZW4gPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBwcm9wcy5jaGlsZHJlbiA9PT0gJ251bWJlcicgfHwgdHlwZW9mIHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MID09PSAnb2JqZWN0JyAmJiBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCAhPT0gbnVsbCAmJiBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTC5fX2h0bWwgIT0gbnVsbDtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVRleHRJbnN0YW5jZSh0ZXh0LCByb290Q29udGFpbmVySW5zdGFuY2UsIGhvc3RDb250ZXh0LCBpbnRlcm5hbEluc3RhbmNlSGFuZGxlKSB7XG4gIHtcbiAgICB2YXIgaG9zdENvbnRleHREZXYgPSBob3N0Q29udGV4dDtcbiAgICB2YWxpZGF0ZURPTU5lc3RpbmcobnVsbCwgdGV4dCwgaG9zdENvbnRleHREZXYuYW5jZXN0b3JJbmZvKTtcbiAgfVxuXG4gIHZhciB0ZXh0Tm9kZSA9IGNyZWF0ZVRleHROb2RlKHRleHQsIHJvb3RDb250YWluZXJJbnN0YW5jZSk7XG4gIHByZWNhY2hlRmliZXJOb2RlKGludGVybmFsSW5zdGFuY2VIYW5kbGUsIHRleHROb2RlKTtcbiAgcmV0dXJuIHRleHROb2RlO1xufVxuLy8gaWYgYSBjb21wb25lbnQganVzdCBpbXBvcnRzIFJlYWN0RE9NIChlLmcuIGZvciBmaW5kRE9NTm9kZSkuXG4vLyBTb21lIGVudmlyb25tZW50cyBtaWdodCBub3QgaGF2ZSBzZXRUaW1lb3V0IG9yIGNsZWFyVGltZW91dC5cblxudmFyIHNjaGVkdWxlVGltZW91dCA9IHR5cGVvZiBzZXRUaW1lb3V0ID09PSAnZnVuY3Rpb24nID8gc2V0VGltZW91dCA6IHVuZGVmaW5lZDtcbnZhciBjYW5jZWxUaW1lb3V0ID0gdHlwZW9mIGNsZWFyVGltZW91dCA9PT0gJ2Z1bmN0aW9uJyA/IGNsZWFyVGltZW91dCA6IHVuZGVmaW5lZDtcbnZhciBub1RpbWVvdXQgPSAtMTsgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gY29tbWl0TW91bnQoZG9tRWxlbWVudCwgdHlwZSwgbmV3UHJvcHMsIGludGVybmFsSW5zdGFuY2VIYW5kbGUpIHtcbiAgLy8gRGVzcGl0ZSB0aGUgbmFtaW5nIHRoYXQgbWlnaHQgaW1wbHkgb3RoZXJ3aXNlLCB0aGlzIG1ldGhvZCBvbmx5XG4gIC8vIGZpcmVzIGlmIHRoZXJlIGlzIGFuIGBVcGRhdGVgIGVmZmVjdCBzY2hlZHVsZWQgZHVyaW5nIG1vdW50aW5nLlxuICAvLyBUaGlzIGhhcHBlbnMgaWYgYGZpbmFsaXplSW5pdGlhbENoaWxkcmVuYCByZXR1cm5zIGB0cnVlYCAod2hpY2ggaXRcbiAgLy8gZG9lcyB0byBpbXBsZW1lbnQgdGhlIGBhdXRvRm9jdXNgIGF0dHJpYnV0ZSBvbiB0aGUgY2xpZW50KS4gQnV0XG4gIC8vIHRoZXJlIGFyZSBhbHNvIG90aGVyIGNhc2VzIHdoZW4gdGhpcyBtaWdodCBoYXBwZW4gKHN1Y2ggYXMgcGF0Y2hpbmdcbiAgLy8gdXAgdGV4dCBjb250ZW50IGR1cmluZyBoeWRyYXRpb24gbWlzbWF0Y2gpLiBTbyB3ZSdsbCBjaGVjayB0aGlzIGFnYWluLlxuICBpZiAoc2hvdWxkQXV0b0ZvY3VzSG9zdENvbXBvbmVudCh0eXBlLCBuZXdQcm9wcykpIHtcbiAgICBkb21FbGVtZW50LmZvY3VzKCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGNvbW1pdFVwZGF0ZShkb21FbGVtZW50LCB1cGRhdGVQYXlsb2FkLCB0eXBlLCBvbGRQcm9wcywgbmV3UHJvcHMsIGludGVybmFsSW5zdGFuY2VIYW5kbGUpIHtcbiAgLy8gVXBkYXRlIHRoZSBwcm9wcyBoYW5kbGUgc28gdGhhdCB3ZSBrbm93IHdoaWNoIHByb3BzIGFyZSB0aGUgb25lcyB3aXRoXG4gIC8vIHdpdGggY3VycmVudCBldmVudCBoYW5kbGVycy5cbiAgdXBkYXRlRmliZXJQcm9wcyhkb21FbGVtZW50LCBuZXdQcm9wcyk7IC8vIEFwcGx5IHRoZSBkaWZmIHRvIHRoZSBET00gbm9kZS5cblxuICB1cGRhdGVQcm9wZXJ0aWVzKGRvbUVsZW1lbnQsIHVwZGF0ZVBheWxvYWQsIHR5cGUsIG9sZFByb3BzLCBuZXdQcm9wcyk7XG59XG5mdW5jdGlvbiByZXNldFRleHRDb250ZW50KGRvbUVsZW1lbnQpIHtcbiAgc2V0VGV4dENvbnRlbnQoZG9tRWxlbWVudCwgJycpO1xufVxuZnVuY3Rpb24gY29tbWl0VGV4dFVwZGF0ZSh0ZXh0SW5zdGFuY2UsIG9sZFRleHQsIG5ld1RleHQpIHtcbiAgdGV4dEluc3RhbmNlLm5vZGVWYWx1ZSA9IG5ld1RleHQ7XG59XG5mdW5jdGlvbiBhcHBlbmRDaGlsZChwYXJlbnRJbnN0YW5jZSwgY2hpbGQpIHtcbiAgcGFyZW50SW5zdGFuY2UuYXBwZW5kQ2hpbGQoY2hpbGQpO1xufVxuZnVuY3Rpb24gYXBwZW5kQ2hpbGRUb0NvbnRhaW5lcihjb250YWluZXIsIGNoaWxkKSB7XG4gIHZhciBwYXJlbnROb2RlO1xuXG4gIGlmIChjb250YWluZXIubm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSkge1xuICAgIHBhcmVudE5vZGUgPSBjb250YWluZXIucGFyZW50Tm9kZTtcbiAgICBwYXJlbnROb2RlLmluc2VydEJlZm9yZShjaGlsZCwgY29udGFpbmVyKTtcbiAgfSBlbHNlIHtcbiAgICBwYXJlbnROb2RlID0gY29udGFpbmVyO1xuICAgIHBhcmVudE5vZGUuYXBwZW5kQ2hpbGQoY2hpbGQpO1xuICB9IC8vIFRoaXMgY29udGFpbmVyIG1pZ2h0IGJlIHVzZWQgZm9yIGEgcG9ydGFsLlxuICAvLyBJZiBzb21ldGhpbmcgaW5zaWRlIGEgcG9ydGFsIGlzIGNsaWNrZWQsIHRoYXQgY2xpY2sgc2hvdWxkIGJ1YmJsZVxuICAvLyB0aHJvdWdoIHRoZSBSZWFjdCB0cmVlLiBIb3dldmVyLCBvbiBNb2JpbGUgU2FmYXJpIHRoZSBjbGljayB3b3VsZFxuICAvLyBuZXZlciBidWJibGUgdGhyb3VnaCB0aGUgKkRPTSogdHJlZSB1bmxlc3MgYW4gYW5jZXN0b3Igd2l0aCBvbmNsaWNrXG4gIC8vIGV2ZW50IGV4aXN0cy4gU28gd2Ugd291bGRuJ3Qgc2VlIGl0IGFuZCBkaXNwYXRjaCBpdC5cbiAgLy8gVGhpcyBpcyB3aHkgd2UgZW5zdXJlIHRoYXQgbm9uIFJlYWN0IHJvb3QgY29udGFpbmVycyBoYXZlIGlubGluZSBvbmNsaWNrXG4gIC8vIGRlZmluZWQuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTE5MThcblxuXG4gIHZhciByZWFjdFJvb3RDb250YWluZXIgPSBjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lcjtcblxuICBpZiAoKHJlYWN0Um9vdENvbnRhaW5lciA9PT0gbnVsbCB8fCByZWFjdFJvb3RDb250YWluZXIgPT09IHVuZGVmaW5lZCkgJiYgcGFyZW50Tm9kZS5vbmNsaWNrID09PSBudWxsKSB7XG4gICAgLy8gVE9ETzogVGhpcyBjYXN0IG1heSBub3QgYmUgc291bmQgZm9yIFNWRywgTWF0aE1MIG9yIGN1c3RvbSBlbGVtZW50cy5cbiAgICB0cmFwQ2xpY2tPbk5vbkludGVyYWN0aXZlRWxlbWVudChwYXJlbnROb2RlKTtcbiAgfVxufVxuZnVuY3Rpb24gaW5zZXJ0QmVmb3JlKHBhcmVudEluc3RhbmNlLCBjaGlsZCwgYmVmb3JlQ2hpbGQpIHtcbiAgcGFyZW50SW5zdGFuY2UuaW5zZXJ0QmVmb3JlKGNoaWxkLCBiZWZvcmVDaGlsZCk7XG59XG5mdW5jdGlvbiBpbnNlcnRJbkNvbnRhaW5lckJlZm9yZShjb250YWluZXIsIGNoaWxkLCBiZWZvcmVDaGlsZCkge1xuICBpZiAoY29udGFpbmVyLm5vZGVUeXBlID09PSBDT01NRU5UX05PREUpIHtcbiAgICBjb250YWluZXIucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoY2hpbGQsIGJlZm9yZUNoaWxkKTtcbiAgfSBlbHNlIHtcbiAgICBjb250YWluZXIuaW5zZXJ0QmVmb3JlKGNoaWxkLCBiZWZvcmVDaGlsZCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVtb3ZlQ2hpbGQocGFyZW50SW5zdGFuY2UsIGNoaWxkKSB7XG4gIHBhcmVudEluc3RhbmNlLnJlbW92ZUNoaWxkKGNoaWxkKTtcbn1cbmZ1bmN0aW9uIHJlbW92ZUNoaWxkRnJvbUNvbnRhaW5lcihjb250YWluZXIsIGNoaWxkKSB7XG4gIGlmIChjb250YWluZXIubm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSkge1xuICAgIGNvbnRhaW5lci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgfSBlbHNlIHtcbiAgICBjb250YWluZXIucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICB9XG59XG5mdW5jdGlvbiBoaWRlSW5zdGFuY2UoaW5zdGFuY2UpIHtcbiAgLy8gVE9ETzogRG9lcyB0aGlzIHdvcmsgZm9yIGFsbCBlbGVtZW50IHR5cGVzPyBXaGF0IGFib3V0IE1hdGhNTD8gU2hvdWxkIHdlXG4gIC8vIHBhc3MgaG9zdCBjb250ZXh0IHRvIHRoaXMgbWV0aG9kP1xuICBpbnN0YW5jZSA9IGluc3RhbmNlO1xuICB2YXIgc3R5bGUgPSBpbnN0YW5jZS5zdHlsZTtcblxuICBpZiAodHlwZW9mIHN0eWxlLnNldFByb3BlcnR5ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgc3R5bGUuc2V0UHJvcGVydHkoJ2Rpc3BsYXknLCAnbm9uZScsICdpbXBvcnRhbnQnKTtcbiAgfSBlbHNlIHtcbiAgICBzdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICB9XG59XG5mdW5jdGlvbiBoaWRlVGV4dEluc3RhbmNlKHRleHRJbnN0YW5jZSkge1xuICB0ZXh0SW5zdGFuY2Uubm9kZVZhbHVlID0gJyc7XG59XG5mdW5jdGlvbiB1bmhpZGVJbnN0YW5jZShpbnN0YW5jZSwgcHJvcHMpIHtcbiAgaW5zdGFuY2UgPSBpbnN0YW5jZTtcbiAgdmFyIHN0eWxlUHJvcCA9IHByb3BzW1NUWUxFJDFdO1xuICB2YXIgZGlzcGxheSA9IHN0eWxlUHJvcCAhPT0gdW5kZWZpbmVkICYmIHN0eWxlUHJvcCAhPT0gbnVsbCAmJiBzdHlsZVByb3AuaGFzT3duUHJvcGVydHkoJ2Rpc3BsYXknKSA/IHN0eWxlUHJvcC5kaXNwbGF5IDogbnVsbDtcbiAgaW5zdGFuY2Uuc3R5bGUuZGlzcGxheSA9IGRhbmdlcm91c1N0eWxlVmFsdWUoJ2Rpc3BsYXknLCBkaXNwbGF5KTtcbn1cbmZ1bmN0aW9uIHVuaGlkZVRleHRJbnN0YW5jZSh0ZXh0SW5zdGFuY2UsIHRleHQpIHtcbiAgdGV4dEluc3RhbmNlLm5vZGVWYWx1ZSA9IHRleHQ7XG59XG5mdW5jdGlvbiBjbGVhckNvbnRhaW5lcihjb250YWluZXIpIHtcbiAgaWYgKGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFKSB7XG4gICAgY29udGFpbmVyLnRleHRDb250ZW50ID0gJyc7XG4gIH0gZWxzZSBpZiAoY29udGFpbmVyLm5vZGVUeXBlID09PSBET0NVTUVOVF9OT0RFKSB7XG4gICAgdmFyIGJvZHkgPSBjb250YWluZXIuYm9keTtcblxuICAgIGlmIChib2R5ICE9IG51bGwpIHtcbiAgICAgIGJvZHkudGV4dENvbnRlbnQgPSAnJztcbiAgICB9XG4gIH1cbn0gLy8gLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gY2FuSHlkcmF0ZUluc3RhbmNlKGluc3RhbmNlLCB0eXBlLCBwcm9wcykge1xuICBpZiAoaW5zdGFuY2Uubm9kZVR5cGUgIT09IEVMRU1FTlRfTk9ERSB8fCB0eXBlLnRvTG93ZXJDYXNlKCkgIT09IGluc3RhbmNlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSAvLyBUaGlzIGhhcyBub3cgYmVlbiByZWZpbmVkIHRvIGFuIGVsZW1lbnQgbm9kZS5cblxuXG4gIHJldHVybiBpbnN0YW5jZTtcbn1cbmZ1bmN0aW9uIGNhbkh5ZHJhdGVUZXh0SW5zdGFuY2UoaW5zdGFuY2UsIHRleHQpIHtcbiAgaWYgKHRleHQgPT09ICcnIHx8IGluc3RhbmNlLm5vZGVUeXBlICE9PSBURVhUX05PREUpIHtcbiAgICAvLyBFbXB0eSBzdHJpbmdzIGFyZSBub3QgcGFyc2VkIGJ5IEhUTUwgc28gdGhlcmUgd29uJ3QgYmUgYSBjb3JyZWN0IG1hdGNoIGhlcmUuXG4gICAgcmV0dXJuIG51bGw7XG4gIH0gLy8gVGhpcyBoYXMgbm93IGJlZW4gcmVmaW5lZCB0byBhIHRleHQgbm9kZS5cblxuXG4gIHJldHVybiBpbnN0YW5jZTtcbn1cbmZ1bmN0aW9uIGlzU3VzcGVuc2VJbnN0YW5jZVBlbmRpbmcoaW5zdGFuY2UpIHtcbiAgcmV0dXJuIGluc3RhbmNlLmRhdGEgPT09IFNVU1BFTlNFX1BFTkRJTkdfU1RBUlRfREFUQTtcbn1cbmZ1bmN0aW9uIGlzU3VzcGVuc2VJbnN0YW5jZUZhbGxiYWNrKGluc3RhbmNlKSB7XG4gIHJldHVybiBpbnN0YW5jZS5kYXRhID09PSBTVVNQRU5TRV9GQUxMQkFDS19TVEFSVF9EQVRBO1xufVxuXG5mdW5jdGlvbiBnZXROZXh0SHlkcmF0YWJsZShub2RlKSB7XG4gIC8vIFNraXAgbm9uLWh5ZHJhdGFibGUgbm9kZXMuXG4gIGZvciAoOyBub2RlICE9IG51bGw7IG5vZGUgPSBub2RlLm5leHRTaWJsaW5nKSB7XG4gICAgdmFyIG5vZGVUeXBlID0gbm9kZS5ub2RlVHlwZTtcblxuICAgIGlmIChub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFIHx8IG5vZGVUeXBlID09PSBURVhUX05PREUpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBub2RlO1xufVxuXG5mdW5jdGlvbiBnZXROZXh0SHlkcmF0YWJsZVNpYmxpbmcoaW5zdGFuY2UpIHtcbiAgcmV0dXJuIGdldE5leHRIeWRyYXRhYmxlKGluc3RhbmNlLm5leHRTaWJsaW5nKTtcbn1cbmZ1bmN0aW9uIGdldEZpcnN0SHlkcmF0YWJsZUNoaWxkKHBhcmVudEluc3RhbmNlKSB7XG4gIHJldHVybiBnZXROZXh0SHlkcmF0YWJsZShwYXJlbnRJbnN0YW5jZS5maXJzdENoaWxkKTtcbn1cbmZ1bmN0aW9uIGh5ZHJhdGVJbnN0YW5jZShpbnN0YW5jZSwgdHlwZSwgcHJvcHMsIHJvb3RDb250YWluZXJJbnN0YW5jZSwgaG9zdENvbnRleHQsIGludGVybmFsSW5zdGFuY2VIYW5kbGUpIHtcbiAgcHJlY2FjaGVGaWJlck5vZGUoaW50ZXJuYWxJbnN0YW5jZUhhbmRsZSwgaW5zdGFuY2UpOyAvLyBUT0RPOiBQb3NzaWJseSBkZWZlciB0aGlzIHVudGlsIHRoZSBjb21taXQgcGhhc2Ugd2hlcmUgYWxsIHRoZSBldmVudHNcbiAgLy8gZ2V0IGF0dGFjaGVkLlxuXG4gIHVwZGF0ZUZpYmVyUHJvcHMoaW5zdGFuY2UsIHByb3BzKTtcbiAgdmFyIHBhcmVudE5hbWVzcGFjZTtcblxuICB7XG4gICAgdmFyIGhvc3RDb250ZXh0RGV2ID0gaG9zdENvbnRleHQ7XG4gICAgcGFyZW50TmFtZXNwYWNlID0gaG9zdENvbnRleHREZXYubmFtZXNwYWNlO1xuICB9XG5cbiAgcmV0dXJuIGRpZmZIeWRyYXRlZFByb3BlcnRpZXMoaW5zdGFuY2UsIHR5cGUsIHByb3BzLCBwYXJlbnROYW1lc3BhY2UpO1xufVxuZnVuY3Rpb24gaHlkcmF0ZVRleHRJbnN0YW5jZSh0ZXh0SW5zdGFuY2UsIHRleHQsIGludGVybmFsSW5zdGFuY2VIYW5kbGUpIHtcbiAgcHJlY2FjaGVGaWJlck5vZGUoaW50ZXJuYWxJbnN0YW5jZUhhbmRsZSwgdGV4dEluc3RhbmNlKTtcbiAgcmV0dXJuIGRpZmZIeWRyYXRlZFRleHQodGV4dEluc3RhbmNlLCB0ZXh0KTtcbn1cbmZ1bmN0aW9uIGdldE5leHRIeWRyYXRhYmxlSW5zdGFuY2VBZnRlclN1c3BlbnNlSW5zdGFuY2Uoc3VzcGVuc2VJbnN0YW5jZSkge1xuICB2YXIgbm9kZSA9IHN1c3BlbnNlSW5zdGFuY2UubmV4dFNpYmxpbmc7IC8vIFNraXAgcGFzdCBhbGwgbm9kZXMgd2l0aGluIHRoaXMgc3VzcGVuc2UgYm91bmRhcnkuXG4gIC8vIFRoZXJlIG1pZ2h0IGJlIG5lc3RlZCBub2RlcyBzbyB3ZSBuZWVkIHRvIGtlZXAgdHJhY2sgb2YgaG93XG4gIC8vIGRlZXAgd2UgYXJlIGFuZCBvbmx5IGJyZWFrIG91dCB3aGVuIHdlJ3JlIGJhY2sgb24gdG9wLlxuXG4gIHZhciBkZXB0aCA9IDA7XG5cbiAgd2hpbGUgKG5vZGUpIHtcbiAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFKSB7XG4gICAgICB2YXIgZGF0YSA9IG5vZGUuZGF0YTtcblxuICAgICAgaWYgKGRhdGEgPT09IFNVU1BFTlNFX0VORF9EQVRBKSB7XG4gICAgICAgIGlmIChkZXB0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBnZXROZXh0SHlkcmF0YWJsZVNpYmxpbmcobm9kZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGVwdGgtLTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChkYXRhID09PSBTVVNQRU5TRV9TVEFSVF9EQVRBIHx8IGRhdGEgPT09IFNVU1BFTlNFX0ZBTExCQUNLX1NUQVJUX0RBVEEgfHwgZGF0YSA9PT0gU1VTUEVOU0VfUEVORElOR19TVEFSVF9EQVRBKSB7XG4gICAgICAgIGRlcHRoKys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbm9kZSA9IG5vZGUubmV4dFNpYmxpbmc7XG4gIH0gLy8gVE9ETzogV2Fybiwgd2UgZGlkbid0IGZpbmQgdGhlIGVuZCBjb21tZW50IGJvdW5kYXJ5LlxuXG5cbiAgcmV0dXJuIG51bGw7XG59IC8vIFJldHVybnMgdGhlIFN1c3BlbnNlSW5zdGFuY2UgaWYgdGhpcyBub2RlIGlzIGEgZGlyZWN0IGNoaWxkIG9mIGFcbi8vIFN1c3BlbnNlSW5zdGFuY2UuIEkuZS4gaWYgaXRzIHByZXZpb3VzIHNpYmxpbmcgaXMgYSBDb21tZW50IHdpdGhcbi8vIFNVU1BFTlNFX3hfU1RBUlRfREFUQS4gT3RoZXJ3aXNlLCBudWxsLlxuXG5mdW5jdGlvbiBnZXRQYXJlbnRTdXNwZW5zZUluc3RhbmNlKHRhcmdldEluc3RhbmNlKSB7XG4gIHZhciBub2RlID0gdGFyZ2V0SW5zdGFuY2UucHJldmlvdXNTaWJsaW5nOyAvLyBTa2lwIHBhc3QgYWxsIG5vZGVzIHdpdGhpbiB0aGlzIHN1c3BlbnNlIGJvdW5kYXJ5LlxuICAvLyBUaGVyZSBtaWdodCBiZSBuZXN0ZWQgbm9kZXMgc28gd2UgbmVlZCB0byBrZWVwIHRyYWNrIG9mIGhvd1xuICAvLyBkZWVwIHdlIGFyZSBhbmQgb25seSBicmVhayBvdXQgd2hlbiB3ZSdyZSBiYWNrIG9uIHRvcC5cblxuICB2YXIgZGVwdGggPSAwO1xuXG4gIHdoaWxlIChub2RlKSB7XG4gICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSkge1xuICAgICAgdmFyIGRhdGEgPSBub2RlLmRhdGE7XG5cbiAgICAgIGlmIChkYXRhID09PSBTVVNQRU5TRV9TVEFSVF9EQVRBIHx8IGRhdGEgPT09IFNVU1BFTlNFX0ZBTExCQUNLX1NUQVJUX0RBVEEgfHwgZGF0YSA9PT0gU1VTUEVOU0VfUEVORElOR19TVEFSVF9EQVRBKSB7XG4gICAgICAgIGlmIChkZXB0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlcHRoLS07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZGF0YSA9PT0gU1VTUEVOU0VfRU5EX0RBVEEpIHtcbiAgICAgICAgZGVwdGgrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBub2RlID0gbm9kZS5wcmV2aW91c1NpYmxpbmc7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGNvbW1pdEh5ZHJhdGVkQ29udGFpbmVyKGNvbnRhaW5lcikge1xuICAvLyBSZXRyeSBpZiBhbnkgZXZlbnQgcmVwbGF5aW5nIHdhcyBibG9ja2VkIG9uIHRoaXMuXG4gIHJldHJ5SWZCbG9ja2VkT24oY29udGFpbmVyKTtcbn1cbmZ1bmN0aW9uIGNvbW1pdEh5ZHJhdGVkU3VzcGVuc2VJbnN0YW5jZShzdXNwZW5zZUluc3RhbmNlKSB7XG4gIC8vIFJldHJ5IGlmIGFueSBldmVudCByZXBsYXlpbmcgd2FzIGJsb2NrZWQgb24gdGhpcy5cbiAgcmV0cnlJZkJsb2NrZWRPbihzdXNwZW5zZUluc3RhbmNlKTtcbn1cbmZ1bmN0aW9uIGRpZE5vdE1hdGNoSHlkcmF0ZWRDb250YWluZXJUZXh0SW5zdGFuY2UocGFyZW50Q29udGFpbmVyLCB0ZXh0SW5zdGFuY2UsIHRleHQpIHtcbiAge1xuICAgIHdhcm5Gb3JVbm1hdGNoZWRUZXh0KHRleHRJbnN0YW5jZSwgdGV4dCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGRpZE5vdE1hdGNoSHlkcmF0ZWRUZXh0SW5zdGFuY2UocGFyZW50VHlwZSwgcGFyZW50UHJvcHMsIHBhcmVudEluc3RhbmNlLCB0ZXh0SW5zdGFuY2UsIHRleHQpIHtcbiAgaWYgKCBwYXJlbnRQcm9wc1tTVVBQUkVTU19IWURSQVRJT05fV0FSTklORyQxXSAhPT0gdHJ1ZSkge1xuICAgIHdhcm5Gb3JVbm1hdGNoZWRUZXh0KHRleHRJbnN0YW5jZSwgdGV4dCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGRpZE5vdEh5ZHJhdGVDb250YWluZXJJbnN0YW5jZShwYXJlbnRDb250YWluZXIsIGluc3RhbmNlKSB7XG4gIHtcbiAgICBpZiAoaW5zdGFuY2Uubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSkge1xuICAgICAgd2FybkZvckRlbGV0ZWRIeWRyYXRhYmxlRWxlbWVudChwYXJlbnRDb250YWluZXIsIGluc3RhbmNlKTtcbiAgICB9IGVsc2UgaWYgKGluc3RhbmNlLm5vZGVUeXBlID09PSBDT01NRU5UX05PREUpIDsgZWxzZSB7XG4gICAgICB3YXJuRm9yRGVsZXRlZEh5ZHJhdGFibGVUZXh0KHBhcmVudENvbnRhaW5lciwgaW5zdGFuY2UpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZGlkTm90SHlkcmF0ZUluc3RhbmNlKHBhcmVudFR5cGUsIHBhcmVudFByb3BzLCBwYXJlbnRJbnN0YW5jZSwgaW5zdGFuY2UpIHtcbiAgaWYgKCBwYXJlbnRQcm9wc1tTVVBQUkVTU19IWURSQVRJT05fV0FSTklORyQxXSAhPT0gdHJ1ZSkge1xuICAgIGlmIChpbnN0YW5jZS5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFKSB7XG4gICAgICB3YXJuRm9yRGVsZXRlZEh5ZHJhdGFibGVFbGVtZW50KHBhcmVudEluc3RhbmNlLCBpbnN0YW5jZSk7XG4gICAgfSBlbHNlIGlmIChpbnN0YW5jZS5ub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFKSA7IGVsc2Uge1xuICAgICAgd2FybkZvckRlbGV0ZWRIeWRyYXRhYmxlVGV4dChwYXJlbnRJbnN0YW5jZSwgaW5zdGFuY2UpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZGlkTm90RmluZEh5ZHJhdGFibGVDb250YWluZXJJbnN0YW5jZShwYXJlbnRDb250YWluZXIsIHR5cGUsIHByb3BzKSB7XG4gIHtcbiAgICB3YXJuRm9ySW5zZXJ0ZWRIeWRyYXRlZEVsZW1lbnQocGFyZW50Q29udGFpbmVyLCB0eXBlKTtcbiAgfVxufVxuZnVuY3Rpb24gZGlkTm90RmluZEh5ZHJhdGFibGVDb250YWluZXJUZXh0SW5zdGFuY2UocGFyZW50Q29udGFpbmVyLCB0ZXh0KSB7XG4gIHtcbiAgICB3YXJuRm9ySW5zZXJ0ZWRIeWRyYXRlZFRleHQocGFyZW50Q29udGFpbmVyLCB0ZXh0KTtcbiAgfVxufVxuZnVuY3Rpb24gZGlkTm90RmluZEh5ZHJhdGFibGVJbnN0YW5jZShwYXJlbnRUeXBlLCBwYXJlbnRQcm9wcywgcGFyZW50SW5zdGFuY2UsIHR5cGUsIHByb3BzKSB7XG4gIGlmICggcGFyZW50UHJvcHNbU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkckMV0gIT09IHRydWUpIHtcbiAgICB3YXJuRm9ySW5zZXJ0ZWRIeWRyYXRlZEVsZW1lbnQocGFyZW50SW5zdGFuY2UsIHR5cGUpO1xuICB9XG59XG5mdW5jdGlvbiBkaWROb3RGaW5kSHlkcmF0YWJsZVRleHRJbnN0YW5jZShwYXJlbnRUeXBlLCBwYXJlbnRQcm9wcywgcGFyZW50SW5zdGFuY2UsIHRleHQpIHtcbiAgaWYgKCBwYXJlbnRQcm9wc1tTVVBQUkVTU19IWURSQVRJT05fV0FSTklORyQxXSAhPT0gdHJ1ZSkge1xuICAgIHdhcm5Gb3JJbnNlcnRlZEh5ZHJhdGVkVGV4dChwYXJlbnRJbnN0YW5jZSwgdGV4dCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGRpZE5vdEZpbmRIeWRyYXRhYmxlU3VzcGVuc2VJbnN0YW5jZShwYXJlbnRUeXBlLCBwYXJlbnRQcm9wcywgcGFyZW50SW5zdGFuY2UpIHtcbiAgaWYgKCBwYXJlbnRQcm9wc1tTVVBQUkVTU19IWURSQVRJT05fV0FSTklORyQxXSAhPT0gdHJ1ZSkgO1xufVxudmFyIGNsaWVudElkID0gMDtcbmZ1bmN0aW9uIG1ha2VDbGllbnRJZEluREVWKHdhcm5PbkFjY2Vzc0luREVWKSB7XG4gIHZhciBpZCA9ICdyOicgKyAoY2xpZW50SWQrKykudG9TdHJpbmcoMzYpO1xuICByZXR1cm4ge1xuICAgIHRvU3RyaW5nOiBmdW5jdGlvbiAoKSB7XG4gICAgICB3YXJuT25BY2Nlc3NJbkRFVigpO1xuICAgICAgcmV0dXJuIGlkO1xuICAgIH0sXG4gICAgdmFsdWVPZjogZnVuY3Rpb24gKCkge1xuICAgICAgd2Fybk9uQWNjZXNzSW5ERVYoKTtcbiAgICAgIHJldHVybiBpZDtcbiAgICB9XG4gIH07XG59XG5mdW5jdGlvbiBpc09wYXF1ZUh5ZHJhdGluZ09iamVjdCh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZS4kJHR5cGVvZiA9PT0gUkVBQ1RfT1BBUVVFX0lEX1RZUEU7XG59XG5mdW5jdGlvbiBtYWtlT3BhcXVlSHlkcmF0aW5nT2JqZWN0KGF0dGVtcHRUb1JlYWRWYWx1ZSkge1xuICByZXR1cm4ge1xuICAgICQkdHlwZW9mOiBSRUFDVF9PUEFRVUVfSURfVFlQRSxcbiAgICB0b1N0cmluZzogYXR0ZW1wdFRvUmVhZFZhbHVlLFxuICAgIHZhbHVlT2Y6IGF0dGVtcHRUb1JlYWRWYWx1ZVxuICB9O1xufVxuZnVuY3Rpb24gcHJlcGFyZVBvcnRhbE1vdW50KHBvcnRhbEluc3RhbmNlKSB7XG4gIHtcbiAgICBsaXN0ZW5Ub0FsbFN1cHBvcnRlZEV2ZW50cyhwb3J0YWxJbnN0YW5jZSk7XG4gIH1cbn1cblxudmFyIHJhbmRvbUtleSA9IE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIpO1xudmFyIGludGVybmFsSW5zdGFuY2VLZXkgPSAnX19yZWFjdEZpYmVyJCcgKyByYW5kb21LZXk7XG52YXIgaW50ZXJuYWxQcm9wc0tleSA9ICdfX3JlYWN0UHJvcHMkJyArIHJhbmRvbUtleTtcbnZhciBpbnRlcm5hbENvbnRhaW5lckluc3RhbmNlS2V5ID0gJ19fcmVhY3RDb250YWluZXIkJyArIHJhbmRvbUtleTtcbnZhciBpbnRlcm5hbEV2ZW50SGFuZGxlcnNLZXkgPSAnX19yZWFjdEV2ZW50cyQnICsgcmFuZG9tS2V5O1xuZnVuY3Rpb24gcHJlY2FjaGVGaWJlck5vZGUoaG9zdEluc3QsIG5vZGUpIHtcbiAgbm9kZVtpbnRlcm5hbEluc3RhbmNlS2V5XSA9IGhvc3RJbnN0O1xufVxuZnVuY3Rpb24gbWFya0NvbnRhaW5lckFzUm9vdChob3N0Um9vdCwgbm9kZSkge1xuICBub2RlW2ludGVybmFsQ29udGFpbmVySW5zdGFuY2VLZXldID0gaG9zdFJvb3Q7XG59XG5mdW5jdGlvbiB1bm1hcmtDb250YWluZXJBc1Jvb3Qobm9kZSkge1xuICBub2RlW2ludGVybmFsQ29udGFpbmVySW5zdGFuY2VLZXldID0gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzQ29udGFpbmVyTWFya2VkQXNSb290KG5vZGUpIHtcbiAgcmV0dXJuICEhbm9kZVtpbnRlcm5hbENvbnRhaW5lckluc3RhbmNlS2V5XTtcbn0gLy8gR2l2ZW4gYSBET00gbm9kZSwgcmV0dXJuIHRoZSBjbG9zZXN0IEhvc3RDb21wb25lbnQgb3IgSG9zdFRleHQgZmliZXIgYW5jZXN0b3IuXG4vLyBJZiB0aGUgdGFyZ2V0IG5vZGUgaXMgcGFydCBvZiBhIGh5ZHJhdGVkIG9yIG5vdCB5ZXQgcmVuZGVyZWQgc3VidHJlZSwgdGhlblxuLy8gdGhpcyBtYXkgYWxzbyByZXR1cm4gYSBTdXNwZW5zZUNvbXBvbmVudCBvciBIb3N0Um9vdCB0byBpbmRpY2F0ZSB0aGF0LlxuLy8gQ29uY2VwdHVhbGx5IHRoZSBIb3N0Um9vdCBmaWJlciBpcyBhIGNoaWxkIG9mIHRoZSBDb250YWluZXIgbm9kZS4gU28gaWYgeW91XG4vLyBwYXNzIHRoZSBDb250YWluZXIgbm9kZSBhcyB0aGUgdGFyZ2V0Tm9kZSwgeW91IHdpbGwgbm90IGFjdHVhbGx5IGdldCB0aGVcbi8vIEhvc3RSb290IGJhY2suIFRvIGdldCB0byB0aGUgSG9zdFJvb3QsIHlvdSBuZWVkIHRvIHBhc3MgYSBjaGlsZCBvZiBpdC5cbi8vIFRoZSBzYW1lIHRoaW5nIGFwcGxpZXMgdG8gU3VzcGVuc2UgYm91bmRhcmllcy5cblxuZnVuY3Rpb24gZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUodGFyZ2V0Tm9kZSkge1xuICB2YXIgdGFyZ2V0SW5zdCA9IHRhcmdldE5vZGVbaW50ZXJuYWxJbnN0YW5jZUtleV07XG5cbiAgaWYgKHRhcmdldEluc3QpIHtcbiAgICAvLyBEb24ndCByZXR1cm4gSG9zdFJvb3Qgb3IgU3VzcGVuc2VDb21wb25lbnQgaGVyZS5cbiAgICByZXR1cm4gdGFyZ2V0SW5zdDtcbiAgfSAvLyBJZiB0aGUgZGlyZWN0IGV2ZW50IHRhcmdldCBpc24ndCBhIFJlYWN0IG93bmVkIERPTSBub2RlLCB3ZSBuZWVkIHRvIGxvb2tcbiAgLy8gdG8gc2VlIGlmIG9uZSBvZiBpdHMgcGFyZW50cyBpcyBhIFJlYWN0IG93bmVkIERPTSBub2RlLlxuXG5cbiAgdmFyIHBhcmVudE5vZGUgPSB0YXJnZXROb2RlLnBhcmVudE5vZGU7XG5cbiAgd2hpbGUgKHBhcmVudE5vZGUpIHtcbiAgICAvLyBXZSdsbCBjaGVjayBpZiB0aGlzIGlzIGEgY29udGFpbmVyIHJvb3QgdGhhdCBjb3VsZCBpbmNsdWRlXG4gICAgLy8gUmVhY3Qgbm9kZXMgaW4gdGhlIGZ1dHVyZS4gV2UgbmVlZCB0byBjaGVjayB0aGlzIGZpcnN0IGJlY2F1c2VcbiAgICAvLyBpZiB3ZSdyZSBhIGNoaWxkIG9mIGEgZGVoeWRyYXRlZCBjb250YWluZXIsIHdlIG5lZWQgdG8gZmlyc3RcbiAgICAvLyBmaW5kIHRoYXQgaW5uZXIgY29udGFpbmVyIGJlZm9yZSBtb3Zpbmcgb24gdG8gZmluZGluZyB0aGUgcGFyZW50XG4gICAgLy8gaW5zdGFuY2UuIE5vdGUgdGhhdCB3ZSBkb24ndCBjaGVjayB0aGlzIGZpZWxkIG9uICB0aGUgdGFyZ2V0Tm9kZVxuICAgIC8vIGl0c2VsZiBiZWNhdXNlIHRoZSBmaWJlcnMgYXJlIGNvbmNlcHR1YWxseSBiZXR3ZWVuIHRoZSBjb250YWluZXJcbiAgICAvLyBub2RlIGFuZCB0aGUgZmlyc3QgY2hpbGQuIEl0IGlzbid0IHN1cnJvdW5kaW5nIHRoZSBjb250YWluZXIgbm9kZS5cbiAgICAvLyBJZiBpdCdzIG5vdCBhIGNvbnRhaW5lciwgd2UgY2hlY2sgaWYgaXQncyBhbiBpbnN0YW5jZS5cbiAgICB0YXJnZXRJbnN0ID0gcGFyZW50Tm9kZVtpbnRlcm5hbENvbnRhaW5lckluc3RhbmNlS2V5XSB8fCBwYXJlbnROb2RlW2ludGVybmFsSW5zdGFuY2VLZXldO1xuXG4gICAgaWYgKHRhcmdldEluc3QpIHtcbiAgICAgIC8vIFNpbmNlIHRoaXMgd2Fzbid0IHRoZSBkaXJlY3QgdGFyZ2V0IG9mIHRoZSBldmVudCwgd2UgbWlnaHQgaGF2ZVxuICAgICAgLy8gc3RlcHBlZCBwYXN0IGRlaHlkcmF0ZWQgRE9NIG5vZGVzIHRvIGdldCBoZXJlLiBIb3dldmVyIHRoZXkgY291bGRcbiAgICAgIC8vIGFsc28gaGF2ZSBiZWVuIG5vbi1SZWFjdCBub2Rlcy4gV2UgbmVlZCB0byBhbnN3ZXIgd2hpY2ggb25lLlxuICAgICAgLy8gSWYgd2UgdGhlIGluc3RhbmNlIGRvZXNuJ3QgaGF2ZSBhbnkgY2hpbGRyZW4sIHRoZW4gdGhlcmUgY2FuJ3QgYmVcbiAgICAgIC8vIGEgbmVzdGVkIHN1c3BlbnNlIGJvdW5kYXJ5IHdpdGhpbiBpdC4gU28gd2UgY2FuIHVzZSB0aGlzIGFzIGEgZmFzdFxuICAgICAgLy8gYmFpbG91dC4gTW9zdCBvZiB0aGUgdGltZSwgd2hlbiBwZW9wbGUgYWRkIG5vbi1SZWFjdCBjaGlsZHJlbiB0b1xuICAgICAgLy8gdGhlIHRyZWUsIGl0IGlzIHVzaW5nIGEgcmVmIHRvIGEgY2hpbGQtbGVzcyBET00gbm9kZS5cbiAgICAgIC8vIE5vcm1hbGx5IHdlJ2Qgb25seSBuZWVkIHRvIGNoZWNrIG9uZSBvZiB0aGUgZmliZXJzIGJlY2F1c2UgaWYgaXRcbiAgICAgIC8vIGhhcyBldmVyIGdvbmUgZnJvbSBoYXZpbmcgY2hpbGRyZW4gdG8gZGVsZXRpbmcgdGhlbSBvciB2aWNlIHZlcnNhXG4gICAgICAvLyBpdCB3b3VsZCBoYXZlIGRlbGV0ZWQgdGhlIGRlaHlkcmF0ZWQgYm91bmRhcnkgbmVzdGVkIGluc2lkZSBhbHJlYWR5LlxuICAgICAgLy8gSG93ZXZlciwgc2luY2UgdGhlIEhvc3RSb290IHN0YXJ0cyBvdXQgd2l0aCBhbiBhbHRlcm5hdGUgaXQgbWlnaHRcbiAgICAgIC8vIGhhdmUgb25lIG9uIHRoZSBhbHRlcm5hdGUgc28gd2UgbmVlZCB0byBjaGVjayBpbiBjYXNlIHRoaXMgd2FzIGFcbiAgICAgIC8vIHJvb3QuXG4gICAgICB2YXIgYWx0ZXJuYXRlID0gdGFyZ2V0SW5zdC5hbHRlcm5hdGU7XG5cbiAgICAgIGlmICh0YXJnZXRJbnN0LmNoaWxkICE9PSBudWxsIHx8IGFsdGVybmF0ZSAhPT0gbnVsbCAmJiBhbHRlcm5hdGUuY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgLy8gTmV4dCB3ZSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlIG5vZGUgdGhhdCBza2lwcGVkIHBhc3QgaXNcbiAgICAgICAgLy8gbmVzdGVkIHdpdGhpbiBhIGRlaHlkcmF0ZWQgYm91bmRhcnkgYW5kIGlmIHNvLCB3aGljaCBvbmUuXG4gICAgICAgIHZhciBzdXNwZW5zZUluc3RhbmNlID0gZ2V0UGFyZW50U3VzcGVuc2VJbnN0YW5jZSh0YXJnZXROb2RlKTtcblxuICAgICAgICB3aGlsZSAoc3VzcGVuc2VJbnN0YW5jZSAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIFdlIGZvdW5kIGEgc3VzcGVuc2UgaW5zdGFuY2UuIFRoYXQgbWVhbnMgdGhhdCB3ZSBoYXZlbid0XG4gICAgICAgICAgLy8gaHlkcmF0ZWQgaXQgeWV0LiBFdmVuIHRob3VnaCB3ZSBsZWF2ZSB0aGUgY29tbWVudHMgaW4gdGhlXG4gICAgICAgICAgLy8gRE9NIGFmdGVyIGh5ZHJhdGluZywgYW5kIHRoZXJlIGFyZSBib3VuZGFyaWVzIGluIHRoZSBET01cbiAgICAgICAgICAvLyB0aGF0IGNvdWxkIGFscmVhZHkgYmUgaHlkcmF0ZWQsIHdlIHdvdWxkbid0IGhhdmUgZm91bmQgdGhlbVxuICAgICAgICAgIC8vIHRocm91Z2ggdGhpcyBwYXNzIHNpbmNlIGlmIHRoZSB0YXJnZXQgaXMgaHlkcmF0ZWQgaXQgd291bGRcbiAgICAgICAgICAvLyBoYXZlIGhhZCBhbiBpbnRlcm5hbEluc3RhbmNlS2V5IG9uIGl0LlxuICAgICAgICAgIC8vIExldCdzIGdldCB0aGUgZmliZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBTdXNwZW5zZUNvbXBvbmVudFxuICAgICAgICAgIC8vIGFzIHRoZSBkZWVwZXN0IGluc3RhbmNlLlxuICAgICAgICAgIHZhciB0YXJnZXRTdXNwZW5zZUluc3QgPSBzdXNwZW5zZUluc3RhbmNlW2ludGVybmFsSW5zdGFuY2VLZXldO1xuXG4gICAgICAgICAgaWYgKHRhcmdldFN1c3BlbnNlSW5zdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRhcmdldFN1c3BlbnNlSW5zdDtcbiAgICAgICAgICB9IC8vIElmIHdlIGRvbid0IGZpbmQgYSBGaWJlciBvbiB0aGUgY29tbWVudCwgaXQgbWlnaHQgYmUgYmVjYXVzZVxuICAgICAgICAgIC8vIHdlIGhhdmVuJ3QgZ290dGVuIHRvIGh5ZHJhdGUgaXQgeWV0LiBUaGVyZSBtaWdodCBzdGlsbCBiZSBhXG4gICAgICAgICAgLy8gcGFyZW50IGJvdW5kYXJ5IHRoYXQgaGFzbid0IGFib3ZlIHRoaXMgb25lIHNvIHdlIG5lZWQgdG8gZmluZFxuICAgICAgICAgIC8vIHRoZSBvdXRlciBtb3N0IHRoYXQgaXMga25vd24uXG5cblxuICAgICAgICAgIHN1c3BlbnNlSW5zdGFuY2UgPSBnZXRQYXJlbnRTdXNwZW5zZUluc3RhbmNlKHN1c3BlbnNlSW5zdGFuY2UpOyAvLyBJZiB3ZSBkb24ndCBmaW5kIG9uZSwgdGhlbiB0aGF0IHNob3VsZCBtZWFuIHRoYXQgdGhlIHBhcmVudFxuICAgICAgICAgIC8vIGhvc3QgY29tcG9uZW50IGFsc28gaGFzbid0IGh5ZHJhdGVkIHlldC4gV2UgY2FuIHJldHVybiBpdFxuICAgICAgICAgIC8vIGJlbG93IHNpbmNlIGl0IHdpbGwgYmFpbCBvdXQgb24gdGhlIGlzTW91bnRlZCBjaGVjayBsYXRlci5cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGFyZ2V0SW5zdDtcbiAgICB9XG5cbiAgICB0YXJnZXROb2RlID0gcGFyZW50Tm9kZTtcbiAgICBwYXJlbnROb2RlID0gdGFyZ2V0Tm9kZS5wYXJlbnROb2RlO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4vKipcbiAqIEdpdmVuIGEgRE9NIG5vZGUsIHJldHVybiB0aGUgUmVhY3RET01Db21wb25lbnQgb3IgUmVhY3RET01UZXh0Q29tcG9uZW50XG4gKiBpbnN0YW5jZSwgb3IgbnVsbCBpZiB0aGUgbm9kZSB3YXMgbm90IHJlbmRlcmVkIGJ5IHRoaXMgUmVhY3QuXG4gKi9cblxuZnVuY3Rpb24gZ2V0SW5zdGFuY2VGcm9tTm9kZShub2RlKSB7XG4gIHZhciBpbnN0ID0gbm9kZVtpbnRlcm5hbEluc3RhbmNlS2V5XSB8fCBub2RlW2ludGVybmFsQ29udGFpbmVySW5zdGFuY2VLZXldO1xuXG4gIGlmIChpbnN0KSB7XG4gICAgaWYgKGluc3QudGFnID09PSBIb3N0Q29tcG9uZW50IHx8IGluc3QudGFnID09PSBIb3N0VGV4dCB8fCBpbnN0LnRhZyA9PT0gU3VzcGVuc2VDb21wb25lbnQgfHwgaW5zdC50YWcgPT09IEhvc3RSb290KSB7XG4gICAgICByZXR1cm4gaW5zdDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4vKipcbiAqIEdpdmVuIGEgUmVhY3RET01Db21wb25lbnQgb3IgUmVhY3RET01UZXh0Q29tcG9uZW50LCByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmdcbiAqIERPTSBub2RlLlxuICovXG5cbmZ1bmN0aW9uIGdldE5vZGVGcm9tSW5zdGFuY2UoaW5zdCkge1xuICBpZiAoaW5zdC50YWcgPT09IEhvc3RDb21wb25lbnQgfHwgaW5zdC50YWcgPT09IEhvc3RUZXh0KSB7XG4gICAgLy8gSW4gRmliZXIgdGhpcywgaXMganVzdCB0aGUgc3RhdGUgbm9kZSByaWdodCBub3cuIFdlIGFzc3VtZSBpdCB3aWxsIGJlXG4gICAgLy8gYSBob3N0IGNvbXBvbmVudCBvciBob3N0IHRleHQuXG4gICAgcmV0dXJuIGluc3Quc3RhdGVOb2RlO1xuICB9IC8vIFdpdGhvdXQgdGhpcyBmaXJzdCBpbnZhcmlhbnQsIHBhc3NpbmcgYSBub24tRE9NLWNvbXBvbmVudCB0cmlnZ2VycyB0aGUgbmV4dFxuICAvLyBpbnZhcmlhbnQgZm9yIGEgbWlzc2luZyBwYXJlbnQsIHdoaWNoIGlzIHN1cGVyIGNvbmZ1c2luZy5cblxuXG4gIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJnZXROb2RlRnJvbUluc3RhbmNlOiBJbnZhbGlkIGFyZ3VtZW50LlwiICk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBnZXRGaWJlckN1cnJlbnRQcm9wc0Zyb21Ob2RlKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGVbaW50ZXJuYWxQcm9wc0tleV0gfHwgbnVsbDtcbn1cbmZ1bmN0aW9uIHVwZGF0ZUZpYmVyUHJvcHMobm9kZSwgcHJvcHMpIHtcbiAgbm9kZVtpbnRlcm5hbFByb3BzS2V5XSA9IHByb3BzO1xufVxuZnVuY3Rpb24gZ2V0RXZlbnRMaXN0ZW5lclNldChub2RlKSB7XG4gIHZhciBlbGVtZW50TGlzdGVuZXJTZXQgPSBub2RlW2ludGVybmFsRXZlbnRIYW5kbGVyc0tleV07XG5cbiAgaWYgKGVsZW1lbnRMaXN0ZW5lclNldCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZWxlbWVudExpc3RlbmVyU2V0ID0gbm9kZVtpbnRlcm5hbEV2ZW50SGFuZGxlcnNLZXldID0gbmV3IFNldCgpO1xuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnRMaXN0ZW5lclNldDtcbn1cblxudmFyIGxvZ2dlZFR5cGVGYWlsdXJlcyA9IHt9O1xudmFyIFJlYWN0RGVidWdDdXJyZW50RnJhbWUkMSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0RGVidWdDdXJyZW50RnJhbWU7XG5cbmZ1bmN0aW9uIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGVsZW1lbnQpIHtcbiAge1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICB2YXIgb3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgICAgIHZhciBzdGFjayA9IGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVihlbGVtZW50LnR5cGUsIGVsZW1lbnQuX3NvdXJjZSwgb3duZXIgPyBvd25lci50eXBlIDogbnVsbCk7XG4gICAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lJDEuc2V0RXh0cmFTdGFja0ZyYW1lKHN0YWNrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSQxLnNldEV4dHJhU3RhY2tGcmFtZShudWxsKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tQcm9wVHlwZXModHlwZVNwZWNzLCB2YWx1ZXMsIGxvY2F0aW9uLCBjb21wb25lbnROYW1lLCBlbGVtZW50KSB7XG4gIHtcbiAgICAvLyAkRmxvd0ZpeE1lIFRoaXMgaXMgb2theSBidXQgRmxvdyBkb2Vzbid0IGtub3cgaXQuXG4gICAgdmFyIGhhcyA9IEZ1bmN0aW9uLmNhbGwuYmluZChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcblxuICAgIGZvciAodmFyIHR5cGVTcGVjTmFtZSBpbiB0eXBlU3BlY3MpIHtcbiAgICAgIGlmIChoYXModHlwZVNwZWNzLCB0eXBlU3BlY05hbWUpKSB7XG4gICAgICAgIHZhciBlcnJvciQxID0gdm9pZCAwOyAvLyBQcm9wIHR5cGUgdmFsaWRhdGlvbiBtYXkgdGhyb3cuIEluIGNhc2UgdGhleSBkbywgd2UgZG9uJ3Qgd2FudCB0b1xuICAgICAgICAvLyBmYWlsIHRoZSByZW5kZXIgcGhhc2Ugd2hlcmUgaXQgZGlkbid0IGZhaWwgYmVmb3JlLiBTbyB3ZSBsb2cgaXQuXG4gICAgICAgIC8vIEFmdGVyIHRoZXNlIGhhdmUgYmVlbiBjbGVhbmVkIHVwLCB3ZSdsbCBsZXQgdGhlbSB0aHJvdy5cblxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIFRoaXMgaXMgaW50ZW50aW9uYWxseSBhbiBpbnZhcmlhbnQgdGhhdCBnZXRzIGNhdWdodC4gSXQncyB0aGUgc2FtZVxuICAgICAgICAgIC8vIGJlaGF2aW9yIGFzIHdpdGhvdXQgdGhpcyBzdGF0ZW1lbnQgZXhjZXB0IHdpdGggYSBiZXR0ZXIgbWVzc2FnZS5cbiAgICAgICAgICBpZiAodHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB2YXIgZXJyID0gRXJyb3IoKGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJykgKyAnOiAnICsgbG9jYXRpb24gKyAnIHR5cGUgYCcgKyB0eXBlU3BlY05hbWUgKyAnYCBpcyBpbnZhbGlkOyAnICsgJ2l0IG11c3QgYmUgYSBmdW5jdGlvbiwgdXN1YWxseSBmcm9tIHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZSwgYnV0IHJlY2VpdmVkIGAnICsgdHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdICsgJ2AuJyArICdUaGlzIG9mdGVuIGhhcHBlbnMgYmVjYXVzZSBvZiB0eXBvcyBzdWNoIGFzIGBQcm9wVHlwZXMuZnVuY3Rpb25gIGluc3RlYWQgb2YgYFByb3BUeXBlcy5mdW5jYC4nKTtcbiAgICAgICAgICAgIGVyci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGVycm9yJDEgPSB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSh2YWx1ZXMsIHR5cGVTcGVjTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIG51bGwsICdTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRCcpO1xuICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgIGVycm9yJDEgPSBleDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlcnJvciQxICYmICEoZXJyb3IkMSBpbnN0YW5jZW9mIEVycm9yKSkge1xuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGVsZW1lbnQpO1xuXG4gICAgICAgICAgZXJyb3IoJyVzOiB0eXBlIHNwZWNpZmljYXRpb24gb2YgJXMnICsgJyBgJXNgIGlzIGludmFsaWQ7IHRoZSB0eXBlIGNoZWNrZXIgJyArICdmdW5jdGlvbiBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gYEVycm9yYCBidXQgcmV0dXJuZWQgYSAlcy4gJyArICdZb3UgbWF5IGhhdmUgZm9yZ290dGVuIHRvIHBhc3MgYW4gYXJndW1lbnQgdG8gdGhlIHR5cGUgY2hlY2tlciAnICsgJ2NyZWF0b3IgKGFycmF5T2YsIGluc3RhbmNlT2YsIG9iamVjdE9mLCBvbmVPZiwgb25lT2ZUeXBlLCBhbmQgJyArICdzaGFwZSBhbGwgcmVxdWlyZSBhbiBhcmd1bWVudCkuJywgY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnLCBsb2NhdGlvbiwgdHlwZVNwZWNOYW1lLCB0eXBlb2YgZXJyb3IkMSk7XG5cbiAgICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlcnJvciQxIGluc3RhbmNlb2YgRXJyb3IgJiYgIShlcnJvciQxLm1lc3NhZ2UgaW4gbG9nZ2VkVHlwZUZhaWx1cmVzKSkge1xuICAgICAgICAgIC8vIE9ubHkgbW9uaXRvciB0aGlzIGZhaWx1cmUgb25jZSBiZWNhdXNlIHRoZXJlIHRlbmRzIHRvIGJlIGEgbG90IG9mIHRoZVxuICAgICAgICAgIC8vIHNhbWUgZXJyb3IuXG4gICAgICAgICAgbG9nZ2VkVHlwZUZhaWx1cmVzW2Vycm9yJDEubWVzc2FnZV0gPSB0cnVlO1xuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGVsZW1lbnQpO1xuXG4gICAgICAgICAgZXJyb3IoJ0ZhaWxlZCAlcyB0eXBlOiAlcycsIGxvY2F0aW9uLCBlcnJvciQxLm1lc3NhZ2UpO1xuXG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQobnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIHZhbHVlU3RhY2sgPSBbXTtcbnZhciBmaWJlclN0YWNrO1xuXG57XG4gIGZpYmVyU3RhY2sgPSBbXTtcbn1cblxudmFyIGluZGV4ID0gLTE7XG5cbmZ1bmN0aW9uIGNyZWF0ZUN1cnNvcihkZWZhdWx0VmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBjdXJyZW50OiBkZWZhdWx0VmFsdWVcbiAgfTtcbn1cblxuZnVuY3Rpb24gcG9wKGN1cnNvciwgZmliZXIpIHtcbiAgaWYgKGluZGV4IDwgMCkge1xuICAgIHtcbiAgICAgIGVycm9yKCdVbmV4cGVjdGVkIHBvcC4nKTtcbiAgICB9XG5cbiAgICByZXR1cm47XG4gIH1cblxuICB7XG4gICAgaWYgKGZpYmVyICE9PSBmaWJlclN0YWNrW2luZGV4XSkge1xuICAgICAgZXJyb3IoJ1VuZXhwZWN0ZWQgRmliZXIgcG9wcGVkLicpO1xuICAgIH1cbiAgfVxuXG4gIGN1cnNvci5jdXJyZW50ID0gdmFsdWVTdGFja1tpbmRleF07XG4gIHZhbHVlU3RhY2tbaW5kZXhdID0gbnVsbDtcblxuICB7XG4gICAgZmliZXJTdGFja1tpbmRleF0gPSBudWxsO1xuICB9XG5cbiAgaW5kZXgtLTtcbn1cblxuZnVuY3Rpb24gcHVzaChjdXJzb3IsIHZhbHVlLCBmaWJlcikge1xuICBpbmRleCsrO1xuICB2YWx1ZVN0YWNrW2luZGV4XSA9IGN1cnNvci5jdXJyZW50O1xuXG4gIHtcbiAgICBmaWJlclN0YWNrW2luZGV4XSA9IGZpYmVyO1xuICB9XG5cbiAgY3Vyc29yLmN1cnJlbnQgPSB2YWx1ZTtcbn1cblxudmFyIHdhcm5lZEFib3V0TWlzc2luZ0dldENoaWxkQ29udGV4dDtcblxue1xuICB3YXJuZWRBYm91dE1pc3NpbmdHZXRDaGlsZENvbnRleHQgPSB7fTtcbn1cblxudmFyIGVtcHR5Q29udGV4dE9iamVjdCA9IHt9O1xuXG57XG4gIE9iamVjdC5mcmVlemUoZW1wdHlDb250ZXh0T2JqZWN0KTtcbn0gLy8gQSBjdXJzb3IgdG8gdGhlIGN1cnJlbnQgbWVyZ2VkIGNvbnRleHQgb2JqZWN0IG9uIHRoZSBzdGFjay5cblxuXG52YXIgY29udGV4dFN0YWNrQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKGVtcHR5Q29udGV4dE9iamVjdCk7IC8vIEEgY3Vyc29yIHRvIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGNvbnRleHQgaGFzIGNoYW5nZWQuXG5cbnZhciBkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKGZhbHNlKTsgLy8gS2VlcCB0cmFjayBvZiB0aGUgcHJldmlvdXMgY29udGV4dCBvYmplY3QgdGhhdCB3YXMgb24gdGhlIHN0YWNrLlxuLy8gV2UgdXNlIHRoaXMgdG8gZ2V0IGFjY2VzcyB0byB0aGUgcGFyZW50IGNvbnRleHQgYWZ0ZXIgd2UgaGF2ZSBhbHJlYWR5XG4vLyBwdXNoZWQgdGhlIG5leHQgY29udGV4dCBwcm92aWRlciwgYW5kIG5vdyBuZWVkIHRvIG1lcmdlIHRoZWlyIGNvbnRleHRzLlxuXG52YXIgcHJldmlvdXNDb250ZXh0ID0gZW1wdHlDb250ZXh0T2JqZWN0O1xuXG5mdW5jdGlvbiBnZXRVbm1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgZGlkUHVzaE93bkNvbnRleHRJZlByb3ZpZGVyKSB7XG4gIHtcbiAgICBpZiAoZGlkUHVzaE93bkNvbnRleHRJZlByb3ZpZGVyICYmIGlzQ29udGV4dFByb3ZpZGVyKENvbXBvbmVudCkpIHtcbiAgICAgIC8vIElmIHRoZSBmaWJlciBpcyBhIGNvbnRleHQgcHJvdmlkZXIgaXRzZWxmLCB3aGVuIHdlIHJlYWQgaXRzIGNvbnRleHRcbiAgICAgIC8vIHdlIG1heSBoYXZlIGFscmVhZHkgcHVzaGVkIGl0cyBvd24gY2hpbGQgY29udGV4dCBvbiB0aGUgc3RhY2suIEEgY29udGV4dFxuICAgICAgLy8gcHJvdmlkZXIgc2hvdWxkIG5vdCBcInNlZVwiIGl0cyBvd24gY2hpbGQgY29udGV4dC4gVGhlcmVmb3JlIHdlIHJlYWQgdGhlXG4gICAgICAvLyBwcmV2aW91cyAocGFyZW50KSBjb250ZXh0IGluc3RlYWQgZm9yIGEgY29udGV4dCBwcm92aWRlci5cbiAgICAgIHJldHVybiBwcmV2aW91c0NvbnRleHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRleHRTdGFja0N1cnNvci5jdXJyZW50O1xuICB9XG59XG5cbmZ1bmN0aW9uIGNhY2hlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgdW5tYXNrZWRDb250ZXh0LCBtYXNrZWRDb250ZXh0KSB7XG4gIHtcbiAgICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gICAgaW5zdGFuY2UuX19yZWFjdEludGVybmFsTWVtb2l6ZWRVbm1hc2tlZENoaWxkQ29udGV4dCA9IHVubWFza2VkQ29udGV4dDtcbiAgICBpbnN0YW5jZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1hc2tlZENoaWxkQ29udGV4dCA9IG1hc2tlZENvbnRleHQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0TWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgdW5tYXNrZWRDb250ZXh0KSB7XG4gIHtcbiAgICB2YXIgdHlwZSA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG4gICAgdmFyIGNvbnRleHRUeXBlcyA9IHR5cGUuY29udGV4dFR5cGVzO1xuXG4gICAgaWYgKCFjb250ZXh0VHlwZXMpIHtcbiAgICAgIHJldHVybiBlbXB0eUNvbnRleHRPYmplY3Q7XG4gICAgfSAvLyBBdm9pZCByZWNyZWF0aW5nIG1hc2tlZCBjb250ZXh0IHVubGVzcyB1bm1hc2tlZCBjb250ZXh0IGhhcyBjaGFuZ2VkLlxuICAgIC8vIEZhaWxpbmcgdG8gZG8gdGhpcyB3aWxsIHJlc3VsdCBpbiB1bm5lY2Vzc2FyeSBjYWxscyB0byBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzLlxuICAgIC8vIFRoaXMgbWF5IHRyaWdnZXIgaW5maW5pdGUgbG9vcHMgaWYgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyBjYWxscyBzZXRTdGF0ZS5cblxuXG4gICAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuXG4gICAgaWYgKGluc3RhbmNlICYmIGluc3RhbmNlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkVW5tYXNrZWRDaGlsZENvbnRleHQgPT09IHVubWFza2VkQ29udGV4dCkge1xuICAgICAgcmV0dXJuIGluc3RhbmNlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWFza2VkQ2hpbGRDb250ZXh0O1xuICAgIH1cblxuICAgIHZhciBjb250ZXh0ID0ge307XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gY29udGV4dFR5cGVzKSB7XG4gICAgICBjb250ZXh0W2tleV0gPSB1bm1hc2tlZENvbnRleHRba2V5XTtcbiAgICB9XG5cbiAgICB7XG4gICAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWUodHlwZSkgfHwgJ1Vua25vd24nO1xuICAgICAgY2hlY2tQcm9wVHlwZXMoY29udGV4dFR5cGVzLCBjb250ZXh0LCAnY29udGV4dCcsIG5hbWUpO1xuICAgIH0gLy8gQ2FjaGUgdW5tYXNrZWQgY29udGV4dCBzbyB3ZSBjYW4gYXZvaWQgcmVjcmVhdGluZyBtYXNrZWQgY29udGV4dCB1bmxlc3MgbmVjZXNzYXJ5LlxuICAgIC8vIENvbnRleHQgaXMgY3JlYXRlZCBiZWZvcmUgdGhlIGNsYXNzIGNvbXBvbmVudCBpcyBpbnN0YW50aWF0ZWQgc28gY2hlY2sgZm9yIGluc3RhbmNlLlxuXG5cbiAgICBpZiAoaW5zdGFuY2UpIHtcbiAgICAgIGNhY2hlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgdW5tYXNrZWRDb250ZXh0LCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udGV4dDtcbiAgfVxufVxuXG5mdW5jdGlvbiBoYXNDb250ZXh0Q2hhbmdlZCgpIHtcbiAge1xuICAgIHJldHVybiBkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLmN1cnJlbnQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNDb250ZXh0UHJvdmlkZXIodHlwZSkge1xuICB7XG4gICAgdmFyIGNoaWxkQ29udGV4dFR5cGVzID0gdHlwZS5jaGlsZENvbnRleHRUeXBlcztcbiAgICByZXR1cm4gY2hpbGRDb250ZXh0VHlwZXMgIT09IG51bGwgJiYgY2hpbGRDb250ZXh0VHlwZXMgIT09IHVuZGVmaW5lZDtcbiAgfVxufVxuXG5mdW5jdGlvbiBwb3BDb250ZXh0KGZpYmVyKSB7XG4gIHtcbiAgICBwb3AoZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvciwgZmliZXIpO1xuICAgIHBvcChjb250ZXh0U3RhY2tDdXJzb3IsIGZpYmVyKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwb3BUb3BMZXZlbENvbnRleHRPYmplY3QoZmliZXIpIHtcbiAge1xuICAgIHBvcChkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLCBmaWJlcik7XG4gICAgcG9wKGNvbnRleHRTdGFja0N1cnNvciwgZmliZXIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHB1c2hUb3BMZXZlbENvbnRleHRPYmplY3QoZmliZXIsIGNvbnRleHQsIGRpZENoYW5nZSkge1xuICB7XG4gICAgaWYgKCEoY29udGV4dFN0YWNrQ3Vyc29yLmN1cnJlbnQgPT09IGVtcHR5Q29udGV4dE9iamVjdCkpIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiVW5leHBlY3RlZCBjb250ZXh0IGZvdW5kIG9uIHN0YWNrLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHVzaChjb250ZXh0U3RhY2tDdXJzb3IsIGNvbnRleHQsIGZpYmVyKTtcbiAgICBwdXNoKGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IsIGRpZENoYW5nZSwgZmliZXIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NDaGlsZENvbnRleHQoZmliZXIsIHR5cGUsIHBhcmVudENvbnRleHQpIHtcbiAge1xuICAgIHZhciBpbnN0YW5jZSA9IGZpYmVyLnN0YXRlTm9kZTtcbiAgICB2YXIgY2hpbGRDb250ZXh0VHlwZXMgPSB0eXBlLmNoaWxkQ29udGV4dFR5cGVzOyAvLyBUT0RPIChidmF1Z2huKSBSZXBsYWNlIHRoaXMgYmVoYXZpb3Igd2l0aCBhbiBpbnZhcmlhbnQoKSBpbiB0aGUgZnV0dXJlLlxuICAgIC8vIEl0IGhhcyBvbmx5IGJlZW4gYWRkZWQgaW4gRmliZXIgdG8gbWF0Y2ggdGhlICh1bmludGVudGlvbmFsKSBiZWhhdmlvciBpbiBTdGFjay5cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuZ2V0Q2hpbGRDb250ZXh0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB7XG4gICAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZSh0eXBlKSB8fCAnVW5rbm93bic7XG5cbiAgICAgICAgaWYgKCF3YXJuZWRBYm91dE1pc3NpbmdHZXRDaGlsZENvbnRleHRbY29tcG9uZW50TmFtZV0pIHtcbiAgICAgICAgICB3YXJuZWRBYm91dE1pc3NpbmdHZXRDaGlsZENvbnRleHRbY29tcG9uZW50TmFtZV0gPSB0cnVlO1xuXG4gICAgICAgICAgZXJyb3IoJyVzLmNoaWxkQ29udGV4dFR5cGVzIGlzIHNwZWNpZmllZCBidXQgdGhlcmUgaXMgbm8gZ2V0Q2hpbGRDb250ZXh0KCkgbWV0aG9kICcgKyAnb24gdGhlIGluc3RhbmNlLiBZb3UgY2FuIGVpdGhlciBkZWZpbmUgZ2V0Q2hpbGRDb250ZXh0KCkgb24gJXMgb3IgcmVtb3ZlICcgKyAnY2hpbGRDb250ZXh0VHlwZXMgZnJvbSBpdC4nLCBjb21wb25lbnROYW1lLCBjb21wb25lbnROYW1lKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFyZW50Q29udGV4dDtcbiAgICB9XG5cbiAgICB2YXIgY2hpbGRDb250ZXh0ID0gaW5zdGFuY2UuZ2V0Q2hpbGRDb250ZXh0KCk7XG5cbiAgICBmb3IgKHZhciBjb250ZXh0S2V5IGluIGNoaWxkQ29udGV4dCkge1xuICAgICAgaWYgKCEoY29udGV4dEtleSBpbiBjaGlsZENvbnRleHRUeXBlcykpIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCAoZ2V0Q29tcG9uZW50TmFtZSh0eXBlKSB8fCAnVW5rbm93bicpICsgXCIuZ2V0Q2hpbGRDb250ZXh0KCk6IGtleSBcXFwiXCIgKyBjb250ZXh0S2V5ICsgXCJcXFwiIGlzIG5vdCBkZWZpbmVkIGluIGNoaWxkQ29udGV4dFR5cGVzLlwiICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB7XG4gICAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWUodHlwZSkgfHwgJ1Vua25vd24nO1xuICAgICAgY2hlY2tQcm9wVHlwZXMoY2hpbGRDb250ZXh0VHlwZXMsIGNoaWxkQ29udGV4dCwgJ2NoaWxkIGNvbnRleHQnLCBuYW1lKTtcbiAgICB9XG5cbiAgICByZXR1cm4gX2Fzc2lnbih7fSwgcGFyZW50Q29udGV4dCwgY2hpbGRDb250ZXh0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwdXNoQ29udGV4dFByb3ZpZGVyKHdvcmtJblByb2dyZXNzKSB7XG4gIHtcbiAgICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7IC8vIFdlIHB1c2ggdGhlIGNvbnRleHQgYXMgZWFybHkgYXMgcG9zc2libGUgdG8gZW5zdXJlIHN0YWNrIGludGVncml0eS5cbiAgICAvLyBJZiB0aGUgaW5zdGFuY2UgZG9lcyBub3QgZXhpc3QgeWV0LCB3ZSB3aWxsIHB1c2ggbnVsbCBhdCBmaXJzdCxcbiAgICAvLyBhbmQgcmVwbGFjZSBpdCBvbiB0aGUgc3RhY2sgbGF0ZXIgd2hlbiBpbnZhbGlkYXRpbmcgdGhlIGNvbnRleHQuXG5cbiAgICB2YXIgbWVtb2l6ZWRNZXJnZWRDaGlsZENvbnRleHQgPSBpbnN0YW5jZSAmJiBpbnN0YW5jZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1lcmdlZENoaWxkQ29udGV4dCB8fCBlbXB0eUNvbnRleHRPYmplY3Q7IC8vIFJlbWVtYmVyIHRoZSBwYXJlbnQgY29udGV4dCBzbyB3ZSBjYW4gbWVyZ2Ugd2l0aCBpdCBsYXRlci5cbiAgICAvLyBJbmhlcml0IHRoZSBwYXJlbnQncyBkaWQtcGVyZm9ybS13b3JrIHZhbHVlIHRvIGF2b2lkIGluYWR2ZXJ0ZW50bHkgYmxvY2tpbmcgdXBkYXRlcy5cblxuICAgIHByZXZpb3VzQ29udGV4dCA9IGNvbnRleHRTdGFja0N1cnNvci5jdXJyZW50O1xuICAgIHB1c2goY29udGV4dFN0YWNrQ3Vyc29yLCBtZW1vaXplZE1lcmdlZENoaWxkQ29udGV4dCwgd29ya0luUHJvZ3Jlc3MpO1xuICAgIHB1c2goZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvciwgZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvci5jdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW52YWxpZGF0ZUNvbnRleHRQcm92aWRlcih3b3JrSW5Qcm9ncmVzcywgdHlwZSwgZGlkQ2hhbmdlKSB7XG4gIHtcbiAgICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG5cbiAgICBpZiAoIWluc3RhbmNlKSB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIkV4cGVjdGVkIHRvIGhhdmUgYW4gaW5zdGFuY2UgYnkgdGhpcyBwb2ludC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChkaWRDaGFuZ2UpIHtcbiAgICAgIC8vIE1lcmdlIHBhcmVudCBhbmQgb3duIGNvbnRleHQuXG4gICAgICAvLyBTa2lwIHRoaXMgaWYgd2UncmUgbm90IHVwZGF0aW5nIGR1ZSB0byBzQ1UuXG4gICAgICAvLyBUaGlzIGF2b2lkcyB1bm5lY2Vzc2FyaWx5IHJlY29tcHV0aW5nIG1lbW9pemVkIHZhbHVlcy5cbiAgICAgIHZhciBtZXJnZWRDb250ZXh0ID0gcHJvY2Vzc0NoaWxkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgdHlwZSwgcHJldmlvdXNDb250ZXh0KTtcbiAgICAgIGluc3RhbmNlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0ID0gbWVyZ2VkQ29udGV4dDsgLy8gUmVwbGFjZSB0aGUgb2xkIChvciBlbXB0eSkgY29udGV4dCB3aXRoIHRoZSBuZXcgb25lLlxuICAgICAgLy8gSXQgaXMgaW1wb3J0YW50IHRvIHVud2luZCB0aGUgY29udGV4dCBpbiB0aGUgcmV2ZXJzZSBvcmRlci5cblxuICAgICAgcG9wKGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHBvcChjb250ZXh0U3RhY2tDdXJzb3IsIHdvcmtJblByb2dyZXNzKTsgLy8gTm93IHB1c2ggdGhlIG5ldyBjb250ZXh0IGFuZCBtYXJrIHRoYXQgaXQgaGFzIGNoYW5nZWQuXG5cbiAgICAgIHB1c2goY29udGV4dFN0YWNrQ3Vyc29yLCBtZXJnZWRDb250ZXh0LCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICBwdXNoKGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IsIGRpZENoYW5nZSwgd29ya0luUHJvZ3Jlc3MpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwb3AoZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvciwgd29ya0luUHJvZ3Jlc3MpO1xuICAgICAgcHVzaChkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLCBkaWRDaGFuZ2UsIHdvcmtJblByb2dyZXNzKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluZEN1cnJlbnRVbm1hc2tlZENvbnRleHQoZmliZXIpIHtcbiAge1xuICAgIC8vIEN1cnJlbnRseSB0aGlzIGlzIG9ubHkgdXNlZCB3aXRoIHJlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyOyBub3Qgc3VyZSBpZiBpdFxuICAgIC8vIG1ha2VzIHNlbnNlIGVsc2V3aGVyZVxuICAgIGlmICghKGlzRmliZXJNb3VudGVkKGZpYmVyKSAmJiBmaWJlci50YWcgPT09IENsYXNzQ29tcG9uZW50KSkge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJFeHBlY3RlZCBzdWJ0cmVlIHBhcmVudCB0byBiZSBhIG1vdW50ZWQgY2xhc3MgY29tcG9uZW50LiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIG5vZGUgPSBmaWJlcjtcblxuICAgIGRvIHtcbiAgICAgIHN3aXRjaCAobm9kZS50YWcpIHtcbiAgICAgICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgICAgICByZXR1cm4gbm9kZS5zdGF0ZU5vZGUuY29udGV4dDtcblxuICAgICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBDb21wb25lbnQgPSBub2RlLnR5cGU7XG5cbiAgICAgICAgICAgIGlmIChpc0NvbnRleHRQcm92aWRlcihDb21wb25lbnQpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBub2RlLnN0YXRlTm9kZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1lcmdlZENoaWxkQ29udGV4dDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfSB3aGlsZSAobm9kZSAhPT0gbnVsbCk7XG5cbiAgICB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIkZvdW5kIHVuZXhwZWN0ZWQgZGV0YWNoZWQgc3VidHJlZSBwYXJlbnQuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIExlZ2FjeVJvb3QgPSAwO1xudmFyIEJsb2NraW5nUm9vdCA9IDE7XG52YXIgQ29uY3VycmVudFJvb3QgPSAyO1xuXG52YXIgcmVuZGVyZXJJRCA9IG51bGw7XG52YXIgaW5qZWN0ZWRIb29rID0gbnVsbDtcbnZhciBoYXNMb2dnZWRFcnJvciA9IGZhbHNlO1xudmFyIGlzRGV2VG9vbHNQcmVzZW50ID0gdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyAhPT0gJ3VuZGVmaW5lZCc7XG5mdW5jdGlvbiBpbmplY3RJbnRlcm5hbHMoaW50ZXJuYWxzKSB7XG4gIGlmICh0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fID09PSAndW5kZWZpbmVkJykge1xuICAgIC8vIE5vIERldlRvb2xzXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIGhvb2sgPSBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX187XG5cbiAgaWYgKGhvb2suaXNEaXNhYmxlZCkge1xuICAgIC8vIFRoaXMgaXNuJ3QgYSByZWFsIHByb3BlcnR5IG9uIHRoZSBob29rLCBidXQgaXQgY2FuIGJlIHNldCB0byBvcHQgb3V0XG4gICAgLy8gb2YgRGV2VG9vbHMgaW50ZWdyYXRpb24gYW5kIGFzc29jaWF0ZWQgd2FybmluZ3MgYW5kIGxvZ3MuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8zODc3XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoIWhvb2suc3VwcG9ydHNGaWJlcikge1xuICAgIHtcbiAgICAgIGVycm9yKCdUaGUgaW5zdGFsbGVkIHZlcnNpb24gb2YgUmVhY3QgRGV2VG9vbHMgaXMgdG9vIG9sZCBhbmQgd2lsbCBub3Qgd29yayAnICsgJ3dpdGggdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiBSZWFjdC4gUGxlYXNlIHVwZGF0ZSBSZWFjdCBEZXZUb29scy4gJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvcmVhY3QtZGV2dG9vbHMnKTtcbiAgICB9IC8vIERldlRvb2xzIGV4aXN0cywgZXZlbiB0aG91Z2ggaXQgZG9lc24ndCBzdXBwb3J0IEZpYmVyLlxuXG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmVuZGVyZXJJRCA9IGhvb2suaW5qZWN0KGludGVybmFscyk7IC8vIFdlIGhhdmUgc3VjY2Vzc2Z1bGx5IGluamVjdGVkLCBzbyBub3cgaXQgaXMgc2FmZSB0byBzZXQgdXAgaG9va3MuXG5cbiAgICBpbmplY3RlZEhvb2sgPSBob29rO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBDYXRjaCBhbGwgZXJyb3JzIGJlY2F1c2UgaXQgaXMgdW5zYWZlIHRvIHRocm93IGR1cmluZyBpbml0aWFsaXphdGlvbi5cbiAgICB7XG4gICAgICBlcnJvcignUmVhY3QgaW5zdHJ1bWVudGF0aW9uIGVuY291bnRlcmVkIGFuIGVycm9yOiAlcy4nLCBlcnIpO1xuICAgIH1cbiAgfSAvLyBEZXZUb29scyBleGlzdHNcblxuXG4gIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gb25TY2hlZHVsZVJvb3Qocm9vdCwgY2hpbGRyZW4pIHtcbiAge1xuICAgIGlmIChpbmplY3RlZEhvb2sgJiYgdHlwZW9mIGluamVjdGVkSG9vay5vblNjaGVkdWxlRmliZXJSb290ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpbmplY3RlZEhvb2sub25TY2hlZHVsZUZpYmVyUm9vdChyZW5kZXJlcklELCByb290LCBjaGlsZHJlbik7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKCAhaGFzTG9nZ2VkRXJyb3IpIHtcbiAgICAgICAgICBoYXNMb2dnZWRFcnJvciA9IHRydWU7XG5cbiAgICAgICAgICBlcnJvcignUmVhY3QgaW5zdHJ1bWVudGF0aW9uIGVuY291bnRlcmVkIGFuIGVycm9yOiAlcycsIGVycik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIG9uQ29tbWl0Um9vdChyb290LCBwcmlvcml0eUxldmVsKSB7XG4gIGlmIChpbmplY3RlZEhvb2sgJiYgdHlwZW9mIGluamVjdGVkSG9vay5vbkNvbW1pdEZpYmVyUm9vdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRyeSB7XG4gICAgICB2YXIgZGlkRXJyb3IgPSAocm9vdC5jdXJyZW50LmZsYWdzICYgRGlkQ2FwdHVyZSkgPT09IERpZENhcHR1cmU7XG5cbiAgICAgIGlmIChlbmFibGVQcm9maWxlclRpbWVyKSB7XG4gICAgICAgIGluamVjdGVkSG9vay5vbkNvbW1pdEZpYmVyUm9vdChyZW5kZXJlcklELCByb290LCBwcmlvcml0eUxldmVsLCBkaWRFcnJvcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbmplY3RlZEhvb2sub25Db21taXRGaWJlclJvb3QocmVuZGVyZXJJRCwgcm9vdCwgdW5kZWZpbmVkLCBkaWRFcnJvcik7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB7XG4gICAgICAgIGlmICghaGFzTG9nZ2VkRXJyb3IpIHtcbiAgICAgICAgICBoYXNMb2dnZWRFcnJvciA9IHRydWU7XG5cbiAgICAgICAgICBlcnJvcignUmVhY3QgaW5zdHJ1bWVudGF0aW9uIGVuY291bnRlcmVkIGFuIGVycm9yOiAlcycsIGVycik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIG9uQ29tbWl0VW5tb3VudChmaWJlcikge1xuICBpZiAoaW5qZWN0ZWRIb29rICYmIHR5cGVvZiBpbmplY3RlZEhvb2sub25Db21taXRGaWJlclVubW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICB0cnkge1xuICAgICAgaW5qZWN0ZWRIb29rLm9uQ29tbWl0RmliZXJVbm1vdW50KHJlbmRlcmVySUQsIGZpYmVyKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKCFoYXNMb2dnZWRFcnJvcikge1xuICAgICAgICAgIGhhc0xvZ2dlZEVycm9yID0gdHJ1ZTtcblxuICAgICAgICAgIGVycm9yKCdSZWFjdCBpbnN0cnVtZW50YXRpb24gZW5jb3VudGVyZWQgYW4gZXJyb3I6ICVzJywgZXJyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgU2NoZWR1bGVyX3J1bldpdGhQcmlvcml0eSA9IFNjaGVkdWxlci51bnN0YWJsZV9ydW5XaXRoUHJpb3JpdHksXG4gICAgU2NoZWR1bGVyX3NjaGVkdWxlQ2FsbGJhY2sgPSBTY2hlZHVsZXIudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayxcbiAgICBTY2hlZHVsZXJfY2FuY2VsQ2FsbGJhY2sgPSBTY2hlZHVsZXIudW5zdGFibGVfY2FuY2VsQ2FsbGJhY2ssXG4gICAgU2NoZWR1bGVyX3Nob3VsZFlpZWxkID0gU2NoZWR1bGVyLnVuc3RhYmxlX3Nob3VsZFlpZWxkLFxuICAgIFNjaGVkdWxlcl9yZXF1ZXN0UGFpbnQgPSBTY2hlZHVsZXIudW5zdGFibGVfcmVxdWVzdFBhaW50LFxuICAgIFNjaGVkdWxlcl9ub3ckMSA9IFNjaGVkdWxlci51bnN0YWJsZV9ub3csXG4gICAgU2NoZWR1bGVyX2dldEN1cnJlbnRQcmlvcml0eUxldmVsID0gU2NoZWR1bGVyLnVuc3RhYmxlX2dldEN1cnJlbnRQcmlvcml0eUxldmVsLFxuICAgIFNjaGVkdWxlcl9JbW1lZGlhdGVQcmlvcml0eSA9IFNjaGVkdWxlci51bnN0YWJsZV9JbW1lZGlhdGVQcmlvcml0eSxcbiAgICBTY2hlZHVsZXJfVXNlckJsb2NraW5nUHJpb3JpdHkgPSBTY2hlZHVsZXIudW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHksXG4gICAgU2NoZWR1bGVyX05vcm1hbFByaW9yaXR5ID0gU2NoZWR1bGVyLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5LFxuICAgIFNjaGVkdWxlcl9Mb3dQcmlvcml0eSA9IFNjaGVkdWxlci51bnN0YWJsZV9Mb3dQcmlvcml0eSxcbiAgICBTY2hlZHVsZXJfSWRsZVByaW9yaXR5ID0gU2NoZWR1bGVyLnVuc3RhYmxlX0lkbGVQcmlvcml0eTtcblxue1xuICAvLyBQcm92aWRlIGV4cGxpY2l0IGVycm9yIG1lc3NhZ2Ugd2hlbiBwcm9kdWN0aW9uK3Byb2ZpbGluZyBidW5kbGUgb2YgZS5nLlxuICAvLyByZWFjdC1kb20gaXMgdXNlZCB3aXRoIHByb2R1Y3Rpb24gKG5vbi1wcm9maWxpbmcpIGJ1bmRsZSBvZlxuICAvLyBzY2hlZHVsZXIvdHJhY2luZ1xuICBpZiAoISh0cmFjaW5nLl9faW50ZXJhY3Rpb25zUmVmICE9IG51bGwgJiYgdHJhY2luZy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50ICE9IG51bGwpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiSXQgaXMgbm90IHN1cHBvcnRlZCB0byBydW4gdGhlIHByb2ZpbGluZyB2ZXJzaW9uIG9mIGEgcmVuZGVyZXIgKGZvciBleGFtcGxlLCBgcmVhY3QtZG9tL3Byb2ZpbGluZ2ApIHdpdGhvdXQgYWxzbyByZXBsYWNpbmcgdGhlIGBzY2hlZHVsZXIvdHJhY2luZ2AgbW9kdWxlIHdpdGggYHNjaGVkdWxlci90cmFjaW5nLXByb2ZpbGluZ2AuIFlvdXIgYnVuZGxlciBtaWdodCBoYXZlIGEgc2V0dGluZyBmb3IgYWxpYXNpbmcgYm90aCBtb2R1bGVzLiBMZWFybiBtb3JlIGF0IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9wcm9maWxpbmdcIiApO1xuICAgIH1cbiAgfVxufVxuXG52YXIgZmFrZUNhbGxiYWNrTm9kZSA9IHt9OyAvLyBFeGNlcHQgZm9yIE5vUHJpb3JpdHksIHRoZXNlIGNvcnJlc3BvbmQgdG8gU2NoZWR1bGVyIHByaW9yaXRpZXMuIFdlIHVzZVxuLy8gYXNjZW5kaW5nIG51bWJlcnMgc28gd2UgY2FuIGNvbXBhcmUgdGhlbSBsaWtlIG51bWJlcnMuIFRoZXkgc3RhcnQgYXQgOTAgdG9cbi8vIGF2b2lkIGNsYXNoaW5nIHdpdGggU2NoZWR1bGVyJ3MgcHJpb3JpdGllcy5cblxudmFyIEltbWVkaWF0ZVByaW9yaXR5JDEgPSA5OTtcbnZhciBVc2VyQmxvY2tpbmdQcmlvcml0eSQyID0gOTg7XG52YXIgTm9ybWFsUHJpb3JpdHkkMSA9IDk3O1xudmFyIExvd1ByaW9yaXR5JDEgPSA5NjtcbnZhciBJZGxlUHJpb3JpdHkkMSA9IDk1OyAvLyBOb1ByaW9yaXR5IGlzIHRoZSBhYnNlbmNlIG9mIHByaW9yaXR5LiBBbHNvIFJlYWN0LW9ubHkuXG5cbnZhciBOb1ByaW9yaXR5JDEgPSA5MDtcbnZhciBzaG91bGRZaWVsZCA9IFNjaGVkdWxlcl9zaG91bGRZaWVsZDtcbnZhciByZXF1ZXN0UGFpbnQgPSAvLyBGYWxsIGJhY2sgZ3JhY2VmdWxseSBpZiB3ZSdyZSBydW5uaW5nIGFuIG9sZGVyIHZlcnNpb24gb2YgU2NoZWR1bGVyLlxuU2NoZWR1bGVyX3JlcXVlc3RQYWludCAhPT0gdW5kZWZpbmVkID8gU2NoZWR1bGVyX3JlcXVlc3RQYWludCA6IGZ1bmN0aW9uICgpIHt9O1xudmFyIHN5bmNRdWV1ZSA9IG51bGw7XG52YXIgaW1tZWRpYXRlUXVldWVDYWxsYmFja05vZGUgPSBudWxsO1xudmFyIGlzRmx1c2hpbmdTeW5jUXVldWUgPSBmYWxzZTtcbnZhciBpbml0aWFsVGltZU1zJDEgPSBTY2hlZHVsZXJfbm93JDEoKTsgLy8gSWYgdGhlIGluaXRpYWwgdGltZXN0YW1wIGlzIHJlYXNvbmFibHkgc21hbGwsIHVzZSBTY2hlZHVsZXIncyBgbm93YCBkaXJlY3RseS5cbi8vIFRoaXMgd2lsbCBiZSB0aGUgY2FzZSBmb3IgbW9kZXJuIGJyb3dzZXJzIHRoYXQgc3VwcG9ydCBgcGVyZm9ybWFuY2Uubm93YC4gSW5cbi8vIG9sZGVyIGJyb3dzZXJzLCBTY2hlZHVsZXIgZmFsbHMgYmFjayB0byBgRGF0ZS5ub3dgLCB3aGljaCByZXR1cm5zIGEgVW5peFxuLy8gdGltZXN0YW1wLiBJbiB0aGF0IGNhc2UsIHN1YnRyYWN0IHRoZSBtb2R1bGUgaW5pdGlhbGl6YXRpb24gdGltZSB0byBzaW11bGF0ZVxuLy8gdGhlIGJlaGF2aW9yIG9mIHBlcmZvcm1hbmNlLm5vdyBhbmQga2VlcCBvdXIgdGltZXMgc21hbGwgZW5vdWdoIHRvIGZpdFxuLy8gd2l0aGluIDMyIGJpdHMuXG4vLyBUT0RPOiBDb25zaWRlciBsaWZ0aW5nIHRoaXMgaW50byBTY2hlZHVsZXIuXG5cbnZhciBub3cgPSBpbml0aWFsVGltZU1zJDEgPCAxMDAwMCA/IFNjaGVkdWxlcl9ub3ckMSA6IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIFNjaGVkdWxlcl9ub3ckMSgpIC0gaW5pdGlhbFRpbWVNcyQxO1xufTtcbmZ1bmN0aW9uIGdldEN1cnJlbnRQcmlvcml0eUxldmVsKCkge1xuICBzd2l0Y2ggKFNjaGVkdWxlcl9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbCgpKSB7XG4gICAgY2FzZSBTY2hlZHVsZXJfSW1tZWRpYXRlUHJpb3JpdHk6XG4gICAgICByZXR1cm4gSW1tZWRpYXRlUHJpb3JpdHkkMTtcblxuICAgIGNhc2UgU2NoZWR1bGVyX1VzZXJCbG9ja2luZ1ByaW9yaXR5OlxuICAgICAgcmV0dXJuIFVzZXJCbG9ja2luZ1ByaW9yaXR5JDI7XG5cbiAgICBjYXNlIFNjaGVkdWxlcl9Ob3JtYWxQcmlvcml0eTpcbiAgICAgIHJldHVybiBOb3JtYWxQcmlvcml0eSQxO1xuXG4gICAgY2FzZSBTY2hlZHVsZXJfTG93UHJpb3JpdHk6XG4gICAgICByZXR1cm4gTG93UHJpb3JpdHkkMTtcblxuICAgIGNhc2UgU2NoZWR1bGVyX0lkbGVQcmlvcml0eTpcbiAgICAgIHJldHVybiBJZGxlUHJpb3JpdHkkMTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJVbmtub3duIHByaW9yaXR5IGxldmVsLlwiICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICB9XG59XG5cbmZ1bmN0aW9uIHJlYWN0UHJpb3JpdHlUb1NjaGVkdWxlclByaW9yaXR5KHJlYWN0UHJpb3JpdHlMZXZlbCkge1xuICBzd2l0Y2ggKHJlYWN0UHJpb3JpdHlMZXZlbCkge1xuICAgIGNhc2UgSW1tZWRpYXRlUHJpb3JpdHkkMTpcbiAgICAgIHJldHVybiBTY2hlZHVsZXJfSW1tZWRpYXRlUHJpb3JpdHk7XG5cbiAgICBjYXNlIFVzZXJCbG9ja2luZ1ByaW9yaXR5JDI6XG4gICAgICByZXR1cm4gU2NoZWR1bGVyX1VzZXJCbG9ja2luZ1ByaW9yaXR5O1xuXG4gICAgY2FzZSBOb3JtYWxQcmlvcml0eSQxOlxuICAgICAgcmV0dXJuIFNjaGVkdWxlcl9Ob3JtYWxQcmlvcml0eTtcblxuICAgIGNhc2UgTG93UHJpb3JpdHkkMTpcbiAgICAgIHJldHVybiBTY2hlZHVsZXJfTG93UHJpb3JpdHk7XG5cbiAgICBjYXNlIElkbGVQcmlvcml0eSQxOlxuICAgICAgcmV0dXJuIFNjaGVkdWxlcl9JZGxlUHJpb3JpdHk7XG5cbiAgICBkZWZhdWx0OlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiVW5rbm93biBwcmlvcml0eSBsZXZlbC5cIiApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgfVxufVxuXG5mdW5jdGlvbiBydW5XaXRoUHJpb3JpdHkkMShyZWFjdFByaW9yaXR5TGV2ZWwsIGZuKSB7XG4gIHZhciBwcmlvcml0eUxldmVsID0gcmVhY3RQcmlvcml0eVRvU2NoZWR1bGVyUHJpb3JpdHkocmVhY3RQcmlvcml0eUxldmVsKTtcbiAgcmV0dXJuIFNjaGVkdWxlcl9ydW5XaXRoUHJpb3JpdHkocHJpb3JpdHlMZXZlbCwgZm4pO1xufVxuZnVuY3Rpb24gc2NoZWR1bGVDYWxsYmFjayhyZWFjdFByaW9yaXR5TGV2ZWwsIGNhbGxiYWNrLCBvcHRpb25zKSB7XG4gIHZhciBwcmlvcml0eUxldmVsID0gcmVhY3RQcmlvcml0eVRvU2NoZWR1bGVyUHJpb3JpdHkocmVhY3RQcmlvcml0eUxldmVsKTtcbiAgcmV0dXJuIFNjaGVkdWxlcl9zY2hlZHVsZUNhbGxiYWNrKHByaW9yaXR5TGV2ZWwsIGNhbGxiYWNrLCBvcHRpb25zKTtcbn1cbmZ1bmN0aW9uIHNjaGVkdWxlU3luY0NhbGxiYWNrKGNhbGxiYWNrKSB7XG4gIC8vIFB1c2ggdGhpcyBjYWxsYmFjayBpbnRvIGFuIGludGVybmFsIHF1ZXVlLiBXZSdsbCBmbHVzaCB0aGVzZSBlaXRoZXIgaW5cbiAgLy8gdGhlIG5leHQgdGljaywgb3IgZWFybGllciBpZiBzb21ldGhpbmcgY2FsbHMgYGZsdXNoU3luY0NhbGxiYWNrUXVldWVgLlxuICBpZiAoc3luY1F1ZXVlID09PSBudWxsKSB7XG4gICAgc3luY1F1ZXVlID0gW2NhbGxiYWNrXTsgLy8gRmx1c2ggdGhlIHF1ZXVlIGluIHRoZSBuZXh0IHRpY2ssIGF0IHRoZSBlYXJsaWVzdC5cblxuICAgIGltbWVkaWF0ZVF1ZXVlQ2FsbGJhY2tOb2RlID0gU2NoZWR1bGVyX3NjaGVkdWxlQ2FsbGJhY2soU2NoZWR1bGVyX0ltbWVkaWF0ZVByaW9yaXR5LCBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlSW1wbCk7XG4gIH0gZWxzZSB7XG4gICAgLy8gUHVzaCBvbnRvIGV4aXN0aW5nIHF1ZXVlLiBEb24ndCBuZWVkIHRvIHNjaGVkdWxlIGEgY2FsbGJhY2sgYmVjYXVzZVxuICAgIC8vIHdlIGFscmVhZHkgc2NoZWR1bGVkIG9uZSB3aGVuIHdlIGNyZWF0ZWQgdGhlIHF1ZXVlLlxuICAgIHN5bmNRdWV1ZS5wdXNoKGNhbGxiYWNrKTtcbiAgfVxuXG4gIHJldHVybiBmYWtlQ2FsbGJhY2tOb2RlO1xufVxuZnVuY3Rpb24gY2FuY2VsQ2FsbGJhY2soY2FsbGJhY2tOb2RlKSB7XG4gIGlmIChjYWxsYmFja05vZGUgIT09IGZha2VDYWxsYmFja05vZGUpIHtcbiAgICBTY2hlZHVsZXJfY2FuY2VsQ2FsbGJhY2soY2FsbGJhY2tOb2RlKTtcbiAgfVxufVxuZnVuY3Rpb24gZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZSgpIHtcbiAgaWYgKGltbWVkaWF0ZVF1ZXVlQ2FsbGJhY2tOb2RlICE9PSBudWxsKSB7XG4gICAgdmFyIG5vZGUgPSBpbW1lZGlhdGVRdWV1ZUNhbGxiYWNrTm9kZTtcbiAgICBpbW1lZGlhdGVRdWV1ZUNhbGxiYWNrTm9kZSA9IG51bGw7XG4gICAgU2NoZWR1bGVyX2NhbmNlbENhbGxiYWNrKG5vZGUpO1xuICB9XG5cbiAgZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZUltcGwoKTtcbn1cblxuZnVuY3Rpb24gZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZUltcGwoKSB7XG4gIGlmICghaXNGbHVzaGluZ1N5bmNRdWV1ZSAmJiBzeW5jUXVldWUgIT09IG51bGwpIHtcbiAgICAvLyBQcmV2ZW50IHJlLWVudHJhbmN5LlxuICAgIGlzRmx1c2hpbmdTeW5jUXVldWUgPSB0cnVlO1xuICAgIHZhciBpID0gMDtcblxuICAgIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBfaXNTeW5jMiA9IHRydWU7XG4gICAgICAgIHZhciBfcXVldWUgPSBzeW5jUXVldWU7XG4gICAgICAgIHJ1bldpdGhQcmlvcml0eSQxKEltbWVkaWF0ZVByaW9yaXR5JDEsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBmb3IgKDsgaSA8IF9xdWV1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gX3F1ZXVlW2ldO1xuXG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2soX2lzU3luYzIpO1xuICAgICAgICAgICAgfSB3aGlsZSAoY2FsbGJhY2sgIT09IG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHN5bmNRdWV1ZSA9IG51bGw7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBJZiBzb21ldGhpbmcgdGhyb3dzLCBsZWF2ZSB0aGUgcmVtYWluaW5nIGNhbGxiYWNrcyBvbiB0aGUgcXVldWUuXG4gICAgICAgIGlmIChzeW5jUXVldWUgIT09IG51bGwpIHtcbiAgICAgICAgICBzeW5jUXVldWUgPSBzeW5jUXVldWUuc2xpY2UoaSArIDEpO1xuICAgICAgICB9IC8vIFJlc3VtZSBmbHVzaGluZyBpbiB0aGUgbmV4dCB0aWNrXG5cblxuICAgICAgICBTY2hlZHVsZXJfc2NoZWR1bGVDYWxsYmFjayhTY2hlZHVsZXJfSW1tZWRpYXRlUHJpb3JpdHksIGZsdXNoU3luY0NhbGxiYWNrUXVldWUpO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlzRmx1c2hpbmdTeW5jUXVldWUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8gVE9ETzogdGhpcyBpcyBzcGVjaWFsIGJlY2F1c2UgaXQgZ2V0cyBpbXBvcnRlZCBkdXJpbmcgYnVpbGQuXG52YXIgUmVhY3RWZXJzaW9uID0gJzE3LjAuMic7XG5cbnZhciBOb01vZGUgPSAwO1xudmFyIFN0cmljdE1vZGUgPSAxOyAvLyBUT0RPOiBSZW1vdmUgQmxvY2tpbmdNb2RlIGFuZCBDb25jdXJyZW50TW9kZSBieSByZWFkaW5nIGZyb20gdGhlIHJvb3Rcbi8vIHRhZyBpbnN0ZWFkXG5cbnZhciBCbG9ja2luZ01vZGUgPSAyO1xudmFyIENvbmN1cnJlbnRNb2RlID0gNDtcbnZhciBQcm9maWxlTW9kZSA9IDg7XG52YXIgRGVidWdUcmFjaW5nTW9kZSA9IDE2O1xuXG52YXIgUmVhY3RDdXJyZW50QmF0Y2hDb25maWcgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnRCYXRjaENvbmZpZztcbnZhciBOb1RyYW5zaXRpb24gPSAwO1xuZnVuY3Rpb24gcmVxdWVzdEN1cnJlbnRUcmFuc2l0aW9uKCkge1xuICByZXR1cm4gUmVhY3RDdXJyZW50QmF0Y2hDb25maWcudHJhbnNpdGlvbjtcbn1cblxudmFyIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzID0ge1xuICByZWNvcmRVbnNhZmVMaWZlY3ljbGVXYXJuaW5nczogZnVuY3Rpb24gKGZpYmVyLCBpbnN0YW5jZSkge30sXG4gIGZsdXNoUGVuZGluZ1Vuc2FmZUxpZmVjeWNsZVdhcm5pbmdzOiBmdW5jdGlvbiAoKSB7fSxcbiAgcmVjb3JkTGVnYWN5Q29udGV4dFdhcm5pbmc6IGZ1bmN0aW9uIChmaWJlciwgaW5zdGFuY2UpIHt9LFxuICBmbHVzaExlZ2FjeUNvbnRleHRXYXJuaW5nOiBmdW5jdGlvbiAoKSB7fSxcbiAgZGlzY2FyZFBlbmRpbmdXYXJuaW5nczogZnVuY3Rpb24gKCkge31cbn07XG5cbntcbiAgdmFyIGZpbmRTdHJpY3RSb290ID0gZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgdmFyIG1heWJlU3RyaWN0Um9vdCA9IG51bGw7XG4gICAgdmFyIG5vZGUgPSBmaWJlcjtcblxuICAgIHdoaWxlIChub2RlICE9PSBudWxsKSB7XG4gICAgICBpZiAobm9kZS5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgICBtYXliZVN0cmljdFJvb3QgPSBub2RlO1xuICAgICAgfVxuXG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIG1heWJlU3RyaWN0Um9vdDtcbiAgfTtcblxuICB2YXIgc2V0VG9Tb3J0ZWRTdHJpbmcgPSBmdW5jdGlvbiAoc2V0KSB7XG4gICAgdmFyIGFycmF5ID0gW107XG4gICAgc2V0LmZvckVhY2goZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBhcnJheS5wdXNoKHZhbHVlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gYXJyYXkuc29ydCgpLmpvaW4oJywgJyk7XG4gIH07XG5cbiAgdmFyIHBlbmRpbmdDb21wb25lbnRXaWxsTW91bnRXYXJuaW5ncyA9IFtdO1xuICB2YXIgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsTW91bnRXYXJuaW5ncyA9IFtdO1xuICB2YXIgcGVuZGluZ0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncyA9IFtdO1xuICB2YXIgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MgPSBbXTtcbiAgdmFyIHBlbmRpbmdDb21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MgPSBbXTtcbiAgdmFyIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzID0gW107IC8vIFRyYWNrcyBjb21wb25lbnRzIHdlIGhhdmUgYWxyZWFkeSB3YXJuZWQgYWJvdXQuXG5cbiAgdmFyIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMgPSBuZXcgU2V0KCk7XG5cbiAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MucmVjb3JkVW5zYWZlTGlmZWN5Y2xlV2FybmluZ3MgPSBmdW5jdGlvbiAoZmliZXIsIGluc3RhbmNlKSB7XG4gICAgLy8gRGVkdXAgc3RyYXRlZ3k6IFdhcm4gb25jZSBwZXIgY29tcG9uZW50LlxuICAgIGlmIChkaWRXYXJuQWJvdXRVbnNhZmVMaWZlY3ljbGVzLmhhcyhmaWJlci50eXBlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nICYmIC8vIERvbid0IHdhcm4gYWJvdXQgcmVhY3QtbGlmZWN5Y2xlcy1jb21wYXQgcG9seWZpbGxlZCBjb21wb25lbnRzLlxuICAgIGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudC5fX3N1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5nICE9PSB0cnVlKSB7XG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MucHVzaChmaWJlcik7XG4gICAgfVxuXG4gICAgaWYgKGZpYmVyLm1vZGUgJiBTdHJpY3RNb2RlICYmIHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzLnB1c2goZmliZXIpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJyAmJiBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzLl9fc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmcgIT09IHRydWUpIHtcbiAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MucHVzaChmaWJlcik7XG4gICAgfVxuXG4gICAgaWYgKGZpYmVyLm1vZGUgJiBTdHJpY3RNb2RlICYmIHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MucHVzaChmaWJlcik7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsVXBkYXRlID09PSAnZnVuY3Rpb24nICYmIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVcGRhdGUuX19zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZyAhPT0gdHJ1ZSkge1xuICAgICAgcGVuZGluZ0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncy5wdXNoKGZpYmVyKTtcbiAgICB9XG5cbiAgICBpZiAoZmliZXIubW9kZSAmIFN0cmljdE1vZGUgJiYgdHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncy5wdXNoKGZpYmVyKTtcbiAgICB9XG4gIH07XG5cbiAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MuZmx1c2hQZW5kaW5nVW5zYWZlTGlmZWN5Y2xlV2FybmluZ3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gV2UgZG8gYW4gaW5pdGlhbCBwYXNzIHRvIGdhdGhlciBjb21wb25lbnQgbmFtZXNcbiAgICB2YXIgY29tcG9uZW50V2lsbE1vdW50VW5pcXVlTmFtZXMgPSBuZXcgU2V0KCk7XG5cbiAgICBpZiAocGVuZGluZ0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsTW91bnRXYXJuaW5ncy5mb3JFYWNoKGZ1bmN0aW9uIChmaWJlcikge1xuICAgICAgICBjb21wb25lbnRXaWxsTW91bnRVbmlxdWVOYW1lcy5hZGQoZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnQ29tcG9uZW50Jyk7XG4gICAgICAgIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMuYWRkKGZpYmVyLnR5cGUpO1xuICAgICAgfSk7XG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MgPSBbXTtcbiAgICB9XG5cbiAgICB2YXIgVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudFVuaXF1ZU5hbWVzID0gbmV3IFNldCgpO1xuXG4gICAgaWYgKHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsTW91bnRXYXJuaW5ncy5mb3JFYWNoKGZ1bmN0aW9uIChmaWJlcikge1xuICAgICAgICBVTlNBRkVfY29tcG9uZW50V2lsbE1vdW50VW5pcXVlTmFtZXMuYWRkKGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkgfHwgJ0NvbXBvbmVudCcpO1xuICAgICAgICBkaWRXYXJuQWJvdXRVbnNhZmVMaWZlY3ljbGVzLmFkZChmaWJlci50eXBlKTtcbiAgICAgIH0pO1xuICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsTW91bnRXYXJuaW5ncyA9IFtdO1xuICAgIH1cblxuICAgIHZhciBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzVW5pcXVlTmFtZXMgPSBuZXcgU2V0KCk7XG5cbiAgICBpZiAocGVuZGluZ0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncy5sZW5ndGggPiAwKSB7XG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzLmZvckVhY2goZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgICAgIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNVbmlxdWVOYW1lcy5hZGQoZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnQ29tcG9uZW50Jyk7XG4gICAgICAgIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMuYWRkKGZpYmVyLnR5cGUpO1xuICAgICAgfSk7XG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzID0gW107XG4gICAgfVxuXG4gICAgdmFyIFVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzVW5pcXVlTmFtZXMgPSBuZXcgU2V0KCk7XG5cbiAgICBpZiAocGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MuZm9yRWFjaChmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgICAgVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNVbmlxdWVOYW1lcy5hZGQoZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnQ29tcG9uZW50Jyk7XG4gICAgICAgIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMuYWRkKGZpYmVyLnR5cGUpO1xuICAgICAgfSk7XG4gICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncyA9IFtdO1xuICAgIH1cblxuICAgIHZhciBjb21wb25lbnRXaWxsVXBkYXRlVW5pcXVlTmFtZXMgPSBuZXcgU2V0KCk7XG5cbiAgICBpZiAocGVuZGluZ0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncy5sZW5ndGggPiAwKSB7XG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzLmZvckVhY2goZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgICAgIGNvbXBvbmVudFdpbGxVcGRhdGVVbmlxdWVOYW1lcy5hZGQoZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnQ29tcG9uZW50Jyk7XG4gICAgICAgIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMuYWRkKGZpYmVyLnR5cGUpO1xuICAgICAgfSk7XG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzID0gW107XG4gICAgfVxuXG4gICAgdmFyIFVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlVW5pcXVlTmFtZXMgPSBuZXcgU2V0KCk7XG5cbiAgICBpZiAocGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MuZm9yRWFjaChmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgICAgVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGVVbmlxdWVOYW1lcy5hZGQoZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnQ29tcG9uZW50Jyk7XG4gICAgICAgIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMuYWRkKGZpYmVyLnR5cGUpO1xuICAgICAgfSk7XG4gICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncyA9IFtdO1xuICAgIH0gLy8gRmluYWxseSwgd2UgZmx1c2ggYWxsIHRoZSB3YXJuaW5nc1xuICAgIC8vIFVOU0FGRV8gb25lcyBiZWZvcmUgdGhlIGRlcHJlY2F0ZWQgb25lcywgc2luY2UgdGhleSdsbCBiZSAnbG91ZGVyJ1xuXG5cbiAgICBpZiAoVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudFVuaXF1ZU5hbWVzLnNpemUgPiAwKSB7XG4gICAgICB2YXIgc29ydGVkTmFtZXMgPSBzZXRUb1NvcnRlZFN0cmluZyhVTlNBRkVfY29tcG9uZW50V2lsbE1vdW50VW5pcXVlTmFtZXMpO1xuXG4gICAgICBlcnJvcignVXNpbmcgVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCBpbiBzdHJpY3QgbW9kZSBpcyBub3QgcmVjb21tZW5kZWQgYW5kIG1heSBpbmRpY2F0ZSBidWdzIGluIHlvdXIgY29kZS4gJyArICdTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3Vuc2FmZS1jb21wb25lbnQtbGlmZWN5Y2xlcyBmb3IgZGV0YWlscy5cXG5cXG4nICsgJyogTW92ZSBjb2RlIHdpdGggc2lkZSBlZmZlY3RzIHRvIGNvbXBvbmVudERpZE1vdW50LCBhbmQgc2V0IGluaXRpYWwgc3RhdGUgaW4gdGhlIGNvbnN0cnVjdG9yLlxcbicgKyAnXFxuUGxlYXNlIHVwZGF0ZSB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6ICVzJywgc29ydGVkTmFtZXMpO1xuICAgIH1cblxuICAgIGlmIChVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1VuaXF1ZU5hbWVzLnNpemUgPiAwKSB7XG4gICAgICB2YXIgX3NvcnRlZE5hbWVzID0gc2V0VG9Tb3J0ZWRTdHJpbmcoVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNVbmlxdWVOYW1lcyk7XG5cbiAgICAgIGVycm9yKCdVc2luZyBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyBpbiBzdHJpY3QgbW9kZSBpcyBub3QgcmVjb21tZW5kZWQgJyArICdhbmQgbWF5IGluZGljYXRlIGJ1Z3MgaW4geW91ciBjb2RlLiAnICsgJ1NlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvdW5zYWZlLWNvbXBvbmVudC1saWZlY3ljbGVzIGZvciBkZXRhaWxzLlxcblxcbicgKyAnKiBNb3ZlIGRhdGEgZmV0Y2hpbmcgY29kZSBvciBzaWRlIGVmZmVjdHMgdG8gY29tcG9uZW50RGlkVXBkYXRlLlxcbicgKyBcIiogSWYgeW91J3JlIHVwZGF0aW5nIHN0YXRlIHdoZW5ldmVyIHByb3BzIGNoYW5nZSwgXCIgKyAncmVmYWN0b3IgeW91ciBjb2RlIHRvIHVzZSBtZW1vaXphdGlvbiB0ZWNobmlxdWVzIG9yIG1vdmUgaXQgdG8gJyArICdzdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLiBMZWFybiBtb3JlIGF0OiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvZGVyaXZlZC1zdGF0ZVxcbicgKyAnXFxuUGxlYXNlIHVwZGF0ZSB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6ICVzJywgX3NvcnRlZE5hbWVzKTtcbiAgICB9XG5cbiAgICBpZiAoVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGVVbmlxdWVOYW1lcy5zaXplID4gMCkge1xuICAgICAgdmFyIF9zb3J0ZWROYW1lczIgPSBzZXRUb1NvcnRlZFN0cmluZyhVTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZVVuaXF1ZU5hbWVzKTtcblxuICAgICAgZXJyb3IoJ1VzaW5nIFVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlIGluIHN0cmljdCBtb2RlIGlzIG5vdCByZWNvbW1lbmRlZCAnICsgJ2FuZCBtYXkgaW5kaWNhdGUgYnVncyBpbiB5b3VyIGNvZGUuICcgKyAnU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay91bnNhZmUtY29tcG9uZW50LWxpZmVjeWNsZXMgZm9yIGRldGFpbHMuXFxuXFxuJyArICcqIE1vdmUgZGF0YSBmZXRjaGluZyBjb2RlIG9yIHNpZGUgZWZmZWN0cyB0byBjb21wb25lbnREaWRVcGRhdGUuXFxuJyArICdcXG5QbGVhc2UgdXBkYXRlIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czogJXMnLCBfc29ydGVkTmFtZXMyKTtcbiAgICB9XG5cbiAgICBpZiAoY29tcG9uZW50V2lsbE1vdW50VW5pcXVlTmFtZXMuc2l6ZSA+IDApIHtcbiAgICAgIHZhciBfc29ydGVkTmFtZXMzID0gc2V0VG9Tb3J0ZWRTdHJpbmcoY29tcG9uZW50V2lsbE1vdW50VW5pcXVlTmFtZXMpO1xuXG4gICAgICB3YXJuKCdjb21wb25lbnRXaWxsTW91bnQgaGFzIGJlZW4gcmVuYW1lZCwgYW5kIGlzIG5vdCByZWNvbW1lbmRlZCBmb3IgdXNlLiAnICsgJ1NlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvdW5zYWZlLWNvbXBvbmVudC1saWZlY3ljbGVzIGZvciBkZXRhaWxzLlxcblxcbicgKyAnKiBNb3ZlIGNvZGUgd2l0aCBzaWRlIGVmZmVjdHMgdG8gY29tcG9uZW50RGlkTW91bnQsIGFuZCBzZXQgaW5pdGlhbCBzdGF0ZSBpbiB0aGUgY29uc3RydWN0b3IuXFxuJyArICcqIFJlbmFtZSBjb21wb25lbnRXaWxsTW91bnQgdG8gVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCB0byBzdXBwcmVzcyAnICsgJ3RoaXMgd2FybmluZyBpbiBub24tc3RyaWN0IG1vZGUuIEluIFJlYWN0IDE4LngsIG9ubHkgdGhlIFVOU0FGRV8gbmFtZSB3aWxsIHdvcmsuICcgKyAnVG8gcmVuYW1lIGFsbCBkZXByZWNhdGVkIGxpZmVjeWNsZXMgdG8gdGhlaXIgbmV3IG5hbWVzLCB5b3UgY2FuIHJ1biAnICsgJ2BucHggcmVhY3QtY29kZW1vZCByZW5hbWUtdW5zYWZlLWxpZmVjeWNsZXNgIGluIHlvdXIgcHJvamVjdCBzb3VyY2UgZm9sZGVyLlxcbicgKyAnXFxuUGxlYXNlIHVwZGF0ZSB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6ICVzJywgX3NvcnRlZE5hbWVzMyk7XG4gICAgfVxuXG4gICAgaWYgKGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNVbmlxdWVOYW1lcy5zaXplID4gMCkge1xuICAgICAgdmFyIF9zb3J0ZWROYW1lczQgPSBzZXRUb1NvcnRlZFN0cmluZyhjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzVW5pcXVlTmFtZXMpO1xuXG4gICAgICB3YXJuKCdjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIGhhcyBiZWVuIHJlbmFtZWQsIGFuZCBpcyBub3QgcmVjb21tZW5kZWQgZm9yIHVzZS4gJyArICdTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3Vuc2FmZS1jb21wb25lbnQtbGlmZWN5Y2xlcyBmb3IgZGV0YWlscy5cXG5cXG4nICsgJyogTW92ZSBkYXRhIGZldGNoaW5nIGNvZGUgb3Igc2lkZSBlZmZlY3RzIHRvIGNvbXBvbmVudERpZFVwZGF0ZS5cXG4nICsgXCIqIElmIHlvdSdyZSB1cGRhdGluZyBzdGF0ZSB3aGVuZXZlciBwcm9wcyBjaGFuZ2UsIHJlZmFjdG9yIHlvdXIgXCIgKyAnY29kZSB0byB1c2UgbWVtb2l6YXRpb24gdGVjaG5pcXVlcyBvciBtb3ZlIGl0IHRvICcgKyAnc3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcy4gTGVhcm4gbW9yZSBhdDogaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2Rlcml2ZWQtc3RhdGVcXG4nICsgJyogUmVuYW1lIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgdG8gVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgdG8gc3VwcHJlc3MgJyArICd0aGlzIHdhcm5pbmcgaW4gbm9uLXN0cmljdCBtb2RlLiBJbiBSZWFjdCAxOC54LCBvbmx5IHRoZSBVTlNBRkVfIG5hbWUgd2lsbCB3b3JrLiAnICsgJ1RvIHJlbmFtZSBhbGwgZGVwcmVjYXRlZCBsaWZlY3ljbGVzIHRvIHRoZWlyIG5ldyBuYW1lcywgeW91IGNhbiBydW4gJyArICdgbnB4IHJlYWN0LWNvZGVtb2QgcmVuYW1lLXVuc2FmZS1saWZlY3ljbGVzYCBpbiB5b3VyIHByb2plY3Qgc291cmNlIGZvbGRlci5cXG4nICsgJ1xcblBsZWFzZSB1cGRhdGUgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOiAlcycsIF9zb3J0ZWROYW1lczQpO1xuICAgIH1cblxuICAgIGlmIChjb21wb25lbnRXaWxsVXBkYXRlVW5pcXVlTmFtZXMuc2l6ZSA+IDApIHtcbiAgICAgIHZhciBfc29ydGVkTmFtZXM1ID0gc2V0VG9Tb3J0ZWRTdHJpbmcoY29tcG9uZW50V2lsbFVwZGF0ZVVuaXF1ZU5hbWVzKTtcblxuICAgICAgd2FybignY29tcG9uZW50V2lsbFVwZGF0ZSBoYXMgYmVlbiByZW5hbWVkLCBhbmQgaXMgbm90IHJlY29tbWVuZGVkIGZvciB1c2UuICcgKyAnU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay91bnNhZmUtY29tcG9uZW50LWxpZmVjeWNsZXMgZm9yIGRldGFpbHMuXFxuXFxuJyArICcqIE1vdmUgZGF0YSBmZXRjaGluZyBjb2RlIG9yIHNpZGUgZWZmZWN0cyB0byBjb21wb25lbnREaWRVcGRhdGUuXFxuJyArICcqIFJlbmFtZSBjb21wb25lbnRXaWxsVXBkYXRlIHRvIFVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlIHRvIHN1cHByZXNzICcgKyAndGhpcyB3YXJuaW5nIGluIG5vbi1zdHJpY3QgbW9kZS4gSW4gUmVhY3QgMTgueCwgb25seSB0aGUgVU5TQUZFXyBuYW1lIHdpbGwgd29yay4gJyArICdUbyByZW5hbWUgYWxsIGRlcHJlY2F0ZWQgbGlmZWN5Y2xlcyB0byB0aGVpciBuZXcgbmFtZXMsIHlvdSBjYW4gcnVuICcgKyAnYG5weCByZWFjdC1jb2RlbW9kIHJlbmFtZS11bnNhZmUtbGlmZWN5Y2xlc2AgaW4geW91ciBwcm9qZWN0IHNvdXJjZSBmb2xkZXIuXFxuJyArICdcXG5QbGVhc2UgdXBkYXRlIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czogJXMnLCBfc29ydGVkTmFtZXM1KTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIHBlbmRpbmdMZWdhY3lDb250ZXh0V2FybmluZyA9IG5ldyBNYXAoKTsgLy8gVHJhY2tzIGNvbXBvbmVudHMgd2UgaGF2ZSBhbHJlYWR5IHdhcm5lZCBhYm91dC5cblxuICB2YXIgZGlkV2FybkFib3V0TGVnYWN5Q29udGV4dCA9IG5ldyBTZXQoKTtcblxuICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5yZWNvcmRMZWdhY3lDb250ZXh0V2FybmluZyA9IGZ1bmN0aW9uIChmaWJlciwgaW5zdGFuY2UpIHtcbiAgICB2YXIgc3RyaWN0Um9vdCA9IGZpbmRTdHJpY3RSb290KGZpYmVyKTtcblxuICAgIGlmIChzdHJpY3RSb290ID09PSBudWxsKSB7XG4gICAgICBlcnJvcignRXhwZWN0ZWQgdG8gZmluZCBhIFN0cmljdE1vZGUgY29tcG9uZW50IGluIGEgc3RyaWN0IG1vZGUgdHJlZS4gJyArICdUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuXG4gICAgICByZXR1cm47XG4gICAgfSAvLyBEZWR1cCBzdHJhdGVneTogV2FybiBvbmNlIHBlciBjb21wb25lbnQuXG5cblxuICAgIGlmIChkaWRXYXJuQWJvdXRMZWdhY3lDb250ZXh0LmhhcyhmaWJlci50eXBlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB3YXJuaW5nc0ZvclJvb3QgPSBwZW5kaW5nTGVnYWN5Q29udGV4dFdhcm5pbmcuZ2V0KHN0cmljdFJvb3QpO1xuXG4gICAgaWYgKGZpYmVyLnR5cGUuY29udGV4dFR5cGVzICE9IG51bGwgfHwgZmliZXIudHlwZS5jaGlsZENvbnRleHRUeXBlcyAhPSBudWxsIHx8IGluc3RhbmNlICE9PSBudWxsICYmIHR5cGVvZiBpbnN0YW5jZS5nZXRDaGlsZENvbnRleHQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGlmICh3YXJuaW5nc0ZvclJvb3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB3YXJuaW5nc0ZvclJvb3QgPSBbXTtcbiAgICAgICAgcGVuZGluZ0xlZ2FjeUNvbnRleHRXYXJuaW5nLnNldChzdHJpY3RSb290LCB3YXJuaW5nc0ZvclJvb3QpO1xuICAgICAgfVxuXG4gICAgICB3YXJuaW5nc0ZvclJvb3QucHVzaChmaWJlcik7XG4gICAgfVxuICB9O1xuXG4gIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLmZsdXNoTGVnYWN5Q29udGV4dFdhcm5pbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgcGVuZGluZ0xlZ2FjeUNvbnRleHRXYXJuaW5nLmZvckVhY2goZnVuY3Rpb24gKGZpYmVyQXJyYXksIHN0cmljdFJvb3QpIHtcbiAgICAgIGlmIChmaWJlckFycmF5Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBmaXJzdEZpYmVyID0gZmliZXJBcnJheVswXTtcbiAgICAgIHZhciB1bmlxdWVOYW1lcyA9IG5ldyBTZXQoKTtcbiAgICAgIGZpYmVyQXJyYXkuZm9yRWFjaChmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgICAgdW5pcXVlTmFtZXMuYWRkKGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkgfHwgJ0NvbXBvbmVudCcpO1xuICAgICAgICBkaWRXYXJuQWJvdXRMZWdhY3lDb250ZXh0LmFkZChmaWJlci50eXBlKTtcbiAgICAgIH0pO1xuICAgICAgdmFyIHNvcnRlZE5hbWVzID0gc2V0VG9Tb3J0ZWRTdHJpbmcodW5pcXVlTmFtZXMpO1xuXG4gICAgICB0cnkge1xuICAgICAgICBzZXRDdXJyZW50RmliZXIoZmlyc3RGaWJlcik7XG5cbiAgICAgICAgZXJyb3IoJ0xlZ2FjeSBjb250ZXh0IEFQSSBoYXMgYmVlbiBkZXRlY3RlZCB3aXRoaW4gYSBzdHJpY3QtbW9kZSB0cmVlLicgKyAnXFxuXFxuVGhlIG9sZCBBUEkgd2lsbCBiZSBzdXBwb3J0ZWQgaW4gYWxsIDE2LnggcmVsZWFzZXMsIGJ1dCBhcHBsaWNhdGlvbnMgJyArICd1c2luZyBpdCBzaG91bGQgbWlncmF0ZSB0byB0aGUgbmV3IHZlcnNpb24uJyArICdcXG5cXG5QbGVhc2UgdXBkYXRlIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czogJXMnICsgJ1xcblxcbkxlYXJuIG1vcmUgYWJvdXQgdGhpcyB3YXJuaW5nIGhlcmU6IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9sZWdhY3ktY29udGV4dCcsIHNvcnRlZE5hbWVzKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MuZGlzY2FyZFBlbmRpbmdXYXJuaW5ncyA9IGZ1bmN0aW9uICgpIHtcbiAgICBwZW5kaW5nQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MgPSBbXTtcbiAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzID0gW107XG4gICAgcGVuZGluZ0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncyA9IFtdO1xuICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzID0gW107XG4gICAgcGVuZGluZ0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncyA9IFtdO1xuICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzID0gW107XG4gICAgcGVuZGluZ0xlZ2FjeUNvbnRleHRXYXJuaW5nID0gbmV3IE1hcCgpO1xuICB9O1xufVxuXG5mdW5jdGlvbiByZXNvbHZlRGVmYXVsdFByb3BzKENvbXBvbmVudCwgYmFzZVByb3BzKSB7XG4gIGlmIChDb21wb25lbnQgJiYgQ29tcG9uZW50LmRlZmF1bHRQcm9wcykge1xuICAgIC8vIFJlc29sdmUgZGVmYXVsdCBwcm9wcy4gVGFrZW4gZnJvbSBSZWFjdEVsZW1lbnRcbiAgICB2YXIgcHJvcHMgPSBfYXNzaWduKHt9LCBiYXNlUHJvcHMpO1xuXG4gICAgdmFyIGRlZmF1bHRQcm9wcyA9IENvbXBvbmVudC5kZWZhdWx0UHJvcHM7XG5cbiAgICBmb3IgKHZhciBwcm9wTmFtZSBpbiBkZWZhdWx0UHJvcHMpIHtcbiAgICAgIGlmIChwcm9wc1twcm9wTmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBkZWZhdWx0UHJvcHNbcHJvcE5hbWVdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwcm9wcztcbiAgfVxuXG4gIHJldHVybiBiYXNlUHJvcHM7XG59XG5cbi8vIE1heCAzMSBiaXQgaW50ZWdlci4gVGhlIG1heCBpbnRlZ2VyIHNpemUgaW4gVjggZm9yIDMyLWJpdCBzeXN0ZW1zLlxuLy8gTWF0aC5wb3coMiwgMzApIC0gMVxuLy8gMGIxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTFcbnZhciBNQVhfU0lHTkVEXzMxX0JJVF9JTlQgPSAxMDczNzQxODIzO1xuXG52YXIgdmFsdWVDdXJzb3IgPSBjcmVhdGVDdXJzb3IobnVsbCk7XG52YXIgcmVuZGVyZXJTaWdpbDtcblxue1xuICAvLyBVc2UgdGhpcyB0byBkZXRlY3QgbXVsdGlwbGUgcmVuZGVyZXJzIHVzaW5nIHRoZSBzYW1lIGNvbnRleHRcbiAgcmVuZGVyZXJTaWdpbCA9IHt9O1xufVxuXG52YXIgY3VycmVudGx5UmVuZGVyaW5nRmliZXIgPSBudWxsO1xudmFyIGxhc3RDb250ZXh0RGVwZW5kZW5jeSA9IG51bGw7XG52YXIgbGFzdENvbnRleHRXaXRoQWxsQml0c09ic2VydmVkID0gbnVsbDtcbnZhciBpc0Rpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWID0gZmFsc2U7XG5mdW5jdGlvbiByZXNldENvbnRleHREZXBlbmRlbmNpZXMoKSB7XG4gIC8vIFRoaXMgaXMgY2FsbGVkIHJpZ2h0IGJlZm9yZSBSZWFjdCB5aWVsZHMgZXhlY3V0aW9uLCB0byBlbnN1cmUgYHJlYWRDb250ZXh0YFxuICAvLyBjYW5ub3QgYmUgY2FsbGVkIG91dHNpZGUgdGhlIHJlbmRlciBwaGFzZS5cbiAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIgPSBudWxsO1xuICBsYXN0Q29udGV4dERlcGVuZGVuY3kgPSBudWxsO1xuICBsYXN0Q29udGV4dFdpdGhBbGxCaXRzT2JzZXJ2ZWQgPSBudWxsO1xuXG4gIHtcbiAgICBpc0Rpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWID0gZmFsc2U7XG4gIH1cbn1cbmZ1bmN0aW9uIGVudGVyRGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYoKSB7XG4gIHtcbiAgICBpc0Rpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWID0gdHJ1ZTtcbiAgfVxufVxuZnVuY3Rpb24gZXhpdERpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWKCkge1xuICB7XG4gICAgaXNEaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFViA9IGZhbHNlO1xuICB9XG59XG5mdW5jdGlvbiBwdXNoUHJvdmlkZXIocHJvdmlkZXJGaWJlciwgbmV4dFZhbHVlKSB7XG4gIHZhciBjb250ZXh0ID0gcHJvdmlkZXJGaWJlci50eXBlLl9jb250ZXh0O1xuXG4gIHtcbiAgICBwdXNoKHZhbHVlQ3Vyc29yLCBjb250ZXh0Ll9jdXJyZW50VmFsdWUsIHByb3ZpZGVyRmliZXIpO1xuICAgIGNvbnRleHQuX2N1cnJlbnRWYWx1ZSA9IG5leHRWYWx1ZTtcblxuICAgIHtcbiAgICAgIGlmIChjb250ZXh0Ll9jdXJyZW50UmVuZGVyZXIgIT09IHVuZGVmaW5lZCAmJiBjb250ZXh0Ll9jdXJyZW50UmVuZGVyZXIgIT09IG51bGwgJiYgY29udGV4dC5fY3VycmVudFJlbmRlcmVyICE9PSByZW5kZXJlclNpZ2lsKSB7XG4gICAgICAgIGVycm9yKCdEZXRlY3RlZCBtdWx0aXBsZSByZW5kZXJlcnMgY29uY3VycmVudGx5IHJlbmRlcmluZyB0aGUgJyArICdzYW1lIGNvbnRleHQgcHJvdmlkZXIuIFRoaXMgaXMgY3VycmVudGx5IHVuc3VwcG9ydGVkLicpO1xuICAgICAgfVxuXG4gICAgICBjb250ZXh0Ll9jdXJyZW50UmVuZGVyZXIgPSByZW5kZXJlclNpZ2lsO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gcG9wUHJvdmlkZXIocHJvdmlkZXJGaWJlcikge1xuICB2YXIgY3VycmVudFZhbHVlID0gdmFsdWVDdXJzb3IuY3VycmVudDtcbiAgcG9wKHZhbHVlQ3Vyc29yLCBwcm92aWRlckZpYmVyKTtcbiAgdmFyIGNvbnRleHQgPSBwcm92aWRlckZpYmVyLnR5cGUuX2NvbnRleHQ7XG5cbiAge1xuICAgIGNvbnRleHQuX2N1cnJlbnRWYWx1ZSA9IGN1cnJlbnRWYWx1ZTtcbiAgfVxufVxuZnVuY3Rpb24gY2FsY3VsYXRlQ2hhbmdlZEJpdHMoY29udGV4dCwgbmV3VmFsdWUsIG9sZFZhbHVlKSB7XG4gIGlmIChvYmplY3RJcyhvbGRWYWx1ZSwgbmV3VmFsdWUpKSB7XG4gICAgLy8gTm8gY2hhbmdlXG4gICAgcmV0dXJuIDA7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGNoYW5nZWRCaXRzID0gdHlwZW9mIGNvbnRleHQuX2NhbGN1bGF0ZUNoYW5nZWRCaXRzID09PSAnZnVuY3Rpb24nID8gY29udGV4dC5fY2FsY3VsYXRlQ2hhbmdlZEJpdHMob2xkVmFsdWUsIG5ld1ZhbHVlKSA6IE1BWF9TSUdORURfMzFfQklUX0lOVDtcblxuICAgIHtcbiAgICAgIGlmICgoY2hhbmdlZEJpdHMgJiBNQVhfU0lHTkVEXzMxX0JJVF9JTlQpICE9PSBjaGFuZ2VkQml0cykge1xuICAgICAgICBlcnJvcignY2FsY3VsYXRlQ2hhbmdlZEJpdHM6IEV4cGVjdGVkIHRoZSByZXR1cm4gdmFsdWUgdG8gYmUgYSAnICsgJzMxLWJpdCBpbnRlZ2VyLiBJbnN0ZWFkIHJlY2VpdmVkOiAlcycsIGNoYW5nZWRCaXRzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY2hhbmdlZEJpdHMgfCAwO1xuICB9XG59XG5mdW5jdGlvbiBzY2hlZHVsZVdvcmtPblBhcmVudFBhdGgocGFyZW50LCByZW5kZXJMYW5lcykge1xuICAvLyBVcGRhdGUgdGhlIGNoaWxkIGxhbmVzIG9mIGFsbCB0aGUgYW5jZXN0b3JzLCBpbmNsdWRpbmcgdGhlIGFsdGVybmF0ZXMuXG4gIHZhciBub2RlID0gcGFyZW50O1xuXG4gIHdoaWxlIChub2RlICE9PSBudWxsKSB7XG4gICAgdmFyIGFsdGVybmF0ZSA9IG5vZGUuYWx0ZXJuYXRlO1xuXG4gICAgaWYgKCFpc1N1YnNldE9mTGFuZXMobm9kZS5jaGlsZExhbmVzLCByZW5kZXJMYW5lcykpIHtcbiAgICAgIG5vZGUuY2hpbGRMYW5lcyA9IG1lcmdlTGFuZXMobm9kZS5jaGlsZExhbmVzLCByZW5kZXJMYW5lcyk7XG5cbiAgICAgIGlmIChhbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgICAgYWx0ZXJuYXRlLmNoaWxkTGFuZXMgPSBtZXJnZUxhbmVzKGFsdGVybmF0ZS5jaGlsZExhbmVzLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChhbHRlcm5hdGUgIT09IG51bGwgJiYgIWlzU3Vic2V0T2ZMYW5lcyhhbHRlcm5hdGUuY2hpbGRMYW5lcywgcmVuZGVyTGFuZXMpKSB7XG4gICAgICBhbHRlcm5hdGUuY2hpbGRMYW5lcyA9IG1lcmdlTGFuZXMoYWx0ZXJuYXRlLmNoaWxkTGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTmVpdGhlciBhbHRlcm5hdGUgd2FzIHVwZGF0ZWQsIHdoaWNoIG1lYW5zIHRoZSByZXN0IG9mIHRoZVxuICAgICAgLy8gYW5jZXN0b3IgcGF0aCBhbHJlYWR5IGhhcyBzdWZmaWNpZW50IHByaW9yaXR5LlxuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICB9XG59XG5mdW5jdGlvbiBwcm9wYWdhdGVDb250ZXh0Q2hhbmdlKHdvcmtJblByb2dyZXNzLCBjb250ZXh0LCBjaGFuZ2VkQml0cywgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIGZpYmVyID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG5cbiAgaWYgKGZpYmVyICE9PSBudWxsKSB7XG4gICAgLy8gU2V0IHRoZSByZXR1cm4gcG9pbnRlciBvZiB0aGUgY2hpbGQgdG8gdGhlIHdvcmstaW4tcHJvZ3Jlc3MgZmliZXIuXG4gICAgZmliZXIucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gIH1cblxuICB3aGlsZSAoZmliZXIgIT09IG51bGwpIHtcbiAgICB2YXIgbmV4dEZpYmVyID0gdm9pZCAwOyAvLyBWaXNpdCB0aGlzIGZpYmVyLlxuXG4gICAgdmFyIGxpc3QgPSBmaWJlci5kZXBlbmRlbmNpZXM7XG5cbiAgICBpZiAobGlzdCAhPT0gbnVsbCkge1xuICAgICAgbmV4dEZpYmVyID0gZmliZXIuY2hpbGQ7XG4gICAgICB2YXIgZGVwZW5kZW5jeSA9IGxpc3QuZmlyc3RDb250ZXh0O1xuXG4gICAgICB3aGlsZSAoZGVwZW5kZW5jeSAhPT0gbnVsbCkge1xuICAgICAgICAvLyBDaGVjayBpZiB0aGUgY29udGV4dCBtYXRjaGVzLlxuICAgICAgICBpZiAoZGVwZW5kZW5jeS5jb250ZXh0ID09PSBjb250ZXh0ICYmIChkZXBlbmRlbmN5Lm9ic2VydmVkQml0cyAmIGNoYW5nZWRCaXRzKSAhPT0gMCkge1xuICAgICAgICAgIC8vIE1hdGNoISBTY2hlZHVsZSBhbiB1cGRhdGUgb24gdGhpcyBmaWJlci5cbiAgICAgICAgICBpZiAoZmliZXIudGFnID09PSBDbGFzc0NvbXBvbmVudCkge1xuICAgICAgICAgICAgLy8gU2NoZWR1bGUgYSBmb3JjZSB1cGRhdGUgb24gdGhlIHdvcmstaW4tcHJvZ3Jlc3MuXG4gICAgICAgICAgICB2YXIgdXBkYXRlID0gY3JlYXRlVXBkYXRlKE5vVGltZXN0YW1wLCBwaWNrQXJiaXRyYXJ5TGFuZShyZW5kZXJMYW5lcykpO1xuICAgICAgICAgICAgdXBkYXRlLnRhZyA9IEZvcmNlVXBkYXRlOyAvLyBUT0RPOiBCZWNhdXNlIHdlIGRvbid0IGhhdmUgYSB3b3JrLWluLXByb2dyZXNzLCB0aGlzIHdpbGwgYWRkIHRoZVxuICAgICAgICAgICAgLy8gdXBkYXRlIHRvIHRoZSBjdXJyZW50IGZpYmVyLCB0b28sIHdoaWNoIG1lYW5zIGl0IHdpbGwgcGVyc2lzdCBldmVuIGlmXG4gICAgICAgICAgICAvLyB0aGlzIHJlbmRlciBpcyB0aHJvd24gYXdheS4gU2luY2UgaXQncyBhIHJhY2UgY29uZGl0aW9uLCBub3Qgc3VyZSBpdCdzXG4gICAgICAgICAgICAvLyB3b3J0aCBmaXhpbmcuXG5cbiAgICAgICAgICAgIGVucXVldWVVcGRhdGUoZmliZXIsIHVwZGF0ZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZmliZXIubGFuZXMgPSBtZXJnZUxhbmVzKGZpYmVyLmxhbmVzLCByZW5kZXJMYW5lcyk7XG4gICAgICAgICAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZTtcblxuICAgICAgICAgIGlmIChhbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGFsdGVybmF0ZS5sYW5lcyA9IG1lcmdlTGFuZXMoYWx0ZXJuYXRlLmxhbmVzLCByZW5kZXJMYW5lcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc2NoZWR1bGVXb3JrT25QYXJlbnRQYXRoKGZpYmVyLnJldHVybiwgcmVuZGVyTGFuZXMpOyAvLyBNYXJrIHRoZSB1cGRhdGVkIGxhbmVzIG9uIHRoZSBsaXN0LCB0b28uXG5cbiAgICAgICAgICBsaXN0LmxhbmVzID0gbWVyZ2VMYW5lcyhsaXN0LmxhbmVzLCByZW5kZXJMYW5lcyk7IC8vIFNpbmNlIHdlIGFscmVhZHkgZm91bmQgYSBtYXRjaCwgd2UgY2FuIHN0b3AgdHJhdmVyc2luZyB0aGVcbiAgICAgICAgICAvLyBkZXBlbmRlbmN5IGxpc3QuXG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGRlcGVuZGVuY3kgPSBkZXBlbmRlbmN5Lm5leHQ7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChmaWJlci50YWcgPT09IENvbnRleHRQcm92aWRlcikge1xuICAgICAgLy8gRG9uJ3Qgc2NhbiBkZWVwZXIgaWYgdGhpcyBpcyBhIG1hdGNoaW5nIHByb3ZpZGVyXG4gICAgICBuZXh0RmliZXIgPSBmaWJlci50eXBlID09PSB3b3JrSW5Qcm9ncmVzcy50eXBlID8gbnVsbCA6IGZpYmVyLmNoaWxkO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUcmF2ZXJzZSBkb3duLlxuICAgICAgbmV4dEZpYmVyID0gZmliZXIuY2hpbGQ7XG4gICAgfVxuXG4gICAgaWYgKG5leHRGaWJlciAhPT0gbnVsbCkge1xuICAgICAgLy8gU2V0IHRoZSByZXR1cm4gcG9pbnRlciBvZiB0aGUgY2hpbGQgdG8gdGhlIHdvcmstaW4tcHJvZ3Jlc3MgZmliZXIuXG4gICAgICBuZXh0RmliZXIucmV0dXJuID0gZmliZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5vIGNoaWxkLiBUcmF2ZXJzZSB0byBuZXh0IHNpYmxpbmcuXG4gICAgICBuZXh0RmliZXIgPSBmaWJlcjtcblxuICAgICAgd2hpbGUgKG5leHRGaWJlciAhPT0gbnVsbCkge1xuICAgICAgICBpZiAobmV4dEZpYmVyID09PSB3b3JrSW5Qcm9ncmVzcykge1xuICAgICAgICAgIC8vIFdlJ3JlIGJhY2sgdG8gdGhlIHJvb3Qgb2YgdGhpcyBzdWJ0cmVlLiBFeGl0LlxuICAgICAgICAgIG5leHRGaWJlciA9IG51bGw7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2libGluZyA9IG5leHRGaWJlci5zaWJsaW5nO1xuXG4gICAgICAgIGlmIChzaWJsaW5nICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gU2V0IHRoZSByZXR1cm4gcG9pbnRlciBvZiB0aGUgc2libGluZyB0byB0aGUgd29yay1pbi1wcm9ncmVzcyBmaWJlci5cbiAgICAgICAgICBzaWJsaW5nLnJldHVybiA9IG5leHRGaWJlci5yZXR1cm47XG4gICAgICAgICAgbmV4dEZpYmVyID0gc2libGluZztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSAvLyBObyBtb3JlIHNpYmxpbmdzLiBUcmF2ZXJzZSB1cC5cblxuXG4gICAgICAgIG5leHRGaWJlciA9IG5leHRGaWJlci5yZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgZmliZXIgPSBuZXh0RmliZXI7XG4gIH1cbn1cbmZ1bmN0aW9uIHByZXBhcmVUb1JlYWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciA9IHdvcmtJblByb2dyZXNzO1xuICBsYXN0Q29udGV4dERlcGVuZGVuY3kgPSBudWxsO1xuICBsYXN0Q29udGV4dFdpdGhBbGxCaXRzT2JzZXJ2ZWQgPSBudWxsO1xuICB2YXIgZGVwZW5kZW5jaWVzID0gd29ya0luUHJvZ3Jlc3MuZGVwZW5kZW5jaWVzO1xuXG4gIGlmIChkZXBlbmRlbmNpZXMgIT09IG51bGwpIHtcbiAgICB2YXIgZmlyc3RDb250ZXh0ID0gZGVwZW5kZW5jaWVzLmZpcnN0Q29udGV4dDtcblxuICAgIGlmIChmaXJzdENvbnRleHQgIT09IG51bGwpIHtcbiAgICAgIGlmIChpbmNsdWRlc1NvbWVMYW5lKGRlcGVuZGVuY2llcy5sYW5lcywgcmVuZGVyTGFuZXMpKSB7XG4gICAgICAgIC8vIENvbnRleHQgbGlzdCBoYXMgYSBwZW5kaW5nIHVwZGF0ZS4gTWFyayB0aGF0IHRoaXMgZmliZXIgcGVyZm9ybWVkIHdvcmsuXG4gICAgICAgIG1hcmtXb3JrSW5Qcm9ncmVzc1JlY2VpdmVkVXBkYXRlKCk7XG4gICAgICB9IC8vIFJlc2V0IHRoZSB3b3JrLWluLXByb2dyZXNzIGxpc3RcblxuXG4gICAgICBkZXBlbmRlbmNpZXMuZmlyc3RDb250ZXh0ID0gbnVsbDtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICB7XG4gICAgLy8gVGhpcyB3YXJuaW5nIHdvdWxkIGZpcmUgaWYgeW91IHJlYWQgY29udGV4dCBpbnNpZGUgYSBIb29rIGxpa2UgdXNlTWVtby5cbiAgICAvLyBVbmxpa2UgdGhlIGNsYXNzIGNoZWNrIGJlbG93LCBpdCdzIG5vdCBlbmZvcmNlZCBpbiBwcm9kdWN0aW9uIGZvciBwZXJmLlxuICAgIGlmIChpc0Rpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWKSB7XG4gICAgICBlcnJvcignQ29udGV4dCBjYW4gb25seSBiZSByZWFkIHdoaWxlIFJlYWN0IGlzIHJlbmRlcmluZy4gJyArICdJbiBjbGFzc2VzLCB5b3UgY2FuIHJlYWQgaXQgaW4gdGhlIHJlbmRlciBtZXRob2Qgb3IgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLiAnICsgJ0luIGZ1bmN0aW9uIGNvbXBvbmVudHMsIHlvdSBjYW4gcmVhZCBpdCBkaXJlY3RseSBpbiB0aGUgZnVuY3Rpb24gYm9keSwgYnV0IG5vdCAnICsgJ2luc2lkZSBIb29rcyBsaWtlIHVzZVJlZHVjZXIoKSBvciB1c2VNZW1vKCkuJyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGxhc3RDb250ZXh0V2l0aEFsbEJpdHNPYnNlcnZlZCA9PT0gY29udGV4dCkgOyBlbHNlIGlmIChvYnNlcnZlZEJpdHMgPT09IGZhbHNlIHx8IG9ic2VydmVkQml0cyA9PT0gMCkgOyBlbHNlIHtcbiAgICB2YXIgcmVzb2x2ZWRPYnNlcnZlZEJpdHM7IC8vIEF2b2lkIGRlb3B0aW5nIG9uIG9ic2VydmFibGUgYXJndW1lbnRzIG9yIGhldGVyb2dlbmVvdXMgdHlwZXMuXG5cbiAgICBpZiAodHlwZW9mIG9ic2VydmVkQml0cyAhPT0gJ251bWJlcicgfHwgb2JzZXJ2ZWRCaXRzID09PSBNQVhfU0lHTkVEXzMxX0JJVF9JTlQpIHtcbiAgICAgIC8vIE9ic2VydmUgYWxsIHVwZGF0ZXMuXG4gICAgICBsYXN0Q29udGV4dFdpdGhBbGxCaXRzT2JzZXJ2ZWQgPSBjb250ZXh0O1xuICAgICAgcmVzb2x2ZWRPYnNlcnZlZEJpdHMgPSBNQVhfU0lHTkVEXzMxX0JJVF9JTlQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc29sdmVkT2JzZXJ2ZWRCaXRzID0gb2JzZXJ2ZWRCaXRzO1xuICAgIH1cblxuICAgIHZhciBjb250ZXh0SXRlbSA9IHtcbiAgICAgIGNvbnRleHQ6IGNvbnRleHQsXG4gICAgICBvYnNlcnZlZEJpdHM6IHJlc29sdmVkT2JzZXJ2ZWRCaXRzLFxuICAgICAgbmV4dDogbnVsbFxuICAgIH07XG5cbiAgICBpZiAobGFzdENvbnRleHREZXBlbmRlbmN5ID09PSBudWxsKSB7XG4gICAgICBpZiAoIShjdXJyZW50bHlSZW5kZXJpbmdGaWJlciAhPT0gbnVsbCkpIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCBcIkNvbnRleHQgY2FuIG9ubHkgYmUgcmVhZCB3aGlsZSBSZWFjdCBpcyByZW5kZXJpbmcuIEluIGNsYXNzZXMsIHlvdSBjYW4gcmVhZCBpdCBpbiB0aGUgcmVuZGVyIG1ldGhvZCBvciBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMuIEluIGZ1bmN0aW9uIGNvbXBvbmVudHMsIHlvdSBjYW4gcmVhZCBpdCBkaXJlY3RseSBpbiB0aGUgZnVuY3Rpb24gYm9keSwgYnV0IG5vdCBpbnNpZGUgSG9va3MgbGlrZSB1c2VSZWR1Y2VyKCkgb3IgdXNlTWVtbygpLlwiICk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gVGhpcyBpcyB0aGUgZmlyc3QgZGVwZW5kZW5jeSBmb3IgdGhpcyBjb21wb25lbnQuIENyZWF0ZSBhIG5ldyBsaXN0LlxuXG5cbiAgICAgIGxhc3RDb250ZXh0RGVwZW5kZW5jeSA9IGNvbnRleHRJdGVtO1xuICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIuZGVwZW5kZW5jaWVzID0ge1xuICAgICAgICBsYW5lczogTm9MYW5lcyxcbiAgICAgICAgZmlyc3RDb250ZXh0OiBjb250ZXh0SXRlbSxcbiAgICAgICAgcmVzcG9uZGVyczogbnVsbFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQXBwZW5kIGEgbmV3IGNvbnRleHQgaXRlbS5cbiAgICAgIGxhc3RDb250ZXh0RGVwZW5kZW5jeSA9IGxhc3RDb250ZXh0RGVwZW5kZW5jeS5uZXh0ID0gY29udGV4dEl0ZW07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuICBjb250ZXh0Ll9jdXJyZW50VmFsdWUgO1xufVxuXG52YXIgVXBkYXRlU3RhdGUgPSAwO1xudmFyIFJlcGxhY2VTdGF0ZSA9IDE7XG52YXIgRm9yY2VVcGRhdGUgPSAyO1xudmFyIENhcHR1cmVVcGRhdGUgPSAzOyAvLyBHbG9iYWwgc3RhdGUgdGhhdCBpcyByZXNldCBhdCB0aGUgYmVnaW5uaW5nIG9mIGNhbGxpbmcgYHByb2Nlc3NVcGRhdGVRdWV1ZWAuXG4vLyBJdCBzaG91bGQgb25seSBiZSByZWFkIHJpZ2h0IGFmdGVyIGNhbGxpbmcgYHByb2Nlc3NVcGRhdGVRdWV1ZWAsIHZpYVxuLy8gYGNoZWNrSGFzRm9yY2VVcGRhdGVBZnRlclByb2Nlc3NpbmdgLlxuXG52YXIgaGFzRm9yY2VVcGRhdGUgPSBmYWxzZTtcbnZhciBkaWRXYXJuVXBkYXRlSW5zaWRlVXBkYXRlO1xudmFyIGN1cnJlbnRseVByb2Nlc3NpbmdRdWV1ZTtcblxue1xuICBkaWRXYXJuVXBkYXRlSW5zaWRlVXBkYXRlID0gZmFsc2U7XG4gIGN1cnJlbnRseVByb2Nlc3NpbmdRdWV1ZSA9IG51bGw7XG59XG5cbmZ1bmN0aW9uIGluaXRpYWxpemVVcGRhdGVRdWV1ZShmaWJlcikge1xuICB2YXIgcXVldWUgPSB7XG4gICAgYmFzZVN0YXRlOiBmaWJlci5tZW1vaXplZFN0YXRlLFxuICAgIGZpcnN0QmFzZVVwZGF0ZTogbnVsbCxcbiAgICBsYXN0QmFzZVVwZGF0ZTogbnVsbCxcbiAgICBzaGFyZWQ6IHtcbiAgICAgIHBlbmRpbmc6IG51bGxcbiAgICB9LFxuICAgIGVmZmVjdHM6IG51bGxcbiAgfTtcbiAgZmliZXIudXBkYXRlUXVldWUgPSBxdWV1ZTtcbn1cbmZ1bmN0aW9uIGNsb25lVXBkYXRlUXVldWUoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpIHtcbiAgLy8gQ2xvbmUgdGhlIHVwZGF0ZSBxdWV1ZSBmcm9tIGN1cnJlbnQuIFVubGVzcyBpdCdzIGFscmVhZHkgYSBjbG9uZS5cbiAgdmFyIHF1ZXVlID0gd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWU7XG4gIHZhciBjdXJyZW50UXVldWUgPSBjdXJyZW50LnVwZGF0ZVF1ZXVlO1xuXG4gIGlmIChxdWV1ZSA9PT0gY3VycmVudFF1ZXVlKSB7XG4gICAgdmFyIGNsb25lID0ge1xuICAgICAgYmFzZVN0YXRlOiBjdXJyZW50UXVldWUuYmFzZVN0YXRlLFxuICAgICAgZmlyc3RCYXNlVXBkYXRlOiBjdXJyZW50UXVldWUuZmlyc3RCYXNlVXBkYXRlLFxuICAgICAgbGFzdEJhc2VVcGRhdGU6IGN1cnJlbnRRdWV1ZS5sYXN0QmFzZVVwZGF0ZSxcbiAgICAgIHNoYXJlZDogY3VycmVudFF1ZXVlLnNoYXJlZCxcbiAgICAgIGVmZmVjdHM6IGN1cnJlbnRRdWV1ZS5lZmZlY3RzXG4gICAgfTtcbiAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IGNsb25lO1xuICB9XG59XG5mdW5jdGlvbiBjcmVhdGVVcGRhdGUoZXZlbnRUaW1lLCBsYW5lKSB7XG4gIHZhciB1cGRhdGUgPSB7XG4gICAgZXZlbnRUaW1lOiBldmVudFRpbWUsXG4gICAgbGFuZTogbGFuZSxcbiAgICB0YWc6IFVwZGF0ZVN0YXRlLFxuICAgIHBheWxvYWQ6IG51bGwsXG4gICAgY2FsbGJhY2s6IG51bGwsXG4gICAgbmV4dDogbnVsbFxuICB9O1xuICByZXR1cm4gdXBkYXRlO1xufVxuZnVuY3Rpb24gZW5xdWV1ZVVwZGF0ZShmaWJlciwgdXBkYXRlKSB7XG4gIHZhciB1cGRhdGVRdWV1ZSA9IGZpYmVyLnVwZGF0ZVF1ZXVlO1xuXG4gIGlmICh1cGRhdGVRdWV1ZSA9PT0gbnVsbCkge1xuICAgIC8vIE9ubHkgb2NjdXJzIGlmIHRoZSBmaWJlciBoYXMgYmVlbiB1bm1vdW50ZWQuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHNoYXJlZFF1ZXVlID0gdXBkYXRlUXVldWUuc2hhcmVkO1xuICB2YXIgcGVuZGluZyA9IHNoYXJlZFF1ZXVlLnBlbmRpbmc7XG5cbiAgaWYgKHBlbmRpbmcgPT09IG51bGwpIHtcbiAgICAvLyBUaGlzIGlzIHRoZSBmaXJzdCB1cGRhdGUuIENyZWF0ZSBhIGNpcmN1bGFyIGxpc3QuXG4gICAgdXBkYXRlLm5leHQgPSB1cGRhdGU7XG4gIH0gZWxzZSB7XG4gICAgdXBkYXRlLm5leHQgPSBwZW5kaW5nLm5leHQ7XG4gICAgcGVuZGluZy5uZXh0ID0gdXBkYXRlO1xuICB9XG5cbiAgc2hhcmVkUXVldWUucGVuZGluZyA9IHVwZGF0ZTtcblxuICB7XG4gICAgaWYgKGN1cnJlbnRseVByb2Nlc3NpbmdRdWV1ZSA9PT0gc2hhcmVkUXVldWUgJiYgIWRpZFdhcm5VcGRhdGVJbnNpZGVVcGRhdGUpIHtcbiAgICAgIGVycm9yKCdBbiB1cGRhdGUgKHNldFN0YXRlLCByZXBsYWNlU3RhdGUsIG9yIGZvcmNlVXBkYXRlKSB3YXMgc2NoZWR1bGVkICcgKyAnZnJvbSBpbnNpZGUgYW4gdXBkYXRlIGZ1bmN0aW9uLiBVcGRhdGUgZnVuY3Rpb25zIHNob3VsZCBiZSBwdXJlLCAnICsgJ3dpdGggemVybyBzaWRlLWVmZmVjdHMuIENvbnNpZGVyIHVzaW5nIGNvbXBvbmVudERpZFVwZGF0ZSBvciBhICcgKyAnY2FsbGJhY2suJyk7XG5cbiAgICAgIGRpZFdhcm5VcGRhdGVJbnNpZGVVcGRhdGUgPSB0cnVlO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZW5xdWV1ZUNhcHR1cmVkVXBkYXRlKHdvcmtJblByb2dyZXNzLCBjYXB0dXJlZFVwZGF0ZSkge1xuICAvLyBDYXB0dXJlZCB1cGRhdGVzIGFyZSB1cGRhdGVzIHRoYXQgYXJlIHRocm93biBieSBhIGNoaWxkIGR1cmluZyB0aGUgcmVuZGVyXG4gIC8vIHBoYXNlLiBUaGV5IHNob3VsZCBiZSBkaXNjYXJkZWQgaWYgdGhlIHJlbmRlciBpcyBhYm9ydGVkLiBUaGVyZWZvcmUsXG4gIC8vIHdlIHNob3VsZCBvbmx5IHB1dCB0aGVtIG9uIHRoZSB3b3JrLWluLXByb2dyZXNzIHF1ZXVlLCBub3QgdGhlIGN1cnJlbnQgb25lLlxuICB2YXIgcXVldWUgPSB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZTsgLy8gQ2hlY2sgaWYgdGhlIHdvcmstaW4tcHJvZ3Jlc3MgcXVldWUgaXMgYSBjbG9uZS5cblxuICB2YXIgY3VycmVudCA9IHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZTtcblxuICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgIHZhciBjdXJyZW50UXVldWUgPSBjdXJyZW50LnVwZGF0ZVF1ZXVlO1xuXG4gICAgaWYgKHF1ZXVlID09PSBjdXJyZW50UXVldWUpIHtcbiAgICAgIC8vIFRoZSB3b3JrLWluLXByb2dyZXNzIHF1ZXVlIGlzIHRoZSBzYW1lIGFzIGN1cnJlbnQuIFRoaXMgaGFwcGVucyB3aGVuXG4gICAgICAvLyB3ZSBiYWlsIG91dCBvbiBhIHBhcmVudCBmaWJlciB0aGF0IHRoZW4gY2FwdHVyZXMgYW4gZXJyb3IgdGhyb3duIGJ5XG4gICAgICAvLyBhIGNoaWxkLiBTaW5jZSB3ZSB3YW50IHRvIGFwcGVuZCB0aGUgdXBkYXRlIG9ubHkgdG8gdGhlIHdvcmstaW5cbiAgICAgIC8vIC1wcm9ncmVzcyBxdWV1ZSwgd2UgbmVlZCB0byBjbG9uZSB0aGUgdXBkYXRlcy4gV2UgdXN1YWxseSBjbG9uZSBkdXJpbmdcbiAgICAgIC8vIHByb2Nlc3NVcGRhdGVRdWV1ZSwgYnV0IHRoYXQgZGlkbid0IGhhcHBlbiBpbiB0aGlzIGNhc2UgYmVjYXVzZSB3ZVxuICAgICAgLy8gc2tpcHBlZCBvdmVyIHRoZSBwYXJlbnQgd2hlbiB3ZSBiYWlsZWQgb3V0LlxuICAgICAgdmFyIG5ld0ZpcnN0ID0gbnVsbDtcbiAgICAgIHZhciBuZXdMYXN0ID0gbnVsbDtcbiAgICAgIHZhciBmaXJzdEJhc2VVcGRhdGUgPSBxdWV1ZS5maXJzdEJhc2VVcGRhdGU7XG5cbiAgICAgIGlmIChmaXJzdEJhc2VVcGRhdGUgIT09IG51bGwpIHtcbiAgICAgICAgLy8gTG9vcCB0aHJvdWdoIHRoZSB1cGRhdGVzIGFuZCBjbG9uZSB0aGVtLlxuICAgICAgICB2YXIgdXBkYXRlID0gZmlyc3RCYXNlVXBkYXRlO1xuXG4gICAgICAgIGRvIHtcbiAgICAgICAgICB2YXIgY2xvbmUgPSB7XG4gICAgICAgICAgICBldmVudFRpbWU6IHVwZGF0ZS5ldmVudFRpbWUsXG4gICAgICAgICAgICBsYW5lOiB1cGRhdGUubGFuZSxcbiAgICAgICAgICAgIHRhZzogdXBkYXRlLnRhZyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHVwZGF0ZS5wYXlsb2FkLFxuICAgICAgICAgICAgY2FsbGJhY2s6IHVwZGF0ZS5jYWxsYmFjayxcbiAgICAgICAgICAgIG5leHQ6IG51bGxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgaWYgKG5ld0xhc3QgPT09IG51bGwpIHtcbiAgICAgICAgICAgIG5ld0ZpcnN0ID0gbmV3TGFzdCA9IGNsb25lO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXdMYXN0Lm5leHQgPSBjbG9uZTtcbiAgICAgICAgICAgIG5ld0xhc3QgPSBjbG9uZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB1cGRhdGUgPSB1cGRhdGUubmV4dDtcbiAgICAgICAgfSB3aGlsZSAodXBkYXRlICE9PSBudWxsKTsgLy8gQXBwZW5kIHRoZSBjYXB0dXJlZCB1cGRhdGUgdGhlIGVuZCBvZiB0aGUgY2xvbmVkIGxpc3QuXG5cblxuICAgICAgICBpZiAobmV3TGFzdCA9PT0gbnVsbCkge1xuICAgICAgICAgIG5ld0ZpcnN0ID0gbmV3TGFzdCA9IGNhcHR1cmVkVXBkYXRlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld0xhc3QubmV4dCA9IGNhcHR1cmVkVXBkYXRlO1xuICAgICAgICAgIG5ld0xhc3QgPSBjYXB0dXJlZFVwZGF0ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVGhlcmUgYXJlIG5vIGJhc2UgdXBkYXRlcy5cbiAgICAgICAgbmV3Rmlyc3QgPSBuZXdMYXN0ID0gY2FwdHVyZWRVcGRhdGU7XG4gICAgICB9XG5cbiAgICAgIHF1ZXVlID0ge1xuICAgICAgICBiYXNlU3RhdGU6IGN1cnJlbnRRdWV1ZS5iYXNlU3RhdGUsXG4gICAgICAgIGZpcnN0QmFzZVVwZGF0ZTogbmV3Rmlyc3QsXG4gICAgICAgIGxhc3RCYXNlVXBkYXRlOiBuZXdMYXN0LFxuICAgICAgICBzaGFyZWQ6IGN1cnJlbnRRdWV1ZS5zaGFyZWQsXG4gICAgICAgIGVmZmVjdHM6IGN1cnJlbnRRdWV1ZS5lZmZlY3RzXG4gICAgICB9O1xuICAgICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBxdWV1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0gLy8gQXBwZW5kIHRoZSB1cGRhdGUgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdC5cblxuXG4gIHZhciBsYXN0QmFzZVVwZGF0ZSA9IHF1ZXVlLmxhc3RCYXNlVXBkYXRlO1xuXG4gIGlmIChsYXN0QmFzZVVwZGF0ZSA9PT0gbnVsbCkge1xuICAgIHF1ZXVlLmZpcnN0QmFzZVVwZGF0ZSA9IGNhcHR1cmVkVXBkYXRlO1xuICB9IGVsc2Uge1xuICAgIGxhc3RCYXNlVXBkYXRlLm5leHQgPSBjYXB0dXJlZFVwZGF0ZTtcbiAgfVxuXG4gIHF1ZXVlLmxhc3RCYXNlVXBkYXRlID0gY2FwdHVyZWRVcGRhdGU7XG59XG5cbmZ1bmN0aW9uIGdldFN0YXRlRnJvbVVwZGF0ZSh3b3JrSW5Qcm9ncmVzcywgcXVldWUsIHVwZGF0ZSwgcHJldlN0YXRlLCBuZXh0UHJvcHMsIGluc3RhbmNlKSB7XG4gIHN3aXRjaCAodXBkYXRlLnRhZykge1xuICAgIGNhc2UgUmVwbGFjZVN0YXRlOlxuICAgICAge1xuICAgICAgICB2YXIgcGF5bG9hZCA9IHVwZGF0ZS5wYXlsb2FkO1xuXG4gICAgICAgIGlmICh0eXBlb2YgcGF5bG9hZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIC8vIFVwZGF0ZXIgZnVuY3Rpb25cbiAgICAgICAgICB7XG4gICAgICAgICAgICBlbnRlckRpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIG5leHRTdGF0ZSA9IHBheWxvYWQuY2FsbChpbnN0YW5jZSwgcHJldlN0YXRlLCBuZXh0UHJvcHMpO1xuXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKCB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgICAgICAgICBkaXNhYmxlTG9ncygpO1xuXG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZC5jYWxsKGluc3RhbmNlLCBwcmV2U3RhdGUsIG5leHRQcm9wcyk7XG4gICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXhpdERpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIG5leHRTdGF0ZTtcbiAgICAgICAgfSAvLyBTdGF0ZSBvYmplY3RcblxuXG4gICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgfVxuXG4gICAgY2FzZSBDYXB0dXJlVXBkYXRlOlxuICAgICAge1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyA9IHdvcmtJblByb2dyZXNzLmZsYWdzICYgflNob3VsZENhcHR1cmUgfCBEaWRDYXB0dXJlO1xuICAgICAgfVxuICAgIC8vIEludGVudGlvbmFsIGZhbGx0aHJvdWdoXG5cbiAgICBjYXNlIFVwZGF0ZVN0YXRlOlxuICAgICAge1xuICAgICAgICB2YXIgX3BheWxvYWQgPSB1cGRhdGUucGF5bG9hZDtcbiAgICAgICAgdmFyIHBhcnRpYWxTdGF0ZTtcblxuICAgICAgICBpZiAodHlwZW9mIF9wYXlsb2FkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgLy8gVXBkYXRlciBmdW5jdGlvblxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGVudGVyRGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwYXJ0aWFsU3RhdGUgPSBfcGF5bG9hZC5jYWxsKGluc3RhbmNlLCBwcmV2U3RhdGUsIG5leHRQcm9wcyk7XG5cbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RNb2RlKSB7XG4gICAgICAgICAgICAgIGRpc2FibGVMb2dzKCk7XG5cbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBfcGF5bG9hZC5jYWxsKGluc3RhbmNlLCBwcmV2U3RhdGUsIG5leHRQcm9wcyk7XG4gICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXhpdERpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFBhcnRpYWwgc3RhdGUgb2JqZWN0XG4gICAgICAgICAgcGFydGlhbFN0YXRlID0gX3BheWxvYWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFydGlhbFN0YXRlID09PSBudWxsIHx8IHBhcnRpYWxTdGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgLy8gTnVsbCBhbmQgdW5kZWZpbmVkIGFyZSB0cmVhdGVkIGFzIG5vLW9wcy5cbiAgICAgICAgICByZXR1cm4gcHJldlN0YXRlO1xuICAgICAgICB9IC8vIE1lcmdlIHRoZSBwYXJ0aWFsIHN0YXRlIGFuZCB0aGUgcHJldmlvdXMgc3RhdGUuXG5cblxuICAgICAgICByZXR1cm4gX2Fzc2lnbih7fSwgcHJldlN0YXRlLCBwYXJ0aWFsU3RhdGUpO1xuICAgICAgfVxuXG4gICAgY2FzZSBGb3JjZVVwZGF0ZTpcbiAgICAgIHtcbiAgICAgICAgaGFzRm9yY2VVcGRhdGUgPSB0cnVlO1xuICAgICAgICByZXR1cm4gcHJldlN0YXRlO1xuICAgICAgfVxuICB9XG5cbiAgcmV0dXJuIHByZXZTdGF0ZTtcbn1cblxuZnVuY3Rpb24gcHJvY2Vzc1VwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzLCBwcm9wcywgaW5zdGFuY2UsIHJlbmRlckxhbmVzKSB7XG4gIC8vIFRoaXMgaXMgYWx3YXlzIG5vbi1udWxsIG9uIGEgQ2xhc3NDb21wb25lbnQgb3IgSG9zdFJvb3RcbiAgdmFyIHF1ZXVlID0gd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWU7XG4gIGhhc0ZvcmNlVXBkYXRlID0gZmFsc2U7XG5cbiAge1xuICAgIGN1cnJlbnRseVByb2Nlc3NpbmdRdWV1ZSA9IHF1ZXVlLnNoYXJlZDtcbiAgfVxuXG4gIHZhciBmaXJzdEJhc2VVcGRhdGUgPSBxdWV1ZS5maXJzdEJhc2VVcGRhdGU7XG4gIHZhciBsYXN0QmFzZVVwZGF0ZSA9IHF1ZXVlLmxhc3RCYXNlVXBkYXRlOyAvLyBDaGVjayBpZiB0aGVyZSBhcmUgcGVuZGluZyB1cGRhdGVzLiBJZiBzbywgdHJhbnNmZXIgdGhlbSB0byB0aGUgYmFzZSBxdWV1ZS5cblxuICB2YXIgcGVuZGluZ1F1ZXVlID0gcXVldWUuc2hhcmVkLnBlbmRpbmc7XG5cbiAgaWYgKHBlbmRpbmdRdWV1ZSAhPT0gbnVsbCkge1xuICAgIHF1ZXVlLnNoYXJlZC5wZW5kaW5nID0gbnVsbDsgLy8gVGhlIHBlbmRpbmcgcXVldWUgaXMgY2lyY3VsYXIuIERpc2Nvbm5lY3QgdGhlIHBvaW50ZXIgYmV0d2VlbiBmaXJzdFxuICAgIC8vIGFuZCBsYXN0IHNvIHRoYXQgaXQncyBub24tY2lyY3VsYXIuXG5cbiAgICB2YXIgbGFzdFBlbmRpbmdVcGRhdGUgPSBwZW5kaW5nUXVldWU7XG4gICAgdmFyIGZpcnN0UGVuZGluZ1VwZGF0ZSA9IGxhc3RQZW5kaW5nVXBkYXRlLm5leHQ7XG4gICAgbGFzdFBlbmRpbmdVcGRhdGUubmV4dCA9IG51bGw7IC8vIEFwcGVuZCBwZW5kaW5nIHVwZGF0ZXMgdG8gYmFzZSBxdWV1ZVxuXG4gICAgaWYgKGxhc3RCYXNlVXBkYXRlID09PSBudWxsKSB7XG4gICAgICBmaXJzdEJhc2VVcGRhdGUgPSBmaXJzdFBlbmRpbmdVcGRhdGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxhc3RCYXNlVXBkYXRlLm5leHQgPSBmaXJzdFBlbmRpbmdVcGRhdGU7XG4gICAgfVxuXG4gICAgbGFzdEJhc2VVcGRhdGUgPSBsYXN0UGVuZGluZ1VwZGF0ZTsgLy8gSWYgdGhlcmUncyBhIGN1cnJlbnQgcXVldWUsIGFuZCBpdCdzIGRpZmZlcmVudCBmcm9tIHRoZSBiYXNlIHF1ZXVlLCB0aGVuXG4gICAgLy8gd2UgbmVlZCB0byB0cmFuc2ZlciB0aGUgdXBkYXRlcyB0byB0aGF0IHF1ZXVlLCB0b28uIEJlY2F1c2UgdGhlIGJhc2VcbiAgICAvLyBxdWV1ZSBpcyBhIHNpbmdseS1saW5rZWQgbGlzdCB3aXRoIG5vIGN5Y2xlcywgd2UgY2FuIGFwcGVuZCB0byBib3RoXG4gICAgLy8gbGlzdHMgYW5kIHRha2UgYWR2YW50YWdlIG9mIHN0cnVjdHVyYWwgc2hhcmluZy5cbiAgICAvLyBUT0RPOiBQYXNzIGBjdXJyZW50YCBhcyBhcmd1bWVudFxuXG4gICAgdmFyIGN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcy5hbHRlcm5hdGU7XG5cbiAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgLy8gVGhpcyBpcyBhbHdheXMgbm9uLW51bGwgb24gYSBDbGFzc0NvbXBvbmVudCBvciBIb3N0Um9vdFxuICAgICAgdmFyIGN1cnJlbnRRdWV1ZSA9IGN1cnJlbnQudXBkYXRlUXVldWU7XG4gICAgICB2YXIgY3VycmVudExhc3RCYXNlVXBkYXRlID0gY3VycmVudFF1ZXVlLmxhc3RCYXNlVXBkYXRlO1xuXG4gICAgICBpZiAoY3VycmVudExhc3RCYXNlVXBkYXRlICE9PSBsYXN0QmFzZVVwZGF0ZSkge1xuICAgICAgICBpZiAoY3VycmVudExhc3RCYXNlVXBkYXRlID09PSBudWxsKSB7XG4gICAgICAgICAgY3VycmVudFF1ZXVlLmZpcnN0QmFzZVVwZGF0ZSA9IGZpcnN0UGVuZGluZ1VwZGF0ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjdXJyZW50TGFzdEJhc2VVcGRhdGUubmV4dCA9IGZpcnN0UGVuZGluZ1VwZGF0ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGN1cnJlbnRRdWV1ZS5sYXN0QmFzZVVwZGF0ZSA9IGxhc3RQZW5kaW5nVXBkYXRlO1xuICAgICAgfVxuICAgIH1cbiAgfSAvLyBUaGVzZSB2YWx1ZXMgbWF5IGNoYW5nZSBhcyB3ZSBwcm9jZXNzIHRoZSBxdWV1ZS5cblxuXG4gIGlmIChmaXJzdEJhc2VVcGRhdGUgIT09IG51bGwpIHtcbiAgICAvLyBJdGVyYXRlIHRocm91Z2ggdGhlIGxpc3Qgb2YgdXBkYXRlcyB0byBjb21wdXRlIHRoZSByZXN1bHQuXG4gICAgdmFyIG5ld1N0YXRlID0gcXVldWUuYmFzZVN0YXRlOyAvLyBUT0RPOiBEb24ndCBuZWVkIHRvIGFjY3VtdWxhdGUgdGhpcy4gSW5zdGVhZCwgd2UgY2FuIHJlbW92ZSByZW5kZXJMYW5lc1xuICAgIC8vIGZyb20gdGhlIG9yaWdpbmFsIGxhbmVzLlxuXG4gICAgdmFyIG5ld0xhbmVzID0gTm9MYW5lcztcbiAgICB2YXIgbmV3QmFzZVN0YXRlID0gbnVsbDtcbiAgICB2YXIgbmV3Rmlyc3RCYXNlVXBkYXRlID0gbnVsbDtcbiAgICB2YXIgbmV3TGFzdEJhc2VVcGRhdGUgPSBudWxsO1xuICAgIHZhciB1cGRhdGUgPSBmaXJzdEJhc2VVcGRhdGU7XG5cbiAgICBkbyB7XG4gICAgICB2YXIgdXBkYXRlTGFuZSA9IHVwZGF0ZS5sYW5lO1xuICAgICAgdmFyIHVwZGF0ZUV2ZW50VGltZSA9IHVwZGF0ZS5ldmVudFRpbWU7XG5cbiAgICAgIGlmICghaXNTdWJzZXRPZkxhbmVzKHJlbmRlckxhbmVzLCB1cGRhdGVMYW5lKSkge1xuICAgICAgICAvLyBQcmlvcml0eSBpcyBpbnN1ZmZpY2llbnQuIFNraXAgdGhpcyB1cGRhdGUuIElmIHRoaXMgaXMgdGhlIGZpcnN0XG4gICAgICAgIC8vIHNraXBwZWQgdXBkYXRlLCB0aGUgcHJldmlvdXMgdXBkYXRlL3N0YXRlIGlzIHRoZSBuZXcgYmFzZVxuICAgICAgICAvLyB1cGRhdGUvc3RhdGUuXG4gICAgICAgIHZhciBjbG9uZSA9IHtcbiAgICAgICAgICBldmVudFRpbWU6IHVwZGF0ZUV2ZW50VGltZSxcbiAgICAgICAgICBsYW5lOiB1cGRhdGVMYW5lLFxuICAgICAgICAgIHRhZzogdXBkYXRlLnRhZyxcbiAgICAgICAgICBwYXlsb2FkOiB1cGRhdGUucGF5bG9hZCxcbiAgICAgICAgICBjYWxsYmFjazogdXBkYXRlLmNhbGxiYWNrLFxuICAgICAgICAgIG5leHQ6IG51bGxcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAobmV3TGFzdEJhc2VVcGRhdGUgPT09IG51bGwpIHtcbiAgICAgICAgICBuZXdGaXJzdEJhc2VVcGRhdGUgPSBuZXdMYXN0QmFzZVVwZGF0ZSA9IGNsb25lO1xuICAgICAgICAgIG5ld0Jhc2VTdGF0ZSA9IG5ld1N0YXRlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld0xhc3RCYXNlVXBkYXRlID0gbmV3TGFzdEJhc2VVcGRhdGUubmV4dCA9IGNsb25lO1xuICAgICAgICB9IC8vIFVwZGF0ZSB0aGUgcmVtYWluaW5nIHByaW9yaXR5IGluIHRoZSBxdWV1ZS5cblxuXG4gICAgICAgIG5ld0xhbmVzID0gbWVyZ2VMYW5lcyhuZXdMYW5lcywgdXBkYXRlTGFuZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUaGlzIHVwZGF0ZSBkb2VzIGhhdmUgc3VmZmljaWVudCBwcmlvcml0eS5cbiAgICAgICAgaWYgKG5ld0xhc3RCYXNlVXBkYXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgdmFyIF9jbG9uZSA9IHtcbiAgICAgICAgICAgIGV2ZW50VGltZTogdXBkYXRlRXZlbnRUaW1lLFxuICAgICAgICAgICAgLy8gVGhpcyB1cGRhdGUgaXMgZ29pbmcgdG8gYmUgY29tbWl0dGVkIHNvIHdlIG5ldmVyIHdhbnQgdW5jb21taXRcbiAgICAgICAgICAgIC8vIGl0LiBVc2luZyBOb0xhbmUgd29ya3MgYmVjYXVzZSAwIGlzIGEgc3Vic2V0IG9mIGFsbCBiaXRtYXNrcywgc29cbiAgICAgICAgICAgIC8vIHRoaXMgd2lsbCBuZXZlciBiZSBza2lwcGVkIGJ5IHRoZSBjaGVjayBhYm92ZS5cbiAgICAgICAgICAgIGxhbmU6IE5vTGFuZSxcbiAgICAgICAgICAgIHRhZzogdXBkYXRlLnRhZyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHVwZGF0ZS5wYXlsb2FkLFxuICAgICAgICAgICAgY2FsbGJhY2s6IHVwZGF0ZS5jYWxsYmFjayxcbiAgICAgICAgICAgIG5leHQ6IG51bGxcbiAgICAgICAgICB9O1xuICAgICAgICAgIG5ld0xhc3RCYXNlVXBkYXRlID0gbmV3TGFzdEJhc2VVcGRhdGUubmV4dCA9IF9jbG9uZTtcbiAgICAgICAgfSAvLyBQcm9jZXNzIHRoaXMgdXBkYXRlLlxuXG5cbiAgICAgICAgbmV3U3RhdGUgPSBnZXRTdGF0ZUZyb21VcGRhdGUod29ya0luUHJvZ3Jlc3MsIHF1ZXVlLCB1cGRhdGUsIG5ld1N0YXRlLCBwcm9wcywgaW5zdGFuY2UpO1xuICAgICAgICB2YXIgY2FsbGJhY2sgPSB1cGRhdGUuY2FsbGJhY2s7XG5cbiAgICAgICAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gQ2FsbGJhY2s7XG4gICAgICAgICAgdmFyIGVmZmVjdHMgPSBxdWV1ZS5lZmZlY3RzO1xuXG4gICAgICAgICAgaWYgKGVmZmVjdHMgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHF1ZXVlLmVmZmVjdHMgPSBbdXBkYXRlXTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZWZmZWN0cy5wdXNoKHVwZGF0ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHVwZGF0ZSA9IHVwZGF0ZS5uZXh0O1xuXG4gICAgICBpZiAodXBkYXRlID09PSBudWxsKSB7XG4gICAgICAgIHBlbmRpbmdRdWV1ZSA9IHF1ZXVlLnNoYXJlZC5wZW5kaW5nO1xuXG4gICAgICAgIGlmIChwZW5kaW5nUXVldWUgPT09IG51bGwpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBBbiB1cGRhdGUgd2FzIHNjaGVkdWxlZCBmcm9tIGluc2lkZSBhIHJlZHVjZXIuIEFkZCB0aGUgbmV3XG4gICAgICAgICAgLy8gcGVuZGluZyB1cGRhdGVzIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QgYW5kIGtlZXAgcHJvY2Vzc2luZy5cbiAgICAgICAgICB2YXIgX2xhc3RQZW5kaW5nVXBkYXRlID0gcGVuZGluZ1F1ZXVlOyAvLyBJbnRlbnRpb25hbGx5IHVuc291bmQuIFBlbmRpbmcgdXBkYXRlcyBmb3JtIGEgY2lyY3VsYXIgbGlzdCwgYnV0IHdlXG4gICAgICAgICAgLy8gdW5yYXZlbCB0aGVtIHdoZW4gdHJhbnNmZXJyaW5nIHRoZW0gdG8gdGhlIGJhc2UgcXVldWUuXG5cbiAgICAgICAgICB2YXIgX2ZpcnN0UGVuZGluZ1VwZGF0ZSA9IF9sYXN0UGVuZGluZ1VwZGF0ZS5uZXh0O1xuICAgICAgICAgIF9sYXN0UGVuZGluZ1VwZGF0ZS5uZXh0ID0gbnVsbDtcbiAgICAgICAgICB1cGRhdGUgPSBfZmlyc3RQZW5kaW5nVXBkYXRlO1xuICAgICAgICAgIHF1ZXVlLmxhc3RCYXNlVXBkYXRlID0gX2xhc3RQZW5kaW5nVXBkYXRlO1xuICAgICAgICAgIHF1ZXVlLnNoYXJlZC5wZW5kaW5nID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gd2hpbGUgKHRydWUpO1xuXG4gICAgaWYgKG5ld0xhc3RCYXNlVXBkYXRlID09PSBudWxsKSB7XG4gICAgICBuZXdCYXNlU3RhdGUgPSBuZXdTdGF0ZTtcbiAgICB9XG5cbiAgICBxdWV1ZS5iYXNlU3RhdGUgPSBuZXdCYXNlU3RhdGU7XG4gICAgcXVldWUuZmlyc3RCYXNlVXBkYXRlID0gbmV3Rmlyc3RCYXNlVXBkYXRlO1xuICAgIHF1ZXVlLmxhc3RCYXNlVXBkYXRlID0gbmV3TGFzdEJhc2VVcGRhdGU7IC8vIFNldCB0aGUgcmVtYWluaW5nIGV4cGlyYXRpb24gdGltZSB0byBiZSB3aGF0ZXZlciBpcyByZW1haW5pbmcgaW4gdGhlIHF1ZXVlLlxuICAgIC8vIFRoaXMgc2hvdWxkIGJlIGZpbmUgYmVjYXVzZSB0aGUgb25seSB0d28gb3RoZXIgdGhpbmdzIHRoYXQgY29udHJpYnV0ZSB0b1xuICAgIC8vIGV4cGlyYXRpb24gdGltZSBhcmUgcHJvcHMgYW5kIGNvbnRleHQuIFdlJ3JlIGFscmVhZHkgaW4gdGhlIG1pZGRsZSBvZiB0aGVcbiAgICAvLyBiZWdpbiBwaGFzZSBieSB0aGUgdGltZSB3ZSBzdGFydCBwcm9jZXNzaW5nIHRoZSBxdWV1ZSwgc28gd2UndmUgYWxyZWFkeVxuICAgIC8vIGRlYWx0IHdpdGggdGhlIHByb3BzLiBDb250ZXh0IGluIGNvbXBvbmVudHMgdGhhdCBzcGVjaWZ5XG4gICAgLy8gc2hvdWxkQ29tcG9uZW50VXBkYXRlIGlzIHRyaWNreTsgYnV0IHdlJ2xsIGhhdmUgdG8gYWNjb3VudCBmb3JcbiAgICAvLyB0aGF0IHJlZ2FyZGxlc3MuXG5cbiAgICBtYXJrU2tpcHBlZFVwZGF0ZUxhbmVzKG5ld0xhbmVzKTtcbiAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IG5ld0xhbmVzO1xuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBuZXdTdGF0ZTtcbiAgfVxuXG4gIHtcbiAgICBjdXJyZW50bHlQcm9jZXNzaW5nUXVldWUgPSBudWxsO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNhbGxDYWxsYmFjayhjYWxsYmFjaywgY29udGV4dCkge1xuICBpZiAoISh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiSW52YWxpZCBhcmd1bWVudCBwYXNzZWQgYXMgY2FsbGJhY2suIEV4cGVjdGVkIGEgZnVuY3Rpb24uIEluc3RlYWQgcmVjZWl2ZWQ6IFwiICsgY2FsbGJhY2sgKTtcbiAgICB9XG4gIH1cblxuICBjYWxsYmFjay5jYWxsKGNvbnRleHQpO1xufVxuXG5mdW5jdGlvbiByZXNldEhhc0ZvcmNlVXBkYXRlQmVmb3JlUHJvY2Vzc2luZygpIHtcbiAgaGFzRm9yY2VVcGRhdGUgPSBmYWxzZTtcbn1cbmZ1bmN0aW9uIGNoZWNrSGFzRm9yY2VVcGRhdGVBZnRlclByb2Nlc3NpbmcoKSB7XG4gIHJldHVybiBoYXNGb3JjZVVwZGF0ZTtcbn1cbmZ1bmN0aW9uIGNvbW1pdFVwZGF0ZVF1ZXVlKGZpbmlzaGVkV29yaywgZmluaXNoZWRRdWV1ZSwgaW5zdGFuY2UpIHtcbiAgLy8gQ29tbWl0IHRoZSBlZmZlY3RzXG4gIHZhciBlZmZlY3RzID0gZmluaXNoZWRRdWV1ZS5lZmZlY3RzO1xuICBmaW5pc2hlZFF1ZXVlLmVmZmVjdHMgPSBudWxsO1xuXG4gIGlmIChlZmZlY3RzICE9PSBudWxsKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlZmZlY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZWZmZWN0ID0gZWZmZWN0c1tpXTtcbiAgICAgIHZhciBjYWxsYmFjayA9IGVmZmVjdC5jYWxsYmFjaztcblxuICAgICAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICAgIGVmZmVjdC5jYWxsYmFjayA9IG51bGw7XG4gICAgICAgIGNhbGxDYWxsYmFjayhjYWxsYmFjaywgaW5zdGFuY2UpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgZmFrZUludGVybmFsSW5zdGFuY2UgPSB7fTtcbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTsgLy8gUmVhY3QuQ29tcG9uZW50IHVzZXMgYSBzaGFyZWQgZnJvemVuIG9iamVjdCBieSBkZWZhdWx0LlxuLy8gV2UnbGwgdXNlIGl0IHRvIGRldGVybWluZSB3aGV0aGVyIHdlIG5lZWQgdG8gaW5pdGlhbGl6ZSBsZWdhY3kgcmVmcy5cblxudmFyIGVtcHR5UmVmc09iamVjdCA9IG5ldyBSZWFjdC5Db21wb25lbnQoKS5yZWZzO1xudmFyIGRpZFdhcm5BYm91dFN0YXRlQXNzaWdubWVudEZvckNvbXBvbmVudDtcbnZhciBkaWRXYXJuQWJvdXRVbmluaXRpYWxpemVkU3RhdGU7XG52YXIgZGlkV2FybkFib3V0R2V0U25hcHNob3RCZWZvcmVVcGRhdGVXaXRob3V0RGlkVXBkYXRlO1xudmFyIGRpZFdhcm5BYm91dExlZ2FjeUxpZmVjeWNsZXNBbmREZXJpdmVkU3RhdGU7XG52YXIgZGlkV2FybkFib3V0VW5kZWZpbmVkRGVyaXZlZFN0YXRlO1xudmFyIHdhcm5PblVuZGVmaW5lZERlcml2ZWRTdGF0ZTtcbnZhciB3YXJuT25JbnZhbGlkQ2FsbGJhY2s7XG52YXIgZGlkV2FybkFib3V0RGlyZWN0bHlBc3NpZ25pbmdQcm9wc1RvU3RhdGU7XG52YXIgZGlkV2FybkFib3V0Q29udGV4dFR5cGVBbmRDb250ZXh0VHlwZXM7XG52YXIgZGlkV2FybkFib3V0SW52YWxpZGF0ZUNvbnRleHRUeXBlO1xuXG57XG4gIGRpZFdhcm5BYm91dFN0YXRlQXNzaWdubWVudEZvckNvbXBvbmVudCA9IG5ldyBTZXQoKTtcbiAgZGlkV2FybkFib3V0VW5pbml0aWFsaXplZFN0YXRlID0gbmV3IFNldCgpO1xuICBkaWRXYXJuQWJvdXRHZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZVdpdGhvdXREaWRVcGRhdGUgPSBuZXcgU2V0KCk7XG4gIGRpZFdhcm5BYm91dExlZ2FjeUxpZmVjeWNsZXNBbmREZXJpdmVkU3RhdGUgPSBuZXcgU2V0KCk7XG4gIGRpZFdhcm5BYm91dERpcmVjdGx5QXNzaWduaW5nUHJvcHNUb1N0YXRlID0gbmV3IFNldCgpO1xuICBkaWRXYXJuQWJvdXRVbmRlZmluZWREZXJpdmVkU3RhdGUgPSBuZXcgU2V0KCk7XG4gIGRpZFdhcm5BYm91dENvbnRleHRUeXBlQW5kQ29udGV4dFR5cGVzID0gbmV3IFNldCgpO1xuICBkaWRXYXJuQWJvdXRJbnZhbGlkYXRlQ29udGV4dFR5cGUgPSBuZXcgU2V0KCk7XG4gIHZhciBkaWRXYXJuT25JbnZhbGlkQ2FsbGJhY2sgPSBuZXcgU2V0KCk7XG5cbiAgd2Fybk9uSW52YWxpZENhbGxiYWNrID0gZnVuY3Rpb24gKGNhbGxiYWNrLCBjYWxsZXJOYW1lKSB7XG4gICAgaWYgKGNhbGxiYWNrID09PSBudWxsIHx8IHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBrZXkgPSBjYWxsZXJOYW1lICsgJ18nICsgY2FsbGJhY2s7XG5cbiAgICBpZiAoIWRpZFdhcm5PbkludmFsaWRDYWxsYmFjay5oYXMoa2V5KSkge1xuICAgICAgZGlkV2Fybk9uSW52YWxpZENhbGxiYWNrLmFkZChrZXkpO1xuXG4gICAgICBlcnJvcignJXMoLi4uKTogRXhwZWN0ZWQgdGhlIGxhc3Qgb3B0aW9uYWwgYGNhbGxiYWNrYCBhcmd1bWVudCB0byBiZSBhICcgKyAnZnVuY3Rpb24uIEluc3RlYWQgcmVjZWl2ZWQ6ICVzLicsIGNhbGxlck5hbWUsIGNhbGxiYWNrKTtcbiAgICB9XG4gIH07XG5cbiAgd2Fybk9uVW5kZWZpbmVkRGVyaXZlZFN0YXRlID0gZnVuY3Rpb24gKHR5cGUsIHBhcnRpYWxTdGF0ZSkge1xuICAgIGlmIChwYXJ0aWFsU3RhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKHR5cGUpIHx8ICdDb21wb25lbnQnO1xuXG4gICAgICBpZiAoIWRpZFdhcm5BYm91dFVuZGVmaW5lZERlcml2ZWRTdGF0ZS5oYXMoY29tcG9uZW50TmFtZSkpIHtcbiAgICAgICAgZGlkV2FybkFib3V0VW5kZWZpbmVkRGVyaXZlZFN0YXRlLmFkZChjb21wb25lbnROYW1lKTtcblxuICAgICAgICBlcnJvcignJXMuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKCk6IEEgdmFsaWQgc3RhdGUgb2JqZWN0IChvciBudWxsKSBtdXN0IGJlIHJldHVybmVkLiAnICsgJ1lvdSBoYXZlIHJldHVybmVkIHVuZGVmaW5lZC4nLCBjb21wb25lbnROYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH07IC8vIFRoaXMgaXMgc28gZ3Jvc3MgYnV0IGl0J3MgYXQgbGVhc3Qgbm9uLWNyaXRpY2FsIGFuZCBjYW4gYmUgcmVtb3ZlZCBpZlxuICAvLyBpdCBjYXVzZXMgcHJvYmxlbXMuIFRoaXMgaXMgbWVhbnQgdG8gZ2l2ZSBhIG5pY2VyIGVycm9yIG1lc3NhZ2UgZm9yXG4gIC8vIFJlYWN0RE9NMTUudW5zdGFibGVfcmVuZGVyU3VidHJlZUludG9Db250YWluZXIocmVhY3RET00xNkNvbXBvbmVudCxcbiAgLy8gLi4uKSkgd2hpY2ggb3RoZXJ3aXNlIHRocm93cyBhIFwiX3Byb2Nlc3NDaGlsZENvbnRleHQgaXMgbm90IGEgZnVuY3Rpb25cIlxuICAvLyBleGNlcHRpb24uXG5cblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZmFrZUludGVybmFsSW5zdGFuY2UsICdfcHJvY2Vzc0NoaWxkQ29udGV4dCcsIHtcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICB2YWx1ZTogZnVuY3Rpb24gKCkge1xuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiX3Byb2Nlc3NDaGlsZENvbnRleHQgaXMgbm90IGF2YWlsYWJsZSBpbiBSZWFjdCAxNisuIFRoaXMgbGlrZWx5IG1lYW5zIHlvdSBoYXZlIG11bHRpcGxlIGNvcGllcyBvZiBSZWFjdCBhbmQgYXJlIGF0dGVtcHRpbmcgdG8gbmVzdCBhIFJlYWN0IDE1IHRyZWUgaW5zaWRlIGEgUmVhY3QgMTYgdHJlZSB1c2luZyB1bnN0YWJsZV9yZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lciwgd2hpY2ggaXNuJ3Qgc3VwcG9ydGVkLiBUcnkgdG8gbWFrZSBzdXJlIHlvdSBoYXZlIG9ubHkgb25lIGNvcHkgb2YgUmVhY3QgKGFuZCBpZGVhbGx5LCBzd2l0Y2ggdG8gUmVhY3RET00uY3JlYXRlUG9ydGFsKS5cIiApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgT2JqZWN0LmZyZWV6ZShmYWtlSW50ZXJuYWxJbnN0YW5jZSk7XG59XG5cbmZ1bmN0aW9uIGFwcGx5RGVyaXZlZFN0YXRlRnJvbVByb3BzKHdvcmtJblByb2dyZXNzLCBjdG9yLCBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMsIG5leHRQcm9wcykge1xuICB2YXIgcHJldlN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcblxuICB7XG4gICAgaWYgKCB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgZGlzYWJsZUxvZ3MoKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gSW52b2tlIHRoZSBmdW5jdGlvbiBhbiBleHRyYSB0aW1lIHRvIGhlbHAgZGV0ZWN0IHNpZGUtZWZmZWN0cy5cbiAgICAgICAgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKG5leHRQcm9wcywgcHJldlN0YXRlKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHJlZW5hYmxlTG9ncygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBwYXJ0aWFsU3RhdGUgPSBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMobmV4dFByb3BzLCBwcmV2U3RhdGUpO1xuXG4gIHtcbiAgICB3YXJuT25VbmRlZmluZWREZXJpdmVkU3RhdGUoY3RvciwgcGFydGlhbFN0YXRlKTtcbiAgfSAvLyBNZXJnZSB0aGUgcGFydGlhbCBzdGF0ZSBhbmQgdGhlIHByZXZpb3VzIHN0YXRlLlxuXG5cbiAgdmFyIG1lbW9pemVkU3RhdGUgPSBwYXJ0aWFsU3RhdGUgPT09IG51bGwgfHwgcGFydGlhbFN0YXRlID09PSB1bmRlZmluZWQgPyBwcmV2U3RhdGUgOiBfYXNzaWduKHt9LCBwcmV2U3RhdGUsIHBhcnRpYWxTdGF0ZSk7XG4gIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBtZW1vaXplZFN0YXRlOyAvLyBPbmNlIHRoZSB1cGRhdGUgcXVldWUgaXMgZW1wdHksIHBlcnNpc3QgdGhlIGRlcml2ZWQgc3RhdGUgb250byB0aGVcbiAgLy8gYmFzZSBzdGF0ZS5cblxuICBpZiAod29ya0luUHJvZ3Jlc3MubGFuZXMgPT09IE5vTGFuZXMpIHtcbiAgICAvLyBRdWV1ZSBpcyBhbHdheXMgbm9uLW51bGwgZm9yIGNsYXNzZXNcbiAgICB2YXIgdXBkYXRlUXVldWUgPSB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZTtcbiAgICB1cGRhdGVRdWV1ZS5iYXNlU3RhdGUgPSBtZW1vaXplZFN0YXRlO1xuICB9XG59XG52YXIgY2xhc3NDb21wb25lbnRVcGRhdGVyID0ge1xuICBpc01vdW50ZWQ6IGlzTW91bnRlZCxcbiAgZW5xdWV1ZVNldFN0YXRlOiBmdW5jdGlvbiAoaW5zdCwgcGF5bG9hZCwgY2FsbGJhY2spIHtcbiAgICB2YXIgZmliZXIgPSBnZXQoaW5zdCk7XG4gICAgdmFyIGV2ZW50VGltZSA9IHJlcXVlc3RFdmVudFRpbWUoKTtcbiAgICB2YXIgbGFuZSA9IHJlcXVlc3RVcGRhdGVMYW5lKGZpYmVyKTtcbiAgICB2YXIgdXBkYXRlID0gY3JlYXRlVXBkYXRlKGV2ZW50VGltZSwgbGFuZSk7XG4gICAgdXBkYXRlLnBheWxvYWQgPSBwYXlsb2FkO1xuXG4gICAgaWYgKGNhbGxiYWNrICE9PSB1bmRlZmluZWQgJiYgY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgIHtcbiAgICAgICAgd2Fybk9uSW52YWxpZENhbGxiYWNrKGNhbGxiYWNrLCAnc2V0U3RhdGUnKTtcbiAgICAgIH1cblxuICAgICAgdXBkYXRlLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgfVxuXG4gICAgZW5xdWV1ZVVwZGF0ZShmaWJlciwgdXBkYXRlKTtcbiAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIGxhbmUsIGV2ZW50VGltZSk7XG4gIH0sXG4gIGVucXVldWVSZXBsYWNlU3RhdGU6IGZ1bmN0aW9uIChpbnN0LCBwYXlsb2FkLCBjYWxsYmFjaykge1xuICAgIHZhciBmaWJlciA9IGdldChpbnN0KTtcbiAgICB2YXIgZXZlbnRUaW1lID0gcmVxdWVzdEV2ZW50VGltZSgpO1xuICAgIHZhciBsYW5lID0gcmVxdWVzdFVwZGF0ZUxhbmUoZmliZXIpO1xuICAgIHZhciB1cGRhdGUgPSBjcmVhdGVVcGRhdGUoZXZlbnRUaW1lLCBsYW5lKTtcbiAgICB1cGRhdGUudGFnID0gUmVwbGFjZVN0YXRlO1xuICAgIHVwZGF0ZS5wYXlsb2FkID0gcGF5bG9hZDtcblxuICAgIGlmIChjYWxsYmFjayAhPT0gdW5kZWZpbmVkICYmIGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICB7XG4gICAgICAgIHdhcm5PbkludmFsaWRDYWxsYmFjayhjYWxsYmFjaywgJ3JlcGxhY2VTdGF0ZScpO1xuICAgICAgfVxuXG4gICAgICB1cGRhdGUuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICB9XG5cbiAgICBlbnF1ZXVlVXBkYXRlKGZpYmVyLCB1cGRhdGUpO1xuICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgbGFuZSwgZXZlbnRUaW1lKTtcbiAgfSxcbiAgZW5xdWV1ZUZvcmNlVXBkYXRlOiBmdW5jdGlvbiAoaW5zdCwgY2FsbGJhY2spIHtcbiAgICB2YXIgZmliZXIgPSBnZXQoaW5zdCk7XG4gICAgdmFyIGV2ZW50VGltZSA9IHJlcXVlc3RFdmVudFRpbWUoKTtcbiAgICB2YXIgbGFuZSA9IHJlcXVlc3RVcGRhdGVMYW5lKGZpYmVyKTtcbiAgICB2YXIgdXBkYXRlID0gY3JlYXRlVXBkYXRlKGV2ZW50VGltZSwgbGFuZSk7XG4gICAgdXBkYXRlLnRhZyA9IEZvcmNlVXBkYXRlO1xuXG4gICAgaWYgKGNhbGxiYWNrICE9PSB1bmRlZmluZWQgJiYgY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgIHtcbiAgICAgICAgd2Fybk9uSW52YWxpZENhbGxiYWNrKGNhbGxiYWNrLCAnZm9yY2VVcGRhdGUnKTtcbiAgICAgIH1cblxuICAgICAgdXBkYXRlLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgfVxuXG4gICAgZW5xdWV1ZVVwZGF0ZShmaWJlciwgdXBkYXRlKTtcbiAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIGxhbmUsIGV2ZW50VGltZSk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGNoZWNrU2hvdWxkQ29tcG9uZW50VXBkYXRlKHdvcmtJblByb2dyZXNzLCBjdG9yLCBvbGRQcm9wcywgbmV3UHJvcHMsIG9sZFN0YXRlLCBuZXdTdGF0ZSwgbmV4dENvbnRleHQpIHtcbiAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuXG4gIGlmICh0eXBlb2YgaW5zdGFuY2Uuc2hvdWxkQ29tcG9uZW50VXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAge1xuICAgICAgaWYgKCB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgICBkaXNhYmxlTG9ncygpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gSW52b2tlIHRoZSBmdW5jdGlvbiBhbiBleHRyYSB0aW1lIHRvIGhlbHAgZGV0ZWN0IHNpZGUtZWZmZWN0cy5cbiAgICAgICAgICBpbnN0YW5jZS5zaG91bGRDb21wb25lbnRVcGRhdGUobmV3UHJvcHMsIG5ld1N0YXRlLCBuZXh0Q29udGV4dCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc2hvdWxkVXBkYXRlID0gaW5zdGFuY2Uuc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5ld1Byb3BzLCBuZXdTdGF0ZSwgbmV4dENvbnRleHQpO1xuXG4gICAge1xuICAgICAgaWYgKHNob3VsZFVwZGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGVycm9yKCclcy5zaG91bGRDb21wb25lbnRVcGRhdGUoKTogUmV0dXJuZWQgdW5kZWZpbmVkIGluc3RlYWQgb2YgYSAnICsgJ2Jvb2xlYW4gdmFsdWUuIE1ha2Ugc3VyZSB0byByZXR1cm4gdHJ1ZSBvciBmYWxzZS4nLCBnZXRDb21wb25lbnROYW1lKGN0b3IpIHx8ICdDb21wb25lbnQnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc2hvdWxkVXBkYXRlO1xuICB9XG5cbiAgaWYgKGN0b3IucHJvdG90eXBlICYmIGN0b3IucHJvdG90eXBlLmlzUHVyZVJlYWN0Q29tcG9uZW50KSB7XG4gICAgcmV0dXJuICFzaGFsbG93RXF1YWwob2xkUHJvcHMsIG5ld1Byb3BzKSB8fCAhc2hhbGxvd0VxdWFsKG9sZFN0YXRlLCBuZXdTdGF0ZSk7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gY2hlY2tDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBjdG9yLCBuZXdQcm9wcykge1xuICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG5cbiAge1xuICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZShjdG9yKSB8fCAnQ29tcG9uZW50JztcbiAgICB2YXIgcmVuZGVyUHJlc2VudCA9IGluc3RhbmNlLnJlbmRlcjtcblxuICAgIGlmICghcmVuZGVyUHJlc2VudCkge1xuICAgICAgaWYgKGN0b3IucHJvdG90eXBlICYmIHR5cGVvZiBjdG9yLnByb3RvdHlwZS5yZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZXJyb3IoJyVzKC4uLik6IE5vIGByZW5kZXJgIG1ldGhvZCBmb3VuZCBvbiB0aGUgcmV0dXJuZWQgY29tcG9uZW50ICcgKyAnaW5zdGFuY2U6IGRpZCB5b3UgYWNjaWRlbnRhbGx5IHJldHVybiBhbiBvYmplY3QgZnJvbSB0aGUgY29uc3RydWN0b3I/JywgbmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlcnJvcignJXMoLi4uKTogTm8gYHJlbmRlcmAgbWV0aG9kIGZvdW5kIG9uIHRoZSByZXR1cm5lZCBjb21wb25lbnQgJyArICdpbnN0YW5jZTogeW91IG1heSBoYXZlIGZvcmdvdHRlbiB0byBkZWZpbmUgYHJlbmRlcmAuJywgbmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGluc3RhbmNlLmdldEluaXRpYWxTdGF0ZSAmJiAhaW5zdGFuY2UuZ2V0SW5pdGlhbFN0YXRlLmlzUmVhY3RDbGFzc0FwcHJvdmVkICYmICFpbnN0YW5jZS5zdGF0ZSkge1xuICAgICAgZXJyb3IoJ2dldEluaXRpYWxTdGF0ZSB3YXMgZGVmaW5lZCBvbiAlcywgYSBwbGFpbiBKYXZhU2NyaXB0IGNsYXNzLiAnICsgJ1RoaXMgaXMgb25seSBzdXBwb3J0ZWQgZm9yIGNsYXNzZXMgY3JlYXRlZCB1c2luZyBSZWFjdC5jcmVhdGVDbGFzcy4gJyArICdEaWQgeW91IG1lYW4gdG8gZGVmaW5lIGEgc3RhdGUgcHJvcGVydHkgaW5zdGVhZD8nLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAoaW5zdGFuY2UuZ2V0RGVmYXVsdFByb3BzICYmICFpbnN0YW5jZS5nZXREZWZhdWx0UHJvcHMuaXNSZWFjdENsYXNzQXBwcm92ZWQpIHtcbiAgICAgIGVycm9yKCdnZXREZWZhdWx0UHJvcHMgd2FzIGRlZmluZWQgb24gJXMsIGEgcGxhaW4gSmF2YVNjcmlwdCBjbGFzcy4gJyArICdUaGlzIGlzIG9ubHkgc3VwcG9ydGVkIGZvciBjbGFzc2VzIGNyZWF0ZWQgdXNpbmcgUmVhY3QuY3JlYXRlQ2xhc3MuICcgKyAnVXNlIGEgc3RhdGljIHByb3BlcnR5IHRvIGRlZmluZSBkZWZhdWx0UHJvcHMgaW5zdGVhZC4nLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAoaW5zdGFuY2UucHJvcFR5cGVzKSB7XG4gICAgICBlcnJvcigncHJvcFR5cGVzIHdhcyBkZWZpbmVkIGFzIGFuIGluc3RhbmNlIHByb3BlcnR5IG9uICVzLiBVc2UgYSBzdGF0aWMgJyArICdwcm9wZXJ0eSB0byBkZWZpbmUgcHJvcFR5cGVzIGluc3RlYWQuJywgbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKGluc3RhbmNlLmNvbnRleHRUeXBlKSB7XG4gICAgICBlcnJvcignY29udGV4dFR5cGUgd2FzIGRlZmluZWQgYXMgYW4gaW5zdGFuY2UgcHJvcGVydHkgb24gJXMuIFVzZSBhIHN0YXRpYyAnICsgJ3Byb3BlcnR5IHRvIGRlZmluZSBjb250ZXh0VHlwZSBpbnN0ZWFkLicsIG5hbWUpO1xuICAgIH1cblxuICAgIHtcbiAgICAgIGlmIChpbnN0YW5jZS5jb250ZXh0VHlwZXMpIHtcbiAgICAgICAgZXJyb3IoJ2NvbnRleHRUeXBlcyB3YXMgZGVmaW5lZCBhcyBhbiBpbnN0YW5jZSBwcm9wZXJ0eSBvbiAlcy4gVXNlIGEgc3RhdGljICcgKyAncHJvcGVydHkgdG8gZGVmaW5lIGNvbnRleHRUeXBlcyBpbnN0ZWFkLicsIG5hbWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY3Rvci5jb250ZXh0VHlwZSAmJiBjdG9yLmNvbnRleHRUeXBlcyAmJiAhZGlkV2FybkFib3V0Q29udGV4dFR5cGVBbmRDb250ZXh0VHlwZXMuaGFzKGN0b3IpKSB7XG4gICAgICAgIGRpZFdhcm5BYm91dENvbnRleHRUeXBlQW5kQ29udGV4dFR5cGVzLmFkZChjdG9yKTtcblxuICAgICAgICBlcnJvcignJXMgZGVjbGFyZXMgYm90aCBjb250ZXh0VHlwZXMgYW5kIGNvbnRleHRUeXBlIHN0YXRpYyBwcm9wZXJ0aWVzLiAnICsgJ1RoZSBsZWdhY3kgY29udGV4dFR5cGVzIHByb3BlcnR5IHdpbGwgYmUgaWdub3JlZC4nLCBuYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFNob3VsZFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJyVzIGhhcyBhIG1ldGhvZCBjYWxsZWQgJyArICdjb21wb25lbnRTaG91bGRVcGRhdGUoKS4gRGlkIHlvdSBtZWFuIHNob3VsZENvbXBvbmVudFVwZGF0ZSgpPyAnICsgJ1RoZSBuYW1lIGlzIHBocmFzZWQgYXMgYSBxdWVzdGlvbiBiZWNhdXNlIHRoZSBmdW5jdGlvbiBpcyAnICsgJ2V4cGVjdGVkIHRvIHJldHVybiBhIHZhbHVlLicsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmIChjdG9yLnByb3RvdHlwZSAmJiBjdG9yLnByb3RvdHlwZS5pc1B1cmVSZWFjdENvbXBvbmVudCAmJiB0eXBlb2YgaW5zdGFuY2Uuc2hvdWxkQ29tcG9uZW50VXBkYXRlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgZXJyb3IoJyVzIGhhcyBhIG1ldGhvZCBjYWxsZWQgc2hvdWxkQ29tcG9uZW50VXBkYXRlKCkuICcgKyAnc2hvdWxkQ29tcG9uZW50VXBkYXRlIHNob3VsZCBub3QgYmUgdXNlZCB3aGVuIGV4dGVuZGluZyBSZWFjdC5QdXJlQ29tcG9uZW50LiAnICsgJ1BsZWFzZSBleHRlbmQgUmVhY3QuQ29tcG9uZW50IGlmIHNob3VsZENvbXBvbmVudFVwZGF0ZSBpcyB1c2VkLicsIGdldENvbXBvbmVudE5hbWUoY3RvcikgfHwgJ0EgcHVyZSBjb21wb25lbnQnKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZFVubW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCclcyBoYXMgYSBtZXRob2QgY2FsbGVkICcgKyAnY29tcG9uZW50RGlkVW5tb3VudCgpLiBCdXQgdGhlcmUgaXMgbm8gc3VjaCBsaWZlY3ljbGUgbWV0aG9kLiAnICsgJ0RpZCB5b3UgbWVhbiBjb21wb25lbnRXaWxsVW5tb3VudCgpPycsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkUmVjZWl2ZVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignJXMgaGFzIGEgbWV0aG9kIGNhbGxlZCAnICsgJ2NvbXBvbmVudERpZFJlY2VpdmVQcm9wcygpLiBCdXQgdGhlcmUgaXMgbm8gc3VjaCBsaWZlY3ljbGUgbWV0aG9kLiAnICsgJ0lmIHlvdSBtZWFudCB0byB1cGRhdGUgdGhlIHN0YXRlIGluIHJlc3BvbnNlIHRvIGNoYW5naW5nIHByb3BzLCAnICsgJ3VzZSBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKCkuIElmIHlvdSBtZWFudCB0byBmZXRjaCBkYXRhIG9yICcgKyAncnVuIHNpZGUtZWZmZWN0cyBvciBtdXRhdGlvbnMgYWZ0ZXIgUmVhY3QgaGFzIHVwZGF0ZWQgdGhlIFVJLCB1c2UgY29tcG9uZW50RGlkVXBkYXRlKCkuJywgbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjaWV2ZVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignJXMgaGFzIGEgbWV0aG9kIGNhbGxlZCAnICsgJ2NvbXBvbmVudFdpbGxSZWNpZXZlUHJvcHMoKS4gRGlkIHlvdSBtZWFuIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoKT8nLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjaWV2ZVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignJXMgaGFzIGEgbWV0aG9kIGNhbGxlZCAnICsgJ1VOU0FGRV9jb21wb25lbnRXaWxsUmVjaWV2ZVByb3BzKCkuIERpZCB5b3UgbWVhbiBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcygpPycsIG5hbWUpO1xuICAgIH1cblxuICAgIHZhciBoYXNNdXRhdGVkUHJvcHMgPSBpbnN0YW5jZS5wcm9wcyAhPT0gbmV3UHJvcHM7XG5cbiAgICBpZiAoaW5zdGFuY2UucHJvcHMgIT09IHVuZGVmaW5lZCAmJiBoYXNNdXRhdGVkUHJvcHMpIHtcbiAgICAgIGVycm9yKCclcyguLi4pOiBXaGVuIGNhbGxpbmcgc3VwZXIoKSBpbiBgJXNgLCBtYWtlIHN1cmUgdG8gcGFzcyAnICsgXCJ1cCB0aGUgc2FtZSBwcm9wcyB0aGF0IHlvdXIgY29tcG9uZW50J3MgY29uc3RydWN0b3Igd2FzIHBhc3NlZC5cIiwgbmFtZSwgbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKGluc3RhbmNlLmRlZmF1bHRQcm9wcykge1xuICAgICAgZXJyb3IoJ1NldHRpbmcgZGVmYXVsdFByb3BzIGFzIGFuIGluc3RhbmNlIHByb3BlcnR5IG9uICVzIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIHdpbGwgYmUgaWdub3JlZC4nICsgJyBJbnN0ZWFkLCBkZWZpbmUgZGVmYXVsdFByb3BzIGFzIGEgc3RhdGljIHByb3BlcnR5IG9uICVzLicsIG5hbWUsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZFVwZGF0ZSAhPT0gJ2Z1bmN0aW9uJyAmJiAhZGlkV2FybkFib3V0R2V0U25hcHNob3RCZWZvcmVVcGRhdGVXaXRob3V0RGlkVXBkYXRlLmhhcyhjdG9yKSkge1xuICAgICAgZGlkV2FybkFib3V0R2V0U25hcHNob3RCZWZvcmVVcGRhdGVXaXRob3V0RGlkVXBkYXRlLmFkZChjdG9yKTtcblxuICAgICAgZXJyb3IoJyVzOiBnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSgpIHNob3VsZCBiZSB1c2VkIHdpdGggY29tcG9uZW50RGlkVXBkYXRlKCkuICcgKyAnVGhpcyBjb21wb25lbnQgZGVmaW5lcyBnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSgpIG9ubHkuJywgZ2V0Q29tcG9uZW50TmFtZShjdG9yKSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCclczogZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKCkgaXMgZGVmaW5lZCBhcyBhbiBpbnN0YW5jZSBtZXRob2QgJyArICdhbmQgd2lsbCBiZSBpZ25vcmVkLiBJbnN0ZWFkLCBkZWNsYXJlIGl0IGFzIGEgc3RhdGljIG1ldGhvZC4nLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJyVzOiBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IoKSBpcyBkZWZpbmVkIGFzIGFuIGluc3RhbmNlIG1ldGhvZCAnICsgJ2FuZCB3aWxsIGJlIGlnbm9yZWQuIEluc3RlYWQsIGRlY2xhcmUgaXQgYXMgYSBzdGF0aWMgbWV0aG9kLicsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY3Rvci5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJyVzOiBnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSgpIGlzIGRlZmluZWQgYXMgYSBzdGF0aWMgbWV0aG9kICcgKyAnYW5kIHdpbGwgYmUgaWdub3JlZC4gSW5zdGVhZCwgZGVjbGFyZSBpdCBhcyBhbiBpbnN0YW5jZSBtZXRob2QuJywgbmFtZSk7XG4gICAgfVxuXG4gICAgdmFyIF9zdGF0ZSA9IGluc3RhbmNlLnN0YXRlO1xuXG4gICAgaWYgKF9zdGF0ZSAmJiAodHlwZW9mIF9zdGF0ZSAhPT0gJ29iamVjdCcgfHwgaXNBcnJheShfc3RhdGUpKSkge1xuICAgICAgZXJyb3IoJyVzLnN0YXRlOiBtdXN0IGJlIHNldCB0byBhbiBvYmplY3Qgb3IgbnVsbCcsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuZ2V0Q2hpbGRDb250ZXh0ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBjdG9yLmNoaWxkQ29udGV4dFR5cGVzICE9PSAnb2JqZWN0Jykge1xuICAgICAgZXJyb3IoJyVzLmdldENoaWxkQ29udGV4dCgpOiBjaGlsZENvbnRleHRUeXBlcyBtdXN0IGJlIGRlZmluZWQgaW4gb3JkZXIgdG8gJyArICd1c2UgZ2V0Q2hpbGRDb250ZXh0KCkuJywgbmFtZSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFkb3B0Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UudXBkYXRlciA9IGNsYXNzQ29tcG9uZW50VXBkYXRlcjtcbiAgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID0gaW5zdGFuY2U7IC8vIFRoZSBpbnN0YW5jZSBuZWVkcyBhY2Nlc3MgdG8gdGhlIGZpYmVyIHNvIHRoYXQgaXQgY2FuIHNjaGVkdWxlIHVwZGF0ZXNcblxuICBzZXQoaW5zdGFuY2UsIHdvcmtJblByb2dyZXNzKTtcblxuICB7XG4gICAgaW5zdGFuY2UuX3JlYWN0SW50ZXJuYWxJbnN0YW5jZSA9IGZha2VJbnRlcm5hbEluc3RhbmNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvbnN0cnVjdENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIGN0b3IsIHByb3BzKSB7XG4gIHZhciBpc0xlZ2FjeUNvbnRleHRDb25zdW1lciA9IGZhbHNlO1xuICB2YXIgdW5tYXNrZWRDb250ZXh0ID0gZW1wdHlDb250ZXh0T2JqZWN0O1xuICB2YXIgY29udGV4dCA9IGVtcHR5Q29udGV4dE9iamVjdDtcbiAgdmFyIGNvbnRleHRUeXBlID0gY3Rvci5jb250ZXh0VHlwZTtcblxuICB7XG4gICAgaWYgKCdjb250ZXh0VHlwZScgaW4gY3Rvcikge1xuICAgICAgdmFyIGlzVmFsaWQgPSAvLyBBbGxvdyBudWxsIGZvciBjb25kaXRpb25hbCBkZWNsYXJhdGlvblxuICAgICAgY29udGV4dFR5cGUgPT09IG51bGwgfHwgY29udGV4dFR5cGUgIT09IHVuZGVmaW5lZCAmJiBjb250ZXh0VHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFICYmIGNvbnRleHRUeXBlLl9jb250ZXh0ID09PSB1bmRlZmluZWQ7IC8vIE5vdCBhIDxDb250ZXh0LkNvbnN1bWVyPlxuXG4gICAgICBpZiAoIWlzVmFsaWQgJiYgIWRpZFdhcm5BYm91dEludmFsaWRhdGVDb250ZXh0VHlwZS5oYXMoY3RvcikpIHtcbiAgICAgICAgZGlkV2FybkFib3V0SW52YWxpZGF0ZUNvbnRleHRUeXBlLmFkZChjdG9yKTtcbiAgICAgICAgdmFyIGFkZGVuZHVtID0gJyc7XG5cbiAgICAgICAgaWYgKGNvbnRleHRUeXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBhZGRlbmR1bSA9ICcgSG93ZXZlciwgaXQgaXMgc2V0IHRvIHVuZGVmaW5lZC4gJyArICdUaGlzIGNhbiBiZSBjYXVzZWQgYnkgYSB0eXBvIG9yIGJ5IG1peGluZyB1cCBuYW1lZCBhbmQgZGVmYXVsdCBpbXBvcnRzLiAnICsgJ1RoaXMgY2FuIGFsc28gaGFwcGVuIGR1ZSB0byBhIGNpcmN1bGFyIGRlcGVuZGVuY3ksIHNvICcgKyAndHJ5IG1vdmluZyB0aGUgY3JlYXRlQ29udGV4dCgpIGNhbGwgdG8gYSBzZXBhcmF0ZSBmaWxlLic7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGNvbnRleHRUeXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgIGFkZGVuZHVtID0gJyBIb3dldmVyLCBpdCBpcyBzZXQgdG8gYSAnICsgdHlwZW9mIGNvbnRleHRUeXBlICsgJy4nO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHRUeXBlLiQkdHlwZW9mID09PSBSRUFDVF9QUk9WSURFUl9UWVBFKSB7XG4gICAgICAgICAgYWRkZW5kdW0gPSAnIERpZCB5b3UgYWNjaWRlbnRhbGx5IHBhc3MgdGhlIENvbnRleHQuUHJvdmlkZXIgaW5zdGVhZD8nO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHRUeXBlLl9jb250ZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyA8Q29udGV4dC5Db25zdW1lcj5cbiAgICAgICAgICBhZGRlbmR1bSA9ICcgRGlkIHlvdSBhY2NpZGVudGFsbHkgcGFzcyB0aGUgQ29udGV4dC5Db25zdW1lciBpbnN0ZWFkPyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWRkZW5kdW0gPSAnIEhvd2V2ZXIsIGl0IGlzIHNldCB0byBhbiBvYmplY3Qgd2l0aCBrZXlzIHsnICsgT2JqZWN0LmtleXMoY29udGV4dFR5cGUpLmpvaW4oJywgJykgKyAnfS4nO1xuICAgICAgICB9XG5cbiAgICAgICAgZXJyb3IoJyVzIGRlZmluZXMgYW4gaW52YWxpZCBjb250ZXh0VHlwZS4gJyArICdjb250ZXh0VHlwZSBzaG91bGQgcG9pbnQgdG8gdGhlIENvbnRleHQgb2JqZWN0IHJldHVybmVkIGJ5IFJlYWN0LmNyZWF0ZUNvbnRleHQoKS4lcycsIGdldENvbXBvbmVudE5hbWUoY3RvcikgfHwgJ0NvbXBvbmVudCcsIGFkZGVuZHVtKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIGNvbnRleHRUeXBlID09PSAnb2JqZWN0JyAmJiBjb250ZXh0VHlwZSAhPT0gbnVsbCkge1xuICAgIGNvbnRleHQgPSByZWFkQ29udGV4dChjb250ZXh0VHlwZSk7XG4gIH0gZWxzZSB7XG4gICAgdW5tYXNrZWRDb250ZXh0ID0gZ2V0VW5tYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCBjdG9yLCB0cnVlKTtcbiAgICB2YXIgY29udGV4dFR5cGVzID0gY3Rvci5jb250ZXh0VHlwZXM7XG4gICAgaXNMZWdhY3lDb250ZXh0Q29uc3VtZXIgPSBjb250ZXh0VHlwZXMgIT09IG51bGwgJiYgY29udGV4dFR5cGVzICE9PSB1bmRlZmluZWQ7XG4gICAgY29udGV4dCA9IGlzTGVnYWN5Q29udGV4dENvbnN1bWVyID8gZ2V0TWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgdW5tYXNrZWRDb250ZXh0KSA6IGVtcHR5Q29udGV4dE9iamVjdDtcbiAgfSAvLyBJbnN0YW50aWF0ZSB0d2ljZSB0byBoZWxwIGRldGVjdCBzaWRlLWVmZmVjdHMuXG5cblxuICB7XG4gICAgaWYgKCB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgZGlzYWJsZUxvZ3MoKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgbmV3IGN0b3IocHJvcHMsIGNvbnRleHQpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIGluc3RhbmNlID0gbmV3IGN0b3IocHJvcHMsIGNvbnRleHQpO1xuICB2YXIgc3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gaW5zdGFuY2Uuc3RhdGUgIT09IG51bGwgJiYgaW5zdGFuY2Uuc3RhdGUgIT09IHVuZGVmaW5lZCA/IGluc3RhbmNlLnN0YXRlIDogbnVsbDtcbiAgYWRvcHRDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBpbnN0YW5jZSk7XG5cbiAge1xuICAgIGlmICh0eXBlb2YgY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09ICdmdW5jdGlvbicgJiYgc3RhdGUgPT09IG51bGwpIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShjdG9yKSB8fCAnQ29tcG9uZW50JztcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRVbmluaXRpYWxpemVkU3RhdGUuaGFzKGNvbXBvbmVudE5hbWUpKSB7XG4gICAgICAgIGRpZFdhcm5BYm91dFVuaW5pdGlhbGl6ZWRTdGF0ZS5hZGQoY29tcG9uZW50TmFtZSk7XG5cbiAgICAgICAgZXJyb3IoJ2Alc2AgdXNlcyBgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzYCBidXQgaXRzIGluaXRpYWwgc3RhdGUgaXMgJyArICclcy4gVGhpcyBpcyBub3QgcmVjb21tZW5kZWQuIEluc3RlYWQsIGRlZmluZSB0aGUgaW5pdGlhbCBzdGF0ZSBieSAnICsgJ2Fzc2lnbmluZyBhbiBvYmplY3QgdG8gYHRoaXMuc3RhdGVgIGluIHRoZSBjb25zdHJ1Y3RvciBvZiBgJXNgLiAnICsgJ1RoaXMgZW5zdXJlcyB0aGF0IGBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHNgIGFyZ3VtZW50cyBoYXZlIGEgY29uc2lzdGVudCBzaGFwZS4nLCBjb21wb25lbnROYW1lLCBpbnN0YW5jZS5zdGF0ZSA9PT0gbnVsbCA/ICdudWxsJyA6ICd1bmRlZmluZWQnLCBjb21wb25lbnROYW1lKTtcbiAgICAgIH1cbiAgICB9IC8vIElmIG5ldyBjb21wb25lbnQgQVBJcyBhcmUgZGVmaW5lZCwgXCJ1bnNhZmVcIiBsaWZlY3ljbGVzIHdvbid0IGJlIGNhbGxlZC5cbiAgICAvLyBXYXJuIGFib3V0IHRoZXNlIGxpZmVjeWNsZXMgaWYgdGhleSBhcmUgcHJlc2VudC5cbiAgICAvLyBEb24ndCB3YXJuIGFib3V0IHJlYWN0LWxpZmVjeWNsZXMtY29tcGF0IHBvbHlmaWxsZWQgbWV0aG9kcyB0aG91Z2guXG5cblxuICAgIGlmICh0eXBlb2YgY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGluc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB2YXIgZm91bmRXaWxsTW91bnROYW1lID0gbnVsbDtcbiAgICAgIHZhciBmb3VuZFdpbGxSZWNlaXZlUHJvcHNOYW1lID0gbnVsbDtcbiAgICAgIHZhciBmb3VuZFdpbGxVcGRhdGVOYW1lID0gbnVsbDtcblxuICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicgJiYgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50Ll9fc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmcgIT09IHRydWUpIHtcbiAgICAgICAgZm91bmRXaWxsTW91bnROYW1lID0gJ2NvbXBvbmVudFdpbGxNb3VudCc7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGZvdW5kV2lsbE1vdW50TmFtZSA9ICdVTlNBRkVfY29tcG9uZW50V2lsbE1vdW50JztcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID09PSAnZnVuY3Rpb24nICYmIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMuX19zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZyAhPT0gdHJ1ZSkge1xuICAgICAgICBmb3VuZFdpbGxSZWNlaXZlUHJvcHNOYW1lID0gJ2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMnO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZm91bmRXaWxsUmVjZWl2ZVByb3BzTmFtZSA9ICdVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyc7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJyAmJiBpbnN0YW5jZS5jb21wb25lbnRXaWxsVXBkYXRlLl9fc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmcgIT09IHRydWUpIHtcbiAgICAgICAgZm91bmRXaWxsVXBkYXRlTmFtZSA9ICdjb21wb25lbnRXaWxsVXBkYXRlJztcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGZvdW5kV2lsbFVwZGF0ZU5hbWUgPSAnVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUnO1xuICAgICAgfVxuXG4gICAgICBpZiAoZm91bmRXaWxsTW91bnROYW1lICE9PSBudWxsIHx8IGZvdW5kV2lsbFJlY2VpdmVQcm9wc05hbWUgIT09IG51bGwgfHwgZm91bmRXaWxsVXBkYXRlTmFtZSAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgX2NvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKGN0b3IpIHx8ICdDb21wb25lbnQnO1xuXG4gICAgICAgIHZhciBuZXdBcGlOYW1lID0gdHlwZW9mIGN0b3IuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09PSAnZnVuY3Rpb24nID8gJ2dldERlcml2ZWRTdGF0ZUZyb21Qcm9wcygpJyA6ICdnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSgpJztcblxuICAgICAgICBpZiAoIWRpZFdhcm5BYm91dExlZ2FjeUxpZmVjeWNsZXNBbmREZXJpdmVkU3RhdGUuaGFzKF9jb21wb25lbnROYW1lKSkge1xuICAgICAgICAgIGRpZFdhcm5BYm91dExlZ2FjeUxpZmVjeWNsZXNBbmREZXJpdmVkU3RhdGUuYWRkKF9jb21wb25lbnROYW1lKTtcblxuICAgICAgICAgIGVycm9yKCdVbnNhZmUgbGVnYWN5IGxpZmVjeWNsZXMgd2lsbCBub3QgYmUgY2FsbGVkIGZvciBjb21wb25lbnRzIHVzaW5nIG5ldyBjb21wb25lbnQgQVBJcy5cXG5cXG4nICsgJyVzIHVzZXMgJXMgYnV0IGFsc28gY29udGFpbnMgdGhlIGZvbGxvd2luZyBsZWdhY3kgbGlmZWN5Y2xlczolcyVzJXNcXG5cXG4nICsgJ1RoZSBhYm92ZSBsaWZlY3ljbGVzIHNob3VsZCBiZSByZW1vdmVkLiBMZWFybiBtb3JlIGFib3V0IHRoaXMgd2FybmluZyBoZXJlOlxcbicgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3Vuc2FmZS1jb21wb25lbnQtbGlmZWN5Y2xlcycsIF9jb21wb25lbnROYW1lLCBuZXdBcGlOYW1lLCBmb3VuZFdpbGxNb3VudE5hbWUgIT09IG51bGwgPyBcIlxcbiAgXCIgKyBmb3VuZFdpbGxNb3VudE5hbWUgOiAnJywgZm91bmRXaWxsUmVjZWl2ZVByb3BzTmFtZSAhPT0gbnVsbCA/IFwiXFxuICBcIiArIGZvdW5kV2lsbFJlY2VpdmVQcm9wc05hbWUgOiAnJywgZm91bmRXaWxsVXBkYXRlTmFtZSAhPT0gbnVsbCA/IFwiXFxuICBcIiArIGZvdW5kV2lsbFVwZGF0ZU5hbWUgOiAnJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gLy8gQ2FjaGUgdW5tYXNrZWQgY29udGV4dCBzbyB3ZSBjYW4gYXZvaWQgcmVjcmVhdGluZyBtYXNrZWQgY29udGV4dCB1bmxlc3MgbmVjZXNzYXJ5LlxuICAvLyBSZWFjdEZpYmVyQ29udGV4dCB1c3VhbGx5IHVwZGF0ZXMgdGhpcyBjYWNoZSBidXQgY2FuJ3QgZm9yIG5ld2x5LWNyZWF0ZWQgaW5zdGFuY2VzLlxuXG5cbiAgaWYgKGlzTGVnYWN5Q29udGV4dENvbnN1bWVyKSB7XG4gICAgY2FjaGVDb250ZXh0KHdvcmtJblByb2dyZXNzLCB1bm1hc2tlZENvbnRleHQsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGluc3RhbmNlO1xufVxuXG5mdW5jdGlvbiBjYWxsQ29tcG9uZW50V2lsbE1vdW50KHdvcmtJblByb2dyZXNzLCBpbnN0YW5jZSkge1xuICB2YXIgb2xkU3RhdGUgPSBpbnN0YW5jZS5zdGF0ZTtcblxuICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudCgpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCgpO1xuICB9XG5cbiAgaWYgKG9sZFN0YXRlICE9PSBpbnN0YW5jZS5zdGF0ZSkge1xuICAgIHtcbiAgICAgIGVycm9yKCclcy5jb21wb25lbnRXaWxsTW91bnQoKTogQXNzaWduaW5nIGRpcmVjdGx5IHRvIHRoaXMuc3RhdGUgaXMgJyArIFwiZGVwcmVjYXRlZCAoZXhjZXB0IGluc2lkZSBhIGNvbXBvbmVudCdzIFwiICsgJ2NvbnN0cnVjdG9yKS4gVXNlIHNldFN0YXRlIGluc3RlYWQuJywgZ2V0Q29tcG9uZW50TmFtZSh3b3JrSW5Qcm9ncmVzcy50eXBlKSB8fCAnQ29tcG9uZW50Jyk7XG4gICAgfVxuXG4gICAgY2xhc3NDb21wb25lbnRVcGRhdGVyLmVucXVldWVSZXBsYWNlU3RhdGUoaW5zdGFuY2UsIGluc3RhbmNlLnN0YXRlLCBudWxsKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjYWxsQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyh3b3JrSW5Qcm9ncmVzcywgaW5zdGFuY2UsIG5ld1Byb3BzLCBuZXh0Q29udGV4dCkge1xuICB2YXIgb2xkU3RhdGUgPSBpbnN0YW5jZS5zdGF0ZTtcblxuICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5ld1Byb3BzLCBuZXh0Q29udGV4dCk7XG4gIH1cblxuICBpZiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV3UHJvcHMsIG5leHRDb250ZXh0KTtcbiAgfVxuXG4gIGlmIChpbnN0YW5jZS5zdGF0ZSAhPT0gb2xkU3RhdGUpIHtcbiAgICB7XG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUod29ya0luUHJvZ3Jlc3MudHlwZSkgfHwgJ0NvbXBvbmVudCc7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0U3RhdGVBc3NpZ25tZW50Rm9yQ29tcG9uZW50Lmhhcyhjb21wb25lbnROYW1lKSkge1xuICAgICAgICBkaWRXYXJuQWJvdXRTdGF0ZUFzc2lnbm1lbnRGb3JDb21wb25lbnQuYWRkKGNvbXBvbmVudE5hbWUpO1xuXG4gICAgICAgIGVycm9yKCclcy5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKCk6IEFzc2lnbmluZyBkaXJlY3RseSB0byAnICsgXCJ0aGlzLnN0YXRlIGlzIGRlcHJlY2F0ZWQgKGV4Y2VwdCBpbnNpZGUgYSBjb21wb25lbnQncyBcIiArICdjb25zdHJ1Y3RvcikuIFVzZSBzZXRTdGF0ZSBpbnN0ZWFkLicsIGNvbXBvbmVudE5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzQ29tcG9uZW50VXBkYXRlci5lbnF1ZXVlUmVwbGFjZVN0YXRlKGluc3RhbmNlLCBpbnN0YW5jZS5zdGF0ZSwgbnVsbCk7XG4gIH1cbn0gLy8gSW52b2tlcyB0aGUgbW91bnQgbGlmZS1jeWNsZXMgb24gYSBwcmV2aW91c2x5IG5ldmVyIHJlbmRlcmVkIGluc3RhbmNlLlxuXG5cbmZ1bmN0aW9uIG1vdW50Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgY3RvciwgbmV3UHJvcHMsIHJlbmRlckxhbmVzKSB7XG4gIHtcbiAgICBjaGVja0NsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIGN0b3IsIG5ld1Byb3BzKTtcbiAgfVxuXG4gIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgaW5zdGFuY2UucHJvcHMgPSBuZXdQcm9wcztcbiAgaW5zdGFuY2Uuc3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICBpbnN0YW5jZS5yZWZzID0gZW1wdHlSZWZzT2JqZWN0O1xuICBpbml0aWFsaXplVXBkYXRlUXVldWUod29ya0luUHJvZ3Jlc3MpO1xuICB2YXIgY29udGV4dFR5cGUgPSBjdG9yLmNvbnRleHRUeXBlO1xuXG4gIGlmICh0eXBlb2YgY29udGV4dFR5cGUgPT09ICdvYmplY3QnICYmIGNvbnRleHRUeXBlICE9PSBudWxsKSB7XG4gICAgaW5zdGFuY2UuY29udGV4dCA9IHJlYWRDb250ZXh0KGNvbnRleHRUeXBlKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgdW5tYXNrZWRDb250ZXh0ID0gZ2V0VW5tYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCBjdG9yLCB0cnVlKTtcbiAgICBpbnN0YW5jZS5jb250ZXh0ID0gZ2V0TWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgdW5tYXNrZWRDb250ZXh0KTtcbiAgfVxuXG4gIHtcbiAgICBpZiAoaW5zdGFuY2Uuc3RhdGUgPT09IG5ld1Byb3BzKSB7XG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUoY3RvcikgfHwgJ0NvbXBvbmVudCc7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0RGlyZWN0bHlBc3NpZ25pbmdQcm9wc1RvU3RhdGUuaGFzKGNvbXBvbmVudE5hbWUpKSB7XG4gICAgICAgIGRpZFdhcm5BYm91dERpcmVjdGx5QXNzaWduaW5nUHJvcHNUb1N0YXRlLmFkZChjb21wb25lbnROYW1lKTtcblxuICAgICAgICBlcnJvcignJXM6IEl0IGlzIG5vdCByZWNvbW1lbmRlZCB0byBhc3NpZ24gcHJvcHMgZGlyZWN0bHkgdG8gc3RhdGUgJyArIFwiYmVjYXVzZSB1cGRhdGVzIHRvIHByb3BzIHdvbid0IGJlIHJlZmxlY3RlZCBpbiBzdGF0ZS4gXCIgKyAnSW4gbW9zdCBjYXNlcywgaXQgaXMgYmV0dGVyIHRvIHVzZSBwcm9wcyBkaXJlY3RseS4nLCBjb21wb25lbnROYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdE1vZGUpIHtcbiAgICAgIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLnJlY29yZExlZ2FjeUNvbnRleHRXYXJuaW5nKHdvcmtJblByb2dyZXNzLCBpbnN0YW5jZSk7XG4gICAgfVxuXG4gICAge1xuICAgICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MucmVjb3JkVW5zYWZlTGlmZWN5Y2xlV2FybmluZ3Mod29ya0luUHJvZ3Jlc3MsIGluc3RhbmNlKTtcbiAgICB9XG4gIH1cblxuICBwcm9jZXNzVXBkYXRlUXVldWUod29ya0luUHJvZ3Jlc3MsIG5ld1Byb3BzLCBpbnN0YW5jZSwgcmVuZGVyTGFuZXMpO1xuICBpbnN0YW5jZS5zdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gIHZhciBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPSBjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcztcblxuICBpZiAodHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGFwcGx5RGVyaXZlZFN0YXRlRnJvbVByb3BzKHdvcmtJblByb2dyZXNzLCBjdG9yLCBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMsIG5ld1Byb3BzKTtcbiAgICBpbnN0YW5jZS5zdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gIH0gLy8gSW4gb3JkZXIgdG8gc3VwcG9ydCByZWFjdC1saWZlY3ljbGVzLWNvbXBhdCBwb2x5ZmlsbGVkIGNvbXBvbmVudHMsXG4gIC8vIFVuc2FmZSBsaWZlY3ljbGVzIHNob3VsZCBub3QgYmUgaW52b2tlZCBmb3IgY29tcG9uZW50cyB1c2luZyB0aGUgbmV3IEFQSXMuXG5cblxuICBpZiAodHlwZW9mIGN0b3IuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBpbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSAhPT0gJ2Z1bmN0aW9uJyAmJiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICBjYWxsQ29tcG9uZW50V2lsbE1vdW50KHdvcmtJblByb2dyZXNzLCBpbnN0YW5jZSk7IC8vIElmIHdlIGhhZCBhZGRpdGlvbmFsIHN0YXRlIHVwZGF0ZXMgZHVyaW5nIHRoaXMgbGlmZS1jeWNsZSwgbGV0J3NcbiAgICAvLyBwcm9jZXNzIHRoZW0gbm93LlxuXG4gICAgcHJvY2Vzc1VwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzLCBuZXdQcm9wcywgaW5zdGFuY2UsIHJlbmRlckxhbmVzKTtcbiAgICBpbnN0YW5jZS5zdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gIH1cblxuICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlc3VtZU1vdW50Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgY3RvciwgbmV3UHJvcHMsIHJlbmRlckxhbmVzKSB7XG4gIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgdmFyIG9sZFByb3BzID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcztcbiAgaW5zdGFuY2UucHJvcHMgPSBvbGRQcm9wcztcbiAgdmFyIG9sZENvbnRleHQgPSBpbnN0YW5jZS5jb250ZXh0O1xuICB2YXIgY29udGV4dFR5cGUgPSBjdG9yLmNvbnRleHRUeXBlO1xuICB2YXIgbmV4dENvbnRleHQgPSBlbXB0eUNvbnRleHRPYmplY3Q7XG5cbiAgaWYgKHR5cGVvZiBjb250ZXh0VHlwZSA9PT0gJ29iamVjdCcgJiYgY29udGV4dFR5cGUgIT09IG51bGwpIHtcbiAgICBuZXh0Q29udGV4dCA9IHJlYWRDb250ZXh0KGNvbnRleHRUeXBlKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbmV4dExlZ2FjeVVubWFza2VkQ29udGV4dCA9IGdldFVubWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgY3RvciwgdHJ1ZSk7XG4gICAgbmV4dENvbnRleHQgPSBnZXRNYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCBuZXh0TGVnYWN5VW5tYXNrZWRDb250ZXh0KTtcbiAgfVxuXG4gIHZhciBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPSBjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcztcbiAgdmFyIGhhc05ld0xpZmVjeWNsZXMgPSB0eXBlb2YgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBpbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJzsgLy8gTm90ZTogRHVyaW5nIHRoZXNlIGxpZmUtY3ljbGVzLCBpbnN0YW5jZS5wcm9wcy9pbnN0YW5jZS5zdGF0ZSBhcmUgd2hhdFxuICAvLyBldmVyIHRoZSBwcmV2aW91c2x5IGF0dGVtcHRlZCB0byByZW5kZXIgLSBub3QgdGhlIFwiY3VycmVudFwiLiBIb3dldmVyLFxuICAvLyBkdXJpbmcgY29tcG9uZW50RGlkVXBkYXRlIHdlIHBhc3MgdGhlIFwiY3VycmVudFwiIHByb3BzLlxuICAvLyBJbiBvcmRlciB0byBzdXBwb3J0IHJlYWN0LWxpZmVjeWNsZXMtY29tcGF0IHBvbHlmaWxsZWQgY29tcG9uZW50cyxcbiAgLy8gVW5zYWZlIGxpZmVjeWNsZXMgc2hvdWxkIG5vdCBiZSBpbnZva2VkIGZvciBjb21wb25lbnRzIHVzaW5nIHRoZSBuZXcgQVBJcy5cblxuICBpZiAoIWhhc05ld0xpZmVjeWNsZXMgJiYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICBpZiAob2xkUHJvcHMgIT09IG5ld1Byb3BzIHx8IG9sZENvbnRleHQgIT09IG5leHRDb250ZXh0KSB7XG4gICAgICBjYWxsQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyh3b3JrSW5Qcm9ncmVzcywgaW5zdGFuY2UsIG5ld1Byb3BzLCBuZXh0Q29udGV4dCk7XG4gICAgfVxuICB9XG5cbiAgcmVzZXRIYXNGb3JjZVVwZGF0ZUJlZm9yZVByb2Nlc3NpbmcoKTtcbiAgdmFyIG9sZFN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgdmFyIG5ld1N0YXRlID0gaW5zdGFuY2Uuc3RhdGUgPSBvbGRTdGF0ZTtcbiAgcHJvY2Vzc1VwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzLCBuZXdQcm9wcywgaW5zdGFuY2UsIHJlbmRlckxhbmVzKTtcbiAgbmV3U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuXG4gIGlmIChvbGRQcm9wcyA9PT0gbmV3UHJvcHMgJiYgb2xkU3RhdGUgPT09IG5ld1N0YXRlICYmICFoYXNDb250ZXh0Q2hhbmdlZCgpICYmICFjaGVja0hhc0ZvcmNlVXBkYXRlQWZ0ZXJQcm9jZXNzaW5nKCkpIHtcbiAgICAvLyBJZiBhbiB1cGRhdGUgd2FzIGFscmVhZHkgaW4gcHJvZ3Jlc3MsIHdlIHNob3VsZCBzY2hlZHVsZSBhbiBVcGRhdGVcbiAgICAvLyBlZmZlY3QgZXZlbiB0aG91Z2ggd2UncmUgYmFpbGluZyBvdXQsIHNvIHRoYXQgY1dVL2NEVSBhcmUgY2FsbGVkLlxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkTW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAodHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGFwcGx5RGVyaXZlZFN0YXRlRnJvbVByb3BzKHdvcmtJblByb2dyZXNzLCBjdG9yLCBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMsIG5ld1Byb3BzKTtcbiAgICBuZXdTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gIH1cblxuICB2YXIgc2hvdWxkVXBkYXRlID0gY2hlY2tIYXNGb3JjZVVwZGF0ZUFmdGVyUHJvY2Vzc2luZygpIHx8IGNoZWNrU2hvdWxkQ29tcG9uZW50VXBkYXRlKHdvcmtJblByb2dyZXNzLCBjdG9yLCBvbGRQcm9wcywgbmV3UHJvcHMsIG9sZFN0YXRlLCBuZXdTdGF0ZSwgbmV4dENvbnRleHQpO1xuXG4gIGlmIChzaG91bGRVcGRhdGUpIHtcbiAgICAvLyBJbiBvcmRlciB0byBzdXBwb3J0IHJlYWN0LWxpZmVjeWNsZXMtY29tcGF0IHBvbHlmaWxsZWQgY29tcG9uZW50cyxcbiAgICAvLyBVbnNhZmUgbGlmZWN5Y2xlcyBzaG91bGQgbm90IGJlIGludm9rZWQgZm9yIGNvbXBvbmVudHMgdXNpbmcgdGhlIG5ldyBBUElzLlxuICAgIGlmICghaGFzTmV3TGlmZWN5Y2xlcyAmJiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudCgpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkTW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gSWYgYW4gdXBkYXRlIHdhcyBhbHJlYWR5IGluIHByb2dyZXNzLCB3ZSBzaG91bGQgc2NoZWR1bGUgYW4gVXBkYXRlXG4gICAgLy8gZWZmZWN0IGV2ZW4gdGhvdWdoIHdlJ3JlIGJhaWxpbmcgb3V0LCBzbyB0aGF0IGNXVS9jRFUgYXJlIGNhbGxlZC5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG4gICAgfSAvLyBJZiBzaG91bGRDb21wb25lbnRVcGRhdGUgcmV0dXJuZWQgZmFsc2UsIHdlIHNob3VsZCBzdGlsbCB1cGRhdGUgdGhlXG4gICAgLy8gbWVtb2l6ZWQgc3RhdGUgdG8gaW5kaWNhdGUgdGhhdCB0aGlzIHdvcmsgY2FuIGJlIHJldXNlZC5cblxuXG4gICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcyA9IG5ld1Byb3BzO1xuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBuZXdTdGF0ZTtcbiAgfSAvLyBVcGRhdGUgdGhlIGV4aXN0aW5nIGluc3RhbmNlJ3Mgc3RhdGUsIHByb3BzLCBhbmQgY29udGV4dCBwb2ludGVycyBldmVuXG4gIC8vIGlmIHNob3VsZENvbXBvbmVudFVwZGF0ZSByZXR1cm5zIGZhbHNlLlxuXG5cbiAgaW5zdGFuY2UucHJvcHMgPSBuZXdQcm9wcztcbiAgaW5zdGFuY2Uuc3RhdGUgPSBuZXdTdGF0ZTtcbiAgaW5zdGFuY2UuY29udGV4dCA9IG5leHRDb250ZXh0O1xuICByZXR1cm4gc2hvdWxkVXBkYXRlO1xufSAvLyBJbnZva2VzIHRoZSB1cGRhdGUgbGlmZS1jeWNsZXMgYW5kIHJldHVybnMgZmFsc2UgaWYgaXQgc2hvdWxkbid0IHJlcmVuZGVyLlxuXG5cbmZ1bmN0aW9uIHVwZGF0ZUNsYXNzSW5zdGFuY2UoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIGN0b3IsIG5ld1Byb3BzLCByZW5kZXJMYW5lcykge1xuICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gIGNsb25lVXBkYXRlUXVldWUoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpO1xuICB2YXIgdW5yZXNvbHZlZE9sZFByb3BzID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcztcbiAgdmFyIG9sZFByb3BzID0gd29ya0luUHJvZ3Jlc3MudHlwZSA9PT0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUgPyB1bnJlc29sdmVkT2xkUHJvcHMgOiByZXNvbHZlRGVmYXVsdFByb3BzKHdvcmtJblByb2dyZXNzLnR5cGUsIHVucmVzb2x2ZWRPbGRQcm9wcyk7XG4gIGluc3RhbmNlLnByb3BzID0gb2xkUHJvcHM7XG4gIHZhciB1bnJlc29sdmVkTmV3UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gIHZhciBvbGRDb250ZXh0ID0gaW5zdGFuY2UuY29udGV4dDtcbiAgdmFyIGNvbnRleHRUeXBlID0gY3Rvci5jb250ZXh0VHlwZTtcbiAgdmFyIG5leHRDb250ZXh0ID0gZW1wdHlDb250ZXh0T2JqZWN0O1xuXG4gIGlmICh0eXBlb2YgY29udGV4dFR5cGUgPT09ICdvYmplY3QnICYmIGNvbnRleHRUeXBlICE9PSBudWxsKSB7XG4gICAgbmV4dENvbnRleHQgPSByZWFkQ29udGV4dChjb250ZXh0VHlwZSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIG5leHRVbm1hc2tlZENvbnRleHQgPSBnZXRVbm1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIGN0b3IsIHRydWUpO1xuICAgIG5leHRDb250ZXh0ID0gZ2V0TWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgbmV4dFVubWFza2VkQ29udGV4dCk7XG4gIH1cblxuICB2YXIgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID0gY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM7XG4gIHZhciBoYXNOZXdMaWZlY3ljbGVzID0gdHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgPT09ICdmdW5jdGlvbic7IC8vIE5vdGU6IER1cmluZyB0aGVzZSBsaWZlLWN5Y2xlcywgaW5zdGFuY2UucHJvcHMvaW5zdGFuY2Uuc3RhdGUgYXJlIHdoYXRcbiAgLy8gZXZlciB0aGUgcHJldmlvdXNseSBhdHRlbXB0ZWQgdG8gcmVuZGVyIC0gbm90IHRoZSBcImN1cnJlbnRcIi4gSG93ZXZlcixcbiAgLy8gZHVyaW5nIGNvbXBvbmVudERpZFVwZGF0ZSB3ZSBwYXNzIHRoZSBcImN1cnJlbnRcIiBwcm9wcy5cbiAgLy8gSW4gb3JkZXIgdG8gc3VwcG9ydCByZWFjdC1saWZlY3ljbGVzLWNvbXBhdCBwb2x5ZmlsbGVkIGNvbXBvbmVudHMsXG4gIC8vIFVuc2FmZSBsaWZlY3ljbGVzIHNob3VsZCBub3QgYmUgaW52b2tlZCBmb3IgY29tcG9uZW50cyB1c2luZyB0aGUgbmV3IEFQSXMuXG5cbiAgaWYgKCFoYXNOZXdMaWZlY3ljbGVzICYmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicpKSB7XG4gICAgaWYgKHVucmVzb2x2ZWRPbGRQcm9wcyAhPT0gdW5yZXNvbHZlZE5ld1Byb3BzIHx8IG9sZENvbnRleHQgIT09IG5leHRDb250ZXh0KSB7XG4gICAgICBjYWxsQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyh3b3JrSW5Qcm9ncmVzcywgaW5zdGFuY2UsIG5ld1Byb3BzLCBuZXh0Q29udGV4dCk7XG4gICAgfVxuICB9XG5cbiAgcmVzZXRIYXNGb3JjZVVwZGF0ZUJlZm9yZVByb2Nlc3NpbmcoKTtcbiAgdmFyIG9sZFN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgdmFyIG5ld1N0YXRlID0gaW5zdGFuY2Uuc3RhdGUgPSBvbGRTdGF0ZTtcbiAgcHJvY2Vzc1VwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzLCBuZXdQcm9wcywgaW5zdGFuY2UsIHJlbmRlckxhbmVzKTtcbiAgbmV3U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuXG4gIGlmICh1bnJlc29sdmVkT2xkUHJvcHMgPT09IHVucmVzb2x2ZWROZXdQcm9wcyAmJiBvbGRTdGF0ZSA9PT0gbmV3U3RhdGUgJiYgIWhhc0NvbnRleHRDaGFuZ2VkKCkgJiYgIWNoZWNrSGFzRm9yY2VVcGRhdGVBZnRlclByb2Nlc3NpbmcoKSkge1xuICAgIC8vIElmIGFuIHVwZGF0ZSB3YXMgYWxyZWFkeSBpbiBwcm9ncmVzcywgd2Ugc2hvdWxkIHNjaGVkdWxlIGFuIFVwZGF0ZVxuICAgIC8vIGVmZmVjdCBldmVuIHRob3VnaCB3ZSdyZSBiYWlsaW5nIG91dCwgc28gdGhhdCBjV1UvY0RVIGFyZSBjYWxsZWQuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGlmICh1bnJlc29sdmVkT2xkUHJvcHMgIT09IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyB8fCBvbGRTdGF0ZSAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlKSB7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpZiAodW5yZXNvbHZlZE9sZFByb3BzICE9PSBjdXJyZW50Lm1lbW9pemVkUHJvcHMgfHwgb2xkU3RhdGUgIT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSkge1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBTbmFwc2hvdDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAodHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGFwcGx5RGVyaXZlZFN0YXRlRnJvbVByb3BzKHdvcmtJblByb2dyZXNzLCBjdG9yLCBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMsIG5ld1Byb3BzKTtcbiAgICBuZXdTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gIH1cblxuICB2YXIgc2hvdWxkVXBkYXRlID0gY2hlY2tIYXNGb3JjZVVwZGF0ZUFmdGVyUHJvY2Vzc2luZygpIHx8IGNoZWNrU2hvdWxkQ29tcG9uZW50VXBkYXRlKHdvcmtJblByb2dyZXNzLCBjdG9yLCBvbGRQcm9wcywgbmV3UHJvcHMsIG9sZFN0YXRlLCBuZXdTdGF0ZSwgbmV4dENvbnRleHQpO1xuXG4gIGlmIChzaG91bGRVcGRhdGUpIHtcbiAgICAvLyBJbiBvcmRlciB0byBzdXBwb3J0IHJlYWN0LWxpZmVjeWNsZXMtY29tcGF0IHBvbHlmaWxsZWQgY29tcG9uZW50cyxcbiAgICAvLyBVbnNhZmUgbGlmZWN5Y2xlcyBzaG91bGQgbm90IGJlIGludm9rZWQgZm9yIGNvbXBvbmVudHMgdXNpbmcgdGhlIG5ldyBBUElzLlxuICAgIGlmICghaGFzTmV3TGlmZWN5Y2xlcyAmJiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsVXBkYXRlID09PSAnZnVuY3Rpb24nKSkge1xuICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVcGRhdGUobmV3UHJvcHMsIG5ld1N0YXRlLCBuZXh0Q29udGV4dCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUobmV3UHJvcHMsIG5ld1N0YXRlLCBuZXh0Q29udGV4dCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBTbmFwc2hvdDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gSWYgYW4gdXBkYXRlIHdhcyBhbHJlYWR5IGluIHByb2dyZXNzLCB3ZSBzaG91bGQgc2NoZWR1bGUgYW4gVXBkYXRlXG4gICAgLy8gZWZmZWN0IGV2ZW4gdGhvdWdoIHdlJ3JlIGJhaWxpbmcgb3V0LCBzbyB0aGF0IGNXVS9jRFUgYXJlIGNhbGxlZC5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaWYgKHVucmVzb2x2ZWRPbGRQcm9wcyAhPT0gY3VycmVudC5tZW1vaXplZFByb3BzIHx8IG9sZFN0YXRlICE9PSBjdXJyZW50Lm1lbW9pemVkU3RhdGUpIHtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGlmICh1bnJlc29sdmVkT2xkUHJvcHMgIT09IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyB8fCBvbGRTdGF0ZSAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlKSB7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFNuYXBzaG90O1xuICAgICAgfVxuICAgIH0gLy8gSWYgc2hvdWxkQ29tcG9uZW50VXBkYXRlIHJldHVybmVkIGZhbHNlLCB3ZSBzaG91bGQgc3RpbGwgdXBkYXRlIHRoZVxuICAgIC8vIG1lbW9pemVkIHByb3BzL3N0YXRlIHRvIGluZGljYXRlIHRoYXQgdGhpcyB3b3JrIGNhbiBiZSByZXVzZWQuXG5cblxuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHMgPSBuZXdQcm9wcztcbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbmV3U3RhdGU7XG4gIH0gLy8gVXBkYXRlIHRoZSBleGlzdGluZyBpbnN0YW5jZSdzIHN0YXRlLCBwcm9wcywgYW5kIGNvbnRleHQgcG9pbnRlcnMgZXZlblxuICAvLyBpZiBzaG91bGRDb21wb25lbnRVcGRhdGUgcmV0dXJucyBmYWxzZS5cblxuXG4gIGluc3RhbmNlLnByb3BzID0gbmV3UHJvcHM7XG4gIGluc3RhbmNlLnN0YXRlID0gbmV3U3RhdGU7XG4gIGluc3RhbmNlLmNvbnRleHQgPSBuZXh0Q29udGV4dDtcbiAgcmV0dXJuIHNob3VsZFVwZGF0ZTtcbn1cblxudmFyIGRpZFdhcm5BYm91dE1hcHM7XG52YXIgZGlkV2FybkFib3V0R2VuZXJhdG9ycztcbnZhciBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzO1xudmFyIG93bmVySGFzS2V5VXNlV2FybmluZztcbnZhciBvd25lckhhc0Z1bmN0aW9uVHlwZVdhcm5pbmc7XG5cbnZhciB3YXJuRm9yTWlzc2luZ0tleSA9IGZ1bmN0aW9uIChjaGlsZCwgcmV0dXJuRmliZXIpIHt9O1xuXG57XG4gIGRpZFdhcm5BYm91dE1hcHMgPSBmYWxzZTtcbiAgZGlkV2FybkFib3V0R2VuZXJhdG9ycyA9IGZhbHNlO1xuICBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzID0ge307XG4gIC8qKlxuICAgKiBXYXJuIGlmIHRoZXJlJ3Mgbm8ga2V5IGV4cGxpY2l0bHkgc2V0IG9uIGR5bmFtaWMgYXJyYXlzIG9mIGNoaWxkcmVuIG9yXG4gICAqIG9iamVjdCBrZXlzIGFyZSBub3QgdmFsaWQuIFRoaXMgYWxsb3dzIHVzIHRvIGtlZXAgdHJhY2sgb2YgY2hpbGRyZW4gYmV0d2VlblxuICAgKiB1cGRhdGVzLlxuICAgKi9cblxuICBvd25lckhhc0tleVVzZVdhcm5pbmcgPSB7fTtcbiAgb3duZXJIYXNGdW5jdGlvblR5cGVXYXJuaW5nID0ge307XG5cbiAgd2FybkZvck1pc3NpbmdLZXkgPSBmdW5jdGlvbiAoY2hpbGQsIHJldHVybkZpYmVyKSB7XG4gICAgaWYgKGNoaWxkID09PSBudWxsIHx8IHR5cGVvZiBjaGlsZCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWNoaWxkLl9zdG9yZSB8fCBjaGlsZC5fc3RvcmUudmFsaWRhdGVkIHx8IGNoaWxkLmtleSAhPSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCEodHlwZW9mIGNoaWxkLl9zdG9yZSA9PT0gJ29iamVjdCcpKSB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIlJlYWN0IENvbXBvbmVudCBpbiB3YXJuRm9yTWlzc2luZ0tleSBzaG91bGQgaGF2ZSBhIF9zdG9yZS4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNoaWxkLl9zdG9yZS52YWxpZGF0ZWQgPSB0cnVlO1xuICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShyZXR1cm5GaWJlci50eXBlKSB8fCAnQ29tcG9uZW50JztcblxuICAgIGlmIChvd25lckhhc0tleVVzZVdhcm5pbmdbY29tcG9uZW50TmFtZV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBvd25lckhhc0tleVVzZVdhcm5pbmdbY29tcG9uZW50TmFtZV0gPSB0cnVlO1xuXG4gICAgZXJyb3IoJ0VhY2ggY2hpbGQgaW4gYSBsaXN0IHNob3VsZCBoYXZlIGEgdW5pcXVlICcgKyAnXCJrZXlcIiBwcm9wLiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3dhcm5pbmcta2V5cyBmb3IgJyArICdtb3JlIGluZm9ybWF0aW9uLicpO1xuICB9O1xufVxuXG52YXIgaXNBcnJheSQxID0gQXJyYXkuaXNBcnJheTtcblxuZnVuY3Rpb24gY29lcmNlUmVmKHJldHVybkZpYmVyLCBjdXJyZW50LCBlbGVtZW50KSB7XG4gIHZhciBtaXhlZFJlZiA9IGVsZW1lbnQucmVmO1xuXG4gIGlmIChtaXhlZFJlZiAhPT0gbnVsbCAmJiB0eXBlb2YgbWl4ZWRSZWYgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIG1peGVkUmVmICE9PSAnb2JqZWN0Jykge1xuICAgIHtcbiAgICAgIC8vIFRPRE86IENsZWFuIHRoaXMgdXAgb25jZSB3ZSB0dXJuIG9uIHRoZSBzdHJpbmcgcmVmIHdhcm5pbmcgZm9yXG4gICAgICAvLyBldmVyeW9uZSwgYmVjYXVzZSB0aGUgc3RyaWN0IG1vZGUgY2FzZSB3aWxsIG5vIGxvbmdlciBiZSByZWxldmFudFxuICAgICAgaWYgKChyZXR1cm5GaWJlci5tb2RlICYgU3RyaWN0TW9kZSB8fCB3YXJuQWJvdXRTdHJpbmdSZWZzKSAmJiAvLyBXZSB3YXJuIGluIFJlYWN0RWxlbWVudC5qcyBpZiBvd25lciBhbmQgc2VsZiBhcmUgZXF1YWwgZm9yIHN0cmluZyByZWZzXG4gICAgICAvLyBiZWNhdXNlIHRoZXNlIGNhbm5vdCBiZSBhdXRvbWF0aWNhbGx5IGNvbnZlcnRlZCB0byBhbiBhcnJvdyBmdW5jdGlvblxuICAgICAgLy8gdXNpbmcgYSBjb2RlbW9kLiBUaGVyZWZvcmUsIHdlIGRvbid0IGhhdmUgdG8gd2FybiBhYm91dCBzdHJpbmcgcmVmcyBhZ2Fpbi5cbiAgICAgICEoZWxlbWVudC5fb3duZXIgJiYgZWxlbWVudC5fc2VsZiAmJiBlbGVtZW50Ll9vd25lci5zdGF0ZU5vZGUgIT09IGVsZW1lbnQuX3NlbGYpKSB7XG4gICAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShyZXR1cm5GaWJlci50eXBlKSB8fCAnQ29tcG9uZW50JztcblxuICAgICAgICBpZiAoIWRpZFdhcm5BYm91dFN0cmluZ1JlZnNbY29tcG9uZW50TmFtZV0pIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBlcnJvcignQSBzdHJpbmcgcmVmLCBcIiVzXCIsIGhhcyBiZWVuIGZvdW5kIHdpdGhpbiBhIHN0cmljdCBtb2RlIHRyZWUuICcgKyAnU3RyaW5nIHJlZnMgYXJlIGEgc291cmNlIG9mIHBvdGVudGlhbCBidWdzIGFuZCBzaG91bGQgYmUgYXZvaWRlZC4gJyArICdXZSByZWNvbW1lbmQgdXNpbmcgdXNlUmVmKCkgb3IgY3JlYXRlUmVmKCkgaW5zdGVhZC4gJyArICdMZWFybiBtb3JlIGFib3V0IHVzaW5nIHJlZnMgc2FmZWx5IGhlcmU6ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3N0cmljdC1tb2RlLXN0cmluZy1yZWYnLCBtaXhlZFJlZik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGlkV2FybkFib3V0U3RyaW5nUmVmc1tjb21wb25lbnROYW1lXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZWxlbWVudC5fb3duZXIpIHtcbiAgICAgIHZhciBvd25lciA9IGVsZW1lbnQuX293bmVyO1xuICAgICAgdmFyIGluc3Q7XG5cbiAgICAgIGlmIChvd25lcikge1xuICAgICAgICB2YXIgb3duZXJGaWJlciA9IG93bmVyO1xuXG4gICAgICAgIGlmICghKG93bmVyRmliZXIudGFnID09PSBDbGFzc0NvbXBvbmVudCkpIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvciggXCJGdW5jdGlvbiBjb21wb25lbnRzIGNhbm5vdCBoYXZlIHN0cmluZyByZWZzLiBXZSByZWNvbW1lbmQgdXNpbmcgdXNlUmVmKCkgaW5zdGVhZC4gTGVhcm4gbW9yZSBhYm91dCB1c2luZyByZWZzIHNhZmVseSBoZXJlOiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvc3RyaWN0LW1vZGUtc3RyaW5nLXJlZlwiICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaW5zdCA9IG93bmVyRmliZXIuc3RhdGVOb2RlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWluc3QpIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCBcIk1pc3Npbmcgb3duZXIgZm9yIHN0cmluZyByZWYgXCIgKyBtaXhlZFJlZiArIFwiLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHN0cmluZ1JlZiA9ICcnICsgbWl4ZWRSZWY7IC8vIENoZWNrIGlmIHByZXZpb3VzIHN0cmluZyByZWYgbWF0Y2hlcyBuZXcgc3RyaW5nIHJlZlxuXG4gICAgICBpZiAoY3VycmVudCAhPT0gbnVsbCAmJiBjdXJyZW50LnJlZiAhPT0gbnVsbCAmJiB0eXBlb2YgY3VycmVudC5yZWYgPT09ICdmdW5jdGlvbicgJiYgY3VycmVudC5yZWYuX3N0cmluZ1JlZiA9PT0gc3RyaW5nUmVmKSB7XG4gICAgICAgIHJldHVybiBjdXJyZW50LnJlZjtcbiAgICAgIH1cblxuICAgICAgdmFyIHJlZiA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgcmVmcyA9IGluc3QucmVmcztcblxuICAgICAgICBpZiAocmVmcyA9PT0gZW1wdHlSZWZzT2JqZWN0KSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBhIGxhenkgcG9vbGVkIGZyb3plbiBvYmplY3QsIHNvIHdlIG5lZWQgdG8gaW5pdGlhbGl6ZS5cbiAgICAgICAgICByZWZzID0gaW5zdC5yZWZzID0ge307XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICBkZWxldGUgcmVmc1tzdHJpbmdSZWZdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlZnNbc3RyaW5nUmVmXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICByZWYuX3N0cmluZ1JlZiA9IHN0cmluZ1JlZjtcbiAgICAgIHJldHVybiByZWY7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghKHR5cGVvZiBtaXhlZFJlZiA9PT0gJ3N0cmluZycpKSB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJFeHBlY3RlZCByZWYgdG8gYmUgYSBmdW5jdGlvbiwgYSBzdHJpbmcsIGFuIG9iamVjdCByZXR1cm5lZCBieSBSZWFjdC5jcmVhdGVSZWYoKSwgb3IgbnVsbC5cIiApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghZWxlbWVudC5fb3duZXIpIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCBcIkVsZW1lbnQgcmVmIHdhcyBzcGVjaWZpZWQgYXMgYSBzdHJpbmcgKFwiICsgbWl4ZWRSZWYgKyBcIikgYnV0IG5vIG93bmVyIHdhcyBzZXQuIFRoaXMgY291bGQgaGFwcGVuIGZvciBvbmUgb2YgdGhlIGZvbGxvd2luZyByZWFzb25zOlxcbjEuIFlvdSBtYXkgYmUgYWRkaW5nIGEgcmVmIHRvIGEgZnVuY3Rpb24gY29tcG9uZW50XFxuMi4gWW91IG1heSBiZSBhZGRpbmcgYSByZWYgdG8gYSBjb21wb25lbnQgdGhhdCB3YXMgbm90IGNyZWF0ZWQgaW5zaWRlIGEgY29tcG9uZW50J3MgcmVuZGVyIG1ldGhvZFxcbjMuIFlvdSBoYXZlIG11bHRpcGxlIGNvcGllcyBvZiBSZWFjdCBsb2FkZWRcXG5TZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3JlZnMtbXVzdC1oYXZlLW93bmVyIGZvciBtb3JlIGluZm9ybWF0aW9uLlwiICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWl4ZWRSZWY7XG59XG5cbmZ1bmN0aW9uIHRocm93T25JbnZhbGlkT2JqZWN0VHlwZShyZXR1cm5GaWJlciwgbmV3Q2hpbGQpIHtcbiAgaWYgKHJldHVybkZpYmVyLnR5cGUgIT09ICd0ZXh0YXJlYScpIHtcbiAgICB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIk9iamVjdHMgYXJlIG5vdCB2YWxpZCBhcyBhIFJlYWN0IGNoaWxkIChmb3VuZDogXCIgKyAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG5ld0NoaWxkKSA9PT0gJ1tvYmplY3QgT2JqZWN0XScgPyAnb2JqZWN0IHdpdGgga2V5cyB7JyArIE9iamVjdC5rZXlzKG5ld0NoaWxkKS5qb2luKCcsICcpICsgJ30nIDogbmV3Q2hpbGQpICsgXCIpLiBJZiB5b3UgbWVhbnQgdG8gcmVuZGVyIGEgY29sbGVjdGlvbiBvZiBjaGlsZHJlbiwgdXNlIGFuIGFycmF5IGluc3RlYWQuXCIgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gd2Fybk9uRnVuY3Rpb25UeXBlKHJldHVybkZpYmVyKSB7XG4gIHtcbiAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUocmV0dXJuRmliZXIudHlwZSkgfHwgJ0NvbXBvbmVudCc7XG5cbiAgICBpZiAob3duZXJIYXNGdW5jdGlvblR5cGVXYXJuaW5nW2NvbXBvbmVudE5hbWVdKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgb3duZXJIYXNGdW5jdGlvblR5cGVXYXJuaW5nW2NvbXBvbmVudE5hbWVdID0gdHJ1ZTtcblxuICAgIGVycm9yKCdGdW5jdGlvbnMgYXJlIG5vdCB2YWxpZCBhcyBhIFJlYWN0IGNoaWxkLiBUaGlzIG1heSBoYXBwZW4gaWYgJyArICd5b3UgcmV0dXJuIGEgQ29tcG9uZW50IGluc3RlYWQgb2YgPENvbXBvbmVudCAvPiBmcm9tIHJlbmRlci4gJyArICdPciBtYXliZSB5b3UgbWVhbnQgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIHJhdGhlciB0aGFuIHJldHVybiBpdC4nKTtcbiAgfVxufSAvLyBXZSBhdm9pZCBpbmxpbmluZyB0aGlzIHRvIGF2b2lkIHBvdGVudGlhbCBkZW9wdHMgZnJvbSB1c2luZyB0cnkvY2F0Y2guXG4vLyB0byBiZSBhYmxlIHRvIG9wdGltaXplIGVhY2ggcGF0aCBpbmRpdmlkdWFsbHkgYnkgYnJhbmNoaW5nIGVhcmx5LiBUaGlzIG5lZWRzXG4vLyBhIGNvbXBpbGVyIG9yIHdlIGNhbiBkbyBpdCBtYW51YWxseS4gSGVscGVycyB0aGF0IGRvbid0IG5lZWQgdGhpcyBicmFuY2hpbmdcbi8vIGxpdmUgb3V0c2lkZSBvZiB0aGlzIGZ1bmN0aW9uLlxuXG5cbmZ1bmN0aW9uIENoaWxkUmVjb25jaWxlcihzaG91bGRUcmFja1NpZGVFZmZlY3RzKSB7XG4gIGZ1bmN0aW9uIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBjaGlsZFRvRGVsZXRlKSB7XG4gICAgaWYgKCFzaG91bGRUcmFja1NpZGVFZmZlY3RzKSB7XG4gICAgICAvLyBOb29wLlxuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gRGVsZXRpb25zIGFyZSBhZGRlZCBpbiByZXZlcnNlZCBvcmRlciBzbyB3ZSBhZGQgaXQgdG8gdGhlIGZyb250LlxuICAgIC8vIEF0IHRoaXMgcG9pbnQsIHRoZSByZXR1cm4gZmliZXIncyBlZmZlY3QgbGlzdCBpcyBlbXB0eSBleGNlcHQgZm9yXG4gICAgLy8gZGVsZXRpb25zLCBzbyB3ZSBjYW4ganVzdCBhcHBlbmQgdGhlIGRlbGV0aW9uIHRvIHRoZSBsaXN0LiBUaGUgcmVtYWluaW5nXG4gICAgLy8gZWZmZWN0cyBhcmVuJ3QgYWRkZWQgdW50aWwgdGhlIGNvbXBsZXRlIHBoYXNlLiBPbmNlIHdlIGltcGxlbWVudFxuICAgIC8vIHJlc3VtaW5nLCB0aGlzIG1heSBub3QgYmUgdHJ1ZS5cblxuXG4gICAgdmFyIGxhc3QgPSByZXR1cm5GaWJlci5sYXN0RWZmZWN0O1xuXG4gICAgaWYgKGxhc3QgIT09IG51bGwpIHtcbiAgICAgIGxhc3QubmV4dEVmZmVjdCA9IGNoaWxkVG9EZWxldGU7XG4gICAgICByZXR1cm5GaWJlci5sYXN0RWZmZWN0ID0gY2hpbGRUb0RlbGV0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuRmliZXIuZmlyc3RFZmZlY3QgPSByZXR1cm5GaWJlci5sYXN0RWZmZWN0ID0gY2hpbGRUb0RlbGV0ZTtcbiAgICB9XG5cbiAgICBjaGlsZFRvRGVsZXRlLm5leHRFZmZlY3QgPSBudWxsO1xuICAgIGNoaWxkVG9EZWxldGUuZmxhZ3MgPSBEZWxldGlvbjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCkge1xuICAgIGlmICghc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICAgICAgLy8gTm9vcC5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gLy8gVE9ETzogRm9yIHRoZSBzaG91bGRDbG9uZSBjYXNlLCB0aGlzIGNvdWxkIGJlIG1pY3JvLW9wdGltaXplZCBhIGJpdCBieVxuICAgIC8vIGFzc3VtaW5nIHRoYXQgYWZ0ZXIgdGhlIGZpcnN0IGNoaWxkIHdlJ3ZlIGFscmVhZHkgYWRkZWQgZXZlcnl0aGluZy5cblxuXG4gICAgdmFyIGNoaWxkVG9EZWxldGUgPSBjdXJyZW50Rmlyc3RDaGlsZDtcblxuICAgIHdoaWxlIChjaGlsZFRvRGVsZXRlICE9PSBudWxsKSB7XG4gICAgICBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgY2hpbGRUb0RlbGV0ZSk7XG4gICAgICBjaGlsZFRvRGVsZXRlID0gY2hpbGRUb0RlbGV0ZS5zaWJsaW5nO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZnVuY3Rpb24gbWFwUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkKSB7XG4gICAgLy8gQWRkIHRoZSByZW1haW5pbmcgY2hpbGRyZW4gdG8gYSB0ZW1wb3JhcnkgbWFwIHNvIHRoYXQgd2UgY2FuIGZpbmQgdGhlbSBieVxuICAgIC8vIGtleXMgcXVpY2tseS4gSW1wbGljaXQgKG51bGwpIGtleXMgZ2V0IGFkZGVkIHRvIHRoaXMgc2V0IHdpdGggdGhlaXIgaW5kZXhcbiAgICAvLyBpbnN0ZWFkLlxuICAgIHZhciBleGlzdGluZ0NoaWxkcmVuID0gbmV3IE1hcCgpO1xuICAgIHZhciBleGlzdGluZ0NoaWxkID0gY3VycmVudEZpcnN0Q2hpbGQ7XG5cbiAgICB3aGlsZSAoZXhpc3RpbmdDaGlsZCAhPT0gbnVsbCkge1xuICAgICAgaWYgKGV4aXN0aW5nQ2hpbGQua2V5ICE9PSBudWxsKSB7XG4gICAgICAgIGV4aXN0aW5nQ2hpbGRyZW4uc2V0KGV4aXN0aW5nQ2hpbGQua2V5LCBleGlzdGluZ0NoaWxkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV4aXN0aW5nQ2hpbGRyZW4uc2V0KGV4aXN0aW5nQ2hpbGQuaW5kZXgsIGV4aXN0aW5nQ2hpbGQpO1xuICAgICAgfVxuXG4gICAgICBleGlzdGluZ0NoaWxkID0gZXhpc3RpbmdDaGlsZC5zaWJsaW5nO1xuICAgIH1cblxuICAgIHJldHVybiBleGlzdGluZ0NoaWxkcmVuO1xuICB9XG5cbiAgZnVuY3Rpb24gdXNlRmliZXIoZmliZXIsIHBlbmRpbmdQcm9wcykge1xuICAgIC8vIFdlIGN1cnJlbnRseSBzZXQgc2libGluZyB0byBudWxsIGFuZCBpbmRleCB0byAwIGhlcmUgYmVjYXVzZSBpdCBpcyBlYXN5XG4gICAgLy8gdG8gZm9yZ2V0IHRvIGRvIGJlZm9yZSByZXR1cm5pbmcgaXQuIEUuZy4gZm9yIHRoZSBzaW5nbGUgY2hpbGQgY2FzZS5cbiAgICB2YXIgY2xvbmUgPSBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhmaWJlciwgcGVuZGluZ1Byb3BzKTtcbiAgICBjbG9uZS5pbmRleCA9IDA7XG4gICAgY2xvbmUuc2libGluZyA9IG51bGw7XG4gICAgcmV0dXJuIGNsb25lO1xuICB9XG5cbiAgZnVuY3Rpb24gcGxhY2VDaGlsZChuZXdGaWJlciwgbGFzdFBsYWNlZEluZGV4LCBuZXdJbmRleCkge1xuICAgIG5ld0ZpYmVyLmluZGV4ID0gbmV3SW5kZXg7XG5cbiAgICBpZiAoIXNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgICAgIC8vIE5vb3AuXG4gICAgICByZXR1cm4gbGFzdFBsYWNlZEluZGV4O1xuICAgIH1cblxuICAgIHZhciBjdXJyZW50ID0gbmV3RmliZXIuYWx0ZXJuYXRlO1xuXG4gICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgIHZhciBvbGRJbmRleCA9IGN1cnJlbnQuaW5kZXg7XG5cbiAgICAgIGlmIChvbGRJbmRleCA8IGxhc3RQbGFjZWRJbmRleCkge1xuICAgICAgICAvLyBUaGlzIGlzIGEgbW92ZS5cbiAgICAgICAgbmV3RmliZXIuZmxhZ3MgPSBQbGFjZW1lbnQ7XG4gICAgICAgIHJldHVybiBsYXN0UGxhY2VkSW5kZXg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUaGlzIGl0ZW0gY2FuIHN0YXkgaW4gcGxhY2UuXG4gICAgICAgIHJldHVybiBvbGRJbmRleDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhpcyBpcyBhbiBpbnNlcnRpb24uXG4gICAgICBuZXdGaWJlci5mbGFncyA9IFBsYWNlbWVudDtcbiAgICAgIHJldHVybiBsYXN0UGxhY2VkSW5kZXg7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcGxhY2VTaW5nbGVDaGlsZChuZXdGaWJlcikge1xuICAgIC8vIFRoaXMgaXMgc2ltcGxlciBmb3IgdGhlIHNpbmdsZSBjaGlsZCBjYXNlLiBXZSBvbmx5IG5lZWQgdG8gZG8gYVxuICAgIC8vIHBsYWNlbWVudCBmb3IgaW5zZXJ0aW5nIG5ldyBjaGlsZHJlbi5cbiAgICBpZiAoc2hvdWxkVHJhY2tTaWRlRWZmZWN0cyAmJiBuZXdGaWJlci5hbHRlcm5hdGUgPT09IG51bGwpIHtcbiAgICAgIG5ld0ZpYmVyLmZsYWdzID0gUGxhY2VtZW50O1xuICAgIH1cblxuICAgIHJldHVybiBuZXdGaWJlcjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZVRleHROb2RlKHJldHVybkZpYmVyLCBjdXJyZW50LCB0ZXh0Q29udGVudCwgbGFuZXMpIHtcbiAgICBpZiAoY3VycmVudCA9PT0gbnVsbCB8fCBjdXJyZW50LnRhZyAhPT0gSG9zdFRleHQpIHtcbiAgICAgIC8vIEluc2VydFxuICAgICAgdmFyIGNyZWF0ZWQgPSBjcmVhdGVGaWJlckZyb21UZXh0KHRleHRDb250ZW50LCByZXR1cm5GaWJlci5tb2RlLCBsYW5lcyk7XG4gICAgICBjcmVhdGVkLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgcmV0dXJuIGNyZWF0ZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFVwZGF0ZVxuICAgICAgdmFyIGV4aXN0aW5nID0gdXNlRmliZXIoY3VycmVudCwgdGV4dENvbnRlbnQpO1xuICAgICAgZXhpc3RpbmcucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlRWxlbWVudChyZXR1cm5GaWJlciwgY3VycmVudCwgZWxlbWVudCwgbGFuZXMpIHtcbiAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgaWYgKGN1cnJlbnQuZWxlbWVudFR5cGUgPT09IGVsZW1lbnQudHlwZSB8fCAoIC8vIEtlZXAgdGhpcyBjaGVjayBpbmxpbmUgc28gaXQgb25seSBydW5zIG9uIHRoZSBmYWxzZSBwYXRoOlxuICAgICAgIGlzQ29tcGF0aWJsZUZhbWlseUZvckhvdFJlbG9hZGluZyhjdXJyZW50LCBlbGVtZW50KSApKSB7XG4gICAgICAgIC8vIE1vdmUgYmFzZWQgb24gaW5kZXhcbiAgICAgICAgdmFyIGV4aXN0aW5nID0gdXNlRmliZXIoY3VycmVudCwgZWxlbWVudC5wcm9wcyk7XG4gICAgICAgIGV4aXN0aW5nLnJlZiA9IGNvZXJjZVJlZihyZXR1cm5GaWJlciwgY3VycmVudCwgZWxlbWVudCk7XG4gICAgICAgIGV4aXN0aW5nLnJldHVybiA9IHJldHVybkZpYmVyO1xuXG4gICAgICAgIHtcbiAgICAgICAgICBleGlzdGluZy5fZGVidWdTb3VyY2UgPSBlbGVtZW50Ll9zb3VyY2U7XG4gICAgICAgICAgZXhpc3RpbmcuX2RlYnVnT3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBleGlzdGluZztcbiAgICAgIH1cbiAgICB9IC8vIEluc2VydFxuXG5cbiAgICB2YXIgY3JlYXRlZCA9IGNyZWF0ZUZpYmVyRnJvbUVsZW1lbnQoZWxlbWVudCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMpO1xuICAgIGNyZWF0ZWQucmVmID0gY29lcmNlUmVmKHJldHVybkZpYmVyLCBjdXJyZW50LCBlbGVtZW50KTtcbiAgICBjcmVhdGVkLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgIHJldHVybiBjcmVhdGVkO1xuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlUG9ydGFsKHJldHVybkZpYmVyLCBjdXJyZW50LCBwb3J0YWwsIGxhbmVzKSB7XG4gICAgaWYgKGN1cnJlbnQgPT09IG51bGwgfHwgY3VycmVudC50YWcgIT09IEhvc3RQb3J0YWwgfHwgY3VycmVudC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyAhPT0gcG9ydGFsLmNvbnRhaW5lckluZm8gfHwgY3VycmVudC5zdGF0ZU5vZGUuaW1wbGVtZW50YXRpb24gIT09IHBvcnRhbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgLy8gSW5zZXJ0XG4gICAgICB2YXIgY3JlYXRlZCA9IGNyZWF0ZUZpYmVyRnJvbVBvcnRhbChwb3J0YWwsIHJldHVybkZpYmVyLm1vZGUsIGxhbmVzKTtcbiAgICAgIGNyZWF0ZWQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICByZXR1cm4gY3JlYXRlZDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVXBkYXRlXG4gICAgICB2YXIgZXhpc3RpbmcgPSB1c2VGaWJlcihjdXJyZW50LCBwb3J0YWwuY2hpbGRyZW4gfHwgW10pO1xuICAgICAgZXhpc3RpbmcucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlRnJhZ21lbnQocmV0dXJuRmliZXIsIGN1cnJlbnQsIGZyYWdtZW50LCBsYW5lcywga2V5KSB7XG4gICAgaWYgKGN1cnJlbnQgPT09IG51bGwgfHwgY3VycmVudC50YWcgIT09IEZyYWdtZW50KSB7XG4gICAgICAvLyBJbnNlcnRcbiAgICAgIHZhciBjcmVhdGVkID0gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoZnJhZ21lbnQsIHJldHVybkZpYmVyLm1vZGUsIGxhbmVzLCBrZXkpO1xuICAgICAgY3JlYXRlZC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgIHJldHVybiBjcmVhdGVkO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBVcGRhdGVcbiAgICAgIHZhciBleGlzdGluZyA9IHVzZUZpYmVyKGN1cnJlbnQsIGZyYWdtZW50KTtcbiAgICAgIGV4aXN0aW5nLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUNoaWxkKHJldHVybkZpYmVyLCBuZXdDaGlsZCwgbGFuZXMpIHtcbiAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgbmV3Q2hpbGQgPT09ICdudW1iZXInKSB7XG4gICAgICAvLyBUZXh0IG5vZGVzIGRvbid0IGhhdmUga2V5cy4gSWYgdGhlIHByZXZpb3VzIG5vZGUgaXMgaW1wbGljaXRseSBrZXllZFxuICAgICAgLy8gd2UgY2FuIGNvbnRpbnVlIHRvIHJlcGxhY2UgaXQgd2l0aG91dCBhYm9ydGluZyBldmVuIGlmIGl0IGlzIG5vdCBhIHRleHRcbiAgICAgIC8vIG5vZGUuXG4gICAgICB2YXIgY3JlYXRlZCA9IGNyZWF0ZUZpYmVyRnJvbVRleHQoJycgKyBuZXdDaGlsZCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMpO1xuICAgICAgY3JlYXRlZC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgIHJldHVybiBjcmVhdGVkO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09ICdvYmplY3QnICYmIG5ld0NoaWxkICE9PSBudWxsKSB7XG4gICAgICBzd2l0Y2ggKG5ld0NoaWxkLiQkdHlwZW9mKSB7XG4gICAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBfY3JlYXRlZCA9IGNyZWF0ZUZpYmVyRnJvbUVsZW1lbnQobmV3Q2hpbGQsIHJldHVybkZpYmVyLm1vZGUsIGxhbmVzKTtcblxuICAgICAgICAgICAgX2NyZWF0ZWQucmVmID0gY29lcmNlUmVmKHJldHVybkZpYmVyLCBudWxsLCBuZXdDaGlsZCk7XG4gICAgICAgICAgICBfY3JlYXRlZC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgICAgICAgIHJldHVybiBfY3JlYXRlZDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgX2NyZWF0ZWQyID0gY3JlYXRlRmliZXJGcm9tUG9ydGFsKG5ld0NoaWxkLCByZXR1cm5GaWJlci5tb2RlLCBsYW5lcyk7XG5cbiAgICAgICAgICAgIF9jcmVhdGVkMi5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgICAgICAgIHJldHVybiBfY3JlYXRlZDI7XG4gICAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaXNBcnJheSQxKG5ld0NoaWxkKSB8fCBnZXRJdGVyYXRvckZuKG5ld0NoaWxkKSkge1xuICAgICAgICB2YXIgX2NyZWF0ZWQzID0gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQobmV3Q2hpbGQsIHJldHVybkZpYmVyLm1vZGUsIGxhbmVzLCBudWxsKTtcblxuICAgICAgICBfY3JlYXRlZDMucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICAgIHJldHVybiBfY3JlYXRlZDM7XG4gICAgICB9XG5cbiAgICAgIHRocm93T25JbnZhbGlkT2JqZWN0VHlwZShyZXR1cm5GaWJlciwgbmV3Q2hpbGQpO1xuICAgIH1cblxuICAgIHtcbiAgICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgd2Fybk9uRnVuY3Rpb25UeXBlKHJldHVybkZpYmVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZVNsb3QocmV0dXJuRmliZXIsIG9sZEZpYmVyLCBuZXdDaGlsZCwgbGFuZXMpIHtcbiAgICAvLyBVcGRhdGUgdGhlIGZpYmVyIGlmIHRoZSBrZXlzIG1hdGNoLCBvdGhlcndpc2UgcmV0dXJuIG51bGwuXG4gICAgdmFyIGtleSA9IG9sZEZpYmVyICE9PSBudWxsID8gb2xkRmliZXIua2V5IDogbnVsbDtcblxuICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBuZXdDaGlsZCA9PT0gJ251bWJlcicpIHtcbiAgICAgIC8vIFRleHQgbm9kZXMgZG9uJ3QgaGF2ZSBrZXlzLiBJZiB0aGUgcHJldmlvdXMgbm9kZSBpcyBpbXBsaWNpdGx5IGtleWVkXG4gICAgICAvLyB3ZSBjYW4gY29udGludWUgdG8gcmVwbGFjZSBpdCB3aXRob3V0IGFib3J0aW5nIGV2ZW4gaWYgaXQgaXMgbm90IGEgdGV4dFxuICAgICAgLy8gbm9kZS5cbiAgICAgIGlmIChrZXkgIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB1cGRhdGVUZXh0Tm9kZShyZXR1cm5GaWJlciwgb2xkRmliZXIsICcnICsgbmV3Q2hpbGQsIGxhbmVzKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnb2JqZWN0JyAmJiBuZXdDaGlsZCAhPT0gbnVsbCkge1xuICAgICAgc3dpdGNoIChuZXdDaGlsZC4kJHR5cGVvZikge1xuICAgICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAobmV3Q2hpbGQua2V5ID09PSBrZXkpIHtcbiAgICAgICAgICAgICAgaWYgKG5ld0NoaWxkLnR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdXBkYXRlRnJhZ21lbnQocmV0dXJuRmliZXIsIG9sZEZpYmVyLCBuZXdDaGlsZC5wcm9wcy5jaGlsZHJlbiwgbGFuZXMsIGtleSk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gdXBkYXRlRWxlbWVudChyZXR1cm5GaWJlciwgb2xkRmliZXIsIG5ld0NoaWxkLCBsYW5lcyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAobmV3Q2hpbGQua2V5ID09PSBrZXkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZVBvcnRhbChyZXR1cm5GaWJlciwgb2xkRmliZXIsIG5ld0NoaWxkLCBsYW5lcyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChpc0FycmF5JDEobmV3Q2hpbGQpIHx8IGdldEl0ZXJhdG9yRm4obmV3Q2hpbGQpKSB7XG4gICAgICAgIGlmIChrZXkgIT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1cGRhdGVGcmFnbWVudChyZXR1cm5GaWJlciwgb2xkRmliZXIsIG5ld0NoaWxkLCBsYW5lcywgbnVsbCk7XG4gICAgICB9XG5cbiAgICAgIHRocm93T25JbnZhbGlkT2JqZWN0VHlwZShyZXR1cm5GaWJlciwgbmV3Q2hpbGQpO1xuICAgIH1cblxuICAgIHtcbiAgICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgd2Fybk9uRnVuY3Rpb25UeXBlKHJldHVybkZpYmVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZUZyb21NYXAoZXhpc3RpbmdDaGlsZHJlbiwgcmV0dXJuRmliZXIsIG5ld0lkeCwgbmV3Q2hpbGQsIGxhbmVzKSB7XG4gICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIG5ld0NoaWxkID09PSAnbnVtYmVyJykge1xuICAgICAgLy8gVGV4dCBub2RlcyBkb24ndCBoYXZlIGtleXMsIHNvIHdlIG5laXRoZXIgaGF2ZSB0byBjaGVjayB0aGUgb2xkIG5vclxuICAgICAgLy8gbmV3IG5vZGUgZm9yIHRoZSBrZXkuIElmIGJvdGggYXJlIHRleHQgbm9kZXMsIHRoZXkgbWF0Y2guXG4gICAgICB2YXIgbWF0Y2hlZEZpYmVyID0gZXhpc3RpbmdDaGlsZHJlbi5nZXQobmV3SWR4KSB8fCBudWxsO1xuICAgICAgcmV0dXJuIHVwZGF0ZVRleHROb2RlKHJldHVybkZpYmVyLCBtYXRjaGVkRmliZXIsICcnICsgbmV3Q2hpbGQsIGxhbmVzKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnb2JqZWN0JyAmJiBuZXdDaGlsZCAhPT0gbnVsbCkge1xuICAgICAgc3dpdGNoIChuZXdDaGlsZC4kJHR5cGVvZikge1xuICAgICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgX21hdGNoZWRGaWJlciA9IGV4aXN0aW5nQ2hpbGRyZW4uZ2V0KG5ld0NoaWxkLmtleSA9PT0gbnVsbCA/IG5ld0lkeCA6IG5ld0NoaWxkLmtleSkgfHwgbnVsbDtcblxuICAgICAgICAgICAgaWYgKG5ld0NoaWxkLnR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZUZyYWdtZW50KHJldHVybkZpYmVyLCBfbWF0Y2hlZEZpYmVyLCBuZXdDaGlsZC5wcm9wcy5jaGlsZHJlbiwgbGFuZXMsIG5ld0NoaWxkLmtleSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB1cGRhdGVFbGVtZW50KHJldHVybkZpYmVyLCBfbWF0Y2hlZEZpYmVyLCBuZXdDaGlsZCwgbGFuZXMpO1xuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBfbWF0Y2hlZEZpYmVyMiA9IGV4aXN0aW5nQ2hpbGRyZW4uZ2V0KG5ld0NoaWxkLmtleSA9PT0gbnVsbCA/IG5ld0lkeCA6IG5ld0NoaWxkLmtleSkgfHwgbnVsbDtcblxuICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZVBvcnRhbChyZXR1cm5GaWJlciwgX21hdGNoZWRGaWJlcjIsIG5ld0NoaWxkLCBsYW5lcyk7XG4gICAgICAgICAgfVxuXG4gICAgICB9XG5cbiAgICAgIGlmIChpc0FycmF5JDEobmV3Q2hpbGQpIHx8IGdldEl0ZXJhdG9yRm4obmV3Q2hpbGQpKSB7XG4gICAgICAgIHZhciBfbWF0Y2hlZEZpYmVyMyA9IGV4aXN0aW5nQ2hpbGRyZW4uZ2V0KG5ld0lkeCkgfHwgbnVsbDtcblxuICAgICAgICByZXR1cm4gdXBkYXRlRnJhZ21lbnQocmV0dXJuRmliZXIsIF9tYXRjaGVkRmliZXIzLCBuZXdDaGlsZCwgbGFuZXMsIG51bGwpO1xuICAgICAgfVxuXG4gICAgICB0aHJvd09uSW52YWxpZE9iamVjdFR5cGUocmV0dXJuRmliZXIsIG5ld0NoaWxkKTtcbiAgICB9XG5cbiAgICB7XG4gICAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHdhcm5PbkZ1bmN0aW9uVHlwZShyZXR1cm5GaWJlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgLyoqXG4gICAqIFdhcm5zIGlmIHRoZXJlIGlzIGEgZHVwbGljYXRlIG9yIG1pc3Npbmcga2V5XG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gd2Fybk9uSW52YWxpZEtleShjaGlsZCwga25vd25LZXlzLCByZXR1cm5GaWJlcikge1xuICAgIHtcbiAgICAgIGlmICh0eXBlb2YgY2hpbGQgIT09ICdvYmplY3QnIHx8IGNoaWxkID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBrbm93bktleXM7XG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAoY2hpbGQuJCR0eXBlb2YpIHtcbiAgICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgICAgd2FybkZvck1pc3NpbmdLZXkoY2hpbGQsIHJldHVybkZpYmVyKTtcbiAgICAgICAgICB2YXIga2V5ID0gY2hpbGQua2V5O1xuXG4gICAgICAgICAgaWYgKHR5cGVvZiBrZXkgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoa25vd25LZXlzID09PSBudWxsKSB7XG4gICAgICAgICAgICBrbm93bktleXMgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgICBrbm93bktleXMuYWRkKGtleSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIWtub3duS2V5cy5oYXMoa2V5KSkge1xuICAgICAgICAgICAga25vd25LZXlzLmFkZChrZXkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZXJyb3IoJ0VuY291bnRlcmVkIHR3byBjaGlsZHJlbiB3aXRoIHRoZSBzYW1lIGtleSwgYCVzYC4gJyArICdLZXlzIHNob3VsZCBiZSB1bmlxdWUgc28gdGhhdCBjb21wb25lbnRzIG1haW50YWluIHRoZWlyIGlkZW50aXR5ICcgKyAnYWNyb3NzIHVwZGF0ZXMuIE5vbi11bmlxdWUga2V5cyBtYXkgY2F1c2UgY2hpbGRyZW4gdG8gYmUgJyArICdkdXBsaWNhdGVkIGFuZC9vciBvbWl0dGVkIFx1MjAxNCB0aGUgYmVoYXZpb3IgaXMgdW5zdXBwb3J0ZWQgYW5kICcgKyAnY291bGQgY2hhbmdlIGluIGEgZnV0dXJlIHZlcnNpb24uJywga2V5KTtcblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBrbm93bktleXM7XG4gIH1cblxuICBmdW5jdGlvbiByZWNvbmNpbGVDaGlsZHJlbkFycmF5KHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgbmV3Q2hpbGRyZW4sIGxhbmVzKSB7XG4gICAgLy8gVGhpcyBhbGdvcml0aG0gY2FuJ3Qgb3B0aW1pemUgYnkgc2VhcmNoaW5nIGZyb20gYm90aCBlbmRzIHNpbmNlIHdlXG4gICAgLy8gZG9uJ3QgaGF2ZSBiYWNrcG9pbnRlcnMgb24gZmliZXJzLiBJJ20gdHJ5aW5nIHRvIHNlZSBob3cgZmFyIHdlIGNhbiBnZXRcbiAgICAvLyB3aXRoIHRoYXQgbW9kZWwuIElmIGl0IGVuZHMgdXAgbm90IGJlaW5nIHdvcnRoIHRoZSB0cmFkZW9mZnMsIHdlIGNhblxuICAgIC8vIGFkZCBpdCBsYXRlci5cbiAgICAvLyBFdmVuIHdpdGggYSB0d28gZW5kZWQgb3B0aW1pemF0aW9uLCB3ZSdkIHdhbnQgdG8gb3B0aW1pemUgZm9yIHRoZSBjYXNlXG4gICAgLy8gd2hlcmUgdGhlcmUgYXJlIGZldyBjaGFuZ2VzIGFuZCBicnV0ZSBmb3JjZSB0aGUgY29tcGFyaXNvbiBpbnN0ZWFkIG9mXG4gICAgLy8gZ29pbmcgZm9yIHRoZSBNYXAuIEl0J2QgbGlrZSB0byBleHBsb3JlIGhpdHRpbmcgdGhhdCBwYXRoIGZpcnN0IGluXG4gICAgLy8gZm9yd2FyZC1vbmx5IG1vZGUgYW5kIG9ubHkgZ28gZm9yIHRoZSBNYXAgb25jZSB3ZSBub3RpY2UgdGhhdCB3ZSBuZWVkXG4gICAgLy8gbG90cyBvZiBsb29rIGFoZWFkLiBUaGlzIGRvZXNuJ3QgaGFuZGxlIHJldmVyc2FsIGFzIHdlbGwgYXMgdHdvIGVuZGVkXG4gICAgLy8gc2VhcmNoIGJ1dCB0aGF0J3MgdW51c3VhbC4gQmVzaWRlcywgZm9yIHRoZSB0d28gZW5kZWQgb3B0aW1pemF0aW9uIHRvXG4gICAgLy8gd29yayBvbiBJdGVyYWJsZXMsIHdlJ2QgbmVlZCB0byBjb3B5IHRoZSB3aG9sZSBzZXQuXG4gICAgLy8gSW4gdGhpcyBmaXJzdCBpdGVyYXRpb24sIHdlJ2xsIGp1c3QgbGl2ZSB3aXRoIGhpdHRpbmcgdGhlIGJhZCBjYXNlXG4gICAgLy8gKGFkZGluZyBldmVyeXRoaW5nIHRvIGEgTWFwKSBpbiBmb3IgZXZlcnkgaW5zZXJ0L21vdmUuXG4gICAgLy8gSWYgeW91IGNoYW5nZSB0aGlzIGNvZGUsIGFsc28gdXBkYXRlIHJlY29uY2lsZUNoaWxkcmVuSXRlcmF0b3IoKSB3aGljaFxuICAgIC8vIHVzZXMgdGhlIHNhbWUgYWxnb3JpdGhtLlxuICAgIHtcbiAgICAgIC8vIEZpcnN0LCB2YWxpZGF0ZSBrZXlzLlxuICAgICAgdmFyIGtub3duS2V5cyA9IG51bGw7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmV3Q2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGNoaWxkID0gbmV3Q2hpbGRyZW5baV07XG4gICAgICAgIGtub3duS2V5cyA9IHdhcm5PbkludmFsaWRLZXkoY2hpbGQsIGtub3duS2V5cywgcmV0dXJuRmliZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciByZXN1bHRpbmdGaXJzdENoaWxkID0gbnVsbDtcbiAgICB2YXIgcHJldmlvdXNOZXdGaWJlciA9IG51bGw7XG4gICAgdmFyIG9sZEZpYmVyID0gY3VycmVudEZpcnN0Q2hpbGQ7XG4gICAgdmFyIGxhc3RQbGFjZWRJbmRleCA9IDA7XG4gICAgdmFyIG5ld0lkeCA9IDA7XG4gICAgdmFyIG5leHRPbGRGaWJlciA9IG51bGw7XG5cbiAgICBmb3IgKDsgb2xkRmliZXIgIT09IG51bGwgJiYgbmV3SWR4IDwgbmV3Q2hpbGRyZW4ubGVuZ3RoOyBuZXdJZHgrKykge1xuICAgICAgaWYgKG9sZEZpYmVyLmluZGV4ID4gbmV3SWR4KSB7XG4gICAgICAgIG5leHRPbGRGaWJlciA9IG9sZEZpYmVyO1xuICAgICAgICBvbGRGaWJlciA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXh0T2xkRmliZXIgPSBvbGRGaWJlci5zaWJsaW5nO1xuICAgICAgfVxuXG4gICAgICB2YXIgbmV3RmliZXIgPSB1cGRhdGVTbG90KHJldHVybkZpYmVyLCBvbGRGaWJlciwgbmV3Q2hpbGRyZW5bbmV3SWR4XSwgbGFuZXMpO1xuXG4gICAgICBpZiAobmV3RmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgLy8gVE9ETzogVGhpcyBicmVha3Mgb24gZW1wdHkgc2xvdHMgbGlrZSBudWxsIGNoaWxkcmVuLiBUaGF0J3NcbiAgICAgICAgLy8gdW5mb3J0dW5hdGUgYmVjYXVzZSBpdCB0cmlnZ2VycyB0aGUgc2xvdyBwYXRoIGFsbCB0aGUgdGltZS4gV2UgbmVlZFxuICAgICAgICAvLyBhIGJldHRlciB3YXkgdG8gY29tbXVuaWNhdGUgd2hldGhlciB0aGlzIHdhcyBhIG1pc3Mgb3IgbnVsbCxcbiAgICAgICAgLy8gYm9vbGVhbiwgdW5kZWZpbmVkLCBldGMuXG4gICAgICAgIGlmIChvbGRGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAgIG9sZEZpYmVyID0gbmV4dE9sZEZpYmVyO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChzaG91bGRUcmFja1NpZGVFZmZlY3RzKSB7XG4gICAgICAgIGlmIChvbGRGaWJlciAmJiBuZXdGaWJlci5hbHRlcm5hdGUgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBXZSBtYXRjaGVkIHRoZSBzbG90LCBidXQgd2UgZGlkbid0IHJldXNlIHRoZSBleGlzdGluZyBmaWJlciwgc28gd2VcbiAgICAgICAgICAvLyBuZWVkIHRvIGRlbGV0ZSB0aGUgZXhpc3RpbmcgY2hpbGQuXG4gICAgICAgICAgZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIG9sZEZpYmVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsYXN0UGxhY2VkSW5kZXggPSBwbGFjZUNoaWxkKG5ld0ZpYmVyLCBsYXN0UGxhY2VkSW5kZXgsIG5ld0lkeCk7XG5cbiAgICAgIGlmIChwcmV2aW91c05ld0ZpYmVyID09PSBudWxsKSB7XG4gICAgICAgIC8vIFRPRE86IE1vdmUgb3V0IG9mIHRoZSBsb29wLiBUaGlzIG9ubHkgaGFwcGVucyBmb3IgdGhlIGZpcnN0IHJ1bi5cbiAgICAgICAgcmVzdWx0aW5nRmlyc3RDaGlsZCA9IG5ld0ZpYmVyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVE9ETzogRGVmZXIgc2libGluZ3MgaWYgd2UncmUgbm90IGF0IHRoZSByaWdodCBpbmRleCBmb3IgdGhpcyBzbG90LlxuICAgICAgICAvLyBJLmUuIGlmIHdlIGhhZCBudWxsIHZhbHVlcyBiZWZvcmUsIHRoZW4gd2Ugd2FudCB0byBkZWZlciB0aGlzXG4gICAgICAgIC8vIGZvciBlYWNoIG51bGwgdmFsdWUuIEhvd2V2ZXIsIHdlIGFsc28gZG9uJ3Qgd2FudCB0byBjYWxsIHVwZGF0ZVNsb3RcbiAgICAgICAgLy8gd2l0aCB0aGUgcHJldmlvdXMgb25lLlxuICAgICAgICBwcmV2aW91c05ld0ZpYmVyLnNpYmxpbmcgPSBuZXdGaWJlcjtcbiAgICAgIH1cblxuICAgICAgcHJldmlvdXNOZXdGaWJlciA9IG5ld0ZpYmVyO1xuICAgICAgb2xkRmliZXIgPSBuZXh0T2xkRmliZXI7XG4gICAgfVxuXG4gICAgaWYgKG5ld0lkeCA9PT0gbmV3Q2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAvLyBXZSd2ZSByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIG5ldyBjaGlsZHJlbi4gV2UgY2FuIGRlbGV0ZSB0aGUgcmVzdC5cbiAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBvbGRGaWJlcik7XG4gICAgICByZXR1cm4gcmVzdWx0aW5nRmlyc3RDaGlsZDtcbiAgICB9XG5cbiAgICBpZiAob2xkRmliZXIgPT09IG51bGwpIHtcbiAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYW55IG1vcmUgZXhpc3RpbmcgY2hpbGRyZW4gd2UgY2FuIGNob29zZSBhIGZhc3QgcGF0aFxuICAgICAgLy8gc2luY2UgdGhlIHJlc3Qgd2lsbCBhbGwgYmUgaW5zZXJ0aW9ucy5cbiAgICAgIGZvciAoOyBuZXdJZHggPCBuZXdDaGlsZHJlbi5sZW5ndGg7IG5ld0lkeCsrKSB7XG4gICAgICAgIHZhciBfbmV3RmliZXIgPSBjcmVhdGVDaGlsZChyZXR1cm5GaWJlciwgbmV3Q2hpbGRyZW5bbmV3SWR4XSwgbGFuZXMpO1xuXG4gICAgICAgIGlmIChfbmV3RmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxhc3RQbGFjZWRJbmRleCA9IHBsYWNlQ2hpbGQoX25ld0ZpYmVyLCBsYXN0UGxhY2VkSW5kZXgsIG5ld0lkeCk7XG5cbiAgICAgICAgaWYgKHByZXZpb3VzTmV3RmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBUT0RPOiBNb3ZlIG91dCBvZiB0aGUgbG9vcC4gVGhpcyBvbmx5IGhhcHBlbnMgZm9yIHRoZSBmaXJzdCBydW4uXG4gICAgICAgICAgcmVzdWx0aW5nRmlyc3RDaGlsZCA9IF9uZXdGaWJlcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcmV2aW91c05ld0ZpYmVyLnNpYmxpbmcgPSBfbmV3RmliZXI7XG4gICAgICAgIH1cblxuICAgICAgICBwcmV2aW91c05ld0ZpYmVyID0gX25ld0ZpYmVyO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0aW5nRmlyc3RDaGlsZDtcbiAgICB9IC8vIEFkZCBhbGwgY2hpbGRyZW4gdG8gYSBrZXkgbWFwIGZvciBxdWljayBsb29rdXBzLlxuXG5cbiAgICB2YXIgZXhpc3RpbmdDaGlsZHJlbiA9IG1hcFJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBvbGRGaWJlcik7IC8vIEtlZXAgc2Nhbm5pbmcgYW5kIHVzZSB0aGUgbWFwIHRvIHJlc3RvcmUgZGVsZXRlZCBpdGVtcyBhcyBtb3Zlcy5cblxuICAgIGZvciAoOyBuZXdJZHggPCBuZXdDaGlsZHJlbi5sZW5ndGg7IG5ld0lkeCsrKSB7XG4gICAgICB2YXIgX25ld0ZpYmVyMiA9IHVwZGF0ZUZyb21NYXAoZXhpc3RpbmdDaGlsZHJlbiwgcmV0dXJuRmliZXIsIG5ld0lkeCwgbmV3Q2hpbGRyZW5bbmV3SWR4XSwgbGFuZXMpO1xuXG4gICAgICBpZiAoX25ld0ZpYmVyMiAhPT0gbnVsbCkge1xuICAgICAgICBpZiAoc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICAgICAgICAgIGlmIChfbmV3RmliZXIyLmFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gVGhlIG5ldyBmaWJlciBpcyBhIHdvcmsgaW4gcHJvZ3Jlc3MsIGJ1dCBpZiB0aGVyZSBleGlzdHMgYVxuICAgICAgICAgICAgLy8gY3VycmVudCwgdGhhdCBtZWFucyB0aGF0IHdlIHJldXNlZCB0aGUgZmliZXIuIFdlIG5lZWQgdG8gZGVsZXRlXG4gICAgICAgICAgICAvLyBpdCBmcm9tIHRoZSBjaGlsZCBsaXN0IHNvIHRoYXQgd2UgZG9uJ3QgYWRkIGl0IHRvIHRoZSBkZWxldGlvblxuICAgICAgICAgICAgLy8gbGlzdC5cbiAgICAgICAgICAgIGV4aXN0aW5nQ2hpbGRyZW4uZGVsZXRlKF9uZXdGaWJlcjIua2V5ID09PSBudWxsID8gbmV3SWR4IDogX25ld0ZpYmVyMi5rZXkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxhc3RQbGFjZWRJbmRleCA9IHBsYWNlQ2hpbGQoX25ld0ZpYmVyMiwgbGFzdFBsYWNlZEluZGV4LCBuZXdJZHgpO1xuXG4gICAgICAgIGlmIChwcmV2aW91c05ld0ZpYmVyID09PSBudWxsKSB7XG4gICAgICAgICAgcmVzdWx0aW5nRmlyc3RDaGlsZCA9IF9uZXdGaWJlcjI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJldmlvdXNOZXdGaWJlci5zaWJsaW5nID0gX25ld0ZpYmVyMjtcbiAgICAgICAgfVxuXG4gICAgICAgIHByZXZpb3VzTmV3RmliZXIgPSBfbmV3RmliZXIyO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzaG91bGRUcmFja1NpZGVFZmZlY3RzKSB7XG4gICAgICAvLyBBbnkgZXhpc3RpbmcgY2hpbGRyZW4gdGhhdCB3ZXJlbid0IGNvbnN1bWVkIGFib3ZlIHdlcmUgZGVsZXRlZC4gV2UgbmVlZFxuICAgICAgLy8gdG8gYWRkIHRoZW0gdG8gdGhlIGRlbGV0aW9uIGxpc3QuXG4gICAgICBleGlzdGluZ0NoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgIHJldHVybiBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgY2hpbGQpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdGluZ0ZpcnN0Q2hpbGQ7XG4gIH1cblxuICBmdW5jdGlvbiByZWNvbmNpbGVDaGlsZHJlbkl0ZXJhdG9yKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgbmV3Q2hpbGRyZW5JdGVyYWJsZSwgbGFuZXMpIHtcbiAgICAvLyBUaGlzIGlzIHRoZSBzYW1lIGltcGxlbWVudGF0aW9uIGFzIHJlY29uY2lsZUNoaWxkcmVuQXJyYXkoKSxcbiAgICAvLyBidXQgdXNpbmcgdGhlIGl0ZXJhdG9yIGluc3RlYWQuXG4gICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKG5ld0NoaWxkcmVuSXRlcmFibGUpO1xuXG4gICAgaWYgKCEodHlwZW9mIGl0ZXJhdG9yRm4gPT09ICdmdW5jdGlvbicpKSB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIkFuIG9iamVjdCBpcyBub3QgYW4gaXRlcmFibGUuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB7XG4gICAgICAvLyBXZSBkb24ndCBzdXBwb3J0IHJlbmRlcmluZyBHZW5lcmF0b3JzIGJlY2F1c2UgaXQncyBhIG11dGF0aW9uLlxuICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTI5OTVcbiAgICAgIGlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIC8vICRGbG93Rml4TWUgRmxvdyBkb2Vzbid0IGtub3cgYWJvdXQgdG9TdHJpbmdUYWdcbiAgICAgIG5ld0NoaWxkcmVuSXRlcmFibGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gJ0dlbmVyYXRvcicpIHtcbiAgICAgICAgaWYgKCFkaWRXYXJuQWJvdXRHZW5lcmF0b3JzKSB7XG4gICAgICAgICAgZXJyb3IoJ1VzaW5nIEdlbmVyYXRvcnMgYXMgY2hpbGRyZW4gaXMgdW5zdXBwb3J0ZWQgYW5kIHdpbGwgbGlrZWx5IHlpZWxkICcgKyAndW5leHBlY3RlZCByZXN1bHRzIGJlY2F1c2UgZW51bWVyYXRpbmcgYSBnZW5lcmF0b3IgbXV0YXRlcyBpdC4gJyArICdZb3UgbWF5IGNvbnZlcnQgaXQgdG8gYW4gYXJyYXkgd2l0aCBgQXJyYXkuZnJvbSgpYCBvciB0aGUgJyArICdgWy4uLnNwcmVhZF1gIG9wZXJhdG9yIGJlZm9yZSByZW5kZXJpbmcuIEtlZXAgaW4gbWluZCAnICsgJ3lvdSBtaWdodCBuZWVkIHRvIHBvbHlmaWxsIHRoZXNlIGZlYXR1cmVzIGZvciBvbGRlciBicm93c2Vycy4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRpZFdhcm5BYm91dEdlbmVyYXRvcnMgPSB0cnVlO1xuICAgICAgfSAvLyBXYXJuIGFib3V0IHVzaW5nIE1hcHMgYXMgY2hpbGRyZW5cblxuXG4gICAgICBpZiAobmV3Q2hpbGRyZW5JdGVyYWJsZS5lbnRyaWVzID09PSBpdGVyYXRvckZuKSB7XG4gICAgICAgIGlmICghZGlkV2FybkFib3V0TWFwcykge1xuICAgICAgICAgIGVycm9yKCdVc2luZyBNYXBzIGFzIGNoaWxkcmVuIGlzIG5vdCBzdXBwb3J0ZWQuICcgKyAnVXNlIGFuIGFycmF5IG9mIGtleWVkIFJlYWN0RWxlbWVudHMgaW5zdGVhZC4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRpZFdhcm5BYm91dE1hcHMgPSB0cnVlO1xuICAgICAgfSAvLyBGaXJzdCwgdmFsaWRhdGUga2V5cy5cbiAgICAgIC8vIFdlJ2xsIGdldCBhIGRpZmZlcmVudCBpdGVyYXRvciBsYXRlciBmb3IgdGhlIG1haW4gcGFzcy5cblxuXG4gICAgICB2YXIgX25ld0NoaWxkcmVuID0gaXRlcmF0b3JGbi5jYWxsKG5ld0NoaWxkcmVuSXRlcmFibGUpO1xuXG4gICAgICBpZiAoX25ld0NoaWxkcmVuKSB7XG4gICAgICAgIHZhciBrbm93bktleXMgPSBudWxsO1xuXG4gICAgICAgIHZhciBfc3RlcCA9IF9uZXdDaGlsZHJlbi5uZXh0KCk7XG5cbiAgICAgICAgZm9yICg7ICFfc3RlcC5kb25lOyBfc3RlcCA9IF9uZXdDaGlsZHJlbi5uZXh0KCkpIHtcbiAgICAgICAgICB2YXIgY2hpbGQgPSBfc3RlcC52YWx1ZTtcbiAgICAgICAgICBrbm93bktleXMgPSB3YXJuT25JbnZhbGlkS2V5KGNoaWxkLCBrbm93bktleXMsIHJldHVybkZpYmVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBuZXdDaGlsZHJlbiA9IGl0ZXJhdG9yRm4uY2FsbChuZXdDaGlsZHJlbkl0ZXJhYmxlKTtcblxuICAgIGlmICghKG5ld0NoaWxkcmVuICE9IG51bGwpKSB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIkFuIGl0ZXJhYmxlIG9iamVjdCBwcm92aWRlZCBubyBpdGVyYXRvci5cIiApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciByZXN1bHRpbmdGaXJzdENoaWxkID0gbnVsbDtcbiAgICB2YXIgcHJldmlvdXNOZXdGaWJlciA9IG51bGw7XG4gICAgdmFyIG9sZEZpYmVyID0gY3VycmVudEZpcnN0Q2hpbGQ7XG4gICAgdmFyIGxhc3RQbGFjZWRJbmRleCA9IDA7XG4gICAgdmFyIG5ld0lkeCA9IDA7XG4gICAgdmFyIG5leHRPbGRGaWJlciA9IG51bGw7XG4gICAgdmFyIHN0ZXAgPSBuZXdDaGlsZHJlbi5uZXh0KCk7XG5cbiAgICBmb3IgKDsgb2xkRmliZXIgIT09IG51bGwgJiYgIXN0ZXAuZG9uZTsgbmV3SWR4KyssIHN0ZXAgPSBuZXdDaGlsZHJlbi5uZXh0KCkpIHtcbiAgICAgIGlmIChvbGRGaWJlci5pbmRleCA+IG5ld0lkeCkge1xuICAgICAgICBuZXh0T2xkRmliZXIgPSBvbGRGaWJlcjtcbiAgICAgICAgb2xkRmliZXIgPSBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV4dE9sZEZpYmVyID0gb2xkRmliZXIuc2libGluZztcbiAgICAgIH1cblxuICAgICAgdmFyIG5ld0ZpYmVyID0gdXBkYXRlU2xvdChyZXR1cm5GaWJlciwgb2xkRmliZXIsIHN0ZXAudmFsdWUsIGxhbmVzKTtcblxuICAgICAgaWYgKG5ld0ZpYmVyID09PSBudWxsKSB7XG4gICAgICAgIC8vIFRPRE86IFRoaXMgYnJlYWtzIG9uIGVtcHR5IHNsb3RzIGxpa2UgbnVsbCBjaGlsZHJlbi4gVGhhdCdzXG4gICAgICAgIC8vIHVuZm9ydHVuYXRlIGJlY2F1c2UgaXQgdHJpZ2dlcnMgdGhlIHNsb3cgcGF0aCBhbGwgdGhlIHRpbWUuIFdlIG5lZWRcbiAgICAgICAgLy8gYSBiZXR0ZXIgd2F5IHRvIGNvbW11bmljYXRlIHdoZXRoZXIgdGhpcyB3YXMgYSBtaXNzIG9yIG51bGwsXG4gICAgICAgIC8vIGJvb2xlYW4sIHVuZGVmaW5lZCwgZXRjLlxuICAgICAgICBpZiAob2xkRmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgICBvbGRGaWJlciA9IG5leHRPbGRGaWJlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICAgICAgICBpZiAob2xkRmliZXIgJiYgbmV3RmliZXIuYWx0ZXJuYXRlID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gV2UgbWF0Y2hlZCB0aGUgc2xvdCwgYnV0IHdlIGRpZG4ndCByZXVzZSB0aGUgZXhpc3RpbmcgZmliZXIsIHNvIHdlXG4gICAgICAgICAgLy8gbmVlZCB0byBkZWxldGUgdGhlIGV4aXN0aW5nIGNoaWxkLlxuICAgICAgICAgIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBvbGRGaWJlcik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbGFzdFBsYWNlZEluZGV4ID0gcGxhY2VDaGlsZChuZXdGaWJlciwgbGFzdFBsYWNlZEluZGV4LCBuZXdJZHgpO1xuXG4gICAgICBpZiAocHJldmlvdXNOZXdGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAvLyBUT0RPOiBNb3ZlIG91dCBvZiB0aGUgbG9vcC4gVGhpcyBvbmx5IGhhcHBlbnMgZm9yIHRoZSBmaXJzdCBydW4uXG4gICAgICAgIHJlc3VsdGluZ0ZpcnN0Q2hpbGQgPSBuZXdGaWJlcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRPRE86IERlZmVyIHNpYmxpbmdzIGlmIHdlJ3JlIG5vdCBhdCB0aGUgcmlnaHQgaW5kZXggZm9yIHRoaXMgc2xvdC5cbiAgICAgICAgLy8gSS5lLiBpZiB3ZSBoYWQgbnVsbCB2YWx1ZXMgYmVmb3JlLCB0aGVuIHdlIHdhbnQgdG8gZGVmZXIgdGhpc1xuICAgICAgICAvLyBmb3IgZWFjaCBudWxsIHZhbHVlLiBIb3dldmVyLCB3ZSBhbHNvIGRvbid0IHdhbnQgdG8gY2FsbCB1cGRhdGVTbG90XG4gICAgICAgIC8vIHdpdGggdGhlIHByZXZpb3VzIG9uZS5cbiAgICAgICAgcHJldmlvdXNOZXdGaWJlci5zaWJsaW5nID0gbmV3RmliZXI7XG4gICAgICB9XG5cbiAgICAgIHByZXZpb3VzTmV3RmliZXIgPSBuZXdGaWJlcjtcbiAgICAgIG9sZEZpYmVyID0gbmV4dE9sZEZpYmVyO1xuICAgIH1cblxuICAgIGlmIChzdGVwLmRvbmUpIHtcbiAgICAgIC8vIFdlJ3ZlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgbmV3IGNoaWxkcmVuLiBXZSBjYW4gZGVsZXRlIHRoZSByZXN0LlxuICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIG9sZEZpYmVyKTtcbiAgICAgIHJldHVybiByZXN1bHRpbmdGaXJzdENoaWxkO1xuICAgIH1cblxuICAgIGlmIChvbGRGaWJlciA9PT0gbnVsbCkge1xuICAgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhbnkgbW9yZSBleGlzdGluZyBjaGlsZHJlbiB3ZSBjYW4gY2hvb3NlIGEgZmFzdCBwYXRoXG4gICAgICAvLyBzaW5jZSB0aGUgcmVzdCB3aWxsIGFsbCBiZSBpbnNlcnRpb25zLlxuICAgICAgZm9yICg7ICFzdGVwLmRvbmU7IG5ld0lkeCsrLCBzdGVwID0gbmV3Q2hpbGRyZW4ubmV4dCgpKSB7XG4gICAgICAgIHZhciBfbmV3RmliZXIzID0gY3JlYXRlQ2hpbGQocmV0dXJuRmliZXIsIHN0ZXAudmFsdWUsIGxhbmVzKTtcblxuICAgICAgICBpZiAoX25ld0ZpYmVyMyA9PT0gbnVsbCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgbGFzdFBsYWNlZEluZGV4ID0gcGxhY2VDaGlsZChfbmV3RmliZXIzLCBsYXN0UGxhY2VkSW5kZXgsIG5ld0lkeCk7XG5cbiAgICAgICAgaWYgKHByZXZpb3VzTmV3RmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBUT0RPOiBNb3ZlIG91dCBvZiB0aGUgbG9vcC4gVGhpcyBvbmx5IGhhcHBlbnMgZm9yIHRoZSBmaXJzdCBydW4uXG4gICAgICAgICAgcmVzdWx0aW5nRmlyc3RDaGlsZCA9IF9uZXdGaWJlcjM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJldmlvdXNOZXdGaWJlci5zaWJsaW5nID0gX25ld0ZpYmVyMztcbiAgICAgICAgfVxuXG4gICAgICAgIHByZXZpb3VzTmV3RmliZXIgPSBfbmV3RmliZXIzO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0aW5nRmlyc3RDaGlsZDtcbiAgICB9IC8vIEFkZCBhbGwgY2hpbGRyZW4gdG8gYSBrZXkgbWFwIGZvciBxdWljayBsb29rdXBzLlxuXG5cbiAgICB2YXIgZXhpc3RpbmdDaGlsZHJlbiA9IG1hcFJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBvbGRGaWJlcik7IC8vIEtlZXAgc2Nhbm5pbmcgYW5kIHVzZSB0aGUgbWFwIHRvIHJlc3RvcmUgZGVsZXRlZCBpdGVtcyBhcyBtb3Zlcy5cblxuICAgIGZvciAoOyAhc3RlcC5kb25lOyBuZXdJZHgrKywgc3RlcCA9IG5ld0NoaWxkcmVuLm5leHQoKSkge1xuICAgICAgdmFyIF9uZXdGaWJlcjQgPSB1cGRhdGVGcm9tTWFwKGV4aXN0aW5nQ2hpbGRyZW4sIHJldHVybkZpYmVyLCBuZXdJZHgsIHN0ZXAudmFsdWUsIGxhbmVzKTtcblxuICAgICAgaWYgKF9uZXdGaWJlcjQgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKHNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgICAgICAgICBpZiAoX25ld0ZpYmVyNC5hbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIFRoZSBuZXcgZmliZXIgaXMgYSB3b3JrIGluIHByb2dyZXNzLCBidXQgaWYgdGhlcmUgZXhpc3RzIGFcbiAgICAgICAgICAgIC8vIGN1cnJlbnQsIHRoYXQgbWVhbnMgdGhhdCB3ZSByZXVzZWQgdGhlIGZpYmVyLiBXZSBuZWVkIHRvIGRlbGV0ZVxuICAgICAgICAgICAgLy8gaXQgZnJvbSB0aGUgY2hpbGQgbGlzdCBzbyB0aGF0IHdlIGRvbid0IGFkZCBpdCB0byB0aGUgZGVsZXRpb25cbiAgICAgICAgICAgIC8vIGxpc3QuXG4gICAgICAgICAgICBleGlzdGluZ0NoaWxkcmVuLmRlbGV0ZShfbmV3RmliZXI0LmtleSA9PT0gbnVsbCA/IG5ld0lkeCA6IF9uZXdGaWJlcjQua2V5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0UGxhY2VkSW5kZXggPSBwbGFjZUNoaWxkKF9uZXdGaWJlcjQsIGxhc3RQbGFjZWRJbmRleCwgbmV3SWR4KTtcblxuICAgICAgICBpZiAocHJldmlvdXNOZXdGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAgIHJlc3VsdGluZ0ZpcnN0Q2hpbGQgPSBfbmV3RmliZXI0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByZXZpb3VzTmV3RmliZXIuc2libGluZyA9IF9uZXdGaWJlcjQ7XG4gICAgICAgIH1cblxuICAgICAgICBwcmV2aW91c05ld0ZpYmVyID0gX25ld0ZpYmVyNDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICAgICAgLy8gQW55IGV4aXN0aW5nIGNoaWxkcmVuIHRoYXQgd2VyZW4ndCBjb25zdW1lZCBhYm92ZSB3ZXJlIGRlbGV0ZWQuIFdlIG5lZWRcbiAgICAgIC8vIHRvIGFkZCB0aGVtIHRvIHRoZSBkZWxldGlvbiBsaXN0LlxuICAgICAgZXhpc3RpbmdDaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgICByZXR1cm4gZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIGNoaWxkKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRpbmdGaXJzdENoaWxkO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVjb25jaWxlU2luZ2xlVGV4dE5vZGUocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCB0ZXh0Q29udGVudCwgbGFuZXMpIHtcbiAgICAvLyBUaGVyZSdzIG5vIG5lZWQgdG8gY2hlY2sgZm9yIGtleXMgb24gdGV4dCBub2RlcyBzaW5jZSB3ZSBkb24ndCBoYXZlIGFcbiAgICAvLyB3YXkgdG8gZGVmaW5lIHRoZW0uXG4gICAgaWYgKGN1cnJlbnRGaXJzdENoaWxkICE9PSBudWxsICYmIGN1cnJlbnRGaXJzdENoaWxkLnRhZyA9PT0gSG9zdFRleHQpIHtcbiAgICAgIC8vIFdlIGFscmVhZHkgaGF2ZSBhbiBleGlzdGluZyBub2RlIHNvIGxldCdzIGp1c3QgdXBkYXRlIGl0IGFuZCBkZWxldGVcbiAgICAgIC8vIHRoZSByZXN0LlxuICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLnNpYmxpbmcpO1xuICAgICAgdmFyIGV4aXN0aW5nID0gdXNlRmliZXIoY3VycmVudEZpcnN0Q2hpbGQsIHRleHRDb250ZW50KTtcbiAgICAgIGV4aXN0aW5nLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgIH0gLy8gVGhlIGV4aXN0aW5nIGZpcnN0IGNoaWxkIGlzIG5vdCBhIHRleHQgbm9kZSBzbyB3ZSBuZWVkIHRvIGNyZWF0ZSBvbmVcbiAgICAvLyBhbmQgZGVsZXRlIHRoZSBleGlzdGluZyBvbmVzLlxuXG5cbiAgICBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQpO1xuICAgIHZhciBjcmVhdGVkID0gY3JlYXRlRmliZXJGcm9tVGV4dCh0ZXh0Q29udGVudCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMpO1xuICAgIGNyZWF0ZWQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgcmV0dXJuIGNyZWF0ZWQ7XG4gIH1cblxuICBmdW5jdGlvbiByZWNvbmNpbGVTaW5nbGVFbGVtZW50KHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgZWxlbWVudCwgbGFuZXMpIHtcbiAgICB2YXIga2V5ID0gZWxlbWVudC5rZXk7XG4gICAgdmFyIGNoaWxkID0gY3VycmVudEZpcnN0Q2hpbGQ7XG5cbiAgICB3aGlsZSAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgIC8vIFRPRE86IElmIGtleSA9PT0gbnVsbCBhbmQgY2hpbGQua2V5ID09PSBudWxsLCB0aGVuIHRoaXMgb25seSBhcHBsaWVzIHRvXG4gICAgICAvLyB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgbGlzdC5cbiAgICAgIGlmIChjaGlsZC5rZXkgPT09IGtleSkge1xuICAgICAgICBzd2l0Y2ggKGNoaWxkLnRhZykge1xuICAgICAgICAgIGNhc2UgRnJhZ21lbnQ6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUpIHtcbiAgICAgICAgICAgICAgICBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY2hpbGQuc2libGluZyk7XG4gICAgICAgICAgICAgICAgdmFyIGV4aXN0aW5nID0gdXNlRmliZXIoY2hpbGQsIGVsZW1lbnQucHJvcHMuY2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgIGV4aXN0aW5nLnJldHVybiA9IHJldHVybkZpYmVyO1xuXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZXhpc3RpbmcuX2RlYnVnU291cmNlID0gZWxlbWVudC5fc291cmNlO1xuICAgICAgICAgICAgICAgICAgZXhpc3RpbmcuX2RlYnVnT3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIGNhc2UgQmxvY2s6XG5cbiAgICAgICAgICAvLyBXZSBpbnRlbnRpb25hbGx5IGZhbGx0aHJvdWdoIGhlcmUgaWYgZW5hYmxlQmxvY2tzQVBJIGlzIG5vdCBvbi5cbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVkIG5vLWZhbGx0aHJvdWdoXG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpZiAoY2hpbGQuZWxlbWVudFR5cGUgPT09IGVsZW1lbnQudHlwZSB8fCAoIC8vIEtlZXAgdGhpcyBjaGVjayBpbmxpbmUgc28gaXQgb25seSBydW5zIG9uIHRoZSBmYWxzZSBwYXRoOlxuICAgICAgICAgICAgICAgaXNDb21wYXRpYmxlRmFtaWx5Rm9ySG90UmVsb2FkaW5nKGNoaWxkLCBlbGVtZW50KSApKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGNoaWxkLnNpYmxpbmcpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9leGlzdGluZzMgPSB1c2VGaWJlcihjaGlsZCwgZWxlbWVudC5wcm9wcyk7XG5cbiAgICAgICAgICAgICAgICBfZXhpc3RpbmczLnJlZiA9IGNvZXJjZVJlZihyZXR1cm5GaWJlciwgY2hpbGQsIGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIF9leGlzdGluZzMucmV0dXJuID0gcmV0dXJuRmliZXI7XG5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBfZXhpc3RpbmczLl9kZWJ1Z1NvdXJjZSA9IGVsZW1lbnQuX3NvdXJjZTtcbiAgICAgICAgICAgICAgICAgIF9leGlzdGluZzMuX2RlYnVnT3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gX2V4aXN0aW5nMztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IC8vIERpZG4ndCBtYXRjaC5cblxuXG4gICAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjaGlsZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIGNoaWxkKTtcbiAgICAgIH1cblxuICAgICAgY2hpbGQgPSBjaGlsZC5zaWJsaW5nO1xuICAgIH1cblxuICAgIGlmIChlbGVtZW50LnR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUpIHtcbiAgICAgIHZhciBjcmVhdGVkID0gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoZWxlbWVudC5wcm9wcy5jaGlsZHJlbiwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMsIGVsZW1lbnQua2V5KTtcbiAgICAgIGNyZWF0ZWQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICByZXR1cm4gY3JlYXRlZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIF9jcmVhdGVkNCA9IGNyZWF0ZUZpYmVyRnJvbUVsZW1lbnQoZWxlbWVudCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMpO1xuXG4gICAgICBfY3JlYXRlZDQucmVmID0gY29lcmNlUmVmKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgZWxlbWVudCk7XG4gICAgICBfY3JlYXRlZDQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICByZXR1cm4gX2NyZWF0ZWQ0O1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlY29uY2lsZVNpbmdsZVBvcnRhbChyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIHBvcnRhbCwgbGFuZXMpIHtcbiAgICB2YXIga2V5ID0gcG9ydGFsLmtleTtcbiAgICB2YXIgY2hpbGQgPSBjdXJyZW50Rmlyc3RDaGlsZDtcblxuICAgIHdoaWxlIChjaGlsZCAhPT0gbnVsbCkge1xuICAgICAgLy8gVE9ETzogSWYga2V5ID09PSBudWxsIGFuZCBjaGlsZC5rZXkgPT09IG51bGwsIHRoZW4gdGhpcyBvbmx5IGFwcGxpZXMgdG9cbiAgICAgIC8vIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBsaXN0LlxuICAgICAgaWYgKGNoaWxkLmtleSA9PT0ga2V5KSB7XG4gICAgICAgIGlmIChjaGlsZC50YWcgPT09IEhvc3RQb3J0YWwgJiYgY2hpbGQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8gPT09IHBvcnRhbC5jb250YWluZXJJbmZvICYmIGNoaWxkLnN0YXRlTm9kZS5pbXBsZW1lbnRhdGlvbiA9PT0gcG9ydGFsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGNoaWxkLnNpYmxpbmcpO1xuICAgICAgICAgIHZhciBleGlzdGluZyA9IHVzZUZpYmVyKGNoaWxkLCBwb3J0YWwuY2hpbGRyZW4gfHwgW10pO1xuICAgICAgICAgIGV4aXN0aW5nLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgICAgIHJldHVybiBleGlzdGluZztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY2hpbGQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgY2hpbGQpO1xuICAgICAgfVxuXG4gICAgICBjaGlsZCA9IGNoaWxkLnNpYmxpbmc7XG4gICAgfVxuXG4gICAgdmFyIGNyZWF0ZWQgPSBjcmVhdGVGaWJlckZyb21Qb3J0YWwocG9ydGFsLCByZXR1cm5GaWJlci5tb2RlLCBsYW5lcyk7XG4gICAgY3JlYXRlZC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICByZXR1cm4gY3JlYXRlZDtcbiAgfSAvLyBUaGlzIEFQSSB3aWxsIHRhZyB0aGUgY2hpbGRyZW4gd2l0aCB0aGUgc2lkZS1lZmZlY3Qgb2YgdGhlIHJlY29uY2lsaWF0aW9uXG4gIC8vIGl0c2VsZi4gVGhleSB3aWxsIGJlIGFkZGVkIHRvIHRoZSBzaWRlLWVmZmVjdCBsaXN0IGFzIHdlIHBhc3MgdGhyb3VnaCB0aGVcbiAgLy8gY2hpbGRyZW4gYW5kIHRoZSBwYXJlbnQuXG5cblxuICBmdW5jdGlvbiByZWNvbmNpbGVDaGlsZEZpYmVycyhyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIG5ld0NoaWxkLCBsYW5lcykge1xuICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgbm90IHJlY3Vyc2l2ZS5cbiAgICAvLyBJZiB0aGUgdG9wIGxldmVsIGl0ZW0gaXMgYW4gYXJyYXksIHdlIHRyZWF0IGl0IGFzIGEgc2V0IG9mIGNoaWxkcmVuLFxuICAgIC8vIG5vdCBhcyBhIGZyYWdtZW50LiBOZXN0ZWQgYXJyYXlzIG9uIHRoZSBvdGhlciBoYW5kIHdpbGwgYmUgdHJlYXRlZCBhc1xuICAgIC8vIGZyYWdtZW50IG5vZGVzLiBSZWN1cnNpb24gaGFwcGVucyBhdCB0aGUgbm9ybWFsIGZsb3cuXG4gICAgLy8gSGFuZGxlIHRvcCBsZXZlbCB1bmtleWVkIGZyYWdtZW50cyBhcyBpZiB0aGV5IHdlcmUgYXJyYXlzLlxuICAgIC8vIFRoaXMgbGVhZHMgdG8gYW4gYW1iaWd1aXR5IGJldHdlZW4gPD57Wy4uLl19PC8+IGFuZCA8Pi4uLjwvPi5cbiAgICAvLyBXZSB0cmVhdCB0aGUgYW1iaWd1b3VzIGNhc2VzIGFib3ZlIHRoZSBzYW1lLlxuICAgIHZhciBpc1Vua2V5ZWRUb3BMZXZlbEZyYWdtZW50ID0gdHlwZW9mIG5ld0NoaWxkID09PSAnb2JqZWN0JyAmJiBuZXdDaGlsZCAhPT0gbnVsbCAmJiBuZXdDaGlsZC50eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFICYmIG5ld0NoaWxkLmtleSA9PT0gbnVsbDtcblxuICAgIGlmIChpc1Vua2V5ZWRUb3BMZXZlbEZyYWdtZW50KSB7XG4gICAgICBuZXdDaGlsZCA9IG5ld0NoaWxkLnByb3BzLmNoaWxkcmVuO1xuICAgIH0gLy8gSGFuZGxlIG9iamVjdCB0eXBlc1xuXG5cbiAgICB2YXIgaXNPYmplY3QgPSB0eXBlb2YgbmV3Q2hpbGQgPT09ICdvYmplY3QnICYmIG5ld0NoaWxkICE9PSBudWxsO1xuXG4gICAgaWYgKGlzT2JqZWN0KSB7XG4gICAgICBzd2l0Y2ggKG5ld0NoaWxkLiQkdHlwZW9mKSB7XG4gICAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICAgIHJldHVybiBwbGFjZVNpbmdsZUNoaWxkKHJlY29uY2lsZVNpbmdsZUVsZW1lbnQocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCBuZXdDaGlsZCwgbGFuZXMpKTtcblxuICAgICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICAgIHJldHVybiBwbGFjZVNpbmdsZUNoaWxkKHJlY29uY2lsZVNpbmdsZVBvcnRhbChyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIG5ld0NoaWxkLCBsYW5lcykpO1xuXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIG5ld0NoaWxkID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIHBsYWNlU2luZ2xlQ2hpbGQocmVjb25jaWxlU2luZ2xlVGV4dE5vZGUocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCAnJyArIG5ld0NoaWxkLCBsYW5lcykpO1xuICAgIH1cblxuICAgIGlmIChpc0FycmF5JDEobmV3Q2hpbGQpKSB7XG4gICAgICByZXR1cm4gcmVjb25jaWxlQ2hpbGRyZW5BcnJheShyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIG5ld0NoaWxkLCBsYW5lcyk7XG4gICAgfVxuXG4gICAgaWYgKGdldEl0ZXJhdG9yRm4obmV3Q2hpbGQpKSB7XG4gICAgICByZXR1cm4gcmVjb25jaWxlQ2hpbGRyZW5JdGVyYXRvcihyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIG5ld0NoaWxkLCBsYW5lcyk7XG4gICAgfVxuXG4gICAgaWYgKGlzT2JqZWN0KSB7XG4gICAgICB0aHJvd09uSW52YWxpZE9iamVjdFR5cGUocmV0dXJuRmliZXIsIG5ld0NoaWxkKTtcbiAgICB9XG5cbiAgICB7XG4gICAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHdhcm5PbkZ1bmN0aW9uVHlwZShyZXR1cm5GaWJlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ3VuZGVmaW5lZCcgJiYgIWlzVW5rZXllZFRvcExldmVsRnJhZ21lbnQpIHtcbiAgICAgIC8vIElmIHRoZSBuZXcgY2hpbGQgaXMgdW5kZWZpbmVkLCBhbmQgdGhlIHJldHVybiBmaWJlciBpcyBhIGNvbXBvc2l0ZVxuICAgICAgLy8gY29tcG9uZW50LCB0aHJvdyBhbiBlcnJvci4gSWYgRmliZXIgcmV0dXJuIHR5cGVzIGFyZSBkaXNhYmxlZCxcbiAgICAgIC8vIHdlIGFscmVhZHkgdGhyZXcgYWJvdmUuXG4gICAgICBzd2l0Y2ggKHJldHVybkZpYmVyLnRhZykge1xuICAgICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdmFyIGluc3RhbmNlID0gcmV0dXJuRmliZXIuc3RhdGVOb2RlO1xuXG4gICAgICAgICAgICAgIGlmIChpbnN0YW5jZS5yZW5kZXIuX2lzTW9ja0Z1bmN0aW9uKSB7XG4gICAgICAgICAgICAgICAgLy8gV2UgYWxsb3cgYXV0by1tb2NrcyB0byBwcm9jZWVkIGFzIGlmIHRoZXkncmUgcmV0dXJuaW5nIG51bGwuXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIC8vIEludGVudGlvbmFsbHkgZmFsbCB0aHJvdWdoIHRvIHRoZSBuZXh0IGNhc2UsIHdoaWNoIGhhbmRsZXMgYm90aFxuICAgICAgICAvLyBmdW5jdGlvbnMgYW5kIGNsYXNzZXNcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lZCBuby1mYWxsdGhyb3VnaFxuXG4gICAgICAgIGNhc2UgQmxvY2s6XG4gICAgICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCAoZ2V0Q29tcG9uZW50TmFtZShyZXR1cm5GaWJlci50eXBlKSB8fCAnQ29tcG9uZW50JykgKyBcIiguLi4pOiBOb3RoaW5nIHdhcyByZXR1cm5lZCBmcm9tIHJlbmRlci4gVGhpcyB1c3VhbGx5IG1lYW5zIGEgcmV0dXJuIHN0YXRlbWVudCBpcyBtaXNzaW5nLiBPciwgdG8gcmVuZGVyIG5vdGhpbmcsIHJldHVybiBudWxsLlwiICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyBSZW1haW5pbmcgY2FzZXMgYXJlIGFsbCB0cmVhdGVkIGFzIGVtcHR5LlxuXG5cbiAgICByZXR1cm4gZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkKTtcbiAgfVxuXG4gIHJldHVybiByZWNvbmNpbGVDaGlsZEZpYmVycztcbn1cblxudmFyIHJlY29uY2lsZUNoaWxkRmliZXJzID0gQ2hpbGRSZWNvbmNpbGVyKHRydWUpO1xudmFyIG1vdW50Q2hpbGRGaWJlcnMgPSBDaGlsZFJlY29uY2lsZXIoZmFsc2UpO1xuZnVuY3Rpb24gY2xvbmVDaGlsZEZpYmVycyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcykge1xuICBpZiAoIShjdXJyZW50ID09PSBudWxsIHx8IHdvcmtJblByb2dyZXNzLmNoaWxkID09PSBjdXJyZW50LmNoaWxkKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlJlc3VtaW5nIHdvcmsgbm90IHlldCBpbXBsZW1lbnRlZC5cIiApO1xuICAgIH1cbiAgfVxuXG4gIGlmICh3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9PT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBjdXJyZW50Q2hpbGQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgdmFyIG5ld0NoaWxkID0gY3JlYXRlV29ya0luUHJvZ3Jlc3MoY3VycmVudENoaWxkLCBjdXJyZW50Q2hpbGQucGVuZGluZ1Byb3BzKTtcbiAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBuZXdDaGlsZDtcbiAgbmV3Q2hpbGQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG5cbiAgd2hpbGUgKGN1cnJlbnRDaGlsZC5zaWJsaW5nICE9PSBudWxsKSB7XG4gICAgY3VycmVudENoaWxkID0gY3VycmVudENoaWxkLnNpYmxpbmc7XG4gICAgbmV3Q2hpbGQgPSBuZXdDaGlsZC5zaWJsaW5nID0gY3JlYXRlV29ya0luUHJvZ3Jlc3MoY3VycmVudENoaWxkLCBjdXJyZW50Q2hpbGQucGVuZGluZ1Byb3BzKTtcbiAgICBuZXdDaGlsZC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgfVxuXG4gIG5ld0NoaWxkLnNpYmxpbmcgPSBudWxsO1xufSAvLyBSZXNldCBhIHdvcmtJblByb2dyZXNzIGNoaWxkIHNldCB0byBwcmVwYXJlIGl0IGZvciBhIHNlY29uZCBwYXNzLlxuXG5mdW5jdGlvbiByZXNldENoaWxkRmliZXJzKHdvcmtJblByb2dyZXNzLCBsYW5lcykge1xuICB2YXIgY2hpbGQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcblxuICB3aGlsZSAoY2hpbGQgIT09IG51bGwpIHtcbiAgICByZXNldFdvcmtJblByb2dyZXNzKGNoaWxkLCBsYW5lcyk7XG4gICAgY2hpbGQgPSBjaGlsZC5zaWJsaW5nO1xuICB9XG59XG5cbnZhciBOT19DT05URVhUID0ge307XG52YXIgY29udGV4dFN0YWNrQ3Vyc29yJDEgPSBjcmVhdGVDdXJzb3IoTk9fQ09OVEVYVCk7XG52YXIgY29udGV4dEZpYmVyU3RhY2tDdXJzb3IgPSBjcmVhdGVDdXJzb3IoTk9fQ09OVEVYVCk7XG52YXIgcm9vdEluc3RhbmNlU3RhY2tDdXJzb3IgPSBjcmVhdGVDdXJzb3IoTk9fQ09OVEVYVCk7XG5cbmZ1bmN0aW9uIHJlcXVpcmVkQ29udGV4dChjKSB7XG4gIGlmICghKGMgIT09IE5PX0NPTlRFWFQpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiRXhwZWN0ZWQgaG9zdCBjb250ZXh0IHRvIGV4aXN0LiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGM7XG59XG5cbmZ1bmN0aW9uIGdldFJvb3RIb3N0Q29udGFpbmVyKCkge1xuICB2YXIgcm9vdEluc3RhbmNlID0gcmVxdWlyZWRDb250ZXh0KHJvb3RJbnN0YW5jZVN0YWNrQ3Vyc29yLmN1cnJlbnQpO1xuICByZXR1cm4gcm9vdEluc3RhbmNlO1xufVxuXG5mdW5jdGlvbiBwdXNoSG9zdENvbnRhaW5lcihmaWJlciwgbmV4dFJvb3RJbnN0YW5jZSkge1xuICAvLyBQdXNoIGN1cnJlbnQgcm9vdCBpbnN0YW5jZSBvbnRvIHRoZSBzdGFjaztcbiAgLy8gVGhpcyBhbGxvd3MgdXMgdG8gcmVzZXQgcm9vdCB3aGVuIHBvcnRhbHMgYXJlIHBvcHBlZC5cbiAgcHVzaChyb290SW5zdGFuY2VTdGFja0N1cnNvciwgbmV4dFJvb3RJbnN0YW5jZSwgZmliZXIpOyAvLyBUcmFjayB0aGUgY29udGV4dCBhbmQgdGhlIEZpYmVyIHRoYXQgcHJvdmlkZWQgaXQuXG4gIC8vIFRoaXMgZW5hYmxlcyB1cyB0byBwb3Agb25seSBGaWJlcnMgdGhhdCBwcm92aWRlIHVuaXF1ZSBjb250ZXh0cy5cblxuICBwdXNoKGNvbnRleHRGaWJlclN0YWNrQ3Vyc29yLCBmaWJlciwgZmliZXIpOyAvLyBGaW5hbGx5LCB3ZSBuZWVkIHRvIHB1c2ggdGhlIGhvc3QgY29udGV4dCB0byB0aGUgc3RhY2suXG4gIC8vIEhvd2V2ZXIsIHdlIGNhbid0IGp1c3QgY2FsbCBnZXRSb290SG9zdENvbnRleHQoKSBhbmQgcHVzaCBpdCBiZWNhdXNlXG4gIC8vIHdlJ2QgaGF2ZSBhIGRpZmZlcmVudCBudW1iZXIgb2YgZW50cmllcyBvbiB0aGUgc3RhY2sgZGVwZW5kaW5nIG9uXG4gIC8vIHdoZXRoZXIgZ2V0Um9vdEhvc3RDb250ZXh0KCkgdGhyb3dzIHNvbWV3aGVyZSBpbiByZW5kZXJlciBjb2RlIG9yIG5vdC5cbiAgLy8gU28gd2UgcHVzaCBhbiBlbXB0eSB2YWx1ZSBmaXJzdC4gVGhpcyBsZXRzIHVzIHNhZmVseSB1bndpbmQgb24gZXJyb3JzLlxuXG4gIHB1c2goY29udGV4dFN0YWNrQ3Vyc29yJDEsIE5PX0NPTlRFWFQsIGZpYmVyKTtcbiAgdmFyIG5leHRSb290Q29udGV4dCA9IGdldFJvb3RIb3N0Q29udGV4dChuZXh0Um9vdEluc3RhbmNlKTsgLy8gTm93IHRoYXQgd2Uga25vdyB0aGlzIGZ1bmN0aW9uIGRvZXNuJ3QgdGhyb3csIHJlcGxhY2UgaXQuXG5cbiAgcG9wKGNvbnRleHRTdGFja0N1cnNvciQxLCBmaWJlcik7XG4gIHB1c2goY29udGV4dFN0YWNrQ3Vyc29yJDEsIG5leHRSb290Q29udGV4dCwgZmliZXIpO1xufVxuXG5mdW5jdGlvbiBwb3BIb3N0Q29udGFpbmVyKGZpYmVyKSB7XG4gIHBvcChjb250ZXh0U3RhY2tDdXJzb3IkMSwgZmliZXIpO1xuICBwb3AoY29udGV4dEZpYmVyU3RhY2tDdXJzb3IsIGZpYmVyKTtcbiAgcG9wKHJvb3RJbnN0YW5jZVN0YWNrQ3Vyc29yLCBmaWJlcik7XG59XG5cbmZ1bmN0aW9uIGdldEhvc3RDb250ZXh0KCkge1xuICB2YXIgY29udGV4dCA9IHJlcXVpcmVkQ29udGV4dChjb250ZXh0U3RhY2tDdXJzb3IkMS5jdXJyZW50KTtcbiAgcmV0dXJuIGNvbnRleHQ7XG59XG5cbmZ1bmN0aW9uIHB1c2hIb3N0Q29udGV4dChmaWJlcikge1xuICB2YXIgcm9vdEluc3RhbmNlID0gcmVxdWlyZWRDb250ZXh0KHJvb3RJbnN0YW5jZVN0YWNrQ3Vyc29yLmN1cnJlbnQpO1xuICB2YXIgY29udGV4dCA9IHJlcXVpcmVkQ29udGV4dChjb250ZXh0U3RhY2tDdXJzb3IkMS5jdXJyZW50KTtcbiAgdmFyIG5leHRDb250ZXh0ID0gZ2V0Q2hpbGRIb3N0Q29udGV4dChjb250ZXh0LCBmaWJlci50eXBlKTsgLy8gRG9uJ3QgcHVzaCB0aGlzIEZpYmVyJ3MgY29udGV4dCB1bmxlc3MgaXQncyB1bmlxdWUuXG5cbiAgaWYgKGNvbnRleHQgPT09IG5leHRDb250ZXh0KSB7XG4gICAgcmV0dXJuO1xuICB9IC8vIFRyYWNrIHRoZSBjb250ZXh0IGFuZCB0aGUgRmliZXIgdGhhdCBwcm92aWRlZCBpdC5cbiAgLy8gVGhpcyBlbmFibGVzIHVzIHRvIHBvcCBvbmx5IEZpYmVycyB0aGF0IHByb3ZpZGUgdW5pcXVlIGNvbnRleHRzLlxuXG5cbiAgcHVzaChjb250ZXh0RmliZXJTdGFja0N1cnNvciwgZmliZXIsIGZpYmVyKTtcbiAgcHVzaChjb250ZXh0U3RhY2tDdXJzb3IkMSwgbmV4dENvbnRleHQsIGZpYmVyKTtcbn1cblxuZnVuY3Rpb24gcG9wSG9zdENvbnRleHQoZmliZXIpIHtcbiAgLy8gRG8gbm90IHBvcCB1bmxlc3MgdGhpcyBGaWJlciBwcm92aWRlZCB0aGUgY3VycmVudCBjb250ZXh0LlxuICAvLyBwdXNoSG9zdENvbnRleHQoKSBvbmx5IHB1c2hlcyBGaWJlcnMgdGhhdCBwcm92aWRlIHVuaXF1ZSBjb250ZXh0cy5cbiAgaWYgKGNvbnRleHRGaWJlclN0YWNrQ3Vyc29yLmN1cnJlbnQgIT09IGZpYmVyKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcG9wKGNvbnRleHRTdGFja0N1cnNvciQxLCBmaWJlcik7XG4gIHBvcChjb250ZXh0RmliZXJTdGFja0N1cnNvciwgZmliZXIpO1xufVxuXG52YXIgRGVmYXVsdFN1c3BlbnNlQ29udGV4dCA9IDA7IC8vIFRoZSBTdXNwZW5zZSBDb250ZXh0IGlzIHNwbGl0IGludG8gdHdvIHBhcnRzLiBUaGUgbG93ZXIgYml0cyBpc1xuLy8gaW5oZXJpdGVkIGRlZXBseSBkb3duIHRoZSBzdWJ0cmVlLiBUaGUgdXBwZXIgYml0cyBvbmx5IGFmZmVjdFxuLy8gdGhpcyBpbW1lZGlhdGUgc3VzcGVuc2UgYm91bmRhcnkgYW5kIGdldHMgcmVzZXQgZWFjaCBuZXdcbi8vIGJvdW5kYXJ5IG9yIHN1c3BlbnNlIGxpc3QuXG5cbnZhciBTdWJ0cmVlU3VzcGVuc2VDb250ZXh0TWFzayA9IDE7IC8vIFN1YnRyZWUgRmxhZ3M6XG4vLyBJbnZpc2libGVQYXJlbnRTdXNwZW5zZUNvbnRleHQgaW5kaWNhdGVzIHRoYXQgb25lIG9mIG91ciBwYXJlbnQgU3VzcGVuc2Vcbi8vIGJvdW5kYXJpZXMgaXMgbm90IGN1cnJlbnRseSBzaG93aW5nIHZpc2libGUgbWFpbiBjb250ZW50LlxuLy8gRWl0aGVyIGJlY2F1c2UgaXQgaXMgYWxyZWFkeSBzaG93aW5nIGEgZmFsbGJhY2sgb3IgaXMgbm90IG1vdW50ZWQgYXQgYWxsLlxuLy8gV2UgY2FuIHVzZSB0aGlzIHRvIGRldGVybWluZSBpZiBpdCBpcyBkZXNpcmFibGUgdG8gdHJpZ2dlciBhIGZhbGxiYWNrIGF0XG4vLyB0aGUgcGFyZW50LiBJZiBub3QsIHRoZW4gd2UgbWlnaHQgbmVlZCB0byB0cmlnZ2VyIHVuZGVzaXJhYmxlIGJvdW5kYXJpZXNcbi8vIGFuZC9vciBzdXNwZW5kIHRoZSBjb21taXQgdG8gYXZvaWQgaGlkaW5nIHRoZSBwYXJlbnQgY29udGVudC5cblxudmFyIEludmlzaWJsZVBhcmVudFN1c3BlbnNlQ29udGV4dCA9IDE7IC8vIFNoYWxsb3cgRmxhZ3M6XG4vLyBGb3JjZVN1c3BlbnNlRmFsbGJhY2sgY2FuIGJlIHVzZWQgYnkgU3VzcGVuc2VMaXN0IHRvIGZvcmNlIG5ld2x5IGFkZGVkXG4vLyBpdGVtcyBpbnRvIHRoZWlyIGZhbGxiYWNrIHN0YXRlIGR1cmluZyBvbmUgb2YgdGhlIHJlbmRlciBwYXNzZXMuXG5cbnZhciBGb3JjZVN1c3BlbnNlRmFsbGJhY2sgPSAyO1xudmFyIHN1c3BlbnNlU3RhY2tDdXJzb3IgPSBjcmVhdGVDdXJzb3IoRGVmYXVsdFN1c3BlbnNlQ29udGV4dCk7XG5mdW5jdGlvbiBoYXNTdXNwZW5zZUNvbnRleHQocGFyZW50Q29udGV4dCwgZmxhZykge1xuICByZXR1cm4gKHBhcmVudENvbnRleHQgJiBmbGFnKSAhPT0gMDtcbn1cbmZ1bmN0aW9uIHNldERlZmF1bHRTaGFsbG93U3VzcGVuc2VDb250ZXh0KHBhcmVudENvbnRleHQpIHtcbiAgcmV0dXJuIHBhcmVudENvbnRleHQgJiBTdWJ0cmVlU3VzcGVuc2VDb250ZXh0TWFzaztcbn1cbmZ1bmN0aW9uIHNldFNoYWxsb3dTdXNwZW5zZUNvbnRleHQocGFyZW50Q29udGV4dCwgc2hhbGxvd0NvbnRleHQpIHtcbiAgcmV0dXJuIHBhcmVudENvbnRleHQgJiBTdWJ0cmVlU3VzcGVuc2VDb250ZXh0TWFzayB8IHNoYWxsb3dDb250ZXh0O1xufVxuZnVuY3Rpb24gYWRkU3VidHJlZVN1c3BlbnNlQ29udGV4dChwYXJlbnRDb250ZXh0LCBzdWJ0cmVlQ29udGV4dCkge1xuICByZXR1cm4gcGFyZW50Q29udGV4dCB8IHN1YnRyZWVDb250ZXh0O1xufVxuZnVuY3Rpb24gcHVzaFN1c3BlbnNlQ29udGV4dChmaWJlciwgbmV3Q29udGV4dCkge1xuICBwdXNoKHN1c3BlbnNlU3RhY2tDdXJzb3IsIG5ld0NvbnRleHQsIGZpYmVyKTtcbn1cbmZ1bmN0aW9uIHBvcFN1c3BlbnNlQ29udGV4dChmaWJlcikge1xuICBwb3Aoc3VzcGVuc2VTdGFja0N1cnNvciwgZmliZXIpO1xufVxuXG5mdW5jdGlvbiBzaG91bGRDYXB0dXJlU3VzcGVuc2Uod29ya0luUHJvZ3Jlc3MsIGhhc0ludmlzaWJsZVBhcmVudCkge1xuICAvLyBJZiBpdCB3YXMgdGhlIHByaW1hcnkgY2hpbGRyZW4gdGhhdCBqdXN0IHN1c3BlbmRlZCwgY2FwdHVyZSBhbmQgcmVuZGVyIHRoZVxuICAvLyBmYWxsYmFjay4gT3RoZXJ3aXNlLCBkb24ndCBjYXB0dXJlIGFuZCBidWJibGUgdG8gdGhlIG5leHQgYm91bmRhcnkuXG4gIHZhciBuZXh0U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuXG4gIGlmIChuZXh0U3RhdGUgIT09IG51bGwpIHtcbiAgICBpZiAobmV4dFN0YXRlLmRlaHlkcmF0ZWQgIT09IG51bGwpIHtcbiAgICAgIC8vIEEgZGVoeWRyYXRlZCBib3VuZGFyeSBhbHdheXMgY2FwdHVyZXMuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgcHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzOyAvLyBJbiBvcmRlciB0byBjYXB0dXJlLCB0aGUgU3VzcGVuc2UgY29tcG9uZW50IG11c3QgaGF2ZSBhIGZhbGxiYWNrIHByb3AuXG5cbiAgaWYgKHByb3BzLmZhbGxiYWNrID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gLy8gUmVndWxhciBib3VuZGFyaWVzIGFsd2F5cyBjYXB0dXJlLlxuXG5cbiAgaWYgKHByb3BzLnVuc3RhYmxlX2F2b2lkVGhpc0ZhbGxiYWNrICE9PSB0cnVlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gLy8gSWYgaXQncyBhIGJvdW5kYXJ5IHdlIHNob3VsZCBhdm9pZCwgdGhlbiB3ZSBwcmVmZXIgdG8gYnViYmxlIHVwIHRvIHRoZVxuICAvLyBwYXJlbnQgYm91bmRhcnkgaWYgaXQgaXMgY3VycmVudGx5IGludmlzaWJsZS5cblxuXG4gIGlmIChoYXNJbnZpc2libGVQYXJlbnQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gLy8gSWYgdGhlIHBhcmVudCBpcyBub3QgYWJsZSB0byBoYW5kbGUgaXQsIHdlIG11c3QgaGFuZGxlIGl0LlxuXG5cbiAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiBmaW5kRmlyc3RTdXNwZW5kZWQocm93KSB7XG4gIHZhciBub2RlID0gcm93O1xuXG4gIHdoaWxlIChub2RlICE9PSBudWxsKSB7XG4gICAgaWYgKG5vZGUudGFnID09PSBTdXNwZW5zZUNvbXBvbmVudCkge1xuICAgICAgdmFyIHN0YXRlID0gbm9kZS5tZW1vaXplZFN0YXRlO1xuXG4gICAgICBpZiAoc3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIGRlaHlkcmF0ZWQgPSBzdGF0ZS5kZWh5ZHJhdGVkO1xuXG4gICAgICAgIGlmIChkZWh5ZHJhdGVkID09PSBudWxsIHx8IGlzU3VzcGVuc2VJbnN0YW5jZVBlbmRpbmcoZGVoeWRyYXRlZCkgfHwgaXNTdXNwZW5zZUluc3RhbmNlRmFsbGJhY2soZGVoeWRyYXRlZCkpIHtcbiAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobm9kZS50YWcgPT09IFN1c3BlbnNlTGlzdENvbXBvbmVudCAmJiAvLyByZXZlYWxPcmRlciB1bmRlZmluZWQgY2FuJ3QgYmUgdHJ1c3RlZCBiZWNhdXNlIGl0IGRvbid0XG4gICAgLy8ga2VlcCB0cmFjayBvZiB3aGV0aGVyIGl0IHN1c3BlbmRlZCBvciBub3QuXG4gICAgbm9kZS5tZW1vaXplZFByb3BzLnJldmVhbE9yZGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhciBkaWRTdXNwZW5kID0gKG5vZGUuZmxhZ3MgJiBEaWRDYXB0dXJlKSAhPT0gTm9GbGFncztcblxuICAgICAgaWYgKGRpZFN1c3BlbmQpIHtcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChub2RlLmNoaWxkICE9PSBudWxsKSB7XG4gICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICBub2RlID0gbm9kZS5jaGlsZDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChub2RlID09PSByb3cpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHdoaWxlIChub2RlLnNpYmxpbmcgPT09IG51bGwpIHtcbiAgICAgIGlmIChub2RlLnJldHVybiA9PT0gbnVsbCB8fCBub2RlLnJldHVybiA9PT0gcm93KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfVxuXG4gICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxudmFyIE5vRmxhZ3MkMSA9XG4vKiAgKi9cbjA7IC8vIFJlcHJlc2VudHMgd2hldGhlciBlZmZlY3Qgc2hvdWxkIGZpcmUuXG5cbnZhciBIYXNFZmZlY3QgPVxuLyogKi9cbjE7IC8vIFJlcHJlc2VudHMgdGhlIHBoYXNlIGluIHdoaWNoIHRoZSBlZmZlY3QgKG5vdCB0aGUgY2xlYW4tdXApIGZpcmVzLlxuXG52YXIgTGF5b3V0ID1cbi8qICAgICovXG4yO1xudmFyIFBhc3NpdmUkMSA9XG4vKiAgICovXG40O1xuXG4vLyBUaGlzIG1heSBoYXZlIGJlZW4gYW4gaW5zZXJ0aW9uIG9yIGEgaHlkcmF0aW9uLlxuXG52YXIgaHlkcmF0aW9uUGFyZW50RmliZXIgPSBudWxsO1xudmFyIG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPSBudWxsO1xudmFyIGlzSHlkcmF0aW5nID0gZmFsc2U7XG5cbmZ1bmN0aW9uIGVudGVySHlkcmF0aW9uU3RhdGUoZmliZXIpIHtcblxuICB2YXIgcGFyZW50SW5zdGFuY2UgPSBmaWJlci5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztcbiAgbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSA9IGdldEZpcnN0SHlkcmF0YWJsZUNoaWxkKHBhcmVudEluc3RhbmNlKTtcbiAgaHlkcmF0aW9uUGFyZW50RmliZXIgPSBmaWJlcjtcbiAgaXNIeWRyYXRpbmcgPSB0cnVlO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gZGVsZXRlSHlkcmF0YWJsZUluc3RhbmNlKHJldHVybkZpYmVyLCBpbnN0YW5jZSkge1xuICB7XG4gICAgc3dpdGNoIChyZXR1cm5GaWJlci50YWcpIHtcbiAgICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICAgIGRpZE5vdEh5ZHJhdGVDb250YWluZXJJbnN0YW5jZShyZXR1cm5GaWJlci5zdGF0ZU5vZGUuY29udGFpbmVySW5mbywgaW5zdGFuY2UpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICBkaWROb3RIeWRyYXRlSW5zdGFuY2UocmV0dXJuRmliZXIudHlwZSwgcmV0dXJuRmliZXIubWVtb2l6ZWRQcm9wcywgcmV0dXJuRmliZXIuc3RhdGVOb2RlLCBpbnN0YW5jZSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHZhciBjaGlsZFRvRGVsZXRlID0gY3JlYXRlRmliZXJGcm9tSG9zdEluc3RhbmNlRm9yRGVsZXRpb24oKTtcbiAgY2hpbGRUb0RlbGV0ZS5zdGF0ZU5vZGUgPSBpbnN0YW5jZTtcbiAgY2hpbGRUb0RlbGV0ZS5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgY2hpbGRUb0RlbGV0ZS5mbGFncyA9IERlbGV0aW9uOyAvLyBUaGlzIG1pZ2h0IHNlZW0gbGlrZSBpdCBiZWxvbmdzIG9uIHByb2dyZXNzZWRGaXJzdERlbGV0aW9uLiBIb3dldmVyLFxuICAvLyB0aGVzZSBjaGlsZHJlbiBhcmUgbm90IHBhcnQgb2YgdGhlIHJlY29uY2lsaWF0aW9uIGxpc3Qgb2YgY2hpbGRyZW4uXG4gIC8vIEV2ZW4gaWYgd2UgYWJvcnQgYW5kIHJlcmVjb25jaWxlIHRoZSBjaGlsZHJlbiwgdGhhdCB3aWxsIHRyeSB0byBoeWRyYXRlXG4gIC8vIGFnYWluIGFuZCB0aGUgbm9kZXMgYXJlIHN0aWxsIGluIHRoZSBob3N0IHRyZWUgc28gdGhlc2Ugd2lsbCBiZVxuICAvLyByZWNyZWF0ZWQuXG5cbiAgaWYgKHJldHVybkZpYmVyLmxhc3RFZmZlY3QgIT09IG51bGwpIHtcbiAgICByZXR1cm5GaWJlci5sYXN0RWZmZWN0Lm5leHRFZmZlY3QgPSBjaGlsZFRvRGVsZXRlO1xuICAgIHJldHVybkZpYmVyLmxhc3RFZmZlY3QgPSBjaGlsZFRvRGVsZXRlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybkZpYmVyLmZpcnN0RWZmZWN0ID0gcmV0dXJuRmliZXIubGFzdEVmZmVjdCA9IGNoaWxkVG9EZWxldGU7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5zZXJ0Tm9uSHlkcmF0ZWRJbnN0YW5jZShyZXR1cm5GaWJlciwgZmliZXIpIHtcbiAgZmliZXIuZmxhZ3MgPSBmaWJlci5mbGFncyAmIH5IeWRyYXRpbmcgfCBQbGFjZW1lbnQ7XG5cbiAge1xuICAgIHN3aXRjaCAocmV0dXJuRmliZXIudGFnKSB7XG4gICAgICBjYXNlIEhvc3RSb290OlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIHBhcmVudENvbnRhaW5lciA9IHJldHVybkZpYmVyLnN0YXRlTm9kZS5jb250YWluZXJJbmZvO1xuXG4gICAgICAgICAgc3dpdGNoIChmaWJlci50YWcpIHtcbiAgICAgICAgICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgICAgICAgICAgdmFyIHR5cGUgPSBmaWJlci50eXBlO1xuICAgICAgICAgICAgICB2YXIgcHJvcHMgPSBmaWJlci5wZW5kaW5nUHJvcHM7XG4gICAgICAgICAgICAgIGRpZE5vdEZpbmRIeWRyYXRhYmxlQ29udGFpbmVySW5zdGFuY2UocGFyZW50Q29udGFpbmVyLCB0eXBlKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgSG9zdFRleHQ6XG4gICAgICAgICAgICAgIHZhciB0ZXh0ID0gZmliZXIucGVuZGluZ1Byb3BzO1xuICAgICAgICAgICAgICBkaWROb3RGaW5kSHlkcmF0YWJsZUNvbnRhaW5lclRleHRJbnN0YW5jZShwYXJlbnRDb250YWluZXIsIHRleHQpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgcGFyZW50VHlwZSA9IHJldHVybkZpYmVyLnR5cGU7XG4gICAgICAgICAgdmFyIHBhcmVudFByb3BzID0gcmV0dXJuRmliZXIubWVtb2l6ZWRQcm9wcztcbiAgICAgICAgICB2YXIgcGFyZW50SW5zdGFuY2UgPSByZXR1cm5GaWJlci5zdGF0ZU5vZGU7XG5cbiAgICAgICAgICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgICAgICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICAgICAgICB2YXIgX3R5cGUgPSBmaWJlci50eXBlO1xuICAgICAgICAgICAgICB2YXIgX3Byb3BzID0gZmliZXIucGVuZGluZ1Byb3BzO1xuICAgICAgICAgICAgICBkaWROb3RGaW5kSHlkcmF0YWJsZUluc3RhbmNlKHBhcmVudFR5cGUsIHBhcmVudFByb3BzLCBwYXJlbnRJbnN0YW5jZSwgX3R5cGUpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBIb3N0VGV4dDpcbiAgICAgICAgICAgICAgdmFyIF90ZXh0ID0gZmliZXIucGVuZGluZ1Byb3BzO1xuICAgICAgICAgICAgICBkaWROb3RGaW5kSHlkcmF0YWJsZVRleHRJbnN0YW5jZShwYXJlbnRUeXBlLCBwYXJlbnRQcm9wcywgcGFyZW50SW5zdGFuY2UsIF90ZXh0KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICAgICAgICAgIGRpZE5vdEZpbmRIeWRyYXRhYmxlU3VzcGVuc2VJbnN0YW5jZShwYXJlbnRUeXBlLCBwYXJlbnRQcm9wcyk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdHJ5SHlkcmF0ZShmaWJlciwgbmV4dEluc3RhbmNlKSB7XG4gIHN3aXRjaCAoZmliZXIudGFnKSB7XG4gICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgdHlwZSA9IGZpYmVyLnR5cGU7XG4gICAgICAgIHZhciBwcm9wcyA9IGZpYmVyLnBlbmRpbmdQcm9wcztcbiAgICAgICAgdmFyIGluc3RhbmNlID0gY2FuSHlkcmF0ZUluc3RhbmNlKG5leHRJbnN0YW5jZSwgdHlwZSk7XG5cbiAgICAgICAgaWYgKGluc3RhbmNlICE9PSBudWxsKSB7XG4gICAgICAgICAgZmliZXIuc3RhdGVOb2RlID0gaW5zdGFuY2U7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RUZXh0OlxuICAgICAge1xuICAgICAgICB2YXIgdGV4dCA9IGZpYmVyLnBlbmRpbmdQcm9wcztcbiAgICAgICAgdmFyIHRleHRJbnN0YW5jZSA9IGNhbkh5ZHJhdGVUZXh0SW5zdGFuY2UobmV4dEluc3RhbmNlLCB0ZXh0KTtcblxuICAgICAgICBpZiAodGV4dEluc3RhbmNlICE9PSBudWxsKSB7XG4gICAgICAgICAgZmliZXIuc3RhdGVOb2RlID0gdGV4dEluc3RhbmNlO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgIHtcblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRyeVRvQ2xhaW1OZXh0SHlkcmF0YWJsZUluc3RhbmNlKGZpYmVyKSB7XG4gIGlmICghaXNIeWRyYXRpbmcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgbmV4dEluc3RhbmNlID0gbmV4dEh5ZHJhdGFibGVJbnN0YW5jZTtcblxuICBpZiAoIW5leHRJbnN0YW5jZSkge1xuICAgIC8vIE5vdGhpbmcgdG8gaHlkcmF0ZS4gTWFrZSBpdCBhbiBpbnNlcnRpb24uXG4gICAgaW5zZXJ0Tm9uSHlkcmF0ZWRJbnN0YW5jZShoeWRyYXRpb25QYXJlbnRGaWJlciwgZmliZXIpO1xuICAgIGlzSHlkcmF0aW5nID0gZmFsc2U7XG4gICAgaHlkcmF0aW9uUGFyZW50RmliZXIgPSBmaWJlcjtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgZmlyc3RBdHRlbXB0ZWRJbnN0YW5jZSA9IG5leHRJbnN0YW5jZTtcblxuICBpZiAoIXRyeUh5ZHJhdGUoZmliZXIsIG5leHRJbnN0YW5jZSkpIHtcbiAgICAvLyBJZiB3ZSBjYW4ndCBoeWRyYXRlIHRoaXMgaW5zdGFuY2UgbGV0J3MgdHJ5IHRoZSBuZXh0IG9uZS5cbiAgICAvLyBXZSB1c2UgdGhpcyBhcyBhIGhldXJpc3RpYy4gSXQncyBiYXNlZCBvbiBpbnR1aXRpb24gYW5kIG5vdCBkYXRhIHNvIGl0XG4gICAgLy8gbWlnaHQgYmUgZmxhd2VkIG9yIHVubmVjZXNzYXJ5LlxuICAgIG5leHRJbnN0YW5jZSA9IGdldE5leHRIeWRyYXRhYmxlU2libGluZyhmaXJzdEF0dGVtcHRlZEluc3RhbmNlKTtcblxuICAgIGlmICghbmV4dEluc3RhbmNlIHx8ICF0cnlIeWRyYXRlKGZpYmVyLCBuZXh0SW5zdGFuY2UpKSB7XG4gICAgICAvLyBOb3RoaW5nIHRvIGh5ZHJhdGUuIE1ha2UgaXQgYW4gaW5zZXJ0aW9uLlxuICAgICAgaW5zZXJ0Tm9uSHlkcmF0ZWRJbnN0YW5jZShoeWRyYXRpb25QYXJlbnRGaWJlciwgZmliZXIpO1xuICAgICAgaXNIeWRyYXRpbmcgPSBmYWxzZTtcbiAgICAgIGh5ZHJhdGlvblBhcmVudEZpYmVyID0gZmliZXI7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBXZSBtYXRjaGVkIHRoZSBuZXh0IG9uZSwgd2UnbGwgbm93IGFzc3VtZSB0aGF0IHRoZSBmaXJzdCBvbmUgd2FzXG4gICAgLy8gc3VwZXJmbHVvdXMgYW5kIHdlJ2xsIGRlbGV0ZSBpdC4gU2luY2Ugd2UgY2FuJ3QgZWFnZXJseSBkZWxldGUgaXRcbiAgICAvLyB3ZSdsbCBoYXZlIHRvIHNjaGVkdWxlIGEgZGVsZXRpb24uIFRvIGRvIHRoYXQsIHRoaXMgbm9kZSBuZWVkcyBhIGR1bW15XG4gICAgLy8gZmliZXIgYXNzb2NpYXRlZCB3aXRoIGl0LlxuXG5cbiAgICBkZWxldGVIeWRyYXRhYmxlSW5zdGFuY2UoaHlkcmF0aW9uUGFyZW50RmliZXIsIGZpcnN0QXR0ZW1wdGVkSW5zdGFuY2UpO1xuICB9XG5cbiAgaHlkcmF0aW9uUGFyZW50RmliZXIgPSBmaWJlcjtcbiAgbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSA9IGdldEZpcnN0SHlkcmF0YWJsZUNoaWxkKG5leHRJbnN0YW5jZSk7XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVUb0h5ZHJhdGVIb3N0SW5zdGFuY2UoZmliZXIsIHJvb3RDb250YWluZXJJbnN0YW5jZSwgaG9zdENvbnRleHQpIHtcblxuICB2YXIgaW5zdGFuY2UgPSBmaWJlci5zdGF0ZU5vZGU7XG4gIHZhciB1cGRhdGVQYXlsb2FkID0gaHlkcmF0ZUluc3RhbmNlKGluc3RhbmNlLCBmaWJlci50eXBlLCBmaWJlci5tZW1vaXplZFByb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UsIGhvc3RDb250ZXh0LCBmaWJlcik7IC8vIFRPRE86IFR5cGUgdGhpcyBzcGVjaWZpYyB0byB0aGlzIHR5cGUgb2YgY29tcG9uZW50LlxuXG4gIGZpYmVyLnVwZGF0ZVF1ZXVlID0gdXBkYXRlUGF5bG9hZDsgLy8gSWYgdGhlIHVwZGF0ZSBwYXlsb2FkIGluZGljYXRlcyB0aGF0IHRoZXJlIGlzIGEgY2hhbmdlIG9yIGlmIHRoZXJlXG4gIC8vIGlzIGEgbmV3IHJlZiB3ZSBtYXJrIHRoaXMgYXMgYW4gdXBkYXRlLlxuXG4gIGlmICh1cGRhdGVQYXlsb2FkICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVUb0h5ZHJhdGVIb3N0VGV4dEluc3RhbmNlKGZpYmVyKSB7XG5cbiAgdmFyIHRleHRJbnN0YW5jZSA9IGZpYmVyLnN0YXRlTm9kZTtcbiAgdmFyIHRleHRDb250ZW50ID0gZmliZXIubWVtb2l6ZWRQcm9wcztcbiAgdmFyIHNob3VsZFVwZGF0ZSA9IGh5ZHJhdGVUZXh0SW5zdGFuY2UodGV4dEluc3RhbmNlLCB0ZXh0Q29udGVudCwgZmliZXIpO1xuXG4gIHtcbiAgICBpZiAoc2hvdWxkVXBkYXRlKSB7XG4gICAgICAvLyBXZSBhc3N1bWUgdGhhdCBwcmVwYXJlVG9IeWRyYXRlSG9zdFRleHRJbnN0YW5jZSBpcyBjYWxsZWQgaW4gYSBjb250ZXh0IHdoZXJlIHRoZVxuICAgICAgLy8gaHlkcmF0aW9uIHBhcmVudCBpcyB0aGUgcGFyZW50IGhvc3QgY29tcG9uZW50IG9mIHRoaXMgaG9zdCB0ZXh0LlxuICAgICAgdmFyIHJldHVybkZpYmVyID0gaHlkcmF0aW9uUGFyZW50RmliZXI7XG5cbiAgICAgIGlmIChyZXR1cm5GaWJlciAhPT0gbnVsbCkge1xuICAgICAgICBzd2l0Y2ggKHJldHVybkZpYmVyLnRhZykge1xuICAgICAgICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHZhciBwYXJlbnRDb250YWluZXIgPSByZXR1cm5GaWJlci5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztcbiAgICAgICAgICAgICAgZGlkTm90TWF0Y2hIeWRyYXRlZENvbnRhaW5lclRleHRJbnN0YW5jZShwYXJlbnRDb250YWluZXIsIHRleHRJbnN0YW5jZSwgdGV4dENvbnRlbnQpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdmFyIHBhcmVudFR5cGUgPSByZXR1cm5GaWJlci50eXBlO1xuICAgICAgICAgICAgICB2YXIgcGFyZW50UHJvcHMgPSByZXR1cm5GaWJlci5tZW1vaXplZFByb3BzO1xuICAgICAgICAgICAgICB2YXIgcGFyZW50SW5zdGFuY2UgPSByZXR1cm5GaWJlci5zdGF0ZU5vZGU7XG4gICAgICAgICAgICAgIGRpZE5vdE1hdGNoSHlkcmF0ZWRUZXh0SW5zdGFuY2UocGFyZW50VHlwZSwgcGFyZW50UHJvcHMsIHBhcmVudEluc3RhbmNlLCB0ZXh0SW5zdGFuY2UsIHRleHRDb250ZW50KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gc2hvdWxkVXBkYXRlO1xufVxuXG5mdW5jdGlvbiBza2lwUGFzdERlaHlkcmF0ZWRTdXNwZW5zZUluc3RhbmNlKGZpYmVyKSB7XG5cbiAgdmFyIHN1c3BlbnNlU3RhdGUgPSBmaWJlci5tZW1vaXplZFN0YXRlO1xuICB2YXIgc3VzcGVuc2VJbnN0YW5jZSA9IHN1c3BlbnNlU3RhdGUgIT09IG51bGwgPyBzdXNwZW5zZVN0YXRlLmRlaHlkcmF0ZWQgOiBudWxsO1xuXG4gIGlmICghc3VzcGVuc2VJbnN0YW5jZSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIkV4cGVjdGVkIHRvIGhhdmUgYSBoeWRyYXRlZCBzdXNwZW5zZSBpbnN0YW5jZS4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBnZXROZXh0SHlkcmF0YWJsZUluc3RhbmNlQWZ0ZXJTdXNwZW5zZUluc3RhbmNlKHN1c3BlbnNlSW5zdGFuY2UpO1xufVxuXG5mdW5jdGlvbiBwb3BUb05leHRIb3N0UGFyZW50KGZpYmVyKSB7XG4gIHZhciBwYXJlbnQgPSBmaWJlci5yZXR1cm47XG5cbiAgd2hpbGUgKHBhcmVudCAhPT0gbnVsbCAmJiBwYXJlbnQudGFnICE9PSBIb3N0Q29tcG9uZW50ICYmIHBhcmVudC50YWcgIT09IEhvc3RSb290ICYmIHBhcmVudC50YWcgIT09IFN1c3BlbnNlQ29tcG9uZW50KSB7XG4gICAgcGFyZW50ID0gcGFyZW50LnJldHVybjtcbiAgfVxuXG4gIGh5ZHJhdGlvblBhcmVudEZpYmVyID0gcGFyZW50O1xufVxuXG5mdW5jdGlvbiBwb3BIeWRyYXRpb25TdGF0ZShmaWJlcikge1xuXG4gIGlmIChmaWJlciAhPT0gaHlkcmF0aW9uUGFyZW50RmliZXIpIHtcbiAgICAvLyBXZSdyZSBkZWVwZXIgdGhhbiB0aGUgY3VycmVudCBoeWRyYXRpb24gY29udGV4dCwgaW5zaWRlIGFuIGluc2VydGVkXG4gICAgLy8gdHJlZS5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIWlzSHlkcmF0aW5nKSB7XG4gICAgLy8gSWYgd2UncmUgbm90IGN1cnJlbnRseSBoeWRyYXRpbmcgYnV0IHdlJ3JlIGluIGEgaHlkcmF0aW9uIGNvbnRleHQsIHRoZW5cbiAgICAvLyB3ZSB3ZXJlIGFuIGluc2VydGlvbiBhbmQgbm93IG5lZWQgdG8gcG9wIHVwIHJlZW50ZXIgaHlkcmF0aW9uIG9mIG91clxuICAgIC8vIHNpYmxpbmdzLlxuICAgIHBvcFRvTmV4dEhvc3RQYXJlbnQoZmliZXIpO1xuICAgIGlzSHlkcmF0aW5nID0gdHJ1ZTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgdHlwZSA9IGZpYmVyLnR5cGU7IC8vIElmIHdlIGhhdmUgYW55IHJlbWFpbmluZyBoeWRyYXRhYmxlIG5vZGVzLCB3ZSBuZWVkIHRvIGRlbGV0ZSB0aGVtIG5vdy5cbiAgLy8gV2Ugb25seSBkbyB0aGlzIGRlZXBlciB0aGFuIGhlYWQgYW5kIGJvZHkgc2luY2UgdGhleSB0ZW5kIHRvIGhhdmUgcmFuZG9tXG4gIC8vIG90aGVyIG5vZGVzIGluIHRoZW0uIFdlIGFsc28gaWdub3JlIGNvbXBvbmVudHMgd2l0aCBwdXJlIHRleHQgY29udGVudCBpblxuICAvLyBzaWRlIG9mIHRoZW0uXG4gIC8vIFRPRE86IEJldHRlciBoZXVyaXN0aWMuXG5cbiAgaWYgKGZpYmVyLnRhZyAhPT0gSG9zdENvbXBvbmVudCB8fCB0eXBlICE9PSAnaGVhZCcgJiYgdHlwZSAhPT0gJ2JvZHknICYmICFzaG91bGRTZXRUZXh0Q29udGVudCh0eXBlLCBmaWJlci5tZW1vaXplZFByb3BzKSkge1xuICAgIHZhciBuZXh0SW5zdGFuY2UgPSBuZXh0SHlkcmF0YWJsZUluc3RhbmNlO1xuXG4gICAgd2hpbGUgKG5leHRJbnN0YW5jZSkge1xuICAgICAgZGVsZXRlSHlkcmF0YWJsZUluc3RhbmNlKGZpYmVyLCBuZXh0SW5zdGFuY2UpO1xuICAgICAgbmV4dEluc3RhbmNlID0gZ2V0TmV4dEh5ZHJhdGFibGVTaWJsaW5nKG5leHRJbnN0YW5jZSk7XG4gICAgfVxuICB9XG5cbiAgcG9wVG9OZXh0SG9zdFBhcmVudChmaWJlcik7XG5cbiAgaWYgKGZpYmVyLnRhZyA9PT0gU3VzcGVuc2VDb21wb25lbnQpIHtcbiAgICBuZXh0SHlkcmF0YWJsZUluc3RhbmNlID0gc2tpcFBhc3REZWh5ZHJhdGVkU3VzcGVuc2VJbnN0YW5jZShmaWJlcik7XG4gIH0gZWxzZSB7XG4gICAgbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSA9IGh5ZHJhdGlvblBhcmVudEZpYmVyID8gZ2V0TmV4dEh5ZHJhdGFibGVTaWJsaW5nKGZpYmVyLnN0YXRlTm9kZSkgOiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHJlc2V0SHlkcmF0aW9uU3RhdGUoKSB7XG5cbiAgaHlkcmF0aW9uUGFyZW50RmliZXIgPSBudWxsO1xuICBuZXh0SHlkcmF0YWJsZUluc3RhbmNlID0gbnVsbDtcbiAgaXNIeWRyYXRpbmcgPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZ2V0SXNIeWRyYXRpbmcoKSB7XG4gIHJldHVybiBpc0h5ZHJhdGluZztcbn1cblxuLy8gYW5kIHNob3VsZCBiZSByZXNldCBiZWZvcmUgc3RhcnRpbmcgYSBuZXcgcmVuZGVyLlxuLy8gVGhpcyB0cmFja3Mgd2hpY2ggbXV0YWJsZSBzb3VyY2VzIG5lZWQgdG8gYmUgcmVzZXQgYWZ0ZXIgYSByZW5kZXIuXG5cbnZhciB3b3JrSW5Qcm9ncmVzc1NvdXJjZXMgPSBbXTtcbnZhciByZW5kZXJlclNpZ2lsJDE7XG5cbntcbiAgLy8gVXNlZCB0byBkZXRlY3QgbXVsdGlwbGUgcmVuZGVyZXJzIHVzaW5nIHRoZSBzYW1lIG11dGFibGUgc291cmNlLlxuICByZW5kZXJlclNpZ2lsJDEgPSB7fTtcbn1cblxuZnVuY3Rpb24gbWFya1NvdXJjZUFzRGlydHkobXV0YWJsZVNvdXJjZSkge1xuICB3b3JrSW5Qcm9ncmVzc1NvdXJjZXMucHVzaChtdXRhYmxlU291cmNlKTtcbn1cbmZ1bmN0aW9uIHJlc2V0V29ya0luUHJvZ3Jlc3NWZXJzaW9ucygpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB3b3JrSW5Qcm9ncmVzc1NvdXJjZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbXV0YWJsZVNvdXJjZSA9IHdvcmtJblByb2dyZXNzU291cmNlc1tpXTtcblxuICAgIHtcbiAgICAgIG11dGFibGVTb3VyY2UuX3dvcmtJblByb2dyZXNzVmVyc2lvblByaW1hcnkgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHdvcmtJblByb2dyZXNzU291cmNlcy5sZW5ndGggPSAwO1xufVxuZnVuY3Rpb24gZ2V0V29ya0luUHJvZ3Jlc3NWZXJzaW9uKG11dGFibGVTb3VyY2UpIHtcbiAge1xuICAgIHJldHVybiBtdXRhYmxlU291cmNlLl93b3JrSW5Qcm9ncmVzc1ZlcnNpb25QcmltYXJ5O1xuICB9XG59XG5mdW5jdGlvbiBzZXRXb3JrSW5Qcm9ncmVzc1ZlcnNpb24obXV0YWJsZVNvdXJjZSwgdmVyc2lvbikge1xuICB7XG4gICAgbXV0YWJsZVNvdXJjZS5fd29ya0luUHJvZ3Jlc3NWZXJzaW9uUHJpbWFyeSA9IHZlcnNpb247XG4gIH1cblxuICB3b3JrSW5Qcm9ncmVzc1NvdXJjZXMucHVzaChtdXRhYmxlU291cmNlKTtcbn1cbmZ1bmN0aW9uIHdhcm5BYm91dE11bHRpcGxlUmVuZGVyZXJzREVWKG11dGFibGVTb3VyY2UpIHtcbiAge1xuICAgIHtcbiAgICAgIGlmIChtdXRhYmxlU291cmNlLl9jdXJyZW50UHJpbWFyeVJlbmRlcmVyID09IG51bGwpIHtcbiAgICAgICAgbXV0YWJsZVNvdXJjZS5fY3VycmVudFByaW1hcnlSZW5kZXJlciA9IHJlbmRlcmVyU2lnaWwkMTtcbiAgICAgIH0gZWxzZSBpZiAobXV0YWJsZVNvdXJjZS5fY3VycmVudFByaW1hcnlSZW5kZXJlciAhPT0gcmVuZGVyZXJTaWdpbCQxKSB7XG4gICAgICAgIGVycm9yKCdEZXRlY3RlZCBtdWx0aXBsZSByZW5kZXJlcnMgY29uY3VycmVudGx5IHJlbmRlcmluZyB0aGUgJyArICdzYW1lIG11dGFibGUgc291cmNlLiBUaGlzIGlzIGN1cnJlbnRseSB1bnN1cHBvcnRlZC4nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0gLy8gRWFnZXIgcmVhZHMgdGhlIHZlcnNpb24gb2YgYSBtdXRhYmxlIHNvdXJjZSBhbmQgc3RvcmVzIGl0IG9uIHRoZSByb290LlxuXG52YXIgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50RGlzcGF0Y2hlcixcbiAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50QmF0Y2hDb25maWc7XG52YXIgZGlkV2FybkFib3V0TWlzbWF0Y2hlZEhvb2tzRm9yQ29tcG9uZW50O1xudmFyIGRpZFdhcm5BYm91dFVzZU9wYXF1ZUlkZW50aWZpZXI7XG5cbntcbiAgZGlkV2FybkFib3V0VXNlT3BhcXVlSWRlbnRpZmllciA9IHt9O1xuICBkaWRXYXJuQWJvdXRNaXNtYXRjaGVkSG9va3NGb3JDb21wb25lbnQgPSBuZXcgU2V0KCk7XG59XG5cbi8vIFRoZXNlIGFyZSBzZXQgcmlnaHQgYmVmb3JlIGNhbGxpbmcgdGhlIGNvbXBvbmVudC5cbnZhciByZW5kZXJMYW5lcyA9IE5vTGFuZXM7IC8vIFRoZSB3b3JrLWluLXByb2dyZXNzIGZpYmVyLiBJJ3ZlIG5hbWVkIGl0IGRpZmZlcmVudGx5IHRvIGRpc3Rpbmd1aXNoIGl0IGZyb21cbi8vIHRoZSB3b3JrLWluLXByb2dyZXNzIGhvb2suXG5cbnZhciBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxID0gbnVsbDsgLy8gSG9va3MgYXJlIHN0b3JlZCBhcyBhIGxpbmtlZCBsaXN0IG9uIHRoZSBmaWJlcidzIG1lbW9pemVkU3RhdGUgZmllbGQuIFRoZVxuLy8gY3VycmVudCBob29rIGxpc3QgaXMgdGhlIGxpc3QgdGhhdCBiZWxvbmdzIHRvIHRoZSBjdXJyZW50IGZpYmVyLiBUaGVcbi8vIHdvcmstaW4tcHJvZ3Jlc3MgaG9vayBsaXN0IGlzIGEgbmV3IGxpc3QgdGhhdCB3aWxsIGJlIGFkZGVkIHRvIHRoZVxuLy8gd29yay1pbi1wcm9ncmVzcyBmaWJlci5cblxudmFyIGN1cnJlbnRIb29rID0gbnVsbDtcbnZhciB3b3JrSW5Qcm9ncmVzc0hvb2sgPSBudWxsOyAvLyBXaGV0aGVyIGFuIHVwZGF0ZSB3YXMgc2NoZWR1bGVkIGF0IGFueSBwb2ludCBkdXJpbmcgdGhlIHJlbmRlciBwaGFzZS4gVGhpc1xuLy8gZG9lcyBub3QgZ2V0IHJlc2V0IGlmIHdlIGRvIGFub3RoZXIgcmVuZGVyIHBhc3M7IG9ubHkgd2hlbiB3ZSdyZSBjb21wbGV0ZWx5XG4vLyBmaW5pc2hlZCBldmFsdWF0aW5nIHRoaXMgY29tcG9uZW50LiBUaGlzIGlzIGFuIG9wdGltaXphdGlvbiBzbyB3ZSBrbm93XG4vLyB3aGV0aGVyIHdlIG5lZWQgdG8gY2xlYXIgcmVuZGVyIHBoYXNlIHVwZGF0ZXMgYWZ0ZXIgYSB0aHJvdy5cblxudmFyIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGUgPSBmYWxzZTsgLy8gV2hlcmUgYW4gdXBkYXRlIHdhcyBzY2hlZHVsZWQgb25seSBkdXJpbmcgdGhlIGN1cnJlbnQgcmVuZGVyIHBhc3MuIFRoaXNcbi8vIGdldHMgcmVzZXQgYWZ0ZXIgZWFjaCBhdHRlbXB0LlxuLy8gVE9ETzogTWF5YmUgdGhlcmUncyBzb21lIHdheSB0byBjb25zb2xpZGF0ZSB0aGlzIHdpdGhcbi8vIGBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlYC4gT3Igd2l0aCBgbnVtYmVyT2ZSZVJlbmRlcnNgLlxuXG52YXIgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZUR1cmluZ1RoaXNQYXNzID0gZmFsc2U7XG52YXIgUkVfUkVOREVSX0xJTUlUID0gMjU7IC8vIEluIERFViwgdGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgY3VycmVudGx5IGV4ZWN1dGluZyBwcmltaXRpdmUgaG9va1xuXG52YXIgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBudWxsOyAvLyBJbiBERVYsIHRoaXMgbGlzdCBlbnN1cmVzIHRoYXQgaG9va3MgYXJlIGNhbGxlZCBpbiB0aGUgc2FtZSBvcmRlciBiZXR3ZWVuIHJlbmRlcnMuXG4vLyBUaGUgbGlzdCBzdG9yZXMgdGhlIG9yZGVyIG9mIGhvb2tzIHVzZWQgZHVyaW5nIHRoZSBpbml0aWFsIHJlbmRlciAobW91bnQpLlxuLy8gU3Vic2VxdWVudCByZW5kZXJzICh1cGRhdGVzKSByZWZlcmVuY2UgdGhpcyBsaXN0LlxuXG52YXIgaG9va1R5cGVzRGV2ID0gbnVsbDtcbnZhciBob29rVHlwZXNVcGRhdGVJbmRleERldiA9IC0xOyAvLyBJbiBERVYsIHRoaXMgdHJhY2tzIHdoZXRoZXIgY3VycmVudGx5IHJlbmRlcmluZyBjb21wb25lbnQgbmVlZHMgdG8gaWdub3JlXG4vLyB0aGUgZGVwZW5kZW5jaWVzIGZvciBIb29rcyB0aGF0IG5lZWQgdGhlbSAoZS5nLiB1c2VFZmZlY3Qgb3IgdXNlTWVtbykuXG4vLyBXaGVuIHRydWUsIHN1Y2ggSG9va3Mgd2lsbCBhbHdheXMgYmUgXCJyZW1vdW50ZWRcIi4gT25seSB1c2VkIGR1cmluZyBob3QgcmVsb2FkLlxuXG52YXIgaWdub3JlUHJldmlvdXNEZXBlbmRlbmNpZXMgPSBmYWxzZTtcblxuZnVuY3Rpb24gbW91bnRIb29rVHlwZXNEZXYoKSB7XG4gIHtcbiAgICB2YXIgaG9va05hbWUgPSBjdXJyZW50SG9va05hbWVJbkRldjtcblxuICAgIGlmIChob29rVHlwZXNEZXYgPT09IG51bGwpIHtcbiAgICAgIGhvb2tUeXBlc0RldiA9IFtob29rTmFtZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGhvb2tUeXBlc0Rldi5wdXNoKGhvb2tOYW1lKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlSG9va1R5cGVzRGV2KCkge1xuICB7XG4gICAgdmFyIGhvb2tOYW1lID0gY3VycmVudEhvb2tOYW1lSW5EZXY7XG5cbiAgICBpZiAoaG9va1R5cGVzRGV2ICE9PSBudWxsKSB7XG4gICAgICBob29rVHlwZXNVcGRhdGVJbmRleERldisrO1xuXG4gICAgICBpZiAoaG9va1R5cGVzRGV2W2hvb2tUeXBlc1VwZGF0ZUluZGV4RGV2XSAhPT0gaG9va05hbWUpIHtcbiAgICAgICAgd2Fybk9uSG9va01pc21hdGNoSW5EZXYoaG9va05hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja0RlcHNBcmVBcnJheURldihkZXBzKSB7XG4gIHtcbiAgICBpZiAoZGVwcyAhPT0gdW5kZWZpbmVkICYmIGRlcHMgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkoZGVwcykpIHtcbiAgICAgIC8vIFZlcmlmeSBkZXBzLCBidXQgb25seSBvbiBtb3VudCB0byBhdm9pZCBleHRyYSBjaGVja3MuXG4gICAgICAvLyBJdCdzIHVubGlrZWx5IHRoZWlyIHR5cGUgd291bGQgY2hhbmdlIGFzIHVzdWFsbHkgeW91IGRlZmluZSB0aGVtIGlubGluZS5cbiAgICAgIGVycm9yKCclcyByZWNlaXZlZCBhIGZpbmFsIGFyZ3VtZW50IHRoYXQgaXMgbm90IGFuIGFycmF5IChpbnN0ZWFkLCByZWNlaXZlZCBgJXNgKS4gV2hlbiAnICsgJ3NwZWNpZmllZCwgdGhlIGZpbmFsIGFyZ3VtZW50IG11c3QgYmUgYW4gYXJyYXkuJywgY3VycmVudEhvb2tOYW1lSW5EZXYsIHR5cGVvZiBkZXBzKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gd2Fybk9uSG9va01pc21hdGNoSW5EZXYoY3VycmVudEhvb2tOYW1lKSB7XG4gIHtcbiAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUoY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS50eXBlKTtcblxuICAgIGlmICghZGlkV2FybkFib3V0TWlzbWF0Y2hlZEhvb2tzRm9yQ29tcG9uZW50Lmhhcyhjb21wb25lbnROYW1lKSkge1xuICAgICAgZGlkV2FybkFib3V0TWlzbWF0Y2hlZEhvb2tzRm9yQ29tcG9uZW50LmFkZChjb21wb25lbnROYW1lKTtcblxuICAgICAgaWYgKGhvb2tUeXBlc0RldiAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgdGFibGUgPSAnJztcbiAgICAgICAgdmFyIHNlY29uZENvbHVtblN0YXJ0ID0gMzA7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gaG9va1R5cGVzVXBkYXRlSW5kZXhEZXY7IGkrKykge1xuICAgICAgICAgIHZhciBvbGRIb29rTmFtZSA9IGhvb2tUeXBlc0RldltpXTtcbiAgICAgICAgICB2YXIgbmV3SG9va05hbWUgPSBpID09PSBob29rVHlwZXNVcGRhdGVJbmRleERldiA/IGN1cnJlbnRIb29rTmFtZSA6IG9sZEhvb2tOYW1lO1xuICAgICAgICAgIHZhciByb3cgPSBpICsgMSArIFwiLiBcIiArIG9sZEhvb2tOYW1lOyAvLyBFeHRyYSBzcGFjZSBzbyBzZWNvbmQgY29sdW1uIGxpbmVzIHVwXG4gICAgICAgICAgLy8gbG9sIEAgSUUgbm90IHN1cHBvcnRpbmcgU3RyaW5nI3JlcGVhdFxuXG4gICAgICAgICAgd2hpbGUgKHJvdy5sZW5ndGggPCBzZWNvbmRDb2x1bW5TdGFydCkge1xuICAgICAgICAgICAgcm93ICs9ICcgJztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByb3cgKz0gbmV3SG9va05hbWUgKyAnXFxuJztcbiAgICAgICAgICB0YWJsZSArPSByb3c7XG4gICAgICAgIH1cblxuICAgICAgICBlcnJvcignUmVhY3QgaGFzIGRldGVjdGVkIGEgY2hhbmdlIGluIHRoZSBvcmRlciBvZiBIb29rcyBjYWxsZWQgYnkgJXMuICcgKyAnVGhpcyB3aWxsIGxlYWQgdG8gYnVncyBhbmQgZXJyb3JzIGlmIG5vdCBmaXhlZC4gJyArICdGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmVhZCB0aGUgUnVsZXMgb2YgSG9va3M6IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9ydWxlcy1vZi1ob29rc1xcblxcbicgKyAnICAgUHJldmlvdXMgcmVuZGVyICAgICAgICAgICAgTmV4dCByZW5kZXJcXG4nICsgJyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbicgKyAnJXMnICsgJyAgIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXlxcbicsIGNvbXBvbmVudE5hbWUsIHRhYmxlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdGhyb3dJbnZhbGlkSG9va0Vycm9yKCkge1xuICB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiSW52YWxpZCBob29rIGNhbGwuIEhvb2tzIGNhbiBvbmx5IGJlIGNhbGxlZCBpbnNpZGUgb2YgdGhlIGJvZHkgb2YgYSBmdW5jdGlvbiBjb21wb25lbnQuIFRoaXMgY291bGQgaGFwcGVuIGZvciBvbmUgb2YgdGhlIGZvbGxvd2luZyByZWFzb25zOlxcbjEuIFlvdSBtaWdodCBoYXZlIG1pc21hdGNoaW5nIHZlcnNpb25zIG9mIFJlYWN0IGFuZCB0aGUgcmVuZGVyZXIgKHN1Y2ggYXMgUmVhY3QgRE9NKVxcbjIuIFlvdSBtaWdodCBiZSBicmVha2luZyB0aGUgUnVsZXMgb2YgSG9va3NcXG4zLiBZb3UgbWlnaHQgaGF2ZSBtb3JlIHRoYW4gb25lIGNvcHkgb2YgUmVhY3QgaW4gdGhlIHNhbWUgYXBwXFxuU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9pbnZhbGlkLWhvb2stY2FsbCBmb3IgdGlwcyBhYm91dCBob3cgdG8gZGVidWcgYW5kIGZpeCB0aGlzIHByb2JsZW0uXCIgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYXJlSG9va0lucHV0c0VxdWFsKG5leHREZXBzLCBwcmV2RGVwcykge1xuICB7XG4gICAgaWYgKGlnbm9yZVByZXZpb3VzRGVwZW5kZW5jaWVzKSB7XG4gICAgICAvLyBPbmx5IHRydWUgd2hlbiB0aGlzIGNvbXBvbmVudCBpcyBiZWluZyBob3QgcmVsb2FkZWQuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgaWYgKHByZXZEZXBzID09PSBudWxsKSB7XG4gICAge1xuICAgICAgZXJyb3IoJyVzIHJlY2VpdmVkIGEgZmluYWwgYXJndW1lbnQgZHVyaW5nIHRoaXMgcmVuZGVyLCBidXQgbm90IGR1cmluZyAnICsgJ3RoZSBwcmV2aW91cyByZW5kZXIuIEV2ZW4gdGhvdWdoIHRoZSBmaW5hbCBhcmd1bWVudCBpcyBvcHRpb25hbCwgJyArICdpdHMgdHlwZSBjYW5ub3QgY2hhbmdlIGJldHdlZW4gcmVuZGVycy4nLCBjdXJyZW50SG9va05hbWVJbkRldik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAge1xuICAgIC8vIERvbid0IGJvdGhlciBjb21wYXJpbmcgbGVuZ3RocyBpbiBwcm9kIGJlY2F1c2UgdGhlc2UgYXJyYXlzIHNob3VsZCBiZVxuICAgIC8vIHBhc3NlZCBpbmxpbmUuXG4gICAgaWYgKG5leHREZXBzLmxlbmd0aCAhPT0gcHJldkRlcHMubGVuZ3RoKSB7XG4gICAgICBlcnJvcignVGhlIGZpbmFsIGFyZ3VtZW50IHBhc3NlZCB0byAlcyBjaGFuZ2VkIHNpemUgYmV0d2VlbiByZW5kZXJzLiBUaGUgJyArICdvcmRlciBhbmQgc2l6ZSBvZiB0aGlzIGFycmF5IG11c3QgcmVtYWluIGNvbnN0YW50LlxcblxcbicgKyAnUHJldmlvdXM6ICVzXFxuJyArICdJbmNvbWluZzogJXMnLCBjdXJyZW50SG9va05hbWVJbkRldiwgXCJbXCIgKyBwcmV2RGVwcy5qb2luKCcsICcpICsgXCJdXCIsIFwiW1wiICsgbmV4dERlcHMuam9pbignLCAnKSArIFwiXVwiKTtcbiAgICB9XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHByZXZEZXBzLmxlbmd0aCAmJiBpIDwgbmV4dERlcHMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAob2JqZWN0SXMobmV4dERlcHNbaV0sIHByZXZEZXBzW2ldKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHJlbmRlcldpdGhIb29rcyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBwcm9wcywgc2Vjb25kQXJnLCBuZXh0UmVuZGVyTGFuZXMpIHtcbiAgcmVuZGVyTGFuZXMgPSBuZXh0UmVuZGVyTGFuZXM7XG4gIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEgPSB3b3JrSW5Qcm9ncmVzcztcblxuICB7XG4gICAgaG9va1R5cGVzRGV2ID0gY3VycmVudCAhPT0gbnVsbCA/IGN1cnJlbnQuX2RlYnVnSG9va1R5cGVzIDogbnVsbDtcbiAgICBob29rVHlwZXNVcGRhdGVJbmRleERldiA9IC0xOyAvLyBVc2VkIGZvciBob3QgcmVsb2FkaW5nOlxuXG4gICAgaWdub3JlUHJldmlvdXNEZXBlbmRlbmNpZXMgPSBjdXJyZW50ICE9PSBudWxsICYmIGN1cnJlbnQudHlwZSAhPT0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgfVxuXG4gIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IG51bGw7XG4gIHdvcmtJblByb2dyZXNzLmxhbmVzID0gTm9MYW5lczsgLy8gVGhlIGZvbGxvd2luZyBzaG91bGQgaGF2ZSBhbHJlYWR5IGJlZW4gcmVzZXRcbiAgLy8gY3VycmVudEhvb2sgPSBudWxsO1xuICAvLyB3b3JrSW5Qcm9ncmVzc0hvb2sgPSBudWxsO1xuICAvLyBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlID0gZmFsc2U7XG4gIC8vIFRPRE8gV2FybiBpZiBubyBob29rcyBhcmUgdXNlZCBhdCBhbGwgZHVyaW5nIG1vdW50LCB0aGVuIHNvbWUgYXJlIHVzZWQgZHVyaW5nIHVwZGF0ZS5cbiAgLy8gQ3VycmVudGx5IHdlIHdpbGwgaWRlbnRpZnkgdGhlIHVwZGF0ZSByZW5kZXIgYXMgYSBtb3VudCBiZWNhdXNlIG1lbW9pemVkU3RhdGUgPT09IG51bGwuXG4gIC8vIFRoaXMgaXMgdHJpY2t5IGJlY2F1c2UgaXQncyB2YWxpZCBmb3IgY2VydGFpbiB0eXBlcyBvZiBjb21wb25lbnRzIChlLmcuIFJlYWN0LmxhenkpXG4gIC8vIFVzaW5nIG1lbW9pemVkU3RhdGUgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIG1vdW50L3VwZGF0ZSBvbmx5IHdvcmtzIGlmIGF0IGxlYXN0IG9uZSBzdGF0ZWZ1bCBob29rIGlzIHVzZWQuXG4gIC8vIE5vbi1zdGF0ZWZ1bCBob29rcyAoZS5nLiBjb250ZXh0KSBkb24ndCBnZXQgYWRkZWQgdG8gbWVtb2l6ZWRTdGF0ZSxcbiAgLy8gc28gbWVtb2l6ZWRTdGF0ZSB3b3VsZCBiZSBudWxsIGR1cmluZyB1cGRhdGVzIGFuZCBtb3VudHMuXG5cbiAge1xuICAgIGlmIChjdXJyZW50ICE9PSBudWxsICYmIGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuICAgIH0gZWxzZSBpZiAoaG9va1R5cGVzRGV2ICE9PSBudWxsKSB7XG4gICAgICAvLyBUaGlzIGRpc3BhdGNoZXIgaGFuZGxlcyBhbiBlZGdlIGNhc2Ugd2hlcmUgYSBjb21wb25lbnQgaXMgdXBkYXRpbmcsXG4gICAgICAvLyBidXQgbm8gc3RhdGVmdWwgaG9va3MgaGF2ZSBiZWVuIHVzZWQuXG4gICAgICAvLyBXZSB3YW50IHRvIG1hdGNoIHRoZSBwcm9kdWN0aW9uIGNvZGUgYmVoYXZpb3IgKHdoaWNoIHdpbGwgdXNlIEhvb2tzRGlzcGF0Y2hlck9uTW91bnQpLFxuICAgICAgLy8gYnV0IHdpdGggdGhlIGV4dHJhIERFViB2YWxpZGF0aW9uIHRvIGVuc3VyZSBob29rcyBvcmRlcmluZyBoYXNuJ3QgY2hhbmdlZC5cbiAgICAgIC8vIFRoaXMgZGlzcGF0Y2hlciBkb2VzIHRoYXQuXG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEhvb2tzRGlzcGF0Y2hlck9uTW91bnRXaXRoSG9va1R5cGVzSW5ERVY7XG4gICAgfSBlbHNlIHtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuICAgIH1cbiAgfVxuXG4gIHZhciBjaGlsZHJlbiA9IENvbXBvbmVudChwcm9wcywgc2Vjb25kQXJnKTsgLy8gQ2hlY2sgaWYgdGhlcmUgd2FzIGEgcmVuZGVyIHBoYXNlIHVwZGF0ZVxuXG4gIGlmIChkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlRHVyaW5nVGhpc1Bhc3MpIHtcbiAgICAvLyBLZWVwIHJlbmRlcmluZyBpbiBhIGxvb3AgZm9yIGFzIGxvbmcgYXMgcmVuZGVyIHBoYXNlIHVwZGF0ZXMgY29udGludWUgdG9cbiAgICAvLyBiZSBzY2hlZHVsZWQuIFVzZSBhIGNvdW50ZXIgdG8gcHJldmVudCBpbmZpbml0ZSBsb29wcy5cbiAgICB2YXIgbnVtYmVyT2ZSZVJlbmRlcnMgPSAwO1xuXG4gICAgZG8ge1xuICAgICAgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZUR1cmluZ1RoaXNQYXNzID0gZmFsc2U7XG5cbiAgICAgIGlmICghKG51bWJlck9mUmVSZW5kZXJzIDwgUkVfUkVOREVSX0xJTUlUKSkge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiVG9vIG1hbnkgcmUtcmVuZGVycy4gUmVhY3QgbGltaXRzIHRoZSBudW1iZXIgb2YgcmVuZGVycyB0byBwcmV2ZW50IGFuIGluZmluaXRlIGxvb3AuXCIgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBudW1iZXJPZlJlUmVuZGVycyArPSAxO1xuXG4gICAgICB7XG4gICAgICAgIC8vIEV2ZW4gd2hlbiBob3QgcmVsb2FkaW5nLCBhbGxvdyBkZXBlbmRlbmNpZXMgdG8gc3RhYmlsaXplXG4gICAgICAgIC8vIGFmdGVyIGZpcnN0IHJlbmRlciB0byBwcmV2ZW50IGluZmluaXRlIHJlbmRlciBwaGFzZSB1cGRhdGVzLlxuICAgICAgICBpZ25vcmVQcmV2aW91c0RlcGVuZGVuY2llcyA9IGZhbHNlO1xuICAgICAgfSAvLyBTdGFydCBvdmVyIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlzdFxuXG5cbiAgICAgIGN1cnJlbnRIb29rID0gbnVsbDtcbiAgICAgIHdvcmtJblByb2dyZXNzSG9vayA9IG51bGw7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IG51bGw7XG5cbiAgICAgIHtcbiAgICAgICAgLy8gQWxzbyB2YWxpZGF0ZSBob29rIG9yZGVyIGZvciBjYXNjYWRpbmcgdXBkYXRlcy5cbiAgICAgICAgaG9va1R5cGVzVXBkYXRlSW5kZXhEZXYgPSAtMTtcbiAgICAgIH1cblxuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSAgSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWIDtcbiAgICAgIGNoaWxkcmVuID0gQ29tcG9uZW50KHByb3BzLCBzZWNvbmRBcmcpO1xuICAgIH0gd2hpbGUgKGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGVEdXJpbmdUaGlzUGFzcyk7XG4gIH0gLy8gV2UgY2FuIGFzc3VtZSB0aGUgcHJldmlvdXMgZGlzcGF0Y2hlciBpcyBhbHdheXMgdGhpcyBvbmUsIHNpbmNlIHdlIHNldCBpdFxuICAvLyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSByZW5kZXIgcGhhc2UgYW5kIHRoZXJlJ3Mgbm8gcmUtZW50cmFuY3kuXG5cblxuICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IENvbnRleHRPbmx5RGlzcGF0Y2hlcjtcblxuICB7XG4gICAgd29ya0luUHJvZ3Jlc3MuX2RlYnVnSG9va1R5cGVzID0gaG9va1R5cGVzRGV2O1xuICB9IC8vIFRoaXMgY2hlY2sgdXNlcyBjdXJyZW50SG9vayBzbyB0aGF0IGl0IHdvcmtzIHRoZSBzYW1lIGluIERFViBhbmQgcHJvZCBidW5kbGVzLlxuICAvLyBob29rVHlwZXNEZXYgY291bGQgY2F0Y2ggbW9yZSBjYXNlcyAoZS5nLiBjb250ZXh0KSBidXQgb25seSBpbiBERVYgYnVuZGxlcy5cblxuXG4gIHZhciBkaWRSZW5kZXJUb29GZXdIb29rcyA9IGN1cnJlbnRIb29rICE9PSBudWxsICYmIGN1cnJlbnRIb29rLm5leHQgIT09IG51bGw7XG4gIHJlbmRlckxhbmVzID0gTm9MYW5lcztcbiAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSA9IG51bGw7XG4gIGN1cnJlbnRIb29rID0gbnVsbDtcbiAgd29ya0luUHJvZ3Jlc3NIb29rID0gbnVsbDtcblxuICB7XG4gICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBudWxsO1xuICAgIGhvb2tUeXBlc0RldiA9IG51bGw7XG4gICAgaG9va1R5cGVzVXBkYXRlSW5kZXhEZXYgPSAtMTtcbiAgfVxuXG4gIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGUgPSBmYWxzZTtcblxuICBpZiAoISFkaWRSZW5kZXJUb29GZXdIb29rcykge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlJlbmRlcmVkIGZld2VyIGhvb2tzIHRoYW4gZXhwZWN0ZWQuIFRoaXMgbWF5IGJlIGNhdXNlZCBieSBhbiBhY2NpZGVudGFsIGVhcmx5IHJldHVybiBzdGF0ZW1lbnQuXCIgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY2hpbGRyZW47XG59XG5mdW5jdGlvbiBiYWlsb3V0SG9va3MoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIGxhbmVzKSB7XG4gIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gY3VycmVudC51cGRhdGVRdWV1ZTtcbiAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgJj0gfihQYXNzaXZlIHwgVXBkYXRlKTtcbiAgY3VycmVudC5sYW5lcyA9IHJlbW92ZUxhbmVzKGN1cnJlbnQubGFuZXMsIGxhbmVzKTtcbn1cbmZ1bmN0aW9uIHJlc2V0SG9va3NBZnRlclRocm93KCkge1xuICAvLyBXZSBjYW4gYXNzdW1lIHRoZSBwcmV2aW91cyBkaXNwYXRjaGVyIGlzIGFsd2F5cyB0aGlzIG9uZSwgc2luY2Ugd2Ugc2V0IGl0XG4gIC8vIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJlbmRlciBwaGFzZSBhbmQgdGhlcmUncyBubyByZS1lbnRyYW5jeS5cbiAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBDb250ZXh0T25seURpc3BhdGNoZXI7XG5cbiAgaWYgKGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGUpIHtcbiAgICAvLyBUaGVyZSB3ZXJlIHJlbmRlciBwaGFzZSB1cGRhdGVzLiBUaGVzZSBhcmUgb25seSB2YWxpZCBmb3IgdGhpcyByZW5kZXJcbiAgICAvLyBwaGFzZSwgd2hpY2ggd2UgYXJlIG5vdyBhYm9ydGluZy4gUmVtb3ZlIHRoZSB1cGRhdGVzIGZyb20gdGhlIHF1ZXVlcyBzb1xuICAgIC8vIHRoZXkgZG8gbm90IHBlcnNpc3QgdG8gdGhlIG5leHQgcmVuZGVyLiBEbyBub3QgcmVtb3ZlIHVwZGF0ZXMgZnJvbSBob29rc1xuICAgIC8vIHRoYXQgd2VyZW4ndCBwcm9jZXNzZWQuXG4gICAgLy9cbiAgICAvLyBPbmx5IHJlc2V0IHRoZSB1cGRhdGVzIGZyb20gdGhlIHF1ZXVlIGlmIGl0IGhhcyBhIGNsb25lLiBJZiBpdCBkb2VzXG4gICAgLy8gbm90IGhhdmUgYSBjbG9uZSwgdGhhdCBtZWFucyBpdCB3YXNuJ3QgcHJvY2Vzc2VkLCBhbmQgdGhlIHVwZGF0ZXMgd2VyZVxuICAgIC8vIHNjaGVkdWxlZCBiZWZvcmUgd2UgZW50ZXJlZCB0aGUgcmVuZGVyIHBoYXNlLlxuICAgIHZhciBob29rID0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5tZW1vaXplZFN0YXRlO1xuXG4gICAgd2hpbGUgKGhvb2sgIT09IG51bGwpIHtcbiAgICAgIHZhciBxdWV1ZSA9IGhvb2sucXVldWU7XG5cbiAgICAgIGlmIChxdWV1ZSAhPT0gbnVsbCkge1xuICAgICAgICBxdWV1ZS5wZW5kaW5nID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaG9vayA9IGhvb2submV4dDtcbiAgICB9XG5cbiAgICBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlID0gZmFsc2U7XG4gIH1cblxuICByZW5kZXJMYW5lcyA9IE5vTGFuZXM7XG4gIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEgPSBudWxsO1xuICBjdXJyZW50SG9vayA9IG51bGw7XG4gIHdvcmtJblByb2dyZXNzSG9vayA9IG51bGw7XG5cbiAge1xuICAgIGhvb2tUeXBlc0RldiA9IG51bGw7XG4gICAgaG9va1R5cGVzVXBkYXRlSW5kZXhEZXYgPSAtMTtcbiAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IG51bGw7XG4gICAgaXNVcGRhdGluZ09wYXF1ZVZhbHVlSW5SZW5kZXJQaGFzZSA9IGZhbHNlO1xuICB9XG5cbiAgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZUR1cmluZ1RoaXNQYXNzID0gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCkge1xuICB2YXIgaG9vayA9IHtcbiAgICBtZW1vaXplZFN0YXRlOiBudWxsLFxuICAgIGJhc2VTdGF0ZTogbnVsbCxcbiAgICBiYXNlUXVldWU6IG51bGwsXG4gICAgcXVldWU6IG51bGwsXG4gICAgbmV4dDogbnVsbFxuICB9O1xuXG4gIGlmICh3b3JrSW5Qcm9ncmVzc0hvb2sgPT09IG51bGwpIHtcbiAgICAvLyBUaGlzIGlzIHRoZSBmaXJzdCBob29rIGluIHRoZSBsaXN0XG4gICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5tZW1vaXplZFN0YXRlID0gd29ya0luUHJvZ3Jlc3NIb29rID0gaG9vaztcbiAgfSBlbHNlIHtcbiAgICAvLyBBcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdFxuICAgIHdvcmtJblByb2dyZXNzSG9vayA9IHdvcmtJblByb2dyZXNzSG9vay5uZXh0ID0gaG9vaztcbiAgfVxuXG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzc0hvb2s7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpIHtcbiAgLy8gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGJvdGggZm9yIHVwZGF0ZXMgYW5kIGZvciByZS1yZW5kZXJzIHRyaWdnZXJlZCBieSBhXG4gIC8vIHJlbmRlciBwaGFzZSB1cGRhdGUuIEl0IGFzc3VtZXMgdGhlcmUgaXMgZWl0aGVyIGEgY3VycmVudCBob29rIHdlIGNhblxuICAvLyBjbG9uZSwgb3IgYSB3b3JrLWluLXByb2dyZXNzIGhvb2sgZnJvbSBhIHByZXZpb3VzIHJlbmRlciBwYXNzIHRoYXQgd2UgY2FuXG4gIC8vIHVzZSBhcyBhIGJhc2UuIFdoZW4gd2UgcmVhY2ggdGhlIGVuZCBvZiB0aGUgYmFzZSBsaXN0LCB3ZSBtdXN0IHN3aXRjaCB0b1xuICAvLyB0aGUgZGlzcGF0Y2hlciB1c2VkIGZvciBtb3VudHMuXG4gIHZhciBuZXh0Q3VycmVudEhvb2s7XG5cbiAgaWYgKGN1cnJlbnRIb29rID09PSBudWxsKSB7XG4gICAgdmFyIGN1cnJlbnQgPSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLmFsdGVybmF0ZTtcblxuICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICBuZXh0Q3VycmVudEhvb2sgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5leHRDdXJyZW50SG9vayA9IG51bGw7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIG5leHRDdXJyZW50SG9vayA9IGN1cnJlbnRIb29rLm5leHQ7XG4gIH1cblxuICB2YXIgbmV4dFdvcmtJblByb2dyZXNzSG9vaztcblxuICBpZiAod29ya0luUHJvZ3Jlc3NIb29rID09PSBudWxsKSB7XG4gICAgbmV4dFdvcmtJblByb2dyZXNzSG9vayA9IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEubWVtb2l6ZWRTdGF0ZTtcbiAgfSBlbHNlIHtcbiAgICBuZXh0V29ya0luUHJvZ3Jlc3NIb29rID0gd29ya0luUHJvZ3Jlc3NIb29rLm5leHQ7XG4gIH1cblxuICBpZiAobmV4dFdvcmtJblByb2dyZXNzSG9vayAhPT0gbnVsbCkge1xuICAgIC8vIFRoZXJlJ3MgYWxyZWFkeSBhIHdvcmstaW4tcHJvZ3Jlc3MuIFJldXNlIGl0LlxuICAgIHdvcmtJblByb2dyZXNzSG9vayA9IG5leHRXb3JrSW5Qcm9ncmVzc0hvb2s7XG4gICAgbmV4dFdvcmtJblByb2dyZXNzSG9vayA9IHdvcmtJblByb2dyZXNzSG9vay5uZXh0O1xuICAgIGN1cnJlbnRIb29rID0gbmV4dEN1cnJlbnRIb29rO1xuICB9IGVsc2Uge1xuICAgIC8vIENsb25lIGZyb20gdGhlIGN1cnJlbnQgaG9vay5cbiAgICBpZiAoIShuZXh0Q3VycmVudEhvb2sgIT09IG51bGwpKSB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIlJlbmRlcmVkIG1vcmUgaG9va3MgdGhhbiBkdXJpbmcgdGhlIHByZXZpb3VzIHJlbmRlci5cIiApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGN1cnJlbnRIb29rID0gbmV4dEN1cnJlbnRIb29rO1xuICAgIHZhciBuZXdIb29rID0ge1xuICAgICAgbWVtb2l6ZWRTdGF0ZTogY3VycmVudEhvb2subWVtb2l6ZWRTdGF0ZSxcbiAgICAgIGJhc2VTdGF0ZTogY3VycmVudEhvb2suYmFzZVN0YXRlLFxuICAgICAgYmFzZVF1ZXVlOiBjdXJyZW50SG9vay5iYXNlUXVldWUsXG4gICAgICBxdWV1ZTogY3VycmVudEhvb2sucXVldWUsXG4gICAgICBuZXh0OiBudWxsXG4gICAgfTtcblxuICAgIGlmICh3b3JrSW5Qcm9ncmVzc0hvb2sgPT09IG51bGwpIHtcbiAgICAgIC8vIFRoaXMgaXMgdGhlIGZpcnN0IGhvb2sgaW4gdGhlIGxpc3QuXG4gICAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLm1lbW9pemVkU3RhdGUgPSB3b3JrSW5Qcm9ncmVzc0hvb2sgPSBuZXdIb29rO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBBcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdC5cbiAgICAgIHdvcmtJblByb2dyZXNzSG9vayA9IHdvcmtJblByb2dyZXNzSG9vay5uZXh0ID0gbmV3SG9vaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gd29ya0luUHJvZ3Jlc3NIb29rO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVGdW5jdGlvbkNvbXBvbmVudFVwZGF0ZVF1ZXVlKCkge1xuICByZXR1cm4ge1xuICAgIGxhc3RFZmZlY3Q6IG51bGxcbiAgfTtcbn1cblxuZnVuY3Rpb24gYmFzaWNTdGF0ZVJlZHVjZXIoc3RhdGUsIGFjdGlvbikge1xuICAvLyAkRmxvd0ZpeE1lOiBGbG93IGRvZXNuJ3QgbGlrZSBtaXhlZCB0eXBlc1xuICByZXR1cm4gdHlwZW9mIGFjdGlvbiA9PT0gJ2Z1bmN0aW9uJyA/IGFjdGlvbihzdGF0ZSkgOiBhY3Rpb247XG59XG5cbmZ1bmN0aW9uIG1vdW50UmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgdmFyIGluaXRpYWxTdGF0ZTtcblxuICBpZiAoaW5pdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaW5pdGlhbFN0YXRlID0gaW5pdChpbml0aWFsQXJnKTtcbiAgfSBlbHNlIHtcbiAgICBpbml0aWFsU3RhdGUgPSBpbml0aWFsQXJnO1xuICB9XG5cbiAgaG9vay5tZW1vaXplZFN0YXRlID0gaG9vay5iYXNlU3RhdGUgPSBpbml0aWFsU3RhdGU7XG4gIHZhciBxdWV1ZSA9IGhvb2sucXVldWUgPSB7XG4gICAgcGVuZGluZzogbnVsbCxcbiAgICBkaXNwYXRjaDogbnVsbCxcbiAgICBsYXN0UmVuZGVyZWRSZWR1Y2VyOiByZWR1Y2VyLFxuICAgIGxhc3RSZW5kZXJlZFN0YXRlOiBpbml0aWFsU3RhdGVcbiAgfTtcbiAgdmFyIGRpc3BhdGNoID0gcXVldWUuZGlzcGF0Y2ggPSBkaXNwYXRjaEFjdGlvbi5iaW5kKG51bGwsIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEsIHF1ZXVlKTtcbiAgcmV0dXJuIFtob29rLm1lbW9pemVkU3RhdGUsIGRpc3BhdGNoXTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlUmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHZhciBxdWV1ZSA9IGhvb2sucXVldWU7XG5cbiAgaWYgKCEocXVldWUgIT09IG51bGwpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiU2hvdWxkIGhhdmUgYSBxdWV1ZS4gVGhpcyBpcyBsaWtlbHkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgfVxuICB9XG5cbiAgcXVldWUubGFzdFJlbmRlcmVkUmVkdWNlciA9IHJlZHVjZXI7XG4gIHZhciBjdXJyZW50ID0gY3VycmVudEhvb2s7IC8vIFRoZSBsYXN0IHJlYmFzZSB1cGRhdGUgdGhhdCBpcyBOT1QgcGFydCBvZiB0aGUgYmFzZSBzdGF0ZS5cblxuICB2YXIgYmFzZVF1ZXVlID0gY3VycmVudC5iYXNlUXVldWU7IC8vIFRoZSBsYXN0IHBlbmRpbmcgdXBkYXRlIHRoYXQgaGFzbid0IGJlZW4gcHJvY2Vzc2VkIHlldC5cblxuICB2YXIgcGVuZGluZ1F1ZXVlID0gcXVldWUucGVuZGluZztcblxuICBpZiAocGVuZGluZ1F1ZXVlICE9PSBudWxsKSB7XG4gICAgLy8gV2UgaGF2ZSBuZXcgdXBkYXRlcyB0aGF0IGhhdmVuJ3QgYmVlbiBwcm9jZXNzZWQgeWV0LlxuICAgIC8vIFdlJ2xsIGFkZCB0aGVtIHRvIHRoZSBiYXNlIHF1ZXVlLlxuICAgIGlmIChiYXNlUXVldWUgIT09IG51bGwpIHtcbiAgICAgIC8vIE1lcmdlIHRoZSBwZW5kaW5nIHF1ZXVlIGFuZCB0aGUgYmFzZSBxdWV1ZS5cbiAgICAgIHZhciBiYXNlRmlyc3QgPSBiYXNlUXVldWUubmV4dDtcbiAgICAgIHZhciBwZW5kaW5nRmlyc3QgPSBwZW5kaW5nUXVldWUubmV4dDtcbiAgICAgIGJhc2VRdWV1ZS5uZXh0ID0gcGVuZGluZ0ZpcnN0O1xuICAgICAgcGVuZGluZ1F1ZXVlLm5leHQgPSBiYXNlRmlyc3Q7XG4gICAgfVxuXG4gICAge1xuICAgICAgaWYgKGN1cnJlbnQuYmFzZVF1ZXVlICE9PSBiYXNlUXVldWUpIHtcbiAgICAgICAgLy8gSW50ZXJuYWwgaW52YXJpYW50IHRoYXQgc2hvdWxkIG5ldmVyIGhhcHBlbiwgYnV0IGZlYXNpYmx5IGNvdWxkIGluXG4gICAgICAgIC8vIHRoZSBmdXR1cmUgaWYgd2UgaW1wbGVtZW50IHJlc3VtaW5nLCBvciBzb21lIGZvcm0gb2YgdGhhdC5cbiAgICAgICAgZXJyb3IoJ0ludGVybmFsIGVycm9yOiBFeHBlY3RlZCB3b3JrLWluLXByb2dyZXNzIHF1ZXVlIHRvIGJlIGEgY2xvbmUuICcgKyAnVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjdXJyZW50LmJhc2VRdWV1ZSA9IGJhc2VRdWV1ZSA9IHBlbmRpbmdRdWV1ZTtcbiAgICBxdWV1ZS5wZW5kaW5nID0gbnVsbDtcbiAgfVxuXG4gIGlmIChiYXNlUXVldWUgIT09IG51bGwpIHtcbiAgICAvLyBXZSBoYXZlIGEgcXVldWUgdG8gcHJvY2Vzcy5cbiAgICB2YXIgZmlyc3QgPSBiYXNlUXVldWUubmV4dDtcbiAgICB2YXIgbmV3U3RhdGUgPSBjdXJyZW50LmJhc2VTdGF0ZTtcbiAgICB2YXIgbmV3QmFzZVN0YXRlID0gbnVsbDtcbiAgICB2YXIgbmV3QmFzZVF1ZXVlRmlyc3QgPSBudWxsO1xuICAgIHZhciBuZXdCYXNlUXVldWVMYXN0ID0gbnVsbDtcbiAgICB2YXIgdXBkYXRlID0gZmlyc3Q7XG5cbiAgICBkbyB7XG4gICAgICB2YXIgdXBkYXRlTGFuZSA9IHVwZGF0ZS5sYW5lO1xuXG4gICAgICBpZiAoIWlzU3Vic2V0T2ZMYW5lcyhyZW5kZXJMYW5lcywgdXBkYXRlTGFuZSkpIHtcbiAgICAgICAgLy8gUHJpb3JpdHkgaXMgaW5zdWZmaWNpZW50LiBTa2lwIHRoaXMgdXBkYXRlLiBJZiB0aGlzIGlzIHRoZSBmaXJzdFxuICAgICAgICAvLyBza2lwcGVkIHVwZGF0ZSwgdGhlIHByZXZpb3VzIHVwZGF0ZS9zdGF0ZSBpcyB0aGUgbmV3IGJhc2VcbiAgICAgICAgLy8gdXBkYXRlL3N0YXRlLlxuICAgICAgICB2YXIgY2xvbmUgPSB7XG4gICAgICAgICAgbGFuZTogdXBkYXRlTGFuZSxcbiAgICAgICAgICBhY3Rpb246IHVwZGF0ZS5hY3Rpb24sXG4gICAgICAgICAgZWFnZXJSZWR1Y2VyOiB1cGRhdGUuZWFnZXJSZWR1Y2VyLFxuICAgICAgICAgIGVhZ2VyU3RhdGU6IHVwZGF0ZS5lYWdlclN0YXRlLFxuICAgICAgICAgIG5leHQ6IG51bGxcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAobmV3QmFzZVF1ZXVlTGFzdCA9PT0gbnVsbCkge1xuICAgICAgICAgIG5ld0Jhc2VRdWV1ZUZpcnN0ID0gbmV3QmFzZVF1ZXVlTGFzdCA9IGNsb25lO1xuICAgICAgICAgIG5ld0Jhc2VTdGF0ZSA9IG5ld1N0YXRlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld0Jhc2VRdWV1ZUxhc3QgPSBuZXdCYXNlUXVldWVMYXN0Lm5leHQgPSBjbG9uZTtcbiAgICAgICAgfSAvLyBVcGRhdGUgdGhlIHJlbWFpbmluZyBwcmlvcml0eSBpbiB0aGUgcXVldWUuXG4gICAgICAgIC8vIFRPRE86IERvbid0IG5lZWQgdG8gYWNjdW11bGF0ZSB0aGlzLiBJbnN0ZWFkLCB3ZSBjYW4gcmVtb3ZlXG4gICAgICAgIC8vIHJlbmRlckxhbmVzIGZyb20gdGhlIG9yaWdpbmFsIGxhbmVzLlxuXG5cbiAgICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5sYW5lcyA9IG1lcmdlTGFuZXMoY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5sYW5lcywgdXBkYXRlTGFuZSk7XG4gICAgICAgIG1hcmtTa2lwcGVkVXBkYXRlTGFuZXModXBkYXRlTGFuZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUaGlzIHVwZGF0ZSBkb2VzIGhhdmUgc3VmZmljaWVudCBwcmlvcml0eS5cbiAgICAgICAgaWYgKG5ld0Jhc2VRdWV1ZUxhc3QgIT09IG51bGwpIHtcbiAgICAgICAgICB2YXIgX2Nsb25lID0ge1xuICAgICAgICAgICAgLy8gVGhpcyB1cGRhdGUgaXMgZ29pbmcgdG8gYmUgY29tbWl0dGVkIHNvIHdlIG5ldmVyIHdhbnQgdW5jb21taXRcbiAgICAgICAgICAgIC8vIGl0LiBVc2luZyBOb0xhbmUgd29ya3MgYmVjYXVzZSAwIGlzIGEgc3Vic2V0IG9mIGFsbCBiaXRtYXNrcywgc29cbiAgICAgICAgICAgIC8vIHRoaXMgd2lsbCBuZXZlciBiZSBza2lwcGVkIGJ5IHRoZSBjaGVjayBhYm92ZS5cbiAgICAgICAgICAgIGxhbmU6IE5vTGFuZSxcbiAgICAgICAgICAgIGFjdGlvbjogdXBkYXRlLmFjdGlvbixcbiAgICAgICAgICAgIGVhZ2VyUmVkdWNlcjogdXBkYXRlLmVhZ2VyUmVkdWNlcixcbiAgICAgICAgICAgIGVhZ2VyU3RhdGU6IHVwZGF0ZS5lYWdlclN0YXRlLFxuICAgICAgICAgICAgbmV4dDogbnVsbFxuICAgICAgICAgIH07XG4gICAgICAgICAgbmV3QmFzZVF1ZXVlTGFzdCA9IG5ld0Jhc2VRdWV1ZUxhc3QubmV4dCA9IF9jbG9uZTtcbiAgICAgICAgfSAvLyBQcm9jZXNzIHRoaXMgdXBkYXRlLlxuXG5cbiAgICAgICAgaWYgKHVwZGF0ZS5lYWdlclJlZHVjZXIgPT09IHJlZHVjZXIpIHtcbiAgICAgICAgICAvLyBJZiB0aGlzIHVwZGF0ZSB3YXMgcHJvY2Vzc2VkIGVhZ2VybHksIGFuZCBpdHMgcmVkdWNlciBtYXRjaGVzIHRoZVxuICAgICAgICAgIC8vIGN1cnJlbnQgcmVkdWNlciwgd2UgY2FuIHVzZSB0aGUgZWFnZXJseSBjb21wdXRlZCBzdGF0ZS5cbiAgICAgICAgICBuZXdTdGF0ZSA9IHVwZGF0ZS5lYWdlclN0YXRlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBhY3Rpb24gPSB1cGRhdGUuYWN0aW9uO1xuICAgICAgICAgIG5ld1N0YXRlID0gcmVkdWNlcihuZXdTdGF0ZSwgYWN0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB1cGRhdGUgPSB1cGRhdGUubmV4dDtcbiAgICB9IHdoaWxlICh1cGRhdGUgIT09IG51bGwgJiYgdXBkYXRlICE9PSBmaXJzdCk7XG5cbiAgICBpZiAobmV3QmFzZVF1ZXVlTGFzdCA9PT0gbnVsbCkge1xuICAgICAgbmV3QmFzZVN0YXRlID0gbmV3U3RhdGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0Jhc2VRdWV1ZUxhc3QubmV4dCA9IG5ld0Jhc2VRdWV1ZUZpcnN0O1xuICAgIH0gLy8gTWFyayB0aGF0IHRoZSBmaWJlciBwZXJmb3JtZWQgd29yaywgYnV0IG9ubHkgaWYgdGhlIG5ldyBzdGF0ZSBpc1xuICAgIC8vIGRpZmZlcmVudCBmcm9tIHRoZSBjdXJyZW50IHN0YXRlLlxuXG5cbiAgICBpZiAoIW9iamVjdElzKG5ld1N0YXRlLCBob29rLm1lbW9pemVkU3RhdGUpKSB7XG4gICAgICBtYXJrV29ya0luUHJvZ3Jlc3NSZWNlaXZlZFVwZGF0ZSgpO1xuICAgIH1cblxuICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IG5ld1N0YXRlO1xuICAgIGhvb2suYmFzZVN0YXRlID0gbmV3QmFzZVN0YXRlO1xuICAgIGhvb2suYmFzZVF1ZXVlID0gbmV3QmFzZVF1ZXVlTGFzdDtcbiAgICBxdWV1ZS5sYXN0UmVuZGVyZWRTdGF0ZSA9IG5ld1N0YXRlO1xuICB9XG5cbiAgdmFyIGRpc3BhdGNoID0gcXVldWUuZGlzcGF0Y2g7XG4gIHJldHVybiBbaG9vay5tZW1vaXplZFN0YXRlLCBkaXNwYXRjaF07XG59XG5cbmZ1bmN0aW9uIHJlcmVuZGVyUmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHZhciBxdWV1ZSA9IGhvb2sucXVldWU7XG5cbiAgaWYgKCEocXVldWUgIT09IG51bGwpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiU2hvdWxkIGhhdmUgYSBxdWV1ZS4gVGhpcyBpcyBsaWtlbHkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgfVxuICB9XG5cbiAgcXVldWUubGFzdFJlbmRlcmVkUmVkdWNlciA9IHJlZHVjZXI7IC8vIFRoaXMgaXMgYSByZS1yZW5kZXIuIEFwcGx5IHRoZSBuZXcgcmVuZGVyIHBoYXNlIHVwZGF0ZXMgdG8gdGhlIHByZXZpb3VzXG4gIC8vIHdvcmstaW4tcHJvZ3Jlc3MgaG9vay5cblxuICB2YXIgZGlzcGF0Y2ggPSBxdWV1ZS5kaXNwYXRjaDtcbiAgdmFyIGxhc3RSZW5kZXJQaGFzZVVwZGF0ZSA9IHF1ZXVlLnBlbmRpbmc7XG4gIHZhciBuZXdTdGF0ZSA9IGhvb2subWVtb2l6ZWRTdGF0ZTtcblxuICBpZiAobGFzdFJlbmRlclBoYXNlVXBkYXRlICE9PSBudWxsKSB7XG4gICAgLy8gVGhlIHF1ZXVlIGRvZXNuJ3QgcGVyc2lzdCBwYXN0IHRoaXMgcmVuZGVyIHBhc3MuXG4gICAgcXVldWUucGVuZGluZyA9IG51bGw7XG4gICAgdmFyIGZpcnN0UmVuZGVyUGhhc2VVcGRhdGUgPSBsYXN0UmVuZGVyUGhhc2VVcGRhdGUubmV4dDtcbiAgICB2YXIgdXBkYXRlID0gZmlyc3RSZW5kZXJQaGFzZVVwZGF0ZTtcblxuICAgIGRvIHtcbiAgICAgIC8vIFByb2Nlc3MgdGhpcyByZW5kZXIgcGhhc2UgdXBkYXRlLiBXZSBkb24ndCBoYXZlIHRvIGNoZWNrIHRoZVxuICAgICAgLy8gcHJpb3JpdHkgYmVjYXVzZSBpdCB3aWxsIGFsd2F5cyBiZSB0aGUgc2FtZSBhcyB0aGUgY3VycmVudFxuICAgICAgLy8gcmVuZGVyJ3MuXG4gICAgICB2YXIgYWN0aW9uID0gdXBkYXRlLmFjdGlvbjtcbiAgICAgIG5ld1N0YXRlID0gcmVkdWNlcihuZXdTdGF0ZSwgYWN0aW9uKTtcbiAgICAgIHVwZGF0ZSA9IHVwZGF0ZS5uZXh0O1xuICAgIH0gd2hpbGUgKHVwZGF0ZSAhPT0gZmlyc3RSZW5kZXJQaGFzZVVwZGF0ZSk7IC8vIE1hcmsgdGhhdCB0aGUgZmliZXIgcGVyZm9ybWVkIHdvcmssIGJ1dCBvbmx5IGlmIHRoZSBuZXcgc3RhdGUgaXNcbiAgICAvLyBkaWZmZXJlbnQgZnJvbSB0aGUgY3VycmVudCBzdGF0ZS5cblxuXG4gICAgaWYgKCFvYmplY3RJcyhuZXdTdGF0ZSwgaG9vay5tZW1vaXplZFN0YXRlKSkge1xuICAgICAgbWFya1dvcmtJblByb2dyZXNzUmVjZWl2ZWRVcGRhdGUoKTtcbiAgICB9XG5cbiAgICBob29rLm1lbW9pemVkU3RhdGUgPSBuZXdTdGF0ZTsgLy8gRG9uJ3QgcGVyc2lzdCB0aGUgc3RhdGUgYWNjdW11bGF0ZWQgZnJvbSB0aGUgcmVuZGVyIHBoYXNlIHVwZGF0ZXMgdG9cbiAgICAvLyB0aGUgYmFzZSBzdGF0ZSB1bmxlc3MgdGhlIHF1ZXVlIGlzIGVtcHR5LlxuICAgIC8vIFRPRE86IE5vdCBzdXJlIGlmIHRoaXMgaXMgdGhlIGRlc2lyZWQgc2VtYW50aWNzLCBidXQgaXQncyB3aGF0IHdlXG4gICAgLy8gZG8gZm9yIGdEU0ZQLiBJIGNhbid0IHJlbWVtYmVyIHdoeS5cblxuICAgIGlmIChob29rLmJhc2VRdWV1ZSA9PT0gbnVsbCkge1xuICAgICAgaG9vay5iYXNlU3RhdGUgPSBuZXdTdGF0ZTtcbiAgICB9XG5cbiAgICBxdWV1ZS5sYXN0UmVuZGVyZWRTdGF0ZSA9IG5ld1N0YXRlO1xuICB9XG5cbiAgcmV0dXJuIFtuZXdTdGF0ZSwgZGlzcGF0Y2hdO1xufVxuXG5mdW5jdGlvbiByZWFkRnJvbVVuc3ViY3JpYmVkTXV0YWJsZVNvdXJjZShyb290LCBzb3VyY2UsIGdldFNuYXBzaG90KSB7XG4gIHtcbiAgICB3YXJuQWJvdXRNdWx0aXBsZVJlbmRlcmVyc0RFVihzb3VyY2UpO1xuICB9XG5cbiAgdmFyIGdldFZlcnNpb24gPSBzb3VyY2UuX2dldFZlcnNpb247XG4gIHZhciB2ZXJzaW9uID0gZ2V0VmVyc2lvbihzb3VyY2UuX3NvdXJjZSk7IC8vIElzIGl0IHNhZmUgZm9yIHRoaXMgY29tcG9uZW50IHRvIHJlYWQgZnJvbSB0aGlzIHNvdXJjZSBkdXJpbmcgdGhlIGN1cnJlbnQgcmVuZGVyP1xuXG4gIHZhciBpc1NhZmVUb1JlYWRGcm9tU291cmNlID0gZmFsc2U7IC8vIENoZWNrIHRoZSB2ZXJzaW9uIGZpcnN0LlxuICAvLyBJZiB0aGlzIHJlbmRlciBoYXMgYWxyZWFkeSBiZWVuIHN0YXJ0ZWQgd2l0aCBhIHNwZWNpZmljIHZlcnNpb24sXG4gIC8vIHdlIGNhbiB1c2UgaXQgYWxvbmUgdG8gZGV0ZXJtaW5lIGlmIHdlIGNhbiBzYWZlbHkgcmVhZCBmcm9tIHRoZSBzb3VyY2UuXG5cbiAgdmFyIGN1cnJlbnRSZW5kZXJWZXJzaW9uID0gZ2V0V29ya0luUHJvZ3Jlc3NWZXJzaW9uKHNvdXJjZSk7XG5cbiAgaWYgKGN1cnJlbnRSZW5kZXJWZXJzaW9uICE9PSBudWxsKSB7XG4gICAgLy8gSXQncyBzYWZlIHRvIHJlYWQgaWYgdGhlIHN0b3JlIGhhc24ndCBiZWVuIG11dGF0ZWQgc2luY2UgdGhlIGxhc3QgdGltZVxuICAgIC8vIHdlIHJlYWQgc29tZXRoaW5nLlxuICAgIGlzU2FmZVRvUmVhZEZyb21Tb3VyY2UgPSBjdXJyZW50UmVuZGVyVmVyc2lvbiA9PT0gdmVyc2lvbjtcbiAgfSBlbHNlIHtcbiAgICAvLyBJZiB0aGVyZSdzIG5vIHZlcnNpb24sIHRoZW4gdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB3ZSd2ZSByZWFkIGZyb20gdGhlXG4gICAgLy8gc291cmNlIGR1cmluZyB0aGUgY3VycmVudCByZW5kZXIgcGFzcywgc28gd2UgbmVlZCB0byBkbyBhIGJpdCBtb3JlIHdvcmsuXG4gICAgLy8gV2hhdCB3ZSBuZWVkIHRvIGRldGVybWluZSBpcyBpZiB0aGVyZSBhcmUgYW55IGhvb2tzIHRoYXQgYWxyZWFkeVxuICAgIC8vIHN1YnNjcmliZWQgdG8gdGhlIHNvdXJjZSwgYW5kIGlmIHNvLCB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgcGVuZGluZ1xuICAgIC8vIG11dGF0aW9ucyB0aGF0IGhhdmVuJ3QgYmVlbiBzeW5jaHJvbml6ZWQgeWV0LlxuICAgIC8vXG4gICAgLy8gSWYgdGhlcmUgYXJlIG5vIHBlbmRpbmcgbXV0YXRpb25zLCB0aGVuIGByb290Lm11dGFibGVSZWFkTGFuZXNgIHdpbGwgYmVcbiAgICAvLyBlbXB0eSwgYW5kIHdlIGtub3cgd2UgY2FuIHNhZmVseSByZWFkLlxuICAgIC8vXG4gICAgLy8gSWYgdGhlcmUgKmFyZSogcGVuZGluZyBtdXRhdGlvbnMsIHdlIG1heSBzdGlsbCBiZSBhYmxlIHRvIHNhZmVseSByZWFkXG4gICAgLy8gaWYgdGhlIGN1cnJlbnRseSByZW5kZXJpbmcgbGFuZXMgYXJlIGluY2x1c2l2ZSBvZiB0aGUgcGVuZGluZyBtdXRhdGlvblxuICAgIC8vIGxhbmVzLCBzaW5jZSB0aGF0IGd1YXJhbnRlZXMgdGhhdCB0aGUgdmFsdWUgd2UncmUgYWJvdXQgdG8gcmVhZCBmcm9tXG4gICAgLy8gdGhlIHNvdXJjZSBpcyBjb25zaXN0ZW50IHdpdGggdGhlIHZhbHVlcyB0aGF0IHdlIHJlYWQgZHVyaW5nIHRoZSBtb3N0XG4gICAgLy8gcmVjZW50IG11dGF0aW9uLlxuICAgIGlzU2FmZVRvUmVhZEZyb21Tb3VyY2UgPSBpc1N1YnNldE9mTGFuZXMocmVuZGVyTGFuZXMsIHJvb3QubXV0YWJsZVJlYWRMYW5lcyk7XG5cbiAgICBpZiAoaXNTYWZlVG9SZWFkRnJvbVNvdXJjZSkge1xuICAgICAgLy8gSWYgaXQncyBzYWZlIHRvIHJlYWQgZnJvbSB0aGlzIHNvdXJjZSBkdXJpbmcgdGhlIGN1cnJlbnQgcmVuZGVyLFxuICAgICAgLy8gc3RvcmUgdGhlIHZlcnNpb24gaW4gY2FzZSBvdGhlciBjb21wb25lbnRzIHJlYWQgZnJvbSBpdC5cbiAgICAgIC8vIEEgY2hhbmdlZCB2ZXJzaW9uIG51bWJlciB3aWxsIGxldCB0aG9zZSBjb21wb25lbnRzIGtub3cgdG8gdGhyb3cgYW5kIHJlc3RhcnQgdGhlIHJlbmRlci5cbiAgICAgIHNldFdvcmtJblByb2dyZXNzVmVyc2lvbihzb3VyY2UsIHZlcnNpb24pO1xuICAgIH1cbiAgfVxuXG4gIGlmIChpc1NhZmVUb1JlYWRGcm9tU291cmNlKSB7XG4gICAgdmFyIHNuYXBzaG90ID0gZ2V0U25hcHNob3Qoc291cmNlLl9zb3VyY2UpO1xuXG4gICAge1xuICAgICAgaWYgKHR5cGVvZiBzbmFwc2hvdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBlcnJvcignTXV0YWJsZSBzb3VyY2Ugc2hvdWxkIG5vdCByZXR1cm4gYSBmdW5jdGlvbiBhcyB0aGUgc25hcHNob3QgdmFsdWUuICcgKyAnRnVuY3Rpb25zIG1heSBjbG9zZSBvdmVyIG11dGFibGUgdmFsdWVzIGFuZCBjYXVzZSB0ZWFyaW5nLicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzbmFwc2hvdDtcbiAgfSBlbHNlIHtcbiAgICAvLyBUaGlzIGhhbmRsZXMgdGhlIHNwZWNpYWwgY2FzZSBvZiBhIG11dGFibGUgc291cmNlIGJlaW5nIHNoYXJlZCBiZXR3ZWVuIHJlbmRlcmVycy5cbiAgICAvLyBJbiB0aGF0IGNhc2UsIGlmIHRoZSBzb3VyY2UgaXMgbXV0YXRlZCBiZXR3ZWVuIHRoZSBmaXJzdCBhbmQgc2Vjb25kIHJlbmRlcmVyLFxuICAgIC8vIFRoZSBzZWNvbmQgcmVuZGVyZXIgZG9uJ3Qga25vdyB0aGF0IGl0IG5lZWRzIHRvIHJlc2V0IHRoZSBXSVAgdmVyc2lvbiBkdXJpbmcgdW53aW5kLFxuICAgIC8vIChiZWNhdXNlIHRoZSBob29rIG9ubHkgbWFya3Mgc291cmNlcyBhcyBkaXJ0eSBpZiBpdCdzIHdyaXR0ZW4gdG8gdGhlaXIgV0lQIHZlcnNpb24pLlxuICAgIC8vIFRoYXQgd291bGQgY2F1c2UgdGhpcyB0ZWFyIGNoZWNrIHRvIHRocm93IGFnYWluIGFuZCBldmVudHVhbGx5IGJlIHZpc2libGUgdG8gdGhlIHVzZXIuXG4gICAgLy8gV2UgY2FuIGF2b2lkIHRoaXMgaW5maW5pdGUgbG9vcCBieSBleHBsaWNpdGx5IG1hcmtpbmcgdGhlIHNvdXJjZSBhcyBkaXJ0eS5cbiAgICAvL1xuICAgIC8vIFRoaXMgY2FuIGxlYWQgdG8gdGVhcmluZyBpbiB0aGUgZmlyc3QgcmVuZGVyZXIgd2hlbiBpdCByZXN1bWVzLFxuICAgIC8vIGJ1dCB0aGVyZSdzIG5vdGhpbmcgd2UgY2FuIGRvIGFib3V0IHRoYXQgKHNob3J0IG9mIHRocm93aW5nIGhlcmUgYW5kIHJlZnVzaW5nIHRvIGNvbnRpbnVlIHRoZSByZW5kZXIpLlxuICAgIG1hcmtTb3VyY2VBc0RpcnR5KHNvdXJjZSk7XG5cbiAgICB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIkNhbm5vdCByZWFkIGZyb20gbXV0YWJsZSBzb3VyY2UgZHVyaW5nIHRoZSBjdXJyZW50IHJlbmRlciB3aXRob3V0IHRlYXJpbmcuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHVzZU11dGFibGVTb3VyY2UoaG9vaywgc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKSB7XG4gIHZhciByb290ID0gZ2V0V29ya0luUHJvZ3Jlc3NSb290KCk7XG5cbiAgaWYgKCEocm9vdCAhPT0gbnVsbCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJFeHBlY3RlZCBhIHdvcmstaW4tcHJvZ3Jlc3Mgcm9vdC4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICB9XG4gIH1cblxuICB2YXIgZ2V0VmVyc2lvbiA9IHNvdXJjZS5fZ2V0VmVyc2lvbjtcbiAgdmFyIHZlcnNpb24gPSBnZXRWZXJzaW9uKHNvdXJjZS5fc291cmNlKTtcbiAgdmFyIGRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdFxuXG4gIHZhciBfZGlzcGF0Y2hlciR1c2VTdGF0ZSA9IGRpc3BhdGNoZXIudXNlU3RhdGUoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiByZWFkRnJvbVVuc3ViY3JpYmVkTXV0YWJsZVNvdXJjZShyb290LCBzb3VyY2UsIGdldFNuYXBzaG90KTtcbiAgfSksXG4gICAgICBjdXJyZW50U25hcHNob3QgPSBfZGlzcGF0Y2hlciR1c2VTdGF0ZVswXSxcbiAgICAgIHNldFNuYXBzaG90ID0gX2Rpc3BhdGNoZXIkdXNlU3RhdGVbMV07XG5cbiAgdmFyIHNuYXBzaG90ID0gY3VycmVudFNuYXBzaG90OyAvLyBHcmFiIGEgaGFuZGxlIHRvIHRoZSBzdGF0ZSBob29rIGFzIHdlbGwuXG4gIC8vIFdlIHVzZSBpdCB0byBjbGVhciB0aGUgcGVuZGluZyB1cGRhdGUgcXVldWUgaWYgd2UgaGF2ZSBhIG5ldyBzb3VyY2UuXG5cbiAgdmFyIHN0YXRlSG9vayA9IHdvcmtJblByb2dyZXNzSG9vaztcbiAgdmFyIG1lbW9pemVkU3RhdGUgPSBob29rLm1lbW9pemVkU3RhdGU7XG4gIHZhciByZWZzID0gbWVtb2l6ZWRTdGF0ZS5yZWZzO1xuICB2YXIgcHJldkdldFNuYXBzaG90ID0gcmVmcy5nZXRTbmFwc2hvdDtcbiAgdmFyIHByZXZTb3VyY2UgPSBtZW1vaXplZFN0YXRlLnNvdXJjZTtcbiAgdmFyIHByZXZTdWJzY3JpYmUgPSBtZW1vaXplZFN0YXRlLnN1YnNjcmliZTtcbiAgdmFyIGZpYmVyID0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMTtcbiAgaG9vay5tZW1vaXplZFN0YXRlID0ge1xuICAgIHJlZnM6IHJlZnMsXG4gICAgc291cmNlOiBzb3VyY2UsXG4gICAgc3Vic2NyaWJlOiBzdWJzY3JpYmVcbiAgfTsgLy8gU3luYyB0aGUgdmFsdWVzIG5lZWRlZCBieSBvdXIgc3Vic2NyaXB0aW9uIGhhbmRsZXIgYWZ0ZXIgZWFjaCBjb21taXQuXG5cbiAgZGlzcGF0Y2hlci51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHJlZnMuZ2V0U25hcHNob3QgPSBnZXRTbmFwc2hvdDsgLy8gTm9ybWFsbHkgdGhlIGRpc3BhdGNoIGZ1bmN0aW9uIGZvciBhIHN0YXRlIGhvb2sgbmV2ZXIgY2hhbmdlcyxcbiAgICAvLyBidXQgdGhpcyBob29rIHJlY3JlYXRlcyB0aGUgcXVldWUgaW4gY2VydGFpbiBjYXNlcyAgdG8gYXZvaWQgdXBkYXRlcyBmcm9tIHN0YWxlIHNvdXJjZXMuXG4gICAgLy8gaGFuZGxlQ2hhbmdlKCkgYmVsb3cgbmVlZHMgdG8gcmVmZXJlbmNlIHRoZSBkaXNwYXRjaCBmdW5jdGlvbiB3aXRob3V0IHJlLXN1YnNjcmliaW5nLFxuICAgIC8vIHNvIHdlIHVzZSBhIHJlZiB0byBlbnN1cmUgdGhhdCBpdCBhbHdheXMgaGFzIHRoZSBsYXRlc3QgdmVyc2lvbi5cblxuICAgIHJlZnMuc2V0U25hcHNob3QgPSBzZXRTbmFwc2hvdDsgLy8gQ2hlY2sgZm9yIGEgcG9zc2libGUgY2hhbmdlIGJldHdlZW4gd2hlbiB3ZSBsYXN0IHJlbmRlcmVkIG5vdy5cblxuICAgIHZhciBtYXliZU5ld1ZlcnNpb24gPSBnZXRWZXJzaW9uKHNvdXJjZS5fc291cmNlKTtcblxuICAgIGlmICghb2JqZWN0SXModmVyc2lvbiwgbWF5YmVOZXdWZXJzaW9uKSkge1xuICAgICAgdmFyIG1heWJlTmV3U25hcHNob3QgPSBnZXRTbmFwc2hvdChzb3VyY2UuX3NvdXJjZSk7XG5cbiAgICAgIHtcbiAgICAgICAgaWYgKHR5cGVvZiBtYXliZU5ld1NuYXBzaG90ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgZXJyb3IoJ011dGFibGUgc291cmNlIHNob3VsZCBub3QgcmV0dXJuIGEgZnVuY3Rpb24gYXMgdGhlIHNuYXBzaG90IHZhbHVlLiAnICsgJ0Z1bmN0aW9ucyBtYXkgY2xvc2Ugb3ZlciBtdXRhYmxlIHZhbHVlcyBhbmQgY2F1c2UgdGVhcmluZy4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIW9iamVjdElzKHNuYXBzaG90LCBtYXliZU5ld1NuYXBzaG90KSkge1xuICAgICAgICBzZXRTbmFwc2hvdChtYXliZU5ld1NuYXBzaG90KTtcbiAgICAgICAgdmFyIGxhbmUgPSByZXF1ZXN0VXBkYXRlTGFuZShmaWJlcik7XG4gICAgICAgIG1hcmtSb290TXV0YWJsZVJlYWQocm9vdCwgbGFuZSk7XG4gICAgICB9IC8vIElmIHRoZSBzb3VyY2UgbXV0YXRlZCBiZXR3ZWVuIHJlbmRlciBhbmQgbm93LFxuICAgICAgLy8gdGhlcmUgbWF5IGJlIHN0YXRlIHVwZGF0ZXMgYWxyZWFkeSBzY2hlZHVsZWQgZnJvbSB0aGUgb2xkIHNvdXJjZS5cbiAgICAgIC8vIEVudGFuZ2xlIHRoZSB1cGRhdGVzIHNvIHRoYXQgdGhleSByZW5kZXIgaW4gdGhlIHNhbWUgYmF0Y2guXG5cblxuICAgICAgbWFya1Jvb3RFbnRhbmdsZWQocm9vdCwgcm9vdC5tdXRhYmxlUmVhZExhbmVzKTtcbiAgICB9XG4gIH0sIFtnZXRTbmFwc2hvdCwgc291cmNlLCBzdWJzY3JpYmVdKTsgLy8gSWYgd2UgZ290IGEgbmV3IHNvdXJjZSBvciBzdWJzY3JpYmUgZnVuY3Rpb24sIHJlLXN1YnNjcmliZSBpbiBhIHBhc3NpdmUgZWZmZWN0LlxuXG4gIGRpc3BhdGNoZXIudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaGFuZGxlQ2hhbmdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGxhdGVzdEdldFNuYXBzaG90ID0gcmVmcy5nZXRTbmFwc2hvdDtcbiAgICAgIHZhciBsYXRlc3RTZXRTbmFwc2hvdCA9IHJlZnMuc2V0U25hcHNob3Q7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGxhdGVzdFNldFNuYXBzaG90KGxhdGVzdEdldFNuYXBzaG90KHNvdXJjZS5fc291cmNlKSk7IC8vIFJlY29yZCBhIHBlbmRpbmcgbXV0YWJsZSBzb3VyY2UgdXBkYXRlIHdpdGggdGhlIHNhbWUgZXhwaXJhdGlvbiB0aW1lLlxuXG4gICAgICAgIHZhciBsYW5lID0gcmVxdWVzdFVwZGF0ZUxhbmUoZmliZXIpO1xuICAgICAgICBtYXJrUm9vdE11dGFibGVSZWFkKHJvb3QsIGxhbmUpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gQSBzZWxlY3RvciBtaWdodCB0aHJvdyBhZnRlciBhIHNvdXJjZSBtdXRhdGlvbi5cbiAgICAgICAgLy8gZS5nLiBpdCBtaWdodCB0cnkgdG8gcmVhZCBmcm9tIGEgcGFydCBvZiB0aGUgc3RvcmUgdGhhdCBubyBsb25nZXIgZXhpc3RzLlxuICAgICAgICAvLyBJbiB0aGlzIGNhc2Ugd2Ugc2hvdWxkIHN0aWxsIHNjaGVkdWxlIGFuIHVwZGF0ZSB3aXRoIFJlYWN0LlxuICAgICAgICAvLyBXb3JzdCBjYXNlIHRoZSBzZWxlY3RvciB3aWxsIHRocm93IGFnYWluIGFuZCB0aGVuIGFuIGVycm9yIGJvdW5kYXJ5IHdpbGwgaGFuZGxlIGl0LlxuICAgICAgICBsYXRlc3RTZXRTbmFwc2hvdChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgdW5zdWJzY3JpYmUgPSBzdWJzY3JpYmUoc291cmNlLl9zb3VyY2UsIGhhbmRsZUNoYW5nZSk7XG5cbiAgICB7XG4gICAgICBpZiAodHlwZW9mIHVuc3Vic2NyaWJlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGVycm9yKCdNdXRhYmxlIHNvdXJjZSBzdWJzY3JpYmUgZnVuY3Rpb24gbXVzdCByZXR1cm4gYW4gdW5zdWJzY3JpYmUgZnVuY3Rpb24uJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuc3Vic2NyaWJlO1xuICB9LCBbc291cmNlLCBzdWJzY3JpYmVdKTsgLy8gSWYgYW55IG9mIHRoZSBpbnB1dHMgdG8gdXNlTXV0YWJsZVNvdXJjZSBjaGFuZ2UsIHJlYWRpbmcgaXMgcG90ZW50aWFsbHkgdW5zYWZlLlxuICAvL1xuICAvLyBJZiBlaXRoZXIgdGhlIHNvdXJjZSBvciB0aGUgc3Vic2NyaXB0aW9uIGhhdmUgY2hhbmdlZCB3ZSBjYW4ndCBjYW4ndCB0cnVzdCB0aGUgdXBkYXRlIHF1ZXVlLlxuICAvLyBNYXliZSB0aGUgc291cmNlIGNoYW5nZWQgaW4gYSB3YXkgdGhhdCB0aGUgb2xkIHN1YnNjcmlwdGlvbiBpZ25vcmVkIGJ1dCB0aGUgbmV3IG9uZSBkZXBlbmRzIG9uLlxuICAvL1xuICAvLyBJZiB0aGUgZ2V0U25hcHNob3QgZnVuY3Rpb24gY2hhbmdlZCwgd2UgYWxzbyBzaG91bGRuJ3QgcmVseSBvbiB0aGUgdXBkYXRlIHF1ZXVlLlxuICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlIHVuZGVybHlpbmcgc291cmNlIHdhcyBtdXRhdGVkIGJldHdlZW4gdGhlIHdoZW4gdGhlIGxhc3QgXCJjaGFuZ2VcIiBldmVudCBmaXJlZCxcbiAgLy8gYW5kIHdoZW4gdGhlIGN1cnJlbnQgcmVuZGVyICh3aXRoIHRoZSBuZXcgZ2V0U25hcHNob3QgZnVuY3Rpb24pIGlzIHByb2Nlc3NlZC5cbiAgLy9cbiAgLy8gSW4gYm90aCBjYXNlcywgd2UgbmVlZCB0byB0aHJvdyBhd2F5IHBlbmRpbmcgdXBkYXRlcyAoc2luY2UgdGhleSBhcmUgbm8gbG9uZ2VyIHJlbGV2YW50KVxuICAvLyBhbmQgdHJlYXQgcmVhZGluZyBmcm9tIHRoZSBzb3VyY2UgYXMgd2UgZG8gaW4gdGhlIG1vdW50IGNhc2UuXG5cbiAgaWYgKCFvYmplY3RJcyhwcmV2R2V0U25hcHNob3QsIGdldFNuYXBzaG90KSB8fCAhb2JqZWN0SXMocHJldlNvdXJjZSwgc291cmNlKSB8fCAhb2JqZWN0SXMocHJldlN1YnNjcmliZSwgc3Vic2NyaWJlKSkge1xuICAgIC8vIENyZWF0ZSBhIG5ldyBxdWV1ZSBhbmQgc2V0U3RhdGUgbWV0aG9kLFxuICAgIC8vIFNvIGlmIHRoZXJlIGFyZSBpbnRlcmxlYXZlZCB1cGRhdGVzLCB0aGV5IGdldCBwdXNoZWQgdG8gdGhlIG9sZGVyIHF1ZXVlLlxuICAgIC8vIFdoZW4gdGhpcyBiZWNvbWVzIGN1cnJlbnQsIHRoZSBwcmV2aW91cyBxdWV1ZSBhbmQgZGlzcGF0Y2ggbWV0aG9kIHdpbGwgYmUgZGlzY2FyZGVkLFxuICAgIC8vIGluY2x1ZGluZyBhbnkgaW50ZXJsZWF2aW5nIHVwZGF0ZXMgdGhhdCBvY2N1ci5cbiAgICB2YXIgbmV3UXVldWUgPSB7XG4gICAgICBwZW5kaW5nOiBudWxsLFxuICAgICAgZGlzcGF0Y2g6IG51bGwsXG4gICAgICBsYXN0UmVuZGVyZWRSZWR1Y2VyOiBiYXNpY1N0YXRlUmVkdWNlcixcbiAgICAgIGxhc3RSZW5kZXJlZFN0YXRlOiBzbmFwc2hvdFxuICAgIH07XG4gICAgbmV3UXVldWUuZGlzcGF0Y2ggPSBzZXRTbmFwc2hvdCA9IGRpc3BhdGNoQWN0aW9uLmJpbmQobnVsbCwgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSwgbmV3UXVldWUpO1xuICAgIHN0YXRlSG9vay5xdWV1ZSA9IG5ld1F1ZXVlO1xuICAgIHN0YXRlSG9vay5iYXNlUXVldWUgPSBudWxsO1xuICAgIHNuYXBzaG90ID0gcmVhZEZyb21VbnN1YmNyaWJlZE11dGFibGVTb3VyY2Uocm9vdCwgc291cmNlLCBnZXRTbmFwc2hvdCk7XG4gICAgc3RhdGVIb29rLm1lbW9pemVkU3RhdGUgPSBzdGF0ZUhvb2suYmFzZVN0YXRlID0gc25hcHNob3Q7XG4gIH1cblxuICByZXR1cm4gc25hcHNob3Q7XG59XG5cbmZ1bmN0aW9uIG1vdW50TXV0YWJsZVNvdXJjZShzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpIHtcbiAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICBob29rLm1lbW9pemVkU3RhdGUgPSB7XG4gICAgcmVmczoge1xuICAgICAgZ2V0U25hcHNob3Q6IGdldFNuYXBzaG90LFxuICAgICAgc2V0U25hcHNob3Q6IG51bGxcbiAgICB9LFxuICAgIHNvdXJjZTogc291cmNlLFxuICAgIHN1YnNjcmliZTogc3Vic2NyaWJlXG4gIH07XG4gIHJldHVybiB1c2VNdXRhYmxlU291cmNlKGhvb2ssIHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZU11dGFibGVTb3VyY2Uoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKSB7XG4gIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHJldHVybiB1c2VNdXRhYmxlU291cmNlKGhvb2ssIHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSk7XG59XG5cbmZ1bmN0aW9uIG1vdW50U3RhdGUoaW5pdGlhbFN0YXRlKSB7XG4gIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcblxuICBpZiAodHlwZW9mIGluaXRpYWxTdGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vICRGbG93Rml4TWU6IEZsb3cgZG9lc24ndCBsaWtlIG1peGVkIHR5cGVzXG4gICAgaW5pdGlhbFN0YXRlID0gaW5pdGlhbFN0YXRlKCk7XG4gIH1cblxuICBob29rLm1lbW9pemVkU3RhdGUgPSBob29rLmJhc2VTdGF0ZSA9IGluaXRpYWxTdGF0ZTtcbiAgdmFyIHF1ZXVlID0gaG9vay5xdWV1ZSA9IHtcbiAgICBwZW5kaW5nOiBudWxsLFxuICAgIGRpc3BhdGNoOiBudWxsLFxuICAgIGxhc3RSZW5kZXJlZFJlZHVjZXI6IGJhc2ljU3RhdGVSZWR1Y2VyLFxuICAgIGxhc3RSZW5kZXJlZFN0YXRlOiBpbml0aWFsU3RhdGVcbiAgfTtcbiAgdmFyIGRpc3BhdGNoID0gcXVldWUuZGlzcGF0Y2ggPSBkaXNwYXRjaEFjdGlvbi5iaW5kKG51bGwsIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEsIHF1ZXVlKTtcbiAgcmV0dXJuIFtob29rLm1lbW9pemVkU3RhdGUsIGRpc3BhdGNoXTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlU3RhdGUoaW5pdGlhbFN0YXRlKSB7XG4gIHJldHVybiB1cGRhdGVSZWR1Y2VyKGJhc2ljU3RhdGVSZWR1Y2VyKTtcbn1cblxuZnVuY3Rpb24gcmVyZW5kZXJTdGF0ZShpbml0aWFsU3RhdGUpIHtcbiAgcmV0dXJuIHJlcmVuZGVyUmVkdWNlcihiYXNpY1N0YXRlUmVkdWNlcik7XG59XG5cbmZ1bmN0aW9uIHB1c2hFZmZlY3QodGFnLCBjcmVhdGUsIGRlc3Ryb3ksIGRlcHMpIHtcbiAgdmFyIGVmZmVjdCA9IHtcbiAgICB0YWc6IHRhZyxcbiAgICBjcmVhdGU6IGNyZWF0ZSxcbiAgICBkZXN0cm95OiBkZXN0cm95LFxuICAgIGRlcHM6IGRlcHMsXG4gICAgLy8gQ2lyY3VsYXJcbiAgICBuZXh0OiBudWxsXG4gIH07XG4gIHZhciBjb21wb25lbnRVcGRhdGVRdWV1ZSA9IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEudXBkYXRlUXVldWU7XG5cbiAgaWYgKGNvbXBvbmVudFVwZGF0ZVF1ZXVlID09PSBudWxsKSB7XG4gICAgY29tcG9uZW50VXBkYXRlUXVldWUgPSBjcmVhdGVGdW5jdGlvbkNvbXBvbmVudFVwZGF0ZVF1ZXVlKCk7XG4gICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS51cGRhdGVRdWV1ZSA9IGNvbXBvbmVudFVwZGF0ZVF1ZXVlO1xuICAgIGNvbXBvbmVudFVwZGF0ZVF1ZXVlLmxhc3RFZmZlY3QgPSBlZmZlY3QubmV4dCA9IGVmZmVjdDtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbGFzdEVmZmVjdCA9IGNvbXBvbmVudFVwZGF0ZVF1ZXVlLmxhc3RFZmZlY3Q7XG5cbiAgICBpZiAobGFzdEVmZmVjdCA9PT0gbnVsbCkge1xuICAgICAgY29tcG9uZW50VXBkYXRlUXVldWUubGFzdEVmZmVjdCA9IGVmZmVjdC5uZXh0ID0gZWZmZWN0O1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgZmlyc3RFZmZlY3QgPSBsYXN0RWZmZWN0Lm5leHQ7XG4gICAgICBsYXN0RWZmZWN0Lm5leHQgPSBlZmZlY3Q7XG4gICAgICBlZmZlY3QubmV4dCA9IGZpcnN0RWZmZWN0O1xuICAgICAgY29tcG9uZW50VXBkYXRlUXVldWUubGFzdEVmZmVjdCA9IGVmZmVjdDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZWZmZWN0O1xufVxuXG5mdW5jdGlvbiBtb3VudFJlZihpbml0aWFsVmFsdWUpIHtcbiAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICB2YXIgcmVmID0ge1xuICAgIGN1cnJlbnQ6IGluaXRpYWxWYWx1ZVxuICB9O1xuXG4gIHtcbiAgICBPYmplY3Quc2VhbChyZWYpO1xuICB9XG5cbiAgaG9vay5tZW1vaXplZFN0YXRlID0gcmVmO1xuICByZXR1cm4gcmVmO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVSZWYoaW5pdGlhbFZhbHVlKSB7XG4gIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHJldHVybiBob29rLm1lbW9pemVkU3RhdGU7XG59XG5cbmZ1bmN0aW9uIG1vdW50RWZmZWN0SW1wbChmaWJlckZsYWdzLCBob29rRmxhZ3MsIGNyZWF0ZSwgZGVwcykge1xuICB2YXIgaG9vayA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHZhciBuZXh0RGVwcyA9IGRlcHMgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBkZXBzO1xuICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLmZsYWdzIHw9IGZpYmVyRmxhZ3M7XG4gIGhvb2subWVtb2l6ZWRTdGF0ZSA9IHB1c2hFZmZlY3QoSGFzRWZmZWN0IHwgaG9va0ZsYWdzLCBjcmVhdGUsIHVuZGVmaW5lZCwgbmV4dERlcHMpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVFZmZlY3RJbXBsKGZpYmVyRmxhZ3MsIGhvb2tGbGFncywgY3JlYXRlLCBkZXBzKSB7XG4gIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHZhciBuZXh0RGVwcyA9IGRlcHMgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBkZXBzO1xuICB2YXIgZGVzdHJveSA9IHVuZGVmaW5lZDtcblxuICBpZiAoY3VycmVudEhvb2sgIT09IG51bGwpIHtcbiAgICB2YXIgcHJldkVmZmVjdCA9IGN1cnJlbnRIb29rLm1lbW9pemVkU3RhdGU7XG4gICAgZGVzdHJveSA9IHByZXZFZmZlY3QuZGVzdHJveTtcblxuICAgIGlmIChuZXh0RGVwcyAhPT0gbnVsbCkge1xuICAgICAgdmFyIHByZXZEZXBzID0gcHJldkVmZmVjdC5kZXBzO1xuXG4gICAgICBpZiAoYXJlSG9va0lucHV0c0VxdWFsKG5leHREZXBzLCBwcmV2RGVwcykpIHtcbiAgICAgICAgcHVzaEVmZmVjdChob29rRmxhZ3MsIGNyZWF0ZSwgZGVzdHJveSwgbmV4dERlcHMpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5mbGFncyB8PSBmaWJlckZsYWdzO1xuICBob29rLm1lbW9pemVkU3RhdGUgPSBwdXNoRWZmZWN0KEhhc0VmZmVjdCB8IGhvb2tGbGFncywgY3JlYXRlLCBkZXN0cm95LCBuZXh0RGVwcyk7XG59XG5cbmZ1bmN0aW9uIG1vdW50RWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICB7XG4gICAgLy8gJEZsb3dFeHBlY3RlZEVycm9yIC0gamVzdCBpc24ndCBhIGdsb2JhbCwgYW5kIGlzbid0IHJlY29nbml6ZWQgb3V0c2lkZSBvZiB0ZXN0c1xuICAgIGlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIGplc3QpIHtcbiAgICAgIHdhcm5JZk5vdEN1cnJlbnRseUFjdGluZ0VmZmVjdHNJbkRFVihjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbW91bnRFZmZlY3RJbXBsKFVwZGF0ZSB8IFBhc3NpdmUsIFBhc3NpdmUkMSwgY3JlYXRlLCBkZXBzKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlRWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICB7XG4gICAgLy8gJEZsb3dFeHBlY3RlZEVycm9yIC0gamVzdCBpc24ndCBhIGdsb2JhbCwgYW5kIGlzbid0IHJlY29nbml6ZWQgb3V0c2lkZSBvZiB0ZXN0c1xuICAgIGlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIGplc3QpIHtcbiAgICAgIHdhcm5JZk5vdEN1cnJlbnRseUFjdGluZ0VmZmVjdHNJbkRFVihjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdXBkYXRlRWZmZWN0SW1wbChVcGRhdGUgfCBQYXNzaXZlLCBQYXNzaXZlJDEsIGNyZWF0ZSwgZGVwcyk7XG59XG5cbmZ1bmN0aW9uIG1vdW50TGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICByZXR1cm4gbW91bnRFZmZlY3RJbXBsKFVwZGF0ZSwgTGF5b3V0LCBjcmVhdGUsIGRlcHMpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKSB7XG4gIHJldHVybiB1cGRhdGVFZmZlY3RJbXBsKFVwZGF0ZSwgTGF5b3V0LCBjcmVhdGUsIGRlcHMpO1xufVxuXG5mdW5jdGlvbiBpbXBlcmF0aXZlSGFuZGxlRWZmZWN0KGNyZWF0ZSwgcmVmKSB7XG4gIGlmICh0eXBlb2YgcmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIHJlZkNhbGxiYWNrID0gcmVmO1xuXG4gICAgdmFyIF9pbnN0ID0gY3JlYXRlKCk7XG5cbiAgICByZWZDYWxsYmFjayhfaW5zdCk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJlZkNhbGxiYWNrKG51bGwpO1xuICAgIH07XG4gIH0gZWxzZSBpZiAocmVmICE9PSBudWxsICYmIHJlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdmFyIHJlZk9iamVjdCA9IHJlZjtcblxuICAgIHtcbiAgICAgIGlmICghcmVmT2JqZWN0Lmhhc093blByb3BlcnR5KCdjdXJyZW50JykpIHtcbiAgICAgICAgZXJyb3IoJ0V4cGVjdGVkIHVzZUltcGVyYXRpdmVIYW5kbGUoKSBmaXJzdCBhcmd1bWVudCB0byBlaXRoZXIgYmUgYSAnICsgJ3JlZiBjYWxsYmFjayBvciBSZWFjdC5jcmVhdGVSZWYoKSBvYmplY3QuIEluc3RlYWQgcmVjZWl2ZWQ6ICVzLicsICdhbiBvYmplY3Qgd2l0aCBrZXlzIHsnICsgT2JqZWN0LmtleXMocmVmT2JqZWN0KS5qb2luKCcsICcpICsgJ30nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgX2luc3QyID0gY3JlYXRlKCk7XG5cbiAgICByZWZPYmplY3QuY3VycmVudCA9IF9pbnN0MjtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgcmVmT2JqZWN0LmN1cnJlbnQgPSBudWxsO1xuICAgIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gbW91bnRJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gIHtcbiAgICBpZiAodHlwZW9mIGNyZWF0ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJ0V4cGVjdGVkIHVzZUltcGVyYXRpdmVIYW5kbGUoKSBzZWNvbmQgYXJndW1lbnQgdG8gYmUgYSBmdW5jdGlvbiAnICsgJ3RoYXQgY3JlYXRlcyBhIGhhbmRsZS4gSW5zdGVhZCByZWNlaXZlZDogJXMuJywgY3JlYXRlICE9PSBudWxsID8gdHlwZW9mIGNyZWF0ZSA6ICdudWxsJyk7XG4gICAgfVxuICB9IC8vIFRPRE86IElmIGRlcHMgYXJlIHByb3ZpZGVkLCBzaG91bGQgd2Ugc2tpcCBjb21wYXJpbmcgdGhlIHJlZiBpdHNlbGY/XG5cblxuICB2YXIgZWZmZWN0RGVwcyA9IGRlcHMgIT09IG51bGwgJiYgZGVwcyAhPT0gdW5kZWZpbmVkID8gZGVwcy5jb25jYXQoW3JlZl0pIDogbnVsbDtcbiAgcmV0dXJuIG1vdW50RWZmZWN0SW1wbChVcGRhdGUsIExheW91dCwgaW1wZXJhdGl2ZUhhbmRsZUVmZmVjdC5iaW5kKG51bGwsIGNyZWF0ZSwgcmVmKSwgZWZmZWN0RGVwcyk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAge1xuICAgIGlmICh0eXBlb2YgY3JlYXRlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignRXhwZWN0ZWQgdXNlSW1wZXJhdGl2ZUhhbmRsZSgpIHNlY29uZCBhcmd1bWVudCB0byBiZSBhIGZ1bmN0aW9uICcgKyAndGhhdCBjcmVhdGVzIGEgaGFuZGxlLiBJbnN0ZWFkIHJlY2VpdmVkOiAlcy4nLCBjcmVhdGUgIT09IG51bGwgPyB0eXBlb2YgY3JlYXRlIDogJ251bGwnKTtcbiAgICB9XG4gIH0gLy8gVE9ETzogSWYgZGVwcyBhcmUgcHJvdmlkZWQsIHNob3VsZCB3ZSBza2lwIGNvbXBhcmluZyB0aGUgcmVmIGl0c2VsZj9cblxuXG4gIHZhciBlZmZlY3REZXBzID0gZGVwcyAhPT0gbnVsbCAmJiBkZXBzICE9PSB1bmRlZmluZWQgPyBkZXBzLmNvbmNhdChbcmVmXSkgOiBudWxsO1xuICByZXR1cm4gdXBkYXRlRWZmZWN0SW1wbChVcGRhdGUsIExheW91dCwgaW1wZXJhdGl2ZUhhbmRsZUVmZmVjdC5iaW5kKG51bGwsIGNyZWF0ZSwgcmVmKSwgZWZmZWN0RGVwcyk7XG59XG5cbmZ1bmN0aW9uIG1vdW50RGVidWdWYWx1ZSh2YWx1ZSwgZm9ybWF0dGVyRm4pIHsvLyBUaGlzIGhvb2sgaXMgbm9ybWFsbHkgYSBuby1vcC5cbiAgLy8gVGhlIHJlYWN0LWRlYnVnLWhvb2tzIHBhY2thZ2UgaW5qZWN0cyBpdHMgb3duIGltcGxlbWVudGF0aW9uXG4gIC8vIHNvIHRoYXQgZS5nLiBEZXZUb29scyBjYW4gZGlzcGxheSBjdXN0b20gaG9vayB2YWx1ZXMuXG59XG5cbnZhciB1cGRhdGVEZWJ1Z1ZhbHVlID0gbW91bnREZWJ1Z1ZhbHVlO1xuXG5mdW5jdGlvbiBtb3VudENhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKSB7XG4gIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgdmFyIG5leHREZXBzID0gZGVwcyA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGRlcHM7XG4gIGhvb2subWVtb2l6ZWRTdGF0ZSA9IFtjYWxsYmFjaywgbmV4dERlcHNdO1xuICByZXR1cm4gY2FsbGJhY2s7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUNhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKSB7XG4gIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHZhciBuZXh0RGVwcyA9IGRlcHMgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBkZXBzO1xuICB2YXIgcHJldlN0YXRlID0gaG9vay5tZW1vaXplZFN0YXRlO1xuXG4gIGlmIChwcmV2U3RhdGUgIT09IG51bGwpIHtcbiAgICBpZiAobmV4dERlcHMgIT09IG51bGwpIHtcbiAgICAgIHZhciBwcmV2RGVwcyA9IHByZXZTdGF0ZVsxXTtcblxuICAgICAgaWYgKGFyZUhvb2tJbnB1dHNFcXVhbChuZXh0RGVwcywgcHJldkRlcHMpKSB7XG4gICAgICAgIHJldHVybiBwcmV2U3RhdGVbMF07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaG9vay5tZW1vaXplZFN0YXRlID0gW2NhbGxiYWNrLCBuZXh0RGVwc107XG4gIHJldHVybiBjYWxsYmFjaztcbn1cblxuZnVuY3Rpb24gbW91bnRNZW1vKG5leHRDcmVhdGUsIGRlcHMpIHtcbiAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICB2YXIgbmV4dERlcHMgPSBkZXBzID09PSB1bmRlZmluZWQgPyBudWxsIDogZGVwcztcbiAgdmFyIG5leHRWYWx1ZSA9IG5leHRDcmVhdGUoKTtcbiAgaG9vay5tZW1vaXplZFN0YXRlID0gW25leHRWYWx1ZSwgbmV4dERlcHNdO1xuICByZXR1cm4gbmV4dFZhbHVlO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVNZW1vKG5leHRDcmVhdGUsIGRlcHMpIHtcbiAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgdmFyIG5leHREZXBzID0gZGVwcyA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGRlcHM7XG4gIHZhciBwcmV2U3RhdGUgPSBob29rLm1lbW9pemVkU3RhdGU7XG5cbiAgaWYgKHByZXZTdGF0ZSAhPT0gbnVsbCkge1xuICAgIC8vIEFzc3VtZSB0aGVzZSBhcmUgZGVmaW5lZC4gSWYgdGhleSdyZSBub3QsIGFyZUhvb2tJbnB1dHNFcXVhbCB3aWxsIHdhcm4uXG4gICAgaWYgKG5leHREZXBzICE9PSBudWxsKSB7XG4gICAgICB2YXIgcHJldkRlcHMgPSBwcmV2U3RhdGVbMV07XG5cbiAgICAgIGlmIChhcmVIb29rSW5wdXRzRXF1YWwobmV4dERlcHMsIHByZXZEZXBzKSkge1xuICAgICAgICByZXR1cm4gcHJldlN0YXRlWzBdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBuZXh0VmFsdWUgPSBuZXh0Q3JlYXRlKCk7XG4gIGhvb2subWVtb2l6ZWRTdGF0ZSA9IFtuZXh0VmFsdWUsIG5leHREZXBzXTtcbiAgcmV0dXJuIG5leHRWYWx1ZTtcbn1cblxuZnVuY3Rpb24gbW91bnREZWZlcnJlZFZhbHVlKHZhbHVlKSB7XG4gIHZhciBfbW91bnRTdGF0ZSA9IG1vdW50U3RhdGUodmFsdWUpLFxuICAgICAgcHJldlZhbHVlID0gX21vdW50U3RhdGVbMF0sXG4gICAgICBzZXRWYWx1ZSA9IF9tb3VudFN0YXRlWzFdO1xuXG4gIG1vdW50RWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcHJldlRyYW5zaXRpb24gPSBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxLnRyYW5zaXRpb247XG4gICAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMS50cmFuc2l0aW9uID0gMTtcblxuICAgIHRyeSB7XG4gICAgICBzZXRWYWx1ZSh2YWx1ZSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEudHJhbnNpdGlvbiA9IHByZXZUcmFuc2l0aW9uO1xuICAgIH1cbiAgfSwgW3ZhbHVlXSk7XG4gIHJldHVybiBwcmV2VmFsdWU7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZURlZmVycmVkVmFsdWUodmFsdWUpIHtcbiAgdmFyIF91cGRhdGVTdGF0ZSA9IHVwZGF0ZVN0YXRlKCksXG4gICAgICBwcmV2VmFsdWUgPSBfdXBkYXRlU3RhdGVbMF0sXG4gICAgICBzZXRWYWx1ZSA9IF91cGRhdGVTdGF0ZVsxXTtcblxuICB1cGRhdGVFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHZhciBwcmV2VHJhbnNpdGlvbiA9IFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEudHJhbnNpdGlvbjtcbiAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxLnRyYW5zaXRpb24gPSAxO1xuXG4gICAgdHJ5IHtcbiAgICAgIHNldFZhbHVlKHZhbHVlKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMS50cmFuc2l0aW9uID0gcHJldlRyYW5zaXRpb247XG4gICAgfVxuICB9LCBbdmFsdWVdKTtcbiAgcmV0dXJuIHByZXZWYWx1ZTtcbn1cblxuZnVuY3Rpb24gcmVyZW5kZXJEZWZlcnJlZFZhbHVlKHZhbHVlKSB7XG4gIHZhciBfcmVyZW5kZXJTdGF0ZSA9IHJlcmVuZGVyU3RhdGUoKSxcbiAgICAgIHByZXZWYWx1ZSA9IF9yZXJlbmRlclN0YXRlWzBdLFxuICAgICAgc2V0VmFsdWUgPSBfcmVyZW5kZXJTdGF0ZVsxXTtcblxuICB1cGRhdGVFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHZhciBwcmV2VHJhbnNpdGlvbiA9IFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEudHJhbnNpdGlvbjtcbiAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxLnRyYW5zaXRpb24gPSAxO1xuXG4gICAgdHJ5IHtcbiAgICAgIHNldFZhbHVlKHZhbHVlKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMS50cmFuc2l0aW9uID0gcHJldlRyYW5zaXRpb247XG4gICAgfVxuICB9LCBbdmFsdWVdKTtcbiAgcmV0dXJuIHByZXZWYWx1ZTtcbn1cblxuZnVuY3Rpb24gc3RhcnRUcmFuc2l0aW9uKHNldFBlbmRpbmcsIGNhbGxiYWNrKSB7XG4gIHZhciBwcmlvcml0eUxldmVsID0gZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwoKTtcblxuICB7XG4gICAgcnVuV2l0aFByaW9yaXR5JDEocHJpb3JpdHlMZXZlbCA8IFVzZXJCbG9ja2luZ1ByaW9yaXR5JDIgPyBVc2VyQmxvY2tpbmdQcmlvcml0eSQyIDogcHJpb3JpdHlMZXZlbCwgZnVuY3Rpb24gKCkge1xuICAgICAgc2V0UGVuZGluZyh0cnVlKTtcbiAgICB9KTtcbiAgICBydW5XaXRoUHJpb3JpdHkkMShwcmlvcml0eUxldmVsID4gTm9ybWFsUHJpb3JpdHkkMSA/IE5vcm1hbFByaW9yaXR5JDEgOiBwcmlvcml0eUxldmVsLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgcHJldlRyYW5zaXRpb24gPSBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxLnRyYW5zaXRpb247XG4gICAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxLnRyYW5zaXRpb24gPSAxO1xuXG4gICAgICB0cnkge1xuICAgICAgICBzZXRQZW5kaW5nKGZhbHNlKTtcbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEudHJhbnNpdGlvbiA9IHByZXZUcmFuc2l0aW9uO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1vdW50VHJhbnNpdGlvbigpIHtcbiAgdmFyIF9tb3VudFN0YXRlMiA9IG1vdW50U3RhdGUoZmFsc2UpLFxuICAgICAgaXNQZW5kaW5nID0gX21vdW50U3RhdGUyWzBdLFxuICAgICAgc2V0UGVuZGluZyA9IF9tb3VudFN0YXRlMlsxXTsgLy8gVGhlIGBzdGFydGAgbWV0aG9kIGNhbiBiZSBzdG9yZWQgb24gYSByZWYsIHNpbmNlIGBzZXRQZW5kaW5nYFxuICAvLyBuZXZlciBjaGFuZ2VzLlxuXG5cbiAgdmFyIHN0YXJ0ID0gc3RhcnRUcmFuc2l0aW9uLmJpbmQobnVsbCwgc2V0UGVuZGluZyk7XG4gIG1vdW50UmVmKHN0YXJ0KTtcbiAgcmV0dXJuIFtzdGFydCwgaXNQZW5kaW5nXTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlVHJhbnNpdGlvbigpIHtcbiAgdmFyIF91cGRhdGVTdGF0ZTIgPSB1cGRhdGVTdGF0ZSgpLFxuICAgICAgaXNQZW5kaW5nID0gX3VwZGF0ZVN0YXRlMlswXTtcblxuICB2YXIgc3RhcnRSZWYgPSB1cGRhdGVSZWYoKTtcbiAgdmFyIHN0YXJ0ID0gc3RhcnRSZWYuY3VycmVudDtcbiAgcmV0dXJuIFtzdGFydCwgaXNQZW5kaW5nXTtcbn1cblxuZnVuY3Rpb24gcmVyZW5kZXJUcmFuc2l0aW9uKCkge1xuICB2YXIgX3JlcmVuZGVyU3RhdGUyID0gcmVyZW5kZXJTdGF0ZSgpLFxuICAgICAgaXNQZW5kaW5nID0gX3JlcmVuZGVyU3RhdGUyWzBdO1xuXG4gIHZhciBzdGFydFJlZiA9IHVwZGF0ZVJlZigpO1xuICB2YXIgc3RhcnQgPSBzdGFydFJlZi5jdXJyZW50O1xuICByZXR1cm4gW3N0YXJ0LCBpc1BlbmRpbmddO1xufVxuXG52YXIgaXNVcGRhdGluZ09wYXF1ZVZhbHVlSW5SZW5kZXJQaGFzZSA9IGZhbHNlO1xuZnVuY3Rpb24gZ2V0SXNVcGRhdGluZ09wYXF1ZVZhbHVlSW5SZW5kZXJQaGFzZUluREVWKCkge1xuICB7XG4gICAgcmV0dXJuIGlzVXBkYXRpbmdPcGFxdWVWYWx1ZUluUmVuZGVyUGhhc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gd2Fybk9uT3BhcXVlSWRlbnRpZmllckFjY2Vzc0luREVWKGZpYmVyKSB7XG4gIHtcbiAgICAvLyBUT0RPOiBTaG91bGQgd2FybiBpbiBlZmZlY3RzIGFuZCBjYWxsYmFja3MsIHRvb1xuICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnVW5rbm93bic7XG5cbiAgICBpZiAoZ2V0SXNSZW5kZXJpbmcoKSAmJiAhZGlkV2FybkFib3V0VXNlT3BhcXVlSWRlbnRpZmllcltuYW1lXSkge1xuICAgICAgZXJyb3IoJ1RoZSBvYmplY3QgcGFzc2VkIGJhY2sgZnJvbSB1c2VPcGFxdWVJZGVudGlmaWVyIGlzIG1lYW50IHRvIGJlICcgKyAncGFzc2VkIHRocm91Z2ggdG8gYXR0cmlidXRlcyBvbmx5LiBEbyBub3QgcmVhZCB0aGUgJyArICd2YWx1ZSBkaXJlY3RseS4nKTtcblxuICAgICAgZGlkV2FybkFib3V0VXNlT3BhcXVlSWRlbnRpZmllcltuYW1lXSA9IHRydWU7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG1vdW50T3BhcXVlSWRlbnRpZmllcigpIHtcbiAgdmFyIG1ha2VJZCA9ICBtYWtlQ2xpZW50SWRJbkRFVi5iaW5kKG51bGwsIHdhcm5Pbk9wYXF1ZUlkZW50aWZpZXJBY2Nlc3NJbkRFVi5iaW5kKG51bGwsIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEpKSA7XG5cbiAgaWYgKGdldElzSHlkcmF0aW5nKCkpIHtcbiAgICB2YXIgZGlkVXBncmFkZSA9IGZhbHNlO1xuICAgIHZhciBmaWJlciA9IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDE7XG5cbiAgICB2YXIgcmVhZFZhbHVlID0gZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKCFkaWRVcGdyYWRlKSB7XG4gICAgICAgIC8vIE9ubHkgdXBncmFkZSBvbmNlLiBUaGlzIHdvcmtzIGV2ZW4gaW5zaWRlIHRoZSByZW5kZXIgcGhhc2UgYmVjYXVzZVxuICAgICAgICAvLyB0aGUgdXBkYXRlIGlzIGFkZGVkIHRvIGEgc2hhcmVkIHF1ZXVlLCB3aGljaCBvdXRsYXN0cyB0aGVcbiAgICAgICAgLy8gaW4tcHJvZ3Jlc3MgcmVuZGVyLlxuICAgICAgICBkaWRVcGdyYWRlID0gdHJ1ZTtcblxuICAgICAgICB7XG4gICAgICAgICAgaXNVcGRhdGluZ09wYXF1ZVZhbHVlSW5SZW5kZXJQaGFzZSA9IHRydWU7XG4gICAgICAgICAgc2V0SWQobWFrZUlkKCkpO1xuICAgICAgICAgIGlzVXBkYXRpbmdPcGFxdWVWYWx1ZUluUmVuZGVyUGhhc2UgPSBmYWxzZTtcbiAgICAgICAgICB3YXJuT25PcGFxdWVJZGVudGlmaWVyQWNjZXNzSW5ERVYoZmliZXIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCBcIlRoZSBvYmplY3QgcGFzc2VkIGJhY2sgZnJvbSB1c2VPcGFxdWVJZGVudGlmaWVyIGlzIG1lYW50IHRvIGJlIHBhc3NlZCB0aHJvdWdoIHRvIGF0dHJpYnV0ZXMgb25seS4gRG8gbm90IHJlYWQgdGhlIHZhbHVlIGRpcmVjdGx5LlwiICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIGlkID0gbWFrZU9wYXF1ZUh5ZHJhdGluZ09iamVjdChyZWFkVmFsdWUpO1xuICAgIHZhciBzZXRJZCA9IG1vdW50U3RhdGUoaWQpWzFdO1xuXG4gICAgaWYgKChjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLm1vZGUgJiBCbG9ja2luZ01vZGUpID09PSBOb01vZGUpIHtcbiAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEuZmxhZ3MgfD0gVXBkYXRlIHwgUGFzc2l2ZTtcbiAgICAgIHB1c2hFZmZlY3QoSGFzRWZmZWN0IHwgUGFzc2l2ZSQxLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNldElkKG1ha2VJZCgpKTtcbiAgICAgIH0sIHVuZGVmaW5lZCwgbnVsbCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGlkO1xuICB9IGVsc2Uge1xuICAgIHZhciBfaWQgPSBtYWtlSWQoKTtcblxuICAgIG1vdW50U3RhdGUoX2lkKTtcbiAgICByZXR1cm4gX2lkO1xuICB9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZU9wYXF1ZUlkZW50aWZpZXIoKSB7XG4gIHZhciBpZCA9IHVwZGF0ZVN0YXRlKClbMF07XG4gIHJldHVybiBpZDtcbn1cblxuZnVuY3Rpb24gcmVyZW5kZXJPcGFxdWVJZGVudGlmaWVyKCkge1xuICB2YXIgaWQgPSByZXJlbmRlclN0YXRlKClbMF07XG4gIHJldHVybiBpZDtcbn1cblxuZnVuY3Rpb24gZGlzcGF0Y2hBY3Rpb24oZmliZXIsIHF1ZXVlLCBhY3Rpb24pIHtcbiAge1xuICAgIGlmICh0eXBlb2YgYXJndW1lbnRzWzNdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcihcIlN0YXRlIHVwZGF0ZXMgZnJvbSB0aGUgdXNlU3RhdGUoKSBhbmQgdXNlUmVkdWNlcigpIEhvb2tzIGRvbid0IHN1cHBvcnQgdGhlIFwiICsgJ3NlY29uZCBjYWxsYmFjayBhcmd1bWVudC4gVG8gZXhlY3V0ZSBhIHNpZGUgZWZmZWN0IGFmdGVyICcgKyAncmVuZGVyaW5nLCBkZWNsYXJlIGl0IGluIHRoZSBjb21wb25lbnQgYm9keSB3aXRoIHVzZUVmZmVjdCgpLicpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBldmVudFRpbWUgPSByZXF1ZXN0RXZlbnRUaW1lKCk7XG4gIHZhciBsYW5lID0gcmVxdWVzdFVwZGF0ZUxhbmUoZmliZXIpO1xuICB2YXIgdXBkYXRlID0ge1xuICAgIGxhbmU6IGxhbmUsXG4gICAgYWN0aW9uOiBhY3Rpb24sXG4gICAgZWFnZXJSZWR1Y2VyOiBudWxsLFxuICAgIGVhZ2VyU3RhdGU6IG51bGwsXG4gICAgbmV4dDogbnVsbFxuICB9OyAvLyBBcHBlbmQgdGhlIHVwZGF0ZSB0byB0aGUgZW5kIG9mIHRoZSBsaXN0LlxuXG4gIHZhciBwZW5kaW5nID0gcXVldWUucGVuZGluZztcblxuICBpZiAocGVuZGluZyA9PT0gbnVsbCkge1xuICAgIC8vIFRoaXMgaXMgdGhlIGZpcnN0IHVwZGF0ZS4gQ3JlYXRlIGEgY2lyY3VsYXIgbGlzdC5cbiAgICB1cGRhdGUubmV4dCA9IHVwZGF0ZTtcbiAgfSBlbHNlIHtcbiAgICB1cGRhdGUubmV4dCA9IHBlbmRpbmcubmV4dDtcbiAgICBwZW5kaW5nLm5leHQgPSB1cGRhdGU7XG4gIH1cblxuICBxdWV1ZS5wZW5kaW5nID0gdXBkYXRlO1xuICB2YXIgYWx0ZXJuYXRlID0gZmliZXIuYWx0ZXJuYXRlO1xuXG4gIGlmIChmaWJlciA9PT0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSB8fCBhbHRlcm5hdGUgIT09IG51bGwgJiYgYWx0ZXJuYXRlID09PSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxKSB7XG4gICAgLy8gVGhpcyBpcyBhIHJlbmRlciBwaGFzZSB1cGRhdGUuIFN0YXNoIGl0IGluIGEgbGF6aWx5LWNyZWF0ZWQgbWFwIG9mXG4gICAgLy8gcXVldWUgLT4gbGlua2VkIGxpc3Qgb2YgdXBkYXRlcy4gQWZ0ZXIgdGhpcyByZW5kZXIgcGFzcywgd2UnbGwgcmVzdGFydFxuICAgIC8vIGFuZCBhcHBseSB0aGUgc3Rhc2hlZCB1cGRhdGVzIG9uIHRvcCBvZiB0aGUgd29yay1pbi1wcm9ncmVzcyBob29rLlxuICAgIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGVEdXJpbmdUaGlzUGFzcyA9IGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGUgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIGlmIChmaWJlci5sYW5lcyA9PT0gTm9MYW5lcyAmJiAoYWx0ZXJuYXRlID09PSBudWxsIHx8IGFsdGVybmF0ZS5sYW5lcyA9PT0gTm9MYW5lcykpIHtcbiAgICAgIC8vIFRoZSBxdWV1ZSBpcyBjdXJyZW50bHkgZW1wdHksIHdoaWNoIG1lYW5zIHdlIGNhbiBlYWdlcmx5IGNvbXB1dGUgdGhlXG4gICAgICAvLyBuZXh0IHN0YXRlIGJlZm9yZSBlbnRlcmluZyB0aGUgcmVuZGVyIHBoYXNlLiBJZiB0aGUgbmV3IHN0YXRlIGlzIHRoZVxuICAgICAgLy8gc2FtZSBhcyB0aGUgY3VycmVudCBzdGF0ZSwgd2UgbWF5IGJlIGFibGUgdG8gYmFpbCBvdXQgZW50aXJlbHkuXG4gICAgICB2YXIgbGFzdFJlbmRlcmVkUmVkdWNlciA9IHF1ZXVlLmxhc3RSZW5kZXJlZFJlZHVjZXI7XG5cbiAgICAgIGlmIChsYXN0UmVuZGVyZWRSZWR1Y2VyICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBwcmV2RGlzcGF0Y2hlcjtcblxuICAgICAgICB7XG4gICAgICAgICAgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB2YXIgY3VycmVudFN0YXRlID0gcXVldWUubGFzdFJlbmRlcmVkU3RhdGU7XG4gICAgICAgICAgdmFyIGVhZ2VyU3RhdGUgPSBsYXN0UmVuZGVyZWRSZWR1Y2VyKGN1cnJlbnRTdGF0ZSwgYWN0aW9uKTsgLy8gU3Rhc2ggdGhlIGVhZ2VybHkgY29tcHV0ZWQgc3RhdGUsIGFuZCB0aGUgcmVkdWNlciB1c2VkIHRvIGNvbXB1dGVcbiAgICAgICAgICAvLyBpdCwgb24gdGhlIHVwZGF0ZSBvYmplY3QuIElmIHRoZSByZWR1Y2VyIGhhc24ndCBjaGFuZ2VkIGJ5IHRoZVxuICAgICAgICAgIC8vIHRpbWUgd2UgZW50ZXIgdGhlIHJlbmRlciBwaGFzZSwgdGhlbiB0aGUgZWFnZXIgc3RhdGUgY2FuIGJlIHVzZWRcbiAgICAgICAgICAvLyB3aXRob3V0IGNhbGxpbmcgdGhlIHJlZHVjZXIgYWdhaW4uXG5cbiAgICAgICAgICB1cGRhdGUuZWFnZXJSZWR1Y2VyID0gbGFzdFJlbmRlcmVkUmVkdWNlcjtcbiAgICAgICAgICB1cGRhdGUuZWFnZXJTdGF0ZSA9IGVhZ2VyU3RhdGU7XG5cbiAgICAgICAgICBpZiAob2JqZWN0SXMoZWFnZXJTdGF0ZSwgY3VycmVudFN0YXRlKSkge1xuICAgICAgICAgICAgLy8gRmFzdCBwYXRoLiBXZSBjYW4gYmFpbCBvdXQgd2l0aG91dCBzY2hlZHVsaW5nIFJlYWN0IHRvIHJlLXJlbmRlci5cbiAgICAgICAgICAgIC8vIEl0J3Mgc3RpbGwgcG9zc2libGUgdGhhdCB3ZSdsbCBuZWVkIHRvIHJlYmFzZSB0aGlzIHVwZGF0ZSBsYXRlcixcbiAgICAgICAgICAgIC8vIGlmIHRoZSBjb21wb25lbnQgcmUtcmVuZGVycyBmb3IgYSBkaWZmZXJlbnQgcmVhc29uIGFuZCBieSB0aGF0XG4gICAgICAgICAgICAvLyB0aW1lIHRoZSByZWR1Y2VyIGhhcyBjaGFuZ2VkLlxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsvLyBTdXBwcmVzcyB0aGUgZXJyb3IuIEl0IHdpbGwgdGhyb3cgYWdhaW4gaW4gdGhlIHJlbmRlciBwaGFzZS5cbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHtcbiAgICAgIC8vICRGbG93RXhwZWN0ZWRFcnJvciAtIGplc3QgaXNuJ3QgYSBnbG9iYWwsIGFuZCBpc24ndCByZWNvZ25pemVkIG91dHNpZGUgb2YgdGVzdHNcbiAgICAgIGlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIGplc3QpIHtcbiAgICAgICAgd2FybklmTm90U2NvcGVkV2l0aE1hdGNoaW5nQWN0KGZpYmVyKTtcbiAgICAgICAgd2FybklmTm90Q3VycmVudGx5QWN0aW5nVXBkYXRlc0luRGV2KGZpYmVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIGxhbmUsIGV2ZW50VGltZSk7XG4gIH1cbn1cblxudmFyIENvbnRleHRPbmx5RGlzcGF0Y2hlciA9IHtcbiAgcmVhZENvbnRleHQ6IHJlYWRDb250ZXh0LFxuICB1c2VDYWxsYmFjazogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VDb250ZXh0OiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZUVmZmVjdDogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VJbXBlcmF0aXZlSGFuZGxlOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZUxheW91dEVmZmVjdDogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VNZW1vOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZVJlZHVjZXI6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlUmVmOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZVN0YXRlOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZURlYnVnVmFsdWU6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlRGVmZXJyZWRWYWx1ZTogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VUcmFuc2l0aW9uOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZU11dGFibGVTb3VyY2U6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlT3BhcXVlSWRlbnRpZmllcjogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1bnN0YWJsZV9pc05ld1JlY29uY2lsZXI6IGVuYWJsZU5ld1JlY29uY2lsZXJcbn07XG52YXIgSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWID0gbnVsbDtcbnZhciBIb29rc0Rpc3BhdGNoZXJPbk1vdW50V2l0aEhvb2tUeXBlc0luREVWID0gbnVsbDtcbnZhciBIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWID0gbnVsbDtcbnZhciBIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVYgPSBudWxsO1xudmFyIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVYgPSBudWxsO1xudmFyIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWID0gbnVsbDtcbnZhciBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWID0gbnVsbDtcblxue1xuICB2YXIgd2FybkludmFsaWRDb250ZXh0QWNjZXNzID0gZnVuY3Rpb24gKCkge1xuICAgIGVycm9yKCdDb250ZXh0IGNhbiBvbmx5IGJlIHJlYWQgd2hpbGUgUmVhY3QgaXMgcmVuZGVyaW5nLiAnICsgJ0luIGNsYXNzZXMsIHlvdSBjYW4gcmVhZCBpdCBpbiB0aGUgcmVuZGVyIG1ldGhvZCBvciBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMuICcgKyAnSW4gZnVuY3Rpb24gY29tcG9uZW50cywgeW91IGNhbiByZWFkIGl0IGRpcmVjdGx5IGluIHRoZSBmdW5jdGlvbiBib2R5LCBidXQgbm90ICcgKyAnaW5zaWRlIEhvb2tzIGxpa2UgdXNlUmVkdWNlcigpIG9yIHVzZU1lbW8oKS4nKTtcbiAgfTtcblxuICB2YXIgd2FybkludmFsaWRIb29rQWNjZXNzID0gZnVuY3Rpb24gKCkge1xuICAgIGVycm9yKCdEbyBub3QgY2FsbCBIb29rcyBpbnNpZGUgdXNlRWZmZWN0KC4uLiksIHVzZU1lbW8oLi4uKSwgb3Igb3RoZXIgYnVpbHQtaW4gSG9va3MuICcgKyAnWW91IGNhbiBvbmx5IGNhbGwgSG9va3MgYXQgdGhlIHRvcCBsZXZlbCBvZiB5b3VyIFJlYWN0IGZ1bmN0aW9uLiAnICsgJ0ZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvcnVsZXMtb2YtaG9va3MnKTtcbiAgfTtcblxuICBIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVYgPSB7XG4gICAgcmVhZENvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpO1xuICAgIH0sXG4gICAgdXNlQ2FsbGJhY2s6IGZ1bmN0aW9uIChjYWxsYmFjaywgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ2FsbGJhY2snO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIGNoZWNrRGVwc0FyZUFycmF5RGV2KGRlcHMpO1xuICAgICAgcmV0dXJuIG1vdW50Q2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ29udGV4dCc7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUVmZmVjdCc7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgY2hlY2tEZXBzQXJlQXJyYXlEZXYoZGVwcyk7XG4gICAgICByZXR1cm4gbW91bnRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGU6IGZ1bmN0aW9uIChyZWYsIGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlSW1wZXJhdGl2ZUhhbmRsZSc7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgY2hlY2tEZXBzQXJlQXJyYXlEZXYoZGVwcyk7XG4gICAgICByZXR1cm4gbW91bnRJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUxheW91dEVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTGF5b3V0RWZmZWN0JztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICBjaGVja0RlcHNBcmVBcnJheURldihkZXBzKTtcbiAgICAgIHJldHVybiBtb3VudExheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTWVtbzogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTWVtbyc7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgY2hlY2tEZXBzQXJlQXJyYXlEZXYoZGVwcyk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG1vdW50TWVtbyhjcmVhdGUsIGRlcHMpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZHVjZXI6IGZ1bmN0aW9uIChyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWR1Y2VyJztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG1vdW50UmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWY6IGZ1bmN0aW9uIChpbml0aWFsVmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZic7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50UmVmKGluaXRpYWxWYWx1ZSk7XG4gICAgfSxcbiAgICB1c2VTdGF0ZTogZnVuY3Rpb24gKGluaXRpYWxTdGF0ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlU3RhdGUnO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbW91bnRTdGF0ZShpbml0aWFsU3RhdGUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZURlYnVnVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgZm9ybWF0dGVyRm4pIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlYnVnVmFsdWUnO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudERlYnVnVmFsdWUoKTtcbiAgICB9LFxuICAgIHVzZURlZmVycmVkVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVmZXJyZWRWYWx1ZSc7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50RGVmZXJyZWRWYWx1ZSh2YWx1ZSk7XG4gICAgfSxcbiAgICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VUcmFuc2l0aW9uJztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRUcmFuc2l0aW9uKCk7XG4gICAgfSxcbiAgICB1c2VNdXRhYmxlU291cmNlOiBmdW5jdGlvbiAoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNdXRhYmxlU291cmNlJztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRNdXRhYmxlU291cmNlKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSk7XG4gICAgfSxcbiAgICB1c2VPcGFxdWVJZGVudGlmaWVyOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VPcGFxdWVJZGVudGlmaWVyJztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRPcGFxdWVJZGVudGlmaWVyKCk7XG4gICAgfSxcbiAgICB1bnN0YWJsZV9pc05ld1JlY29uY2lsZXI6IGVuYWJsZU5ld1JlY29uY2lsZXJcbiAgfTtcbiAgSG9va3NEaXNwYXRjaGVyT25Nb3VudFdpdGhIb29rVHlwZXNJbkRFViA9IHtcbiAgICByZWFkQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDYWxsYmFjayc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudENhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUNvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNvbnRleHQnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKTtcbiAgICB9LFxuICAgIHVzZUVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRWZmZWN0JztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VJbXBlcmF0aXZlSGFuZGxlOiBmdW5jdGlvbiAocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUltcGVyYXRpdmVIYW5kbGUnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUxheW91dEVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTGF5b3V0RWZmZWN0JztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50TGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VNZW1vOiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNZW1vJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBtb3VudE1lbW8oY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWR1Y2VyOiBmdW5jdGlvbiAocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVkdWNlcic7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbW91bnRSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZjogZnVuY3Rpb24gKGluaXRpYWxWYWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVmJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50UmVmKGluaXRpYWxWYWx1ZSk7XG4gICAgfSxcbiAgICB1c2VTdGF0ZTogZnVuY3Rpb24gKGluaXRpYWxTdGF0ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlU3RhdGUnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG1vdW50U3RhdGUoaW5pdGlhbFN0YXRlKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VEZWJ1Z1ZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGZvcm1hdHRlckZuKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWJ1Z1ZhbHVlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50RGVidWdWYWx1ZSgpO1xuICAgIH0sXG4gICAgdXNlRGVmZXJyZWRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWZlcnJlZFZhbHVlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50RGVmZXJyZWRWYWx1ZSh2YWx1ZSk7XG4gICAgfSxcbiAgICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VUcmFuc2l0aW9uJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50VHJhbnNpdGlvbigpO1xuICAgIH0sXG4gICAgdXNlTXV0YWJsZVNvdXJjZTogZnVuY3Rpb24gKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTXV0YWJsZVNvdXJjZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudE11dGFibGVTb3VyY2Uoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKTtcbiAgICB9LFxuICAgIHVzZU9wYXF1ZUlkZW50aWZpZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU9wYXF1ZUlkZW50aWZpZXInO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRPcGFxdWVJZGVudGlmaWVyKCk7XG4gICAgfSxcbiAgICB1bnN0YWJsZV9pc05ld1JlY29uY2lsZXI6IGVuYWJsZU5ld1JlY29uY2lsZXJcbiAgfTtcbiAgSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFViA9IHtcbiAgICByZWFkQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDYWxsYmFjayc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDb250ZXh0JztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUVmZmVjdCc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGU6IGZ1bmN0aW9uIChyZWYsIGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlSW1wZXJhdGl2ZUhhbmRsZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUxheW91dEVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTGF5b3V0RWZmZWN0JztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUxheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTWVtbzogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTWVtbyc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZU1lbW8oY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWR1Y2VyOiBmdW5jdGlvbiAocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVkdWNlcic7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZVJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVmOiBmdW5jdGlvbiAoaW5pdGlhbFZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWYnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlUmVmKCk7XG4gICAgfSxcbiAgICB1c2VTdGF0ZTogZnVuY3Rpb24gKGluaXRpYWxTdGF0ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlU3RhdGUnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB1cGRhdGVTdGF0ZShpbml0aWFsU3RhdGUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZURlYnVnVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgZm9ybWF0dGVyRm4pIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlYnVnVmFsdWUnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlRGVidWdWYWx1ZSgpO1xuICAgIH0sXG4gICAgdXNlRGVmZXJyZWRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWZlcnJlZFZhbHVlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZURlZmVycmVkVmFsdWUodmFsdWUpO1xuICAgIH0sXG4gICAgdXNlVHJhbnNpdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlVHJhbnNpdGlvbic7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVUcmFuc2l0aW9uKCk7XG4gICAgfSxcbiAgICB1c2VNdXRhYmxlU291cmNlOiBmdW5jdGlvbiAoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNdXRhYmxlU291cmNlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZU11dGFibGVTb3VyY2Uoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKTtcbiAgICB9LFxuICAgIHVzZU9wYXF1ZUlkZW50aWZpZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU9wYXF1ZUlkZW50aWZpZXInO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlT3BhcXVlSWRlbnRpZmllcigpO1xuICAgIH0sXG4gICAgdW5zdGFibGVfaXNOZXdSZWNvbmNpbGVyOiBlbmFibGVOZXdSZWNvbmNpbGVyXG4gIH07XG4gIEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFViA9IHtcbiAgICByZWFkQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDYWxsYmFjayc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDb250ZXh0JztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUVmZmVjdCc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGU6IGZ1bmN0aW9uIChyZWYsIGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlSW1wZXJhdGl2ZUhhbmRsZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUxheW91dEVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTGF5b3V0RWZmZWN0JztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUxheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTWVtbzogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTWVtbyc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdXBkYXRlTWVtbyhjcmVhdGUsIGRlcHMpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZHVjZXI6IGZ1bmN0aW9uIChyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWR1Y2VyJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiByZXJlbmRlclJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVmOiBmdW5jdGlvbiAoaW5pdGlhbFZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWYnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlUmVmKCk7XG4gICAgfSxcbiAgICB1c2VTdGF0ZTogZnVuY3Rpb24gKGluaXRpYWxTdGF0ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlU3RhdGUnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHJlcmVuZGVyU3RhdGUoaW5pdGlhbFN0YXRlKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VEZWJ1Z1ZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGZvcm1hdHRlckZuKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWJ1Z1ZhbHVlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZURlYnVnVmFsdWUoKTtcbiAgICB9LFxuICAgIHVzZURlZmVycmVkVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVmZXJyZWRWYWx1ZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZXJlbmRlckRlZmVycmVkVmFsdWUodmFsdWUpO1xuICAgIH0sXG4gICAgdXNlVHJhbnNpdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlVHJhbnNpdGlvbic7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZXJlbmRlclRyYW5zaXRpb24oKTtcbiAgICB9LFxuICAgIHVzZU11dGFibGVTb3VyY2U6IGZ1bmN0aW9uIChzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU11dGFibGVTb3VyY2UnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlTXV0YWJsZVNvdXJjZShzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpO1xuICAgIH0sXG4gICAgdXNlT3BhcXVlSWRlbnRpZmllcjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlT3BhcXVlSWRlbnRpZmllcic7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZXJlbmRlck9wYXF1ZUlkZW50aWZpZXIoKTtcbiAgICB9LFxuICAgIHVuc3RhYmxlX2lzTmV3UmVjb25jaWxlcjogZW5hYmxlTmV3UmVjb25jaWxlclxuICB9O1xuICBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWID0ge1xuICAgIHJlYWRDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICB3YXJuSW52YWxpZENvbnRleHRBY2Nlc3MoKTtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpO1xuICAgIH0sXG4gICAgdXNlQ2FsbGJhY2s6IGZ1bmN0aW9uIChjYWxsYmFjaywgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ2FsbGJhY2snO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50Q2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ29udGV4dCc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKTtcbiAgICB9LFxuICAgIHVzZUVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRWZmZWN0JztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudEVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogZnVuY3Rpb24gKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VJbXBlcmF0aXZlSGFuZGxlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudEltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTGF5b3V0RWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VMYXlvdXRFZmZlY3QnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50TGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VNZW1vOiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNZW1vJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbW91bnRNZW1vKGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVkdWNlcjogZnVuY3Rpb24gKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZHVjZXInO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBtb3VudFJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVmOiBmdW5jdGlvbiAoaW5pdGlhbFZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWYnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50UmVmKGluaXRpYWxWYWx1ZSk7XG4gICAgfSxcbiAgICB1c2VTdGF0ZTogZnVuY3Rpb24gKGluaXRpYWxTdGF0ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlU3RhdGUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBtb3VudFN0YXRlKGluaXRpYWxTdGF0ZSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlRGVidWdWYWx1ZTogZnVuY3Rpb24gKHZhbHVlLCBmb3JtYXR0ZXJGbikge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVidWdWYWx1ZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnREZWJ1Z1ZhbHVlKCk7XG4gICAgfSxcbiAgICB1c2VEZWZlcnJlZFZhbHVlOiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlZmVycmVkVmFsdWUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50RGVmZXJyZWRWYWx1ZSh2YWx1ZSk7XG4gICAgfSxcbiAgICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VUcmFuc2l0aW9uJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudFRyYW5zaXRpb24oKTtcbiAgICB9LFxuICAgIHVzZU11dGFibGVTb3VyY2U6IGZ1bmN0aW9uIChzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU11dGFibGVTb3VyY2UnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50TXV0YWJsZVNvdXJjZShzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpO1xuICAgIH0sXG4gICAgdXNlT3BhcXVlSWRlbnRpZmllcjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlT3BhcXVlSWRlbnRpZmllcic7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRPcGFxdWVJZGVudGlmaWVyKCk7XG4gICAgfSxcbiAgICB1bnN0YWJsZV9pc05ld1JlY29uY2lsZXI6IGVuYWJsZU5ld1JlY29uY2lsZXJcbiAgfTtcbiAgSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYgPSB7XG4gICAgcmVhZENvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAgICAgIHdhcm5JbnZhbGlkQ29udGV4dEFjY2VzcygpO1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDYWxsYmFjayc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUNhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUNvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNvbnRleHQnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpO1xuICAgIH0sXG4gICAgdXNlRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VFZmZlY3QnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGU6IGZ1bmN0aW9uIChyZWYsIGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlSW1wZXJhdGl2ZUhhbmRsZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTGF5b3V0RWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VMYXlvdXRFZmZlY3QnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZU1lbW86IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU1lbW8nO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZU1lbW8oY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWR1Y2VyOiBmdW5jdGlvbiAocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVkdWNlcic7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdXBkYXRlUmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWY6IGZ1bmN0aW9uIChpbml0aWFsVmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZic7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZVJlZigpO1xuICAgIH0sXG4gICAgdXNlU3RhdGU6IGZ1bmN0aW9uIChpbml0aWFsU3RhdGUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVN0YXRlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB1cGRhdGVTdGF0ZShpbml0aWFsU3RhdGUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZURlYnVnVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgZm9ybWF0dGVyRm4pIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlYnVnVmFsdWUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVEZWJ1Z1ZhbHVlKCk7XG4gICAgfSxcbiAgICB1c2VEZWZlcnJlZFZhbHVlOiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlZmVycmVkVmFsdWUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVEZWZlcnJlZFZhbHVlKHZhbHVlKTtcbiAgICB9LFxuICAgIHVzZVRyYW5zaXRpb246IGZ1bmN0aW9uICgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVRyYW5zaXRpb24nO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVUcmFuc2l0aW9uKCk7XG4gICAgfSxcbiAgICB1c2VNdXRhYmxlU291cmNlOiBmdW5jdGlvbiAoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNdXRhYmxlU291cmNlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlTXV0YWJsZVNvdXJjZShzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpO1xuICAgIH0sXG4gICAgdXNlT3BhcXVlSWRlbnRpZmllcjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlT3BhcXVlSWRlbnRpZmllcic7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZU9wYXF1ZUlkZW50aWZpZXIoKTtcbiAgICB9LFxuICAgIHVuc3RhYmxlX2lzTmV3UmVjb25jaWxlcjogZW5hYmxlTmV3UmVjb25jaWxlclxuICB9O1xuICBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWID0ge1xuICAgIHJlYWRDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICB3YXJuSW52YWxpZENvbnRleHRBY2Nlc3MoKTtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpO1xuICAgIH0sXG4gICAgdXNlQ2FsbGJhY2s6IGZ1bmN0aW9uIChjYWxsYmFjaywgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ2FsbGJhY2snO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDb250ZXh0JztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKTtcbiAgICB9LFxuICAgIHVzZUVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRWZmZWN0JztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlRWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VJbXBlcmF0aXZlSGFuZGxlOiBmdW5jdGlvbiAocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUltcGVyYXRpdmVIYW5kbGUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUxheW91dEVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTGF5b3V0RWZmZWN0JztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlTGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VNZW1vOiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNZW1vJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB1cGRhdGVNZW1vKGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVkdWNlcjogZnVuY3Rpb24gKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZHVjZXInO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHJlcmVuZGVyUmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWY6IGZ1bmN0aW9uIChpbml0aWFsVmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZic7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZVJlZigpO1xuICAgIH0sXG4gICAgdXNlU3RhdGU6IGZ1bmN0aW9uIChpbml0aWFsU3RhdGUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVN0YXRlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiByZXJlbmRlclN0YXRlKGluaXRpYWxTdGF0ZSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlRGVidWdWYWx1ZTogZnVuY3Rpb24gKHZhbHVlLCBmb3JtYXR0ZXJGbikge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVidWdWYWx1ZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZURlYnVnVmFsdWUoKTtcbiAgICB9LFxuICAgIHVzZURlZmVycmVkVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVmZXJyZWRWYWx1ZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlcmVuZGVyRGVmZXJyZWRWYWx1ZSh2YWx1ZSk7XG4gICAgfSxcbiAgICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VUcmFuc2l0aW9uJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gcmVyZW5kZXJUcmFuc2l0aW9uKCk7XG4gICAgfSxcbiAgICB1c2VNdXRhYmxlU291cmNlOiBmdW5jdGlvbiAoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNdXRhYmxlU291cmNlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlTXV0YWJsZVNvdXJjZShzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpO1xuICAgIH0sXG4gICAgdXNlT3BhcXVlSWRlbnRpZmllcjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlT3BhcXVlSWRlbnRpZmllcic7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlcmVuZGVyT3BhcXVlSWRlbnRpZmllcigpO1xuICAgIH0sXG4gICAgdW5zdGFibGVfaXNOZXdSZWNvbmNpbGVyOiBlbmFibGVOZXdSZWNvbmNpbGVyXG4gIH07XG59XG5cbnZhciBub3ckMSA9IFNjaGVkdWxlci51bnN0YWJsZV9ub3c7XG52YXIgY29tbWl0VGltZSA9IDA7XG52YXIgcHJvZmlsZXJTdGFydFRpbWUgPSAtMTtcblxuZnVuY3Rpb24gZ2V0Q29tbWl0VGltZSgpIHtcbiAgcmV0dXJuIGNvbW1pdFRpbWU7XG59XG5cbmZ1bmN0aW9uIHJlY29yZENvbW1pdFRpbWUoKSB7XG5cbiAgY29tbWl0VGltZSA9IG5vdyQxKCk7XG59XG5cbmZ1bmN0aW9uIHN0YXJ0UHJvZmlsZXJUaW1lcihmaWJlcikge1xuXG4gIHByb2ZpbGVyU3RhcnRUaW1lID0gbm93JDEoKTtcblxuICBpZiAoZmliZXIuYWN0dWFsU3RhcnRUaW1lIDwgMCkge1xuICAgIGZpYmVyLmFjdHVhbFN0YXJ0VGltZSA9IG5vdyQxKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc3RvcFByb2ZpbGVyVGltZXJJZlJ1bm5pbmcoZmliZXIpIHtcblxuICBwcm9maWxlclN0YXJ0VGltZSA9IC0xO1xufVxuXG5mdW5jdGlvbiBzdG9wUHJvZmlsZXJUaW1lcklmUnVubmluZ0FuZFJlY29yZERlbHRhKGZpYmVyLCBvdmVycmlkZUJhc2VUaW1lKSB7XG5cbiAgaWYgKHByb2ZpbGVyU3RhcnRUaW1lID49IDApIHtcbiAgICB2YXIgZWxhcHNlZFRpbWUgPSBub3ckMSgpIC0gcHJvZmlsZXJTdGFydFRpbWU7XG4gICAgZmliZXIuYWN0dWFsRHVyYXRpb24gKz0gZWxhcHNlZFRpbWU7XG5cbiAgICBpZiAob3ZlcnJpZGVCYXNlVGltZSkge1xuICAgICAgZmliZXIuc2VsZkJhc2VEdXJhdGlvbiA9IGVsYXBzZWRUaW1lO1xuICAgIH1cblxuICAgIHByb2ZpbGVyU3RhcnRUaW1lID0gLTE7XG4gIH1cbn1cblxuZnVuY3Rpb24gdHJhbnNmZXJBY3R1YWxEdXJhdGlvbihmaWJlcikge1xuICAvLyBUcmFuc2ZlciB0aW1lIHNwZW50IHJlbmRlcmluZyB0aGVzZSBjaGlsZHJlbiBzbyB3ZSBkb24ndCBsb3NlIGl0XG4gIC8vIGFmdGVyIHdlIHJlcmVuZGVyLiBUaGlzIGlzIHVzZWQgYXMgYSBoZWxwZXIgaW4gc3BlY2lhbCBjYXNlc1xuICAvLyB3aGVyZSB3ZSBzaG91bGQgY291bnQgdGhlIHdvcmsgb2YgbXVsdGlwbGUgcGFzc2VzLlxuICB2YXIgY2hpbGQgPSBmaWJlci5jaGlsZDtcblxuICB3aGlsZSAoY2hpbGQpIHtcbiAgICBmaWJlci5hY3R1YWxEdXJhdGlvbiArPSBjaGlsZC5hY3R1YWxEdXJhdGlvbjtcbiAgICBjaGlsZCA9IGNoaWxkLnNpYmxpbmc7XG4gIH1cbn1cblxudmFyIFJlYWN0Q3VycmVudE93bmVyJDEgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnRPd25lcjtcbnZhciBkaWRSZWNlaXZlVXBkYXRlID0gZmFsc2U7XG52YXIgZGlkV2FybkFib3V0QmFkQ2xhc3M7XG52YXIgZGlkV2FybkFib3V0TW9kdWxlUGF0dGVybkNvbXBvbmVudDtcbnZhciBkaWRXYXJuQWJvdXRDb250ZXh0VHlwZU9uRnVuY3Rpb25Db21wb25lbnQ7XG52YXIgZGlkV2FybkFib3V0R2V0RGVyaXZlZFN0YXRlT25GdW5jdGlvbkNvbXBvbmVudDtcbnZhciBkaWRXYXJuQWJvdXRGdW5jdGlvblJlZnM7XG52YXIgZGlkV2FybkFib3V0UmVhc3NpZ25pbmdQcm9wcztcbnZhciBkaWRXYXJuQWJvdXRSZXZlYWxPcmRlcjtcbnZhciBkaWRXYXJuQWJvdXRUYWlsT3B0aW9ucztcblxue1xuICBkaWRXYXJuQWJvdXRCYWRDbGFzcyA9IHt9O1xuICBkaWRXYXJuQWJvdXRNb2R1bGVQYXR0ZXJuQ29tcG9uZW50ID0ge307XG4gIGRpZFdhcm5BYm91dENvbnRleHRUeXBlT25GdW5jdGlvbkNvbXBvbmVudCA9IHt9O1xuICBkaWRXYXJuQWJvdXRHZXREZXJpdmVkU3RhdGVPbkZ1bmN0aW9uQ29tcG9uZW50ID0ge307XG4gIGRpZFdhcm5BYm91dEZ1bmN0aW9uUmVmcyA9IHt9O1xuICBkaWRXYXJuQWJvdXRSZWFzc2lnbmluZ1Byb3BzID0gZmFsc2U7XG4gIGRpZFdhcm5BYm91dFJldmVhbE9yZGVyID0ge307XG4gIGRpZFdhcm5BYm91dFRhaWxPcHRpb25zID0ge307XG59XG5cbmZ1bmN0aW9uIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKSB7XG4gIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgLy8gSWYgdGhpcyBpcyBhIGZyZXNoIG5ldyBjb21wb25lbnQgdGhhdCBoYXNuJ3QgYmVlbiByZW5kZXJlZCB5ZXQsIHdlXG4gICAgLy8gd29uJ3QgdXBkYXRlIGl0cyBjaGlsZCBzZXQgYnkgYXBwbHlpbmcgbWluaW1hbCBzaWRlLWVmZmVjdHMuIEluc3RlYWQsXG4gICAgLy8gd2Ugd2lsbCBhZGQgdGhlbSBhbGwgdG8gdGhlIGNoaWxkIGJlZm9yZSBpdCBnZXRzIHJlbmRlcmVkLiBUaGF0IG1lYW5zXG4gICAgLy8gd2UgY2FuIG9wdGltaXplIHRoaXMgcmVjb25jaWxpYXRpb24gcGFzcyBieSBub3QgdHJhY2tpbmcgc2lkZS1lZmZlY3RzLlxuICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gbW91bnRDaGlsZEZpYmVycyh3b3JrSW5Qcm9ncmVzcywgbnVsbCwgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIH0gZWxzZSB7XG4gICAgLy8gSWYgdGhlIGN1cnJlbnQgY2hpbGQgaXMgdGhlIHNhbWUgYXMgdGhlIHdvcmsgaW4gcHJvZ3Jlc3MsIGl0IG1lYW5zIHRoYXRcbiAgICAvLyB3ZSBoYXZlbid0IHlldCBzdGFydGVkIGFueSB3b3JrIG9uIHRoZXNlIGNoaWxkcmVuLiBUaGVyZWZvcmUsIHdlIHVzZVxuICAgIC8vIHRoZSBjbG9uZSBhbGdvcml0aG0gdG8gY3JlYXRlIGEgY29weSBvZiBhbGwgdGhlIGN1cnJlbnQgY2hpbGRyZW4uXG4gICAgLy8gSWYgd2UgaGFkIGFueSBwcm9ncmVzc2VkIHdvcmsgYWxyZWFkeSwgdGhhdCBpcyBpbnZhbGlkIGF0IHRoaXMgcG9pbnQgc29cbiAgICAvLyBsZXQncyB0aHJvdyBpdCBvdXQuXG4gICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSByZWNvbmNpbGVDaGlsZEZpYmVycyh3b3JrSW5Qcm9ncmVzcywgY3VycmVudC5jaGlsZCwgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZm9yY2VVbm1vdW50Q3VycmVudEFuZFJlY29uY2lsZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcykge1xuICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGZvcmsgb2YgcmVjb25jaWxlQ2hpbGRyZW4uIEl0J3MgdXNlZCBpbiBjYXNlcyB3aGVyZSB3ZVxuICAvLyB3YW50IHRvIHJlY29uY2lsZSB3aXRob3V0IG1hdGNoaW5nIGFnYWluc3QgdGhlIGV4aXN0aW5nIHNldC4gVGhpcyBoYXMgdGhlXG4gIC8vIGVmZmVjdCBvZiBhbGwgY3VycmVudCBjaGlsZHJlbiBiZWluZyB1bm1vdW50ZWQ7IGV2ZW4gaWYgdGhlIHR5cGUgYW5kIGtleVxuICAvLyBhcmUgdGhlIHNhbWUsIHRoZSBvbGQgY2hpbGQgaXMgdW5tb3VudGVkIGFuZCBhIG5ldyBjaGlsZCBpcyBjcmVhdGVkLlxuICAvL1xuICAvLyBUbyBkbyB0aGlzLCB3ZSdyZSBnb2luZyB0byBnbyB0aHJvdWdoIHRoZSByZWNvbmNpbGUgYWxnb3JpdGhtIHR3aWNlLiBJblxuICAvLyB0aGUgZmlyc3QgcGFzcywgd2Ugc2NoZWR1bGUgYSBkZWxldGlvbiBmb3IgYWxsIHRoZSBjdXJyZW50IGNoaWxkcmVuIGJ5XG4gIC8vIHBhc3NpbmcgbnVsbC5cbiAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSByZWNvbmNpbGVDaGlsZEZpYmVycyh3b3JrSW5Qcm9ncmVzcywgY3VycmVudC5jaGlsZCwgbnVsbCwgcmVuZGVyTGFuZXMpOyAvLyBJbiB0aGUgc2Vjb25kIHBhc3MsIHdlIG1vdW50IHRoZSBuZXcgY2hpbGRyZW4uIFRoZSB0cmljayBoZXJlIGlzIHRoYXQgd2VcbiAgLy8gcGFzcyBudWxsIGluIHBsYWNlIG9mIHdoZXJlIHdlIHVzdWFsbHkgcGFzcyB0aGUgY3VycmVudCBjaGlsZCBzZXQuIFRoaXMgaGFzXG4gIC8vIHRoZSBlZmZlY3Qgb2YgcmVtb3VudGluZyBhbGwgY2hpbGRyZW4gcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZWlyXG4gIC8vIGlkZW50aXRpZXMgbWF0Y2guXG5cbiAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSByZWNvbmNpbGVDaGlsZEZpYmVycyh3b3JrSW5Qcm9ncmVzcywgbnVsbCwgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUZvcndhcmRSZWYoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCByZW5kZXJMYW5lcykge1xuICAvLyBUT0RPOiBjdXJyZW50IGNhbiBiZSBub24tbnVsbCBoZXJlIGV2ZW4gaWYgdGhlIGNvbXBvbmVudFxuICAvLyBoYXNuJ3QgeWV0IG1vdW50ZWQuIFRoaXMgaGFwcGVucyBhZnRlciB0aGUgZmlyc3QgcmVuZGVyIHN1c3BlbmRzLlxuICAvLyBXZSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBpcyBmaW5lIG9yIGNhbiBjYXVzZSBpc3N1ZXMuXG4gIHtcbiAgICBpZiAod29ya0luUHJvZ3Jlc3MudHlwZSAhPT0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUpIHtcbiAgICAgIC8vIExhenkgY29tcG9uZW50IHByb3BzIGNhbid0IGJlIHZhbGlkYXRlZCBpbiBjcmVhdGVFbGVtZW50XG4gICAgICAvLyBiZWNhdXNlIHRoZXkncmUgb25seSBndWFyYW50ZWVkIHRvIGJlIHJlc29sdmVkIGhlcmUuXG4gICAgICB2YXIgaW5uZXJQcm9wVHlwZXMgPSBDb21wb25lbnQucHJvcFR5cGVzO1xuXG4gICAgICBpZiAoaW5uZXJQcm9wVHlwZXMpIHtcbiAgICAgICAgY2hlY2tQcm9wVHlwZXMoaW5uZXJQcm9wVHlwZXMsIG5leHRQcm9wcywgLy8gUmVzb2x2ZWQgcHJvcHNcbiAgICAgICAgJ3Byb3AnLCBnZXRDb21wb25lbnROYW1lKENvbXBvbmVudCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciByZW5kZXIgPSBDb21wb25lbnQucmVuZGVyO1xuICB2YXIgcmVmID0gd29ya0luUHJvZ3Jlc3MucmVmOyAvLyBUaGUgcmVzdCBpcyBhIGZvcmsgb2YgdXBkYXRlRnVuY3Rpb25Db21wb25lbnRcblxuICB2YXIgbmV4dENoaWxkcmVuO1xuICBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuXG4gIHtcbiAgICBSZWFjdEN1cnJlbnRPd25lciQxLmN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcztcbiAgICBzZXRJc1JlbmRlcmluZyh0cnVlKTtcbiAgICBuZXh0Q2hpbGRyZW4gPSByZW5kZXJXaXRoSG9va3MoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlciwgbmV4dFByb3BzLCByZWYsIHJlbmRlckxhbmVzKTtcblxuICAgIGlmICggd29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdE1vZGUpIHtcbiAgICAgIGRpc2FibGVMb2dzKCk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIG5leHRDaGlsZHJlbiA9IHJlbmRlcldpdGhIb29rcyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyLCBuZXh0UHJvcHMsIHJlZiwgcmVuZGVyTGFuZXMpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc2V0SXNSZW5kZXJpbmcoZmFsc2UpO1xuICB9XG5cbiAgaWYgKGN1cnJlbnQgIT09IG51bGwgJiYgIWRpZFJlY2VpdmVVcGRhdGUpIHtcbiAgICBiYWlsb3V0SG9va3MoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICB9IC8vIFJlYWN0IERldlRvb2xzIHJlYWRzIHRoaXMgZmxhZy5cblxuXG4gIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBlcmZvcm1lZFdvcms7XG4gIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVNZW1vQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgdXBkYXRlTGFuZXMsIHJlbmRlckxhbmVzKSB7XG4gIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgdmFyIHR5cGUgPSBDb21wb25lbnQudHlwZTtcblxuICAgIGlmIChpc1NpbXBsZUZ1bmN0aW9uQ29tcG9uZW50KHR5cGUpICYmIENvbXBvbmVudC5jb21wYXJlID09PSBudWxsICYmIC8vIFNpbXBsZU1lbW9Db21wb25lbnQgY29kZXBhdGggZG9lc24ndCByZXNvbHZlIG91dGVyIHByb3BzIGVpdGhlci5cbiAgICBDb21wb25lbnQuZGVmYXVsdFByb3BzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhciByZXNvbHZlZFR5cGUgPSB0eXBlO1xuXG4gICAgICB7XG4gICAgICAgIHJlc29sdmVkVHlwZSA9IHJlc29sdmVGdW5jdGlvbkZvckhvdFJlbG9hZGluZyh0eXBlKTtcbiAgICAgIH0gLy8gSWYgdGhpcyBpcyBhIHBsYWluIGZ1bmN0aW9uIGNvbXBvbmVudCB3aXRob3V0IGRlZmF1bHQgcHJvcHMsXG4gICAgICAvLyBhbmQgd2l0aCBvbmx5IHRoZSBkZWZhdWx0IHNoYWxsb3cgY29tcGFyaXNvbiwgd2UgdXBncmFkZSBpdFxuICAgICAgLy8gdG8gYSBTaW1wbGVNZW1vQ29tcG9uZW50IHRvIGFsbG93IGZhc3QgcGF0aCB1cGRhdGVzLlxuXG5cbiAgICAgIHdvcmtJblByb2dyZXNzLnRhZyA9IFNpbXBsZU1lbW9Db21wb25lbnQ7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gcmVzb2x2ZWRUeXBlO1xuXG4gICAgICB7XG4gICAgICAgIHZhbGlkYXRlRnVuY3Rpb25Db21wb25lbnRJbkRldih3b3JrSW5Qcm9ncmVzcywgdHlwZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB1cGRhdGVTaW1wbGVNZW1vQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZXNvbHZlZFR5cGUsIG5leHRQcm9wcywgdXBkYXRlTGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgICB9XG5cbiAgICB7XG4gICAgICB2YXIgaW5uZXJQcm9wVHlwZXMgPSB0eXBlLnByb3BUeXBlcztcblxuICAgICAgaWYgKGlubmVyUHJvcFR5cGVzKSB7XG4gICAgICAgIC8vIElubmVyIG1lbW8gY29tcG9uZW50IHByb3BzIGFyZW4ndCBjdXJyZW50bHkgdmFsaWRhdGVkIGluIGNyZWF0ZUVsZW1lbnQuXG4gICAgICAgIC8vIFdlIGNvdWxkIG1vdmUgaXQgdGhlcmUsIGJ1dCB3ZSdkIHN0aWxsIG5lZWQgdGhpcyBmb3IgbGF6eSBjb2RlIHBhdGguXG4gICAgICAgIGNoZWNrUHJvcFR5cGVzKGlubmVyUHJvcFR5cGVzLCBuZXh0UHJvcHMsIC8vIFJlc29sdmVkIHByb3BzXG4gICAgICAgICdwcm9wJywgZ2V0Q29tcG9uZW50TmFtZSh0eXBlKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGNoaWxkID0gY3JlYXRlRmliZXJGcm9tVHlwZUFuZFByb3BzKENvbXBvbmVudC50eXBlLCBudWxsLCBuZXh0UHJvcHMsIHdvcmtJblByb2dyZXNzLCB3b3JrSW5Qcm9ncmVzcy5tb2RlLCByZW5kZXJMYW5lcyk7XG4gICAgY2hpbGQucmVmID0gd29ya0luUHJvZ3Jlc3MucmVmO1xuICAgIGNoaWxkLnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gY2hpbGQ7XG4gICAgcmV0dXJuIGNoaWxkO1xuICB9XG5cbiAge1xuICAgIHZhciBfdHlwZSA9IENvbXBvbmVudC50eXBlO1xuICAgIHZhciBfaW5uZXJQcm9wVHlwZXMgPSBfdHlwZS5wcm9wVHlwZXM7XG5cbiAgICBpZiAoX2lubmVyUHJvcFR5cGVzKSB7XG4gICAgICAvLyBJbm5lciBtZW1vIGNvbXBvbmVudCBwcm9wcyBhcmVuJ3QgY3VycmVudGx5IHZhbGlkYXRlZCBpbiBjcmVhdGVFbGVtZW50LlxuICAgICAgLy8gV2UgY291bGQgbW92ZSBpdCB0aGVyZSwgYnV0IHdlJ2Qgc3RpbGwgbmVlZCB0aGlzIGZvciBsYXp5IGNvZGUgcGF0aC5cbiAgICAgIGNoZWNrUHJvcFR5cGVzKF9pbm5lclByb3BUeXBlcywgbmV4dFByb3BzLCAvLyBSZXNvbHZlZCBwcm9wc1xuICAgICAgJ3Byb3AnLCBnZXRDb21wb25lbnROYW1lKF90eXBlKSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGN1cnJlbnRDaGlsZCA9IGN1cnJlbnQuY2hpbGQ7IC8vIFRoaXMgaXMgYWx3YXlzIGV4YWN0bHkgb25lIGNoaWxkXG5cbiAgaWYgKCFpbmNsdWRlc1NvbWVMYW5lKHVwZGF0ZUxhbmVzLCByZW5kZXJMYW5lcykpIHtcbiAgICAvLyBUaGlzIHdpbGwgYmUgdGhlIHByb3BzIHdpdGggcmVzb2x2ZWQgZGVmYXVsdFByb3BzLFxuICAgIC8vIHVubGlrZSBjdXJyZW50Lm1lbW9pemVkUHJvcHMgd2hpY2ggd2lsbCBiZSB0aGUgdW5yZXNvbHZlZCBvbmVzLlxuICAgIHZhciBwcmV2UHJvcHMgPSBjdXJyZW50Q2hpbGQubWVtb2l6ZWRQcm9wczsgLy8gRGVmYXVsdCB0byBzaGFsbG93IGNvbXBhcmlzb25cblxuICAgIHZhciBjb21wYXJlID0gQ29tcG9uZW50LmNvbXBhcmU7XG4gICAgY29tcGFyZSA9IGNvbXBhcmUgIT09IG51bGwgPyBjb21wYXJlIDogc2hhbGxvd0VxdWFsO1xuXG4gICAgaWYgKGNvbXBhcmUocHJldlByb3BzLCBuZXh0UHJvcHMpICYmIGN1cnJlbnQucmVmID09PSB3b3JrSW5Qcm9ncmVzcy5yZWYpIHtcbiAgICAgIHJldHVybiBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgfVxuICB9IC8vIFJlYWN0IERldlRvb2xzIHJlYWRzIHRoaXMgZmxhZy5cblxuXG4gIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBlcmZvcm1lZFdvcms7XG4gIHZhciBuZXdDaGlsZCA9IGNyZWF0ZVdvcmtJblByb2dyZXNzKGN1cnJlbnRDaGlsZCwgbmV4dFByb3BzKTtcbiAgbmV3Q2hpbGQucmVmID0gd29ya0luUHJvZ3Jlc3MucmVmO1xuICBuZXdDaGlsZC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBuZXdDaGlsZDtcbiAgcmV0dXJuIG5ld0NoaWxkO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVTaW1wbGVNZW1vQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgdXBkYXRlTGFuZXMsIHJlbmRlckxhbmVzKSB7XG4gIC8vIFRPRE86IGN1cnJlbnQgY2FuIGJlIG5vbi1udWxsIGhlcmUgZXZlbiBpZiB0aGUgY29tcG9uZW50XG4gIC8vIGhhc24ndCB5ZXQgbW91bnRlZC4gVGhpcyBoYXBwZW5zIHdoZW4gdGhlIGlubmVyIHJlbmRlciBzdXNwZW5kcy5cbiAgLy8gV2UnbGwgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgaXMgZmluZSBvciBjYW4gY2F1c2UgaXNzdWVzLlxuICB7XG4gICAgaWYgKHdvcmtJblByb2dyZXNzLnR5cGUgIT09IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlKSB7XG4gICAgICAvLyBMYXp5IGNvbXBvbmVudCBwcm9wcyBjYW4ndCBiZSB2YWxpZGF0ZWQgaW4gY3JlYXRlRWxlbWVudFxuICAgICAgLy8gYmVjYXVzZSB0aGV5J3JlIG9ubHkgZ3VhcmFudGVlZCB0byBiZSByZXNvbHZlZCBoZXJlLlxuICAgICAgdmFyIG91dGVyTWVtb1R5cGUgPSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZTtcblxuICAgICAgaWYgKG91dGVyTWVtb1R5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSkge1xuICAgICAgICAvLyBXZSB3YXJuIHdoZW4geW91IGRlZmluZSBwcm9wVHlwZXMgb24gbGF6eSgpXG4gICAgICAgIC8vIHNvIGxldCdzIGp1c3Qgc2tpcCBvdmVyIGl0IHRvIGZpbmQgbWVtbygpIG91dGVyIHdyYXBwZXIuXG4gICAgICAgIC8vIElubmVyIHByb3BzIGZvciBtZW1vIGFyZSB2YWxpZGF0ZWQgbGF0ZXIuXG4gICAgICAgIHZhciBsYXp5Q29tcG9uZW50ID0gb3V0ZXJNZW1vVHlwZTtcbiAgICAgICAgdmFyIHBheWxvYWQgPSBsYXp5Q29tcG9uZW50Ll9wYXlsb2FkO1xuICAgICAgICB2YXIgaW5pdCA9IGxhenlDb21wb25lbnQuX2luaXQ7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBvdXRlck1lbW9UeXBlID0gaW5pdChwYXlsb2FkKTtcbiAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgIG91dGVyTWVtb1R5cGUgPSBudWxsO1xuICAgICAgICB9IC8vIElubmVyIHByb3BUeXBlcyB3aWxsIGJlIHZhbGlkYXRlZCBpbiB0aGUgZnVuY3Rpb24gY29tcG9uZW50IHBhdGguXG5cblxuICAgICAgICB2YXIgb3V0ZXJQcm9wVHlwZXMgPSBvdXRlck1lbW9UeXBlICYmIG91dGVyTWVtb1R5cGUucHJvcFR5cGVzO1xuXG4gICAgICAgIGlmIChvdXRlclByb3BUeXBlcykge1xuICAgICAgICAgIGNoZWNrUHJvcFR5cGVzKG91dGVyUHJvcFR5cGVzLCBuZXh0UHJvcHMsIC8vIFJlc29sdmVkIChTaW1wbGVNZW1vQ29tcG9uZW50IGhhcyBubyBkZWZhdWx0UHJvcHMpXG4gICAgICAgICAgJ3Byb3AnLCBnZXRDb21wb25lbnROYW1lKG91dGVyTWVtb1R5cGUpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgdmFyIHByZXZQcm9wcyA9IGN1cnJlbnQubWVtb2l6ZWRQcm9wcztcblxuICAgIGlmIChzaGFsbG93RXF1YWwocHJldlByb3BzLCBuZXh0UHJvcHMpICYmIGN1cnJlbnQucmVmID09PSB3b3JrSW5Qcm9ncmVzcy5yZWYgJiYgKCAvLyBQcmV2ZW50IGJhaWxvdXQgaWYgdGhlIGltcGxlbWVudGF0aW9uIGNoYW5nZWQgZHVlIHRvIGhvdCByZWxvYWQuXG4gICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPT09IGN1cnJlbnQudHlwZSApKSB7XG4gICAgICBkaWRSZWNlaXZlVXBkYXRlID0gZmFsc2U7XG5cbiAgICAgIGlmICghaW5jbHVkZXNTb21lTGFuZShyZW5kZXJMYW5lcywgdXBkYXRlTGFuZXMpKSB7XG4gICAgICAgIC8vIFRoZSBwZW5kaW5nIGxhbmVzIHdlcmUgY2xlYXJlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGJlZ2luV29yay4gV2UncmVcbiAgICAgICAgLy8gYWJvdXQgdG8gYmFpbCBvdXQsIGJ1dCB0aGVyZSBtaWdodCBiZSBvdGhlciBsYW5lcyB0aGF0IHdlcmVuJ3RcbiAgICAgICAgLy8gaW5jbHVkZWQgaW4gdGhlIGN1cnJlbnQgcmVuZGVyLiBVc3VhbGx5LCB0aGUgcHJpb3JpdHkgbGV2ZWwgb2YgdGhlXG4gICAgICAgIC8vIHJlbWFpbmluZyB1cGRhdGVzIGlzIGFjY3VtbGF0ZWQgZHVyaW5nIHRoZSBldmFsdWF0aW9uIG9mIHRoZVxuICAgICAgICAvLyBjb21wb25lbnQgKGkuZS4gd2hlbiBwcm9jZXNzaW5nIHRoZSB1cGRhdGUgcXVldWUpLiBCdXQgc2luY2Ugc2luY2VcbiAgICAgICAgLy8gd2UncmUgYmFpbGluZyBvdXQgZWFybHkgKndpdGhvdXQqIGV2YWx1YXRpbmcgdGhlIGNvbXBvbmVudCwgd2UgbmVlZFxuICAgICAgICAvLyB0byBhY2NvdW50IGZvciBpdCBoZXJlLCB0b28uIFJlc2V0IHRvIHRoZSB2YWx1ZSBvZiB0aGUgY3VycmVudCBmaWJlci5cbiAgICAgICAgLy8gTk9URTogVGhpcyBvbmx5IGFwcGxpZXMgdG8gU2ltcGxlTWVtb0NvbXBvbmVudCwgbm90IE1lbW9Db21wb25lbnQsXG4gICAgICAgIC8vIGJlY2F1c2UgYSBNZW1vQ29tcG9uZW50IGZpYmVyIGRvZXMgbm90IGhhdmUgaG9va3Mgb3IgYW4gdXBkYXRlIHF1ZXVlO1xuICAgICAgICAvLyByYXRoZXIsIGl0IHdyYXBzIGFyb3VuZCBhbiBpbm5lciBjb21wb25lbnQsIHdoaWNoIG1heSBvciBtYXkgbm90XG4gICAgICAgIC8vIGNvbnRhaW5zIGhvb2tzLlxuICAgICAgICAvLyBUT0RPOiBNb3ZlIHRoZSByZXNldCBhdCBpbiBiZWdpbldvcmsgb3V0IG9mIHRoZSBjb21tb24gcGF0aCBzbyB0aGF0XG4gICAgICAgIC8vIHRoaXMgaXMgbm8gbG9uZ2VyIG5lY2Vzc2FyeS5cbiAgICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBjdXJyZW50LmxhbmVzO1xuICAgICAgICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgICAgfSBlbHNlIGlmICgoY3VycmVudC5mbGFncyAmIEZvcmNlVXBkYXRlRm9yTGVnYWN5U3VzcGVuc2UpICE9PSBOb0ZsYWdzKSB7XG4gICAgICAgIC8vIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2UgdGhhdCBvbmx5IGV4aXN0cyBmb3IgbGVnYWN5IG1vZGUuXG4gICAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC8xOTIxNi5cbiAgICAgICAgZGlkUmVjZWl2ZVVwZGF0ZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZUZ1bmN0aW9uQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgcmVuZGVyTGFuZXMpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVPZmZzY3JlZW5Db21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHZhciBuZXh0UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gIHZhciBuZXh0Q2hpbGRyZW4gPSBuZXh0UHJvcHMuY2hpbGRyZW47XG4gIHZhciBwcmV2U3RhdGUgPSBjdXJyZW50ICE9PSBudWxsID8gY3VycmVudC5tZW1vaXplZFN0YXRlIDogbnVsbDtcblxuICBpZiAobmV4dFByb3BzLm1vZGUgPT09ICdoaWRkZW4nIHx8IG5leHRQcm9wcy5tb2RlID09PSAndW5zdGFibGUtZGVmZXItd2l0aG91dC1oaWRpbmcnKSB7XG4gICAgaWYgKCh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgQ29uY3VycmVudE1vZGUpID09PSBOb01vZGUpIHtcbiAgICAgIC8vIEluIGxlZ2FjeSBzeW5jIG1vZGUsIGRvbid0IGRlZmVyIHRoZSBzdWJ0cmVlLiBSZW5kZXIgaXQgbm93LlxuICAgICAgLy8gVE9ETzogRmlndXJlIG91dCB3aGF0IHdlIHNob3VsZCBkbyBpbiBCbG9ja2luZyBtb2RlLlxuICAgICAgdmFyIG5leHRTdGF0ZSA9IHtcbiAgICAgICAgYmFzZUxhbmVzOiBOb0xhbmVzXG4gICAgICB9O1xuICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG5leHRTdGF0ZTtcbiAgICAgIHB1c2hSZW5kZXJMYW5lcyh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgIH0gZWxzZSBpZiAoIWluY2x1ZGVzU29tZUxhbmUocmVuZGVyTGFuZXMsIE9mZnNjcmVlbkxhbmUpKSB7XG4gICAgICB2YXIgbmV4dEJhc2VMYW5lcztcblxuICAgICAgaWYgKHByZXZTdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgcHJldkJhc2VMYW5lcyA9IHByZXZTdGF0ZS5iYXNlTGFuZXM7XG4gICAgICAgIG5leHRCYXNlTGFuZXMgPSBtZXJnZUxhbmVzKHByZXZCYXNlTGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5leHRCYXNlTGFuZXMgPSByZW5kZXJMYW5lcztcbiAgICAgIH0gLy8gU2NoZWR1bGUgdGhpcyBmaWJlciB0byByZS1yZW5kZXIgYXQgb2Zmc2NyZWVuIHByaW9yaXR5LiBUaGVuIGJhaWxvdXQuXG5cblxuICAgICAge1xuICAgICAgICBtYXJrU3Bhd25lZFdvcmsoT2Zmc2NyZWVuTGFuZSk7XG4gICAgICB9XG5cbiAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gd29ya0luUHJvZ3Jlc3MuY2hpbGRMYW5lcyA9IGxhbmVUb0xhbmVzKE9mZnNjcmVlbkxhbmUpO1xuICAgICAgdmFyIF9uZXh0U3RhdGUgPSB7XG4gICAgICAgIGJhc2VMYW5lczogbmV4dEJhc2VMYW5lc1xuICAgICAgfTtcbiAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBfbmV4dFN0YXRlOyAvLyBXZSdyZSBhYm91dCB0byBiYWlsIG91dCwgYnV0IHdlIG5lZWQgdG8gcHVzaCB0aGlzIHRvIHRoZSBzdGFjayBhbnl3YXlcbiAgICAgIC8vIHRvIGF2b2lkIGEgcHVzaC9wb3AgbWlzYWxpZ25tZW50LlxuXG4gICAgICBwdXNoUmVuZGVyTGFuZXMod29ya0luUHJvZ3Jlc3MsIG5leHRCYXNlTGFuZXMpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlbmRlcmluZyBhdCBvZmZzY3JlZW4sIHNvIHdlIGNhbiBjbGVhciB0aGUgYmFzZSBsYW5lcy5cbiAgICAgIHZhciBfbmV4dFN0YXRlMiA9IHtcbiAgICAgICAgYmFzZUxhbmVzOiBOb0xhbmVzXG4gICAgICB9O1xuICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IF9uZXh0U3RhdGUyOyAvLyBQdXNoIHRoZSBsYW5lcyB0aGF0IHdlcmUgc2tpcHBlZCB3aGVuIHdlIGJhaWxlZCBvdXQuXG5cbiAgICAgIHZhciBzdWJ0cmVlUmVuZGVyTGFuZXMgPSBwcmV2U3RhdGUgIT09IG51bGwgPyBwcmV2U3RhdGUuYmFzZUxhbmVzIDogcmVuZGVyTGFuZXM7XG4gICAgICBwdXNoUmVuZGVyTGFuZXMod29ya0luUHJvZ3Jlc3MsIHN1YnRyZWVSZW5kZXJMYW5lcyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBfc3VidHJlZVJlbmRlckxhbmVzO1xuXG4gICAgaWYgKHByZXZTdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgX3N1YnRyZWVSZW5kZXJMYW5lcyA9IG1lcmdlTGFuZXMocHJldlN0YXRlLmJhc2VMYW5lcywgcmVuZGVyTGFuZXMpOyAvLyBTaW5jZSB3ZSdyZSBub3QgaGlkZGVuIGFueW1vcmUsIHJlc2V0IHRoZSBzdGF0ZVxuXG4gICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gV2Ugd2VyZW4ndCBwcmV2aW91c2x5IGhpZGRlbiwgYW5kIHdlIHN0aWxsIGFyZW4ndCwgc28gdGhlcmUncyBub3RoaW5nXG4gICAgICAvLyBzcGVjaWFsIHRvIGRvLiBOZWVkIHRvIHB1c2ggdG8gdGhlIHN0YWNrIHJlZ2FyZGxlc3MsIHRob3VnaCwgdG8gYXZvaWRcbiAgICAgIC8vIGEgcHVzaC9wb3AgbWlzYWxpZ25tZW50LlxuICAgICAgX3N1YnRyZWVSZW5kZXJMYW5lcyA9IHJlbmRlckxhbmVzO1xuICAgIH1cblxuICAgIHB1c2hSZW5kZXJMYW5lcyh3b3JrSW5Qcm9ncmVzcywgX3N1YnRyZWVSZW5kZXJMYW5lcyk7XG4gIH1cblxuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn0gLy8gTm90ZTogVGhlc2UgaGFwcGVuIHRvIGhhdmUgaWRlbnRpY2FsIGJlZ2luIHBoYXNlcywgZm9yIG5vdy4gV2Ugc2hvdWxkbid0IGhvbGRcbi8vIG91cnNlbHZlcyB0byB0aGlzIGNvbnN0cmFpbnQsIHRob3VnaC4gSWYgdGhlIGJlaGF2aW9yIGRpdmVyZ2VzLCB3ZSBzaG91bGRcbi8vIGZvcmsgdGhlIGZ1bmN0aW9uLlxuXG5cbnZhciB1cGRhdGVMZWdhY3lIaWRkZW5Db21wb25lbnQgPSB1cGRhdGVPZmZzY3JlZW5Db21wb25lbnQ7XG5cbmZ1bmN0aW9uIHVwZGF0ZUZyYWdtZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICB2YXIgbmV4dENoaWxkcmVuID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlTW9kZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIG5leHRDaGlsZHJlbiA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcy5jaGlsZHJlbjtcbiAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVByb2ZpbGVyKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICB7XG4gICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlOyAvLyBSZXNldCBlZmZlY3QgZHVyYXRpb25zIGZvciB0aGUgbmV4dCBldmVudHVhbCBlZmZlY3QgcGhhc2UuXG4gICAgLy8gVGhlc2UgYXJlIHJlc2V0IGR1cmluZyByZW5kZXIgdG8gYWxsb3cgdGhlIERldlRvb2xzIGNvbW1pdCBob29rIGEgY2hhbmNlIHRvIHJlYWQgdGhlbSxcblxuICAgIHZhciBzdGF0ZU5vZGUgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gICAgc3RhdGVOb2RlLmVmZmVjdER1cmF0aW9uID0gMDtcbiAgICBzdGF0ZU5vZGUucGFzc2l2ZUVmZmVjdER1cmF0aW9uID0gMDtcbiAgfVxuXG4gIHZhciBuZXh0UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gIHZhciBuZXh0Q2hpbGRyZW4gPSBuZXh0UHJvcHMuY2hpbGRyZW47XG4gIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuXG5mdW5jdGlvbiBtYXJrUmVmKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKSB7XG4gIHZhciByZWYgPSB3b3JrSW5Qcm9ncmVzcy5yZWY7XG5cbiAgaWYgKGN1cnJlbnQgPT09IG51bGwgJiYgcmVmICE9PSBudWxsIHx8IGN1cnJlbnQgIT09IG51bGwgJiYgY3VycmVudC5yZWYgIT09IHJlZikge1xuICAgIC8vIFNjaGVkdWxlIGEgUmVmIGVmZmVjdFxuICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFJlZjtcbiAgfVxufVxuXG5mdW5jdGlvbiB1cGRhdGVGdW5jdGlvbkNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHJlbmRlckxhbmVzKSB7XG4gIHtcbiAgICBpZiAod29ya0luUHJvZ3Jlc3MudHlwZSAhPT0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUpIHtcbiAgICAgIC8vIExhenkgY29tcG9uZW50IHByb3BzIGNhbid0IGJlIHZhbGlkYXRlZCBpbiBjcmVhdGVFbGVtZW50XG4gICAgICAvLyBiZWNhdXNlIHRoZXkncmUgb25seSBndWFyYW50ZWVkIHRvIGJlIHJlc29sdmVkIGhlcmUuXG4gICAgICB2YXIgaW5uZXJQcm9wVHlwZXMgPSBDb21wb25lbnQucHJvcFR5cGVzO1xuXG4gICAgICBpZiAoaW5uZXJQcm9wVHlwZXMpIHtcbiAgICAgICAgY2hlY2tQcm9wVHlwZXMoaW5uZXJQcm9wVHlwZXMsIG5leHRQcm9wcywgLy8gUmVzb2x2ZWQgcHJvcHNcbiAgICAgICAgJ3Byb3AnLCBnZXRDb21wb25lbnROYW1lKENvbXBvbmVudCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBjb250ZXh0O1xuXG4gIHtcbiAgICB2YXIgdW5tYXNrZWRDb250ZXh0ID0gZ2V0VW5tYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHRydWUpO1xuICAgIGNvbnRleHQgPSBnZXRNYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCB1bm1hc2tlZENvbnRleHQpO1xuICB9XG5cbiAgdmFyIG5leHRDaGlsZHJlbjtcbiAgcHJlcGFyZVRvUmVhZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICB7XG4gICAgUmVhY3RDdXJyZW50T3duZXIkMS5jdXJyZW50ID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgc2V0SXNSZW5kZXJpbmcodHJ1ZSk7XG4gICAgbmV4dENoaWxkcmVuID0gcmVuZGVyV2l0aEhvb2tzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgY29udGV4dCwgcmVuZGVyTGFuZXMpO1xuXG4gICAgaWYgKCB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgZGlzYWJsZUxvZ3MoKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgbmV4dENoaWxkcmVuID0gcmVuZGVyV2l0aEhvb2tzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgY29udGV4dCwgcmVuZGVyTGFuZXMpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc2V0SXNSZW5kZXJpbmcoZmFsc2UpO1xuICB9XG5cbiAgaWYgKGN1cnJlbnQgIT09IG51bGwgJiYgIWRpZFJlY2VpdmVVcGRhdGUpIHtcbiAgICBiYWlsb3V0SG9va3MoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICB9IC8vIFJlYWN0IERldlRvb2xzIHJlYWRzIHRoaXMgZmxhZy5cblxuXG4gIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBlcmZvcm1lZFdvcms7XG4gIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVDbGFzc0NvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHJlbmRlckxhbmVzKSB7XG4gIHtcbiAgICBpZiAod29ya0luUHJvZ3Jlc3MudHlwZSAhPT0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUpIHtcbiAgICAgIC8vIExhenkgY29tcG9uZW50IHByb3BzIGNhbid0IGJlIHZhbGlkYXRlZCBpbiBjcmVhdGVFbGVtZW50XG4gICAgICAvLyBiZWNhdXNlIHRoZXkncmUgb25seSBndWFyYW50ZWVkIHRvIGJlIHJlc29sdmVkIGhlcmUuXG4gICAgICB2YXIgaW5uZXJQcm9wVHlwZXMgPSBDb21wb25lbnQucHJvcFR5cGVzO1xuXG4gICAgICBpZiAoaW5uZXJQcm9wVHlwZXMpIHtcbiAgICAgICAgY2hlY2tQcm9wVHlwZXMoaW5uZXJQcm9wVHlwZXMsIG5leHRQcm9wcywgLy8gUmVzb2x2ZWQgcHJvcHNcbiAgICAgICAgJ3Byb3AnLCBnZXRDb21wb25lbnROYW1lKENvbXBvbmVudCkpO1xuICAgICAgfVxuICAgIH1cbiAgfSAvLyBQdXNoIGNvbnRleHQgcHJvdmlkZXJzIGVhcmx5IHRvIHByZXZlbnQgY29udGV4dCBzdGFjayBtaXNtYXRjaGVzLlxuICAvLyBEdXJpbmcgbW91bnRpbmcgd2UgZG9uJ3Qga25vdyB0aGUgY2hpbGQgY29udGV4dCB5ZXQgYXMgdGhlIGluc3RhbmNlIGRvZXNuJ3QgZXhpc3QuXG4gIC8vIFdlIHdpbGwgaW52YWxpZGF0ZSB0aGUgY2hpbGQgY29udGV4dCBpbiBmaW5pc2hDbGFzc0NvbXBvbmVudCgpIHJpZ2h0IGFmdGVyIHJlbmRlcmluZy5cblxuXG4gIHZhciBoYXNDb250ZXh0O1xuXG4gIGlmIChpc0NvbnRleHRQcm92aWRlcihDb21wb25lbnQpKSB7XG4gICAgaGFzQ29udGV4dCA9IHRydWU7XG4gICAgcHVzaENvbnRleHRQcm92aWRlcih3b3JrSW5Qcm9ncmVzcyk7XG4gIH0gZWxzZSB7XG4gICAgaGFzQ29udGV4dCA9IGZhbHNlO1xuICB9XG5cbiAgcHJlcGFyZVRvUmVhZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICB2YXIgc2hvdWxkVXBkYXRlO1xuXG4gIGlmIChpbnN0YW5jZSA9PT0gbnVsbCkge1xuICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAvLyBBIGNsYXNzIGNvbXBvbmVudCB3aXRob3V0IGFuIGluc3RhbmNlIG9ubHkgbW91bnRzIGlmIGl0IHN1c3BlbmRlZFxuICAgICAgLy8gaW5zaWRlIGEgbm9uLWNvbmN1cnJlbnQgdHJlZSwgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlLiBXZSB3YW50IHRvXG4gICAgICAvLyB0cmVhdCBpdCBsaWtlIGEgbmV3IG1vdW50LCBldmVuIHRob3VnaCBhbiBlbXB0eSB2ZXJzaW9uIG9mIGl0IGFscmVhZHlcbiAgICAgIC8vIGNvbW1pdHRlZC4gRGlzY29ubmVjdCB0aGUgYWx0ZXJuYXRlIHBvaW50ZXJzLlxuICAgICAgY3VycmVudC5hbHRlcm5hdGUgPSBudWxsO1xuICAgICAgd29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlID0gbnVsbDsgLy8gU2luY2UgdGhpcyBpcyBjb25jZXB0dWFsbHkgYSBuZXcgZmliZXIsIHNjaGVkdWxlIGEgUGxhY2VtZW50IGVmZmVjdFxuXG4gICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBQbGFjZW1lbnQ7XG4gICAgfSAvLyBJbiB0aGUgaW5pdGlhbCBwYXNzIHdlIG1pZ2h0IG5lZWQgdG8gY29uc3RydWN0IHRoZSBpbnN0YW5jZS5cblxuXG4gICAgY29uc3RydWN0Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMpO1xuICAgIG1vdW50Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHJlbmRlckxhbmVzKTtcbiAgICBzaG91bGRVcGRhdGUgPSB0cnVlO1xuICB9IGVsc2UgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAvLyBJbiBhIHJlc3VtZSwgd2UnbGwgYWxyZWFkeSBoYXZlIGFuIGluc3RhbmNlIHdlIGNhbiByZXVzZS5cbiAgICBzaG91bGRVcGRhdGUgPSByZXN1bWVNb3VudENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCByZW5kZXJMYW5lcyk7XG4gIH0gZWxzZSB7XG4gICAgc2hvdWxkVXBkYXRlID0gdXBkYXRlQ2xhc3NJbnN0YW5jZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHJlbmRlckxhbmVzKTtcbiAgfVxuXG4gIHZhciBuZXh0VW5pdE9mV29yayA9IGZpbmlzaENsYXNzQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHNob3VsZFVwZGF0ZSwgaGFzQ29udGV4dCwgcmVuZGVyTGFuZXMpO1xuXG4gIHtcbiAgICB2YXIgaW5zdCA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcblxuICAgIGlmIChzaG91bGRVcGRhdGUgJiYgaW5zdC5wcm9wcyAhPT0gbmV4dFByb3BzKSB7XG4gICAgICBpZiAoIWRpZFdhcm5BYm91dFJlYXNzaWduaW5nUHJvcHMpIHtcbiAgICAgICAgZXJyb3IoJ0l0IGxvb2tzIGxpa2UgJXMgaXMgcmVhc3NpZ25pbmcgaXRzIG93biBgdGhpcy5wcm9wc2Agd2hpbGUgcmVuZGVyaW5nLiAnICsgJ1RoaXMgaXMgbm90IHN1cHBvcnRlZCBhbmQgY2FuIGxlYWQgdG8gY29uZnVzaW5nIGJ1Z3MuJywgZ2V0Q29tcG9uZW50TmFtZSh3b3JrSW5Qcm9ncmVzcy50eXBlKSB8fCAnYSBjb21wb25lbnQnKTtcbiAgICAgIH1cblxuICAgICAgZGlkV2FybkFib3V0UmVhc3NpZ25pbmdQcm9wcyA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5leHRVbml0T2ZXb3JrO1xufVxuXG5mdW5jdGlvbiBmaW5pc2hDbGFzc0NvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBzaG91bGRVcGRhdGUsIGhhc0NvbnRleHQsIHJlbmRlckxhbmVzKSB7XG4gIC8vIFJlZnMgc2hvdWxkIHVwZGF0ZSBldmVuIGlmIHNob3VsZENvbXBvbmVudFVwZGF0ZSByZXR1cm5zIGZhbHNlXG4gIG1hcmtSZWYoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpO1xuICB2YXIgZGlkQ2FwdHVyZUVycm9yID0gKHdvcmtJblByb2dyZXNzLmZsYWdzICYgRGlkQ2FwdHVyZSkgIT09IE5vRmxhZ3M7XG5cbiAgaWYgKCFzaG91bGRVcGRhdGUgJiYgIWRpZENhcHR1cmVFcnJvcikge1xuICAgIC8vIENvbnRleHQgcHJvdmlkZXJzIHNob3VsZCBkZWZlciB0byBzQ1UgZm9yIHJlbmRlcmluZ1xuICAgIGlmIChoYXNDb250ZXh0KSB7XG4gICAgICBpbnZhbGlkYXRlQ29udGV4dFByb3ZpZGVyKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIGZhbHNlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICB9XG5cbiAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlOyAvLyBSZXJlbmRlclxuXG4gIFJlYWN0Q3VycmVudE93bmVyJDEuY3VycmVudCA9IHdvcmtJblByb2dyZXNzO1xuICB2YXIgbmV4dENoaWxkcmVuO1xuXG4gIGlmIChkaWRDYXB0dXJlRXJyb3IgJiYgdHlwZW9mIENvbXBvbmVudC5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBJZiB3ZSBjYXB0dXJlZCBhbiBlcnJvciwgYnV0IGdldERlcml2ZWRTdGF0ZUZyb21FcnJvciBpcyBub3QgZGVmaW5lZCxcbiAgICAvLyB1bm1vdW50IGFsbCB0aGUgY2hpbGRyZW4uIGNvbXBvbmVudERpZENhdGNoIHdpbGwgc2NoZWR1bGUgYW4gdXBkYXRlIHRvXG4gICAgLy8gcmUtcmVuZGVyIGEgZmFsbGJhY2suIFRoaXMgaXMgdGVtcG9yYXJ5IHVudGlsIHdlIG1pZ3JhdGUgZXZlcnlvbmUgdG9cbiAgICAvLyB0aGUgbmV3IEFQSS5cbiAgICAvLyBUT0RPOiBXYXJuIGluIGEgZnV0dXJlIHJlbGVhc2UuXG4gICAgbmV4dENoaWxkcmVuID0gbnVsbDtcblxuICAgIHtcbiAgICAgIHN0b3BQcm9maWxlclRpbWVySWZSdW5uaW5nKCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHtcbiAgICAgIHNldElzUmVuZGVyaW5nKHRydWUpO1xuICAgICAgbmV4dENoaWxkcmVuID0gaW5zdGFuY2UucmVuZGVyKCk7XG5cbiAgICAgIGlmICggd29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdE1vZGUpIHtcbiAgICAgICAgZGlzYWJsZUxvZ3MoKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGluc3RhbmNlLnJlbmRlcigpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHJlZW5hYmxlTG9ncygpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHNldElzUmVuZGVyaW5nKGZhbHNlKTtcbiAgICB9XG4gIH0gLy8gUmVhY3QgRGV2VG9vbHMgcmVhZHMgdGhpcyBmbGFnLlxuXG5cbiAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gUGVyZm9ybWVkV29yaztcblxuICBpZiAoY3VycmVudCAhPT0gbnVsbCAmJiBkaWRDYXB0dXJlRXJyb3IpIHtcbiAgICAvLyBJZiB3ZSdyZSByZWNvdmVyaW5nIGZyb20gYW4gZXJyb3IsIHJlY29uY2lsZSB3aXRob3V0IHJldXNpbmcgYW55IG9mXG4gICAgLy8gdGhlIGV4aXN0aW5nIGNoaWxkcmVuLiBDb25jZXB0dWFsbHksIHRoZSBub3JtYWwgY2hpbGRyZW4gYW5kIHRoZSBjaGlsZHJlblxuICAgIC8vIHRoYXQgYXJlIHNob3duIG9uIGVycm9yIGFyZSB0d28gZGlmZmVyZW50IHNldHMsIHNvIHdlIHNob3VsZG4ndCByZXVzZVxuICAgIC8vIG5vcm1hbCBjaGlsZHJlbiBldmVuIGlmIHRoZWlyIGlkZW50aXRpZXMgbWF0Y2guXG4gICAgZm9yY2VVbm1vdW50Q3VycmVudEFuZFJlY29uY2lsZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIH0gZWxzZSB7XG4gICAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICB9IC8vIE1lbW9pemUgc3RhdGUgdXNpbmcgdGhlIHZhbHVlcyB3ZSBqdXN0IHVzZWQgdG8gcmVuZGVyLlxuICAvLyBUT0RPOiBSZXN0cnVjdHVyZSBzbyB3ZSBuZXZlciByZWFkIHZhbHVlcyBmcm9tIHRoZSBpbnN0YW5jZS5cblxuXG4gIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBpbnN0YW5jZS5zdGF0ZTsgLy8gVGhlIGNvbnRleHQgbWlnaHQgaGF2ZSBjaGFuZ2VkIHNvIHdlIG5lZWQgdG8gcmVjYWxjdWxhdGUgaXQuXG5cbiAgaWYgKGhhc0NvbnRleHQpIHtcbiAgICBpbnZhbGlkYXRlQ29udGV4dFByb3ZpZGVyKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHRydWUpO1xuICB9XG5cbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuXG5mdW5jdGlvbiBwdXNoSG9zdFJvb3RDb250ZXh0KHdvcmtJblByb2dyZXNzKSB7XG4gIHZhciByb290ID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuXG4gIGlmIChyb290LnBlbmRpbmdDb250ZXh0KSB7XG4gICAgcHVzaFRvcExldmVsQ29udGV4dE9iamVjdCh3b3JrSW5Qcm9ncmVzcywgcm9vdC5wZW5kaW5nQ29udGV4dCwgcm9vdC5wZW5kaW5nQ29udGV4dCAhPT0gcm9vdC5jb250ZXh0KTtcbiAgfSBlbHNlIGlmIChyb290LmNvbnRleHQpIHtcbiAgICAvLyBTaG91bGQgYWx3YXlzIGJlIHNldFxuICAgIHB1c2hUb3BMZXZlbENvbnRleHRPYmplY3Qod29ya0luUHJvZ3Jlc3MsIHJvb3QuY29udGV4dCwgZmFsc2UpO1xuICB9XG5cbiAgcHVzaEhvc3RDb250YWluZXIod29ya0luUHJvZ3Jlc3MsIHJvb3QuY29udGFpbmVySW5mbyk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUhvc3RSb290KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICBwdXNoSG9zdFJvb3RDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgdmFyIHVwZGF0ZVF1ZXVlID0gd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWU7XG5cbiAgaWYgKCEoY3VycmVudCAhPT0gbnVsbCAmJiB1cGRhdGVRdWV1ZSAhPT0gbnVsbCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJJZiB0aGUgcm9vdCBkb2VzIG5vdCBoYXZlIGFuIHVwZGF0ZVF1ZXVlLCB3ZSBzaG91bGQgaGF2ZSBhbHJlYWR5IGJhaWxlZCBvdXQuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICB9XG4gIH1cblxuICB2YXIgbmV4dFByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICB2YXIgcHJldlN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgdmFyIHByZXZDaGlsZHJlbiA9IHByZXZTdGF0ZSAhPT0gbnVsbCA/IHByZXZTdGF0ZS5lbGVtZW50IDogbnVsbDtcbiAgY2xvbmVVcGRhdGVRdWV1ZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7XG4gIHByb2Nlc3NVcGRhdGVRdWV1ZSh3b3JrSW5Qcm9ncmVzcywgbmV4dFByb3BzLCBudWxsLCByZW5kZXJMYW5lcyk7XG4gIHZhciBuZXh0U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlOyAvLyBDYXV0aW9uOiBSZWFjdCBEZXZUb29scyBjdXJyZW50bHkgZGVwZW5kcyBvbiB0aGlzIHByb3BlcnR5XG4gIC8vIGJlaW5nIGNhbGxlZCBcImVsZW1lbnRcIi5cblxuICB2YXIgbmV4dENoaWxkcmVuID0gbmV4dFN0YXRlLmVsZW1lbnQ7XG5cbiAgaWYgKG5leHRDaGlsZHJlbiA9PT0gcHJldkNoaWxkcmVuKSB7XG4gICAgcmVzZXRIeWRyYXRpb25TdGF0ZSgpO1xuICAgIHJldHVybiBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gIH1cblxuICB2YXIgcm9vdCA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcblxuICBpZiAocm9vdC5oeWRyYXRlICYmIGVudGVySHlkcmF0aW9uU3RhdGUod29ya0luUHJvZ3Jlc3MpKSB7XG4gICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhbnkgY3VycmVudCBjaGlsZHJlbiB0aGlzIG1pZ2h0IGJlIHRoZSBmaXJzdCBwYXNzLlxuICAgIC8vIFdlIGFsd2F5cyB0cnkgdG8gaHlkcmF0ZS4gSWYgdGhpcyBpc24ndCBhIGh5ZHJhdGlvbiBwYXNzIHRoZXJlIHdvbid0XG4gICAgLy8gYmUgYW55IGNoaWxkcmVuIHRvIGh5ZHJhdGUgd2hpY2ggaXMgZWZmZWN0aXZlbHkgdGhlIHNhbWUgdGhpbmcgYXNcbiAgICAvLyBub3QgaHlkcmF0aW5nLlxuICAgIHtcbiAgICAgIHZhciBtdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhID0gcm9vdC5tdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhO1xuXG4gICAgICBpZiAobXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YSAhPSBudWxsKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YS5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgICAgIHZhciBtdXRhYmxlU291cmNlID0gbXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YVtpXTtcbiAgICAgICAgICB2YXIgdmVyc2lvbiA9IG11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGFbaSArIDFdO1xuICAgICAgICAgIHNldFdvcmtJblByb2dyZXNzVmVyc2lvbihtdXRhYmxlU291cmNlLCB2ZXJzaW9uKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBjaGlsZCA9IG1vdW50Q2hpbGRGaWJlcnMod29ya0luUHJvZ3Jlc3MsIG51bGwsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gY2hpbGQ7XG4gICAgdmFyIG5vZGUgPSBjaGlsZDtcblxuICAgIHdoaWxlIChub2RlKSB7XG4gICAgICAvLyBNYXJrIGVhY2ggY2hpbGQgYXMgaHlkcmF0aW5nLiBUaGlzIGlzIGEgZmFzdCBwYXRoIHRvIGtub3cgd2hldGhlciB0aGlzXG4gICAgICAvLyB0cmVlIGlzIHBhcnQgb2YgYSBoeWRyYXRpbmcgdHJlZS4gVGhpcyBpcyB1c2VkIHRvIGRldGVybWluZSBpZiBhIGNoaWxkXG4gICAgICAvLyBub2RlIGhhcyBmdWxseSBtb3VudGVkIHlldCwgYW5kIGZvciBzY2hlZHVsaW5nIGV2ZW50IHJlcGxheWluZy5cbiAgICAgIC8vIENvbmNlcHR1YWxseSB0aGlzIGlzIHNpbWlsYXIgdG8gUGxhY2VtZW50IGluIHRoYXQgYSBuZXcgc3VidHJlZSBpc1xuICAgICAgLy8gaW5zZXJ0ZWQgaW50byB0aGUgUmVhY3QgdHJlZSBoZXJlLiBJdCBqdXN0IGhhcHBlbnMgdG8gbm90IG5lZWQgRE9NXG4gICAgICAvLyBtdXRhdGlvbnMgYmVjYXVzZSBpdCBhbHJlYWR5IGV4aXN0cy5cbiAgICAgIG5vZGUuZmxhZ3MgPSBub2RlLmZsYWdzICYgflBsYWNlbWVudCB8IEh5ZHJhdGluZztcbiAgICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIE90aGVyd2lzZSByZXNldCBoeWRyYXRpb24gc3RhdGUgaW4gY2FzZSB3ZSBhYm9ydGVkIGFuZCByZXN1bWVkIGFub3RoZXJcbiAgICAvLyByb290LlxuICAgIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgICByZXNldEh5ZHJhdGlvblN0YXRlKCk7XG4gIH1cblxuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUhvc3RDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHB1c2hIb3N0Q29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG5cbiAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICB0cnlUb0NsYWltTmV4dEh5ZHJhdGFibGVJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcyk7XG4gIH1cblxuICB2YXIgdHlwZSA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG4gIHZhciBuZXh0UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gIHZhciBwcmV2UHJvcHMgPSBjdXJyZW50ICE9PSBudWxsID8gY3VycmVudC5tZW1vaXplZFByb3BzIDogbnVsbDtcbiAgdmFyIG5leHRDaGlsZHJlbiA9IG5leHRQcm9wcy5jaGlsZHJlbjtcbiAgdmFyIGlzRGlyZWN0VGV4dENoaWxkID0gc2hvdWxkU2V0VGV4dENvbnRlbnQodHlwZSwgbmV4dFByb3BzKTtcblxuICBpZiAoaXNEaXJlY3RUZXh0Q2hpbGQpIHtcbiAgICAvLyBXZSBzcGVjaWFsIGNhc2UgYSBkaXJlY3QgdGV4dCBjaGlsZCBvZiBhIGhvc3Qgbm9kZS4gVGhpcyBpcyBhIGNvbW1vblxuICAgIC8vIGNhc2UuIFdlIHdvbid0IGhhbmRsZSBpdCBhcyBhIHJlaWZpZWQgY2hpbGQuIFdlIHdpbGwgaW5zdGVhZCBoYW5kbGVcbiAgICAvLyB0aGlzIGluIHRoZSBob3N0IGVudmlyb25tZW50IHRoYXQgYWxzbyBoYXMgYWNjZXNzIHRvIHRoaXMgcHJvcC4gVGhhdFxuICAgIC8vIGF2b2lkcyBhbGxvY2F0aW5nIGFub3RoZXIgSG9zdFRleHQgZmliZXIgYW5kIHRyYXZlcnNpbmcgaXQuXG4gICAgbmV4dENoaWxkcmVuID0gbnVsbDtcbiAgfSBlbHNlIGlmIChwcmV2UHJvcHMgIT09IG51bGwgJiYgc2hvdWxkU2V0VGV4dENvbnRlbnQodHlwZSwgcHJldlByb3BzKSkge1xuICAgIC8vIElmIHdlJ3JlIHN3aXRjaGluZyBmcm9tIGEgZGlyZWN0IHRleHQgY2hpbGQgdG8gYSBub3JtYWwgY2hpbGQsIG9yIHRvXG4gICAgLy8gZW1wdHksIHdlIG5lZWQgdG8gc2NoZWR1bGUgdGhlIHRleHQgY29udGVudCB0byBiZSByZXNldC5cbiAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBDb250ZW50UmVzZXQ7XG4gIH1cblxuICBtYXJrUmVmKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKTtcbiAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUhvc3RUZXh0KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKSB7XG4gIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgdHJ5VG9DbGFpbU5leHRIeWRyYXRhYmxlSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MpO1xuICB9IC8vIE5vdGhpbmcgdG8gZG8gaGVyZS4gVGhpcyBpcyB0ZXJtaW5hbC4gV2UnbGwgZG8gdGhlIGNvbXBsZXRpb24gc3RlcFxuICAvLyBpbW1lZGlhdGVseSBhZnRlci5cblxuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBtb3VudExhenlDb21wb25lbnQoX2N1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBlbGVtZW50VHlwZSwgdXBkYXRlTGFuZXMsIHJlbmRlckxhbmVzKSB7XG4gIGlmIChfY3VycmVudCAhPT0gbnVsbCkge1xuICAgIC8vIEEgbGF6eSBjb21wb25lbnQgb25seSBtb3VudHMgaWYgaXQgc3VzcGVuZGVkIGluc2lkZSBhIG5vbi1cbiAgICAvLyBjb25jdXJyZW50IHRyZWUsIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZS4gV2Ugd2FudCB0byB0cmVhdCBpdCBsaWtlXG4gICAgLy8gYSBuZXcgbW91bnQsIGV2ZW4gdGhvdWdoIGFuIGVtcHR5IHZlcnNpb24gb2YgaXQgYWxyZWFkeSBjb21taXR0ZWQuXG4gICAgLy8gRGlzY29ubmVjdCB0aGUgYWx0ZXJuYXRlIHBvaW50ZXJzLlxuICAgIF9jdXJyZW50LmFsdGVybmF0ZSA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlID0gbnVsbDsgLy8gU2luY2UgdGhpcyBpcyBjb25jZXB0dWFsbHkgYSBuZXcgZmliZXIsIHNjaGVkdWxlIGEgUGxhY2VtZW50IGVmZmVjdFxuXG4gICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gUGxhY2VtZW50O1xuICB9XG5cbiAgdmFyIHByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICB2YXIgbGF6eUNvbXBvbmVudCA9IGVsZW1lbnRUeXBlO1xuICB2YXIgcGF5bG9hZCA9IGxhenlDb21wb25lbnQuX3BheWxvYWQ7XG4gIHZhciBpbml0ID0gbGF6eUNvbXBvbmVudC5faW5pdDtcbiAgdmFyIENvbXBvbmVudCA9IGluaXQocGF5bG9hZCk7IC8vIFN0b3JlIHRoZSB1bndyYXBwZWQgY29tcG9uZW50IGluIHRoZSB0eXBlLlxuXG4gIHdvcmtJblByb2dyZXNzLnR5cGUgPSBDb21wb25lbnQ7XG4gIHZhciByZXNvbHZlZFRhZyA9IHdvcmtJblByb2dyZXNzLnRhZyA9IHJlc29sdmVMYXp5Q29tcG9uZW50VGFnKENvbXBvbmVudCk7XG4gIHZhciByZXNvbHZlZFByb3BzID0gcmVzb2x2ZURlZmF1bHRQcm9wcyhDb21wb25lbnQsIHByb3BzKTtcbiAgdmFyIGNoaWxkO1xuXG4gIHN3aXRjaCAocmVzb2x2ZWRUYWcpIHtcbiAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgdmFsaWRhdGVGdW5jdGlvbkNvbXBvbmVudEluRGV2KHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQpO1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSBDb21wb25lbnQgPSByZXNvbHZlRnVuY3Rpb25Gb3JIb3RSZWxvYWRpbmcoQ29tcG9uZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkID0gdXBkYXRlRnVuY3Rpb25Db21wb25lbnQobnVsbCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgcmVzb2x2ZWRQcm9wcywgcmVuZGVyTGFuZXMpO1xuICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICB9XG5cbiAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9IENvbXBvbmVudCA9IHJlc29sdmVDbGFzc0ZvckhvdFJlbG9hZGluZyhDb21wb25lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQgPSB1cGRhdGVDbGFzc0NvbXBvbmVudChudWxsLCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCByZXNvbHZlZFByb3BzLCByZW5kZXJMYW5lcyk7XG4gICAgICAgIHJldHVybiBjaGlsZDtcbiAgICAgIH1cblxuICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSBDb21wb25lbnQgPSByZXNvbHZlRm9yd2FyZFJlZkZvckhvdFJlbG9hZGluZyhDb21wb25lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQgPSB1cGRhdGVGb3J3YXJkUmVmKG51bGwsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHJlc29sdmVkUHJvcHMsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgfVxuXG4gICAgY2FzZSBNZW1vQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgaWYgKHdvcmtJblByb2dyZXNzLnR5cGUgIT09IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlKSB7XG4gICAgICAgICAgICB2YXIgb3V0ZXJQcm9wVHlwZXMgPSBDb21wb25lbnQucHJvcFR5cGVzO1xuXG4gICAgICAgICAgICBpZiAob3V0ZXJQcm9wVHlwZXMpIHtcbiAgICAgICAgICAgICAgY2hlY2tQcm9wVHlwZXMob3V0ZXJQcm9wVHlwZXMsIHJlc29sdmVkUHJvcHMsIC8vIFJlc29sdmVkIGZvciBvdXRlciBvbmx5XG4gICAgICAgICAgICAgICdwcm9wJywgZ2V0Q29tcG9uZW50TmFtZShDb21wb25lbnQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZCA9IHVwZGF0ZU1lbW9Db21wb25lbnQobnVsbCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgcmVzb2x2ZURlZmF1bHRQcm9wcyhDb21wb25lbnQudHlwZSwgcmVzb2x2ZWRQcm9wcyksIC8vIFRoZSBpbm5lciB0eXBlIGNhbiBoYXZlIGRlZmF1bHRzIHRvb1xuICAgICAgICB1cGRhdGVMYW5lcywgcmVuZGVyTGFuZXMpO1xuICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICB9XG4gIH1cblxuICB2YXIgaGludCA9ICcnO1xuXG4gIHtcbiAgICBpZiAoQ29tcG9uZW50ICE9PSBudWxsICYmIHR5cGVvZiBDb21wb25lbnQgPT09ICdvYmplY3QnICYmIENvbXBvbmVudC4kJHR5cGVvZiA9PT0gUkVBQ1RfTEFaWV9UWVBFKSB7XG4gICAgICBoaW50ID0gJyBEaWQgeW91IHdyYXAgYSBjb21wb25lbnQgaW4gUmVhY3QubGF6eSgpIG1vcmUgdGhhbiBvbmNlPyc7XG4gICAgfVxuICB9IC8vIFRoaXMgbWVzc2FnZSBpbnRlbnRpb25hbGx5IGRvZXNuJ3QgbWVudGlvbiBGb3J3YXJkUmVmIG9yIE1lbW9Db21wb25lbnRcbiAgLy8gYmVjYXVzZSB0aGUgZmFjdCB0aGF0IGl0J3MgYSBzZXBhcmF0ZSB0eXBlIG9mIHdvcmsgaXMgYW5cbiAgLy8gaW1wbGVtZW50YXRpb24gZGV0YWlsLlxuXG5cbiAge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIkVsZW1lbnQgdHlwZSBpcyBpbnZhbGlkLiBSZWNlaXZlZCBhIHByb21pc2UgdGhhdCByZXNvbHZlcyB0bzogXCIgKyBDb21wb25lbnQgKyBcIi4gTGF6eSBlbGVtZW50IHR5cGUgbXVzdCByZXNvbHZlIHRvIGEgY2xhc3Mgb3IgZnVuY3Rpb24uXCIgKyBoaW50ICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG1vdW50SW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50KF9jdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHJlbmRlckxhbmVzKSB7XG4gIGlmIChfY3VycmVudCAhPT0gbnVsbCkge1xuICAgIC8vIEFuIGluY29tcGxldGUgY29tcG9uZW50IG9ubHkgbW91bnRzIGlmIGl0IHN1c3BlbmRlZCBpbnNpZGUgYSBub24tXG4gICAgLy8gY29uY3VycmVudCB0cmVlLCBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUuIFdlIHdhbnQgdG8gdHJlYXQgaXQgbGlrZVxuICAgIC8vIGEgbmV3IG1vdW50LCBldmVuIHRob3VnaCBhbiBlbXB0eSB2ZXJzaW9uIG9mIGl0IGFscmVhZHkgY29tbWl0dGVkLlxuICAgIC8vIERpc2Nvbm5lY3QgdGhlIGFsdGVybmF0ZSBwb2ludGVycy5cbiAgICBfY3VycmVudC5hbHRlcm5hdGUgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZSA9IG51bGw7IC8vIFNpbmNlIHRoaXMgaXMgY29uY2VwdHVhbGx5IGEgbmV3IGZpYmVyLCBzY2hlZHVsZSBhIFBsYWNlbWVudCBlZmZlY3RcblxuICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBsYWNlbWVudDtcbiAgfSAvLyBQcm9tb3RlIHRoZSBmaWJlciB0byBhIGNsYXNzIGFuZCB0cnkgcmVuZGVyaW5nIGFnYWluLlxuXG5cbiAgd29ya0luUHJvZ3Jlc3MudGFnID0gQ2xhc3NDb21wb25lbnQ7IC8vIFRoZSByZXN0IG9mIHRoaXMgZnVuY3Rpb24gaXMgYSBmb3JrIG9mIGB1cGRhdGVDbGFzc0NvbXBvbmVudGBcbiAgLy8gUHVzaCBjb250ZXh0IHByb3ZpZGVycyBlYXJseSB0byBwcmV2ZW50IGNvbnRleHQgc3RhY2sgbWlzbWF0Y2hlcy5cbiAgLy8gRHVyaW5nIG1vdW50aW5nIHdlIGRvbid0IGtub3cgdGhlIGNoaWxkIGNvbnRleHQgeWV0IGFzIHRoZSBpbnN0YW5jZSBkb2Vzbid0IGV4aXN0LlxuICAvLyBXZSB3aWxsIGludmFsaWRhdGUgdGhlIGNoaWxkIGNvbnRleHQgaW4gZmluaXNoQ2xhc3NDb21wb25lbnQoKSByaWdodCBhZnRlciByZW5kZXJpbmcuXG5cbiAgdmFyIGhhc0NvbnRleHQ7XG5cbiAgaWYgKGlzQ29udGV4dFByb3ZpZGVyKENvbXBvbmVudCkpIHtcbiAgICBoYXNDb250ZXh0ID0gdHJ1ZTtcbiAgICBwdXNoQ29udGV4dFByb3ZpZGVyKHdvcmtJblByb2dyZXNzKTtcbiAgfSBlbHNlIHtcbiAgICBoYXNDb250ZXh0ID0gZmFsc2U7XG4gIH1cblxuICBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICBjb25zdHJ1Y3RDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcyk7XG4gIG1vdW50Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHJlbmRlckxhbmVzKTtcbiAgcmV0dXJuIGZpbmlzaENsYXNzQ29tcG9uZW50KG51bGwsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHRydWUsIGhhc0NvbnRleHQsIHJlbmRlckxhbmVzKTtcbn1cblxuZnVuY3Rpb24gbW91bnRJbmRldGVybWluYXRlQ29tcG9uZW50KF9jdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCByZW5kZXJMYW5lcykge1xuICBpZiAoX2N1cnJlbnQgIT09IG51bGwpIHtcbiAgICAvLyBBbiBpbmRldGVybWluYXRlIGNvbXBvbmVudCBvbmx5IG1vdW50cyBpZiBpdCBzdXNwZW5kZWQgaW5zaWRlIGEgbm9uLVxuICAgIC8vIGNvbmN1cnJlbnQgdHJlZSwgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlLiBXZSB3YW50IHRvIHRyZWF0IGl0IGxpa2VcbiAgICAvLyBhIG5ldyBtb3VudCwgZXZlbiB0aG91Z2ggYW4gZW1wdHkgdmVyc2lvbiBvZiBpdCBhbHJlYWR5IGNvbW1pdHRlZC5cbiAgICAvLyBEaXNjb25uZWN0IHRoZSBhbHRlcm5hdGUgcG9pbnRlcnMuXG4gICAgX2N1cnJlbnQuYWx0ZXJuYXRlID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzcy5hbHRlcm5hdGUgPSBudWxsOyAvLyBTaW5jZSB0aGlzIGlzIGNvbmNlcHR1YWxseSBhIG5ldyBmaWJlciwgc2NoZWR1bGUgYSBQbGFjZW1lbnQgZWZmZWN0XG5cbiAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBQbGFjZW1lbnQ7XG4gIH1cblxuICB2YXIgcHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gIHZhciBjb250ZXh0O1xuXG4gIHtcbiAgICB2YXIgdW5tYXNrZWRDb250ZXh0ID0gZ2V0VW5tYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIGZhbHNlKTtcbiAgICBjb250ZXh0ID0gZ2V0TWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgdW5tYXNrZWRDb250ZXh0KTtcbiAgfVxuXG4gIHByZXBhcmVUb1JlYWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gIHZhciB2YWx1ZTtcblxuICB7XG4gICAgaWYgKENvbXBvbmVudC5wcm90b3R5cGUgJiYgdHlwZW9mIENvbXBvbmVudC5wcm90b3R5cGUucmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUoQ29tcG9uZW50KSB8fCAnVW5rbm93bic7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0QmFkQ2xhc3NbY29tcG9uZW50TmFtZV0pIHtcbiAgICAgICAgZXJyb3IoXCJUaGUgPCVzIC8+IGNvbXBvbmVudCBhcHBlYXJzIHRvIGhhdmUgYSByZW5kZXIgbWV0aG9kLCBidXQgZG9lc24ndCBleHRlbmQgUmVhY3QuQ29tcG9uZW50LiBcIiArICdUaGlzIGlzIGxpa2VseSB0byBjYXVzZSBlcnJvcnMuIENoYW5nZSAlcyB0byBleHRlbmQgUmVhY3QuQ29tcG9uZW50IGluc3RlYWQuJywgY29tcG9uZW50TmFtZSwgY29tcG9uZW50TmFtZSk7XG5cbiAgICAgICAgZGlkV2FybkFib3V0QmFkQ2xhc3NbY29tcG9uZW50TmFtZV0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MucmVjb3JkTGVnYWN5Q29udGV4dFdhcm5pbmcod29ya0luUHJvZ3Jlc3MsIG51bGwpO1xuICAgIH1cblxuICAgIHNldElzUmVuZGVyaW5nKHRydWUpO1xuICAgIFJlYWN0Q3VycmVudE93bmVyJDEuY3VycmVudCA9IHdvcmtJblByb2dyZXNzO1xuICAgIHZhbHVlID0gcmVuZGVyV2l0aEhvb2tzKG51bGwsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHByb3BzLCBjb250ZXh0LCByZW5kZXJMYW5lcyk7XG4gICAgc2V0SXNSZW5kZXJpbmcoZmFsc2UpO1xuICB9IC8vIFJlYWN0IERldlRvb2xzIHJlYWRzIHRoaXMgZmxhZy5cblxuXG4gIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBlcmZvcm1lZFdvcms7XG5cbiAge1xuICAgIC8vIFN1cHBvcnQgZm9yIG1vZHVsZSBjb21wb25lbnRzIGlzIGRlcHJlY2F0ZWQgYW5kIGlzIHJlbW92ZWQgYmVoaW5kIGEgZmxhZy5cbiAgICAvLyBXaGV0aGVyIG9yIG5vdCBpdCB3b3VsZCBjcmFzaCBsYXRlciwgd2Ugd2FudCB0byBzaG93IGEgZ29vZCBtZXNzYWdlIGluIERFViBmaXJzdC5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUucmVuZGVyID09PSAnZnVuY3Rpb24nICYmIHZhbHVlLiQkdHlwZW9mID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhciBfY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUoQ29tcG9uZW50KSB8fCAnVW5rbm93bic7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0TW9kdWxlUGF0dGVybkNvbXBvbmVudFtfY29tcG9uZW50TmFtZV0pIHtcbiAgICAgICAgZXJyb3IoJ1RoZSA8JXMgLz4gY29tcG9uZW50IGFwcGVhcnMgdG8gYmUgYSBmdW5jdGlvbiBjb21wb25lbnQgdGhhdCByZXR1cm5zIGEgY2xhc3MgaW5zdGFuY2UuICcgKyAnQ2hhbmdlICVzIHRvIGEgY2xhc3MgdGhhdCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCBpbnN0ZWFkLiAnICsgXCJJZiB5b3UgY2FuJ3QgdXNlIGEgY2xhc3MgdHJ5IGFzc2lnbmluZyB0aGUgcHJvdG90eXBlIG9uIHRoZSBmdW5jdGlvbiBhcyBhIHdvcmthcm91bmQuIFwiICsgXCJgJXMucHJvdG90eXBlID0gUmVhY3QuQ29tcG9uZW50LnByb3RvdHlwZWAuIERvbid0IHVzZSBhbiBhcnJvdyBmdW5jdGlvbiBzaW5jZSBpdCBcIiArICdjYW5ub3QgYmUgY2FsbGVkIHdpdGggYG5ld2AgYnkgUmVhY3QuJywgX2NvbXBvbmVudE5hbWUsIF9jb21wb25lbnROYW1lLCBfY29tcG9uZW50TmFtZSk7XG5cbiAgICAgICAgZGlkV2FybkFib3V0TW9kdWxlUGF0dGVybkNvbXBvbmVudFtfY29tcG9uZW50TmFtZV0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmICggLy8gUnVuIHRoZXNlIGNoZWNrcyBpbiBwcm9kdWN0aW9uIG9ubHkgaWYgdGhlIGZsYWcgaXMgb2ZmLlxuICAvLyBFdmVudHVhbGx5IHdlJ2xsIGRlbGV0ZSB0aGlzIGJyYW5jaCBhbHRvZ2V0aGVyLlxuICAgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUucmVuZGVyID09PSAnZnVuY3Rpb24nICYmIHZhbHVlLiQkdHlwZW9mID09PSB1bmRlZmluZWQpIHtcbiAgICB7XG4gICAgICB2YXIgX2NvbXBvbmVudE5hbWUyID0gZ2V0Q29tcG9uZW50TmFtZShDb21wb25lbnQpIHx8ICdVbmtub3duJztcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRNb2R1bGVQYXR0ZXJuQ29tcG9uZW50W19jb21wb25lbnROYW1lMl0pIHtcbiAgICAgICAgZXJyb3IoJ1RoZSA8JXMgLz4gY29tcG9uZW50IGFwcGVhcnMgdG8gYmUgYSBmdW5jdGlvbiBjb21wb25lbnQgdGhhdCByZXR1cm5zIGEgY2xhc3MgaW5zdGFuY2UuICcgKyAnQ2hhbmdlICVzIHRvIGEgY2xhc3MgdGhhdCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCBpbnN0ZWFkLiAnICsgXCJJZiB5b3UgY2FuJ3QgdXNlIGEgY2xhc3MgdHJ5IGFzc2lnbmluZyB0aGUgcHJvdG90eXBlIG9uIHRoZSBmdW5jdGlvbiBhcyBhIHdvcmthcm91bmQuIFwiICsgXCJgJXMucHJvdG90eXBlID0gUmVhY3QuQ29tcG9uZW50LnByb3RvdHlwZWAuIERvbid0IHVzZSBhbiBhcnJvdyBmdW5jdGlvbiBzaW5jZSBpdCBcIiArICdjYW5ub3QgYmUgY2FsbGVkIHdpdGggYG5ld2AgYnkgUmVhY3QuJywgX2NvbXBvbmVudE5hbWUyLCBfY29tcG9uZW50TmFtZTIsIF9jb21wb25lbnROYW1lMik7XG5cbiAgICAgICAgZGlkV2FybkFib3V0TW9kdWxlUGF0dGVybkNvbXBvbmVudFtfY29tcG9uZW50TmFtZTJdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IC8vIFByb2NlZWQgdW5kZXIgdGhlIGFzc3VtcHRpb24gdGhhdCB0aGlzIGlzIGEgY2xhc3MgaW5zdGFuY2VcblxuXG4gICAgd29ya0luUHJvZ3Jlc3MudGFnID0gQ2xhc3NDb21wb25lbnQ7IC8vIFRocm93IG91dCBhbnkgaG9va3MgdGhhdCB3ZXJlIHVzZWQuXG5cbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IG51bGw7IC8vIFB1c2ggY29udGV4dCBwcm92aWRlcnMgZWFybHkgdG8gcHJldmVudCBjb250ZXh0IHN0YWNrIG1pc21hdGNoZXMuXG4gICAgLy8gRHVyaW5nIG1vdW50aW5nIHdlIGRvbid0IGtub3cgdGhlIGNoaWxkIGNvbnRleHQgeWV0IGFzIHRoZSBpbnN0YW5jZSBkb2Vzbid0IGV4aXN0LlxuICAgIC8vIFdlIHdpbGwgaW52YWxpZGF0ZSB0aGUgY2hpbGQgY29udGV4dCBpbiBmaW5pc2hDbGFzc0NvbXBvbmVudCgpIHJpZ2h0IGFmdGVyIHJlbmRlcmluZy5cblxuICAgIHZhciBoYXNDb250ZXh0ID0gZmFsc2U7XG5cbiAgICBpZiAoaXNDb250ZXh0UHJvdmlkZXIoQ29tcG9uZW50KSkge1xuICAgICAgaGFzQ29udGV4dCA9IHRydWU7XG4gICAgICBwdXNoQ29udGV4dFByb3ZpZGVyKHdvcmtJblByb2dyZXNzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGFzQ29udGV4dCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSB2YWx1ZS5zdGF0ZSAhPT0gbnVsbCAmJiB2YWx1ZS5zdGF0ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUuc3RhdGUgOiBudWxsO1xuICAgIGluaXRpYWxpemVVcGRhdGVRdWV1ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgdmFyIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9IENvbXBvbmVudC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM7XG5cbiAgICBpZiAodHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgYXBwbHlEZXJpdmVkU3RhdGVGcm9tUHJvcHMod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLCBwcm9wcyk7XG4gICAgfVxuXG4gICAgYWRvcHRDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCB2YWx1ZSk7XG4gICAgbW91bnRDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHByb3BzLCByZW5kZXJMYW5lcyk7XG4gICAgcmV0dXJuIGZpbmlzaENsYXNzQ29tcG9uZW50KG51bGwsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHRydWUsIGhhc0NvbnRleHQsIHJlbmRlckxhbmVzKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBQcm9jZWVkIHVuZGVyIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhpcyBpcyBhIGZ1bmN0aW9uIGNvbXBvbmVudFxuICAgIHdvcmtJblByb2dyZXNzLnRhZyA9IEZ1bmN0aW9uQ29tcG9uZW50O1xuXG4gICAge1xuXG4gICAgICBpZiAoIHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RNb2RlKSB7XG4gICAgICAgIGRpc2FibGVMb2dzKCk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB2YWx1ZSA9IHJlbmRlcldpdGhIb29rcyhudWxsLCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBwcm9wcywgY29udGV4dCwgcmVuZGVyTGFuZXMpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHJlZW5hYmxlTG9ncygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVjb25jaWxlQ2hpbGRyZW4obnVsbCwgd29ya0luUHJvZ3Jlc3MsIHZhbHVlLCByZW5kZXJMYW5lcyk7XG5cbiAgICB7XG4gICAgICB2YWxpZGF0ZUZ1bmN0aW9uQ29tcG9uZW50SW5EZXYod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICB9XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlRnVuY3Rpb25Db21wb25lbnRJbkRldih3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50KSB7XG4gIHtcbiAgICBpZiAoQ29tcG9uZW50KSB7XG4gICAgICBpZiAoQ29tcG9uZW50LmNoaWxkQ29udGV4dFR5cGVzKSB7XG4gICAgICAgIGVycm9yKCclcyguLi4pOiBjaGlsZENvbnRleHRUeXBlcyBjYW5ub3QgYmUgZGVmaW5lZCBvbiBhIGZ1bmN0aW9uIGNvbXBvbmVudC4nLCBDb21wb25lbnQuZGlzcGxheU5hbWUgfHwgQ29tcG9uZW50Lm5hbWUgfHwgJ0NvbXBvbmVudCcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5yZWYgIT09IG51bGwpIHtcbiAgICAgIHZhciBpbmZvID0gJyc7XG4gICAgICB2YXIgb3duZXJOYW1lID0gZ2V0Q3VycmVudEZpYmVyT3duZXJOYW1lSW5EZXZPck51bGwoKTtcblxuICAgICAgaWYgKG93bmVyTmFtZSkge1xuICAgICAgICBpbmZvICs9ICdcXG5cXG5DaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgJyArIG93bmVyTmFtZSArICdgLic7XG4gICAgICB9XG5cbiAgICAgIHZhciB3YXJuaW5nS2V5ID0gb3duZXJOYW1lIHx8IHdvcmtJblByb2dyZXNzLl9kZWJ1Z0lEIHx8ICcnO1xuICAgICAgdmFyIGRlYnVnU291cmNlID0gd29ya0luUHJvZ3Jlc3MuX2RlYnVnU291cmNlO1xuXG4gICAgICBpZiAoZGVidWdTb3VyY2UpIHtcbiAgICAgICAgd2FybmluZ0tleSA9IGRlYnVnU291cmNlLmZpbGVOYW1lICsgJzonICsgZGVidWdTb3VyY2UubGluZU51bWJlcjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRGdW5jdGlvblJlZnNbd2FybmluZ0tleV0pIHtcbiAgICAgICAgZGlkV2FybkFib3V0RnVuY3Rpb25SZWZzW3dhcm5pbmdLZXldID0gdHJ1ZTtcblxuICAgICAgICBlcnJvcignRnVuY3Rpb24gY29tcG9uZW50cyBjYW5ub3QgYmUgZ2l2ZW4gcmVmcy4gJyArICdBdHRlbXB0cyB0byBhY2Nlc3MgdGhpcyByZWYgd2lsbCBmYWlsLiAnICsgJ0RpZCB5b3UgbWVhbiB0byB1c2UgUmVhY3QuZm9yd2FyZFJlZigpPyVzJywgaW5mbyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBDb21wb25lbnQuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB2YXIgX2NvbXBvbmVudE5hbWUzID0gZ2V0Q29tcG9uZW50TmFtZShDb21wb25lbnQpIHx8ICdVbmtub3duJztcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRHZXREZXJpdmVkU3RhdGVPbkZ1bmN0aW9uQ29tcG9uZW50W19jb21wb25lbnROYW1lM10pIHtcbiAgICAgICAgZXJyb3IoJyVzOiBGdW5jdGlvbiBjb21wb25lbnRzIGRvIG5vdCBzdXBwb3J0IGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcy4nLCBfY29tcG9uZW50TmFtZTMpO1xuXG4gICAgICAgIGRpZFdhcm5BYm91dEdldERlcml2ZWRTdGF0ZU9uRnVuY3Rpb25Db21wb25lbnRbX2NvbXBvbmVudE5hbWUzXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBDb21wb25lbnQuY29udGV4dFR5cGUgPT09ICdvYmplY3QnICYmIENvbXBvbmVudC5jb250ZXh0VHlwZSAhPT0gbnVsbCkge1xuICAgICAgdmFyIF9jb21wb25lbnROYW1lNCA9IGdldENvbXBvbmVudE5hbWUoQ29tcG9uZW50KSB8fCAnVW5rbm93bic7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0Q29udGV4dFR5cGVPbkZ1bmN0aW9uQ29tcG9uZW50W19jb21wb25lbnROYW1lNF0pIHtcbiAgICAgICAgZXJyb3IoJyVzOiBGdW5jdGlvbiBjb21wb25lbnRzIGRvIG5vdCBzdXBwb3J0IGNvbnRleHRUeXBlLicsIF9jb21wb25lbnROYW1lNCk7XG5cbiAgICAgICAgZGlkV2FybkFib3V0Q29udGV4dFR5cGVPbkZ1bmN0aW9uQ29tcG9uZW50W19jb21wb25lbnROYW1lNF0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgU1VTUEVOREVEX01BUktFUiA9IHtcbiAgZGVoeWRyYXRlZDogbnVsbCxcbiAgcmV0cnlMYW5lOiBOb0xhbmVcbn07XG5cbmZ1bmN0aW9uIG1vdW50U3VzcGVuc2VPZmZzY3JlZW5TdGF0ZShyZW5kZXJMYW5lcykge1xuICByZXR1cm4ge1xuICAgIGJhc2VMYW5lczogcmVuZGVyTGFuZXNcbiAgfTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlU3VzcGVuc2VPZmZzY3JlZW5TdGF0ZShwcmV2T2Zmc2NyZWVuU3RhdGUsIHJlbmRlckxhbmVzKSB7XG4gIHJldHVybiB7XG4gICAgYmFzZUxhbmVzOiBtZXJnZUxhbmVzKHByZXZPZmZzY3JlZW5TdGF0ZS5iYXNlTGFuZXMsIHJlbmRlckxhbmVzKVxuICB9O1xufSAvLyBUT0RPOiBQcm9iYWJseSBzaG91bGQgaW5saW5lIHRoaXMgYmFja1xuXG5cbmZ1bmN0aW9uIHNob3VsZFJlbWFpbk9uRmFsbGJhY2soc3VzcGVuc2VDb250ZXh0LCBjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgLy8gSWYgd2UncmUgYWxyZWFkeSBzaG93aW5nIGEgZmFsbGJhY2ssIHRoZXJlIGFyZSBjYXNlcyB3aGVyZSB3ZSBuZWVkIHRvXG4gIC8vIHJlbWFpbiBvbiB0aGF0IGZhbGxiYWNrIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgY29udGVudCBoYXMgcmVzb2x2ZWQuXG4gIC8vIEZvciBleGFtcGxlLCBTdXNwZW5zZUxpc3QgY29vcmRpbmF0ZXMgd2hlbiBuZXN0ZWQgY29udGVudCBhcHBlYXJzLlxuICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgIHZhciBzdXNwZW5zZVN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuXG4gICAgaWYgKHN1c3BlbnNlU3RhdGUgPT09IG51bGwpIHtcbiAgICAgIC8vIEN1cnJlbnRseSBzaG93aW5nIGNvbnRlbnQuIERvbid0IGhpZGUgaXQsIGV2ZW4gaWYgRm9yY2VTdXNwZW5zZUZhbGxhY2tcbiAgICAgIC8vIGlzIHRydWUuIE1vcmUgcHJlY2lzZSBuYW1lIG1pZ2h0IGJlIFwiRm9yY2VSZW1haW5TdXNwZW5zZUZhbGxiYWNrXCIuXG4gICAgICAvLyBOb3RlOiBUaGlzIGlzIGEgZmFjdG9yaW5nIHNtZWxsLiBDYW4ndCByZW1haW4gb24gYSBmYWxsYmFjayBpZiB0aGVyZSdzXG4gICAgICAvLyBubyBmYWxsYmFjayB0byByZW1haW4gb24uXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9IC8vIE5vdCBjdXJyZW50bHkgc2hvd2luZyBjb250ZW50LiBDb25zdWx0IHRoZSBTdXNwZW5zZSBjb250ZXh0LlxuXG5cbiAgcmV0dXJuIGhhc1N1c3BlbnNlQ29udGV4dChzdXNwZW5zZUNvbnRleHQsIEZvcmNlU3VzcGVuc2VGYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIGdldFJlbWFpbmluZ1dvcmtJblByaW1hcnlUcmVlKGN1cnJlbnQsIHJlbmRlckxhbmVzKSB7XG4gIC8vIFRPRE86IFNob3VsZCBub3QgcmVtb3ZlIHJlbmRlciBsYW5lcyB0aGF0IHdlcmUgcGluZ2VkIGR1cmluZyB0aGlzIHJlbmRlclxuICByZXR1cm4gcmVtb3ZlTGFuZXMoY3VycmVudC5jaGlsZExhbmVzLCByZW5kZXJMYW5lcyk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVN1c3BlbnNlQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICB2YXIgbmV4dFByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzOyAvLyBUaGlzIGlzIHVzZWQgYnkgRGV2VG9vbHMgdG8gZm9yY2UgYSBib3VuZGFyeSB0byBzdXNwZW5kLlxuXG4gIHtcbiAgICBpZiAoc2hvdWxkU3VzcGVuZCh3b3JrSW5Qcm9ncmVzcykpIHtcbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IERpZENhcHR1cmU7XG4gICAgfVxuICB9XG5cbiAgdmFyIHN1c3BlbnNlQ29udGV4dCA9IHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudDtcbiAgdmFyIHNob3dGYWxsYmFjayA9IGZhbHNlO1xuICB2YXIgZGlkU3VzcGVuZCA9ICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIERpZENhcHR1cmUpICE9PSBOb0ZsYWdzO1xuXG4gIGlmIChkaWRTdXNwZW5kIHx8IHNob3VsZFJlbWFpbk9uRmFsbGJhY2soc3VzcGVuc2VDb250ZXh0LCBjdXJyZW50KSkge1xuICAgIC8vIFNvbWV0aGluZyBpbiB0aGlzIGJvdW5kYXJ5J3Mgc3VidHJlZSBhbHJlYWR5IHN1c3BlbmRlZC4gU3dpdGNoIHRvXG4gICAgLy8gcmVuZGVyaW5nIHRoZSBmYWxsYmFjayBjaGlsZHJlbi5cbiAgICBzaG93RmFsbGJhY2sgPSB0cnVlO1xuICAgIHdvcmtJblByb2dyZXNzLmZsYWdzICY9IH5EaWRDYXB0dXJlO1xuICB9IGVsc2Uge1xuICAgIC8vIEF0dGVtcHRpbmcgdGhlIG1haW4gY29udGVudFxuICAgIGlmIChjdXJyZW50ID09PSBudWxsIHx8IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgLy8gVGhpcyBpcyBhIG5ldyBtb3VudCBvciB0aGlzIGJvdW5kYXJ5IGlzIGFscmVhZHkgc2hvd2luZyBhIGZhbGxiYWNrIHN0YXRlLlxuICAgICAgLy8gTWFyayB0aGlzIHN1YnRyZWUgY29udGV4dCBhcyBoYXZpbmcgYXQgbGVhc3Qgb25lIGludmlzaWJsZSBwYXJlbnQgdGhhdCBjb3VsZFxuICAgICAgLy8gaGFuZGxlIHRoZSBmYWxsYmFjayBzdGF0ZS5cbiAgICAgIC8vIEJvdW5kYXJpZXMgd2l0aG91dCBmYWxsYmFja3Mgb3Igc2hvdWxkIGJlIGF2b2lkZWQgYXJlIG5vdCBjb25zaWRlcmVkIHNpbmNlXG4gICAgICAvLyB0aGV5IGNhbm5vdCBoYW5kbGUgcHJlZmVycmVkIGZhbGxiYWNrIHN0YXRlcy5cbiAgICAgIGlmIChuZXh0UHJvcHMuZmFsbGJhY2sgIT09IHVuZGVmaW5lZCAmJiBuZXh0UHJvcHMudW5zdGFibGVfYXZvaWRUaGlzRmFsbGJhY2sgIT09IHRydWUpIHtcbiAgICAgICAgc3VzcGVuc2VDb250ZXh0ID0gYWRkU3VidHJlZVN1c3BlbnNlQ29udGV4dChzdXNwZW5zZUNvbnRleHQsIEludmlzaWJsZVBhcmVudFN1c3BlbnNlQ29udGV4dCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3VzcGVuc2VDb250ZXh0ID0gc2V0RGVmYXVsdFNoYWxsb3dTdXNwZW5zZUNvbnRleHQoc3VzcGVuc2VDb250ZXh0KTtcbiAgcHVzaFN1c3BlbnNlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgc3VzcGVuc2VDb250ZXh0KTsgLy8gT0ssIHRoZSBuZXh0IHBhcnQgaXMgY29uZnVzaW5nLiBXZSdyZSBhYm91dCB0byByZWNvbmNpbGUgdGhlIFN1c3BlbnNlXG4gIC8vIGJvdW5kYXJ5J3MgY2hpbGRyZW4uIFRoaXMgaW52b2x2ZXMgc29tZSBjdXN0b20gcmVjb25jaWxhdGlvbiBsb2dpYy4gVHdvXG4gIC8vIG1haW4gcmVhc29ucyB0aGlzIGlzIHNvIGNvbXBsaWNhdGVkLlxuICAvL1xuICAvLyBGaXJzdCwgTGVnYWN5IE1vZGUgaGFzIGRpZmZlcmVudCBzZW1hbnRpY3MgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LiBUaGVcbiAgLy8gcHJpbWFyeSB0cmVlIHdpbGwgY29tbWl0IGluIGFuIGluY29uc2lzdGVudCBzdGF0ZSwgc28gd2hlbiB3ZSBkbyB0aGVcbiAgLy8gc2Vjb25kIHBhc3MgdG8gcmVuZGVyIHRoZSBmYWxsYmFjaywgd2UgZG8gc29tZSBleGNlZWRpbmdseSwgdWgsIGNsZXZlclxuICAvLyBoYWNrcyB0byBtYWtlIHRoYXQgbm90IHRvdGFsbHkgYnJlYWsuIExpa2UgdHJhbnNmZXJyaW5nIGVmZmVjdHMgYW5kXG4gIC8vIGRlbGV0aW9ucyBmcm9tIGhpZGRlbiB0cmVlLiBJbiBDb25jdXJyZW50IE1vZGUsIGl0J3MgbXVjaCBzaW1wbGVyLFxuICAvLyBiZWNhdXNlIHdlIGJhaWxvdXQgb24gdGhlIHByaW1hcnkgdHJlZSBjb21wbGV0ZWx5IGFuZCBsZWF2ZSBpdCBpbiBpdHMgb2xkXG4gIC8vIHN0YXRlLCBubyBlZmZlY3RzLiBTYW1lIGFzIHdoYXQgd2UgZG8gZm9yIE9mZnNjcmVlbiAoZXhjZXB0IHRoYXRcbiAgLy8gT2Zmc2NyZWVuIGRvZXNuJ3QgaGF2ZSB0aGUgZmlyc3QgcmVuZGVyIHBhc3MpLlxuICAvL1xuICAvLyBTZWNvbmQgaXMgaHlkcmF0aW9uLiBEdXJpbmcgaHlkcmF0aW9uLCB0aGUgU3VzcGVuc2UgZmliZXIgaGFzIGEgc2xpZ2h0bHlcbiAgLy8gZGlmZmVyZW50IGxheW91dCwgd2hlcmUgdGhlIGNoaWxkIHBvaW50cyB0byBhIGRlaHlkcmF0ZWQgZnJhZ21lbnQsIHdoaWNoXG4gIC8vIGNvbnRhaW5zIHRoZSBET00gcmVuZGVyZWQgYnkgdGhlIHNlcnZlci5cbiAgLy9cbiAgLy8gVGhpcmQsIGV2ZW4gaWYgeW91IHNldCBhbGwgdGhhdCBhc2lkZSwgU3VzcGVuc2UgaXMgbGlrZSBlcnJvciBib3VuZGFyaWVzIGluXG4gIC8vIHRoYXQgd2UgZmlyc3Qgd2UgdHJ5IHRvIHJlbmRlciBvbmUgdHJlZSwgYW5kIGlmIHRoYXQgZmFpbHMsIHdlIHJlbmRlciBhZ2FpblxuICAvLyBhbmQgc3dpdGNoIHRvIGEgZGlmZmVyZW50IHRyZWUuIExpa2UgYSB0cnkvY2F0Y2ggYmxvY2suIFNvIHdlIGhhdmUgdG8gdHJhY2tcbiAgLy8gd2hpY2ggYnJhbmNoIHdlJ3JlIGN1cnJlbnRseSByZW5kZXJpbmcuIElkZWFsbHkgd2Ugd291bGQgbW9kZWwgdGhpcyB1c2luZ1xuICAvLyBhIHN0YWNrLlxuXG4gIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgLy8gSW5pdGlhbCBtb3VudFxuICAgIC8vIElmIHdlJ3JlIGN1cnJlbnRseSBoeWRyYXRpbmcsIHRyeSB0byBoeWRyYXRlIHRoaXMgYm91bmRhcnkuXG4gICAgLy8gQnV0IG9ubHkgaWYgdGhpcyBoYXMgYSBmYWxsYmFjay5cbiAgICBpZiAobmV4dFByb3BzLmZhbGxiYWNrICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRyeVRvQ2xhaW1OZXh0SHlkcmF0YWJsZUluc3RhbmNlKHdvcmtJblByb2dyZXNzKTsgLy8gVGhpcyBjb3VsZCd2ZSBiZWVuIGEgZGVoeWRyYXRlZCBzdXNwZW5zZSBjb21wb25lbnQuXG4gICAgfVxuXG4gICAgdmFyIG5leHRQcmltYXJ5Q2hpbGRyZW4gPSBuZXh0UHJvcHMuY2hpbGRyZW47XG4gICAgdmFyIG5leHRGYWxsYmFja0NoaWxkcmVuID0gbmV4dFByb3BzLmZhbGxiYWNrO1xuXG4gICAgaWYgKHNob3dGYWxsYmFjaykge1xuICAgICAgdmFyIGZhbGxiYWNrRnJhZ21lbnQgPSBtb3VudFN1c3BlbnNlRmFsbGJhY2tDaGlsZHJlbih3b3JrSW5Qcm9ncmVzcywgbmV4dFByaW1hcnlDaGlsZHJlbiwgbmV4dEZhbGxiYWNrQ2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgICAgIHZhciBwcmltYXJ5Q2hpbGRGcmFnbWVudCA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQubWVtb2l6ZWRTdGF0ZSA9IG1vdW50U3VzcGVuc2VPZmZzY3JlZW5TdGF0ZShyZW5kZXJMYW5lcyk7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gU1VTUEVOREVEX01BUktFUjtcbiAgICAgIHJldHVybiBmYWxsYmFja0ZyYWdtZW50O1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG5leHRQcm9wcy51bnN0YWJsZV9leHBlY3RlZExvYWRUaW1lID09PSAnbnVtYmVyJykge1xuICAgICAgLy8gVGhpcyBpcyBhIENQVS1ib3VuZCB0cmVlLiBTa2lwIHRoaXMgdHJlZSBhbmQgc2hvdyBhIHBsYWNlaG9sZGVyIHRvXG4gICAgICAvLyB1bmJsb2NrIHRoZSBzdXJyb3VuZGluZyBjb250ZW50LiBUaGVuIGltbWVkaWF0ZWx5IHJldHJ5IGFmdGVyIHRoZVxuICAgICAgLy8gaW5pdGlhbCBjb21taXQuXG4gICAgICB2YXIgX2ZhbGxiYWNrRnJhZ21lbnQgPSBtb3VudFN1c3BlbnNlRmFsbGJhY2tDaGlsZHJlbih3b3JrSW5Qcm9ncmVzcywgbmV4dFByaW1hcnlDaGlsZHJlbiwgbmV4dEZhbGxiYWNrQ2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcblxuICAgICAgdmFyIF9wcmltYXJ5Q2hpbGRGcmFnbWVudCA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgICAgX3ByaW1hcnlDaGlsZEZyYWdtZW50Lm1lbW9pemVkU3RhdGUgPSBtb3VudFN1c3BlbnNlT2Zmc2NyZWVuU3RhdGUocmVuZGVyTGFuZXMpO1xuICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IFNVU1BFTkRFRF9NQVJLRVI7IC8vIFNpbmNlIG5vdGhpbmcgYWN0dWFsbHkgc3VzcGVuZGVkLCB0aGVyZSB3aWxsIG5vdGhpbmcgdG8gcGluZyB0aGlzIHRvXG4gICAgICAvLyBnZXQgaXQgc3RhcnRlZCBiYWNrIHVwIHRvIGF0dGVtcHQgdGhlIG5leHQgaXRlbS4gV2hpbGUgaW4gdGVybXMgb2ZcbiAgICAgIC8vIHByaW9yaXR5IHRoaXMgd29yayBoYXMgdGhlIHNhbWUgcHJpb3JpdHkgYXMgdGhpcyBjdXJyZW50IHJlbmRlciwgaXQnc1xuICAgICAgLy8gbm90IHBhcnQgb2YgdGhlIHNhbWUgdHJhbnNpdGlvbiBvbmNlIHRoZSB0cmFuc2l0aW9uIGhhcyBjb21taXR0ZWQuIElmXG4gICAgICAvLyBpdCdzIHN5bmMsIHdlIHN0aWxsIHdhbnQgdG8geWllbGQgc28gdGhhdCBpdCBjYW4gYmUgcGFpbnRlZC5cbiAgICAgIC8vIENvbmNlcHR1YWxseSwgdGhpcyBpcyByZWFsbHkgdGhlIHNhbWUgYXMgcGluZ2luZy4gV2UgY2FuIHVzZSBhbnlcbiAgICAgIC8vIFJldHJ5TGFuZSBldmVuIGlmIGl0J3MgdGhlIG9uZSBjdXJyZW50bHkgcmVuZGVyaW5nIHNpbmNlIHdlJ3JlIGxlYXZpbmdcbiAgICAgIC8vIGl0IGJlaGluZCBvbiB0aGlzIG5vZGUuXG5cbiAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gU29tZVJldHJ5TGFuZTtcblxuICAgICAge1xuICAgICAgICBtYXJrU3Bhd25lZFdvcmsoU29tZVJldHJ5TGFuZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfZmFsbGJhY2tGcmFnbWVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG1vdW50U3VzcGVuc2VQcmltYXJ5Q2hpbGRyZW4od29ya0luUHJvZ3Jlc3MsIG5leHRQcmltYXJ5Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gVGhpcyBpcyBhbiB1cGRhdGUuXG4gICAgLy8gSWYgdGhlIGN1cnJlbnQgZmliZXIgaGFzIGEgU3VzcGVuc2VTdGF0ZSwgdGhhdCBtZWFucyBpdCdzIGFscmVhZHkgc2hvd2luZ1xuICAgIC8vIGEgZmFsbGJhY2suXG4gICAgdmFyIHByZXZTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcblxuICAgIGlmIChwcmV2U3RhdGUgIT09IG51bGwpIHtcblxuICAgICAgaWYgKHNob3dGYWxsYmFjaykge1xuICAgICAgICB2YXIgX25leHRGYWxsYmFja0NoaWxkcmVuMiA9IG5leHRQcm9wcy5mYWxsYmFjaztcbiAgICAgICAgdmFyIF9uZXh0UHJpbWFyeUNoaWxkcmVuMiA9IG5leHRQcm9wcy5jaGlsZHJlbjtcblxuICAgICAgICB2YXIgX2ZhbGxiYWNrQ2hpbGRGcmFnbWVudCA9IHVwZGF0ZVN1c3BlbnNlRmFsbGJhY2tDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgX25leHRQcmltYXJ5Q2hpbGRyZW4yLCBfbmV4dEZhbGxiYWNrQ2hpbGRyZW4yLCByZW5kZXJMYW5lcyk7XG5cbiAgICAgICAgdmFyIF9wcmltYXJ5Q2hpbGRGcmFnbWVudDMgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgdmFyIHByZXZPZmZzY3JlZW5TdGF0ZSA9IGN1cnJlbnQuY2hpbGQubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgX3ByaW1hcnlDaGlsZEZyYWdtZW50My5tZW1vaXplZFN0YXRlID0gcHJldk9mZnNjcmVlblN0YXRlID09PSBudWxsID8gbW91bnRTdXNwZW5zZU9mZnNjcmVlblN0YXRlKHJlbmRlckxhbmVzKSA6IHVwZGF0ZVN1c3BlbnNlT2Zmc2NyZWVuU3RhdGUocHJldk9mZnNjcmVlblN0YXRlLCByZW5kZXJMYW5lcyk7XG4gICAgICAgIF9wcmltYXJ5Q2hpbGRGcmFnbWVudDMuY2hpbGRMYW5lcyA9IGdldFJlbWFpbmluZ1dvcmtJblByaW1hcnlUcmVlKGN1cnJlbnQsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IFNVU1BFTkRFRF9NQVJLRVI7XG4gICAgICAgIHJldHVybiBfZmFsbGJhY2tDaGlsZEZyYWdtZW50O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIF9uZXh0UHJpbWFyeUNoaWxkcmVuMyA9IG5leHRQcm9wcy5jaGlsZHJlbjtcblxuICAgICAgICB2YXIgX3ByaW1hcnlDaGlsZEZyYWdtZW50NCA9IHVwZGF0ZVN1c3BlbnNlUHJpbWFyeUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBfbmV4dFByaW1hcnlDaGlsZHJlbjMsIHJlbmRlckxhbmVzKTtcblxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgICAgICAgcmV0dXJuIF9wcmltYXJ5Q2hpbGRGcmFnbWVudDQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoZSBjdXJyZW50IHRyZWUgaXMgbm90IGFscmVhZHkgc2hvd2luZyBhIGZhbGxiYWNrLlxuICAgICAgaWYgKHNob3dGYWxsYmFjaykge1xuICAgICAgICAvLyBUaW1lZCBvdXQuXG4gICAgICAgIHZhciBfbmV4dEZhbGxiYWNrQ2hpbGRyZW4zID0gbmV4dFByb3BzLmZhbGxiYWNrO1xuICAgICAgICB2YXIgX25leHRQcmltYXJ5Q2hpbGRyZW40ID0gbmV4dFByb3BzLmNoaWxkcmVuO1xuXG4gICAgICAgIHZhciBfZmFsbGJhY2tDaGlsZEZyYWdtZW50MiA9IHVwZGF0ZVN1c3BlbnNlRmFsbGJhY2tDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgX25leHRQcmltYXJ5Q2hpbGRyZW40LCBfbmV4dEZhbGxiYWNrQ2hpbGRyZW4zLCByZW5kZXJMYW5lcyk7XG5cbiAgICAgICAgdmFyIF9wcmltYXJ5Q2hpbGRGcmFnbWVudDUgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgdmFyIF9wcmV2T2Zmc2NyZWVuU3RhdGUgPSBjdXJyZW50LmNoaWxkLm1lbW9pemVkU3RhdGU7XG4gICAgICAgIF9wcmltYXJ5Q2hpbGRGcmFnbWVudDUubWVtb2l6ZWRTdGF0ZSA9IF9wcmV2T2Zmc2NyZWVuU3RhdGUgPT09IG51bGwgPyBtb3VudFN1c3BlbnNlT2Zmc2NyZWVuU3RhdGUocmVuZGVyTGFuZXMpIDogdXBkYXRlU3VzcGVuc2VPZmZzY3JlZW5TdGF0ZShfcHJldk9mZnNjcmVlblN0YXRlLCByZW5kZXJMYW5lcyk7XG4gICAgICAgIF9wcmltYXJ5Q2hpbGRGcmFnbWVudDUuY2hpbGRMYW5lcyA9IGdldFJlbWFpbmluZ1dvcmtJblByaW1hcnlUcmVlKGN1cnJlbnQsIHJlbmRlckxhbmVzKTsgLy8gU2tpcCB0aGUgcHJpbWFyeSBjaGlsZHJlbiwgYW5kIGNvbnRpbnVlIHdvcmtpbmcgb24gdGhlXG4gICAgICAgIC8vIGZhbGxiYWNrIGNoaWxkcmVuLlxuXG4gICAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBTVVNQRU5ERURfTUFSS0VSO1xuICAgICAgICByZXR1cm4gX2ZhbGxiYWNrQ2hpbGRGcmFnbWVudDI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBTdGlsbCBoYXZlbid0IHRpbWVkIG91dC4gQ29udGludWUgcmVuZGVyaW5nIHRoZSBjaGlsZHJlbiwgbGlrZSB3ZVxuICAgICAgICAvLyBub3JtYWxseSBkby5cbiAgICAgICAgdmFyIF9uZXh0UHJpbWFyeUNoaWxkcmVuNSA9IG5leHRQcm9wcy5jaGlsZHJlbjtcblxuICAgICAgICB2YXIgX3ByaW1hcnlDaGlsZEZyYWdtZW50NiA9IHVwZGF0ZVN1c3BlbnNlUHJpbWFyeUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBfbmV4dFByaW1hcnlDaGlsZHJlbjUsIHJlbmRlckxhbmVzKTtcblxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgICAgICAgcmV0dXJuIF9wcmltYXJ5Q2hpbGRGcmFnbWVudDY7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG1vdW50U3VzcGVuc2VQcmltYXJ5Q2hpbGRyZW4od29ya0luUHJvZ3Jlc3MsIHByaW1hcnlDaGlsZHJlbiwgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIG1vZGUgPSB3b3JrSW5Qcm9ncmVzcy5tb2RlO1xuICB2YXIgcHJpbWFyeUNoaWxkUHJvcHMgPSB7XG4gICAgbW9kZTogJ3Zpc2libGUnLFxuICAgIGNoaWxkcmVuOiBwcmltYXJ5Q2hpbGRyZW5cbiAgfTtcbiAgdmFyIHByaW1hcnlDaGlsZEZyYWdtZW50ID0gY3JlYXRlRmliZXJGcm9tT2Zmc2NyZWVuKHByaW1hcnlDaGlsZFByb3BzLCBtb2RlLCByZW5kZXJMYW5lcywgbnVsbCk7XG4gIHByaW1hcnlDaGlsZEZyYWdtZW50LnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHByaW1hcnlDaGlsZEZyYWdtZW50O1xuICByZXR1cm4gcHJpbWFyeUNoaWxkRnJhZ21lbnQ7XG59XG5cbmZ1bmN0aW9uIG1vdW50U3VzcGVuc2VGYWxsYmFja0NoaWxkcmVuKHdvcmtJblByb2dyZXNzLCBwcmltYXJ5Q2hpbGRyZW4sIGZhbGxiYWNrQ2hpbGRyZW4sIHJlbmRlckxhbmVzKSB7XG4gIHZhciBtb2RlID0gd29ya0luUHJvZ3Jlc3MubW9kZTtcbiAgdmFyIHByb2dyZXNzZWRQcmltYXJ5RnJhZ21lbnQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgdmFyIHByaW1hcnlDaGlsZFByb3BzID0ge1xuICAgIG1vZGU6ICdoaWRkZW4nLFxuICAgIGNoaWxkcmVuOiBwcmltYXJ5Q2hpbGRyZW5cbiAgfTtcbiAgdmFyIHByaW1hcnlDaGlsZEZyYWdtZW50O1xuICB2YXIgZmFsbGJhY2tDaGlsZEZyYWdtZW50O1xuXG4gIGlmICgobW9kZSAmIEJsb2NraW5nTW9kZSkgPT09IE5vTW9kZSAmJiBwcm9ncmVzc2VkUHJpbWFyeUZyYWdtZW50ICE9PSBudWxsKSB7XG4gICAgLy8gSW4gbGVnYWN5IG1vZGUsIHdlIGNvbW1pdCB0aGUgcHJpbWFyeSB0cmVlIGFzIGlmIGl0IHN1Y2Nlc3NmdWxseVxuICAgIC8vIGNvbXBsZXRlZCwgZXZlbiB0aG91Z2ggaXQncyBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUuXG4gICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSBwcm9ncmVzc2VkUHJpbWFyeUZyYWdtZW50O1xuICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LmNoaWxkTGFuZXMgPSBOb0xhbmVzO1xuICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LnBlbmRpbmdQcm9wcyA9IHByaW1hcnlDaGlsZFByb3BzO1xuXG4gICAgaWYgKCB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgUHJvZmlsZU1vZGUpIHtcbiAgICAgIC8vIFJlc2V0IHRoZSBkdXJhdGlvbnMgZnJvbSB0aGUgZmlyc3QgcGFzcyBzbyB0aGV5IGFyZW4ndCBpbmNsdWRlZCBpbiB0aGVcbiAgICAgIC8vIGZpbmFsIGFtb3VudHMuIFRoaXMgc2VlbXMgY291bnRlcmludHVpdGl2ZSwgc2luY2Ugd2UncmUgaW50ZW50aW9uYWxseVxuICAgICAgLy8gbm90IG1lYXN1cmluZyBwYXJ0IG9mIHRoZSByZW5kZXIgcGhhc2UsIGJ1dCB0aGlzIG1ha2VzIGl0IG1hdGNoIHdoYXQgd2VcbiAgICAgIC8vIGRvIGluIENvbmN1cnJlbnQgTW9kZS5cbiAgICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LmFjdHVhbER1cmF0aW9uID0gMDtcbiAgICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LmFjdHVhbFN0YXJ0VGltZSA9IC0xO1xuICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuc2VsZkJhc2VEdXJhdGlvbiA9IDA7XG4gICAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC50cmVlQmFzZUR1cmF0aW9uID0gMDtcbiAgICB9XG5cbiAgICBmYWxsYmFja0NoaWxkRnJhZ21lbnQgPSBjcmVhdGVGaWJlckZyb21GcmFnbWVudChmYWxsYmFja0NoaWxkcmVuLCBtb2RlLCByZW5kZXJMYW5lcywgbnVsbCk7XG4gIH0gZWxzZSB7XG4gICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSBjcmVhdGVGaWJlckZyb21PZmZzY3JlZW4ocHJpbWFyeUNoaWxkUHJvcHMsIG1vZGUsIE5vTGFuZXMsIG51bGwpO1xuICAgIGZhbGxiYWNrQ2hpbGRGcmFnbWVudCA9IGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KGZhbGxiYWNrQ2hpbGRyZW4sIG1vZGUsIHJlbmRlckxhbmVzLCBudWxsKTtcbiAgfVxuXG4gIHByaW1hcnlDaGlsZEZyYWdtZW50LnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICBmYWxsYmFja0NoaWxkRnJhZ21lbnQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gIHByaW1hcnlDaGlsZEZyYWdtZW50LnNpYmxpbmcgPSBmYWxsYmFja0NoaWxkRnJhZ21lbnQ7XG4gIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcHJpbWFyeUNoaWxkRnJhZ21lbnQ7XG4gIHJldHVybiBmYWxsYmFja0NoaWxkRnJhZ21lbnQ7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVdvcmtJblByb2dyZXNzT2Zmc2NyZWVuRmliZXIoY3VycmVudCwgb2Zmc2NyZWVuUHJvcHMpIHtcbiAgLy8gVGhlIHByb3BzIGFyZ3VtZW50IHRvIGBjcmVhdGVXb3JrSW5Qcm9ncmVzc2AgaXMgYGFueWAgdHlwZWQsIHNvIHdlIHVzZSB0aGlzXG4gIC8vIHdyYXBwZXIgZnVuY3Rpb24gdG8gY29uc3RyYWluIGl0LlxuICByZXR1cm4gY3JlYXRlV29ya0luUHJvZ3Jlc3MoY3VycmVudCwgb2Zmc2NyZWVuUHJvcHMpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVTdXNwZW5zZVByaW1hcnlDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcHJpbWFyeUNoaWxkcmVuLCByZW5kZXJMYW5lcykge1xuICB2YXIgY3VycmVudFByaW1hcnlDaGlsZEZyYWdtZW50ID0gY3VycmVudC5jaGlsZDtcbiAgdmFyIGN1cnJlbnRGYWxsYmFja0NoaWxkRnJhZ21lbnQgPSBjdXJyZW50UHJpbWFyeUNoaWxkRnJhZ21lbnQuc2libGluZztcbiAgdmFyIHByaW1hcnlDaGlsZEZyYWdtZW50ID0gY3JlYXRlV29ya0luUHJvZ3Jlc3NPZmZzY3JlZW5GaWJlcihjdXJyZW50UHJpbWFyeUNoaWxkRnJhZ21lbnQsIHtcbiAgICBtb2RlOiAndmlzaWJsZScsXG4gICAgY2hpbGRyZW46IHByaW1hcnlDaGlsZHJlblxuICB9KTtcblxuICBpZiAoKHdvcmtJblByb2dyZXNzLm1vZGUgJiBCbG9ja2luZ01vZGUpID09PSBOb01vZGUpIHtcbiAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5sYW5lcyA9IHJlbmRlckxhbmVzO1xuICB9XG5cbiAgcHJpbWFyeUNoaWxkRnJhZ21lbnQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gIHByaW1hcnlDaGlsZEZyYWdtZW50LnNpYmxpbmcgPSBudWxsO1xuXG4gIGlmIChjdXJyZW50RmFsbGJhY2tDaGlsZEZyYWdtZW50ICE9PSBudWxsKSB7XG4gICAgLy8gRGVsZXRlIHRoZSBmYWxsYmFjayBjaGlsZCBmcmFnbWVudFxuICAgIGN1cnJlbnRGYWxsYmFja0NoaWxkRnJhZ21lbnQubmV4dEVmZmVjdCA9IG51bGw7XG4gICAgY3VycmVudEZhbGxiYWNrQ2hpbGRGcmFnbWVudC5mbGFncyA9IERlbGV0aW9uO1xuICAgIHdvcmtJblByb2dyZXNzLmZpcnN0RWZmZWN0ID0gd29ya0luUHJvZ3Jlc3MubGFzdEVmZmVjdCA9IGN1cnJlbnRGYWxsYmFja0NoaWxkRnJhZ21lbnQ7XG4gIH1cblxuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHByaW1hcnlDaGlsZEZyYWdtZW50O1xuICByZXR1cm4gcHJpbWFyeUNoaWxkRnJhZ21lbnQ7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVN1c3BlbnNlRmFsbGJhY2tDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcHJpbWFyeUNoaWxkcmVuLCBmYWxsYmFja0NoaWxkcmVuLCByZW5kZXJMYW5lcykge1xuICB2YXIgbW9kZSA9IHdvcmtJblByb2dyZXNzLm1vZGU7XG4gIHZhciBjdXJyZW50UHJpbWFyeUNoaWxkRnJhZ21lbnQgPSBjdXJyZW50LmNoaWxkO1xuICB2YXIgY3VycmVudEZhbGxiYWNrQ2hpbGRGcmFnbWVudCA9IGN1cnJlbnRQcmltYXJ5Q2hpbGRGcmFnbWVudC5zaWJsaW5nO1xuICB2YXIgcHJpbWFyeUNoaWxkUHJvcHMgPSB7XG4gICAgbW9kZTogJ2hpZGRlbicsXG4gICAgY2hpbGRyZW46IHByaW1hcnlDaGlsZHJlblxuICB9O1xuICB2YXIgcHJpbWFyeUNoaWxkRnJhZ21lbnQ7XG5cbiAgaWYgKCAvLyBJbiBsZWdhY3kgbW9kZSwgd2UgY29tbWl0IHRoZSBwcmltYXJ5IHRyZWUgYXMgaWYgaXQgc3VjY2Vzc2Z1bGx5XG4gIC8vIGNvbXBsZXRlZCwgZXZlbiB0aG91Z2ggaXQncyBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUuXG4gIChtb2RlICYgQmxvY2tpbmdNb2RlKSA9PT0gTm9Nb2RlICYmIC8vIE1ha2Ugc3VyZSB3ZSdyZSBvbiB0aGUgc2Vjb25kIHBhc3MsIGkuZS4gdGhlIHByaW1hcnkgY2hpbGQgZnJhZ21lbnQgd2FzXG4gIC8vIGFscmVhZHkgY2xvbmVkLiBJbiBsZWdhY3kgbW9kZSwgdGhlIG9ubHkgY2FzZSB3aGVyZSB0aGlzIGlzbid0IHRydWUgaXNcbiAgLy8gd2hlbiBEZXZUb29scyBmb3JjZXMgdXMgdG8gZGlzcGxheSBhIGZhbGxiYWNrOyB3ZSBza2lwIHRoZSBmaXJzdCByZW5kZXJcbiAgLy8gcGFzcyBlbnRpcmVseSBhbmQgZ28gc3RyYWlnaHQgdG8gcmVuZGVyaW5nIHRoZSBmYWxsYmFjay4gKEluIENvbmN1cnJlbnRcbiAgLy8gTW9kZSwgU3VzcGVuc2VMaXN0IGNhbiBhbHNvIHRyaWdnZXIgdGhpcyBzY2VuYXJpbywgYnV0IHRoaXMgaXMgYSBsZWdhY3ktXG4gIC8vIG9ubHkgY29kZXBhdGguKVxuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCAhPT0gY3VycmVudFByaW1hcnlDaGlsZEZyYWdtZW50KSB7XG4gICAgdmFyIHByb2dyZXNzZWRQcmltYXJ5RnJhZ21lbnQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudCA9IHByb2dyZXNzZWRQcmltYXJ5RnJhZ21lbnQ7XG4gICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuY2hpbGRMYW5lcyA9IE5vTGFuZXM7XG4gICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQucGVuZGluZ1Byb3BzID0gcHJpbWFyeUNoaWxkUHJvcHM7XG5cbiAgICBpZiAoIHdvcmtJblByb2dyZXNzLm1vZGUgJiBQcm9maWxlTW9kZSkge1xuICAgICAgLy8gUmVzZXQgdGhlIGR1cmF0aW9ucyBmcm9tIHRoZSBmaXJzdCBwYXNzIHNvIHRoZXkgYXJlbid0IGluY2x1ZGVkIGluIHRoZVxuICAgICAgLy8gZmluYWwgYW1vdW50cy4gVGhpcyBzZWVtcyBjb3VudGVyaW50dWl0aXZlLCBzaW5jZSB3ZSdyZSBpbnRlbnRpb25hbGx5XG4gICAgICAvLyBub3QgbWVhc3VyaW5nIHBhcnQgb2YgdGhlIHJlbmRlciBwaGFzZSwgYnV0IHRoaXMgbWFrZXMgaXQgbWF0Y2ggd2hhdCB3ZVxuICAgICAgLy8gZG8gaW4gQ29uY3VycmVudCBNb2RlLlxuICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuYWN0dWFsRHVyYXRpb24gPSAwO1xuICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuYWN0dWFsU3RhcnRUaW1lID0gLTE7XG4gICAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5zZWxmQmFzZUR1cmF0aW9uID0gY3VycmVudFByaW1hcnlDaGlsZEZyYWdtZW50LnNlbGZCYXNlRHVyYXRpb247XG4gICAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC50cmVlQmFzZUR1cmF0aW9uID0gY3VycmVudFByaW1hcnlDaGlsZEZyYWdtZW50LnRyZWVCYXNlRHVyYXRpb247XG4gICAgfSAvLyBUaGUgZmFsbGJhY2sgZmliZXIgd2FzIGFkZGVkIGFzIGEgZGVsZXRpb24gZWZmZWN0IGR1cmluZyB0aGUgZmlyc3QgcGFzcy5cbiAgICAvLyBIb3dldmVyLCBzaW5jZSB3ZSdyZSBnb2luZyB0byByZW1haW4gb24gdGhlIGZhbGxiYWNrLCB3ZSBubyBsb25nZXIgd2FudFxuICAgIC8vIHRvIGRlbGV0ZSBpdC4gU28gd2UgbmVlZCB0byByZW1vdmUgaXQgZnJvbSB0aGUgbGlzdC4gRGVsZXRpb25zIGFyZSBzdG9yZWRcbiAgICAvLyBvbiB0aGUgc2FtZSBsaXN0IGFzIGVmZmVjdHMuIFdlIHdhbnQgdG8ga2VlcCB0aGUgZWZmZWN0cyBmcm9tIHRoZSBwcmltYXJ5XG4gICAgLy8gdHJlZS4gU28gd2UgY29weSB0aGUgcHJpbWFyeSBjaGlsZCBmcmFnbWVudCdzIGVmZmVjdCBsaXN0LCB3aGljaCBkb2VzIG5vdFxuICAgIC8vIGluY2x1ZGUgdGhlIGZhbGxiYWNrIGRlbGV0aW9uIGVmZmVjdC5cblxuXG4gICAgdmFyIHByb2dyZXNzZWRMYXN0RWZmZWN0ID0gcHJpbWFyeUNoaWxkRnJhZ21lbnQubGFzdEVmZmVjdDtcblxuICAgIGlmIChwcm9ncmVzc2VkTGFzdEVmZmVjdCAhPT0gbnVsbCkge1xuICAgICAgd29ya0luUHJvZ3Jlc3MuZmlyc3RFZmZlY3QgPSBwcmltYXJ5Q2hpbGRGcmFnbWVudC5maXJzdEVmZmVjdDtcbiAgICAgIHdvcmtJblByb2dyZXNzLmxhc3RFZmZlY3QgPSBwcm9ncmVzc2VkTGFzdEVmZmVjdDtcbiAgICAgIHByb2dyZXNzZWRMYXN0RWZmZWN0Lm5leHRFZmZlY3QgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUT0RPOiBSZXNldCB0aGlzIHNvbWV3aGVyZSBlbHNlPyBMb2wgbGVnYWN5IG1vZGUgaXMgc28gd2VpcmQuXG4gICAgICB3b3JrSW5Qcm9ncmVzcy5maXJzdEVmZmVjdCA9IHdvcmtJblByb2dyZXNzLmxhc3RFZmZlY3QgPSBudWxsO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudCA9IGNyZWF0ZVdvcmtJblByb2dyZXNzT2Zmc2NyZWVuRmliZXIoY3VycmVudFByaW1hcnlDaGlsZEZyYWdtZW50LCBwcmltYXJ5Q2hpbGRQcm9wcyk7XG4gIH1cblxuICB2YXIgZmFsbGJhY2tDaGlsZEZyYWdtZW50O1xuXG4gIGlmIChjdXJyZW50RmFsbGJhY2tDaGlsZEZyYWdtZW50ICE9PSBudWxsKSB7XG4gICAgZmFsbGJhY2tDaGlsZEZyYWdtZW50ID0gY3JlYXRlV29ya0luUHJvZ3Jlc3MoY3VycmVudEZhbGxiYWNrQ2hpbGRGcmFnbWVudCwgZmFsbGJhY2tDaGlsZHJlbik7XG4gIH0gZWxzZSB7XG4gICAgZmFsbGJhY2tDaGlsZEZyYWdtZW50ID0gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoZmFsbGJhY2tDaGlsZHJlbiwgbW9kZSwgcmVuZGVyTGFuZXMsIG51bGwpOyAvLyBOZWVkcyBhIHBsYWNlbWVudCBlZmZlY3QgYmVjYXVzZSB0aGUgcGFyZW50ICh0aGUgU3VzcGVuc2UgYm91bmRhcnkpIGFscmVhZHlcbiAgICAvLyBtb3VudGVkIGJ1dCB0aGlzIGlzIGEgbmV3IGZpYmVyLlxuXG4gICAgZmFsbGJhY2tDaGlsZEZyYWdtZW50LmZsYWdzIHw9IFBsYWNlbWVudDtcbiAgfVxuXG4gIGZhbGxiYWNrQ2hpbGRGcmFnbWVudC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgcHJpbWFyeUNoaWxkRnJhZ21lbnQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gIHByaW1hcnlDaGlsZEZyYWdtZW50LnNpYmxpbmcgPSBmYWxsYmFja0NoaWxkRnJhZ21lbnQ7XG4gIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcHJpbWFyeUNoaWxkRnJhZ21lbnQ7XG4gIHJldHVybiBmYWxsYmFja0NoaWxkRnJhZ21lbnQ7XG59XG5cbmZ1bmN0aW9uIHNjaGVkdWxlV29ya09uRmliZXIoZmliZXIsIHJlbmRlckxhbmVzKSB7XG4gIGZpYmVyLmxhbmVzID0gbWVyZ2VMYW5lcyhmaWJlci5sYW5lcywgcmVuZGVyTGFuZXMpO1xuICB2YXIgYWx0ZXJuYXRlID0gZmliZXIuYWx0ZXJuYXRlO1xuXG4gIGlmIChhbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICBhbHRlcm5hdGUubGFuZXMgPSBtZXJnZUxhbmVzKGFsdGVybmF0ZS5sYW5lcywgcmVuZGVyTGFuZXMpO1xuICB9XG5cbiAgc2NoZWR1bGVXb3JrT25QYXJlbnRQYXRoKGZpYmVyLnJldHVybiwgcmVuZGVyTGFuZXMpO1xufVxuXG5mdW5jdGlvbiBwcm9wYWdhdGVTdXNwZW5zZUNvbnRleHRDaGFuZ2Uod29ya0luUHJvZ3Jlc3MsIGZpcnN0Q2hpbGQsIHJlbmRlckxhbmVzKSB7XG4gIC8vIE1hcmsgYW55IFN1c3BlbnNlIGJvdW5kYXJpZXMgd2l0aCBmYWxsYmFja3MgYXMgaGF2aW5nIHdvcmsgdG8gZG8uXG4gIC8vIElmIHRoZXkgd2VyZSBwcmV2aW91c2x5IGZvcmNlZCBpbnRvIGZhbGxiYWNrcywgdGhleSBtYXkgbm93IGJlIGFibGVcbiAgLy8gdG8gdW5ibG9jay5cbiAgdmFyIG5vZGUgPSBmaXJzdENoaWxkO1xuXG4gIHdoaWxlIChub2RlICE9PSBudWxsKSB7XG4gICAgaWYgKG5vZGUudGFnID09PSBTdXNwZW5zZUNvbXBvbmVudCkge1xuICAgICAgdmFyIHN0YXRlID0gbm9kZS5tZW1vaXplZFN0YXRlO1xuXG4gICAgICBpZiAoc3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgc2NoZWR1bGVXb3JrT25GaWJlcihub2RlLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChub2RlLnRhZyA9PT0gU3VzcGVuc2VMaXN0Q29tcG9uZW50KSB7XG4gICAgICAvLyBJZiB0aGUgdGFpbCBpcyBoaWRkZW4gdGhlcmUgbWlnaHQgbm90IGJlIGFuIFN1c3BlbnNlIGJvdW5kYXJpZXNcbiAgICAgIC8vIHRvIHNjaGVkdWxlIHdvcmsgb24uIEluIHRoaXMgY2FzZSB3ZSBoYXZlIHRvIHNjaGVkdWxlIGl0IG9uIHRoZVxuICAgICAgLy8gbGlzdCBpdHNlbGYuXG4gICAgICAvLyBXZSBkb24ndCBoYXZlIHRvIHRyYXZlcnNlIHRvIHRoZSBjaGlsZHJlbiBvZiB0aGUgbGlzdCBzaW5jZVxuICAgICAgLy8gdGhlIGxpc3Qgd2lsbCBwcm9wYWdhdGUgdGhlIGNoYW5nZSB3aGVuIGl0IHJlcmVuZGVycy5cbiAgICAgIHNjaGVkdWxlV29ya09uRmliZXIobm9kZSwgcmVuZGVyTGFuZXMpO1xuICAgIH0gZWxzZSBpZiAobm9kZS5jaGlsZCAhPT0gbnVsbCkge1xuICAgICAgbm9kZS5jaGlsZC5yZXR1cm4gPSBub2RlO1xuICAgICAgbm9kZSA9IG5vZGUuY2hpbGQ7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAobm9kZSA9PT0gd29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3aGlsZSAobm9kZS5zaWJsaW5nID09PSBudWxsKSB7XG4gICAgICBpZiAobm9kZS5yZXR1cm4gPT09IG51bGwgfHwgbm9kZS5yZXR1cm4gPT09IHdvcmtJblByb2dyZXNzKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgIH1cblxuICAgIG5vZGUuc2libGluZy5yZXR1cm4gPSBub2RlLnJldHVybjtcbiAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmRMYXN0Q29udGVudFJvdyhmaXJzdENoaWxkKSB7XG4gIC8vIFRoaXMgaXMgZ29pbmcgdG8gZmluZCB0aGUgbGFzdCByb3cgYW1vbmcgdGhlc2UgY2hpbGRyZW4gdGhhdCBpcyBhbHJlYWR5XG4gIC8vIHNob3dpbmcgY29udGVudCBvbiB0aGUgc2NyZWVuLCBhcyBvcHBvc2VkIHRvIGJlaW5nIGluIGZhbGxiYWNrIHN0YXRlIG9yXG4gIC8vIG5ldy4gSWYgYSByb3cgaGFzIG11bHRpcGxlIFN1c3BlbnNlIGJvdW5kYXJpZXMsIGFueSBvZiB0aGVtIGJlaW5nIGluIHRoZVxuICAvLyBmYWxsYmFjayBzdGF0ZSwgY291bnRzIGFzIHRoZSB3aG9sZSByb3cgYmVpbmcgaW4gYSBmYWxsYmFjayBzdGF0ZS5cbiAgLy8gTm90ZSB0aGF0IHRoZSBcInJvd3NcIiB3aWxsIGJlIHdvcmtJblByb2dyZXNzLCBidXQgYW55IG5lc3RlZCBjaGlsZHJlblxuICAvLyB3aWxsIHN0aWxsIGJlIGN1cnJlbnQgc2luY2Ugd2UgaGF2ZW4ndCByZW5kZXJlZCB0aGVtIHlldC4gVGhlIG1vdW50ZWRcbiAgLy8gb3JkZXIgbWF5IG5vdCBiZSB0aGUgc2FtZSBhcyB0aGUgbmV3IG9yZGVyLiBXZSB1c2UgdGhlIG5ldyBvcmRlci5cbiAgdmFyIHJvdyA9IGZpcnN0Q2hpbGQ7XG4gIHZhciBsYXN0Q29udGVudFJvdyA9IG51bGw7XG5cbiAgd2hpbGUgKHJvdyAhPT0gbnVsbCkge1xuICAgIHZhciBjdXJyZW50Um93ID0gcm93LmFsdGVybmF0ZTsgLy8gTmV3IHJvd3MgY2FuJ3QgYmUgY29udGVudCByb3dzLlxuXG4gICAgaWYgKGN1cnJlbnRSb3cgIT09IG51bGwgJiYgZmluZEZpcnN0U3VzcGVuZGVkKGN1cnJlbnRSb3cpID09PSBudWxsKSB7XG4gICAgICBsYXN0Q29udGVudFJvdyA9IHJvdztcbiAgICB9XG5cbiAgICByb3cgPSByb3cuc2libGluZztcbiAgfVxuXG4gIHJldHVybiBsYXN0Q29udGVudFJvdztcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVSZXZlYWxPcmRlcihyZXZlYWxPcmRlcikge1xuICB7XG4gICAgaWYgKHJldmVhbE9yZGVyICE9PSB1bmRlZmluZWQgJiYgcmV2ZWFsT3JkZXIgIT09ICdmb3J3YXJkcycgJiYgcmV2ZWFsT3JkZXIgIT09ICdiYWNrd2FyZHMnICYmIHJldmVhbE9yZGVyICE9PSAndG9nZXRoZXInICYmICFkaWRXYXJuQWJvdXRSZXZlYWxPcmRlcltyZXZlYWxPcmRlcl0pIHtcbiAgICAgIGRpZFdhcm5BYm91dFJldmVhbE9yZGVyW3JldmVhbE9yZGVyXSA9IHRydWU7XG5cbiAgICAgIGlmICh0eXBlb2YgcmV2ZWFsT3JkZXIgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHN3aXRjaCAocmV2ZWFsT3JkZXIudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgIGNhc2UgJ3RvZ2V0aGVyJzpcbiAgICAgICAgICBjYXNlICdmb3J3YXJkcyc6XG4gICAgICAgICAgY2FzZSAnYmFja3dhcmRzJzpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZXJyb3IoJ1wiJXNcIiBpcyBub3QgYSB2YWxpZCB2YWx1ZSBmb3IgcmV2ZWFsT3JkZXIgb24gPFN1c3BlbnNlTGlzdCAvPi4gJyArICdVc2UgbG93ZXJjYXNlIFwiJXNcIiBpbnN0ZWFkLicsIHJldmVhbE9yZGVyLCByZXZlYWxPcmRlci50b0xvd2VyQ2FzZSgpKTtcblxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIGNhc2UgJ2ZvcndhcmQnOlxuICAgICAgICAgIGNhc2UgJ2JhY2t3YXJkJzpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZXJyb3IoJ1wiJXNcIiBpcyBub3QgYSB2YWxpZCB2YWx1ZSBmb3IgcmV2ZWFsT3JkZXIgb24gPFN1c3BlbnNlTGlzdCAvPi4gJyArICdSZWFjdCB1c2VzIHRoZSAtcyBzdWZmaXggaW4gdGhlIHNwZWxsaW5nLiBVc2UgXCIlc3NcIiBpbnN0ZWFkLicsIHJldmVhbE9yZGVyLCByZXZlYWxPcmRlci50b0xvd2VyQ2FzZSgpKTtcblxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBlcnJvcignXCIlc1wiIGlzIG5vdCBhIHN1cHBvcnRlZCByZXZlYWxPcmRlciBvbiA8U3VzcGVuc2VMaXN0IC8+LiAnICsgJ0RpZCB5b3UgbWVhbiBcInRvZ2V0aGVyXCIsIFwiZm9yd2FyZHNcIiBvciBcImJhY2t3YXJkc1wiPycsIHJldmVhbE9yZGVyKTtcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVycm9yKCclcyBpcyBub3QgYSBzdXBwb3J0ZWQgdmFsdWUgZm9yIHJldmVhbE9yZGVyIG9uIDxTdXNwZW5zZUxpc3QgLz4uICcgKyAnRGlkIHlvdSBtZWFuIFwidG9nZXRoZXJcIiwgXCJmb3J3YXJkc1wiIG9yIFwiYmFja3dhcmRzXCI/JywgcmV2ZWFsT3JkZXIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVRhaWxPcHRpb25zKHRhaWxNb2RlLCByZXZlYWxPcmRlcikge1xuICB7XG4gICAgaWYgKHRhaWxNb2RlICE9PSB1bmRlZmluZWQgJiYgIWRpZFdhcm5BYm91dFRhaWxPcHRpb25zW3RhaWxNb2RlXSkge1xuICAgICAgaWYgKHRhaWxNb2RlICE9PSAnY29sbGFwc2VkJyAmJiB0YWlsTW9kZSAhPT0gJ2hpZGRlbicpIHtcbiAgICAgICAgZGlkV2FybkFib3V0VGFpbE9wdGlvbnNbdGFpbE1vZGVdID0gdHJ1ZTtcblxuICAgICAgICBlcnJvcignXCIlc1wiIGlzIG5vdCBhIHN1cHBvcnRlZCB2YWx1ZSBmb3IgdGFpbCBvbiA8U3VzcGVuc2VMaXN0IC8+LiAnICsgJ0RpZCB5b3UgbWVhbiBcImNvbGxhcHNlZFwiIG9yIFwiaGlkZGVuXCI/JywgdGFpbE1vZGUpO1xuICAgICAgfSBlbHNlIGlmIChyZXZlYWxPcmRlciAhPT0gJ2ZvcndhcmRzJyAmJiByZXZlYWxPcmRlciAhPT0gJ2JhY2t3YXJkcycpIHtcbiAgICAgICAgZGlkV2FybkFib3V0VGFpbE9wdGlvbnNbdGFpbE1vZGVdID0gdHJ1ZTtcblxuICAgICAgICBlcnJvcignPFN1c3BlbnNlTGlzdCB0YWlsPVwiJXNcIiAvPiBpcyBvbmx5IHZhbGlkIGlmIHJldmVhbE9yZGVyIGlzICcgKyAnXCJmb3J3YXJkc1wiIG9yIFwiYmFja3dhcmRzXCIuICcgKyAnRGlkIHlvdSBtZWFuIHRvIHNwZWNpZnkgcmV2ZWFsT3JkZXI9XCJmb3J3YXJkc1wiPycsIHRhaWxNb2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdXNwZW5zZUxpc3ROZXN0ZWRDaGlsZChjaGlsZFNsb3QsIGluZGV4KSB7XG4gIHtcbiAgICB2YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkoY2hpbGRTbG90KTtcbiAgICB2YXIgaXNJdGVyYWJsZSA9ICFpc0FycmF5ICYmIHR5cGVvZiBnZXRJdGVyYXRvckZuKGNoaWxkU2xvdCkgPT09ICdmdW5jdGlvbic7XG5cbiAgICBpZiAoaXNBcnJheSB8fCBpc0l0ZXJhYmxlKSB7XG4gICAgICB2YXIgdHlwZSA9IGlzQXJyYXkgPyAnYXJyYXknIDogJ2l0ZXJhYmxlJztcblxuICAgICAgZXJyb3IoJ0EgbmVzdGVkICVzIHdhcyBwYXNzZWQgdG8gcm93ICMlcyBpbiA8U3VzcGVuc2VMaXN0IC8+LiBXcmFwIGl0IGluICcgKyAnYW4gYWRkaXRpb25hbCBTdXNwZW5zZUxpc3QgdG8gY29uZmlndXJlIGl0cyByZXZlYWxPcmRlcjogJyArICc8U3VzcGVuc2VMaXN0IHJldmVhbE9yZGVyPS4uLj4gLi4uICcgKyAnPFN1c3BlbnNlTGlzdCByZXZlYWxPcmRlcj0uLi4+eyVzfTwvU3VzcGVuc2VMaXN0PiAuLi4gJyArICc8L1N1c3BlbnNlTGlzdD4nLCB0eXBlLCBpbmRleCwgdHlwZSk7XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdXNwZW5zZUxpc3RDaGlsZHJlbihjaGlsZHJlbiwgcmV2ZWFsT3JkZXIpIHtcbiAge1xuICAgIGlmICgocmV2ZWFsT3JkZXIgPT09ICdmb3J3YXJkcycgfHwgcmV2ZWFsT3JkZXIgPT09ICdiYWNrd2FyZHMnKSAmJiBjaGlsZHJlbiAhPT0gdW5kZWZpbmVkICYmIGNoaWxkcmVuICE9PSBudWxsICYmIGNoaWxkcmVuICE9PSBmYWxzZSkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoIXZhbGlkYXRlU3VzcGVuc2VMaXN0TmVzdGVkQ2hpbGQoY2hpbGRyZW5baV0sIGkpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4oY2hpbGRyZW4pO1xuXG4gICAgICAgIGlmICh0eXBlb2YgaXRlcmF0b3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHZhciBjaGlsZHJlbkl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKGNoaWxkcmVuKTtcblxuICAgICAgICAgIGlmIChjaGlsZHJlbkl0ZXJhdG9yKSB7XG4gICAgICAgICAgICB2YXIgc3RlcCA9IGNoaWxkcmVuSXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgdmFyIF9pID0gMDtcblxuICAgICAgICAgICAgZm9yICg7ICFzdGVwLmRvbmU7IHN0ZXAgPSBjaGlsZHJlbkl0ZXJhdG9yLm5leHQoKSkge1xuICAgICAgICAgICAgICBpZiAoIXZhbGlkYXRlU3VzcGVuc2VMaXN0TmVzdGVkQ2hpbGQoc3RlcC52YWx1ZSwgX2kpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgX2krKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZXJyb3IoJ0Egc2luZ2xlIHJvdyB3YXMgcGFzc2VkIHRvIGEgPFN1c3BlbnNlTGlzdCByZXZlYWxPcmRlcj1cIiVzXCIgLz4uICcgKyAnVGhpcyBpcyBub3QgdXNlZnVsIHNpbmNlIGl0IG5lZWRzIG11bHRpcGxlIHJvd3MuICcgKyAnRGlkIHlvdSBtZWFuIHRvIHBhc3MgbXVsdGlwbGUgY2hpbGRyZW4gb3IgYW4gYXJyYXk/JywgcmV2ZWFsT3JkZXIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGluaXRTdXNwZW5zZUxpc3RSZW5kZXJTdGF0ZSh3b3JrSW5Qcm9ncmVzcywgaXNCYWNrd2FyZHMsIHRhaWwsIGxhc3RDb250ZW50Um93LCB0YWlsTW9kZSwgbGFzdEVmZmVjdEJlZm9yZVJlbmRlcmluZykge1xuICB2YXIgcmVuZGVyU3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuXG4gIGlmIChyZW5kZXJTdGF0ZSA9PT0gbnVsbCkge1xuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSB7XG4gICAgICBpc0JhY2t3YXJkczogaXNCYWNrd2FyZHMsXG4gICAgICByZW5kZXJpbmc6IG51bGwsXG4gICAgICByZW5kZXJpbmdTdGFydFRpbWU6IDAsXG4gICAgICBsYXN0OiBsYXN0Q29udGVudFJvdyxcbiAgICAgIHRhaWw6IHRhaWwsXG4gICAgICB0YWlsTW9kZTogdGFpbE1vZGUsXG4gICAgICBsYXN0RWZmZWN0OiBsYXN0RWZmZWN0QmVmb3JlUmVuZGVyaW5nXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICAvLyBXZSBjYW4gcmV1c2UgdGhlIGV4aXN0aW5nIG9iamVjdCBmcm9tIHByZXZpb3VzIHJlbmRlcnMuXG4gICAgcmVuZGVyU3RhdGUuaXNCYWNrd2FyZHMgPSBpc0JhY2t3YXJkcztcbiAgICByZW5kZXJTdGF0ZS5yZW5kZXJpbmcgPSBudWxsO1xuICAgIHJlbmRlclN0YXRlLnJlbmRlcmluZ1N0YXJ0VGltZSA9IDA7XG4gICAgcmVuZGVyU3RhdGUubGFzdCA9IGxhc3RDb250ZW50Um93O1xuICAgIHJlbmRlclN0YXRlLnRhaWwgPSB0YWlsO1xuICAgIHJlbmRlclN0YXRlLnRhaWxNb2RlID0gdGFpbE1vZGU7XG4gICAgcmVuZGVyU3RhdGUubGFzdEVmZmVjdCA9IGxhc3RFZmZlY3RCZWZvcmVSZW5kZXJpbmc7XG4gIH1cbn0gLy8gVGhpcyBjYW4gZW5kIHVwIHJlbmRlcmluZyB0aGlzIGNvbXBvbmVudCBtdWx0aXBsZSBwYXNzZXMuXG4vLyBUaGUgZmlyc3QgcGFzcyBzcGxpdHMgdGhlIGNoaWxkcmVuIGZpYmVycyBpbnRvIHR3byBzZXRzLiBBIGhlYWQgYW5kIHRhaWwuXG4vLyBXZSBmaXJzdCByZW5kZXIgdGhlIGhlYWQuIElmIGFueXRoaW5nIGlzIGluIGZhbGxiYWNrIHN0YXRlLCB3ZSBkbyBhbm90aGVyXG4vLyBwYXNzIHRocm91Z2ggYmVnaW5Xb3JrIHRvIHJlcmVuZGVyIGFsbCBjaGlsZHJlbiAoaW5jbHVkaW5nIHRoZSB0YWlsKSB3aXRoXG4vLyB0aGUgZm9yY2Ugc3VzcGVuZCBjb250ZXh0LiBJZiB0aGUgZmlyc3QgcmVuZGVyIGRpZG4ndCBoYXZlIGFueXRoaW5nIGluXG4vLyBpbiBmYWxsYmFjayBzdGF0ZS4gVGhlbiB3ZSByZW5kZXIgZWFjaCByb3cgaW4gdGhlIHRhaWwgb25lLWJ5LW9uZS5cbi8vIFRoYXQgaGFwcGVucyBpbiB0aGUgY29tcGxldGVXb3JrIHBoYXNlIHdpdGhvdXQgZ29pbmcgYmFjayB0byBiZWdpbldvcmsuXG5cblxuZnVuY3Rpb24gdXBkYXRlU3VzcGVuc2VMaXN0Q29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICB2YXIgbmV4dFByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICB2YXIgcmV2ZWFsT3JkZXIgPSBuZXh0UHJvcHMucmV2ZWFsT3JkZXI7XG4gIHZhciB0YWlsTW9kZSA9IG5leHRQcm9wcy50YWlsO1xuICB2YXIgbmV3Q2hpbGRyZW4gPSBuZXh0UHJvcHMuY2hpbGRyZW47XG4gIHZhbGlkYXRlUmV2ZWFsT3JkZXIocmV2ZWFsT3JkZXIpO1xuICB2YWxpZGF0ZVRhaWxPcHRpb25zKHRhaWxNb2RlLCByZXZlYWxPcmRlcik7XG4gIHZhbGlkYXRlU3VzcGVuc2VMaXN0Q2hpbGRyZW4obmV3Q2hpbGRyZW4sIHJldmVhbE9yZGVyKTtcbiAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5ld0NoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIHZhciBzdXNwZW5zZUNvbnRleHQgPSBzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQ7XG4gIHZhciBzaG91bGRGb3JjZUZhbGxiYWNrID0gaGFzU3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlQ29udGV4dCwgRm9yY2VTdXNwZW5zZUZhbGxiYWNrKTtcblxuICBpZiAoc2hvdWxkRm9yY2VGYWxsYmFjaykge1xuICAgIHN1c3BlbnNlQ29udGV4dCA9IHNldFNoYWxsb3dTdXNwZW5zZUNvbnRleHQoc3VzcGVuc2VDb250ZXh0LCBGb3JjZVN1c3BlbnNlRmFsbGJhY2spO1xuICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IERpZENhcHR1cmU7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGRpZFN1c3BlbmRCZWZvcmUgPSBjdXJyZW50ICE9PSBudWxsICYmIChjdXJyZW50LmZsYWdzICYgRGlkQ2FwdHVyZSkgIT09IE5vRmxhZ3M7XG5cbiAgICBpZiAoZGlkU3VzcGVuZEJlZm9yZSkge1xuICAgICAgLy8gSWYgd2UgcHJldmlvdXNseSBmb3JjZWQgYSBmYWxsYmFjaywgd2UgbmVlZCB0byBzY2hlZHVsZSB3b3JrXG4gICAgICAvLyBvbiBhbnkgbmVzdGVkIGJvdW5kYXJpZXMgdG8gbGV0IHRoZW0ga25vdyB0byB0cnkgdG8gcmVuZGVyXG4gICAgICAvLyBhZ2Fpbi4gVGhpcyBpcyB0aGUgc2FtZSBhcyBjb250ZXh0IHVwZGF0aW5nLlxuICAgICAgcHJvcGFnYXRlU3VzcGVuc2VDb250ZXh0Q2hhbmdlKHdvcmtJblByb2dyZXNzLCB3b3JrSW5Qcm9ncmVzcy5jaGlsZCwgcmVuZGVyTGFuZXMpO1xuICAgIH1cblxuICAgIHN1c3BlbnNlQ29udGV4dCA9IHNldERlZmF1bHRTaGFsbG93U3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlQ29udGV4dCk7XG4gIH1cblxuICBwdXNoU3VzcGVuc2VDb250ZXh0KHdvcmtJblByb2dyZXNzLCBzdXNwZW5zZUNvbnRleHQpO1xuXG4gIGlmICgod29ya0luUHJvZ3Jlc3MubW9kZSAmIEJsb2NraW5nTW9kZSkgPT09IE5vTW9kZSkge1xuICAgIC8vIEluIGxlZ2FjeSBtb2RlLCBTdXNwZW5zZUxpc3QgZG9lc24ndCB3b3JrIHNvIHdlIGp1c3RcbiAgICAvLyB1c2UgbWFrZSBpdCBhIG5vb3AgYnkgdHJlYXRpbmcgaXQgYXMgdGhlIGRlZmF1bHQgcmV2ZWFsT3JkZXIuXG4gICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gIH0gZWxzZSB7XG4gICAgc3dpdGNoIChyZXZlYWxPcmRlcikge1xuICAgICAgY2FzZSAnZm9yd2FyZHMnOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIGxhc3RDb250ZW50Um93ID0gZmluZExhc3RDb250ZW50Um93KHdvcmtJblByb2dyZXNzLmNoaWxkKTtcbiAgICAgICAgICB2YXIgdGFpbDtcblxuICAgICAgICAgIGlmIChsYXN0Q29udGVudFJvdyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gVGhlIHdob2xlIGxpc3QgaXMgcGFydCBvZiB0aGUgdGFpbC5cbiAgICAgICAgICAgIC8vIFRPRE86IFdlIGNvdWxkIGZhc3QgcGF0aCBieSBqdXN0IHJlbmRlcmluZyB0aGUgdGFpbCBub3cuXG4gICAgICAgICAgICB0YWlsID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IG51bGw7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIERpc2Nvbm5lY3QgdGhlIHRhaWwgcm93cyBhZnRlciB0aGUgY29udGVudCByb3cuXG4gICAgICAgICAgICAvLyBXZSdyZSBnb2luZyB0byByZW5kZXIgdGhlbSBzZXBhcmF0ZWx5IGxhdGVyLlxuICAgICAgICAgICAgdGFpbCA9IGxhc3RDb250ZW50Um93LnNpYmxpbmc7XG4gICAgICAgICAgICBsYXN0Q29udGVudFJvdy5zaWJsaW5nID0gbnVsbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpbml0U3VzcGVuc2VMaXN0UmVuZGVyU3RhdGUod29ya0luUHJvZ3Jlc3MsIGZhbHNlLCAvLyBpc0JhY2t3YXJkc1xuICAgICAgICAgIHRhaWwsIGxhc3RDb250ZW50Um93LCB0YWlsTW9kZSwgd29ya0luUHJvZ3Jlc3MubGFzdEVmZmVjdCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSAnYmFja3dhcmRzJzpcbiAgICAgICAge1xuICAgICAgICAgIC8vIFdlJ3JlIGdvaW5nIHRvIGZpbmQgdGhlIGZpcnN0IHJvdyB0aGF0IGhhcyBleGlzdGluZyBjb250ZW50LlxuICAgICAgICAgIC8vIEF0IHRoZSBzYW1lIHRpbWUgd2UncmUgZ29pbmcgdG8gcmV2ZXJzZSB0aGUgbGlzdCBvZiBldmVyeXRoaW5nXG4gICAgICAgICAgLy8gd2UgcGFzcyBpbiB0aGUgbWVhbnRpbWUuIFRoYXQncyBnb2luZyB0byBiZSBvdXIgdGFpbCBpbiByZXZlcnNlXG4gICAgICAgICAgLy8gb3JkZXIuXG4gICAgICAgICAgdmFyIF90YWlsID0gbnVsbDtcbiAgICAgICAgICB2YXIgcm93ID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBudWxsO1xuXG4gICAgICAgICAgd2hpbGUgKHJvdyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIGN1cnJlbnRSb3cgPSByb3cuYWx0ZXJuYXRlOyAvLyBOZXcgcm93cyBjYW4ndCBiZSBjb250ZW50IHJvd3MuXG5cbiAgICAgICAgICAgIGlmIChjdXJyZW50Um93ICE9PSBudWxsICYmIGZpbmRGaXJzdFN1c3BlbmRlZChjdXJyZW50Um93KSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG1haW4gY29udGVudC5cbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSByb3c7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgbmV4dFJvdyA9IHJvdy5zaWJsaW5nO1xuICAgICAgICAgICAgcm93LnNpYmxpbmcgPSBfdGFpbDtcbiAgICAgICAgICAgIF90YWlsID0gcm93O1xuICAgICAgICAgICAgcm93ID0gbmV4dFJvdztcbiAgICAgICAgICB9IC8vIFRPRE86IElmIHdvcmtJblByb2dyZXNzLmNoaWxkIGlzIG51bGwsIHdlIGNhbiBjb250aW51ZSBvbiB0aGUgdGFpbCBpbW1lZGlhdGVseS5cblxuXG4gICAgICAgICAgaW5pdFN1c3BlbnNlTGlzdFJlbmRlclN0YXRlKHdvcmtJblByb2dyZXNzLCB0cnVlLCAvLyBpc0JhY2t3YXJkc1xuICAgICAgICAgIF90YWlsLCBudWxsLCAvLyBsYXN0XG4gICAgICAgICAgdGFpbE1vZGUsIHdvcmtJblByb2dyZXNzLmxhc3RFZmZlY3QpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgJ3RvZ2V0aGVyJzpcbiAgICAgICAge1xuICAgICAgICAgIGluaXRTdXNwZW5zZUxpc3RSZW5kZXJTdGF0ZSh3b3JrSW5Qcm9ncmVzcywgZmFsc2UsIC8vIGlzQmFja3dhcmRzXG4gICAgICAgICAgbnVsbCwgLy8gdGFpbFxuICAgICAgICAgIG51bGwsIC8vIGxhc3RcbiAgICAgICAgICB1bmRlZmluZWQsIHdvcmtJblByb2dyZXNzLmxhc3RFZmZlY3QpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHtcbiAgICAgICAgICAvLyBUaGUgZGVmYXVsdCByZXZlYWwgb3JkZXIgaXMgdGhlIHNhbWUgYXMgbm90IGhhdmluZ1xuICAgICAgICAgIC8vIGEgYm91bmRhcnkuXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVBvcnRhbENvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgcHVzaEhvc3RDb250YWluZXIod29ya0luUHJvZ3Jlc3MsIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKTtcbiAgdmFyIG5leHRDaGlsZHJlbiA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcblxuICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgIC8vIFBvcnRhbHMgYXJlIHNwZWNpYWwgYmVjYXVzZSB3ZSBkb24ndCBhcHBlbmQgdGhlIGNoaWxkcmVuIGR1cmluZyBtb3VudFxuICAgIC8vIGJ1dCBhdCBjb21taXQuIFRoZXJlZm9yZSB3ZSBuZWVkIHRvIHRyYWNrIGluc2VydGlvbnMgd2hpY2ggdGhlIG5vcm1hbFxuICAgIC8vIGZsb3cgZG9lc24ndCBkbyBkdXJpbmcgbW91bnQuIFRoaXMgZG9lc24ndCBoYXBwZW4gYXQgdGhlIHJvb3QgYmVjYXVzZVxuICAgIC8vIHRoZSByb290IGFsd2F5cyBzdGFydHMgd2l0aCBhIFwiY3VycmVudFwiIHdpdGggYSBudWxsIGNoaWxkLlxuICAgIC8vIFRPRE86IENvbnNpZGVyIHVuaWZ5aW5nIHRoaXMgd2l0aCBob3cgdGhlIHJvb3Qgd29ya3MuXG4gICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSByZWNvbmNpbGVDaGlsZEZpYmVycyh3b3JrSW5Qcm9ncmVzcywgbnVsbCwgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIH0gZWxzZSB7XG4gICAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICB9XG5cbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuXG52YXIgaGFzV2FybmVkQWJvdXRVc2luZ05vVmFsdWVQcm9wT25Db250ZXh0UHJvdmlkZXIgPSBmYWxzZTtcblxuZnVuY3Rpb24gdXBkYXRlQ29udGV4dFByb3ZpZGVyKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICB2YXIgcHJvdmlkZXJUeXBlID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgdmFyIGNvbnRleHQgPSBwcm92aWRlclR5cGUuX2NvbnRleHQ7XG4gIHZhciBuZXdQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgdmFyIG9sZFByb3BzID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcztcbiAgdmFyIG5ld1ZhbHVlID0gbmV3UHJvcHMudmFsdWU7XG5cbiAge1xuICAgIGlmICghKCd2YWx1ZScgaW4gbmV3UHJvcHMpKSB7XG4gICAgICBpZiAoIWhhc1dhcm5lZEFib3V0VXNpbmdOb1ZhbHVlUHJvcE9uQ29udGV4dFByb3ZpZGVyKSB7XG4gICAgICAgIGhhc1dhcm5lZEFib3V0VXNpbmdOb1ZhbHVlUHJvcE9uQ29udGV4dFByb3ZpZGVyID0gdHJ1ZTtcblxuICAgICAgICBlcnJvcignVGhlIGB2YWx1ZWAgcHJvcCBpcyByZXF1aXJlZCBmb3IgdGhlIGA8Q29udGV4dC5Qcm92aWRlcj5gLiBEaWQgeW91IG1pc3NwZWxsIGl0IG9yIGZvcmdldCB0byBwYXNzIGl0PycpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBwcm92aWRlclByb3BUeXBlcyA9IHdvcmtJblByb2dyZXNzLnR5cGUucHJvcFR5cGVzO1xuXG4gICAgaWYgKHByb3ZpZGVyUHJvcFR5cGVzKSB7XG4gICAgICBjaGVja1Byb3BUeXBlcyhwcm92aWRlclByb3BUeXBlcywgbmV3UHJvcHMsICdwcm9wJywgJ0NvbnRleHQuUHJvdmlkZXInKTtcbiAgICB9XG4gIH1cblxuICBwdXNoUHJvdmlkZXIod29ya0luUHJvZ3Jlc3MsIG5ld1ZhbHVlKTtcblxuICBpZiAob2xkUHJvcHMgIT09IG51bGwpIHtcbiAgICB2YXIgb2xkVmFsdWUgPSBvbGRQcm9wcy52YWx1ZTtcbiAgICB2YXIgY2hhbmdlZEJpdHMgPSBjYWxjdWxhdGVDaGFuZ2VkQml0cyhjb250ZXh0LCBuZXdWYWx1ZSwgb2xkVmFsdWUpO1xuXG4gICAgaWYgKGNoYW5nZWRCaXRzID09PSAwKSB7XG4gICAgICAvLyBObyBjaGFuZ2UuIEJhaWxvdXQgZWFybHkgaWYgY2hpbGRyZW4gYXJlIHRoZSBzYW1lLlxuICAgICAgaWYgKG9sZFByb3BzLmNoaWxkcmVuID09PSBuZXdQcm9wcy5jaGlsZHJlbiAmJiAhaGFzQ29udGV4dENoYW5nZWQoKSkge1xuICAgICAgICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGUgY29udGV4dCB2YWx1ZSBjaGFuZ2VkLiBTZWFyY2ggZm9yIG1hdGNoaW5nIGNvbnN1bWVycyBhbmQgc2NoZWR1bGVcbiAgICAgIC8vIHRoZW0gdG8gdXBkYXRlLlxuICAgICAgcHJvcGFnYXRlQ29udGV4dENoYW5nZSh3b3JrSW5Qcm9ncmVzcywgY29udGV4dCwgY2hhbmdlZEJpdHMsIHJlbmRlckxhbmVzKTtcbiAgICB9XG4gIH1cblxuICB2YXIgbmV3Q2hpbGRyZW4gPSBuZXdQcm9wcy5jaGlsZHJlbjtcbiAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5ld0NoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxudmFyIGhhc1dhcm5lZEFib3V0VXNpbmdDb250ZXh0QXNDb25zdW1lciA9IGZhbHNlO1xuXG5mdW5jdGlvbiB1cGRhdGVDb250ZXh0Q29uc3VtZXIoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHZhciBjb250ZXh0ID0gd29ya0luUHJvZ3Jlc3MudHlwZTsgLy8gVGhlIGxvZ2ljIGJlbG93IGZvciBDb250ZXh0IGRpZmZlcnMgZGVwZW5kaW5nIG9uIFBST0Qgb3IgREVWIG1vZGUuIEluXG4gIC8vIERFViBtb2RlLCB3ZSBjcmVhdGUgYSBzZXBhcmF0ZSBvYmplY3QgZm9yIENvbnRleHQuQ29uc3VtZXIgdGhhdCBhY3RzXG4gIC8vIGxpa2UgYSBwcm94eSB0byBDb250ZXh0LiBUaGlzIHByb3h5IG9iamVjdCBhZGRzIHVubmVjZXNzYXJ5IGNvZGUgaW4gUFJPRFxuICAvLyBzbyB3ZSB1c2UgdGhlIG9sZCBiZWhhdmlvdXIgKENvbnRleHQuQ29uc3VtZXIgcmVmZXJlbmNlcyBDb250ZXh0KSB0b1xuICAvLyByZWR1Y2Ugc2l6ZSBhbmQgb3ZlcmhlYWQuIFRoZSBzZXBhcmF0ZSBvYmplY3QgcmVmZXJlbmNlcyBjb250ZXh0IHZpYVxuICAvLyBhIHByb3BlcnR5IGNhbGxlZCBcIl9jb250ZXh0XCIsIHdoaWNoIGFsc28gZ2l2ZXMgdXMgdGhlIGFiaWxpdHkgdG8gY2hlY2tcbiAgLy8gaW4gREVWIG1vZGUgaWYgdGhpcyBwcm9wZXJ0eSBleGlzdHMgb3Igbm90IGFuZCB3YXJuIGlmIGl0IGRvZXMgbm90LlxuXG4gIHtcbiAgICBpZiAoY29udGV4dC5fY29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBUaGlzIG1heSBiZSBiZWNhdXNlIGl0J3MgYSBDb250ZXh0IChyYXRoZXIgdGhhbiBhIENvbnN1bWVyKS5cbiAgICAgIC8vIE9yIGl0IG1heSBiZSBiZWNhdXNlIGl0J3Mgb2xkZXIgUmVhY3Qgd2hlcmUgdGhleSdyZSB0aGUgc2FtZSB0aGluZy5cbiAgICAgIC8vIFdlIG9ubHkgd2FudCB0byB3YXJuIGlmIHdlJ3JlIHN1cmUgaXQncyBhIG5ldyBSZWFjdC5cbiAgICAgIGlmIChjb250ZXh0ICE9PSBjb250ZXh0LkNvbnN1bWVyKSB7XG4gICAgICAgIGlmICghaGFzV2FybmVkQWJvdXRVc2luZ0NvbnRleHRBc0NvbnN1bWVyKSB7XG4gICAgICAgICAgaGFzV2FybmVkQWJvdXRVc2luZ0NvbnRleHRBc0NvbnN1bWVyID0gdHJ1ZTtcblxuICAgICAgICAgIGVycm9yKCdSZW5kZXJpbmcgPENvbnRleHQ+IGRpcmVjdGx5IGlzIG5vdCBzdXBwb3J0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiAnICsgJ2EgZnV0dXJlIG1ham9yIHJlbGVhc2UuIERpZCB5b3UgbWVhbiB0byByZW5kZXIgPENvbnRleHQuQ29uc3VtZXI+IGluc3RlYWQ/Jyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29udGV4dCA9IGNvbnRleHQuX2NvbnRleHQ7XG4gICAgfVxuICB9XG5cbiAgdmFyIG5ld1Byb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICB2YXIgcmVuZGVyID0gbmV3UHJvcHMuY2hpbGRyZW47XG5cbiAge1xuICAgIGlmICh0eXBlb2YgcmVuZGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignQSBjb250ZXh0IGNvbnN1bWVyIHdhcyByZW5kZXJlZCB3aXRoIG11bHRpcGxlIGNoaWxkcmVuLCBvciBhIGNoaWxkICcgKyBcInRoYXQgaXNuJ3QgYSBmdW5jdGlvbi4gQSBjb250ZXh0IGNvbnN1bWVyIGV4cGVjdHMgYSBzaW5nbGUgY2hpbGQgXCIgKyAndGhhdCBpcyBhIGZ1bmN0aW9uLiBJZiB5b3UgZGlkIHBhc3MgYSBmdW5jdGlvbiwgbWFrZSBzdXJlIHRoZXJlICcgKyAnaXMgbm8gdHJhaWxpbmcgb3IgbGVhZGluZyB3aGl0ZXNwYWNlIGFyb3VuZCBpdC4nKTtcbiAgICB9XG4gIH1cblxuICBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICB2YXIgbmV3VmFsdWUgPSByZWFkQ29udGV4dChjb250ZXh0LCBuZXdQcm9wcy51bnN0YWJsZV9vYnNlcnZlZEJpdHMpO1xuICB2YXIgbmV3Q2hpbGRyZW47XG5cbiAge1xuICAgIFJlYWN0Q3VycmVudE93bmVyJDEuY3VycmVudCA9IHdvcmtJblByb2dyZXNzO1xuICAgIHNldElzUmVuZGVyaW5nKHRydWUpO1xuICAgIG5ld0NoaWxkcmVuID0gcmVuZGVyKG5ld1ZhbHVlKTtcbiAgICBzZXRJc1JlbmRlcmluZyhmYWxzZSk7XG4gIH0gLy8gUmVhY3QgRGV2VG9vbHMgcmVhZHMgdGhpcyBmbGFnLlxuXG5cbiAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gUGVyZm9ybWVkV29yaztcbiAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5ld0NoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gbWFya1dvcmtJblByb2dyZXNzUmVjZWl2ZWRVcGRhdGUoKSB7XG4gIGRpZFJlY2VpdmVVcGRhdGUgPSB0cnVlO1xufVxuXG5mdW5jdGlvbiBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgIC8vIFJldXNlIHByZXZpb3VzIGRlcGVuZGVuY2llc1xuICAgIHdvcmtJblByb2dyZXNzLmRlcGVuZGVuY2llcyA9IGN1cnJlbnQuZGVwZW5kZW5jaWVzO1xuICB9XG5cbiAge1xuICAgIC8vIERvbid0IHVwZGF0ZSBcImJhc2VcIiByZW5kZXIgdGltZXMgZm9yIGJhaWxvdXRzLlxuICAgIHN0b3BQcm9maWxlclRpbWVySWZSdW5uaW5nKCk7XG4gIH1cblxuICBtYXJrU2tpcHBlZFVwZGF0ZUxhbmVzKHdvcmtJblByb2dyZXNzLmxhbmVzKTsgLy8gQ2hlY2sgaWYgdGhlIGNoaWxkcmVuIGhhdmUgYW55IHBlbmRpbmcgd29yay5cblxuICBpZiAoIWluY2x1ZGVzU29tZUxhbmUocmVuZGVyTGFuZXMsIHdvcmtJblByb2dyZXNzLmNoaWxkTGFuZXMpKSB7XG4gICAgLy8gVGhlIGNoaWxkcmVuIGRvbid0IGhhdmUgYW55IHdvcmsgZWl0aGVyLiBXZSBjYW4gc2tpcCB0aGVtLlxuICAgIC8vIFRPRE86IE9uY2Ugd2UgYWRkIGJhY2sgcmVzdW1pbmcsIHdlIHNob3VsZCBjaGVjayBpZiB0aGUgY2hpbGRyZW4gYXJlXG4gICAgLy8gYSB3b3JrLWluLXByb2dyZXNzIHNldC4gSWYgc28sIHdlIG5lZWQgdG8gdHJhbnNmZXIgdGhlaXIgZWZmZWN0cy5cbiAgICByZXR1cm4gbnVsbDtcbiAgfSBlbHNlIHtcbiAgICAvLyBUaGlzIGZpYmVyIGRvZXNuJ3QgaGF2ZSB3b3JrLCBidXQgaXRzIHN1YnRyZWUgZG9lcy4gQ2xvbmUgdGhlIGNoaWxkXG4gICAgLy8gZmliZXJzIGFuZCBjb250aW51ZS5cbiAgICBjbG9uZUNoaWxkRmliZXJzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKTtcbiAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVtb3VudEZpYmVyKGN1cnJlbnQsIG9sZFdvcmtJblByb2dyZXNzLCBuZXdXb3JrSW5Qcm9ncmVzcykge1xuICB7XG4gICAgdmFyIHJldHVybkZpYmVyID0gb2xkV29ya0luUHJvZ3Jlc3MucmV0dXJuO1xuXG4gICAgaWYgKHJldHVybkZpYmVyID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBzd2FwIHRoZSByb290IGZpYmVyLicpO1xuICAgIH0gLy8gRGlzY29ubmVjdCBmcm9tIHRoZSBvbGQgY3VycmVudC5cbiAgICAvLyBJdCB3aWxsIGdldCBkZWxldGVkLlxuXG5cbiAgICBjdXJyZW50LmFsdGVybmF0ZSA9IG51bGw7XG4gICAgb2xkV29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlID0gbnVsbDsgLy8gQ29ubmVjdCB0byB0aGUgbmV3IHRyZWUuXG5cbiAgICBuZXdXb3JrSW5Qcm9ncmVzcy5pbmRleCA9IG9sZFdvcmtJblByb2dyZXNzLmluZGV4O1xuICAgIG5ld1dvcmtJblByb2dyZXNzLnNpYmxpbmcgPSBvbGRXb3JrSW5Qcm9ncmVzcy5zaWJsaW5nO1xuICAgIG5ld1dvcmtJblByb2dyZXNzLnJldHVybiA9IG9sZFdvcmtJblByb2dyZXNzLnJldHVybjtcbiAgICBuZXdXb3JrSW5Qcm9ncmVzcy5yZWYgPSBvbGRXb3JrSW5Qcm9ncmVzcy5yZWY7IC8vIFJlcGxhY2UgdGhlIGNoaWxkL3NpYmxpbmcgcG9pbnRlcnMgYWJvdmUgaXQuXG5cbiAgICBpZiAob2xkV29ya0luUHJvZ3Jlc3MgPT09IHJldHVybkZpYmVyLmNoaWxkKSB7XG4gICAgICByZXR1cm5GaWJlci5jaGlsZCA9IG5ld1dvcmtJblByb2dyZXNzO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgcHJldlNpYmxpbmcgPSByZXR1cm5GaWJlci5jaGlsZDtcblxuICAgICAgaWYgKHByZXZTaWJsaW5nID09PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgcGFyZW50IHRvIGhhdmUgYSBjaGlsZC4nKTtcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKHByZXZTaWJsaW5nLnNpYmxpbmcgIT09IG9sZFdvcmtJblByb2dyZXNzKSB7XG4gICAgICAgIHByZXZTaWJsaW5nID0gcHJldlNpYmxpbmcuc2libGluZztcblxuICAgICAgICBpZiAocHJldlNpYmxpbmcgPT09IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHRvIGZpbmQgdGhlIHByZXZpb3VzIHNpYmxpbmcuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcHJldlNpYmxpbmcuc2libGluZyA9IG5ld1dvcmtJblByb2dyZXNzO1xuICAgIH0gLy8gRGVsZXRlIHRoZSBvbGQgZmliZXIgYW5kIHBsYWNlIHRoZSBuZXcgb25lLlxuICAgIC8vIFNpbmNlIHRoZSBvbGQgZmliZXIgaXMgZGlzY29ubmVjdGVkLCB3ZSBoYXZlIHRvIHNjaGVkdWxlIGl0IG1hbnVhbGx5LlxuXG5cbiAgICB2YXIgbGFzdCA9IHJldHVybkZpYmVyLmxhc3RFZmZlY3Q7XG5cbiAgICBpZiAobGFzdCAhPT0gbnVsbCkge1xuICAgICAgbGFzdC5uZXh0RWZmZWN0ID0gY3VycmVudDtcbiAgICAgIHJldHVybkZpYmVyLmxhc3RFZmZlY3QgPSBjdXJyZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm5GaWJlci5maXJzdEVmZmVjdCA9IHJldHVybkZpYmVyLmxhc3RFZmZlY3QgPSBjdXJyZW50O1xuICAgIH1cblxuICAgIGN1cnJlbnQubmV4dEVmZmVjdCA9IG51bGw7XG4gICAgY3VycmVudC5mbGFncyA9IERlbGV0aW9uO1xuICAgIG5ld1dvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBsYWNlbWVudDsgLy8gUmVzdGFydCB3b3JrIGZyb20gdGhlIG5ldyBmaWJlci5cblxuICAgIHJldHVybiBuZXdXb3JrSW5Qcm9ncmVzcztcbiAgfVxufVxuXG5mdW5jdGlvbiBiZWdpbldvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHZhciB1cGRhdGVMYW5lcyA9IHdvcmtJblByb2dyZXNzLmxhbmVzO1xuXG4gIHtcbiAgICBpZiAod29ya0luUHJvZ3Jlc3MuX2RlYnVnTmVlZHNSZW1vdW50ICYmIGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgIC8vIFRoaXMgd2lsbCByZXN0YXJ0IHRoZSBiZWdpbiBwaGFzZSB3aXRoIGEgbmV3IGZpYmVyLlxuICAgICAgcmV0dXJuIHJlbW91bnRGaWJlcihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgY3JlYXRlRmliZXJGcm9tVHlwZUFuZFByb3BzKHdvcmtJblByb2dyZXNzLnR5cGUsIHdvcmtJblByb2dyZXNzLmtleSwgd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzLCB3b3JrSW5Qcm9ncmVzcy5fZGVidWdPd25lciB8fCBudWxsLCB3b3JrSW5Qcm9ncmVzcy5tb2RlLCB3b3JrSW5Qcm9ncmVzcy5sYW5lcykpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgdmFyIG9sZFByb3BzID0gY3VycmVudC5tZW1vaXplZFByb3BzO1xuICAgIHZhciBuZXdQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcblxuICAgIGlmIChvbGRQcm9wcyAhPT0gbmV3UHJvcHMgfHwgaGFzQ29udGV4dENoYW5nZWQoKSB8fCAoIC8vIEZvcmNlIGEgcmUtcmVuZGVyIGlmIHRoZSBpbXBsZW1lbnRhdGlvbiBjaGFuZ2VkIGR1ZSB0byBob3QgcmVsb2FkOlxuICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlICE9PSBjdXJyZW50LnR5cGUgKSkge1xuICAgICAgLy8gSWYgcHJvcHMgb3IgY29udGV4dCBjaGFuZ2VkLCBtYXJrIHRoZSBmaWJlciBhcyBoYXZpbmcgcGVyZm9ybWVkIHdvcmsuXG4gICAgICAvLyBUaGlzIG1heSBiZSB1bnNldCBpZiB0aGUgcHJvcHMgYXJlIGRldGVybWluZWQgdG8gYmUgZXF1YWwgbGF0ZXIgKG1lbW8pLlxuICAgICAgZGlkUmVjZWl2ZVVwZGF0ZSA9IHRydWU7XG4gICAgfSBlbHNlIGlmICghaW5jbHVkZXNTb21lTGFuZShyZW5kZXJMYW5lcywgdXBkYXRlTGFuZXMpKSB7XG4gICAgICBkaWRSZWNlaXZlVXBkYXRlID0gZmFsc2U7IC8vIFRoaXMgZmliZXIgZG9lcyBub3QgaGF2ZSBhbnkgcGVuZGluZyB3b3JrLiBCYWlsb3V0IHdpdGhvdXQgZW50ZXJpbmdcbiAgICAgIC8vIHRoZSBiZWdpbiBwaGFzZS4gVGhlcmUncyBzdGlsbCBzb21lIGJvb2trZWVwaW5nIHdlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZVxuICAgICAgLy8gaW4gdGhpcyBvcHRpbWl6ZWQgcGF0aCwgbW9zdGx5IHB1c2hpbmcgc3R1ZmYgb250byB0aGUgc3RhY2suXG5cbiAgICAgIHN3aXRjaCAod29ya0luUHJvZ3Jlc3MudGFnKSB7XG4gICAgICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICAgICAgcHVzaEhvc3RSb290Q29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgcmVzZXRIeWRyYXRpb25TdGF0ZSgpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgICAgICBwdXNoSG9zdENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIENvbXBvbmVudCA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG5cbiAgICAgICAgICAgIGlmIChpc0NvbnRleHRQcm92aWRlcihDb21wb25lbnQpKSB7XG4gICAgICAgICAgICAgIHB1c2hDb250ZXh0UHJvdmlkZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAgICAgIHB1c2hIb3N0Q29udGFpbmVyKHdvcmtJblByb2dyZXNzLCB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBDb250ZXh0UHJvdmlkZXI6XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIG5ld1ZhbHVlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcy52YWx1ZTtcbiAgICAgICAgICAgIHB1c2hQcm92aWRlcih3b3JrSW5Qcm9ncmVzcywgbmV3VmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgUHJvZmlsZXI6XG4gICAgICAgICAge1xuICAgICAgICAgICAgLy8gUHJvZmlsZXIgc2hvdWxkIG9ubHkgY2FsbCBvblJlbmRlciB3aGVuIG9uZSBvZiBpdHMgZGVzY2VuZGFudHMgYWN0dWFsbHkgcmVuZGVyZWQuXG4gICAgICAgICAgICB2YXIgaGFzQ2hpbGRXb3JrID0gaW5jbHVkZXNTb21lTGFuZShyZW5kZXJMYW5lcywgd29ya0luUHJvZ3Jlc3MuY2hpbGRMYW5lcyk7XG5cbiAgICAgICAgICAgIGlmIChoYXNDaGlsZFdvcmspIHtcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlO1xuICAgICAgICAgICAgfSAvLyBSZXNldCBlZmZlY3QgZHVyYXRpb25zIGZvciB0aGUgbmV4dCBldmVudHVhbCBlZmZlY3QgcGhhc2UuXG4gICAgICAgICAgICAvLyBUaGVzZSBhcmUgcmVzZXQgZHVyaW5nIHJlbmRlciB0byBhbGxvdyB0aGUgRGV2VG9vbHMgY29tbWl0IGhvb2sgYSBjaGFuY2UgdG8gcmVhZCB0aGVtLFxuXG5cbiAgICAgICAgICAgIHZhciBzdGF0ZU5vZGUgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gICAgICAgICAgICBzdGF0ZU5vZGUuZWZmZWN0RHVyYXRpb24gPSAwO1xuICAgICAgICAgICAgc3RhdGVOb2RlLnBhc3NpdmVFZmZlY3REdXJhdGlvbiA9IDA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgc3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuXG4gICAgICAgICAgICBpZiAoc3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgLy8gd2hldGhlciB0byByZXRyeSB0aGUgcHJpbWFyeSBjaGlsZHJlbiwgb3IgdG8gc2tpcCBvdmVyIGl0IGFuZFxuICAgICAgICAgICAgICAvLyBnbyBzdHJhaWdodCB0byB0aGUgZmFsbGJhY2suIENoZWNrIHRoZSBwcmlvcml0eSBvZiB0aGUgcHJpbWFyeVxuICAgICAgICAgICAgICAvLyBjaGlsZCBmcmFnbWVudC5cblxuXG4gICAgICAgICAgICAgIHZhciBwcmltYXJ5Q2hpbGRGcmFnbWVudCA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgICAgICAgICAgICB2YXIgcHJpbWFyeUNoaWxkTGFuZXMgPSBwcmltYXJ5Q2hpbGRGcmFnbWVudC5jaGlsZExhbmVzO1xuXG4gICAgICAgICAgICAgIGlmIChpbmNsdWRlc1NvbWVMYW5lKHJlbmRlckxhbmVzLCBwcmltYXJ5Q2hpbGRMYW5lcykpIHtcbiAgICAgICAgICAgICAgICAvLyBUaGUgcHJpbWFyeSBjaGlsZHJlbiBoYXZlIHBlbmRpbmcgd29yay4gVXNlIHRoZSBub3JtYWwgcGF0aFxuICAgICAgICAgICAgICAgIC8vIHRvIGF0dGVtcHQgdG8gcmVuZGVyIHRoZSBwcmltYXJ5IGNoaWxkcmVuIGFnYWluLlxuICAgICAgICAgICAgICAgIHJldHVybiB1cGRhdGVTdXNwZW5zZUNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFRoZSBwcmltYXJ5IGNoaWxkIGZyYWdtZW50IGRvZXMgbm90IGhhdmUgcGVuZGluZyB3b3JrIG1hcmtlZFxuICAgICAgICAgICAgICAgIC8vIG9uIGl0XG4gICAgICAgICAgICAgICAgcHVzaFN1c3BlbnNlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgc2V0RGVmYXVsdFNoYWxsb3dTdXNwZW5zZUNvbnRleHQoc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50KSk7IC8vIFRoZSBwcmltYXJ5IGNoaWxkcmVuIGRvIG5vdCBoYXZlIHBlbmRpbmcgd29yayB3aXRoIHN1ZmZpY2llbnRcbiAgICAgICAgICAgICAgICAvLyBwcmlvcml0eS4gQmFpbG91dC5cblxuICAgICAgICAgICAgICAgIHZhciBjaGlsZCA9IGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICAgICAgICAgICAgICAgIGlmIChjaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgLy8gVGhlIGZhbGxiYWNrIGNoaWxkcmVuIGhhdmUgcGVuZGluZyB3b3JrLiBTa2lwIG92ZXIgdGhlXG4gICAgICAgICAgICAgICAgICAvLyBwcmltYXJ5IGNoaWxkcmVuIGFuZCB3b3JrIG9uIHRoZSBmYWxsYmFjay5cbiAgICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZC5zaWJsaW5nO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHB1c2hTdXNwZW5zZUNvbnRleHQod29ya0luUHJvZ3Jlc3MsIHNldERlZmF1bHRTaGFsbG93U3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudCkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBTdXNwZW5zZUxpc3RDb21wb25lbnQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIGRpZFN1c3BlbmRCZWZvcmUgPSAoY3VycmVudC5mbGFncyAmIERpZENhcHR1cmUpICE9PSBOb0ZsYWdzO1xuXG4gICAgICAgICAgICB2YXIgX2hhc0NoaWxkV29yayA9IGluY2x1ZGVzU29tZUxhbmUocmVuZGVyTGFuZXMsIHdvcmtJblByb2dyZXNzLmNoaWxkTGFuZXMpO1xuXG4gICAgICAgICAgICBpZiAoZGlkU3VzcGVuZEJlZm9yZSkge1xuICAgICAgICAgICAgICBpZiAoX2hhc0NoaWxkV29yaykge1xuICAgICAgICAgICAgICAgIC8vIElmIHNvbWV0aGluZyB3YXMgaW4gZmFsbGJhY2sgc3RhdGUgbGFzdCB0aW1lLCBhbmQgd2UgaGF2ZSBhbGwgdGhlXG4gICAgICAgICAgICAgICAgLy8gc2FtZSBjaGlsZHJlbiB0aGVuIHdlJ3JlIHN0aWxsIGluIHByb2dyZXNzaXZlIGxvYWRpbmcgc3RhdGUuXG4gICAgICAgICAgICAgICAgLy8gU29tZXRoaW5nIG1pZ2h0IGdldCB1bmJsb2NrZWQgYnkgc3RhdGUgdXBkYXRlcyBvciByZXRyaWVzIGluIHRoZVxuICAgICAgICAgICAgICAgIC8vIHRyZWUgd2hpY2ggd2lsbCBhZmZlY3QgdGhlIHRhaWwuIFNvIHdlIG5lZWQgdG8gdXNlIHRoZSBub3JtYWxcbiAgICAgICAgICAgICAgICAvLyBwYXRoIHRvIGNvbXB1dGUgdGhlIGNvcnJlY3QgdGFpbC5cbiAgICAgICAgICAgICAgICByZXR1cm4gdXBkYXRlU3VzcGVuc2VMaXN0Q29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgICAgICAgICAgIH0gLy8gSWYgbm9uZSBvZiB0aGUgY2hpbGRyZW4gaGFkIGFueSB3b3JrLCB0aGF0IG1lYW5zIHRoYXQgbm9uZSBvZlxuICAgICAgICAgICAgICAvLyB0aGVtIGdvdCByZXRyaWVkIHNvIHRoZXknbGwgc3RpbGwgYmUgYmxvY2tlZCBpbiB0aGUgc2FtZSB3YXlcbiAgICAgICAgICAgICAgLy8gYXMgYmVmb3JlLiBXZSBjYW4gZmFzdCBiYWlsIG91dC5cblxuXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IERpZENhcHR1cmU7XG4gICAgICAgICAgICB9IC8vIElmIG5vdGhpbmcgc3VzcGVuZGVkIGJlZm9yZSBhbmQgd2UncmUgcmVuZGVyaW5nIHRoZSBzYW1lIGNoaWxkcmVuLFxuICAgICAgICAgICAgLy8gdGhlbiB0aGUgdGFpbCBkb2Vzbid0IG1hdHRlci4gQW55dGhpbmcgbmV3IHRoYXQgc3VzcGVuZHMgd2lsbCB3b3JrXG4gICAgICAgICAgICAvLyBpbiB0aGUgXCJ0b2dldGhlclwiIG1vZGUsIHNvIHdlIGNhbiBjb250aW51ZSBmcm9tIHRoZSBzdGF0ZSB3ZSBoYWQuXG5cblxuICAgICAgICAgICAgdmFyIHJlbmRlclN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcblxuICAgICAgICAgICAgaWYgKHJlbmRlclN0YXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIC8vIFJlc2V0IHRvIHRoZSBcInRvZ2V0aGVyXCIgbW9kZSBpbiBjYXNlIHdlJ3ZlIHN0YXJ0ZWQgYSBkaWZmZXJlbnRcbiAgICAgICAgICAgICAgLy8gdXBkYXRlIGluIHRoZSBwYXN0IGJ1dCBkaWRuJ3QgY29tcGxldGUgaXQuXG4gICAgICAgICAgICAgIHJlbmRlclN0YXRlLnJlbmRlcmluZyA9IG51bGw7XG4gICAgICAgICAgICAgIHJlbmRlclN0YXRlLnRhaWwgPSBudWxsO1xuICAgICAgICAgICAgICByZW5kZXJTdGF0ZS5sYXN0RWZmZWN0ID0gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcHVzaFN1c3BlbnNlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50KTtcblxuICAgICAgICAgICAgaWYgKF9oYXNDaGlsZFdvcmspIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBJZiBub25lIG9mIHRoZSBjaGlsZHJlbiBoYWQgYW55IHdvcmssIHRoYXQgbWVhbnMgdGhhdCBub25lIG9mXG4gICAgICAgICAgICAgIC8vIHRoZW0gZ290IHJldHJpZWQgc28gdGhleSdsbCBzdGlsbCBiZSBibG9ja2VkIGluIHRoZSBzYW1lIHdheVxuICAgICAgICAgICAgICAvLyBhcyBiZWZvcmUuIFdlIGNhbiBmYXN0IGJhaWwgb3V0LlxuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBPZmZzY3JlZW5Db21wb25lbnQ6XG4gICAgICAgIGNhc2UgTGVnYWN5SGlkZGVuQ29tcG9uZW50OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC8vIE5lZWQgdG8gY2hlY2sgaWYgdGhlIHRyZWUgc3RpbGwgbmVlZHMgdG8gYmUgZGVmZXJyZWQuIFRoaXMgaXNcbiAgICAgICAgICAgIC8vIGFsbW9zdCBpZGVudGljYWwgdG8gdGhlIGxvZ2ljIHVzZWQgaW4gdGhlIG5vcm1hbCB1cGRhdGUgcGF0aCxcbiAgICAgICAgICAgIC8vIHNvIHdlJ2xsIGp1c3QgZW50ZXIgdGhhdC4gVGhlIG9ubHkgZGlmZmVyZW5jZSBpcyB3ZSdsbCBiYWlsIG91dFxuICAgICAgICAgICAgLy8gYXQgdGhlIG5leHQgbGV2ZWwgaW5zdGVhZCBvZiB0aGlzIG9uZSwgYmVjYXVzZSB0aGUgY2hpbGQgcHJvcHNcbiAgICAgICAgICAgIC8vIGhhdmUgbm90IGNoYW5nZWQuIFdoaWNoIGlzIGZpbmUuXG4gICAgICAgICAgICAvLyBUT0RPOiBQcm9iYWJseSBzaG91bGQgcmVmYWN0b3IgYGJlZ2luV29ya2AgdG8gc3BsaXQgdGhlIGJhaWxvdXRcbiAgICAgICAgICAgIC8vIHBhdGggZnJvbSB0aGUgbm9ybWFsIHBhdGguIEknbSB0ZW1wdGVkIHRvIGRvIGEgbGFiZWxlZCBicmVhayBoZXJlXG4gICAgICAgICAgICAvLyBidXQgSSB3b24ndCA6KVxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBOb0xhbmVzO1xuICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZU9mZnNjcmVlbkNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKChjdXJyZW50LmZsYWdzICYgRm9yY2VVcGRhdGVGb3JMZWdhY3lTdXNwZW5zZSkgIT09IE5vRmxhZ3MpIHtcbiAgICAgICAgLy8gVGhpcyBpcyBhIHNwZWNpYWwgY2FzZSB0aGF0IG9ubHkgZXhpc3RzIGZvciBsZWdhY3kgbW9kZS5cbiAgICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzE5MjE2LlxuICAgICAgICBkaWRSZWNlaXZlVXBkYXRlID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEFuIHVwZGF0ZSB3YXMgc2NoZWR1bGVkIG9uIHRoaXMgZmliZXIsIGJ1dCB0aGVyZSBhcmUgbm8gbmV3IHByb3BzXG4gICAgICAgIC8vIG5vciBsZWdhY3kgY29udGV4dC4gU2V0IHRoaXMgdG8gZmFsc2UuIElmIGFuIHVwZGF0ZSBxdWV1ZSBvciBjb250ZXh0XG4gICAgICAgIC8vIGNvbnN1bWVyIHByb2R1Y2VzIGEgY2hhbmdlZCB2YWx1ZSwgaXQgd2lsbCBzZXQgdGhpcyB0byB0cnVlLiBPdGhlcndpc2UsXG4gICAgICAgIC8vIHRoZSBjb21wb25lbnQgd2lsbCBhc3N1bWUgdGhlIGNoaWxkcmVuIGhhdmUgbm90IGNoYW5nZWQgYW5kIGJhaWwgb3V0LlxuICAgICAgICBkaWRSZWNlaXZlVXBkYXRlID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGRpZFJlY2VpdmVVcGRhdGUgPSBmYWxzZTtcbiAgfSAvLyBCZWZvcmUgZW50ZXJpbmcgdGhlIGJlZ2luIHBoYXNlLCBjbGVhciBwZW5kaW5nIHVwZGF0ZSBwcmlvcml0eS5cbiAgLy8gVE9ETzogVGhpcyBhc3N1bWVzIHRoYXQgd2UncmUgYWJvdXQgdG8gZXZhbHVhdGUgdGhlIGNvbXBvbmVudCBhbmQgcHJvY2Vzc1xuICAvLyB0aGUgdXBkYXRlIHF1ZXVlLiBIb3dldmVyLCB0aGVyZSdzIGFuIGV4Y2VwdGlvbjogU2ltcGxlTWVtb0NvbXBvbmVudFxuICAvLyBzb21ldGltZXMgYmFpbHMgb3V0IGxhdGVyIGluIHRoZSBiZWdpbiBwaGFzZS4gVGhpcyBpbmRpY2F0ZXMgdGhhdCB3ZSBzaG91bGRcbiAgLy8gbW92ZSB0aGlzIGFzc2lnbm1lbnQgb3V0IG9mIHRoZSBjb21tb24gcGF0aCBhbmQgaW50byBlYWNoIGJyYW5jaC5cblxuXG4gIHdvcmtJblByb2dyZXNzLmxhbmVzID0gTm9MYW5lcztcblxuICBzd2l0Y2ggKHdvcmtJblByb2dyZXNzLnRhZykge1xuICAgIGNhc2UgSW5kZXRlcm1pbmF0ZUNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuIG1vdW50SW5kZXRlcm1pbmF0ZUNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgd29ya0luUHJvZ3Jlc3MudHlwZSwgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuXG4gICAgY2FzZSBMYXp5Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgZWxlbWVudFR5cGUgPSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZTtcbiAgICAgICAgcmV0dXJuIG1vdW50TGF6eUNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgZWxlbWVudFR5cGUsIHVwZGF0ZUxhbmVzLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG5cbiAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgX0NvbXBvbmVudCA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG4gICAgICAgIHZhciB1bnJlc29sdmVkUHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gICAgICAgIHZhciByZXNvbHZlZFByb3BzID0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUgPT09IF9Db21wb25lbnQgPyB1bnJlc29sdmVkUHJvcHMgOiByZXNvbHZlRGVmYXVsdFByb3BzKF9Db21wb25lbnQsIHVucmVzb2x2ZWRQcm9wcyk7XG4gICAgICAgIHJldHVybiB1cGRhdGVGdW5jdGlvbkNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgX0NvbXBvbmVudCwgcmVzb2x2ZWRQcm9wcywgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuXG4gICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIF9Db21wb25lbnQyID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgICAgICAgdmFyIF91bnJlc29sdmVkUHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG5cbiAgICAgICAgdmFyIF9yZXNvbHZlZFByb3BzID0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUgPT09IF9Db21wb25lbnQyID8gX3VucmVzb2x2ZWRQcm9wcyA6IHJlc29sdmVEZWZhdWx0UHJvcHMoX0NvbXBvbmVudDIsIF91bnJlc29sdmVkUHJvcHMpO1xuXG4gICAgICAgIHJldHVybiB1cGRhdGVDbGFzc0NvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgX0NvbXBvbmVudDIsIF9yZXNvbHZlZFByb3BzLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RSb290OlxuICAgICAgcmV0dXJuIHVwZGF0ZUhvc3RSb290KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICByZXR1cm4gdXBkYXRlSG9zdENvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuXG4gICAgY2FzZSBIb3N0VGV4dDpcbiAgICAgIHJldHVybiB1cGRhdGVIb3N0VGV4dChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7XG5cbiAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OlxuICAgICAgcmV0dXJuIHVwZGF0ZVN1c3BlbnNlQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgICByZXR1cm4gdXBkYXRlUG9ydGFsQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICB7XG4gICAgICAgIHZhciB0eXBlID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgICAgICAgdmFyIF91bnJlc29sdmVkUHJvcHMyID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuXG4gICAgICAgIHZhciBfcmVzb2x2ZWRQcm9wczIgPSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSA9PT0gdHlwZSA/IF91bnJlc29sdmVkUHJvcHMyIDogcmVzb2x2ZURlZmF1bHRQcm9wcyh0eXBlLCBfdW5yZXNvbHZlZFByb3BzMik7XG5cbiAgICAgICAgcmV0dXJuIHVwZGF0ZUZvcndhcmRSZWYoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHR5cGUsIF9yZXNvbHZlZFByb3BzMiwgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuXG4gICAgY2FzZSBGcmFnbWVudDpcbiAgICAgIHJldHVybiB1cGRhdGVGcmFnbWVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuXG4gICAgY2FzZSBNb2RlOlxuICAgICAgcmV0dXJuIHVwZGF0ZU1vZGUoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICAgIGNhc2UgUHJvZmlsZXI6XG4gICAgICByZXR1cm4gdXBkYXRlUHJvZmlsZXIoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICAgIGNhc2UgQ29udGV4dFByb3ZpZGVyOlxuICAgICAgcmV0dXJuIHVwZGF0ZUNvbnRleHRQcm92aWRlcihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuXG4gICAgY2FzZSBDb250ZXh0Q29uc3VtZXI6XG4gICAgICByZXR1cm4gdXBkYXRlQ29udGV4dENvbnN1bWVyKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAgICBjYXNlIE1lbW9Db21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBfdHlwZTIgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICAgICAgICB2YXIgX3VucmVzb2x2ZWRQcm9wczMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7IC8vIFJlc29sdmUgb3V0ZXIgcHJvcHMgZmlyc3QsIHRoZW4gcmVzb2x2ZSBpbm5lciBwcm9wcy5cblxuICAgICAgICB2YXIgX3Jlc29sdmVkUHJvcHMzID0gcmVzb2x2ZURlZmF1bHRQcm9wcyhfdHlwZTIsIF91bnJlc29sdmVkUHJvcHMzKTtcblxuICAgICAgICB7XG4gICAgICAgICAgaWYgKHdvcmtJblByb2dyZXNzLnR5cGUgIT09IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlKSB7XG4gICAgICAgICAgICB2YXIgb3V0ZXJQcm9wVHlwZXMgPSBfdHlwZTIucHJvcFR5cGVzO1xuXG4gICAgICAgICAgICBpZiAob3V0ZXJQcm9wVHlwZXMpIHtcbiAgICAgICAgICAgICAgY2hlY2tQcm9wVHlwZXMob3V0ZXJQcm9wVHlwZXMsIF9yZXNvbHZlZFByb3BzMywgLy8gUmVzb2x2ZWQgZm9yIG91dGVyIG9ubHlcbiAgICAgICAgICAgICAgJ3Byb3AnLCBnZXRDb21wb25lbnROYW1lKF90eXBlMikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIF9yZXNvbHZlZFByb3BzMyA9IHJlc29sdmVEZWZhdWx0UHJvcHMoX3R5cGUyLnR5cGUsIF9yZXNvbHZlZFByb3BzMyk7XG4gICAgICAgIHJldHVybiB1cGRhdGVNZW1vQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBfdHlwZTIsIF9yZXNvbHZlZFByb3BzMywgdXBkYXRlTGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cblxuICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZVNpbXBsZU1lbW9Db21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHdvcmtJblByb2dyZXNzLnR5cGUsIHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcywgdXBkYXRlTGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cblxuICAgIGNhc2UgSW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgX0NvbXBvbmVudDMgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICAgICAgICB2YXIgX3VucmVzb2x2ZWRQcm9wczQgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG5cbiAgICAgICAgdmFyIF9yZXNvbHZlZFByb3BzNCA9IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlID09PSBfQ29tcG9uZW50MyA/IF91bnJlc29sdmVkUHJvcHM0IDogcmVzb2x2ZURlZmF1bHRQcm9wcyhfQ29tcG9uZW50MywgX3VucmVzb2x2ZWRQcm9wczQpO1xuXG4gICAgICAgIHJldHVybiBtb3VudEluY29tcGxldGVDbGFzc0NvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgX0NvbXBvbmVudDMsIF9yZXNvbHZlZFByb3BzNCwgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuXG4gICAgY2FzZSBTdXNwZW5zZUxpc3RDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHJldHVybiB1cGRhdGVTdXNwZW5zZUxpc3RDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cblxuICAgIGNhc2UgRnVuZGFtZW50YWxDb21wb25lbnQ6XG4gICAgICB7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIFNjb3BlQ29tcG9uZW50OlxuICAgICAge1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBCbG9jazpcbiAgICAgIHtcblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgT2Zmc2NyZWVuQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICByZXR1cm4gdXBkYXRlT2Zmc2NyZWVuQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG5cbiAgICBjYXNlIExlZ2FjeUhpZGRlbkNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZUxlZ2FjeUhpZGRlbkNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuICB9XG5cbiAge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlVua25vd24gdW5pdCBvZiB3b3JrIHRhZyAoXCIgKyB3b3JrSW5Qcm9ncmVzcy50YWcgKyBcIikuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcykge1xuICAvLyBUYWcgdGhlIGZpYmVyIHdpdGggYW4gdXBkYXRlIGVmZmVjdC4gVGhpcyB0dXJucyBhIFBsYWNlbWVudCBpbnRvXG4gIC8vIGEgUGxhY2VtZW50QW5kVXBkYXRlLlxuICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG59XG5cbmZ1bmN0aW9uIG1hcmtSZWYkMSh3b3JrSW5Qcm9ncmVzcykge1xuICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBSZWY7XG59XG5cbnZhciBhcHBlbmRBbGxDaGlsZHJlbjtcbnZhciB1cGRhdGVIb3N0Q29udGFpbmVyO1xudmFyIHVwZGF0ZUhvc3RDb21wb25lbnQkMTtcbnZhciB1cGRhdGVIb3N0VGV4dCQxO1xuXG57XG4gIC8vIE11dGF0aW9uIG1vZGVcbiAgYXBwZW5kQWxsQ2hpbGRyZW4gPSBmdW5jdGlvbiAocGFyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmVlZHNWaXNpYmlsaXR5VG9nZ2xlLCBpc0hpZGRlbikge1xuICAgIC8vIFdlIG9ubHkgaGF2ZSB0aGUgdG9wIEZpYmVyIHRoYXQgd2FzIGNyZWF0ZWQgYnV0IHdlIG5lZWQgcmVjdXJzZSBkb3duIGl0c1xuICAgIC8vIGNoaWxkcmVuIHRvIGZpbmQgYWxsIHRoZSB0ZXJtaW5hbCBub2Rlcy5cbiAgICB2YXIgbm9kZSA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuXG4gICAgd2hpbGUgKG5vZGUgIT09IG51bGwpIHtcbiAgICAgIGlmIChub2RlLnRhZyA9PT0gSG9zdENvbXBvbmVudCB8fCBub2RlLnRhZyA9PT0gSG9zdFRleHQpIHtcbiAgICAgICAgYXBwZW5kSW5pdGlhbENoaWxkKHBhcmVudCwgbm9kZS5zdGF0ZU5vZGUpO1xuICAgICAgfSBlbHNlIGlmIChub2RlLnRhZyA9PT0gSG9zdFBvcnRhbCkgOyBlbHNlIGlmIChub2RlLmNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgICAgbm9kZSA9IG5vZGUuY2hpbGQ7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZSA9PT0gd29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB3aGlsZSAobm9kZS5zaWJsaW5nID09PSBudWxsKSB7XG4gICAgICAgIGlmIChub2RlLnJldHVybiA9PT0gbnVsbCB8fCBub2RlLnJldHVybiA9PT0gd29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgICB9XG5cbiAgICAgIG5vZGUuc2libGluZy5yZXR1cm4gPSBub2RlLnJldHVybjtcbiAgICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gICAgfVxuICB9O1xuXG4gIHVwZGF0ZUhvc3RDb250YWluZXIgPSBmdW5jdGlvbiAod29ya0luUHJvZ3Jlc3MpIHsvLyBOb29wXG4gIH07XG5cbiAgdXBkYXRlSG9zdENvbXBvbmVudCQxID0gZnVuY3Rpb24gKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCB0eXBlLCBuZXdQcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlKSB7XG4gICAgLy8gSWYgd2UgaGF2ZSBhbiBhbHRlcm5hdGUsIHRoYXQgbWVhbnMgdGhpcyBpcyBhbiB1cGRhdGUgYW5kIHdlIG5lZWQgdG9cbiAgICAvLyBzY2hlZHVsZSBhIHNpZGUtZWZmZWN0IHRvIGRvIHRoZSB1cGRhdGVzLlxuICAgIHZhciBvbGRQcm9wcyA9IGN1cnJlbnQubWVtb2l6ZWRQcm9wcztcblxuICAgIGlmIChvbGRQcm9wcyA9PT0gbmV3UHJvcHMpIHtcbiAgICAgIC8vIEluIG11dGF0aW9uIG1vZGUsIHRoaXMgaXMgc3VmZmljaWVudCBmb3IgYSBiYWlsb3V0IGJlY2F1c2VcbiAgICAgIC8vIHdlIHdvbid0IHRvdWNoIHRoaXMgbm9kZSBldmVuIGlmIGNoaWxkcmVuIGNoYW5nZWQuXG4gICAgICByZXR1cm47XG4gICAgfSAvLyBJZiB3ZSBnZXQgdXBkYXRlZCBiZWNhdXNlIG9uZSBvZiBvdXIgY2hpbGRyZW4gdXBkYXRlZCwgd2UgZG9uJ3RcbiAgICAvLyBoYXZlIG5ld1Byb3BzIHNvIHdlJ2xsIGhhdmUgdG8gcmV1c2UgdGhlbS5cbiAgICAvLyBUT0RPOiBTcGxpdCB0aGUgdXBkYXRlIEFQSSBhcyBzZXBhcmF0ZSBmb3IgdGhlIHByb3BzIHZzLiBjaGlsZHJlbi5cbiAgICAvLyBFdmVuIGJldHRlciB3b3VsZCBiZSBpZiBjaGlsZHJlbiB3ZXJlbid0IHNwZWNpYWwgY2FzZWQgYXQgYWxsIHRoby5cblxuXG4gICAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICAgIHZhciBjdXJyZW50SG9zdENvbnRleHQgPSBnZXRIb3N0Q29udGV4dCgpOyAvLyBUT0RPOiBFeHBlcmllbmNpbmcgYW4gZXJyb3Igd2hlcmUgb2xkUHJvcHMgaXMgbnVsbC4gU3VnZ2VzdHMgYSBob3N0XG4gICAgLy8gY29tcG9uZW50IGlzIGhpdHRpbmcgdGhlIHJlc3VtZSBwYXRoLiBGaWd1cmUgb3V0IHdoeS4gUG9zc2libHlcbiAgICAvLyByZWxhdGVkIHRvIGBoaWRkZW5gLlxuXG4gICAgdmFyIHVwZGF0ZVBheWxvYWQgPSBwcmVwYXJlVXBkYXRlKGluc3RhbmNlLCB0eXBlLCBvbGRQcm9wcywgbmV3UHJvcHMsIHJvb3RDb250YWluZXJJbnN0YW5jZSwgY3VycmVudEhvc3RDb250ZXh0KTsgLy8gVE9ETzogVHlwZSB0aGlzIHNwZWNpZmljIHRvIHRoaXMgdHlwZSBvZiBjb21wb25lbnQuXG5cbiAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IHVwZGF0ZVBheWxvYWQ7IC8vIElmIHRoZSB1cGRhdGUgcGF5bG9hZCBpbmRpY2F0ZXMgdGhhdCB0aGVyZSBpcyBhIGNoYW5nZSBvciBpZiB0aGVyZVxuICAgIC8vIGlzIGEgbmV3IHJlZiB3ZSBtYXJrIHRoaXMgYXMgYW4gdXBkYXRlLiBBbGwgdGhlIHdvcmsgaXMgZG9uZSBpbiBjb21taXRXb3JrLlxuXG4gICAgaWYgKHVwZGF0ZVBheWxvYWQpIHtcbiAgICAgIG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpO1xuICAgIH1cbiAgfTtcblxuICB1cGRhdGVIb3N0VGV4dCQxID0gZnVuY3Rpb24gKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBvbGRUZXh0LCBuZXdUZXh0KSB7XG4gICAgLy8gSWYgdGhlIHRleHQgZGlmZmVycywgbWFyayBpdCBhcyBhbiB1cGRhdGUuIEFsbCB0aGUgd29yayBpbiBkb25lIGluIGNvbW1pdFdvcmsuXG4gICAgaWYgKG9sZFRleHQgIT09IG5ld1RleHQpIHtcbiAgICAgIG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gY3V0T2ZmVGFpbElmTmVlZGVkKHJlbmRlclN0YXRlLCBoYXNSZW5kZXJlZEFUYWlsRmFsbGJhY2spIHtcbiAgaWYgKGdldElzSHlkcmF0aW5nKCkpIHtcbiAgICAvLyBJZiB3ZSdyZSBoeWRyYXRpbmcsIHdlIHNob3VsZCBjb25zdW1lIGFzIG1hbnkgaXRlbXMgYXMgd2UgY2FuXG4gICAgLy8gc28gd2UgZG9uJ3QgbGVhdmUgYW55IGJlaGluZC5cbiAgICByZXR1cm47XG4gIH1cblxuICBzd2l0Y2ggKHJlbmRlclN0YXRlLnRhaWxNb2RlKSB7XG4gICAgY2FzZSAnaGlkZGVuJzpcbiAgICAgIHtcbiAgICAgICAgLy8gQW55IGluc2VydGlvbnMgYXQgdGhlIGVuZCBvZiB0aGUgdGFpbCBsaXN0IGFmdGVyIHRoaXMgcG9pbnRcbiAgICAgICAgLy8gc2hvdWxkIGJlIGludmlzaWJsZS4gSWYgdGhlcmUgYXJlIGFscmVhZHkgbW91bnRlZCBib3VuZGFyaWVzXG4gICAgICAgIC8vIGFueXRoaW5nIGJlZm9yZSB0aGVtIGFyZSBub3QgY29uc2lkZXJlZCBmb3IgY29sbGFwc2luZy5cbiAgICAgICAgLy8gVGhlcmVmb3JlIHdlIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgd2hvbGUgdGFpbCB0byBmaW5kIGlmXG4gICAgICAgIC8vIHRoZXJlIGFyZSBhbnkuXG4gICAgICAgIHZhciB0YWlsTm9kZSA9IHJlbmRlclN0YXRlLnRhaWw7XG4gICAgICAgIHZhciBsYXN0VGFpbE5vZGUgPSBudWxsO1xuXG4gICAgICAgIHdoaWxlICh0YWlsTm9kZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGlmICh0YWlsTm9kZS5hbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGxhc3RUYWlsTm9kZSA9IHRhaWxOb2RlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRhaWxOb2RlID0gdGFpbE5vZGUuc2libGluZztcbiAgICAgICAgfSAvLyBOZXh0IHdlJ3JlIHNpbXBseSBnb2luZyB0byBkZWxldGUgYWxsIGluc2VydGlvbnMgYWZ0ZXIgdGhlXG4gICAgICAgIC8vIGxhc3QgcmVuZGVyZWQgaXRlbS5cblxuXG4gICAgICAgIGlmIChsYXN0VGFpbE5vZGUgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBBbGwgcmVtYWluaW5nIGl0ZW1zIGluIHRoZSB0YWlsIGFyZSBpbnNlcnRpb25zLlxuICAgICAgICAgIHJlbmRlclN0YXRlLnRhaWwgPSBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIERldGFjaCB0aGUgaW5zZXJ0aW9uIGFmdGVyIHRoZSBsYXN0IG5vZGUgdGhhdCB3YXMgYWxyZWFkeVxuICAgICAgICAgIC8vIGluc2VydGVkLlxuICAgICAgICAgIGxhc3RUYWlsTm9kZS5zaWJsaW5nID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSAnY29sbGFwc2VkJzpcbiAgICAgIHtcbiAgICAgICAgLy8gQW55IGluc2VydGlvbnMgYXQgdGhlIGVuZCBvZiB0aGUgdGFpbCBsaXN0IGFmdGVyIHRoaXMgcG9pbnRcbiAgICAgICAgLy8gc2hvdWxkIGJlIGludmlzaWJsZS4gSWYgdGhlcmUgYXJlIGFscmVhZHkgbW91bnRlZCBib3VuZGFyaWVzXG4gICAgICAgIC8vIGFueXRoaW5nIGJlZm9yZSB0aGVtIGFyZSBub3QgY29uc2lkZXJlZCBmb3IgY29sbGFwc2luZy5cbiAgICAgICAgLy8gVGhlcmVmb3JlIHdlIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgd2hvbGUgdGFpbCB0byBmaW5kIGlmXG4gICAgICAgIC8vIHRoZXJlIGFyZSBhbnkuXG4gICAgICAgIHZhciBfdGFpbE5vZGUgPSByZW5kZXJTdGF0ZS50YWlsO1xuICAgICAgICB2YXIgX2xhc3RUYWlsTm9kZSA9IG51bGw7XG5cbiAgICAgICAgd2hpbGUgKF90YWlsTm9kZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGlmIChfdGFpbE5vZGUuYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBfbGFzdFRhaWxOb2RlID0gX3RhaWxOb2RlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIF90YWlsTm9kZSA9IF90YWlsTm9kZS5zaWJsaW5nO1xuICAgICAgICB9IC8vIE5leHQgd2UncmUgc2ltcGx5IGdvaW5nIHRvIGRlbGV0ZSBhbGwgaW5zZXJ0aW9ucyBhZnRlciB0aGVcbiAgICAgICAgLy8gbGFzdCByZW5kZXJlZCBpdGVtLlxuXG5cbiAgICAgICAgaWYgKF9sYXN0VGFpbE5vZGUgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBBbGwgcmVtYWluaW5nIGl0ZW1zIGluIHRoZSB0YWlsIGFyZSBpbnNlcnRpb25zLlxuICAgICAgICAgIGlmICghaGFzUmVuZGVyZWRBVGFpbEZhbGxiYWNrICYmIHJlbmRlclN0YXRlLnRhaWwgIT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIFdlIHN1c3BlbmRlZCBkdXJpbmcgdGhlIGhlYWQuIFdlIHdhbnQgdG8gc2hvdyBhdCBsZWFzdCBvbmVcbiAgICAgICAgICAgIC8vIHJvdyBhdCB0aGUgdGFpbC4gU28gd2UnbGwga2VlcCBvbiBhbmQgY3V0IG9mZiB0aGUgcmVzdC5cbiAgICAgICAgICAgIHJlbmRlclN0YXRlLnRhaWwuc2libGluZyA9IG51bGw7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlbmRlclN0YXRlLnRhaWwgPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBEZXRhY2ggdGhlIGluc2VydGlvbiBhZnRlciB0aGUgbGFzdCBub2RlIHRoYXQgd2FzIGFscmVhZHlcbiAgICAgICAgICAvLyBpbnNlcnRlZC5cbiAgICAgICAgICBfbGFzdFRhaWxOb2RlLnNpYmxpbmcgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tcGxldGVXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICB2YXIgbmV3UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG5cbiAgc3dpdGNoICh3b3JrSW5Qcm9ncmVzcy50YWcpIHtcbiAgICBjYXNlIEluZGV0ZXJtaW5hdGVDb21wb25lbnQ6XG4gICAgY2FzZSBMYXp5Q29tcG9uZW50OlxuICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICBjYXNlIEZyYWdtZW50OlxuICAgIGNhc2UgTW9kZTpcbiAgICBjYXNlIFByb2ZpbGVyOlxuICAgIGNhc2UgQ29udGV4dENvbnN1bWVyOlxuICAgIGNhc2UgTWVtb0NvbXBvbmVudDpcbiAgICAgIHJldHVybiBudWxsO1xuXG4gICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIENvbXBvbmVudCA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG5cbiAgICAgICAgaWYgKGlzQ29udGV4dFByb3ZpZGVyKENvbXBvbmVudCkpIHtcbiAgICAgICAgICBwb3BDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgIHtcbiAgICAgICAgcG9wSG9zdENvbnRhaW5lcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHBvcFRvcExldmVsQ29udGV4dE9iamVjdCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHJlc2V0V29ya0luUHJvZ3Jlc3NWZXJzaW9ucygpO1xuICAgICAgICB2YXIgZmliZXJSb290ID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuXG4gICAgICAgIGlmIChmaWJlclJvb3QucGVuZGluZ0NvbnRleHQpIHtcbiAgICAgICAgICBmaWJlclJvb3QuY29udGV4dCA9IGZpYmVyUm9vdC5wZW5kaW5nQ29udGV4dDtcbiAgICAgICAgICBmaWJlclJvb3QucGVuZGluZ0NvbnRleHQgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGN1cnJlbnQgPT09IG51bGwgfHwgY3VycmVudC5jaGlsZCA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIElmIHdlIGh5ZHJhdGVkLCBwb3Agc28gdGhhdCB3ZSBjYW4gZGVsZXRlIGFueSByZW1haW5pbmcgY2hpbGRyZW5cbiAgICAgICAgICAvLyB0aGF0IHdlcmVuJ3QgaHlkcmF0ZWQuXG4gICAgICAgICAgdmFyIHdhc0h5ZHJhdGVkID0gcG9wSHlkcmF0aW9uU3RhdGUod29ya0luUHJvZ3Jlc3MpO1xuXG4gICAgICAgICAgaWYgKHdhc0h5ZHJhdGVkKSB7XG4gICAgICAgICAgICAvLyBJZiB3ZSBoeWRyYXRlZCwgdGhlbiB3ZSdsbCBuZWVkIHRvIHNjaGVkdWxlIGFuIHVwZGF0ZSBmb3JcbiAgICAgICAgICAgIC8vIHRoZSBjb21taXQgc2lkZS1lZmZlY3RzIG9uIHRoZSByb290LlxuICAgICAgICAgICAgbWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgfSBlbHNlIGlmICghZmliZXJSb290Lmh5ZHJhdGUpIHtcbiAgICAgICAgICAgIC8vIFNjaGVkdWxlIGFuIGVmZmVjdCB0byBjbGVhciB0aGlzIGNvbnRhaW5lciBhdCB0aGUgc3RhcnQgb2YgdGhlIG5leHQgY29tbWl0LlxuICAgICAgICAgICAgLy8gVGhpcyBoYW5kbGVzIHRoZSBjYXNlIG9mIFJlYWN0IHJlbmRlcmluZyBpbnRvIGEgY29udGFpbmVyIHdpdGggcHJldmlvdXMgY2hpbGRyZW4uXG4gICAgICAgICAgICAvLyBJdCdzIGFsc28gc2FmZSB0byBkbyBmb3IgdXBkYXRlcyB0b28sIGJlY2F1c2UgY3VycmVudC5jaGlsZCB3b3VsZCBvbmx5IGJlIG51bGxcbiAgICAgICAgICAgIC8vIGlmIHRoZSBwcmV2aW91cyByZW5kZXIgd2FzIG51bGwgKHNvIHRoZSB0aGUgY29udGFpbmVyIHdvdWxkIGFscmVhZHkgYmUgZW1wdHkpLlxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gU25hcHNob3Q7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdXBkYXRlSG9zdENvbnRhaW5lcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBwb3BIb3N0Q29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHZhciByb290Q29udGFpbmVySW5zdGFuY2UgPSBnZXRSb290SG9zdENvbnRhaW5lcigpO1xuICAgICAgICB2YXIgdHlwZSA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG5cbiAgICAgICAgaWYgKGN1cnJlbnQgIT09IG51bGwgJiYgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlICE9IG51bGwpIHtcbiAgICAgICAgICB1cGRhdGVIb3N0Q29tcG9uZW50JDEoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHR5cGUsIG5ld1Byb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UpO1xuXG4gICAgICAgICAgaWYgKGN1cnJlbnQucmVmICE9PSB3b3JrSW5Qcm9ncmVzcy5yZWYpIHtcbiAgICAgICAgICAgIG1hcmtSZWYkMSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICghbmV3UHJvcHMpIHtcbiAgICAgICAgICAgIGlmICghKHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSAhPT0gbnVsbCkpIHtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCBcIldlIG11c3QgaGF2ZSBuZXcgcHJvcHMgZm9yIG5ldyBtb3VudHMuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSAvLyBUaGlzIGNhbiBoYXBwZW4gd2hlbiB3ZSBhYm9ydCB3b3JrLlxuXG5cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBjdXJyZW50SG9zdENvbnRleHQgPSBnZXRIb3N0Q29udGV4dCgpOyAvLyBUT0RPOiBNb3ZlIGNyZWF0ZUluc3RhbmNlIHRvIGJlZ2luV29yayBhbmQga2VlcCBpdCBvbiBhIGNvbnRleHRcbiAgICAgICAgICAvLyBcInN0YWNrXCIgYXMgdGhlIHBhcmVudC4gVGhlbiBhcHBlbmQgY2hpbGRyZW4gYXMgd2UgZ28gaW4gYmVnaW5Xb3JrXG4gICAgICAgICAgLy8gb3IgY29tcGxldGVXb3JrIGRlcGVuZGluZyBvbiB3aGV0aGVyIHdlIHdhbnQgdG8gYWRkIHRoZW0gdG9wLT5kb3duIG9yXG4gICAgICAgICAgLy8gYm90dG9tLT51cC4gVG9wLT5kb3duIGlzIGZhc3RlciBpbiBJRTExLlxuXG4gICAgICAgICAgdmFyIF93YXNIeWRyYXRlZCA9IHBvcEh5ZHJhdGlvblN0YXRlKHdvcmtJblByb2dyZXNzKTtcblxuICAgICAgICAgIGlmIChfd2FzSHlkcmF0ZWQpIHtcbiAgICAgICAgICAgIC8vIFRPRE86IE1vdmUgdGhpcyBhbmQgY3JlYXRlSW5zdGFuY2Ugc3RlcCBpbnRvIHRoZSBiZWdpblBoYXNlXG4gICAgICAgICAgICAvLyB0byBjb25zb2xpZGF0ZS5cbiAgICAgICAgICAgIGlmIChwcmVwYXJlVG9IeWRyYXRlSG9zdEluc3RhbmNlKHdvcmtJblByb2dyZXNzLCByb290Q29udGFpbmVySW5zdGFuY2UsIGN1cnJlbnRIb3N0Q29udGV4dCkpIHtcbiAgICAgICAgICAgICAgLy8gSWYgY2hhbmdlcyB0byB0aGUgaHlkcmF0ZWQgbm9kZSBuZWVkIHRvIGJlIGFwcGxpZWQgYXQgdGhlXG4gICAgICAgICAgICAgIC8vIGNvbW1pdC1waGFzZSB3ZSBtYXJrIHRoaXMgYXMgc3VjaC5cbiAgICAgICAgICAgICAgbWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBpbnN0YW5jZSA9IGNyZWF0ZUluc3RhbmNlKHR5cGUsIG5ld1Byb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UsIGN1cnJlbnRIb3N0Q29udGV4dCwgd29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgYXBwZW5kQWxsQ2hpbGRyZW4oaW5zdGFuY2UsIHdvcmtJblByb2dyZXNzLCBmYWxzZSwgZmFsc2UpO1xuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID0gaW5zdGFuY2U7IC8vIENlcnRhaW4gcmVuZGVyZXJzIHJlcXVpcmUgY29tbWl0LXRpbWUgZWZmZWN0cyBmb3IgaW5pdGlhbCBtb3VudC5cbiAgICAgICAgICAgIC8vIChlZyBET00gcmVuZGVyZXIgc3VwcG9ydHMgYXV0by1mb2N1cyBmb3IgY2VydGFpbiBlbGVtZW50cykuXG4gICAgICAgICAgICAvLyBNYWtlIHN1cmUgc3VjaCByZW5kZXJlcnMgZ2V0IHNjaGVkdWxlZCBmb3IgbGF0ZXIgd29yay5cblxuICAgICAgICAgICAgaWYgKGZpbmFsaXplSW5pdGlhbENoaWxkcmVuKGluc3RhbmNlLCB0eXBlLCBuZXdQcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlKSkge1xuICAgICAgICAgICAgICBtYXJrVXBkYXRlKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAod29ya0luUHJvZ3Jlc3MucmVmICE9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBhIHJlZiBvbiBhIGhvc3Qgbm9kZSB3ZSBuZWVkIHRvIHNjaGVkdWxlIGEgY2FsbGJhY2tcbiAgICAgICAgICAgIG1hcmtSZWYkMSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RUZXh0OlxuICAgICAge1xuICAgICAgICB2YXIgbmV3VGV4dCA9IG5ld1Byb3BzO1xuXG4gICAgICAgIGlmIChjdXJyZW50ICYmIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSAhPSBudWxsKSB7XG4gICAgICAgICAgdmFyIG9sZFRleHQgPSBjdXJyZW50Lm1lbW9pemVkUHJvcHM7IC8vIElmIHdlIGhhdmUgYW4gYWx0ZXJuYXRlLCB0aGF0IG1lYW5zIHRoaXMgaXMgYW4gdXBkYXRlIGFuZCB3ZSBuZWVkXG4gICAgICAgICAgLy8gdG8gc2NoZWR1bGUgYSBzaWRlLWVmZmVjdCB0byBkbyB0aGUgdXBkYXRlcy5cblxuICAgICAgICAgIHVwZGF0ZUhvc3RUZXh0JDEoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG9sZFRleHQsIG5ld1RleHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0eXBlb2YgbmV3VGV4dCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGlmICghKHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSAhPT0gbnVsbCkpIHtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCBcIldlIG11c3QgaGF2ZSBuZXcgcHJvcHMgZm9yIG5ldyBtb3VudHMuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSAvLyBUaGlzIGNhbiBoYXBwZW4gd2hlbiB3ZSBhYm9ydCB3b3JrLlxuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIF9yb290Q29udGFpbmVySW5zdGFuY2UgPSBnZXRSb290SG9zdENvbnRhaW5lcigpO1xuXG4gICAgICAgICAgdmFyIF9jdXJyZW50SG9zdENvbnRleHQgPSBnZXRIb3N0Q29udGV4dCgpO1xuXG4gICAgICAgICAgdmFyIF93YXNIeWRyYXRlZDIgPSBwb3BIeWRyYXRpb25TdGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG5cbiAgICAgICAgICBpZiAoX3dhc0h5ZHJhdGVkMikge1xuICAgICAgICAgICAgaWYgKHByZXBhcmVUb0h5ZHJhdGVIb3N0VGV4dEluc3RhbmNlKHdvcmtJblByb2dyZXNzKSkge1xuICAgICAgICAgICAgICBtYXJrVXBkYXRlKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID0gY3JlYXRlVGV4dEluc3RhbmNlKG5ld1RleHQsIF9yb290Q29udGFpbmVySW5zdGFuY2UsIF9jdXJyZW50SG9zdENvbnRleHQsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHBvcFN1c3BlbnNlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHZhciBuZXh0U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuXG4gICAgICAgIGlmICgod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiBEaWRDYXB0dXJlKSAhPT0gTm9GbGFncykge1xuICAgICAgICAgIC8vIFNvbWV0aGluZyBzdXNwZW5kZWQuIFJlLXJlbmRlciB3aXRoIHRoZSBmYWxsYmFjayBjaGlsZHJlbi5cbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IHJlbmRlckxhbmVzOyAvLyBEbyBub3QgcmVzZXQgdGhlIGVmZmVjdCBsaXN0LlxuXG4gICAgICAgICAgaWYgKCAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgICAgICAgICB0cmFuc2ZlckFjdHVhbER1cmF0aW9uKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbmV4dERpZFRpbWVvdXQgPSBuZXh0U3RhdGUgIT09IG51bGw7XG4gICAgICAgIHZhciBwcmV2RGlkVGltZW91dCA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgICAgICAgaWYgKHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHMuZmFsbGJhY2sgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcG9wSHlkcmF0aW9uU3RhdGUod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgcHJldlN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuICAgICAgICAgIHByZXZEaWRUaW1lb3V0ID0gcHJldlN0YXRlICE9PSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5leHREaWRUaW1lb3V0ICYmICFwcmV2RGlkVGltZW91dCkge1xuICAgICAgICAgIC8vIElmIHRoaXMgc3VidHJlZWUgaXMgcnVubmluZyBpbiBibG9ja2luZyBtb2RlIHdlIGNhbiBzdXNwZW5kLFxuICAgICAgICAgIC8vIG90aGVyd2lzZSB3ZSB3b24ndCBzdXNwZW5kLlxuICAgICAgICAgIC8vIFRPRE86IFRoaXMgd2lsbCBzdGlsbCBzdXNwZW5kIGEgc3luY2hyb25vdXMgdHJlZSBpZiBhbnl0aGluZ1xuICAgICAgICAgIC8vIGluIHRoZSBjb25jdXJyZW50IHRyZWUgYWxyZWFkeSBzdXNwZW5kZWQgZHVyaW5nIHRoaXMgcmVuZGVyLlxuICAgICAgICAgIC8vIFRoaXMgaXMgYSBrbm93biBidWcuXG4gICAgICAgICAgaWYgKCh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgQmxvY2tpbmdNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBNb3ZlIHRoaXMgYmFjayB0byB0aHJvd0V4Y2VwdGlvbiBiZWNhdXNlIHRoaXMgaXMgdG9vIGxhdGVcbiAgICAgICAgICAgIC8vIGlmIHRoaXMgaXMgYSBsYXJnZSB0cmVlIHdoaWNoIGlzIGNvbW1vbiBmb3IgaW5pdGlhbCBsb2Fkcy4gV2VcbiAgICAgICAgICAgIC8vIGRvbid0IGtub3cgaWYgd2Ugc2hvdWxkIHJlc3RhcnQgYSByZW5kZXIgb3Igbm90IHVudGlsIHdlIGdldFxuICAgICAgICAgICAgLy8gdGhpcyBtYXJrZXIsIGFuZCB0aGlzIGlzIHRvbyBsYXRlLlxuICAgICAgICAgICAgLy8gSWYgdGhpcyByZW5kZXIgYWxyZWFkeSBoYWQgYSBwaW5nIG9yIGxvd2VyIHByaSB1cGRhdGVzLFxuICAgICAgICAgICAgLy8gYW5kIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgd2Uga25vdyB3ZSdyZSBnb2luZyB0byBzdXNwZW5kIHdlXG4gICAgICAgICAgICAvLyBzaG91bGQgYmUgYWJsZSB0byBpbW1lZGlhdGVseSByZXN0YXJ0IGZyb20gd2l0aGluIHRocm93RXhjZXB0aW9uLlxuICAgICAgICAgICAgdmFyIGhhc0ludmlzaWJsZUNoaWxkQ29udGV4dCA9IGN1cnJlbnQgPT09IG51bGwgJiYgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcy51bnN0YWJsZV9hdm9pZFRoaXNGYWxsYmFjayAhPT0gdHJ1ZTtcblxuICAgICAgICAgICAgaWYgKGhhc0ludmlzaWJsZUNoaWxkQ29udGV4dCB8fCBoYXNTdXNwZW5zZUNvbnRleHQoc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50LCBJbnZpc2libGVQYXJlbnRTdXNwZW5zZUNvbnRleHQpKSB7XG4gICAgICAgICAgICAgIC8vIElmIHRoaXMgd2FzIGluIGFuIGludmlzaWJsZSB0cmVlIG9yIGEgbmV3IHJlbmRlciwgdGhlbiBzaG93aW5nXG4gICAgICAgICAgICAgIC8vIHRoaXMgYm91bmRhcnkgaXMgb2suXG4gICAgICAgICAgICAgIHJlbmRlckRpZFN1c3BlbmQoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgd2UncmUgZ29pbmcgdG8gaGF2ZSB0byBoaWRlIGNvbnRlbnQgc28gd2Ugc2hvdWxkXG4gICAgICAgICAgICAgIC8vIHN1c3BlbmQgZm9yIGxvbmdlciBpZiBwb3NzaWJsZS5cbiAgICAgICAgICAgICAgcmVuZGVyRGlkU3VzcGVuZERlbGF5SWZQb3NzaWJsZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHtcbiAgICAgICAgICAvLyBUT0RPOiBPbmx5IHNjaGVkdWxlIHVwZGF0ZXMgaWYgdGhlc2UgdmFsdWVzIGFyZSBub24gZXF1YWwsIGkuZS4gaXQgY2hhbmdlZC5cbiAgICAgICAgICBpZiAobmV4dERpZFRpbWVvdXQgfHwgcHJldkRpZFRpbWVvdXQpIHtcbiAgICAgICAgICAgIC8vIElmIHRoaXMgYm91bmRhcnkganVzdCB0aW1lZCBvdXQsIHNjaGVkdWxlIGFuIGVmZmVjdCB0byBhdHRhY2ggYVxuICAgICAgICAgICAgLy8gcmV0cnkgbGlzdGVuZXIgdG8gdGhlIHByb21pc2UuIFRoaXMgZmxhZyBpcyBhbHNvIHVzZWQgdG8gaGlkZSB0aGVcbiAgICAgICAgICAgIC8vIHByaW1hcnkgY2hpbGRyZW4uIEluIG11dGF0aW9uIG1vZGUsIHdlIGFsc28gbmVlZCB0aGUgZmxhZyB0b1xuICAgICAgICAgICAgLy8gKnVuaGlkZSogY2hpbGRyZW4gdGhhdCB3ZXJlIHByZXZpb3VzbHkgaGlkZGVuLCBzbyBjaGVjayBpZiB0aGlzXG4gICAgICAgICAgICAvLyBpcyBjdXJyZW50bHkgdGltZWQgb3V0LCB0b28uXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgICBwb3BIb3N0Q29udGFpbmVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHVwZGF0ZUhvc3RDb250YWluZXIod29ya0luUHJvZ3Jlc3MpO1xuXG4gICAgICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgICAgICBwcmVwYXJlUG9ydGFsTW91bnQod29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIGNhc2UgQ29udGV4dFByb3ZpZGVyOlxuICAgICAgLy8gUG9wIHByb3ZpZGVyIGZpYmVyXG4gICAgICBwb3BQcm92aWRlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIGNhc2UgSW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICAvLyBTYW1lIGFzIGNsYXNzIGNvbXBvbmVudCBjYXNlLiBJIHB1dCBpdCBkb3duIGhlcmUgc28gdGhhdCB0aGUgdGFncyBhcmVcbiAgICAgICAgLy8gc2VxdWVudGlhbCB0byBlbnN1cmUgdGhpcyBzd2l0Y2ggaXMgY29tcGlsZWQgdG8gYSBqdW1wIHRhYmxlLlxuICAgICAgICB2YXIgX0NvbXBvbmVudCA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG5cbiAgICAgICAgaWYgKGlzQ29udGV4dFByb3ZpZGVyKF9Db21wb25lbnQpKSB7XG4gICAgICAgICAgcG9wQ29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgIGNhc2UgU3VzcGVuc2VMaXN0Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBwb3BTdXNwZW5zZUNvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICB2YXIgcmVuZGVyU3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuXG4gICAgICAgIGlmIChyZW5kZXJTdGF0ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIFdlJ3JlIHJ1bm5pbmcgaW4gdGhlIGRlZmF1bHQsIFwiaW5kZXBlbmRlbnRcIiBtb2RlLlxuICAgICAgICAgIC8vIFdlIGRvbid0IGRvIGFueXRoaW5nIGluIHRoaXMgbW9kZS5cbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBkaWRTdXNwZW5kQWxyZWFkeSA9ICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIERpZENhcHR1cmUpICE9PSBOb0ZsYWdzO1xuICAgICAgICB2YXIgcmVuZGVyZWRUYWlsID0gcmVuZGVyU3RhdGUucmVuZGVyaW5nO1xuXG4gICAgICAgIGlmIChyZW5kZXJlZFRhaWwgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBXZSBqdXN0IHJlbmRlcmVkIHRoZSBoZWFkLlxuICAgICAgICAgIGlmICghZGlkU3VzcGVuZEFscmVhZHkpIHtcbiAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGZpcnN0IHBhc3MuIFdlIG5lZWQgdG8gZmlndXJlIG91dCBpZiBhbnl0aGluZyBpcyBzdGlsbFxuICAgICAgICAgICAgLy8gc3VzcGVuZGVkIGluIHRoZSByZW5kZXJlZCBzZXQuXG4gICAgICAgICAgICAvLyBJZiBuZXcgY29udGVudCB1bnN1c3BlbmRlZCwgYnV0IHRoZXJlJ3Mgc3RpbGwgc29tZSBjb250ZW50IHRoYXRcbiAgICAgICAgICAgIC8vIGRpZG4ndC4gVGhlbiB3ZSBuZWVkIHRvIGRvIGEgc2Vjb25kIHBhc3MgdGhhdCBmb3JjZXMgZXZlcnl0aGluZ1xuICAgICAgICAgICAgLy8gdG8ga2VlcCBzaG93aW5nIHRoZWlyIGZhbGxiYWNrcy5cbiAgICAgICAgICAgIC8vIFdlIG1pZ2h0IGJlIHN1c3BlbmRlZCBpZiBzb21ldGhpbmcgaW4gdGhpcyByZW5kZXIgcGFzcyBzdXNwZW5kZWQsIG9yXG4gICAgICAgICAgICAvLyBzb21ldGhpbmcgaW4gdGhlIHByZXZpb3VzIGNvbW1pdHRlZCBwYXNzIHN1c3BlbmRlZC4gT3RoZXJ3aXNlLFxuICAgICAgICAgICAgLy8gdGhlcmUncyBubyBjaGFuY2Ugc28gd2UgY2FuIHNraXAgdGhlIGV4cGVuc2l2ZSBjYWxsIHRvXG4gICAgICAgICAgICAvLyBmaW5kRmlyc3RTdXNwZW5kZWQuXG4gICAgICAgICAgICB2YXIgY2Fubm90QmVTdXNwZW5kZWQgPSByZW5kZXJIYXNOb3RTdXNwZW5kZWRZZXQoKSAmJiAoY3VycmVudCA9PT0gbnVsbCB8fCAoY3VycmVudC5mbGFncyAmIERpZENhcHR1cmUpID09PSBOb0ZsYWdzKTtcblxuICAgICAgICAgICAgaWYgKCFjYW5ub3RCZVN1c3BlbmRlZCkge1xuICAgICAgICAgICAgICB2YXIgcm93ID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG5cbiAgICAgICAgICAgICAgd2hpbGUgKHJvdyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHZhciBzdXNwZW5kZWQgPSBmaW5kRmlyc3RTdXNwZW5kZWQocm93KTtcblxuICAgICAgICAgICAgICAgIGlmIChzdXNwZW5kZWQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgIGRpZFN1c3BlbmRBbHJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IERpZENhcHR1cmU7XG4gICAgICAgICAgICAgICAgICBjdXRPZmZUYWlsSWZOZWVkZWQocmVuZGVyU3RhdGUsIGZhbHNlKTsgLy8gSWYgdGhpcyBpcyBhIG5ld2x5IHN1c3BlbmRlZCB0cmVlLCBpdCBtaWdodCBub3QgZ2V0IGNvbW1pdHRlZCBhc1xuICAgICAgICAgICAgICAgICAgLy8gcGFydCBvZiB0aGUgc2Vjb25kIHBhc3MuIEluIHRoYXQgY2FzZSBub3RoaW5nIHdpbGwgc3Vic2NyaWJlIHRvXG4gICAgICAgICAgICAgICAgICAvLyBpdHMgdGhlbm5hYmxlcy4gSW5zdGVhZCwgd2UnbGwgdHJhbnNmZXIgaXRzIHRoZW5uYWJsZXMgdG8gdGhlXG4gICAgICAgICAgICAgICAgICAvLyBTdXNwZW5zZUxpc3Qgc28gdGhhdCBpdCBjYW4gcmV0cnkgaWYgdGhleSByZXNvbHZlLlxuICAgICAgICAgICAgICAgICAgLy8gVGhlcmUgbWlnaHQgYmUgbXVsdGlwbGUgb2YgdGhlc2UgaW4gdGhlIGxpc3QgYnV0IHNpbmNlIHdlJ3JlXG4gICAgICAgICAgICAgICAgICAvLyBnb2luZyB0byB3YWl0IGZvciBhbGwgb2YgdGhlbSBhbnl3YXksIGl0IGRvZXNuJ3QgcmVhbGx5IG1hdHRlclxuICAgICAgICAgICAgICAgICAgLy8gd2hpY2ggb25lcyBnZXRzIHRvIHBpbmcuIEluIHRoZW9yeSB3ZSBjb3VsZCBnZXQgY2xldmVyIGFuZCBrZWVwXG4gICAgICAgICAgICAgICAgICAvLyB0cmFjayBvZiBob3cgbWFueSBkZXBlbmRlbmNpZXMgcmVtYWluIGJ1dCBpdCBnZXRzIHRyaWNreSBiZWNhdXNlXG4gICAgICAgICAgICAgICAgICAvLyBpbiB0aGUgbWVhbnRpbWUsIHdlIGNhbiBhZGQvcmVtb3ZlL2NoYW5nZSBpdGVtcyBhbmQgZGVwZW5kZW5jaWVzLlxuICAgICAgICAgICAgICAgICAgLy8gV2UgbWlnaHQgYmFpbCBvdXQgb2YgdGhlIGxvb3AgYmVmb3JlIGZpbmRpbmcgYW55IGJ1dCB0aGF0XG4gICAgICAgICAgICAgICAgICAvLyBkb2Vzbid0IG1hdHRlciBzaW5jZSB0aGF0IG1lYW5zIHRoYXQgdGhlIG90aGVyIGJvdW5kYXJpZXMgdGhhdFxuICAgICAgICAgICAgICAgICAgLy8gd2UgZGlkIGZpbmQgYWxyZWFkeSBoYXMgdGhlaXIgbGlzdGVuZXJzIGF0dGFjaGVkLlxuXG4gICAgICAgICAgICAgICAgICB2YXIgbmV3VGhlbm5hYmxlcyA9IHN1c3BlbmRlZC51cGRhdGVRdWV1ZTtcblxuICAgICAgICAgICAgICAgICAgaWYgKG5ld1RoZW5uYWJsZXMgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBuZXdUaGVubmFibGVzO1xuICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG4gICAgICAgICAgICAgICAgICB9IC8vIFJlcmVuZGVyIHRoZSB3aG9sZSBsaXN0LCBidXQgdGhpcyB0aW1lLCB3ZSdsbCBmb3JjZSBmYWxsYmFja3NcbiAgICAgICAgICAgICAgICAgIC8vIHRvIHN0YXkgaW4gcGxhY2UuXG4gICAgICAgICAgICAgICAgICAvLyBSZXNldCB0aGUgZWZmZWN0IGxpc3QgYmVmb3JlIGRvaW5nIHRoZSBzZWNvbmQgcGFzcyBzaW5jZSB0aGF0J3Mgbm93IGludmFsaWQuXG5cblxuICAgICAgICAgICAgICAgICAgaWYgKHJlbmRlclN0YXRlLmxhc3RFZmZlY3QgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmlyc3RFZmZlY3QgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5sYXN0RWZmZWN0ID0gcmVuZGVyU3RhdGUubGFzdEVmZmVjdDsgLy8gUmVzZXQgdGhlIGNoaWxkIGZpYmVycyB0byB0aGVpciBvcmlnaW5hbCBzdGF0ZS5cblxuICAgICAgICAgICAgICAgICAgcmVzZXRDaGlsZEZpYmVycyh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpOyAvLyBTZXQgdXAgdGhlIFN1c3BlbnNlIENvbnRleHQgdG8gZm9yY2Ugc3VzcGVuc2UgYW5kIGltbWVkaWF0ZWx5XG4gICAgICAgICAgICAgICAgICAvLyByZXJlbmRlciB0aGUgY2hpbGRyZW4uXG5cbiAgICAgICAgICAgICAgICAgIHB1c2hTdXNwZW5zZUNvbnRleHQod29ya0luUHJvZ3Jlc3MsIHNldFNoYWxsb3dTdXNwZW5zZUNvbnRleHQoc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50LCBGb3JjZVN1c3BlbnNlRmFsbGJhY2spKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByb3cgPSByb3cuc2libGluZztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocmVuZGVyU3RhdGUudGFpbCAhPT0gbnVsbCAmJiBub3coKSA+IGdldFJlbmRlclRhcmdldFRpbWUoKSkge1xuICAgICAgICAgICAgICAvLyBXZSBoYXZlIGFscmVhZHkgcGFzc2VkIG91ciBDUFUgZGVhZGxpbmUgYnV0IHdlIHN0aWxsIGhhdmUgcm93c1xuICAgICAgICAgICAgICAvLyBsZWZ0IGluIHRoZSB0YWlsLiBXZSdsbCBqdXN0IGdpdmUgdXAgZnVydGhlciBhdHRlbXB0cyB0byByZW5kZXJcbiAgICAgICAgICAgICAgLy8gdGhlIG1haW4gY29udGVudCBhbmQgb25seSByZW5kZXIgZmFsbGJhY2tzLlxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBEaWRDYXB0dXJlO1xuICAgICAgICAgICAgICBkaWRTdXNwZW5kQWxyZWFkeSA9IHRydWU7XG4gICAgICAgICAgICAgIGN1dE9mZlRhaWxJZk5lZWRlZChyZW5kZXJTdGF0ZSwgZmFsc2UpOyAvLyBTaW5jZSBub3RoaW5nIGFjdHVhbGx5IHN1c3BlbmRlZCwgdGhlcmUgd2lsbCBub3RoaW5nIHRvIHBpbmcgdGhpc1xuICAgICAgICAgICAgICAvLyB0byBnZXQgaXQgc3RhcnRlZCBiYWNrIHVwIHRvIGF0dGVtcHQgdGhlIG5leHQgaXRlbS4gV2hpbGUgaW4gdGVybXNcbiAgICAgICAgICAgICAgLy8gb2YgcHJpb3JpdHkgdGhpcyB3b3JrIGhhcyB0aGUgc2FtZSBwcmlvcml0eSBhcyB0aGlzIGN1cnJlbnQgcmVuZGVyLFxuICAgICAgICAgICAgICAvLyBpdCdzIG5vdCBwYXJ0IG9mIHRoZSBzYW1lIHRyYW5zaXRpb24gb25jZSB0aGUgdHJhbnNpdGlvbiBoYXNcbiAgICAgICAgICAgICAgLy8gY29tbWl0dGVkLiBJZiBpdCdzIHN5bmMsIHdlIHN0aWxsIHdhbnQgdG8geWllbGQgc28gdGhhdCBpdCBjYW4gYmVcbiAgICAgICAgICAgICAgLy8gcGFpbnRlZC4gQ29uY2VwdHVhbGx5LCB0aGlzIGlzIHJlYWxseSB0aGUgc2FtZSBhcyBwaW5naW5nLlxuICAgICAgICAgICAgICAvLyBXZSBjYW4gdXNlIGFueSBSZXRyeUxhbmUgZXZlbiBpZiBpdCdzIHRoZSBvbmUgY3VycmVudGx5IHJlbmRlcmluZ1xuICAgICAgICAgICAgICAvLyBzaW5jZSB3ZSdyZSBsZWF2aW5nIGl0IGJlaGluZCBvbiB0aGlzIG5vZGUuXG5cbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBTb21lUmV0cnlMYW5lO1xuXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBtYXJrU3Bhd25lZFdvcmsoU29tZVJldHJ5TGFuZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY3V0T2ZmVGFpbElmTmVlZGVkKHJlbmRlclN0YXRlLCBmYWxzZSk7XG4gICAgICAgICAgfSAvLyBOZXh0IHdlJ3JlIGdvaW5nIHRvIHJlbmRlciB0aGUgdGFpbC5cblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEFwcGVuZCB0aGUgcmVuZGVyZWQgcm93IHRvIHRoZSBjaGlsZCBsaXN0LlxuICAgICAgICAgIGlmICghZGlkU3VzcGVuZEFscmVhZHkpIHtcbiAgICAgICAgICAgIHZhciBfc3VzcGVuZGVkID0gZmluZEZpcnN0U3VzcGVuZGVkKHJlbmRlcmVkVGFpbCk7XG5cbiAgICAgICAgICAgIGlmIChfc3VzcGVuZGVkICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IERpZENhcHR1cmU7XG4gICAgICAgICAgICAgIGRpZFN1c3BlbmRBbHJlYWR5ID0gdHJ1ZTsgLy8gRW5zdXJlIHdlIHRyYW5zZmVyIHRoZSB1cGRhdGUgcXVldWUgdG8gdGhlIHBhcmVudCBzbyB0aGF0IGl0IGRvZXNuJ3RcbiAgICAgICAgICAgICAgLy8gZ2V0IGxvc3QgaWYgdGhpcyByb3cgZW5kcyB1cCBkcm9wcGVkIGR1cmluZyBhIHNlY29uZCBwYXNzLlxuXG4gICAgICAgICAgICAgIHZhciBfbmV3VGhlbm5hYmxlcyA9IF9zdXNwZW5kZWQudXBkYXRlUXVldWU7XG5cbiAgICAgICAgICAgICAgaWYgKF9uZXdUaGVubmFibGVzICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBfbmV3VGhlbm5hYmxlcztcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjdXRPZmZUYWlsSWZOZWVkZWQocmVuZGVyU3RhdGUsIHRydWUpOyAvLyBUaGlzIG1pZ2h0IGhhdmUgYmVlbiBtb2RpZmllZC5cblxuICAgICAgICAgICAgICBpZiAocmVuZGVyU3RhdGUudGFpbCA9PT0gbnVsbCAmJiByZW5kZXJTdGF0ZS50YWlsTW9kZSA9PT0gJ2hpZGRlbicgJiYgIXJlbmRlcmVkVGFpbC5hbHRlcm5hdGUgJiYgIWdldElzSHlkcmF0aW5nKCkgLy8gV2UgZG9uJ3QgY3V0IGl0IGlmIHdlJ3JlIGh5ZHJhdGluZy5cbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGRlbGV0ZSB0aGUgcm93IHdlIGp1c3QgcmVuZGVyZWQuXG4gICAgICAgICAgICAgICAgICAvLyBSZXNldCB0aGUgZWZmZWN0IGxpc3QgdG8gd2hhdCBpdCB3YXMgYmVmb3JlIHdlIHJlbmRlcmVkIHRoaXNcbiAgICAgICAgICAgICAgICAgIC8vIGNoaWxkLiBUaGUgbmVzdGVkIGNoaWxkcmVuIGhhdmUgYWxyZWFkeSBhcHBlbmRlZCB0aGVtc2VsdmVzLlxuICAgICAgICAgICAgICAgICAgdmFyIGxhc3RFZmZlY3QgPSB3b3JrSW5Qcm9ncmVzcy5sYXN0RWZmZWN0ID0gcmVuZGVyU3RhdGUubGFzdEVmZmVjdDsgLy8gUmVtb3ZlIGFueSBlZmZlY3RzIHRoYXQgd2VyZSBhcHBlbmRlZCBhZnRlciB0aGlzIHBvaW50LlxuXG4gICAgICAgICAgICAgICAgICBpZiAobGFzdEVmZmVjdCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBsYXN0RWZmZWN0Lm5leHRFZmZlY3QgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgfSAvLyBXZSdyZSBkb25lLlxuXG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIC8vIFRoZSB0aW1lIGl0IHRvb2sgdG8gcmVuZGVyIGxhc3Qgcm93IGlzIGdyZWF0ZXIgdGhhbiB0aGUgcmVtYWluaW5nXG4gICAgICAgICAgICAvLyB0aW1lIHdlIGhhdmUgdG8gcmVuZGVyLiBTbyByZW5kZXJpbmcgb25lIG1vcmUgcm93IHdvdWxkIGxpa2VseVxuICAgICAgICAgICAgLy8gZXhjZWVkIGl0LlxuICAgICAgICAgICAgbm93KCkgKiAyIC0gcmVuZGVyU3RhdGUucmVuZGVyaW5nU3RhcnRUaW1lID4gZ2V0UmVuZGVyVGFyZ2V0VGltZSgpICYmIHJlbmRlckxhbmVzICE9PSBPZmZzY3JlZW5MYW5lKSB7XG4gICAgICAgICAgICAgIC8vIFdlIGhhdmUgbm93IHBhc3NlZCBvdXIgQ1BVIGRlYWRsaW5lIGFuZCB3ZSdsbCBqdXN0IGdpdmUgdXAgZnVydGhlclxuICAgICAgICAgICAgICAvLyBhdHRlbXB0cyB0byByZW5kZXIgdGhlIG1haW4gY29udGVudCBhbmQgb25seSByZW5kZXIgZmFsbGJhY2tzLlxuICAgICAgICAgICAgICAvLyBUaGUgYXNzdW1wdGlvbiBpcyB0aGF0IHRoaXMgaXMgdXN1YWxseSBmYXN0ZXIuXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IERpZENhcHR1cmU7XG4gICAgICAgICAgICAgIGRpZFN1c3BlbmRBbHJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgY3V0T2ZmVGFpbElmTmVlZGVkKHJlbmRlclN0YXRlLCBmYWxzZSk7IC8vIFNpbmNlIG5vdGhpbmcgYWN0dWFsbHkgc3VzcGVuZGVkLCB0aGVyZSB3aWxsIG5vdGhpbmcgdG8gcGluZyB0aGlzXG4gICAgICAgICAgICAgIC8vIHRvIGdldCBpdCBzdGFydGVkIGJhY2sgdXAgdG8gYXR0ZW1wdCB0aGUgbmV4dCBpdGVtLiBXaGlsZSBpbiB0ZXJtc1xuICAgICAgICAgICAgICAvLyBvZiBwcmlvcml0eSB0aGlzIHdvcmsgaGFzIHRoZSBzYW1lIHByaW9yaXR5IGFzIHRoaXMgY3VycmVudCByZW5kZXIsXG4gICAgICAgICAgICAgIC8vIGl0J3Mgbm90IHBhcnQgb2YgdGhlIHNhbWUgdHJhbnNpdGlvbiBvbmNlIHRoZSB0cmFuc2l0aW9uIGhhc1xuICAgICAgICAgICAgICAvLyBjb21taXR0ZWQuIElmIGl0J3Mgc3luYywgd2Ugc3RpbGwgd2FudCB0byB5aWVsZCBzbyB0aGF0IGl0IGNhbiBiZVxuICAgICAgICAgICAgICAvLyBwYWludGVkLiBDb25jZXB0dWFsbHksIHRoaXMgaXMgcmVhbGx5IHRoZSBzYW1lIGFzIHBpbmdpbmcuXG4gICAgICAgICAgICAgIC8vIFdlIGNhbiB1c2UgYW55IFJldHJ5TGFuZSBldmVuIGlmIGl0J3MgdGhlIG9uZSBjdXJyZW50bHkgcmVuZGVyaW5nXG4gICAgICAgICAgICAgIC8vIHNpbmNlIHdlJ3JlIGxlYXZpbmcgaXQgYmVoaW5kIG9uIHRoaXMgbm9kZS5cblxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IFNvbWVSZXRyeUxhbmU7XG5cbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG1hcmtTcGF3bmVkV29yayhTb21lUmV0cnlMYW5lKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChyZW5kZXJTdGF0ZS5pc0JhY2t3YXJkcykge1xuICAgICAgICAgICAgLy8gVGhlIGVmZmVjdCBsaXN0IG9mIHRoZSBiYWNrd2FyZHMgdGFpbCB3aWxsIGhhdmUgYmVlbiBhZGRlZFxuICAgICAgICAgICAgLy8gdG8gdGhlIGVuZC4gVGhpcyBicmVha3MgdGhlIGd1YXJhbnRlZSB0aGF0IGxpZmUtY3ljbGVzIGZpcmUgaW5cbiAgICAgICAgICAgIC8vIHNpYmxpbmcgb3JkZXIgYnV0IHRoYXQgaXNuJ3QgYSBzdHJvbmcgZ3VhcmFudGVlIHByb21pc2VkIGJ5IFJlYWN0LlxuICAgICAgICAgICAgLy8gRXNwZWNpYWxseSBzaW5jZSB0aGVzZSBtaWdodCBhbHNvIGp1c3QgcG9wIGluIGR1cmluZyBmdXR1cmUgY29tbWl0cy5cbiAgICAgICAgICAgIC8vIEFwcGVuZCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0LlxuICAgICAgICAgICAgcmVuZGVyZWRUYWlsLnNpYmxpbmcgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcmVuZGVyZWRUYWlsO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgcHJldmlvdXNTaWJsaW5nID0gcmVuZGVyU3RhdGUubGFzdDtcblxuICAgICAgICAgICAgaWYgKHByZXZpb3VzU2libGluZyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICBwcmV2aW91c1NpYmxpbmcuc2libGluZyA9IHJlbmRlcmVkVGFpbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcmVuZGVyZWRUYWlsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZW5kZXJTdGF0ZS5sYXN0ID0gcmVuZGVyZWRUYWlsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZW5kZXJTdGF0ZS50YWlsICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gV2Ugc3RpbGwgaGF2ZSB0YWlsIHJvd3MgdG8gcmVuZGVyLlxuICAgICAgICAgIC8vIFBvcCBhIHJvdy5cbiAgICAgICAgICB2YXIgbmV4dCA9IHJlbmRlclN0YXRlLnRhaWw7XG4gICAgICAgICAgcmVuZGVyU3RhdGUucmVuZGVyaW5nID0gbmV4dDtcbiAgICAgICAgICByZW5kZXJTdGF0ZS50YWlsID0gbmV4dC5zaWJsaW5nO1xuICAgICAgICAgIHJlbmRlclN0YXRlLmxhc3RFZmZlY3QgPSB3b3JrSW5Qcm9ncmVzcy5sYXN0RWZmZWN0O1xuICAgICAgICAgIHJlbmRlclN0YXRlLnJlbmRlcmluZ1N0YXJ0VGltZSA9IG5vdygpO1xuICAgICAgICAgIG5leHQuc2libGluZyA9IG51bGw7IC8vIFJlc3RvcmUgdGhlIGNvbnRleHQuXG4gICAgICAgICAgLy8gVE9ETzogV2UgY2FuIHByb2JhYmx5IGp1c3QgYXZvaWQgcG9wcGluZyBpdCBpbnN0ZWFkIGFuZCBvbmx5XG4gICAgICAgICAgLy8gc2V0dGluZyBpdCB0aGUgZmlyc3QgdGltZSB3ZSBnbyBmcm9tIG5vdCBzdXNwZW5kZWQgdG8gc3VzcGVuZGVkLlxuXG4gICAgICAgICAgdmFyIHN1c3BlbnNlQ29udGV4dCA9IHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudDtcblxuICAgICAgICAgIGlmIChkaWRTdXNwZW5kQWxyZWFkeSkge1xuICAgICAgICAgICAgc3VzcGVuc2VDb250ZXh0ID0gc2V0U2hhbGxvd1N1c3BlbnNlQ29udGV4dChzdXNwZW5zZUNvbnRleHQsIEZvcmNlU3VzcGVuc2VGYWxsYmFjayk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN1c3BlbnNlQ29udGV4dCA9IHNldERlZmF1bHRTaGFsbG93U3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlQ29udGV4dCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcHVzaFN1c3BlbnNlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgc3VzcGVuc2VDb250ZXh0KTsgLy8gRG8gYSBwYXNzIG92ZXIgdGhlIG5leHQgcm93LlxuXG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgIGNhc2UgRnVuZGFtZW50YWxDb21wb25lbnQ6XG4gICAgICB7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIFNjb3BlQ29tcG9uZW50OlxuICAgICAge1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBCbG9jazpcblxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIE9mZnNjcmVlbkNvbXBvbmVudDpcbiAgICBjYXNlIExlZ2FjeUhpZGRlbkNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcG9wUmVuZGVyTGFuZXMod29ya0luUHJvZ3Jlc3MpO1xuXG4gICAgICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgdmFyIF9uZXh0U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICAgICAgICAgIHZhciBfcHJldlN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuICAgICAgICAgIHZhciBwcmV2SXNIaWRkZW4gPSBfcHJldlN0YXRlICE9PSBudWxsO1xuICAgICAgICAgIHZhciBuZXh0SXNIaWRkZW4gPSBfbmV4dFN0YXRlICE9PSBudWxsO1xuXG4gICAgICAgICAgaWYgKHByZXZJc0hpZGRlbiAhPT0gbmV4dElzSGlkZGVuICYmIG5ld1Byb3BzLm1vZGUgIT09ICd1bnN0YWJsZS1kZWZlci13aXRob3V0LWhpZGluZycpIHtcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgfVxuXG4gIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJVbmtub3duIHVuaXQgb2Ygd29yayB0YWcgKFwiICsgd29ya0luUHJvZ3Jlc3MudGFnICsgXCIpLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHVud2luZFdvcmsod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHN3aXRjaCAod29ya0luUHJvZ3Jlc3MudGFnKSB7XG4gICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIENvbXBvbmVudCA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG5cbiAgICAgICAgaWYgKGlzQ29udGV4dFByb3ZpZGVyKENvbXBvbmVudCkpIHtcbiAgICAgICAgICBwb3BDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBmbGFncyA9IHdvcmtJblByb2dyZXNzLmZsYWdzO1xuXG4gICAgICAgIGlmIChmbGFncyAmIFNob3VsZENhcHR1cmUpIHtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyA9IGZsYWdzICYgflNob3VsZENhcHR1cmUgfCBEaWRDYXB0dXJlO1xuXG4gICAgICAgICAgaWYgKCAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgICAgICAgICB0cmFuc2ZlckFjdHVhbER1cmF0aW9uKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICB7XG4gICAgICAgIHBvcEhvc3RDb250YWluZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICBwb3BUb3BMZXZlbENvbnRleHRPYmplY3Qod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICByZXNldFdvcmtJblByb2dyZXNzVmVyc2lvbnMoKTtcbiAgICAgICAgdmFyIF9mbGFncyA9IHdvcmtJblByb2dyZXNzLmZsYWdzO1xuXG4gICAgICAgIGlmICghKChfZmxhZ3MgJiBEaWRDYXB0dXJlKSA9PT0gTm9GbGFncykpIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvciggXCJUaGUgcm9vdCBmYWlsZWQgdG8gdW5tb3VudCBhZnRlciBhbiBlcnJvci4gVGhpcyBpcyBsaWtlbHkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgPSBfZmxhZ3MgJiB+U2hvdWxkQ2FwdHVyZSB8IERpZENhcHR1cmU7XG4gICAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcztcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgLy8gVE9ETzogcG9wSHlkcmF0aW9uU3RhdGVcbiAgICAgICAgcG9wSG9zdENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHBvcFN1c3BlbnNlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG5cbiAgICAgICAgdmFyIF9mbGFnczIgPSB3b3JrSW5Qcm9ncmVzcy5mbGFncztcblxuICAgICAgICBpZiAoX2ZsYWdzMiAmIFNob3VsZENhcHR1cmUpIHtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyA9IF9mbGFnczIgJiB+U2hvdWxkQ2FwdHVyZSB8IERpZENhcHR1cmU7IC8vIENhcHR1cmVkIGEgc3VzcGVuc2UgZWZmZWN0LiBSZS1yZW5kZXIgdGhlIGJvdW5kYXJ5LlxuXG4gICAgICAgICAgaWYgKCAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgICAgICAgICB0cmFuc2ZlckFjdHVhbER1cmF0aW9uKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgIGNhc2UgU3VzcGVuc2VMaXN0Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBwb3BTdXNwZW5zZUNvbnRleHQod29ya0luUHJvZ3Jlc3MpOyAvLyBTdXNwZW5zZUxpc3QgZG9lc24ndCBhY3R1YWxseSBjYXRjaCBhbnl0aGluZy4gSXQgc2hvdWxkJ3ZlIGJlZW5cbiAgICAgICAgLy8gY2F1Z2h0IGJ5IGEgbmVzdGVkIGJvdW5kYXJ5LiBJZiBub3QsIGl0IHNob3VsZCBidWJibGUgdGhyb3VnaC5cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICAgIHBvcEhvc3RDb250YWluZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICBjYXNlIENvbnRleHRQcm92aWRlcjpcbiAgICAgIHBvcFByb3ZpZGVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHJldHVybiBudWxsO1xuXG4gICAgY2FzZSBPZmZzY3JlZW5Db21wb25lbnQ6XG4gICAgY2FzZSBMZWdhY3lIaWRkZW5Db21wb25lbnQ6XG4gICAgICBwb3BSZW5kZXJMYW5lcyh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiB1bndpbmRJbnRlcnJ1cHRlZFdvcmsoaW50ZXJydXB0ZWRXb3JrKSB7XG4gIHN3aXRjaCAoaW50ZXJydXB0ZWRXb3JrLnRhZykge1xuICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBjaGlsZENvbnRleHRUeXBlcyA9IGludGVycnVwdGVkV29yay50eXBlLmNoaWxkQ29udGV4dFR5cGVzO1xuXG4gICAgICAgIGlmIChjaGlsZENvbnRleHRUeXBlcyAhPT0gbnVsbCAmJiBjaGlsZENvbnRleHRUeXBlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcG9wQ29udGV4dChpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RSb290OlxuICAgICAge1xuICAgICAgICBwb3BIb3N0Q29udGFpbmVyKGludGVycnVwdGVkV29yayk7XG4gICAgICAgIHBvcFRvcExldmVsQ29udGV4dE9iamVjdChpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgICByZXNldFdvcmtJblByb2dyZXNzVmVyc2lvbnMoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHBvcEhvc3RDb250ZXh0KGludGVycnVwdGVkV29yayk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAgcG9wSG9zdENvbnRhaW5lcihpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OlxuICAgICAgcG9wU3VzcGVuc2VDb250ZXh0KGludGVycnVwdGVkV29yayk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgU3VzcGVuc2VMaXN0Q29tcG9uZW50OlxuICAgICAgcG9wU3VzcGVuc2VDb250ZXh0KGludGVycnVwdGVkV29yayk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgQ29udGV4dFByb3ZpZGVyOlxuICAgICAgcG9wUHJvdmlkZXIoaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBPZmZzY3JlZW5Db21wb25lbnQ6XG4gICAgY2FzZSBMZWdhY3lIaWRkZW5Db21wb25lbnQ6XG4gICAgICBwb3BSZW5kZXJMYW5lcyhpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgYnJlYWs7XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlQ2FwdHVyZWRWYWx1ZSh2YWx1ZSwgc291cmNlKSB7XG4gIC8vIElmIHRoZSB2YWx1ZSBpcyBhbiBlcnJvciwgY2FsbCB0aGlzIGZ1bmN0aW9uIGltbWVkaWF0ZWx5IGFmdGVyIGl0IGlzIHRocm93blxuICAvLyBzbyB0aGUgc3RhY2sgaXMgYWNjdXJhdGUuXG4gIHJldHVybiB7XG4gICAgdmFsdWU6IHZhbHVlLFxuICAgIHNvdXJjZTogc291cmNlLFxuICAgIHN0YWNrOiBnZXRTdGFja0J5RmliZXJJbkRldkFuZFByb2Qoc291cmNlKVxuICB9O1xufVxuXG4vLyBUaGlzIG1vZHVsZSBpcyBmb3JrZWQgaW4gZGlmZmVyZW50IGVudmlyb25tZW50cy5cbi8vIEJ5IGRlZmF1bHQsIHJldHVybiBgdHJ1ZWAgdG8gbG9nIGVycm9ycyB0byB0aGUgY29uc29sZS5cbi8vIEZvcmtzIGNhbiByZXR1cm4gYGZhbHNlYCBpZiB0aGlzIGlzbid0IGRlc2lyYWJsZS5cbmZ1bmN0aW9uIHNob3dFcnJvckRpYWxvZyhib3VuZGFyeSwgZXJyb3JJbmZvKSB7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBsb2dDYXB0dXJlZEVycm9yKGJvdW5kYXJ5LCBlcnJvckluZm8pIHtcbiAgdHJ5IHtcbiAgICB2YXIgbG9nRXJyb3IgPSBzaG93RXJyb3JEaWFsb2coYm91bmRhcnksIGVycm9ySW5mbyk7IC8vIEFsbG93IGluamVjdGVkIHNob3dFcnJvckRpYWxvZygpIHRvIHByZXZlbnQgZGVmYXVsdCBjb25zb2xlLmVycm9yIGxvZ2dpbmcuXG4gICAgLy8gVGhpcyBlbmFibGVzIHJlbmRlcmVycyBsaWtlIFJlYWN0TmF0aXZlIHRvIGJldHRlciBtYW5hZ2UgcmVkYm94IGJlaGF2aW9yLlxuXG4gICAgaWYgKGxvZ0Vycm9yID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBlcnJvciA9IGVycm9ySW5mby52YWx1ZTtcblxuICAgIGlmICh0cnVlKSB7XG4gICAgICB2YXIgc291cmNlID0gZXJyb3JJbmZvLnNvdXJjZTtcbiAgICAgIHZhciBzdGFjayA9IGVycm9ySW5mby5zdGFjaztcbiAgICAgIHZhciBjb21wb25lbnRTdGFjayA9IHN0YWNrICE9PSBudWxsID8gc3RhY2sgOiAnJzsgLy8gQnJvd3NlcnMgc3VwcG9ydCBzaWxlbmNpbmcgdW5jYXVnaHQgZXJyb3JzIGJ5IGNhbGxpbmdcbiAgICAgIC8vIGBwcmV2ZW50RGVmYXVsdCgpYCBpbiB3aW5kb3cgYGVycm9yYCBoYW5kbGVyLlxuICAgICAgLy8gV2UgcmVjb3JkIHRoaXMgaW5mb3JtYXRpb24gYXMgYW4gZXhwYW5kbyBvbiB0aGUgZXJyb3IuXG5cbiAgICAgIGlmIChlcnJvciAhPSBudWxsICYmIGVycm9yLl9zdXBwcmVzc0xvZ2dpbmcpIHtcbiAgICAgICAgaWYgKGJvdW5kYXJ5LnRhZyA9PT0gQ2xhc3NDb21wb25lbnQpIHtcbiAgICAgICAgICAvLyBUaGUgZXJyb3IgaXMgcmVjb3ZlcmFibGUgYW5kIHdhcyBzaWxlbmNlZC5cbiAgICAgICAgICAvLyBJZ25vcmUgaXQgYW5kIGRvbid0IHByaW50IHRoZSBzdGFjayBhZGRlbmR1bS5cbiAgICAgICAgICAvLyBUaGlzIGlzIGhhbmR5IGZvciB0ZXN0aW5nIGVycm9yIGJvdW5kYXJpZXMgd2l0aG91dCBub2lzZS5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gLy8gVGhlIGVycm9yIGlzIGZhdGFsLiBTaW5jZSB0aGUgc2lsZW5jaW5nIG1pZ2h0IGhhdmVcbiAgICAgICAgLy8gYmVlbiBhY2NpZGVudGFsLCB3ZSdsbCBzdXJmYWNlIGl0IGFueXdheS5cbiAgICAgICAgLy8gSG93ZXZlciwgdGhlIGJyb3dzZXIgd291bGQgaGF2ZSBzaWxlbmNlZCB0aGUgb3JpZ2luYWwgZXJyb3JcbiAgICAgICAgLy8gc28gd2UnbGwgcHJpbnQgaXQgZmlyc3QsIGFuZCB0aGVuIHByaW50IHRoZSBzdGFjayBhZGRlbmR1bS5cblxuXG4gICAgICAgIGNvbnNvbGVbJ2Vycm9yJ10oZXJyb3IpOyAvLyBEb24ndCB0cmFuc2Zvcm0gdG8gb3VyIHdyYXBwZXJcbiAgICAgICAgLy8gRm9yIGEgbW9yZSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiB0aGlzIGJsb2NrLCBzZWU6XG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzEzMzg0XG4gICAgICB9XG5cbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gc291cmNlID8gZ2V0Q29tcG9uZW50TmFtZShzb3VyY2UudHlwZSkgOiBudWxsO1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWVNZXNzYWdlID0gY29tcG9uZW50TmFtZSA/IFwiVGhlIGFib3ZlIGVycm9yIG9jY3VycmVkIGluIHRoZSA8XCIgKyBjb21wb25lbnROYW1lICsgXCI+IGNvbXBvbmVudDpcIiA6ICdUaGUgYWJvdmUgZXJyb3Igb2NjdXJyZWQgaW4gb25lIG9mIHlvdXIgUmVhY3QgY29tcG9uZW50czonO1xuICAgICAgdmFyIGVycm9yQm91bmRhcnlNZXNzYWdlO1xuICAgICAgdmFyIGVycm9yQm91bmRhcnlOYW1lID0gZ2V0Q29tcG9uZW50TmFtZShib3VuZGFyeS50eXBlKTtcblxuICAgICAgaWYgKGVycm9yQm91bmRhcnlOYW1lKSB7XG4gICAgICAgIGVycm9yQm91bmRhcnlNZXNzYWdlID0gXCJSZWFjdCB3aWxsIHRyeSB0byByZWNyZWF0ZSB0aGlzIGNvbXBvbmVudCB0cmVlIGZyb20gc2NyYXRjaCBcIiArIChcInVzaW5nIHRoZSBlcnJvciBib3VuZGFyeSB5b3UgcHJvdmlkZWQsIFwiICsgZXJyb3JCb3VuZGFyeU5hbWUgKyBcIi5cIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlcnJvckJvdW5kYXJ5TWVzc2FnZSA9ICdDb25zaWRlciBhZGRpbmcgYW4gZXJyb3IgYm91bmRhcnkgdG8geW91ciB0cmVlIHRvIGN1c3RvbWl6ZSBlcnJvciBoYW5kbGluZyBiZWhhdmlvci5cXG4nICsgJ1Zpc2l0IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9lcnJvci1ib3VuZGFyaWVzIHRvIGxlYXJuIG1vcmUgYWJvdXQgZXJyb3IgYm91bmRhcmllcy4nO1xuICAgICAgfVxuXG4gICAgICB2YXIgY29tYmluZWRNZXNzYWdlID0gY29tcG9uZW50TmFtZU1lc3NhZ2UgKyBcIlxcblwiICsgY29tcG9uZW50U3RhY2sgKyBcIlxcblxcblwiICsgKFwiXCIgKyBlcnJvckJvdW5kYXJ5TWVzc2FnZSk7IC8vIEluIGRldmVsb3BtZW50LCB3ZSBwcm92aWRlIG91ciBvd24gbWVzc2FnZSB3aXRoIGp1c3QgdGhlIGNvbXBvbmVudCBzdGFjay5cbiAgICAgIC8vIFdlIGRvbid0IGluY2x1ZGUgdGhlIG9yaWdpbmFsIGVycm9yIG1lc3NhZ2UgYW5kIEpTIHN0YWNrIGJlY2F1c2UgdGhlIGJyb3dzZXJcbiAgICAgIC8vIGhhcyBhbHJlYWR5IHByaW50ZWQgaXQuIEV2ZW4gaWYgdGhlIGFwcGxpY2F0aW9uIHN3YWxsb3dzIHRoZSBlcnJvciwgaXQgaXMgc3RpbGxcbiAgICAgIC8vIGRpc3BsYXllZCBieSB0aGUgYnJvd3NlciB0aGFua3MgdG8gdGhlIERFVi1vbmx5IGZha2UgZXZlbnQgdHJpY2sgaW4gUmVhY3RFcnJvclV0aWxzLlxuXG4gICAgICBjb25zb2xlWydlcnJvciddKGNvbWJpbmVkTWVzc2FnZSk7IC8vIERvbid0IHRyYW5zZm9ybSB0byBvdXIgd3JhcHBlclxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJbiBwcm9kdWN0aW9uLCB3ZSBwcmludCB0aGUgZXJyb3IgZGlyZWN0bHkuXG4gICAgICAvLyBUaGlzIHdpbGwgaW5jbHVkZSB0aGUgbWVzc2FnZSwgdGhlIEpTIHN0YWNrLCBhbmQgYW55dGhpbmcgdGhlIGJyb3dzZXIgd2FudHMgdG8gc2hvdy5cbiAgICAgIC8vIFdlIHBhc3MgdGhlIGVycm9yIG9iamVjdCBpbnN0ZWFkIG9mIGN1c3RvbSBtZXNzYWdlIHNvIHRoYXQgdGhlIGJyb3dzZXIgZGlzcGxheXMgdGhlIGVycm9yIG5hdGl2ZWx5LlxuICAgICAgY29uc29sZVsnZXJyb3InXShlcnJvcik7IC8vIERvbid0IHRyYW5zZm9ybSB0byBvdXIgd3JhcHBlclxuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIFRoaXMgbWV0aG9kIG11c3Qgbm90IHRocm93LCBvciBSZWFjdCBpbnRlcm5hbCBzdGF0ZSB3aWxsIGdldCBtZXNzZWQgdXAuXG4gICAgLy8gSWYgY29uc29sZS5lcnJvciBpcyBvdmVycmlkZGVuLCBvciBsb2dDYXB0dXJlZEVycm9yKCkgc2hvd3MgYSBkaWFsb2cgdGhhdCB0aHJvd3MsXG4gICAgLy8gd2Ugd2FudCB0byByZXBvcnQgdGhpcyBlcnJvciBvdXRzaWRlIG9mIHRoZSBub3JtYWwgc3RhY2sgYXMgYSBsYXN0IHJlc29ydC5cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEzMTg4XG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICB0aHJvdyBlO1xuICAgIH0pO1xuICB9XG59XG5cbnZhciBQb3NzaWJseVdlYWtNYXAkMSA9IHR5cGVvZiBXZWFrTWFwID09PSAnZnVuY3Rpb24nID8gV2Vha01hcCA6IE1hcDtcblxuZnVuY3Rpb24gY3JlYXRlUm9vdEVycm9yVXBkYXRlKGZpYmVyLCBlcnJvckluZm8sIGxhbmUpIHtcbiAgdmFyIHVwZGF0ZSA9IGNyZWF0ZVVwZGF0ZShOb1RpbWVzdGFtcCwgbGFuZSk7IC8vIFVubW91bnQgdGhlIHJvb3QgYnkgcmVuZGVyaW5nIG51bGwuXG5cbiAgdXBkYXRlLnRhZyA9IENhcHR1cmVVcGRhdGU7IC8vIENhdXRpb246IFJlYWN0IERldlRvb2xzIGN1cnJlbnRseSBkZXBlbmRzIG9uIHRoaXMgcHJvcGVydHlcbiAgLy8gYmVpbmcgY2FsbGVkIFwiZWxlbWVudFwiLlxuXG4gIHVwZGF0ZS5wYXlsb2FkID0ge1xuICAgIGVsZW1lbnQ6IG51bGxcbiAgfTtcbiAgdmFyIGVycm9yID0gZXJyb3JJbmZvLnZhbHVlO1xuXG4gIHVwZGF0ZS5jYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICBvblVuY2F1Z2h0RXJyb3IoZXJyb3IpO1xuICAgIGxvZ0NhcHR1cmVkRXJyb3IoZmliZXIsIGVycm9ySW5mbyk7XG4gIH07XG5cbiAgcmV0dXJuIHVwZGF0ZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQ2xhc3NFcnJvclVwZGF0ZShmaWJlciwgZXJyb3JJbmZvLCBsYW5lKSB7XG4gIHZhciB1cGRhdGUgPSBjcmVhdGVVcGRhdGUoTm9UaW1lc3RhbXAsIGxhbmUpO1xuICB1cGRhdGUudGFnID0gQ2FwdHVyZVVwZGF0ZTtcbiAgdmFyIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvciA9IGZpYmVyLnR5cGUuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yO1xuXG4gIGlmICh0eXBlb2YgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIGVycm9yJDEgPSBlcnJvckluZm8udmFsdWU7XG5cbiAgICB1cGRhdGUucGF5bG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGxvZ0NhcHR1cmVkRXJyb3IoZmliZXIsIGVycm9ySW5mbyk7XG4gICAgICByZXR1cm4gZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yKGVycm9yJDEpO1xuICAgIH07XG4gIH1cblxuICB2YXIgaW5zdCA9IGZpYmVyLnN0YXRlTm9kZTtcblxuICBpZiAoaW5zdCAhPT0gbnVsbCAmJiB0eXBlb2YgaW5zdC5jb21wb25lbnREaWRDYXRjaCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHVwZGF0ZS5jYWxsYmFjayA9IGZ1bmN0aW9uIGNhbGxiYWNrKCkge1xuICAgICAge1xuICAgICAgICBtYXJrRmFpbGVkRXJyb3JCb3VuZGFyeUZvckhvdFJlbG9hZGluZyhmaWJlcik7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIFRvIHByZXNlcnZlIHRoZSBwcmVleGlzdGluZyByZXRyeSBiZWhhdmlvciBvZiBlcnJvciBib3VuZGFyaWVzLFxuICAgICAgICAvLyB3ZSBrZWVwIHRyYWNrIG9mIHdoaWNoIG9uZXMgYWxyZWFkeSBmYWlsZWQgZHVyaW5nIHRoaXMgYmF0Y2guXG4gICAgICAgIC8vIFRoaXMgZ2V0cyByZXNldCBiZWZvcmUgd2UgeWllbGQgYmFjayB0byB0aGUgYnJvd3Nlci5cbiAgICAgICAgLy8gVE9ETzogV2FybiBpbiBzdHJpY3QgbW9kZSBpZiBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgaXNcbiAgICAgICAgLy8gbm90IGRlZmluZWQuXG4gICAgICAgIG1hcmtMZWdhY3lFcnJvckJvdW5kYXJ5QXNGYWlsZWQodGhpcyk7IC8vIE9ubHkgbG9nIGhlcmUgaWYgY29tcG9uZW50RGlkQ2F0Y2ggaXMgdGhlIG9ubHkgZXJyb3IgYm91bmRhcnkgbWV0aG9kIGRlZmluZWRcblxuICAgICAgICBsb2dDYXB0dXJlZEVycm9yKGZpYmVyLCBlcnJvckluZm8pO1xuICAgICAgfVxuXG4gICAgICB2YXIgZXJyb3IkMSA9IGVycm9ySW5mby52YWx1ZTtcbiAgICAgIHZhciBzdGFjayA9IGVycm9ySW5mby5zdGFjaztcbiAgICAgIHRoaXMuY29tcG9uZW50RGlkQ2F0Y2goZXJyb3IkMSwge1xuICAgICAgICBjb21wb25lbnRTdGFjazogc3RhY2sgIT09IG51bGwgPyBzdGFjayA6ICcnXG4gICAgICB9KTtcblxuICAgICAge1xuICAgICAgICBpZiAodHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIC8vIElmIGNvbXBvbmVudERpZENhdGNoIGlzIHRoZSBvbmx5IGVycm9yIGJvdW5kYXJ5IG1ldGhvZCBkZWZpbmVkLFxuICAgICAgICAgIC8vIHRoZW4gaXQgbmVlZHMgdG8gY2FsbCBzZXRTdGF0ZSB0byByZWNvdmVyIGZyb20gZXJyb3JzLlxuICAgICAgICAgIC8vIElmIG5vIHN0YXRlIHVwZGF0ZSBpcyBzY2hlZHVsZWQgdGhlbiB0aGUgYm91bmRhcnkgd2lsbCBzd2FsbG93IHRoZSBlcnJvci5cbiAgICAgICAgICBpZiAoIWluY2x1ZGVzU29tZUxhbmUoZmliZXIubGFuZXMsIFN5bmNMYW5lKSkge1xuICAgICAgICAgICAgZXJyb3IoJyVzOiBFcnJvciBib3VuZGFyaWVzIHNob3VsZCBpbXBsZW1lbnQgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yKCkuICcgKyAnSW4gdGhhdCBtZXRob2QsIHJldHVybiBhIHN0YXRlIHVwZGF0ZSB0byBkaXNwbGF5IGFuIGVycm9yIG1lc3NhZ2Ugb3IgZmFsbGJhY2sgVUkuJywgZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnVW5rbm93bicpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgdXBkYXRlLmNhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgbWFya0ZhaWxlZEVycm9yQm91bmRhcnlGb3JIb3RSZWxvYWRpbmcoZmliZXIpO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gdXBkYXRlO1xufVxuXG5mdW5jdGlvbiBhdHRhY2hQaW5nTGlzdGVuZXIocm9vdCwgd2FrZWFibGUsIGxhbmVzKSB7XG4gIC8vIEF0dGFjaCBhIGxpc3RlbmVyIHRvIHRoZSBwcm9taXNlIHRvIFwicGluZ1wiIHRoZSByb290IGFuZCByZXRyeS4gQnV0IG9ubHkgaWZcbiAgLy8gb25lIGRvZXMgbm90IGFscmVhZHkgZXhpc3QgZm9yIHRoZSBsYW5lcyB3ZSdyZSBjdXJyZW50bHkgcmVuZGVyaW5nICh3aGljaFxuICAvLyBhY3RzIGxpa2UgYSBcInRocmVhZCBJRFwiIGhlcmUpLlxuICB2YXIgcGluZ0NhY2hlID0gcm9vdC5waW5nQ2FjaGU7XG4gIHZhciB0aHJlYWRJRHM7XG5cbiAgaWYgKHBpbmdDYWNoZSA9PT0gbnVsbCkge1xuICAgIHBpbmdDYWNoZSA9IHJvb3QucGluZ0NhY2hlID0gbmV3IFBvc3NpYmx5V2Vha01hcCQxKCk7XG4gICAgdGhyZWFkSURzID0gbmV3IFNldCgpO1xuICAgIHBpbmdDYWNoZS5zZXQod2FrZWFibGUsIHRocmVhZElEcyk7XG4gIH0gZWxzZSB7XG4gICAgdGhyZWFkSURzID0gcGluZ0NhY2hlLmdldCh3YWtlYWJsZSk7XG5cbiAgICBpZiAodGhyZWFkSURzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocmVhZElEcyA9IG5ldyBTZXQoKTtcbiAgICAgIHBpbmdDYWNoZS5zZXQod2FrZWFibGUsIHRocmVhZElEcyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKCF0aHJlYWRJRHMuaGFzKGxhbmVzKSkge1xuICAgIC8vIE1lbW9pemUgdXNpbmcgdGhlIHRocmVhZCBJRCB0byBwcmV2ZW50IHJlZHVuZGFudCBsaXN0ZW5lcnMuXG4gICAgdGhyZWFkSURzLmFkZChsYW5lcyk7XG4gICAgdmFyIHBpbmcgPSBwaW5nU3VzcGVuZGVkUm9vdC5iaW5kKG51bGwsIHJvb3QsIHdha2VhYmxlLCBsYW5lcyk7XG4gICAgd2FrZWFibGUudGhlbihwaW5nLCBwaW5nKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0aHJvd0V4Y2VwdGlvbihyb290LCByZXR1cm5GaWJlciwgc291cmNlRmliZXIsIHZhbHVlLCByb290UmVuZGVyTGFuZXMpIHtcbiAgLy8gVGhlIHNvdXJjZSBmaWJlciBkaWQgbm90IGNvbXBsZXRlLlxuICBzb3VyY2VGaWJlci5mbGFncyB8PSBJbmNvbXBsZXRlOyAvLyBJdHMgZWZmZWN0IGxpc3QgaXMgbm8gbG9uZ2VyIHZhbGlkLlxuXG4gIHNvdXJjZUZpYmVyLmZpcnN0RWZmZWN0ID0gc291cmNlRmliZXIubGFzdEVmZmVjdCA9IG51bGw7XG5cbiAgaWYgKHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHZhbHVlLnRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBUaGlzIGlzIGEgd2FrZWFibGUuXG4gICAgdmFyIHdha2VhYmxlID0gdmFsdWU7XG5cbiAgICBpZiAoKHNvdXJjZUZpYmVyLm1vZGUgJiBCbG9ja2luZ01vZGUpID09PSBOb01vZGUpIHtcbiAgICAgIC8vIFJlc2V0IHRoZSBtZW1vaXplZFN0YXRlIHRvIHdoYXQgaXQgd2FzIGJlZm9yZSB3ZSBhdHRlbXB0ZWRcbiAgICAgIC8vIHRvIHJlbmRlciBpdC5cbiAgICAgIHZhciBjdXJyZW50U291cmNlID0gc291cmNlRmliZXIuYWx0ZXJuYXRlO1xuXG4gICAgICBpZiAoY3VycmVudFNvdXJjZSkge1xuICAgICAgICBzb3VyY2VGaWJlci51cGRhdGVRdWV1ZSA9IGN1cnJlbnRTb3VyY2UudXBkYXRlUXVldWU7XG4gICAgICAgIHNvdXJjZUZpYmVyLm1lbW9pemVkU3RhdGUgPSBjdXJyZW50U291cmNlLm1lbW9pemVkU3RhdGU7XG4gICAgICAgIHNvdXJjZUZpYmVyLmxhbmVzID0gY3VycmVudFNvdXJjZS5sYW5lcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNvdXJjZUZpYmVyLnVwZGF0ZVF1ZXVlID0gbnVsbDtcbiAgICAgICAgc291cmNlRmliZXIubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGhhc0ludmlzaWJsZVBhcmVudEJvdW5kYXJ5ID0gaGFzU3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudCwgSW52aXNpYmxlUGFyZW50U3VzcGVuc2VDb250ZXh0KTsgLy8gU2NoZWR1bGUgdGhlIG5lYXJlc3QgU3VzcGVuc2UgdG8gcmUtcmVuZGVyIHRoZSB0aW1lZCBvdXQgdmlldy5cblxuICAgIHZhciBfd29ya0luUHJvZ3Jlc3MgPSByZXR1cm5GaWJlcjtcblxuICAgIGRvIHtcbiAgICAgIGlmIChfd29ya0luUHJvZ3Jlc3MudGFnID09PSBTdXNwZW5zZUNvbXBvbmVudCAmJiBzaG91bGRDYXB0dXJlU3VzcGVuc2UoX3dvcmtJblByb2dyZXNzLCBoYXNJbnZpc2libGVQYXJlbnRCb3VuZGFyeSkpIHtcbiAgICAgICAgLy8gRm91bmQgdGhlIG5lYXJlc3QgYm91bmRhcnkuXG4gICAgICAgIC8vIFN0YXNoIHRoZSBwcm9taXNlIG9uIHRoZSBib3VuZGFyeSBmaWJlci4gSWYgdGhlIGJvdW5kYXJ5IHRpbWVzIG91dCwgd2UnbGxcbiAgICAgICAgLy8gYXR0YWNoIGFub3RoZXIgbGlzdGVuZXIgdG8gZmxpcCB0aGUgYm91bmRhcnkgYmFjayB0byBpdHMgbm9ybWFsIHN0YXRlLlxuICAgICAgICB2YXIgd2FrZWFibGVzID0gX3dvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlO1xuXG4gICAgICAgIGlmICh3YWtlYWJsZXMgPT09IG51bGwpIHtcbiAgICAgICAgICB2YXIgdXBkYXRlUXVldWUgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgdXBkYXRlUXVldWUuYWRkKHdha2VhYmxlKTtcbiAgICAgICAgICBfd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSB1cGRhdGVRdWV1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3YWtlYWJsZXMuYWRkKHdha2VhYmxlKTtcbiAgICAgICAgfSAvLyBJZiB0aGUgYm91bmRhcnkgaXMgb3V0c2lkZSBvZiBibG9ja2luZyBtb2RlLCB3ZSBzaG91bGQgKm5vdCpcbiAgICAgICAgLy8gc3VzcGVuZCB0aGUgY29tbWl0LiBQcmV0ZW5kIGFzIGlmIHRoZSBzdXNwZW5kZWQgY29tcG9uZW50IHJlbmRlcmVkXG4gICAgICAgIC8vIG51bGwgYW5kIGtlZXAgcmVuZGVyaW5nLiBJbiB0aGUgY29tbWl0IHBoYXNlLCB3ZSdsbCBzY2hlZHVsZSBhXG4gICAgICAgIC8vIHN1YnNlcXVlbnQgc3luY2hyb25vdXMgdXBkYXRlIHRvIHJlLXJlbmRlciB0aGUgU3VzcGVuc2UuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIE5vdGU6IEl0IGRvZXNuJ3QgbWF0dGVyIHdoZXRoZXIgdGhlIGNvbXBvbmVudCB0aGF0IHN1c3BlbmRlZCB3YXNcbiAgICAgICAgLy8gaW5zaWRlIGEgYmxvY2tpbmcgbW9kZSB0cmVlLiBJZiB0aGUgU3VzcGVuc2UgaXMgb3V0c2lkZSBvZiBpdCwgd2VcbiAgICAgICAgLy8gc2hvdWxkICpub3QqIHN1c3BlbmQgdGhlIGNvbW1pdC5cblxuXG4gICAgICAgIGlmICgoX3dvcmtJblByb2dyZXNzLm1vZGUgJiBCbG9ja2luZ01vZGUpID09PSBOb01vZGUpIHtcbiAgICAgICAgICBfd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gRGlkQ2FwdHVyZTtcbiAgICAgICAgICBzb3VyY2VGaWJlci5mbGFncyB8PSBGb3JjZVVwZGF0ZUZvckxlZ2FjeVN1c3BlbnNlOyAvLyBXZSdyZSBnb2luZyB0byBjb21taXQgdGhpcyBmaWJlciBldmVuIHRob3VnaCBpdCBkaWRuJ3QgY29tcGxldGUuXG4gICAgICAgICAgLy8gQnV0IHdlIHNob3VsZG4ndCBjYWxsIGFueSBsaWZlY3ljbGUgbWV0aG9kcyBvciBjYWxsYmFja3MuIFJlbW92ZVxuICAgICAgICAgIC8vIGFsbCBsaWZlY3ljbGUgZWZmZWN0IHRhZ3MuXG5cbiAgICAgICAgICBzb3VyY2VGaWJlci5mbGFncyAmPSB+KExpZmVjeWNsZUVmZmVjdE1hc2sgfCBJbmNvbXBsZXRlKTtcblxuICAgICAgICAgIGlmIChzb3VyY2VGaWJlci50YWcgPT09IENsYXNzQ29tcG9uZW50KSB7XG4gICAgICAgICAgICB2YXIgY3VycmVudFNvdXJjZUZpYmVyID0gc291cmNlRmliZXIuYWx0ZXJuYXRlO1xuXG4gICAgICAgICAgICBpZiAoY3VycmVudFNvdXJjZUZpYmVyID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBuZXcgbW91bnQuIENoYW5nZSB0aGUgdGFnIHNvIGl0J3Mgbm90IG1pc3Rha2VuIGZvciBhXG4gICAgICAgICAgICAgIC8vIGNvbXBsZXRlZCBjbGFzcyBjb21wb25lbnQuIEZvciBleGFtcGxlLCB3ZSBzaG91bGQgbm90IGNhbGxcbiAgICAgICAgICAgICAgLy8gY29tcG9uZW50V2lsbFVubW91bnQgaWYgaXQgaXMgZGVsZXRlZC5cbiAgICAgICAgICAgICAgc291cmNlRmliZXIudGFnID0gSW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gV2hlbiB3ZSB0cnkgcmVuZGVyaW5nIGFnYWluLCB3ZSBzaG91bGQgbm90IHJldXNlIHRoZSBjdXJyZW50IGZpYmVyLFxuICAgICAgICAgICAgICAvLyBzaW5jZSBpdCdzIGtub3duIHRvIGJlIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZS4gVXNlIGEgZm9yY2UgdXBkYXRlIHRvXG4gICAgICAgICAgICAgIC8vIHByZXZlbnQgYSBiYWlsIG91dC5cbiAgICAgICAgICAgICAgdmFyIHVwZGF0ZSA9IGNyZWF0ZVVwZGF0ZShOb1RpbWVzdGFtcCwgU3luY0xhbmUpO1xuICAgICAgICAgICAgICB1cGRhdGUudGFnID0gRm9yY2VVcGRhdGU7XG4gICAgICAgICAgICAgIGVucXVldWVVcGRhdGUoc291cmNlRmliZXIsIHVwZGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSAvLyBUaGUgc291cmNlIGZpYmVyIGRpZCBub3QgY29tcGxldGUuIE1hcmsgaXQgd2l0aCBTeW5jIHByaW9yaXR5IHRvXG4gICAgICAgICAgLy8gaW5kaWNhdGUgdGhhdCBpdCBzdGlsbCBoYXMgcGVuZGluZyB3b3JrLlxuXG5cbiAgICAgICAgICBzb3VyY2VGaWJlci5sYW5lcyA9IG1lcmdlTGFuZXMoc291cmNlRmliZXIubGFuZXMsIFN5bmNMYW5lKTsgLy8gRXhpdCB3aXRob3V0IHN1c3BlbmRpbmcuXG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gLy8gQ29uZmlybWVkIHRoYXQgdGhlIGJvdW5kYXJ5IGlzIGluIGEgY29uY3VycmVudCBtb2RlIHRyZWUuIENvbnRpbnVlXG4gICAgICAgIC8vIHdpdGggdGhlIG5vcm1hbCBzdXNwZW5kIHBhdGguXG4gICAgICAgIC8vXG4gICAgICAgIC8vIEFmdGVyIHRoaXMgd2UnbGwgdXNlIGEgc2V0IG9mIGhldXJpc3RpY3MgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhpc1xuICAgICAgICAvLyByZW5kZXIgcGFzcyB3aWxsIHJ1biB0byBjb21wbGV0aW9uIG9yIHJlc3RhcnQgb3IgXCJzdXNwZW5kXCIgdGhlIGNvbW1pdC5cbiAgICAgICAgLy8gVGhlIGFjdHVhbCBsb2dpYyBmb3IgdGhpcyBpcyBzcHJlYWQgb3V0IGluIGRpZmZlcmVudCBwbGFjZXMuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFRoaXMgZmlyc3QgcHJpbmNpcGxlIGlzIHRoYXQgaWYgd2UncmUgZ29pbmcgdG8gc3VzcGVuZCB3aGVuIHdlIGNvbXBsZXRlXG4gICAgICAgIC8vIGEgcm9vdCwgdGhlbiB3ZSBzaG91bGQgYWxzbyByZXN0YXJ0IGlmIHdlIGdldCBhbiB1cGRhdGUgb3IgcGluZyB0aGF0XG4gICAgICAgIC8vIG1pZ2h0IHVuc3VzcGVuZCBpdCwgYW5kIHZpY2UgdmVyc2EuIFRoZSBvbmx5IHJlYXNvbiB0byBzdXNwZW5kIGlzXG4gICAgICAgIC8vIGJlY2F1c2UgeW91IHRoaW5rIHlvdSBtaWdodCB3YW50IHRvIHJlc3RhcnQgYmVmb3JlIGNvbW1pdHRpbmcuIEhvd2V2ZXIsXG4gICAgICAgIC8vIGl0IGRvZXNuJ3QgbWFrZSBzZW5zZSB0byByZXN0YXJ0IG9ubHkgd2hpbGUgaW4gdGhlIHBlcmlvZCB3ZSdyZSBzdXNwZW5kZWQuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFJlc3RhcnRpbmcgdG9vIGFnZ3Jlc3NpdmVseSBpcyBhbHNvIG5vdCBnb29kIGJlY2F1c2UgaXQgc3RhcnZlcyBvdXQgYW55XG4gICAgICAgIC8vIGludGVybWVkaWF0ZSBsb2FkaW5nIHN0YXRlLiBTbyB3ZSB1c2UgaGV1cmlzdGljcyB0byBkZXRlcm1pbmUgd2hlbi5cbiAgICAgICAgLy8gU3VzcGVuc2UgSGV1cmlzdGljc1xuICAgICAgICAvL1xuICAgICAgICAvLyBJZiBub3RoaW5nIHRocmV3IGEgUHJvbWlzZSBvciBhbGwgdGhlIHNhbWUgZmFsbGJhY2tzIGFyZSBhbHJlYWR5IHNob3dpbmcsXG4gICAgICAgIC8vIHRoZW4gZG9uJ3Qgc3VzcGVuZC9yZXN0YXJ0LlxuICAgICAgICAvL1xuICAgICAgICAvLyBJZiB0aGlzIGlzIGFuIGluaXRpYWwgcmVuZGVyIG9mIGEgbmV3IHRyZWUgb2YgU3VzcGVuc2UgYm91bmRhcmllcyBhbmRcbiAgICAgICAgLy8gdGhvc2UgdHJpZ2dlciBhIGZhbGxiYWNrLCB0aGVuIGRvbid0IHN1c3BlbmQvcmVzdGFydC4gV2Ugd2FudCB0byBlbnN1cmVcbiAgICAgICAgLy8gdGhhdCB3ZSBjYW4gc2hvdyB0aGUgaW5pdGlhbCBsb2FkaW5nIHN0YXRlIGFzIHF1aWNrbHkgYXMgcG9zc2libGUuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIElmIHdlIGhpdCBhIFwiRGVsYXllZFwiIGNhc2UsIHN1Y2ggYXMgd2hlbiB3ZSdkIHN3aXRjaCBmcm9tIGNvbnRlbnQgYmFjayBpbnRvXG4gICAgICAgIC8vIGEgZmFsbGJhY2ssIHRoZW4gd2Ugc2hvdWxkIGFsd2F5cyBzdXNwZW5kL3Jlc3RhcnQuIFRyYW5zaXRpb25zIGFwcGx5XG4gICAgICAgIC8vIHRvIHRoaXMgY2FzZS4gSWYgbm9uZSBpcyBkZWZpbmVkLCBKTkQgaXMgdXNlZCBpbnN0ZWFkLlxuICAgICAgICAvL1xuICAgICAgICAvLyBJZiB3ZSdyZSBhbHJlYWR5IHNob3dpbmcgYSBmYWxsYmFjayBhbmQgaXQgZ2V0cyBcInJldHJpZWRcIiwgYWxsb3dpbmcgdXMgdG8gc2hvd1xuICAgICAgICAvLyBhbm90aGVyIGxldmVsLCBidXQgdGhlcmUncyBzdGlsbCBhbiBpbm5lciBib3VuZGFyeSB0aGF0IHdvdWxkIHNob3cgYSBmYWxsYmFjayxcbiAgICAgICAgLy8gdGhlbiB3ZSBzdXNwZW5kL3Jlc3RhcnQgZm9yIDUwMG1zIHNpbmNlIHRoZSBsYXN0IHRpbWUgd2Ugc2hvd2VkIGEgZmFsbGJhY2tcbiAgICAgICAgLy8gYW55d2hlcmUgaW4gdGhlIHRyZWUuIFRoaXMgZWZmZWN0aXZlbHkgdGhyb3R0bGVzIHByb2dyZXNzaXZlIGxvYWRpbmcgaW50byBhXG4gICAgICAgIC8vIGNvbnNpc3RlbnQgdHJhaW4gb2YgY29tbWl0cy4gVGhpcyBhbHNvIGdpdmVzIHVzIGFuIG9wcG9ydHVuaXR5IHRvIHJlc3RhcnQgdG9cbiAgICAgICAgLy8gZ2V0IHRvIHRoZSBjb21wbGV0ZWQgc3RhdGUgc2xpZ2h0bHkgZWFybGllci5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gSWYgdGhlcmUncyBhbWJpZ3VpdHkgZHVlIHRvIGJhdGNoaW5nIGl0J3MgcmVzb2x2ZWQgaW4gcHJlZmVyZW5jZSBvZjpcbiAgICAgICAgLy8gMSkgXCJkZWxheWVkXCIsIDIpIFwiaW5pdGlhbCByZW5kZXJcIiwgMykgXCJyZXRyeVwiLlxuICAgICAgICAvL1xuICAgICAgICAvLyBXZSB3YW50IHRvIGVuc3VyZSB0aGF0IGEgXCJidXN5XCIgc3RhdGUgZG9lc24ndCBnZXQgZm9yY2UgY29tbWl0dGVkLiBXZSB3YW50IHRvXG4gICAgICAgIC8vIGVuc3VyZSB0aGF0IG5ldyBpbml0aWFsIGxvYWRpbmcgc3RhdGVzIGNhbiBjb21taXQgYXMgc29vbiBhcyBwb3NzaWJsZS5cblxuXG4gICAgICAgIGF0dGFjaFBpbmdMaXN0ZW5lcihyb290LCB3YWtlYWJsZSwgcm9vdFJlbmRlckxhbmVzKTtcbiAgICAgICAgX3dvcmtJblByb2dyZXNzLmZsYWdzIHw9IFNob3VsZENhcHR1cmU7XG4gICAgICAgIF93b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IHJvb3RSZW5kZXJMYW5lcztcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSAvLyBUaGlzIGJvdW5kYXJ5IGFscmVhZHkgY2FwdHVyZWQgZHVyaW5nIHRoaXMgcmVuZGVyLiBDb250aW51ZSB0byB0aGUgbmV4dFxuICAgICAgLy8gYm91bmRhcnkuXG5cblxuICAgICAgX3dvcmtJblByb2dyZXNzID0gX3dvcmtJblByb2dyZXNzLnJldHVybjtcbiAgICB9IHdoaWxlIChfd29ya0luUHJvZ3Jlc3MgIT09IG51bGwpOyAvLyBObyBib3VuZGFyeSB3YXMgZm91bmQuIEZhbGx0aHJvdWdoIHRvIGVycm9yIG1vZGUuXG4gICAgLy8gVE9ETzogVXNlIGludmFyaWFudCBzbyB0aGUgbWVzc2FnZSBpcyBzdHJpcHBlZCBpbiBwcm9kP1xuXG5cbiAgICB2YWx1ZSA9IG5ldyBFcnJvcigoZ2V0Q29tcG9uZW50TmFtZShzb3VyY2VGaWJlci50eXBlKSB8fCAnQSBSZWFjdCBjb21wb25lbnQnKSArICcgc3VzcGVuZGVkIHdoaWxlIHJlbmRlcmluZywgYnV0IG5vIGZhbGxiYWNrIFVJIHdhcyBzcGVjaWZpZWQuXFxuJyArICdcXG4nICsgJ0FkZCBhIDxTdXNwZW5zZSBmYWxsYmFjaz0uLi4+IGNvbXBvbmVudCBoaWdoZXIgaW4gdGhlIHRyZWUgdG8gJyArICdwcm92aWRlIGEgbG9hZGluZyBpbmRpY2F0b3Igb3IgcGxhY2Vob2xkZXIgdG8gZGlzcGxheS4nKTtcbiAgfSAvLyBXZSBkaWRuJ3QgZmluZCBhIGJvdW5kYXJ5IHRoYXQgY291bGQgaGFuZGxlIHRoaXMgdHlwZSBvZiBleGNlcHRpb24uIFN0YXJ0XG4gIC8vIG92ZXIgYW5kIHRyYXZlcnNlIHBhcmVudCBwYXRoIGFnYWluLCB0aGlzIHRpbWUgdHJlYXRpbmcgdGhlIGV4Y2VwdGlvblxuICAvLyBhcyBhbiBlcnJvci5cblxuXG4gIHJlbmRlckRpZEVycm9yKCk7XG4gIHZhbHVlID0gY3JlYXRlQ2FwdHVyZWRWYWx1ZSh2YWx1ZSwgc291cmNlRmliZXIpO1xuICB2YXIgd29ya0luUHJvZ3Jlc3MgPSByZXR1cm5GaWJlcjtcblxuICBkbyB7XG4gICAgc3dpdGNoICh3b3JrSW5Qcm9ncmVzcy50YWcpIHtcbiAgICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgX2Vycm9ySW5mbyA9IHZhbHVlO1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFNob3VsZENhcHR1cmU7XG4gICAgICAgICAgdmFyIGxhbmUgPSBwaWNrQXJiaXRyYXJ5TGFuZShyb290UmVuZGVyTGFuZXMpO1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gbWVyZ2VMYW5lcyh3b3JrSW5Qcm9ncmVzcy5sYW5lcywgbGFuZSk7XG5cbiAgICAgICAgICB2YXIgX3VwZGF0ZSA9IGNyZWF0ZVJvb3RFcnJvclVwZGF0ZSh3b3JrSW5Qcm9ncmVzcywgX2Vycm9ySW5mbywgbGFuZSk7XG5cbiAgICAgICAgICBlbnF1ZXVlQ2FwdHVyZWRVcGRhdGUod29ya0luUHJvZ3Jlc3MsIF91cGRhdGUpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICAvLyBDYXB0dXJlIGFuZCByZXRyeVxuICAgICAgICB2YXIgZXJyb3JJbmZvID0gdmFsdWU7XG4gICAgICAgIHZhciBjdG9yID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuXG4gICAgICAgIGlmICgod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiBEaWRDYXB0dXJlKSA9PT0gTm9GbGFncyAmJiAodHlwZW9mIGN0b3IuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yID09PSAnZnVuY3Rpb24nIHx8IGluc3RhbmNlICE9PSBudWxsICYmIHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRDYXRjaCA9PT0gJ2Z1bmN0aW9uJyAmJiAhaXNBbHJlYWR5RmFpbGVkTGVnYWN5RXJyb3JCb3VuZGFyeShpbnN0YW5jZSkpKSB7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gU2hvdWxkQ2FwdHVyZTtcblxuICAgICAgICAgIHZhciBfbGFuZSA9IHBpY2tBcmJpdHJhcnlMYW5lKHJvb3RSZW5kZXJMYW5lcyk7XG5cbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IG1lcmdlTGFuZXMod29ya0luUHJvZ3Jlc3MubGFuZXMsIF9sYW5lKTsgLy8gU2NoZWR1bGUgdGhlIGVycm9yIGJvdW5kYXJ5IHRvIHJlLXJlbmRlciB1c2luZyB1cGRhdGVkIHN0YXRlXG5cbiAgICAgICAgICB2YXIgX3VwZGF0ZTIgPSBjcmVhdGVDbGFzc0Vycm9yVXBkYXRlKHdvcmtJblByb2dyZXNzLCBlcnJvckluZm8sIF9sYW5lKTtcblxuICAgICAgICAgIGVucXVldWVDYXB0dXJlZFVwZGF0ZSh3b3JrSW5Qcm9ncmVzcywgX3VwZGF0ZTIpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHdvcmtJblByb2dyZXNzID0gd29ya0luUHJvZ3Jlc3MucmV0dXJuO1xuICB9IHdoaWxlICh3b3JrSW5Qcm9ncmVzcyAhPT0gbnVsbCk7XG59XG5cbnZhciBkaWRXYXJuQWJvdXRVbmRlZmluZWRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9IG51bGw7XG5cbntcbiAgZGlkV2FybkFib3V0VW5kZWZpbmVkU25hcHNob3RCZWZvcmVVcGRhdGUgPSBuZXcgU2V0KCk7XG59XG5cbnZhciBQb3NzaWJseVdlYWtTZXQgPSB0eXBlb2YgV2Vha1NldCA9PT0gJ2Z1bmN0aW9uJyA/IFdlYWtTZXQgOiBTZXQ7XG5cbnZhciBjYWxsQ29tcG9uZW50V2lsbFVubW91bnRXaXRoVGltZXIgPSBmdW5jdGlvbiAoY3VycmVudCwgaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucHJvcHMgPSBjdXJyZW50Lm1lbW9pemVkUHJvcHM7XG4gIGluc3RhbmNlLnN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuXG4gIHtcbiAgICBpbnN0YW5jZS5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICB9XG59OyAvLyBDYXB0dXJlIGVycm9ycyBzbyB0aGV5IGRvbid0IGludGVycnVwdCB1bm1vdW50aW5nLlxuXG5cbmZ1bmN0aW9uIHNhZmVseUNhbGxDb21wb25lbnRXaWxsVW5tb3VudChjdXJyZW50LCBpbnN0YW5jZSkge1xuICB7XG4gICAgaW52b2tlR3VhcmRlZENhbGxiYWNrKG51bGwsIGNhbGxDb21wb25lbnRXaWxsVW5tb3VudFdpdGhUaW1lciwgbnVsbCwgY3VycmVudCwgaW5zdGFuY2UpO1xuXG4gICAgaWYgKGhhc0NhdWdodEVycm9yKCkpIHtcbiAgICAgIHZhciB1bm1vdW50RXJyb3IgPSBjbGVhckNhdWdodEVycm9yKCk7XG4gICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihjdXJyZW50LCB1bm1vdW50RXJyb3IpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzYWZlbHlEZXRhY2hSZWYoY3VycmVudCkge1xuICB2YXIgcmVmID0gY3VycmVudC5yZWY7XG5cbiAgaWYgKHJlZiAhPT0gbnVsbCkge1xuICAgIGlmICh0eXBlb2YgcmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB7XG4gICAgICAgIGludm9rZUd1YXJkZWRDYWxsYmFjayhudWxsLCByZWYsIG51bGwsIG51bGwpO1xuXG4gICAgICAgIGlmIChoYXNDYXVnaHRFcnJvcigpKSB7XG4gICAgICAgICAgdmFyIHJlZkVycm9yID0gY2xlYXJDYXVnaHRFcnJvcigpO1xuICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGN1cnJlbnQsIHJlZkVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZWYuY3VycmVudCA9IG51bGw7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHNhZmVseUNhbGxEZXN0cm95KGN1cnJlbnQsIGRlc3Ryb3kpIHtcbiAge1xuICAgIGludm9rZUd1YXJkZWRDYWxsYmFjayhudWxsLCBkZXN0cm95LCBudWxsKTtcblxuICAgIGlmIChoYXNDYXVnaHRFcnJvcigpKSB7XG4gICAgICB2YXIgZXJyb3IgPSBjbGVhckNhdWdodEVycm9yKCk7XG4gICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihjdXJyZW50LCBlcnJvcik7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdEJlZm9yZU11dGF0aW9uTGlmZUN5Y2xlcyhjdXJyZW50LCBmaW5pc2hlZFdvcmspIHtcbiAgc3dpdGNoIChmaW5pc2hlZFdvcmsudGFnKSB7XG4gICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgIGNhc2UgQmxvY2s6XG4gICAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIGlmIChmaW5pc2hlZFdvcmsuZmxhZ3MgJiBTbmFwc2hvdCkge1xuICAgICAgICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgcHJldlByb3BzID0gY3VycmVudC5tZW1vaXplZFByb3BzO1xuICAgICAgICAgICAgdmFyIHByZXZTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICAgIHZhciBpbnN0YW5jZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7IC8vIFdlIGNvdWxkIHVwZGF0ZSBpbnN0YW5jZSBwcm9wcyBhbmQgc3RhdGUgaGVyZSxcbiAgICAgICAgICAgIC8vIGJ1dCBpbnN0ZWFkIHdlIHJlbHkgb24gdGhlbSBiZWluZyBzZXQgZHVyaW5nIGxhc3QgcmVuZGVyLlxuICAgICAgICAgICAgLy8gVE9ETzogcmV2aXNpdCB0aGlzIHdoZW4gd2UgaW1wbGVtZW50IHJlc3VtaW5nLlxuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlmIChmaW5pc2hlZFdvcmsudHlwZSA9PT0gZmluaXNoZWRXb3JrLmVsZW1lbnRUeXBlICYmICFkaWRXYXJuQWJvdXRSZWFzc2lnbmluZ1Byb3BzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGluc3RhbmNlLnByb3BzICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcykge1xuICAgICAgICAgICAgICAgICAgZXJyb3IoJ0V4cGVjdGVkICVzIHByb3BzIHRvIG1hdGNoIG1lbW9pemVkIHByb3BzIGJlZm9yZSAnICsgJ2dldFNuYXBzaG90QmVmb3JlVXBkYXRlLiAnICsgJ1RoaXMgbWlnaHQgZWl0aGVyIGJlIGJlY2F1c2Ugb2YgYSBidWcgaW4gUmVhY3QsIG9yIGJlY2F1c2UgJyArICdhIGNvbXBvbmVudCByZWFzc2lnbnMgaXRzIG93biBgdGhpcy5wcm9wc2AuICcgKyAnUGxlYXNlIGZpbGUgYW4gaXNzdWUuJywgZ2V0Q29tcG9uZW50TmFtZShmaW5pc2hlZFdvcmsudHlwZSkgfHwgJ2luc3RhbmNlJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGluc3RhbmNlLnN0YXRlICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgZXJyb3IoJ0V4cGVjdGVkICVzIHN0YXRlIHRvIG1hdGNoIG1lbW9pemVkIHN0YXRlIGJlZm9yZSAnICsgJ2dldFNuYXBzaG90QmVmb3JlVXBkYXRlLiAnICsgJ1RoaXMgbWlnaHQgZWl0aGVyIGJlIGJlY2F1c2Ugb2YgYSBidWcgaW4gUmVhY3QsIG9yIGJlY2F1c2UgJyArICdhIGNvbXBvbmVudCByZWFzc2lnbnMgaXRzIG93biBgdGhpcy5zdGF0ZWAuICcgKyAnUGxlYXNlIGZpbGUgYW4gaXNzdWUuJywgZ2V0Q29tcG9uZW50TmFtZShmaW5pc2hlZFdvcmsudHlwZSkgfHwgJ2luc3RhbmNlJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBzbmFwc2hvdCA9IGluc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlKGZpbmlzaGVkV29yay5lbGVtZW50VHlwZSA9PT0gZmluaXNoZWRXb3JrLnR5cGUgPyBwcmV2UHJvcHMgOiByZXNvbHZlRGVmYXVsdFByb3BzKGZpbmlzaGVkV29yay50eXBlLCBwcmV2UHJvcHMpLCBwcmV2U3RhdGUpO1xuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHZhciBkaWRXYXJuU2V0ID0gZGlkV2FybkFib3V0VW5kZWZpbmVkU25hcHNob3RCZWZvcmVVcGRhdGU7XG5cbiAgICAgICAgICAgICAgaWYgKHNuYXBzaG90ID09PSB1bmRlZmluZWQgJiYgIWRpZFdhcm5TZXQuaGFzKGZpbmlzaGVkV29yay50eXBlKSkge1xuICAgICAgICAgICAgICAgIGRpZFdhcm5TZXQuYWRkKGZpbmlzaGVkV29yay50eXBlKTtcblxuICAgICAgICAgICAgICAgIGVycm9yKCclcy5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSgpOiBBIHNuYXBzaG90IHZhbHVlIChvciBudWxsKSAnICsgJ211c3QgYmUgcmV0dXJuZWQuIFlvdSBoYXZlIHJldHVybmVkIHVuZGVmaW5lZC4nLCBnZXRDb21wb25lbnROYW1lKGZpbmlzaGVkV29yay50eXBlKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaW5zdGFuY2UuX19yZWFjdEludGVybmFsU25hcHNob3RCZWZvcmVVcGRhdGUgPSBzbmFwc2hvdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RSb290OlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgaWYgKGZpbmlzaGVkV29yay5mbGFncyAmIFNuYXBzaG90KSB7XG4gICAgICAgICAgICB2YXIgcm9vdCA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgICAgICAgICBjbGVhckNvbnRhaW5lcihyb290LmNvbnRhaW5lckluZm8pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICBjYXNlIEhvc3RUZXh0OlxuICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICBjYXNlIEluY29tcGxldGVDbGFzc0NvbXBvbmVudDpcbiAgICAgIC8vIE5vdGhpbmcgdG8gZG8gZm9yIHRoZXNlIGNvbXBvbmVudCB0eXBlc1xuICAgICAgcmV0dXJuO1xuICB9XG5cbiAge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlRoaXMgdW5pdCBvZiB3b3JrIHRhZyBzaG91bGQgbm90IGhhdmUgc2lkZS1lZmZlY3RzLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdEhvb2tFZmZlY3RMaXN0VW5tb3VudCh0YWcsIGZpbmlzaGVkV29yaykge1xuICB2YXIgdXBkYXRlUXVldWUgPSBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWU7XG4gIHZhciBsYXN0RWZmZWN0ID0gdXBkYXRlUXVldWUgIT09IG51bGwgPyB1cGRhdGVRdWV1ZS5sYXN0RWZmZWN0IDogbnVsbDtcblxuICBpZiAobGFzdEVmZmVjdCAhPT0gbnVsbCkge1xuICAgIHZhciBmaXJzdEVmZmVjdCA9IGxhc3RFZmZlY3QubmV4dDtcbiAgICB2YXIgZWZmZWN0ID0gZmlyc3RFZmZlY3Q7XG5cbiAgICBkbyB7XG4gICAgICBpZiAoKGVmZmVjdC50YWcgJiB0YWcpID09PSB0YWcpIHtcbiAgICAgICAgLy8gVW5tb3VudFxuICAgICAgICB2YXIgZGVzdHJveSA9IGVmZmVjdC5kZXN0cm95O1xuICAgICAgICBlZmZlY3QuZGVzdHJveSA9IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAoZGVzdHJveSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGVmZmVjdCA9IGVmZmVjdC5uZXh0O1xuICAgIH0gd2hpbGUgKGVmZmVjdCAhPT0gZmlyc3RFZmZlY3QpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdEhvb2tFZmZlY3RMaXN0TW91bnQodGFnLCBmaW5pc2hlZFdvcmspIHtcbiAgdmFyIHVwZGF0ZVF1ZXVlID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlO1xuICB2YXIgbGFzdEVmZmVjdCA9IHVwZGF0ZVF1ZXVlICE9PSBudWxsID8gdXBkYXRlUXVldWUubGFzdEVmZmVjdCA6IG51bGw7XG5cbiAgaWYgKGxhc3RFZmZlY3QgIT09IG51bGwpIHtcbiAgICB2YXIgZmlyc3RFZmZlY3QgPSBsYXN0RWZmZWN0Lm5leHQ7XG4gICAgdmFyIGVmZmVjdCA9IGZpcnN0RWZmZWN0O1xuXG4gICAgZG8ge1xuICAgICAgaWYgKChlZmZlY3QudGFnICYgdGFnKSA9PT0gdGFnKSB7XG4gICAgICAgIC8vIE1vdW50XG4gICAgICAgIHZhciBjcmVhdGUgPSBlZmZlY3QuY3JlYXRlO1xuICAgICAgICBlZmZlY3QuZGVzdHJveSA9IGNyZWF0ZSgpO1xuXG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgZGVzdHJveSA9IGVmZmVjdC5kZXN0cm95O1xuXG4gICAgICAgICAgaWYgKGRlc3Ryb3kgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgZGVzdHJveSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdmFyIGFkZGVuZHVtID0gdm9pZCAwO1xuXG4gICAgICAgICAgICBpZiAoZGVzdHJveSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICBhZGRlbmR1bSA9ICcgWW91IHJldHVybmVkIG51bGwuIElmIHlvdXIgZWZmZWN0IGRvZXMgbm90IHJlcXVpcmUgY2xlYW4gJyArICd1cCwgcmV0dXJuIHVuZGVmaW5lZCAob3Igbm90aGluZykuJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGRlc3Ryb3kudGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICBhZGRlbmR1bSA9ICdcXG5cXG5JdCBsb29rcyBsaWtlIHlvdSB3cm90ZSB1c2VFZmZlY3QoYXN5bmMgKCkgPT4gLi4uKSBvciByZXR1cm5lZCBhIFByb21pc2UuICcgKyAnSW5zdGVhZCwgd3JpdGUgdGhlIGFzeW5jIGZ1bmN0aW9uIGluc2lkZSB5b3VyIGVmZmVjdCAnICsgJ2FuZCBjYWxsIGl0IGltbWVkaWF0ZWx5OlxcblxcbicgKyAndXNlRWZmZWN0KCgpID0+IHtcXG4nICsgJyAgYXN5bmMgZnVuY3Rpb24gZmV0Y2hEYXRhKCkge1xcbicgKyAnICAgIC8vIFlvdSBjYW4gYXdhaXQgaGVyZVxcbicgKyAnICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgTXlBUEkuZ2V0RGF0YShzb21lSWQpO1xcbicgKyAnICAgIC8vIC4uLlxcbicgKyAnICB9XFxuJyArICcgIGZldGNoRGF0YSgpO1xcbicgKyBcIn0sIFtzb21lSWRdKTsgLy8gT3IgW10gaWYgZWZmZWN0IGRvZXNuJ3QgbmVlZCBwcm9wcyBvciBzdGF0ZVxcblxcblwiICsgJ0xlYXJuIG1vcmUgYWJvdXQgZGF0YSBmZXRjaGluZyB3aXRoIEhvb2tzOiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvaG9va3MtZGF0YS1mZXRjaGluZyc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBhZGRlbmR1bSA9ICcgWW91IHJldHVybmVkOiAnICsgZGVzdHJveTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXJyb3IoJ0FuIGVmZmVjdCBmdW5jdGlvbiBtdXN0IG5vdCByZXR1cm4gYW55dGhpbmcgYmVzaWRlcyBhIGZ1bmN0aW9uLCAnICsgJ3doaWNoIGlzIHVzZWQgZm9yIGNsZWFuLXVwLiVzJywgYWRkZW5kdW0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBlZmZlY3QgPSBlZmZlY3QubmV4dDtcbiAgICB9IHdoaWxlIChlZmZlY3QgIT09IGZpcnN0RWZmZWN0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzY2hlZHVsZVBhc3NpdmVFZmZlY3RzKGZpbmlzaGVkV29yaykge1xuICB2YXIgdXBkYXRlUXVldWUgPSBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWU7XG4gIHZhciBsYXN0RWZmZWN0ID0gdXBkYXRlUXVldWUgIT09IG51bGwgPyB1cGRhdGVRdWV1ZS5sYXN0RWZmZWN0IDogbnVsbDtcblxuICBpZiAobGFzdEVmZmVjdCAhPT0gbnVsbCkge1xuICAgIHZhciBmaXJzdEVmZmVjdCA9IGxhc3RFZmZlY3QubmV4dDtcbiAgICB2YXIgZWZmZWN0ID0gZmlyc3RFZmZlY3Q7XG5cbiAgICBkbyB7XG4gICAgICB2YXIgX2VmZmVjdCA9IGVmZmVjdCxcbiAgICAgICAgICBuZXh0ID0gX2VmZmVjdC5uZXh0LFxuICAgICAgICAgIHRhZyA9IF9lZmZlY3QudGFnO1xuXG4gICAgICBpZiAoKHRhZyAmIFBhc3NpdmUkMSkgIT09IE5vRmxhZ3MkMSAmJiAodGFnICYgSGFzRWZmZWN0KSAhPT0gTm9GbGFncyQxKSB7XG4gICAgICAgIGVucXVldWVQZW5kaW5nUGFzc2l2ZUhvb2tFZmZlY3RVbm1vdW50KGZpbmlzaGVkV29yaywgZWZmZWN0KTtcbiAgICAgICAgZW5xdWV1ZVBlbmRpbmdQYXNzaXZlSG9va0VmZmVjdE1vdW50KGZpbmlzaGVkV29yaywgZWZmZWN0KTtcbiAgICAgIH1cblxuICAgICAgZWZmZWN0ID0gbmV4dDtcbiAgICB9IHdoaWxlIChlZmZlY3QgIT09IGZpcnN0RWZmZWN0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRMaWZlQ3ljbGVzKGZpbmlzaGVkUm9vdCwgY3VycmVudCwgZmluaXNoZWRXb3JrLCBjb21taXR0ZWRMYW5lcykge1xuICBzd2l0Y2ggKGZpbmlzaGVkV29yay50YWcpIHtcbiAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgY2FzZSBCbG9jazpcbiAgICAgIHtcbiAgICAgICAgLy8gQXQgdGhpcyBwb2ludCBsYXlvdXQgZWZmZWN0cyBoYXZlIGFscmVhZHkgYmVlbiBkZXN0cm95ZWQgKGR1cmluZyBtdXRhdGlvbiBwaGFzZSkuXG4gICAgICAgIC8vIFRoaXMgaXMgZG9uZSB0byBwcmV2ZW50IHNpYmxpbmcgY29tcG9uZW50IGVmZmVjdHMgZnJvbSBpbnRlcmZlcmluZyB3aXRoIGVhY2ggb3RoZXIsXG4gICAgICAgIC8vIGUuZy4gYSBkZXN0cm95IGZ1bmN0aW9uIGluIG9uZSBjb21wb25lbnQgc2hvdWxkIG5ldmVyIG92ZXJyaWRlIGEgcmVmIHNldFxuICAgICAgICAvLyBieSBhIGNyZWF0ZSBmdW5jdGlvbiBpbiBhbm90aGVyIGNvbXBvbmVudCBkdXJpbmcgdGhlIHNhbWUgY29tbWl0LlxuICAgICAgICB7XG4gICAgICAgICAgY29tbWl0SG9va0VmZmVjdExpc3RNb3VudChMYXlvdXQgfCBIYXNFZmZlY3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgIH1cblxuICAgICAgICBzY2hlZHVsZVBhc3NpdmVFZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG5cbiAgICAgICAgaWYgKGZpbmlzaGVkV29yay5mbGFncyAmIFVwZGF0ZSkge1xuICAgICAgICAgIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBXZSBjb3VsZCB1cGRhdGUgaW5zdGFuY2UgcHJvcHMgYW5kIHN0YXRlIGhlcmUsXG4gICAgICAgICAgICAvLyBidXQgaW5zdGVhZCB3ZSByZWx5IG9uIHRoZW0gYmVpbmcgc2V0IGR1cmluZyBsYXN0IHJlbmRlci5cbiAgICAgICAgICAgIC8vIFRPRE86IHJldmlzaXQgdGhpcyB3aGVuIHdlIGltcGxlbWVudCByZXN1bWluZy5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaWYgKGZpbmlzaGVkV29yay50eXBlID09PSBmaW5pc2hlZFdvcmsuZWxlbWVudFR5cGUgJiYgIWRpZFdhcm5BYm91dFJlYXNzaWduaW5nUHJvcHMpIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2UucHJvcHMgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzKSB7XG4gICAgICAgICAgICAgICAgICBlcnJvcignRXhwZWN0ZWQgJXMgcHJvcHMgdG8gbWF0Y2ggbWVtb2l6ZWQgcHJvcHMgYmVmb3JlICcgKyAnY29tcG9uZW50RGlkTW91bnQuICcgKyAnVGhpcyBtaWdodCBlaXRoZXIgYmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBSZWFjdCwgb3IgYmVjYXVzZSAnICsgJ2EgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnByb3BzYC4gJyArICdQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nLCBnZXRDb21wb25lbnROYW1lKGZpbmlzaGVkV29yay50eXBlKSB8fCAnaW5zdGFuY2UnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2Uuc3RhdGUgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlKSB7XG4gICAgICAgICAgICAgICAgICBlcnJvcignRXhwZWN0ZWQgJXMgc3RhdGUgdG8gbWF0Y2ggbWVtb2l6ZWQgc3RhdGUgYmVmb3JlICcgKyAnY29tcG9uZW50RGlkTW91bnQuICcgKyAnVGhpcyBtaWdodCBlaXRoZXIgYmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBSZWFjdCwgb3IgYmVjYXVzZSAnICsgJ2EgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnN0YXRlYC4gJyArICdQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nLCBnZXRDb21wb25lbnROYW1lKGZpbmlzaGVkV29yay50eXBlKSB8fCAnaW5zdGFuY2UnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpbnN0YW5jZS5jb21wb25lbnREaWRNb3VudCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgcHJldlByb3BzID0gZmluaXNoZWRXb3JrLmVsZW1lbnRUeXBlID09PSBmaW5pc2hlZFdvcmsudHlwZSA/IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyA6IHJlc29sdmVEZWZhdWx0UHJvcHMoZmluaXNoZWRXb3JrLnR5cGUsIGN1cnJlbnQubWVtb2l6ZWRQcm9wcyk7XG4gICAgICAgICAgICB2YXIgcHJldlN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlOyAvLyBXZSBjb3VsZCB1cGRhdGUgaW5zdGFuY2UgcHJvcHMgYW5kIHN0YXRlIGhlcmUsXG4gICAgICAgICAgICAvLyBidXQgaW5zdGVhZCB3ZSByZWx5IG9uIHRoZW0gYmVpbmcgc2V0IGR1cmluZyBsYXN0IHJlbmRlci5cbiAgICAgICAgICAgIC8vIFRPRE86IHJldmlzaXQgdGhpcyB3aGVuIHdlIGltcGxlbWVudCByZXN1bWluZy5cblxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpZiAoZmluaXNoZWRXb3JrLnR5cGUgPT09IGZpbmlzaGVkV29yay5lbGVtZW50VHlwZSAmJiAhZGlkV2FybkFib3V0UmVhc3NpZ25pbmdQcm9wcykge1xuICAgICAgICAgICAgICAgIGlmIChpbnN0YW5jZS5wcm9wcyAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHMpIHtcbiAgICAgICAgICAgICAgICAgIGVycm9yKCdFeHBlY3RlZCAlcyBwcm9wcyB0byBtYXRjaCBtZW1vaXplZCBwcm9wcyBiZWZvcmUgJyArICdjb21wb25lbnREaWRVcGRhdGUuICcgKyAnVGhpcyBtaWdodCBlaXRoZXIgYmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBSZWFjdCwgb3IgYmVjYXVzZSAnICsgJ2EgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnByb3BzYC4gJyArICdQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nLCBnZXRDb21wb25lbnROYW1lKGZpbmlzaGVkV29yay50eXBlKSB8fCAnaW5zdGFuY2UnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2Uuc3RhdGUgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlKSB7XG4gICAgICAgICAgICAgICAgICBlcnJvcignRXhwZWN0ZWQgJXMgc3RhdGUgdG8gbWF0Y2ggbWVtb2l6ZWQgc3RhdGUgYmVmb3JlICcgKyAnY29tcG9uZW50RGlkVXBkYXRlLiAnICsgJ1RoaXMgbWlnaHQgZWl0aGVyIGJlIGJlY2F1c2Ugb2YgYSBidWcgaW4gUmVhY3QsIG9yIGJlY2F1c2UgJyArICdhIGNvbXBvbmVudCByZWFzc2lnbnMgaXRzIG93biBgdGhpcy5zdGF0ZWAuICcgKyAnUGxlYXNlIGZpbGUgYW4gaXNzdWUuJywgZ2V0Q29tcG9uZW50TmFtZShmaW5pc2hlZFdvcmsudHlwZSkgfHwgJ2luc3RhbmNlJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaW5zdGFuY2UuY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlLCBpbnN0YW5jZS5fX3JlYWN0SW50ZXJuYWxTbmFwc2hvdEJlZm9yZVVwZGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIFRPRE86IEkgdGhpbmsgdGhpcyBpcyBub3cgYWx3YXlzIG5vbi1udWxsIGJ5IHRoZSB0aW1lIGl0IHJlYWNoZXMgdGhlXG4gICAgICAgIC8vIGNvbW1pdCBwaGFzZS4gQ29uc2lkZXIgcmVtb3ZpbmcgdGhlIHR5cGUgY2hlY2suXG5cblxuICAgICAgICB2YXIgdXBkYXRlUXVldWUgPSBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWU7XG5cbiAgICAgICAgaWYgKHVwZGF0ZVF1ZXVlICE9PSBudWxsKSB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKGZpbmlzaGVkV29yay50eXBlID09PSBmaW5pc2hlZFdvcmsuZWxlbWVudFR5cGUgJiYgIWRpZFdhcm5BYm91dFJlYXNzaWduaW5nUHJvcHMpIHtcbiAgICAgICAgICAgICAgaWYgKGluc3RhbmNlLnByb3BzICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcykge1xuICAgICAgICAgICAgICAgIGVycm9yKCdFeHBlY3RlZCAlcyBwcm9wcyB0byBtYXRjaCBtZW1vaXplZCBwcm9wcyBiZWZvcmUgJyArICdwcm9jZXNzaW5nIHRoZSB1cGRhdGUgcXVldWUuICcgKyAnVGhpcyBtaWdodCBlaXRoZXIgYmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBSZWFjdCwgb3IgYmVjYXVzZSAnICsgJ2EgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnByb3BzYC4gJyArICdQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nLCBnZXRDb21wb25lbnROYW1lKGZpbmlzaGVkV29yay50eXBlKSB8fCAnaW5zdGFuY2UnKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChpbnN0YW5jZS5zdGF0ZSAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGUpIHtcbiAgICAgICAgICAgICAgICBlcnJvcignRXhwZWN0ZWQgJXMgc3RhdGUgdG8gbWF0Y2ggbWVtb2l6ZWQgc3RhdGUgYmVmb3JlICcgKyAncHJvY2Vzc2luZyB0aGUgdXBkYXRlIHF1ZXVlLiAnICsgJ1RoaXMgbWlnaHQgZWl0aGVyIGJlIGJlY2F1c2Ugb2YgYSBidWcgaW4gUmVhY3QsIG9yIGJlY2F1c2UgJyArICdhIGNvbXBvbmVudCByZWFzc2lnbnMgaXRzIG93biBgdGhpcy5zdGF0ZWAuICcgKyAnUGxlYXNlIGZpbGUgYW4gaXNzdWUuJywgZ2V0Q29tcG9uZW50TmFtZShmaW5pc2hlZFdvcmsudHlwZSkgfHwgJ2luc3RhbmNlJyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IC8vIFdlIGNvdWxkIHVwZGF0ZSBpbnN0YW5jZSBwcm9wcyBhbmQgc3RhdGUgaGVyZSxcbiAgICAgICAgICAvLyBidXQgaW5zdGVhZCB3ZSByZWx5IG9uIHRoZW0gYmVpbmcgc2V0IGR1cmluZyBsYXN0IHJlbmRlci5cbiAgICAgICAgICAvLyBUT0RPOiByZXZpc2l0IHRoaXMgd2hlbiB3ZSBpbXBsZW1lbnQgcmVzdW1pbmcuXG5cblxuICAgICAgICAgIGNvbW1pdFVwZGF0ZVF1ZXVlKGZpbmlzaGVkV29yaywgdXBkYXRlUXVldWUsIGluc3RhbmNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICB7XG4gICAgICAgIC8vIFRPRE86IEkgdGhpbmsgdGhpcyBpcyBub3cgYWx3YXlzIG5vbi1udWxsIGJ5IHRoZSB0aW1lIGl0IHJlYWNoZXMgdGhlXG4gICAgICAgIC8vIGNvbW1pdCBwaGFzZS4gQ29uc2lkZXIgcmVtb3ZpbmcgdGhlIHR5cGUgY2hlY2suXG4gICAgICAgIHZhciBfdXBkYXRlUXVldWUgPSBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWU7XG5cbiAgICAgICAgaWYgKF91cGRhdGVRdWV1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHZhciBfaW5zdGFuY2UgPSBudWxsO1xuXG4gICAgICAgICAgaWYgKGZpbmlzaGVkV29yay5jaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgc3dpdGNoIChmaW5pc2hlZFdvcmsuY2hpbGQudGFnKSB7XG4gICAgICAgICAgICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgICAgICAgICAgICBfaW5zdGFuY2UgPSBnZXRQdWJsaWNJbnN0YW5jZShmaW5pc2hlZFdvcmsuY2hpbGQuc3RhdGVOb2RlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICAgICAgICAgIF9pbnN0YW5jZSA9IGZpbmlzaGVkV29yay5jaGlsZC5zdGF0ZU5vZGU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29tbWl0VXBkYXRlUXVldWUoZmluaXNoZWRXb3JrLCBfdXBkYXRlUXVldWUsIF9pbnN0YW5jZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBfaW5zdGFuY2UyID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTsgLy8gUmVuZGVyZXJzIG1heSBzY2hlZHVsZSB3b3JrIHRvIGJlIGRvbmUgYWZ0ZXIgaG9zdCBjb21wb25lbnRzIGFyZSBtb3VudGVkXG4gICAgICAgIC8vIChlZyBET00gcmVuZGVyZXIgbWF5IHNjaGVkdWxlIGF1dG8tZm9jdXMgZm9yIGlucHV0cyBhbmQgZm9ybSBjb250cm9scykuXG4gICAgICAgIC8vIFRoZXNlIGVmZmVjdHMgc2hvdWxkIG9ubHkgYmUgY29tbWl0dGVkIHdoZW4gY29tcG9uZW50cyBhcmUgZmlyc3QgbW91bnRlZCxcbiAgICAgICAgLy8gYWthIHdoZW4gdGhlcmUgaXMgbm8gY3VycmVudC9hbHRlcm5hdGUuXG5cbiAgICAgICAgaWYgKGN1cnJlbnQgPT09IG51bGwgJiYgZmluaXNoZWRXb3JrLmZsYWdzICYgVXBkYXRlKSB7XG4gICAgICAgICAgdmFyIHR5cGUgPSBmaW5pc2hlZFdvcmsudHlwZTtcbiAgICAgICAgICB2YXIgcHJvcHMgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcztcbiAgICAgICAgICBjb21taXRNb3VudChfaW5zdGFuY2UyLCB0eXBlLCBwcm9wcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RUZXh0OlxuICAgICAge1xuICAgICAgICAvLyBXZSBoYXZlIG5vIGxpZmUtY3ljbGVzIGFzc29jaWF0ZWQgd2l0aCB0ZXh0LlxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgICB7XG4gICAgICAgIC8vIFdlIGhhdmUgbm8gbGlmZS1jeWNsZXMgYXNzb2NpYXRlZCB3aXRoIHBvcnRhbHMuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgUHJvZmlsZXI6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgX2ZpbmlzaGVkV29yayRtZW1vaXplMiA9IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzLFxuICAgICAgICAgICAgICBvbkNvbW1pdCA9IF9maW5pc2hlZFdvcmskbWVtb2l6ZTIub25Db21taXQsXG4gICAgICAgICAgICAgIG9uUmVuZGVyID0gX2ZpbmlzaGVkV29yayRtZW1vaXplMi5vblJlbmRlcjtcbiAgICAgICAgICB2YXIgZWZmZWN0RHVyYXRpb24gPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlLmVmZmVjdER1cmF0aW9uO1xuICAgICAgICAgIHZhciBjb21taXRUaW1lID0gZ2V0Q29tbWl0VGltZSgpO1xuXG4gICAgICAgICAgaWYgKHR5cGVvZiBvblJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBvblJlbmRlcihmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcy5pZCwgY3VycmVudCA9PT0gbnVsbCA/ICdtb3VudCcgOiAndXBkYXRlJywgZmluaXNoZWRXb3JrLmFjdHVhbER1cmF0aW9uLCBmaW5pc2hlZFdvcmsudHJlZUJhc2VEdXJhdGlvbiwgZmluaXNoZWRXb3JrLmFjdHVhbFN0YXJ0VGltZSwgY29tbWl0VGltZSwgZmluaXNoZWRSb290Lm1lbW9pemVkSW50ZXJhY3Rpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBjb21taXRTdXNwZW5zZUh5ZHJhdGlvbkNhbGxiYWNrcyhmaW5pc2hlZFJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgU3VzcGVuc2VMaXN0Q29tcG9uZW50OlxuICAgIGNhc2UgSW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50OlxuICAgIGNhc2UgRnVuZGFtZW50YWxDb21wb25lbnQ6XG4gICAgY2FzZSBTY29wZUNvbXBvbmVudDpcbiAgICBjYXNlIE9mZnNjcmVlbkNvbXBvbmVudDpcbiAgICBjYXNlIExlZ2FjeUhpZGRlbkNvbXBvbmVudDpcbiAgICAgIHJldHVybjtcbiAgfVxuXG4gIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJUaGlzIHVuaXQgb2Ygd29yayB0YWcgc2hvdWxkIG5vdCBoYXZlIHNpZGUtZWZmZWN0cy4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBoaWRlT3JVbmhpZGVBbGxDaGlsZHJlbihmaW5pc2hlZFdvcmssIGlzSGlkZGVuKSB7XG4gIHtcbiAgICAvLyBXZSBvbmx5IGhhdmUgdGhlIHRvcCBGaWJlciB0aGF0IHdhcyBpbnNlcnRlZCBidXQgd2UgbmVlZCB0byByZWN1cnNlIGRvd24gaXRzXG4gICAgLy8gY2hpbGRyZW4gdG8gZmluZCBhbGwgdGhlIHRlcm1pbmFsIG5vZGVzLlxuICAgIHZhciBub2RlID0gZmluaXNoZWRXb3JrO1xuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmIChub2RlLnRhZyA9PT0gSG9zdENvbXBvbmVudCkge1xuICAgICAgICB2YXIgaW5zdGFuY2UgPSBub2RlLnN0YXRlTm9kZTtcblxuICAgICAgICBpZiAoaXNIaWRkZW4pIHtcbiAgICAgICAgICBoaWRlSW5zdGFuY2UoaW5zdGFuY2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHVuaGlkZUluc3RhbmNlKG5vZGUuc3RhdGVOb2RlLCBub2RlLm1lbW9pemVkUHJvcHMpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKG5vZGUudGFnID09PSBIb3N0VGV4dCkge1xuICAgICAgICB2YXIgX2luc3RhbmNlMyA9IG5vZGUuc3RhdGVOb2RlO1xuXG4gICAgICAgIGlmIChpc0hpZGRlbikge1xuICAgICAgICAgIGhpZGVUZXh0SW5zdGFuY2UoX2luc3RhbmNlMyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdW5oaWRlVGV4dEluc3RhbmNlKF9pbnN0YW5jZTMsIG5vZGUubWVtb2l6ZWRQcm9wcyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoKG5vZGUudGFnID09PSBPZmZzY3JlZW5Db21wb25lbnQgfHwgbm9kZS50YWcgPT09IExlZ2FjeUhpZGRlbkNvbXBvbmVudCkgJiYgbm9kZS5tZW1vaXplZFN0YXRlICE9PSBudWxsICYmIG5vZGUgIT09IGZpbmlzaGVkV29yaykgOyBlbHNlIGlmIChub2RlLmNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgICAgbm9kZSA9IG5vZGUuY2hpbGQ7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZSA9PT0gZmluaXNoZWRXb3JrKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKG5vZGUuc2libGluZyA9PT0gbnVsbCkge1xuICAgICAgICBpZiAobm9kZS5yZXR1cm4gPT09IG51bGwgfHwgbm9kZS5yZXR1cm4gPT09IGZpbmlzaGVkV29yaykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICAgIH1cblxuICAgICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0QXR0YWNoUmVmKGZpbmlzaGVkV29yaykge1xuICB2YXIgcmVmID0gZmluaXNoZWRXb3JrLnJlZjtcblxuICBpZiAocmVmICE9PSBudWxsKSB7XG4gICAgdmFyIGluc3RhbmNlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcbiAgICB2YXIgaW5zdGFuY2VUb1VzZTtcblxuICAgIHN3aXRjaCAoZmluaXNoZWRXb3JrLnRhZykge1xuICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICBpbnN0YW5jZVRvVXNlID0gZ2V0UHVibGljSW5zdGFuY2UoaW5zdGFuY2UpO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaW5zdGFuY2VUb1VzZSA9IGluc3RhbmNlO1xuICAgIH0gLy8gTW92ZWQgb3V0c2lkZSB0byBlbnN1cmUgRENFIHdvcmtzIHdpdGggdGhpcyBmbGFnXG5cbiAgICBpZiAodHlwZW9mIHJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmVmKGluc3RhbmNlVG9Vc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB7XG4gICAgICAgIGlmICghcmVmLmhhc093blByb3BlcnR5KCdjdXJyZW50JykpIHtcbiAgICAgICAgICBlcnJvcignVW5leHBlY3RlZCByZWYgb2JqZWN0IHByb3ZpZGVkIGZvciAlcy4gJyArICdVc2UgZWl0aGVyIGEgcmVmLXNldHRlciBmdW5jdGlvbiBvciBSZWFjdC5jcmVhdGVSZWYoKS4nLCBnZXRDb21wb25lbnROYW1lKGZpbmlzaGVkV29yay50eXBlKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmVmLmN1cnJlbnQgPSBpbnN0YW5jZVRvVXNlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXREZXRhY2hSZWYoY3VycmVudCkge1xuICB2YXIgY3VycmVudFJlZiA9IGN1cnJlbnQucmVmO1xuXG4gIGlmIChjdXJyZW50UmVmICE9PSBudWxsKSB7XG4gICAgaWYgKHR5cGVvZiBjdXJyZW50UmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjdXJyZW50UmVmKG51bGwpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50UmVmLmN1cnJlbnQgPSBudWxsO1xuICAgIH1cbiAgfVxufSAvLyBVc2VyLW9yaWdpbmF0aW5nIGVycm9ycyAobGlmZWN5Y2xlcyBhbmQgcmVmcykgc2hvdWxkIG5vdCBpbnRlcnJ1cHRcbi8vIGRlbGV0aW9uLCBzbyBkb24ndCBsZXQgdGhlbSB0aHJvdy4gSG9zdC1vcmlnaW5hdGluZyBlcnJvcnMgc2hvdWxkXG4vLyBpbnRlcnJ1cHQgZGVsZXRpb24sIHNvIGl0J3Mgb2theVxuXG5cbmZ1bmN0aW9uIGNvbW1pdFVubW91bnQoZmluaXNoZWRSb290LCBjdXJyZW50LCByZW5kZXJQcmlvcml0eUxldmVsKSB7XG4gIG9uQ29tbWl0VW5tb3VudChjdXJyZW50KTtcblxuICBzd2l0Y2ggKGN1cnJlbnQudGFnKSB7XG4gICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgY2FzZSBNZW1vQ29tcG9uZW50OlxuICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICBjYXNlIEJsb2NrOlxuICAgICAge1xuICAgICAgICB2YXIgdXBkYXRlUXVldWUgPSBjdXJyZW50LnVwZGF0ZVF1ZXVlO1xuXG4gICAgICAgIGlmICh1cGRhdGVRdWV1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHZhciBsYXN0RWZmZWN0ID0gdXBkYXRlUXVldWUubGFzdEVmZmVjdDtcblxuICAgICAgICAgIGlmIChsYXN0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgZmlyc3RFZmZlY3QgPSBsYXN0RWZmZWN0Lm5leHQ7XG4gICAgICAgICAgICB2YXIgZWZmZWN0ID0gZmlyc3RFZmZlY3Q7XG5cbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgdmFyIF9lZmZlY3QyID0gZWZmZWN0LFxuICAgICAgICAgICAgICAgICAgZGVzdHJveSA9IF9lZmZlY3QyLmRlc3Ryb3ksXG4gICAgICAgICAgICAgICAgICB0YWcgPSBfZWZmZWN0Mi50YWc7XG5cbiAgICAgICAgICAgICAgaWYgKGRlc3Ryb3kgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGlmICgodGFnICYgUGFzc2l2ZSQxKSAhPT0gTm9GbGFncyQxKSB7XG4gICAgICAgICAgICAgICAgICBlbnF1ZXVlUGVuZGluZ1Bhc3NpdmVIb29rRWZmZWN0VW5tb3VudChjdXJyZW50LCBlZmZlY3QpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHNhZmVseUNhbGxEZXN0cm95KGN1cnJlbnQsIGRlc3Ryb3kpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGVmZmVjdCA9IGVmZmVjdC5uZXh0O1xuICAgICAgICAgICAgfSB3aGlsZSAoZWZmZWN0ICE9PSBmaXJzdEVmZmVjdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgc2FmZWx5RGV0YWNoUmVmKGN1cnJlbnQpO1xuICAgICAgICB2YXIgaW5zdGFuY2UgPSBjdXJyZW50LnN0YXRlTm9kZTtcblxuICAgICAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVbm1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgc2FmZWx5Q2FsbENvbXBvbmVudFdpbGxVbm1vdW50KGN1cnJlbnQsIGluc3RhbmNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgc2FmZWx5RGV0YWNoUmVmKGN1cnJlbnQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgICB7XG4gICAgICAgIC8vIFRPRE86IHRoaXMgaXMgcmVjdXJzaXZlLlxuICAgICAgICAvLyBXZSBhcmUgYWxzbyBub3QgdXNpbmcgdGhpcyBwYXJlbnQgYmVjYXVzZVxuICAgICAgICAvLyB0aGUgcG9ydGFsIHdpbGwgZ2V0IHB1c2hlZCBpbW1lZGlhdGVseS5cbiAgICAgICAge1xuICAgICAgICAgIHVubW91bnRIb3N0Q29tcG9uZW50cyhmaW5pc2hlZFJvb3QsIGN1cnJlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBGdW5kYW1lbnRhbENvbXBvbmVudDpcbiAgICAgIHtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIERlaHlkcmF0ZWRGcmFnbWVudDpcbiAgICAgIHtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIFNjb3BlQ29tcG9uZW50OlxuICAgICAge1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXROZXN0ZWRVbm1vdW50cyhmaW5pc2hlZFJvb3QsIHJvb3QsIHJlbmRlclByaW9yaXR5TGV2ZWwpIHtcbiAgLy8gV2hpbGUgd2UncmUgaW5zaWRlIGEgcmVtb3ZlZCBob3N0IG5vZGUgd2UgZG9uJ3Qgd2FudCB0byBjYWxsXG4gIC8vIHJlbW92ZUNoaWxkIG9uIHRoZSBpbm5lciBub2RlcyBiZWNhdXNlIHRoZXkncmUgcmVtb3ZlZCBieSB0aGUgdG9wXG4gIC8vIGNhbGwgYW55d2F5LiBXZSBhbHNvIHdhbnQgdG8gY2FsbCBjb21wb25lbnRXaWxsVW5tb3VudCBvbiBhbGxcbiAgLy8gY29tcG9zaXRlcyBiZWZvcmUgdGhpcyBob3N0IG5vZGUgaXMgcmVtb3ZlZCBmcm9tIHRoZSB0cmVlLiBUaGVyZWZvcmVcbiAgLy8gd2UgZG8gYW4gaW5uZXIgbG9vcCB3aGlsZSB3ZSdyZSBzdGlsbCBpbnNpZGUgdGhlIGhvc3Qgbm9kZS5cbiAgdmFyIG5vZGUgPSByb290O1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29tbWl0VW5tb3VudChmaW5pc2hlZFJvb3QsIG5vZGUpOyAvLyBWaXNpdCBjaGlsZHJlbiBiZWNhdXNlIHRoZXkgbWF5IGNvbnRhaW4gbW9yZSBjb21wb3NpdGUgb3IgaG9zdCBub2Rlcy5cbiAgICAvLyBTa2lwIHBvcnRhbHMgYmVjYXVzZSBjb21taXRVbm1vdW50KCkgY3VycmVudGx5IHZpc2l0cyB0aGVtIHJlY3Vyc2l2ZWx5LlxuXG4gICAgaWYgKG5vZGUuY2hpbGQgIT09IG51bGwgJiYgKCAvLyBJZiB3ZSB1c2UgbXV0YXRpb24gd2UgZHJpbGwgZG93biBpbnRvIHBvcnRhbHMgdXNpbmcgY29tbWl0VW5tb3VudCBhYm92ZS5cbiAgICAvLyBJZiB3ZSBkb24ndCB1c2UgbXV0YXRpb24gd2UgZHJpbGwgZG93biBpbnRvIHBvcnRhbHMgaGVyZSBpbnN0ZWFkLlxuICAgICBub2RlLnRhZyAhPT0gSG9zdFBvcnRhbCkpIHtcbiAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUgPT09IHJvb3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3aGlsZSAobm9kZS5zaWJsaW5nID09PSBudWxsKSB7XG4gICAgICBpZiAobm9kZS5yZXR1cm4gPT09IG51bGwgfHwgbm9kZS5yZXR1cm4gPT09IHJvb3QpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfVxuXG4gICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGV0YWNoRmliZXJNdXRhdGlvbihmaWJlcikge1xuICAvLyBDdXQgb2ZmIHRoZSByZXR1cm4gcG9pbnRlcnMgdG8gZGlzY29ubmVjdCBpdCBmcm9tIHRoZSB0cmVlLiBJZGVhbGx5LCB3ZVxuICAvLyBzaG91bGQgY2xlYXIgdGhlIGNoaWxkIHBvaW50ZXIgb2YgdGhlIHBhcmVudCBhbHRlcm5hdGUgdG8gbGV0IHRoaXNcbiAgLy8gZ2V0IEdDOmVkIGJ1dCB3ZSBkb24ndCBrbm93IHdoaWNoIGZvciBzdXJlIHdoaWNoIHBhcmVudCBpcyB0aGUgY3VycmVudFxuICAvLyBvbmUgc28gd2UnbGwgc2V0dGxlIGZvciBHQzppbmcgdGhlIHN1YnRyZWUgb2YgdGhpcyBjaGlsZC4gVGhpcyBjaGlsZFxuICAvLyBpdHNlbGYgd2lsbCBiZSBHQzplZCB3aGVuIHRoZSBwYXJlbnQgdXBkYXRlcyB0aGUgbmV4dCB0aW1lLlxuICAvLyBOb3RlOiB3ZSBjYW5ub3QgbnVsbCBvdXQgc2libGluZyBoZXJlLCBvdGhlcndpc2UgaXQgY2FuIGNhdXNlIGlzc3Vlc1xuICAvLyB3aXRoIGZpbmRET01Ob2RlIGFuZCBob3cgaXQgcmVxdWlyZXMgdGhlIHNpYmxpbmcgZmllbGQgdG8gY2Fycnkgb3V0XG4gIC8vIHRyYXZlcnNhbCBpbiBhIGxhdGVyIGVmZmVjdC4gU2VlIFBSICMxNjgyMC4gV2Ugbm93IGNsZWFyIHRoZSBzaWJsaW5nXG4gIC8vIGZpZWxkIGFmdGVyIGVmZmVjdHMsIHNlZTogZGV0YWNoRmliZXJBZnRlckVmZmVjdHMuXG4gIC8vXG4gIC8vIERvbid0IGRpc2Nvbm5lY3Qgc3RhdGVOb2RlIG5vdzsgaXQgd2lsbCBiZSBkZXRhY2hlZCBpbiBkZXRhY2hGaWJlckFmdGVyRWZmZWN0cy5cbiAgLy8gSXQgbWF5IGJlIHJlcXVpcmVkIGlmIHRoZSBjdXJyZW50IGNvbXBvbmVudCBpcyBhbiBlcnJvciBib3VuZGFyeSxcbiAgLy8gYW5kIG9uZSBvZiBpdHMgZGVzY2VuZGFudHMgdGhyb3dzIHdoaWxlIHVubW91bnRpbmcgYSBwYXNzaXZlIGVmZmVjdC5cbiAgZmliZXIuYWx0ZXJuYXRlID0gbnVsbDtcbiAgZmliZXIuY2hpbGQgPSBudWxsO1xuICBmaWJlci5kZXBlbmRlbmNpZXMgPSBudWxsO1xuICBmaWJlci5maXJzdEVmZmVjdCA9IG51bGw7XG4gIGZpYmVyLmxhc3RFZmZlY3QgPSBudWxsO1xuICBmaWJlci5tZW1vaXplZFByb3BzID0gbnVsbDtcbiAgZmliZXIubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gIGZpYmVyLnBlbmRpbmdQcm9wcyA9IG51bGw7XG4gIGZpYmVyLnJldHVybiA9IG51bGw7XG4gIGZpYmVyLnVwZGF0ZVF1ZXVlID0gbnVsbDtcblxuICB7XG4gICAgZmliZXIuX2RlYnVnT3duZXIgPSBudWxsO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldEhvc3RQYXJlbnRGaWJlcihmaWJlcikge1xuICB2YXIgcGFyZW50ID0gZmliZXIucmV0dXJuO1xuXG4gIHdoaWxlIChwYXJlbnQgIT09IG51bGwpIHtcbiAgICBpZiAoaXNIb3N0UGFyZW50KHBhcmVudCkpIHtcbiAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgfVxuXG4gICAgcGFyZW50ID0gcGFyZW50LnJldHVybjtcbiAgfVxuXG4gIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJFeHBlY3RlZCB0byBmaW5kIGEgaG9zdCBwYXJlbnQuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNIb3N0UGFyZW50KGZpYmVyKSB7XG4gIHJldHVybiBmaWJlci50YWcgPT09IEhvc3RDb21wb25lbnQgfHwgZmliZXIudGFnID09PSBIb3N0Um9vdCB8fCBmaWJlci50YWcgPT09IEhvc3RQb3J0YWw7XG59XG5cbmZ1bmN0aW9uIGdldEhvc3RTaWJsaW5nKGZpYmVyKSB7XG4gIC8vIFdlJ3JlIGdvaW5nIHRvIHNlYXJjaCBmb3J3YXJkIGludG8gdGhlIHRyZWUgdW50aWwgd2UgZmluZCBhIHNpYmxpbmcgaG9zdFxuICAvLyBub2RlLiBVbmZvcnR1bmF0ZWx5LCBpZiBtdWx0aXBsZSBpbnNlcnRpb25zIGFyZSBkb25lIGluIGEgcm93IHdlIGhhdmUgdG9cbiAgLy8gc2VhcmNoIHBhc3QgdGhlbS4gVGhpcyBsZWFkcyB0byBleHBvbmVudGlhbCBzZWFyY2ggZm9yIHRoZSBuZXh0IHNpYmxpbmcuXG4gIC8vIFRPRE86IEZpbmQgYSBtb3JlIGVmZmljaWVudCB3YXkgdG8gZG8gdGhpcy5cbiAgdmFyIG5vZGUgPSBmaWJlcjtcblxuICBzaWJsaW5nczogd2hpbGUgKHRydWUpIHtcbiAgICAvLyBJZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZywgbGV0J3MgdHJ5IHRoZSBuZXh0IHNpYmxpbmcuXG4gICAgd2hpbGUgKG5vZGUuc2libGluZyA9PT0gbnVsbCkge1xuICAgICAgaWYgKG5vZGUucmV0dXJuID09PSBudWxsIHx8IGlzSG9zdFBhcmVudChub2RlLnJldHVybikpIHtcbiAgICAgICAgLy8gSWYgd2UgcG9wIG91dCBvZiB0aGUgcm9vdCBvciBoaXQgdGhlIHBhcmVudCB0aGUgZmliZXIgd2UgYXJlIHRoZVxuICAgICAgICAvLyBsYXN0IHNpYmxpbmcuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfVxuXG4gICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG5cbiAgICB3aGlsZSAobm9kZS50YWcgIT09IEhvc3RDb21wb25lbnQgJiYgbm9kZS50YWcgIT09IEhvc3RUZXh0ICYmIG5vZGUudGFnICE9PSBEZWh5ZHJhdGVkRnJhZ21lbnQpIHtcbiAgICAgIC8vIElmIGl0IGlzIG5vdCBob3N0IG5vZGUgYW5kLCB3ZSBtaWdodCBoYXZlIGEgaG9zdCBub2RlIGluc2lkZSBpdC5cbiAgICAgIC8vIFRyeSB0byBzZWFyY2ggZG93biB1bnRpbCB3ZSBmaW5kIG9uZS5cbiAgICAgIGlmIChub2RlLmZsYWdzICYgUGxhY2VtZW50KSB7XG4gICAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYSBjaGlsZCwgdHJ5IHRoZSBzaWJsaW5ncyBpbnN0ZWFkLlxuICAgICAgICBjb250aW51ZSBzaWJsaW5ncztcbiAgICAgIH0gLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhIGNoaWxkLCB0cnkgdGhlIHNpYmxpbmdzIGluc3RlYWQuXG4gICAgICAvLyBXZSBhbHNvIHNraXAgcG9ydGFscyBiZWNhdXNlIHRoZXkgYXJlIG5vdCBwYXJ0IG9mIHRoaXMgaG9zdCB0cmVlLlxuXG5cbiAgICAgIGlmIChub2RlLmNoaWxkID09PSBudWxsIHx8IG5vZGUudGFnID09PSBIb3N0UG9ydGFsKSB7XG4gICAgICAgIGNvbnRpbnVlIHNpYmxpbmdzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZS5jaGlsZC5yZXR1cm4gPSBub2RlO1xuICAgICAgICBub2RlID0gbm9kZS5jaGlsZDtcbiAgICAgIH1cbiAgICB9IC8vIENoZWNrIGlmIHRoaXMgaG9zdCBub2RlIGlzIHN0YWJsZSBvciBhYm91dCB0byBiZSBwbGFjZWQuXG5cblxuICAgIGlmICghKG5vZGUuZmxhZ3MgJiBQbGFjZW1lbnQpKSB7XG4gICAgICAvLyBGb3VuZCBpdCFcbiAgICAgIHJldHVybiBub2RlLnN0YXRlTm9kZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0UGxhY2VtZW50KGZpbmlzaGVkV29yaykge1xuXG5cbiAgdmFyIHBhcmVudEZpYmVyID0gZ2V0SG9zdFBhcmVudEZpYmVyKGZpbmlzaGVkV29yayk7IC8vIE5vdGU6IHRoZXNlIHR3byB2YXJpYWJsZXMgKm11c3QqIGFsd2F5cyBiZSB1cGRhdGVkIHRvZ2V0aGVyLlxuXG4gIHZhciBwYXJlbnQ7XG4gIHZhciBpc0NvbnRhaW5lcjtcbiAgdmFyIHBhcmVudFN0YXRlTm9kZSA9IHBhcmVudEZpYmVyLnN0YXRlTm9kZTtcblxuICBzd2l0Y2ggKHBhcmVudEZpYmVyLnRhZykge1xuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgIHBhcmVudCA9IHBhcmVudFN0YXRlTm9kZTtcbiAgICAgIGlzQ29udGFpbmVyID0gZmFsc2U7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICBwYXJlbnQgPSBwYXJlbnRTdGF0ZU5vZGUuY29udGFpbmVySW5mbztcbiAgICAgIGlzQ29udGFpbmVyID0gdHJ1ZTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAgcGFyZW50ID0gcGFyZW50U3RhdGVOb2RlLmNvbnRhaW5lckluZm87XG4gICAgICBpc0NvbnRhaW5lciA9IHRydWU7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgRnVuZGFtZW50YWxDb21wb25lbnQ6XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUtbm8tZmFsbHRocm91Z2hcblxuICAgIGRlZmF1bHQ6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJJbnZhbGlkIGhvc3QgcGFyZW50IGZpYmVyLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICB9XG5cbiAgaWYgKHBhcmVudEZpYmVyLmZsYWdzICYgQ29udGVudFJlc2V0KSB7XG4gICAgLy8gUmVzZXQgdGhlIHRleHQgY29udGVudCBvZiB0aGUgcGFyZW50IGJlZm9yZSBkb2luZyBhbnkgaW5zZXJ0aW9uc1xuICAgIHJlc2V0VGV4dENvbnRlbnQocGFyZW50KTsgLy8gQ2xlYXIgQ29udGVudFJlc2V0IGZyb20gdGhlIGVmZmVjdCB0YWdcblxuICAgIHBhcmVudEZpYmVyLmZsYWdzICY9IH5Db250ZW50UmVzZXQ7XG4gIH1cblxuICB2YXIgYmVmb3JlID0gZ2V0SG9zdFNpYmxpbmcoZmluaXNoZWRXb3JrKTsgLy8gV2Ugb25seSBoYXZlIHRoZSB0b3AgRmliZXIgdGhhdCB3YXMgaW5zZXJ0ZWQgYnV0IHdlIG5lZWQgdG8gcmVjdXJzZSBkb3duIGl0c1xuICAvLyBjaGlsZHJlbiB0byBmaW5kIGFsbCB0aGUgdGVybWluYWwgbm9kZXMuXG5cbiAgaWYgKGlzQ29udGFpbmVyKSB7XG4gICAgaW5zZXJ0T3JBcHBlbmRQbGFjZW1lbnROb2RlSW50b0NvbnRhaW5lcihmaW5pc2hlZFdvcmssIGJlZm9yZSwgcGFyZW50KTtcbiAgfSBlbHNlIHtcbiAgICBpbnNlcnRPckFwcGVuZFBsYWNlbWVudE5vZGUoZmluaXNoZWRXb3JrLCBiZWZvcmUsIHBhcmVudCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5zZXJ0T3JBcHBlbmRQbGFjZW1lbnROb2RlSW50b0NvbnRhaW5lcihub2RlLCBiZWZvcmUsIHBhcmVudCkge1xuICB2YXIgdGFnID0gbm9kZS50YWc7XG4gIHZhciBpc0hvc3QgPSB0YWcgPT09IEhvc3RDb21wb25lbnQgfHwgdGFnID09PSBIb3N0VGV4dDtcblxuICBpZiAoaXNIb3N0IHx8IGVuYWJsZUZ1bmRhbWVudGFsQVBJICkge1xuICAgIHZhciBzdGF0ZU5vZGUgPSBpc0hvc3QgPyBub2RlLnN0YXRlTm9kZSA6IG5vZGUuc3RhdGVOb2RlLmluc3RhbmNlO1xuXG4gICAgaWYgKGJlZm9yZSkge1xuICAgICAgaW5zZXJ0SW5Db250YWluZXJCZWZvcmUocGFyZW50LCBzdGF0ZU5vZGUsIGJlZm9yZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFwcGVuZENoaWxkVG9Db250YWluZXIocGFyZW50LCBzdGF0ZU5vZGUpO1xuICAgIH1cbiAgfSBlbHNlIGlmICh0YWcgPT09IEhvc3RQb3J0YWwpIDsgZWxzZSB7XG4gICAgdmFyIGNoaWxkID0gbm9kZS5jaGlsZDtcblxuICAgIGlmIChjaGlsZCAhPT0gbnVsbCkge1xuICAgICAgaW5zZXJ0T3JBcHBlbmRQbGFjZW1lbnROb2RlSW50b0NvbnRhaW5lcihjaGlsZCwgYmVmb3JlLCBwYXJlbnQpO1xuICAgICAgdmFyIHNpYmxpbmcgPSBjaGlsZC5zaWJsaW5nO1xuXG4gICAgICB3aGlsZSAoc2libGluZyAhPT0gbnVsbCkge1xuICAgICAgICBpbnNlcnRPckFwcGVuZFBsYWNlbWVudE5vZGVJbnRvQ29udGFpbmVyKHNpYmxpbmcsIGJlZm9yZSwgcGFyZW50KTtcbiAgICAgICAgc2libGluZyA9IHNpYmxpbmcuc2libGluZztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5zZXJ0T3JBcHBlbmRQbGFjZW1lbnROb2RlKG5vZGUsIGJlZm9yZSwgcGFyZW50KSB7XG4gIHZhciB0YWcgPSBub2RlLnRhZztcbiAgdmFyIGlzSG9zdCA9IHRhZyA9PT0gSG9zdENvbXBvbmVudCB8fCB0YWcgPT09IEhvc3RUZXh0O1xuXG4gIGlmIChpc0hvc3QgfHwgZW5hYmxlRnVuZGFtZW50YWxBUEkgKSB7XG4gICAgdmFyIHN0YXRlTm9kZSA9IGlzSG9zdCA/IG5vZGUuc3RhdGVOb2RlIDogbm9kZS5zdGF0ZU5vZGUuaW5zdGFuY2U7XG5cbiAgICBpZiAoYmVmb3JlKSB7XG4gICAgICBpbnNlcnRCZWZvcmUocGFyZW50LCBzdGF0ZU5vZGUsIGJlZm9yZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFwcGVuZENoaWxkKHBhcmVudCwgc3RhdGVOb2RlKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodGFnID09PSBIb3N0UG9ydGFsKSA7IGVsc2Uge1xuICAgIHZhciBjaGlsZCA9IG5vZGUuY2hpbGQ7XG5cbiAgICBpZiAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgIGluc2VydE9yQXBwZW5kUGxhY2VtZW50Tm9kZShjaGlsZCwgYmVmb3JlLCBwYXJlbnQpO1xuICAgICAgdmFyIHNpYmxpbmcgPSBjaGlsZC5zaWJsaW5nO1xuXG4gICAgICB3aGlsZSAoc2libGluZyAhPT0gbnVsbCkge1xuICAgICAgICBpbnNlcnRPckFwcGVuZFBsYWNlbWVudE5vZGUoc2libGluZywgYmVmb3JlLCBwYXJlbnQpO1xuICAgICAgICBzaWJsaW5nID0gc2libGluZy5zaWJsaW5nO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB1bm1vdW50SG9zdENvbXBvbmVudHMoZmluaXNoZWRSb290LCBjdXJyZW50LCByZW5kZXJQcmlvcml0eUxldmVsKSB7XG4gIC8vIFdlIG9ubHkgaGF2ZSB0aGUgdG9wIEZpYmVyIHRoYXQgd2FzIGRlbGV0ZWQgYnV0IHdlIG5lZWQgdG8gcmVjdXJzZSBkb3duIGl0c1xuICAvLyBjaGlsZHJlbiB0byBmaW5kIGFsbCB0aGUgdGVybWluYWwgbm9kZXMuXG4gIHZhciBub2RlID0gY3VycmVudDsgLy8gRWFjaCBpdGVyYXRpb24sIGN1cnJlbnRQYXJlbnQgaXMgcG9wdWxhdGVkIHdpdGggbm9kZSdzIGhvc3QgcGFyZW50IGlmIG5vdFxuICAvLyBjdXJyZW50UGFyZW50SXNWYWxpZC5cblxuICB2YXIgY3VycmVudFBhcmVudElzVmFsaWQgPSBmYWxzZTsgLy8gTm90ZTogdGhlc2UgdHdvIHZhcmlhYmxlcyAqbXVzdCogYWx3YXlzIGJlIHVwZGF0ZWQgdG9nZXRoZXIuXG5cbiAgdmFyIGN1cnJlbnRQYXJlbnQ7XG4gIHZhciBjdXJyZW50UGFyZW50SXNDb250YWluZXI7XG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBpZiAoIWN1cnJlbnRQYXJlbnRJc1ZhbGlkKSB7XG4gICAgICB2YXIgcGFyZW50ID0gbm9kZS5yZXR1cm47XG5cbiAgICAgIGZpbmRQYXJlbnQ6IHdoaWxlICh0cnVlKSB7XG4gICAgICAgIGlmICghKHBhcmVudCAhPT0gbnVsbCkpIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvciggXCJFeHBlY3RlZCB0byBmaW5kIGEgaG9zdCBwYXJlbnQuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcGFyZW50U3RhdGVOb2RlID0gcGFyZW50LnN0YXRlTm9kZTtcblxuICAgICAgICBzd2l0Y2ggKHBhcmVudC50YWcpIHtcbiAgICAgICAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICAgICAgICBjdXJyZW50UGFyZW50ID0gcGFyZW50U3RhdGVOb2RlO1xuICAgICAgICAgICAgY3VycmVudFBhcmVudElzQ29udGFpbmVyID0gZmFsc2U7XG4gICAgICAgICAgICBicmVhayBmaW5kUGFyZW50O1xuXG4gICAgICAgICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgICAgICAgIGN1cnJlbnRQYXJlbnQgPSBwYXJlbnRTdGF0ZU5vZGUuY29udGFpbmVySW5mbztcbiAgICAgICAgICAgIGN1cnJlbnRQYXJlbnRJc0NvbnRhaW5lciA9IHRydWU7XG4gICAgICAgICAgICBicmVhayBmaW5kUGFyZW50O1xuXG4gICAgICAgICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAgICAgICAgY3VycmVudFBhcmVudCA9IHBhcmVudFN0YXRlTm9kZS5jb250YWluZXJJbmZvO1xuICAgICAgICAgICAgY3VycmVudFBhcmVudElzQ29udGFpbmVyID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrIGZpbmRQYXJlbnQ7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIHBhcmVudCA9IHBhcmVudC5yZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGN1cnJlbnRQYXJlbnRJc1ZhbGlkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAobm9kZS50YWcgPT09IEhvc3RDb21wb25lbnQgfHwgbm9kZS50YWcgPT09IEhvc3RUZXh0KSB7XG4gICAgICBjb21taXROZXN0ZWRVbm1vdW50cyhmaW5pc2hlZFJvb3QsIG5vZGUpOyAvLyBBZnRlciBhbGwgdGhlIGNoaWxkcmVuIGhhdmUgdW5tb3VudGVkLCBpdCBpcyBub3cgc2FmZSB0byByZW1vdmUgdGhlXG4gICAgICAvLyBub2RlIGZyb20gdGhlIHRyZWUuXG5cbiAgICAgIGlmIChjdXJyZW50UGFyZW50SXNDb250YWluZXIpIHtcbiAgICAgICAgcmVtb3ZlQ2hpbGRGcm9tQ29udGFpbmVyKGN1cnJlbnRQYXJlbnQsIG5vZGUuc3RhdGVOb2RlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlbW92ZUNoaWxkKGN1cnJlbnRQYXJlbnQsIG5vZGUuc3RhdGVOb2RlKTtcbiAgICAgIH0gLy8gRG9uJ3QgdmlzaXQgY2hpbGRyZW4gYmVjYXVzZSB3ZSBhbHJlYWR5IHZpc2l0ZWQgdGhlbS5cblxuICAgIH0gZWxzZSBpZiAobm9kZS50YWcgPT09IEhvc3RQb3J0YWwpIHtcbiAgICAgIGlmIChub2RlLmNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgIC8vIFdoZW4gd2UgZ28gaW50byBhIHBvcnRhbCwgaXQgYmVjb21lcyB0aGUgcGFyZW50IHRvIHJlbW92ZSBmcm9tLlxuICAgICAgICAvLyBXZSB3aWxsIHJlYXNzaWduIGl0IGJhY2sgd2hlbiB3ZSBwb3AgdGhlIHBvcnRhbCBvbiB0aGUgd2F5IHVwLlxuICAgICAgICBjdXJyZW50UGFyZW50ID0gbm9kZS5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztcbiAgICAgICAgY3VycmVudFBhcmVudElzQ29udGFpbmVyID0gdHJ1ZTsgLy8gVmlzaXQgY2hpbGRyZW4gYmVjYXVzZSBwb3J0YWxzIG1pZ2h0IGNvbnRhaW4gaG9zdCBjb21wb25lbnRzLlxuXG4gICAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgICAgbm9kZSA9IG5vZGUuY2hpbGQ7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb21taXRVbm1vdW50KGZpbmlzaGVkUm9vdCwgbm9kZSk7IC8vIFZpc2l0IGNoaWxkcmVuIGJlY2F1c2Ugd2UgbWF5IGZpbmQgbW9yZSBob3N0IGNvbXBvbmVudHMgYmVsb3cuXG5cbiAgICAgIGlmIChub2RlLmNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgICAgbm9kZSA9IG5vZGUuY2hpbGQ7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChub2RlID09PSBjdXJyZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgd2hpbGUgKG5vZGUuc2libGluZyA9PT0gbnVsbCkge1xuICAgICAgaWYgKG5vZGUucmV0dXJuID09PSBudWxsIHx8IG5vZGUucmV0dXJuID09PSBjdXJyZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuXG4gICAgICBpZiAobm9kZS50YWcgPT09IEhvc3RQb3J0YWwpIHtcbiAgICAgICAgLy8gV2hlbiB3ZSBnbyBvdXQgb2YgdGhlIHBvcnRhbCwgd2UgbmVlZCB0byByZXN0b3JlIHRoZSBwYXJlbnQuXG4gICAgICAgIC8vIFNpbmNlIHdlIGRvbid0IGtlZXAgYSBzdGFjayBvZiB0aGVtLCB3ZSB3aWxsIHNlYXJjaCBmb3IgaXQuXG4gICAgICAgIGN1cnJlbnRQYXJlbnRJc1ZhbGlkID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0RGVsZXRpb24oZmluaXNoZWRSb290LCBjdXJyZW50LCByZW5kZXJQcmlvcml0eUxldmVsKSB7XG4gIHtcbiAgICAvLyBSZWN1cnNpdmVseSBkZWxldGUgYWxsIGhvc3Qgbm9kZXMgZnJvbSB0aGUgcGFyZW50LlxuICAgIC8vIERldGFjaCByZWZzIGFuZCBjYWxsIGNvbXBvbmVudFdpbGxVbm1vdW50KCkgb24gdGhlIHdob2xlIHN1YnRyZWUuXG4gICAgdW5tb3VudEhvc3RDb21wb25lbnRzKGZpbmlzaGVkUm9vdCwgY3VycmVudCk7XG4gIH1cblxuICB2YXIgYWx0ZXJuYXRlID0gY3VycmVudC5hbHRlcm5hdGU7XG4gIGRldGFjaEZpYmVyTXV0YXRpb24oY3VycmVudCk7XG5cbiAgaWYgKGFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgIGRldGFjaEZpYmVyTXV0YXRpb24oYWx0ZXJuYXRlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRXb3JrKGN1cnJlbnQsIGZpbmlzaGVkV29yaykge1xuXG4gIHN3aXRjaCAoZmluaXNoZWRXb3JrLnRhZykge1xuICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgIGNhc2UgTWVtb0NvbXBvbmVudDpcbiAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgY2FzZSBCbG9jazpcbiAgICAgIHtcbiAgICAgICAgLy8gTGF5b3V0IGVmZmVjdHMgYXJlIGRlc3Ryb3llZCBkdXJpbmcgdGhlIG11dGF0aW9uIHBoYXNlIHNvIHRoYXQgYWxsXG4gICAgICAgIC8vIGRlc3Ryb3kgZnVuY3Rpb25zIGZvciBhbGwgZmliZXJzIGFyZSBjYWxsZWQgYmVmb3JlIGFueSBjcmVhdGUgZnVuY3Rpb25zLlxuICAgICAgICAvLyBUaGlzIHByZXZlbnRzIHNpYmxpbmcgY29tcG9uZW50IGVmZmVjdHMgZnJvbSBpbnRlcmZlcmluZyB3aXRoIGVhY2ggb3RoZXIsXG4gICAgICAgIC8vIGUuZy4gYSBkZXN0cm95IGZ1bmN0aW9uIGluIG9uZSBjb21wb25lbnQgc2hvdWxkIG5ldmVyIG92ZXJyaWRlIGEgcmVmIHNldFxuICAgICAgICAvLyBieSBhIGNyZWF0ZSBmdW5jdGlvbiBpbiBhbm90aGVyIGNvbXBvbmVudCBkdXJpbmcgdGhlIHNhbWUgY29tbWl0LlxuICAgICAgICB7XG4gICAgICAgICAgY29tbWl0SG9va0VmZmVjdExpc3RVbm1vdW50KExheW91dCB8IEhhc0VmZmVjdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcblxuICAgICAgICBpZiAoaW5zdGFuY2UgIT0gbnVsbCkge1xuICAgICAgICAgIC8vIENvbW1pdCB0aGUgd29yayBwcmVwYXJlZCBlYXJsaWVyLlxuICAgICAgICAgIHZhciBuZXdQcm9wcyA9IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzOyAvLyBGb3IgaHlkcmF0aW9uIHdlIHJldXNlIHRoZSB1cGRhdGUgcGF0aCBidXQgd2UgdHJlYXQgdGhlIG9sZFByb3BzXG4gICAgICAgICAgLy8gYXMgdGhlIG5ld1Byb3BzLiBUaGUgdXBkYXRlUGF5bG9hZCB3aWxsIGNvbnRhaW4gdGhlIHJlYWwgY2hhbmdlIGluXG4gICAgICAgICAgLy8gdGhpcyBjYXNlLlxuXG4gICAgICAgICAgdmFyIG9sZFByb3BzID0gY3VycmVudCAhPT0gbnVsbCA/IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyA6IG5ld1Byb3BzO1xuICAgICAgICAgIHZhciB0eXBlID0gZmluaXNoZWRXb3JrLnR5cGU7IC8vIFRPRE86IFR5cGUgdGhlIHVwZGF0ZVF1ZXVlIHRvIGJlIHNwZWNpZmljIHRvIGhvc3QgY29tcG9uZW50cy5cblxuICAgICAgICAgIHZhciB1cGRhdGVQYXlsb2FkID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlO1xuICAgICAgICAgIGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZSA9IG51bGw7XG5cbiAgICAgICAgICBpZiAodXBkYXRlUGF5bG9hZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29tbWl0VXBkYXRlKGluc3RhbmNlLCB1cGRhdGVQYXlsb2FkLCB0eXBlLCBvbGRQcm9wcywgbmV3UHJvcHMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFRleHQ6XG4gICAgICB7XG4gICAgICAgIGlmICghKGZpbmlzaGVkV29yay5zdGF0ZU5vZGUgIT09IG51bGwpKSB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiVGhpcyBzaG91bGQgaGF2ZSBhIHRleHQgbm9kZSBpbml0aWFsaXplZC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB0ZXh0SW5zdGFuY2UgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuICAgICAgICB2YXIgbmV3VGV4dCA9IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzOyAvLyBGb3IgaHlkcmF0aW9uIHdlIHJldXNlIHRoZSB1cGRhdGUgcGF0aCBidXQgd2UgdHJlYXQgdGhlIG9sZFByb3BzXG4gICAgICAgIC8vIGFzIHRoZSBuZXdQcm9wcy4gVGhlIHVwZGF0ZVBheWxvYWQgd2lsbCBjb250YWluIHRoZSByZWFsIGNoYW5nZSBpblxuICAgICAgICAvLyB0aGlzIGNhc2UuXG5cbiAgICAgICAgdmFyIG9sZFRleHQgPSBjdXJyZW50ICE9PSBudWxsID8gY3VycmVudC5tZW1vaXplZFByb3BzIDogbmV3VGV4dDtcbiAgICAgICAgY29tbWl0VGV4dFVwZGF0ZSh0ZXh0SW5zdGFuY2UsIG9sZFRleHQsIG5ld1RleHQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RSb290OlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgdmFyIF9yb290ID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcblxuICAgICAgICAgIGlmIChfcm9vdC5oeWRyYXRlKSB7XG4gICAgICAgICAgICAvLyBXZSd2ZSBqdXN0IGh5ZHJhdGVkLiBObyBuZWVkIHRvIGh5ZHJhdGUgYWdhaW4uXG4gICAgICAgICAgICBfcm9vdC5oeWRyYXRlID0gZmFsc2U7XG4gICAgICAgICAgICBjb21taXRIeWRyYXRlZENvbnRhaW5lcihfcm9vdC5jb250YWluZXJJbmZvKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIFByb2ZpbGVyOlxuICAgICAge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBjb21taXRTdXNwZW5zZUNvbXBvbmVudChmaW5pc2hlZFdvcmspO1xuICAgICAgICBhdHRhY2hTdXNwZW5zZVJldHJ5TGlzdGVuZXJzKGZpbmlzaGVkV29yayk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgU3VzcGVuc2VMaXN0Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBhdHRhY2hTdXNwZW5zZVJldHJ5TGlzdGVuZXJzKGZpbmlzaGVkV29yayk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgSW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEZ1bmRhbWVudGFsQ29tcG9uZW50OlxuICAgICAge1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBTY29wZUNvbXBvbmVudDpcbiAgICAgIHtcblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgT2Zmc2NyZWVuQ29tcG9uZW50OlxuICAgIGNhc2UgTGVnYWN5SGlkZGVuQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgbmV3U3RhdGUgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgdmFyIGlzSGlkZGVuID0gbmV3U3RhdGUgIT09IG51bGw7XG4gICAgICAgIGhpZGVPclVuaGlkZUFsbENoaWxkcmVuKGZpbmlzaGVkV29yaywgaXNIaWRkZW4pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gIH1cblxuICB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiVGhpcyB1bml0IG9mIHdvcmsgdGFnIHNob3VsZCBub3QgaGF2ZSBzaWRlLWVmZmVjdHMuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0U3VzcGVuc2VDb21wb25lbnQoZmluaXNoZWRXb3JrKSB7XG4gIHZhciBuZXdTdGF0ZSA9IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlO1xuXG4gIGlmIChuZXdTdGF0ZSAhPT0gbnVsbCkge1xuICAgIG1hcmtDb21taXRUaW1lT2ZGYWxsYmFjaygpO1xuXG4gICAge1xuICAgICAgLy8gSGlkZSB0aGUgT2Zmc2NyZWVuIGNvbXBvbmVudCB0aGF0IGNvbnRhaW5zIHRoZSBwcmltYXJ5IGNoaWxkcmVuLiBUT0RPOlxuICAgICAgLy8gSWRlYWxseSwgdGhpcyBlZmZlY3Qgd291bGQgaGF2ZSBiZWVuIHNjaGVkdWxlZCBvbiB0aGUgT2Zmc2NyZWVuIGZpYmVyXG4gICAgICAvLyBpdHNlbGYuIFRoYXQncyBob3cgdW5oaWRpbmcgd29ya3M6IHRoZSBPZmZzY3JlZW4gY29tcG9uZW50IHNjaGVkdWxlcyBhblxuICAgICAgLy8gZWZmZWN0IG9uIGl0c2VsZi4gSG93ZXZlciwgaW4gdGhpcyBjYXNlLCB0aGUgY29tcG9uZW50IGRpZG4ndCBjb21wbGV0ZSxcbiAgICAgIC8vIHNvIHRoZSBmaWJlciB3YXMgbmV2ZXIgYWRkZWQgdG8gdGhlIGVmZmVjdCBsaXN0IGluIHRoZSBub3JtYWwgcGF0aC4gV2VcbiAgICAgIC8vIGNvdWxkIGhhdmUgYXBwZW5kZWQgaXQgdG8gdGhlIGVmZmVjdCBsaXN0IGluIHRoZSBTdXNwZW5zZSBjb21wb25lbnQnc1xuICAgICAgLy8gc2Vjb25kIHBhc3MsIGJ1dCBkb2luZyBpdCB0aGlzIHdheSBpcyBsZXNzIGNvbXBsaWNhdGVkLiBUaGlzIHdvdWxkIGJlXG4gICAgICAvLyBzaW1wbGVyIGlmIHdlIGdvdCByaWQgb2YgdGhlIGVmZmVjdCBsaXN0IGFuZCB0cmF2ZXJzZWQgdGhlIHRyZWUsIGxpa2VcbiAgICAgIC8vIHdlJ3JlIHBsYW5uaW5nIHRvIGRvLlxuICAgICAgdmFyIHByaW1hcnlDaGlsZFBhcmVudCA9IGZpbmlzaGVkV29yay5jaGlsZDtcbiAgICAgIGhpZGVPclVuaGlkZUFsbENoaWxkcmVuKHByaW1hcnlDaGlsZFBhcmVudCwgdHJ1ZSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdFN1c3BlbnNlSHlkcmF0aW9uQ2FsbGJhY2tzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKSB7XG5cbiAgdmFyIG5ld1N0YXRlID0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGU7XG5cbiAgaWYgKG5ld1N0YXRlID09PSBudWxsKSB7XG4gICAgdmFyIGN1cnJlbnQgPSBmaW5pc2hlZFdvcmsuYWx0ZXJuYXRlO1xuXG4gICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgIHZhciBwcmV2U3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG5cbiAgICAgIGlmIChwcmV2U3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIHN1c3BlbnNlSW5zdGFuY2UgPSBwcmV2U3RhdGUuZGVoeWRyYXRlZDtcblxuICAgICAgICBpZiAoc3VzcGVuc2VJbnN0YW5jZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGNvbW1pdEh5ZHJhdGVkU3VzcGVuc2VJbnN0YW5jZShzdXNwZW5zZUluc3RhbmNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhdHRhY2hTdXNwZW5zZVJldHJ5TGlzdGVuZXJzKGZpbmlzaGVkV29yaykge1xuICAvLyBJZiB0aGlzIGJvdW5kYXJ5IGp1c3QgdGltZWQgb3V0LCB0aGVuIGl0IHdpbGwgaGF2ZSBhIHNldCBvZiB3YWtlYWJsZXMuXG4gIC8vIEZvciBlYWNoIHdha2VhYmxlLCBhdHRhY2ggYSBsaXN0ZW5lciBzbyB0aGF0IHdoZW4gaXQgcmVzb2x2ZXMsIFJlYWN0XG4gIC8vIGF0dGVtcHRzIHRvIHJlLXJlbmRlciB0aGUgYm91bmRhcnkgaW4gdGhlIHByaW1hcnkgKHByZS10aW1lb3V0KSBzdGF0ZS5cbiAgdmFyIHdha2VhYmxlcyA9IGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZTtcblxuICBpZiAod2FrZWFibGVzICE9PSBudWxsKSB7XG4gICAgZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlID0gbnVsbDtcbiAgICB2YXIgcmV0cnlDYWNoZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG5cbiAgICBpZiAocmV0cnlDYWNoZSA9PT0gbnVsbCkge1xuICAgICAgcmV0cnlDYWNoZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGUgPSBuZXcgUG9zc2libHlXZWFrU2V0KCk7XG4gICAgfVxuXG4gICAgd2FrZWFibGVzLmZvckVhY2goZnVuY3Rpb24gKHdha2VhYmxlKSB7XG4gICAgICAvLyBNZW1vaXplIHVzaW5nIHRoZSBib3VuZGFyeSBmaWJlciB0byBwcmV2ZW50IHJlZHVuZGFudCBsaXN0ZW5lcnMuXG4gICAgICB2YXIgcmV0cnkgPSByZXNvbHZlUmV0cnlXYWtlYWJsZS5iaW5kKG51bGwsIGZpbmlzaGVkV29yaywgd2FrZWFibGUpO1xuXG4gICAgICBpZiAoIXJldHJ5Q2FjaGUuaGFzKHdha2VhYmxlKSkge1xuICAgICAgICB7XG4gICAgICAgICAgaWYgKHdha2VhYmxlLl9fcmVhY3REb05vdFRyYWNlSW50ZXJhY3Rpb25zICE9PSB0cnVlKSB7XG4gICAgICAgICAgICByZXRyeSA9IHRyYWNpbmcudW5zdGFibGVfd3JhcChyZXRyeSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0cnlDYWNoZS5hZGQod2FrZWFibGUpO1xuICAgICAgICB3YWtlYWJsZS50aGVuKHJldHJ5LCByZXRyeSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn0gLy8gVGhpcyBmdW5jdGlvbiBkZXRlY3RzIHdoZW4gYSBTdXNwZW5zZSBib3VuZGFyeSBnb2VzIGZyb20gdmlzaWJsZSB0byBoaWRkZW4uXG4vLyBJdCByZXR1cm5zIGZhbHNlIGlmIHRoZSBib3VuZGFyeSBpcyBhbHJlYWR5IGhpZGRlbi5cbi8vIFRPRE86IFVzZSBhbiBlZmZlY3QgdGFnLlxuXG5cbmZ1bmN0aW9uIGlzU3VzcGVuc2VCb3VuZGFyeUJlaW5nSGlkZGVuKGN1cnJlbnQsIGZpbmlzaGVkV29yaykge1xuICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgIHZhciBvbGRTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcblxuICAgIGlmIChvbGRTdGF0ZSA9PT0gbnVsbCB8fCBvbGRTdGF0ZS5kZWh5ZHJhdGVkICE9PSBudWxsKSB7XG4gICAgICB2YXIgbmV3U3RhdGUgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIHJldHVybiBuZXdTdGF0ZSAhPT0gbnVsbCAmJiBuZXdTdGF0ZS5kZWh5ZHJhdGVkID09PSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gY29tbWl0UmVzZXRUZXh0Q29udGVudChjdXJyZW50KSB7XG5cbiAgcmVzZXRUZXh0Q29udGVudChjdXJyZW50LnN0YXRlTm9kZSk7XG59XG5cbnZhciBDT01QT05FTlRfVFlQRSA9IDA7XG52YXIgSEFTX1BTRVVET19DTEFTU19UWVBFID0gMTtcbnZhciBST0xFX1RZUEUgPSAyO1xudmFyIFRFU1RfTkFNRV9UWVBFID0gMztcbnZhciBURVhUX1RZUEUgPSA0O1xuXG5pZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuZm9yKSB7XG4gIHZhciBzeW1ib2xGb3IkMSA9IFN5bWJvbC5mb3I7XG4gIENPTVBPTkVOVF9UWVBFID0gc3ltYm9sRm9yJDEoJ3NlbGVjdG9yLmNvbXBvbmVudCcpO1xuICBIQVNfUFNFVURPX0NMQVNTX1RZUEUgPSBzeW1ib2xGb3IkMSgnc2VsZWN0b3IuaGFzX3BzZXVkb19jbGFzcycpO1xuICBST0xFX1RZUEUgPSBzeW1ib2xGb3IkMSgnc2VsZWN0b3Iucm9sZScpO1xuICBURVNUX05BTUVfVFlQRSA9IHN5bWJvbEZvciQxKCdzZWxlY3Rvci50ZXN0X2lkJyk7XG4gIFRFWFRfVFlQRSA9IHN5bWJvbEZvciQxKCdzZWxlY3Rvci50ZXh0Jyk7XG59XG52YXIgY29tbWl0SG9va3MgPSBbXTtcbmZ1bmN0aW9uIG9uQ29tbWl0Um9vdCQxKCkge1xuICB7XG4gICAgY29tbWl0SG9va3MuZm9yRWFjaChmdW5jdGlvbiAoY29tbWl0SG9vaykge1xuICAgICAgcmV0dXJuIGNvbW1pdEhvb2soKTtcbiAgICB9KTtcbiAgfVxufVxuXG52YXIgY2VpbCA9IE1hdGguY2VpbDtcbnZhciBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDIgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnREaXNwYXRjaGVyLFxuICAgIFJlYWN0Q3VycmVudE93bmVyJDIgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnRPd25lcixcbiAgICBJc1NvbWVSZW5kZXJlckFjdGluZyA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLklzU29tZVJlbmRlcmVyQWN0aW5nO1xudmFyIE5vQ29udGV4dCA9XG4vKiAgICAgICAgICAgICAqL1xuMDtcbnZhciBCYXRjaGVkQ29udGV4dCA9XG4vKiAgICAgICAgICAgICAgICovXG4xO1xudmFyIEV2ZW50Q29udGV4dCA9XG4vKiAgICAgICAgICAgICAgICAgKi9cbjI7XG52YXIgRGlzY3JldGVFdmVudENvbnRleHQgPVxuLyogICAgICAgICAqL1xuNDtcbnZhciBMZWdhY3lVbmJhdGNoZWRDb250ZXh0ID1cbi8qICAgICAgICovXG44O1xudmFyIFJlbmRlckNvbnRleHQgPVxuLyogICAgICAgICAgICAgICAgKi9cbjE2O1xudmFyIENvbW1pdENvbnRleHQgPVxuLyogICAgICAgICAgICAgICAgKi9cbjMyO1xudmFyIFJldHJ5QWZ0ZXJFcnJvciA9XG4vKiAgICAgICAqL1xuNjQ7XG52YXIgUm9vdEluY29tcGxldGUgPSAwO1xudmFyIFJvb3RGYXRhbEVycm9yZWQgPSAxO1xudmFyIFJvb3RFcnJvcmVkID0gMjtcbnZhciBSb290U3VzcGVuZGVkID0gMztcbnZhciBSb290U3VzcGVuZGVkV2l0aERlbGF5ID0gNDtcbnZhciBSb290Q29tcGxldGVkID0gNTsgLy8gRGVzY3JpYmVzIHdoZXJlIHdlIGFyZSBpbiB0aGUgUmVhY3QgZXhlY3V0aW9uIHN0YWNrXG5cbnZhciBleGVjdXRpb25Db250ZXh0ID0gTm9Db250ZXh0OyAvLyBUaGUgcm9vdCB3ZSdyZSB3b3JraW5nIG9uXG5cbnZhciB3b3JrSW5Qcm9ncmVzc1Jvb3QgPSBudWxsOyAvLyBUaGUgZmliZXIgd2UncmUgd29ya2luZyBvblxuXG52YXIgd29ya0luUHJvZ3Jlc3MgPSBudWxsOyAvLyBUaGUgbGFuZXMgd2UncmUgcmVuZGVyaW5nXG5cbnZhciB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyA9IE5vTGFuZXM7IC8vIFN0YWNrIHRoYXQgYWxsb3dzIGNvbXBvbmVudHMgdG8gY2hhbmdlIHRoZSByZW5kZXIgbGFuZXMgZm9yIGl0cyBzdWJ0cmVlXG4vLyBUaGlzIGlzIGEgc3VwZXJzZXQgb2YgdGhlIGxhbmVzIHdlIHN0YXJ0ZWQgd29ya2luZyBvbiBhdCB0aGUgcm9vdC4gVGhlIG9ubHlcbi8vIGNhc2Ugd2hlcmUgaXQncyBkaWZmZXJlbnQgZnJvbSBgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXNgIGlzIHdoZW4gd2Vcbi8vIGVudGVyIGEgc3VidHJlZSB0aGF0IGlzIGhpZGRlbiBhbmQgbmVlZHMgdG8gYmUgdW5oaWRkZW46IFN1c3BlbnNlIGFuZFxuLy8gT2Zmc2NyZWVuIGNvbXBvbmVudC5cbi8vXG4vLyBNb3N0IHRoaW5ncyBpbiB0aGUgd29yayBsb29wIHNob3VsZCBkZWFsIHdpdGggd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMuXG4vLyBNb3N0IHRoaW5ncyBpbiBiZWdpbi9jb21wbGV0ZSBwaGFzZXMgc2hvdWxkIGRlYWwgd2l0aCBzdWJ0cmVlUmVuZGVyTGFuZXMuXG5cbnZhciBzdWJ0cmVlUmVuZGVyTGFuZXMgPSBOb0xhbmVzO1xudmFyIHN1YnRyZWVSZW5kZXJMYW5lc0N1cnNvciA9IGNyZWF0ZUN1cnNvcihOb0xhbmVzKTsgLy8gV2hldGhlciB0byByb290IGNvbXBsZXRlZCwgZXJyb3JlZCwgc3VzcGVuZGVkLCBldGMuXG5cbnZhciB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdEluY29tcGxldGU7IC8vIEEgZmF0YWwgZXJyb3IsIGlmIG9uZSBpcyB0aHJvd25cblxudmFyIHdvcmtJblByb2dyZXNzUm9vdEZhdGFsRXJyb3IgPSBudWxsOyAvLyBcIkluY2x1ZGVkXCIgbGFuZXMgcmVmZXIgdG8gbGFuZXMgdGhhdCB3ZXJlIHdvcmtlZCBvbiBkdXJpbmcgdGhpcyByZW5kZXIuIEl0J3Ncbi8vIHNsaWdodGx5IGRpZmZlcmVudCB0aGFuIGByZW5kZXJMYW5lc2AgYmVjYXVzZSBgcmVuZGVyTGFuZXNgIGNhbiBjaGFuZ2UgYXMgeW91XG4vLyBlbnRlciBhbmQgZXhpdCBhbiBPZmZzY3JlZW4gdHJlZS4gVGhpcyB2YWx1ZSBpcyB0aGUgY29tYmluYXRpb24gb2YgYWxsIHJlbmRlclxuLy8gbGFuZXMgZm9yIHRoZSBlbnRpcmUgcmVuZGVyIHBoYXNlLlxuXG52YXIgd29ya0luUHJvZ3Jlc3NSb290SW5jbHVkZWRMYW5lcyA9IE5vTGFuZXM7IC8vIFRoZSB3b3JrIGxlZnQgb3ZlciBieSBjb21wb25lbnRzIHRoYXQgd2VyZSB2aXNpdGVkIGR1cmluZyB0aGlzIHJlbmRlci4gT25seVxuLy8gaW5jbHVkZXMgdW5wcm9jZXNzZWQgdXBkYXRlcywgbm90IHdvcmsgaW4gYmFpbGVkIG91dCBjaGlsZHJlbi5cblxudmFyIHdvcmtJblByb2dyZXNzUm9vdFNraXBwZWRMYW5lcyA9IE5vTGFuZXM7IC8vIExhbmVzIHRoYXQgd2VyZSB1cGRhdGVkIChpbiBhbiBpbnRlcmxlYXZlZCBldmVudCkgZHVyaW5nIHRoaXMgcmVuZGVyLlxuXG52YXIgd29ya0luUHJvZ3Jlc3NSb290VXBkYXRlZExhbmVzID0gTm9MYW5lczsgLy8gTGFuZXMgdGhhdCB3ZXJlIHBpbmdlZCAoaW4gYW4gaW50ZXJsZWF2ZWQgZXZlbnQpIGR1cmluZyB0aGlzIHJlbmRlci5cblxudmFyIHdvcmtJblByb2dyZXNzUm9vdFBpbmdlZExhbmVzID0gTm9MYW5lcztcbnZhciBtb3N0UmVjZW50bHlVcGRhdGVkUm9vdCA9IG51bGw7IC8vIFRoZSBtb3N0IHJlY2VudCB0aW1lIHdlIGNvbW1pdHRlZCBhIGZhbGxiYWNrLiBUaGlzIGxldHMgdXMgZW5zdXJlIGEgdHJhaW5cbi8vIG1vZGVsIHdoZXJlIHdlIGRvbid0IGNvbW1pdCBuZXcgbG9hZGluZyBzdGF0ZXMgaW4gdG9vIHF1aWNrIHN1Y2Nlc3Npb24uXG5cbnZhciBnbG9iYWxNb3N0UmVjZW50RmFsbGJhY2tUaW1lID0gMDtcbnZhciBGQUxMQkFDS19USFJPVFRMRV9NUyA9IDUwMDsgLy8gVGhlIGFic29sdXRlIHRpbWUgZm9yIHdoZW4gd2Ugc2hvdWxkIHN0YXJ0IGdpdmluZyB1cCBvbiByZW5kZXJpbmdcbi8vIG1vcmUgYW5kIHByZWZlciBDUFUgc3VzcGVuc2UgaGV1cmlzdGljcyBpbnN0ZWFkLlxuXG52YXIgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyVGFyZ2V0VGltZSA9IEluZmluaXR5OyAvLyBIb3cgbG9uZyBhIHJlbmRlciBpcyBzdXBwb3NlZCB0byB0YWtlIGJlZm9yZSB3ZSBzdGFydCBmb2xsb3dpbmcgQ1BVXG4vLyBzdXNwZW5zZSBoZXVyaXN0aWNzIGFuZCBvcHQgb3V0IG9mIHJlbmRlcmluZyBtb3JlIGNvbnRlbnQuXG5cbnZhciBSRU5ERVJfVElNRU9VVF9NUyA9IDUwMDtcblxuZnVuY3Rpb24gcmVzZXRSZW5kZXJUaW1lcigpIHtcbiAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyVGFyZ2V0VGltZSA9IG5vdygpICsgUkVOREVSX1RJTUVPVVRfTVM7XG59XG5cbmZ1bmN0aW9uIGdldFJlbmRlclRhcmdldFRpbWUoKSB7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJUYXJnZXRUaW1lO1xufVxudmFyIG5leHRFZmZlY3QgPSBudWxsO1xudmFyIGhhc1VuY2F1Z2h0RXJyb3IgPSBmYWxzZTtcbnZhciBmaXJzdFVuY2F1Z2h0RXJyb3IgPSBudWxsO1xudmFyIGxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkID0gbnVsbDtcbnZhciByb290RG9lc0hhdmVQYXNzaXZlRWZmZWN0cyA9IGZhbHNlO1xudmFyIHJvb3RXaXRoUGVuZGluZ1Bhc3NpdmVFZmZlY3RzID0gbnVsbDtcbnZhciBwZW5kaW5nUGFzc2l2ZUVmZmVjdHNSZW5kZXJQcmlvcml0eSA9IE5vUHJpb3JpdHkkMTtcbnZhciBwZW5kaW5nUGFzc2l2ZUVmZmVjdHNMYW5lcyA9IE5vTGFuZXM7XG52YXIgcGVuZGluZ1Bhc3NpdmVIb29rRWZmZWN0c01vdW50ID0gW107XG52YXIgcGVuZGluZ1Bhc3NpdmVIb29rRWZmZWN0c1VubW91bnQgPSBbXTtcbnZhciByb290c1dpdGhQZW5kaW5nRGlzY3JldGVVcGRhdGVzID0gbnVsbDsgLy8gVXNlIHRoZXNlIHRvIHByZXZlbnQgYW4gaW5maW5pdGUgbG9vcCBvZiBuZXN0ZWQgdXBkYXRlc1xuXG52YXIgTkVTVEVEX1VQREFURV9MSU1JVCA9IDUwO1xudmFyIG5lc3RlZFVwZGF0ZUNvdW50ID0gMDtcbnZhciByb290V2l0aE5lc3RlZFVwZGF0ZXMgPSBudWxsO1xudmFyIE5FU1RFRF9QQVNTSVZFX1VQREFURV9MSU1JVCA9IDUwO1xudmFyIG5lc3RlZFBhc3NpdmVVcGRhdGVDb3VudCA9IDA7IC8vIE1hcmtzIHRoZSBuZWVkIHRvIHJlc2NoZWR1bGUgcGVuZGluZyBpbnRlcmFjdGlvbnMgYXQgdGhlc2UgbGFuZXNcbi8vIGR1cmluZyB0aGUgY29tbWl0IHBoYXNlLiBUaGlzIGVuYWJsZXMgdGhlbSB0byBiZSB0cmFjZWQgYWNyb3NzIGNvbXBvbmVudHNcbi8vIHRoYXQgc3Bhd24gbmV3IHdvcmsgZHVyaW5nIHJlbmRlci4gRS5nLiBoaWRkZW4gYm91bmRhcmllcywgc3VzcGVuZGVkIFNTUlxuLy8gaHlkcmF0aW9uIG9yIFN1c3BlbnNlTGlzdC5cbi8vIFRPRE86IENhbiB1c2UgYSBiaXRtYXNrIGluc3RlYWQgb2YgYW4gYXJyYXlcblxudmFyIHNwYXduZWRXb3JrRHVyaW5nUmVuZGVyID0gbnVsbDsgLy8gSWYgdHdvIHVwZGF0ZXMgYXJlIHNjaGVkdWxlZCB3aXRoaW4gdGhlIHNhbWUgZXZlbnQsIHdlIHNob3VsZCB0cmVhdCB0aGVpclxuLy8gZXZlbnQgdGltZXMgYXMgc2ltdWx0YW5lb3VzLCBldmVuIGlmIHRoZSBhY3R1YWwgY2xvY2sgdGltZSBoYXMgYWR2YW5jZWRcbi8vIGJldHdlZW4gdGhlIGZpcnN0IGFuZCBzZWNvbmQgY2FsbC5cblxudmFyIGN1cnJlbnRFdmVudFRpbWUgPSBOb1RpbWVzdGFtcDtcbnZhciBjdXJyZW50RXZlbnRXaXBMYW5lcyA9IE5vTGFuZXM7XG52YXIgY3VycmVudEV2ZW50UGVuZGluZ0xhbmVzID0gTm9MYW5lczsgLy8gRGV2IG9ubHkgZmxhZyB0aGF0IHRyYWNrcyBpZiBwYXNzaXZlIGVmZmVjdHMgYXJlIGN1cnJlbnRseSBiZWluZyBmbHVzaGVkLlxuLy8gV2Ugd2FybiBhYm91dCBzdGF0ZSB1cGRhdGVzIGZvciB1bm1vdW50ZWQgY29tcG9uZW50cyBkaWZmZXJlbnRseSBpbiB0aGlzIGNhc2UuXG5cbnZhciBpc0ZsdXNoaW5nUGFzc2l2ZUVmZmVjdHMgPSBmYWxzZTtcbnZhciBmb2N1c2VkSW5zdGFuY2VIYW5kbGUgPSBudWxsO1xudmFyIHNob3VsZEZpcmVBZnRlckFjdGl2ZUluc3RhbmNlQmx1ciA9IGZhbHNlO1xuZnVuY3Rpb24gZ2V0V29ya0luUHJvZ3Jlc3NSb290KCkge1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3NSb290O1xufVxuZnVuY3Rpb24gcmVxdWVzdEV2ZW50VGltZSgpIHtcbiAgaWYgKChleGVjdXRpb25Db250ZXh0ICYgKFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgIT09IE5vQ29udGV4dCkge1xuICAgIC8vIFdlJ3JlIGluc2lkZSBSZWFjdCwgc28gaXQncyBmaW5lIHRvIHJlYWQgdGhlIGFjdHVhbCB0aW1lLlxuICAgIHJldHVybiBub3coKTtcbiAgfSAvLyBXZSdyZSBub3QgaW5zaWRlIFJlYWN0LCBzbyB3ZSBtYXkgYmUgaW4gdGhlIG1pZGRsZSBvZiBhIGJyb3dzZXIgZXZlbnQuXG5cblxuICBpZiAoY3VycmVudEV2ZW50VGltZSAhPT0gTm9UaW1lc3RhbXApIHtcbiAgICAvLyBVc2UgdGhlIHNhbWUgc3RhcnQgdGltZSBmb3IgYWxsIHVwZGF0ZXMgdW50aWwgd2UgZW50ZXIgUmVhY3QgYWdhaW4uXG4gICAgcmV0dXJuIGN1cnJlbnRFdmVudFRpbWU7XG4gIH0gLy8gVGhpcyBpcyB0aGUgZmlyc3QgdXBkYXRlIHNpbmNlIFJlYWN0IHlpZWxkZWQuIENvbXB1dGUgYSBuZXcgc3RhcnQgdGltZS5cblxuXG4gIGN1cnJlbnRFdmVudFRpbWUgPSBub3coKTtcbiAgcmV0dXJuIGN1cnJlbnRFdmVudFRpbWU7XG59XG5mdW5jdGlvbiByZXF1ZXN0VXBkYXRlTGFuZShmaWJlcikge1xuICAvLyBTcGVjaWFsIGNhc2VzXG4gIHZhciBtb2RlID0gZmliZXIubW9kZTtcblxuICBpZiAoKG1vZGUgJiBCbG9ja2luZ01vZGUpID09PSBOb01vZGUpIHtcbiAgICByZXR1cm4gU3luY0xhbmU7XG4gIH0gZWxzZSBpZiAoKG1vZGUgJiBDb25jdXJyZW50TW9kZSkgPT09IE5vTW9kZSkge1xuICAgIHJldHVybiBnZXRDdXJyZW50UHJpb3JpdHlMZXZlbCgpID09PSBJbW1lZGlhdGVQcmlvcml0eSQxID8gU3luY0xhbmUgOiBTeW5jQmF0Y2hlZExhbmU7XG4gIH0gLy8gVGhlIGFsZ29yaXRobSBmb3IgYXNzaWduaW5nIGFuIHVwZGF0ZSB0byBhIGxhbmUgc2hvdWxkIGJlIHN0YWJsZSBmb3IgYWxsXG4gIC8vIHVwZGF0ZXMgYXQgdGhlIHNhbWUgcHJpb3JpdHkgd2l0aGluIHRoZSBzYW1lIGV2ZW50LiBUbyBkbyB0aGlzLCB0aGUgaW5wdXRzXG4gIC8vIHRvIHRoZSBhbGdvcml0aG0gbXVzdCBiZSB0aGUgc2FtZS4gRm9yIGV4YW1wbGUsIHdlIHVzZSB0aGUgYHJlbmRlckxhbmVzYFxuICAvLyB0byBhdm9pZCBjaG9vc2luZyBhIGxhbmUgdGhhdCBpcyBhbHJlYWR5IGluIHRoZSBtaWRkbGUgb2YgcmVuZGVyaW5nLlxuICAvL1xuICAvLyBIb3dldmVyLCB0aGUgXCJpbmNsdWRlZFwiIGxhbmVzIGNvdWxkIGJlIG11dGF0ZWQgaW4gYmV0d2VlbiB1cGRhdGVzIGluIHRoZVxuICAvLyBzYW1lIGV2ZW50LCBsaWtlIGlmIHlvdSBwZXJmb3JtIGFuIHVwZGF0ZSBpbnNpZGUgYGZsdXNoU3luY2AuIE9yIGFueSBvdGhlclxuICAvLyBjb2RlIHBhdGggdGhhdCBtaWdodCBjYWxsIGBwcmVwYXJlRnJlc2hTdGFja2AuXG4gIC8vXG4gIC8vIFRoZSB0cmljayB3ZSB1c2UgaXMgdG8gY2FjaGUgdGhlIGZpcnN0IG9mIGVhY2ggb2YgdGhlc2UgaW5wdXRzIHdpdGhpbiBhblxuICAvLyBldmVudC4gVGhlbiByZXNldCB0aGUgY2FjaGVkIHZhbHVlcyBvbmNlIHdlIGNhbiBiZSBzdXJlIHRoZSBldmVudCBpcyBvdmVyLlxuICAvLyBPdXIgaGV1cmlzdGljIGZvciB0aGF0IGlzIHdoZW5ldmVyIHdlIGVudGVyIGEgY29uY3VycmVudCB3b3JrIGxvb3AuXG4gIC8vXG4gIC8vIFdlJ2xsIGRvIHRoZSBzYW1lIGZvciBgY3VycmVudEV2ZW50UGVuZGluZ0xhbmVzYCBiZWxvdy5cblxuXG4gIGlmIChjdXJyZW50RXZlbnRXaXBMYW5lcyA9PT0gTm9MYW5lcykge1xuICAgIGN1cnJlbnRFdmVudFdpcExhbmVzID0gd29ya0luUHJvZ3Jlc3NSb290SW5jbHVkZWRMYW5lcztcbiAgfVxuXG4gIHZhciBpc1RyYW5zaXRpb24gPSByZXF1ZXN0Q3VycmVudFRyYW5zaXRpb24oKSAhPT0gTm9UcmFuc2l0aW9uO1xuXG4gIGlmIChpc1RyYW5zaXRpb24pIHtcbiAgICBpZiAoY3VycmVudEV2ZW50UGVuZGluZ0xhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgICBjdXJyZW50RXZlbnRQZW5kaW5nTGFuZXMgPSBtb3N0UmVjZW50bHlVcGRhdGVkUm9vdCAhPT0gbnVsbCA/IG1vc3RSZWNlbnRseVVwZGF0ZWRSb290LnBlbmRpbmdMYW5lcyA6IE5vTGFuZXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbmRUcmFuc2l0aW9uTGFuZShjdXJyZW50RXZlbnRXaXBMYW5lcywgY3VycmVudEV2ZW50UGVuZGluZ0xhbmVzKTtcbiAgfSAvLyBUT0RPOiBSZW1vdmUgdGhpcyBkZXBlbmRlbmN5IG9uIHRoZSBTY2hlZHVsZXIgcHJpb3JpdHkuXG4gIC8vIFRvIGRvIHRoYXQsIHdlJ3JlIHJlcGxhY2luZyBpdCB3aXRoIGFuIHVwZGF0ZSBsYW5lIHByaW9yaXR5LlxuXG5cbiAgdmFyIHNjaGVkdWxlclByaW9yaXR5ID0gZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwoKTsgLy8gVGhlIG9sZCBiZWhhdmlvciB3YXMgdXNpbmcgdGhlIHByaW9yaXR5IGxldmVsIG9mIHRoZSBTY2hlZHVsZXIuXG4gIC8vIFRoaXMgY291cGxlcyBSZWFjdCB0byB0aGUgU2NoZWR1bGVyIGludGVybmFscywgc28gd2UncmUgcmVwbGFjaW5nIGl0XG4gIC8vIHdpdGggdGhlIGN1cnJlbnRVcGRhdGVMYW5lUHJpb3JpdHkgYWJvdmUuIEFzIGFuIGV4YW1wbGUgb2YgaG93IHRoaXNcbiAgLy8gY291bGQgYmUgcHJvYmxlbWF0aWMsIGlmIHdlJ3JlIG5vdCBpbnNpZGUgYFNjaGVkdWxlci5ydW5XaXRoUHJpb3JpdHlgLFxuICAvLyB0aGVuIHdlJ2xsIGdldCB0aGUgcHJpb3JpdHkgb2YgdGhlIGN1cnJlbnQgcnVubmluZyBTY2hlZHVsZXIgdGFzayxcbiAgLy8gd2hpY2ggaXMgcHJvYmFibHkgbm90IHdoYXQgd2Ugd2FudC5cblxuICB2YXIgbGFuZTtcblxuICBpZiAoIC8vIFRPRE86IFRlbXBvcmFyeS4gV2UncmUgcmVtb3ZpbmcgdGhlIGNvbmNlcHQgb2YgZGlzY3JldGUgdXBkYXRlcy5cbiAgKGV4ZWN1dGlvbkNvbnRleHQgJiBEaXNjcmV0ZUV2ZW50Q29udGV4dCkgIT09IE5vQ29udGV4dCAmJiBzY2hlZHVsZXJQcmlvcml0eSA9PT0gVXNlckJsb2NraW5nUHJpb3JpdHkkMikge1xuICAgIGxhbmUgPSBmaW5kVXBkYXRlTGFuZShJbnB1dERpc2NyZXRlTGFuZVByaW9yaXR5LCBjdXJyZW50RXZlbnRXaXBMYW5lcyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIHNjaGVkdWxlckxhbmVQcmlvcml0eSA9IHNjaGVkdWxlclByaW9yaXR5VG9MYW5lUHJpb3JpdHkoc2NoZWR1bGVyUHJpb3JpdHkpO1xuXG4gICAgbGFuZSA9IGZpbmRVcGRhdGVMYW5lKHNjaGVkdWxlckxhbmVQcmlvcml0eSwgY3VycmVudEV2ZW50V2lwTGFuZXMpO1xuICB9XG5cbiAgcmV0dXJuIGxhbmU7XG59XG5cbmZ1bmN0aW9uIHJlcXVlc3RSZXRyeUxhbmUoZmliZXIpIHtcbiAgLy8gVGhpcyBpcyBhIGZvcmsgb2YgYHJlcXVlc3RVcGRhdGVMYW5lYCBkZXNpZ25lZCBzcGVjaWZpY2FsbHkgZm9yIFN1c3BlbnNlXG4gIC8vIFwicmV0cmllc1wiIFx1MjAxNCBhIHNwZWNpYWwgdXBkYXRlIHRoYXQgYXR0ZW1wdHMgdG8gZmxpcCBhIFN1c3BlbnNlIGJvdW5kYXJ5XG4gIC8vIGZyb20gaXRzIHBsYWNlaG9sZGVyIHN0YXRlIHRvIGl0cyBwcmltYXJ5L3Jlc29sdmVkIHN0YXRlLlxuICAvLyBTcGVjaWFsIGNhc2VzXG4gIHZhciBtb2RlID0gZmliZXIubW9kZTtcblxuICBpZiAoKG1vZGUgJiBCbG9ja2luZ01vZGUpID09PSBOb01vZGUpIHtcbiAgICByZXR1cm4gU3luY0xhbmU7XG4gIH0gZWxzZSBpZiAoKG1vZGUgJiBDb25jdXJyZW50TW9kZSkgPT09IE5vTW9kZSkge1xuICAgIHJldHVybiBnZXRDdXJyZW50UHJpb3JpdHlMZXZlbCgpID09PSBJbW1lZGlhdGVQcmlvcml0eSQxID8gU3luY0xhbmUgOiBTeW5jQmF0Y2hlZExhbmU7XG4gIH0gLy8gU2VlIGByZXF1ZXN0VXBkYXRlTGFuZWAgZm9yIGV4cGxhbmF0aW9uIG9mIGBjdXJyZW50RXZlbnRXaXBMYW5lc2BcblxuXG4gIGlmIChjdXJyZW50RXZlbnRXaXBMYW5lcyA9PT0gTm9MYW5lcykge1xuICAgIGN1cnJlbnRFdmVudFdpcExhbmVzID0gd29ya0luUHJvZ3Jlc3NSb290SW5jbHVkZWRMYW5lcztcbiAgfVxuXG4gIHJldHVybiBmaW5kUmV0cnlMYW5lKGN1cnJlbnRFdmVudFdpcExhbmVzKTtcbn1cblxuZnVuY3Rpb24gc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBsYW5lLCBldmVudFRpbWUpIHtcbiAgY2hlY2tGb3JOZXN0ZWRVcGRhdGVzKCk7XG4gIHdhcm5BYm91dFJlbmRlclBoYXNlVXBkYXRlc0luREVWKGZpYmVyKTtcbiAgdmFyIHJvb3QgPSBtYXJrVXBkYXRlTGFuZUZyb21GaWJlclRvUm9vdChmaWJlciwgbGFuZSk7XG5cbiAgaWYgKHJvb3QgPT09IG51bGwpIHtcbiAgICB3YXJuQWJvdXRVcGRhdGVPblVubW91bnRlZEZpYmVySW5ERVYoZmliZXIpO1xuICAgIHJldHVybiBudWxsO1xuICB9IC8vIE1hcmsgdGhhdCB0aGUgcm9vdCBoYXMgYSBwZW5kaW5nIHVwZGF0ZS5cblxuXG4gIG1hcmtSb290VXBkYXRlZChyb290LCBsYW5lLCBldmVudFRpbWUpO1xuXG4gIGlmIChyb290ID09PSB3b3JrSW5Qcm9ncmVzc1Jvb3QpIHtcbiAgICAvLyBSZWNlaXZlZCBhbiB1cGRhdGUgdG8gYSB0cmVlIHRoYXQncyBpbiB0aGUgbWlkZGxlIG9mIHJlbmRlcmluZy4gTWFya1xuICAgIC8vIHRoYXQgdGhlcmUgd2FzIGFuIGludGVybGVhdmVkIHVwZGF0ZSB3b3JrIG9uIHRoaXMgcm9vdC4gVW5sZXNzIHRoZVxuICAgIC8vIGBkZWZlclJlbmRlclBoYXNlVXBkYXRlVG9OZXh0QmF0Y2hgIGZsYWcgaXMgb2ZmIGFuZCB0aGlzIGlzIGEgcmVuZGVyXG4gICAgLy8gcGhhc2UgdXBkYXRlLiBJbiB0aGF0IGNhc2UsIHdlIGRvbid0IHRyZWF0IHJlbmRlciBwaGFzZSB1cGRhdGVzIGFzIGlmXG4gICAgLy8gdGhleSB3ZXJlIGludGVybGVhdmVkLCBmb3IgYmFja3dhcmRzIGNvbXBhdCByZWFzb25zLlxuICAgIHtcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdFVwZGF0ZWRMYW5lcyA9IG1lcmdlTGFuZXMod29ya0luUHJvZ3Jlc3NSb290VXBkYXRlZExhbmVzLCBsYW5lKTtcbiAgICB9XG5cbiAgICBpZiAod29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9PT0gUm9vdFN1c3BlbmRlZFdpdGhEZWxheSkge1xuICAgICAgLy8gVGhlIHJvb3QgYWxyZWFkeSBzdXNwZW5kZWQgd2l0aCBhIGRlbGF5LCB3aGljaCBtZWFucyB0aGlzIHJlbmRlclxuICAgICAgLy8gZGVmaW5pdGVseSB3b24ndCBmaW5pc2guIFNpbmNlIHdlIGhhdmUgYSBuZXcgdXBkYXRlLCBsZXQncyBtYXJrIGl0IGFzXG4gICAgICAvLyBzdXNwZW5kZWQgbm93LCByaWdodCBiZWZvcmUgbWFya2luZyB0aGUgaW5jb21pbmcgdXBkYXRlLiBUaGlzIGhhcyB0aGVcbiAgICAgIC8vIGVmZmVjdCBvZiBpbnRlcnJ1cHRpbmcgdGhlIGN1cnJlbnQgcmVuZGVyIGFuZCBzd2l0Y2hpbmcgdG8gdGhlIHVwZGF0ZS5cbiAgICAgIC8vIFRPRE86IE1ha2Ugc3VyZSB0aGlzIGRvZXNuJ3Qgb3ZlcnJpZGUgcGluZ3MgdGhhdCBoYXBwZW4gd2hpbGUgd2UndmVcbiAgICAgIC8vIGFscmVhZHkgc3RhcnRlZCByZW5kZXJpbmcuXG4gICAgICBtYXJrUm9vdFN1c3BlbmRlZCQxKHJvb3QsIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzKTtcbiAgICB9XG4gIH0gLy8gVE9ETzogcmVxdWVzdFVwZGF0ZUxhbmVQcmlvcml0eSBhbHNvIHJlYWRzIHRoZSBwcmlvcml0eS4gUGFzcyB0aGVcbiAgLy8gcHJpb3JpdHkgYXMgYW4gYXJndW1lbnQgdG8gdGhhdCBmdW5jdGlvbiBhbmQgdGhpcyBvbmUuXG5cblxuICB2YXIgcHJpb3JpdHlMZXZlbCA9IGdldEN1cnJlbnRQcmlvcml0eUxldmVsKCk7XG5cbiAgaWYgKGxhbmUgPT09IFN5bmNMYW5lKSB7XG4gICAgaWYgKCAvLyBDaGVjayBpZiB3ZSdyZSBpbnNpZGUgdW5iYXRjaGVkVXBkYXRlc1xuICAgIChleGVjdXRpb25Db250ZXh0ICYgTGVnYWN5VW5iYXRjaGVkQ29udGV4dCkgIT09IE5vQ29udGV4dCAmJiAvLyBDaGVjayBpZiB3ZSdyZSBub3QgYWxyZWFkeSByZW5kZXJpbmdcbiAgICAoZXhlY3V0aW9uQ29udGV4dCAmIChSZW5kZXJDb250ZXh0IHwgQ29tbWl0Q29udGV4dCkpID09PSBOb0NvbnRleHQpIHtcbiAgICAgIC8vIFJlZ2lzdGVyIHBlbmRpbmcgaW50ZXJhY3Rpb25zIG9uIHRoZSByb290IHRvIGF2b2lkIGxvc2luZyB0cmFjZWQgaW50ZXJhY3Rpb24gZGF0YS5cbiAgICAgIHNjaGVkdWxlUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCBsYW5lKTsgLy8gVGhpcyBpcyBhIGxlZ2FjeSBlZGdlIGNhc2UuIFRoZSBpbml0aWFsIG1vdW50IG9mIGEgUmVhY3RET00ucmVuZGVyLWVkXG4gICAgICAvLyByb290IGluc2lkZSBvZiBiYXRjaGVkVXBkYXRlcyBzaG91bGQgYmUgc3luY2hyb25vdXMsIGJ1dCBsYXlvdXQgdXBkYXRlc1xuICAgICAgLy8gc2hvdWxkIGJlIGRlZmVycmVkIHVudGlsIHRoZSBlbmQgb2YgdGhlIGJhdGNoLlxuXG4gICAgICBwZXJmb3JtU3luY1dvcmtPblJvb3Qocm9vdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290LCBldmVudFRpbWUpO1xuICAgICAgc2NoZWR1bGVQZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIGxhbmUpO1xuXG4gICAgICBpZiAoZXhlY3V0aW9uQ29udGV4dCA9PT0gTm9Db250ZXh0KSB7XG4gICAgICAgIC8vIEZsdXNoIHRoZSBzeW5jaHJvbm91cyB3b3JrIG5vdywgdW5sZXNzIHdlJ3JlIGFscmVhZHkgd29ya2luZyBvciBpbnNpZGVcbiAgICAgICAgLy8gYSBiYXRjaC4gVGhpcyBpcyBpbnRlbnRpb25hbGx5IGluc2lkZSBzY2hlZHVsZVVwZGF0ZU9uRmliZXIgaW5zdGVhZCBvZlxuICAgICAgICAvLyBzY2hlZHVsZUNhbGxiYWNrRm9yRmliZXIgdG8gcHJlc2VydmUgdGhlIGFiaWxpdHkgdG8gc2NoZWR1bGUgYSBjYWxsYmFja1xuICAgICAgICAvLyB3aXRob3V0IGltbWVkaWF0ZWx5IGZsdXNoaW5nIGl0LiBXZSBvbmx5IGRvIHRoaXMgZm9yIHVzZXItaW5pdGlhdGVkXG4gICAgICAgIC8vIHVwZGF0ZXMsIHRvIHByZXNlcnZlIGhpc3RvcmljYWwgYmVoYXZpb3Igb2YgbGVnYWN5IG1vZGUuXG4gICAgICAgIHJlc2V0UmVuZGVyVGltZXIoKTtcbiAgICAgICAgZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBTY2hlZHVsZSBhIGRpc2NyZXRlIHVwZGF0ZSBidXQgb25seSBpZiBpdCdzIG5vdCBTeW5jLlxuICAgIGlmICgoZXhlY3V0aW9uQ29udGV4dCAmIERpc2NyZXRlRXZlbnRDb250ZXh0KSAhPT0gTm9Db250ZXh0ICYmICggLy8gT25seSB1cGRhdGVzIGF0IHVzZXItYmxvY2tpbmcgcHJpb3JpdHkgb3IgZ3JlYXRlciBhcmUgY29uc2lkZXJlZFxuICAgIC8vIGRpc2NyZXRlLCBldmVuIGluc2lkZSBhIGRpc2NyZXRlIGV2ZW50LlxuICAgIHByaW9yaXR5TGV2ZWwgPT09IFVzZXJCbG9ja2luZ1ByaW9yaXR5JDIgfHwgcHJpb3JpdHlMZXZlbCA9PT0gSW1tZWRpYXRlUHJpb3JpdHkkMSkpIHtcbiAgICAgIC8vIFRoaXMgaXMgdGhlIHJlc3VsdCBvZiBhIGRpc2NyZXRlIGV2ZW50LiBUcmFjayB0aGUgbG93ZXN0IHByaW9yaXR5XG4gICAgICAvLyBkaXNjcmV0ZSB1cGRhdGUgcGVyIHJvb3Qgc28gd2UgY2FuIGZsdXNoIHRoZW0gZWFybHksIGlmIG5lZWRlZC5cbiAgICAgIGlmIChyb290c1dpdGhQZW5kaW5nRGlzY3JldGVVcGRhdGVzID09PSBudWxsKSB7XG4gICAgICAgIHJvb3RzV2l0aFBlbmRpbmdEaXNjcmV0ZVVwZGF0ZXMgPSBuZXcgU2V0KFtyb290XSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByb290c1dpdGhQZW5kaW5nRGlzY3JldGVVcGRhdGVzLmFkZChyb290KTtcbiAgICAgIH1cbiAgICB9IC8vIFNjaGVkdWxlIG90aGVyIHVwZGF0ZXMgYWZ0ZXIgaW4gY2FzZSB0aGUgY2FsbGJhY2sgaXMgc3luYy5cblxuXG4gICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QsIGV2ZW50VGltZSk7XG4gICAgc2NoZWR1bGVQZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIGxhbmUpO1xuICB9IC8vIFdlIHVzZSB0aGlzIHdoZW4gYXNzaWduaW5nIGEgbGFuZSBmb3IgYSB0cmFuc2l0aW9uIGluc2lkZVxuICAvLyBgcmVxdWVzdFVwZGF0ZUxhbmVgLiBXZSBhc3N1bWUgaXQncyB0aGUgc2FtZSBhcyB0aGUgcm9vdCBiZWluZyB1cGRhdGVkLFxuICAvLyBzaW5jZSBpbiB0aGUgY29tbW9uIGNhc2Ugb2YgYSBzaW5nbGUgcm9vdCBhcHAgaXQgcHJvYmFibHkgaXMuIElmIGl0J3Mgbm90XG4gIC8vIHRoZSBzYW1lIHJvb3QsIHRoZW4gaXQncyBub3QgYSBodWdlIGRlYWwsIHdlIGp1c3QgbWlnaHQgYmF0Y2ggbW9yZSBzdHVmZlxuICAvLyB0b2dldGhlciBtb3JlIHRoYW4gbmVjZXNzYXJ5LlxuXG5cbiAgbW9zdFJlY2VudGx5VXBkYXRlZFJvb3QgPSByb290O1xufSAvLyBUaGlzIGlzIHNwbGl0IGludG8gYSBzZXBhcmF0ZSBmdW5jdGlvbiBzbyB3ZSBjYW4gbWFyayBhIGZpYmVyIHdpdGggcGVuZGluZ1xuLy8gd29yayB3aXRob3V0IHRyZWF0aW5nIGl0IGFzIGEgdHlwaWNhbCB1cGRhdGUgdGhhdCBvcmlnaW5hdGVzIGZyb20gYW4gZXZlbnQ7XG4vLyBlLmcuIHJldHJ5aW5nIGEgU3VzcGVuc2UgYm91bmRhcnkgaXNuJ3QgYW4gdXBkYXRlLCBidXQgaXQgZG9lcyBzY2hlZHVsZSB3b3JrXG4vLyBvbiBhIGZpYmVyLlxuXG5mdW5jdGlvbiBtYXJrVXBkYXRlTGFuZUZyb21GaWJlclRvUm9vdChzb3VyY2VGaWJlciwgbGFuZSkge1xuICAvLyBVcGRhdGUgdGhlIHNvdXJjZSBmaWJlcidzIGxhbmVzXG4gIHNvdXJjZUZpYmVyLmxhbmVzID0gbWVyZ2VMYW5lcyhzb3VyY2VGaWJlci5sYW5lcywgbGFuZSk7XG4gIHZhciBhbHRlcm5hdGUgPSBzb3VyY2VGaWJlci5hbHRlcm5hdGU7XG5cbiAgaWYgKGFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgIGFsdGVybmF0ZS5sYW5lcyA9IG1lcmdlTGFuZXMoYWx0ZXJuYXRlLmxhbmVzLCBsYW5lKTtcbiAgfVxuXG4gIHtcbiAgICBpZiAoYWx0ZXJuYXRlID09PSBudWxsICYmIChzb3VyY2VGaWJlci5mbGFncyAmIChQbGFjZW1lbnQgfCBIeWRyYXRpbmcpKSAhPT0gTm9GbGFncykge1xuICAgICAgd2FybkFib3V0VXBkYXRlT25Ob3RZZXRNb3VudGVkRmliZXJJbkRFVihzb3VyY2VGaWJlcik7XG4gICAgfVxuICB9IC8vIFdhbGsgdGhlIHBhcmVudCBwYXRoIHRvIHRoZSByb290IGFuZCB1cGRhdGUgdGhlIGNoaWxkIGV4cGlyYXRpb24gdGltZS5cblxuXG4gIHZhciBub2RlID0gc291cmNlRmliZXI7XG4gIHZhciBwYXJlbnQgPSBzb3VyY2VGaWJlci5yZXR1cm47XG5cbiAgd2hpbGUgKHBhcmVudCAhPT0gbnVsbCkge1xuICAgIHBhcmVudC5jaGlsZExhbmVzID0gbWVyZ2VMYW5lcyhwYXJlbnQuY2hpbGRMYW5lcywgbGFuZSk7XG4gICAgYWx0ZXJuYXRlID0gcGFyZW50LmFsdGVybmF0ZTtcblxuICAgIGlmIChhbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgIGFsdGVybmF0ZS5jaGlsZExhbmVzID0gbWVyZ2VMYW5lcyhhbHRlcm5hdGUuY2hpbGRMYW5lcywgbGFuZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKChwYXJlbnQuZmxhZ3MgJiAoUGxhY2VtZW50IHwgSHlkcmF0aW5nKSkgIT09IE5vRmxhZ3MpIHtcbiAgICAgICAgICB3YXJuQWJvdXRVcGRhdGVPbk5vdFlldE1vdW50ZWRGaWJlckluREVWKHNvdXJjZUZpYmVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIG5vZGUgPSBwYXJlbnQ7XG4gICAgcGFyZW50ID0gcGFyZW50LnJldHVybjtcbiAgfVxuXG4gIGlmIChub2RlLnRhZyA9PT0gSG9zdFJvb3QpIHtcbiAgICB2YXIgcm9vdCA9IG5vZGUuc3RhdGVOb2RlO1xuICAgIHJldHVybiByb290O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59IC8vIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIHNjaGVkdWxlIGEgdGFzayBmb3IgYSByb290LiBUaGVyZSdzIG9ubHkgb25lIHRhc2sgcGVyXG4vLyByb290OyBpZiBhIHRhc2sgd2FzIGFscmVhZHkgc2NoZWR1bGVkLCB3ZSdsbCBjaGVjayB0byBtYWtlIHN1cmUgdGhlIHByaW9yaXR5XG4vLyBvZiB0aGUgZXhpc3RpbmcgdGFzayBpcyB0aGUgc2FtZSBhcyB0aGUgcHJpb3JpdHkgb2YgdGhlIG5leHQgbGV2ZWwgdGhhdCB0aGVcbi8vIHJvb3QgaGFzIHdvcmsgb24uIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG9uIGV2ZXJ5IHVwZGF0ZSwgYW5kIHJpZ2h0IGJlZm9yZVxuLy8gZXhpdGluZyBhIHRhc2suXG5cblxuZnVuY3Rpb24gZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QsIGN1cnJlbnRUaW1lKSB7XG4gIHZhciBleGlzdGluZ0NhbGxiYWNrTm9kZSA9IHJvb3QuY2FsbGJhY2tOb2RlOyAvLyBDaGVjayBpZiBhbnkgbGFuZXMgYXJlIGJlaW5nIHN0YXJ2ZWQgYnkgb3RoZXIgd29yay4gSWYgc28sIG1hcmsgdGhlbSBhc1xuICAvLyBleHBpcmVkIHNvIHdlIGtub3cgdG8gd29yayBvbiB0aG9zZSBuZXh0LlxuXG4gIG1hcmtTdGFydmVkTGFuZXNBc0V4cGlyZWQocm9vdCwgY3VycmVudFRpbWUpOyAvLyBEZXRlcm1pbmUgdGhlIG5leHQgbGFuZXMgdG8gd29yayBvbiwgYW5kIHRoZWlyIHByaW9yaXR5LlxuXG4gIHZhciBuZXh0TGFuZXMgPSBnZXROZXh0TGFuZXMocm9vdCwgcm9vdCA9PT0gd29ya0luUHJvZ3Jlc3NSb290ID8gd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgOiBOb0xhbmVzKTsgLy8gVGhpcyByZXR1cm5zIHRoZSBwcmlvcml0eSBsZXZlbCBjb21wdXRlZCBkdXJpbmcgdGhlIGBnZXROZXh0TGFuZXNgIGNhbGwuXG5cbiAgdmFyIG5ld0NhbGxiYWNrUHJpb3JpdHkgPSByZXR1cm5OZXh0TGFuZXNQcmlvcml0eSgpO1xuXG4gIGlmIChuZXh0TGFuZXMgPT09IE5vTGFuZXMpIHtcbiAgICAvLyBTcGVjaWFsIGNhc2U6IFRoZXJlJ3Mgbm90aGluZyB0byB3b3JrIG9uLlxuICAgIGlmIChleGlzdGluZ0NhbGxiYWNrTm9kZSAhPT0gbnVsbCkge1xuICAgICAgY2FuY2VsQ2FsbGJhY2soZXhpc3RpbmdDYWxsYmFja05vZGUpO1xuICAgICAgcm9vdC5jYWxsYmFja05vZGUgPSBudWxsO1xuICAgICAgcm9vdC5jYWxsYmFja1ByaW9yaXR5ID0gTm9MYW5lUHJpb3JpdHk7XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9IC8vIENoZWNrIGlmIHRoZXJlJ3MgYW4gZXhpc3RpbmcgdGFzay4gV2UgbWF5IGJlIGFibGUgdG8gcmV1c2UgaXQuXG5cblxuICBpZiAoZXhpc3RpbmdDYWxsYmFja05vZGUgIT09IG51bGwpIHtcbiAgICB2YXIgZXhpc3RpbmdDYWxsYmFja1ByaW9yaXR5ID0gcm9vdC5jYWxsYmFja1ByaW9yaXR5O1xuXG4gICAgaWYgKGV4aXN0aW5nQ2FsbGJhY2tQcmlvcml0eSA9PT0gbmV3Q2FsbGJhY2tQcmlvcml0eSkge1xuICAgICAgLy8gVGhlIHByaW9yaXR5IGhhc24ndCBjaGFuZ2VkLiBXZSBjYW4gcmV1c2UgdGhlIGV4aXN0aW5nIHRhc2suIEV4aXQuXG4gICAgICByZXR1cm47XG4gICAgfSAvLyBUaGUgcHJpb3JpdHkgY2hhbmdlZC4gQ2FuY2VsIHRoZSBleGlzdGluZyBjYWxsYmFjay4gV2UnbGwgc2NoZWR1bGUgYSBuZXdcbiAgICAvLyBvbmUgYmVsb3cuXG5cblxuICAgIGNhbmNlbENhbGxiYWNrKGV4aXN0aW5nQ2FsbGJhY2tOb2RlKTtcbiAgfSAvLyBTY2hlZHVsZSBhIG5ldyBjYWxsYmFjay5cblxuXG4gIHZhciBuZXdDYWxsYmFja05vZGU7XG5cbiAgaWYgKG5ld0NhbGxiYWNrUHJpb3JpdHkgPT09IFN5bmNMYW5lUHJpb3JpdHkpIHtcbiAgICAvLyBTcGVjaWFsIGNhc2U6IFN5bmMgUmVhY3QgY2FsbGJhY2tzIGFyZSBzY2hlZHVsZWQgb24gYSBzcGVjaWFsXG4gICAgLy8gaW50ZXJuYWwgcXVldWVcbiAgICBuZXdDYWxsYmFja05vZGUgPSBzY2hlZHVsZVN5bmNDYWxsYmFjayhwZXJmb3JtU3luY1dvcmtPblJvb3QuYmluZChudWxsLCByb290KSk7XG4gIH0gZWxzZSBpZiAobmV3Q2FsbGJhY2tQcmlvcml0eSA9PT0gU3luY0JhdGNoZWRMYW5lUHJpb3JpdHkpIHtcbiAgICBuZXdDYWxsYmFja05vZGUgPSBzY2hlZHVsZUNhbGxiYWNrKEltbWVkaWF0ZVByaW9yaXR5JDEsIHBlcmZvcm1TeW5jV29ya09uUm9vdC5iaW5kKG51bGwsIHJvb3QpKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgc2NoZWR1bGVyUHJpb3JpdHlMZXZlbCA9IGxhbmVQcmlvcml0eVRvU2NoZWR1bGVyUHJpb3JpdHkobmV3Q2FsbGJhY2tQcmlvcml0eSk7XG4gICAgbmV3Q2FsbGJhY2tOb2RlID0gc2NoZWR1bGVDYWxsYmFjayhzY2hlZHVsZXJQcmlvcml0eUxldmVsLCBwZXJmb3JtQ29uY3VycmVudFdvcmtPblJvb3QuYmluZChudWxsLCByb290KSk7XG4gIH1cblxuICByb290LmNhbGxiYWNrUHJpb3JpdHkgPSBuZXdDYWxsYmFja1ByaW9yaXR5O1xuICByb290LmNhbGxiYWNrTm9kZSA9IG5ld0NhbGxiYWNrTm9kZTtcbn0gLy8gVGhpcyBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIGV2ZXJ5IGNvbmN1cnJlbnQgdGFzaywgaS5lLiBhbnl0aGluZyB0aGF0XG4vLyBnb2VzIHRocm91Z2ggU2NoZWR1bGVyLlxuXG5cbmZ1bmN0aW9uIHBlcmZvcm1Db25jdXJyZW50V29ya09uUm9vdChyb290KSB7XG4gIC8vIFNpbmNlIHdlIGtub3cgd2UncmUgaW4gYSBSZWFjdCBldmVudCwgd2UgY2FuIGNsZWFyIHRoZSBjdXJyZW50XG4gIC8vIGV2ZW50IHRpbWUuIFRoZSBuZXh0IHVwZGF0ZSB3aWxsIGNvbXB1dGUgYSBuZXcgZXZlbnQgdGltZS5cbiAgY3VycmVudEV2ZW50VGltZSA9IE5vVGltZXN0YW1wO1xuICBjdXJyZW50RXZlbnRXaXBMYW5lcyA9IE5vTGFuZXM7XG4gIGN1cnJlbnRFdmVudFBlbmRpbmdMYW5lcyA9IE5vTGFuZXM7XG5cbiAgaWYgKCEoKGV4ZWN1dGlvbkNvbnRleHQgJiAoUmVuZGVyQ29udGV4dCB8IENvbW1pdENvbnRleHQpKSA9PT0gTm9Db250ZXh0KSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlNob3VsZCBub3QgYWxyZWFkeSBiZSB3b3JraW5nLlwiICk7XG4gICAgfVxuICB9IC8vIEZsdXNoIGFueSBwZW5kaW5nIHBhc3NpdmUgZWZmZWN0cyBiZWZvcmUgZGVjaWRpbmcgd2hpY2ggbGFuZXMgdG8gd29yayBvbixcbiAgLy8gaW4gY2FzZSB0aGV5IHNjaGVkdWxlIGFkZGl0aW9uYWwgd29yay5cblxuXG4gIHZhciBvcmlnaW5hbENhbGxiYWNrTm9kZSA9IHJvb3QuY2FsbGJhY2tOb2RlO1xuICB2YXIgZGlkRmx1c2hQYXNzaXZlRWZmZWN0cyA9IGZsdXNoUGFzc2l2ZUVmZmVjdHMoKTtcblxuICBpZiAoZGlkRmx1c2hQYXNzaXZlRWZmZWN0cykge1xuICAgIC8vIFNvbWV0aGluZyBpbiB0aGUgcGFzc2l2ZSBlZmZlY3QgcGhhc2UgbWF5IGhhdmUgY2FuY2VsZWQgdGhlIGN1cnJlbnQgdGFzay5cbiAgICAvLyBDaGVjayBpZiB0aGUgdGFzayBub2RlIGZvciB0aGlzIHJvb3Qgd2FzIGNoYW5nZWQuXG4gICAgaWYgKHJvb3QuY2FsbGJhY2tOb2RlICE9PSBvcmlnaW5hbENhbGxiYWNrTm9kZSkge1xuICAgICAgLy8gVGhlIGN1cnJlbnQgdGFzayB3YXMgY2FuY2VsZWQuIEV4aXQuIFdlIGRvbid0IG5lZWQgdG8gY2FsbFxuICAgICAgLy8gYGVuc3VyZVJvb3RJc1NjaGVkdWxlZGAgYmVjYXVzZSB0aGUgY2hlY2sgYWJvdmUgaW1wbGllcyBlaXRoZXIgdGhhdFxuICAgICAgLy8gdGhlcmUncyBhIG5ldyB0YXNrLCBvciB0aGF0IHRoZXJlJ3Mgbm8gcmVtYWluaW5nIHdvcmsgb24gdGhpcyByb290LlxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9IC8vIERldGVybWluZSB0aGUgbmV4dCBleHBpcmF0aW9uIHRpbWUgdG8gd29yayBvbiwgdXNpbmcgdGhlIGZpZWxkcyBzdG9yZWRcbiAgLy8gb24gdGhlIHJvb3QuXG5cblxuICB2YXIgbGFuZXMgPSBnZXROZXh0TGFuZXMocm9vdCwgcm9vdCA9PT0gd29ya0luUHJvZ3Jlc3NSb290ID8gd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgOiBOb0xhbmVzKTtcblxuICBpZiAobGFuZXMgPT09IE5vTGFuZXMpIHtcbiAgICAvLyBEZWZlbnNpdmUgY29kaW5nLiBUaGlzIGlzIG5ldmVyIGV4cGVjdGVkIHRvIGhhcHBlbi5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBleGl0U3RhdHVzID0gcmVuZGVyUm9vdENvbmN1cnJlbnQocm9vdCwgbGFuZXMpO1xuXG4gIGlmIChpbmNsdWRlc1NvbWVMYW5lKHdvcmtJblByb2dyZXNzUm9vdEluY2x1ZGVkTGFuZXMsIHdvcmtJblByb2dyZXNzUm9vdFVwZGF0ZWRMYW5lcykpIHtcbiAgICAvLyBUaGUgcmVuZGVyIGluY2x1ZGVkIGxhbmVzIHRoYXQgd2VyZSB1cGRhdGVkIGR1cmluZyB0aGUgcmVuZGVyIHBoYXNlLlxuICAgIC8vIEZvciBleGFtcGxlLCB3aGVuIHVuaGlkaW5nIGEgaGlkZGVuIHRyZWUsIHdlIGluY2x1ZGUgYWxsIHRoZSBsYW5lc1xuICAgIC8vIHRoYXQgd2VyZSBwcmV2aW91c2x5IHNraXBwZWQgd2hlbiB0aGUgdHJlZSB3YXMgaGlkZGVuLiBUaGF0IHNldCBvZlxuICAgIC8vIGxhbmVzIGlzIGEgc3VwZXJzZXQgb2YgdGhlIGxhbmVzIHdlIHN0YXJ0ZWQgcmVuZGVyaW5nIHdpdGguXG4gICAgLy9cbiAgICAvLyBTbyB3ZSdsbCB0aHJvdyBvdXQgdGhlIGN1cnJlbnQgd29yayBhbmQgcmVzdGFydC5cbiAgICBwcmVwYXJlRnJlc2hTdGFjayhyb290LCBOb0xhbmVzKTtcbiAgfSBlbHNlIGlmIChleGl0U3RhdHVzICE9PSBSb290SW5jb21wbGV0ZSkge1xuICAgIGlmIChleGl0U3RhdHVzID09PSBSb290RXJyb3JlZCkge1xuICAgICAgZXhlY3V0aW9uQ29udGV4dCB8PSBSZXRyeUFmdGVyRXJyb3I7IC8vIElmIGFuIGVycm9yIG9jY3VycmVkIGR1cmluZyBoeWRyYXRpb24sXG4gICAgICAvLyBkaXNjYXJkIHNlcnZlciByZXNwb25zZSBhbmQgZmFsbCBiYWNrIHRvIGNsaWVudCBzaWRlIHJlbmRlci5cblxuICAgICAgaWYgKHJvb3QuaHlkcmF0ZSkge1xuICAgICAgICByb290Lmh5ZHJhdGUgPSBmYWxzZTtcbiAgICAgICAgY2xlYXJDb250YWluZXIocm9vdC5jb250YWluZXJJbmZvKTtcbiAgICAgIH0gLy8gSWYgc29tZXRoaW5nIHRocmV3IGFuIGVycm9yLCB0cnkgcmVuZGVyaW5nIG9uZSBtb3JlIHRpbWUuIFdlJ2xsIHJlbmRlclxuICAgICAgLy8gc3luY2hyb25vdXNseSB0byBibG9jayBjb25jdXJyZW50IGRhdGEgbXV0YXRpb25zLCBhbmQgd2UnbGwgaW5jbHVkZXNcbiAgICAgIC8vIGFsbCBwZW5kaW5nIHVwZGF0ZXMgYXJlIGluY2x1ZGVkLiBJZiBpdCBzdGlsbCBmYWlscyBhZnRlciB0aGUgc2Vjb25kXG4gICAgICAvLyBhdHRlbXB0LCB3ZSdsbCBnaXZlIHVwIGFuZCBjb21taXQgdGhlIHJlc3VsdGluZyB0cmVlLlxuXG5cbiAgICAgIGxhbmVzID0gZ2V0TGFuZXNUb1JldHJ5U3luY2hyb25vdXNseU9uRXJyb3Iocm9vdCk7XG5cbiAgICAgIGlmIChsYW5lcyAhPT0gTm9MYW5lcykge1xuICAgICAgICBleGl0U3RhdHVzID0gcmVuZGVyUm9vdFN5bmMocm9vdCwgbGFuZXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChleGl0U3RhdHVzID09PSBSb290RmF0YWxFcnJvcmVkKSB7XG4gICAgICB2YXIgZmF0YWxFcnJvciA9IHdvcmtJblByb2dyZXNzUm9vdEZhdGFsRXJyb3I7XG4gICAgICBwcmVwYXJlRnJlc2hTdGFjayhyb290LCBOb0xhbmVzKTtcbiAgICAgIG1hcmtSb290U3VzcGVuZGVkJDEocm9vdCwgbGFuZXMpO1xuICAgICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QsIG5vdygpKTtcbiAgICAgIHRocm93IGZhdGFsRXJyb3I7XG4gICAgfSAvLyBXZSBub3cgaGF2ZSBhIGNvbnNpc3RlbnQgdHJlZS4gVGhlIG5leHQgc3RlcCBpcyBlaXRoZXIgdG8gY29tbWl0IGl0LFxuICAgIC8vIG9yLCBpZiBzb21ldGhpbmcgc3VzcGVuZGVkLCB3YWl0IHRvIGNvbW1pdCBpdCBhZnRlciBhIHRpbWVvdXQuXG5cblxuICAgIHZhciBmaW5pc2hlZFdvcmsgPSByb290LmN1cnJlbnQuYWx0ZXJuYXRlO1xuICAgIHJvb3QuZmluaXNoZWRXb3JrID0gZmluaXNoZWRXb3JrO1xuICAgIHJvb3QuZmluaXNoZWRMYW5lcyA9IGxhbmVzO1xuICAgIGZpbmlzaENvbmN1cnJlbnRSZW5kZXIocm9vdCwgZXhpdFN0YXR1cywgbGFuZXMpO1xuICB9XG5cbiAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QsIG5vdygpKTtcblxuICBpZiAocm9vdC5jYWxsYmFja05vZGUgPT09IG9yaWdpbmFsQ2FsbGJhY2tOb2RlKSB7XG4gICAgLy8gVGhlIHRhc2sgbm9kZSBzY2hlZHVsZWQgZm9yIHRoaXMgcm9vdCBpcyB0aGUgc2FtZSBvbmUgdGhhdCdzXG4gICAgLy8gY3VycmVudGx5IGV4ZWN1dGVkLiBOZWVkIHRvIHJldHVybiBhIGNvbnRpbnVhdGlvbi5cbiAgICByZXR1cm4gcGVyZm9ybUNvbmN1cnJlbnRXb3JrT25Sb290LmJpbmQobnVsbCwgcm9vdCk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gZmluaXNoQ29uY3VycmVudFJlbmRlcihyb290LCBleGl0U3RhdHVzLCBsYW5lcykge1xuICBzd2l0Y2ggKGV4aXRTdGF0dXMpIHtcbiAgICBjYXNlIFJvb3RJbmNvbXBsZXRlOlxuICAgIGNhc2UgUm9vdEZhdGFsRXJyb3JlZDpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCBcIlJvb3QgZGlkIG5vdCBjb21wbGV0ZS4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC5cIiApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIC8vIEZsb3cga25vd3MgYWJvdXQgaW52YXJpYW50LCBzbyBpdCBjb21wbGFpbnMgaWYgSSBhZGQgYSBicmVha1xuICAgIC8vIHN0YXRlbWVudCwgYnV0IGVzbGludCBkb2Vzbid0IGtub3cgYWJvdXQgaW52YXJpYW50LCBzbyBpdCBjb21wbGFpbnNcbiAgICAvLyBpZiBJIGRvLiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZmFsbHRocm91Z2hcblxuICAgIGNhc2UgUm9vdEVycm9yZWQ6XG4gICAgICB7XG4gICAgICAgIC8vIFdlIHNob3VsZCBoYXZlIGFscmVhZHkgYXR0ZW1wdGVkIHRvIHJldHJ5IHRoaXMgdHJlZS4gSWYgd2UgcmVhY2hlZFxuICAgICAgICAvLyB0aGlzIHBvaW50LCBpdCBlcnJvcmVkIGFnYWluLiBDb21taXQgaXQuXG4gICAgICAgIGNvbW1pdFJvb3Qocm9vdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBSb290U3VzcGVuZGVkOlxuICAgICAge1xuICAgICAgICBtYXJrUm9vdFN1c3BlbmRlZCQxKHJvb3QsIGxhbmVzKTsgLy8gV2UgaGF2ZSBhbiBhY2NlcHRhYmxlIGxvYWRpbmcgc3RhdGUuIFdlIG5lZWQgdG8gZmlndXJlIG91dCBpZiB3ZVxuICAgICAgICAvLyBzaG91bGQgaW1tZWRpYXRlbHkgY29tbWl0IGl0IG9yIHdhaXQgYSBiaXQuXG5cbiAgICAgICAgaWYgKGluY2x1ZGVzT25seVJldHJpZXMobGFuZXMpICYmIC8vIGRvIG5vdCBkZWxheSBpZiB3ZSdyZSBpbnNpZGUgYW4gYWN0KCkgc2NvcGVcbiAgICAgICAgIXNob3VsZEZvcmNlRmx1c2hGYWxsYmFja3NJbkRFVigpKSB7XG4gICAgICAgICAgLy8gVGhpcyByZW5kZXIgb25seSBpbmNsdWRlZCByZXRyaWVzLCBubyB1cGRhdGVzLiBUaHJvdHRsZSBjb21taXR0aW5nXG4gICAgICAgICAgLy8gcmV0cmllcyBzbyB0aGF0IHdlIGRvbid0IHNob3cgdG9vIG1hbnkgbG9hZGluZyBzdGF0ZXMgdG9vIHF1aWNrbHkuXG4gICAgICAgICAgdmFyIG1zVW50aWxUaW1lb3V0ID0gZ2xvYmFsTW9zdFJlY2VudEZhbGxiYWNrVGltZSArIEZBTExCQUNLX1RIUk9UVExFX01TIC0gbm93KCk7IC8vIERvbid0IGJvdGhlciB3aXRoIGEgdmVyeSBzaG9ydCBzdXNwZW5zZSB0aW1lLlxuXG4gICAgICAgICAgaWYgKG1zVW50aWxUaW1lb3V0ID4gMTApIHtcbiAgICAgICAgICAgIHZhciBuZXh0TGFuZXMgPSBnZXROZXh0TGFuZXMocm9vdCwgTm9MYW5lcyk7XG5cbiAgICAgICAgICAgIGlmIChuZXh0TGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICAgICAgICAgICAgLy8gVGhlcmUncyBhZGRpdGlvbmFsIHdvcmsgb24gdGhpcyByb290LlxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHN1c3BlbmRlZExhbmVzID0gcm9vdC5zdXNwZW5kZWRMYW5lcztcblxuICAgICAgICAgICAgaWYgKCFpc1N1YnNldE9mTGFuZXMoc3VzcGVuZGVkTGFuZXMsIGxhbmVzKSkge1xuICAgICAgICAgICAgICAvLyBXZSBzaG91bGQgcHJlZmVyIHRvIHJlbmRlciB0aGUgZmFsbGJhY2sgb2YgYXQgdGhlIGxhc3RcbiAgICAgICAgICAgICAgLy8gc3VzcGVuZGVkIGxldmVsLiBQaW5nIHRoZSBsYXN0IHN1c3BlbmRlZCBsZXZlbCB0byB0cnlcbiAgICAgICAgICAgICAgLy8gcmVuZGVyaW5nIGl0IGFnYWluLlxuICAgICAgICAgICAgICAvLyBGSVhNRTogV2hhdCBpZiB0aGUgc3VzcGVuZGVkIGxhbmVzIGFyZSBJZGxlPyBTaG91bGQgbm90IHJlc3RhcnQuXG4gICAgICAgICAgICAgIHZhciBldmVudFRpbWUgPSByZXF1ZXN0RXZlbnRUaW1lKCk7XG4gICAgICAgICAgICAgIG1hcmtSb290UGluZ2VkKHJvb3QsIHN1c3BlbmRlZExhbmVzKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IC8vIFRoZSByZW5kZXIgaXMgc3VzcGVuZGVkLCBpdCBoYXNuJ3QgdGltZWQgb3V0LCBhbmQgdGhlcmUncyBub1xuICAgICAgICAgICAgLy8gbG93ZXIgcHJpb3JpdHkgd29yayB0byBkby4gSW5zdGVhZCBvZiBjb21taXR0aW5nIHRoZSBmYWxsYmFja1xuICAgICAgICAgICAgLy8gaW1tZWRpYXRlbHksIHdhaXQgZm9yIG1vcmUgZGF0YSB0byBhcnJpdmUuXG5cblxuICAgICAgICAgICAgcm9vdC50aW1lb3V0SGFuZGxlID0gc2NoZWR1bGVUaW1lb3V0KGNvbW1pdFJvb3QuYmluZChudWxsLCByb290KSwgbXNVbnRpbFRpbWVvdXQpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIFRoZSB3b3JrIGV4cGlyZWQuIENvbW1pdCBpbW1lZGlhdGVseS5cblxuXG4gICAgICAgIGNvbW1pdFJvb3Qocm9vdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBSb290U3VzcGVuZGVkV2l0aERlbGF5OlxuICAgICAge1xuICAgICAgICBtYXJrUm9vdFN1c3BlbmRlZCQxKHJvb3QsIGxhbmVzKTtcblxuICAgICAgICBpZiAoaW5jbHVkZXNPbmx5VHJhbnNpdGlvbnMobGFuZXMpKSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBhIHRyYW5zaXRpb24sIHNvIHdlIHNob3VsZCBleGl0IHdpdGhvdXQgY29tbWl0dGluZyBhXG4gICAgICAgICAgLy8gcGxhY2Vob2xkZXIgYW5kIHdpdGhvdXQgc2NoZWR1bGluZyBhIHRpbWVvdXQuIERlbGF5IGluZGVmaW5pdGVseVxuICAgICAgICAgIC8vIHVudGlsIHdlIHJlY2VpdmUgbW9yZSBkYXRhLlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFzaG91bGRGb3JjZUZsdXNoRmFsbGJhY2tzSW5ERVYoKSkge1xuICAgICAgICAgIC8vIFRoaXMgaXMgbm90IGEgdHJhbnNpdGlvbiwgYnV0IHdlIGRpZCB0cmlnZ2VyIGFuIGF2b2lkZWQgc3RhdGUuXG4gICAgICAgICAgLy8gU2NoZWR1bGUgYSBwbGFjZWhvbGRlciB0byBkaXNwbGF5IGFmdGVyIGEgc2hvcnQgZGVsYXksIHVzaW5nIHRoZSBKdXN0XG4gICAgICAgICAgLy8gTm90aWNlYWJsZSBEaWZmZXJlbmNlLlxuICAgICAgICAgIC8vIFRPRE86IElzIHRoZSBKTkQgb3B0aW1pemF0aW9uIHdvcnRoIHRoZSBhZGRlZCBjb21wbGV4aXR5PyBJZiB0aGlzIGlzXG4gICAgICAgICAgLy8gdGhlIG9ubHkgcmVhc29uIHdlIHRyYWNrIHRoZSBldmVudCB0aW1lLCB0aGVuIHByb2JhYmx5IG5vdC5cbiAgICAgICAgICAvLyBDb25zaWRlciByZW1vdmluZy5cbiAgICAgICAgICB2YXIgbW9zdFJlY2VudEV2ZW50VGltZSA9IGdldE1vc3RSZWNlbnRFdmVudFRpbWUocm9vdCwgbGFuZXMpO1xuICAgICAgICAgIHZhciBldmVudFRpbWVNcyA9IG1vc3RSZWNlbnRFdmVudFRpbWU7XG4gICAgICAgICAgdmFyIHRpbWVFbGFwc2VkTXMgPSBub3coKSAtIGV2ZW50VGltZU1zO1xuXG4gICAgICAgICAgdmFyIF9tc1VudGlsVGltZW91dCA9IGpuZCh0aW1lRWxhcHNlZE1zKSAtIHRpbWVFbGFwc2VkTXM7IC8vIERvbid0IGJvdGhlciB3aXRoIGEgdmVyeSBzaG9ydCBzdXNwZW5zZSB0aW1lLlxuXG5cbiAgICAgICAgICBpZiAoX21zVW50aWxUaW1lb3V0ID4gMTApIHtcbiAgICAgICAgICAgIC8vIEluc3RlYWQgb2YgY29tbWl0dGluZyB0aGUgZmFsbGJhY2sgaW1tZWRpYXRlbHksIHdhaXQgZm9yIG1vcmUgZGF0YVxuICAgICAgICAgICAgLy8gdG8gYXJyaXZlLlxuICAgICAgICAgICAgcm9vdC50aW1lb3V0SGFuZGxlID0gc2NoZWR1bGVUaW1lb3V0KGNvbW1pdFJvb3QuYmluZChudWxsLCByb290KSwgX21zVW50aWxUaW1lb3V0KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBDb21taXQgdGhlIHBsYWNlaG9sZGVyLlxuXG5cbiAgICAgICAgY29tbWl0Um9vdChyb290KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIFJvb3RDb21wbGV0ZWQ6XG4gICAgICB7XG4gICAgICAgIC8vIFRoZSB3b3JrIGNvbXBsZXRlZC4gUmVhZHkgdG8gY29tbWl0LlxuICAgICAgICBjb21taXRSb290KHJvb3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvciggXCJVbmtub3duIHJvb3QgZXhpdCBzdGF0dXMuXCIgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBtYXJrUm9vdFN1c3BlbmRlZCQxKHJvb3QsIHN1c3BlbmRlZExhbmVzKSB7XG4gIC8vIFdoZW4gc3VzcGVuZGluZywgd2Ugc2hvdWxkIGFsd2F5cyBleGNsdWRlIGxhbmVzIHRoYXQgd2VyZSBwaW5nZWQgb3IgKG1vcmVcbiAgLy8gcmFyZWx5LCBzaW5jZSB3ZSB0cnkgdG8gYXZvaWQgaXQpIHVwZGF0ZWQgZHVyaW5nIHRoZSByZW5kZXIgcGhhc2UuXG4gIC8vIFRPRE86IExvbCBtYXliZSB0aGVyZSdzIGEgYmV0dGVyIHdheSB0byBmYWN0b3IgdGhpcyBiZXNpZGVzIHRoaXNcbiAgLy8gb2Jub3hpb3VzbHkgbmFtZWQgZnVuY3Rpb24gOilcbiAgc3VzcGVuZGVkTGFuZXMgPSByZW1vdmVMYW5lcyhzdXNwZW5kZWRMYW5lcywgd29ya0luUHJvZ3Jlc3NSb290UGluZ2VkTGFuZXMpO1xuICBzdXNwZW5kZWRMYW5lcyA9IHJlbW92ZUxhbmVzKHN1c3BlbmRlZExhbmVzLCB3b3JrSW5Qcm9ncmVzc1Jvb3RVcGRhdGVkTGFuZXMpO1xuICBtYXJrUm9vdFN1c3BlbmRlZChyb290LCBzdXNwZW5kZWRMYW5lcyk7XG59IC8vIFRoaXMgaXMgdGhlIGVudHJ5IHBvaW50IGZvciBzeW5jaHJvbm91cyB0YXNrcyB0aGF0IGRvbid0IGdvXG4vLyB0aHJvdWdoIFNjaGVkdWxlclxuXG5cbmZ1bmN0aW9uIHBlcmZvcm1TeW5jV29ya09uUm9vdChyb290KSB7XG4gIGlmICghKChleGVjdXRpb25Db250ZXh0ICYgKFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgPT09IE5vQ29udGV4dCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJTaG91bGQgbm90IGFscmVhZHkgYmUgd29ya2luZy5cIiApO1xuICAgIH1cbiAgfVxuXG4gIGZsdXNoUGFzc2l2ZUVmZmVjdHMoKTtcbiAgdmFyIGxhbmVzO1xuICB2YXIgZXhpdFN0YXR1cztcblxuICBpZiAocm9vdCA9PT0gd29ya0luUHJvZ3Jlc3NSb290ICYmIGluY2x1ZGVzU29tZUxhbmUocm9vdC5leHBpcmVkTGFuZXMsIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzKSkge1xuICAgIC8vIFRoZXJlJ3MgYSBwYXJ0aWFsIHRyZWUsIGFuZCBhdCBsZWFzdCBvbmUgb2YgaXRzIGxhbmVzIGhhcyBleHBpcmVkLiBGaW5pc2hcbiAgICAvLyByZW5kZXJpbmcgaXQgYmVmb3JlIHJlbmRlcmluZyB0aGUgcmVzdCBvZiB0aGUgZXhwaXJlZCB3b3JrLlxuICAgIGxhbmVzID0gd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXM7XG4gICAgZXhpdFN0YXR1cyA9IHJlbmRlclJvb3RTeW5jKHJvb3QsIGxhbmVzKTtcblxuICAgIGlmIChpbmNsdWRlc1NvbWVMYW5lKHdvcmtJblByb2dyZXNzUm9vdEluY2x1ZGVkTGFuZXMsIHdvcmtJblByb2dyZXNzUm9vdFVwZGF0ZWRMYW5lcykpIHtcbiAgICAgIC8vIFRoZSByZW5kZXIgaW5jbHVkZWQgbGFuZXMgdGhhdCB3ZXJlIHVwZGF0ZWQgZHVyaW5nIHRoZSByZW5kZXIgcGhhc2UuXG4gICAgICAvLyBGb3IgZXhhbXBsZSwgd2hlbiB1bmhpZGluZyBhIGhpZGRlbiB0cmVlLCB3ZSBpbmNsdWRlIGFsbCB0aGUgbGFuZXNcbiAgICAgIC8vIHRoYXQgd2VyZSBwcmV2aW91c2x5IHNraXBwZWQgd2hlbiB0aGUgdHJlZSB3YXMgaGlkZGVuLiBUaGF0IHNldCBvZlxuICAgICAgLy8gbGFuZXMgaXMgYSBzdXBlcnNldCBvZiB0aGUgbGFuZXMgd2Ugc3RhcnRlZCByZW5kZXJpbmcgd2l0aC5cbiAgICAgIC8vXG4gICAgICAvLyBOb3RlIHRoYXQgdGhpcyBvbmx5IGhhcHBlbnMgd2hlbiBwYXJ0IG9mIHRoZSB0cmVlIGlzIHJlbmRlcmVkXG4gICAgICAvLyBjb25jdXJyZW50bHkuIElmIHRoZSB3aG9sZSB0cmVlIGlzIHJlbmRlcmVkIHN5bmNocm9ub3VzbHksIHRoZW4gdGhlcmVcbiAgICAgIC8vIGFyZSBubyBpbnRlcmxlYXZlZCBldmVudHMuXG4gICAgICBsYW5lcyA9IGdldE5leHRMYW5lcyhyb290LCBsYW5lcyk7XG4gICAgICBleGl0U3RhdHVzID0gcmVuZGVyUm9vdFN5bmMocm9vdCwgbGFuZXMpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsYW5lcyA9IGdldE5leHRMYW5lcyhyb290LCBOb0xhbmVzKTtcbiAgICBleGl0U3RhdHVzID0gcmVuZGVyUm9vdFN5bmMocm9vdCwgbGFuZXMpO1xuICB9XG5cbiAgaWYgKHJvb3QudGFnICE9PSBMZWdhY3lSb290ICYmIGV4aXRTdGF0dXMgPT09IFJvb3RFcnJvcmVkKSB7XG4gICAgZXhlY3V0aW9uQ29udGV4dCB8PSBSZXRyeUFmdGVyRXJyb3I7IC8vIElmIGFuIGVycm9yIG9jY3VycmVkIGR1cmluZyBoeWRyYXRpb24sXG4gICAgLy8gZGlzY2FyZCBzZXJ2ZXIgcmVzcG9uc2UgYW5kIGZhbGwgYmFjayB0byBjbGllbnQgc2lkZSByZW5kZXIuXG5cbiAgICBpZiAocm9vdC5oeWRyYXRlKSB7XG4gICAgICByb290Lmh5ZHJhdGUgPSBmYWxzZTtcbiAgICAgIGNsZWFyQ29udGFpbmVyKHJvb3QuY29udGFpbmVySW5mbyk7XG4gICAgfSAvLyBJZiBzb21ldGhpbmcgdGhyZXcgYW4gZXJyb3IsIHRyeSByZW5kZXJpbmcgb25lIG1vcmUgdGltZS4gV2UnbGwgcmVuZGVyXG4gICAgLy8gc3luY2hyb25vdXNseSB0byBibG9jayBjb25jdXJyZW50IGRhdGEgbXV0YXRpb25zLCBhbmQgd2UnbGwgaW5jbHVkZXNcbiAgICAvLyBhbGwgcGVuZGluZyB1cGRhdGVzIGFyZSBpbmNsdWRlZC4gSWYgaXQgc3RpbGwgZmFpbHMgYWZ0ZXIgdGhlIHNlY29uZFxuICAgIC8vIGF0dGVtcHQsIHdlJ2xsIGdpdmUgdXAgYW5kIGNvbW1pdCB0aGUgcmVzdWx0aW5nIHRyZWUuXG5cblxuICAgIGxhbmVzID0gZ2V0TGFuZXNUb1JldHJ5U3luY2hyb25vdXNseU9uRXJyb3Iocm9vdCk7XG5cbiAgICBpZiAobGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICAgIGV4aXRTdGF0dXMgPSByZW5kZXJSb290U3luYyhyb290LCBsYW5lcyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGV4aXRTdGF0dXMgPT09IFJvb3RGYXRhbEVycm9yZWQpIHtcbiAgICB2YXIgZmF0YWxFcnJvciA9IHdvcmtJblByb2dyZXNzUm9vdEZhdGFsRXJyb3I7XG4gICAgcHJlcGFyZUZyZXNoU3RhY2socm9vdCwgTm9MYW5lcyk7XG4gICAgbWFya1Jvb3RTdXNwZW5kZWQkMShyb290LCBsYW5lcyk7XG4gICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QsIG5vdygpKTtcbiAgICB0aHJvdyBmYXRhbEVycm9yO1xuICB9IC8vIFdlIG5vdyBoYXZlIGEgY29uc2lzdGVudCB0cmVlLiBCZWNhdXNlIHRoaXMgaXMgYSBzeW5jIHJlbmRlciwgd2VcbiAgLy8gd2lsbCBjb21taXQgaXQgZXZlbiBpZiBzb21ldGhpbmcgc3VzcGVuZGVkLlxuXG5cbiAgdmFyIGZpbmlzaGVkV29yayA9IHJvb3QuY3VycmVudC5hbHRlcm5hdGU7XG4gIHJvb3QuZmluaXNoZWRXb3JrID0gZmluaXNoZWRXb3JrO1xuICByb290LmZpbmlzaGVkTGFuZXMgPSBsYW5lcztcbiAgY29tbWl0Um9vdChyb290KTsgLy8gQmVmb3JlIGV4aXRpbmcsIG1ha2Ugc3VyZSB0aGVyZSdzIGEgY2FsbGJhY2sgc2NoZWR1bGVkIGZvciB0aGUgbmV4dFxuICAvLyBwZW5kaW5nIGxldmVsLlxuXG4gIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290LCBub3coKSk7XG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gZmx1c2hEaXNjcmV0ZVVwZGF0ZXMoKSB7XG4gIC8vIFRPRE86IFNob3VsZCBiZSBhYmxlIHRvIGZsdXNoIGluc2lkZSBiYXRjaGVkVXBkYXRlcywgYnV0IG5vdCBpbnNpZGUgYGFjdGAuXG4gIC8vIEhvd2V2ZXIsIGBhY3RgIHVzZXMgYGJhdGNoZWRVcGRhdGVzYCwgc28gdGhlcmUncyBubyB3YXkgdG8gZGlzdGluZ3Vpc2hcbiAgLy8gdGhvc2UgdHdvIGNhc2VzLiBOZWVkIHRvIGZpeCB0aGlzIGJlZm9yZSBleHBvc2luZyBmbHVzaERpc2NyZXRlVXBkYXRlc1xuICAvLyBhcyBhIHB1YmxpYyBBUEkuXG4gIGlmICgoZXhlY3V0aW9uQ29udGV4dCAmIChCYXRjaGVkQ29udGV4dCB8IFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgIT09IE5vQ29udGV4dCkge1xuICAgIHtcbiAgICAgIGlmICgoZXhlY3V0aW9uQ29udGV4dCAmIFJlbmRlckNvbnRleHQpICE9PSBOb0NvbnRleHQpIHtcbiAgICAgICAgZXJyb3IoJ3Vuc3RhYmxlX2ZsdXNoRGlzY3JldGVVcGRhdGVzOiBDYW5ub3QgZmx1c2ggdXBkYXRlcyB3aGVuIFJlYWN0IGlzICcgKyAnYWxyZWFkeSByZW5kZXJpbmcuJyk7XG4gICAgICB9XG4gICAgfSAvLyBXZSdyZSBhbHJlYWR5IHJlbmRlcmluZywgc28gd2UgY2FuJ3Qgc3luY2hyb25vdXNseSBmbHVzaCBwZW5kaW5nIHdvcmsuXG4gICAgLy8gVGhpcyBpcyBwcm9iYWJseSBhIG5lc3RlZCBldmVudCBkaXNwYXRjaCB0cmlnZ2VyZWQgYnkgYSBsaWZlY3ljbGUvZWZmZWN0LFxuICAgIC8vIGxpa2UgYGVsLmZvY3VzKClgLiBFeGl0LlxuXG5cbiAgICByZXR1cm47XG4gIH1cblxuICBmbHVzaFBlbmRpbmdEaXNjcmV0ZVVwZGF0ZXMoKTsgLy8gSWYgdGhlIGRpc2NyZXRlIHVwZGF0ZXMgc2NoZWR1bGVkIHBhc3NpdmUgZWZmZWN0cywgZmx1c2ggdGhlbSBub3cgc28gdGhhdFxuICAvLyB0aGV5IGZpcmUgYmVmb3JlIHRoZSBuZXh0IHNlcmlhbCBldmVudC5cblxuICBmbHVzaFBhc3NpdmVFZmZlY3RzKCk7XG59XG5cbmZ1bmN0aW9uIGZsdXNoUGVuZGluZ0Rpc2NyZXRlVXBkYXRlcygpIHtcbiAgaWYgKHJvb3RzV2l0aFBlbmRpbmdEaXNjcmV0ZVVwZGF0ZXMgIT09IG51bGwpIHtcbiAgICAvLyBGb3IgZWFjaCByb290IHdpdGggcGVuZGluZyBkaXNjcmV0ZSB1cGRhdGVzLCBzY2hlZHVsZSBhIGNhbGxiYWNrIHRvXG4gICAgLy8gaW1tZWRpYXRlbHkgZmx1c2ggdGhlbS5cbiAgICB2YXIgcm9vdHMgPSByb290c1dpdGhQZW5kaW5nRGlzY3JldGVVcGRhdGVzO1xuICAgIHJvb3RzV2l0aFBlbmRpbmdEaXNjcmV0ZVVwZGF0ZXMgPSBudWxsO1xuICAgIHJvb3RzLmZvckVhY2goZnVuY3Rpb24gKHJvb3QpIHtcbiAgICAgIG1hcmtEaXNjcmV0ZVVwZGF0ZXNFeHBpcmVkKHJvb3QpO1xuICAgICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QsIG5vdygpKTtcbiAgICB9KTtcbiAgfSAvLyBOb3cgZmx1c2ggdGhlIGltbWVkaWF0ZSBxdWV1ZS5cblxuXG4gIGZsdXNoU3luY0NhbGxiYWNrUXVldWUoKTtcbn1cblxuZnVuY3Rpb24gYmF0Y2hlZFVwZGF0ZXMkMShmbiwgYSkge1xuICB2YXIgcHJldkV4ZWN1dGlvbkNvbnRleHQgPSBleGVjdXRpb25Db250ZXh0O1xuICBleGVjdXRpb25Db250ZXh0IHw9IEJhdGNoZWRDb250ZXh0O1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGZuKGEpO1xuICB9IGZpbmFsbHkge1xuICAgIGV4ZWN1dGlvbkNvbnRleHQgPSBwcmV2RXhlY3V0aW9uQ29udGV4dDtcblxuICAgIGlmIChleGVjdXRpb25Db250ZXh0ID09PSBOb0NvbnRleHQpIHtcbiAgICAgIC8vIEZsdXNoIHRoZSBpbW1lZGlhdGUgY2FsbGJhY2tzIHRoYXQgd2VyZSBzY2hlZHVsZWQgZHVyaW5nIHRoaXMgYmF0Y2hcbiAgICAgIHJlc2V0UmVuZGVyVGltZXIoKTtcbiAgICAgIGZsdXNoU3luY0NhbGxiYWNrUXVldWUoKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGJhdGNoZWRFdmVudFVwZGF0ZXMkMShmbiwgYSkge1xuICB2YXIgcHJldkV4ZWN1dGlvbkNvbnRleHQgPSBleGVjdXRpb25Db250ZXh0O1xuICBleGVjdXRpb25Db250ZXh0IHw9IEV2ZW50Q29udGV4dDtcblxuICB0cnkge1xuICAgIHJldHVybiBmbihhKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBleGVjdXRpb25Db250ZXh0ID0gcHJldkV4ZWN1dGlvbkNvbnRleHQ7XG5cbiAgICBpZiAoZXhlY3V0aW9uQ29udGV4dCA9PT0gTm9Db250ZXh0KSB7XG4gICAgICAvLyBGbHVzaCB0aGUgaW1tZWRpYXRlIGNhbGxiYWNrcyB0aGF0IHdlcmUgc2NoZWR1bGVkIGR1cmluZyB0aGlzIGJhdGNoXG4gICAgICByZXNldFJlbmRlclRpbWVyKCk7XG4gICAgICBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlKCk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBkaXNjcmV0ZVVwZGF0ZXMkMShmbiwgYSwgYiwgYywgZCkge1xuICB2YXIgcHJldkV4ZWN1dGlvbkNvbnRleHQgPSBleGVjdXRpb25Db250ZXh0O1xuICBleGVjdXRpb25Db250ZXh0IHw9IERpc2NyZXRlRXZlbnRDb250ZXh0O1xuXG4gIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHJ1bldpdGhQcmlvcml0eSQxKFVzZXJCbG9ja2luZ1ByaW9yaXR5JDIsIGZuLmJpbmQobnVsbCwgYSwgYiwgYywgZCkpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBleGVjdXRpb25Db250ZXh0ID0gcHJldkV4ZWN1dGlvbkNvbnRleHQ7XG5cbiAgICAgIGlmIChleGVjdXRpb25Db250ZXh0ID09PSBOb0NvbnRleHQpIHtcbiAgICAgICAgLy8gRmx1c2ggdGhlIGltbWVkaWF0ZSBjYWxsYmFja3MgdGhhdCB3ZXJlIHNjaGVkdWxlZCBkdXJpbmcgdGhpcyBiYXRjaFxuICAgICAgICByZXNldFJlbmRlclRpbWVyKCk7XG4gICAgICAgIGZsdXNoU3luY0NhbGxiYWNrUXVldWUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHVuYmF0Y2hlZFVwZGF0ZXMoZm4sIGEpIHtcbiAgdmFyIHByZXZFeGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcbiAgZXhlY3V0aW9uQ29udGV4dCAmPSB+QmF0Y2hlZENvbnRleHQ7XG4gIGV4ZWN1dGlvbkNvbnRleHQgfD0gTGVnYWN5VW5iYXRjaGVkQ29udGV4dDtcblxuICB0cnkge1xuICAgIHJldHVybiBmbihhKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBleGVjdXRpb25Db250ZXh0ID0gcHJldkV4ZWN1dGlvbkNvbnRleHQ7XG5cbiAgICBpZiAoZXhlY3V0aW9uQ29udGV4dCA9PT0gTm9Db250ZXh0KSB7XG4gICAgICAvLyBGbHVzaCB0aGUgaW1tZWRpYXRlIGNhbGxiYWNrcyB0aGF0IHdlcmUgc2NoZWR1bGVkIGR1cmluZyB0aGlzIGJhdGNoXG4gICAgICByZXNldFJlbmRlclRpbWVyKCk7XG4gICAgICBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlKCk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBmbHVzaFN5bmMoZm4sIGEpIHtcbiAgdmFyIHByZXZFeGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcblxuICBpZiAoKHByZXZFeGVjdXRpb25Db250ZXh0ICYgKFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgIT09IE5vQ29udGV4dCkge1xuICAgIHtcbiAgICAgIGVycm9yKCdmbHVzaFN5bmMgd2FzIGNhbGxlZCBmcm9tIGluc2lkZSBhIGxpZmVjeWNsZSBtZXRob2QuIFJlYWN0IGNhbm5vdCAnICsgJ2ZsdXNoIHdoZW4gUmVhY3QgaXMgYWxyZWFkeSByZW5kZXJpbmcuIENvbnNpZGVyIG1vdmluZyB0aGlzIGNhbGwgdG8gJyArICdhIHNjaGVkdWxlciB0YXNrIG9yIG1pY3JvIHRhc2suJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZuKGEpO1xuICB9XG5cbiAgZXhlY3V0aW9uQ29udGV4dCB8PSBCYXRjaGVkQ29udGV4dDtcblxuICB7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChmbikge1xuICAgICAgICByZXR1cm4gcnVuV2l0aFByaW9yaXR5JDEoSW1tZWRpYXRlUHJpb3JpdHkkMSwgZm4uYmluZChudWxsLCBhKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBleGVjdXRpb25Db250ZXh0ID0gcHJldkV4ZWN1dGlvbkNvbnRleHQ7IC8vIEZsdXNoIHRoZSBpbW1lZGlhdGUgY2FsbGJhY2tzIHRoYXQgd2VyZSBzY2hlZHVsZWQgZHVyaW5nIHRoaXMgYmF0Y2guXG4gICAgICAvLyBOb3RlIHRoYXQgdGhpcyB3aWxsIGhhcHBlbiBldmVuIGlmIGJhdGNoZWRVcGRhdGVzIGlzIGhpZ2hlciB1cFxuICAgICAgLy8gdGhlIHN0YWNrLlxuXG4gICAgICBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlKCk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBwdXNoUmVuZGVyTGFuZXMoZmliZXIsIGxhbmVzKSB7XG4gIHB1c2goc3VidHJlZVJlbmRlckxhbmVzQ3Vyc29yLCBzdWJ0cmVlUmVuZGVyTGFuZXMsIGZpYmVyKTtcbiAgc3VidHJlZVJlbmRlckxhbmVzID0gbWVyZ2VMYW5lcyhzdWJ0cmVlUmVuZGVyTGFuZXMsIGxhbmVzKTtcbiAgd29ya0luUHJvZ3Jlc3NSb290SW5jbHVkZWRMYW5lcyA9IG1lcmdlTGFuZXMod29ya0luUHJvZ3Jlc3NSb290SW5jbHVkZWRMYW5lcywgbGFuZXMpO1xufVxuZnVuY3Rpb24gcG9wUmVuZGVyTGFuZXMoZmliZXIpIHtcbiAgc3VidHJlZVJlbmRlckxhbmVzID0gc3VidHJlZVJlbmRlckxhbmVzQ3Vyc29yLmN1cnJlbnQ7XG4gIHBvcChzdWJ0cmVlUmVuZGVyTGFuZXNDdXJzb3IsIGZpYmVyKTtcbn1cblxuZnVuY3Rpb24gcHJlcGFyZUZyZXNoU3RhY2socm9vdCwgbGFuZXMpIHtcbiAgcm9vdC5maW5pc2hlZFdvcmsgPSBudWxsO1xuICByb290LmZpbmlzaGVkTGFuZXMgPSBOb0xhbmVzO1xuICB2YXIgdGltZW91dEhhbmRsZSA9IHJvb3QudGltZW91dEhhbmRsZTtcblxuICBpZiAodGltZW91dEhhbmRsZSAhPT0gbm9UaW1lb3V0KSB7XG4gICAgLy8gVGhlIHJvb3QgcHJldmlvdXMgc3VzcGVuZGVkIGFuZCBzY2hlZHVsZWQgYSB0aW1lb3V0IHRvIGNvbW1pdCBhIGZhbGxiYWNrXG4gICAgLy8gc3RhdGUuIE5vdyB0aGF0IHdlIGhhdmUgYWRkaXRpb25hbCB3b3JrLCBjYW5jZWwgdGhlIHRpbWVvdXQuXG4gICAgcm9vdC50aW1lb3V0SGFuZGxlID0gbm9UaW1lb3V0OyAvLyAkRmxvd0ZpeE1lIENvbXBsYWlucyBub1RpbWVvdXQgaXMgbm90IGEgVGltZW91dElELCBkZXNwaXRlIHRoZSBjaGVjayBhYm92ZVxuXG4gICAgY2FuY2VsVGltZW91dCh0aW1lb3V0SGFuZGxlKTtcbiAgfVxuXG4gIGlmICh3b3JrSW5Qcm9ncmVzcyAhPT0gbnVsbCkge1xuICAgIHZhciBpbnRlcnJ1cHRlZFdvcmsgPSB3b3JrSW5Qcm9ncmVzcy5yZXR1cm47XG5cbiAgICB3aGlsZSAoaW50ZXJydXB0ZWRXb3JrICE9PSBudWxsKSB7XG4gICAgICB1bndpbmRJbnRlcnJ1cHRlZFdvcmsoaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgIGludGVycnVwdGVkV29yayA9IGludGVycnVwdGVkV29yay5yZXR1cm47XG4gICAgfVxuICB9XG5cbiAgd29ya0luUHJvZ3Jlc3NSb290ID0gcm9vdDtcbiAgd29ya0luUHJvZ3Jlc3MgPSBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhyb290LmN1cnJlbnQsIG51bGwpO1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyA9IHN1YnRyZWVSZW5kZXJMYW5lcyA9IHdvcmtJblByb2dyZXNzUm9vdEluY2x1ZGVkTGFuZXMgPSBsYW5lcztcbiAgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IFJvb3RJbmNvbXBsZXRlO1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3RGYXRhbEVycm9yID0gbnVsbDtcbiAgd29ya0luUHJvZ3Jlc3NSb290U2tpcHBlZExhbmVzID0gTm9MYW5lcztcbiAgd29ya0luUHJvZ3Jlc3NSb290VXBkYXRlZExhbmVzID0gTm9MYW5lcztcbiAgd29ya0luUHJvZ3Jlc3NSb290UGluZ2VkTGFuZXMgPSBOb0xhbmVzO1xuXG4gIHtcbiAgICBzcGF3bmVkV29ya0R1cmluZ1JlbmRlciA9IG51bGw7XG4gIH1cblxuICB7XG4gICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MuZGlzY2FyZFBlbmRpbmdXYXJuaW5ncygpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUVycm9yKHJvb3QsIHRocm93blZhbHVlKSB7XG4gIGRvIHtcbiAgICB2YXIgZXJyb3JlZFdvcmsgPSB3b3JrSW5Qcm9ncmVzcztcblxuICAgIHRyeSB7XG4gICAgICAvLyBSZXNldCBtb2R1bGUtbGV2ZWwgc3RhdGUgdGhhdCB3YXMgc2V0IGR1cmluZyB0aGUgcmVuZGVyIHBoYXNlLlxuICAgICAgcmVzZXRDb250ZXh0RGVwZW5kZW5jaWVzKCk7XG4gICAgICByZXNldEhvb2tzQWZ0ZXJUaHJvdygpO1xuICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTsgLy8gVE9ETzogSSBmb3VuZCBhbmQgYWRkZWQgdGhpcyBtaXNzaW5nIGxpbmUgd2hpbGUgaW52ZXN0aWdhdGluZyBhXG4gICAgICAvLyBzZXBhcmF0ZSBpc3N1ZS4gV3JpdGUgYSByZWdyZXNzaW9uIHRlc3QgdXNpbmcgc3RyaW5nIHJlZnMuXG5cbiAgICAgIFJlYWN0Q3VycmVudE93bmVyJDIuY3VycmVudCA9IG51bGw7XG5cbiAgICAgIGlmIChlcnJvcmVkV29yayA9PT0gbnVsbCB8fCBlcnJvcmVkV29yay5yZXR1cm4gPT09IG51bGwpIHtcbiAgICAgICAgLy8gRXhwZWN0ZWQgdG8gYmUgd29ya2luZyBvbiBhIG5vbi1yb290IGZpYmVyLiBUaGlzIGlzIGEgZmF0YWwgZXJyb3JcbiAgICAgICAgLy8gYmVjYXVzZSB0aGVyZSdzIG5vIGFuY2VzdG9yIHRoYXQgY2FuIGhhbmRsZSBpdDsgdGhlIHJvb3QgaXNcbiAgICAgICAgLy8gc3VwcG9zZWQgdG8gY2FwdHVyZSBhbGwgZXJyb3JzIHRoYXQgd2VyZW4ndCBjYXVnaHQgYnkgYW4gZXJyb3JcbiAgICAgICAgLy8gYm91bmRhcnkuXG4gICAgICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290RmF0YWxFcnJvcmVkO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RGYXRhbEVycm9yID0gdGhyb3duVmFsdWU7IC8vIFNldCBgd29ya0luUHJvZ3Jlc3NgIHRvIG51bGwuIFRoaXMgcmVwcmVzZW50cyBhZHZhbmNpbmcgdG8gdGhlIG5leHRcbiAgICAgICAgLy8gc2libGluZywgb3IgdGhlIHBhcmVudCBpZiB0aGVyZSBhcmUgbm8gc2libGluZ3MuIEJ1dCBzaW5jZSB0aGUgcm9vdFxuICAgICAgICAvLyBoYXMgbm8gc2libGluZ3Mgbm9yIGEgcGFyZW50LCB3ZSBzZXQgaXQgdG8gbnVsbC4gVXN1YWxseSB0aGlzIGlzXG4gICAgICAgIC8vIGhhbmRsZWQgYnkgYGNvbXBsZXRlVW5pdE9mV29ya2Agb3IgYHVud2luZFdvcmtgLCBidXQgc2luY2Ugd2UncmVcbiAgICAgICAgLy8gaW50ZW50aW9uYWxseSBub3QgY2FsbGluZyB0aG9zZSwgd2UgbmVlZCBzZXQgaXQgaGVyZS5cbiAgICAgICAgLy8gVE9ETzogQ29uc2lkZXIgY2FsbGluZyBgdW53aW5kV29ya2AgdG8gcG9wIHRoZSBjb250ZXh0cy5cblxuICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IG51bGw7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGVuYWJsZVByb2ZpbGVyVGltZXIgJiYgZXJyb3JlZFdvcmsubW9kZSAmIFByb2ZpbGVNb2RlKSB7XG4gICAgICAgIC8vIFJlY29yZCB0aGUgdGltZSBzcGVudCByZW5kZXJpbmcgYmVmb3JlIGFuIGVycm9yIHdhcyB0aHJvd24uIFRoaXNcbiAgICAgICAgLy8gYXZvaWRzIGluYWNjdXJhdGUgUHJvZmlsZXIgZHVyYXRpb25zIGluIHRoZSBjYXNlIG9mIGFcbiAgICAgICAgLy8gc3VzcGVuZGVkIHJlbmRlci5cbiAgICAgICAgc3RvcFByb2ZpbGVyVGltZXJJZlJ1bm5pbmdBbmRSZWNvcmREZWx0YShlcnJvcmVkV29yaywgdHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIHRocm93RXhjZXB0aW9uKHJvb3QsIGVycm9yZWRXb3JrLnJldHVybiwgZXJyb3JlZFdvcmssIHRocm93blZhbHVlLCB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyk7XG4gICAgICBjb21wbGV0ZVVuaXRPZldvcmsoZXJyb3JlZFdvcmspO1xuICAgIH0gY2F0Y2ggKHlldEFub3RoZXJUaHJvd25WYWx1ZSkge1xuICAgICAgLy8gU29tZXRoaW5nIGluIHRoZSByZXR1cm4gcGF0aCBhbHNvIHRocmV3LlxuICAgICAgdGhyb3duVmFsdWUgPSB5ZXRBbm90aGVyVGhyb3duVmFsdWU7XG5cbiAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcyA9PT0gZXJyb3JlZFdvcmsgJiYgZXJyb3JlZFdvcmsgIT09IG51bGwpIHtcbiAgICAgICAgLy8gSWYgdGhpcyBib3VuZGFyeSBoYXMgYWxyZWFkeSBlcnJvcmVkLCB0aGVuIHdlIGhhZCB0cm91YmxlIHByb2Nlc3NpbmdcbiAgICAgICAgLy8gdGhlIGVycm9yLiBCdWJibGUgaXQgdG8gdGhlIG5leHQgYm91bmRhcnkuXG4gICAgICAgIGVycm9yZWRXb3JrID0gZXJyb3JlZFdvcmsucmV0dXJuO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IGVycm9yZWRXb3JrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXJyb3JlZFdvcmsgPSB3b3JrSW5Qcm9ncmVzcztcbiAgICAgIH1cblxuICAgICAgY29udGludWU7XG4gICAgfSAvLyBSZXR1cm4gdG8gdGhlIG5vcm1hbCB3b3JrIGxvb3AuXG5cblxuICAgIHJldHVybjtcbiAgfSB3aGlsZSAodHJ1ZSk7XG59XG5cbmZ1bmN0aW9uIHB1c2hEaXNwYXRjaGVyKCkge1xuICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDIuY3VycmVudDtcbiAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQyLmN1cnJlbnQgPSBDb250ZXh0T25seURpc3BhdGNoZXI7XG5cbiAgaWYgKHByZXZEaXNwYXRjaGVyID09PSBudWxsKSB7XG4gICAgLy8gVGhlIFJlYWN0IGlzb21vcnBoaWMgcGFja2FnZSBkb2VzIG5vdCBpbmNsdWRlIGEgZGVmYXVsdCBkaXNwYXRjaGVyLlxuICAgIC8vIEluc3RlYWQgdGhlIGZpcnN0IHJlbmRlcmVyIHdpbGwgbGF6aWx5IGF0dGFjaCBvbmUsIGluIG9yZGVyIHRvIGdpdmVcbiAgICAvLyBuaWNlciBlcnJvciBtZXNzYWdlcy5cbiAgICByZXR1cm4gQ29udGV4dE9ubHlEaXNwYXRjaGVyO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBwcmV2RGlzcGF0Y2hlcjtcbiAgfVxufVxuXG5mdW5jdGlvbiBwb3BEaXNwYXRjaGVyKHByZXZEaXNwYXRjaGVyKSB7XG4gIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMi5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG59XG5cbmZ1bmN0aW9uIHB1c2hJbnRlcmFjdGlvbnMocm9vdCkge1xuICB7XG4gICAgdmFyIHByZXZJbnRlcmFjdGlvbnMgPSB0cmFjaW5nLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQ7XG4gICAgdHJhY2luZy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50ID0gcm9vdC5tZW1vaXplZEludGVyYWN0aW9ucztcbiAgICByZXR1cm4gcHJldkludGVyYWN0aW9ucztcbiAgfVxufVxuXG5mdW5jdGlvbiBwb3BJbnRlcmFjdGlvbnMocHJldkludGVyYWN0aW9ucykge1xuICB7XG4gICAgdHJhY2luZy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50ID0gcHJldkludGVyYWN0aW9ucztcbiAgfVxufVxuXG5mdW5jdGlvbiBtYXJrQ29tbWl0VGltZU9mRmFsbGJhY2soKSB7XG4gIGdsb2JhbE1vc3RSZWNlbnRGYWxsYmFja1RpbWUgPSBub3coKTtcbn1cbmZ1bmN0aW9uIG1hcmtTa2lwcGVkVXBkYXRlTGFuZXMobGFuZSkge1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3RTa2lwcGVkTGFuZXMgPSBtZXJnZUxhbmVzKGxhbmUsIHdvcmtJblByb2dyZXNzUm9vdFNraXBwZWRMYW5lcyk7XG59XG5mdW5jdGlvbiByZW5kZXJEaWRTdXNwZW5kKCkge1xuICBpZiAod29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9PT0gUm9vdEluY29tcGxldGUpIHtcbiAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdFN1c3BlbmRlZDtcbiAgfVxufVxuZnVuY3Rpb24gcmVuZGVyRGlkU3VzcGVuZERlbGF5SWZQb3NzaWJsZSgpIHtcbiAgaWYgKHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPT09IFJvb3RJbmNvbXBsZXRlIHx8IHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPT09IFJvb3RTdXNwZW5kZWQpIHtcbiAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdFN1c3BlbmRlZFdpdGhEZWxheTtcbiAgfSAvLyBDaGVjayBpZiB0aGVyZSBhcmUgdXBkYXRlcyB0aGF0IHdlIHNraXBwZWQgdHJlZSB0aGF0IG1pZ2h0IGhhdmUgdW5ibG9ja2VkXG4gIC8vIHRoaXMgcmVuZGVyLlxuXG5cbiAgaWYgKHdvcmtJblByb2dyZXNzUm9vdCAhPT0gbnVsbCAmJiAoaW5jbHVkZXNOb25JZGxlV29yayh3b3JrSW5Qcm9ncmVzc1Jvb3RTa2lwcGVkTGFuZXMpIHx8IGluY2x1ZGVzTm9uSWRsZVdvcmsod29ya0luUHJvZ3Jlc3NSb290VXBkYXRlZExhbmVzKSkpIHtcbiAgICAvLyBNYXJrIHRoZSBjdXJyZW50IHJlbmRlciBhcyBzdXNwZW5kZWQgc28gdGhhdCB3ZSBzd2l0Y2ggdG8gd29ya2luZyBvblxuICAgIC8vIHRoZSB1cGRhdGVzIHRoYXQgd2VyZSBza2lwcGVkLiBVc3VhbGx5IHdlIG9ubHkgc3VzcGVuZCBhdCB0aGUgZW5kIG9mXG4gICAgLy8gdGhlIHJlbmRlciBwaGFzZS5cbiAgICAvLyBUT0RPOiBXZSBzaG91bGQgcHJvYmFibHkgYWx3YXlzIG1hcmsgdGhlIHJvb3QgYXMgc3VzcGVuZGVkIGltbWVkaWF0ZWx5XG4gICAgLy8gKGluc2lkZSB0aGlzIGZ1bmN0aW9uKSwgc2luY2UgYnkgc3VzcGVuZGluZyBhdCB0aGUgZW5kIG9mIHRoZSByZW5kZXJcbiAgICAvLyBwaGFzZSBpbnRyb2R1Y2VzIGEgcG90ZW50aWFsIG1pc3Rha2Ugd2hlcmUgd2Ugc3VzcGVuZCBsYW5lcyB0aGF0IHdlcmVcbiAgICAvLyBwaW5nZWQgb3IgdXBkYXRlZCB3aGlsZSB3ZSB3ZXJlIHJlbmRlcmluZy5cbiAgICBtYXJrUm9vdFN1c3BlbmRlZCQxKHdvcmtJblByb2dyZXNzUm9vdCwgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMpO1xuICB9XG59XG5mdW5jdGlvbiByZW5kZXJEaWRFcnJvcigpIHtcbiAgaWYgKHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgIT09IFJvb3RDb21wbGV0ZWQpIHtcbiAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdEVycm9yZWQ7XG4gIH1cbn0gLy8gQ2FsbGVkIGR1cmluZyByZW5kZXIgdG8gZGV0ZXJtaW5lIGlmIGFueXRoaW5nIGhhcyBzdXNwZW5kZWQuXG4vLyBSZXR1cm5zIGZhbHNlIGlmIHdlJ3JlIG5vdCBzdXJlLlxuXG5mdW5jdGlvbiByZW5kZXJIYXNOb3RTdXNwZW5kZWRZZXQoKSB7XG4gIC8vIElmIHNvbWV0aGluZyBlcnJvcmVkIG9yIGNvbXBsZXRlZCwgd2UgY2FuJ3QgcmVhbGx5IGJlIHN1cmUsXG4gIC8vIHNvIHRob3NlIGFyZSBmYWxzZS5cbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPT09IFJvb3RJbmNvbXBsZXRlO1xufVxuXG5mdW5jdGlvbiByZW5kZXJSb290U3luYyhyb290LCBsYW5lcykge1xuICB2YXIgcHJldkV4ZWN1dGlvbkNvbnRleHQgPSBleGVjdXRpb25Db250ZXh0O1xuICBleGVjdXRpb25Db250ZXh0IHw9IFJlbmRlckNvbnRleHQ7XG4gIHZhciBwcmV2RGlzcGF0Y2hlciA9IHB1c2hEaXNwYXRjaGVyKCk7IC8vIElmIHRoZSByb290IG9yIGxhbmVzIGhhdmUgY2hhbmdlZCwgdGhyb3cgb3V0IHRoZSBleGlzdGluZyBzdGFja1xuICAvLyBhbmQgcHJlcGFyZSBhIGZyZXNoIG9uZS4gT3RoZXJ3aXNlIHdlJ2xsIGNvbnRpbnVlIHdoZXJlIHdlIGxlZnQgb2ZmLlxuXG4gIGlmICh3b3JrSW5Qcm9ncmVzc1Jvb3QgIT09IHJvb3QgfHwgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgIT09IGxhbmVzKSB7XG4gICAgcHJlcGFyZUZyZXNoU3RhY2socm9vdCwgbGFuZXMpO1xuICAgIHN0YXJ0V29ya09uUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCBsYW5lcyk7XG4gIH1cblxuICB2YXIgcHJldkludGVyYWN0aW9ucyA9IHB1c2hJbnRlcmFjdGlvbnMocm9vdCk7XG5cbiAgZG8ge1xuICAgIHRyeSB7XG4gICAgICB3b3JrTG9vcFN5bmMoKTtcbiAgICAgIGJyZWFrO1xuICAgIH0gY2F0Y2ggKHRocm93blZhbHVlKSB7XG4gICAgICBoYW5kbGVFcnJvcihyb290LCB0aHJvd25WYWx1ZSk7XG4gICAgfVxuICB9IHdoaWxlICh0cnVlKTtcblxuICByZXNldENvbnRleHREZXBlbmRlbmNpZXMoKTtcblxuICB7XG4gICAgcG9wSW50ZXJhY3Rpb25zKHByZXZJbnRlcmFjdGlvbnMpO1xuICB9XG5cbiAgZXhlY3V0aW9uQ29udGV4dCA9IHByZXZFeGVjdXRpb25Db250ZXh0O1xuICBwb3BEaXNwYXRjaGVyKHByZXZEaXNwYXRjaGVyKTtcblxuICBpZiAod29ya0luUHJvZ3Jlc3MgIT09IG51bGwpIHtcbiAgICAvLyBUaGlzIGlzIGEgc3luYyByZW5kZXIsIHNvIHdlIHNob3VsZCBoYXZlIGZpbmlzaGVkIHRoZSB3aG9sZSB0cmVlLlxuICAgIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiQ2Fubm90IGNvbW1pdCBhbiBpbmNvbXBsZXRlIHJvb3QuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuXG4gIHdvcmtJblByb2dyZXNzUm9vdCA9IG51bGw7XG4gIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzID0gTm9MYW5lcztcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXM7XG59IC8vIFRoZSB3b3JrIGxvb3AgaXMgYW4gZXh0cmVtZWx5IGhvdCBwYXRoLiBUZWxsIENsb3N1cmUgbm90IHRvIGlubGluZSBpdC5cblxuLyoqIEBub2lubGluZSAqL1xuXG5cbmZ1bmN0aW9uIHdvcmtMb29wU3luYygpIHtcbiAgLy8gQWxyZWFkeSB0aW1lZCBvdXQsIHNvIHBlcmZvcm0gd29yayB3aXRob3V0IGNoZWNraW5nIGlmIHdlIG5lZWQgdG8geWllbGQuXG4gIHdoaWxlICh3b3JrSW5Qcm9ncmVzcyAhPT0gbnVsbCkge1xuICAgIHBlcmZvcm1Vbml0T2ZXb3JrKHdvcmtJblByb2dyZXNzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZW5kZXJSb290Q29uY3VycmVudChyb290LCBsYW5lcykge1xuICB2YXIgcHJldkV4ZWN1dGlvbkNvbnRleHQgPSBleGVjdXRpb25Db250ZXh0O1xuICBleGVjdXRpb25Db250ZXh0IHw9IFJlbmRlckNvbnRleHQ7XG4gIHZhciBwcmV2RGlzcGF0Y2hlciA9IHB1c2hEaXNwYXRjaGVyKCk7IC8vIElmIHRoZSByb290IG9yIGxhbmVzIGhhdmUgY2hhbmdlZCwgdGhyb3cgb3V0IHRoZSBleGlzdGluZyBzdGFja1xuICAvLyBhbmQgcHJlcGFyZSBhIGZyZXNoIG9uZS4gT3RoZXJ3aXNlIHdlJ2xsIGNvbnRpbnVlIHdoZXJlIHdlIGxlZnQgb2ZmLlxuXG4gIGlmICh3b3JrSW5Qcm9ncmVzc1Jvb3QgIT09IHJvb3QgfHwgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgIT09IGxhbmVzKSB7XG4gICAgcmVzZXRSZW5kZXJUaW1lcigpO1xuICAgIHByZXBhcmVGcmVzaFN0YWNrKHJvb3QsIGxhbmVzKTtcbiAgICBzdGFydFdvcmtPblBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgbGFuZXMpO1xuICB9XG5cbiAgdmFyIHByZXZJbnRlcmFjdGlvbnMgPSBwdXNoSW50ZXJhY3Rpb25zKHJvb3QpO1xuXG4gIGRvIHtcbiAgICB0cnkge1xuICAgICAgd29ya0xvb3BDb25jdXJyZW50KCk7XG4gICAgICBicmVhaztcbiAgICB9IGNhdGNoICh0aHJvd25WYWx1ZSkge1xuICAgICAgaGFuZGxlRXJyb3Iocm9vdCwgdGhyb3duVmFsdWUpO1xuICAgIH1cbiAgfSB3aGlsZSAodHJ1ZSk7XG5cbiAgcmVzZXRDb250ZXh0RGVwZW5kZW5jaWVzKCk7XG5cbiAge1xuICAgIHBvcEludGVyYWN0aW9ucyhwcmV2SW50ZXJhY3Rpb25zKTtcbiAgfVxuXG4gIHBvcERpc3BhdGNoZXIocHJldkRpc3BhdGNoZXIpO1xuICBleGVjdXRpb25Db250ZXh0ID0gcHJldkV4ZWN1dGlvbkNvbnRleHQ7XG5cblxuICBpZiAod29ya0luUHJvZ3Jlc3MgIT09IG51bGwpIHtcblxuICAgIHJldHVybiBSb290SW5jb21wbGV0ZTtcbiAgfSBlbHNlIHtcblxuXG4gICAgd29ya0luUHJvZ3Jlc3NSb290ID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyA9IE5vTGFuZXM7IC8vIFJldHVybiB0aGUgZmluYWwgZXhpdCBzdGF0dXMuXG5cbiAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cztcbiAgfVxufVxuLyoqIEBub2lubGluZSAqL1xuXG5cbmZ1bmN0aW9uIHdvcmtMb29wQ29uY3VycmVudCgpIHtcbiAgLy8gUGVyZm9ybSB3b3JrIHVudGlsIFNjaGVkdWxlciBhc2tzIHVzIHRvIHlpZWxkXG4gIHdoaWxlICh3b3JrSW5Qcm9ncmVzcyAhPT0gbnVsbCAmJiAhc2hvdWxkWWllbGQoKSkge1xuICAgIHBlcmZvcm1Vbml0T2ZXb3JrKHdvcmtJblByb2dyZXNzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwZXJmb3JtVW5pdE9mV29yayh1bml0T2ZXb3JrKSB7XG4gIC8vIFRoZSBjdXJyZW50LCBmbHVzaGVkLCBzdGF0ZSBvZiB0aGlzIGZpYmVyIGlzIHRoZSBhbHRlcm5hdGUuIElkZWFsbHlcbiAgLy8gbm90aGluZyBzaG91bGQgcmVseSBvbiB0aGlzLCBidXQgcmVseWluZyBvbiBpdCBoZXJlIG1lYW5zIHRoYXQgd2UgZG9uJ3RcbiAgLy8gbmVlZCBhbiBhZGRpdGlvbmFsIGZpZWxkIG9uIHRoZSB3b3JrIGluIHByb2dyZXNzLlxuICB2YXIgY3VycmVudCA9IHVuaXRPZldvcmsuYWx0ZXJuYXRlO1xuICBzZXRDdXJyZW50RmliZXIodW5pdE9mV29yayk7XG4gIHZhciBuZXh0O1xuXG4gIGlmICggKHVuaXRPZldvcmsubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgc3RhcnRQcm9maWxlclRpbWVyKHVuaXRPZldvcmspO1xuICAgIG5leHQgPSBiZWdpbldvcmskMShjdXJyZW50LCB1bml0T2ZXb3JrLCBzdWJ0cmVlUmVuZGVyTGFuZXMpO1xuICAgIHN0b3BQcm9maWxlclRpbWVySWZSdW5uaW5nQW5kUmVjb3JkRGVsdGEodW5pdE9mV29yaywgdHJ1ZSk7XG4gIH0gZWxzZSB7XG4gICAgbmV4dCA9IGJlZ2luV29yayQxKGN1cnJlbnQsIHVuaXRPZldvcmssIHN1YnRyZWVSZW5kZXJMYW5lcyk7XG4gIH1cblxuICByZXNldEN1cnJlbnRGaWJlcigpO1xuICB1bml0T2ZXb3JrLm1lbW9pemVkUHJvcHMgPSB1bml0T2ZXb3JrLnBlbmRpbmdQcm9wcztcblxuICBpZiAobmV4dCA9PT0gbnVsbCkge1xuICAgIC8vIElmIHRoaXMgZG9lc24ndCBzcGF3biBuZXcgd29yaywgY29tcGxldGUgdGhlIGN1cnJlbnQgd29yay5cbiAgICBjb21wbGV0ZVVuaXRPZldvcmsodW5pdE9mV29yayk7XG4gIH0gZWxzZSB7XG4gICAgd29ya0luUHJvZ3Jlc3MgPSBuZXh0O1xuICB9XG5cbiAgUmVhY3RDdXJyZW50T3duZXIkMi5jdXJyZW50ID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gY29tcGxldGVVbml0T2ZXb3JrKHVuaXRPZldvcmspIHtcbiAgLy8gQXR0ZW1wdCB0byBjb21wbGV0ZSB0aGUgY3VycmVudCB1bml0IG9mIHdvcmssIHRoZW4gbW92ZSB0byB0aGUgbmV4dFxuICAvLyBzaWJsaW5nLiBJZiB0aGVyZSBhcmUgbm8gbW9yZSBzaWJsaW5ncywgcmV0dXJuIHRvIHRoZSBwYXJlbnQgZmliZXIuXG4gIHZhciBjb21wbGV0ZWRXb3JrID0gdW5pdE9mV29yaztcblxuICBkbyB7XG4gICAgLy8gVGhlIGN1cnJlbnQsIGZsdXNoZWQsIHN0YXRlIG9mIHRoaXMgZmliZXIgaXMgdGhlIGFsdGVybmF0ZS4gSWRlYWxseVxuICAgIC8vIG5vdGhpbmcgc2hvdWxkIHJlbHkgb24gdGhpcywgYnV0IHJlbHlpbmcgb24gaXQgaGVyZSBtZWFucyB0aGF0IHdlIGRvbid0XG4gICAgLy8gbmVlZCBhbiBhZGRpdGlvbmFsIGZpZWxkIG9uIHRoZSB3b3JrIGluIHByb2dyZXNzLlxuICAgIHZhciBjdXJyZW50ID0gY29tcGxldGVkV29yay5hbHRlcm5hdGU7XG4gICAgdmFyIHJldHVybkZpYmVyID0gY29tcGxldGVkV29yay5yZXR1cm47IC8vIENoZWNrIGlmIHRoZSB3b3JrIGNvbXBsZXRlZCBvciBpZiBzb21ldGhpbmcgdGhyZXcuXG5cbiAgICBpZiAoKGNvbXBsZXRlZFdvcmsuZmxhZ3MgJiBJbmNvbXBsZXRlKSA9PT0gTm9GbGFncykge1xuICAgICAgc2V0Q3VycmVudEZpYmVyKGNvbXBsZXRlZFdvcmspO1xuICAgICAgdmFyIG5leHQgPSB2b2lkIDA7XG5cbiAgICAgIGlmICggKGNvbXBsZXRlZFdvcmsubW9kZSAmIFByb2ZpbGVNb2RlKSA9PT0gTm9Nb2RlKSB7XG4gICAgICAgIG5leHQgPSBjb21wbGV0ZVdvcmsoY3VycmVudCwgY29tcGxldGVkV29yaywgc3VidHJlZVJlbmRlckxhbmVzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXJ0UHJvZmlsZXJUaW1lcihjb21wbGV0ZWRXb3JrKTtcbiAgICAgICAgbmV4dCA9IGNvbXBsZXRlV29yayhjdXJyZW50LCBjb21wbGV0ZWRXb3JrLCBzdWJ0cmVlUmVuZGVyTGFuZXMpOyAvLyBVcGRhdGUgcmVuZGVyIGR1cmF0aW9uIGFzc3VtaW5nIHdlIGRpZG4ndCBlcnJvci5cblxuICAgICAgICBzdG9wUHJvZmlsZXJUaW1lcklmUnVubmluZ0FuZFJlY29yZERlbHRhKGNvbXBsZXRlZFdvcmssIGZhbHNlKTtcbiAgICAgIH1cblxuICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTtcblxuICAgICAgaWYgKG5leHQgIT09IG51bGwpIHtcbiAgICAgICAgLy8gQ29tcGxldGluZyB0aGlzIGZpYmVyIHNwYXduZWQgbmV3IHdvcmsuIFdvcmsgb24gdGhhdCBuZXh0LlxuICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IG5leHQ7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcmVzZXRDaGlsZExhbmVzKGNvbXBsZXRlZFdvcmspO1xuXG4gICAgICBpZiAocmV0dXJuRmliZXIgIT09IG51bGwgJiYgLy8gRG8gbm90IGFwcGVuZCBlZmZlY3RzIHRvIHBhcmVudHMgaWYgYSBzaWJsaW5nIGZhaWxlZCB0byBjb21wbGV0ZVxuICAgICAgKHJldHVybkZpYmVyLmZsYWdzICYgSW5jb21wbGV0ZSkgPT09IE5vRmxhZ3MpIHtcbiAgICAgICAgLy8gQXBwZW5kIGFsbCB0aGUgZWZmZWN0cyBvZiB0aGUgc3VidHJlZSBhbmQgdGhpcyBmaWJlciBvbnRvIHRoZSBlZmZlY3RcbiAgICAgICAgLy8gbGlzdCBvZiB0aGUgcGFyZW50LiBUaGUgY29tcGxldGlvbiBvcmRlciBvZiB0aGUgY2hpbGRyZW4gYWZmZWN0cyB0aGVcbiAgICAgICAgLy8gc2lkZS1lZmZlY3Qgb3JkZXIuXG4gICAgICAgIGlmIChyZXR1cm5GaWJlci5maXJzdEVmZmVjdCA9PT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybkZpYmVyLmZpcnN0RWZmZWN0ID0gY29tcGxldGVkV29yay5maXJzdEVmZmVjdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb21wbGV0ZWRXb3JrLmxhc3RFZmZlY3QgIT09IG51bGwpIHtcbiAgICAgICAgICBpZiAocmV0dXJuRmliZXIubGFzdEVmZmVjdCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuRmliZXIubGFzdEVmZmVjdC5uZXh0RWZmZWN0ID0gY29tcGxldGVkV29yay5maXJzdEVmZmVjdDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm5GaWJlci5sYXN0RWZmZWN0ID0gY29tcGxldGVkV29yay5sYXN0RWZmZWN0O1xuICAgICAgICB9IC8vIElmIHRoaXMgZmliZXIgaGFkIHNpZGUtZWZmZWN0cywgd2UgYXBwZW5kIGl0IEFGVEVSIHRoZSBjaGlsZHJlbidzXG4gICAgICAgIC8vIHNpZGUtZWZmZWN0cy4gV2UgY2FuIHBlcmZvcm0gY2VydGFpbiBzaWRlLWVmZmVjdHMgZWFybGllciBpZiBuZWVkZWQsXG4gICAgICAgIC8vIGJ5IGRvaW5nIG11bHRpcGxlIHBhc3NlcyBvdmVyIHRoZSBlZmZlY3QgbGlzdC4gV2UgZG9uJ3Qgd2FudCB0b1xuICAgICAgICAvLyBzY2hlZHVsZSBvdXIgb3duIHNpZGUtZWZmZWN0IG9uIG91ciBvd24gbGlzdCBiZWNhdXNlIGlmIGVuZCB1cFxuICAgICAgICAvLyByZXVzaW5nIGNoaWxkcmVuIHdlJ2xsIHNjaGVkdWxlIHRoaXMgZWZmZWN0IG9udG8gaXRzZWxmIHNpbmNlIHdlJ3JlXG4gICAgICAgIC8vIGF0IHRoZSBlbmQuXG5cblxuICAgICAgICB2YXIgZmxhZ3MgPSBjb21wbGV0ZWRXb3JrLmZsYWdzOyAvLyBTa2lwIGJvdGggTm9Xb3JrIGFuZCBQZXJmb3JtZWRXb3JrIHRhZ3Mgd2hlbiBjcmVhdGluZyB0aGUgZWZmZWN0XG4gICAgICAgIC8vIGxpc3QuIFBlcmZvcm1lZFdvcmsgZWZmZWN0IGlzIHJlYWQgYnkgUmVhY3QgRGV2VG9vbHMgYnV0IHNob3VsZG4ndCBiZVxuICAgICAgICAvLyBjb21taXR0ZWQuXG5cbiAgICAgICAgaWYgKGZsYWdzID4gUGVyZm9ybWVkV29yaykge1xuICAgICAgICAgIGlmIChyZXR1cm5GaWJlci5sYXN0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm5GaWJlci5sYXN0RWZmZWN0Lm5leHRFZmZlY3QgPSBjb21wbGV0ZWRXb3JrO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm5GaWJlci5maXJzdEVmZmVjdCA9IGNvbXBsZXRlZFdvcms7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuRmliZXIubGFzdEVmZmVjdCA9IGNvbXBsZXRlZFdvcms7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhpcyBmaWJlciBkaWQgbm90IGNvbXBsZXRlIGJlY2F1c2Ugc29tZXRoaW5nIHRocmV3LiBQb3AgdmFsdWVzIG9mZlxuICAgICAgLy8gdGhlIHN0YWNrIHdpdGhvdXQgZW50ZXJpbmcgdGhlIGNvbXBsZXRlIHBoYXNlLiBJZiB0aGlzIGlzIGEgYm91bmRhcnksXG4gICAgICAvLyBjYXB0dXJlIHZhbHVlcyBpZiBwb3NzaWJsZS5cbiAgICAgIHZhciBfbmV4dCA9IHVud2luZFdvcmsoY29tcGxldGVkV29yayk7IC8vIEJlY2F1c2UgdGhpcyBmaWJlciBkaWQgbm90IGNvbXBsZXRlLCBkb24ndCByZXNldCBpdHMgZXhwaXJhdGlvbiB0aW1lLlxuXG5cbiAgICAgIGlmIChfbmV4dCAhPT0gbnVsbCkge1xuICAgICAgICAvLyBJZiBjb21wbGV0aW5nIHRoaXMgd29yayBzcGF3bmVkIG5ldyB3b3JrLCBkbyB0aGF0IG5leHQuIFdlJ2xsIGNvbWVcbiAgICAgICAgLy8gYmFjayBoZXJlIGFnYWluLlxuICAgICAgICAvLyBTaW5jZSB3ZSdyZSByZXN0YXJ0aW5nLCByZW1vdmUgYW55dGhpbmcgdGhhdCBpcyBub3QgYSBob3N0IGVmZmVjdFxuICAgICAgICAvLyBmcm9tIHRoZSBlZmZlY3QgdGFnLlxuICAgICAgICBfbmV4dC5mbGFncyAmPSBIb3N0RWZmZWN0TWFzaztcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSBfbmV4dDtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIChjb21wbGV0ZWRXb3JrLm1vZGUgJiBQcm9maWxlTW9kZSkgIT09IE5vTW9kZSkge1xuICAgICAgICAvLyBSZWNvcmQgdGhlIHJlbmRlciBkdXJhdGlvbiBmb3IgdGhlIGZpYmVyIHRoYXQgZXJyb3JlZC5cbiAgICAgICAgc3RvcFByb2ZpbGVyVGltZXJJZlJ1bm5pbmdBbmRSZWNvcmREZWx0YShjb21wbGV0ZWRXb3JrLCBmYWxzZSk7IC8vIEluY2x1ZGUgdGhlIHRpbWUgc3BlbnQgd29ya2luZyBvbiBmYWlsZWQgY2hpbGRyZW4gYmVmb3JlIGNvbnRpbnVpbmcuXG5cbiAgICAgICAgdmFyIGFjdHVhbER1cmF0aW9uID0gY29tcGxldGVkV29yay5hY3R1YWxEdXJhdGlvbjtcbiAgICAgICAgdmFyIGNoaWxkID0gY29tcGxldGVkV29yay5jaGlsZDtcblxuICAgICAgICB3aGlsZSAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgICBhY3R1YWxEdXJhdGlvbiArPSBjaGlsZC5hY3R1YWxEdXJhdGlvbjtcbiAgICAgICAgICBjaGlsZCA9IGNoaWxkLnNpYmxpbmc7XG4gICAgICAgIH1cblxuICAgICAgICBjb21wbGV0ZWRXb3JrLmFjdHVhbER1cmF0aW9uID0gYWN0dWFsRHVyYXRpb247XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXR1cm5GaWJlciAhPT0gbnVsbCkge1xuICAgICAgICAvLyBNYXJrIHRoZSBwYXJlbnQgZmliZXIgYXMgaW5jb21wbGV0ZSBhbmQgY2xlYXIgaXRzIGVmZmVjdCBsaXN0LlxuICAgICAgICByZXR1cm5GaWJlci5maXJzdEVmZmVjdCA9IHJldHVybkZpYmVyLmxhc3RFZmZlY3QgPSBudWxsO1xuICAgICAgICByZXR1cm5GaWJlci5mbGFncyB8PSBJbmNvbXBsZXRlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBzaWJsaW5nRmliZXIgPSBjb21wbGV0ZWRXb3JrLnNpYmxpbmc7XG5cbiAgICBpZiAoc2libGluZ0ZpYmVyICE9PSBudWxsKSB7XG4gICAgICAvLyBJZiB0aGVyZSBpcyBtb3JlIHdvcmsgdG8gZG8gaW4gdGhpcyByZXR1cm5GaWJlciwgZG8gdGhhdCBuZXh0LlxuICAgICAgd29ya0luUHJvZ3Jlc3MgPSBzaWJsaW5nRmliZXI7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBPdGhlcndpc2UsIHJldHVybiB0byB0aGUgcGFyZW50XG5cblxuICAgIGNvbXBsZXRlZFdvcmsgPSByZXR1cm5GaWJlcjsgLy8gVXBkYXRlIHRoZSBuZXh0IHRoaW5nIHdlJ3JlIHdvcmtpbmcgb24gaW4gY2FzZSBzb21ldGhpbmcgdGhyb3dzLlxuXG4gICAgd29ya0luUHJvZ3Jlc3MgPSBjb21wbGV0ZWRXb3JrO1xuICB9IHdoaWxlIChjb21wbGV0ZWRXb3JrICE9PSBudWxsKTsgLy8gV2UndmUgcmVhY2hlZCB0aGUgcm9vdC5cblxuXG4gIGlmICh3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID09PSBSb290SW5jb21wbGV0ZSkge1xuICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290Q29tcGxldGVkO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlc2V0Q2hpbGRMYW5lcyhjb21wbGV0ZWRXb3JrKSB7XG4gIGlmICggLy8gVE9ETzogTW92ZSB0aGlzIGNoZWNrIG91dCBvZiB0aGUgaG90IHBhdGggYnkgbW92aW5nIGByZXNldENoaWxkTGFuZXNgXG4gIC8vIHRvIHN3aXRjaCBzdGF0ZW1lbnQgaW4gYGNvbXBsZXRlV29ya2AuXG4gIChjb21wbGV0ZWRXb3JrLnRhZyA9PT0gTGVnYWN5SGlkZGVuQ29tcG9uZW50IHx8IGNvbXBsZXRlZFdvcmsudGFnID09PSBPZmZzY3JlZW5Db21wb25lbnQpICYmIGNvbXBsZXRlZFdvcmsubWVtb2l6ZWRTdGF0ZSAhPT0gbnVsbCAmJiAhaW5jbHVkZXNTb21lTGFuZShzdWJ0cmVlUmVuZGVyTGFuZXMsIE9mZnNjcmVlbkxhbmUpICYmIChjb21wbGV0ZWRXb3JrLm1vZGUgJiBDb25jdXJyZW50TW9kZSkgIT09IE5vTGFuZXMpIHtcbiAgICAvLyBUaGUgY2hpbGRyZW4gb2YgdGhpcyBjb21wb25lbnQgYXJlIGhpZGRlbi4gRG9uJ3QgYnViYmxlIHRoZWlyXG4gICAgLy8gZXhwaXJhdGlvbiB0aW1lcy5cbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgbmV3Q2hpbGRMYW5lcyA9IE5vTGFuZXM7IC8vIEJ1YmJsZSB1cCB0aGUgZWFybGllc3QgZXhwaXJhdGlvbiB0aW1lLlxuXG4gIGlmICggKGNvbXBsZXRlZFdvcmsubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgLy8gSW4gcHJvZmlsaW5nIG1vZGUsIHJlc2V0Q2hpbGRFeHBpcmF0aW9uVGltZSBpcyBhbHNvIHVzZWQgdG8gcmVzZXRcbiAgICAvLyBwcm9maWxlciBkdXJhdGlvbnMuXG4gICAgdmFyIGFjdHVhbER1cmF0aW9uID0gY29tcGxldGVkV29yay5hY3R1YWxEdXJhdGlvbjtcbiAgICB2YXIgdHJlZUJhc2VEdXJhdGlvbiA9IGNvbXBsZXRlZFdvcmsuc2VsZkJhc2VEdXJhdGlvbjsgLy8gV2hlbiBhIGZpYmVyIGlzIGNsb25lZCwgaXRzIGFjdHVhbER1cmF0aW9uIGlzIHJlc2V0IHRvIDAuIFRoaXMgdmFsdWUgd2lsbFxuICAgIC8vIG9ubHkgYmUgdXBkYXRlZCBpZiB3b3JrIGlzIGRvbmUgb24gdGhlIGZpYmVyIChpLmUuIGl0IGRvZXNuJ3QgYmFpbG91dCkuXG4gICAgLy8gV2hlbiB3b3JrIGlzIGRvbmUsIGl0IHNob3VsZCBidWJibGUgdG8gdGhlIHBhcmVudCdzIGFjdHVhbER1cmF0aW9uLiBJZlxuICAgIC8vIHRoZSBmaWJlciBoYXMgbm90IGJlZW4gY2xvbmVkIHRob3VnaCwgKG1lYW5pbmcgbm8gd29yayB3YXMgZG9uZSksIHRoZW5cbiAgICAvLyB0aGlzIHZhbHVlIHdpbGwgcmVmbGVjdCB0aGUgYW1vdW50IG9mIHRpbWUgc3BlbnQgd29ya2luZyBvbiBhIHByZXZpb3VzXG4gICAgLy8gcmVuZGVyLiBJbiB0aGF0IGNhc2UgaXQgc2hvdWxkIG5vdCBidWJibGUuIFdlIGRldGVybWluZSB3aGV0aGVyIGl0IHdhc1xuICAgIC8vIGNsb25lZCBieSBjb21wYXJpbmcgdGhlIGNoaWxkIHBvaW50ZXIuXG5cbiAgICB2YXIgc2hvdWxkQnViYmxlQWN0dWFsRHVyYXRpb25zID0gY29tcGxldGVkV29yay5hbHRlcm5hdGUgPT09IG51bGwgfHwgY29tcGxldGVkV29yay5jaGlsZCAhPT0gY29tcGxldGVkV29yay5hbHRlcm5hdGUuY2hpbGQ7XG4gICAgdmFyIGNoaWxkID0gY29tcGxldGVkV29yay5jaGlsZDtcblxuICAgIHdoaWxlIChjaGlsZCAhPT0gbnVsbCkge1xuICAgICAgbmV3Q2hpbGRMYW5lcyA9IG1lcmdlTGFuZXMobmV3Q2hpbGRMYW5lcywgbWVyZ2VMYW5lcyhjaGlsZC5sYW5lcywgY2hpbGQuY2hpbGRMYW5lcykpO1xuXG4gICAgICBpZiAoc2hvdWxkQnViYmxlQWN0dWFsRHVyYXRpb25zKSB7XG4gICAgICAgIGFjdHVhbER1cmF0aW9uICs9IGNoaWxkLmFjdHVhbER1cmF0aW9uO1xuICAgICAgfVxuXG4gICAgICB0cmVlQmFzZUR1cmF0aW9uICs9IGNoaWxkLnRyZWVCYXNlRHVyYXRpb247XG4gICAgICBjaGlsZCA9IGNoaWxkLnNpYmxpbmc7XG4gICAgfVxuXG4gICAgdmFyIGlzVGltZWRPdXRTdXNwZW5zZSA9IGNvbXBsZXRlZFdvcmsudGFnID09PSBTdXNwZW5zZUNvbXBvbmVudCAmJiBjb21wbGV0ZWRXb3JrLm1lbW9pemVkU3RhdGUgIT09IG51bGw7XG5cbiAgICBpZiAoaXNUaW1lZE91dFN1c3BlbnNlKSB7XG4gICAgICAvLyBEb24ndCBjb3VudCB0aW1lIHNwZW50IGluIGEgdGltZWQgb3V0IFN1c3BlbnNlIHN1YnRyZWUgYXMgcGFydCBvZiB0aGUgYmFzZSBkdXJhdGlvbi5cbiAgICAgIHZhciBwcmltYXJ5Q2hpbGRGcmFnbWVudCA9IGNvbXBsZXRlZFdvcmsuY2hpbGQ7XG5cbiAgICAgIGlmIChwcmltYXJ5Q2hpbGRGcmFnbWVudCAhPT0gbnVsbCkge1xuICAgICAgICB0cmVlQmFzZUR1cmF0aW9uIC09IHByaW1hcnlDaGlsZEZyYWdtZW50LnRyZWVCYXNlRHVyYXRpb247XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29tcGxldGVkV29yay5hY3R1YWxEdXJhdGlvbiA9IGFjdHVhbER1cmF0aW9uO1xuICAgIGNvbXBsZXRlZFdvcmsudHJlZUJhc2VEdXJhdGlvbiA9IHRyZWVCYXNlRHVyYXRpb247XG4gIH0gZWxzZSB7XG4gICAgdmFyIF9jaGlsZCA9IGNvbXBsZXRlZFdvcmsuY2hpbGQ7XG5cbiAgICB3aGlsZSAoX2NoaWxkICE9PSBudWxsKSB7XG4gICAgICBuZXdDaGlsZExhbmVzID0gbWVyZ2VMYW5lcyhuZXdDaGlsZExhbmVzLCBtZXJnZUxhbmVzKF9jaGlsZC5sYW5lcywgX2NoaWxkLmNoaWxkTGFuZXMpKTtcbiAgICAgIF9jaGlsZCA9IF9jaGlsZC5zaWJsaW5nO1xuICAgIH1cbiAgfVxuXG4gIGNvbXBsZXRlZFdvcmsuY2hpbGRMYW5lcyA9IG5ld0NoaWxkTGFuZXM7XG59XG5cbmZ1bmN0aW9uIGNvbW1pdFJvb3Qocm9vdCkge1xuICB2YXIgcmVuZGVyUHJpb3JpdHlMZXZlbCA9IGdldEN1cnJlbnRQcmlvcml0eUxldmVsKCk7XG4gIHJ1bldpdGhQcmlvcml0eSQxKEltbWVkaWF0ZVByaW9yaXR5JDEsIGNvbW1pdFJvb3RJbXBsLmJpbmQobnVsbCwgcm9vdCwgcmVuZGVyUHJpb3JpdHlMZXZlbCkpO1xuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gY29tbWl0Um9vdEltcGwocm9vdCwgcmVuZGVyUHJpb3JpdHlMZXZlbCkge1xuICBkbyB7XG4gICAgLy8gYGZsdXNoUGFzc2l2ZUVmZmVjdHNgIHdpbGwgY2FsbCBgZmx1c2hTeW5jVXBkYXRlUXVldWVgIGF0IHRoZSBlbmQsIHdoaWNoXG4gICAgLy8gbWVhbnMgYGZsdXNoUGFzc2l2ZUVmZmVjdHNgIHdpbGwgc29tZXRpbWVzIHJlc3VsdCBpbiBhZGRpdGlvbmFsXG4gICAgLy8gcGFzc2l2ZSBlZmZlY3RzLiBTbyB3ZSBuZWVkIHRvIGtlZXAgZmx1c2hpbmcgaW4gYSBsb29wIHVudGlsIHRoZXJlIGFyZVxuICAgIC8vIG5vIG1vcmUgcGVuZGluZyBlZmZlY3RzLlxuICAgIC8vIFRPRE86IE1pZ2h0IGJlIGJldHRlciBpZiBgZmx1c2hQYXNzaXZlRWZmZWN0c2AgZGlkIG5vdCBhdXRvbWF0aWNhbGx5XG4gICAgLy8gZmx1c2ggc3luY2hyb25vdXMgd29yayBhdCB0aGUgZW5kLCB0byBhdm9pZCBmYWN0b3JpbmcgaGF6YXJkcyBsaWtlIHRoaXMuXG4gICAgZmx1c2hQYXNzaXZlRWZmZWN0cygpO1xuICB9IHdoaWxlIChyb290V2l0aFBlbmRpbmdQYXNzaXZlRWZmZWN0cyAhPT0gbnVsbCk7XG5cbiAgZmx1c2hSZW5kZXJQaGFzZVN0cmljdE1vZGVXYXJuaW5nc0luREVWKCk7XG5cbiAgaWYgKCEoKGV4ZWN1dGlvbkNvbnRleHQgJiAoUmVuZGVyQ29udGV4dCB8IENvbW1pdENvbnRleHQpKSA9PT0gTm9Db250ZXh0KSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlNob3VsZCBub3QgYWxyZWFkeSBiZSB3b3JraW5nLlwiICk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGZpbmlzaGVkV29yayA9IHJvb3QuZmluaXNoZWRXb3JrO1xuICB2YXIgbGFuZXMgPSByb290LmZpbmlzaGVkTGFuZXM7XG5cbiAgaWYgKGZpbmlzaGVkV29yayA9PT0gbnVsbCkge1xuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByb290LmZpbmlzaGVkV29yayA9IG51bGw7XG4gIHJvb3QuZmluaXNoZWRMYW5lcyA9IE5vTGFuZXM7XG5cbiAgaWYgKCEoZmluaXNoZWRXb3JrICE9PSByb290LmN1cnJlbnQpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiQ2Fubm90IGNvbW1pdCB0aGUgc2FtZSB0cmVlIGFzIGJlZm9yZS4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgIH1cbiAgfSAvLyBjb21taXRSb290IG5ldmVyIHJldHVybnMgYSBjb250aW51YXRpb247IGl0IGFsd2F5cyBmaW5pc2hlcyBzeW5jaHJvbm91c2x5LlxuICAvLyBTbyB3ZSBjYW4gY2xlYXIgdGhlc2Ugbm93IHRvIGFsbG93IGEgbmV3IGNhbGxiYWNrIHRvIGJlIHNjaGVkdWxlZC5cblxuXG4gIHJvb3QuY2FsbGJhY2tOb2RlID0gbnVsbDsgLy8gVXBkYXRlIHRoZSBmaXJzdCBhbmQgbGFzdCBwZW5kaW5nIHRpbWVzIG9uIHRoaXMgcm9vdC4gVGhlIG5ldyBmaXJzdFxuICAvLyBwZW5kaW5nIHRpbWUgaXMgd2hhdGV2ZXIgaXMgbGVmdCBvbiB0aGUgcm9vdCBmaWJlci5cblxuICB2YXIgcmVtYWluaW5nTGFuZXMgPSBtZXJnZUxhbmVzKGZpbmlzaGVkV29yay5sYW5lcywgZmluaXNoZWRXb3JrLmNoaWxkTGFuZXMpO1xuICBtYXJrUm9vdEZpbmlzaGVkKHJvb3QsIHJlbWFpbmluZ0xhbmVzKTsgLy8gQ2xlYXIgYWxyZWFkeSBmaW5pc2hlZCBkaXNjcmV0ZSB1cGRhdGVzIGluIGNhc2UgdGhhdCBhIGxhdGVyIGNhbGwgb2ZcbiAgLy8gYGZsdXNoRGlzY3JldGVVcGRhdGVzYCBzdGFydHMgYSB1c2VsZXNzIHJlbmRlciBwYXNzIHdoaWNoIG1heSBjYW5jZWxzXG4gIC8vIGEgc2NoZWR1bGVkIHRpbWVvdXQuXG5cbiAgaWYgKHJvb3RzV2l0aFBlbmRpbmdEaXNjcmV0ZVVwZGF0ZXMgIT09IG51bGwpIHtcbiAgICBpZiAoIWhhc0Rpc2NyZXRlTGFuZXMocmVtYWluaW5nTGFuZXMpICYmIHJvb3RzV2l0aFBlbmRpbmdEaXNjcmV0ZVVwZGF0ZXMuaGFzKHJvb3QpKSB7XG4gICAgICByb290c1dpdGhQZW5kaW5nRGlzY3JldGVVcGRhdGVzLmRlbGV0ZShyb290KTtcbiAgICB9XG4gIH1cblxuICBpZiAocm9vdCA9PT0gd29ya0luUHJvZ3Jlc3NSb290KSB7XG4gICAgLy8gV2UgY2FuIHJlc2V0IHRoZXNlIG5vdyB0aGF0IHRoZXkgYXJlIGZpbmlzaGVkLlxuICAgIHdvcmtJblByb2dyZXNzUm9vdCA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3MgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzID0gTm9MYW5lcztcbiAgfSAvLyBHZXQgdGhlIGxpc3Qgb2YgZWZmZWN0cy5cblxuXG4gIHZhciBmaXJzdEVmZmVjdDtcblxuICBpZiAoZmluaXNoZWRXb3JrLmZsYWdzID4gUGVyZm9ybWVkV29yaykge1xuICAgIC8vIEEgZmliZXIncyBlZmZlY3QgbGlzdCBjb25zaXN0cyBvbmx5IG9mIGl0cyBjaGlsZHJlbiwgbm90IGl0c2VsZi4gU28gaWZcbiAgICAvLyB0aGUgcm9vdCBoYXMgYW4gZWZmZWN0LCB3ZSBuZWVkIHRvIGFkZCBpdCB0byB0aGUgZW5kIG9mIHRoZSBsaXN0LiBUaGVcbiAgICAvLyByZXN1bHRpbmcgbGlzdCBpcyB0aGUgc2V0IHRoYXQgd291bGQgYmVsb25nIHRvIHRoZSByb290J3MgcGFyZW50LCBpZiBpdFxuICAgIC8vIGhhZCBvbmU7IHRoYXQgaXMsIGFsbCB0aGUgZWZmZWN0cyBpbiB0aGUgdHJlZSBpbmNsdWRpbmcgdGhlIHJvb3QuXG4gICAgaWYgKGZpbmlzaGVkV29yay5sYXN0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgICBmaW5pc2hlZFdvcmsubGFzdEVmZmVjdC5uZXh0RWZmZWN0ID0gZmluaXNoZWRXb3JrO1xuICAgICAgZmlyc3RFZmZlY3QgPSBmaW5pc2hlZFdvcmsuZmlyc3RFZmZlY3Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZpcnN0RWZmZWN0ID0gZmluaXNoZWRXb3JrO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBUaGVyZSBpcyBubyBlZmZlY3Qgb24gdGhlIHJvb3QuXG4gICAgZmlyc3RFZmZlY3QgPSBmaW5pc2hlZFdvcmsuZmlyc3RFZmZlY3Q7XG4gIH1cblxuICBpZiAoZmlyc3RFZmZlY3QgIT09IG51bGwpIHtcblxuICAgIHZhciBwcmV2RXhlY3V0aW9uQ29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQ7XG4gICAgZXhlY3V0aW9uQ29udGV4dCB8PSBDb21taXRDb250ZXh0O1xuICAgIHZhciBwcmV2SW50ZXJhY3Rpb25zID0gcHVzaEludGVyYWN0aW9ucyhyb290KTsgLy8gUmVzZXQgdGhpcyB0byBudWxsIGJlZm9yZSBjYWxsaW5nIGxpZmVjeWNsZXNcblxuICAgIFJlYWN0Q3VycmVudE93bmVyJDIuY3VycmVudCA9IG51bGw7IC8vIFRoZSBjb21taXQgcGhhc2UgaXMgYnJva2VuIGludG8gc2V2ZXJhbCBzdWItcGhhc2VzLiBXZSBkbyBhIHNlcGFyYXRlIHBhc3NcbiAgICAvLyBvZiB0aGUgZWZmZWN0IGxpc3QgZm9yIGVhY2ggcGhhc2U6IGFsbCBtdXRhdGlvbiBlZmZlY3RzIGNvbWUgYmVmb3JlIGFsbFxuICAgIC8vIGxheW91dCBlZmZlY3RzLCBhbmQgc28gb24uXG4gICAgLy8gVGhlIGZpcnN0IHBoYXNlIGEgXCJiZWZvcmUgbXV0YXRpb25cIiBwaGFzZS4gV2UgdXNlIHRoaXMgcGhhc2UgdG8gcmVhZCB0aGVcbiAgICAvLyBzdGF0ZSBvZiB0aGUgaG9zdCB0cmVlIHJpZ2h0IGJlZm9yZSB3ZSBtdXRhdGUgaXQuIFRoaXMgaXMgd2hlcmVcbiAgICAvLyBnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSBpcyBjYWxsZWQuXG5cbiAgICBmb2N1c2VkSW5zdGFuY2VIYW5kbGUgPSBwcmVwYXJlRm9yQ29tbWl0KHJvb3QuY29udGFpbmVySW5mbyk7XG4gICAgc2hvdWxkRmlyZUFmdGVyQWN0aXZlSW5zdGFuY2VCbHVyID0gZmFsc2U7XG4gICAgbmV4dEVmZmVjdCA9IGZpcnN0RWZmZWN0O1xuXG4gICAgZG8ge1xuICAgICAge1xuICAgICAgICBpbnZva2VHdWFyZGVkQ2FsbGJhY2sobnVsbCwgY29tbWl0QmVmb3JlTXV0YXRpb25FZmZlY3RzLCBudWxsKTtcblxuICAgICAgICBpZiAoaGFzQ2F1Z2h0RXJyb3IoKSkge1xuICAgICAgICAgIGlmICghKG5leHRFZmZlY3QgIT09IG51bGwpKSB7XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRocm93IEVycm9yKCBcIlNob3VsZCBiZSB3b3JraW5nIG9uIGFuIGVmZmVjdC5cIiApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBlcnJvciA9IGNsZWFyQ2F1Z2h0RXJyb3IoKTtcbiAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihuZXh0RWZmZWN0LCBlcnJvcik7XG4gICAgICAgICAgbmV4dEVmZmVjdCA9IG5leHRFZmZlY3QubmV4dEVmZmVjdDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gd2hpbGUgKG5leHRFZmZlY3QgIT09IG51bGwpOyAvLyBXZSBubyBsb25nZXIgbmVlZCB0byB0cmFjayB0aGUgYWN0aXZlIGluc3RhbmNlIGZpYmVyXG5cblxuICAgIGZvY3VzZWRJbnN0YW5jZUhhbmRsZSA9IG51bGw7XG5cbiAgICB7XG4gICAgICAvLyBNYXJrIHRoZSBjdXJyZW50IGNvbW1pdCB0aW1lIHRvIGJlIHNoYXJlZCBieSBhbGwgUHJvZmlsZXJzIGluIHRoaXNcbiAgICAgIC8vIGJhdGNoLiBUaGlzIGVuYWJsZXMgdGhlbSB0byBiZSBncm91cGVkIGxhdGVyLlxuICAgICAgcmVjb3JkQ29tbWl0VGltZSgpO1xuICAgIH0gLy8gVGhlIG5leHQgcGhhc2UgaXMgdGhlIG11dGF0aW9uIHBoYXNlLCB3aGVyZSB3ZSBtdXRhdGUgdGhlIGhvc3QgdHJlZS5cblxuXG4gICAgbmV4dEVmZmVjdCA9IGZpcnN0RWZmZWN0O1xuXG4gICAgZG8ge1xuICAgICAge1xuICAgICAgICBpbnZva2VHdWFyZGVkQ2FsbGJhY2sobnVsbCwgY29tbWl0TXV0YXRpb25FZmZlY3RzLCBudWxsLCByb290LCByZW5kZXJQcmlvcml0eUxldmVsKTtcblxuICAgICAgICBpZiAoaGFzQ2F1Z2h0RXJyb3IoKSkge1xuICAgICAgICAgIGlmICghKG5leHRFZmZlY3QgIT09IG51bGwpKSB7XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRocm93IEVycm9yKCBcIlNob3VsZCBiZSB3b3JraW5nIG9uIGFuIGVmZmVjdC5cIiApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBfZXJyb3IgPSBjbGVhckNhdWdodEVycm9yKCk7XG5cbiAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihuZXh0RWZmZWN0LCBfZXJyb3IpO1xuICAgICAgICAgIG5leHRFZmZlY3QgPSBuZXh0RWZmZWN0Lm5leHRFZmZlY3Q7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IHdoaWxlIChuZXh0RWZmZWN0ICE9PSBudWxsKTtcblxuICAgIHJlc2V0QWZ0ZXJDb21taXQocm9vdC5jb250YWluZXJJbmZvKTsgLy8gVGhlIHdvcmstaW4tcHJvZ3Jlc3MgdHJlZSBpcyBub3cgdGhlIGN1cnJlbnQgdHJlZS4gVGhpcyBtdXN0IGNvbWUgYWZ0ZXJcbiAgICAvLyB0aGUgbXV0YXRpb24gcGhhc2UsIHNvIHRoYXQgdGhlIHByZXZpb3VzIHRyZWUgaXMgc3RpbGwgY3VycmVudCBkdXJpbmdcbiAgICAvLyBjb21wb25lbnRXaWxsVW5tb3VudCwgYnV0IGJlZm9yZSB0aGUgbGF5b3V0IHBoYXNlLCBzbyB0aGF0IHRoZSBmaW5pc2hlZFxuICAgIC8vIHdvcmsgaXMgY3VycmVudCBkdXJpbmcgY29tcG9uZW50RGlkTW91bnQvVXBkYXRlLlxuXG4gICAgcm9vdC5jdXJyZW50ID0gZmluaXNoZWRXb3JrOyAvLyBUaGUgbmV4dCBwaGFzZSBpcyB0aGUgbGF5b3V0IHBoYXNlLCB3aGVyZSB3ZSBjYWxsIGVmZmVjdHMgdGhhdCByZWFkXG4gICAgLy8gdGhlIGhvc3QgdHJlZSBhZnRlciBpdCdzIGJlZW4gbXV0YXRlZC4gVGhlIGlkaW9tYXRpYyB1c2UgY2FzZSBmb3IgdGhpcyBpc1xuICAgIC8vIGxheW91dCwgYnV0IGNsYXNzIGNvbXBvbmVudCBsaWZlY3ljbGVzIGFsc28gZmlyZSBoZXJlIGZvciBsZWdhY3kgcmVhc29ucy5cblxuICAgIG5leHRFZmZlY3QgPSBmaXJzdEVmZmVjdDtcblxuICAgIGRvIHtcbiAgICAgIHtcbiAgICAgICAgaW52b2tlR3VhcmRlZENhbGxiYWNrKG51bGwsIGNvbW1pdExheW91dEVmZmVjdHMsIG51bGwsIHJvb3QsIGxhbmVzKTtcblxuICAgICAgICBpZiAoaGFzQ2F1Z2h0RXJyb3IoKSkge1xuICAgICAgICAgIGlmICghKG5leHRFZmZlY3QgIT09IG51bGwpKSB7XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRocm93IEVycm9yKCBcIlNob3VsZCBiZSB3b3JraW5nIG9uIGFuIGVmZmVjdC5cIiApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBfZXJyb3IyID0gY2xlYXJDYXVnaHRFcnJvcigpO1xuXG4gICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IobmV4dEVmZmVjdCwgX2Vycm9yMik7XG4gICAgICAgICAgbmV4dEVmZmVjdCA9IG5leHRFZmZlY3QubmV4dEVmZmVjdDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gd2hpbGUgKG5leHRFZmZlY3QgIT09IG51bGwpO1xuXG4gICAgbmV4dEVmZmVjdCA9IG51bGw7IC8vIFRlbGwgU2NoZWR1bGVyIHRvIHlpZWxkIGF0IHRoZSBlbmQgb2YgdGhlIGZyYW1lLCBzbyB0aGUgYnJvd3NlciBoYXMgYW5cbiAgICAvLyBvcHBvcnR1bml0eSB0byBwYWludC5cblxuICAgIHJlcXVlc3RQYWludCgpO1xuXG4gICAge1xuICAgICAgcG9wSW50ZXJhY3Rpb25zKHByZXZJbnRlcmFjdGlvbnMpO1xuICAgIH1cblxuICAgIGV4ZWN1dGlvbkNvbnRleHQgPSBwcmV2RXhlY3V0aW9uQ29udGV4dDtcbiAgfSBlbHNlIHtcbiAgICAvLyBObyBlZmZlY3RzLlxuICAgIHJvb3QuY3VycmVudCA9IGZpbmlzaGVkV29yazsgLy8gTWVhc3VyZSB0aGVzZSBhbnl3YXkgc28gdGhlIGZsYW1lZ3JhcGggZXhwbGljaXRseSBzaG93cyB0aGF0IHRoZXJlIHdlcmVcbiAgICAvLyBubyBlZmZlY3RzLlxuICAgIC8vIFRPRE86IE1heWJlIHRoZXJlJ3MgYSBiZXR0ZXIgd2F5IHRvIHJlcG9ydCB0aGlzLlxuXG4gICAge1xuICAgICAgcmVjb3JkQ29tbWl0VGltZSgpO1xuICAgIH1cbiAgfVxuXG4gIHZhciByb290RGlkSGF2ZVBhc3NpdmVFZmZlY3RzID0gcm9vdERvZXNIYXZlUGFzc2l2ZUVmZmVjdHM7XG5cbiAgaWYgKHJvb3REb2VzSGF2ZVBhc3NpdmVFZmZlY3RzKSB7XG4gICAgLy8gVGhpcyBjb21taXQgaGFzIHBhc3NpdmUgZWZmZWN0cy4gU3Rhc2ggYSByZWZlcmVuY2UgdG8gdGhlbS4gQnV0IGRvbid0XG4gICAgLy8gc2NoZWR1bGUgYSBjYWxsYmFjayB1bnRpbCBhZnRlciBmbHVzaGluZyBsYXlvdXQgd29yay5cbiAgICByb290RG9lc0hhdmVQYXNzaXZlRWZmZWN0cyA9IGZhbHNlO1xuICAgIHJvb3RXaXRoUGVuZGluZ1Bhc3NpdmVFZmZlY3RzID0gcm9vdDtcbiAgICBwZW5kaW5nUGFzc2l2ZUVmZmVjdHNMYW5lcyA9IGxhbmVzO1xuICAgIHBlbmRpbmdQYXNzaXZlRWZmZWN0c1JlbmRlclByaW9yaXR5ID0gcmVuZGVyUHJpb3JpdHlMZXZlbDtcbiAgfSBlbHNlIHtcbiAgICAvLyBXZSBhcmUgZG9uZSB3aXRoIHRoZSBlZmZlY3QgY2hhaW4gYXQgdGhpcyBwb2ludCBzbyBsZXQncyBjbGVhciB0aGVcbiAgICAvLyBuZXh0RWZmZWN0IHBvaW50ZXJzIHRvIGFzc2lzdCB3aXRoIEdDLiBJZiB3ZSBoYXZlIHBhc3NpdmUgZWZmZWN0cywgd2UnbGxcbiAgICAvLyBjbGVhciB0aGlzIGluIGZsdXNoUGFzc2l2ZUVmZmVjdHMuXG4gICAgbmV4dEVmZmVjdCA9IGZpcnN0RWZmZWN0O1xuXG4gICAgd2hpbGUgKG5leHRFZmZlY3QgIT09IG51bGwpIHtcbiAgICAgIHZhciBuZXh0TmV4dEVmZmVjdCA9IG5leHRFZmZlY3QubmV4dEVmZmVjdDtcbiAgICAgIG5leHRFZmZlY3QubmV4dEVmZmVjdCA9IG51bGw7XG5cbiAgICAgIGlmIChuZXh0RWZmZWN0LmZsYWdzICYgRGVsZXRpb24pIHtcbiAgICAgICAgZGV0YWNoRmliZXJBZnRlckVmZmVjdHMobmV4dEVmZmVjdCk7XG4gICAgICB9XG5cbiAgICAgIG5leHRFZmZlY3QgPSBuZXh0TmV4dEVmZmVjdDtcbiAgICB9XG4gIH0gLy8gUmVhZCB0aGlzIGFnYWluLCBzaW5jZSBhbiBlZmZlY3QgbWlnaHQgaGF2ZSB1cGRhdGVkIGl0XG5cblxuICByZW1haW5pbmdMYW5lcyA9IHJvb3QucGVuZGluZ0xhbmVzOyAvLyBDaGVjayBpZiB0aGVyZSdzIHJlbWFpbmluZyB3b3JrIG9uIHRoaXMgcm9vdFxuXG4gIGlmIChyZW1haW5pbmdMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgIHtcbiAgICAgIGlmIChzcGF3bmVkV29ya0R1cmluZ1JlbmRlciAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgZXhwaXJhdGlvblRpbWVzID0gc3Bhd25lZFdvcmtEdXJpbmdSZW5kZXI7XG4gICAgICAgIHNwYXduZWRXb3JrRHVyaW5nUmVuZGVyID0gbnVsbDtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cGlyYXRpb25UaW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHNjaGVkdWxlSW50ZXJhY3Rpb25zKHJvb3QsIGV4cGlyYXRpb25UaW1lc1tpXSwgcm9vdC5tZW1vaXplZEludGVyYWN0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc2NoZWR1bGVQZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIHJlbWFpbmluZ0xhbmVzKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gSWYgdGhlcmUncyBubyByZW1haW5pbmcgd29yaywgd2UgY2FuIGNsZWFyIHRoZSBzZXQgb2YgYWxyZWFkeSBmYWlsZWRcbiAgICAvLyBlcnJvciBib3VuZGFyaWVzLlxuICAgIGxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkID0gbnVsbDtcbiAgfVxuXG4gIHtcbiAgICBpZiAoIXJvb3REaWRIYXZlUGFzc2l2ZUVmZmVjdHMpIHtcbiAgICAgIC8vIElmIHRoZXJlIGFyZSBubyBwYXNzaXZlIGVmZmVjdHMsIHRoZW4gd2UgY2FuIGNvbXBsZXRlIHRoZSBwZW5kaW5nIGludGVyYWN0aW9ucy5cbiAgICAgIC8vIE90aGVyd2lzZSwgd2UnbGwgd2FpdCB1bnRpbCBhZnRlciB0aGUgcGFzc2l2ZSBlZmZlY3RzIGFyZSBmbHVzaGVkLlxuICAgICAgLy8gV2FpdCB0byBkbyB0aGlzIHVudGlsIGFmdGVyIHJlbWFpbmluZyB3b3JrIGhhcyBiZWVuIHNjaGVkdWxlZCxcbiAgICAgIC8vIHNvIHRoYXQgd2UgZG9uJ3QgcHJlbWF0dXJlbHkgc2lnbmFsIGNvbXBsZXRlIGZvciBpbnRlcmFjdGlvbnMgd2hlbiB0aGVyZSdzIGUuZy4gaGlkZGVuIHdvcmsuXG4gICAgICBmaW5pc2hQZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIGxhbmVzKTtcbiAgICB9XG4gIH1cblxuICBpZiAocmVtYWluaW5nTGFuZXMgPT09IFN5bmNMYW5lKSB7XG4gICAgLy8gQ291bnQgdGhlIG51bWJlciBvZiB0aW1lcyB0aGUgcm9vdCBzeW5jaHJvbm91c2x5IHJlLXJlbmRlcnMgd2l0aG91dFxuICAgIC8vIGZpbmlzaGluZy4gSWYgdGhlcmUgYXJlIHRvbyBtYW55LCBpdCBpbmRpY2F0ZXMgYW4gaW5maW5pdGUgdXBkYXRlIGxvb3AuXG4gICAgaWYgKHJvb3QgPT09IHJvb3RXaXRoTmVzdGVkVXBkYXRlcykge1xuICAgICAgbmVzdGVkVXBkYXRlQ291bnQrKztcbiAgICB9IGVsc2Uge1xuICAgICAgbmVzdGVkVXBkYXRlQ291bnQgPSAwO1xuICAgICAgcm9vdFdpdGhOZXN0ZWRVcGRhdGVzID0gcm9vdDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbmVzdGVkVXBkYXRlQ291bnQgPSAwO1xuICB9XG5cbiAgb25Db21taXRSb290KGZpbmlzaGVkV29yay5zdGF0ZU5vZGUsIHJlbmRlclByaW9yaXR5TGV2ZWwpO1xuXG4gIHtcbiAgICBvbkNvbW1pdFJvb3QkMSgpO1xuICB9IC8vIEFsd2F5cyBjYWxsIHRoaXMgYmVmb3JlIGV4aXRpbmcgYGNvbW1pdFJvb3RgLCB0byBlbnN1cmUgdGhhdCBhbnlcbiAgLy8gYWRkaXRpb25hbCB3b3JrIG9uIHRoaXMgcm9vdCBpcyBzY2hlZHVsZWQuXG5cblxuICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCwgbm93KCkpO1xuXG4gIGlmIChoYXNVbmNhdWdodEVycm9yKSB7XG4gICAgaGFzVW5jYXVnaHRFcnJvciA9IGZhbHNlO1xuICAgIHZhciBfZXJyb3IzID0gZmlyc3RVbmNhdWdodEVycm9yO1xuICAgIGZpcnN0VW5jYXVnaHRFcnJvciA9IG51bGw7XG4gICAgdGhyb3cgX2Vycm9yMztcbiAgfVxuXG4gIGlmICgoZXhlY3V0aW9uQ29udGV4dCAmIExlZ2FjeVVuYmF0Y2hlZENvbnRleHQpICE9PSBOb0NvbnRleHQpIHtcbiAgICAvLyBhIFJlYWN0RE9NLnJlbmRlci1lZCByb290IGluc2lkZSBvZiBiYXRjaGVkVXBkYXRlcy4gVGhlIGNvbW1pdCBmaXJlZFxuICAgIC8vIHN5bmNocm9ub3VzbHksIGJ1dCBsYXlvdXQgdXBkYXRlcyBzaG91bGQgYmUgZGVmZXJyZWQgdW50aWwgdGhlIGVuZFxuICAgIC8vIG9mIHRoZSBiYXRjaC5cblxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH0gLy8gSWYgbGF5b3V0IHdvcmsgd2FzIHNjaGVkdWxlZCwgZmx1c2ggaXQgbm93LlxuXG5cbiAgZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZSgpO1xuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBjb21taXRCZWZvcmVNdXRhdGlvbkVmZmVjdHMoKSB7XG4gIHdoaWxlIChuZXh0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgdmFyIGN1cnJlbnQgPSBuZXh0RWZmZWN0LmFsdGVybmF0ZTtcblxuICAgIGlmICghc2hvdWxkRmlyZUFmdGVyQWN0aXZlSW5zdGFuY2VCbHVyICYmIGZvY3VzZWRJbnN0YW5jZUhhbmRsZSAhPT0gbnVsbCkge1xuICAgICAgaWYgKChuZXh0RWZmZWN0LmZsYWdzICYgRGVsZXRpb24pICE9PSBOb0ZsYWdzKSB7XG4gICAgICAgIGlmIChkb2VzRmliZXJDb250YWluKG5leHRFZmZlY3QsIGZvY3VzZWRJbnN0YW5jZUhhbmRsZSkpIHtcbiAgICAgICAgICBzaG91bGRGaXJlQWZ0ZXJBY3RpdmVJbnN0YW5jZUJsdXIgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUT0RPOiBNb3ZlIHRoaXMgb3V0IG9mIHRoZSBob3QgcGF0aCB1c2luZyBhIGRlZGljYXRlZCBlZmZlY3QgdGFnLlxuICAgICAgICBpZiAobmV4dEVmZmVjdC50YWcgPT09IFN1c3BlbnNlQ29tcG9uZW50ICYmIGlzU3VzcGVuc2VCb3VuZGFyeUJlaW5nSGlkZGVuKGN1cnJlbnQsIG5leHRFZmZlY3QpICYmIGRvZXNGaWJlckNvbnRhaW4obmV4dEVmZmVjdCwgZm9jdXNlZEluc3RhbmNlSGFuZGxlKSkge1xuICAgICAgICAgIHNob3VsZEZpcmVBZnRlckFjdGl2ZUluc3RhbmNlQmx1ciA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZmxhZ3MgPSBuZXh0RWZmZWN0LmZsYWdzO1xuXG4gICAgaWYgKChmbGFncyAmIFNuYXBzaG90KSAhPT0gTm9GbGFncykge1xuICAgICAgc2V0Q3VycmVudEZpYmVyKG5leHRFZmZlY3QpO1xuICAgICAgY29tbWl0QmVmb3JlTXV0YXRpb25MaWZlQ3ljbGVzKGN1cnJlbnQsIG5leHRFZmZlY3QpO1xuICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgICB9XG5cbiAgICBpZiAoKGZsYWdzICYgUGFzc2l2ZSkgIT09IE5vRmxhZ3MpIHtcbiAgICAgIC8vIElmIHRoZXJlIGFyZSBwYXNzaXZlIGVmZmVjdHMsIHNjaGVkdWxlIGEgY2FsbGJhY2sgdG8gZmx1c2ggYXRcbiAgICAgIC8vIHRoZSBlYXJsaWVzdCBvcHBvcnR1bml0eS5cbiAgICAgIGlmICghcm9vdERvZXNIYXZlUGFzc2l2ZUVmZmVjdHMpIHtcbiAgICAgICAgcm9vdERvZXNIYXZlUGFzc2l2ZUVmZmVjdHMgPSB0cnVlO1xuICAgICAgICBzY2hlZHVsZUNhbGxiYWNrKE5vcm1hbFByaW9yaXR5JDEsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBmbHVzaFBhc3NpdmVFZmZlY3RzKCk7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIG5leHRFZmZlY3QgPSBuZXh0RWZmZWN0Lm5leHRFZmZlY3Q7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0TXV0YXRpb25FZmZlY3RzKHJvb3QsIHJlbmRlclByaW9yaXR5TGV2ZWwpIHtcbiAgLy8gVE9ETzogU2hvdWxkIHByb2JhYmx5IG1vdmUgdGhlIGJ1bGsgb2YgdGhpcyBmdW5jdGlvbiB0byBjb21taXRXb3JrLlxuICB3aGlsZSAobmV4dEVmZmVjdCAhPT0gbnVsbCkge1xuICAgIHNldEN1cnJlbnRGaWJlcihuZXh0RWZmZWN0KTtcbiAgICB2YXIgZmxhZ3MgPSBuZXh0RWZmZWN0LmZsYWdzO1xuXG4gICAgaWYgKGZsYWdzICYgQ29udGVudFJlc2V0KSB7XG4gICAgICBjb21taXRSZXNldFRleHRDb250ZW50KG5leHRFZmZlY3QpO1xuICAgIH1cblxuICAgIGlmIChmbGFncyAmIFJlZikge1xuICAgICAgdmFyIGN1cnJlbnQgPSBuZXh0RWZmZWN0LmFsdGVybmF0ZTtcblxuICAgICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgY29tbWl0RGV0YWNoUmVmKGN1cnJlbnQpO1xuICAgICAgfVxuICAgIH0gLy8gVGhlIGZvbGxvd2luZyBzd2l0Y2ggc3RhdGVtZW50IGlzIG9ubHkgY29uY2VybmVkIGFib3V0IHBsYWNlbWVudCxcbiAgICAvLyB1cGRhdGVzLCBhbmQgZGVsZXRpb25zLiBUbyBhdm9pZCBuZWVkaW5nIHRvIGFkZCBhIGNhc2UgZm9yIGV2ZXJ5IHBvc3NpYmxlXG4gICAgLy8gYml0bWFwIHZhbHVlLCB3ZSByZW1vdmUgdGhlIHNlY29uZGFyeSBlZmZlY3RzIGZyb20gdGhlIGVmZmVjdCB0YWcgYW5kXG4gICAgLy8gc3dpdGNoIG9uIHRoYXQgdmFsdWUuXG5cblxuICAgIHZhciBwcmltYXJ5RmxhZ3MgPSBmbGFncyAmIChQbGFjZW1lbnQgfCBVcGRhdGUgfCBEZWxldGlvbiB8IEh5ZHJhdGluZyk7XG5cbiAgICBzd2l0Y2ggKHByaW1hcnlGbGFncykge1xuICAgICAgY2FzZSBQbGFjZW1lbnQ6XG4gICAgICAgIHtcbiAgICAgICAgICBjb21taXRQbGFjZW1lbnQobmV4dEVmZmVjdCk7IC8vIENsZWFyIHRoZSBcInBsYWNlbWVudFwiIGZyb20gZWZmZWN0IHRhZyBzbyB0aGF0IHdlIGtub3cgdGhhdCB0aGlzIGlzXG4gICAgICAgICAgLy8gaW5zZXJ0ZWQsIGJlZm9yZSBhbnkgbGlmZS1jeWNsZXMgbGlrZSBjb21wb25lbnREaWRNb3VudCBnZXRzIGNhbGxlZC5cbiAgICAgICAgICAvLyBUT0RPOiBmaW5kRE9NTm9kZSBkb2Vzbid0IHJlbHkgb24gdGhpcyBhbnkgbW9yZSBidXQgaXNNb3VudGVkIGRvZXNcbiAgICAgICAgICAvLyBhbmQgaXNNb3VudGVkIGlzIGRlcHJlY2F0ZWQgYW55d2F5IHNvIHdlIHNob3VsZCBiZSBhYmxlIHRvIGtpbGwgdGhpcy5cblxuICAgICAgICAgIG5leHRFZmZlY3QuZmxhZ3MgJj0gflBsYWNlbWVudDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIFBsYWNlbWVudEFuZFVwZGF0ZTpcbiAgICAgICAge1xuICAgICAgICAgIC8vIFBsYWNlbWVudFxuICAgICAgICAgIGNvbW1pdFBsYWNlbWVudChuZXh0RWZmZWN0KTsgLy8gQ2xlYXIgdGhlIFwicGxhY2VtZW50XCIgZnJvbSBlZmZlY3QgdGFnIHNvIHRoYXQgd2Uga25vdyB0aGF0IHRoaXMgaXNcbiAgICAgICAgICAvLyBpbnNlcnRlZCwgYmVmb3JlIGFueSBsaWZlLWN5Y2xlcyBsaWtlIGNvbXBvbmVudERpZE1vdW50IGdldHMgY2FsbGVkLlxuXG4gICAgICAgICAgbmV4dEVmZmVjdC5mbGFncyAmPSB+UGxhY2VtZW50OyAvLyBVcGRhdGVcblxuICAgICAgICAgIHZhciBfY3VycmVudCA9IG5leHRFZmZlY3QuYWx0ZXJuYXRlO1xuICAgICAgICAgIGNvbW1pdFdvcmsoX2N1cnJlbnQsIG5leHRFZmZlY3QpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgSHlkcmF0aW5nOlxuICAgICAgICB7XG4gICAgICAgICAgbmV4dEVmZmVjdC5mbGFncyAmPSB+SHlkcmF0aW5nO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgSHlkcmF0aW5nQW5kVXBkYXRlOlxuICAgICAgICB7XG4gICAgICAgICAgbmV4dEVmZmVjdC5mbGFncyAmPSB+SHlkcmF0aW5nOyAvLyBVcGRhdGVcblxuICAgICAgICAgIHZhciBfY3VycmVudDIgPSBuZXh0RWZmZWN0LmFsdGVybmF0ZTtcbiAgICAgICAgICBjb21taXRXb3JrKF9jdXJyZW50MiwgbmV4dEVmZmVjdCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBVcGRhdGU6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgX2N1cnJlbnQzID0gbmV4dEVmZmVjdC5hbHRlcm5hdGU7XG4gICAgICAgICAgY29tbWl0V29yayhfY3VycmVudDMsIG5leHRFZmZlY3QpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgRGVsZXRpb246XG4gICAgICAgIHtcbiAgICAgICAgICBjb21taXREZWxldGlvbihyb290LCBuZXh0RWZmZWN0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7XG4gICAgbmV4dEVmZmVjdCA9IG5leHRFZmZlY3QubmV4dEVmZmVjdDtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRMYXlvdXRFZmZlY3RzKHJvb3QsIGNvbW1pdHRlZExhbmVzKSB7XG5cblxuICB3aGlsZSAobmV4dEVmZmVjdCAhPT0gbnVsbCkge1xuICAgIHNldEN1cnJlbnRGaWJlcihuZXh0RWZmZWN0KTtcbiAgICB2YXIgZmxhZ3MgPSBuZXh0RWZmZWN0LmZsYWdzO1xuXG4gICAgaWYgKGZsYWdzICYgKFVwZGF0ZSB8IENhbGxiYWNrKSkge1xuICAgICAgdmFyIGN1cnJlbnQgPSBuZXh0RWZmZWN0LmFsdGVybmF0ZTtcbiAgICAgIGNvbW1pdExpZmVDeWNsZXMocm9vdCwgY3VycmVudCwgbmV4dEVmZmVjdCk7XG4gICAgfVxuXG4gICAge1xuICAgICAgaWYgKGZsYWdzICYgUmVmKSB7XG4gICAgICAgIGNvbW1pdEF0dGFjaFJlZihuZXh0RWZmZWN0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICAgIG5leHRFZmZlY3QgPSBuZXh0RWZmZWN0Lm5leHRFZmZlY3Q7XG4gIH1cbn1cblxuZnVuY3Rpb24gZmx1c2hQYXNzaXZlRWZmZWN0cygpIHtcbiAgLy8gUmV0dXJucyB3aGV0aGVyIHBhc3NpdmUgZWZmZWN0cyB3ZXJlIGZsdXNoZWQuXG4gIGlmIChwZW5kaW5nUGFzc2l2ZUVmZmVjdHNSZW5kZXJQcmlvcml0eSAhPT0gTm9Qcmlvcml0eSQxKSB7XG4gICAgdmFyIHByaW9yaXR5TGV2ZWwgPSBwZW5kaW5nUGFzc2l2ZUVmZmVjdHNSZW5kZXJQcmlvcml0eSA+IE5vcm1hbFByaW9yaXR5JDEgPyBOb3JtYWxQcmlvcml0eSQxIDogcGVuZGluZ1Bhc3NpdmVFZmZlY3RzUmVuZGVyUHJpb3JpdHk7XG4gICAgcGVuZGluZ1Bhc3NpdmVFZmZlY3RzUmVuZGVyUHJpb3JpdHkgPSBOb1ByaW9yaXR5JDE7XG5cbiAgICB7XG4gICAgICByZXR1cm4gcnVuV2l0aFByaW9yaXR5JDEocHJpb3JpdHlMZXZlbCwgZmx1c2hQYXNzaXZlRWZmZWN0c0ltcGwpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGVucXVldWVQZW5kaW5nUGFzc2l2ZUhvb2tFZmZlY3RNb3VudChmaWJlciwgZWZmZWN0KSB7XG4gIHBlbmRpbmdQYXNzaXZlSG9va0VmZmVjdHNNb3VudC5wdXNoKGVmZmVjdCwgZmliZXIpO1xuXG4gIGlmICghcm9vdERvZXNIYXZlUGFzc2l2ZUVmZmVjdHMpIHtcbiAgICByb290RG9lc0hhdmVQYXNzaXZlRWZmZWN0cyA9IHRydWU7XG4gICAgc2NoZWR1bGVDYWxsYmFjayhOb3JtYWxQcmlvcml0eSQxLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmbHVzaFBhc3NpdmVFZmZlY3RzKCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9KTtcbiAgfVxufVxuZnVuY3Rpb24gZW5xdWV1ZVBlbmRpbmdQYXNzaXZlSG9va0VmZmVjdFVubW91bnQoZmliZXIsIGVmZmVjdCkge1xuICBwZW5kaW5nUGFzc2l2ZUhvb2tFZmZlY3RzVW5tb3VudC5wdXNoKGVmZmVjdCwgZmliZXIpO1xuXG4gIHtcbiAgICBmaWJlci5mbGFncyB8PSBQYXNzaXZlVW5tb3VudFBlbmRpbmdEZXY7XG4gICAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZTtcblxuICAgIGlmIChhbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgIGFsdGVybmF0ZS5mbGFncyB8PSBQYXNzaXZlVW5tb3VudFBlbmRpbmdEZXY7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFyb290RG9lc0hhdmVQYXNzaXZlRWZmZWN0cykge1xuICAgIHJvb3REb2VzSGF2ZVBhc3NpdmVFZmZlY3RzID0gdHJ1ZTtcbiAgICBzY2hlZHVsZUNhbGxiYWNrKE5vcm1hbFByaW9yaXR5JDEsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZsdXNoUGFzc2l2ZUVmZmVjdHMoKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGludm9rZVBhc3NpdmVFZmZlY3RDcmVhdGUoZWZmZWN0KSB7XG4gIHZhciBjcmVhdGUgPSBlZmZlY3QuY3JlYXRlO1xuICBlZmZlY3QuZGVzdHJveSA9IGNyZWF0ZSgpO1xufVxuXG5mdW5jdGlvbiBmbHVzaFBhc3NpdmVFZmZlY3RzSW1wbCgpIHtcbiAgaWYgKHJvb3RXaXRoUGVuZGluZ1Bhc3NpdmVFZmZlY3RzID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIHJvb3QgPSByb290V2l0aFBlbmRpbmdQYXNzaXZlRWZmZWN0cztcbiAgdmFyIGxhbmVzID0gcGVuZGluZ1Bhc3NpdmVFZmZlY3RzTGFuZXM7XG4gIHJvb3RXaXRoUGVuZGluZ1Bhc3NpdmVFZmZlY3RzID0gbnVsbDtcbiAgcGVuZGluZ1Bhc3NpdmVFZmZlY3RzTGFuZXMgPSBOb0xhbmVzO1xuXG4gIGlmICghKChleGVjdXRpb25Db250ZXh0ICYgKFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgPT09IE5vQ29udGV4dCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJDYW5ub3QgZmx1c2ggcGFzc2l2ZSBlZmZlY3RzIHdoaWxlIGFscmVhZHkgcmVuZGVyaW5nLlwiICk7XG4gICAgfVxuICB9XG5cbiAge1xuICAgIGlzRmx1c2hpbmdQYXNzaXZlRWZmZWN0cyA9IHRydWU7XG4gIH1cblxuICB2YXIgcHJldkV4ZWN1dGlvbkNvbnRleHQgPSBleGVjdXRpb25Db250ZXh0O1xuICBleGVjdXRpb25Db250ZXh0IHw9IENvbW1pdENvbnRleHQ7XG4gIHZhciBwcmV2SW50ZXJhY3Rpb25zID0gcHVzaEludGVyYWN0aW9ucyhyb290KTsgLy8gSXQncyBpbXBvcnRhbnQgdGhhdCBBTEwgcGVuZGluZyBwYXNzaXZlIGVmZmVjdCBkZXN0cm95IGZ1bmN0aW9ucyBhcmUgY2FsbGVkXG4gIC8vIGJlZm9yZSBBTlkgcGFzc2l2ZSBlZmZlY3QgY3JlYXRlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkLlxuICAvLyBPdGhlcndpc2UgZWZmZWN0cyBpbiBzaWJsaW5nIGNvbXBvbmVudHMgbWlnaHQgaW50ZXJmZXJlIHdpdGggZWFjaCBvdGhlci5cbiAgLy8gZS5nLiBhIGRlc3Ryb3kgZnVuY3Rpb24gaW4gb25lIGNvbXBvbmVudCBtYXkgdW5pbnRlbnRpb25hbGx5IG92ZXJyaWRlIGEgcmVmXG4gIC8vIHZhbHVlIHNldCBieSBhIGNyZWF0ZSBmdW5jdGlvbiBpbiBhbm90aGVyIGNvbXBvbmVudC5cbiAgLy8gTGF5b3V0IGVmZmVjdHMgaGF2ZSB0aGUgc2FtZSBjb25zdHJhaW50LlxuICAvLyBGaXJzdCBwYXNzOiBEZXN0cm95IHN0YWxlIHBhc3NpdmUgZWZmZWN0cy5cblxuICB2YXIgdW5tb3VudEVmZmVjdHMgPSBwZW5kaW5nUGFzc2l2ZUhvb2tFZmZlY3RzVW5tb3VudDtcbiAgcGVuZGluZ1Bhc3NpdmVIb29rRWZmZWN0c1VubW91bnQgPSBbXTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHVubW91bnRFZmZlY3RzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgdmFyIF9lZmZlY3QgPSB1bm1vdW50RWZmZWN0c1tpXTtcbiAgICB2YXIgZmliZXIgPSB1bm1vdW50RWZmZWN0c1tpICsgMV07XG4gICAgdmFyIGRlc3Ryb3kgPSBfZWZmZWN0LmRlc3Ryb3k7XG4gICAgX2VmZmVjdC5kZXN0cm95ID0gdW5kZWZpbmVkO1xuXG4gICAge1xuICAgICAgZmliZXIuZmxhZ3MgJj0gflBhc3NpdmVVbm1vdW50UGVuZGluZ0RldjtcbiAgICAgIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG5cbiAgICAgIGlmIChhbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgICAgYWx0ZXJuYXRlLmZsYWdzICY9IH5QYXNzaXZlVW5tb3VudFBlbmRpbmdEZXY7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBkZXN0cm95ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB7XG4gICAgICAgIHNldEN1cnJlbnRGaWJlcihmaWJlcik7XG5cbiAgICAgICAge1xuICAgICAgICAgIGludm9rZUd1YXJkZWRDYWxsYmFjayhudWxsLCBkZXN0cm95LCBudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXNDYXVnaHRFcnJvcigpKSB7XG4gICAgICAgICAgaWYgKCEoZmliZXIgIT09IG51bGwpKSB7XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRocm93IEVycm9yKCBcIlNob3VsZCBiZSB3b3JraW5nIG9uIGFuIGVmZmVjdC5cIiApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBlcnJvciA9IGNsZWFyQ2F1Z2h0RXJyb3IoKTtcbiAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaWJlciwgZXJyb3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gLy8gU2Vjb25kIHBhc3M6IENyZWF0ZSBuZXcgcGFzc2l2ZSBlZmZlY3RzLlxuXG5cbiAgdmFyIG1vdW50RWZmZWN0cyA9IHBlbmRpbmdQYXNzaXZlSG9va0VmZmVjdHNNb3VudDtcbiAgcGVuZGluZ1Bhc3NpdmVIb29rRWZmZWN0c01vdW50ID0gW107XG5cbiAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IG1vdW50RWZmZWN0cy5sZW5ndGg7IF9pICs9IDIpIHtcbiAgICB2YXIgX2VmZmVjdDIgPSBtb3VudEVmZmVjdHNbX2ldO1xuICAgIHZhciBfZmliZXIgPSBtb3VudEVmZmVjdHNbX2kgKyAxXTtcblxuICAgIHtcbiAgICAgIHNldEN1cnJlbnRGaWJlcihfZmliZXIpO1xuXG4gICAgICB7XG4gICAgICAgIGludm9rZUd1YXJkZWRDYWxsYmFjayhudWxsLCBpbnZva2VQYXNzaXZlRWZmZWN0Q3JlYXRlLCBudWxsLCBfZWZmZWN0Mik7XG4gICAgICB9XG5cbiAgICAgIGlmIChoYXNDYXVnaHRFcnJvcigpKSB7XG4gICAgICAgIGlmICghKF9maWJlciAhPT0gbnVsbCkpIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvciggXCJTaG91bGQgYmUgd29ya2luZyBvbiBhbiBlZmZlY3QuXCIgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgX2Vycm9yNCA9IGNsZWFyQ2F1Z2h0RXJyb3IoKTtcblxuICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihfZmliZXIsIF9lcnJvcjQpO1xuICAgICAgfVxuXG4gICAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICAgIH1cbiAgfSAvLyBOb3RlOiBUaGlzIGN1cnJlbnRseSBhc3N1bWVzIHRoZXJlIGFyZSBubyBwYXNzaXZlIGVmZmVjdHMgb24gdGhlIHJvb3QgZmliZXJcbiAgLy8gYmVjYXVzZSB0aGUgcm9vdCBpcyBub3QgcGFydCBvZiBpdHMgb3duIGVmZmVjdCBsaXN0LlxuICAvLyBUaGlzIGNvdWxkIGNoYW5nZSBpbiB0aGUgZnV0dXJlLlxuXG5cbiAgdmFyIGVmZmVjdCA9IHJvb3QuY3VycmVudC5maXJzdEVmZmVjdDtcblxuICB3aGlsZSAoZWZmZWN0ICE9PSBudWxsKSB7XG4gICAgdmFyIG5leHROZXh0RWZmZWN0ID0gZWZmZWN0Lm5leHRFZmZlY3Q7IC8vIFJlbW92ZSBuZXh0RWZmZWN0IHBvaW50ZXIgdG8gYXNzaXN0IEdDXG5cbiAgICBlZmZlY3QubmV4dEVmZmVjdCA9IG51bGw7XG5cbiAgICBpZiAoZWZmZWN0LmZsYWdzICYgRGVsZXRpb24pIHtcbiAgICAgIGRldGFjaEZpYmVyQWZ0ZXJFZmZlY3RzKGVmZmVjdCk7XG4gICAgfVxuXG4gICAgZWZmZWN0ID0gbmV4dE5leHRFZmZlY3Q7XG4gIH1cblxuICB7XG4gICAgcG9wSW50ZXJhY3Rpb25zKHByZXZJbnRlcmFjdGlvbnMpO1xuICAgIGZpbmlzaFBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgbGFuZXMpO1xuICB9XG5cbiAge1xuICAgIGlzRmx1c2hpbmdQYXNzaXZlRWZmZWN0cyA9IGZhbHNlO1xuICB9XG5cbiAgZXhlY3V0aW9uQ29udGV4dCA9IHByZXZFeGVjdXRpb25Db250ZXh0O1xuICBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlKCk7IC8vIElmIGFkZGl0aW9uYWwgcGFzc2l2ZSBlZmZlY3RzIHdlcmUgc2NoZWR1bGVkLCBpbmNyZW1lbnQgYSBjb3VudGVyLiBJZiB0aGlzXG4gIC8vIGV4Y2VlZHMgdGhlIGxpbWl0LCB3ZSdsbCBmaXJlIGEgd2FybmluZy5cblxuICBuZXN0ZWRQYXNzaXZlVXBkYXRlQ291bnQgPSByb290V2l0aFBlbmRpbmdQYXNzaXZlRWZmZWN0cyA9PT0gbnVsbCA/IDAgOiBuZXN0ZWRQYXNzaXZlVXBkYXRlQ291bnQgKyAxO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaXNBbHJlYWR5RmFpbGVkTGVnYWN5RXJyb3JCb3VuZGFyeShpbnN0YW5jZSkge1xuICByZXR1cm4gbGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQgIT09IG51bGwgJiYgbGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQuaGFzKGluc3RhbmNlKTtcbn1cbmZ1bmN0aW9uIG1hcmtMZWdhY3lFcnJvckJvdW5kYXJ5QXNGYWlsZWQoaW5zdGFuY2UpIHtcbiAgaWYgKGxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkID09PSBudWxsKSB7XG4gICAgbGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQgPSBuZXcgU2V0KFtpbnN0YW5jZV0pO1xuICB9IGVsc2Uge1xuICAgIGxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkLmFkZChpbnN0YW5jZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJlcGFyZVRvVGhyb3dVbmNhdWdodEVycm9yKGVycm9yKSB7XG4gIGlmICghaGFzVW5jYXVnaHRFcnJvcikge1xuICAgIGhhc1VuY2F1Z2h0RXJyb3IgPSB0cnVlO1xuICAgIGZpcnN0VW5jYXVnaHRFcnJvciA9IGVycm9yO1xuICB9XG59XG5cbnZhciBvblVuY2F1Z2h0RXJyb3IgPSBwcmVwYXJlVG9UaHJvd1VuY2F1Z2h0RXJyb3I7XG5cbmZ1bmN0aW9uIGNhcHR1cmVDb21taXRQaGFzZUVycm9yT25Sb290KHJvb3RGaWJlciwgc291cmNlRmliZXIsIGVycm9yKSB7XG4gIHZhciBlcnJvckluZm8gPSBjcmVhdGVDYXB0dXJlZFZhbHVlKGVycm9yLCBzb3VyY2VGaWJlcik7XG4gIHZhciB1cGRhdGUgPSBjcmVhdGVSb290RXJyb3JVcGRhdGUocm9vdEZpYmVyLCBlcnJvckluZm8sIFN5bmNMYW5lKTtcbiAgZW5xdWV1ZVVwZGF0ZShyb290RmliZXIsIHVwZGF0ZSk7XG4gIHZhciBldmVudFRpbWUgPSByZXF1ZXN0RXZlbnRUaW1lKCk7XG4gIHZhciByb290ID0gbWFya1VwZGF0ZUxhbmVGcm9tRmliZXJUb1Jvb3Qocm9vdEZpYmVyLCBTeW5jTGFuZSk7XG5cbiAgaWYgKHJvb3QgIT09IG51bGwpIHtcbiAgICBtYXJrUm9vdFVwZGF0ZWQocm9vdCwgU3luY0xhbmUsIGV2ZW50VGltZSk7XG4gICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QsIGV2ZW50VGltZSk7XG4gICAgc2NoZWR1bGVQZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIFN5bmNMYW5lKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihzb3VyY2VGaWJlciwgZXJyb3IpIHtcbiAgaWYgKHNvdXJjZUZpYmVyLnRhZyA9PT0gSG9zdFJvb3QpIHtcbiAgICAvLyBFcnJvciB3YXMgdGhyb3duIGF0IHRoZSByb290LiBUaGVyZSBpcyBubyBwYXJlbnQsIHNvIHRoZSByb290XG4gICAgLy8gaXRzZWxmIHNob3VsZCBjYXB0dXJlIGl0LlxuICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yT25Sb290KHNvdXJjZUZpYmVyLCBzb3VyY2VGaWJlciwgZXJyb3IpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBmaWJlciA9IHNvdXJjZUZpYmVyLnJldHVybjtcblxuICB3aGlsZSAoZmliZXIgIT09IG51bGwpIHtcbiAgICBpZiAoZmliZXIudGFnID09PSBIb3N0Um9vdCkge1xuICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3JPblJvb3QoZmliZXIsIHNvdXJjZUZpYmVyLCBlcnJvcik7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmIChmaWJlci50YWcgPT09IENsYXNzQ29tcG9uZW50KSB7XG4gICAgICB2YXIgY3RvciA9IGZpYmVyLnR5cGU7XG4gICAgICB2YXIgaW5zdGFuY2UgPSBmaWJlci5zdGF0ZU5vZGU7XG5cbiAgICAgIGlmICh0eXBlb2YgY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZENhdGNoID09PSAnZnVuY3Rpb24nICYmICFpc0FscmVhZHlGYWlsZWRMZWdhY3lFcnJvckJvdW5kYXJ5KGluc3RhbmNlKSkge1xuICAgICAgICB2YXIgZXJyb3JJbmZvID0gY3JlYXRlQ2FwdHVyZWRWYWx1ZShlcnJvciwgc291cmNlRmliZXIpO1xuICAgICAgICB2YXIgdXBkYXRlID0gY3JlYXRlQ2xhc3NFcnJvclVwZGF0ZShmaWJlciwgZXJyb3JJbmZvLCBTeW5jTGFuZSk7XG4gICAgICAgIGVucXVldWVVcGRhdGUoZmliZXIsIHVwZGF0ZSk7XG4gICAgICAgIHZhciBldmVudFRpbWUgPSByZXF1ZXN0RXZlbnRUaW1lKCk7XG4gICAgICAgIHZhciByb290ID0gbWFya1VwZGF0ZUxhbmVGcm9tRmliZXJUb1Jvb3QoZmliZXIsIFN5bmNMYW5lKTtcblxuICAgICAgICBpZiAocm9vdCAhPT0gbnVsbCkge1xuICAgICAgICAgIG1hcmtSb290VXBkYXRlZChyb290LCBTeW5jTGFuZSwgZXZlbnRUaW1lKTtcbiAgICAgICAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCwgZXZlbnRUaW1lKTtcbiAgICAgICAgICBzY2hlZHVsZVBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgU3luY0xhbmUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFRoaXMgY29tcG9uZW50IGhhcyBhbHJlYWR5IGJlZW4gdW5tb3VudGVkLlxuICAgICAgICAgIC8vIFdlIGNhbid0IHNjaGVkdWxlIGFueSBmb2xsb3cgdXAgd29yayBmb3IgdGhlIHJvb3QgYmVjYXVzZSB0aGUgZmliZXIgaXMgYWxyZWFkeSB1bm1vdW50ZWQsXG4gICAgICAgICAgLy8gYnV0IHdlIGNhbiBzdGlsbCBjYWxsIHRoZSBsb2ctb25seSBib3VuZGFyeSBzbyB0aGUgZXJyb3IgaXNuJ3Qgc3dhbGxvd2VkLlxuICAgICAgICAgIC8vXG4gICAgICAgICAgLy8gVE9ETyBUaGlzIGlzIG9ubHkgYSB0ZW1wb3JhcnkgYmFuZGFpZCBmb3IgdGhlIG9sZCByZWNvbmNpbGVyIGZvcmsuXG4gICAgICAgICAgLy8gV2UgY2FuIGRlbGV0ZSB0aGlzIHNwZWNpYWwgY2FzZSBvbmNlIHRoZSBuZXcgZm9yayBpcyBtZXJnZWQuXG4gICAgICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRDYXRjaCA9PT0gJ2Z1bmN0aW9uJyAmJiAhaXNBbHJlYWR5RmFpbGVkTGVnYWN5RXJyb3JCb3VuZGFyeShpbnN0YW5jZSkpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGluc3RhbmNlLmNvbXBvbmVudERpZENhdGNoKGVycm9yLCBlcnJvckluZm8pO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3JUb0lnbm9yZSkgey8vIFRPRE8gSWdub3JlIHRoaXMgZXJyb3I/IFJldGhyb3cgaXQ/XG4gICAgICAgICAgICAgIC8vIFRoaXMgaXMga2luZCBvZiBhbiBlZGdlIGNhc2UuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZpYmVyID0gZmliZXIucmV0dXJuO1xuICB9XG59XG5mdW5jdGlvbiBwaW5nU3VzcGVuZGVkUm9vdChyb290LCB3YWtlYWJsZSwgcGluZ2VkTGFuZXMpIHtcbiAgdmFyIHBpbmdDYWNoZSA9IHJvb3QucGluZ0NhY2hlO1xuXG4gIGlmIChwaW5nQ2FjaGUgIT09IG51bGwpIHtcbiAgICAvLyBUaGUgd2FrZWFibGUgcmVzb2x2ZWQsIHNvIHdlIG5vIGxvbmdlciBuZWVkIHRvIG1lbW9pemUsIGJlY2F1c2UgaXQgd2lsbFxuICAgIC8vIG5ldmVyIGJlIHRocm93biBhZ2Fpbi5cbiAgICBwaW5nQ2FjaGUuZGVsZXRlKHdha2VhYmxlKTtcbiAgfVxuXG4gIHZhciBldmVudFRpbWUgPSByZXF1ZXN0RXZlbnRUaW1lKCk7XG4gIG1hcmtSb290UGluZ2VkKHJvb3QsIHBpbmdlZExhbmVzKTtcblxuICBpZiAod29ya0luUHJvZ3Jlc3NSb290ID09PSByb290ICYmIGlzU3Vic2V0T2ZMYW5lcyh3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcywgcGluZ2VkTGFuZXMpKSB7XG4gICAgLy8gUmVjZWl2ZWQgYSBwaW5nIGF0IHRoZSBzYW1lIHByaW9yaXR5IGxldmVsIGF0IHdoaWNoIHdlJ3JlIGN1cnJlbnRseVxuICAgIC8vIHJlbmRlcmluZy4gV2UgbWlnaHQgd2FudCB0byByZXN0YXJ0IHRoaXMgcmVuZGVyLiBUaGlzIHNob3VsZCBtaXJyb3JcbiAgICAvLyB0aGUgbG9naWMgb2Ygd2hldGhlciBvciBub3QgYSByb290IHN1c3BlbmRzIG9uY2UgaXQgY29tcGxldGVzLlxuICAgIC8vIFRPRE86IElmIHdlJ3JlIHJlbmRlcmluZyBzeW5jIGVpdGhlciBkdWUgdG8gU3luYywgQmF0Y2hlZCBvciBleHBpcmVkLFxuICAgIC8vIHdlIHNob3VsZCBwcm9iYWJseSBuZXZlciByZXN0YXJ0LlxuICAgIC8vIElmIHdlJ3JlIHN1c3BlbmRlZCB3aXRoIGRlbGF5LCBvciBpZiBpdCdzIGEgcmV0cnksIHdlJ2xsIGFsd2F5cyBzdXNwZW5kXG4gICAgLy8gc28gd2UgY2FuIGFsd2F5cyByZXN0YXJ0LlxuICAgIGlmICh3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID09PSBSb290U3VzcGVuZGVkV2l0aERlbGF5IHx8IHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPT09IFJvb3RTdXNwZW5kZWQgJiYgaW5jbHVkZXNPbmx5UmV0cmllcyh3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcykgJiYgbm93KCkgLSBnbG9iYWxNb3N0UmVjZW50RmFsbGJhY2tUaW1lIDwgRkFMTEJBQ0tfVEhST1RUTEVfTVMpIHtcbiAgICAgIC8vIFJlc3RhcnQgZnJvbSB0aGUgcm9vdC5cbiAgICAgIHByZXBhcmVGcmVzaFN0YWNrKHJvb3QsIE5vTGFuZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBFdmVuIHRob3VnaCB3ZSBjYW4ndCByZXN0YXJ0IHJpZ2h0IG5vdywgd2UgbWlnaHQgZ2V0IGFuXG4gICAgICAvLyBvcHBvcnR1bml0eSBsYXRlci4gU28gd2UgbWFyayB0aGlzIHJlbmRlciBhcyBoYXZpbmcgYSBwaW5nLlxuICAgICAgd29ya0luUHJvZ3Jlc3NSb290UGluZ2VkTGFuZXMgPSBtZXJnZUxhbmVzKHdvcmtJblByb2dyZXNzUm9vdFBpbmdlZExhbmVzLCBwaW5nZWRMYW5lcyk7XG4gICAgfVxuICB9XG5cbiAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QsIGV2ZW50VGltZSk7XG4gIHNjaGVkdWxlUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCBwaW5nZWRMYW5lcyk7XG59XG5cbmZ1bmN0aW9uIHJldHJ5VGltZWRPdXRCb3VuZGFyeShib3VuZGFyeUZpYmVyLCByZXRyeUxhbmUpIHtcbiAgLy8gVGhlIGJvdW5kYXJ5IGZpYmVyIChhIFN1c3BlbnNlIGNvbXBvbmVudCBvciBTdXNwZW5zZUxpc3QgY29tcG9uZW50KVxuICAvLyBwcmV2aW91c2x5IHdhcyByZW5kZXJlZCBpbiBpdHMgZmFsbGJhY2sgc3RhdGUuIE9uZSBvZiB0aGUgcHJvbWlzZXMgdGhhdFxuICAvLyBzdXNwZW5kZWQgaXQgaGFzIHJlc29sdmVkLCB3aGljaCBtZWFucyBhdCBsZWFzdCBwYXJ0IG9mIHRoZSB0cmVlIHdhc1xuICAvLyBsaWtlbHkgdW5ibG9ja2VkLiBUcnkgcmVuZGVyaW5nIGFnYWluLCBhdCBhIG5ldyBleHBpcmF0aW9uIHRpbWUuXG4gIGlmIChyZXRyeUxhbmUgPT09IE5vTGFuZSkge1xuICAgIHJldHJ5TGFuZSA9IHJlcXVlc3RSZXRyeUxhbmUoYm91bmRhcnlGaWJlcik7XG4gIH0gLy8gVE9ETzogU3BlY2lhbCBjYXNlIGlkbGUgcHJpb3JpdHk/XG5cblxuICB2YXIgZXZlbnRUaW1lID0gcmVxdWVzdEV2ZW50VGltZSgpO1xuICB2YXIgcm9vdCA9IG1hcmtVcGRhdGVMYW5lRnJvbUZpYmVyVG9Sb290KGJvdW5kYXJ5RmliZXIsIHJldHJ5TGFuZSk7XG5cbiAgaWYgKHJvb3QgIT09IG51bGwpIHtcbiAgICBtYXJrUm9vdFVwZGF0ZWQocm9vdCwgcmV0cnlMYW5lLCBldmVudFRpbWUpO1xuICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290LCBldmVudFRpbWUpO1xuICAgIHNjaGVkdWxlUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCByZXRyeUxhbmUpO1xuICB9XG59XG5mdW5jdGlvbiByZXNvbHZlUmV0cnlXYWtlYWJsZShib3VuZGFyeUZpYmVyLCB3YWtlYWJsZSkge1xuICB2YXIgcmV0cnlMYW5lID0gTm9MYW5lOyAvLyBEZWZhdWx0XG5cbiAgdmFyIHJldHJ5Q2FjaGU7XG5cbiAge1xuICAgIHJldHJ5Q2FjaGUgPSBib3VuZGFyeUZpYmVyLnN0YXRlTm9kZTtcbiAgfVxuXG4gIGlmIChyZXRyeUNhY2hlICE9PSBudWxsKSB7XG4gICAgLy8gVGhlIHdha2VhYmxlIHJlc29sdmVkLCBzbyB3ZSBubyBsb25nZXIgbmVlZCB0byBtZW1vaXplLCBiZWNhdXNlIGl0IHdpbGxcbiAgICAvLyBuZXZlciBiZSB0aHJvd24gYWdhaW4uXG4gICAgcmV0cnlDYWNoZS5kZWxldGUod2FrZWFibGUpO1xuICB9XG5cbiAgcmV0cnlUaW1lZE91dEJvdW5kYXJ5KGJvdW5kYXJ5RmliZXIsIHJldHJ5TGFuZSk7XG59IC8vIENvbXB1dGVzIHRoZSBuZXh0IEp1c3QgTm90aWNlYWJsZSBEaWZmZXJlbmNlIChKTkQpIGJvdW5kYXJ5LlxuLy8gVGhlIHRoZW9yeSBpcyB0aGF0IGEgcGVyc29uIGNhbid0IHRlbGwgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBzbWFsbCBkaWZmZXJlbmNlcyBpbiB0aW1lLlxuLy8gVGhlcmVmb3JlLCBpZiB3ZSB3YWl0IGEgYml0IGxvbmdlciB0aGFuIG5lY2Vzc2FyeSB0aGF0IHdvbid0IHRyYW5zbGF0ZSB0byBhIG5vdGljZWFibGVcbi8vIGRpZmZlcmVuY2UgaW4gdGhlIGV4cGVyaWVuY2UuIEhvd2V2ZXIsIHdhaXRpbmcgZm9yIGxvbmdlciBtaWdodCBtZWFuIHRoYXQgd2UgY2FuIGF2b2lkXG4vLyBzaG93aW5nIGFuIGludGVybWVkaWF0ZSBsb2FkaW5nIHN0YXRlLiBUaGUgbG9uZ2VyIHdlIGhhdmUgYWxyZWFkeSB3YWl0ZWQsIHRoZSBoYXJkZXIgaXRcbi8vIGlzIHRvIHRlbGwgc21hbGwgZGlmZmVyZW5jZXMgaW4gdGltZS4gVGhlcmVmb3JlLCB0aGUgbG9uZ2VyIHdlJ3ZlIGFscmVhZHkgd2FpdGVkLFxuLy8gdGhlIGxvbmdlciB3ZSBjYW4gd2FpdCBhZGRpdGlvbmFsbHkuIEF0IHNvbWUgcG9pbnQgd2UgaGF2ZSB0byBnaXZlIHVwIHRob3VnaC5cbi8vIFdlIHBpY2sgYSB0cmFpbiBtb2RlbCB3aGVyZSB0aGUgbmV4dCBib3VuZGFyeSBjb21taXRzIGF0IGEgY29uc2lzdGVudCBzY2hlZHVsZS5cbi8vIFRoZXNlIHBhcnRpY3VsYXIgbnVtYmVycyBhcmUgdmFndWUgZXN0aW1hdGVzLiBXZSBleHBlY3QgdG8gYWRqdXN0IHRoZW0gYmFzZWQgb24gcmVzZWFyY2guXG5cbmZ1bmN0aW9uIGpuZCh0aW1lRWxhcHNlZCkge1xuICByZXR1cm4gdGltZUVsYXBzZWQgPCAxMjAgPyAxMjAgOiB0aW1lRWxhcHNlZCA8IDQ4MCA/IDQ4MCA6IHRpbWVFbGFwc2VkIDwgMTA4MCA/IDEwODAgOiB0aW1lRWxhcHNlZCA8IDE5MjAgPyAxOTIwIDogdGltZUVsYXBzZWQgPCAzMDAwID8gMzAwMCA6IHRpbWVFbGFwc2VkIDwgNDMyMCA/IDQzMjAgOiBjZWlsKHRpbWVFbGFwc2VkIC8gMTk2MCkgKiAxOTYwO1xufVxuXG5mdW5jdGlvbiBjaGVja0Zvck5lc3RlZFVwZGF0ZXMoKSB7XG4gIGlmIChuZXN0ZWRVcGRhdGVDb3VudCA+IE5FU1RFRF9VUERBVEVfTElNSVQpIHtcbiAgICBuZXN0ZWRVcGRhdGVDb3VudCA9IDA7XG4gICAgcm9vdFdpdGhOZXN0ZWRVcGRhdGVzID0gbnVsbDtcblxuICAgIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiTWF4aW11bSB1cGRhdGUgZGVwdGggZXhjZWVkZWQuIFRoaXMgY2FuIGhhcHBlbiB3aGVuIGEgY29tcG9uZW50IHJlcGVhdGVkbHkgY2FsbHMgc2V0U3RhdGUgaW5zaWRlIGNvbXBvbmVudFdpbGxVcGRhdGUgb3IgY29tcG9uZW50RGlkVXBkYXRlLiBSZWFjdCBsaW1pdHMgdGhlIG51bWJlciBvZiBuZXN0ZWQgdXBkYXRlcyB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzLlwiICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAge1xuICAgIGlmIChuZXN0ZWRQYXNzaXZlVXBkYXRlQ291bnQgPiBORVNURURfUEFTU0lWRV9VUERBVEVfTElNSVQpIHtcbiAgICAgIG5lc3RlZFBhc3NpdmVVcGRhdGVDb3VudCA9IDA7XG5cbiAgICAgIGVycm9yKCdNYXhpbXVtIHVwZGF0ZSBkZXB0aCBleGNlZWRlZC4gVGhpcyBjYW4gaGFwcGVuIHdoZW4gYSBjb21wb25lbnQgJyArIFwiY2FsbHMgc2V0U3RhdGUgaW5zaWRlIHVzZUVmZmVjdCwgYnV0IHVzZUVmZmVjdCBlaXRoZXIgZG9lc24ndCBcIiArICdoYXZlIGEgZGVwZW5kZW5jeSBhcnJheSwgb3Igb25lIG9mIHRoZSBkZXBlbmRlbmNpZXMgY2hhbmdlcyBvbiAnICsgJ2V2ZXJ5IHJlbmRlci4nKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmx1c2hSZW5kZXJQaGFzZVN0cmljdE1vZGVXYXJuaW5nc0luREVWKCkge1xuICB7XG4gICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MuZmx1c2hMZWdhY3lDb250ZXh0V2FybmluZygpO1xuXG4gICAge1xuICAgICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MuZmx1c2hQZW5kaW5nVW5zYWZlTGlmZWN5Y2xlV2FybmluZ3MoKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIGRpZFdhcm5TdGF0ZVVwZGF0ZUZvck5vdFlldE1vdW50ZWRDb21wb25lbnQgPSBudWxsO1xuXG5mdW5jdGlvbiB3YXJuQWJvdXRVcGRhdGVPbk5vdFlldE1vdW50ZWRGaWJlckluREVWKGZpYmVyKSB7XG4gIHtcbiAgICBpZiAoKGV4ZWN1dGlvbkNvbnRleHQgJiBSZW5kZXJDb250ZXh0KSAhPT0gTm9Db250ZXh0KSB7XG4gICAgICAvLyBXZSBsZXQgdGhlIG90aGVyIHdhcm5pbmcgYWJvdXQgcmVuZGVyIHBoYXNlIHVwZGF0ZXMgZGVhbCB3aXRoIHRoaXMgb25lLlxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghKGZpYmVyLm1vZGUgJiAoQmxvY2tpbmdNb2RlIHwgQ29uY3VycmVudE1vZGUpKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB0YWcgPSBmaWJlci50YWc7XG5cbiAgICBpZiAodGFnICE9PSBJbmRldGVybWluYXRlQ29tcG9uZW50ICYmIHRhZyAhPT0gSG9zdFJvb3QgJiYgdGFnICE9PSBDbGFzc0NvbXBvbmVudCAmJiB0YWcgIT09IEZ1bmN0aW9uQ29tcG9uZW50ICYmIHRhZyAhPT0gRm9yd2FyZFJlZiAmJiB0YWcgIT09IE1lbW9Db21wb25lbnQgJiYgdGFnICE9PSBTaW1wbGVNZW1vQ29tcG9uZW50ICYmIHRhZyAhPT0gQmxvY2spIHtcbiAgICAgIC8vIE9ubHkgd2FybiBmb3IgdXNlci1kZWZpbmVkIGNvbXBvbmVudHMsIG5vdCBpbnRlcm5hbCBvbmVzIGxpa2UgU3VzcGVuc2UuXG4gICAgICByZXR1cm47XG4gICAgfSAvLyBXZSBzaG93IHRoZSB3aG9sZSBzdGFjayBidXQgZGVkdXBlIG9uIHRoZSB0b3AgY29tcG9uZW50J3MgbmFtZSBiZWNhdXNlXG4gICAgLy8gdGhlIHByb2JsZW1hdGljIGNvZGUgYWxtb3N0IGFsd2F5cyBsaWVzIGluc2lkZSB0aGF0IGNvbXBvbmVudC5cblxuXG4gICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpIHx8ICdSZWFjdENvbXBvbmVudCc7XG5cbiAgICBpZiAoZGlkV2FyblN0YXRlVXBkYXRlRm9yTm90WWV0TW91bnRlZENvbXBvbmVudCAhPT0gbnVsbCkge1xuICAgICAgaWYgKGRpZFdhcm5TdGF0ZVVwZGF0ZUZvck5vdFlldE1vdW50ZWRDb21wb25lbnQuaGFzKGNvbXBvbmVudE5hbWUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZGlkV2FyblN0YXRlVXBkYXRlRm9yTm90WWV0TW91bnRlZENvbXBvbmVudC5hZGQoY29tcG9uZW50TmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpZFdhcm5TdGF0ZVVwZGF0ZUZvck5vdFlldE1vdW50ZWRDb21wb25lbnQgPSBuZXcgU2V0KFtjb21wb25lbnROYW1lXSk7XG4gICAgfVxuXG4gICAgdmFyIHByZXZpb3VzRmliZXIgPSBjdXJyZW50O1xuXG4gICAgdHJ5IHtcbiAgICAgIHNldEN1cnJlbnRGaWJlcihmaWJlcik7XG5cbiAgICAgIGVycm9yKFwiQ2FuJ3QgcGVyZm9ybSBhIFJlYWN0IHN0YXRlIHVwZGF0ZSBvbiBhIGNvbXBvbmVudCB0aGF0IGhhc24ndCBtb3VudGVkIHlldC4gXCIgKyAnVGhpcyBpbmRpY2F0ZXMgdGhhdCB5b3UgaGF2ZSBhIHNpZGUtZWZmZWN0IGluIHlvdXIgcmVuZGVyIGZ1bmN0aW9uIHRoYXQgJyArICdhc3luY2hyb25vdXNseSBsYXRlciBjYWxscyB0cmllcyB0byB1cGRhdGUgdGhlIGNvbXBvbmVudC4gTW92ZSB0aGlzIHdvcmsgdG8gJyArICd1c2VFZmZlY3QgaW5zdGVhZC4nKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKHByZXZpb3VzRmliZXIpIHtcbiAgICAgICAgc2V0Q3VycmVudEZpYmVyKGZpYmVyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciBkaWRXYXJuU3RhdGVVcGRhdGVGb3JVbm1vdW50ZWRDb21wb25lbnQgPSBudWxsO1xuXG5mdW5jdGlvbiB3YXJuQWJvdXRVcGRhdGVPblVubW91bnRlZEZpYmVySW5ERVYoZmliZXIpIHtcbiAge1xuICAgIHZhciB0YWcgPSBmaWJlci50YWc7XG5cbiAgICBpZiAodGFnICE9PSBIb3N0Um9vdCAmJiB0YWcgIT09IENsYXNzQ29tcG9uZW50ICYmIHRhZyAhPT0gRnVuY3Rpb25Db21wb25lbnQgJiYgdGFnICE9PSBGb3J3YXJkUmVmICYmIHRhZyAhPT0gTWVtb0NvbXBvbmVudCAmJiB0YWcgIT09IFNpbXBsZU1lbW9Db21wb25lbnQgJiYgdGFnICE9PSBCbG9jaykge1xuICAgICAgLy8gT25seSB3YXJuIGZvciB1c2VyLWRlZmluZWQgY29tcG9uZW50cywgbm90IGludGVybmFsIG9uZXMgbGlrZSBTdXNwZW5zZS5cbiAgICAgIHJldHVybjtcbiAgICB9IC8vIElmIHRoZXJlIGFyZSBwZW5kaW5nIHBhc3NpdmUgZWZmZWN0cyB1bm1vdW50cyBmb3IgdGhpcyBGaWJlcixcbiAgICAvLyB3ZSBjYW4gYXNzdW1lIHRoYXQgdGhleSB3b3VsZCBoYXZlIHByZXZlbnRlZCB0aGlzIHVwZGF0ZS5cblxuXG4gICAgaWYgKChmaWJlci5mbGFncyAmIFBhc3NpdmVVbm1vdW50UGVuZGluZ0RldikgIT09IE5vRmxhZ3MpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIFdlIHNob3cgdGhlIHdob2xlIHN0YWNrIGJ1dCBkZWR1cGUgb24gdGhlIHRvcCBjb21wb25lbnQncyBuYW1lIGJlY2F1c2VcbiAgICAvLyB0aGUgcHJvYmxlbWF0aWMgY29kZSBhbG1vc3QgYWx3YXlzIGxpZXMgaW5zaWRlIHRoYXQgY29tcG9uZW50LlxuXG5cbiAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkgfHwgJ1JlYWN0Q29tcG9uZW50JztcblxuICAgIGlmIChkaWRXYXJuU3RhdGVVcGRhdGVGb3JVbm1vdW50ZWRDb21wb25lbnQgIT09IG51bGwpIHtcbiAgICAgIGlmIChkaWRXYXJuU3RhdGVVcGRhdGVGb3JVbm1vdW50ZWRDb21wb25lbnQuaGFzKGNvbXBvbmVudE5hbWUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZGlkV2FyblN0YXRlVXBkYXRlRm9yVW5tb3VudGVkQ29tcG9uZW50LmFkZChjb21wb25lbnROYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGlkV2FyblN0YXRlVXBkYXRlRm9yVW5tb3VudGVkQ29tcG9uZW50ID0gbmV3IFNldChbY29tcG9uZW50TmFtZV0pO1xuICAgIH1cblxuICAgIGlmIChpc0ZsdXNoaW5nUGFzc2l2ZUVmZmVjdHMpIDsgZWxzZSB7XG4gICAgICB2YXIgcHJldmlvdXNGaWJlciA9IGN1cnJlbnQ7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHNldEN1cnJlbnRGaWJlcihmaWJlcik7XG5cbiAgICAgICAgZXJyb3IoXCJDYW4ndCBwZXJmb3JtIGEgUmVhY3Qgc3RhdGUgdXBkYXRlIG9uIGFuIHVubW91bnRlZCBjb21wb25lbnQuIFRoaXMgXCIgKyAnaXMgYSBuby1vcCwgYnV0IGl0IGluZGljYXRlcyBhIG1lbW9yeSBsZWFrIGluIHlvdXIgYXBwbGljYXRpb24uIFRvICcgKyAnZml4LCBjYW5jZWwgYWxsIHN1YnNjcmlwdGlvbnMgYW5kIGFzeW5jaHJvbm91cyB0YXNrcyBpbiAlcy4nLCB0YWcgPT09IENsYXNzQ29tcG9uZW50ID8gJ3RoZSBjb21wb25lbnRXaWxsVW5tb3VudCBtZXRob2QnIDogJ2EgdXNlRWZmZWN0IGNsZWFudXAgZnVuY3Rpb24nKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChwcmV2aW91c0ZpYmVyKSB7XG4gICAgICAgICAgc2V0Q3VycmVudEZpYmVyKGZpYmVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciBiZWdpbldvcmskMTtcblxue1xuICB2YXIgZHVtbXlGaWJlciA9IG51bGw7XG5cbiAgYmVnaW5Xb3JrJDEgPSBmdW5jdGlvbiAoY3VycmVudCwgdW5pdE9mV29yaywgbGFuZXMpIHtcbiAgICAvLyBJZiBhIGNvbXBvbmVudCB0aHJvd3MgYW4gZXJyb3IsIHdlIHJlcGxheSBpdCBhZ2FpbiBpbiBhIHN5bmNocm9ub3VzbHlcbiAgICAvLyBkaXNwYXRjaGVkIGV2ZW50LCBzbyB0aGF0IHRoZSBkZWJ1Z2dlciB3aWxsIHRyZWF0IGl0IGFzIGFuIHVuY2F1Z2h0XG4gICAgLy8gZXJyb3IgU2VlIFJlYWN0RXJyb3JVdGlscyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgICAvLyBCZWZvcmUgZW50ZXJpbmcgdGhlIGJlZ2luIHBoYXNlLCBjb3B5IHRoZSB3b3JrLWluLXByb2dyZXNzIG9udG8gYSBkdW1teVxuICAgIC8vIGZpYmVyLiBJZiBiZWdpbldvcmsgdGhyb3dzLCB3ZSdsbCB1c2UgdGhpcyB0byByZXNldCB0aGUgc3RhdGUuXG4gICAgdmFyIG9yaWdpbmFsV29ya0luUHJvZ3Jlc3NDb3B5ID0gYXNzaWduRmliZXJQcm9wZXJ0aWVzSW5ERVYoZHVtbXlGaWJlciwgdW5pdE9mV29yayk7XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGJlZ2luV29yayhjdXJyZW50LCB1bml0T2ZXb3JrLCBsYW5lcyk7XG4gICAgfSBjYXRjaCAob3JpZ2luYWxFcnJvcikge1xuICAgICAgaWYgKG9yaWdpbmFsRXJyb3IgIT09IG51bGwgJiYgdHlwZW9mIG9yaWdpbmFsRXJyb3IgPT09ICdvYmplY3QnICYmIHR5cGVvZiBvcmlnaW5hbEVycm9yLnRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gRG9uJ3QgcmVwbGF5IHByb21pc2VzLiBUcmVhdCBldmVyeXRoaW5nIGVsc2UgbGlrZSBhbiBlcnJvci5cbiAgICAgICAgdGhyb3cgb3JpZ2luYWxFcnJvcjtcbiAgICAgIH0gLy8gS2VlcCB0aGlzIGNvZGUgaW4gc3luYyB3aXRoIGhhbmRsZUVycm9yOyBhbnkgY2hhbmdlcyBoZXJlIG11c3QgaGF2ZVxuICAgICAgLy8gY29ycmVzcG9uZGluZyBjaGFuZ2VzIHRoZXJlLlxuXG5cbiAgICAgIHJlc2V0Q29udGV4dERlcGVuZGVuY2llcygpO1xuICAgICAgcmVzZXRIb29rc0FmdGVyVGhyb3coKTsgLy8gRG9uJ3QgcmVzZXQgY3VycmVudCBkZWJ1ZyBmaWJlciwgc2luY2Ugd2UncmUgYWJvdXQgdG8gd29yayBvbiB0aGVcbiAgICAgIC8vIHNhbWUgZmliZXIgYWdhaW4uXG4gICAgICAvLyBVbndpbmQgdGhlIGZhaWxlZCBzdGFjayBmcmFtZVxuXG4gICAgICB1bndpbmRJbnRlcnJ1cHRlZFdvcmsodW5pdE9mV29yayk7IC8vIFJlc3RvcmUgdGhlIG9yaWdpbmFsIHByb3BlcnRpZXMgb2YgdGhlIGZpYmVyLlxuXG4gICAgICBhc3NpZ25GaWJlclByb3BlcnRpZXNJbkRFVih1bml0T2ZXb3JrLCBvcmlnaW5hbFdvcmtJblByb2dyZXNzQ29weSk7XG5cbiAgICAgIGlmICggdW5pdE9mV29yay5tb2RlICYgUHJvZmlsZU1vZGUpIHtcbiAgICAgICAgLy8gUmVzZXQgdGhlIHByb2ZpbGVyIHRpbWVyLlxuICAgICAgICBzdGFydFByb2ZpbGVyVGltZXIodW5pdE9mV29yayk7XG4gICAgICB9IC8vIFJ1biBiZWdpbldvcmsgYWdhaW4uXG5cblxuICAgICAgaW52b2tlR3VhcmRlZENhbGxiYWNrKG51bGwsIGJlZ2luV29yaywgbnVsbCwgY3VycmVudCwgdW5pdE9mV29yaywgbGFuZXMpO1xuXG4gICAgICBpZiAoaGFzQ2F1Z2h0RXJyb3IoKSkge1xuICAgICAgICB2YXIgcmVwbGF5RXJyb3IgPSBjbGVhckNhdWdodEVycm9yKCk7IC8vIGBpbnZva2VHdWFyZGVkQ2FsbGJhY2tgIHNvbWV0aW1lcyBzZXRzIGFuIGV4cGFuZG8gYF9zdXBwcmVzc0xvZ2dpbmdgLlxuICAgICAgICAvLyBSZXRocm93IHRoaXMgZXJyb3IgaW5zdGVhZCBvZiB0aGUgb3JpZ2luYWwgb25lLlxuXG4gICAgICAgIHRocm93IHJlcGxheUVycm9yO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVGhpcyBicmFuY2ggaXMgcmVhY2hhYmxlIGlmIHRoZSByZW5kZXIgcGhhc2UgaXMgaW1wdXJlLlxuICAgICAgICB0aHJvdyBvcmlnaW5hbEVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cblxudmFyIGRpZFdhcm5BYm91dFVwZGF0ZUluUmVuZGVyID0gZmFsc2U7XG52YXIgZGlkV2FybkFib3V0VXBkYXRlSW5SZW5kZXJGb3JBbm90aGVyQ29tcG9uZW50O1xuXG57XG4gIGRpZFdhcm5BYm91dFVwZGF0ZUluUmVuZGVyRm9yQW5vdGhlckNvbXBvbmVudCA9IG5ldyBTZXQoKTtcbn1cblxuZnVuY3Rpb24gd2FybkFib3V0UmVuZGVyUGhhc2VVcGRhdGVzSW5ERVYoZmliZXIpIHtcbiAge1xuICAgIGlmIChpc1JlbmRlcmluZyAmJiAoZXhlY3V0aW9uQ29udGV4dCAmIFJlbmRlckNvbnRleHQpICE9PSBOb0NvbnRleHQgJiYgIWdldElzVXBkYXRpbmdPcGFxdWVWYWx1ZUluUmVuZGVyUGhhc2VJbkRFVigpKSB7XG4gICAgICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgICAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgcmVuZGVyaW5nQ29tcG9uZW50TmFtZSA9IHdvcmtJblByb2dyZXNzICYmIGdldENvbXBvbmVudE5hbWUod29ya0luUHJvZ3Jlc3MudHlwZSkgfHwgJ1Vua25vd24nOyAvLyBEZWR1cGUgYnkgdGhlIHJlbmRlcmluZyBjb21wb25lbnQgYmVjYXVzZSBpdCdzIHRoZSBvbmUgdGhhdCBuZWVkcyB0byBiZSBmaXhlZC5cblxuICAgICAgICAgICAgdmFyIGRlZHVwZUtleSA9IHJlbmRlcmluZ0NvbXBvbmVudE5hbWU7XG5cbiAgICAgICAgICAgIGlmICghZGlkV2FybkFib3V0VXBkYXRlSW5SZW5kZXJGb3JBbm90aGVyQ29tcG9uZW50LmhhcyhkZWR1cGVLZXkpKSB7XG4gICAgICAgICAgICAgIGRpZFdhcm5BYm91dFVwZGF0ZUluUmVuZGVyRm9yQW5vdGhlckNvbXBvbmVudC5hZGQoZGVkdXBlS2V5KTtcbiAgICAgICAgICAgICAgdmFyIHNldFN0YXRlQ29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkgfHwgJ1Vua25vd24nO1xuXG4gICAgICAgICAgICAgIGVycm9yKCdDYW5ub3QgdXBkYXRlIGEgY29tcG9uZW50IChgJXNgKSB3aGlsZSByZW5kZXJpbmcgYSAnICsgJ2RpZmZlcmVudCBjb21wb25lbnQgKGAlc2ApLiBUbyBsb2NhdGUgdGhlIGJhZCBzZXRTdGF0ZSgpIGNhbGwgaW5zaWRlIGAlc2AsICcgKyAnZm9sbG93IHRoZSBzdGFjayB0cmFjZSBhcyBkZXNjcmliZWQgaW4gaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3NldHN0YXRlLWluLXJlbmRlcicsIHNldFN0YXRlQ29tcG9uZW50TmFtZSwgcmVuZGVyaW5nQ29tcG9uZW50TmFtZSwgcmVuZGVyaW5nQ29tcG9uZW50TmFtZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmICghZGlkV2FybkFib3V0VXBkYXRlSW5SZW5kZXIpIHtcbiAgICAgICAgICAgICAgZXJyb3IoJ0Nhbm5vdCB1cGRhdGUgZHVyaW5nIGFuIGV4aXN0aW5nIHN0YXRlIHRyYW5zaXRpb24gKHN1Y2ggYXMgJyArICd3aXRoaW4gYHJlbmRlcmApLiBSZW5kZXIgbWV0aG9kcyBzaG91bGQgYmUgYSBwdXJlICcgKyAnZnVuY3Rpb24gb2YgcHJvcHMgYW5kIHN0YXRlLicpO1xuXG4gICAgICAgICAgICAgIGRpZFdhcm5BYm91dFVwZGF0ZUluUmVuZGVyID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufSAvLyBhICdzaGFyZWQnIHZhcmlhYmxlIHRoYXQgY2hhbmdlcyB3aGVuIGFjdCgpIG9wZW5zL2Nsb3NlcyBpbiB0ZXN0cy5cblxuXG52YXIgSXNUaGlzUmVuZGVyZXJBY3RpbmcgPSB7XG4gIGN1cnJlbnQ6IGZhbHNlXG59O1xuZnVuY3Rpb24gd2FybklmTm90U2NvcGVkV2l0aE1hdGNoaW5nQWN0KGZpYmVyKSB7XG4gIHtcbiAgICBpZiAoIElzU29tZVJlbmRlcmVyQWN0aW5nLmN1cnJlbnQgPT09IHRydWUgJiYgSXNUaGlzUmVuZGVyZXJBY3RpbmcuY3VycmVudCAhPT0gdHJ1ZSkge1xuICAgICAgdmFyIHByZXZpb3VzRmliZXIgPSBjdXJyZW50O1xuXG4gICAgICB0cnkge1xuICAgICAgICBzZXRDdXJyZW50RmliZXIoZmliZXIpO1xuXG4gICAgICAgIGVycm9yKFwiSXQgbG9va3MgbGlrZSB5b3UncmUgdXNpbmcgdGhlIHdyb25nIGFjdCgpIGFyb3VuZCB5b3VyIHRlc3QgaW50ZXJhY3Rpb25zLlxcblwiICsgJ0JlIHN1cmUgdG8gdXNlIHRoZSBtYXRjaGluZyB2ZXJzaW9uIG9mIGFjdCgpIGNvcnJlc3BvbmRpbmcgdG8geW91ciByZW5kZXJlcjpcXG5cXG4nICsgJy8vIGZvciByZWFjdC1kb206XFxuJyArIC8vIEJyZWFrIHVwIGltcG9ydHMgdG8gYXZvaWQgYWNjaWRlbnRhbGx5IHBhcnNpbmcgdGhlbSBhcyBkZXBlbmRlbmNpZXMuXG4gICAgICAgICdpbXBvcnQge2FjdH0gZnInICsgXCJvbSAncmVhY3QtZG9tL3Rlc3QtdXRpbHMnO1xcblwiICsgJy8vIC4uLlxcbicgKyAnYWN0KCgpID0+IC4uLik7XFxuXFxuJyArICcvLyBmb3IgcmVhY3QtdGVzdC1yZW5kZXJlcjpcXG4nICsgLy8gQnJlYWsgdXAgaW1wb3J0cyB0byBhdm9pZCBhY2NpZGVudGFsbHkgcGFyc2luZyB0aGVtIGFzIGRlcGVuZGVuY2llcy5cbiAgICAgICAgJ2ltcG9ydCBUZXN0UmVuZGVyZXIgZnInICsgXCJvbSByZWFjdC10ZXN0LXJlbmRlcmVyJztcXG5cIiArICdjb25zdCB7YWN0fSA9IFRlc3RSZW5kZXJlcjtcXG4nICsgJy8vIC4uLlxcbicgKyAnYWN0KCgpID0+IC4uLik7Jyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAocHJldmlvdXNGaWJlcikge1xuICAgICAgICAgIHNldEN1cnJlbnRGaWJlcihmaWJlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gd2FybklmTm90Q3VycmVudGx5QWN0aW5nRWZmZWN0c0luREVWKGZpYmVyKSB7XG4gIHtcbiAgICBpZiAoIChmaWJlci5tb2RlICYgU3RyaWN0TW9kZSkgIT09IE5vTW9kZSAmJiBJc1NvbWVSZW5kZXJlckFjdGluZy5jdXJyZW50ID09PSBmYWxzZSAmJiBJc1RoaXNSZW5kZXJlckFjdGluZy5jdXJyZW50ID09PSBmYWxzZSkge1xuICAgICAgZXJyb3IoJ0FuIHVwZGF0ZSB0byAlcyByYW4gYW4gZWZmZWN0LCBidXQgd2FzIG5vdCB3cmFwcGVkIGluIGFjdCguLi4pLlxcblxcbicgKyAnV2hlbiB0ZXN0aW5nLCBjb2RlIHRoYXQgY2F1c2VzIFJlYWN0IHN0YXRlIHVwZGF0ZXMgc2hvdWxkIGJlICcgKyAnd3JhcHBlZCBpbnRvIGFjdCguLi4pOlxcblxcbicgKyAnYWN0KCgpID0+IHtcXG4nICsgJyAgLyogZmlyZSBldmVudHMgdGhhdCB1cGRhdGUgc3RhdGUgKi9cXG4nICsgJ30pO1xcbicgKyAnLyogYXNzZXJ0IG9uIHRoZSBvdXRwdXQgKi9cXG5cXG4nICsgXCJUaGlzIGVuc3VyZXMgdGhhdCB5b3UncmUgdGVzdGluZyB0aGUgYmVoYXZpb3IgdGhlIHVzZXIgd291bGQgc2VlIFwiICsgJ2luIHRoZSBicm93c2VyLicgKyAnIExlYXJuIG1vcmUgYXQgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3dyYXAtdGVzdHMtd2l0aC1hY3QnLCBnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gd2FybklmTm90Q3VycmVudGx5QWN0aW5nVXBkYXRlc0luREVWKGZpYmVyKSB7XG4gIHtcbiAgICBpZiAoIGV4ZWN1dGlvbkNvbnRleHQgPT09IE5vQ29udGV4dCAmJiBJc1NvbWVSZW5kZXJlckFjdGluZy5jdXJyZW50ID09PSBmYWxzZSAmJiBJc1RoaXNSZW5kZXJlckFjdGluZy5jdXJyZW50ID09PSBmYWxzZSkge1xuICAgICAgdmFyIHByZXZpb3VzRmliZXIgPSBjdXJyZW50O1xuXG4gICAgICB0cnkge1xuICAgICAgICBzZXRDdXJyZW50RmliZXIoZmliZXIpO1xuXG4gICAgICAgIGVycm9yKCdBbiB1cGRhdGUgdG8gJXMgaW5zaWRlIGEgdGVzdCB3YXMgbm90IHdyYXBwZWQgaW4gYWN0KC4uLikuXFxuXFxuJyArICdXaGVuIHRlc3RpbmcsIGNvZGUgdGhhdCBjYXVzZXMgUmVhY3Qgc3RhdGUgdXBkYXRlcyBzaG91bGQgYmUgJyArICd3cmFwcGVkIGludG8gYWN0KC4uLik6XFxuXFxuJyArICdhY3QoKCkgPT4ge1xcbicgKyAnICAvKiBmaXJlIGV2ZW50cyB0aGF0IHVwZGF0ZSBzdGF0ZSAqL1xcbicgKyAnfSk7XFxuJyArICcvKiBhc3NlcnQgb24gdGhlIG91dHB1dCAqL1xcblxcbicgKyBcIlRoaXMgZW5zdXJlcyB0aGF0IHlvdSdyZSB0ZXN0aW5nIHRoZSBiZWhhdmlvciB0aGUgdXNlciB3b3VsZCBzZWUgXCIgKyAnaW4gdGhlIGJyb3dzZXIuJyArICcgTGVhcm4gbW9yZSBhdCBodHRwczovL3JlYWN0anMub3JnL2xpbmsvd3JhcC10ZXN0cy13aXRoLWFjdCcsIGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKHByZXZpb3VzRmliZXIpIHtcbiAgICAgICAgICBzZXRDdXJyZW50RmliZXIoZmliZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIHdhcm5JZk5vdEN1cnJlbnRseUFjdGluZ1VwZGF0ZXNJbkRldiA9IHdhcm5JZk5vdEN1cnJlbnRseUFjdGluZ1VwZGF0ZXNJbkRFVjsgLy8gSW4gdGVzdHMsIHdlIHdhbnQgdG8gZW5mb3JjZSBhIG1vY2tlZCBzY2hlZHVsZXIuXG5cbnZhciBkaWRXYXJuQWJvdXRVbm1vY2tlZFNjaGVkdWxlciA9IGZhbHNlOyAvLyBUT0RPIEJlZm9yZSB3ZSByZWxlYXNlIGNvbmN1cnJlbnQgbW9kZSwgcmV2aXNpdCB0aGlzIGFuZCBkZWNpZGUgd2hldGhlciBhIG1vY2tlZFxuLy8gc2NoZWR1bGVyIGlzIHRoZSBhY3R1YWwgcmVjb21tZW5kYXRpb24uIFRoZSBhbHRlcm5hdGl2ZSBjb3VsZCBiZSBhIHRlc3RpbmcgYnVpbGQsXG4vLyBhIG5ldyBsaWIsIG9yIHdoYXRldmVyOyB3ZSBkdW5ubyBqdXN0IHlldC4gVGhpcyBtZXNzYWdlIGlzIGZvciBlYXJseSBhZG9wdGVyc1xuLy8gdG8gZ2V0IHRoZWlyIHRlc3RzIHJpZ2h0LlxuXG5mdW5jdGlvbiB3YXJuSWZVbm1vY2tlZFNjaGVkdWxlcihmaWJlcikge1xuICB7XG4gICAgaWYgKGRpZFdhcm5BYm91dFVubW9ja2VkU2NoZWR1bGVyID09PSBmYWxzZSAmJiBTY2hlZHVsZXIudW5zdGFibGVfZmx1c2hBbGxXaXRob3V0QXNzZXJ0aW5nID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChmaWJlci5tb2RlICYgQmxvY2tpbmdNb2RlIHx8IGZpYmVyLm1vZGUgJiBDb25jdXJyZW50TW9kZSkge1xuICAgICAgICBkaWRXYXJuQWJvdXRVbm1vY2tlZFNjaGVkdWxlciA9IHRydWU7XG5cbiAgICAgICAgZXJyb3IoJ0luIENvbmN1cnJlbnQgb3IgU3luYyBtb2RlcywgdGhlIFwic2NoZWR1bGVyXCIgbW9kdWxlIG5lZWRzIHRvIGJlIG1vY2tlZCAnICsgJ3RvIGd1YXJhbnRlZSBjb25zaXN0ZW50IGJlaGF2aW91ciBhY3Jvc3MgdGVzdHMgYW5kIGJyb3dzZXJzLiAnICsgJ0ZvciBleGFtcGxlLCB3aXRoIGplc3Q6IFxcbicgKyAvLyBCcmVhayB1cCByZXF1aXJlcyB0byBhdm9pZCBhY2NpZGVudGFsbHkgcGFyc2luZyB0aGVtIGFzIGRlcGVuZGVuY2llcy5cbiAgICAgICAgXCJqZXN0Lm1vY2soJ3NjaGVkdWxlcicsICgpID0+IHJlcXVpcmVcIiArIFwiKCdzY2hlZHVsZXIvdW5zdGFibGVfbW9jaycpKTtcXG5cXG5cIiArICdGb3IgbW9yZSBpbmZvLCB2aXNpdCBodHRwczovL3JlYWN0anMub3JnL2xpbmsvbW9jay1zY2hlZHVsZXInKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tcHV0ZVRocmVhZElEKHJvb3QsIGxhbmUpIHtcbiAgLy8gSW50ZXJhY3Rpb24gdGhyZWFkcyBhcmUgdW5pcXVlIHBlciByb290IGFuZCBleHBpcmF0aW9uIHRpbWUuXG4gIC8vIE5PVEU6IEludGVudGlvbmFsbHkgdW5zb3VuZCBjYXN0LiBBbGwgdGhhdCBtYXR0ZXJzIGlzIHRoYXQgaXQncyBhIG51bWJlclxuICAvLyBhbmQgaXQgcmVwcmVzZW50cyBhIGJhdGNoIG9mIHdvcmsuIENvdWxkIG1ha2UgYSBoZWxwZXIgZnVuY3Rpb24gaW5zdGVhZCxcbiAgLy8gYnV0IG1laCB0aGlzIGlzIGZpbmUgZm9yIG5vdy5cbiAgcmV0dXJuIGxhbmUgKiAxMDAwICsgcm9vdC5pbnRlcmFjdGlvblRocmVhZElEO1xufVxuXG5mdW5jdGlvbiBtYXJrU3Bhd25lZFdvcmsobGFuZSkge1xuXG4gIGlmIChzcGF3bmVkV29ya0R1cmluZ1JlbmRlciA9PT0gbnVsbCkge1xuICAgIHNwYXduZWRXb3JrRHVyaW5nUmVuZGVyID0gW2xhbmVdO1xuICB9IGVsc2Uge1xuICAgIHNwYXduZWRXb3JrRHVyaW5nUmVuZGVyLnB1c2gobGFuZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2NoZWR1bGVJbnRlcmFjdGlvbnMocm9vdCwgbGFuZSwgaW50ZXJhY3Rpb25zKSB7XG5cbiAgaWYgKGludGVyYWN0aW9ucy5zaXplID4gMCkge1xuICAgIHZhciBwZW5kaW5nSW50ZXJhY3Rpb25NYXAgPSByb290LnBlbmRpbmdJbnRlcmFjdGlvbk1hcDtcbiAgICB2YXIgcGVuZGluZ0ludGVyYWN0aW9ucyA9IHBlbmRpbmdJbnRlcmFjdGlvbk1hcC5nZXQobGFuZSk7XG5cbiAgICBpZiAocGVuZGluZ0ludGVyYWN0aW9ucyAhPSBudWxsKSB7XG4gICAgICBpbnRlcmFjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoaW50ZXJhY3Rpb24pIHtcbiAgICAgICAgaWYgKCFwZW5kaW5nSW50ZXJhY3Rpb25zLmhhcyhpbnRlcmFjdGlvbikpIHtcbiAgICAgICAgICAvLyBVcGRhdGUgdGhlIHBlbmRpbmcgYXN5bmMgd29yayBjb3VudCBmb3IgcHJldmlvdXNseSB1bnNjaGVkdWxlZCBpbnRlcmFjdGlvbi5cbiAgICAgICAgICBpbnRlcmFjdGlvbi5fX2NvdW50Kys7XG4gICAgICAgIH1cblxuICAgICAgICBwZW5kaW5nSW50ZXJhY3Rpb25zLmFkZChpbnRlcmFjdGlvbik7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGVuZGluZ0ludGVyYWN0aW9uTWFwLnNldChsYW5lLCBuZXcgU2V0KGludGVyYWN0aW9ucykpOyAvLyBVcGRhdGUgdGhlIHBlbmRpbmcgYXN5bmMgd29yayBjb3VudCBmb3IgdGhlIGN1cnJlbnQgaW50ZXJhY3Rpb25zLlxuXG4gICAgICBpbnRlcmFjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoaW50ZXJhY3Rpb24pIHtcbiAgICAgICAgaW50ZXJhY3Rpb24uX19jb3VudCsrO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdmFyIHN1YnNjcmliZXIgPSB0cmFjaW5nLl9fc3Vic2NyaWJlclJlZi5jdXJyZW50O1xuXG4gICAgaWYgKHN1YnNjcmliZXIgIT09IG51bGwpIHtcbiAgICAgIHZhciB0aHJlYWRJRCA9IGNvbXB1dGVUaHJlYWRJRChyb290LCBsYW5lKTtcbiAgICAgIHN1YnNjcmliZXIub25Xb3JrU2NoZWR1bGVkKGludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzY2hlZHVsZVBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgbGFuZSkge1xuXG4gIHNjaGVkdWxlSW50ZXJhY3Rpb25zKHJvb3QsIGxhbmUsIHRyYWNpbmcuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudCk7XG59XG5cbmZ1bmN0aW9uIHN0YXJ0V29ya09uUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCBsYW5lcykge1xuICAvLyB3ZSBjYW4gYWNjdXJhdGVseSBhdHRyaWJ1dGUgdGltZSBzcGVudCB3b3JraW5nIG9uIGl0LCBBbmQgc28gdGhhdCBjYXNjYWRpbmdcbiAgLy8gd29yayB0cmlnZ2VyZWQgZHVyaW5nIHRoZSByZW5kZXIgcGhhc2Ugd2lsbCBiZSBhc3NvY2lhdGVkIHdpdGggaXQuXG5cblxuICB2YXIgaW50ZXJhY3Rpb25zID0gbmV3IFNldCgpO1xuICByb290LnBlbmRpbmdJbnRlcmFjdGlvbk1hcC5mb3JFYWNoKGZ1bmN0aW9uIChzY2hlZHVsZWRJbnRlcmFjdGlvbnMsIHNjaGVkdWxlZExhbmUpIHtcbiAgICBpZiAoaW5jbHVkZXNTb21lTGFuZShsYW5lcywgc2NoZWR1bGVkTGFuZSkpIHtcbiAgICAgIHNjaGVkdWxlZEludGVyYWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChpbnRlcmFjdGlvbikge1xuICAgICAgICByZXR1cm4gaW50ZXJhY3Rpb25zLmFkZChpbnRlcmFjdGlvbik7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pOyAvLyBTdG9yZSB0aGUgY3VycmVudCBzZXQgb2YgaW50ZXJhY3Rpb25zIG9uIHRoZSBGaWJlclJvb3QgZm9yIGEgZmV3IHJlYXNvbnM6XG4gIC8vIFdlIGNhbiByZS11c2UgaXQgaW4gaG90IGZ1bmN0aW9ucyBsaWtlIHBlcmZvcm1Db25jdXJyZW50V29ya09uUm9vdCgpXG4gIC8vIHdpdGhvdXQgaGF2aW5nIHRvIHJlY2FsY3VsYXRlIGl0LiBXZSB3aWxsIGFsc28gdXNlIGl0IGluIGNvbW1pdFdvcmsoKSB0b1xuICAvLyBwYXNzIHRvIGFueSBQcm9maWxlciBvblJlbmRlcigpIGhvb2tzLiBUaGlzIGFsc28gcHJvdmlkZXMgRGV2VG9vbHMgd2l0aCBhXG4gIC8vIHdheSB0byBhY2Nlc3MgaXQgd2hlbiB0aGUgb25Db21taXRSb290KCkgaG9vayBpcyBjYWxsZWQuXG5cbiAgcm9vdC5tZW1vaXplZEludGVyYWN0aW9ucyA9IGludGVyYWN0aW9ucztcblxuICBpZiAoaW50ZXJhY3Rpb25zLnNpemUgPiAwKSB7XG4gICAgdmFyIHN1YnNjcmliZXIgPSB0cmFjaW5nLl9fc3Vic2NyaWJlclJlZi5jdXJyZW50O1xuXG4gICAgaWYgKHN1YnNjcmliZXIgIT09IG51bGwpIHtcbiAgICAgIHZhciB0aHJlYWRJRCA9IGNvbXB1dGVUaHJlYWRJRChyb290LCBsYW5lcyk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHN1YnNjcmliZXIub25Xb3JrU3RhcnRlZChpbnRlcmFjdGlvbnMsIHRocmVhZElEKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIElmIHRoZSBzdWJzY3JpYmVyIHRocm93cywgcmV0aHJvdyBpdCBpbiBhIHNlcGFyYXRlIHRhc2tcbiAgICAgICAgc2NoZWR1bGVDYWxsYmFjayhJbW1lZGlhdGVQcmlvcml0eSQxLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5pc2hQZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIGNvbW1pdHRlZExhbmVzKSB7XG5cbiAgdmFyIHJlbWFpbmluZ0xhbmVzQWZ0ZXJDb21taXQgPSByb290LnBlbmRpbmdMYW5lcztcbiAgdmFyIHN1YnNjcmliZXI7XG5cbiAgdHJ5IHtcbiAgICBzdWJzY3JpYmVyID0gdHJhY2luZy5fX3N1YnNjcmliZXJSZWYuY3VycmVudDtcblxuICAgIGlmIChzdWJzY3JpYmVyICE9PSBudWxsICYmIHJvb3QubWVtb2l6ZWRJbnRlcmFjdGlvbnMuc2l6ZSA+IDApIHtcbiAgICAgIC8vIEZJWE1FOiBNb3JlIHRoYW4gb25lIGxhbmUgY2FuIGZpbmlzaCBpbiBhIHNpbmdsZSBjb21taXQuXG4gICAgICB2YXIgdGhyZWFkSUQgPSBjb21wdXRlVGhyZWFkSUQocm9vdCwgY29tbWl0dGVkTGFuZXMpO1xuICAgICAgc3Vic2NyaWJlci5vbldvcmtTdG9wcGVkKHJvb3QubWVtb2l6ZWRJbnRlcmFjdGlvbnMsIHRocmVhZElEKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgLy8gSWYgdGhlIHN1YnNjcmliZXIgdGhyb3dzLCByZXRocm93IGl0IGluIGEgc2VwYXJhdGUgdGFza1xuICAgIHNjaGVkdWxlQ2FsbGJhY2soSW1tZWRpYXRlUHJpb3JpdHkkMSwgZnVuY3Rpb24gKCkge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSk7XG4gIH0gZmluYWxseSB7XG4gICAgLy8gQ2xlYXIgY29tcGxldGVkIGludGVyYWN0aW9ucyBmcm9tIHRoZSBwZW5kaW5nIE1hcC5cbiAgICAvLyBVbmxlc3MgdGhlIHJlbmRlciB3YXMgc3VzcGVuZGVkIG9yIGNhc2NhZGluZyB3b3JrIHdhcyBzY2hlZHVsZWQsXG4gICAgLy8gSW4gd2hpY2ggY2FzZVx1MjAxMyBsZWF2ZSBwZW5kaW5nIGludGVyYWN0aW9ucyB1bnRpbCB0aGUgc3Vic2VxdWVudCByZW5kZXIuXG4gICAgdmFyIHBlbmRpbmdJbnRlcmFjdGlvbk1hcCA9IHJvb3QucGVuZGluZ0ludGVyYWN0aW9uTWFwO1xuICAgIHBlbmRpbmdJbnRlcmFjdGlvbk1hcC5mb3JFYWNoKGZ1bmN0aW9uIChzY2hlZHVsZWRJbnRlcmFjdGlvbnMsIGxhbmUpIHtcbiAgICAgIC8vIE9ubHkgZGVjcmVtZW50IHRoZSBwZW5kaW5nIGludGVyYWN0aW9uIGNvdW50IGlmIHdlJ3JlIGRvbmUuXG4gICAgICAvLyBJZiB0aGVyZSdzIHN0aWxsIHdvcmsgYXQgdGhlIGN1cnJlbnQgcHJpb3JpdHksXG4gICAgICAvLyBUaGF0IGluZGljYXRlcyB0aGF0IHdlIGFyZSB3YWl0aW5nIGZvciBzdXNwZW5zZSBkYXRhLlxuICAgICAgaWYgKCFpbmNsdWRlc1NvbWVMYW5lKHJlbWFpbmluZ0xhbmVzQWZ0ZXJDb21taXQsIGxhbmUpKSB7XG4gICAgICAgIHBlbmRpbmdJbnRlcmFjdGlvbk1hcC5kZWxldGUobGFuZSk7XG4gICAgICAgIHNjaGVkdWxlZEludGVyYWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChpbnRlcmFjdGlvbikge1xuICAgICAgICAgIGludGVyYWN0aW9uLl9fY291bnQtLTtcblxuICAgICAgICAgIGlmIChzdWJzY3JpYmVyICE9PSBudWxsICYmIGludGVyYWN0aW9uLl9fY291bnQgPT09IDApIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHN1YnNjcmliZXIub25JbnRlcmFjdGlvblNjaGVkdWxlZFdvcmtDb21wbGV0ZWQoaW50ZXJhY3Rpb24pO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgLy8gSWYgdGhlIHN1YnNjcmliZXIgdGhyb3dzLCByZXRocm93IGl0IGluIGEgc2VwYXJhdGUgdGFza1xuICAgICAgICAgICAgICBzY2hlZHVsZUNhbGxiYWNrKEltbWVkaWF0ZVByaW9yaXR5JDEsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufSAvLyBgYWN0YCB0ZXN0aW5nIEFQSVxuXG5mdW5jdGlvbiBzaG91bGRGb3JjZUZsdXNoRmFsbGJhY2tzSW5ERVYoKSB7XG4gIC8vIE5ldmVyIGZvcmNlIGZsdXNoIGluIHByb2R1Y3Rpb24uIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGdldCBzdHJpcHBlZCBvdXQuXG4gIHJldHVybiAgYWN0aW5nVXBkYXRlc1Njb3BlRGVwdGggPiAwO1xufVxuLy8gc28gd2UgY2FuIHRlbGwgaWYgYW55IGFzeW5jIGFjdCgpIGNhbGxzIHRyeSB0byBydW4gaW4gcGFyYWxsZWwuXG5cblxudmFyIGFjdGluZ1VwZGF0ZXNTY29wZURlcHRoID0gMDtcblxuZnVuY3Rpb24gZGV0YWNoRmliZXJBZnRlckVmZmVjdHMoZmliZXIpIHtcbiAgZmliZXIuc2libGluZyA9IG51bGw7XG4gIGZpYmVyLnN0YXRlTm9kZSA9IG51bGw7XG59XG5cbnZhciByZXNvbHZlRmFtaWx5ID0gbnVsbDsgLy8gJEZsb3dGaXhNZSBGbG93IGdldHMgY29uZnVzZWQgYnkgYSBXZWFrU2V0IGZlYXR1cmUgY2hlY2sgYmVsb3cuXG5cbnZhciBmYWlsZWRCb3VuZGFyaWVzID0gbnVsbDtcbnZhciBzZXRSZWZyZXNoSGFuZGxlciA9IGZ1bmN0aW9uIChoYW5kbGVyKSB7XG4gIHtcbiAgICByZXNvbHZlRmFtaWx5ID0gaGFuZGxlcjtcbiAgfVxufTtcbmZ1bmN0aW9uIHJlc29sdmVGdW5jdGlvbkZvckhvdFJlbG9hZGluZyh0eXBlKSB7XG4gIHtcbiAgICBpZiAocmVzb2x2ZUZhbWlseSA9PT0gbnVsbCkge1xuICAgICAgLy8gSG90IHJlbG9hZGluZyBpcyBkaXNhYmxlZC5cbiAgICAgIHJldHVybiB0eXBlO1xuICAgIH1cblxuICAgIHZhciBmYW1pbHkgPSByZXNvbHZlRmFtaWx5KHR5cGUpO1xuXG4gICAgaWYgKGZhbWlseSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdHlwZTtcbiAgICB9IC8vIFVzZSB0aGUgbGF0ZXN0IGtub3duIGltcGxlbWVudGF0aW9uLlxuXG5cbiAgICByZXR1cm4gZmFtaWx5LmN1cnJlbnQ7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlc29sdmVDbGFzc0ZvckhvdFJlbG9hZGluZyh0eXBlKSB7XG4gIC8vIE5vIGltcGxlbWVudGF0aW9uIGRpZmZlcmVuY2VzLlxuICByZXR1cm4gcmVzb2x2ZUZ1bmN0aW9uRm9ySG90UmVsb2FkaW5nKHR5cGUpO1xufVxuZnVuY3Rpb24gcmVzb2x2ZUZvcndhcmRSZWZGb3JIb3RSZWxvYWRpbmcodHlwZSkge1xuICB7XG4gICAgaWYgKHJlc29sdmVGYW1pbHkgPT09IG51bGwpIHtcbiAgICAgIC8vIEhvdCByZWxvYWRpbmcgaXMgZGlzYWJsZWQuXG4gICAgICByZXR1cm4gdHlwZTtcbiAgICB9XG5cbiAgICB2YXIgZmFtaWx5ID0gcmVzb2x2ZUZhbWlseSh0eXBlKTtcblxuICAgIGlmIChmYW1pbHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gQ2hlY2sgaWYgd2UncmUgZGVhbGluZyB3aXRoIGEgcmVhbCBmb3J3YXJkUmVmLiBEb24ndCB3YW50IHRvIGNyYXNoIGVhcmx5LlxuICAgICAgaWYgKHR5cGUgIT09IG51bGwgJiYgdHlwZSAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiB0eXBlLnJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBGb3J3YXJkUmVmIGlzIHNwZWNpYWwgYmVjYXVzZSBpdHMgcmVzb2x2ZWQgLnR5cGUgaXMgYW4gb2JqZWN0LFxuICAgICAgICAvLyBidXQgaXQncyBwb3NzaWJsZSB0aGF0IHdlIG9ubHkgaGF2ZSBpdHMgaW5uZXIgcmVuZGVyIGZ1bmN0aW9uIGluIHRoZSBtYXAuXG4gICAgICAgIC8vIElmIHRoYXQgaW5uZXIgcmVuZGVyIGZ1bmN0aW9uIGlzIGRpZmZlcmVudCwgd2UnbGwgYnVpbGQgYSBuZXcgZm9yd2FyZFJlZiB0eXBlLlxuICAgICAgICB2YXIgY3VycmVudFJlbmRlciA9IHJlc29sdmVGdW5jdGlvbkZvckhvdFJlbG9hZGluZyh0eXBlLnJlbmRlcik7XG5cbiAgICAgICAgaWYgKHR5cGUucmVuZGVyICE9PSBjdXJyZW50UmVuZGVyKSB7XG4gICAgICAgICAgdmFyIHN5bnRoZXRpY1R5cGUgPSB7XG4gICAgICAgICAgICAkJHR5cGVvZjogUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSxcbiAgICAgICAgICAgIHJlbmRlcjogY3VycmVudFJlbmRlclxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBpZiAodHlwZS5kaXNwbGF5TmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzeW50aGV0aWNUeXBlLmRpc3BsYXlOYW1lID0gdHlwZS5kaXNwbGF5TmFtZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gc3ludGhldGljVHlwZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHlwZTtcbiAgICB9IC8vIFVzZSB0aGUgbGF0ZXN0IGtub3duIGltcGxlbWVudGF0aW9uLlxuXG5cbiAgICByZXR1cm4gZmFtaWx5LmN1cnJlbnQ7XG4gIH1cbn1cbmZ1bmN0aW9uIGlzQ29tcGF0aWJsZUZhbWlseUZvckhvdFJlbG9hZGluZyhmaWJlciwgZWxlbWVudCkge1xuICB7XG4gICAgaWYgKHJlc29sdmVGYW1pbHkgPT09IG51bGwpIHtcbiAgICAgIC8vIEhvdCByZWxvYWRpbmcgaXMgZGlzYWJsZWQuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIHByZXZUeXBlID0gZmliZXIuZWxlbWVudFR5cGU7XG4gICAgdmFyIG5leHRUeXBlID0gZWxlbWVudC50eXBlOyAvLyBJZiB3ZSBnb3QgaGVyZSwgd2Uga25vdyB0eXBlcyBhcmVuJ3QgPT09IGVxdWFsLlxuXG4gICAgdmFyIG5lZWRzQ29tcGFyZUZhbWlsaWVzID0gZmFsc2U7XG4gICAgdmFyICQkdHlwZW9mTmV4dFR5cGUgPSB0eXBlb2YgbmV4dFR5cGUgPT09ICdvYmplY3QnICYmIG5leHRUeXBlICE9PSBudWxsID8gbmV4dFR5cGUuJCR0eXBlb2YgOiBudWxsO1xuXG4gICAgc3dpdGNoIChmaWJlci50YWcpIHtcbiAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAodHlwZW9mIG5leHRUeXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBuZWVkc0NvbXBhcmVGYW1pbGllcyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgICAge1xuICAgICAgICAgIGlmICh0eXBlb2YgbmV4dFR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIG5lZWRzQ29tcGFyZUZhbWlsaWVzID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCQkdHlwZW9mTmV4dFR5cGUgPT09IFJFQUNUX0xBWllfVFlQRSkge1xuICAgICAgICAgICAgLy8gV2UgZG9uJ3Qga25vdyB0aGUgaW5uZXIgdHlwZSB5ZXQuXG4gICAgICAgICAgICAvLyBXZSdyZSBnb2luZyB0byBhc3N1bWUgdGhhdCB0aGUgbGF6eSBpbm5lciB0eXBlIGlzIHN0YWJsZSxcbiAgICAgICAgICAgIC8vIGFuZCBzbyBpdCBpcyBzdWZmaWNpZW50IHRvIGF2b2lkIHJlY29uY2lsaW5nIGl0IGF3YXkuXG4gICAgICAgICAgICAvLyBXZSdyZSBub3QgZ29pbmcgdG8gdW53cmFwIG9yIGFjdHVhbGx5IHVzZSB0aGUgbmV3IGxhenkgdHlwZS5cbiAgICAgICAgICAgIG5lZWRzQ29tcGFyZUZhbWlsaWVzID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAoJCR0eXBlb2ZOZXh0VHlwZSA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSkge1xuICAgICAgICAgICAgbmVlZHNDb21wYXJlRmFtaWxpZXMgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAoJCR0eXBlb2ZOZXh0VHlwZSA9PT0gUkVBQ1RfTEFaWV9UWVBFKSB7XG4gICAgICAgICAgICBuZWVkc0NvbXBhcmVGYW1pbGllcyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBNZW1vQ29tcG9uZW50OlxuICAgICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgICAgICB7XG4gICAgICAgICAgaWYgKCQkdHlwZW9mTmV4dFR5cGUgPT09IFJFQUNUX01FTU9fVFlQRSkge1xuICAgICAgICAgICAgLy8gVE9ETzogaWYgaXQgd2FzIGJ1dCBjYW4gbm8gbG9uZ2VyIGJlIHNpbXBsZSxcbiAgICAgICAgICAgIC8vIHdlIHNob3VsZG4ndCBzZXQgdGhpcy5cbiAgICAgICAgICAgIG5lZWRzQ29tcGFyZUZhbWlsaWVzID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCQkdHlwZW9mTmV4dFR5cGUgPT09IFJFQUNUX0xBWllfVFlQRSkge1xuICAgICAgICAgICAgbmVlZHNDb21wYXJlRmFtaWxpZXMgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IC8vIENoZWNrIGlmIGJvdGggdHlwZXMgaGF2ZSBhIGZhbWlseSBhbmQgaXQncyB0aGUgc2FtZSBvbmUuXG5cblxuICAgIGlmIChuZWVkc0NvbXBhcmVGYW1pbGllcykge1xuICAgICAgLy8gTm90ZTogbWVtbygpIGFuZCBmb3J3YXJkUmVmKCkgd2UnbGwgY29tcGFyZSBvdXRlciByYXRoZXIgdGhhbiBpbm5lciB0eXBlLlxuICAgICAgLy8gVGhpcyBtZWFucyBib3RoIG9mIHRoZW0gbmVlZCB0byBiZSByZWdpc3RlcmVkIHRvIHByZXNlcnZlIHN0YXRlLlxuICAgICAgLy8gSWYgd2UgdW53cmFwcGVkIGFuZCBjb21wYXJlZCB0aGUgaW5uZXIgdHlwZXMgZm9yIHdyYXBwZXJzIGluc3RlYWQsXG4gICAgICAvLyB0aGVuIHdlIHdvdWxkIHJpc2sgZmFsc2VseSBzYXlpbmcgdHdvIHNlcGFyYXRlIG1lbW8oRm9vKVxuICAgICAgLy8gY2FsbHMgYXJlIGVxdWl2YWxlbnQgYmVjYXVzZSB0aGV5IHdyYXAgdGhlIHNhbWUgRm9vIGZ1bmN0aW9uLlxuICAgICAgdmFyIHByZXZGYW1pbHkgPSByZXNvbHZlRmFtaWx5KHByZXZUeXBlKTtcblxuICAgICAgaWYgKHByZXZGYW1pbHkgIT09IHVuZGVmaW5lZCAmJiBwcmV2RmFtaWx5ID09PSByZXNvbHZlRmFtaWx5KG5leHRUeXBlKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbmZ1bmN0aW9uIG1hcmtGYWlsZWRFcnJvckJvdW5kYXJ5Rm9ySG90UmVsb2FkaW5nKGZpYmVyKSB7XG4gIHtcbiAgICBpZiAocmVzb2x2ZUZhbWlseSA9PT0gbnVsbCkge1xuICAgICAgLy8gSG90IHJlbG9hZGluZyBpcyBkaXNhYmxlZC5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIFdlYWtTZXQgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZmFpbGVkQm91bmRhcmllcyA9PT0gbnVsbCkge1xuICAgICAgZmFpbGVkQm91bmRhcmllcyA9IG5ldyBXZWFrU2V0KCk7XG4gICAgfVxuXG4gICAgZmFpbGVkQm91bmRhcmllcy5hZGQoZmliZXIpO1xuICB9XG59XG52YXIgc2NoZWR1bGVSZWZyZXNoID0gZnVuY3Rpb24gKHJvb3QsIHVwZGF0ZSkge1xuICB7XG4gICAgaWYgKHJlc29sdmVGYW1pbHkgPT09IG51bGwpIHtcbiAgICAgIC8vIEhvdCByZWxvYWRpbmcgaXMgZGlzYWJsZWQuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHN0YWxlRmFtaWxpZXMgPSB1cGRhdGUuc3RhbGVGYW1pbGllcyxcbiAgICAgICAgdXBkYXRlZEZhbWlsaWVzID0gdXBkYXRlLnVwZGF0ZWRGYW1pbGllcztcbiAgICBmbHVzaFBhc3NpdmVFZmZlY3RzKCk7XG4gICAgZmx1c2hTeW5jKGZ1bmN0aW9uICgpIHtcbiAgICAgIHNjaGVkdWxlRmliZXJzV2l0aEZhbWlsaWVzUmVjdXJzaXZlbHkocm9vdC5jdXJyZW50LCB1cGRhdGVkRmFtaWxpZXMsIHN0YWxlRmFtaWxpZXMpO1xuICAgIH0pO1xuICB9XG59O1xudmFyIHNjaGVkdWxlUm9vdCA9IGZ1bmN0aW9uIChyb290LCBlbGVtZW50KSB7XG4gIHtcbiAgICBpZiAocm9vdC5jb250ZXh0ICE9PSBlbXB0eUNvbnRleHRPYmplY3QpIHtcbiAgICAgIC8vIFN1cGVyIGVkZ2UgY2FzZTogcm9vdCBoYXMgYSBsZWdhY3kgX3JlbmRlclN1YnRyZWUgY29udGV4dFxuICAgICAgLy8gYnV0IHdlIGRvbid0IGtub3cgdGhlIHBhcmVudENvbXBvbmVudCBzbyB3ZSBjYW4ndCBwYXNzIGl0LlxuICAgICAgLy8gSnVzdCBpZ25vcmUuIFdlJ2xsIGRlbGV0ZSB0aGlzIHdpdGggX3JlbmRlclN1YnRyZWUgY29kZSBwYXRoIGxhdGVyLlxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZsdXNoUGFzc2l2ZUVmZmVjdHMoKTtcbiAgICBmbHVzaFN5bmMoZnVuY3Rpb24gKCkge1xuICAgICAgdXBkYXRlQ29udGFpbmVyKGVsZW1lbnQsIHJvb3QsIG51bGwsIG51bGwpO1xuICAgIH0pO1xuICB9XG59O1xuXG5mdW5jdGlvbiBzY2hlZHVsZUZpYmVyc1dpdGhGYW1pbGllc1JlY3Vyc2l2ZWx5KGZpYmVyLCB1cGRhdGVkRmFtaWxpZXMsIHN0YWxlRmFtaWxpZXMpIHtcbiAge1xuICAgIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGUsXG4gICAgICAgIGNoaWxkID0gZmliZXIuY2hpbGQsXG4gICAgICAgIHNpYmxpbmcgPSBmaWJlci5zaWJsaW5nLFxuICAgICAgICB0YWcgPSBmaWJlci50YWcsXG4gICAgICAgIHR5cGUgPSBmaWJlci50eXBlO1xuICAgIHZhciBjYW5kaWRhdGVUeXBlID0gbnVsbDtcblxuICAgIHN3aXRjaCAodGFnKSB7XG4gICAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgICAgY2FuZGlkYXRlVHlwZSA9IHR5cGU7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICAgIGNhbmRpZGF0ZVR5cGUgPSB0eXBlLnJlbmRlcjtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHJlc29sdmVGYW1pbHkgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgcmVzb2x2ZUZhbWlseSB0byBiZSBzZXQgZHVyaW5nIGhvdCByZWxvYWQuJyk7XG4gICAgfVxuXG4gICAgdmFyIG5lZWRzUmVuZGVyID0gZmFsc2U7XG4gICAgdmFyIG5lZWRzUmVtb3VudCA9IGZhbHNlO1xuXG4gICAgaWYgKGNhbmRpZGF0ZVR5cGUgIT09IG51bGwpIHtcbiAgICAgIHZhciBmYW1pbHkgPSByZXNvbHZlRmFtaWx5KGNhbmRpZGF0ZVR5cGUpO1xuXG4gICAgICBpZiAoZmFtaWx5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHN0YWxlRmFtaWxpZXMuaGFzKGZhbWlseSkpIHtcbiAgICAgICAgICBuZWVkc1JlbW91bnQgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHVwZGF0ZWRGYW1pbGllcy5oYXMoZmFtaWx5KSkge1xuICAgICAgICAgIGlmICh0YWcgPT09IENsYXNzQ29tcG9uZW50KSB7XG4gICAgICAgICAgICBuZWVkc1JlbW91bnQgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZWVkc1JlbmRlciA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGZhaWxlZEJvdW5kYXJpZXMgIT09IG51bGwpIHtcbiAgICAgIGlmIChmYWlsZWRCb3VuZGFyaWVzLmhhcyhmaWJlcikgfHwgYWx0ZXJuYXRlICE9PSBudWxsICYmIGZhaWxlZEJvdW5kYXJpZXMuaGFzKGFsdGVybmF0ZSkpIHtcbiAgICAgICAgbmVlZHNSZW1vdW50ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobmVlZHNSZW1vdW50KSB7XG4gICAgICBmaWJlci5fZGVidWdOZWVkc1JlbW91bnQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChuZWVkc1JlbW91bnQgfHwgbmVlZHNSZW5kZXIpIHtcbiAgICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgU3luY0xhbmUsIE5vVGltZXN0YW1wKTtcbiAgICB9XG5cbiAgICBpZiAoY2hpbGQgIT09IG51bGwgJiYgIW5lZWRzUmVtb3VudCkge1xuICAgICAgc2NoZWR1bGVGaWJlcnNXaXRoRmFtaWxpZXNSZWN1cnNpdmVseShjaGlsZCwgdXBkYXRlZEZhbWlsaWVzLCBzdGFsZUZhbWlsaWVzKTtcbiAgICB9XG5cbiAgICBpZiAoc2libGluZyAhPT0gbnVsbCkge1xuICAgICAgc2NoZWR1bGVGaWJlcnNXaXRoRmFtaWxpZXNSZWN1cnNpdmVseShzaWJsaW5nLCB1cGRhdGVkRmFtaWxpZXMsIHN0YWxlRmFtaWxpZXMpO1xuICAgIH1cbiAgfVxufVxuXG52YXIgZmluZEhvc3RJbnN0YW5jZXNGb3JSZWZyZXNoID0gZnVuY3Rpb24gKHJvb3QsIGZhbWlsaWVzKSB7XG4gIHtcbiAgICB2YXIgaG9zdEluc3RhbmNlcyA9IG5ldyBTZXQoKTtcbiAgICB2YXIgdHlwZXMgPSBuZXcgU2V0KGZhbWlsaWVzLm1hcChmdW5jdGlvbiAoZmFtaWx5KSB7XG4gICAgICByZXR1cm4gZmFtaWx5LmN1cnJlbnQ7XG4gICAgfSkpO1xuICAgIGZpbmRIb3N0SW5zdGFuY2VzRm9yTWF0Y2hpbmdGaWJlcnNSZWN1cnNpdmVseShyb290LmN1cnJlbnQsIHR5cGVzLCBob3N0SW5zdGFuY2VzKTtcbiAgICByZXR1cm4gaG9zdEluc3RhbmNlcztcbiAgfVxufTtcblxuZnVuY3Rpb24gZmluZEhvc3RJbnN0YW5jZXNGb3JNYXRjaGluZ0ZpYmVyc1JlY3Vyc2l2ZWx5KGZpYmVyLCB0eXBlcywgaG9zdEluc3RhbmNlcykge1xuICB7XG4gICAgdmFyIGNoaWxkID0gZmliZXIuY2hpbGQsXG4gICAgICAgIHNpYmxpbmcgPSBmaWJlci5zaWJsaW5nLFxuICAgICAgICB0YWcgPSBmaWJlci50YWcsXG4gICAgICAgIHR5cGUgPSBmaWJlci50eXBlO1xuICAgIHZhciBjYW5kaWRhdGVUeXBlID0gbnVsbDtcblxuICAgIHN3aXRjaCAodGFnKSB7XG4gICAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgICAgY2FuZGlkYXRlVHlwZSA9IHR5cGU7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICAgIGNhbmRpZGF0ZVR5cGUgPSB0eXBlLnJlbmRlcjtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIGRpZE1hdGNoID0gZmFsc2U7XG5cbiAgICBpZiAoY2FuZGlkYXRlVHlwZSAhPT0gbnVsbCkge1xuICAgICAgaWYgKHR5cGVzLmhhcyhjYW5kaWRhdGVUeXBlKSkge1xuICAgICAgICBkaWRNYXRjaCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRpZE1hdGNoKSB7XG4gICAgICAvLyBXZSBoYXZlIGEgbWF0Y2guIFRoaXMgb25seSBkcmlsbHMgZG93biB0byB0aGUgY2xvc2VzdCBob3N0IGNvbXBvbmVudHMuXG4gICAgICAvLyBUaGVyZSdzIG5vIG5lZWQgdG8gc2VhcmNoIGRlZXBlciBiZWNhdXNlIGZvciB0aGUgcHVycG9zZSBvZiBnaXZpbmdcbiAgICAgIC8vIHZpc3VhbCBmZWVkYmFjaywgXCJmbGFzaGluZ1wiIG91dGVybW9zdCBwYXJlbnQgcmVjdGFuZ2xlcyBpcyBzdWZmaWNpZW50LlxuICAgICAgZmluZEhvc3RJbnN0YW5jZXNGb3JGaWJlclNoYWxsb3dseShmaWJlciwgaG9zdEluc3RhbmNlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIHRoZXJlJ3Mgbm8gbWF0Y2gsIG1heWJlIHRoZXJlIHdpbGwgYmUgb25lIGZ1cnRoZXIgZG93biBpbiB0aGUgY2hpbGQgdHJlZS5cbiAgICAgIGlmIChjaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICBmaW5kSG9zdEluc3RhbmNlc0Zvck1hdGNoaW5nRmliZXJzUmVjdXJzaXZlbHkoY2hpbGQsIHR5cGVzLCBob3N0SW5zdGFuY2VzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2libGluZyAhPT0gbnVsbCkge1xuICAgICAgZmluZEhvc3RJbnN0YW5jZXNGb3JNYXRjaGluZ0ZpYmVyc1JlY3Vyc2l2ZWx5KHNpYmxpbmcsIHR5cGVzLCBob3N0SW5zdGFuY2VzKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluZEhvc3RJbnN0YW5jZXNGb3JGaWJlclNoYWxsb3dseShmaWJlciwgaG9zdEluc3RhbmNlcykge1xuICB7XG4gICAgdmFyIGZvdW5kSG9zdEluc3RhbmNlcyA9IGZpbmRDaGlsZEhvc3RJbnN0YW5jZXNGb3JGaWJlclNoYWxsb3dseShmaWJlciwgaG9zdEluc3RhbmNlcyk7XG5cbiAgICBpZiAoZm91bmRIb3N0SW5zdGFuY2VzKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBJZiB3ZSBkaWRuJ3QgZmluZCBhbnkgaG9zdCBjaGlsZHJlbiwgZmFsbGJhY2sgdG8gY2xvc2VzdCBob3N0IHBhcmVudC5cblxuXG4gICAgdmFyIG5vZGUgPSBmaWJlcjtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBzd2l0Y2ggKG5vZGUudGFnKSB7XG4gICAgICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgICAgICBob3N0SW5zdGFuY2VzLmFkZChub2RlLnN0YXRlTm9kZSk7XG4gICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICAgICAgICBob3N0SW5zdGFuY2VzLmFkZChub2RlLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKTtcbiAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgICAgICBob3N0SW5zdGFuY2VzLmFkZChub2RlLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChub2RlLnJldHVybiA9PT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHRvIHJlYWNoIHJvb3QgZmlyc3QuJyk7XG4gICAgICB9XG5cbiAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluZENoaWxkSG9zdEluc3RhbmNlc0ZvckZpYmVyU2hhbGxvd2x5KGZpYmVyLCBob3N0SW5zdGFuY2VzKSB7XG4gIHtcbiAgICB2YXIgbm9kZSA9IGZpYmVyO1xuICAgIHZhciBmb3VuZEhvc3RJbnN0YW5jZXMgPSBmYWxzZTtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAobm9kZS50YWcgPT09IEhvc3RDb21wb25lbnQpIHtcbiAgICAgICAgLy8gV2UgZ290IGEgbWF0Y2guXG4gICAgICAgIGZvdW5kSG9zdEluc3RhbmNlcyA9IHRydWU7XG4gICAgICAgIGhvc3RJbnN0YW5jZXMuYWRkKG5vZGUuc3RhdGVOb2RlKTsgLy8gVGhlcmUgbWF5IHN0aWxsIGJlIG1vcmUsIHNvIGtlZXAgc2VhcmNoaW5nLlxuICAgICAgfSBlbHNlIGlmIChub2RlLmNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgICAgbm9kZSA9IG5vZGUuY2hpbGQ7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZSA9PT0gZmliZXIpIHtcbiAgICAgICAgcmV0dXJuIGZvdW5kSG9zdEluc3RhbmNlcztcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKG5vZGUuc2libGluZyA9PT0gbnVsbCkge1xuICAgICAgICBpZiAobm9kZS5yZXR1cm4gPT09IG51bGwgfHwgbm9kZS5yZXR1cm4gPT09IGZpYmVyKSB7XG4gICAgICAgICAgcmV0dXJuIGZvdW5kSG9zdEluc3RhbmNlcztcbiAgICAgICAgfVxuXG4gICAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICAgIH1cblxuICAgICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbnZhciBoYXNCYWRNYXBQb2x5ZmlsbDtcblxue1xuICBoYXNCYWRNYXBQb2x5ZmlsbCA9IGZhbHNlO1xuXG4gIHRyeSB7XG4gICAgdmFyIG5vbkV4dGVuc2libGVPYmplY3QgPSBPYmplY3QucHJldmVudEV4dGVuc2lvbnMoe30pO1xuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLW5ldyAqL1xuXG4gICAgbmV3IE1hcChbW25vbkV4dGVuc2libGVPYmplY3QsIG51bGxdXSk7XG4gICAgbmV3IFNldChbbm9uRXh0ZW5zaWJsZU9iamVjdF0pO1xuICAgIC8qIGVzbGludC1lbmFibGUgbm8tbmV3ICovXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBUT0RPOiBDb25zaWRlciB3YXJuaW5nIGFib3V0IGJhZCBwb2x5ZmlsbHNcbiAgICBoYXNCYWRNYXBQb2x5ZmlsbCA9IHRydWU7XG4gIH1cbn1cblxudmFyIGRlYnVnQ291bnRlciA9IDE7XG5cbmZ1bmN0aW9uIEZpYmVyTm9kZSh0YWcsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKSB7XG4gIC8vIEluc3RhbmNlXG4gIHRoaXMudGFnID0gdGFnO1xuICB0aGlzLmtleSA9IGtleTtcbiAgdGhpcy5lbGVtZW50VHlwZSA9IG51bGw7XG4gIHRoaXMudHlwZSA9IG51bGw7XG4gIHRoaXMuc3RhdGVOb2RlID0gbnVsbDsgLy8gRmliZXJcblxuICB0aGlzLnJldHVybiA9IG51bGw7XG4gIHRoaXMuY2hpbGQgPSBudWxsO1xuICB0aGlzLnNpYmxpbmcgPSBudWxsO1xuICB0aGlzLmluZGV4ID0gMDtcbiAgdGhpcy5yZWYgPSBudWxsO1xuICB0aGlzLnBlbmRpbmdQcm9wcyA9IHBlbmRpbmdQcm9wcztcbiAgdGhpcy5tZW1vaXplZFByb3BzID0gbnVsbDtcbiAgdGhpcy51cGRhdGVRdWV1ZSA9IG51bGw7XG4gIHRoaXMubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gIHRoaXMuZGVwZW5kZW5jaWVzID0gbnVsbDtcbiAgdGhpcy5tb2RlID0gbW9kZTsgLy8gRWZmZWN0c1xuXG4gIHRoaXMuZmxhZ3MgPSBOb0ZsYWdzO1xuICB0aGlzLm5leHRFZmZlY3QgPSBudWxsO1xuICB0aGlzLmZpcnN0RWZmZWN0ID0gbnVsbDtcbiAgdGhpcy5sYXN0RWZmZWN0ID0gbnVsbDtcbiAgdGhpcy5sYW5lcyA9IE5vTGFuZXM7XG4gIHRoaXMuY2hpbGRMYW5lcyA9IE5vTGFuZXM7XG4gIHRoaXMuYWx0ZXJuYXRlID0gbnVsbDtcblxuICB7XG4gICAgLy8gTm90ZTogVGhlIGZvbGxvd2luZyBpcyBkb25lIHRvIGF2b2lkIGEgdjggcGVyZm9ybWFuY2UgY2xpZmYuXG4gICAgLy9cbiAgICAvLyBJbml0aWFsaXppbmcgdGhlIGZpZWxkcyBiZWxvdyB0byBzbWlzIGFuZCBsYXRlciB1cGRhdGluZyB0aGVtIHdpdGhcbiAgICAvLyBkb3VibGUgdmFsdWVzIHdpbGwgY2F1c2UgRmliZXJzIHRvIGVuZCB1cCBoYXZpbmcgc2VwYXJhdGUgc2hhcGVzLlxuICAgIC8vIFRoaXMgYmVoYXZpb3IvYnVnIGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCBPYmplY3QucHJldmVudEV4dGVuc2lvbigpLlxuICAgIC8vIEZvcnR1bmF0ZWx5IHRoaXMgb25seSBpbXBhY3RzIERFViBidWlsZHMuXG4gICAgLy8gVW5mb3J0dW5hdGVseSBpdCBtYWtlcyBSZWFjdCB1bnVzYWJseSBzbG93IGZvciBzb21lIGFwcGxpY2F0aW9ucy5cbiAgICAvLyBUbyB3b3JrIGFyb3VuZCB0aGlzLCBpbml0aWFsaXplIHRoZSBmaWVsZHMgYmVsb3cgd2l0aCBkb3VibGVzLlxuICAgIC8vXG4gICAgLy8gTGVhcm4gbW9yZSBhYm91dCB0aGlzIGhlcmU6XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xNDM2NVxuICAgIC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTg1MzhcbiAgICB0aGlzLmFjdHVhbER1cmF0aW9uID0gTnVtYmVyLk5hTjtcbiAgICB0aGlzLmFjdHVhbFN0YXJ0VGltZSA9IE51bWJlci5OYU47XG4gICAgdGhpcy5zZWxmQmFzZUR1cmF0aW9uID0gTnVtYmVyLk5hTjtcbiAgICB0aGlzLnRyZWVCYXNlRHVyYXRpb24gPSBOdW1iZXIuTmFOOyAvLyBJdCdzIG9rYXkgdG8gcmVwbGFjZSB0aGUgaW5pdGlhbCBkb3VibGVzIHdpdGggc21pcyBhZnRlciBpbml0aWFsaXphdGlvbi5cbiAgICAvLyBUaGlzIHdvbid0IHRyaWdnZXIgdGhlIHBlcmZvcm1hbmNlIGNsaWZmIG1lbnRpb25lZCBhYm92ZSxcbiAgICAvLyBhbmQgaXQgc2ltcGxpZmllcyBvdGhlciBwcm9maWxlciBjb2RlIChpbmNsdWRpbmcgRGV2VG9vbHMpLlxuXG4gICAgdGhpcy5hY3R1YWxEdXJhdGlvbiA9IDA7XG4gICAgdGhpcy5hY3R1YWxTdGFydFRpbWUgPSAtMTtcbiAgICB0aGlzLnNlbGZCYXNlRHVyYXRpb24gPSAwO1xuICAgIHRoaXMudHJlZUJhc2VEdXJhdGlvbiA9IDA7XG4gIH1cblxuICB7XG4gICAgLy8gVGhpcyBpc24ndCBkaXJlY3RseSB1c2VkIGJ1dCBpcyBoYW5keSBmb3IgZGVidWdnaW5nIGludGVybmFsczpcbiAgICB0aGlzLl9kZWJ1Z0lEID0gZGVidWdDb3VudGVyKys7XG4gICAgdGhpcy5fZGVidWdTb3VyY2UgPSBudWxsO1xuICAgIHRoaXMuX2RlYnVnT3duZXIgPSBudWxsO1xuICAgIHRoaXMuX2RlYnVnTmVlZHNSZW1vdW50ID0gZmFsc2U7XG4gICAgdGhpcy5fZGVidWdIb29rVHlwZXMgPSBudWxsO1xuXG4gICAgaWYgKCFoYXNCYWRNYXBQb2x5ZmlsbCAmJiB0eXBlb2YgT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBPYmplY3QucHJldmVudEV4dGVuc2lvbnModGhpcyk7XG4gICAgfVxuICB9XG59IC8vIFRoaXMgaXMgYSBjb25zdHJ1Y3RvciBmdW5jdGlvbiwgcmF0aGVyIHRoYW4gYSBQT0pPIGNvbnN0cnVjdG9yLCBzdGlsbFxuLy8gcGxlYXNlIGVuc3VyZSB3ZSBkbyB0aGUgZm9sbG93aW5nOlxuLy8gMSkgTm9ib2R5IHNob3VsZCBhZGQgYW55IGluc3RhbmNlIG1ldGhvZHMgb24gdGhpcy4gSW5zdGFuY2UgbWV0aG9kcyBjYW4gYmVcbi8vICAgIG1vcmUgZGlmZmljdWx0IHRvIHByZWRpY3Qgd2hlbiB0aGV5IGdldCBvcHRpbWl6ZWQgYW5kIHRoZXkgYXJlIGFsbW9zdFxuLy8gICAgbmV2ZXIgaW5saW5lZCBwcm9wZXJseSBpbiBzdGF0aWMgY29tcGlsZXJzLlxuLy8gMikgTm9ib2R5IHNob3VsZCByZWx5IG9uIGBpbnN0YW5jZW9mIEZpYmVyYCBmb3IgdHlwZSB0ZXN0aW5nLiBXZSBzaG91bGRcbi8vICAgIGFsd2F5cyBrbm93IHdoZW4gaXQgaXMgYSBmaWJlci5cbi8vIDMpIFdlIG1pZ2h0IHdhbnQgdG8gZXhwZXJpbWVudCB3aXRoIHVzaW5nIG51bWVyaWMga2V5cyBzaW5jZSB0aGV5IGFyZSBlYXNpZXJcbi8vICAgIHRvIG9wdGltaXplIGluIGEgbm9uLUpJVCBlbnZpcm9ubWVudC5cbi8vIDQpIFdlIGNhbiBlYXNpbHkgZ28gZnJvbSBhIGNvbnN0cnVjdG9yIHRvIGEgY3JlYXRlRmliZXIgb2JqZWN0IGxpdGVyYWwgaWYgdGhhdFxuLy8gICAgaXMgZmFzdGVyLlxuLy8gNSkgSXQgc2hvdWxkIGJlIGVhc3kgdG8gcG9ydCB0aGlzIHRvIGEgQyBzdHJ1Y3QgYW5kIGtlZXAgYSBDIGltcGxlbWVudGF0aW9uXG4vLyAgICBjb21wYXRpYmxlLlxuXG5cbnZhciBjcmVhdGVGaWJlciA9IGZ1bmN0aW9uICh0YWcsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKSB7XG4gIC8vICRGbG93Rml4TWU6IHRoZSBzaGFwZXMgYXJlIGV4YWN0IGhlcmUgYnV0IEZsb3cgZG9lc24ndCBsaWtlIGNvbnN0cnVjdG9yc1xuICByZXR1cm4gbmV3IEZpYmVyTm9kZSh0YWcsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKTtcbn07XG5cbmZ1bmN0aW9uIHNob3VsZENvbnN0cnVjdCQxKENvbXBvbmVudCkge1xuICB2YXIgcHJvdG90eXBlID0gQ29tcG9uZW50LnByb3RvdHlwZTtcbiAgcmV0dXJuICEhKHByb3RvdHlwZSAmJiBwcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudCk7XG59XG5cbmZ1bmN0aW9uIGlzU2ltcGxlRnVuY3Rpb25Db21wb25lbnQodHlwZSkge1xuICByZXR1cm4gdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicgJiYgIXNob3VsZENvbnN0cnVjdCQxKHR5cGUpICYmIHR5cGUuZGVmYXVsdFByb3BzID09PSB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiByZXNvbHZlTGF6eUNvbXBvbmVudFRhZyhDb21wb25lbnQpIHtcbiAgaWYgKHR5cGVvZiBDb21wb25lbnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gc2hvdWxkQ29uc3RydWN0JDEoQ29tcG9uZW50KSA/IENsYXNzQ29tcG9uZW50IDogRnVuY3Rpb25Db21wb25lbnQ7XG4gIH0gZWxzZSBpZiAoQ29tcG9uZW50ICE9PSB1bmRlZmluZWQgJiYgQ29tcG9uZW50ICE9PSBudWxsKSB7XG4gICAgdmFyICQkdHlwZW9mID0gQ29tcG9uZW50LiQkdHlwZW9mO1xuXG4gICAgaWYgKCQkdHlwZW9mID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFKSB7XG4gICAgICByZXR1cm4gRm9yd2FyZFJlZjtcbiAgICB9XG5cbiAgICBpZiAoJCR0eXBlb2YgPT09IFJFQUNUX01FTU9fVFlQRSkge1xuICAgICAgcmV0dXJuIE1lbW9Db21wb25lbnQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIEluZGV0ZXJtaW5hdGVDb21wb25lbnQ7XG59IC8vIFRoaXMgaXMgdXNlZCB0byBjcmVhdGUgYW4gYWx0ZXJuYXRlIGZpYmVyIHRvIGRvIHdvcmsgb24uXG5cbmZ1bmN0aW9uIGNyZWF0ZVdvcmtJblByb2dyZXNzKGN1cnJlbnQsIHBlbmRpbmdQcm9wcykge1xuICB2YXIgd29ya0luUHJvZ3Jlc3MgPSBjdXJyZW50LmFsdGVybmF0ZTtcblxuICBpZiAod29ya0luUHJvZ3Jlc3MgPT09IG51bGwpIHtcbiAgICAvLyBXZSB1c2UgYSBkb3VibGUgYnVmZmVyaW5nIHBvb2xpbmcgdGVjaG5pcXVlIGJlY2F1c2Ugd2Uga25vdyB0aGF0IHdlJ2xsXG4gICAgLy8gb25seSBldmVyIG5lZWQgYXQgbW9zdCB0d28gdmVyc2lvbnMgb2YgYSB0cmVlLiBXZSBwb29sIHRoZSBcIm90aGVyXCIgdW51c2VkXG4gICAgLy8gbm9kZSB0aGF0IHdlJ3JlIGZyZWUgdG8gcmV1c2UuIFRoaXMgaXMgbGF6aWx5IGNyZWF0ZWQgdG8gYXZvaWQgYWxsb2NhdGluZ1xuICAgIC8vIGV4dHJhIG9iamVjdHMgZm9yIHRoaW5ncyB0aGF0IGFyZSBuZXZlciB1cGRhdGVkLiBJdCBhbHNvIGFsbG93IHVzIHRvXG4gICAgLy8gcmVjbGFpbSB0aGUgZXh0cmEgbWVtb3J5IGlmIG5lZWRlZC5cbiAgICB3b3JrSW5Qcm9ncmVzcyA9IGNyZWF0ZUZpYmVyKGN1cnJlbnQudGFnLCBwZW5kaW5nUHJvcHMsIGN1cnJlbnQua2V5LCBjdXJyZW50Lm1vZGUpO1xuICAgIHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlID0gY3VycmVudC5lbGVtZW50VHlwZTtcbiAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gY3VycmVudC50eXBlO1xuICAgIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSA9IGN1cnJlbnQuc3RhdGVOb2RlO1xuXG4gICAge1xuICAgICAgLy8gREVWLW9ubHkgZmllbGRzXG4gICAgICB3b3JrSW5Qcm9ncmVzcy5fZGVidWdJRCA9IGN1cnJlbnQuX2RlYnVnSUQ7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5fZGVidWdTb3VyY2UgPSBjdXJyZW50Ll9kZWJ1Z1NvdXJjZTtcbiAgICAgIHdvcmtJblByb2dyZXNzLl9kZWJ1Z093bmVyID0gY3VycmVudC5fZGVidWdPd25lcjtcbiAgICAgIHdvcmtJblByb2dyZXNzLl9kZWJ1Z0hvb2tUeXBlcyA9IGN1cnJlbnQuX2RlYnVnSG9va1R5cGVzO1xuICAgIH1cblxuICAgIHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZSA9IGN1cnJlbnQ7XG4gICAgY3VycmVudC5hbHRlcm5hdGUgPSB3b3JrSW5Qcm9ncmVzcztcbiAgfSBlbHNlIHtcbiAgICB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMgPSBwZW5kaW5nUHJvcHM7IC8vIE5lZWRlZCBiZWNhdXNlIEJsb2NrcyBzdG9yZSBkYXRhIG9uIHR5cGUuXG5cbiAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gY3VycmVudC50eXBlOyAvLyBXZSBhbHJlYWR5IGhhdmUgYW4gYWx0ZXJuYXRlLlxuICAgIC8vIFJlc2V0IHRoZSBlZmZlY3QgdGFnLlxuXG4gICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgPSBOb0ZsYWdzOyAvLyBUaGUgZWZmZWN0IGxpc3QgaXMgbm8gbG9uZ2VyIHZhbGlkLlxuXG4gICAgd29ya0luUHJvZ3Jlc3MubmV4dEVmZmVjdCA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3MuZmlyc3RFZmZlY3QgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzLmxhc3RFZmZlY3QgPSBudWxsO1xuXG4gICAge1xuICAgICAgLy8gV2UgaW50ZW50aW9uYWxseSByZXNldCwgcmF0aGVyIHRoYW4gY29weSwgYWN0dWFsRHVyYXRpb24gJiBhY3R1YWxTdGFydFRpbWUuXG4gICAgICAvLyBUaGlzIHByZXZlbnRzIHRpbWUgZnJvbSBlbmRsZXNzbHkgYWNjdW11bGF0aW5nIGluIG5ldyBjb21taXRzLlxuICAgICAgLy8gVGhpcyBoYXMgdGhlIGRvd25zaWRlIG9mIHJlc2V0dGluZyB2YWx1ZXMgZm9yIGRpZmZlcmVudCBwcmlvcml0eSByZW5kZXJzLFxuICAgICAgLy8gQnV0IHdvcmtzIGZvciB5aWVsZGluZyAodGhlIGNvbW1vbiBjYXNlKSBhbmQgc2hvdWxkIHN1cHBvcnQgcmVzdW1pbmcuXG4gICAgICB3b3JrSW5Qcm9ncmVzcy5hY3R1YWxEdXJhdGlvbiA9IDA7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5hY3R1YWxTdGFydFRpbWUgPSAtMTtcbiAgICB9XG4gIH1cblxuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzID0gY3VycmVudC5jaGlsZExhbmVzO1xuICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IGN1cnJlbnQubGFuZXM7XG4gIHdvcmtJblByb2dyZXNzLmNoaWxkID0gY3VycmVudC5jaGlsZDtcbiAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcyA9IGN1cnJlbnQubWVtb2l6ZWRQcm9wcztcbiAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcbiAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBjdXJyZW50LnVwZGF0ZVF1ZXVlOyAvLyBDbG9uZSB0aGUgZGVwZW5kZW5jaWVzIG9iamVjdC4gVGhpcyBpcyBtdXRhdGVkIGR1cmluZyB0aGUgcmVuZGVyIHBoYXNlLCBzb1xuICAvLyBpdCBjYW5ub3QgYmUgc2hhcmVkIHdpdGggdGhlIGN1cnJlbnQgZmliZXIuXG5cbiAgdmFyIGN1cnJlbnREZXBlbmRlbmNpZXMgPSBjdXJyZW50LmRlcGVuZGVuY2llcztcbiAgd29ya0luUHJvZ3Jlc3MuZGVwZW5kZW5jaWVzID0gY3VycmVudERlcGVuZGVuY2llcyA9PT0gbnVsbCA/IG51bGwgOiB7XG4gICAgbGFuZXM6IGN1cnJlbnREZXBlbmRlbmNpZXMubGFuZXMsXG4gICAgZmlyc3RDb250ZXh0OiBjdXJyZW50RGVwZW5kZW5jaWVzLmZpcnN0Q29udGV4dFxuICB9OyAvLyBUaGVzZSB3aWxsIGJlIG92ZXJyaWRkZW4gZHVyaW5nIHRoZSBwYXJlbnQncyByZWNvbmNpbGlhdGlvblxuXG4gIHdvcmtJblByb2dyZXNzLnNpYmxpbmcgPSBjdXJyZW50LnNpYmxpbmc7XG4gIHdvcmtJblByb2dyZXNzLmluZGV4ID0gY3VycmVudC5pbmRleDtcbiAgd29ya0luUHJvZ3Jlc3MucmVmID0gY3VycmVudC5yZWY7XG5cbiAge1xuICAgIHdvcmtJblByb2dyZXNzLnNlbGZCYXNlRHVyYXRpb24gPSBjdXJyZW50LnNlbGZCYXNlRHVyYXRpb247XG4gICAgd29ya0luUHJvZ3Jlc3MudHJlZUJhc2VEdXJhdGlvbiA9IGN1cnJlbnQudHJlZUJhc2VEdXJhdGlvbjtcbiAgfVxuXG4gIHtcbiAgICB3b3JrSW5Qcm9ncmVzcy5fZGVidWdOZWVkc1JlbW91bnQgPSBjdXJyZW50Ll9kZWJ1Z05lZWRzUmVtb3VudDtcblxuICAgIHN3aXRjaCAod29ya0luUHJvZ3Jlc3MudGFnKSB7XG4gICAgICBjYXNlIEluZGV0ZXJtaW5hdGVDb21wb25lbnQ6XG4gICAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gcmVzb2x2ZUZ1bmN0aW9uRm9ySG90UmVsb2FkaW5nKGN1cnJlbnQudHlwZSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gcmVzb2x2ZUNsYXNzRm9ySG90UmVsb2FkaW5nKGN1cnJlbnQudHlwZSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSByZXNvbHZlRm9yd2FyZFJlZkZvckhvdFJlbG9hZGluZyhjdXJyZW50LnR5cGUpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gd29ya0luUHJvZ3Jlc3M7XG59IC8vIFVzZWQgdG8gcmV1c2UgYSBGaWJlciBmb3IgYSBzZWNvbmQgcGFzcy5cblxuZnVuY3Rpb24gcmVzZXRXb3JrSW5Qcm9ncmVzcyh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgLy8gVGhpcyByZXNldHMgdGhlIEZpYmVyIHRvIHdoYXQgY3JlYXRlRmliZXIgb3IgY3JlYXRlV29ya0luUHJvZ3Jlc3Mgd291bGRcbiAgLy8gaGF2ZSBzZXQgdGhlIHZhbHVlcyB0byBiZWZvcmUgZHVyaW5nIHRoZSBmaXJzdCBwYXNzLiBJZGVhbGx5IHRoaXMgd291bGRuJ3RcbiAgLy8gYmUgbmVjZXNzYXJ5IGJ1dCB1bmZvcnR1bmF0ZWx5IG1hbnkgY29kZSBwYXRocyByZWFkcyBmcm9tIHRoZSB3b3JrSW5Qcm9ncmVzc1xuICAvLyB3aGVuIHRoZXkgc2hvdWxkIGJlIHJlYWRpbmcgZnJvbSBjdXJyZW50IGFuZCB3cml0aW5nIHRvIHdvcmtJblByb2dyZXNzLlxuICAvLyBXZSBhc3N1bWUgcGVuZGluZ1Byb3BzLCBpbmRleCwga2V5LCByZWYsIHJldHVybiBhcmUgc3RpbGwgdW50b3VjaGVkIHRvXG4gIC8vIGF2b2lkIGRvaW5nIGFub3RoZXIgcmVjb25jaWxpYXRpb24uXG4gIC8vIFJlc2V0IHRoZSBlZmZlY3QgdGFnIGJ1dCBrZWVwIGFueSBQbGFjZW1lbnQgdGFncywgc2luY2UgdGhhdCdzIHNvbWV0aGluZ1xuICAvLyB0aGF0IGNoaWxkIGZpYmVyIGlzIHNldHRpbmcsIG5vdCB0aGUgcmVjb25jaWxpYXRpb24uXG4gIHdvcmtJblByb2dyZXNzLmZsYWdzICY9IFBsYWNlbWVudDsgLy8gVGhlIGVmZmVjdCBsaXN0IGlzIG5vIGxvbmdlciB2YWxpZC5cblxuICB3b3JrSW5Qcm9ncmVzcy5uZXh0RWZmZWN0ID0gbnVsbDtcbiAgd29ya0luUHJvZ3Jlc3MuZmlyc3RFZmZlY3QgPSBudWxsO1xuICB3b3JrSW5Qcm9ncmVzcy5sYXN0RWZmZWN0ID0gbnVsbDtcbiAgdmFyIGN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcy5hbHRlcm5hdGU7XG5cbiAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAvLyBSZXNldCB0byBjcmVhdGVGaWJlcidzIGluaXRpYWwgdmFsdWVzLlxuICAgIHdvcmtJblByb2dyZXNzLmNoaWxkTGFuZXMgPSBOb0xhbmVzO1xuICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gcmVuZGVyTGFuZXM7XG4gICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHMgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzcy5kZXBlbmRlbmNpZXMgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSA9IG51bGw7XG5cbiAgICB7XG4gICAgICAvLyBOb3RlOiBXZSBkb24ndCByZXNldCB0aGUgYWN0dWFsVGltZSBjb3VudHMuIEl0J3MgdXNlZnVsIHRvIGFjY3VtdWxhdGVcbiAgICAgIC8vIGFjdHVhbCB0aW1lIGFjcm9zcyBtdWx0aXBsZSByZW5kZXIgcGFzc2VzLlxuICAgICAgd29ya0luUHJvZ3Jlc3Muc2VsZkJhc2VEdXJhdGlvbiA9IDA7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy50cmVlQmFzZUR1cmF0aW9uID0gMDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gUmVzZXQgdG8gdGhlIGNsb25lZCB2YWx1ZXMgdGhhdCBjcmVhdGVXb3JrSW5Qcm9ncmVzcyB3b3VsZCd2ZS5cbiAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzID0gY3VycmVudC5jaGlsZExhbmVzO1xuICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gY3VycmVudC5sYW5lcztcbiAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IGN1cnJlbnQuY2hpbGQ7XG4gICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcyA9IGN1cnJlbnQubWVtb2l6ZWRQcm9wcztcbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuICAgIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gY3VycmVudC51cGRhdGVRdWV1ZTsgLy8gTmVlZGVkIGJlY2F1c2UgQmxvY2tzIHN0b3JlIGRhdGEgb24gdHlwZS5cblxuICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSBjdXJyZW50LnR5cGU7IC8vIENsb25lIHRoZSBkZXBlbmRlbmNpZXMgb2JqZWN0LiBUaGlzIGlzIG11dGF0ZWQgZHVyaW5nIHRoZSByZW5kZXIgcGhhc2UsIHNvXG4gICAgLy8gaXQgY2Fubm90IGJlIHNoYXJlZCB3aXRoIHRoZSBjdXJyZW50IGZpYmVyLlxuXG4gICAgdmFyIGN1cnJlbnREZXBlbmRlbmNpZXMgPSBjdXJyZW50LmRlcGVuZGVuY2llcztcbiAgICB3b3JrSW5Qcm9ncmVzcy5kZXBlbmRlbmNpZXMgPSBjdXJyZW50RGVwZW5kZW5jaWVzID09PSBudWxsID8gbnVsbCA6IHtcbiAgICAgIGxhbmVzOiBjdXJyZW50RGVwZW5kZW5jaWVzLmxhbmVzLFxuICAgICAgZmlyc3RDb250ZXh0OiBjdXJyZW50RGVwZW5kZW5jaWVzLmZpcnN0Q29udGV4dFxuICAgIH07XG5cbiAgICB7XG4gICAgICAvLyBOb3RlOiBXZSBkb24ndCByZXNldCB0aGUgYWN0dWFsVGltZSBjb3VudHMuIEl0J3MgdXNlZnVsIHRvIGFjY3VtdWxhdGVcbiAgICAgIC8vIGFjdHVhbCB0aW1lIGFjcm9zcyBtdWx0aXBsZSByZW5kZXIgcGFzc2VzLlxuICAgICAgd29ya0luUHJvZ3Jlc3Muc2VsZkJhc2VEdXJhdGlvbiA9IGN1cnJlbnQuc2VsZkJhc2VEdXJhdGlvbjtcbiAgICAgIHdvcmtJblByb2dyZXNzLnRyZWVCYXNlRHVyYXRpb24gPSBjdXJyZW50LnRyZWVCYXNlRHVyYXRpb247XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzO1xufVxuZnVuY3Rpb24gY3JlYXRlSG9zdFJvb3RGaWJlcih0YWcpIHtcbiAgdmFyIG1vZGU7XG5cbiAgaWYgKHRhZyA9PT0gQ29uY3VycmVudFJvb3QpIHtcbiAgICBtb2RlID0gQ29uY3VycmVudE1vZGUgfCBCbG9ja2luZ01vZGUgfCBTdHJpY3RNb2RlO1xuICB9IGVsc2UgaWYgKHRhZyA9PT0gQmxvY2tpbmdSb290KSB7XG4gICAgbW9kZSA9IEJsb2NraW5nTW9kZSB8IFN0cmljdE1vZGU7XG4gIH0gZWxzZSB7XG4gICAgbW9kZSA9IE5vTW9kZTtcbiAgfVxuXG4gIGlmICggaXNEZXZUb29sc1ByZXNlbnQpIHtcbiAgICAvLyBBbHdheXMgY29sbGVjdCBwcm9maWxlIHRpbWluZ3Mgd2hlbiBEZXZUb29scyBhcmUgcHJlc2VudC5cbiAgICAvLyBUaGlzIGVuYWJsZXMgRGV2VG9vbHMgdG8gc3RhcnQgY2FwdHVyaW5nIHRpbWluZyBhdCBhbnkgcG9pbnRcdTIwMTNcbiAgICAvLyBXaXRob3V0IHNvbWUgbm9kZXMgaW4gdGhlIHRyZWUgaGF2aW5nIGVtcHR5IGJhc2UgdGltZXMuXG4gICAgbW9kZSB8PSBQcm9maWxlTW9kZTtcbiAgfVxuXG4gIHJldHVybiBjcmVhdGVGaWJlcihIb3N0Um9vdCwgbnVsbCwgbnVsbCwgbW9kZSk7XG59XG5mdW5jdGlvbiBjcmVhdGVGaWJlckZyb21UeXBlQW5kUHJvcHModHlwZSwgLy8gUmVhY3QkRWxlbWVudFR5cGVcbmtleSwgcGVuZGluZ1Byb3BzLCBvd25lciwgbW9kZSwgbGFuZXMpIHtcbiAgdmFyIGZpYmVyVGFnID0gSW5kZXRlcm1pbmF0ZUNvbXBvbmVudDsgLy8gVGhlIHJlc29sdmVkIHR5cGUgaXMgc2V0IGlmIHdlIGtub3cgd2hhdCB0aGUgZmluYWwgdHlwZSB3aWxsIGJlLiBJLmUuIGl0J3Mgbm90IGxhenkuXG5cbiAgdmFyIHJlc29sdmVkVHlwZSA9IHR5cGU7XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKHNob3VsZENvbnN0cnVjdCQxKHR5cGUpKSB7XG4gICAgICBmaWJlclRhZyA9IENsYXNzQ29tcG9uZW50O1xuXG4gICAgICB7XG4gICAgICAgIHJlc29sdmVkVHlwZSA9IHJlc29sdmVDbGFzc0ZvckhvdFJlbG9hZGluZyhyZXNvbHZlZFR5cGUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB7XG4gICAgICAgIHJlc29sdmVkVHlwZSA9IHJlc29sdmVGdW5jdGlvbkZvckhvdFJlbG9hZGluZyhyZXNvbHZlZFR5cGUpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICBmaWJlclRhZyA9IEhvc3RDb21wb25lbnQ7XG4gIH0gZWxzZSB7XG4gICAgZ2V0VGFnOiBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgUkVBQ1RfRlJBR01FTlRfVFlQRTpcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KHBlbmRpbmdQcm9wcy5jaGlsZHJlbiwgbW9kZSwgbGFuZXMsIGtleSk7XG5cbiAgICAgIGNhc2UgUkVBQ1RfREVCVUdfVFJBQ0lOR19NT0RFX1RZUEU6XG4gICAgICAgIGZpYmVyVGFnID0gTW9kZTtcbiAgICAgICAgbW9kZSB8PSBEZWJ1Z1RyYWNpbmdNb2RlO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFOlxuICAgICAgICBmaWJlclRhZyA9IE1vZGU7XG4gICAgICAgIG1vZGUgfD0gU3RyaWN0TW9kZTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgUkVBQ1RfUFJPRklMRVJfVFlQRTpcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUZpYmVyRnJvbVByb2ZpbGVyKHBlbmRpbmdQcm9wcywgbW9kZSwgbGFuZXMsIGtleSk7XG5cbiAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfVFlQRTpcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUZpYmVyRnJvbVN1c3BlbnNlKHBlbmRpbmdQcm9wcywgbW9kZSwgbGFuZXMsIGtleSk7XG5cbiAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgICByZXR1cm4gY3JlYXRlRmliZXJGcm9tU3VzcGVuc2VMaXN0KHBlbmRpbmdQcm9wcywgbW9kZSwgbGFuZXMsIGtleSk7XG5cbiAgICAgIGNhc2UgUkVBQ1RfT0ZGU0NSRUVOX1RZUEU6XG4gICAgICAgIHJldHVybiBjcmVhdGVGaWJlckZyb21PZmZzY3JlZW4ocGVuZGluZ1Byb3BzLCBtb2RlLCBsYW5lcywga2V5KTtcblxuICAgICAgY2FzZSBSRUFDVF9MRUdBQ1lfSElEREVOX1RZUEU6XG4gICAgICAgIHJldHVybiBjcmVhdGVGaWJlckZyb21MZWdhY3lIaWRkZW4ocGVuZGluZ1Byb3BzLCBtb2RlLCBsYW5lcywga2V5KTtcblxuICAgICAgY2FzZSBSRUFDVF9TQ09QRV9UWVBFOlxuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZmFsbHRocm91Z2hcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAge1xuICAgICAgICAgIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgc3dpdGNoICh0eXBlLiQkdHlwZW9mKSB7XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfUFJPVklERVJfVFlQRTpcbiAgICAgICAgICAgICAgICBmaWJlclRhZyA9IENvbnRleHRQcm92aWRlcjtcbiAgICAgICAgICAgICAgICBicmVhayBnZXRUYWc7XG5cbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9DT05URVhUX1RZUEU6XG4gICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIGNvbnN1bWVyXG4gICAgICAgICAgICAgICAgZmliZXJUYWcgPSBDb250ZXh0Q29uc3VtZXI7XG4gICAgICAgICAgICAgICAgYnJlYWsgZ2V0VGFnO1xuXG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgICAgICAgICBmaWJlclRhZyA9IEZvcndhcmRSZWY7XG5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlZFR5cGUgPSByZXNvbHZlRm9yd2FyZFJlZkZvckhvdFJlbG9hZGluZyhyZXNvbHZlZFR5cGUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGJyZWFrIGdldFRhZztcblxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgICAgICAgICBmaWJlclRhZyA9IE1lbW9Db21wb25lbnQ7XG4gICAgICAgICAgICAgICAgYnJlYWsgZ2V0VGFnO1xuXG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICAgICAgICAgIGZpYmVyVGFnID0gTGF6eUNvbXBvbmVudDtcbiAgICAgICAgICAgICAgICByZXNvbHZlZFR5cGUgPSBudWxsO1xuICAgICAgICAgICAgICAgIGJyZWFrIGdldFRhZztcblxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0JMT0NLX1RZUEU6XG4gICAgICAgICAgICAgICAgZmliZXJUYWcgPSBCbG9jaztcbiAgICAgICAgICAgICAgICBicmVhayBnZXRUYWc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGluZm8gPSAnJztcblxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0eXBlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwgJiYgT2JqZWN0LmtleXModHlwZSkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgIGluZm8gKz0gJyBZb3UgbGlrZWx5IGZvcmdvdCB0byBleHBvcnQgeW91ciBjb21wb25lbnQgZnJvbSB0aGUgZmlsZSAnICsgXCJpdCdzIGRlZmluZWQgaW4sIG9yIHlvdSBtaWdodCBoYXZlIG1peGVkIHVwIGRlZmF1bHQgYW5kIFwiICsgJ25hbWVkIGltcG9ydHMuJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIG93bmVyTmFtZSA9IG93bmVyID8gZ2V0Q29tcG9uZW50TmFtZShvd25lci50eXBlKSA6IG51bGw7XG5cbiAgICAgICAgICAgIGlmIChvd25lck5hbWUpIHtcbiAgICAgICAgICAgICAgaW5mbyArPSAnXFxuXFxuQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgYCcgKyBvd25lck5hbWUgKyAnYC4nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiRWxlbWVudCB0eXBlIGlzIGludmFsaWQ6IGV4cGVjdGVkIGEgc3RyaW5nIChmb3IgYnVpbHQtaW4gY29tcG9uZW50cykgb3IgYSBjbGFzcy9mdW5jdGlvbiAoZm9yIGNvbXBvc2l0ZSBjb21wb25lbnRzKSBidXQgZ290OiBcIiArICh0eXBlID09IG51bGwgPyB0eXBlIDogdHlwZW9mIHR5cGUpICsgXCIuXCIgKyBpbmZvICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXIoZmliZXJUYWcsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKTtcbiAgZmliZXIuZWxlbWVudFR5cGUgPSB0eXBlO1xuICBmaWJlci50eXBlID0gcmVzb2x2ZWRUeXBlO1xuICBmaWJlci5sYW5lcyA9IGxhbmVzO1xuXG4gIHtcbiAgICBmaWJlci5fZGVidWdPd25lciA9IG93bmVyO1xuICB9XG5cbiAgcmV0dXJuIGZpYmVyO1xufVxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tRWxlbWVudChlbGVtZW50LCBtb2RlLCBsYW5lcykge1xuICB2YXIgb3duZXIgPSBudWxsO1xuXG4gIHtcbiAgICBvd25lciA9IGVsZW1lbnQuX293bmVyO1xuICB9XG5cbiAgdmFyIHR5cGUgPSBlbGVtZW50LnR5cGU7XG4gIHZhciBrZXkgPSBlbGVtZW50LmtleTtcbiAgdmFyIHBlbmRpbmdQcm9wcyA9IGVsZW1lbnQucHJvcHM7XG4gIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyRnJvbVR5cGVBbmRQcm9wcyh0eXBlLCBrZXksIHBlbmRpbmdQcm9wcywgb3duZXIsIG1vZGUsIGxhbmVzKTtcblxuICB7XG4gICAgZmliZXIuX2RlYnVnU291cmNlID0gZWxlbWVudC5fc291cmNlO1xuICAgIGZpYmVyLl9kZWJ1Z093bmVyID0gZWxlbWVudC5fb3duZXI7XG4gIH1cblxuICByZXR1cm4gZmliZXI7XG59XG5mdW5jdGlvbiBjcmVhdGVGaWJlckZyb21GcmFnbWVudChlbGVtZW50cywgbW9kZSwgbGFuZXMsIGtleSkge1xuICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlcihGcmFnbWVudCwgZWxlbWVudHMsIGtleSwgbW9kZSk7XG4gIGZpYmVyLmxhbmVzID0gbGFuZXM7XG4gIHJldHVybiBmaWJlcjtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tUHJvZmlsZXIocGVuZGluZ1Byb3BzLCBtb2RlLCBsYW5lcywga2V5KSB7XG4gIHtcbiAgICBpZiAodHlwZW9mIHBlbmRpbmdQcm9wcy5pZCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGVycm9yKCdQcm9maWxlciBtdXN0IHNwZWNpZnkgYW4gXCJpZFwiIGFzIGEgcHJvcCcpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyKFByb2ZpbGVyLCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSB8IFByb2ZpbGVNb2RlKTsgLy8gVE9ETzogVGhlIFByb2ZpbGVyIGZpYmVyIHNob3VsZG4ndCBoYXZlIGEgdHlwZS4gSXQgaGFzIGEgdGFnLlxuXG4gIGZpYmVyLmVsZW1lbnRUeXBlID0gUkVBQ1RfUFJPRklMRVJfVFlQRTtcbiAgZmliZXIudHlwZSA9IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG4gIGZpYmVyLmxhbmVzID0gbGFuZXM7XG5cbiAge1xuICAgIGZpYmVyLnN0YXRlTm9kZSA9IHtcbiAgICAgIGVmZmVjdER1cmF0aW9uOiAwLFxuICAgICAgcGFzc2l2ZUVmZmVjdER1cmF0aW9uOiAwXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBmaWJlcjtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tU3VzcGVuc2UocGVuZGluZ1Byb3BzLCBtb2RlLCBsYW5lcywga2V5KSB7XG4gIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyKFN1c3BlbnNlQ29tcG9uZW50LCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSk7IC8vIFRPRE86IFRoZSBTdXNwZW5zZUNvbXBvbmVudCBmaWJlciBzaG91bGRuJ3QgaGF2ZSBhIHR5cGUuIEl0IGhhcyBhIHRhZy5cbiAgLy8gVGhpcyBuZWVkcyB0byBiZSBmaXhlZCBpbiBnZXRDb21wb25lbnROYW1lIHNvIHRoYXQgaXQgcmVsaWVzIG9uIHRoZSB0YWdcbiAgLy8gaW5zdGVhZC5cblxuICBmaWJlci50eXBlID0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbiAgZmliZXIuZWxlbWVudFR5cGUgPSBSRUFDVF9TVVNQRU5TRV9UWVBFO1xuICBmaWJlci5sYW5lcyA9IGxhbmVzO1xuICByZXR1cm4gZmliZXI7XG59XG5mdW5jdGlvbiBjcmVhdGVGaWJlckZyb21TdXNwZW5zZUxpc3QocGVuZGluZ1Byb3BzLCBtb2RlLCBsYW5lcywga2V5KSB7XG4gIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyKFN1c3BlbnNlTGlzdENvbXBvbmVudCwgcGVuZGluZ1Byb3BzLCBrZXksIG1vZGUpO1xuXG4gIHtcbiAgICAvLyBUT0RPOiBUaGUgU3VzcGVuc2VMaXN0Q29tcG9uZW50IGZpYmVyIHNob3VsZG4ndCBoYXZlIGEgdHlwZS4gSXQgaGFzIGEgdGFnLlxuICAgIC8vIFRoaXMgbmVlZHMgdG8gYmUgZml4ZWQgaW4gZ2V0Q29tcG9uZW50TmFtZSBzbyB0aGF0IGl0IHJlbGllcyBvbiB0aGUgdGFnXG4gICAgLy8gaW5zdGVhZC5cbiAgICBmaWJlci50eXBlID0gUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFO1xuICB9XG5cbiAgZmliZXIuZWxlbWVudFR5cGUgPSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU7XG4gIGZpYmVyLmxhbmVzID0gbGFuZXM7XG4gIHJldHVybiBmaWJlcjtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbU9mZnNjcmVlbihwZW5kaW5nUHJvcHMsIG1vZGUsIGxhbmVzLCBrZXkpIHtcbiAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXIoT2Zmc2NyZWVuQ29tcG9uZW50LCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSk7IC8vIFRPRE86IFRoZSBPZmZzY3JlZW5Db21wb25lbnQgZmliZXIgc2hvdWxkbid0IGhhdmUgYSB0eXBlLiBJdCBoYXMgYSB0YWcuXG4gIC8vIFRoaXMgbmVlZHMgdG8gYmUgZml4ZWQgaW4gZ2V0Q29tcG9uZW50TmFtZSBzbyB0aGF0IGl0IHJlbGllcyBvbiB0aGUgdGFnXG4gIC8vIGluc3RlYWQuXG5cbiAge1xuICAgIGZpYmVyLnR5cGUgPSBSRUFDVF9PRkZTQ1JFRU5fVFlQRTtcbiAgfVxuXG4gIGZpYmVyLmVsZW1lbnRUeXBlID0gUkVBQ1RfT0ZGU0NSRUVOX1RZUEU7XG4gIGZpYmVyLmxhbmVzID0gbGFuZXM7XG4gIHJldHVybiBmaWJlcjtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbUxlZ2FjeUhpZGRlbihwZW5kaW5nUHJvcHMsIG1vZGUsIGxhbmVzLCBrZXkpIHtcbiAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXIoTGVnYWN5SGlkZGVuQ29tcG9uZW50LCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSk7IC8vIFRPRE86IFRoZSBMZWdhY3lIaWRkZW4gZmliZXIgc2hvdWxkbid0IGhhdmUgYSB0eXBlLiBJdCBoYXMgYSB0YWcuXG4gIC8vIFRoaXMgbmVlZHMgdG8gYmUgZml4ZWQgaW4gZ2V0Q29tcG9uZW50TmFtZSBzbyB0aGF0IGl0IHJlbGllcyBvbiB0aGUgdGFnXG4gIC8vIGluc3RlYWQuXG5cbiAge1xuICAgIGZpYmVyLnR5cGUgPSBSRUFDVF9MRUdBQ1lfSElEREVOX1RZUEU7XG4gIH1cblxuICBmaWJlci5lbGVtZW50VHlwZSA9IFJFQUNUX0xFR0FDWV9ISURERU5fVFlQRTtcbiAgZmliZXIubGFuZXMgPSBsYW5lcztcbiAgcmV0dXJuIGZpYmVyO1xufVxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tVGV4dChjb250ZW50LCBtb2RlLCBsYW5lcykge1xuICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlcihIb3N0VGV4dCwgY29udGVudCwgbnVsbCwgbW9kZSk7XG4gIGZpYmVyLmxhbmVzID0gbGFuZXM7XG4gIHJldHVybiBmaWJlcjtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbUhvc3RJbnN0YW5jZUZvckRlbGV0aW9uKCkge1xuICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlcihIb3N0Q29tcG9uZW50LCBudWxsLCBudWxsLCBOb01vZGUpOyAvLyBUT0RPOiBUaGVzZSBzaG91bGQgbm90IG5lZWQgYSB0eXBlLlxuXG4gIGZpYmVyLmVsZW1lbnRUeXBlID0gJ0RFTEVURUQnO1xuICBmaWJlci50eXBlID0gJ0RFTEVURUQnO1xuICByZXR1cm4gZmliZXI7XG59XG5mdW5jdGlvbiBjcmVhdGVGaWJlckZyb21Qb3J0YWwocG9ydGFsLCBtb2RlLCBsYW5lcykge1xuICB2YXIgcGVuZGluZ1Byb3BzID0gcG9ydGFsLmNoaWxkcmVuICE9PSBudWxsID8gcG9ydGFsLmNoaWxkcmVuIDogW107XG4gIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyKEhvc3RQb3J0YWwsIHBlbmRpbmdQcm9wcywgcG9ydGFsLmtleSwgbW9kZSk7XG4gIGZpYmVyLmxhbmVzID0gbGFuZXM7XG4gIGZpYmVyLnN0YXRlTm9kZSA9IHtcbiAgICBjb250YWluZXJJbmZvOiBwb3J0YWwuY29udGFpbmVySW5mbyxcbiAgICBwZW5kaW5nQ2hpbGRyZW46IG51bGwsXG4gICAgLy8gVXNlZCBieSBwZXJzaXN0ZW50IHVwZGF0ZXNcbiAgICBpbXBsZW1lbnRhdGlvbjogcG9ydGFsLmltcGxlbWVudGF0aW9uXG4gIH07XG4gIHJldHVybiBmaWJlcjtcbn0gLy8gVXNlZCBmb3Igc3Rhc2hpbmcgV0lQIHByb3BlcnRpZXMgdG8gcmVwbGF5IGZhaWxlZCB3b3JrIGluIERFVi5cblxuZnVuY3Rpb24gYXNzaWduRmliZXJQcm9wZXJ0aWVzSW5ERVYodGFyZ2V0LCBzb3VyY2UpIHtcbiAgaWYgKHRhcmdldCA9PT0gbnVsbCkge1xuICAgIC8vIFRoaXMgRmliZXIncyBpbml0aWFsIHByb3BlcnRpZXMgd2lsbCBhbHdheXMgYmUgb3ZlcndyaXR0ZW4uXG4gICAgLy8gV2Ugb25seSB1c2UgYSBGaWJlciB0byBlbnN1cmUgdGhlIHNhbWUgaGlkZGVuIGNsYXNzIHNvIERFViBpc24ndCBzbG93LlxuICAgIHRhcmdldCA9IGNyZWF0ZUZpYmVyKEluZGV0ZXJtaW5hdGVDb21wb25lbnQsIG51bGwsIG51bGwsIE5vTW9kZSk7XG4gIH0gLy8gVGhpcyBpcyBpbnRlbnRpb25hbGx5IHdyaXR0ZW4gYXMgYSBsaXN0IG9mIGFsbCBwcm9wZXJ0aWVzLlxuICAvLyBXZSB0cmllZCB0byB1c2UgT2JqZWN0LmFzc2lnbigpIGluc3RlYWQgYnV0IHRoaXMgaXMgY2FsbGVkIGluXG4gIC8vIHRoZSBob3R0ZXN0IHBhdGgsIGFuZCBPYmplY3QuYXNzaWduKCkgd2FzIHRvbyBzbG93OlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEyNTAyXG4gIC8vIFRoaXMgY29kZSBpcyBERVYtb25seSBzbyBzaXplIGlzIG5vdCBhIGNvbmNlcm4uXG5cblxuICB0YXJnZXQudGFnID0gc291cmNlLnRhZztcbiAgdGFyZ2V0LmtleSA9IHNvdXJjZS5rZXk7XG4gIHRhcmdldC5lbGVtZW50VHlwZSA9IHNvdXJjZS5lbGVtZW50VHlwZTtcbiAgdGFyZ2V0LnR5cGUgPSBzb3VyY2UudHlwZTtcbiAgdGFyZ2V0LnN0YXRlTm9kZSA9IHNvdXJjZS5zdGF0ZU5vZGU7XG4gIHRhcmdldC5yZXR1cm4gPSBzb3VyY2UucmV0dXJuO1xuICB0YXJnZXQuY2hpbGQgPSBzb3VyY2UuY2hpbGQ7XG4gIHRhcmdldC5zaWJsaW5nID0gc291cmNlLnNpYmxpbmc7XG4gIHRhcmdldC5pbmRleCA9IHNvdXJjZS5pbmRleDtcbiAgdGFyZ2V0LnJlZiA9IHNvdXJjZS5yZWY7XG4gIHRhcmdldC5wZW5kaW5nUHJvcHMgPSBzb3VyY2UucGVuZGluZ1Byb3BzO1xuICB0YXJnZXQubWVtb2l6ZWRQcm9wcyA9IHNvdXJjZS5tZW1vaXplZFByb3BzO1xuICB0YXJnZXQudXBkYXRlUXVldWUgPSBzb3VyY2UudXBkYXRlUXVldWU7XG4gIHRhcmdldC5tZW1vaXplZFN0YXRlID0gc291cmNlLm1lbW9pemVkU3RhdGU7XG4gIHRhcmdldC5kZXBlbmRlbmNpZXMgPSBzb3VyY2UuZGVwZW5kZW5jaWVzO1xuICB0YXJnZXQubW9kZSA9IHNvdXJjZS5tb2RlO1xuICB0YXJnZXQuZmxhZ3MgPSBzb3VyY2UuZmxhZ3M7XG4gIHRhcmdldC5uZXh0RWZmZWN0ID0gc291cmNlLm5leHRFZmZlY3Q7XG4gIHRhcmdldC5maXJzdEVmZmVjdCA9IHNvdXJjZS5maXJzdEVmZmVjdDtcbiAgdGFyZ2V0Lmxhc3RFZmZlY3QgPSBzb3VyY2UubGFzdEVmZmVjdDtcbiAgdGFyZ2V0LmxhbmVzID0gc291cmNlLmxhbmVzO1xuICB0YXJnZXQuY2hpbGRMYW5lcyA9IHNvdXJjZS5jaGlsZExhbmVzO1xuICB0YXJnZXQuYWx0ZXJuYXRlID0gc291cmNlLmFsdGVybmF0ZTtcblxuICB7XG4gICAgdGFyZ2V0LmFjdHVhbER1cmF0aW9uID0gc291cmNlLmFjdHVhbER1cmF0aW9uO1xuICAgIHRhcmdldC5hY3R1YWxTdGFydFRpbWUgPSBzb3VyY2UuYWN0dWFsU3RhcnRUaW1lO1xuICAgIHRhcmdldC5zZWxmQmFzZUR1cmF0aW9uID0gc291cmNlLnNlbGZCYXNlRHVyYXRpb247XG4gICAgdGFyZ2V0LnRyZWVCYXNlRHVyYXRpb24gPSBzb3VyY2UudHJlZUJhc2VEdXJhdGlvbjtcbiAgfVxuXG4gIHRhcmdldC5fZGVidWdJRCA9IHNvdXJjZS5fZGVidWdJRDtcbiAgdGFyZ2V0Ll9kZWJ1Z1NvdXJjZSA9IHNvdXJjZS5fZGVidWdTb3VyY2U7XG4gIHRhcmdldC5fZGVidWdPd25lciA9IHNvdXJjZS5fZGVidWdPd25lcjtcbiAgdGFyZ2V0Ll9kZWJ1Z05lZWRzUmVtb3VudCA9IHNvdXJjZS5fZGVidWdOZWVkc1JlbW91bnQ7XG4gIHRhcmdldC5fZGVidWdIb29rVHlwZXMgPSBzb3VyY2UuX2RlYnVnSG9va1R5cGVzO1xuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5mdW5jdGlvbiBGaWJlclJvb3ROb2RlKGNvbnRhaW5lckluZm8sIHRhZywgaHlkcmF0ZSkge1xuICB0aGlzLnRhZyA9IHRhZztcbiAgdGhpcy5jb250YWluZXJJbmZvID0gY29udGFpbmVySW5mbztcbiAgdGhpcy5wZW5kaW5nQ2hpbGRyZW4gPSBudWxsO1xuICB0aGlzLmN1cnJlbnQgPSBudWxsO1xuICB0aGlzLnBpbmdDYWNoZSA9IG51bGw7XG4gIHRoaXMuZmluaXNoZWRXb3JrID0gbnVsbDtcbiAgdGhpcy50aW1lb3V0SGFuZGxlID0gbm9UaW1lb3V0O1xuICB0aGlzLmNvbnRleHQgPSBudWxsO1xuICB0aGlzLnBlbmRpbmdDb250ZXh0ID0gbnVsbDtcbiAgdGhpcy5oeWRyYXRlID0gaHlkcmF0ZTtcbiAgdGhpcy5jYWxsYmFja05vZGUgPSBudWxsO1xuICB0aGlzLmNhbGxiYWNrUHJpb3JpdHkgPSBOb0xhbmVQcmlvcml0eTtcbiAgdGhpcy5ldmVudFRpbWVzID0gY3JlYXRlTGFuZU1hcChOb0xhbmVzKTtcbiAgdGhpcy5leHBpcmF0aW9uVGltZXMgPSBjcmVhdGVMYW5lTWFwKE5vVGltZXN0YW1wKTtcbiAgdGhpcy5wZW5kaW5nTGFuZXMgPSBOb0xhbmVzO1xuICB0aGlzLnN1c3BlbmRlZExhbmVzID0gTm9MYW5lcztcbiAgdGhpcy5waW5nZWRMYW5lcyA9IE5vTGFuZXM7XG4gIHRoaXMuZXhwaXJlZExhbmVzID0gTm9MYW5lcztcbiAgdGhpcy5tdXRhYmxlUmVhZExhbmVzID0gTm9MYW5lcztcbiAgdGhpcy5maW5pc2hlZExhbmVzID0gTm9MYW5lcztcbiAgdGhpcy5lbnRhbmdsZWRMYW5lcyA9IE5vTGFuZXM7XG4gIHRoaXMuZW50YW5nbGVtZW50cyA9IGNyZWF0ZUxhbmVNYXAoTm9MYW5lcyk7XG5cbiAge1xuICAgIHRoaXMubXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YSA9IG51bGw7XG4gIH1cblxuICB7XG4gICAgdGhpcy5pbnRlcmFjdGlvblRocmVhZElEID0gdHJhY2luZy51bnN0YWJsZV9nZXRUaHJlYWRJRCgpO1xuICAgIHRoaXMubWVtb2l6ZWRJbnRlcmFjdGlvbnMgPSBuZXcgU2V0KCk7XG4gICAgdGhpcy5wZW5kaW5nSW50ZXJhY3Rpb25NYXAgPSBuZXcgTWFwKCk7XG4gIH1cblxuICB7XG4gICAgc3dpdGNoICh0YWcpIHtcbiAgICAgIGNhc2UgQmxvY2tpbmdSb290OlxuICAgICAgICB0aGlzLl9kZWJ1Z1Jvb3RUeXBlID0gJ2NyZWF0ZUJsb2NraW5nUm9vdCgpJztcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgQ29uY3VycmVudFJvb3Q6XG4gICAgICAgIHRoaXMuX2RlYnVnUm9vdFR5cGUgPSAnY3JlYXRlUm9vdCgpJztcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgTGVnYWN5Um9vdDpcbiAgICAgICAgdGhpcy5fZGVidWdSb290VHlwZSA9ICdjcmVhdGVMZWdhY3lSb290KCknO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlRmliZXJSb290KGNvbnRhaW5lckluZm8sIHRhZywgaHlkcmF0ZSwgaHlkcmF0aW9uQ2FsbGJhY2tzKSB7XG4gIHZhciByb290ID0gbmV3IEZpYmVyUm9vdE5vZGUoY29udGFpbmVySW5mbywgdGFnLCBoeWRyYXRlKTtcbiAgLy8gc3RhdGVOb2RlIGlzIGFueS5cblxuXG4gIHZhciB1bmluaXRpYWxpemVkRmliZXIgPSBjcmVhdGVIb3N0Um9vdEZpYmVyKHRhZyk7XG4gIHJvb3QuY3VycmVudCA9IHVuaW5pdGlhbGl6ZWRGaWJlcjtcbiAgdW5pbml0aWFsaXplZEZpYmVyLnN0YXRlTm9kZSA9IHJvb3Q7XG4gIGluaXRpYWxpemVVcGRhdGVRdWV1ZSh1bmluaXRpYWxpemVkRmliZXIpO1xuICByZXR1cm4gcm9vdDtcbn1cblxuLy8gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIHZlcnNpb24gdXNlZCBmb3Igc2VydmVyIHJlbmRlcmluZyBtYXRjaGVzIHRoZSBvbmVcbi8vIHRoYXQgaXMgZXZlbnR1YWxseSByZWFkIGR1cmluZyBoeWRyYXRpb24uXG4vLyBJZiB0aGV5IGRvbid0IG1hdGNoIHRoZXJlJ3MgYSBwb3RlbnRpYWwgdGVhciBhbmQgYSBmdWxsIGRlb3B0IHJlbmRlciBpcyByZXF1aXJlZC5cblxuZnVuY3Rpb24gcmVnaXN0ZXJNdXRhYmxlU291cmNlRm9ySHlkcmF0aW9uKHJvb3QsIG11dGFibGVTb3VyY2UpIHtcbiAgdmFyIGdldFZlcnNpb24gPSBtdXRhYmxlU291cmNlLl9nZXRWZXJzaW9uO1xuICB2YXIgdmVyc2lvbiA9IGdldFZlcnNpb24obXV0YWJsZVNvdXJjZS5fc291cmNlKTsgLy8gVE9ETyBDbGVhciB0aGlzIGRhdGEgb25jZSBhbGwgcGVuZGluZyBoeWRyYXRpb24gd29yayBpcyBmaW5pc2hlZC5cbiAgLy8gUmV0YWluaW5nIGl0IGZvcmV2ZXIgbWF5IGludGVyZmVyZSB3aXRoIEdDLlxuXG4gIGlmIChyb290Lm11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGEgPT0gbnVsbCkge1xuICAgIHJvb3QubXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YSA9IFttdXRhYmxlU291cmNlLCB2ZXJzaW9uXTtcbiAgfSBlbHNlIHtcbiAgICByb290Lm11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGEucHVzaChtdXRhYmxlU291cmNlLCB2ZXJzaW9uKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVQb3J0YWwoY2hpbGRyZW4sIGNvbnRhaW5lckluZm8sIC8vIFRPRE86IGZpZ3VyZSBvdXQgdGhlIEFQSSBmb3IgY3Jvc3MtcmVuZGVyZXIgaW1wbGVtZW50YXRpb24uXG5pbXBsZW1lbnRhdGlvbikge1xuICB2YXIga2V5ID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiBudWxsO1xuICByZXR1cm4ge1xuICAgIC8vIFRoaXMgdGFnIGFsbG93IHVzIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IHRoaXMgYXMgYSBSZWFjdCBQb3J0YWxcbiAgICAkJHR5cGVvZjogUkVBQ1RfUE9SVEFMX1RZUEUsXG4gICAga2V5OiBrZXkgPT0gbnVsbCA/IG51bGwgOiAnJyArIGtleSxcbiAgICBjaGlsZHJlbjogY2hpbGRyZW4sXG4gICAgY29udGFpbmVySW5mbzogY29udGFpbmVySW5mbyxcbiAgICBpbXBsZW1lbnRhdGlvbjogaW1wbGVtZW50YXRpb25cbiAgfTtcbn1cblxudmFyIGRpZFdhcm5BYm91dE5lc3RlZFVwZGF0ZXM7XG52YXIgZGlkV2FybkFib3V0RmluZE5vZGVJblN0cmljdE1vZGU7XG5cbntcbiAgZGlkV2FybkFib3V0TmVzdGVkVXBkYXRlcyA9IGZhbHNlO1xuICBkaWRXYXJuQWJvdXRGaW5kTm9kZUluU3RyaWN0TW9kZSA9IHt9O1xufVxuXG5mdW5jdGlvbiBnZXRDb250ZXh0Rm9yU3VidHJlZShwYXJlbnRDb21wb25lbnQpIHtcbiAgaWYgKCFwYXJlbnRDb21wb25lbnQpIHtcbiAgICByZXR1cm4gZW1wdHlDb250ZXh0T2JqZWN0O1xuICB9XG5cbiAgdmFyIGZpYmVyID0gZ2V0KHBhcmVudENvbXBvbmVudCk7XG4gIHZhciBwYXJlbnRDb250ZXh0ID0gZmluZEN1cnJlbnRVbm1hc2tlZENvbnRleHQoZmliZXIpO1xuXG4gIGlmIChmaWJlci50YWcgPT09IENsYXNzQ29tcG9uZW50KSB7XG4gICAgdmFyIENvbXBvbmVudCA9IGZpYmVyLnR5cGU7XG5cbiAgICBpZiAoaXNDb250ZXh0UHJvdmlkZXIoQ29tcG9uZW50KSkge1xuICAgICAgcmV0dXJuIHByb2Nlc3NDaGlsZENvbnRleHQoZmliZXIsIENvbXBvbmVudCwgcGFyZW50Q29udGV4dCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHBhcmVudENvbnRleHQ7XG59XG5cbmZ1bmN0aW9uIGZpbmRIb3N0SW5zdGFuY2VXaXRoV2FybmluZyhjb21wb25lbnQsIG1ldGhvZE5hbWUpIHtcbiAge1xuICAgIHZhciBmaWJlciA9IGdldChjb21wb25lbnQpO1xuXG4gICAgaWYgKGZpYmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0eXBlb2YgY29tcG9uZW50LnJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiVW5hYmxlIHRvIGZpbmQgbm9kZSBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LlwiICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiQXJndW1lbnQgYXBwZWFycyB0byBub3QgYmUgYSBSZWFjdENvbXBvbmVudC4gS2V5czogXCIgKyBPYmplY3Qua2V5cyhjb21wb25lbnQpICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGhvc3RGaWJlciA9IGZpbmRDdXJyZW50SG9zdEZpYmVyKGZpYmVyKTtcblxuICAgIGlmIChob3N0RmliZXIgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChob3N0RmliZXIubW9kZSAmIFN0cmljdE1vZGUpIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnQ29tcG9uZW50JztcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRGaW5kTm9kZUluU3RyaWN0TW9kZVtjb21wb25lbnROYW1lXSkge1xuICAgICAgICBkaWRXYXJuQWJvdXRGaW5kTm9kZUluU3RyaWN0TW9kZVtjb21wb25lbnROYW1lXSA9IHRydWU7XG4gICAgICAgIHZhciBwcmV2aW91c0ZpYmVyID0gY3VycmVudDtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIHNldEN1cnJlbnRGaWJlcihob3N0RmliZXIpO1xuXG4gICAgICAgICAgaWYgKGZpYmVyLm1vZGUgJiBTdHJpY3RNb2RlKSB7XG4gICAgICAgICAgICBlcnJvcignJXMgaXMgZGVwcmVjYXRlZCBpbiBTdHJpY3RNb2RlLiAnICsgJyVzIHdhcyBwYXNzZWQgYW4gaW5zdGFuY2Ugb2YgJXMgd2hpY2ggaXMgaW5zaWRlIFN0cmljdE1vZGUuICcgKyAnSW5zdGVhZCwgYWRkIGEgcmVmIGRpcmVjdGx5IHRvIHRoZSBlbGVtZW50IHlvdSB3YW50IHRvIHJlZmVyZW5jZS4gJyArICdMZWFybiBtb3JlIGFib3V0IHVzaW5nIHJlZnMgc2FmZWx5IGhlcmU6ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3N0cmljdC1tb2RlLWZpbmQtbm9kZScsIG1ldGhvZE5hbWUsIG1ldGhvZE5hbWUsIGNvbXBvbmVudE5hbWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlcnJvcignJXMgaXMgZGVwcmVjYXRlZCBpbiBTdHJpY3RNb2RlLiAnICsgJyVzIHdhcyBwYXNzZWQgYW4gaW5zdGFuY2Ugb2YgJXMgd2hpY2ggcmVuZGVycyBTdHJpY3RNb2RlIGNoaWxkcmVuLiAnICsgJ0luc3RlYWQsIGFkZCBhIHJlZiBkaXJlY3RseSB0byB0aGUgZWxlbWVudCB5b3Ugd2FudCB0byByZWZlcmVuY2UuICcgKyAnTGVhcm4gbW9yZSBhYm91dCB1c2luZyByZWZzIHNhZmVseSBoZXJlOiAnICsgJ2h0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9zdHJpY3QtbW9kZS1maW5kLW5vZGUnLCBtZXRob2ROYW1lLCBtZXRob2ROYW1lLCBjb21wb25lbnROYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgLy8gSWRlYWxseSB0aGlzIHNob3VsZCByZXNldCB0byBwcmV2aW91cyBidXQgdGhpcyBzaG91bGRuJ3QgYmUgY2FsbGVkIGluXG4gICAgICAgICAgLy8gcmVuZGVyIGFuZCB0aGVyZSdzIGFub3RoZXIgd2FybmluZyBmb3IgdGhhdCBhbnl3YXkuXG4gICAgICAgICAgaWYgKHByZXZpb3VzRmliZXIpIHtcbiAgICAgICAgICAgIHNldEN1cnJlbnRGaWJlcihwcmV2aW91c0ZpYmVyKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaG9zdEZpYmVyLnN0YXRlTm9kZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVDb250YWluZXIoY29udGFpbmVySW5mbywgdGFnLCBoeWRyYXRlLCBoeWRyYXRpb25DYWxsYmFja3MpIHtcbiAgcmV0dXJuIGNyZWF0ZUZpYmVyUm9vdChjb250YWluZXJJbmZvLCB0YWcsIGh5ZHJhdGUpO1xufVxuZnVuY3Rpb24gdXBkYXRlQ29udGFpbmVyKGVsZW1lbnQsIGNvbnRhaW5lciwgcGFyZW50Q29tcG9uZW50LCBjYWxsYmFjaykge1xuICB7XG4gICAgb25TY2hlZHVsZVJvb3QoY29udGFpbmVyLCBlbGVtZW50KTtcbiAgfVxuXG4gIHZhciBjdXJyZW50JDEgPSBjb250YWluZXIuY3VycmVudDtcbiAgdmFyIGV2ZW50VGltZSA9IHJlcXVlc3RFdmVudFRpbWUoKTtcblxuICB7XG4gICAgLy8gJEZsb3dFeHBlY3RlZEVycm9yIC0gamVzdCBpc24ndCBhIGdsb2JhbCwgYW5kIGlzbid0IHJlY29nbml6ZWQgb3V0c2lkZSBvZiB0ZXN0c1xuICAgIGlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIGplc3QpIHtcbiAgICAgIHdhcm5JZlVubW9ja2VkU2NoZWR1bGVyKGN1cnJlbnQkMSk7XG4gICAgICB3YXJuSWZOb3RTY29wZWRXaXRoTWF0Y2hpbmdBY3QoY3VycmVudCQxKTtcbiAgICB9XG4gIH1cblxuICB2YXIgbGFuZSA9IHJlcXVlc3RVcGRhdGVMYW5lKGN1cnJlbnQkMSk7XG5cbiAgdmFyIGNvbnRleHQgPSBnZXRDb250ZXh0Rm9yU3VidHJlZShwYXJlbnRDb21wb25lbnQpO1xuXG4gIGlmIChjb250YWluZXIuY29udGV4dCA9PT0gbnVsbCkge1xuICAgIGNvbnRhaW5lci5jb250ZXh0ID0gY29udGV4dDtcbiAgfSBlbHNlIHtcbiAgICBjb250YWluZXIucGVuZGluZ0NvbnRleHQgPSBjb250ZXh0O1xuICB9XG5cbiAge1xuICAgIGlmIChpc1JlbmRlcmluZyAmJiBjdXJyZW50ICE9PSBudWxsICYmICFkaWRXYXJuQWJvdXROZXN0ZWRVcGRhdGVzKSB7XG4gICAgICBkaWRXYXJuQWJvdXROZXN0ZWRVcGRhdGVzID0gdHJ1ZTtcblxuICAgICAgZXJyb3IoJ1JlbmRlciBtZXRob2RzIHNob3VsZCBiZSBhIHB1cmUgZnVuY3Rpb24gb2YgcHJvcHMgYW5kIHN0YXRlOyAnICsgJ3RyaWdnZXJpbmcgbmVzdGVkIGNvbXBvbmVudCB1cGRhdGVzIGZyb20gcmVuZGVyIGlzIG5vdCBhbGxvd2VkLiAnICsgJ0lmIG5lY2Vzc2FyeSwgdHJpZ2dlciBuZXN0ZWQgdXBkYXRlcyBpbiBjb21wb25lbnREaWRVcGRhdGUuXFxuXFxuJyArICdDaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiAlcy4nLCBnZXRDb21wb25lbnROYW1lKGN1cnJlbnQudHlwZSkgfHwgJ1Vua25vd24nKTtcbiAgICB9XG4gIH1cblxuICB2YXIgdXBkYXRlID0gY3JlYXRlVXBkYXRlKGV2ZW50VGltZSwgbGFuZSk7IC8vIENhdXRpb246IFJlYWN0IERldlRvb2xzIGN1cnJlbnRseSBkZXBlbmRzIG9uIHRoaXMgcHJvcGVydHlcbiAgLy8gYmVpbmcgY2FsbGVkIFwiZWxlbWVudFwiLlxuXG4gIHVwZGF0ZS5wYXlsb2FkID0ge1xuICAgIGVsZW1lbnQ6IGVsZW1lbnRcbiAgfTtcbiAgY2FsbGJhY2sgPSBjYWxsYmFjayA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGNhbGxiYWNrO1xuXG4gIGlmIChjYWxsYmFjayAhPT0gbnVsbCkge1xuICAgIHtcbiAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZXJyb3IoJ3JlbmRlciguLi4pOiBFeHBlY3RlZCB0aGUgbGFzdCBvcHRpb25hbCBgY2FsbGJhY2tgIGFyZ3VtZW50IHRvIGJlIGEgJyArICdmdW5jdGlvbi4gSW5zdGVhZCByZWNlaXZlZDogJXMuJywgY2FsbGJhY2spO1xuICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZS5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICB9XG5cbiAgZW5xdWV1ZVVwZGF0ZShjdXJyZW50JDEsIHVwZGF0ZSk7XG4gIHNjaGVkdWxlVXBkYXRlT25GaWJlcihjdXJyZW50JDEsIGxhbmUsIGV2ZW50VGltZSk7XG4gIHJldHVybiBsYW5lO1xufVxuZnVuY3Rpb24gZ2V0UHVibGljUm9vdEluc3RhbmNlKGNvbnRhaW5lcikge1xuICB2YXIgY29udGFpbmVyRmliZXIgPSBjb250YWluZXIuY3VycmVudDtcblxuICBpZiAoIWNvbnRhaW5lckZpYmVyLmNoaWxkKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzd2l0Y2ggKGNvbnRhaW5lckZpYmVyLmNoaWxkLnRhZykge1xuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgIHJldHVybiBnZXRQdWJsaWNJbnN0YW5jZShjb250YWluZXJGaWJlci5jaGlsZC5zdGF0ZU5vZGUpO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBjb250YWluZXJGaWJlci5jaGlsZC5zdGF0ZU5vZGU7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFya1JldHJ5TGFuZUltcGwoZmliZXIsIHJldHJ5TGFuZSkge1xuICB2YXIgc3VzcGVuc2VTdGF0ZSA9IGZpYmVyLm1lbW9pemVkU3RhdGU7XG5cbiAgaWYgKHN1c3BlbnNlU3RhdGUgIT09IG51bGwgJiYgc3VzcGVuc2VTdGF0ZS5kZWh5ZHJhdGVkICE9PSBudWxsKSB7XG4gICAgc3VzcGVuc2VTdGF0ZS5yZXRyeUxhbmUgPSBoaWdoZXJQcmlvcml0eUxhbmUoc3VzcGVuc2VTdGF0ZS5yZXRyeUxhbmUsIHJldHJ5TGFuZSk7XG4gIH1cbn0gLy8gSW5jcmVhc2VzIHRoZSBwcmlvcml0eSBvZiB0aGVubmFibGVzIHdoZW4gdGhleSByZXNvbHZlIHdpdGhpbiB0aGlzIGJvdW5kYXJ5LlxuXG5cbmZ1bmN0aW9uIG1hcmtSZXRyeUxhbmVJZk5vdEh5ZHJhdGVkKGZpYmVyLCByZXRyeUxhbmUpIHtcbiAgbWFya1JldHJ5TGFuZUltcGwoZmliZXIsIHJldHJ5TGFuZSk7XG4gIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG5cbiAgaWYgKGFsdGVybmF0ZSkge1xuICAgIG1hcmtSZXRyeUxhbmVJbXBsKGFsdGVybmF0ZSwgcmV0cnlMYW5lKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhdHRlbXB0VXNlckJsb2NraW5nSHlkcmF0aW9uJDEoZmliZXIpIHtcbiAgaWYgKGZpYmVyLnRhZyAhPT0gU3VzcGVuc2VDb21wb25lbnQpIHtcbiAgICAvLyBXZSBpZ25vcmUgSG9zdFJvb3RzIGhlcmUgYmVjYXVzZSB3ZSBjYW4ndCBpbmNyZWFzZVxuICAgIC8vIHRoZWlyIHByaW9yaXR5IGFuZCB0aGV5IHNob3VsZCBub3Qgc3VzcGVuZCBvbiBJL08sXG4gICAgLy8gc2luY2UgeW91IGhhdmUgdG8gd3JhcCBhbnl0aGluZyB0aGF0IG1pZ2h0IHN1c3BlbmQgaW5cbiAgICAvLyBTdXNwZW5zZS5cbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgZXZlbnRUaW1lID0gcmVxdWVzdEV2ZW50VGltZSgpO1xuICB2YXIgbGFuZSA9IElucHV0RGlzY3JldGVIeWRyYXRpb25MYW5lO1xuICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIGxhbmUsIGV2ZW50VGltZSk7XG4gIG1hcmtSZXRyeUxhbmVJZk5vdEh5ZHJhdGVkKGZpYmVyLCBsYW5lKTtcbn1cbmZ1bmN0aW9uIGF0dGVtcHRDb250aW51b3VzSHlkcmF0aW9uJDEoZmliZXIpIHtcbiAgaWYgKGZpYmVyLnRhZyAhPT0gU3VzcGVuc2VDb21wb25lbnQpIHtcbiAgICAvLyBXZSBpZ25vcmUgSG9zdFJvb3RzIGhlcmUgYmVjYXVzZSB3ZSBjYW4ndCBpbmNyZWFzZVxuICAgIC8vIHRoZWlyIHByaW9yaXR5IGFuZCB0aGV5IHNob3VsZCBub3Qgc3VzcGVuZCBvbiBJL08sXG4gICAgLy8gc2luY2UgeW91IGhhdmUgdG8gd3JhcCBhbnl0aGluZyB0aGF0IG1pZ2h0IHN1c3BlbmQgaW5cbiAgICAvLyBTdXNwZW5zZS5cbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgZXZlbnRUaW1lID0gcmVxdWVzdEV2ZW50VGltZSgpO1xuICB2YXIgbGFuZSA9IFNlbGVjdGl2ZUh5ZHJhdGlvbkxhbmU7XG4gIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgbGFuZSwgZXZlbnRUaW1lKTtcbiAgbWFya1JldHJ5TGFuZUlmTm90SHlkcmF0ZWQoZmliZXIsIGxhbmUpO1xufVxuZnVuY3Rpb24gYXR0ZW1wdEh5ZHJhdGlvbkF0Q3VycmVudFByaW9yaXR5JDEoZmliZXIpIHtcbiAgaWYgKGZpYmVyLnRhZyAhPT0gU3VzcGVuc2VDb21wb25lbnQpIHtcbiAgICAvLyBXZSBpZ25vcmUgSG9zdFJvb3RzIGhlcmUgYmVjYXVzZSB3ZSBjYW4ndCBpbmNyZWFzZVxuICAgIC8vIHRoZWlyIHByaW9yaXR5IG90aGVyIHRoYW4gc3luY2hyb25vdXNseSBmbHVzaCBpdC5cbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgZXZlbnRUaW1lID0gcmVxdWVzdEV2ZW50VGltZSgpO1xuICB2YXIgbGFuZSA9IHJlcXVlc3RVcGRhdGVMYW5lKGZpYmVyKTtcbiAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBsYW5lLCBldmVudFRpbWUpO1xuICBtYXJrUmV0cnlMYW5lSWZOb3RIeWRyYXRlZChmaWJlciwgbGFuZSk7XG59XG5mdW5jdGlvbiBydW5XaXRoUHJpb3JpdHkkMihwcmlvcml0eSwgZm4pIHtcblxuICB0cnkge1xuICAgIHNldEN1cnJlbnRVcGRhdGVMYW5lUHJpb3JpdHkocHJpb3JpdHkpO1xuICAgIHJldHVybiBmbigpO1xuICB9IGZpbmFsbHkge1xuICB9XG59XG5mdW5jdGlvbiBmaW5kSG9zdEluc3RhbmNlV2l0aE5vUG9ydGFscyhmaWJlcikge1xuICB2YXIgaG9zdEZpYmVyID0gZmluZEN1cnJlbnRIb3N0RmliZXJXaXRoTm9Qb3J0YWxzKGZpYmVyKTtcblxuICBpZiAoaG9zdEZpYmVyID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoaG9zdEZpYmVyLnRhZyA9PT0gRnVuZGFtZW50YWxDb21wb25lbnQpIHtcbiAgICByZXR1cm4gaG9zdEZpYmVyLnN0YXRlTm9kZS5pbnN0YW5jZTtcbiAgfVxuXG4gIHJldHVybiBob3N0RmliZXIuc3RhdGVOb2RlO1xufVxuXG52YXIgc2hvdWxkU3VzcGVuZEltcGwgPSBmdW5jdGlvbiAoZmliZXIpIHtcbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuZnVuY3Rpb24gc2hvdWxkU3VzcGVuZChmaWJlcikge1xuICByZXR1cm4gc2hvdWxkU3VzcGVuZEltcGwoZmliZXIpO1xufVxudmFyIG92ZXJyaWRlSG9va1N0YXRlID0gbnVsbDtcbnZhciBvdmVycmlkZUhvb2tTdGF0ZURlbGV0ZVBhdGggPSBudWxsO1xudmFyIG92ZXJyaWRlSG9va1N0YXRlUmVuYW1lUGF0aCA9IG51bGw7XG52YXIgb3ZlcnJpZGVQcm9wcyA9IG51bGw7XG52YXIgb3ZlcnJpZGVQcm9wc0RlbGV0ZVBhdGggPSBudWxsO1xudmFyIG92ZXJyaWRlUHJvcHNSZW5hbWVQYXRoID0gbnVsbDtcbnZhciBzY2hlZHVsZVVwZGF0ZSA9IG51bGw7XG52YXIgc2V0U3VzcGVuc2VIYW5kbGVyID0gbnVsbDtcblxue1xuICB2YXIgY29weVdpdGhEZWxldGVJbXBsID0gZnVuY3Rpb24gKG9iaiwgcGF0aCwgaW5kZXgpIHtcbiAgICB2YXIga2V5ID0gcGF0aFtpbmRleF07XG4gICAgdmFyIHVwZGF0ZWQgPSBBcnJheS5pc0FycmF5KG9iaikgPyBvYmouc2xpY2UoKSA6IF9hc3NpZ24oe30sIG9iaik7XG5cbiAgICBpZiAoaW5kZXggKyAxID09PSBwYXRoLmxlbmd0aCkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodXBkYXRlZCkpIHtcbiAgICAgICAgdXBkYXRlZC5zcGxpY2Uoa2V5LCAxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGV0ZSB1cGRhdGVkW2tleV07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB1cGRhdGVkO1xuICAgIH0gLy8gJEZsb3dGaXhNZSBudW1iZXIgb3Igc3RyaW5nIGlzIGZpbmUgaGVyZVxuXG5cbiAgICB1cGRhdGVkW2tleV0gPSBjb3B5V2l0aERlbGV0ZUltcGwob2JqW2tleV0sIHBhdGgsIGluZGV4ICsgMSk7XG4gICAgcmV0dXJuIHVwZGF0ZWQ7XG4gIH07XG5cbiAgdmFyIGNvcHlXaXRoRGVsZXRlID0gZnVuY3Rpb24gKG9iaiwgcGF0aCkge1xuICAgIHJldHVybiBjb3B5V2l0aERlbGV0ZUltcGwob2JqLCBwYXRoLCAwKTtcbiAgfTtcblxuICB2YXIgY29weVdpdGhSZW5hbWVJbXBsID0gZnVuY3Rpb24gKG9iaiwgb2xkUGF0aCwgbmV3UGF0aCwgaW5kZXgpIHtcbiAgICB2YXIgb2xkS2V5ID0gb2xkUGF0aFtpbmRleF07XG4gICAgdmFyIHVwZGF0ZWQgPSBBcnJheS5pc0FycmF5KG9iaikgPyBvYmouc2xpY2UoKSA6IF9hc3NpZ24oe30sIG9iaik7XG5cbiAgICBpZiAoaW5kZXggKyAxID09PSBvbGRQYXRoLmxlbmd0aCkge1xuICAgICAgdmFyIG5ld0tleSA9IG5ld1BhdGhbaW5kZXhdOyAvLyAkRmxvd0ZpeE1lIG51bWJlciBvciBzdHJpbmcgaXMgZmluZSBoZXJlXG5cbiAgICAgIHVwZGF0ZWRbbmV3S2V5XSA9IHVwZGF0ZWRbb2xkS2V5XTtcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodXBkYXRlZCkpIHtcbiAgICAgICAgdXBkYXRlZC5zcGxpY2Uob2xkS2V5LCAxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGV0ZSB1cGRhdGVkW29sZEtleV07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vICRGbG93Rml4TWUgbnVtYmVyIG9yIHN0cmluZyBpcyBmaW5lIGhlcmVcbiAgICAgIHVwZGF0ZWRbb2xkS2V5XSA9IGNvcHlXaXRoUmVuYW1lSW1wbCggLy8gJEZsb3dGaXhNZSBudW1iZXIgb3Igc3RyaW5nIGlzIGZpbmUgaGVyZVxuICAgICAgb2JqW29sZEtleV0sIG9sZFBhdGgsIG5ld1BhdGgsIGluZGV4ICsgMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVwZGF0ZWQ7XG4gIH07XG5cbiAgdmFyIGNvcHlXaXRoUmVuYW1lID0gZnVuY3Rpb24gKG9iaiwgb2xkUGF0aCwgbmV3UGF0aCkge1xuICAgIGlmIChvbGRQYXRoLmxlbmd0aCAhPT0gbmV3UGF0aC5sZW5ndGgpIHtcbiAgICAgIHdhcm4oJ2NvcHlXaXRoUmVuYW1lKCkgZXhwZWN0cyBwYXRocyBvZiB0aGUgc2FtZSBsZW5ndGgnKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5ld1BhdGgubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgIGlmIChvbGRQYXRoW2ldICE9PSBuZXdQYXRoW2ldKSB7XG4gICAgICAgICAgd2FybignY29weVdpdGhSZW5hbWUoKSBleHBlY3RzIHBhdGhzIHRvIGJlIHRoZSBzYW1lIGV4Y2VwdCBmb3IgdGhlIGRlZXBlc3Qga2V5Jyk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY29weVdpdGhSZW5hbWVJbXBsKG9iaiwgb2xkUGF0aCwgbmV3UGF0aCwgMCk7XG4gIH07XG5cbiAgdmFyIGNvcHlXaXRoU2V0SW1wbCA9IGZ1bmN0aW9uIChvYmosIHBhdGgsIGluZGV4LCB2YWx1ZSkge1xuICAgIGlmIChpbmRleCA+PSBwYXRoLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHZhciBrZXkgPSBwYXRoW2luZGV4XTtcbiAgICB2YXIgdXBkYXRlZCA9IEFycmF5LmlzQXJyYXkob2JqKSA/IG9iai5zbGljZSgpIDogX2Fzc2lnbih7fSwgb2JqKTsgLy8gJEZsb3dGaXhNZSBudW1iZXIgb3Igc3RyaW5nIGlzIGZpbmUgaGVyZVxuXG4gICAgdXBkYXRlZFtrZXldID0gY29weVdpdGhTZXRJbXBsKG9ialtrZXldLCBwYXRoLCBpbmRleCArIDEsIHZhbHVlKTtcbiAgICByZXR1cm4gdXBkYXRlZDtcbiAgfTtcblxuICB2YXIgY29weVdpdGhTZXQgPSBmdW5jdGlvbiAob2JqLCBwYXRoLCB2YWx1ZSkge1xuICAgIHJldHVybiBjb3B5V2l0aFNldEltcGwob2JqLCBwYXRoLCAwLCB2YWx1ZSk7XG4gIH07XG5cbiAgdmFyIGZpbmRIb29rID0gZnVuY3Rpb24gKGZpYmVyLCBpZCkge1xuICAgIC8vIEZvciBub3csIHRoZSBcImlkXCIgb2Ygc3RhdGVmdWwgaG9va3MgaXMganVzdCB0aGUgc3RhdGVmdWwgaG9vayBpbmRleC5cbiAgICAvLyBUaGlzIG1heSBjaGFuZ2UgaW4gdGhlIGZ1dHVyZSB3aXRoIGUuZy4gbmVzdGVkIGhvb2tzLlxuICAgIHZhciBjdXJyZW50SG9vayA9IGZpYmVyLm1lbW9pemVkU3RhdGU7XG5cbiAgICB3aGlsZSAoY3VycmVudEhvb2sgIT09IG51bGwgJiYgaWQgPiAwKSB7XG4gICAgICBjdXJyZW50SG9vayA9IGN1cnJlbnRIb29rLm5leHQ7XG4gICAgICBpZC0tO1xuICAgIH1cblxuICAgIHJldHVybiBjdXJyZW50SG9vaztcbiAgfTsgLy8gU3VwcG9ydCBEZXZUb29scyBlZGl0YWJsZSB2YWx1ZXMgZm9yIHVzZVN0YXRlIGFuZCB1c2VSZWR1Y2VyLlxuXG5cbiAgb3ZlcnJpZGVIb29rU3RhdGUgPSBmdW5jdGlvbiAoZmliZXIsIGlkLCBwYXRoLCB2YWx1ZSkge1xuICAgIHZhciBob29rID0gZmluZEhvb2soZmliZXIsIGlkKTtcblxuICAgIGlmIChob29rICE9PSBudWxsKSB7XG4gICAgICB2YXIgbmV3U3RhdGUgPSBjb3B5V2l0aFNldChob29rLm1lbW9pemVkU3RhdGUsIHBhdGgsIHZhbHVlKTtcbiAgICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IG5ld1N0YXRlO1xuICAgICAgaG9vay5iYXNlU3RhdGUgPSBuZXdTdGF0ZTsgLy8gV2UgYXJlbid0IGFjdHVhbGx5IGFkZGluZyBhbiB1cGRhdGUgdG8gdGhlIHF1ZXVlLFxuICAgICAgLy8gYmVjYXVzZSB0aGVyZSBpcyBubyB1cGRhdGUgd2UgY2FuIGFkZCBmb3IgdXNlUmVkdWNlciBob29rcyB0aGF0IHdvbid0IHRyaWdnZXIgYW4gZXJyb3IuXG4gICAgICAvLyAoVGhlcmUncyBubyBhcHByb3ByaWF0ZSBhY3Rpb24gdHlwZSBmb3IgRGV2VG9vbHMgb3ZlcnJpZGVzLilcbiAgICAgIC8vIEFzIGEgcmVzdWx0IHRob3VnaCwgUmVhY3Qgd2lsbCBzZWUgdGhlIHNjaGVkdWxlZCB1cGRhdGUgYXMgYSBub29wIGFuZCBiYWlsb3V0LlxuICAgICAgLy8gU2hhbGxvdyBjbG9uaW5nIHByb3BzIHdvcmtzIGFzIGEgd29ya2Fyb3VuZCBmb3Igbm93IHRvIGJ5cGFzcyB0aGUgYmFpbG91dCBjaGVjay5cblxuICAgICAgZmliZXIubWVtb2l6ZWRQcm9wcyA9IF9hc3NpZ24oe30sIGZpYmVyLm1lbW9pemVkUHJvcHMpO1xuICAgICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBTeW5jTGFuZSwgTm9UaW1lc3RhbXApO1xuICAgIH1cbiAgfTtcblxuICBvdmVycmlkZUhvb2tTdGF0ZURlbGV0ZVBhdGggPSBmdW5jdGlvbiAoZmliZXIsIGlkLCBwYXRoKSB7XG4gICAgdmFyIGhvb2sgPSBmaW5kSG9vayhmaWJlciwgaWQpO1xuXG4gICAgaWYgKGhvb2sgIT09IG51bGwpIHtcbiAgICAgIHZhciBuZXdTdGF0ZSA9IGNvcHlXaXRoRGVsZXRlKGhvb2subWVtb2l6ZWRTdGF0ZSwgcGF0aCk7XG4gICAgICBob29rLm1lbW9pemVkU3RhdGUgPSBuZXdTdGF0ZTtcbiAgICAgIGhvb2suYmFzZVN0YXRlID0gbmV3U3RhdGU7IC8vIFdlIGFyZW4ndCBhY3R1YWxseSBhZGRpbmcgYW4gdXBkYXRlIHRvIHRoZSBxdWV1ZSxcbiAgICAgIC8vIGJlY2F1c2UgdGhlcmUgaXMgbm8gdXBkYXRlIHdlIGNhbiBhZGQgZm9yIHVzZVJlZHVjZXIgaG9va3MgdGhhdCB3b24ndCB0cmlnZ2VyIGFuIGVycm9yLlxuICAgICAgLy8gKFRoZXJlJ3Mgbm8gYXBwcm9wcmlhdGUgYWN0aW9uIHR5cGUgZm9yIERldlRvb2xzIG92ZXJyaWRlcy4pXG4gICAgICAvLyBBcyBhIHJlc3VsdCB0aG91Z2gsIFJlYWN0IHdpbGwgc2VlIHRoZSBzY2hlZHVsZWQgdXBkYXRlIGFzIGEgbm9vcCBhbmQgYmFpbG91dC5cbiAgICAgIC8vIFNoYWxsb3cgY2xvbmluZyBwcm9wcyB3b3JrcyBhcyBhIHdvcmthcm91bmQgZm9yIG5vdyB0byBieXBhc3MgdGhlIGJhaWxvdXQgY2hlY2suXG5cbiAgICAgIGZpYmVyLm1lbW9pemVkUHJvcHMgPSBfYXNzaWduKHt9LCBmaWJlci5tZW1vaXplZFByb3BzKTtcbiAgICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgU3luY0xhbmUsIE5vVGltZXN0YW1wKTtcbiAgICB9XG4gIH07XG5cbiAgb3ZlcnJpZGVIb29rU3RhdGVSZW5hbWVQYXRoID0gZnVuY3Rpb24gKGZpYmVyLCBpZCwgb2xkUGF0aCwgbmV3UGF0aCkge1xuICAgIHZhciBob29rID0gZmluZEhvb2soZmliZXIsIGlkKTtcblxuICAgIGlmIChob29rICE9PSBudWxsKSB7XG4gICAgICB2YXIgbmV3U3RhdGUgPSBjb3B5V2l0aFJlbmFtZShob29rLm1lbW9pemVkU3RhdGUsIG9sZFBhdGgsIG5ld1BhdGgpO1xuICAgICAgaG9vay5tZW1vaXplZFN0YXRlID0gbmV3U3RhdGU7XG4gICAgICBob29rLmJhc2VTdGF0ZSA9IG5ld1N0YXRlOyAvLyBXZSBhcmVuJ3QgYWN0dWFsbHkgYWRkaW5nIGFuIHVwZGF0ZSB0byB0aGUgcXVldWUsXG4gICAgICAvLyBiZWNhdXNlIHRoZXJlIGlzIG5vIHVwZGF0ZSB3ZSBjYW4gYWRkIGZvciB1c2VSZWR1Y2VyIGhvb2tzIHRoYXQgd29uJ3QgdHJpZ2dlciBhbiBlcnJvci5cbiAgICAgIC8vIChUaGVyZSdzIG5vIGFwcHJvcHJpYXRlIGFjdGlvbiB0eXBlIGZvciBEZXZUb29scyBvdmVycmlkZXMuKVxuICAgICAgLy8gQXMgYSByZXN1bHQgdGhvdWdoLCBSZWFjdCB3aWxsIHNlZSB0aGUgc2NoZWR1bGVkIHVwZGF0ZSBhcyBhIG5vb3AgYW5kIGJhaWxvdXQuXG4gICAgICAvLyBTaGFsbG93IGNsb25pbmcgcHJvcHMgd29ya3MgYXMgYSB3b3JrYXJvdW5kIGZvciBub3cgdG8gYnlwYXNzIHRoZSBiYWlsb3V0IGNoZWNrLlxuXG4gICAgICBmaWJlci5tZW1vaXplZFByb3BzID0gX2Fzc2lnbih7fSwgZmliZXIubWVtb2l6ZWRQcm9wcyk7XG4gICAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIFN5bmNMYW5lLCBOb1RpbWVzdGFtcCk7XG4gICAgfVxuICB9OyAvLyBTdXBwb3J0IERldlRvb2xzIHByb3BzIGZvciBmdW5jdGlvbiBjb21wb25lbnRzLCBmb3J3YXJkUmVmLCBtZW1vLCBob3N0IGNvbXBvbmVudHMsIGV0Yy5cblxuXG4gIG92ZXJyaWRlUHJvcHMgPSBmdW5jdGlvbiAoZmliZXIsIHBhdGgsIHZhbHVlKSB7XG4gICAgZmliZXIucGVuZGluZ1Byb3BzID0gY29weVdpdGhTZXQoZmliZXIubWVtb2l6ZWRQcm9wcywgcGF0aCwgdmFsdWUpO1xuXG4gICAgaWYgKGZpYmVyLmFsdGVybmF0ZSkge1xuICAgICAgZmliZXIuYWx0ZXJuYXRlLnBlbmRpbmdQcm9wcyA9IGZpYmVyLnBlbmRpbmdQcm9wcztcbiAgICB9XG5cbiAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIFN5bmNMYW5lLCBOb1RpbWVzdGFtcCk7XG4gIH07XG5cbiAgb3ZlcnJpZGVQcm9wc0RlbGV0ZVBhdGggPSBmdW5jdGlvbiAoZmliZXIsIHBhdGgpIHtcbiAgICBmaWJlci5wZW5kaW5nUHJvcHMgPSBjb3B5V2l0aERlbGV0ZShmaWJlci5tZW1vaXplZFByb3BzLCBwYXRoKTtcblxuICAgIGlmIChmaWJlci5hbHRlcm5hdGUpIHtcbiAgICAgIGZpYmVyLmFsdGVybmF0ZS5wZW5kaW5nUHJvcHMgPSBmaWJlci5wZW5kaW5nUHJvcHM7XG4gICAgfVxuXG4gICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBTeW5jTGFuZSwgTm9UaW1lc3RhbXApO1xuICB9O1xuXG4gIG92ZXJyaWRlUHJvcHNSZW5hbWVQYXRoID0gZnVuY3Rpb24gKGZpYmVyLCBvbGRQYXRoLCBuZXdQYXRoKSB7XG4gICAgZmliZXIucGVuZGluZ1Byb3BzID0gY29weVdpdGhSZW5hbWUoZmliZXIubWVtb2l6ZWRQcm9wcywgb2xkUGF0aCwgbmV3UGF0aCk7XG5cbiAgICBpZiAoZmliZXIuYWx0ZXJuYXRlKSB7XG4gICAgICBmaWJlci5hbHRlcm5hdGUucGVuZGluZ1Byb3BzID0gZmliZXIucGVuZGluZ1Byb3BzO1xuICAgIH1cblxuICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgU3luY0xhbmUsIE5vVGltZXN0YW1wKTtcbiAgfTtcblxuICBzY2hlZHVsZVVwZGF0ZSA9IGZ1bmN0aW9uIChmaWJlcikge1xuICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgU3luY0xhbmUsIE5vVGltZXN0YW1wKTtcbiAgfTtcblxuICBzZXRTdXNwZW5zZUhhbmRsZXIgPSBmdW5jdGlvbiAobmV3U2hvdWxkU3VzcGVuZEltcGwpIHtcbiAgICBzaG91bGRTdXNwZW5kSW1wbCA9IG5ld1Nob3VsZFN1c3BlbmRJbXBsO1xuICB9O1xufVxuXG5mdW5jdGlvbiBmaW5kSG9zdEluc3RhbmNlQnlGaWJlcihmaWJlcikge1xuICB2YXIgaG9zdEZpYmVyID0gZmluZEN1cnJlbnRIb3N0RmliZXIoZmliZXIpO1xuXG4gIGlmIChob3N0RmliZXIgPT09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBob3N0RmliZXIuc3RhdGVOb2RlO1xufVxuXG5mdW5jdGlvbiBlbXB0eUZpbmRGaWJlckJ5SG9zdEluc3RhbmNlKGluc3RhbmNlKSB7XG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBnZXRDdXJyZW50RmliZXJGb3JEZXZUb29scygpIHtcbiAgcmV0dXJuIGN1cnJlbnQ7XG59XG5cbmZ1bmN0aW9uIGluamVjdEludG9EZXZUb29scyhkZXZUb29sc0NvbmZpZykge1xuICB2YXIgZmluZEZpYmVyQnlIb3N0SW5zdGFuY2UgPSBkZXZUb29sc0NvbmZpZy5maW5kRmliZXJCeUhvc3RJbnN0YW5jZTtcbiAgdmFyIFJlYWN0Q3VycmVudERpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnREaXNwYXRjaGVyO1xuICByZXR1cm4gaW5qZWN0SW50ZXJuYWxzKHtcbiAgICBidW5kbGVUeXBlOiBkZXZUb29sc0NvbmZpZy5idW5kbGVUeXBlLFxuICAgIHZlcnNpb246IGRldlRvb2xzQ29uZmlnLnZlcnNpb24sXG4gICAgcmVuZGVyZXJQYWNrYWdlTmFtZTogZGV2VG9vbHNDb25maWcucmVuZGVyZXJQYWNrYWdlTmFtZSxcbiAgICByZW5kZXJlckNvbmZpZzogZGV2VG9vbHNDb25maWcucmVuZGVyZXJDb25maWcsXG4gICAgb3ZlcnJpZGVIb29rU3RhdGU6IG92ZXJyaWRlSG9va1N0YXRlLFxuICAgIG92ZXJyaWRlSG9va1N0YXRlRGVsZXRlUGF0aDogb3ZlcnJpZGVIb29rU3RhdGVEZWxldGVQYXRoLFxuICAgIG92ZXJyaWRlSG9va1N0YXRlUmVuYW1lUGF0aDogb3ZlcnJpZGVIb29rU3RhdGVSZW5hbWVQYXRoLFxuICAgIG92ZXJyaWRlUHJvcHM6IG92ZXJyaWRlUHJvcHMsXG4gICAgb3ZlcnJpZGVQcm9wc0RlbGV0ZVBhdGg6IG92ZXJyaWRlUHJvcHNEZWxldGVQYXRoLFxuICAgIG92ZXJyaWRlUHJvcHNSZW5hbWVQYXRoOiBvdmVycmlkZVByb3BzUmVuYW1lUGF0aCxcbiAgICBzZXRTdXNwZW5zZUhhbmRsZXI6IHNldFN1c3BlbnNlSGFuZGxlcixcbiAgICBzY2hlZHVsZVVwZGF0ZTogc2NoZWR1bGVVcGRhdGUsXG4gICAgY3VycmVudERpc3BhdGNoZXJSZWY6IFJlYWN0Q3VycmVudERpc3BhdGNoZXIsXG4gICAgZmluZEhvc3RJbnN0YW5jZUJ5RmliZXI6IGZpbmRIb3N0SW5zdGFuY2VCeUZpYmVyLFxuICAgIGZpbmRGaWJlckJ5SG9zdEluc3RhbmNlOiBmaW5kRmliZXJCeUhvc3RJbnN0YW5jZSB8fCBlbXB0eUZpbmRGaWJlckJ5SG9zdEluc3RhbmNlLFxuICAgIC8vIFJlYWN0IFJlZnJlc2hcbiAgICBmaW5kSG9zdEluc3RhbmNlc0ZvclJlZnJlc2g6ICBmaW5kSG9zdEluc3RhbmNlc0ZvclJlZnJlc2ggLFxuICAgIHNjaGVkdWxlUmVmcmVzaDogIHNjaGVkdWxlUmVmcmVzaCAsXG4gICAgc2NoZWR1bGVSb290OiAgc2NoZWR1bGVSb290ICxcbiAgICBzZXRSZWZyZXNoSGFuZGxlcjogIHNldFJlZnJlc2hIYW5kbGVyICxcbiAgICAvLyBFbmFibGVzIERldlRvb2xzIHRvIGFwcGVuZCBvd25lciBzdGFja3MgdG8gZXJyb3IgbWVzc2FnZXMgaW4gREVWIG1vZGUuXG4gICAgZ2V0Q3VycmVudEZpYmVyOiAgZ2V0Q3VycmVudEZpYmVyRm9yRGV2VG9vbHMgXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBSZWFjdERPTVJvb3QoY29udGFpbmVyLCBvcHRpb25zKSB7XG4gIHRoaXMuX2ludGVybmFsUm9vdCA9IGNyZWF0ZVJvb3RJbXBsKGNvbnRhaW5lciwgQ29uY3VycmVudFJvb3QsIG9wdGlvbnMpO1xufVxuXG5mdW5jdGlvbiBSZWFjdERPTUJsb2NraW5nUm9vdChjb250YWluZXIsIHRhZywgb3B0aW9ucykge1xuICB0aGlzLl9pbnRlcm5hbFJvb3QgPSBjcmVhdGVSb290SW1wbChjb250YWluZXIsIHRhZywgb3B0aW9ucyk7XG59XG5cblJlYWN0RE9NUm9vdC5wcm90b3R5cGUucmVuZGVyID0gUmVhY3RET01CbG9ja2luZ1Jvb3QucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChjaGlsZHJlbikge1xuICB2YXIgcm9vdCA9IHRoaXMuX2ludGVybmFsUm9vdDtcblxuICB7XG4gICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbMV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCdyZW5kZXIoLi4uKTogZG9lcyBub3Qgc3VwcG9ydCB0aGUgc2Vjb25kIGNhbGxiYWNrIGFyZ3VtZW50LiAnICsgJ1RvIGV4ZWN1dGUgYSBzaWRlIGVmZmVjdCBhZnRlciByZW5kZXJpbmcsIGRlY2xhcmUgaXQgaW4gYSBjb21wb25lbnQgYm9keSB3aXRoIHVzZUVmZmVjdCgpLicpO1xuICAgIH1cblxuICAgIHZhciBjb250YWluZXIgPSByb290LmNvbnRhaW5lckluZm87XG5cbiAgICBpZiAoY29udGFpbmVyLm5vZGVUeXBlICE9PSBDT01NRU5UX05PREUpIHtcbiAgICAgIHZhciBob3N0SW5zdGFuY2UgPSBmaW5kSG9zdEluc3RhbmNlV2l0aE5vUG9ydGFscyhyb290LmN1cnJlbnQpO1xuXG4gICAgICBpZiAoaG9zdEluc3RhbmNlKSB7XG4gICAgICAgIGlmIChob3N0SW5zdGFuY2UucGFyZW50Tm9kZSAhPT0gY29udGFpbmVyKSB7XG4gICAgICAgICAgZXJyb3IoJ3JlbmRlciguLi4pOiBJdCBsb29rcyBsaWtlIHRoZSBSZWFjdC1yZW5kZXJlZCBjb250ZW50IG9mIHRoZSAnICsgJ3Jvb3QgY29udGFpbmVyIHdhcyByZW1vdmVkIHdpdGhvdXQgdXNpbmcgUmVhY3QuIFRoaXMgaXMgbm90ICcgKyAnc3VwcG9ydGVkIGFuZCB3aWxsIGNhdXNlIGVycm9ycy4gSW5zdGVhZCwgY2FsbCAnICsgXCJyb290LnVubW91bnQoKSB0byBlbXB0eSBhIHJvb3QncyBjb250YWluZXIuXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlQ29udGFpbmVyKGNoaWxkcmVuLCByb290LCBudWxsLCBudWxsKTtcbn07XG5cblJlYWN0RE9NUm9vdC5wcm90b3R5cGUudW5tb3VudCA9IFJlYWN0RE9NQmxvY2tpbmdSb290LnByb3RvdHlwZS51bm1vdW50ID0gZnVuY3Rpb24gKCkge1xuICB7XG4gICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbMF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCd1bm1vdW50KC4uLik6IGRvZXMgbm90IHN1cHBvcnQgYSBjYWxsYmFjayBhcmd1bWVudC4gJyArICdUbyBleGVjdXRlIGEgc2lkZSBlZmZlY3QgYWZ0ZXIgcmVuZGVyaW5nLCBkZWNsYXJlIGl0IGluIGEgY29tcG9uZW50IGJvZHkgd2l0aCB1c2VFZmZlY3QoKS4nKTtcbiAgICB9XG4gIH1cblxuICB2YXIgcm9vdCA9IHRoaXMuX2ludGVybmFsUm9vdDtcbiAgdmFyIGNvbnRhaW5lciA9IHJvb3QuY29udGFpbmVySW5mbztcbiAgdXBkYXRlQ29udGFpbmVyKG51bGwsIHJvb3QsIG51bGwsIGZ1bmN0aW9uICgpIHtcbiAgICB1bm1hcmtDb250YWluZXJBc1Jvb3QoY29udGFpbmVyKTtcbiAgfSk7XG59O1xuXG5mdW5jdGlvbiBjcmVhdGVSb290SW1wbChjb250YWluZXIsIHRhZywgb3B0aW9ucykge1xuICAvLyBUYWcgaXMgZWl0aGVyIExlZ2FjeVJvb3Qgb3IgQ29uY3VycmVudCBSb290XG4gIHZhciBoeWRyYXRlID0gb3B0aW9ucyAhPSBudWxsICYmIG9wdGlvbnMuaHlkcmF0ZSA9PT0gdHJ1ZTtcbiAgdmFyIGh5ZHJhdGlvbkNhbGxiYWNrcyA9IG9wdGlvbnMgIT0gbnVsbCAmJiBvcHRpb25zLmh5ZHJhdGlvbk9wdGlvbnMgfHwgbnVsbDtcbiAgdmFyIG11dGFibGVTb3VyY2VzID0gb3B0aW9ucyAhPSBudWxsICYmIG9wdGlvbnMuaHlkcmF0aW9uT3B0aW9ucyAhPSBudWxsICYmIG9wdGlvbnMuaHlkcmF0aW9uT3B0aW9ucy5tdXRhYmxlU291cmNlcyB8fCBudWxsO1xuICB2YXIgcm9vdCA9IGNyZWF0ZUNvbnRhaW5lcihjb250YWluZXIsIHRhZywgaHlkcmF0ZSk7XG4gIG1hcmtDb250YWluZXJBc1Jvb3Qocm9vdC5jdXJyZW50LCBjb250YWluZXIpO1xuICB2YXIgY29udGFpbmVyTm9kZVR5cGUgPSBjb250YWluZXIubm9kZVR5cGU7XG5cbiAge1xuICAgIHZhciByb290Q29udGFpbmVyRWxlbWVudCA9IGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFID8gY29udGFpbmVyLnBhcmVudE5vZGUgOiBjb250YWluZXI7XG4gICAgbGlzdGVuVG9BbGxTdXBwb3J0ZWRFdmVudHMocm9vdENvbnRhaW5lckVsZW1lbnQpO1xuICB9XG5cbiAgaWYgKG11dGFibGVTb3VyY2VzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtdXRhYmxlU291cmNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIG11dGFibGVTb3VyY2UgPSBtdXRhYmxlU291cmNlc1tpXTtcbiAgICAgIHJlZ2lzdGVyTXV0YWJsZVNvdXJjZUZvckh5ZHJhdGlvbihyb290LCBtdXRhYmxlU291cmNlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcm9vdDtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUxlZ2FjeVJvb3QoY29udGFpbmVyLCBvcHRpb25zKSB7XG4gIHJldHVybiBuZXcgUmVhY3RET01CbG9ja2luZ1Jvb3QoY29udGFpbmVyLCBMZWdhY3lSb290LCBvcHRpb25zKTtcbn1cbmZ1bmN0aW9uIGlzVmFsaWRDb250YWluZXIobm9kZSkge1xuICByZXR1cm4gISEobm9kZSAmJiAobm9kZS5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFIHx8IG5vZGUubm9kZVR5cGUgPT09IERPQ1VNRU5UX05PREUgfHwgbm9kZS5ub2RlVHlwZSA9PT0gRE9DVU1FTlRfRlJBR01FTlRfTk9ERSB8fCBub2RlLm5vZGVUeXBlID09PSBDT01NRU5UX05PREUgJiYgbm9kZS5ub2RlVmFsdWUgPT09ICcgcmVhY3QtbW91bnQtcG9pbnQtdW5zdGFibGUgJykpO1xufVxuXG52YXIgUmVhY3RDdXJyZW50T3duZXIkMyA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudE93bmVyO1xudmFyIHRvcExldmVsVXBkYXRlV2FybmluZ3M7XG52YXIgd2FybmVkQWJvdXRIeWRyYXRlQVBJID0gZmFsc2U7XG5cbntcbiAgdG9wTGV2ZWxVcGRhdGVXYXJuaW5ncyA9IGZ1bmN0aW9uIChjb250YWluZXIpIHtcbiAgICBpZiAoY29udGFpbmVyLl9yZWFjdFJvb3RDb250YWluZXIgJiYgY29udGFpbmVyLm5vZGVUeXBlICE9PSBDT01NRU5UX05PREUpIHtcbiAgICAgIHZhciBob3N0SW5zdGFuY2UgPSBmaW5kSG9zdEluc3RhbmNlV2l0aE5vUG9ydGFscyhjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lci5faW50ZXJuYWxSb290LmN1cnJlbnQpO1xuXG4gICAgICBpZiAoaG9zdEluc3RhbmNlKSB7XG4gICAgICAgIGlmIChob3N0SW5zdGFuY2UucGFyZW50Tm9kZSAhPT0gY29udGFpbmVyKSB7XG4gICAgICAgICAgZXJyb3IoJ3JlbmRlciguLi4pOiBJdCBsb29rcyBsaWtlIHRoZSBSZWFjdC1yZW5kZXJlZCBjb250ZW50IG9mIHRoaXMgJyArICdjb250YWluZXIgd2FzIHJlbW92ZWQgd2l0aG91dCB1c2luZyBSZWFjdC4gVGhpcyBpcyBub3QgJyArICdzdXBwb3J0ZWQgYW5kIHdpbGwgY2F1c2UgZXJyb3JzLiBJbnN0ZWFkLCBjYWxsICcgKyAnUmVhY3RET00udW5tb3VudENvbXBvbmVudEF0Tm9kZSB0byBlbXB0eSBhIGNvbnRhaW5lci4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBpc1Jvb3RSZW5kZXJlZEJ5U29tZVJlYWN0ID0gISFjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lcjtcbiAgICB2YXIgcm9vdEVsID0gZ2V0UmVhY3RSb290RWxlbWVudEluQ29udGFpbmVyKGNvbnRhaW5lcik7XG4gICAgdmFyIGhhc05vblJvb3RSZWFjdENoaWxkID0gISEocm9vdEVsICYmIGdldEluc3RhbmNlRnJvbU5vZGUocm9vdEVsKSk7XG5cbiAgICBpZiAoaGFzTm9uUm9vdFJlYWN0Q2hpbGQgJiYgIWlzUm9vdFJlbmRlcmVkQnlTb21lUmVhY3QpIHtcbiAgICAgIGVycm9yKCdyZW5kZXIoLi4uKTogUmVwbGFjaW5nIFJlYWN0LXJlbmRlcmVkIGNoaWxkcmVuIHdpdGggYSBuZXcgcm9vdCAnICsgJ2NvbXBvbmVudC4gSWYgeW91IGludGVuZGVkIHRvIHVwZGF0ZSB0aGUgY2hpbGRyZW4gb2YgdGhpcyBub2RlLCAnICsgJ3lvdSBzaG91bGQgaW5zdGVhZCBoYXZlIHRoZSBleGlzdGluZyBjaGlsZHJlbiB1cGRhdGUgdGhlaXIgc3RhdGUgJyArICdhbmQgcmVuZGVyIHRoZSBuZXcgY29tcG9uZW50cyBpbnN0ZWFkIG9mIGNhbGxpbmcgUmVhY3RET00ucmVuZGVyLicpO1xuICAgIH1cblxuICAgIGlmIChjb250YWluZXIubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSAmJiBjb250YWluZXIudGFnTmFtZSAmJiBjb250YWluZXIudGFnTmFtZS50b1VwcGVyQ2FzZSgpID09PSAnQk9EWScpIHtcbiAgICAgIGVycm9yKCdyZW5kZXIoKTogUmVuZGVyaW5nIGNvbXBvbmVudHMgZGlyZWN0bHkgaW50byBkb2N1bWVudC5ib2R5IGlzICcgKyAnZGlzY291cmFnZWQsIHNpbmNlIGl0cyBjaGlsZHJlbiBhcmUgb2Z0ZW4gbWFuaXB1bGF0ZWQgYnkgdGhpcmQtcGFydHkgJyArICdzY3JpcHRzIGFuZCBicm93c2VyIGV4dGVuc2lvbnMuIFRoaXMgbWF5IGxlYWQgdG8gc3VidGxlICcgKyAncmVjb25jaWxpYXRpb24gaXNzdWVzLiBUcnkgcmVuZGVyaW5nIGludG8gYSBjb250YWluZXIgZWxlbWVudCBjcmVhdGVkICcgKyAnZm9yIHlvdXIgYXBwLicpO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0UmVhY3RSb290RWxlbWVudEluQ29udGFpbmVyKGNvbnRhaW5lcikge1xuICBpZiAoIWNvbnRhaW5lcikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gRE9DVU1FTlRfTk9ERSkge1xuICAgIHJldHVybiBjb250YWluZXIuZG9jdW1lbnRFbGVtZW50O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBjb250YWluZXIuZmlyc3RDaGlsZDtcbiAgfVxufVxuXG5mdW5jdGlvbiBzaG91bGRIeWRyYXRlRHVlVG9MZWdhY3lIZXVyaXN0aWMoY29udGFpbmVyKSB7XG4gIHZhciByb290RWxlbWVudCA9IGdldFJlYWN0Um9vdEVsZW1lbnRJbkNvbnRhaW5lcihjb250YWluZXIpO1xuICByZXR1cm4gISEocm9vdEVsZW1lbnQgJiYgcm9vdEVsZW1lbnQubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSAmJiByb290RWxlbWVudC5oYXNBdHRyaWJ1dGUoUk9PVF9BVFRSSUJVVEVfTkFNRSkpO1xufVxuXG5mdW5jdGlvbiBsZWdhY3lDcmVhdGVSb290RnJvbURPTUNvbnRhaW5lcihjb250YWluZXIsIGZvcmNlSHlkcmF0ZSkge1xuICB2YXIgc2hvdWxkSHlkcmF0ZSA9IGZvcmNlSHlkcmF0ZSB8fCBzaG91bGRIeWRyYXRlRHVlVG9MZWdhY3lIZXVyaXN0aWMoY29udGFpbmVyKTsgLy8gRmlyc3QgY2xlYXIgYW55IGV4aXN0aW5nIGNvbnRlbnQuXG5cbiAgaWYgKCFzaG91bGRIeWRyYXRlKSB7XG4gICAgdmFyIHdhcm5lZCA9IGZhbHNlO1xuICAgIHZhciByb290U2libGluZztcblxuICAgIHdoaWxlIChyb290U2libGluZyA9IGNvbnRhaW5lci5sYXN0Q2hpbGQpIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKCF3YXJuZWQgJiYgcm9vdFNpYmxpbmcubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSAmJiByb290U2libGluZy5oYXNBdHRyaWJ1dGUoUk9PVF9BVFRSSUJVVEVfTkFNRSkpIHtcbiAgICAgICAgICB3YXJuZWQgPSB0cnVlO1xuXG4gICAgICAgICAgZXJyb3IoJ3JlbmRlcigpOiBUYXJnZXQgbm9kZSBoYXMgbWFya3VwIHJlbmRlcmVkIGJ5IFJlYWN0LCBidXQgdGhlcmUgJyArICdhcmUgdW5yZWxhdGVkIG5vZGVzIGFzIHdlbGwuIFRoaXMgaXMgbW9zdCBjb21tb25seSBjYXVzZWQgYnkgJyArICd3aGl0ZS1zcGFjZSBpbnNlcnRlZCBhcm91bmQgc2VydmVyLXJlbmRlcmVkIG1hcmt1cC4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb250YWluZXIucmVtb3ZlQ2hpbGQocm9vdFNpYmxpbmcpO1xuICAgIH1cbiAgfVxuXG4gIHtcbiAgICBpZiAoc2hvdWxkSHlkcmF0ZSAmJiAhZm9yY2VIeWRyYXRlICYmICF3YXJuZWRBYm91dEh5ZHJhdGVBUEkpIHtcbiAgICAgIHdhcm5lZEFib3V0SHlkcmF0ZUFQSSA9IHRydWU7XG5cbiAgICAgIHdhcm4oJ3JlbmRlcigpOiBDYWxsaW5nIFJlYWN0RE9NLnJlbmRlcigpIHRvIGh5ZHJhdGUgc2VydmVyLXJlbmRlcmVkIG1hcmt1cCAnICsgJ3dpbGwgc3RvcCB3b3JraW5nIGluIFJlYWN0IHYxOC4gUmVwbGFjZSB0aGUgUmVhY3RET00ucmVuZGVyKCkgY2FsbCAnICsgJ3dpdGggUmVhY3RET00uaHlkcmF0ZSgpIGlmIHlvdSB3YW50IFJlYWN0IHRvIGF0dGFjaCB0byB0aGUgc2VydmVyIEhUTUwuJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNyZWF0ZUxlZ2FjeVJvb3QoY29udGFpbmVyLCBzaG91bGRIeWRyYXRlID8ge1xuICAgIGh5ZHJhdGU6IHRydWVcbiAgfSA6IHVuZGVmaW5lZCk7XG59XG5cbmZ1bmN0aW9uIHdhcm5PbkludmFsaWRDYWxsYmFjayQxKGNhbGxiYWNrLCBjYWxsZXJOYW1lKSB7XG4gIHtcbiAgICBpZiAoY2FsbGJhY2sgIT09IG51bGwgJiYgdHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignJXMoLi4uKTogRXhwZWN0ZWQgdGhlIGxhc3Qgb3B0aW9uYWwgYGNhbGxiYWNrYCBhcmd1bWVudCB0byBiZSBhICcgKyAnZnVuY3Rpb24uIEluc3RlYWQgcmVjZWl2ZWQ6ICVzLicsIGNhbGxlck5hbWUsIGNhbGxiYWNrKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbGVnYWN5UmVuZGVyU3VidHJlZUludG9Db250YWluZXIocGFyZW50Q29tcG9uZW50LCBjaGlsZHJlbiwgY29udGFpbmVyLCBmb3JjZUh5ZHJhdGUsIGNhbGxiYWNrKSB7XG4gIHtcbiAgICB0b3BMZXZlbFVwZGF0ZVdhcm5pbmdzKGNvbnRhaW5lcik7XG4gICAgd2Fybk9uSW52YWxpZENhbGxiYWNrJDEoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBjYWxsYmFjaywgJ3JlbmRlcicpO1xuICB9IC8vIFRPRE86IFdpdGhvdXQgYGFueWAgdHlwZSwgRmxvdyBzYXlzIFwiUHJvcGVydHkgY2Fubm90IGJlIGFjY2Vzc2VkIG9uIGFueVxuICAvLyBtZW1iZXIgb2YgaW50ZXJzZWN0aW9uIHR5cGUuXCIgV2h5eXl5eXkuXG5cblxuICB2YXIgcm9vdCA9IGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyO1xuICB2YXIgZmliZXJSb290O1xuXG4gIGlmICghcm9vdCkge1xuICAgIC8vIEluaXRpYWwgbW91bnRcbiAgICByb290ID0gY29udGFpbmVyLl9yZWFjdFJvb3RDb250YWluZXIgPSBsZWdhY3lDcmVhdGVSb290RnJvbURPTUNvbnRhaW5lcihjb250YWluZXIsIGZvcmNlSHlkcmF0ZSk7XG4gICAgZmliZXJSb290ID0gcm9vdC5faW50ZXJuYWxSb290O1xuXG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdmFyIG9yaWdpbmFsQ2FsbGJhY2sgPSBjYWxsYmFjaztcblxuICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IGdldFB1YmxpY1Jvb3RJbnN0YW5jZShmaWJlclJvb3QpO1xuICAgICAgICBvcmlnaW5hbENhbGxiYWNrLmNhbGwoaW5zdGFuY2UpO1xuICAgICAgfTtcbiAgICB9IC8vIEluaXRpYWwgbW91bnQgc2hvdWxkIG5vdCBiZSBiYXRjaGVkLlxuXG5cbiAgICB1bmJhdGNoZWRVcGRhdGVzKGZ1bmN0aW9uICgpIHtcbiAgICAgIHVwZGF0ZUNvbnRhaW5lcihjaGlsZHJlbiwgZmliZXJSb290LCBwYXJlbnRDb21wb25lbnQsIGNhbGxiYWNrKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBmaWJlclJvb3QgPSByb290Ll9pbnRlcm5hbFJvb3Q7XG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB2YXIgX29yaWdpbmFsQ2FsbGJhY2sgPSBjYWxsYmFjaztcblxuICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IGdldFB1YmxpY1Jvb3RJbnN0YW5jZShmaWJlclJvb3QpO1xuXG4gICAgICAgIF9vcmlnaW5hbENhbGxiYWNrLmNhbGwoaW5zdGFuY2UpO1xuICAgICAgfTtcbiAgICB9IC8vIFVwZGF0ZVxuXG5cbiAgICB1cGRhdGVDb250YWluZXIoY2hpbGRyZW4sIGZpYmVyUm9vdCwgcGFyZW50Q29tcG9uZW50LCBjYWxsYmFjayk7XG4gIH1cblxuICByZXR1cm4gZ2V0UHVibGljUm9vdEluc3RhbmNlKGZpYmVyUm9vdCk7XG59XG5cbmZ1bmN0aW9uIGZpbmRET01Ob2RlKGNvbXBvbmVudE9yRWxlbWVudCkge1xuICB7XG4gICAgdmFyIG93bmVyID0gUmVhY3RDdXJyZW50T3duZXIkMy5jdXJyZW50O1xuXG4gICAgaWYgKG93bmVyICE9PSBudWxsICYmIG93bmVyLnN0YXRlTm9kZSAhPT0gbnVsbCkge1xuICAgICAgdmFyIHdhcm5lZEFib3V0UmVmc0luUmVuZGVyID0gb3duZXIuc3RhdGVOb2RlLl93YXJuZWRBYm91dFJlZnNJblJlbmRlcjtcblxuICAgICAgaWYgKCF3YXJuZWRBYm91dFJlZnNJblJlbmRlcikge1xuICAgICAgICBlcnJvcignJXMgaXMgYWNjZXNzaW5nIGZpbmRET01Ob2RlIGluc2lkZSBpdHMgcmVuZGVyKCkuICcgKyAncmVuZGVyKCkgc2hvdWxkIGJlIGEgcHVyZSBmdW5jdGlvbiBvZiBwcm9wcyBhbmQgc3RhdGUuIEl0IHNob3VsZCAnICsgJ25ldmVyIGFjY2VzcyBzb21ldGhpbmcgdGhhdCByZXF1aXJlcyBzdGFsZSBkYXRhIGZyb20gdGhlIHByZXZpb3VzICcgKyAncmVuZGVyLCBzdWNoIGFzIHJlZnMuIE1vdmUgdGhpcyBsb2dpYyB0byBjb21wb25lbnREaWRNb3VudCBhbmQgJyArICdjb21wb25lbnREaWRVcGRhdGUgaW5zdGVhZC4nLCBnZXRDb21wb25lbnROYW1lKG93bmVyLnR5cGUpIHx8ICdBIGNvbXBvbmVudCcpO1xuICAgICAgfVxuXG4gICAgICBvd25lci5zdGF0ZU5vZGUuX3dhcm5lZEFib3V0UmVmc0luUmVuZGVyID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAoY29tcG9uZW50T3JFbGVtZW50ID09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChjb21wb25lbnRPckVsZW1lbnQubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSkge1xuICAgIHJldHVybiBjb21wb25lbnRPckVsZW1lbnQ7XG4gIH1cblxuICB7XG4gICAgcmV0dXJuIGZpbmRIb3N0SW5zdGFuY2VXaXRoV2FybmluZyhjb21wb25lbnRPckVsZW1lbnQsICdmaW5kRE9NTm9kZScpO1xuICB9XG59XG5mdW5jdGlvbiBoeWRyYXRlKGVsZW1lbnQsIGNvbnRhaW5lciwgY2FsbGJhY2spIHtcbiAgaWYgKCFpc1ZhbGlkQ29udGFpbmVyKGNvbnRhaW5lcikpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJUYXJnZXQgY29udGFpbmVyIGlzIG5vdCBhIERPTSBlbGVtZW50LlwiICk7XG4gICAgfVxuICB9XG5cbiAge1xuICAgIHZhciBpc01vZGVyblJvb3QgPSBpc0NvbnRhaW5lck1hcmtlZEFzUm9vdChjb250YWluZXIpICYmIGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyID09PSB1bmRlZmluZWQ7XG5cbiAgICBpZiAoaXNNb2Rlcm5Sb290KSB7XG4gICAgICBlcnJvcignWW91IGFyZSBjYWxsaW5nIFJlYWN0RE9NLmh5ZHJhdGUoKSBvbiBhIGNvbnRhaW5lciB0aGF0IHdhcyBwcmV2aW91c2x5ICcgKyAncGFzc2VkIHRvIFJlYWN0RE9NLmNyZWF0ZVJvb3QoKS4gVGhpcyBpcyBub3Qgc3VwcG9ydGVkLiAnICsgJ0RpZCB5b3UgbWVhbiB0byBjYWxsIGNyZWF0ZVJvb3QoY29udGFpbmVyLCB7aHlkcmF0ZTogdHJ1ZX0pLnJlbmRlcihlbGVtZW50KT8nKTtcbiAgICB9XG4gIH0gLy8gVE9ETzogdGhyb3cgb3Igd2FybiBpZiB3ZSBjb3VsZG4ndCBoeWRyYXRlP1xuXG5cbiAgcmV0dXJuIGxlZ2FjeVJlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyKG51bGwsIGVsZW1lbnQsIGNvbnRhaW5lciwgdHJ1ZSwgY2FsbGJhY2spO1xufVxuZnVuY3Rpb24gcmVuZGVyKGVsZW1lbnQsIGNvbnRhaW5lciwgY2FsbGJhY2spIHtcbiAgaWYgKCFpc1ZhbGlkQ29udGFpbmVyKGNvbnRhaW5lcikpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJUYXJnZXQgY29udGFpbmVyIGlzIG5vdCBhIERPTSBlbGVtZW50LlwiICk7XG4gICAgfVxuICB9XG5cbiAge1xuICAgIHZhciBpc01vZGVyblJvb3QgPSBpc0NvbnRhaW5lck1hcmtlZEFzUm9vdChjb250YWluZXIpICYmIGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyID09PSB1bmRlZmluZWQ7XG5cbiAgICBpZiAoaXNNb2Rlcm5Sb290KSB7XG4gICAgICBlcnJvcignWW91IGFyZSBjYWxsaW5nIFJlYWN0RE9NLnJlbmRlcigpIG9uIGEgY29udGFpbmVyIHRoYXQgd2FzIHByZXZpb3VzbHkgJyArICdwYXNzZWQgdG8gUmVhY3RET00uY3JlYXRlUm9vdCgpLiBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQuICcgKyAnRGlkIHlvdSBtZWFuIHRvIGNhbGwgcm9vdC5yZW5kZXIoZWxlbWVudCk/Jyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGxlZ2FjeVJlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyKG51bGwsIGVsZW1lbnQsIGNvbnRhaW5lciwgZmFsc2UsIGNhbGxiYWNrKTtcbn1cbmZ1bmN0aW9uIHVuc3RhYmxlX3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyKHBhcmVudENvbXBvbmVudCwgZWxlbWVudCwgY29udGFpbmVyTm9kZSwgY2FsbGJhY2spIHtcbiAgaWYgKCFpc1ZhbGlkQ29udGFpbmVyKGNvbnRhaW5lck5vZGUpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiVGFyZ2V0IGNvbnRhaW5lciBpcyBub3QgYSBET00gZWxlbWVudC5cIiApO1xuICAgIH1cbiAgfVxuXG4gIGlmICghKHBhcmVudENvbXBvbmVudCAhPSBudWxsICYmIGhhcyhwYXJlbnRDb21wb25lbnQpKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcInBhcmVudENvbXBvbmVudCBtdXN0IGJlIGEgdmFsaWQgUmVhY3QgQ29tcG9uZW50XCIgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbGVnYWN5UmVuZGVyU3VidHJlZUludG9Db250YWluZXIocGFyZW50Q29tcG9uZW50LCBlbGVtZW50LCBjb250YWluZXJOb2RlLCBmYWxzZSwgY2FsbGJhY2spO1xufVxuZnVuY3Rpb24gdW5tb3VudENvbXBvbmVudEF0Tm9kZShjb250YWluZXIpIHtcbiAgaWYgKCFpc1ZhbGlkQ29udGFpbmVyKGNvbnRhaW5lcikpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJ1bm1vdW50Q29tcG9uZW50QXROb2RlKC4uLik6IFRhcmdldCBjb250YWluZXIgaXMgbm90IGEgRE9NIGVsZW1lbnQuXCIgKTtcbiAgICB9XG4gIH1cblxuICB7XG4gICAgdmFyIGlzTW9kZXJuUm9vdCA9IGlzQ29udGFpbmVyTWFya2VkQXNSb290KGNvbnRhaW5lcikgJiYgY29udGFpbmVyLl9yZWFjdFJvb3RDb250YWluZXIgPT09IHVuZGVmaW5lZDtcblxuICAgIGlmIChpc01vZGVyblJvb3QpIHtcbiAgICAgIGVycm9yKCdZb3UgYXJlIGNhbGxpbmcgUmVhY3RET00udW5tb3VudENvbXBvbmVudEF0Tm9kZSgpIG9uIGEgY29udGFpbmVyIHRoYXQgd2FzIHByZXZpb3VzbHkgJyArICdwYXNzZWQgdG8gUmVhY3RET00uY3JlYXRlUm9vdCgpLiBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQuIERpZCB5b3UgbWVhbiB0byBjYWxsIHJvb3QudW5tb3VudCgpPycpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lcikge1xuICAgIHtcbiAgICAgIHZhciByb290RWwgPSBnZXRSZWFjdFJvb3RFbGVtZW50SW5Db250YWluZXIoY29udGFpbmVyKTtcbiAgICAgIHZhciByZW5kZXJlZEJ5RGlmZmVyZW50UmVhY3QgPSByb290RWwgJiYgIWdldEluc3RhbmNlRnJvbU5vZGUocm9vdEVsKTtcblxuICAgICAgaWYgKHJlbmRlcmVkQnlEaWZmZXJlbnRSZWFjdCkge1xuICAgICAgICBlcnJvcihcInVubW91bnRDb21wb25lbnRBdE5vZGUoKTogVGhlIG5vZGUgeW91J3JlIGF0dGVtcHRpbmcgdG8gdW5tb3VudCBcIiArICd3YXMgcmVuZGVyZWQgYnkgYW5vdGhlciBjb3B5IG9mIFJlYWN0LicpO1xuICAgICAgfVxuICAgIH0gLy8gVW5tb3VudCBzaG91bGQgbm90IGJlIGJhdGNoZWQuXG5cblxuICAgIHVuYmF0Y2hlZFVwZGF0ZXMoZnVuY3Rpb24gKCkge1xuICAgICAgbGVnYWN5UmVuZGVyU3VidHJlZUludG9Db250YWluZXIobnVsbCwgbnVsbCwgY29udGFpbmVyLCBmYWxzZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyAkRmxvd0ZpeE1lIFRoaXMgc2hvdWxkIHByb2JhYmx5IHVzZSBgZGVsZXRlIGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyYFxuICAgICAgICBjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lciA9IG51bGw7XG4gICAgICAgIHVubWFya0NvbnRhaW5lckFzUm9vdChjb250YWluZXIpO1xuICAgICAgfSk7XG4gICAgfSk7IC8vIElmIHlvdSBjYWxsIHVubW91bnRDb21wb25lbnRBdE5vZGUgdHdpY2UgaW4gcXVpY2sgc3VjY2Vzc2lvbiwgeW91J2xsXG4gICAgLy8gZ2V0IGB0cnVlYCB0d2ljZS4gVGhhdCdzIHByb2JhYmx5IGZpbmU/XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICB7XG4gICAgICB2YXIgX3Jvb3RFbCA9IGdldFJlYWN0Um9vdEVsZW1lbnRJbkNvbnRhaW5lcihjb250YWluZXIpO1xuXG4gICAgICB2YXIgaGFzTm9uUm9vdFJlYWN0Q2hpbGQgPSAhIShfcm9vdEVsICYmIGdldEluc3RhbmNlRnJvbU5vZGUoX3Jvb3RFbCkpOyAvLyBDaGVjayBpZiB0aGUgY29udGFpbmVyIGl0c2VsZiBpcyBhIFJlYWN0IHJvb3Qgbm9kZS5cblxuICAgICAgdmFyIGlzQ29udGFpbmVyUmVhY3RSb290ID0gY29udGFpbmVyLm5vZGVUeXBlID09PSBFTEVNRU5UX05PREUgJiYgaXNWYWxpZENvbnRhaW5lcihjb250YWluZXIucGFyZW50Tm9kZSkgJiYgISFjb250YWluZXIucGFyZW50Tm9kZS5fcmVhY3RSb290Q29udGFpbmVyO1xuXG4gICAgICBpZiAoaGFzTm9uUm9vdFJlYWN0Q2hpbGQpIHtcbiAgICAgICAgZXJyb3IoXCJ1bm1vdW50Q29tcG9uZW50QXROb2RlKCk6IFRoZSBub2RlIHlvdSdyZSBhdHRlbXB0aW5nIHRvIHVubW91bnQgXCIgKyAnd2FzIHJlbmRlcmVkIGJ5IFJlYWN0IGFuZCBpcyBub3QgYSB0b3AtbGV2ZWwgY29udGFpbmVyLiAlcycsIGlzQ29udGFpbmVyUmVhY3RSb290ID8gJ1lvdSBtYXkgaGF2ZSBhY2NpZGVudGFsbHkgcGFzc2VkIGluIGEgUmVhY3Qgcm9vdCBub2RlIGluc3RlYWQgJyArICdvZiBpdHMgY29udGFpbmVyLicgOiAnSW5zdGVhZCwgaGF2ZSB0aGUgcGFyZW50IGNvbXBvbmVudCB1cGRhdGUgaXRzIHN0YXRlIGFuZCAnICsgJ3JlcmVuZGVyIGluIG9yZGVyIHRvIHJlbW92ZSB0aGlzIGNvbXBvbmVudC4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuc2V0QXR0ZW1wdFVzZXJCbG9ja2luZ0h5ZHJhdGlvbihhdHRlbXB0VXNlckJsb2NraW5nSHlkcmF0aW9uJDEpO1xuc2V0QXR0ZW1wdENvbnRpbnVvdXNIeWRyYXRpb24oYXR0ZW1wdENvbnRpbnVvdXNIeWRyYXRpb24kMSk7XG5zZXRBdHRlbXB0SHlkcmF0aW9uQXRDdXJyZW50UHJpb3JpdHkoYXR0ZW1wdEh5ZHJhdGlvbkF0Q3VycmVudFByaW9yaXR5JDEpO1xuc2V0QXR0ZW1wdEh5ZHJhdGlvbkF0UHJpb3JpdHkocnVuV2l0aFByaW9yaXR5JDIpO1xudmFyIGRpZFdhcm5BYm91dFVuc3RhYmxlQ3JlYXRlUG9ydGFsID0gZmFsc2U7XG5cbntcbiAgaWYgKHR5cGVvZiBNYXAgIT09ICdmdW5jdGlvbicgfHwgLy8gJEZsb3dJc3N1ZSBGbG93IGluY29ycmVjdGx5IHRoaW5rcyBNYXAgaGFzIG5vIHByb3RvdHlwZVxuICBNYXAucHJvdG90eXBlID09IG51bGwgfHwgdHlwZW9mIE1hcC5wcm90b3R5cGUuZm9yRWFjaCAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgU2V0ICE9PSAnZnVuY3Rpb24nIHx8IC8vICRGbG93SXNzdWUgRmxvdyBpbmNvcnJlY3RseSB0aGlua3MgU2V0IGhhcyBubyBwcm90b3R5cGVcbiAgU2V0LnByb3RvdHlwZSA9PSBudWxsIHx8IHR5cGVvZiBTZXQucHJvdG90eXBlLmNsZWFyICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBTZXQucHJvdG90eXBlLmZvckVhY2ggIT09ICdmdW5jdGlvbicpIHtcbiAgICBlcnJvcignUmVhY3QgZGVwZW5kcyBvbiBNYXAgYW5kIFNldCBidWlsdC1pbiB0eXBlcy4gTWFrZSBzdXJlIHRoYXQgeW91IGxvYWQgYSAnICsgJ3BvbHlmaWxsIGluIG9sZGVyIGJyb3dzZXJzLiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvcmVhY3QtcG9seWZpbGxzJyk7XG4gIH1cbn1cblxuc2V0UmVzdG9yZUltcGxlbWVudGF0aW9uKHJlc3RvcmVDb250cm9sbGVkU3RhdGUkMyk7XG5zZXRCYXRjaGluZ0ltcGxlbWVudGF0aW9uKGJhdGNoZWRVcGRhdGVzJDEsIGRpc2NyZXRlVXBkYXRlcyQxLCBmbHVzaERpc2NyZXRlVXBkYXRlcywgYmF0Y2hlZEV2ZW50VXBkYXRlcyQxKTtcblxuZnVuY3Rpb24gY3JlYXRlUG9ydGFsJDEoY2hpbGRyZW4sIGNvbnRhaW5lcikge1xuICB2YXIga2V5ID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBudWxsO1xuXG4gIGlmICghaXNWYWxpZENvbnRhaW5lcihjb250YWluZXIpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiVGFyZ2V0IGNvbnRhaW5lciBpcyBub3QgYSBET00gZWxlbWVudC5cIiApO1xuICAgIH1cbiAgfSAvLyBUT0RPOiBwYXNzIFJlYWN0RE9NIHBvcnRhbCBpbXBsZW1lbnRhdGlvbiBhcyB0aGlyZCBhcmd1bWVudFxuICAvLyAkRmxvd0ZpeE1lIFRoZSBGbG93IHR5cGUgaXMgb3BhcXVlIGJ1dCB0aGVyZSdzIG5vIHdheSB0byBhY3R1YWxseSBjcmVhdGUgaXQuXG5cblxuICByZXR1cm4gY3JlYXRlUG9ydGFsKGNoaWxkcmVuLCBjb250YWluZXIsIG51bGwsIGtleSk7XG59XG5cbmZ1bmN0aW9uIHJlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyKHBhcmVudENvbXBvbmVudCwgZWxlbWVudCwgY29udGFpbmVyTm9kZSwgY2FsbGJhY2spIHtcblxuICByZXR1cm4gdW5zdGFibGVfcmVuZGVyU3VidHJlZUludG9Db250YWluZXIocGFyZW50Q29tcG9uZW50LCBlbGVtZW50LCBjb250YWluZXJOb2RlLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIHVuc3RhYmxlX2NyZWF0ZVBvcnRhbChjaGlsZHJlbiwgY29udGFpbmVyKSB7XG4gIHZhciBrZXkgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IG51bGw7XG5cbiAge1xuICAgIGlmICghZGlkV2FybkFib3V0VW5zdGFibGVDcmVhdGVQb3J0YWwpIHtcbiAgICAgIGRpZFdhcm5BYm91dFVuc3RhYmxlQ3JlYXRlUG9ydGFsID0gdHJ1ZTtcblxuICAgICAgd2FybignVGhlIFJlYWN0RE9NLnVuc3RhYmxlX2NyZWF0ZVBvcnRhbCgpIGFsaWFzIGhhcyBiZWVuIGRlcHJlY2F0ZWQsICcgKyAnYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBSZWFjdCAxOCsuIFVwZGF0ZSB5b3VyIGNvZGUgdG8gdXNlICcgKyAnUmVhY3RET00uY3JlYXRlUG9ydGFsKCkgaW5zdGVhZC4gSXQgaGFzIHRoZSBleGFjdCBzYW1lIEFQSSwgJyArICdidXQgd2l0aG91dCB0aGUgXCJ1bnN0YWJsZV9cIiBwcmVmaXguJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNyZWF0ZVBvcnRhbCQxKGNoaWxkcmVuLCBjb250YWluZXIsIGtleSk7XG59XG5cbnZhciBJbnRlcm5hbHMgPSB7XG4gIC8vIEtlZXAgaW4gc3luYyB3aXRoIFJlYWN0VGVzdFV0aWxzLmpzLCBhbmQgUmVhY3RUZXN0VXRpbHNBY3QuanMuXG4gIC8vIFRoaXMgaXMgYW4gYXJyYXkgZm9yIGJldHRlciBtaW5pZmljYXRpb24uXG4gIEV2ZW50czogW2dldEluc3RhbmNlRnJvbU5vZGUsIGdldE5vZGVGcm9tSW5zdGFuY2UsIGdldEZpYmVyQ3VycmVudFByb3BzRnJvbU5vZGUsIGVucXVldWVTdGF0ZVJlc3RvcmUsIHJlc3RvcmVTdGF0ZUlmTmVlZGVkLCBmbHVzaFBhc3NpdmVFZmZlY3RzLCAvLyBUT0RPOiBUaGlzIGlzIHJlbGF0ZWQgdG8gYGFjdGAsIG5vdCBldmVudHMuIE1vdmUgdG8gc2VwYXJhdGUga2V5P1xuICBJc1RoaXNSZW5kZXJlckFjdGluZ11cbn07XG52YXIgZm91bmREZXZUb29scyA9IGluamVjdEludG9EZXZUb29scyh7XG4gIGZpbmRGaWJlckJ5SG9zdEluc3RhbmNlOiBnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZSxcbiAgYnVuZGxlVHlwZTogIDEgLFxuICB2ZXJzaW9uOiBSZWFjdFZlcnNpb24sXG4gIHJlbmRlcmVyUGFja2FnZU5hbWU6ICdyZWFjdC1kb20nXG59KTtcblxue1xuICBpZiAoIWZvdW5kRGV2VG9vbHMgJiYgY2FuVXNlRE9NICYmIHdpbmRvdy50b3AgPT09IHdpbmRvdy5zZWxmKSB7XG4gICAgLy8gSWYgd2UncmUgaW4gQ2hyb21lIG9yIEZpcmVmb3gsIHByb3ZpZGUgYSBkb3dubG9hZCBsaW5rIGlmIG5vdCBpbnN0YWxsZWQuXG4gICAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignQ2hyb21lJykgPiAtMSAmJiBuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ0VkZ2UnKSA9PT0gLTEgfHwgbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdGaXJlZm94JykgPiAtMSkge1xuICAgICAgdmFyIHByb3RvY29sID0gd2luZG93LmxvY2F0aW9uLnByb3RvY29sOyAvLyBEb24ndCB3YXJuIGluIGV4b3RpYyBjYXNlcyBsaWtlIGNocm9tZS1leHRlbnNpb246Ly8uXG5cbiAgICAgIGlmICgvXihodHRwcz98ZmlsZSk6JC8udGVzdChwcm90b2NvbCkpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZ1xuICAgICAgICBjb25zb2xlLmluZm8oJyVjRG93bmxvYWQgdGhlIFJlYWN0IERldlRvb2xzICcgKyAnZm9yIGEgYmV0dGVyIGRldmVsb3BtZW50IGV4cGVyaWVuY2U6ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3JlYWN0LWRldnRvb2xzJyArIChwcm90b2NvbCA9PT0gJ2ZpbGU6JyA/ICdcXG5Zb3UgbWlnaHQgbmVlZCB0byB1c2UgYSBsb2NhbCBIVFRQIHNlcnZlciAoaW5zdGVhZCBvZiBmaWxlOi8vKTogJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvcmVhY3QtZGV2dG9vbHMtZmFxJyA6ICcnKSwgJ2ZvbnQtd2VpZ2h0OmJvbGQnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0cy5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRCA9IEludGVybmFscztcbmV4cG9ydHMuY3JlYXRlUG9ydGFsID0gY3JlYXRlUG9ydGFsJDE7XG5leHBvcnRzLmZpbmRET01Ob2RlID0gZmluZERPTU5vZGU7XG5leHBvcnRzLmZsdXNoU3luYyA9IGZsdXNoU3luYztcbmV4cG9ydHMuaHlkcmF0ZSA9IGh5ZHJhdGU7XG5leHBvcnRzLnJlbmRlciA9IHJlbmRlcjtcbmV4cG9ydHMudW5tb3VudENvbXBvbmVudEF0Tm9kZSA9IHVubW91bnRDb21wb25lbnRBdE5vZGU7XG5leHBvcnRzLnVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzID0gYmF0Y2hlZFVwZGF0ZXMkMTtcbmV4cG9ydHMudW5zdGFibGVfY3JlYXRlUG9ydGFsID0gdW5zdGFibGVfY3JlYXRlUG9ydGFsO1xuZXhwb3J0cy51bnN0YWJsZV9yZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lciA9IHJlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyO1xuZXhwb3J0cy52ZXJzaW9uID0gUmVhY3RWZXJzaW9uO1xuICB9KSgpO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gY2hlY2tEQ0UoKSB7XG4gIC8qIGdsb2JhbCBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gKi9cbiAgaWYgKFxuICAgIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gPT09ICd1bmRlZmluZWQnIHx8XG4gICAgdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5jaGVja0RDRSAhPT0gJ2Z1bmN0aW9uJ1xuICApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyBUaGlzIGJyYW5jaCBpcyB1bnJlYWNoYWJsZSBiZWNhdXNlIHRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWRcbiAgICAvLyBpbiBwcm9kdWN0aW9uLCBidXQgdGhlIGNvbmRpdGlvbiBpcyB0cnVlIG9ubHkgaW4gZGV2ZWxvcG1lbnQuXG4gICAgLy8gVGhlcmVmb3JlIGlmIHRoZSBicmFuY2ggaXMgc3RpbGwgaGVyZSwgZGVhZCBjb2RlIGVsaW1pbmF0aW9uIHdhc24ndFxuICAgIC8vIHByb3Blcmx5IGFwcGxpZWQuXG4gICAgLy8gRG9uJ3QgY2hhbmdlIHRoZSBtZXNzYWdlLiBSZWFjdCBEZXZUb29scyByZWxpZXMgb24gaXQuIEFsc28gbWFrZSBzdXJlXG4gICAgLy8gdGhpcyBtZXNzYWdlIGRvZXNuJ3Qgb2NjdXIgZWxzZXdoZXJlIGluIHRoaXMgZnVuY3Rpb24sIG9yIGl0IHdpbGwgY2F1c2VcbiAgICAvLyBhIGZhbHNlIHBvc2l0aXZlLlxuICAgIHRocm93IG5ldyBFcnJvcignXl9eJyk7XG4gIH1cbiAgdHJ5IHtcbiAgICAvLyBWZXJpZnkgdGhhdCB0aGUgY29kZSBhYm92ZSBoYXMgYmVlbiBkZWFkIGNvZGUgZWxpbWluYXRlZCAoRENFJ2QpLlxuICAgIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5jaGVja0RDRShjaGVja0RDRSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIERldlRvb2xzIHNob3VsZG4ndCBjcmFzaCBSZWFjdCwgbm8gbWF0dGVyIHdoYXQuXG4gICAgLy8gV2Ugc2hvdWxkIHN0aWxsIHJlcG9ydCBpbiBjYXNlIHdlIGJyZWFrIHRoaXMgY29kZS5cbiAgICBjb25zb2xlLmVycm9yKGVycik7XG4gIH1cbn1cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgLy8gRENFIGNoZWNrIHNob3VsZCBoYXBwZW4gYmVmb3JlIFJlYWN0RE9NIGJ1bmRsZSBleGVjdXRlcyBzbyB0aGF0XG4gIC8vIERldlRvb2xzIGNhbiByZXBvcnQgYmFkIG1pbmlmaWNhdGlvbiBkdXJpbmcgaW5qZWN0aW9uLlxuICBjaGVja0RDRSgpO1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWRvbS5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1kb20uZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsICIvKiogQGxpY2Vuc2UgUmVhY3QgdjE2LjEzLjFcbiAqIHJlYWN0LWlzLmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAoZnVuY3Rpb24oKSB7XG4ndXNlIHN0cmljdCc7XG5cbi8vIFRoZSBTeW1ib2wgdXNlZCB0byB0YWcgdGhlIFJlYWN0RWxlbWVudC1saWtlIHR5cGVzLiBJZiB0aGVyZSBpcyBubyBuYXRpdmUgU3ltYm9sXG4vLyBub3IgcG9seWZpbGwsIHRoZW4gYSBwbGFpbiBudW1iZXIgaXMgdXNlZCBmb3IgcGVyZm9ybWFuY2UuXG52YXIgaGFzU3ltYm9sID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuZm9yO1xudmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmVsZW1lbnQnKSA6IDB4ZWFjNztcbnZhciBSRUFDVF9QT1JUQUxfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnBvcnRhbCcpIDogMHhlYWNhO1xudmFyIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5mcmFnbWVudCcpIDogMHhlYWNiO1xudmFyIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5zdHJpY3RfbW9kZScpIDogMHhlYWNjO1xudmFyIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5wcm9maWxlcicpIDogMHhlYWQyO1xudmFyIFJFQUNUX1BST1ZJREVSX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5wcm92aWRlcicpIDogMHhlYWNkO1xudmFyIFJFQUNUX0NPTlRFWFRfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmNvbnRleHQnKSA6IDB4ZWFjZTsgLy8gVE9ETzogV2UgZG9uJ3QgdXNlIEFzeW5jTW9kZSBvciBDb25jdXJyZW50TW9kZSBhbnltb3JlLiBUaGV5IHdlcmUgdGVtcG9yYXJ5XG4vLyAodW5zdGFibGUpIEFQSXMgdGhhdCBoYXZlIGJlZW4gcmVtb3ZlZC4gQ2FuIHdlIHJlbW92ZSB0aGUgc3ltYm9scz9cblxudmFyIFJFQUNUX0FTWU5DX01PREVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmFzeW5jX21vZGUnKSA6IDB4ZWFjZjtcbnZhciBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmNvbmN1cnJlbnRfbW9kZScpIDogMHhlYWNmO1xudmFyIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5mb3J3YXJkX3JlZicpIDogMHhlYWQwO1xudmFyIFJFQUNUX1NVU1BFTlNFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5zdXNwZW5zZScpIDogMHhlYWQxO1xudmFyIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnN1c3BlbnNlX2xpc3QnKSA6IDB4ZWFkODtcbnZhciBSRUFDVF9NRU1PX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5tZW1vJykgOiAweGVhZDM7XG52YXIgUkVBQ1RfTEFaWV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QubGF6eScpIDogMHhlYWQ0O1xudmFyIFJFQUNUX0JMT0NLX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5ibG9jaycpIDogMHhlYWQ5O1xudmFyIFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5mdW5kYW1lbnRhbCcpIDogMHhlYWQ1O1xudmFyIFJFQUNUX1JFU1BPTkRFUl9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QucmVzcG9uZGVyJykgOiAweGVhZDY7XG52YXIgUkVBQ1RfU0NPUEVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnNjb3BlJykgOiAweGVhZDc7XG5cbmZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKSB7XG4gIHJldHVybiB0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicgfHwgLy8gTm90ZTogaXRzIHR5cGVvZiBtaWdodCBiZSBvdGhlciB0aGFuICdzeW1ib2wnIG9yICdudW1iZXInIGlmIGl0J3MgYSBwb2x5ZmlsbC5cbiAgdHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9QUk9GSUxFUl9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgfHwgdHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwgJiYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfUFJPVklERVJfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9DT05URVhUX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1JFU1BPTkRFUl9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1NDT1BFX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQkxPQ0tfVFlQRSk7XG59XG5cbmZ1bmN0aW9uIHR5cGVPZihvYmplY3QpIHtcbiAgaWYgKHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCkge1xuICAgIHZhciAkJHR5cGVvZiA9IG9iamVjdC4kJHR5cGVvZjtcblxuICAgIHN3aXRjaCAoJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICB2YXIgdHlwZSA9IG9iamVjdC50eXBlO1xuXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgIGNhc2UgUkVBQ1RfQVNZTkNfTU9ERV9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9GUkFHTUVOVF9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfUFJPRklMRVJfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1NUUklDVF9NT0RFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuIHR5cGU7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdmFyICQkdHlwZW9mVHlwZSA9IHR5cGUgJiYgdHlwZS4kJHR5cGVvZjtcblxuICAgICAgICAgICAgc3dpdGNoICgkJHR5cGVvZlR5cGUpIHtcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9DT05URVhUX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX1BST1ZJREVSX1RZUEU6XG4gICAgICAgICAgICAgICAgcmV0dXJuICQkdHlwZW9mVHlwZTtcblxuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiAkJHR5cGVvZjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgIHJldHVybiAkJHR5cGVvZjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufSAvLyBBc3luY01vZGUgaXMgZGVwcmVjYXRlZCBhbG9uZyB3aXRoIGlzQXN5bmNNb2RlXG5cbnZhciBBc3luY01vZGUgPSBSRUFDVF9BU1lOQ19NT0RFX1RZUEU7XG52YXIgQ29uY3VycmVudE1vZGUgPSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRTtcbnZhciBDb250ZXh0Q29uc3VtZXIgPSBSRUFDVF9DT05URVhUX1RZUEU7XG52YXIgQ29udGV4dFByb3ZpZGVyID0gUkVBQ1RfUFJPVklERVJfVFlQRTtcbnZhciBFbGVtZW50ID0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xudmFyIEZvcndhcmRSZWYgPSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFO1xudmFyIEZyYWdtZW50ID0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbnZhciBMYXp5ID0gUkVBQ1RfTEFaWV9UWVBFO1xudmFyIE1lbW8gPSBSRUFDVF9NRU1PX1RZUEU7XG52YXIgUG9ydGFsID0gUkVBQ1RfUE9SVEFMX1RZUEU7XG52YXIgUHJvZmlsZXIgPSBSRUFDVF9QUk9GSUxFUl9UWVBFO1xudmFyIFN0cmljdE1vZGUgPSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFO1xudmFyIFN1c3BlbnNlID0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbnZhciBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSA9IGZhbHNlOyAvLyBBc3luY01vZGUgc2hvdWxkIGJlIGRlcHJlY2F0ZWRcblxuZnVuY3Rpb24gaXNBc3luY01vZGUob2JqZWN0KSB7XG4gIHtcbiAgICBpZiAoIWhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlKSB7XG4gICAgICBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSA9IHRydWU7IC8vIFVzaW5nIGNvbnNvbGVbJ3dhcm4nXSB0byBldmFkZSBCYWJlbCBhbmQgRVNMaW50XG5cbiAgICAgIGNvbnNvbGVbJ3dhcm4nXSgnVGhlIFJlYWN0SXMuaXNBc3luY01vZGUoKSBhbGlhcyBoYXMgYmVlbiBkZXByZWNhdGVkLCAnICsgJ2FuZCB3aWxsIGJlIHJlbW92ZWQgaW4gUmVhY3QgMTcrLiBVcGRhdGUgeW91ciBjb2RlIHRvIHVzZSAnICsgJ1JlYWN0SXMuaXNDb25jdXJyZW50TW9kZSgpIGluc3RlYWQuIEl0IGhhcyB0aGUgZXhhY3Qgc2FtZSBBUEkuJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGlzQ29uY3VycmVudE1vZGUob2JqZWN0KSB8fCB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfQVNZTkNfTU9ERV9UWVBFO1xufVxuZnVuY3Rpb24gaXNDb25jdXJyZW50TW9kZShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzQ29udGV4dENvbnN1bWVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0NPTlRFWFRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzQ29udGV4dFByb3ZpZGVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BST1ZJREVSX1RZUEU7XG59XG5mdW5jdGlvbiBpc0VsZW1lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwgJiYgb2JqZWN0LiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEU7XG59XG5mdW5jdGlvbiBpc0ZvcndhcmRSZWYob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzRnJhZ21lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzTGF6eShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9MQVpZX1RZUEU7XG59XG5mdW5jdGlvbiBpc01lbW8ob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfTUVNT19UWVBFO1xufVxuZnVuY3Rpb24gaXNQb3J0YWwob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUE9SVEFMX1RZUEU7XG59XG5mdW5jdGlvbiBpc1Byb2ZpbGVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG59XG5mdW5jdGlvbiBpc1N0cmljdE1vZGUob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzU3VzcGVuc2Uob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbn1cblxuZXhwb3J0cy5Bc3luY01vZGUgPSBBc3luY01vZGU7XG5leHBvcnRzLkNvbmN1cnJlbnRNb2RlID0gQ29uY3VycmVudE1vZGU7XG5leHBvcnRzLkNvbnRleHRDb25zdW1lciA9IENvbnRleHRDb25zdW1lcjtcbmV4cG9ydHMuQ29udGV4dFByb3ZpZGVyID0gQ29udGV4dFByb3ZpZGVyO1xuZXhwb3J0cy5FbGVtZW50ID0gRWxlbWVudDtcbmV4cG9ydHMuRm9yd2FyZFJlZiA9IEZvcndhcmRSZWY7XG5leHBvcnRzLkZyYWdtZW50ID0gRnJhZ21lbnQ7XG5leHBvcnRzLkxhenkgPSBMYXp5O1xuZXhwb3J0cy5NZW1vID0gTWVtbztcbmV4cG9ydHMuUG9ydGFsID0gUG9ydGFsO1xuZXhwb3J0cy5Qcm9maWxlciA9IFByb2ZpbGVyO1xuZXhwb3J0cy5TdHJpY3RNb2RlID0gU3RyaWN0TW9kZTtcbmV4cG9ydHMuU3VzcGVuc2UgPSBTdXNwZW5zZTtcbmV4cG9ydHMuaXNBc3luY01vZGUgPSBpc0FzeW5jTW9kZTtcbmV4cG9ydHMuaXNDb25jdXJyZW50TW9kZSA9IGlzQ29uY3VycmVudE1vZGU7XG5leHBvcnRzLmlzQ29udGV4dENvbnN1bWVyID0gaXNDb250ZXh0Q29uc3VtZXI7XG5leHBvcnRzLmlzQ29udGV4dFByb3ZpZGVyID0gaXNDb250ZXh0UHJvdmlkZXI7XG5leHBvcnRzLmlzRWxlbWVudCA9IGlzRWxlbWVudDtcbmV4cG9ydHMuaXNGb3J3YXJkUmVmID0gaXNGb3J3YXJkUmVmO1xuZXhwb3J0cy5pc0ZyYWdtZW50ID0gaXNGcmFnbWVudDtcbmV4cG9ydHMuaXNMYXp5ID0gaXNMYXp5O1xuZXhwb3J0cy5pc01lbW8gPSBpc01lbW87XG5leHBvcnRzLmlzUG9ydGFsID0gaXNQb3J0YWw7XG5leHBvcnRzLmlzUHJvZmlsZXIgPSBpc1Byb2ZpbGVyO1xuZXhwb3J0cy5pc1N0cmljdE1vZGUgPSBpc1N0cmljdE1vZGU7XG5leHBvcnRzLmlzU3VzcGVuc2UgPSBpc1N1c3BlbnNlO1xuZXhwb3J0cy5pc1ZhbGlkRWxlbWVudFR5cGUgPSBpc1ZhbGlkRWxlbWVudFR5cGU7XG5leHBvcnRzLnR5cGVPZiA9IHR5cGVPZjtcbiAgfSkoKTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gJ1NFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEJztcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdFByb3BUeXBlc1NlY3JldDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IEZ1bmN0aW9uLmNhbGwuYmluZChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcbiIsICIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIHByaW50V2FybmluZyA9IGZ1bmN0aW9uKCkge307XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9IHJlcXVpcmUoJy4vbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0Jyk7XG4gIHZhciBsb2dnZWRUeXBlRmFpbHVyZXMgPSB7fTtcbiAgdmFyIGhhcyA9IHJlcXVpcmUoJy4vbGliL2hhcycpO1xuXG4gIHByaW50V2FybmluZyA9IGZ1bmN0aW9uKHRleHQpIHtcbiAgICB2YXIgbWVzc2FnZSA9ICdXYXJuaW5nOiAnICsgdGV4dDtcbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgLy8gLS0tIFdlbGNvbWUgdG8gZGVidWdnaW5nIFJlYWN0IC0tLVxuICAgICAgLy8gVGhpcyBlcnJvciB3YXMgdGhyb3duIGFzIGEgY29udmVuaWVuY2Ugc28gdGhhdCB5b3UgY2FuIHVzZSB0aGlzIHN0YWNrXG4gICAgICAvLyB0byBmaW5kIHRoZSBjYWxsc2l0ZSB0aGF0IGNhdXNlZCB0aGlzIHdhcm5pbmcgdG8gZmlyZS5cbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICB9IGNhdGNoICh4KSB7IC8qKi8gfVxuICB9O1xufVxuXG4vKipcbiAqIEFzc2VydCB0aGF0IHRoZSB2YWx1ZXMgbWF0Y2ggd2l0aCB0aGUgdHlwZSBzcGVjcy5cbiAqIEVycm9yIG1lc3NhZ2VzIGFyZSBtZW1vcml6ZWQgYW5kIHdpbGwgb25seSBiZSBzaG93biBvbmNlLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSB0eXBlU3BlY3MgTWFwIG9mIG5hbWUgdG8gYSBSZWFjdFByb3BUeXBlXG4gKiBAcGFyYW0ge29iamVjdH0gdmFsdWVzIFJ1bnRpbWUgdmFsdWVzIHRoYXQgbmVlZCB0byBiZSB0eXBlLWNoZWNrZWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBsb2NhdGlvbiBlLmcuIFwicHJvcFwiLCBcImNvbnRleHRcIiwgXCJjaGlsZCBjb250ZXh0XCJcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb21wb25lbnROYW1lIE5hbWUgb2YgdGhlIGNvbXBvbmVudCBmb3IgZXJyb3IgbWVzc2FnZXMuXG4gKiBAcGFyYW0gez9GdW5jdGlvbn0gZ2V0U3RhY2sgUmV0dXJucyB0aGUgY29tcG9uZW50IHN0YWNrLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gY2hlY2tQcm9wVHlwZXModHlwZVNwZWNzLCB2YWx1ZXMsIGxvY2F0aW9uLCBjb21wb25lbnROYW1lLCBnZXRTdGFjaykge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGZvciAodmFyIHR5cGVTcGVjTmFtZSBpbiB0eXBlU3BlY3MpIHtcbiAgICAgIGlmIChoYXModHlwZVNwZWNzLCB0eXBlU3BlY05hbWUpKSB7XG4gICAgICAgIHZhciBlcnJvcjtcbiAgICAgICAgLy8gUHJvcCB0eXBlIHZhbGlkYXRpb24gbWF5IHRocm93LiBJbiBjYXNlIHRoZXkgZG8sIHdlIGRvbid0IHdhbnQgdG9cbiAgICAgICAgLy8gZmFpbCB0aGUgcmVuZGVyIHBoYXNlIHdoZXJlIGl0IGRpZG4ndCBmYWlsIGJlZm9yZS4gU28gd2UgbG9nIGl0LlxuICAgICAgICAvLyBBZnRlciB0aGVzZSBoYXZlIGJlZW4gY2xlYW5lZCB1cCwgd2UnbGwgbGV0IHRoZW0gdGhyb3cuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBpbnRlbnRpb25hbGx5IGFuIGludmFyaWFudCB0aGF0IGdldHMgY2F1Z2h0LiBJdCdzIHRoZSBzYW1lXG4gICAgICAgICAgLy8gYmVoYXZpb3IgYXMgd2l0aG91dCB0aGlzIHN0YXRlbWVudCBleGNlcHQgd2l0aCBhIGJldHRlciBtZXNzYWdlLlxuICAgICAgICAgIGlmICh0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHZhciBlcnIgPSBFcnJvcihcbiAgICAgICAgICAgICAgKGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJykgKyAnOiAnICsgbG9jYXRpb24gKyAnIHR5cGUgYCcgKyB0eXBlU3BlY05hbWUgKyAnYCBpcyBpbnZhbGlkOyAnICtcbiAgICAgICAgICAgICAgJ2l0IG11c3QgYmUgYSBmdW5jdGlvbiwgdXN1YWxseSBmcm9tIHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZSwgYnV0IHJlY2VpdmVkIGAnICsgdHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdICsgJ2AuJyArXG4gICAgICAgICAgICAgICdUaGlzIG9mdGVuIGhhcHBlbnMgYmVjYXVzZSBvZiB0eXBvcyBzdWNoIGFzIGBQcm9wVHlwZXMuZnVuY3Rpb25gIGluc3RlYWQgb2YgYFByb3BUeXBlcy5mdW5jYC4nXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVycm9yID0gdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0odmFsdWVzLCB0eXBlU3BlY05hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBudWxsLCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgZXJyb3IgPSBleDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3IgJiYgIShlcnJvciBpbnN0YW5jZW9mIEVycm9yKSkge1xuICAgICAgICAgIHByaW50V2FybmluZyhcbiAgICAgICAgICAgIChjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycpICsgJzogdHlwZSBzcGVjaWZpY2F0aW9uIG9mICcgK1xuICAgICAgICAgICAgbG9jYXRpb24gKyAnIGAnICsgdHlwZVNwZWNOYW1lICsgJ2AgaXMgaW52YWxpZDsgdGhlIHR5cGUgY2hlY2tlciAnICtcbiAgICAgICAgICAgICdmdW5jdGlvbiBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gYEVycm9yYCBidXQgcmV0dXJuZWQgYSAnICsgdHlwZW9mIGVycm9yICsgJy4gJyArXG4gICAgICAgICAgICAnWW91IG1heSBoYXZlIGZvcmdvdHRlbiB0byBwYXNzIGFuIGFyZ3VtZW50IHRvIHRoZSB0eXBlIGNoZWNrZXIgJyArXG4gICAgICAgICAgICAnY3JlYXRvciAoYXJyYXlPZiwgaW5zdGFuY2VPZiwgb2JqZWN0T2YsIG9uZU9mLCBvbmVPZlR5cGUsIGFuZCAnICtcbiAgICAgICAgICAgICdzaGFwZSBhbGwgcmVxdWlyZSBhbiBhcmd1bWVudCkuJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgIShlcnJvci5tZXNzYWdlIGluIGxvZ2dlZFR5cGVGYWlsdXJlcykpIHtcbiAgICAgICAgICAvLyBPbmx5IG1vbml0b3IgdGhpcyBmYWlsdXJlIG9uY2UgYmVjYXVzZSB0aGVyZSB0ZW5kcyB0byBiZSBhIGxvdCBvZiB0aGVcbiAgICAgICAgICAvLyBzYW1lIGVycm9yLlxuICAgICAgICAgIGxvZ2dlZFR5cGVGYWlsdXJlc1tlcnJvci5tZXNzYWdlXSA9IHRydWU7XG5cbiAgICAgICAgICB2YXIgc3RhY2sgPSBnZXRTdGFjayA/IGdldFN0YWNrKCkgOiAnJztcblxuICAgICAgICAgIHByaW50V2FybmluZyhcbiAgICAgICAgICAgICdGYWlsZWQgJyArIGxvY2F0aW9uICsgJyB0eXBlOiAnICsgZXJyb3IubWVzc2FnZSArIChzdGFjayAhPSBudWxsID8gc3RhY2sgOiAnJylcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmVzZXRzIHdhcm5pbmcgY2FjaGUgd2hlbiB0ZXN0aW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNoZWNrUHJvcFR5cGVzLnJlc2V0V2FybmluZ0NhY2hlID0gZnVuY3Rpb24oKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgbG9nZ2VkVHlwZUZhaWx1cmVzID0ge307XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjaGVja1Byb3BUeXBlcztcbiIsICIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0SXMgPSByZXF1aXJlKCdyZWFjdC1pcycpO1xudmFyIGFzc2lnbiA9IHJlcXVpcmUoJ29iamVjdC1hc3NpZ24nKTtcblxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gcmVxdWlyZSgnLi9saWIvUmVhY3RQcm9wVHlwZXNTZWNyZXQnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL2xpYi9oYXMnKTtcbnZhciBjaGVja1Byb3BUeXBlcyA9IHJlcXVpcmUoJy4vY2hlY2tQcm9wVHlwZXMnKTtcblxudmFyIHByaW50V2FybmluZyA9IGZ1bmN0aW9uKCkge307XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHByaW50V2FybmluZyA9IGZ1bmN0aW9uKHRleHQpIHtcbiAgICB2YXIgbWVzc2FnZSA9ICdXYXJuaW5nOiAnICsgdGV4dDtcbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgLy8gLS0tIFdlbGNvbWUgdG8gZGVidWdnaW5nIFJlYWN0IC0tLVxuICAgICAgLy8gVGhpcyBlcnJvciB3YXMgdGhyb3duIGFzIGEgY29udmVuaWVuY2Ugc28gdGhhdCB5b3UgY2FuIHVzZSB0aGlzIHN0YWNrXG4gICAgICAvLyB0byBmaW5kIHRoZSBjYWxsc2l0ZSB0aGF0IGNhdXNlZCB0aGlzIHdhcm5pbmcgdG8gZmlyZS5cbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICB9IGNhdGNoICh4KSB7fVxuICB9O1xufVxuXG5mdW5jdGlvbiBlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsKCkge1xuICByZXR1cm4gbnVsbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpc1ZhbGlkRWxlbWVudCwgdGhyb3dPbkRpcmVjdEFjY2Vzcykge1xuICAvKiBnbG9iYWwgU3ltYm9sICovXG4gIHZhciBJVEVSQVRPUl9TWU1CT0wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5pdGVyYXRvcjtcbiAgdmFyIEZBVVhfSVRFUkFUT1JfU1lNQk9MID0gJ0BAaXRlcmF0b3InOyAvLyBCZWZvcmUgU3ltYm9sIHNwZWMuXG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGl0ZXJhdG9yIG1ldGhvZCBmdW5jdGlvbiBjb250YWluZWQgb24gdGhlIGl0ZXJhYmxlIG9iamVjdC5cbiAgICpcbiAgICogQmUgc3VyZSB0byBpbnZva2UgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIGl0ZXJhYmxlIGFzIGNvbnRleHQ6XG4gICAqXG4gICAqICAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4obXlJdGVyYWJsZSk7XG4gICAqICAgICBpZiAoaXRlcmF0b3JGbikge1xuICAgKiAgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwobXlJdGVyYWJsZSk7XG4gICAqICAgICAgIC4uLlxuICAgKiAgICAgfVxuICAgKlxuICAgKiBAcGFyYW0gez9vYmplY3R9IG1heWJlSXRlcmFibGVcbiAgICogQHJldHVybiB7P2Z1bmN0aW9ufVxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0SXRlcmF0b3JGbihtYXliZUl0ZXJhYmxlKSB7XG4gICAgdmFyIGl0ZXJhdG9yRm4gPSBtYXliZUl0ZXJhYmxlICYmIChJVEVSQVRPUl9TWU1CT0wgJiYgbWF5YmVJdGVyYWJsZVtJVEVSQVRPUl9TWU1CT0xdIHx8IG1heWJlSXRlcmFibGVbRkFVWF9JVEVSQVRPUl9TWU1CT0xdKTtcbiAgICBpZiAodHlwZW9mIGl0ZXJhdG9yRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBpdGVyYXRvckZuO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb2xsZWN0aW9uIG9mIG1ldGhvZHMgdGhhdCBhbGxvdyBkZWNsYXJhdGlvbiBhbmQgdmFsaWRhdGlvbiBvZiBwcm9wcyB0aGF0IGFyZVxuICAgKiBzdXBwbGllZCB0byBSZWFjdCBjb21wb25lbnRzLiBFeGFtcGxlIHVzYWdlOlxuICAgKlxuICAgKiAgIHZhciBQcm9wcyA9IHJlcXVpcmUoJ1JlYWN0UHJvcFR5cGVzJyk7XG4gICAqICAgdmFyIE15QXJ0aWNsZSA9IFJlYWN0LmNyZWF0ZUNsYXNzKHtcbiAgICogICAgIHByb3BUeXBlczoge1xuICAgKiAgICAgICAvLyBBbiBvcHRpb25hbCBzdHJpbmcgcHJvcCBuYW1lZCBcImRlc2NyaXB0aW9uXCIuXG4gICAqICAgICAgIGRlc2NyaXB0aW9uOiBQcm9wcy5zdHJpbmcsXG4gICAqXG4gICAqICAgICAgIC8vIEEgcmVxdWlyZWQgZW51bSBwcm9wIG5hbWVkIFwiY2F0ZWdvcnlcIi5cbiAgICogICAgICAgY2F0ZWdvcnk6IFByb3BzLm9uZU9mKFsnTmV3cycsJ1Bob3RvcyddKS5pc1JlcXVpcmVkLFxuICAgKlxuICAgKiAgICAgICAvLyBBIHByb3AgbmFtZWQgXCJkaWFsb2dcIiB0aGF0IHJlcXVpcmVzIGFuIGluc3RhbmNlIG9mIERpYWxvZy5cbiAgICogICAgICAgZGlhbG9nOiBQcm9wcy5pbnN0YW5jZU9mKERpYWxvZykuaXNSZXF1aXJlZFxuICAgKiAgICAgfSxcbiAgICogICAgIHJlbmRlcjogZnVuY3Rpb24oKSB7IC4uLiB9XG4gICAqICAgfSk7XG4gICAqXG4gICAqIEEgbW9yZSBmb3JtYWwgc3BlY2lmaWNhdGlvbiBvZiBob3cgdGhlc2UgbWV0aG9kcyBhcmUgdXNlZDpcbiAgICpcbiAgICogICB0eXBlIDo9IGFycmF5fGJvb2x8ZnVuY3xvYmplY3R8bnVtYmVyfHN0cmluZ3xvbmVPZihbLi4uXSl8aW5zdGFuY2VPZiguLi4pXG4gICAqICAgZGVjbCA6PSBSZWFjdFByb3BUeXBlcy57dHlwZX0oLmlzUmVxdWlyZWQpP1xuICAgKlxuICAgKiBFYWNoIGFuZCBldmVyeSBkZWNsYXJhdGlvbiBwcm9kdWNlcyBhIGZ1bmN0aW9uIHdpdGggdGhlIHNhbWUgc2lnbmF0dXJlLiBUaGlzXG4gICAqIGFsbG93cyB0aGUgY3JlYXRpb24gb2YgY3VzdG9tIHZhbGlkYXRpb24gZnVuY3Rpb25zLiBGb3IgZXhhbXBsZTpcbiAgICpcbiAgICogIHZhciBNeUxpbmsgPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG4gICAqICAgIHByb3BUeXBlczoge1xuICAgKiAgICAgIC8vIEFuIG9wdGlvbmFsIHN0cmluZyBvciBVUkkgcHJvcCBuYW1lZCBcImhyZWZcIi5cbiAgICogICAgICBocmVmOiBmdW5jdGlvbihwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAgICogICAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAqICAgICAgICBpZiAocHJvcFZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHByb3BWYWx1ZSAhPT0gJ3N0cmluZycgJiZcbiAgICogICAgICAgICAgICAhKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFVSSSkpIHtcbiAgICogICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihcbiAgICogICAgICAgICAgICAnRXhwZWN0ZWQgYSBzdHJpbmcgb3IgYW4gVVJJIGZvciAnICsgcHJvcE5hbWUgKyAnIGluICcgK1xuICAgKiAgICAgICAgICAgIGNvbXBvbmVudE5hbWVcbiAgICogICAgICAgICAgKTtcbiAgICogICAgICAgIH1cbiAgICogICAgICB9XG4gICAqICAgIH0sXG4gICAqICAgIHJlbmRlcjogZnVuY3Rpb24oKSB7Li4ufVxuICAgKiAgfSk7XG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cblxuICB2YXIgQU5PTllNT1VTID0gJzw8YW5vbnltb3VzPj4nO1xuXG4gIC8vIEltcG9ydGFudCFcbiAgLy8gS2VlcCB0aGlzIGxpc3QgaW4gc3luYyB3aXRoIHByb2R1Y3Rpb24gdmVyc2lvbiBpbiBgLi9mYWN0b3J5V2l0aFRocm93aW5nU2hpbXMuanNgLlxuICB2YXIgUmVhY3RQcm9wVHlwZXMgPSB7XG4gICAgYXJyYXk6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdhcnJheScpLFxuICAgIGJpZ2ludDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ2JpZ2ludCcpLFxuICAgIGJvb2w6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdib29sZWFuJyksXG4gICAgZnVuYzogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ2Z1bmN0aW9uJyksXG4gICAgbnVtYmVyOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignbnVtYmVyJyksXG4gICAgb2JqZWN0OiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignb2JqZWN0JyksXG4gICAgc3RyaW5nOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignc3RyaW5nJyksXG4gICAgc3ltYm9sOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignc3ltYm9sJyksXG5cbiAgICBhbnk6IGNyZWF0ZUFueVR5cGVDaGVja2VyKCksXG4gICAgYXJyYXlPZjogY3JlYXRlQXJyYXlPZlR5cGVDaGVja2VyLFxuICAgIGVsZW1lbnQ6IGNyZWF0ZUVsZW1lbnRUeXBlQ2hlY2tlcigpLFxuICAgIGVsZW1lbnRUeXBlOiBjcmVhdGVFbGVtZW50VHlwZVR5cGVDaGVja2VyKCksXG4gICAgaW5zdGFuY2VPZjogY3JlYXRlSW5zdGFuY2VUeXBlQ2hlY2tlcixcbiAgICBub2RlOiBjcmVhdGVOb2RlQ2hlY2tlcigpLFxuICAgIG9iamVjdE9mOiBjcmVhdGVPYmplY3RPZlR5cGVDaGVja2VyLFxuICAgIG9uZU9mOiBjcmVhdGVFbnVtVHlwZUNoZWNrZXIsXG4gICAgb25lT2ZUeXBlOiBjcmVhdGVVbmlvblR5cGVDaGVja2VyLFxuICAgIHNoYXBlOiBjcmVhdGVTaGFwZVR5cGVDaGVja2VyLFxuICAgIGV4YWN0OiBjcmVhdGVTdHJpY3RTaGFwZVR5cGVDaGVja2VyLFxuICB9O1xuXG4gIC8qKlxuICAgKiBpbmxpbmVkIE9iamVjdC5pcyBwb2x5ZmlsbCB0byBhdm9pZCByZXF1aXJpbmcgY29uc3VtZXJzIHNoaXAgdGhlaXIgb3duXG4gICAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9pc1xuICAgKi9cbiAgLyplc2xpbnQtZGlzYWJsZSBuby1zZWxmLWNvbXBhcmUqL1xuICBmdW5jdGlvbiBpcyh4LCB5KSB7XG4gICAgLy8gU2FtZVZhbHVlIGFsZ29yaXRobVxuICAgIGlmICh4ID09PSB5KSB7XG4gICAgICAvLyBTdGVwcyAxLTUsIDctMTBcbiAgICAgIC8vIFN0ZXBzIDYuYi02LmU6ICswICE9IC0wXG4gICAgICByZXR1cm4geCAhPT0gMCB8fCAxIC8geCA9PT0gMSAvIHk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFN0ZXAgNi5hOiBOYU4gPT0gTmFOXG4gICAgICByZXR1cm4geCAhPT0geCAmJiB5ICE9PSB5O1xuICAgIH1cbiAgfVxuICAvKmVzbGludC1lbmFibGUgbm8tc2VsZi1jb21wYXJlKi9cblxuICAvKipcbiAgICogV2UgdXNlIGFuIEVycm9yLWxpa2Ugb2JqZWN0IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGFzIHBlb3BsZSBtYXkgY2FsbFxuICAgKiBQcm9wVHlwZXMgZGlyZWN0bHkgYW5kIGluc3BlY3QgdGhlaXIgb3V0cHV0LiBIb3dldmVyLCB3ZSBkb24ndCB1c2UgcmVhbFxuICAgKiBFcnJvcnMgYW55bW9yZS4gV2UgZG9uJ3QgaW5zcGVjdCB0aGVpciBzdGFjayBhbnl3YXksIGFuZCBjcmVhdGluZyB0aGVtXG4gICAqIGlzIHByb2hpYml0aXZlbHkgZXhwZW5zaXZlIGlmIHRoZXkgYXJlIGNyZWF0ZWQgdG9vIG9mdGVuLCBzdWNoIGFzIHdoYXRcbiAgICogaGFwcGVucyBpbiBvbmVPZlR5cGUoKSBmb3IgYW55IHR5cGUgYmVmb3JlIHRoZSBvbmUgdGhhdCBtYXRjaGVkLlxuICAgKi9cbiAgZnVuY3Rpb24gUHJvcFR5cGVFcnJvcihtZXNzYWdlLCBkYXRhKSB7XG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgICB0aGlzLmRhdGEgPSBkYXRhICYmIHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGE6IHt9O1xuICAgIHRoaXMuc3RhY2sgPSAnJztcbiAgfVxuICAvLyBNYWtlIGBpbnN0YW5jZW9mIEVycm9yYCBzdGlsbCB3b3JrIGZvciByZXR1cm5lZCBlcnJvcnMuXG4gIFByb3BUeXBlRXJyb3IucHJvdG90eXBlID0gRXJyb3IucHJvdG90eXBlO1xuXG4gIGZ1bmN0aW9uIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHZhciBtYW51YWxQcm9wVHlwZUNhbGxDYWNoZSA9IHt9O1xuICAgICAgdmFyIG1hbnVhbFByb3BUeXBlV2FybmluZ0NvdW50ID0gMDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2hlY2tUeXBlKGlzUmVxdWlyZWQsIHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7XG4gICAgICBjb21wb25lbnROYW1lID0gY29tcG9uZW50TmFtZSB8fCBBTk9OWU1PVVM7XG4gICAgICBwcm9wRnVsbE5hbWUgPSBwcm9wRnVsbE5hbWUgfHwgcHJvcE5hbWU7XG5cbiAgICAgIGlmIChzZWNyZXQgIT09IFJlYWN0UHJvcFR5cGVzU2VjcmV0KSB7XG4gICAgICAgIGlmICh0aHJvd09uRGlyZWN0QWNjZXNzKSB7XG4gICAgICAgICAgLy8gTmV3IGJlaGF2aW9yIG9ubHkgZm9yIHVzZXJzIG9mIGBwcm9wLXR5cGVzYCBwYWNrYWdlXG4gICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihcbiAgICAgICAgICAgICdDYWxsaW5nIFByb3BUeXBlcyB2YWxpZGF0b3JzIGRpcmVjdGx5IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLiAnICtcbiAgICAgICAgICAgICdVc2UgYFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcygpYCB0byBjYWxsIHRoZW0uICcgK1xuICAgICAgICAgICAgJ1JlYWQgbW9yZSBhdCBodHRwOi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXMnXG4gICAgICAgICAgKTtcbiAgICAgICAgICBlcnIubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAvLyBPbGQgYmVoYXZpb3IgZm9yIHBlb3BsZSB1c2luZyBSZWFjdC5Qcm9wVHlwZXNcbiAgICAgICAgICB2YXIgY2FjaGVLZXkgPSBjb21wb25lbnROYW1lICsgJzonICsgcHJvcE5hbWU7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIW1hbnVhbFByb3BUeXBlQ2FsbENhY2hlW2NhY2hlS2V5XSAmJlxuICAgICAgICAgICAgLy8gQXZvaWQgc3BhbW1pbmcgdGhlIGNvbnNvbGUgYmVjYXVzZSB0aGV5IGFyZSBvZnRlbiBub3QgYWN0aW9uYWJsZSBleGNlcHQgZm9yIGxpYiBhdXRob3JzXG4gICAgICAgICAgICBtYW51YWxQcm9wVHlwZVdhcm5pbmdDb3VudCA8IDNcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHByaW50V2FybmluZyhcbiAgICAgICAgICAgICAgJ1lvdSBhcmUgbWFudWFsbHkgY2FsbGluZyBhIFJlYWN0LlByb3BUeXBlcyB2YWxpZGF0aW9uICcgK1xuICAgICAgICAgICAgICAnZnVuY3Rpb24gZm9yIHRoZSBgJyArIHByb3BGdWxsTmFtZSArICdgIHByb3Agb24gYCcgKyBjb21wb25lbnROYW1lICsgJ2AuIFRoaXMgaXMgZGVwcmVjYXRlZCAnICtcbiAgICAgICAgICAgICAgJ2FuZCB3aWxsIHRocm93IGluIHRoZSBzdGFuZGFsb25lIGBwcm9wLXR5cGVzYCBwYWNrYWdlLiAnICtcbiAgICAgICAgICAgICAgJ1lvdSBtYXkgYmUgc2VlaW5nIHRoaXMgd2FybmluZyBkdWUgdG8gYSB0aGlyZC1wYXJ0eSBQcm9wVHlwZXMgJyArXG4gICAgICAgICAgICAgICdsaWJyYXJ5LiBTZWUgaHR0cHM6Ly9mYi5tZS9yZWFjdC13YXJuaW5nLWRvbnQtY2FsbC1wcm9wdHlwZXMgJyArICdmb3IgZGV0YWlscy4nXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbWFudWFsUHJvcFR5cGVDYWxsQ2FjaGVbY2FjaGVLZXldID0gdHJ1ZTtcbiAgICAgICAgICAgIG1hbnVhbFByb3BUeXBlV2FybmluZ0NvdW50Kys7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09IG51bGwpIHtcbiAgICAgICAgaWYgKGlzUmVxdWlyZWQpIHtcbiAgICAgICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1RoZSAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2AgaXMgbWFya2VkIGFzIHJlcXVpcmVkICcgKyAoJ2luIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBidXQgaXRzIHZhbHVlIGlzIGBudWxsYC4nKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignVGhlICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBpcyBtYXJrZWQgYXMgcmVxdWlyZWQgaW4gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGJ1dCBpdHMgdmFsdWUgaXMgYHVuZGVmaW5lZGAuJykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGNoYWluZWRDaGVja1R5cGUgPSBjaGVja1R5cGUuYmluZChudWxsLCBmYWxzZSk7XG4gICAgY2hhaW5lZENoZWNrVHlwZS5pc1JlcXVpcmVkID0gY2hlY2tUeXBlLmJpbmQobnVsbCwgdHJ1ZSk7XG5cbiAgICByZXR1cm4gY2hhaW5lZENoZWNrVHlwZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKGV4cGVjdGVkVHlwZSkge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gZXhwZWN0ZWRUeXBlKSB7XG4gICAgICAgIC8vIGBwcm9wVmFsdWVgIGJlaW5nIGluc3RhbmNlIG9mLCBzYXksIGRhdGUvcmVnZXhwLCBwYXNzIHRoZSAnb2JqZWN0J1xuICAgICAgICAvLyBjaGVjaywgYnV0IHdlIGNhbiBvZmZlciBhIG1vcmUgcHJlY2lzZSBlcnJvciBtZXNzYWdlIGhlcmUgcmF0aGVyIHRoYW5cbiAgICAgICAgLy8gJ29mIHR5cGUgYG9iamVjdGAnLlxuICAgICAgICB2YXIgcHJlY2lzZVR5cGUgPSBnZXRQcmVjaXNlVHlwZShwcm9wVmFsdWUpO1xuXG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcihcbiAgICAgICAgICAnSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByZWNpc2VUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkICcpICsgKCdgJyArIGV4cGVjdGVkVHlwZSArICdgLicpLFxuICAgICAgICAgIHtleHBlY3RlZFR5cGU6IGV4cGVjdGVkVHlwZX1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlQW55VHlwZUNoZWNrZXIoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGwpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlQXJyYXlPZlR5cGVDaGVja2VyKHR5cGVDaGVja2VyKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICBpZiAodHlwZW9mIHR5cGVDaGVja2VyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignUHJvcGVydHkgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiBjb21wb25lbnQgYCcgKyBjb21wb25lbnROYW1lICsgJ2AgaGFzIGludmFsaWQgUHJvcFR5cGUgbm90YXRpb24gaW5zaWRlIGFycmF5T2YuJyk7XG4gICAgICB9XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHtcbiAgICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJvcFR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYW4gYXJyYXkuJykpO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wVmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGVycm9yID0gdHlwZUNoZWNrZXIocHJvcFZhbHVlLCBpLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJ1snICsgaSArICddJywgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVFbGVtZW50VHlwZUNoZWNrZXIoKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgaWYgKCFpc1ZhbGlkRWxlbWVudChwcm9wVmFsdWUpKSB7XG4gICAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGEgc2luZ2xlIFJlYWN0RWxlbWVudC4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnRUeXBlVHlwZUNoZWNrZXIoKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgaWYgKCFSZWFjdElzLmlzVmFsaWRFbGVtZW50VHlwZShwcm9wVmFsdWUpKSB7XG4gICAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGEgc2luZ2xlIFJlYWN0RWxlbWVudCB0eXBlLicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2VUeXBlQ2hlY2tlcihleHBlY3RlZENsYXNzKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICBpZiAoIShwcm9wc1twcm9wTmFtZV0gaW5zdGFuY2VvZiBleHBlY3RlZENsYXNzKSkge1xuICAgICAgICB2YXIgZXhwZWN0ZWRDbGFzc05hbWUgPSBleHBlY3RlZENsYXNzLm5hbWUgfHwgQU5PTllNT1VTO1xuICAgICAgICB2YXIgYWN0dWFsQ2xhc3NOYW1lID0gZ2V0Q2xhc3NOYW1lKHByb3BzW3Byb3BOYW1lXSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIGFjdHVhbENsYXNzTmFtZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCAnKSArICgnaW5zdGFuY2Ugb2YgYCcgKyBleHBlY3RlZENsYXNzTmFtZSArICdgLicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlRW51bVR5cGVDaGVja2VyKGV4cGVjdGVkVmFsdWVzKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGV4cGVjdGVkVmFsdWVzKSkge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgcHJpbnRXYXJuaW5nKFxuICAgICAgICAgICAgJ0ludmFsaWQgYXJndW1lbnRzIHN1cHBsaWVkIHRvIG9uZU9mLCBleHBlY3RlZCBhbiBhcnJheSwgZ290ICcgKyBhcmd1bWVudHMubGVuZ3RoICsgJyBhcmd1bWVudHMuICcgK1xuICAgICAgICAgICAgJ0EgY29tbW9uIG1pc3Rha2UgaXMgdG8gd3JpdGUgb25lT2YoeCwgeSwgeikgaW5zdGVhZCBvZiBvbmVPZihbeCwgeSwgel0pLidcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByaW50V2FybmluZygnSW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byBvbmVPZiwgZXhwZWN0ZWQgYW4gYXJyYXkuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXhwZWN0ZWRWYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGlzKHByb3BWYWx1ZSwgZXhwZWN0ZWRWYWx1ZXNbaV0pKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHZhbHVlc1N0cmluZyA9IEpTT04uc3RyaW5naWZ5KGV4cGVjdGVkVmFsdWVzLCBmdW5jdGlvbiByZXBsYWNlcihrZXksIHZhbHVlKSB7XG4gICAgICAgIHZhciB0eXBlID0gZ2V0UHJlY2lzZVR5cGUodmFsdWUpO1xuICAgICAgICBpZiAodHlwZSA9PT0gJ3N5bWJvbCcpIHtcbiAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdmFsdWUgYCcgKyBTdHJpbmcocHJvcFZhbHVlKSArICdgICcgKyAoJ3N1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBvbmUgb2YgJyArIHZhbHVlc1N0cmluZyArICcuJykpO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlT2JqZWN0T2ZUeXBlQ2hlY2tlcih0eXBlQ2hlY2tlcikge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKHR5cGVvZiB0eXBlQ2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1Byb3BlcnR5IGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgY29tcG9uZW50IGAnICsgY29tcG9uZW50TmFtZSArICdgIGhhcyBpbnZhbGlkIFByb3BUeXBlIG5vdGF0aW9uIGluc2lkZSBvYmplY3RPZi4nKTtcbiAgICAgIH1cbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhbiBvYmplY3QuJykpO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIga2V5IGluIHByb3BWYWx1ZSkge1xuICAgICAgICBpZiAoaGFzKHByb3BWYWx1ZSwga2V5KSkge1xuICAgICAgICAgIHZhciBlcnJvciA9IHR5cGVDaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlVW5pb25UeXBlQ2hlY2tlcihhcnJheU9mVHlwZUNoZWNrZXJzKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGFycmF5T2ZUeXBlQ2hlY2tlcnMpKSB7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gcHJpbnRXYXJuaW5nKCdJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIHRvIG9uZU9mVHlwZSwgZXhwZWN0ZWQgYW4gaW5zdGFuY2Ugb2YgYXJyYXkuJykgOiB2b2lkIDA7XG4gICAgICByZXR1cm4gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbDtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5T2ZUeXBlQ2hlY2tlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjaGVja2VyID0gYXJyYXlPZlR5cGVDaGVja2Vyc1tpXTtcbiAgICAgIGlmICh0eXBlb2YgY2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBwcmludFdhcm5pbmcoXG4gICAgICAgICAgJ0ludmFsaWQgYXJndW1lbnQgc3VwcGxpZWQgdG8gb25lT2ZUeXBlLiBFeHBlY3RlZCBhbiBhcnJheSBvZiBjaGVjayBmdW5jdGlvbnMsIGJ1dCAnICtcbiAgICAgICAgICAncmVjZWl2ZWQgJyArIGdldFBvc3RmaXhGb3JUeXBlV2FybmluZyhjaGVja2VyKSArICcgYXQgaW5kZXggJyArIGkgKyAnLidcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgZXhwZWN0ZWRUeXBlcyA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheU9mVHlwZUNoZWNrZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjaGVja2VyID0gYXJyYXlPZlR5cGVDaGVja2Vyc1tpXTtcbiAgICAgICAgdmFyIGNoZWNrZXJSZXN1bHQgPSBjaGVja2VyKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICBpZiAoY2hlY2tlclJlc3VsdCA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoZWNrZXJSZXN1bHQuZGF0YSAmJiBoYXMoY2hlY2tlclJlc3VsdC5kYXRhLCAnZXhwZWN0ZWRUeXBlJykpIHtcbiAgICAgICAgICBleHBlY3RlZFR5cGVzLnB1c2goY2hlY2tlclJlc3VsdC5kYXRhLmV4cGVjdGVkVHlwZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZhciBleHBlY3RlZFR5cGVzTWVzc2FnZSA9IChleHBlY3RlZFR5cGVzLmxlbmd0aCA+IDApID8gJywgZXhwZWN0ZWQgb25lIG9mIHR5cGUgWycgKyBleHBlY3RlZFR5cGVzLmpvaW4oJywgJykgKyAnXSc6ICcnO1xuICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBzdXBwbGllZCB0byAnICsgKCdgJyArIGNvbXBvbmVudE5hbWUgKyAnYCcgKyBleHBlY3RlZFR5cGVzTWVzc2FnZSArICcuJykpO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlTm9kZUNoZWNrZXIoKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICBpZiAoIWlzTm9kZShwcm9wc1twcm9wTmFtZV0pKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agc3VwcGxpZWQgdG8gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGEgUmVhY3ROb2RlLicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW52YWxpZFZhbGlkYXRvckVycm9yKGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIGtleSwgdHlwZSkge1xuICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcihcbiAgICAgIChjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycpICsgJzogJyArIGxvY2F0aW9uICsgJyB0eXBlIGAnICsgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5ICsgJ2AgaXMgaW52YWxpZDsgJyArXG4gICAgICAnaXQgbXVzdCBiZSBhIGZ1bmN0aW9uLCB1c3VhbGx5IGZyb20gdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLCBidXQgcmVjZWl2ZWQgYCcgKyB0eXBlICsgJ2AuJ1xuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVTaGFwZVR5cGVDaGVja2VyKHNoYXBlVHlwZXMpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgYCcgKyBwcm9wVHlwZSArICdgICcgKyAoJ3N1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBgb2JqZWN0YC4nKSk7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBrZXkgaW4gc2hhcGVUeXBlcykge1xuICAgICAgICB2YXIgY2hlY2tlciA9IHNoYXBlVHlwZXNba2V5XTtcbiAgICAgICAgaWYgKHR5cGVvZiBjaGVja2VyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcmV0dXJuIGludmFsaWRWYWxpZGF0b3JFcnJvcihjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBrZXksIGdldFByZWNpc2VUeXBlKGNoZWNrZXIpKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZXJyb3IgPSBjaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVTdHJpY3RTaGFwZVR5cGVDaGVja2VyKHNoYXBlVHlwZXMpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgYCcgKyBwcm9wVHlwZSArICdgICcgKyAoJ3N1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBgb2JqZWN0YC4nKSk7XG4gICAgICB9XG4gICAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIGFsbCBrZXlzIGluIGNhc2Ugc29tZSBhcmUgcmVxdWlyZWQgYnV0IG1pc3NpbmcgZnJvbSBwcm9wcy5cbiAgICAgIHZhciBhbGxLZXlzID0gYXNzaWduKHt9LCBwcm9wc1twcm9wTmFtZV0sIHNoYXBlVHlwZXMpO1xuICAgICAgZm9yICh2YXIga2V5IGluIGFsbEtleXMpIHtcbiAgICAgICAgdmFyIGNoZWNrZXIgPSBzaGFwZVR5cGVzW2tleV07XG4gICAgICAgIGlmIChoYXMoc2hhcGVUeXBlcywga2V5KSAmJiB0eXBlb2YgY2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHJldHVybiBpbnZhbGlkVmFsaWRhdG9yRXJyb3IoY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwga2V5LCBnZXRQcmVjaXNlVHlwZShjaGVja2VyKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjaGVja2VyKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKFxuICAgICAgICAgICAgJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIGtleSBgJyArIGtleSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLicgK1xuICAgICAgICAgICAgJ1xcbkJhZCBvYmplY3Q6ICcgKyBKU09OLnN0cmluZ2lmeShwcm9wc1twcm9wTmFtZV0sIG51bGwsICcgICcpICtcbiAgICAgICAgICAgICdcXG5WYWxpZCBrZXlzOiAnICsgSlNPTi5zdHJpbmdpZnkoT2JqZWN0LmtleXMoc2hhcGVUeXBlcyksIG51bGwsICcgICcpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZXJyb3IgPSBjaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzTm9kZShwcm9wVmFsdWUpIHtcbiAgICBzd2l0Y2ggKHR5cGVvZiBwcm9wVmFsdWUpIHtcbiAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgcmV0dXJuICFwcm9wVmFsdWU7XG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIHByb3BWYWx1ZS5ldmVyeShpc05vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wVmFsdWUgPT09IG51bGwgfHwgaXNWYWxpZEVsZW1lbnQocHJvcFZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKHByb3BWYWx1ZSk7XG4gICAgICAgIGlmIChpdGVyYXRvckZuKSB7XG4gICAgICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKHByb3BWYWx1ZSk7XG4gICAgICAgICAgdmFyIHN0ZXA7XG4gICAgICAgICAgaWYgKGl0ZXJhdG9yRm4gIT09IHByb3BWYWx1ZS5lbnRyaWVzKSB7XG4gICAgICAgICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgICAgICAgICAgIGlmICghaXNOb2RlKHN0ZXAudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEl0ZXJhdG9yIHdpbGwgcHJvdmlkZSBlbnRyeSBbayx2XSB0dXBsZXMgcmF0aGVyIHRoYW4gdmFsdWVzLlxuICAgICAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICAgICAgICB2YXIgZW50cnkgPSBzdGVwLnZhbHVlO1xuICAgICAgICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzTm9kZShlbnRyeVsxXSkpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaXNTeW1ib2wocHJvcFR5cGUsIHByb3BWYWx1ZSkge1xuICAgIC8vIE5hdGl2ZSBTeW1ib2wuXG4gICAgaWYgKHByb3BUeXBlID09PSAnc3ltYm9sJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gZmFsc3kgdmFsdWUgY2FuJ3QgYmUgYSBTeW1ib2xcbiAgICBpZiAoIXByb3BWYWx1ZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIDE5LjQuMy41IFN5bWJvbC5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ10gPT09ICdTeW1ib2wnXG4gICAgaWYgKHByb3BWYWx1ZVsnQEB0b1N0cmluZ1RhZyddID09PSAnU3ltYm9sJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gRmFsbGJhY2sgZm9yIG5vbi1zcGVjIGNvbXBsaWFudCBTeW1ib2xzIHdoaWNoIGFyZSBwb2x5ZmlsbGVkLlxuICAgIGlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHByb3BWYWx1ZSBpbnN0YW5jZW9mIFN5bWJvbCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gRXF1aXZhbGVudCBvZiBgdHlwZW9mYCBidXQgd2l0aCBzcGVjaWFsIGhhbmRsaW5nIGZvciBhcnJheSBhbmQgcmVnZXhwLlxuICBmdW5jdGlvbiBnZXRQcm9wVHlwZShwcm9wVmFsdWUpIHtcbiAgICB2YXIgcHJvcFR5cGUgPSB0eXBlb2YgcHJvcFZhbHVlO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHtcbiAgICAgIHJldHVybiAnYXJyYXknO1xuICAgIH1cbiAgICBpZiAocHJvcFZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAvLyBPbGQgd2Via2l0cyAoYXQgbGVhc3QgdW50aWwgQW5kcm9pZCA0LjApIHJldHVybiAnZnVuY3Rpb24nIHJhdGhlciB0aGFuXG4gICAgICAvLyAnb2JqZWN0JyBmb3IgdHlwZW9mIGEgUmVnRXhwLiBXZSdsbCBub3JtYWxpemUgdGhpcyBoZXJlIHNvIHRoYXQgL2JsYS9cbiAgICAgIC8vIHBhc3NlcyBQcm9wVHlwZXMub2JqZWN0LlxuICAgICAgcmV0dXJuICdvYmplY3QnO1xuICAgIH1cbiAgICBpZiAoaXNTeW1ib2wocHJvcFR5cGUsIHByb3BWYWx1ZSkpIHtcbiAgICAgIHJldHVybiAnc3ltYm9sJztcbiAgICB9XG4gICAgcmV0dXJuIHByb3BUeXBlO1xuICB9XG5cbiAgLy8gVGhpcyBoYW5kbGVzIG1vcmUgdHlwZXMgdGhhbiBgZ2V0UHJvcFR5cGVgLiBPbmx5IHVzZWQgZm9yIGVycm9yIG1lc3NhZ2VzLlxuICAvLyBTZWUgYGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyYC5cbiAgZnVuY3Rpb24gZ2V0UHJlY2lzZVR5cGUocHJvcFZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiBwcm9wVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IHByb3BWYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuICcnICsgcHJvcFZhbHVlO1xuICAgIH1cbiAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgIGlmIChwcm9wVHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgIHJldHVybiAnZGF0ZSc7XG4gICAgICB9IGVsc2UgaWYgKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICByZXR1cm4gJ3JlZ2V4cCc7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwcm9wVHlwZTtcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBzdHJpbmcgdGhhdCBpcyBwb3N0Zml4ZWQgdG8gYSB3YXJuaW5nIGFib3V0IGFuIGludmFsaWQgdHlwZS5cbiAgLy8gRm9yIGV4YW1wbGUsIFwidW5kZWZpbmVkXCIgb3IgXCJvZiB0eXBlIGFycmF5XCJcbiAgZnVuY3Rpb24gZ2V0UG9zdGZpeEZvclR5cGVXYXJuaW5nKHZhbHVlKSB7XG4gICAgdmFyIHR5cGUgPSBnZXRQcmVjaXNlVHlwZSh2YWx1ZSk7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdhcnJheSc6XG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICByZXR1cm4gJ2FuICcgKyB0eXBlO1xuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICBjYXNlICdkYXRlJzpcbiAgICAgIGNhc2UgJ3JlZ2V4cCc6XG4gICAgICAgIHJldHVybiAnYSAnICsgdHlwZTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0eXBlO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJldHVybnMgY2xhc3MgbmFtZSBvZiB0aGUgb2JqZWN0LCBpZiBhbnkuXG4gIGZ1bmN0aW9uIGdldENsYXNzTmFtZShwcm9wVmFsdWUpIHtcbiAgICBpZiAoIXByb3BWYWx1ZS5jb25zdHJ1Y3RvciB8fCAhcHJvcFZhbHVlLmNvbnN0cnVjdG9yLm5hbWUpIHtcbiAgICAgIHJldHVybiBBTk9OWU1PVVM7XG4gICAgfVxuICAgIHJldHVybiBwcm9wVmFsdWUuY29uc3RydWN0b3IubmFtZTtcbiAgfVxuXG4gIFJlYWN0UHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzID0gY2hlY2tQcm9wVHlwZXM7XG4gIFJlYWN0UHJvcFR5cGVzLnJlc2V0V2FybmluZ0NhY2hlID0gY2hlY2tQcm9wVHlwZXMucmVzZXRXYXJuaW5nQ2FjaGU7XG4gIFJlYWN0UHJvcFR5cGVzLlByb3BUeXBlcyA9IFJlYWN0UHJvcFR5cGVzO1xuXG4gIHJldHVybiBSZWFjdFByb3BUeXBlcztcbn07XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgUmVhY3RJcyA9IHJlcXVpcmUoJ3JlYWN0LWlzJyk7XG5cbiAgLy8gQnkgZXhwbGljaXRseSB1c2luZyBgcHJvcC10eXBlc2AgeW91IGFyZSBvcHRpbmcgaW50byBuZXcgZGV2ZWxvcG1lbnQgYmVoYXZpb3IuXG4gIC8vIGh0dHA6Ly9mYi5tZS9wcm9wLXR5cGVzLWluLXByb2RcbiAgdmFyIHRocm93T25EaXJlY3RBY2Nlc3MgPSB0cnVlO1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMnKShSZWFjdElzLmlzRWxlbWVudCwgdGhyb3dPbkRpcmVjdEFjY2Vzcyk7XG59IGVsc2Uge1xuICAvLyBCeSBleHBsaWNpdGx5IHVzaW5nIGBwcm9wLXR5cGVzYCB5b3UgYXJlIG9wdGluZyBpbnRvIG5ldyBwcm9kdWN0aW9uIGJlaGF2aW9yLlxuICAvLyBodHRwOi8vZmIubWUvcHJvcC10eXBlcy1pbi1wcm9kXG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9mYWN0b3J5V2l0aFRocm93aW5nU2hpbXMnKSgpO1xufVxuIiwgIi8qIVxuXHRDb3B5cmlnaHQgKGMpIDIwMTggSmVkIFdhdHNvbi5cblx0TGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlIChNSVQpLCBzZWVcblx0aHR0cDovL2plZHdhdHNvbi5naXRodWIuaW8vY2xhc3NuYW1lc1xuKi9cbi8qIGdsb2JhbCBkZWZpbmUgKi9cblxuKGZ1bmN0aW9uICgpIHtcblx0J3VzZSBzdHJpY3QnO1xuXG5cdHZhciBoYXNPd24gPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxuXHRmdW5jdGlvbiBjbGFzc05hbWVzICgpIHtcblx0XHR2YXIgY2xhc3NlcyA9ICcnO1xuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBhcmcgPSBhcmd1bWVudHNbaV07XG5cdFx0XHRpZiAoYXJnKSB7XG5cdFx0XHRcdGNsYXNzZXMgPSBhcHBlbmRDbGFzcyhjbGFzc2VzLCBwYXJzZVZhbHVlKGFyZykpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBjbGFzc2VzO1xuXHR9XG5cblx0ZnVuY3Rpb24gcGFyc2VWYWx1ZSAoYXJnKSB7XG5cdFx0aWYgKHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBhcmcgPT09ICdudW1iZXInKSB7XG5cdFx0XHRyZXR1cm4gYXJnO1xuXHRcdH1cblxuXHRcdGlmICh0eXBlb2YgYXJnICE9PSAnb2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuICcnO1xuXHRcdH1cblxuXHRcdGlmIChBcnJheS5pc0FycmF5KGFyZykpIHtcblx0XHRcdHJldHVybiBjbGFzc05hbWVzLmFwcGx5KG51bGwsIGFyZyk7XG5cdFx0fVxuXG5cdFx0aWYgKGFyZy50b1N0cmluZyAhPT0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyAmJiAhYXJnLnRvU3RyaW5nLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ1tuYXRpdmUgY29kZV0nKSkge1xuXHRcdFx0cmV0dXJuIGFyZy50b1N0cmluZygpO1xuXHRcdH1cblxuXHRcdHZhciBjbGFzc2VzID0gJyc7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gYXJnKSB7XG5cdFx0XHRpZiAoaGFzT3duLmNhbGwoYXJnLCBrZXkpICYmIGFyZ1trZXldKSB7XG5cdFx0XHRcdGNsYXNzZXMgPSBhcHBlbmRDbGFzcyhjbGFzc2VzLCBrZXkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBjbGFzc2VzO1xuXHR9XG5cblx0ZnVuY3Rpb24gYXBwZW5kQ2xhc3MgKHZhbHVlLCBuZXdDbGFzcykge1xuXHRcdGlmICghbmV3Q2xhc3MpIHtcblx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9XG5cdFxuXHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0cmV0dXJuIHZhbHVlICsgJyAnICsgbmV3Q2xhc3M7XG5cdFx0fVxuXHRcblx0XHRyZXR1cm4gdmFsdWUgKyBuZXdDbGFzcztcblx0fVxuXG5cdGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuXHRcdGNsYXNzTmFtZXMuZGVmYXVsdCA9IGNsYXNzTmFtZXM7XG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBjbGFzc05hbWVzO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGRlZmluZS5hbWQgPT09ICdvYmplY3QnICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyByZWdpc3RlciBhcyAnY2xhc3NuYW1lcycsIGNvbnNpc3RlbnQgd2l0aCBucG0gcGFja2FnZSBuYW1lXG5cdFx0ZGVmaW5lKCdjbGFzc25hbWVzJywgW10sIGZ1bmN0aW9uICgpIHtcblx0XHRcdHJldHVybiBjbGFzc05hbWVzO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHdpbmRvdy5jbGFzc05hbWVzID0gY2xhc3NOYW1lcztcblx0fVxufSgpKTtcbiIsICIvKiogQGxpY2Vuc2UgUmVhY3QgdjE2LjEzLjFcbiAqIHJlYWN0LWlzLmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAoZnVuY3Rpb24oKSB7XG4ndXNlIHN0cmljdCc7XG5cbi8vIFRoZSBTeW1ib2wgdXNlZCB0byB0YWcgdGhlIFJlYWN0RWxlbWVudC1saWtlIHR5cGVzLiBJZiB0aGVyZSBpcyBubyBuYXRpdmUgU3ltYm9sXG4vLyBub3IgcG9seWZpbGwsIHRoZW4gYSBwbGFpbiBudW1iZXIgaXMgdXNlZCBmb3IgcGVyZm9ybWFuY2UuXG52YXIgaGFzU3ltYm9sID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuZm9yO1xudmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmVsZW1lbnQnKSA6IDB4ZWFjNztcbnZhciBSRUFDVF9QT1JUQUxfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnBvcnRhbCcpIDogMHhlYWNhO1xudmFyIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5mcmFnbWVudCcpIDogMHhlYWNiO1xudmFyIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5zdHJpY3RfbW9kZScpIDogMHhlYWNjO1xudmFyIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5wcm9maWxlcicpIDogMHhlYWQyO1xudmFyIFJFQUNUX1BST1ZJREVSX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5wcm92aWRlcicpIDogMHhlYWNkO1xudmFyIFJFQUNUX0NPTlRFWFRfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmNvbnRleHQnKSA6IDB4ZWFjZTsgLy8gVE9ETzogV2UgZG9uJ3QgdXNlIEFzeW5jTW9kZSBvciBDb25jdXJyZW50TW9kZSBhbnltb3JlLiBUaGV5IHdlcmUgdGVtcG9yYXJ5XG4vLyAodW5zdGFibGUpIEFQSXMgdGhhdCBoYXZlIGJlZW4gcmVtb3ZlZC4gQ2FuIHdlIHJlbW92ZSB0aGUgc3ltYm9scz9cblxudmFyIFJFQUNUX0FTWU5DX01PREVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmFzeW5jX21vZGUnKSA6IDB4ZWFjZjtcbnZhciBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmNvbmN1cnJlbnRfbW9kZScpIDogMHhlYWNmO1xudmFyIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5mb3J3YXJkX3JlZicpIDogMHhlYWQwO1xudmFyIFJFQUNUX1NVU1BFTlNFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5zdXNwZW5zZScpIDogMHhlYWQxO1xudmFyIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnN1c3BlbnNlX2xpc3QnKSA6IDB4ZWFkODtcbnZhciBSRUFDVF9NRU1PX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5tZW1vJykgOiAweGVhZDM7XG52YXIgUkVBQ1RfTEFaWV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QubGF6eScpIDogMHhlYWQ0O1xudmFyIFJFQUNUX0JMT0NLX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5ibG9jaycpIDogMHhlYWQ5O1xudmFyIFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5mdW5kYW1lbnRhbCcpIDogMHhlYWQ1O1xudmFyIFJFQUNUX1JFU1BPTkRFUl9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QucmVzcG9uZGVyJykgOiAweGVhZDY7XG52YXIgUkVBQ1RfU0NPUEVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnNjb3BlJykgOiAweGVhZDc7XG5cbmZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKSB7XG4gIHJldHVybiB0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicgfHwgLy8gTm90ZTogaXRzIHR5cGVvZiBtaWdodCBiZSBvdGhlciB0aGFuICdzeW1ib2wnIG9yICdudW1iZXInIGlmIGl0J3MgYSBwb2x5ZmlsbC5cbiAgdHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9QUk9GSUxFUl9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgfHwgdHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwgJiYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfUFJPVklERVJfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9DT05URVhUX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1JFU1BPTkRFUl9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1NDT1BFX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQkxPQ0tfVFlQRSk7XG59XG5cbmZ1bmN0aW9uIHR5cGVPZihvYmplY3QpIHtcbiAgaWYgKHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCkge1xuICAgIHZhciAkJHR5cGVvZiA9IG9iamVjdC4kJHR5cGVvZjtcblxuICAgIHN3aXRjaCAoJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICB2YXIgdHlwZSA9IG9iamVjdC50eXBlO1xuXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgIGNhc2UgUkVBQ1RfQVNZTkNfTU9ERV9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9GUkFHTUVOVF9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfUFJPRklMRVJfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1NUUklDVF9NT0RFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuIHR5cGU7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdmFyICQkdHlwZW9mVHlwZSA9IHR5cGUgJiYgdHlwZS4kJHR5cGVvZjtcblxuICAgICAgICAgICAgc3dpdGNoICgkJHR5cGVvZlR5cGUpIHtcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9DT05URVhUX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX1BST1ZJREVSX1RZUEU6XG4gICAgICAgICAgICAgICAgcmV0dXJuICQkdHlwZW9mVHlwZTtcblxuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiAkJHR5cGVvZjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgIHJldHVybiAkJHR5cGVvZjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufSAvLyBBc3luY01vZGUgaXMgZGVwcmVjYXRlZCBhbG9uZyB3aXRoIGlzQXN5bmNNb2RlXG5cbnZhciBBc3luY01vZGUgPSBSRUFDVF9BU1lOQ19NT0RFX1RZUEU7XG52YXIgQ29uY3VycmVudE1vZGUgPSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRTtcbnZhciBDb250ZXh0Q29uc3VtZXIgPSBSRUFDVF9DT05URVhUX1RZUEU7XG52YXIgQ29udGV4dFByb3ZpZGVyID0gUkVBQ1RfUFJPVklERVJfVFlQRTtcbnZhciBFbGVtZW50ID0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xudmFyIEZvcndhcmRSZWYgPSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFO1xudmFyIEZyYWdtZW50ID0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbnZhciBMYXp5ID0gUkVBQ1RfTEFaWV9UWVBFO1xudmFyIE1lbW8gPSBSRUFDVF9NRU1PX1RZUEU7XG52YXIgUG9ydGFsID0gUkVBQ1RfUE9SVEFMX1RZUEU7XG52YXIgUHJvZmlsZXIgPSBSRUFDVF9QUk9GSUxFUl9UWVBFO1xudmFyIFN0cmljdE1vZGUgPSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFO1xudmFyIFN1c3BlbnNlID0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbnZhciBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSA9IGZhbHNlOyAvLyBBc3luY01vZGUgc2hvdWxkIGJlIGRlcHJlY2F0ZWRcblxuZnVuY3Rpb24gaXNBc3luY01vZGUob2JqZWN0KSB7XG4gIHtcbiAgICBpZiAoIWhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlKSB7XG4gICAgICBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSA9IHRydWU7IC8vIFVzaW5nIGNvbnNvbGVbJ3dhcm4nXSB0byBldmFkZSBCYWJlbCBhbmQgRVNMaW50XG5cbiAgICAgIGNvbnNvbGVbJ3dhcm4nXSgnVGhlIFJlYWN0SXMuaXNBc3luY01vZGUoKSBhbGlhcyBoYXMgYmVlbiBkZXByZWNhdGVkLCAnICsgJ2FuZCB3aWxsIGJlIHJlbW92ZWQgaW4gUmVhY3QgMTcrLiBVcGRhdGUgeW91ciBjb2RlIHRvIHVzZSAnICsgJ1JlYWN0SXMuaXNDb25jdXJyZW50TW9kZSgpIGluc3RlYWQuIEl0IGhhcyB0aGUgZXhhY3Qgc2FtZSBBUEkuJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGlzQ29uY3VycmVudE1vZGUob2JqZWN0KSB8fCB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfQVNZTkNfTU9ERV9UWVBFO1xufVxuZnVuY3Rpb24gaXNDb25jdXJyZW50TW9kZShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzQ29udGV4dENvbnN1bWVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0NPTlRFWFRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzQ29udGV4dFByb3ZpZGVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BST1ZJREVSX1RZUEU7XG59XG5mdW5jdGlvbiBpc0VsZW1lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwgJiYgb2JqZWN0LiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEU7XG59XG5mdW5jdGlvbiBpc0ZvcndhcmRSZWYob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzRnJhZ21lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzTGF6eShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9MQVpZX1RZUEU7XG59XG5mdW5jdGlvbiBpc01lbW8ob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfTUVNT19UWVBFO1xufVxuZnVuY3Rpb24gaXNQb3J0YWwob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUE9SVEFMX1RZUEU7XG59XG5mdW5jdGlvbiBpc1Byb2ZpbGVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG59XG5mdW5jdGlvbiBpc1N0cmljdE1vZGUob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzU3VzcGVuc2Uob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbn1cblxuZXhwb3J0cy5Bc3luY01vZGUgPSBBc3luY01vZGU7XG5leHBvcnRzLkNvbmN1cnJlbnRNb2RlID0gQ29uY3VycmVudE1vZGU7XG5leHBvcnRzLkNvbnRleHRDb25zdW1lciA9IENvbnRleHRDb25zdW1lcjtcbmV4cG9ydHMuQ29udGV4dFByb3ZpZGVyID0gQ29udGV4dFByb3ZpZGVyO1xuZXhwb3J0cy5FbGVtZW50ID0gRWxlbWVudDtcbmV4cG9ydHMuRm9yd2FyZFJlZiA9IEZvcndhcmRSZWY7XG5leHBvcnRzLkZyYWdtZW50ID0gRnJhZ21lbnQ7XG5leHBvcnRzLkxhenkgPSBMYXp5O1xuZXhwb3J0cy5NZW1vID0gTWVtbztcbmV4cG9ydHMuUG9ydGFsID0gUG9ydGFsO1xuZXhwb3J0cy5Qcm9maWxlciA9IFByb2ZpbGVyO1xuZXhwb3J0cy5TdHJpY3RNb2RlID0gU3RyaWN0TW9kZTtcbmV4cG9ydHMuU3VzcGVuc2UgPSBTdXNwZW5zZTtcbmV4cG9ydHMuaXNBc3luY01vZGUgPSBpc0FzeW5jTW9kZTtcbmV4cG9ydHMuaXNDb25jdXJyZW50TW9kZSA9IGlzQ29uY3VycmVudE1vZGU7XG5leHBvcnRzLmlzQ29udGV4dENvbnN1bWVyID0gaXNDb250ZXh0Q29uc3VtZXI7XG5leHBvcnRzLmlzQ29udGV4dFByb3ZpZGVyID0gaXNDb250ZXh0UHJvdmlkZXI7XG5leHBvcnRzLmlzRWxlbWVudCA9IGlzRWxlbWVudDtcbmV4cG9ydHMuaXNGb3J3YXJkUmVmID0gaXNGb3J3YXJkUmVmO1xuZXhwb3J0cy5pc0ZyYWdtZW50ID0gaXNGcmFnbWVudDtcbmV4cG9ydHMuaXNMYXp5ID0gaXNMYXp5O1xuZXhwb3J0cy5pc01lbW8gPSBpc01lbW87XG5leHBvcnRzLmlzUG9ydGFsID0gaXNQb3J0YWw7XG5leHBvcnRzLmlzUHJvZmlsZXIgPSBpc1Byb2ZpbGVyO1xuZXhwb3J0cy5pc1N0cmljdE1vZGUgPSBpc1N0cmljdE1vZGU7XG5leHBvcnRzLmlzU3VzcGVuc2UgPSBpc1N1c3BlbnNlO1xuZXhwb3J0cy5pc1ZhbGlkRWxlbWVudFR5cGUgPSBpc1ZhbGlkRWxlbWVudFR5cGU7XG5leHBvcnRzLnR5cGVPZiA9IHR5cGVPZjtcbiAgfSkoKTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbnZhciByZWFjdElzID0gcmVxdWlyZSgncmVhY3QtaXMnKTtcblxuLyoqXG4gKiBDb3B5cmlnaHQgMjAxNSwgWWFob28hIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xudmFyIFJFQUNUX1NUQVRJQ1MgPSB7XG4gIGNoaWxkQ29udGV4dFR5cGVzOiB0cnVlLFxuICBjb250ZXh0VHlwZTogdHJ1ZSxcbiAgY29udGV4dFR5cGVzOiB0cnVlLFxuICBkZWZhdWx0UHJvcHM6IHRydWUsXG4gIGRpc3BsYXlOYW1lOiB0cnVlLFxuICBnZXREZWZhdWx0UHJvcHM6IHRydWUsXG4gIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcjogdHJ1ZSxcbiAgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzOiB0cnVlLFxuICBtaXhpbnM6IHRydWUsXG4gIHByb3BUeXBlczogdHJ1ZSxcbiAgdHlwZTogdHJ1ZVxufTtcbnZhciBLTk9XTl9TVEFUSUNTID0ge1xuICBuYW1lOiB0cnVlLFxuICBsZW5ndGg6IHRydWUsXG4gIHByb3RvdHlwZTogdHJ1ZSxcbiAgY2FsbGVyOiB0cnVlLFxuICBjYWxsZWU6IHRydWUsXG4gIGFyZ3VtZW50czogdHJ1ZSxcbiAgYXJpdHk6IHRydWVcbn07XG52YXIgRk9SV0FSRF9SRUZfU1RBVElDUyA9IHtcbiAgJyQkdHlwZW9mJzogdHJ1ZSxcbiAgcmVuZGVyOiB0cnVlLFxuICBkZWZhdWx0UHJvcHM6IHRydWUsXG4gIGRpc3BsYXlOYW1lOiB0cnVlLFxuICBwcm9wVHlwZXM6IHRydWVcbn07XG52YXIgTUVNT19TVEFUSUNTID0ge1xuICAnJCR0eXBlb2YnOiB0cnVlLFxuICBjb21wYXJlOiB0cnVlLFxuICBkZWZhdWx0UHJvcHM6IHRydWUsXG4gIGRpc3BsYXlOYW1lOiB0cnVlLFxuICBwcm9wVHlwZXM6IHRydWUsXG4gIHR5cGU6IHRydWVcbn07XG52YXIgVFlQRV9TVEFUSUNTID0ge307XG5UWVBFX1NUQVRJQ1NbcmVhY3RJcy5Gb3J3YXJkUmVmXSA9IEZPUldBUkRfUkVGX1NUQVRJQ1M7XG5UWVBFX1NUQVRJQ1NbcmVhY3RJcy5NZW1vXSA9IE1FTU9fU1RBVElDUztcblxuZnVuY3Rpb24gZ2V0U3RhdGljcyhjb21wb25lbnQpIHtcbiAgLy8gUmVhY3QgdjE2LjExIGFuZCBiZWxvd1xuICBpZiAocmVhY3RJcy5pc01lbW8oY29tcG9uZW50KSkge1xuICAgIHJldHVybiBNRU1PX1NUQVRJQ1M7XG4gIH0gLy8gUmVhY3QgdjE2LjEyIGFuZCBhYm92ZVxuXG5cbiAgcmV0dXJuIFRZUEVfU1RBVElDU1tjb21wb25lbnRbJyQkdHlwZW9mJ11dIHx8IFJFQUNUX1NUQVRJQ1M7XG59XG5cbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIGdldFByb3RvdHlwZU9mID0gT2JqZWN0LmdldFByb3RvdHlwZU9mO1xudmFyIG9iamVjdFByb3RvdHlwZSA9IE9iamVjdC5wcm90b3R5cGU7XG5mdW5jdGlvbiBob2lzdE5vblJlYWN0U3RhdGljcyh0YXJnZXRDb21wb25lbnQsIHNvdXJjZUNvbXBvbmVudCwgYmxhY2tsaXN0KSB7XG4gIGlmICh0eXBlb2Ygc291cmNlQ29tcG9uZW50ICE9PSAnc3RyaW5nJykge1xuICAgIC8vIGRvbid0IGhvaXN0IG92ZXIgc3RyaW5nIChodG1sKSBjb21wb25lbnRzXG4gICAgaWYgKG9iamVjdFByb3RvdHlwZSkge1xuICAgICAgdmFyIGluaGVyaXRlZENvbXBvbmVudCA9IGdldFByb3RvdHlwZU9mKHNvdXJjZUNvbXBvbmVudCk7XG5cbiAgICAgIGlmIChpbmhlcml0ZWRDb21wb25lbnQgJiYgaW5oZXJpdGVkQ29tcG9uZW50ICE9PSBvYmplY3RQcm90b3R5cGUpIHtcbiAgICAgICAgaG9pc3ROb25SZWFjdFN0YXRpY3ModGFyZ2V0Q29tcG9uZW50LCBpbmhlcml0ZWRDb21wb25lbnQsIGJsYWNrbGlzdCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzKHNvdXJjZUNvbXBvbmVudCk7XG5cbiAgICBpZiAoZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgICBrZXlzID0ga2V5cy5jb25jYXQoZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZUNvbXBvbmVudCkpO1xuICAgIH1cblxuICAgIHZhciB0YXJnZXRTdGF0aWNzID0gZ2V0U3RhdGljcyh0YXJnZXRDb21wb25lbnQpO1xuICAgIHZhciBzb3VyY2VTdGF0aWNzID0gZ2V0U3RhdGljcyhzb3VyY2VDb21wb25lbnQpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXTtcblxuICAgICAgaWYgKCFLTk9XTl9TVEFUSUNTW2tleV0gJiYgIShibGFja2xpc3QgJiYgYmxhY2tsaXN0W2tleV0pICYmICEoc291cmNlU3RhdGljcyAmJiBzb3VyY2VTdGF0aWNzW2tleV0pICYmICEodGFyZ2V0U3RhdGljcyAmJiB0YXJnZXRTdGF0aWNzW2tleV0pKSB7XG4gICAgICAgIHZhciBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZUNvbXBvbmVudCwga2V5KTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIEF2b2lkIGZhaWx1cmVzIGZyb20gcmVhZC1vbmx5IHByb3BlcnRpZXNcbiAgICAgICAgICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXRDb21wb25lbnQsIGtleSwgZGVzY3JpcHRvcik7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldENvbXBvbmVudDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBob2lzdE5vblJlYWN0U3RhdGljcztcbiIsICIvKipcbiAqIGNocm9tYS5qcyAtIEphdmFTY3JpcHQgbGlicmFyeSBmb3IgY29sb3IgY29udmVyc2lvbnNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTEtMjAxOSwgR3JlZ29yIEFpc2NoXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG4gKlxuICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gKiBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAqXG4gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsXG4gKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uXG4gKiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cbiAqXG4gKiAzLiBUaGUgbmFtZSBHcmVnb3IgQWlzY2ggbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0c1xuICogZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG4gKlxuICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCJcbiAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEVcbiAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxuICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgR1JFR09SIEFJU0NIIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsXG4gKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORyxcbiAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsXG4gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZXG4gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElOR1xuICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLFxuICogRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKlxuICogY2hyb21hLmpzIGluY2x1ZGVzIGNvbG9ycyBmcm9tIGNvbG9yYnJld2VyMi5vcmcsIHdoaWNoIGFyZSByZWxlYXNlZCB1bmRlclxuICogdGhlIGZvbGxvd2luZyBsaWNlbnNlOlxuICpcbiAqIENvcHlyaWdodCAoYykgMjAwMiBDeW50aGlhIEJyZXdlciwgTWFyayBIYXJyb3dlcixcbiAqIGFuZCBUaGUgUGVubnN5bHZhbmlhIFN0YXRlIFVuaXZlcnNpdHkuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLFxuICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW5cbiAqIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsXG4gKiBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpY1xuICogbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqXG4gKiBOYW1lZCBjb2xvcnMgYXJlIHRha2VuIGZyb20gWDExIENvbG9yIE5hbWVzLlxuICogaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1jb2xvci8jc3ZnLWNvbG9yXG4gKlxuICogQHByZXNlcnZlXG4gKi9cblxuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKSA6XG4gICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKGZhY3RvcnkpIDpcbiAgICAoZ2xvYmFsID0gdHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsVGhpcyA6IGdsb2JhbCB8fCBzZWxmLCBnbG9iYWwuY2hyb21hID0gZmFjdG9yeSgpKTtcbn0pKHRoaXMsIChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIHZhciBsaW1pdCQyID0gZnVuY3Rpb24gKHgsIG1pbiwgbWF4KSB7XG4gICAgICAgIGlmICggbWluID09PSB2b2lkIDAgKSBtaW49MDtcbiAgICAgICAgaWYgKCBtYXggPT09IHZvaWQgMCApIG1heD0xO1xuXG4gICAgICAgIHJldHVybiB4IDwgbWluID8gbWluIDogeCA+IG1heCA/IG1heCA6IHg7XG4gICAgfTtcblxuICAgIHZhciBsaW1pdCQxID0gbGltaXQkMjtcblxuICAgIHZhciBjbGlwX3JnYiQzID0gZnVuY3Rpb24gKHJnYikge1xuICAgICAgICByZ2IuX2NsaXBwZWQgPSBmYWxzZTtcbiAgICAgICAgcmdiLl91bmNsaXBwZWQgPSByZ2Iuc2xpY2UoMCk7XG4gICAgICAgIGZvciAodmFyIGk9MDsgaTw9MzsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoaSA8IDMpIHtcbiAgICAgICAgICAgICAgICBpZiAocmdiW2ldIDwgMCB8fCByZ2JbaV0gPiAyNTUpIHsgcmdiLl9jbGlwcGVkID0gdHJ1ZTsgfVxuICAgICAgICAgICAgICAgIHJnYltpXSA9IGxpbWl0JDEocmdiW2ldLCAwLCAyNTUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpID09PSAzKSB7XG4gICAgICAgICAgICAgICAgcmdiW2ldID0gbGltaXQkMShyZ2JbaV0sIDAsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZ2I7XG4gICAgfTtcblxuICAgIC8vIHBvcnRlZCBmcm9tIGpRdWVyeSdzICQudHlwZVxuICAgIHZhciBjbGFzc1RvVHlwZSA9IHt9O1xuICAgIGZvciAodmFyIGkkMSA9IDAsIGxpc3QkMSA9IFsnQm9vbGVhbicsICdOdW1iZXInLCAnU3RyaW5nJywgJ0Z1bmN0aW9uJywgJ0FycmF5JywgJ0RhdGUnLCAnUmVnRXhwJywgJ1VuZGVmaW5lZCcsICdOdWxsJ107IGkkMSA8IGxpc3QkMS5sZW5ndGg7IGkkMSArPSAxKSB7XG4gICAgICAgIHZhciBuYW1lID0gbGlzdCQxW2kkMV07XG5cbiAgICAgICAgY2xhc3NUb1R5cGVbKFwiW29iamVjdCBcIiArIG5hbWUgKyBcIl1cIildID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cbiAgICB2YXIgdHlwZSRwID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgICAgIHJldHVybiBjbGFzc1RvVHlwZVtPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKV0gfHwgXCJvYmplY3RcIjtcbiAgICB9O1xuXG4gICAgdmFyIHR5cGUkbyA9IHR5cGUkcDtcblxuICAgIHZhciB1bnBhY2skQiA9IGZ1bmN0aW9uIChhcmdzLCBrZXlPcmRlcikge1xuICAgICAgICBpZiAoIGtleU9yZGVyID09PSB2b2lkIDAgKSBrZXlPcmRlcj1udWxsO1xuXG4gICAgXHQvLyBpZiBjYWxsZWQgd2l0aCBtb3JlIHRoYW4gMyBhcmd1bWVudHMsIHdlIHJldHVybiB0aGUgYXJndW1lbnRzXG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA+PSAzKSB7IHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmdzKTsgfVxuICAgICAgICAvLyB3aXRoIGxlc3MgdGhhbiAzIGFyZ3Mgd2UgY2hlY2sgaWYgZmlyc3QgYXJnIGlzIG9iamVjdFxuICAgICAgICAvLyBhbmQgdXNlIHRoZSBrZXlPcmRlciBzdHJpbmcgdG8gZXh0cmFjdCBhbmQgc29ydCBwcm9wZXJ0aWVzXG4gICAgXHRpZiAodHlwZSRvKGFyZ3NbMF0pID09ICdvYmplY3QnICYmIGtleU9yZGVyKSB7XG4gICAgXHRcdHJldHVybiBrZXlPcmRlci5zcGxpdCgnJylcbiAgICBcdFx0XHQuZmlsdGVyKGZ1bmN0aW9uIChrKSB7IHJldHVybiBhcmdzWzBdW2tdICE9PSB1bmRlZmluZWQ7IH0pXG4gICAgXHRcdFx0Lm1hcChmdW5jdGlvbiAoaykgeyByZXR1cm4gYXJnc1swXVtrXTsgfSk7XG4gICAgXHR9XG4gICAgXHQvLyBvdGhlcndpc2Ugd2UganVzdCByZXR1cm4gdGhlIGZpcnN0IGFyZ3VtZW50XG4gICAgXHQvLyAod2hpY2ggd2Ugc3VwcG9zZSBpcyBhbiBhcnJheSBvZiBhcmdzKVxuICAgICAgICByZXR1cm4gYXJnc1swXTtcbiAgICB9O1xuXG4gICAgdmFyIHR5cGUkbiA9IHR5cGUkcDtcblxuICAgIHZhciBsYXN0JDQgPSBmdW5jdGlvbiAoYXJncykge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggPCAyKSB7IHJldHVybiBudWxsOyB9XG4gICAgICAgIHZhciBsID0gYXJncy5sZW5ndGgtMTtcbiAgICAgICAgaWYgKHR5cGUkbihhcmdzW2xdKSA9PSAnc3RyaW5nJykgeyByZXR1cm4gYXJnc1tsXS50b0xvd2VyQ2FzZSgpOyB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG5cbiAgICB2YXIgUEkkMiA9IE1hdGguUEk7XG5cbiAgICB2YXIgdXRpbHMgPSB7XG4gICAgXHRjbGlwX3JnYjogY2xpcF9yZ2IkMyxcbiAgICBcdGxpbWl0OiBsaW1pdCQyLFxuICAgIFx0dHlwZTogdHlwZSRwLFxuICAgIFx0dW5wYWNrOiB1bnBhY2skQixcbiAgICBcdGxhc3Q6IGxhc3QkNCxcbiAgICBcdFBJOiBQSSQyLFxuICAgIFx0VFdPUEk6IFBJJDIqMixcbiAgICBcdFBJVEhJUkQ6IFBJJDIvMyxcbiAgICBcdERFRzJSQUQ6IFBJJDIgLyAxODAsXG4gICAgXHRSQUQyREVHOiAxODAgLyBQSSQyXG4gICAgfTtcblxuICAgIHZhciBpbnB1dCRoID0ge1xuICAgIFx0Zm9ybWF0OiB7fSxcbiAgICBcdGF1dG9kZXRlY3Q6IFtdXG4gICAgfTtcblxuICAgIHZhciBsYXN0JDMgPSB1dGlscy5sYXN0O1xuICAgIHZhciBjbGlwX3JnYiQyID0gdXRpbHMuY2xpcF9yZ2I7XG4gICAgdmFyIHR5cGUkbSA9IHV0aWxzLnR5cGU7XG4gICAgdmFyIF9pbnB1dCA9IGlucHV0JGg7XG5cbiAgICB2YXIgQ29sb3IkRCA9IGZ1bmN0aW9uIENvbG9yKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHZhciBtZSA9IHRoaXM7XG4gICAgICAgIGlmICh0eXBlJG0oYXJnc1swXSkgPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgICBhcmdzWzBdLmNvbnN0cnVjdG9yICYmXG4gICAgICAgICAgICBhcmdzWzBdLmNvbnN0cnVjdG9yID09PSB0aGlzLmNvbnN0cnVjdG9yKSB7XG4gICAgICAgICAgICAvLyB0aGUgYXJndW1lbnQgaXMgYWxyZWFkeSBhIENvbG9yIGluc3RhbmNlXG4gICAgICAgICAgICByZXR1cm4gYXJnc1swXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGxhc3QgYXJndW1lbnQgY291bGQgYmUgdGhlIG1vZGVcbiAgICAgICAgdmFyIG1vZGUgPSBsYXN0JDMoYXJncyk7XG4gICAgICAgIHZhciBhdXRvZGV0ZWN0ID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKCFtb2RlKSB7XG4gICAgICAgICAgICBhdXRvZGV0ZWN0ID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghX2lucHV0LnNvcnRlZCkge1xuICAgICAgICAgICAgICAgIF9pbnB1dC5hdXRvZGV0ZWN0ID0gX2lucHV0LmF1dG9kZXRlY3Quc29ydChmdW5jdGlvbiAoYSxiKSB7IHJldHVybiBiLnAgLSBhLnA7IH0pO1xuICAgICAgICAgICAgICAgIF9pbnB1dC5zb3J0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gYXV0by1kZXRlY3QgZm9ybWF0XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGlzdCA9IF9pbnB1dC5hdXRvZGV0ZWN0OyBpIDwgbGlzdC5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgIHZhciBjaGsgPSBsaXN0W2ldO1xuXG4gICAgICAgICAgICAgICAgbW9kZSA9IGNoay50ZXN0LmFwcGx5KGNoaywgYXJncyk7XG4gICAgICAgICAgICAgICAgaWYgKG1vZGUpIHsgYnJlYWs7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChfaW5wdXQuZm9ybWF0W21vZGVdKSB7XG4gICAgICAgICAgICB2YXIgcmdiID0gX2lucHV0LmZvcm1hdFttb2RlXS5hcHBseShudWxsLCBhdXRvZGV0ZWN0ID8gYXJncyA6IGFyZ3Muc2xpY2UoMCwtMSkpO1xuICAgICAgICAgICAgbWUuX3JnYiA9IGNsaXBfcmdiJDIocmdiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93biBmb3JtYXQ6ICcrYXJncyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBhZGQgYWxwaGEgY2hhbm5lbFxuICAgICAgICBpZiAobWUuX3JnYi5sZW5ndGggPT09IDMpIHsgbWUuX3JnYi5wdXNoKDEpOyB9XG4gICAgfTtcblxuICAgIENvbG9yJEQucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcgKCkge1xuICAgICAgICBpZiAodHlwZSRtKHRoaXMuaGV4KSA9PSAnZnVuY3Rpb24nKSB7IHJldHVybiB0aGlzLmhleCgpOyB9XG4gICAgICAgIHJldHVybiAoXCJbXCIgKyAodGhpcy5fcmdiLmpvaW4oJywnKSkgKyBcIl1cIik7XG4gICAgfTtcblxuICAgIHZhciBDb2xvcl8xID0gQ29sb3IkRDtcblxuICAgIHZhciBjaHJvbWEkayA9IGZ1bmN0aW9uICgpIHtcbiAgICBcdHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgXHR3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgXHRyZXR1cm4gbmV3IChGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5hcHBseSggY2hyb21hJGsuQ29sb3IsIFsgbnVsbCBdLmNvbmNhdCggYXJncykgKSk7XG4gICAgfTtcblxuICAgIGNocm9tYSRrLkNvbG9yID0gQ29sb3JfMTtcbiAgICBjaHJvbWEkay52ZXJzaW9uID0gJzIuNC4yJztcblxuICAgIHZhciBjaHJvbWFfMSA9IGNocm9tYSRrO1xuXG4gICAgdmFyIHVucGFjayRBID0gdXRpbHMudW5wYWNrO1xuICAgIHZhciBtYXgkMiA9IE1hdGgubWF4O1xuXG4gICAgdmFyIHJnYjJjbXlrJDEgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgdmFyIHJlZiA9IHVucGFjayRBKGFyZ3MsICdyZ2InKTtcbiAgICAgICAgdmFyIHIgPSByZWZbMF07XG4gICAgICAgIHZhciBnID0gcmVmWzFdO1xuICAgICAgICB2YXIgYiA9IHJlZlsyXTtcbiAgICAgICAgciA9IHIgLyAyNTU7XG4gICAgICAgIGcgPSBnIC8gMjU1O1xuICAgICAgICBiID0gYiAvIDI1NTtcbiAgICAgICAgdmFyIGsgPSAxIC0gbWF4JDIocixtYXgkMihnLGIpKTtcbiAgICAgICAgdmFyIGYgPSBrIDwgMSA/IDEgLyAoMS1rKSA6IDA7XG4gICAgICAgIHZhciBjID0gKDEtci1rKSAqIGY7XG4gICAgICAgIHZhciBtID0gKDEtZy1rKSAqIGY7XG4gICAgICAgIHZhciB5ID0gKDEtYi1rKSAqIGY7XG4gICAgICAgIHJldHVybiBbYyxtLHksa107XG4gICAgfTtcblxuICAgIHZhciByZ2IyY215a18xID0gcmdiMmNteWskMTtcblxuICAgIHZhciB1bnBhY2skeiA9IHV0aWxzLnVucGFjaztcblxuICAgIHZhciBjbXlrMnJnYiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICBhcmdzID0gdW5wYWNrJHooYXJncywgJ2NteWsnKTtcbiAgICAgICAgdmFyIGMgPSBhcmdzWzBdO1xuICAgICAgICB2YXIgbSA9IGFyZ3NbMV07XG4gICAgICAgIHZhciB5ID0gYXJnc1syXTtcbiAgICAgICAgdmFyIGsgPSBhcmdzWzNdO1xuICAgICAgICB2YXIgYWxwaGEgPSBhcmdzLmxlbmd0aCA+IDQgPyBhcmdzWzRdIDogMTtcbiAgICAgICAgaWYgKGsgPT09IDEpIHsgcmV0dXJuIFswLDAsMCxhbHBoYV07IH1cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIGMgPj0gMSA/IDAgOiAyNTUgKiAoMS1jKSAqICgxLWspLCAvLyByXG4gICAgICAgICAgICBtID49IDEgPyAwIDogMjU1ICogKDEtbSkgKiAoMS1rKSwgLy8gZ1xuICAgICAgICAgICAgeSA+PSAxID8gMCA6IDI1NSAqICgxLXkpICogKDEtayksIC8vIGJcbiAgICAgICAgICAgIGFscGhhXG4gICAgICAgIF07XG4gICAgfTtcblxuICAgIHZhciBjbXlrMnJnYl8xID0gY215azJyZ2I7XG5cbiAgICB2YXIgY2hyb21hJGogPSBjaHJvbWFfMTtcbiAgICB2YXIgQ29sb3IkQyA9IENvbG9yXzE7XG4gICAgdmFyIGlucHV0JGcgPSBpbnB1dCRoO1xuICAgIHZhciB1bnBhY2skeSA9IHV0aWxzLnVucGFjaztcbiAgICB2YXIgdHlwZSRsID0gdXRpbHMudHlwZTtcblxuICAgIHZhciByZ2IyY215ayA9IHJnYjJjbXlrXzE7XG5cbiAgICBDb2xvciRDLnByb3RvdHlwZS5jbXlrID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiByZ2IyY215ayh0aGlzLl9yZ2IpO1xuICAgIH07XG5cbiAgICBjaHJvbWEkai5jbXlrID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHJldHVybiBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KCBDb2xvciRDLCBbIG51bGwgXS5jb25jYXQoIGFyZ3MsIFsnY215ayddKSApKTtcbiAgICB9O1xuXG4gICAgaW5wdXQkZy5mb3JtYXQuY215ayA9IGNteWsycmdiXzE7XG5cbiAgICBpbnB1dCRnLmF1dG9kZXRlY3QucHVzaCh7XG4gICAgICAgIHA6IDIsXG4gICAgICAgIHRlc3Q6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgICAgICBhcmdzID0gdW5wYWNrJHkoYXJncywgJ2NteWsnKTtcbiAgICAgICAgICAgIGlmICh0eXBlJGwoYXJncykgPT09ICdhcnJheScgJiYgYXJncy5sZW5ndGggPT09IDQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2NteWsnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICB2YXIgdW5wYWNrJHggPSB1dGlscy51bnBhY2s7XG4gICAgdmFyIGxhc3QkMiA9IHV0aWxzLmxhc3Q7XG4gICAgdmFyIHJuZCA9IGZ1bmN0aW9uIChhKSB7IHJldHVybiBNYXRoLnJvdW5kKGEqMTAwKS8xMDA7IH07XG5cbiAgICAvKlxuICAgICAqIHN1cHBvcnRlZCBhcmd1bWVudHM6XG4gICAgICogLSBoc2wyY3NzKGgscyxsKVxuICAgICAqIC0gaHNsMmNzcyhoLHMsbCxhKVxuICAgICAqIC0gaHNsMmNzcyhbaCxzLGxdLCBtb2RlKVxuICAgICAqIC0gaHNsMmNzcyhbaCxzLGwsYV0sIG1vZGUpXG4gICAgICogLSBoc2wyY3NzKHtoLHMsbCxhfSwgbW9kZSlcbiAgICAgKi9cbiAgICB2YXIgaHNsMmNzcyQxID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHZhciBoc2xhID0gdW5wYWNrJHgoYXJncywgJ2hzbGEnKTtcbiAgICAgICAgdmFyIG1vZGUgPSBsYXN0JDIoYXJncykgfHwgJ2xzYSc7XG4gICAgICAgIGhzbGFbMF0gPSBybmQoaHNsYVswXSB8fCAwKTtcbiAgICAgICAgaHNsYVsxXSA9IHJuZChoc2xhWzFdKjEwMCkgKyAnJSc7XG4gICAgICAgIGhzbGFbMl0gPSBybmQoaHNsYVsyXSoxMDApICsgJyUnO1xuICAgICAgICBpZiAobW9kZSA9PT0gJ2hzbGEnIHx8IChoc2xhLmxlbmd0aCA+IDMgJiYgaHNsYVszXTwxKSkge1xuICAgICAgICAgICAgaHNsYVszXSA9IGhzbGEubGVuZ3RoID4gMyA/IGhzbGFbM10gOiAxO1xuICAgICAgICAgICAgbW9kZSA9ICdoc2xhJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGhzbGEubGVuZ3RoID0gMztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKG1vZGUgKyBcIihcIiArIChoc2xhLmpvaW4oJywnKSkgKyBcIilcIik7XG4gICAgfTtcblxuICAgIHZhciBoc2wyY3NzXzEgPSBoc2wyY3NzJDE7XG5cbiAgICB2YXIgdW5wYWNrJHcgPSB1dGlscy51bnBhY2s7XG5cbiAgICAvKlxuICAgICAqIHN1cHBvcnRlZCBhcmd1bWVudHM6XG4gICAgICogLSByZ2IyaHNsKHIsZyxiKVxuICAgICAqIC0gcmdiMmhzbChyLGcsYixhKVxuICAgICAqIC0gcmdiMmhzbChbcixnLGJdKVxuICAgICAqIC0gcmdiMmhzbChbcixnLGIsYV0pXG4gICAgICogLSByZ2IyaHNsKHtyLGcsYixhfSlcbiAgICAgKi9cbiAgICB2YXIgcmdiMmhzbCQzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIGFyZ3MgPSB1bnBhY2skdyhhcmdzLCAncmdiYScpO1xuICAgICAgICB2YXIgciA9IGFyZ3NbMF07XG4gICAgICAgIHZhciBnID0gYXJnc1sxXTtcbiAgICAgICAgdmFyIGIgPSBhcmdzWzJdO1xuXG4gICAgICAgIHIgLz0gMjU1O1xuICAgICAgICBnIC89IDI1NTtcbiAgICAgICAgYiAvPSAyNTU7XG5cbiAgICAgICAgdmFyIG1pbiA9IE1hdGgubWluKHIsIGcsIGIpO1xuICAgICAgICB2YXIgbWF4ID0gTWF0aC5tYXgociwgZywgYik7XG5cbiAgICAgICAgdmFyIGwgPSAobWF4ICsgbWluKSAvIDI7XG4gICAgICAgIHZhciBzLCBoO1xuXG4gICAgICAgIGlmIChtYXggPT09IG1pbil7XG4gICAgICAgICAgICBzID0gMDtcbiAgICAgICAgICAgIGggPSBOdW1iZXIuTmFOO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcyA9IGwgPCAwLjUgPyAobWF4IC0gbWluKSAvIChtYXggKyBtaW4pIDogKG1heCAtIG1pbikgLyAoMiAtIG1heCAtIG1pbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAociA9PSBtYXgpIHsgaCA9IChnIC0gYikgLyAobWF4IC0gbWluKTsgfVxuICAgICAgICBlbHNlIGlmIChnID09IG1heCkgeyBoID0gMiArIChiIC0gcikgLyAobWF4IC0gbWluKTsgfVxuICAgICAgICBlbHNlIGlmIChiID09IG1heCkgeyBoID0gNCArIChyIC0gZykgLyAobWF4IC0gbWluKTsgfVxuXG4gICAgICAgIGggKj0gNjA7XG4gICAgICAgIGlmIChoIDwgMCkgeyBoICs9IDM2MDsgfVxuICAgICAgICBpZiAoYXJncy5sZW5ndGg+MyAmJiBhcmdzWzNdIT09dW5kZWZpbmVkKSB7IHJldHVybiBbaCxzLGwsYXJnc1szXV07IH1cbiAgICAgICAgcmV0dXJuIFtoLHMsbF07XG4gICAgfTtcblxuICAgIHZhciByZ2IyaHNsXzEgPSByZ2IyaHNsJDM7XG5cbiAgICB2YXIgdW5wYWNrJHYgPSB1dGlscy51bnBhY2s7XG4gICAgdmFyIGxhc3QkMSA9IHV0aWxzLmxhc3Q7XG4gICAgdmFyIGhzbDJjc3MgPSBoc2wyY3NzXzE7XG4gICAgdmFyIHJnYjJoc2wkMiA9IHJnYjJoc2xfMTtcbiAgICB2YXIgcm91bmQkNiA9IE1hdGgucm91bmQ7XG5cbiAgICAvKlxuICAgICAqIHN1cHBvcnRlZCBhcmd1bWVudHM6XG4gICAgICogLSByZ2IyY3NzKHIsZyxiKVxuICAgICAqIC0gcmdiMmNzcyhyLGcsYixhKVxuICAgICAqIC0gcmdiMmNzcyhbcixnLGJdLCBtb2RlKVxuICAgICAqIC0gcmdiMmNzcyhbcixnLGIsYV0sIG1vZGUpXG4gICAgICogLSByZ2IyY3NzKHtyLGcsYixhfSwgbW9kZSlcbiAgICAgKi9cbiAgICB2YXIgcmdiMmNzcyQxID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHZhciByZ2JhID0gdW5wYWNrJHYoYXJncywgJ3JnYmEnKTtcbiAgICAgICAgdmFyIG1vZGUgPSBsYXN0JDEoYXJncykgfHwgJ3JnYic7XG4gICAgICAgIGlmIChtb2RlLnN1YnN0cigwLDMpID09ICdoc2wnKSB7XG4gICAgICAgICAgICByZXR1cm4gaHNsMmNzcyhyZ2IyaHNsJDIocmdiYSksIG1vZGUpO1xuICAgICAgICB9XG4gICAgICAgIHJnYmFbMF0gPSByb3VuZCQ2KHJnYmFbMF0pO1xuICAgICAgICByZ2JhWzFdID0gcm91bmQkNihyZ2JhWzFdKTtcbiAgICAgICAgcmdiYVsyXSA9IHJvdW5kJDYocmdiYVsyXSk7XG4gICAgICAgIGlmIChtb2RlID09PSAncmdiYScgfHwgKHJnYmEubGVuZ3RoID4gMyAmJiByZ2JhWzNdPDEpKSB7XG4gICAgICAgICAgICByZ2JhWzNdID0gcmdiYS5sZW5ndGggPiAzID8gcmdiYVszXSA6IDE7XG4gICAgICAgICAgICBtb2RlID0gJ3JnYmEnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAobW9kZSArIFwiKFwiICsgKHJnYmEuc2xpY2UoMCxtb2RlPT09J3JnYic/Mzo0KS5qb2luKCcsJykpICsgXCIpXCIpO1xuICAgIH07XG5cbiAgICB2YXIgcmdiMmNzc18xID0gcmdiMmNzcyQxO1xuXG4gICAgdmFyIHVucGFjayR1ID0gdXRpbHMudW5wYWNrO1xuICAgIHZhciByb3VuZCQ1ID0gTWF0aC5yb3VuZDtcblxuICAgIHZhciBoc2wycmdiJDEgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhc3NpZ247XG5cbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcbiAgICAgICAgYXJncyA9IHVucGFjayR1KGFyZ3MsICdoc2wnKTtcbiAgICAgICAgdmFyIGggPSBhcmdzWzBdO1xuICAgICAgICB2YXIgcyA9IGFyZ3NbMV07XG4gICAgICAgIHZhciBsID0gYXJnc1syXTtcbiAgICAgICAgdmFyIHIsZyxiO1xuICAgICAgICBpZiAocyA9PT0gMCkge1xuICAgICAgICAgICAgciA9IGcgPSBiID0gbCoyNTU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgdDMgPSBbMCwwLDBdO1xuICAgICAgICAgICAgdmFyIGMgPSBbMCwwLDBdO1xuICAgICAgICAgICAgdmFyIHQyID0gbCA8IDAuNSA/IGwgKiAoMStzKSA6IGwrcy1sKnM7XG4gICAgICAgICAgICB2YXIgdDEgPSAyICogbCAtIHQyO1xuICAgICAgICAgICAgdmFyIGhfID0gaCAvIDM2MDtcbiAgICAgICAgICAgIHQzWzBdID0gaF8gKyAxLzM7XG4gICAgICAgICAgICB0M1sxXSA9IGhfO1xuICAgICAgICAgICAgdDNbMl0gPSBoXyAtIDEvMztcbiAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaTwzOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAodDNbaV0gPCAwKSB7IHQzW2ldICs9IDE7IH1cbiAgICAgICAgICAgICAgICBpZiAodDNbaV0gPiAxKSB7IHQzW2ldIC09IDE7IH1cbiAgICAgICAgICAgICAgICBpZiAoNiAqIHQzW2ldIDwgMSlcbiAgICAgICAgICAgICAgICAgICAgeyBjW2ldID0gdDEgKyAodDIgLSB0MSkgKiA2ICogdDNbaV07IH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICgyICogdDNbaV0gPCAxKVxuICAgICAgICAgICAgICAgICAgICB7IGNbaV0gPSB0MjsgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKDMgKiB0M1tpXSA8IDIpXG4gICAgICAgICAgICAgICAgICAgIHsgY1tpXSA9IHQxICsgKHQyIC0gdDEpICogKCgyIC8gMykgLSB0M1tpXSkgKiA2OyB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB7IGNbaV0gPSB0MTsgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgKGFzc2lnbiA9IFtyb3VuZCQ1KGNbMF0qMjU1KSxyb3VuZCQ1KGNbMV0qMjU1KSxyb3VuZCQ1KGNbMl0qMjU1KV0sIHIgPSBhc3NpZ25bMF0sIGcgPSBhc3NpZ25bMV0sIGIgPSBhc3NpZ25bMl0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA+IDMpIHtcbiAgICAgICAgICAgIC8vIGtlZXAgYWxwaGEgY2hhbm5lbFxuICAgICAgICAgICAgcmV0dXJuIFtyLGcsYixhcmdzWzNdXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW3IsZyxiLDFdO1xuICAgIH07XG5cbiAgICB2YXIgaHNsMnJnYl8xID0gaHNsMnJnYiQxO1xuXG4gICAgdmFyIGhzbDJyZ2IgPSBoc2wycmdiXzE7XG4gICAgdmFyIGlucHV0JGYgPSBpbnB1dCRoO1xuXG4gICAgdmFyIFJFX1JHQiA9IC9ecmdiXFwoXFxzKigtP1xcZCspLFxccyooLT9cXGQrKVxccyosXFxzKigtP1xcZCspXFxzKlxcKSQvO1xuICAgIHZhciBSRV9SR0JBID0gL15yZ2JhXFwoXFxzKigtP1xcZCspLFxccyooLT9cXGQrKVxccyosXFxzKigtP1xcZCspXFxzKixcXHMqKFswMV18WzAxXT9cXC5cXGQrKVxcKSQvO1xuICAgIHZhciBSRV9SR0JfUENUID0gL15yZ2JcXChcXHMqKC0/XFxkKyg/OlxcLlxcZCspPyklLFxccyooLT9cXGQrKD86XFwuXFxkKyk/KSVcXHMqLFxccyooLT9cXGQrKD86XFwuXFxkKyk/KSVcXHMqXFwpJC87XG4gICAgdmFyIFJFX1JHQkFfUENUID0gL15yZ2JhXFwoXFxzKigtP1xcZCsoPzpcXC5cXGQrKT8pJSxcXHMqKC0/XFxkKyg/OlxcLlxcZCspPyklXFxzKixcXHMqKC0/XFxkKyg/OlxcLlxcZCspPyklXFxzKixcXHMqKFswMV18WzAxXT9cXC5cXGQrKVxcKSQvO1xuICAgIHZhciBSRV9IU0wgPSAvXmhzbFxcKFxccyooLT9cXGQrKD86XFwuXFxkKyk/KSxcXHMqKC0/XFxkKyg/OlxcLlxcZCspPyklXFxzKixcXHMqKC0/XFxkKyg/OlxcLlxcZCspPyklXFxzKlxcKSQvO1xuICAgIHZhciBSRV9IU0xBID0gL15oc2xhXFwoXFxzKigtP1xcZCsoPzpcXC5cXGQrKT8pLFxccyooLT9cXGQrKD86XFwuXFxkKyk/KSVcXHMqLFxccyooLT9cXGQrKD86XFwuXFxkKyk/KSVcXHMqLFxccyooWzAxXXxbMDFdP1xcLlxcZCspXFwpJC87XG5cbiAgICB2YXIgcm91bmQkNCA9IE1hdGgucm91bmQ7XG5cbiAgICB2YXIgY3NzMnJnYiQxID0gZnVuY3Rpb24gKGNzcykge1xuICAgICAgICBjc3MgPSBjc3MudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgICAgIHZhciBtO1xuXG4gICAgICAgIGlmIChpbnB1dCRmLmZvcm1hdC5uYW1lZCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5wdXQkZi5mb3JtYXQubmFtZWQoY3NzKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHJnYigyNTAsMjAsMClcbiAgICAgICAgaWYgKChtID0gY3NzLm1hdGNoKFJFX1JHQikpKSB7XG4gICAgICAgICAgICB2YXIgcmdiID0gbS5zbGljZSgxLDQpO1xuICAgICAgICAgICAgZm9yICh2YXIgaT0wOyBpPDM7IGkrKykge1xuICAgICAgICAgICAgICAgIHJnYltpXSA9ICtyZ2JbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZ2JbM10gPSAxOyAgLy8gZGVmYXVsdCBhbHBoYVxuICAgICAgICAgICAgcmV0dXJuIHJnYjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHJnYmEoMjUwLDIwLDAsMC40KVxuICAgICAgICBpZiAoKG0gPSBjc3MubWF0Y2goUkVfUkdCQSkpKSB7XG4gICAgICAgICAgICB2YXIgcmdiJDEgPSBtLnNsaWNlKDEsNSk7XG4gICAgICAgICAgICBmb3IgKHZhciBpJDE9MDsgaSQxPDQ7IGkkMSsrKSB7XG4gICAgICAgICAgICAgICAgcmdiJDFbaSQxXSA9ICtyZ2IkMVtpJDFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJnYiQxO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcmdiKDEwMCUsMCUsMCUpXG4gICAgICAgIGlmICgobSA9IGNzcy5tYXRjaChSRV9SR0JfUENUKSkpIHtcbiAgICAgICAgICAgIHZhciByZ2IkMiA9IG0uc2xpY2UoMSw0KTtcbiAgICAgICAgICAgIGZvciAodmFyIGkkMj0wOyBpJDI8MzsgaSQyKyspIHtcbiAgICAgICAgICAgICAgICByZ2IkMltpJDJdID0gcm91bmQkNChyZ2IkMltpJDJdICogMi41NSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZ2IkMlszXSA9IDE7ICAvLyBkZWZhdWx0IGFscGhhXG4gICAgICAgICAgICByZXR1cm4gcmdiJDI7XG4gICAgICAgIH1cblxuICAgICAgICAvLyByZ2JhKDEwMCUsMCUsMCUsMC40KVxuICAgICAgICBpZiAoKG0gPSBjc3MubWF0Y2goUkVfUkdCQV9QQ1QpKSkge1xuICAgICAgICAgICAgdmFyIHJnYiQzID0gbS5zbGljZSgxLDUpO1xuICAgICAgICAgICAgZm9yICh2YXIgaSQzPTA7IGkkMzwzOyBpJDMrKykge1xuICAgICAgICAgICAgICAgIHJnYiQzW2kkM10gPSByb3VuZCQ0KHJnYiQzW2kkM10gKiAyLjU1KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJnYiQzWzNdID0gK3JnYiQzWzNdO1xuICAgICAgICAgICAgcmV0dXJuIHJnYiQzO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaHNsKDAsMTAwJSw1MCUpXG4gICAgICAgIGlmICgobSA9IGNzcy5tYXRjaChSRV9IU0wpKSkge1xuICAgICAgICAgICAgdmFyIGhzbCA9IG0uc2xpY2UoMSw0KTtcbiAgICAgICAgICAgIGhzbFsxXSAqPSAwLjAxO1xuICAgICAgICAgICAgaHNsWzJdICo9IDAuMDE7XG4gICAgICAgICAgICB2YXIgcmdiJDQgPSBoc2wycmdiKGhzbCk7XG4gICAgICAgICAgICByZ2IkNFszXSA9IDE7XG4gICAgICAgICAgICByZXR1cm4gcmdiJDQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBoc2xhKDAsMTAwJSw1MCUsMC41KVxuICAgICAgICBpZiAoKG0gPSBjc3MubWF0Y2goUkVfSFNMQSkpKSB7XG4gICAgICAgICAgICB2YXIgaHNsJDEgPSBtLnNsaWNlKDEsNCk7XG4gICAgICAgICAgICBoc2wkMVsxXSAqPSAwLjAxO1xuICAgICAgICAgICAgaHNsJDFbMl0gKj0gMC4wMTtcbiAgICAgICAgICAgIHZhciByZ2IkNSA9IGhzbDJyZ2IoaHNsJDEpO1xuICAgICAgICAgICAgcmdiJDVbM10gPSArbVs0XTsgIC8vIGRlZmF1bHQgYWxwaGEgPSAxXG4gICAgICAgICAgICByZXR1cm4gcmdiJDU7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgY3NzMnJnYiQxLnRlc3QgPSBmdW5jdGlvbiAocykge1xuICAgICAgICByZXR1cm4gUkVfUkdCLnRlc3QocykgfHxcbiAgICAgICAgICAgIFJFX1JHQkEudGVzdChzKSB8fFxuICAgICAgICAgICAgUkVfUkdCX1BDVC50ZXN0KHMpIHx8XG4gICAgICAgICAgICBSRV9SR0JBX1BDVC50ZXN0KHMpIHx8XG4gICAgICAgICAgICBSRV9IU0wudGVzdChzKSB8fFxuICAgICAgICAgICAgUkVfSFNMQS50ZXN0KHMpO1xuICAgIH07XG5cbiAgICB2YXIgY3NzMnJnYl8xID0gY3NzMnJnYiQxO1xuXG4gICAgdmFyIGNocm9tYSRpID0gY2hyb21hXzE7XG4gICAgdmFyIENvbG9yJEIgPSBDb2xvcl8xO1xuICAgIHZhciBpbnB1dCRlID0gaW5wdXQkaDtcbiAgICB2YXIgdHlwZSRrID0gdXRpbHMudHlwZTtcblxuICAgIHZhciByZ2IyY3NzID0gcmdiMmNzc18xO1xuICAgIHZhciBjc3MycmdiID0gY3NzMnJnYl8xO1xuXG4gICAgQ29sb3IkQi5wcm90b3R5cGUuY3NzID0gZnVuY3Rpb24obW9kZSkge1xuICAgICAgICByZXR1cm4gcmdiMmNzcyh0aGlzLl9yZ2IsIG1vZGUpO1xuICAgIH07XG5cbiAgICBjaHJvbWEkaS5jc3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgcmV0dXJuIG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYXBwbHkoIENvbG9yJEIsIFsgbnVsbCBdLmNvbmNhdCggYXJncywgWydjc3MnXSkgKSk7XG4gICAgfTtcblxuICAgIGlucHV0JGUuZm9ybWF0LmNzcyA9IGNzczJyZ2I7XG5cbiAgICBpbnB1dCRlLmF1dG9kZXRlY3QucHVzaCh7XG4gICAgICAgIHA6IDUsXG4gICAgICAgIHRlc3Q6IGZ1bmN0aW9uIChoKSB7XG4gICAgICAgICAgICB2YXIgcmVzdCA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIHdoaWxlICggbGVuLS0gPiAwICkgcmVzdFsgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiArIDEgXTtcblxuICAgICAgICAgICAgaWYgKCFyZXN0Lmxlbmd0aCAmJiB0eXBlJGsoaCkgPT09ICdzdHJpbmcnICYmIGNzczJyZ2IudGVzdChoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnY3NzJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgdmFyIENvbG9yJEEgPSBDb2xvcl8xO1xuICAgIHZhciBjaHJvbWEkaCA9IGNocm9tYV8xO1xuICAgIHZhciBpbnB1dCRkID0gaW5wdXQkaDtcbiAgICB2YXIgdW5wYWNrJHQgPSB1dGlscy51bnBhY2s7XG5cbiAgICBpbnB1dCRkLmZvcm1hdC5nbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICB2YXIgcmdiID0gdW5wYWNrJHQoYXJncywgJ3JnYmEnKTtcbiAgICAgICAgcmdiWzBdICo9IDI1NTtcbiAgICAgICAgcmdiWzFdICo9IDI1NTtcbiAgICAgICAgcmdiWzJdICo9IDI1NTtcbiAgICAgICAgcmV0dXJuIHJnYjtcbiAgICB9O1xuXG4gICAgY2hyb21hJGguZ2wgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgcmV0dXJuIG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYXBwbHkoIENvbG9yJEEsIFsgbnVsbCBdLmNvbmNhdCggYXJncywgWydnbCddKSApKTtcbiAgICB9O1xuXG4gICAgQ29sb3IkQS5wcm90b3R5cGUuZ2wgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHJnYiA9IHRoaXMuX3JnYjtcbiAgICAgICAgcmV0dXJuIFtyZ2JbMF0vMjU1LCByZ2JbMV0vMjU1LCByZ2JbMl0vMjU1LCByZ2JbM11dO1xuICAgIH07XG5cbiAgICB2YXIgdW5wYWNrJHMgPSB1dGlscy51bnBhY2s7XG5cbiAgICB2YXIgcmdiMmhjZyQxID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHZhciByZWYgPSB1bnBhY2skcyhhcmdzLCAncmdiJyk7XG4gICAgICAgIHZhciByID0gcmVmWzBdO1xuICAgICAgICB2YXIgZyA9IHJlZlsxXTtcbiAgICAgICAgdmFyIGIgPSByZWZbMl07XG4gICAgICAgIHZhciBtaW4gPSBNYXRoLm1pbihyLCBnLCBiKTtcbiAgICAgICAgdmFyIG1heCA9IE1hdGgubWF4KHIsIGcsIGIpO1xuICAgICAgICB2YXIgZGVsdGEgPSBtYXggLSBtaW47XG4gICAgICAgIHZhciBjID0gZGVsdGEgKiAxMDAgLyAyNTU7XG4gICAgICAgIHZhciBfZyA9IG1pbiAvICgyNTUgLSBkZWx0YSkgKiAxMDA7XG4gICAgICAgIHZhciBoO1xuICAgICAgICBpZiAoZGVsdGEgPT09IDApIHtcbiAgICAgICAgICAgIGggPSBOdW1iZXIuTmFOO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHIgPT09IG1heCkgeyBoID0gKGcgLSBiKSAvIGRlbHRhOyB9XG4gICAgICAgICAgICBpZiAoZyA9PT0gbWF4KSB7IGggPSAyKyhiIC0gcikgLyBkZWx0YTsgfVxuICAgICAgICAgICAgaWYgKGIgPT09IG1heCkgeyBoID0gNCsociAtIGcpIC8gZGVsdGE7IH1cbiAgICAgICAgICAgIGggKj0gNjA7XG4gICAgICAgICAgICBpZiAoaCA8IDApIHsgaCArPSAzNjA7IH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW2gsIGMsIF9nXTtcbiAgICB9O1xuXG4gICAgdmFyIHJnYjJoY2dfMSA9IHJnYjJoY2ckMTtcblxuICAgIHZhciB1bnBhY2skciA9IHV0aWxzLnVucGFjaztcbiAgICB2YXIgZmxvb3IkMyA9IE1hdGguZmxvb3I7XG5cbiAgICAvKlxuICAgICAqIHRoaXMgaXMgYmFzaWNhbGx5IGp1c3QgSFNWIHdpdGggc29tZSBtaW5vciB0d2Vha3NcbiAgICAgKlxuICAgICAqIGh1ZS4uIFswLi4zNjBdXG4gICAgICogY2hyb21hIC4uIFswLi4xXVxuICAgICAqIGdyYXluZXNzIC4uIFswLi4xXVxuICAgICAqL1xuXG4gICAgdmFyIGhjZzJyZ2IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhc3NpZ24sIGFzc2lnbiQxLCBhc3NpZ24kMiwgYXNzaWduJDMsIGFzc2lnbiQ0LCBhc3NpZ24kNTtcblxuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuICAgICAgICBhcmdzID0gdW5wYWNrJHIoYXJncywgJ2hjZycpO1xuICAgICAgICB2YXIgaCA9IGFyZ3NbMF07XG4gICAgICAgIHZhciBjID0gYXJnc1sxXTtcbiAgICAgICAgdmFyIF9nID0gYXJnc1syXTtcbiAgICAgICAgdmFyIHIsZyxiO1xuICAgICAgICBfZyA9IF9nICogMjU1O1xuICAgICAgICB2YXIgX2MgPSBjICogMjU1O1xuICAgICAgICBpZiAoYyA9PT0gMCkge1xuICAgICAgICAgICAgciA9IGcgPSBiID0gX2c7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoaCA9PT0gMzYwKSB7IGggPSAwOyB9XG4gICAgICAgICAgICBpZiAoaCA+IDM2MCkgeyBoIC09IDM2MDsgfVxuICAgICAgICAgICAgaWYgKGggPCAwKSB7IGggKz0gMzYwOyB9XG4gICAgICAgICAgICBoIC89IDYwO1xuICAgICAgICAgICAgdmFyIGkgPSBmbG9vciQzKGgpO1xuICAgICAgICAgICAgdmFyIGYgPSBoIC0gaTtcbiAgICAgICAgICAgIHZhciBwID0gX2cgKiAoMSAtIGMpO1xuICAgICAgICAgICAgdmFyIHEgPSBwICsgX2MgKiAoMSAtIGYpO1xuICAgICAgICAgICAgdmFyIHQgPSBwICsgX2MgKiBmO1xuICAgICAgICAgICAgdmFyIHYgPSBwICsgX2M7XG4gICAgICAgICAgICBzd2l0Y2ggKGkpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6IChhc3NpZ24gPSBbdiwgdCwgcF0sIHIgPSBhc3NpZ25bMF0sIGcgPSBhc3NpZ25bMV0sIGIgPSBhc3NpZ25bMl0pOyBicmVha1xuICAgICAgICAgICAgICAgIGNhc2UgMTogKGFzc2lnbiQxID0gW3EsIHYsIHBdLCByID0gYXNzaWduJDFbMF0sIGcgPSBhc3NpZ24kMVsxXSwgYiA9IGFzc2lnbiQxWzJdKTsgYnJlYWtcbiAgICAgICAgICAgICAgICBjYXNlIDI6IChhc3NpZ24kMiA9IFtwLCB2LCB0XSwgciA9IGFzc2lnbiQyWzBdLCBnID0gYXNzaWduJDJbMV0sIGIgPSBhc3NpZ24kMlsyXSk7IGJyZWFrXG4gICAgICAgICAgICAgICAgY2FzZSAzOiAoYXNzaWduJDMgPSBbcCwgcSwgdl0sIHIgPSBhc3NpZ24kM1swXSwgZyA9IGFzc2lnbiQzWzFdLCBiID0gYXNzaWduJDNbMl0pOyBicmVha1xuICAgICAgICAgICAgICAgIGNhc2UgNDogKGFzc2lnbiQ0ID0gW3QsIHAsIHZdLCByID0gYXNzaWduJDRbMF0sIGcgPSBhc3NpZ24kNFsxXSwgYiA9IGFzc2lnbiQ0WzJdKTsgYnJlYWtcbiAgICAgICAgICAgICAgICBjYXNlIDU6IChhc3NpZ24kNSA9IFt2LCBwLCBxXSwgciA9IGFzc2lnbiQ1WzBdLCBnID0gYXNzaWduJDVbMV0sIGIgPSBhc3NpZ24kNVsyXSk7IGJyZWFrXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtyLCBnLCBiLCBhcmdzLmxlbmd0aCA+IDMgPyBhcmdzWzNdIDogMV07XG4gICAgfTtcblxuICAgIHZhciBoY2cycmdiXzEgPSBoY2cycmdiO1xuXG4gICAgdmFyIHVucGFjayRxID0gdXRpbHMudW5wYWNrO1xuICAgIHZhciB0eXBlJGogPSB1dGlscy50eXBlO1xuICAgIHZhciBjaHJvbWEkZyA9IGNocm9tYV8xO1xuICAgIHZhciBDb2xvciR6ID0gQ29sb3JfMTtcbiAgICB2YXIgaW5wdXQkYyA9IGlucHV0JGg7XG5cbiAgICB2YXIgcmdiMmhjZyA9IHJnYjJoY2dfMTtcblxuICAgIENvbG9yJHoucHJvdG90eXBlLmhjZyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gcmdiMmhjZyh0aGlzLl9yZ2IpO1xuICAgIH07XG5cbiAgICBjaHJvbWEkZy5oY2cgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgcmV0dXJuIG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYXBwbHkoIENvbG9yJHosIFsgbnVsbCBdLmNvbmNhdCggYXJncywgWydoY2cnXSkgKSk7XG4gICAgfTtcblxuICAgIGlucHV0JGMuZm9ybWF0LmhjZyA9IGhjZzJyZ2JfMTtcblxuICAgIGlucHV0JGMuYXV0b2RldGVjdC5wdXNoKHtcbiAgICAgICAgcDogMSxcbiAgICAgICAgdGVzdDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgICAgIGFyZ3MgPSB1bnBhY2skcShhcmdzLCAnaGNnJyk7XG4gICAgICAgICAgICBpZiAodHlwZSRqKGFyZ3MpID09PSAnYXJyYXknICYmIGFyZ3MubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdoY2cnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICB2YXIgdW5wYWNrJHAgPSB1dGlscy51bnBhY2s7XG4gICAgdmFyIGxhc3QgPSB1dGlscy5sYXN0O1xuICAgIHZhciByb3VuZCQzID0gTWF0aC5yb3VuZDtcblxuICAgIHZhciByZ2IyaGV4JDIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgdmFyIHJlZiA9IHVucGFjayRwKGFyZ3MsICdyZ2JhJyk7XG4gICAgICAgIHZhciByID0gcmVmWzBdO1xuICAgICAgICB2YXIgZyA9IHJlZlsxXTtcbiAgICAgICAgdmFyIGIgPSByZWZbMl07XG4gICAgICAgIHZhciBhID0gcmVmWzNdO1xuICAgICAgICB2YXIgbW9kZSA9IGxhc3QoYXJncykgfHwgJ2F1dG8nO1xuICAgICAgICBpZiAoYSA9PT0gdW5kZWZpbmVkKSB7IGEgPSAxOyB9XG4gICAgICAgIGlmIChtb2RlID09PSAnYXV0bycpIHtcbiAgICAgICAgICAgIG1vZGUgPSBhIDwgMSA/ICdyZ2JhJyA6ICdyZ2InO1xuICAgICAgICB9XG4gICAgICAgIHIgPSByb3VuZCQzKHIpO1xuICAgICAgICBnID0gcm91bmQkMyhnKTtcbiAgICAgICAgYiA9IHJvdW5kJDMoYik7XG4gICAgICAgIHZhciB1ID0gciA8PCAxNiB8IGcgPDwgOCB8IGI7XG4gICAgICAgIHZhciBzdHIgPSBcIjAwMDAwMFwiICsgdS50b1N0cmluZygxNik7IC8vIy50b1VwcGVyQ2FzZSgpO1xuICAgICAgICBzdHIgPSBzdHIuc3Vic3RyKHN0ci5sZW5ndGggLSA2KTtcbiAgICAgICAgdmFyIGh4YSA9ICcwJyArIHJvdW5kJDMoYSAqIDI1NSkudG9TdHJpbmcoMTYpO1xuICAgICAgICBoeGEgPSBoeGEuc3Vic3RyKGh4YS5sZW5ndGggLSAyKTtcbiAgICAgICAgc3dpdGNoIChtb2RlLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgJ3JnYmEnOiByZXR1cm4gKFwiI1wiICsgc3RyICsgaHhhKTtcbiAgICAgICAgICAgIGNhc2UgJ2FyZ2InOiByZXR1cm4gKFwiI1wiICsgaHhhICsgc3RyKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVybiAoXCIjXCIgKyBzdHIpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHZhciByZ2IyaGV4XzEgPSByZ2IyaGV4JDI7XG5cbiAgICB2YXIgUkVfSEVYID0gL14jPyhbQS1GYS1mMC05XXs2fXxbQS1GYS1mMC05XXszfSkkLztcbiAgICB2YXIgUkVfSEVYQSA9IC9eIz8oW0EtRmEtZjAtOV17OH18W0EtRmEtZjAtOV17NH0pJC87XG5cbiAgICB2YXIgaGV4MnJnYiQxID0gZnVuY3Rpb24gKGhleCkge1xuICAgICAgICBpZiAoaGV4Lm1hdGNoKFJFX0hFWCkpIHtcbiAgICAgICAgICAgIC8vIHJlbW92ZSBvcHRpb25hbCBsZWFkaW5nICNcbiAgICAgICAgICAgIGlmIChoZXgubGVuZ3RoID09PSA0IHx8IGhleC5sZW5ndGggPT09IDcpIHtcbiAgICAgICAgICAgICAgICBoZXggPSBoZXguc3Vic3RyKDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZXhwYW5kIHNob3J0LW5vdGF0aW9uIHRvIGZ1bGwgc2l4LWRpZ2l0XG4gICAgICAgICAgICBpZiAoaGV4Lmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgICAgIGhleCA9IGhleC5zcGxpdCgnJyk7XG4gICAgICAgICAgICAgICAgaGV4ID0gaGV4WzBdK2hleFswXStoZXhbMV0raGV4WzFdK2hleFsyXStoZXhbMl07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgdSA9IHBhcnNlSW50KGhleCwgMTYpO1xuICAgICAgICAgICAgdmFyIHIgPSB1ID4+IDE2O1xuICAgICAgICAgICAgdmFyIGcgPSB1ID4+IDggJiAweEZGO1xuICAgICAgICAgICAgdmFyIGIgPSB1ICYgMHhGRjtcbiAgICAgICAgICAgIHJldHVybiBbcixnLGIsMV07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBtYXRjaCByZ2JhIGhleCBmb3JtYXQsIGVnICNGRjAwMDA3N1xuICAgICAgICBpZiAoaGV4Lm1hdGNoKFJFX0hFWEEpKSB7XG4gICAgICAgICAgICBpZiAoaGV4Lmxlbmd0aCA9PT0gNSB8fCBoZXgubGVuZ3RoID09PSA5KSB7XG4gICAgICAgICAgICAgICAgLy8gcmVtb3ZlIG9wdGlvbmFsIGxlYWRpbmcgI1xuICAgICAgICAgICAgICAgIGhleCA9IGhleC5zdWJzdHIoMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBleHBhbmQgc2hvcnQtbm90YXRpb24gdG8gZnVsbCBlaWdodC1kaWdpdFxuICAgICAgICAgICAgaWYgKGhleC5sZW5ndGggPT09IDQpIHtcbiAgICAgICAgICAgICAgICBoZXggPSBoZXguc3BsaXQoJycpO1xuICAgICAgICAgICAgICAgIGhleCA9IGhleFswXStoZXhbMF0raGV4WzFdK2hleFsxXStoZXhbMl0raGV4WzJdK2hleFszXStoZXhbM107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgdSQxID0gcGFyc2VJbnQoaGV4LCAxNik7XG4gICAgICAgICAgICB2YXIgciQxID0gdSQxID4+IDI0ICYgMHhGRjtcbiAgICAgICAgICAgIHZhciBnJDEgPSB1JDEgPj4gMTYgJiAweEZGO1xuICAgICAgICAgICAgdmFyIGIkMSA9IHUkMSA+PiA4ICYgMHhGRjtcbiAgICAgICAgICAgIHZhciBhID0gTWF0aC5yb3VuZCgodSQxICYgMHhGRikgLyAweEZGICogMTAwKSAvIDEwMDtcbiAgICAgICAgICAgIHJldHVybiBbciQxLGckMSxiJDEsYV07XG4gICAgICAgIH1cblxuICAgICAgICAvLyB3ZSB1c2VkIHRvIGNoZWNrIGZvciBjc3MgY29sb3JzIGhlcmVcbiAgICAgICAgLy8gaWYgX2lucHV0LmNzcz8gYW5kIHJnYiA9IF9pbnB1dC5jc3MgaGV4XG4gICAgICAgIC8vICAgICByZXR1cm4gcmdiXG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKChcInVua25vd24gaGV4IGNvbG9yOiBcIiArIGhleCkpO1xuICAgIH07XG5cbiAgICB2YXIgaGV4MnJnYl8xID0gaGV4MnJnYiQxO1xuXG4gICAgdmFyIGNocm9tYSRmID0gY2hyb21hXzE7XG4gICAgdmFyIENvbG9yJHkgPSBDb2xvcl8xO1xuICAgIHZhciB0eXBlJGkgPSB1dGlscy50eXBlO1xuICAgIHZhciBpbnB1dCRiID0gaW5wdXQkaDtcblxuICAgIHZhciByZ2IyaGV4JDEgPSByZ2IyaGV4XzE7XG5cbiAgICBDb2xvciR5LnByb3RvdHlwZS5oZXggPSBmdW5jdGlvbihtb2RlKSB7XG4gICAgICAgIHJldHVybiByZ2IyaGV4JDEodGhpcy5fcmdiLCBtb2RlKTtcbiAgICB9O1xuXG4gICAgY2hyb21hJGYuaGV4ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHJldHVybiBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KCBDb2xvciR5LCBbIG51bGwgXS5jb25jYXQoIGFyZ3MsIFsnaGV4J10pICkpO1xuICAgIH07XG5cbiAgICBpbnB1dCRiLmZvcm1hdC5oZXggPSBoZXgycmdiXzE7XG4gICAgaW5wdXQkYi5hdXRvZGV0ZWN0LnB1c2goe1xuICAgICAgICBwOiA0LFxuICAgICAgICB0ZXN0OiBmdW5jdGlvbiAoaCkge1xuICAgICAgICAgICAgdmFyIHJlc3QgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICB3aGlsZSAoIGxlbi0tID4gMCApIHJlc3RbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gKyAxIF07XG5cbiAgICAgICAgICAgIGlmICghcmVzdC5sZW5ndGggJiYgdHlwZSRpKGgpID09PSAnc3RyaW5nJyAmJiBbMyw0LDUsNiw3LDgsOV0uaW5kZXhPZihoLmxlbmd0aCkgPj0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnaGV4JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgdmFyIHVucGFjayRvID0gdXRpbHMudW5wYWNrO1xuICAgIHZhciBUV09QSSQyID0gdXRpbHMuVFdPUEk7XG4gICAgdmFyIG1pbiQyID0gTWF0aC5taW47XG4gICAgdmFyIHNxcnQkNCA9IE1hdGguc3FydDtcbiAgICB2YXIgYWNvcyA9IE1hdGguYWNvcztcblxuICAgIHZhciByZ2IyaHNpJDEgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgLypcbiAgICAgICAgYm9ycm93ZWQgZnJvbSBoZXJlOlxuICAgICAgICBodHRwOi8vaHVtbWVyLnN0YW5mb3JkLmVkdS9tdXNlaW5mby9kb2MvZXhhbXBsZXMvaHVtZHJ1bS9rZXlzY2FwZTIvcmdiMmhzaS5jcHBcbiAgICAgICAgKi9cbiAgICAgICAgdmFyIHJlZiA9IHVucGFjayRvKGFyZ3MsICdyZ2InKTtcbiAgICAgICAgdmFyIHIgPSByZWZbMF07XG4gICAgICAgIHZhciBnID0gcmVmWzFdO1xuICAgICAgICB2YXIgYiA9IHJlZlsyXTtcbiAgICAgICAgciAvPSAyNTU7XG4gICAgICAgIGcgLz0gMjU1O1xuICAgICAgICBiIC89IDI1NTtcbiAgICAgICAgdmFyIGg7XG4gICAgICAgIHZhciBtaW5fID0gbWluJDIocixnLGIpO1xuICAgICAgICB2YXIgaSA9IChyK2crYikgLyAzO1xuICAgICAgICB2YXIgcyA9IGkgPiAwID8gMSAtIG1pbl8vaSA6IDA7XG4gICAgICAgIGlmIChzID09PSAwKSB7XG4gICAgICAgICAgICBoID0gTmFOO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaCA9ICgoci1nKSsoci1iKSkgLyAyO1xuICAgICAgICAgICAgaCAvPSBzcXJ0JDQoKHItZykqKHItZykgKyAoci1iKSooZy1iKSk7XG4gICAgICAgICAgICBoID0gYWNvcyhoKTtcbiAgICAgICAgICAgIGlmIChiID4gZykge1xuICAgICAgICAgICAgICAgIGggPSBUV09QSSQyIC0gaDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGggLz0gVFdPUEkkMjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW2gqMzYwLHMsaV07XG4gICAgfTtcblxuICAgIHZhciByZ2IyaHNpXzEgPSByZ2IyaHNpJDE7XG5cbiAgICB2YXIgdW5wYWNrJG4gPSB1dGlscy51bnBhY2s7XG4gICAgdmFyIGxpbWl0ID0gdXRpbHMubGltaXQ7XG4gICAgdmFyIFRXT1BJJDEgPSB1dGlscy5UV09QSTtcbiAgICB2YXIgUElUSElSRCA9IHV0aWxzLlBJVEhJUkQ7XG4gICAgdmFyIGNvcyQ0ID0gTWF0aC5jb3M7XG5cbiAgICAvKlxuICAgICAqIGh1ZSBbMC4uMzYwXVxuICAgICAqIHNhdHVyYXRpb24gWzAuLjFdXG4gICAgICogaW50ZW5zaXR5IFswLi4xXVxuICAgICAqL1xuICAgIHZhciBoc2kycmdiID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIC8qXG4gICAgICAgIGJvcnJvd2VkIGZyb20gaGVyZTpcbiAgICAgICAgaHR0cDovL2h1bW1lci5zdGFuZm9yZC5lZHUvbXVzZWluZm8vZG9jL2V4YW1wbGVzL2h1bWRydW0va2V5c2NhcGUyL2hzaTJyZ2IuY3BwXG4gICAgICAgICovXG4gICAgICAgIGFyZ3MgPSB1bnBhY2skbihhcmdzLCAnaHNpJyk7XG4gICAgICAgIHZhciBoID0gYXJnc1swXTtcbiAgICAgICAgdmFyIHMgPSBhcmdzWzFdO1xuICAgICAgICB2YXIgaSA9IGFyZ3NbMl07XG4gICAgICAgIHZhciByLGcsYjtcblxuICAgICAgICBpZiAoaXNOYU4oaCkpIHsgaCA9IDA7IH1cbiAgICAgICAgaWYgKGlzTmFOKHMpKSB7IHMgPSAwOyB9XG4gICAgICAgIC8vIG5vcm1hbGl6ZSBodWVcbiAgICAgICAgaWYgKGggPiAzNjApIHsgaCAtPSAzNjA7IH1cbiAgICAgICAgaWYgKGggPCAwKSB7IGggKz0gMzYwOyB9XG4gICAgICAgIGggLz0gMzYwO1xuICAgICAgICBpZiAoaCA8IDEvMykge1xuICAgICAgICAgICAgYiA9ICgxLXMpLzM7XG4gICAgICAgICAgICByID0gKDErcypjb3MkNChUV09QSSQxKmgpL2NvcyQ0KFBJVEhJUkQtVFdPUEkkMSpoKSkvMztcbiAgICAgICAgICAgIGcgPSAxIC0gKGIrcik7XG4gICAgICAgIH0gZWxzZSBpZiAoaCA8IDIvMykge1xuICAgICAgICAgICAgaCAtPSAxLzM7XG4gICAgICAgICAgICByID0gKDEtcykvMztcbiAgICAgICAgICAgIGcgPSAoMStzKmNvcyQ0KFRXT1BJJDEqaCkvY29zJDQoUElUSElSRC1UV09QSSQxKmgpKS8zO1xuICAgICAgICAgICAgYiA9IDEgLSAocitnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGggLT0gMi8zO1xuICAgICAgICAgICAgZyA9ICgxLXMpLzM7XG4gICAgICAgICAgICBiID0gKDErcypjb3MkNChUV09QSSQxKmgpL2NvcyQ0KFBJVEhJUkQtVFdPUEkkMSpoKSkvMztcbiAgICAgICAgICAgIHIgPSAxIC0gKGcrYik7XG4gICAgICAgIH1cbiAgICAgICAgciA9IGxpbWl0KGkqciozKTtcbiAgICAgICAgZyA9IGxpbWl0KGkqZyozKTtcbiAgICAgICAgYiA9IGxpbWl0KGkqYiozKTtcbiAgICAgICAgcmV0dXJuIFtyKjI1NSwgZyoyNTUsIGIqMjU1LCBhcmdzLmxlbmd0aCA+IDMgPyBhcmdzWzNdIDogMV07XG4gICAgfTtcblxuICAgIHZhciBoc2kycmdiXzEgPSBoc2kycmdiO1xuXG4gICAgdmFyIHVucGFjayRtID0gdXRpbHMudW5wYWNrO1xuICAgIHZhciB0eXBlJGggPSB1dGlscy50eXBlO1xuICAgIHZhciBjaHJvbWEkZSA9IGNocm9tYV8xO1xuICAgIHZhciBDb2xvciR4ID0gQ29sb3JfMTtcbiAgICB2YXIgaW5wdXQkYSA9IGlucHV0JGg7XG5cbiAgICB2YXIgcmdiMmhzaSA9IHJnYjJoc2lfMTtcblxuICAgIENvbG9yJHgucHJvdG90eXBlLmhzaSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gcmdiMmhzaSh0aGlzLl9yZ2IpO1xuICAgIH07XG5cbiAgICBjaHJvbWEkZS5oc2kgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgcmV0dXJuIG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYXBwbHkoIENvbG9yJHgsIFsgbnVsbCBdLmNvbmNhdCggYXJncywgWydoc2knXSkgKSk7XG4gICAgfTtcblxuICAgIGlucHV0JGEuZm9ybWF0LmhzaSA9IGhzaTJyZ2JfMTtcblxuICAgIGlucHV0JGEuYXV0b2RldGVjdC5wdXNoKHtcbiAgICAgICAgcDogMixcbiAgICAgICAgdGVzdDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgICAgIGFyZ3MgPSB1bnBhY2skbShhcmdzLCAnaHNpJyk7XG4gICAgICAgICAgICBpZiAodHlwZSRoKGFyZ3MpID09PSAnYXJyYXknICYmIGFyZ3MubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdoc2knO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICB2YXIgdW5wYWNrJGwgPSB1dGlscy51bnBhY2s7XG4gICAgdmFyIHR5cGUkZyA9IHV0aWxzLnR5cGU7XG4gICAgdmFyIGNocm9tYSRkID0gY2hyb21hXzE7XG4gICAgdmFyIENvbG9yJHcgPSBDb2xvcl8xO1xuICAgIHZhciBpbnB1dCQ5ID0gaW5wdXQkaDtcblxuICAgIHZhciByZ2IyaHNsJDEgPSByZ2IyaHNsXzE7XG5cbiAgICBDb2xvciR3LnByb3RvdHlwZS5oc2wgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHJnYjJoc2wkMSh0aGlzLl9yZ2IpO1xuICAgIH07XG5cbiAgICBjaHJvbWEkZC5oc2wgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgcmV0dXJuIG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYXBwbHkoIENvbG9yJHcsIFsgbnVsbCBdLmNvbmNhdCggYXJncywgWydoc2wnXSkgKSk7XG4gICAgfTtcblxuICAgIGlucHV0JDkuZm9ybWF0LmhzbCA9IGhzbDJyZ2JfMTtcblxuICAgIGlucHV0JDkuYXV0b2RldGVjdC5wdXNoKHtcbiAgICAgICAgcDogMixcbiAgICAgICAgdGVzdDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgICAgIGFyZ3MgPSB1bnBhY2skbChhcmdzLCAnaHNsJyk7XG4gICAgICAgICAgICBpZiAodHlwZSRnKGFyZ3MpID09PSAnYXJyYXknICYmIGFyZ3MubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdoc2wnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICB2YXIgdW5wYWNrJGsgPSB1dGlscy51bnBhY2s7XG4gICAgdmFyIG1pbiQxID0gTWF0aC5taW47XG4gICAgdmFyIG1heCQxID0gTWF0aC5tYXg7XG5cbiAgICAvKlxuICAgICAqIHN1cHBvcnRlZCBhcmd1bWVudHM6XG4gICAgICogLSByZ2IyaHN2KHIsZyxiKVxuICAgICAqIC0gcmdiMmhzdihbcixnLGJdKVxuICAgICAqIC0gcmdiMmhzdih7cixnLGJ9KVxuICAgICAqL1xuICAgIHZhciByZ2IyaHNsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIGFyZ3MgPSB1bnBhY2skayhhcmdzLCAncmdiJyk7XG4gICAgICAgIHZhciByID0gYXJnc1swXTtcbiAgICAgICAgdmFyIGcgPSBhcmdzWzFdO1xuICAgICAgICB2YXIgYiA9IGFyZ3NbMl07XG4gICAgICAgIHZhciBtaW5fID0gbWluJDEociwgZywgYik7XG4gICAgICAgIHZhciBtYXhfID0gbWF4JDEociwgZywgYik7XG4gICAgICAgIHZhciBkZWx0YSA9IG1heF8gLSBtaW5fO1xuICAgICAgICB2YXIgaCxzLHY7XG4gICAgICAgIHYgPSBtYXhfIC8gMjU1LjA7XG4gICAgICAgIGlmIChtYXhfID09PSAwKSB7XG4gICAgICAgICAgICBoID0gTnVtYmVyLk5hTjtcbiAgICAgICAgICAgIHMgPSAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcyA9IGRlbHRhIC8gbWF4XztcbiAgICAgICAgICAgIGlmIChyID09PSBtYXhfKSB7IGggPSAoZyAtIGIpIC8gZGVsdGE7IH1cbiAgICAgICAgICAgIGlmIChnID09PSBtYXhfKSB7IGggPSAyKyhiIC0gcikgLyBkZWx0YTsgfVxuICAgICAgICAgICAgaWYgKGIgPT09IG1heF8pIHsgaCA9IDQrKHIgLSBnKSAvIGRlbHRhOyB9XG4gICAgICAgICAgICBoICo9IDYwO1xuICAgICAgICAgICAgaWYgKGggPCAwKSB7IGggKz0gMzYwOyB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtoLCBzLCB2XVxuICAgIH07XG5cbiAgICB2YXIgcmdiMmhzdiQxID0gcmdiMmhzbDtcblxuICAgIHZhciB1bnBhY2skaiA9IHV0aWxzLnVucGFjaztcbiAgICB2YXIgZmxvb3IkMiA9IE1hdGguZmxvb3I7XG5cbiAgICB2YXIgaHN2MnJnYiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFzc2lnbiwgYXNzaWduJDEsIGFzc2lnbiQyLCBhc3NpZ24kMywgYXNzaWduJDQsIGFzc2lnbiQ1O1xuXG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG4gICAgICAgIGFyZ3MgPSB1bnBhY2skaihhcmdzLCAnaHN2Jyk7XG4gICAgICAgIHZhciBoID0gYXJnc1swXTtcbiAgICAgICAgdmFyIHMgPSBhcmdzWzFdO1xuICAgICAgICB2YXIgdiA9IGFyZ3NbMl07XG4gICAgICAgIHZhciByLGcsYjtcbiAgICAgICAgdiAqPSAyNTU7XG4gICAgICAgIGlmIChzID09PSAwKSB7XG4gICAgICAgICAgICByID0gZyA9IGIgPSB2O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGggPT09IDM2MCkgeyBoID0gMDsgfVxuICAgICAgICAgICAgaWYgKGggPiAzNjApIHsgaCAtPSAzNjA7IH1cbiAgICAgICAgICAgIGlmIChoIDwgMCkgeyBoICs9IDM2MDsgfVxuICAgICAgICAgICAgaCAvPSA2MDtcblxuICAgICAgICAgICAgdmFyIGkgPSBmbG9vciQyKGgpO1xuICAgICAgICAgICAgdmFyIGYgPSBoIC0gaTtcbiAgICAgICAgICAgIHZhciBwID0gdiAqICgxIC0gcyk7XG4gICAgICAgICAgICB2YXIgcSA9IHYgKiAoMSAtIHMgKiBmKTtcbiAgICAgICAgICAgIHZhciB0ID0gdiAqICgxIC0gcyAqICgxIC0gZikpO1xuXG4gICAgICAgICAgICBzd2l0Y2ggKGkpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6IChhc3NpZ24gPSBbdiwgdCwgcF0sIHIgPSBhc3NpZ25bMF0sIGcgPSBhc3NpZ25bMV0sIGIgPSBhc3NpZ25bMl0pOyBicmVha1xuICAgICAgICAgICAgICAgIGNhc2UgMTogKGFzc2lnbiQxID0gW3EsIHYsIHBdLCByID0gYXNzaWduJDFbMF0sIGcgPSBhc3NpZ24kMVsxXSwgYiA9IGFzc2lnbiQxWzJdKTsgYnJlYWtcbiAgICAgICAgICAgICAgICBjYXNlIDI6IChhc3NpZ24kMiA9IFtwLCB2LCB0XSwgciA9IGFzc2lnbiQyWzBdLCBnID0gYXNzaWduJDJbMV0sIGIgPSBhc3NpZ24kMlsyXSk7IGJyZWFrXG4gICAgICAgICAgICAgICAgY2FzZSAzOiAoYXNzaWduJDMgPSBbcCwgcSwgdl0sIHIgPSBhc3NpZ24kM1swXSwgZyA9IGFzc2lnbiQzWzFdLCBiID0gYXNzaWduJDNbMl0pOyBicmVha1xuICAgICAgICAgICAgICAgIGNhc2UgNDogKGFzc2lnbiQ0ID0gW3QsIHAsIHZdLCByID0gYXNzaWduJDRbMF0sIGcgPSBhc3NpZ24kNFsxXSwgYiA9IGFzc2lnbiQ0WzJdKTsgYnJlYWtcbiAgICAgICAgICAgICAgICBjYXNlIDU6IChhc3NpZ24kNSA9IFt2LCBwLCBxXSwgciA9IGFzc2lnbiQ1WzBdLCBnID0gYXNzaWduJDVbMV0sIGIgPSBhc3NpZ24kNVsyXSk7IGJyZWFrXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtyLGcsYixhcmdzLmxlbmd0aCA+IDM/YXJnc1szXToxXTtcbiAgICB9O1xuXG4gICAgdmFyIGhzdjJyZ2JfMSA9IGhzdjJyZ2I7XG5cbiAgICB2YXIgdW5wYWNrJGkgPSB1dGlscy51bnBhY2s7XG4gICAgdmFyIHR5cGUkZiA9IHV0aWxzLnR5cGU7XG4gICAgdmFyIGNocm9tYSRjID0gY2hyb21hXzE7XG4gICAgdmFyIENvbG9yJHYgPSBDb2xvcl8xO1xuICAgIHZhciBpbnB1dCQ4ID0gaW5wdXQkaDtcblxuICAgIHZhciByZ2IyaHN2ID0gcmdiMmhzdiQxO1xuXG4gICAgQ29sb3Ikdi5wcm90b3R5cGUuaHN2ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiByZ2IyaHN2KHRoaXMuX3JnYik7XG4gICAgfTtcblxuICAgIGNocm9tYSRjLmhzdiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICByZXR1cm4gbmV3IChGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5hcHBseSggQ29sb3IkdiwgWyBudWxsIF0uY29uY2F0KCBhcmdzLCBbJ2hzdiddKSApKTtcbiAgICB9O1xuXG4gICAgaW5wdXQkOC5mb3JtYXQuaHN2ID0gaHN2MnJnYl8xO1xuXG4gICAgaW5wdXQkOC5hdXRvZGV0ZWN0LnB1c2goe1xuICAgICAgICBwOiAyLFxuICAgICAgICB0ZXN0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICAgICAgYXJncyA9IHVucGFjayRpKGFyZ3MsICdoc3YnKTtcbiAgICAgICAgICAgIGlmICh0eXBlJGYoYXJncykgPT09ICdhcnJheScgJiYgYXJncy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hzdic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHZhciBsYWJDb25zdGFudHMgPSB7XG4gICAgICAgIC8vIENvcnJlc3BvbmRzIHJvdWdobHkgdG8gUkdCIGJyaWdodGVyL2RhcmtlclxuICAgICAgICBLbjogMTgsXG5cbiAgICAgICAgLy8gRDY1IHN0YW5kYXJkIHJlZmVyZW50XG4gICAgICAgIFhuOiAwLjk1MDQ3MCxcbiAgICAgICAgWW46IDEsXG4gICAgICAgIFpuOiAxLjA4ODgzMCxcblxuICAgICAgICB0MDogMC4xMzc5MzEwMzQsICAvLyA0IC8gMjlcbiAgICAgICAgdDE6IDAuMjA2ODk2NTUyLCAgLy8gNiAvIDI5XG4gICAgICAgIHQyOiAwLjEyODQxODU1LCAgIC8vIDMgKiB0MSAqIHQxXG4gICAgICAgIHQzOiAwLjAwODg1NjQ1MiwgIC8vIHQxICogdDEgKiB0MVxuICAgIH07XG5cbiAgICB2YXIgTEFCX0NPTlNUQU5UUyQzID0gbGFiQ29uc3RhbnRzO1xuICAgIHZhciB1bnBhY2skaCA9IHV0aWxzLnVucGFjaztcbiAgICB2YXIgcG93JGEgPSBNYXRoLnBvdztcblxuICAgIHZhciByZ2IybGFiJDIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgdmFyIHJlZiA9IHVucGFjayRoKGFyZ3MsICdyZ2InKTtcbiAgICAgICAgdmFyIHIgPSByZWZbMF07XG4gICAgICAgIHZhciBnID0gcmVmWzFdO1xuICAgICAgICB2YXIgYiA9IHJlZlsyXTtcbiAgICAgICAgdmFyIHJlZiQxID0gcmdiMnh5eihyLGcsYik7XG4gICAgICAgIHZhciB4ID0gcmVmJDFbMF07XG4gICAgICAgIHZhciB5ID0gcmVmJDFbMV07XG4gICAgICAgIHZhciB6ID0gcmVmJDFbMl07XG4gICAgICAgIHZhciBsID0gMTE2ICogeSAtIDE2O1xuICAgICAgICByZXR1cm4gW2wgPCAwID8gMCA6IGwsIDUwMCAqICh4IC0geSksIDIwMCAqICh5IC0geildO1xuICAgIH07XG5cbiAgICB2YXIgcmdiX3h5eiA9IGZ1bmN0aW9uIChyKSB7XG4gICAgICAgIGlmICgociAvPSAyNTUpIDw9IDAuMDQwNDUpIHsgcmV0dXJuIHIgLyAxMi45MjsgfVxuICAgICAgICByZXR1cm4gcG93JGEoKHIgKyAwLjA1NSkgLyAxLjA1NSwgMi40KTtcbiAgICB9O1xuXG4gICAgdmFyIHh5el9sYWIgPSBmdW5jdGlvbiAodCkge1xuICAgICAgICBpZiAodCA+IExBQl9DT05TVEFOVFMkMy50MykgeyByZXR1cm4gcG93JGEodCwgMSAvIDMpOyB9XG4gICAgICAgIHJldHVybiB0IC8gTEFCX0NPTlNUQU5UUyQzLnQyICsgTEFCX0NPTlNUQU5UUyQzLnQwO1xuICAgIH07XG5cbiAgICB2YXIgcmdiMnh5eiA9IGZ1bmN0aW9uIChyLGcsYikge1xuICAgICAgICByID0gcmdiX3h5eihyKTtcbiAgICAgICAgZyA9IHJnYl94eXooZyk7XG4gICAgICAgIGIgPSByZ2JfeHl6KGIpO1xuICAgICAgICB2YXIgeCA9IHh5el9sYWIoKDAuNDEyNDU2NCAqIHIgKyAwLjM1NzU3NjEgKiBnICsgMC4xODA0Mzc1ICogYikgLyBMQUJfQ09OU1RBTlRTJDMuWG4pO1xuICAgICAgICB2YXIgeSA9IHh5el9sYWIoKDAuMjEyNjcyOSAqIHIgKyAwLjcxNTE1MjIgKiBnICsgMC4wNzIxNzUwICogYikgLyBMQUJfQ09OU1RBTlRTJDMuWW4pO1xuICAgICAgICB2YXIgeiA9IHh5el9sYWIoKDAuMDE5MzMzOSAqIHIgKyAwLjExOTE5MjAgKiBnICsgMC45NTAzMDQxICogYikgLyBMQUJfQ09OU1RBTlRTJDMuWm4pO1xuICAgICAgICByZXR1cm4gW3gseSx6XTtcbiAgICB9O1xuXG4gICAgdmFyIHJnYjJsYWJfMSA9IHJnYjJsYWIkMjtcblxuICAgIHZhciBMQUJfQ09OU1RBTlRTJDIgPSBsYWJDb25zdGFudHM7XG4gICAgdmFyIHVucGFjayRnID0gdXRpbHMudW5wYWNrO1xuICAgIHZhciBwb3ckOSA9IE1hdGgucG93O1xuXG4gICAgLypcbiAgICAgKiBMKiBbMC4uMTAwXVxuICAgICAqIGEgWy0xMDAuLjEwMF1cbiAgICAgKiBiIFstMTAwLi4xMDBdXG4gICAgICovXG4gICAgdmFyIGxhYjJyZ2IkMSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICBhcmdzID0gdW5wYWNrJGcoYXJncywgJ2xhYicpO1xuICAgICAgICB2YXIgbCA9IGFyZ3NbMF07XG4gICAgICAgIHZhciBhID0gYXJnc1sxXTtcbiAgICAgICAgdmFyIGIgPSBhcmdzWzJdO1xuICAgICAgICB2YXIgeCx5LHosIHIsZyxiXztcblxuICAgICAgICB5ID0gKGwgKyAxNikgLyAxMTY7XG4gICAgICAgIHggPSBpc05hTihhKSA/IHkgOiB5ICsgYSAvIDUwMDtcbiAgICAgICAgeiA9IGlzTmFOKGIpID8geSA6IHkgLSBiIC8gMjAwO1xuXG4gICAgICAgIHkgPSBMQUJfQ09OU1RBTlRTJDIuWW4gKiBsYWJfeHl6KHkpO1xuICAgICAgICB4ID0gTEFCX0NPTlNUQU5UUyQyLlhuICogbGFiX3h5eih4KTtcbiAgICAgICAgeiA9IExBQl9DT05TVEFOVFMkMi5abiAqIGxhYl94eXooeik7XG5cbiAgICAgICAgciA9IHh5el9yZ2IoMy4yNDA0NTQyICogeCAtIDEuNTM3MTM4NSAqIHkgLSAwLjQ5ODUzMTQgKiB6KTsgIC8vIEQ2NSAtPiBzUkdCXG4gICAgICAgIGcgPSB4eXpfcmdiKC0wLjk2OTI2NjAgKiB4ICsgMS44NzYwMTA4ICogeSArIDAuMDQxNTU2MCAqIHopO1xuICAgICAgICBiXyA9IHh5el9yZ2IoMC4wNTU2NDM0ICogeCAtIDAuMjA0MDI1OSAqIHkgKyAxLjA1NzIyNTIgKiB6KTtcblxuICAgICAgICByZXR1cm4gW3IsZyxiXyxhcmdzLmxlbmd0aCA+IDMgPyBhcmdzWzNdIDogMV07XG4gICAgfTtcblxuICAgIHZhciB4eXpfcmdiID0gZnVuY3Rpb24gKHIpIHtcbiAgICAgICAgcmV0dXJuIDI1NSAqIChyIDw9IDAuMDAzMDQgPyAxMi45MiAqIHIgOiAxLjA1NSAqIHBvdyQ5KHIsIDEgLyAyLjQpIC0gMC4wNTUpXG4gICAgfTtcblxuICAgIHZhciBsYWJfeHl6ID0gZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgcmV0dXJuIHQgPiBMQUJfQ09OU1RBTlRTJDIudDEgPyB0ICogdCAqIHQgOiBMQUJfQ09OU1RBTlRTJDIudDIgKiAodCAtIExBQl9DT05TVEFOVFMkMi50MClcbiAgICB9O1xuXG4gICAgdmFyIGxhYjJyZ2JfMSA9IGxhYjJyZ2IkMTtcblxuICAgIHZhciB1bnBhY2skZiA9IHV0aWxzLnVucGFjaztcbiAgICB2YXIgdHlwZSRlID0gdXRpbHMudHlwZTtcbiAgICB2YXIgY2hyb21hJGIgPSBjaHJvbWFfMTtcbiAgICB2YXIgQ29sb3IkdSA9IENvbG9yXzE7XG4gICAgdmFyIGlucHV0JDcgPSBpbnB1dCRoO1xuXG4gICAgdmFyIHJnYjJsYWIkMSA9IHJnYjJsYWJfMTtcblxuICAgIENvbG9yJHUucHJvdG90eXBlLmxhYiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gcmdiMmxhYiQxKHRoaXMuX3JnYik7XG4gICAgfTtcblxuICAgIGNocm9tYSRiLmxhYiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICByZXR1cm4gbmV3IChGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5hcHBseSggQ29sb3IkdSwgWyBudWxsIF0uY29uY2F0KCBhcmdzLCBbJ2xhYiddKSApKTtcbiAgICB9O1xuXG4gICAgaW5wdXQkNy5mb3JtYXQubGFiID0gbGFiMnJnYl8xO1xuXG4gICAgaW5wdXQkNy5hdXRvZGV0ZWN0LnB1c2goe1xuICAgICAgICBwOiAyLFxuICAgICAgICB0ZXN0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICAgICAgYXJncyA9IHVucGFjayRmKGFyZ3MsICdsYWInKTtcbiAgICAgICAgICAgIGlmICh0eXBlJGUoYXJncykgPT09ICdhcnJheScgJiYgYXJncy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2xhYic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHZhciB1bnBhY2skZSA9IHV0aWxzLnVucGFjaztcbiAgICB2YXIgUkFEMkRFRyA9IHV0aWxzLlJBRDJERUc7XG4gICAgdmFyIHNxcnQkMyA9IE1hdGguc3FydDtcbiAgICB2YXIgYXRhbjIkMiA9IE1hdGguYXRhbjI7XG4gICAgdmFyIHJvdW5kJDIgPSBNYXRoLnJvdW5kO1xuXG4gICAgdmFyIGxhYjJsY2gkMiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICB2YXIgcmVmID0gdW5wYWNrJGUoYXJncywgJ2xhYicpO1xuICAgICAgICB2YXIgbCA9IHJlZlswXTtcbiAgICAgICAgdmFyIGEgPSByZWZbMV07XG4gICAgICAgIHZhciBiID0gcmVmWzJdO1xuICAgICAgICB2YXIgYyA9IHNxcnQkMyhhICogYSArIGIgKiBiKTtcbiAgICAgICAgdmFyIGggPSAoYXRhbjIkMihiLCBhKSAqIFJBRDJERUcgKyAzNjApICUgMzYwO1xuICAgICAgICBpZiAocm91bmQkMihjKjEwMDAwKSA9PT0gMCkgeyBoID0gTnVtYmVyLk5hTjsgfVxuICAgICAgICByZXR1cm4gW2wsIGMsIGhdO1xuICAgIH07XG5cbiAgICB2YXIgbGFiMmxjaF8xID0gbGFiMmxjaCQyO1xuXG4gICAgdmFyIHVucGFjayRkID0gdXRpbHMudW5wYWNrO1xuICAgIHZhciByZ2IybGFiID0gcmdiMmxhYl8xO1xuICAgIHZhciBsYWIybGNoJDEgPSBsYWIybGNoXzE7XG5cbiAgICB2YXIgcmdiMmxjaCQxID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHZhciByZWYgPSB1bnBhY2skZChhcmdzLCAncmdiJyk7XG4gICAgICAgIHZhciByID0gcmVmWzBdO1xuICAgICAgICB2YXIgZyA9IHJlZlsxXTtcbiAgICAgICAgdmFyIGIgPSByZWZbMl07XG4gICAgICAgIHZhciByZWYkMSA9IHJnYjJsYWIocixnLGIpO1xuICAgICAgICB2YXIgbCA9IHJlZiQxWzBdO1xuICAgICAgICB2YXIgYSA9IHJlZiQxWzFdO1xuICAgICAgICB2YXIgYl8gPSByZWYkMVsyXTtcbiAgICAgICAgcmV0dXJuIGxhYjJsY2gkMShsLGEsYl8pO1xuICAgIH07XG5cbiAgICB2YXIgcmdiMmxjaF8xID0gcmdiMmxjaCQxO1xuXG4gICAgdmFyIHVucGFjayRjID0gdXRpbHMudW5wYWNrO1xuICAgIHZhciBERUcyUkFEID0gdXRpbHMuREVHMlJBRDtcbiAgICB2YXIgc2luJDMgPSBNYXRoLnNpbjtcbiAgICB2YXIgY29zJDMgPSBNYXRoLmNvcztcblxuICAgIHZhciBsY2gybGFiJDIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgLypcbiAgICAgICAgQ29udmVydCBmcm9tIGEgcXVhbGl0YXRpdmUgcGFyYW1ldGVyIGggYW5kIGEgcXVhbnRpdGF0aXZlIHBhcmFtZXRlciBsIHRvIGEgMjQtYml0IHBpeGVsLlxuICAgICAgICBUaGVzZSBmb3JtdWxhcyB3ZXJlIGludmVudGVkIGJ5IERhdmlkIERhbHJ5bXBsZSB0byBvYnRhaW4gbWF4aW11bSBjb250cmFzdCB3aXRob3V0IGdvaW5nXG4gICAgICAgIG91dCBvZiBnYW11dCBpZiB0aGUgcGFyYW1ldGVycyBhcmUgaW4gdGhlIHJhbmdlIDAtMS5cblxuICAgICAgICBBIHNhdHVyYXRpb24gbXVsdGlwbGllciB3YXMgYWRkZWQgYnkgR3JlZ29yIEFpc2NoXG4gICAgICAgICovXG4gICAgICAgIHZhciByZWYgPSB1bnBhY2skYyhhcmdzLCAnbGNoJyk7XG4gICAgICAgIHZhciBsID0gcmVmWzBdO1xuICAgICAgICB2YXIgYyA9IHJlZlsxXTtcbiAgICAgICAgdmFyIGggPSByZWZbMl07XG4gICAgICAgIGlmIChpc05hTihoKSkgeyBoID0gMDsgfVxuICAgICAgICBoID0gaCAqIERFRzJSQUQ7XG4gICAgICAgIHJldHVybiBbbCwgY29zJDMoaCkgKiBjLCBzaW4kMyhoKSAqIGNdXG4gICAgfTtcblxuICAgIHZhciBsY2gybGFiXzEgPSBsY2gybGFiJDI7XG5cbiAgICB2YXIgdW5wYWNrJGIgPSB1dGlscy51bnBhY2s7XG4gICAgdmFyIGxjaDJsYWIkMSA9IGxjaDJsYWJfMTtcbiAgICB2YXIgbGFiMnJnYiA9IGxhYjJyZ2JfMTtcblxuICAgIHZhciBsY2gycmdiJDEgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgYXJncyA9IHVucGFjayRiKGFyZ3MsICdsY2gnKTtcbiAgICAgICAgdmFyIGwgPSBhcmdzWzBdO1xuICAgICAgICB2YXIgYyA9IGFyZ3NbMV07XG4gICAgICAgIHZhciBoID0gYXJnc1syXTtcbiAgICAgICAgdmFyIHJlZiA9IGxjaDJsYWIkMSAobCxjLGgpO1xuICAgICAgICB2YXIgTCA9IHJlZlswXTtcbiAgICAgICAgdmFyIGEgPSByZWZbMV07XG4gICAgICAgIHZhciBiXyA9IHJlZlsyXTtcbiAgICAgICAgdmFyIHJlZiQxID0gbGFiMnJnYiAoTCxhLGJfKTtcbiAgICAgICAgdmFyIHIgPSByZWYkMVswXTtcbiAgICAgICAgdmFyIGcgPSByZWYkMVsxXTtcbiAgICAgICAgdmFyIGIgPSByZWYkMVsyXTtcbiAgICAgICAgcmV0dXJuIFtyLCBnLCBiLCBhcmdzLmxlbmd0aCA+IDMgPyBhcmdzWzNdIDogMV07XG4gICAgfTtcblxuICAgIHZhciBsY2gycmdiXzEgPSBsY2gycmdiJDE7XG5cbiAgICB2YXIgdW5wYWNrJGEgPSB1dGlscy51bnBhY2s7XG4gICAgdmFyIGxjaDJyZ2IgPSBsY2gycmdiXzE7XG5cbiAgICB2YXIgaGNsMnJnYiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICB2YXIgaGNsID0gdW5wYWNrJGEoYXJncywgJ2hjbCcpLnJldmVyc2UoKTtcbiAgICAgICAgcmV0dXJuIGxjaDJyZ2IuYXBwbHkodm9pZCAwLCBoY2wpO1xuICAgIH07XG5cbiAgICB2YXIgaGNsMnJnYl8xID0gaGNsMnJnYjtcblxuICAgIHZhciB1bnBhY2skOSA9IHV0aWxzLnVucGFjaztcbiAgICB2YXIgdHlwZSRkID0gdXRpbHMudHlwZTtcbiAgICB2YXIgY2hyb21hJGEgPSBjaHJvbWFfMTtcbiAgICB2YXIgQ29sb3IkdCA9IENvbG9yXzE7XG4gICAgdmFyIGlucHV0JDYgPSBpbnB1dCRoO1xuXG4gICAgdmFyIHJnYjJsY2ggPSByZ2IybGNoXzE7XG5cbiAgICBDb2xvciR0LnByb3RvdHlwZS5sY2ggPSBmdW5jdGlvbigpIHsgcmV0dXJuIHJnYjJsY2godGhpcy5fcmdiKTsgfTtcbiAgICBDb2xvciR0LnByb3RvdHlwZS5oY2wgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHJnYjJsY2godGhpcy5fcmdiKS5yZXZlcnNlKCk7IH07XG5cbiAgICBjaHJvbWEkYS5sY2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgcmV0dXJuIG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYXBwbHkoIENvbG9yJHQsIFsgbnVsbCBdLmNvbmNhdCggYXJncywgWydsY2gnXSkgKSk7XG4gICAgfTtcbiAgICBjaHJvbWEkYS5oY2wgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgcmV0dXJuIG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYXBwbHkoIENvbG9yJHQsIFsgbnVsbCBdLmNvbmNhdCggYXJncywgWydoY2wnXSkgKSk7XG4gICAgfTtcblxuICAgIGlucHV0JDYuZm9ybWF0LmxjaCA9IGxjaDJyZ2JfMTtcbiAgICBpbnB1dCQ2LmZvcm1hdC5oY2wgPSBoY2wycmdiXzE7XG5cbiAgICBbJ2xjaCcsJ2hjbCddLmZvckVhY2goZnVuY3Rpb24gKG0pIHsgcmV0dXJuIGlucHV0JDYuYXV0b2RldGVjdC5wdXNoKHtcbiAgICAgICAgcDogMixcbiAgICAgICAgdGVzdDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgICAgIGFyZ3MgPSB1bnBhY2skOShhcmdzLCBtKTtcbiAgICAgICAgICAgIGlmICh0eXBlJGQoYXJncykgPT09ICdhcnJheScgJiYgYXJncy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pOyB9KTtcblxuICAgIC8qKlxuICAgIFx0WDExIGNvbG9yIG5hbWVzXG5cbiAgICBcdGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtY29sb3IvI3N2Zy1jb2xvclxuICAgICovXG5cbiAgICB2YXIgdzNjeDExJDEgPSB7XG4gICAgICAgIGFsaWNlYmx1ZTogJyNmMGY4ZmYnLFxuICAgICAgICBhbnRpcXVld2hpdGU6ICcjZmFlYmQ3JyxcbiAgICAgICAgYXF1YTogJyMwMGZmZmYnLFxuICAgICAgICBhcXVhbWFyaW5lOiAnIzdmZmZkNCcsXG4gICAgICAgIGF6dXJlOiAnI2YwZmZmZicsXG4gICAgICAgIGJlaWdlOiAnI2Y1ZjVkYycsXG4gICAgICAgIGJpc3F1ZTogJyNmZmU0YzQnLFxuICAgICAgICBibGFjazogJyMwMDAwMDAnLFxuICAgICAgICBibGFuY2hlZGFsbW9uZDogJyNmZmViY2QnLFxuICAgICAgICBibHVlOiAnIzAwMDBmZicsXG4gICAgICAgIGJsdWV2aW9sZXQ6ICcjOGEyYmUyJyxcbiAgICAgICAgYnJvd246ICcjYTUyYTJhJyxcbiAgICAgICAgYnVybHl3b29kOiAnI2RlYjg4NycsXG4gICAgICAgIGNhZGV0Ymx1ZTogJyM1ZjllYTAnLFxuICAgICAgICBjaGFydHJldXNlOiAnIzdmZmYwMCcsXG4gICAgICAgIGNob2NvbGF0ZTogJyNkMjY5MWUnLFxuICAgICAgICBjb3JhbDogJyNmZjdmNTAnLFxuICAgICAgICBjb3JuZmxvd2VyOiAnIzY0OTVlZCcsXG4gICAgICAgIGNvcm5mbG93ZXJibHVlOiAnIzY0OTVlZCcsXG4gICAgICAgIGNvcm5zaWxrOiAnI2ZmZjhkYycsXG4gICAgICAgIGNyaW1zb246ICcjZGMxNDNjJyxcbiAgICAgICAgY3lhbjogJyMwMGZmZmYnLFxuICAgICAgICBkYXJrYmx1ZTogJyMwMDAwOGInLFxuICAgICAgICBkYXJrY3lhbjogJyMwMDhiOGInLFxuICAgICAgICBkYXJrZ29sZGVucm9kOiAnI2I4ODYwYicsXG4gICAgICAgIGRhcmtncmF5OiAnI2E5YTlhOScsXG4gICAgICAgIGRhcmtncmVlbjogJyMwMDY0MDAnLFxuICAgICAgICBkYXJrZ3JleTogJyNhOWE5YTknLFxuICAgICAgICBkYXJra2hha2k6ICcjYmRiNzZiJyxcbiAgICAgICAgZGFya21hZ2VudGE6ICcjOGIwMDhiJyxcbiAgICAgICAgZGFya29saXZlZ3JlZW46ICcjNTU2YjJmJyxcbiAgICAgICAgZGFya29yYW5nZTogJyNmZjhjMDAnLFxuICAgICAgICBkYXJrb3JjaGlkOiAnIzk5MzJjYycsXG4gICAgICAgIGRhcmtyZWQ6ICcjOGIwMDAwJyxcbiAgICAgICAgZGFya3NhbG1vbjogJyNlOTk2N2EnLFxuICAgICAgICBkYXJrc2VhZ3JlZW46ICcjOGZiYzhmJyxcbiAgICAgICAgZGFya3NsYXRlYmx1ZTogJyM0ODNkOGInLFxuICAgICAgICBkYXJrc2xhdGVncmF5OiAnIzJmNGY0ZicsXG4gICAgICAgIGRhcmtzbGF0ZWdyZXk6ICcjMmY0ZjRmJyxcbiAgICAgICAgZGFya3R1cnF1b2lzZTogJyMwMGNlZDEnLFxuICAgICAgICBkYXJrdmlvbGV0OiAnIzk0MDBkMycsXG4gICAgICAgIGRlZXBwaW5rOiAnI2ZmMTQ5MycsXG4gICAgICAgIGRlZXBza3libHVlOiAnIzAwYmZmZicsXG4gICAgICAgIGRpbWdyYXk6ICcjNjk2OTY5JyxcbiAgICAgICAgZGltZ3JleTogJyM2OTY5NjknLFxuICAgICAgICBkb2RnZXJibHVlOiAnIzFlOTBmZicsXG4gICAgICAgIGZpcmVicmljazogJyNiMjIyMjInLFxuICAgICAgICBmbG9yYWx3aGl0ZTogJyNmZmZhZjAnLFxuICAgICAgICBmb3Jlc3RncmVlbjogJyMyMjhiMjInLFxuICAgICAgICBmdWNoc2lhOiAnI2ZmMDBmZicsXG4gICAgICAgIGdhaW5zYm9ybzogJyNkY2RjZGMnLFxuICAgICAgICBnaG9zdHdoaXRlOiAnI2Y4ZjhmZicsXG4gICAgICAgIGdvbGQ6ICcjZmZkNzAwJyxcbiAgICAgICAgZ29sZGVucm9kOiAnI2RhYTUyMCcsXG4gICAgICAgIGdyYXk6ICcjODA4MDgwJyxcbiAgICAgICAgZ3JlZW46ICcjMDA4MDAwJyxcbiAgICAgICAgZ3JlZW55ZWxsb3c6ICcjYWRmZjJmJyxcbiAgICAgICAgZ3JleTogJyM4MDgwODAnLFxuICAgICAgICBob25leWRldzogJyNmMGZmZjAnLFxuICAgICAgICBob3RwaW5rOiAnI2ZmNjliNCcsXG4gICAgICAgIGluZGlhbnJlZDogJyNjZDVjNWMnLFxuICAgICAgICBpbmRpZ286ICcjNGIwMDgyJyxcbiAgICAgICAgaXZvcnk6ICcjZmZmZmYwJyxcbiAgICAgICAga2hha2k6ICcjZjBlNjhjJyxcbiAgICAgICAgbGFzZXJsZW1vbjogJyNmZmZmNTQnLFxuICAgICAgICBsYXZlbmRlcjogJyNlNmU2ZmEnLFxuICAgICAgICBsYXZlbmRlcmJsdXNoOiAnI2ZmZjBmNScsXG4gICAgICAgIGxhd25ncmVlbjogJyM3Y2ZjMDAnLFxuICAgICAgICBsZW1vbmNoaWZmb246ICcjZmZmYWNkJyxcbiAgICAgICAgbGlnaHRibHVlOiAnI2FkZDhlNicsXG4gICAgICAgIGxpZ2h0Y29yYWw6ICcjZjA4MDgwJyxcbiAgICAgICAgbGlnaHRjeWFuOiAnI2UwZmZmZicsXG4gICAgICAgIGxpZ2h0Z29sZGVucm9kOiAnI2ZhZmFkMicsXG4gICAgICAgIGxpZ2h0Z29sZGVucm9keWVsbG93OiAnI2ZhZmFkMicsXG4gICAgICAgIGxpZ2h0Z3JheTogJyNkM2QzZDMnLFxuICAgICAgICBsaWdodGdyZWVuOiAnIzkwZWU5MCcsXG4gICAgICAgIGxpZ2h0Z3JleTogJyNkM2QzZDMnLFxuICAgICAgICBsaWdodHBpbms6ICcjZmZiNmMxJyxcbiAgICAgICAgbGlnaHRzYWxtb246ICcjZmZhMDdhJyxcbiAgICAgICAgbGlnaHRzZWFncmVlbjogJyMyMGIyYWEnLFxuICAgICAgICBsaWdodHNreWJsdWU6ICcjODdjZWZhJyxcbiAgICAgICAgbGlnaHRzbGF0ZWdyYXk6ICcjNzc4ODk5JyxcbiAgICAgICAgbGlnaHRzbGF0ZWdyZXk6ICcjNzc4ODk5JyxcbiAgICAgICAgbGlnaHRzdGVlbGJsdWU6ICcjYjBjNGRlJyxcbiAgICAgICAgbGlnaHR5ZWxsb3c6ICcjZmZmZmUwJyxcbiAgICAgICAgbGltZTogJyMwMGZmMDAnLFxuICAgICAgICBsaW1lZ3JlZW46ICcjMzJjZDMyJyxcbiAgICAgICAgbGluZW46ICcjZmFmMGU2JyxcbiAgICAgICAgbWFnZW50YTogJyNmZjAwZmYnLFxuICAgICAgICBtYXJvb246ICcjODAwMDAwJyxcbiAgICAgICAgbWFyb29uMjogJyM3ZjAwMDAnLFxuICAgICAgICBtYXJvb24zOiAnI2IwMzA2MCcsXG4gICAgICAgIG1lZGl1bWFxdWFtYXJpbmU6ICcjNjZjZGFhJyxcbiAgICAgICAgbWVkaXVtYmx1ZTogJyMwMDAwY2QnLFxuICAgICAgICBtZWRpdW1vcmNoaWQ6ICcjYmE1NWQzJyxcbiAgICAgICAgbWVkaXVtcHVycGxlOiAnIzkzNzBkYicsXG4gICAgICAgIG1lZGl1bXNlYWdyZWVuOiAnIzNjYjM3MScsXG4gICAgICAgIG1lZGl1bXNsYXRlYmx1ZTogJyM3YjY4ZWUnLFxuICAgICAgICBtZWRpdW1zcHJpbmdncmVlbjogJyMwMGZhOWEnLFxuICAgICAgICBtZWRpdW10dXJxdW9pc2U6ICcjNDhkMWNjJyxcbiAgICAgICAgbWVkaXVtdmlvbGV0cmVkOiAnI2M3MTU4NScsXG4gICAgICAgIG1pZG5pZ2h0Ymx1ZTogJyMxOTE5NzAnLFxuICAgICAgICBtaW50Y3JlYW06ICcjZjVmZmZhJyxcbiAgICAgICAgbWlzdHlyb3NlOiAnI2ZmZTRlMScsXG4gICAgICAgIG1vY2Nhc2luOiAnI2ZmZTRiNScsXG4gICAgICAgIG5hdmFqb3doaXRlOiAnI2ZmZGVhZCcsXG4gICAgICAgIG5hdnk6ICcjMDAwMDgwJyxcbiAgICAgICAgb2xkbGFjZTogJyNmZGY1ZTYnLFxuICAgICAgICBvbGl2ZTogJyM4MDgwMDAnLFxuICAgICAgICBvbGl2ZWRyYWI6ICcjNmI4ZTIzJyxcbiAgICAgICAgb3JhbmdlOiAnI2ZmYTUwMCcsXG4gICAgICAgIG9yYW5nZXJlZDogJyNmZjQ1MDAnLFxuICAgICAgICBvcmNoaWQ6ICcjZGE3MGQ2JyxcbiAgICAgICAgcGFsZWdvbGRlbnJvZDogJyNlZWU4YWEnLFxuICAgICAgICBwYWxlZ3JlZW46ICcjOThmYjk4JyxcbiAgICAgICAgcGFsZXR1cnF1b2lzZTogJyNhZmVlZWUnLFxuICAgICAgICBwYWxldmlvbGV0cmVkOiAnI2RiNzA5MycsXG4gICAgICAgIHBhcGF5YXdoaXA6ICcjZmZlZmQ1JyxcbiAgICAgICAgcGVhY2hwdWZmOiAnI2ZmZGFiOScsXG4gICAgICAgIHBlcnU6ICcjY2Q4NTNmJyxcbiAgICAgICAgcGluazogJyNmZmMwY2InLFxuICAgICAgICBwbHVtOiAnI2RkYTBkZCcsXG4gICAgICAgIHBvd2RlcmJsdWU6ICcjYjBlMGU2JyxcbiAgICAgICAgcHVycGxlOiAnIzgwMDA4MCcsXG4gICAgICAgIHB1cnBsZTI6ICcjN2YwMDdmJyxcbiAgICAgICAgcHVycGxlMzogJyNhMDIwZjAnLFxuICAgICAgICByZWJlY2NhcHVycGxlOiAnIzY2MzM5OScsXG4gICAgICAgIHJlZDogJyNmZjAwMDAnLFxuICAgICAgICByb3N5YnJvd246ICcjYmM4ZjhmJyxcbiAgICAgICAgcm95YWxibHVlOiAnIzQxNjllMScsXG4gICAgICAgIHNhZGRsZWJyb3duOiAnIzhiNDUxMycsXG4gICAgICAgIHNhbG1vbjogJyNmYTgwNzInLFxuICAgICAgICBzYW5keWJyb3duOiAnI2Y0YTQ2MCcsXG4gICAgICAgIHNlYWdyZWVuOiAnIzJlOGI1NycsXG4gICAgICAgIHNlYXNoZWxsOiAnI2ZmZjVlZScsXG4gICAgICAgIHNpZW5uYTogJyNhMDUyMmQnLFxuICAgICAgICBzaWx2ZXI6ICcjYzBjMGMwJyxcbiAgICAgICAgc2t5Ymx1ZTogJyM4N2NlZWInLFxuICAgICAgICBzbGF0ZWJsdWU6ICcjNmE1YWNkJyxcbiAgICAgICAgc2xhdGVncmF5OiAnIzcwODA5MCcsXG4gICAgICAgIHNsYXRlZ3JleTogJyM3MDgwOTAnLFxuICAgICAgICBzbm93OiAnI2ZmZmFmYScsXG4gICAgICAgIHNwcmluZ2dyZWVuOiAnIzAwZmY3ZicsXG4gICAgICAgIHN0ZWVsYmx1ZTogJyM0NjgyYjQnLFxuICAgICAgICB0YW46ICcjZDJiNDhjJyxcbiAgICAgICAgdGVhbDogJyMwMDgwODAnLFxuICAgICAgICB0aGlzdGxlOiAnI2Q4YmZkOCcsXG4gICAgICAgIHRvbWF0bzogJyNmZjYzNDcnLFxuICAgICAgICB0dXJxdW9pc2U6ICcjNDBlMGQwJyxcbiAgICAgICAgdmlvbGV0OiAnI2VlODJlZScsXG4gICAgICAgIHdoZWF0OiAnI2Y1ZGViMycsXG4gICAgICAgIHdoaXRlOiAnI2ZmZmZmZicsXG4gICAgICAgIHdoaXRlc21va2U6ICcjZjVmNWY1JyxcbiAgICAgICAgeWVsbG93OiAnI2ZmZmYwMCcsXG4gICAgICAgIHllbGxvd2dyZWVuOiAnIzlhY2QzMidcbiAgICB9O1xuXG4gICAgdmFyIHczY3gxMV8xID0gdzNjeDExJDE7XG5cbiAgICB2YXIgQ29sb3IkcyA9IENvbG9yXzE7XG4gICAgdmFyIGlucHV0JDUgPSBpbnB1dCRoO1xuICAgIHZhciB0eXBlJGMgPSB1dGlscy50eXBlO1xuXG4gICAgdmFyIHczY3gxMSA9IHczY3gxMV8xO1xuICAgIHZhciBoZXgycmdiID0gaGV4MnJnYl8xO1xuICAgIHZhciByZ2IyaGV4ID0gcmdiMmhleF8xO1xuXG4gICAgQ29sb3Ikcy5wcm90b3R5cGUubmFtZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgaGV4ID0gcmdiMmhleCh0aGlzLl9yZ2IsICdyZ2InKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxpc3QgPSBPYmplY3Qua2V5cyh3M2N4MTEpOyBpIDwgbGlzdC5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgdmFyIG4gPSBsaXN0W2ldO1xuXG4gICAgICAgICAgICBpZiAodzNjeDExW25dID09PSBoZXgpIHsgcmV0dXJuIG4udG9Mb3dlckNhc2UoKTsgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBoZXg7XG4gICAgfTtcblxuICAgIGlucHV0JDUuZm9ybWF0Lm5hbWVkID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKHczY3gxMVtuYW1lXSkgeyByZXR1cm4gaGV4MnJnYih3M2N4MTFbbmFtZV0pOyB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93biBjb2xvciBuYW1lOiAnK25hbWUpO1xuICAgIH07XG5cbiAgICBpbnB1dCQ1LmF1dG9kZXRlY3QucHVzaCh7XG4gICAgICAgIHA6IDUsXG4gICAgICAgIHRlc3Q6IGZ1bmN0aW9uIChoKSB7XG4gICAgICAgICAgICB2YXIgcmVzdCA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIHdoaWxlICggbGVuLS0gPiAwICkgcmVzdFsgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiArIDEgXTtcblxuICAgICAgICAgICAgaWYgKCFyZXN0Lmxlbmd0aCAmJiB0eXBlJGMoaCkgPT09ICdzdHJpbmcnICYmIHczY3gxMVtoLnRvTG93ZXJDYXNlKCldKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICduYW1lZCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHZhciB1bnBhY2skOCA9IHV0aWxzLnVucGFjaztcblxuICAgIHZhciByZ2IybnVtJDEgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgdmFyIHJlZiA9IHVucGFjayQ4KGFyZ3MsICdyZ2InKTtcbiAgICAgICAgdmFyIHIgPSByZWZbMF07XG4gICAgICAgIHZhciBnID0gcmVmWzFdO1xuICAgICAgICB2YXIgYiA9IHJlZlsyXTtcbiAgICAgICAgcmV0dXJuIChyIDw8IDE2KSArIChnIDw8IDgpICsgYjtcbiAgICB9O1xuXG4gICAgdmFyIHJnYjJudW1fMSA9IHJnYjJudW0kMTtcblxuICAgIHZhciB0eXBlJGIgPSB1dGlscy50eXBlO1xuXG4gICAgdmFyIG51bTJyZ2IgPSBmdW5jdGlvbiAobnVtKSB7XG4gICAgICAgIGlmICh0eXBlJGIobnVtKSA9PSBcIm51bWJlclwiICYmIG51bSA+PSAwICYmIG51bSA8PSAweEZGRkZGRikge1xuICAgICAgICAgICAgdmFyIHIgPSBudW0gPj4gMTY7XG4gICAgICAgICAgICB2YXIgZyA9IChudW0gPj4gOCkgJiAweEZGO1xuICAgICAgICAgICAgdmFyIGIgPSBudW0gJiAweEZGO1xuICAgICAgICAgICAgcmV0dXJuIFtyLGcsYiwxXTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIG51bSBjb2xvcjogXCIrbnVtKTtcbiAgICB9O1xuXG4gICAgdmFyIG51bTJyZ2JfMSA9IG51bTJyZ2I7XG5cbiAgICB2YXIgY2hyb21hJDkgPSBjaHJvbWFfMTtcbiAgICB2YXIgQ29sb3IkciA9IENvbG9yXzE7XG4gICAgdmFyIGlucHV0JDQgPSBpbnB1dCRoO1xuICAgIHZhciB0eXBlJGEgPSB1dGlscy50eXBlO1xuXG4gICAgdmFyIHJnYjJudW0gPSByZ2IybnVtXzE7XG5cbiAgICBDb2xvciRyLnByb3RvdHlwZS5udW0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHJnYjJudW0odGhpcy5fcmdiKTtcbiAgICB9O1xuXG4gICAgY2hyb21hJDkubnVtID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHJldHVybiBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KCBDb2xvciRyLCBbIG51bGwgXS5jb25jYXQoIGFyZ3MsIFsnbnVtJ10pICkpO1xuICAgIH07XG5cbiAgICBpbnB1dCQ0LmZvcm1hdC5udW0gPSBudW0ycmdiXzE7XG5cbiAgICBpbnB1dCQ0LmF1dG9kZXRlY3QucHVzaCh7XG4gICAgICAgIHA6IDUsXG4gICAgICAgIHRlc3Q6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPT09IDEgJiYgdHlwZSRhKGFyZ3NbMF0pID09PSAnbnVtYmVyJyAmJiBhcmdzWzBdID49IDAgJiYgYXJnc1swXSA8PSAweEZGRkZGRikge1xuICAgICAgICAgICAgICAgIHJldHVybiAnbnVtJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgdmFyIGNocm9tYSQ4ID0gY2hyb21hXzE7XG4gICAgdmFyIENvbG9yJHEgPSBDb2xvcl8xO1xuICAgIHZhciBpbnB1dCQzID0gaW5wdXQkaDtcbiAgICB2YXIgdW5wYWNrJDcgPSB1dGlscy51bnBhY2s7XG4gICAgdmFyIHR5cGUkOSA9IHV0aWxzLnR5cGU7XG4gICAgdmFyIHJvdW5kJDEgPSBNYXRoLnJvdW5kO1xuXG4gICAgQ29sb3IkcS5wcm90b3R5cGUucmdiID0gZnVuY3Rpb24ocm5kKSB7XG4gICAgICAgIGlmICggcm5kID09PSB2b2lkIDAgKSBybmQ9dHJ1ZTtcblxuICAgICAgICBpZiAocm5kID09PSBmYWxzZSkgeyByZXR1cm4gdGhpcy5fcmdiLnNsaWNlKDAsMyk7IH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX3JnYi5zbGljZSgwLDMpLm1hcChyb3VuZCQxKTtcbiAgICB9O1xuXG4gICAgQ29sb3IkcS5wcm90b3R5cGUucmdiYSA9IGZ1bmN0aW9uKHJuZCkge1xuICAgICAgICBpZiAoIHJuZCA9PT0gdm9pZCAwICkgcm5kPXRydWU7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX3JnYi5zbGljZSgwLDQpLm1hcChmdW5jdGlvbiAodixpKSB7XG4gICAgICAgICAgICByZXR1cm4gaTwzID8gKHJuZCA9PT0gZmFsc2UgPyB2IDogcm91bmQkMSh2KSkgOiB2O1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgY2hyb21hJDgucmdiID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHJldHVybiBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KCBDb2xvciRxLCBbIG51bGwgXS5jb25jYXQoIGFyZ3MsIFsncmdiJ10pICkpO1xuICAgIH07XG5cbiAgICBpbnB1dCQzLmZvcm1hdC5yZ2IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgdmFyIHJnYmEgPSB1bnBhY2skNyhhcmdzLCAncmdiYScpO1xuICAgICAgICBpZiAocmdiYVszXSA9PT0gdW5kZWZpbmVkKSB7IHJnYmFbM10gPSAxOyB9XG4gICAgICAgIHJldHVybiByZ2JhO1xuICAgIH07XG5cbiAgICBpbnB1dCQzLmF1dG9kZXRlY3QucHVzaCh7XG4gICAgICAgIHA6IDMsXG4gICAgICAgIHRlc3Q6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgICAgICBhcmdzID0gdW5wYWNrJDcoYXJncywgJ3JnYmEnKTtcbiAgICAgICAgICAgIGlmICh0eXBlJDkoYXJncykgPT09ICdhcnJheScgJiYgKGFyZ3MubGVuZ3RoID09PSAzIHx8XG4gICAgICAgICAgICAgICAgYXJncy5sZW5ndGggPT09IDQgJiYgdHlwZSQ5KGFyZ3NbM10pID09ICdudW1iZXInICYmIGFyZ3NbM10gPj0gMCAmJiBhcmdzWzNdIDw9IDEpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdyZ2InO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICAvKlxuICAgICAqIEJhc2VkIG9uIGltcGxlbWVudGF0aW9uIGJ5IE5laWwgQmFydGxldHRcbiAgICAgKiBodHRwczovL2dpdGh1Yi5jb20vbmVpbGJhcnRsZXR0L2NvbG9yLXRlbXBlcmF0dXJlXG4gICAgICovXG5cbiAgICB2YXIgbG9nJDEgPSBNYXRoLmxvZztcblxuICAgIHZhciB0ZW1wZXJhdHVyZTJyZ2IkMSA9IGZ1bmN0aW9uIChrZWx2aW4pIHtcbiAgICAgICAgdmFyIHRlbXAgPSBrZWx2aW4gLyAxMDA7XG4gICAgICAgIHZhciByLGcsYjtcbiAgICAgICAgaWYgKHRlbXAgPCA2Nikge1xuICAgICAgICAgICAgciA9IDI1NTtcbiAgICAgICAgICAgIGcgPSB0ZW1wIDwgNiA/IDAgOiAtMTU1LjI1NDg1NTYyNzA5MTc5IC0gMC40NDU5Njk1MDQ2OTU3OTEzMyAqIChnID0gdGVtcC0yKSArIDEwNC40OTIxNjE5OTM5Mzg4OCAqIGxvZyQxKGcpO1xuICAgICAgICAgICAgYiA9IHRlbXAgPCAyMCA/IDAgOiAtMjU0Ljc2OTM1MTg0MTIwOTAyICsgMC44Mjc0MDk2MDY0MDA3Mzk1ICogKGIgPSB0ZW1wLTEwKSArIDExNS42Nzk5NDQwMTA2NjE0NyAqIGxvZyQxKGIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgciA9IDM1MS45NzY5MDU2NjgwNTY5MyArIDAuMTE0MjA2NDUzNzg0MTY1ICogKHIgPSB0ZW1wLTU1KSAtIDQwLjI1MzY2MzA5MzMyMTI3ICogbG9nJDEocik7XG4gICAgICAgICAgICBnID0gMzI1LjQ0OTQxMjU3MTE5NzQgKyAwLjA3OTQzNDU2NTM2NjYyMzQyICogKGcgPSB0ZW1wLTUwKSAtIDI4LjA4NTI5NjM1MDc5NTcgKiBsb2ckMShnKTtcbiAgICAgICAgICAgIGIgPSAyNTU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtyLGcsYiwxXTtcbiAgICB9O1xuXG4gICAgdmFyIHRlbXBlcmF0dXJlMnJnYl8xID0gdGVtcGVyYXR1cmUycmdiJDE7XG5cbiAgICAvKlxuICAgICAqIEJhc2VkIG9uIGltcGxlbWVudGF0aW9uIGJ5IE5laWwgQmFydGxldHRcbiAgICAgKiBodHRwczovL2dpdGh1Yi5jb20vbmVpbGJhcnRsZXR0L2NvbG9yLXRlbXBlcmF0dXJlXG4gICAgICoqL1xuXG4gICAgdmFyIHRlbXBlcmF0dXJlMnJnYiA9IHRlbXBlcmF0dXJlMnJnYl8xO1xuICAgIHZhciB1bnBhY2skNiA9IHV0aWxzLnVucGFjaztcbiAgICB2YXIgcm91bmQgPSBNYXRoLnJvdW5kO1xuXG4gICAgdmFyIHJnYjJ0ZW1wZXJhdHVyZSQxID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHZhciByZ2IgPSB1bnBhY2skNihhcmdzLCAncmdiJyk7XG4gICAgICAgIHZhciByID0gcmdiWzBdLCBiID0gcmdiWzJdO1xuICAgICAgICB2YXIgbWluVGVtcCA9IDEwMDA7XG4gICAgICAgIHZhciBtYXhUZW1wID0gNDAwMDA7XG4gICAgICAgIHZhciBlcHMgPSAwLjQ7XG4gICAgICAgIHZhciB0ZW1wO1xuICAgICAgICB3aGlsZSAobWF4VGVtcCAtIG1pblRlbXAgPiBlcHMpIHtcbiAgICAgICAgICAgIHRlbXAgPSAobWF4VGVtcCArIG1pblRlbXApICogMC41O1xuICAgICAgICAgICAgdmFyIHJnYiQxID0gdGVtcGVyYXR1cmUycmdiKHRlbXApO1xuICAgICAgICAgICAgaWYgKChyZ2IkMVsyXSAvIHJnYiQxWzBdKSA+PSAoYiAvIHIpKSB7XG4gICAgICAgICAgICAgICAgbWF4VGVtcCA9IHRlbXA7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG1pblRlbXAgPSB0ZW1wO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByb3VuZCh0ZW1wKTtcbiAgICB9O1xuXG4gICAgdmFyIHJnYjJ0ZW1wZXJhdHVyZV8xID0gcmdiMnRlbXBlcmF0dXJlJDE7XG5cbiAgICB2YXIgY2hyb21hJDcgPSBjaHJvbWFfMTtcbiAgICB2YXIgQ29sb3IkcCA9IENvbG9yXzE7XG4gICAgdmFyIGlucHV0JDIgPSBpbnB1dCRoO1xuXG4gICAgdmFyIHJnYjJ0ZW1wZXJhdHVyZSA9IHJnYjJ0ZW1wZXJhdHVyZV8xO1xuXG4gICAgQ29sb3IkcC5wcm90b3R5cGUudGVtcCA9XG4gICAgQ29sb3IkcC5wcm90b3R5cGUua2VsdmluID1cbiAgICBDb2xvciRwLnByb3RvdHlwZS50ZW1wZXJhdHVyZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gcmdiMnRlbXBlcmF0dXJlKHRoaXMuX3JnYik7XG4gICAgfTtcblxuICAgIGNocm9tYSQ3LnRlbXAgPVxuICAgIGNocm9tYSQ3LmtlbHZpbiA9XG4gICAgY2hyb21hJDcudGVtcGVyYXR1cmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgcmV0dXJuIG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYXBwbHkoIENvbG9yJHAsIFsgbnVsbCBdLmNvbmNhdCggYXJncywgWyd0ZW1wJ10pICkpO1xuICAgIH07XG5cbiAgICBpbnB1dCQyLmZvcm1hdC50ZW1wID1cbiAgICBpbnB1dCQyLmZvcm1hdC5rZWx2aW4gPVxuICAgIGlucHV0JDIuZm9ybWF0LnRlbXBlcmF0dXJlID0gdGVtcGVyYXR1cmUycmdiXzE7XG5cbiAgICB2YXIgdW5wYWNrJDUgPSB1dGlscy51bnBhY2s7XG4gICAgdmFyIGNicnQgPSBNYXRoLmNicnQ7XG4gICAgdmFyIHBvdyQ4ID0gTWF0aC5wb3c7XG4gICAgdmFyIHNpZ24kMSA9IE1hdGguc2lnbjtcblxuICAgIHZhciByZ2Iyb2tsYWIkMiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICAvLyBPS0xhYiBjb2xvciBzcGFjZSBpbXBsZW1lbnRhdGlvbiB0YWtlbiBmcm9tXG4gICAgICAgIC8vIGh0dHBzOi8vYm90dG9zc29uLmdpdGh1Yi5pby9wb3N0cy9va2xhYi9cbiAgICAgICAgdmFyIHJlZiA9IHVucGFjayQ1KGFyZ3MsICdyZ2InKTtcbiAgICAgICAgdmFyIHIgPSByZWZbMF07XG4gICAgICAgIHZhciBnID0gcmVmWzFdO1xuICAgICAgICB2YXIgYiA9IHJlZlsyXTtcbiAgICAgICAgdmFyIHJlZiQxID0gW3JnYjJscmdiKHIgLyAyNTUpLCByZ2IybHJnYihnIC8gMjU1KSwgcmdiMmxyZ2IoYiAvIDI1NSldO1xuICAgICAgICB2YXIgbHIgPSByZWYkMVswXTtcbiAgICAgICAgdmFyIGxnID0gcmVmJDFbMV07XG4gICAgICAgIHZhciBsYiA9IHJlZiQxWzJdO1xuICAgICAgICB2YXIgbCA9IGNicnQoMC40MTIyMjE0NzA4ICogbHIgKyAwLjUzNjMzMjUzNjMgKiBsZyArIDAuMDUxNDQ1OTkyOSAqIGxiKTtcbiAgICAgICAgdmFyIG0gPSBjYnJ0KDAuMjExOTAzNDk4MiAqIGxyICsgMC42ODA2OTk1NDUxICogbGcgKyAwLjEwNzM5Njk1NjYgKiBsYik7XG4gICAgICAgIHZhciBzID0gY2JydCgwLjA4ODMwMjQ2MTkgKiBsciArIDAuMjgxNzE4ODM3NiAqIGxnICsgMC42Mjk5Nzg3MDA1ICogbGIpO1xuXG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAwLjIxMDQ1NDI1NTMgKiBsICsgMC43OTM2MTc3ODUgKiBtIC0gMC4wMDQwNzIwNDY4ICogcyxcbiAgICAgICAgICAgIDEuOTc3OTk4NDk1MSAqIGwgLSAyLjQyODU5MjIwNSAqIG0gKyAwLjQ1MDU5MzcwOTkgKiBzLFxuICAgICAgICAgICAgMC4wMjU5MDQwMzcxICogbCArIDAuNzgyNzcxNzY2MiAqIG0gLSAwLjgwODY3NTc2NiAqIHNcbiAgICAgICAgXTtcbiAgICB9O1xuXG4gICAgdmFyIHJnYjJva2xhYl8xID0gcmdiMm9rbGFiJDI7XG5cbiAgICBmdW5jdGlvbiByZ2IybHJnYihjKSB7XG4gICAgICAgIHZhciBhYnMgPSBNYXRoLmFicyhjKTtcbiAgICAgICAgaWYgKGFicyA8IDAuMDQwNDUpIHtcbiAgICAgICAgICAgIHJldHVybiBjIC8gMTIuOTI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChzaWduJDEoYykgfHwgMSkgKiBwb3ckOCgoYWJzICsgMC4wNTUpIC8gMS4wNTUsIDIuNCk7XG4gICAgfVxuXG4gICAgdmFyIHVucGFjayQ0ID0gdXRpbHMudW5wYWNrO1xuICAgIHZhciBwb3ckNyA9IE1hdGgucG93O1xuICAgIHZhciBzaWduID0gTWF0aC5zaWduO1xuXG4gICAgLypcbiAgICAgKiBMKiBbMC4uMTAwXVxuICAgICAqIGEgWy0xMDAuLjEwMF1cbiAgICAgKiBiIFstMTAwLi4xMDBdXG4gICAgICovXG4gICAgdmFyIG9rbGFiMnJnYiQxID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIGFyZ3MgPSB1bnBhY2skNChhcmdzLCAnbGFiJyk7XG4gICAgICAgIHZhciBMID0gYXJnc1swXTtcbiAgICAgICAgdmFyIGEgPSBhcmdzWzFdO1xuICAgICAgICB2YXIgYiA9IGFyZ3NbMl07XG5cbiAgICAgICAgdmFyIGwgPSBwb3ckNyhMICsgMC4zOTYzMzc3Nzc0ICogYSArIDAuMjE1ODAzNzU3MyAqIGIsIDMpO1xuICAgICAgICB2YXIgbSA9IHBvdyQ3KEwgLSAwLjEwNTU2MTM0NTggKiBhIC0gMC4wNjM4NTQxNzI4ICogYiwgMyk7XG4gICAgICAgIHZhciBzID0gcG93JDcoTCAtIDAuMDg5NDg0MTc3NSAqIGEgLSAxLjI5MTQ4NTU0OCAqIGIsIDMpO1xuXG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAyNTUgKiBscmdiMnJnYigrNC4wNzY3NDE2NjIxICogbCAtIDMuMzA3NzExNTkxMyAqIG0gKyAwLjIzMDk2OTkyOTIgKiBzKSxcbiAgICAgICAgICAgIDI1NSAqIGxyZ2IycmdiKC0xLjI2ODQzODAwNDYgKiBsICsgMi42MDk3NTc0MDExICogbSAtIDAuMzQxMzE5Mzk2NSAqIHMpLFxuICAgICAgICAgICAgMjU1ICogbHJnYjJyZ2IoLTAuMDA0MTk2MDg2MyAqIGwgLSAwLjcwMzQxODYxNDcgKiBtICsgMS43MDc2MTQ3MDEgKiBzKSxcbiAgICAgICAgICAgIGFyZ3MubGVuZ3RoID4gMyA/IGFyZ3NbM10gOiAxXG4gICAgICAgIF07XG4gICAgfTtcblxuICAgIHZhciBva2xhYjJyZ2JfMSA9IG9rbGFiMnJnYiQxO1xuXG4gICAgZnVuY3Rpb24gbHJnYjJyZ2IoYykge1xuICAgICAgICB2YXIgYWJzID0gTWF0aC5hYnMoYyk7XG4gICAgICAgIGlmIChhYnMgPiAwLjAwMzEzMDgpIHtcbiAgICAgICAgICAgIHJldHVybiAoc2lnbihjKSB8fCAxKSAqICgxLjA1NSAqIHBvdyQ3KGFicywgMSAvIDIuNCkgLSAwLjA1NSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGMgKiAxMi45MjtcbiAgICB9XG5cbiAgICB2YXIgdW5wYWNrJDMgPSB1dGlscy51bnBhY2s7XG4gICAgdmFyIHR5cGUkOCA9IHV0aWxzLnR5cGU7XG4gICAgdmFyIGNocm9tYSQ2ID0gY2hyb21hXzE7XG4gICAgdmFyIENvbG9yJG8gPSBDb2xvcl8xO1xuICAgIHZhciBpbnB1dCQxID0gaW5wdXQkaDtcblxuICAgIHZhciByZ2Iyb2tsYWIkMSA9IHJnYjJva2xhYl8xO1xuXG4gICAgQ29sb3Ikby5wcm90b3R5cGUub2tsYWIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiByZ2Iyb2tsYWIkMSh0aGlzLl9yZ2IpO1xuICAgIH07XG5cbiAgICBjaHJvbWEkNi5va2xhYiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICByZXR1cm4gbmV3IChGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5hcHBseSggQ29sb3IkbywgWyBudWxsIF0uY29uY2F0KCBhcmdzLCBbJ29rbGFiJ10pICkpO1xuICAgIH07XG5cbiAgICBpbnB1dCQxLmZvcm1hdC5va2xhYiA9IG9rbGFiMnJnYl8xO1xuXG4gICAgaW5wdXQkMS5hdXRvZGV0ZWN0LnB1c2goe1xuICAgICAgICBwOiAzLFxuICAgICAgICB0ZXN0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICAgICAgYXJncyA9IHVucGFjayQzKGFyZ3MsICdva2xhYicpO1xuICAgICAgICAgICAgaWYgKHR5cGUkOChhcmdzKSA9PT0gJ2FycmF5JyAmJiBhcmdzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgICAgIHJldHVybiAnb2tsYWInO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICB2YXIgdW5wYWNrJDIgPSB1dGlscy51bnBhY2s7XG4gICAgdmFyIHJnYjJva2xhYiA9IHJnYjJva2xhYl8xO1xuICAgIHZhciBsYWIybGNoID0gbGFiMmxjaF8xO1xuXG4gICAgdmFyIHJnYjJva2xjaCQxID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHZhciByZWYgPSB1bnBhY2skMihhcmdzLCAncmdiJyk7XG4gICAgICAgIHZhciByID0gcmVmWzBdO1xuICAgICAgICB2YXIgZyA9IHJlZlsxXTtcbiAgICAgICAgdmFyIGIgPSByZWZbMl07XG4gICAgICAgIHZhciByZWYkMSA9IHJnYjJva2xhYihyLCBnLCBiKTtcbiAgICAgICAgdmFyIGwgPSByZWYkMVswXTtcbiAgICAgICAgdmFyIGEgPSByZWYkMVsxXTtcbiAgICAgICAgdmFyIGJfID0gcmVmJDFbMl07XG4gICAgICAgIHJldHVybiBsYWIybGNoKGwsIGEsIGJfKTtcbiAgICB9O1xuXG4gICAgdmFyIHJnYjJva2xjaF8xID0gcmdiMm9rbGNoJDE7XG5cbiAgICB2YXIgdW5wYWNrJDEgPSB1dGlscy51bnBhY2s7XG4gICAgdmFyIGxjaDJsYWIgPSBsY2gybGFiXzE7XG4gICAgdmFyIG9rbGFiMnJnYiA9IG9rbGFiMnJnYl8xO1xuXG4gICAgdmFyIG9rbGNoMnJnYiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICBhcmdzID0gdW5wYWNrJDEoYXJncywgJ2xjaCcpO1xuICAgICAgICB2YXIgbCA9IGFyZ3NbMF07XG4gICAgICAgIHZhciBjID0gYXJnc1sxXTtcbiAgICAgICAgdmFyIGggPSBhcmdzWzJdO1xuICAgICAgICB2YXIgcmVmID0gbGNoMmxhYihsLCBjLCBoKTtcbiAgICAgICAgdmFyIEwgPSByZWZbMF07XG4gICAgICAgIHZhciBhID0gcmVmWzFdO1xuICAgICAgICB2YXIgYl8gPSByZWZbMl07XG4gICAgICAgIHZhciByZWYkMSA9IG9rbGFiMnJnYihMLCBhLCBiXyk7XG4gICAgICAgIHZhciByID0gcmVmJDFbMF07XG4gICAgICAgIHZhciBnID0gcmVmJDFbMV07XG4gICAgICAgIHZhciBiID0gcmVmJDFbMl07XG4gICAgICAgIHJldHVybiBbciwgZywgYiwgYXJncy5sZW5ndGggPiAzID8gYXJnc1szXSA6IDFdO1xuICAgIH07XG5cbiAgICB2YXIgb2tsY2gycmdiXzEgPSBva2xjaDJyZ2I7XG5cbiAgICB2YXIgdW5wYWNrID0gdXRpbHMudW5wYWNrO1xuICAgIHZhciB0eXBlJDcgPSB1dGlscy50eXBlO1xuICAgIHZhciBjaHJvbWEkNSA9IGNocm9tYV8xO1xuICAgIHZhciBDb2xvciRuID0gQ29sb3JfMTtcbiAgICB2YXIgaW5wdXQgPSBpbnB1dCRoO1xuXG4gICAgdmFyIHJnYjJva2xjaCA9IHJnYjJva2xjaF8xO1xuXG4gICAgQ29sb3Ikbi5wcm90b3R5cGUub2tsY2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiByZ2Iyb2tsY2godGhpcy5fcmdiKTtcbiAgICB9O1xuXG4gICAgY2hyb21hJDUub2tsY2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgcmV0dXJuIG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYXBwbHkoIENvbG9yJG4sIFsgbnVsbCBdLmNvbmNhdCggYXJncywgWydva2xjaCddKSApKTtcbiAgICB9O1xuXG4gICAgaW5wdXQuZm9ybWF0Lm9rbGNoID0gb2tsY2gycmdiXzE7XG5cbiAgICBpbnB1dC5hdXRvZGV0ZWN0LnB1c2goe1xuICAgICAgICBwOiAzLFxuICAgICAgICB0ZXN0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICAgICAgYXJncyA9IHVucGFjayhhcmdzLCAnb2tsY2gnKTtcbiAgICAgICAgICAgIGlmICh0eXBlJDcoYXJncykgPT09ICdhcnJheScgJiYgYXJncy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ29rbGNoJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgdmFyIENvbG9yJG0gPSBDb2xvcl8xO1xuICAgIHZhciB0eXBlJDYgPSB1dGlscy50eXBlO1xuXG4gICAgQ29sb3IkbS5wcm90b3R5cGUuYWxwaGEgPSBmdW5jdGlvbihhLCBtdXRhdGUpIHtcbiAgICAgICAgaWYgKCBtdXRhdGUgPT09IHZvaWQgMCApIG11dGF0ZT1mYWxzZTtcblxuICAgICAgICBpZiAoYSAhPT0gdW5kZWZpbmVkICYmIHR5cGUkNihhKSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIGlmIChtdXRhdGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZ2JbM10gPSBhO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvciRtKFt0aGlzLl9yZ2JbMF0sIHRoaXMuX3JnYlsxXSwgdGhpcy5fcmdiWzJdLCBhXSwgJ3JnYicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9yZ2JbM107XG4gICAgfTtcblxuICAgIHZhciBDb2xvciRsID0gQ29sb3JfMTtcblxuICAgIENvbG9yJGwucHJvdG90eXBlLmNsaXBwZWQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JnYi5fY2xpcHBlZCB8fCBmYWxzZTtcbiAgICB9O1xuXG4gICAgdmFyIENvbG9yJGsgPSBDb2xvcl8xO1xuICAgIHZhciBMQUJfQ09OU1RBTlRTJDEgPSBsYWJDb25zdGFudHM7XG5cbiAgICBDb2xvciRrLnByb3RvdHlwZS5kYXJrZW4gPSBmdW5jdGlvbihhbW91bnQpIHtcbiAgICBcdGlmICggYW1vdW50ID09PSB2b2lkIDAgKSBhbW91bnQ9MTtcblxuICAgIFx0dmFyIG1lID0gdGhpcztcbiAgICBcdHZhciBsYWIgPSBtZS5sYWIoKTtcbiAgICBcdGxhYlswXSAtPSBMQUJfQ09OU1RBTlRTJDEuS24gKiBhbW91bnQ7XG4gICAgXHRyZXR1cm4gbmV3IENvbG9yJGsobGFiLCAnbGFiJykuYWxwaGEobWUuYWxwaGEoKSwgdHJ1ZSk7XG4gICAgfTtcblxuICAgIENvbG9yJGsucHJvdG90eXBlLmJyaWdodGVuID0gZnVuY3Rpb24oYW1vdW50KSB7XG4gICAgXHRpZiAoIGFtb3VudCA9PT0gdm9pZCAwICkgYW1vdW50PTE7XG5cbiAgICBcdHJldHVybiB0aGlzLmRhcmtlbigtYW1vdW50KTtcbiAgICB9O1xuXG4gICAgQ29sb3Ikay5wcm90b3R5cGUuZGFya2VyID0gQ29sb3Ikay5wcm90b3R5cGUuZGFya2VuO1xuICAgIENvbG9yJGsucHJvdG90eXBlLmJyaWdodGVyID0gQ29sb3Ikay5wcm90b3R5cGUuYnJpZ2h0ZW47XG5cbiAgICB2YXIgQ29sb3IkaiA9IENvbG9yXzE7XG5cbiAgICBDb2xvciRqLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAobWMpIHtcbiAgICAgICAgdmFyIHJlZiA9IG1jLnNwbGl0KCcuJyk7XG4gICAgICAgIHZhciBtb2RlID0gcmVmWzBdO1xuICAgICAgICB2YXIgY2hhbm5lbCA9IHJlZlsxXTtcbiAgICAgICAgdmFyIHNyYyA9IHRoaXNbbW9kZV0oKTtcbiAgICAgICAgaWYgKGNoYW5uZWwpIHtcbiAgICAgICAgICAgIHZhciBpID0gbW9kZS5pbmRleE9mKGNoYW5uZWwpIC0gKG1vZGUuc3Vic3RyKDAsIDIpID09PSAnb2snID8gMiA6IDApO1xuICAgICAgICAgICAgaWYgKGkgPiAtMSkgeyByZXR1cm4gc3JjW2ldOyB9XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKFwidW5rbm93biBjaGFubmVsIFwiICsgY2hhbm5lbCArIFwiIGluIG1vZGUgXCIgKyBtb2RlKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gc3JjO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHZhciBDb2xvciRpID0gQ29sb3JfMTtcbiAgICB2YXIgdHlwZSQ1ID0gdXRpbHMudHlwZTtcbiAgICB2YXIgcG93JDYgPSBNYXRoLnBvdztcblxuICAgIHZhciBFUFMgPSAxZS03O1xuICAgIHZhciBNQVhfSVRFUiA9IDIwO1xuXG4gICAgQ29sb3IkaS5wcm90b3R5cGUubHVtaW5hbmNlID0gZnVuY3Rpb24obHVtKSB7XG4gICAgICAgIGlmIChsdW0gIT09IHVuZGVmaW5lZCAmJiB0eXBlJDUobHVtKSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIGlmIChsdW0gPT09IDApIHtcbiAgICAgICAgICAgICAgICAvLyByZXR1cm4gcHVyZSBibGFja1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ29sb3IkaShbMCwwLDAsdGhpcy5fcmdiWzNdXSwgJ3JnYicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGx1bSA9PT0gMSkge1xuICAgICAgICAgICAgICAgIC8vIHJldHVybiBwdXJlIHdoaXRlXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvciRpKFsyNTUsMjU1LDI1NSx0aGlzLl9yZ2JbM11dLCAncmdiJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBjb21wdXRlIG5ldyBjb2xvciB1c2luZy4uLlxuICAgICAgICAgICAgdmFyIGN1cl9sdW0gPSB0aGlzLmx1bWluYW5jZSgpO1xuICAgICAgICAgICAgdmFyIG1vZGUgPSAncmdiJztcbiAgICAgICAgICAgIHZhciBtYXhfaXRlciA9IE1BWF9JVEVSO1xuXG4gICAgICAgICAgICB2YXIgdGVzdCA9IGZ1bmN0aW9uIChsb3csIGhpZ2gpIHtcbiAgICAgICAgICAgICAgICB2YXIgbWlkID0gbG93LmludGVycG9sYXRlKGhpZ2gsIDAuNSwgbW9kZSk7XG4gICAgICAgICAgICAgICAgdmFyIGxtID0gbWlkLmx1bWluYW5jZSgpO1xuICAgICAgICAgICAgICAgIGlmIChNYXRoLmFicyhsdW0gLSBsbSkgPCBFUFMgfHwgIW1heF9pdGVyLS0pIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gY2xvc2UgZW5vdWdoXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtaWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBsbSA+IGx1bSA/IHRlc3QobG93LCBtaWQpIDogdGVzdChtaWQsIGhpZ2gpO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgdmFyIHJnYiA9IChjdXJfbHVtID4gbHVtID8gdGVzdChuZXcgQ29sb3IkaShbMCwwLDBdKSwgdGhpcykgOiB0ZXN0KHRoaXMsIG5ldyBDb2xvciRpKFsyNTUsMjU1LDI1NV0pKSkucmdiKCk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IENvbG9yJGkocmdiLmNvbmNhdCggW3RoaXMuX3JnYlszXV0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmdiMmx1bWluYW5jZS5hcHBseSh2b2lkIDAsICh0aGlzLl9yZ2IpLnNsaWNlKDAsMykpO1xuICAgIH07XG5cblxuICAgIHZhciByZ2IybHVtaW5hbmNlID0gZnVuY3Rpb24gKHIsZyxiKSB7XG4gICAgICAgIC8vIHJlbGF0aXZlIGx1bWluYW5jZVxuICAgICAgICAvLyBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwOC9SRUMtV0NBRzIwLTIwMDgxMjExLyNyZWxhdGl2ZWx1bWluYW5jZWRlZlxuICAgICAgICByID0gbHVtaW5hbmNlX3gocik7XG4gICAgICAgIGcgPSBsdW1pbmFuY2VfeChnKTtcbiAgICAgICAgYiA9IGx1bWluYW5jZV94KGIpO1xuICAgICAgICByZXR1cm4gMC4yMTI2ICogciArIDAuNzE1MiAqIGcgKyAwLjA3MjIgKiBiO1xuICAgIH07XG5cbiAgICB2YXIgbHVtaW5hbmNlX3ggPSBmdW5jdGlvbiAoeCkge1xuICAgICAgICB4IC89IDI1NTtcbiAgICAgICAgcmV0dXJuIHggPD0gMC4wMzkyOCA/IHgvMTIuOTIgOiBwb3ckNigoeCswLjA1NSkvMS4wNTUsIDIuNCk7XG4gICAgfTtcblxuICAgIHZhciBpbnRlcnBvbGF0b3IkMSA9IHt9O1xuXG4gICAgdmFyIENvbG9yJGggPSBDb2xvcl8xO1xuICAgIHZhciB0eXBlJDQgPSB1dGlscy50eXBlO1xuICAgIHZhciBpbnRlcnBvbGF0b3IgPSBpbnRlcnBvbGF0b3IkMTtcblxuICAgIHZhciBtaXgkMSA9IGZ1bmN0aW9uIChjb2wxLCBjb2wyLCBmKSB7XG4gICAgICAgIGlmICggZiA9PT0gdm9pZCAwICkgZj0wLjU7XG4gICAgICAgIHZhciByZXN0ID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGggLSAzO1xuICAgICAgICB3aGlsZSAoIGxlbi0tID4gMCApIHJlc3RbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gKyAzIF07XG5cbiAgICAgICAgdmFyIG1vZGUgPSByZXN0WzBdIHx8ICdscmdiJztcbiAgICAgICAgaWYgKCFpbnRlcnBvbGF0b3JbbW9kZV0gJiYgIXJlc3QubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBmYWxsIGJhY2sgdG8gdGhlIGZpcnN0IHN1cHBvcnRlZCBtb2RlXG4gICAgICAgICAgICBtb2RlID0gT2JqZWN0LmtleXMoaW50ZXJwb2xhdG9yKVswXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWludGVycG9sYXRvclttb2RlXSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKChcImludGVycG9sYXRpb24gbW9kZSBcIiArIG1vZGUgKyBcIiBpcyBub3QgZGVmaW5lZFwiKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGUkNChjb2wxKSAhPT0gJ29iamVjdCcpIHsgY29sMSA9IG5ldyBDb2xvciRoKGNvbDEpOyB9XG4gICAgICAgIGlmICh0eXBlJDQoY29sMikgIT09ICdvYmplY3QnKSB7IGNvbDIgPSBuZXcgQ29sb3IkaChjb2wyKTsgfVxuICAgICAgICByZXR1cm4gaW50ZXJwb2xhdG9yW21vZGVdKGNvbDEsIGNvbDIsIGYpXG4gICAgICAgICAgICAuYWxwaGEoY29sMS5hbHBoYSgpICsgZiAqIChjb2wyLmFscGhhKCkgLSBjb2wxLmFscGhhKCkpKTtcbiAgICB9O1xuXG4gICAgdmFyIENvbG9yJGcgPSBDb2xvcl8xO1xuICAgIHZhciBtaXggPSBtaXgkMTtcblxuICAgIENvbG9yJGcucHJvdG90eXBlLm1peCA9XG4gICAgQ29sb3IkZy5wcm90b3R5cGUuaW50ZXJwb2xhdGUgPSBmdW5jdGlvbihjb2wyLCBmKSB7XG4gICAgXHRpZiAoIGYgPT09IHZvaWQgMCApIGY9MC41O1xuICAgIFx0dmFyIHJlc3QgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aCAtIDI7XG4gICAgXHR3aGlsZSAoIGxlbi0tID4gMCApIHJlc3RbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gKyAyIF07XG5cbiAgICBcdHJldHVybiBtaXguYXBwbHkodm9pZCAwLCBbIHRoaXMsIGNvbDIsIGYgXS5jb25jYXQoIHJlc3QgKSk7XG4gICAgfTtcblxuICAgIHZhciBDb2xvciRmID0gQ29sb3JfMTtcblxuICAgIENvbG9yJGYucHJvdG90eXBlLnByZW11bHRpcGx5ID0gZnVuY3Rpb24obXV0YXRlKSB7XG4gICAgXHRpZiAoIG11dGF0ZSA9PT0gdm9pZCAwICkgbXV0YXRlPWZhbHNlO1xuXG4gICAgXHR2YXIgcmdiID0gdGhpcy5fcmdiO1xuICAgIFx0dmFyIGEgPSByZ2JbM107XG4gICAgXHRpZiAobXV0YXRlKSB7XG4gICAgXHRcdHRoaXMuX3JnYiA9IFtyZ2JbMF0qYSwgcmdiWzFdKmEsIHJnYlsyXSphLCBhXTtcbiAgICBcdFx0cmV0dXJuIHRoaXM7XG4gICAgXHR9IGVsc2Uge1xuICAgIFx0XHRyZXR1cm4gbmV3IENvbG9yJGYoW3JnYlswXSphLCByZ2JbMV0qYSwgcmdiWzJdKmEsIGFdLCAncmdiJyk7XG4gICAgXHR9XG4gICAgfTtcblxuICAgIHZhciBDb2xvciRlID0gQ29sb3JfMTtcbiAgICB2YXIgTEFCX0NPTlNUQU5UUyA9IGxhYkNvbnN0YW50cztcblxuICAgIENvbG9yJGUucHJvdG90eXBlLnNhdHVyYXRlID0gZnVuY3Rpb24oYW1vdW50KSB7XG4gICAgXHRpZiAoIGFtb3VudCA9PT0gdm9pZCAwICkgYW1vdW50PTE7XG5cbiAgICBcdHZhciBtZSA9IHRoaXM7XG4gICAgXHR2YXIgbGNoID0gbWUubGNoKCk7XG4gICAgXHRsY2hbMV0gKz0gTEFCX0NPTlNUQU5UUy5LbiAqIGFtb3VudDtcbiAgICBcdGlmIChsY2hbMV0gPCAwKSB7IGxjaFsxXSA9IDA7IH1cbiAgICBcdHJldHVybiBuZXcgQ29sb3IkZShsY2gsICdsY2gnKS5hbHBoYShtZS5hbHBoYSgpLCB0cnVlKTtcbiAgICB9O1xuXG4gICAgQ29sb3IkZS5wcm90b3R5cGUuZGVzYXR1cmF0ZSA9IGZ1bmN0aW9uKGFtb3VudCkge1xuICAgIFx0aWYgKCBhbW91bnQgPT09IHZvaWQgMCApIGFtb3VudD0xO1xuXG4gICAgXHRyZXR1cm4gdGhpcy5zYXR1cmF0ZSgtYW1vdW50KTtcbiAgICB9O1xuXG4gICAgdmFyIENvbG9yJGQgPSBDb2xvcl8xO1xuICAgIHZhciB0eXBlJDMgPSB1dGlscy50eXBlO1xuXG4gICAgQ29sb3IkZC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKG1jLCB2YWx1ZSwgbXV0YXRlKSB7XG4gICAgICAgIGlmICggbXV0YXRlID09PSB2b2lkIDAgKSBtdXRhdGUgPSBmYWxzZTtcblxuICAgICAgICB2YXIgcmVmID0gbWMuc3BsaXQoJy4nKTtcbiAgICAgICAgdmFyIG1vZGUgPSByZWZbMF07XG4gICAgICAgIHZhciBjaGFubmVsID0gcmVmWzFdO1xuICAgICAgICB2YXIgc3JjID0gdGhpc1ttb2RlXSgpO1xuICAgICAgICBpZiAoY2hhbm5lbCkge1xuICAgICAgICAgICAgdmFyIGkgPSBtb2RlLmluZGV4T2YoY2hhbm5lbCkgLSAobW9kZS5zdWJzdHIoMCwgMikgPT09ICdvaycgPyAyIDogMCk7XG4gICAgICAgICAgICBpZiAoaSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGUkMyh2YWx1ZSkgPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS5jaGFyQXQoMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJysnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1tpXSArPSArdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICctJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNbaV0gKz0gK3ZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnKic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjW2ldICo9ICt2YWx1ZS5zdWJzdHIoMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICcvJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNbaV0gLz0gK3ZhbHVlLnN1YnN0cigxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjW2ldID0gK3ZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlJDModmFsdWUpID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgICAgICBzcmNbaV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1bnN1cHBvcnRlZCB2YWx1ZSBmb3IgQ29sb3Iuc2V0XCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgb3V0ID0gbmV3IENvbG9yJGQoc3JjLCBtb2RlKTtcbiAgICAgICAgICAgICAgICBpZiAobXV0YXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JnYiA9IG91dC5fcmdiO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG91dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigoXCJ1bmtub3duIGNoYW5uZWwgXCIgKyBjaGFubmVsICsgXCIgaW4gbW9kZSBcIiArIG1vZGUpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBzcmM7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIENvbG9yJGMgPSBDb2xvcl8xO1xuXG4gICAgdmFyIHJnYiA9IGZ1bmN0aW9uIChjb2wxLCBjb2wyLCBmKSB7XG4gICAgICAgIHZhciB4eXowID0gY29sMS5fcmdiO1xuICAgICAgICB2YXIgeHl6MSA9IGNvbDIuX3JnYjtcbiAgICAgICAgcmV0dXJuIG5ldyBDb2xvciRjKFxuICAgICAgICAgICAgeHl6MFswXSArIGYgKiAoeHl6MVswXS14eXowWzBdKSxcbiAgICAgICAgICAgIHh5ejBbMV0gKyBmICogKHh5ejFbMV0teHl6MFsxXSksXG4gICAgICAgICAgICB4eXowWzJdICsgZiAqICh4eXoxWzJdLXh5ejBbMl0pLFxuICAgICAgICAgICAgJ3JnYidcbiAgICAgICAgKVxuICAgIH07XG5cbiAgICAvLyByZWdpc3RlciBpbnRlcnBvbGF0b3JcbiAgICBpbnRlcnBvbGF0b3IkMS5yZ2IgPSByZ2I7XG5cbiAgICB2YXIgQ29sb3IkYiA9IENvbG9yXzE7XG4gICAgdmFyIHNxcnQkMiA9IE1hdGguc3FydDtcbiAgICB2YXIgcG93JDUgPSBNYXRoLnBvdztcblxuICAgIHZhciBscmdiID0gZnVuY3Rpb24gKGNvbDEsIGNvbDIsIGYpIHtcbiAgICAgICAgdmFyIHJlZiA9IGNvbDEuX3JnYjtcbiAgICAgICAgdmFyIHgxID0gcmVmWzBdO1xuICAgICAgICB2YXIgeTEgPSByZWZbMV07XG4gICAgICAgIHZhciB6MSA9IHJlZlsyXTtcbiAgICAgICAgdmFyIHJlZiQxID0gY29sMi5fcmdiO1xuICAgICAgICB2YXIgeDIgPSByZWYkMVswXTtcbiAgICAgICAgdmFyIHkyID0gcmVmJDFbMV07XG4gICAgICAgIHZhciB6MiA9IHJlZiQxWzJdO1xuICAgICAgICByZXR1cm4gbmV3IENvbG9yJGIoXG4gICAgICAgICAgICBzcXJ0JDIocG93JDUoeDEsMikgKiAoMS1mKSArIHBvdyQ1KHgyLDIpICogZiksXG4gICAgICAgICAgICBzcXJ0JDIocG93JDUoeTEsMikgKiAoMS1mKSArIHBvdyQ1KHkyLDIpICogZiksXG4gICAgICAgICAgICBzcXJ0JDIocG93JDUoejEsMikgKiAoMS1mKSArIHBvdyQ1KHoyLDIpICogZiksXG4gICAgICAgICAgICAncmdiJ1xuICAgICAgICApXG4gICAgfTtcblxuICAgIC8vIHJlZ2lzdGVyIGludGVycG9sYXRvclxuICAgIGludGVycG9sYXRvciQxLmxyZ2IgPSBscmdiO1xuXG4gICAgdmFyIENvbG9yJGEgPSBDb2xvcl8xO1xuXG4gICAgdmFyIGxhYiA9IGZ1bmN0aW9uIChjb2wxLCBjb2wyLCBmKSB7XG4gICAgICAgIHZhciB4eXowID0gY29sMS5sYWIoKTtcbiAgICAgICAgdmFyIHh5ejEgPSBjb2wyLmxhYigpO1xuICAgICAgICByZXR1cm4gbmV3IENvbG9yJGEoXG4gICAgICAgICAgICB4eXowWzBdICsgZiAqICh4eXoxWzBdLXh5ejBbMF0pLFxuICAgICAgICAgICAgeHl6MFsxXSArIGYgKiAoeHl6MVsxXS14eXowWzFdKSxcbiAgICAgICAgICAgIHh5ejBbMl0gKyBmICogKHh5ejFbMl0teHl6MFsyXSksXG4gICAgICAgICAgICAnbGFiJ1xuICAgICAgICApXG4gICAgfTtcblxuICAgIC8vIHJlZ2lzdGVyIGludGVycG9sYXRvclxuICAgIGludGVycG9sYXRvciQxLmxhYiA9IGxhYjtcblxuICAgIHZhciBDb2xvciQ5ID0gQ29sb3JfMTtcblxuICAgIHZhciBfaHN4ID0gZnVuY3Rpb24gKGNvbDEsIGNvbDIsIGYsIG0pIHtcbiAgICAgICAgdmFyIGFzc2lnbiwgYXNzaWduJDE7XG5cbiAgICAgICAgdmFyIHh5ejAsIHh5ejE7XG4gICAgICAgIGlmIChtID09PSAnaHNsJykge1xuICAgICAgICAgICAgeHl6MCA9IGNvbDEuaHNsKCk7XG4gICAgICAgICAgICB4eXoxID0gY29sMi5oc2woKTtcbiAgICAgICAgfSBlbHNlIGlmIChtID09PSAnaHN2Jykge1xuICAgICAgICAgICAgeHl6MCA9IGNvbDEuaHN2KCk7XG4gICAgICAgICAgICB4eXoxID0gY29sMi5oc3YoKTtcbiAgICAgICAgfSBlbHNlIGlmIChtID09PSAnaGNnJykge1xuICAgICAgICAgICAgeHl6MCA9IGNvbDEuaGNnKCk7XG4gICAgICAgICAgICB4eXoxID0gY29sMi5oY2coKTtcbiAgICAgICAgfSBlbHNlIGlmIChtID09PSAnaHNpJykge1xuICAgICAgICAgICAgeHl6MCA9IGNvbDEuaHNpKCk7XG4gICAgICAgICAgICB4eXoxID0gY29sMi5oc2koKTtcbiAgICAgICAgfSBlbHNlIGlmIChtID09PSAnbGNoJyB8fCBtID09PSAnaGNsJykge1xuICAgICAgICAgICAgbSA9ICdoY2wnO1xuICAgICAgICAgICAgeHl6MCA9IGNvbDEuaGNsKCk7XG4gICAgICAgICAgICB4eXoxID0gY29sMi5oY2woKTtcbiAgICAgICAgfSBlbHNlIGlmIChtID09PSAnb2tsY2gnKSB7XG4gICAgICAgICAgICB4eXowID0gY29sMS5va2xjaCgpLnJldmVyc2UoKTtcbiAgICAgICAgICAgIHh5ejEgPSBjb2wyLm9rbGNoKCkucmV2ZXJzZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGh1ZTAsIGh1ZTEsIHNhdDAsIHNhdDEsIGxidjAsIGxidjE7XG4gICAgICAgIGlmIChtLnN1YnN0cigwLCAxKSA9PT0gJ2gnIHx8IG0gPT09ICdva2xjaCcpIHtcbiAgICAgICAgICAgIChhc3NpZ24gPSB4eXowLCBodWUwID0gYXNzaWduWzBdLCBzYXQwID0gYXNzaWduWzFdLCBsYnYwID0gYXNzaWduWzJdKTtcbiAgICAgICAgICAgIChhc3NpZ24kMSA9IHh5ejEsIGh1ZTEgPSBhc3NpZ24kMVswXSwgc2F0MSA9IGFzc2lnbiQxWzFdLCBsYnYxID0gYXNzaWduJDFbMl0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNhdCwgaHVlLCBsYnYsIGRoO1xuXG4gICAgICAgIGlmICghaXNOYU4oaHVlMCkgJiYgIWlzTmFOKGh1ZTEpKSB7XG4gICAgICAgICAgICAvLyBib3RoIGNvbG9ycyBoYXZlIGh1ZVxuICAgICAgICAgICAgaWYgKGh1ZTEgPiBodWUwICYmIGh1ZTEgLSBodWUwID4gMTgwKSB7XG4gICAgICAgICAgICAgICAgZGggPSBodWUxIC0gKGh1ZTAgKyAzNjApO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChodWUxIDwgaHVlMCAmJiBodWUwIC0gaHVlMSA+IDE4MCkge1xuICAgICAgICAgICAgICAgIGRoID0gaHVlMSArIDM2MCAtIGh1ZTA7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRoID0gaHVlMSAtIGh1ZTA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBodWUgPSBodWUwICsgZiAqIGRoO1xuICAgICAgICB9IGVsc2UgaWYgKCFpc05hTihodWUwKSkge1xuICAgICAgICAgICAgaHVlID0gaHVlMDtcbiAgICAgICAgICAgIGlmICgobGJ2MSA9PSAxIHx8IGxidjEgPT0gMCkgJiYgbSAhPSAnaHN2JykgeyBzYXQgPSBzYXQwOyB9XG4gICAgICAgIH0gZWxzZSBpZiAoIWlzTmFOKGh1ZTEpKSB7XG4gICAgICAgICAgICBodWUgPSBodWUxO1xuICAgICAgICAgICAgaWYgKChsYnYwID09IDEgfHwgbGJ2MCA9PSAwKSAmJiBtICE9ICdoc3YnKSB7IHNhdCA9IHNhdDE7IH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGh1ZSA9IE51bWJlci5OYU47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2F0ID09PSB1bmRlZmluZWQpIHsgc2F0ID0gc2F0MCArIGYgKiAoc2F0MSAtIHNhdDApOyB9XG4gICAgICAgIGxidiA9IGxidjAgKyBmICogKGxidjEgLSBsYnYwKTtcbiAgICAgICAgcmV0dXJuIG0gPT09ICdva2xjaCcgPyBuZXcgQ29sb3IkOShbbGJ2LCBzYXQsIGh1ZV0sIG0pIDogbmV3IENvbG9yJDkoW2h1ZSwgc2F0LCBsYnZdLCBtKTtcbiAgICB9O1xuXG4gICAgdmFyIGludGVycG9sYXRlX2hzeCQ1ID0gX2hzeDtcblxuICAgIHZhciBsY2ggPSBmdW5jdGlvbiAoY29sMSwgY29sMiwgZikge1xuICAgIFx0cmV0dXJuIGludGVycG9sYXRlX2hzeCQ1KGNvbDEsIGNvbDIsIGYsICdsY2gnKTtcbiAgICB9O1xuXG4gICAgLy8gcmVnaXN0ZXIgaW50ZXJwb2xhdG9yXG4gICAgaW50ZXJwb2xhdG9yJDEubGNoID0gbGNoO1xuICAgIGludGVycG9sYXRvciQxLmhjbCA9IGxjaDtcblxuICAgIHZhciBDb2xvciQ4ID0gQ29sb3JfMTtcblxuICAgIHZhciBudW0gPSBmdW5jdGlvbiAoY29sMSwgY29sMiwgZikge1xuICAgICAgICB2YXIgYzEgPSBjb2wxLm51bSgpO1xuICAgICAgICB2YXIgYzIgPSBjb2wyLm51bSgpO1xuICAgICAgICByZXR1cm4gbmV3IENvbG9yJDgoYzEgKyBmICogKGMyLWMxKSwgJ251bScpXG4gICAgfTtcblxuICAgIC8vIHJlZ2lzdGVyIGludGVycG9sYXRvclxuICAgIGludGVycG9sYXRvciQxLm51bSA9IG51bTtcblxuICAgIHZhciBpbnRlcnBvbGF0ZV9oc3gkNCA9IF9oc3g7XG5cbiAgICB2YXIgaGNnID0gZnVuY3Rpb24gKGNvbDEsIGNvbDIsIGYpIHtcbiAgICBcdHJldHVybiBpbnRlcnBvbGF0ZV9oc3gkNChjb2wxLCBjb2wyLCBmLCAnaGNnJyk7XG4gICAgfTtcblxuICAgIC8vIHJlZ2lzdGVyIGludGVycG9sYXRvclxuICAgIGludGVycG9sYXRvciQxLmhjZyA9IGhjZztcblxuICAgIHZhciBpbnRlcnBvbGF0ZV9oc3gkMyA9IF9oc3g7XG5cbiAgICB2YXIgaHNpID0gZnVuY3Rpb24gKGNvbDEsIGNvbDIsIGYpIHtcbiAgICBcdHJldHVybiBpbnRlcnBvbGF0ZV9oc3gkMyhjb2wxLCBjb2wyLCBmLCAnaHNpJyk7XG4gICAgfTtcblxuICAgIC8vIHJlZ2lzdGVyIGludGVycG9sYXRvclxuICAgIGludGVycG9sYXRvciQxLmhzaSA9IGhzaTtcblxuICAgIHZhciBpbnRlcnBvbGF0ZV9oc3gkMiA9IF9oc3g7XG5cbiAgICB2YXIgaHNsID0gZnVuY3Rpb24gKGNvbDEsIGNvbDIsIGYpIHtcbiAgICBcdHJldHVybiBpbnRlcnBvbGF0ZV9oc3gkMihjb2wxLCBjb2wyLCBmLCAnaHNsJyk7XG4gICAgfTtcblxuICAgIC8vIHJlZ2lzdGVyIGludGVycG9sYXRvclxuICAgIGludGVycG9sYXRvciQxLmhzbCA9IGhzbDtcblxuICAgIHZhciBpbnRlcnBvbGF0ZV9oc3gkMSA9IF9oc3g7XG5cbiAgICB2YXIgaHN2ID0gZnVuY3Rpb24gKGNvbDEsIGNvbDIsIGYpIHtcbiAgICBcdHJldHVybiBpbnRlcnBvbGF0ZV9oc3gkMShjb2wxLCBjb2wyLCBmLCAnaHN2Jyk7XG4gICAgfTtcblxuICAgIC8vIHJlZ2lzdGVyIGludGVycG9sYXRvclxuICAgIGludGVycG9sYXRvciQxLmhzdiA9IGhzdjtcblxuICAgIHZhciBDb2xvciQ3ID0gQ29sb3JfMTtcblxuICAgIHZhciBva2xhYiA9IGZ1bmN0aW9uIChjb2wxLCBjb2wyLCBmKSB7XG4gICAgICAgIHZhciB4eXowID0gY29sMS5va2xhYigpO1xuICAgICAgICB2YXIgeHl6MSA9IGNvbDIub2tsYWIoKTtcbiAgICAgICAgcmV0dXJuIG5ldyBDb2xvciQ3KFxuICAgICAgICAgICAgeHl6MFswXSArIGYgKiAoeHl6MVswXSAtIHh5ejBbMF0pLFxuICAgICAgICAgICAgeHl6MFsxXSArIGYgKiAoeHl6MVsxXSAtIHh5ejBbMV0pLFxuICAgICAgICAgICAgeHl6MFsyXSArIGYgKiAoeHl6MVsyXSAtIHh5ejBbMl0pLFxuICAgICAgICAgICAgJ29rbGFiJ1xuICAgICAgICApO1xuICAgIH07XG5cbiAgICAvLyByZWdpc3RlciBpbnRlcnBvbGF0b3JcbiAgICBpbnRlcnBvbGF0b3IkMS5va2xhYiA9IG9rbGFiO1xuXG4gICAgdmFyIGludGVycG9sYXRlX2hzeCA9IF9oc3g7XG5cbiAgICB2YXIgb2tsY2ggPSBmdW5jdGlvbiAoY29sMSwgY29sMiwgZikge1xuICAgICAgICByZXR1cm4gaW50ZXJwb2xhdGVfaHN4KGNvbDEsIGNvbDIsIGYsICdva2xjaCcpO1xuICAgIH07XG5cbiAgICAvLyByZWdpc3RlciBpbnRlcnBvbGF0b3JcbiAgICBpbnRlcnBvbGF0b3IkMS5va2xjaCA9IG9rbGNoO1xuXG4gICAgdmFyIENvbG9yJDYgPSBDb2xvcl8xO1xuICAgIHZhciBjbGlwX3JnYiQxID0gdXRpbHMuY2xpcF9yZ2I7XG4gICAgdmFyIHBvdyQ0ID0gTWF0aC5wb3c7XG4gICAgdmFyIHNxcnQkMSA9IE1hdGguc3FydDtcbiAgICB2YXIgUEkkMSA9IE1hdGguUEk7XG4gICAgdmFyIGNvcyQyID0gTWF0aC5jb3M7XG4gICAgdmFyIHNpbiQyID0gTWF0aC5zaW47XG4gICAgdmFyIGF0YW4yJDEgPSBNYXRoLmF0YW4yO1xuXG4gICAgdmFyIGF2ZXJhZ2UgPSBmdW5jdGlvbiAoY29sb3JzLCBtb2RlLCB3ZWlnaHRzKSB7XG4gICAgICAgIGlmICggbW9kZSA9PT0gdm9pZCAwICkgbW9kZT0nbHJnYic7XG4gICAgICAgIGlmICggd2VpZ2h0cyA9PT0gdm9pZCAwICkgd2VpZ2h0cz1udWxsO1xuXG4gICAgICAgIHZhciBsID0gY29sb3JzLmxlbmd0aDtcbiAgICAgICAgaWYgKCF3ZWlnaHRzKSB7IHdlaWdodHMgPSBBcnJheS5mcm9tKG5ldyBBcnJheShsKSkubWFwKGZ1bmN0aW9uICgpIHsgcmV0dXJuIDE7IH0pOyB9XG4gICAgICAgIC8vIG5vcm1hbGl6ZSB3ZWlnaHRzXG4gICAgICAgIHZhciBrID0gbCAvIHdlaWdodHMucmVkdWNlKGZ1bmN0aW9uKGEsIGIpIHsgcmV0dXJuIGEgKyBiOyB9KTtcbiAgICAgICAgd2VpZ2h0cy5mb3JFYWNoKGZ1bmN0aW9uICh3LGkpIHsgd2VpZ2h0c1tpXSAqPSBrOyB9KTtcbiAgICAgICAgLy8gY29udmVydCBjb2xvcnMgdG8gQ29sb3Igb2JqZWN0c1xuICAgICAgICBjb2xvcnMgPSBjb2xvcnMubWFwKGZ1bmN0aW9uIChjKSB7IHJldHVybiBuZXcgQ29sb3IkNihjKTsgfSk7XG4gICAgICAgIGlmIChtb2RlID09PSAnbHJnYicpIHtcbiAgICAgICAgICAgIHJldHVybiBfYXZlcmFnZV9scmdiKGNvbG9ycywgd2VpZ2h0cylcbiAgICAgICAgfVxuICAgICAgICB2YXIgZmlyc3QgPSBjb2xvcnMuc2hpZnQoKTtcbiAgICAgICAgdmFyIHh5eiA9IGZpcnN0LmdldChtb2RlKTtcbiAgICAgICAgdmFyIGNudCA9IFtdO1xuICAgICAgICB2YXIgZHggPSAwO1xuICAgICAgICB2YXIgZHkgPSAwO1xuICAgICAgICAvLyBpbml0aWFsIGNvbG9yXG4gICAgICAgIGZvciAodmFyIGk9MDsgaTx4eXoubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHh5eltpXSA9ICh4eXpbaV0gfHwgMCkgKiB3ZWlnaHRzWzBdO1xuICAgICAgICAgICAgY250LnB1c2goaXNOYU4oeHl6W2ldKSA/IDAgOiB3ZWlnaHRzWzBdKTtcbiAgICAgICAgICAgIGlmIChtb2RlLmNoYXJBdChpKSA9PT0gJ2gnICYmICFpc05hTih4eXpbaV0pKSB7XG4gICAgICAgICAgICAgICAgdmFyIEEgPSB4eXpbaV0gLyAxODAgKiBQSSQxO1xuICAgICAgICAgICAgICAgIGR4ICs9IGNvcyQyKEEpICogd2VpZ2h0c1swXTtcbiAgICAgICAgICAgICAgICBkeSArPSBzaW4kMihBKSAqIHdlaWdodHNbMF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYWxwaGEgPSBmaXJzdC5hbHBoYSgpICogd2VpZ2h0c1swXTtcbiAgICAgICAgY29sb3JzLmZvckVhY2goZnVuY3Rpb24gKGMsY2kpIHtcbiAgICAgICAgICAgIHZhciB4eXoyID0gYy5nZXQobW9kZSk7XG4gICAgICAgICAgICBhbHBoYSArPSBjLmFscGhhKCkgKiB3ZWlnaHRzW2NpKzFdO1xuICAgICAgICAgICAgZm9yICh2YXIgaT0wOyBpPHh5ei5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmICghaXNOYU4oeHl6MltpXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY250W2ldICs9IHdlaWdodHNbY2krMV07XG4gICAgICAgICAgICAgICAgICAgIGlmIChtb2RlLmNoYXJBdChpKSA9PT0gJ2gnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgQSA9IHh5ejJbaV0gLyAxODAgKiBQSSQxO1xuICAgICAgICAgICAgICAgICAgICAgICAgZHggKz0gY29zJDIoQSkgKiB3ZWlnaHRzW2NpKzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgZHkgKz0gc2luJDIoQSkgKiB3ZWlnaHRzW2NpKzFdO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgeHl6W2ldICs9IHh5ejJbaV0gKiB3ZWlnaHRzW2NpKzFdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBmb3IgKHZhciBpJDE9MDsgaSQxPHh5ei5sZW5ndGg7IGkkMSsrKSB7XG4gICAgICAgICAgICBpZiAobW9kZS5jaGFyQXQoaSQxKSA9PT0gJ2gnKSB7XG4gICAgICAgICAgICAgICAgdmFyIEEkMSA9IGF0YW4yJDEoZHkgLyBjbnRbaSQxXSwgZHggLyBjbnRbaSQxXSkgLyBQSSQxICogMTgwO1xuICAgICAgICAgICAgICAgIHdoaWxlIChBJDEgPCAwKSB7IEEkMSArPSAzNjA7IH1cbiAgICAgICAgICAgICAgICB3aGlsZSAoQSQxID49IDM2MCkgeyBBJDEgLT0gMzYwOyB9XG4gICAgICAgICAgICAgICAgeHl6W2kkMV0gPSBBJDE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHh5eltpJDFdID0geHl6W2kkMV0vY250W2kkMV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYWxwaGEgLz0gbDtcbiAgICAgICAgcmV0dXJuIChuZXcgQ29sb3IkNih4eXosIG1vZGUpKS5hbHBoYShhbHBoYSA+IDAuOTk5OTkgPyAxIDogYWxwaGEsIHRydWUpO1xuICAgIH07XG5cblxuICAgIHZhciBfYXZlcmFnZV9scmdiID0gZnVuY3Rpb24gKGNvbG9ycywgd2VpZ2h0cykge1xuICAgICAgICB2YXIgbCA9IGNvbG9ycy5sZW5ndGg7XG4gICAgICAgIHZhciB4eXogPSBbMCwwLDAsMF07XG4gICAgICAgIGZvciAodmFyIGk9MDsgaSA8IGNvbG9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGNvbCA9IGNvbG9yc1tpXTtcbiAgICAgICAgICAgIHZhciBmID0gd2VpZ2h0c1tpXSAvIGw7XG4gICAgICAgICAgICB2YXIgcmdiID0gY29sLl9yZ2I7XG4gICAgICAgICAgICB4eXpbMF0gKz0gcG93JDQocmdiWzBdLDIpICogZjtcbiAgICAgICAgICAgIHh5elsxXSArPSBwb3ckNChyZ2JbMV0sMikgKiBmO1xuICAgICAgICAgICAgeHl6WzJdICs9IHBvdyQ0KHJnYlsyXSwyKSAqIGY7XG4gICAgICAgICAgICB4eXpbM10gKz0gcmdiWzNdICogZjtcbiAgICAgICAgfVxuICAgICAgICB4eXpbMF0gPSBzcXJ0JDEoeHl6WzBdKTtcbiAgICAgICAgeHl6WzFdID0gc3FydCQxKHh5elsxXSk7XG4gICAgICAgIHh5elsyXSA9IHNxcnQkMSh4eXpbMl0pO1xuICAgICAgICBpZiAoeHl6WzNdID4gMC45OTk5OTk5KSB7IHh5elszXSA9IDE7IH1cbiAgICAgICAgcmV0dXJuIG5ldyBDb2xvciQ2KGNsaXBfcmdiJDEoeHl6KSk7XG4gICAgfTtcblxuICAgIC8vIG1pbmltYWwgbXVsdGktcHVycG9zZSBpbnRlcmZhY2VcblxuICAgIC8vIEByZXF1aXJlcyB1dGlscyBjb2xvciBhbmFseXplXG5cbiAgICB2YXIgY2hyb21hJDQgPSBjaHJvbWFfMTtcbiAgICB2YXIgdHlwZSQyID0gdXRpbHMudHlwZTtcblxuICAgIHZhciBwb3ckMyA9IE1hdGgucG93O1xuXG4gICAgdmFyIHNjYWxlJDIgPSBmdW5jdGlvbihjb2xvcnMpIHtcblxuICAgICAgICAvLyBjb25zdHJ1Y3RvclxuICAgICAgICB2YXIgX21vZGUgPSAncmdiJztcbiAgICAgICAgdmFyIF9uYWNvbCA9IGNocm9tYSQ0KCcjY2NjJyk7XG4gICAgICAgIHZhciBfc3ByZWFkID0gMDtcbiAgICAgICAgLy8gY29uc3QgX2ZpeGVkID0gZmFsc2U7XG4gICAgICAgIHZhciBfZG9tYWluID0gWzAsIDFdO1xuICAgICAgICB2YXIgX3BvcyA9IFtdO1xuICAgICAgICB2YXIgX3BhZGRpbmcgPSBbMCwwXTtcbiAgICAgICAgdmFyIF9jbGFzc2VzID0gZmFsc2U7XG4gICAgICAgIHZhciBfY29sb3JzID0gW107XG4gICAgICAgIHZhciBfb3V0ID0gZmFsc2U7XG4gICAgICAgIHZhciBfbWluID0gMDtcbiAgICAgICAgdmFyIF9tYXggPSAxO1xuICAgICAgICB2YXIgX2NvcnJlY3RMaWdodG5lc3MgPSBmYWxzZTtcbiAgICAgICAgdmFyIF9jb2xvckNhY2hlID0ge307XG4gICAgICAgIHZhciBfdXNlQ2FjaGUgPSB0cnVlO1xuICAgICAgICB2YXIgX2dhbW1hID0gMTtcblxuICAgICAgICAvLyBwcml2YXRlIG1ldGhvZHNcblxuICAgICAgICB2YXIgc2V0Q29sb3JzID0gZnVuY3Rpb24oY29sb3JzKSB7XG4gICAgICAgICAgICBjb2xvcnMgPSBjb2xvcnMgfHwgWycjZmZmJywgJyMwMDAnXTtcbiAgICAgICAgICAgIGlmIChjb2xvcnMgJiYgdHlwZSQyKGNvbG9ycykgPT09ICdzdHJpbmcnICYmIGNocm9tYSQ0LmJyZXdlciAmJlxuICAgICAgICAgICAgICAgIGNocm9tYSQ0LmJyZXdlcltjb2xvcnMudG9Mb3dlckNhc2UoKV0pIHtcbiAgICAgICAgICAgICAgICBjb2xvcnMgPSBjaHJvbWEkNC5icmV3ZXJbY29sb3JzLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGUkMihjb2xvcnMpID09PSAnYXJyYXknKSB7XG4gICAgICAgICAgICAgICAgLy8gaGFuZGxlIHNpbmdsZSBjb2xvclxuICAgICAgICAgICAgICAgIGlmIChjb2xvcnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9ycyA9IFtjb2xvcnNbMF0sIGNvbG9yc1swXV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIG1ha2UgYSBjb3B5IG9mIHRoZSBjb2xvcnNcbiAgICAgICAgICAgICAgICBjb2xvcnMgPSBjb2xvcnMuc2xpY2UoMCk7XG4gICAgICAgICAgICAgICAgLy8gY29udmVydCB0byBjaHJvbWEgY2xhc3Nlc1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGM9MDsgYzxjb2xvcnMubGVuZ3RoOyBjKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29sb3JzW2NdID0gY2hyb21hJDQoY29sb3JzW2NdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gYXV0by1maWxsIGNvbG9yIHBvc2l0aW9uXG4gICAgICAgICAgICAgICAgX3Bvcy5sZW5ndGggPSAwO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGMkMT0wOyBjJDE8Y29sb3JzLmxlbmd0aDsgYyQxKyspIHtcbiAgICAgICAgICAgICAgICAgICAgX3Bvcy5wdXNoKGMkMS8oY29sb3JzLmxlbmd0aC0xKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzZXRDYWNoZSgpO1xuICAgICAgICAgICAgcmV0dXJuIF9jb2xvcnMgPSBjb2xvcnM7XG4gICAgICAgIH07XG5cbiAgICAgICAgdmFyIGdldENsYXNzID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIGlmIChfY2xhc3NlcyAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdmFyIG4gPSBfY2xhc3Nlcy5sZW5ndGgtMTtcbiAgICAgICAgICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgICAgICAgICAgd2hpbGUgKGkgPCBuICYmIHZhbHVlID49IF9jbGFzc2VzW2ldKSB7XG4gICAgICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGktMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9O1xuXG4gICAgICAgIHZhciB0TWFwTGlnaHRuZXNzID0gZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQ7IH07XG4gICAgICAgIHZhciB0TWFwRG9tYWluID0gZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQ7IH07XG5cbiAgICAgICAgLy8gY29uc3QgY2xhc3NpZnlWYWx1ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIC8vICAgICBsZXQgdmFsID0gdmFsdWU7XG4gICAgICAgIC8vICAgICBpZiAoX2NsYXNzZXMubGVuZ3RoID4gMikge1xuICAgICAgICAvLyAgICAgICAgIGNvbnN0IG4gPSBfY2xhc3Nlcy5sZW5ndGgtMTtcbiAgICAgICAgLy8gICAgICAgICBjb25zdCBpID0gZ2V0Q2xhc3ModmFsdWUpO1xuICAgICAgICAvLyAgICAgICAgIGNvbnN0IG1pbmMgPSBfY2xhc3Nlc1swXSArICgoX2NsYXNzZXNbMV0tX2NsYXNzZXNbMF0pICogKDAgKyAoX3NwcmVhZCAqIDAuNSkpKTsgIC8vIGNlbnRlciBvZiAxc3QgY2xhc3NcbiAgICAgICAgLy8gICAgICAgICBjb25zdCBtYXhjID0gX2NsYXNzZXNbbi0xXSArICgoX2NsYXNzZXNbbl0tX2NsYXNzZXNbbi0xXSkgKiAoMSAtIChfc3ByZWFkICogMC41KSkpOyAgLy8gY2VudGVyIG9mIGxhc3QgY2xhc3NcbiAgICAgICAgLy8gICAgICAgICB2YWwgPSBfbWluICsgKCgoKF9jbGFzc2VzW2ldICsgKChfY2xhc3Nlc1tpKzFdIC0gX2NsYXNzZXNbaV0pICogMC41KSkgLSBtaW5jKSAvIChtYXhjLW1pbmMpKSAqIChfbWF4IC0gX21pbikpO1xuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvLyAgICAgcmV0dXJuIHZhbDtcbiAgICAgICAgLy8gfTtcblxuICAgICAgICB2YXIgZ2V0Q29sb3IgPSBmdW5jdGlvbih2YWwsIGJ5cGFzc01hcCkge1xuICAgICAgICAgICAgdmFyIGNvbCwgdDtcbiAgICAgICAgICAgIGlmIChieXBhc3NNYXAgPT0gbnVsbCkgeyBieXBhc3NNYXAgPSBmYWxzZTsgfVxuICAgICAgICAgICAgaWYgKGlzTmFOKHZhbCkgfHwgKHZhbCA9PT0gbnVsbCkpIHsgcmV0dXJuIF9uYWNvbDsgfVxuICAgICAgICAgICAgaWYgKCFieXBhc3NNYXApIHtcbiAgICAgICAgICAgICAgICBpZiAoX2NsYXNzZXMgJiYgKF9jbGFzc2VzLmxlbmd0aCA+IDIpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGZpbmQgdGhlIGNsYXNzXG4gICAgICAgICAgICAgICAgICAgIHZhciBjID0gZ2V0Q2xhc3ModmFsKTtcbiAgICAgICAgICAgICAgICAgICAgdCA9IGMgLyAoX2NsYXNzZXMubGVuZ3RoLTIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoX21heCAhPT0gX21pbikge1xuICAgICAgICAgICAgICAgICAgICAvLyBqdXN0IGludGVycG9sYXRlIGJldHdlZW4gbWluL21heFxuICAgICAgICAgICAgICAgICAgICB0ID0gKHZhbCAtIF9taW4pIC8gKF9tYXggLSBfbWluKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0ID0gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHQgPSB2YWw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGRvbWFpbiBtYXBcbiAgICAgICAgICAgIHQgPSB0TWFwRG9tYWluKHQpO1xuXG4gICAgICAgICAgICBpZiAoIWJ5cGFzc01hcCkge1xuICAgICAgICAgICAgICAgIHQgPSB0TWFwTGlnaHRuZXNzKHQpOyAgLy8gbGlnaHRuZXNzIGNvcnJlY3Rpb25cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKF9nYW1tYSAhPT0gMSkgeyB0ID0gcG93JDModCwgX2dhbW1hKTsgfVxuXG4gICAgICAgICAgICB0ID0gX3BhZGRpbmdbMF0gKyAodCAqICgxIC0gX3BhZGRpbmdbMF0gLSBfcGFkZGluZ1sxXSkpO1xuXG4gICAgICAgICAgICB0ID0gTWF0aC5taW4oMSwgTWF0aC5tYXgoMCwgdCkpO1xuXG4gICAgICAgICAgICB2YXIgayA9IE1hdGguZmxvb3IodCAqIDEwMDAwKTtcblxuICAgICAgICAgICAgaWYgKF91c2VDYWNoZSAmJiBfY29sb3JDYWNoZVtrXSkge1xuICAgICAgICAgICAgICAgIGNvbCA9IF9jb2xvckNhY2hlW2tdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZSQyKF9jb2xvcnMpID09PSAnYXJyYXknKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vZm9yIGkgaW4gWzAuLl9wb3MubGVuZ3RoLTFdXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaTxfcG9zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcCA9IF9wb3NbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA8PSBwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sID0gX2NvbG9yc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgodCA+PSBwKSAmJiAoaSA9PT0gKF9wb3MubGVuZ3RoLTEpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbCA9IF9jb2xvcnNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA+IHAgJiYgdCA8IF9wb3NbaSsxXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSAodC1wKS8oX3Bvc1tpKzFdLXApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbCA9IGNocm9tYSQ0LmludGVycG9sYXRlKF9jb2xvcnNbaV0sIF9jb2xvcnNbaSsxXSwgdCwgX21vZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlJDIoX2NvbG9ycykgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgY29sID0gX2NvbG9ycyh0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKF91c2VDYWNoZSkgeyBfY29sb3JDYWNoZVtrXSA9IGNvbDsgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNvbDtcbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgcmVzZXRDYWNoZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF9jb2xvckNhY2hlID0ge307IH07XG5cbiAgICAgICAgc2V0Q29sb3JzKGNvbG9ycyk7XG5cbiAgICAgICAgLy8gcHVibGljIGludGVyZmFjZVxuXG4gICAgICAgIHZhciBmID0gZnVuY3Rpb24odikge1xuICAgICAgICAgICAgdmFyIGMgPSBjaHJvbWEkNChnZXRDb2xvcih2KSk7XG4gICAgICAgICAgICBpZiAoX291dCAmJiBjW19vdXRdKSB7IHJldHVybiBjW19vdXRdKCk7IH0gZWxzZSB7IHJldHVybiBjOyB9XG4gICAgICAgIH07XG5cbiAgICAgICAgZi5jbGFzc2VzID0gZnVuY3Rpb24oY2xhc3Nlcykge1xuICAgICAgICAgICAgaWYgKGNsYXNzZXMgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlJDIoY2xhc3NlcykgPT09ICdhcnJheScpIHtcbiAgICAgICAgICAgICAgICAgICAgX2NsYXNzZXMgPSBjbGFzc2VzO1xuICAgICAgICAgICAgICAgICAgICBfZG9tYWluID0gW2NsYXNzZXNbMF0sIGNsYXNzZXNbY2xhc3Nlcy5sZW5ndGgtMV1dO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkID0gY2hyb21hJDQuYW5hbHl6ZShfZG9tYWluKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNsYXNzZXMgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc2VzID0gW2QubWluLCBkLm1heF07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NlcyA9IGNocm9tYSQ0LmxpbWl0cyhkLCAnZScsIGNsYXNzZXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIF9jbGFzc2VzO1xuICAgICAgICB9O1xuXG5cbiAgICAgICAgZi5kb21haW4gPSBmdW5jdGlvbihkb21haW4pIHtcbiAgICAgICAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfZG9tYWluO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX21pbiA9IGRvbWFpblswXTtcbiAgICAgICAgICAgIF9tYXggPSBkb21haW5bZG9tYWluLmxlbmd0aC0xXTtcbiAgICAgICAgICAgIF9wb3MgPSBbXTtcbiAgICAgICAgICAgIHZhciBrID0gX2NvbG9ycy5sZW5ndGg7XG4gICAgICAgICAgICBpZiAoKGRvbWFpbi5sZW5ndGggPT09IGspICYmIChfbWluICE9PSBfbWF4KSkge1xuICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSBwb3NpdGlvbnNcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGlzdCA9IEFycmF5LmZyb20oZG9tYWluKTsgaSA8IGxpc3QubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGQgPSBsaXN0W2ldO1xuXG4gICAgICAgICAgICAgICAgICBfcG9zLnB1c2goKGQtX21pbikgLyAoX21heC1fbWluKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBjPTA7IGM8azsgYysrKSB7XG4gICAgICAgICAgICAgICAgICAgIF9wb3MucHVzaChjLyhrLTEpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGRvbWFpbi5sZW5ndGggPiAyKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHNldCBkb21haW4gbWFwXG4gICAgICAgICAgICAgICAgICAgIHZhciB0T3V0ID0gZG9tYWluLm1hcChmdW5jdGlvbiAoZCxpKSB7IHJldHVybiBpLyhkb21haW4ubGVuZ3RoLTEpOyB9KTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRCcmVha3MgPSBkb21haW4ubWFwKGZ1bmN0aW9uIChkKSB7IHJldHVybiAoZCAtIF9taW4pIC8gKF9tYXggLSBfbWluKTsgfSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdEJyZWFrcy5ldmVyeShmdW5jdGlvbiAodmFsLCBpKSB7IHJldHVybiB0T3V0W2ldID09PSB2YWw7IH0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0TWFwRG9tYWluID0gZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA8PSAwIHx8IHQgPj0gMSkgeyByZXR1cm4gdDsgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAodCA+PSB0QnJlYWtzW2krMV0pIHsgaSsrOyB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGYgPSAodCAtIHRCcmVha3NbaV0pIC8gKHRCcmVha3NbaSsxXSAtIHRCcmVha3NbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvdXQgPSB0T3V0W2ldICsgZiAqICh0T3V0W2krMV0gLSB0T3V0W2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX2RvbWFpbiA9IFtfbWluLCBfbWF4XTtcbiAgICAgICAgICAgIHJldHVybiBmO1xuICAgICAgICB9O1xuXG4gICAgICAgIGYubW9kZSA9IGZ1bmN0aW9uKF9tKSB7XG4gICAgICAgICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX21vZGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBfbW9kZSA9IF9tO1xuICAgICAgICAgICAgcmVzZXRDYWNoZSgpO1xuICAgICAgICAgICAgcmV0dXJuIGY7XG4gICAgICAgIH07XG5cbiAgICAgICAgZi5yYW5nZSA9IGZ1bmN0aW9uKGNvbG9ycywgX3Bvcykge1xuICAgICAgICAgICAgc2V0Q29sb3JzKGNvbG9ycyk7XG4gICAgICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgfTtcblxuICAgICAgICBmLm91dCA9IGZ1bmN0aW9uKF9vKSB7XG4gICAgICAgICAgICBfb3V0ID0gX287XG4gICAgICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgfTtcblxuICAgICAgICBmLnNwcmVhZCA9IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9zcHJlYWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBfc3ByZWFkID0gdmFsO1xuICAgICAgICAgICAgcmV0dXJuIGY7XG4gICAgICAgIH07XG5cbiAgICAgICAgZi5jb3JyZWN0TGlnaHRuZXNzID0gZnVuY3Rpb24odikge1xuICAgICAgICAgICAgaWYgKHYgPT0gbnVsbCkgeyB2ID0gdHJ1ZTsgfVxuICAgICAgICAgICAgX2NvcnJlY3RMaWdodG5lc3MgPSB2O1xuICAgICAgICAgICAgcmVzZXRDYWNoZSgpO1xuICAgICAgICAgICAgaWYgKF9jb3JyZWN0TGlnaHRuZXNzKSB7XG4gICAgICAgICAgICAgICAgdE1hcExpZ2h0bmVzcyA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIEwwID0gZ2V0Q29sb3IoMCwgdHJ1ZSkubGFiKClbMF07XG4gICAgICAgICAgICAgICAgICAgIHZhciBMMSA9IGdldENvbG9yKDEsIHRydWUpLmxhYigpWzBdO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcG9sID0gTDAgPiBMMTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIExfYWN0dWFsID0gZ2V0Q29sb3IodCwgdHJ1ZSkubGFiKClbMF07XG4gICAgICAgICAgICAgICAgICAgIHZhciBMX2lkZWFsID0gTDAgKyAoKEwxIC0gTDApICogdCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBMX2RpZmYgPSBMX2FjdHVhbCAtIExfaWRlYWw7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0MCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0MSA9IDE7XG4gICAgICAgICAgICAgICAgICAgIHZhciBtYXhfaXRlciA9IDIwO1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKE1hdGguYWJzKExfZGlmZikgPiAxZS0yKSAmJiAobWF4X2l0ZXItLSA+IDApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBvbCkgeyBMX2RpZmYgKj0gLTE7IH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTF9kaWZmIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0MCA9IHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgKz0gKHQxIC0gdCkgKiAwLjU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDEgPSB0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ICs9ICh0MCAtIHQpICogMC41O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBMX2FjdHVhbCA9IGdldENvbG9yKHQsIHRydWUpLmxhYigpWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBMX2RpZmYgPSBMX2FjdHVhbCAtIExfaWRlYWw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0O1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRNYXBMaWdodG5lc3MgPSBmdW5jdGlvbiAodCkgeyByZXR1cm4gdDsgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmO1xuICAgICAgICB9O1xuXG4gICAgICAgIGYucGFkZGluZyA9IGZ1bmN0aW9uKHApIHtcbiAgICAgICAgICAgIGlmIChwICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZSQyKHApID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgICAgICBwID0gW3AscF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF9wYWRkaW5nID0gcDtcbiAgICAgICAgICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9wYWRkaW5nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGYuY29sb3JzID0gZnVuY3Rpb24obnVtQ29sb3JzLCBvdXQpIHtcbiAgICAgICAgICAgIC8vIElmIG5vIGFyZ3VtZW50cyBhcmUgZ2l2ZW4sIHJldHVybiB0aGUgb3JpZ2luYWwgY29sb3JzIHRoYXQgd2VyZSBwcm92aWRlZFxuICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7IG91dCA9ICdoZXgnOyB9XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gW107XG5cbiAgICAgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gX2NvbG9ycy5zbGljZSgwKTtcblxuICAgICAgICAgICAgfSBlbHNlIGlmIChudW1Db2xvcnMgPT09IDEpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBbZigwLjUpXTtcblxuICAgICAgICAgICAgfSBlbHNlIGlmIChudW1Db2xvcnMgPiAxKSB7XG4gICAgICAgICAgICAgICAgdmFyIGRtID0gX2RvbWFpblswXTtcbiAgICAgICAgICAgICAgICB2YXIgZGQgPSBfZG9tYWluWzFdIC0gZG07XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gX19yYW5nZV9fKDAsIG51bUNvbG9ycywgZmFsc2UpLm1hcChmdW5jdGlvbiAoaSkgeyByZXR1cm4gZiggZG0gKyAoKGkvKG51bUNvbG9ycy0xKSkgKiBkZCkgKTsgfSk7XG5cbiAgICAgICAgICAgIH0gZWxzZSB7IC8vIHJldHVybnMgYWxsIGNvbG9ycyBiYXNlZCBvbiB0aGUgZGVmaW5lZCBjbGFzc2VzXG4gICAgICAgICAgICAgICAgY29sb3JzID0gW107XG4gICAgICAgICAgICAgICAgdmFyIHNhbXBsZXMgPSBbXTtcbiAgICAgICAgICAgICAgICBpZiAoX2NsYXNzZXMgJiYgKF9jbGFzc2VzLmxlbmd0aCA+IDIpKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAxLCBlbmQgPSBfY2xhc3Nlcy5sZW5ndGgsIGFzYyA9IDEgPD0gZW5kOyBhc2MgPyBpIDwgZW5kIDogaSA+IGVuZDsgYXNjID8gaSsrIDogaS0tKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVzLnB1c2goKF9jbGFzc2VzW2ktMV0rX2NsYXNzZXNbaV0pKjAuNSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzYW1wbGVzID0gX2RvbWFpbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gc2FtcGxlcy5tYXAoZnVuY3Rpb24gKHYpIHsgcmV0dXJuIGYodik7IH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY2hyb21hJDRbb3V0XSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5tYXAoZnVuY3Rpb24gKGMpIHsgcmV0dXJuIGNbb3V0XSgpOyB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH07XG5cbiAgICAgICAgZi5jYWNoZSA9IGZ1bmN0aW9uKGMpIHtcbiAgICAgICAgICAgIGlmIChjICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBfdXNlQ2FjaGUgPSBjO1xuICAgICAgICAgICAgICAgIHJldHVybiBmO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3VzZUNhY2hlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGYuZ2FtbWEgPSBmdW5jdGlvbihnKSB7XG4gICAgICAgICAgICBpZiAoZyAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgX2dhbW1hID0gZztcbiAgICAgICAgICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9nYW1tYTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBmLm5vZGF0YSA9IGZ1bmN0aW9uKGQpIHtcbiAgICAgICAgICAgIGlmIChkICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBfbmFjb2wgPSBjaHJvbWEkNChkKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9uYWNvbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gZjtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gX19yYW5nZV9fKGxlZnQsIHJpZ2h0LCBpbmNsdXNpdmUpIHtcbiAgICAgIHZhciByYW5nZSA9IFtdO1xuICAgICAgdmFyIGFzY2VuZGluZyA9IGxlZnQgPCByaWdodDtcbiAgICAgIHZhciBlbmQgPSAhaW5jbHVzaXZlID8gcmlnaHQgOiBhc2NlbmRpbmcgPyByaWdodCArIDEgOiByaWdodCAtIDE7XG4gICAgICBmb3IgKHZhciBpID0gbGVmdDsgYXNjZW5kaW5nID8gaSA8IGVuZCA6IGkgPiBlbmQ7IGFzY2VuZGluZyA/IGkrKyA6IGktLSkge1xuICAgICAgICByYW5nZS5wdXNoKGkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJhbmdlO1xuICAgIH1cblxuICAgIC8vXG4gICAgLy8gaW50ZXJwb2xhdGVzIGJldHdlZW4gYSBzZXQgb2YgY29sb3JzIHV6aW5nIGEgYmV6aWVyIHNwbGluZVxuICAgIC8vXG5cbiAgICAvLyBAcmVxdWlyZXMgdXRpbHMgbGFiXG4gICAgdmFyIENvbG9yJDUgPSBDb2xvcl8xO1xuXG4gICAgdmFyIHNjYWxlJDEgPSBzY2FsZSQyO1xuXG4gICAgLy8gbnRoIHJvdyBvZiB0aGUgcGFzY2FsIHRyaWFuZ2xlXG4gICAgdmFyIGJpbm9tX3JvdyA9IGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgdmFyIHJvdyA9IFsxLCAxXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBuZXdyb3cgPSBbMV07XG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMTsgaiA8PSByb3cubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICBuZXdyb3dbal0gPSAocm93W2pdIHx8IDApICsgcm93W2ogLSAxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJvdyA9IG5ld3JvdztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcm93O1xuICAgIH07XG5cbiAgICB2YXIgYmV6aWVyID0gZnVuY3Rpb24oY29sb3JzKSB7XG4gICAgICAgIHZhciBhc3NpZ24sIGFzc2lnbiQxLCBhc3NpZ24kMjtcblxuICAgICAgICB2YXIgSSwgbGFiMCwgbGFiMSwgbGFiMjtcbiAgICAgICAgY29sb3JzID0gY29sb3JzLm1hcChmdW5jdGlvbiAoYykgeyByZXR1cm4gbmV3IENvbG9yJDUoYyk7IH0pO1xuICAgICAgICBpZiAoY29sb3JzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgLy8gbGluZWFyIGludGVycG9sYXRpb25cbiAgICAgICAgICAgIChhc3NpZ24gPSBjb2xvcnMubWFwKGZ1bmN0aW9uIChjKSB7IHJldHVybiBjLmxhYigpOyB9KSwgbGFiMCA9IGFzc2lnblswXSwgbGFiMSA9IGFzc2lnblsxXSk7XG4gICAgICAgICAgICBJID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICAgIHZhciBsYWIgPSAoWzAsIDEsIDJdLm1hcChmdW5jdGlvbiAoaSkgeyByZXR1cm4gbGFiMFtpXSArICh0ICogKGxhYjFbaV0gLSBsYWIwW2ldKSk7IH0pKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbG9yJDUobGFiLCAnbGFiJyk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKGNvbG9ycy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgIC8vIHF1YWRyYXRpYyBiZXppZXIgaW50ZXJwb2xhdGlvblxuICAgICAgICAgICAgKGFzc2lnbiQxID0gY29sb3JzLm1hcChmdW5jdGlvbiAoYykgeyByZXR1cm4gYy5sYWIoKTsgfSksIGxhYjAgPSBhc3NpZ24kMVswXSwgbGFiMSA9IGFzc2lnbiQxWzFdLCBsYWIyID0gYXNzaWduJDFbMl0pO1xuICAgICAgICAgICAgSSA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgICB2YXIgbGFiID0gKFswLCAxLCAyXS5tYXAoZnVuY3Rpb24gKGkpIHsgcmV0dXJuICgoMS10KSooMS10KSAqIGxhYjBbaV0pICsgKDIgKiAoMS10KSAqIHQgKiBsYWIxW2ldKSArICh0ICogdCAqIGxhYjJbaV0pOyB9KSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvciQ1KGxhYiwgJ2xhYicpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmIChjb2xvcnMubGVuZ3RoID09PSA0KSB7XG4gICAgICAgICAgICAvLyBjdWJpYyBiZXppZXIgaW50ZXJwb2xhdGlvblxuICAgICAgICAgICAgdmFyIGxhYjM7XG4gICAgICAgICAgICAoYXNzaWduJDIgPSBjb2xvcnMubWFwKGZ1bmN0aW9uIChjKSB7IHJldHVybiBjLmxhYigpOyB9KSwgbGFiMCA9IGFzc2lnbiQyWzBdLCBsYWIxID0gYXNzaWduJDJbMV0sIGxhYjIgPSBhc3NpZ24kMlsyXSwgbGFiMyA9IGFzc2lnbiQyWzNdKTtcbiAgICAgICAgICAgIEkgPSBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICAgICAgdmFyIGxhYiA9IChbMCwgMSwgMl0ubWFwKGZ1bmN0aW9uIChpKSB7IHJldHVybiAoKDEtdCkqKDEtdCkqKDEtdCkgKiBsYWIwW2ldKSArICgzICogKDEtdCkgKiAoMS10KSAqIHQgKiBsYWIxW2ldKSArICgzICogKDEtdCkgKiB0ICogdCAqIGxhYjJbaV0pICsgKHQqdCp0ICogbGFiM1tpXSk7IH0pKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbG9yJDUobGFiLCAnbGFiJyk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKGNvbG9ycy5sZW5ndGggPj0gNSkge1xuICAgICAgICAgICAgLy8gZ2VuZXJhbCBjYXNlIChkZWdyZWUgbiBiZXppZXIpXG4gICAgICAgICAgICB2YXIgbGFicywgcm93LCBuO1xuICAgICAgICAgICAgbGFicyA9IGNvbG9ycy5tYXAoZnVuY3Rpb24gKGMpIHsgcmV0dXJuIGMubGFiKCk7IH0pO1xuICAgICAgICAgICAgbiA9IGNvbG9ycy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgcm93ID0gYmlub21fcm93KG4pO1xuICAgICAgICAgICAgSSA9IGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICAgICAgdmFyIHUgPSAxIC0gdDtcbiAgICAgICAgICAgICAgICB2YXIgbGFiID0gKFswLCAxLCAyXS5tYXAoZnVuY3Rpb24gKGkpIHsgcmV0dXJuIGxhYnMucmVkdWNlKGZ1bmN0aW9uIChzdW0sIGVsLCBqKSB7IHJldHVybiAoc3VtICsgcm93W2pdICogTWF0aC5wb3coIHUsIChuIC0gaikgKSAqIE1hdGgucG93KCB0LCBqICkgKiBlbFtpXSk7IH0sIDApOyB9KSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvciQ1KGxhYiwgJ2xhYicpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiTm8gcG9pbnQgaW4gcnVubmluZyBiZXppZXIgd2l0aCBvbmx5IG9uZSBjb2xvci5cIilcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gSTtcbiAgICB9O1xuXG4gICAgdmFyIGJlemllcl8xID0gZnVuY3Rpb24gKGNvbG9ycykge1xuICAgICAgICB2YXIgZiA9IGJlemllcihjb2xvcnMpO1xuICAgICAgICBmLnNjYWxlID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gc2NhbGUkMShmKTsgfTtcbiAgICAgICAgcmV0dXJuIGY7XG4gICAgfTtcblxuICAgIC8qXG4gICAgICogaW50ZXJwb2xhdGVzIGJldHdlZW4gYSBzZXQgb2YgY29sb3JzIHV6aW5nIGEgYmV6aWVyIHNwbGluZVxuICAgICAqIGJsZW5kIG1vZGUgZm9ybXVsYXMgdGFrZW4gZnJvbSBodHRwOi8vd3d3LnZlbnR1cmUtd2FyZS5jb20va2V2aW4vY29kaW5nL2xldHMtbGVhcm4tbWF0aC1waG90b3Nob3AtYmxlbmQtbW9kZXMvXG4gICAgICovXG5cbiAgICB2YXIgY2hyb21hJDMgPSBjaHJvbWFfMTtcblxuICAgIHZhciBibGVuZCA9IGZ1bmN0aW9uIChib3R0b20sIHRvcCwgbW9kZSkge1xuICAgICAgICBpZiAoIWJsZW5kW21vZGVdKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Vua25vd24gYmxlbmQgbW9kZSAnICsgbW9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGJsZW5kW21vZGVdKGJvdHRvbSwgdG9wKTtcbiAgICB9O1xuXG4gICAgdmFyIGJsZW5kX2YgPSBmdW5jdGlvbiAoZikgeyByZXR1cm4gZnVuY3Rpb24gKGJvdHRvbSx0b3ApIHtcbiAgICAgICAgICAgIHZhciBjMCA9IGNocm9tYSQzKHRvcCkucmdiKCk7XG4gICAgICAgICAgICB2YXIgYzEgPSBjaHJvbWEkMyhib3R0b20pLnJnYigpO1xuICAgICAgICAgICAgcmV0dXJuIGNocm9tYSQzLnJnYihmKGMwLCBjMSkpO1xuICAgICAgICB9OyB9O1xuXG4gICAgdmFyIGVhY2ggPSBmdW5jdGlvbiAoZikgeyByZXR1cm4gZnVuY3Rpb24gKGMwLCBjMSkge1xuICAgICAgICAgICAgdmFyIG91dCA9IFtdO1xuICAgICAgICAgICAgb3V0WzBdID0gZihjMFswXSwgYzFbMF0pO1xuICAgICAgICAgICAgb3V0WzFdID0gZihjMFsxXSwgYzFbMV0pO1xuICAgICAgICAgICAgb3V0WzJdID0gZihjMFsyXSwgYzFbMl0pO1xuICAgICAgICAgICAgcmV0dXJuIG91dDtcbiAgICAgICAgfTsgfTtcblxuICAgIHZhciBub3JtYWwgPSBmdW5jdGlvbiAoYSkgeyByZXR1cm4gYTsgfTtcbiAgICB2YXIgbXVsdGlwbHkgPSBmdW5jdGlvbiAoYSxiKSB7IHJldHVybiBhICogYiAvIDI1NTsgfTtcbiAgICB2YXIgZGFya2VuID0gZnVuY3Rpb24gKGEsYikgeyByZXR1cm4gYSA+IGIgPyBiIDogYTsgfTtcbiAgICB2YXIgbGlnaHRlbiA9IGZ1bmN0aW9uIChhLGIpIHsgcmV0dXJuIGEgPiBiID8gYSA6IGI7IH07XG4gICAgdmFyIHNjcmVlbiA9IGZ1bmN0aW9uIChhLGIpIHsgcmV0dXJuIDI1NSAqICgxIC0gKDEtYS8yNTUpICogKDEtYi8yNTUpKTsgfTtcbiAgICB2YXIgb3ZlcmxheSA9IGZ1bmN0aW9uIChhLGIpIHsgcmV0dXJuIGIgPCAxMjggPyAyICogYSAqIGIgLyAyNTUgOiAyNTUgKiAoMSAtIDIgKiAoMSAtIGEgLyAyNTUgKSAqICggMSAtIGIgLyAyNTUgKSk7IH07XG4gICAgdmFyIGJ1cm4gPSBmdW5jdGlvbiAoYSxiKSB7IHJldHVybiAyNTUgKiAoMSAtICgxIC0gYiAvIDI1NSkgLyAoYS8yNTUpKTsgfTtcbiAgICB2YXIgZG9kZ2UgPSBmdW5jdGlvbiAoYSxiKSB7XG4gICAgICAgIGlmIChhID09PSAyNTUpIHsgcmV0dXJuIDI1NTsgfVxuICAgICAgICBhID0gMjU1ICogKGIgLyAyNTUpIC8gKDEgLSBhIC8gMjU1KTtcbiAgICAgICAgcmV0dXJuIGEgPiAyNTUgPyAyNTUgOiBhXG4gICAgfTtcblxuICAgIC8vICMgYWRkID0gKGEsYikgLT5cbiAgICAvLyAjICAgICBpZiAoYSArIGIgPiAyNTUpIHRoZW4gMjU1IGVsc2UgYSArIGJcblxuICAgIGJsZW5kLm5vcm1hbCA9IGJsZW5kX2YoZWFjaChub3JtYWwpKTtcbiAgICBibGVuZC5tdWx0aXBseSA9IGJsZW5kX2YoZWFjaChtdWx0aXBseSkpO1xuICAgIGJsZW5kLnNjcmVlbiA9IGJsZW5kX2YoZWFjaChzY3JlZW4pKTtcbiAgICBibGVuZC5vdmVybGF5ID0gYmxlbmRfZihlYWNoKG92ZXJsYXkpKTtcbiAgICBibGVuZC5kYXJrZW4gPSBibGVuZF9mKGVhY2goZGFya2VuKSk7XG4gICAgYmxlbmQubGlnaHRlbiA9IGJsZW5kX2YoZWFjaChsaWdodGVuKSk7XG4gICAgYmxlbmQuZG9kZ2UgPSBibGVuZF9mKGVhY2goZG9kZ2UpKTtcbiAgICBibGVuZC5idXJuID0gYmxlbmRfZihlYWNoKGJ1cm4pKTtcbiAgICAvLyBibGVuZC5hZGQgPSBibGVuZF9mKGVhY2goYWRkKSk7XG5cbiAgICB2YXIgYmxlbmRfMSA9IGJsZW5kO1xuXG4gICAgLy8gY3ViZWhlbGl4IGludGVycG9sYXRpb25cbiAgICAvLyBiYXNlZCBvbiBELkEuIEdyZWVuIFwiQSBjb2xvdXIgc2NoZW1lIGZvciB0aGUgZGlzcGxheSBvZiBhc3Ryb25vbWljYWwgaW50ZW5zaXR5IGltYWdlc1wiXG4gICAgLy8gaHR0cDovL2FzdHJvbi1zb2MuaW4vYnVsbGV0aW4vMTFKdW5lLzI4OTM5MjAxMS5wZGZcblxuICAgIHZhciB0eXBlJDEgPSB1dGlscy50eXBlO1xuICAgIHZhciBjbGlwX3JnYiA9IHV0aWxzLmNsaXBfcmdiO1xuICAgIHZhciBUV09QSSA9IHV0aWxzLlRXT1BJO1xuICAgIHZhciBwb3ckMiA9IE1hdGgucG93O1xuICAgIHZhciBzaW4kMSA9IE1hdGguc2luO1xuICAgIHZhciBjb3MkMSA9IE1hdGguY29zO1xuICAgIHZhciBjaHJvbWEkMiA9IGNocm9tYV8xO1xuXG4gICAgdmFyIGN1YmVoZWxpeCA9IGZ1bmN0aW9uKHN0YXJ0LCByb3RhdGlvbnMsIGh1ZSwgZ2FtbWEsIGxpZ2h0bmVzcykge1xuICAgICAgICBpZiAoIHN0YXJ0ID09PSB2b2lkIDAgKSBzdGFydD0zMDA7XG4gICAgICAgIGlmICggcm90YXRpb25zID09PSB2b2lkIDAgKSByb3RhdGlvbnM9LTEuNTtcbiAgICAgICAgaWYgKCBodWUgPT09IHZvaWQgMCApIGh1ZT0xO1xuICAgICAgICBpZiAoIGdhbW1hID09PSB2b2lkIDAgKSBnYW1tYT0xO1xuICAgICAgICBpZiAoIGxpZ2h0bmVzcyA9PT0gdm9pZCAwICkgbGlnaHRuZXNzPVswLDFdO1xuXG4gICAgICAgIHZhciBkaCA9IDAsIGRsO1xuICAgICAgICBpZiAodHlwZSQxKGxpZ2h0bmVzcykgPT09ICdhcnJheScpIHtcbiAgICAgICAgICAgIGRsID0gbGlnaHRuZXNzWzFdIC0gbGlnaHRuZXNzWzBdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGwgPSAwO1xuICAgICAgICAgICAgbGlnaHRuZXNzID0gW2xpZ2h0bmVzcywgbGlnaHRuZXNzXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBmID0gZnVuY3Rpb24oZnJhY3QpIHtcbiAgICAgICAgICAgIHZhciBhID0gVFdPUEkgKiAoKChzdGFydCsxMjApLzM2MCkgKyAocm90YXRpb25zICogZnJhY3QpKTtcbiAgICAgICAgICAgIHZhciBsID0gcG93JDIobGlnaHRuZXNzWzBdICsgKGRsICogZnJhY3QpLCBnYW1tYSk7XG4gICAgICAgICAgICB2YXIgaCA9IGRoICE9PSAwID8gaHVlWzBdICsgKGZyYWN0ICogZGgpIDogaHVlO1xuICAgICAgICAgICAgdmFyIGFtcCA9IChoICogbCAqICgxLWwpKSAvIDI7XG4gICAgICAgICAgICB2YXIgY29zX2EgPSBjb3MkMShhKTtcbiAgICAgICAgICAgIHZhciBzaW5fYSA9IHNpbiQxKGEpO1xuICAgICAgICAgICAgdmFyIHIgPSBsICsgKGFtcCAqICgoLTAuMTQ4NjEgKiBjb3NfYSkgKyAoMS43ODI3Nyogc2luX2EpKSk7XG4gICAgICAgICAgICB2YXIgZyA9IGwgKyAoYW1wICogKCgtMC4yOTIyNyAqIGNvc19hKSAtICgwLjkwNjQ5KiBzaW5fYSkpKTtcbiAgICAgICAgICAgIHZhciBiID0gbCArIChhbXAgKiAoKzEuOTcyOTQgKiBjb3NfYSkpO1xuICAgICAgICAgICAgcmV0dXJuIGNocm9tYSQyKGNsaXBfcmdiKFtyKjI1NSxnKjI1NSxiKjI1NSwxXSkpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGYuc3RhcnQgPSBmdW5jdGlvbihzKSB7XG4gICAgICAgICAgICBpZiAoKHMgPT0gbnVsbCkpIHsgcmV0dXJuIHN0YXJ0OyB9XG4gICAgICAgICAgICBzdGFydCA9IHM7XG4gICAgICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgfTtcblxuICAgICAgICBmLnJvdGF0aW9ucyA9IGZ1bmN0aW9uKHIpIHtcbiAgICAgICAgICAgIGlmICgociA9PSBudWxsKSkgeyByZXR1cm4gcm90YXRpb25zOyB9XG4gICAgICAgICAgICByb3RhdGlvbnMgPSByO1xuICAgICAgICAgICAgcmV0dXJuIGY7XG4gICAgICAgIH07XG5cbiAgICAgICAgZi5nYW1tYSA9IGZ1bmN0aW9uKGcpIHtcbiAgICAgICAgICAgIGlmICgoZyA9PSBudWxsKSkgeyByZXR1cm4gZ2FtbWE7IH1cbiAgICAgICAgICAgIGdhbW1hID0gZztcbiAgICAgICAgICAgIHJldHVybiBmO1xuICAgICAgICB9O1xuXG4gICAgICAgIGYuaHVlID0gZnVuY3Rpb24oaCkge1xuICAgICAgICAgICAgaWYgKChoID09IG51bGwpKSB7IHJldHVybiBodWU7IH1cbiAgICAgICAgICAgIGh1ZSA9IGg7XG4gICAgICAgICAgICBpZiAodHlwZSQxKGh1ZSkgPT09ICdhcnJheScpIHtcbiAgICAgICAgICAgICAgICBkaCA9IGh1ZVsxXSAtIGh1ZVswXTtcbiAgICAgICAgICAgICAgICBpZiAoZGggPT09IDApIHsgaHVlID0gaHVlWzFdOyB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRoID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmO1xuICAgICAgICB9O1xuXG4gICAgICAgIGYubGlnaHRuZXNzID0gZnVuY3Rpb24oaCkge1xuICAgICAgICAgICAgaWYgKChoID09IG51bGwpKSB7IHJldHVybiBsaWdodG5lc3M7IH1cbiAgICAgICAgICAgIGlmICh0eXBlJDEoaCkgPT09ICdhcnJheScpIHtcbiAgICAgICAgICAgICAgICBsaWdodG5lc3MgPSBoO1xuICAgICAgICAgICAgICAgIGRsID0gaFsxXSAtIGhbMF07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxpZ2h0bmVzcyA9IFtoLGhdO1xuICAgICAgICAgICAgICAgIGRsID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmO1xuICAgICAgICB9O1xuXG4gICAgICAgIGYuc2NhbGUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBjaHJvbWEkMi5zY2FsZShmKTsgfTtcblxuICAgICAgICBmLmh1ZShodWUpO1xuXG4gICAgICAgIHJldHVybiBmO1xuICAgIH07XG5cbiAgICB2YXIgQ29sb3IkNCA9IENvbG9yXzE7XG4gICAgdmFyIGRpZ2l0cyA9ICcwMTIzNDU2Nzg5YWJjZGVmJztcblxuICAgIHZhciBmbG9vciQxID0gTWF0aC5mbG9vcjtcbiAgICB2YXIgcmFuZG9tID0gTWF0aC5yYW5kb207XG5cbiAgICB2YXIgcmFuZG9tXzEgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBjb2RlID0gJyMnO1xuICAgICAgICBmb3IgKHZhciBpPTA7IGk8NjsgaSsrKSB7XG4gICAgICAgICAgICBjb2RlICs9IGRpZ2l0cy5jaGFyQXQoZmxvb3IkMShyYW5kb20oKSAqIDE2KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBDb2xvciQ0KGNvZGUsICdoZXgnKTtcbiAgICB9O1xuXG4gICAgdmFyIHR5cGUgPSB0eXBlJHA7XG4gICAgdmFyIGxvZyA9IE1hdGgubG9nO1xuICAgIHZhciBwb3ckMSA9IE1hdGgucG93O1xuICAgIHZhciBmbG9vciA9IE1hdGguZmxvb3I7XG4gICAgdmFyIGFicyQxID0gTWF0aC5hYnM7XG5cblxuICAgIHZhciBhbmFseXplID0gZnVuY3Rpb24gKGRhdGEsIGtleSkge1xuICAgICAgICBpZiAoIGtleSA9PT0gdm9pZCAwICkga2V5PW51bGw7XG5cbiAgICAgICAgdmFyIHIgPSB7XG4gICAgICAgICAgICBtaW46IE51bWJlci5NQVhfVkFMVUUsXG4gICAgICAgICAgICBtYXg6IE51bWJlci5NQVhfVkFMVUUqLTEsXG4gICAgICAgICAgICBzdW06IDAsXG4gICAgICAgICAgICB2YWx1ZXM6IFtdLFxuICAgICAgICAgICAgY291bnQ6IDBcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHR5cGUoZGF0YSkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBkYXRhID0gT2JqZWN0LnZhbHVlcyhkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBkYXRhLmZvckVhY2goZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgaWYgKGtleSAmJiB0eXBlKHZhbCkgPT09ICdvYmplY3QnKSB7IHZhbCA9IHZhbFtrZXldOyB9XG4gICAgICAgICAgICBpZiAodmFsICE9PSB1bmRlZmluZWQgJiYgdmFsICE9PSBudWxsICYmICFpc05hTih2YWwpKSB7XG4gICAgICAgICAgICAgICAgci52YWx1ZXMucHVzaCh2YWwpO1xuICAgICAgICAgICAgICAgIHIuc3VtICs9IHZhbDtcbiAgICAgICAgICAgICAgICBpZiAodmFsIDwgci5taW4pIHsgci5taW4gPSB2YWw7IH1cbiAgICAgICAgICAgICAgICBpZiAodmFsID4gci5tYXgpIHsgci5tYXggPSB2YWw7IH1cbiAgICAgICAgICAgICAgICByLmNvdW50ICs9IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHIuZG9tYWluID0gW3IubWluLCByLm1heF07XG5cbiAgICAgICAgci5saW1pdHMgPSBmdW5jdGlvbiAobW9kZSwgbnVtKSB7IHJldHVybiBsaW1pdHMociwgbW9kZSwgbnVtKTsgfTtcblxuICAgICAgICByZXR1cm4gcjtcbiAgICB9O1xuXG5cbiAgICB2YXIgbGltaXRzID0gZnVuY3Rpb24gKGRhdGEsIG1vZGUsIG51bSkge1xuICAgICAgICBpZiAoIG1vZGUgPT09IHZvaWQgMCApIG1vZGU9J2VxdWFsJztcbiAgICAgICAgaWYgKCBudW0gPT09IHZvaWQgMCApIG51bT03O1xuXG4gICAgICAgIGlmICh0eXBlKGRhdGEpID09ICdhcnJheScpIHtcbiAgICAgICAgICAgIGRhdGEgPSBhbmFseXplKGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBtaW4gPSBkYXRhLm1pbjtcbiAgICAgICAgdmFyIG1heCA9IGRhdGEubWF4O1xuICAgICAgICB2YXIgdmFsdWVzID0gZGF0YS52YWx1ZXMuc29ydChmdW5jdGlvbiAoYSxiKSB7IHJldHVybiBhLWI7IH0pO1xuXG4gICAgICAgIGlmIChudW0gPT09IDEpIHsgcmV0dXJuIFttaW4sbWF4XTsgfVxuXG4gICAgICAgIHZhciBsaW1pdHMgPSBbXTtcblxuICAgICAgICBpZiAobW9kZS5zdWJzdHIoMCwxKSA9PT0gJ2MnKSB7IC8vIGNvbnRpbnVvdXNcbiAgICAgICAgICAgIGxpbWl0cy5wdXNoKG1pbik7XG4gICAgICAgICAgICBsaW1pdHMucHVzaChtYXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1vZGUuc3Vic3RyKDAsMSkgPT09ICdlJykgeyAvLyBlcXVhbCBpbnRlcnZhbFxuICAgICAgICAgICAgbGltaXRzLnB1c2gobWluKTtcbiAgICAgICAgICAgIGZvciAodmFyIGk9MTsgaTxudW07IGkrKykge1xuICAgICAgICAgICAgICAgIGxpbWl0cy5wdXNoKG1pbisoKGkvbnVtKSoobWF4LW1pbikpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxpbWl0cy5wdXNoKG1heCk7XG4gICAgICAgIH1cblxuICAgICAgICBlbHNlIGlmIChtb2RlLnN1YnN0cigwLDEpID09PSAnbCcpIHsgLy8gbG9nIHNjYWxlXG4gICAgICAgICAgICBpZiAobWluIDw9IDApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0xvZ2FyaXRobWljIHNjYWxlcyBhcmUgb25seSBwb3NzaWJsZSBmb3IgdmFsdWVzID4gMCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIG1pbl9sb2cgPSBNYXRoLkxPRzEwRSAqIGxvZyhtaW4pO1xuICAgICAgICAgICAgdmFyIG1heF9sb2cgPSBNYXRoLkxPRzEwRSAqIGxvZyhtYXgpO1xuICAgICAgICAgICAgbGltaXRzLnB1c2gobWluKTtcbiAgICAgICAgICAgIGZvciAodmFyIGkkMT0xOyBpJDE8bnVtOyBpJDErKykge1xuICAgICAgICAgICAgICAgIGxpbWl0cy5wdXNoKHBvdyQxKDEwLCBtaW5fbG9nICsgKChpJDEvbnVtKSAqIChtYXhfbG9nIC0gbWluX2xvZykpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsaW1pdHMucHVzaChtYXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgZWxzZSBpZiAobW9kZS5zdWJzdHIoMCwxKSA9PT0gJ3EnKSB7IC8vIHF1YW50aWxlIHNjYWxlXG4gICAgICAgICAgICBsaW1pdHMucHVzaChtaW4pO1xuICAgICAgICAgICAgZm9yICh2YXIgaSQyPTE7IGkkMjxudW07IGkkMisrKSB7XG4gICAgICAgICAgICAgICAgdmFyIHAgPSAoKHZhbHVlcy5sZW5ndGgtMSkgKiBpJDIpL251bTtcbiAgICAgICAgICAgICAgICB2YXIgcGIgPSBmbG9vcihwKTtcbiAgICAgICAgICAgICAgICBpZiAocGIgPT09IHApIHtcbiAgICAgICAgICAgICAgICAgICAgbGltaXRzLnB1c2godmFsdWVzW3BiXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHsgLy8gcCA+IHBiXG4gICAgICAgICAgICAgICAgICAgIHZhciBwciA9IHAgLSBwYjtcbiAgICAgICAgICAgICAgICAgICAgbGltaXRzLnB1c2goKHZhbHVlc1twYl0qKDEtcHIpKSArICh2YWx1ZXNbcGIrMV0qcHIpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsaW1pdHMucHVzaChtYXgpO1xuXG4gICAgICAgIH1cblxuICAgICAgICBlbHNlIGlmIChtb2RlLnN1YnN0cigwLDEpID09PSAnaycpIHsgLy8gay1tZWFucyBjbHVzdGVyaW5nXG4gICAgICAgICAgICAvKlxuICAgICAgICAgICAgaW1wbGVtZW50YXRpb24gYmFzZWQgb25cbiAgICAgICAgICAgIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9maWd1ZS9zb3VyY2UvYnJvd3NlL3RydW5rL2ZpZ3VlLmpzIzMzNlxuICAgICAgICAgICAgc2ltcGxpZmllZCBmb3IgMS1kIGlucHV0IHZhbHVlc1xuICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHZhciBjbHVzdGVyO1xuICAgICAgICAgICAgdmFyIG4gPSB2YWx1ZXMubGVuZ3RoO1xuICAgICAgICAgICAgdmFyIGFzc2lnbm1lbnRzID0gbmV3IEFycmF5KG4pO1xuICAgICAgICAgICAgdmFyIGNsdXN0ZXJTaXplcyA9IG5ldyBBcnJheShudW0pO1xuICAgICAgICAgICAgdmFyIHJlcGVhdCA9IHRydWU7XG4gICAgICAgICAgICB2YXIgbmJfaXRlcnMgPSAwO1xuICAgICAgICAgICAgdmFyIGNlbnRyb2lkcyA9IG51bGw7XG5cbiAgICAgICAgICAgIC8vIGdldCBzZWVkIHZhbHVlc1xuICAgICAgICAgICAgY2VudHJvaWRzID0gW107XG4gICAgICAgICAgICBjZW50cm9pZHMucHVzaChtaW4pO1xuICAgICAgICAgICAgZm9yICh2YXIgaSQzPTE7IGkkMzxudW07IGkkMysrKSB7XG4gICAgICAgICAgICAgICAgY2VudHJvaWRzLnB1c2gobWluICsgKChpJDMvbnVtKSAqIChtYXgtbWluKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2VudHJvaWRzLnB1c2gobWF4KTtcblxuICAgICAgICAgICAgd2hpbGUgKHJlcGVhdCkge1xuICAgICAgICAgICAgICAgIC8vIGFzc2lnbm1lbnQgc3RlcFxuICAgICAgICAgICAgICAgIGZvciAodmFyIGo9MDsgajxudW07IGorKykge1xuICAgICAgICAgICAgICAgICAgICBjbHVzdGVyU2l6ZXNbal0gPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpJDQ9MDsgaSQ0PG47IGkkNCsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHZhbHVlc1tpJDRdO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbWluZGlzdCA9IE51bWJlci5NQVhfVkFMVUU7XG4gICAgICAgICAgICAgICAgICAgIHZhciBiZXN0ID0gKHZvaWQgMCk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGokMT0wOyBqJDE8bnVtOyBqJDErKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRpc3QgPSBhYnMkMShjZW50cm9pZHNbaiQxXS12YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGlzdCA8IG1pbmRpc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5kaXN0ID0gZGlzdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZXN0ID0gaiQxO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2x1c3RlclNpemVzW2Jlc3RdKys7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NpZ25tZW50c1tpJDRdID0gYmVzdDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSBjZW50cm9pZHMgc3RlcFxuICAgICAgICAgICAgICAgIHZhciBuZXdDZW50cm9pZHMgPSBuZXcgQXJyYXkobnVtKTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBqJDI9MDsgaiQyPG51bTsgaiQyKyspIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3Q2VudHJvaWRzW2okMl0gPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpJDU9MDsgaSQ1PG47IGkkNSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNsdXN0ZXIgPSBhc3NpZ25tZW50c1tpJDVdO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV3Q2VudHJvaWRzW2NsdXN0ZXJdID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdDZW50cm9pZHNbY2x1c3Rlcl0gPSB2YWx1ZXNbaSQ1XTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NlbnRyb2lkc1tjbHVzdGVyXSArPSB2YWx1ZXNbaSQ1XTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmb3IgKHZhciBqJDM9MDsgaiQzPG51bTsgaiQzKyspIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3Q2VudHJvaWRzW2okM10gKj0gMS9jbHVzdGVyU2l6ZXNbaiQzXTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBjaGVjayBjb252ZXJnZW5jZVxuICAgICAgICAgICAgICAgIHJlcGVhdCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGokND0wOyBqJDQ8bnVtOyBqJDQrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV3Q2VudHJvaWRzW2okNF0gIT09IGNlbnRyb2lkc1tqJDRdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXBlYXQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjZW50cm9pZHMgPSBuZXdDZW50cm9pZHM7XG4gICAgICAgICAgICAgICAgbmJfaXRlcnMrKztcblxuICAgICAgICAgICAgICAgIGlmIChuYl9pdGVycyA+IDIwMCkge1xuICAgICAgICAgICAgICAgICAgICByZXBlYXQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGZpbmlzaGVkIGstbWVhbnMgY2x1c3RlcmluZ1xuICAgICAgICAgICAgLy8gdGhlIG5leHQgcGFydCBpcyBib3Jyb3dlZCBmcm9tIGdhYnJpZWxmbG9yLml0XG4gICAgICAgICAgICB2YXIga0NsdXN0ZXJzID0ge307XG4gICAgICAgICAgICBmb3IgKHZhciBqJDU9MDsgaiQ1PG51bTsgaiQ1KyspIHtcbiAgICAgICAgICAgICAgICBrQ2x1c3RlcnNbaiQ1XSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yICh2YXIgaSQ2PTA7IGkkNjxuOyBpJDYrKykge1xuICAgICAgICAgICAgICAgIGNsdXN0ZXIgPSBhc3NpZ25tZW50c1tpJDZdO1xuICAgICAgICAgICAgICAgIGtDbHVzdGVyc1tjbHVzdGVyXS5wdXNoKHZhbHVlc1tpJDZdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciB0bXBLTWVhbnNCcmVha3MgPSBbXTtcbiAgICAgICAgICAgIGZvciAodmFyIGokNj0wOyBqJDY8bnVtOyBqJDYrKykge1xuICAgICAgICAgICAgICAgIHRtcEtNZWFuc0JyZWFrcy5wdXNoKGtDbHVzdGVyc1tqJDZdWzBdKTtcbiAgICAgICAgICAgICAgICB0bXBLTWVhbnNCcmVha3MucHVzaChrQ2x1c3RlcnNbaiQ2XVtrQ2x1c3RlcnNbaiQ2XS5sZW5ndGgtMV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdG1wS01lYW5zQnJlYWtzID0gdG1wS01lYW5zQnJlYWtzLnNvcnQoZnVuY3Rpb24gKGEsYil7IHJldHVybiBhLWI7IH0pO1xuICAgICAgICAgICAgbGltaXRzLnB1c2godG1wS01lYW5zQnJlYWtzWzBdKTtcbiAgICAgICAgICAgIGZvciAodmFyIGkkNz0xOyBpJDcgPCB0bXBLTWVhbnNCcmVha3MubGVuZ3RoOyBpJDcrPSAyKSB7XG4gICAgICAgICAgICAgICAgdmFyIHYgPSB0bXBLTWVhbnNCcmVha3NbaSQ3XTtcbiAgICAgICAgICAgICAgICBpZiAoIWlzTmFOKHYpICYmIChsaW1pdHMuaW5kZXhPZih2KSA9PT0gLTEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGxpbWl0cy5wdXNoKHYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGltaXRzO1xuICAgIH07XG5cbiAgICB2YXIgYW5hbHl6ZV8xID0ge2FuYWx5emU6IGFuYWx5emUsIGxpbWl0czogbGltaXRzfTtcblxuICAgIHZhciBDb2xvciQzID0gQ29sb3JfMTtcblxuXG4gICAgdmFyIGNvbnRyYXN0ID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgLy8gV0NBRyBjb250cmFzdCByYXRpb1xuICAgICAgICAvLyBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwOC9SRUMtV0NBRzIwLTIwMDgxMjExLyNjb250cmFzdC1yYXRpb2RlZlxuICAgICAgICBhID0gbmV3IENvbG9yJDMoYSk7XG4gICAgICAgIGIgPSBuZXcgQ29sb3IkMyhiKTtcbiAgICAgICAgdmFyIGwxID0gYS5sdW1pbmFuY2UoKTtcbiAgICAgICAgdmFyIGwyID0gYi5sdW1pbmFuY2UoKTtcbiAgICAgICAgcmV0dXJuIGwxID4gbDIgPyAobDEgKyAwLjA1KSAvIChsMiArIDAuMDUpIDogKGwyICsgMC4wNSkgLyAobDEgKyAwLjA1KTtcbiAgICB9O1xuXG4gICAgdmFyIENvbG9yJDIgPSBDb2xvcl8xO1xuICAgIHZhciBzcXJ0ID0gTWF0aC5zcXJ0O1xuICAgIHZhciBwb3cgPSBNYXRoLnBvdztcbiAgICB2YXIgbWluID0gTWF0aC5taW47XG4gICAgdmFyIG1heCA9IE1hdGgubWF4O1xuICAgIHZhciBhdGFuMiA9IE1hdGguYXRhbjI7XG4gICAgdmFyIGFicyA9IE1hdGguYWJzO1xuICAgIHZhciBjb3MgPSBNYXRoLmNvcztcbiAgICB2YXIgc2luID0gTWF0aC5zaW47XG4gICAgdmFyIGV4cCA9IE1hdGguZXhwO1xuICAgIHZhciBQSSA9IE1hdGguUEk7XG5cbiAgICB2YXIgZGVsdGFFID0gZnVuY3Rpb24oYSwgYiwgS2wsIEtjLCBLaCkge1xuICAgICAgICBpZiAoIEtsID09PSB2b2lkIDAgKSBLbD0xO1xuICAgICAgICBpZiAoIEtjID09PSB2b2lkIDAgKSBLYz0xO1xuICAgICAgICBpZiAoIEtoID09PSB2b2lkIDAgKSBLaD0xO1xuXG4gICAgICAgIC8vIERlbHRhIEUgKENJRSAyMDAwKVxuICAgICAgICAvLyBzZWUgaHR0cDovL3d3dy5icnVjZWxpbmRibG9vbS5jb20vaW5kZXguaHRtbD9FcW5fRGVsdGFFX0NJRTIwMDAuaHRtbFxuICAgICAgICB2YXIgcmFkMmRlZyA9IGZ1bmN0aW9uKHJhZCkge1xuICAgICAgICAgICAgcmV0dXJuIDM2MCAqIHJhZCAvICgyICogUEkpO1xuICAgICAgICB9O1xuICAgICAgICB2YXIgZGVnMnJhZCA9IGZ1bmN0aW9uKGRlZykge1xuICAgICAgICAgICAgcmV0dXJuICgyICogUEkgKiBkZWcpIC8gMzYwO1xuICAgICAgICB9O1xuICAgICAgICBhID0gbmV3IENvbG9yJDIoYSk7XG4gICAgICAgIGIgPSBuZXcgQ29sb3IkMihiKTtcbiAgICAgICAgdmFyIHJlZiA9IEFycmF5LmZyb20oYS5sYWIoKSk7XG4gICAgICAgIHZhciBMMSA9IHJlZlswXTtcbiAgICAgICAgdmFyIGExID0gcmVmWzFdO1xuICAgICAgICB2YXIgYjEgPSByZWZbMl07XG4gICAgICAgIHZhciByZWYkMSA9IEFycmF5LmZyb20oYi5sYWIoKSk7XG4gICAgICAgIHZhciBMMiA9IHJlZiQxWzBdO1xuICAgICAgICB2YXIgYTIgPSByZWYkMVsxXTtcbiAgICAgICAgdmFyIGIyID0gcmVmJDFbMl07XG4gICAgICAgIHZhciBhdmdMID0gKEwxICsgTDIpLzI7XG4gICAgICAgIHZhciBDMSA9IHNxcnQocG93KGExLCAyKSArIHBvdyhiMSwgMikpO1xuICAgICAgICB2YXIgQzIgPSBzcXJ0KHBvdyhhMiwgMikgKyBwb3coYjIsIDIpKTtcbiAgICAgICAgdmFyIGF2Z0MgPSAoQzEgKyBDMikvMjtcbiAgICAgICAgdmFyIEcgPSAwLjUqKDEtc3FydChwb3coYXZnQywgNykvKHBvdyhhdmdDLCA3KSArIHBvdygyNSwgNykpKSk7XG4gICAgICAgIHZhciBhMXAgPSBhMSooMStHKTtcbiAgICAgICAgdmFyIGEycCA9IGEyKigxK0cpO1xuICAgICAgICB2YXIgQzFwID0gc3FydChwb3coYTFwLCAyKSArIHBvdyhiMSwgMikpO1xuICAgICAgICB2YXIgQzJwID0gc3FydChwb3coYTJwLCAyKSArIHBvdyhiMiwgMikpO1xuICAgICAgICB2YXIgYXZnQ3AgPSAoQzFwICsgQzJwKS8yO1xuICAgICAgICB2YXIgYXJjdGFuMSA9IHJhZDJkZWcoYXRhbjIoYjEsIGExcCkpO1xuICAgICAgICB2YXIgYXJjdGFuMiA9IHJhZDJkZWcoYXRhbjIoYjIsIGEycCkpO1xuICAgICAgICB2YXIgaDFwID0gYXJjdGFuMSA+PSAwID8gYXJjdGFuMSA6IGFyY3RhbjEgKyAzNjA7XG4gICAgICAgIHZhciBoMnAgPSBhcmN0YW4yID49IDAgPyBhcmN0YW4yIDogYXJjdGFuMiArIDM2MDtcbiAgICAgICAgdmFyIGF2Z0hwID0gYWJzKGgxcCAtIGgycCkgPiAxODAgPyAoaDFwICsgaDJwICsgMzYwKS8yIDogKGgxcCArIGgycCkvMjtcbiAgICAgICAgdmFyIFQgPSAxIC0gMC4xNypjb3MoZGVnMnJhZChhdmdIcCAtIDMwKSkgKyAwLjI0KmNvcyhkZWcycmFkKDIqYXZnSHApKSArIDAuMzIqY29zKGRlZzJyYWQoMyphdmdIcCArIDYpKSAtIDAuMipjb3MoZGVnMnJhZCg0KmF2Z0hwIC0gNjMpKTtcbiAgICAgICAgdmFyIGRlbHRhSHAgPSBoMnAgLSBoMXA7XG4gICAgICAgIGRlbHRhSHAgPSBhYnMoZGVsdGFIcCkgPD0gMTgwID8gZGVsdGFIcCA6IGgycCA8PSBoMXAgPyBkZWx0YUhwICsgMzYwIDogZGVsdGFIcCAtIDM2MDtcbiAgICAgICAgZGVsdGFIcCA9IDIqc3FydChDMXAqQzJwKSpzaW4oZGVnMnJhZChkZWx0YUhwKS8yKTtcbiAgICAgICAgdmFyIGRlbHRhTCA9IEwyIC0gTDE7XG4gICAgICAgIHZhciBkZWx0YUNwID0gQzJwIC0gQzFwOyAgICBcbiAgICAgICAgdmFyIHNsID0gMSArICgwLjAxNSpwb3coYXZnTCAtIDUwLCAyKSkvc3FydCgyMCArIHBvdyhhdmdMIC0gNTAsIDIpKTtcbiAgICAgICAgdmFyIHNjID0gMSArIDAuMDQ1KmF2Z0NwO1xuICAgICAgICB2YXIgc2ggPSAxICsgMC4wMTUqYXZnQ3AqVDtcbiAgICAgICAgdmFyIGRlbHRhVGhldGEgPSAzMCpleHAoLXBvdygoYXZnSHAgLSAyNzUpLzI1LCAyKSk7XG4gICAgICAgIHZhciBSYyA9IDIqc3FydChwb3coYXZnQ3AsIDcpLyhwb3coYXZnQ3AsIDcpICsgcG93KDI1LCA3KSkpO1xuICAgICAgICB2YXIgUnQgPSAtUmMqc2luKDIqZGVnMnJhZChkZWx0YVRoZXRhKSk7XG4gICAgICAgIHZhciByZXN1bHQgPSBzcXJ0KHBvdyhkZWx0YUwvKEtsKnNsKSwgMikgKyBwb3coZGVsdGFDcC8oS2Mqc2MpLCAyKSArIHBvdyhkZWx0YUhwLyhLaCpzaCksIDIpICsgUnQqKGRlbHRhQ3AvKEtjKnNjKSkqKGRlbHRhSHAvKEtoKnNoKSkpO1xuICAgICAgICByZXR1cm4gbWF4KDAsIG1pbigxMDAsIHJlc3VsdCkpO1xuICAgIH07XG5cbiAgICB2YXIgQ29sb3IkMSA9IENvbG9yXzE7XG5cbiAgICAvLyBzaW1wbGUgRXVjbGlkZWFuIGRpc3RhbmNlXG4gICAgdmFyIGRpc3RhbmNlID0gZnVuY3Rpb24oYSwgYiwgbW9kZSkge1xuICAgICAgICBpZiAoIG1vZGUgPT09IHZvaWQgMCApIG1vZGU9J2xhYic7XG5cbiAgICAgICAgLy8gRGVsdGEgRSAoQ0lFIDE5NzYpXG4gICAgICAgIC8vIHNlZSBodHRwOi8vd3d3LmJydWNlbGluZGJsb29tLmNvbS9pbmRleC5odG1sP0VxdWF0aW9ucy5odG1sXG4gICAgICAgIGEgPSBuZXcgQ29sb3IkMShhKTtcbiAgICAgICAgYiA9IG5ldyBDb2xvciQxKGIpO1xuICAgICAgICB2YXIgbDEgPSBhLmdldChtb2RlKTtcbiAgICAgICAgdmFyIGwyID0gYi5nZXQobW9kZSk7XG4gICAgICAgIHZhciBzdW1fc3EgPSAwO1xuICAgICAgICBmb3IgKHZhciBpIGluIGwxKSB7XG4gICAgICAgICAgICB2YXIgZCA9IChsMVtpXSB8fCAwKSAtIChsMltpXSB8fCAwKTtcbiAgICAgICAgICAgIHN1bV9zcSArPSBkKmQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE1hdGguc3FydChzdW1fc3EpO1xuICAgIH07XG5cbiAgICB2YXIgQ29sb3IgPSBDb2xvcl8xO1xuXG4gICAgdmFyIHZhbGlkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KCBDb2xvciwgWyBudWxsIF0uY29uY2F0KCBhcmdzKSApKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gc29tZSBwcmUtZGVmaW5lZCBjb2xvciBzY2FsZXM6XG4gICAgdmFyIGNocm9tYSQxID0gY2hyb21hXzE7XG5cbiAgICB2YXIgc2NhbGUgPSBzY2FsZSQyO1xuXG4gICAgdmFyIHNjYWxlcyA9IHtcbiAgICBcdGNvb2w6IGZ1bmN0aW9uIGNvb2woKSB7IHJldHVybiBzY2FsZShbY2hyb21hJDEuaHNsKDE4MCwxLC45KSwgY2hyb21hJDEuaHNsKDI1MCwuNywuNCldKSB9LFxuICAgIFx0aG90OiBmdW5jdGlvbiBob3QoKSB7IHJldHVybiBzY2FsZShbJyMwMDAnLCcjZjAwJywnI2ZmMCcsJyNmZmYnXSkubW9kZSgncmdiJykgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgICAgQ29sb3JCcmV3ZXIgY29sb3JzIGZvciBjaHJvbWEuanNcblxuICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMDIgQ3ludGhpYSBCcmV3ZXIsIE1hcmsgSGFycm93ZXIsIGFuZCBUaGVcbiAgICAgICAgUGVubnN5bHZhbmlhIFN0YXRlIFVuaXZlcnNpdHkuXG5cbiAgICAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAgICAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICAgICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgICAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSBkaXN0cmlidXRlZFxuICAgICAgICB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUlxuICAgICAgICBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZVxuICAgICAgICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICAgICovXG5cbiAgICB2YXIgY29sb3JicmV3ZXIgPSB7XG4gICAgICAgIC8vIHNlcXVlbnRpYWxcbiAgICAgICAgT3JSZDogWycjZmZmN2VjJywgJyNmZWU4YzgnLCAnI2ZkZDQ5ZScsICcjZmRiYjg0JywgJyNmYzhkNTknLCAnI2VmNjU0OCcsICcjZDczMDFmJywgJyNiMzAwMDAnLCAnIzdmMDAwMCddLFxuICAgICAgICBQdUJ1OiBbJyNmZmY3ZmInLCAnI2VjZTdmMicsICcjZDBkMWU2JywgJyNhNmJkZGInLCAnIzc0YTljZicsICcjMzY5MGMwJywgJyMwNTcwYjAnLCAnIzA0NWE4ZCcsICcjMDIzODU4J10sXG4gICAgICAgIEJ1UHU6IFsnI2Y3ZmNmZCcsICcjZTBlY2Y0JywgJyNiZmQzZTYnLCAnIzllYmNkYScsICcjOGM5NmM2JywgJyM4YzZiYjEnLCAnIzg4NDE5ZCcsICcjODEwZjdjJywgJyM0ZDAwNGInXSxcbiAgICAgICAgT3JhbmdlczogWycjZmZmNWViJywgJyNmZWU2Y2UnLCAnI2ZkZDBhMicsICcjZmRhZTZiJywgJyNmZDhkM2MnLCAnI2YxNjkxMycsICcjZDk0ODAxJywgJyNhNjM2MDMnLCAnIzdmMjcwNCddLFxuICAgICAgICBCdUduOiBbJyNmN2ZjZmQnLCAnI2U1ZjVmOScsICcjY2NlY2U2JywgJyM5OWQ4YzknLCAnIzY2YzJhNCcsICcjNDFhZTc2JywgJyMyMzhiNDUnLCAnIzAwNmQyYycsICcjMDA0NDFiJ10sXG4gICAgICAgIFlsT3JCcjogWycjZmZmZmU1JywgJyNmZmY3YmMnLCAnI2ZlZTM5MScsICcjZmVjNDRmJywgJyNmZTk5MjknLCAnI2VjNzAxNCcsICcjY2M0YzAyJywgJyM5OTM0MDQnLCAnIzY2MjUwNiddLFxuICAgICAgICBZbEduOiBbJyNmZmZmZTUnLCAnI2Y3ZmNiOScsICcjZDlmMGEzJywgJyNhZGRkOGUnLCAnIzc4YzY3OScsICcjNDFhYjVkJywgJyMyMzg0NDMnLCAnIzAwNjgzNycsICcjMDA0NTI5J10sXG4gICAgICAgIFJlZHM6IFsnI2ZmZjVmMCcsICcjZmVlMGQyJywgJyNmY2JiYTEnLCAnI2ZjOTI3MicsICcjZmI2YTRhJywgJyNlZjNiMmMnLCAnI2NiMTgxZCcsICcjYTUwZjE1JywgJyM2NzAwMGQnXSxcbiAgICAgICAgUmRQdTogWycjZmZmN2YzJywgJyNmZGUwZGQnLCAnI2ZjYzVjMCcsICcjZmE5ZmI1JywgJyNmNzY4YTEnLCAnI2RkMzQ5NycsICcjYWUwMTdlJywgJyM3YTAxNzcnLCAnIzQ5MDA2YSddLFxuICAgICAgICBHcmVlbnM6IFsnI2Y3ZmNmNScsICcjZTVmNWUwJywgJyNjN2U5YzAnLCAnI2ExZDk5YicsICcjNzRjNDc2JywgJyM0MWFiNWQnLCAnIzIzOGI0NScsICcjMDA2ZDJjJywgJyMwMDQ0MWInXSxcbiAgICAgICAgWWxHbkJ1OiBbJyNmZmZmZDknLCAnI2VkZjhiMScsICcjYzdlOWI0JywgJyM3ZmNkYmInLCAnIzQxYjZjNCcsICcjMWQ5MWMwJywgJyMyMjVlYTgnLCAnIzI1MzQ5NCcsICcjMDgxZDU4J10sXG4gICAgICAgIFB1cnBsZXM6IFsnI2ZjZmJmZCcsICcjZWZlZGY1JywgJyNkYWRhZWInLCAnI2JjYmRkYycsICcjOWU5YWM4JywgJyM4MDdkYmEnLCAnIzZhNTFhMycsICcjNTQyNzhmJywgJyMzZjAwN2QnXSxcbiAgICAgICAgR25CdTogWycjZjdmY2YwJywgJyNlMGYzZGInLCAnI2NjZWJjNScsICcjYThkZGI1JywgJyM3YmNjYzQnLCAnIzRlYjNkMycsICcjMmI4Y2JlJywgJyMwODY4YWMnLCAnIzA4NDA4MSddLFxuICAgICAgICBHcmV5czogWycjZmZmZmZmJywgJyNmMGYwZjAnLCAnI2Q5ZDlkOScsICcjYmRiZGJkJywgJyM5Njk2OTYnLCAnIzczNzM3MycsICcjNTI1MjUyJywgJyMyNTI1MjUnLCAnIzAwMDAwMCddLFxuICAgICAgICBZbE9yUmQ6IFsnI2ZmZmZjYycsICcjZmZlZGEwJywgJyNmZWQ5NzYnLCAnI2ZlYjI0YycsICcjZmQ4ZDNjJywgJyNmYzRlMmEnLCAnI2UzMWExYycsICcjYmQwMDI2JywgJyM4MDAwMjYnXSxcbiAgICAgICAgUHVSZDogWycjZjdmNGY5JywgJyNlN2UxZWYnLCAnI2Q0YjlkYScsICcjYzk5NGM3JywgJyNkZjY1YjAnLCAnI2U3Mjk4YScsICcjY2UxMjU2JywgJyM5ODAwNDMnLCAnIzY3MDAxZiddLFxuICAgICAgICBCbHVlczogWycjZjdmYmZmJywgJyNkZWViZjcnLCAnI2M2ZGJlZicsICcjOWVjYWUxJywgJyM2YmFlZDYnLCAnIzQyOTJjNicsICcjMjE3MWI1JywgJyMwODUxOWMnLCAnIzA4MzA2YiddLFxuICAgICAgICBQdUJ1R246IFsnI2ZmZjdmYicsICcjZWNlMmYwJywgJyNkMGQxZTYnLCAnI2E2YmRkYicsICcjNjdhOWNmJywgJyMzNjkwYzAnLCAnIzAyODE4YScsICcjMDE2YzU5JywgJyMwMTQ2MzYnXSxcbiAgICAgICAgVmlyaWRpczogWycjNDQwMTU0JywgJyM0ODI3NzcnLCAnIzNmNGE4YScsICcjMzE2NzhlJywgJyMyNjgzOGYnLCAnIzFmOWQ4YScsICcjNmNjZTVhJywgJyNiNmRlMmInLCAnI2ZlZTgyNSddLFxuXG4gICAgICAgIC8vIGRpdmVyZ2luZ1xuXG4gICAgICAgIFNwZWN0cmFsOiBbJyM5ZTAxNDInLCAnI2Q1M2U0ZicsICcjZjQ2ZDQzJywgJyNmZGFlNjEnLCAnI2ZlZTA4YicsICcjZmZmZmJmJywgJyNlNmY1OTgnLCAnI2FiZGRhNCcsICcjNjZjMmE1JywgJyMzMjg4YmQnLCAnIzVlNGZhMiddLFxuICAgICAgICBSZFlsR246IFsnI2E1MDAyNicsICcjZDczMDI3JywgJyNmNDZkNDMnLCAnI2ZkYWU2MScsICcjZmVlMDhiJywgJyNmZmZmYmYnLCAnI2Q5ZWY4YicsICcjYTZkOTZhJywgJyM2NmJkNjMnLCAnIzFhOTg1MCcsICcjMDA2ODM3J10sXG4gICAgICAgIFJkQnU6IFsnIzY3MDAxZicsICcjYjIxODJiJywgJyNkNjYwNGQnLCAnI2Y0YTU4MicsICcjZmRkYmM3JywgJyNmN2Y3ZjcnLCAnI2QxZTVmMCcsICcjOTJjNWRlJywgJyM0MzkzYzMnLCAnIzIxNjZhYycsICcjMDUzMDYxJ10sXG4gICAgICAgIFBpWUc6IFsnIzhlMDE1MicsICcjYzUxYjdkJywgJyNkZTc3YWUnLCAnI2YxYjZkYScsICcjZmRlMGVmJywgJyNmN2Y3ZjcnLCAnI2U2ZjVkMCcsICcjYjhlMTg2JywgJyM3ZmJjNDEnLCAnIzRkOTIyMScsICcjMjc2NDE5J10sXG4gICAgICAgIFBSR246IFsnIzQwMDA0YicsICcjNzYyYTgzJywgJyM5OTcwYWInLCAnI2MyYTVjZicsICcjZTdkNGU4JywgJyNmN2Y3ZjcnLCAnI2Q5ZjBkMycsICcjYTZkYmEwJywgJyM1YWFlNjEnLCAnIzFiNzgzNycsICcjMDA0NDFiJ10sXG4gICAgICAgIFJkWWxCdTogWycjYTUwMDI2JywgJyNkNzMwMjcnLCAnI2Y0NmQ0MycsICcjZmRhZTYxJywgJyNmZWUwOTAnLCAnI2ZmZmZiZicsICcjZTBmM2Y4JywgJyNhYmQ5ZTknLCAnIzc0YWRkMScsICcjNDU3NWI0JywgJyMzMTM2OTUnXSxcbiAgICAgICAgQnJCRzogWycjNTQzMDA1JywgJyM4YzUxMGEnLCAnI2JmODEyZCcsICcjZGZjMjdkJywgJyNmNmU4YzMnLCAnI2Y1ZjVmNScsICcjYzdlYWU1JywgJyM4MGNkYzEnLCAnIzM1OTc4ZicsICcjMDE2NjVlJywgJyMwMDNjMzAnXSxcbiAgICAgICAgUmRHeTogWycjNjcwMDFmJywgJyNiMjE4MmInLCAnI2Q2NjA0ZCcsICcjZjRhNTgyJywgJyNmZGRiYzcnLCAnI2ZmZmZmZicsICcjZTBlMGUwJywgJyNiYWJhYmEnLCAnIzg3ODc4NycsICcjNGQ0ZDRkJywgJyMxYTFhMWEnXSxcbiAgICAgICAgUHVPcjogWycjN2YzYjA4JywgJyNiMzU4MDYnLCAnI2UwODIxNCcsICcjZmRiODYzJywgJyNmZWUwYjYnLCAnI2Y3ZjdmNycsICcjZDhkYWViJywgJyNiMmFiZDInLCAnIzgwNzNhYycsICcjNTQyNzg4JywgJyMyZDAwNGInXSxcblxuICAgICAgICAvLyBxdWFsaXRhdGl2ZVxuXG4gICAgICAgIFNldDI6IFsnIzY2YzJhNScsICcjZmM4ZDYyJywgJyM4ZGEwY2InLCAnI2U3OGFjMycsICcjYTZkODU0JywgJyNmZmQ5MmYnLCAnI2U1YzQ5NCcsICcjYjNiM2IzJ10sXG4gICAgICAgIEFjY2VudDogWycjN2ZjOTdmJywgJyNiZWFlZDQnLCAnI2ZkYzA4NicsICcjZmZmZjk5JywgJyMzODZjYjAnLCAnI2YwMDI3ZicsICcjYmY1YjE3JywgJyM2NjY2NjYnXSxcbiAgICAgICAgU2V0MTogWycjZTQxYTFjJywgJyMzNzdlYjgnLCAnIzRkYWY0YScsICcjOTg0ZWEzJywgJyNmZjdmMDAnLCAnI2ZmZmYzMycsICcjYTY1NjI4JywgJyNmNzgxYmYnLCAnIzk5OTk5OSddLFxuICAgICAgICBTZXQzOiBbJyM4ZGQzYzcnLCAnI2ZmZmZiMycsICcjYmViYWRhJywgJyNmYjgwNzInLCAnIzgwYjFkMycsICcjZmRiNDYyJywgJyNiM2RlNjknLCAnI2ZjY2RlNScsICcjZDlkOWQ5JywgJyNiYzgwYmQnLCAnI2NjZWJjNScsICcjZmZlZDZmJ10sXG4gICAgICAgIERhcmsyOiBbJyMxYjllNzcnLCAnI2Q5NWYwMicsICcjNzU3MGIzJywgJyNlNzI5OGEnLCAnIzY2YTYxZScsICcjZTZhYjAyJywgJyNhNjc2MWQnLCAnIzY2NjY2NiddLFxuICAgICAgICBQYWlyZWQ6IFsnI2E2Y2VlMycsICcjMWY3OGI0JywgJyNiMmRmOGEnLCAnIzMzYTAyYycsICcjZmI5YTk5JywgJyNlMzFhMWMnLCAnI2ZkYmY2ZicsICcjZmY3ZjAwJywgJyNjYWIyZDYnLCAnIzZhM2Q5YScsICcjZmZmZjk5JywgJyNiMTU5MjgnXSxcbiAgICAgICAgUGFzdGVsMjogWycjYjNlMmNkJywgJyNmZGNkYWMnLCAnI2NiZDVlOCcsICcjZjRjYWU0JywgJyNlNmY1YzknLCAnI2ZmZjJhZScsICcjZjFlMmNjJywgJyNjY2NjY2MnXSxcbiAgICAgICAgUGFzdGVsMTogWycjZmJiNGFlJywgJyNiM2NkZTMnLCAnI2NjZWJjNScsICcjZGVjYmU0JywgJyNmZWQ5YTYnLCAnI2ZmZmZjYycsICcjZTVkOGJkJywgJyNmZGRhZWMnLCAnI2YyZjJmMiddLFxuICAgIH07XG5cbiAgICAvLyBhZGQgbG93ZXJjYXNlIGFsaWFzZXMgZm9yIGNhc2UtaW5zZW5zaXRpdmUgbWF0Y2hlc1xuICAgIGZvciAodmFyIGkgPSAwLCBsaXN0ID0gT2JqZWN0LmtleXMoY29sb3JicmV3ZXIpOyBpIDwgbGlzdC5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICB2YXIga2V5ID0gbGlzdFtpXTtcblxuICAgICAgICBjb2xvcmJyZXdlcltrZXkudG9Mb3dlckNhc2UoKV0gPSBjb2xvcmJyZXdlcltrZXldO1xuICAgIH1cblxuICAgIHZhciBjb2xvcmJyZXdlcl8xID0gY29sb3JicmV3ZXI7XG5cbiAgICB2YXIgY2hyb21hID0gY2hyb21hXzE7XG5cbiAgICAvLyBmZWVsIGZyZWUgdG8gY29tbWVudCBvdXQgYW55dGhpbmcgdG8gcm9sbHVwXG4gICAgLy8gYSBzbWFsbGVyIGNocm9tYS5qcyBidWlsdFxuXG4gICAgLy8gaW8gLS0+IGNvbnZlcnQgY29sb3JzXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgIC8vIG9wZXJhdG9ycyAtLT4gbW9kaWZ5IGV4aXN0aW5nIENvbG9yc1xuXG5cblxuXG5cblxuXG5cblxuXG4gICAgLy8gaW50ZXJwb2xhdG9yc1xuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgIC8vIGdlbmVyYXRvcnMgLS0gPiBjcmVhdGUgbmV3IGNvbG9yc1xuICAgIGNocm9tYS5hdmVyYWdlID0gYXZlcmFnZTtcbiAgICBjaHJvbWEuYmV6aWVyID0gYmV6aWVyXzE7XG4gICAgY2hyb21hLmJsZW5kID0gYmxlbmRfMTtcbiAgICBjaHJvbWEuY3ViZWhlbGl4ID0gY3ViZWhlbGl4O1xuICAgIGNocm9tYS5taXggPSBjaHJvbWEuaW50ZXJwb2xhdGUgPSBtaXgkMTtcbiAgICBjaHJvbWEucmFuZG9tID0gcmFuZG9tXzE7XG4gICAgY2hyb21hLnNjYWxlID0gc2NhbGUkMjtcblxuICAgIC8vIG90aGVyIHV0aWxpdHkgbWV0aG9kc1xuICAgIGNocm9tYS5hbmFseXplID0gYW5hbHl6ZV8xLmFuYWx5emU7XG4gICAgY2hyb21hLmNvbnRyYXN0ID0gY29udHJhc3Q7XG4gICAgY2hyb21hLmRlbHRhRSA9IGRlbHRhRTtcbiAgICBjaHJvbWEuZGlzdGFuY2UgPSBkaXN0YW5jZTtcbiAgICBjaHJvbWEubGltaXRzID0gYW5hbHl6ZV8xLmxpbWl0cztcbiAgICBjaHJvbWEudmFsaWQgPSB2YWxpZDtcblxuICAgIC8vIHNjYWxlXG4gICAgY2hyb21hLnNjYWxlcyA9IHNjYWxlcztcblxuICAgIC8vIGNvbG9yc1xuICAgIGNocm9tYS5jb2xvcnMgPSB3M2N4MTFfMTtcbiAgICBjaHJvbWEuYnJld2VyID0gY29sb3JicmV3ZXJfMTtcblxuICAgIHZhciBjaHJvbWFfanMgPSBjaHJvbWE7XG5cbiAgICByZXR1cm4gY2hyb21hX2pzO1xuXG59KSk7XG4iLCAiLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBsaXN0IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IFtdO1xuICB0aGlzLnNpemUgPSAwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZUNsZWFyO1xuIiwgIi8qKlxuICogUGVyZm9ybXMgYVxuICogW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGNvbXBhcmlzb24gYmV0d2VlbiB0d28gdmFsdWVzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZSBlcXVpdmFsZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICogdmFyIG90aGVyID0geyAnYSc6IDEgfTtcbiAqXG4gKiBfLmVxKG9iamVjdCwgb2JqZWN0KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmVxKG9iamVjdCwgb3RoZXIpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmVxKCdhJywgJ2EnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmVxKCdhJywgT2JqZWN0KCdhJykpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmVxKE5hTiwgTmFOKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gZXEodmFsdWUsIG90aGVyKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gb3RoZXIgfHwgKHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXIpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVxO1xuIiwgInZhciBlcSA9IHJlcXVpcmUoJy4vZXEnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBpbmRleCBhdCB3aGljaCB0aGUgYGtleWAgaXMgZm91bmQgaW4gYGFycmF5YCBvZiBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSBrZXkgVGhlIGtleSB0byBzZWFyY2ggZm9yLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gYXNzb2NJbmRleE9mKGFycmF5LCBrZXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgaWYgKGVxKGFycmF5W2xlbmd0aF1bMF0sIGtleSkpIHtcbiAgICAgIHJldHVybiBsZW5ndGg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhc3NvY0luZGV4T2Y7XG4iLCAidmFyIGFzc29jSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Fzc29jSW5kZXhPZicpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgYXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3BsaWNlID0gYXJyYXlQcm90by5zcGxpY2U7XG5cbi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGxpc3QgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZURlbGV0ZShrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBsYXN0SW5kZXggPSBkYXRhLmxlbmd0aCAtIDE7XG4gIGlmIChpbmRleCA9PSBsYXN0SW5kZXgpIHtcbiAgICBkYXRhLnBvcCgpO1xuICB9IGVsc2Uge1xuICAgIHNwbGljZS5jYWxsKGRhdGEsIGluZGV4LCAxKTtcbiAgfVxuICAtLXRoaXMuc2l6ZTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlRGVsZXRlO1xuIiwgInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBsaXN0IGNhY2hlIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlR2V0KGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIHJldHVybiBpbmRleCA8IDAgPyB1bmRlZmluZWQgOiBkYXRhW2luZGV4XVsxXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVHZXQ7XG4iLCAidmFyIGFzc29jSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Fzc29jSW5kZXhPZicpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIGxpc3QgY2FjaGUgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlSGFzKGtleSkge1xuICByZXR1cm4gYXNzb2NJbmRleE9mKHRoaXMuX19kYXRhX18sIGtleSkgPiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVIYXM7XG4iLCAidmFyIGFzc29jSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Fzc29jSW5kZXhPZicpO1xuXG4vKipcbiAqIFNldHMgdGhlIGxpc3QgY2FjaGUgYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGxpc3QgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZVNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgaWYgKGluZGV4IDwgMCkge1xuICAgICsrdGhpcy5zaXplO1xuICAgIGRhdGEucHVzaChba2V5LCB2YWx1ZV0pO1xuICB9IGVsc2Uge1xuICAgIGRhdGFbaW5kZXhdWzFdID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlU2V0O1xuIiwgInZhciBsaXN0Q2FjaGVDbGVhciA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZUNsZWFyJyksXG4gICAgbGlzdENhY2hlRGVsZXRlID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlRGVsZXRlJyksXG4gICAgbGlzdENhY2hlR2V0ID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlR2V0JyksXG4gICAgbGlzdENhY2hlSGFzID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlSGFzJyksXG4gICAgbGlzdENhY2hlU2V0ID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBsaXN0IGNhY2hlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gTGlzdENhY2hlKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYExpc3RDYWNoZWAuXG5MaXN0Q2FjaGUucHJvdG90eXBlLmNsZWFyID0gbGlzdENhY2hlQ2xlYXI7XG5MaXN0Q2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IGxpc3RDYWNoZURlbGV0ZTtcbkxpc3RDYWNoZS5wcm90b3R5cGUuZ2V0ID0gbGlzdENhY2hlR2V0O1xuTGlzdENhY2hlLnByb3RvdHlwZS5oYXMgPSBsaXN0Q2FjaGVIYXM7XG5MaXN0Q2FjaGUucHJvdG90eXBlLnNldCA9IGxpc3RDYWNoZVNldDtcblxubW9kdWxlLmV4cG9ydHMgPSBMaXN0Q2FjaGU7XG4iLCAidmFyIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIHN0YWNrLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIFN0YWNrXG4gKi9cbmZ1bmN0aW9uIHN0YWNrQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBuZXcgTGlzdENhY2hlO1xuICB0aGlzLnNpemUgPSAwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrQ2xlYXI7XG4iLCAiLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgc3RhY2suXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gc3RhY2tEZWxldGUoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIHJlc3VsdCA9IGRhdGFbJ2RlbGV0ZSddKGtleSk7XG5cbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrRGVsZXRlO1xuIiwgIi8qKlxuICogR2V0cyB0aGUgc3RhY2sgdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrR2V0KGtleSkge1xuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja0dldDtcbiIsICIvKipcbiAqIENoZWNrcyBpZiBhIHN0YWNrIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gc3RhY2tIYXMoa2V5KSB7XG4gIHJldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrSGFzO1xuIiwgIi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZ2xvYmFsYCBmcm9tIE5vZGUuanMuICovXG52YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsICYmIGdsb2JhbC5PYmplY3QgPT09IE9iamVjdCAmJiBnbG9iYWw7XG5cbm1vZHVsZS5leHBvcnRzID0gZnJlZUdsb2JhbDtcbiIsICJ2YXIgZnJlZUdsb2JhbCA9IHJlcXVpcmUoJy4vX2ZyZWVHbG9iYWwnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBzZWxmYC4gKi9cbnZhciBmcmVlU2VsZiA9IHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYgJiYgc2VsZi5PYmplY3QgPT09IE9iamVjdCAmJiBzZWxmO1xuXG4vKiogVXNlZCBhcyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIG9iamVjdC4gKi9cbnZhciByb290ID0gZnJlZUdsb2JhbCB8fCBmcmVlU2VsZiB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJvb3Q7XG4iLCAidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIFN5bWJvbCA9IHJvb3QuU3ltYm9sO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN5bWJvbDtcbiIsICJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVXNlZCB0byByZXNvbHZlIHRoZVxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gKiBvZiB2YWx1ZXMuXG4gKi9cbnZhciBuYXRpdmVPYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1Ub1N0cmluZ1RhZyA9IFN5bWJvbCA/IFN5bWJvbC50b1N0cmluZ1RhZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VHZXRUYWdgIHdoaWNoIGlnbm9yZXMgYFN5bWJvbC50b1N0cmluZ1RhZ2AgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHJhdyBgdG9TdHJpbmdUYWdgLlxuICovXG5mdW5jdGlvbiBnZXRSYXdUYWcodmFsdWUpIHtcbiAgdmFyIGlzT3duID0gaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgc3ltVG9TdHJpbmdUYWcpLFxuICAgICAgdGFnID0gdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuXG4gIHRyeSB7XG4gICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdW5kZWZpbmVkO1xuICAgIHZhciB1bm1hc2tlZCA9IHRydWU7XG4gIH0gY2F0Y2ggKGUpIHt9XG5cbiAgdmFyIHJlc3VsdCA9IG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xuICBpZiAodW5tYXNrZWQpIHtcbiAgICBpZiAoaXNPd24pIHtcbiAgICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHRhZztcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRSYXdUYWc7XG4iLCAiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyB1c2luZyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBvYmplY3RUb1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gb2JqZWN0VG9TdHJpbmc7XG4iLCAidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpLFxuICAgIGdldFJhd1RhZyA9IHJlcXVpcmUoJy4vX2dldFJhd1RhZycpLFxuICAgIG9iamVjdFRvU3RyaW5nID0gcmVxdWlyZSgnLi9fb2JqZWN0VG9TdHJpbmcnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG51bGxUYWcgPSAnW29iamVjdCBOdWxsXScsXG4gICAgdW5kZWZpbmVkVGFnID0gJ1tvYmplY3QgVW5kZWZpbmVkXSc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHN5bVRvU3RyaW5nVGFnID0gU3ltYm9sID8gU3ltYm9sLnRvU3RyaW5nVGFnIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBnZXRUYWdgIHdpdGhvdXQgZmFsbGJhY2tzIGZvciBidWdneSBlbnZpcm9ubWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgYHRvU3RyaW5nVGFnYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldFRhZyh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkVGFnIDogbnVsbFRhZztcbiAgfVxuICByZXR1cm4gKHN5bVRvU3RyaW5nVGFnICYmIHN5bVRvU3RyaW5nVGFnIGluIE9iamVjdCh2YWx1ZSkpXG4gICAgPyBnZXRSYXdUYWcodmFsdWUpXG4gICAgOiBvYmplY3RUb1N0cmluZyh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUdldFRhZztcbiIsICIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHRoZVxuICogW2xhbmd1YWdlIHR5cGVdKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1lY21hc2NyaXB0LWxhbmd1YWdlLXR5cGVzKVxuICogb2YgYE9iamVjdGAuIChlLmcuIGFycmF5cywgZnVuY3Rpb25zLCBvYmplY3RzLCByZWdleGVzLCBgbmV3IE51bWJlcigwKWAsIGFuZCBgbmV3IFN0cmluZygnJylgKVxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0KHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChfLm5vb3ApO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgKHR5cGUgPT0gJ29iamVjdCcgfHwgdHlwZSA9PSAnZnVuY3Rpb24nKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc09iamVjdDtcbiIsICJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFzeW5jVGFnID0gJ1tvYmplY3QgQXN5bmNGdW5jdGlvbl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIGdlblRhZyA9ICdbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXScsXG4gICAgcHJveHlUYWcgPSAnW29iamVjdCBQcm94eV0nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgRnVuY3Rpb25gIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGZ1bmN0aW9uLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNGdW5jdGlvbihfKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oL2FiYy8pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBUaGUgdXNlIG9mIGBPYmplY3QjdG9TdHJpbmdgIGF2b2lkcyBpc3N1ZXMgd2l0aCB0aGUgYHR5cGVvZmAgb3BlcmF0b3JcbiAgLy8gaW4gU2FmYXJpIDkgd2hpY2ggcmV0dXJucyAnb2JqZWN0JyBmb3IgdHlwZWQgYXJyYXlzIGFuZCBvdGhlciBjb25zdHJ1Y3RvcnMuXG4gIHZhciB0YWcgPSBiYXNlR2V0VGFnKHZhbHVlKTtcbiAgcmV0dXJuIHRhZyA9PSBmdW5jVGFnIHx8IHRhZyA9PSBnZW5UYWcgfHwgdGFnID09IGFzeW5jVGFnIHx8IHRhZyA9PSBwcm94eVRhZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0Z1bmN0aW9uO1xuIiwgInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogVXNlZCB0byBkZXRlY3Qgb3ZlcnJlYWNoaW5nIGNvcmUtanMgc2hpbXMuICovXG52YXIgY29yZUpzRGF0YSA9IHJvb3RbJ19fY29yZS1qc19zaGFyZWRfXyddO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcmVKc0RhdGE7XG4iLCAidmFyIGNvcmVKc0RhdGEgPSByZXF1aXJlKCcuL19jb3JlSnNEYXRhJyk7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBtZXRob2RzIG1hc3F1ZXJhZGluZyBhcyBuYXRpdmUuICovXG52YXIgbWFza1NyY0tleSA9IChmdW5jdGlvbigpIHtcbiAgdmFyIHVpZCA9IC9bXi5dKyQvLmV4ZWMoY29yZUpzRGF0YSAmJiBjb3JlSnNEYXRhLmtleXMgJiYgY29yZUpzRGF0YS5rZXlzLklFX1BST1RPIHx8ICcnKTtcbiAgcmV0dXJuIHVpZCA/ICgnU3ltYm9sKHNyYylfMS4nICsgdWlkKSA6ICcnO1xufSgpKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYGZ1bmNgIGhhcyBpdHMgc291cmNlIG1hc2tlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYGZ1bmNgIGlzIG1hc2tlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc01hc2tlZChmdW5jKSB7XG4gIHJldHVybiAhIW1hc2tTcmNLZXkgJiYgKG1hc2tTcmNLZXkgaW4gZnVuYyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNNYXNrZWQ7XG4iLCAiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqXG4gKiBDb252ZXJ0cyBgZnVuY2AgdG8gaXRzIHNvdXJjZSBjb2RlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc291cmNlIGNvZGUuXG4gKi9cbmZ1bmN0aW9uIHRvU291cmNlKGZ1bmMpIHtcbiAgaWYgKGZ1bmMgIT0gbnVsbCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZnVuY1RvU3RyaW5nLmNhbGwoZnVuYyk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIChmdW5jICsgJycpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gIH1cbiAgcmV0dXJuICcnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvU291cmNlO1xuIiwgInZhciBpc0Z1bmN0aW9uID0gcmVxdWlyZSgnLi9pc0Z1bmN0aW9uJyksXG4gICAgaXNNYXNrZWQgPSByZXF1aXJlKCcuL19pc01hc2tlZCcpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIHRvU291cmNlID0gcmVxdWlyZSgnLi9fdG9Tb3VyY2UnKTtcblxuLyoqXG4gKiBVc2VkIHRvIG1hdGNoIGBSZWdFeHBgXG4gKiBbc3ludGF4IGNoYXJhY3RlcnNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXBhdHRlcm5zKS5cbiAqL1xudmFyIHJlUmVnRXhwQ2hhciA9IC9bXFxcXF4kLiorPygpW1xcXXt9fF0vZztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGhvc3QgY29uc3RydWN0b3JzIChTYWZhcmkpLiAqL1xudmFyIHJlSXNIb3N0Q3RvciA9IC9eXFxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXFxdJC87XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGUsXG4gICAgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKiogVXNlZCB0byBkZXRlY3QgaWYgYSBtZXRob2QgaXMgbmF0aXZlLiAqL1xudmFyIHJlSXNOYXRpdmUgPSBSZWdFeHAoJ14nICtcbiAgZnVuY1RvU3RyaW5nLmNhbGwoaGFzT3duUHJvcGVydHkpLnJlcGxhY2UocmVSZWdFeHBDaGFyLCAnXFxcXCQmJylcbiAgLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFxcXFwoKXwgZm9yIC4rPyg/PVxcXFxcXF0pL2csICckMS4qPycpICsgJyQnXG4pO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTmF0aXZlYCB3aXRob3V0IGJhZCBzaGltIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG5hdGl2ZSBmdW5jdGlvbixcbiAqICBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc05hdGl2ZSh2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSB8fCBpc01hc2tlZCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHBhdHRlcm4gPSBpc0Z1bmN0aW9uKHZhbHVlKSA/IHJlSXNOYXRpdmUgOiByZUlzSG9zdEN0b3I7XG4gIHJldHVybiBwYXR0ZXJuLnRlc3QodG9Tb3VyY2UodmFsdWUpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNOYXRpdmU7XG4iLCAiLyoqXG4gKiBHZXRzIHRoZSB2YWx1ZSBhdCBga2V5YCBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBwcm9wZXJ0eSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gZ2V0VmFsdWUob2JqZWN0LCBrZXkpIHtcbiAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W2tleV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0VmFsdWU7XG4iLCAidmFyIGJhc2VJc05hdGl2ZSA9IHJlcXVpcmUoJy4vX2Jhc2VJc05hdGl2ZScpLFxuICAgIGdldFZhbHVlID0gcmVxdWlyZSgnLi9fZ2V0VmFsdWUnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBuYXRpdmUgZnVuY3Rpb24gYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgbWV0aG9kIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBmdW5jdGlvbiBpZiBpdCdzIG5hdGl2ZSwgZWxzZSBgdW5kZWZpbmVkYC5cbiAqL1xuZnVuY3Rpb24gZ2V0TmF0aXZlKG9iamVjdCwga2V5KSB7XG4gIHZhciB2YWx1ZSA9IGdldFZhbHVlKG9iamVjdCwga2V5KTtcbiAgcmV0dXJuIGJhc2VJc05hdGl2ZSh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXROYXRpdmU7XG4iLCAidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBNYXAgPSBnZXROYXRpdmUocm9vdCwgJ01hcCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1hcDtcbiIsICJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBuYXRpdmVDcmVhdGUgPSBnZXROYXRpdmUoT2JqZWN0LCAnY3JlYXRlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gbmF0aXZlQ3JlYXRlO1xuIiwgInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBoYXNoLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIEhhc2hcbiAqL1xuZnVuY3Rpb24gaGFzaENsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0gbmF0aXZlQ3JlYXRlID8gbmF0aXZlQ3JlYXRlKG51bGwpIDoge307XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaENsZWFyO1xuIiwgIi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGhhc2guXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7T2JqZWN0fSBoYXNoIFRoZSBoYXNoIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBoYXNoRGVsZXRlKGtleSkge1xuICB2YXIgcmVzdWx0ID0gdGhpcy5oYXMoa2V5KSAmJiBkZWxldGUgdGhpcy5fX2RhdGFfX1trZXldO1xuICB0aGlzLnNpemUgLT0gcmVzdWx0ID8gMSA6IDA7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaERlbGV0ZTtcbiIsICJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cbnZhciBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBHZXRzIHRoZSBoYXNoIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGhhc2hHZXQoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgaWYgKG5hdGl2ZUNyZWF0ZSkge1xuICAgIHZhciByZXN1bHQgPSBkYXRhW2tleV07XG4gICAgcmV0dXJuIHJlc3VsdCA9PT0gSEFTSF9VTkRFRklORUQgPyB1bmRlZmluZWQgOiByZXN1bHQ7XG4gIH1cbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KSA/IGRhdGFba2V5XSA6IHVuZGVmaW5lZDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoR2V0O1xuIiwgInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBoYXNoIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBoYXNoSGFzKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIHJldHVybiBuYXRpdmVDcmVhdGUgPyAoZGF0YVtrZXldICE9PSB1bmRlZmluZWQpIDogaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hIYXM7XG4iLCAidmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX25hdGl2ZUNyZWF0ZScpO1xuXG4vKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKlxuICogU2V0cyB0aGUgaGFzaCBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGhhc2ggaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIGhhc2hTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIHRoaXMuc2l6ZSArPSB0aGlzLmhhcyhrZXkpID8gMCA6IDE7XG4gIGRhdGFba2V5XSA9IChuYXRpdmVDcmVhdGUgJiYgdmFsdWUgPT09IHVuZGVmaW5lZCkgPyBIQVNIX1VOREVGSU5FRCA6IHZhbHVlO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoU2V0O1xuIiwgInZhciBoYXNoQ2xlYXIgPSByZXF1aXJlKCcuL19oYXNoQ2xlYXInKSxcbiAgICBoYXNoRGVsZXRlID0gcmVxdWlyZSgnLi9faGFzaERlbGV0ZScpLFxuICAgIGhhc2hHZXQgPSByZXF1aXJlKCcuL19oYXNoR2V0JyksXG4gICAgaGFzaEhhcyA9IHJlcXVpcmUoJy4vX2hhc2hIYXMnKSxcbiAgICBoYXNoU2V0ID0gcmVxdWlyZSgnLi9faGFzaFNldCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBoYXNoIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gSGFzaChlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBIYXNoYC5cbkhhc2gucHJvdG90eXBlLmNsZWFyID0gaGFzaENsZWFyO1xuSGFzaC5wcm90b3R5cGVbJ2RlbGV0ZSddID0gaGFzaERlbGV0ZTtcbkhhc2gucHJvdG90eXBlLmdldCA9IGhhc2hHZXQ7XG5IYXNoLnByb3RvdHlwZS5oYXMgPSBoYXNoSGFzO1xuSGFzaC5wcm90b3R5cGUuc2V0ID0gaGFzaFNldDtcblxubW9kdWxlLmV4cG9ydHMgPSBIYXNoO1xuIiwgInZhciBIYXNoID0gcmVxdWlyZSgnLi9fSGFzaCcpLFxuICAgIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpLFxuICAgIE1hcCA9IHJlcXVpcmUoJy4vX01hcCcpO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIG1hcC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUNsZWFyKCkge1xuICB0aGlzLnNpemUgPSAwO1xuICB0aGlzLl9fZGF0YV9fID0ge1xuICAgICdoYXNoJzogbmV3IEhhc2gsXG4gICAgJ21hcCc6IG5ldyAoTWFwIHx8IExpc3RDYWNoZSksXG4gICAgJ3N0cmluZyc6IG5ldyBIYXNoXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVDbGVhcjtcbiIsICIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlIGZvciB1c2UgYXMgdW5pcXVlIG9iamVjdCBrZXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNLZXlhYmxlKHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gKHR5cGUgPT0gJ3N0cmluZycgfHwgdHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nKVxuICAgID8gKHZhbHVlICE9PSAnX19wcm90b19fJylcbiAgICA6ICh2YWx1ZSA9PT0gbnVsbCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNLZXlhYmxlO1xuIiwgInZhciBpc0tleWFibGUgPSByZXF1aXJlKCcuL19pc0tleWFibGUnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBkYXRhIGZvciBgbWFwYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG1hcCBUaGUgbWFwIHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUgcmVmZXJlbmNlIGtleS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtYXAgZGF0YS5cbiAqL1xuZnVuY3Rpb24gZ2V0TWFwRGF0YShtYXAsIGtleSkge1xuICB2YXIgZGF0YSA9IG1hcC5fX2RhdGFfXztcbiAgcmV0dXJuIGlzS2V5YWJsZShrZXkpXG4gICAgPyBkYXRhW3R5cGVvZiBrZXkgPT0gJ3N0cmluZycgPyAnc3RyaW5nJyA6ICdoYXNoJ11cbiAgICA6IGRhdGEubWFwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldE1hcERhdGE7XG4iLCAidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIG1hcC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZURlbGV0ZShrZXkpIHtcbiAgdmFyIHJlc3VsdCA9IGdldE1hcERhdGEodGhpcywga2V5KVsnZGVsZXRlJ10oa2V5KTtcbiAgdGhpcy5zaXplIC09IHJlc3VsdCA/IDEgOiAwO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlRGVsZXRlO1xuIiwgInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIEdldHMgdGhlIG1hcCB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVHZXQoa2V5KSB7XG4gIHJldHVybiBnZXRNYXBEYXRhKHRoaXMsIGtleSkuZ2V0KGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVHZXQ7XG4iLCAidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgbWFwIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVIYXMoa2V5KSB7XG4gIHJldHVybiBnZXRNYXBEYXRhKHRoaXMsIGtleSkuaGFzKGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVIYXM7XG4iLCAidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogU2V0cyB0aGUgbWFwIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG1hcCBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IGdldE1hcERhdGEodGhpcywga2V5KSxcbiAgICAgIHNpemUgPSBkYXRhLnNpemU7XG5cbiAgZGF0YS5zZXQoa2V5LCB2YWx1ZSk7XG4gIHRoaXMuc2l6ZSArPSBkYXRhLnNpemUgPT0gc2l6ZSA/IDAgOiAxO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZVNldDtcbiIsICJ2YXIgbWFwQ2FjaGVDbGVhciA9IHJlcXVpcmUoJy4vX21hcENhY2hlQ2xlYXInKSxcbiAgICBtYXBDYWNoZURlbGV0ZSA9IHJlcXVpcmUoJy4vX21hcENhY2hlRGVsZXRlJyksXG4gICAgbWFwQ2FjaGVHZXQgPSByZXF1aXJlKCcuL19tYXBDYWNoZUdldCcpLFxuICAgIG1hcENhY2hlSGFzID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVIYXMnKSxcbiAgICBtYXBDYWNoZVNldCA9IHJlcXVpcmUoJy4vX21hcENhY2hlU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG1hcCBjYWNoZSBvYmplY3QgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBNYXBDYWNoZShlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBNYXBDYWNoZWAuXG5NYXBDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBtYXBDYWNoZUNsZWFyO1xuTWFwQ2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IG1hcENhY2hlRGVsZXRlO1xuTWFwQ2FjaGUucHJvdG90eXBlLmdldCA9IG1hcENhY2hlR2V0O1xuTWFwQ2FjaGUucHJvdG90eXBlLmhhcyA9IG1hcENhY2hlSGFzO1xuTWFwQ2FjaGUucHJvdG90eXBlLnNldCA9IG1hcENhY2hlU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1hcENhY2hlO1xuIiwgInZhciBMaXN0Q2FjaGUgPSByZXF1aXJlKCcuL19MaXN0Q2FjaGUnKSxcbiAgICBNYXAgPSByZXF1aXJlKCcuL19NYXAnKSxcbiAgICBNYXBDYWNoZSA9IHJlcXVpcmUoJy4vX01hcENhY2hlJyk7XG5cbi8qKiBVc2VkIGFzIHRoZSBzaXplIHRvIGVuYWJsZSBsYXJnZSBhcnJheSBvcHRpbWl6YXRpb25zLiAqL1xudmFyIExBUkdFX0FSUkFZX1NJWkUgPSAyMDA7XG5cbi8qKlxuICogU2V0cyB0aGUgc3RhY2sgYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgc3RhY2sgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICBpZiAoZGF0YSBpbnN0YW5jZW9mIExpc3RDYWNoZSkge1xuICAgIHZhciBwYWlycyA9IGRhdGEuX19kYXRhX187XG4gICAgaWYgKCFNYXAgfHwgKHBhaXJzLmxlbmd0aCA8IExBUkdFX0FSUkFZX1NJWkUgLSAxKSkge1xuICAgICAgcGFpcnMucHVzaChba2V5LCB2YWx1ZV0pO1xuICAgICAgdGhpcy5zaXplID0gKytkYXRhLnNpemU7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZGF0YSA9IHRoaXMuX19kYXRhX18gPSBuZXcgTWFwQ2FjaGUocGFpcnMpO1xuICB9XG4gIGRhdGEuc2V0KGtleSwgdmFsdWUpO1xuICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrU2V0O1xuIiwgInZhciBMaXN0Q2FjaGUgPSByZXF1aXJlKCcuL19MaXN0Q2FjaGUnKSxcbiAgICBzdGFja0NsZWFyID0gcmVxdWlyZSgnLi9fc3RhY2tDbGVhcicpLFxuICAgIHN0YWNrRGVsZXRlID0gcmVxdWlyZSgnLi9fc3RhY2tEZWxldGUnKSxcbiAgICBzdGFja0dldCA9IHJlcXVpcmUoJy4vX3N0YWNrR2V0JyksXG4gICAgc3RhY2tIYXMgPSByZXF1aXJlKCcuL19zdGFja0hhcycpLFxuICAgIHN0YWNrU2V0ID0gcmVxdWlyZSgnLi9fc3RhY2tTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgc3RhY2sgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gU3RhY2soZW50cmllcykge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18gPSBuZXcgTGlzdENhY2hlKGVudHJpZXMpO1xuICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBTdGFja2AuXG5TdGFjay5wcm90b3R5cGUuY2xlYXIgPSBzdGFja0NsZWFyO1xuU3RhY2sucHJvdG90eXBlWydkZWxldGUnXSA9IHN0YWNrRGVsZXRlO1xuU3RhY2sucHJvdG90eXBlLmdldCA9IHN0YWNrR2V0O1xuU3RhY2sucHJvdG90eXBlLmhhcyA9IHN0YWNrSGFzO1xuU3RhY2sucHJvdG90eXBlLnNldCA9IHN0YWNrU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0YWNrO1xuIiwgIi8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cbnZhciBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcblxuLyoqXG4gKiBBZGRzIGB2YWx1ZWAgdG8gdGhlIGFycmF5IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBhZGRcbiAqIEBtZW1iZXJPZiBTZXRDYWNoZVxuICogQGFsaWFzIHB1c2hcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNhY2hlLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIHNldENhY2hlQWRkKHZhbHVlKSB7XG4gIHRoaXMuX19kYXRhX18uc2V0KHZhbHVlLCBIQVNIX1VOREVGSU5FRCk7XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNldENhY2hlQWRkO1xuIiwgIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgaW4gdGhlIGFycmF5IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBTZXRDYWNoZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgZm91bmQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gc2V0Q2FjaGVIYXModmFsdWUpIHtcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZXRDYWNoZUhhcztcbiIsICJ2YXIgTWFwQ2FjaGUgPSByZXF1aXJlKCcuL19NYXBDYWNoZScpLFxuICAgIHNldENhY2hlQWRkID0gcmVxdWlyZSgnLi9fc2V0Q2FjaGVBZGQnKSxcbiAgICBzZXRDYWNoZUhhcyA9IHJlcXVpcmUoJy4vX3NldENhY2hlSGFzJyk7XG5cbi8qKlxuICpcbiAqIENyZWF0ZXMgYW4gYXJyYXkgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIHVuaXF1ZSB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW3ZhbHVlc10gVGhlIHZhbHVlcyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gU2V0Q2FjaGUodmFsdWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gdmFsdWVzID09IG51bGwgPyAwIDogdmFsdWVzLmxlbmd0aDtcblxuICB0aGlzLl9fZGF0YV9fID0gbmV3IE1hcENhY2hlO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHRoaXMuYWRkKHZhbHVlc1tpbmRleF0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBTZXRDYWNoZWAuXG5TZXRDYWNoZS5wcm90b3R5cGUuYWRkID0gU2V0Q2FjaGUucHJvdG90eXBlLnB1c2ggPSBzZXRDYWNoZUFkZDtcblNldENhY2hlLnByb3RvdHlwZS5oYXMgPSBzZXRDYWNoZUhhcztcblxubW9kdWxlLmV4cG9ydHMgPSBTZXRDYWNoZTtcbiIsICIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5zb21lYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWVcbiAqIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFueSBlbGVtZW50IHBhc3NlcyB0aGUgcHJlZGljYXRlIGNoZWNrLFxuICogIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlTb21lKGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGlmIChwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5U29tZTtcbiIsICIvKipcbiAqIENoZWNrcyBpZiBhIGBjYWNoZWAgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IGNhY2hlIFRoZSBjYWNoZSB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBjYWNoZUhhcyhjYWNoZSwga2V5KSB7XG4gIHJldHVybiBjYWNoZS5oYXMoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjYWNoZUhhcztcbiIsICJ2YXIgU2V0Q2FjaGUgPSByZXF1aXJlKCcuL19TZXRDYWNoZScpLFxuICAgIGFycmF5U29tZSA9IHJlcXVpcmUoJy4vX2FycmF5U29tZScpLFxuICAgIGNhY2hlSGFzID0gcmVxdWlyZSgnLi9fY2FjaGVIYXMnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3IgYXJyYXlzIHdpdGggc3VwcG9ydCBmb3JcbiAqIHBhcnRpYWwgZGVlcCBjb21wYXJpc29ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge0FycmF5fSBvdGhlciBUaGUgb3RoZXIgYXJyYXkgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYGFycmF5YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBhcnJheXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gZXF1YWxBcnJheXMoYXJyYXksIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gIHZhciBpc1BhcnRpYWwgPSBiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUcsXG4gICAgICBhcnJMZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICBvdGhMZW5ndGggPSBvdGhlci5sZW5ndGg7XG5cbiAgaWYgKGFyckxlbmd0aCAhPSBvdGhMZW5ndGggJiYgIShpc1BhcnRpYWwgJiYgb3RoTGVuZ3RoID4gYXJyTGVuZ3RoKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBDaGVjayB0aGF0IGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxuICB2YXIgYXJyU3RhY2tlZCA9IHN0YWNrLmdldChhcnJheSk7XG4gIHZhciBvdGhTdGFja2VkID0gc3RhY2suZ2V0KG90aGVyKTtcbiAgaWYgKGFyclN0YWNrZWQgJiYgb3RoU3RhY2tlZCkge1xuICAgIHJldHVybiBhcnJTdGFja2VkID09IG90aGVyICYmIG90aFN0YWNrZWQgPT0gYXJyYXk7XG4gIH1cbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSB0cnVlLFxuICAgICAgc2VlbiA9IChiaXRtYXNrICYgQ09NUEFSRV9VTk9SREVSRURfRkxBRykgPyBuZXcgU2V0Q2FjaGUgOiB1bmRlZmluZWQ7XG5cbiAgc3RhY2suc2V0KGFycmF5LCBvdGhlcik7XG4gIHN0YWNrLnNldChvdGhlciwgYXJyYXkpO1xuXG4gIC8vIElnbm9yZSBub24taW5kZXggcHJvcGVydGllcy5cbiAgd2hpbGUgKCsraW5kZXggPCBhcnJMZW5ndGgpIHtcbiAgICB2YXIgYXJyVmFsdWUgPSBhcnJheVtpbmRleF0sXG4gICAgICAgIG90aFZhbHVlID0gb3RoZXJbaW5kZXhdO1xuXG4gICAgaWYgKGN1c3RvbWl6ZXIpIHtcbiAgICAgIHZhciBjb21wYXJlZCA9IGlzUGFydGlhbFxuICAgICAgICA/IGN1c3RvbWl6ZXIob3RoVmFsdWUsIGFyclZhbHVlLCBpbmRleCwgb3RoZXIsIGFycmF5LCBzdGFjaylcbiAgICAgICAgOiBjdXN0b21pemVyKGFyclZhbHVlLCBvdGhWYWx1ZSwgaW5kZXgsIGFycmF5LCBvdGhlciwgc3RhY2spO1xuICAgIH1cbiAgICBpZiAoY29tcGFyZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGNvbXBhcmVkKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBhcnJheXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICBpZiAoc2Vlbikge1xuICAgICAgaWYgKCFhcnJheVNvbWUob3RoZXIsIGZ1bmN0aW9uKG90aFZhbHVlLCBvdGhJbmRleCkge1xuICAgICAgICAgICAgaWYgKCFjYWNoZUhhcyhzZWVuLCBvdGhJbmRleCkgJiZcbiAgICAgICAgICAgICAgICAoYXJyVmFsdWUgPT09IG90aFZhbHVlIHx8IGVxdWFsRnVuYyhhcnJWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHNlZW4ucHVzaChvdGhJbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkpIHtcbiAgICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIShcbiAgICAgICAgICBhcnJWYWx1ZSA9PT0gb3RoVmFsdWUgfHxcbiAgICAgICAgICAgIGVxdWFsRnVuYyhhcnJWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKVxuICAgICAgICApKSB7XG4gICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBzdGFja1snZGVsZXRlJ10oYXJyYXkpO1xuICBzdGFja1snZGVsZXRlJ10ob3RoZXIpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVxdWFsQXJyYXlzO1xuIiwgInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBVaW50OEFycmF5ID0gcm9vdC5VaW50OEFycmF5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFVpbnQ4QXJyYXk7XG4iLCAiLyoqXG4gKiBDb252ZXJ0cyBgbWFwYCB0byBpdHMga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUga2V5LXZhbHVlIHBhaXJzLlxuICovXG5mdW5jdGlvbiBtYXBUb0FycmF5KG1hcCkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KG1hcC5zaXplKTtcblxuICBtYXAuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgcmVzdWx0WysraW5kZXhdID0gW2tleSwgdmFsdWVdO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBUb0FycmF5O1xuIiwgIi8qKlxuICogQ29udmVydHMgYHNldGAgdG8gYW4gYXJyYXkgb2YgaXRzIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNldCBUaGUgc2V0IHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gc2V0VG9BcnJheShzZXQpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShzZXQuc2l6ZSk7XG5cbiAgc2V0LmZvckVhY2goZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXN1bHRbKytpbmRleF0gPSB2YWx1ZTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0VG9BcnJheTtcbiIsICJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgVWludDhBcnJheSA9IHJlcXVpcmUoJy4vX1VpbnQ4QXJyYXknKSxcbiAgICBlcSA9IHJlcXVpcmUoJy4vZXEnKSxcbiAgICBlcXVhbEFycmF5cyA9IHJlcXVpcmUoJy4vX2VxdWFsQXJyYXlzJyksXG4gICAgbWFwVG9BcnJheSA9IHJlcXVpcmUoJy4vX21hcFRvQXJyYXknKSxcbiAgICBzZXRUb0FycmF5ID0gcmVxdWlyZSgnLi9fc2V0VG9BcnJheScpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDEsXG4gICAgQ09NUEFSRV9VTk9SREVSRURfRkxBRyA9IDI7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxuICAgIGRhdGVUYWcgPSAnW29iamVjdCBEYXRlXScsXG4gICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nLFxuICAgIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG51bWJlclRhZyA9ICdbb2JqZWN0IE51bWJlcl0nLFxuICAgIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nLFxuICAgIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nO1xuXG52YXIgYXJyYXlCdWZmZXJUYWcgPSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nLFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJztcblxuLyoqIFVzZWQgdG8gY29udmVydCBzeW1ib2xzIHRvIHByaW1pdGl2ZXMgYW5kIHN0cmluZ3MuICovXG52YXIgc3ltYm9sUHJvdG8gPSBTeW1ib2wgPyBTeW1ib2wucHJvdG90eXBlIDogdW5kZWZpbmVkLFxuICAgIHN5bWJvbFZhbHVlT2YgPSBzeW1ib2xQcm90byA/IHN5bWJvbFByb3RvLnZhbHVlT2YgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbERlZXBgIGZvciBjb21wYXJpbmcgb2JqZWN0cyBvZlxuICogdGhlIHNhbWUgYHRvU3RyaW5nVGFnYC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBmdW5jdGlvbiBvbmx5IHN1cHBvcnRzIGNvbXBhcmluZyB2YWx1ZXMgd2l0aCB0YWdzIG9mXG4gKiBgQm9vbGVhbmAsIGBEYXRlYCwgYEVycm9yYCwgYE51bWJlcmAsIGBSZWdFeHBgLCBvciBgU3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtzdHJpbmd9IHRhZyBUaGUgYHRvU3RyaW5nVGFnYCBvZiB0aGUgb2JqZWN0cyB0byBjb21wYXJlLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3RzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGVxdWFsQnlUYWcob2JqZWN0LCBvdGhlciwgdGFnLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gIHN3aXRjaCAodGFnKSB7XG4gICAgY2FzZSBkYXRhVmlld1RhZzpcbiAgICAgIGlmICgob2JqZWN0LmJ5dGVMZW5ndGggIT0gb3RoZXIuYnl0ZUxlbmd0aCkgfHxcbiAgICAgICAgICAob2JqZWN0LmJ5dGVPZmZzZXQgIT0gb3RoZXIuYnl0ZU9mZnNldCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgb2JqZWN0ID0gb2JqZWN0LmJ1ZmZlcjtcbiAgICAgIG90aGVyID0gb3RoZXIuYnVmZmVyO1xuXG4gICAgY2FzZSBhcnJheUJ1ZmZlclRhZzpcbiAgICAgIGlmICgob2JqZWN0LmJ5dGVMZW5ndGggIT0gb3RoZXIuYnl0ZUxlbmd0aCkgfHxcbiAgICAgICAgICAhZXF1YWxGdW5jKG5ldyBVaW50OEFycmF5KG9iamVjdCksIG5ldyBVaW50OEFycmF5KG90aGVyKSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICBjYXNlIGJvb2xUYWc6XG4gICAgY2FzZSBkYXRlVGFnOlxuICAgIGNhc2UgbnVtYmVyVGFnOlxuICAgICAgLy8gQ29lcmNlIGJvb2xlYW5zIHRvIGAxYCBvciBgMGAgYW5kIGRhdGVzIHRvIG1pbGxpc2Vjb25kcy5cbiAgICAgIC8vIEludmFsaWQgZGF0ZXMgYXJlIGNvZXJjZWQgdG8gYE5hTmAuXG4gICAgICByZXR1cm4gZXEoK29iamVjdCwgK290aGVyKTtcblxuICAgIGNhc2UgZXJyb3JUYWc6XG4gICAgICByZXR1cm4gb2JqZWN0Lm5hbWUgPT0gb3RoZXIubmFtZSAmJiBvYmplY3QubWVzc2FnZSA9PSBvdGhlci5tZXNzYWdlO1xuXG4gICAgY2FzZSByZWdleHBUYWc6XG4gICAgY2FzZSBzdHJpbmdUYWc6XG4gICAgICAvLyBDb2VyY2UgcmVnZXhlcyB0byBzdHJpbmdzIGFuZCB0cmVhdCBzdHJpbmdzLCBwcmltaXRpdmVzIGFuZCBvYmplY3RzLFxuICAgICAgLy8gYXMgZXF1YWwuIFNlZSBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcmVnZXhwLnByb3RvdHlwZS50b3N0cmluZ1xuICAgICAgLy8gZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgIHJldHVybiBvYmplY3QgPT0gKG90aGVyICsgJycpO1xuXG4gICAgY2FzZSBtYXBUYWc6XG4gICAgICB2YXIgY29udmVydCA9IG1hcFRvQXJyYXk7XG5cbiAgICBjYXNlIHNldFRhZzpcbiAgICAgIHZhciBpc1BhcnRpYWwgPSBiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUc7XG4gICAgICBjb252ZXJ0IHx8IChjb252ZXJ0ID0gc2V0VG9BcnJheSk7XG5cbiAgICAgIGlmIChvYmplY3Quc2l6ZSAhPSBvdGhlci5zaXplICYmICFpc1BhcnRpYWwpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgLy8gQXNzdW1lIGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxuICAgICAgdmFyIHN0YWNrZWQgPSBzdGFjay5nZXQob2JqZWN0KTtcbiAgICAgIGlmIChzdGFja2VkKSB7XG4gICAgICAgIHJldHVybiBzdGFja2VkID09IG90aGVyO1xuICAgICAgfVxuICAgICAgYml0bWFzayB8PSBDT01QQVJFX1VOT1JERVJFRF9GTEFHO1xuXG4gICAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIG9iamVjdHMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICAgIHN0YWNrLnNldChvYmplY3QsIG90aGVyKTtcbiAgICAgIHZhciByZXN1bHQgPSBlcXVhbEFycmF5cyhjb252ZXJ0KG9iamVjdCksIGNvbnZlcnQob3RoZXIpLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcbiAgICAgIHN0YWNrWydkZWxldGUnXShvYmplY3QpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcblxuICAgIGNhc2Ugc3ltYm9sVGFnOlxuICAgICAgaWYgKHN5bWJvbFZhbHVlT2YpIHtcbiAgICAgICAgcmV0dXJuIHN5bWJvbFZhbHVlT2YuY2FsbChvYmplY3QpID09IHN5bWJvbFZhbHVlT2YuY2FsbChvdGhlcik7XG4gICAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVxdWFsQnlUYWc7XG4iLCAiLyoqXG4gKiBBcHBlbmRzIHRoZSBlbGVtZW50cyBvZiBgdmFsdWVzYCB0byBgYXJyYXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gYXBwZW5kLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5UHVzaChhcnJheSwgdmFsdWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gdmFsdWVzLmxlbmd0aCxcbiAgICAgIG9mZnNldCA9IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGFycmF5W29mZnNldCArIGluZGV4XSA9IHZhbHVlc1tpbmRleF07XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5UHVzaDtcbiIsICIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYW4gYEFycmF5YCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5KGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXkoJ2FiYycpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXkoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0FycmF5O1xuIiwgInZhciBhcnJheVB1c2ggPSByZXF1aXJlKCcuL19hcnJheVB1c2gnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldEFsbEtleXNgIGFuZCBgZ2V0QWxsS2V5c0luYCB3aGljaCB1c2VzXG4gKiBga2V5c0Z1bmNgIGFuZCBgc3ltYm9sc0Z1bmNgIHRvIGdldCB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBhbmRcbiAqIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGtleXNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGtleXMgb2YgYG9iamVjdGAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzeW1ib2xzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scy5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldEFsbEtleXMob2JqZWN0LCBrZXlzRnVuYywgc3ltYm9sc0Z1bmMpIHtcbiAgdmFyIHJlc3VsdCA9IGtleXNGdW5jKG9iamVjdCk7XG4gIHJldHVybiBpc0FycmF5KG9iamVjdCkgPyByZXN1bHQgOiBhcnJheVB1c2gocmVzdWx0LCBzeW1ib2xzRnVuYyhvYmplY3QpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlR2V0QWxsS2V5cztcbiIsICIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5maWx0ZXJgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvclxuICogaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmaWx0ZXJlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlGaWx0ZXIoYXJyYXksIHByZWRpY2F0ZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoLFxuICAgICAgcmVzSW5kZXggPSAwLFxuICAgICAgcmVzdWx0ID0gW107XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF07XG4gICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwgaW5kZXgsIGFycmF5KSkge1xuICAgICAgcmVzdWx0W3Jlc0luZGV4KytdID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlGaWx0ZXI7XG4iLCAiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgbmV3IGVtcHR5IGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4xMy4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZW1wdHkgYXJyYXkuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBhcnJheXMgPSBfLnRpbWVzKDIsIF8uc3R1YkFycmF5KTtcbiAqXG4gKiBjb25zb2xlLmxvZyhhcnJheXMpO1xuICogLy8gPT4gW1tdLCBbXV1cbiAqXG4gKiBjb25zb2xlLmxvZyhhcnJheXNbMF0gPT09IGFycmF5c1sxXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBzdHViQXJyYXkoKSB7XG4gIHJldHVybiBbXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHViQXJyYXk7XG4iLCAidmFyIGFycmF5RmlsdGVyID0gcmVxdWlyZSgnLi9fYXJyYXlGaWx0ZXInKSxcbiAgICBzdHViQXJyYXkgPSByZXF1aXJlKCcuL3N0dWJBcnJheScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IG9iamVjdFByb3RvLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlR2V0U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGVudW1lcmFibGUgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBzeW1ib2xzLlxuICovXG52YXIgZ2V0U3ltYm9scyA9ICFuYXRpdmVHZXRTeW1ib2xzID8gc3R1YkFycmF5IDogZnVuY3Rpb24ob2JqZWN0KSB7XG4gIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcbiAgcmV0dXJuIGFycmF5RmlsdGVyKG5hdGl2ZUdldFN5bWJvbHMob2JqZWN0KSwgZnVuY3Rpb24oc3ltYm9sKSB7XG4gICAgcmV0dXJuIHByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwob2JqZWN0LCBzeW1ib2wpO1xuICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0U3ltYm9scztcbiIsICIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnRpbWVzYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHNcbiAqIG9yIG1heCBhcnJheSBsZW5ndGggY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIGludm9rZSBgaXRlcmF0ZWVgLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcmVzdWx0cy5cbiAqL1xuZnVuY3Rpb24gYmFzZVRpbWVzKG4sIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobik7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBuKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGluZGV4KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VUaW1lcztcbiIsICIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLiBBIHZhbHVlIGlzIG9iamVjdC1saWtlIGlmIGl0J3Mgbm90IGBudWxsYFxuICogYW5kIGhhcyBhIGB0eXBlb2ZgIHJlc3VsdCBvZiBcIm9iamVjdFwiLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc09iamVjdExpa2U7XG4iLCAidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0FyZ3VtZW50c2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LFxuICovXG5mdW5jdGlvbiBiYXNlSXNBcmd1bWVudHModmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gYXJnc1RhZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNBcmd1bWVudHM7XG4iLCAidmFyIGJhc2VJc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vX2Jhc2VJc0FyZ3VtZW50cycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGFuIGBhcmd1bWVudHNgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FyZ3VtZW50cyA9IGJhc2VJc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA/IGJhc2VJc0FyZ3VtZW50cyA6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdjYWxsZWUnKSAmJlxuICAgICFwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHZhbHVlLCAnY2FsbGVlJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJndW1lbnRzO1xuIiwgIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyBgZmFsc2VgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4xMy4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50aW1lcygyLCBfLnN0dWJGYWxzZSk7XG4gKiAvLyA9PiBbZmFsc2UsIGZhbHNlXVxuICovXG5mdW5jdGlvbiBzdHViRmFsc2UoKSB7XG4gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHViRmFsc2U7XG4iLCAidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290JyksXG4gICAgc3R1YkZhbHNlID0gcmVxdWlyZSgnLi9zdHViRmFsc2UnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cbnZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xudmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcblxuLyoqIERldGVjdCB0aGUgcG9wdWxhciBDb21tb25KUyBleHRlbnNpb24gYG1vZHVsZS5leHBvcnRzYC4gKi9cbnZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBCdWZmZXIgPSBtb2R1bGVFeHBvcnRzID8gcm9vdC5CdWZmZXIgOiB1bmRlZmluZWQ7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVJc0J1ZmZlciA9IEJ1ZmZlciA/IEJ1ZmZlci5pc0J1ZmZlciA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIGJ1ZmZlci5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMy4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGJ1ZmZlciwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQnVmZmVyKG5ldyBCdWZmZXIoMikpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNCdWZmZXIobmV3IFVpbnQ4QXJyYXkoMikpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQnVmZmVyID0gbmF0aXZlSXNCdWZmZXIgfHwgc3R1YkZhbHNlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQnVmZmVyO1xuIiwgIi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgdW5zaWduZWQgaW50ZWdlciB2YWx1ZXMuICovXG52YXIgcmVJc1VpbnQgPSAvXig/OjB8WzEtOV1cXGQqKSQvO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgYXJyYXktbGlrZSBpbmRleC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aD1NQVhfU0FGRV9JTlRFR0VSXSBUaGUgdXBwZXIgYm91bmRzIG9mIGEgdmFsaWQgaW5kZXguXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGluZGV4LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzSW5kZXgodmFsdWUsIGxlbmd0aCkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgbGVuZ3RoID0gbGVuZ3RoID09IG51bGwgPyBNQVhfU0FGRV9JTlRFR0VSIDogbGVuZ3RoO1xuXG4gIHJldHVybiAhIWxlbmd0aCAmJlxuICAgICh0eXBlID09ICdudW1iZXInIHx8XG4gICAgICAodHlwZSAhPSAnc3ltYm9sJyAmJiByZUlzVWludC50ZXN0KHZhbHVlKSkpICYmXG4gICAgICAgICh2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDwgbGVuZ3RoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0luZGV4O1xuIiwgIi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgYXJyYXktbGlrZSBsZW5ndGguXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGxvb3NlbHkgYmFzZWQgb25cbiAqIFtgVG9MZW5ndGhgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy10b2xlbmd0aCkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBsZW5ndGgsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0xlbmd0aCgzKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzTGVuZ3RoKE51bWJlci5NSU5fVkFMVUUpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzTGVuZ3RoKEluZmluaXR5KTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0xlbmd0aCgnMycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNMZW5ndGgodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyAmJlxuICAgIHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPD0gTUFYX1NBRkVfSU5URUdFUjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0xlbmd0aDtcbiIsICJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc0xlbmd0aCA9IHJlcXVpcmUoJy4vaXNMZW5ndGgnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nLFxuICAgIGFycmF5VGFnID0gJ1tvYmplY3QgQXJyYXldJyxcbiAgICBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxuICAgIGRhdGVUYWcgPSAnW29iamVjdCBEYXRlXScsXG4gICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG51bWJlclRhZyA9ICdbb2JqZWN0IE51bWJlcl0nLFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nLFxuICAgIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nLFxuICAgIHdlYWtNYXBUYWcgPSAnW29iamVjdCBXZWFrTWFwXSc7XG5cbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXG4gICAgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nLFxuICAgIGZsb2F0MzJUYWcgPSAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICBmbG9hdDY0VGFnID0gJ1tvYmplY3QgRmxvYXQ2NEFycmF5XScsXG4gICAgaW50OFRhZyA9ICdbb2JqZWN0IEludDhBcnJheV0nLFxuICAgIGludDE2VGFnID0gJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgIGludDMyVGFnID0gJ1tvYmplY3QgSW50MzJBcnJheV0nLFxuICAgIHVpbnQ4VGFnID0gJ1tvYmplY3QgVWludDhBcnJheV0nLFxuICAgIHVpbnQ4Q2xhbXBlZFRhZyA9ICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXG4gICAgdWludDE2VGFnID0gJ1tvYmplY3QgVWludDE2QXJyYXldJyxcbiAgICB1aW50MzJUYWcgPSAnW29iamVjdCBVaW50MzJBcnJheV0nO1xuXG4vKiogVXNlZCB0byBpZGVudGlmeSBgdG9TdHJpbmdUYWdgIHZhbHVlcyBvZiB0eXBlZCBhcnJheXMuICovXG52YXIgdHlwZWRBcnJheVRhZ3MgPSB7fTtcbnR5cGVkQXJyYXlUYWdzW2Zsb2F0MzJUYWddID0gdHlwZWRBcnJheVRhZ3NbZmxvYXQ2NFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbaW50OFRhZ10gPSB0eXBlZEFycmF5VGFnc1tpbnQxNlRhZ10gPVxudHlwZWRBcnJheVRhZ3NbaW50MzJUYWddID0gdHlwZWRBcnJheVRhZ3NbdWludDhUYWddID1cbnR5cGVkQXJyYXlUYWdzW3VpbnQ4Q2xhbXBlZFRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50MTZUYWddID1cbnR5cGVkQXJyYXlUYWdzW3VpbnQzMlRhZ10gPSB0cnVlO1xudHlwZWRBcnJheVRhZ3NbYXJnc1RhZ10gPSB0eXBlZEFycmF5VGFnc1thcnJheVRhZ10gPVxudHlwZWRBcnJheVRhZ3NbYXJyYXlCdWZmZXJUYWddID0gdHlwZWRBcnJheVRhZ3NbYm9vbFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbZGF0YVZpZXdUYWddID0gdHlwZWRBcnJheVRhZ3NbZGF0ZVRhZ10gPVxudHlwZWRBcnJheVRhZ3NbZXJyb3JUYWddID0gdHlwZWRBcnJheVRhZ3NbZnVuY1RhZ10gPVxudHlwZWRBcnJheVRhZ3NbbWFwVGFnXSA9IHR5cGVkQXJyYXlUYWdzW251bWJlclRhZ10gPVxudHlwZWRBcnJheVRhZ3Nbb2JqZWN0VGFnXSA9IHR5cGVkQXJyYXlUYWdzW3JlZ2V4cFRhZ10gPVxudHlwZWRBcnJheVRhZ3Nbc2V0VGFnXSA9IHR5cGVkQXJyYXlUYWdzW3N0cmluZ1RhZ10gPVxudHlwZWRBcnJheVRhZ3Nbd2Vha01hcFRhZ10gPSBmYWxzZTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc1R5cGVkQXJyYXlgIHdpdGhvdXQgTm9kZS5qcyBvcHRpbWl6YXRpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzVHlwZWRBcnJheSh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJlxuICAgIGlzTGVuZ3RoKHZhbHVlLmxlbmd0aCkgJiYgISF0eXBlZEFycmF5VGFnc1tiYXNlR2V0VGFnKHZhbHVlKV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzVHlwZWRBcnJheTtcbiIsICIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnVuYXJ5YCB3aXRob3V0IHN1cHBvcnQgZm9yIHN0b3JpbmcgbWV0YWRhdGEuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNhcCBhcmd1bWVudHMgZm9yLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY2FwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlVW5hcnkoZnVuYykge1xuICByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gZnVuYyh2YWx1ZSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVVuYXJ5O1xuIiwgInZhciBmcmVlR2xvYmFsID0gcmVxdWlyZSgnLi9fZnJlZUdsb2JhbCcpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgcHJvY2Vzc2AgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVQcm9jZXNzID0gbW9kdWxlRXhwb3J0cyAmJiBmcmVlR2xvYmFsLnByb2Nlc3M7XG5cbi8qKiBVc2VkIHRvIGFjY2VzcyBmYXN0ZXIgTm9kZS5qcyBoZWxwZXJzLiAqL1xudmFyIG5vZGVVdGlsID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIC8vIFVzZSBgdXRpbC50eXBlc2AgZm9yIE5vZGUuanMgMTArLlxuICAgIHZhciB0eXBlcyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlICYmIGZyZWVNb2R1bGUucmVxdWlyZSgndXRpbCcpLnR5cGVzO1xuXG4gICAgaWYgKHR5cGVzKSB7XG4gICAgICByZXR1cm4gdHlwZXM7XG4gICAgfVxuXG4gICAgLy8gTGVnYWN5IGBwcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKWAgZm9yIE5vZGUuanMgPCAxMC5cbiAgICByZXR1cm4gZnJlZVByb2Nlc3MgJiYgZnJlZVByb2Nlc3MuYmluZGluZyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nKCd1dGlsJyk7XG4gIH0gY2F0Y2ggKGUpIHt9XG59KCkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5vZGVVdGlsO1xuIiwgInZhciBiYXNlSXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9fYmFzZUlzVHlwZWRBcnJheScpLFxuICAgIGJhc2VVbmFyeSA9IHJlcXVpcmUoJy4vX2Jhc2VVbmFyeScpLFxuICAgIG5vZGVVdGlsID0gcmVxdWlyZSgnLi9fbm9kZVV0aWwnKTtcblxuLyogTm9kZS5qcyBoZWxwZXIgcmVmZXJlbmNlcy4gKi9cbnZhciBub2RlSXNUeXBlZEFycmF5ID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNUeXBlZEFycmF5O1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSB0eXBlZCBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHR5cGVkIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNUeXBlZEFycmF5KG5ldyBVaW50OEFycmF5KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzVHlwZWRBcnJheShbXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNUeXBlZEFycmF5ID0gbm9kZUlzVHlwZWRBcnJheSA/IGJhc2VVbmFyeShub2RlSXNUeXBlZEFycmF5KSA6IGJhc2VJc1R5cGVkQXJyYXk7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNUeXBlZEFycmF5O1xuIiwgInZhciBiYXNlVGltZXMgPSByZXF1aXJlKCcuL19iYXNlVGltZXMnKSxcbiAgICBpc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNCdWZmZXIgPSByZXF1aXJlKCcuL2lzQnVmZmVyJyksXG4gICAgaXNJbmRleCA9IHJlcXVpcmUoJy4vX2lzSW5kZXgnKSxcbiAgICBpc1R5cGVkQXJyYXkgPSByZXF1aXJlKCcuL2lzVHlwZWRBcnJheScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgdGhlIGFycmF5LWxpa2UgYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGluaGVyaXRlZCBTcGVjaWZ5IHJldHVybmluZyBpbmhlcml0ZWQgcHJvcGVydHkgbmFtZXMuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBhcnJheUxpa2VLZXlzKHZhbHVlLCBpbmhlcml0ZWQpIHtcbiAgdmFyIGlzQXJyID0gaXNBcnJheSh2YWx1ZSksXG4gICAgICBpc0FyZyA9ICFpc0FyciAmJiBpc0FyZ3VtZW50cyh2YWx1ZSksXG4gICAgICBpc0J1ZmYgPSAhaXNBcnIgJiYgIWlzQXJnICYmIGlzQnVmZmVyKHZhbHVlKSxcbiAgICAgIGlzVHlwZSA9ICFpc0FyciAmJiAhaXNBcmcgJiYgIWlzQnVmZiAmJiBpc1R5cGVkQXJyYXkodmFsdWUpLFxuICAgICAgc2tpcEluZGV4ZXMgPSBpc0FyciB8fCBpc0FyZyB8fCBpc0J1ZmYgfHwgaXNUeXBlLFxuICAgICAgcmVzdWx0ID0gc2tpcEluZGV4ZXMgPyBiYXNlVGltZXModmFsdWUubGVuZ3RoLCBTdHJpbmcpIDogW10sXG4gICAgICBsZW5ndGggPSByZXN1bHQubGVuZ3RoO1xuXG4gIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xuICAgIGlmICgoaW5oZXJpdGVkIHx8IGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGtleSkpICYmXG4gICAgICAgICEoc2tpcEluZGV4ZXMgJiYgKFxuICAgICAgICAgICAvLyBTYWZhcmkgOSBoYXMgZW51bWVyYWJsZSBgYXJndW1lbnRzLmxlbmd0aGAgaW4gc3RyaWN0IG1vZGUuXG4gICAgICAgICAgIGtleSA9PSAnbGVuZ3RoJyB8fFxuICAgICAgICAgICAvLyBOb2RlLmpzIDAuMTAgaGFzIGVudW1lcmFibGUgbm9uLWluZGV4IHByb3BlcnRpZXMgb24gYnVmZmVycy5cbiAgICAgICAgICAgKGlzQnVmZiAmJiAoa2V5ID09ICdvZmZzZXQnIHx8IGtleSA9PSAncGFyZW50JykpIHx8XG4gICAgICAgICAgIC8vIFBoYW50b21KUyAyIGhhcyBlbnVtZXJhYmxlIG5vbi1pbmRleCBwcm9wZXJ0aWVzIG9uIHR5cGVkIGFycmF5cy5cbiAgICAgICAgICAgKGlzVHlwZSAmJiAoa2V5ID09ICdidWZmZXInIHx8IGtleSA9PSAnYnl0ZUxlbmd0aCcgfHwga2V5ID09ICdieXRlT2Zmc2V0JykpIHx8XG4gICAgICAgICAgIC8vIFNraXAgaW5kZXggcHJvcGVydGllcy5cbiAgICAgICAgICAgaXNJbmRleChrZXksIGxlbmd0aClcbiAgICAgICAgKSkpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlMaWtlS2V5cztcbiIsICIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhIHByb3RvdHlwZSBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwcm90b3R5cGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNQcm90b3R5cGUodmFsdWUpIHtcbiAgdmFyIEN0b3IgPSB2YWx1ZSAmJiB2YWx1ZS5jb25zdHJ1Y3RvcixcbiAgICAgIHByb3RvID0gKHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3Rvci5wcm90b3R5cGUpIHx8IG9iamVjdFByb3RvO1xuXG4gIHJldHVybiB2YWx1ZSA9PT0gcHJvdG87XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNQcm90b3R5cGU7XG4iLCAiLyoqXG4gKiBDcmVhdGVzIGEgdW5hcnkgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIGl0cyBhcmd1bWVudCB0cmFuc2Zvcm1lZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgYXJndW1lbnQgdHJhbnNmb3JtLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG92ZXJBcmcoZnVuYywgdHJhbnNmb3JtKSB7XG4gIHJldHVybiBmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4gZnVuYyh0cmFuc2Zvcm0oYXJnKSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gb3ZlckFyZztcbiIsICJ2YXIgb3ZlckFyZyA9IHJlcXVpcmUoJy4vX292ZXJBcmcnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUtleXMgPSBvdmVyQXJnKE9iamVjdC5rZXlzLCBPYmplY3QpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5hdGl2ZUtleXM7XG4iLCAidmFyIGlzUHJvdG90eXBlID0gcmVxdWlyZSgnLi9faXNQcm90b3R5cGUnKSxcbiAgICBuYXRpdmVLZXlzID0gcmVxdWlyZSgnLi9fbmF0aXZlS2V5cycpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmtleXNgIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYmFzZUtleXMob2JqZWN0KSB7XG4gIGlmICghaXNQcm90b3R5cGUob2JqZWN0KSkge1xuICAgIHJldHVybiBuYXRpdmVLZXlzKG9iamVjdCk7XG4gIH1cbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gT2JqZWN0KG9iamVjdCkpIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYga2V5ICE9ICdjb25zdHJ1Y3RvcicpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUtleXM7XG4iLCAidmFyIGlzRnVuY3Rpb24gPSByZXF1aXJlKCcuL2lzRnVuY3Rpb24nKSxcbiAgICBpc0xlbmd0aCA9IHJlcXVpcmUoJy4vaXNMZW5ndGgnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLiBBIHZhbHVlIGlzIGNvbnNpZGVyZWQgYXJyYXktbGlrZSBpZiBpdCdzXG4gKiBub3QgYSBmdW5jdGlvbiBhbmQgaGFzIGEgYHZhbHVlLmxlbmd0aGAgdGhhdCdzIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIG9yXG4gKiBlcXVhbCB0byBgMGAgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZSgnYWJjJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUxpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhaXNGdW5jdGlvbih2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcnJheUxpa2U7XG4iLCAidmFyIGFycmF5TGlrZUtleXMgPSByZXF1aXJlKCcuL19hcnJheUxpa2VLZXlzJyksXG4gICAgYmFzZUtleXMgPSByZXF1aXJlKCcuL19iYXNlS2V5cycpLFxuICAgIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIGBvYmplY3RgLlxuICpcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLiBTZWUgdGhlXG4gKiBbRVMgc3BlY10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LmtleXMpXG4gKiBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8ua2V5cyhuZXcgRm9vKTtcbiAqIC8vID0+IFsnYScsICdiJ10gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAqXG4gKiBfLmtleXMoJ2hpJyk7XG4gKiAvLyA9PiBbJzAnLCAnMSddXG4gKi9cbmZ1bmN0aW9uIGtleXMob2JqZWN0KSB7XG4gIHJldHVybiBpc0FycmF5TGlrZShvYmplY3QpID8gYXJyYXlMaWtlS2V5cyhvYmplY3QpIDogYmFzZUtleXMob2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBrZXlzO1xuIiwgInZhciBiYXNlR2V0QWxsS2V5cyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRBbGxLZXlzJyksXG4gICAgZ2V0U3ltYm9scyA9IHJlcXVpcmUoJy4vX2dldFN5bWJvbHMnKSxcbiAgICBrZXlzID0gcmVxdWlyZSgnLi9rZXlzJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiBvd24gZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scy5cbiAqL1xuZnVuY3Rpb24gZ2V0QWxsS2V5cyhvYmplY3QpIHtcbiAgcmV0dXJuIGJhc2VHZXRBbGxLZXlzKG9iamVjdCwga2V5cywgZ2V0U3ltYm9scyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QWxsS2V5cztcbiIsICJ2YXIgZ2V0QWxsS2V5cyA9IHJlcXVpcmUoJy4vX2dldEFsbEtleXMnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3Igb2JqZWN0cyB3aXRoIHN1cHBvcnQgZm9yXG4gKiBwYXJ0aWFsIGRlZXAgY29tcGFyaXNvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYG9iamVjdGAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBlcXVhbE9iamVjdHMob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHLFxuICAgICAgb2JqUHJvcHMgPSBnZXRBbGxLZXlzKG9iamVjdCksXG4gICAgICBvYmpMZW5ndGggPSBvYmpQcm9wcy5sZW5ndGgsXG4gICAgICBvdGhQcm9wcyA9IGdldEFsbEtleXMob3RoZXIpLFxuICAgICAgb3RoTGVuZ3RoID0gb3RoUHJvcHMubGVuZ3RoO1xuXG4gIGlmIChvYmpMZW5ndGggIT0gb3RoTGVuZ3RoICYmICFpc1BhcnRpYWwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIGluZGV4ID0gb2JqTGVuZ3RoO1xuICB3aGlsZSAoaW5kZXgtLSkge1xuICAgIHZhciBrZXkgPSBvYmpQcm9wc1tpbmRleF07XG4gICAgaWYgKCEoaXNQYXJ0aWFsID8ga2V5IGluIG90aGVyIDogaGFzT3duUHJvcGVydHkuY2FsbChvdGhlciwga2V5KSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgLy8gQ2hlY2sgdGhhdCBjeWNsaWMgdmFsdWVzIGFyZSBlcXVhbC5cbiAgdmFyIG9ialN0YWNrZWQgPSBzdGFjay5nZXQob2JqZWN0KTtcbiAgdmFyIG90aFN0YWNrZWQgPSBzdGFjay5nZXQob3RoZXIpO1xuICBpZiAob2JqU3RhY2tlZCAmJiBvdGhTdGFja2VkKSB7XG4gICAgcmV0dXJuIG9ialN0YWNrZWQgPT0gb3RoZXIgJiYgb3RoU3RhY2tlZCA9PSBvYmplY3Q7XG4gIH1cbiAgdmFyIHJlc3VsdCA9IHRydWU7XG4gIHN0YWNrLnNldChvYmplY3QsIG90aGVyKTtcbiAgc3RhY2suc2V0KG90aGVyLCBvYmplY3QpO1xuXG4gIHZhciBza2lwQ3RvciA9IGlzUGFydGlhbDtcbiAgd2hpbGUgKCsraW5kZXggPCBvYmpMZW5ndGgpIHtcbiAgICBrZXkgPSBvYmpQcm9wc1tpbmRleF07XG4gICAgdmFyIG9ialZhbHVlID0gb2JqZWN0W2tleV0sXG4gICAgICAgIG90aFZhbHVlID0gb3RoZXJba2V5XTtcblxuICAgIGlmIChjdXN0b21pemVyKSB7XG4gICAgICB2YXIgY29tcGFyZWQgPSBpc1BhcnRpYWxcbiAgICAgICAgPyBjdXN0b21pemVyKG90aFZhbHVlLCBvYmpWYWx1ZSwga2V5LCBvdGhlciwgb2JqZWN0LCBzdGFjaylcbiAgICAgICAgOiBjdXN0b21pemVyKG9ialZhbHVlLCBvdGhWYWx1ZSwga2V5LCBvYmplY3QsIG90aGVyLCBzdGFjayk7XG4gICAgfVxuICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgb2JqZWN0cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgIGlmICghKGNvbXBhcmVkID09PSB1bmRlZmluZWRcbiAgICAgICAgICA/IChvYmpWYWx1ZSA9PT0gb3RoVmFsdWUgfHwgZXF1YWxGdW5jKG9ialZhbHVlLCBvdGhWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spKVxuICAgICAgICAgIDogY29tcGFyZWRcbiAgICAgICAgKSkge1xuICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgc2tpcEN0b3IgfHwgKHNraXBDdG9yID0ga2V5ID09ICdjb25zdHJ1Y3RvcicpO1xuICB9XG4gIGlmIChyZXN1bHQgJiYgIXNraXBDdG9yKSB7XG4gICAgdmFyIG9iakN0b3IgPSBvYmplY3QuY29uc3RydWN0b3IsXG4gICAgICAgIG90aEN0b3IgPSBvdGhlci5jb25zdHJ1Y3RvcjtcblxuICAgIC8vIE5vbiBgT2JqZWN0YCBvYmplY3QgaW5zdGFuY2VzIHdpdGggZGlmZmVyZW50IGNvbnN0cnVjdG9ycyBhcmUgbm90IGVxdWFsLlxuICAgIGlmIChvYmpDdG9yICE9IG90aEN0b3IgJiZcbiAgICAgICAgKCdjb25zdHJ1Y3RvcicgaW4gb2JqZWN0ICYmICdjb25zdHJ1Y3RvcicgaW4gb3RoZXIpICYmXG4gICAgICAgICEodHlwZW9mIG9iakN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBvYmpDdG9yIGluc3RhbmNlb2Ygb2JqQ3RvciAmJlxuICAgICAgICAgIHR5cGVvZiBvdGhDdG9yID09ICdmdW5jdGlvbicgJiYgb3RoQ3RvciBpbnN0YW5jZW9mIG90aEN0b3IpKSB7XG4gICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgc3RhY2tbJ2RlbGV0ZSddKG9iamVjdCk7XG4gIHN0YWNrWydkZWxldGUnXShvdGhlcik7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXF1YWxPYmplY3RzO1xuIiwgInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgRGF0YVZpZXcgPSBnZXROYXRpdmUocm9vdCwgJ0RhdGFWaWV3Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gRGF0YVZpZXc7XG4iLCAidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBQcm9taXNlID0gZ2V0TmF0aXZlKHJvb3QsICdQcm9taXNlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gUHJvbWlzZTtcbiIsICJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIFNldCA9IGdldE5hdGl2ZShyb290LCAnU2V0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gU2V0O1xuIiwgInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgV2Vha01hcCA9IGdldE5hdGl2ZShyb290LCAnV2Vha01hcCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFdlYWtNYXA7XG4iLCAidmFyIERhdGFWaWV3ID0gcmVxdWlyZSgnLi9fRGF0YVZpZXcnKSxcbiAgICBNYXAgPSByZXF1aXJlKCcuL19NYXAnKSxcbiAgICBQcm9taXNlID0gcmVxdWlyZSgnLi9fUHJvbWlzZScpLFxuICAgIFNldCA9IHJlcXVpcmUoJy4vX1NldCcpLFxuICAgIFdlYWtNYXAgPSByZXF1aXJlKCcuL19XZWFrTWFwJyksXG4gICAgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICB0b1NvdXJjZSA9IHJlcXVpcmUoJy4vX3RvU291cmNlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJyxcbiAgICBwcm9taXNlVGFnID0gJ1tvYmplY3QgUHJvbWlzZV0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHdlYWtNYXBUYWcgPSAnW29iamVjdCBXZWFrTWFwXSc7XG5cbnZhciBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XSc7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBtYXBzLCBzZXRzLCBhbmQgd2Vha21hcHMuICovXG52YXIgZGF0YVZpZXdDdG9yU3RyaW5nID0gdG9Tb3VyY2UoRGF0YVZpZXcpLFxuICAgIG1hcEN0b3JTdHJpbmcgPSB0b1NvdXJjZShNYXApLFxuICAgIHByb21pc2VDdG9yU3RyaW5nID0gdG9Tb3VyY2UoUHJvbWlzZSksXG4gICAgc2V0Q3RvclN0cmluZyA9IHRvU291cmNlKFNldCksXG4gICAgd2Vha01hcEN0b3JTdHJpbmcgPSB0b1NvdXJjZShXZWFrTWFwKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBgdG9TdHJpbmdUYWdgIG9mIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgYHRvU3RyaW5nVGFnYC5cbiAqL1xudmFyIGdldFRhZyA9IGJhc2VHZXRUYWc7XG5cbi8vIEZhbGxiYWNrIGZvciBkYXRhIHZpZXdzLCBtYXBzLCBzZXRzLCBhbmQgd2VhayBtYXBzIGluIElFIDExIGFuZCBwcm9taXNlcyBpbiBOb2RlLmpzIDwgNi5cbmlmICgoRGF0YVZpZXcgJiYgZ2V0VGFnKG5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoMSkpKSAhPSBkYXRhVmlld1RhZykgfHxcbiAgICAoTWFwICYmIGdldFRhZyhuZXcgTWFwKSAhPSBtYXBUYWcpIHx8XG4gICAgKFByb21pc2UgJiYgZ2V0VGFnKFByb21pc2UucmVzb2x2ZSgpKSAhPSBwcm9taXNlVGFnKSB8fFxuICAgIChTZXQgJiYgZ2V0VGFnKG5ldyBTZXQpICE9IHNldFRhZykgfHxcbiAgICAoV2Vha01hcCAmJiBnZXRUYWcobmV3IFdlYWtNYXApICE9IHdlYWtNYXBUYWcpKSB7XG4gIGdldFRhZyA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgdmFyIHJlc3VsdCA9IGJhc2VHZXRUYWcodmFsdWUpLFxuICAgICAgICBDdG9yID0gcmVzdWx0ID09IG9iamVjdFRhZyA/IHZhbHVlLmNvbnN0cnVjdG9yIDogdW5kZWZpbmVkLFxuICAgICAgICBjdG9yU3RyaW5nID0gQ3RvciA/IHRvU291cmNlKEN0b3IpIDogJyc7XG5cbiAgICBpZiAoY3RvclN0cmluZykge1xuICAgICAgc3dpdGNoIChjdG9yU3RyaW5nKSB7XG4gICAgICAgIGNhc2UgZGF0YVZpZXdDdG9yU3RyaW5nOiByZXR1cm4gZGF0YVZpZXdUYWc7XG4gICAgICAgIGNhc2UgbWFwQ3RvclN0cmluZzogcmV0dXJuIG1hcFRhZztcbiAgICAgICAgY2FzZSBwcm9taXNlQ3RvclN0cmluZzogcmV0dXJuIHByb21pc2VUYWc7XG4gICAgICAgIGNhc2Ugc2V0Q3RvclN0cmluZzogcmV0dXJuIHNldFRhZztcbiAgICAgICAgY2FzZSB3ZWFrTWFwQ3RvclN0cmluZzogcmV0dXJuIHdlYWtNYXBUYWc7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0VGFnO1xuIiwgInZhciBTdGFjayA9IHJlcXVpcmUoJy4vX1N0YWNrJyksXG4gICAgZXF1YWxBcnJheXMgPSByZXF1aXJlKCcuL19lcXVhbEFycmF5cycpLFxuICAgIGVxdWFsQnlUYWcgPSByZXF1aXJlKCcuL19lcXVhbEJ5VGFnJyksXG4gICAgZXF1YWxPYmplY3RzID0gcmVxdWlyZSgnLi9fZXF1YWxPYmplY3RzJyksXG4gICAgZ2V0VGFnID0gcmVxdWlyZSgnLi9fZ2V0VGFnJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzQnVmZmVyID0gcmVxdWlyZSgnLi9pc0J1ZmZlcicpLFxuICAgIGlzVHlwZWRBcnJheSA9IHJlcXVpcmUoJy4vaXNUeXBlZEFycmF5Jyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJyxcbiAgICBhcnJheVRhZyA9ICdbb2JqZWN0IEFycmF5XScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XSc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbGAgZm9yIGFycmF5cyBhbmQgb2JqZWN0cyB3aGljaCBwZXJmb3Jtc1xuICogZGVlcCBjb21wYXJpc29ucyBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzIGVuYWJsaW5nIG9iamVjdHMgd2l0aCBjaXJjdWxhclxuICogcmVmZXJlbmNlcyB0byBiZSBjb21wYXJlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIGBvYmplY3RgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdHMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzRXF1YWxEZWVwKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spIHtcbiAgdmFyIG9iaklzQXJyID0gaXNBcnJheShvYmplY3QpLFxuICAgICAgb3RoSXNBcnIgPSBpc0FycmF5KG90aGVyKSxcbiAgICAgIG9ialRhZyA9IG9iaklzQXJyID8gYXJyYXlUYWcgOiBnZXRUYWcob2JqZWN0KSxcbiAgICAgIG90aFRhZyA9IG90aElzQXJyID8gYXJyYXlUYWcgOiBnZXRUYWcob3RoZXIpO1xuXG4gIG9ialRhZyA9IG9ialRhZyA9PSBhcmdzVGFnID8gb2JqZWN0VGFnIDogb2JqVGFnO1xuICBvdGhUYWcgPSBvdGhUYWcgPT0gYXJnc1RhZyA/IG9iamVjdFRhZyA6IG90aFRhZztcblxuICB2YXIgb2JqSXNPYmogPSBvYmpUYWcgPT0gb2JqZWN0VGFnLFxuICAgICAgb3RoSXNPYmogPSBvdGhUYWcgPT0gb2JqZWN0VGFnLFxuICAgICAgaXNTYW1lVGFnID0gb2JqVGFnID09IG90aFRhZztcblxuICBpZiAoaXNTYW1lVGFnICYmIGlzQnVmZmVyKG9iamVjdCkpIHtcbiAgICBpZiAoIWlzQnVmZmVyKG90aGVyKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBvYmpJc0FyciA9IHRydWU7XG4gICAgb2JqSXNPYmogPSBmYWxzZTtcbiAgfVxuICBpZiAoaXNTYW1lVGFnICYmICFvYmpJc09iaikge1xuICAgIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gICAgcmV0dXJuIChvYmpJc0FyciB8fCBpc1R5cGVkQXJyYXkob2JqZWN0KSlcbiAgICAgID8gZXF1YWxBcnJheXMob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaylcbiAgICAgIDogZXF1YWxCeVRhZyhvYmplY3QsIG90aGVyLCBvYmpUYWcsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spO1xuICB9XG4gIGlmICghKGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRykpIHtcbiAgICB2YXIgb2JqSXNXcmFwcGVkID0gb2JqSXNPYmogJiYgaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsICdfX3dyYXBwZWRfXycpLFxuICAgICAgICBvdGhJc1dyYXBwZWQgPSBvdGhJc09iaiAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG90aGVyLCAnX193cmFwcGVkX18nKTtcblxuICAgIGlmIChvYmpJc1dyYXBwZWQgfHwgb3RoSXNXcmFwcGVkKSB7XG4gICAgICB2YXIgb2JqVW53cmFwcGVkID0gb2JqSXNXcmFwcGVkID8gb2JqZWN0LnZhbHVlKCkgOiBvYmplY3QsXG4gICAgICAgICAgb3RoVW53cmFwcGVkID0gb3RoSXNXcmFwcGVkID8gb3RoZXIudmFsdWUoKSA6IG90aGVyO1xuXG4gICAgICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgU3RhY2spO1xuICAgICAgcmV0dXJuIGVxdWFsRnVuYyhvYmpVbndyYXBwZWQsIG90aFVud3JhcHBlZCwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spO1xuICAgIH1cbiAgfVxuICBpZiAoIWlzU2FtZVRhZykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgU3RhY2spO1xuICByZXR1cm4gZXF1YWxPYmplY3RzKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc0VxdWFsRGVlcDtcbiIsICJ2YXIgYmFzZUlzRXF1YWxEZWVwID0gcmVxdWlyZSgnLi9fYmFzZUlzRXF1YWxEZWVwJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0VxdWFsYCB3aGljaCBzdXBwb3J0cyBwYXJ0aWFsIGNvbXBhcmlzb25zXG4gKiBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy5cbiAqICAxIC0gVW5vcmRlcmVkIGNvbXBhcmlzb25cbiAqICAyIC0gUGFydGlhbCBjb21wYXJpc29uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgYHZhbHVlYCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzRXF1YWwodmFsdWUsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykge1xuICBpZiAodmFsdWUgPT09IG90aGVyKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKHZhbHVlID09IG51bGwgfHwgb3RoZXIgPT0gbnVsbCB8fCAoIWlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgIWlzT2JqZWN0TGlrZShvdGhlcikpKSB7XG4gICAgcmV0dXJuIHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXI7XG4gIH1cbiAgcmV0dXJuIGJhc2VJc0VxdWFsRGVlcCh2YWx1ZSwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGJhc2VJc0VxdWFsLCBzdGFjayk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzRXF1YWw7XG4iLCAidmFyIGJhc2VJc0VxdWFsID0gcmVxdWlyZSgnLi9fYmFzZUlzRXF1YWwnKTtcblxuLyoqXG4gKiBQZXJmb3JtcyBhIGRlZXAgY29tcGFyaXNvbiBiZXR3ZWVuIHR3byB2YWx1ZXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgYXJlXG4gKiBlcXVpdmFsZW50LlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBzdXBwb3J0cyBjb21wYXJpbmcgYXJyYXlzLCBhcnJheSBidWZmZXJzLCBib29sZWFucyxcbiAqIGRhdGUgb2JqZWN0cywgZXJyb3Igb2JqZWN0cywgbWFwcywgbnVtYmVycywgYE9iamVjdGAgb2JqZWN0cywgcmVnZXhlcyxcbiAqIHNldHMsIHN0cmluZ3MsIHN5bWJvbHMsIGFuZCB0eXBlZCBhcnJheXMuIGBPYmplY3RgIG9iamVjdHMgYXJlIGNvbXBhcmVkXG4gKiBieSB0aGVpciBvd24sIG5vdCBpbmhlcml0ZWQsIGVudW1lcmFibGUgcHJvcGVydGllcy4gRnVuY3Rpb25zIGFuZCBET01cbiAqIG5vZGVzIGFyZSBjb21wYXJlZCBieSBzdHJpY3QgZXF1YWxpdHksIGkuZS4gYD09PWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKiB2YXIgb3RoZXIgPSB7ICdhJzogMSB9O1xuICpcbiAqIF8uaXNFcXVhbChvYmplY3QsIG90aGVyKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBvYmplY3QgPT09IG90aGVyO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNFcXVhbCh2YWx1ZSwgb3RoZXIpIHtcbiAgcmV0dXJuIGJhc2VJc0VxdWFsKHZhbHVlLCBvdGhlcik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNFcXVhbDtcbiIsICIvLyEgbW9tZW50LmpzXG4vLyEgdmVyc2lvbiA6IDIuMzAuMVxuLy8hIGF1dGhvcnMgOiBUaW0gV29vZCwgSXNrcmVuIENoZXJuZXYsIE1vbWVudC5qcyBjb250cmlidXRvcnNcbi8vISBsaWNlbnNlIDogTUlUXG4vLyEgbW9tZW50anMuY29tXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpIDpcbiAgICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoZmFjdG9yeSkgOlxuICAgIGdsb2JhbC5tb21lbnQgPSBmYWN0b3J5KClcbn0odGhpcywgKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgdmFyIGhvb2tDYWxsYmFjaztcblxuICAgIGZ1bmN0aW9uIGhvb2tzKCkge1xuICAgICAgICByZXR1cm4gaG9va0NhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBpcyBkb25lIHRvIHJlZ2lzdGVyIHRoZSBtZXRob2QgY2FsbGVkIHdpdGggbW9tZW50KClcbiAgICAvLyB3aXRob3V0IGNyZWF0aW5nIGNpcmN1bGFyIGRlcGVuZGVuY2llcy5cbiAgICBmdW5jdGlvbiBzZXRIb29rQ2FsbGJhY2soY2FsbGJhY2spIHtcbiAgICAgICAgaG9va0NhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNBcnJheShpbnB1dCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgaW5wdXQgaW5zdGFuY2VvZiBBcnJheSB8fFxuICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KSA9PT0gJ1tvYmplY3QgQXJyYXldJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzT2JqZWN0KGlucHV0KSB7XG4gICAgICAgIC8vIElFOCB3aWxsIHRyZWF0IHVuZGVmaW5lZCBhbmQgbnVsbCBhcyBvYmplY3QgaWYgaXQgd2Fzbid0IGZvclxuICAgICAgICAvLyBpbnB1dCAhPSBudWxsXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBpbnB1dCAhPSBudWxsICYmXG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBPYmplY3RdJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhc093blByb3AoYSwgYikge1xuICAgICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsIGIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzT2JqZWN0RW1wdHkob2JqKSB7XG4gICAgICAgIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcykge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaikubGVuZ3RoID09PSAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGs7XG4gICAgICAgICAgICBmb3IgKGsgaW4gb2JqKSB7XG4gICAgICAgICAgICAgICAgaWYgKGhhc093blByb3Aob2JqLCBrKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1VuZGVmaW5lZChpbnB1dCkge1xuICAgICAgICByZXR1cm4gaW5wdXQgPT09IHZvaWQgMDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc051bWJlcihpbnB1dCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdHlwZW9mIGlucHV0ID09PSAnbnVtYmVyJyB8fFxuICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KSA9PT0gJ1tvYmplY3QgTnVtYmVyXSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0RhdGUoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGlucHV0IGluc3RhbmNlb2YgRGF0ZSB8fFxuICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KSA9PT0gJ1tvYmplY3QgRGF0ZV0nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFwKGFyciwgZm4pIHtcbiAgICAgICAgdmFyIHJlcyA9IFtdLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIGFyckxlbiA9IGFyci5sZW5ndGg7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBhcnJMZW47ICsraSkge1xuICAgICAgICAgICAgcmVzLnB1c2goZm4oYXJyW2ldLCBpKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBleHRlbmQoYSwgYikge1xuICAgICAgICBmb3IgKHZhciBpIGluIGIpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGIsIGkpKSB7XG4gICAgICAgICAgICAgICAgYVtpXSA9IGJbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFzT3duUHJvcChiLCAndG9TdHJpbmcnKSkge1xuICAgICAgICAgICAgYS50b1N0cmluZyA9IGIudG9TdHJpbmc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFzT3duUHJvcChiLCAndmFsdWVPZicpKSB7XG4gICAgICAgICAgICBhLnZhbHVlT2YgPSBiLnZhbHVlT2Y7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVVVEMoaW5wdXQsIGZvcm1hdCwgbG9jYWxlLCBzdHJpY3QpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsT3JVVEMoaW5wdXQsIGZvcm1hdCwgbG9jYWxlLCBzdHJpY3QsIHRydWUpLnV0YygpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlZmF1bHRQYXJzaW5nRmxhZ3MoKSB7XG4gICAgICAgIC8vIFdlIG5lZWQgdG8gZGVlcCBjbG9uZSB0aGlzIG9iamVjdC5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGVtcHR5OiBmYWxzZSxcbiAgICAgICAgICAgIHVudXNlZFRva2VuczogW10sXG4gICAgICAgICAgICB1bnVzZWRJbnB1dDogW10sXG4gICAgICAgICAgICBvdmVyZmxvdzogLTIsXG4gICAgICAgICAgICBjaGFyc0xlZnRPdmVyOiAwLFxuICAgICAgICAgICAgbnVsbElucHV0OiBmYWxzZSxcbiAgICAgICAgICAgIGludmFsaWRFcmE6IG51bGwsXG4gICAgICAgICAgICBpbnZhbGlkTW9udGg6IG51bGwsXG4gICAgICAgICAgICBpbnZhbGlkRm9ybWF0OiBmYWxzZSxcbiAgICAgICAgICAgIHVzZXJJbnZhbGlkYXRlZDogZmFsc2UsXG4gICAgICAgICAgICBpc286IGZhbHNlLFxuICAgICAgICAgICAgcGFyc2VkRGF0ZVBhcnRzOiBbXSxcbiAgICAgICAgICAgIGVyYTogbnVsbCxcbiAgICAgICAgICAgIG1lcmlkaWVtOiBudWxsLFxuICAgICAgICAgICAgcmZjMjgyMjogZmFsc2UsXG4gICAgICAgICAgICB3ZWVrZGF5TWlzbWF0Y2g6IGZhbHNlLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFBhcnNpbmdGbGFncyhtKSB7XG4gICAgICAgIGlmIChtLl9wZiA9PSBudWxsKSB7XG4gICAgICAgICAgICBtLl9wZiA9IGRlZmF1bHRQYXJzaW5nRmxhZ3MoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbS5fcGY7XG4gICAgfVxuXG4gICAgdmFyIHNvbWU7XG4gICAgaWYgKEFycmF5LnByb3RvdHlwZS5zb21lKSB7XG4gICAgICAgIHNvbWUgPSBBcnJheS5wcm90b3R5cGUuc29tZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBzb21lID0gZnVuY3Rpb24gKGZ1bikge1xuICAgICAgICAgICAgdmFyIHQgPSBPYmplY3QodGhpcyksXG4gICAgICAgICAgICAgICAgbGVuID0gdC5sZW5ndGggPj4+IDAsXG4gICAgICAgICAgICAgICAgaTtcblxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGkgaW4gdCAmJiBmdW4uY2FsbCh0aGlzLCB0W2ldLCBpLCB0KSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1ZhbGlkKG0pIHtcbiAgICAgICAgdmFyIGZsYWdzID0gbnVsbCxcbiAgICAgICAgICAgIHBhcnNlZFBhcnRzID0gZmFsc2UsXG4gICAgICAgICAgICBpc05vd1ZhbGlkID0gbS5fZCAmJiAhaXNOYU4obS5fZC5nZXRUaW1lKCkpO1xuICAgICAgICBpZiAoaXNOb3dWYWxpZCkge1xuICAgICAgICAgICAgZmxhZ3MgPSBnZXRQYXJzaW5nRmxhZ3MobSk7XG4gICAgICAgICAgICBwYXJzZWRQYXJ0cyA9IHNvbWUuY2FsbChmbGFncy5wYXJzZWREYXRlUGFydHMsIGZ1bmN0aW9uIChpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGkgIT0gbnVsbDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaXNOb3dWYWxpZCA9XG4gICAgICAgICAgICAgICAgZmxhZ3Mub3ZlcmZsb3cgPCAwICYmXG4gICAgICAgICAgICAgICAgIWZsYWdzLmVtcHR5ICYmXG4gICAgICAgICAgICAgICAgIWZsYWdzLmludmFsaWRFcmEgJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3MuaW52YWxpZE1vbnRoICYmXG4gICAgICAgICAgICAgICAgIWZsYWdzLmludmFsaWRXZWVrZGF5ICYmXG4gICAgICAgICAgICAgICAgIWZsYWdzLndlZWtkYXlNaXNtYXRjaCAmJlxuICAgICAgICAgICAgICAgICFmbGFncy5udWxsSW5wdXQgJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3MuaW52YWxpZEZvcm1hdCAmJlxuICAgICAgICAgICAgICAgICFmbGFncy51c2VySW52YWxpZGF0ZWQgJiZcbiAgICAgICAgICAgICAgICAoIWZsYWdzLm1lcmlkaWVtIHx8IChmbGFncy5tZXJpZGllbSAmJiBwYXJzZWRQYXJ0cykpO1xuICAgICAgICAgICAgaWYgKG0uX3N0cmljdCkge1xuICAgICAgICAgICAgICAgIGlzTm93VmFsaWQgPVxuICAgICAgICAgICAgICAgICAgICBpc05vd1ZhbGlkICYmXG4gICAgICAgICAgICAgICAgICAgIGZsYWdzLmNoYXJzTGVmdE92ZXIgPT09IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MudW51c2VkVG9rZW5zLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgICAgICAgICAgICAgICBmbGFncy5iaWdIb3VyID09PSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKE9iamVjdC5pc0Zyb3plbiA9PSBudWxsIHx8ICFPYmplY3QuaXNGcm96ZW4obSkpIHtcbiAgICAgICAgICAgIG0uX2lzVmFsaWQgPSBpc05vd1ZhbGlkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGlzTm93VmFsaWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG0uX2lzVmFsaWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlSW52YWxpZChmbGFncykge1xuICAgICAgICB2YXIgbSA9IGNyZWF0ZVVUQyhOYU4pO1xuICAgICAgICBpZiAoZmxhZ3MgIT0gbnVsbCkge1xuICAgICAgICAgICAgZXh0ZW5kKGdldFBhcnNpbmdGbGFncyhtKSwgZmxhZ3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKG0pLnVzZXJJbnZhbGlkYXRlZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICAvLyBQbHVnaW5zIHRoYXQgYWRkIHByb3BlcnRpZXMgc2hvdWxkIGFsc28gYWRkIHRoZSBrZXkgaGVyZSAobnVsbCB2YWx1ZSksXG4gICAgLy8gc28gd2UgY2FuIHByb3Blcmx5IGNsb25lIG91cnNlbHZlcy5cbiAgICB2YXIgbW9tZW50UHJvcGVydGllcyA9IChob29rcy5tb21lbnRQcm9wZXJ0aWVzID0gW10pLFxuICAgICAgICB1cGRhdGVJblByb2dyZXNzID0gZmFsc2U7XG5cbiAgICBmdW5jdGlvbiBjb3B5Q29uZmlnKHRvLCBmcm9tKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgcHJvcCxcbiAgICAgICAgICAgIHZhbCxcbiAgICAgICAgICAgIG1vbWVudFByb3BlcnRpZXNMZW4gPSBtb21lbnRQcm9wZXJ0aWVzLmxlbmd0aDtcblxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2lzQU1vbWVudE9iamVjdCkpIHtcbiAgICAgICAgICAgIHRvLl9pc0FNb21lbnRPYmplY3QgPSBmcm9tLl9pc0FNb21lbnRPYmplY3Q7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9pKSkge1xuICAgICAgICAgICAgdG8uX2kgPSBmcm9tLl9pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fZikpIHtcbiAgICAgICAgICAgIHRvLl9mID0gZnJvbS5fZjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2wpKSB7XG4gICAgICAgICAgICB0by5fbCA9IGZyb20uX2w7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9zdHJpY3QpKSB7XG4gICAgICAgICAgICB0by5fc3RyaWN0ID0gZnJvbS5fc3RyaWN0O1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fdHptKSkge1xuICAgICAgICAgICAgdG8uX3R6bSA9IGZyb20uX3R6bTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2lzVVRDKSkge1xuICAgICAgICAgICAgdG8uX2lzVVRDID0gZnJvbS5faXNVVEM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9vZmZzZXQpKSB7XG4gICAgICAgICAgICB0by5fb2Zmc2V0ID0gZnJvbS5fb2Zmc2V0O1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fcGYpKSB7XG4gICAgICAgICAgICB0by5fcGYgPSBnZXRQYXJzaW5nRmxhZ3MoZnJvbSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9sb2NhbGUpKSB7XG4gICAgICAgICAgICB0by5fbG9jYWxlID0gZnJvbS5fbG9jYWxlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1vbWVudFByb3BlcnRpZXNMZW4gPiAwKSB7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbW9tZW50UHJvcGVydGllc0xlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgcHJvcCA9IG1vbWVudFByb3BlcnRpZXNbaV07XG4gICAgICAgICAgICAgICAgdmFsID0gZnJvbVtwcm9wXTtcbiAgICAgICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKHZhbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9bcHJvcF0gPSB2YWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRvO1xuICAgIH1cblxuICAgIC8vIE1vbWVudCBwcm90b3R5cGUgb2JqZWN0XG4gICAgZnVuY3Rpb24gTW9tZW50KGNvbmZpZykge1xuICAgICAgICBjb3B5Q29uZmlnKHRoaXMsIGNvbmZpZyk7XG4gICAgICAgIHRoaXMuX2QgPSBuZXcgRGF0ZShjb25maWcuX2QgIT0gbnVsbCA/IGNvbmZpZy5fZC5nZXRUaW1lKCkgOiBOYU4pO1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICB0aGlzLl9kID0gbmV3IERhdGUoTmFOKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBQcmV2ZW50IGluZmluaXRlIGxvb3AgaW4gY2FzZSB1cGRhdGVPZmZzZXQgY3JlYXRlcyBuZXcgbW9tZW50XG4gICAgICAgIC8vIG9iamVjdHMuXG4gICAgICAgIGlmICh1cGRhdGVJblByb2dyZXNzID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdXBkYXRlSW5Qcm9ncmVzcyA9IHRydWU7XG4gICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcyk7XG4gICAgICAgICAgICB1cGRhdGVJblByb2dyZXNzID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc01vbWVudChvYmopIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIG9iaiBpbnN0YW5jZW9mIE1vbWVudCB8fCAob2JqICE9IG51bGwgJiYgb2JqLl9pc0FNb21lbnRPYmplY3QgIT0gbnVsbClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3YXJuKG1zZykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBob29rcy5zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZ3MgPT09IGZhbHNlICYmXG4gICAgICAgICAgICB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgIGNvbnNvbGUud2FyblxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignRGVwcmVjYXRpb24gd2FybmluZzogJyArIG1zZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZXByZWNhdGUobXNnLCBmbikge1xuICAgICAgICB2YXIgZmlyc3RUaW1lID0gdHJ1ZTtcblxuICAgICAgICByZXR1cm4gZXh0ZW5kKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChob29rcy5kZXByZWNhdGlvbkhhbmRsZXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlcihudWxsLCBtc2cpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZpcnN0VGltZSkge1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gW10sXG4gICAgICAgICAgICAgICAgICAgIGFyZyxcbiAgICAgICAgICAgICAgICAgICAgaSxcbiAgICAgICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgICAgICBhcmdMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBhcmdMZW47IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBhcmcgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbaV0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgKz0gJ1xcblsnICsgaSArICddICc7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGtleSBpbiBhcmd1bWVudHNbMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzT3duUHJvcChhcmd1bWVudHNbMF0sIGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnICs9IGtleSArICc6ICcgKyBhcmd1bWVudHNbMF1ba2V5XSArICcsICc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gYXJnLnNsaWNlKDAsIC0yKTsgLy8gUmVtb3ZlIHRyYWlsaW5nIGNvbW1hIGFuZCBzcGFjZVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaChhcmcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB3YXJuKFxuICAgICAgICAgICAgICAgICAgICBtc2cgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ1xcbkFyZ3VtZW50czogJyArXG4gICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmdzKS5qb2luKCcnKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgRXJyb3IoKS5zdGFja1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgZmlyc3RUaW1lID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfSwgZm4pO1xuICAgIH1cblxuICAgIHZhciBkZXByZWNhdGlvbnMgPSB7fTtcblxuICAgIGZ1bmN0aW9uIGRlcHJlY2F0ZVNpbXBsZShuYW1lLCBtc2cpIHtcbiAgICAgICAgaWYgKGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlciAhPSBudWxsKSB7XG4gICAgICAgICAgICBob29rcy5kZXByZWNhdGlvbkhhbmRsZXIobmFtZSwgbXNnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWRlcHJlY2F0aW9uc1tuYW1lXSkge1xuICAgICAgICAgICAgd2Fybihtc2cpO1xuICAgICAgICAgICAgZGVwcmVjYXRpb25zW25hbWVdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhvb2tzLnN1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5ncyA9IGZhbHNlO1xuICAgIGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlciA9IG51bGw7XG5cbiAgICBmdW5jdGlvbiBpc0Z1bmN0aW9uKGlucHV0KSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAodHlwZW9mIEZ1bmN0aW9uICE9PSAndW5kZWZpbmVkJyAmJiBpbnB1dCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB8fFxuICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldChjb25maWcpIHtcbiAgICAgICAgdmFyIHByb3AsIGk7XG4gICAgICAgIGZvciAoaSBpbiBjb25maWcpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGNvbmZpZywgaSkpIHtcbiAgICAgICAgICAgICAgICBwcm9wID0gY29uZmlnW2ldO1xuICAgICAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHByb3ApKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXNbaV0gPSBwcm9wO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXNbJ18nICsgaV0gPSBwcm9wO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jb25maWcgPSBjb25maWc7XG4gICAgICAgIC8vIExlbmllbnQgb3JkaW5hbCBwYXJzaW5nIGFjY2VwdHMganVzdCBhIG51bWJlciBpbiBhZGRpdGlvbiB0b1xuICAgICAgICAvLyBudW1iZXIgKyAocG9zc2libHkpIHN0dWZmIGNvbWluZyBmcm9tIF9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlLlxuICAgICAgICAvLyBUT0RPOiBSZW1vdmUgXCJvcmRpbmFsUGFyc2VcIiBmYWxsYmFjayBpbiBuZXh0IG1ham9yIHJlbGVhc2UuXG4gICAgICAgIHRoaXMuX2RheU9mTW9udGhPcmRpbmFsUGFyc2VMZW5pZW50ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICh0aGlzLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlLnNvdXJjZSB8fCB0aGlzLl9vcmRpbmFsUGFyc2Uuc291cmNlKSArXG4gICAgICAgICAgICAgICAgJ3wnICtcbiAgICAgICAgICAgICAgICAvXFxkezEsMn0vLnNvdXJjZVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1lcmdlQ29uZmlncyhwYXJlbnRDb25maWcsIGNoaWxkQ29uZmlnKSB7XG4gICAgICAgIHZhciByZXMgPSBleHRlbmQoe30sIHBhcmVudENvbmZpZyksXG4gICAgICAgICAgICBwcm9wO1xuICAgICAgICBmb3IgKHByb3AgaW4gY2hpbGRDb25maWcpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGNoaWxkQ29uZmlnLCBwcm9wKSkge1xuICAgICAgICAgICAgICAgIGlmIChpc09iamVjdChwYXJlbnRDb25maWdbcHJvcF0pICYmIGlzT2JqZWN0KGNoaWxkQ29uZmlnW3Byb3BdKSkge1xuICAgICAgICAgICAgICAgICAgICByZXNbcHJvcF0gPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgZXh0ZW5kKHJlc1twcm9wXSwgcGFyZW50Q29uZmlnW3Byb3BdKTtcbiAgICAgICAgICAgICAgICAgICAgZXh0ZW5kKHJlc1twcm9wXSwgY2hpbGRDb25maWdbcHJvcF0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hpbGRDb25maWdbcHJvcF0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXNbcHJvcF0gPSBjaGlsZENvbmZpZ1twcm9wXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcmVzW3Byb3BdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKHByb3AgaW4gcGFyZW50Q29uZmlnKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgaGFzT3duUHJvcChwYXJlbnRDb25maWcsIHByb3ApICYmXG4gICAgICAgICAgICAgICAgIWhhc093blByb3AoY2hpbGRDb25maWcsIHByb3ApICYmXG4gICAgICAgICAgICAgICAgaXNPYmplY3QocGFyZW50Q29uZmlnW3Byb3BdKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgLy8gbWFrZSBzdXJlIGNoYW5nZXMgdG8gcHJvcGVydGllcyBkb24ndCBtb2RpZnkgcGFyZW50IGNvbmZpZ1xuICAgICAgICAgICAgICAgIHJlc1twcm9wXSA9IGV4dGVuZCh7fSwgcmVzW3Byb3BdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIExvY2FsZShjb25maWcpIHtcbiAgICAgICAgaWYgKGNvbmZpZyAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLnNldChjb25maWcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGtleXM7XG5cbiAgICBpZiAoT2JqZWN0LmtleXMpIHtcbiAgICAgICAga2V5cyA9IE9iamVjdC5rZXlzO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGtleXMgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgICAgICByZXMgPSBbXTtcbiAgICAgICAgICAgIGZvciAoaSBpbiBvYmopIHtcbiAgICAgICAgICAgICAgICBpZiAoaGFzT3duUHJvcChvYmosIGkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcy5wdXNoKGkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRDYWxlbmRhciA9IHtcbiAgICAgICAgc2FtZURheTogJ1tUb2RheSBhdF0gTFQnLFxuICAgICAgICBuZXh0RGF5OiAnW1RvbW9ycm93IGF0XSBMVCcsXG4gICAgICAgIG5leHRXZWVrOiAnZGRkZCBbYXRdIExUJyxcbiAgICAgICAgbGFzdERheTogJ1tZZXN0ZXJkYXkgYXRdIExUJyxcbiAgICAgICAgbGFzdFdlZWs6ICdbTGFzdF0gZGRkZCBbYXRdIExUJyxcbiAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gY2FsZW5kYXIoa2V5LCBtb20sIG5vdykge1xuICAgICAgICB2YXIgb3V0cHV0ID0gdGhpcy5fY2FsZW5kYXJba2V5XSB8fCB0aGlzLl9jYWxlbmRhclsnc2FtZUVsc2UnXTtcbiAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24ob3V0cHV0KSA/IG91dHB1dC5jYWxsKG1vbSwgbm93KSA6IG91dHB1dDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB6ZXJvRmlsbChudW1iZXIsIHRhcmdldExlbmd0aCwgZm9yY2VTaWduKSB7XG4gICAgICAgIHZhciBhYnNOdW1iZXIgPSAnJyArIE1hdGguYWJzKG51bWJlciksXG4gICAgICAgICAgICB6ZXJvc1RvRmlsbCA9IHRhcmdldExlbmd0aCAtIGFic051bWJlci5sZW5ndGgsXG4gICAgICAgICAgICBzaWduID0gbnVtYmVyID49IDA7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAoc2lnbiA/IChmb3JjZVNpZ24gPyAnKycgOiAnJykgOiAnLScpICtcbiAgICAgICAgICAgIE1hdGgucG93KDEwLCBNYXRoLm1heCgwLCB6ZXJvc1RvRmlsbCkpLnRvU3RyaW5nKCkuc3Vic3RyKDEpICtcbiAgICAgICAgICAgIGFic051bWJlclxuICAgICAgICApO1xuICAgIH1cblxuICAgIHZhciBmb3JtYXR0aW5nVG9rZW5zID1cbiAgICAgICAgICAgIC8oXFxbW15cXFtdKlxcXSl8KFxcXFwpPyhbSGhdbW0oc3MpP3xNb3xNTT9NP00/fERvfERERG98REQ/RD9EP3xkZGQ/ZD98ZG8/fHdbb3x3XT98V1tvfFddP3xRbz98TnsxLDV9fFlZWVlZWXxZWVlZWXxZWVlZfFlZfHl7Miw0fXx5bz98Z2coZ2dnPyk/fEdHKEdHRz8pP3xlfEV8YXxBfGhoP3xISD98a2s/fG1tP3xzcz98U3sxLDl9fHh8WHx6ej98Wlo/fC4pL2csXG4gICAgICAgIGxvY2FsRm9ybWF0dGluZ1Rva2VucyA9IC8oXFxbW15cXFtdKlxcXSl8KFxcXFwpPyhMVFN8TFR8TEw/TD9MP3xsezEsNH0pL2csXG4gICAgICAgIGZvcm1hdEZ1bmN0aW9ucyA9IHt9LFxuICAgICAgICBmb3JtYXRUb2tlbkZ1bmN0aW9ucyA9IHt9O1xuXG4gICAgLy8gdG9rZW46ICAgICdNJ1xuICAgIC8vIHBhZGRlZDogICBbJ01NJywgMl1cbiAgICAvLyBvcmRpbmFsOiAgJ01vJ1xuICAgIC8vIGNhbGxiYWNrOiBmdW5jdGlvbiAoKSB7IHRoaXMubW9udGgoKSArIDEgfVxuICAgIGZ1bmN0aW9uIGFkZEZvcm1hdFRva2VuKHRva2VuLCBwYWRkZWQsIG9yZGluYWwsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBmdW5jID0gY2FsbGJhY2s7XG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBmdW5jID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzW2NhbGxiYWNrXSgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgICAgIGZvcm1hdFRva2VuRnVuY3Rpb25zW3Rva2VuXSA9IGZ1bmM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhZGRlZCkge1xuICAgICAgICAgICAgZm9ybWF0VG9rZW5GdW5jdGlvbnNbcGFkZGVkWzBdXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gemVyb0ZpbGwoZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpLCBwYWRkZWRbMV0sIHBhZGRlZFsyXSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcmRpbmFsKSB7XG4gICAgICAgICAgICBmb3JtYXRUb2tlbkZ1bmN0aW9uc1tvcmRpbmFsXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkub3JkaW5hbChcbiAgICAgICAgICAgICAgICAgICAgZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpLFxuICAgICAgICAgICAgICAgICAgICB0b2tlblxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVtb3ZlRm9ybWF0dGluZ1Rva2VucyhpbnB1dCkge1xuICAgICAgICBpZiAoaW5wdXQubWF0Y2goL1xcW1tcXHNcXFNdLykpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dC5yZXBsYWNlKC9eXFxbfFxcXSQvZywgJycpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnB1dC5yZXBsYWNlKC9cXFxcL2csICcnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYWtlRm9ybWF0RnVuY3Rpb24oZm9ybWF0KSB7XG4gICAgICAgIHZhciBhcnJheSA9IGZvcm1hdC5tYXRjaChmb3JtYXR0aW5nVG9rZW5zKSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBsZW5ndGg7XG5cbiAgICAgICAgZm9yIChpID0gMCwgbGVuZ3RoID0gYXJyYXkubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXRUb2tlbkZ1bmN0aW9uc1thcnJheVtpXV0pIHtcbiAgICAgICAgICAgICAgICBhcnJheVtpXSA9IGZvcm1hdFRva2VuRnVuY3Rpb25zW2FycmF5W2ldXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYXJyYXlbaV0gPSByZW1vdmVGb3JtYXR0aW5nVG9rZW5zKGFycmF5W2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAobW9tKSB7XG4gICAgICAgICAgICB2YXIgb3V0cHV0ID0gJycsXG4gICAgICAgICAgICAgICAgaTtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIG91dHB1dCArPSBpc0Z1bmN0aW9uKGFycmF5W2ldKVxuICAgICAgICAgICAgICAgICAgICA/IGFycmF5W2ldLmNhbGwobW9tLCBmb3JtYXQpXG4gICAgICAgICAgICAgICAgICAgIDogYXJyYXlbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIGZvcm1hdCBkYXRlIHVzaW5nIG5hdGl2ZSBkYXRlIG9iamVjdFxuICAgIGZ1bmN0aW9uIGZvcm1hdE1vbWVudChtLCBmb3JtYXQpIHtcbiAgICAgICAgaWYgKCFtLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIG0ubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3JtYXQgPSBleHBhbmRGb3JtYXQoZm9ybWF0LCBtLmxvY2FsZURhdGEoKSk7XG4gICAgICAgIGZvcm1hdEZ1bmN0aW9uc1tmb3JtYXRdID1cbiAgICAgICAgICAgIGZvcm1hdEZ1bmN0aW9uc1tmb3JtYXRdIHx8IG1ha2VGb3JtYXRGdW5jdGlvbihmb3JtYXQpO1xuXG4gICAgICAgIHJldHVybiBmb3JtYXRGdW5jdGlvbnNbZm9ybWF0XShtKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBleHBhbmRGb3JtYXQoZm9ybWF0LCBsb2NhbGUpIHtcbiAgICAgICAgdmFyIGkgPSA1O1xuXG4gICAgICAgIGZ1bmN0aW9uIHJlcGxhY2VMb25nRGF0ZUZvcm1hdFRva2VucyhpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsZS5sb25nRGF0ZUZvcm1hdChpbnB1dCkgfHwgaW5wdXQ7XG4gICAgICAgIH1cblxuICAgICAgICBsb2NhbEZvcm1hdHRpbmdUb2tlbnMubGFzdEluZGV4ID0gMDtcbiAgICAgICAgd2hpbGUgKGkgPj0gMCAmJiBsb2NhbEZvcm1hdHRpbmdUb2tlbnMudGVzdChmb3JtYXQpKSB7XG4gICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZShcbiAgICAgICAgICAgICAgICBsb2NhbEZvcm1hdHRpbmdUb2tlbnMsXG4gICAgICAgICAgICAgICAgcmVwbGFjZUxvbmdEYXRlRm9ybWF0VG9rZW5zXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbG9jYWxGb3JtYXR0aW5nVG9rZW5zLmxhc3RJbmRleCA9IDA7XG4gICAgICAgICAgICBpIC09IDE7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZm9ybWF0O1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0TG9uZ0RhdGVGb3JtYXQgPSB7XG4gICAgICAgIExUUzogJ2g6bW06c3MgQScsXG4gICAgICAgIExUOiAnaDptbSBBJyxcbiAgICAgICAgTDogJ01NL0REL1lZWVknLFxuICAgICAgICBMTDogJ01NTU0gRCwgWVlZWScsXG4gICAgICAgIExMTDogJ01NTU0gRCwgWVlZWSBoOm1tIEEnLFxuICAgICAgICBMTExMOiAnZGRkZCwgTU1NTSBELCBZWVlZIGg6bW0gQScsXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGxvbmdEYXRlRm9ybWF0KGtleSkge1xuICAgICAgICB2YXIgZm9ybWF0ID0gdGhpcy5fbG9uZ0RhdGVGb3JtYXRba2V5XSxcbiAgICAgICAgICAgIGZvcm1hdFVwcGVyID0gdGhpcy5fbG9uZ0RhdGVGb3JtYXRba2V5LnRvVXBwZXJDYXNlKCldO1xuXG4gICAgICAgIGlmIChmb3JtYXQgfHwgIWZvcm1hdFVwcGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbG9uZ0RhdGVGb3JtYXRba2V5XSA9IGZvcm1hdFVwcGVyXG4gICAgICAgICAgICAubWF0Y2goZm9ybWF0dGluZ1Rva2VucylcbiAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKHRvaykge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgdG9rID09PSAnTU1NTScgfHxcbiAgICAgICAgICAgICAgICAgICAgdG9rID09PSAnTU0nIHx8XG4gICAgICAgICAgICAgICAgICAgIHRvayA9PT0gJ0REJyB8fFxuICAgICAgICAgICAgICAgICAgICB0b2sgPT09ICdkZGRkJ1xuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9rLnNsaWNlKDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdG9rO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5qb2luKCcnKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5fbG9uZ0RhdGVGb3JtYXRba2V5XTtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdEludmFsaWREYXRlID0gJ0ludmFsaWQgZGF0ZSc7XG5cbiAgICBmdW5jdGlvbiBpbnZhbGlkRGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ludmFsaWREYXRlO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0T3JkaW5hbCA9ICclZCcsXG4gICAgICAgIGRlZmF1bHREYXlPZk1vbnRoT3JkaW5hbFBhcnNlID0gL1xcZHsxLDJ9LztcblxuICAgIGZ1bmN0aW9uIG9yZGluYWwobnVtYmVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9vcmRpbmFsLnJlcGxhY2UoJyVkJywgbnVtYmVyKTtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdFJlbGF0aXZlVGltZSA9IHtcbiAgICAgICAgZnV0dXJlOiAnaW4gJXMnLFxuICAgICAgICBwYXN0OiAnJXMgYWdvJyxcbiAgICAgICAgczogJ2EgZmV3IHNlY29uZHMnLFxuICAgICAgICBzczogJyVkIHNlY29uZHMnLFxuICAgICAgICBtOiAnYSBtaW51dGUnLFxuICAgICAgICBtbTogJyVkIG1pbnV0ZXMnLFxuICAgICAgICBoOiAnYW4gaG91cicsXG4gICAgICAgIGhoOiAnJWQgaG91cnMnLFxuICAgICAgICBkOiAnYSBkYXknLFxuICAgICAgICBkZDogJyVkIGRheXMnLFxuICAgICAgICB3OiAnYSB3ZWVrJyxcbiAgICAgICAgd3c6ICclZCB3ZWVrcycsXG4gICAgICAgIE06ICdhIG1vbnRoJyxcbiAgICAgICAgTU06ICclZCBtb250aHMnLFxuICAgICAgICB5OiAnYSB5ZWFyJyxcbiAgICAgICAgeXk6ICclZCB5ZWFycycsXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIHJlbGF0aXZlVGltZShudW1iZXIsIHdpdGhvdXRTdWZmaXgsIHN0cmluZywgaXNGdXR1cmUpIHtcbiAgICAgICAgdmFyIG91dHB1dCA9IHRoaXMuX3JlbGF0aXZlVGltZVtzdHJpbmddO1xuICAgICAgICByZXR1cm4gaXNGdW5jdGlvbihvdXRwdXQpXG4gICAgICAgICAgICA/IG91dHB1dChudW1iZXIsIHdpdGhvdXRTdWZmaXgsIHN0cmluZywgaXNGdXR1cmUpXG4gICAgICAgICAgICA6IG91dHB1dC5yZXBsYWNlKC8lZC9pLCBudW1iZXIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhc3RGdXR1cmUoZGlmZiwgb3V0cHV0KSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSB0aGlzLl9yZWxhdGl2ZVRpbWVbZGlmZiA+IDAgPyAnZnV0dXJlJyA6ICdwYXN0J107XG4gICAgICAgIHJldHVybiBpc0Z1bmN0aW9uKGZvcm1hdCkgPyBmb3JtYXQob3V0cHV0KSA6IGZvcm1hdC5yZXBsYWNlKC8lcy9pLCBvdXRwdXQpO1xuICAgIH1cblxuICAgIHZhciBhbGlhc2VzID0ge1xuICAgICAgICBEOiAnZGF0ZScsXG4gICAgICAgIGRhdGVzOiAnZGF0ZScsXG4gICAgICAgIGRhdGU6ICdkYXRlJyxcbiAgICAgICAgZDogJ2RheScsXG4gICAgICAgIGRheXM6ICdkYXknLFxuICAgICAgICBkYXk6ICdkYXknLFxuICAgICAgICBlOiAnd2Vla2RheScsXG4gICAgICAgIHdlZWtkYXlzOiAnd2Vla2RheScsXG4gICAgICAgIHdlZWtkYXk6ICd3ZWVrZGF5JyxcbiAgICAgICAgRTogJ2lzb1dlZWtkYXknLFxuICAgICAgICBpc293ZWVrZGF5czogJ2lzb1dlZWtkYXknLFxuICAgICAgICBpc293ZWVrZGF5OiAnaXNvV2Vla2RheScsXG4gICAgICAgIERERDogJ2RheU9mWWVhcicsXG4gICAgICAgIGRheW9meWVhcnM6ICdkYXlPZlllYXInLFxuICAgICAgICBkYXlvZnllYXI6ICdkYXlPZlllYXInLFxuICAgICAgICBoOiAnaG91cicsXG4gICAgICAgIGhvdXJzOiAnaG91cicsXG4gICAgICAgIGhvdXI6ICdob3VyJyxcbiAgICAgICAgbXM6ICdtaWxsaXNlY29uZCcsXG4gICAgICAgIG1pbGxpc2Vjb25kczogJ21pbGxpc2Vjb25kJyxcbiAgICAgICAgbWlsbGlzZWNvbmQ6ICdtaWxsaXNlY29uZCcsXG4gICAgICAgIG06ICdtaW51dGUnLFxuICAgICAgICBtaW51dGVzOiAnbWludXRlJyxcbiAgICAgICAgbWludXRlOiAnbWludXRlJyxcbiAgICAgICAgTTogJ21vbnRoJyxcbiAgICAgICAgbW9udGhzOiAnbW9udGgnLFxuICAgICAgICBtb250aDogJ21vbnRoJyxcbiAgICAgICAgUTogJ3F1YXJ0ZXInLFxuICAgICAgICBxdWFydGVyczogJ3F1YXJ0ZXInLFxuICAgICAgICBxdWFydGVyOiAncXVhcnRlcicsXG4gICAgICAgIHM6ICdzZWNvbmQnLFxuICAgICAgICBzZWNvbmRzOiAnc2Vjb25kJyxcbiAgICAgICAgc2Vjb25kOiAnc2Vjb25kJyxcbiAgICAgICAgZ2c6ICd3ZWVrWWVhcicsXG4gICAgICAgIHdlZWt5ZWFyczogJ3dlZWtZZWFyJyxcbiAgICAgICAgd2Vla3llYXI6ICd3ZWVrWWVhcicsXG4gICAgICAgIEdHOiAnaXNvV2Vla1llYXInLFxuICAgICAgICBpc293ZWVreWVhcnM6ICdpc29XZWVrWWVhcicsXG4gICAgICAgIGlzb3dlZWt5ZWFyOiAnaXNvV2Vla1llYXInLFxuICAgICAgICB3OiAnd2VlaycsXG4gICAgICAgIHdlZWtzOiAnd2VlaycsXG4gICAgICAgIHdlZWs6ICd3ZWVrJyxcbiAgICAgICAgVzogJ2lzb1dlZWsnLFxuICAgICAgICBpc293ZWVrczogJ2lzb1dlZWsnLFxuICAgICAgICBpc293ZWVrOiAnaXNvV2VlaycsXG4gICAgICAgIHk6ICd5ZWFyJyxcbiAgICAgICAgeWVhcnM6ICd5ZWFyJyxcbiAgICAgICAgeWVhcjogJ3llYXInLFxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBub3JtYWxpemVVbml0cyh1bml0cykge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHVuaXRzID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgPyBhbGlhc2VzW3VuaXRzXSB8fCBhbGlhc2VzW3VuaXRzLnRvTG93ZXJDYXNlKCldXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBub3JtYWxpemVPYmplY3RVbml0cyhpbnB1dE9iamVjdCkge1xuICAgICAgICB2YXIgbm9ybWFsaXplZElucHV0ID0ge30sXG4gICAgICAgICAgICBub3JtYWxpemVkUHJvcCxcbiAgICAgICAgICAgIHByb3A7XG5cbiAgICAgICAgZm9yIChwcm9wIGluIGlucHV0T2JqZWN0KSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duUHJvcChpbnB1dE9iamVjdCwgcHJvcCkpIHtcbiAgICAgICAgICAgICAgICBub3JtYWxpemVkUHJvcCA9IG5vcm1hbGl6ZVVuaXRzKHByb3ApO1xuICAgICAgICAgICAgICAgIGlmIChub3JtYWxpemVkUHJvcCkge1xuICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkSW5wdXRbbm9ybWFsaXplZFByb3BdID0gaW5wdXRPYmplY3RbcHJvcF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWRJbnB1dDtcbiAgICB9XG5cbiAgICB2YXIgcHJpb3JpdGllcyA9IHtcbiAgICAgICAgZGF0ZTogOSxcbiAgICAgICAgZGF5OiAxMSxcbiAgICAgICAgd2Vla2RheTogMTEsXG4gICAgICAgIGlzb1dlZWtkYXk6IDExLFxuICAgICAgICBkYXlPZlllYXI6IDQsXG4gICAgICAgIGhvdXI6IDEzLFxuICAgICAgICBtaWxsaXNlY29uZDogMTYsXG4gICAgICAgIG1pbnV0ZTogMTQsXG4gICAgICAgIG1vbnRoOiA4LFxuICAgICAgICBxdWFydGVyOiA3LFxuICAgICAgICBzZWNvbmQ6IDE1LFxuICAgICAgICB3ZWVrWWVhcjogMSxcbiAgICAgICAgaXNvV2Vla1llYXI6IDEsXG4gICAgICAgIHdlZWs6IDUsXG4gICAgICAgIGlzb1dlZWs6IDUsXG4gICAgICAgIHllYXI6IDEsXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGdldFByaW9yaXRpemVkVW5pdHModW5pdHNPYmopIHtcbiAgICAgICAgdmFyIHVuaXRzID0gW10sXG4gICAgICAgICAgICB1O1xuICAgICAgICBmb3IgKHUgaW4gdW5pdHNPYmopIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKHVuaXRzT2JqLCB1KSkge1xuICAgICAgICAgICAgICAgIHVuaXRzLnB1c2goeyB1bml0OiB1LCBwcmlvcml0eTogcHJpb3JpdGllc1t1XSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB1bml0cy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICByZXR1cm4gYS5wcmlvcml0eSAtIGIucHJpb3JpdHk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdW5pdHM7XG4gICAgfVxuXG4gICAgdmFyIG1hdGNoMSA9IC9cXGQvLCAvLyAgICAgICAwIC0gOVxuICAgICAgICBtYXRjaDIgPSAvXFxkXFxkLywgLy8gICAgICAwMCAtIDk5XG4gICAgICAgIG1hdGNoMyA9IC9cXGR7M30vLCAvLyAgICAgMDAwIC0gOTk5XG4gICAgICAgIG1hdGNoNCA9IC9cXGR7NH0vLCAvLyAgICAwMDAwIC0gOTk5OVxuICAgICAgICBtYXRjaDYgPSAvWystXT9cXGR7Nn0vLCAvLyAtOTk5OTk5IC0gOTk5OTk5XG4gICAgICAgIG1hdGNoMXRvMiA9IC9cXGRcXGQ/LywgLy8gICAgICAgMCAtIDk5XG4gICAgICAgIG1hdGNoM3RvNCA9IC9cXGRcXGRcXGRcXGQ/LywgLy8gICAgIDk5OSAtIDk5OTlcbiAgICAgICAgbWF0Y2g1dG82ID0gL1xcZFxcZFxcZFxcZFxcZFxcZD8vLCAvLyAgIDk5OTk5IC0gOTk5OTk5XG4gICAgICAgIG1hdGNoMXRvMyA9IC9cXGR7MSwzfS8sIC8vICAgICAgIDAgLSA5OTlcbiAgICAgICAgbWF0Y2gxdG80ID0gL1xcZHsxLDR9LywgLy8gICAgICAgMCAtIDk5OTlcbiAgICAgICAgbWF0Y2gxdG82ID0gL1srLV0/XFxkezEsNn0vLCAvLyAtOTk5OTk5IC0gOTk5OTk5XG4gICAgICAgIG1hdGNoVW5zaWduZWQgPSAvXFxkKy8sIC8vICAgICAgIDAgLSBpbmZcbiAgICAgICAgbWF0Y2hTaWduZWQgPSAvWystXT9cXGQrLywgLy8gICAgLWluZiAtIGluZlxuICAgICAgICBtYXRjaE9mZnNldCA9IC9afFsrLV1cXGRcXGQ6P1xcZFxcZC9naSwgLy8gKzAwOjAwIC0wMDowMCArMDAwMCAtMDAwMCBvciBaXG4gICAgICAgIG1hdGNoU2hvcnRPZmZzZXQgPSAvWnxbKy1dXFxkXFxkKD86Oj9cXGRcXGQpPy9naSwgLy8gKzAwIC0wMCArMDA6MDAgLTAwOjAwICswMDAwIC0wMDAwIG9yIFpcbiAgICAgICAgbWF0Y2hUaW1lc3RhbXAgPSAvWystXT9cXGQrKFxcLlxcZHsxLDN9KT8vLCAvLyAxMjM0NTY3ODkgMTIzNDU2Nzg5LjEyM1xuICAgICAgICAvLyBhbnkgd29yZCAob3IgdHdvKSBjaGFyYWN0ZXJzIG9yIG51bWJlcnMgaW5jbHVkaW5nIHR3by90aHJlZSB3b3JkIG1vbnRoIGluIGFyYWJpYy5cbiAgICAgICAgLy8gaW5jbHVkZXMgc2NvdHRpc2ggZ2FlbGljIHR3byB3b3JkIGFuZCBoeXBoZW5hdGVkIG1vbnRoc1xuICAgICAgICBtYXRjaFdvcmQgPVxuICAgICAgICAgICAgL1swLTldezAsMjU2fVsnYS16XFx1MDBBMC1cXHUwNUZGXFx1MDcwMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRjA3XFx1RkYxMC1cXHVGRkVGXXsxLDI1Nn18W1xcdTA2MDAtXFx1MDZGRlxcL117MSwyNTZ9KFxccyo/W1xcdTA2MDAtXFx1MDZGRl17MSwyNTZ9KXsxLDJ9L2ksXG4gICAgICAgIG1hdGNoMXRvMk5vTGVhZGluZ1plcm8gPSAvXlsxLTldXFxkPy8sIC8vICAgICAgICAgMS05OVxuICAgICAgICBtYXRjaDF0bzJIYXNaZXJvID0gL14oWzEtOV1cXGR8XFxkKS8sIC8vICAgICAgICAgICAwLTk5XG4gICAgICAgIHJlZ2V4ZXM7XG5cbiAgICByZWdleGVzID0ge307XG5cbiAgICBmdW5jdGlvbiBhZGRSZWdleFRva2VuKHRva2VuLCByZWdleCwgc3RyaWN0UmVnZXgpIHtcbiAgICAgICAgcmVnZXhlc1t0b2tlbl0gPSBpc0Z1bmN0aW9uKHJlZ2V4KVxuICAgICAgICAgICAgPyByZWdleFxuICAgICAgICAgICAgOiBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZURhdGEpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBpc1N0cmljdCAmJiBzdHJpY3RSZWdleCA/IHN0cmljdFJlZ2V4IDogcmVnZXg7XG4gICAgICAgICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0UGFyc2VSZWdleEZvclRva2VuKHRva2VuLCBjb25maWcpIHtcbiAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHJlZ2V4ZXMsIHRva2VuKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAodW5lc2NhcGVGb3JtYXQodG9rZW4pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZWdleGVzW3Rva2VuXShjb25maWcuX3N0cmljdCwgY29uZmlnLl9sb2NhbGUpO1xuICAgIH1cblxuICAgIC8vIENvZGUgZnJvbSBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzM1NjE0OTMvaXMtdGhlcmUtYS1yZWdleHAtZXNjYXBlLWZ1bmN0aW9uLWluLWphdmFzY3JpcHRcbiAgICBmdW5jdGlvbiB1bmVzY2FwZUZvcm1hdChzKSB7XG4gICAgICAgIHJldHVybiByZWdleEVzY2FwZShcbiAgICAgICAgICAgIHNcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgnXFxcXCcsICcnKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKFxuICAgICAgICAgICAgICAgICAgICAvXFxcXChcXFspfFxcXFwoXFxdKXxcXFsoW15cXF1cXFtdKilcXF18XFxcXCguKS9nLFxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAobWF0Y2hlZCwgcDEsIHAyLCBwMywgcDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwMSB8fCBwMiB8fCBwMyB8fCBwNDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWdleEVzY2FwZShzKSB7XG4gICAgICAgIHJldHVybiBzLnJlcGxhY2UoL1stXFwvXFxcXF4kKis/LigpfFtcXF17fV0vZywgJ1xcXFwkJicpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFic0Zsb29yKG51bWJlcikge1xuICAgICAgICBpZiAobnVtYmVyIDwgMCkge1xuICAgICAgICAgICAgLy8gLTAgLT4gMFxuICAgICAgICAgICAgcmV0dXJuIE1hdGguY2VpbChudW1iZXIpIHx8IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihudW1iZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9JbnQoYXJndW1lbnRGb3JDb2VyY2lvbikge1xuICAgICAgICB2YXIgY29lcmNlZE51bWJlciA9ICthcmd1bWVudEZvckNvZXJjaW9uLFxuICAgICAgICAgICAgdmFsdWUgPSAwO1xuXG4gICAgICAgIGlmIChjb2VyY2VkTnVtYmVyICE9PSAwICYmIGlzRmluaXRlKGNvZXJjZWROdW1iZXIpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IGFic0Zsb29yKGNvZXJjZWROdW1iZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHZhciB0b2tlbnMgPSB7fTtcblxuICAgIGZ1bmN0aW9uIGFkZFBhcnNlVG9rZW4odG9rZW4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgZnVuYyA9IGNhbGxiYWNrLFxuICAgICAgICAgICAgdG9rZW5MZW47XG4gICAgICAgIGlmICh0eXBlb2YgdG9rZW4gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0b2tlbiA9IFt0b2tlbl07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzTnVtYmVyKGNhbGxiYWNrKSkge1xuICAgICAgICAgICAgZnVuYyA9IGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgICAgICAgICBhcnJheVtjYWxsYmFja10gPSB0b0ludChpbnB1dCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHRva2VuTGVuID0gdG9rZW4ubGVuZ3RoO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdG9rZW5MZW47IGkrKykge1xuICAgICAgICAgICAgdG9rZW5zW3Rva2VuW2ldXSA9IGZ1bmM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhZGRXZWVrUGFyc2VUb2tlbih0b2tlbiwgY2FsbGJhY2spIHtcbiAgICAgICAgYWRkUGFyc2VUb2tlbih0b2tlbiwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnLCB0b2tlbikge1xuICAgICAgICAgICAgY29uZmlnLl93ID0gY29uZmlnLl93IHx8IHt9O1xuICAgICAgICAgICAgY2FsbGJhY2soaW5wdXQsIGNvbmZpZy5fdywgY29uZmlnLCB0b2tlbik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZFRpbWVUb0FycmF5RnJvbVRva2VuKHRva2VuLCBpbnB1dCwgY29uZmlnKSB7XG4gICAgICAgIGlmIChpbnB1dCAhPSBudWxsICYmIGhhc093blByb3AodG9rZW5zLCB0b2tlbikpIHtcbiAgICAgICAgICAgIHRva2Vuc1t0b2tlbl0oaW5wdXQsIGNvbmZpZy5fYSwgY29uZmlnLCB0b2tlbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0xlYXBZZWFyKHllYXIpIHtcbiAgICAgICAgcmV0dXJuICh5ZWFyICUgNCA9PT0gMCAmJiB5ZWFyICUgMTAwICE9PSAwKSB8fCB5ZWFyICUgNDAwID09PSAwO1xuICAgIH1cblxuICAgIHZhciBZRUFSID0gMCxcbiAgICAgICAgTU9OVEggPSAxLFxuICAgICAgICBEQVRFID0gMixcbiAgICAgICAgSE9VUiA9IDMsXG4gICAgICAgIE1JTlVURSA9IDQsXG4gICAgICAgIFNFQ09ORCA9IDUsXG4gICAgICAgIE1JTExJU0VDT05EID0gNixcbiAgICAgICAgV0VFSyA9IDcsXG4gICAgICAgIFdFRUtEQVkgPSA4O1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1knLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB5ID0gdGhpcy55ZWFyKCk7XG4gICAgICAgIHJldHVybiB5IDw9IDk5OTkgPyB6ZXJvRmlsbCh5LCA0KSA6ICcrJyArIHk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1lZJywgMl0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMueWVhcigpICUgMTAwO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydZWVlZJywgNF0sIDAsICd5ZWFyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydZWVlZWScsIDVdLCAwLCAneWVhcicpO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnWVlZWVlZJywgNiwgdHJ1ZV0sIDAsICd5ZWFyJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdZJywgbWF0Y2hTaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1lZJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1lZWVknLCBtYXRjaDF0bzQsIG1hdGNoNCk7XG4gICAgYWRkUmVnZXhUb2tlbignWVlZWVknLCBtYXRjaDF0bzYsIG1hdGNoNik7XG4gICAgYWRkUmVnZXhUb2tlbignWVlZWVlZJywgbWF0Y2gxdG82LCBtYXRjaDYpO1xuXG4gICAgYWRkUGFyc2VUb2tlbihbJ1lZWVlZJywgJ1lZWVlZWSddLCBZRUFSKTtcbiAgICBhZGRQYXJzZVRva2VuKCdZWVlZJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgICAgICBhcnJheVtZRUFSXSA9XG4gICAgICAgICAgICBpbnB1dC5sZW5ndGggPT09IDIgPyBob29rcy5wYXJzZVR3b0RpZ2l0WWVhcihpbnB1dCkgOiB0b0ludChpbnB1dCk7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignWVknLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W1lFQVJdID0gaG9va3MucGFyc2VUd29EaWdpdFllYXIoaW5wdXQpO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ1knLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W1lFQVJdID0gcGFyc2VJbnQoaW5wdXQsIDEwKTtcbiAgICB9KTtcblxuICAgIC8vIEhFTFBFUlNcblxuICAgIGZ1bmN0aW9uIGRheXNJblllYXIoeWVhcikge1xuICAgICAgICByZXR1cm4gaXNMZWFwWWVhcih5ZWFyKSA/IDM2NiA6IDM2NTtcbiAgICB9XG5cbiAgICAvLyBIT09LU1xuXG4gICAgaG9va3MucGFyc2VUd29EaWdpdFllYXIgPSBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIHRvSW50KGlucHV0KSArICh0b0ludChpbnB1dCkgPiA2OCA/IDE5MDAgOiAyMDAwKTtcbiAgICB9O1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgdmFyIGdldFNldFllYXIgPSBtYWtlR2V0U2V0KCdGdWxsWWVhcicsIHRydWUpO1xuXG4gICAgZnVuY3Rpb24gZ2V0SXNMZWFwWWVhcigpIHtcbiAgICAgICAgcmV0dXJuIGlzTGVhcFllYXIodGhpcy55ZWFyKCkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VHZXRTZXQodW5pdCwga2VlcFRpbWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBzZXQkMSh0aGlzLCB1bml0LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHRoaXMsIGtlZXBUaW1lKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldCh0aGlzLCB1bml0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXQobW9tLCB1bml0KSB7XG4gICAgICAgIGlmICghbW9tLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBkID0gbW9tLl9kLFxuICAgICAgICAgICAgaXNVVEMgPSBtb20uX2lzVVRDO1xuXG4gICAgICAgIHN3aXRjaCAodW5pdCkge1xuICAgICAgICAgICAgY2FzZSAnTWlsbGlzZWNvbmRzJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNVVEMgPyBkLmdldFVUQ01pbGxpc2Vjb25kcygpIDogZC5nZXRNaWxsaXNlY29uZHMoKTtcbiAgICAgICAgICAgIGNhc2UgJ1NlY29uZHMnOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc1VUQyA/IGQuZ2V0VVRDU2Vjb25kcygpIDogZC5nZXRTZWNvbmRzKCk7XG4gICAgICAgICAgICBjYXNlICdNaW51dGVzJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNVVEMgPyBkLmdldFVUQ01pbnV0ZXMoKSA6IGQuZ2V0TWludXRlcygpO1xuICAgICAgICAgICAgY2FzZSAnSG91cnMnOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc1VUQyA/IGQuZ2V0VVRDSG91cnMoKSA6IGQuZ2V0SG91cnMoKTtcbiAgICAgICAgICAgIGNhc2UgJ0RhdGUnOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc1VUQyA/IGQuZ2V0VVRDRGF0ZSgpIDogZC5nZXREYXRlKCk7XG4gICAgICAgICAgICBjYXNlICdEYXknOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc1VUQyA/IGQuZ2V0VVRDRGF5KCkgOiBkLmdldERheSgpO1xuICAgICAgICAgICAgY2FzZSAnTW9udGgnOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc1VUQyA/IGQuZ2V0VVRDTW9udGgoKSA6IGQuZ2V0TW9udGgoKTtcbiAgICAgICAgICAgIGNhc2UgJ0Z1bGxZZWFyJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNVVEMgPyBkLmdldFVUQ0Z1bGxZZWFyKCkgOiBkLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBOYU47IC8vIEp1c3QgaW4gY2FzZVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0JDEobW9tLCB1bml0LCB2YWx1ZSkge1xuICAgICAgICB2YXIgZCwgaXNVVEMsIHllYXIsIG1vbnRoLCBkYXRlO1xuXG4gICAgICAgIGlmICghbW9tLmlzVmFsaWQoKSB8fCBpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGQgPSBtb20uX2Q7XG4gICAgICAgIGlzVVRDID0gbW9tLl9pc1VUQztcblxuICAgICAgICBzd2l0Y2ggKHVuaXQpIHtcbiAgICAgICAgICAgIGNhc2UgJ01pbGxpc2Vjb25kcyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZvaWQgKGlzVVRDXG4gICAgICAgICAgICAgICAgICAgID8gZC5zZXRVVENNaWxsaXNlY29uZHModmFsdWUpXG4gICAgICAgICAgICAgICAgICAgIDogZC5zZXRNaWxsaXNlY29uZHModmFsdWUpKTtcbiAgICAgICAgICAgIGNhc2UgJ1NlY29uZHMnOlxuICAgICAgICAgICAgICAgIHJldHVybiB2b2lkIChpc1VUQyA/IGQuc2V0VVRDU2Vjb25kcyh2YWx1ZSkgOiBkLnNldFNlY29uZHModmFsdWUpKTtcbiAgICAgICAgICAgIGNhc2UgJ01pbnV0ZXMnOlxuICAgICAgICAgICAgICAgIHJldHVybiB2b2lkIChpc1VUQyA/IGQuc2V0VVRDTWludXRlcyh2YWx1ZSkgOiBkLnNldE1pbnV0ZXModmFsdWUpKTtcbiAgICAgICAgICAgIGNhc2UgJ0hvdXJzJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdm9pZCAoaXNVVEMgPyBkLnNldFVUQ0hvdXJzKHZhbHVlKSA6IGQuc2V0SG91cnModmFsdWUpKTtcbiAgICAgICAgICAgIGNhc2UgJ0RhdGUnOlxuICAgICAgICAgICAgICAgIHJldHVybiB2b2lkIChpc1VUQyA/IGQuc2V0VVRDRGF0ZSh2YWx1ZSkgOiBkLnNldERhdGUodmFsdWUpKTtcbiAgICAgICAgICAgIC8vIGNhc2UgJ0RheSc6IC8vIE5vdCByZWFsXG4gICAgICAgICAgICAvLyAgICByZXR1cm4gdm9pZCAoaXNVVEMgPyBkLnNldFVUQ0RheSh2YWx1ZSkgOiBkLnNldERheSh2YWx1ZSkpO1xuICAgICAgICAgICAgLy8gY2FzZSAnTW9udGgnOiAvLyBOb3QgdXNlZCBiZWNhdXNlIHdlIG5lZWQgdG8gcGFzcyB0d28gdmFyaWFibGVzXG4gICAgICAgICAgICAvLyAgICAgcmV0dXJuIHZvaWQgKGlzVVRDID8gZC5zZXRVVENNb250aCh2YWx1ZSkgOiBkLnNldE1vbnRoKHZhbHVlKSk7XG4gICAgICAgICAgICBjYXNlICdGdWxsWWVhcic6XG4gICAgICAgICAgICAgICAgYnJlYWs7IC8vIFNlZSBiZWxvdyAuLi5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBKdXN0IGluIGNhc2VcbiAgICAgICAgfVxuXG4gICAgICAgIHllYXIgPSB2YWx1ZTtcbiAgICAgICAgbW9udGggPSBtb20ubW9udGgoKTtcbiAgICAgICAgZGF0ZSA9IG1vbS5kYXRlKCk7XG4gICAgICAgIGRhdGUgPSBkYXRlID09PSAyOSAmJiBtb250aCA9PT0gMSAmJiAhaXNMZWFwWWVhcih5ZWFyKSA/IDI4IDogZGF0ZTtcbiAgICAgICAgdm9pZCAoaXNVVENcbiAgICAgICAgICAgID8gZC5zZXRVVENGdWxsWWVhcih5ZWFyLCBtb250aCwgZGF0ZSlcbiAgICAgICAgICAgIDogZC5zZXRGdWxsWWVhcih5ZWFyLCBtb250aCwgZGF0ZSkpO1xuICAgIH1cblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIHN0cmluZ0dldCh1bml0cykge1xuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24odGhpc1t1bml0c10pKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpc1t1bml0c10oKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzdHJpbmdTZXQodW5pdHMsIHZhbHVlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdW5pdHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZU9iamVjdFVuaXRzKHVuaXRzKTtcbiAgICAgICAgICAgIHZhciBwcmlvcml0aXplZCA9IGdldFByaW9yaXRpemVkVW5pdHModW5pdHMpLFxuICAgICAgICAgICAgICAgIGksXG4gICAgICAgICAgICAgICAgcHJpb3JpdGl6ZWRMZW4gPSBwcmlvcml0aXplZC5sZW5ndGg7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcHJpb3JpdGl6ZWRMZW47IGkrKykge1xuICAgICAgICAgICAgICAgIHRoaXNbcHJpb3JpdGl6ZWRbaV0udW5pdF0odW5pdHNbcHJpb3JpdGl6ZWRbaV0udW5pdF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG4gICAgICAgICAgICBpZiAoaXNGdW5jdGlvbih0aGlzW3VuaXRzXSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpc1t1bml0c10odmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vZChuLCB4KSB7XG4gICAgICAgIHJldHVybiAoKG4gJSB4KSArIHgpICUgeDtcbiAgICB9XG5cbiAgICB2YXIgaW5kZXhPZjtcblxuICAgIGlmIChBcnJheS5wcm90b3R5cGUuaW5kZXhPZikge1xuICAgICAgICBpbmRleE9mID0gQXJyYXkucHJvdG90eXBlLmluZGV4T2Y7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaW5kZXhPZiA9IGZ1bmN0aW9uIChvKSB7XG4gICAgICAgICAgICAvLyBJIGtub3dcbiAgICAgICAgICAgIHZhciBpO1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpc1tpXSA9PT0gbykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGF5c0luTW9udGgoeWVhciwgbW9udGgpIHtcbiAgICAgICAgaWYgKGlzTmFOKHllYXIpIHx8IGlzTmFOKG1vbnRoKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbW9kTW9udGggPSBtb2QobW9udGgsIDEyKTtcbiAgICAgICAgeWVhciArPSAobW9udGggLSBtb2RNb250aCkgLyAxMjtcbiAgICAgICAgcmV0dXJuIG1vZE1vbnRoID09PSAxXG4gICAgICAgICAgICA/IGlzTGVhcFllYXIoeWVhcilcbiAgICAgICAgICAgICAgICA/IDI5XG4gICAgICAgICAgICAgICAgOiAyOFxuICAgICAgICAgICAgOiAzMSAtICgobW9kTW9udGggJSA3KSAlIDIpO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdNJywgWydNTScsIDJdLCAnTW8nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vbnRoKCkgKyAxO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ01NTScsIDAsIDAsIGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm1vbnRoc1Nob3J0KHRoaXMsIGZvcm1hdCk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignTU1NTScsIDAsIDAsIGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm1vbnRocyh0aGlzLCBmb3JtYXQpO1xuICAgIH0pO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignTScsIG1hdGNoMXRvMiwgbWF0Y2gxdG8yTm9MZWFkaW5nWmVybyk7XG4gICAgYWRkUmVnZXhUb2tlbignTU0nLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignTU1NJywgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5tb250aHNTaG9ydFJlZ2V4KGlzU3RyaWN0KTtcbiAgICB9KTtcbiAgICBhZGRSZWdleFRva2VuKCdNTU1NJywgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5tb250aHNSZWdleChpc1N0cmljdCk7XG4gICAgfSk7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsnTScsICdNTSddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W01PTlRIXSA9IHRvSW50KGlucHV0KSAtIDE7XG4gICAgfSk7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsnTU1NJywgJ01NTU0nXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnLCB0b2tlbikge1xuICAgICAgICB2YXIgbW9udGggPSBjb25maWcuX2xvY2FsZS5tb250aHNQYXJzZShpbnB1dCwgdG9rZW4sIGNvbmZpZy5fc3RyaWN0KTtcbiAgICAgICAgLy8gaWYgd2UgZGlkbid0IGZpbmQgYSBtb250aCBuYW1lLCBtYXJrIHRoZSBkYXRlIGFzIGludmFsaWQuXG4gICAgICAgIGlmIChtb250aCAhPSBudWxsKSB7XG4gICAgICAgICAgICBhcnJheVtNT05USF0gPSBtb250aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmludmFsaWRNb250aCA9IGlucHV0O1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBMT0NBTEVTXG5cbiAgICB2YXIgZGVmYXVsdExvY2FsZU1vbnRocyA9XG4gICAgICAgICAgICAnSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICBkZWZhdWx0TG9jYWxlTW9udGhzU2hvcnQgPVxuICAgICAgICAgICAgJ0phbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjJy5zcGxpdCgnXycpLFxuICAgICAgICBNT05USFNfSU5fRk9STUFUID0gL0Rbb0RdPyhcXFtbXlxcW1xcXV0qXFxdfFxccykrTU1NTT8vLFxuICAgICAgICBkZWZhdWx0TW9udGhzU2hvcnRSZWdleCA9IG1hdGNoV29yZCxcbiAgICAgICAgZGVmYXVsdE1vbnRoc1JlZ2V4ID0gbWF0Y2hXb3JkO1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlTW9udGhzKG0sIGZvcm1hdCkge1xuICAgICAgICBpZiAoIW0pIHtcbiAgICAgICAgICAgIHJldHVybiBpc0FycmF5KHRoaXMuX21vbnRocylcbiAgICAgICAgICAgICAgICA/IHRoaXMuX21vbnRoc1xuICAgICAgICAgICAgICAgIDogdGhpcy5fbW9udGhzWydzdGFuZGFsb25lJ107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzQXJyYXkodGhpcy5fbW9udGhzKVxuICAgICAgICAgICAgPyB0aGlzLl9tb250aHNbbS5tb250aCgpXVxuICAgICAgICAgICAgOiB0aGlzLl9tb250aHNbXG4gICAgICAgICAgICAgICAgICAodGhpcy5fbW9udGhzLmlzRm9ybWF0IHx8IE1PTlRIU19JTl9GT1JNQVQpLnRlc3QoZm9ybWF0KVxuICAgICAgICAgICAgICAgICAgICAgID8gJ2Zvcm1hdCdcbiAgICAgICAgICAgICAgICAgICAgICA6ICdzdGFuZGFsb25lJ1xuICAgICAgICAgICAgICBdW20ubW9udGgoKV07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlTW9udGhzU2hvcnQobSwgZm9ybWF0KSB7XG4gICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgcmV0dXJuIGlzQXJyYXkodGhpcy5fbW9udGhzU2hvcnQpXG4gICAgICAgICAgICAgICAgPyB0aGlzLl9tb250aHNTaG9ydFxuICAgICAgICAgICAgICAgIDogdGhpcy5fbW9udGhzU2hvcnRbJ3N0YW5kYWxvbmUnXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNBcnJheSh0aGlzLl9tb250aHNTaG9ydClcbiAgICAgICAgICAgID8gdGhpcy5fbW9udGhzU2hvcnRbbS5tb250aCgpXVxuICAgICAgICAgICAgOiB0aGlzLl9tb250aHNTaG9ydFtcbiAgICAgICAgICAgICAgICAgIE1PTlRIU19JTl9GT1JNQVQudGVzdChmb3JtYXQpID8gJ2Zvcm1hdCcgOiAnc3RhbmRhbG9uZSdcbiAgICAgICAgICAgICAgXVttLm1vbnRoKCldO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhbmRsZVN0cmljdFBhcnNlKG1vbnRoTmFtZSwgZm9ybWF0LCBzdHJpY3QpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBpaSxcbiAgICAgICAgICAgIG1vbSxcbiAgICAgICAgICAgIGxsYyA9IG1vbnRoTmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAoIXRoaXMuX21vbnRoc1BhcnNlKSB7XG4gICAgICAgICAgICAvLyB0aGlzIGlzIG5vdCB1c2VkXG4gICAgICAgICAgICB0aGlzLl9tb250aHNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fbG9uZ01vbnRoc1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9zaG9ydE1vbnRoc1BhcnNlID0gW107XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7ICsraSkge1xuICAgICAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgaV0pO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3J0TW9udGhzUGFyc2VbaV0gPSB0aGlzLm1vbnRoc1Nob3J0KFxuICAgICAgICAgICAgICAgICAgICBtb20sXG4gICAgICAgICAgICAgICAgICAgICcnXG4gICAgICAgICAgICAgICAgKS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvbmdNb250aHNQYXJzZVtpXSA9IHRoaXMubW9udGhzKG1vbSwgJycpLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RyaWN0KSB7XG4gICAgICAgICAgICBpZiAoZm9ybWF0ID09PSAnTU1NJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0TW9udGhzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbG9uZ01vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoZm9ybWF0ID09PSAnTU1NJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0TW9udGhzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX2xvbmdNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9sb25nTW9udGhzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0TW9udGhzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZU1vbnRoc1BhcnNlKG1vbnRoTmFtZSwgZm9ybWF0LCBzdHJpY3QpIHtcbiAgICAgICAgdmFyIGksIG1vbSwgcmVnZXg7XG5cbiAgICAgICAgaWYgKHRoaXMuX21vbnRoc1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVTdHJpY3RQYXJzZS5jYWxsKHRoaXMsIG1vbnRoTmFtZSwgZm9ybWF0LCBzdHJpY3QpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLl9tb250aHNQYXJzZSkge1xuICAgICAgICAgICAgdGhpcy5fbW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX2xvbmdNb250aHNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fc2hvcnRNb250aHNQYXJzZSA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVE9ETzogYWRkIHNvcnRpbmdcbiAgICAgICAgLy8gU29ydGluZyBtYWtlcyBzdXJlIGlmIG9uZSBtb250aCAob3IgYWJicikgaXMgYSBwcmVmaXggb2YgYW5vdGhlclxuICAgICAgICAvLyBzZWUgc29ydGluZyBpbiBjb21wdXRlTW9udGhzUGFyc2VcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDEyOyBpKyspIHtcbiAgICAgICAgICAgIC8vIG1ha2UgdGhlIHJlZ2V4IGlmIHdlIGRvbid0IGhhdmUgaXQgYWxyZWFkeVxuICAgICAgICAgICAgbW9tID0gY3JlYXRlVVRDKFsyMDAwLCBpXSk7XG4gICAgICAgICAgICBpZiAoc3RyaWN0ICYmICF0aGlzLl9sb25nTW9udGhzUGFyc2VbaV0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb25nTW9udGhzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgICAgICAgICAnXicgKyB0aGlzLm1vbnRocyhtb20sICcnKS5yZXBsYWNlKCcuJywgJycpICsgJyQnLFxuICAgICAgICAgICAgICAgICAgICAnaSdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3J0TW9udGhzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgICAgICAgICAnXicgKyB0aGlzLm1vbnRoc1Nob3J0KG1vbSwgJycpLnJlcGxhY2UoJy4nLCAnJykgKyAnJCcsXG4gICAgICAgICAgICAgICAgICAgICdpJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXN0cmljdCAmJiAhdGhpcy5fbW9udGhzUGFyc2VbaV0pIHtcbiAgICAgICAgICAgICAgICByZWdleCA9XG4gICAgICAgICAgICAgICAgICAgICdeJyArIHRoaXMubW9udGhzKG1vbSwgJycpICsgJ3xeJyArIHRoaXMubW9udGhzU2hvcnQobW9tLCAnJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbW9udGhzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKHJlZ2V4LnJlcGxhY2UoJy4nLCAnJyksICdpJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyB0ZXN0IHRoZSByZWdleFxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHN0cmljdCAmJlxuICAgICAgICAgICAgICAgIGZvcm1hdCA9PT0gJ01NTU0nICYmXG4gICAgICAgICAgICAgICAgdGhpcy5fbG9uZ01vbnRoc1BhcnNlW2ldLnRlc3QobW9udGhOYW1lKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIHN0cmljdCAmJlxuICAgICAgICAgICAgICAgIGZvcm1hdCA9PT0gJ01NTScgJiZcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG9ydE1vbnRoc1BhcnNlW2ldLnRlc3QobW9udGhOYW1lKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJpY3QgJiYgdGhpcy5fbW9udGhzUGFyc2VbaV0udGVzdChtb250aE5hbWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBzZXRNb250aChtb20sIHZhbHVlKSB7XG4gICAgICAgIGlmICghbW9tLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgLy8gTm8gb3BcbiAgICAgICAgICAgIHJldHVybiBtb207XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgaWYgKC9eXFxkKyQvLnRlc3QodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB0b0ludCh2YWx1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gbW9tLmxvY2FsZURhdGEoKS5tb250aHNQYXJzZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgLy8gVE9ETzogQW5vdGhlciBzaWxlbnQgZmFpbHVyZT9cbiAgICAgICAgICAgICAgICBpZiAoIWlzTnVtYmVyKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9tO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBtb250aCA9IHZhbHVlLFxuICAgICAgICAgICAgZGF0ZSA9IG1vbS5kYXRlKCk7XG5cbiAgICAgICAgZGF0ZSA9IGRhdGUgPCAyOSA/IGRhdGUgOiBNYXRoLm1pbihkYXRlLCBkYXlzSW5Nb250aChtb20ueWVhcigpLCBtb250aCkpO1xuICAgICAgICB2b2lkIChtb20uX2lzVVRDXG4gICAgICAgICAgICA/IG1vbS5fZC5zZXRVVENNb250aChtb250aCwgZGF0ZSlcbiAgICAgICAgICAgIDogbW9tLl9kLnNldE1vbnRoKG1vbnRoLCBkYXRlKSk7XG4gICAgICAgIHJldHVybiBtb207XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0TW9udGgodmFsdWUpIHtcbiAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgIHNldE1vbnRoKHRoaXMsIHZhbHVlKTtcbiAgICAgICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzLCB0cnVlKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGdldCh0aGlzLCAnTW9udGgnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldERheXNJbk1vbnRoKCkge1xuICAgICAgICByZXR1cm4gZGF5c0luTW9udGgodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW9udGhzU2hvcnRSZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAodGhpcy5fbW9udGhzUGFyc2VFeGFjdCkge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfbW9udGhzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIGNvbXB1dGVNb250aHNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNTaG9ydFJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfbW9udGhzU2hvcnRSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbW9udGhzU2hvcnRSZWdleCA9IGRlZmF1bHRNb250aHNTaG9ydFJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXggJiYgaXNTdHJpY3RcbiAgICAgICAgICAgICAgICA/IHRoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXhcbiAgICAgICAgICAgICAgICA6IHRoaXMuX21vbnRoc1Nob3J0UmVnZXg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb250aHNSZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAodGhpcy5fbW9udGhzUGFyc2VFeGFjdCkge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfbW9udGhzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIGNvbXB1dGVNb250aHNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1N0cmljdFJlZ2V4O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19tb250aHNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbW9udGhzUmVnZXggPSBkZWZhdWx0TW9udGhzUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU3RyaWN0UmVnZXggJiYgaXNTdHJpY3RcbiAgICAgICAgICAgICAgICA/IHRoaXMuX21vbnRoc1N0cmljdFJlZ2V4XG4gICAgICAgICAgICAgICAgOiB0aGlzLl9tb250aHNSZWdleDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXB1dGVNb250aHNQYXJzZSgpIHtcbiAgICAgICAgZnVuY3Rpb24gY21wTGVuUmV2KGEsIGIpIHtcbiAgICAgICAgICAgIHJldHVybiBiLmxlbmd0aCAtIGEubGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNob3J0UGllY2VzID0gW10sXG4gICAgICAgICAgICBsb25nUGllY2VzID0gW10sXG4gICAgICAgICAgICBtaXhlZFBpZWNlcyA9IFtdLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIG1vbSxcbiAgICAgICAgICAgIHNob3J0UCxcbiAgICAgICAgICAgIGxvbmdQO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgICAgICAgLy8gbWFrZSB0aGUgcmVnZXggaWYgd2UgZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5XG4gICAgICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIGldKTtcbiAgICAgICAgICAgIHNob3J0UCA9IHJlZ2V4RXNjYXBlKHRoaXMubW9udGhzU2hvcnQobW9tLCAnJykpO1xuICAgICAgICAgICAgbG9uZ1AgPSByZWdleEVzY2FwZSh0aGlzLm1vbnRocyhtb20sICcnKSk7XG4gICAgICAgICAgICBzaG9ydFBpZWNlcy5wdXNoKHNob3J0UCk7XG4gICAgICAgICAgICBsb25nUGllY2VzLnB1c2gobG9uZ1ApO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChsb25nUCk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKHNob3J0UCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU29ydGluZyBtYWtlcyBzdXJlIGlmIG9uZSBtb250aCAob3IgYWJicikgaXMgYSBwcmVmaXggb2YgYW5vdGhlciBpdFxuICAgICAgICAvLyB3aWxsIG1hdGNoIHRoZSBsb25nZXIgcGllY2UuXG4gICAgICAgIHNob3J0UGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgbG9uZ1BpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIG1peGVkUGllY2VzLnNvcnQoY21wTGVuUmV2KTtcblxuICAgICAgICB0aGlzLl9tb250aHNSZWdleCA9IG5ldyBSZWdFeHAoJ14oJyArIG1peGVkUGllY2VzLmpvaW4oJ3wnKSArICcpJywgJ2knKTtcbiAgICAgICAgdGhpcy5fbW9udGhzU2hvcnRSZWdleCA9IHRoaXMuX21vbnRoc1JlZ2V4O1xuICAgICAgICB0aGlzLl9tb250aHNTdHJpY3RSZWdleCA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAnXignICsgbG9uZ1BpZWNlcy5qb2luKCd8JykgKyAnKScsXG4gICAgICAgICAgICAnaSdcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleCA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAnXignICsgc2hvcnRQaWVjZXMuam9pbignfCcpICsgJyknLFxuICAgICAgICAgICAgJ2knXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlRGF0ZSh5LCBtLCBkLCBoLCBNLCBzLCBtcykge1xuICAgICAgICAvLyBjYW4ndCBqdXN0IGFwcGx5KCkgdG8gY3JlYXRlIGEgZGF0ZTpcbiAgICAgICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xLzE4MTM0OFxuICAgICAgICB2YXIgZGF0ZTtcbiAgICAgICAgLy8gdGhlIGRhdGUgY29uc3RydWN0b3IgcmVtYXBzIHllYXJzIDAtOTkgdG8gMTkwMC0xOTk5XG4gICAgICAgIGlmICh5IDwgMTAwICYmIHkgPj0gMCkge1xuICAgICAgICAgICAgLy8gcHJlc2VydmUgbGVhcCB5ZWFycyB1c2luZyBhIGZ1bGwgNDAwIHllYXIgY3ljbGUsIHRoZW4gcmVzZXRcbiAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZSh5ICsgNDAwLCBtLCBkLCBoLCBNLCBzLCBtcyk7XG4gICAgICAgICAgICBpZiAoaXNGaW5pdGUoZGF0ZS5nZXRGdWxsWWVhcigpKSkge1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0RnVsbFllYXIoeSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkYXRlID0gbmV3IERhdGUoeSwgbSwgZCwgaCwgTSwgcywgbXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlVVRDRGF0ZSh5KSB7XG4gICAgICAgIHZhciBkYXRlLCBhcmdzO1xuICAgICAgICAvLyB0aGUgRGF0ZS5VVEMgZnVuY3Rpb24gcmVtYXBzIHllYXJzIDAtOTkgdG8gMTkwMC0xOTk5XG4gICAgICAgIGlmICh5IDwgMTAwICYmIHkgPj0gMCkge1xuICAgICAgICAgICAgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAvLyBwcmVzZXJ2ZSBsZWFwIHllYXJzIHVzaW5nIGEgZnVsbCA0MDAgeWVhciBjeWNsZSwgdGhlbiByZXNldFxuICAgICAgICAgICAgYXJnc1swXSA9IHkgKyA0MDA7XG4gICAgICAgICAgICBkYXRlID0gbmV3IERhdGUoRGF0ZS5VVEMuYXBwbHkobnVsbCwgYXJncykpO1xuICAgICAgICAgICAgaWYgKGlzRmluaXRlKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSkpIHtcbiAgICAgICAgICAgICAgICBkYXRlLnNldFVUQ0Z1bGxZZWFyKHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKERhdGUuVVRDLmFwcGx5KG51bGwsIGFyZ3VtZW50cykpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfVxuXG4gICAgLy8gc3RhcnQtb2YtZmlyc3Qtd2VlayAtIHN0YXJ0LW9mLXllYXJcbiAgICBmdW5jdGlvbiBmaXJzdFdlZWtPZmZzZXQoeWVhciwgZG93LCBkb3kpIHtcbiAgICAgICAgdmFyIC8vIGZpcnN0LXdlZWsgZGF5IC0tIHdoaWNoIGphbnVhcnkgaXMgYWx3YXlzIGluIHRoZSBmaXJzdCB3ZWVrICg0IGZvciBpc28sIDEgZm9yIG90aGVyKVxuICAgICAgICAgICAgZndkID0gNyArIGRvdyAtIGRveSxcbiAgICAgICAgICAgIC8vIGZpcnN0LXdlZWsgZGF5IGxvY2FsIHdlZWtkYXkgLS0gd2hpY2ggbG9jYWwgd2Vla2RheSBpcyBmd2RcbiAgICAgICAgICAgIGZ3ZGx3ID0gKDcgKyBjcmVhdGVVVENEYXRlKHllYXIsIDAsIGZ3ZCkuZ2V0VVRDRGF5KCkgLSBkb3cpICUgNztcblxuICAgICAgICByZXR1cm4gLWZ3ZGx3ICsgZndkIC0gMTtcbiAgICB9XG5cbiAgICAvLyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fd2Vla19kYXRlI0NhbGN1bGF0aW5nX2FfZGF0ZV9naXZlbl90aGVfeWVhci4yQ193ZWVrX251bWJlcl9hbmRfd2Vla2RheVxuICAgIGZ1bmN0aW9uIGRheU9mWWVhckZyb21XZWVrcyh5ZWFyLCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSkge1xuICAgICAgICB2YXIgbG9jYWxXZWVrZGF5ID0gKDcgKyB3ZWVrZGF5IC0gZG93KSAlIDcsXG4gICAgICAgICAgICB3ZWVrT2Zmc2V0ID0gZmlyc3RXZWVrT2Zmc2V0KHllYXIsIGRvdywgZG95KSxcbiAgICAgICAgICAgIGRheU9mWWVhciA9IDEgKyA3ICogKHdlZWsgLSAxKSArIGxvY2FsV2Vla2RheSArIHdlZWtPZmZzZXQsXG4gICAgICAgICAgICByZXNZZWFyLFxuICAgICAgICAgICAgcmVzRGF5T2ZZZWFyO1xuXG4gICAgICAgIGlmIChkYXlPZlllYXIgPD0gMCkge1xuICAgICAgICAgICAgcmVzWWVhciA9IHllYXIgLSAxO1xuICAgICAgICAgICAgcmVzRGF5T2ZZZWFyID0gZGF5c0luWWVhcihyZXNZZWFyKSArIGRheU9mWWVhcjtcbiAgICAgICAgfSBlbHNlIGlmIChkYXlPZlllYXIgPiBkYXlzSW5ZZWFyKHllYXIpKSB7XG4gICAgICAgICAgICByZXNZZWFyID0geWVhciArIDE7XG4gICAgICAgICAgICByZXNEYXlPZlllYXIgPSBkYXlPZlllYXIgLSBkYXlzSW5ZZWFyKHllYXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzWWVhciA9IHllYXI7XG4gICAgICAgICAgICByZXNEYXlPZlllYXIgPSBkYXlPZlllYXI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeWVhcjogcmVzWWVhcixcbiAgICAgICAgICAgIGRheU9mWWVhcjogcmVzRGF5T2ZZZWFyLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdlZWtPZlllYXIobW9tLCBkb3csIGRveSkge1xuICAgICAgICB2YXIgd2Vla09mZnNldCA9IGZpcnN0V2Vla09mZnNldChtb20ueWVhcigpLCBkb3csIGRveSksXG4gICAgICAgICAgICB3ZWVrID0gTWF0aC5mbG9vcigobW9tLmRheU9mWWVhcigpIC0gd2Vla09mZnNldCAtIDEpIC8gNykgKyAxLFxuICAgICAgICAgICAgcmVzV2VlayxcbiAgICAgICAgICAgIHJlc1llYXI7XG5cbiAgICAgICAgaWYgKHdlZWsgPCAxKSB7XG4gICAgICAgICAgICByZXNZZWFyID0gbW9tLnllYXIoKSAtIDE7XG4gICAgICAgICAgICByZXNXZWVrID0gd2VlayArIHdlZWtzSW5ZZWFyKHJlc1llYXIsIGRvdywgZG95KTtcbiAgICAgICAgfSBlbHNlIGlmICh3ZWVrID4gd2Vla3NJblllYXIobW9tLnllYXIoKSwgZG93LCBkb3kpKSB7XG4gICAgICAgICAgICByZXNXZWVrID0gd2VlayAtIHdlZWtzSW5ZZWFyKG1vbS55ZWFyKCksIGRvdywgZG95KTtcbiAgICAgICAgICAgIHJlc1llYXIgPSBtb20ueWVhcigpICsgMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc1llYXIgPSBtb20ueWVhcigpO1xuICAgICAgICAgICAgcmVzV2VlayA9IHdlZWs7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgd2VlazogcmVzV2VlayxcbiAgICAgICAgICAgIHllYXI6IHJlc1llYXIsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd2Vla3NJblllYXIoeWVhciwgZG93LCBkb3kpIHtcbiAgICAgICAgdmFyIHdlZWtPZmZzZXQgPSBmaXJzdFdlZWtPZmZzZXQoeWVhciwgZG93LCBkb3kpLFxuICAgICAgICAgICAgd2Vla09mZnNldE5leHQgPSBmaXJzdFdlZWtPZmZzZXQoeWVhciArIDEsIGRvdywgZG95KTtcbiAgICAgICAgcmV0dXJuIChkYXlzSW5ZZWFyKHllYXIpIC0gd2Vla09mZnNldCArIHdlZWtPZmZzZXROZXh0KSAvIDc7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ3cnLCBbJ3d3JywgMl0sICd3bycsICd3ZWVrJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ1cnLCBbJ1dXJywgMl0sICdXbycsICdpc29XZWVrJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCd3JywgbWF0Y2gxdG8yLCBtYXRjaDF0bzJOb0xlYWRpbmdaZXJvKTtcbiAgICBhZGRSZWdleFRva2VuKCd3dycsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdXJywgbWF0Y2gxdG8yLCBtYXRjaDF0bzJOb0xlYWRpbmdaZXJvKTtcbiAgICBhZGRSZWdleFRva2VuKCdXVycsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcblxuICAgIGFkZFdlZWtQYXJzZVRva2VuKFxuICAgICAgICBbJ3cnLCAnd3cnLCAnVycsICdXVyddLFxuICAgICAgICBmdW5jdGlvbiAoaW5wdXQsIHdlZWssIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgICAgIHdlZWtbdG9rZW4uc3Vic3RyKDAsIDEpXSA9IHRvSW50KGlucHV0KTtcbiAgICAgICAgfVxuICAgICk7XG5cbiAgICAvLyBIRUxQRVJTXG5cbiAgICAvLyBMT0NBTEVTXG5cbiAgICBmdW5jdGlvbiBsb2NhbGVXZWVrKG1vbSkge1xuICAgICAgICByZXR1cm4gd2Vla09mWWVhcihtb20sIHRoaXMuX3dlZWsuZG93LCB0aGlzLl93ZWVrLmRveSkud2VlaztcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdExvY2FsZVdlZWsgPSB7XG4gICAgICAgIGRvdzogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgIGRveTogNiwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVGaXJzdERheU9mV2VlaygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWsuZG93O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZUZpcnN0RGF5T2ZZZWFyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fd2Vlay5kb3k7XG4gICAgfVxuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0U2V0V2VlayhpbnB1dCkge1xuICAgICAgICB2YXIgd2VlayA9IHRoaXMubG9jYWxlRGF0YSgpLndlZWsodGhpcyk7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PSBudWxsID8gd2VlayA6IHRoaXMuYWRkKChpbnB1dCAtIHdlZWspICogNywgJ2QnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRJU09XZWVrKGlucHV0KSB7XG4gICAgICAgIHZhciB3ZWVrID0gd2Vla09mWWVhcih0aGlzLCAxLCA0KS53ZWVrO1xuICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbCA/IHdlZWsgOiB0aGlzLmFkZCgoaW5wdXQgLSB3ZWVrKSAqIDcsICdkJyk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2QnLCAwLCAnZG8nLCAnZGF5Jyk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignZGQnLCAwLCAwLCBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS53ZWVrZGF5c01pbih0aGlzLCBmb3JtYXQpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2RkZCcsIDAsIDAsIGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzU2hvcnQodGhpcywgZm9ybWF0KTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdkZGRkJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXModGhpcywgZm9ybWF0KTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdlJywgMCwgMCwgJ3dlZWtkYXknKTtcbiAgICBhZGRGb3JtYXRUb2tlbignRScsIDAsIDAsICdpc29XZWVrZGF5Jyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdkJywgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdlJywgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdFJywgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdkZCcsIGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUud2Vla2RheXNNaW5SZWdleChpc1N0cmljdCk7XG4gICAgfSk7XG4gICAgYWRkUmVnZXhUb2tlbignZGRkJywgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS53ZWVrZGF5c1Nob3J0UmVnZXgoaXNTdHJpY3QpO1xuICAgIH0pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2RkZGQnLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLndlZWtkYXlzUmVnZXgoaXNTdHJpY3QpO1xuICAgIH0pO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oWydkZCcsICdkZGQnLCAnZGRkZCddLCBmdW5jdGlvbiAoaW5wdXQsIHdlZWssIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgdmFyIHdlZWtkYXkgPSBjb25maWcuX2xvY2FsZS53ZWVrZGF5c1BhcnNlKGlucHV0LCB0b2tlbiwgY29uZmlnLl9zdHJpY3QpO1xuICAgICAgICAvLyBpZiB3ZSBkaWRuJ3QgZ2V0IGEgd2Vla2RheSBuYW1lLCBtYXJrIHRoZSBkYXRlIGFzIGludmFsaWRcbiAgICAgICAgaWYgKHdlZWtkYXkgIT0gbnVsbCkge1xuICAgICAgICAgICAgd2Vlay5kID0gd2Vla2RheTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmludmFsaWRXZWVrZGF5ID0gaW5wdXQ7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIGFkZFdlZWtQYXJzZVRva2VuKFsnZCcsICdlJywgJ0UnXSwgZnVuY3Rpb24gKGlucHV0LCB3ZWVrLCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHdlZWtbdG9rZW5dID0gdG9JbnQoaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gSEVMUEVSU1xuXG4gICAgZnVuY3Rpb24gcGFyc2VXZWVrZGF5KGlucHV0LCBsb2NhbGUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNOYU4oaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQoaW5wdXQsIDEwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlucHV0ID0gbG9jYWxlLndlZWtkYXlzUGFyc2UoaW5wdXQpO1xuICAgICAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VJc29XZWVrZGF5KGlucHV0LCBsb2NhbGUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbGUud2Vla2RheXNQYXJzZShpbnB1dCkgJSA3IHx8IDc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzTmFOKGlucHV0KSA/IG51bGwgOiBpbnB1dDtcbiAgICB9XG5cbiAgICAvLyBMT0NBTEVTXG4gICAgZnVuY3Rpb24gc2hpZnRXZWVrZGF5cyh3cywgbikge1xuICAgICAgICByZXR1cm4gd3Muc2xpY2UobiwgNykuY29uY2F0KHdzLnNsaWNlKDAsIG4pKTtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdExvY2FsZVdlZWtkYXlzID1cbiAgICAgICAgICAgICdTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheScuc3BsaXQoJ18nKSxcbiAgICAgICAgZGVmYXVsdExvY2FsZVdlZWtkYXlzU2hvcnQgPSAnU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Jy5zcGxpdCgnXycpLFxuICAgICAgICBkZWZhdWx0TG9jYWxlV2Vla2RheXNNaW4gPSAnU3VfTW9fVHVfV2VfVGhfRnJfU2EnLnNwbGl0KCdfJyksXG4gICAgICAgIGRlZmF1bHRXZWVrZGF5c1JlZ2V4ID0gbWF0Y2hXb3JkLFxuICAgICAgICBkZWZhdWx0V2Vla2RheXNTaG9ydFJlZ2V4ID0gbWF0Y2hXb3JkLFxuICAgICAgICBkZWZhdWx0V2Vla2RheXNNaW5SZWdleCA9IG1hdGNoV29yZDtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZVdlZWtkYXlzKG0sIGZvcm1hdCkge1xuICAgICAgICB2YXIgd2Vla2RheXMgPSBpc0FycmF5KHRoaXMuX3dlZWtkYXlzKVxuICAgICAgICAgICAgPyB0aGlzLl93ZWVrZGF5c1xuICAgICAgICAgICAgOiB0aGlzLl93ZWVrZGF5c1tcbiAgICAgICAgICAgICAgICAgIG0gJiYgbSAhPT0gdHJ1ZSAmJiB0aGlzLl93ZWVrZGF5cy5pc0Zvcm1hdC50ZXN0KGZvcm1hdClcbiAgICAgICAgICAgICAgICAgICAgICA/ICdmb3JtYXQnXG4gICAgICAgICAgICAgICAgICAgICAgOiAnc3RhbmRhbG9uZSdcbiAgICAgICAgICAgICAgXTtcbiAgICAgICAgcmV0dXJuIG0gPT09IHRydWVcbiAgICAgICAgICAgID8gc2hpZnRXZWVrZGF5cyh3ZWVrZGF5cywgdGhpcy5fd2Vlay5kb3cpXG4gICAgICAgICAgICA6IG1cbiAgICAgICAgICAgICAgPyB3ZWVrZGF5c1ttLmRheSgpXVxuICAgICAgICAgICAgICA6IHdlZWtkYXlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZVdlZWtkYXlzU2hvcnQobSkge1xuICAgICAgICByZXR1cm4gbSA9PT0gdHJ1ZVxuICAgICAgICAgICAgPyBzaGlmdFdlZWtkYXlzKHRoaXMuX3dlZWtkYXlzU2hvcnQsIHRoaXMuX3dlZWsuZG93KVxuICAgICAgICAgICAgOiBtXG4gICAgICAgICAgICAgID8gdGhpcy5fd2Vla2RheXNTaG9ydFttLmRheSgpXVxuICAgICAgICAgICAgICA6IHRoaXMuX3dlZWtkYXlzU2hvcnQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlV2Vla2RheXNNaW4obSkge1xuICAgICAgICByZXR1cm4gbSA9PT0gdHJ1ZVxuICAgICAgICAgICAgPyBzaGlmdFdlZWtkYXlzKHRoaXMuX3dlZWtkYXlzTWluLCB0aGlzLl93ZWVrLmRvdylcbiAgICAgICAgICAgIDogbVxuICAgICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzTWluW20uZGF5KCldXG4gICAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNNaW47XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFuZGxlU3RyaWN0UGFyc2UkMSh3ZWVrZGF5TmFtZSwgZm9ybWF0LCBzdHJpY3QpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBpaSxcbiAgICAgICAgICAgIG1vbSxcbiAgICAgICAgICAgIGxsYyA9IHdlZWtkYXlOYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmICghdGhpcy5fd2Vla2RheXNQYXJzZSkge1xuICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9taW5XZWVrZGF5c1BhcnNlID0gW107XG5cbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCA3OyArK2kpIHtcbiAgICAgICAgICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIDFdKS5kYXkoaSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWluV2Vla2RheXNQYXJzZVtpXSA9IHRoaXMud2Vla2RheXNNaW4oXG4gICAgICAgICAgICAgICAgICAgIG1vbSxcbiAgICAgICAgICAgICAgICAgICAgJydcbiAgICAgICAgICAgICAgICApLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlW2ldID0gdGhpcy53ZWVrZGF5c1Nob3J0KFxuICAgICAgICAgICAgICAgICAgICBtb20sXG4gICAgICAgICAgICAgICAgICAgICcnXG4gICAgICAgICAgICAgICAgKS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzUGFyc2VbaV0gPSB0aGlzLndlZWtkYXlzKG1vbSwgJycpLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RyaWN0KSB7XG4gICAgICAgICAgICBpZiAoZm9ybWF0ID09PSAnZGRkZCcpIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PT0gJ2RkZCcpIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGZvcm1hdCA9PT0gJ2RkZGQnKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PT0gJ2RkZCcpIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVXZWVrZGF5c1BhcnNlKHdlZWtkYXlOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSwgbW9tLCByZWdleDtcblxuICAgICAgICBpZiAodGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlU3RyaWN0UGFyc2UkMS5jYWxsKHRoaXMsIHdlZWtkYXlOYW1lLCBmb3JtYXQsIHN0cmljdCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuX3dlZWtkYXlzUGFyc2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX21pbldlZWtkYXlzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2UgPSBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHtcbiAgICAgICAgICAgIC8vIG1ha2UgdGhlIHJlZ2V4IGlmIHdlIGRvbid0IGhhdmUgaXQgYWxyZWFkeVxuXG4gICAgICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIDFdKS5kYXkoaSk7XG4gICAgICAgICAgICBpZiAoc3RyaWN0ICYmICF0aGlzLl9mdWxsV2Vla2RheXNQYXJzZVtpXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW2ldID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICAgICAgICAgJ14nICsgdGhpcy53ZWVrZGF5cyhtb20sICcnKS5yZXBsYWNlKCcuJywgJ1xcXFwuPycpICsgJyQnLFxuICAgICAgICAgICAgICAgICAgICAnaSdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAgICAgICAgICdeJyArIHRoaXMud2Vla2RheXNTaG9ydChtb20sICcnKS5yZXBsYWNlKCcuJywgJ1xcXFwuPycpICsgJyQnLFxuICAgICAgICAgICAgICAgICAgICAnaSdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuX21pbldlZWtkYXlzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgICAgICAgICAnXicgKyB0aGlzLndlZWtkYXlzTWluKG1vbSwgJycpLnJlcGxhY2UoJy4nLCAnXFxcXC4/JykgKyAnJCcsXG4gICAgICAgICAgICAgICAgICAgICdpJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMuX3dlZWtkYXlzUGFyc2VbaV0pIHtcbiAgICAgICAgICAgICAgICByZWdleCA9XG4gICAgICAgICAgICAgICAgICAgICdeJyArXG4gICAgICAgICAgICAgICAgICAgIHRoaXMud2Vla2RheXMobW9tLCAnJykgK1xuICAgICAgICAgICAgICAgICAgICAnfF4nICtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53ZWVrZGF5c1Nob3J0KG1vbSwgJycpICtcbiAgICAgICAgICAgICAgICAgICAgJ3xeJyArXG4gICAgICAgICAgICAgICAgICAgIHRoaXMud2Vla2RheXNNaW4obW9tLCAnJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNQYXJzZVtpXSA9IG5ldyBSZWdFeHAocmVnZXgucmVwbGFjZSgnLicsICcnKSwgJ2knKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHRlc3QgdGhlIHJlZ2V4XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgc3RyaWN0ICYmXG4gICAgICAgICAgICAgICAgZm9ybWF0ID09PSAnZGRkZCcgJiZcbiAgICAgICAgICAgICAgICB0aGlzLl9mdWxsV2Vla2RheXNQYXJzZVtpXS50ZXN0KHdlZWtkYXlOYW1lKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIHN0cmljdCAmJlxuICAgICAgICAgICAgICAgIGZvcm1hdCA9PT0gJ2RkZCcgJiZcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2VbaV0udGVzdCh3ZWVrZGF5TmFtZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICBzdHJpY3QgJiZcbiAgICAgICAgICAgICAgICBmb3JtYXQgPT09ICdkZCcgJiZcbiAgICAgICAgICAgICAgICB0aGlzLl9taW5XZWVrZGF5c1BhcnNlW2ldLnRlc3Qod2Vla2RheU5hbWUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cmljdCAmJiB0aGlzLl93ZWVrZGF5c1BhcnNlW2ldLnRlc3Qod2Vla2RheU5hbWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRTZXREYXlPZldlZWsoaW5wdXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0ICE9IG51bGwgPyB0aGlzIDogTmFOO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGRheSA9IGdldCh0aGlzLCAnRGF5Jyk7XG4gICAgICAgIGlmIChpbnB1dCAhPSBudWxsKSB7XG4gICAgICAgICAgICBpbnB1dCA9IHBhcnNlV2Vla2RheShpbnB1dCwgdGhpcy5sb2NhbGVEYXRhKCkpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWRkKGlucHV0IC0gZGF5LCAnZCcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGRheTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldExvY2FsZURheU9mV2VlayhpbnB1dCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQgIT0gbnVsbCA/IHRoaXMgOiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHdlZWtkYXkgPSAodGhpcy5kYXkoKSArIDcgLSB0aGlzLmxvY2FsZURhdGEoKS5fd2Vlay5kb3cpICUgNztcbiAgICAgICAgcmV0dXJuIGlucHV0ID09IG51bGwgPyB3ZWVrZGF5IDogdGhpcy5hZGQoaW5wdXQgLSB3ZWVrZGF5LCAnZCcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldElTT0RheU9mV2VlayhpbnB1dCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQgIT0gbnVsbCA/IHRoaXMgOiBOYU47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBiZWhhdmVzIHRoZSBzYW1lIGFzIG1vbWVudCNkYXkgZXhjZXB0XG4gICAgICAgIC8vIGFzIGEgZ2V0dGVyLCByZXR1cm5zIDcgaW5zdGVhZCBvZiAwICgxLTcgcmFuZ2UgaW5zdGVhZCBvZiAwLTYpXG4gICAgICAgIC8vIGFzIGEgc2V0dGVyLCBzdW5kYXkgc2hvdWxkIGJlbG9uZyB0byB0aGUgcHJldmlvdXMgd2Vlay5cblxuICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIHdlZWtkYXkgPSBwYXJzZUlzb1dlZWtkYXkoaW5wdXQsIHRoaXMubG9jYWxlRGF0YSgpKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRheSh0aGlzLmRheSgpICUgNyA/IHdlZWtkYXkgOiB3ZWVrZGF5IC0gNyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kYXkoKSB8fCA3O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd2Vla2RheXNSZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAodGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICBjb21wdXRlV2Vla2RheXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c1JlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfd2Vla2RheXNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNSZWdleCA9IGRlZmF1bHRXZWVrZGF5c1JlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXggJiYgaXNTdHJpY3RcbiAgICAgICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXhcbiAgICAgICAgICAgICAgICA6IHRoaXMuX3dlZWtkYXlzUmVnZXg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3ZWVrZGF5c1Nob3J0UmVnZXgoaXNTdHJpY3QpIHtcbiAgICAgICAgaWYgKHRoaXMuX3dlZWtkYXlzUGFyc2VFeGFjdCkge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfd2Vla2RheXNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgY29tcHV0ZVdlZWtkYXlzUGFyc2UuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc1N0cmljdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1Nob3J0UmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleCA9IGRlZmF1bHRXZWVrZGF5c1Nob3J0UmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTaG9ydFN0cmljdFJlZ2V4ICYmIGlzU3RyaWN0XG4gICAgICAgICAgICAgICAgPyB0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXhcbiAgICAgICAgICAgICAgICA6IHRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdlZWtkYXlzTWluUmVnZXgoaXNTdHJpY3QpIHtcbiAgICAgICAgaWYgKHRoaXMuX3dlZWtkYXlzUGFyc2VFeGFjdCkge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfd2Vla2RheXNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgY29tcHV0ZVdlZWtkYXlzUGFyc2UuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc1N0cmljdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNNaW5SZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzTWluUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzTWluUmVnZXggPSBkZWZhdWx0V2Vla2RheXNNaW5SZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4ICYmIGlzU3RyaWN0XG4gICAgICAgICAgICAgICAgPyB0aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4XG4gICAgICAgICAgICAgICAgOiB0aGlzLl93ZWVrZGF5c01pblJlZ2V4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tcHV0ZVdlZWtkYXlzUGFyc2UoKSB7XG4gICAgICAgIGZ1bmN0aW9uIGNtcExlblJldihhLCBiKSB7XG4gICAgICAgICAgICByZXR1cm4gYi5sZW5ndGggLSBhLmxlbmd0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBtaW5QaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIHNob3J0UGllY2VzID0gW10sXG4gICAgICAgICAgICBsb25nUGllY2VzID0gW10sXG4gICAgICAgICAgICBtaXhlZFBpZWNlcyA9IFtdLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIG1vbSxcbiAgICAgICAgICAgIG1pbnAsXG4gICAgICAgICAgICBzaG9ydHAsXG4gICAgICAgICAgICBsb25ncDtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDc7IGkrKykge1xuICAgICAgICAgICAgLy8gbWFrZSB0aGUgcmVnZXggaWYgd2UgZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5XG4gICAgICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIDFdKS5kYXkoaSk7XG4gICAgICAgICAgICBtaW5wID0gcmVnZXhFc2NhcGUodGhpcy53ZWVrZGF5c01pbihtb20sICcnKSk7XG4gICAgICAgICAgICBzaG9ydHAgPSByZWdleEVzY2FwZSh0aGlzLndlZWtkYXlzU2hvcnQobW9tLCAnJykpO1xuICAgICAgICAgICAgbG9uZ3AgPSByZWdleEVzY2FwZSh0aGlzLndlZWtkYXlzKG1vbSwgJycpKTtcbiAgICAgICAgICAgIG1pblBpZWNlcy5wdXNoKG1pbnApO1xuICAgICAgICAgICAgc2hvcnRQaWVjZXMucHVzaChzaG9ydHApO1xuICAgICAgICAgICAgbG9uZ1BpZWNlcy5wdXNoKGxvbmdwKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2gobWlucCk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKHNob3J0cCk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKGxvbmdwKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBTb3J0aW5nIG1ha2VzIHN1cmUgaWYgb25lIHdlZWtkYXkgKG9yIGFiYnIpIGlzIGEgcHJlZml4IG9mIGFub3RoZXIgaXRcbiAgICAgICAgLy8gd2lsbCBtYXRjaCB0aGUgbG9uZ2VyIHBpZWNlLlxuICAgICAgICBtaW5QaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuICAgICAgICBzaG9ydFBpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIGxvbmdQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuICAgICAgICBtaXhlZFBpZWNlcy5zb3J0KGNtcExlblJldik7XG5cbiAgICAgICAgdGhpcy5fd2Vla2RheXNSZWdleCA9IG5ldyBSZWdFeHAoJ14oJyArIG1peGVkUGllY2VzLmpvaW4oJ3wnKSArICcpJywgJ2knKTtcbiAgICAgICAgdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4ID0gdGhpcy5fd2Vla2RheXNSZWdleDtcbiAgICAgICAgdGhpcy5fd2Vla2RheXNNaW5SZWdleCA9IHRoaXMuX3dlZWtkYXlzUmVnZXg7XG5cbiAgICAgICAgdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleCA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAnXignICsgbG9uZ1BpZWNlcy5qb2luKCd8JykgKyAnKScsXG4gICAgICAgICAgICAnaSdcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fd2Vla2RheXNTaG9ydFN0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBzaG9ydFBpZWNlcy5qb2luKCd8JykgKyAnKScsXG4gICAgICAgICAgICAnaSdcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleCA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAnXignICsgbWluUGllY2VzLmpvaW4oJ3wnKSArICcpJyxcbiAgICAgICAgICAgICdpJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGZ1bmN0aW9uIGhGb3JtYXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhvdXJzKCkgJSAxMiB8fCAxMjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBrRm9ybWF0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ob3VycygpIHx8IDI0O1xuICAgIH1cblxuICAgIGFkZEZvcm1hdFRva2VuKCdIJywgWydISCcsIDJdLCAwLCAnaG91cicpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdoJywgWydoaCcsIDJdLCAwLCBoRm9ybWF0KTtcbiAgICBhZGRGb3JtYXRUb2tlbignaycsIFsna2snLCAyXSwgMCwga0Zvcm1hdCk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignaG1tJywgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gJycgKyBoRm9ybWF0LmFwcGx5KHRoaXMpICsgemVyb0ZpbGwodGhpcy5taW51dGVzKCksIDIpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2htbXNzJywgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgJycgK1xuICAgICAgICAgICAgaEZvcm1hdC5hcHBseSh0aGlzKSArXG4gICAgICAgICAgICB6ZXJvRmlsbCh0aGlzLm1pbnV0ZXMoKSwgMikgK1xuICAgICAgICAgICAgemVyb0ZpbGwodGhpcy5zZWNvbmRzKCksIDIpXG4gICAgICAgICk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignSG1tJywgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gJycgKyB0aGlzLmhvdXJzKCkgKyB6ZXJvRmlsbCh0aGlzLm1pbnV0ZXMoKSwgMik7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignSG1tc3MnLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAnJyArXG4gICAgICAgICAgICB0aGlzLmhvdXJzKCkgK1xuICAgICAgICAgICAgemVyb0ZpbGwodGhpcy5taW51dGVzKCksIDIpICtcbiAgICAgICAgICAgIHplcm9GaWxsKHRoaXMuc2Vjb25kcygpLCAyKVxuICAgICAgICApO1xuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gbWVyaWRpZW0odG9rZW4sIGxvd2VyY2FzZSkge1xuICAgICAgICBhZGRGb3JtYXRUb2tlbih0b2tlbiwgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm1lcmlkaWVtKFxuICAgICAgICAgICAgICAgIHRoaXMuaG91cnMoKSxcbiAgICAgICAgICAgICAgICB0aGlzLm1pbnV0ZXMoKSxcbiAgICAgICAgICAgICAgICBsb3dlcmNhc2VcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG1lcmlkaWVtKCdhJywgdHJ1ZSk7XG4gICAgbWVyaWRpZW0oJ0EnLCBmYWxzZSk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBmdW5jdGlvbiBtYXRjaE1lcmlkaWVtKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5fbWVyaWRpZW1QYXJzZTtcbiAgICB9XG5cbiAgICBhZGRSZWdleFRva2VuKCdhJywgbWF0Y2hNZXJpZGllbSk7XG4gICAgYWRkUmVnZXhUb2tlbignQScsIG1hdGNoTWVyaWRpZW0pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0gnLCBtYXRjaDF0bzIsIG1hdGNoMXRvMkhhc1plcm8pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2gnLCBtYXRjaDF0bzIsIG1hdGNoMXRvMk5vTGVhZGluZ1plcm8pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2snLCBtYXRjaDF0bzIsIG1hdGNoMXRvMk5vTGVhZGluZ1plcm8pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0hIJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2hoJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2trJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuXG4gICAgYWRkUmVnZXhUb2tlbignaG1tJywgbWF0Y2gzdG80KTtcbiAgICBhZGRSZWdleFRva2VuKCdobW1zcycsIG1hdGNoNXRvNik7XG4gICAgYWRkUmVnZXhUb2tlbignSG1tJywgbWF0Y2gzdG80KTtcbiAgICBhZGRSZWdleFRva2VuKCdIbW1zcycsIG1hdGNoNXRvNik7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsnSCcsICdISCddLCBIT1VSKTtcbiAgICBhZGRQYXJzZVRva2VuKFsnaycsICdrayddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgdmFyIGtJbnB1dCA9IHRvSW50KGlucHV0KTtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSBrSW5wdXQgPT09IDI0ID8gMCA6IGtJbnB1dDtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKFsnYScsICdBJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBjb25maWcuX2lzUG0gPSBjb25maWcuX2xvY2FsZS5pc1BNKGlucHV0KTtcbiAgICAgICAgY29uZmlnLl9tZXJpZGllbSA9IGlucHV0O1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oWydoJywgJ2hoJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBhcnJheVtIT1VSXSA9IHRvSW50KGlucHV0KTtcbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuYmlnSG91ciA9IHRydWU7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignaG1tJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIHZhciBwb3MgPSBpbnB1dC5sZW5ndGggLSAyO1xuICAgICAgICBhcnJheVtIT1VSXSA9IHRvSW50KGlucHV0LnN1YnN0cigwLCBwb3MpKTtcbiAgICAgICAgYXJyYXlbTUlOVVRFXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MpKTtcbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuYmlnSG91ciA9IHRydWU7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignaG1tc3MnLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgdmFyIHBvczEgPSBpbnB1dC5sZW5ndGggLSA0LFxuICAgICAgICAgICAgcG9zMiA9IGlucHV0Lmxlbmd0aCAtIDI7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQuc3Vic3RyKDAsIHBvczEpKTtcbiAgICAgICAgYXJyYXlbTUlOVVRFXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MxLCAyKSk7XG4gICAgICAgIGFycmF5W1NFQ09ORF0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zMikpO1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdIbW0nLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgdmFyIHBvcyA9IGlucHV0Lmxlbmd0aCAtIDI7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQuc3Vic3RyKDAsIHBvcykpO1xuICAgICAgICBhcnJheVtNSU5VVEVdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvcykpO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ0htbXNzJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIHZhciBwb3MxID0gaW5wdXQubGVuZ3RoIC0gNCxcbiAgICAgICAgICAgIHBvczIgPSBpbnB1dC5sZW5ndGggLSAyO1xuICAgICAgICBhcnJheVtIT1VSXSA9IHRvSW50KGlucHV0LnN1YnN0cigwLCBwb3MxKSk7XG4gICAgICAgIGFycmF5W01JTlVURV0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zMSwgMikpO1xuICAgICAgICBhcnJheVtTRUNPTkRdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvczIpKTtcbiAgICB9KTtcblxuICAgIC8vIExPQ0FMRVNcblxuICAgIGZ1bmN0aW9uIGxvY2FsZUlzUE0oaW5wdXQpIHtcbiAgICAgICAgLy8gSUU4IFF1aXJrcyBNb2RlICYgSUU3IFN0YW5kYXJkcyBNb2RlIGRvIG5vdCBhbGxvdyBhY2Nlc3Npbmcgc3RyaW5ncyBsaWtlIGFycmF5c1xuICAgICAgICAvLyBVc2luZyBjaGFyQXQgc2hvdWxkIGJlIG1vcmUgY29tcGF0aWJsZS5cbiAgICAgICAgcmV0dXJuIChpbnB1dCArICcnKS50b0xvd2VyQ2FzZSgpLmNoYXJBdCgwKSA9PT0gJ3AnO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0TG9jYWxlTWVyaWRpZW1QYXJzZSA9IC9bYXBdXFwuP20/XFwuPy9pLFxuICAgICAgICAvLyBTZXR0aW5nIHRoZSBob3VyIHNob3VsZCBrZWVwIHRoZSB0aW1lLCBiZWNhdXNlIHRoZSB1c2VyIGV4cGxpY2l0bHlcbiAgICAgICAgLy8gc3BlY2lmaWVkIHdoaWNoIGhvdXIgdGhleSB3YW50LiBTbyB0cnlpbmcgdG8gbWFpbnRhaW4gdGhlIHNhbWUgaG91ciAoaW5cbiAgICAgICAgLy8gYSBuZXcgdGltZXpvbmUpIG1ha2VzIHNlbnNlLiBBZGRpbmcvc3VidHJhY3RpbmcgaG91cnMgZG9lcyBub3QgZm9sbG93XG4gICAgICAgIC8vIHRoaXMgcnVsZS5cbiAgICAgICAgZ2V0U2V0SG91ciA9IG1ha2VHZXRTZXQoJ0hvdXJzJywgdHJ1ZSk7XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVNZXJpZGllbShob3VycywgbWludXRlcywgaXNMb3dlcikge1xuICAgICAgICBpZiAoaG91cnMgPiAxMSkge1xuICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAncG0nIDogJ1BNJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBpc0xvd2VyID8gJ2FtJyA6ICdBTSc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgYmFzZUNvbmZpZyA9IHtcbiAgICAgICAgY2FsZW5kYXI6IGRlZmF1bHRDYWxlbmRhcixcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IGRlZmF1bHRMb25nRGF0ZUZvcm1hdCxcbiAgICAgICAgaW52YWxpZERhdGU6IGRlZmF1bHRJbnZhbGlkRGF0ZSxcbiAgICAgICAgb3JkaW5hbDogZGVmYXVsdE9yZGluYWwsXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IGRlZmF1bHREYXlPZk1vbnRoT3JkaW5hbFBhcnNlLFxuICAgICAgICByZWxhdGl2ZVRpbWU6IGRlZmF1bHRSZWxhdGl2ZVRpbWUsXG5cbiAgICAgICAgbW9udGhzOiBkZWZhdWx0TG9jYWxlTW9udGhzLFxuICAgICAgICBtb250aHNTaG9ydDogZGVmYXVsdExvY2FsZU1vbnRoc1Nob3J0LFxuXG4gICAgICAgIHdlZWs6IGRlZmF1bHRMb2NhbGVXZWVrLFxuXG4gICAgICAgIHdlZWtkYXlzOiBkZWZhdWx0TG9jYWxlV2Vla2RheXMsXG4gICAgICAgIHdlZWtkYXlzTWluOiBkZWZhdWx0TG9jYWxlV2Vla2RheXNNaW4sXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6IGRlZmF1bHRMb2NhbGVXZWVrZGF5c1Nob3J0LFxuXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IGRlZmF1bHRMb2NhbGVNZXJpZGllbVBhcnNlLFxuICAgIH07XG5cbiAgICAvLyBpbnRlcm5hbCBzdG9yYWdlIGZvciBsb2NhbGUgY29uZmlnIGZpbGVzXG4gICAgdmFyIGxvY2FsZXMgPSB7fSxcbiAgICAgICAgbG9jYWxlRmFtaWxpZXMgPSB7fSxcbiAgICAgICAgZ2xvYmFsTG9jYWxlO1xuXG4gICAgZnVuY3Rpb24gY29tbW9uUHJlZml4KGFycjEsIGFycjIpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBtaW5sID0gTWF0aC5taW4oYXJyMS5sZW5ndGgsIGFycjIubGVuZ3RoKTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IG1pbmw7IGkgKz0gMSkge1xuICAgICAgICAgICAgaWYgKGFycjFbaV0gIT09IGFycjJbaV0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWlubDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBub3JtYWxpemVMb2NhbGUoa2V5KSB7XG4gICAgICAgIHJldHVybiBrZXkgPyBrZXkudG9Mb3dlckNhc2UoKS5yZXBsYWNlKCdfJywgJy0nKSA6IGtleTtcbiAgICB9XG5cbiAgICAvLyBwaWNrIHRoZSBsb2NhbGUgZnJvbSB0aGUgYXJyYXlcbiAgICAvLyB0cnkgWydlbi1hdScsICdlbi1nYiddIGFzICdlbi1hdScsICdlbi1nYicsICdlbicsIGFzIGluIG1vdmUgdGhyb3VnaCB0aGUgbGlzdCB0cnlpbmcgZWFjaFxuICAgIC8vIHN1YnN0cmluZyBmcm9tIG1vc3Qgc3BlY2lmaWMgdG8gbGVhc3QsIGJ1dCBtb3ZlIHRvIHRoZSBuZXh0IGFycmF5IGl0ZW0gaWYgaXQncyBhIG1vcmUgc3BlY2lmaWMgdmFyaWFudCB0aGFuIHRoZSBjdXJyZW50IHJvb3RcbiAgICBmdW5jdGlvbiBjaG9vc2VMb2NhbGUobmFtZXMpIHtcbiAgICAgICAgdmFyIGkgPSAwLFxuICAgICAgICAgICAgaixcbiAgICAgICAgICAgIG5leHQsXG4gICAgICAgICAgICBsb2NhbGUsXG4gICAgICAgICAgICBzcGxpdDtcblxuICAgICAgICB3aGlsZSAoaSA8IG5hbWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgc3BsaXQgPSBub3JtYWxpemVMb2NhbGUobmFtZXNbaV0pLnNwbGl0KCctJyk7XG4gICAgICAgICAgICBqID0gc3BsaXQubGVuZ3RoO1xuICAgICAgICAgICAgbmV4dCA9IG5vcm1hbGl6ZUxvY2FsZShuYW1lc1tpICsgMV0pO1xuICAgICAgICAgICAgbmV4dCA9IG5leHQgPyBuZXh0LnNwbGl0KCctJykgOiBudWxsO1xuICAgICAgICAgICAgd2hpbGUgKGogPiAwKSB7XG4gICAgICAgICAgICAgICAgbG9jYWxlID0gbG9hZExvY2FsZShzcGxpdC5zbGljZSgwLCBqKS5qb2luKCctJykpO1xuICAgICAgICAgICAgICAgIGlmIChsb2NhbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxvY2FsZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBuZXh0ICYmXG4gICAgICAgICAgICAgICAgICAgIG5leHQubGVuZ3RoID49IGogJiZcbiAgICAgICAgICAgICAgICAgICAgY29tbW9uUHJlZml4KHNwbGl0LCBuZXh0KSA+PSBqIC0gMVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAvL3RoZSBuZXh0IGFycmF5IGl0ZW0gaXMgYmV0dGVyIHRoYW4gYSBzaGFsbG93ZXIgc3Vic3RyaW5nIG9mIHRoaXMgb25lXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBqLS07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpKys7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdsb2JhbExvY2FsZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0xvY2FsZU5hbWVTYW5lKG5hbWUpIHtcbiAgICAgICAgLy8gUHJldmVudCBuYW1lcyB0aGF0IGxvb2sgbGlrZSBmaWxlc3lzdGVtIHBhdGhzLCBpLmUgY29udGFpbiAnLycgb3IgJ1xcJ1xuICAgICAgICAvLyBFbnN1cmUgbmFtZSBpcyBhdmFpbGFibGUgYW5kIGZ1bmN0aW9uIHJldHVybnMgYm9vbGVhblxuICAgICAgICByZXR1cm4gISEobmFtZSAmJiBuYW1lLm1hdGNoKCdeW14vXFxcXFxcXFxdKiQnKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9hZExvY2FsZShuYW1lKSB7XG4gICAgICAgIHZhciBvbGRMb2NhbGUgPSBudWxsLFxuICAgICAgICAgICAgYWxpYXNlZFJlcXVpcmU7XG4gICAgICAgIC8vIFRPRE86IEZpbmQgYSBiZXR0ZXIgd2F5IHRvIHJlZ2lzdGVyIGFuZCBsb2FkIGFsbCB0aGUgbG9jYWxlcyBpbiBOb2RlXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0gPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgIG1vZHVsZSAmJlxuICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgJiZcbiAgICAgICAgICAgIGlzTG9jYWxlTmFtZVNhbmUobmFtZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIG9sZExvY2FsZSA9IGdsb2JhbExvY2FsZS5fYWJicjtcbiAgICAgICAgICAgICAgICBhbGlhc2VkUmVxdWlyZSA9IHJlcXVpcmU7XG4gICAgICAgICAgICAgICAgYWxpYXNlZFJlcXVpcmUoJy4vbG9jYWxlLycgKyBuYW1lKTtcbiAgICAgICAgICAgICAgICBnZXRTZXRHbG9iYWxMb2NhbGUob2xkTG9jYWxlKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAvLyBtYXJrIGFzIG5vdCBmb3VuZCB0byBhdm9pZCByZXBlYXRpbmcgZXhwZW5zaXZlIGZpbGUgcmVxdWlyZSBjYWxsIGNhdXNpbmcgaGlnaCBDUFVcbiAgICAgICAgICAgICAgICAvLyB3aGVuIHRyeWluZyB0byBmaW5kIGVuLVVTLCBlbl9VUywgZW4tdXMgZm9yIGV2ZXJ5IGZvcm1hdCBjYWxsXG4gICAgICAgICAgICAgICAgbG9jYWxlc1tuYW1lXSA9IG51bGw7IC8vIG51bGwgbWVhbnMgbm90IGZvdW5kXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxvY2FsZXNbbmFtZV07XG4gICAgfVxuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIGxvYWQgbG9jYWxlIGFuZCB0aGVuIHNldCB0aGUgZ2xvYmFsIGxvY2FsZS4gIElmXG4gICAgLy8gbm8gYXJndW1lbnRzIGFyZSBwYXNzZWQgaW4sIGl0IHdpbGwgc2ltcGx5IHJldHVybiB0aGUgY3VycmVudCBnbG9iYWxcbiAgICAvLyBsb2NhbGUga2V5LlxuICAgIGZ1bmN0aW9uIGdldFNldEdsb2JhbExvY2FsZShrZXksIHZhbHVlcykge1xuICAgICAgICB2YXIgZGF0YTtcbiAgICAgICAgaWYgKGtleSkge1xuICAgICAgICAgICAgaWYgKGlzVW5kZWZpbmVkKHZhbHVlcykpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gZ2V0TG9jYWxlKGtleSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBkZWZpbmVMb2NhbGUoa2V5LCB2YWx1ZXMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAgIC8vIG1vbWVudC5kdXJhdGlvbi5fbG9jYWxlID0gbW9tZW50Ll9sb2NhbGUgPSBkYXRhO1xuICAgICAgICAgICAgICAgIGdsb2JhbExvY2FsZSA9IGRhdGE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiYgY29uc29sZS53YXJuKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vd2FybiB1c2VyIGlmIGFyZ3VtZW50cyBhcmUgcGFzc2VkIGJ1dCB0aGUgbG9jYWxlIGNvdWxkIG5vdCBiZSBzZXRcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0xvY2FsZSAnICsga2V5ICsgJyBub3QgZm91bmQuIERpZCB5b3UgZm9yZ2V0IHRvIGxvYWQgaXQ/J1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBnbG9iYWxMb2NhbGUuX2FiYnI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGVmaW5lTG9jYWxlKG5hbWUsIGNvbmZpZykge1xuICAgICAgICBpZiAoY29uZmlnICE9PSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgbG9jYWxlLFxuICAgICAgICAgICAgICAgIHBhcmVudENvbmZpZyA9IGJhc2VDb25maWc7XG4gICAgICAgICAgICBjb25maWcuYWJiciA9IG5hbWU7XG4gICAgICAgICAgICBpZiAobG9jYWxlc1tuYW1lXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgZGVwcmVjYXRlU2ltcGxlKFxuICAgICAgICAgICAgICAgICAgICAnZGVmaW5lTG9jYWxlT3ZlcnJpZGUnLFxuICAgICAgICAgICAgICAgICAgICAndXNlIG1vbWVudC51cGRhdGVMb2NhbGUobG9jYWxlTmFtZSwgY29uZmlnKSB0byBjaGFuZ2UgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnYW4gZXhpc3RpbmcgbG9jYWxlLiBtb21lbnQuZGVmaW5lTG9jYWxlKGxvY2FsZU5hbWUsICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbmZpZykgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgY3JlYXRpbmcgYSBuZXcgbG9jYWxlICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ1NlZSBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2RlZmluZS1sb2NhbGUvIGZvciBtb3JlIGluZm8uJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gbG9jYWxlc1tuYW1lXS5fY29uZmlnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjb25maWcucGFyZW50TG9jYWxlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAobG9jYWxlc1tjb25maWcucGFyZW50TG9jYWxlXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudENvbmZpZyA9IGxvY2FsZXNbY29uZmlnLnBhcmVudExvY2FsZV0uX2NvbmZpZztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsb2NhbGUgPSBsb2FkTG9jYWxlKGNvbmZpZy5wYXJlbnRMb2NhbGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobG9jYWxlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudENvbmZpZyA9IGxvY2FsZS5fY29uZmlnO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsb2NhbGVGYW1pbGllc1tjb25maWcucGFyZW50TG9jYWxlXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsZUZhbWlsaWVzW2NvbmZpZy5wYXJlbnRMb2NhbGVdID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbGVGYW1pbGllc1tjb25maWcucGFyZW50TG9jYWxlXS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZzogY29uZmlnLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0gPSBuZXcgTG9jYWxlKG1lcmdlQ29uZmlncyhwYXJlbnRDb25maWcsIGNvbmZpZykpO1xuXG4gICAgICAgICAgICBpZiAobG9jYWxlRmFtaWxpZXNbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICBsb2NhbGVGYW1pbGllc1tuYW1lXS5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIGRlZmluZUxvY2FsZSh4Lm5hbWUsIHguY29uZmlnKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gYmFja3dhcmRzIGNvbXBhdCBmb3Igbm93OiBhbHNvIHNldCB0aGUgbG9jYWxlXG4gICAgICAgICAgICAvLyBtYWtlIHN1cmUgd2Ugc2V0IHRoZSBsb2NhbGUgQUZURVIgYWxsIGNoaWxkIGxvY2FsZXMgaGF2ZSBiZWVuXG4gICAgICAgICAgICAvLyBjcmVhdGVkLCBzbyB3ZSB3b24ndCBlbmQgdXAgd2l0aCB0aGUgY2hpbGQgbG9jYWxlIHNldC5cbiAgICAgICAgICAgIGdldFNldEdsb2JhbExvY2FsZShuYW1lKTtcblxuICAgICAgICAgICAgcmV0dXJuIGxvY2FsZXNbbmFtZV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyB1c2VmdWwgZm9yIHRlc3RpbmdcbiAgICAgICAgICAgIGRlbGV0ZSBsb2NhbGVzW25hbWVdO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1cGRhdGVMb2NhbGUobmFtZSwgY29uZmlnKSB7XG4gICAgICAgIGlmIChjb25maWcgIT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIGxvY2FsZSxcbiAgICAgICAgICAgICAgICB0bXBMb2NhbGUsXG4gICAgICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gYmFzZUNvbmZpZztcblxuICAgICAgICAgICAgaWYgKGxvY2FsZXNbbmFtZV0gIT0gbnVsbCAmJiBsb2NhbGVzW25hbWVdLnBhcmVudExvY2FsZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gVXBkYXRlIGV4aXN0aW5nIGNoaWxkIGxvY2FsZSBpbi1wbGFjZSB0byBhdm9pZCBtZW1vcnktbGVha3NcbiAgICAgICAgICAgICAgICBsb2NhbGVzW25hbWVdLnNldChtZXJnZUNvbmZpZ3MobG9jYWxlc1tuYW1lXS5fY29uZmlnLCBjb25maWcpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gTUVSR0VcbiAgICAgICAgICAgICAgICB0bXBMb2NhbGUgPSBsb2FkTG9jYWxlKG5hbWUpO1xuICAgICAgICAgICAgICAgIGlmICh0bXBMb2NhbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSB0bXBMb2NhbGUuX2NvbmZpZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uZmlnID0gbWVyZ2VDb25maWdzKHBhcmVudENvbmZpZywgY29uZmlnKTtcbiAgICAgICAgICAgICAgICBpZiAodG1wTG9jYWxlID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdXBkYXRlTG9jYWxlIGlzIGNhbGxlZCBmb3IgY3JlYXRpbmcgYSBuZXcgbG9jYWxlXG4gICAgICAgICAgICAgICAgICAgIC8vIFNldCBhYmJyIHNvIGl0IHdpbGwgaGF2ZSBhIG5hbWUgKGdldHRlcnMgcmV0dXJuXG4gICAgICAgICAgICAgICAgICAgIC8vIHVuZGVmaW5lZCBvdGhlcndpc2UpLlxuICAgICAgICAgICAgICAgICAgICBjb25maWcuYWJiciA9IG5hbWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxvY2FsZSA9IG5ldyBMb2NhbGUoY29uZmlnKTtcbiAgICAgICAgICAgICAgICBsb2NhbGUucGFyZW50TG9jYWxlID0gbG9jYWxlc1tuYW1lXTtcbiAgICAgICAgICAgICAgICBsb2NhbGVzW25hbWVdID0gbG9jYWxlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBiYWNrd2FyZHMgY29tcGF0IGZvciBub3c6IGFsc28gc2V0IHRoZSBsb2NhbGVcbiAgICAgICAgICAgIGdldFNldEdsb2JhbExvY2FsZShuYW1lKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHBhc3MgbnVsbCBmb3IgY29uZmlnIHRvIHVudXBkYXRlLCB1c2VmdWwgZm9yIHRlc3RzXG4gICAgICAgICAgICBpZiAobG9jYWxlc1tuYW1lXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKGxvY2FsZXNbbmFtZV0ucGFyZW50TG9jYWxlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxlc1tuYW1lXSA9IGxvY2FsZXNbbmFtZV0ucGFyZW50TG9jYWxlO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSA9PT0gZ2V0U2V0R2xvYmFsTG9jYWxlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldFNldEdsb2JhbExvY2FsZShuYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobG9jYWxlc1tuYW1lXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBsb2NhbGVzW25hbWVdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbG9jYWxlc1tuYW1lXTtcbiAgICB9XG5cbiAgICAvLyByZXR1cm5zIGxvY2FsZSBkYXRhXG4gICAgZnVuY3Rpb24gZ2V0TG9jYWxlKGtleSkge1xuICAgICAgICB2YXIgbG9jYWxlO1xuXG4gICAgICAgIGlmIChrZXkgJiYga2V5Ll9sb2NhbGUgJiYga2V5Ll9sb2NhbGUuX2FiYnIpIHtcbiAgICAgICAgICAgIGtleSA9IGtleS5fbG9jYWxlLl9hYmJyO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFrZXkpIHtcbiAgICAgICAgICAgIHJldHVybiBnbG9iYWxMb2NhbGU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzQXJyYXkoa2V5KSkge1xuICAgICAgICAgICAgLy9zaG9ydC1jaXJjdWl0IGV2ZXJ5dGhpbmcgZWxzZVxuICAgICAgICAgICAgbG9jYWxlID0gbG9hZExvY2FsZShrZXkpO1xuICAgICAgICAgICAgaWYgKGxvY2FsZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBsb2NhbGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBrZXkgPSBba2V5XTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjaG9vc2VMb2NhbGUoa2V5KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0TG9jYWxlcygpIHtcbiAgICAgICAgcmV0dXJuIGtleXMobG9jYWxlcyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2hlY2tPdmVyZmxvdyhtKSB7XG4gICAgICAgIHZhciBvdmVyZmxvdyxcbiAgICAgICAgICAgIGEgPSBtLl9hO1xuXG4gICAgICAgIGlmIChhICYmIGdldFBhcnNpbmdGbGFncyhtKS5vdmVyZmxvdyA9PT0gLTIpIHtcbiAgICAgICAgICAgIG92ZXJmbG93ID1cbiAgICAgICAgICAgICAgICBhW01PTlRIXSA8IDAgfHwgYVtNT05USF0gPiAxMVxuICAgICAgICAgICAgICAgICAgICA/IE1PTlRIXG4gICAgICAgICAgICAgICAgICAgIDogYVtEQVRFXSA8IDEgfHwgYVtEQVRFXSA+IGRheXNJbk1vbnRoKGFbWUVBUl0sIGFbTU9OVEhdKVxuICAgICAgICAgICAgICAgICAgICAgID8gREFURVxuICAgICAgICAgICAgICAgICAgICAgIDogYVtIT1VSXSA8IDAgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYVtIT1VSXSA+IDI0IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgIChhW0hPVVJdID09PSAyNCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFbTUlOVVRFXSAhPT0gMCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFbU0VDT05EXSAhPT0gMCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFbTUlMTElTRUNPTkRdICE9PSAwKSlcbiAgICAgICAgICAgICAgICAgICAgICAgID8gSE9VUlxuICAgICAgICAgICAgICAgICAgICAgICAgOiBhW01JTlVURV0gPCAwIHx8IGFbTUlOVVRFXSA+IDU5XG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gTUlOVVRFXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogYVtTRUNPTkRdIDwgMCB8fCBhW1NFQ09ORF0gPiA1OVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gU0VDT05EXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBhW01JTExJU0VDT05EXSA8IDAgfHwgYVtNSUxMSVNFQ09ORF0gPiA5OTlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gTUlMTElTRUNPTkRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogLTE7XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MobSkuX292ZXJmbG93RGF5T2ZZZWFyICYmXG4gICAgICAgICAgICAgICAgKG92ZXJmbG93IDwgWUVBUiB8fCBvdmVyZmxvdyA+IERBVEUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBvdmVyZmxvdyA9IERBVEU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZ2V0UGFyc2luZ0ZsYWdzKG0pLl9vdmVyZmxvd1dlZWtzICYmIG92ZXJmbG93ID09PSAtMSkge1xuICAgICAgICAgICAgICAgIG92ZXJmbG93ID0gV0VFSztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChnZXRQYXJzaW5nRmxhZ3MobSkuX292ZXJmbG93V2Vla2RheSAmJiBvdmVyZmxvdyA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBvdmVyZmxvdyA9IFdFRUtEQVk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhtKS5vdmVyZmxvdyA9IG92ZXJmbG93O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgLy8gaXNvIDg2MDEgcmVnZXhcbiAgICAvLyAwMDAwLTAwLTAwIDAwMDAtVzAwIG9yIDAwMDAtVzAwLTAgKyBUICsgMDAgb3IgMDA6MDAgb3IgMDA6MDA6MDAgb3IgMDA6MDA6MDAuMDAwICsgKzAwOjAwIG9yICswMDAwIG9yICswMClcbiAgICB2YXIgZXh0ZW5kZWRJc29SZWdleCA9XG4gICAgICAgICAgICAvXlxccyooKD86WystXVxcZHs2fXxcXGR7NH0pLSg/OlxcZFxcZC1cXGRcXGR8V1xcZFxcZC1cXGR8V1xcZFxcZHxcXGRcXGRcXGR8XFxkXFxkKSkoPzooVHwgKShcXGRcXGQoPzo6XFxkXFxkKD86OlxcZFxcZCg/OlsuLF1cXGQrKT8pPyk/KShbKy1dXFxkXFxkKD86Oj9cXGRcXGQpP3xcXHMqWik/KT8kLyxcbiAgICAgICAgYmFzaWNJc29SZWdleCA9XG4gICAgICAgICAgICAvXlxccyooKD86WystXVxcZHs2fXxcXGR7NH0pKD86XFxkXFxkXFxkXFxkfFdcXGRcXGRcXGR8V1xcZFxcZHxcXGRcXGRcXGR8XFxkXFxkfCkpKD86KFR8ICkoXFxkXFxkKD86XFxkXFxkKD86XFxkXFxkKD86Wy4sXVxcZCspPyk/KT8pKFsrLV1cXGRcXGQoPzo6P1xcZFxcZCk/fFxccypaKT8pPyQvLFxuICAgICAgICB0elJlZ2V4ID0gL1p8WystXVxcZFxcZCg/Ojo/XFxkXFxkKT8vLFxuICAgICAgICBpc29EYXRlcyA9IFtcbiAgICAgICAgICAgIFsnWVlZWVlZLU1NLUREJywgL1srLV1cXGR7Nn0tXFxkXFxkLVxcZFxcZC9dLFxuICAgICAgICAgICAgWydZWVlZLU1NLUREJywgL1xcZHs0fS1cXGRcXGQtXFxkXFxkL10sXG4gICAgICAgICAgICBbJ0dHR0ctW1ddV1ctRScsIC9cXGR7NH0tV1xcZFxcZC1cXGQvXSxcbiAgICAgICAgICAgIFsnR0dHRy1bV11XVycsIC9cXGR7NH0tV1xcZFxcZC8sIGZhbHNlXSxcbiAgICAgICAgICAgIFsnWVlZWS1EREQnLCAvXFxkezR9LVxcZHszfS9dLFxuICAgICAgICAgICAgWydZWVlZLU1NJywgL1xcZHs0fS1cXGRcXGQvLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ1lZWVlZWU1NREQnLCAvWystXVxcZHsxMH0vXSxcbiAgICAgICAgICAgIFsnWVlZWU1NREQnLCAvXFxkezh9L10sXG4gICAgICAgICAgICBbJ0dHR0dbV11XV0UnLCAvXFxkezR9V1xcZHszfS9dLFxuICAgICAgICAgICAgWydHR0dHW1ddV1cnLCAvXFxkezR9V1xcZHsyfS8sIGZhbHNlXSxcbiAgICAgICAgICAgIFsnWVlZWURERCcsIC9cXGR7N30vXSxcbiAgICAgICAgICAgIFsnWVlZWU1NJywgL1xcZHs2fS8sIGZhbHNlXSxcbiAgICAgICAgICAgIFsnWVlZWScsIC9cXGR7NH0vLCBmYWxzZV0sXG4gICAgICAgIF0sXG4gICAgICAgIC8vIGlzbyB0aW1lIGZvcm1hdHMgYW5kIHJlZ2V4ZXNcbiAgICAgICAgaXNvVGltZXMgPSBbXG4gICAgICAgICAgICBbJ0hIOm1tOnNzLlNTU1MnLCAvXFxkXFxkOlxcZFxcZDpcXGRcXGRcXC5cXGQrL10sXG4gICAgICAgICAgICBbJ0hIOm1tOnNzLFNTU1MnLCAvXFxkXFxkOlxcZFxcZDpcXGRcXGQsXFxkKy9dLFxuICAgICAgICAgICAgWydISDptbTpzcycsIC9cXGRcXGQ6XFxkXFxkOlxcZFxcZC9dLFxuICAgICAgICAgICAgWydISDptbScsIC9cXGRcXGQ6XFxkXFxkL10sXG4gICAgICAgICAgICBbJ0hIbW1zcy5TU1NTJywgL1xcZFxcZFxcZFxcZFxcZFxcZFxcLlxcZCsvXSxcbiAgICAgICAgICAgIFsnSEhtbXNzLFNTU1MnLCAvXFxkXFxkXFxkXFxkXFxkXFxkLFxcZCsvXSxcbiAgICAgICAgICAgIFsnSEhtbXNzJywgL1xcZFxcZFxcZFxcZFxcZFxcZC9dLFxuICAgICAgICAgICAgWydISG1tJywgL1xcZFxcZFxcZFxcZC9dLFxuICAgICAgICAgICAgWydISCcsIC9cXGRcXGQvXSxcbiAgICAgICAgXSxcbiAgICAgICAgYXNwTmV0SnNvblJlZ2V4ID0gL15cXC8/RGF0ZVxcKCgtP1xcZCspL2ksXG4gICAgICAgIC8vIFJGQyAyODIyIHJlZ2V4OiBGb3IgZGV0YWlscyBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzI4MjIjc2VjdGlvbi0zLjNcbiAgICAgICAgcmZjMjgyMiA9XG4gICAgICAgICAgICAvXig/OihNb258VHVlfFdlZHxUaHV8RnJpfFNhdHxTdW4pLD9cXHMpPyhcXGR7MSwyfSlcXHMoSmFufEZlYnxNYXJ8QXByfE1heXxKdW58SnVsfEF1Z3xTZXB8T2N0fE5vdnxEZWMpXFxzKFxcZHsyLDR9KVxccyhcXGRcXGQpOihcXGRcXGQpKD86OihcXGRcXGQpKT9cXHMoPzooVVR8R01UfFtFQ01QXVtTRF1UKXwoW1p6XSl8KFsrLV1cXGR7NH0pKSQvLFxuICAgICAgICBvYnNPZmZzZXRzID0ge1xuICAgICAgICAgICAgVVQ6IDAsXG4gICAgICAgICAgICBHTVQ6IDAsXG4gICAgICAgICAgICBFRFQ6IC00ICogNjAsXG4gICAgICAgICAgICBFU1Q6IC01ICogNjAsXG4gICAgICAgICAgICBDRFQ6IC01ICogNjAsXG4gICAgICAgICAgICBDU1Q6IC02ICogNjAsXG4gICAgICAgICAgICBNRFQ6IC02ICogNjAsXG4gICAgICAgICAgICBNU1Q6IC03ICogNjAsXG4gICAgICAgICAgICBQRFQ6IC03ICogNjAsXG4gICAgICAgICAgICBQU1Q6IC04ICogNjAsXG4gICAgICAgIH07XG5cbiAgICAvLyBkYXRlIGZyb20gaXNvIGZvcm1hdFxuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21JU08oY29uZmlnKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIHN0cmluZyA9IGNvbmZpZy5faSxcbiAgICAgICAgICAgIG1hdGNoID0gZXh0ZW5kZWRJc29SZWdleC5leGVjKHN0cmluZykgfHwgYmFzaWNJc29SZWdleC5leGVjKHN0cmluZyksXG4gICAgICAgICAgICBhbGxvd1RpbWUsXG4gICAgICAgICAgICBkYXRlRm9ybWF0LFxuICAgICAgICAgICAgdGltZUZvcm1hdCxcbiAgICAgICAgICAgIHR6Rm9ybWF0LFxuICAgICAgICAgICAgaXNvRGF0ZXNMZW4gPSBpc29EYXRlcy5sZW5ndGgsXG4gICAgICAgICAgICBpc29UaW1lc0xlbiA9IGlzb1RpbWVzLmxlbmd0aDtcblxuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmlzbyA9IHRydWU7XG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBsID0gaXNvRGF0ZXNMZW47IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNvRGF0ZXNbaV1bMV0uZXhlYyhtYXRjaFsxXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0ZUZvcm1hdCA9IGlzb0RhdGVzW2ldWzBdO1xuICAgICAgICAgICAgICAgICAgICBhbGxvd1RpbWUgPSBpc29EYXRlc1tpXVsyXSAhPT0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRlRm9ybWF0ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWF0Y2hbM10pIHtcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBsID0gaXNvVGltZXNMZW47IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzb1RpbWVzW2ldWzFdLmV4ZWMobWF0Y2hbM10pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBtYXRjaFsyXSBzaG91bGQgYmUgJ1QnIG9yIHNwYWNlXG4gICAgICAgICAgICAgICAgICAgICAgICB0aW1lRm9ybWF0ID0gKG1hdGNoWzJdIHx8ICcgJykgKyBpc29UaW1lc1tpXVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aW1lRm9ybWF0ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWFsbG93VGltZSAmJiB0aW1lRm9ybWF0ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWF0Y2hbNF0pIHtcbiAgICAgICAgICAgICAgICBpZiAodHpSZWdleC5leGVjKG1hdGNoWzRdKSkge1xuICAgICAgICAgICAgICAgICAgICB0ekZvcm1hdCA9ICdaJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbmZpZy5fZiA9IGRhdGVGb3JtYXQgKyAodGltZUZvcm1hdCB8fCAnJykgKyAodHpGb3JtYXQgfHwgJycpO1xuICAgICAgICAgICAgY29uZmlnRnJvbVN0cmluZ0FuZEZvcm1hdChjb25maWcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBleHRyYWN0RnJvbVJGQzI4MjJTdHJpbmdzKFxuICAgICAgICB5ZWFyU3RyLFxuICAgICAgICBtb250aFN0cixcbiAgICAgICAgZGF5U3RyLFxuICAgICAgICBob3VyU3RyLFxuICAgICAgICBtaW51dGVTdHIsXG4gICAgICAgIHNlY29uZFN0clxuICAgICkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gW1xuICAgICAgICAgICAgdW50cnVuY2F0ZVllYXIoeWVhclN0ciksXG4gICAgICAgICAgICBkZWZhdWx0TG9jYWxlTW9udGhzU2hvcnQuaW5kZXhPZihtb250aFN0ciksXG4gICAgICAgICAgICBwYXJzZUludChkYXlTdHIsIDEwKSxcbiAgICAgICAgICAgIHBhcnNlSW50KGhvdXJTdHIsIDEwKSxcbiAgICAgICAgICAgIHBhcnNlSW50KG1pbnV0ZVN0ciwgMTApLFxuICAgICAgICBdO1xuXG4gICAgICAgIGlmIChzZWNvbmRTdHIpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHBhcnNlSW50KHNlY29uZFN0ciwgMTApKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdW50cnVuY2F0ZVllYXIoeWVhclN0cikge1xuICAgICAgICB2YXIgeWVhciA9IHBhcnNlSW50KHllYXJTdHIsIDEwKTtcbiAgICAgICAgaWYgKHllYXIgPD0gNDkpIHtcbiAgICAgICAgICAgIHJldHVybiAyMDAwICsgeWVhcjtcbiAgICAgICAgfSBlbHNlIGlmICh5ZWFyIDw9IDk5OSkge1xuICAgICAgICAgICAgcmV0dXJuIDE5MDAgKyB5ZWFyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB5ZWFyO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHByZXByb2Nlc3NSRkMyODIyKHMpIHtcbiAgICAgICAgLy8gUmVtb3ZlIGNvbW1lbnRzIGFuZCBmb2xkaW5nIHdoaXRlc3BhY2UgYW5kIHJlcGxhY2UgbXVsdGlwbGUtc3BhY2VzIHdpdGggYSBzaW5nbGUgc3BhY2VcbiAgICAgICAgcmV0dXJuIHNcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXChbXigpXSpcXCl8W1xcblxcdF0vZywgJyAnKVxuICAgICAgICAgICAgLnJlcGxhY2UoLyhcXHNcXHMrKS9nLCAnICcpXG4gICAgICAgICAgICAucmVwbGFjZSgvXlxcc1xccyovLCAnJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXHNcXHMqJC8sICcnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjaGVja1dlZWtkYXkod2Vla2RheVN0ciwgcGFyc2VkSW5wdXQsIGNvbmZpZykge1xuICAgICAgICBpZiAod2Vla2RheVN0cikge1xuICAgICAgICAgICAgLy8gVE9ETzogUmVwbGFjZSB0aGUgdmFuaWxsYSBKUyBEYXRlIG9iamVjdCB3aXRoIGFuIGluZGVwZW5kZW50IGRheS1vZi13ZWVrIGNoZWNrLlxuICAgICAgICAgICAgdmFyIHdlZWtkYXlQcm92aWRlZCA9IGRlZmF1bHRMb2NhbGVXZWVrZGF5c1Nob3J0LmluZGV4T2Yod2Vla2RheVN0ciksXG4gICAgICAgICAgICAgICAgd2Vla2RheUFjdHVhbCA9IG5ldyBEYXRlKFxuICAgICAgICAgICAgICAgICAgICBwYXJzZWRJbnB1dFswXSxcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkSW5wdXRbMV0sXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlZElucHV0WzJdXG4gICAgICAgICAgICAgICAgKS5nZXREYXkoKTtcbiAgICAgICAgICAgIGlmICh3ZWVrZGF5UHJvdmlkZWQgIT09IHdlZWtkYXlBY3R1YWwpIHtcbiAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS53ZWVrZGF5TWlzbWF0Y2ggPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjYWxjdWxhdGVPZmZzZXQob2JzT2Zmc2V0LCBtaWxpdGFyeU9mZnNldCwgbnVtT2Zmc2V0KSB7XG4gICAgICAgIGlmIChvYnNPZmZzZXQpIHtcbiAgICAgICAgICAgIHJldHVybiBvYnNPZmZzZXRzW29ic09mZnNldF07XG4gICAgICAgIH0gZWxzZSBpZiAobWlsaXRhcnlPZmZzZXQpIHtcbiAgICAgICAgICAgIC8vIHRoZSBvbmx5IGFsbG93ZWQgbWlsaXRhcnkgdHogaXMgWlxuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgaG0gPSBwYXJzZUludChudW1PZmZzZXQsIDEwKSxcbiAgICAgICAgICAgICAgICBtID0gaG0gJSAxMDAsXG4gICAgICAgICAgICAgICAgaCA9IChobSAtIG0pIC8gMTAwO1xuICAgICAgICAgICAgcmV0dXJuIGggKiA2MCArIG07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBkYXRlIGFuZCB0aW1lIGZyb20gcmVmIDI4MjIgZm9ybWF0XG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbVJGQzI4MjIoY29uZmlnKSB7XG4gICAgICAgIHZhciBtYXRjaCA9IHJmYzI4MjIuZXhlYyhwcmVwcm9jZXNzUkZDMjgyMihjb25maWcuX2kpKSxcbiAgICAgICAgICAgIHBhcnNlZEFycmF5O1xuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgIHBhcnNlZEFycmF5ID0gZXh0cmFjdEZyb21SRkMyODIyU3RyaW5ncyhcbiAgICAgICAgICAgICAgICBtYXRjaFs0XSxcbiAgICAgICAgICAgICAgICBtYXRjaFszXSxcbiAgICAgICAgICAgICAgICBtYXRjaFsyXSxcbiAgICAgICAgICAgICAgICBtYXRjaFs1XSxcbiAgICAgICAgICAgICAgICBtYXRjaFs2XSxcbiAgICAgICAgICAgICAgICBtYXRjaFs3XVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmICghY2hlY2tXZWVrZGF5KG1hdGNoWzFdLCBwYXJzZWRBcnJheSwgY29uZmlnKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uZmlnLl9hID0gcGFyc2VkQXJyYXk7XG4gICAgICAgICAgICBjb25maWcuX3R6bSA9IGNhbGN1bGF0ZU9mZnNldChtYXRjaFs4XSwgbWF0Y2hbOV0sIG1hdGNoWzEwXSk7XG5cbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IGNyZWF0ZVVUQ0RhdGUuYXBwbHkobnVsbCwgY29uZmlnLl9hKTtcbiAgICAgICAgICAgIGNvbmZpZy5fZC5zZXRVVENNaW51dGVzKGNvbmZpZy5fZC5nZXRVVENNaW51dGVzKCkgLSBjb25maWcuX3R6bSk7XG5cbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnJmYzI4MjIgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBkYXRlIGZyb20gMSkgQVNQLk5FVCwgMikgSVNPLCAzKSBSRkMgMjgyMiBmb3JtYXRzLCBvciA0KSBvcHRpb25hbCBmYWxsYmFjayBpZiBwYXJzaW5nIGlzbid0IHN0cmljdFxuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21TdHJpbmcoY29uZmlnKSB7XG4gICAgICAgIHZhciBtYXRjaGVkID0gYXNwTmV0SnNvblJlZ2V4LmV4ZWMoY29uZmlnLl9pKTtcbiAgICAgICAgaWYgKG1hdGNoZWQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKCttYXRjaGVkWzFdKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbmZpZ0Zyb21JU08oY29uZmlnKTtcbiAgICAgICAgaWYgKGNvbmZpZy5faXNWYWxpZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBjb25maWcuX2lzVmFsaWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25maWdGcm9tUkZDMjgyMihjb25maWcpO1xuICAgICAgICBpZiAoY29uZmlnLl9pc1ZhbGlkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgZGVsZXRlIGNvbmZpZy5faXNWYWxpZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25maWcuX3N0cmljdCkge1xuICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBGaW5hbCBhdHRlbXB0LCB1c2UgSW5wdXQgRmFsbGJhY2tcbiAgICAgICAgICAgIGhvb2tzLmNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrKGNvbmZpZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBob29rcy5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjayA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ3ZhbHVlIHByb3ZpZGVkIGlzIG5vdCBpbiBhIHJlY29nbml6ZWQgUkZDMjgyMiBvciBJU08gZm9ybWF0LiBtb21lbnQgY29uc3RydWN0aW9uIGZhbGxzIGJhY2sgdG8ganMgRGF0ZSgpLCAnICtcbiAgICAgICAgICAgICd3aGljaCBpcyBub3QgcmVsaWFibGUgYWNyb3NzIGFsbCBicm93c2VycyBhbmQgdmVyc2lvbnMuIE5vbiBSRkMyODIyL0lTTyBkYXRlIGZvcm1hdHMgYXJlICcgK1xuICAgICAgICAgICAgJ2Rpc2NvdXJhZ2VkLiBQbGVhc2UgcmVmZXIgdG8gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9qcy1kYXRlLyBmb3IgbW9yZSBpbmZvLicsXG4gICAgICAgIGZ1bmN0aW9uIChjb25maWcpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKGNvbmZpZy5faSArIChjb25maWcuX3VzZVVUQyA/ICcgVVRDJyA6ICcnKSk7XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgLy8gUGljayB0aGUgZmlyc3QgZGVmaW5lZCBvZiB0d28gb3IgdGhyZWUgYXJndW1lbnRzLlxuICAgIGZ1bmN0aW9uIGRlZmF1bHRzKGEsIGIsIGMpIHtcbiAgICAgICAgaWYgKGEgIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGIgIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3VycmVudERhdGVBcnJheShjb25maWcpIHtcbiAgICAgICAgLy8gaG9va3MgaXMgYWN0dWFsbHkgdGhlIGV4cG9ydGVkIG1vbWVudCBvYmplY3RcbiAgICAgICAgdmFyIG5vd1ZhbHVlID0gbmV3IERhdGUoaG9va3Mubm93KCkpO1xuICAgICAgICBpZiAoY29uZmlnLl91c2VVVEMpIHtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgbm93VmFsdWUuZ2V0VVRDRnVsbFllYXIoKSxcbiAgICAgICAgICAgICAgICBub3dWYWx1ZS5nZXRVVENNb250aCgpLFxuICAgICAgICAgICAgICAgIG5vd1ZhbHVlLmdldFVUQ0RhdGUoKSxcbiAgICAgICAgICAgIF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtub3dWYWx1ZS5nZXRGdWxsWWVhcigpLCBub3dWYWx1ZS5nZXRNb250aCgpLCBub3dWYWx1ZS5nZXREYXRlKCldO1xuICAgIH1cblxuICAgIC8vIGNvbnZlcnQgYW4gYXJyYXkgdG8gYSBkYXRlLlxuICAgIC8vIHRoZSBhcnJheSBzaG91bGQgbWlycm9yIHRoZSBwYXJhbWV0ZXJzIGJlbG93XG4gICAgLy8gbm90ZTogYWxsIHZhbHVlcyBwYXN0IHRoZSB5ZWFyIGFyZSBvcHRpb25hbCBhbmQgd2lsbCBkZWZhdWx0IHRvIHRoZSBsb3dlc3QgcG9zc2libGUgdmFsdWUuXG4gICAgLy8gW3llYXIsIG1vbnRoLCBkYXkgLCBob3VyLCBtaW51dGUsIHNlY29uZCwgbWlsbGlzZWNvbmRdXG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbUFycmF5KGNvbmZpZykge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgICBpbnB1dCA9IFtdLFxuICAgICAgICAgICAgY3VycmVudERhdGUsXG4gICAgICAgICAgICBleHBlY3RlZFdlZWtkYXksXG4gICAgICAgICAgICB5ZWFyVG9Vc2U7XG5cbiAgICAgICAgaWYgKGNvbmZpZy5fZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY3VycmVudERhdGUgPSBjdXJyZW50RGF0ZUFycmF5KGNvbmZpZyk7XG5cbiAgICAgICAgLy9jb21wdXRlIGRheSBvZiB0aGUgeWVhciBmcm9tIHdlZWtzIGFuZCB3ZWVrZGF5c1xuICAgICAgICBpZiAoY29uZmlnLl93ICYmIGNvbmZpZy5fYVtEQVRFXSA9PSBudWxsICYmIGNvbmZpZy5fYVtNT05USF0gPT0gbnVsbCkge1xuICAgICAgICAgICAgZGF5T2ZZZWFyRnJvbVdlZWtJbmZvKGNvbmZpZyk7XG4gICAgICAgIH1cblxuICAgICAgICAvL2lmIHRoZSBkYXkgb2YgdGhlIHllYXIgaXMgc2V0LCBmaWd1cmUgb3V0IHdoYXQgaXQgaXNcbiAgICAgICAgaWYgKGNvbmZpZy5fZGF5T2ZZZWFyICE9IG51bGwpIHtcbiAgICAgICAgICAgIHllYXJUb1VzZSA9IGRlZmF1bHRzKGNvbmZpZy5fYVtZRUFSXSwgY3VycmVudERhdGVbWUVBUl0pO1xuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgY29uZmlnLl9kYXlPZlllYXIgPiBkYXlzSW5ZZWFyKHllYXJUb1VzZSkgfHxcbiAgICAgICAgICAgICAgICBjb25maWcuX2RheU9mWWVhciA9PT0gMFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuX292ZXJmbG93RGF5T2ZZZWFyID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGF0ZSA9IGNyZWF0ZVVUQ0RhdGUoeWVhclRvVXNlLCAwLCBjb25maWcuX2RheU9mWWVhcik7XG4gICAgICAgICAgICBjb25maWcuX2FbTU9OVEhdID0gZGF0ZS5nZXRVVENNb250aCgpO1xuICAgICAgICAgICAgY29uZmlnLl9hW0RBVEVdID0gZGF0ZS5nZXRVVENEYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEZWZhdWx0IHRvIGN1cnJlbnQgZGF0ZS5cbiAgICAgICAgLy8gKiBpZiBubyB5ZWFyLCBtb250aCwgZGF5IG9mIG1vbnRoIGFyZSBnaXZlbiwgZGVmYXVsdCB0byB0b2RheVxuICAgICAgICAvLyAqIGlmIGRheSBvZiBtb250aCBpcyBnaXZlbiwgZGVmYXVsdCBtb250aCBhbmQgeWVhclxuICAgICAgICAvLyAqIGlmIG1vbnRoIGlzIGdpdmVuLCBkZWZhdWx0IG9ubHkgeWVhclxuICAgICAgICAvLyAqIGlmIHllYXIgaXMgZ2l2ZW4sIGRvbid0IGRlZmF1bHQgYW55dGhpbmdcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDMgJiYgY29uZmlnLl9hW2ldID09IG51bGw7ICsraSkge1xuICAgICAgICAgICAgY29uZmlnLl9hW2ldID0gaW5wdXRbaV0gPSBjdXJyZW50RGF0ZVtpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFplcm8gb3V0IHdoYXRldmVyIHdhcyBub3QgZGVmYXVsdGVkLCBpbmNsdWRpbmcgdGltZVxuICAgICAgICBmb3IgKDsgaSA8IDc7IGkrKykge1xuICAgICAgICAgICAgY29uZmlnLl9hW2ldID0gaW5wdXRbaV0gPVxuICAgICAgICAgICAgICAgIGNvbmZpZy5fYVtpXSA9PSBudWxsID8gKGkgPT09IDIgPyAxIDogMCkgOiBjb25maWcuX2FbaV07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDaGVjayBmb3IgMjQ6MDA6MDAuMDAwXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGNvbmZpZy5fYVtIT1VSXSA9PT0gMjQgJiZcbiAgICAgICAgICAgIGNvbmZpZy5fYVtNSU5VVEVdID09PSAwICYmXG4gICAgICAgICAgICBjb25maWcuX2FbU0VDT05EXSA9PT0gMCAmJlxuICAgICAgICAgICAgY29uZmlnLl9hW01JTExJU0VDT05EXSA9PT0gMFxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbmZpZy5fbmV4dERheSA9IHRydWU7XG4gICAgICAgICAgICBjb25maWcuX2FbSE9VUl0gPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uZmlnLl9kID0gKGNvbmZpZy5fdXNlVVRDID8gY3JlYXRlVVRDRGF0ZSA6IGNyZWF0ZURhdGUpLmFwcGx5KFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIGlucHV0XG4gICAgICAgICk7XG4gICAgICAgIGV4cGVjdGVkV2Vla2RheSA9IGNvbmZpZy5fdXNlVVRDXG4gICAgICAgICAgICA/IGNvbmZpZy5fZC5nZXRVVENEYXkoKVxuICAgICAgICAgICAgOiBjb25maWcuX2QuZ2V0RGF5KCk7XG5cbiAgICAgICAgLy8gQXBwbHkgdGltZXpvbmUgb2Zmc2V0IGZyb20gaW5wdXQuIFRoZSBhY3R1YWwgdXRjT2Zmc2V0IGNhbiBiZSBjaGFuZ2VkXG4gICAgICAgIC8vIHdpdGggcGFyc2Vab25lLlxuICAgICAgICBpZiAoY29uZmlnLl90em0gIT0gbnVsbCkge1xuICAgICAgICAgICAgY29uZmlnLl9kLnNldFVUQ01pbnV0ZXMoY29uZmlnLl9kLmdldFVUQ01pbnV0ZXMoKSAtIGNvbmZpZy5fdHptKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25maWcuX25leHREYXkpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtIT1VSXSA9IDI0O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2hlY2sgZm9yIG1pc21hdGNoaW5nIGRheSBvZiB3ZWVrXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGNvbmZpZy5fdyAmJlxuICAgICAgICAgICAgdHlwZW9mIGNvbmZpZy5fdy5kICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgY29uZmlnLl93LmQgIT09IGV4cGVjdGVkV2Vla2RheVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLndlZWtkYXlNaXNtYXRjaCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkYXlPZlllYXJGcm9tV2Vla0luZm8oY29uZmlnKSB7XG4gICAgICAgIHZhciB3LCB3ZWVrWWVhciwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3ksIHRlbXAsIHdlZWtkYXlPdmVyZmxvdywgY3VyV2VlaztcblxuICAgICAgICB3ID0gY29uZmlnLl93O1xuICAgICAgICBpZiAody5HRyAhPSBudWxsIHx8IHcuVyAhPSBudWxsIHx8IHcuRSAhPSBudWxsKSB7XG4gICAgICAgICAgICBkb3cgPSAxO1xuICAgICAgICAgICAgZG95ID0gNDtcblxuICAgICAgICAgICAgLy8gVE9ETzogV2UgbmVlZCB0byB0YWtlIHRoZSBjdXJyZW50IGlzb1dlZWtZZWFyLCBidXQgdGhhdCBkZXBlbmRzIG9uXG4gICAgICAgICAgICAvLyBob3cgd2UgaW50ZXJwcmV0IG5vdyAobG9jYWwsIHV0YywgZml4ZWQgb2Zmc2V0KS4gU28gY3JlYXRlXG4gICAgICAgICAgICAvLyBhIG5vdyB2ZXJzaW9uIG9mIGN1cnJlbnQgY29uZmlnICh0YWtlIGxvY2FsL3V0Yy9vZmZzZXQgZmxhZ3MsIGFuZFxuICAgICAgICAgICAgLy8gY3JlYXRlIG5vdykuXG4gICAgICAgICAgICB3ZWVrWWVhciA9IGRlZmF1bHRzKFxuICAgICAgICAgICAgICAgIHcuR0csXG4gICAgICAgICAgICAgICAgY29uZmlnLl9hW1lFQVJdLFxuICAgICAgICAgICAgICAgIHdlZWtPZlllYXIoY3JlYXRlTG9jYWwoKSwgMSwgNCkueWVhclxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHdlZWsgPSBkZWZhdWx0cyh3LlcsIDEpO1xuICAgICAgICAgICAgd2Vla2RheSA9IGRlZmF1bHRzKHcuRSwgMSk7XG4gICAgICAgICAgICBpZiAod2Vla2RheSA8IDEgfHwgd2Vla2RheSA+IDcpIHtcbiAgICAgICAgICAgICAgICB3ZWVrZGF5T3ZlcmZsb3cgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZG93ID0gY29uZmlnLl9sb2NhbGUuX3dlZWsuZG93O1xuICAgICAgICAgICAgZG95ID0gY29uZmlnLl9sb2NhbGUuX3dlZWsuZG95O1xuXG4gICAgICAgICAgICBjdXJXZWVrID0gd2Vla09mWWVhcihjcmVhdGVMb2NhbCgpLCBkb3csIGRveSk7XG5cbiAgICAgICAgICAgIHdlZWtZZWFyID0gZGVmYXVsdHMody5nZywgY29uZmlnLl9hW1lFQVJdLCBjdXJXZWVrLnllYXIpO1xuXG4gICAgICAgICAgICAvLyBEZWZhdWx0IHRvIGN1cnJlbnQgd2Vlay5cbiAgICAgICAgICAgIHdlZWsgPSBkZWZhdWx0cyh3LncsIGN1cldlZWsud2Vlayk7XG5cbiAgICAgICAgICAgIGlmICh3LmQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIC8vIHdlZWtkYXkgLS0gbG93IGRheSBudW1iZXJzIGFyZSBjb25zaWRlcmVkIG5leHQgd2Vla1xuICAgICAgICAgICAgICAgIHdlZWtkYXkgPSB3LmQ7XG4gICAgICAgICAgICAgICAgaWYgKHdlZWtkYXkgPCAwIHx8IHdlZWtkYXkgPiA2KSB7XG4gICAgICAgICAgICAgICAgICAgIHdlZWtkYXlPdmVyZmxvdyA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICh3LmUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIC8vIGxvY2FsIHdlZWtkYXkgLS0gY291bnRpbmcgc3RhcnRzIGZyb20gYmVnaW5uaW5nIG9mIHdlZWtcbiAgICAgICAgICAgICAgICB3ZWVrZGF5ID0gdy5lICsgZG93O1xuICAgICAgICAgICAgICAgIGlmICh3LmUgPCAwIHx8IHcuZSA+IDYpIHtcbiAgICAgICAgICAgICAgICAgICAgd2Vla2RheU92ZXJmbG93ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGRlZmF1bHQgdG8gYmVnaW5uaW5nIG9mIHdlZWtcbiAgICAgICAgICAgICAgICB3ZWVrZGF5ID0gZG93O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh3ZWVrIDwgMSB8fCB3ZWVrID4gd2Vla3NJblllYXIod2Vla1llYXIsIGRvdywgZG95KSkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuX292ZXJmbG93V2Vla3MgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHdlZWtkYXlPdmVyZmxvdyAhPSBudWxsKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5fb3ZlcmZsb3dXZWVrZGF5ID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRlbXAgPSBkYXlPZlllYXJGcm9tV2Vla3Mod2Vla1llYXIsIHdlZWssIHdlZWtkYXksIGRvdywgZG95KTtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtZRUFSXSA9IHRlbXAueWVhcjtcbiAgICAgICAgICAgIGNvbmZpZy5fZGF5T2ZZZWFyID0gdGVtcC5kYXlPZlllYXI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBjb25zdGFudCB0aGF0IHJlZmVycyB0byB0aGUgSVNPIHN0YW5kYXJkXG4gICAgaG9va3MuSVNPXzg2MDEgPSBmdW5jdGlvbiAoKSB7fTtcblxuICAgIC8vIGNvbnN0YW50IHRoYXQgcmVmZXJzIHRvIHRoZSBSRkMgMjgyMiBmb3JtXG4gICAgaG9va3MuUkZDXzI4MjIgPSBmdW5jdGlvbiAoKSB7fTtcblxuICAgIC8vIGRhdGUgZnJvbSBzdHJpbmcgYW5kIGZvcm1hdCBzdHJpbmdcbiAgICBmdW5jdGlvbiBjb25maWdGcm9tU3RyaW5nQW5kRm9ybWF0KGNvbmZpZykge1xuICAgICAgICAvLyBUT0RPOiBNb3ZlIHRoaXMgdG8gYW5vdGhlciBwYXJ0IG9mIHRoZSBjcmVhdGlvbiBmbG93IHRvIHByZXZlbnQgY2lyY3VsYXIgZGVwc1xuICAgICAgICBpZiAoY29uZmlnLl9mID09PSBob29rcy5JU09fODYwMSkge1xuICAgICAgICAgICAgY29uZmlnRnJvbUlTTyhjb25maWcpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb25maWcuX2YgPT09IGhvb2tzLlJGQ18yODIyKSB7XG4gICAgICAgICAgICBjb25maWdGcm9tUkZDMjgyMihjb25maWcpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbmZpZy5fYSA9IFtdO1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5lbXB0eSA9IHRydWU7XG5cbiAgICAgICAgLy8gVGhpcyBhcnJheSBpcyB1c2VkIHRvIG1ha2UgYSBEYXRlLCBlaXRoZXIgd2l0aCBgbmV3IERhdGVgIG9yIGBEYXRlLlVUQ2BcbiAgICAgICAgdmFyIHN0cmluZyA9ICcnICsgY29uZmlnLl9pLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIHBhcnNlZElucHV0LFxuICAgICAgICAgICAgdG9rZW5zLFxuICAgICAgICAgICAgdG9rZW4sXG4gICAgICAgICAgICBza2lwcGVkLFxuICAgICAgICAgICAgc3RyaW5nTGVuZ3RoID0gc3RyaW5nLmxlbmd0aCxcbiAgICAgICAgICAgIHRvdGFsUGFyc2VkSW5wdXRMZW5ndGggPSAwLFxuICAgICAgICAgICAgZXJhLFxuICAgICAgICAgICAgdG9rZW5MZW47XG5cbiAgICAgICAgdG9rZW5zID1cbiAgICAgICAgICAgIGV4cGFuZEZvcm1hdChjb25maWcuX2YsIGNvbmZpZy5fbG9jYWxlKS5tYXRjaChmb3JtYXR0aW5nVG9rZW5zKSB8fCBbXTtcbiAgICAgICAgdG9rZW5MZW4gPSB0b2tlbnMubGVuZ3RoO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdG9rZW5MZW47IGkrKykge1xuICAgICAgICAgICAgdG9rZW4gPSB0b2tlbnNbaV07XG4gICAgICAgICAgICBwYXJzZWRJbnB1dCA9IChzdHJpbmcubWF0Y2goZ2V0UGFyc2VSZWdleEZvclRva2VuKHRva2VuLCBjb25maWcpKSB8fFxuICAgICAgICAgICAgICAgIFtdKVswXTtcbiAgICAgICAgICAgIGlmIChwYXJzZWRJbnB1dCkge1xuICAgICAgICAgICAgICAgIHNraXBwZWQgPSBzdHJpbmcuc3Vic3RyKDAsIHN0cmluZy5pbmRleE9mKHBhcnNlZElucHV0KSk7XG4gICAgICAgICAgICAgICAgaWYgKHNraXBwZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS51bnVzZWRJbnB1dC5wdXNoKHNraXBwZWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzdHJpbmcgPSBzdHJpbmcuc2xpY2UoXG4gICAgICAgICAgICAgICAgICAgIHN0cmluZy5pbmRleE9mKHBhcnNlZElucHV0KSArIHBhcnNlZElucHV0Lmxlbmd0aFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdG90YWxQYXJzZWRJbnB1dExlbmd0aCArPSBwYXJzZWRJbnB1dC5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBkb24ndCBwYXJzZSBpZiBpdCdzIG5vdCBhIGtub3duIHRva2VuXG4gICAgICAgICAgICBpZiAoZm9ybWF0VG9rZW5GdW5jdGlvbnNbdG9rZW5dKSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcnNlZElucHV0KSB7XG4gICAgICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmVtcHR5ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykudW51c2VkVG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhZGRUaW1lVG9BcnJheUZyb21Ub2tlbih0b2tlbiwgcGFyc2VkSW5wdXQsIGNvbmZpZyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbmZpZy5fc3RyaWN0ICYmICFwYXJzZWRJbnB1dCkge1xuICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnVudXNlZFRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGFkZCByZW1haW5pbmcgdW5wYXJzZWQgaW5wdXQgbGVuZ3RoIHRvIHRoZSBzdHJpbmdcbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuY2hhcnNMZWZ0T3ZlciA9XG4gICAgICAgICAgICBzdHJpbmdMZW5ndGggLSB0b3RhbFBhcnNlZElucHV0TGVuZ3RoO1xuICAgICAgICBpZiAoc3RyaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnVudXNlZElucHV0LnB1c2goc3RyaW5nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNsZWFyIF8xMmggZmxhZyBpZiBob3VyIGlzIDw9IDEyXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGNvbmZpZy5fYVtIT1VSXSA8PSAxMiAmJlxuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuYmlnSG91ciA9PT0gdHJ1ZSAmJlxuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdID4gMFxuICAgICAgICApIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmJpZ0hvdXIgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5wYXJzZWREYXRlUGFydHMgPSBjb25maWcuX2Euc2xpY2UoMCk7XG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLm1lcmlkaWVtID0gY29uZmlnLl9tZXJpZGllbTtcbiAgICAgICAgLy8gaGFuZGxlIG1lcmlkaWVtXG4gICAgICAgIGNvbmZpZy5fYVtIT1VSXSA9IG1lcmlkaWVtRml4V3JhcChcbiAgICAgICAgICAgIGNvbmZpZy5fbG9jYWxlLFxuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdLFxuICAgICAgICAgICAgY29uZmlnLl9tZXJpZGllbVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIGhhbmRsZSBlcmFcbiAgICAgICAgZXJhID0gZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuZXJhO1xuICAgICAgICBpZiAoZXJhICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25maWcuX2FbWUVBUl0gPSBjb25maWcuX2xvY2FsZS5lcmFzQ29udmVydFllYXIoZXJhLCBjb25maWcuX2FbWUVBUl0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uZmlnRnJvbUFycmF5KGNvbmZpZyk7XG4gICAgICAgIGNoZWNrT3ZlcmZsb3coY29uZmlnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtZXJpZGllbUZpeFdyYXAobG9jYWxlLCBob3VyLCBtZXJpZGllbSkge1xuICAgICAgICB2YXIgaXNQbTtcblxuICAgICAgICBpZiAobWVyaWRpZW0gPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gbm90aGluZyB0byBkb1xuICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvY2FsZS5tZXJpZGllbUhvdXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsZS5tZXJpZGllbUhvdXIoaG91ciwgbWVyaWRpZW0pO1xuICAgICAgICB9IGVsc2UgaWYgKGxvY2FsZS5pc1BNICE9IG51bGwpIHtcbiAgICAgICAgICAgIC8vIEZhbGxiYWNrXG4gICAgICAgICAgICBpc1BtID0gbG9jYWxlLmlzUE0obWVyaWRpZW0pO1xuICAgICAgICAgICAgaWYgKGlzUG0gJiYgaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciArPSAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghaXNQbSAmJiBob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyB0aGlzIGlzIG5vdCBzdXBwb3NlZCB0byBoYXBwZW5cbiAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gZGF0ZSBmcm9tIHN0cmluZyBhbmQgYXJyYXkgb2YgZm9ybWF0IHN0cmluZ3NcbiAgICBmdW5jdGlvbiBjb25maWdGcm9tU3RyaW5nQW5kQXJyYXkoY29uZmlnKSB7XG4gICAgICAgIHZhciB0ZW1wQ29uZmlnLFxuICAgICAgICAgICAgYmVzdE1vbWVudCxcbiAgICAgICAgICAgIHNjb3JlVG9CZWF0LFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIGN1cnJlbnRTY29yZSxcbiAgICAgICAgICAgIHZhbGlkRm9ybWF0Rm91bmQsXG4gICAgICAgICAgICBiZXN0Rm9ybWF0SXNWYWxpZCA9IGZhbHNlLFxuICAgICAgICAgICAgY29uZmlnZkxlbiA9IGNvbmZpZy5fZi5sZW5ndGg7XG5cbiAgICAgICAgaWYgKGNvbmZpZ2ZMZW4gPT09IDApIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmludmFsaWRGb3JtYXQgPSB0cnVlO1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoTmFOKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb25maWdmTGVuOyBpKyspIHtcbiAgICAgICAgICAgIGN1cnJlbnRTY29yZSA9IDA7XG4gICAgICAgICAgICB2YWxpZEZvcm1hdEZvdW5kID0gZmFsc2U7XG4gICAgICAgICAgICB0ZW1wQ29uZmlnID0gY29weUNvbmZpZyh7fSwgY29uZmlnKTtcbiAgICAgICAgICAgIGlmIChjb25maWcuX3VzZVVUQyAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGVtcENvbmZpZy5fdXNlVVRDID0gY29uZmlnLl91c2VVVEM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0ZW1wQ29uZmlnLl9mID0gY29uZmlnLl9mW2ldO1xuICAgICAgICAgICAgY29uZmlnRnJvbVN0cmluZ0FuZEZvcm1hdCh0ZW1wQ29uZmlnKTtcblxuICAgICAgICAgICAgaWYgKGlzVmFsaWQodGVtcENvbmZpZykpIHtcbiAgICAgICAgICAgICAgICB2YWxpZEZvcm1hdEZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgYW55IGlucHV0IHRoYXQgd2FzIG5vdCBwYXJzZWQgYWRkIGEgcGVuYWx0eSBmb3IgdGhhdCBmb3JtYXRcbiAgICAgICAgICAgIGN1cnJlbnRTY29yZSArPSBnZXRQYXJzaW5nRmxhZ3ModGVtcENvbmZpZykuY2hhcnNMZWZ0T3ZlcjtcblxuICAgICAgICAgICAgLy9vciB0b2tlbnNcbiAgICAgICAgICAgIGN1cnJlbnRTY29yZSArPSBnZXRQYXJzaW5nRmxhZ3ModGVtcENvbmZpZykudW51c2VkVG9rZW5zLmxlbmd0aCAqIDEwO1xuXG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3ModGVtcENvbmZpZykuc2NvcmUgPSBjdXJyZW50U2NvcmU7XG5cbiAgICAgICAgICAgIGlmICghYmVzdEZvcm1hdElzVmFsaWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHNjb3JlVG9CZWF0ID09IG51bGwgfHxcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3JlIDwgc2NvcmVUb0JlYXQgfHxcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRGb3JtYXRGb3VuZFxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBzY29yZVRvQmVhdCA9IGN1cnJlbnRTY29yZTtcbiAgICAgICAgICAgICAgICAgICAgYmVzdE1vbWVudCA9IHRlbXBDb25maWc7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWxpZEZvcm1hdEZvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBiZXN0Rm9ybWF0SXNWYWxpZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50U2NvcmUgPCBzY29yZVRvQmVhdCkge1xuICAgICAgICAgICAgICAgICAgICBzY29yZVRvQmVhdCA9IGN1cnJlbnRTY29yZTtcbiAgICAgICAgICAgICAgICAgICAgYmVzdE1vbWVudCA9IHRlbXBDb25maWc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZXh0ZW5kKGNvbmZpZywgYmVzdE1vbWVudCB8fCB0ZW1wQ29uZmlnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb25maWdGcm9tT2JqZWN0KGNvbmZpZykge1xuICAgICAgICBpZiAoY29uZmlnLl9kKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaSA9IG5vcm1hbGl6ZU9iamVjdFVuaXRzKGNvbmZpZy5faSksXG4gICAgICAgICAgICBkYXlPckRhdGUgPSBpLmRheSA9PT0gdW5kZWZpbmVkID8gaS5kYXRlIDogaS5kYXk7XG4gICAgICAgIGNvbmZpZy5fYSA9IG1hcChcbiAgICAgICAgICAgIFtpLnllYXIsIGkubW9udGgsIGRheU9yRGF0ZSwgaS5ob3VyLCBpLm1pbnV0ZSwgaS5zZWNvbmQsIGkubWlsbGlzZWNvbmRdLFxuICAgICAgICAgICAgZnVuY3Rpb24gKG9iaikge1xuICAgICAgICAgICAgICAgIHJldHVybiBvYmogJiYgcGFyc2VJbnQob2JqLCAxMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICAgICAgY29uZmlnRnJvbUFycmF5KGNvbmZpZyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlRnJvbUNvbmZpZyhjb25maWcpIHtcbiAgICAgICAgdmFyIHJlcyA9IG5ldyBNb21lbnQoY2hlY2tPdmVyZmxvdyhwcmVwYXJlQ29uZmlnKGNvbmZpZykpKTtcbiAgICAgICAgaWYgKHJlcy5fbmV4dERheSkge1xuICAgICAgICAgICAgLy8gQWRkaW5nIGlzIHNtYXJ0IGVub3VnaCBhcm91bmQgRFNUXG4gICAgICAgICAgICByZXMuYWRkKDEsICdkJyk7XG4gICAgICAgICAgICByZXMuX25leHREYXkgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHByZXBhcmVDb25maWcoY29uZmlnKSB7XG4gICAgICAgIHZhciBpbnB1dCA9IGNvbmZpZy5faSxcbiAgICAgICAgICAgIGZvcm1hdCA9IGNvbmZpZy5fZjtcblxuICAgICAgICBjb25maWcuX2xvY2FsZSA9IGNvbmZpZy5fbG9jYWxlIHx8IGdldExvY2FsZShjb25maWcuX2wpO1xuXG4gICAgICAgIGlmIChpbnB1dCA9PT0gbnVsbCB8fCAoZm9ybWF0ID09PSB1bmRlZmluZWQgJiYgaW5wdXQgPT09ICcnKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUludmFsaWQoeyBudWxsSW5wdXQ6IHRydWUgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgY29uZmlnLl9pID0gaW5wdXQgPSBjb25maWcuX2xvY2FsZS5wcmVwYXJzZShpbnB1dCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNNb21lbnQoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE1vbWVudChjaGVja092ZXJmbG93KGlucHV0KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNEYXRlKGlucHV0KSkge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gaW5wdXQ7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNBcnJheShmb3JtYXQpKSB7XG4gICAgICAgICAgICBjb25maWdGcm9tU3RyaW5nQW5kQXJyYXkoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIGlmIChmb3JtYXQpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21TdHJpbmdBbmRGb3JtYXQoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21JbnB1dChjb25maWcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc1ZhbGlkKGNvbmZpZykpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29uZmlnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21JbnB1dChjb25maWcpIHtcbiAgICAgICAgdmFyIGlucHV0ID0gY29uZmlnLl9pO1xuICAgICAgICBpZiAoaXNVbmRlZmluZWQoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShob29rcy5ub3coKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNEYXRlKGlucHV0KSkge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoaW5wdXQudmFsdWVPZigpKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBjb25maWdGcm9tU3RyaW5nKGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNBcnJheShpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fYSA9IG1hcChpbnB1dC5zbGljZSgwKSwgZnVuY3Rpb24gKG9iaikge1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUludChvYmosIDEwKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uZmlnRnJvbUFycmF5KGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb25maWdGcm9tT2JqZWN0KGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNOdW1iZXIoaW5wdXQpKSB7XG4gICAgICAgICAgICAvLyBmcm9tIG1pbGxpc2Vjb25kc1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoaW5wdXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaG9va3MuY3JlYXRlRnJvbUlucHV0RmFsbGJhY2soY29uZmlnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUxvY2FsT3JVVEMoaW5wdXQsIGZvcm1hdCwgbG9jYWxlLCBzdHJpY3QsIGlzVVRDKSB7XG4gICAgICAgIHZhciBjID0ge307XG5cbiAgICAgICAgaWYgKGZvcm1hdCA9PT0gdHJ1ZSB8fCBmb3JtYXQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBzdHJpY3QgPSBmb3JtYXQ7XG4gICAgICAgICAgICBmb3JtYXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobG9jYWxlID09PSB0cnVlIHx8IGxvY2FsZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHN0cmljdCA9IGxvY2FsZTtcbiAgICAgICAgICAgIGxvY2FsZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIChpc09iamVjdChpbnB1dCkgJiYgaXNPYmplY3RFbXB0eShpbnB1dCkpIHx8XG4gICAgICAgICAgICAoaXNBcnJheShpbnB1dCkgJiYgaW5wdXQubGVuZ3RoID09PSAwKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGlucHV0ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIC8vIG9iamVjdCBjb25zdHJ1Y3Rpb24gbXVzdCBiZSBkb25lIHRoaXMgd2F5LlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9pc3N1ZXMvMTQyM1xuICAgICAgICBjLl9pc0FNb21lbnRPYmplY3QgPSB0cnVlO1xuICAgICAgICBjLl91c2VVVEMgPSBjLl9pc1VUQyA9IGlzVVRDO1xuICAgICAgICBjLl9sID0gbG9jYWxlO1xuICAgICAgICBjLl9pID0gaW5wdXQ7XG4gICAgICAgIGMuX2YgPSBmb3JtYXQ7XG4gICAgICAgIGMuX3N0cmljdCA9IHN0cmljdDtcblxuICAgICAgICByZXR1cm4gY3JlYXRlRnJvbUNvbmZpZyhjKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVMb2NhbChpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlTG9jYWxPclVUQyhpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCwgZmFsc2UpO1xuICAgIH1cblxuICAgIHZhciBwcm90b3R5cGVNaW4gPSBkZXByZWNhdGUoXG4gICAgICAgICAgICAnbW9tZW50KCkubWluIGlzIGRlcHJlY2F0ZWQsIHVzZSBtb21lbnQubWF4IGluc3RlYWQuIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvbWluLW1heC8nLFxuICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBvdGhlciA9IGNyZWF0ZUxvY2FsLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNWYWxpZCgpICYmIG90aGVyLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3RoZXIgPCB0aGlzID8gdGhpcyA6IG90aGVyO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVJbnZhbGlkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICBwcm90b3R5cGVNYXggPSBkZXByZWNhdGUoXG4gICAgICAgICAgICAnbW9tZW50KCkubWF4IGlzIGRlcHJlY2F0ZWQsIHVzZSBtb21lbnQubWluIGluc3RlYWQuIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvbWluLW1heC8nLFxuICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBvdGhlciA9IGNyZWF0ZUxvY2FsLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNWYWxpZCgpICYmIG90aGVyLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3RoZXIgPiB0aGlzID8gdGhpcyA6IG90aGVyO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVJbnZhbGlkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgLy8gUGljayBhIG1vbWVudCBtIGZyb20gbW9tZW50cyBzbyB0aGF0IG1bZm5dKG90aGVyKSBpcyB0cnVlIGZvciBhbGxcbiAgICAvLyBvdGhlci4gVGhpcyByZWxpZXMgb24gdGhlIGZ1bmN0aW9uIGZuIHRvIGJlIHRyYW5zaXRpdmUuXG4gICAgLy9cbiAgICAvLyBtb21lbnRzIHNob3VsZCBlaXRoZXIgYmUgYW4gYXJyYXkgb2YgbW9tZW50IG9iamVjdHMgb3IgYW4gYXJyYXksIHdob3NlXG4gICAgLy8gZmlyc3QgZWxlbWVudCBpcyBhbiBhcnJheSBvZiBtb21lbnQgb2JqZWN0cy5cbiAgICBmdW5jdGlvbiBwaWNrQnkoZm4sIG1vbWVudHMpIHtcbiAgICAgICAgdmFyIHJlcywgaTtcbiAgICAgICAgaWYgKG1vbWVudHMubGVuZ3RoID09PSAxICYmIGlzQXJyYXkobW9tZW50c1swXSkpIHtcbiAgICAgICAgICAgIG1vbWVudHMgPSBtb21lbnRzWzBdO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbW9tZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVMb2NhbCgpO1xuICAgICAgICB9XG4gICAgICAgIHJlcyA9IG1vbWVudHNbMF07XG4gICAgICAgIGZvciAoaSA9IDE7IGkgPCBtb21lbnRzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICBpZiAoIW1vbWVudHNbaV0uaXNWYWxpZCgpIHx8IG1vbWVudHNbaV1bZm5dKHJlcykpIHtcbiAgICAgICAgICAgICAgICByZXMgPSBtb21lbnRzW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogVXNlIFtdLnNvcnQgaW5zdGVhZD9cbiAgICBmdW5jdGlvbiBtaW4oKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDApO1xuXG4gICAgICAgIHJldHVybiBwaWNrQnkoJ2lzQmVmb3JlJywgYXJncyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWF4KCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcblxuICAgICAgICByZXR1cm4gcGlja0J5KCdpc0FmdGVyJywgYXJncyk7XG4gICAgfVxuXG4gICAgdmFyIG5vdyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIERhdGUubm93ID8gRGF0ZS5ub3coKSA6ICtuZXcgRGF0ZSgpO1xuICAgIH07XG5cbiAgICB2YXIgb3JkZXJpbmcgPSBbXG4gICAgICAgICd5ZWFyJyxcbiAgICAgICAgJ3F1YXJ0ZXInLFxuICAgICAgICAnbW9udGgnLFxuICAgICAgICAnd2VlaycsXG4gICAgICAgICdkYXknLFxuICAgICAgICAnaG91cicsXG4gICAgICAgICdtaW51dGUnLFxuICAgICAgICAnc2Vjb25kJyxcbiAgICAgICAgJ21pbGxpc2Vjb25kJyxcbiAgICBdO1xuXG4gICAgZnVuY3Rpb24gaXNEdXJhdGlvblZhbGlkKG0pIHtcbiAgICAgICAgdmFyIGtleSxcbiAgICAgICAgICAgIHVuaXRIYXNEZWNpbWFsID0gZmFsc2UsXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgb3JkZXJMZW4gPSBvcmRlcmluZy5sZW5ndGg7XG4gICAgICAgIGZvciAoa2V5IGluIG0pIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBoYXNPd25Qcm9wKG0sIGtleSkgJiZcbiAgICAgICAgICAgICAgICAhKFxuICAgICAgICAgICAgICAgICAgICBpbmRleE9mLmNhbGwob3JkZXJpbmcsIGtleSkgIT09IC0xICYmXG4gICAgICAgICAgICAgICAgICAgIChtW2tleV0gPT0gbnVsbCB8fCAhaXNOYU4obVtrZXldKSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgb3JkZXJMZW47ICsraSkge1xuICAgICAgICAgICAgaWYgKG1bb3JkZXJpbmdbaV1dKSB7XG4gICAgICAgICAgICAgICAgaWYgKHVuaXRIYXNEZWNpbWFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gb25seSBhbGxvdyBub24taW50ZWdlcnMgZm9yIHNtYWxsZXN0IHVuaXRcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHBhcnNlRmxvYXQobVtvcmRlcmluZ1tpXV0pICE9PSB0b0ludChtW29yZGVyaW5nW2ldXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdW5pdEhhc0RlY2ltYWwgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVmFsaWQkMSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzVmFsaWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlSW52YWxpZCQxKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlRHVyYXRpb24oTmFOKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBEdXJhdGlvbihkdXJhdGlvbikge1xuICAgICAgICB2YXIgbm9ybWFsaXplZElucHV0ID0gbm9ybWFsaXplT2JqZWN0VW5pdHMoZHVyYXRpb24pLFxuICAgICAgICAgICAgeWVhcnMgPSBub3JtYWxpemVkSW5wdXQueWVhciB8fCAwLFxuICAgICAgICAgICAgcXVhcnRlcnMgPSBub3JtYWxpemVkSW5wdXQucXVhcnRlciB8fCAwLFxuICAgICAgICAgICAgbW9udGhzID0gbm9ybWFsaXplZElucHV0Lm1vbnRoIHx8IDAsXG4gICAgICAgICAgICB3ZWVrcyA9IG5vcm1hbGl6ZWRJbnB1dC53ZWVrIHx8IG5vcm1hbGl6ZWRJbnB1dC5pc29XZWVrIHx8IDAsXG4gICAgICAgICAgICBkYXlzID0gbm9ybWFsaXplZElucHV0LmRheSB8fCAwLFxuICAgICAgICAgICAgaG91cnMgPSBub3JtYWxpemVkSW5wdXQuaG91ciB8fCAwLFxuICAgICAgICAgICAgbWludXRlcyA9IG5vcm1hbGl6ZWRJbnB1dC5taW51dGUgfHwgMCxcbiAgICAgICAgICAgIHNlY29uZHMgPSBub3JtYWxpemVkSW5wdXQuc2Vjb25kIHx8IDAsXG4gICAgICAgICAgICBtaWxsaXNlY29uZHMgPSBub3JtYWxpemVkSW5wdXQubWlsbGlzZWNvbmQgfHwgMDtcblxuICAgICAgICB0aGlzLl9pc1ZhbGlkID0gaXNEdXJhdGlvblZhbGlkKG5vcm1hbGl6ZWRJbnB1dCk7XG5cbiAgICAgICAgLy8gcmVwcmVzZW50YXRpb24gZm9yIGRhdGVBZGRSZW1vdmVcbiAgICAgICAgdGhpcy5fbWlsbGlzZWNvbmRzID1cbiAgICAgICAgICAgICttaWxsaXNlY29uZHMgK1xuICAgICAgICAgICAgc2Vjb25kcyAqIDFlMyArIC8vIDEwMDBcbiAgICAgICAgICAgIG1pbnV0ZXMgKiA2ZTQgKyAvLyAxMDAwICogNjBcbiAgICAgICAgICAgIGhvdXJzICogMTAwMCAqIDYwICogNjA7IC8vdXNpbmcgMTAwMCAqIDYwICogNjAgaW5zdGVhZCBvZiAzNmU1IHRvIGF2b2lkIGZsb2F0aW5nIHBvaW50IHJvdW5kaW5nIGVycm9ycyBodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9pc3N1ZXMvMjk3OFxuICAgICAgICAvLyBCZWNhdXNlIG9mIGRhdGVBZGRSZW1vdmUgdHJlYXRzIDI0IGhvdXJzIGFzIGRpZmZlcmVudCBmcm9tIGFcbiAgICAgICAgLy8gZGF5IHdoZW4gd29ya2luZyBhcm91bmQgRFNULCB3ZSBuZWVkIHRvIHN0b3JlIHRoZW0gc2VwYXJhdGVseVxuICAgICAgICB0aGlzLl9kYXlzID0gK2RheXMgKyB3ZWVrcyAqIDc7XG4gICAgICAgIC8vIEl0IGlzIGltcG9zc2libGUgdG8gdHJhbnNsYXRlIG1vbnRocyBpbnRvIGRheXMgd2l0aG91dCBrbm93aW5nXG4gICAgICAgIC8vIHdoaWNoIG1vbnRocyB5b3UgYXJlIGFyZSB0YWxraW5nIGFib3V0LCBzbyB3ZSBoYXZlIHRvIHN0b3JlXG4gICAgICAgIC8vIGl0IHNlcGFyYXRlbHkuXG4gICAgICAgIHRoaXMuX21vbnRocyA9ICttb250aHMgKyBxdWFydGVycyAqIDMgKyB5ZWFycyAqIDEyO1xuXG4gICAgICAgIHRoaXMuX2RhdGEgPSB7fTtcblxuICAgICAgICB0aGlzLl9sb2NhbGUgPSBnZXRMb2NhbGUoKTtcblxuICAgICAgICB0aGlzLl9idWJibGUoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0R1cmF0aW9uKG9iaikge1xuICAgICAgICByZXR1cm4gb2JqIGluc3RhbmNlb2YgRHVyYXRpb247XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWJzUm91bmQobnVtYmVyKSB7XG4gICAgICAgIGlmIChudW1iZXIgPCAwKSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5yb3VuZCgtMSAqIG51bWJlcikgKiAtMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLnJvdW5kKG51bWJlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBjb21wYXJlIHR3byBhcnJheXMsIHJldHVybiB0aGUgbnVtYmVyIG9mIGRpZmZlcmVuY2VzXG4gICAgZnVuY3Rpb24gY29tcGFyZUFycmF5cyhhcnJheTEsIGFycmF5MiwgZG9udENvbnZlcnQpIHtcbiAgICAgICAgdmFyIGxlbiA9IE1hdGgubWluKGFycmF5MS5sZW5ndGgsIGFycmF5Mi5sZW5ndGgpLFxuICAgICAgICAgICAgbGVuZ3RoRGlmZiA9IE1hdGguYWJzKGFycmF5MS5sZW5ndGggLSBhcnJheTIubGVuZ3RoKSxcbiAgICAgICAgICAgIGRpZmZzID0gMCxcbiAgICAgICAgICAgIGk7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIChkb250Q29udmVydCAmJiBhcnJheTFbaV0gIT09IGFycmF5MltpXSkgfHxcbiAgICAgICAgICAgICAgICAoIWRvbnRDb252ZXJ0ICYmIHRvSW50KGFycmF5MVtpXSkgIT09IHRvSW50KGFycmF5MltpXSkpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBkaWZmcysrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkaWZmcyArIGxlbmd0aERpZmY7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgZnVuY3Rpb24gb2Zmc2V0KHRva2VuLCBzZXBhcmF0b3IpIHtcbiAgICAgICAgYWRkRm9ybWF0VG9rZW4odG9rZW4sIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBvZmZzZXQgPSB0aGlzLnV0Y09mZnNldCgpLFxuICAgICAgICAgICAgICAgIHNpZ24gPSAnKyc7XG4gICAgICAgICAgICBpZiAob2Zmc2V0IDwgMCkge1xuICAgICAgICAgICAgICAgIG9mZnNldCA9IC1vZmZzZXQ7XG4gICAgICAgICAgICAgICAgc2lnbiA9ICctJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgc2lnbiArXG4gICAgICAgICAgICAgICAgemVyb0ZpbGwofn4ob2Zmc2V0IC8gNjApLCAyKSArXG4gICAgICAgICAgICAgICAgc2VwYXJhdG9yICtcbiAgICAgICAgICAgICAgICB6ZXJvRmlsbCh+fm9mZnNldCAlIDYwLCAyKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb2Zmc2V0KCdaJywgJzonKTtcbiAgICBvZmZzZXQoJ1paJywgJycpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignWicsIG1hdGNoU2hvcnRPZmZzZXQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1paJywgbWF0Y2hTaG9ydE9mZnNldCk7XG4gICAgYWRkUGFyc2VUb2tlbihbJ1onLCAnWlonXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5fdXNlVVRDID0gdHJ1ZTtcbiAgICAgICAgY29uZmlnLl90em0gPSBvZmZzZXRGcm9tU3RyaW5nKG1hdGNoU2hvcnRPZmZzZXQsIGlucHV0KTtcbiAgICB9KTtcblxuICAgIC8vIEhFTFBFUlNcblxuICAgIC8vIHRpbWV6b25lIGNodW5rZXJcbiAgICAvLyAnKzEwOjAwJyA+IFsnMTAnLCAgJzAwJ11cbiAgICAvLyAnLTE1MzAnICA+IFsnLTE1JywgJzMwJ11cbiAgICB2YXIgY2h1bmtPZmZzZXQgPSAvKFtcXCtcXC1dfFxcZFxcZCkvZ2k7XG5cbiAgICBmdW5jdGlvbiBvZmZzZXRGcm9tU3RyaW5nKG1hdGNoZXIsIHN0cmluZykge1xuICAgICAgICB2YXIgbWF0Y2hlcyA9IChzdHJpbmcgfHwgJycpLm1hdGNoKG1hdGNoZXIpLFxuICAgICAgICAgICAgY2h1bmssXG4gICAgICAgICAgICBwYXJ0cyxcbiAgICAgICAgICAgIG1pbnV0ZXM7XG5cbiAgICAgICAgaWYgKG1hdGNoZXMgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY2h1bmsgPSBtYXRjaGVzW21hdGNoZXMubGVuZ3RoIC0gMV0gfHwgW107XG4gICAgICAgIHBhcnRzID0gKGNodW5rICsgJycpLm1hdGNoKGNodW5rT2Zmc2V0KSB8fCBbJy0nLCAwLCAwXTtcbiAgICAgICAgbWludXRlcyA9ICsocGFydHNbMV0gKiA2MCkgKyB0b0ludChwYXJ0c1syXSk7XG5cbiAgICAgICAgcmV0dXJuIG1pbnV0ZXMgPT09IDAgPyAwIDogcGFydHNbMF0gPT09ICcrJyA/IG1pbnV0ZXMgOiAtbWludXRlcztcbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gYSBtb21lbnQgZnJvbSBpbnB1dCwgdGhhdCBpcyBsb2NhbC91dGMvem9uZSBlcXVpdmFsZW50IHRvIG1vZGVsLlxuICAgIGZ1bmN0aW9uIGNsb25lV2l0aE9mZnNldChpbnB1dCwgbW9kZWwpIHtcbiAgICAgICAgdmFyIHJlcywgZGlmZjtcbiAgICAgICAgaWYgKG1vZGVsLl9pc1VUQykge1xuICAgICAgICAgICAgcmVzID0gbW9kZWwuY2xvbmUoKTtcbiAgICAgICAgICAgIGRpZmYgPVxuICAgICAgICAgICAgICAgIChpc01vbWVudChpbnB1dCkgfHwgaXNEYXRlKGlucHV0KVxuICAgICAgICAgICAgICAgICAgICA/IGlucHV0LnZhbHVlT2YoKVxuICAgICAgICAgICAgICAgICAgICA6IGNyZWF0ZUxvY2FsKGlucHV0KS52YWx1ZU9mKCkpIC0gcmVzLnZhbHVlT2YoKTtcbiAgICAgICAgICAgIC8vIFVzZSBsb3ctbGV2ZWwgYXBpLCBiZWNhdXNlIHRoaXMgZm4gaXMgbG93LWxldmVsIGFwaS5cbiAgICAgICAgICAgIHJlcy5fZC5zZXRUaW1lKHJlcy5fZC52YWx1ZU9mKCkgKyBkaWZmKTtcbiAgICAgICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldChyZXMsIGZhbHNlKTtcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlTG9jYWwoaW5wdXQpLmxvY2FsKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXREYXRlT2Zmc2V0KG0pIHtcbiAgICAgICAgLy8gT24gRmlyZWZveC4yNCBEYXRlI2dldFRpbWV6b25lT2Zmc2V0IHJldHVybnMgYSBmbG9hdGluZyBwb2ludC5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21vbWVudC9tb21lbnQvcHVsbC8xODcxXG4gICAgICAgIHJldHVybiAtTWF0aC5yb3VuZChtLl9kLmdldFRpbWV6b25lT2Zmc2V0KCkpO1xuICAgIH1cblxuICAgIC8vIEhPT0tTXG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdoZW5ldmVyIGEgbW9tZW50IGlzIG11dGF0ZWQuXG4gICAgLy8gSXQgaXMgaW50ZW5kZWQgdG8ga2VlcCB0aGUgb2Zmc2V0IGluIHN5bmMgd2l0aCB0aGUgdGltZXpvbmUuXG4gICAgaG9va3MudXBkYXRlT2Zmc2V0ID0gZnVuY3Rpb24gKCkge307XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICAvLyBrZWVwTG9jYWxUaW1lID0gdHJ1ZSBtZWFucyBvbmx5IGNoYW5nZSB0aGUgdGltZXpvbmUsIHdpdGhvdXRcbiAgICAvLyBhZmZlY3RpbmcgdGhlIGxvY2FsIGhvdXIuIFNvIDU6MzE6MjYgKzAzMDAgLS1bdXRjT2Zmc2V0KDIsIHRydWUpXS0tPlxuICAgIC8vIDU6MzE6MjYgKzAyMDAgSXQgaXMgcG9zc2libGUgdGhhdCA1OjMxOjI2IGRvZXNuJ3QgZXhpc3Qgd2l0aCBvZmZzZXRcbiAgICAvLyArMDIwMCwgc28gd2UgYWRqdXN0IHRoZSB0aW1lIGFzIG5lZWRlZCwgdG8gYmUgdmFsaWQuXG4gICAgLy9cbiAgICAvLyBLZWVwaW5nIHRoZSB0aW1lIGFjdHVhbGx5IGFkZHMvc3VidHJhY3RzIChvbmUgaG91cilcbiAgICAvLyBmcm9tIHRoZSBhY3R1YWwgcmVwcmVzZW50ZWQgdGltZS4gVGhhdCBpcyB3aHkgd2UgY2FsbCB1cGRhdGVPZmZzZXRcbiAgICAvLyBhIHNlY29uZCB0aW1lLiBJbiBjYXNlIGl0IHdhbnRzIHVzIHRvIGNoYW5nZSB0aGUgb2Zmc2V0IGFnYWluXG4gICAgLy8gX2NoYW5nZUluUHJvZ3Jlc3MgPT0gdHJ1ZSBjYXNlLCB0aGVuIHdlIGhhdmUgdG8gYWRqdXN0LCBiZWNhdXNlXG4gICAgLy8gdGhlcmUgaXMgbm8gc3VjaCB0aW1lIGluIHRoZSBnaXZlbiB0aW1lem9uZS5cbiAgICBmdW5jdGlvbiBnZXRTZXRPZmZzZXQoaW5wdXQsIGtlZXBMb2NhbFRpbWUsIGtlZXBNaW51dGVzKSB7XG4gICAgICAgIHZhciBvZmZzZXQgPSB0aGlzLl9vZmZzZXQgfHwgMCxcbiAgICAgICAgICAgIGxvY2FsQWRqdXN0O1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQgIT0gbnVsbCA/IHRoaXMgOiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgaW5wdXQgPSBvZmZzZXRGcm9tU3RyaW5nKG1hdGNoU2hvcnRPZmZzZXQsIGlucHV0KTtcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChNYXRoLmFicyhpbnB1dCkgPCAxNiAmJiAha2VlcE1pbnV0ZXMpIHtcbiAgICAgICAgICAgICAgICBpbnB1dCA9IGlucHV0ICogNjA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2lzVVRDICYmIGtlZXBMb2NhbFRpbWUpIHtcbiAgICAgICAgICAgICAgICBsb2NhbEFkanVzdCA9IGdldERhdGVPZmZzZXQodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9vZmZzZXQgPSBpbnB1dDtcbiAgICAgICAgICAgIHRoaXMuX2lzVVRDID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChsb2NhbEFkanVzdCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGQobG9jYWxBZGp1c3QsICdtJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob2Zmc2V0ICE9PSBpbnB1dCkge1xuICAgICAgICAgICAgICAgIGlmICgha2VlcExvY2FsVGltZSB8fCB0aGlzLl9jaGFuZ2VJblByb2dyZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIGFkZFN1YnRyYWN0KFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZUR1cmF0aW9uKGlucHV0IC0gb2Zmc2V0LCAnbScpLFxuICAgICAgICAgICAgICAgICAgICAgICAgMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5fY2hhbmdlSW5Qcm9ncmVzcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFuZ2VJblByb2dyZXNzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHRoaXMsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFuZ2VJblByb2dyZXNzID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9pc1VUQyA/IG9mZnNldCA6IGdldERhdGVPZmZzZXQodGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRab25lKGlucHV0LCBrZWVwTG9jYWxUaW1lKSB7XG4gICAgICAgIGlmIChpbnB1dCAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGlucHV0ID0gLWlucHV0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnV0Y09mZnNldChpbnB1dCwga2VlcExvY2FsVGltZSk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIC10aGlzLnV0Y09mZnNldCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0T2Zmc2V0VG9VVEMoa2VlcExvY2FsVGltZSkge1xuICAgICAgICByZXR1cm4gdGhpcy51dGNPZmZzZXQoMCwga2VlcExvY2FsVGltZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0T2Zmc2V0VG9Mb2NhbChrZWVwTG9jYWxUaW1lKSB7XG4gICAgICAgIGlmICh0aGlzLl9pc1VUQykge1xuICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoMCwga2VlcExvY2FsVGltZSk7XG4gICAgICAgICAgICB0aGlzLl9pc1VUQyA9IGZhbHNlO1xuXG4gICAgICAgICAgICBpZiAoa2VlcExvY2FsVGltZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3VidHJhY3QoZ2V0RGF0ZU9mZnNldCh0aGlzKSwgJ20nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRPZmZzZXRUb1BhcnNlZE9mZnNldCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX3R6bSAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLnV0Y09mZnNldCh0aGlzLl90em0sIGZhbHNlLCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5faSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHZhciB0Wm9uZSA9IG9mZnNldEZyb21TdHJpbmcobWF0Y2hPZmZzZXQsIHRoaXMuX2kpO1xuICAgICAgICAgICAgaWYgKHRab25lICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnV0Y09mZnNldCh0Wm9uZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KDAsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhc0FsaWduZWRIb3VyT2Zmc2V0KGlucHV0KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpbnB1dCA9IGlucHV0ID8gY3JlYXRlTG9jYWwoaW5wdXQpLnV0Y09mZnNldCgpIDogMDtcblxuICAgICAgICByZXR1cm4gKHRoaXMudXRjT2Zmc2V0KCkgLSBpbnB1dCkgJSA2MCA9PT0gMDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0RheWxpZ2h0U2F2aW5nVGltZSgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KCkgPiB0aGlzLmNsb25lKCkubW9udGgoMCkudXRjT2Zmc2V0KCkgfHxcbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KCkgPiB0aGlzLmNsb25lKCkubW9udGgoNSkudXRjT2Zmc2V0KClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0RheWxpZ2h0U2F2aW5nVGltZVNoaWZ0ZWQoKSB7XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQodGhpcy5faXNEU1RTaGlmdGVkKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzRFNUU2hpZnRlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjID0ge30sXG4gICAgICAgICAgICBvdGhlcjtcblxuICAgICAgICBjb3B5Q29uZmlnKGMsIHRoaXMpO1xuICAgICAgICBjID0gcHJlcGFyZUNvbmZpZyhjKTtcblxuICAgICAgICBpZiAoYy5fYSkge1xuICAgICAgICAgICAgb3RoZXIgPSBjLl9pc1VUQyA/IGNyZWF0ZVVUQyhjLl9hKSA6IGNyZWF0ZUxvY2FsKGMuX2EpO1xuICAgICAgICAgICAgdGhpcy5faXNEU1RTaGlmdGVkID1cbiAgICAgICAgICAgICAgICB0aGlzLmlzVmFsaWQoKSAmJiBjb21wYXJlQXJyYXlzKGMuX2EsIG90aGVyLnRvQXJyYXkoKSkgPiAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5faXNEU1RTaGlmdGVkID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5faXNEU1RTaGlmdGVkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTG9jYWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/ICF0aGlzLl9pc1VUQyA6IGZhbHNlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVXRjT2Zmc2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgPyB0aGlzLl9pc1VUQyA6IGZhbHNlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVXRjKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgPyB0aGlzLl9pc1VUQyAmJiB0aGlzLl9vZmZzZXQgPT09IDAgOiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBBU1AuTkVUIGpzb24gZGF0ZSBmb3JtYXQgcmVnZXhcbiAgICB2YXIgYXNwTmV0UmVnZXggPSAvXigtfFxcKyk/KD86KFxcZCopWy4gXSk/KFxcZCspOihcXGQrKSg/OjooXFxkKykoXFwuXFxkKik/KT8kLyxcbiAgICAgICAgLy8gZnJvbSBodHRwOi8vZG9jcy5jbG9zdXJlLWxpYnJhcnkuZ29vZ2xlY29kZS5jb20vZ2l0L2Nsb3N1cmVfZ29vZ19kYXRlX2RhdGUuanMuc291cmNlLmh0bWxcbiAgICAgICAgLy8gc29tZXdoYXQgbW9yZSBpbiBsaW5lIHdpdGggNC40LjMuMiAyMDA0IHNwZWMsIGJ1dCBhbGxvd3MgZGVjaW1hbCBhbnl3aGVyZVxuICAgICAgICAvLyBhbmQgZnVydGhlciBtb2RpZmllZCB0byBhbGxvdyBmb3Igc3RyaW5ncyBjb250YWluaW5nIGJvdGggd2VlayBhbmQgZGF5XG4gICAgICAgIGlzb1JlZ2V4ID1cbiAgICAgICAgICAgIC9eKC18XFwrKT9QKD86KFstK10/WzAtOSwuXSopWSk/KD86KFstK10/WzAtOSwuXSopTSk/KD86KFstK10/WzAtOSwuXSopVyk/KD86KFstK10/WzAtOSwuXSopRCk/KD86VCg/OihbLStdP1swLTksLl0qKUgpPyg/OihbLStdP1swLTksLl0qKU0pPyg/OihbLStdP1swLTksLl0qKVMpPyk/JC87XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVEdXJhdGlvbihpbnB1dCwga2V5KSB7XG4gICAgICAgIHZhciBkdXJhdGlvbiA9IGlucHV0LFxuICAgICAgICAgICAgLy8gbWF0Y2hpbmcgYWdhaW5zdCByZWdleHAgaXMgZXhwZW5zaXZlLCBkbyBpdCBvbiBkZW1hbmRcbiAgICAgICAgICAgIG1hdGNoID0gbnVsbCxcbiAgICAgICAgICAgIHNpZ24sXG4gICAgICAgICAgICByZXQsXG4gICAgICAgICAgICBkaWZmUmVzO1xuXG4gICAgICAgIGlmIChpc0R1cmF0aW9uKGlucHV0KSkge1xuICAgICAgICAgICAgZHVyYXRpb24gPSB7XG4gICAgICAgICAgICAgICAgbXM6IGlucHV0Ll9taWxsaXNlY29uZHMsXG4gICAgICAgICAgICAgICAgZDogaW5wdXQuX2RheXMsXG4gICAgICAgICAgICAgICAgTTogaW5wdXQuX21vbnRocyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoaXNOdW1iZXIoaW5wdXQpIHx8ICFpc05hTigraW5wdXQpKSB7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHt9O1xuICAgICAgICAgICAgaWYgKGtleSkge1xuICAgICAgICAgICAgICAgIGR1cmF0aW9uW2tleV0gPSAraW5wdXQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGR1cmF0aW9uLm1pbGxpc2Vjb25kcyA9ICtpbnB1dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICgobWF0Y2ggPSBhc3BOZXRSZWdleC5leGVjKGlucHV0KSkpIHtcbiAgICAgICAgICAgIHNpZ24gPSBtYXRjaFsxXSA9PT0gJy0nID8gLTEgOiAxO1xuICAgICAgICAgICAgZHVyYXRpb24gPSB7XG4gICAgICAgICAgICAgICAgeTogMCxcbiAgICAgICAgICAgICAgICBkOiB0b0ludChtYXRjaFtEQVRFXSkgKiBzaWduLFxuICAgICAgICAgICAgICAgIGg6IHRvSW50KG1hdGNoW0hPVVJdKSAqIHNpZ24sXG4gICAgICAgICAgICAgICAgbTogdG9JbnQobWF0Y2hbTUlOVVRFXSkgKiBzaWduLFxuICAgICAgICAgICAgICAgIHM6IHRvSW50KG1hdGNoW1NFQ09ORF0pICogc2lnbixcbiAgICAgICAgICAgICAgICBtczogdG9JbnQoYWJzUm91bmQobWF0Y2hbTUlMTElTRUNPTkRdICogMTAwMCkpICogc2lnbiwgLy8gdGhlIG1pbGxpc2Vjb25kIGRlY2ltYWwgcG9pbnQgaXMgaW5jbHVkZWQgaW4gdGhlIG1hdGNoXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKChtYXRjaCA9IGlzb1JlZ2V4LmV4ZWMoaW5wdXQpKSkge1xuICAgICAgICAgICAgc2lnbiA9IG1hdGNoWzFdID09PSAnLScgPyAtMSA6IDE7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHtcbiAgICAgICAgICAgICAgICB5OiBwYXJzZUlzbyhtYXRjaFsyXSwgc2lnbiksXG4gICAgICAgICAgICAgICAgTTogcGFyc2VJc28obWF0Y2hbM10sIHNpZ24pLFxuICAgICAgICAgICAgICAgIHc6IHBhcnNlSXNvKG1hdGNoWzRdLCBzaWduKSxcbiAgICAgICAgICAgICAgICBkOiBwYXJzZUlzbyhtYXRjaFs1XSwgc2lnbiksXG4gICAgICAgICAgICAgICAgaDogcGFyc2VJc28obWF0Y2hbNl0sIHNpZ24pLFxuICAgICAgICAgICAgICAgIG06IHBhcnNlSXNvKG1hdGNoWzddLCBzaWduKSxcbiAgICAgICAgICAgICAgICBzOiBwYXJzZUlzbyhtYXRjaFs4XSwgc2lnbiksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKGR1cmF0aW9uID09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIGNoZWNrcyBmb3IgbnVsbCBvciB1bmRlZmluZWRcbiAgICAgICAgICAgIGR1cmF0aW9uID0ge307XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICB0eXBlb2YgZHVyYXRpb24gPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgICAoJ2Zyb20nIGluIGR1cmF0aW9uIHx8ICd0bycgaW4gZHVyYXRpb24pXG4gICAgICAgICkge1xuICAgICAgICAgICAgZGlmZlJlcyA9IG1vbWVudHNEaWZmZXJlbmNlKFxuICAgICAgICAgICAgICAgIGNyZWF0ZUxvY2FsKGR1cmF0aW9uLmZyb20pLFxuICAgICAgICAgICAgICAgIGNyZWF0ZUxvY2FsKGR1cmF0aW9uLnRvKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgZHVyYXRpb24gPSB7fTtcbiAgICAgICAgICAgIGR1cmF0aW9uLm1zID0gZGlmZlJlcy5taWxsaXNlY29uZHM7XG4gICAgICAgICAgICBkdXJhdGlvbi5NID0gZGlmZlJlcy5tb250aHM7XG4gICAgICAgIH1cblxuICAgICAgICByZXQgPSBuZXcgRHVyYXRpb24oZHVyYXRpb24pO1xuXG4gICAgICAgIGlmIChpc0R1cmF0aW9uKGlucHV0KSAmJiBoYXNPd25Qcm9wKGlucHV0LCAnX2xvY2FsZScpKSB7XG4gICAgICAgICAgICByZXQuX2xvY2FsZSA9IGlucHV0Ll9sb2NhbGU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNEdXJhdGlvbihpbnB1dCkgJiYgaGFzT3duUHJvcChpbnB1dCwgJ19pc1ZhbGlkJykpIHtcbiAgICAgICAgICAgIHJldC5faXNWYWxpZCA9IGlucHV0Ll9pc1ZhbGlkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG5cbiAgICBjcmVhdGVEdXJhdGlvbi5mbiA9IER1cmF0aW9uLnByb3RvdHlwZTtcbiAgICBjcmVhdGVEdXJhdGlvbi5pbnZhbGlkID0gY3JlYXRlSW52YWxpZCQxO1xuXG4gICAgZnVuY3Rpb24gcGFyc2VJc28oaW5wLCBzaWduKSB7XG4gICAgICAgIC8vIFdlJ2Qgbm9ybWFsbHkgdXNlIH5+aW5wIGZvciB0aGlzLCBidXQgdW5mb3J0dW5hdGVseSBpdCBhbHNvXG4gICAgICAgIC8vIGNvbnZlcnRzIGZsb2F0cyB0byBpbnRzLlxuICAgICAgICAvLyBpbnAgbWF5IGJlIHVuZGVmaW5lZCwgc28gY2FyZWZ1bCBjYWxsaW5nIHJlcGxhY2Ugb24gaXQuXG4gICAgICAgIHZhciByZXMgPSBpbnAgJiYgcGFyc2VGbG9hdChpbnAucmVwbGFjZSgnLCcsICcuJykpO1xuICAgICAgICAvLyBhcHBseSBzaWduIHdoaWxlIHdlJ3JlIGF0IGl0XG4gICAgICAgIHJldHVybiAoaXNOYU4ocmVzKSA/IDAgOiByZXMpICogc2lnbjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwb3NpdGl2ZU1vbWVudHNEaWZmZXJlbmNlKGJhc2UsIG90aGVyKSB7XG4gICAgICAgIHZhciByZXMgPSB7fTtcblxuICAgICAgICByZXMubW9udGhzID1cbiAgICAgICAgICAgIG90aGVyLm1vbnRoKCkgLSBiYXNlLm1vbnRoKCkgKyAob3RoZXIueWVhcigpIC0gYmFzZS55ZWFyKCkpICogMTI7XG4gICAgICAgIGlmIChiYXNlLmNsb25lKCkuYWRkKHJlcy5tb250aHMsICdNJykuaXNBZnRlcihvdGhlcikpIHtcbiAgICAgICAgICAgIC0tcmVzLm1vbnRocztcbiAgICAgICAgfVxuXG4gICAgICAgIHJlcy5taWxsaXNlY29uZHMgPSArb3RoZXIgLSArYmFzZS5jbG9uZSgpLmFkZChyZXMubW9udGhzLCAnTScpO1xuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW9tZW50c0RpZmZlcmVuY2UoYmFzZSwgb3RoZXIpIHtcbiAgICAgICAgdmFyIHJlcztcbiAgICAgICAgaWYgKCEoYmFzZS5pc1ZhbGlkKCkgJiYgb3RoZXIuaXNWYWxpZCgpKSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgbWlsbGlzZWNvbmRzOiAwLCBtb250aHM6IDAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIG90aGVyID0gY2xvbmVXaXRoT2Zmc2V0KG90aGVyLCBiYXNlKTtcbiAgICAgICAgaWYgKGJhc2UuaXNCZWZvcmUob3RoZXIpKSB7XG4gICAgICAgICAgICByZXMgPSBwb3NpdGl2ZU1vbWVudHNEaWZmZXJlbmNlKGJhc2UsIG90aGVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlcyA9IHBvc2l0aXZlTW9tZW50c0RpZmZlcmVuY2Uob3RoZXIsIGJhc2UpO1xuICAgICAgICAgICAgcmVzLm1pbGxpc2Vjb25kcyA9IC1yZXMubWlsbGlzZWNvbmRzO1xuICAgICAgICAgICAgcmVzLm1vbnRocyA9IC1yZXMubW9udGhzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICAvLyBUT0RPOiByZW1vdmUgJ25hbWUnIGFyZyBhZnRlciBkZXByZWNhdGlvbiBpcyByZW1vdmVkXG4gICAgZnVuY3Rpb24gY3JlYXRlQWRkZXIoZGlyZWN0aW9uLCBuYW1lKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsLCBwZXJpb2QpIHtcbiAgICAgICAgICAgIHZhciBkdXIsIHRtcDtcbiAgICAgICAgICAgIC8vaW52ZXJ0IHRoZSBhcmd1bWVudHMsIGJ1dCBjb21wbGFpbiBhYm91dCBpdFxuICAgICAgICAgICAgaWYgKHBlcmlvZCAhPT0gbnVsbCAmJiAhaXNOYU4oK3BlcmlvZCkpIHtcbiAgICAgICAgICAgICAgICBkZXByZWNhdGVTaW1wbGUoXG4gICAgICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICdtb21lbnQoKS4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJyhwZXJpb2QsIG51bWJlcikgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBtb21lbnQoKS4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJyhudW1iZXIsIHBlcmlvZCkuICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ1NlZSBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2FkZC1pbnZlcnRlZC1wYXJhbS8gZm9yIG1vcmUgaW5mby4nXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0bXAgPSB2YWw7XG4gICAgICAgICAgICAgICAgdmFsID0gcGVyaW9kO1xuICAgICAgICAgICAgICAgIHBlcmlvZCA9IHRtcDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZHVyID0gY3JlYXRlRHVyYXRpb24odmFsLCBwZXJpb2QpO1xuICAgICAgICAgICAgYWRkU3VidHJhY3QodGhpcywgZHVyLCBkaXJlY3Rpb24pO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkU3VidHJhY3QobW9tLCBkdXJhdGlvbiwgaXNBZGRpbmcsIHVwZGF0ZU9mZnNldCkge1xuICAgICAgICB2YXIgbWlsbGlzZWNvbmRzID0gZHVyYXRpb24uX21pbGxpc2Vjb25kcyxcbiAgICAgICAgICAgIGRheXMgPSBhYnNSb3VuZChkdXJhdGlvbi5fZGF5cyksXG4gICAgICAgICAgICBtb250aHMgPSBhYnNSb3VuZChkdXJhdGlvbi5fbW9udGhzKTtcblxuICAgICAgICBpZiAoIW1vbS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIC8vIE5vIG9wXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB1cGRhdGVPZmZzZXQgPSB1cGRhdGVPZmZzZXQgPT0gbnVsbCA/IHRydWUgOiB1cGRhdGVPZmZzZXQ7XG5cbiAgICAgICAgaWYgKG1vbnRocykge1xuICAgICAgICAgICAgc2V0TW9udGgobW9tLCBnZXQobW9tLCAnTW9udGgnKSArIG1vbnRocyAqIGlzQWRkaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF5cykge1xuICAgICAgICAgICAgc2V0JDEobW9tLCAnRGF0ZScsIGdldChtb20sICdEYXRlJykgKyBkYXlzICogaXNBZGRpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtaWxsaXNlY29uZHMpIHtcbiAgICAgICAgICAgIG1vbS5fZC5zZXRUaW1lKG1vbS5fZC52YWx1ZU9mKCkgKyBtaWxsaXNlY29uZHMgKiBpc0FkZGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVwZGF0ZU9mZnNldCkge1xuICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KG1vbSwgZGF5cyB8fCBtb250aHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGFkZCA9IGNyZWF0ZUFkZGVyKDEsICdhZGQnKSxcbiAgICAgICAgc3VidHJhY3QgPSBjcmVhdGVBZGRlcigtMSwgJ3N1YnRyYWN0Jyk7XG5cbiAgICBmdW5jdGlvbiBpc1N0cmluZyhpbnB1dCkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJyB8fCBpbnB1dCBpbnN0YW5jZW9mIFN0cmluZztcbiAgICB9XG5cbiAgICAvLyB0eXBlIE1vbWVudElucHV0ID0gTW9tZW50IHwgRGF0ZSB8IHN0cmluZyB8IG51bWJlciB8IChudW1iZXIgfCBzdHJpbmcpW10gfCBNb21lbnRJbnB1dE9iamVjdCB8IHZvaWQ7IC8vIG51bGwgfCB1bmRlZmluZWRcbiAgICBmdW5jdGlvbiBpc01vbWVudElucHV0KGlucHV0KSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBpc01vbWVudChpbnB1dCkgfHxcbiAgICAgICAgICAgIGlzRGF0ZShpbnB1dCkgfHxcbiAgICAgICAgICAgIGlzU3RyaW5nKGlucHV0KSB8fFxuICAgICAgICAgICAgaXNOdW1iZXIoaW5wdXQpIHx8XG4gICAgICAgICAgICBpc051bWJlck9yU3RyaW5nQXJyYXkoaW5wdXQpIHx8XG4gICAgICAgICAgICBpc01vbWVudElucHV0T2JqZWN0KGlucHV0KSB8fFxuICAgICAgICAgICAgaW5wdXQgPT09IG51bGwgfHxcbiAgICAgICAgICAgIGlucHV0ID09PSB1bmRlZmluZWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc01vbWVudElucHV0T2JqZWN0KGlucHV0KSB7XG4gICAgICAgIHZhciBvYmplY3RUZXN0ID0gaXNPYmplY3QoaW5wdXQpICYmICFpc09iamVjdEVtcHR5KGlucHV0KSxcbiAgICAgICAgICAgIHByb3BlcnR5VGVzdCA9IGZhbHNlLFxuICAgICAgICAgICAgcHJvcGVydGllcyA9IFtcbiAgICAgICAgICAgICAgICAneWVhcnMnLFxuICAgICAgICAgICAgICAgICd5ZWFyJyxcbiAgICAgICAgICAgICAgICAneScsXG4gICAgICAgICAgICAgICAgJ21vbnRocycsXG4gICAgICAgICAgICAgICAgJ21vbnRoJyxcbiAgICAgICAgICAgICAgICAnTScsXG4gICAgICAgICAgICAgICAgJ2RheXMnLFxuICAgICAgICAgICAgICAgICdkYXknLFxuICAgICAgICAgICAgICAgICdkJyxcbiAgICAgICAgICAgICAgICAnZGF0ZXMnLFxuICAgICAgICAgICAgICAgICdkYXRlJyxcbiAgICAgICAgICAgICAgICAnRCcsXG4gICAgICAgICAgICAgICAgJ2hvdXJzJyxcbiAgICAgICAgICAgICAgICAnaG91cicsXG4gICAgICAgICAgICAgICAgJ2gnLFxuICAgICAgICAgICAgICAgICdtaW51dGVzJyxcbiAgICAgICAgICAgICAgICAnbWludXRlJyxcbiAgICAgICAgICAgICAgICAnbScsXG4gICAgICAgICAgICAgICAgJ3NlY29uZHMnLFxuICAgICAgICAgICAgICAgICdzZWNvbmQnLFxuICAgICAgICAgICAgICAgICdzJyxcbiAgICAgICAgICAgICAgICAnbWlsbGlzZWNvbmRzJyxcbiAgICAgICAgICAgICAgICAnbWlsbGlzZWNvbmQnLFxuICAgICAgICAgICAgICAgICdtcycsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIHByb3BlcnR5LFxuICAgICAgICAgICAgcHJvcGVydHlMZW4gPSBwcm9wZXJ0aWVzLmxlbmd0aDtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcHJvcGVydHlMZW47IGkgKz0gMSkge1xuICAgICAgICAgICAgcHJvcGVydHkgPSBwcm9wZXJ0aWVzW2ldO1xuICAgICAgICAgICAgcHJvcGVydHlUZXN0ID0gcHJvcGVydHlUZXN0IHx8IGhhc093blByb3AoaW5wdXQsIHByb3BlcnR5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvYmplY3RUZXN0ICYmIHByb3BlcnR5VGVzdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc051bWJlck9yU3RyaW5nQXJyYXkoaW5wdXQpIHtcbiAgICAgICAgdmFyIGFycmF5VGVzdCA9IGlzQXJyYXkoaW5wdXQpLFxuICAgICAgICAgICAgZGF0YVR5cGVUZXN0ID0gZmFsc2U7XG4gICAgICAgIGlmIChhcnJheVRlc3QpIHtcbiAgICAgICAgICAgIGRhdGFUeXBlVGVzdCA9XG4gICAgICAgICAgICAgICAgaW5wdXQuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAhaXNOdW1iZXIoaXRlbSkgJiYgaXNTdHJpbmcoaW5wdXQpO1xuICAgICAgICAgICAgICAgIH0pLmxlbmd0aCA9PT0gMDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXJyYXlUZXN0ICYmIGRhdGFUeXBlVGVzdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0NhbGVuZGFyU3BlYyhpbnB1dCkge1xuICAgICAgICB2YXIgb2JqZWN0VGVzdCA9IGlzT2JqZWN0KGlucHV0KSAmJiAhaXNPYmplY3RFbXB0eShpbnB1dCksXG4gICAgICAgICAgICBwcm9wZXJ0eVRlc3QgPSBmYWxzZSxcbiAgICAgICAgICAgIHByb3BlcnRpZXMgPSBbXG4gICAgICAgICAgICAgICAgJ3NhbWVEYXknLFxuICAgICAgICAgICAgICAgICduZXh0RGF5JyxcbiAgICAgICAgICAgICAgICAnbGFzdERheScsXG4gICAgICAgICAgICAgICAgJ25leHRXZWVrJyxcbiAgICAgICAgICAgICAgICAnbGFzdFdlZWsnLFxuICAgICAgICAgICAgICAgICdzYW1lRWxzZScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIHByb3BlcnR5O1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbaV07XG4gICAgICAgICAgICBwcm9wZXJ0eVRlc3QgPSBwcm9wZXJ0eVRlc3QgfHwgaGFzT3duUHJvcChpbnB1dCwgcHJvcGVydHkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9iamVjdFRlc3QgJiYgcHJvcGVydHlUZXN0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldENhbGVuZGFyRm9ybWF0KG15TW9tZW50LCBub3cpIHtcbiAgICAgICAgdmFyIGRpZmYgPSBteU1vbWVudC5kaWZmKG5vdywgJ2RheXMnLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIGRpZmYgPCAtNlxuICAgICAgICAgICAgPyAnc2FtZUVsc2UnXG4gICAgICAgICAgICA6IGRpZmYgPCAtMVxuICAgICAgICAgICAgICA/ICdsYXN0V2VlaydcbiAgICAgICAgICAgICAgOiBkaWZmIDwgMFxuICAgICAgICAgICAgICAgID8gJ2xhc3REYXknXG4gICAgICAgICAgICAgICAgOiBkaWZmIDwgMVxuICAgICAgICAgICAgICAgICAgPyAnc2FtZURheSdcbiAgICAgICAgICAgICAgICAgIDogZGlmZiA8IDJcbiAgICAgICAgICAgICAgICAgICAgPyAnbmV4dERheSdcbiAgICAgICAgICAgICAgICAgICAgOiBkaWZmIDwgN1xuICAgICAgICAgICAgICAgICAgICAgID8gJ25leHRXZWVrJ1xuICAgICAgICAgICAgICAgICAgICAgIDogJ3NhbWVFbHNlJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjYWxlbmRhciQxKHRpbWUsIGZvcm1hdHMpIHtcbiAgICAgICAgLy8gU3VwcG9ydCBmb3Igc2luZ2xlIHBhcmFtZXRlciwgZm9ybWF0cyBvbmx5IG92ZXJsb2FkIHRvIHRoZSBjYWxlbmRhciBmdW5jdGlvblxuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgaWYgKCFhcmd1bWVudHNbMF0pIHtcbiAgICAgICAgICAgICAgICB0aW1lID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGZvcm1hdHMgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzTW9tZW50SW5wdXQoYXJndW1lbnRzWzBdKSkge1xuICAgICAgICAgICAgICAgIHRpbWUgPSBhcmd1bWVudHNbMF07XG4gICAgICAgICAgICAgICAgZm9ybWF0cyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNDYWxlbmRhclNwZWMoYXJndW1lbnRzWzBdKSkge1xuICAgICAgICAgICAgICAgIGZvcm1hdHMgPSBhcmd1bWVudHNbMF07XG4gICAgICAgICAgICAgICAgdGltZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBXZSB3YW50IHRvIGNvbXBhcmUgdGhlIHN0YXJ0IG9mIHRvZGF5LCB2cyB0aGlzLlxuICAgICAgICAvLyBHZXR0aW5nIHN0YXJ0LW9mLXRvZGF5IGRlcGVuZHMgb24gd2hldGhlciB3ZSdyZSBsb2NhbC91dGMvb2Zmc2V0IG9yIG5vdC5cbiAgICAgICAgdmFyIG5vdyA9IHRpbWUgfHwgY3JlYXRlTG9jYWwoKSxcbiAgICAgICAgICAgIHNvZCA9IGNsb25lV2l0aE9mZnNldChub3csIHRoaXMpLnN0YXJ0T2YoJ2RheScpLFxuICAgICAgICAgICAgZm9ybWF0ID0gaG9va3MuY2FsZW5kYXJGb3JtYXQodGhpcywgc29kKSB8fCAnc2FtZUVsc2UnLFxuICAgICAgICAgICAgb3V0cHV0ID1cbiAgICAgICAgICAgICAgICBmb3JtYXRzICYmXG4gICAgICAgICAgICAgICAgKGlzRnVuY3Rpb24oZm9ybWF0c1tmb3JtYXRdKVxuICAgICAgICAgICAgICAgICAgICA/IGZvcm1hdHNbZm9ybWF0XS5jYWxsKHRoaXMsIG5vdylcbiAgICAgICAgICAgICAgICAgICAgOiBmb3JtYXRzW2Zvcm1hdF0pO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1hdChcbiAgICAgICAgICAgIG91dHB1dCB8fCB0aGlzLmxvY2FsZURhdGEoKS5jYWxlbmRhcihmb3JtYXQsIHRoaXMsIGNyZWF0ZUxvY2FsKG5vdykpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2xvbmUoKSB7XG4gICAgICAgIHJldHVybiBuZXcgTW9tZW50KHRoaXMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQWZ0ZXIoaW5wdXQsIHVuaXRzKSB7XG4gICAgICAgIHZhciBsb2NhbElucHV0ID0gaXNNb21lbnQoaW5wdXQpID8gaW5wdXQgOiBjcmVhdGVMb2NhbChpbnB1dCk7XG4gICAgICAgIGlmICghKHRoaXMuaXNWYWxpZCgpICYmIGxvY2FsSW5wdXQuaXNWYWxpZCgpKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpIHx8ICdtaWxsaXNlY29uZCc7XG4gICAgICAgIGlmICh1bml0cyA9PT0gJ21pbGxpc2Vjb25kJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVPZigpID4gbG9jYWxJbnB1dC52YWx1ZU9mKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxJbnB1dC52YWx1ZU9mKCkgPCB0aGlzLmNsb25lKCkuc3RhcnRPZih1bml0cykudmFsdWVPZigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNCZWZvcmUoaW5wdXQsIHVuaXRzKSB7XG4gICAgICAgIHZhciBsb2NhbElucHV0ID0gaXNNb21lbnQoaW5wdXQpID8gaW5wdXQgOiBjcmVhdGVMb2NhbChpbnB1dCk7XG4gICAgICAgIGlmICghKHRoaXMuaXNWYWxpZCgpICYmIGxvY2FsSW5wdXQuaXNWYWxpZCgpKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpIHx8ICdtaWxsaXNlY29uZCc7XG4gICAgICAgIGlmICh1bml0cyA9PT0gJ21pbGxpc2Vjb25kJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVPZigpIDwgbG9jYWxJbnB1dC52YWx1ZU9mKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jbG9uZSgpLmVuZE9mKHVuaXRzKS52YWx1ZU9mKCkgPCBsb2NhbElucHV0LnZhbHVlT2YoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQmV0d2Vlbihmcm9tLCB0bywgdW5pdHMsIGluY2x1c2l2aXR5KSB7XG4gICAgICAgIHZhciBsb2NhbEZyb20gPSBpc01vbWVudChmcm9tKSA/IGZyb20gOiBjcmVhdGVMb2NhbChmcm9tKSxcbiAgICAgICAgICAgIGxvY2FsVG8gPSBpc01vbWVudCh0bykgPyB0byA6IGNyZWF0ZUxvY2FsKHRvKTtcbiAgICAgICAgaWYgKCEodGhpcy5pc1ZhbGlkKCkgJiYgbG9jYWxGcm9tLmlzVmFsaWQoKSAmJiBsb2NhbFRvLmlzVmFsaWQoKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpbmNsdXNpdml0eSA9IGluY2x1c2l2aXR5IHx8ICcoKSc7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAoaW5jbHVzaXZpdHlbMF0gPT09ICcoJ1xuICAgICAgICAgICAgICAgID8gdGhpcy5pc0FmdGVyKGxvY2FsRnJvbSwgdW5pdHMpXG4gICAgICAgICAgICAgICAgOiAhdGhpcy5pc0JlZm9yZShsb2NhbEZyb20sIHVuaXRzKSkgJiZcbiAgICAgICAgICAgIChpbmNsdXNpdml0eVsxXSA9PT0gJyknXG4gICAgICAgICAgICAgICAgPyB0aGlzLmlzQmVmb3JlKGxvY2FsVG8sIHVuaXRzKVxuICAgICAgICAgICAgICAgIDogIXRoaXMuaXNBZnRlcihsb2NhbFRvLCB1bml0cykpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNTYW1lKGlucHV0LCB1bml0cykge1xuICAgICAgICB2YXIgbG9jYWxJbnB1dCA9IGlzTW9tZW50KGlucHV0KSA/IGlucHV0IDogY3JlYXRlTG9jYWwoaW5wdXQpLFxuICAgICAgICAgICAgaW5wdXRNcztcbiAgICAgICAgaWYgKCEodGhpcy5pc1ZhbGlkKCkgJiYgbG9jYWxJbnB1dC5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cykgfHwgJ21pbGxpc2Vjb25kJztcbiAgICAgICAgaWYgKHVuaXRzID09PSAnbWlsbGlzZWNvbmQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCkgPT09IGxvY2FsSW5wdXQudmFsdWVPZigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW5wdXRNcyA9IGxvY2FsSW5wdXQudmFsdWVPZigpO1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICB0aGlzLmNsb25lKCkuc3RhcnRPZih1bml0cykudmFsdWVPZigpIDw9IGlucHV0TXMgJiZcbiAgICAgICAgICAgICAgICBpbnB1dE1zIDw9IHRoaXMuY2xvbmUoKS5lbmRPZih1bml0cykudmFsdWVPZigpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNTYW1lT3JBZnRlcihpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTYW1lKGlucHV0LCB1bml0cykgfHwgdGhpcy5pc0FmdGVyKGlucHV0LCB1bml0cyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNTYW1lT3JCZWZvcmUoaW5wdXQsIHVuaXRzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzU2FtZShpbnB1dCwgdW5pdHMpIHx8IHRoaXMuaXNCZWZvcmUoaW5wdXQsIHVuaXRzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkaWZmKGlucHV0LCB1bml0cywgYXNGbG9hdCkge1xuICAgICAgICB2YXIgdGhhdCwgem9uZURlbHRhLCBvdXRwdXQ7XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoYXQgPSBjbG9uZVdpdGhPZmZzZXQoaW5wdXQsIHRoaXMpO1xuXG4gICAgICAgIGlmICghdGhhdC5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cblxuICAgICAgICB6b25lRGVsdGEgPSAodGhhdC51dGNPZmZzZXQoKSAtIHRoaXMudXRjT2Zmc2V0KCkpICogNmU0O1xuXG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuXG4gICAgICAgIHN3aXRjaCAodW5pdHMpIHtcbiAgICAgICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9IG1vbnRoRGlmZih0aGlzLCB0aGF0KSAvIDEyO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9IG1vbnRoRGlmZih0aGlzLCB0aGF0KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3F1YXJ0ZXInOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9IG1vbnRoRGlmZih0aGlzLCB0aGF0KSAvIDM7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzZWNvbmQnOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9ICh0aGlzIC0gdGhhdCkgLyAxZTM7XG4gICAgICAgICAgICAgICAgYnJlYWs7IC8vIDEwMDBcbiAgICAgICAgICAgIGNhc2UgJ21pbnV0ZSc6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gKHRoaXMgLSB0aGF0KSAvIDZlNDtcbiAgICAgICAgICAgICAgICBicmVhazsgLy8gMTAwMCAqIDYwXG4gICAgICAgICAgICBjYXNlICdob3VyJzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAodGhpcyAtIHRoYXQpIC8gMzZlNTtcbiAgICAgICAgICAgICAgICBicmVhazsgLy8gMTAwMCAqIDYwICogNjBcbiAgICAgICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gKHRoaXMgLSB0aGF0IC0gem9uZURlbHRhKSAvIDg2NGU1O1xuICAgICAgICAgICAgICAgIGJyZWFrOyAvLyAxMDAwICogNjAgKiA2MCAqIDI0LCBuZWdhdGUgZHN0XG4gICAgICAgICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAodGhpcyAtIHRoYXQgLSB6b25lRGVsdGEpIC8gNjA0OGU1O1xuICAgICAgICAgICAgICAgIGJyZWFrOyAvLyAxMDAwICogNjAgKiA2MCAqIDI0ICogNywgbmVnYXRlIGRzdFxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSB0aGlzIC0gdGhhdDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhc0Zsb2F0ID8gb3V0cHV0IDogYWJzRmxvb3Iob3V0cHV0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb250aERpZmYoYSwgYikge1xuICAgICAgICBpZiAoYS5kYXRlKCkgPCBiLmRhdGUoKSkge1xuICAgICAgICAgICAgLy8gZW5kLW9mLW1vbnRoIGNhbGN1bGF0aW9ucyB3b3JrIGNvcnJlY3Qgd2hlbiB0aGUgc3RhcnQgbW9udGggaGFzIG1vcmVcbiAgICAgICAgICAgIC8vIGRheXMgdGhhbiB0aGUgZW5kIG1vbnRoLlxuICAgICAgICAgICAgcmV0dXJuIC1tb250aERpZmYoYiwgYSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZGlmZmVyZW5jZSBpbiBtb250aHNcbiAgICAgICAgdmFyIHdob2xlTW9udGhEaWZmID0gKGIueWVhcigpIC0gYS55ZWFyKCkpICogMTIgKyAoYi5tb250aCgpIC0gYS5tb250aCgpKSxcbiAgICAgICAgICAgIC8vIGIgaXMgaW4gKGFuY2hvciAtIDEgbW9udGgsIGFuY2hvciArIDEgbW9udGgpXG4gICAgICAgICAgICBhbmNob3IgPSBhLmNsb25lKCkuYWRkKHdob2xlTW9udGhEaWZmLCAnbW9udGhzJyksXG4gICAgICAgICAgICBhbmNob3IyLFxuICAgICAgICAgICAgYWRqdXN0O1xuXG4gICAgICAgIGlmIChiIC0gYW5jaG9yIDwgMCkge1xuICAgICAgICAgICAgYW5jaG9yMiA9IGEuY2xvbmUoKS5hZGQod2hvbGVNb250aERpZmYgLSAxLCAnbW9udGhzJyk7XG4gICAgICAgICAgICAvLyBsaW5lYXIgYWNyb3NzIHRoZSBtb250aFxuICAgICAgICAgICAgYWRqdXN0ID0gKGIgLSBhbmNob3IpIC8gKGFuY2hvciAtIGFuY2hvcjIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYW5jaG9yMiA9IGEuY2xvbmUoKS5hZGQod2hvbGVNb250aERpZmYgKyAxLCAnbW9udGhzJyk7XG4gICAgICAgICAgICAvLyBsaW5lYXIgYWNyb3NzIHRoZSBtb250aFxuICAgICAgICAgICAgYWRqdXN0ID0gKGIgLSBhbmNob3IpIC8gKGFuY2hvcjIgLSBhbmNob3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9jaGVjayBmb3IgbmVnYXRpdmUgemVybywgcmV0dXJuIHplcm8gaWYgbmVnYXRpdmUgemVyb1xuICAgICAgICByZXR1cm4gLSh3aG9sZU1vbnRoRGlmZiArIGFkanVzdCkgfHwgMDtcbiAgICB9XG5cbiAgICBob29rcy5kZWZhdWx0Rm9ybWF0ID0gJ1lZWVktTU0tRERUSEg6bW06c3NaJztcbiAgICBob29rcy5kZWZhdWx0Rm9ybWF0VXRjID0gJ1lZWVktTU0tRERUSEg6bW06c3NbWl0nO1xuXG4gICAgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsb25lKCkubG9jYWxlKCdlbicpLmZvcm1hdCgnZGRkIE1NTSBERCBZWVlZIEhIOm1tOnNzIFtHTVRdWlonKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b0lTT1N0cmluZyhrZWVwT2Zmc2V0KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHZhciB1dGMgPSBrZWVwT2Zmc2V0ICE9PSB0cnVlLFxuICAgICAgICAgICAgbSA9IHV0YyA/IHRoaXMuY2xvbmUoKS51dGMoKSA6IHRoaXM7XG4gICAgICAgIGlmIChtLnllYXIoKSA8IDAgfHwgbS55ZWFyKCkgPiA5OTk5KSB7XG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0TW9tZW50KFxuICAgICAgICAgICAgICAgIG0sXG4gICAgICAgICAgICAgICAgdXRjXG4gICAgICAgICAgICAgICAgICAgID8gJ1lZWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1taXSdcbiAgICAgICAgICAgICAgICAgICAgOiAnWVlZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTWidcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcpKSB7XG4gICAgICAgICAgICAvLyBuYXRpdmUgaW1wbGVtZW50YXRpb24gaXMgfjUweCBmYXN0ZXIsIHVzZSBpdCB3aGVuIHdlIGNhblxuICAgICAgICAgICAgaWYgKHV0Yykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRvRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSh0aGlzLnZhbHVlT2YoKSArIHRoaXMudXRjT2Zmc2V0KCkgKiA2MCAqIDEwMDApXG4gICAgICAgICAgICAgICAgICAgIC50b0lTT1N0cmluZygpXG4gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCdaJywgZm9ybWF0TW9tZW50KG0sICdaJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmb3JtYXRNb21lbnQoXG4gICAgICAgICAgICBtLFxuICAgICAgICAgICAgdXRjID8gJ1lZWVktTU0tRERbVF1ISDptbTpzcy5TU1NbWl0nIDogJ1lZWVktTU0tRERbVF1ISDptbTpzcy5TU1NaJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiBhIGh1bWFuIHJlYWRhYmxlIHJlcHJlc2VudGF0aW9uIG9mIGEgbW9tZW50IHRoYXQgY2FuXG4gICAgICogYWxzbyBiZSBldmFsdWF0ZWQgdG8gZ2V0IGEgbmV3IG1vbWVudCB3aGljaCBpcyB0aGUgc2FtZVxuICAgICAqXG4gICAgICogQGxpbmsgaHR0cHM6Ly9ub2RlanMub3JnL2Rpc3QvbGF0ZXN0L2RvY3MvYXBpL3V0aWwuaHRtbCN1dGlsX2N1c3RvbV9pbnNwZWN0X2Z1bmN0aW9uX29uX29iamVjdHNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpbnNwZWN0KCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gJ21vbWVudC5pbnZhbGlkKC8qICcgKyB0aGlzLl9pICsgJyAqLyknO1xuICAgICAgICB9XG4gICAgICAgIHZhciBmdW5jID0gJ21vbWVudCcsXG4gICAgICAgICAgICB6b25lID0gJycsXG4gICAgICAgICAgICBwcmVmaXgsXG4gICAgICAgICAgICB5ZWFyLFxuICAgICAgICAgICAgZGF0ZXRpbWUsXG4gICAgICAgICAgICBzdWZmaXg7XG4gICAgICAgIGlmICghdGhpcy5pc0xvY2FsKCkpIHtcbiAgICAgICAgICAgIGZ1bmMgPSB0aGlzLnV0Y09mZnNldCgpID09PSAwID8gJ21vbWVudC51dGMnIDogJ21vbWVudC5wYXJzZVpvbmUnO1xuICAgICAgICAgICAgem9uZSA9ICdaJztcbiAgICAgICAgfVxuICAgICAgICBwcmVmaXggPSAnWycgKyBmdW5jICsgJyhcIl0nO1xuICAgICAgICB5ZWFyID0gMCA8PSB0aGlzLnllYXIoKSAmJiB0aGlzLnllYXIoKSA8PSA5OTk5ID8gJ1lZWVknIDogJ1lZWVlZWSc7XG4gICAgICAgIGRhdGV0aW1lID0gJy1NTS1ERFtUXUhIOm1tOnNzLlNTUyc7XG4gICAgICAgIHN1ZmZpeCA9IHpvbmUgKyAnW1wiKV0nO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1hdChwcmVmaXggKyB5ZWFyICsgZGF0ZXRpbWUgKyBzdWZmaXgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZvcm1hdChpbnB1dFN0cmluZykge1xuICAgICAgICBpZiAoIWlucHV0U3RyaW5nKSB7XG4gICAgICAgICAgICBpbnB1dFN0cmluZyA9IHRoaXMuaXNVdGMoKVxuICAgICAgICAgICAgICAgID8gaG9va3MuZGVmYXVsdEZvcm1hdFV0Y1xuICAgICAgICAgICAgICAgIDogaG9va3MuZGVmYXVsdEZvcm1hdDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgb3V0cHV0ID0gZm9ybWF0TW9tZW50KHRoaXMsIGlucHV0U3RyaW5nKTtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLnBvc3Rmb3JtYXQob3V0cHV0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmcm9tKHRpbWUsIHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5pc1ZhbGlkKCkgJiZcbiAgICAgICAgICAgICgoaXNNb21lbnQodGltZSkgJiYgdGltZS5pc1ZhbGlkKCkpIHx8IGNyZWF0ZUxvY2FsKHRpbWUpLmlzVmFsaWQoKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlRHVyYXRpb24oeyB0bzogdGhpcywgZnJvbTogdGltZSB9KVxuICAgICAgICAgICAgICAgIC5sb2NhbGUodGhpcy5sb2NhbGUoKSlcbiAgICAgICAgICAgICAgICAuaHVtYW5pemUoIXdpdGhvdXRTdWZmaXgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmcm9tTm93KHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZnJvbShjcmVhdGVMb2NhbCgpLCB3aXRob3V0U3VmZml4KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0byh0aW1lLCB3aXRob3V0U3VmZml4KSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuaXNWYWxpZCgpICYmXG4gICAgICAgICAgICAoKGlzTW9tZW50KHRpbWUpICYmIHRpbWUuaXNWYWxpZCgpKSB8fCBjcmVhdGVMb2NhbCh0aW1lKS5pc1ZhbGlkKCkpXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUR1cmF0aW9uKHsgZnJvbTogdGhpcywgdG86IHRpbWUgfSlcbiAgICAgICAgICAgICAgICAubG9jYWxlKHRoaXMubG9jYWxlKCkpXG4gICAgICAgICAgICAgICAgLmh1bWFuaXplKCF3aXRob3V0U3VmZml4KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9Ob3cod2l0aG91dFN1ZmZpeCkge1xuICAgICAgICByZXR1cm4gdGhpcy50byhjcmVhdGVMb2NhbCgpLCB3aXRob3V0U3VmZml4KTtcbiAgICB9XG5cbiAgICAvLyBJZiBwYXNzZWQgYSBsb2NhbGUga2V5LCBpdCB3aWxsIHNldCB0aGUgbG9jYWxlIGZvciB0aGlzXG4gICAgLy8gaW5zdGFuY2UuICBPdGhlcndpc2UsIGl0IHdpbGwgcmV0dXJuIHRoZSBsb2NhbGUgY29uZmlndXJhdGlvblxuICAgIC8vIHZhcmlhYmxlcyBmb3IgdGhpcyBpbnN0YW5jZS5cbiAgICBmdW5jdGlvbiBsb2NhbGUoa2V5KSB7XG4gICAgICAgIHZhciBuZXdMb2NhbGVEYXRhO1xuXG4gICAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xvY2FsZS5fYWJicjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5ld0xvY2FsZURhdGEgPSBnZXRMb2NhbGUoa2V5KTtcbiAgICAgICAgICAgIGlmIChuZXdMb2NhbGVEYXRhICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2NhbGUgPSBuZXdMb2NhbGVEYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgbGFuZyA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ21vbWVudCgpLmxhbmcoKSBpcyBkZXByZWNhdGVkLiBJbnN0ZWFkLCB1c2UgbW9tZW50KCkubG9jYWxlRGF0YSgpIHRvIGdldCB0aGUgbGFuZ3VhZ2UgY29uZmlndXJhdGlvbi4gVXNlIG1vbWVudCgpLmxvY2FsZSgpIHRvIGNoYW5nZSBsYW5ndWFnZXMuJyxcbiAgICAgICAgZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGUoa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVEYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9jYWxlO1xuICAgIH1cblxuICAgIHZhciBNU19QRVJfU0VDT05EID0gMTAwMCxcbiAgICAgICAgTVNfUEVSX01JTlVURSA9IDYwICogTVNfUEVSX1NFQ09ORCxcbiAgICAgICAgTVNfUEVSX0hPVVIgPSA2MCAqIE1TX1BFUl9NSU5VVEUsXG4gICAgICAgIE1TX1BFUl80MDBfWUVBUlMgPSAoMzY1ICogNDAwICsgOTcpICogMjQgKiBNU19QRVJfSE9VUjtcblxuICAgIC8vIGFjdHVhbCBtb2R1bG8gLSBoYW5kbGVzIG5lZ2F0aXZlIG51bWJlcnMgKGZvciBkYXRlcyBiZWZvcmUgMTk3MCk6XG4gICAgZnVuY3Rpb24gbW9kJDEoZGl2aWRlbmQsIGRpdmlzb3IpIHtcbiAgICAgICAgcmV0dXJuICgoZGl2aWRlbmQgJSBkaXZpc29yKSArIGRpdmlzb3IpICUgZGl2aXNvcjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbFN0YXJ0T2ZEYXRlKHksIG0sIGQpIHtcbiAgICAgICAgLy8gdGhlIGRhdGUgY29uc3RydWN0b3IgcmVtYXBzIHllYXJzIDAtOTkgdG8gMTkwMC0xOTk5XG4gICAgICAgIGlmICh5IDwgMTAwICYmIHkgPj0gMCkge1xuICAgICAgICAgICAgLy8gcHJlc2VydmUgbGVhcCB5ZWFycyB1c2luZyBhIGZ1bGwgNDAwIHllYXIgY3ljbGUsIHRoZW4gcmVzZXRcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSh5ICsgNDAwLCBtLCBkKSAtIE1TX1BFUl80MDBfWUVBUlM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoeSwgbSwgZCkudmFsdWVPZigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdXRjU3RhcnRPZkRhdGUoeSwgbSwgZCkge1xuICAgICAgICAvLyBEYXRlLlVUQyByZW1hcHMgeWVhcnMgMC05OSB0byAxOTAwLTE5OTlcbiAgICAgICAgaWYgKHkgPCAxMDAgJiYgeSA+PSAwKSB7XG4gICAgICAgICAgICAvLyBwcmVzZXJ2ZSBsZWFwIHllYXJzIHVzaW5nIGEgZnVsbCA0MDAgeWVhciBjeWNsZSwgdGhlbiByZXNldFxuICAgICAgICAgICAgcmV0dXJuIERhdGUuVVRDKHkgKyA0MDAsIG0sIGQpIC0gTVNfUEVSXzQwMF9ZRUFSUztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBEYXRlLlVUQyh5LCBtLCBkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHN0YXJ0T2YodW5pdHMpIHtcbiAgICAgICAgdmFyIHRpbWUsIHN0YXJ0T2ZEYXRlO1xuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcbiAgICAgICAgaWYgKHVuaXRzID09PSB1bmRlZmluZWQgfHwgdW5pdHMgPT09ICdtaWxsaXNlY29uZCcgfHwgIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXJ0T2ZEYXRlID0gdGhpcy5faXNVVEMgPyB1dGNTdGFydE9mRGF0ZSA6IGxvY2FsU3RhcnRPZkRhdGU7XG5cbiAgICAgICAgc3dpdGNoICh1bml0cykge1xuICAgICAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKHRoaXMueWVhcigpLCAwLCAxKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3F1YXJ0ZXInOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgdGhpcy55ZWFyKCksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9udGgoKSAtICh0aGlzLm1vbnRoKCkgJSAzKSxcbiAgICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKHRoaXMueWVhcigpLCB0aGlzLm1vbnRoKCksIDEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnd2Vlayc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGUoKSAtIHRoaXMud2Vla2RheSgpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2lzb1dlZWsnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgdGhpcy55ZWFyKCksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9udGgoKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlKCkgLSAodGhpcy5pc29XZWVrZGF5KCkgLSAxKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdkYXknOlxuICAgICAgICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKHRoaXMueWVhcigpLCB0aGlzLm1vbnRoKCksIHRoaXMuZGF0ZSgpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2hvdXInOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lIC09IG1vZCQxKFxuICAgICAgICAgICAgICAgICAgICB0aW1lICsgKHRoaXMuX2lzVVRDID8gMCA6IHRoaXMudXRjT2Zmc2V0KCkgKiBNU19QRVJfTUlOVVRFKSxcbiAgICAgICAgICAgICAgICAgICAgTVNfUEVSX0hPVVJcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gdGhpcy5fZC52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgdGltZSAtPSBtb2QkMSh0aW1lLCBNU19QRVJfTUlOVVRFKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIHRpbWUgLT0gbW9kJDEodGltZSwgTVNfUEVSX1NFQ09ORCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9kLnNldFRpbWUodGltZSk7XG4gICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZW5kT2YodW5pdHMpIHtcbiAgICAgICAgdmFyIHRpbWUsIHN0YXJ0T2ZEYXRlO1xuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcbiAgICAgICAgaWYgKHVuaXRzID09PSB1bmRlZmluZWQgfHwgdW5pdHMgPT09ICdtaWxsaXNlY29uZCcgfHwgIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXJ0T2ZEYXRlID0gdGhpcy5faXNVVEMgPyB1dGNTdGFydE9mRGF0ZSA6IGxvY2FsU3RhcnRPZkRhdGU7XG5cbiAgICAgICAgc3dpdGNoICh1bml0cykge1xuICAgICAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKHRoaXMueWVhcigpICsgMSwgMCwgMSkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncXVhcnRlcic6XG4gICAgICAgICAgICAgICAgdGltZSA9XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy55ZWFyKCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vbnRoKCkgLSAodGhpcy5tb250aCgpICUgMykgKyAzLFxuICAgICAgICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICAgICApIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSArIDEsIDEpIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICAgICAgICAgIHRpbWUgPVxuICAgICAgICAgICAgICAgICAgICBzdGFydE9mRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueWVhcigpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlKCkgLSB0aGlzLndlZWtkYXkoKSArIDdcbiAgICAgICAgICAgICAgICAgICAgKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdpc29XZWVrJzpcbiAgICAgICAgICAgICAgICB0aW1lID1cbiAgICAgICAgICAgICAgICAgICAgc3RhcnRPZkRhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9udGgoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZSgpIC0gKHRoaXMuaXNvV2Vla2RheSgpIC0gMSkgKyA3XG4gICAgICAgICAgICAgICAgICAgICkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpLCB0aGlzLmRhdGUoKSArIDEpIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2hvdXInOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lICs9XG4gICAgICAgICAgICAgICAgICAgIE1TX1BFUl9IT1VSIC1cbiAgICAgICAgICAgICAgICAgICAgbW9kJDEoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aW1lICsgKHRoaXMuX2lzVVRDID8gMCA6IHRoaXMudXRjT2Zmc2V0KCkgKiBNU19QRVJfTUlOVVRFKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIE1TX1BFUl9IT1VSXG4gICAgICAgICAgICAgICAgICAgICkgLVxuICAgICAgICAgICAgICAgICAgICAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gdGhpcy5fZC52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgdGltZSArPSBNU19QRVJfTUlOVVRFIC0gbW9kJDEodGltZSwgTVNfUEVSX01JTlVURSkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc2Vjb25kJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gdGhpcy5fZC52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgdGltZSArPSBNU19QRVJfU0VDT05EIC0gbW9kJDEodGltZSwgTVNfUEVSX1NFQ09ORCkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZC5zZXRUaW1lKHRpbWUpO1xuICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcywgdHJ1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHZhbHVlT2YoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kLnZhbHVlT2YoKSAtICh0aGlzLl9vZmZzZXQgfHwgMCkgKiA2MDAwMDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1bml4KCkge1xuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcih0aGlzLnZhbHVlT2YoKSAvIDEwMDApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvRGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHRoaXMudmFsdWVPZigpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b0FycmF5KCkge1xuICAgICAgICB2YXIgbSA9IHRoaXM7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBtLnllYXIoKSxcbiAgICAgICAgICAgIG0ubW9udGgoKSxcbiAgICAgICAgICAgIG0uZGF0ZSgpLFxuICAgICAgICAgICAgbS5ob3VyKCksXG4gICAgICAgICAgICBtLm1pbnV0ZSgpLFxuICAgICAgICAgICAgbS5zZWNvbmQoKSxcbiAgICAgICAgICAgIG0ubWlsbGlzZWNvbmQoKSxcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b09iamVjdCgpIHtcbiAgICAgICAgdmFyIG0gPSB0aGlzO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeWVhcnM6IG0ueWVhcigpLFxuICAgICAgICAgICAgbW9udGhzOiBtLm1vbnRoKCksXG4gICAgICAgICAgICBkYXRlOiBtLmRhdGUoKSxcbiAgICAgICAgICAgIGhvdXJzOiBtLmhvdXJzKCksXG4gICAgICAgICAgICBtaW51dGVzOiBtLm1pbnV0ZXMoKSxcbiAgICAgICAgICAgIHNlY29uZHM6IG0uc2Vjb25kcygpLFxuICAgICAgICAgICAgbWlsbGlzZWNvbmRzOiBtLm1pbGxpc2Vjb25kcygpLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICAgICAgLy8gbmV3IERhdGUoTmFOKS50b0pTT04oKSA9PT0gbnVsbFxuICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgPyB0aGlzLnRvSVNPU3RyaW5nKCkgOiBudWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVmFsaWQkMigpIHtcbiAgICAgICAgcmV0dXJuIGlzVmFsaWQodGhpcyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2luZ0ZsYWdzKCkge1xuICAgICAgICByZXR1cm4gZXh0ZW5kKHt9LCBnZXRQYXJzaW5nRmxhZ3ModGhpcykpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGludmFsaWRBdCgpIHtcbiAgICAgICAgcmV0dXJuIGdldFBhcnNpbmdGbGFncyh0aGlzKS5vdmVyZmxvdztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGlvbkRhdGEoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpbnB1dDogdGhpcy5faSxcbiAgICAgICAgICAgIGZvcm1hdDogdGhpcy5fZixcbiAgICAgICAgICAgIGxvY2FsZTogdGhpcy5fbG9jYWxlLFxuICAgICAgICAgICAgaXNVVEM6IHRoaXMuX2lzVVRDLFxuICAgICAgICAgICAgc3RyaWN0OiB0aGlzLl9zdHJpY3QsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ04nLCAwLCAwLCAnZXJhQWJicicpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdOTicsIDAsIDAsICdlcmFBYmJyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ05OTicsIDAsIDAsICdlcmFBYmJyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ05OTk4nLCAwLCAwLCAnZXJhTmFtZScpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdOTk5OTicsIDAsIDAsICdlcmFOYXJyb3cnKTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCd5JywgWyd5JywgMV0sICd5bycsICdlcmFZZWFyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ3knLCBbJ3l5JywgMl0sIDAsICdlcmFZZWFyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ3knLCBbJ3l5eScsIDNdLCAwLCAnZXJhWWVhcicpO1xuICAgIGFkZEZvcm1hdFRva2VuKCd5JywgWyd5eXl5JywgNF0sIDAsICdlcmFZZWFyJyk7XG5cbiAgICBhZGRSZWdleFRva2VuKCdOJywgbWF0Y2hFcmFBYmJyKTtcbiAgICBhZGRSZWdleFRva2VuKCdOTicsIG1hdGNoRXJhQWJicik7XG4gICAgYWRkUmVnZXhUb2tlbignTk5OJywgbWF0Y2hFcmFBYmJyKTtcbiAgICBhZGRSZWdleFRva2VuKCdOTk5OJywgbWF0Y2hFcmFOYW1lKTtcbiAgICBhZGRSZWdleFRva2VuKCdOTk5OTicsIG1hdGNoRXJhTmFycm93KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oXG4gICAgICAgIFsnTicsICdOTicsICdOTk4nLCAnTk5OTicsICdOTk5OTiddLFxuICAgICAgICBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgICAgICB2YXIgZXJhID0gY29uZmlnLl9sb2NhbGUuZXJhc1BhcnNlKGlucHV0LCB0b2tlbiwgY29uZmlnLl9zdHJpY3QpO1xuICAgICAgICAgICAgaWYgKGVyYSkge1xuICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmVyYSA9IGVyYTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaW52YWxpZEVyYSA9IGlucHV0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ3knLCBtYXRjaFVuc2lnbmVkKTtcbiAgICBhZGRSZWdleFRva2VuKCd5eScsIG1hdGNoVW5zaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3l5eScsIG1hdGNoVW5zaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3l5eXknLCBtYXRjaFVuc2lnbmVkKTtcbiAgICBhZGRSZWdleFRva2VuKCd5bycsIG1hdGNoRXJhWWVhck9yZGluYWwpO1xuXG4gICAgYWRkUGFyc2VUb2tlbihbJ3knLCAneXknLCAneXl5JywgJ3l5eXknXSwgWUVBUik7XG4gICAgYWRkUGFyc2VUb2tlbihbJ3lvJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgdmFyIG1hdGNoO1xuICAgICAgICBpZiAoY29uZmlnLl9sb2NhbGUuX2VyYVllYXJPcmRpbmFsUmVnZXgpIHtcbiAgICAgICAgICAgIG1hdGNoID0gaW5wdXQubWF0Y2goY29uZmlnLl9sb2NhbGUuX2VyYVllYXJPcmRpbmFsUmVnZXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZy5fbG9jYWxlLmVyYVllYXJPcmRpbmFsUGFyc2UpIHtcbiAgICAgICAgICAgIGFycmF5W1lFQVJdID0gY29uZmlnLl9sb2NhbGUuZXJhWWVhck9yZGluYWxQYXJzZShpbnB1dCwgbWF0Y2gpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXJyYXlbWUVBUl0gPSBwYXJzZUludChpbnB1dCwgMTApO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVFcmFzKG0sIGZvcm1hdCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICBkYXRlLFxuICAgICAgICAgICAgZXJhcyA9IHRoaXMuX2VyYXMgfHwgZ2V0TG9jYWxlKCdlbicpLl9lcmFzO1xuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIHN3aXRjaCAodHlwZW9mIGVyYXNbaV0uc2luY2UpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgICAgICAgICAgICAvLyB0cnVuY2F0ZSB0aW1lXG4gICAgICAgICAgICAgICAgICAgIGRhdGUgPSBob29rcyhlcmFzW2ldLnNpbmNlKS5zdGFydE9mKCdkYXknKTtcbiAgICAgICAgICAgICAgICAgICAgZXJhc1tpXS5zaW5jZSA9IGRhdGUudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3dpdGNoICh0eXBlb2YgZXJhc1tpXS51bnRpbCkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3VuZGVmaW5lZCc6XG4gICAgICAgICAgICAgICAgICAgIGVyYXNbaV0udW50aWwgPSArSW5maW5pdHk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgICAgICAgICAgIC8vIHRydW5jYXRlIHRpbWVcbiAgICAgICAgICAgICAgICAgICAgZGF0ZSA9IGhvb2tzKGVyYXNbaV0udW50aWwpLnN0YXJ0T2YoJ2RheScpLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICAgICAgZXJhc1tpXS51bnRpbCA9IGRhdGUudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXJhcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVFcmFzUGFyc2UoZXJhTmFtZSwgZm9ybWF0LCBzdHJpY3QpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgZXJhcyA9IHRoaXMuZXJhcygpLFxuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIGFiYnIsXG4gICAgICAgICAgICBuYXJyb3c7XG4gICAgICAgIGVyYU5hbWUgPSBlcmFOYW1lLnRvVXBwZXJDYXNlKCk7XG5cbiAgICAgICAgZm9yIChpID0gMCwgbCA9IGVyYXMubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgICAgICAgICBuYW1lID0gZXJhc1tpXS5uYW1lLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgICBhYmJyID0gZXJhc1tpXS5hYmJyLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgICBuYXJyb3cgPSBlcmFzW2ldLm5hcnJvdy50b1VwcGVyQ2FzZSgpO1xuXG4gICAgICAgICAgICBpZiAoc3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChmb3JtYXQpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnTic6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ05OJzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnTk5OJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhYmJyID09PSBlcmFOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICBjYXNlICdOTk5OJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSBlcmFOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICBjYXNlICdOTk5OTic6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmFycm93ID09PSBlcmFOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFtuYW1lLCBhYmJyLCBuYXJyb3ddLmluZGV4T2YoZXJhTmFtZSkgPj0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlRXJhc0NvbnZlcnRZZWFyKGVyYSwgeWVhcikge1xuICAgICAgICB2YXIgZGlyID0gZXJhLnNpbmNlIDw9IGVyYS51bnRpbCA/ICsxIDogLTE7XG4gICAgICAgIGlmICh5ZWFyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBob29rcyhlcmEuc2luY2UpLnllYXIoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBob29rcyhlcmEuc2luY2UpLnllYXIoKSArICh5ZWFyIC0gZXJhLm9mZnNldCkgKiBkaXI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRFcmFOYW1lKCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICB2YWwsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5sb2NhbGVEYXRhKCkuZXJhcygpO1xuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIC8vIHRydW5jYXRlIHRpbWVcbiAgICAgICAgICAgIHZhbCA9IHRoaXMuY2xvbmUoKS5zdGFydE9mKCdkYXknKS52YWx1ZU9mKCk7XG5cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnNpbmNlIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS51bnRpbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLm5hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJhc1tpXS51bnRpbCA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0uc2luY2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXS5uYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEVyYU5hcnJvdygpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgdmFsLFxuICAgICAgICAgICAgZXJhcyA9IHRoaXMubG9jYWxlRGF0YSgpLmVyYXMoKTtcbiAgICAgICAgZm9yIChpID0gMCwgbCA9IGVyYXMubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgICAgICAgICAvLyB0cnVuY2F0ZSB0aW1lXG4gICAgICAgICAgICB2YWwgPSB0aGlzLmNsb25lKCkuc3RhcnRPZignZGF5JykudmFsdWVPZigpO1xuXG4gICAgICAgICAgICBpZiAoZXJhc1tpXS5zaW5jZSA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0udW50aWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXS5uYXJyb3c7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJhc1tpXS51bnRpbCA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0uc2luY2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXS5uYXJyb3c7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RXJhQWJicigpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgdmFsLFxuICAgICAgICAgICAgZXJhcyA9IHRoaXMubG9jYWxlRGF0YSgpLmVyYXMoKTtcbiAgICAgICAgZm9yIChpID0gMCwgbCA9IGVyYXMubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgICAgICAgICAvLyB0cnVuY2F0ZSB0aW1lXG4gICAgICAgICAgICB2YWwgPSB0aGlzLmNsb25lKCkuc3RhcnRPZignZGF5JykudmFsdWVPZigpO1xuXG4gICAgICAgICAgICBpZiAoZXJhc1tpXS5zaW5jZSA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0udW50aWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXS5hYmJyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVyYXNbaV0udW50aWwgPD0gdmFsICYmIHZhbCA8PSBlcmFzW2ldLnNpbmNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV0uYWJicjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRFcmFZZWFyKCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICBkaXIsXG4gICAgICAgICAgICB2YWwsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5sb2NhbGVEYXRhKCkuZXJhcygpO1xuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIGRpciA9IGVyYXNbaV0uc2luY2UgPD0gZXJhc1tpXS51bnRpbCA/ICsxIDogLTE7XG5cbiAgICAgICAgICAgIC8vIHRydW5jYXRlIHRpbWVcbiAgICAgICAgICAgIHZhbCA9IHRoaXMuY2xvbmUoKS5zdGFydE9mKCdkYXknKS52YWx1ZU9mKCk7XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAoZXJhc1tpXS5zaW5jZSA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0udW50aWwpIHx8XG4gICAgICAgICAgICAgICAgKGVyYXNbaV0udW50aWwgPD0gdmFsICYmIHZhbCA8PSBlcmFzW2ldLnNpbmNlKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgKHRoaXMueWVhcigpIC0gaG9va3MoZXJhc1tpXS5zaW5jZSkueWVhcigpKSAqIGRpciArXG4gICAgICAgICAgICAgICAgICAgIGVyYXNbaV0ub2Zmc2V0XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnllYXIoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlcmFzTmFtZVJlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX2VyYXNOYW1lUmVnZXgnKSkge1xuICAgICAgICAgICAgY29tcHV0ZUVyYXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc1N0cmljdCA/IHRoaXMuX2VyYXNOYW1lUmVnZXggOiB0aGlzLl9lcmFzUmVnZXg7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXJhc0FiYnJSZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19lcmFzQWJiclJlZ2V4JykpIHtcbiAgICAgICAgICAgIGNvbXB1dGVFcmFzUGFyc2UuY2FsbCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNTdHJpY3QgPyB0aGlzLl9lcmFzQWJiclJlZ2V4IDogdGhpcy5fZXJhc1JlZ2V4O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVyYXNOYXJyb3dSZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19lcmFzTmFycm93UmVnZXgnKSkge1xuICAgICAgICAgICAgY29tcHV0ZUVyYXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc1N0cmljdCA/IHRoaXMuX2VyYXNOYXJyb3dSZWdleCA6IHRoaXMuX2VyYXNSZWdleDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXRjaEVyYUFiYnIoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLmVyYXNBYmJyUmVnZXgoaXNTdHJpY3QpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1hdGNoRXJhTmFtZShpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUuZXJhc05hbWVSZWdleChpc1N0cmljdCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWF0Y2hFcmFOYXJyb3coaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLmVyYXNOYXJyb3dSZWdleChpc1N0cmljdCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWF0Y2hFcmFZZWFyT3JkaW5hbChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUuX2VyYVllYXJPcmRpbmFsUmVnZXggfHwgbWF0Y2hVbnNpZ25lZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21wdXRlRXJhc1BhcnNlKCkge1xuICAgICAgICB2YXIgYWJiclBpZWNlcyA9IFtdLFxuICAgICAgICAgICAgbmFtZVBpZWNlcyA9IFtdLFxuICAgICAgICAgICAgbmFycm93UGllY2VzID0gW10sXG4gICAgICAgICAgICBtaXhlZFBpZWNlcyA9IFtdLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICBlcmFzTmFtZSxcbiAgICAgICAgICAgIGVyYXNBYmJyLFxuICAgICAgICAgICAgZXJhc05hcnJvdyxcbiAgICAgICAgICAgIGVyYXMgPSB0aGlzLmVyYXMoKTtcblxuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIGVyYXNOYW1lID0gcmVnZXhFc2NhcGUoZXJhc1tpXS5uYW1lKTtcbiAgICAgICAgICAgIGVyYXNBYmJyID0gcmVnZXhFc2NhcGUoZXJhc1tpXS5hYmJyKTtcbiAgICAgICAgICAgIGVyYXNOYXJyb3cgPSByZWdleEVzY2FwZShlcmFzW2ldLm5hcnJvdyk7XG5cbiAgICAgICAgICAgIG5hbWVQaWVjZXMucHVzaChlcmFzTmFtZSk7XG4gICAgICAgICAgICBhYmJyUGllY2VzLnB1c2goZXJhc0FiYnIpO1xuICAgICAgICAgICAgbmFycm93UGllY2VzLnB1c2goZXJhc05hcnJvdyk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKGVyYXNOYW1lKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2goZXJhc0FiYnIpO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChlcmFzTmFycm93KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2VyYXNSZWdleCA9IG5ldyBSZWdFeHAoJ14oJyArIG1peGVkUGllY2VzLmpvaW4oJ3wnKSArICcpJywgJ2knKTtcbiAgICAgICAgdGhpcy5fZXJhc05hbWVSZWdleCA9IG5ldyBSZWdFeHAoJ14oJyArIG5hbWVQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl9lcmFzQWJiclJlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgYWJiclBpZWNlcy5qb2luKCd8JykgKyAnKScsICdpJyk7XG4gICAgICAgIHRoaXMuX2VyYXNOYXJyb3dSZWdleCA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAnXignICsgbmFycm93UGllY2VzLmpvaW4oJ3wnKSArICcpJyxcbiAgICAgICAgICAgICdpJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnZ2cnLCAyXSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy53ZWVrWWVhcigpICUgMTAwO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydHRycsIDJdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzb1dlZWtZZWFyKCkgJSAxMDA7XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBhZGRXZWVrWWVhckZvcm1hdFRva2VuKHRva2VuLCBnZXR0ZXIpIHtcbiAgICAgICAgYWRkRm9ybWF0VG9rZW4oMCwgW3Rva2VuLCB0b2tlbi5sZW5ndGhdLCAwLCBnZXR0ZXIpO1xuICAgIH1cblxuICAgIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4oJ2dnZ2cnLCAnd2Vla1llYXInKTtcbiAgICBhZGRXZWVrWWVhckZvcm1hdFRva2VuKCdnZ2dnZycsICd3ZWVrWWVhcicpO1xuICAgIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4oJ0dHR0cnLCAnaXNvV2Vla1llYXInKTtcbiAgICBhZGRXZWVrWWVhckZvcm1hdFRva2VuKCdHR0dHRycsICdpc29XZWVrWWVhcicpO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignRycsIG1hdGNoU2lnbmVkKTtcbiAgICBhZGRSZWdleFRva2VuKCdnJywgbWF0Y2hTaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0dHJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2dnJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0dHR0cnLCBtYXRjaDF0bzQsIG1hdGNoNCk7XG4gICAgYWRkUmVnZXhUb2tlbignZ2dnZycsIG1hdGNoMXRvNCwgbWF0Y2g0KTtcbiAgICBhZGRSZWdleFRva2VuKCdHR0dHRycsIG1hdGNoMXRvNiwgbWF0Y2g2KTtcbiAgICBhZGRSZWdleFRva2VuKCdnZ2dnZycsIG1hdGNoMXRvNiwgbWF0Y2g2KTtcblxuICAgIGFkZFdlZWtQYXJzZVRva2VuKFxuICAgICAgICBbJ2dnZ2cnLCAnZ2dnZ2cnLCAnR0dHRycsICdHR0dHRyddLFxuICAgICAgICBmdW5jdGlvbiAoaW5wdXQsIHdlZWssIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgICAgIHdlZWtbdG9rZW4uc3Vic3RyKDAsIDIpXSA9IHRvSW50KGlucHV0KTtcbiAgICAgICAgfVxuICAgICk7XG5cbiAgICBhZGRXZWVrUGFyc2VUb2tlbihbJ2dnJywgJ0dHJ10sIGZ1bmN0aW9uIChpbnB1dCwgd2VlaywgY29uZmlnLCB0b2tlbikge1xuICAgICAgICB3ZWVrW3Rva2VuXSA9IGhvb2tzLnBhcnNlVHdvRGlnaXRZZWFyKGlucHV0KTtcbiAgICB9KTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFNldFdlZWtZZWFyKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBnZXRTZXRXZWVrWWVhckhlbHBlci5jYWxsKFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgdGhpcy53ZWVrKCksXG4gICAgICAgICAgICB0aGlzLndlZWtkYXkoKSArIHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRvdyxcbiAgICAgICAgICAgIHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRvdyxcbiAgICAgICAgICAgIHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRveVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldElTT1dlZWtZZWFyKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBnZXRTZXRXZWVrWWVhckhlbHBlci5jYWxsKFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgdGhpcy5pc29XZWVrKCksXG4gICAgICAgICAgICB0aGlzLmlzb1dlZWtkYXkoKSxcbiAgICAgICAgICAgIDEsXG4gICAgICAgICAgICA0XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0SVNPV2Vla3NJblllYXIoKSB7XG4gICAgICAgIHJldHVybiB3ZWVrc0luWWVhcih0aGlzLnllYXIoKSwgMSwgNCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0SVNPV2Vla3NJbklTT1dlZWtZZWFyKCkge1xuICAgICAgICByZXR1cm4gd2Vla3NJblllYXIodGhpcy5pc29XZWVrWWVhcigpLCAxLCA0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRXZWVrc0luWWVhcigpIHtcbiAgICAgICAgdmFyIHdlZWtJbmZvID0gdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWs7XG4gICAgICAgIHJldHVybiB3ZWVrc0luWWVhcih0aGlzLnllYXIoKSwgd2Vla0luZm8uZG93LCB3ZWVrSW5mby5kb3kpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFdlZWtzSW5XZWVrWWVhcigpIHtcbiAgICAgICAgdmFyIHdlZWtJbmZvID0gdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWs7XG4gICAgICAgIHJldHVybiB3ZWVrc0luWWVhcih0aGlzLndlZWtZZWFyKCksIHdlZWtJbmZvLmRvdywgd2Vla0luZm8uZG95KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRXZWVrWWVhckhlbHBlcihpbnB1dCwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpIHtcbiAgICAgICAgdmFyIHdlZWtzVGFyZ2V0O1xuICAgICAgICBpZiAoaW5wdXQgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHdlZWtPZlllYXIodGhpcywgZG93LCBkb3kpLnllYXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB3ZWVrc1RhcmdldCA9IHdlZWtzSW5ZZWFyKGlucHV0LCBkb3csIGRveSk7XG4gICAgICAgICAgICBpZiAod2VlayA+IHdlZWtzVGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgd2VlayA9IHdlZWtzVGFyZ2V0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHNldFdlZWtBbGwuY2FsbCh0aGlzLCBpbnB1dCwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0V2Vla0FsbCh3ZWVrWWVhciwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpIHtcbiAgICAgICAgdmFyIGRheU9mWWVhckRhdGEgPSBkYXlPZlllYXJGcm9tV2Vla3Mod2Vla1llYXIsIHdlZWssIHdlZWtkYXksIGRvdywgZG95KSxcbiAgICAgICAgICAgIGRhdGUgPSBjcmVhdGVVVENEYXRlKGRheU9mWWVhckRhdGEueWVhciwgMCwgZGF5T2ZZZWFyRGF0YS5kYXlPZlllYXIpO1xuXG4gICAgICAgIHRoaXMueWVhcihkYXRlLmdldFVUQ0Z1bGxZZWFyKCkpO1xuICAgICAgICB0aGlzLm1vbnRoKGRhdGUuZ2V0VVRDTW9udGgoKSk7XG4gICAgICAgIHRoaXMuZGF0ZShkYXRlLmdldFVUQ0RhdGUoKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdRJywgMCwgJ1FvJywgJ3F1YXJ0ZXInKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ1EnLCBtYXRjaDEpO1xuICAgIGFkZFBhcnNlVG9rZW4oJ1EnLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W01PTlRIXSA9ICh0b0ludChpbnB1dCkgLSAxKSAqIDM7XG4gICAgfSk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRTZXRRdWFydGVyKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PSBudWxsXG4gICAgICAgICAgICA/IE1hdGguY2VpbCgodGhpcy5tb250aCgpICsgMSkgLyAzKVxuICAgICAgICAgICAgOiB0aGlzLm1vbnRoKChpbnB1dCAtIDEpICogMyArICh0aGlzLm1vbnRoKCkgJSAzKSk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ0QnLCBbJ0REJywgMl0sICdEbycsICdkYXRlJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdEJywgbWF0Y2gxdG8yLCBtYXRjaDF0bzJOb0xlYWRpbmdaZXJvKTtcbiAgICBhZGRSZWdleFRva2VuKCdERCcsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdEbycsIGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIC8vIFRPRE86IFJlbW92ZSBcIm9yZGluYWxQYXJzZVwiIGZhbGxiYWNrIGluIG5leHQgbWFqb3IgcmVsZWFzZS5cbiAgICAgICAgcmV0dXJuIGlzU3RyaWN0XG4gICAgICAgICAgICA/IGxvY2FsZS5fZGF5T2ZNb250aE9yZGluYWxQYXJzZSB8fCBsb2NhbGUuX29yZGluYWxQYXJzZVxuICAgICAgICAgICAgOiBsb2NhbGUuX2RheU9mTW9udGhPcmRpbmFsUGFyc2VMZW5pZW50O1xuICAgIH0pO1xuXG4gICAgYWRkUGFyc2VUb2tlbihbJ0QnLCAnREQnXSwgREFURSk7XG4gICAgYWRkUGFyc2VUb2tlbignRG8nLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W0RBVEVdID0gdG9JbnQoaW5wdXQubWF0Y2gobWF0Y2gxdG8yKVswXSk7XG4gICAgfSk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICB2YXIgZ2V0U2V0RGF5T2ZNb250aCA9IG1ha2VHZXRTZXQoJ0RhdGUnLCB0cnVlKTtcblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdEREQnLCBbJ0REREQnLCAzXSwgJ0RERG8nLCAnZGF5T2ZZZWFyJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdEREQnLCBtYXRjaDF0bzMpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0REREQnLCBtYXRjaDMpO1xuICAgIGFkZFBhcnNlVG9rZW4oWydEREQnLCAnRERERCddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgY29uZmlnLl9kYXlPZlllYXIgPSB0b0ludChpbnB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBIRUxQRVJTXG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRTZXREYXlPZlllYXIoaW5wdXQpIHtcbiAgICAgICAgdmFyIGRheU9mWWVhciA9XG4gICAgICAgICAgICBNYXRoLnJvdW5kKFxuICAgICAgICAgICAgICAgICh0aGlzLmNsb25lKCkuc3RhcnRPZignZGF5JykgLSB0aGlzLmNsb25lKCkuc3RhcnRPZigneWVhcicpKSAvIDg2NGU1XG4gICAgICAgICAgICApICsgMTtcbiAgICAgICAgcmV0dXJuIGlucHV0ID09IG51bGwgPyBkYXlPZlllYXIgOiB0aGlzLmFkZChpbnB1dCAtIGRheU9mWWVhciwgJ2QnKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignbScsIFsnbW0nLCAyXSwgMCwgJ21pbnV0ZScpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignbScsIG1hdGNoMXRvMiwgbWF0Y2gxdG8ySGFzWmVybyk7XG4gICAgYWRkUmVnZXhUb2tlbignbW0nLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUGFyc2VUb2tlbihbJ20nLCAnbW0nXSwgTUlOVVRFKTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIHZhciBnZXRTZXRNaW51dGUgPSBtYWtlR2V0U2V0KCdNaW51dGVzJywgZmFsc2UpO1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ3MnLCBbJ3NzJywgMl0sIDAsICdzZWNvbmQnKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ3MnLCBtYXRjaDF0bzIsIG1hdGNoMXRvMkhhc1plcm8pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3NzJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFBhcnNlVG9rZW4oWydzJywgJ3NzJ10sIFNFQ09ORCk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICB2YXIgZ2V0U2V0U2Vjb25kID0gbWFrZUdldFNldCgnU2Vjb25kcycsIGZhbHNlKTtcblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdTJywgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gfn4odGhpcy5taWxsaXNlY29uZCgpIC8gMTAwKTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1MnLCAyXSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gfn4odGhpcy5taWxsaXNlY29uZCgpIC8gMTApO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1MnLCAzXSwgMCwgJ21pbGxpc2Vjb25kJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTJywgNF0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwO1xuICAgIH0pO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTU1MnLCA1XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwO1xuICAgIH0pO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTU1NTJywgNl0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwMDA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTU1NTJywgN10sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwMDAwO1xuICAgIH0pO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTU1NTU1MnLCA4XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwMDAwO1xuICAgIH0pO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTU1NTU1NTJywgOV0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwMDAwMDA7XG4gICAgfSk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdTJywgbWF0Y2gxdG8zLCBtYXRjaDEpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1NTJywgbWF0Y2gxdG8zLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1NTUycsIG1hdGNoMXRvMywgbWF0Y2gzKTtcblxuICAgIHZhciB0b2tlbiwgZ2V0U2V0TWlsbGlzZWNvbmQ7XG4gICAgZm9yICh0b2tlbiA9ICdTU1NTJzsgdG9rZW4ubGVuZ3RoIDw9IDk7IHRva2VuICs9ICdTJykge1xuICAgICAgICBhZGRSZWdleFRva2VuKHRva2VuLCBtYXRjaFVuc2lnbmVkKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZU1zKGlucHV0LCBhcnJheSkge1xuICAgICAgICBhcnJheVtNSUxMSVNFQ09ORF0gPSB0b0ludCgoJzAuJyArIGlucHV0KSAqIDEwMDApO1xuICAgIH1cblxuICAgIGZvciAodG9rZW4gPSAnUyc7IHRva2VuLmxlbmd0aCA8PSA5OyB0b2tlbiArPSAnUycpIHtcbiAgICAgICAgYWRkUGFyc2VUb2tlbih0b2tlbiwgcGFyc2VNcyk7XG4gICAgfVxuXG4gICAgZ2V0U2V0TWlsbGlzZWNvbmQgPSBtYWtlR2V0U2V0KCdNaWxsaXNlY29uZHMnLCBmYWxzZSk7XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbigneicsIDAsIDAsICd6b25lQWJicicpO1xuICAgIGFkZEZvcm1hdFRva2VuKCd6eicsIDAsIDAsICd6b25lTmFtZScpO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0Wm9uZUFiYnIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1VUQyA/ICdVVEMnIDogJyc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0Wm9uZU5hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1VUQyA/ICdDb29yZGluYXRlZCBVbml2ZXJzYWwgVGltZScgOiAnJztcbiAgICB9XG5cbiAgICB2YXIgcHJvdG8gPSBNb21lbnQucHJvdG90eXBlO1xuXG4gICAgcHJvdG8uYWRkID0gYWRkO1xuICAgIHByb3RvLmNhbGVuZGFyID0gY2FsZW5kYXIkMTtcbiAgICBwcm90by5jbG9uZSA9IGNsb25lO1xuICAgIHByb3RvLmRpZmYgPSBkaWZmO1xuICAgIHByb3RvLmVuZE9mID0gZW5kT2Y7XG4gICAgcHJvdG8uZm9ybWF0ID0gZm9ybWF0O1xuICAgIHByb3RvLmZyb20gPSBmcm9tO1xuICAgIHByb3RvLmZyb21Ob3cgPSBmcm9tTm93O1xuICAgIHByb3RvLnRvID0gdG87XG4gICAgcHJvdG8udG9Ob3cgPSB0b05vdztcbiAgICBwcm90by5nZXQgPSBzdHJpbmdHZXQ7XG4gICAgcHJvdG8uaW52YWxpZEF0ID0gaW52YWxpZEF0O1xuICAgIHByb3RvLmlzQWZ0ZXIgPSBpc0FmdGVyO1xuICAgIHByb3RvLmlzQmVmb3JlID0gaXNCZWZvcmU7XG4gICAgcHJvdG8uaXNCZXR3ZWVuID0gaXNCZXR3ZWVuO1xuICAgIHByb3RvLmlzU2FtZSA9IGlzU2FtZTtcbiAgICBwcm90by5pc1NhbWVPckFmdGVyID0gaXNTYW1lT3JBZnRlcjtcbiAgICBwcm90by5pc1NhbWVPckJlZm9yZSA9IGlzU2FtZU9yQmVmb3JlO1xuICAgIHByb3RvLmlzVmFsaWQgPSBpc1ZhbGlkJDI7XG4gICAgcHJvdG8ubGFuZyA9IGxhbmc7XG4gICAgcHJvdG8ubG9jYWxlID0gbG9jYWxlO1xuICAgIHByb3RvLmxvY2FsZURhdGEgPSBsb2NhbGVEYXRhO1xuICAgIHByb3RvLm1heCA9IHByb3RvdHlwZU1heDtcbiAgICBwcm90by5taW4gPSBwcm90b3R5cGVNaW47XG4gICAgcHJvdG8ucGFyc2luZ0ZsYWdzID0gcGFyc2luZ0ZsYWdzO1xuICAgIHByb3RvLnNldCA9IHN0cmluZ1NldDtcbiAgICBwcm90by5zdGFydE9mID0gc3RhcnRPZjtcbiAgICBwcm90by5zdWJ0cmFjdCA9IHN1YnRyYWN0O1xuICAgIHByb3RvLnRvQXJyYXkgPSB0b0FycmF5O1xuICAgIHByb3RvLnRvT2JqZWN0ID0gdG9PYmplY3Q7XG4gICAgcHJvdG8udG9EYXRlID0gdG9EYXRlO1xuICAgIHByb3RvLnRvSVNPU3RyaW5nID0gdG9JU09TdHJpbmc7XG4gICAgcHJvdG8uaW5zcGVjdCA9IGluc3BlY3Q7XG4gICAgaWYgKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC5mb3IgIT0gbnVsbCkge1xuICAgICAgICBwcm90b1tTeW1ib2wuZm9yKCdub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbScpXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAnTW9tZW50PCcgKyB0aGlzLmZvcm1hdCgpICsgJz4nO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBwcm90by50b0pTT04gPSB0b0pTT047XG4gICAgcHJvdG8udG9TdHJpbmcgPSB0b1N0cmluZztcbiAgICBwcm90by51bml4ID0gdW5peDtcbiAgICBwcm90by52YWx1ZU9mID0gdmFsdWVPZjtcbiAgICBwcm90by5jcmVhdGlvbkRhdGEgPSBjcmVhdGlvbkRhdGE7XG4gICAgcHJvdG8uZXJhTmFtZSA9IGdldEVyYU5hbWU7XG4gICAgcHJvdG8uZXJhTmFycm93ID0gZ2V0RXJhTmFycm93O1xuICAgIHByb3RvLmVyYUFiYnIgPSBnZXRFcmFBYmJyO1xuICAgIHByb3RvLmVyYVllYXIgPSBnZXRFcmFZZWFyO1xuICAgIHByb3RvLnllYXIgPSBnZXRTZXRZZWFyO1xuICAgIHByb3RvLmlzTGVhcFllYXIgPSBnZXRJc0xlYXBZZWFyO1xuICAgIHByb3RvLndlZWtZZWFyID0gZ2V0U2V0V2Vla1llYXI7XG4gICAgcHJvdG8uaXNvV2Vla1llYXIgPSBnZXRTZXRJU09XZWVrWWVhcjtcbiAgICBwcm90by5xdWFydGVyID0gcHJvdG8ucXVhcnRlcnMgPSBnZXRTZXRRdWFydGVyO1xuICAgIHByb3RvLm1vbnRoID0gZ2V0U2V0TW9udGg7XG4gICAgcHJvdG8uZGF5c0luTW9udGggPSBnZXREYXlzSW5Nb250aDtcbiAgICBwcm90by53ZWVrID0gcHJvdG8ud2Vla3MgPSBnZXRTZXRXZWVrO1xuICAgIHByb3RvLmlzb1dlZWsgPSBwcm90by5pc29XZWVrcyA9IGdldFNldElTT1dlZWs7XG4gICAgcHJvdG8ud2Vla3NJblllYXIgPSBnZXRXZWVrc0luWWVhcjtcbiAgICBwcm90by53ZWVrc0luV2Vla1llYXIgPSBnZXRXZWVrc0luV2Vla1llYXI7XG4gICAgcHJvdG8uaXNvV2Vla3NJblllYXIgPSBnZXRJU09XZWVrc0luWWVhcjtcbiAgICBwcm90by5pc29XZWVrc0luSVNPV2Vla1llYXIgPSBnZXRJU09XZWVrc0luSVNPV2Vla1llYXI7XG4gICAgcHJvdG8uZGF0ZSA9IGdldFNldERheU9mTW9udGg7XG4gICAgcHJvdG8uZGF5ID0gcHJvdG8uZGF5cyA9IGdldFNldERheU9mV2VlaztcbiAgICBwcm90by53ZWVrZGF5ID0gZ2V0U2V0TG9jYWxlRGF5T2ZXZWVrO1xuICAgIHByb3RvLmlzb1dlZWtkYXkgPSBnZXRTZXRJU09EYXlPZldlZWs7XG4gICAgcHJvdG8uZGF5T2ZZZWFyID0gZ2V0U2V0RGF5T2ZZZWFyO1xuICAgIHByb3RvLmhvdXIgPSBwcm90by5ob3VycyA9IGdldFNldEhvdXI7XG4gICAgcHJvdG8ubWludXRlID0gcHJvdG8ubWludXRlcyA9IGdldFNldE1pbnV0ZTtcbiAgICBwcm90by5zZWNvbmQgPSBwcm90by5zZWNvbmRzID0gZ2V0U2V0U2Vjb25kO1xuICAgIHByb3RvLm1pbGxpc2Vjb25kID0gcHJvdG8ubWlsbGlzZWNvbmRzID0gZ2V0U2V0TWlsbGlzZWNvbmQ7XG4gICAgcHJvdG8udXRjT2Zmc2V0ID0gZ2V0U2V0T2Zmc2V0O1xuICAgIHByb3RvLnV0YyA9IHNldE9mZnNldFRvVVRDO1xuICAgIHByb3RvLmxvY2FsID0gc2V0T2Zmc2V0VG9Mb2NhbDtcbiAgICBwcm90by5wYXJzZVpvbmUgPSBzZXRPZmZzZXRUb1BhcnNlZE9mZnNldDtcbiAgICBwcm90by5oYXNBbGlnbmVkSG91ck9mZnNldCA9IGhhc0FsaWduZWRIb3VyT2Zmc2V0O1xuICAgIHByb3RvLmlzRFNUID0gaXNEYXlsaWdodFNhdmluZ1RpbWU7XG4gICAgcHJvdG8uaXNMb2NhbCA9IGlzTG9jYWw7XG4gICAgcHJvdG8uaXNVdGNPZmZzZXQgPSBpc1V0Y09mZnNldDtcbiAgICBwcm90by5pc1V0YyA9IGlzVXRjO1xuICAgIHByb3RvLmlzVVRDID0gaXNVdGM7XG4gICAgcHJvdG8uem9uZUFiYnIgPSBnZXRab25lQWJicjtcbiAgICBwcm90by56b25lTmFtZSA9IGdldFpvbmVOYW1lO1xuICAgIHByb3RvLmRhdGVzID0gZGVwcmVjYXRlKFxuICAgICAgICAnZGF0ZXMgYWNjZXNzb3IgaXMgZGVwcmVjYXRlZC4gVXNlIGRhdGUgaW5zdGVhZC4nLFxuICAgICAgICBnZXRTZXREYXlPZk1vbnRoXG4gICAgKTtcbiAgICBwcm90by5tb250aHMgPSBkZXByZWNhdGUoXG4gICAgICAgICdtb250aHMgYWNjZXNzb3IgaXMgZGVwcmVjYXRlZC4gVXNlIG1vbnRoIGluc3RlYWQnLFxuICAgICAgICBnZXRTZXRNb250aFxuICAgICk7XG4gICAgcHJvdG8ueWVhcnMgPSBkZXByZWNhdGUoXG4gICAgICAgICd5ZWFycyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgeWVhciBpbnN0ZWFkJyxcbiAgICAgICAgZ2V0U2V0WWVhclxuICAgICk7XG4gICAgcHJvdG8uem9uZSA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ21vbWVudCgpLnpvbmUgaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudCgpLnV0Y09mZnNldCBpbnN0ZWFkLiBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL3pvbmUvJyxcbiAgICAgICAgZ2V0U2V0Wm9uZVxuICAgICk7XG4gICAgcHJvdG8uaXNEU1RTaGlmdGVkID0gZGVwcmVjYXRlKFxuICAgICAgICAnaXNEU1RTaGlmdGVkIGlzIGRlcHJlY2F0ZWQuIFNlZSBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2RzdC1zaGlmdGVkLyBmb3IgbW9yZSBpbmZvcm1hdGlvbicsXG4gICAgICAgIGlzRGF5bGlnaHRTYXZpbmdUaW1lU2hpZnRlZFxuICAgICk7XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVVbml4KGlucHV0KSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVMb2NhbChpbnB1dCAqIDEwMDApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUluWm9uZSgpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsLmFwcGx5KG51bGwsIGFyZ3VtZW50cykucGFyc2Vab25lKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJlUGFyc2VQb3N0Rm9ybWF0KHN0cmluZykge1xuICAgICAgICByZXR1cm4gc3RyaW5nO1xuICAgIH1cblxuICAgIHZhciBwcm90byQxID0gTG9jYWxlLnByb3RvdHlwZTtcblxuICAgIHByb3RvJDEuY2FsZW5kYXIgPSBjYWxlbmRhcjtcbiAgICBwcm90byQxLmxvbmdEYXRlRm9ybWF0ID0gbG9uZ0RhdGVGb3JtYXQ7XG4gICAgcHJvdG8kMS5pbnZhbGlkRGF0ZSA9IGludmFsaWREYXRlO1xuICAgIHByb3RvJDEub3JkaW5hbCA9IG9yZGluYWw7XG4gICAgcHJvdG8kMS5wcmVwYXJzZSA9IHByZVBhcnNlUG9zdEZvcm1hdDtcbiAgICBwcm90byQxLnBvc3Rmb3JtYXQgPSBwcmVQYXJzZVBvc3RGb3JtYXQ7XG4gICAgcHJvdG8kMS5yZWxhdGl2ZVRpbWUgPSByZWxhdGl2ZVRpbWU7XG4gICAgcHJvdG8kMS5wYXN0RnV0dXJlID0gcGFzdEZ1dHVyZTtcbiAgICBwcm90byQxLnNldCA9IHNldDtcbiAgICBwcm90byQxLmVyYXMgPSBsb2NhbGVFcmFzO1xuICAgIHByb3RvJDEuZXJhc1BhcnNlID0gbG9jYWxlRXJhc1BhcnNlO1xuICAgIHByb3RvJDEuZXJhc0NvbnZlcnRZZWFyID0gbG9jYWxlRXJhc0NvbnZlcnRZZWFyO1xuICAgIHByb3RvJDEuZXJhc0FiYnJSZWdleCA9IGVyYXNBYmJyUmVnZXg7XG4gICAgcHJvdG8kMS5lcmFzTmFtZVJlZ2V4ID0gZXJhc05hbWVSZWdleDtcbiAgICBwcm90byQxLmVyYXNOYXJyb3dSZWdleCA9IGVyYXNOYXJyb3dSZWdleDtcblxuICAgIHByb3RvJDEubW9udGhzID0gbG9jYWxlTW9udGhzO1xuICAgIHByb3RvJDEubW9udGhzU2hvcnQgPSBsb2NhbGVNb250aHNTaG9ydDtcbiAgICBwcm90byQxLm1vbnRoc1BhcnNlID0gbG9jYWxlTW9udGhzUGFyc2U7XG4gICAgcHJvdG8kMS5tb250aHNSZWdleCA9IG1vbnRoc1JlZ2V4O1xuICAgIHByb3RvJDEubW9udGhzU2hvcnRSZWdleCA9IG1vbnRoc1Nob3J0UmVnZXg7XG4gICAgcHJvdG8kMS53ZWVrID0gbG9jYWxlV2VlaztcbiAgICBwcm90byQxLmZpcnN0RGF5T2ZZZWFyID0gbG9jYWxlRmlyc3REYXlPZlllYXI7XG4gICAgcHJvdG8kMS5maXJzdERheU9mV2VlayA9IGxvY2FsZUZpcnN0RGF5T2ZXZWVrO1xuXG4gICAgcHJvdG8kMS53ZWVrZGF5cyA9IGxvY2FsZVdlZWtkYXlzO1xuICAgIHByb3RvJDEud2Vla2RheXNNaW4gPSBsb2NhbGVXZWVrZGF5c01pbjtcbiAgICBwcm90byQxLndlZWtkYXlzU2hvcnQgPSBsb2NhbGVXZWVrZGF5c1Nob3J0O1xuICAgIHByb3RvJDEud2Vla2RheXNQYXJzZSA9IGxvY2FsZVdlZWtkYXlzUGFyc2U7XG5cbiAgICBwcm90byQxLndlZWtkYXlzUmVnZXggPSB3ZWVrZGF5c1JlZ2V4O1xuICAgIHByb3RvJDEud2Vla2RheXNTaG9ydFJlZ2V4ID0gd2Vla2RheXNTaG9ydFJlZ2V4O1xuICAgIHByb3RvJDEud2Vla2RheXNNaW5SZWdleCA9IHdlZWtkYXlzTWluUmVnZXg7XG5cbiAgICBwcm90byQxLmlzUE0gPSBsb2NhbGVJc1BNO1xuICAgIHByb3RvJDEubWVyaWRpZW0gPSBsb2NhbGVNZXJpZGllbTtcblxuICAgIGZ1bmN0aW9uIGdldCQxKGZvcm1hdCwgaW5kZXgsIGZpZWxkLCBzZXR0ZXIpIHtcbiAgICAgICAgdmFyIGxvY2FsZSA9IGdldExvY2FsZSgpLFxuICAgICAgICAgICAgdXRjID0gY3JlYXRlVVRDKCkuc2V0KHNldHRlciwgaW5kZXgpO1xuICAgICAgICByZXR1cm4gbG9jYWxlW2ZpZWxkXSh1dGMsIGZvcm1hdCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdE1vbnRoc0ltcGwoZm9ybWF0LCBpbmRleCwgZmllbGQpIHtcbiAgICAgICAgaWYgKGlzTnVtYmVyKGZvcm1hdCkpIHtcbiAgICAgICAgICAgIGluZGV4ID0gZm9ybWF0O1xuICAgICAgICAgICAgZm9ybWF0ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9ybWF0ID0gZm9ybWF0IHx8ICcnO1xuXG4gICAgICAgIGlmIChpbmRleCAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0JDEoZm9ybWF0LCBpbmRleCwgZmllbGQsICdtb250aCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBvdXQgPSBbXTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDEyOyBpKyspIHtcbiAgICAgICAgICAgIG91dFtpXSA9IGdldCQxKGZvcm1hdCwgaSwgZmllbGQsICdtb250aCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuXG4gICAgLy8gKClcbiAgICAvLyAoNSlcbiAgICAvLyAoZm10LCA1KVxuICAgIC8vIChmbXQpXG4gICAgLy8gKHRydWUpXG4gICAgLy8gKHRydWUsIDUpXG4gICAgLy8gKHRydWUsIGZtdCwgNSlcbiAgICAvLyAodHJ1ZSwgZm10KVxuICAgIGZ1bmN0aW9uIGxpc3RXZWVrZGF5c0ltcGwobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4LCBmaWVsZCkge1xuICAgICAgICBpZiAodHlwZW9mIGxvY2FsZVNvcnRlZCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICBpZiAoaXNOdW1iZXIoZm9ybWF0KSkge1xuICAgICAgICAgICAgICAgIGluZGV4ID0gZm9ybWF0O1xuICAgICAgICAgICAgICAgIGZvcm1hdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0IHx8ICcnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9ybWF0ID0gbG9jYWxlU29ydGVkO1xuICAgICAgICAgICAgaW5kZXggPSBmb3JtYXQ7XG4gICAgICAgICAgICBsb2NhbGVTb3J0ZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKGlzTnVtYmVyKGZvcm1hdCkpIHtcbiAgICAgICAgICAgICAgICBpbmRleCA9IGZvcm1hdDtcbiAgICAgICAgICAgICAgICBmb3JtYXQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdCB8fCAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsb2NhbGUgPSBnZXRMb2NhbGUoKSxcbiAgICAgICAgICAgIHNoaWZ0ID0gbG9jYWxlU29ydGVkID8gbG9jYWxlLl93ZWVrLmRvdyA6IDAsXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgb3V0ID0gW107XG5cbiAgICAgICAgaWYgKGluZGV4ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXQkMShmb3JtYXQsIChpbmRleCArIHNoaWZ0KSAlIDcsIGZpZWxkLCAnZGF5Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgICAgICBvdXRbaV0gPSBnZXQkMShmb3JtYXQsIChpICsgc2hpZnQpICUgNywgZmllbGQsICdkYXknKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RNb250aHMoZm9ybWF0LCBpbmRleCkge1xuICAgICAgICByZXR1cm4gbGlzdE1vbnRoc0ltcGwoZm9ybWF0LCBpbmRleCwgJ21vbnRocycpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RNb250aHNTaG9ydChmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0TW9udGhzSW1wbChmb3JtYXQsIGluZGV4LCAnbW9udGhzU2hvcnQnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0V2Vla2RheXMobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0V2Vla2RheXNJbXBsKGxvY2FsZVNvcnRlZCwgZm9ybWF0LCBpbmRleCwgJ3dlZWtkYXlzJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdFdlZWtkYXlzU2hvcnQobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0V2Vla2RheXNJbXBsKGxvY2FsZVNvcnRlZCwgZm9ybWF0LCBpbmRleCwgJ3dlZWtkYXlzU2hvcnQnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0V2Vla2RheXNNaW4obG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0V2Vla2RheXNJbXBsKGxvY2FsZVNvcnRlZCwgZm9ybWF0LCBpbmRleCwgJ3dlZWtkYXlzTWluJyk7XG4gICAgfVxuXG4gICAgZ2V0U2V0R2xvYmFsTG9jYWxlKCdlbicsIHtcbiAgICAgICAgZXJhczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNpbmNlOiAnMDAwMS0wMS0wMScsXG4gICAgICAgICAgICAgICAgdW50aWw6ICtJbmZpbml0eSxcbiAgICAgICAgICAgICAgICBvZmZzZXQ6IDEsXG4gICAgICAgICAgICAgICAgbmFtZTogJ0Fubm8gRG9taW5pJyxcbiAgICAgICAgICAgICAgICBuYXJyb3c6ICdBRCcsXG4gICAgICAgICAgICAgICAgYWJicjogJ0FEJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2luY2U6ICcwMDAwLTEyLTMxJyxcbiAgICAgICAgICAgICAgICB1bnRpbDogLUluZmluaXR5LFxuICAgICAgICAgICAgICAgIG9mZnNldDogMSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnQmVmb3JlIENocmlzdCcsXG4gICAgICAgICAgICAgICAgbmFycm93OiAnQkMnLFxuICAgICAgICAgICAgICAgIGFiYnI6ICdCQycsXG4gICAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0odGh8c3R8bmR8cmQpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgdmFyIGIgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICBvdXRwdXQgPVxuICAgICAgICAgICAgICAgICAgICB0b0ludCgobnVtYmVyICUgMTAwKSAvIDEwKSA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAndGgnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnc3QnXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ25kJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gM1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAncmQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICd0aCc7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgb3V0cHV0O1xuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gU2lkZSBlZmZlY3QgaW1wb3J0c1xuXG4gICAgaG9va3MubGFuZyA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ21vbWVudC5sYW5nIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb21lbnQubG9jYWxlIGluc3RlYWQuJyxcbiAgICAgICAgZ2V0U2V0R2xvYmFsTG9jYWxlXG4gICAgKTtcbiAgICBob29rcy5sYW5nRGF0YSA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ21vbWVudC5sYW5nRGF0YSBpcyBkZXByZWNhdGVkLiBVc2UgbW9tZW50LmxvY2FsZURhdGEgaW5zdGVhZC4nLFxuICAgICAgICBnZXRMb2NhbGVcbiAgICApO1xuXG4gICAgdmFyIG1hdGhBYnMgPSBNYXRoLmFicztcblxuICAgIGZ1bmN0aW9uIGFicygpIHtcbiAgICAgICAgdmFyIGRhdGEgPSB0aGlzLl9kYXRhO1xuXG4gICAgICAgIHRoaXMuX21pbGxpc2Vjb25kcyA9IG1hdGhBYnModGhpcy5fbWlsbGlzZWNvbmRzKTtcbiAgICAgICAgdGhpcy5fZGF5cyA9IG1hdGhBYnModGhpcy5fZGF5cyk7XG4gICAgICAgIHRoaXMuX21vbnRocyA9IG1hdGhBYnModGhpcy5fbW9udGhzKTtcblxuICAgICAgICBkYXRhLm1pbGxpc2Vjb25kcyA9IG1hdGhBYnMoZGF0YS5taWxsaXNlY29uZHMpO1xuICAgICAgICBkYXRhLnNlY29uZHMgPSBtYXRoQWJzKGRhdGEuc2Vjb25kcyk7XG4gICAgICAgIGRhdGEubWludXRlcyA9IG1hdGhBYnMoZGF0YS5taW51dGVzKTtcbiAgICAgICAgZGF0YS5ob3VycyA9IG1hdGhBYnMoZGF0YS5ob3Vycyk7XG4gICAgICAgIGRhdGEubW9udGhzID0gbWF0aEFicyhkYXRhLm1vbnRocyk7XG4gICAgICAgIGRhdGEueWVhcnMgPSBtYXRoQWJzKGRhdGEueWVhcnMpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZFN1YnRyYWN0JDEoZHVyYXRpb24sIGlucHV0LCB2YWx1ZSwgZGlyZWN0aW9uKSB7XG4gICAgICAgIHZhciBvdGhlciA9IGNyZWF0ZUR1cmF0aW9uKGlucHV0LCB2YWx1ZSk7XG5cbiAgICAgICAgZHVyYXRpb24uX21pbGxpc2Vjb25kcyArPSBkaXJlY3Rpb24gKiBvdGhlci5fbWlsbGlzZWNvbmRzO1xuICAgICAgICBkdXJhdGlvbi5fZGF5cyArPSBkaXJlY3Rpb24gKiBvdGhlci5fZGF5cztcbiAgICAgICAgZHVyYXRpb24uX21vbnRocyArPSBkaXJlY3Rpb24gKiBvdGhlci5fbW9udGhzO1xuXG4gICAgICAgIHJldHVybiBkdXJhdGlvbi5fYnViYmxlKCk7XG4gICAgfVxuXG4gICAgLy8gc3VwcG9ydHMgb25seSAyLjAtc3R5bGUgYWRkKDEsICdzJykgb3IgYWRkKGR1cmF0aW9uKVxuICAgIGZ1bmN0aW9uIGFkZCQxKGlucHV0LCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gYWRkU3VidHJhY3QkMSh0aGlzLCBpbnB1dCwgdmFsdWUsIDEpO1xuICAgIH1cblxuICAgIC8vIHN1cHBvcnRzIG9ubHkgMi4wLXN0eWxlIHN1YnRyYWN0KDEsICdzJykgb3Igc3VidHJhY3QoZHVyYXRpb24pXG4gICAgZnVuY3Rpb24gc3VidHJhY3QkMShpbnB1dCwgdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGFkZFN1YnRyYWN0JDEodGhpcywgaW5wdXQsIHZhbHVlLCAtMSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWJzQ2VpbChudW1iZXIpIHtcbiAgICAgICAgaWYgKG51bWJlciA8IDApIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKG51bWJlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5jZWlsKG51bWJlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWJibGUoKSB7XG4gICAgICAgIHZhciBtaWxsaXNlY29uZHMgPSB0aGlzLl9taWxsaXNlY29uZHMsXG4gICAgICAgICAgICBkYXlzID0gdGhpcy5fZGF5cyxcbiAgICAgICAgICAgIG1vbnRocyA9IHRoaXMuX21vbnRocyxcbiAgICAgICAgICAgIGRhdGEgPSB0aGlzLl9kYXRhLFxuICAgICAgICAgICAgc2Vjb25kcyxcbiAgICAgICAgICAgIG1pbnV0ZXMsXG4gICAgICAgICAgICBob3VycyxcbiAgICAgICAgICAgIHllYXJzLFxuICAgICAgICAgICAgbW9udGhzRnJvbURheXM7XG5cbiAgICAgICAgLy8gaWYgd2UgaGF2ZSBhIG1peCBvZiBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgdmFsdWVzLCBidWJibGUgZG93biBmaXJzdFxuICAgICAgICAvLyBjaGVjazogaHR0cHM6Ly9naXRodWIuY29tL21vbWVudC9tb21lbnQvaXNzdWVzLzIxNjZcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICAobWlsbGlzZWNvbmRzID49IDAgJiYgZGF5cyA+PSAwICYmIG1vbnRocyA+PSAwKSB8fFxuICAgICAgICAgICAgICAgIChtaWxsaXNlY29uZHMgPD0gMCAmJiBkYXlzIDw9IDAgJiYgbW9udGhzIDw9IDApXG4gICAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgICAgbWlsbGlzZWNvbmRzICs9IGFic0NlaWwobW9udGhzVG9EYXlzKG1vbnRocykgKyBkYXlzKSAqIDg2NGU1O1xuICAgICAgICAgICAgZGF5cyA9IDA7XG4gICAgICAgICAgICBtb250aHMgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBjb2RlIGJ1YmJsZXMgdXAgdmFsdWVzLCBzZWUgdGhlIHRlc3RzIGZvclxuICAgICAgICAvLyBleGFtcGxlcyBvZiB3aGF0IHRoYXQgbWVhbnMuXG4gICAgICAgIGRhdGEubWlsbGlzZWNvbmRzID0gbWlsbGlzZWNvbmRzICUgMTAwMDtcblxuICAgICAgICBzZWNvbmRzID0gYWJzRmxvb3IobWlsbGlzZWNvbmRzIC8gMTAwMCk7XG4gICAgICAgIGRhdGEuc2Vjb25kcyA9IHNlY29uZHMgJSA2MDtcblxuICAgICAgICBtaW51dGVzID0gYWJzRmxvb3Ioc2Vjb25kcyAvIDYwKTtcbiAgICAgICAgZGF0YS5taW51dGVzID0gbWludXRlcyAlIDYwO1xuXG4gICAgICAgIGhvdXJzID0gYWJzRmxvb3IobWludXRlcyAvIDYwKTtcbiAgICAgICAgZGF0YS5ob3VycyA9IGhvdXJzICUgMjQ7XG5cbiAgICAgICAgZGF5cyArPSBhYnNGbG9vcihob3VycyAvIDI0KTtcblxuICAgICAgICAvLyBjb252ZXJ0IGRheXMgdG8gbW9udGhzXG4gICAgICAgIG1vbnRoc0Zyb21EYXlzID0gYWJzRmxvb3IoZGF5c1RvTW9udGhzKGRheXMpKTtcbiAgICAgICAgbW9udGhzICs9IG1vbnRoc0Zyb21EYXlzO1xuICAgICAgICBkYXlzIC09IGFic0NlaWwobW9udGhzVG9EYXlzKG1vbnRoc0Zyb21EYXlzKSk7XG5cbiAgICAgICAgLy8gMTIgbW9udGhzIC0+IDEgeWVhclxuICAgICAgICB5ZWFycyA9IGFic0Zsb29yKG1vbnRocyAvIDEyKTtcbiAgICAgICAgbW9udGhzICU9IDEyO1xuXG4gICAgICAgIGRhdGEuZGF5cyA9IGRheXM7XG4gICAgICAgIGRhdGEubW9udGhzID0gbW9udGhzO1xuICAgICAgICBkYXRhLnllYXJzID0geWVhcnM7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGF5c1RvTW9udGhzKGRheXMpIHtcbiAgICAgICAgLy8gNDAwIHllYXJzIGhhdmUgMTQ2MDk3IGRheXMgKHRha2luZyBpbnRvIGFjY291bnQgbGVhcCB5ZWFyIHJ1bGVzKVxuICAgICAgICAvLyA0MDAgeWVhcnMgaGF2ZSAxMiBtb250aHMgPT09IDQ4MDBcbiAgICAgICAgcmV0dXJuIChkYXlzICogNDgwMCkgLyAxNDYwOTc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW9udGhzVG9EYXlzKG1vbnRocykge1xuICAgICAgICAvLyB0aGUgcmV2ZXJzZSBvZiBkYXlzVG9Nb250aHNcbiAgICAgICAgcmV0dXJuIChtb250aHMgKiAxNDYwOTcpIC8gNDgwMDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhcyh1bml0cykge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG4gICAgICAgIHZhciBkYXlzLFxuICAgICAgICAgICAgbW9udGhzLFxuICAgICAgICAgICAgbWlsbGlzZWNvbmRzID0gdGhpcy5fbWlsbGlzZWNvbmRzO1xuXG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuXG4gICAgICAgIGlmICh1bml0cyA9PT0gJ21vbnRoJyB8fCB1bml0cyA9PT0gJ3F1YXJ0ZXInIHx8IHVuaXRzID09PSAneWVhcicpIHtcbiAgICAgICAgICAgIGRheXMgPSB0aGlzLl9kYXlzICsgbWlsbGlzZWNvbmRzIC8gODY0ZTU7XG4gICAgICAgICAgICBtb250aHMgPSB0aGlzLl9tb250aHMgKyBkYXlzVG9Nb250aHMoZGF5cyk7XG4gICAgICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3F1YXJ0ZXInOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzIC8gMztcbiAgICAgICAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRocyAvIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gaGFuZGxlIG1pbGxpc2Vjb25kcyBzZXBhcmF0ZWx5IGJlY2F1c2Ugb2YgZmxvYXRpbmcgcG9pbnQgbWF0aCBlcnJvcnMgKGlzc3VlICMxODY3KVxuICAgICAgICAgICAgZGF5cyA9IHRoaXMuX2RheXMgKyBNYXRoLnJvdW5kKG1vbnRoc1RvRGF5cyh0aGlzLl9tb250aHMpKTtcbiAgICAgICAgICAgIHN3aXRjaCAodW5pdHMpIHtcbiAgICAgICAgICAgICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRheXMgLyA3ICsgbWlsbGlzZWNvbmRzIC8gNjA0OGU1O1xuICAgICAgICAgICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXlzICsgbWlsbGlzZWNvbmRzIC8gODY0ZTU7XG4gICAgICAgICAgICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXlzICogMjQgKyBtaWxsaXNlY29uZHMgLyAzNmU1O1xuICAgICAgICAgICAgICAgIGNhc2UgJ21pbnV0ZSc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXlzICogMTQ0MCArIG1pbGxpc2Vjb25kcyAvIDZlNDtcbiAgICAgICAgICAgICAgICBjYXNlICdzZWNvbmQnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF5cyAqIDg2NDAwICsgbWlsbGlzZWNvbmRzIC8gMTAwMDtcbiAgICAgICAgICAgICAgICAvLyBNYXRoLmZsb29yIHByZXZlbnRzIGZsb2F0aW5nIHBvaW50IG1hdGggZXJyb3JzIGhlcmVcbiAgICAgICAgICAgICAgICBjYXNlICdtaWxsaXNlY29uZCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKGRheXMgKiA4NjRlNSkgKyBtaWxsaXNlY29uZHM7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIHVuaXQgJyArIHVuaXRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VBcyhhbGlhcykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXMoYWxpYXMpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHZhciBhc01pbGxpc2Vjb25kcyA9IG1ha2VBcygnbXMnKSxcbiAgICAgICAgYXNTZWNvbmRzID0gbWFrZUFzKCdzJyksXG4gICAgICAgIGFzTWludXRlcyA9IG1ha2VBcygnbScpLFxuICAgICAgICBhc0hvdXJzID0gbWFrZUFzKCdoJyksXG4gICAgICAgIGFzRGF5cyA9IG1ha2VBcygnZCcpLFxuICAgICAgICBhc1dlZWtzID0gbWFrZUFzKCd3JyksXG4gICAgICAgIGFzTW9udGhzID0gbWFrZUFzKCdNJyksXG4gICAgICAgIGFzUXVhcnRlcnMgPSBtYWtlQXMoJ1EnKSxcbiAgICAgICAgYXNZZWFycyA9IG1ha2VBcygneScpLFxuICAgICAgICB2YWx1ZU9mJDEgPSBhc01pbGxpc2Vjb25kcztcblxuICAgIGZ1bmN0aW9uIGNsb25lJDEoKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVEdXJhdGlvbih0aGlzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXQkMih1bml0cykge1xuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gdGhpc1t1bml0cyArICdzJ10oKSA6IE5hTjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYWtlR2V0dGVyKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXMuX2RhdGFbbmFtZV0gOiBOYU47XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIG1pbGxpc2Vjb25kcyA9IG1ha2VHZXR0ZXIoJ21pbGxpc2Vjb25kcycpLFxuICAgICAgICBzZWNvbmRzID0gbWFrZUdldHRlcignc2Vjb25kcycpLFxuICAgICAgICBtaW51dGVzID0gbWFrZUdldHRlcignbWludXRlcycpLFxuICAgICAgICBob3VycyA9IG1ha2VHZXR0ZXIoJ2hvdXJzJyksXG4gICAgICAgIGRheXMgPSBtYWtlR2V0dGVyKCdkYXlzJyksXG4gICAgICAgIG1vbnRocyA9IG1ha2VHZXR0ZXIoJ21vbnRocycpLFxuICAgICAgICB5ZWFycyA9IG1ha2VHZXR0ZXIoJ3llYXJzJyk7XG5cbiAgICBmdW5jdGlvbiB3ZWVrcygpIHtcbiAgICAgICAgcmV0dXJuIGFic0Zsb29yKHRoaXMuZGF5cygpIC8gNyk7XG4gICAgfVxuXG4gICAgdmFyIHJvdW5kID0gTWF0aC5yb3VuZCxcbiAgICAgICAgdGhyZXNob2xkcyA9IHtcbiAgICAgICAgICAgIHNzOiA0NCwgLy8gYSBmZXcgc2Vjb25kcyB0byBzZWNvbmRzXG4gICAgICAgICAgICBzOiA0NSwgLy8gc2Vjb25kcyB0byBtaW51dGVcbiAgICAgICAgICAgIG06IDQ1LCAvLyBtaW51dGVzIHRvIGhvdXJcbiAgICAgICAgICAgIGg6IDIyLCAvLyBob3VycyB0byBkYXlcbiAgICAgICAgICAgIGQ6IDI2LCAvLyBkYXlzIHRvIG1vbnRoL3dlZWtcbiAgICAgICAgICAgIHc6IG51bGwsIC8vIHdlZWtzIHRvIG1vbnRoXG4gICAgICAgICAgICBNOiAxMSwgLy8gbW9udGhzIHRvIHllYXJcbiAgICAgICAgfTtcblxuICAgIC8vIGhlbHBlciBmdW5jdGlvbiBmb3IgbW9tZW50LmZuLmZyb20sIG1vbWVudC5mbi5mcm9tTm93LCBhbmQgbW9tZW50LmR1cmF0aW9uLmZuLmh1bWFuaXplXG4gICAgZnVuY3Rpb24gc3Vic3RpdHV0ZVRpbWVBZ28oc3RyaW5nLCBudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGlzRnV0dXJlLCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5yZWxhdGl2ZVRpbWUobnVtYmVyIHx8IDEsICEhd2l0aG91dFN1ZmZpeCwgc3RyaW5nLCBpc0Z1dHVyZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVsYXRpdmVUaW1lJDEocG9zTmVnRHVyYXRpb24sIHdpdGhvdXRTdWZmaXgsIHRocmVzaG9sZHMsIGxvY2FsZSkge1xuICAgICAgICB2YXIgZHVyYXRpb24gPSBjcmVhdGVEdXJhdGlvbihwb3NOZWdEdXJhdGlvbikuYWJzKCksXG4gICAgICAgICAgICBzZWNvbmRzID0gcm91bmQoZHVyYXRpb24uYXMoJ3MnKSksXG4gICAgICAgICAgICBtaW51dGVzID0gcm91bmQoZHVyYXRpb24uYXMoJ20nKSksXG4gICAgICAgICAgICBob3VycyA9IHJvdW5kKGR1cmF0aW9uLmFzKCdoJykpLFxuICAgICAgICAgICAgZGF5cyA9IHJvdW5kKGR1cmF0aW9uLmFzKCdkJykpLFxuICAgICAgICAgICAgbW9udGhzID0gcm91bmQoZHVyYXRpb24uYXMoJ00nKSksXG4gICAgICAgICAgICB3ZWVrcyA9IHJvdW5kKGR1cmF0aW9uLmFzKCd3JykpLFxuICAgICAgICAgICAgeWVhcnMgPSByb3VuZChkdXJhdGlvbi5hcygneScpKSxcbiAgICAgICAgICAgIGEgPVxuICAgICAgICAgICAgICAgIChzZWNvbmRzIDw9IHRocmVzaG9sZHMuc3MgJiYgWydzJywgc2Vjb25kc10pIHx8XG4gICAgICAgICAgICAgICAgKHNlY29uZHMgPCB0aHJlc2hvbGRzLnMgJiYgWydzcycsIHNlY29uZHNdKSB8fFxuICAgICAgICAgICAgICAgIChtaW51dGVzIDw9IDEgJiYgWydtJ10pIHx8XG4gICAgICAgICAgICAgICAgKG1pbnV0ZXMgPCB0aHJlc2hvbGRzLm0gJiYgWydtbScsIG1pbnV0ZXNdKSB8fFxuICAgICAgICAgICAgICAgIChob3VycyA8PSAxICYmIFsnaCddKSB8fFxuICAgICAgICAgICAgICAgIChob3VycyA8IHRocmVzaG9sZHMuaCAmJiBbJ2hoJywgaG91cnNdKSB8fFxuICAgICAgICAgICAgICAgIChkYXlzIDw9IDEgJiYgWydkJ10pIHx8XG4gICAgICAgICAgICAgICAgKGRheXMgPCB0aHJlc2hvbGRzLmQgJiYgWydkZCcsIGRheXNdKTtcblxuICAgICAgICBpZiAodGhyZXNob2xkcy53ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGEgPVxuICAgICAgICAgICAgICAgIGEgfHxcbiAgICAgICAgICAgICAgICAod2Vla3MgPD0gMSAmJiBbJ3cnXSkgfHxcbiAgICAgICAgICAgICAgICAod2Vla3MgPCB0aHJlc2hvbGRzLncgJiYgWyd3dycsIHdlZWtzXSk7XG4gICAgICAgIH1cbiAgICAgICAgYSA9IGEgfHxcbiAgICAgICAgICAgIChtb250aHMgPD0gMSAmJiBbJ00nXSkgfHxcbiAgICAgICAgICAgIChtb250aHMgPCB0aHJlc2hvbGRzLk0gJiYgWydNTScsIG1vbnRoc10pIHx8XG4gICAgICAgICAgICAoeWVhcnMgPD0gMSAmJiBbJ3knXSkgfHwgWyd5eScsIHllYXJzXTtcblxuICAgICAgICBhWzJdID0gd2l0aG91dFN1ZmZpeDtcbiAgICAgICAgYVszXSA9ICtwb3NOZWdEdXJhdGlvbiA+IDA7XG4gICAgICAgIGFbNF0gPSBsb2NhbGU7XG4gICAgICAgIHJldHVybiBzdWJzdGl0dXRlVGltZUFnby5hcHBseShudWxsLCBhKTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGFsbG93cyB5b3UgdG8gc2V0IHRoZSByb3VuZGluZyBmdW5jdGlvbiBmb3IgcmVsYXRpdmUgdGltZSBzdHJpbmdzXG4gICAgZnVuY3Rpb24gZ2V0U2V0UmVsYXRpdmVUaW1lUm91bmRpbmcocm91bmRpbmdGdW5jdGlvbikge1xuICAgICAgICBpZiAocm91bmRpbmdGdW5jdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gcm91bmQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiByb3VuZGluZ0Z1bmN0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByb3VuZCA9IHJvdW5kaW5nRnVuY3Rpb247XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiBhbGxvd3MgeW91IHRvIHNldCBhIHRocmVzaG9sZCBmb3IgcmVsYXRpdmUgdGltZSBzdHJpbmdzXG4gICAgZnVuY3Rpb24gZ2V0U2V0UmVsYXRpdmVUaW1lVGhyZXNob2xkKHRocmVzaG9sZCwgbGltaXQpIHtcbiAgICAgICAgaWYgKHRocmVzaG9sZHNbdGhyZXNob2xkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxpbWl0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aHJlc2hvbGRzW3RocmVzaG9sZF07XG4gICAgICAgIH1cbiAgICAgICAgdGhyZXNob2xkc1t0aHJlc2hvbGRdID0gbGltaXQ7XG4gICAgICAgIGlmICh0aHJlc2hvbGQgPT09ICdzJykge1xuICAgICAgICAgICAgdGhyZXNob2xkcy5zcyA9IGxpbWl0IC0gMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBodW1hbml6ZShhcmdXaXRoU3VmZml4LCBhcmdUaHJlc2hvbGRzKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdpdGhTdWZmaXggPSBmYWxzZSxcbiAgICAgICAgICAgIHRoID0gdGhyZXNob2xkcyxcbiAgICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICAgIG91dHB1dDtcblxuICAgICAgICBpZiAodHlwZW9mIGFyZ1dpdGhTdWZmaXggPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBhcmdUaHJlc2hvbGRzID0gYXJnV2l0aFN1ZmZpeDtcbiAgICAgICAgICAgIGFyZ1dpdGhTdWZmaXggPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGFyZ1dpdGhTdWZmaXggPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgd2l0aFN1ZmZpeCA9IGFyZ1dpdGhTdWZmaXg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBhcmdUaHJlc2hvbGRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgdGggPSBPYmplY3QuYXNzaWduKHt9LCB0aHJlc2hvbGRzLCBhcmdUaHJlc2hvbGRzKTtcbiAgICAgICAgICAgIGlmIChhcmdUaHJlc2hvbGRzLnMgIT0gbnVsbCAmJiBhcmdUaHJlc2hvbGRzLnNzID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aC5zcyA9IGFyZ1RocmVzaG9sZHMucyAtIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsb2NhbGUgPSB0aGlzLmxvY2FsZURhdGEoKTtcbiAgICAgICAgb3V0cHV0ID0gcmVsYXRpdmVUaW1lJDEodGhpcywgIXdpdGhTdWZmaXgsIHRoLCBsb2NhbGUpO1xuXG4gICAgICAgIGlmICh3aXRoU3VmZml4KSB7XG4gICAgICAgICAgICBvdXRwdXQgPSBsb2NhbGUucGFzdEZ1dHVyZSgrdGhpcywgb3V0cHV0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBsb2NhbGUucG9zdGZvcm1hdChvdXRwdXQpO1xuICAgIH1cblxuICAgIHZhciBhYnMkMSA9IE1hdGguYWJzO1xuXG4gICAgZnVuY3Rpb24gc2lnbih4KSB7XG4gICAgICAgIHJldHVybiAoeCA+IDApIC0gKHggPCAwKSB8fCAreDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b0lTT1N0cmluZyQxKCkge1xuICAgICAgICAvLyBmb3IgSVNPIHN0cmluZ3Mgd2UgZG8gbm90IHVzZSB0aGUgbm9ybWFsIGJ1YmJsaW5nIHJ1bGVzOlxuICAgICAgICAvLyAgKiBtaWxsaXNlY29uZHMgYnViYmxlIHVwIHVudGlsIHRoZXkgYmVjb21lIGhvdXJzXG4gICAgICAgIC8vICAqIGRheXMgZG8gbm90IGJ1YmJsZSBhdCBhbGxcbiAgICAgICAgLy8gICogbW9udGhzIGJ1YmJsZSB1cCB1bnRpbCB0aGV5IGJlY29tZSB5ZWFyc1xuICAgICAgICAvLyBUaGlzIGlzIGJlY2F1c2UgdGhlcmUgaXMgbm8gY29udGV4dC1mcmVlIGNvbnZlcnNpb24gYmV0d2VlbiBob3VycyBhbmQgZGF5c1xuICAgICAgICAvLyAodGhpbmsgb2YgY2xvY2sgY2hhbmdlcylcbiAgICAgICAgLy8gYW5kIGFsc28gbm90IGJldHdlZW4gZGF5cyBhbmQgbW9udGhzICgyOC0zMSBkYXlzIHBlciBtb250aClcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2Vjb25kcyA9IGFicyQxKHRoaXMuX21pbGxpc2Vjb25kcykgLyAxMDAwLFxuICAgICAgICAgICAgZGF5cyA9IGFicyQxKHRoaXMuX2RheXMpLFxuICAgICAgICAgICAgbW9udGhzID0gYWJzJDEodGhpcy5fbW9udGhzKSxcbiAgICAgICAgICAgIG1pbnV0ZXMsXG4gICAgICAgICAgICBob3VycyxcbiAgICAgICAgICAgIHllYXJzLFxuICAgICAgICAgICAgcyxcbiAgICAgICAgICAgIHRvdGFsID0gdGhpcy5hc1NlY29uZHMoKSxcbiAgICAgICAgICAgIHRvdGFsU2lnbixcbiAgICAgICAgICAgIHltU2lnbixcbiAgICAgICAgICAgIGRheXNTaWduLFxuICAgICAgICAgICAgaG1zU2lnbjtcblxuICAgICAgICBpZiAoIXRvdGFsKSB7XG4gICAgICAgICAgICAvLyB0aGlzIGlzIHRoZSBzYW1lIGFzIEMjJ3MgKE5vZGEpIGFuZCBweXRob24gKGlzb2RhdGUpLi4uXG4gICAgICAgICAgICAvLyBidXQgbm90IG90aGVyIEpTIChnb29nLmRhdGUpXG4gICAgICAgICAgICByZXR1cm4gJ1AwRCc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAzNjAwIHNlY29uZHMgLT4gNjAgbWludXRlcyAtPiAxIGhvdXJcbiAgICAgICAgbWludXRlcyA9IGFic0Zsb29yKHNlY29uZHMgLyA2MCk7XG4gICAgICAgIGhvdXJzID0gYWJzRmxvb3IobWludXRlcyAvIDYwKTtcbiAgICAgICAgc2Vjb25kcyAlPSA2MDtcbiAgICAgICAgbWludXRlcyAlPSA2MDtcblxuICAgICAgICAvLyAxMiBtb250aHMgLT4gMSB5ZWFyXG4gICAgICAgIHllYXJzID0gYWJzRmxvb3IobW9udGhzIC8gMTIpO1xuICAgICAgICBtb250aHMgJT0gMTI7XG5cbiAgICAgICAgLy8gaW5zcGlyZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL2RvcmRpbGxlL21vbWVudC1pc29kdXJhdGlvbi9ibG9iL21hc3Rlci9tb21lbnQuaXNvZHVyYXRpb24uanNcbiAgICAgICAgcyA9IHNlY29uZHMgPyBzZWNvbmRzLnRvRml4ZWQoMykucmVwbGFjZSgvXFwuPzArJC8sICcnKSA6ICcnO1xuXG4gICAgICAgIHRvdGFsU2lnbiA9IHRvdGFsIDwgMCA/ICctJyA6ICcnO1xuICAgICAgICB5bVNpZ24gPSBzaWduKHRoaXMuX21vbnRocykgIT09IHNpZ24odG90YWwpID8gJy0nIDogJyc7XG4gICAgICAgIGRheXNTaWduID0gc2lnbih0aGlzLl9kYXlzKSAhPT0gc2lnbih0b3RhbCkgPyAnLScgOiAnJztcbiAgICAgICAgaG1zU2lnbiA9IHNpZ24odGhpcy5fbWlsbGlzZWNvbmRzKSAhPT0gc2lnbih0b3RhbCkgPyAnLScgOiAnJztcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdG90YWxTaWduICtcbiAgICAgICAgICAgICdQJyArXG4gICAgICAgICAgICAoeWVhcnMgPyB5bVNpZ24gKyB5ZWFycyArICdZJyA6ICcnKSArXG4gICAgICAgICAgICAobW9udGhzID8geW1TaWduICsgbW9udGhzICsgJ00nIDogJycpICtcbiAgICAgICAgICAgIChkYXlzID8gZGF5c1NpZ24gKyBkYXlzICsgJ0QnIDogJycpICtcbiAgICAgICAgICAgIChob3VycyB8fCBtaW51dGVzIHx8IHNlY29uZHMgPyAnVCcgOiAnJykgK1xuICAgICAgICAgICAgKGhvdXJzID8gaG1zU2lnbiArIGhvdXJzICsgJ0gnIDogJycpICtcbiAgICAgICAgICAgIChtaW51dGVzID8gaG1zU2lnbiArIG1pbnV0ZXMgKyAnTScgOiAnJykgK1xuICAgICAgICAgICAgKHNlY29uZHMgPyBobXNTaWduICsgcyArICdTJyA6ICcnKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHZhciBwcm90byQyID0gRHVyYXRpb24ucHJvdG90eXBlO1xuXG4gICAgcHJvdG8kMi5pc1ZhbGlkID0gaXNWYWxpZCQxO1xuICAgIHByb3RvJDIuYWJzID0gYWJzO1xuICAgIHByb3RvJDIuYWRkID0gYWRkJDE7XG4gICAgcHJvdG8kMi5zdWJ0cmFjdCA9IHN1YnRyYWN0JDE7XG4gICAgcHJvdG8kMi5hcyA9IGFzO1xuICAgIHByb3RvJDIuYXNNaWxsaXNlY29uZHMgPSBhc01pbGxpc2Vjb25kcztcbiAgICBwcm90byQyLmFzU2Vjb25kcyA9IGFzU2Vjb25kcztcbiAgICBwcm90byQyLmFzTWludXRlcyA9IGFzTWludXRlcztcbiAgICBwcm90byQyLmFzSG91cnMgPSBhc0hvdXJzO1xuICAgIHByb3RvJDIuYXNEYXlzID0gYXNEYXlzO1xuICAgIHByb3RvJDIuYXNXZWVrcyA9IGFzV2Vla3M7XG4gICAgcHJvdG8kMi5hc01vbnRocyA9IGFzTW9udGhzO1xuICAgIHByb3RvJDIuYXNRdWFydGVycyA9IGFzUXVhcnRlcnM7XG4gICAgcHJvdG8kMi5hc1llYXJzID0gYXNZZWFycztcbiAgICBwcm90byQyLnZhbHVlT2YgPSB2YWx1ZU9mJDE7XG4gICAgcHJvdG8kMi5fYnViYmxlID0gYnViYmxlO1xuICAgIHByb3RvJDIuY2xvbmUgPSBjbG9uZSQxO1xuICAgIHByb3RvJDIuZ2V0ID0gZ2V0JDI7XG4gICAgcHJvdG8kMi5taWxsaXNlY29uZHMgPSBtaWxsaXNlY29uZHM7XG4gICAgcHJvdG8kMi5zZWNvbmRzID0gc2Vjb25kcztcbiAgICBwcm90byQyLm1pbnV0ZXMgPSBtaW51dGVzO1xuICAgIHByb3RvJDIuaG91cnMgPSBob3VycztcbiAgICBwcm90byQyLmRheXMgPSBkYXlzO1xuICAgIHByb3RvJDIud2Vla3MgPSB3ZWVrcztcbiAgICBwcm90byQyLm1vbnRocyA9IG1vbnRocztcbiAgICBwcm90byQyLnllYXJzID0geWVhcnM7XG4gICAgcHJvdG8kMi5odW1hbml6ZSA9IGh1bWFuaXplO1xuICAgIHByb3RvJDIudG9JU09TdHJpbmcgPSB0b0lTT1N0cmluZyQxO1xuICAgIHByb3RvJDIudG9TdHJpbmcgPSB0b0lTT1N0cmluZyQxO1xuICAgIHByb3RvJDIudG9KU09OID0gdG9JU09TdHJpbmckMTtcbiAgICBwcm90byQyLmxvY2FsZSA9IGxvY2FsZTtcbiAgICBwcm90byQyLmxvY2FsZURhdGEgPSBsb2NhbGVEYXRhO1xuXG4gICAgcHJvdG8kMi50b0lzb1N0cmluZyA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ3RvSXNvU3RyaW5nKCkgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSB0b0lTT1N0cmluZygpIGluc3RlYWQgKG5vdGljZSB0aGUgY2FwaXRhbHMpJyxcbiAgICAgICAgdG9JU09TdHJpbmckMVxuICAgICk7XG4gICAgcHJvdG8kMi5sYW5nID0gbGFuZztcblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdYJywgMCwgMCwgJ3VuaXgnKTtcbiAgICBhZGRGb3JtYXRUb2tlbigneCcsIDAsIDAsICd2YWx1ZU9mJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCd4JywgbWF0Y2hTaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1gnLCBtYXRjaFRpbWVzdGFtcCk7XG4gICAgYWRkUGFyc2VUb2tlbignWCcsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShwYXJzZUZsb2F0KGlucHV0KSAqIDEwMDApO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ3gnLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUodG9JbnQoaW5wdXQpKTtcbiAgICB9KTtcblxuICAgIC8vISBtb21lbnQuanNcblxuICAgIGhvb2tzLnZlcnNpb24gPSAnMi4zMC4xJztcblxuICAgIHNldEhvb2tDYWxsYmFjayhjcmVhdGVMb2NhbCk7XG5cbiAgICBob29rcy5mbiA9IHByb3RvO1xuICAgIGhvb2tzLm1pbiA9IG1pbjtcbiAgICBob29rcy5tYXggPSBtYXg7XG4gICAgaG9va3Mubm93ID0gbm93O1xuICAgIGhvb2tzLnV0YyA9IGNyZWF0ZVVUQztcbiAgICBob29rcy51bml4ID0gY3JlYXRlVW5peDtcbiAgICBob29rcy5tb250aHMgPSBsaXN0TW9udGhzO1xuICAgIGhvb2tzLmlzRGF0ZSA9IGlzRGF0ZTtcbiAgICBob29rcy5sb2NhbGUgPSBnZXRTZXRHbG9iYWxMb2NhbGU7XG4gICAgaG9va3MuaW52YWxpZCA9IGNyZWF0ZUludmFsaWQ7XG4gICAgaG9va3MuZHVyYXRpb24gPSBjcmVhdGVEdXJhdGlvbjtcbiAgICBob29rcy5pc01vbWVudCA9IGlzTW9tZW50O1xuICAgIGhvb2tzLndlZWtkYXlzID0gbGlzdFdlZWtkYXlzO1xuICAgIGhvb2tzLnBhcnNlWm9uZSA9IGNyZWF0ZUluWm9uZTtcbiAgICBob29rcy5sb2NhbGVEYXRhID0gZ2V0TG9jYWxlO1xuICAgIGhvb2tzLmlzRHVyYXRpb24gPSBpc0R1cmF0aW9uO1xuICAgIGhvb2tzLm1vbnRoc1Nob3J0ID0gbGlzdE1vbnRoc1Nob3J0O1xuICAgIGhvb2tzLndlZWtkYXlzTWluID0gbGlzdFdlZWtkYXlzTWluO1xuICAgIGhvb2tzLmRlZmluZUxvY2FsZSA9IGRlZmluZUxvY2FsZTtcbiAgICBob29rcy51cGRhdGVMb2NhbGUgPSB1cGRhdGVMb2NhbGU7XG4gICAgaG9va3MubG9jYWxlcyA9IGxpc3RMb2NhbGVzO1xuICAgIGhvb2tzLndlZWtkYXlzU2hvcnQgPSBsaXN0V2Vla2RheXNTaG9ydDtcbiAgICBob29rcy5ub3JtYWxpemVVbml0cyA9IG5vcm1hbGl6ZVVuaXRzO1xuICAgIGhvb2tzLnJlbGF0aXZlVGltZVJvdW5kaW5nID0gZ2V0U2V0UmVsYXRpdmVUaW1lUm91bmRpbmc7XG4gICAgaG9va3MucmVsYXRpdmVUaW1lVGhyZXNob2xkID0gZ2V0U2V0UmVsYXRpdmVUaW1lVGhyZXNob2xkO1xuICAgIGhvb2tzLmNhbGVuZGFyRm9ybWF0ID0gZ2V0Q2FsZW5kYXJGb3JtYXQ7XG4gICAgaG9va3MucHJvdG90eXBlID0gcHJvdG87XG5cbiAgICAvLyBjdXJyZW50bHkgSFRNTDUgaW5wdXQgdHlwZSBvbmx5IHN1cHBvcnRzIDI0LWhvdXIgZm9ybWF0c1xuICAgIGhvb2tzLkhUTUw1X0ZNVCA9IHtcbiAgICAgICAgREFURVRJTUVfTE9DQUw6ICdZWVlZLU1NLUREVEhIOm1tJywgLy8gPGlucHV0IHR5cGU9XCJkYXRldGltZS1sb2NhbFwiIC8+XG4gICAgICAgIERBVEVUSU1FX0xPQ0FMX1NFQ09ORFM6ICdZWVlZLU1NLUREVEhIOm1tOnNzJywgLy8gPGlucHV0IHR5cGU9XCJkYXRldGltZS1sb2NhbFwiIHN0ZXA9XCIxXCIgLz5cbiAgICAgICAgREFURVRJTUVfTE9DQUxfTVM6ICdZWVlZLU1NLUREVEhIOm1tOnNzLlNTUycsIC8vIDxpbnB1dCB0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIiBzdGVwPVwiMC4wMDFcIiAvPlxuICAgICAgICBEQVRFOiAnWVlZWS1NTS1ERCcsIC8vIDxpbnB1dCB0eXBlPVwiZGF0ZVwiIC8+XG4gICAgICAgIFRJTUU6ICdISDptbScsIC8vIDxpbnB1dCB0eXBlPVwidGltZVwiIC8+XG4gICAgICAgIFRJTUVfU0VDT05EUzogJ0hIOm1tOnNzJywgLy8gPGlucHV0IHR5cGU9XCJ0aW1lXCIgc3RlcD1cIjFcIiAvPlxuICAgICAgICBUSU1FX01TOiAnSEg6bW06c3MuU1NTJywgLy8gPGlucHV0IHR5cGU9XCJ0aW1lXCIgc3RlcD1cIjAuMDAxXCIgLz5cbiAgICAgICAgV0VFSzogJ0dHR0ctW1ddV1cnLCAvLyA8aW5wdXQgdHlwZT1cIndlZWtcIiAvPlxuICAgICAgICBNT05USDogJ1lZWVktTU0nLCAvLyA8aW5wdXQgdHlwZT1cIm1vbnRoXCIgLz5cbiAgICB9O1xuXG4gICAgcmV0dXJuIGhvb2tzO1xuXG59KSkpO1xuIiwgInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXSc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBTdHJpbmdgIHByaW1pdGl2ZSBvciBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzdHJpbmcsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1N0cmluZygnYWJjJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1N0cmluZygxKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgfHxcbiAgICAoIWlzQXJyYXkodmFsdWUpICYmIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gc3RyaW5nVGFnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1N0cmluZztcbiIsICJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYm9vbGVhbiBwcmltaXRpdmUgb3Igb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgYm9vbGVhbiwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQm9vbGVhbihmYWxzZSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0Jvb2xlYW4obnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Jvb2xlYW4odmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09PSB0cnVlIHx8IHZhbHVlID09PSBmYWxzZSB8fFxuICAgIChpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IGJvb2xUYWcpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQm9vbGVhbjtcbiIsICJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXSc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBOdW1iZXJgIHByaW1pdGl2ZSBvciBvYmplY3QuXG4gKlxuICogKipOb3RlOioqIFRvIGV4Y2x1ZGUgYEluZmluaXR5YCwgYC1JbmZpbml0eWAsIGFuZCBgTmFOYCwgd2hpY2ggYXJlXG4gKiBjbGFzc2lmaWVkIGFzIG51bWJlcnMsIHVzZSB0aGUgYF8uaXNGaW5pdGVgIG1ldGhvZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG51bWJlciwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzTnVtYmVyKDMpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNOdW1iZXIoTnVtYmVyLk1JTl9WQUxVRSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc051bWJlcihJbmZpbml0eSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc051bWJlcignMycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNOdW1iZXIodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyB8fFxuICAgIChpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IG51bWJlclRhZyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNOdW1iZXI7XG4iLCAidmFyIGlzTnVtYmVyID0gcmVxdWlyZSgnLi9pc051bWJlcicpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGBOYU5gLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBiYXNlZCBvblxuICogW2BOdW1iZXIuaXNOYU5gXShodHRwczovL21kbi5pby9OdW1iZXIvaXNOYU4pIGFuZCBpcyBub3QgdGhlIHNhbWUgYXNcbiAqIGdsb2JhbCBbYGlzTmFOYF0oaHR0cHM6Ly9tZG4uaW8vaXNOYU4pIHdoaWNoIHJldHVybnMgYHRydWVgIGZvclxuICogYHVuZGVmaW5lZGAgYW5kIG90aGVyIG5vbi1udW1iZXIgdmFsdWVzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGBOYU5gLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNOYU4oTmFOKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzTmFOKG5ldyBOdW1iZXIoTmFOKSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogaXNOYU4odW5kZWZpbmVkKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzTmFOKHVuZGVmaW5lZCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc05hTih2YWx1ZSkge1xuICAvLyBBbiBgTmFOYCBwcmltaXRpdmUgaXMgdGhlIG9ubHkgdmFsdWUgdGhhdCBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLlxuICAvLyBQZXJmb3JtIHRoZSBgdG9TdHJpbmdUYWdgIGNoZWNrIGZpcnN0IHRvIGF2b2lkIGVycm9ycyB3aXRoIHNvbWVcbiAgLy8gQWN0aXZlWCBvYmplY3RzIGluIElFLlxuICByZXR1cm4gaXNOdW1iZXIodmFsdWUpICYmIHZhbHVlICE9ICt2YWx1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc05hTjtcbiIsICIvKiEgQHByZXNlcnZlXG4gKiBudW1lcmFsLmpzXG4gKiB2ZXJzaW9uIDogMi4wLjZcbiAqIGF1dGhvciA6IEFkYW0gRHJhcGVyXG4gKiBsaWNlbnNlIDogTUlUXG4gKiBodHRwOi8vYWRhbXdkcmFwZXIuZ2l0aHViLmNvbS9OdW1lcmFsLWpzL1xuICovXG5cbihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoZmFjdG9yeSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBnbG9iYWwubnVtZXJhbCA9IGZhY3RvcnkoKTtcbiAgICB9XG59KHRoaXMsIGZ1bmN0aW9uICgpIHtcbiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgIFZhcmlhYmxlc1xuICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAgIHZhciBudW1lcmFsLFxuICAgICAgICBfLFxuICAgICAgICBWRVJTSU9OID0gJzIuMC42JyxcbiAgICAgICAgZm9ybWF0cyA9IHt9LFxuICAgICAgICBsb2NhbGVzID0ge30sXG4gICAgICAgIGRlZmF1bHRzID0ge1xuICAgICAgICAgICAgY3VycmVudExvY2FsZTogJ2VuJyxcbiAgICAgICAgICAgIHplcm9Gb3JtYXQ6IG51bGwsXG4gICAgICAgICAgICBudWxsRm9ybWF0OiBudWxsLFxuICAgICAgICAgICAgZGVmYXVsdEZvcm1hdDogJzAsMCcsXG4gICAgICAgICAgICBzY2FsZVBlcmNlbnRCeTEwMDogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBvcHRpb25zID0ge1xuICAgICAgICAgICAgY3VycmVudExvY2FsZTogZGVmYXVsdHMuY3VycmVudExvY2FsZSxcbiAgICAgICAgICAgIHplcm9Gb3JtYXQ6IGRlZmF1bHRzLnplcm9Gb3JtYXQsXG4gICAgICAgICAgICBudWxsRm9ybWF0OiBkZWZhdWx0cy5udWxsRm9ybWF0LFxuICAgICAgICAgICAgZGVmYXVsdEZvcm1hdDogZGVmYXVsdHMuZGVmYXVsdEZvcm1hdCxcbiAgICAgICAgICAgIHNjYWxlUGVyY2VudEJ5MTAwOiBkZWZhdWx0cy5zY2FsZVBlcmNlbnRCeTEwMFxuICAgICAgICB9O1xuXG5cbiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgIENvbnN0cnVjdG9yc1xuICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAgIC8vIE51bWVyYWwgcHJvdG90eXBlIG9iamVjdFxuICAgIGZ1bmN0aW9uIE51bWVyYWwoaW5wdXQsIG51bWJlcikge1xuICAgICAgICB0aGlzLl9pbnB1dCA9IGlucHV0O1xuXG4gICAgICAgIHRoaXMuX3ZhbHVlID0gbnVtYmVyO1xuICAgIH1cblxuICAgIG51bWVyYWwgPSBmdW5jdGlvbihpbnB1dCkge1xuICAgICAgICB2YXIgdmFsdWUsXG4gICAgICAgICAgICBraW5kLFxuICAgICAgICAgICAgdW5mb3JtYXRGdW5jdGlvbixcbiAgICAgICAgICAgIHJlZ2V4cDtcblxuICAgICAgICBpZiAobnVtZXJhbC5pc051bWVyYWwoaW5wdXQpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IGlucHV0LnZhbHVlKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaW5wdXQgPT09IDAgfHwgdHlwZW9mIGlucHV0ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdmFsdWUgPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKGlucHV0ID09PSBudWxsIHx8IF8uaXNOYU4oaW5wdXQpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IG51bGw7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuemVyb0Zvcm1hdCAmJiBpbnB1dCA9PT0gb3B0aW9ucy56ZXJvRm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSAwO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLm51bGxGb3JtYXQgJiYgaW5wdXQgPT09IG9wdGlvbnMubnVsbEZvcm1hdCB8fCAhaW5wdXQucmVwbGFjZSgvW14wLTldKy9nLCAnJykubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3IgKGtpbmQgaW4gZm9ybWF0cykge1xuICAgICAgICAgICAgICAgICAgICByZWdleHAgPSB0eXBlb2YgZm9ybWF0c1traW5kXS5yZWdleHBzLnVuZm9ybWF0ID09PSAnZnVuY3Rpb24nID8gZm9ybWF0c1traW5kXS5yZWdleHBzLnVuZm9ybWF0KCkgOiBmb3JtYXRzW2tpbmRdLnJlZ2V4cHMudW5mb3JtYXQ7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlZ2V4cCAmJiBpbnB1dC5tYXRjaChyZWdleHApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1bmZvcm1hdEZ1bmN0aW9uID0gZm9ybWF0c1traW5kXS51bmZvcm1hdDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB1bmZvcm1hdEZ1bmN0aW9uID0gdW5mb3JtYXRGdW5jdGlvbiB8fCBudW1lcmFsLl8uc3RyaW5nVG9OdW1iZXI7XG5cbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHVuZm9ybWF0RnVuY3Rpb24oaW5wdXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsdWUgPSBOdW1iZXIoaW5wdXQpfHwgbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgTnVtZXJhbChpbnB1dCwgdmFsdWUpO1xuICAgIH07XG5cbiAgICAvLyB2ZXJzaW9uIG51bWJlclxuICAgIG51bWVyYWwudmVyc2lvbiA9IFZFUlNJT047XG5cbiAgICAvLyBjb21wYXJlIG51bWVyYWwgb2JqZWN0XG4gICAgbnVtZXJhbC5pc051bWVyYWwgPSBmdW5jdGlvbihvYmopIHtcbiAgICAgICAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIE51bWVyYWw7XG4gICAgfTtcblxuICAgIC8vIGhlbHBlciBmdW5jdGlvbnNcbiAgICBudW1lcmFsLl8gPSBfID0ge1xuICAgICAgICAvLyBmb3JtYXRzIG51bWJlcnMgc2VwYXJhdG9ycywgZGVjaW1hbHMgcGxhY2VzLCBzaWducywgYWJicmV2aWF0aW9uc1xuICAgICAgICBudW1iZXJUb0Zvcm1hdDogZnVuY3Rpb24odmFsdWUsIGZvcm1hdCwgcm91bmRpbmdGdW5jdGlvbikge1xuICAgICAgICAgICAgdmFyIGxvY2FsZSA9IGxvY2FsZXNbbnVtZXJhbC5vcHRpb25zLmN1cnJlbnRMb2NhbGVdLFxuICAgICAgICAgICAgICAgIG5lZ1AgPSBmYWxzZSxcbiAgICAgICAgICAgICAgICBvcHREZWMgPSBmYWxzZSxcbiAgICAgICAgICAgICAgICBsZWFkaW5nQ291bnQgPSAwLFxuICAgICAgICAgICAgICAgIGFiYnIgPSAnJyxcbiAgICAgICAgICAgICAgICB0cmlsbGlvbiA9IDEwMDAwMDAwMDAwMDAsXG4gICAgICAgICAgICAgICAgYmlsbGlvbiA9IDEwMDAwMDAwMDAsXG4gICAgICAgICAgICAgICAgbWlsbGlvbiA9IDEwMDAwMDAsXG4gICAgICAgICAgICAgICAgdGhvdXNhbmQgPSAxMDAwLFxuICAgICAgICAgICAgICAgIGRlY2ltYWwgPSAnJyxcbiAgICAgICAgICAgICAgICBuZWcgPSBmYWxzZSxcbiAgICAgICAgICAgICAgICBhYmJyRm9yY2UsIC8vIGZvcmNlIGFiYnJldmlhdGlvblxuICAgICAgICAgICAgICAgIGFicyxcbiAgICAgICAgICAgICAgICBtaW4sXG4gICAgICAgICAgICAgICAgbWF4LFxuICAgICAgICAgICAgICAgIHBvd2VyLFxuICAgICAgICAgICAgICAgIGludCxcbiAgICAgICAgICAgICAgICBwcmVjaXNpb24sXG4gICAgICAgICAgICAgICAgc2lnbmVkLFxuICAgICAgICAgICAgICAgIHRob3VzYW5kcyxcbiAgICAgICAgICAgICAgICBvdXRwdXQ7XG5cbiAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB3ZSBuZXZlciBmb3JtYXQgYSBudWxsIHZhbHVlXG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlIHx8IDA7XG5cbiAgICAgICAgICAgIGFicyA9IE1hdGguYWJzKHZhbHVlKTtcblxuICAgICAgICAgICAgLy8gc2VlIGlmIHdlIHNob3VsZCB1c2UgcGFyZW50aGVzZXMgZm9yIG5lZ2F0aXZlIG51bWJlciBvciBpZiB3ZSBzaG91bGQgcHJlZml4IHdpdGggYSBzaWduXG4gICAgICAgICAgICAvLyBpZiBib3RoIGFyZSBwcmVzZW50IHdlIGRlZmF1bHQgdG8gcGFyZW50aGVzZXNcbiAgICAgICAgICAgIGlmIChudW1lcmFsLl8uaW5jbHVkZXMoZm9ybWF0LCAnKCcpKSB7XG4gICAgICAgICAgICAgICAgbmVnUCA9IHRydWU7XG4gICAgICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0LnJlcGxhY2UoL1tcXCh8XFwpXS9nLCAnJyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG51bWVyYWwuXy5pbmNsdWRlcyhmb3JtYXQsICcrJykgfHwgbnVtZXJhbC5fLmluY2x1ZGVzKGZvcm1hdCwgJy0nKSkge1xuICAgICAgICAgICAgICAgIHNpZ25lZCA9IG51bWVyYWwuXy5pbmNsdWRlcyhmb3JtYXQsICcrJykgPyBmb3JtYXQuaW5kZXhPZignKycpIDogdmFsdWUgPCAwID8gZm9ybWF0LmluZGV4T2YoJy0nKSA6IC0xO1xuICAgICAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKC9bXFwrfFxcLV0vZywgJycpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBzZWUgaWYgYWJicmV2aWF0aW9uIGlzIHdhbnRlZFxuICAgICAgICAgICAgaWYgKG51bWVyYWwuXy5pbmNsdWRlcyhmb3JtYXQsICdhJykpIHtcbiAgICAgICAgICAgICAgICBhYmJyRm9yY2UgPSBmb3JtYXQubWF0Y2goL2Eoa3xtfGJ8dCk/Lyk7XG5cbiAgICAgICAgICAgICAgICBhYmJyRm9yY2UgPSBhYmJyRm9yY2UgPyBhYmJyRm9yY2VbMV0gOiBmYWxzZTtcblxuICAgICAgICAgICAgICAgIC8vIGNoZWNrIGZvciBzcGFjZSBiZWZvcmUgYWJicmV2aWF0aW9uXG4gICAgICAgICAgICAgICAgaWYgKG51bWVyYWwuXy5pbmNsdWRlcyhmb3JtYXQsICcgYScpKSB7XG4gICAgICAgICAgICAgICAgICAgIGFiYnIgPSAnICc7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0LnJlcGxhY2UobmV3IFJlZ0V4cChhYmJyICsgJ2Fba21idF0/JyksICcnKTtcblxuICAgICAgICAgICAgICAgIGlmIChhYnMgPj0gdHJpbGxpb24gJiYgIWFiYnJGb3JjZSB8fCBhYmJyRm9yY2UgPT09ICd0Jykge1xuICAgICAgICAgICAgICAgICAgICAvLyB0cmlsbGlvblxuICAgICAgICAgICAgICAgICAgICBhYmJyICs9IGxvY2FsZS5hYmJyZXZpYXRpb25zLnRyaWxsaW9uO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlIC8gdHJpbGxpb247XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhYnMgPCB0cmlsbGlvbiAmJiBhYnMgPj0gYmlsbGlvbiAmJiAhYWJickZvcmNlIHx8IGFiYnJGb3JjZSA9PT0gJ2InKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGJpbGxpb25cbiAgICAgICAgICAgICAgICAgICAgYWJiciArPSBsb2NhbGUuYWJicmV2aWF0aW9ucy5iaWxsaW9uO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlIC8gYmlsbGlvbjtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFicyA8IGJpbGxpb24gJiYgYWJzID49IG1pbGxpb24gJiYgIWFiYnJGb3JjZSB8fCBhYmJyRm9yY2UgPT09ICdtJykge1xuICAgICAgICAgICAgICAgICAgICAvLyBtaWxsaW9uXG4gICAgICAgICAgICAgICAgICAgIGFiYnIgKz0gbG9jYWxlLmFiYnJldmlhdGlvbnMubWlsbGlvbjtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSAvIG1pbGxpb247XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhYnMgPCBtaWxsaW9uICYmIGFicyA+PSB0aG91c2FuZCAmJiAhYWJickZvcmNlIHx8IGFiYnJGb3JjZSA9PT0gJ2snKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRob3VzYW5kXG4gICAgICAgICAgICAgICAgICAgIGFiYnIgKz0gbG9jYWxlLmFiYnJldmlhdGlvbnMudGhvdXNhbmQ7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgLyB0aG91c2FuZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGNoZWNrIGZvciBvcHRpb25hbCBkZWNpbWFsc1xuICAgICAgICAgICAgaWYgKG51bWVyYWwuXy5pbmNsdWRlcyhmb3JtYXQsICdbLl0nKSkge1xuICAgICAgICAgICAgICAgIG9wdERlYyA9IHRydWU7XG4gICAgICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0LnJlcGxhY2UoJ1suXScsICcuJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGJyZWFrIG51bWJlciBhbmQgZm9ybWF0XG4gICAgICAgICAgICBpbnQgPSB2YWx1ZS50b1N0cmluZygpLnNwbGl0KCcuJylbMF07XG4gICAgICAgICAgICBwcmVjaXNpb24gPSBmb3JtYXQuc3BsaXQoJy4nKVsxXTtcbiAgICAgICAgICAgIHRob3VzYW5kcyA9IGZvcm1hdC5pbmRleE9mKCcsJyk7XG4gICAgICAgICAgICBsZWFkaW5nQ291bnQgPSAoZm9ybWF0LnNwbGl0KCcuJylbMF0uc3BsaXQoJywnKVswXS5tYXRjaCgvMC9nKSB8fCBbXSkubGVuZ3RoO1xuXG4gICAgICAgICAgICBpZiAocHJlY2lzaW9uKSB7XG4gICAgICAgICAgICAgICAgaWYgKG51bWVyYWwuXy5pbmNsdWRlcyhwcmVjaXNpb24sICdbJykpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJlY2lzaW9uID0gcHJlY2lzaW9uLnJlcGxhY2UoJ10nLCAnJyk7XG4gICAgICAgICAgICAgICAgICAgIHByZWNpc2lvbiA9IHByZWNpc2lvbi5zcGxpdCgnWycpO1xuICAgICAgICAgICAgICAgICAgICBkZWNpbWFsID0gbnVtZXJhbC5fLnRvRml4ZWQodmFsdWUsIChwcmVjaXNpb25bMF0ubGVuZ3RoICsgcHJlY2lzaW9uWzFdLmxlbmd0aCksIHJvdW5kaW5nRnVuY3Rpb24sIHByZWNpc2lvblsxXS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGRlY2ltYWwgPSBudW1lcmFsLl8udG9GaXhlZCh2YWx1ZSwgcHJlY2lzaW9uLmxlbmd0aCwgcm91bmRpbmdGdW5jdGlvbik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaW50ID0gZGVjaW1hbC5zcGxpdCgnLicpWzBdO1xuXG4gICAgICAgICAgICAgICAgaWYgKG51bWVyYWwuXy5pbmNsdWRlcyhkZWNpbWFsLCAnLicpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlY2ltYWwgPSBsb2NhbGUuZGVsaW1pdGVycy5kZWNpbWFsICsgZGVjaW1hbC5zcGxpdCgnLicpWzFdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGRlY2ltYWwgPSAnJztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAob3B0RGVjICYmIE51bWJlcihkZWNpbWFsLnNsaWNlKDEpKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBkZWNpbWFsID0gJyc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpbnQgPSBudW1lcmFsLl8udG9GaXhlZCh2YWx1ZSwgMCwgcm91bmRpbmdGdW5jdGlvbik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGNoZWNrIGFiYnJldmlhdGlvbiBhZ2FpbiBhZnRlciByb3VuZGluZ1xuICAgICAgICAgICAgaWYgKGFiYnIgJiYgIWFiYnJGb3JjZSAmJiBOdW1iZXIoaW50KSA+PSAxMDAwICYmIGFiYnIgIT09IGxvY2FsZS5hYmJyZXZpYXRpb25zLnRyaWxsaW9uKSB7XG4gICAgICAgICAgICAgICAgaW50ID0gU3RyaW5nKE51bWJlcihpbnQpIC8gMTAwMCk7XG5cbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGFiYnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBsb2NhbGUuYWJicmV2aWF0aW9ucy50aG91c2FuZDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFiYnIgPSBsb2NhbGUuYWJicmV2aWF0aW9ucy5taWxsaW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgbG9jYWxlLmFiYnJldmlhdGlvbnMubWlsbGlvbjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFiYnIgPSBsb2NhbGUuYWJicmV2aWF0aW9ucy5iaWxsaW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgbG9jYWxlLmFiYnJldmlhdGlvbnMuYmlsbGlvbjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFiYnIgPSBsb2NhbGUuYWJicmV2aWF0aW9ucy50cmlsbGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAvLyBmb3JtYXQgbnVtYmVyXG4gICAgICAgICAgICBpZiAobnVtZXJhbC5fLmluY2x1ZGVzKGludCwgJy0nKSkge1xuICAgICAgICAgICAgICAgIGludCA9IGludC5zbGljZSgxKTtcbiAgICAgICAgICAgICAgICBuZWcgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaW50Lmxlbmd0aCA8IGxlYWRpbmdDb3VudCkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSBsZWFkaW5nQ291bnQgLSBpbnQubGVuZ3RoOyBpID4gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgICAgIGludCA9ICcwJyArIGludDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aG91c2FuZHMgPiAtMSkge1xuICAgICAgICAgICAgICAgIGludCA9IGludC50b1N0cmluZygpLnJlcGxhY2UoLyhcXGQpKD89KFxcZHszfSkrKD8hXFxkKSkvZywgJyQxJyArIGxvY2FsZS5kZWxpbWl0ZXJzLnRob3VzYW5kcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChmb3JtYXQuaW5kZXhPZignLicpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgaW50ID0gJyc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG91dHB1dCA9IGludCArIGRlY2ltYWwgKyAoYWJiciA/IGFiYnIgOiAnJyk7XG5cbiAgICAgICAgICAgIGlmIChuZWdQKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gKG5lZ1AgJiYgbmVnID8gJygnIDogJycpICsgb3V0cHV0ICsgKG5lZ1AgJiYgbmVnID8gJyknIDogJycpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoc2lnbmVkID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gc2lnbmVkID09PSAwID8gKG5lZyA/ICctJyA6ICcrJykgKyBvdXRwdXQgOiBvdXRwdXQgKyAobmVnID8gJy0nIDogJysnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5lZykge1xuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSAnLScgKyBvdXRwdXQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICAgICB9LFxuICAgICAgICAvLyB1bmZvcm1hdHMgbnVtYmVycyBzZXBhcmF0b3JzLCBkZWNpbWFscyBwbGFjZXMsIHNpZ25zLCBhYmJyZXZpYXRpb25zXG4gICAgICAgIHN0cmluZ1RvTnVtYmVyOiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICAgICAgICAgIHZhciBsb2NhbGUgPSBsb2NhbGVzW29wdGlvbnMuY3VycmVudExvY2FsZV0sXG4gICAgICAgICAgICAgICAgc3RyaW5nT3JpZ2luYWwgPSBzdHJpbmcsXG4gICAgICAgICAgICAgICAgYWJicmV2aWF0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICAgICAgdGhvdXNhbmQ6IDMsXG4gICAgICAgICAgICAgICAgICAgIG1pbGxpb246IDYsXG4gICAgICAgICAgICAgICAgICAgIGJpbGxpb246IDksXG4gICAgICAgICAgICAgICAgICAgIHRyaWxsaW9uOiAxMlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYWJicmV2aWF0aW9uLFxuICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgIGksXG4gICAgICAgICAgICAgICAgcmVnZXhwO1xuXG4gICAgICAgICAgICBpZiAob3B0aW9ucy56ZXJvRm9ybWF0ICYmIHN0cmluZyA9PT0gb3B0aW9ucy56ZXJvRm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSAwO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLm51bGxGb3JtYXQgJiYgc3RyaW5nID09PSBvcHRpb25zLm51bGxGb3JtYXQgfHwgIXN0cmluZy5yZXBsYWNlKC9bXjAtOV0rL2csICcnKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gMTtcblxuICAgICAgICAgICAgICAgIGlmIChsb2NhbGUuZGVsaW1pdGVycy5kZWNpbWFsICE9PSAnLicpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoL1xcLi9nLCAnJykucmVwbGFjZShsb2NhbGUuZGVsaW1pdGVycy5kZWNpbWFsLCAnLicpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZvciAoYWJicmV2aWF0aW9uIGluIGFiYnJldmlhdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVnZXhwID0gbmV3IFJlZ0V4cCgnW15hLXpBLVpdJyArIGxvY2FsZS5hYmJyZXZpYXRpb25zW2FiYnJldmlhdGlvbl0gKyAnKD86XFxcXCl8KFxcXFwnICsgbG9jYWxlLmN1cnJlbmN5LnN5bWJvbCArICcpPyg/OlxcXFwpKT8pPyQnKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoc3RyaW5nT3JpZ2luYWwubWF0Y2gocmVnZXhwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgKj0gTWF0aC5wb3coMTAsIGFiYnJldmlhdGlvbnNbYWJicmV2aWF0aW9uXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIGNoZWNrIGZvciBuZWdhdGl2ZSBudW1iZXJcbiAgICAgICAgICAgICAgICB2YWx1ZSAqPSAoc3RyaW5nLnNwbGl0KCctJykubGVuZ3RoICsgTWF0aC5taW4oc3RyaW5nLnNwbGl0KCcoJykubGVuZ3RoIC0gMSwgc3RyaW5nLnNwbGl0KCcpJykubGVuZ3RoIC0gMSkpICUgMiA/IDEgOiAtMTtcblxuICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBub24gbnVtYmVyc1xuICAgICAgICAgICAgICAgIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKC9bXjAtOVxcLl0rL2csICcnKTtcblxuICAgICAgICAgICAgICAgIHZhbHVlICo9IE51bWJlcihzdHJpbmcpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIGlzTmFOOiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgaXNOYU4odmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICBpbmNsdWRlczogZnVuY3Rpb24oc3RyaW5nLCBzZWFyY2gpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcuaW5kZXhPZihzZWFyY2gpICE9PSAtMTtcbiAgICAgICAgfSxcbiAgICAgICAgaW5zZXJ0OiBmdW5jdGlvbihzdHJpbmcsIHN1YlN0cmluZywgc3RhcnQpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcuc2xpY2UoMCwgc3RhcnQpICsgc3ViU3RyaW5nICsgc3RyaW5nLnNsaWNlKHN0YXJ0KTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVkdWNlOiBmdW5jdGlvbihhcnJheSwgY2FsbGJhY2sgLyosIGluaXRpYWxWYWx1ZSovKSB7XG4gICAgICAgICAgICBpZiAodGhpcyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5LnByb3RvdHlwZS5yZWR1Y2UgY2FsbGVkIG9uIG51bGwgb3IgdW5kZWZpbmVkJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGNhbGxiYWNrICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgdCA9IE9iamVjdChhcnJheSksXG4gICAgICAgICAgICAgICAgbGVuID0gdC5sZW5ndGggPj4+IDAsXG4gICAgICAgICAgICAgICAgayA9IDAsXG4gICAgICAgICAgICAgICAgdmFsdWU7XG5cbiAgICAgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBhcmd1bWVudHNbMl07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHdoaWxlIChrIDwgbGVuICYmICEoayBpbiB0KSkge1xuICAgICAgICAgICAgICAgICAgICBrKys7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGsgPj0gbGVuKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlZHVjZSBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHRbaysrXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoOyBrIDwgbGVuOyBrKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoayBpbiB0KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gY2FsbGJhY2sodmFsdWUsIHRba10sIGssIHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbXB1dGVzIHRoZSBtdWx0aXBsaWVyIG5lY2Vzc2FyeSB0byBtYWtlIHggPj0gMSxcbiAgICAgICAgICogZWZmZWN0aXZlbHkgZWxpbWluYXRpbmcgbWlzY2FsY3VsYXRpb25zIGNhdXNlZCBieVxuICAgICAgICAgKiBmaW5pdGUgcHJlY2lzaW9uLlxuICAgICAgICAgKi9cbiAgICAgICAgbXVsdGlwbGllcjogZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgIHZhciBwYXJ0cyA9IHgudG9TdHJpbmcoKS5zcGxpdCgnLicpO1xuXG4gICAgICAgICAgICByZXR1cm4gcGFydHMubGVuZ3RoIDwgMiA/IDEgOiBNYXRoLnBvdygxMCwgcGFydHNbMV0ubGVuZ3RoKTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdpdmVuIGEgdmFyaWFibGUgbnVtYmVyIG9mIGFyZ3VtZW50cywgcmV0dXJucyB0aGUgbWF4aW11bVxuICAgICAgICAgKiBtdWx0aXBsaWVyIHRoYXQgbXVzdCBiZSB1c2VkIHRvIG5vcm1hbGl6ZSBhbiBvcGVyYXRpb24gaW52b2x2aW5nXG4gICAgICAgICAqIGFsbCBvZiB0aGVtLlxuICAgICAgICAgKi9cbiAgICAgICAgY29ycmVjdGlvbkZhY3RvcjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuXG4gICAgICAgICAgICByZXR1cm4gYXJncy5yZWR1Y2UoZnVuY3Rpb24oYWNjdW0sIG5leHQpIHtcbiAgICAgICAgICAgICAgICB2YXIgbW4gPSBfLm11bHRpcGxpZXIobmV4dCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjY3VtID4gbW4gPyBhY2N1bSA6IG1uO1xuICAgICAgICAgICAgfSwgMSk7XG4gICAgICAgIH0sXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJbXBsZW1lbnRhdGlvbiBvZiB0b0ZpeGVkKCkgdGhhdCB0cmVhdHMgZmxvYXRzIG1vcmUgbGlrZSBkZWNpbWFsc1xuICAgICAgICAgKlxuICAgICAgICAgKiBGaXhlcyBiaW5hcnkgcm91bmRpbmcgaXNzdWVzIChlZy4gKDAuNjE1KS50b0ZpeGVkKDIpID09PSAnMC42MScpIHRoYXQgcHJlc2VudFxuICAgICAgICAgKiBwcm9ibGVtcyBmb3IgYWNjb3VudGluZy0gYW5kIGZpbmFuY2UtcmVsYXRlZCBzb2Z0d2FyZS5cbiAgICAgICAgICovXG4gICAgICAgIHRvRml4ZWQ6IGZ1bmN0aW9uKHZhbHVlLCBtYXhEZWNpbWFscywgcm91bmRpbmdGdW5jdGlvbiwgb3B0aW9uYWxzKSB7XG4gICAgICAgICAgICB2YXIgc3BsaXRWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCkuc3BsaXQoJy4nKSxcbiAgICAgICAgICAgICAgICBtaW5EZWNpbWFscyA9IG1heERlY2ltYWxzIC0gKG9wdGlvbmFscyB8fCAwKSxcbiAgICAgICAgICAgICAgICBib3VuZGVkUHJlY2lzaW9uLFxuICAgICAgICAgICAgICAgIG9wdGlvbmFsc1JlZ0V4cCxcbiAgICAgICAgICAgICAgICBwb3dlcixcbiAgICAgICAgICAgICAgICBvdXRwdXQ7XG5cbiAgICAgICAgICAgIC8vIFVzZSB0aGUgc21hbGxlc3QgcHJlY2lzaW9uIHZhbHVlIHBvc3NpYmxlIHRvIGF2b2lkIGVycm9ycyBmcm9tIGZsb2F0aW5nIHBvaW50IHJlcHJlc2VudGF0aW9uXG4gICAgICAgICAgICBpZiAoc3BsaXRWYWx1ZS5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgICAgYm91bmRlZFByZWNpc2lvbiA9IE1hdGgubWluKE1hdGgubWF4KHNwbGl0VmFsdWVbMV0ubGVuZ3RoLCBtaW5EZWNpbWFscyksIG1heERlY2ltYWxzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGJvdW5kZWRQcmVjaXNpb24gPSBtaW5EZWNpbWFscztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcG93ZXIgPSBNYXRoLnBvdygxMCwgYm91bmRlZFByZWNpc2lvbik7XG5cbiAgICAgICAgICAgIC8vIE11bHRpcGx5IHVwIGJ5IHByZWNpc2lvbiwgcm91bmQgYWNjdXJhdGVseSwgdGhlbiBkaXZpZGUgYW5kIHVzZSBuYXRpdmUgdG9GaXhlZCgpOlxuICAgICAgICAgICAgb3V0cHV0ID0gKHJvdW5kaW5nRnVuY3Rpb24odmFsdWUgKyAnZSsnICsgYm91bmRlZFByZWNpc2lvbikgLyBwb3dlcikudG9GaXhlZChib3VuZGVkUHJlY2lzaW9uKTtcblxuICAgICAgICAgICAgaWYgKG9wdGlvbmFscyA+IG1heERlY2ltYWxzIC0gYm91bmRlZFByZWNpc2lvbikge1xuICAgICAgICAgICAgICAgIG9wdGlvbmFsc1JlZ0V4cCA9IG5ldyBSZWdFeHAoJ1xcXFwuPzB7MSwnICsgKG9wdGlvbmFscyAtIChtYXhEZWNpbWFscyAtIGJvdW5kZWRQcmVjaXNpb24pKSArICd9JCcpO1xuICAgICAgICAgICAgICAgIG91dHB1dCA9IG91dHB1dC5yZXBsYWNlKG9wdGlvbmFsc1JlZ0V4cCwgJycpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8vIGF2YWxpYWJsZSBvcHRpb25zXG4gICAgbnVtZXJhbC5vcHRpb25zID0gb3B0aW9ucztcblxuICAgIC8vIGF2YWxpYWJsZSBmb3JtYXRzXG4gICAgbnVtZXJhbC5mb3JtYXRzID0gZm9ybWF0cztcblxuICAgIC8vIGF2YWxpYWJsZSBmb3JtYXRzXG4gICAgbnVtZXJhbC5sb2NhbGVzID0gbG9jYWxlcztcblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgY3VycmVudCBsb2NhbGUuICBJZlxuICAgIC8vIG5vIGFyZ3VtZW50cyBhcmUgcGFzc2VkIGluLCBpdCB3aWxsIHNpbXBseSByZXR1cm4gdGhlIGN1cnJlbnQgZ2xvYmFsXG4gICAgLy8gbG9jYWxlIGtleS5cbiAgICBudW1lcmFsLmxvY2FsZSA9IGZ1bmN0aW9uKGtleSkge1xuICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICBvcHRpb25zLmN1cnJlbnRMb2NhbGUgPSBrZXkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvcHRpb25zLmN1cnJlbnRMb2NhbGU7XG4gICAgfTtcblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBsb2FkZWQgbG9jYWxlIGRhdGEuICBJZlxuICAgIC8vIG5vIGFyZ3VtZW50cyBhcmUgcGFzc2VkIGluLCBpdCB3aWxsIHNpbXBseSByZXR1cm4gdGhlIGN1cnJlbnRcbiAgICAvLyBnbG9iYWwgbG9jYWxlIG9iamVjdC5cbiAgICBudW1lcmFsLmxvY2FsZURhdGEgPSBmdW5jdGlvbihrZXkpIHtcbiAgICAgICAgaWYgKCFrZXkpIHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbGVzW29wdGlvbnMuY3VycmVudExvY2FsZV07XG4gICAgICAgIH1cblxuICAgICAgICBrZXkgPSBrZXkudG9Mb3dlckNhc2UoKTtcblxuICAgICAgICBpZiAoIWxvY2FsZXNba2V5XSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGxvY2FsZSA6ICcgKyBrZXkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGxvY2FsZXNba2V5XTtcbiAgICB9O1xuXG4gICAgbnVtZXJhbC5yZXNldCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkZWZhdWx0cykge1xuICAgICAgICAgICAgb3B0aW9uc1twcm9wZXJ0eV0gPSBkZWZhdWx0c1twcm9wZXJ0eV07XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgbnVtZXJhbC56ZXJvRm9ybWF0ID0gZnVuY3Rpb24oZm9ybWF0KSB7XG4gICAgICAgIG9wdGlvbnMuemVyb0Zvcm1hdCA9IHR5cGVvZihmb3JtYXQpID09PSAnc3RyaW5nJyA/IGZvcm1hdCA6IG51bGw7XG4gICAgfTtcblxuICAgIG51bWVyYWwubnVsbEZvcm1hdCA9IGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICAgICAgb3B0aW9ucy5udWxsRm9ybWF0ID0gdHlwZW9mKGZvcm1hdCkgPT09ICdzdHJpbmcnID8gZm9ybWF0IDogbnVsbDtcbiAgICB9O1xuXG4gICAgbnVtZXJhbC5kZWZhdWx0Rm9ybWF0ID0gZnVuY3Rpb24oZm9ybWF0KSB7XG4gICAgICAgIG9wdGlvbnMuZGVmYXVsdEZvcm1hdCA9IHR5cGVvZihmb3JtYXQpID09PSAnc3RyaW5nJyA/IGZvcm1hdCA6ICcwLjAnO1xuICAgIH07XG5cbiAgICBudW1lcmFsLnJlZ2lzdGVyID0gZnVuY3Rpb24odHlwZSwgbmFtZSwgZm9ybWF0KSB7XG4gICAgICAgIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgICAgaWYgKHRoaXNbdHlwZSArICdzJ11bbmFtZV0pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IobmFtZSArICcgJyArIHR5cGUgKyAnIGFscmVhZHkgcmVnaXN0ZXJlZC4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXNbdHlwZSArICdzJ11bbmFtZV0gPSBmb3JtYXQ7XG5cbiAgICAgICAgcmV0dXJuIGZvcm1hdDtcbiAgICB9O1xuXG5cbiAgICBudW1lcmFsLnZhbGlkYXRlID0gZnVuY3Rpb24odmFsLCBjdWx0dXJlKSB7XG4gICAgICAgIHZhciBfZGVjaW1hbFNlcCxcbiAgICAgICAgICAgIF90aG91c2FuZFNlcCxcbiAgICAgICAgICAgIF9jdXJyU3ltYm9sLFxuICAgICAgICAgICAgX3ZhbEFycmF5LFxuICAgICAgICAgICAgX2FiYnJPYmosXG4gICAgICAgICAgICBfdGhvdXNhbmRSZWdFeCxcbiAgICAgICAgICAgIGxvY2FsZURhdGEsXG4gICAgICAgICAgICB0ZW1wO1xuXG4gICAgICAgIC8vY29lcmNlIHZhbCB0byBzdHJpbmdcbiAgICAgICAgaWYgKHR5cGVvZiB2YWwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB2YWwgKz0gJyc7XG5cbiAgICAgICAgICAgIGlmIChjb25zb2xlLndhcm4pIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ051bWVyYWwuanM6IFZhbHVlIGlzIG5vdCBzdHJpbmcuIEl0IGhhcyBiZWVuIGNvLWVyY2VkIHRvOiAnLCB2YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy90cmltIHdoaXRlc3BhY2VzIGZyb20gZWl0aGVyIHNpZGVzXG4gICAgICAgIHZhbCA9IHZhbC50cmltKCk7XG5cbiAgICAgICAgLy9pZiB2YWwgaXMganVzdCBkaWdpdHMgcmV0dXJuIHRydWVcbiAgICAgICAgaWYgKCEhdmFsLm1hdGNoKC9eXFxkKyQvKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICAvL2lmIHZhbCBpcyBlbXB0eSByZXR1cm4gZmFsc2VcbiAgICAgICAgaWYgKHZhbCA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vZ2V0IHRoZSBkZWNpbWFsIGFuZCB0aG91c2FuZHMgc2VwYXJhdG9yIGZyb20gbnVtZXJhbC5sb2NhbGVEYXRhXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvL2NoZWNrIGlmIHRoZSBjdWx0dXJlIGlzIHVuZGVyc3Rvb2QgYnkgbnVtZXJhbC4gaWYgbm90LCBkZWZhdWx0IGl0IHRvIGN1cnJlbnQgbG9jYWxlXG4gICAgICAgICAgICBsb2NhbGVEYXRhID0gbnVtZXJhbC5sb2NhbGVEYXRhKGN1bHR1cmUpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBsb2NhbGVEYXRhID0gbnVtZXJhbC5sb2NhbGVEYXRhKG51bWVyYWwubG9jYWxlKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9zZXR1cCB0aGUgZGVsaW1pdGVycyBhbmQgY3VycmVuY3kgc3ltYm9sIGJhc2VkIG9uIGN1bHR1cmUvbG9jYWxlXG4gICAgICAgIF9jdXJyU3ltYm9sID0gbG9jYWxlRGF0YS5jdXJyZW5jeS5zeW1ib2w7XG4gICAgICAgIF9hYmJyT2JqID0gbG9jYWxlRGF0YS5hYmJyZXZpYXRpb25zO1xuICAgICAgICBfZGVjaW1hbFNlcCA9IGxvY2FsZURhdGEuZGVsaW1pdGVycy5kZWNpbWFsO1xuICAgICAgICBpZiAobG9jYWxlRGF0YS5kZWxpbWl0ZXJzLnRob3VzYW5kcyA9PT0gJy4nKSB7XG4gICAgICAgICAgICBfdGhvdXNhbmRTZXAgPSAnXFxcXC4nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgX3Rob3VzYW5kU2VwID0gbG9jYWxlRGF0YS5kZWxpbWl0ZXJzLnRob3VzYW5kcztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHZhbGlkYXRpbmcgY3VycmVuY3kgc3ltYm9sXG4gICAgICAgIHRlbXAgPSB2YWwubWF0Y2goL15bXlxcZF0rLyk7XG4gICAgICAgIGlmICh0ZW1wICE9PSBudWxsKSB7XG4gICAgICAgICAgICB2YWwgPSB2YWwuc3Vic3RyKDEpO1xuICAgICAgICAgICAgaWYgKHRlbXBbMF0gIT09IF9jdXJyU3ltYm9sKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy92YWxpZGF0aW5nIGFiYnJldmlhdGlvbiBzeW1ib2xcbiAgICAgICAgdGVtcCA9IHZhbC5tYXRjaCgvW15cXGRdKyQvKTtcbiAgICAgICAgaWYgKHRlbXAgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHZhbCA9IHZhbC5zbGljZSgwLCAtMSk7XG4gICAgICAgICAgICBpZiAodGVtcFswXSAhPT0gX2FiYnJPYmoudGhvdXNhbmQgJiYgdGVtcFswXSAhPT0gX2FiYnJPYmoubWlsbGlvbiAmJiB0ZW1wWzBdICE9PSBfYWJick9iai5iaWxsaW9uICYmIHRlbXBbMF0gIT09IF9hYmJyT2JqLnRyaWxsaW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgX3Rob3VzYW5kUmVnRXggPSBuZXcgUmVnRXhwKF90aG91c2FuZFNlcCArICd7Mn0nKTtcblxuICAgICAgICBpZiAoIXZhbC5tYXRjaCgvW15cXGQuLF0vZykpIHtcbiAgICAgICAgICAgIF92YWxBcnJheSA9IHZhbC5zcGxpdChfZGVjaW1hbFNlcCk7XG4gICAgICAgICAgICBpZiAoX3ZhbEFycmF5Lmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChfdmFsQXJyYXkubGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCAhISBfdmFsQXJyYXlbMF0ubWF0Y2goL15cXGQrLipcXGQkLykgJiYgIV92YWxBcnJheVswXS5tYXRjaChfdGhvdXNhbmRSZWdFeCkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfdmFsQXJyYXlbMF0ubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCAhISBfdmFsQXJyYXlbMF0ubWF0Y2goL15cXGQrJC8pICYmICFfdmFsQXJyYXlbMF0ubWF0Y2goX3Rob3VzYW5kUmVnRXgpICYmICEhIF92YWxBcnJheVsxXS5tYXRjaCgvXlxcZCskLykpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICggISEgX3ZhbEFycmF5WzBdLm1hdGNoKC9eXFxkKy4qXFxkJC8pICYmICFfdmFsQXJyYXlbMF0ubWF0Y2goX3Rob3VzYW5kUmVnRXgpICYmICEhIF92YWxBcnJheVsxXS5tYXRjaCgvXlxcZCskLykpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG5cblxuICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgTnVtZXJhbCBQcm90b3R5cGVcbiAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgICBudW1lcmFsLmZuID0gTnVtZXJhbC5wcm90b3R5cGUgPSB7XG4gICAgICAgIGNsb25lOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBudW1lcmFsKHRoaXMpO1xuICAgICAgICB9LFxuICAgICAgICBmb3JtYXQ6IGZ1bmN0aW9uKGlucHV0U3RyaW5nLCByb3VuZGluZ0Z1bmN0aW9uKSB7XG4gICAgICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLl92YWx1ZSxcbiAgICAgICAgICAgICAgICBmb3JtYXQgPSBpbnB1dFN0cmluZyB8fCBvcHRpb25zLmRlZmF1bHRGb3JtYXQsXG4gICAgICAgICAgICAgICAga2luZCxcbiAgICAgICAgICAgICAgICBvdXRwdXQsXG4gICAgICAgICAgICAgICAgZm9ybWF0RnVuY3Rpb247XG5cbiAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB3ZSBoYXZlIGEgcm91bmRpbmdGdW5jdGlvblxuICAgICAgICAgICAgcm91bmRpbmdGdW5jdGlvbiA9IHJvdW5kaW5nRnVuY3Rpb24gfHwgTWF0aC5yb3VuZDtcblxuICAgICAgICAgICAgLy8gZm9ybWF0IGJhc2VkIG9uIHZhbHVlXG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IDAgJiYgb3B0aW9ucy56ZXJvRm9ybWF0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gb3B0aW9ucy56ZXJvRm9ybWF0O1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gbnVsbCAmJiBvcHRpb25zLm51bGxGb3JtYXQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSBvcHRpb25zLm51bGxGb3JtYXQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvciAoa2luZCBpbiBmb3JtYXRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmb3JtYXQubWF0Y2goZm9ybWF0c1traW5kXS5yZWdleHBzLmZvcm1hdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdEZ1bmN0aW9uID0gZm9ybWF0c1traW5kXS5mb3JtYXQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZm9ybWF0RnVuY3Rpb24gPSBmb3JtYXRGdW5jdGlvbiB8fCBudW1lcmFsLl8ubnVtYmVyVG9Gb3JtYXQ7XG5cbiAgICAgICAgICAgICAgICBvdXRwdXQgPSBmb3JtYXRGdW5jdGlvbih2YWx1ZSwgZm9ybWF0LCByb3VuZGluZ0Z1bmN0aW9uKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBpbnB1dDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faW5wdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gTnVtYmVyKHZhbHVlKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG4gICAgICAgIGFkZDogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIHZhciBjb3JyRmFjdG9yID0gXy5jb3JyZWN0aW9uRmFjdG9yLmNhbGwobnVsbCwgdGhpcy5fdmFsdWUsIHZhbHVlKTtcblxuICAgICAgICAgICAgZnVuY3Rpb24gY2JhY2soYWNjdW0sIGN1cnIsIGN1cnJJLCBPKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjY3VtICsgTWF0aC5yb3VuZChjb3JyRmFjdG9yICogY3Vycik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gXy5yZWR1Y2UoW3RoaXMuX3ZhbHVlLCB2YWx1ZV0sIGNiYWNrLCAwKSAvIGNvcnJGYWN0b3I7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuICAgICAgICBzdWJ0cmFjdDogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIHZhciBjb3JyRmFjdG9yID0gXy5jb3JyZWN0aW9uRmFjdG9yLmNhbGwobnVsbCwgdGhpcy5fdmFsdWUsIHZhbHVlKTtcblxuICAgICAgICAgICAgZnVuY3Rpb24gY2JhY2soYWNjdW0sIGN1cnIsIGN1cnJJLCBPKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjY3VtIC0gTWF0aC5yb3VuZChjb3JyRmFjdG9yICogY3Vycik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gXy5yZWR1Y2UoW3ZhbHVlXSwgY2JhY2ssIE1hdGgucm91bmQodGhpcy5fdmFsdWUgKiBjb3JyRmFjdG9yKSkgLyBjb3JyRmFjdG9yO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcbiAgICAgICAgbXVsdGlwbHk6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICBmdW5jdGlvbiBjYmFjayhhY2N1bSwgY3VyciwgY3VyckksIE8pIHtcbiAgICAgICAgICAgICAgICB2YXIgY29yckZhY3RvciA9IF8uY29ycmVjdGlvbkZhY3RvcihhY2N1bSwgY3Vycik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgucm91bmQoYWNjdW0gKiBjb3JyRmFjdG9yKSAqIE1hdGgucm91bmQoY3VyciAqIGNvcnJGYWN0b3IpIC8gTWF0aC5yb3VuZChjb3JyRmFjdG9yICogY29yckZhY3Rvcik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gXy5yZWR1Y2UoW3RoaXMuX3ZhbHVlLCB2YWx1ZV0sIGNiYWNrLCAxKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG4gICAgICAgIGRpdmlkZTogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIGNiYWNrKGFjY3VtLCBjdXJyLCBjdXJySSwgTykge1xuICAgICAgICAgICAgICAgIHZhciBjb3JyRmFjdG9yID0gXy5jb3JyZWN0aW9uRmFjdG9yKGFjY3VtLCBjdXJyKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5yb3VuZChhY2N1bSAqIGNvcnJGYWN0b3IpIC8gTWF0aC5yb3VuZChjdXJyICogY29yckZhY3Rvcik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gXy5yZWR1Y2UoW3RoaXMuX3ZhbHVlLCB2YWx1ZV0sIGNiYWNrKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG4gICAgICAgIGRpZmZlcmVuY2U6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5hYnMobnVtZXJhbCh0aGlzLl92YWx1ZSkuc3VidHJhY3QodmFsdWUpLnZhbHVlKCkpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgRGVmYXVsdCBMb2NhbGUgJiYgRm9ybWF0XG4gICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gICAgbnVtZXJhbC5yZWdpc3RlcignbG9jYWxlJywgJ2VuJywge1xuICAgICAgICBkZWxpbWl0ZXJzOiB7XG4gICAgICAgICAgICB0aG91c2FuZHM6ICcsJyxcbiAgICAgICAgICAgIGRlY2ltYWw6ICcuJ1xuICAgICAgICB9LFxuICAgICAgICBhYmJyZXZpYXRpb25zOiB7XG4gICAgICAgICAgICB0aG91c2FuZDogJ2snLFxuICAgICAgICAgICAgbWlsbGlvbjogJ20nLFxuICAgICAgICAgICAgYmlsbGlvbjogJ2InLFxuICAgICAgICAgICAgdHJpbGxpb246ICd0J1xuICAgICAgICB9LFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbihudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBiID0gbnVtYmVyICUgMTA7XG4gICAgICAgICAgICByZXR1cm4gKH5+KG51bWJlciAlIDEwMCAvIDEwKSA9PT0gMSkgPyAndGgnIDpcbiAgICAgICAgICAgICAgICAoYiA9PT0gMSkgPyAnc3QnIDpcbiAgICAgICAgICAgICAgICAoYiA9PT0gMikgPyAnbmQnIDpcbiAgICAgICAgICAgICAgICAoYiA9PT0gMykgPyAncmQnIDogJ3RoJztcbiAgICAgICAgfSxcbiAgICAgICAgY3VycmVuY3k6IHtcbiAgICAgICAgICAgIHN5bWJvbDogJyQnXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIFxuXG4oZnVuY3Rpb24oKSB7XG4gICAgICAgIG51bWVyYWwucmVnaXN0ZXIoJ2Zvcm1hdCcsICdicHMnLCB7XG4gICAgICAgICAgICByZWdleHBzOiB7XG4gICAgICAgICAgICAgICAgZm9ybWF0OiAvKEJQUykvLFxuICAgICAgICAgICAgICAgIHVuZm9ybWF0OiAvKEJQUykvXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZm9ybWF0OiBmdW5jdGlvbih2YWx1ZSwgZm9ybWF0LCByb3VuZGluZ0Z1bmN0aW9uKSB7XG4gICAgICAgICAgICAgICAgdmFyIHNwYWNlID0gbnVtZXJhbC5fLmluY2x1ZGVzKGZvcm1hdCwgJyBCUFMnKSA/ICcgJyA6ICcnLFxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQ7XG5cbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlICogMTAwMDA7XG5cbiAgICAgICAgICAgICAgICAvLyBjaGVjayBmb3Igc3BhY2UgYmVmb3JlIEJQU1xuICAgICAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKC9cXHM/QlBTLywgJycpO1xuXG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gbnVtZXJhbC5fLm51bWJlclRvRm9ybWF0KHZhbHVlLCBmb3JtYXQsIHJvdW5kaW5nRnVuY3Rpb24pO1xuXG4gICAgICAgICAgICAgICAgaWYgKG51bWVyYWwuXy5pbmNsdWRlcyhvdXRwdXQsICcpJykpIHtcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gb3V0cHV0LnNwbGl0KCcnKTtcblxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQuc3BsaWNlKC0xLCAwLCBzcGFjZSArICdCUFMnKTtcblxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSBvdXRwdXQuam9pbignJyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gb3V0cHV0ICsgc3BhY2UgKyAnQlBTJztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVuZm9ybWF0OiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKyhudW1lcmFsLl8uc3RyaW5nVG9OdW1iZXIoc3RyaW5nKSAqIDAuMDAwMSkudG9GaXhlZCgxNSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xufSkoKTtcblxuXG4oZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBkZWNpbWFsID0ge1xuICAgICAgICAgICAgYmFzZTogMTAwMCxcbiAgICAgICAgICAgIHN1ZmZpeGVzOiBbJ0InLCAnS0InLCAnTUInLCAnR0InLCAnVEInLCAnUEInLCAnRUInLCAnWkInLCAnWUInXVxuICAgICAgICB9LFxuICAgICAgICBiaW5hcnkgPSB7XG4gICAgICAgICAgICBiYXNlOiAxMDI0LFxuICAgICAgICAgICAgc3VmZml4ZXM6IFsnQicsICdLaUInLCAnTWlCJywgJ0dpQicsICdUaUInLCAnUGlCJywgJ0VpQicsICdaaUInLCAnWWlCJ11cbiAgICAgICAgfTtcblxuICAgIHZhciBhbGxTdWZmaXhlcyA9ICBkZWNpbWFsLnN1ZmZpeGVzLmNvbmNhdChiaW5hcnkuc3VmZml4ZXMuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICByZXR1cm4gZGVjaW1hbC5zdWZmaXhlcy5pbmRleE9mKGl0ZW0pIDwgMDtcbiAgICAgICAgfSkpO1xuICAgICAgICB2YXIgdW5mb3JtYXRSZWdleCA9IGFsbFN1ZmZpeGVzLmpvaW4oJ3wnKTtcbiAgICAgICAgLy8gQWxsb3cgc3VwcG9ydCBmb3IgQlBTIChodHRwOi8vd3d3LmludmVzdG9wZWRpYS5jb20vdGVybXMvYi9iYXNpc3BvaW50LmFzcClcbiAgICAgICAgdW5mb3JtYXRSZWdleCA9ICcoJyArIHVuZm9ybWF0UmVnZXgucmVwbGFjZSgnQicsICdCKD8hUFMpJykgKyAnKSc7XG5cbiAgICBudW1lcmFsLnJlZ2lzdGVyKCdmb3JtYXQnLCAnYnl0ZXMnLCB7XG4gICAgICAgIHJlZ2V4cHM6IHtcbiAgICAgICAgICAgIGZvcm1hdDogLyhbMFxcc11pP2IpLyxcbiAgICAgICAgICAgIHVuZm9ybWF0OiBuZXcgUmVnRXhwKHVuZm9ybWF0UmVnZXgpXG4gICAgICAgIH0sXG4gICAgICAgIGZvcm1hdDogZnVuY3Rpb24odmFsdWUsIGZvcm1hdCwgcm91bmRpbmdGdW5jdGlvbikge1xuICAgICAgICAgICAgdmFyIG91dHB1dCxcbiAgICAgICAgICAgICAgICBieXRlcyA9IG51bWVyYWwuXy5pbmNsdWRlcyhmb3JtYXQsICdpYicpID8gYmluYXJ5IDogZGVjaW1hbCxcbiAgICAgICAgICAgICAgICBzdWZmaXggPSBudW1lcmFsLl8uaW5jbHVkZXMoZm9ybWF0LCAnIGInKSB8fCBudW1lcmFsLl8uaW5jbHVkZXMoZm9ybWF0LCAnIGliJykgPyAnICcgOiAnJyxcbiAgICAgICAgICAgICAgICBwb3dlcixcbiAgICAgICAgICAgICAgICBtaW4sXG4gICAgICAgICAgICAgICAgbWF4O1xuXG4gICAgICAgICAgICAvLyBjaGVjayBmb3Igc3BhY2UgYmVmb3JlXG4gICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZSgvXFxzP2k/Yi8sICcnKTtcblxuICAgICAgICAgICAgZm9yIChwb3dlciA9IDA7IHBvd2VyIDw9IGJ5dGVzLnN1ZmZpeGVzLmxlbmd0aDsgcG93ZXIrKykge1xuICAgICAgICAgICAgICAgIG1pbiA9IE1hdGgucG93KGJ5dGVzLmJhc2UsIHBvd2VyKTtcbiAgICAgICAgICAgICAgICBtYXggPSBNYXRoLnBvdyhieXRlcy5iYXNlLCBwb3dlciArIDEpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSAwIHx8IHZhbHVlID49IG1pbiAmJiB2YWx1ZSA8IG1heCkge1xuICAgICAgICAgICAgICAgICAgICBzdWZmaXggKz0gYnl0ZXMuc3VmZml4ZXNbcG93ZXJdO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChtaW4gPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlIC8gbWluO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBvdXRwdXQgPSBudW1lcmFsLl8ubnVtYmVyVG9Gb3JtYXQodmFsdWUsIGZvcm1hdCwgcm91bmRpbmdGdW5jdGlvbik7XG5cbiAgICAgICAgICAgIHJldHVybiBvdXRwdXQgKyBzdWZmaXg7XG4gICAgICAgIH0sXG4gICAgICAgIHVuZm9ybWF0OiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IG51bWVyYWwuXy5zdHJpbmdUb051bWJlcihzdHJpbmcpLFxuICAgICAgICAgICAgICAgIHBvd2VyLFxuICAgICAgICAgICAgICAgIGJ5dGVzTXVsdGlwbGllcjtcblxuICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgZm9yIChwb3dlciA9IGRlY2ltYWwuc3VmZml4ZXMubGVuZ3RoIC0gMTsgcG93ZXIgPj0gMDsgcG93ZXItLSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAobnVtZXJhbC5fLmluY2x1ZGVzKHN0cmluZywgZGVjaW1hbC5zdWZmaXhlc1twb3dlcl0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBieXRlc011bHRpcGxpZXIgPSBNYXRoLnBvdyhkZWNpbWFsLmJhc2UsIHBvd2VyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAobnVtZXJhbC5fLmluY2x1ZGVzKHN0cmluZywgYmluYXJ5LnN1ZmZpeGVzW3Bvd2VyXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzTXVsdGlwbGllciA9IE1hdGgucG93KGJpbmFyeS5iYXNlLCBwb3dlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFsdWUgKj0gKGJ5dGVzTXVsdGlwbGllciB8fCAxKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgfSk7XG59KSgpO1xuXG5cbihmdW5jdGlvbigpIHtcbiAgICAgICAgbnVtZXJhbC5yZWdpc3RlcignZm9ybWF0JywgJ2N1cnJlbmN5Jywge1xuICAgICAgICByZWdleHBzOiB7XG4gICAgICAgICAgICBmb3JtYXQ6IC8oXFwkKS9cbiAgICAgICAgfSxcbiAgICAgICAgZm9ybWF0OiBmdW5jdGlvbih2YWx1ZSwgZm9ybWF0LCByb3VuZGluZ0Z1bmN0aW9uKSB7XG4gICAgICAgICAgICB2YXIgbG9jYWxlID0gbnVtZXJhbC5sb2NhbGVzW251bWVyYWwub3B0aW9ucy5jdXJyZW50TG9jYWxlXSxcbiAgICAgICAgICAgICAgICBzeW1ib2xzID0ge1xuICAgICAgICAgICAgICAgICAgICBiZWZvcmU6IGZvcm1hdC5tYXRjaCgvXihbXFwrfFxcLXxcXCh8XFxzfFxcJF0qKS8pWzBdLFxuICAgICAgICAgICAgICAgICAgICBhZnRlcjogZm9ybWF0Lm1hdGNoKC8oW1xcK3xcXC18XFwpfFxcc3xcXCRdKikkLylbMF1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG91dHB1dCxcbiAgICAgICAgICAgICAgICBzeW1ib2wsXG4gICAgICAgICAgICAgICAgaTtcblxuICAgICAgICAgICAgLy8gc3RyaXAgZm9ybWF0IG9mIHNwYWNlcyBhbmQgJFxuICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0LnJlcGxhY2UoL1xccz9cXCRcXHM/LywgJycpO1xuXG4gICAgICAgICAgICAvLyBmb3JtYXQgdGhlIG51bWJlclxuICAgICAgICAgICAgb3V0cHV0ID0gbnVtZXJhbC5fLm51bWJlclRvRm9ybWF0KHZhbHVlLCBmb3JtYXQsIHJvdW5kaW5nRnVuY3Rpb24pO1xuXG4gICAgICAgICAgICAvLyB1cGRhdGUgdGhlIGJlZm9yZSBhbmQgYWZ0ZXIgYmFzZWQgb24gdmFsdWVcbiAgICAgICAgICAgIGlmICh2YWx1ZSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgc3ltYm9scy5iZWZvcmUgPSBzeW1ib2xzLmJlZm9yZS5yZXBsYWNlKC9bXFwtXFwoXS8sICcnKTtcbiAgICAgICAgICAgICAgICBzeW1ib2xzLmFmdGVyID0gc3ltYm9scy5hZnRlci5yZXBsYWNlKC9bXFwtXFwpXS8sICcnKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPCAwICYmICghbnVtZXJhbC5fLmluY2x1ZGVzKHN5bWJvbHMuYmVmb3JlLCAnLScpICYmICFudW1lcmFsLl8uaW5jbHVkZXMoc3ltYm9scy5iZWZvcmUsICcoJykpKSB7XG4gICAgICAgICAgICAgICAgc3ltYm9scy5iZWZvcmUgPSAnLScgKyBzeW1ib2xzLmJlZm9yZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gbG9vcCB0aHJvdWdoIGVhY2ggYmVmb3JlIHN5bWJvbFxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHN5bWJvbHMuYmVmb3JlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgc3ltYm9sID0gc3ltYm9scy5iZWZvcmVbaV07XG5cbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHN5bWJvbCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlICckJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IG51bWVyYWwuXy5pbnNlcnQob3V0cHV0LCBsb2NhbGUuY3VycmVuY3kuc3ltYm9sLCBpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICcgJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IG51bWVyYWwuXy5pbnNlcnQob3V0cHV0LCAnICcsIGkgKyBsb2NhbGUuY3VycmVuY3kuc3ltYm9sLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBsb29wIHRocm91Z2ggZWFjaCBhZnRlciBzeW1ib2xcbiAgICAgICAgICAgIGZvciAoaSA9IHN5bWJvbHMuYWZ0ZXIubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICBzeW1ib2wgPSBzeW1ib2xzLmFmdGVyW2ldO1xuXG4gICAgICAgICAgICAgICAgc3dpdGNoIChzeW1ib2wpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnJCc6XG4gICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSBpID09PSBzeW1ib2xzLmFmdGVyLmxlbmd0aCAtIDEgPyBvdXRwdXQgKyBsb2NhbGUuY3VycmVuY3kuc3ltYm9sIDogbnVtZXJhbC5fLmluc2VydChvdXRwdXQsIGxvY2FsZS5jdXJyZW5jeS5zeW1ib2wsIC0oc3ltYm9scy5hZnRlci5sZW5ndGggLSAoMSArIGkpKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnICc6XG4gICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSBpID09PSBzeW1ib2xzLmFmdGVyLmxlbmd0aCAtIDEgPyBvdXRwdXQgKyAnICcgOiBudW1lcmFsLl8uaW5zZXJ0KG91dHB1dCwgJyAnLCAtKHN5bWJvbHMuYWZ0ZXIubGVuZ3RoIC0gKDEgKyBpKSArIGxvY2FsZS5jdXJyZW5jeS5zeW1ib2wubGVuZ3RoIC0gMSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICAgIH1cbiAgICB9KTtcbn0pKCk7XG5cblxuKGZ1bmN0aW9uKCkge1xuICAgICAgICBudW1lcmFsLnJlZ2lzdGVyKCdmb3JtYXQnLCAnZXhwb25lbnRpYWwnLCB7XG4gICAgICAgIHJlZ2V4cHM6IHtcbiAgICAgICAgICAgIGZvcm1hdDogLyhlXFwrfGUtKS8sXG4gICAgICAgICAgICB1bmZvcm1hdDogLyhlXFwrfGUtKS9cbiAgICAgICAgfSxcbiAgICAgICAgZm9ybWF0OiBmdW5jdGlvbih2YWx1ZSwgZm9ybWF0LCByb3VuZGluZ0Z1bmN0aW9uKSB7XG4gICAgICAgICAgICB2YXIgb3V0cHV0LFxuICAgICAgICAgICAgICAgIGV4cG9uZW50aWFsID0gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiAhbnVtZXJhbC5fLmlzTmFOKHZhbHVlKSA/IHZhbHVlLnRvRXhwb25lbnRpYWwoKSA6ICcwZSswJyxcbiAgICAgICAgICAgICAgICBwYXJ0cyA9IGV4cG9uZW50aWFsLnNwbGl0KCdlJyk7XG5cbiAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKC9lW1xcK3xcXC1dezF9MC8sICcnKTtcblxuICAgICAgICAgICAgb3V0cHV0ID0gbnVtZXJhbC5fLm51bWJlclRvRm9ybWF0KE51bWJlcihwYXJ0c1swXSksIGZvcm1hdCwgcm91bmRpbmdGdW5jdGlvbik7XG5cbiAgICAgICAgICAgIHJldHVybiBvdXRwdXQgKyAnZScgKyBwYXJ0c1sxXTtcbiAgICAgICAgfSxcbiAgICAgICAgdW5mb3JtYXQ6IGZ1bmN0aW9uKHN0cmluZykge1xuICAgICAgICAgICAgdmFyIHBhcnRzID0gbnVtZXJhbC5fLmluY2x1ZGVzKHN0cmluZywgJ2UrJykgPyBzdHJpbmcuc3BsaXQoJ2UrJykgOiBzdHJpbmcuc3BsaXQoJ2UtJyksXG4gICAgICAgICAgICAgICAgdmFsdWUgPSBOdW1iZXIocGFydHNbMF0pLFxuICAgICAgICAgICAgICAgIHBvd2VyID0gTnVtYmVyKHBhcnRzWzFdKTtcblxuICAgICAgICAgICAgcG93ZXIgPSBudW1lcmFsLl8uaW5jbHVkZXMoc3RyaW5nLCAnZS0nKSA/IHBvd2VyICo9IC0xIDogcG93ZXI7XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIGNiYWNrKGFjY3VtLCBjdXJyLCBjdXJySSwgTykge1xuICAgICAgICAgICAgICAgIHZhciBjb3JyRmFjdG9yID0gbnVtZXJhbC5fLmNvcnJlY3Rpb25GYWN0b3IoYWNjdW0sIGN1cnIpLFxuICAgICAgICAgICAgICAgICAgICBudW0gPSAoYWNjdW0gKiBjb3JyRmFjdG9yKSAqIChjdXJyICogY29yckZhY3RvcikgLyAoY29yckZhY3RvciAqIGNvcnJGYWN0b3IpO1xuICAgICAgICAgICAgICAgIHJldHVybiBudW07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBudW1lcmFsLl8ucmVkdWNlKFt2YWx1ZSwgTWF0aC5wb3coMTAsIHBvd2VyKV0sIGNiYWNrLCAxKTtcbiAgICAgICAgfVxuICAgIH0pO1xufSkoKTtcblxuXG4oZnVuY3Rpb24oKSB7XG4gICAgICAgIG51bWVyYWwucmVnaXN0ZXIoJ2Zvcm1hdCcsICdvcmRpbmFsJywge1xuICAgICAgICByZWdleHBzOiB7XG4gICAgICAgICAgICBmb3JtYXQ6IC8obykvXG4gICAgICAgIH0sXG4gICAgICAgIGZvcm1hdDogZnVuY3Rpb24odmFsdWUsIGZvcm1hdCwgcm91bmRpbmdGdW5jdGlvbikge1xuICAgICAgICAgICAgdmFyIGxvY2FsZSA9IG51bWVyYWwubG9jYWxlc1tudW1lcmFsLm9wdGlvbnMuY3VycmVudExvY2FsZV0sXG4gICAgICAgICAgICAgICAgb3V0cHV0LFxuICAgICAgICAgICAgICAgIG9yZGluYWwgPSBudW1lcmFsLl8uaW5jbHVkZXMoZm9ybWF0LCAnIG8nKSA/ICcgJyA6ICcnO1xuXG4gICAgICAgICAgICAvLyBjaGVjayBmb3Igc3BhY2UgYmVmb3JlXG4gICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZSgvXFxzP28vLCAnJyk7XG5cbiAgICAgICAgICAgIG9yZGluYWwgKz0gbG9jYWxlLm9yZGluYWwodmFsdWUpO1xuXG4gICAgICAgICAgICBvdXRwdXQgPSBudW1lcmFsLl8ubnVtYmVyVG9Gb3JtYXQodmFsdWUsIGZvcm1hdCwgcm91bmRpbmdGdW5jdGlvbik7XG5cbiAgICAgICAgICAgIHJldHVybiBvdXRwdXQgKyBvcmRpbmFsO1xuICAgICAgICB9XG4gICAgfSk7XG59KSgpO1xuXG5cbihmdW5jdGlvbigpIHtcbiAgICAgICAgbnVtZXJhbC5yZWdpc3RlcignZm9ybWF0JywgJ3BlcmNlbnRhZ2UnLCB7XG4gICAgICAgIHJlZ2V4cHM6IHtcbiAgICAgICAgICAgIGZvcm1hdDogLyglKS8sXG4gICAgICAgICAgICB1bmZvcm1hdDogLyglKS9cbiAgICAgICAgfSxcbiAgICAgICAgZm9ybWF0OiBmdW5jdGlvbih2YWx1ZSwgZm9ybWF0LCByb3VuZGluZ0Z1bmN0aW9uKSB7XG4gICAgICAgICAgICB2YXIgc3BhY2UgPSBudW1lcmFsLl8uaW5jbHVkZXMoZm9ybWF0LCAnICUnKSA/ICcgJyA6ICcnLFxuICAgICAgICAgICAgICAgIG91dHB1dDtcblxuICAgICAgICAgICAgaWYgKG51bWVyYWwub3B0aW9ucy5zY2FsZVBlcmNlbnRCeTEwMCkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgKiAxMDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGNoZWNrIGZvciBzcGFjZSBiZWZvcmUgJVxuICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0LnJlcGxhY2UoL1xccz9cXCUvLCAnJyk7XG5cbiAgICAgICAgICAgIG91dHB1dCA9IG51bWVyYWwuXy5udW1iZXJUb0Zvcm1hdCh2YWx1ZSwgZm9ybWF0LCByb3VuZGluZ0Z1bmN0aW9uKTtcblxuICAgICAgICAgICAgaWYgKG51bWVyYWwuXy5pbmNsdWRlcyhvdXRwdXQsICcpJykpIHtcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSBvdXRwdXQuc3BsaXQoJycpO1xuXG4gICAgICAgICAgICAgICAgb3V0cHV0LnNwbGljZSgtMSwgMCwgc3BhY2UgKyAnJScpO1xuXG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gb3V0cHV0LmpvaW4oJycpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSBvdXRwdXQgKyBzcGFjZSArICclJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgdW5mb3JtYXQ6IGZ1bmN0aW9uKHN0cmluZykge1xuICAgICAgICAgICAgdmFyIG51bWJlciA9IG51bWVyYWwuXy5zdHJpbmdUb051bWJlcihzdHJpbmcpO1xuICAgICAgICAgICAgaWYgKG51bWVyYWwub3B0aW9ucy5zY2FsZVBlcmNlbnRCeTEwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKiAwLjAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgfVxuICAgIH0pO1xufSkoKTtcblxuXG4oZnVuY3Rpb24oKSB7XG4gICAgICAgIG51bWVyYWwucmVnaXN0ZXIoJ2Zvcm1hdCcsICd0aW1lJywge1xuICAgICAgICByZWdleHBzOiB7XG4gICAgICAgICAgICBmb3JtYXQ6IC8oOikvLFxuICAgICAgICAgICAgdW5mb3JtYXQ6IC8oOikvXG4gICAgICAgIH0sXG4gICAgICAgIGZvcm1hdDogZnVuY3Rpb24odmFsdWUsIGZvcm1hdCwgcm91bmRpbmdGdW5jdGlvbikge1xuICAgICAgICAgICAgdmFyIGhvdXJzID0gTWF0aC5mbG9vcih2YWx1ZSAvIDYwIC8gNjApLFxuICAgICAgICAgICAgICAgIG1pbnV0ZXMgPSBNYXRoLmZsb29yKCh2YWx1ZSAtIChob3VycyAqIDYwICogNjApKSAvIDYwKSxcbiAgICAgICAgICAgICAgICBzZWNvbmRzID0gTWF0aC5yb3VuZCh2YWx1ZSAtIChob3VycyAqIDYwICogNjApIC0gKG1pbnV0ZXMgKiA2MCkpO1xuXG4gICAgICAgICAgICByZXR1cm4gaG91cnMgKyAnOicgKyAobWludXRlcyA8IDEwID8gJzAnICsgbWludXRlcyA6IG1pbnV0ZXMpICsgJzonICsgKHNlY29uZHMgPCAxMCA/ICcwJyArIHNlY29uZHMgOiBzZWNvbmRzKTtcbiAgICAgICAgfSxcbiAgICAgICAgdW5mb3JtYXQ6IGZ1bmN0aW9uKHN0cmluZykge1xuICAgICAgICAgICAgdmFyIHRpbWVBcnJheSA9IHN0cmluZy5zcGxpdCgnOicpLFxuICAgICAgICAgICAgICAgIHNlY29uZHMgPSAwO1xuXG4gICAgICAgICAgICAvLyB0dXJuIGhvdXJzIGFuZCBtaW51dGVzIGludG8gc2Vjb25kcyBhbmQgYWRkIHRoZW0gYWxsIHVwXG4gICAgICAgICAgICBpZiAodGltZUFycmF5Lmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgICAgIC8vIGhvdXJzXG4gICAgICAgICAgICAgICAgc2Vjb25kcyA9IHNlY29uZHMgKyAoTnVtYmVyKHRpbWVBcnJheVswXSkgKiA2MCAqIDYwKTtcbiAgICAgICAgICAgICAgICAvLyBtaW51dGVzXG4gICAgICAgICAgICAgICAgc2Vjb25kcyA9IHNlY29uZHMgKyAoTnVtYmVyKHRpbWVBcnJheVsxXSkgKiA2MCk7XG4gICAgICAgICAgICAgICAgLy8gc2Vjb25kc1xuICAgICAgICAgICAgICAgIHNlY29uZHMgPSBzZWNvbmRzICsgTnVtYmVyKHRpbWVBcnJheVsyXSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRpbWVBcnJheS5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgICAgICAvLyBtaW51dGVzXG4gICAgICAgICAgICAgICAgc2Vjb25kcyA9IHNlY29uZHMgKyAoTnVtYmVyKHRpbWVBcnJheVswXSkgKiA2MCk7XG4gICAgICAgICAgICAgICAgLy8gc2Vjb25kc1xuICAgICAgICAgICAgICAgIHNlY29uZHMgPSBzZWNvbmRzICsgTnVtYmVyKHRpbWVBcnJheVsxXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gTnVtYmVyKHNlY29uZHMpO1xuICAgICAgICB9XG4gICAgfSk7XG59KSgpO1xuXG5yZXR1cm4gbnVtZXJhbDtcbn0pKTtcbiIsICJ2YXIgTWFwQ2FjaGUgPSByZXF1aXJlKCcuL19NYXBDYWNoZScpO1xuXG4vKiogRXJyb3IgbWVzc2FnZSBjb25zdGFudHMuICovXG52YXIgRlVOQ19FUlJPUl9URVhUID0gJ0V4cGVjdGVkIGEgZnVuY3Rpb24nO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IG1lbW9pemVzIHRoZSByZXN1bHQgb2YgYGZ1bmNgLiBJZiBgcmVzb2x2ZXJgIGlzXG4gKiBwcm92aWRlZCwgaXQgZGV0ZXJtaW5lcyB0aGUgY2FjaGUga2V5IGZvciBzdG9yaW5nIHRoZSByZXN1bHQgYmFzZWQgb24gdGhlXG4gKiBhcmd1bWVudHMgcHJvdmlkZWQgdG8gdGhlIG1lbW9pemVkIGZ1bmN0aW9uLiBCeSBkZWZhdWx0LCB0aGUgZmlyc3QgYXJndW1lbnRcbiAqIHByb3ZpZGVkIHRvIHRoZSBtZW1vaXplZCBmdW5jdGlvbiBpcyB1c2VkIGFzIHRoZSBtYXAgY2FjaGUga2V5LiBUaGUgYGZ1bmNgXG4gKiBpcyBpbnZva2VkIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIHRoZSBtZW1vaXplZCBmdW5jdGlvbi5cbiAqXG4gKiAqKk5vdGU6KiogVGhlIGNhY2hlIGlzIGV4cG9zZWQgYXMgdGhlIGBjYWNoZWAgcHJvcGVydHkgb24gdGhlIG1lbW9pemVkXG4gKiBmdW5jdGlvbi4gSXRzIGNyZWF0aW9uIG1heSBiZSBjdXN0b21pemVkIGJ5IHJlcGxhY2luZyB0aGUgYF8ubWVtb2l6ZS5DYWNoZWBcbiAqIGNvbnN0cnVjdG9yIHdpdGggb25lIHdob3NlIGluc3RhbmNlcyBpbXBsZW1lbnQgdGhlXG4gKiBbYE1hcGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXByb3BlcnRpZXMtb2YtdGhlLW1hcC1wcm90b3R5cGUtb2JqZWN0KVxuICogbWV0aG9kIGludGVyZmFjZSBvZiBgY2xlYXJgLCBgZGVsZXRlYCwgYGdldGAsIGBoYXNgLCBhbmQgYHNldGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBoYXZlIGl0cyBvdXRwdXQgbWVtb2l6ZWQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcmVzb2x2ZXJdIFRoZSBmdW5jdGlvbiB0byByZXNvbHZlIHRoZSBjYWNoZSBrZXkuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBtZW1vaXplZCBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6IDIgfTtcbiAqIHZhciBvdGhlciA9IHsgJ2MnOiAzLCAnZCc6IDQgfTtcbiAqXG4gKiB2YXIgdmFsdWVzID0gXy5tZW1vaXplKF8udmFsdWVzKTtcbiAqIHZhbHVlcyhvYmplY3QpO1xuICogLy8gPT4gWzEsIDJdXG4gKlxuICogdmFsdWVzKG90aGVyKTtcbiAqIC8vID0+IFszLCA0XVxuICpcbiAqIG9iamVjdC5hID0gMjtcbiAqIHZhbHVlcyhvYmplY3QpO1xuICogLy8gPT4gWzEsIDJdXG4gKlxuICogLy8gTW9kaWZ5IHRoZSByZXN1bHQgY2FjaGUuXG4gKiB2YWx1ZXMuY2FjaGUuc2V0KG9iamVjdCwgWydhJywgJ2InXSk7XG4gKiB2YWx1ZXMob2JqZWN0KTtcbiAqIC8vID0+IFsnYScsICdiJ11cbiAqXG4gKiAvLyBSZXBsYWNlIGBfLm1lbW9pemUuQ2FjaGVgLlxuICogXy5tZW1vaXplLkNhY2hlID0gV2Vha01hcDtcbiAqL1xuZnVuY3Rpb24gbWVtb2l6ZShmdW5jLCByZXNvbHZlcikge1xuICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJyB8fCAocmVzb2x2ZXIgIT0gbnVsbCAmJiB0eXBlb2YgcmVzb2x2ZXIgIT0gJ2Z1bmN0aW9uJykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gIH1cbiAgdmFyIG1lbW9pemVkID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgIGtleSA9IHJlc29sdmVyID8gcmVzb2x2ZXIuYXBwbHkodGhpcywgYXJncykgOiBhcmdzWzBdLFxuICAgICAgICBjYWNoZSA9IG1lbW9pemVkLmNhY2hlO1xuXG4gICAgaWYgKGNhY2hlLmhhcyhrZXkpKSB7XG4gICAgICByZXR1cm4gY2FjaGUuZ2V0KGtleSk7XG4gICAgfVxuICAgIHZhciByZXN1bHQgPSBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIG1lbW9pemVkLmNhY2hlID0gY2FjaGUuc2V0KGtleSwgcmVzdWx0KSB8fCBjYWNoZTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuICBtZW1vaXplZC5jYWNoZSA9IG5ldyAobWVtb2l6ZS5DYWNoZSB8fCBNYXBDYWNoZSk7XG4gIHJldHVybiBtZW1vaXplZDtcbn1cblxuLy8gRXhwb3NlIGBNYXBDYWNoZWAuXG5tZW1vaXplLkNhY2hlID0gTWFwQ2FjaGU7XG5cbm1vZHVsZS5leHBvcnRzID0gbWVtb2l6ZTtcbiIsICJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXSc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBTeW1ib2xgIHByaW1pdGl2ZSBvciBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzeW1ib2wsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1N5bWJvbChTeW1ib2wuaXRlcmF0b3IpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNTeW1ib2woJ2FiYycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTeW1ib2wodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnc3ltYm9sJyB8fFxuICAgIChpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IHN5bWJvbFRhZyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNTeW1ib2w7XG4iLCAidmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc1N5bWJvbCA9IHJlcXVpcmUoJy4vaXNTeW1ib2wnKTtcblxuLyoqIFVzZWQgdG8gbWF0Y2ggcHJvcGVydHkgbmFtZXMgd2l0aGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlSXNEZWVwUHJvcCA9IC9cXC58XFxbKD86W15bXFxdXSp8KFtcIiddKSg/Oig/IVxcMSlbXlxcXFxdfFxcXFwuKSo/XFwxKVxcXS8sXG4gICAgcmVJc1BsYWluUHJvcCA9IC9eXFx3KiQvO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcHJvcGVydHkgbmFtZSBhbmQgbm90IGEgcHJvcGVydHkgcGF0aC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeSBrZXlzIG9uLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwcm9wZXJ0eSBuYW1lLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzS2V5KHZhbHVlLCBvYmplY3QpIHtcbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICBpZiAodHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nIHx8XG4gICAgICB2YWx1ZSA9PSBudWxsIHx8IGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiByZUlzUGxhaW5Qcm9wLnRlc3QodmFsdWUpIHx8ICFyZUlzRGVlcFByb3AudGVzdCh2YWx1ZSkgfHxcbiAgICAob2JqZWN0ICE9IG51bGwgJiYgdmFsdWUgaW4gT2JqZWN0KG9iamVjdCkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzS2V5O1xuIiwgInZhciBtZW1vaXplID0gcmVxdWlyZSgnLi9tZW1vaXplJyk7XG5cbi8qKiBVc2VkIGFzIHRoZSBtYXhpbXVtIG1lbW9pemUgY2FjaGUgc2l6ZS4gKi9cbnZhciBNQVhfTUVNT0laRV9TSVpFID0gNTAwO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5tZW1vaXplYCB3aGljaCBjbGVhcnMgdGhlIG1lbW9pemVkIGZ1bmN0aW9uJ3NcbiAqIGNhY2hlIHdoZW4gaXQgZXhjZWVkcyBgTUFYX01FTU9JWkVfU0laRWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGhhdmUgaXRzIG91dHB1dCBtZW1vaXplZC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IG1lbW9pemVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBtZW1vaXplQ2FwcGVkKGZ1bmMpIHtcbiAgdmFyIHJlc3VsdCA9IG1lbW9pemUoZnVuYywgZnVuY3Rpb24oa2V5KSB7XG4gICAgaWYgKGNhY2hlLnNpemUgPT09IE1BWF9NRU1PSVpFX1NJWkUpIHtcbiAgICAgIGNhY2hlLmNsZWFyKCk7XG4gICAgfVxuICAgIHJldHVybiBrZXk7XG4gIH0pO1xuXG4gIHZhciBjYWNoZSA9IHJlc3VsdC5jYWNoZTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtZW1vaXplQ2FwcGVkO1xuIiwgInZhciBtZW1vaXplQ2FwcGVkID0gcmVxdWlyZSgnLi9fbWVtb2l6ZUNhcHBlZCcpO1xuXG4vKiogVXNlZCB0byBtYXRjaCBwcm9wZXJ0eSBuYW1lcyB3aXRoaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgcmVQcm9wTmFtZSA9IC9bXi5bXFxdXSt8XFxbKD86KC0/XFxkKyg/OlxcLlxcZCspPyl8KFtcIiddKSgoPzooPyFcXDIpW15cXFxcXXxcXFxcLikqPylcXDIpXFxdfCg/PSg/OlxcLnxcXFtcXF0pKD86XFwufFxcW1xcXXwkKSkvZztcblxuLyoqIFVzZWQgdG8gbWF0Y2ggYmFja3NsYXNoZXMgaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgcmVFc2NhcGVDaGFyID0gL1xcXFwoXFxcXCk/L2c7XG5cbi8qKlxuICogQ29udmVydHMgYHN0cmluZ2AgdG8gYSBwcm9wZXJ0eSBwYXRoIGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAqL1xudmFyIHN0cmluZ1RvUGF0aCA9IG1lbW9pemVDYXBwZWQoZnVuY3Rpb24oc3RyaW5nKSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgaWYgKHN0cmluZy5jaGFyQ29kZUF0KDApID09PSA0NiAvKiAuICovKSB7XG4gICAgcmVzdWx0LnB1c2goJycpO1xuICB9XG4gIHN0cmluZy5yZXBsYWNlKHJlUHJvcE5hbWUsIGZ1bmN0aW9uKG1hdGNoLCBudW1iZXIsIHF1b3RlLCBzdWJTdHJpbmcpIHtcbiAgICByZXN1bHQucHVzaChxdW90ZSA/IHN1YlN0cmluZy5yZXBsYWNlKHJlRXNjYXBlQ2hhciwgJyQxJykgOiAobnVtYmVyIHx8IG1hdGNoKSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gc3RyaW5nVG9QYXRoO1xuIiwgIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLm1hcGAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlXG4gKiBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgbWFwcGVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBhcnJheU1hcChhcnJheSwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlNYXA7XG4iLCAidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpLFxuICAgIGFycmF5TWFwID0gcmVxdWlyZSgnLi9fYXJyYXlNYXAnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNTeW1ib2wgPSByZXF1aXJlKCcuL2lzU3ltYm9sJyk7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIElORklOSVRZID0gMSAvIDA7XG5cbi8qKiBVc2VkIHRvIGNvbnZlcnQgc3ltYm9scyB0byBwcmltaXRpdmVzIGFuZCBzdHJpbmdzLiAqL1xudmFyIHN5bWJvbFByb3RvID0gU3ltYm9sID8gU3ltYm9sLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcbiAgICBzeW1ib2xUb1N0cmluZyA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udG9TdHJpbmcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udG9TdHJpbmdgIHdoaWNoIGRvZXNuJ3QgY29udmVydCBudWxsaXNoXG4gKiB2YWx1ZXMgdG8gZW1wdHkgc3RyaW5ncy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvY2Vzcy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gYmFzZVRvU3RyaW5nKHZhbHVlKSB7XG4gIC8vIEV4aXQgZWFybHkgZm9yIHN0cmluZ3MgdG8gYXZvaWQgYSBwZXJmb3JtYW5jZSBoaXQgaW4gc29tZSBlbnZpcm9ubWVudHMuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgLy8gUmVjdXJzaXZlbHkgY29udmVydCB2YWx1ZXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICByZXR1cm4gYXJyYXlNYXAodmFsdWUsIGJhc2VUb1N0cmluZykgKyAnJztcbiAgfVxuICBpZiAoaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIHN5bWJvbFRvU3RyaW5nID8gc3ltYm9sVG9TdHJpbmcuY2FsbCh2YWx1ZSkgOiAnJztcbiAgfVxuICB2YXIgcmVzdWx0ID0gKHZhbHVlICsgJycpO1xuICByZXR1cm4gKHJlc3VsdCA9PSAnMCcgJiYgKDEgLyB2YWx1ZSkgPT0gLUlORklOSVRZKSA/ICctMCcgOiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVRvU3RyaW5nO1xuIiwgInZhciBiYXNlVG9TdHJpbmcgPSByZXF1aXJlKCcuL19iYXNlVG9TdHJpbmcnKTtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nLiBBbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQgZm9yIGBudWxsYFxuICogYW5kIGB1bmRlZmluZWRgIHZhbHVlcy4gVGhlIHNpZ24gb2YgYC0wYCBpcyBwcmVzZXJ2ZWQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvU3RyaW5nKG51bGwpO1xuICogLy8gPT4gJydcbiAqXG4gKiBfLnRvU3RyaW5nKC0wKTtcbiAqIC8vID0+ICctMCdcbiAqXG4gKiBfLnRvU3RyaW5nKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiAnMSwyLDMnXG4gKi9cbmZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PSBudWxsID8gJycgOiBiYXNlVG9TdHJpbmcodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvU3RyaW5nO1xuIiwgInZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNLZXkgPSByZXF1aXJlKCcuL19pc0tleScpLFxuICAgIHN0cmluZ1RvUGF0aCA9IHJlcXVpcmUoJy4vX3N0cmluZ1RvUGF0aCcpLFxuICAgIHRvU3RyaW5nID0gcmVxdWlyZSgnLi90b1N0cmluZycpO1xuXG4vKipcbiAqIENhc3RzIGB2YWx1ZWAgdG8gYSBwYXRoIGFycmF5IGlmIGl0J3Mgbm90IG9uZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5IGtleXMgb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNhc3QgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gY2FzdFBhdGgodmFsdWUsIG9iamVjdCkge1xuICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIGlzS2V5KHZhbHVlLCBvYmplY3QpID8gW3ZhbHVlXSA6IHN0cmluZ1RvUGF0aCh0b1N0cmluZyh2YWx1ZSkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNhc3RQYXRoO1xuIiwgInZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4vaXNTeW1ib2wnKTtcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgSU5GSU5JVFkgPSAxIC8gMDtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIGtleSBpZiBpdCdzIG5vdCBhIHN0cmluZyBvciBzeW1ib2wuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7c3RyaW5nfHN5bWJvbH0gUmV0dXJucyB0aGUga2V5LlxuICovXG5mdW5jdGlvbiB0b0tleSh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnIHx8IGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICB2YXIgcmVzdWx0ID0gKHZhbHVlICsgJycpO1xuICByZXR1cm4gKHJlc3VsdCA9PSAnMCcgJiYgKDEgLyB2YWx1ZSkgPT0gLUlORklOSVRZKSA/ICctMCcgOiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9LZXk7XG4iLCAidmFyIGNhc3RQYXRoID0gcmVxdWlyZSgnLi9fY2FzdFBhdGgnKSxcbiAgICB0b0tleSA9IHJlcXVpcmUoJy4vX3RvS2V5Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZ2V0YCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZmF1bHQgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc29sdmVkIHZhbHVlLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0KG9iamVjdCwgcGF0aCkge1xuICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcblxuICB2YXIgaW5kZXggPSAwLFxuICAgICAgbGVuZ3RoID0gcGF0aC5sZW5ndGg7XG5cbiAgd2hpbGUgKG9iamVjdCAhPSBudWxsICYmIGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgb2JqZWN0ID0gb2JqZWN0W3RvS2V5KHBhdGhbaW5kZXgrK10pXTtcbiAgfVxuICByZXR1cm4gKGluZGV4ICYmIGluZGV4ID09IGxlbmd0aCkgPyBvYmplY3QgOiB1bmRlZmluZWQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUdldDtcbiIsICJ2YXIgYmFzZUdldCA9IHJlcXVpcmUoJy4vX2Jhc2VHZXQnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSB2YWx1ZSBhdCBgcGF0aGAgb2YgYG9iamVjdGAuIElmIHRoZSByZXNvbHZlZCB2YWx1ZSBpc1xuICogYHVuZGVmaW5lZGAsIHRoZSBgZGVmYXVsdFZhbHVlYCBpcyByZXR1cm5lZCBpbiBpdHMgcGxhY2UuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjcuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEBwYXJhbSB7Kn0gW2RlZmF1bHRWYWx1ZV0gVGhlIHZhbHVlIHJldHVybmVkIGZvciBgdW5kZWZpbmVkYCByZXNvbHZlZCB2YWx1ZXMuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzb2x2ZWQgdmFsdWUuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogW3sgJ2InOiB7ICdjJzogMyB9IH1dIH07XG4gKlxuICogXy5nZXQob2JqZWN0LCAnYVswXS5iLmMnKTtcbiAqIC8vID0+IDNcbiAqXG4gKiBfLmdldChvYmplY3QsIFsnYScsICcwJywgJ2InLCAnYyddKTtcbiAqIC8vID0+IDNcbiAqXG4gKiBfLmdldChvYmplY3QsICdhLmIuYycsICdkZWZhdWx0Jyk7XG4gKiAvLyA9PiAnZGVmYXVsdCdcbiAqL1xuZnVuY3Rpb24gZ2V0KG9iamVjdCwgcGF0aCwgZGVmYXVsdFZhbHVlKSB7XG4gIHZhciByZXN1bHQgPSBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGJhc2VHZXQob2JqZWN0LCBwYXRoKTtcbiAgcmV0dXJuIHJlc3VsdCA9PT0gdW5kZWZpbmVkID8gZGVmYXVsdFZhbHVlIDogcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldDtcbiIsICIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5mb3JFYWNoYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlFYWNoKGFycmF5LCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKGl0ZXJhdGVlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSA9PT0gZmFsc2UpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlFYWNoO1xuIiwgInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKTtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIHZhciBmdW5jID0gZ2V0TmF0aXZlKE9iamVjdCwgJ2RlZmluZVByb3BlcnR5Jyk7XG4gICAgZnVuYyh7fSwgJycsIHt9KTtcbiAgICByZXR1cm4gZnVuYztcbiAgfSBjYXRjaCAoZSkge31cbn0oKSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lUHJvcGVydHk7XG4iLCAidmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fZGVmaW5lUHJvcGVydHknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgYXNzaWduVmFsdWVgIGFuZCBgYXNzaWduTWVyZ2VWYWx1ZWAgd2l0aG91dFxuICogdmFsdWUgY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBhc3NpZ24uXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBhc3NpZ24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgaWYgKGtleSA9PSAnX19wcm90b19fJyAmJiBkZWZpbmVQcm9wZXJ0eSkge1xuICAgIGRlZmluZVByb3BlcnR5KG9iamVjdCwga2V5LCB7XG4gICAgICAnY29uZmlndXJhYmxlJzogdHJ1ZSxcbiAgICAgICdlbnVtZXJhYmxlJzogdHJ1ZSxcbiAgICAgICd2YWx1ZSc6IHZhbHVlLFxuICAgICAgJ3dyaXRhYmxlJzogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlQXNzaWduVmFsdWU7XG4iLCAidmFyIGJhc2VBc3NpZ25WYWx1ZSA9IHJlcXVpcmUoJy4vX2Jhc2VBc3NpZ25WYWx1ZScpLFxuICAgIGVxID0gcmVxdWlyZSgnLi9lcScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEFzc2lnbnMgYHZhbHVlYCB0byBga2V5YCBvZiBgb2JqZWN0YCBpZiB0aGUgZXhpc3RpbmcgdmFsdWUgaXMgbm90IGVxdWl2YWxlbnRcbiAqIHVzaW5nIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gYXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHZhciBvYmpWYWx1ZSA9IG9iamVjdFtrZXldO1xuICBpZiAoIShoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSAmJiBlcShvYmpWYWx1ZSwgdmFsdWUpKSB8fFxuICAgICAgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkpIHtcbiAgICBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFzc2lnblZhbHVlO1xuIiwgInZhciBhc3NpZ25WYWx1ZSA9IHJlcXVpcmUoJy4vX2Fzc2lnblZhbHVlJyksXG4gICAgYmFzZUFzc2lnblZhbHVlID0gcmVxdWlyZSgnLi9fYmFzZUFzc2lnblZhbHVlJyk7XG5cbi8qKlxuICogQ29waWVzIHByb3BlcnRpZXMgb2YgYHNvdXJjZWAgdG8gYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgZnJvbS5cbiAqIEBwYXJhbSB7QXJyYXl9IHByb3BzIFRoZSBwcm9wZXJ0eSBpZGVudGlmaWVycyB0byBjb3B5LlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3Q9e31dIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIHRvLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29waWVkIHZhbHVlcy5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGNvcHlPYmplY3Qoc291cmNlLCBwcm9wcywgb2JqZWN0LCBjdXN0b21pemVyKSB7XG4gIHZhciBpc05ldyA9ICFvYmplY3Q7XG4gIG9iamVjdCB8fCAob2JqZWN0ID0ge30pO1xuXG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gcHJvcHMubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGtleSA9IHByb3BzW2luZGV4XTtcblxuICAgIHZhciBuZXdWYWx1ZSA9IGN1c3RvbWl6ZXJcbiAgICAgID8gY3VzdG9taXplcihvYmplY3Rba2V5XSwgc291cmNlW2tleV0sIGtleSwgb2JqZWN0LCBzb3VyY2UpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGlmIChuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBuZXdWYWx1ZSA9IHNvdXJjZVtrZXldO1xuICAgIH1cbiAgICBpZiAoaXNOZXcpIHtcbiAgICAgIGJhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb2JqZWN0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcHlPYmplY3Q7XG4iLCAidmFyIGNvcHlPYmplY3QgPSByZXF1aXJlKCcuL19jb3B5T2JqZWN0JyksXG4gICAga2V5cyA9IHJlcXVpcmUoJy4va2V5cycpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmFzc2lnbmAgd2l0aG91dCBzdXBwb3J0IGZvciBtdWx0aXBsZSBzb3VyY2VzXG4gKiBvciBgY3VzdG9taXplcmAgZnVuY3Rpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gYmFzZUFzc2lnbihvYmplY3QsIHNvdXJjZSkge1xuICByZXR1cm4gb2JqZWN0ICYmIGNvcHlPYmplY3Qoc291cmNlLCBrZXlzKHNvdXJjZSksIG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUFzc2lnbjtcbiIsICIvKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgbGlrZVxuICogW2BPYmplY3Qua2V5c2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5rZXlzKVxuICogZXhjZXB0IHRoYXQgaXQgaW5jbHVkZXMgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydGllcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gbmF0aXZlS2V5c0luKG9iamVjdCkge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGlmIChvYmplY3QgIT0gbnVsbCkge1xuICAgIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBuYXRpdmVLZXlzSW47XG4iLCAidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIGlzUHJvdG90eXBlID0gcmVxdWlyZSgnLi9faXNQcm90b3R5cGUnKSxcbiAgICBuYXRpdmVLZXlzSW4gPSByZXF1aXJlKCcuL19uYXRpdmVLZXlzSW4nKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5rZXlzSW5gIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYmFzZUtleXNJbihvYmplY3QpIHtcbiAgaWYgKCFpc09iamVjdChvYmplY3QpKSB7XG4gICAgcmV0dXJuIG5hdGl2ZUtleXNJbihvYmplY3QpO1xuICB9XG4gIHZhciBpc1Byb3RvID0gaXNQcm90b3R5cGUob2JqZWN0KSxcbiAgICAgIHJlc3VsdCA9IFtdO1xuXG4gIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICBpZiAoIShrZXkgPT0gJ2NvbnN0cnVjdG9yJyAmJiAoaXNQcm90byB8fCAhaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkpKSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlS2V5c0luO1xuIiwgInZhciBhcnJheUxpa2VLZXlzID0gcmVxdWlyZSgnLi9fYXJyYXlMaWtlS2V5cycpLFxuICAgIGJhc2VLZXlzSW4gPSByZXF1aXJlKCcuL19iYXNlS2V5c0luJyksXG4gICAgaXNBcnJheUxpa2UgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiBgb2JqZWN0YC5cbiAqXG4gKiAqKk5vdGU6KiogTm9uLW9iamVjdCB2YWx1ZXMgYXJlIGNvZXJjZWQgdG8gb2JqZWN0cy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiAgIHRoaXMuYiA9IDI7XG4gKiB9XG4gKlxuICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAqXG4gKiBfLmtleXNJbihuZXcgRm9vKTtcbiAqIC8vID0+IFsnYScsICdiJywgJ2MnXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICovXG5mdW5jdGlvbiBrZXlzSW4ob2JqZWN0KSB7XG4gIHJldHVybiBpc0FycmF5TGlrZShvYmplY3QpID8gYXJyYXlMaWtlS2V5cyhvYmplY3QsIHRydWUpIDogYmFzZUtleXNJbihvYmplY3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGtleXNJbjtcbiIsICJ2YXIgY29weU9iamVjdCA9IHJlcXVpcmUoJy4vX2NvcHlPYmplY3QnKSxcbiAgICBrZXlzSW4gPSByZXF1aXJlKCcuL2tleXNJbicpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmFzc2lnbkluYCB3aXRob3V0IHN1cHBvcnQgZm9yIG11bHRpcGxlIHNvdXJjZXNcbiAqIG9yIGBjdXN0b21pemVyYCBmdW5jdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBiYXNlQXNzaWduSW4ob2JqZWN0LCBzb3VyY2UpIHtcbiAgcmV0dXJuIG9iamVjdCAmJiBjb3B5T2JqZWN0KHNvdXJjZSwga2V5c0luKHNvdXJjZSksIG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUFzc2lnbkluO1xuIiwgInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIEJ1ZmZlciA9IG1vZHVsZUV4cG9ydHMgPyByb290LkJ1ZmZlciA6IHVuZGVmaW5lZCxcbiAgICBhbGxvY1Vuc2FmZSA9IEJ1ZmZlciA/IEJ1ZmZlci5hbGxvY1Vuc2FmZSA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgIGBidWZmZXJgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0J1ZmZlcn0gYnVmZmVyIFRoZSBidWZmZXIgdG8gY2xvbmUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0RlZXBdIFNwZWNpZnkgYSBkZWVwIGNsb25lLlxuICogQHJldHVybnMge0J1ZmZlcn0gUmV0dXJucyB0aGUgY2xvbmVkIGJ1ZmZlci5cbiAqL1xuZnVuY3Rpb24gY2xvbmVCdWZmZXIoYnVmZmVyLCBpc0RlZXApIHtcbiAgaWYgKGlzRGVlcCkge1xuICAgIHJldHVybiBidWZmZXIuc2xpY2UoKTtcbiAgfVxuICB2YXIgbGVuZ3RoID0gYnVmZmVyLmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IGFsbG9jVW5zYWZlID8gYWxsb2NVbnNhZmUobGVuZ3RoKSA6IG5ldyBidWZmZXIuY29uc3RydWN0b3IobGVuZ3RoKTtcblxuICBidWZmZXIuY29weShyZXN1bHQpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsb25lQnVmZmVyO1xuIiwgIi8qKlxuICogQ29waWVzIHRoZSB2YWx1ZXMgb2YgYHNvdXJjZWAgdG8gYGFycmF5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gc291cmNlIFRoZSBhcnJheSB0byBjb3B5IHZhbHVlcyBmcm9tLlxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5PVtdXSBUaGUgYXJyYXkgdG8gY29weSB2YWx1ZXMgdG8uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gY29weUFycmF5KHNvdXJjZSwgYXJyYXkpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBzb3VyY2UubGVuZ3RoO1xuXG4gIGFycmF5IHx8IChhcnJheSA9IEFycmF5KGxlbmd0aCkpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGFycmF5W2luZGV4XSA9IHNvdXJjZVtpbmRleF07XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcHlBcnJheTtcbiIsICJ2YXIgY29weU9iamVjdCA9IHJlcXVpcmUoJy4vX2NvcHlPYmplY3QnKSxcbiAgICBnZXRTeW1ib2xzID0gcmVxdWlyZSgnLi9fZ2V0U3ltYm9scycpO1xuXG4vKipcbiAqIENvcGllcyBvd24gc3ltYm9scyBvZiBgc291cmNlYCB0byBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IHRvIGNvcHkgc3ltYm9scyBmcm9tLlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3Q9e31dIFRoZSBvYmplY3QgdG8gY29weSBzeW1ib2xzIHRvLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gY29weVN5bWJvbHMoc291cmNlLCBvYmplY3QpIHtcbiAgcmV0dXJuIGNvcHlPYmplY3Qoc291cmNlLCBnZXRTeW1ib2xzKHNvdXJjZSksIG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29weVN5bWJvbHM7XG4iLCAidmFyIG92ZXJBcmcgPSByZXF1aXJlKCcuL19vdmVyQXJnJyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIGdldFByb3RvdHlwZSA9IG92ZXJBcmcoT2JqZWN0LmdldFByb3RvdHlwZU9mLCBPYmplY3QpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFByb3RvdHlwZTtcbiIsICJ2YXIgYXJyYXlQdXNoID0gcmVxdWlyZSgnLi9fYXJyYXlQdXNoJyksXG4gICAgZ2V0UHJvdG90eXBlID0gcmVxdWlyZSgnLi9fZ2V0UHJvdG90eXBlJyksXG4gICAgZ2V0U3ltYm9scyA9IHJlcXVpcmUoJy4vX2dldFN5bWJvbHMnKSxcbiAgICBzdHViQXJyYXkgPSByZXF1aXJlKCcuL3N0dWJBcnJheScpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlR2V0U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHN5bWJvbHMuXG4gKi9cbnZhciBnZXRTeW1ib2xzSW4gPSAhbmF0aXZlR2V0U3ltYm9scyA/IHN0dWJBcnJheSA6IGZ1bmN0aW9uKG9iamVjdCkge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHdoaWxlIChvYmplY3QpIHtcbiAgICBhcnJheVB1c2gocmVzdWx0LCBnZXRTeW1ib2xzKG9iamVjdCkpO1xuICAgIG9iamVjdCA9IGdldFByb3RvdHlwZShvYmplY3QpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFN5bWJvbHNJbjtcbiIsICJ2YXIgY29weU9iamVjdCA9IHJlcXVpcmUoJy4vX2NvcHlPYmplY3QnKSxcbiAgICBnZXRTeW1ib2xzSW4gPSByZXF1aXJlKCcuL19nZXRTeW1ib2xzSW4nKTtcblxuLyoqXG4gKiBDb3BpZXMgb3duIGFuZCBpbmhlcml0ZWQgc3ltYm9scyBvZiBgc291cmNlYCB0byBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IHRvIGNvcHkgc3ltYm9scyBmcm9tLlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3Q9e31dIFRoZSBvYmplY3QgdG8gY29weSBzeW1ib2xzIHRvLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gY29weVN5bWJvbHNJbihzb3VyY2UsIG9iamVjdCkge1xuICByZXR1cm4gY29weU9iamVjdChzb3VyY2UsIGdldFN5bWJvbHNJbihzb3VyY2UpLCBvYmplY3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcHlTeW1ib2xzSW47XG4iLCAidmFyIGJhc2VHZXRBbGxLZXlzID0gcmVxdWlyZSgnLi9fYmFzZUdldEFsbEtleXMnKSxcbiAgICBnZXRTeW1ib2xzSW4gPSByZXF1aXJlKCcuL19nZXRTeW1ib2xzSW4nKSxcbiAgICBrZXlzSW4gPSByZXF1aXJlKCcuL2tleXNJbicpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2Ygb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBhbmRcbiAqIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMgYW5kIHN5bWJvbHMuXG4gKi9cbmZ1bmN0aW9uIGdldEFsbEtleXNJbihvYmplY3QpIHtcbiAgcmV0dXJuIGJhc2VHZXRBbGxLZXlzKG9iamVjdCwga2V5c0luLCBnZXRTeW1ib2xzSW4pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEFsbEtleXNJbjtcbiIsICIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEluaXRpYWxpemVzIGFuIGFycmF5IGNsb25lLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gY2xvbmUuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGluaXRpYWxpemVkIGNsb25lLlxuICovXG5mdW5jdGlvbiBpbml0Q2xvbmVBcnJheShhcnJheSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0gbmV3IGFycmF5LmNvbnN0cnVjdG9yKGxlbmd0aCk7XG5cbiAgLy8gQWRkIHByb3BlcnRpZXMgYXNzaWduZWQgYnkgYFJlZ0V4cCNleGVjYC5cbiAgaWYgKGxlbmd0aCAmJiB0eXBlb2YgYXJyYXlbMF0gPT0gJ3N0cmluZycgJiYgaGFzT3duUHJvcGVydHkuY2FsbChhcnJheSwgJ2luZGV4JykpIHtcbiAgICByZXN1bHQuaW5kZXggPSBhcnJheS5pbmRleDtcbiAgICByZXN1bHQuaW5wdXQgPSBhcnJheS5pbnB1dDtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGluaXRDbG9uZUFycmF5O1xuIiwgInZhciBVaW50OEFycmF5ID0gcmVxdWlyZSgnLi9fVWludDhBcnJheScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgYXJyYXlCdWZmZXJgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5QnVmZmVyfSBhcnJheUJ1ZmZlciBUaGUgYXJyYXkgYnVmZmVyIHRvIGNsb25lLlxuICogQHJldHVybnMge0FycmF5QnVmZmVyfSBSZXR1cm5zIHRoZSBjbG9uZWQgYXJyYXkgYnVmZmVyLlxuICovXG5mdW5jdGlvbiBjbG9uZUFycmF5QnVmZmVyKGFycmF5QnVmZmVyKSB7XG4gIHZhciByZXN1bHQgPSBuZXcgYXJyYXlCdWZmZXIuY29uc3RydWN0b3IoYXJyYXlCdWZmZXIuYnl0ZUxlbmd0aCk7XG4gIG5ldyBVaW50OEFycmF5KHJlc3VsdCkuc2V0KG5ldyBVaW50OEFycmF5KGFycmF5QnVmZmVyKSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVBcnJheUJ1ZmZlcjtcbiIsICJ2YXIgY2xvbmVBcnJheUJ1ZmZlciA9IHJlcXVpcmUoJy4vX2Nsb25lQXJyYXlCdWZmZXInKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYGRhdGFWaWV3YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IGRhdGFWaWV3IFRoZSBkYXRhIHZpZXcgdG8gY2xvbmUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0RlZXBdIFNwZWNpZnkgYSBkZWVwIGNsb25lLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2xvbmVkIGRhdGEgdmlldy5cbiAqL1xuZnVuY3Rpb24gY2xvbmVEYXRhVmlldyhkYXRhVmlldywgaXNEZWVwKSB7XG4gIHZhciBidWZmZXIgPSBpc0RlZXAgPyBjbG9uZUFycmF5QnVmZmVyKGRhdGFWaWV3LmJ1ZmZlcikgOiBkYXRhVmlldy5idWZmZXI7XG4gIHJldHVybiBuZXcgZGF0YVZpZXcuY29uc3RydWN0b3IoYnVmZmVyLCBkYXRhVmlldy5ieXRlT2Zmc2V0LCBkYXRhVmlldy5ieXRlTGVuZ3RoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZURhdGFWaWV3O1xuIiwgIi8qKiBVc2VkIHRvIG1hdGNoIGBSZWdFeHBgIGZsYWdzIGZyb20gdGhlaXIgY29lcmNlZCBzdHJpbmcgdmFsdWVzLiAqL1xudmFyIHJlRmxhZ3MgPSAvXFx3KiQvO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgcmVnZXhwYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHJlZ2V4cCBUaGUgcmVnZXhwIHRvIGNsb25lLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2xvbmVkIHJlZ2V4cC5cbiAqL1xuZnVuY3Rpb24gY2xvbmVSZWdFeHAocmVnZXhwKSB7XG4gIHZhciByZXN1bHQgPSBuZXcgcmVnZXhwLmNvbnN0cnVjdG9yKHJlZ2V4cC5zb3VyY2UsIHJlRmxhZ3MuZXhlYyhyZWdleHApKTtcbiAgcmVzdWx0Lmxhc3RJbmRleCA9IHJlZ2V4cC5sYXN0SW5kZXg7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVSZWdFeHA7XG4iLCAidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpO1xuXG4vKiogVXNlZCB0byBjb252ZXJ0IHN5bWJvbHMgdG8gcHJpbWl0aXZlcyBhbmQgc3RyaW5ncy4gKi9cbnZhciBzeW1ib2xQcm90byA9IFN5bWJvbCA/IFN5bWJvbC5wcm90b3R5cGUgOiB1bmRlZmluZWQsXG4gICAgc3ltYm9sVmFsdWVPZiA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udmFsdWVPZiA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhlIGBzeW1ib2xgIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHN5bWJvbCBUaGUgc3ltYm9sIG9iamVjdCB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCBzeW1ib2wgb2JqZWN0LlxuICovXG5mdW5jdGlvbiBjbG9uZVN5bWJvbChzeW1ib2wpIHtcbiAgcmV0dXJuIHN5bWJvbFZhbHVlT2YgPyBPYmplY3Qoc3ltYm9sVmFsdWVPZi5jYWxsKHN5bWJvbCkpIDoge307XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVTeW1ib2w7XG4iLCAidmFyIGNsb25lQXJyYXlCdWZmZXIgPSByZXF1aXJlKCcuL19jbG9uZUFycmF5QnVmZmVyJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIGB0eXBlZEFycmF5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHR5cGVkQXJyYXkgVGhlIHR5cGVkIGFycmF5IHRvIGNsb25lLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBTcGVjaWZ5IGEgZGVlcCBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCB0eXBlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gY2xvbmVUeXBlZEFycmF5KHR5cGVkQXJyYXksIGlzRGVlcCkge1xuICB2YXIgYnVmZmVyID0gaXNEZWVwID8gY2xvbmVBcnJheUJ1ZmZlcih0eXBlZEFycmF5LmJ1ZmZlcikgOiB0eXBlZEFycmF5LmJ1ZmZlcjtcbiAgcmV0dXJuIG5ldyB0eXBlZEFycmF5LmNvbnN0cnVjdG9yKGJ1ZmZlciwgdHlwZWRBcnJheS5ieXRlT2Zmc2V0LCB0eXBlZEFycmF5Lmxlbmd0aCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVUeXBlZEFycmF5O1xuIiwgInZhciBjbG9uZUFycmF5QnVmZmVyID0gcmVxdWlyZSgnLi9fY2xvbmVBcnJheUJ1ZmZlcicpLFxuICAgIGNsb25lRGF0YVZpZXcgPSByZXF1aXJlKCcuL19jbG9uZURhdGFWaWV3JyksXG4gICAgY2xvbmVSZWdFeHAgPSByZXF1aXJlKCcuL19jbG9uZVJlZ0V4cCcpLFxuICAgIGNsb25lU3ltYm9sID0gcmVxdWlyZSgnLi9fY2xvbmVTeW1ib2wnKSxcbiAgICBjbG9uZVR5cGVkQXJyYXkgPSByZXF1aXJlKCcuL19jbG9uZVR5cGVkQXJyYXknKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJyxcbiAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJyxcbiAgICBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XScsXG4gICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgIGZsb2F0NjRUYWcgPSAnW29iamVjdCBGbG9hdDY0QXJyYXldJyxcbiAgICBpbnQ4VGFnID0gJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgaW50MzJUYWcgPSAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgdWludDhUYWcgPSAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICB1aW50MTZUYWcgPSAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgIHVpbnQzMlRhZyA9ICdbb2JqZWN0IFVpbnQzMkFycmF5XSc7XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgYW4gb2JqZWN0IGNsb25lIGJhc2VkIG9uIGl0cyBgdG9TdHJpbmdUYWdgLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIGZ1bmN0aW9uIG9ubHkgc3VwcG9ydHMgY2xvbmluZyB2YWx1ZXMgd2l0aCB0YWdzIG9mXG4gKiBgQm9vbGVhbmAsIGBEYXRlYCwgYEVycm9yYCwgYE1hcGAsIGBOdW1iZXJgLCBgUmVnRXhwYCwgYFNldGAsIG9yIGBTdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY2xvbmUuXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFnIFRoZSBgdG9TdHJpbmdUYWdgIG9mIHRoZSBvYmplY3QgdG8gY2xvbmUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0RlZXBdIFNwZWNpZnkgYSBkZWVwIGNsb25lLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaW5pdGlhbGl6ZWQgY2xvbmUuXG4gKi9cbmZ1bmN0aW9uIGluaXRDbG9uZUJ5VGFnKG9iamVjdCwgdGFnLCBpc0RlZXApIHtcbiAgdmFyIEN0b3IgPSBvYmplY3QuY29uc3RydWN0b3I7XG4gIHN3aXRjaCAodGFnKSB7XG4gICAgY2FzZSBhcnJheUJ1ZmZlclRhZzpcbiAgICAgIHJldHVybiBjbG9uZUFycmF5QnVmZmVyKG9iamVjdCk7XG5cbiAgICBjYXNlIGJvb2xUYWc6XG4gICAgY2FzZSBkYXRlVGFnOlxuICAgICAgcmV0dXJuIG5ldyBDdG9yKCtvYmplY3QpO1xuXG4gICAgY2FzZSBkYXRhVmlld1RhZzpcbiAgICAgIHJldHVybiBjbG9uZURhdGFWaWV3KG9iamVjdCwgaXNEZWVwKTtcblxuICAgIGNhc2UgZmxvYXQzMlRhZzogY2FzZSBmbG9hdDY0VGFnOlxuICAgIGNhc2UgaW50OFRhZzogY2FzZSBpbnQxNlRhZzogY2FzZSBpbnQzMlRhZzpcbiAgICBjYXNlIHVpbnQ4VGFnOiBjYXNlIHVpbnQ4Q2xhbXBlZFRhZzogY2FzZSB1aW50MTZUYWc6IGNhc2UgdWludDMyVGFnOlxuICAgICAgcmV0dXJuIGNsb25lVHlwZWRBcnJheShvYmplY3QsIGlzRGVlcCk7XG5cbiAgICBjYXNlIG1hcFRhZzpcbiAgICAgIHJldHVybiBuZXcgQ3RvcjtcblxuICAgIGNhc2UgbnVtYmVyVGFnOlxuICAgIGNhc2Ugc3RyaW5nVGFnOlxuICAgICAgcmV0dXJuIG5ldyBDdG9yKG9iamVjdCk7XG5cbiAgICBjYXNlIHJlZ2V4cFRhZzpcbiAgICAgIHJldHVybiBjbG9uZVJlZ0V4cChvYmplY3QpO1xuXG4gICAgY2FzZSBzZXRUYWc6XG4gICAgICByZXR1cm4gbmV3IEN0b3I7XG5cbiAgICBjYXNlIHN5bWJvbFRhZzpcbiAgICAgIHJldHVybiBjbG9uZVN5bWJvbChvYmplY3QpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaW5pdENsb25lQnlUYWc7XG4iLCAidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RDcmVhdGUgPSBPYmplY3QuY3JlYXRlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmNyZWF0ZWAgd2l0aG91dCBzdXBwb3J0IGZvciBhc3NpZ25pbmdcbiAqIHByb3BlcnRpZXMgdG8gdGhlIGNyZWF0ZWQgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvdG8gVGhlIG9iamVjdCB0byBpbmhlcml0IGZyb20uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICovXG52YXIgYmFzZUNyZWF0ZSA9IChmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gb2JqZWN0KCkge31cbiAgcmV0dXJuIGZ1bmN0aW9uKHByb3RvKSB7XG4gICAgaWYgKCFpc09iamVjdChwcm90bykpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgaWYgKG9iamVjdENyZWF0ZSkge1xuICAgICAgcmV0dXJuIG9iamVjdENyZWF0ZShwcm90byk7XG4gICAgfVxuICAgIG9iamVjdC5wcm90b3R5cGUgPSBwcm90bztcbiAgICB2YXIgcmVzdWx0ID0gbmV3IG9iamVjdDtcbiAgICBvYmplY3QucHJvdG90eXBlID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59KCkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VDcmVhdGU7XG4iLCAidmFyIGJhc2VDcmVhdGUgPSByZXF1aXJlKCcuL19iYXNlQ3JlYXRlJyksXG4gICAgZ2V0UHJvdG90eXBlID0gcmVxdWlyZSgnLi9fZ2V0UHJvdG90eXBlJyksXG4gICAgaXNQcm90b3R5cGUgPSByZXF1aXJlKCcuL19pc1Byb3RvdHlwZScpO1xuXG4vKipcbiAqIEluaXRpYWxpemVzIGFuIG9iamVjdCBjbG9uZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNsb25lLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaW5pdGlhbGl6ZWQgY2xvbmUuXG4gKi9cbmZ1bmN0aW9uIGluaXRDbG9uZU9iamVjdChvYmplY3QpIHtcbiAgcmV0dXJuICh0eXBlb2Ygb2JqZWN0LmNvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgIWlzUHJvdG90eXBlKG9iamVjdCkpXG4gICAgPyBiYXNlQ3JlYXRlKGdldFByb3RvdHlwZShvYmplY3QpKVxuICAgIDoge307XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaW5pdENsb25lT2JqZWN0O1xuIiwgInZhciBnZXRUYWcgPSByZXF1aXJlKCcuL19nZXRUYWcnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbWFwVGFnID0gJ1tvYmplY3QgTWFwXSc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNNYXBgIHdpdGhvdXQgTm9kZS5qcyBvcHRpbWl6YXRpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbWFwLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc01hcCh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBnZXRUYWcodmFsdWUpID09IG1hcFRhZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNNYXA7XG4iLCAidmFyIGJhc2VJc01hcCA9IHJlcXVpcmUoJy4vX2Jhc2VJc01hcCcpLFxuICAgIGJhc2VVbmFyeSA9IHJlcXVpcmUoJy4vX2Jhc2VVbmFyeScpLFxuICAgIG5vZGVVdGlsID0gcmVxdWlyZSgnLi9fbm9kZVV0aWwnKTtcblxuLyogTm9kZS5qcyBoZWxwZXIgcmVmZXJlbmNlcy4gKi9cbnZhciBub2RlSXNNYXAgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc01hcDtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYE1hcGAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4zLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbWFwLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNNYXAobmV3IE1hcCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc01hcChuZXcgV2Vha01hcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNNYXAgPSBub2RlSXNNYXAgPyBiYXNlVW5hcnkobm9kZUlzTWFwKSA6IGJhc2VJc01hcDtcblxubW9kdWxlLmV4cG9ydHMgPSBpc01hcDtcbiIsICJ2YXIgZ2V0VGFnID0gcmVxdWlyZSgnLi9fZ2V0VGFnJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzU2V0YCB3aXRob3V0IE5vZGUuanMgb3B0aW1pemF0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHNldCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNTZXQodmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgZ2V0VGFnKHZhbHVlKSA9PSBzZXRUYWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzU2V0O1xuIiwgInZhciBiYXNlSXNTZXQgPSByZXF1aXJlKCcuL19iYXNlSXNTZXQnKSxcbiAgICBiYXNlVW5hcnkgPSByZXF1aXJlKCcuL19iYXNlVW5hcnknKSxcbiAgICBub2RlVXRpbCA9IHJlcXVpcmUoJy4vX25vZGVVdGlsJyk7XG5cbi8qIE5vZGUuanMgaGVscGVyIHJlZmVyZW5jZXMuICovXG52YXIgbm9kZUlzU2V0ID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNTZXQ7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBTZXRgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMy4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHNldCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzU2V0KG5ldyBTZXQpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNTZXQobmV3IFdlYWtTZXQpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzU2V0ID0gbm9kZUlzU2V0ID8gYmFzZVVuYXJ5KG5vZGVJc1NldCkgOiBiYXNlSXNTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNTZXQ7XG4iLCAidmFyIFN0YWNrID0gcmVxdWlyZSgnLi9fU3RhY2snKSxcbiAgICBhcnJheUVhY2ggPSByZXF1aXJlKCcuL19hcnJheUVhY2gnKSxcbiAgICBhc3NpZ25WYWx1ZSA9IHJlcXVpcmUoJy4vX2Fzc2lnblZhbHVlJyksXG4gICAgYmFzZUFzc2lnbiA9IHJlcXVpcmUoJy4vX2Jhc2VBc3NpZ24nKSxcbiAgICBiYXNlQXNzaWduSW4gPSByZXF1aXJlKCcuL19iYXNlQXNzaWduSW4nKSxcbiAgICBjbG9uZUJ1ZmZlciA9IHJlcXVpcmUoJy4vX2Nsb25lQnVmZmVyJyksXG4gICAgY29weUFycmF5ID0gcmVxdWlyZSgnLi9fY29weUFycmF5JyksXG4gICAgY29weVN5bWJvbHMgPSByZXF1aXJlKCcuL19jb3B5U3ltYm9scycpLFxuICAgIGNvcHlTeW1ib2xzSW4gPSByZXF1aXJlKCcuL19jb3B5U3ltYm9sc0luJyksXG4gICAgZ2V0QWxsS2V5cyA9IHJlcXVpcmUoJy4vX2dldEFsbEtleXMnKSxcbiAgICBnZXRBbGxLZXlzSW4gPSByZXF1aXJlKCcuL19nZXRBbGxLZXlzSW4nKSxcbiAgICBnZXRUYWcgPSByZXF1aXJlKCcuL19nZXRUYWcnKSxcbiAgICBpbml0Q2xvbmVBcnJheSA9IHJlcXVpcmUoJy4vX2luaXRDbG9uZUFycmF5JyksXG4gICAgaW5pdENsb25lQnlUYWcgPSByZXF1aXJlKCcuL19pbml0Q2xvbmVCeVRhZycpLFxuICAgIGluaXRDbG9uZU9iamVjdCA9IHJlcXVpcmUoJy4vX2luaXRDbG9uZU9iamVjdCcpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0J1ZmZlciA9IHJlcXVpcmUoJy4vaXNCdWZmZXInKSxcbiAgICBpc01hcCA9IHJlcXVpcmUoJy4vaXNNYXAnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKSxcbiAgICBpc1NldCA9IHJlcXVpcmUoJy4vaXNTZXQnKSxcbiAgICBrZXlzID0gcmVxdWlyZSgnLi9rZXlzJyksXG4gICAga2V5c0luID0gcmVxdWlyZSgnLi9rZXlzSW4nKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgY2xvbmluZy4gKi9cbnZhciBDTE9ORV9ERUVQX0ZMQUcgPSAxLFxuICAgIENMT05FX0ZMQVRfRkxBRyA9IDIsXG4gICAgQ0xPTkVfU1lNQk9MU19GTEFHID0gNDtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJyxcbiAgICBhcnJheVRhZyA9ICdbb2JqZWN0IEFycmF5XScsXG4gICAgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJyxcbiAgICBkYXRlVGFnID0gJ1tvYmplY3QgRGF0ZV0nLFxuICAgIGVycm9yVGFnID0gJ1tvYmplY3QgRXJyb3JdJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBnZW5UYWcgPSAnW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0nLFxuICAgIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG51bWJlclRhZyA9ICdbb2JqZWN0IE51bWJlcl0nLFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nLFxuICAgIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nLFxuICAgIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nLFxuICAgIHdlYWtNYXBUYWcgPSAnW29iamVjdCBXZWFrTWFwXSc7XG5cbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXG4gICAgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nLFxuICAgIGZsb2F0MzJUYWcgPSAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICBmbG9hdDY0VGFnID0gJ1tvYmplY3QgRmxvYXQ2NEFycmF5XScsXG4gICAgaW50OFRhZyA9ICdbb2JqZWN0IEludDhBcnJheV0nLFxuICAgIGludDE2VGFnID0gJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgIGludDMyVGFnID0gJ1tvYmplY3QgSW50MzJBcnJheV0nLFxuICAgIHVpbnQ4VGFnID0gJ1tvYmplY3QgVWludDhBcnJheV0nLFxuICAgIHVpbnQ4Q2xhbXBlZFRhZyA9ICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXG4gICAgdWludDE2VGFnID0gJ1tvYmplY3QgVWludDE2QXJyYXldJyxcbiAgICB1aW50MzJUYWcgPSAnW29iamVjdCBVaW50MzJBcnJheV0nO1xuXG4vKiogVXNlZCB0byBpZGVudGlmeSBgdG9TdHJpbmdUYWdgIHZhbHVlcyBzdXBwb3J0ZWQgYnkgYF8uY2xvbmVgLiAqL1xudmFyIGNsb25lYWJsZVRhZ3MgPSB7fTtcbmNsb25lYWJsZVRhZ3NbYXJnc1RhZ10gPSBjbG9uZWFibGVUYWdzW2FycmF5VGFnXSA9XG5jbG9uZWFibGVUYWdzW2FycmF5QnVmZmVyVGFnXSA9IGNsb25lYWJsZVRhZ3NbZGF0YVZpZXdUYWddID1cbmNsb25lYWJsZVRhZ3NbYm9vbFRhZ10gPSBjbG9uZWFibGVUYWdzW2RhdGVUYWddID1cbmNsb25lYWJsZVRhZ3NbZmxvYXQzMlRhZ10gPSBjbG9uZWFibGVUYWdzW2Zsb2F0NjRUYWddID1cbmNsb25lYWJsZVRhZ3NbaW50OFRhZ10gPSBjbG9uZWFibGVUYWdzW2ludDE2VGFnXSA9XG5jbG9uZWFibGVUYWdzW2ludDMyVGFnXSA9IGNsb25lYWJsZVRhZ3NbbWFwVGFnXSA9XG5jbG9uZWFibGVUYWdzW251bWJlclRhZ10gPSBjbG9uZWFibGVUYWdzW29iamVjdFRhZ10gPVxuY2xvbmVhYmxlVGFnc1tyZWdleHBUYWddID0gY2xvbmVhYmxlVGFnc1tzZXRUYWddID1cbmNsb25lYWJsZVRhZ3Nbc3RyaW5nVGFnXSA9IGNsb25lYWJsZVRhZ3Nbc3ltYm9sVGFnXSA9XG5jbG9uZWFibGVUYWdzW3VpbnQ4VGFnXSA9IGNsb25lYWJsZVRhZ3NbdWludDhDbGFtcGVkVGFnXSA9XG5jbG9uZWFibGVUYWdzW3VpbnQxNlRhZ10gPSBjbG9uZWFibGVUYWdzW3VpbnQzMlRhZ10gPSB0cnVlO1xuY2xvbmVhYmxlVGFnc1tlcnJvclRhZ10gPSBjbG9uZWFibGVUYWdzW2Z1bmNUYWddID1cbmNsb25lYWJsZVRhZ3Nbd2Vha01hcFRhZ10gPSBmYWxzZTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5jbG9uZWAgYW5kIGBfLmNsb25lRGVlcGAgd2hpY2ggdHJhY2tzXG4gKiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2xvbmUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuXG4gKiAgMSAtIERlZXAgY2xvbmVcbiAqICAyIC0gRmxhdHRlbiBpbmhlcml0ZWQgcHJvcGVydGllc1xuICogIDQgLSBDbG9uZSBzeW1ib2xzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjbG9uaW5nLlxuICogQHBhcmFtIHtzdHJpbmd9IFtrZXldIFRoZSBrZXkgb2YgYHZhbHVlYC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgcGFyZW50IG9iamVjdCBvZiBgdmFsdWVgLlxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzIGFuZCB0aGVpciBjbG9uZSBjb3VudGVycGFydHMuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgY2xvbmVkIHZhbHVlLlxuICovXG5mdW5jdGlvbiBiYXNlQ2xvbmUodmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGtleSwgb2JqZWN0LCBzdGFjaykge1xuICB2YXIgcmVzdWx0LFxuICAgICAgaXNEZWVwID0gYml0bWFzayAmIENMT05FX0RFRVBfRkxBRyxcbiAgICAgIGlzRmxhdCA9IGJpdG1hc2sgJiBDTE9ORV9GTEFUX0ZMQUcsXG4gICAgICBpc0Z1bGwgPSBiaXRtYXNrICYgQ0xPTkVfU1lNQk9MU19GTEFHO1xuXG4gIGlmIChjdXN0b21pemVyKSB7XG4gICAgcmVzdWx0ID0gb2JqZWN0ID8gY3VzdG9taXplcih2YWx1ZSwga2V5LCBvYmplY3QsIHN0YWNrKSA6IGN1c3RvbWl6ZXIodmFsdWUpO1xuICB9XG4gIGlmIChyZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgdmFyIGlzQXJyID0gaXNBcnJheSh2YWx1ZSk7XG4gIGlmIChpc0Fycikge1xuICAgIHJlc3VsdCA9IGluaXRDbG9uZUFycmF5KHZhbHVlKTtcbiAgICBpZiAoIWlzRGVlcCkge1xuICAgICAgcmV0dXJuIGNvcHlBcnJheSh2YWx1ZSwgcmVzdWx0KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIHRhZyA9IGdldFRhZyh2YWx1ZSksXG4gICAgICAgIGlzRnVuYyA9IHRhZyA9PSBmdW5jVGFnIHx8IHRhZyA9PSBnZW5UYWc7XG5cbiAgICBpZiAoaXNCdWZmZXIodmFsdWUpKSB7XG4gICAgICByZXR1cm4gY2xvbmVCdWZmZXIodmFsdWUsIGlzRGVlcCk7XG4gICAgfVxuICAgIGlmICh0YWcgPT0gb2JqZWN0VGFnIHx8IHRhZyA9PSBhcmdzVGFnIHx8IChpc0Z1bmMgJiYgIW9iamVjdCkpIHtcbiAgICAgIHJlc3VsdCA9IChpc0ZsYXQgfHwgaXNGdW5jKSA/IHt9IDogaW5pdENsb25lT2JqZWN0KHZhbHVlKTtcbiAgICAgIGlmICghaXNEZWVwKSB7XG4gICAgICAgIHJldHVybiBpc0ZsYXRcbiAgICAgICAgICA/IGNvcHlTeW1ib2xzSW4odmFsdWUsIGJhc2VBc3NpZ25JbihyZXN1bHQsIHZhbHVlKSlcbiAgICAgICAgICA6IGNvcHlTeW1ib2xzKHZhbHVlLCBiYXNlQXNzaWduKHJlc3VsdCwgdmFsdWUpKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFjbG9uZWFibGVUYWdzW3RhZ10pIHtcbiAgICAgICAgcmV0dXJuIG9iamVjdCA/IHZhbHVlIDoge307XG4gICAgICB9XG4gICAgICByZXN1bHQgPSBpbml0Q2xvbmVCeVRhZyh2YWx1ZSwgdGFnLCBpc0RlZXApO1xuICAgIH1cbiAgfVxuICAvLyBDaGVjayBmb3IgY2lyY3VsYXIgcmVmZXJlbmNlcyBhbmQgcmV0dXJuIGl0cyBjb3JyZXNwb25kaW5nIGNsb25lLlxuICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgU3RhY2spO1xuICB2YXIgc3RhY2tlZCA9IHN0YWNrLmdldCh2YWx1ZSk7XG4gIGlmIChzdGFja2VkKSB7XG4gICAgcmV0dXJuIHN0YWNrZWQ7XG4gIH1cbiAgc3RhY2suc2V0KHZhbHVlLCByZXN1bHQpO1xuXG4gIGlmIChpc1NldCh2YWx1ZSkpIHtcbiAgICB2YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uKHN1YlZhbHVlKSB7XG4gICAgICByZXN1bHQuYWRkKGJhc2VDbG9uZShzdWJWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3ViVmFsdWUsIHZhbHVlLCBzdGFjaykpO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKGlzTWFwKHZhbHVlKSkge1xuICAgIHZhbHVlLmZvckVhY2goZnVuY3Rpb24oc3ViVmFsdWUsIGtleSkge1xuICAgICAgcmVzdWx0LnNldChrZXksIGJhc2VDbG9uZShzdWJWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwga2V5LCB2YWx1ZSwgc3RhY2spKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhciBrZXlzRnVuYyA9IGlzRnVsbFxuICAgID8gKGlzRmxhdCA/IGdldEFsbEtleXNJbiA6IGdldEFsbEtleXMpXG4gICAgOiAoaXNGbGF0ID8ga2V5c0luIDoga2V5cyk7XG5cbiAgdmFyIHByb3BzID0gaXNBcnIgPyB1bmRlZmluZWQgOiBrZXlzRnVuYyh2YWx1ZSk7XG4gIGFycmF5RWFjaChwcm9wcyB8fCB2YWx1ZSwgZnVuY3Rpb24oc3ViVmFsdWUsIGtleSkge1xuICAgIGlmIChwcm9wcykge1xuICAgICAga2V5ID0gc3ViVmFsdWU7XG4gICAgICBzdWJWYWx1ZSA9IHZhbHVlW2tleV07XG4gICAgfVxuICAgIC8vIFJlY3Vyc2l2ZWx5IHBvcHVsYXRlIGNsb25lIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgYXNzaWduVmFsdWUocmVzdWx0LCBrZXksIGJhc2VDbG9uZShzdWJWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwga2V5LCB2YWx1ZSwgc3RhY2spKTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUNsb25lO1xuIiwgIi8qKlxuICogR2V0cyB0aGUgbGFzdCBlbGVtZW50IG9mIGBhcnJheWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbGFzdCBlbGVtZW50IG9mIGBhcnJheWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8ubGFzdChbMSwgMiwgM10pO1xuICogLy8gPT4gM1xuICovXG5mdW5jdGlvbiBsYXN0KGFycmF5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgcmV0dXJuIGxlbmd0aCA/IGFycmF5W2xlbmd0aCAtIDFdIDogdW5kZWZpbmVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxhc3Q7XG4iLCAiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zbGljZWAgd2l0aG91dCBhbiBpdGVyYXRlZSBjYWxsIGd1YXJkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gc2xpY2UuXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PTBdIFRoZSBzdGFydCBwb3NpdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbZW5kPWFycmF5Lmxlbmd0aF0gVGhlIGVuZCBwb3NpdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2YgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gYmFzZVNsaWNlKGFycmF5LCBzdGFydCwgZW5kKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGlmIChzdGFydCA8IDApIHtcbiAgICBzdGFydCA9IC1zdGFydCA+IGxlbmd0aCA/IDAgOiAobGVuZ3RoICsgc3RhcnQpO1xuICB9XG4gIGVuZCA9IGVuZCA+IGxlbmd0aCA/IGxlbmd0aCA6IGVuZDtcbiAgaWYgKGVuZCA8IDApIHtcbiAgICBlbmQgKz0gbGVuZ3RoO1xuICB9XG4gIGxlbmd0aCA9IHN0YXJ0ID4gZW5kID8gMCA6ICgoZW5kIC0gc3RhcnQpID4+PiAwKTtcbiAgc3RhcnQgPj4+PSAwO1xuXG4gIHZhciByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHJlc3VsdFtpbmRleF0gPSBhcnJheVtpbmRleCArIHN0YXJ0XTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VTbGljZTtcbiIsICJ2YXIgYmFzZUdldCA9IHJlcXVpcmUoJy4vX2Jhc2VHZXQnKSxcbiAgICBiYXNlU2xpY2UgPSByZXF1aXJlKCcuL19iYXNlU2xpY2UnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBwYXJlbnQgdmFsdWUgYXQgYHBhdGhgIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fSBwYXRoIFRoZSBwYXRoIHRvIGdldCB0aGUgcGFyZW50IHZhbHVlIG9mLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHBhcmVudCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gcGFyZW50KG9iamVjdCwgcGF0aCkge1xuICByZXR1cm4gcGF0aC5sZW5ndGggPCAyID8gb2JqZWN0IDogYmFzZUdldChvYmplY3QsIGJhc2VTbGljZShwYXRoLCAwLCAtMSkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJ2YXIgY2FzdFBhdGggPSByZXF1aXJlKCcuL19jYXN0UGF0aCcpLFxuICAgIGxhc3QgPSByZXF1aXJlKCcuL2xhc3QnKSxcbiAgICBwYXJlbnQgPSByZXF1aXJlKCcuL19wYXJlbnQnKSxcbiAgICB0b0tleSA9IHJlcXVpcmUoJy4vX3RvS2V5Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udW5zZXRgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHByb3BlcnR5IHBhdGggdG8gdW5zZXQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHByb3BlcnR5IGlzIGRlbGV0ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZVVuc2V0KG9iamVjdCwgcGF0aCkge1xuICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcbiAgb2JqZWN0ID0gcGFyZW50KG9iamVjdCwgcGF0aCk7XG4gIHJldHVybiBvYmplY3QgPT0gbnVsbCB8fCBkZWxldGUgb2JqZWN0W3RvS2V5KGxhc3QocGF0aCkpXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVW5zZXQ7XG4iLCAidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgZ2V0UHJvdG90eXBlID0gcmVxdWlyZSgnLi9fZ2V0UHJvdG90eXBlJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxuICAgIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIFVzZWQgdG8gaW5mZXIgdGhlIGBPYmplY3RgIGNvbnN0cnVjdG9yLiAqL1xudmFyIG9iamVjdEN0b3JTdHJpbmcgPSBmdW5jVG9TdHJpbmcuY2FsbChPYmplY3QpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcGxhaW4gb2JqZWN0LCB0aGF0IGlzLCBhbiBvYmplY3QgY3JlYXRlZCBieSB0aGVcbiAqIGBPYmplY3RgIGNvbnN0cnVjdG9yIG9yIG9uZSB3aXRoIGEgYFtbUHJvdG90eXBlXV1gIG9mIGBudWxsYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuOC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHBsYWluIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiB9XG4gKlxuICogXy5pc1BsYWluT2JqZWN0KG5ldyBGb28pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KHsgJ3gnOiAwLCAneSc6IDAgfSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KE9iamVjdC5jcmVhdGUobnVsbCkpO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3RMaWtlKHZhbHVlKSB8fCBiYXNlR2V0VGFnKHZhbHVlKSAhPSBvYmplY3RUYWcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHByb3RvID0gZ2V0UHJvdG90eXBlKHZhbHVlKTtcbiAgaWYgKHByb3RvID09PSBudWxsKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgdmFyIEN0b3IgPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3RvLCAnY29uc3RydWN0b3InKSAmJiBwcm90by5jb25zdHJ1Y3RvcjtcbiAgcmV0dXJuIHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3RvciBpbnN0YW5jZW9mIEN0b3IgJiZcbiAgICBmdW5jVG9TdHJpbmcuY2FsbChDdG9yKSA9PSBvYmplY3RDdG9yU3RyaW5nO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzUGxhaW5PYmplY3Q7XG4iLCAidmFyIGlzUGxhaW5PYmplY3QgPSByZXF1aXJlKCcuL2lzUGxhaW5PYmplY3QnKTtcblxuLyoqXG4gKiBVc2VkIGJ5IGBfLm9taXRgIHRvIGN1c3RvbWl6ZSBpdHMgYF8uY2xvbmVEZWVwYCB1c2UgdG8gb25seSBjbG9uZSBwbGFpblxuICogb2JqZWN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSB1bmNsb25lZCB2YWx1ZSBvciBgdW5kZWZpbmVkYCB0byBkZWZlciBjbG9uaW5nIHRvIGBfLmNsb25lRGVlcGAuXG4gKi9cbmZ1bmN0aW9uIGN1c3RvbU9taXRDbG9uZSh2YWx1ZSkge1xuICByZXR1cm4gaXNQbGFpbk9iamVjdCh2YWx1ZSkgPyB1bmRlZmluZWQgOiB2YWx1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjdXN0b21PbWl0Q2xvbmU7XG4iLCAidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpLFxuICAgIGlzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9pc0FyZ3VtZW50cycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ByZWFkYWJsZVN5bWJvbCA9IFN5bWJvbCA/IFN5bWJvbC5pc0NvbmNhdFNwcmVhZGFibGUgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBmbGF0dGVuYWJsZSBgYXJndW1lbnRzYCBvYmplY3Qgb3IgYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgZmxhdHRlbmFibGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNGbGF0dGVuYWJsZSh2YWx1ZSkge1xuICByZXR1cm4gaXNBcnJheSh2YWx1ZSkgfHwgaXNBcmd1bWVudHModmFsdWUpIHx8XG4gICAgISEoc3ByZWFkYWJsZVN5bWJvbCAmJiB2YWx1ZSAmJiB2YWx1ZVtzcHJlYWRhYmxlU3ltYm9sXSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGbGF0dGVuYWJsZTtcbiIsICJ2YXIgYXJyYXlQdXNoID0gcmVxdWlyZSgnLi9fYXJyYXlQdXNoJyksXG4gICAgaXNGbGF0dGVuYWJsZSA9IHJlcXVpcmUoJy4vX2lzRmxhdHRlbmFibGUnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mbGF0dGVuYCB3aXRoIHN1cHBvcnQgZm9yIHJlc3RyaWN0aW5nIGZsYXR0ZW5pbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBmbGF0dGVuLlxuICogQHBhcmFtIHtudW1iZXJ9IGRlcHRoIFRoZSBtYXhpbXVtIHJlY3Vyc2lvbiBkZXB0aC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3ByZWRpY2F0ZT1pc0ZsYXR0ZW5hYmxlXSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNTdHJpY3RdIFJlc3RyaWN0IHRvIHZhbHVlcyB0aGF0IHBhc3MgYHByZWRpY2F0ZWAgY2hlY2tzLlxuICogQHBhcmFtIHtBcnJheX0gW3Jlc3VsdD1bXV0gVGhlIGluaXRpYWwgcmVzdWx0IHZhbHVlLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmxhdHRlbmVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBiYXNlRmxhdHRlbihhcnJheSwgZGVwdGgsIHByZWRpY2F0ZSwgaXNTdHJpY3QsIHJlc3VsdCkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBwcmVkaWNhdGUgfHwgKHByZWRpY2F0ZSA9IGlzRmxhdHRlbmFibGUpO1xuICByZXN1bHQgfHwgKHJlc3VsdCA9IFtdKTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTtcbiAgICBpZiAoZGVwdGggPiAwICYmIHByZWRpY2F0ZSh2YWx1ZSkpIHtcbiAgICAgIGlmIChkZXB0aCA+IDEpIHtcbiAgICAgICAgLy8gUmVjdXJzaXZlbHkgZmxhdHRlbiBhcnJheXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICAgICAgYmFzZUZsYXR0ZW4odmFsdWUsIGRlcHRoIC0gMSwgcHJlZGljYXRlLCBpc1N0cmljdCwgcmVzdWx0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFycmF5UHVzaChyZXN1bHQsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFpc1N0cmljdCkge1xuICAgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGhdID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUZsYXR0ZW47XG4iLCAidmFyIGJhc2VGbGF0dGVuID0gcmVxdWlyZSgnLi9fYmFzZUZsYXR0ZW4nKTtcblxuLyoqXG4gKiBGbGF0dGVucyBgYXJyYXlgIGEgc2luZ2xlIGxldmVsIGRlZXAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gZmxhdHRlbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZsYXR0ZW5lZCBhcnJheS5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5mbGF0dGVuKFsxLCBbMiwgWzMsIFs0XV0sIDVdXSk7XG4gKiAvLyA9PiBbMSwgMiwgWzMsIFs0XV0sIDVdXG4gKi9cbmZ1bmN0aW9uIGZsYXR0ZW4oYXJyYXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICByZXR1cm4gbGVuZ3RoID8gYmFzZUZsYXR0ZW4oYXJyYXksIDEpIDogW107XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZmxhdHRlbjtcbiIsICIvKipcbiAqIEEgZmFzdGVyIGFsdGVybmF0aXZlIHRvIGBGdW5jdGlvbiNhcHBseWAsIHRoaXMgZnVuY3Rpb24gaW52b2tlcyBgZnVuY2BcbiAqIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIGB0aGlzQXJnYCBhbmQgdGhlIGFyZ3VtZW50cyBvZiBgYXJnc2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGludm9rZS5cbiAqIEBwYXJhbSB7Kn0gdGhpc0FyZyBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICogQHBhcmFtIHtBcnJheX0gYXJncyBUaGUgYXJndW1lbnRzIHRvIGludm9rZSBgZnVuY2Agd2l0aC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXN1bHQgb2YgYGZ1bmNgLlxuICovXG5mdW5jdGlvbiBhcHBseShmdW5jLCB0aGlzQXJnLCBhcmdzKSB7XG4gIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICBjYXNlIDA6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZyk7XG4gICAgY2FzZSAxOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0pO1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gIH1cbiAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpc0FyZywgYXJncyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXBwbHk7XG4iLCAidmFyIGFwcGx5ID0gcmVxdWlyZSgnLi9fYXBwbHknKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU1heCA9IE1hdGgubWF4O1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZVJlc3RgIHdoaWNoIHRyYW5zZm9ybXMgdGhlIHJlc3QgYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PWZ1bmMubGVuZ3RoLTFdIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgcmVzdCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2Zvcm0gVGhlIHJlc3QgYXJyYXkgdHJhbnNmb3JtLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG92ZXJSZXN0KGZ1bmMsIHN0YXJ0LCB0cmFuc2Zvcm0pIHtcbiAgc3RhcnQgPSBuYXRpdmVNYXgoc3RhcnQgPT09IHVuZGVmaW5lZCA/IChmdW5jLmxlbmd0aCAtIDEpIDogc3RhcnQsIDApO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IG5hdGl2ZU1heChhcmdzLmxlbmd0aCAtIHN0YXJ0LCAwKSxcbiAgICAgICAgYXJyYXkgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGFycmF5W2luZGV4XSA9IGFyZ3Nbc3RhcnQgKyBpbmRleF07XG4gICAgfVxuICAgIGluZGV4ID0gLTE7XG4gICAgdmFyIG90aGVyQXJncyA9IEFycmF5KHN0YXJ0ICsgMSk7XG4gICAgd2hpbGUgKCsraW5kZXggPCBzdGFydCkge1xuICAgICAgb3RoZXJBcmdzW2luZGV4XSA9IGFyZ3NbaW5kZXhdO1xuICAgIH1cbiAgICBvdGhlckFyZ3Nbc3RhcnRdID0gdHJhbnNmb3JtKGFycmF5KTtcbiAgICByZXR1cm4gYXBwbHkoZnVuYywgdGhpcywgb3RoZXJBcmdzKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvdmVyUmVzdDtcbiIsICIvKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYHZhbHVlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDIuNC4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcmV0dXJuIGZyb20gdGhlIG5ldyBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNvbnN0YW50IGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0cyA9IF8udGltZXMoMiwgXy5jb25zdGFudCh7ICdhJzogMSB9KSk7XG4gKlxuICogY29uc29sZS5sb2cob2JqZWN0cyk7XG4gKiAvLyA9PiBbeyAnYSc6IDEgfSwgeyAnYSc6IDEgfV1cbiAqXG4gKiBjb25zb2xlLmxvZyhvYmplY3RzWzBdID09PSBvYmplY3RzWzFdKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gY29uc3RhbnQodmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb25zdGFudDtcbiIsICIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGZpcnN0IGFyZ3VtZW50IGl0IHJlY2VpdmVzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0geyp9IHZhbHVlIEFueSB2YWx1ZS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIGB2YWx1ZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICpcbiAqIGNvbnNvbGUubG9nKF8uaWRlbnRpdHkob2JqZWN0KSA9PT0gb2JqZWN0KTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gaWRlbnRpdHkodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlkZW50aXR5O1xuIiwgInZhciBjb25zdGFudCA9IHJlcXVpcmUoJy4vY29uc3RhbnQnKSxcbiAgICBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2RlZmluZVByb3BlcnR5JyksXG4gICAgaWRlbnRpdHkgPSByZXF1aXJlKCcuL2lkZW50aXR5Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYHNldFRvU3RyaW5nYCB3aXRob3V0IHN1cHBvcnQgZm9yIGhvdCBsb29wIHNob3J0aW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdHJpbmcgVGhlIGB0b1N0cmluZ2AgcmVzdWx0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC5cbiAqL1xudmFyIGJhc2VTZXRUb1N0cmluZyA9ICFkZWZpbmVQcm9wZXJ0eSA/IGlkZW50aXR5IDogZnVuY3Rpb24oZnVuYywgc3RyaW5nKSB7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eShmdW5jLCAndG9TdHJpbmcnLCB7XG4gICAgJ2NvbmZpZ3VyYWJsZSc6IHRydWUsXG4gICAgJ2VudW1lcmFibGUnOiBmYWxzZSxcbiAgICAndmFsdWUnOiBjb25zdGFudChzdHJpbmcpLFxuICAgICd3cml0YWJsZSc6IHRydWVcbiAgfSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VTZXRUb1N0cmluZztcbiIsICIvKiogVXNlZCB0byBkZXRlY3QgaG90IGZ1bmN0aW9ucyBieSBudW1iZXIgb2YgY2FsbHMgd2l0aGluIGEgc3BhbiBvZiBtaWxsaXNlY29uZHMuICovXG52YXIgSE9UX0NPVU5UID0gODAwLFxuICAgIEhPVF9TUEFOID0gMTY7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVOb3cgPSBEYXRlLm5vdztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCdsbCBzaG9ydCBvdXQgYW5kIGludm9rZSBgaWRlbnRpdHlgIGluc3RlYWRcbiAqIG9mIGBmdW5jYCB3aGVuIGl0J3MgY2FsbGVkIGBIT1RfQ09VTlRgIG9yIG1vcmUgdGltZXMgaW4gYEhPVF9TUEFOYFxuICogbWlsbGlzZWNvbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byByZXN0cmljdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNob3J0YWJsZSBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gc2hvcnRPdXQoZnVuYykge1xuICB2YXIgY291bnQgPSAwLFxuICAgICAgbGFzdENhbGxlZCA9IDA7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdGFtcCA9IG5hdGl2ZU5vdygpLFxuICAgICAgICByZW1haW5pbmcgPSBIT1RfU1BBTiAtIChzdGFtcCAtIGxhc3RDYWxsZWQpO1xuXG4gICAgbGFzdENhbGxlZCA9IHN0YW1wO1xuICAgIGlmIChyZW1haW5pbmcgPiAwKSB7XG4gICAgICBpZiAoKytjb3VudCA+PSBIT1RfQ09VTlQpIHtcbiAgICAgICAgcmV0dXJuIGFyZ3VtZW50c1swXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY291bnQgPSAwO1xuICAgIH1cbiAgICByZXR1cm4gZnVuYy5hcHBseSh1bmRlZmluZWQsIGFyZ3VtZW50cyk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2hvcnRPdXQ7XG4iLCAidmFyIGJhc2VTZXRUb1N0cmluZyA9IHJlcXVpcmUoJy4vX2Jhc2VTZXRUb1N0cmluZycpLFxuICAgIHNob3J0T3V0ID0gcmVxdWlyZSgnLi9fc2hvcnRPdXQnKTtcblxuLyoqXG4gKiBTZXRzIHRoZSBgdG9TdHJpbmdgIG1ldGhvZCBvZiBgZnVuY2AgdG8gcmV0dXJuIGBzdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdHJpbmcgVGhlIGB0b1N0cmluZ2AgcmVzdWx0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC5cbiAqL1xudmFyIHNldFRvU3RyaW5nID0gc2hvcnRPdXQoYmFzZVNldFRvU3RyaW5nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBzZXRUb1N0cmluZztcbiIsICJ2YXIgZmxhdHRlbiA9IHJlcXVpcmUoJy4vZmxhdHRlbicpLFxuICAgIG92ZXJSZXN0ID0gcmVxdWlyZSgnLi9fb3ZlclJlc3QnKSxcbiAgICBzZXRUb1N0cmluZyA9IHJlcXVpcmUoJy4vX3NldFRvU3RyaW5nJyk7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUmVzdGAgd2hpY2ggZmxhdHRlbnMgdGhlIHJlc3QgYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gZmxhdFJlc3QoZnVuYykge1xuICByZXR1cm4gc2V0VG9TdHJpbmcob3ZlclJlc3QoZnVuYywgdW5kZWZpbmVkLCBmbGF0dGVuKSwgZnVuYyArICcnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmbGF0UmVzdDtcbiIsICJ2YXIgYXJyYXlNYXAgPSByZXF1aXJlKCcuL19hcnJheU1hcCcpLFxuICAgIGJhc2VDbG9uZSA9IHJlcXVpcmUoJy4vX2Jhc2VDbG9uZScpLFxuICAgIGJhc2VVbnNldCA9IHJlcXVpcmUoJy4vX2Jhc2VVbnNldCcpLFxuICAgIGNhc3RQYXRoID0gcmVxdWlyZSgnLi9fY2FzdFBhdGgnKSxcbiAgICBjb3B5T2JqZWN0ID0gcmVxdWlyZSgnLi9fY29weU9iamVjdCcpLFxuICAgIGN1c3RvbU9taXRDbG9uZSA9IHJlcXVpcmUoJy4vX2N1c3RvbU9taXRDbG9uZScpLFxuICAgIGZsYXRSZXN0ID0gcmVxdWlyZSgnLi9fZmxhdFJlc3QnKSxcbiAgICBnZXRBbGxLZXlzSW4gPSByZXF1aXJlKCcuL19nZXRBbGxLZXlzSW4nKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgY2xvbmluZy4gKi9cbnZhciBDTE9ORV9ERUVQX0ZMQUcgPSAxLFxuICAgIENMT05FX0ZMQVRfRkxBRyA9IDIsXG4gICAgQ0xPTkVfU1lNQk9MU19GTEFHID0gNDtcblxuLyoqXG4gKiBUaGUgb3Bwb3NpdGUgb2YgYF8ucGlja2A7IHRoaXMgbWV0aG9kIGNyZWF0ZXMgYW4gb2JqZWN0IGNvbXBvc2VkIG9mIHRoZVxuICogb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0eSBwYXRocyBvZiBgb2JqZWN0YCB0aGF0IGFyZSBub3Qgb21pdHRlZC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgY29uc2lkZXJhYmx5IHNsb3dlciB0aGFuIGBfLnBpY2tgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIHNvdXJjZSBvYmplY3QuXG4gKiBAcGFyYW0gey4uLihzdHJpbmd8c3RyaW5nW10pfSBbcGF0aHNdIFRoZSBwcm9wZXJ0eSBwYXRocyB0byBvbWl0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6ICcyJywgJ2MnOiAzIH07XG4gKlxuICogXy5vbWl0KG9iamVjdCwgWydhJywgJ2MnXSk7XG4gKiAvLyA9PiB7ICdiJzogJzInIH1cbiAqL1xudmFyIG9taXQgPSBmbGF0UmVzdChmdW5jdGlvbihvYmplY3QsIHBhdGhzKSB7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICB2YXIgaXNEZWVwID0gZmFsc2U7XG4gIHBhdGhzID0gYXJyYXlNYXAocGF0aHMsIGZ1bmN0aW9uKHBhdGgpIHtcbiAgICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcbiAgICBpc0RlZXAgfHwgKGlzRGVlcCA9IHBhdGgubGVuZ3RoID4gMSk7XG4gICAgcmV0dXJuIHBhdGg7XG4gIH0pO1xuICBjb3B5T2JqZWN0KG9iamVjdCwgZ2V0QWxsS2V5c0luKG9iamVjdCksIHJlc3VsdCk7XG4gIGlmIChpc0RlZXApIHtcbiAgICByZXN1bHQgPSBiYXNlQ2xvbmUocmVzdWx0LCBDTE9ORV9ERUVQX0ZMQUcgfCBDTE9ORV9GTEFUX0ZMQUcgfCBDTE9ORV9TWU1CT0xTX0ZMQUcsIGN1c3RvbU9taXRDbG9uZSk7XG4gIH1cbiAgdmFyIGxlbmd0aCA9IHBhdGhzLmxlbmd0aDtcbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgYmFzZVVuc2V0KHJlc3VsdCwgcGF0aHNbbGVuZ3RoXSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG9taXQ7XG4iLCAiLyoqIEBsaWNlbnNlIFJlYWN0IHYxNy4wLjJcbiAqIHJlYWN0LWlzLmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIChmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxuLy8gQVRURU5USU9OXG4vLyBXaGVuIGFkZGluZyBuZXcgc3ltYm9scyB0byB0aGlzIGZpbGUsXG4vLyBQbGVhc2UgY29uc2lkZXIgYWxzbyBhZGRpbmcgdG8gJ3JlYWN0LWRldnRvb2xzLXNoYXJlZC9zcmMvYmFja2VuZC9SZWFjdFN5bWJvbHMnXG4vLyBUaGUgU3ltYm9sIHVzZWQgdG8gdGFnIHRoZSBSZWFjdEVsZW1lbnQtbGlrZSB0eXBlcy4gSWYgdGhlcmUgaXMgbm8gbmF0aXZlIFN5bWJvbFxuLy8gbm9yIHBvbHlmaWxsLCB0aGVuIGEgcGxhaW4gbnVtYmVyIGlzIHVzZWQgZm9yIHBlcmZvcm1hbmNlLlxudmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IDB4ZWFjNztcbnZhciBSRUFDVF9QT1JUQUxfVFlQRSA9IDB4ZWFjYTtcbnZhciBSRUFDVF9GUkFHTUVOVF9UWVBFID0gMHhlYWNiO1xudmFyIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSAweGVhY2M7XG52YXIgUkVBQ1RfUFJPRklMRVJfVFlQRSA9IDB4ZWFkMjtcbnZhciBSRUFDVF9QUk9WSURFUl9UWVBFID0gMHhlYWNkO1xudmFyIFJFQUNUX0NPTlRFWFRfVFlQRSA9IDB4ZWFjZTtcbnZhciBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gMHhlYWQwO1xudmFyIFJFQUNUX1NVU1BFTlNFX1RZUEUgPSAweGVhZDE7XG52YXIgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFID0gMHhlYWQ4O1xudmFyIFJFQUNUX01FTU9fVFlQRSA9IDB4ZWFkMztcbnZhciBSRUFDVF9MQVpZX1RZUEUgPSAweGVhZDQ7XG52YXIgUkVBQ1RfQkxPQ0tfVFlQRSA9IDB4ZWFkOTtcbnZhciBSRUFDVF9TRVJWRVJfQkxPQ0tfVFlQRSA9IDB4ZWFkYTtcbnZhciBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFID0gMHhlYWQ1O1xudmFyIFJFQUNUX1NDT1BFX1RZUEUgPSAweGVhZDc7XG52YXIgUkVBQ1RfT1BBUVVFX0lEX1RZUEUgPSAweGVhZTA7XG52YXIgUkVBQ1RfREVCVUdfVFJBQ0lOR19NT0RFX1RZUEUgPSAweGVhZTE7XG52YXIgUkVBQ1RfT0ZGU0NSRUVOX1RZUEUgPSAweGVhZTI7XG52YXIgUkVBQ1RfTEVHQUNZX0hJRERFTl9UWVBFID0gMHhlYWUzO1xuXG5pZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuZm9yKSB7XG4gIHZhciBzeW1ib2xGb3IgPSBTeW1ib2wuZm9yO1xuICBSRUFDVF9FTEVNRU5UX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmVsZW1lbnQnKTtcbiAgUkVBQ1RfUE9SVEFMX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnBvcnRhbCcpO1xuICBSRUFDVF9GUkFHTUVOVF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5mcmFnbWVudCcpO1xuICBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5zdHJpY3RfbW9kZScpO1xuICBSRUFDVF9QUk9GSUxFUl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5wcm9maWxlcicpO1xuICBSRUFDVF9QUk9WSURFUl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5wcm92aWRlcicpO1xuICBSRUFDVF9DT05URVhUX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmNvbnRleHQnKTtcbiAgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuZm9yd2FyZF9yZWYnKTtcbiAgUkVBQ1RfU1VTUEVOU0VfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Quc3VzcGVuc2UnKTtcbiAgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5zdXNwZW5zZV9saXN0Jyk7XG4gIFJFQUNUX01FTU9fVFlQRSA9IHN5bWJvbEZvcigncmVhY3QubWVtbycpO1xuICBSRUFDVF9MQVpZX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmxhenknKTtcbiAgUkVBQ1RfQkxPQ0tfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuYmxvY2snKTtcbiAgUkVBQ1RfU0VSVkVSX0JMT0NLX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnNlcnZlci5ibG9jaycpO1xuICBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5mdW5kYW1lbnRhbCcpO1xuICBSRUFDVF9TQ09QRV9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5zY29wZScpO1xuICBSRUFDVF9PUEFRVUVfSURfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Qub3BhcXVlLmlkJyk7XG4gIFJFQUNUX0RFQlVHX1RSQUNJTkdfTU9ERV9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5kZWJ1Z190cmFjZV9tb2RlJyk7XG4gIFJFQUNUX09GRlNDUkVFTl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5vZmZzY3JlZW4nKTtcbiAgUkVBQ1RfTEVHQUNZX0hJRERFTl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5sZWdhY3lfaGlkZGVuJyk7XG59XG5cbi8vIEZpbHRlciBjZXJ0YWluIERPTSBhdHRyaWJ1dGVzIChlLmcuIHNyYywgaHJlZikgaWYgdGhlaXIgdmFsdWVzIGFyZSBlbXB0eSBzdHJpbmdzLlxuXG52YXIgZW5hYmxlU2NvcGVBUEkgPSBmYWxzZTsgLy8gRXhwZXJpbWVudGFsIENyZWF0ZSBFdmVudCBIYW5kbGUgQVBJLlxuXG5mdW5jdGlvbiBpc1ZhbGlkRWxlbWVudFR5cGUodHlwZSkge1xuICBpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gLy8gTm90ZTogdHlwZW9mIG1pZ2h0IGJlIG90aGVyIHRoYW4gJ3N5bWJvbCcgb3IgJ251bWJlcicgKGUuZy4gaWYgaXQncyBhIHBvbHlmaWxsKS5cblxuXG4gIGlmICh0eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1BST0ZJTEVSX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfREVCVUdfVFJBQ0lOR19NT0RFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9MRUdBQ1lfSElEREVOX1RZUEUgfHwgZW5hYmxlU2NvcGVBUEkgKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwpIHtcbiAgICBpZiAodHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTEFaWV9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX01FTU9fVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9QUk9WSURFUl9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlRFWFRfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQkxPQ0tfVFlQRSB8fCB0eXBlWzBdID09PSBSRUFDVF9TRVJWRVJfQkxPQ0tfVFlQRSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiB0eXBlT2Yob2JqZWN0KSB7XG4gIGlmICh0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwpIHtcbiAgICB2YXIgJCR0eXBlb2YgPSBvYmplY3QuJCR0eXBlb2Y7XG5cbiAgICBzd2l0Y2ggKCQkdHlwZW9mKSB7XG4gICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgdmFyIHR5cGUgPSBvYmplY3QudHlwZTtcblxuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICBjYXNlIFJFQUNUX0ZSQUdNRU5UX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9QUk9GSUxFUl9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfU1RSSUNUX01PREVfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU6XG4gICAgICAgICAgICByZXR1cm4gdHlwZTtcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB2YXIgJCR0eXBlb2ZUeXBlID0gdHlwZSAmJiB0eXBlLiQkdHlwZW9mO1xuXG4gICAgICAgICAgICBzd2l0Y2ggKCQkdHlwZW9mVHlwZSkge1xuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0NPTlRFWFRfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfUFJPVklERVJfVFlQRTpcbiAgICAgICAgICAgICAgICByZXR1cm4gJCR0eXBlb2ZUeXBlO1xuXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuICQkdHlwZW9mO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgcmV0dXJuICQkdHlwZW9mO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG52YXIgQ29udGV4dENvbnN1bWVyID0gUkVBQ1RfQ09OVEVYVF9UWVBFO1xudmFyIENvbnRleHRQcm92aWRlciA9IFJFQUNUX1BST1ZJREVSX1RZUEU7XG52YXIgRWxlbWVudCA9IFJFQUNUX0VMRU1FTlRfVFlQRTtcbnZhciBGb3J3YXJkUmVmID0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTtcbnZhciBGcmFnbWVudCA9IFJFQUNUX0ZSQUdNRU5UX1RZUEU7XG52YXIgTGF6eSA9IFJFQUNUX0xBWllfVFlQRTtcbnZhciBNZW1vID0gUkVBQ1RfTUVNT19UWVBFO1xudmFyIFBvcnRhbCA9IFJFQUNUX1BPUlRBTF9UWVBFO1xudmFyIFByb2ZpbGVyID0gUkVBQ1RfUFJPRklMRVJfVFlQRTtcbnZhciBTdHJpY3RNb2RlID0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRTtcbnZhciBTdXNwZW5zZSA9IFJFQUNUX1NVU1BFTlNFX1RZUEU7XG52YXIgaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNBc3luY01vZGUgPSBmYWxzZTtcbnZhciBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0NvbmN1cnJlbnRNb2RlID0gZmFsc2U7IC8vIEFzeW5jTW9kZSBzaG91bGQgYmUgZGVwcmVjYXRlZFxuXG5mdW5jdGlvbiBpc0FzeW5jTW9kZShvYmplY3QpIHtcbiAge1xuICAgIGlmICghaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNBc3luY01vZGUpIHtcbiAgICAgIGhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlID0gdHJ1ZTsgLy8gVXNpbmcgY29uc29sZVsnd2FybiddIHRvIGV2YWRlIEJhYmVsIGFuZCBFU0xpbnRcblxuICAgICAgY29uc29sZVsnd2FybiddKCdUaGUgUmVhY3RJcy5pc0FzeW5jTW9kZSgpIGFsaWFzIGhhcyBiZWVuIGRlcHJlY2F0ZWQsICcgKyAnYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBSZWFjdCAxOCsuJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gaXNDb25jdXJyZW50TW9kZShvYmplY3QpIHtcbiAge1xuICAgIGlmICghaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNDb25jdXJyZW50TW9kZSkge1xuICAgICAgaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNDb25jdXJyZW50TW9kZSA9IHRydWU7IC8vIFVzaW5nIGNvbnNvbGVbJ3dhcm4nXSB0byBldmFkZSBCYWJlbCBhbmQgRVNMaW50XG5cbiAgICAgIGNvbnNvbGVbJ3dhcm4nXSgnVGhlIFJlYWN0SXMuaXNDb25jdXJyZW50TW9kZSgpIGFsaWFzIGhhcyBiZWVuIGRlcHJlY2F0ZWQsICcgKyAnYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBSZWFjdCAxOCsuJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gaXNDb250ZXh0Q29uc3VtZXIob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFO1xufVxuZnVuY3Rpb24gaXNDb250ZXh0UHJvdmlkZXIob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUFJPVklERVJfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzRWxlbWVudChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCAmJiBvYmplY3QuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzRm9yd2FyZFJlZihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFO1xufVxuZnVuY3Rpb24gaXNGcmFnbWVudChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFO1xufVxuZnVuY3Rpb24gaXNMYXp5KG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0xBWllfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzTWVtbyhvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9NRU1PX1RZUEU7XG59XG5mdW5jdGlvbiBpc1BvcnRhbChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9QT1JUQUxfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzUHJvZmlsZXIob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUFJPRklMRVJfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzU3RyaWN0TW9kZShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFO1xufVxuZnVuY3Rpb24gaXNTdXNwZW5zZShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9TVVNQRU5TRV9UWVBFO1xufVxuXG5leHBvcnRzLkNvbnRleHRDb25zdW1lciA9IENvbnRleHRDb25zdW1lcjtcbmV4cG9ydHMuQ29udGV4dFByb3ZpZGVyID0gQ29udGV4dFByb3ZpZGVyO1xuZXhwb3J0cy5FbGVtZW50ID0gRWxlbWVudDtcbmV4cG9ydHMuRm9yd2FyZFJlZiA9IEZvcndhcmRSZWY7XG5leHBvcnRzLkZyYWdtZW50ID0gRnJhZ21lbnQ7XG5leHBvcnRzLkxhenkgPSBMYXp5O1xuZXhwb3J0cy5NZW1vID0gTWVtbztcbmV4cG9ydHMuUG9ydGFsID0gUG9ydGFsO1xuZXhwb3J0cy5Qcm9maWxlciA9IFByb2ZpbGVyO1xuZXhwb3J0cy5TdHJpY3RNb2RlID0gU3RyaWN0TW9kZTtcbmV4cG9ydHMuU3VzcGVuc2UgPSBTdXNwZW5zZTtcbmV4cG9ydHMuaXNBc3luY01vZGUgPSBpc0FzeW5jTW9kZTtcbmV4cG9ydHMuaXNDb25jdXJyZW50TW9kZSA9IGlzQ29uY3VycmVudE1vZGU7XG5leHBvcnRzLmlzQ29udGV4dENvbnN1bWVyID0gaXNDb250ZXh0Q29uc3VtZXI7XG5leHBvcnRzLmlzQ29udGV4dFByb3ZpZGVyID0gaXNDb250ZXh0UHJvdmlkZXI7XG5leHBvcnRzLmlzRWxlbWVudCA9IGlzRWxlbWVudDtcbmV4cG9ydHMuaXNGb3J3YXJkUmVmID0gaXNGb3J3YXJkUmVmO1xuZXhwb3J0cy5pc0ZyYWdtZW50ID0gaXNGcmFnbWVudDtcbmV4cG9ydHMuaXNMYXp5ID0gaXNMYXp5O1xuZXhwb3J0cy5pc01lbW8gPSBpc01lbW87XG5leHBvcnRzLmlzUG9ydGFsID0gaXNQb3J0YWw7XG5leHBvcnRzLmlzUHJvZmlsZXIgPSBpc1Byb2ZpbGVyO1xuZXhwb3J0cy5pc1N0cmljdE1vZGUgPSBpc1N0cmljdE1vZGU7XG5leHBvcnRzLmlzU3VzcGVuc2UgPSBpc1N1c3BlbnNlO1xuZXhwb3J0cy5pc1ZhbGlkRWxlbWVudFR5cGUgPSBpc1ZhbGlkRWxlbWVudFR5cGU7XG5leHBvcnRzLnR5cGVPZiA9IHR5cGVPZjtcbiAgfSkoKTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ2hlY2sgaWYgd2UncmUgcmVxdWlyZWQgdG8gYWRkIGEgcG9ydCBudW1iZXIuXG4gKlxuICogQHNlZSBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RlZmF1bHQtcG9ydFxuICogQHBhcmFtIHtOdW1iZXJ8U3RyaW5nfSBwb3J0IFBvcnQgbnVtYmVyIHdlIG5lZWQgdG8gY2hlY2tcbiAqIEBwYXJhbSB7U3RyaW5nfSBwcm90b2NvbCBQcm90b2NvbCB3ZSBuZWVkIHRvIGNoZWNrIGFnYWluc3QuXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gSXMgaXQgYSBkZWZhdWx0IHBvcnQgZm9yIHRoZSBnaXZlbiBwcm90b2NvbFxuICogQGFwaSBwcml2YXRlXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcmVxdWlyZWQocG9ydCwgcHJvdG9jb2wpIHtcbiAgcHJvdG9jb2wgPSBwcm90b2NvbC5zcGxpdCgnOicpWzBdO1xuICBwb3J0ID0gK3BvcnQ7XG5cbiAgaWYgKCFwb3J0KSByZXR1cm4gZmFsc2U7XG5cbiAgc3dpdGNoIChwcm90b2NvbCkge1xuICAgIGNhc2UgJ2h0dHAnOlxuICAgIGNhc2UgJ3dzJzpcbiAgICByZXR1cm4gcG9ydCAhPT0gODA7XG5cbiAgICBjYXNlICdodHRwcyc6XG4gICAgY2FzZSAnd3NzJzpcbiAgICByZXR1cm4gcG9ydCAhPT0gNDQzO1xuXG4gICAgY2FzZSAnZnRwJzpcbiAgICByZXR1cm4gcG9ydCAhPT0gMjE7XG5cbiAgICBjYXNlICdnb3BoZXInOlxuICAgIHJldHVybiBwb3J0ICE9PSA3MDtcblxuICAgIGNhc2UgJ2ZpbGUnOlxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBwb3J0ICE9PSAwO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5cbnZhciBoYXMgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5XG4gICwgdW5kZWY7XG5cbi8qKlxuICogRGVjb2RlIGEgVVJJIGVuY29kZWQgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgVVJJIGVuY29kZWQgc3RyaW5nLlxuICogQHJldHVybnMge1N0cmluZ3xOdWxsfSBUaGUgZGVjb2RlZCBzdHJpbmcuXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZGVjb2RlKGlucHV0KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChpbnB1dC5yZXBsYWNlKC9cXCsvZywgJyAnKSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG4vKipcbiAqIEF0dGVtcHRzIHRvIGVuY29kZSBhIGdpdmVuIGlucHV0LlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgc3RyaW5nIHRoYXQgbmVlZHMgdG8gYmUgZW5jb2RlZC5cbiAqIEByZXR1cm5zIHtTdHJpbmd8TnVsbH0gVGhlIGVuY29kZWQgc3RyaW5nLlxuICogQGFwaSBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGVuY29kZShpbnB1dCkge1xuICB0cnkge1xuICAgIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoaW5wdXQpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuLyoqXG4gKiBTaW1wbGUgcXVlcnkgc3RyaW5nIHBhcnNlci5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gcXVlcnkgVGhlIHF1ZXJ5IHN0cmluZyB0aGF0IG5lZWRzIHRvIGJlIHBhcnNlZC5cbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5mdW5jdGlvbiBxdWVyeXN0cmluZyhxdWVyeSkge1xuICB2YXIgcGFyc2VyID0gLyhbXj0/IyZdKyk9PyhbXiZdKikvZ1xuICAgICwgcmVzdWx0ID0ge31cbiAgICAsIHBhcnQ7XG5cbiAgd2hpbGUgKHBhcnQgPSBwYXJzZXIuZXhlYyhxdWVyeSkpIHtcbiAgICB2YXIga2V5ID0gZGVjb2RlKHBhcnRbMV0pXG4gICAgICAsIHZhbHVlID0gZGVjb2RlKHBhcnRbMl0pO1xuXG4gICAgLy9cbiAgICAvLyBQcmV2ZW50IG92ZXJyaWRpbmcgb2YgZXhpc3RpbmcgcHJvcGVydGllcy4gVGhpcyBlbnN1cmVzIHRoYXQgYnVpbGQtaW5cbiAgICAvLyBtZXRob2RzIGxpa2UgYHRvU3RyaW5nYCBvciBfX3Byb3RvX18gYXJlIG5vdCBvdmVycmlkZW4gYnkgbWFsaWNpb3VzXG4gICAgLy8gcXVlcnlzdHJpbmdzLlxuICAgIC8vXG4gICAgLy8gSW4gdGhlIGNhc2UgaWYgZmFpbGVkIGRlY29kaW5nLCB3ZSB3YW50IHRvIG9taXQgdGhlIGtleS92YWx1ZSBwYWlyc1xuICAgIC8vIGZyb20gdGhlIHJlc3VsdC5cbiAgICAvL1xuICAgIGlmIChrZXkgPT09IG51bGwgfHwgdmFsdWUgPT09IG51bGwgfHwga2V5IGluIHJlc3VsdCkgY29udGludWU7XG4gICAgcmVzdWx0W2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogVHJhbnNmb3JtIGEgcXVlcnkgc3RyaW5nIHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqIE9iamVjdCB0aGF0IHNob3VsZCBiZSB0cmFuc2Zvcm1lZC5cbiAqIEBwYXJhbSB7U3RyaW5nfSBwcmVmaXggT3B0aW9uYWwgcHJlZml4LlxuICogQHJldHVybnMge1N0cmluZ31cbiAqIEBhcGkgcHVibGljXG4gKi9cbmZ1bmN0aW9uIHF1ZXJ5c3RyaW5naWZ5KG9iaiwgcHJlZml4KSB7XG4gIHByZWZpeCA9IHByZWZpeCB8fCAnJztcblxuICB2YXIgcGFpcnMgPSBbXVxuICAgICwgdmFsdWVcbiAgICAsIGtleTtcblxuICAvL1xuICAvLyBPcHRpb25hbGx5IHByZWZpeCB3aXRoIGEgJz8nIGlmIG5lZWRlZFxuICAvL1xuICBpZiAoJ3N0cmluZycgIT09IHR5cGVvZiBwcmVmaXgpIHByZWZpeCA9ICc/JztcblxuICBmb3IgKGtleSBpbiBvYmopIHtcbiAgICBpZiAoaGFzLmNhbGwob2JqLCBrZXkpKSB7XG4gICAgICB2YWx1ZSA9IG9ialtrZXldO1xuXG4gICAgICAvL1xuICAgICAgLy8gRWRnZSBjYXNlcyB3aGVyZSB3ZSBhY3R1YWxseSB3YW50IHRvIGVuY29kZSB0aGUgdmFsdWUgdG8gYW4gZW1wdHlcbiAgICAgIC8vIHN0cmluZyBpbnN0ZWFkIG9mIHRoZSBzdHJpbmdpZmllZCB2YWx1ZS5cbiAgICAgIC8vXG4gICAgICBpZiAoIXZhbHVlICYmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWYgfHwgaXNOYU4odmFsdWUpKSkge1xuICAgICAgICB2YWx1ZSA9ICcnO1xuICAgICAgfVxuXG4gICAgICBrZXkgPSBlbmNvZGUoa2V5KTtcbiAgICAgIHZhbHVlID0gZW5jb2RlKHZhbHVlKTtcblxuICAgICAgLy9cbiAgICAgIC8vIElmIHdlIGZhaWxlZCB0byBlbmNvZGUgdGhlIHN0cmluZ3MsIHdlIHNob3VsZCBiYWlsIG91dCBhcyB3ZSBkb24ndFxuICAgICAgLy8gd2FudCB0byBhZGQgaW52YWxpZCBzdHJpbmdzIHRvIHRoZSBxdWVyeS5cbiAgICAgIC8vXG4gICAgICBpZiAoa2V5ID09PSBudWxsIHx8IHZhbHVlID09PSBudWxsKSBjb250aW51ZTtcbiAgICAgIHBhaXJzLnB1c2goa2V5ICsnPScrIHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFpcnMubGVuZ3RoID8gcHJlZml4ICsgcGFpcnMuam9pbignJicpIDogJyc7XG59XG5cbi8vXG4vLyBFeHBvc2UgdGhlIG1vZHVsZS5cbi8vXG5leHBvcnRzLnN0cmluZ2lmeSA9IHF1ZXJ5c3RyaW5naWZ5O1xuZXhwb3J0cy5wYXJzZSA9IHF1ZXJ5c3RyaW5nO1xuIiwgIid1c2Ugc3RyaWN0JztcblxudmFyIHJlcXVpcmVkID0gcmVxdWlyZSgncmVxdWlyZXMtcG9ydCcpXG4gICwgcXMgPSByZXF1aXJlKCdxdWVyeXN0cmluZ2lmeScpXG4gICwgY29udHJvbE9yV2hpdGVzcGFjZSA9IC9eW1xceDAwLVxceDIwXFx1MDBhMFxcdTE2ODBcXHUyMDAwLVxcdTIwMGFcXHUyMDI4XFx1MjAyOVxcdTIwMmZcXHUyMDVmXFx1MzAwMFxcdWZlZmZdKy9cbiAgLCBDUkhUTEYgPSAvW1xcblxcclxcdF0vZ1xuICAsIHNsYXNoZXMgPSAvXltBLVphLXpdW0EtWmEtejAtOSstLl0qOlxcL1xcLy9cbiAgLCBwb3J0ID0gLzpcXGQrJC9cbiAgLCBwcm90b2NvbHJlID0gL14oW2Etel1bYS16MC05ListXSo6KT8oXFwvXFwvKT8oW1xcXFwvXSspPyhbXFxTXFxzXSopL2lcbiAgLCB3aW5kb3dzRHJpdmVMZXR0ZXIgPSAvXlthLXpBLVpdOi87XG5cbi8qKlxuICogUmVtb3ZlIGNvbnRyb2wgY2hhcmFjdGVycyBhbmQgd2hpdGVzcGFjZSBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgYSBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHtPYmplY3R8U3RyaW5nfSBzdHIgU3RyaW5nIHRvIHRyaW0uXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBBIG5ldyBzdHJpbmcgcmVwcmVzZW50aW5nIGBzdHJgIHN0cmlwcGVkIG9mIGNvbnRyb2xcbiAqICAgICBjaGFyYWN0ZXJzIGFuZCB3aGl0ZXNwYWNlIGZyb20gaXRzIGJlZ2lubmluZy5cbiAqIEBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gdHJpbUxlZnQoc3RyKSB7XG4gIHJldHVybiAoc3RyID8gc3RyIDogJycpLnRvU3RyaW5nKCkucmVwbGFjZShjb250cm9sT3JXaGl0ZXNwYWNlLCAnJyk7XG59XG5cbi8qKlxuICogVGhlc2UgYXJlIHRoZSBwYXJzZSBydWxlcyBmb3IgdGhlIFVSTCBwYXJzZXIsIGl0IGluZm9ybXMgdGhlIHBhcnNlclxuICogYWJvdXQ6XG4gKlxuICogMC4gVGhlIGNoYXIgaXQgTmVlZHMgdG8gcGFyc2UsIGlmIGl0J3MgYSBzdHJpbmcgaXQgc2hvdWxkIGJlIGRvbmUgdXNpbmdcbiAqICAgIGluZGV4T2YsIFJlZ0V4cCB1c2luZyBleGVjIGFuZCBOYU4gbWVhbnMgc2V0IGFzIGN1cnJlbnQgdmFsdWUuXG4gKiAxLiBUaGUgcHJvcGVydHkgd2Ugc2hvdWxkIHNldCB3aGVuIHBhcnNpbmcgdGhpcyB2YWx1ZS5cbiAqIDIuIEluZGljYXRpb24gaWYgaXQncyBiYWNrd2FyZHMgb3IgZm9yd2FyZCBwYXJzaW5nLCB3aGVuIHNldCBhcyBudW1iZXIgaXQnc1xuICogICAgdGhlIHZhbHVlIG9mIGV4dHJhIGNoYXJzIHRoYXQgc2hvdWxkIGJlIHNwbGl0IG9mZi5cbiAqIDMuIEluaGVyaXQgZnJvbSBsb2NhdGlvbiBpZiBub24gZXhpc3RpbmcgaW4gdGhlIHBhcnNlci5cbiAqIDQuIGB0b0xvd2VyQ2FzZWAgdGhlIHJlc3VsdGluZyB2YWx1ZS5cbiAqL1xudmFyIHJ1bGVzID0gW1xuICBbJyMnLCAnaGFzaCddLCAgICAgICAgICAgICAgICAgICAgICAgIC8vIEV4dHJhY3QgZnJvbSB0aGUgYmFjay5cbiAgWyc/JywgJ3F1ZXJ5J10sICAgICAgICAgICAgICAgICAgICAgICAvLyBFeHRyYWN0IGZyb20gdGhlIGJhY2suXG4gIGZ1bmN0aW9uIHNhbml0aXplKGFkZHJlc3MsIHVybCkgeyAgICAgLy8gU2FuaXRpemUgd2hhdCBpcyBsZWZ0IG9mIHRoZSBhZGRyZXNzXG4gICAgcmV0dXJuIGlzU3BlY2lhbCh1cmwucHJvdG9jb2wpID8gYWRkcmVzcy5yZXBsYWNlKC9cXFxcL2csICcvJykgOiBhZGRyZXNzO1xuICB9LFxuICBbJy8nLCAncGF0aG5hbWUnXSwgICAgICAgICAgICAgICAgICAgIC8vIEV4dHJhY3QgZnJvbSB0aGUgYmFjay5cbiAgWydAJywgJ2F1dGgnLCAxXSwgICAgICAgICAgICAgICAgICAgICAvLyBFeHRyYWN0IGZyb20gdGhlIGZyb250LlxuICBbTmFOLCAnaG9zdCcsIHVuZGVmaW5lZCwgMSwgMV0sICAgICAgIC8vIFNldCBsZWZ0IG92ZXIgdmFsdWUuXG4gIFsvOihcXGQqKSQvLCAncG9ydCcsIHVuZGVmaW5lZCwgMV0sICAgIC8vIFJlZ0V4cCB0aGUgYmFjay5cbiAgW05hTiwgJ2hvc3RuYW1lJywgdW5kZWZpbmVkLCAxLCAxXSAgICAvLyBTZXQgbGVmdCBvdmVyLlxuXTtcblxuLyoqXG4gKiBUaGVzZSBwcm9wZXJ0aWVzIHNob3VsZCBub3QgYmUgY29waWVkIG9yIGluaGVyaXRlZCBmcm9tLiBUaGlzIGlzIG9ubHkgbmVlZGVkXG4gKiBmb3IgYWxsIG5vbiBibG9iIFVSTCdzIGFzIGEgYmxvYiBVUkwgZG9lcyBub3QgaW5jbHVkZSBhIGhhc2gsIG9ubHkgdGhlXG4gKiBvcmlnaW4uXG4gKlxuICogQHR5cGUge09iamVjdH1cbiAqIEBwcml2YXRlXG4gKi9cbnZhciBpZ25vcmUgPSB7IGhhc2g6IDEsIHF1ZXJ5OiAxIH07XG5cbi8qKlxuICogVGhlIGxvY2F0aW9uIG9iamVjdCBkaWZmZXJzIHdoZW4geW91ciBjb2RlIGlzIGxvYWRlZCB0aHJvdWdoIGEgbm9ybWFsIHBhZ2UsXG4gKiBXb3JrZXIgb3IgdGhyb3VnaCBhIHdvcmtlciB1c2luZyBhIGJsb2IuIEFuZCB3aXRoIHRoZSBibG9iYmxlIGJlZ2lucyB0aGVcbiAqIHRyb3VibGUgYXMgdGhlIGxvY2F0aW9uIG9iamVjdCB3aWxsIGNvbnRhaW4gdGhlIFVSTCBvZiB0aGUgYmxvYiwgbm90IHRoZVxuICogbG9jYXRpb24gb2YgdGhlIHBhZ2Ugd2hlcmUgb3VyIGNvZGUgaXMgbG9hZGVkIGluLiBUaGUgYWN0dWFsIG9yaWdpbiBpc1xuICogZW5jb2RlZCBpbiB0aGUgYHBhdGhuYW1lYCBzbyB3ZSBjYW4gdGhhbmtmdWxseSBnZW5lcmF0ZSBhIGdvb2QgXCJkZWZhdWx0XCJcbiAqIGxvY2F0aW9uIGZyb20gaXQgc28gd2UgY2FuIGdlbmVyYXRlIHByb3BlciByZWxhdGl2ZSBVUkwncyBhZ2Fpbi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdHxTdHJpbmd9IGxvYyBPcHRpb25hbCBkZWZhdWx0IGxvY2F0aW9uIG9iamVjdC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IGxvbGNhdGlvbiBvYmplY3QuXG4gKiBAcHVibGljXG4gKi9cbmZ1bmN0aW9uIGxvbGNhdGlvbihsb2MpIHtcbiAgdmFyIGdsb2JhbFZhcjtcblxuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIGdsb2JhbFZhciA9IHdpbmRvdztcbiAgZWxzZSBpZiAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcpIGdsb2JhbFZhciA9IGdsb2JhbDtcbiAgZWxzZSBpZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnKSBnbG9iYWxWYXIgPSBzZWxmO1xuICBlbHNlIGdsb2JhbFZhciA9IHt9O1xuXG4gIHZhciBsb2NhdGlvbiA9IGdsb2JhbFZhci5sb2NhdGlvbiB8fCB7fTtcbiAgbG9jID0gbG9jIHx8IGxvY2F0aW9uO1xuXG4gIHZhciBmaW5hbGRlc3RpbmF0aW9uID0ge31cbiAgICAsIHR5cGUgPSB0eXBlb2YgbG9jXG4gICAgLCBrZXk7XG5cbiAgaWYgKCdibG9iOicgPT09IGxvYy5wcm90b2NvbCkge1xuICAgIGZpbmFsZGVzdGluYXRpb24gPSBuZXcgVXJsKHVuZXNjYXBlKGxvYy5wYXRobmFtZSksIHt9KTtcbiAgfSBlbHNlIGlmICgnc3RyaW5nJyA9PT0gdHlwZSkge1xuICAgIGZpbmFsZGVzdGluYXRpb24gPSBuZXcgVXJsKGxvYywge30pO1xuICAgIGZvciAoa2V5IGluIGlnbm9yZSkgZGVsZXRlIGZpbmFsZGVzdGluYXRpb25ba2V5XTtcbiAgfSBlbHNlIGlmICgnb2JqZWN0JyA9PT0gdHlwZSkge1xuICAgIGZvciAoa2V5IGluIGxvYykge1xuICAgICAgaWYgKGtleSBpbiBpZ25vcmUpIGNvbnRpbnVlO1xuICAgICAgZmluYWxkZXN0aW5hdGlvbltrZXldID0gbG9jW2tleV07XG4gICAgfVxuXG4gICAgaWYgKGZpbmFsZGVzdGluYXRpb24uc2xhc2hlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBmaW5hbGRlc3RpbmF0aW9uLnNsYXNoZXMgPSBzbGFzaGVzLnRlc3QobG9jLmhyZWYpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmaW5hbGRlc3RpbmF0aW9uO1xufVxuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgYSBwcm90b2NvbCBzY2hlbWUgaXMgc3BlY2lhbC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gVGhlIHByb3RvY29sIHNjaGVtZSBvZiB0aGUgVVJMXG4gKiBAcmV0dXJuIHtCb29sZWFufSBgdHJ1ZWAgaWYgdGhlIHByb3RvY29sIHNjaGVtZSBpcyBzcGVjaWFsLCBlbHNlIGBmYWxzZWBcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGlzU3BlY2lhbChzY2hlbWUpIHtcbiAgcmV0dXJuIChcbiAgICBzY2hlbWUgPT09ICdmaWxlOicgfHxcbiAgICBzY2hlbWUgPT09ICdmdHA6JyB8fFxuICAgIHNjaGVtZSA9PT0gJ2h0dHA6JyB8fFxuICAgIHNjaGVtZSA9PT0gJ2h0dHBzOicgfHxcbiAgICBzY2hlbWUgPT09ICd3czonIHx8XG4gICAgc2NoZW1lID09PSAnd3NzOidcbiAgKTtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiBQcm90b2NvbEV4dHJhY3RcbiAqIEB0eXBlIE9iamVjdFxuICogQHByb3BlcnR5IHtTdHJpbmd9IHByb3RvY29sIFByb3RvY29sIG1hdGNoZWQgaW4gdGhlIFVSTCwgaW4gbG93ZXJjYXNlLlxuICogQHByb3BlcnR5IHtCb29sZWFufSBzbGFzaGVzIGB0cnVlYCBpZiBwcm90b2NvbCBpcyBmb2xsb3dlZCBieSBcIi8vXCIsIGVsc2UgYGZhbHNlYC5cbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSByZXN0IFJlc3Qgb2YgdGhlIFVSTCB0aGF0IGlzIG5vdCBwYXJ0IG9mIHRoZSBwcm90b2NvbC5cbiAqL1xuXG4vKipcbiAqIEV4dHJhY3QgcHJvdG9jb2wgaW5mb3JtYXRpb24gZnJvbSBhIFVSTCB3aXRoL3dpdGhvdXQgZG91YmxlIHNsYXNoIChcIi8vXCIpLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBhZGRyZXNzIFVSTCB3ZSB3YW50IHRvIGV4dHJhY3QgZnJvbS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBsb2NhdGlvblxuICogQHJldHVybiB7UHJvdG9jb2xFeHRyYWN0fSBFeHRyYWN0ZWQgaW5mb3JtYXRpb24uXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBleHRyYWN0UHJvdG9jb2woYWRkcmVzcywgbG9jYXRpb24pIHtcbiAgYWRkcmVzcyA9IHRyaW1MZWZ0KGFkZHJlc3MpO1xuICBhZGRyZXNzID0gYWRkcmVzcy5yZXBsYWNlKENSSFRMRiwgJycpO1xuICBsb2NhdGlvbiA9IGxvY2F0aW9uIHx8IHt9O1xuXG4gIHZhciBtYXRjaCA9IHByb3RvY29scmUuZXhlYyhhZGRyZXNzKTtcbiAgdmFyIHByb3RvY29sID0gbWF0Y2hbMV0gPyBtYXRjaFsxXS50b0xvd2VyQ2FzZSgpIDogJyc7XG4gIHZhciBmb3J3YXJkU2xhc2hlcyA9ICEhbWF0Y2hbMl07XG4gIHZhciBvdGhlclNsYXNoZXMgPSAhIW1hdGNoWzNdO1xuICB2YXIgc2xhc2hlc0NvdW50ID0gMDtcbiAgdmFyIHJlc3Q7XG5cbiAgaWYgKGZvcndhcmRTbGFzaGVzKSB7XG4gICAgaWYgKG90aGVyU2xhc2hlcykge1xuICAgICAgcmVzdCA9IG1hdGNoWzJdICsgbWF0Y2hbM10gKyBtYXRjaFs0XTtcbiAgICAgIHNsYXNoZXNDb3VudCA9IG1hdGNoWzJdLmxlbmd0aCArIG1hdGNoWzNdLmxlbmd0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdCA9IG1hdGNoWzJdICsgbWF0Y2hbNF07XG4gICAgICBzbGFzaGVzQ291bnQgPSBtYXRjaFsyXS5sZW5ndGg7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChvdGhlclNsYXNoZXMpIHtcbiAgICAgIHJlc3QgPSBtYXRjaFszXSArIG1hdGNoWzRdO1xuICAgICAgc2xhc2hlc0NvdW50ID0gbWF0Y2hbM10ubGVuZ3RoO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN0ID0gbWF0Y2hbNF1cbiAgICB9XG4gIH1cblxuICBpZiAocHJvdG9jb2wgPT09ICdmaWxlOicpIHtcbiAgICBpZiAoc2xhc2hlc0NvdW50ID49IDIpIHtcbiAgICAgIHJlc3QgPSByZXN0LnNsaWNlKDIpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc1NwZWNpYWwocHJvdG9jb2wpKSB7XG4gICAgcmVzdCA9IG1hdGNoWzRdO1xuICB9IGVsc2UgaWYgKHByb3RvY29sKSB7XG4gICAgaWYgKGZvcndhcmRTbGFzaGVzKSB7XG4gICAgICByZXN0ID0gcmVzdC5zbGljZSgyKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoc2xhc2hlc0NvdW50ID49IDIgJiYgaXNTcGVjaWFsKGxvY2F0aW9uLnByb3RvY29sKSkge1xuICAgIHJlc3QgPSBtYXRjaFs0XTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcHJvdG9jb2w6IHByb3RvY29sLFxuICAgIHNsYXNoZXM6IGZvcndhcmRTbGFzaGVzIHx8IGlzU3BlY2lhbChwcm90b2NvbCksXG4gICAgc2xhc2hlc0NvdW50OiBzbGFzaGVzQ291bnQsXG4gICAgcmVzdDogcmVzdFxuICB9O1xufVxuXG4vKipcbiAqIFJlc29sdmUgYSByZWxhdGl2ZSBVUkwgcGF0aG5hbWUgYWdhaW5zdCBhIGJhc2UgVVJMIHBhdGhuYW1lLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSByZWxhdGl2ZSBQYXRobmFtZSBvZiB0aGUgcmVsYXRpdmUgVVJMLlxuICogQHBhcmFtIHtTdHJpbmd9IGJhc2UgUGF0aG5hbWUgb2YgdGhlIGJhc2UgVVJMLlxuICogQHJldHVybiB7U3RyaW5nfSBSZXNvbHZlZCBwYXRobmFtZS5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmUocmVsYXRpdmUsIGJhc2UpIHtcbiAgaWYgKHJlbGF0aXZlID09PSAnJykgcmV0dXJuIGJhc2U7XG5cbiAgdmFyIHBhdGggPSAoYmFzZSB8fCAnLycpLnNwbGl0KCcvJykuc2xpY2UoMCwgLTEpLmNvbmNhdChyZWxhdGl2ZS5zcGxpdCgnLycpKVxuICAgICwgaSA9IHBhdGgubGVuZ3RoXG4gICAgLCBsYXN0ID0gcGF0aFtpIC0gMV1cbiAgICAsIHVuc2hpZnQgPSBmYWxzZVxuICAgICwgdXAgPSAwO1xuXG4gIHdoaWxlIChpLS0pIHtcbiAgICBpZiAocGF0aFtpXSA9PT0gJy4nKSB7XG4gICAgICBwYXRoLnNwbGljZShpLCAxKTtcbiAgICB9IGVsc2UgaWYgKHBhdGhbaV0gPT09ICcuLicpIHtcbiAgICAgIHBhdGguc3BsaWNlKGksIDEpO1xuICAgICAgdXArKztcbiAgICB9IGVsc2UgaWYgKHVwKSB7XG4gICAgICBpZiAoaSA9PT0gMCkgdW5zaGlmdCA9IHRydWU7XG4gICAgICBwYXRoLnNwbGljZShpLCAxKTtcbiAgICAgIHVwLS07XG4gICAgfVxuICB9XG5cbiAgaWYgKHVuc2hpZnQpIHBhdGgudW5zaGlmdCgnJyk7XG4gIGlmIChsYXN0ID09PSAnLicgfHwgbGFzdCA9PT0gJy4uJykgcGF0aC5wdXNoKCcnKTtcblxuICByZXR1cm4gcGF0aC5qb2luKCcvJyk7XG59XG5cbi8qKlxuICogVGhlIGFjdHVhbCBVUkwgaW5zdGFuY2UuIEluc3RlYWQgb2YgcmV0dXJuaW5nIGFuIG9iamVjdCB3ZSd2ZSBvcHRlZC1pbiB0b1xuICogY3JlYXRlIGFuIGFjdHVhbCBjb25zdHJ1Y3RvciBhcyBpdCdzIG11Y2ggbW9yZSBtZW1vcnkgZWZmaWNpZW50IGFuZFxuICogZmFzdGVyIGFuZCBpdCBwbGVhc2VzIG15IE9DRC5cbiAqXG4gKiBJdCBpcyB3b3J0aCBub3RpbmcgdGhhdCB3ZSBzaG91bGQgbm90IHVzZSBgVVJMYCBhcyBjbGFzcyBuYW1lIHRvIHByZXZlbnRcbiAqIGNsYXNoZXMgd2l0aCB0aGUgZ2xvYmFsIFVSTCBpbnN0YW5jZSB0aGF0IGdvdCBpbnRyb2R1Y2VkIGluIGJyb3dzZXJzLlxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtTdHJpbmd9IGFkZHJlc3MgVVJMIHdlIHdhbnQgdG8gcGFyc2UuXG4gKiBAcGFyYW0ge09iamVjdHxTdHJpbmd9IFtsb2NhdGlvbl0gTG9jYXRpb24gZGVmYXVsdHMgZm9yIHJlbGF0aXZlIHBhdGhzLlxuICogQHBhcmFtIHtCb29sZWFufEZ1bmN0aW9ufSBbcGFyc2VyXSBQYXJzZXIgZm9yIHRoZSBxdWVyeSBzdHJpbmcuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBVcmwoYWRkcmVzcywgbG9jYXRpb24sIHBhcnNlcikge1xuICBhZGRyZXNzID0gdHJpbUxlZnQoYWRkcmVzcyk7XG4gIGFkZHJlc3MgPSBhZGRyZXNzLnJlcGxhY2UoQ1JIVExGLCAnJyk7XG5cbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFVybCkpIHtcbiAgICByZXR1cm4gbmV3IFVybChhZGRyZXNzLCBsb2NhdGlvbiwgcGFyc2VyKTtcbiAgfVxuXG4gIHZhciByZWxhdGl2ZSwgZXh0cmFjdGVkLCBwYXJzZSwgaW5zdHJ1Y3Rpb24sIGluZGV4LCBrZXlcbiAgICAsIGluc3RydWN0aW9ucyA9IHJ1bGVzLnNsaWNlKClcbiAgICAsIHR5cGUgPSB0eXBlb2YgbG9jYXRpb25cbiAgICAsIHVybCA9IHRoaXNcbiAgICAsIGkgPSAwO1xuXG4gIC8vXG4gIC8vIFRoZSBmb2xsb3dpbmcgaWYgc3RhdGVtZW50cyBhbGxvd3MgdGhpcyBtb2R1bGUgdHdvIGhhdmUgY29tcGF0aWJpbGl0eSB3aXRoXG4gIC8vIDIgZGlmZmVyZW50IEFQSTpcbiAgLy9cbiAgLy8gMS4gTm9kZS5qcydzIGB1cmwucGFyc2VgIGFwaSB3aGljaCBhY2NlcHRzIGEgVVJMLCBib29sZWFuIGFzIGFyZ3VtZW50c1xuICAvLyAgICB3aGVyZSB0aGUgYm9vbGVhbiBpbmRpY2F0ZXMgdGhhdCB0aGUgcXVlcnkgc3RyaW5nIHNob3VsZCBhbHNvIGJlIHBhcnNlZC5cbiAgLy9cbiAgLy8gMi4gVGhlIGBVUkxgIGludGVyZmFjZSBvZiB0aGUgYnJvd3NlciB3aGljaCBhY2NlcHRzIGEgVVJMLCBvYmplY3QgYXNcbiAgLy8gICAgYXJndW1lbnRzLiBUaGUgc3VwcGxpZWQgb2JqZWN0IHdpbGwgYmUgdXNlZCBhcyBkZWZhdWx0IHZhbHVlcyAvIGZhbGwtYmFja1xuICAvLyAgICBmb3IgcmVsYXRpdmUgcGF0aHMuXG4gIC8vXG4gIGlmICgnb2JqZWN0JyAhPT0gdHlwZSAmJiAnc3RyaW5nJyAhPT0gdHlwZSkge1xuICAgIHBhcnNlciA9IGxvY2F0aW9uO1xuICAgIGxvY2F0aW9uID0gbnVsbDtcbiAgfVxuXG4gIGlmIChwYXJzZXIgJiYgJ2Z1bmN0aW9uJyAhPT0gdHlwZW9mIHBhcnNlcikgcGFyc2VyID0gcXMucGFyc2U7XG5cbiAgbG9jYXRpb24gPSBsb2xjYXRpb24obG9jYXRpb24pO1xuXG4gIC8vXG4gIC8vIEV4dHJhY3QgcHJvdG9jb2wgaW5mb3JtYXRpb24gYmVmb3JlIHJ1bm5pbmcgdGhlIGluc3RydWN0aW9ucy5cbiAgLy9cbiAgZXh0cmFjdGVkID0gZXh0cmFjdFByb3RvY29sKGFkZHJlc3MgfHwgJycsIGxvY2F0aW9uKTtcbiAgcmVsYXRpdmUgPSAhZXh0cmFjdGVkLnByb3RvY29sICYmICFleHRyYWN0ZWQuc2xhc2hlcztcbiAgdXJsLnNsYXNoZXMgPSBleHRyYWN0ZWQuc2xhc2hlcyB8fCByZWxhdGl2ZSAmJiBsb2NhdGlvbi5zbGFzaGVzO1xuICB1cmwucHJvdG9jb2wgPSBleHRyYWN0ZWQucHJvdG9jb2wgfHwgbG9jYXRpb24ucHJvdG9jb2wgfHwgJyc7XG4gIGFkZHJlc3MgPSBleHRyYWN0ZWQucmVzdDtcblxuICAvL1xuICAvLyBXaGVuIHRoZSBhdXRob3JpdHkgY29tcG9uZW50IGlzIGFic2VudCB0aGUgVVJMIHN0YXJ0cyB3aXRoIGEgcGF0aFxuICAvLyBjb21wb25lbnQuXG4gIC8vXG4gIGlmIChcbiAgICBleHRyYWN0ZWQucHJvdG9jb2wgPT09ICdmaWxlOicgJiYgKFxuICAgICAgZXh0cmFjdGVkLnNsYXNoZXNDb3VudCAhPT0gMiB8fCB3aW5kb3dzRHJpdmVMZXR0ZXIudGVzdChhZGRyZXNzKSkgfHxcbiAgICAoIWV4dHJhY3RlZC5zbGFzaGVzICYmXG4gICAgICAoZXh0cmFjdGVkLnByb3RvY29sIHx8XG4gICAgICAgIGV4dHJhY3RlZC5zbGFzaGVzQ291bnQgPCAyIHx8XG4gICAgICAgICFpc1NwZWNpYWwodXJsLnByb3RvY29sKSkpXG4gICkge1xuICAgIGluc3RydWN0aW9uc1szXSA9IFsvKC4qKS8sICdwYXRobmFtZSddO1xuICB9XG5cbiAgZm9yICg7IGkgPCBpbnN0cnVjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICBpbnN0cnVjdGlvbiA9IGluc3RydWN0aW9uc1tpXTtcblxuICAgIGlmICh0eXBlb2YgaW5zdHJ1Y3Rpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGFkZHJlc3MgPSBpbnN0cnVjdGlvbihhZGRyZXNzLCB1cmwpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgcGFyc2UgPSBpbnN0cnVjdGlvblswXTtcbiAgICBrZXkgPSBpbnN0cnVjdGlvblsxXTtcblxuICAgIGlmIChwYXJzZSAhPT0gcGFyc2UpIHtcbiAgICAgIHVybFtrZXldID0gYWRkcmVzcztcbiAgICB9IGVsc2UgaWYgKCdzdHJpbmcnID09PSB0eXBlb2YgcGFyc2UpIHtcbiAgICAgIGluZGV4ID0gcGFyc2UgPT09ICdAJ1xuICAgICAgICA/IGFkZHJlc3MubGFzdEluZGV4T2YocGFyc2UpXG4gICAgICAgIDogYWRkcmVzcy5pbmRleE9mKHBhcnNlKTtcblxuICAgICAgaWYgKH5pbmRleCkge1xuICAgICAgICBpZiAoJ251bWJlcicgPT09IHR5cGVvZiBpbnN0cnVjdGlvblsyXSkge1xuICAgICAgICAgIHVybFtrZXldID0gYWRkcmVzcy5zbGljZSgwLCBpbmRleCk7XG4gICAgICAgICAgYWRkcmVzcyA9IGFkZHJlc3Muc2xpY2UoaW5kZXggKyBpbnN0cnVjdGlvblsyXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdXJsW2tleV0gPSBhZGRyZXNzLnNsaWNlKGluZGV4KTtcbiAgICAgICAgICBhZGRyZXNzID0gYWRkcmVzcy5zbGljZSgwLCBpbmRleCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKChpbmRleCA9IHBhcnNlLmV4ZWMoYWRkcmVzcykpKSB7XG4gICAgICB1cmxba2V5XSA9IGluZGV4WzFdO1xuICAgICAgYWRkcmVzcyA9IGFkZHJlc3Muc2xpY2UoMCwgaW5kZXguaW5kZXgpO1xuICAgIH1cblxuICAgIHVybFtrZXldID0gdXJsW2tleV0gfHwgKFxuICAgICAgcmVsYXRpdmUgJiYgaW5zdHJ1Y3Rpb25bM10gPyBsb2NhdGlvbltrZXldIHx8ICcnIDogJydcbiAgICApO1xuXG4gICAgLy9cbiAgICAvLyBIb3N0bmFtZSwgaG9zdCBhbmQgcHJvdG9jb2wgc2hvdWxkIGJlIGxvd2VyY2FzZWQgc28gdGhleSBjYW4gYmUgdXNlZCB0b1xuICAgIC8vIGNyZWF0ZSBhIHByb3BlciBgb3JpZ2luYC5cbiAgICAvL1xuICAgIGlmIChpbnN0cnVjdGlvbls0XSkgdXJsW2tleV0gPSB1cmxba2V5XS50b0xvd2VyQ2FzZSgpO1xuICB9XG5cbiAgLy9cbiAgLy8gQWxzbyBwYXJzZSB0aGUgc3VwcGxpZWQgcXVlcnkgc3RyaW5nIGluIHRvIGFuIG9iamVjdC4gSWYgd2UncmUgc3VwcGxpZWRcbiAgLy8gd2l0aCBhIGN1c3RvbSBwYXJzZXIgYXMgZnVuY3Rpb24gdXNlIHRoYXQgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBidWlsZC1pblxuICAvLyBwYXJzZXIuXG4gIC8vXG4gIGlmIChwYXJzZXIpIHVybC5xdWVyeSA9IHBhcnNlcih1cmwucXVlcnkpO1xuXG4gIC8vXG4gIC8vIElmIHRoZSBVUkwgaXMgcmVsYXRpdmUsIHJlc29sdmUgdGhlIHBhdGhuYW1lIGFnYWluc3QgdGhlIGJhc2UgVVJMLlxuICAvL1xuICBpZiAoXG4gICAgICByZWxhdGl2ZVxuICAgICYmIGxvY2F0aW9uLnNsYXNoZXNcbiAgICAmJiB1cmwucGF0aG5hbWUuY2hhckF0KDApICE9PSAnLydcbiAgICAmJiAodXJsLnBhdGhuYW1lICE9PSAnJyB8fCBsb2NhdGlvbi5wYXRobmFtZSAhPT0gJycpXG4gICkge1xuICAgIHVybC5wYXRobmFtZSA9IHJlc29sdmUodXJsLnBhdGhuYW1lLCBsb2NhdGlvbi5wYXRobmFtZSk7XG4gIH1cblxuICAvL1xuICAvLyBEZWZhdWx0IHRvIGEgLyBmb3IgcGF0aG5hbWUgaWYgbm9uZSBleGlzdHMuIFRoaXMgbm9ybWFsaXplcyB0aGUgVVJMXG4gIC8vIHRvIGFsd2F5cyBoYXZlIGEgL1xuICAvL1xuICBpZiAodXJsLnBhdGhuYW1lLmNoYXJBdCgwKSAhPT0gJy8nICYmIGlzU3BlY2lhbCh1cmwucHJvdG9jb2wpKSB7XG4gICAgdXJsLnBhdGhuYW1lID0gJy8nICsgdXJsLnBhdGhuYW1lO1xuICB9XG5cbiAgLy9cbiAgLy8gV2Ugc2hvdWxkIG5vdCBhZGQgcG9ydCBudW1iZXJzIGlmIHRoZXkgYXJlIGFscmVhZHkgdGhlIGRlZmF1bHQgcG9ydCBudW1iZXJcbiAgLy8gZm9yIGEgZ2l2ZW4gcHJvdG9jb2wuIEFzIHRoZSBob3N0IGFsc28gY29udGFpbnMgdGhlIHBvcnQgbnVtYmVyIHdlJ3JlIGdvaW5nXG4gIC8vIG92ZXJyaWRlIGl0IHdpdGggdGhlIGhvc3RuYW1lIHdoaWNoIGNvbnRhaW5zIG5vIHBvcnQgbnVtYmVyLlxuICAvL1xuICBpZiAoIXJlcXVpcmVkKHVybC5wb3J0LCB1cmwucHJvdG9jb2wpKSB7XG4gICAgdXJsLmhvc3QgPSB1cmwuaG9zdG5hbWU7XG4gICAgdXJsLnBvcnQgPSAnJztcbiAgfVxuXG4gIC8vXG4gIC8vIFBhcnNlIGRvd24gdGhlIGBhdXRoYCBmb3IgdGhlIHVzZXJuYW1lIGFuZCBwYXNzd29yZC5cbiAgLy9cbiAgdXJsLnVzZXJuYW1lID0gdXJsLnBhc3N3b3JkID0gJyc7XG5cbiAgaWYgKHVybC5hdXRoKSB7XG4gICAgaW5kZXggPSB1cmwuYXV0aC5pbmRleE9mKCc6Jyk7XG5cbiAgICBpZiAofmluZGV4KSB7XG4gICAgICB1cmwudXNlcm5hbWUgPSB1cmwuYXV0aC5zbGljZSgwLCBpbmRleCk7XG4gICAgICB1cmwudXNlcm5hbWUgPSBlbmNvZGVVUklDb21wb25lbnQoZGVjb2RlVVJJQ29tcG9uZW50KHVybC51c2VybmFtZSkpO1xuXG4gICAgICB1cmwucGFzc3dvcmQgPSB1cmwuYXV0aC5zbGljZShpbmRleCArIDEpO1xuICAgICAgdXJsLnBhc3N3b3JkID0gZW5jb2RlVVJJQ29tcG9uZW50KGRlY29kZVVSSUNvbXBvbmVudCh1cmwucGFzc3dvcmQpKVxuICAgIH0gZWxzZSB7XG4gICAgICB1cmwudXNlcm5hbWUgPSBlbmNvZGVVUklDb21wb25lbnQoZGVjb2RlVVJJQ29tcG9uZW50KHVybC5hdXRoKSk7XG4gICAgfVxuXG4gICAgdXJsLmF1dGggPSB1cmwucGFzc3dvcmQgPyB1cmwudXNlcm5hbWUgKyc6JysgdXJsLnBhc3N3b3JkIDogdXJsLnVzZXJuYW1lO1xuICB9XG5cbiAgdXJsLm9yaWdpbiA9IHVybC5wcm90b2NvbCAhPT0gJ2ZpbGU6JyAmJiBpc1NwZWNpYWwodXJsLnByb3RvY29sKSAmJiB1cmwuaG9zdFxuICAgID8gdXJsLnByb3RvY29sICsnLy8nKyB1cmwuaG9zdFxuICAgIDogJ251bGwnO1xuXG4gIC8vXG4gIC8vIFRoZSBocmVmIGlzIGp1c3QgdGhlIGNvbXBpbGVkIHJlc3VsdC5cbiAgLy9cbiAgdXJsLmhyZWYgPSB1cmwudG9TdHJpbmcoKTtcbn1cblxuLyoqXG4gKiBUaGlzIGlzIGNvbnZlbmllbmNlIG1ldGhvZCBmb3IgY2hhbmdpbmcgcHJvcGVydGllcyBpbiB0aGUgVVJMIGluc3RhbmNlIHRvXG4gKiBpbnN1cmUgdGhhdCB0aGV5IGFsbCBwcm9wYWdhdGUgY29ycmVjdGx5LlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBwYXJ0ICAgICAgICAgIFByb3BlcnR5IHdlIG5lZWQgdG8gYWRqdXN0LlxuICogQHBhcmFtIHtNaXhlZH0gdmFsdWUgICAgICAgICAgVGhlIG5ld2x5IGFzc2lnbmVkIHZhbHVlLlxuICogQHBhcmFtIHtCb29sZWFufEZ1bmN0aW9ufSBmbiAgV2hlbiBzZXR0aW5nIHRoZSBxdWVyeSwgaXQgd2lsbCBiZSB0aGUgZnVuY3Rpb25cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWQgdG8gcGFyc2UgdGhlIHF1ZXJ5LlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hlbiBzZXR0aW5nIHRoZSBwcm90b2NvbCwgZG91YmxlIHNsYXNoIHdpbGwgYmVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZWQgZnJvbSB0aGUgZmluYWwgdXJsIGlmIGl0IGlzIHRydWUuXG4gKiBAcmV0dXJucyB7VVJMfSBVUkwgaW5zdGFuY2UgZm9yIGNoYWluaW5nLlxuICogQHB1YmxpY1xuICovXG5mdW5jdGlvbiBzZXQocGFydCwgdmFsdWUsIGZuKSB7XG4gIHZhciB1cmwgPSB0aGlzO1xuXG4gIHN3aXRjaCAocGFydCkge1xuICAgIGNhc2UgJ3F1ZXJ5JzpcbiAgICAgIGlmICgnc3RyaW5nJyA9PT0gdHlwZW9mIHZhbHVlICYmIHZhbHVlLmxlbmd0aCkge1xuICAgICAgICB2YWx1ZSA9IChmbiB8fCBxcy5wYXJzZSkodmFsdWUpO1xuICAgICAgfVxuXG4gICAgICB1cmxbcGFydF0gPSB2YWx1ZTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAncG9ydCc6XG4gICAgICB1cmxbcGFydF0gPSB2YWx1ZTtcblxuICAgICAgaWYgKCFyZXF1aXJlZCh2YWx1ZSwgdXJsLnByb3RvY29sKSkge1xuICAgICAgICB1cmwuaG9zdCA9IHVybC5ob3N0bmFtZTtcbiAgICAgICAgdXJsW3BhcnRdID0gJyc7XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlKSB7XG4gICAgICAgIHVybC5ob3N0ID0gdXJsLmhvc3RuYW1lICsnOicrIHZhbHVlO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2hvc3RuYW1lJzpcbiAgICAgIHVybFtwYXJ0XSA9IHZhbHVlO1xuXG4gICAgICBpZiAodXJsLnBvcnQpIHZhbHVlICs9ICc6JysgdXJsLnBvcnQ7XG4gICAgICB1cmwuaG9zdCA9IHZhbHVlO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdob3N0JzpcbiAgICAgIHVybFtwYXJ0XSA9IHZhbHVlO1xuXG4gICAgICBpZiAocG9ydC50ZXN0KHZhbHVlKSkge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLnNwbGl0KCc6Jyk7XG4gICAgICAgIHVybC5wb3J0ID0gdmFsdWUucG9wKCk7XG4gICAgICAgIHVybC5ob3N0bmFtZSA9IHZhbHVlLmpvaW4oJzonKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVybC5ob3N0bmFtZSA9IHZhbHVlO1xuICAgICAgICB1cmwucG9ydCA9ICcnO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3Byb3RvY29sJzpcbiAgICAgIHVybC5wcm90b2NvbCA9IHZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gICAgICB1cmwuc2xhc2hlcyA9ICFmbjtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAncGF0aG5hbWUnOlxuICAgIGNhc2UgJ2hhc2gnOlxuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIHZhciBjaGFyID0gcGFydCA9PT0gJ3BhdGhuYW1lJyA/ICcvJyA6ICcjJztcbiAgICAgICAgdXJsW3BhcnRdID0gdmFsdWUuY2hhckF0KDApICE9PSBjaGFyID8gY2hhciArIHZhbHVlIDogdmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB1cmxbcGFydF0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAndXNlcm5hbWUnOlxuICAgIGNhc2UgJ3Bhc3N3b3JkJzpcbiAgICAgIHVybFtwYXJ0XSA9IGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2F1dGgnOlxuICAgICAgdmFyIGluZGV4ID0gdmFsdWUuaW5kZXhPZignOicpO1xuXG4gICAgICBpZiAofmluZGV4KSB7XG4gICAgICAgIHVybC51c2VybmFtZSA9IHZhbHVlLnNsaWNlKDAsIGluZGV4KTtcbiAgICAgICAgdXJsLnVzZXJuYW1lID0gZW5jb2RlVVJJQ29tcG9uZW50KGRlY29kZVVSSUNvbXBvbmVudCh1cmwudXNlcm5hbWUpKTtcblxuICAgICAgICB1cmwucGFzc3dvcmQgPSB2YWx1ZS5zbGljZShpbmRleCArIDEpO1xuICAgICAgICB1cmwucGFzc3dvcmQgPSBlbmNvZGVVUklDb21wb25lbnQoZGVjb2RlVVJJQ29tcG9uZW50KHVybC5wYXNzd29yZCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdXJsLnVzZXJuYW1lID0gZW5jb2RlVVJJQ29tcG9uZW50KGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkpO1xuICAgICAgfVxuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBydWxlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBpbnMgPSBydWxlc1tpXTtcblxuICAgIGlmIChpbnNbNF0pIHVybFtpbnNbMV1dID0gdXJsW2luc1sxXV0udG9Mb3dlckNhc2UoKTtcbiAgfVxuXG4gIHVybC5hdXRoID0gdXJsLnBhc3N3b3JkID8gdXJsLnVzZXJuYW1lICsnOicrIHVybC5wYXNzd29yZCA6IHVybC51c2VybmFtZTtcblxuICB1cmwub3JpZ2luID0gdXJsLnByb3RvY29sICE9PSAnZmlsZTonICYmIGlzU3BlY2lhbCh1cmwucHJvdG9jb2wpICYmIHVybC5ob3N0XG4gICAgPyB1cmwucHJvdG9jb2wgKycvLycrIHVybC5ob3N0XG4gICAgOiAnbnVsbCc7XG5cbiAgdXJsLmhyZWYgPSB1cmwudG9TdHJpbmcoKTtcblxuICByZXR1cm4gdXJsO1xufVxuXG4vKipcbiAqIFRyYW5zZm9ybSB0aGUgcHJvcGVydGllcyBiYWNrIGluIHRvIGEgdmFsaWQgYW5kIGZ1bGwgVVJMIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdHJpbmdpZnkgT3B0aW9uYWwgcXVlcnkgc3RyaW5naWZ5IGZ1bmN0aW9uLlxuICogQHJldHVybnMge1N0cmluZ30gQ29tcGlsZWQgdmVyc2lvbiBvZiB0aGUgVVJMLlxuICogQHB1YmxpY1xuICovXG5mdW5jdGlvbiB0b1N0cmluZyhzdHJpbmdpZnkpIHtcbiAgaWYgKCFzdHJpbmdpZnkgfHwgJ2Z1bmN0aW9uJyAhPT0gdHlwZW9mIHN0cmluZ2lmeSkgc3RyaW5naWZ5ID0gcXMuc3RyaW5naWZ5O1xuXG4gIHZhciBxdWVyeVxuICAgICwgdXJsID0gdGhpc1xuICAgICwgaG9zdCA9IHVybC5ob3N0XG4gICAgLCBwcm90b2NvbCA9IHVybC5wcm90b2NvbDtcblxuICBpZiAocHJvdG9jb2wgJiYgcHJvdG9jb2wuY2hhckF0KHByb3RvY29sLmxlbmd0aCAtIDEpICE9PSAnOicpIHByb3RvY29sICs9ICc6JztcblxuICB2YXIgcmVzdWx0ID1cbiAgICBwcm90b2NvbCArXG4gICAgKCh1cmwucHJvdG9jb2wgJiYgdXJsLnNsYXNoZXMpIHx8IGlzU3BlY2lhbCh1cmwucHJvdG9jb2wpID8gJy8vJyA6ICcnKTtcblxuICBpZiAodXJsLnVzZXJuYW1lKSB7XG4gICAgcmVzdWx0ICs9IHVybC51c2VybmFtZTtcbiAgICBpZiAodXJsLnBhc3N3b3JkKSByZXN1bHQgKz0gJzonKyB1cmwucGFzc3dvcmQ7XG4gICAgcmVzdWx0ICs9ICdAJztcbiAgfSBlbHNlIGlmICh1cmwucGFzc3dvcmQpIHtcbiAgICByZXN1bHQgKz0gJzonKyB1cmwucGFzc3dvcmQ7XG4gICAgcmVzdWx0ICs9ICdAJztcbiAgfSBlbHNlIGlmIChcbiAgICB1cmwucHJvdG9jb2wgIT09ICdmaWxlOicgJiZcbiAgICBpc1NwZWNpYWwodXJsLnByb3RvY29sKSAmJlxuICAgICFob3N0ICYmXG4gICAgdXJsLnBhdGhuYW1lICE9PSAnLydcbiAgKSB7XG4gICAgLy9cbiAgICAvLyBBZGQgYmFjayB0aGUgZW1wdHkgdXNlcmluZm8sIG90aGVyd2lzZSB0aGUgb3JpZ2luYWwgaW52YWxpZCBVUkxcbiAgICAvLyBtaWdodCBiZSB0cmFuc2Zvcm1lZCBpbnRvIGEgdmFsaWQgb25lIHdpdGggYHVybC5wYXRobmFtZWAgYXMgaG9zdC5cbiAgICAvL1xuICAgIHJlc3VsdCArPSAnQCc7XG4gIH1cblxuICAvL1xuICAvLyBUcmFpbGluZyBjb2xvbiBpcyByZW1vdmVkIGZyb20gYHVybC5ob3N0YCB3aGVuIGl0IGlzIHBhcnNlZC4gSWYgaXQgc3RpbGxcbiAgLy8gZW5kcyB3aXRoIGEgY29sb24sIHRoZW4gYWRkIGJhY2sgdGhlIHRyYWlsaW5nIGNvbG9uIHRoYXQgd2FzIHJlbW92ZWQuIFRoaXNcbiAgLy8gcHJldmVudHMgYW4gaW52YWxpZCBVUkwgZnJvbSBiZWluZyB0cmFuc2Zvcm1lZCBpbnRvIGEgdmFsaWQgb25lLlxuICAvL1xuICBpZiAoaG9zdFtob3N0Lmxlbmd0aCAtIDFdID09PSAnOicgfHwgKHBvcnQudGVzdCh1cmwuaG9zdG5hbWUpICYmICF1cmwucG9ydCkpIHtcbiAgICBob3N0ICs9ICc6JztcbiAgfVxuXG4gIHJlc3VsdCArPSBob3N0ICsgdXJsLnBhdGhuYW1lO1xuXG4gIHF1ZXJ5ID0gJ29iamVjdCcgPT09IHR5cGVvZiB1cmwucXVlcnkgPyBzdHJpbmdpZnkodXJsLnF1ZXJ5KSA6IHVybC5xdWVyeTtcbiAgaWYgKHF1ZXJ5KSByZXN1bHQgKz0gJz8nICE9PSBxdWVyeS5jaGFyQXQoMCkgPyAnPycrIHF1ZXJ5IDogcXVlcnk7XG5cbiAgaWYgKHVybC5oYXNoKSByZXN1bHQgKz0gdXJsLmhhc2g7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuVXJsLnByb3RvdHlwZSA9IHsgc2V0OiBzZXQsIHRvU3RyaW5nOiB0b1N0cmluZyB9O1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBVUkwgcGFyc2VyIGFuZCBzb21lIGFkZGl0aW9uYWwgcHJvcGVydGllcyB0aGF0IG1pZ2h0IGJlIHVzZWZ1bCBmb3Jcbi8vIG90aGVycyBvciB0ZXN0aW5nLlxuLy9cblVybC5leHRyYWN0UHJvdG9jb2wgPSBleHRyYWN0UHJvdG9jb2w7XG5VcmwubG9jYXRpb24gPSBsb2xjYXRpb247XG5VcmwudHJpbUxlZnQgPSB0cmltTGVmdDtcblVybC5xcyA9IHFzO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFVybDtcbiIsICIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuXHR2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5cbnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KCk7XG5cbnZhciBfcmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xuXG52YXIgX3JlYWN0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3JlYWN0KTtcblxudmFyIF9wcm9wVHlwZXMgPSByZXF1aXJlKCdwcm9wLXR5cGVzJyk7XG5cbnZhciBfcHJvcFR5cGVzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Byb3BUeXBlcyk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhvYmosIGtleXMpIHsgdmFyIHRhcmdldCA9IHt9OyBmb3IgKHZhciBpIGluIG9iaikgeyBpZiAoa2V5cy5pbmRleE9mKGkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGkpKSBjb250aW51ZTsgdGFyZ2V0W2ldID0gb2JqW2ldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSA/IGNhbGwgOiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxuXG52YXIgc2l6ZXJTdHlsZSA9IHtcblx0cG9zaXRpb246ICdhYnNvbHV0ZScsXG5cdHRvcDogMCxcblx0bGVmdDogMCxcblx0dmlzaWJpbGl0eTogJ2hpZGRlbicsXG5cdGhlaWdodDogMCxcblx0b3ZlcmZsb3c6ICdzY3JvbGwnLFxuXHR3aGl0ZVNwYWNlOiAncHJlJ1xufTtcblxudmFyIElOUFVUX1BST1BTX0JMQUNLTElTVCA9IFsnZXh0cmFXaWR0aCcsICdpbmplY3RTdHlsZXMnLCAnaW5wdXRDbGFzc05hbWUnLCAnaW5wdXRSZWYnLCAnaW5wdXRTdHlsZScsICdtaW5XaWR0aCcsICdvbkF1dG9zaXplJywgJ3BsYWNlaG9sZGVySXNNaW5XaWR0aCddO1xuXG52YXIgY2xlYW5JbnB1dFByb3BzID0gZnVuY3Rpb24gY2xlYW5JbnB1dFByb3BzKGlucHV0UHJvcHMpIHtcblx0SU5QVVRfUFJPUFNfQkxBQ0tMSVNULmZvckVhY2goZnVuY3Rpb24gKGZpZWxkKSB7XG5cdFx0cmV0dXJuIGRlbGV0ZSBpbnB1dFByb3BzW2ZpZWxkXTtcblx0fSk7XG5cdHJldHVybiBpbnB1dFByb3BzO1xufTtcblxudmFyIGNvcHlTdHlsZXMgPSBmdW5jdGlvbiBjb3B5U3R5bGVzKHN0eWxlcywgbm9kZSkge1xuXHRub2RlLnN0eWxlLmZvbnRTaXplID0gc3R5bGVzLmZvbnRTaXplO1xuXHRub2RlLnN0eWxlLmZvbnRGYW1pbHkgPSBzdHlsZXMuZm9udEZhbWlseTtcblx0bm9kZS5zdHlsZS5mb250V2VpZ2h0ID0gc3R5bGVzLmZvbnRXZWlnaHQ7XG5cdG5vZGUuc3R5bGUuZm9udFN0eWxlID0gc3R5bGVzLmZvbnRTdHlsZTtcblx0bm9kZS5zdHlsZS5sZXR0ZXJTcGFjaW5nID0gc3R5bGVzLmxldHRlclNwYWNpbmc7XG5cdG5vZGUuc3R5bGUudGV4dFRyYW5zZm9ybSA9IHN0eWxlcy50ZXh0VHJhbnNmb3JtO1xufTtcblxudmFyIGlzSUUgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cubmF2aWdhdG9yID8gL01TSUUgfFRyaWRlbnRcXC98RWRnZVxcLy8udGVzdCh3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCkgOiBmYWxzZTtcblxudmFyIGdlbmVyYXRlSWQgPSBmdW5jdGlvbiBnZW5lcmF0ZUlkKCkge1xuXHQvLyB3ZSBvbmx5IG5lZWQgYW4gYXV0by1nZW5lcmF0ZWQgSUQgZm9yIHN0eWxlc2hlZXQgaW5qZWN0aW9uLCB3aGljaCBpcyBvbmx5XG5cdC8vIHVzZWQgZm9yIElFLiBzbyBpZiB0aGUgYnJvd3NlciBpcyBub3QgSUUsIHRoaXMgc2hvdWxkIHJldHVybiB1bmRlZmluZWQuXG5cdHJldHVybiBpc0lFID8gJ18nICsgTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDIsIDEyKSA6IHVuZGVmaW5lZDtcbn07XG5cbnZhciBBdXRvc2l6ZUlucHV0ID0gZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcblx0X2luaGVyaXRzKEF1dG9zaXplSW5wdXQsIF9Db21wb25lbnQpO1xuXG5cdF9jcmVhdGVDbGFzcyhBdXRvc2l6ZUlucHV0LCBudWxsLCBbe1xuXHRcdGtleTogJ2dldERlcml2ZWRTdGF0ZUZyb21Qcm9wcycsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhwcm9wcywgc3RhdGUpIHtcblx0XHRcdHZhciBpZCA9IHByb3BzLmlkO1xuXG5cdFx0XHRyZXR1cm4gaWQgIT09IHN0YXRlLnByZXZJZCA/IHsgaW5wdXRJZDogaWQgfHwgZ2VuZXJhdGVJZCgpLCBwcmV2SWQ6IGlkIH0gOiBudWxsO1xuXHRcdH1cblx0fV0pO1xuXG5cdGZ1bmN0aW9uIEF1dG9zaXplSW5wdXQocHJvcHMpIHtcblx0XHRfY2xhc3NDYWxsQ2hlY2sodGhpcywgQXV0b3NpemVJbnB1dCk7XG5cblx0XHR2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoQXV0b3NpemVJbnB1dC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKEF1dG9zaXplSW5wdXQpKS5jYWxsKHRoaXMsIHByb3BzKSk7XG5cblx0XHRfdGhpcy5pbnB1dFJlZiA9IGZ1bmN0aW9uIChlbCkge1xuXHRcdFx0X3RoaXMuaW5wdXQgPSBlbDtcblx0XHRcdGlmICh0eXBlb2YgX3RoaXMucHJvcHMuaW5wdXRSZWYgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0X3RoaXMucHJvcHMuaW5wdXRSZWYoZWwpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRfdGhpcy5wbGFjZUhvbGRlclNpemVyUmVmID0gZnVuY3Rpb24gKGVsKSB7XG5cdFx0XHRfdGhpcy5wbGFjZUhvbGRlclNpemVyID0gZWw7XG5cdFx0fTtcblxuXHRcdF90aGlzLnNpemVyUmVmID0gZnVuY3Rpb24gKGVsKSB7XG5cdFx0XHRfdGhpcy5zaXplciA9IGVsO1xuXHRcdH07XG5cblx0XHRfdGhpcy5zdGF0ZSA9IHtcblx0XHRcdGlucHV0V2lkdGg6IHByb3BzLm1pbldpZHRoLFxuXHRcdFx0aW5wdXRJZDogcHJvcHMuaWQgfHwgZ2VuZXJhdGVJZCgpLFxuXHRcdFx0cHJldklkOiBwcm9wcy5pZFxuXHRcdH07XG5cdFx0cmV0dXJuIF90aGlzO1xuXHR9XG5cblx0X2NyZWF0ZUNsYXNzKEF1dG9zaXplSW5wdXQsIFt7XG5cdFx0a2V5OiAnY29tcG9uZW50RGlkTW91bnQnLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcblx0XHRcdHRoaXMubW91bnRlZCA9IHRydWU7XG5cdFx0XHR0aGlzLmNvcHlJbnB1dFN0eWxlcygpO1xuXHRcdFx0dGhpcy51cGRhdGVJbnB1dFdpZHRoKCk7XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAnY29tcG9uZW50RGlkVXBkYXRlJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKSB7XG5cdFx0XHRpZiAocHJldlN0YXRlLmlucHV0V2lkdGggIT09IHRoaXMuc3RhdGUuaW5wdXRXaWR0aCkge1xuXHRcdFx0XHRpZiAodHlwZW9mIHRoaXMucHJvcHMub25BdXRvc2l6ZSA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHRcdHRoaXMucHJvcHMub25BdXRvc2l6ZSh0aGlzLnN0YXRlLmlucHV0V2lkdGgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnVwZGF0ZUlucHV0V2lkdGgoKTtcblx0XHR9XG5cdH0sIHtcblx0XHRrZXk6ICdjb21wb25lbnRXaWxsVW5tb3VudCcsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuXHRcdFx0dGhpcy5tb3VudGVkID0gZmFsc2U7XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAnY29weUlucHV0U3R5bGVzJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gY29weUlucHV0U3R5bGVzKCkge1xuXHRcdFx0aWYgKCF0aGlzLm1vdW50ZWQgfHwgIXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdHZhciBpbnB1dFN0eWxlcyA9IHRoaXMuaW5wdXQgJiYgd2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5pbnB1dCk7XG5cdFx0XHRpZiAoIWlucHV0U3R5bGVzKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGNvcHlTdHlsZXMoaW5wdXRTdHlsZXMsIHRoaXMuc2l6ZXIpO1xuXHRcdFx0aWYgKHRoaXMucGxhY2VIb2xkZXJTaXplcikge1xuXHRcdFx0XHRjb3B5U3R5bGVzKGlucHV0U3R5bGVzLCB0aGlzLnBsYWNlSG9sZGVyU2l6ZXIpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSwge1xuXHRcdGtleTogJ3VwZGF0ZUlucHV0V2lkdGgnLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiB1cGRhdGVJbnB1dFdpZHRoKCkge1xuXHRcdFx0aWYgKCF0aGlzLm1vdW50ZWQgfHwgIXRoaXMuc2l6ZXIgfHwgdHlwZW9mIHRoaXMuc2l6ZXIuc2Nyb2xsV2lkdGggPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdHZhciBuZXdJbnB1dFdpZHRoID0gdm9pZCAwO1xuXHRcdFx0aWYgKHRoaXMucHJvcHMucGxhY2Vob2xkZXIgJiYgKCF0aGlzLnByb3BzLnZhbHVlIHx8IHRoaXMucHJvcHMudmFsdWUgJiYgdGhpcy5wcm9wcy5wbGFjZWhvbGRlcklzTWluV2lkdGgpKSB7XG5cdFx0XHRcdG5ld0lucHV0V2lkdGggPSBNYXRoLm1heCh0aGlzLnNpemVyLnNjcm9sbFdpZHRoLCB0aGlzLnBsYWNlSG9sZGVyU2l6ZXIuc2Nyb2xsV2lkdGgpICsgMjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG5ld0lucHV0V2lkdGggPSB0aGlzLnNpemVyLnNjcm9sbFdpZHRoICsgMjtcblx0XHRcdH1cblx0XHRcdC8vIGFkZCBleHRyYVdpZHRoIHRvIHRoZSBkZXRlY3RlZCB3aWR0aC4gZm9yIG51bWJlciB0eXBlcywgdGhpcyBkZWZhdWx0cyB0byAxNiB0byBhbGxvdyBmb3IgdGhlIHN0ZXBwZXIgVUlcblx0XHRcdHZhciBleHRyYVdpZHRoID0gdGhpcy5wcm9wcy50eXBlID09PSAnbnVtYmVyJyAmJiB0aGlzLnByb3BzLmV4dHJhV2lkdGggPT09IHVuZGVmaW5lZCA/IDE2IDogcGFyc2VJbnQodGhpcy5wcm9wcy5leHRyYVdpZHRoKSB8fCAwO1xuXHRcdFx0bmV3SW5wdXRXaWR0aCArPSBleHRyYVdpZHRoO1xuXHRcdFx0aWYgKG5ld0lucHV0V2lkdGggPCB0aGlzLnByb3BzLm1pbldpZHRoKSB7XG5cdFx0XHRcdG5ld0lucHV0V2lkdGggPSB0aGlzLnByb3BzLm1pbldpZHRoO1xuXHRcdFx0fVxuXHRcdFx0aWYgKG5ld0lucHV0V2lkdGggIT09IHRoaXMuc3RhdGUuaW5wdXRXaWR0aCkge1xuXHRcdFx0XHR0aGlzLnNldFN0YXRlKHtcblx0XHRcdFx0XHRpbnB1dFdpZHRoOiBuZXdJbnB1dFdpZHRoXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fSwge1xuXHRcdGtleTogJ2dldElucHV0Jyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gZ2V0SW5wdXQoKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5pbnB1dDtcblx0XHR9XG5cdH0sIHtcblx0XHRrZXk6ICdmb2N1cycsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGZvY3VzKCkge1xuXHRcdFx0dGhpcy5pbnB1dC5mb2N1cygpO1xuXHRcdH1cblx0fSwge1xuXHRcdGtleTogJ2JsdXInLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiBibHVyKCkge1xuXHRcdFx0dGhpcy5pbnB1dC5ibHVyKCk7XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAnc2VsZWN0Jyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gc2VsZWN0KCkge1xuXHRcdFx0dGhpcy5pbnB1dC5zZWxlY3QoKTtcblx0XHR9XG5cdH0sIHtcblx0XHRrZXk6ICdyZW5kZXJTdHlsZXMnLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiByZW5kZXJTdHlsZXMoKSB7XG5cdFx0XHQvLyB0aGlzIG1ldGhvZCBpbmplY3RzIHN0eWxlcyB0byBoaWRlIElFJ3MgY2xlYXIgaW5kaWNhdG9yLCB3aGljaCBtZXNzZXNcblx0XHRcdC8vIHdpdGggaW5wdXQgc2l6ZSBkZXRlY3Rpb24uIHRoZSBzdHlsZXNoZWV0IGlzIG9ubHkgaW5qZWN0ZWQgd2hlbiB0aGVcblx0XHRcdC8vIGJyb3dzZXIgaXMgSUUsIGFuZCBjYW4gYWxzbyBiZSBkaXNhYmxlZCBieSB0aGUgYGluamVjdFN0eWxlc2AgcHJvcC5cblx0XHRcdHZhciBpbmplY3RTdHlsZXMgPSB0aGlzLnByb3BzLmluamVjdFN0eWxlcztcblxuXHRcdFx0cmV0dXJuIGlzSUUgJiYgaW5qZWN0U3R5bGVzID8gX3JlYWN0Mi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJywgeyBkYW5nZXJvdXNseVNldElubmVySFRNTDoge1xuXHRcdFx0XHRcdF9faHRtbDogJ2lucHV0IycgKyB0aGlzLnN0YXRlLmlucHV0SWQgKyAnOjotbXMtY2xlYXIge2Rpc3BsYXk6IG5vbmU7fSdcblx0XHRcdFx0fSB9KSA6IG51bGw7XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAncmVuZGVyJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuXHRcdFx0dmFyIHNpemVyVmFsdWUgPSBbdGhpcy5wcm9wcy5kZWZhdWx0VmFsdWUsIHRoaXMucHJvcHMudmFsdWUsICcnXS5yZWR1Y2UoZnVuY3Rpb24gKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRWYWx1ZSkge1xuXHRcdFx0XHRpZiAocHJldmlvdXNWYWx1ZSAhPT0gbnVsbCAmJiBwcmV2aW91c1ZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRyZXR1cm4gcHJldmlvdXNWYWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gY3VycmVudFZhbHVlO1xuXHRcdFx0fSk7XG5cblx0XHRcdHZhciB3cmFwcGVyU3R5bGUgPSBfZXh0ZW5kcyh7fSwgdGhpcy5wcm9wcy5zdHlsZSk7XG5cdFx0XHRpZiAoIXdyYXBwZXJTdHlsZS5kaXNwbGF5KSB3cmFwcGVyU3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtYmxvY2snO1xuXG5cdFx0XHR2YXIgaW5wdXRTdHlsZSA9IF9leHRlbmRzKHtcblx0XHRcdFx0Ym94U2l6aW5nOiAnY29udGVudC1ib3gnLFxuXHRcdFx0XHR3aWR0aDogdGhpcy5zdGF0ZS5pbnB1dFdpZHRoICsgJ3B4J1xuXHRcdFx0fSwgdGhpcy5wcm9wcy5pbnB1dFN0eWxlKTtcblxuXHRcdFx0dmFyIGlucHV0UHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXModGhpcy5wcm9wcywgW10pO1xuXG5cdFx0XHRjbGVhbklucHV0UHJvcHMoaW5wdXRQcm9wcyk7XG5cdFx0XHRpbnB1dFByb3BzLmNsYXNzTmFtZSA9IHRoaXMucHJvcHMuaW5wdXRDbGFzc05hbWU7XG5cdFx0XHRpbnB1dFByb3BzLmlkID0gdGhpcy5zdGF0ZS5pbnB1dElkO1xuXHRcdFx0aW5wdXRQcm9wcy5zdHlsZSA9IGlucHV0U3R5bGU7XG5cblx0XHRcdHJldHVybiBfcmVhY3QyLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcblx0XHRcdFx0J2RpdicsXG5cdFx0XHRcdHsgY2xhc3NOYW1lOiB0aGlzLnByb3BzLmNsYXNzTmFtZSwgc3R5bGU6IHdyYXBwZXJTdHlsZSB9LFxuXHRcdFx0XHR0aGlzLnJlbmRlclN0eWxlcygpLFxuXHRcdFx0XHRfcmVhY3QyLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgnaW5wdXQnLCBfZXh0ZW5kcyh7fSwgaW5wdXRQcm9wcywgeyByZWY6IHRoaXMuaW5wdXRSZWYgfSkpLFxuXHRcdFx0XHRfcmVhY3QyLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcblx0XHRcdFx0XHQnZGl2Jyxcblx0XHRcdFx0XHR7IHJlZjogdGhpcy5zaXplclJlZiwgc3R5bGU6IHNpemVyU3R5bGUgfSxcblx0XHRcdFx0XHRzaXplclZhbHVlXG5cdFx0XHRcdCksXG5cdFx0XHRcdHRoaXMucHJvcHMucGxhY2Vob2xkZXIgPyBfcmVhY3QyLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcblx0XHRcdFx0XHQnZGl2Jyxcblx0XHRcdFx0XHR7IHJlZjogdGhpcy5wbGFjZUhvbGRlclNpemVyUmVmLCBzdHlsZTogc2l6ZXJTdHlsZSB9LFxuXHRcdFx0XHRcdHRoaXMucHJvcHMucGxhY2Vob2xkZXJcblx0XHRcdFx0KSA6IG51bGxcblx0XHRcdCk7XG5cdFx0fVxuXHR9XSk7XG5cblx0cmV0dXJuIEF1dG9zaXplSW5wdXQ7XG59KF9yZWFjdC5Db21wb25lbnQpO1xuXG5BdXRvc2l6ZUlucHV0LnByb3BUeXBlcyA9IHtcblx0Y2xhc3NOYW1lOiBfcHJvcFR5cGVzMi5kZWZhdWx0LnN0cmluZywgLy8gY2xhc3NOYW1lIGZvciB0aGUgb3V0ZXIgZWxlbWVudFxuXHRkZWZhdWx0VmFsdWU6IF9wcm9wVHlwZXMyLmRlZmF1bHQuYW55LCAvLyBkZWZhdWx0IGZpZWxkIHZhbHVlXG5cdGV4dHJhV2lkdGg6IF9wcm9wVHlwZXMyLmRlZmF1bHQub25lT2ZUeXBlKFsvLyBhZGRpdGlvbmFsIHdpZHRoIGZvciBpbnB1dCBlbGVtZW50XG5cdF9wcm9wVHlwZXMyLmRlZmF1bHQubnVtYmVyLCBfcHJvcFR5cGVzMi5kZWZhdWx0LnN0cmluZ10pLFxuXHRpZDogX3Byb3BUeXBlczIuZGVmYXVsdC5zdHJpbmcsIC8vIGlkIHRvIHVzZSBmb3IgdGhlIGlucHV0LCBjYW4gYmUgc2V0IGZvciBjb25zaXN0ZW50IHNuYXBzaG90c1xuXHRpbmplY3RTdHlsZXM6IF9wcm9wVHlwZXMyLmRlZmF1bHQuYm9vbCwgLy8gaW5qZWN0IHRoZSBjdXN0b20gc3R5bGVzaGVldCB0byBoaWRlIGNsZWFyIFVJLCBkZWZhdWx0cyB0byB0cnVlXG5cdGlucHV0Q2xhc3NOYW1lOiBfcHJvcFR5cGVzMi5kZWZhdWx0LnN0cmluZywgLy8gY2xhc3NOYW1lIGZvciB0aGUgaW5wdXQgZWxlbWVudFxuXHRpbnB1dFJlZjogX3Byb3BUeXBlczIuZGVmYXVsdC5mdW5jLCAvLyByZWYgY2FsbGJhY2sgZm9yIHRoZSBpbnB1dCBlbGVtZW50XG5cdGlucHV0U3R5bGU6IF9wcm9wVHlwZXMyLmRlZmF1bHQub2JqZWN0LCAvLyBjc3Mgc3R5bGVzIGZvciB0aGUgaW5wdXQgZWxlbWVudFxuXHRtaW5XaWR0aDogX3Byb3BUeXBlczIuZGVmYXVsdC5vbmVPZlR5cGUoWy8vIG1pbmltdW0gd2lkdGggZm9yIGlucHV0IGVsZW1lbnRcblx0X3Byb3BUeXBlczIuZGVmYXVsdC5udW1iZXIsIF9wcm9wVHlwZXMyLmRlZmF1bHQuc3RyaW5nXSksXG5cdG9uQXV0b3NpemU6IF9wcm9wVHlwZXMyLmRlZmF1bHQuZnVuYywgLy8gb25BdXRvc2l6ZSBoYW5kbGVyOiBmdW5jdGlvbihuZXdXaWR0aCkge31cblx0b25DaGFuZ2U6IF9wcm9wVHlwZXMyLmRlZmF1bHQuZnVuYywgLy8gb25DaGFuZ2UgaGFuZGxlcjogZnVuY3Rpb24oZXZlbnQpIHt9XG5cdHBsYWNlaG9sZGVyOiBfcHJvcFR5cGVzMi5kZWZhdWx0LnN0cmluZywgLy8gcGxhY2Vob2xkZXIgdGV4dFxuXHRwbGFjZWhvbGRlcklzTWluV2lkdGg6IF9wcm9wVHlwZXMyLmRlZmF1bHQuYm9vbCwgLy8gZG9uJ3QgY29sbGFwc2Ugc2l6ZSB0byBsZXNzIHRoYW4gdGhlIHBsYWNlaG9sZGVyXG5cdHN0eWxlOiBfcHJvcFR5cGVzMi5kZWZhdWx0Lm9iamVjdCwgLy8gY3NzIHN0eWxlcyBmb3IgdGhlIG91dGVyIGVsZW1lbnRcblx0dmFsdWU6IF9wcm9wVHlwZXMyLmRlZmF1bHQuYW55IC8vIGZpZWxkIHZhbHVlXG59O1xuQXV0b3NpemVJbnB1dC5kZWZhdWx0UHJvcHMgPSB7XG5cdG1pbldpZHRoOiAxLFxuXHRpbmplY3RTdHlsZXM6IHRydWVcbn07XG5cbmV4cG9ydHMuZGVmYXVsdCA9IEF1dG9zaXplSW5wdXQ7IiwgImltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuXG5pbXBvcnQgeyBPbHNBcGkgfSBmcm9tIFwiLi4vLi4vLi4vYXBpL09sc0FwaVwiO1xuaW1wb3J0IHsgRXVpQ29tYm9Cb3hPcHRpb25PcHRpb24gfSBmcm9tIFwiQGVsYXN0aWMvZXVpL3NyYy9jb21wb25lbnRzL2NvbWJvX2JveC90eXBlc1wiO1xuaW1wb3J0IHtcbiAgICBFdWlDb21ib0JveCxcbiAgICBldWlQYWxldHRlQ29sb3JCbGluZEJlaGluZFRleHQsXG4gICAgZXVpUGFsZXR0ZUNvbG9yQmxpbmQsXG4gICAgRXVpSGlnaGxpZ2h0LFxuICAgIEV1aUhlYWx0aCxcbiAgICBFdWlQcm92aWRlclxufSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQge1F1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyLCB1c2VRdWVyeX0gZnJvbSBcInJlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQge0JyZWFkY3J1bWJXaWRnZXR9IGZyb20gXCIuLi9NZXRhZGF0YVdpZGdldFwiO1xuaW1wb3J0IHtBdXRvY29tcGxldGVXaWRnZXRQcm9wc30gZnJvbSBcIi4uLy4uLy4uL2FwcC90eXBlc1wiO1xuXG4vKipcbiAqIEEgUmVhY3QgY29tcG9uZW50IHRvIHByb3ZpZGUgQXV0b3N1Z2dlc3Rpb24gYmFzZWQgb24gU2VtTG9va1AuXG4gKi9cbmZ1bmN0aW9uIEF1dG9jb21wbGV0ZVdpZGdldChwcm9wczogQXV0b2NvbXBsZXRlV2lkZ2V0UHJvcHMpIHtcbiAgICBjb25zdCB7IGFwaSwgcGFyYW1ldGVyLCBoYXNTaG9ydFNlbGVjdGVkTGFiZWwsIGFsbG93Q3VzdG9tVGVybXMsIHNlbGVjdGlvbkNoYW5nZWRFdmVudCwgcHJlc2VsZWN0ZWQsIHBsYWNlaG9sZGVyLCBzaW5nbGVTZWxlY3Rpb24sIC4uLnJlc3QgfSA9IHByb3BzO1xuXG4gICAgY29uc3Qgb2xzQXBpID0gbmV3IE9sc0FwaShhcGkpO1xuXG4gICAgY29uc3QgdmlzQ29sb3JzID0gZXVpUGFsZXR0ZUNvbG9yQmxpbmQoKTtcbiAgICBjb25zdCB2aXNDb2xvcnNCZWhpbmRUZXh0ID0gZXVpUGFsZXR0ZUNvbG9yQmxpbmRCZWhpbmRUZXh0KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBzZWFyY2ggdmFsdWVcbiAgICAgKi9cbiAgICBjb25zdCBbc2VhcmNoVmFsdWUsIHNldFNlYXJjaFZhbHVlXSA9IHVzZVN0YXRlPHN0cmluZz4oXCJcIik7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2V0IG9mIGF2YWlsYWJsZSBvcHRpb25zLnNcbiAgICAgKi9cbiAgICBjb25zdCBbb3B0aW9ucywgc2V0T3B0aW9uc10gPSB1c2VTdGF0ZTxBcnJheTxFdWlDb21ib0JveE9wdGlvbk9wdGlvbjxhbnk+Pj4oW10pO1xuXG4gICAgLyoqXG4gICAgICogU3RvcmUgY3VycmVudCBzZXQgb2Ygc2VsZWN0IE9wdGlvbnMuIEEgc3Vic2V0IG9mIG9wdGlvbnMuXG4gICAgICovXG4gICAgY29uc3QgW3NlbGVjdGVkT3B0aW9ucywgc2V0U2VsZWN0ZWRPcHRpb25zXSA9IHVzZVN0YXRlPEFycmF5PEV1aUNvbWJvQm94T3B0aW9uT3B0aW9uPGFueT4+PihbXSk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAvLyBAdHMtaWdub3JlXG4gIGNvbnN0IHJlbmRlck9wdGlvbiA9IChvcHRpb24sIHNlYXJjaFZhbHVlKSA9PiB7XG4gICAgY29uc3QgeyBsYWJlbCwgdmFsdWUgfSA9IG9wdGlvbjtcbiAgICBpZiAoYWxsb3dDdXN0b21UZXJtcyAmJiB2YWx1ZS5pcmkgPT0gXCJcIikgey8vIGlmIHdlIGhhdmUgYSBjdXN0b20gdGVybSwganVzdCBzaG93IHRoZSBsYWJlbFxuICAgICAgcmV0dXJuIGxhYmVsO1xuICAgIH0gZWxzZSB7IC8vIG90aGVyd2lzZSBjYW4gd2UgY2FuIHVzZSB0aGUgc2VtYW50aWMgaW5mb3JtYXRpb24gdG8gc2hvdyBzb21lIGNvbnRleHQgaW5mb3JtYXRpb24gbGlrZSBvbnRvbG9neSBuYW1lXG4gICAgICBsZXQgY29sb3IgPSBcIlwiO1xuICAgICAgaWYgKHZhbHVlLnR5cGUgPT09IFwiY2xhc3NcIikge1xuICAgICAgICBjb2xvciA9IHZpc0NvbG9yc0JlaGluZFRleHRbNV07XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlLnR5cGUgPT09IFwiaW5kaXZpZHVhbFwiKSB7XG4gICAgICAgIGNvbG9yID0gdmlzQ29sb3JzQmVoaW5kVGV4dFszXTtcbiAgICAgIH0gZWxzZSBpZiAodmFsdWUudHlwZSA9PT0gXCJwcm9wZXJ0eVwiKSB7XG4gICAgICAgIGNvbG9yID0gdmlzQ29sb3JzQmVoaW5kVGV4dFsxXTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRvdENvbG9yID0gdmlzQ29sb3JzW3Zpc0NvbG9yc0JlaGluZFRleHQuaW5kZXhPZihjb2xvcildO1xuICAgICAgaWYgKHZhbHVlLmRlc2NyaXB0aW9uICE9IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodmFsdWUudHlwZSA9PT0gXCJvbnRvbG9neVwiKSB7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxFdWlIZWFsdGhcbiAgICAgICAgICAgICAgdGl0bGU9e1widHlwZTogXCIgKyB2YWx1ZS50eXBlICsgXCJcXG5cXG5sYWJlbDogXCIgKyB2YWx1ZS5sYWJlbCArIFwiXFxuXFxucHJlZml4OiBcIiArIHZhbHVlLm9udG9sb2d5X25hbWUgKyBcIlxcblxcbmRlc2NyaXB0aW9uOiBcIiArIHZhbHVlLmRlc2NyaXB0aW9ufVxuICAgICAgICAgICAgICBjb2xvcj17ZG90Q29sb3J9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEV1aUhpZ2hsaWdodCBzZWFyY2g9e3NlYXJjaFZhbHVlfT57dmFsdWUubGFiZWx9PC9FdWlIaWdobGlnaHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt2YWx1ZS5kZXNjcmlwdGlvbn1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvRXVpSGVhbHRoPlxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8c3BhbiBzdHlsZT17eyBoZWlnaHQ6IDIwMCArIFwicHhcIiB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxFdWlIZWFsdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9e1widHlwZTogXCIgKyB2YWx1ZS50eXBlICsgXCJcXG5cXG5sYWJlbDogXCIgKyB2YWx1ZS5sYWJlbCArIFwiXFxuXFxucHJlZml4ID4gc2hvcnRfZm9ybTogXCIgKyB2YWx1ZS5vbnRvbG9neV9uYW1lICsgXCIgPiBcIiArIHZhbHVlLnNob3J0X2Zvcm0gKyBcIlxcblxcbmRlc2NyaXB0aW9uOiBcIiArIHZhbHVlLmRlc2NyaXB0aW9ufVxuICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj17ZG90Q29sb3J9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RXVpSGlnaGxpZ2h0IHNlYXJjaD17c2VhcmNoVmFsdWV9Pnt2YWx1ZS5sYWJlbH08L0V1aUhpZ2hsaWdodD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJyZWFkY3J1bWJXaWRnZXQgYXBpPXthcGl9IGVudGl0eVR5cGU9e3ZhbHVlLnR5cGV9IG9udG9sb2d5SWQ9e3ZhbHVlLm9udG9sb2d5X25hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcmk9e3ZhbHVlLmlyaX0gY29sb3JGaXJzdD17XCJwcmltYXJ5XCJ9IGNvbG9yU2Vjb25kPXtcInN1Y2Nlc3NcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcj17dmFsdWUucGFyYW1ldGVyfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2YWx1ZS5kZXNjcmlwdGlvbi5zdWJzdHJpbmcoMCwgNDApICsgXCIuLi5cIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0V1aUhlYWx0aD5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodmFsdWUudHlwZSA9PT0gXCJvbnRvbG9neVwiKSB7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxFdWlIZWFsdGhcbiAgICAgICAgICAgICAgdGl0bGU9e1widHlwZTogXCIgKyB2YWx1ZS50eXBlICsgXCJcXG5cXG5sYWJlbDogXCIgKyB2YWx1ZS5sYWJlbCArIFwiXFxuXFxucHJlZml4OiBcIiArIHZhbHVlLm9udG9sb2d5X25hbWV9XG4gICAgICAgICAgICAgIGNvbG9yPXtkb3RDb2xvcn0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxFdWlIaWdobGlnaHQgc2VhcmNoPXtzZWFyY2hWYWx1ZX0+e3ZhbHVlLmxhYmVsfTwvRXVpSGlnaGxpZ2h0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvRXVpSGVhbHRoPlxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8RXVpSGVhbHRoXG4gICAgICAgICAgICB0aXRsZT17XCJ0eXBlOiBcIiArIHZhbHVlLnR5cGUgKyBcIlxcblxcbmxhYmVsOiBcIiArIHZhbHVlLmxhYmVsICsgXCJcXG5cXG5wcmVmaXggPiBzaG9ydF9mb3JtOiBcIiArIHZhbHVlLm9udG9sb2d5X25hbWUgKyBcIiA+IFwiICsgdmFsdWUuc2hvcnRfZm9ybX1cbiAgICAgICAgICAgIGNvbG9yPXtkb3RDb2xvcn0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEV1aUhpZ2hsaWdodCBzZWFyY2g9e3NlYXJjaFZhbHVlfT57dmFsdWUubGFiZWx9PC9FdWlIaWdobGlnaHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8QnJlYWRjcnVtYldpZGdldCBhcGk9e2FwaX0gZW50aXR5VHlwZT17dmFsdWUudHlwZX0gb250b2xvZ3lJZD17dmFsdWUub250b2xvZ3lfbmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXJpPXt2YWx1ZS5pcml9IGNvbG9yRmlyc3Q9e1wicHJpbWFyeVwifSBjb2xvclNlY29uZD17XCJzdWNjZXNzXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcj17dmFsdWUucGFyYW1ldGVyfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvRXVpSGVhbHRoPlxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgfVxuICB9O1xuXG4gICAgLyoqXG4gICAgICogb24gbW91bnQ6IGZldGNoZXMgdGVybSBmb3Igc2VsZWN0T3B0aW9uIGFuZCBzZXRzIGl0J3MgbGFiZWwgb3Igc2V0cyBhIGdpdmVuIGxhYmVsIGlmIG5vIGlyaSBpcyBwcm92aWRlZCBvciB0aGUgZ2l2ZW4gaXJpIGNhbm5vdCBiZSByZXNvbHZlZCBvbmx5IGlmIGFsbG93Q3VzdG9tVGVybXMgaXMgdHJ1ZVxuICAgICAqL1xuICAgIGNvbnN0IHtcbiAgICAgICAgaXNMb2FkaW5nOiBpc0xvYWRpbmdPbk1vdW50XG4gICAgfSA9IHVzZVF1ZXJ5KFxuICAgICAgICBbXG4gICAgICAgICAgICBcIm9uTW91bnRcIiwgLy8gbm8gZGVwZW5kZW5jaWVzIC0gZG9lcyBvbmx5IG5lZWQgdG8gYmUgZXhlY3V0ZWQgb25jZSB3aGVuIG1vdW50aW5nIHRoZSBjb21wb25lbnRcbiAgICAgICAgICAgIHByZXNlbGVjdGVkXG4gICAgICAgIF0sXG4gICAgICAgIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGxldCBwcmVzZWxlY3RlZFZhbHVlczogRXVpQ29tYm9Cb3hPcHRpb25PcHRpb248YW55PltdID0gW107XG5cbiAgICAgICAgICAgIGxldCB1bmlxdWVWYWx1ZXMgPSBbLi4ubmV3IFNldChwcmVzZWxlY3RlZCldXG4gICAgICAgICAgICAgICAgLmZpbHRlcigob3B0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoYWxsb3dDdXN0b21UZXJtcyAmJiBvcHRpb24ubGFiZWwpIHx8IG9wdGlvbi5pcmk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmKHVuaXF1ZVZhbHVlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNpbmdsZVNlbGVjdGlvbikgdW5pcXVlVmFsdWVzID0gW3VuaXF1ZVZhbHVlc1swXV07XG5cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiB1bmlxdWVWYWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbiAmJiBvcHRpb24uaXJpICYmIG9wdGlvbi5pcmkuc3RhcnRzV2l0aChcImh0dHBcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IG9sc0FwaS5zZWxlY3QoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3F1ZXJ5OiBvcHRpb24uaXJpfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICkudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UucmVzcG9uc2UgJiYgcmVzcG9uc2UucmVzcG9uc2UuZG9jcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5yZXNwb25zZS5kb2NzLm1hcCgoc2VsZWN0aW9uOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb24uaXJpID09PSBzZWxlY3Rpb24uaXJpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlc2VsZWN0ZWRWYWx1ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxhYmVsIHRvIGRpc3BsYXkgd2l0aGluIHRoZSBjb21ib2JveCBlaXRoZXIgcmF3IHZhbHVlIG9yIGdlbmVyYXRlZCBvbmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gI3JlbmRlck9wdGlvbigpIGlzIHVzZWQgdG8gZGlzcGxheSBkdXJpbmcgc2VsZWN0aW9uLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogaGFzU2hvcnRTZWxlY3RlZExhYmVsID8gc2VsZWN0aW9uLmxhYmVsIDogZ2VuZXJhdGVEaXNwbGF5TGFiZWwoc2VsZWN0aW9uKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8ga2V5IHRvIGRpc3Rpbmd1aXNoIHRoZSBvcHRpb25zIChlc3BlY2lhbGx5IHRob3NlIHdpdGggc2FtZSBsYWJlbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBzZWxlY3Rpb24uaXJpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXJpOiBzZWxlY3Rpb24uaXJpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHNlbGVjdGlvbi5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9udG9sb2d5X25hbWU6IHNlbGVjdGlvbi5vbnRvbG9neV9uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogc2VsZWN0aW9uLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydF9mb3JtOiBzZWxlY3Rpb24uc2hvcnRfZm9ybSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBzZWxlY3Rpb24uZGVzY3JpcHRpb24/LmpvaW4oKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHNpbmdsZVNlbGVjdGlvbiAmJiBwcmVzZWxlY3RlZFZhbHVlcy5sZW5ndGggPiAxKSBwcmVzZWxlY3RlZFZhbHVlcyA9IFtwcmVzZWxlY3RlZFZhbHVlc1swXV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9uICYmIG9wdGlvbi5sYWJlbCAmJiBhbGxvd0N1c3RvbVRlcm1zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmVzZWxlY3RlZFZhbHVlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogb3B0aW9uLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogb3B0aW9uLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlyaTogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9udG9sb2d5X25hbWU6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0X2Zvcm06IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBzZXRPcHRpb25zKHByZXNlbGVjdGVkVmFsdWVzKTtcbiAgICAgICAgICAgICAgICBzZXRTZWxlY3RlZE9wdGlvbnMocHJlc2VsZWN0ZWRWYWx1ZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgKVxuXG4gIC8qKlxuICAgKiBmZXRjaGVzIG5ldyBvcHRpb25zIHdoZW4gc2VhcmNoVmFsdWUgY2hhbmdlc1xuICAgKi9cbiAgY29uc3Qge1xuICAgIGlzTG9hZGluZzogaXNMb2FkaW5nVGVybXNcbiAgfSA9IHVzZVF1ZXJ5KFxuICAgIFtcbiAgICAgIFwib25TZWFyY2hDaGFuZ2VcIixcbiAgICAgIHNlYXJjaFZhbHVlXG4gICAgXSxcbiAgICBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoc2VhcmNoVmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gb2xzQXBpLnNlbGVjdChcbiAgICAgICAgICB7IHF1ZXJ5OiBzZWFyY2hWYWx1ZSB9LFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgcGFyYW1ldGVyXG4gICAgICAgICkudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICBpZiAocmVzcG9uc2UucmVzcG9uc2UgJiYgcmVzcG9uc2UucmVzcG9uc2UuZG9jcykge1xuICAgICAgICAgICAgc2V0T3B0aW9ucyhyZXNwb25zZS5yZXNwb25zZS5kb2NzLm1hcCgoc2VsZWN0aW9uOiBhbnkpID0+IChcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIGxhYmVsIHRvIGRpc3BsYXkgd2l0aGluIHRoZSBjb21ib2JveCBlaXRoZXIgcmF3IHZhbHVlIG9yIGdlbmVyYXRlZCBvbmVcbiAgICAgICAgICAgICAgICAvLyAjcmVuZGVyT3B0aW9uKCkgaXMgdXNlZCB0byBkaXNwbGF5IGR1cmluZyBzZWxlY3Rpb24uXG4gICAgICAgICAgICAgICAgbGFiZWw6IGhhc1Nob3J0U2VsZWN0ZWRMYWJlbCA/IHNlbGVjdGlvbi5sYWJlbCA6IGdlbmVyYXRlRGlzcGxheUxhYmVsKHNlbGVjdGlvbiksXG4gICAgICAgICAgICAgICAgLy8ga2V5IHRvIGRpc3Rpbmd1aXNoIHRoZSBvcHRpb25zIChlc3BlY2lhbGx5IHRob3NlIHdpdGggc2FtZSBsYWJlbClcbiAgICAgICAgICAgICAgICBrZXk6IHNlbGVjdGlvbi5pcmksXG4gICAgICAgICAgICAgICAgLy8gdmFsdWVzIHRvIHBhc3MgdG8gY2xpZW50c1xuICAgICAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgICAgICBpcmk6IHNlbGVjdGlvbi5pcmksXG4gICAgICAgICAgICAgICAgICBsYWJlbDogc2VsZWN0aW9uLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgb250b2xvZ3lfbmFtZTogc2VsZWN0aW9uLm9udG9sb2d5X25hbWUsXG4gICAgICAgICAgICAgICAgICB0eXBlOiBzZWxlY3Rpb24udHlwZSxcbiAgICAgICAgICAgICAgICAgIHNob3J0X2Zvcm06IHNlbGVjdGlvbi5zaG9ydF9mb3JtLFxuICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHNlbGVjdGlvbi5kZXNjcmlwdGlvbj8uam9pbigpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICk7XG5cbiAgLyoqXG4gICAqIE9uY2UgdGhlIHNldCBvZiBzZWxlY3RlZCBvcHRpb25zIGNoYW5nZXMsIHBhc3MgdGhlIGV2ZW50IGJ5IGludm9raW5nIHRoZSBwYXNzZWQgZnVuY3Rpb24uXG4gICAqL1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNlbGVjdGlvbkNoYW5nZWRFdmVudChcbiAgICAgIHNlbGVjdGVkT3B0aW9ucy5tYXAoKHgpID0+IHtcbiAgICAgICAgLy8gcmV0dXJuIHRoZSB2YWx1ZSBvYmplY3Qgd2l0aCB0aGUgcmF3IHZhbHVlcyBmcm9tIE9MUyB0byBhIGNsaWVudFxuICAgICAgICBpZiAoYWxsb3dDdXN0b21UZXJtcyAmJiB4LnZhbHVlLmlyaSA9PSBcIlwiKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlyaTogXCJcIixcbiAgICAgICAgICAgIGxhYmVsOiB4LmxhYmVsLFxuICAgICAgICAgICAgb250b2xvZ3lfbmFtZTogXCJcIixcbiAgICAgICAgICAgIHR5cGU6IFwiXCIsXG4gICAgICAgICAgICBzaG9ydF9mb3JtOiB4LnZhbHVlLnNob3J0X2Zvcm0sXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogeC52YWx1ZS5kZXNjcmlwdGlvblxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoeC52YWx1ZS5pcmkgPT0gXCJcIikge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpcmk6IFwiXCIsXG4gICAgICAgICAgICBsYWJlbDogXCJcIixcbiAgICAgICAgICAgIG9udG9sb2d5X25hbWU6IFwiXCIsXG4gICAgICAgICAgICB0eXBlOiBcIlwiLFxuICAgICAgICAgICAgc2hvcnRfZm9ybTogXCJcIixcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIlwiXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaXJpOiB4LnZhbHVlLmlyaSxcbiAgICAgICAgICAgIGxhYmVsOiB4LnZhbHVlLmxhYmVsLFxuICAgICAgICAgICAgb250b2xvZ3lfbmFtZTogeC52YWx1ZS5vbnRvbG9neV9uYW1lLFxuICAgICAgICAgICAgdHlwZTogeC52YWx1ZS50eXBlLFxuICAgICAgICAgICAgc2hvcnRfZm9ybTogeC52YWx1ZS5zaG9ydF9mb3JtLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IHgudmFsdWUuZGVzY3JpcHRpb25cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH0sIFtzZWxlY3RlZE9wdGlvbnNdKTtcblxuICBmdW5jdGlvbiBnZW5lcmF0ZURpc3BsYXlMYWJlbChpdGVtOiBhbnkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgaXRlbS5sYWJlbCArXG4gICAgICBcIiAoXCIgK1xuICAgICAgaXRlbS5vbnRvbG9neV9uYW1lLnRvVXBwZXJDYXNlKCkgK1xuICAgICAgXCIgXCIgK1xuICAgICAgaXRlbS5zaG9ydF9mb3JtICtcbiAgICAgIFwiKVwiXG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uQ2hhbmdlSGFuZGxlcihvcHRpb25zOiBBcnJheTxhbnk+KTogdm9pZCB7XG4gICAgc2V0U2VsZWN0ZWRPcHRpb25zKG9wdGlvbnMpO1xuICB9XG5cbiAgZnVuY3Rpb24gb25DcmVhdGVPcHRpb25IYW5kbGVyKHNlYXJjaFZhbHVlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBuZXdPcHRpb24gPSB7XG4gICAgICBsYWJlbDogc2VhcmNoVmFsdWUsXG4gICAgICB2YWx1ZToge1xuICAgICAgICBpcmk6IFwiXCIsXG4gICAgICAgIGxhYmVsOiBcIlwiLFxuICAgICAgICBvbnRvbG9neV9uYW1lOiBcIlwiLFxuICAgICAgICB0eXBlOiBcIlwiLFxuICAgICAgICBzaG9ydF9mb3JtOiBcIlwiLFxuICAgICAgICBkZXNjcmlwdGlvbjogXCJcIlxuICAgICAgfVxuICAgIH07XG5cbiAgICBzZXRPcHRpb25zKFsuLi5vcHRpb25zLCBuZXdPcHRpb25dKTtcbiAgICBzZXRTZWxlY3RlZE9wdGlvbnMoc2luZ2xlU2VsZWN0aW9uID8gW25ld09wdGlvbl0gOiBbLi4uc2VsZWN0ZWRPcHRpb25zLCBuZXdPcHRpb25dKTtcbiAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPEV1aUNvbWJvQm94XG4gICAgICAgICAgICBpc0NsZWFyYWJsZVxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cInNlYXJjaEJhclwiXG4gICAgICAgICAgICBmdWxsV2lkdGg9e3RydWV9XG4gICAgICAgICAgICB7Li4ucmVzdH0gLy8gaXRlbXMgYWJvdmUgY2FuIGJlIG92ZXJyaWRlbiBieSBhIGNsaWVudFxuICAgICAgICAgICAgYXN5bmM9e3RydWV9XG4gICAgICAgICAgICBpc0xvYWRpbmc9e2lzTG9hZGluZ1Rlcm1zIHx8IGlzTG9hZGluZ09uTW91bnR9XG4gICAgICAgICAgICBzaW5nbGVTZWxlY3Rpb249e3NpbmdsZVNlbGVjdGlvbiA/IHsgYXNQbGFpblRleHQ6IHRydWUgfSA6IGZhbHNlfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e1xuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyID8gcGxhY2Vob2xkZXIgOiBcIlNlYXJjaCBmb3IgYSBDb25jZXB0XCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9wdGlvbnM9e29wdGlvbnN9XG4gICAgICAgICAgICBzZWxlY3RlZE9wdGlvbnM9e3NlbGVjdGVkT3B0aW9uc31cbiAgICAgICAgICAgIG9uU2VhcmNoQ2hhbmdlPXtzZXRTZWFyY2hWYWx1ZX1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtvbkNoYW5nZUhhbmRsZXJ9XG4gICAgICAgICAgICByZW5kZXJPcHRpb249e3JlbmRlck9wdGlvbn1cbiAgICAgICAgICAgIG9uQ3JlYXRlT3B0aW9uPXthbGxvd0N1c3RvbVRlcm1zID8gb25DcmVhdGVPcHRpb25IYW5kbGVyIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgcm93SGVpZ2h0PXs1MH1cbiAgICAgICAgLz5cbiAgICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVBdXRvY29tcGxldGUocHJvcHM6IEF1dG9jb21wbGV0ZVdpZGdldFByb3BzLCBjb250YWluZXI6IGFueSwgY2FsbGJhY2s/OiAoKT0+dm9pZCkge1xuICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZEF1dG9jb21wbGV0ZVdpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkQXV0b2NvbXBsZXRlV2lkZ2V0KHByb3BzOiBBdXRvY29tcGxldGVXaWRnZXRQcm9wcykge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gKFxuICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgIDxBdXRvY29tcGxldGVXaWRnZXRcbiAgICAgICAgICBhcGk9e3Byb3BzLmFwaX1cbiAgICAgICAgICBwYXJhbWV0ZXI9e3Byb3BzLnBhcmFtZXRlcn1cbiAgICAgICAgICBzZWxlY3Rpb25DaGFuZ2VkRXZlbnQ9e3Byb3BzLnNlbGVjdGlvbkNoYW5nZWRFdmVudH1cbiAgICAgICAgICBwcmVzZWxlY3RlZD17cHJvcHMucHJlc2VsZWN0ZWR9XG4gICAgICAgICAgc2luZ2xlU2VsZWN0aW9uPXtwcm9wcy5zaW5nbGVTZWxlY3Rpb259XG4gICAgICAgICAgcGxhY2Vob2xkZXI9e3Byb3BzLnBsYWNlaG9sZGVyfVxuICAgICAgICAgIGhhc1Nob3J0U2VsZWN0ZWRMYWJlbD17cHJvcHMuaGFzU2hvcnRTZWxlY3RlZExhYmVsfVxuICAgICAgICAgIGFsbG93Q3VzdG9tVGVybXM9e3Byb3BzLmFsbG93Q3VzdG9tVGVybXN9XG4gICAgICAgIC8+XG4gICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgPC9FdWlQcm92aWRlcj5cbiAgKVxufVxuXG5leHBvcnQgeyBBdXRvY29tcGxldGVXaWRnZXQsIGNyZWF0ZUF1dG9jb21wbGV0ZSB9O1xuIiwgIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYmluZChmbiwgdGhpc0FyZykge1xuICByZXR1cm4gZnVuY3Rpb24gd3JhcCgpIHtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhpc0FyZywgYXJndW1lbnRzKTtcbiAgfTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBiaW5kIGZyb20gJy4vaGVscGVycy9iaW5kLmpzJztcblxuLy8gdXRpbHMgaXMgYSBsaWJyYXJ5IG9mIGdlbmVyaWMgaGVscGVyIGZ1bmN0aW9ucyBub24tc3BlY2lmaWMgdG8gYXhpb3NcblxuY29uc3Qge3RvU3RyaW5nfSA9IE9iamVjdC5wcm90b3R5cGU7XG5jb25zdCB7Z2V0UHJvdG90eXBlT2Z9ID0gT2JqZWN0O1xuXG5jb25zdCBraW5kT2YgPSAoY2FjaGUgPT4gdGhpbmcgPT4ge1xuICAgIGNvbnN0IHN0ciA9IHRvU3RyaW5nLmNhbGwodGhpbmcpO1xuICAgIHJldHVybiBjYWNoZVtzdHJdIHx8IChjYWNoZVtzdHJdID0gc3RyLnNsaWNlKDgsIC0xKS50b0xvd2VyQ2FzZSgpKTtcbn0pKE9iamVjdC5jcmVhdGUobnVsbCkpO1xuXG5jb25zdCBraW5kT2ZUZXN0ID0gKHR5cGUpID0+IHtcbiAgdHlwZSA9IHR5cGUudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuICh0aGluZykgPT4ga2luZE9mKHRoaW5nKSA9PT0gdHlwZVxufVxuXG5jb25zdCB0eXBlT2ZUZXN0ID0gdHlwZSA9PiB0aGluZyA9PiB0eXBlb2YgdGhpbmcgPT09IHR5cGU7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gQXJyYXlcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gQXJyYXksIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCB7aXNBcnJheX0gPSBBcnJheTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyB1bmRlZmluZWRcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSB2YWx1ZSBpcyB1bmRlZmluZWQsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1VuZGVmaW5lZCA9IHR5cGVPZlRlc3QoJ3VuZGVmaW5lZCcpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQnVmZmVyXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQnVmZmVyKHZhbCkge1xuICByZXR1cm4gdmFsICE9PSBudWxsICYmICFpc1VuZGVmaW5lZCh2YWwpICYmIHZhbC5jb25zdHJ1Y3RvciAhPT0gbnVsbCAmJiAhaXNVbmRlZmluZWQodmFsLmNvbnN0cnVjdG9yKVxuICAgICYmIGlzRnVuY3Rpb24odmFsLmNvbnN0cnVjdG9yLmlzQnVmZmVyKSAmJiB2YWwuY29uc3RydWN0b3IuaXNCdWZmZXIodmFsKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBBcnJheUJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gQXJyYXlCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0FycmF5QnVmZmVyID0ga2luZE9mVGVzdCgnQXJyYXlCdWZmZXInKTtcblxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgdmlldyBvbiBhbiBBcnJheUJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUJ1ZmZlclZpZXcodmFsKSB7XG4gIGxldCByZXN1bHQ7XG4gIGlmICgodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJykgJiYgKEFycmF5QnVmZmVyLmlzVmlldykpIHtcbiAgICByZXN1bHQgPSBBcnJheUJ1ZmZlci5pc1ZpZXcodmFsKTtcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQgPSAodmFsKSAmJiAodmFsLmJ1ZmZlcikgJiYgKGlzQXJyYXlCdWZmZXIodmFsLmJ1ZmZlcikpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBTdHJpbmdcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyaW5nLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNTdHJpbmcgPSB0eXBlT2ZUZXN0KCdzdHJpbmcnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZ1bmN0aW9uXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRnVuY3Rpb24sIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0Z1bmN0aW9uID0gdHlwZU9mVGVzdCgnZnVuY3Rpb24nKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIE51bWJlclxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBOdW1iZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc051bWJlciA9IHR5cGVPZlRlc3QoJ251bWJlcicpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIE9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdGhpbmcgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBPYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc09iamVjdCA9ICh0aGluZykgPT4gdGhpbmcgIT09IG51bGwgJiYgdHlwZW9mIHRoaW5nID09PSAnb2JqZWN0JztcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJvb2xlYW5cbiAqXG4gKiBAcGFyYW0geyp9IHRoaW5nIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJvb2xlYW4sIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0Jvb2xlYW4gPSB0aGluZyA9PiB0aGluZyA9PT0gdHJ1ZSB8fCB0aGluZyA9PT0gZmFsc2U7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBwbGFpbiBPYmplY3RcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgcGxhaW4gT2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNQbGFpbk9iamVjdCA9ICh2YWwpID0+IHtcbiAgaWYgKGtpbmRPZih2YWwpICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKHZhbCk7XG4gIHJldHVybiAocHJvdG90eXBlID09PSBudWxsIHx8IHByb3RvdHlwZSA9PT0gT2JqZWN0LnByb3RvdHlwZSB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG90eXBlKSA9PT0gbnVsbCkgJiYgIShTeW1ib2wudG9TdHJpbmdUYWcgaW4gdmFsKSAmJiAhKFN5bWJvbC5pdGVyYXRvciBpbiB2YWwpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRGF0ZVxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBEYXRlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNEYXRlID0ga2luZE9mVGVzdCgnRGF0ZScpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRmlsZVxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGaWxlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNGaWxlID0ga2luZE9mVGVzdCgnRmlsZScpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQmxvYlxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCbG9iLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNCbG9iID0ga2luZE9mVGVzdCgnQmxvYicpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRmlsZUxpc3RcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRmlsZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRmlsZUxpc3QgPSBraW5kT2ZUZXN0KCdGaWxlTGlzdCcpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgU3RyZWFtXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFN0cmVhbSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzU3RyZWFtID0gKHZhbCkgPT4gaXNPYmplY3QodmFsKSAmJiBpc0Z1bmN0aW9uKHZhbC5waXBlKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZvcm1EYXRhXG4gKlxuICogQHBhcmFtIHsqfSB0aGluZyBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEZvcm1EYXRhLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNGb3JtRGF0YSA9ICh0aGluZykgPT4ge1xuICBsZXQga2luZDtcbiAgcmV0dXJuIHRoaW5nICYmIChcbiAgICAodHlwZW9mIEZvcm1EYXRhID09PSAnZnVuY3Rpb24nICYmIHRoaW5nIGluc3RhbmNlb2YgRm9ybURhdGEpIHx8IChcbiAgICAgIGlzRnVuY3Rpb24odGhpbmcuYXBwZW5kKSAmJiAoXG4gICAgICAgIChraW5kID0ga2luZE9mKHRoaW5nKSkgPT09ICdmb3JtZGF0YScgfHxcbiAgICAgICAgLy8gZGV0ZWN0IGZvcm0tZGF0YSBpbnN0YW5jZVxuICAgICAgICAoa2luZCA9PT0gJ29iamVjdCcgJiYgaXNGdW5jdGlvbih0aGluZy50b1N0cmluZykgJiYgdGhpbmcudG9TdHJpbmcoKSA9PT0gJ1tvYmplY3QgRm9ybURhdGFdJylcbiAgICAgIClcbiAgICApXG4gIClcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFVSTFNlYXJjaFBhcmFtcyBvYmplY3RcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzVVJMU2VhcmNoUGFyYW1zID0ga2luZE9mVGVzdCgnVVJMU2VhcmNoUGFyYW1zJyk7XG5cbi8qKlxuICogVHJpbSBleGNlc3Mgd2hpdGVzcGFjZSBvZmYgdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIGEgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0ciBUaGUgU3RyaW5nIHRvIHRyaW1cbiAqXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgU3RyaW5nIGZyZWVkIG9mIGV4Y2VzcyB3aGl0ZXNwYWNlXG4gKi9cbmNvbnN0IHRyaW0gPSAoc3RyKSA9PiBzdHIudHJpbSA/XG4gIHN0ci50cmltKCkgOiBzdHIucmVwbGFjZSgvXltcXHNcXHVGRUZGXFx4QTBdK3xbXFxzXFx1RkVGRlxceEEwXSskL2csICcnKTtcblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgYW4gQXJyYXkgb3IgYW4gT2JqZWN0IGludm9raW5nIGEgZnVuY3Rpb24gZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiBgb2JqYCBpcyBhbiBBcnJheSBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBwYXNzaW5nXG4gKiB0aGUgdmFsdWUsIGluZGV4LCBhbmQgY29tcGxldGUgYXJyYXkgZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiAnb2JqJyBpcyBhbiBPYmplY3QgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgcGFzc2luZ1xuICogdGhlIHZhbHVlLCBrZXksIGFuZCBjb21wbGV0ZSBvYmplY3QgZm9yIGVhY2ggcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtPYmplY3R8QXJyYXl9IG9iaiBUaGUgb2JqZWN0IHRvIGl0ZXJhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBjYWxsYmFjayB0byBpbnZva2UgZm9yIGVhY2ggaXRlbVxuICpcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW2FsbE93bktleXMgPSBmYWxzZV1cbiAqIEByZXR1cm5zIHthbnl9XG4gKi9cbmZ1bmN0aW9uIGZvckVhY2gob2JqLCBmbiwge2FsbE93bktleXMgPSBmYWxzZX0gPSB7fSkge1xuICAvLyBEb24ndCBib3RoZXIgaWYgbm8gdmFsdWUgcHJvdmlkZWRcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBpO1xuICBsZXQgbDtcblxuICAvLyBGb3JjZSBhbiBhcnJheSBpZiBub3QgYWxyZWFkeSBzb21ldGhpbmcgaXRlcmFibGVcbiAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XG4gICAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gICAgb2JqID0gW29ial07XG4gIH1cblxuICBpZiAoaXNBcnJheShvYmopKSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIGFycmF5IHZhbHVlc1xuICAgIGZvciAoaSA9IDAsIGwgPSBvYmoubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBmbi5jYWxsKG51bGwsIG9ialtpXSwgaSwgb2JqKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIG9iamVjdCBrZXlzXG4gICAgY29uc3Qga2V5cyA9IGFsbE93bktleXMgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopIDogT2JqZWN0LmtleXMob2JqKTtcbiAgICBjb25zdCBsZW4gPSBrZXlzLmxlbmd0aDtcbiAgICBsZXQga2V5O1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgZm4uY2FsbChudWxsLCBvYmpba2V5XSwga2V5LCBvYmopO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kS2V5KG9iaiwga2V5KSB7XG4gIGtleSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgbGV0IGkgPSBrZXlzLmxlbmd0aDtcbiAgbGV0IF9rZXk7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgX2tleSA9IGtleXNbaV07XG4gICAgaWYgKGtleSA9PT0gX2tleS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICByZXR1cm4gX2tleTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmNvbnN0IF9nbG9iYWwgPSAoKCkgPT4ge1xuICAvKmVzbGludCBuby11bmRlZjowKi9cbiAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzICE9PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gZ2xvYmFsVGhpcztcbiAgcmV0dXJuIHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6ICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IGdsb2JhbClcbn0pKCk7XG5cbmNvbnN0IGlzQ29udGV4dERlZmluZWQgPSAoY29udGV4dCkgPT4gIWlzVW5kZWZpbmVkKGNvbnRleHQpICYmIGNvbnRleHQgIT09IF9nbG9iYWw7XG5cbi8qKlxuICogQWNjZXB0cyB2YXJhcmdzIGV4cGVjdGluZyBlYWNoIGFyZ3VtZW50IHRvIGJlIGFuIG9iamVjdCwgdGhlblxuICogaW1tdXRhYmx5IG1lcmdlcyB0aGUgcHJvcGVydGllcyBvZiBlYWNoIG9iamVjdCBhbmQgcmV0dXJucyByZXN1bHQuXG4gKlxuICogV2hlbiBtdWx0aXBsZSBvYmplY3RzIGNvbnRhaW4gdGhlIHNhbWUga2V5IHRoZSBsYXRlciBvYmplY3QgaW5cbiAqIHRoZSBhcmd1bWVudHMgbGlzdCB3aWxsIHRha2UgcHJlY2VkZW5jZS5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgcmVzdWx0ID0gbWVyZ2Uoe2ZvbzogMTIzfSwge2ZvbzogNDU2fSk7XG4gKiBjb25zb2xlLmxvZyhyZXN1bHQuZm9vKTsgLy8gb3V0cHV0cyA0NTZcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmoxIE9iamVjdCB0byBtZXJnZVxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJlc3VsdCBvZiBhbGwgbWVyZ2UgcHJvcGVydGllc1xuICovXG5mdW5jdGlvbiBtZXJnZSgvKiBvYmoxLCBvYmoyLCBvYmozLCAuLi4gKi8pIHtcbiAgY29uc3Qge2Nhc2VsZXNzfSA9IGlzQ29udGV4dERlZmluZWQodGhpcykgJiYgdGhpcyB8fCB7fTtcbiAgY29uc3QgcmVzdWx0ID0ge307XG4gIGNvbnN0IGFzc2lnblZhbHVlID0gKHZhbCwga2V5KSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0S2V5ID0gY2FzZWxlc3MgJiYgZmluZEtleShyZXN1bHQsIGtleSkgfHwga2V5O1xuICAgIGlmIChpc1BsYWluT2JqZWN0KHJlc3VsdFt0YXJnZXRLZXldKSAmJiBpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gbWVyZ2UocmVzdWx0W3RhcmdldEtleV0sIHZhbCk7XG4gICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gbWVyZ2Uoe30sIHZhbCk7XG4gICAgfSBlbHNlIGlmIChpc0FycmF5KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gdmFsLnNsaWNlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gdmFsO1xuICAgIH1cbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGFyZ3VtZW50c1tpXSAmJiBmb3JFYWNoKGFyZ3VtZW50c1tpXSwgYXNzaWduVmFsdWUpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRXh0ZW5kcyBvYmplY3QgYSBieSBtdXRhYmx5IGFkZGluZyB0byBpdCB0aGUgcHJvcGVydGllcyBvZiBvYmplY3QgYi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gYSBUaGUgb2JqZWN0IHRvIGJlIGV4dGVuZGVkXG4gKiBAcGFyYW0ge09iamVjdH0gYiBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tXG4gKiBAcGFyYW0ge09iamVjdH0gdGhpc0FyZyBUaGUgb2JqZWN0IHRvIGJpbmQgZnVuY3Rpb24gdG9cbiAqXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFthbGxPd25LZXlzXVxuICogQHJldHVybnMge09iamVjdH0gVGhlIHJlc3VsdGluZyB2YWx1ZSBvZiBvYmplY3QgYVxuICovXG5jb25zdCBleHRlbmQgPSAoYSwgYiwgdGhpc0FyZywge2FsbE93bktleXN9PSB7fSkgPT4ge1xuICBmb3JFYWNoKGIsICh2YWwsIGtleSkgPT4ge1xuICAgIGlmICh0aGlzQXJnICYmIGlzRnVuY3Rpb24odmFsKSkge1xuICAgICAgYVtrZXldID0gYmluZCh2YWwsIHRoaXNBcmcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhW2tleV0gPSB2YWw7XG4gICAgfVxuICB9LCB7YWxsT3duS2V5c30pO1xuICByZXR1cm4gYTtcbn1cblxuLyoqXG4gKiBSZW1vdmUgYnl0ZSBvcmRlciBtYXJrZXIuIFRoaXMgY2F0Y2hlcyBFRiBCQiBCRiAodGhlIFVURi04IEJPTSlcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29udGVudCB3aXRoIEJPTVxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IGNvbnRlbnQgdmFsdWUgd2l0aG91dCBCT01cbiAqL1xuY29uc3Qgc3RyaXBCT00gPSAoY29udGVudCkgPT4ge1xuICBpZiAoY29udGVudC5jaGFyQ29kZUF0KDApID09PSAweEZFRkYpIHtcbiAgICBjb250ZW50ID0gY29udGVudC5zbGljZSgxKTtcbiAgfVxuICByZXR1cm4gY29udGVudDtcbn1cblxuLyoqXG4gKiBJbmhlcml0IHRoZSBwcm90b3R5cGUgbWV0aG9kcyBmcm9tIG9uZSBjb25zdHJ1Y3RvciBpbnRvIGFub3RoZXJcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBzdXBlckNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge29iamVjdH0gW3Byb3BzXVxuICogQHBhcmFtIHtvYmplY3R9IFtkZXNjcmlwdG9yc11cbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuY29uc3QgaW5oZXJpdHMgPSAoY29uc3RydWN0b3IsIHN1cGVyQ29uc3RydWN0b3IsIHByb3BzLCBkZXNjcmlwdG9ycykgPT4ge1xuICBjb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ29uc3RydWN0b3IucHJvdG90eXBlLCBkZXNjcmlwdG9ycyk7XG4gIGNvbnN0cnVjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29uc3RydWN0b3IsICdzdXBlcicsIHtcbiAgICB2YWx1ZTogc3VwZXJDb25zdHJ1Y3Rvci5wcm90b3R5cGVcbiAgfSk7XG4gIHByb3BzICYmIE9iamVjdC5hc3NpZ24oY29uc3RydWN0b3IucHJvdG90eXBlLCBwcm9wcyk7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBvYmplY3Qgd2l0aCBkZWVwIHByb3RvdHlwZSBjaGFpbiB0byBhIGZsYXQgb2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlT2JqIHNvdXJjZSBvYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBbZGVzdE9ial1cbiAqIEBwYXJhbSB7RnVuY3Rpb258Qm9vbGVhbn0gW2ZpbHRlcl1cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcm9wRmlsdGVyXVxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKi9cbmNvbnN0IHRvRmxhdE9iamVjdCA9IChzb3VyY2VPYmosIGRlc3RPYmosIGZpbHRlciwgcHJvcEZpbHRlcikgPT4ge1xuICBsZXQgcHJvcHM7XG4gIGxldCBpO1xuICBsZXQgcHJvcDtcbiAgY29uc3QgbWVyZ2VkID0ge307XG5cbiAgZGVzdE9iaiA9IGRlc3RPYmogfHwge307XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lcS1udWxsLGVxZXFlcVxuICBpZiAoc291cmNlT2JqID09IG51bGwpIHJldHVybiBkZXN0T2JqO1xuXG4gIGRvIHtcbiAgICBwcm9wcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHNvdXJjZU9iaik7XG4gICAgaSA9IHByb3BzLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tID4gMCkge1xuICAgICAgcHJvcCA9IHByb3BzW2ldO1xuICAgICAgaWYgKCghcHJvcEZpbHRlciB8fCBwcm9wRmlsdGVyKHByb3AsIHNvdXJjZU9iaiwgZGVzdE9iaikpICYmICFtZXJnZWRbcHJvcF0pIHtcbiAgICAgICAgZGVzdE9ialtwcm9wXSA9IHNvdXJjZU9ialtwcm9wXTtcbiAgICAgICAgbWVyZ2VkW3Byb3BdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgc291cmNlT2JqID0gZmlsdGVyICE9PSBmYWxzZSAmJiBnZXRQcm90b3R5cGVPZihzb3VyY2VPYmopO1xuICB9IHdoaWxlIChzb3VyY2VPYmogJiYgKCFmaWx0ZXIgfHwgZmlsdGVyKHNvdXJjZU9iaiwgZGVzdE9iaikpICYmIHNvdXJjZU9iaiAhPT0gT2JqZWN0LnByb3RvdHlwZSk7XG5cbiAgcmV0dXJuIGRlc3RPYmo7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgc3RyaW5nIGVuZHMgd2l0aCB0aGUgY2hhcmFjdGVycyBvZiBhIHNwZWNpZmllZCBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcGFyYW0ge1N0cmluZ30gc2VhcmNoU3RyaW5nXG4gKiBAcGFyYW0ge051bWJlcn0gW3Bvc2l0aW9uPSAwXVxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5jb25zdCBlbmRzV2l0aCA9IChzdHIsIHNlYXJjaFN0cmluZywgcG9zaXRpb24pID0+IHtcbiAgc3RyID0gU3RyaW5nKHN0cik7XG4gIGlmIChwb3NpdGlvbiA9PT0gdW5kZWZpbmVkIHx8IHBvc2l0aW9uID4gc3RyLmxlbmd0aCkge1xuICAgIHBvc2l0aW9uID0gc3RyLmxlbmd0aDtcbiAgfVxuICBwb3NpdGlvbiAtPSBzZWFyY2hTdHJpbmcubGVuZ3RoO1xuICBjb25zdCBsYXN0SW5kZXggPSBzdHIuaW5kZXhPZihzZWFyY2hTdHJpbmcsIHBvc2l0aW9uKTtcbiAgcmV0dXJuIGxhc3RJbmRleCAhPT0gLTEgJiYgbGFzdEluZGV4ID09PSBwb3NpdGlvbjtcbn1cblxuXG4vKipcbiAqIFJldHVybnMgbmV3IGFycmF5IGZyb20gYXJyYXkgbGlrZSBvYmplY3Qgb3IgbnVsbCBpZiBmYWlsZWRcbiAqXG4gKiBAcGFyYW0geyp9IFt0aGluZ11cbiAqXG4gKiBAcmV0dXJucyB7P0FycmF5fVxuICovXG5jb25zdCB0b0FycmF5ID0gKHRoaW5nKSA9PiB7XG4gIGlmICghdGhpbmcpIHJldHVybiBudWxsO1xuICBpZiAoaXNBcnJheSh0aGluZykpIHJldHVybiB0aGluZztcbiAgbGV0IGkgPSB0aGluZy5sZW5ndGg7XG4gIGlmICghaXNOdW1iZXIoaSkpIHJldHVybiBudWxsO1xuICBjb25zdCBhcnIgPSBuZXcgQXJyYXkoaSk7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgYXJyW2ldID0gdGhpbmdbaV07XG4gIH1cbiAgcmV0dXJuIGFycjtcbn1cblxuLyoqXG4gKiBDaGVja2luZyBpZiB0aGUgVWludDhBcnJheSBleGlzdHMgYW5kIGlmIGl0IGRvZXMsIGl0IHJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGNoZWNrcyBpZiB0aGVcbiAqIHRoaW5nIHBhc3NlZCBpbiBpcyBhbiBpbnN0YW5jZSBvZiBVaW50OEFycmF5XG4gKlxuICogQHBhcmFtIHtUeXBlZEFycmF5fVxuICpcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbmNvbnN0IGlzVHlwZWRBcnJheSA9IChUeXBlZEFycmF5ID0+IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgcmV0dXJuIHRoaW5nID0+IHtcbiAgICByZXR1cm4gVHlwZWRBcnJheSAmJiB0aGluZyBpbnN0YW5jZW9mIFR5cGVkQXJyYXk7XG4gIH07XG59KSh0eXBlb2YgVWludDhBcnJheSAhPT0gJ3VuZGVmaW5lZCcgJiYgZ2V0UHJvdG90eXBlT2YoVWludDhBcnJheSkpO1xuXG4vKipcbiAqIEZvciBlYWNoIGVudHJ5IGluIHRoZSBvYmplY3QsIGNhbGwgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIGtleSBhbmQgdmFsdWUuXG4gKlxuICogQHBhcmFtIHtPYmplY3Q8YW55LCBhbnk+fSBvYmogLSBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIC0gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggZW50cnkuXG4gKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmNvbnN0IGZvckVhY2hFbnRyeSA9IChvYmosIGZuKSA9PiB7XG4gIGNvbnN0IGdlbmVyYXRvciA9IG9iaiAmJiBvYmpbU3ltYm9sLml0ZXJhdG9yXTtcblxuICBjb25zdCBpdGVyYXRvciA9IGdlbmVyYXRvci5jYWxsKG9iaik7XG5cbiAgbGV0IHJlc3VsdDtcblxuICB3aGlsZSAoKHJlc3VsdCA9IGl0ZXJhdG9yLm5leHQoKSkgJiYgIXJlc3VsdC5kb25lKSB7XG4gICAgY29uc3QgcGFpciA9IHJlc3VsdC52YWx1ZTtcbiAgICBmbi5jYWxsKG9iaiwgcGFpclswXSwgcGFpclsxXSk7XG4gIH1cbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBhbmQgYSBzdHJpbmcsIGFuZCByZXR1cm5zIGFuIGFycmF5IG9mIGFsbCB0aGUgbWF0Y2hlc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWdFeHAgLSBUaGUgcmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoIGFnYWluc3QuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyIC0gVGhlIHN0cmluZyB0byBzZWFyY2guXG4gKlxuICogQHJldHVybnMge0FycmF5PGJvb2xlYW4+fVxuICovXG5jb25zdCBtYXRjaEFsbCA9IChyZWdFeHAsIHN0cikgPT4ge1xuICBsZXQgbWF0Y2hlcztcbiAgY29uc3QgYXJyID0gW107XG5cbiAgd2hpbGUgKChtYXRjaGVzID0gcmVnRXhwLmV4ZWMoc3RyKSkgIT09IG51bGwpIHtcbiAgICBhcnIucHVzaChtYXRjaGVzKTtcbiAgfVxuXG4gIHJldHVybiBhcnI7XG59XG5cbi8qIENoZWNraW5nIGlmIHRoZSBraW5kT2ZUZXN0IGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIHBhc3NlZCBhbiBIVE1MRm9ybUVsZW1lbnQuICovXG5jb25zdCBpc0hUTUxGb3JtID0ga2luZE9mVGVzdCgnSFRNTEZvcm1FbGVtZW50Jyk7XG5cbmNvbnN0IHRvQ2FtZWxDYXNlID0gc3RyID0+IHtcbiAgcmV0dXJuIHN0ci50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1stX1xcc10oW2EtelxcZF0pKFxcdyopL2csXG4gICAgZnVuY3Rpb24gcmVwbGFjZXIobSwgcDEsIHAyKSB7XG4gICAgICByZXR1cm4gcDEudG9VcHBlckNhc2UoKSArIHAyO1xuICAgIH1cbiAgKTtcbn07XG5cbi8qIENyZWF0aW5nIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGNoZWNrIGlmIGFuIG9iamVjdCBoYXMgYSBwcm9wZXJ0eS4gKi9cbmNvbnN0IGhhc093blByb3BlcnR5ID0gKCh7aGFzT3duUHJvcGVydHl9KSA9PiAob2JqLCBwcm9wKSA9PiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpKE9iamVjdC5wcm90b3R5cGUpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgUmVnRXhwIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBSZWdFeHAgb2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNSZWdFeHAgPSBraW5kT2ZUZXN0KCdSZWdFeHAnKTtcblxuY29uc3QgcmVkdWNlRGVzY3JpcHRvcnMgPSAob2JqLCByZWR1Y2VyKSA9PiB7XG4gIGNvbnN0IGRlc2NyaXB0b3JzID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMob2JqKTtcbiAgY29uc3QgcmVkdWNlZERlc2NyaXB0b3JzID0ge307XG5cbiAgZm9yRWFjaChkZXNjcmlwdG9ycywgKGRlc2NyaXB0b3IsIG5hbWUpID0+IHtcbiAgICBsZXQgcmV0O1xuICAgIGlmICgocmV0ID0gcmVkdWNlcihkZXNjcmlwdG9yLCBuYW1lLCBvYmopKSAhPT0gZmFsc2UpIHtcbiAgICAgIHJlZHVjZWREZXNjcmlwdG9yc1tuYW1lXSA9IHJldCB8fCBkZXNjcmlwdG9yO1xuICAgIH1cbiAgfSk7XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMob2JqLCByZWR1Y2VkRGVzY3JpcHRvcnMpO1xufVxuXG4vKipcbiAqIE1ha2VzIGFsbCBtZXRob2RzIHJlYWQtb25seVxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICovXG5cbmNvbnN0IGZyZWV6ZU1ldGhvZHMgPSAob2JqKSA9PiB7XG4gIHJlZHVjZURlc2NyaXB0b3JzKG9iaiwgKGRlc2NyaXB0b3IsIG5hbWUpID0+IHtcbiAgICAvLyBza2lwIHJlc3RyaWN0ZWQgcHJvcHMgaW4gc3RyaWN0IG1vZGVcbiAgICBpZiAoaXNGdW5jdGlvbihvYmopICYmIFsnYXJndW1lbnRzJywgJ2NhbGxlcicsICdjYWxsZWUnXS5pbmRleE9mKG5hbWUpICE9PSAtMSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gb2JqW25hbWVdO1xuXG4gICAgaWYgKCFpc0Z1bmN0aW9uKHZhbHVlKSkgcmV0dXJuO1xuXG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZmFsc2U7XG5cbiAgICBpZiAoJ3dyaXRhYmxlJyBpbiBkZXNjcmlwdG9yKSB7XG4gICAgICBkZXNjcmlwdG9yLndyaXRhYmxlID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFkZXNjcmlwdG9yLnNldCkge1xuICAgICAgZGVzY3JpcHRvci5zZXQgPSAoKSA9PiB7XG4gICAgICAgIHRocm93IEVycm9yKCdDYW4gbm90IHJld3JpdGUgcmVhZC1vbmx5IG1ldGhvZCBcXCcnICsgbmFtZSArICdcXCcnKTtcbiAgICAgIH07XG4gICAgfVxuICB9KTtcbn1cblxuY29uc3QgdG9PYmplY3RTZXQgPSAoYXJyYXlPclN0cmluZywgZGVsaW1pdGVyKSA9PiB7XG4gIGNvbnN0IG9iaiA9IHt9O1xuXG4gIGNvbnN0IGRlZmluZSA9IChhcnIpID0+IHtcbiAgICBhcnIuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICBvYmpbdmFsdWVdID0gdHJ1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIGlzQXJyYXkoYXJyYXlPclN0cmluZykgPyBkZWZpbmUoYXJyYXlPclN0cmluZykgOiBkZWZpbmUoU3RyaW5nKGFycmF5T3JTdHJpbmcpLnNwbGl0KGRlbGltaXRlcikpO1xuXG4gIHJldHVybiBvYmo7XG59XG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7fVxuXG5jb25zdCB0b0Zpbml0ZU51bWJlciA9ICh2YWx1ZSwgZGVmYXVsdFZhbHVlKSA9PiB7XG4gIHZhbHVlID0gK3ZhbHVlO1xuICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKHZhbHVlKSA/IHZhbHVlIDogZGVmYXVsdFZhbHVlO1xufVxuXG5jb25zdCBBTFBIQSA9ICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eidcblxuY29uc3QgRElHSVQgPSAnMDEyMzQ1Njc4OSc7XG5cbmNvbnN0IEFMUEhBQkVUID0ge1xuICBESUdJVCxcbiAgQUxQSEEsXG4gIEFMUEhBX0RJR0lUOiBBTFBIQSArIEFMUEhBLnRvVXBwZXJDYXNlKCkgKyBESUdJVFxufVxuXG5jb25zdCBnZW5lcmF0ZVN0cmluZyA9IChzaXplID0gMTYsIGFscGhhYmV0ID0gQUxQSEFCRVQuQUxQSEFfRElHSVQpID0+IHtcbiAgbGV0IHN0ciA9ICcnO1xuICBjb25zdCB7bGVuZ3RofSA9IGFscGhhYmV0O1xuICB3aGlsZSAoc2l6ZS0tKSB7XG4gICAgc3RyICs9IGFscGhhYmV0W01hdGgucmFuZG9tKCkgKiBsZW5ndGh8MF1cbiAgfVxuXG4gIHJldHVybiBzdHI7XG59XG5cbi8qKlxuICogSWYgdGhlIHRoaW5nIGlzIGEgRm9ybURhdGEgb2JqZWN0LCByZXR1cm4gdHJ1ZSwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cbiAqXG4gKiBAcGFyYW0ge3Vua25vd259IHRoaW5nIC0gVGhlIHRoaW5nIHRvIGNoZWNrLlxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc1NwZWNDb21wbGlhbnRGb3JtKHRoaW5nKSB7XG4gIHJldHVybiAhISh0aGluZyAmJiBpc0Z1bmN0aW9uKHRoaW5nLmFwcGVuZCkgJiYgdGhpbmdbU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gJ0Zvcm1EYXRhJyAmJiB0aGluZ1tTeW1ib2wuaXRlcmF0b3JdKTtcbn1cblxuY29uc3QgdG9KU09OT2JqZWN0ID0gKG9iaikgPT4ge1xuICBjb25zdCBzdGFjayA9IG5ldyBBcnJheSgxMCk7XG5cbiAgY29uc3QgdmlzaXQgPSAoc291cmNlLCBpKSA9PiB7XG5cbiAgICBpZiAoaXNPYmplY3Qoc291cmNlKSkge1xuICAgICAgaWYgKHN0YWNrLmluZGV4T2Yoc291cmNlKSA+PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYoISgndG9KU09OJyBpbiBzb3VyY2UpKSB7XG4gICAgICAgIHN0YWNrW2ldID0gc291cmNlO1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBpc0FycmF5KHNvdXJjZSkgPyBbXSA6IHt9O1xuXG4gICAgICAgIGZvckVhY2goc291cmNlLCAodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlZHVjZWRWYWx1ZSA9IHZpc2l0KHZhbHVlLCBpICsgMSk7XG4gICAgICAgICAgIWlzVW5kZWZpbmVkKHJlZHVjZWRWYWx1ZSkgJiYgKHRhcmdldFtrZXldID0gcmVkdWNlZFZhbHVlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc3RhY2tbaV0gPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc291cmNlO1xuICB9XG5cbiAgcmV0dXJuIHZpc2l0KG9iaiwgMCk7XG59XG5cbmNvbnN0IGlzQXN5bmNGbiA9IGtpbmRPZlRlc3QoJ0FzeW5jRnVuY3Rpb24nKTtcblxuY29uc3QgaXNUaGVuYWJsZSA9ICh0aGluZykgPT5cbiAgdGhpbmcgJiYgKGlzT2JqZWN0KHRoaW5nKSB8fCBpc0Z1bmN0aW9uKHRoaW5nKSkgJiYgaXNGdW5jdGlvbih0aGluZy50aGVuKSAmJiBpc0Z1bmN0aW9uKHRoaW5nLmNhdGNoKTtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBpc0FycmF5LFxuICBpc0FycmF5QnVmZmVyLFxuICBpc0J1ZmZlcixcbiAgaXNGb3JtRGF0YSxcbiAgaXNBcnJheUJ1ZmZlclZpZXcsXG4gIGlzU3RyaW5nLFxuICBpc051bWJlcixcbiAgaXNCb29sZWFuLFxuICBpc09iamVjdCxcbiAgaXNQbGFpbk9iamVjdCxcbiAgaXNVbmRlZmluZWQsXG4gIGlzRGF0ZSxcbiAgaXNGaWxlLFxuICBpc0Jsb2IsXG4gIGlzUmVnRXhwLFxuICBpc0Z1bmN0aW9uLFxuICBpc1N0cmVhbSxcbiAgaXNVUkxTZWFyY2hQYXJhbXMsXG4gIGlzVHlwZWRBcnJheSxcbiAgaXNGaWxlTGlzdCxcbiAgZm9yRWFjaCxcbiAgbWVyZ2UsXG4gIGV4dGVuZCxcbiAgdHJpbSxcbiAgc3RyaXBCT00sXG4gIGluaGVyaXRzLFxuICB0b0ZsYXRPYmplY3QsXG4gIGtpbmRPZixcbiAga2luZE9mVGVzdCxcbiAgZW5kc1dpdGgsXG4gIHRvQXJyYXksXG4gIGZvckVhY2hFbnRyeSxcbiAgbWF0Y2hBbGwsXG4gIGlzSFRNTEZvcm0sXG4gIGhhc093blByb3BlcnR5LFxuICBoYXNPd25Qcm9wOiBoYXNPd25Qcm9wZXJ0eSwgLy8gYW4gYWxpYXMgdG8gYXZvaWQgRVNMaW50IG5vLXByb3RvdHlwZS1idWlsdGlucyBkZXRlY3Rpb25cbiAgcmVkdWNlRGVzY3JpcHRvcnMsXG4gIGZyZWV6ZU1ldGhvZHMsXG4gIHRvT2JqZWN0U2V0LFxuICB0b0NhbWVsQ2FzZSxcbiAgbm9vcCxcbiAgdG9GaW5pdGVOdW1iZXIsXG4gIGZpbmRLZXksXG4gIGdsb2JhbDogX2dsb2JhbCxcbiAgaXNDb250ZXh0RGVmaW5lZCxcbiAgQUxQSEFCRVQsXG4gIGdlbmVyYXRlU3RyaW5nLFxuICBpc1NwZWNDb21wbGlhbnRGb3JtLFxuICB0b0pTT05PYmplY3QsXG4gIGlzQXN5bmNGbixcbiAgaXNUaGVuYWJsZVxufTtcbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5cbi8qKlxuICogQ3JlYXRlIGFuIEVycm9yIHdpdGggdGhlIHNwZWNpZmllZCBtZXNzYWdlLCBjb25maWcsIGVycm9yIGNvZGUsIHJlcXVlc3QgYW5kIHJlc3BvbnNlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IFtjb2RlXSBUaGUgZXJyb3IgY29kZSAoZm9yIGV4YW1wbGUsICdFQ09OTkFCT1JURUQnKS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbY29uZmlnXSBUaGUgY29uZmlnLlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXF1ZXN0XSBUaGUgcmVxdWVzdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVzcG9uc2VdIFRoZSByZXNwb25zZS5cbiAqXG4gKiBAcmV0dXJucyB7RXJyb3J9IFRoZSBjcmVhdGVkIGVycm9yLlxuICovXG5mdW5jdGlvbiBBeGlvc0Vycm9yKG1lc3NhZ2UsIGNvZGUsIGNvbmZpZywgcmVxdWVzdCwgcmVzcG9uc2UpIHtcbiAgRXJyb3IuY2FsbCh0aGlzKTtcblxuICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIHtcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnN0YWNrID0gKG5ldyBFcnJvcigpKS5zdGFjaztcbiAgfVxuXG4gIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gIHRoaXMubmFtZSA9ICdBeGlvc0Vycm9yJztcbiAgY29kZSAmJiAodGhpcy5jb2RlID0gY29kZSk7XG4gIGNvbmZpZyAmJiAodGhpcy5jb25maWcgPSBjb25maWcpO1xuICByZXF1ZXN0ICYmICh0aGlzLnJlcXVlc3QgPSByZXF1ZXN0KTtcbiAgcmVzcG9uc2UgJiYgKHRoaXMucmVzcG9uc2UgPSByZXNwb25zZSk7XG59XG5cbnV0aWxzLmluaGVyaXRzKEF4aW9zRXJyb3IsIEVycm9yLCB7XG4gIHRvSlNPTjogZnVuY3Rpb24gdG9KU09OKCkge1xuICAgIHJldHVybiB7XG4gICAgICAvLyBTdGFuZGFyZFxuICAgICAgbWVzc2FnZTogdGhpcy5tZXNzYWdlLFxuICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgLy8gTWljcm9zb2Z0XG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5kZXNjcmlwdGlvbixcbiAgICAgIG51bWJlcjogdGhpcy5udW1iZXIsXG4gICAgICAvLyBNb3ppbGxhXG4gICAgICBmaWxlTmFtZTogdGhpcy5maWxlTmFtZSxcbiAgICAgIGxpbmVOdW1iZXI6IHRoaXMubGluZU51bWJlcixcbiAgICAgIGNvbHVtbk51bWJlcjogdGhpcy5jb2x1bW5OdW1iZXIsXG4gICAgICBzdGFjazogdGhpcy5zdGFjayxcbiAgICAgIC8vIEF4aW9zXG4gICAgICBjb25maWc6IHV0aWxzLnRvSlNPTk9iamVjdCh0aGlzLmNvbmZpZyksXG4gICAgICBjb2RlOiB0aGlzLmNvZGUsXG4gICAgICBzdGF0dXM6IHRoaXMucmVzcG9uc2UgJiYgdGhpcy5yZXNwb25zZS5zdGF0dXMgPyB0aGlzLnJlc3BvbnNlLnN0YXR1cyA6IG51bGxcbiAgICB9O1xuICB9XG59KTtcblxuY29uc3QgcHJvdG90eXBlID0gQXhpb3NFcnJvci5wcm90b3R5cGU7XG5jb25zdCBkZXNjcmlwdG9ycyA9IHt9O1xuXG5bXG4gICdFUlJfQkFEX09QVElPTl9WQUxVRScsXG4gICdFUlJfQkFEX09QVElPTicsXG4gICdFQ09OTkFCT1JURUQnLFxuICAnRVRJTUVET1VUJyxcbiAgJ0VSUl9ORVRXT1JLJyxcbiAgJ0VSUl9GUl9UT09fTUFOWV9SRURJUkVDVFMnLFxuICAnRVJSX0RFUFJFQ0FURUQnLFxuICAnRVJSX0JBRF9SRVNQT05TRScsXG4gICdFUlJfQkFEX1JFUVVFU1QnLFxuICAnRVJSX0NBTkNFTEVEJyxcbiAgJ0VSUl9OT1RfU1VQUE9SVCcsXG4gICdFUlJfSU5WQUxJRF9VUkwnXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuXS5mb3JFYWNoKGNvZGUgPT4ge1xuICBkZXNjcmlwdG9yc1tjb2RlXSA9IHt2YWx1ZTogY29kZX07XG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQXhpb3NFcnJvciwgZGVzY3JpcHRvcnMpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3RvdHlwZSwgJ2lzQXhpb3NFcnJvcicsIHt2YWx1ZTogdHJ1ZX0pO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuQXhpb3NFcnJvci5mcm9tID0gKGVycm9yLCBjb2RlLCBjb25maWcsIHJlcXVlc3QsIHJlc3BvbnNlLCBjdXN0b21Qcm9wcykgPT4ge1xuICBjb25zdCBheGlvc0Vycm9yID0gT2JqZWN0LmNyZWF0ZShwcm90b3R5cGUpO1xuXG4gIHV0aWxzLnRvRmxhdE9iamVjdChlcnJvciwgYXhpb3NFcnJvciwgZnVuY3Rpb24gZmlsdGVyKG9iaikge1xuICAgIHJldHVybiBvYmogIT09IEVycm9yLnByb3RvdHlwZTtcbiAgfSwgcHJvcCA9PiB7XG4gICAgcmV0dXJuIHByb3AgIT09ICdpc0F4aW9zRXJyb3InO1xuICB9KTtcblxuICBBeGlvc0Vycm9yLmNhbGwoYXhpb3NFcnJvciwgZXJyb3IubWVzc2FnZSwgY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSk7XG5cbiAgYXhpb3NFcnJvci5jYXVzZSA9IGVycm9yO1xuXG4gIGF4aW9zRXJyb3IubmFtZSA9IGVycm9yLm5hbWU7XG5cbiAgY3VzdG9tUHJvcHMgJiYgT2JqZWN0LmFzc2lnbihheGlvc0Vycm9yLCBjdXN0b21Qcm9wcyk7XG5cbiAgcmV0dXJuIGF4aW9zRXJyb3I7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBBeGlvc0Vycm9yO1xuIiwgIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzdHJpY3RcbmV4cG9ydCBkZWZhdWx0IG51bGw7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi4vY29yZS9BeGlvc0Vycm9yLmpzJztcbi8vIHRlbXBvcmFyeSBob3RmaXggdG8gYXZvaWQgY2lyY3VsYXIgcmVmZXJlbmNlcyB1bnRpbCBBeGlvc1VSTFNlYXJjaFBhcmFtcyBpcyByZWZhY3RvcmVkXG5pbXBvcnQgUGxhdGZvcm1Gb3JtRGF0YSBmcm9tICcuLi9wbGF0Zm9ybS9ub2RlL2NsYXNzZXMvRm9ybURhdGEuanMnO1xuXG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIGdpdmVuIHRoaW5nIGlzIGEgYXJyYXkgb3IganMgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0aGluZyAtIFRoZSBvYmplY3Qgb3IgYXJyYXkgdG8gYmUgdmlzaXRlZC5cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNWaXNpdGFibGUodGhpbmcpIHtcbiAgcmV0dXJuIHV0aWxzLmlzUGxhaW5PYmplY3QodGhpbmcpIHx8IHV0aWxzLmlzQXJyYXkodGhpbmcpO1xufVxuXG4vKipcbiAqIEl0IHJlbW92ZXMgdGhlIGJyYWNrZXRzIGZyb20gdGhlIGVuZCBvZiBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBwYXJhbWV0ZXIuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gdGhlIGtleSB3aXRob3V0IHRoZSBicmFja2V0cy5cbiAqL1xuZnVuY3Rpb24gcmVtb3ZlQnJhY2tldHMoa2V5KSB7XG4gIHJldHVybiB1dGlscy5lbmRzV2l0aChrZXksICdbXScpID8ga2V5LnNsaWNlKDAsIC0yKSA6IGtleTtcbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIHBhdGgsIGEga2V5LCBhbmQgYSBib29sZWFuLCBhbmQgcmV0dXJucyBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIC0gVGhlIHBhdGggdG8gdGhlIGN1cnJlbnQga2V5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIGN1cnJlbnQgb2JqZWN0IGJlaW5nIGl0ZXJhdGVkIG92ZXIuXG4gKiBAcGFyYW0ge3N0cmluZ30gZG90cyAtIElmIHRydWUsIHRoZSBrZXkgd2lsbCBiZSByZW5kZXJlZCB3aXRoIGRvdHMgaW5zdGVhZCBvZiBicmFja2V0cy5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgcGF0aCB0byB0aGUgY3VycmVudCBrZXkuXG4gKi9cbmZ1bmN0aW9uIHJlbmRlcktleShwYXRoLCBrZXksIGRvdHMpIHtcbiAgaWYgKCFwYXRoKSByZXR1cm4ga2V5O1xuICByZXR1cm4gcGF0aC5jb25jYXQoa2V5KS5tYXAoZnVuY3Rpb24gZWFjaCh0b2tlbiwgaSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgIHRva2VuID0gcmVtb3ZlQnJhY2tldHModG9rZW4pO1xuICAgIHJldHVybiAhZG90cyAmJiBpID8gJ1snICsgdG9rZW4gKyAnXScgOiB0b2tlbjtcbiAgfSkuam9pbihkb3RzID8gJy4nIDogJycpO1xufVxuXG4vKipcbiAqIElmIHRoZSBhcnJheSBpcyBhbiBhcnJheSBhbmQgbm9uZSBvZiBpdHMgZWxlbWVudHMgYXJlIHZpc2l0YWJsZSwgdGhlbiBpdCdzIGEgZmxhdCBhcnJheS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PGFueT59IGFyciAtIFRoZSBhcnJheSB0byBjaGVja1xuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc0ZsYXRBcnJheShhcnIpIHtcbiAgcmV0dXJuIHV0aWxzLmlzQXJyYXkoYXJyKSAmJiAhYXJyLnNvbWUoaXNWaXNpdGFibGUpO1xufVxuXG5jb25zdCBwcmVkaWNhdGVzID0gdXRpbHMudG9GbGF0T2JqZWN0KHV0aWxzLCB7fSwgbnVsbCwgZnVuY3Rpb24gZmlsdGVyKHByb3ApIHtcbiAgcmV0dXJuIC9eaXNbQS1aXS8udGVzdChwcm9wKTtcbn0pO1xuXG4vKipcbiAqIENvbnZlcnQgYSBkYXRhIG9iamVjdCB0byBGb3JtRGF0YVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEBwYXJhbSB7P09iamVjdH0gW2Zvcm1EYXRhXVxuICogQHBhcmFtIHs/T2JqZWN0fSBbb3B0aW9uc11cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLnZpc2l0b3JdXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLm1ldGFUb2tlbnMgPSB0cnVlXVxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5kb3RzID0gZmFsc2VdXG4gKiBAcGFyYW0gez9Cb29sZWFufSBbb3B0aW9ucy5pbmRleGVzID0gZmFsc2VdXG4gKlxuICogQHJldHVybnMge09iamVjdH1cbiAqKi9cblxuLyoqXG4gKiBJdCBjb252ZXJ0cyBhbiBvYmplY3QgaW50byBhIEZvcm1EYXRhIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0PGFueSwgYW55Pn0gb2JqIC0gVGhlIG9iamVjdCB0byBjb252ZXJ0IHRvIGZvcm0gZGF0YS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtRGF0YSAtIFRoZSBGb3JtRGF0YSBvYmplY3QgdG8gYXBwZW5kIHRvLlxuICogQHBhcmFtIHtPYmplY3Q8c3RyaW5nLCBhbnk+fSBvcHRpb25zXG4gKlxuICogQHJldHVybnNcbiAqL1xuZnVuY3Rpb24gdG9Gb3JtRGF0YShvYmosIGZvcm1EYXRhLCBvcHRpb25zKSB7XG4gIGlmICghdXRpbHMuaXNPYmplY3Qob2JqKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3RhcmdldCBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIGZvcm1EYXRhID0gZm9ybURhdGEgfHwgbmV3IChQbGF0Zm9ybUZvcm1EYXRhIHx8IEZvcm1EYXRhKSgpO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBvcHRpb25zID0gdXRpbHMudG9GbGF0T2JqZWN0KG9wdGlvbnMsIHtcbiAgICBtZXRhVG9rZW5zOiB0cnVlLFxuICAgIGRvdHM6IGZhbHNlLFxuICAgIGluZGV4ZXM6IGZhbHNlXG4gIH0sIGZhbHNlLCBmdW5jdGlvbiBkZWZpbmVkKG9wdGlvbiwgc291cmNlKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVxLW51bGwsZXFlcWVxXG4gICAgcmV0dXJuICF1dGlscy5pc1VuZGVmaW5lZChzb3VyY2Vbb3B0aW9uXSk7XG4gIH0pO1xuXG4gIGNvbnN0IG1ldGFUb2tlbnMgPSBvcHRpb25zLm1ldGFUb2tlbnM7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxuICBjb25zdCB2aXNpdG9yID0gb3B0aW9ucy52aXNpdG9yIHx8IGRlZmF1bHRWaXNpdG9yO1xuICBjb25zdCBkb3RzID0gb3B0aW9ucy5kb3RzO1xuICBjb25zdCBpbmRleGVzID0gb3B0aW9ucy5pbmRleGVzO1xuICBjb25zdCBfQmxvYiA9IG9wdGlvbnMuQmxvYiB8fCB0eXBlb2YgQmxvYiAhPT0gJ3VuZGVmaW5lZCcgJiYgQmxvYjtcbiAgY29uc3QgdXNlQmxvYiA9IF9CbG9iICYmIHV0aWxzLmlzU3BlY0NvbXBsaWFudEZvcm0oZm9ybURhdGEpO1xuXG4gIGlmICghdXRpbHMuaXNGdW5jdGlvbih2aXNpdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3Zpc2l0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gIH1cblxuICBmdW5jdGlvbiBjb252ZXJ0VmFsdWUodmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwpIHJldHVybiAnJztcblxuICAgIGlmICh1dGlscy5pc0RhdGUodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdmFsdWUudG9JU09TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBpZiAoIXVzZUJsb2IgJiYgdXRpbHMuaXNCbG9iKHZhbHVlKSkge1xuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ0Jsb2IgaXMgbm90IHN1cHBvcnRlZC4gVXNlIGEgQnVmZmVyIGluc3RlYWQuJyk7XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzLmlzQXJyYXlCdWZmZXIodmFsdWUpIHx8IHV0aWxzLmlzVHlwZWRBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB1c2VCbG9iICYmIHR5cGVvZiBCbG9iID09PSAnZnVuY3Rpb24nID8gbmV3IEJsb2IoW3ZhbHVlXSkgOiBCdWZmZXIuZnJvbSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmF1bHQgdmlzaXRvci5cbiAgICpcbiAgICogQHBhcmFtIHsqfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ3xOdW1iZXJ9IGtleVxuICAgKiBAcGFyYW0ge0FycmF5PFN0cmluZ3xOdW1iZXI+fSBwYXRoXG4gICAqIEB0aGlzIHtGb3JtRGF0YX1cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHJldHVybiB0cnVlIHRvIHZpc2l0IHRoZSBlYWNoIHByb3Agb2YgdGhlIHZhbHVlIHJlY3Vyc2l2ZWx5XG4gICAqL1xuICBmdW5jdGlvbiBkZWZhdWx0VmlzaXRvcih2YWx1ZSwga2V5LCBwYXRoKSB7XG4gICAgbGV0IGFyciA9IHZhbHVlO1xuXG4gICAgaWYgKHZhbHVlICYmICFwYXRoICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmICh1dGlscy5lbmRzV2l0aChrZXksICd7fScpKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICBrZXkgPSBtZXRhVG9rZW5zID8ga2V5IDoga2V5LnNsaWNlKDAsIC0yKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIHZhbHVlID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgKHV0aWxzLmlzQXJyYXkodmFsdWUpICYmIGlzRmxhdEFycmF5KHZhbHVlKSkgfHxcbiAgICAgICAgKCh1dGlscy5pc0ZpbGVMaXN0KHZhbHVlKSB8fCB1dGlscy5lbmRzV2l0aChrZXksICdbXScpKSAmJiAoYXJyID0gdXRpbHMudG9BcnJheSh2YWx1ZSkpXG4gICAgICAgICkpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIGtleSA9IHJlbW92ZUJyYWNrZXRzKGtleSk7XG5cbiAgICAgICAgYXJyLmZvckVhY2goZnVuY3Rpb24gZWFjaChlbCwgaW5kZXgpIHtcbiAgICAgICAgICAhKHV0aWxzLmlzVW5kZWZpbmVkKGVsKSB8fCBlbCA9PT0gbnVsbCkgJiYgZm9ybURhdGEuYXBwZW5kKFxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5lc3RlZC10ZXJuYXJ5XG4gICAgICAgICAgICBpbmRleGVzID09PSB0cnVlID8gcmVuZGVyS2V5KFtrZXldLCBpbmRleCwgZG90cykgOiAoaW5kZXhlcyA9PT0gbnVsbCA/IGtleSA6IGtleSArICdbXScpLFxuICAgICAgICAgICAgY29udmVydFZhbHVlKGVsKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzVmlzaXRhYmxlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZm9ybURhdGEuYXBwZW5kKHJlbmRlcktleShwYXRoLCBrZXksIGRvdHMpLCBjb252ZXJ0VmFsdWUodmFsdWUpKTtcblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHN0YWNrID0gW107XG5cbiAgY29uc3QgZXhwb3NlZEhlbHBlcnMgPSBPYmplY3QuYXNzaWduKHByZWRpY2F0ZXMsIHtcbiAgICBkZWZhdWx0VmlzaXRvcixcbiAgICBjb252ZXJ0VmFsdWUsXG4gICAgaXNWaXNpdGFibGVcbiAgfSk7XG5cbiAgZnVuY3Rpb24gYnVpbGQodmFsdWUsIHBhdGgpIHtcbiAgICBpZiAodXRpbHMuaXNVbmRlZmluZWQodmFsdWUpKSByZXR1cm47XG5cbiAgICBpZiAoc3RhY2suaW5kZXhPZih2YWx1ZSkgIT09IC0xKSB7XG4gICAgICB0aHJvdyBFcnJvcignQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluICcgKyBwYXRoLmpvaW4oJy4nKSk7XG4gICAgfVxuXG4gICAgc3RhY2sucHVzaCh2YWx1ZSk7XG5cbiAgICB1dGlscy5mb3JFYWNoKHZhbHVlLCBmdW5jdGlvbiBlYWNoKGVsLCBrZXkpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9ICEodXRpbHMuaXNVbmRlZmluZWQoZWwpIHx8IGVsID09PSBudWxsKSAmJiB2aXNpdG9yLmNhbGwoXG4gICAgICAgIGZvcm1EYXRhLCBlbCwgdXRpbHMuaXNTdHJpbmcoa2V5KSA/IGtleS50cmltKCkgOiBrZXksIHBhdGgsIGV4cG9zZWRIZWxwZXJzXG4gICAgICApO1xuXG4gICAgICBpZiAocmVzdWx0ID09PSB0cnVlKSB7XG4gICAgICAgIGJ1aWxkKGVsLCBwYXRoID8gcGF0aC5jb25jYXQoa2V5KSA6IFtrZXldKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHN0YWNrLnBvcCgpO1xuICB9XG5cbiAgaWYgKCF1dGlscy5pc09iamVjdChvYmopKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZGF0YSBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICB9XG5cbiAgYnVpbGQob2JqKTtcblxuICByZXR1cm4gZm9ybURhdGE7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHRvRm9ybURhdGE7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdG9Gb3JtRGF0YSBmcm9tICcuL3RvRm9ybURhdGEuanMnO1xuXG4vKipcbiAqIEl0IGVuY29kZXMgYSBzdHJpbmcgYnkgcmVwbGFjaW5nIGFsbCBjaGFyYWN0ZXJzIHRoYXQgYXJlIG5vdCBpbiB0aGUgdW5yZXNlcnZlZCBzZXQgd2l0aFxuICogdGhlaXIgcGVyY2VudC1lbmNvZGVkIGVxdWl2YWxlbnRzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0ciAtIFRoZSBzdHJpbmcgdG8gZW5jb2RlLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBlbmNvZGVkIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gZW5jb2RlKHN0cikge1xuICBjb25zdCBjaGFyTWFwID0ge1xuICAgICchJzogJyUyMScsXG4gICAgXCInXCI6ICclMjcnLFxuICAgICcoJzogJyUyOCcsXG4gICAgJyknOiAnJTI5JyxcbiAgICAnfic6ICclN0UnLFxuICAgICclMjAnOiAnKycsXG4gICAgJyUwMCc6ICdcXHgwMCdcbiAgfTtcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHIpLnJlcGxhY2UoL1shJygpfl18JTIwfCUwMC9nLCBmdW5jdGlvbiByZXBsYWNlcihtYXRjaCkge1xuICAgIHJldHVybiBjaGFyTWFwW21hdGNoXTtcbiAgfSk7XG59XG5cbi8qKlxuICogSXQgdGFrZXMgYSBwYXJhbXMgb2JqZWN0IGFuZCBjb252ZXJ0cyBpdCB0byBhIEZvcm1EYXRhIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0PHN0cmluZywgYW55Pn0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgdG8gYmUgY29udmVydGVkIHRvIGEgRm9ybURhdGEgb2JqZWN0LlxuICogQHBhcmFtIHtPYmplY3Q8c3RyaW5nLCBhbnk+fSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgb2JqZWN0IHBhc3NlZCB0byB0aGUgQXhpb3MgY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIEF4aW9zVVJMU2VhcmNoUGFyYW1zKHBhcmFtcywgb3B0aW9ucykge1xuICB0aGlzLl9wYWlycyA9IFtdO1xuXG4gIHBhcmFtcyAmJiB0b0Zvcm1EYXRhKHBhcmFtcywgdGhpcywgb3B0aW9ucyk7XG59XG5cbmNvbnN0IHByb3RvdHlwZSA9IEF4aW9zVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZTtcblxucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uIGFwcGVuZChuYW1lLCB2YWx1ZSkge1xuICB0aGlzLl9wYWlycy5wdXNoKFtuYW1lLCB2YWx1ZV0pO1xufTtcblxucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoZW5jb2Rlcikge1xuICBjb25zdCBfZW5jb2RlID0gZW5jb2RlciA/IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIGVuY29kZXIuY2FsbCh0aGlzLCB2YWx1ZSwgZW5jb2RlKTtcbiAgfSA6IGVuY29kZTtcblxuICByZXR1cm4gdGhpcy5fcGFpcnMubWFwKGZ1bmN0aW9uIGVhY2gocGFpcikge1xuICAgIHJldHVybiBfZW5jb2RlKHBhaXJbMF0pICsgJz0nICsgX2VuY29kZShwYWlyWzFdKTtcbiAgfSwgJycpLmpvaW4oJyYnKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEF4aW9zVVJMU2VhcmNoUGFyYW1zO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBBeGlvc1VSTFNlYXJjaFBhcmFtcyBmcm9tICcuLi9oZWxwZXJzL0F4aW9zVVJMU2VhcmNoUGFyYW1zLmpzJztcblxuLyoqXG4gKiBJdCByZXBsYWNlcyBhbGwgaW5zdGFuY2VzIG9mIHRoZSBjaGFyYWN0ZXJzIGA6YCwgYCRgLCBgLGAsIGArYCwgYFtgLCBhbmQgYF1gIHdpdGggdGhlaXJcbiAqIFVSSSBlbmNvZGVkIGNvdW50ZXJwYXJ0c1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWwgVGhlIHZhbHVlIHRvIGJlIGVuY29kZWQuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGVuY29kZWQgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGVuY29kZSh2YWwpIHtcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh2YWwpLlxuICAgIHJlcGxhY2UoLyUzQS9naSwgJzonKS5cbiAgICByZXBsYWNlKC8lMjQvZywgJyQnKS5cbiAgICByZXBsYWNlKC8lMkMvZ2ksICcsJykuXG4gICAgcmVwbGFjZSgvJTIwL2csICcrJykuXG4gICAgcmVwbGFjZSgvJTVCL2dpLCAnWycpLlxuICAgIHJlcGxhY2UoLyU1RC9naSwgJ10nKTtcbn1cblxuLyoqXG4gKiBCdWlsZCBhIFVSTCBieSBhcHBlbmRpbmcgcGFyYW1zIHRvIHRoZSBlbmRcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBiYXNlIG9mIHRoZSB1cmwgKGUuZy4sIGh0dHA6Ly93d3cuZ29vZ2xlLmNvbSlcbiAqIEBwYXJhbSB7b2JqZWN0fSBbcGFyYW1zXSBUaGUgcGFyYW1zIHRvIGJlIGFwcGVuZGVkXG4gKiBAcGFyYW0gez9vYmplY3R9IG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZm9ybWF0dGVkIHVybFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBidWlsZFVSTCh1cmwsIHBhcmFtcywgb3B0aW9ucykge1xuICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgaWYgKCFwYXJhbXMpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG4gIFxuICBjb25zdCBfZW5jb2RlID0gb3B0aW9ucyAmJiBvcHRpb25zLmVuY29kZSB8fCBlbmNvZGU7XG5cbiAgY29uc3Qgc2VyaWFsaXplRm4gPSBvcHRpb25zICYmIG9wdGlvbnMuc2VyaWFsaXplO1xuXG4gIGxldCBzZXJpYWxpemVkUGFyYW1zO1xuXG4gIGlmIChzZXJpYWxpemVGbikge1xuICAgIHNlcmlhbGl6ZWRQYXJhbXMgPSBzZXJpYWxpemVGbihwYXJhbXMsIG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIHNlcmlhbGl6ZWRQYXJhbXMgPSB1dGlscy5pc1VSTFNlYXJjaFBhcmFtcyhwYXJhbXMpID9cbiAgICAgIHBhcmFtcy50b1N0cmluZygpIDpcbiAgICAgIG5ldyBBeGlvc1VSTFNlYXJjaFBhcmFtcyhwYXJhbXMsIG9wdGlvbnMpLnRvU3RyaW5nKF9lbmNvZGUpO1xuICB9XG5cbiAgaWYgKHNlcmlhbGl6ZWRQYXJhbXMpIHtcbiAgICBjb25zdCBoYXNobWFya0luZGV4ID0gdXJsLmluZGV4T2YoXCIjXCIpO1xuXG4gICAgaWYgKGhhc2htYXJrSW5kZXggIT09IC0xKSB7XG4gICAgICB1cmwgPSB1cmwuc2xpY2UoMCwgaGFzaG1hcmtJbmRleCk7XG4gICAgfVxuICAgIHVybCArPSAodXJsLmluZGV4T2YoJz8nKSA9PT0gLTEgPyAnPycgOiAnJicpICsgc2VyaWFsaXplZFBhcmFtcztcbiAgfVxuXG4gIHJldHVybiB1cmw7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5cbmNsYXNzIEludGVyY2VwdG9yTWFuYWdlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuaGFuZGxlcnMgPSBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBuZXcgaW50ZXJjZXB0b3IgdG8gdGhlIHN0YWNrXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bGZpbGxlZCBUaGUgZnVuY3Rpb24gdG8gaGFuZGxlIGB0aGVuYCBmb3IgYSBgUHJvbWlzZWBcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0ZWQgVGhlIGZ1bmN0aW9uIHRvIGhhbmRsZSBgcmVqZWN0YCBmb3IgYSBgUHJvbWlzZWBcbiAgICpcbiAgICogQHJldHVybiB7TnVtYmVyfSBBbiBJRCB1c2VkIHRvIHJlbW92ZSBpbnRlcmNlcHRvciBsYXRlclxuICAgKi9cbiAgdXNlKGZ1bGZpbGxlZCwgcmVqZWN0ZWQsIG9wdGlvbnMpIHtcbiAgICB0aGlzLmhhbmRsZXJzLnB1c2goe1xuICAgICAgZnVsZmlsbGVkLFxuICAgICAgcmVqZWN0ZWQsXG4gICAgICBzeW5jaHJvbm91czogb3B0aW9ucyA/IG9wdGlvbnMuc3luY2hyb25vdXMgOiBmYWxzZSxcbiAgICAgIHJ1bldoZW46IG9wdGlvbnMgPyBvcHRpb25zLnJ1bldoZW4gOiBudWxsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlcnMubGVuZ3RoIC0gMTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYW4gaW50ZXJjZXB0b3IgZnJvbSB0aGUgc3RhY2tcbiAgICpcbiAgICogQHBhcmFtIHtOdW1iZXJ9IGlkIFRoZSBJRCB0aGF0IHdhcyByZXR1cm5lZCBieSBgdXNlYFxuICAgKlxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gYHRydWVgIGlmIHRoZSBpbnRlcmNlcHRvciB3YXMgcmVtb3ZlZCwgYGZhbHNlYCBvdGhlcndpc2VcbiAgICovXG4gIGVqZWN0KGlkKSB7XG4gICAgaWYgKHRoaXMuaGFuZGxlcnNbaWRdKSB7XG4gICAgICB0aGlzLmhhbmRsZXJzW2lkXSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIGFsbCBpbnRlcmNlcHRvcnMgZnJvbSB0aGUgc3RhY2tcbiAgICpcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBjbGVhcigpIHtcbiAgICBpZiAodGhpcy5oYW5kbGVycykge1xuICAgICAgdGhpcy5oYW5kbGVycyA9IFtdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJdGVyYXRlIG92ZXIgYWxsIHRoZSByZWdpc3RlcmVkIGludGVyY2VwdG9yc1xuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBza2lwcGluZyBvdmVyIGFueVxuICAgKiBpbnRlcmNlcHRvcnMgdGhhdCBtYXkgaGF2ZSBiZWNvbWUgYG51bGxgIGNhbGxpbmcgYGVqZWN0YC5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggaW50ZXJjZXB0b3JcbiAgICpcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBmb3JFYWNoKGZuKSB7XG4gICAgdXRpbHMuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLCBmdW5jdGlvbiBmb3JFYWNoSGFuZGxlcihoKSB7XG4gICAgICBpZiAoaCAhPT0gbnVsbCkge1xuICAgICAgICBmbihoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBJbnRlcmNlcHRvck1hbmFnZXI7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHNpbGVudEpTT05QYXJzaW5nOiB0cnVlLFxuICBmb3JjZWRKU09OUGFyc2luZzogdHJ1ZSxcbiAgY2xhcmlmeVRpbWVvdXRFcnJvcjogZmFsc2Vcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgQXhpb3NVUkxTZWFyY2hQYXJhbXMgZnJvbSAnLi4vLi4vLi4vaGVscGVycy9BeGlvc1VSTFNlYXJjaFBhcmFtcy5qcyc7XG5leHBvcnQgZGVmYXVsdCB0eXBlb2YgVVJMU2VhcmNoUGFyYW1zICE9PSAndW5kZWZpbmVkJyA/IFVSTFNlYXJjaFBhcmFtcyA6IEF4aW9zVVJMU2VhcmNoUGFyYW1zO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0IGRlZmF1bHQgdHlwZW9mIEZvcm1EYXRhICE9PSAndW5kZWZpbmVkJyA/IEZvcm1EYXRhIDogbnVsbDtcbiIsICIndXNlIHN0cmljdCdcblxuZXhwb3J0IGRlZmF1bHQgdHlwZW9mIEJsb2IgIT09ICd1bmRlZmluZWQnID8gQmxvYiA6IG51bGxcbiIsICJpbXBvcnQgVVJMU2VhcmNoUGFyYW1zIGZyb20gJy4vY2xhc3Nlcy9VUkxTZWFyY2hQYXJhbXMuanMnXG5pbXBvcnQgRm9ybURhdGEgZnJvbSAnLi9jbGFzc2VzL0Zvcm1EYXRhLmpzJ1xuaW1wb3J0IEJsb2IgZnJvbSAnLi9jbGFzc2VzL0Jsb2IuanMnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgaXNCcm93c2VyOiB0cnVlLFxuICBjbGFzc2VzOiB7XG4gICAgVVJMU2VhcmNoUGFyYW1zLFxuICAgIEZvcm1EYXRhLFxuICAgIEJsb2JcbiAgfSxcbiAgcHJvdG9jb2xzOiBbJ2h0dHAnLCAnaHR0cHMnLCAnZmlsZScsICdibG9iJywgJ3VybCcsICdkYXRhJ11cbn07XG4iLCAiY29uc3QgaGFzQnJvd3NlckVudiA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCc7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIGVudmlyb25tZW50XG4gKlxuICogVGhpcyBhbGxvd3MgYXhpb3MgdG8gcnVuIGluIGEgd2ViIHdvcmtlciwgYW5kIHJlYWN0LW5hdGl2ZS5cbiAqIEJvdGggZW52aXJvbm1lbnRzIHN1cHBvcnQgWE1MSHR0cFJlcXVlc3QsIGJ1dCBub3QgZnVsbHkgc3RhbmRhcmQgZ2xvYmFscy5cbiAqXG4gKiB3ZWIgd29ya2VyczpcbiAqICB0eXBlb2Ygd2luZG93IC0+IHVuZGVmaW5lZFxuICogIHR5cGVvZiBkb2N1bWVudCAtPiB1bmRlZmluZWRcbiAqXG4gKiByZWFjdC1uYXRpdmU6XG4gKiAgbmF2aWdhdG9yLnByb2R1Y3QgLT4gJ1JlYWN0TmF0aXZlJ1xuICogbmF0aXZlc2NyaXB0XG4gKiAgbmF2aWdhdG9yLnByb2R1Y3QgLT4gJ05hdGl2ZVNjcmlwdCcgb3IgJ05TJ1xuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5jb25zdCBoYXNTdGFuZGFyZEJyb3dzZXJFbnYgPSAoXG4gIChwcm9kdWN0KSA9PiB7XG4gICAgcmV0dXJuIGhhc0Jyb3dzZXJFbnYgJiYgWydSZWFjdE5hdGl2ZScsICdOYXRpdmVTY3JpcHQnLCAnTlMnXS5pbmRleE9mKHByb2R1Y3QpIDwgMFxuICB9KSh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IucHJvZHVjdCk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIHdlYldvcmtlciBlbnZpcm9ubWVudFxuICpcbiAqIEFsdGhvdWdoIHRoZSBgaXNTdGFuZGFyZEJyb3dzZXJFbnZgIG1ldGhvZCBpbmRpY2F0ZXMgdGhhdFxuICogYGFsbG93cyBheGlvcyB0byBydW4gaW4gYSB3ZWIgd29ya2VyYCwgdGhlIFdlYldvcmtlciB3aWxsIHN0aWxsIGJlXG4gKiBmaWx0ZXJlZCBvdXQgZHVlIHRvIGl0cyBqdWRnbWVudCBzdGFuZGFyZFxuICogYHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCdgLlxuICogVGhpcyBsZWFkcyB0byBhIHByb2JsZW0gd2hlbiBheGlvcyBwb3N0IGBGb3JtRGF0YWAgaW4gd2ViV29ya2VyXG4gKi9cbmNvbnN0IGhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudiA9ICgoKSA9PiB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgIHNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSAmJlxuICAgIHR5cGVvZiBzZWxmLmltcG9ydFNjcmlwdHMgPT09ICdmdW5jdGlvbidcbiAgKTtcbn0pKCk7XG5cbmV4cG9ydCB7XG4gIGhhc0Jyb3dzZXJFbnYsXG4gIGhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudixcbiAgaGFzU3RhbmRhcmRCcm93c2VyRW52XG59XG4iLCAiaW1wb3J0IHBsYXRmb3JtIGZyb20gJy4vbm9kZS9pbmRleC5qcyc7XG5pbXBvcnQgKiBhcyB1dGlscyBmcm9tICcuL2NvbW1vbi91dGlscy5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgLi4udXRpbHMsXG4gIC4uLnBsYXRmb3JtXG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IHRvRm9ybURhdGEgZnJvbSAnLi90b0Zvcm1EYXRhLmpzJztcbmltcG9ydCBwbGF0Zm9ybSBmcm9tICcuLi9wbGF0Zm9ybS9pbmRleC5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRvVVJMRW5jb2RlZEZvcm0oZGF0YSwgb3B0aW9ucykge1xuICByZXR1cm4gdG9Gb3JtRGF0YShkYXRhLCBuZXcgcGxhdGZvcm0uY2xhc3Nlcy5VUkxTZWFyY2hQYXJhbXMoKSwgT2JqZWN0LmFzc2lnbih7XG4gICAgdmlzaXRvcjogZnVuY3Rpb24odmFsdWUsIGtleSwgcGF0aCwgaGVscGVycykge1xuICAgICAgaWYgKHBsYXRmb3JtLmlzTm9kZSAmJiB1dGlscy5pc0J1ZmZlcih2YWx1ZSkpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoa2V5LCB2YWx1ZS50b1N0cmluZygnYmFzZTY0JykpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBoZWxwZXJzLmRlZmF1bHRWaXNpdG9yLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuICB9LCBvcHRpb25zKSk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuXG4vKipcbiAqIEl0IHRha2VzIGEgc3RyaW5nIGxpa2UgYGZvb1t4XVt5XVt6XWAgYW5kIHJldHVybnMgYW4gYXJyYXkgbGlrZSBgWydmb28nLCAneCcsICd5JywgJ3onXVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBzdHJpbmdzLlxuICovXG5mdW5jdGlvbiBwYXJzZVByb3BQYXRoKG5hbWUpIHtcbiAgLy8gZm9vW3hdW3ldW3pdXG4gIC8vIGZvby54LnkuelxuICAvLyBmb28teC15LXpcbiAgLy8gZm9vIHggeSB6XG4gIHJldHVybiB1dGlscy5tYXRjaEFsbCgvXFx3K3xcXFsoXFx3KildL2csIG5hbWUpLm1hcChtYXRjaCA9PiB7XG4gICAgcmV0dXJuIG1hdGNoWzBdID09PSAnW10nID8gJycgOiBtYXRjaFsxXSB8fCBtYXRjaFswXTtcbiAgfSk7XG59XG5cbi8qKlxuICogQ29udmVydCBhbiBhcnJheSB0byBhbiBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtBcnJheTxhbnk+fSBhcnIgLSBUaGUgYXJyYXkgdG8gY29udmVydCB0byBhbiBvYmplY3QuXG4gKlxuICogQHJldHVybnMgQW4gb2JqZWN0IHdpdGggdGhlIHNhbWUga2V5cyBhbmQgdmFsdWVzIGFzIHRoZSBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlUb09iamVjdChhcnIpIHtcbiAgY29uc3Qgb2JqID0ge307XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhhcnIpO1xuICBsZXQgaTtcbiAgY29uc3QgbGVuID0ga2V5cy5sZW5ndGg7XG4gIGxldCBrZXk7XG4gIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIGtleSA9IGtleXNbaV07XG4gICAgb2JqW2tleV0gPSBhcnJba2V5XTtcbiAgfVxuICByZXR1cm4gb2JqO1xufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgRm9ybURhdGEgb2JqZWN0IGFuZCByZXR1cm5zIGEgSmF2YVNjcmlwdCBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9ybURhdGEgVGhlIEZvcm1EYXRhIG9iamVjdCB0byBjb252ZXJ0IHRvIEpTT04uXG4gKlxuICogQHJldHVybnMge09iamVjdDxzdHJpbmcsIGFueT4gfCBudWxsfSBUaGUgY29udmVydGVkIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gZm9ybURhdGFUb0pTT04oZm9ybURhdGEpIHtcbiAgZnVuY3Rpb24gYnVpbGRQYXRoKHBhdGgsIHZhbHVlLCB0YXJnZXQsIGluZGV4KSB7XG4gICAgbGV0IG5hbWUgPSBwYXRoW2luZGV4KytdO1xuXG4gICAgaWYgKG5hbWUgPT09ICdfX3Byb3RvX18nKSByZXR1cm4gdHJ1ZTtcblxuICAgIGNvbnN0IGlzTnVtZXJpY0tleSA9IE51bWJlci5pc0Zpbml0ZSgrbmFtZSk7XG4gICAgY29uc3QgaXNMYXN0ID0gaW5kZXggPj0gcGF0aC5sZW5ndGg7XG4gICAgbmFtZSA9ICFuYW1lICYmIHV0aWxzLmlzQXJyYXkodGFyZ2V0KSA/IHRhcmdldC5sZW5ndGggOiBuYW1lO1xuXG4gICAgaWYgKGlzTGFzdCkge1xuICAgICAgaWYgKHV0aWxzLmhhc093blByb3AodGFyZ2V0LCBuYW1lKSkge1xuICAgICAgICB0YXJnZXRbbmFtZV0gPSBbdGFyZ2V0W25hbWVdLCB2YWx1ZV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXRbbmFtZV0gPSB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICFpc051bWVyaWNLZXk7XG4gICAgfVxuXG4gICAgaWYgKCF0YXJnZXRbbmFtZV0gfHwgIXV0aWxzLmlzT2JqZWN0KHRhcmdldFtuYW1lXSkpIHtcbiAgICAgIHRhcmdldFtuYW1lXSA9IFtdO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGJ1aWxkUGF0aChwYXRoLCB2YWx1ZSwgdGFyZ2V0W25hbWVdLCBpbmRleCk7XG5cbiAgICBpZiAocmVzdWx0ICYmIHV0aWxzLmlzQXJyYXkodGFyZ2V0W25hbWVdKSkge1xuICAgICAgdGFyZ2V0W25hbWVdID0gYXJyYXlUb09iamVjdCh0YXJnZXRbbmFtZV0pO1xuICAgIH1cblxuICAgIHJldHVybiAhaXNOdW1lcmljS2V5O1xuICB9XG5cbiAgaWYgKHV0aWxzLmlzRm9ybURhdGEoZm9ybURhdGEpICYmIHV0aWxzLmlzRnVuY3Rpb24oZm9ybURhdGEuZW50cmllcykpIHtcbiAgICBjb25zdCBvYmogPSB7fTtcblxuICAgIHV0aWxzLmZvckVhY2hFbnRyeShmb3JtRGF0YSwgKG5hbWUsIHZhbHVlKSA9PiB7XG4gICAgICBidWlsZFBhdGgocGFyc2VQcm9wUGF0aChuYW1lKSwgdmFsdWUsIG9iaiwgMCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZvcm1EYXRhVG9KU09OO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4uL2NvcmUvQXhpb3NFcnJvci5qcyc7XG5pbXBvcnQgdHJhbnNpdGlvbmFsRGVmYXVsdHMgZnJvbSAnLi90cmFuc2l0aW9uYWwuanMnO1xuaW1wb3J0IHRvRm9ybURhdGEgZnJvbSAnLi4vaGVscGVycy90b0Zvcm1EYXRhLmpzJztcbmltcG9ydCB0b1VSTEVuY29kZWRGb3JtIGZyb20gJy4uL2hlbHBlcnMvdG9VUkxFbmNvZGVkRm9ybS5qcyc7XG5pbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi4vcGxhdGZvcm0vaW5kZXguanMnO1xuaW1wb3J0IGZvcm1EYXRhVG9KU09OIGZyb20gJy4uL2hlbHBlcnMvZm9ybURhdGFUb0pTT04uanMnO1xuXG4vKipcbiAqIEl0IHRha2VzIGEgc3RyaW5nLCB0cmllcyB0byBwYXJzZSBpdCwgYW5kIGlmIGl0IGZhaWxzLCBpdCByZXR1cm5zIHRoZSBzdHJpbmdpZmllZCB2ZXJzaW9uXG4gKiBvZiB0aGUgaW5wdXRcbiAqXG4gKiBAcGFyYW0ge2FueX0gcmF3VmFsdWUgLSBUaGUgdmFsdWUgdG8gYmUgc3RyaW5naWZpZWQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwYXJzZXIgLSBBIGZ1bmN0aW9uIHRoYXQgcGFyc2VzIGEgc3RyaW5nIGludG8gYSBKYXZhU2NyaXB0IG9iamVjdC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVuY29kZXIgLSBBIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYSB2YWx1ZSBhbmQgcmV0dXJucyBhIHN0cmluZy5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBIHN0cmluZ2lmaWVkIHZlcnNpb24gb2YgdGhlIHJhd1ZhbHVlLlxuICovXG5mdW5jdGlvbiBzdHJpbmdpZnlTYWZlbHkocmF3VmFsdWUsIHBhcnNlciwgZW5jb2Rlcikge1xuICBpZiAodXRpbHMuaXNTdHJpbmcocmF3VmFsdWUpKSB7XG4gICAgdHJ5IHtcbiAgICAgIChwYXJzZXIgfHwgSlNPTi5wYXJzZSkocmF3VmFsdWUpO1xuICAgICAgcmV0dXJuIHV0aWxzLnRyaW0ocmF3VmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlLm5hbWUgIT09ICdTeW50YXhFcnJvcicpIHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gKGVuY29kZXIgfHwgSlNPTi5zdHJpbmdpZnkpKHJhd1ZhbHVlKTtcbn1cblxuY29uc3QgZGVmYXVsdHMgPSB7XG5cbiAgdHJhbnNpdGlvbmFsOiB0cmFuc2l0aW9uYWxEZWZhdWx0cyxcblxuICBhZGFwdGVyOiBbJ3hocicsICdodHRwJ10sXG5cbiAgdHJhbnNmb3JtUmVxdWVzdDogW2Z1bmN0aW9uIHRyYW5zZm9ybVJlcXVlc3QoZGF0YSwgaGVhZGVycykge1xuICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gaGVhZGVycy5nZXRDb250ZW50VHlwZSgpIHx8ICcnO1xuICAgIGNvbnN0IGhhc0pTT05Db250ZW50VHlwZSA9IGNvbnRlbnRUeXBlLmluZGV4T2YoJ2FwcGxpY2F0aW9uL2pzb24nKSA+IC0xO1xuICAgIGNvbnN0IGlzT2JqZWN0UGF5bG9hZCA9IHV0aWxzLmlzT2JqZWN0KGRhdGEpO1xuXG4gICAgaWYgKGlzT2JqZWN0UGF5bG9hZCAmJiB1dGlscy5pc0hUTUxGb3JtKGRhdGEpKSB7XG4gICAgICBkYXRhID0gbmV3IEZvcm1EYXRhKGRhdGEpO1xuICAgIH1cblxuICAgIGNvbnN0IGlzRm9ybURhdGEgPSB1dGlscy5pc0Zvcm1EYXRhKGRhdGEpO1xuXG4gICAgaWYgKGlzRm9ybURhdGEpIHtcbiAgICAgIHJldHVybiBoYXNKU09OQ29udGVudFR5cGUgPyBKU09OLnN0cmluZ2lmeShmb3JtRGF0YVRvSlNPTihkYXRhKSkgOiBkYXRhO1xuICAgIH1cblxuICAgIGlmICh1dGlscy5pc0FycmF5QnVmZmVyKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0J1ZmZlcihkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNTdHJlYW0oZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzRmlsZShkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNCbG9iKGRhdGEpXG4gICAgKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICAgaWYgKHV0aWxzLmlzQXJyYXlCdWZmZXJWaWV3KGRhdGEpKSB7XG4gICAgICByZXR1cm4gZGF0YS5idWZmZXI7XG4gICAgfVxuICAgIGlmICh1dGlscy5pc1VSTFNlYXJjaFBhcmFtcyhkYXRhKSkge1xuICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZSgnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgnLCBmYWxzZSk7XG4gICAgICByZXR1cm4gZGF0YS50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGxldCBpc0ZpbGVMaXN0O1xuXG4gICAgaWYgKGlzT2JqZWN0UGF5bG9hZCkge1xuICAgICAgaWYgKGNvbnRlbnRUeXBlLmluZGV4T2YoJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpID4gLTEpIHtcbiAgICAgICAgcmV0dXJuIHRvVVJMRW5jb2RlZEZvcm0oZGF0YSwgdGhpcy5mb3JtU2VyaWFsaXplcikudG9TdHJpbmcoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKChpc0ZpbGVMaXN0ID0gdXRpbHMuaXNGaWxlTGlzdChkYXRhKSkgfHwgY29udGVudFR5cGUuaW5kZXhPZignbXVsdGlwYXJ0L2Zvcm0tZGF0YScpID4gLTEpIHtcbiAgICAgICAgY29uc3QgX0Zvcm1EYXRhID0gdGhpcy5lbnYgJiYgdGhpcy5lbnYuRm9ybURhdGE7XG5cbiAgICAgICAgcmV0dXJuIHRvRm9ybURhdGEoXG4gICAgICAgICAgaXNGaWxlTGlzdCA/IHsnZmlsZXNbXSc6IGRhdGF9IDogZGF0YSxcbiAgICAgICAgICBfRm9ybURhdGEgJiYgbmV3IF9Gb3JtRGF0YSgpLFxuICAgICAgICAgIHRoaXMuZm9ybVNlcmlhbGl6ZXJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNPYmplY3RQYXlsb2FkIHx8IGhhc0pTT05Db250ZW50VHlwZSApIHtcbiAgICAgIGhlYWRlcnMuc2V0Q29udGVudFR5cGUoJ2FwcGxpY2F0aW9uL2pzb24nLCBmYWxzZSk7XG4gICAgICByZXR1cm4gc3RyaW5naWZ5U2FmZWx5KGRhdGEpO1xuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XSxcblxuICB0cmFuc2Zvcm1SZXNwb25zZTogW2Z1bmN0aW9uIHRyYW5zZm9ybVJlc3BvbnNlKGRhdGEpIHtcbiAgICBjb25zdCB0cmFuc2l0aW9uYWwgPSB0aGlzLnRyYW5zaXRpb25hbCB8fCBkZWZhdWx0cy50cmFuc2l0aW9uYWw7XG4gICAgY29uc3QgZm9yY2VkSlNPTlBhcnNpbmcgPSB0cmFuc2l0aW9uYWwgJiYgdHJhbnNpdGlvbmFsLmZvcmNlZEpTT05QYXJzaW5nO1xuICAgIGNvbnN0IEpTT05SZXF1ZXN0ZWQgPSB0aGlzLnJlc3BvbnNlVHlwZSA9PT0gJ2pzb24nO1xuXG4gICAgaWYgKGRhdGEgJiYgdXRpbHMuaXNTdHJpbmcoZGF0YSkgJiYgKChmb3JjZWRKU09OUGFyc2luZyAmJiAhdGhpcy5yZXNwb25zZVR5cGUpIHx8IEpTT05SZXF1ZXN0ZWQpKSB7XG4gICAgICBjb25zdCBzaWxlbnRKU09OUGFyc2luZyA9IHRyYW5zaXRpb25hbCAmJiB0cmFuc2l0aW9uYWwuc2lsZW50SlNPTlBhcnNpbmc7XG4gICAgICBjb25zdCBzdHJpY3RKU09OUGFyc2luZyA9ICFzaWxlbnRKU09OUGFyc2luZyAmJiBKU09OUmVxdWVzdGVkO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShkYXRhKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKHN0cmljdEpTT05QYXJzaW5nKSB7XG4gICAgICAgICAgaWYgKGUubmFtZSA9PT0gJ1N5bnRheEVycm9yJykge1xuICAgICAgICAgICAgdGhyb3cgQXhpb3NFcnJvci5mcm9tKGUsIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVNQT05TRSwgdGhpcywgbnVsbCwgdGhpcy5yZXNwb25zZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfV0sXG5cbiAgLyoqXG4gICAqIEEgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgdG8gYWJvcnQgYSByZXF1ZXN0LiBJZiBzZXQgdG8gMCAoZGVmYXVsdCkgYVxuICAgKiB0aW1lb3V0IGlzIG5vdCBjcmVhdGVkLlxuICAgKi9cbiAgdGltZW91dDogMCxcblxuICB4c3JmQ29va2llTmFtZTogJ1hTUkYtVE9LRU4nLFxuICB4c3JmSGVhZGVyTmFtZTogJ1gtWFNSRi1UT0tFTicsXG5cbiAgbWF4Q29udGVudExlbmd0aDogLTEsXG4gIG1heEJvZHlMZW5ndGg6IC0xLFxuXG4gIGVudjoge1xuICAgIEZvcm1EYXRhOiBwbGF0Zm9ybS5jbGFzc2VzLkZvcm1EYXRhLFxuICAgIEJsb2I6IHBsYXRmb3JtLmNsYXNzZXMuQmxvYlxuICB9LFxuXG4gIHZhbGlkYXRlU3RhdHVzOiBmdW5jdGlvbiB2YWxpZGF0ZVN0YXR1cyhzdGF0dXMpIHtcbiAgICByZXR1cm4gc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDA7XG4gIH0sXG5cbiAgaGVhZGVyczoge1xuICAgIGNvbW1vbjoge1xuICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyonLFxuICAgICAgJ0NvbnRlbnQtVHlwZSc6IHVuZGVmaW5lZFxuICAgIH1cbiAgfVxufTtcblxudXRpbHMuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdwb3N0JywgJ3B1dCcsICdwYXRjaCddLCAobWV0aG9kKSA9PiB7XG4gIGRlZmF1bHRzLmhlYWRlcnNbbWV0aG9kXSA9IHt9O1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmF1bHRzO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4vLi4vdXRpbHMuanMnO1xuXG4vLyBSYXdBeGlvc0hlYWRlcnMgd2hvc2UgZHVwbGljYXRlcyBhcmUgaWdub3JlZCBieSBub2RlXG4vLyBjLmYuIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvaHR0cC5odG1sI2h0dHBfbWVzc2FnZV9oZWFkZXJzXG5jb25zdCBpZ25vcmVEdXBsaWNhdGVPZiA9IHV0aWxzLnRvT2JqZWN0U2V0KFtcbiAgJ2FnZScsICdhdXRob3JpemF0aW9uJywgJ2NvbnRlbnQtbGVuZ3RoJywgJ2NvbnRlbnQtdHlwZScsICdldGFnJyxcbiAgJ2V4cGlyZXMnLCAnZnJvbScsICdob3N0JywgJ2lmLW1vZGlmaWVkLXNpbmNlJywgJ2lmLXVubW9kaWZpZWQtc2luY2UnLFxuICAnbGFzdC1tb2RpZmllZCcsICdsb2NhdGlvbicsICdtYXgtZm9yd2FyZHMnLCAncHJveHktYXV0aG9yaXphdGlvbicsXG4gICdyZWZlcmVyJywgJ3JldHJ5LWFmdGVyJywgJ3VzZXItYWdlbnQnXG5dKTtcblxuLyoqXG4gKiBQYXJzZSBoZWFkZXJzIGludG8gYW4gb2JqZWN0XG4gKlxuICogYGBgXG4gKiBEYXRlOiBXZWQsIDI3IEF1ZyAyMDE0IDA4OjU4OjQ5IEdNVFxuICogQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uXG4gKiBDb25uZWN0aW9uOiBrZWVwLWFsaXZlXG4gKiBUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZFxuICogYGBgXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHJhd0hlYWRlcnMgSGVhZGVycyBuZWVkaW5nIHRvIGJlIHBhcnNlZFxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IEhlYWRlcnMgcGFyc2VkIGludG8gYW4gb2JqZWN0XG4gKi9cbmV4cG9ydCBkZWZhdWx0IHJhd0hlYWRlcnMgPT4ge1xuICBjb25zdCBwYXJzZWQgPSB7fTtcbiAgbGV0IGtleTtcbiAgbGV0IHZhbDtcbiAgbGV0IGk7XG5cbiAgcmF3SGVhZGVycyAmJiByYXdIZWFkZXJzLnNwbGl0KCdcXG4nKS5mb3JFYWNoKGZ1bmN0aW9uIHBhcnNlcihsaW5lKSB7XG4gICAgaSA9IGxpbmUuaW5kZXhPZignOicpO1xuICAgIGtleSA9IGxpbmUuc3Vic3RyaW5nKDAsIGkpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhbCA9IGxpbmUuc3Vic3RyaW5nKGkgKyAxKS50cmltKCk7XG5cbiAgICBpZiAoIWtleSB8fCAocGFyc2VkW2tleV0gJiYgaWdub3JlRHVwbGljYXRlT2Zba2V5XSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnc2V0LWNvb2tpZScpIHtcbiAgICAgIGlmIChwYXJzZWRba2V5XSkge1xuICAgICAgICBwYXJzZWRba2V5XS5wdXNoKHZhbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJzZWRba2V5XSA9IFt2YWxdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwYXJzZWRba2V5XSA9IHBhcnNlZFtrZXldID8gcGFyc2VkW2tleV0gKyAnLCAnICsgdmFsIDogdmFsO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IHBhcnNlSGVhZGVycyBmcm9tICcuLi9oZWxwZXJzL3BhcnNlSGVhZGVycy5qcyc7XG5cbmNvbnN0ICRpbnRlcm5hbHMgPSBTeW1ib2woJ2ludGVybmFscycpO1xuXG5mdW5jdGlvbiBub3JtYWxpemVIZWFkZXIoaGVhZGVyKSB7XG4gIHJldHVybiBoZWFkZXIgJiYgU3RyaW5nKGhlYWRlcikudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVZhbHVlKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gZmFsc2UgfHwgdmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiB1dGlscy5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLm1hcChub3JtYWxpemVWYWx1ZSkgOiBTdHJpbmcodmFsdWUpO1xufVxuXG5mdW5jdGlvbiBwYXJzZVRva2VucyhzdHIpIHtcbiAgY29uc3QgdG9rZW5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgY29uc3QgdG9rZW5zUkUgPSAvKFteXFxzLDs9XSspXFxzKig/Oj1cXHMqKFteLDtdKykpPy9nO1xuICBsZXQgbWF0Y2g7XG5cbiAgd2hpbGUgKChtYXRjaCA9IHRva2Vuc1JFLmV4ZWMoc3RyKSkpIHtcbiAgICB0b2tlbnNbbWF0Y2hbMV1dID0gbWF0Y2hbMl07XG4gIH1cblxuICByZXR1cm4gdG9rZW5zO1xufVxuXG5jb25zdCBpc1ZhbGlkSGVhZGVyTmFtZSA9IChzdHIpID0+IC9eWy1fYS16QS1aMC05XmB8fiwhIyQlJicqKy5dKyQvLnRlc3Qoc3RyLnRyaW0oKSk7XG5cbmZ1bmN0aW9uIG1hdGNoSGVhZGVyVmFsdWUoY29udGV4dCwgdmFsdWUsIGhlYWRlciwgZmlsdGVyLCBpc0hlYWRlck5hbWVGaWx0ZXIpIHtcbiAgaWYgKHV0aWxzLmlzRnVuY3Rpb24oZmlsdGVyKSkge1xuICAgIHJldHVybiBmaWx0ZXIuY2FsbCh0aGlzLCB2YWx1ZSwgaGVhZGVyKTtcbiAgfVxuXG4gIGlmIChpc0hlYWRlck5hbWVGaWx0ZXIpIHtcbiAgICB2YWx1ZSA9IGhlYWRlcjtcbiAgfVxuXG4gIGlmICghdXRpbHMuaXNTdHJpbmcodmFsdWUpKSByZXR1cm47XG5cbiAgaWYgKHV0aWxzLmlzU3RyaW5nKGZpbHRlcikpIHtcbiAgICByZXR1cm4gdmFsdWUuaW5kZXhPZihmaWx0ZXIpICE9PSAtMTtcbiAgfVxuXG4gIGlmICh1dGlscy5pc1JlZ0V4cChmaWx0ZXIpKSB7XG4gICAgcmV0dXJuIGZpbHRlci50ZXN0KHZhbHVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmb3JtYXRIZWFkZXIoaGVhZGVyKSB7XG4gIHJldHVybiBoZWFkZXIudHJpbSgpXG4gICAgLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvKFthLXpcXGRdKShcXHcqKS9nLCAodywgY2hhciwgc3RyKSA9PiB7XG4gICAgICByZXR1cm4gY2hhci50b1VwcGVyQ2FzZSgpICsgc3RyO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBidWlsZEFjY2Vzc29ycyhvYmosIGhlYWRlcikge1xuICBjb25zdCBhY2Nlc3Nvck5hbWUgPSB1dGlscy50b0NhbWVsQ2FzZSgnICcgKyBoZWFkZXIpO1xuXG4gIFsnZ2V0JywgJ3NldCcsICdoYXMnXS5mb3JFYWNoKG1ldGhvZE5hbWUgPT4ge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIG1ldGhvZE5hbWUgKyBhY2Nlc3Nvck5hbWUsIHtcbiAgICAgIHZhbHVlOiBmdW5jdGlvbihhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgICAgIHJldHVybiB0aGlzW21ldGhvZE5hbWVdLmNhbGwodGhpcywgaGVhZGVyLCBhcmcxLCBhcmcyLCBhcmczKTtcbiAgICAgIH0sXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgfSk7XG59XG5cbmNsYXNzIEF4aW9zSGVhZGVycyB7XG4gIGNvbnN0cnVjdG9yKGhlYWRlcnMpIHtcbiAgICBoZWFkZXJzICYmIHRoaXMuc2V0KGhlYWRlcnMpO1xuICB9XG5cbiAgc2V0KGhlYWRlciwgdmFsdWVPclJld3JpdGUsIHJld3JpdGUpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcblxuICAgIGZ1bmN0aW9uIHNldEhlYWRlcihfdmFsdWUsIF9oZWFkZXIsIF9yZXdyaXRlKSB7XG4gICAgICBjb25zdCBsSGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKF9oZWFkZXIpO1xuXG4gICAgICBpZiAoIWxIZWFkZXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdoZWFkZXIgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBrZXkgPSB1dGlscy5maW5kS2V5KHNlbGYsIGxIZWFkZXIpO1xuXG4gICAgICBpZigha2V5IHx8IHNlbGZba2V5XSA9PT0gdW5kZWZpbmVkIHx8IF9yZXdyaXRlID09PSB0cnVlIHx8IChfcmV3cml0ZSA9PT0gdW5kZWZpbmVkICYmIHNlbGZba2V5XSAhPT0gZmFsc2UpKSB7XG4gICAgICAgIHNlbGZba2V5IHx8IF9oZWFkZXJdID0gbm9ybWFsaXplVmFsdWUoX3ZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzZXRIZWFkZXJzID0gKGhlYWRlcnMsIF9yZXdyaXRlKSA9PlxuICAgICAgdXRpbHMuZm9yRWFjaChoZWFkZXJzLCAoX3ZhbHVlLCBfaGVhZGVyKSA9PiBzZXRIZWFkZXIoX3ZhbHVlLCBfaGVhZGVyLCBfcmV3cml0ZSkpO1xuXG4gICAgaWYgKHV0aWxzLmlzUGxhaW5PYmplY3QoaGVhZGVyKSB8fCBoZWFkZXIgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yKSB7XG4gICAgICBzZXRIZWFkZXJzKGhlYWRlciwgdmFsdWVPclJld3JpdGUpXG4gICAgfSBlbHNlIGlmKHV0aWxzLmlzU3RyaW5nKGhlYWRlcikgJiYgKGhlYWRlciA9IGhlYWRlci50cmltKCkpICYmICFpc1ZhbGlkSGVhZGVyTmFtZShoZWFkZXIpKSB7XG4gICAgICBzZXRIZWFkZXJzKHBhcnNlSGVhZGVycyhoZWFkZXIpLCB2YWx1ZU9yUmV3cml0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhlYWRlciAhPSBudWxsICYmIHNldEhlYWRlcih2YWx1ZU9yUmV3cml0ZSwgaGVhZGVyLCByZXdyaXRlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGdldChoZWFkZXIsIHBhcnNlcikge1xuICAgIGhlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihoZWFkZXIpO1xuXG4gICAgaWYgKGhlYWRlcikge1xuICAgICAgY29uc3Qga2V5ID0gdXRpbHMuZmluZEtleSh0aGlzLCBoZWFkZXIpO1xuXG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpc1trZXldO1xuXG4gICAgICAgIGlmICghcGFyc2VyKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcnNlciA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHJldHVybiBwYXJzZVRva2Vucyh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXRpbHMuaXNGdW5jdGlvbihwYXJzZXIpKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlci5jYWxsKHRoaXMsIHZhbHVlLCBrZXkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHV0aWxzLmlzUmVnRXhwKHBhcnNlcikpIHtcbiAgICAgICAgICByZXR1cm4gcGFyc2VyLmV4ZWModmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigncGFyc2VyIG11c3QgYmUgYm9vbGVhbnxyZWdleHB8ZnVuY3Rpb24nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBoYXMoaGVhZGVyLCBtYXRjaGVyKSB7XG4gICAgaGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKGhlYWRlcik7XG5cbiAgICBpZiAoaGVhZGVyKSB7XG4gICAgICBjb25zdCBrZXkgPSB1dGlscy5maW5kS2V5KHRoaXMsIGhlYWRlcik7XG5cbiAgICAgIHJldHVybiAhIShrZXkgJiYgdGhpc1trZXldICE9PSB1bmRlZmluZWQgJiYgKCFtYXRjaGVyIHx8IG1hdGNoSGVhZGVyVmFsdWUodGhpcywgdGhpc1trZXldLCBrZXksIG1hdGNoZXIpKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZGVsZXRlKGhlYWRlciwgbWF0Y2hlcikge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGxldCBkZWxldGVkID0gZmFsc2U7XG5cbiAgICBmdW5jdGlvbiBkZWxldGVIZWFkZXIoX2hlYWRlcikge1xuICAgICAgX2hlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihfaGVhZGVyKTtcblxuICAgICAgaWYgKF9oZWFkZXIpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdXRpbHMuZmluZEtleShzZWxmLCBfaGVhZGVyKTtcblxuICAgICAgICBpZiAoa2V5ICYmICghbWF0Y2hlciB8fCBtYXRjaEhlYWRlclZhbHVlKHNlbGYsIHNlbGZba2V5XSwga2V5LCBtYXRjaGVyKSkpIHtcbiAgICAgICAgICBkZWxldGUgc2VsZltrZXldO1xuXG4gICAgICAgICAgZGVsZXRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodXRpbHMuaXNBcnJheShoZWFkZXIpKSB7XG4gICAgICBoZWFkZXIuZm9yRWFjaChkZWxldGVIZWFkZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGVIZWFkZXIoaGVhZGVyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGVsZXRlZDtcbiAgfVxuXG4gIGNsZWFyKG1hdGNoZXIpIHtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModGhpcyk7XG4gICAgbGV0IGkgPSBrZXlzLmxlbmd0aDtcbiAgICBsZXQgZGVsZXRlZCA9IGZhbHNlO1xuXG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICAgIGlmKCFtYXRjaGVyIHx8IG1hdGNoSGVhZGVyVmFsdWUodGhpcywgdGhpc1trZXldLCBrZXksIG1hdGNoZXIsIHRydWUpKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzW2tleV07XG4gICAgICAgIGRlbGV0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkZWxldGVkO1xuICB9XG5cbiAgbm9ybWFsaXplKGZvcm1hdCkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGNvbnN0IGhlYWRlcnMgPSB7fTtcblxuICAgIHV0aWxzLmZvckVhY2godGhpcywgKHZhbHVlLCBoZWFkZXIpID0+IHtcbiAgICAgIGNvbnN0IGtleSA9IHV0aWxzLmZpbmRLZXkoaGVhZGVycywgaGVhZGVyKTtcblxuICAgICAgaWYgKGtleSkge1xuICAgICAgICBzZWxmW2tleV0gPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIGRlbGV0ZSBzZWxmW2hlYWRlcl07XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IGZvcm1hdCA/IGZvcm1hdEhlYWRlcihoZWFkZXIpIDogU3RyaW5nKGhlYWRlcikudHJpbSgpO1xuXG4gICAgICBpZiAobm9ybWFsaXplZCAhPT0gaGVhZGVyKSB7XG4gICAgICAgIGRlbGV0ZSBzZWxmW2hlYWRlcl07XG4gICAgICB9XG5cbiAgICAgIHNlbGZbbm9ybWFsaXplZF0gPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSk7XG5cbiAgICAgIGhlYWRlcnNbbm9ybWFsaXplZF0gPSB0cnVlO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBjb25jYXQoLi4udGFyZ2V0cykge1xuICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLmNvbmNhdCh0aGlzLCAuLi50YXJnZXRzKTtcbiAgfVxuXG4gIHRvSlNPTihhc1N0cmluZ3MpIHtcbiAgICBjb25zdCBvYmogPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgdXRpbHMuZm9yRWFjaCh0aGlzLCAodmFsdWUsIGhlYWRlcikgPT4ge1xuICAgICAgdmFsdWUgIT0gbnVsbCAmJiB2YWx1ZSAhPT0gZmFsc2UgJiYgKG9ialtoZWFkZXJdID0gYXNTdHJpbmdzICYmIHV0aWxzLmlzQXJyYXkodmFsdWUpID8gdmFsdWUuam9pbignLCAnKSA6IHZhbHVlKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICBbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSlbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpLm1hcCgoW2hlYWRlciwgdmFsdWVdKSA9PiBoZWFkZXIgKyAnOiAnICsgdmFsdWUpLmpvaW4oJ1xcbicpO1xuICB9XG5cbiAgZ2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkge1xuICAgIHJldHVybiAnQXhpb3NIZWFkZXJzJztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tKHRoaW5nKSB7XG4gICAgcmV0dXJuIHRoaW5nIGluc3RhbmNlb2YgdGhpcyA/IHRoaW5nIDogbmV3IHRoaXModGhpbmcpO1xuICB9XG5cbiAgc3RhdGljIGNvbmNhdChmaXJzdCwgLi4udGFyZ2V0cykge1xuICAgIGNvbnN0IGNvbXB1dGVkID0gbmV3IHRoaXMoZmlyc3QpO1xuXG4gICAgdGFyZ2V0cy5mb3JFYWNoKCh0YXJnZXQpID0+IGNvbXB1dGVkLnNldCh0YXJnZXQpKTtcblxuICAgIHJldHVybiBjb21wdXRlZDtcbiAgfVxuXG4gIHN0YXRpYyBhY2Nlc3NvcihoZWFkZXIpIHtcbiAgICBjb25zdCBpbnRlcm5hbHMgPSB0aGlzWyRpbnRlcm5hbHNdID0gKHRoaXNbJGludGVybmFsc10gPSB7XG4gICAgICBhY2Nlc3NvcnM6IHt9XG4gICAgfSk7XG5cbiAgICBjb25zdCBhY2Nlc3NvcnMgPSBpbnRlcm5hbHMuYWNjZXNzb3JzO1xuICAgIGNvbnN0IHByb3RvdHlwZSA9IHRoaXMucHJvdG90eXBlO1xuXG4gICAgZnVuY3Rpb24gZGVmaW5lQWNjZXNzb3IoX2hlYWRlcikge1xuICAgICAgY29uc3QgbEhlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihfaGVhZGVyKTtcblxuICAgICAgaWYgKCFhY2Nlc3NvcnNbbEhlYWRlcl0pIHtcbiAgICAgICAgYnVpbGRBY2Nlc3NvcnMocHJvdG90eXBlLCBfaGVhZGVyKTtcbiAgICAgICAgYWNjZXNzb3JzW2xIZWFkZXJdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB1dGlscy5pc0FycmF5KGhlYWRlcikgPyBoZWFkZXIuZm9yRWFjaChkZWZpbmVBY2Nlc3NvcikgOiBkZWZpbmVBY2Nlc3NvcihoZWFkZXIpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn1cblxuQXhpb3NIZWFkZXJzLmFjY2Vzc29yKFsnQ29udGVudC1UeXBlJywgJ0NvbnRlbnQtTGVuZ3RoJywgJ0FjY2VwdCcsICdBY2NlcHQtRW5jb2RpbmcnLCAnVXNlci1BZ2VudCcsICdBdXRob3JpemF0aW9uJ10pO1xuXG4vLyByZXNlcnZlZCBuYW1lcyBob3RmaXhcbnV0aWxzLnJlZHVjZURlc2NyaXB0b3JzKEF4aW9zSGVhZGVycy5wcm90b3R5cGUsICh7dmFsdWV9LCBrZXkpID0+IHtcbiAgbGV0IG1hcHBlZCA9IGtleVswXS50b1VwcGVyQ2FzZSgpICsga2V5LnNsaWNlKDEpOyAvLyBtYXAgYHNldGAgPT4gYFNldGBcbiAgcmV0dXJuIHtcbiAgICBnZXQ6ICgpID0+IHZhbHVlLFxuICAgIHNldChoZWFkZXJWYWx1ZSkge1xuICAgICAgdGhpc1ttYXBwZWRdID0gaGVhZGVyVmFsdWU7XG4gICAgfVxuICB9XG59KTtcblxudXRpbHMuZnJlZXplTWV0aG9kcyhBeGlvc0hlYWRlcnMpO1xuXG5leHBvcnQgZGVmYXVsdCBBeGlvc0hlYWRlcnM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5pbXBvcnQgZGVmYXVsdHMgZnJvbSAnLi4vZGVmYXVsdHMvaW5kZXguanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tICcuLi9jb3JlL0F4aW9zSGVhZGVycy5qcyc7XG5cbi8qKlxuICogVHJhbnNmb3JtIHRoZSBkYXRhIGZvciBhIHJlcXVlc3Qgb3IgYSByZXNwb25zZVxuICpcbiAqIEBwYXJhbSB7QXJyYXl8RnVuY3Rpb259IGZucyBBIHNpbmdsZSBmdW5jdGlvbiBvciBBcnJheSBvZiBmdW5jdGlvbnNcbiAqIEBwYXJhbSB7P09iamVjdH0gcmVzcG9uc2UgVGhlIHJlc3BvbnNlIG9iamVjdFxuICpcbiAqIEByZXR1cm5zIHsqfSBUaGUgcmVzdWx0aW5nIHRyYW5zZm9ybWVkIGRhdGFcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdHJhbnNmb3JtRGF0YShmbnMsIHJlc3BvbnNlKSB7XG4gIGNvbnN0IGNvbmZpZyA9IHRoaXMgfHwgZGVmYXVsdHM7XG4gIGNvbnN0IGNvbnRleHQgPSByZXNwb25zZSB8fCBjb25maWc7XG4gIGNvbnN0IGhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShjb250ZXh0LmhlYWRlcnMpO1xuICBsZXQgZGF0YSA9IGNvbnRleHQuZGF0YTtcblxuICB1dGlscy5mb3JFYWNoKGZucywgZnVuY3Rpb24gdHJhbnNmb3JtKGZuKSB7XG4gICAgZGF0YSA9IGZuLmNhbGwoY29uZmlnLCBkYXRhLCBoZWFkZXJzLm5vcm1hbGl6ZSgpLCByZXNwb25zZSA/IHJlc3BvbnNlLnN0YXR1cyA6IHVuZGVmaW5lZCk7XG4gIH0pO1xuXG4gIGhlYWRlcnMubm9ybWFsaXplKCk7XG5cbiAgcmV0dXJuIGRhdGE7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0NhbmNlbCh2YWx1ZSkge1xuICByZXR1cm4gISEodmFsdWUgJiYgdmFsdWUuX19DQU5DRUxfXyk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcblxuLyoqXG4gKiBBIGBDYW5jZWxlZEVycm9yYCBpcyBhbiBvYmplY3QgdGhhdCBpcyB0aHJvd24gd2hlbiBhbiBvcGVyYXRpb24gaXMgY2FuY2VsZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmc9fSBtZXNzYWdlIFRoZSBtZXNzYWdlLlxuICogQHBhcmFtIHtPYmplY3Q9fSBjb25maWcgVGhlIGNvbmZpZy5cbiAqIEBwYXJhbSB7T2JqZWN0PX0gcmVxdWVzdCBUaGUgcmVxdWVzdC5cbiAqXG4gKiBAcmV0dXJucyB7Q2FuY2VsZWRFcnJvcn0gVGhlIGNyZWF0ZWQgZXJyb3IuXG4gKi9cbmZ1bmN0aW9uIENhbmNlbGVkRXJyb3IobWVzc2FnZSwgY29uZmlnLCByZXF1ZXN0KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lcS1udWxsLGVxZXFlcVxuICBBeGlvc0Vycm9yLmNhbGwodGhpcywgbWVzc2FnZSA9PSBudWxsID8gJ2NhbmNlbGVkJyA6IG1lc3NhZ2UsIEF4aW9zRXJyb3IuRVJSX0NBTkNFTEVELCBjb25maWcsIHJlcXVlc3QpO1xuICB0aGlzLm5hbWUgPSAnQ2FuY2VsZWRFcnJvcic7XG59XG5cbnV0aWxzLmluaGVyaXRzKENhbmNlbGVkRXJyb3IsIEF4aW9zRXJyb3IsIHtcbiAgX19DQU5DRUxfXzogdHJ1ZVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IENhbmNlbGVkRXJyb3I7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuL0F4aW9zRXJyb3IuanMnO1xuXG4vKipcbiAqIFJlc29sdmUgb3IgcmVqZWN0IGEgUHJvbWlzZSBiYXNlZCBvbiByZXNwb25zZSBzdGF0dXMuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVzb2x2ZSBBIGZ1bmN0aW9uIHRoYXQgcmVzb2x2ZXMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWplY3QgQSBmdW5jdGlvbiB0aGF0IHJlamVjdHMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge29iamVjdH0gcmVzcG9uc2UgVGhlIHJlc3BvbnNlLlxuICpcbiAqIEByZXR1cm5zIHtvYmplY3R9IFRoZSByZXNwb25zZS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgcmVzcG9uc2UpIHtcbiAgY29uc3QgdmFsaWRhdGVTdGF0dXMgPSByZXNwb25zZS5jb25maWcudmFsaWRhdGVTdGF0dXM7XG4gIGlmICghcmVzcG9uc2Uuc3RhdHVzIHx8ICF2YWxpZGF0ZVN0YXR1cyB8fCB2YWxpZGF0ZVN0YXR1cyhyZXNwb25zZS5zdGF0dXMpKSB7XG4gICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gIH0gZWxzZSB7XG4gICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgJ1JlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgJyArIHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIFtBeGlvc0Vycm9yLkVSUl9CQURfUkVRVUVTVCwgQXhpb3NFcnJvci5FUlJfQkFEX1JFU1BPTlNFXVtNYXRoLmZsb29yKHJlc3BvbnNlLnN0YXR1cyAvIDEwMCkgLSA0XSxcbiAgICAgIHJlc3BvbnNlLmNvbmZpZyxcbiAgICAgIHJlc3BvbnNlLnJlcXVlc3QsXG4gICAgICByZXNwb25zZVxuICAgICkpO1xuICB9XG59XG4iLCAiaW1wb3J0IHV0aWxzIGZyb20gJy4vLi4vdXRpbHMuanMnO1xuaW1wb3J0IHBsYXRmb3JtIGZyb20gJy4uL3BsYXRmb3JtL2luZGV4LmpzJztcblxuZXhwb3J0IGRlZmF1bHQgcGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52ID9cblxuICAvLyBTdGFuZGFyZCBicm93c2VyIGVudnMgc3VwcG9ydCBkb2N1bWVudC5jb29raWVcbiAge1xuICAgIHdyaXRlKG5hbWUsIHZhbHVlLCBleHBpcmVzLCBwYXRoLCBkb21haW4sIHNlY3VyZSkge1xuICAgICAgY29uc3QgY29va2llID0gW25hbWUgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpXTtcblxuICAgICAgdXRpbHMuaXNOdW1iZXIoZXhwaXJlcykgJiYgY29va2llLnB1c2goJ2V4cGlyZXM9JyArIG5ldyBEYXRlKGV4cGlyZXMpLnRvR01UU3RyaW5nKCkpO1xuXG4gICAgICB1dGlscy5pc1N0cmluZyhwYXRoKSAmJiBjb29raWUucHVzaCgncGF0aD0nICsgcGF0aCk7XG5cbiAgICAgIHV0aWxzLmlzU3RyaW5nKGRvbWFpbikgJiYgY29va2llLnB1c2goJ2RvbWFpbj0nICsgZG9tYWluKTtcblxuICAgICAgc2VjdXJlID09PSB0cnVlICYmIGNvb2tpZS5wdXNoKCdzZWN1cmUnKTtcblxuICAgICAgZG9jdW1lbnQuY29va2llID0gY29va2llLmpvaW4oJzsgJyk7XG4gICAgfSxcblxuICAgIHJlYWQobmFtZSkge1xuICAgICAgY29uc3QgbWF0Y2ggPSBkb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgnKF58O1xcXFxzKikoJyArIG5hbWUgKyAnKT0oW147XSopJykpO1xuICAgICAgcmV0dXJuIChtYXRjaCA/IGRlY29kZVVSSUNvbXBvbmVudChtYXRjaFszXSkgOiBudWxsKTtcbiAgICB9LFxuXG4gICAgcmVtb3ZlKG5hbWUpIHtcbiAgICAgIHRoaXMud3JpdGUobmFtZSwgJycsIERhdGUubm93KCkgLSA4NjQwMDAwMCk7XG4gICAgfVxuICB9XG5cbiAgOlxuXG4gIC8vIE5vbi1zdGFuZGFyZCBicm93c2VyIGVudiAod2ViIHdvcmtlcnMsIHJlYWN0LW5hdGl2ZSkgbGFjayBuZWVkZWQgc3VwcG9ydC5cbiAge1xuICAgIHdyaXRlKCkge30sXG4gICAgcmVhZCgpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0sXG4gICAgcmVtb3ZlKCkge31cbiAgfTtcblxuIiwgIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGVcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBVUkwgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBzcGVjaWZpZWQgVVJMIGlzIGFic29sdXRlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNBYnNvbHV0ZVVSTCh1cmwpIHtcbiAgLy8gQSBVUkwgaXMgY29uc2lkZXJlZCBhYnNvbHV0ZSBpZiBpdCBiZWdpbnMgd2l0aCBcIjxzY2hlbWU+Oi8vXCIgb3IgXCIvL1wiIChwcm90b2NvbC1yZWxhdGl2ZSBVUkwpLlxuICAvLyBSRkMgMzk4NiBkZWZpbmVzIHNjaGVtZSBuYW1lIGFzIGEgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyBiZWdpbm5pbmcgd2l0aCBhIGxldHRlciBhbmQgZm9sbG93ZWRcbiAgLy8gYnkgYW55IGNvbWJpbmF0aW9uIG9mIGxldHRlcnMsIGRpZ2l0cywgcGx1cywgcGVyaW9kLCBvciBoeXBoZW4uXG4gIHJldHVybiAvXihbYS16XVthLXpcXGQrXFwtLl0qOik/XFwvXFwvL2kudGVzdCh1cmwpO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFVSTCBieSBjb21iaW5pbmcgdGhlIHNwZWNpZmllZCBVUkxzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVUkwgVGhlIGJhc2UgVVJMXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVsYXRpdmVVUkwgVGhlIHJlbGF0aXZlIFVSTFxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb21iaW5lZCBVUkxcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29tYmluZVVSTHMoYmFzZVVSTCwgcmVsYXRpdmVVUkwpIHtcbiAgcmV0dXJuIHJlbGF0aXZlVVJMXG4gICAgPyBiYXNlVVJMLnJlcGxhY2UoL1xcLz9cXC8kLywgJycpICsgJy8nICsgcmVsYXRpdmVVUkwucmVwbGFjZSgvXlxcLysvLCAnJylcbiAgICA6IGJhc2VVUkw7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgaXNBYnNvbHV0ZVVSTCBmcm9tICcuLi9oZWxwZXJzL2lzQWJzb2x1dGVVUkwuanMnO1xuaW1wb3J0IGNvbWJpbmVVUkxzIGZyb20gJy4uL2hlbHBlcnMvY29tYmluZVVSTHMuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgVVJMIGJ5IGNvbWJpbmluZyB0aGUgYmFzZVVSTCB3aXRoIHRoZSByZXF1ZXN0ZWRVUkwsXG4gKiBvbmx5IHdoZW4gdGhlIHJlcXVlc3RlZFVSTCBpcyBub3QgYWxyZWFkeSBhbiBhYnNvbHV0ZSBVUkwuXG4gKiBJZiB0aGUgcmVxdWVzdFVSTCBpcyBhYnNvbHV0ZSwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSByZXF1ZXN0ZWRVUkwgdW50b3VjaGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVVJMIFRoZSBiYXNlIFVSTFxuICogQHBhcmFtIHtzdHJpbmd9IHJlcXVlc3RlZFVSTCBBYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkwgdG8gY29tYmluZVxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb21iaW5lZCBmdWxsIHBhdGhcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRGdWxsUGF0aChiYXNlVVJMLCByZXF1ZXN0ZWRVUkwpIHtcbiAgaWYgKGJhc2VVUkwgJiYgIWlzQWJzb2x1dGVVUkwocmVxdWVzdGVkVVJMKSkge1xuICAgIHJldHVybiBjb21iaW5lVVJMcyhiYXNlVVJMLCByZXF1ZXN0ZWRVUkwpO1xuICB9XG4gIHJldHVybiByZXF1ZXN0ZWRVUkw7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5pbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi4vcGxhdGZvcm0vaW5kZXguanMnO1xuXG5leHBvcnQgZGVmYXVsdCBwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJFbnYgP1xuXG4vLyBTdGFuZGFyZCBicm93c2VyIGVudnMgaGF2ZSBmdWxsIHN1cHBvcnQgb2YgdGhlIEFQSXMgbmVlZGVkIHRvIHRlc3Rcbi8vIHdoZXRoZXIgdGhlIHJlcXVlc3QgVVJMIGlzIG9mIHRoZSBzYW1lIG9yaWdpbiBhcyBjdXJyZW50IGxvY2F0aW9uLlxuICAoZnVuY3Rpb24gc3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgIGNvbnN0IG1zaWUgPSAvKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xuICAgIGNvbnN0IHVybFBhcnNpbmdOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgIGxldCBvcmlnaW5VUkw7XG5cbiAgICAvKipcbiAgICAqIFBhcnNlIGEgVVJMIHRvIGRpc2NvdmVyIGl0cyBjb21wb25lbnRzXG4gICAgKlxuICAgICogQHBhcmFtIHtTdHJpbmd9IHVybCBUaGUgVVJMIHRvIGJlIHBhcnNlZFxuICAgICogQHJldHVybnMge09iamVjdH1cbiAgICAqL1xuICAgIGZ1bmN0aW9uIHJlc29sdmVVUkwodXJsKSB7XG4gICAgICBsZXQgaHJlZiA9IHVybDtcblxuICAgICAgaWYgKG1zaWUpIHtcbiAgICAgICAgLy8gSUUgbmVlZHMgYXR0cmlidXRlIHNldCB0d2ljZSB0byBub3JtYWxpemUgcHJvcGVydGllc1xuICAgICAgICB1cmxQYXJzaW5nTm9kZS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVmKTtcbiAgICAgICAgaHJlZiA9IHVybFBhcnNpbmdOb2RlLmhyZWY7XG4gICAgICB9XG5cbiAgICAgIHVybFBhcnNpbmdOb2RlLnNldEF0dHJpYnV0ZSgnaHJlZicsIGhyZWYpO1xuXG4gICAgICAvLyB1cmxQYXJzaW5nTm9kZSBwcm92aWRlcyB0aGUgVXJsVXRpbHMgaW50ZXJmYWNlIC0gaHR0cDovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3VybHV0aWxzXG4gICAgICByZXR1cm4ge1xuICAgICAgICBocmVmOiB1cmxQYXJzaW5nTm9kZS5ocmVmLFxuICAgICAgICBwcm90b2NvbDogdXJsUGFyc2luZ05vZGUucHJvdG9jb2wgPyB1cmxQYXJzaW5nTm9kZS5wcm90b2NvbC5yZXBsYWNlKC86JC8sICcnKSA6ICcnLFxuICAgICAgICBob3N0OiB1cmxQYXJzaW5nTm9kZS5ob3N0LFxuICAgICAgICBzZWFyY2g6IHVybFBhcnNpbmdOb2RlLnNlYXJjaCA/IHVybFBhcnNpbmdOb2RlLnNlYXJjaC5yZXBsYWNlKC9eXFw/LywgJycpIDogJycsXG4gICAgICAgIGhhc2g6IHVybFBhcnNpbmdOb2RlLmhhc2ggPyB1cmxQYXJzaW5nTm9kZS5oYXNoLnJlcGxhY2UoL14jLywgJycpIDogJycsXG4gICAgICAgIGhvc3RuYW1lOiB1cmxQYXJzaW5nTm9kZS5ob3N0bmFtZSxcbiAgICAgICAgcG9ydDogdXJsUGFyc2luZ05vZGUucG9ydCxcbiAgICAgICAgcGF0aG5hbWU6ICh1cmxQYXJzaW5nTm9kZS5wYXRobmFtZS5jaGFyQXQoMCkgPT09ICcvJykgP1xuICAgICAgICAgIHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lIDpcbiAgICAgICAgICAnLycgKyB1cmxQYXJzaW5nTm9kZS5wYXRobmFtZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBvcmlnaW5VUkwgPSByZXNvbHZlVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcblxuICAgIC8qKlxuICAgICogRGV0ZXJtaW5lIGlmIGEgVVJMIHNoYXJlcyB0aGUgc2FtZSBvcmlnaW4gYXMgdGhlIGN1cnJlbnQgbG9jYXRpb25cbiAgICAqXG4gICAgKiBAcGFyYW0ge1N0cmluZ30gcmVxdWVzdFVSTCBUaGUgVVJMIHRvIHRlc3RcbiAgICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIFVSTCBzaGFyZXMgdGhlIHNhbWUgb3JpZ2luLCBvdGhlcndpc2UgZmFsc2VcbiAgICAqL1xuICAgIHJldHVybiBmdW5jdGlvbiBpc1VSTFNhbWVPcmlnaW4ocmVxdWVzdFVSTCkge1xuICAgICAgY29uc3QgcGFyc2VkID0gKHV0aWxzLmlzU3RyaW5nKHJlcXVlc3RVUkwpKSA/IHJlc29sdmVVUkwocmVxdWVzdFVSTCkgOiByZXF1ZXN0VVJMO1xuICAgICAgcmV0dXJuIChwYXJzZWQucHJvdG9jb2wgPT09IG9yaWdpblVSTC5wcm90b2NvbCAmJlxuICAgICAgICAgIHBhcnNlZC5ob3N0ID09PSBvcmlnaW5VUkwuaG9zdCk7XG4gICAgfTtcbiAgfSkoKSA6XG5cbiAgLy8gTm9uIHN0YW5kYXJkIGJyb3dzZXIgZW52cyAod2ViIHdvcmtlcnMsIHJlYWN0LW5hdGl2ZSkgbGFjayBuZWVkZWQgc3VwcG9ydC5cbiAgKGZ1bmN0aW9uIG5vblN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gaXNVUkxTYW1lT3JpZ2luKCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgfSkoKTtcbiIsICIndXNlIHN0cmljdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBhcnNlUHJvdG9jb2wodXJsKSB7XG4gIGNvbnN0IG1hdGNoID0gL14oWy0rXFx3XXsxLDI1fSkoOj9cXC9cXC98OikvLmV4ZWModXJsKTtcbiAgcmV0dXJuIG1hdGNoICYmIG1hdGNoWzFdIHx8ICcnO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBDYWxjdWxhdGUgZGF0YSBtYXhSYXRlXG4gKiBAcGFyYW0ge051bWJlcn0gW3NhbXBsZXNDb3VudD0gMTBdXG4gKiBAcGFyYW0ge051bWJlcn0gW21pbj0gMTAwMF1cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gc3BlZWRvbWV0ZXIoc2FtcGxlc0NvdW50LCBtaW4pIHtcbiAgc2FtcGxlc0NvdW50ID0gc2FtcGxlc0NvdW50IHx8IDEwO1xuICBjb25zdCBieXRlcyA9IG5ldyBBcnJheShzYW1wbGVzQ291bnQpO1xuICBjb25zdCB0aW1lc3RhbXBzID0gbmV3IEFycmF5KHNhbXBsZXNDb3VudCk7XG4gIGxldCBoZWFkID0gMDtcbiAgbGV0IHRhaWwgPSAwO1xuICBsZXQgZmlyc3RTYW1wbGVUUztcblxuICBtaW4gPSBtaW4gIT09IHVuZGVmaW5lZCA/IG1pbiA6IDEwMDA7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIHB1c2goY2h1bmtMZW5ndGgpIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXG4gICAgY29uc3Qgc3RhcnRlZEF0ID0gdGltZXN0YW1wc1t0YWlsXTtcblxuICAgIGlmICghZmlyc3RTYW1wbGVUUykge1xuICAgICAgZmlyc3RTYW1wbGVUUyA9IG5vdztcbiAgICB9XG5cbiAgICBieXRlc1toZWFkXSA9IGNodW5rTGVuZ3RoO1xuICAgIHRpbWVzdGFtcHNbaGVhZF0gPSBub3c7XG5cbiAgICBsZXQgaSA9IHRhaWw7XG4gICAgbGV0IGJ5dGVzQ291bnQgPSAwO1xuXG4gICAgd2hpbGUgKGkgIT09IGhlYWQpIHtcbiAgICAgIGJ5dGVzQ291bnQgKz0gYnl0ZXNbaSsrXTtcbiAgICAgIGkgPSBpICUgc2FtcGxlc0NvdW50O1xuICAgIH1cblxuICAgIGhlYWQgPSAoaGVhZCArIDEpICUgc2FtcGxlc0NvdW50O1xuXG4gICAgaWYgKGhlYWQgPT09IHRhaWwpIHtcbiAgICAgIHRhaWwgPSAodGFpbCArIDEpICUgc2FtcGxlc0NvdW50O1xuICAgIH1cblxuICAgIGlmIChub3cgLSBmaXJzdFNhbXBsZVRTIDwgbWluKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGFzc2VkID0gc3RhcnRlZEF0ICYmIG5vdyAtIHN0YXJ0ZWRBdDtcblxuICAgIHJldHVybiBwYXNzZWQgPyBNYXRoLnJvdW5kKGJ5dGVzQ291bnQgKiAxMDAwIC8gcGFzc2VkKSA6IHVuZGVmaW5lZDtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc3BlZWRvbWV0ZXI7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5pbXBvcnQgc2V0dGxlIGZyb20gJy4vLi4vY29yZS9zZXR0bGUuanMnO1xuaW1wb3J0IGNvb2tpZXMgZnJvbSAnLi8uLi9oZWxwZXJzL2Nvb2tpZXMuanMnO1xuaW1wb3J0IGJ1aWxkVVJMIGZyb20gJy4vLi4vaGVscGVycy9idWlsZFVSTC5qcyc7XG5pbXBvcnQgYnVpbGRGdWxsUGF0aCBmcm9tICcuLi9jb3JlL2J1aWxkRnVsbFBhdGguanMnO1xuaW1wb3J0IGlzVVJMU2FtZU9yaWdpbiBmcm9tICcuLy4uL2hlbHBlcnMvaXNVUkxTYW1lT3JpZ2luLmpzJztcbmltcG9ydCB0cmFuc2l0aW9uYWxEZWZhdWx0cyBmcm9tICcuLi9kZWZhdWx0cy90cmFuc2l0aW9uYWwuanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi4vY29yZS9BeGlvc0Vycm9yLmpzJztcbmltcG9ydCBDYW5jZWxlZEVycm9yIGZyb20gJy4uL2NhbmNlbC9DYW5jZWxlZEVycm9yLmpzJztcbmltcG9ydCBwYXJzZVByb3RvY29sIGZyb20gJy4uL2hlbHBlcnMvcGFyc2VQcm90b2NvbC5qcyc7XG5pbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi4vcGxhdGZvcm0vaW5kZXguanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tICcuLi9jb3JlL0F4aW9zSGVhZGVycy5qcyc7XG5pbXBvcnQgc3BlZWRvbWV0ZXIgZnJvbSAnLi4vaGVscGVycy9zcGVlZG9tZXRlci5qcyc7XG5cbmZ1bmN0aW9uIHByb2dyZXNzRXZlbnRSZWR1Y2VyKGxpc3RlbmVyLCBpc0Rvd25sb2FkU3RyZWFtKSB7XG4gIGxldCBieXRlc05vdGlmaWVkID0gMDtcbiAgY29uc3QgX3NwZWVkb21ldGVyID0gc3BlZWRvbWV0ZXIoNTAsIDI1MCk7XG5cbiAgcmV0dXJuIGUgPT4ge1xuICAgIGNvbnN0IGxvYWRlZCA9IGUubG9hZGVkO1xuICAgIGNvbnN0IHRvdGFsID0gZS5sZW5ndGhDb21wdXRhYmxlID8gZS50b3RhbCA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBwcm9ncmVzc0J5dGVzID0gbG9hZGVkIC0gYnl0ZXNOb3RpZmllZDtcbiAgICBjb25zdCByYXRlID0gX3NwZWVkb21ldGVyKHByb2dyZXNzQnl0ZXMpO1xuICAgIGNvbnN0IGluUmFuZ2UgPSBsb2FkZWQgPD0gdG90YWw7XG5cbiAgICBieXRlc05vdGlmaWVkID0gbG9hZGVkO1xuXG4gICAgY29uc3QgZGF0YSA9IHtcbiAgICAgIGxvYWRlZCxcbiAgICAgIHRvdGFsLFxuICAgICAgcHJvZ3Jlc3M6IHRvdGFsID8gKGxvYWRlZCAvIHRvdGFsKSA6IHVuZGVmaW5lZCxcbiAgICAgIGJ5dGVzOiBwcm9ncmVzc0J5dGVzLFxuICAgICAgcmF0ZTogcmF0ZSA/IHJhdGUgOiB1bmRlZmluZWQsXG4gICAgICBlc3RpbWF0ZWQ6IHJhdGUgJiYgdG90YWwgJiYgaW5SYW5nZSA/ICh0b3RhbCAtIGxvYWRlZCkgLyByYXRlIDogdW5kZWZpbmVkLFxuICAgICAgZXZlbnQ6IGVcbiAgICB9O1xuXG4gICAgZGF0YVtpc0Rvd25sb2FkU3RyZWFtID8gJ2Rvd25sb2FkJyA6ICd1cGxvYWQnXSA9IHRydWU7XG5cbiAgICBsaXN0ZW5lcihkYXRhKTtcbiAgfTtcbn1cblxuY29uc3QgaXNYSFJBZGFwdGVyU3VwcG9ydGVkID0gdHlwZW9mIFhNTEh0dHBSZXF1ZXN0ICE9PSAndW5kZWZpbmVkJztcblxuZXhwb3J0IGRlZmF1bHQgaXNYSFJBZGFwdGVyU3VwcG9ydGVkICYmIGZ1bmN0aW9uIChjb25maWcpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIGRpc3BhdGNoWGhyUmVxdWVzdChyZXNvbHZlLCByZWplY3QpIHtcbiAgICBsZXQgcmVxdWVzdERhdGEgPSBjb25maWcuZGF0YTtcbiAgICBjb25zdCByZXF1ZXN0SGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKGNvbmZpZy5oZWFkZXJzKS5ub3JtYWxpemUoKTtcbiAgICBsZXQge3Jlc3BvbnNlVHlwZSwgd2l0aFhTUkZUb2tlbn0gPSBjb25maWc7XG4gICAgbGV0IG9uQ2FuY2VsZWQ7XG4gICAgZnVuY3Rpb24gZG9uZSgpIHtcbiAgICAgIGlmIChjb25maWcuY2FuY2VsVG9rZW4pIHtcbiAgICAgICAgY29uZmlnLmNhbmNlbFRva2VuLnVuc3Vic2NyaWJlKG9uQ2FuY2VsZWQpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLnNpZ25hbCkge1xuICAgICAgICBjb25maWcuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25DYW5jZWxlZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGNvbnRlbnRUeXBlO1xuXG4gICAgaWYgKHV0aWxzLmlzRm9ybURhdGEocmVxdWVzdERhdGEpKSB7XG4gICAgICBpZiAocGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52IHx8IHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudikge1xuICAgICAgICByZXF1ZXN0SGVhZGVycy5zZXRDb250ZW50VHlwZShmYWxzZSk7IC8vIExldCB0aGUgYnJvd3NlciBzZXQgaXRcbiAgICAgIH0gZWxzZSBpZiAoKGNvbnRlbnRUeXBlID0gcmVxdWVzdEhlYWRlcnMuZ2V0Q29udGVudFR5cGUoKSkgIT09IGZhbHNlKSB7XG4gICAgICAgIC8vIGZpeCBzZW1pY29sb24gZHVwbGljYXRpb24gaXNzdWUgZm9yIFJlYWN0TmF0aXZlIEZvcm1EYXRhIGltcGxlbWVudGF0aW9uXG4gICAgICAgIGNvbnN0IFt0eXBlLCAuLi50b2tlbnNdID0gY29udGVudFR5cGUgPyBjb250ZW50VHlwZS5zcGxpdCgnOycpLm1hcCh0b2tlbiA9PiB0b2tlbi50cmltKCkpLmZpbHRlcihCb29sZWFuKSA6IFtdO1xuICAgICAgICByZXF1ZXN0SGVhZGVycy5zZXRDb250ZW50VHlwZShbdHlwZSB8fCAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScsIC4uLnRva2Vuc10uam9pbignOyAnKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgIC8vIEhUVFAgYmFzaWMgYXV0aGVudGljYXRpb25cbiAgICBpZiAoY29uZmlnLmF1dGgpIHtcbiAgICAgIGNvbnN0IHVzZXJuYW1lID0gY29uZmlnLmF1dGgudXNlcm5hbWUgfHwgJyc7XG4gICAgICBjb25zdCBwYXNzd29yZCA9IGNvbmZpZy5hdXRoLnBhc3N3b3JkID8gdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGNvbmZpZy5hdXRoLnBhc3N3b3JkKSkgOiAnJztcbiAgICAgIHJlcXVlc3RIZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsICdCYXNpYyAnICsgYnRvYSh1c2VybmFtZSArICc6JyArIHBhc3N3b3JkKSk7XG4gICAgfVxuXG4gICAgY29uc3QgZnVsbFBhdGggPSBidWlsZEZ1bGxQYXRoKGNvbmZpZy5iYXNlVVJMLCBjb25maWcudXJsKTtcblxuICAgIHJlcXVlc3Qub3Blbihjb25maWcubWV0aG9kLnRvVXBwZXJDYXNlKCksIGJ1aWxkVVJMKGZ1bGxQYXRoLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplciksIHRydWUpO1xuXG4gICAgLy8gU2V0IHRoZSByZXF1ZXN0IHRpbWVvdXQgaW4gTVNcbiAgICByZXF1ZXN0LnRpbWVvdXQgPSBjb25maWcudGltZW91dDtcblxuICAgIGZ1bmN0aW9uIG9ubG9hZGVuZCgpIHtcbiAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBQcmVwYXJlIHRoZSByZXNwb25zZVxuICAgICAgY29uc3QgcmVzcG9uc2VIZWFkZXJzID0gQXhpb3NIZWFkZXJzLmZyb20oXG4gICAgICAgICdnZXRBbGxSZXNwb25zZUhlYWRlcnMnIGluIHJlcXVlc3QgJiYgcmVxdWVzdC5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKVxuICAgICAgKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9ICFyZXNwb25zZVR5cGUgfHwgcmVzcG9uc2VUeXBlID09PSAndGV4dCcgfHwgcmVzcG9uc2VUeXBlID09PSAnanNvbicgP1xuICAgICAgICByZXF1ZXN0LnJlc3BvbnNlVGV4dCA6IHJlcXVlc3QucmVzcG9uc2U7XG4gICAgICBjb25zdCByZXNwb25zZSA9IHtcbiAgICAgICAgZGF0YTogcmVzcG9uc2VEYXRhLFxuICAgICAgICBzdGF0dXM6IHJlcXVlc3Quc3RhdHVzLFxuICAgICAgICBzdGF0dXNUZXh0OiByZXF1ZXN0LnN0YXR1c1RleHQsXG4gICAgICAgIGhlYWRlcnM6IHJlc3BvbnNlSGVhZGVycyxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICByZXF1ZXN0XG4gICAgICB9O1xuXG4gICAgICBzZXR0bGUoZnVuY3Rpb24gX3Jlc29sdmUodmFsdWUpIHtcbiAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0sIGZ1bmN0aW9uIF9yZWplY3QoZXJyKSB7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9LCByZXNwb25zZSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH1cblxuICAgIGlmICgnb25sb2FkZW5kJyBpbiByZXF1ZXN0KSB7XG4gICAgICAvLyBVc2Ugb25sb2FkZW5kIGlmIGF2YWlsYWJsZVxuICAgICAgcmVxdWVzdC5vbmxvYWRlbmQgPSBvbmxvYWRlbmQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIExpc3RlbiBmb3IgcmVhZHkgc3RhdGUgdG8gZW11bGF0ZSBvbmxvYWRlbmRcbiAgICAgIHJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gaGFuZGxlTG9hZCgpIHtcbiAgICAgICAgaWYgKCFyZXF1ZXN0IHx8IHJlcXVlc3QucmVhZHlTdGF0ZSAhPT0gNCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZSByZXF1ZXN0IGVycm9yZWQgb3V0IGFuZCB3ZSBkaWRuJ3QgZ2V0IGEgcmVzcG9uc2UsIHRoaXMgd2lsbCBiZVxuICAgICAgICAvLyBoYW5kbGVkIGJ5IG9uZXJyb3IgaW5zdGVhZFxuICAgICAgICAvLyBXaXRoIG9uZSBleGNlcHRpb246IHJlcXVlc3QgdGhhdCB1c2luZyBmaWxlOiBwcm90b2NvbCwgbW9zdCBicm93c2Vyc1xuICAgICAgICAvLyB3aWxsIHJldHVybiBzdGF0dXMgYXMgMCBldmVuIHRob3VnaCBpdCdzIGEgc3VjY2Vzc2Z1bCByZXF1ZXN0XG4gICAgICAgIGlmIChyZXF1ZXN0LnN0YXR1cyA9PT0gMCAmJiAhKHJlcXVlc3QucmVzcG9uc2VVUkwgJiYgcmVxdWVzdC5yZXNwb25zZVVSTC5pbmRleE9mKCdmaWxlOicpID09PSAwKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyByZWFkeXN0YXRlIGhhbmRsZXIgaXMgY2FsbGluZyBiZWZvcmUgb25lcnJvciBvciBvbnRpbWVvdXQgaGFuZGxlcnMsXG4gICAgICAgIC8vIHNvIHdlIHNob3VsZCBjYWxsIG9ubG9hZGVuZCBvbiB0aGUgbmV4dCAndGljaydcbiAgICAgICAgc2V0VGltZW91dChvbmxvYWRlbmQpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgYnJvd3NlciByZXF1ZXN0IGNhbmNlbGxhdGlvbiAoYXMgb3Bwb3NlZCB0byBhIG1hbnVhbCBjYW5jZWxsYXRpb24pXG4gICAgcmVxdWVzdC5vbmFib3J0ID0gZnVuY3Rpb24gaGFuZGxlQWJvcnQoKSB7XG4gICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoJ1JlcXVlc3QgYWJvcnRlZCcsIEF4aW9zRXJyb3IuRUNPTk5BQk9SVEVELCBjb25maWcsIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEhhbmRsZSBsb3cgbGV2ZWwgbmV0d29yayBlcnJvcnNcbiAgICByZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbiBoYW5kbGVFcnJvcigpIHtcbiAgICAgIC8vIFJlYWwgZXJyb3JzIGFyZSBoaWRkZW4gZnJvbSB1cyBieSB0aGUgYnJvd3NlclxuICAgICAgLy8gb25lcnJvciBzaG91bGQgb25seSBmaXJlIGlmIGl0J3MgYSBuZXR3b3JrIGVycm9yXG4gICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoJ05ldHdvcmsgRXJyb3InLCBBeGlvc0Vycm9yLkVSUl9ORVRXT1JLLCBjb25maWcsIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEhhbmRsZSB0aW1lb3V0XG4gICAgcmVxdWVzdC5vbnRpbWVvdXQgPSBmdW5jdGlvbiBoYW5kbGVUaW1lb3V0KCkge1xuICAgICAgbGV0IHRpbWVvdXRFcnJvck1lc3NhZ2UgPSBjb25maWcudGltZW91dCA/ICd0aW1lb3V0IG9mICcgKyBjb25maWcudGltZW91dCArICdtcyBleGNlZWRlZCcgOiAndGltZW91dCBleGNlZWRlZCc7XG4gICAgICBjb25zdCB0cmFuc2l0aW9uYWwgPSBjb25maWcudHJhbnNpdGlvbmFsIHx8IHRyYW5zaXRpb25hbERlZmF1bHRzO1xuICAgICAgaWYgKGNvbmZpZy50aW1lb3V0RXJyb3JNZXNzYWdlKSB7XG4gICAgICAgIHRpbWVvdXRFcnJvck1lc3NhZ2UgPSBjb25maWcudGltZW91dEVycm9yTWVzc2FnZTtcbiAgICAgIH1cbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSxcbiAgICAgICAgdHJhbnNpdGlvbmFsLmNsYXJpZnlUaW1lb3V0RXJyb3IgPyBBeGlvc0Vycm9yLkVUSU1FRE9VVCA6IEF4aW9zRXJyb3IuRUNPTk5BQk9SVEVELFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEFkZCB4c3JmIGhlYWRlclxuICAgIC8vIFRoaXMgaXMgb25seSBkb25lIGlmIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIGVudmlyb25tZW50LlxuICAgIC8vIFNwZWNpZmljYWxseSBub3QgaWYgd2UncmUgaW4gYSB3ZWIgd29ya2VyLCBvciByZWFjdC1uYXRpdmUuXG4gICAgaWYocGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52KSB7XG4gICAgICB3aXRoWFNSRlRva2VuICYmIHV0aWxzLmlzRnVuY3Rpb24od2l0aFhTUkZUb2tlbikgJiYgKHdpdGhYU1JGVG9rZW4gPSB3aXRoWFNSRlRva2VuKGNvbmZpZykpO1xuXG4gICAgICBpZiAod2l0aFhTUkZUb2tlbiB8fCAod2l0aFhTUkZUb2tlbiAhPT0gZmFsc2UgJiYgaXNVUkxTYW1lT3JpZ2luKGZ1bGxQYXRoKSkpIHtcbiAgICAgICAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gICAgICAgIGNvbnN0IHhzcmZWYWx1ZSA9IGNvbmZpZy54c3JmSGVhZGVyTmFtZSAmJiBjb25maWcueHNyZkNvb2tpZU5hbWUgJiYgY29va2llcy5yZWFkKGNvbmZpZy54c3JmQ29va2llTmFtZSk7XG5cbiAgICAgICAgaWYgKHhzcmZWYWx1ZSkge1xuICAgICAgICAgIHJlcXVlc3RIZWFkZXJzLnNldChjb25maWcueHNyZkhlYWRlck5hbWUsIHhzcmZWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgQ29udGVudC1UeXBlIGlmIGRhdGEgaXMgdW5kZWZpbmVkXG4gICAgcmVxdWVzdERhdGEgPT09IHVuZGVmaW5lZCAmJiByZXF1ZXN0SGVhZGVycy5zZXRDb250ZW50VHlwZShudWxsKTtcblxuICAgIC8vIEFkZCBoZWFkZXJzIHRvIHRoZSByZXF1ZXN0XG4gICAgaWYgKCdzZXRSZXF1ZXN0SGVhZGVyJyBpbiByZXF1ZXN0KSB7XG4gICAgICB1dGlscy5mb3JFYWNoKHJlcXVlc3RIZWFkZXJzLnRvSlNPTigpLCBmdW5jdGlvbiBzZXRSZXF1ZXN0SGVhZGVyKHZhbCwga2V5KSB7XG4gICAgICAgIHJlcXVlc3Quc2V0UmVxdWVzdEhlYWRlcihrZXksIHZhbCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBBZGQgd2l0aENyZWRlbnRpYWxzIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChjb25maWcud2l0aENyZWRlbnRpYWxzKSkge1xuICAgICAgcmVxdWVzdC53aXRoQ3JlZGVudGlhbHMgPSAhIWNvbmZpZy53aXRoQ3JlZGVudGlhbHM7XG4gICAgfVxuXG4gICAgLy8gQWRkIHJlc3BvbnNlVHlwZSB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgIGlmIChyZXNwb25zZVR5cGUgJiYgcmVzcG9uc2VUeXBlICE9PSAnanNvbicpIHtcbiAgICAgIHJlcXVlc3QucmVzcG9uc2VUeXBlID0gY29uZmlnLnJlc3BvbnNlVHlwZTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgcHJvZ3Jlc3MgaWYgbmVlZGVkXG4gICAgaWYgKHR5cGVvZiBjb25maWcub25Eb3dubG9hZFByb2dyZXNzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgcHJvZ3Jlc3NFdmVudFJlZHVjZXIoY29uZmlnLm9uRG93bmxvYWRQcm9ncmVzcywgdHJ1ZSkpO1xuICAgIH1cblxuICAgIC8vIE5vdCBhbGwgYnJvd3NlcnMgc3VwcG9ydCB1cGxvYWQgZXZlbnRzXG4gICAgaWYgKHR5cGVvZiBjb25maWcub25VcGxvYWRQcm9ncmVzcyA9PT0gJ2Z1bmN0aW9uJyAmJiByZXF1ZXN0LnVwbG9hZCkge1xuICAgICAgcmVxdWVzdC51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBwcm9ncmVzc0V2ZW50UmVkdWNlcihjb25maWcub25VcGxvYWRQcm9ncmVzcykpO1xuICAgIH1cblxuICAgIGlmIChjb25maWcuY2FuY2VsVG9rZW4gfHwgY29uZmlnLnNpZ25hbCkge1xuICAgICAgLy8gSGFuZGxlIGNhbmNlbGxhdGlvblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICAgIG9uQ2FuY2VsZWQgPSBjYW5jZWwgPT4ge1xuICAgICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KCFjYW5jZWwgfHwgY2FuY2VsLnR5cGUgPyBuZXcgQ2FuY2VsZWRFcnJvcihudWxsLCBjb25maWcsIHJlcXVlc3QpIDogY2FuY2VsKTtcbiAgICAgICAgcmVxdWVzdC5hYm9ydCgpO1xuICAgICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICAgIH07XG5cbiAgICAgIGNvbmZpZy5jYW5jZWxUb2tlbiAmJiBjb25maWcuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKG9uQ2FuY2VsZWQpO1xuICAgICAgaWYgKGNvbmZpZy5zaWduYWwpIHtcbiAgICAgICAgY29uZmlnLnNpZ25hbC5hYm9ydGVkID8gb25DYW5jZWxlZCgpIDogY29uZmlnLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQ2FuY2VsZWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHByb3RvY29sID0gcGFyc2VQcm90b2NvbChmdWxsUGF0aCk7XG5cbiAgICBpZiAocHJvdG9jb2wgJiYgcGxhdGZvcm0ucHJvdG9jb2xzLmluZGV4T2YocHJvdG9jb2wpID09PSAtMSkge1xuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdVbnN1cHBvcnRlZCBwcm90b2NvbCAnICsgcHJvdG9jb2wgKyAnOicsIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVFVRVNULCBjb25maWcpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cblxuICAgIC8vIFNlbmQgdGhlIHJlcXVlc3RcbiAgICByZXF1ZXN0LnNlbmQocmVxdWVzdERhdGEgfHwgbnVsbCk7XG4gIH0pO1xufVxuIiwgImltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgaHR0cEFkYXB0ZXIgZnJvbSAnLi9odHRwLmpzJztcbmltcG9ydCB4aHJBZGFwdGVyIGZyb20gJy4veGhyLmpzJztcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gXCIuLi9jb3JlL0F4aW9zRXJyb3IuanNcIjtcblxuY29uc3Qga25vd25BZGFwdGVycyA9IHtcbiAgaHR0cDogaHR0cEFkYXB0ZXIsXG4gIHhocjogeGhyQWRhcHRlclxufVxuXG51dGlscy5mb3JFYWNoKGtub3duQWRhcHRlcnMsIChmbiwgdmFsdWUpID0+IHtcbiAgaWYgKGZuKSB7XG4gICAgdHJ5IHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmbiwgJ25hbWUnLCB7dmFsdWV9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZW1wdHlcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZuLCAnYWRhcHRlck5hbWUnLCB7dmFsdWV9KTtcbiAgfVxufSk7XG5cbmNvbnN0IHJlbmRlclJlYXNvbiA9IChyZWFzb24pID0+IGAtICR7cmVhc29ufWA7XG5cbmNvbnN0IGlzUmVzb2x2ZWRIYW5kbGUgPSAoYWRhcHRlcikgPT4gdXRpbHMuaXNGdW5jdGlvbihhZGFwdGVyKSB8fCBhZGFwdGVyID09PSBudWxsIHx8IGFkYXB0ZXIgPT09IGZhbHNlO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGdldEFkYXB0ZXI6IChhZGFwdGVycykgPT4ge1xuICAgIGFkYXB0ZXJzID0gdXRpbHMuaXNBcnJheShhZGFwdGVycykgPyBhZGFwdGVycyA6IFthZGFwdGVyc107XG5cbiAgICBjb25zdCB7bGVuZ3RofSA9IGFkYXB0ZXJzO1xuICAgIGxldCBuYW1lT3JBZGFwdGVyO1xuICAgIGxldCBhZGFwdGVyO1xuXG4gICAgY29uc3QgcmVqZWN0ZWRSZWFzb25zID0ge307XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBuYW1lT3JBZGFwdGVyID0gYWRhcHRlcnNbaV07XG4gICAgICBsZXQgaWQ7XG5cbiAgICAgIGFkYXB0ZXIgPSBuYW1lT3JBZGFwdGVyO1xuXG4gICAgICBpZiAoIWlzUmVzb2x2ZWRIYW5kbGUobmFtZU9yQWRhcHRlcikpIHtcbiAgICAgICAgYWRhcHRlciA9IGtub3duQWRhcHRlcnNbKGlkID0gU3RyaW5nKG5hbWVPckFkYXB0ZXIpKS50b0xvd2VyQ2FzZSgpXTtcblxuICAgICAgICBpZiAoYWRhcHRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoYFVua25vd24gYWRhcHRlciAnJHtpZH0nYCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGFkYXB0ZXIpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIHJlamVjdGVkUmVhc29uc1tpZCB8fCAnIycgKyBpXSA9IGFkYXB0ZXI7XG4gICAgfVxuXG4gICAgaWYgKCFhZGFwdGVyKSB7XG5cbiAgICAgIGNvbnN0IHJlYXNvbnMgPSBPYmplY3QuZW50cmllcyhyZWplY3RlZFJlYXNvbnMpXG4gICAgICAgIC5tYXAoKFtpZCwgc3RhdGVdKSA9PiBgYWRhcHRlciAke2lkfSBgICtcbiAgICAgICAgICAoc3RhdGUgPT09IGZhbHNlID8gJ2lzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGVudmlyb25tZW50JyA6ICdpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBidWlsZCcpXG4gICAgICAgICk7XG5cbiAgICAgIGxldCBzID0gbGVuZ3RoID9cbiAgICAgICAgKHJlYXNvbnMubGVuZ3RoID4gMSA/ICdzaW5jZSA6XFxuJyArIHJlYXNvbnMubWFwKHJlbmRlclJlYXNvbikuam9pbignXFxuJykgOiAnICcgKyByZW5kZXJSZWFzb24ocmVhc29uc1swXSkpIDpcbiAgICAgICAgJ2FzIG5vIGFkYXB0ZXIgc3BlY2lmaWVkJztcblxuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoXG4gICAgICAgIGBUaGVyZSBpcyBubyBzdWl0YWJsZSBhZGFwdGVyIHRvIGRpc3BhdGNoIHRoZSByZXF1ZXN0IGAgKyBzLFxuICAgICAgICAnRVJSX05PVF9TVVBQT1JUJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWRhcHRlcjtcbiAgfSxcbiAgYWRhcHRlcnM6IGtub3duQWRhcHRlcnNcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB0cmFuc2Zvcm1EYXRhIGZyb20gJy4vdHJhbnNmb3JtRGF0YS5qcyc7XG5pbXBvcnQgaXNDYW5jZWwgZnJvbSAnLi4vY2FuY2VsL2lzQ2FuY2VsLmpzJztcbmltcG9ydCBkZWZhdWx0cyBmcm9tICcuLi9kZWZhdWx0cy9pbmRleC5qcyc7XG5pbXBvcnQgQ2FuY2VsZWRFcnJvciBmcm9tICcuLi9jYW5jZWwvQ2FuY2VsZWRFcnJvci5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gJy4uL2NvcmUvQXhpb3NIZWFkZXJzLmpzJztcbmltcG9ydCBhZGFwdGVycyBmcm9tIFwiLi4vYWRhcHRlcnMvYWRhcHRlcnMuanNcIjtcblxuLyoqXG4gKiBUaHJvd3MgYSBgQ2FuY2VsZWRFcnJvcmAgaWYgY2FuY2VsbGF0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIFRoZSBjb25maWcgdGhhdCBpcyB0byBiZSB1c2VkIGZvciB0aGUgcmVxdWVzdFxuICpcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZykge1xuICBpZiAoY29uZmlnLmNhbmNlbFRva2VuKSB7XG4gICAgY29uZmlnLmNhbmNlbFRva2VuLnRocm93SWZSZXF1ZXN0ZWQoKTtcbiAgfVxuXG4gIGlmIChjb25maWcuc2lnbmFsICYmIGNvbmZpZy5zaWduYWwuYWJvcnRlZCkge1xuICAgIHRocm93IG5ldyBDYW5jZWxlZEVycm9yKG51bGwsIGNvbmZpZyk7XG4gIH1cbn1cblxuLyoqXG4gKiBEaXNwYXRjaCBhIHJlcXVlc3QgdG8gdGhlIHNlcnZlciB1c2luZyB0aGUgY29uZmlndXJlZCBhZGFwdGVyLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZyB0aGF0IGlzIHRvIGJlIHVzZWQgZm9yIHRoZSByZXF1ZXN0XG4gKlxuICogQHJldHVybnMge1Byb21pc2V9IFRoZSBQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkaXNwYXRjaFJlcXVlc3QoY29uZmlnKSB7XG4gIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICBjb25maWcuaGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKGNvbmZpZy5oZWFkZXJzKTtcblxuICAvLyBUcmFuc2Zvcm0gcmVxdWVzdCBkYXRhXG4gIGNvbmZpZy5kYXRhID0gdHJhbnNmb3JtRGF0YS5jYWxsKFxuICAgIGNvbmZpZyxcbiAgICBjb25maWcudHJhbnNmb3JtUmVxdWVzdFxuICApO1xuXG4gIGlmIChbJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10uaW5kZXhPZihjb25maWcubWV0aG9kKSAhPT0gLTEpIHtcbiAgICBjb25maWcuaGVhZGVycy5zZXRDb250ZW50VHlwZSgnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJywgZmFsc2UpO1xuICB9XG5cbiAgY29uc3QgYWRhcHRlciA9IGFkYXB0ZXJzLmdldEFkYXB0ZXIoY29uZmlnLmFkYXB0ZXIgfHwgZGVmYXVsdHMuYWRhcHRlcik7XG5cbiAgcmV0dXJuIGFkYXB0ZXIoY29uZmlnKS50aGVuKGZ1bmN0aW9uIG9uQWRhcHRlclJlc29sdXRpb24ocmVzcG9uc2UpIHtcbiAgICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgICAvLyBUcmFuc2Zvcm0gcmVzcG9uc2UgZGF0YVxuICAgIHJlc3BvbnNlLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoXG4gICAgICBjb25maWcsXG4gICAgICBjb25maWcudHJhbnNmb3JtUmVzcG9uc2UsXG4gICAgICByZXNwb25zZVxuICAgICk7XG5cbiAgICByZXNwb25zZS5oZWFkZXJzID0gQXhpb3NIZWFkZXJzLmZyb20ocmVzcG9uc2UuaGVhZGVycyk7XG5cbiAgICByZXR1cm4gcmVzcG9uc2U7XG4gIH0sIGZ1bmN0aW9uIG9uQWRhcHRlclJlamVjdGlvbihyZWFzb24pIHtcbiAgICBpZiAoIWlzQ2FuY2VsKHJlYXNvbikpIHtcbiAgICAgIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAgICAgLy8gVHJhbnNmb3JtIHJlc3BvbnNlIGRhdGFcbiAgICAgIGlmIChyZWFzb24gJiYgcmVhc29uLnJlc3BvbnNlKSB7XG4gICAgICAgIHJlYXNvbi5yZXNwb25zZS5kYXRhID0gdHJhbnNmb3JtRGF0YS5jYWxsKFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICBjb25maWcudHJhbnNmb3JtUmVzcG9uc2UsXG4gICAgICAgICAgcmVhc29uLnJlc3BvbnNlXG4gICAgICAgICk7XG4gICAgICAgIHJlYXNvbi5yZXNwb25zZS5oZWFkZXJzID0gQXhpb3NIZWFkZXJzLmZyb20ocmVhc29uLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZWFzb24pO1xuICB9KTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gXCIuL0F4aW9zSGVhZGVycy5qc1wiO1xuXG5jb25zdCBoZWFkZXJzVG9PYmplY3QgPSAodGhpbmcpID0+IHRoaW5nIGluc3RhbmNlb2YgQXhpb3NIZWFkZXJzID8geyAuLi50aGluZyB9IDogdGhpbmc7XG5cbi8qKlxuICogQ29uZmlnLXNwZWNpZmljIG1lcmdlLWZ1bmN0aW9uIHdoaWNoIGNyZWF0ZXMgYSBuZXcgY29uZmlnLW9iamVjdFxuICogYnkgbWVyZ2luZyB0d28gY29uZmlndXJhdGlvbiBvYmplY3RzIHRvZ2V0aGVyLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcxXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnMlxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IE5ldyBvYmplY3QgcmVzdWx0aW5nIGZyb20gbWVyZ2luZyBjb25maWcyIHRvIGNvbmZpZzFcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWVyZ2VDb25maWcoY29uZmlnMSwgY29uZmlnMikge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgY29uZmlnMiA9IGNvbmZpZzIgfHwge307XG4gIGNvbnN0IGNvbmZpZyA9IHt9O1xuXG4gIGZ1bmN0aW9uIGdldE1lcmdlZFZhbHVlKHRhcmdldCwgc291cmNlLCBjYXNlbGVzcykge1xuICAgIGlmICh1dGlscy5pc1BsYWluT2JqZWN0KHRhcmdldCkgJiYgdXRpbHMuaXNQbGFpbk9iamVjdChzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gdXRpbHMubWVyZ2UuY2FsbCh7Y2FzZWxlc3N9LCB0YXJnZXQsIHNvdXJjZSk7XG4gICAgfSBlbHNlIGlmICh1dGlscy5pc1BsYWluT2JqZWN0KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiB1dGlscy5tZXJnZSh7fSwgc291cmNlKTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzLmlzQXJyYXkoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHNvdXJjZS5zbGljZSgpO1xuICAgIH1cbiAgICByZXR1cm4gc291cmNlO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIG1lcmdlRGVlcFByb3BlcnRpZXMoYSwgYiwgY2FzZWxlc3MpIHtcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGIpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUoYSwgYiwgY2FzZWxlc3MpO1xuICAgIH0gZWxzZSBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGEpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBhLCBjYXNlbGVzcyk7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIHZhbHVlRnJvbUNvbmZpZzIoYSwgYikge1xuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoYikpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGIpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiBkZWZhdWx0VG9Db25maWcyKGEsIGIpIHtcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGIpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBiKTtcbiAgICB9IGVsc2UgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChhKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYSk7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIG1lcmdlRGlyZWN0S2V5cyhhLCBiLCBwcm9wKSB7XG4gICAgaWYgKHByb3AgaW4gY29uZmlnMikge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKGEsIGIpO1xuICAgIH0gZWxzZSBpZiAocHJvcCBpbiBjb25maWcxKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBhKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBtZXJnZU1hcCA9IHtcbiAgICB1cmw6IHZhbHVlRnJvbUNvbmZpZzIsXG4gICAgbWV0aG9kOiB2YWx1ZUZyb21Db25maWcyLFxuICAgIGRhdGE6IHZhbHVlRnJvbUNvbmZpZzIsXG4gICAgYmFzZVVSTDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0cmFuc2Zvcm1SZXF1ZXN0OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRyYW5zZm9ybVJlc3BvbnNlOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHBhcmFtc1NlcmlhbGl6ZXI6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdGltZW91dDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0aW1lb3V0TWVzc2FnZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB3aXRoQ3JlZGVudGlhbHM6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgd2l0aFhTUkZUb2tlbjogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBhZGFwdGVyOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHJlc3BvbnNlVHlwZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB4c3JmQ29va2llTmFtZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB4c3JmSGVhZGVyTmFtZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBvblVwbG9hZFByb2dyZXNzOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIG9uRG93bmxvYWRQcm9ncmVzczogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBkZWNvbXByZXNzOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIG1heENvbnRlbnRMZW5ndGg6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgbWF4Qm9keUxlbmd0aDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBiZWZvcmVSZWRpcmVjdDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0cmFuc3BvcnQ6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgaHR0cEFnZW50OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGh0dHBzQWdlbnQ6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgY2FuY2VsVG9rZW46IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgc29ja2V0UGF0aDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICByZXNwb25zZUVuY29kaW5nOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHZhbGlkYXRlU3RhdHVzOiBtZXJnZURpcmVjdEtleXMsXG4gICAgaGVhZGVyczogKGEsIGIpID0+IG1lcmdlRGVlcFByb3BlcnRpZXMoaGVhZGVyc1RvT2JqZWN0KGEpLCBoZWFkZXJzVG9PYmplY3QoYiksIHRydWUpXG4gIH07XG5cbiAgdXRpbHMuZm9yRWFjaChPYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LCBjb25maWcxLCBjb25maWcyKSksIGZ1bmN0aW9uIGNvbXB1dGVDb25maWdWYWx1ZShwcm9wKSB7XG4gICAgY29uc3QgbWVyZ2UgPSBtZXJnZU1hcFtwcm9wXSB8fCBtZXJnZURlZXBQcm9wZXJ0aWVzO1xuICAgIGNvbnN0IGNvbmZpZ1ZhbHVlID0gbWVyZ2UoY29uZmlnMVtwcm9wXSwgY29uZmlnMltwcm9wXSwgcHJvcCk7XG4gICAgKHV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZ1ZhbHVlKSAmJiBtZXJnZSAhPT0gbWVyZ2VEaXJlY3RLZXlzKSB8fCAoY29uZmlnW3Byb3BdID0gY29uZmlnVmFsdWUpO1xuICB9KTtcblxuICByZXR1cm4gY29uZmlnO1xufVxuIiwgImV4cG9ydCBjb25zdCBWRVJTSU9OID0gXCIxLjYuOFwiOyIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7VkVSU0lPTn0gZnJvbSAnLi4vZW52L2RhdGEuanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi4vY29yZS9BeGlvc0Vycm9yLmpzJztcblxuY29uc3QgdmFsaWRhdG9ycyA9IHt9O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuWydvYmplY3QnLCAnYm9vbGVhbicsICdudW1iZXInLCAnZnVuY3Rpb24nLCAnc3RyaW5nJywgJ3N5bWJvbCddLmZvckVhY2goKHR5cGUsIGkpID0+IHtcbiAgdmFsaWRhdG9yc1t0eXBlXSA9IGZ1bmN0aW9uIHZhbGlkYXRvcih0aGluZykge1xuICAgIHJldHVybiB0eXBlb2YgdGhpbmcgPT09IHR5cGUgfHwgJ2EnICsgKGkgPCAxID8gJ24gJyA6ICcgJykgKyB0eXBlO1xuICB9O1xufSk7XG5cbmNvbnN0IGRlcHJlY2F0ZWRXYXJuaW5ncyA9IHt9O1xuXG4vKipcbiAqIFRyYW5zaXRpb25hbCBvcHRpb24gdmFsaWRhdG9yXG4gKlxuICogQHBhcmFtIHtmdW5jdGlvbnxib29sZWFuP30gdmFsaWRhdG9yIC0gc2V0IHRvIGZhbHNlIGlmIHRoZSB0cmFuc2l0aW9uYWwgb3B0aW9uIGhhcyBiZWVuIHJlbW92ZWRcbiAqIEBwYXJhbSB7c3RyaW5nP30gdmVyc2lvbiAtIGRlcHJlY2F0ZWQgdmVyc2lvbiAvIHJlbW92ZWQgc2luY2UgdmVyc2lvblxuICogQHBhcmFtIHtzdHJpbmc/fSBtZXNzYWdlIC0gc29tZSBtZXNzYWdlIHdpdGggYWRkaXRpb25hbCBpbmZvXG4gKlxuICogQHJldHVybnMge2Z1bmN0aW9ufVxuICovXG52YWxpZGF0b3JzLnRyYW5zaXRpb25hbCA9IGZ1bmN0aW9uIHRyYW5zaXRpb25hbCh2YWxpZGF0b3IsIHZlcnNpb24sIG1lc3NhZ2UpIHtcbiAgZnVuY3Rpb24gZm9ybWF0TWVzc2FnZShvcHQsIGRlc2MpIHtcbiAgICByZXR1cm4gJ1tBeGlvcyB2JyArIFZFUlNJT04gKyAnXSBUcmFuc2l0aW9uYWwgb3B0aW9uIFxcJycgKyBvcHQgKyAnXFwnJyArIGRlc2MgKyAobWVzc2FnZSA/ICcuICcgKyBtZXNzYWdlIDogJycpO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgcmV0dXJuICh2YWx1ZSwgb3B0LCBvcHRzKSA9PiB7XG4gICAgaWYgKHZhbGlkYXRvciA9PT0gZmFsc2UpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICBmb3JtYXRNZXNzYWdlKG9wdCwgJyBoYXMgYmVlbiByZW1vdmVkJyArICh2ZXJzaW9uID8gJyBpbiAnICsgdmVyc2lvbiA6ICcnKSksXG4gICAgICAgIEF4aW9zRXJyb3IuRVJSX0RFUFJFQ0FURURcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHZlcnNpb24gJiYgIWRlcHJlY2F0ZWRXYXJuaW5nc1tvcHRdKSB7XG4gICAgICBkZXByZWNhdGVkV2FybmluZ3Nbb3B0XSA9IHRydWU7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBmb3JtYXRNZXNzYWdlKFxuICAgICAgICAgIG9wdCxcbiAgICAgICAgICAnIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdicgKyB2ZXJzaW9uICsgJyBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZWFyIGZ1dHVyZSdcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdG9yID8gdmFsaWRhdG9yKHZhbHVlLCBvcHQsIG9wdHMpIDogdHJ1ZTtcbiAgfTtcbn07XG5cbi8qKlxuICogQXNzZXJ0IG9iamVjdCdzIHByb3BlcnRpZXMgdHlwZVxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gKiBAcGFyYW0ge29iamVjdH0gc2NoZW1hXG4gKiBAcGFyYW0ge2Jvb2xlYW4/fSBhbGxvd1Vua25vd25cbiAqXG4gKiBAcmV0dXJucyB7b2JqZWN0fVxuICovXG5cbmZ1bmN0aW9uIGFzc2VydE9wdGlvbnMob3B0aW9ucywgc2NoZW1hLCBhbGxvd1Vua25vd24pIHtcbiAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0JywgQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTl9WQUxVRSk7XG4gIH1cbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9wdGlvbnMpO1xuICBsZXQgaSA9IGtleXMubGVuZ3RoO1xuICB3aGlsZSAoaS0tID4gMCkge1xuICAgIGNvbnN0IG9wdCA9IGtleXNbaV07XG4gICAgY29uc3QgdmFsaWRhdG9yID0gc2NoZW1hW29wdF07XG4gICAgaWYgKHZhbGlkYXRvcikge1xuICAgICAgY29uc3QgdmFsdWUgPSBvcHRpb25zW29wdF07XG4gICAgICBjb25zdCByZXN1bHQgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbGlkYXRvcih2YWx1ZSwgb3B0LCBvcHRpb25zKTtcbiAgICAgIGlmIChyZXN1bHQgIT09IHRydWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ29wdGlvbiAnICsgb3B0ICsgJyBtdXN0IGJlICcgKyByZXN1bHQsIEF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT05fVkFMVUUpO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChhbGxvd1Vua25vd24gIT09IHRydWUpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdVbmtub3duIG9wdGlvbiAnICsgb3B0LCBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBhc3NlcnRPcHRpb25zLFxuICB2YWxpZGF0b3JzXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4vLi4vdXRpbHMuanMnO1xuaW1wb3J0IGJ1aWxkVVJMIGZyb20gJy4uL2hlbHBlcnMvYnVpbGRVUkwuanMnO1xuaW1wb3J0IEludGVyY2VwdG9yTWFuYWdlciBmcm9tICcuL0ludGVyY2VwdG9yTWFuYWdlci5qcyc7XG5pbXBvcnQgZGlzcGF0Y2hSZXF1ZXN0IGZyb20gJy4vZGlzcGF0Y2hSZXF1ZXN0LmpzJztcbmltcG9ydCBtZXJnZUNvbmZpZyBmcm9tICcuL21lcmdlQ29uZmlnLmpzJztcbmltcG9ydCBidWlsZEZ1bGxQYXRoIGZyb20gJy4vYnVpbGRGdWxsUGF0aC5qcyc7XG5pbXBvcnQgdmFsaWRhdG9yIGZyb20gJy4uL2hlbHBlcnMvdmFsaWRhdG9yLmpzJztcbmltcG9ydCBBeGlvc0hlYWRlcnMgZnJvbSAnLi9BeGlvc0hlYWRlcnMuanMnO1xuXG5jb25zdCB2YWxpZGF0b3JzID0gdmFsaWRhdG9yLnZhbGlkYXRvcnM7XG5cbi8qKlxuICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlQ29uZmlnIFRoZSBkZWZhdWx0IGNvbmZpZyBmb3IgdGhlIGluc3RhbmNlXG4gKlxuICogQHJldHVybiB7QXhpb3N9IEEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKi9cbmNsYXNzIEF4aW9zIHtcbiAgY29uc3RydWN0b3IoaW5zdGFuY2VDb25maWcpIHtcbiAgICB0aGlzLmRlZmF1bHRzID0gaW5zdGFuY2VDb25maWc7XG4gICAgdGhpcy5pbnRlcmNlcHRvcnMgPSB7XG4gICAgICByZXF1ZXN0OiBuZXcgSW50ZXJjZXB0b3JNYW5hZ2VyKCksXG4gICAgICByZXNwb25zZTogbmV3IEludGVyY2VwdG9yTWFuYWdlcigpXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwYXRjaCBhIHJlcXVlc3RcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd8T2JqZWN0fSBjb25maWdPclVybCBUaGUgY29uZmlnIHNwZWNpZmljIGZvciB0aGlzIHJlcXVlc3QgKG1lcmdlZCB3aXRoIHRoaXMuZGVmYXVsdHMpXG4gICAqIEBwYXJhbSB7P09iamVjdH0gY29uZmlnXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfSBUaGUgUHJvbWlzZSB0byBiZSBmdWxmaWxsZWRcbiAgICovXG4gIGFzeW5jIHJlcXVlc3QoY29uZmlnT3JVcmwsIGNvbmZpZykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5fcmVxdWVzdChjb25maWdPclVybCwgY29uZmlnKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICBsZXQgZHVtbXk7XG5cbiAgICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UgPyBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZShkdW1teSA9IHt9KSA6IChkdW1teSA9IG5ldyBFcnJvcigpKTtcblxuICAgICAgICAvLyBzbGljZSBvZmYgdGhlIEVycm9yOiAuLi4gbGluZVxuICAgICAgICBjb25zdCBzdGFjayA9IGR1bW15LnN0YWNrID8gZHVtbXkuc3RhY2sucmVwbGFjZSgvXi4rXFxuLywgJycpIDogJyc7XG5cbiAgICAgICAgaWYgKCFlcnIuc3RhY2spIHtcbiAgICAgICAgICBlcnIuc3RhY2sgPSBzdGFjaztcbiAgICAgICAgICAvLyBtYXRjaCB3aXRob3V0IHRoZSAyIHRvcCBzdGFjayBsaW5lc1xuICAgICAgICB9IGVsc2UgaWYgKHN0YWNrICYmICFTdHJpbmcoZXJyLnN0YWNrKS5lbmRzV2l0aChzdGFjay5yZXBsYWNlKC9eLitcXG4uK1xcbi8sICcnKSkpIHtcbiAgICAgICAgICBlcnIuc3RhY2sgKz0gJ1xcbicgKyBzdGFja1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cblxuICBfcmVxdWVzdChjb25maWdPclVybCwgY29uZmlnKSB7XG4gICAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gICAgLy8gQWxsb3cgZm9yIGF4aW9zKCdleGFtcGxlL3VybCdbLCBjb25maWddKSBhIGxhIGZldGNoIEFQSVxuICAgIGlmICh0eXBlb2YgY29uZmlnT3JVcmwgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25maWcgPSBjb25maWcgfHwge307XG4gICAgICBjb25maWcudXJsID0gY29uZmlnT3JVcmw7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbmZpZyA9IGNvbmZpZ09yVXJsIHx8IHt9O1xuICAgIH1cblxuICAgIGNvbmZpZyA9IG1lcmdlQ29uZmlnKHRoaXMuZGVmYXVsdHMsIGNvbmZpZyk7XG5cbiAgICBjb25zdCB7dHJhbnNpdGlvbmFsLCBwYXJhbXNTZXJpYWxpemVyLCBoZWFkZXJzfSA9IGNvbmZpZztcblxuICAgIGlmICh0cmFuc2l0aW9uYWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFsaWRhdG9yLmFzc2VydE9wdGlvbnModHJhbnNpdGlvbmFsLCB7XG4gICAgICAgIHNpbGVudEpTT05QYXJzaW5nOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pLFxuICAgICAgICBmb3JjZWRKU09OUGFyc2luZzogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKSxcbiAgICAgICAgY2xhcmlmeVRpbWVvdXRFcnJvcjogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKVxuICAgICAgfSwgZmFsc2UpO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXNTZXJpYWxpemVyICE9IG51bGwpIHtcbiAgICAgIGlmICh1dGlscy5pc0Z1bmN0aW9uKHBhcmFtc1NlcmlhbGl6ZXIpKSB7XG4gICAgICAgIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyID0ge1xuICAgICAgICAgIHNlcmlhbGl6ZTogcGFyYW1zU2VyaWFsaXplclxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWxpZGF0b3IuYXNzZXJ0T3B0aW9ucyhwYXJhbXNTZXJpYWxpemVyLCB7XG4gICAgICAgICAgZW5jb2RlOiB2YWxpZGF0b3JzLmZ1bmN0aW9uLFxuICAgICAgICAgIHNlcmlhbGl6ZTogdmFsaWRhdG9ycy5mdW5jdGlvblxuICAgICAgICB9LCB0cnVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTZXQgY29uZmlnLm1ldGhvZFxuICAgIGNvbmZpZy5tZXRob2QgPSAoY29uZmlnLm1ldGhvZCB8fCB0aGlzLmRlZmF1bHRzLm1ldGhvZCB8fCAnZ2V0JykudG9Mb3dlckNhc2UoKTtcblxuICAgIC8vIEZsYXR0ZW4gaGVhZGVyc1xuICAgIGxldCBjb250ZXh0SGVhZGVycyA9IGhlYWRlcnMgJiYgdXRpbHMubWVyZ2UoXG4gICAgICBoZWFkZXJzLmNvbW1vbixcbiAgICAgIGhlYWRlcnNbY29uZmlnLm1ldGhvZF1cbiAgICApO1xuXG4gICAgaGVhZGVycyAmJiB1dGlscy5mb3JFYWNoKFxuICAgICAgWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAncG9zdCcsICdwdXQnLCAncGF0Y2gnLCAnY29tbW9uJ10sXG4gICAgICAobWV0aG9kKSA9PiB7XG4gICAgICAgIGRlbGV0ZSBoZWFkZXJzW21ldGhvZF07XG4gICAgICB9XG4gICAgKTtcblxuICAgIGNvbmZpZy5oZWFkZXJzID0gQXhpb3NIZWFkZXJzLmNvbmNhdChjb250ZXh0SGVhZGVycywgaGVhZGVycyk7XG5cbiAgICAvLyBmaWx0ZXIgb3V0IHNraXBwZWQgaW50ZXJjZXB0b3JzXG4gICAgY29uc3QgcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4gPSBbXTtcbiAgICBsZXQgc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzID0gdHJ1ZTtcbiAgICB0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24gdW5zaGlmdFJlcXVlc3RJbnRlcmNlcHRvcnMoaW50ZXJjZXB0b3IpIHtcbiAgICAgIGlmICh0eXBlb2YgaW50ZXJjZXB0b3IucnVuV2hlbiA9PT0gJ2Z1bmN0aW9uJyAmJiBpbnRlcmNlcHRvci5ydW5XaGVuKGNvbmZpZykgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzID0gc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzICYmIGludGVyY2VwdG9yLnN5bmNocm9ub3VzO1xuXG4gICAgICByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi51bnNoaWZ0KGludGVyY2VwdG9yLmZ1bGZpbGxlZCwgaW50ZXJjZXB0b3IucmVqZWN0ZWQpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluID0gW107XG4gICAgdGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbiBwdXNoUmVzcG9uc2VJbnRlcmNlcHRvcnMoaW50ZXJjZXB0b3IpIHtcbiAgICAgIHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbi5wdXNoKGludGVyY2VwdG9yLmZ1bGZpbGxlZCwgaW50ZXJjZXB0b3IucmVqZWN0ZWQpO1xuICAgIH0pO1xuXG4gICAgbGV0IHByb21pc2U7XG4gICAgbGV0IGkgPSAwO1xuICAgIGxldCBsZW47XG5cbiAgICBpZiAoIXN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycykge1xuICAgICAgY29uc3QgY2hhaW4gPSBbZGlzcGF0Y2hSZXF1ZXN0LmJpbmQodGhpcyksIHVuZGVmaW5lZF07XG4gICAgICBjaGFpbi51bnNoaWZ0LmFwcGx5KGNoYWluLCByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbik7XG4gICAgICBjaGFpbi5wdXNoLmFwcGx5KGNoYWluLCByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4pO1xuICAgICAgbGVuID0gY2hhaW4ubGVuZ3RoO1xuXG4gICAgICBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKGNvbmZpZyk7XG5cbiAgICAgIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4oY2hhaW5baSsrXSwgY2hhaW5baSsrXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH1cblxuICAgIGxlbiA9IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluLmxlbmd0aDtcblxuICAgIGxldCBuZXdDb25maWcgPSBjb25maWc7XG5cbiAgICBpID0gMDtcblxuICAgIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgICBjb25zdCBvbkZ1bGZpbGxlZCA9IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluW2krK107XG4gICAgICBjb25zdCBvblJlamVjdGVkID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW5baSsrXTtcbiAgICAgIHRyeSB7XG4gICAgICAgIG5ld0NvbmZpZyA9IG9uRnVsZmlsbGVkKG5ld0NvbmZpZyk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBvblJlamVjdGVkLmNhbGwodGhpcywgZXJyb3IpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcHJvbWlzZSA9IGRpc3BhdGNoUmVxdWVzdC5jYWxsKHRoaXMsIG5ld0NvbmZpZyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgfVxuXG4gICAgaSA9IDA7XG4gICAgbGVuID0gcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluLmxlbmd0aDtcblxuICAgIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbltpKytdLCByZXNwb25zZUludGVyY2VwdG9yQ2hhaW5baSsrXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH1cblxuICBnZXRVcmkoY29uZmlnKSB7XG4gICAgY29uZmlnID0gbWVyZ2VDb25maWcodGhpcy5kZWZhdWx0cywgY29uZmlnKTtcbiAgICBjb25zdCBmdWxsUGF0aCA9IGJ1aWxkRnVsbFBhdGgoY29uZmlnLmJhc2VVUkwsIGNvbmZpZy51cmwpO1xuICAgIHJldHVybiBidWlsZFVSTChmdWxsUGF0aCwgY29uZmlnLnBhcmFtcywgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIpO1xuICB9XG59XG5cbi8vIFByb3ZpZGUgYWxpYXNlcyBmb3Igc3VwcG9ydGVkIHJlcXVlc3QgbWV0aG9kc1xudXRpbHMuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdvcHRpb25zJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2ROb0RhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24odXJsLCBjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1lcmdlQ29uZmlnKGNvbmZpZyB8fCB7fSwge1xuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgZGF0YTogKGNvbmZpZyB8fCB7fSkuZGF0YVxuICAgIH0pKTtcbiAgfTtcbn0pO1xuXG51dGlscy5mb3JFYWNoKFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZFdpdGhEYXRhKG1ldGhvZCkge1xuICAvKmVzbGludCBmdW5jLW5hbWVzOjAqL1xuXG4gIGZ1bmN0aW9uIGdlbmVyYXRlSFRUUE1ldGhvZChpc0Zvcm0pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gaHR0cE1ldGhvZCh1cmwsIGRhdGEsIGNvbmZpZykge1xuICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdChtZXJnZUNvbmZpZyhjb25maWcgfHwge30sIHtcbiAgICAgICAgbWV0aG9kLFxuICAgICAgICBoZWFkZXJzOiBpc0Zvcm0gPyB7XG4gICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdtdWx0aXBhcnQvZm9ybS1kYXRhJ1xuICAgICAgICB9IDoge30sXG4gICAgICAgIHVybCxcbiAgICAgICAgZGF0YVxuICAgICAgfSkpO1xuICAgIH07XG4gIH1cblxuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kXSA9IGdlbmVyYXRlSFRUUE1ldGhvZCgpO1xuXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2QgKyAnRm9ybSddID0gZ2VuZXJhdGVIVFRQTWV0aG9kKHRydWUpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IEF4aW9zO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IENhbmNlbGVkRXJyb3IgZnJvbSAnLi9DYW5jZWxlZEVycm9yLmpzJztcblxuLyoqXG4gKiBBIGBDYW5jZWxUb2tlbmAgaXMgYW4gb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVxdWVzdCBjYW5jZWxsYXRpb24gb2YgYW4gb3BlcmF0aW9uLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGV4ZWN1dG9yIFRoZSBleGVjdXRvciBmdW5jdGlvbi5cbiAqXG4gKiBAcmV0dXJucyB7Q2FuY2VsVG9rZW59XG4gKi9cbmNsYXNzIENhbmNlbFRva2VuIHtcbiAgY29uc3RydWN0b3IoZXhlY3V0b3IpIHtcbiAgICBpZiAodHlwZW9mIGV4ZWN1dG9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdleGVjdXRvciBtdXN0IGJlIGEgZnVuY3Rpb24uJyk7XG4gICAgfVxuXG4gICAgbGV0IHJlc29sdmVQcm9taXNlO1xuXG4gICAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gcHJvbWlzZUV4ZWN1dG9yKHJlc29sdmUpIHtcbiAgICAgIHJlc29sdmVQcm9taXNlID0gcmVzb2x2ZTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHRva2VuID0gdGhpcztcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgdGhpcy5wcm9taXNlLnRoZW4oY2FuY2VsID0+IHtcbiAgICAgIGlmICghdG9rZW4uX2xpc3RlbmVycykgcmV0dXJuO1xuXG4gICAgICBsZXQgaSA9IHRva2VuLl9saXN0ZW5lcnMubGVuZ3RoO1xuXG4gICAgICB3aGlsZSAoaS0tID4gMCkge1xuICAgICAgICB0b2tlbi5fbGlzdGVuZXJzW2ldKGNhbmNlbCk7XG4gICAgICB9XG4gICAgICB0b2tlbi5fbGlzdGVuZXJzID0gbnVsbDtcbiAgICB9KTtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgdGhpcy5wcm9taXNlLnRoZW4gPSBvbmZ1bGZpbGxlZCA9PiB7XG4gICAgICBsZXQgX3Jlc29sdmU7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICB0b2tlbi5zdWJzY3JpYmUocmVzb2x2ZSk7XG4gICAgICAgIF9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgIH0pLnRoZW4ob25mdWxmaWxsZWQpO1xuXG4gICAgICBwcm9taXNlLmNhbmNlbCA9IGZ1bmN0aW9uIHJlamVjdCgpIHtcbiAgICAgICAgdG9rZW4udW5zdWJzY3JpYmUoX3Jlc29sdmUpO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfTtcblxuICAgIGV4ZWN1dG9yKGZ1bmN0aW9uIGNhbmNlbChtZXNzYWdlLCBjb25maWcsIHJlcXVlc3QpIHtcbiAgICAgIGlmICh0b2tlbi5yZWFzb24pIHtcbiAgICAgICAgLy8gQ2FuY2VsbGF0aW9uIGhhcyBhbHJlYWR5IGJlZW4gcmVxdWVzdGVkXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdG9rZW4ucmVhc29uID0gbmV3IENhbmNlbGVkRXJyb3IobWVzc2FnZSwgY29uZmlnLCByZXF1ZXN0KTtcbiAgICAgIHJlc29sdmVQcm9taXNlKHRva2VuLnJlYXNvbik7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhyb3dzIGEgYENhbmNlbGVkRXJyb3JgIGlmIGNhbmNlbGxhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQuXG4gICAqL1xuICB0aHJvd0lmUmVxdWVzdGVkKCkge1xuICAgIGlmICh0aGlzLnJlYXNvbikge1xuICAgICAgdGhyb3cgdGhpcy5yZWFzb247XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN1YnNjcmliZSB0byB0aGUgY2FuY2VsIHNpZ25hbFxuICAgKi9cblxuICBzdWJzY3JpYmUobGlzdGVuZXIpIHtcbiAgICBpZiAodGhpcy5yZWFzb24pIHtcbiAgICAgIGxpc3RlbmVyKHRoaXMucmVhc29uKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbGlzdGVuZXJzKSB7XG4gICAgICB0aGlzLl9saXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2xpc3RlbmVycyA9IFtsaXN0ZW5lcl07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVuc3Vic2NyaWJlIGZyb20gdGhlIGNhbmNlbCBzaWduYWxcbiAgICovXG5cbiAgdW5zdWJzY3JpYmUobGlzdGVuZXIpIHtcbiAgICBpZiAoIXRoaXMuX2xpc3RlbmVycykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpbmRleCA9IHRoaXMuX2xpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICB0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBvYmplY3QgdGhhdCBjb250YWlucyBhIG5ldyBgQ2FuY2VsVG9rZW5gIGFuZCBhIGZ1bmN0aW9uIHRoYXQsIHdoZW4gY2FsbGVkLFxuICAgKiBjYW5jZWxzIHRoZSBgQ2FuY2VsVG9rZW5gLlxuICAgKi9cbiAgc3RhdGljIHNvdXJjZSgpIHtcbiAgICBsZXQgY2FuY2VsO1xuICAgIGNvbnN0IHRva2VuID0gbmV3IENhbmNlbFRva2VuKGZ1bmN0aW9uIGV4ZWN1dG9yKGMpIHtcbiAgICAgIGNhbmNlbCA9IGM7XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRva2VuLFxuICAgICAgY2FuY2VsXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDYW5jZWxUb2tlbjtcbiIsICIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogU3ludGFjdGljIHN1Z2FyIGZvciBpbnZva2luZyBhIGZ1bmN0aW9uIGFuZCBleHBhbmRpbmcgYW4gYXJyYXkgZm9yIGFyZ3VtZW50cy5cbiAqXG4gKiBDb21tb24gdXNlIGNhc2Ugd291bGQgYmUgdG8gdXNlIGBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHlgLlxuICpcbiAqICBgYGBqc1xuICogIGZ1bmN0aW9uIGYoeCwgeSwgeikge31cbiAqICB2YXIgYXJncyA9IFsxLCAyLCAzXTtcbiAqICBmLmFwcGx5KG51bGwsIGFyZ3MpO1xuICogIGBgYFxuICpcbiAqIFdpdGggYHNwcmVhZGAgdGhpcyBleGFtcGxlIGNhbiBiZSByZS13cml0dGVuLlxuICpcbiAqICBgYGBqc1xuICogIHNwcmVhZChmdW5jdGlvbih4LCB5LCB6KSB7fSkoWzEsIDIsIDNdKTtcbiAqICBgYGBcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICpcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3ByZWFkKGNhbGxiYWNrKSB7XG4gIHJldHVybiBmdW5jdGlvbiB3cmFwKGFycikge1xuICAgIHJldHVybiBjYWxsYmFjay5hcHBseShudWxsLCBhcnIpO1xuICB9O1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4vLi4vdXRpbHMuanMnO1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgcGF5bG9hZCBpcyBhbiBlcnJvciB0aHJvd24gYnkgQXhpb3NcbiAqXG4gKiBAcGFyYW0geyp9IHBheWxvYWQgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgcGF5bG9hZCBpcyBhbiBlcnJvciB0aHJvd24gYnkgQXhpb3MsIG90aGVyd2lzZSBmYWxzZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0F4aW9zRXJyb3IocGF5bG9hZCkge1xuICByZXR1cm4gdXRpbHMuaXNPYmplY3QocGF5bG9hZCkgJiYgKHBheWxvYWQuaXNBeGlvc0Vycm9yID09PSB0cnVlKTtcbn1cbiIsICJjb25zdCBIdHRwU3RhdHVzQ29kZSA9IHtcbiAgQ29udGludWU6IDEwMCxcbiAgU3dpdGNoaW5nUHJvdG9jb2xzOiAxMDEsXG4gIFByb2Nlc3Npbmc6IDEwMixcbiAgRWFybHlIaW50czogMTAzLFxuICBPazogMjAwLFxuICBDcmVhdGVkOiAyMDEsXG4gIEFjY2VwdGVkOiAyMDIsXG4gIE5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbjogMjAzLFxuICBOb0NvbnRlbnQ6IDIwNCxcbiAgUmVzZXRDb250ZW50OiAyMDUsXG4gIFBhcnRpYWxDb250ZW50OiAyMDYsXG4gIE11bHRpU3RhdHVzOiAyMDcsXG4gIEFscmVhZHlSZXBvcnRlZDogMjA4LFxuICBJbVVzZWQ6IDIyNixcbiAgTXVsdGlwbGVDaG9pY2VzOiAzMDAsXG4gIE1vdmVkUGVybWFuZW50bHk6IDMwMSxcbiAgRm91bmQ6IDMwMixcbiAgU2VlT3RoZXI6IDMwMyxcbiAgTm90TW9kaWZpZWQ6IDMwNCxcbiAgVXNlUHJveHk6IDMwNSxcbiAgVW51c2VkOiAzMDYsXG4gIFRlbXBvcmFyeVJlZGlyZWN0OiAzMDcsXG4gIFBlcm1hbmVudFJlZGlyZWN0OiAzMDgsXG4gIEJhZFJlcXVlc3Q6IDQwMCxcbiAgVW5hdXRob3JpemVkOiA0MDEsXG4gIFBheW1lbnRSZXF1aXJlZDogNDAyLFxuICBGb3JiaWRkZW46IDQwMyxcbiAgTm90Rm91bmQ6IDQwNCxcbiAgTWV0aG9kTm90QWxsb3dlZDogNDA1LFxuICBOb3RBY2NlcHRhYmxlOiA0MDYsXG4gIFByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZDogNDA3LFxuICBSZXF1ZXN0VGltZW91dDogNDA4LFxuICBDb25mbGljdDogNDA5LFxuICBHb25lOiA0MTAsXG4gIExlbmd0aFJlcXVpcmVkOiA0MTEsXG4gIFByZWNvbmRpdGlvbkZhaWxlZDogNDEyLFxuICBQYXlsb2FkVG9vTGFyZ2U6IDQxMyxcbiAgVXJpVG9vTG9uZzogNDE0LFxuICBVbnN1cHBvcnRlZE1lZGlhVHlwZTogNDE1LFxuICBSYW5nZU5vdFNhdGlzZmlhYmxlOiA0MTYsXG4gIEV4cGVjdGF0aW9uRmFpbGVkOiA0MTcsXG4gIEltQVRlYXBvdDogNDE4LFxuICBNaXNkaXJlY3RlZFJlcXVlc3Q6IDQyMSxcbiAgVW5wcm9jZXNzYWJsZUVudGl0eTogNDIyLFxuICBMb2NrZWQ6IDQyMyxcbiAgRmFpbGVkRGVwZW5kZW5jeTogNDI0LFxuICBUb29FYXJseTogNDI1LFxuICBVcGdyYWRlUmVxdWlyZWQ6IDQyNixcbiAgUHJlY29uZGl0aW9uUmVxdWlyZWQ6IDQyOCxcbiAgVG9vTWFueVJlcXVlc3RzOiA0MjksXG4gIFJlcXVlc3RIZWFkZXJGaWVsZHNUb29MYXJnZTogNDMxLFxuICBVbmF2YWlsYWJsZUZvckxlZ2FsUmVhc29uczogNDUxLFxuICBJbnRlcm5hbFNlcnZlckVycm9yOiA1MDAsXG4gIE5vdEltcGxlbWVudGVkOiA1MDEsXG4gIEJhZEdhdGV3YXk6IDUwMixcbiAgU2VydmljZVVuYXZhaWxhYmxlOiA1MDMsXG4gIEdhdGV3YXlUaW1lb3V0OiA1MDQsXG4gIEh0dHBWZXJzaW9uTm90U3VwcG9ydGVkOiA1MDUsXG4gIFZhcmlhbnRBbHNvTmVnb3RpYXRlczogNTA2LFxuICBJbnN1ZmZpY2llbnRTdG9yYWdlOiA1MDcsXG4gIExvb3BEZXRlY3RlZDogNTA4LFxuICBOb3RFeHRlbmRlZDogNTEwLFxuICBOZXR3b3JrQXV0aGVudGljYXRpb25SZXF1aXJlZDogNTExLFxufTtcblxuT2JqZWN0LmVudHJpZXMoSHR0cFN0YXR1c0NvZGUpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICBIdHRwU3RhdHVzQ29kZVt2YWx1ZV0gPSBrZXk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgSHR0cFN0YXR1c0NvZGU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscy5qcyc7XG5pbXBvcnQgYmluZCBmcm9tICcuL2hlbHBlcnMvYmluZC5qcyc7XG5pbXBvcnQgQXhpb3MgZnJvbSAnLi9jb3JlL0F4aW9zLmpzJztcbmltcG9ydCBtZXJnZUNvbmZpZyBmcm9tICcuL2NvcmUvbWVyZ2VDb25maWcuanMnO1xuaW1wb3J0IGRlZmF1bHRzIGZyb20gJy4vZGVmYXVsdHMvaW5kZXguanMnO1xuaW1wb3J0IGZvcm1EYXRhVG9KU09OIGZyb20gJy4vaGVscGVycy9mb3JtRGF0YVRvSlNPTi5qcyc7XG5pbXBvcnQgQ2FuY2VsZWRFcnJvciBmcm9tICcuL2NhbmNlbC9DYW5jZWxlZEVycm9yLmpzJztcbmltcG9ydCBDYW5jZWxUb2tlbiBmcm9tICcuL2NhbmNlbC9DYW5jZWxUb2tlbi5qcyc7XG5pbXBvcnQgaXNDYW5jZWwgZnJvbSAnLi9jYW5jZWwvaXNDYW5jZWwuanMnO1xuaW1wb3J0IHtWRVJTSU9OfSBmcm9tICcuL2Vudi9kYXRhLmpzJztcbmltcG9ydCB0b0Zvcm1EYXRhIGZyb20gJy4vaGVscGVycy90b0Zvcm1EYXRhLmpzJztcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4vY29yZS9BeGlvc0Vycm9yLmpzJztcbmltcG9ydCBzcHJlYWQgZnJvbSAnLi9oZWxwZXJzL3NwcmVhZC5qcyc7XG5pbXBvcnQgaXNBeGlvc0Vycm9yIGZyb20gJy4vaGVscGVycy9pc0F4aW9zRXJyb3IuanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tIFwiLi9jb3JlL0F4aW9zSGVhZGVycy5qc1wiO1xuaW1wb3J0IGFkYXB0ZXJzIGZyb20gJy4vYWRhcHRlcnMvYWRhcHRlcnMuanMnO1xuaW1wb3J0IEh0dHBTdGF0dXNDb2RlIGZyb20gJy4vaGVscGVycy9IdHRwU3RhdHVzQ29kZS5qcyc7XG5cbi8qKlxuICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIEF4aW9zXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGRlZmF1bHRDb25maWcgVGhlIGRlZmF1bHQgY29uZmlnIGZvciB0aGUgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJucyB7QXhpb3N9IEEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlKGRlZmF1bHRDb25maWcpIHtcbiAgY29uc3QgY29udGV4dCA9IG5ldyBBeGlvcyhkZWZhdWx0Q29uZmlnKTtcbiAgY29uc3QgaW5zdGFuY2UgPSBiaW5kKEF4aW9zLnByb3RvdHlwZS5yZXF1ZXN0LCBjb250ZXh0KTtcblxuICAvLyBDb3B5IGF4aW9zLnByb3RvdHlwZSB0byBpbnN0YW5jZVxuICB1dGlscy5leHRlbmQoaW5zdGFuY2UsIEF4aW9zLnByb3RvdHlwZSwgY29udGV4dCwge2FsbE93bktleXM6IHRydWV9KTtcblxuICAvLyBDb3B5IGNvbnRleHQgdG8gaW5zdGFuY2VcbiAgdXRpbHMuZXh0ZW5kKGluc3RhbmNlLCBjb250ZXh0LCBudWxsLCB7YWxsT3duS2V5czogdHJ1ZX0pO1xuXG4gIC8vIEZhY3RvcnkgZm9yIGNyZWF0aW5nIG5ldyBpbnN0YW5jZXNcbiAgaW5zdGFuY2UuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKGluc3RhbmNlQ29uZmlnKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUluc3RhbmNlKG1lcmdlQ29uZmlnKGRlZmF1bHRDb25maWcsIGluc3RhbmNlQ29uZmlnKSk7XG4gIH07XG5cbiAgcmV0dXJuIGluc3RhbmNlO1xufVxuXG4vLyBDcmVhdGUgdGhlIGRlZmF1bHQgaW5zdGFuY2UgdG8gYmUgZXhwb3J0ZWRcbmNvbnN0IGF4aW9zID0gY3JlYXRlSW5zdGFuY2UoZGVmYXVsdHMpO1xuXG4vLyBFeHBvc2UgQXhpb3MgY2xhc3MgdG8gYWxsb3cgY2xhc3MgaW5oZXJpdGFuY2VcbmF4aW9zLkF4aW9zID0gQXhpb3M7XG5cbi8vIEV4cG9zZSBDYW5jZWwgJiBDYW5jZWxUb2tlblxuYXhpb3MuQ2FuY2VsZWRFcnJvciA9IENhbmNlbGVkRXJyb3I7XG5heGlvcy5DYW5jZWxUb2tlbiA9IENhbmNlbFRva2VuO1xuYXhpb3MuaXNDYW5jZWwgPSBpc0NhbmNlbDtcbmF4aW9zLlZFUlNJT04gPSBWRVJTSU9OO1xuYXhpb3MudG9Gb3JtRGF0YSA9IHRvRm9ybURhdGE7XG5cbi8vIEV4cG9zZSBBeGlvc0Vycm9yIGNsYXNzXG5heGlvcy5BeGlvc0Vycm9yID0gQXhpb3NFcnJvcjtcblxuLy8gYWxpYXMgZm9yIENhbmNlbGVkRXJyb3IgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbmF4aW9zLkNhbmNlbCA9IGF4aW9zLkNhbmNlbGVkRXJyb3I7XG5cbi8vIEV4cG9zZSBhbGwvc3ByZWFkXG5heGlvcy5hbGwgPSBmdW5jdGlvbiBhbGwocHJvbWlzZXMpIHtcbiAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKTtcbn07XG5cbmF4aW9zLnNwcmVhZCA9IHNwcmVhZDtcblxuLy8gRXhwb3NlIGlzQXhpb3NFcnJvclxuYXhpb3MuaXNBeGlvc0Vycm9yID0gaXNBeGlvc0Vycm9yO1xuXG4vLyBFeHBvc2UgbWVyZ2VDb25maWdcbmF4aW9zLm1lcmdlQ29uZmlnID0gbWVyZ2VDb25maWc7XG5cbmF4aW9zLkF4aW9zSGVhZGVycyA9IEF4aW9zSGVhZGVycztcblxuYXhpb3MuZm9ybVRvSlNPTiA9IHRoaW5nID0+IGZvcm1EYXRhVG9KU09OKHV0aWxzLmlzSFRNTEZvcm0odGhpbmcpID8gbmV3IEZvcm1EYXRhKHRoaW5nKSA6IHRoaW5nKTtcblxuYXhpb3MuZ2V0QWRhcHRlciA9IGFkYXB0ZXJzLmdldEFkYXB0ZXI7XG5cbmF4aW9zLkh0dHBTdGF0dXNDb2RlID0gSHR0cFN0YXR1c0NvZGU7XG5cbmF4aW9zLmRlZmF1bHQgPSBheGlvcztcblxuLy8gdGhpcyBtb2R1bGUgc2hvdWxkIG9ubHkgaGF2ZSBhIGRlZmF1bHQgZXhwb3J0XG5leHBvcnQgZGVmYXVsdCBheGlvc1xuIiwgImltcG9ydCBheGlvcyBmcm9tICcuL2xpYi9heGlvcy5qcyc7XG5cbi8vIFRoaXMgbW9kdWxlIGlzIGludGVuZGVkIHRvIHVud3JhcCBBeGlvcyBkZWZhdWx0IGV4cG9ydCBhcyBuYW1lZC5cbi8vIEtlZXAgdG9wLWxldmVsIGV4cG9ydCBzYW1lIHdpdGggc3RhdGljIHByb3BlcnRpZXNcbi8vIHNvIHRoYXQgaXQgY2FuIGtlZXAgc2FtZSB3aXRoIGVzIG1vZHVsZSBvciBjanNcbmNvbnN0IHtcbiAgQXhpb3MsXG4gIEF4aW9zRXJyb3IsXG4gIENhbmNlbGVkRXJyb3IsXG4gIGlzQ2FuY2VsLFxuICBDYW5jZWxUb2tlbixcbiAgVkVSU0lPTixcbiAgYWxsLFxuICBDYW5jZWwsXG4gIGlzQXhpb3NFcnJvcixcbiAgc3ByZWFkLFxuICB0b0Zvcm1EYXRhLFxuICBBeGlvc0hlYWRlcnMsXG4gIEh0dHBTdGF0dXNDb2RlLFxuICBmb3JtVG9KU09OLFxuICBnZXRBZGFwdGVyLFxuICBtZXJnZUNvbmZpZ1xufSA9IGF4aW9zO1xuXG5leHBvcnQge1xuICBheGlvcyBhcyBkZWZhdWx0LFxuICBBeGlvcyxcbiAgQXhpb3NFcnJvcixcbiAgQ2FuY2VsZWRFcnJvcixcbiAgaXNDYW5jZWwsXG4gIENhbmNlbFRva2VuLFxuICBWRVJTSU9OLFxuICBhbGwsXG4gIENhbmNlbCxcbiAgaXNBeGlvc0Vycm9yLFxuICBzcHJlYWQsXG4gIHRvRm9ybURhdGEsXG4gIEF4aW9zSGVhZGVycyxcbiAgSHR0cFN0YXR1c0NvZGUsXG4gIGZvcm1Ub0pTT04sXG4gIGdldEFkYXB0ZXIsXG4gIG1lcmdlQ29uZmlnXG59XG4iLCAiaW1wb3J0IHtFdWlMaW5rQ29sb3J9IGZyb20gXCJAZWxhc3RpYy9ldWkvc3JjL2NvbXBvbmVudHMvbGluay9saW5rXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBhc0FycmF5PFQ+KG9iajogVCB8IFRbXSk6IFRbXSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgICByZXR1cm4gb2JqO1xuICAgIH0gZWxzZSBpZiAob2JqKSB7XG4gICAgICAgIHJldHVybiBbb2JqXTtcbiAgICB9XG4gICAgcmV0dXJuIFtdIGFzIFRbXTtcbn1cblxuY29uc3QgREVGQVVMVF9VU0VfTEVHQUNZID0gdHJ1ZTtcbi8qKlxuICogUmV0dXJucyBgdXNlTGVnYWN5YCBpZiB1bmRlZmluZWQsIG90aGVyd2lzZSByZXR1cm5zIGRlZmF1bHQgdmFsdWUgZm9yIHVzZUxlZ2FjeVxuICogQHBhcmFtIHVzZUxlZ2FjeVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VXNlTGVnYWN5KHVzZUxlZ2FjeT86IGJvb2xlYW4pIDogYm9vbGVhbiB7XG4gICAgcmV0dXJuICh1c2VMZWdhY3kgIT09IHVuZGVmaW5lZCkgPyB1c2VMZWdhY3kgOiBERUZBVUxUX1VTRV9MRUdBQ1k7XG59XG5cbi8qKlxuICogUmV0dXJucyB7QGxpbmsgdHlwZX0uIElmIHtAbGluayB0eXBlfSBlcXVhbHMgJ3Rlcm0nLCAnY2xhc3MnIGdldHMgcmV0dXJuZWQgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVudGl0eVR5cGVOYW1lKHR5cGU6IHN0cmluZykgOiBzdHJpbmcge1xuICAgIHJldHVybiB0eXBlID09PSBcInRlcm1cIiA/IFwiY2xhc3NcIiA6IHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYXBpdGFsaXplKHN0cjogc3RyaW5nKSA6IHN0cmluZyB7XG4gICAgcmV0dXJuIHN0ci5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0ci5zbGljZSgxKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlQ2FtZWxDYXNlKHN0cjogc3RyaW5nKSA6IHN0cmluZyB7XG4gICAgcmV0dXJuIGNhcGl0YWxpemUoc3RyKS5zcGxpdCgvKD89W0EtWl1bYS16XSkvKS5qb2luKFwiIFwiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlVW5kZXJzY29yZShzdHI6IHN0cmluZykgOiBzdHJpbmcge1xuICAgIHJldHVybiBjYXBpdGFsaXplKHN0cikucmVwbGFjZShcIl9cIiwgXCIgXCIpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdHJpbW1lZCBhcGkgKG9taXRzIC9hcGkvdjIgYXQgdGhlIGVuZClcbiAqIEBwYXJhbSBhcGlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZyb250RW5kQXBpKGFwaTogc3RyaW5nKSA6IHN0cmluZyB7XG4gICAgcmV0dXJuIGFwaS5yZXBsYWNlKFwiL2FwaS9cIiwgXCJcIikucmVwbGFjZShcIi9hcGlcIiwgXCJcIik7XG59XG5cbi8qKlxuICogUmV0dXJucyBcIi9vbnRvbG9naWVzL3tvbnRvbG9neUlkfS97ZW50aXR5VHlwZX0/aXJpPXt0ZXJtSXJpfVwiLCB3aGljaCBjYW4gYmUgY29uY2F0ZW5hdGVkIHdpdGggZnJvbnRlbmRBcGkgdG8gZ2V0IGZ1bGwgbGlua1xuICogQHBhcmFtIG9udG9sb2d5SWQgdGhlIGVudGl0aWVzJyBvbnRvbG9neUlkXG4gKiBAcGFyYW0gdGVybUlyaSB0aGUgZW50aXRpZXMnIGlyaVxuICogQHBhcmFtIGVudGl0eVR5cGVBcnJheSB0aGUgZW50aXRpZXMnIHR5cGUgYXJyYXkgKGZyb20gYXBpIEpTT04gbGlua2VkRW50aXRpZXMpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUZXJtSW5PbnRvbG9neVN1ZmZpeChvbnRvbG9neUlkOiBzdHJpbmcsIHRlcm1Jcmk6IHN0cmluZywgZW50aXR5VHlwZUFycmF5OiBzdHJpbmdbXSkgOiBzdHJpbmcge1xuICAgIHJldHVybiBcIi9vbnRvbG9naWVzL1wiICsgb250b2xvZ3lJZCArIFwiL1wiICsgcGx1cmFsaXplVHlwZShlbnRpdHlUeXBlQXJyYXkpICsgXCI/aXJpPVwiICsgdGVybUlyaTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBsdXJhbGl6ZVR5cGUodHlwZUFycmF5OiBzdHJpbmdbXSB8IHN0cmluZywgdXNlTGVnYWN5PzogYm9vbGVhbikgOiBcInRlcm1zXCIgfCBcImNsYXNzZXNcIiB8IFwicHJvcGVydGllc1wiIHwgXCJpbmRpdmlkdWFsc1wiIHwgdW5kZWZpbmVkIHtcbiAgICBmb3IoY29uc3QgdHlwZSBvZiBhc0FycmF5KHR5cGVBcnJheSkpIHtcbiAgICAgICAgc3dpdGNoICh0eXBlKXtcbiAgICAgICAgICAgIGNhc2UgXCJjbGFzc1wiOiBjYXNlIFwidGVybVwiOiAvLyBhbGxvdyBib3RoXG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldFVzZUxlZ2FjeSh1c2VMZWdhY3kpID8gXCJ0ZXJtc1wiIDogXCJjbGFzc2VzXCI7XG4gICAgICAgICAgICBjYXNlIFwicHJvcGVydHlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJwcm9wZXJ0aWVzXCJcbiAgICAgICAgICAgIGNhc2UgXCJpbmRpdmlkdWFsXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiaW5kaXZpZHVhbHNcIlxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIHJhbmRvbSBzdHJpbmcgdXNlZCBtYWlubHkgZm9yIGNvbXBvbmVudCBrZXlzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmFuZG9tU3RyaW5nKCkge1xuICAgIHJldHVybiAoTWF0aC5yYW5kb20oKSAqIE1hdGgucG93KDIsIDU0KSkudG9TdHJpbmcoMzYpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNIZXhDb2xvcihzdHI6IHN0cmluZykgOiBib29sZWFuIHtcbiAgICByZXR1cm4gL14jWzAtOUEtRl17Nn0kL2kudGVzdChzdHIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNSZ2JDb2xvcihzdHI6IHN0cmluZykgOiBib29sZWFuIHtcbiAgICByZXR1cm4gL14ocmdifGhzbCkoYT8pWyhdXFxzKihbXFxkLl0rXFxzKiU/KVxccyosXFxzKihbXFxkLl0rXFxzKiU/KVxccyosXFxzKihbXFxkLl0rXFxzKiU/KVxccyooPzosXFxzKihbXFxkLl0rKVxccyopP1spXSQvaS50ZXN0KHN0cik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0V1aUxpbmtDb2xvcihzdHI6IHN0cmluZykgOiBzdHIgaXMgRXVpTGlua0NvbG9yIHtcbiAgICByZXR1cm4gW1wicHJpbWFyeVwiLCBcInN1YmR1ZWRcIiwgXCJzdWNjZXNzXCIsIFwiYWNjZW50XCIsIFwiZGFuZ2VyXCIsIFwid2FybmluZ1wiLCBcInRleHRcIiwgXCJnaG9zdFwiXS5pbmNsdWRlcyhzdHIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5KGVycm9yOiBhbnksIG1lc3NhZ2VQbGFjZWhvbGRlciA9IFwiaW5mb3JtYXRpb25cIik6IHN0cmluZyB7XG4gICAgY29uc3QgZXJyb3JfbXNnIDogc3RyaW5nID0gZXJyb3IubWVzc2FnZTtcbiAgICBpZihlcnJvcl9tc2cgPT09IChcIlJlc3BvbnNlIGNvbnRhaW5zIDAgZWxlbWVudHNcIikpIHtcbiAgICAgICAgcmV0dXJuIFwiTm8gZWxlbWVudHMgZm91bmRcIjtcbiAgICB9XG4gICAgZWxzZSByZXR1cm4gYE5vICR7bWVzc2FnZVBsYWNlaG9sZGVyfSBhdmFpbGFibGVgO1xufSIsICJleHBvcnQgZGVmYXVsdCBjbGFzcyBSZWlmaWVkPFQ+IHtcbiAgdmFsdWU6IFQ7XG4gIGF4aW9tczogYW55W10gfCBudWxsO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IodmFsdWU6IFQsIGF4aW9tczogYW55W10gfCBudWxsKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuYXhpb21zID0gYXhpb21zO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBmcm9tSnNvbjxUPihqc29uTm9kZTogYW55KTogUmVpZmllZDxUPltdIHtcbiAgICBpZiAoIWpzb25Ob2RlKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGpzb25Ob2RlKSkge1xuICAgICAganNvbk5vZGUgPSBbanNvbk5vZGVdO1xuICAgIH1cblxuICAgIHJldHVybiBqc29uTm9kZS5tYXAoKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgIEFycmF5LmlzQXJyYXkodmFsdWUudHlwZSkgJiZcbiAgICAgICAgdmFsdWUudHlwZS5pbmRleE9mKFwicmVpZmljYXRpb25cIikgIT09IC0xXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWlmaWVkPFQ+KHZhbHVlLnZhbHVlLCB2YWx1ZS5heGlvbXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWlmaWVkPFQ+KHZhbHVlLCBudWxsKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGhhc01ldGFkYXRhKCkge1xuICAgIHJldHVybiB0aGlzLmF4aW9tcyAhPSBudWxsO1xuICB9XG5cbiAgLy8gQ29tYmluZSBhbGwgb2YgdGhlIGF4aW9tcyBpbnRvIG9uZSBtZXRhZGF0YSBvYmplY3QgZm9yIHRoZSBwcm9wZXJ0eS5cbiAgLy9cbiAgLy8gbm90ZTogVGhpcyBtZWFucyB0aGF0IGlmIHRoZSBzYW1lIHByb3BlcnR5IGlzIHJlaWZpZWQgbXVsdGlwbGUgdGltZXMgd2l0aFxuICAvLyBkaWZmZXJlbnQgbWV0YWRhdGEsIGl0IHdpbGwgYWxsIGJlIGNvbWJpbmVkIGluIHRoZSBVSS4gV2hldGhlciB0aGlzIGlzXG4gIC8vIHRoZSBkZXNpcmVkIGJlaGF2aW91ciBpcyBUQkQuXG4gIC8vXG4gIGdldE1ldGFkYXRhKCk6IGFueSB8IG51bGwge1xuICAgIGlmICghdGhpcy5heGlvbXMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHByb3BlcnRpZXM6IGFueSA9IHt9O1xuXG4gICAgZm9yIChjb25zdCBheGlvbSBvZiB0aGlzLmF4aW9tcykge1xuICAgICAgZm9yIChjb25zdCBrIG9mIE9iamVjdC5rZXlzKGF4aW9tKSkge1xuICAgICAgICBjb25zdCB2ID0gYXhpb21ba107XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nOiBhbnlbXSB8IHVuZGVmaW5lZCA9IHByb3BlcnRpZXNba107XG4gICAgICAgIGlmIChleGlzdGluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZXhpc3RpbmcucHVzaCh2KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcm9wZXJ0aWVzW2tdID0gW3ZdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb3BlcnRpZXM7XG4gIH1cbn1cbiIsICJpbXBvcnQgUmVpZmllZCBmcm9tIFwiLi9SZWlmaWVkXCJcblxuZXhwb3J0IGludGVyZmFjZSBMaW5rZWRFbnRpdHkge1xuXHRkZWZpbmVkQnk/OnN0cmluZ1tdXG5cdGlyaT86c3RyaW5nXG5cdHVybD86c3RyaW5nXG5cdG51bUFwcGVhcnNJbjpzdHJpbmdcblx0aGFzTG9jYWxEZWZpbml0aW9uOmJvb2xlYW5cblx0bGFiZWw6c3RyaW5nfHN0cmluZ1tdXG5cdHR5cGU6c3RyaW5nW11cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGlua2VkRW50aXRpZXMge1xuXG5cdGxpbmtlZEVudGl0aWVzOnsgW2tleTpzdHJpbmddOkxpbmtlZEVudGl0eSB9XG5cblx0Y29uc3RydWN0b3IobGlua2VkRW50aXRpZXM6YW55KSB7XG5cdFx0aWYobGlua2VkRW50aXRpZXMpXG5cdFx0XHR0aGlzLmxpbmtlZEVudGl0aWVzID0gey4uLmxpbmtlZEVudGl0aWVzfVxuXHRcdGVsc2Vcblx0XHRcdHRoaXMubGlua2VkRW50aXRpZXMgPSB7fVxuXHR9XG5cblx0bWVyZ2VXaXRoKGxpbmtlZEVudGl0aWVzOmFueSk6TGlua2VkRW50aXRpZXMge1xuXHRcdGlmKGxpbmtlZEVudGl0aWVzKVxuXHRcdFx0cmV0dXJuIG5ldyBMaW5rZWRFbnRpdGllcyh7IC4uLnRoaXMubGlua2VkRW50aXRpZXMsIGxpbmtlZEVudGl0aWVzIH0pXG5cdFx0ZWxzZVxuXHRcdFx0cmV0dXJuIG5ldyBMaW5rZWRFbnRpdGllcyh7IC4uLnRoaXMubGlua2VkRW50aXRpZXMgfSlcblx0fVxuXG5cdGdldExhYmVsRm9ySXJpKGlyaTpzdHJpbmcpOnN0cmluZ3x1bmRlZmluZWQge1xuXHRcdGNvbnN0IGxpbmtlZEVudGl0eSA9IHRoaXMubGlua2VkRW50aXRpZXNbaXJpXVxuXG5cdFx0aWYobGlua2VkRW50aXR5KSB7XG5cdFx0XHRjb25zdCBsYWJlbCA9IFJlaWZpZWQuZnJvbUpzb248c3RyaW5nPiggbGlua2VkRW50aXR5LmxhYmVsIClcblx0XHRcdGlmKGxhYmVsICYmIGxhYmVsLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0cmV0dXJuIGxhYmVsWzBdLnZhbHVlXG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Z2V0KGlyaTpzdHJpbmcpOkxpbmtlZEVudGl0eXx1bmRlZmluZWQge1xuXHRcdHJldHVybiB0aGlzLmxpbmtlZEVudGl0aWVzW2lyaV1cblx0fVxufVxuIiwgImltcG9ydCB7VGhpbmd9IGZyb20gXCIuLi9pbnRlcmZhY2VzXCI7XG5cbmltcG9ydCBMaW5rZWRFbnRpdGllcyBmcm9tIFwiLi4vTGlua2VkRW50aXRpZXNcIjtcbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuLi9SZWlmaWVkXCI7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBPTFMzVGhpbmcgaW1wbGVtZW50cyBUaGluZyB7XG4gIHByb3BlcnRpZXM6IGFueTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzOiBhbnkpIHtcbiAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzO1xuICB9XG5cbiAgZ2V0TGFiZWwoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wibGFiZWxcIl07XG4gIH1cblxuICAvLyBUT0RPOiBJcyBjdXJpZSAvIG9ib19pZCBtZWFudD8gXCJpZFwiIG9ubHkgZXhpc3RzIGluIHN0YW5kYXJkPyAoaHR0cDovL3d3dy5lYmkuYWMudWsvb2xzNC9hcGkvb250b2xvZ2llcy9hZG8vcHJvcGVydGllcz9pcmk9aHR0cDovL3B1cmwub2JvbGlicmFyeS5vcmcvb2JvL1JPXzAwMDIxNzUpXG4gIGdldElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImlkXCJdO1xuICB9XG5cbiAgZ2V0SXJpKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImlyaVwiXTtcbiAgfVxuXG4gIC8vIHN0YW5kYXJkIHJlc3BvbnNlcyBkb24ndCBoYXZlIFwidHlwZVwiIGtleSAtPiBpbXBsZW1lbnQgc3RhdGljYWxseSBpbiBzdWJ0eXBlc1xuICBhYnN0cmFjdCBnZXRUeXBlKCk6IFwib250b2xvZ3lcIiB8IFwiY2xhc3NcIiB8IFwicHJvcGVydHlcIiB8IFwiaW5kaXZpZHVhbFwiO1xuXG4gIC8vIHN0YW5kYXJkIHJlc3BvbnNlcyBkb24ndCBoYXZlIFwidHlwZVwiIGtleSAtPiBpbXBsZW1lbnQgc3RhdGljYWxseSBpbiBzdWJ0eXBlc1xuICBhYnN0cmFjdCBnZXRUeXBlUGx1cmFsKCk6IFwib250b2xvZ2llc1wiIHwgXCJjbGFzc2VzXCIgfCBcInByb3BlcnRpZXNcIiB8IFwiaW5kaXZpZHVhbHNcIjtcblxuICAvLyBub3QgYXZhaWxhYmxlIGluIHN0YW5kYXJkIHJlc3BvbnNlc1xuICBnZXRSZGZUeXBlcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgZ2V0TmFtZSgpOiBzdHJpbmcge1xuXHRyZXR1cm4gdGhpcy5nZXROYW1lcygpWzBdO1xuICB9XG5cbiAgLy8gaGFzIGFkZGl0aW9uYWwga2V5IFwic2hvcnRoYW5kXCI/IChodHRwOi8vd3d3LmViaS5hYy51ay9vbHM0L2FwaS9vbnRvbG9naWVzL2Fkby9wcm9wZXJ0aWVzP2lyaT1odHRwOi8vcHVybC5vYm9saWJyYXJ5Lm9yZy9vYm8vUk9fMDAwMjE3NSlcbiAgZ2V0TmFtZXMoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGxhYmVscyA9IFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImxhYmVsXCJdXG4gICAgKTtcbiAgICBpZiAobGFiZWxzICYmIGxhYmVscy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gbGFiZWxzLm1hcChsYWJlbCA9PiBsYWJlbC52YWx1ZSlcbiAgICB9XG4gICAgcmV0dXJuIFt0aGlzLmdldElyaSgpXTtcbiAgfVxuXG4gIGdldERlc2NyaXB0aW9uKCk6IHN0cmluZyB7XG4gICAgY29uc3QgZGVmaW5pdGlvbiA9IFJlaWZpZWQuZnJvbUpzb248YW55Pih0aGlzLnByb3BlcnRpZXNbXCJkZXNjcmlwdGlvblwiXSk7XG4gICAgaWYgKGRlZmluaXRpb24gJiYgZGVmaW5pdGlvbi5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gZGVmaW5pdGlvbi5tYXAoKGRlZikgPT4gZGVmLnZhbHVlIHx8IFwiXCIpLmpvaW4oXCIgXCIpO1xuICAgIH1cbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIGdldE9udG9sb2d5SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wib250b2xvZ3lfbmFtZVwiXTtcbiAgfVxuXG4gIC8vIFRPRE86IG5vdCBhcHBsaWNhYmxlIC8gbmVjZXNzYXJ5IGluIHN0YW5kYXJkIGFzIHRoZXJlIGFyZSBubyBsaW5rZWQgZW50aXRpZXNcbiAgZ2V0TGFiZWxGb3JJcmkoaWQ6IHN0cmluZykge1xuICAgIGNvbnN0IGxpbmtlZEVudGl0aWVzID0gdGhpcy5wcm9wZXJ0aWVzW1wibGlua2VkRW50aXRpZXNcIl07XG4gICAgaWYgKGxpbmtlZEVudGl0aWVzKSB7XG4gICAgICBjb25zdCBsYWJlbDpSZWlmaWVkPHN0cmluZz5bXSA9IFJlaWZpZWQuZnJvbUpzb248c3RyaW5nPiggbGlua2VkRW50aXRpZXNbaWRdPy5sYWJlbCApO1xuICAgICAgcmV0dXJuIGxhYmVsWzBdPy52YWx1ZSB8fCBpZFxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gaWQ7XG4gICAgfVxuICB9XG5cbiAgYWJzdHJhY3QgZ2V0QW5ub3RhdGlvblByZWRpY2F0ZXMoKTogc3RyaW5nW107XG4gIGFic3RyYWN0IGdldEFubm90YXRpb25UaXRsZUJ5SWQoaWQ6IHN0cmluZyk6IHN0cmluZztcbiAgYWJzdHJhY3QgZ2V0QW5ub3RhdGlvbkJ5SWQoaWQ6IHN0cmluZyk6UmVpZmllZDxhbnk+W107XG5cbiAgLy8gVE9ETzogbm90IGFwcGxpY2FibGUgLyBuZWNlc3NhcnkgaW4gc3RhbmRhcmRcbiAgZ2V0TGlua2VkRW50aXRpZXMoKTogTGlua2VkRW50aXRpZXMge1xuICAgIHJldHVybiBuZXcgTGlua2VkRW50aXRpZXModGhpcy5wcm9wZXJ0aWVzW1wibGlua2VkRW50aXRpZXNcIl0gfHwge30pO1xuICB9XG59XG4iLCAiaW1wb3J0IHtFbnRpdHl9IGZyb20gXCIuLi9pbnRlcmZhY2VzXCI7XG5pbXBvcnQge09MUzNUaGluZ30gZnJvbSBcIi4vT0xTM1RoaW5nXCI7XG5cbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuLi9SZWlmaWVkXCI7XG5cbmltcG9ydCB7YXNBcnJheSwgZGVVbmRlcnNjb3JlfSBmcm9tIFwiLi4vLi4vYXBwL3V0aWxcIjtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE9MUzNFbnRpdHkgZXh0ZW5kcyBPTFMzVGhpbmcgaW1wbGVtZW50cyBFbnRpdHl7XG4gIGFic3RyYWN0IGdldFBhcmVudHMoKTogUmVpZmllZDxhbnk+W107XG4gIGFic3RyYWN0IGdldFN1cGVyRW50aXRpZXMoKTogUmVpZmllZDxhbnk+W107XG4gIGFic3RyYWN0IGdldEVxdWl2YWxlbnRzKCk6IFJlaWZpZWQ8YW55PltdO1xuXG4gIGlzQ2Fub25pY2FsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJpc19kZWZpbmluZ19vbnRvbG9neVwiXSA9PT0gdHJ1ZTtcbiAgfVxuXG4gIC8vIFRPRE86IGRvZXMgbm90IHNlZW0gdG8gb2NjdXIgaW4gc3RhbmRhcmQgKGh0dHA6Ly93d3cuZWJpLmFjLnVrL29sczQvYXBpL3YyL2VudGl0aWVzP2lyaT1odHRwOi8vcHVybC5vYm9saWJyYXJ5Lm9yZy9vYm8vRk9PRE9OXzAwMDA0NDc0KVxuICAvLyAgICAgICB2MiBoYXMgZGVwcmVjYXRlZCBpbmZvcm1hdGlvbiwgc3RhbmRhcmQgaGFzIG5vdFxuICBpc0RlcHJlY2F0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2RlcHJlY2F0ZWRcIl0gPT09IFwidHJ1ZVwiXG4gICAgKTtcbiAgfVxuXG4gIGdldERlcHJlY2F0aW9uVmVyc2lvbigpOiBzdHJpbmcge1xuICAgIC8vIG9ubHkgc3VwcG9ydHMgRUZPIGZvciBub3dcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy5lYmkuYWMudWsvZWZvL29ic29sZXRlZF9pbl92ZXJzaW9uXCJdO1xuICB9XG5cbiAgZ2V0RGVwcmVjYXRpb25SZWFzb24oKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vcHVybC5vYm9saWJyYXJ5Lm9yZy9vYm8vSUFPXzAwMDAyMzFcIl1cbiAgICApLmNvbmNhdChcbiAgICAgIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy5lYmkuYWMudWsvZWZvL3JlYXNvbl9mb3Jfb2Jzb2xlc2NlbmNlXCJdXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGdldERlcHJlY2F0aW9uUmVwbGFjZW1lbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3B1cmwub2JvbGlicmFyeS5vcmcvb2JvL0lBT18wMTAwMDAxXCJdO1xuICB9XG5cbiAgLy8gVE9ETzogbm90IGV4aXN0ZW50IGluIHN0YW5kYXJkLiBDYW4gYmUgZXh0cmFjdGVkIGZyb20gXCJsaW5rc1wiLT5cImdyYXBoXCJcbiAgLy8gICAgICAgKGh0dHA6Ly93d3cuZWJpLmFjLnVrL29sczQvYXBpL3Rlcm1zP2lyaT1odHRwOi8vcHVybC5vYm9saWJyYXJ5Lm9yZy9vYm8vQUdST18wMDAwMDAwMilcbiAgZ2V0UmVsYXRlZEZyb20oKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4odGhpcy5wcm9wZXJ0aWVzW1wicmVsYXRlZEZyb21cIl0pO1xuICB9XG5cbiAgZ2V0RGVzY3JpcHRpb25Bc0FycmF5KCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KHRoaXMucHJvcGVydGllc1tcImRlc2NyaXB0aW9uXCJdKTtcbiAgfVxuXG4gIC8vIFRPRE86IG5vdCBleGlzdGVudCBpbiBzdGFuZGFyZC4gQ2FuIGJlIGV4dHJhY3RlZCBmcm9tIFwibGlua3NcIi0+XCJjaGlsZHJlblwiXG4gIGhhc0RpcmVjdENoaWxkcmVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJoYXNEaXJlY3RDaGlsZHJlblwiXSA9PT0gXCJ0cnVlXCI7XG4gIH1cblxuICAvLyAvLyBUT0RPOiBub3QgZXhpc3RlbnQgaW4gc3RhbmRhcmQuIENhbiBiZSBleHRyYWN0ZWQgZnJvbSBcImxpbmtzXCItPlwiaGllcmFyY2hpY2FsQ2hpbGRyZW5cIlxuICBoYXNIaWVyYXJjaGljYWxDaGlsZHJlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaGFzSGllcmFyY2hpY2FsQ2hpbGRyZW5cIl0gPT09IFwidHJ1ZVwiO1xuICB9XG5cbiAgaGFzQ2hpbGRyZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImhhc19jaGlsZHJlblwiXVxuICB9XG5cbiAgLy8gVE9ETzogY291bGQgbm90IGZpbmQgZXhhbXBsZXMgb2YgYW5jZXN0b3JzIGluIG5ldyBhcGkgc28gZmFyXG4gIGdldEFuY2VzdG9ySXJpcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiYW5jZXN0b3JcIl0pO1xuICB9XG5cbiAgLy8gVE9ETzogY2FuIGJlIGluZmVycmVkIHZpYSBcImxpbmtzXCItPlwiaGllcmFyY2hpY2FsQW5jZXN0b3JzXCJcbiAgZ2V0SGllcmFyY2hpY2FsQW5jZXN0b3JJcmlzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJoaWVyYXJjaGljYWxBbmNlc3RvclwiXSk7XG4gIH1cblxuICBnZXRTeW5vbnltcygpIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KHRoaXMucHJvcGVydGllc1tcInN5bm9ueW1zXCJdKTtcbiAgfVxuXG4gIC8vIFRPRE86IG5vdCBleGlzdGVudCBpbiBzdGFuZGFyZC4gQ2FuIGJlIGV4dHJhY3RlZCB2aWEgc2VhcmNoaW5nIGZvciBlbnRpdHkgd2l0aG91dCBzcGVjaWZpYyBvbnRvbG9neSAtPiBnaXZlcyBhbGwgb2NjdXJyZW5jZXNcbiAgZ2V0QXBwZWFyc0luKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gKHRoaXMucHJvcGVydGllc1tcImFwcGVhcnNJblwiXSB8fCBbXSkgYXMgc3RyaW5nW107XG4gIH1cblxuICBnZXRDcm9zc1JlZmVyZW5jZXMoKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJhbm5vdGF0aW9uXCJdW1wiaGFzX2RieHJlZlwiXSB8fCBbXTtcbiAgfVxuXG4gIC8vIFRPRE86IG5vdCBleGlzdGVudCBpbiBzdGFuZGFyZC4gU3RhbmRhcmQgc2VlbXMgdG8gaGF2ZSBwcm9ibGVtcyB3aXRoIGlzX2RlZmluaW5nX29udG9sb2d5IGFzIHdlbGxcbiAgLy8gICAgICAgKGh0dHA6Ly93d3cuZWJpLmFjLnVrL29sczQvYXBpL3YyL29udG9sb2dpZXMvcm8vcHJvcGVydGllcz9pcmk9aHR0cDovL3B1cmwub2JvbGlicmFyeS5vcmcvb2JvL1JPXzAwMDIxNzUpXG4gIGdldERlZmluZWRCeSgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuICh0aGlzLnByb3BlcnRpZXNbXCJkZWZpbmVkQnlcIl0gfHwgW10pIGFzIHN0cmluZ1tdO1xuICB9XG5cbiAgZ2V0SXNEZWZpbmluZ09udG9sb2d5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAodGhpcy5wcm9wZXJ0aWVzW1wiaXNfZGVmaW5pbmdfb250b2xvZ3lcIl0gfHwgdW5kZWZpbmVkICkgYXMgYm9vbGVhbjtcbiAgfVxuXG4gIGdldFNob3J0Rm9ybSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJvYm9faWRcIl0gfHwgdGhpcy5wcm9wZXJ0aWVzW1wic2hvcnRfZm9ybVwiXTtcbiAgfVxuXG4gIC8vIFRPRE86IGFyZSB0aGUgZm9sbG93aW5nIDMgbmVlZGVkP1xuICBnZXREZXBpY3RlZEJ5KCk6IFJlaWZpZWQ8c3RyaW5nPltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxzdHJpbmc+KFxuICAgICAgWyAuLi5hc0FycmF5KHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly94bWxucy5jb20vZm9hZi8wLjEvZGVwaWN0ZWRfYnlcIl0gfHwgW10pLFxuICAgICAgICAuLi5hc0FycmF5KHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly94bWxucy5jb20vZm9hZi8wLjEvZGVwaWN0aW9uXCJdIHx8IFtdKSBdXG4gICAgKTtcbiAgfVxuXG4gIGlzUHJlZGljYXRlRnJvbUluZm9ybWFsVm9jYWJ1bGFyeShwcmVkaWNhdGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly93d3cudzMub3JnLzIwMDQvMDIvc2tvcy9jb3JlI1wiKSB8fFxuICAgICAgICBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly9wdXJsLm9yZy9kYy90ZXJtcy9cIikgfHxcbiAgICAgICAgcHJlZGljYXRlLnN0YXJ0c1dpdGgoXCJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xL1wiKSB8fFxuICAgICAgICBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly9zY2hlbWEub3JnL1wiKVxuICB9XG5cbiAgLyoqIENhbiBiZSBqdXN0IGZvdW5kIHVuZGVyIGBwcm9wZXJ0aWVzW1wiYW5ub3RhdGlvblwiXWAuXG4gICAqICBOb3QgcHJlc2VudCBpbiBvbHM0L2FwaSxcbiAgICogIGJ1dCBpbiBzZW1hbnRpY2xvb2t1cC56Ym1lZC5kZS9hcGkuXG4gICAqL1xuICBnZXRBbm5vdGF0aW9uUHJlZGljYXRlcygpOiBzdHJpbmdbXSB7XG4gICAgLyogb2xzNCBleGNsdWRlcyBcImhhcyBwcmVmZXJyZWQgcm9vdCB0ZXJtXCIsXG4gICAgICAgcHJvcGVydGllcyB3aXRob3V0IGFuIElSSSBhbmQgYW55dGhpbmcgaW4gcmRmLCByZGZzIGFuZCBvd2wgbmFtZXNwYWNlcyxcbiAgICAgICBidXQgdGhpcyBpcyBub3QgcG9zc2libGUgaGVyZSBhcyB0aGUgbGFiZWxzIGFyZSBrZXlzIGhlcmUsIG5vdCB0aGUgSVJJJ3MgKi9cbiAgICByZXR1cm4gYXNBcnJheTxzdHJpbmc+KE9iamVjdC5rZXlzKHRoaXMucHJvcGVydGllc1tcImFubm90YXRpb25cIl0pKTtcbiAgfVxuXG4gIGdldEFubm90YXRpb25UaXRsZUJ5SWQoaWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGRlVW5kZXJzY29yZShpZCk7XG4gIH1cblxuICBnZXRBbm5vdGF0aW9uQnlJZChpZDogc3RyaW5nKTpSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb24oYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJhbm5vdGF0aW9uXCJdW2lkXSkpXG4gIH1cblxuICAvLyBUT0RPOiBDYW4gYmUgaW5mZXJyZWQgdmlhIFwibGlua3NcIi0+XCJoaWVyYXJjaGljYWxEZXNjZW5kYW50c1wiXG4gIGdldE51bUhpZXJhcmNoaWNhbERlc2NlbmRhbnRzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcIm51bUhpZXJhcmNoaWNhbERlc2NlbmRhbnRzXCJdXG4gICAgICA/IHBhcnNlSW50KHRoaXMucHJvcGVydGllc1tcIm51bUhpZXJhcmNoaWNhbERlc2NlbmRhbnRzXCJdKVxuICAgICAgOiAwO1xuICB9XG5cbiAgLy8gVE9ETzogQ2FuIGJlIGluZmVycmVkIHZpYSBcImxpbmtzXCItPlwiZGVzY2VuZGFudHNcIlxuICBnZXROdW1EZXNjZW5kYW50cygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJudW1EZXNjZW5kYW50c1wiXVxuICAgICAgPyBwYXJzZUludCh0aGlzLnByb3BlcnRpZXNbXCJudW1EZXNjZW5kYW50c1wiXSlcbiAgICAgIDogMDtcbiAgfVxuXG4gIC8vIFRPRE86IENhbiBiZSBpbmZlcnJlZCB2aWEgXCJsaW5rc1wiLT5cImhpZXJhcmNoaWNhbFBhcmVudHNcIlxuICBnZXRIaWVyYXJjaGljYWxQYXJlbnRSZWlmaWNhdGlvbkF4aW9tcyhwYXJlbnRJcmk6IHN0cmluZyk6IGFueSB7XG4gICAgY29uc3QgaGllcmFyY2hpY2FsUGFyZW50cyA9IFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImhpZXJhcmNoaWNhbFBhcmVudFwiXVxuICAgICk7XG5cbiAgICBmb3IgKGNvbnN0IHAgb2YgaGllcmFyY2hpY2FsUGFyZW50cykge1xuICAgICAgaWYgKHAudmFsdWUgPT09IHBhcmVudElyaSkge1xuICAgICAgICByZXR1cm4gcC5nZXRNZXRhZGF0YSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldFR5cGVQbHVyYWwoKTogXCJjbGFzc2VzXCIgfCBcInByb3BlcnRpZXNcIiB8IFwiaW5kaXZpZHVhbHNcIiB7XG4gICAgY29uc3QgdHlwZSA9IHRoaXMuZ2V0VHlwZSgpO1xuXG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIFwiY2xhc3NcIjpcbiAgICAgICAgcmV0dXJuIFwiY2xhc3Nlc1wiO1xuICAgICAgY2FzZSBcInByb3BlcnR5XCI6XG4gICAgICAgIHJldHVybiBcInByb3BlcnRpZXNcIjtcbiAgICAgIGNhc2UgXCJpbmRpdmlkdWFsXCI6XG4gICAgICAgIHJldHVybiBcImluZGl2aWR1YWxzXCI7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIHR5cGVcIik7XG4gICAgfVxuICB9XG59XG4iLCAiaW1wb3J0IHtDbGFzc30gZnJvbSBcIi4uL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7T0xTM0VudGl0eX0gZnJvbSBcIi4vT0xTM0VudGl0eVwiO1xuXG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi4vUmVpZmllZFwiO1xuXG5pbXBvcnQgeyBhc0FycmF5IH0gZnJvbSBcIi4uLy4uL2FwcC91dGlsXCI7XG5cbmV4cG9ydCBjbGFzcyBPTFMzQ2xhc3MgZXh0ZW5kcyBPTFMzRW50aXR5IGltcGxlbWVudHMgQ2xhc3Mge1xuXG4gIGdldFR5cGUoKTogXCJvbnRvbG9neVwiIHwgXCJjbGFzc1wiIHwgXCJwcm9wZXJ0eVwiIHwgXCJpbmRpdmlkdWFsXCIge1xuICAgIHJldHVybiBcImNsYXNzXCJcbiAgfVxuXG4gIGdldFR5cGVQbHVyYWwoKTogXCJjbGFzc2VzXCIgfCBcInByb3BlcnRpZXNcIiB8IFwiaW5kaXZpZHVhbHNcIiB7XG4gICAgcmV0dXJuIFwiY2xhc3Nlc1wiXG4gIH1cblxuICAvLyBUT0RPOiBjYW4gYmUgaW5mZXJyZWQgdmlhIFwibGlua3NcIi0+XCJoaWVyYXJjaGljYWxQYXJlbnRzXCJcbiAgZ2V0UGFyZW50cygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImhpZXJhcmNoaWNhbFBhcmVudFwiXVxuICAgICk7XG4gIH1cblxuICAvLyBUT0RPOiBjYW4gYmUgaW5mZXJyZWQgdmlhIFwibGlua3NcIi0+XCJwYXJlbnRzXCJcbiAgZ2V0U3VwZXJFbnRpdGllcygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNzdWJDbGFzc09mXCJdXG4gICAgKTtcbiAgfVxuXG5cbiAgLy8gVE9ETzogY2FuIHRoaXMgYmUgaW5mZXJyZWQ/XG4gIGdldEVxdWl2YWxlbnRzKCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjZXF1aXZhbGVudENsYXNzXCJdXG4gICAgKTtcbiAgfVxuXG5cbiAgLy8gVE9ETzogY2FuIHRoaXMgYmUgaW5mZXJyZWQ/XG4gIGdldERpc2pvaW50V2l0aCgpIHtcblx0cmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzWydodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNkaXNqb2ludFdpdGgnXSlcbiAgfVxuXG4gIC8vIFRPRE86IGNhbiB0aGlzIGJlIGluZmVycmVkP1xuICBnZXRIYXNLZXkoKSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzWydodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNoYXNLZXknXSlcbiAgfVxuXG4gIGdldFN1YnNldHMoKTogYW55W10ge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImluX3N1YnNldFwiXSkgfHwgW107XG4gIH1cbn1cbiIsICJpbXBvcnQge1Byb3BlcnR5fSBmcm9tIFwiLi4vaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHtPTFMzRW50aXR5fSBmcm9tIFwiLi9PTFMzRW50aXR5XCI7XG5cbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuLi9SZWlmaWVkXCI7XG5cbmltcG9ydCB7IGFzQXJyYXkgfSBmcm9tIFwiLi4vLi4vYXBwL3V0aWxcIjtcblxuZXhwb3J0IGNsYXNzIE9MUzNQcm9wZXJ0eSBleHRlbmRzIE9MUzNFbnRpdHkgaW1wbGVtZW50cyBQcm9wZXJ0eXtcblxuICBnZXRUeXBlKCk6IFwib250b2xvZ3lcIiB8IFwiY2xhc3NcIiB8IFwicHJvcGVydHlcIiB8IFwiaW5kaXZpZHVhbFwiIHtcbiAgICByZXR1cm4gXCJwcm9wZXJ0eVwiO1xuICB9XG5cbiAgZ2V0VHlwZVBsdXJhbCgpOiBcImNsYXNzZXNcIiB8IFwicHJvcGVydGllc1wiIHwgXCJpbmRpdmlkdWFsc1wiIHtcbiAgICByZXR1cm4gXCJwcm9wZXJ0aWVzXCI7XG4gIH1cblxuICBnZXRQYXJlbnRzKCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI3N1YlByb3BlcnR5T2ZcIl1cbiAgICApO1xuICB9XG4gIGdldFN1cGVyRW50aXRpZXMoKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjc3ViUHJvcGVydHlPZlwiXVxuICAgICk7XG4gIH1cbiAgZ2V0RXF1aXZhbGVudHMoKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNlcXVpdmFsZW50UHJvcGVydHlcIl1cbiAgICApO1xuICB9XG5cblxuICBnZXREaXNqb2ludFdpdGgoKSB7XG5cdHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1snaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjcHJvcGVydHlEaXNqb2ludFdpdGgnXSlcbiAgfVxuXG4gIGdldEludmVyc2VPZigpIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNpbnZlcnNlT2ZcIl0pO1xuICB9XG5cbiAgZ2V0RG9tYWluKCkge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1snaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI2RvbWFpbiddKVxuICB9XG5cbiAgZ2V0UmFuZ2UoKSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzWydodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjcmFuZ2UnXSlcbiAgfVxuXG4gIGdldFByb3BlcnR5Q2hhaW5zKCk6UmVpZmllZDxhbnk+W10ge1xuXHRyZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuXHRcdHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI3Byb3BlcnR5Q2hhaW5BeGlvbVwiXVxuXHQpXG4gIH1cblxufVxuIiwgImltcG9ydCB7SW5kaXZpZHVhbH0gZnJvbSBcIi4uL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7T0xTM0VudGl0eX0gZnJvbSBcIi4vT0xTM0VudGl0eVwiO1xuXG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi4vUmVpZmllZFwiO1xuXG5pbXBvcnQgeyBhc0FycmF5IH0gZnJvbSBcIi4uLy4uL2FwcC91dGlsXCI7XG5cbmV4cG9ydCBjbGFzcyBPTFMzSW5kaXZpZHVhbCBleHRlbmRzIE9MUzNFbnRpdHkgaW1wbGVtZW50cyBJbmRpdmlkdWFse1xuXG4gIGdldFR5cGUoKTogXCJvbnRvbG9neVwiIHwgXCJjbGFzc1wiIHwgXCJwcm9wZXJ0eVwiIHwgXCJpbmRpdmlkdWFsXCIge1xuICAgIHJldHVybiBcImluZGl2aWR1YWxcIjtcbiAgfVxuXG4gIGdldFR5cGVQbHVyYWwoKTogXCJjbGFzc2VzXCIgfCBcInByb3BlcnRpZXNcIiB8IFwiaW5kaXZpZHVhbHNcIiB7XG4gICAgcmV0dXJuIFwiaW5kaXZpZHVhbHNcIjtcbiAgfVxuXG4gIGdldFBhcmVudHMoKSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImRpcmVjdFBhcmVudFwiXVxuICAgICk7XG4gIH1cbiAgZ2V0RXF1aXZhbGVudHMoKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGdldFN1cGVyRW50aXRpZXMoKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oW10pXG4gIH1cblxuICBnZXREaWZmZXJlbnRGcm9tKCkge1xuICAgIHJldHVybiBhc0FycmF5KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjZGlmZmVyZW50RnJvbVwiXVxuICAgICk7XG4gIH1cblxuICBnZXRTYW1lQXMoKSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjc2FtZUFzXCJdKTtcbiAgfVxuXG4gIGdldEluZGl2aWR1YWxUeXBlcygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgcmRmVHlwZXM6IGFueSA9IHRoaXMuZ2V0UmRmVHlwZXMoKTtcblxuICAgIGlmICghcmRmVHlwZXMgfHwgIUFycmF5LmlzQXJyYXkocmRmVHlwZXMpKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIHJkZlR5cGVzLmZpbHRlcihcbiAgICAgICh0OiBhbnkpID0+XG4gICAgICAgIHQgIT09IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjTmFtZWRJbmRpdmlkdWFsXCIgJiZcblx0XHQoICghICh0eXBlb2YgdCA9PT0gJ3N0cmluZycpIHx8ICF0LnN0YXJ0c1dpdGgoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjXCIpKSlcbiAgICApO1xuICB9XG59XG4iLCAiaW1wb3J0IHtPbnRvbG9neX0gZnJvbSBcIi4uL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7T0xTM1RoaW5nfSBmcm9tIFwiLi9PTFMzVGhpbmdcIjtcblxuaW1wb3J0IFJlaWZpZWQgZnJvbSBcIi4uL1JlaWZpZWRcIjtcblxuaW1wb3J0IHthc0FycmF5LCBkZUNhbWVsQ2FzZX0gZnJvbSBcIi4uLy4uL2FwcC91dGlsXCI7XG5cbmV4cG9ydCBjbGFzcyBPTFMzT250b2xvZ3kgZXh0ZW5kcyBPTFMzVGhpbmcgaW1wbGVtZW50cyBPbnRvbG9neXtcblxuICBnZXRUeXBlKCk6IFwib250b2xvZ3lcIiB8IFwiY2xhc3NcIiB8IFwicHJvcGVydHlcIiB8IFwiaW5kaXZpZHVhbFwiIHtcbiAgICByZXR1cm4gXCJvbnRvbG9neVwiO1xuICB9XG5cbiAgZ2V0VHlwZVBsdXJhbCgpOiBcIm9udG9sb2dpZXNcIiB8IFwiY2xhc3Nlc1wiIHwgXCJwcm9wZXJ0aWVzXCIgfCBcImluZGl2aWR1YWxzXCIge1xuICAgIHJldHVybiBcIm9udG9sb2dpZXNcIjtcbiAgfVxuXG4gIGdldE9udG9sb2d5SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wib250b2xvZ3lJZFwiXTtcbiAgfVxuICBnZXROYW1lKCk6IHN0cmluZyB7XG4gICAgY29uc3QgbmFtZXMgPSBSZWlmaWVkLmZyb21Kc29uPHN0cmluZz4oXG4gICAgICAgIHRoaXMucHJvcGVydGllc1tcImNvbmZpZ1wiXVtcInRpdGxlXCJdIHx8IFwiXCJcbiAgICApO1xuICAgIHJldHVybiAobmFtZXNbMF0gJiYgbmFtZXNbMF0udmFsdWUpIHx8IHRoaXMuZ2V0T250b2xvZ3lJZCgpO1xuICB9XG4gIGdldERlc2NyaXB0aW9uKCk6IHN0cmluZyB7XG4gICAgY29uc3QgZGVzY3JpcHRpb25zID0gUmVpZmllZC5mcm9tSnNvbjxzdHJpbmc+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiY29uZmlnXCJdW1wiZGVzY3JpcHRpb25cIl0gfHwgXCJcIlxuICAgICk7XG4gICAgcmV0dXJuIChkZXNjcmlwdGlvbnNbMF0gJiYgZGVzY3JpcHRpb25zWzBdLnZhbHVlKSB8fCBcIlwiO1xuICB9XG5cbiAgZ2V0Q3JlYXRvcnMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImNvbmZpZ1wiXVtcImFubm90YXRpb25zXCJdW1wiY3JlYXRvclwiXSk7XG4gIH1cblxuICBnZXRTb3VyY2VGaWxlVGltZXN0YW1wKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcInVwZGF0ZWRcIl07XG4gIH1cbiAgZ2V0TnVtRW50aXRpZXMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcGFyc2VJbnQodGhpcy5wcm9wZXJ0aWVzW1wibnVtYmVyT2ZFbnRpdGllc1wiXSk7XG4gIH1cbiAgZ2V0TnVtQ2xhc3NlcygpOiBudW1iZXIge1xuICAgIHJldHVybiBwYXJzZUludCh0aGlzLnByb3BlcnRpZXNbXCJudW1iZXJPZlRlcm1zXCJdKTtcbiAgfVxuICBnZXROdW1Qcm9wZXJ0aWVzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHBhcnNlSW50KHRoaXMucHJvcGVydGllc1tcIm51bWJlck9mUHJvcGVydGllc1wiXSk7XG4gIH1cbiAgZ2V0TnVtSW5kaXZpZHVhbHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcGFyc2VJbnQodGhpcy5wcm9wZXJ0aWVzW1wibnVtYmVyT2ZJbmRpdmlkdWFsc1wiXSk7XG4gIH1cbiAgZ2V0TG9nb1VSTCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJjb25maWdcIl1bXCJsb2dvXCJdIHx8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8vIHVzZWQgYXMgSVJJXG4gIGdldE9udG9sb2d5UHVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJjb25maWdcIl1bXCJpZFwiXTtcbiAgfVxuXG4gIGdldEhvbWVwYWdlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImNvbmZpZ1wiXVtcImhvbWVwYWdlXCJdO1xuICB9XG4gIGdldE1haWxpbmdMaXN0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImNvbmZpZ1wiXVtcIm1haWxpbmdMaXN0XCJdO1xuICB9XG4gIGdldFRyYWNrZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiY29uZmlnXCJdW1widHJhY2tlclwiXTtcbiAgfVxuICBnZXRWZXJzaW9uSXJpKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImNvbmZpZ1wiXVtcInZlcnNpb25JcmlcIl07XG4gIH1cbiAgZ2V0VmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJjb25maWdcIl1bXCJ2ZXJzaW9uXCJdO1xuICB9XG4gIGdldFZlcnNpb25Gcm9tSXJpKCk6IHN0cmluZyB7XG4gICAgY29uc3QgdmVyc2lvbklyaSA9IHRoaXMuZ2V0VmVyc2lvbklyaSgpO1xuICAgIGlmICghdmVyc2lvbklyaSkgcmV0dXJuIFwiXCI7XG4gICAgY29uc3QgdmVyc2lvbkZyb21EYXRlID0gdmVyc2lvbklyaS5tYXRjaCgvXFxkezR9LVxcZHsyfS1cXGR7Mn0vKTtcblxuICAgIGlmICh2ZXJzaW9uRnJvbURhdGUgJiYgdmVyc2lvbkZyb21EYXRlLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiB2ZXJzaW9uRnJvbURhdGVbMF07XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHZlcnNpb25Gcm9tTnVtYmVyID0gdmVyc2lvbklyaS5tYXRjaCgvXFwvdltkLl0uKlxcLy8pO1xuICAgICAgcmV0dXJuIHZlcnNpb25Gcm9tTnVtYmVyXG4gICAgICAgID8gdmVyc2lvbkZyb21OdW1iZXJbMF0ucmVwbGFjZUFsbChcIi9cIiwgXCJcIikucmVwbGFjZShcInZcIiwgXCJcIilcbiAgICAgICAgOiBcIlwiO1xuICAgIH1cbiAgfVxuICBnZXRMb2FkZWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wibG9hZGVkXCJdO1xuICB9XG5cbiAgLyoqIENhbiBiZSBqdXN0IGZvdW5kIHVuZGVyIGBwcm9wZXJ0aWVzW1wiY29uZmlnXCJdW1wiYW5ub3RhdGlvbnNcIl1gLlxuICAgKiAgTm90IHByZXNlbnQgaW4gb2xzNC9hcGksXG4gICAqICBidXQgaW4gc2VtYW50aWNsb29rdXAuemJtZWQuZGUvYXBpLlxuICAgKi9cbiAgZ2V0QW5ub3RhdGlvblByZWRpY2F0ZXMoKTogc3RyaW5nW10ge1xuICAgIGlmKHRoaXMucHJvcGVydGllc1tcImNvbmZpZ1wiXSAmJiB0aGlzLnByb3BlcnRpZXNbXCJjb25maWdcIl1bXCJhbm5vdGF0aW9uc1wiXSkge1xuICAgICAgLyogb2xzNCBleGNsdWRlcyBcImhhcyBwcmVmZXJyZWQgcm9vdCB0ZXJtXCIsXG4gICAgICAgcHJvcGVydGllcyB3aXRob3V0IGFuIElSSSBhbmQgYW55dGhpbmcgaW4gcmRmLCByZGZzIGFuZCBvd2wgbmFtZXNwYWNlcyxcbiAgICAgICBidXQgdGhpcyBpcyBub3QgcG9zc2libGUgaGVyZSBhcyB0aGUgbGFiZWxzIGFyZSBrZXlzIGhlcmUsIG5vdCB0aGUgSVJJJ3MgKi9cbiAgICAgIHJldHVybiBhc0FycmF5PHN0cmluZz4oT2JqZWN0LmtleXModGhpcy5wcm9wZXJ0aWVzW1wiY29uZmlnXCJdW1wiYW5ub3RhdGlvbnNcIl0pKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAvLyBcImFubm90YXRpb25zXCIga2V5IGlzIG5vdCBwcmVzZW50IGluIG9sczQvYXBpXG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9XG5cbiAgZ2V0QW5ub3RhdGlvblRpdGxlQnlJZChpZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZGVDYW1lbENhc2UoaWQpO1xuICB9XG5cbiAgZ2V0QW5ub3RhdGlvbkJ5SWQoaWQ6IHN0cmluZyk6UmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uKGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiY29uZmlnXCJdW1wiYW5ub3RhdGlvbnNcIl1baWRdKVxuICAgICAgICAuZmlsdGVyKChlbGVtKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHR5cGVvZiBlbGVtICE9PSBcInN0cmluZ1wiIHx8IGVsZW0gIT09IFwiXCJcbiAgICAgICAgfSlcbiAgICApXG4gIH1cblxuICBnZXRQcmVmZXJyZWRSb290cygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiaGFzUHJlZmVycmVkUm9vdFwiXSk7XG4gIH1cbiAgZ2V0TGFuZ3VhZ2VzKCk6IHN0cmluZ1tdIHtcbiAgICAvLyBub3QgYXZhaWxhYmxlIGluIHNlbWxvb2twIEFQSSwgYnV0IGluIGViaSBBUElcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJsYW5nXCJdKTtcbiAgfVxuXG4gIC8vIFRPRE86IG5vdCBhdmFpbGFibGU/XG4gIGdldEltcG9ydHNGcm9tKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICAvLyBUT0RPOiBub3QgYXZhaWxhYmxlP1xuICBnZXRFeHBvcnRzVG8oKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImV4cG9ydHNUb1wiXSk7XG4gIH1cbiAgZ2V0QWxsb3dEb3dubG9hZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJjb25maWdcIl1bXCJhbGxvd0Rvd25sb2FkXCJdO1xuICB9XG59XG4iLCAiaW1wb3J0IHtPbnRvbG9naWVzfSBmcm9tIFwiLi4vaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHtPTFMzT250b2xvZ3l9IGZyb20gXCIuL09MUzNPbnRvbG9neVwiO1xuXG5leHBvcnQgY2xhc3MgT0xTM09udG9sb2dpZXMgaW1wbGVtZW50cyBPbnRvbG9naWVzIHtcbiAgcHJvcGVydGllczogT0xTM09udG9sb2d5W107XG5cbiAgY29uc3RydWN0b3IocHJvcGVydGllczogT0xTM09udG9sb2d5W10pIHtcbiAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzO1xuICB9XG5cbiAgZ2V0VG90YWxPbnRvbG9naWVzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllcy5sZW5ndGg7XG4gIH1cblxuICBnZXROdW1FbnRpdGllcygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXMucmVkdWNlKCh0b3RhbCwgb250b2xvZ3kpID0+IHRvdGFsICsgb250b2xvZ3kuZ2V0TnVtRW50aXRpZXMoKSwgMCk7XG4gIH1cblxuICBnZXROdW1DbGFzc2VzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllcy5yZWR1Y2UoKHRvdGFsLCBvbnRvbG9neSkgPT4gdG90YWwgKyBvbnRvbG9neS5nZXROdW1DbGFzc2VzKCksIDApO1xuICB9XG5cbiAgZ2V0TnVtUHJvcGVydGllcygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXMucmVkdWNlKCh0b3RhbCwgb250b2xvZ3kpID0+IHRvdGFsICsgb250b2xvZ3kuZ2V0TnVtUHJvcGVydGllcygpLCAwKTtcbiAgfVxuXG4gIGdldE51bUluZGl2aWR1YWxzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllcy5yZWR1Y2UoKHRvdGFsLCBvbnRvbG9neSkgPT4gdG90YWwgKyBvbnRvbG9neS5nZXROdW1JbmRpdmlkdWFscygpLCAwKTtcbiAgfVxufVxuIiwgImltcG9ydCB7VGhpbmd9IGZyb20gXCIuLi9pbnRlcmZhY2VzXCI7XG5cbmltcG9ydCBMaW5rZWRFbnRpdGllcyBmcm9tIFwiLi4vTGlua2VkRW50aXRpZXNcIjtcbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuLi9SZWlmaWVkXCI7XG5cbmltcG9ydCB7IGFzQXJyYXkgfSBmcm9tIFwiLi4vLi4vYXBwL3V0aWxcIjtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE9MUzRUaGluZyBpbXBsZW1lbnRzIFRoaW5nIHtcbiAgcHJvcGVydGllczogYW55O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BlcnRpZXM6IGFueSkge1xuICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG4gIH1cblxuICBnZXRMYWJlbCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJsYWJlbFwiXTtcbiAgfVxuXG4gIC8vIFRPRE86IElzIGN1cmllIC8gb2JvX2lkIG1lYW50P1xuICBnZXRJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJpZFwiXTtcbiAgfVxuXG4gIGdldElyaSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJpcmlcIl07XG4gIH1cblxuICBnZXRUeXBlKCk6IFwib250b2xvZ3lcIiB8IFwiY2xhc3NcIiB8IFwicHJvcGVydHlcIiB8IFwiaW5kaXZpZHVhbFwiIHtcbiAgICBjb25zdCB0eXBlcyA9IHRoaXMucHJvcGVydGllc1tcInR5cGVcIl0gYXMgc3RyaW5nW107XG5cbiAgICBmb3IgKGNvbnN0IHR5cGUgb2YgdHlwZXMpIHtcbiAgICAgIGlmIChcbiAgICAgICAgW1wib250b2xvZ3lcIiwgXCJjbGFzc1wiLCBcInByb3BlcnR5XCIsIFwiaW5kaXZpZHVhbFwiXS5pbmRleE9mKHR5cGUpICE9PSAtMVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB0eXBlIGFzIGFueTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIHR5cGVcIik7XG4gIH1cblxuICBnZXRUeXBlUGx1cmFsKCk6IFwib250b2xvZ2llc1wiIHwgXCJjbGFzc2VzXCIgfCBcInByb3BlcnRpZXNcIiB8IFwiaW5kaXZpZHVhbHNcIiB8IFwiZW50aXRpZXNcIiB7XG4gICAgY29uc3QgdHlwZSA9IHRoaXMuZ2V0VHlwZSgpO1xuXG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIFwib250b2xvZ3lcIjpcbiAgICAgICAgcmV0dXJuIFwib250b2xvZ2llc1wiO1xuICAgICAgY2FzZSBcImNsYXNzXCI6XG4gICAgICAgIHJldHVybiBcImNsYXNzZXNcIjtcbiAgICAgIGNhc2UgXCJwcm9wZXJ0eVwiOlxuICAgICAgICByZXR1cm4gXCJwcm9wZXJ0aWVzXCI7XG4gICAgICBjYXNlIFwiaW5kaXZpZHVhbFwiOlxuICAgICAgICByZXR1cm4gXCJpbmRpdmlkdWFsc1wiO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidW5rbm93biB0eXBlXCIpO1xuICAgIH1cbiAgfVxuXG4gIGdldFJkZlR5cGVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXG4gICAgICBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyN0eXBlXCJcbiAgICBdKVxuICB9XG5cbiAgZ2V0TmFtZSgpOiBzdHJpbmcge1xuXHRyZXR1cm4gdGhpcy5nZXROYW1lcygpWzBdO1xuICB9XG5cbiAgZ2V0TmFtZXMoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGxhYmVscyA9IFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImxhYmVsXCJdXG4gICAgKTtcbiAgICBpZiAobGFiZWxzICYmIGxhYmVscy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gbGFiZWxzLm1hcChsYWJlbCA9PiBsYWJlbC52YWx1ZSlcbiAgICB9XG4gICAgcmV0dXJuIFt0aGlzLmdldElyaSgpXTtcbiAgfVxuXG4gIGdldERlc2NyaXB0aW9uKCk6IHN0cmluZyB7XG4gICAgY29uc3QgZGVmaW5pdGlvbiA9IFJlaWZpZWQuZnJvbUpzb248YW55Pih0aGlzLnByb3BlcnRpZXNbXCJkZWZpbml0aW9uXCJdKTtcbiAgICBpZiAoZGVmaW5pdGlvbiAmJiBkZWZpbml0aW9uLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBkZWZpbml0aW9uLm1hcCgoZGVmKSA9PiBkZWYudmFsdWUgfHwgXCJcIikuam9pbihcIiBcIik7XG4gICAgfVxuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgZ2V0T250b2xvZ3lJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJvbnRvbG9neUlkXCJdO1xuICB9XG5cbiAgZ2V0TGFiZWxGb3JJcmkoaWQ6IHN0cmluZykge1xuICAgIGNvbnN0IGxpbmtlZEVudGl0aWVzID0gdGhpcy5wcm9wZXJ0aWVzW1wibGlua2VkRW50aXRpZXNcIl07XG4gICAgaWYgKGxpbmtlZEVudGl0aWVzKSB7XG4gICAgICBjb25zdCBsYWJlbDpSZWlmaWVkPHN0cmluZz5bXSA9IFJlaWZpZWQuZnJvbUpzb248c3RyaW5nPiggbGlua2VkRW50aXRpZXNbaWRdPy5sYWJlbCApO1xuICAgICAgcmV0dXJuIGxhYmVsWzBdPy52YWx1ZSB8fCBpZFxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gaWQ7XG4gICAgfVxuICB9XG5cbiAgYWJzdHJhY3QgZ2V0QW5ub3RhdGlvblByZWRpY2F0ZXMoKTogc3RyaW5nW107XG5cbiAgZ2V0QW5ub3RhdGlvbkJ5SWQoaWQ6IHN0cmluZyk6UmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uKGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW2lkXSkpXG4gIH1cblxuICBnZXRBbm5vdGF0aW9uVGl0bGVCeUlkKGlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExhYmVsRm9ySXJpKGlkKTtcbiAgfVxuXG4gIGdldExpbmtlZEVudGl0aWVzKCk6IExpbmtlZEVudGl0aWVzIHtcbiAgICByZXR1cm4gbmV3IExpbmtlZEVudGl0aWVzKHRoaXMucHJvcGVydGllc1tcImxpbmtlZEVudGl0aWVzXCJdIHx8IHt9KTtcbiAgfVxufVxuIiwgImltcG9ydCB7RW50aXR5fSBmcm9tIFwiLi4vaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHtPTFM0VGhpbmd9IGZyb20gXCIuL09MUzRUaGluZ1wiO1xuXG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi4vUmVpZmllZFwiO1xuXG5pbXBvcnQgeyBhc0FycmF5IH0gZnJvbSBcIi4uLy4uL2FwcC91dGlsXCI7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBPTFM0RW50aXR5IGV4dGVuZHMgT0xTNFRoaW5nIGltcGxlbWVudHMgRW50aXR5e1xuICBhYnN0cmFjdCBnZXRQYXJlbnRzKCk6IFJlaWZpZWQ8YW55PltdO1xuICBhYnN0cmFjdCBnZXRTdXBlckVudGl0aWVzKCk6IFJlaWZpZWQ8YW55PltdO1xuICBhYnN0cmFjdCBnZXRFcXVpdmFsZW50cygpOiBSZWlmaWVkPGFueT5bXTtcblxuICBpc0Nhbm9uaWNhbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaXNEZWZpbmluZ09udG9sb2d5XCJdID09PSB0cnVlO1xuICB9XG5cbiAgaXNEZXByZWNhdGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNkZXByZWNhdGVkXCJdID09PSBcInRydWVcIlxuICAgICk7XG4gIH1cblxuICBnZXREZXByZWNhdGlvblZlcnNpb24oKTogc3RyaW5nIHtcbiAgICAvLyBvbmx5IHN1cHBvcnRzIEVGTyBmb3Igbm93XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cuZWJpLmFjLnVrL2Vmby9vYnNvbGV0ZWRfaW5fdmVyc2lvblwiXTtcbiAgfVxuXG4gIGdldERlcHJlY2F0aW9uUmVhc29uKCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3B1cmwub2JvbGlicmFyeS5vcmcvb2JvL0lBT18wMDAwMjMxXCJdXG4gICAgKS5jb25jYXQoXG4gICAgICBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cuZWJpLmFjLnVrL2Vmby9yZWFzb25fZm9yX29ic29sZXNjZW5jZVwiXVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBnZXREZXByZWNhdGlvblJlcGxhY2VtZW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly9wdXJsLm9ib2xpYnJhcnkub3JnL29iby9JQU9fMDEwMDAwMVwiXTtcbiAgfVxuXG4gIGdldFJlbGF0ZWRGcm9tKCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KHRoaXMucHJvcGVydGllc1tcInJlbGF0ZWRGcm9tXCJdKTtcbiAgfVxuXG4gIGdldERlc2NyaXB0aW9uQXNBcnJheSgpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55Pih0aGlzLnByb3BlcnRpZXNbXCJkZWZpbml0aW9uXCJdKTtcbiAgfVxuXG4gIGhhc0RpcmVjdENoaWxkcmVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJoYXNEaXJlY3RDaGlsZHJlblwiXSA9PT0gXCJ0cnVlXCI7XG4gIH1cblxuICBoYXNIaWVyYXJjaGljYWxDaGlsZHJlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaGFzSGllcmFyY2hpY2FsQ2hpbGRyZW5cIl0gPT09IFwidHJ1ZVwiO1xuICB9XG5cbiAgaGFzQ2hpbGRyZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzRGlyZWN0Q2hpbGRyZW4oKSB8fCB0aGlzLmhhc0hpZXJhcmNoaWNhbENoaWxkcmVuKCk7XG4gIH1cblxuICBnZXRBbmNlc3RvcklyaXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImFuY2VzdG9yXCJdKTtcbiAgfVxuXG4gIGdldEhpZXJhcmNoaWNhbEFuY2VzdG9ySXJpcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiaGllcmFyY2hpY2FsQW5jZXN0b3JcIl0pO1xuICB9XG5cbiAgZ2V0U3lub255bXMoKSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55Pih0aGlzLnByb3BlcnRpZXNbXCJzeW5vbnltXCJdKTtcbiAgfVxuXG4gIGdldEFwcGVhcnNJbigpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuICh0aGlzLnByb3BlcnRpZXNbXCJhcHBlYXJzSW5cIl0gfHwgW10pIGFzIHN0cmluZ1tdO1xuICB9XG5cbiAgZ2V0Q3Jvc3NSZWZlcmVuY2VzKCk6IGFueVtdIHtcbiAgICByZXR1cm4gKHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cuZ2VuZW9udG9sb2d5Lm9yZy9mb3JtYXRzL29ib0luT3dsI2hhc0RiWHJlZlwiXSB8fCBbXSkgYXMgc3RyaW5nW107XG4gIH1cblxuICBnZXREZWZpbmVkQnkoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiAodGhpcy5wcm9wZXJ0aWVzW1wiZGVmaW5lZEJ5XCJdIHx8IFtdKSBhcyBzdHJpbmdbXTtcbiAgfVxuXG4gIGdldElzRGVmaW5pbmdPbnRvbG9neSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKHRoaXMucHJvcGVydGllc1tcImlzX2RlZmluaW5nX29udG9sb2d5XCJdIHx8IHVuZGVmaW5lZCApIGFzIGJvb2xlYW47XG4gIH1cblxuICBnZXRTaG9ydEZvcm0oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiY3VyaWVcIl0gfHwgdGhpcy5wcm9wZXJ0aWVzW1wic2hvcnRGb3JtXCJdO1xuICB9XG5cbiAgZ2V0RGVwaWN0ZWRCeSgpOiBSZWlmaWVkPHN0cmluZz5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248c3RyaW5nPihcbiAgICAgIFsgLi4uYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8veG1sbnMuY29tL2ZvYWYvMC4xL2RlcGljdGVkX2J5XCJdIHx8IFtdKSxcbiAgICAgICAgLi4uYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8veG1sbnMuY29tL2ZvYWYvMC4xL2RlcGljdGlvblwiXSB8fCBbXSkgXVxuICAgICk7XG4gIH1cblxuICBpc1ByZWRpY2F0ZUZyb21JbmZvcm1hbFZvY2FidWxhcnkocHJlZGljYXRlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gcHJlZGljYXRlLnN0YXJ0c1dpdGgoXCJodHRwOi8vd3d3LnczLm9yZy8yMDA0LzAyL3Nrb3MvY29yZSNcIikgfHxcbiAgICAgICAgcHJlZGljYXRlLnN0YXJ0c1dpdGgoXCJodHRwOi8vcHVybC5vcmcvZGMvdGVybXMvXCIpIHx8XG4gICAgICAgIHByZWRpY2F0ZS5zdGFydHNXaXRoKFwiaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS9cIikgfHxcbiAgICAgICAgcHJlZGljYXRlLnN0YXJ0c1dpdGgoXCJodHRwOi8vc2NoZW1hLm9yZy9cIilcbiAgfVxuICBnZXRBbm5vdGF0aW9uUHJlZGljYXRlcygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgZGVmaW5pdGlvblByb3BlcnRpZXMgPSBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImRlZmluaXRpb25Qcm9wZXJ0eVwiXSk7XG4gICAgY29uc3Qgc3lub255bVByb3BlcnRpZXMgPSBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcInN5bm9ueW1Qcm9wZXJ0eVwiXSk7XG4gICAgY29uc3QgaGllcmFyY2hpY2FsUHJvcGVydGllcyA9IGFzQXJyYXkoXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJoaWVyYXJjaGljYWxQcm9wZXJ0eVwiXVxuICAgICk7XG4gICAgY29uc3QgYW5ub3RhdGlvblByZWRpY2F0ZXMgPSBuZXcgU2V0KCk7XG5cbiAgICBmb3IgKGNvbnN0IHByZWRpY2F0ZSBvZiBPYmplY3Qua2V5cyh0aGlzLnByb3BlcnRpZXMpKSB7XG4gICAgICAvLyBwcm9wZXJ0aWVzIHdpdGhvdXQgYW4gSVJJIGFyZSB0aGluZ3MgdGhhdCB3ZXJlIGFkZGVkIGJ5IHJkZjJqc29uIHNvIHNob3VsZCBub3RcbiAgICAgIC8vIGJlIGluY2x1ZGVkIGFzIGFubm90YXRpb25zXG4gICAgICBpZiAocHJlZGljYXRlLmluZGV4T2YoXCI6Ly9cIikgPT09IC0xKSBjb250aW51ZTtcblxuICAgICAgLy8gdGhpcyBpcyBoYW5kbGVkIGV4cGxpY2l0bHkgaW4gRW50aXR5UGFnZVxuICAgICAgaWYgKHByZWRpY2F0ZS5zdGFydHNXaXRoKFwibmVnYXRpdmVQcm9wZXJ0eUFzc2VydGlvbitcIikpIGNvbnRpbnVlO1xuXG4gICAgICAvLyB0aGlzIGlzIGhhbmRsZWQgZXhwbGljaXRseSBpbiBFbnRpdHlQYWdlXG4gICAgICBpZiAocHJlZGljYXRlID09PSBcImh0dHA6Ly94bWxucy5jb20vZm9hZi8wLjEvZGVwaWN0ZWRfYnlcIikgY29udGludWU7XG4gICAgICBpZiAocHJlZGljYXRlID09PSBcImh0dHA6Ly94bWxucy5jb20vZm9hZi8wLjEvZGVwaWN0aW9uXCIpIGNvbnRpbnVlO1xuXG4gICAgICAvLyBPYmplY3QgcHJvcGVydGllcyBhbmQgZGF0YSBwcm9wZXJ0aWVzIGFyZSBub3QgYW5ub3RhdGlvbiBwcm9wZXJ0aWVzLCBleGNlcHQgaW4gdGhlIGNhc2Ugb2YgaW5mb3JtYWwgdm9jYWJ1bGFyaWVzLlxuICAgICAgaWYgKCF0aGlzLmlzUHJlZGljYXRlRnJvbUluZm9ybWFsVm9jYWJ1bGFyeShwcmVkaWNhdGUpKSB7XG4gICAgICAgIGNvbnN0IGxpbmtlZEVudGl0eSA9IHRoaXMuZ2V0TGlua2VkRW50aXRpZXMoKS5nZXQocHJlZGljYXRlKVxuICAgICAgICBpZiAobGlua2VkRW50aXR5ICE9IHVuZGVmaW5lZCAmJiBsaW5rZWRFbnRpdHkudHlwZS5pbmRleE9mKFwib2JqZWN0UHJvcGVydHlcIikgIT09IC0xKSBjb250aW51ZTtcbiAgICAgICAgaWYgKGxpbmtlZEVudGl0eSAhPSB1bmRlZmluZWQgJiYgbGlua2VkRW50aXR5LnR5cGUuaW5kZXhPZihcImRhdGFQcm9wZXJ0eVwiKSAhPT0gLTEpIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiB0aGUgdmFsdWUgd2FzIGFscmVhZHkgaW50ZXJwcmV0ZWQgYXMgZGVmaW5pdGlvbi9zeW5vbnltL2hpZXJhcmNoaWNhbCwgZG9cbiAgICAgIC8vIG5vdCBpbmNsdWRlIGl0IGFzIGFuIGFubm90YXRpb25cbiAgICAgIGlmIChcbiAgICAgICAgZGVmaW5pdGlvblByb3BlcnRpZXMuaW5kZXhPZihwcmVkaWNhdGUpICE9PSAtMSB8fFxuICAgICAgICBzeW5vbnltUHJvcGVydGllcy5pbmRleE9mKHByZWRpY2F0ZSkgIT09IC0xIHx8XG4gICAgICAgIGhpZXJhcmNoaWNhbFByb3BlcnRpZXMuaW5kZXhPZihwcmVkaWNhdGUpICE9PSAtMVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBhbnl0aGluZyBpbiB0aGUgcmRmLCByZGZzLCBvd2wgbmFtZXNwYWNlcyBhcmVuJ3QgZGlzcGxheWVkIGluIHRoZSBhbm5vdGF0aW9ucyBzZWN0aW9uLi4uXG4gICAgICBpZiAoXG4gICAgICAgIHByZWRpY2F0ZS5zdGFydHNXaXRoKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI1wiKSB8fFxuICAgICAgICBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyNcIikgfHxcbiAgICAgICAgcHJlZGljYXRlLnN0YXJ0c1dpdGgoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNcIilcbiAgICAgICkge1xuICAgICAgICAvLyAuLi5hcGFydCBmcm9tIHRoZXNlIG9uZXNcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHByZWRpY2F0ZSAhPT0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjY29tbWVudFwiICYmXG4gICAgICAgICAgcHJlZGljYXRlICE9PSBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNzZWVBbHNvXCIgJiZcbiAgICAgICAgICAvLyBwcmVkaWNhdGUgIT09IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjaGFzS2V5XCIgJiZcbiAgICAgICAgICBwcmVkaWNhdGUgIT09IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjZGlzam9pbnRVbmlvbk9mXCJcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gd2hpbGUgaW4gZ2VuZXJhbCBvYm9Jbk93bCBuYW1lc3BhY2UgcHJvcGVydGllcyBhcmUgYW5ub3RhdGlvbnMsIHNvbWVcbiAgICAgIC8vIG9mIHRoZW0gd2UgZG9uJ3Qgd2FudCB0byBkaXNwbGF5XG4gICAgICAvL1xuICAgICAgaWYgKFxuICAgICAgICBwcmVkaWNhdGUgPT09IFwiaHR0cDovL3d3dy5nZW5lb250b2xvZ3kub3JnL2Zvcm1hdHMvb2JvSW5Pd2wjaW5TdWJzZXRcIiB8fFxuICAgICAgICBwcmVkaWNhdGUgPT09IFwiaHR0cDovL3d3dy5nZW5lb250b2xvZ3kub3JnL2Zvcm1hdHMvb2JvSW5Pd2wjaWRcIlxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBhbm5vdGF0aW9uUHJlZGljYXRlcy5hZGQocHJlZGljYXRlKTtcbiAgICB9XG5cbiAgICAvLyBjb25zb2xlLmxvZyhcIkFQc1wiKTtcbiAgICAvLyBjb25zb2xlLmRpcihBcnJheS5mcm9tKGFubm90YXRpb25QcmVkaWNhdGVzKSk7XG5cbiAgICByZXR1cm4gQXJyYXkuZnJvbShhbm5vdGF0aW9uUHJlZGljYXRlcykgYXMgc3RyaW5nW107XG4gIH1cblxuICBnZXROdW1IaWVyYXJjaGljYWxEZXNjZW5kYW50cygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJudW1IaWVyYXJjaGljYWxEZXNjZW5kYW50c1wiXVxuICAgICAgPyBwYXJzZUludCh0aGlzLnByb3BlcnRpZXNbXCJudW1IaWVyYXJjaGljYWxEZXNjZW5kYW50c1wiXSlcbiAgICAgIDogMDtcbiAgfVxuXG4gIGdldE51bURlc2NlbmRhbnRzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcIm51bURlc2NlbmRhbnRzXCJdXG4gICAgICA/IHBhcnNlSW50KHRoaXMucHJvcGVydGllc1tcIm51bURlc2NlbmRhbnRzXCJdKVxuICAgICAgOiAwO1xuICB9XG5cbiAgZ2V0SGllcmFyY2hpY2FsUGFyZW50UmVpZmljYXRpb25BeGlvbXMocGFyZW50SXJpOiBzdHJpbmcpOiBhbnkge1xuICAgIGNvbnN0IGhpZXJhcmNoaWNhbFBhcmVudHMgPSBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJoaWVyYXJjaGljYWxQYXJlbnRcIl1cbiAgICApO1xuXG4gICAgZm9yIChjb25zdCBwIG9mIGhpZXJhcmNoaWNhbFBhcmVudHMpIHtcbiAgICAgIGlmIChwLnZhbHVlID09PSBwYXJlbnRJcmkpIHtcbiAgICAgICAgcmV0dXJuIHAuZ2V0TWV0YWRhdGEoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAgIGdldFR5cGVQbHVyYWwoKTogXCJjbGFzc2VzXCIgfCBcInByb3BlcnRpZXNcIiB8IFwiaW5kaXZpZHVhbHNcIiB8IFwiZW50aXRpZXNcIiB7XG4gICAgICBjb25zdCB0eXBlID0gdGhpcy5nZXRUeXBlKCk7XG5cbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgXCJjbGFzc1wiOlxuICAgICAgICByZXR1cm4gXCJjbGFzc2VzXCI7XG4gICAgICBjYXNlIFwicHJvcGVydHlcIjpcbiAgICAgICAgcmV0dXJuIFwicHJvcGVydGllc1wiO1xuICAgICAgY2FzZSBcImluZGl2aWR1YWxcIjpcbiAgICAgICAgcmV0dXJuIFwiaW5kaXZpZHVhbHNcIjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcInVua25vd24gdHlwZVwiKTtcbiAgICB9XG4gIH1cbn1cbiIsICJpbXBvcnQge0NsYXNzfSBmcm9tIFwiLi4vaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHtPTFM0RW50aXR5fSBmcm9tIFwiLi9PTFM0RW50aXR5XCI7XG5cbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuLi9SZWlmaWVkXCI7XG5cbmltcG9ydCB7IGFzQXJyYXkgfSBmcm9tIFwiLi4vLi4vYXBwL3V0aWxcIjtcblxuZXhwb3J0IGNsYXNzIE9MUzRDbGFzcyBleHRlbmRzIE9MUzRFbnRpdHkgaW1wbGVtZW50cyBDbGFzcyB7XG4gIGdldFBhcmVudHMoKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJoaWVyYXJjaGljYWxQYXJlbnRcIl1cbiAgICApO1xuICB9XG4gIGdldFN1cGVyRW50aXRpZXMoKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjc3ViQ2xhc3NPZlwiXVxuICAgICk7XG4gIH1cbiAgZ2V0RXF1aXZhbGVudHMoKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNlcXVpdmFsZW50Q2xhc3NcIl1cbiAgICApO1xuICB9XG5cbiAgZ2V0RGlzam9pbnRXaXRoKCkge1xuXHRyZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbJ2h0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2Rpc2pvaW50V2l0aCddKTtcbiAgfVxuXG4gIGdldEhhc0tleSgpIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbJ2h0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2hhc0tleSddKTtcbiAgfVxuXG4gIGdldFN1YnNldHMoKTogYW55W10ge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cuZ2VuZW9udG9sb2d5Lm9yZy9mb3JtYXRzL29ib0luT3dsI2luU3Vic2V0XCJdKSB8fCBbXTtcbiAgfVxufVxuIiwgImltcG9ydCB7UHJvcGVydHl9IGZyb20gXCIuLi9pbnRlcmZhY2VzXCI7XG5pbXBvcnQge09MUzRFbnRpdHl9IGZyb20gXCIuL09MUzRFbnRpdHlcIjtcblxuaW1wb3J0IFJlaWZpZWQgZnJvbSBcIi4uL1JlaWZpZWRcIjtcblxuaW1wb3J0IHsgYXNBcnJheSB9IGZyb20gXCIuLi8uLi9hcHAvdXRpbFwiO1xuXG5leHBvcnQgY2xhc3MgT0xTNFByb3BlcnR5IGV4dGVuZHMgT0xTNEVudGl0eSBpbXBsZW1lbnRzIFByb3BlcnR5e1xuICBnZXRQYXJlbnRzKCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI3N1YlByb3BlcnR5T2ZcIl1cbiAgICApO1xuICB9XG4gIGdldFN1cGVyRW50aXRpZXMoKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjc3ViUHJvcGVydHlPZlwiXVxuICAgICk7XG4gIH1cbiAgZ2V0RXF1aXZhbGVudHMoKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNlcXVpdmFsZW50UHJvcGVydHlcIl1cbiAgICApO1xuICB9XG5cblxuICBnZXREaXNqb2ludFdpdGgoKSB7XG5cdHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1snaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjcHJvcGVydHlEaXNqb2ludFdpdGgnXSlcbiAgfVxuXG4gIGdldEludmVyc2VPZigpIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNpbnZlcnNlT2ZcIl0pO1xuICB9XG5cbiAgZ2V0RG9tYWluKCkge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1snaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI2RvbWFpbiddKVxuICB9XG5cbiAgZ2V0UmFuZ2UoKSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzWydodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjcmFuZ2UnXSlcbiAgfVxuXG4gIGdldFByb3BlcnR5Q2hhaW5zKCk6UmVpZmllZDxhbnk+W10ge1xuXHRyZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuXHRcdHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI3Byb3BlcnR5Q2hhaW5BeGlvbVwiXVxuXHQpXG4gIH1cblxufVxuIiwgImltcG9ydCB7SW5kaXZpZHVhbH0gZnJvbSBcIi4uL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7T0xTNEVudGl0eX0gZnJvbSBcIi4vT0xTNEVudGl0eVwiO1xuXG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi4vUmVpZmllZFwiO1xuXG5pbXBvcnQgeyBhc0FycmF5IH0gZnJvbSBcIi4uLy4uL2FwcC91dGlsXCI7XG5cbmV4cG9ydCBjbGFzcyBPTFM0SW5kaXZpZHVhbCBleHRlbmRzIE9MUzRFbnRpdHkgaW1wbGVtZW50cyBJbmRpdmlkdWFse1xuICBnZXRQYXJlbnRzKCkge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJkaXJlY3RQYXJlbnRcIl1cbiAgICApO1xuICB9XG4gIGdldEVxdWl2YWxlbnRzKCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBnZXRTdXBlckVudGl0aWVzKCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFtdKVxuICB9XG5cbiAgZ2V0RGlmZmVyZW50RnJvbSgpIHtcbiAgICByZXR1cm4gYXNBcnJheShcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2RpZmZlcmVudEZyb21cIl1cbiAgICApO1xuICB9XG5cbiAgZ2V0U2FtZUFzKCkge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI3NhbWVBc1wiXSk7XG4gIH1cblxuICBnZXRJbmRpdmlkdWFsVHlwZXMoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHJkZlR5cGVzOiBhbnkgPSB0aGlzLmdldFJkZlR5cGVzKCk7XG5cbiAgICBpZiAoIXJkZlR5cGVzIHx8ICFBcnJheS5pc0FycmF5KHJkZlR5cGVzKSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHJldHVybiByZGZUeXBlcy5maWx0ZXIoXG4gICAgICAodDogYW55KSA9PlxuICAgICAgICB0ICE9PSBcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI05hbWVkSW5kaXZpZHVhbFwiICYmXG5cdFx0KCAoISAodHlwZW9mIHQgPT09ICdzdHJpbmcnKSB8fCAhdC5zdGFydHNXaXRoKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI1wiKSkpXG4gICAgKTtcbiAgfVxuXG59XG4iLCAiaW1wb3J0IHtPbnRvbG9neX0gZnJvbSBcIi4uL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7T0xTNFRoaW5nfSBmcm9tIFwiLi9PTFM0VGhpbmdcIjtcblxuaW1wb3J0IFJlaWZpZWQgZnJvbSBcIi4uL1JlaWZpZWRcIjtcblxuaW1wb3J0IHsgYXNBcnJheSB9IGZyb20gXCIuLi8uLi9hcHAvdXRpbFwiO1xuXG5leHBvcnQgY2xhc3MgT0xTNE9udG9sb2d5IGV4dGVuZHMgT0xTNFRoaW5nIGltcGxlbWVudHMgT250b2xvZ3l7XG4gIGdldE9udG9sb2d5SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wib250b2xvZ3lJZFwiXTtcbiAgfVxuICBnZXROYW1lKCk6IHN0cmluZyB7XG4gICAgY29uc3QgbmFtZXMgPSBSZWlmaWVkLmZyb21Kc29uPHN0cmluZz4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJsYWJlbFwiXSB8fCB0aGlzLnByb3BlcnRpZXNbXCJ0aXRsZVwiXSB8fCBcIlwiXG4gICAgKTtcbiAgICByZXR1cm4gKG5hbWVzWzBdICYmIG5hbWVzWzBdLnZhbHVlKSB8fCB0aGlzLmdldE9udG9sb2d5SWQoKTtcbiAgfVxuICBnZXREZXNjcmlwdGlvbigpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRlc2NyaXB0aW9ucyA9IFJlaWZpZWQuZnJvbUpzb248c3RyaW5nPihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImRlZmluaXRpb25cIl0gfHwgdGhpcy5wcm9wZXJ0aWVzW1wiZGVzY3JpcHRpb25cIl0gfHwgXCJcIlxuICAgICk7XG4gICAgcmV0dXJuIChkZXNjcmlwdGlvbnNbMF0gJiYgZGVzY3JpcHRpb25zWzBdLnZhbHVlKSB8fCBcIlwiO1xuICB9XG5cbiAgZ2V0Q3JlYXRvcnMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvY3JlYXRvclwiXSk7XG4gIH1cblxuICBnZXRTb3VyY2VGaWxlVGltZXN0YW1wKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcInNvdXJjZUZpbGVUaW1lc3RhbXBcIl07XG4gIH1cbiAgZ2V0TnVtRW50aXRpZXMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcGFyc2VJbnQodGhpcy5wcm9wZXJ0aWVzW1wibnVtYmVyT2ZFbnRpdGllc1wiXSk7XG4gIH1cbiAgZ2V0TnVtQ2xhc3NlcygpOiBudW1iZXIge1xuICAgIHJldHVybiBwYXJzZUludCh0aGlzLnByb3BlcnRpZXNbXCJudW1iZXJPZkNsYXNzZXNcIl0pO1xuICB9XG4gIGdldE51bVByb3BlcnRpZXMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcGFyc2VJbnQodGhpcy5wcm9wZXJ0aWVzW1wibnVtYmVyT2ZQcm9wZXJ0aWVzXCJdKTtcbiAgfVxuICBnZXROdW1JbmRpdmlkdWFscygpOiBudW1iZXIge1xuICAgIHJldHVybiBwYXJzZUludCh0aGlzLnByb3BlcnRpZXNbXCJudW1iZXJPZkluZGl2aWR1YWxzXCJdKTtcbiAgfVxuICBnZXRMb2dvVVJMKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImRlcGljdGVkX2J5XCJdIHx8IHVuZGVmaW5lZDtcbiAgfVxuICBnZXRPbnRvbG9neVB1cmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wib250b2xvZ3lfcHVybFwiXTtcbiAgfVxuICBnZXRIb21lcGFnZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJob21lcGFnZVwiXTtcbiAgfVxuICBnZXRNYWlsaW5nTGlzdCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJtYWlsaW5nX2xpc3RcIl07XG4gIH1cbiAgZ2V0VHJhY2tlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJ0cmFja2VyXCJdO1xuICB9XG4gIGdldFZlcnNpb25JcmkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjdmVyc2lvbklSSVwiXTtcbiAgfVxuICBnZXRWZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI3ZlcnNpb25JbmZvXCJdO1xuICB9XG4gIGdldFZlcnNpb25Gcm9tSXJpKCk6IHN0cmluZyB7XG4gICAgY29uc3QgdmVyc2lvbklyaSA9IHRoaXMuZ2V0VmVyc2lvbklyaSgpO1xuICAgIGlmICghdmVyc2lvbklyaSkgcmV0dXJuIFwiXCI7XG4gICAgY29uc3QgdmVyc2lvbkZyb21EYXRlID0gdmVyc2lvbklyaS5tYXRjaCgvXFxkezR9LVxcZHsyfS1cXGR7Mn0vKTtcblxuICAgIGlmICh2ZXJzaW9uRnJvbURhdGUgJiYgdmVyc2lvbkZyb21EYXRlLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiB2ZXJzaW9uRnJvbURhdGVbMF07XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHZlcnNpb25Gcm9tTnVtYmVyID0gdmVyc2lvbklyaS5tYXRjaCgvXFwvdltkLl0uKlxcLy8pO1xuICAgICAgcmV0dXJuIHZlcnNpb25Gcm9tTnVtYmVyXG4gICAgICAgID8gdmVyc2lvbkZyb21OdW1iZXJbMF0ucmVwbGFjZUFsbChcIi9cIiwgXCJcIikucmVwbGFjZShcInZcIiwgXCJcIilcbiAgICAgICAgOiBcIlwiO1xuICAgIH1cbiAgfVxuICBnZXRMb2FkZWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wibG9hZGVkXCJdO1xuICB9XG4gIGdldEFubm90YXRpb25QcmVkaWNhdGVzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBhbm5vdGF0aW9uUHJlZGljYXRlcyA9IG5ldyBTZXQoKTtcblxuICAgIGZvciAoY29uc3QgcHJlZGljYXRlIG9mIE9iamVjdC5rZXlzKHRoaXMucHJvcGVydGllcykpIHtcbiAgICAgIC8vIHByb3BlcnRpZXMgd2l0aG91dCBhbiBJUkkgYXJlIHRoaW5ncyB0aGF0IHdlcmUgYWRkZWQgYnkgcmRmMmpzb24gc28gc2hvdWxkIG5vdFxuICAgICAgLy8gYmUgaW5jbHVkZWQgYXMgYW5ub3RhdGlvbnNcbiAgICAgIGlmIChwcmVkaWNhdGUuaW5kZXhPZihcIjovL1wiKSA9PT0gLTEpIGNvbnRpbnVlO1xuXG4gICAgICBpZiAocHJlZGljYXRlID09PSBcImh0dHA6Ly9wdXJsLm9ib2xpYnJhcnkub3JnL29iby9JQU9fMDAwMDcwMFwiKSB7XG4gICAgICAgIC8vIFwiaGFzIHByZWZlcnJlZCByb290IHRlcm1cIlxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gYW55dGhpbmcgaW4gdGhlIHJkZiwgcmRmcywgb3dsIG5hbWVzcGFjZXMgYXJlbid0IGNvbnNpZGVyZWQgYW5ub3RhdGlvbnNcbiAgICAgIGlmIChcbiAgICAgICAgIShcbiAgICAgICAgICBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNcIikgfHxcbiAgICAgICAgICBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyNcIikgfHxcbiAgICAgICAgICBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI1wiKVxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgYW5ub3RhdGlvblByZWRpY2F0ZXMuYWRkKHByZWRpY2F0ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIEFycmF5LmZyb20oYW5ub3RhdGlvblByZWRpY2F0ZXMpIGFzIHN0cmluZ1tdO1xuICB9XG4gIGdldFByZWZlcnJlZFJvb3RzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJoYXNQcmVmZXJyZWRSb290XCJdKTtcbiAgfVxuICBnZXRMYW5ndWFnZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImxhbmd1YWdlXCJdKTtcbiAgfVxuICBnZXRJbXBvcnRzRnJvbSgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiaW1wb3J0c0Zyb21cIl0pO1xuICB9XG4gIGdldEV4cG9ydHNUbygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiZXhwb3J0c1RvXCJdKTtcbiAgfVxuXG4gIC8vIFRPRE86IG5vdCBhdmFpbGFibGU/XG4gIGdldEFsbG93RG93bmxvYWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiYWxsb3dEb3dubG9hZFwiXTtcbiAgfVxufVxuIiwgImltcG9ydCB7IFRoaW5nLCBFbnRpdHksIENsYXNzLCBQcm9wZXJ0eSwgSW5kaXZpZHVhbCwgT250b2xvZ3kgfSBmcm9tIFwiLi9pbnRlcmZhY2VzXCI7XG5cbi8vIFJFQURPTkxZIGFycmF5cyBjb250YWluaW5nIHRoZSBzdHJpbmdzIGRlZmluaW5nIGEgTW9kZWwgT2JqZWN0IFR5cGVcbmNvbnN0IGNsYXNzVHlwZU5hbWVzID0gW1wiY2xhc3NcIiAsIFwidGVybVwiXSBhcyBjb25zdDtcbmNvbnN0IHByb3BlcnR5VHlwZU5hbWVzID0gW1wicHJvcGVydHlcIl0gYXMgY29uc3Q7XG5jb25zdCBpbmRpdmlkdWFsVHlwZU5hbWVzID0gW1wiaW5kaXZpZHVhbFwiXSBhcyBjb25zdDtcbmV4cG9ydCBjb25zdCBvbnRvbG9neVR5cGVOYW1lcyA9IFtcIm9udG9sb2d5XCJdIGFzIGNvbnN0O1xuZXhwb3J0IGNvbnN0IGVudGl0eVR5cGVOYW1lcyA9IFsuLi5jbGFzc1R5cGVOYW1lcywgLi4uaW5kaXZpZHVhbFR5cGVOYW1lcywgLi4ucHJvcGVydHlUeXBlTmFtZXNdIGFzIGNvbnN0O1xuZXhwb3J0IGNvbnN0IHRoaW5nVHlwZU5hbWVzID0gWy4uLmVudGl0eVR5cGVOYW1lcywgLi4ub250b2xvZ3lUeXBlTmFtZXNdIGFzIGNvbnN0O1xuXG4vLyBUeXBlLWNyZWF0aW9uIG91dCBvZiBSRUFET05MWSBhcnJheXNcbmV4cG9ydCB0eXBlIENsYXNzVHlwZU5hbWUgPSB0eXBlb2YgY2xhc3NUeXBlTmFtZXNbbnVtYmVyXTtcbmV4cG9ydCB0eXBlIFByb3BlcnR5VHlwZU5hbWUgPSB0eXBlb2YgcHJvcGVydHlUeXBlTmFtZXNbbnVtYmVyXTtcbmV4cG9ydCB0eXBlIEluZGl2aWR1YWxUeXBlTmFtZSA9IHR5cGVvZiBpbmRpdmlkdWFsVHlwZU5hbWVzW251bWJlcl07XG5leHBvcnQgdHlwZSBPbnRvbG9neVR5cGVOYW1lID0gdHlwZW9mIG9udG9sb2d5VHlwZU5hbWVzW251bWJlcl07XG5leHBvcnQgdHlwZSBFbnRpdHlUeXBlTmFtZSA9IHR5cGVvZiBlbnRpdHlUeXBlTmFtZXNbbnVtYmVyXTtcbmV4cG9ydCB0eXBlIFRoaW5nVHlwZU5hbWUgPSB0eXBlb2YgdGhpbmdUeXBlTmFtZXNbbnVtYmVyXTtcblxuLy8gRnVuY3Rpb25zIGNoZWNraW5nIHN0cmluZyBhZ2FpbnN0IHR5cGUgbmFtZXMsIHJldHVybmluZyBzdHJpbmcgYXMgdHlwZSBuYW1lIGlmIGNoZWNrIHBhc3Nlc1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ2xhc3NUeXBlTmFtZSh0eXBlOiBzdHJpbmcpIDogdHlwZSBpcyBDbGFzc1R5cGVOYW1lIHtcbiAgICByZXR1cm4gY2xhc3NUeXBlTmFtZXMuaW5jbHVkZXModHlwZSBhcyBDbGFzc1R5cGVOYW1lKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1Byb3BlcnR5VHlwZU5hbWUodHlwZTogc3RyaW5nKSA6IHR5cGUgaXMgUHJvcGVydHlUeXBlTmFtZSB7XG4gICAgcmV0dXJuIHByb3BlcnR5VHlwZU5hbWVzLmluY2x1ZGVzKHR5cGUgYXMgUHJvcGVydHlUeXBlTmFtZSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNJbmRpdmlkdWFsVHlwZU5hbWUodHlwZTogc3RyaW5nKSA6IHR5cGUgaXMgSW5kaXZpZHVhbFR5cGVOYW1lIHtcbiAgICByZXR1cm4gaW5kaXZpZHVhbFR5cGVOYW1lcy5pbmNsdWRlcyh0eXBlIGFzIEluZGl2aWR1YWxUeXBlTmFtZSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNPbnRvbG9neVR5cGVOYW1lKHR5cGU6IHN0cmluZykgOiB0eXBlIGlzIE9udG9sb2d5VHlwZU5hbWUge1xuICAgIHJldHVybiBvbnRvbG9neVR5cGVOYW1lcy5pbmNsdWRlcyh0eXBlIGFzIE9udG9sb2d5VHlwZU5hbWUpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzRW50aXR5VHlwZU5hbWUodHlwZTogc3RyaW5nKSA6IHR5cGUgaXMgRW50aXR5VHlwZU5hbWUge1xuICAgIHJldHVybiBlbnRpdHlUeXBlTmFtZXMuaW5jbHVkZXModHlwZSBhcyBFbnRpdHlUeXBlTmFtZSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNUaGluZ1R5cGVOYW1lKHR5cGU6IHN0cmluZykgOiB0eXBlIGlzIFRoaW5nVHlwZU5hbWUge1xuICAgIHJldHVybiB0aGluZ1R5cGVOYW1lcy5pbmNsdWRlcyh0eXBlIGFzIFRoaW5nVHlwZU5hbWUpO1xufVxuXG4vLyBGdW5jdGlvbnMgY2hlY2tpbmcgVGhpbmcgb2JqZWN0cyBhZ2FpbnN0IHNwZWNpZmljIHR5cGUgKHZpYSBjaGVja2luZyBnZXRUeXBlKCkgYWdhaW5zdCB0eXBlIG5hbWVzKSwgcmV0dXJuaW5nIG9iamVjdCBhcyBzcGVjaWZpYyB0eXBlIGlmIGNoZWNrIHBhc3Nlc1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ2xhc3ModGhpbmc6IFRoaW5nKSA6IHRoaW5nIGlzIENsYXNzIHtcbiAgICByZXR1cm4gaXNDbGFzc1R5cGVOYW1lKHRoaW5nLmdldFR5cGUoKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNQcm9wZXJ0eSh0aGluZzogVGhpbmcpIDogdGhpbmcgaXMgUHJvcGVydHkge1xuICAgIHJldHVybiBpc1Byb3BlcnR5VHlwZU5hbWUodGhpbmcuZ2V0VHlwZSgpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0luZGl2aWR1YWwodGhpbmc6IFRoaW5nKSA6IHRoaW5nIGlzIEluZGl2aWR1YWwge1xuICAgIHJldHVybiBpc0luZGl2aWR1YWxUeXBlTmFtZSh0aGluZy5nZXRUeXBlKCkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzRW50aXR5KHRoaW5nOiBUaGluZykgOiB0aGluZyBpcyBFbnRpdHkge1xuICAgIHJldHVybiBpc0VudGl0eVR5cGVOYW1lKHRoaW5nLmdldFR5cGUoKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNPbnRvbG9neSh0aGluZzogVGhpbmcpIDogdGhpbmcgaXMgT250b2xvZ3kge1xuICAgIHJldHVybiBpc09udG9sb2d5VHlwZU5hbWUodGhpbmcuZ2V0VHlwZSgpKTtcbn0iLCAiaW1wb3J0IHtPTFMzT250b2xvZ3ksIE9MUzNDbGFzcywgT0xTM1Byb3BlcnR5LCBPTFMzSW5kaXZpZHVhbH0gZnJvbSBcIi4vb2xzMy1tb2RlbFwiO1xuaW1wb3J0IHtPTFM0T250b2xvZ3ksIE9MUzRDbGFzcywgT0xTNFByb3BlcnR5LCBPTFM0SW5kaXZpZHVhbH0gZnJvbSBcIi4vb2xzNC1tb2RlbFwiO1xuaW1wb3J0IHtUaGluZ30gZnJvbSBcIi4vaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHtUaGluZ1R5cGVOYW1lLCBpc1RoaW5nVHlwZU5hbWV9IGZyb20gXCIuL01vZGVsVHlwZUNoZWNrXCI7XG5pbXBvcnQge2FzQXJyYXl9IGZyb20gXCIuLi9hcHAvdXRpbFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTW9kZWxPYmplY3QocmVzcG9uc2U6IGFueSkge1xuICAgIGxldCB1c2VMZWdhY3kgOiBib29sZWFuO1xuICAgIGlmKHJlc3BvbnNlW1wiX2VtYmVkZGVkXCJdICE9PSB1bmRlZmluZWQgfHwgcmVzcG9uc2VbXCJudW1iZXJPZlRlcm1zXCJdICE9PSB1bmRlZmluZWQpIHVzZUxlZ2FjeSA9IHRydWU7XG4gICAgZWxzZSBpZihyZXNwb25zZVtcImVsZW1lbnRzXCJdICE9PSB1bmRlZmluZWQgfHwgcmVzcG9uc2VbXCJudW1iZXJPZkNsYXNzZXNcIl0gIT09IHVuZGVmaW5lZCkgdXNlTGVnYWN5ID0gZmFsc2U7XG4gICAgZWxzZSB0aHJvdyBFcnJvcihcIlJlc3BvbnNlIHN0cnVjdHVyZSBkb2VzIG5vdCBjb3JyZWxhdGUgdG8gYW55IG9mIHRoZSBmZWF0dXJlZCByZXNwb25zZSBzdHJ1Y3R1cmVzOiBcXG4gJHtyZXNwb25zZS50b1N0cmluZygpfVwiKTtcblxuICAgIGxldCBlbnRpdHlUeXBlIDogVGhpbmdUeXBlTmFtZSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICBpZih1c2VMZWdhY3kpIHtcbiAgICAgICAgaWYocmVzcG9uc2VbXCJfZW1iZWRkZWRcIl0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZW50aXR5VHlwZSA9IFwib250b2xvZ3lcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmKHJlc3BvbnNlW1wiX2VtYmVkZGVkXCJdW1widGVybXNcIl0gIT09IHVuZGVmaW5lZCkgZW50aXR5VHlwZSA9IFwidGVybVwiO1xuICAgICAgICAgICAgZWxzZSBpZihyZXNwb25zZVtcIl9lbWJlZGRlZFwiXVtcInByb3BlcnRpZXNcIl0gIT09IHVuZGVmaW5lZCkgZW50aXR5VHlwZSA9IFwicHJvcGVydHlcIjtcbiAgICAgICAgICAgIGVsc2UgaWYocmVzcG9uc2VbXCJfZW1iZWRkZWRcIl1bXCJpbmRpdmlkdWFsc1wiXSAhPT0gdW5kZWZpbmVkKSBlbnRpdHlUeXBlID0gXCJpbmRpdmlkdWFsXCI7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGlmKHJlc3BvbnNlW1wiZWxlbWVudHNcIl0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZW50aXR5VHlwZSA9IFwib250b2xvZ3lcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGxldCB0eXBlcyA6IHN0cmluZ1tdID0gcmVzcG9uc2VbXCJlbGVtZW50c1wiXVswXVtcInR5cGVcIl07XG4gICAgICAgICAgICB0eXBlcyA9IHR5cGVzLmZpbHRlcigoZWxlbSA6IHN0cmluZykgPT4gaXNUaGluZ1R5cGVOYW1lKGVsZW0pKTsgLy8gZmlsdGVyIG5vdCBtYXRjaGluZyBzdHJpbmdzXG4gICAgICAgICAgICB0eXBlcyA9IFsuLi5uZXcgU2V0PHN0cmluZz4odHlwZXMpXTsgLy8gcmVtb3ZlIGR1cGxpY2F0ZXNcblxuICAgICAgICAgICAgaWYodHlwZXMubGVuZ3RoID09PSAxKSBlbnRpdHlUeXBlID0gdHlwZXNbMF0gYXMgVGhpbmdUeXBlTmFtZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmKGVudGl0eVR5cGUgPT09IHVuZGVmaW5lZCkgdGhyb3cgRXJyb3IoXCJFbnRpdHkgdHlwZSBjb3VsZCBub3QgYmUgY29ycmVjdGx5IGluZmVycmVkLlwiKTtcblxuICAgIHJldHVybiBjcmVhdGVNb2RlbE9iamVjdFdpdGhFbnRpdHlUeXBlV2l0aFVzZUxlZ2FjeShyZXNwb25zZSwgZW50aXR5VHlwZSwgdXNlTGVnYWN5KTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlTW9kZWxPYmplY3RXaXRoRW50aXR5VHlwZVdpdGhVc2VMZWdhY3kocmVzcG9uc2U6IGFueSwgZW50aXR5VHlwZTogc3RyaW5nLCB1c2VMZWdhY3k6IGJvb2xlYW4pOiBUaGluZyB7XG4gICAgc3dpdGNoIChlbnRpdHlUeXBlKSB7XG4gICAgICAgIGNhc2UgXCJvbnRvbG9neVwiOlxuICAgICAgICAgICAgcmV0dXJuIHVzZUxlZ2FjeSA/IG5ldyBPTFMzT250b2xvZ3kocmVzcG9uc2UpIDogbmV3IE9MUzRPbnRvbG9neShyZXNwb25zZSk7XG5cbiAgICAgICAgY2FzZSBcInRlcm1cIiA6XG4gICAgICAgIGNhc2UgXCJjbGFzc1wiOiAvLyBhbGxvdyBCT1RILCBldmVuIGlmIGl0IHNob3VsZCBhY3R1YWxseSBiZSBcInRlcm1cIlxuICAgICAgICAgICAgcmV0dXJuIHVzZUxlZ2FjeSA/IG5ldyBPTFMzQ2xhc3MoZ2V0UHJlZmVycmVkT250b2xvZ3lKU09OKGFzQXJyYXkocmVzcG9uc2VbXCJfZW1iZWRkZWRcIl1bXCJ0ZXJtc1wiXSksIHVzZUxlZ2FjeSkpIDogbmV3IE9MUzRDbGFzcyhnZXRQcmVmZXJyZWRPbnRvbG9neUpTT04oYXNBcnJheShyZXNwb25zZVtcImVsZW1lbnRzXCJdKSwgdXNlTGVnYWN5KSk7XG5cbiAgICAgICAgY2FzZSBcInByb3BlcnR5XCI6XG4gICAgICAgICAgICByZXR1cm4gdXNlTGVnYWN5ID8gbmV3IE9MUzNQcm9wZXJ0eShnZXRQcmVmZXJyZWRPbnRvbG9neUpTT04oYXNBcnJheShyZXNwb25zZVtcIl9lbWJlZGRlZFwiXVtcInByb3BlcnRpZXNcIl0pLCB1c2VMZWdhY3kpKSA6IG5ldyBPTFM0UHJvcGVydHkoZ2V0UHJlZmVycmVkT250b2xvZ3lKU09OKGFzQXJyYXkocmVzcG9uc2VbXCJlbGVtZW50c1wiXSksIHVzZUxlZ2FjeSkpO1xuXG4gICAgICAgIGNhc2UgXCJpbmRpdmlkdWFsXCI6XG4gICAgICAgICAgICByZXR1cm4gdXNlTGVnYWN5ID8gbmV3IE9MUzNJbmRpdmlkdWFsKGdldFByZWZlcnJlZE9udG9sb2d5SlNPTihhc0FycmF5KHJlc3BvbnNlW1wiX2VtYmVkZGVkXCJdW1wiaW5kaXZpZHVhbHNcIl0pLCB1c2VMZWdhY3kpKSA6IG5ldyBPTFM0SW5kaXZpZHVhbChnZXRQcmVmZXJyZWRPbnRvbG9neUpTT04oYXNBcnJheShyZXNwb25zZVtcImVsZW1lbnRzXCJdKSwgdXNlTGVnYWN5KSk7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IEVycm9yKCdJbnZhbGlkIGVudGl0eSB0eXBlIFwiJyArIGVudGl0eVR5cGUgKyAnXCIuIE11c3QgYmUgb25lIG9mIHtcInRlcm1cIiwgXCJjbGFzc1wiLCBcIm9udG9sb2d5XCIsIFwicHJvcGVydHlcIiwgXCJpbmRpdmlkdWFsXCJ9Jyk7XG4gICAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIEpTT04gb2YgdGhlIGVudGl0eSBpbiBpdHMgZGVmaW5pbmcgb250b2xvZ3ksIG9yLCBpZiBub3QgYXZhaWxhYmxlLCBqdXN0IHRoZSBmaXJzdCBKU09OIGluIHRoZSBhcnJheS5cbiAqIElmIG9udG9sb2d5SWQgd2FzIHByb3ZpZGVkIGluIHRoZSByZXNwb25zZSByZXF1ZXN0LCB0aGUgYXJyYXkgc2hvdWxkIG9ubHkgY29udGFpbiBvbmUgZWxlbWVudCwgdGh1cyB0aGUgZnVuY3Rpb25hbGl0eSBpcyBhcyBleHBlY3RlZCBhcyB3ZWxsXG4gKiBAcGFyYW0gZW50aXR5QXJyYXlSZXNwb25zZSB0aGUgc3ViLXJlc3BvbnNlIG9mIHRoZSBpbml0aWFsIHF1ZXJ5IHJlc3BvbnNlIGNvbnRhaW5pbmcganVzdCB0aGUgZW50aXR5IGFycmF5XG4gKiBAcGFyYW0gdXNlTGVnYWN5IGFwaSB2ZXJzaW9uIChuZWVkZWQgYmVjYXVzZSBrZXkgZ2l2aW5nIGluZm9ybWF0aW9uIGFib3V0IGRlZmluaW5nIG9udG9sb2d5IGhhcyBkaWZmZXJlbnQgbmFtZXMgaW4gYm90aCB2ZXJzaW9ucylcbiAqL1xuZnVuY3Rpb24gZ2V0UHJlZmVycmVkT250b2xvZ3lKU09OKGVudGl0eUFycmF5UmVzcG9uc2U6IGFueVtdLCB1c2VMZWdhY3k6IGJvb2xlYW4pIHtcbiAgICBjb25zdCBkZWZpbmluZ09udG9sb2d5QXJyID0gYXNBcnJheShlbnRpdHlBcnJheVJlc3BvbnNlKS5maWx0ZXIoKGVudGl0eSkgPT4gdXNlTGVnYWN5ID8gZW50aXR5W1wiaXNfZGVmaW5pbmdfb250b2xvZ3lcIl0gOiBlbnRpdHlbXCJpc0RlZmluaW5nT250b2xvZ3lcIl0pO1xuICAgIGlmKGRlZmluaW5nT250b2xvZ3lBcnIubGVuZ3RoID4gMCkgcmV0dXJuIGRlZmluaW5nT250b2xvZ3lBcnJbMF07XG4gICAgZWxzZSByZXR1cm4gZW50aXR5QXJyYXlSZXNwb25zZVswXTtcbn0iLCAiaW1wb3J0IGF4aW9zLCB7QXhpb3NJbnN0YW5jZSwgQXhpb3NSZXF1ZXN0Q29uZmlnfSBmcm9tIFwiYXhpb3NcIjtcbmltcG9ydCB7Z2V0VXNlTGVnYWN5fSBmcm9tIFwiLi4vYXBwL3V0aWxcIjtcbmltcG9ydCB7Y3JlYXRlTW9kZWxPYmplY3R9IGZyb20gXCIuLi9tb2RlbC9Nb2RlbE9iamVjdENyZWF0b3JcIjtcbmltcG9ydCB7T250b2xvZ3ksIE9udG9sb2dpZXMsIEVudGl0eSwgVGhpbmd9IGZyb20gXCIuLi9tb2RlbC9pbnRlcmZhY2VzXCI7XG5pbXBvcnQge09MUzNPbnRvbG9naWVzfSBmcm9tIFwiLi4vbW9kZWwvb2xzMy1tb2RlbFwiO1xuaW1wb3J0IHtcbiAgRW50aXR5VHlwZU5hbWUsXG4gIGVudGl0eVR5cGVOYW1lcyxcbiAgaXNFbnRpdHlUeXBlTmFtZSxcbiAgaXNPbnRvbG9neVR5cGVOYW1lLFxuICBvbnRvbG9neVR5cGVOYW1lcywgVGhpbmdUeXBlTmFtZSwgdGhpbmdUeXBlTmFtZXNcbn0gZnJvbSBcIi4uL21vZGVsL01vZGVsVHlwZUNoZWNrXCI7XG5cbmludGVyZmFjZSBQYWdpbmF0aW9uUGFyYW1zIHtcbiAgc2l6ZT86IHN0cmluZztcbiAgcGFnZT86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFNvcnRpbmdQYXJhbXMge1xuICBzb3J0RmllbGQ6IHN0cmluZyB8IG51bWJlcjtcbiAgc29ydERpcj86IFwiYXNjXCIgfCBcImRlc2NcIjtcbn1cblxuaW50ZXJmYWNlIENvbnRlbnRQYXJhbXMge1xuICBvbnRvbG9neUlkPzogc3RyaW5nO1xuICB0ZXJtSXJpPzogc3RyaW5nO1xuICBwcm9wZXJ0eUlyaT86IHN0cmluZztcbiAgaW5kaXZpZHVhbElyaT86IHN0cmluZztcbiAgcXVlcnlTdHJpbmc/OiBzdHJpbmc7XG5cbn1cblxuZXhwb3J0IHR5cGUgYXBpQ2FsbEZuID0gKHBhZ2luYXRpb25QYXJhbXM/OiBQYWdpbmF0aW9uUGFyYW1zLCBzb3J0aW5nUGFyYW1zPzogU29ydGluZ1BhcmFtcywgY29udGVudFBhcmFtcz86IENvbnRlbnRQYXJhbXMsIHBhcmFtZXRlcj86IHN0cmluZywgdXNlTGVnYWN5PzogYm9vbGVhbiwgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbCkgPT4gUHJvbWlzZTxhbnk+O1xuXG5pbnRlcmZhY2UgU2VhcmNoUXVlcnlQYXJhbXMge1xuICBxdWVyeTogc3RyaW5nO1xuICBleGFjdE1hdGNoPzogYm9vbGVhbjtcbiAgc2hvd09ic29sZXRlVGVybXM/OiBib29sZWFuO1xuICB0eXBlcz86IHN0cmluZztcbiAgb250b2xvZ3k/OiBzdHJpbmc7XG4gIGdyb3VwQnlJcmk/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgU2VsZWN0UXVlcnlQYXJhbXMge1xuICBxdWVyeTogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgU3VnZ2VzdFF1ZXJ5UGFyYW1zIHtcbiAgcXVlcnk6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEpzVHJlZVBhcmFtcyB7XG4gIHZpZXdNb2RlPzogc3RyaW5nO1xuICBzaWJsaW5ncz86IGJvb2xlYW47XG4gIGNoaWxkPzogc3RyaW5nO1xufVxuXG5jb25zdCBERUZBVUxUX1NFQVJDSF9SRVNVTFRTX1BFUl9QQUdFID0gMTA7XG5cbmV4cG9ydCBjbGFzcyBPbHNBcGkge1xuICBwcml2YXRlIGF4aW9zSW5zdGFuY2U6IEF4aW9zSW5zdGFuY2U7XG5cbiAgY29uc3RydWN0b3IoYXBpOiBzdHJpbmcpIHtcbiAgICB0aGlzLmF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoe1xuICAgICAgYmFzZVVSTDogYXBpLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICBBY2NlcHQ6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICBDb250ZW50X1R5cGU6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRQYXJhbXNGb3JHZXQocGFnaW5hdGlvblBhcmFtcz86IFBhZ2luYXRpb25QYXJhbXMsIHNvcnRpbmdQYXJhbXM/OiBTb3J0aW5nUGFyYW1zLCBjb250ZW50UGFyYW1zPzogQ29udGVudFBhcmFtcywgcGFyYW1ldGVyPzogc3RyaW5nKSB7XG4gICAgaWYgKHNvcnRpbmdQYXJhbXMpIHtcbiAgICAgIHJldHVybiB7IC4uLnBhZ2luYXRpb25QYXJhbXMsIHNvcnQ6IGAke3NvcnRpbmdQYXJhbXMuc29ydEZpZWxkfSwke3NvcnRpbmdQYXJhbXMuc29ydERpcn1gLCAuLi5jb250ZW50UGFyYW1zLCAuLi50aGlzLmJ1aWxkT3RoZXJQYXJhbXMocGFyYW1ldGVyKX07XG4gICAgfVxuICAgIHJldHVybiB7IC4uLnBhZ2luYXRpb25QYXJhbXMsIC4uLmNvbnRlbnRQYXJhbXMsIC4uLnRoaXMuYnVpbGRPdGhlclBhcmFtcyhwYXJhbWV0ZXIpIH07XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkUGFnaW5hdGlvblBhcmFtcyhwYWdpbmF0aW9uUGFyYW1zPzogUGFnaW5hdGlvblBhcmFtcykge1xuICAgIGNvbnN0IHBhcmFtczogYW55ID0ge1xuICAgICAgcm93czogcGFnaW5hdGlvblBhcmFtcz8uc2l6ZSxcbiAgICB9O1xuXG4gICAgaWYgKHBhZ2luYXRpb25QYXJhbXM/LnBhZ2UpIHtcbiAgICAgIGlmIChwYWdpbmF0aW9uUGFyYW1zLnNpemUpIHtcbiAgICAgICAgcGFyYW1zLnN0YXJ0ID0gKCtwYWdpbmF0aW9uUGFyYW1zLnBhZ2UgKiArcGFnaW5hdGlvblBhcmFtcy5zaXplKS50b1N0cmluZygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyYW1zLnN0YXJ0ID0gKCtwYWdpbmF0aW9uUGFyYW1zLnBhZ2UgKiBERUZBVUxUX1NFQVJDSF9SRVNVTFRTX1BFUl9QQUdFKS50b1N0cmluZygpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwYXJhbXM7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkUGFyYW1zRm9yU2VhcmNoKHF1ZXJ5UGFyYW1zOiBTZWFyY2hRdWVyeVBhcmFtcywgcGFnaW5hdGlvblBhcmFtczogUGFnaW5hdGlvblBhcmFtcywgY29udGVudFBhcmFtcz86IENvbnRlbnRQYXJhbXMsIHBhcmFtZXRlcj86IHN0cmluZykge1xuICAgIGNvbnN0IHBhcmFtczogYW55ID0ge1xuICAgICAgcTogcXVlcnlQYXJhbXMucXVlcnksXG4gICAgICBleGFjdDogcXVlcnlQYXJhbXMuZXhhY3RNYXRjaCxcbiAgICAgIG9ic29sZXRlczogcXVlcnlQYXJhbXMuc2hvd09ic29sZXRlVGVybXMsXG4gICAgfTtcblxuICAgIGlmIChxdWVyeVBhcmFtcy5ncm91cEJ5SXJpKSB7XG4gICAgICBwYXJhbXMuZ3JvdXBGaWVsZCA9IHF1ZXJ5UGFyYW1zLmdyb3VwQnlJcmk7XG4gICAgfVxuXG4gICAgaWYgKHF1ZXJ5UGFyYW1zLnR5cGVzKSB7XG4gICAgICBwYXJhbXMudHlwZSA9IHF1ZXJ5UGFyYW1zLnR5cGVzO1xuICAgIH1cblxuICAgIGlmIChxdWVyeVBhcmFtcy5vbnRvbG9neSkge1xuICAgICAgcGFyYW1zLm9udG9sb2d5ID0gcXVlcnlQYXJhbXMub250b2xvZ3k7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgLi4ucGFyYW1zLCAuLi50aGlzLmJ1aWxkUGFnaW5hdGlvblBhcmFtcyhwYWdpbmF0aW9uUGFyYW1zKSwgLi4uY29udGVudFBhcmFtcywgLi4udGhpcy5idWlsZE90aGVyUGFyYW1zKHBhcmFtZXRlcikgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGdW5jdGlvbiBmb3IgY3JlYXRpbmcgYW4gb2JqZWN0IGZyb20gc3RyaW5nIG9mIHBhcmFtZXRlcnMgZm9yIGF4aW9zIGlucHV0IHBhcmFtc1xuICAgKiBAcGFyYW0gcGFyYW1ldGVyXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkT3RoZXJQYXJhbXMocGFyYW1ldGVyPzogc3RyaW5nKXtcbiAgICBjb25zdCByZXN1bHQ6IGFueSA9IHt9O1xuICAgIGlmIChwYXJhbWV0ZXIpIHtcbiAgICAgIGNvbnN0IHBhcmFtc1NwbGl0dGVkID0gcGFyYW1ldGVyLnNwbGl0KFwiJlwiKVxuXG4gICAgICBwYXJhbXNTcGxpdHRlZC5mb3JFYWNoKChwYXJhbTogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBrZXk6IHN0cmluZyA9IHBhcmFtLnNwbGl0KFwiPVwiKVswXVxuICAgICAgY29uc3QgdmFsdWU6IHN0cmluZyA9IHBhcmFtLnNwbGl0KFwiPVwiKVsxXVxuICAgICAgcmVzdWx0W2tleV0gPSB2YWx1ZX0pXG4gICAgfVxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRQYXJhbXNGb3JTZWxlY3QocXVlcnlQYXJhbXM6IFN1Z2dlc3RRdWVyeVBhcmFtcywgcGFnaW5hdGlvblBhcmFtcz86IFBhZ2luYXRpb25QYXJhbXMsIGNvbnRlbnRQYXJhbXM/OiBDb250ZW50UGFyYW1zLCBwYXJhbWV0ZXJzPzogc3RyaW5nKSB7XG4gICAgY29uc3QgcGFyYW1zOiBhbnkgPSB7XG4gICAgICBxOiBxdWVyeVBhcmFtcy5xdWVyeSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHsgLi4ucGFyYW1zLCAuLi50aGlzLmJ1aWxkUGFnaW5hdGlvblBhcmFtcyhwYWdpbmF0aW9uUGFyYW1zKSwgLi4uY29udGVudFBhcmFtcywgIC4uLnRoaXMuYnVpbGRPdGhlclBhcmFtcyhwYXJhbWV0ZXJzKSB9O1xuICB9XG5cblxuICBwcml2YXRlIGJ1aWxkUGFyYW1zRm9yU3VnZ2VzdChxdWVyeVBhcmFtczogU3VnZ2VzdFF1ZXJ5UGFyYW1zLCBwYWdpbmF0aW9uUGFyYW1zPzogUGFnaW5hdGlvblBhcmFtcywgY29udGVudFBhcmFtcz86IENvbnRlbnRQYXJhbXMsIHBhcmFtZXRlcnM/OiBzdHJpbmcpIHtcbiAgICBjb25zdCBwYXJhbXM6IGFueSA9IHtcbiAgICAgIHE6IHF1ZXJ5UGFyYW1zLnF1ZXJ5LFxuICAgIH07XG5cbiAgICByZXR1cm4geyAuLi5wYXJhbXMsIC4uLnRoaXMuYnVpbGRQYWdpbmF0aW9uUGFyYW1zKHBhZ2luYXRpb25QYXJhbXMpLCAuLi5jb250ZW50UGFyYW1zLCAgLi4udGhpcy5idWlsZE90aGVyUGFyYW1zKHBhcmFtZXRlcnMpIH07XG4gIH1cblxuICBwdWJsaWMgY2hlY2tfZm9yX2Vycm9ycyhyZXNwb25zZTogYW55KTogYW55IHtcbiAgICAvLyByZXNvdXJjZSBub3QgZm91bmQvaWxsZWdhbCBhcmd1bWVudCBleGNlcHRpb24gaW4gc2VtYW50aWNsb29rdXBcbiAgICBpZihyZXNwb25zZVtcImVycm9yXCJdKSB7XG4gICAgICB0aHJvdyBFcnJvcihyZXNwb25zZVtcInN0YXR1c1wiXSArIFwiIFwiICsgcmVzcG9uc2VbXCJlcnJvclwiXSArIFwiIC0gXCIgKyByZXNwb25zZVtcIm1lc3NhZ2VcIl0gKyBcIiAtIFwiICsgcmVzcG9uc2VbXCJleGNlcHRpb25cIl0gKyBcIiBhdCBcIiArIHJlc3BvbnNlW1wicGF0aFwiXSk7XG4gICAgfVxuICAgIC8vIGVtcHR5IHJlc3BvbnNlIC0gY2FuIGJlIGNhdWdodCBpZiB0aGlzIGlzIGV4cGVjdGVkLCBlLmcuIGZvciBmZXRjaGluZyBpbnN0YW5jZXNcbiAgICBpZihyZXNwb25zZVtcInBhZ2VcIl0gIT09IHVuZGVmaW5lZCAmJiByZXNwb25zZVtcInBhZ2VcIl1bXCJ0b3RhbEVsZW1lbnRzXCJdID09PSAwKSB7XG4gICAgICB0aHJvdyBFcnJvcihcIlJlc3BvbnNlIGNvbnRhaW5zIDAgZWxlbWVudHNcIik7XG4gICAgfVxuICAgIHJldHVybiByZXNwb25zZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBtYWtlQ2FsbCh1cmw6IHN0cmluZywgY29uZmlnOiBBeGlvc1JlcXVlc3RDb25maWc8YW55PiB8IHVuZGVmaW5lZCwgdXNlTGVnYWN5OiBib29sZWFuKSB7XG4gICAgY29uc3QgYXBpVmVyc2lvblByZWZpeCA9IGdldFVzZUxlZ2FjeSh1c2VMZWdhY3kpID8gXCJcIiA6IFwidjIvXCI7XG4gICAgY29uc3QgcmVzcG9uc2UgPSAoYXdhaXQgdGhpcy5heGlvc0luc3RhbmNlLmdldChhcGlWZXJzaW9uUHJlZml4ICsgdXJsLCBjb25maWcpKS5kYXRhO1xuICAgIHJldHVybiB0aGlzLmNoZWNrX2Zvcl9lcnJvcnMocmVzcG9uc2UpO1xuICB9XG5cbiAgcHVibGljIGdldE9udG9sb2dpZXM6IGFwaUNhbGxGbiA9IGFzeW5jIChwYWdpbmF0aW9uUGFyYW1zLCBzb3J0aW5nUGFyYW1zLCBjb250ZW50UGFyYW1zLCBwYXJhbWV0ZXIpID0+IHtcbiAgICByZXR1cm4gdGhpcy5tYWtlQ2FsbChcIm9udG9sb2dpZXNcIiwgeyBwYXJhbXM6IHRoaXMuYnVpbGRQYXJhbXNGb3JHZXQocGFnaW5hdGlvblBhcmFtcywgc29ydGluZ1BhcmFtcywgY29udGVudFBhcmFtcywgcGFyYW1ldGVyKSB9LCB0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaCBhbGwgb250b2xvZ2llcy4gQ3VycmVudGx5IG9ubHkgYXZhaWxhYmxlIGZvciB1c2VMZWdhY3kgc2luY2UgcGFyYW1ldGVycyBhcmVuJ3QgYWxsb3dlZCBpbiB0aGUgT0xTIHYyIEFQSSBvbnRvbG9naWVzIGVuZHBvaW50XG4gICAqIEBwYXJhbSBwYXJhbWV0ZXJcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRPbnRvbG9naWVzRGF0YShwYXJhbWV0ZXI/OiBzdHJpbmcpOiBQcm9taXNlPE9udG9sb2dpZXM+IHtcbiAgICBsZXQgcmVzcG9uc2U7XG4gICAgbGV0IG9udG9sb2dpZXNEYXRhOiBPbnRvbG9neVtdID0gW107XG5cbiAgICBsZXQgcGFnZU51bSA9IDA7XG4gICAgY29uc3QgcGFnZVNpemUgPSA1MDA7XG5cbiAgICBkbyB7XG4gICAgICByZXNwb25zZSA9IGF3YWl0IHRoaXMuZ2V0T250b2xvZ2llcyh7IHNpemU6IHBhZ2VTaXplLnRvU3RyaW5nKCksIHBhZ2U6IHBhZ2VOdW0udG9TdHJpbmcoKSB9LCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcGFyYW1ldGVyKTsgLy8gYXNzdW1pbmcgdGhlcmUgYXJlIG5vIG1vcmUgdGhhbiA1MDAgb250b2xvZ2llc1xuICAgICAgaWYgKCFyZXNwb25zZSB8fCAhcmVzcG9uc2VbXCJfZW1iZWRkZWRcIl0gfHwgIXJlc3BvbnNlW1wiX2VtYmVkZGVkXCJdW1wib250b2xvZ2llc1wiXSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJPbnRvbG9naWVzIGRhdGEgbm90IGZvdW5kXCIpOyAvL1RPRE8gY29uc2lzdGVudCBlcnJvciBoYW5kbGluZ1xuICAgICAgfSBlbHNlIHtcblxuICAgICAgICBvbnRvbG9naWVzRGF0YSA9IG9udG9sb2dpZXNEYXRhLmNvbmNhdChyZXNwb25zZVtcIl9lbWJlZGRlZFwiXVtcIm9udG9sb2dpZXNcIl0ubWFwKChvbnRvbG9neURhdGE6IGFueSkgPT4ge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVNb2RlbE9iamVjdChvbnRvbG9neURhdGEpO1xuICAgICAgICB9KSk7XG4gICAgICB9XG5cbiAgICAgIHBhZ2VOdW0gKz0gMTtcbiAgICB9IHdoaWxlKHBhZ2VOdW0gPCByZXNwb25zZVtcInBhZ2VcIl1bXCJ0b3RhbFBhZ2VzXCJdKTtcblxuICAgIHJldHVybiBuZXcgT0xTM09udG9sb2dpZXMob250b2xvZ2llc0RhdGEpO1xuICB9XG5cbiAgLyoqXG4gICAqIElzIHVzZWQgdG8gZmV0Y2ggYWxsIHRlcm1zIGZyb20gdGhlIGFwaVxuICAgKiBAcGFyYW0gcGFnaW5hdGlvblBhcmFtc1xuICAgKiBAcGFyYW0gc29ydGluZ1BhcmFtc1xuICAgKiBAcGFyYW0gY29udGVudFBhcmFtc1xuICAgKiBAcGFyYW0gcGFyYW1ldGVyXG4gICAqIEBwYXJhbSBgdXNlTGVnYWN5YCBEZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mIGB1c2VMZWdhY3lgLCBgXCJ0ZXJtc1wiYCAoYHVzZUxlZ2FjeSA9PSB0cnVlYCkgb3IgYFwiY2xhc3Nlc1wiYCAoYHVzZUxlZ2FjeSA9PSBmYWxzZWApIHdpbGwgYmUgdXNlZCBpbiB0aGUgcXVlcnkgdXJsXG4gICAqL1xuICBwdWJsaWMgZ2V0VGVybXM6IGFwaUNhbGxGbiA9IGFzeW5jIChwYWdpbmF0aW9uUGFyYW1zLCBzb3J0aW5nUGFyYW1zLCBjb250ZW50UGFyYW1zLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeT86IGJvb2xlYW4pID0+IHtcbiAgICBjb25zdCB0eXBlUHJlZml4ID0gZ2V0VXNlTGVnYWN5KHVzZUxlZ2FjeSkgPyBcInRlcm1zXCIgOiBcImNsYXNzZXNcIjtcbiAgICByZXR1cm4gdGhpcy5tYWtlQ2FsbCh0eXBlUHJlZml4LCB7IHBhcmFtczogdGhpcy5idWlsZFBhcmFtc0ZvckdldChwYWdpbmF0aW9uUGFyYW1zLCBzb3J0aW5nUGFyYW1zLCBjb250ZW50UGFyYW1zKSB9LCBnZXRVc2VMZWdhY3kodXNlTGVnYWN5KSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0UHJvcGVydGllczogYXBpQ2FsbEZuID0gYXN5bmMgKHBhZ2luYXRpb25QYXJhbXMsIHNvcnRpbmdQYXJhbXMsIGNvbnRlbnRQYXJhbXMsIHBhcmFtZXRlciwgdXNlTGVnYWN5PzogYm9vbGVhbikgPT4ge1xuICAgIHJldHVybiB0aGlzLm1ha2VDYWxsKFwicHJvcGVydGllc1wiLCB7IHBhcmFtczogdGhpcy5idWlsZFBhcmFtc0ZvckdldChwYWdpbmF0aW9uUGFyYW1zLCBzb3J0aW5nUGFyYW1zLCBjb250ZW50UGFyYW1zKSB9LCBnZXRVc2VMZWdhY3kodXNlTGVnYWN5KSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0SW5kaXZpZHVhbHM6IGFwaUNhbGxGbiA9IGFzeW5jIChwYWdpbmF0aW9uUGFyYW1zLCBzb3J0aW5nUGFyYW1zLCBjb250ZW50UGFyYW1zLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeT86IGJvb2xlYW4pID0+IHtcbiAgICByZXR1cm4gdGhpcy5tYWtlQ2FsbChcImluZGl2aWR1YWxzXCIsIHsgcGFyYW1zOiB0aGlzLmJ1aWxkUGFyYW1zRm9yR2V0KHBhZ2luYXRpb25QYXJhbXMsIHNvcnRpbmdQYXJhbXMsIGNvbnRlbnRQYXJhbXMpIH0sIGdldFVzZUxlZ2FjeSh1c2VMZWdhY3kpKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRPbnRvbG9neTogYXBpQ2FsbEZuID0gYXN5bmMgKHBhZ2luYXRpb25QYXJhbXMsIHNvcnRpbmdQYXJhbXMsIGNvbnRlbnRQYXJhbXMsIHBhcmFtZXRlciwgdXNlTGVnYWN5PzogYm9vbGVhbikgPT4ge1xuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIC4uLnRoaXMuYnVpbGRPdGhlclBhcmFtcyhwYXJhbWV0ZXIpXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5tYWtlQ2FsbChcIm9udG9sb2dpZXMvXCIrY29udGVudFBhcmFtcz8ub250b2xvZ3lJZCwgcGFyYW1zLCBnZXRVc2VMZWdhY3kodXNlTGVnYWN5KSk7XG4gIH1cblxuICAvKipcbiAgICogSXMgdXNlZCB0byBmZXRjaCBhbiBlbnRpdHkgZnJvbSB0aGUgL2VudGl0aWVzIGVuZHBvaW50IGluIHRoZSBhcGkgaW4gb2xzNC5cbiAgICogQWx3YXlzIHJlcXVpcmVzIHRoZSByZXNwZWN0aXZlIG9iamVjdCBJUkkgaW4gY29udGVudFBhcmFtcyB0byBiZSBzZXRcbiAgICogSWYgb250b2xvZ3lJZCBpcyB1bmRlZmluZWQgaW4gY29udGVudFBhcmFtcywgdGhlIG9iamVjdCB3aWxsIGJlIHF1ZXJpZWQgZnJvbSBhbGwgb250b2xvZ2llcywgY29udGFpbmluZyBhIGxpc3Qgb2YgcmVzdWx0c1xuICAgKiBJZiBhbiBvbnRvbG9neUlkIGlzIHByb3ZpZGVkIGluIGNvbnRlbnRQYXJhbXMsIHRoZSByZXR1cm5lZCBsaXN0IHdpbGwgb25seSBjb250YWluIHRoZSBvYmplY3QgZnJvbSB0aGF0IHNwZWNpZmljIG9udG9sb2d5XG4gICAqL1xuICBwdWJsaWMgZ2V0RW50aXR5OiBhcGlDYWxsRm4gPSBhc3luYyAocGFnaW5hdGlvblBhcmFtcywgc29ydGluZ1BhcmFtcywgY29udGVudFBhcmFtcywgcGFyYW1ldGVyLCB1c2VMZWdhY3k/OiBib29sZWFuKSA9PiB7XG4gICAgY29uc3QgcXVlcnlQcmVmaXggPSBjb250ZW50UGFyYW1zPy5vbnRvbG9neUlkID8gXCJvbnRvbG9naWVzL1wiK2NvbnRlbnRQYXJhbXM/Lm9udG9sb2d5SWQrXCIvXCIgOiBcIlwiXG4gICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgaXJpOiBjb250ZW50UGFyYW1zPy50ZXJtSXJpLFxuICAgICAgLi4udGhpcy5idWlsZE90aGVyUGFyYW1zKHBhcmFtZXRlcilcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLm1ha2VDYWxsKHF1ZXJ5UHJlZml4K1wiZW50aXRpZXNcIiwgeyBwYXJhbXM6IHBhcmFtcyB9LCBnZXRVc2VMZWdhY3kodXNlTGVnYWN5KSk7XG4gIH1cblxuICAvKipcbiAgICogSXMgdXNlZCB0byBmZXRjaCBhIHRlcm0gZnJvbSB0aGUgYXBpXG4gICAqIEBwYXJhbSBwYWdpbmF0aW9uUGFyYW1zXG4gICAqIEBwYXJhbSBzb3J0aW5nUGFyYW1zXG4gICAqIEBwYXJhbSBgY29udGVudFBhcmFtc2AgQWx3YXlzIHJlcXVpcmVzIHRoZSByZXNwZWN0aXZlIG9iamVjdCBJUkkgaW4gYGNvbnRlbnRQYXJhbXNgIHRvIGJlIHNldC5cbiAgICogICAgICAgICAgICAgICAgICAgICAgSWYgb250b2xvZ3lJZCBpcyB1bmRlZmluZWQgaW4gY29udGVudFBhcmFtcywgdGhlIG9iamVjdCB3aWxsIGJlIHF1ZXJpZWQgZnJvbSBhbGwgb250b2xvZ2llcywgY29udGFpbmluZyBhIGxpc3Qgb2YgcmVzdWx0cy5cbiAgICogICAgICAgICAgICAgICAgICAgICAgSWYgYW4gb250b2xvZ3lJZCBpcyBwcm92aWRlZCBpbiBjb250ZW50UGFyYW1zLCB0aGUgcmV0dXJuZWQgbGlzdCB3aWxsIG9ubHkgY29udGFpbiB0aGUgb2JqZWN0IGZyb20gdGhhdCBzcGVjaWZpYyBvbnRvbG9neS5cbiAgICogQHBhcmFtIHBhcmFtZXRlclxuICAgKiBAcGFyYW0gYHVzZUxlZ2FjeWAgRGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZiBgdXNlTGVnYWN5YCwgYFwidGVybXNcImAgKGB1c2VMZWdhY3kgPT0gdHJ1ZWApIG9yIGBcImNsYXNzZXNcImAgKGB1c2VMZWdhY3kgPT0gZmFsc2VgKSB3aWxsIGJlIHVzZWQgaW4gdGhlIHF1ZXJ5IHVybFxuICAgKiBAcGFyYW0gYWJvcnRTaWduYWxcbiAgICovXG4gIHB1YmxpYyBnZXRUZXJtOiBhcGlDYWxsRm4gPSBhc3luYyAocGFnaW5hdGlvblBhcmFtcywgc29ydGluZ1BhcmFtcywgY29udGVudFBhcmFtcywgcGFyYW1ldGVyLCB1c2VMZWdhY3k/OiBib29sZWFuLCBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsKSA9PiB7XG4gICAgY29uc3Qgb250b2xvZ3lQcmVmaXggPSBjb250ZW50UGFyYW1zPy5vbnRvbG9neUlkID8gXCJvbnRvbG9naWVzL1wiK2NvbnRlbnRQYXJhbXM/Lm9udG9sb2d5SWQrXCIvXCIgOiBcIlwiXG4gICAgY29uc3QgdHlwZVByZWZpeCA9IGdldFVzZUxlZ2FjeSh1c2VMZWdhY3kpID8gXCJ0ZXJtc1wiIDogXCJjbGFzc2VzXCI7XG4gICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgaXJpOiBjb250ZW50UGFyYW1zPy50ZXJtSXJpLFxuICAgICAgLi4udGhpcy5idWlsZE90aGVyUGFyYW1zKHBhcmFtZXRlcilcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLm1ha2VDYWxsKG9udG9sb2d5UHJlZml4ICsgdHlwZVByZWZpeCwgeyBwYXJhbXM6IHBhcmFtcywgc2lnbmFsOiBhYm9ydFNpZ25hbCB9LCBnZXRVc2VMZWdhY3kodXNlTGVnYWN5KSk7XG4gIH1cblxuICAvKipcbiAgICogSXMgdXNlZCB0byBmZXRjaCBhIHByb3BlcnR5IGZyb20gdGhlIGFwaSBpbiBvbHMzLlxuICAgKiBBbHdheXMgcmVxdWlyZXMgdGhlIHJlc3BlY3RpdmUgb2JqZWN0IElSSSBpbiBjb250ZW50UGFyYW1zIHRvIGJlIHNldFxuICAgKiBJZiBvbnRvbG9neUlkIGlzIHVuZGVmaW5lZCBpbiBjb250ZW50UGFyYW1zLCB0aGUgb2JqZWN0IHdpbGwgYmUgcXVlcmllZCBmcm9tIGFsbCBvbnRvbG9naWVzLCBjb250YWluaW5nIGEgbGlzdCBvZiByZXN1bHRzXG4gICAqIElmIGFuIG9udG9sb2d5SWQgaXMgcHJvdmlkZWQgaW4gY29udGVudFBhcmFtcywgdGhlIHJldHVybmVkIGxpc3Qgd2lsbCBvbmx5IGNvbnRhaW4gdGhlIG9iamVjdCBmcm9tIHRoYXQgc3BlY2lmaWMgb250b2xvZ3lcbiAgICovXG4gIHB1YmxpYyBnZXRQcm9wZXJ0eTogYXBpQ2FsbEZuID0gYXN5bmMgKHBhZ2luYXRpb25QYXJhbXMsIHNvcnRpbmdQYXJhbXMsIGNvbnRlbnRQYXJhbXMsIHBhcmFtZXRlciwgdXNlTGVnYWN5PzogYm9vbGVhbiwgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbCkgPT4ge1xuICAgIGNvbnN0IHF1ZXJ5UHJlZml4ID0gY29udGVudFBhcmFtcz8ub250b2xvZ3lJZCA/IFwib250b2xvZ2llcy9cIitjb250ZW50UGFyYW1zPy5vbnRvbG9neUlkK1wiL1wiIDogXCJcIlxuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIGlyaTogY29udGVudFBhcmFtcz8ucHJvcGVydHlJcmksXG4gICAgICAuLi50aGlzLmJ1aWxkT3RoZXJQYXJhbXMocGFyYW1ldGVyKVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMubWFrZUNhbGwocXVlcnlQcmVmaXgrXCJwcm9wZXJ0aWVzXCIsIHsgcGFyYW1zOiBwYXJhbXMsIHNpZ25hbDogYWJvcnRTaWduYWwgfSwgZ2V0VXNlTGVnYWN5KHVzZUxlZ2FjeSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIElzIHVzZWQgdG8gZmV0Y2ggYW4gaW5kaXZpZHVhbCBmcm9tIHRoZSBhcGkgaW4gb2xzMy5cbiAgICogQWx3YXlzIHJlcXVpcmVzIHRoZSByZXNwZWN0aXZlIG9iamVjdCBJUkkgaW4gY29udGVudFBhcmFtcyB0byBiZSBzZXRcbiAgICogSWYgb250b2xvZ3lJZCBpcyB1bmRlZmluZWQgaW4gY29udGVudFBhcmFtcywgdGhlIG9iamVjdCB3aWxsIGJlIHF1ZXJpZWQgZnJvbSBhbGwgb250b2xvZ2llcywgY29udGFpbmluZyBhIGxpc3Qgb2YgcmVzdWx0c1xuICAgKiBJZiBhbiBvbnRvbG9neUlkIGlzIHByb3ZpZGVkIGluIGNvbnRlbnRQYXJhbXMsIHRoZSByZXR1cm5lZCBsaXN0IHdpbGwgb25seSBjb250YWluIHRoZSBvYmplY3QgZnJvbSB0aGF0IHNwZWNpZmljIG9udG9sb2d5XG4gICAqL1xuICBwdWJsaWMgZ2V0SW5kaXZpZHVhbDogYXBpQ2FsbEZuID0gYXN5bmMgKHBhZ2luYXRpb25QYXJhbXMsIHNvcnRpbmdQYXJhbXMsIGNvbnRlbnRQYXJhbXMsIHBhcmFtZXRlciwgdXNlTGVnYWN5PzogYm9vbGVhbiwgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbCkgPT4ge1xuICAgIGNvbnN0IHF1ZXJ5UHJlZml4ID0gY29udGVudFBhcmFtcz8ub250b2xvZ3lJZCA/IFwib250b2xvZ2llcy9cIitjb250ZW50UGFyYW1zPy5vbnRvbG9neUlkK1wiL1wiIDogXCJcIlxuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIGlyaTogY29udGVudFBhcmFtcz8uaW5kaXZpZHVhbElyaSxcbiAgICAgIC4uLnRoaXMuYnVpbGRPdGhlclBhcmFtcyhwYXJhbWV0ZXIpXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5tYWtlQ2FsbChxdWVyeVByZWZpeCtcImluZGl2aWR1YWxzXCIsIHsgcGFyYW1zOiBwYXJhbXMsIHNpZ25hbDogYWJvcnRTaWduYWwgfSwgZ2V0VXNlTGVnYWN5KHVzZUxlZ2FjeSkpO1xuICB9XG5cbiAgcHVibGljIHNlYXJjaCA9IGFzeW5jIChxdWVyeVBhcmFtczogU2VhcmNoUXVlcnlQYXJhbXMsIHBhZ2luYXRpb25QYXJhbXM6IFBhZ2luYXRpb25QYXJhbXMsIGNvbnRlbnRQYXJhbXM/OiBDb250ZW50UGFyYW1zLCBwYXJhbWV0ZXI/OiBzdHJpbmcsIGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPGFueT4gPT4ge1xuICAgIHJldHVybiB0aGlzLm1ha2VDYWxsKFwic2VhcmNoXCIsIHsgcGFyYW1zOiB0aGlzLmJ1aWxkUGFyYW1zRm9yU2VhcmNoKHF1ZXJ5UGFyYW1zLCBwYWdpbmF0aW9uUGFyYW1zLCBjb250ZW50UGFyYW1zLCBwYXJhbWV0ZXIpLCBzaWduYWw6IGFib3J0U2lnbmFsIH0sIHRydWUpO1xuICB9XG5cbiAgcHVibGljIHNlbGVjdCA9IGFzeW5jKHF1ZXJ5UGFyYW1zOiBTZWxlY3RRdWVyeVBhcmFtcywgcGFnaW5hdGlvblBhcmFtcz86IFBhZ2luYXRpb25QYXJhbXMsIGNvbnRlbnRQYXJhbXM/OiBDb250ZW50UGFyYW1zLCBwYXJhbWV0ZXI/OiBzdHJpbmcpOiBQcm9taXNlPGFueT4gPT4ge1xuICAgIHJldHVybiB0aGlzLm1ha2VDYWxsKFwic2VsZWN0XCIsIHtwYXJhbXM6IHRoaXMuYnVpbGRQYXJhbXNGb3JTZWxlY3QocXVlcnlQYXJhbXMsIHBhZ2luYXRpb25QYXJhbXMsIGNvbnRlbnRQYXJhbXMsIHBhcmFtZXRlcikgfSwgdHJ1ZSk7XG4gIH1cblxuICBwdWJsaWMgc3VnZ2VzdCA9IGFzeW5jKHF1ZXJ5UGFyYW1zOiBTdWdnZXN0UXVlcnlQYXJhbXMsIHBhZ2luYXRpb25QYXJhbXM/OiBQYWdpbmF0aW9uUGFyYW1zLCBjb250ZW50UGFyYW1zPzogQ29udGVudFBhcmFtcywgcGFyYW1ldGVyPzogc3RyaW5nKTogUHJvbWlzZTxhbnk+ID0+IHtcbiAgICByZXR1cm4gdGhpcy5tYWtlQ2FsbChcInN1Z2dlc3RcIiwgeyBwYXJhbXM6IHRoaXMuYnVpbGRQYXJhbXNGb3JTdWdnZXN0KHF1ZXJ5UGFyYW1zLCBwYWdpbmF0aW9uUGFyYW1zLCBjb250ZW50UGFyYW1zLCBwYXJhbWV0ZXIpIH0sIHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIGdldFRlcm1UcmVlOlxuICAgKiBUaGlzIG1ldGhvZCBhbHdheXMgcmVxdWlyZXMgYW4gb250b2xvZ3lJZCBpbiBjb250ZW50UGFyYW1zXG4gICAqIDEpIElmIG5vIHRlcm1JcmkgaXMgZGVmaW5lZCBpbiBjb250ZW50UGFyYW1zLCB0aGUgb250b2xvZ3kgcm9vdHMgd2lsbCBiZSBxdWVyaWVkXG4gICAqIDIpIElmIGEgdGVybUlyaSBpcyBkZWZpbmVkIGJ1dCBubyBjaGlsZCBpbiBqc1RyZWVQYXJhbXMsIHRoZSBoaWVyYXJjaHkgY29udGFpbmluZyB0aGF0IHRlcm0gd2lsbCBiZSBxdWVyaWVkXG4gICAqIDMpIElmIGEgdGVybUlyaSBpcyBkZWZpbmVkIGFuZCBhbHNvIGEgY2hpbGQgaW4ganNUcmVlUGFyYW1zLCB0aGUgc3ViaGllcmFyY2h5IG9mIHRoYXQgY2hpbGQgd2lsbCBiZSBxdWVyaWVkXG4gICAqL1xuICBwdWJsaWMgZ2V0VGVybVRyZWUgPSBhc3luYyAoY29udGVudFBhcmFtczogQ29udGVudFBhcmFtcywgdHJlZVBhcmFtczogSnNUcmVlUGFyYW1zLCBwYWdpbmF0aW9uUGFyYW1zPzogUGFnaW5hdGlvblBhcmFtcywgc29ydGluZ1BhcmFtcz86IFNvcnRpbmdQYXJhbXMgKSA9PiB7XG4gICAgbGV0IGJhc2VSZXF1ZXN0ID0gXCJvbnRvbG9naWVzL1wiK2NvbnRlbnRQYXJhbXM/Lm9udG9sb2d5SWQrXCIvdGVybXNcIlxuICAgIGlmICghY29udGVudFBhcmFtcy50ZXJtSXJpKSByZXR1cm4gKGF3YWl0IHRoaXMuYXhpb3NJbnN0YW5jZS5nZXQoYmFzZVJlcXVlc3QrXCIvcm9vdHNcIikpLmRhdGE7IC8vMSlcbiAgICBiYXNlUmVxdWVzdCA9IGJhc2VSZXF1ZXN0K1wiL1wiK2VuY29kZVVSSUNvbXBvbmVudChlbmNvZGVVUklDb21wb25lbnQoY29udGVudFBhcmFtcz8udGVybUlyaSkpK1wiL2pzdHJlZVwiXG4gICAgaWYgKHRyZWVQYXJhbXMuY2hpbGQpIHJldHVybiAoYXdhaXQgdGhpcy5heGlvc0luc3RhbmNlLmdldChiYXNlUmVxdWVzdCtcIi9jaGlsZHJlbi9cIit0cmVlUGFyYW1zLmNoaWxkKSkuZGF0YTsgLy8zKVxuICAgIGVsc2UgcmV0dXJuIChhd2FpdCB0aGlzLmF4aW9zSW5zdGFuY2UuZ2V0KGJhc2VSZXF1ZXN0LCB7IHBhcmFtczogdHJlZVBhcmFtcyB9KSkuZGF0YTsgLy8yKVxuICB9XG5cbiAgcHVibGljIGdldFRlcm1SZWxhdGlvbnMgPSBhc3luYyAoY29udGVudFBhcmFtczogQ29udGVudFBhcmFtcywgcGFnaW5hdGlvblBhcmFtcz86IFBhZ2luYXRpb25QYXJhbXMsIHNvcnRpbmdQYXJhbXM/OiBTb3J0aW5nUGFyYW1zICkgPT4ge1xuICAgIGxldCBiYXNlUmVxdWVzdCA9IFwib250b2xvZ2llcy9cIitjb250ZW50UGFyYW1zPy5vbnRvbG9neUlkK1wiL3Rlcm1zXCJcbiAgICBpZiAoIWNvbnRlbnRQYXJhbXMudGVybUlyaSkgcmV0dXJuIChhd2FpdCB0aGlzLmF4aW9zSW5zdGFuY2UuZ2V0KGJhc2VSZXF1ZXN0K1wiL3Jvb3RzXCIpKS5kYXRhOyAvLzEpXG4gICAgYmFzZVJlcXVlc3QgPSBiYXNlUmVxdWVzdCtcIi9cIitlbmNvZGVVUklDb21wb25lbnQoZW5jb2RlVVJJQ29tcG9uZW50KGNvbnRlbnRQYXJhbXM/LnRlcm1JcmkpKStcIi9ncmFwaFwiXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBFbnRpdHkgb2JqZWN0IChpbXBsZW1lbnRpbmcgJ0NsYXNzJywgJ1Byb3BlcnR5JyBvciAnSW5kaXZpZHVhbCcpLlxuICAgKiBJbmRpcmVjdGx5IGZldGNoZXMgdGhlIHJlc3BvbnNlIEpTT04gZm9yIHRoZSBzcGVjaWZpZWQgZW50aXR5VHlwZSwgaXJpLCBvbnRvbG9neUlkLCBwYXJhbWV0ZXIgYW5kIEFQSSB2ZXJzaW9uICh1c2VMZWdhY3kpLlxuICAgKlxuICAgKiBAcGFyYW0gZW50aXR5VHlwZVxuICAgKiBAcGFyYW0gaXJpXG4gICAqIEBwYXJhbSBvbnRvbG9neUlkXG4gICAqIEBwYXJhbSBwYXJhbWV0ZXJcbiAgICogQHBhcmFtIHVzZUxlZ2FjeVxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldEVudGl0eU9iamVjdChpcmk6IHN0cmluZywgZW50aXR5VHlwZT86IEVudGl0eVR5cGVOYW1lLCBvbnRvbG9neUlkPzogc3RyaW5nLCBwYXJhbWV0ZXI/OiBzdHJpbmcsIHVzZUxlZ2FjeT86IGJvb2xlYW4pIDogUHJvbWlzZTxFbnRpdHk+IHtcbiAgICBsZXQgcmVzcG9uc2U7XG4gICAgaWYoIWlyaSkgdGhyb3cgRXJyb3IoJ05vIElSSSBwcm92aWRlZCcpO1xuXG4gICAgaWYoZW50aXR5VHlwZSkge1xuICAgICAgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdldEVudGl0eVdpdGhFbnRpdHlUeXBlUHJvdmlkZWQoaXJpLCBlbnRpdHlUeXBlLCBvbnRvbG9neUlkLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgaWYoZ2V0VXNlTGVnYWN5KHVzZUxlZ2FjeSkpIHtcbiAgICAgICAgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdldEVudGl0eVdpdGhJbmZlcnJlZEVudGl0eVR5cGUoaXJpLCBvbnRvbG9neUlkLCBwYXJhbWV0ZXIpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHJlc3BvbnNlID0gYXdhaXQgdGhpcy5nZXRFbnRpdHkodW5kZWZpbmVkLCB1bmRlZmluZWQsIHtvbnRvbG9neUlkOiBvbnRvbG9neUlkLCB0ZXJtSXJpOiBpcml9LCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNyZWF0ZU1vZGVsT2JqZWN0KHJlc3BvbnNlKSBhcyBFbnRpdHk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBPbnRvbG9neSBvYmplY3QuXG4gICAqIEluZGlyZWN0bHkgZmV0Y2hlcyB0aGUgcmVzcG9uc2UgSlNPTiBmb3IgdGhlIHNwZWNpZmllZCBvbnRvbG9neUlkLCBwYXJhbWV0ZXIgYW5kIEFQSSB2ZXJzaW9uICh1c2VMZWdhY3kpLlxuICAgKlxuICAgKiBAcGFyYW0gb250b2xvZ3lJZFxuICAgKiBAcGFyYW0gcGFyYW1ldGVyXG4gICAqIEBwYXJhbSB1c2VMZWdhY3lcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRPbnRvbG9neU9iamVjdChvbnRvbG9neUlkOiBzdHJpbmcsIHBhcmFtZXRlcj86IHN0cmluZywgdXNlTGVnYWN5PzogYm9vbGVhbikgOiBQcm9taXNlPE9udG9sb2d5PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdldE9udG9sb2d5KHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB7b250b2xvZ3lJZDogb250b2xvZ3lJZH0sIHBhcmFtZXRlciwgdXNlTGVnYWN5KTtcblxuICAgIHJldHVybiBjcmVhdGVNb2RlbE9iamVjdChyZXNwb25zZSkgYXMgT250b2xvZ3k7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0VGhpbmdPYmplY3QoaXJpPzogc3RyaW5nLCB0aGluZ1R5cGU/OiBUaGluZ1R5cGVOYW1lLCBvbnRvbG9neUlkPzogc3RyaW5nLCBwYXJhbWV0ZXI/OiBzdHJpbmcsIHVzZUxlZ2FjeT86IGJvb2xlYW4pIDogUHJvbWlzZTxUaGluZz4ge1xuICAgIGlmKHRoaW5nVHlwZSkge1xuICAgICAgaWYoaXNPbnRvbG9neVR5cGVOYW1lKHRoaW5nVHlwZSkpIHtcbiAgICAgICAgaWYoIW9udG9sb2d5SWQpIHRocm93IG5ldyBFcnJvcihgb250b2xvZ3lJZCBoYXMgdG8gYmUgcHJvdmlkZWQgaWYgdGhpbmdUeXBlIGluIHtcIiR7b250b2xvZ3lUeXBlTmFtZXMuam9pbignXCIsIFwiJyl9XCJ9LmApO1xuICAgICAgICBlbHNlIHJldHVybiBhd2FpdCB0aGlzLmdldE9udG9sb2d5T2JqZWN0KG9udG9sb2d5SWQsIHBhcmFtZXRlciwgdXNlTGVnYWN5KTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYoaXNFbnRpdHlUeXBlTmFtZSh0aGluZ1R5cGUpKSB7XG4gICAgICAgIGlmKCFpcmkpIHRocm93IG5ldyBFcnJvcihgaXJpIGhhcyB0byBiZSBwcm92aWRlZCBpZiB0aGluZ1R5cGUgaW4ge1wiJHtlbnRpdHlUeXBlTmFtZXMuam9pbignXCIsIFwiJyl9XCJ9LmApO1xuICAgICAgICBlbHNlIHJldHVybiBhd2FpdCB0aGlzLmdldEVudGl0eU9iamVjdChpcmksIHRoaW5nVHlwZSwgb250b2xvZ3lJZCwgcGFyYW1ldGVyLCB1c2VMZWdhY3kpO1xuICAgICAgfVxuICAgICAgZWxzZSB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIHRoaW5nVHlwZSBcIiR7dGhpbmdUeXBlfVwiIHByb3ZpZGVkLiBNdXN0IGJlIGluIHtcIiR7dGhpbmdUeXBlTmFtZXMuam9pbignXCIsIFwiJyl9XCJ9LmApO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGlmKCFpcmkgJiYgb250b2xvZ3lJZCkge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRPbnRvbG9neU9iamVjdChvbnRvbG9neUlkLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmKGlyaSkge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRFbnRpdHlPYmplY3QoaXJpLCB0aGluZ1R5cGUsIG9udG9sb2d5SWQsIHBhcmFtZXRlciwgdXNlTGVnYWN5KTtcbiAgICAgIH1cbiAgICAgIGVsc2UgdGhyb3cgbmV3IEVycm9yKGBpcmkgb3Igb250b2xvZ3lJZCBoYXMgdG8gYmUgcHJvdmlkZWQgaWYgdGhpbmdUeXBlIGlzIG5vdCBwcm92aWRlZC5gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSXMgdXNlZCB0byBmZXRjaCBhIGNsYXNzZXMgaW5zdGFuY2VzIGZyb20gdGhlIGFwaS5cbiAgICogQWx3YXlzIHJlcXVpcmVzIHRoZSByZXNwZWN0aXZlIG9iamVjdCBJUkkgaW4gY29udGVudFBhcmFtcyB0byBiZSBzZXRcbiAgICogSWYgb250b2xvZ3lJZCBpcyB1bmRlZmluZWQgaW4gY29udGVudFBhcmFtcywgdGhlIG9iamVjdCB3aWxsIGJlIHF1ZXJpZWQgZnJvbSBhbGwgb250b2xvZ2llcywgY29udGFpbmluZyBhIGxpc3Qgb2YgcmVzdWx0c1xuICAgKiBJZiBhbiBvbnRvbG9neUlkIGlzIHByb3ZpZGVkIGluIGNvbnRlbnRQYXJhbXMsIHRoZSByZXR1cm5lZCBsaXN0IHdpbGwgb25seSBjb250YWluIHRoZSBvYmplY3QgZnJvbSB0aGF0IHNwZWNpZmljIG9udG9sb2d5XG4gICAqL1xuICBwdWJsaWMgZ2V0Q2xhc3NJbnN0YW5jZXM6IGFwaUNhbGxGbiA9IGFzeW5jIChwYWdpbmF0aW9uUGFyYW1zLCBzb3J0aW5nUGFyYW1zLCBjb250ZW50UGFyYW1zLCBwYXJhbWV0ZXIpID0+IHtcbiAgICBjb25zdCBxdWVyeVByZWZpeCA9IGNvbnRlbnRQYXJhbXM/Lm9udG9sb2d5SWQgPyBcIm9udG9sb2dpZXMvXCIrY29udGVudFBhcmFtcz8ub250b2xvZ3lJZCtcIi9cIiA6IFwiXCJcbiAgICByZXR1cm4gdGhpcy5tYWtlQ2FsbChxdWVyeVByZWZpeCtcImNsYXNzZXMvXCIrY29udGVudFBhcmFtcz8udGVybUlyaStcIi9pbnN0YW5jZXNcIiwgeyBwYXJhbXM6IHsgcGFyYW1ldGVyOiB0aGlzLmJ1aWxkT3RoZXJQYXJhbXMocGFyYW1ldGVyKX0gfSwgZmFsc2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRFbnRpdHlXaXRoRW50aXR5VHlwZVByb3ZpZGVkKGlyaTogc3RyaW5nLCBlbnRpdHlUeXBlOiBFbnRpdHlUeXBlTmFtZSwgb250b2xvZ3lJZD86IHN0cmluZywgcGFyYW1ldGVyPzogc3RyaW5nLCB1c2VMZWdhY3k/OiBib29sZWFuKSA6IFByb21pc2U8YW55PiB7XG4gICAgc3dpdGNoIChlbnRpdHlUeXBlKSB7XG4gICAgICBjYXNlICd0ZXJtJzogY2FzZSAnY2xhc3MnOiAvLyBhbHNvIGFsbG93IFwiY2xhc3NcIiBldmVuIGlmIGl0IHNob3VsZCBhY3R1YWxseSBiZSBcInRlcm1cIlxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRUZXJtKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB7b250b2xvZ3lJZDogb250b2xvZ3lJZCwgdGVybUlyaTogaXJpfSwgcGFyYW1ldGVyLCB1c2VMZWdhY3kpO1xuXG4gICAgICBjYXNlICdwcm9wZXJ0eSc6XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmdldFByb3BlcnR5KHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB7b250b2xvZ3lJZDogb250b2xvZ3lJZCwgcHJvcGVydHlJcmk6IGlyaX0sIHBhcmFtZXRlciwgdXNlTGVnYWN5KTtcblxuICAgICAgY2FzZSAnaW5kaXZpZHVhbCc6XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmdldEluZGl2aWR1YWwodW5kZWZpbmVkLCB1bmRlZmluZWQsIHtvbnRvbG9neUlkOiBvbnRvbG9neUlkLCBpbmRpdmlkdWFsSXJpOiBpcml9LCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSk7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IEVycm9yKCdJbnZhbGlkIGVudGl0eSB0eXBlIFwiJyArIGVudGl0eVR5cGUgKyAnXCIuIE11c3QgYmUgb25lIG9mIHtcInRlcm1cIiwgXCJjbGFzc1wiLCBcInByb3BlcnR5XCIsIFwiaW5kaXZpZHVhbFwifScpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0RW50aXR5V2l0aEluZmVycmVkRW50aXR5VHlwZShpcmk6IHN0cmluZywgb250b2xvZ3lJZD86IHN0cmluZywgcGFyYW1ldGVyPzogc3RyaW5nKSA6IFByb21pc2U8YW55PiB7XG4gICAgLypcbiAgICAgICAgICAgIFRlc3QgYWxsIHR5cGVzIG9mIGVudGl0aWVzICh0ZXJtLCBwcm9wZXJ0eSwgaW5kaXZpZHVhbCkgbWFudWFsbHkgd2l0aCBzZXBhcmF0ZSBxdWVyaWVzIChhcyAvZW50aXRpZXMgZG9lcyBub3QgZXhpc3QgZm9yIGxlZ2FjeSBBUEkpXG4gICAgICAgICAgICAtPiByZXR1cm4gdGhlIHJlc3BvbnNlIG9iamVjdCB3aGljaCByZXNvbHZlcyB3aXRoIGEgY29udGFpbmVkIGVudGl0eVxuICAgICAgICAgICAgLT4gdGhyb3cgZXJyb3IgaWYgbm9uZSBvZiB0aGUgdHlwZXMgY29udGFpbnMgYW4gZW50aXR5XG4gICAgICAgICAgKi9cbiAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgIGNvbnN0IHNpZ25hbCA9IGNvbnRyb2xsZXIuc2lnbmFsO1xuXG4gICAgbGV0IHJlc3BvbnNlOyAvLyBzdG9yZXMgdGhlIGVudGl0eSB0byBiZSByZXR1cm5lZCBpbiB0aGUgZW5kXG5cbiAgICBmdW5jdGlvbiBzZXRBbmRTdG9wKHJlczogYW55KSB7XG4gICAgICBpZiAocmVzW1wiX2VtYmVkZGVkXCJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmVzcG9uc2UgPSByZXM7XG4gICAgICAgIGNvbnRyb2xsZXIuYWJvcnQoKTsgLy8gYWJvcnQgcXVlcmllcyBmb3Igb3RoZXIgZW50aXR5VHlwZXNcbiAgICAgIH1cbiAgICB9XG5cbiAgICBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoXG4gICAgICAgIFtcbiAgICAgICAgICB0aGlzLmdldFRlcm0odW5kZWZpbmVkLCB1bmRlZmluZWQsIHtvbnRvbG9neUlkOiBvbnRvbG9neUlkLCB0ZXJtSXJpOiBpcml9LCBwYXJhbWV0ZXIsIHRydWUsIHNpZ25hbClcbiAgICAgICAgICAgICAgLnRoZW4oKHJlczogYW55KSA9PiB7c2V0QW5kU3RvcChyZXMpfSksXG4gICAgICAgICAgdGhpcy5nZXRQcm9wZXJ0eSh1bmRlZmluZWQsIHVuZGVmaW5lZCwge29udG9sb2d5SWQ6IG9udG9sb2d5SWQsIHByb3BlcnR5SXJpOiBpcml9LCBwYXJhbWV0ZXIsIHRydWUsIHNpZ25hbClcbiAgICAgICAgICAgICAgLnRoZW4oKHJlczogYW55KSA9PiB7c2V0QW5kU3RvcChyZXMpfSksXG4gICAgICAgICAgdGhpcy5nZXRJbmRpdmlkdWFsKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB7b250b2xvZ3lJZDogb250b2xvZ3lJZCwgaW5kaXZpZHVhbElyaTogaXJpfSwgcGFyYW1ldGVyLCB0cnVlLCBzaWduYWwpXG4gICAgICAgICAgICAgIC50aGVuKChyZXM6IGFueSkgPT4ge3NldEFuZFN0b3AocmVzKX0pXG4gICAgICAgIF1cbiAgICApO1xuXG4gICAgaWYocmVzcG9uc2UgIT09IHVuZGVmaW5lZCkgcmV0dXJuIHJlc3BvbnNlO1xuICAgIGVsc2UgdGhyb3cgRXJyb3IoXCJJcmkgXCIgKyBpcmkgKyBcIiBjb3VsZCBub3QgYmUgcmVzb2x2ZWQuXCIpO1xuICB9XG59XG4iLCAiZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHsgdmFyIF9pID0gYXJyID09IG51bGwgPyBudWxsIDogdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBhcnJbU3ltYm9sLml0ZXJhdG9yXSB8fCBhcnJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAoX2kgPT0gbnVsbCkgcmV0dXJuOyB2YXIgX2FyciA9IFtdOyB2YXIgX24gPSB0cnVlOyB2YXIgX2QgPSBmYWxzZTsgdmFyIF9zLCBfZTsgdHJ5IHsgZm9yIChfaSA9IF9pLmNhbGwoYXJyKTsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkgeyBfYXJyLnB1c2goX3MudmFsdWUpOyBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7IH0gfSBjYXRjaCAoZXJyKSB7IF9kID0gdHJ1ZTsgX2UgPSBlcnI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTsgfSBmaW5hbGx5IHsgaWYgKF9kKSB0aHJvdyBfZTsgfSB9IHJldHVybiBfYXJyOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IEV1aVNjcmVlblJlYWRlck9ubHkgfSBmcm9tICcuLi9zY3JlZW5fcmVhZGVyX29ubHknO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpU2NyZWVuUmVhZGVyTGl2ZSA9IGZ1bmN0aW9uIEV1aVNjcmVlblJlYWRlckxpdmUoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgX3JlZiRpc0FjdGl2ZSA9IF9yZWYuaXNBY3RpdmUsXG4gICAgICBpc0FjdGl2ZSA9IF9yZWYkaXNBY3RpdmUgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJGlzQWN0aXZlLFxuICAgICAgX3JlZiRyb2xlID0gX3JlZi5yb2xlLFxuICAgICAgcm9sZSA9IF9yZWYkcm9sZSA9PT0gdm9pZCAwID8gJ3N0YXR1cycgOiBfcmVmJHJvbGUsXG4gICAgICBfcmVmJGFyaWFMaXZlID0gX3JlZlsnYXJpYS1saXZlJ10sXG4gICAgICBhcmlhTGl2ZSA9IF9yZWYkYXJpYUxpdmUgPT09IHZvaWQgMCA/ICdwb2xpdGUnIDogX3JlZiRhcmlhTGl2ZSxcbiAgICAgIF9yZWYkZm9jdXNSZWdpb25PblRleCA9IF9yZWYuZm9jdXNSZWdpb25PblRleHRDaGFuZ2UsXG4gICAgICBmb2N1c1JlZ2lvbk9uVGV4dENoYW5nZSA9IF9yZWYkZm9jdXNSZWdpb25PblRleCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGZvY3VzUmVnaW9uT25UZXg7XG5cbiAgdmFyIF91c2VTdGF0ZSA9IHVzZVN0YXRlKGZhbHNlKSxcbiAgICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgICAgdG9nZ2xlID0gX3VzZVN0YXRlMlswXSxcbiAgICAgIHNldFRvZ2dsZSA9IF91c2VTdGF0ZTJbMV07XG5cbiAgdmFyIGZvY3VzUmVmID0gdXNlUmVmKG51bGwpO1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHNldFRvZ2dsZShmdW5jdGlvbiAodG9nZ2xlKSB7XG4gICAgICByZXR1cm4gIXRvZ2dsZTtcbiAgICB9KTtcbiAgfSwgW2NoaWxkcmVuXSk7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGZvY3VzUmVmLmN1cnJlbnQgIT09IG51bGwgJiYgZm9jdXNSZWdpb25PblRleHRDaGFuZ2UpIHtcbiAgICAgIGZvY3VzUmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICB9XG4gIH0sIFt0b2dnbGUsIGZvY3VzUmVnaW9uT25UZXh0Q2hhbmdlXSk7XG4gIHJldHVybiAoXG4gICAgLyoqXG4gICAgICogSW50ZW50aW9uYWxseSB1c2VzIHR3byBwZXJzaXN0ZW50IGxpdmUgcmVnaW9ucyB3aXRoIG9zY2lsbGF0aW5nIGNvbnRlbnQgdXBkYXRlcy5cbiAgICAgKiBUaGlzIHJlc29sdmVzIHRoZSBwcm9ibGVtIG9mIGR1cGxpY2F0ZSBzY3JlZW4gcmVhZGVyIGFubm91bmNlbWVudHMgaW4gcmFwaWQgc3VjY2Vzc2lvblxuICAgICAqIGNhdXNlZCBieSBSZWFjdCdzIHZpcnR1YWwgRE9NIGJlaGF2aW91ciAoaHR0cHM6Ly9naXRodWIuY29tL252YWNjZXNzL252ZGEvaXNzdWVzLzc5OTYjaXNzdWVjb21tZW50LTQxMzY0MTcwOSlcbiAgICAgKlxuICAgICAqIEFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vYWxwaGFnb3YvYWNjZXNzaWJsZS1hdXRvY29tcGxldGUvYmxvYi9hNzEwNmYwMzE1MDk0MWZjMTVlNmMxY2ViMGE5MGU4ODcyZmE4NmVmL3NyYy9zdGF0dXMuanNcbiAgICAgKiBEZWJvdW5jaW5nIHdhcyBub3QgbmVlZGVkIGZvciB0aGlzIGNhc2UsIGJ1dCBjb3VsZCBwcm92ZSB0byBiZSB1c2VmdWwgZm9yIGZ1dHVyZSB1c2UgY2FzZXMuXG4gICAgICogU2VlIGFsc28gaHR0cHM6Ly9naXRodWIuY29tL0FsbWVyb1N0ZXluL3JlYWN0LWFyaWEtbGl2ZSBhbmQgaHR0cHM6Ly9naXRodWIuY29tL2RlcXVlbGFicy9uZ0ExMXlcbiAgICAgKiBmb3IgbW9yZSBleGFtcGxlcyBvZiB0aGUgZG91YmxlIHJlZ2lvbiBhcHByb2FjaC5cbiAgICAgKi9cbiAgICBfX19FbW90aW9uSlNYKEV1aVNjcmVlblJlYWRlck9ubHksIG51bGwsIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgcmVmOiBmb2N1c1JlZixcbiAgICAgIHRhYkluZGV4OiBmb2N1c1JlZ2lvbk9uVGV4dENoYW5nZSA/IC0xIDogdW5kZWZpbmVkXG4gICAgfSwgX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICByb2xlOiByb2xlLFxuICAgICAgXCJhcmlhLWF0b21pY1wiOiBcInRydWVcIiAvLyBTZXR0aW5nIGBhcmlhLWhpZGRlbmAgYW5kIHNldHRpbmcgYGFyaWEtbGl2ZWAgdG8gXCJvZmZcIiBwcmV2ZW50c1xuICAgICAgLy8gZG91YmxlIGFubm91bmNlbWVudHMgZnJvbSBWTyB3aGVuIGBmb2N1c1JlZ2lvbk9uVGV4dENoYW5nZWAgaXMgdHJ1ZVxuICAgICAgLFxuICAgICAgXCJhcmlhLWhpZGRlblwiOiB0b2dnbGUgPyB1bmRlZmluZWQgOiAndHJ1ZScsXG4gICAgICBcImFyaWEtbGl2ZVwiOiBmb2N1c1JlZ2lvbk9uVGV4dENoYW5nZSA/ICdvZmYnIDogYXJpYUxpdmVcbiAgICB9LCBpc0FjdGl2ZSAmJiB0b2dnbGUgPyBjaGlsZHJlbiA6ICcnKSwgX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICByb2xlOiByb2xlLFxuICAgICAgXCJhcmlhLWF0b21pY1wiOiBcInRydWVcIixcbiAgICAgIFwiYXJpYS1oaWRkZW5cIjogIXRvZ2dsZSA/IHVuZGVmaW5lZCA6ICd0cnVlJyxcbiAgICAgIFwiYXJpYS1saXZlXCI6IGZvY3VzUmVnaW9uT25UZXh0Q2hhbmdlID8gJ29mZicgOiBhcmlhTGl2ZVxuICAgIH0sIGlzQWN0aXZlICYmICF0b2dnbGUgPyBjaGlsZHJlbiA6ICcnKSkpXG4gICk7XG59O1xuRXVpU2NyZWVuUmVhZGVyTGl2ZS5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gbWFrZSBzY3JlZW4gcmVhZGVycyBhd2FyZSBvZiB0aGUgY29udGVudFxuICAgICAqL1xuICBpc0FjdGl2ZTogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogQ29udGVudCBmb3Igc2NyZWVuIHJlYWRlcnMgdG8gYW5ub3VuY2VcbiAgICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgICAqIGByb2xlYCBhdHRyaWJ1dGUgZm9yIGJvdGggbGl2ZSByZWdpb25zLlxuICAgICAqXG4gICAgICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQWNjZXNzaWJpbGl0eS9BUklBL0FSSUFfTGl2ZV9SZWdpb25zI3JvbGVzX3dpdGhfaW1wbGljaXRfbGl2ZV9yZWdpb25fYXR0cmlidXRlc1xuICAgICAqL1xuICByb2xlOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIGBhcmlhLWxpdmVgIGF0dHJpYnV0ZSBmb3IgYm90aCBsaXZlIHJlZ2lvbnNcbiAgICAgKi9cbiAgXCJhcmlhLWxpdmVcIjogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBPbiBgY2hpbGRyZW5gL3RleHQgY2hhbmdlLCB0aGUgcmVnaW9uIHdpbGwgYXV0by1mb2N1cyBpdHNlbGYsIGNhdXNpbmcgc2NyZWVuIHJlYWRlcnNcbiAgICAgKiB0byBhdXRvbWF0aWNhbGx5IHJlYWQgb3V0IHRoZSB0ZXh0IGNvbnRlbnQuIFRoaXMgcHJvcCBzaG91bGQgcHJpbWFyaWx5IGJlIHVzZWQgZm9yXG4gICAgICogbmF2aWdhdGlvbiBvciBwYWdlIGNoYW5nZXMsIHdoZXJlIHByb2dyYW1tYXRpY2FsbHkgcmVzZXR0aW5nIGZvY3VzIGxvY2F0aW9uIGJhY2sgdG9cbiAgICAgKiBhIGNlcnRhaW4gcGFydCBvZiB0aGUgcGFnZSBpcyBkZXNpcmVkLlxuICAgICAqL1xuICBmb2N1c1JlZ2lvbk9uVGV4dENoYW5nZTogUHJvcFR5cGVzLmJvb2xcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IGNsb25lRWxlbWVudFdpdGhDc3MgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy90aGVtZS9jbG9uZV9lbGVtZW50JztcbmltcG9ydCB7IGV1aVNjcmVlblJlYWRlck9ubHlTdHlsZXMgfSBmcm9tICcuL3NjcmVlbl9yZWFkZXJfb25seS5zdHlsZXMnO1xuZXhwb3J0IHZhciBFdWlTY3JlZW5SZWFkZXJPbmx5ID0gZnVuY3Rpb24gRXVpU2NyZWVuUmVhZGVyT25seShfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIHNob3dPbkZvY3VzID0gX3JlZi5zaG93T25Gb2N1cztcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKGNsYXNzTmFtZSwgY2hpbGRyZW4ucHJvcHMuY2xhc3NOYW1lKTtcbiAgdmFyIHN0eWxlcyA9IGV1aVNjcmVlblJlYWRlck9ubHlTdHlsZXMoc2hvd09uRm9jdXMpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlTY3JlZW5SZWFkZXJPbmx5XTtcbiAgdmFyIHByb3BzID0ge1xuICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5sZW5ndGggPyBjbGFzc2VzIDogdW5kZWZpbmVkLFxuICAgIGNzczogY3NzU3R5bGVzXG4gIH07XG4gIHJldHVybiBjbG9uZUVsZW1lbnRXaXRoQ3NzKGNoaWxkcmVuLCBwcm9wcyk7XG59O1xuRXVpU2NyZWVuUmVhZGVyT25seS5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgICAqIFJlYWN0RWxlbWVudCB0byByZW5kZXIgYXMgdGhpcyBjb21wb25lbnQncyBjb250ZW50XG4gICAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgICAqIEZvciBrZXlib2FyZCBuYXZpZ2F0aW9uLCBmb3JjZSBjb250ZW50IHRvIGRpc3BsYXkgdmlzdWFsbHkgdXBvbiBmb2N1cy5cbiAgICAgKi9cbiAgc2hvd09uRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmdcbn07IiwgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUNvbnRleHQsIGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY3JlYXRlQ2FjaGUgZnJvbSAnQGVtb3Rpb24vY2FjaGUnO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHMnO1xuaW1wb3J0IHdlYWtNZW1vaXplIGZyb20gJ0BlbW90aW9uL3dlYWstbWVtb2l6ZSc7XG5pbXBvcnQgaG9pc3ROb25SZWFjdFN0YXRpY3MgZnJvbSAnLi4vX2lzb2xhdGVkLWhucnMvZGlzdC9lbW90aW9uLXJlYWN0LV9pc29sYXRlZC1obnJzLmJyb3dzZXIuZXNtLmpzJztcbmltcG9ydCB7IGdldFJlZ2lzdGVyZWRTdHlsZXMsIHJlZ2lzdGVyU3R5bGVzLCBpbnNlcnRTdHlsZXMgfSBmcm9tICdAZW1vdGlvbi91dGlscyc7XG5pbXBvcnQgeyBzZXJpYWxpemVTdHlsZXMgfSBmcm9tICdAZW1vdGlvbi9zZXJpYWxpemUnO1xuaW1wb3J0IHsgdXNlSW5zZXJ0aW9uRWZmZWN0QWx3YXlzV2l0aFN5bmNGYWxsYmFjayB9IGZyb20gJ0BlbW90aW9uL3VzZS1pbnNlcnRpb24tZWZmZWN0LXdpdGgtZmFsbGJhY2tzJztcblxudmFyIGlzQnJvd3NlciA9IFwib2JqZWN0XCIgIT09ICd1bmRlZmluZWQnO1xudmFyIGhhc093biA9IHt9Lmhhc093blByb3BlcnR5O1xuXG52YXIgRW1vdGlvbkNhY2hlQ29udGV4dCA9IC8qICNfX1BVUkVfXyAqL1JlYWN0LmNyZWF0ZUNvbnRleHQoIC8vIHdlJ3JlIGRvaW5nIHRoaXMgdG8gYXZvaWQgcHJlY29uc3RydWN0J3MgZGVhZCBjb2RlIGVsaW1pbmF0aW9uIGluIHRoaXMgb25lIGNhc2Vcbi8vIGJlY2F1c2UgdGhpcyBtb2R1bGUgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciB0aGUgYnJvd3NlciBhbmQgbm9kZVxuLy8gYnV0IGl0J3MgYWxzbyByZXF1aXJlZCBpbiByZWFjdCBuYXRpdmUgYW5kIHNpbWlsYXIgZW52aXJvbm1lbnRzIHNvbWV0aW1lc1xuLy8gYW5kIHdlIGNvdWxkIGhhdmUgYSBzcGVjaWFsIGJ1aWxkIGp1c3QgZm9yIHRoYXRcbi8vIGJ1dCB0aGlzIGlzIG11Y2ggZWFzaWVyIGFuZCB0aGUgbmF0aXZlIHBhY2thZ2VzXG4vLyBtaWdodCB1c2UgYSBkaWZmZXJlbnQgdGhlbWUgY29udGV4dCBpbiB0aGUgZnV0dXJlIGFueXdheVxudHlwZW9mIEhUTUxFbGVtZW50ICE9PSAndW5kZWZpbmVkJyA/IC8qICNfX1BVUkVfXyAqL2NyZWF0ZUNhY2hlKHtcbiAga2V5OiAnY3NzJ1xufSkgOiBudWxsKTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgRW1vdGlvbkNhY2hlQ29udGV4dC5kaXNwbGF5TmFtZSA9ICdFbW90aW9uQ2FjaGVDb250ZXh0Jztcbn1cblxudmFyIENhY2hlUHJvdmlkZXIgPSBFbW90aW9uQ2FjaGVDb250ZXh0LlByb3ZpZGVyO1xudmFyIF9fdW5zYWZlX3VzZUVtb3Rpb25DYWNoZSA9IGZ1bmN0aW9uIHVzZUVtb3Rpb25DYWNoZSgpIHtcbiAgcmV0dXJuIHVzZUNvbnRleHQoRW1vdGlvbkNhY2hlQ29udGV4dCk7XG59O1xuXG52YXIgd2l0aEVtb3Rpb25DYWNoZSA9IGZ1bmN0aW9uIHdpdGhFbW90aW9uQ2FjaGUoZnVuYykge1xuICAvLyAkRmxvd0ZpeE1lXG4gIHJldHVybiAvKiNfX1BVUkVfXyovZm9yd2FyZFJlZihmdW5jdGlvbiAocHJvcHMsIHJlZikge1xuICAgIC8vIHRoZSBjYWNoZSB3aWxsIG5ldmVyIGJlIG51bGwgaW4gdGhlIGJyb3dzZXJcbiAgICB2YXIgY2FjaGUgPSB1c2VDb250ZXh0KEVtb3Rpb25DYWNoZUNvbnRleHQpO1xuICAgIHJldHVybiBmdW5jKHByb3BzLCBjYWNoZSwgcmVmKTtcbiAgfSk7XG59O1xuXG5pZiAoIWlzQnJvd3Nlcikge1xuICB3aXRoRW1vdGlvbkNhY2hlID0gZnVuY3Rpb24gd2l0aEVtb3Rpb25DYWNoZShmdW5jKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChwcm9wcykge1xuICAgICAgdmFyIGNhY2hlID0gdXNlQ29udGV4dChFbW90aW9uQ2FjaGVDb250ZXh0KTtcblxuICAgICAgaWYgKGNhY2hlID09PSBudWxsKSB7XG4gICAgICAgIC8vIHllcywgd2UncmUgcG90ZW50aWFsbHkgY3JlYXRpbmcgdGhpcyBvbiBldmVyeSByZW5kZXJcbiAgICAgICAgLy8gaXQgZG9lc24ndCBhY3R1YWxseSBtYXR0ZXIgdGhvdWdoIHNpbmNlIGl0J3Mgb25seSBvbiB0aGUgc2VydmVyXG4gICAgICAgIC8vIHNvIHRoZXJlIHdpbGwgb25seSBldmVyeSBiZSBhIHNpbmdsZSByZW5kZXJcbiAgICAgICAgLy8gdGhhdCBjb3VsZCBjaGFuZ2UgaW4gdGhlIGZ1dHVyZSBiZWNhdXNlIG9mIHN1c3BlbnNlIGFuZCBldGMuIGJ1dCBmb3Igbm93LFxuICAgICAgICAvLyB0aGlzIHdvcmtzIGFuZCBpIGRvbid0IHdhbnQgdG8gb3B0aW1pc2UgZm9yIGEgZnV0dXJlIHRoaW5nIHRoYXQgd2UgYXJlbid0IHN1cmUgYWJvdXRcbiAgICAgICAgY2FjaGUgPSBjcmVhdGVDYWNoZSh7XG4gICAgICAgICAga2V5OiAnY3NzJ1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEVtb3Rpb25DYWNoZUNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgICAgICB2YWx1ZTogY2FjaGVcbiAgICAgICAgfSwgZnVuYyhwcm9wcywgY2FjaGUpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmdW5jKHByb3BzLCBjYWNoZSk7XG4gICAgICB9XG4gICAgfTtcbiAgfTtcbn1cblxudmFyIFRoZW1lQ29udGV4dCA9IC8qICNfX1BVUkVfXyAqL1JlYWN0LmNyZWF0ZUNvbnRleHQoe30pO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBUaGVtZUNvbnRleHQuZGlzcGxheU5hbWUgPSAnRW1vdGlvblRoZW1lQ29udGV4dCc7XG59XG5cbnZhciB1c2VUaGVtZSA9IGZ1bmN0aW9uIHVzZVRoZW1lKCkge1xuICByZXR1cm4gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xufTtcblxudmFyIGdldFRoZW1lID0gZnVuY3Rpb24gZ2V0VGhlbWUob3V0ZXJUaGVtZSwgdGhlbWUpIHtcbiAgaWYgKHR5cGVvZiB0aGVtZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciBtZXJnZWRUaGVtZSA9IHRoZW1lKG91dGVyVGhlbWUpO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgKG1lcmdlZFRoZW1lID09IG51bGwgfHwgdHlwZW9mIG1lcmdlZFRoZW1lICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KG1lcmdlZFRoZW1lKSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignW1RoZW1lUHJvdmlkZXJdIFBsZWFzZSByZXR1cm4gYW4gb2JqZWN0IGZyb20geW91ciB0aGVtZSBmdW5jdGlvbiwgaS5lLiB0aGVtZT17KCkgPT4gKHt9KX0hJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lcmdlZFRoZW1lO1xuICB9XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgKHRoZW1lID09IG51bGwgfHwgdHlwZW9mIHRoZW1lICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KHRoZW1lKSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1tUaGVtZVByb3ZpZGVyXSBQbGVhc2UgbWFrZSB5b3VyIHRoZW1lIHByb3AgYSBwbGFpbiBvYmplY3QnKTtcbiAgfVxuXG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgb3V0ZXJUaGVtZSwgdGhlbWUpO1xufTtcblxudmFyIGNyZWF0ZUNhY2hlV2l0aFRoZW1lID0gLyogI19fUFVSRV9fICovd2Vha01lbW9pemUoZnVuY3Rpb24gKG91dGVyVGhlbWUpIHtcbiAgcmV0dXJuIHdlYWtNZW1vaXplKGZ1bmN0aW9uICh0aGVtZSkge1xuICAgIHJldHVybiBnZXRUaGVtZShvdXRlclRoZW1lLCB0aGVtZSk7XG4gIH0pO1xufSk7XG52YXIgVGhlbWVQcm92aWRlciA9IGZ1bmN0aW9uIFRoZW1lUHJvdmlkZXIocHJvcHMpIHtcbiAgdmFyIHRoZW1lID0gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xuXG4gIGlmIChwcm9wcy50aGVtZSAhPT0gdGhlbWUpIHtcbiAgICB0aGVtZSA9IGNyZWF0ZUNhY2hlV2l0aFRoZW1lKHRoZW1lKShwcm9wcy50aGVtZSk7XG4gIH1cblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVGhlbWVDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IHRoZW1lXG4gIH0sIHByb3BzLmNoaWxkcmVuKTtcbn07XG5mdW5jdGlvbiB3aXRoVGhlbWUoQ29tcG9uZW50KSB7XG4gIHZhciBjb21wb25lbnROYW1lID0gQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8IENvbXBvbmVudC5uYW1lIHx8ICdDb21wb25lbnQnO1xuXG4gIHZhciByZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIocHJvcHMsIHJlZikge1xuICAgIHZhciB0aGVtZSA9IFJlYWN0LnVzZUNvbnRleHQoVGhlbWVDb250ZXh0KTtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ29tcG9uZW50LCBfZXh0ZW5kcyh7XG4gICAgICB0aGVtZTogdGhlbWUsXG4gICAgICByZWY6IHJlZlxuICAgIH0sIHByb3BzKSk7XG4gIH07IC8vICRGbG93Rml4TWVcblxuXG4gIHZhciBXaXRoVGhlbWUgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihyZW5kZXIpO1xuICBXaXRoVGhlbWUuZGlzcGxheU5hbWUgPSBcIldpdGhUaGVtZShcIiArIGNvbXBvbmVudE5hbWUgKyBcIilcIjtcbiAgcmV0dXJuIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKFdpdGhUaGVtZSwgQ29tcG9uZW50KTtcbn1cblxudmFyIGdldExhc3RQYXJ0ID0gZnVuY3Rpb24gZ2V0TGFzdFBhcnQoZnVuY3Rpb25OYW1lKSB7XG4gIC8vIFRoZSBtYXRjaCBtYXkgYmUgc29tZXRoaW5nIGxpa2UgJ09iamVjdC5jcmVhdGVFbW90aW9uUHJvcHMnIG9yXG4gIC8vICdMb2FkZXIucHJvdG90eXBlLnJlbmRlcidcbiAgdmFyIHBhcnRzID0gZnVuY3Rpb25OYW1lLnNwbGl0KCcuJyk7XG4gIHJldHVybiBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXTtcbn07XG5cbnZhciBnZXRGdW5jdGlvbk5hbWVGcm9tU3RhY2tUcmFjZUxpbmUgPSBmdW5jdGlvbiBnZXRGdW5jdGlvbk5hbWVGcm9tU3RhY2tUcmFjZUxpbmUobGluZSkge1xuICAvLyBWOFxuICB2YXIgbWF0Y2ggPSAvXlxccythdFxccysoW0EtWmEtejAtOSQuXSspXFxzLy5leGVjKGxpbmUpO1xuICBpZiAobWF0Y2gpIHJldHVybiBnZXRMYXN0UGFydChtYXRjaFsxXSk7IC8vIFNhZmFyaSAvIEZpcmVmb3hcblxuICBtYXRjaCA9IC9eKFtBLVphLXowLTkkLl0rKUAvLmV4ZWMobGluZSk7XG4gIGlmIChtYXRjaCkgcmV0dXJuIGdldExhc3RQYXJ0KG1hdGNoWzFdKTtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbnZhciBpbnRlcm5hbFJlYWN0RnVuY3Rpb25OYW1lcyA9IC8qICNfX1BVUkVfXyAqL25ldyBTZXQoWydyZW5kZXJXaXRoSG9va3MnLCAncHJvY2Vzc0NoaWxkJywgJ2ZpbmlzaENsYXNzQ29tcG9uZW50JywgJ3JlbmRlclRvU3RyaW5nJ10pOyAvLyBUaGVzZSBpZGVudGlmaWVycyBjb21lIGZyb20gZXJyb3Igc3RhY2tzLCBzbyB0aGV5IGhhdmUgdG8gYmUgdmFsaWQgSlNcbi8vIGlkZW50aWZpZXJzLCB0aHVzIHdlIG9ubHkgbmVlZCB0byByZXBsYWNlIHdoYXQgaXMgYSB2YWxpZCBjaGFyYWN0ZXIgZm9yIEpTLFxuLy8gYnV0IG5vdCBmb3IgQ1NTLlxuXG52YXIgc2FuaXRpemVJZGVudGlmaWVyID0gZnVuY3Rpb24gc2FuaXRpemVJZGVudGlmaWVyKGlkZW50aWZpZXIpIHtcbiAgcmV0dXJuIGlkZW50aWZpZXIucmVwbGFjZSgvXFwkL2csICctJyk7XG59O1xuXG52YXIgZ2V0TGFiZWxGcm9tU3RhY2tUcmFjZSA9IGZ1bmN0aW9uIGdldExhYmVsRnJvbVN0YWNrVHJhY2Uoc3RhY2tUcmFjZSkge1xuICBpZiAoIXN0YWNrVHJhY2UpIHJldHVybiB1bmRlZmluZWQ7XG4gIHZhciBsaW5lcyA9IHN0YWNrVHJhY2Uuc3BsaXQoJ1xcbicpO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZnVuY3Rpb25OYW1lID0gZ2V0RnVuY3Rpb25OYW1lRnJvbVN0YWNrVHJhY2VMaW5lKGxpbmVzW2ldKTsgLy8gVGhlIGZpcnN0IGxpbmUgb2YgVjggc3RhY2sgdHJhY2VzIGlzIGp1c3QgXCJFcnJvclwiXG5cbiAgICBpZiAoIWZ1bmN0aW9uTmFtZSkgY29udGludWU7IC8vIElmIHdlIHJlYWNoIG9uZSBvZiB0aGVzZSwgd2UgaGF2ZSBnb25lIHRvbyBmYXIgYW5kIHNob3VsZCBxdWl0XG5cbiAgICBpZiAoaW50ZXJuYWxSZWFjdEZ1bmN0aW9uTmFtZXMuaGFzKGZ1bmN0aW9uTmFtZSkpIGJyZWFrOyAvLyBUaGUgY29tcG9uZW50IG5hbWUgaXMgdGhlIGZpcnN0IGZ1bmN0aW9uIGluIHRoZSBzdGFjayB0aGF0IHN0YXJ0cyB3aXRoIGFuXG4gICAgLy8gdXBwZXJjYXNlIGxldHRlclxuXG4gICAgaWYgKC9eW0EtWl0vLnRlc3QoZnVuY3Rpb25OYW1lKSkgcmV0dXJuIHNhbml0aXplSWRlbnRpZmllcihmdW5jdGlvbk5hbWUpO1xuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbnZhciB0eXBlUHJvcE5hbWUgPSAnX19FTU9USU9OX1RZUEVfUExFQVNFX0RPX05PVF9VU0VfXyc7XG52YXIgbGFiZWxQcm9wTmFtZSA9ICdfX0VNT1RJT05fTEFCRUxfUExFQVNFX0RPX05PVF9VU0VfXyc7XG52YXIgY3JlYXRlRW1vdGlvblByb3BzID0gZnVuY3Rpb24gY3JlYXRlRW1vdGlvblByb3BzKHR5cGUsIHByb3BzKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHR5cGVvZiBwcm9wcy5jc3MgPT09ICdzdHJpbmcnICYmIC8vIGNoZWNrIGlmIHRoZXJlIGlzIGEgY3NzIGRlY2xhcmF0aW9uXG4gIHByb3BzLmNzcy5pbmRleE9mKCc6JykgIT09IC0xKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiU3RyaW5ncyBhcmUgbm90IGFsbG93ZWQgYXMgY3NzIHByb3AgdmFsdWVzLCBwbGVhc2Ugd3JhcCBpdCBpbiBhIGNzcyB0ZW1wbGF0ZSBsaXRlcmFsIGZyb20gJ0BlbW90aW9uL3JlYWN0JyBsaWtlIHRoaXM6IGNzc2BcIiArIHByb3BzLmNzcyArIFwiYFwiKTtcbiAgfVxuXG4gIHZhciBuZXdQcm9wcyA9IHt9O1xuXG4gIGZvciAodmFyIGtleSBpbiBwcm9wcykge1xuICAgIGlmIChoYXNPd24uY2FsbChwcm9wcywga2V5KSkge1xuICAgICAgbmV3UHJvcHNba2V5XSA9IHByb3BzW2tleV07XG4gICAgfVxuICB9XG5cbiAgbmV3UHJvcHNbdHlwZVByb3BOYW1lXSA9IHR5cGU7IC8vIEZvciBwZXJmb3JtYW5jZSwgb25seSBjYWxsIGdldExhYmVsRnJvbVN0YWNrVHJhY2UgaW4gZGV2ZWxvcG1lbnQgYW5kIHdoZW5cbiAgLy8gdGhlIGxhYmVsIGhhc24ndCBhbHJlYWR5IGJlZW4gY29tcHV0ZWRcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhIXByb3BzLmNzcyAmJiAodHlwZW9mIHByb3BzLmNzcyAhPT0gJ29iamVjdCcgfHwgdHlwZW9mIHByb3BzLmNzcy5uYW1lICE9PSAnc3RyaW5nJyB8fCBwcm9wcy5jc3MubmFtZS5pbmRleE9mKCctJykgPT09IC0xKSkge1xuICAgIHZhciBsYWJlbCA9IGdldExhYmVsRnJvbVN0YWNrVHJhY2UobmV3IEVycm9yKCkuc3RhY2spO1xuICAgIGlmIChsYWJlbCkgbmV3UHJvcHNbbGFiZWxQcm9wTmFtZV0gPSBsYWJlbDtcbiAgfVxuXG4gIHJldHVybiBuZXdQcm9wcztcbn07XG5cbnZhciBJbnNlcnRpb24gPSBmdW5jdGlvbiBJbnNlcnRpb24oX3JlZikge1xuICB2YXIgY2FjaGUgPSBfcmVmLmNhY2hlLFxuICAgICAgc2VyaWFsaXplZCA9IF9yZWYuc2VyaWFsaXplZCxcbiAgICAgIGlzU3RyaW5nVGFnID0gX3JlZi5pc1N0cmluZ1RhZztcbiAgcmVnaXN0ZXJTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQsIGlzU3RyaW5nVGFnKTtcbiAgdXNlSW5zZXJ0aW9uRWZmZWN0QWx3YXlzV2l0aFN5bmNGYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGluc2VydFN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgaXNTdHJpbmdUYWcpO1xuICB9KTtcblxuICByZXR1cm4gbnVsbDtcbn07XG5cbnZhciBFbW90aW9uID0gLyogI19fUFVSRV9fICovd2l0aEVtb3Rpb25DYWNoZShmdW5jdGlvbiAocHJvcHMsIGNhY2hlLCByZWYpIHtcbiAgdmFyIGNzc1Byb3AgPSBwcm9wcy5jc3M7IC8vIHNvIHRoYXQgdXNpbmcgYGNzc2AgZnJvbSBgZW1vdGlvbmAgYW5kIHBhc3NpbmcgdGhlIHJlc3VsdCB0byB0aGUgY3NzIHByb3Agd29ya3NcbiAgLy8gbm90IHBhc3NpbmcgdGhlIHJlZ2lzdGVyZWQgY2FjaGUgdG8gc2VyaWFsaXplU3R5bGVzIGJlY2F1c2UgaXQgd291bGRcbiAgLy8gbWFrZSBjZXJ0YWluIGJhYmVsIG9wdGltaXNhdGlvbnMgbm90IHBvc3NpYmxlXG5cbiAgaWYgKHR5cGVvZiBjc3NQcm9wID09PSAnc3RyaW5nJyAmJiBjYWNoZS5yZWdpc3RlcmVkW2Nzc1Byb3BdICE9PSB1bmRlZmluZWQpIHtcbiAgICBjc3NQcm9wID0gY2FjaGUucmVnaXN0ZXJlZFtjc3NQcm9wXTtcbiAgfVxuXG4gIHZhciBXcmFwcGVkQ29tcG9uZW50ID0gcHJvcHNbdHlwZVByb3BOYW1lXTtcbiAgdmFyIHJlZ2lzdGVyZWRTdHlsZXMgPSBbY3NzUHJvcF07XG4gIHZhciBjbGFzc05hbWUgPSAnJztcblxuICBpZiAodHlwZW9mIHByb3BzLmNsYXNzTmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICBjbGFzc05hbWUgPSBnZXRSZWdpc3RlcmVkU3R5bGVzKGNhY2hlLnJlZ2lzdGVyZWQsIHJlZ2lzdGVyZWRTdHlsZXMsIHByb3BzLmNsYXNzTmFtZSk7XG4gIH0gZWxzZSBpZiAocHJvcHMuY2xhc3NOYW1lICE9IG51bGwpIHtcbiAgICBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUgKyBcIiBcIjtcbiAgfVxuXG4gIHZhciBzZXJpYWxpemVkID0gc2VyaWFsaXplU3R5bGVzKHJlZ2lzdGVyZWRTdHlsZXMsIHVuZGVmaW5lZCwgUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpKTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBzZXJpYWxpemVkLm5hbWUuaW5kZXhPZignLScpID09PSAtMSkge1xuICAgIHZhciBsYWJlbEZyb21TdGFjayA9IHByb3BzW2xhYmVsUHJvcE5hbWVdO1xuXG4gICAgaWYgKGxhYmVsRnJvbVN0YWNrKSB7XG4gICAgICBzZXJpYWxpemVkID0gc2VyaWFsaXplU3R5bGVzKFtzZXJpYWxpemVkLCAnbGFiZWw6JyArIGxhYmVsRnJvbVN0YWNrICsgJzsnXSk7XG4gICAgfVxuICB9XG5cbiAgY2xhc3NOYW1lICs9IGNhY2hlLmtleSArIFwiLVwiICsgc2VyaWFsaXplZC5uYW1lO1xuICB2YXIgbmV3UHJvcHMgPSB7fTtcblxuICBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHtcbiAgICBpZiAoaGFzT3duLmNhbGwocHJvcHMsIGtleSkgJiYga2V5ICE9PSAnY3NzJyAmJiBrZXkgIT09IHR5cGVQcm9wTmFtZSAmJiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJyB8fCBrZXkgIT09IGxhYmVsUHJvcE5hbWUpKSB7XG4gICAgICBuZXdQcm9wc1trZXldID0gcHJvcHNba2V5XTtcbiAgICB9XG4gIH1cblxuICBuZXdQcm9wcy5yZWYgPSByZWY7XG4gIG5ld1Byb3BzLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJbnNlcnRpb24sIHtcbiAgICBjYWNoZTogY2FjaGUsXG4gICAgc2VyaWFsaXplZDogc2VyaWFsaXplZCxcbiAgICBpc1N0cmluZ1RhZzogdHlwZW9mIFdyYXBwZWRDb21wb25lbnQgPT09ICdzdHJpbmcnXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChXcmFwcGVkQ29tcG9uZW50LCBuZXdQcm9wcykpO1xufSk7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIEVtb3Rpb24uZGlzcGxheU5hbWUgPSAnRW1vdGlvbkNzc1Byb3BJbnRlcm5hbCc7XG59XG5cbnZhciBFbW90aW9uJDEgPSBFbW90aW9uO1xuXG5leHBvcnQgeyBDYWNoZVByb3ZpZGVyIGFzIEMsIEVtb3Rpb24kMSBhcyBFLCBUaGVtZUNvbnRleHQgYXMgVCwgX191bnNhZmVfdXNlRW1vdGlvbkNhY2hlIGFzIF8sIFRoZW1lUHJvdmlkZXIgYXMgYSwgd2l0aFRoZW1lIGFzIGIsIGNyZWF0ZUVtb3Rpb25Qcm9wcyBhcyBjLCBoYXNPd24gYXMgaCwgaXNCcm93c2VyIGFzIGksIHVzZVRoZW1lIGFzIHUsIHdpdGhFbW90aW9uQ2FjaGUgYXMgdyB9O1xuIiwgIi8qXG5cbkJhc2VkIG9mZiBnbGFtb3IncyBTdHlsZVNoZWV0LCB0aGFua3MgU3VuaWwgXHUyNzY0XHVGRTBGXG5cbmhpZ2ggcGVyZm9ybWFuY2UgU3R5bGVTaGVldCBmb3IgY3NzLWluLWpzIHN5c3RlbXNcblxuLSB1c2VzIG11bHRpcGxlIHN0eWxlIHRhZ3MgYmVoaW5kIHRoZSBzY2VuZXMgZm9yIG1pbGxpb25zIG9mIHJ1bGVzXG4tIHVzZXMgYGluc2VydFJ1bGVgIGZvciBhcHBlbmRpbmcgaW4gcHJvZHVjdGlvbiBmb3IgKm11Y2gqIGZhc3RlciBwZXJmb3JtYW5jZVxuXG4vLyB1c2FnZVxuXG5pbXBvcnQgeyBTdHlsZVNoZWV0IH0gZnJvbSAnQGVtb3Rpb24vc2hlZXQnXG5cbmxldCBzdHlsZVNoZWV0ID0gbmV3IFN0eWxlU2hlZXQoeyBrZXk6ICcnLCBjb250YWluZXI6IGRvY3VtZW50LmhlYWQgfSlcblxuc3R5bGVTaGVldC5pbnNlcnQoJyNib3ggeyBib3JkZXI6IDFweCBzb2xpZCByZWQ7IH0nKVxuLSBhcHBlbmRzIGEgY3NzIHJ1bGUgaW50byB0aGUgc3R5bGVzaGVldFxuXG5zdHlsZVNoZWV0LmZsdXNoKClcbi0gZW1wdGllcyB0aGUgc3R5bGVzaGVldCBvZiBhbGwgaXRzIGNvbnRlbnRzXG5cbiovXG4vLyAkRmxvd0ZpeE1lXG5mdW5jdGlvbiBzaGVldEZvclRhZyh0YWcpIHtcbiAgaWYgKHRhZy5zaGVldCkge1xuICAgIC8vICRGbG93Rml4TWVcbiAgICByZXR1cm4gdGFnLnNoZWV0O1xuICB9IC8vIHRoaXMgd2VpcmRuZXNzIGJyb3VnaHQgdG8geW91IGJ5IGZpcmVmb3hcblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBkb2N1bWVudC5zdHlsZVNoZWV0cy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChkb2N1bWVudC5zdHlsZVNoZWV0c1tpXS5vd25lck5vZGUgPT09IHRhZykge1xuICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgcmV0dXJuIGRvY3VtZW50LnN0eWxlU2hlZXRzW2ldO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVTdHlsZUVsZW1lbnQob3B0aW9ucykge1xuICB2YXIgdGFnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgdGFnLnNldEF0dHJpYnV0ZSgnZGF0YS1lbW90aW9uJywgb3B0aW9ucy5rZXkpO1xuXG4gIGlmIChvcHRpb25zLm5vbmNlICE9PSB1bmRlZmluZWQpIHtcbiAgICB0YWcuc2V0QXR0cmlidXRlKCdub25jZScsIG9wdGlvbnMubm9uY2UpO1xuICB9XG5cbiAgdGFnLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKSk7XG4gIHRhZy5zZXRBdHRyaWJ1dGUoJ2RhdGEtcycsICcnKTtcbiAgcmV0dXJuIHRhZztcbn1cblxudmFyIFN0eWxlU2hlZXQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICAvLyBVc2luZyBOb2RlIGluc3RlYWQgb2YgSFRNTEVsZW1lbnQgc2luY2UgY29udGFpbmVyIG1heSBiZSBhIFNoYWRvd1Jvb3RcbiAgZnVuY3Rpb24gU3R5bGVTaGVldChvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMuX2luc2VydFRhZyA9IGZ1bmN0aW9uICh0YWcpIHtcbiAgICAgIHZhciBiZWZvcmU7XG5cbiAgICAgIGlmIChfdGhpcy50YWdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBpZiAoX3RoaXMuaW5zZXJ0aW9uUG9pbnQpIHtcbiAgICAgICAgICBiZWZvcmUgPSBfdGhpcy5pbnNlcnRpb25Qb2ludC5uZXh0U2libGluZztcbiAgICAgICAgfSBlbHNlIGlmIChfdGhpcy5wcmVwZW5kKSB7XG4gICAgICAgICAgYmVmb3JlID0gX3RoaXMuY29udGFpbmVyLmZpcnN0Q2hpbGQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYmVmb3JlID0gX3RoaXMuYmVmb3JlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBiZWZvcmUgPSBfdGhpcy50YWdzW190aGlzLnRhZ3MubGVuZ3RoIC0gMV0ubmV4dFNpYmxpbmc7XG4gICAgICB9XG5cbiAgICAgIF90aGlzLmNvbnRhaW5lci5pbnNlcnRCZWZvcmUodGFnLCBiZWZvcmUpO1xuXG4gICAgICBfdGhpcy50YWdzLnB1c2godGFnKTtcbiAgICB9O1xuXG4gICAgdGhpcy5pc1NwZWVkeSA9IG9wdGlvbnMuc3BlZWR5ID09PSB1bmRlZmluZWQgPyBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nIDogb3B0aW9ucy5zcGVlZHk7XG4gICAgdGhpcy50YWdzID0gW107XG4gICAgdGhpcy5jdHIgPSAwO1xuICAgIHRoaXMubm9uY2UgPSBvcHRpb25zLm5vbmNlOyAvLyBrZXkgaXMgdGhlIHZhbHVlIG9mIHRoZSBkYXRhLWVtb3Rpb24gYXR0cmlidXRlLCBpdCdzIHVzZWQgdG8gaWRlbnRpZnkgZGlmZmVyZW50IHNoZWV0c1xuXG4gICAgdGhpcy5rZXkgPSBvcHRpb25zLmtleTtcbiAgICB0aGlzLmNvbnRhaW5lciA9IG9wdGlvbnMuY29udGFpbmVyO1xuICAgIHRoaXMucHJlcGVuZCA9IG9wdGlvbnMucHJlcGVuZDtcbiAgICB0aGlzLmluc2VydGlvblBvaW50ID0gb3B0aW9ucy5pbnNlcnRpb25Qb2ludDtcbiAgICB0aGlzLmJlZm9yZSA9IG51bGw7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gU3R5bGVTaGVldC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmh5ZHJhdGUgPSBmdW5jdGlvbiBoeWRyYXRlKG5vZGVzKSB7XG4gICAgbm9kZXMuZm9yRWFjaCh0aGlzLl9pbnNlcnRUYWcpO1xuICB9O1xuXG4gIF9wcm90by5pbnNlcnQgPSBmdW5jdGlvbiBpbnNlcnQocnVsZSkge1xuICAgIC8vIHRoZSBtYXggbGVuZ3RoIGlzIGhvdyBtYW55IHJ1bGVzIHdlIGhhdmUgcGVyIHN0eWxlIHRhZywgaXQncyA2NTAwMCBpbiBzcGVlZHkgbW9kZVxuICAgIC8vIGl0J3MgMSBpbiBkZXYgYmVjYXVzZSB3ZSBpbnNlcnQgc291cmNlIG1hcHMgdGhhdCBtYXAgYSBzaW5nbGUgcnVsZSB0byBhIGxvY2F0aW9uXG4gICAgLy8gYW5kIHlvdSBjYW4gb25seSBoYXZlIG9uZSBzb3VyY2UgbWFwIHBlciBzdHlsZSB0YWdcbiAgICBpZiAodGhpcy5jdHIgJSAodGhpcy5pc1NwZWVkeSA/IDY1MDAwIDogMSkgPT09IDApIHtcbiAgICAgIHRoaXMuX2luc2VydFRhZyhjcmVhdGVTdHlsZUVsZW1lbnQodGhpcykpO1xuICAgIH1cblxuICAgIHZhciB0YWcgPSB0aGlzLnRhZ3NbdGhpcy50YWdzLmxlbmd0aCAtIDFdO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHZhciBpc0ltcG9ydFJ1bGUgPSBydWxlLmNoYXJDb2RlQXQoMCkgPT09IDY0ICYmIHJ1bGUuY2hhckNvZGVBdCgxKSA9PT0gMTA1O1xuXG4gICAgICBpZiAoaXNJbXBvcnRSdWxlICYmIHRoaXMuX2FscmVhZHlJbnNlcnRlZE9yZGVySW5zZW5zaXRpdmVSdWxlKSB7XG4gICAgICAgIC8vIHRoaXMgd291bGQgb25seSBjYXVzZSBwcm9ibGVtIGluIHNwZWVkeSBtb2RlXG4gICAgICAgIC8vIGJ1dCB3ZSBkb24ndCB3YW50IGVuYWJsaW5nIHNwZWVkeSB0byBhZmZlY3QgdGhlIG9ic2VydmFibGUgYmVoYXZpb3JcbiAgICAgICAgLy8gc28gd2UgcmVwb3J0IHRoaXMgZXJyb3IgYXQgYWxsIHRpbWVzXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJZb3UncmUgYXR0ZW1wdGluZyB0byBpbnNlcnQgdGhlIGZvbGxvd2luZyBydWxlOlxcblwiICsgcnVsZSArICdcXG5cXG5gQGltcG9ydGAgcnVsZXMgbXVzdCBiZSBiZWZvcmUgYWxsIG90aGVyIHR5cGVzIG9mIHJ1bGVzIGluIGEgc3R5bGVzaGVldCBidXQgb3RoZXIgcnVsZXMgaGF2ZSBhbHJlYWR5IGJlZW4gaW5zZXJ0ZWQuIFBsZWFzZSBlbnN1cmUgdGhhdCBgQGltcG9ydGAgcnVsZXMgYXJlIGJlZm9yZSBhbGwgb3RoZXIgcnVsZXMuJyk7XG4gICAgICB9XG4gICAgICB0aGlzLl9hbHJlYWR5SW5zZXJ0ZWRPcmRlckluc2Vuc2l0aXZlUnVsZSA9IHRoaXMuX2FscmVhZHlJbnNlcnRlZE9yZGVySW5zZW5zaXRpdmVSdWxlIHx8ICFpc0ltcG9ydFJ1bGU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNTcGVlZHkpIHtcbiAgICAgIHZhciBzaGVldCA9IHNoZWV0Rm9yVGFnKHRhZyk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIHRoaXMgaXMgdGhlIHVsdHJhZmFzdCB2ZXJzaW9uLCB3b3JrcyBhY3Jvc3MgYnJvd3NlcnNcbiAgICAgICAgLy8gdGhlIGJpZyBkcmF3YmFjayBpcyB0aGF0IHRoZSBjc3Mgd29uJ3QgYmUgZWRpdGFibGUgaW4gZGV2dG9vbHNcbiAgICAgICAgc2hlZXQuaW5zZXJ0UnVsZShydWxlLCBzaGVldC5jc3NSdWxlcy5sZW5ndGgpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhLzooLW1vei1wbGFjZWhvbGRlcnwtbW96LWZvY3VzLWlubmVyfC1tb3otZm9jdXNyaW5nfC1tcy1pbnB1dC1wbGFjZWhvbGRlcnwtbW96LXJlYWQtd3JpdGV8LW1vei1yZWFkLW9ubHl8LW1zLWNsZWFyfC1tcy1leHBhbmR8LW1zLXJldmVhbCl7Ly50ZXN0KHJ1bGUpKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcIlRoZXJlIHdhcyBhIHByb2JsZW0gaW5zZXJ0aW5nIHRoZSBmb2xsb3dpbmcgcnVsZTogXFxcIlwiICsgcnVsZSArIFwiXFxcIlwiLCBlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0YWcuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocnVsZSkpO1xuICAgIH1cblxuICAgIHRoaXMuY3RyKys7XG4gIH07XG5cbiAgX3Byb3RvLmZsdXNoID0gZnVuY3Rpb24gZmx1c2goKSB7XG4gICAgLy8gJEZsb3dGaXhNZVxuICAgIHRoaXMudGFncy5mb3JFYWNoKGZ1bmN0aW9uICh0YWcpIHtcbiAgICAgIHJldHVybiB0YWcucGFyZW50Tm9kZSAmJiB0YWcucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0YWcpO1xuICAgIH0pO1xuICAgIHRoaXMudGFncyA9IFtdO1xuICAgIHRoaXMuY3RyID0gMDtcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB0aGlzLl9hbHJlYWR5SW5zZXJ0ZWRPcmRlckluc2Vuc2l0aXZlUnVsZSA9IGZhbHNlO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gU3R5bGVTaGVldDtcbn0oKTtcblxuZXhwb3J0IHsgU3R5bGVTaGVldCB9O1xuIiwgImV4cG9ydCB2YXIgTVMgPSAnLW1zLSdcbmV4cG9ydCB2YXIgTU9aID0gJy1tb3otJ1xuZXhwb3J0IHZhciBXRUJLSVQgPSAnLXdlYmtpdC0nXG5cbmV4cG9ydCB2YXIgQ09NTUVOVCA9ICdjb21tJ1xuZXhwb3J0IHZhciBSVUxFU0VUID0gJ3J1bGUnXG5leHBvcnQgdmFyIERFQ0xBUkFUSU9OID0gJ2RlY2wnXG5cbmV4cG9ydCB2YXIgUEFHRSA9ICdAcGFnZSdcbmV4cG9ydCB2YXIgTUVESUEgPSAnQG1lZGlhJ1xuZXhwb3J0IHZhciBJTVBPUlQgPSAnQGltcG9ydCdcbmV4cG9ydCB2YXIgQ0hBUlNFVCA9ICdAY2hhcnNldCdcbmV4cG9ydCB2YXIgVklFV1BPUlQgPSAnQHZpZXdwb3J0J1xuZXhwb3J0IHZhciBTVVBQT1JUUyA9ICdAc3VwcG9ydHMnXG5leHBvcnQgdmFyIERPQ1VNRU5UID0gJ0Bkb2N1bWVudCdcbmV4cG9ydCB2YXIgTkFNRVNQQUNFID0gJ0BuYW1lc3BhY2UnXG5leHBvcnQgdmFyIEtFWUZSQU1FUyA9ICdAa2V5ZnJhbWVzJ1xuZXhwb3J0IHZhciBGT05UX0ZBQ0UgPSAnQGZvbnQtZmFjZSdcbmV4cG9ydCB2YXIgQ09VTlRFUl9TVFlMRSA9ICdAY291bnRlci1zdHlsZSdcbmV4cG9ydCB2YXIgRk9OVF9GRUFUVVJFX1ZBTFVFUyA9ICdAZm9udC1mZWF0dXJlLXZhbHVlcydcbmV4cG9ydCB2YXIgTEFZRVIgPSAnQGxheWVyJ1xuIiwgIi8qKlxuICogQHBhcmFtIHtudW1iZXJ9XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCB2YXIgYWJzID0gTWF0aC5hYnNcblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn1cbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IHZhciBmcm9tID0gU3RyaW5nLmZyb21DaGFyQ29kZVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fVxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgdmFyIGFzc2lnbiA9IE9iamVjdC5hc3NpZ25cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGhcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc2ggKHZhbHVlLCBsZW5ndGgpIHtcblx0cmV0dXJuIGNoYXJhdCh2YWx1ZSwgMCkgXiA0NSA/ICgoKCgoKChsZW5ndGggPDwgMikgXiBjaGFyYXQodmFsdWUsIDApKSA8PCAyKSBeIGNoYXJhdCh2YWx1ZSwgMSkpIDw8IDIpIF4gY2hhcmF0KHZhbHVlLCAyKSkgPDwgMikgXiBjaGFyYXQodmFsdWUsIDMpIDogMFxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdHJpbSAodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlLnRyaW0oKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtSZWdFeHB9IHBhdHRlcm5cbiAqIEByZXR1cm4ge3N0cmluZz99XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXRjaCAodmFsdWUsIHBhdHRlcm4pIHtcblx0cmV0dXJuICh2YWx1ZSA9IHBhdHRlcm4uZXhlYyh2YWx1ZSkpID8gdmFsdWVbMF0gOiB2YWx1ZVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHsoc3RyaW5nfFJlZ0V4cCl9IHBhdHRlcm5cbiAqIEBwYXJhbSB7c3RyaW5nfSByZXBsYWNlbWVudFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZSAodmFsdWUsIHBhdHRlcm4sIHJlcGxhY2VtZW50KSB7XG5cdHJldHVybiB2YWx1ZS5yZXBsYWNlKHBhdHRlcm4sIHJlcGxhY2VtZW50KVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IHNlYXJjaFxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5kZXhvZiAodmFsdWUsIHNlYXJjaCkge1xuXHRyZXR1cm4gdmFsdWUuaW5kZXhPZihzZWFyY2gpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoYXJhdCAodmFsdWUsIGluZGV4KSB7XG5cdHJldHVybiB2YWx1ZS5jaGFyQ29kZUF0KGluZGV4KSB8IDBcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBiZWdpblxuICogQHBhcmFtIHtudW1iZXJ9IGVuZFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3Vic3RyICh2YWx1ZSwgYmVnaW4sIGVuZCkge1xuXHRyZXR1cm4gdmFsdWUuc2xpY2UoYmVnaW4sIGVuZClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmxlbiAodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlLmxlbmd0aFxufVxuXG4vKipcbiAqIEBwYXJhbSB7YW55W119IHZhbHVlXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaXplb2YgKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZS5sZW5ndGhcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2FueX0gdmFsdWVcbiAqIEBwYXJhbSB7YW55W119IGFycmF5XG4gKiBAcmV0dXJuIHthbnl9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmQgKHZhbHVlLCBhcnJheSkge1xuXHRyZXR1cm4gYXJyYXkucHVzaCh2YWx1ZSksIHZhbHVlXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmdbXX0gYXJyYXlcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lIChhcnJheSwgY2FsbGJhY2spIHtcblx0cmV0dXJuIGFycmF5Lm1hcChjYWxsYmFjaykuam9pbignJylcbn1cbiIsICJpbXBvcnQge2Zyb20sIHRyaW0sIGNoYXJhdCwgc3RybGVuLCBzdWJzdHIsIGFwcGVuZCwgYXNzaWdufSBmcm9tICcuL1V0aWxpdHkuanMnXG5cbmV4cG9ydCB2YXIgbGluZSA9IDFcbmV4cG9ydCB2YXIgY29sdW1uID0gMVxuZXhwb3J0IHZhciBsZW5ndGggPSAwXG5leHBvcnQgdmFyIHBvc2l0aW9uID0gMFxuZXhwb3J0IHZhciBjaGFyYWN0ZXIgPSAwXG5leHBvcnQgdmFyIGNoYXJhY3RlcnMgPSAnJ1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtvYmplY3QgfCBudWxsfSByb290XG4gKiBAcGFyYW0ge29iamVjdCB8IG51bGx9IHBhcmVudFxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7c3RyaW5nW10gfCBzdHJpbmd9IHByb3BzXG4gKiBAcGFyYW0ge29iamVjdFtdIHwgc3RyaW5nfSBjaGlsZHJlblxuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9kZSAodmFsdWUsIHJvb3QsIHBhcmVudCwgdHlwZSwgcHJvcHMsIGNoaWxkcmVuLCBsZW5ndGgpIHtcblx0cmV0dXJuIHt2YWx1ZTogdmFsdWUsIHJvb3Q6IHJvb3QsIHBhcmVudDogcGFyZW50LCB0eXBlOiB0eXBlLCBwcm9wczogcHJvcHMsIGNoaWxkcmVuOiBjaGlsZHJlbiwgbGluZTogbGluZSwgY29sdW1uOiBjb2x1bW4sIGxlbmd0aDogbGVuZ3RoLCByZXR1cm46ICcnfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSByb290XG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHNcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvcHkgKHJvb3QsIHByb3BzKSB7XG5cdHJldHVybiBhc3NpZ24obm9kZSgnJywgbnVsbCwgbnVsbCwgJycsIG51bGwsIG51bGwsIDApLCByb290LCB7bGVuZ3RoOiAtcm9vdC5sZW5ndGh9LCBwcm9wcylcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGFyICgpIHtcblx0cmV0dXJuIGNoYXJhY3RlclxufVxuXG4vKipcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZXYgKCkge1xuXHRjaGFyYWN0ZXIgPSBwb3NpdGlvbiA+IDAgPyBjaGFyYXQoY2hhcmFjdGVycywgLS1wb3NpdGlvbikgOiAwXG5cblx0aWYgKGNvbHVtbi0tLCBjaGFyYWN0ZXIgPT09IDEwKVxuXHRcdGNvbHVtbiA9IDEsIGxpbmUtLVxuXG5cdHJldHVybiBjaGFyYWN0ZXJcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBuZXh0ICgpIHtcblx0Y2hhcmFjdGVyID0gcG9zaXRpb24gPCBsZW5ndGggPyBjaGFyYXQoY2hhcmFjdGVycywgcG9zaXRpb24rKykgOiAwXG5cblx0aWYgKGNvbHVtbisrLCBjaGFyYWN0ZXIgPT09IDEwKVxuXHRcdGNvbHVtbiA9IDEsIGxpbmUrK1xuXG5cdHJldHVybiBjaGFyYWN0ZXJcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwZWVrICgpIHtcblx0cmV0dXJuIGNoYXJhdChjaGFyYWN0ZXJzLCBwb3NpdGlvbilcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYXJldCAoKSB7XG5cdHJldHVybiBwb3NpdGlvblxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSBiZWdpblxuICogQHBhcmFtIHtudW1iZXJ9IGVuZFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2xpY2UgKGJlZ2luLCBlbmQpIHtcblx0cmV0dXJuIHN1YnN0cihjaGFyYWN0ZXJzLCBiZWdpbiwgZW5kKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2tlbiAodHlwZSkge1xuXHRzd2l0Y2ggKHR5cGUpIHtcblx0XHQvLyBcXDAgXFx0IFxcbiBcXHIgXFxzIHdoaXRlc3BhY2UgdG9rZW5cblx0XHRjYXNlIDA6IGNhc2UgOTogY2FzZSAxMDogY2FzZSAxMzogY2FzZSAzMjpcblx0XHRcdHJldHVybiA1XG5cdFx0Ly8gISArICwgLyA+IEAgfiBpc29sYXRlIHRva2VuXG5cdFx0Y2FzZSAzMzogY2FzZSA0MzogY2FzZSA0NDogY2FzZSA0NzogY2FzZSA2MjogY2FzZSA2NDogY2FzZSAxMjY6XG5cdFx0Ly8gOyB7IH0gYnJlYWtwb2ludCB0b2tlblxuXHRcdGNhc2UgNTk6IGNhc2UgMTIzOiBjYXNlIDEyNTpcblx0XHRcdHJldHVybiA0XG5cdFx0Ly8gOiBhY2NvbXBhbmllZCB0b2tlblxuXHRcdGNhc2UgNTg6XG5cdFx0XHRyZXR1cm4gM1xuXHRcdC8vIFwiICcgKCBbIG9wZW5pbmcgZGVsaW1pdCB0b2tlblxuXHRcdGNhc2UgMzQ6IGNhc2UgMzk6IGNhc2UgNDA6IGNhc2UgOTE6XG5cdFx0XHRyZXR1cm4gMlxuXHRcdC8vICkgXSBjbG9zaW5nIGRlbGltaXQgdG9rZW5cblx0XHRjYXNlIDQxOiBjYXNlIDkzOlxuXHRcdFx0cmV0dXJuIDFcblx0fVxuXG5cdHJldHVybiAwXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHthbnlbXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFsbG9jICh2YWx1ZSkge1xuXHRyZXR1cm4gbGluZSA9IGNvbHVtbiA9IDEsIGxlbmd0aCA9IHN0cmxlbihjaGFyYWN0ZXJzID0gdmFsdWUpLCBwb3NpdGlvbiA9IDAsIFtdXG59XG5cbi8qKlxuICogQHBhcmFtIHthbnl9IHZhbHVlXG4gKiBAcmV0dXJuIHthbnl9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWFsbG9jICh2YWx1ZSkge1xuXHRyZXR1cm4gY2hhcmFjdGVycyA9ICcnLCB2YWx1ZVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWxpbWl0ICh0eXBlKSB7XG5cdHJldHVybiB0cmltKHNsaWNlKHBvc2l0aW9uIC0gMSwgZGVsaW1pdGVyKHR5cGUgPT09IDkxID8gdHlwZSArIDIgOiB0eXBlID09PSA0MCA/IHR5cGUgKyAxIDogdHlwZSkpKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7c3RyaW5nW119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2tlbml6ZSAodmFsdWUpIHtcblx0cmV0dXJuIGRlYWxsb2ModG9rZW5pemVyKGFsbG9jKHZhbHVlKSkpXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHR5cGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdoaXRlc3BhY2UgKHR5cGUpIHtcblx0d2hpbGUgKGNoYXJhY3RlciA9IHBlZWsoKSlcblx0XHRpZiAoY2hhcmFjdGVyIDwgMzMpXG5cdFx0XHRuZXh0KClcblx0XHRlbHNlXG5cdFx0XHRicmVha1xuXG5cdHJldHVybiB0b2tlbih0eXBlKSA+IDIgfHwgdG9rZW4oY2hhcmFjdGVyKSA+IDMgPyAnJyA6ICcgJ1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nW119IGNoaWxkcmVuXG4gKiBAcmV0dXJuIHtzdHJpbmdbXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRva2VuaXplciAoY2hpbGRyZW4pIHtcblx0d2hpbGUgKG5leHQoKSlcblx0XHRzd2l0Y2ggKHRva2VuKGNoYXJhY3RlcikpIHtcblx0XHRcdGNhc2UgMDogYXBwZW5kKGlkZW50aWZpZXIocG9zaXRpb24gLSAxKSwgY2hpbGRyZW4pXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHRjYXNlIDI6IGFwcGVuZChkZWxpbWl0KGNoYXJhY3RlciksIGNoaWxkcmVuKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0ZGVmYXVsdDogYXBwZW5kKGZyb20oY2hhcmFjdGVyKSwgY2hpbGRyZW4pXG5cdFx0fVxuXG5cdHJldHVybiBjaGlsZHJlblxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHBhcmFtIHtudW1iZXJ9IGNvdW50XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGluZyAoaW5kZXgsIGNvdW50KSB7XG5cdHdoaWxlICgtLWNvdW50ICYmIG5leHQoKSlcblx0XHQvLyBub3QgMC05IEEtRiBhLWZcblx0XHRpZiAoY2hhcmFjdGVyIDwgNDggfHwgY2hhcmFjdGVyID4gMTAyIHx8IChjaGFyYWN0ZXIgPiA1NyAmJiBjaGFyYWN0ZXIgPCA2NSkgfHwgKGNoYXJhY3RlciA+IDcwICYmIGNoYXJhY3RlciA8IDk3KSlcblx0XHRcdGJyZWFrXG5cblx0cmV0dXJuIHNsaWNlKGluZGV4LCBjYXJldCgpICsgKGNvdW50IDwgNiAmJiBwZWVrKCkgPT0gMzIgJiYgbmV4dCgpID09IDMyKSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVsaW1pdGVyICh0eXBlKSB7XG5cdHdoaWxlIChuZXh0KCkpXG5cdFx0c3dpdGNoIChjaGFyYWN0ZXIpIHtcblx0XHRcdC8vIF0gKSBcIiAnXG5cdFx0XHRjYXNlIHR5cGU6XG5cdFx0XHRcdHJldHVybiBwb3NpdGlvblxuXHRcdFx0Ly8gXCIgJ1xuXHRcdFx0Y2FzZSAzNDogY2FzZSAzOTpcblx0XHRcdFx0aWYgKHR5cGUgIT09IDM0ICYmIHR5cGUgIT09IDM5KVxuXHRcdFx0XHRcdGRlbGltaXRlcihjaGFyYWN0ZXIpXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHQvLyAoXG5cdFx0XHRjYXNlIDQwOlxuXHRcdFx0XHRpZiAodHlwZSA9PT0gNDEpXG5cdFx0XHRcdFx0ZGVsaW1pdGVyKHR5cGUpXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHQvLyBcXFxuXHRcdFx0Y2FzZSA5Mjpcblx0XHRcdFx0bmV4dCgpXG5cdFx0XHRcdGJyZWFrXG5cdFx0fVxuXG5cdHJldHVybiBwb3NpdGlvblxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbW1lbnRlciAodHlwZSwgaW5kZXgpIHtcblx0d2hpbGUgKG5leHQoKSlcblx0XHQvLyAvL1xuXHRcdGlmICh0eXBlICsgY2hhcmFjdGVyID09PSA0NyArIDEwKVxuXHRcdFx0YnJlYWtcblx0XHQvLyAvKlxuXHRcdGVsc2UgaWYgKHR5cGUgKyBjaGFyYWN0ZXIgPT09IDQyICsgNDIgJiYgcGVlaygpID09PSA0Nylcblx0XHRcdGJyZWFrXG5cblx0cmV0dXJuICcvKicgKyBzbGljZShpbmRleCwgcG9zaXRpb24gLSAxKSArICcqJyArIGZyb20odHlwZSA9PT0gNDcgPyB0eXBlIDogbmV4dCgpKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpZmllciAoaW5kZXgpIHtcblx0d2hpbGUgKCF0b2tlbihwZWVrKCkpKVxuXHRcdG5leHQoKVxuXG5cdHJldHVybiBzbGljZShpbmRleCwgcG9zaXRpb24pXG59XG4iLCAiaW1wb3J0IHtDT01NRU5ULCBSVUxFU0VULCBERUNMQVJBVElPTn0gZnJvbSAnLi9FbnVtLmpzJ1xuaW1wb3J0IHthYnMsIGNoYXJhdCwgdHJpbSwgZnJvbSwgc2l6ZW9mLCBzdHJsZW4sIHN1YnN0ciwgYXBwZW5kLCByZXBsYWNlLCBpbmRleG9mfSBmcm9tICcuL1V0aWxpdHkuanMnXG5pbXBvcnQge25vZGUsIGNoYXIsIHByZXYsIG5leHQsIHBlZWssIGNhcmV0LCBhbGxvYywgZGVhbGxvYywgZGVsaW1pdCwgd2hpdGVzcGFjZSwgZXNjYXBpbmcsIGlkZW50aWZpZXIsIGNvbW1lbnRlcn0gZnJvbSAnLi9Ub2tlbml6ZXIuanMnXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHtvYmplY3RbXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXBpbGUgKHZhbHVlKSB7XG5cdHJldHVybiBkZWFsbG9jKHBhcnNlKCcnLCBudWxsLCBudWxsLCBudWxsLCBbJyddLCB2YWx1ZSA9IGFsbG9jKHZhbHVlKSwgMCwgWzBdLCB2YWx1ZSkpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge29iamVjdH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3Q/fSBwYXJlbnRcbiAqIEBwYXJhbSB7c3RyaW5nW119IHJ1bGVcbiAqIEBwYXJhbSB7c3RyaW5nW119IHJ1bGVzXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBydWxlc2V0c1xuICogQHBhcmFtIHtudW1iZXJbXX0gcHNldWRvXG4gKiBAcGFyYW0ge251bWJlcltdfSBwb2ludHNcbiAqIEBwYXJhbSB7c3RyaW5nW119IGRlY2xhcmF0aW9uc1xuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2UgKHZhbHVlLCByb290LCBwYXJlbnQsIHJ1bGUsIHJ1bGVzLCBydWxlc2V0cywgcHNldWRvLCBwb2ludHMsIGRlY2xhcmF0aW9ucykge1xuXHR2YXIgaW5kZXggPSAwXG5cdHZhciBvZmZzZXQgPSAwXG5cdHZhciBsZW5ndGggPSBwc2V1ZG9cblx0dmFyIGF0cnVsZSA9IDBcblx0dmFyIHByb3BlcnR5ID0gMFxuXHR2YXIgcHJldmlvdXMgPSAwXG5cdHZhciB2YXJpYWJsZSA9IDFcblx0dmFyIHNjYW5uaW5nID0gMVxuXHR2YXIgYW1wZXJzYW5kID0gMVxuXHR2YXIgY2hhcmFjdGVyID0gMFxuXHR2YXIgdHlwZSA9ICcnXG5cdHZhciBwcm9wcyA9IHJ1bGVzXG5cdHZhciBjaGlsZHJlbiA9IHJ1bGVzZXRzXG5cdHZhciByZWZlcmVuY2UgPSBydWxlXG5cdHZhciBjaGFyYWN0ZXJzID0gdHlwZVxuXG5cdHdoaWxlIChzY2FubmluZylcblx0XHRzd2l0Y2ggKHByZXZpb3VzID0gY2hhcmFjdGVyLCBjaGFyYWN0ZXIgPSBuZXh0KCkpIHtcblx0XHRcdC8vIChcblx0XHRcdGNhc2UgNDA6XG5cdFx0XHRcdGlmIChwcmV2aW91cyAhPSAxMDggJiYgY2hhcmF0KGNoYXJhY3RlcnMsIGxlbmd0aCAtIDEpID09IDU4KSB7XG5cdFx0XHRcdFx0aWYgKGluZGV4b2YoY2hhcmFjdGVycyArPSByZXBsYWNlKGRlbGltaXQoY2hhcmFjdGVyKSwgJyYnLCAnJlxcZicpLCAnJlxcZicpICE9IC0xKVxuXHRcdFx0XHRcdFx0YW1wZXJzYW5kID0gLTFcblx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHR9XG5cdFx0XHQvLyBcIiAnIFtcblx0XHRcdGNhc2UgMzQ6IGNhc2UgMzk6IGNhc2UgOTE6XG5cdFx0XHRcdGNoYXJhY3RlcnMgKz0gZGVsaW1pdChjaGFyYWN0ZXIpXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHQvLyBcXHQgXFxuIFxcciBcXHNcblx0XHRcdGNhc2UgOTogY2FzZSAxMDogY2FzZSAxMzogY2FzZSAzMjpcblx0XHRcdFx0Y2hhcmFjdGVycyArPSB3aGl0ZXNwYWNlKHByZXZpb3VzKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8gXFxcblx0XHRcdGNhc2UgOTI6XG5cdFx0XHRcdGNoYXJhY3RlcnMgKz0gZXNjYXBpbmcoY2FyZXQoKSAtIDEsIDcpXG5cdFx0XHRcdGNvbnRpbnVlXG5cdFx0XHQvLyAvXG5cdFx0XHRjYXNlIDQ3OlxuXHRcdFx0XHRzd2l0Y2ggKHBlZWsoKSkge1xuXHRcdFx0XHRcdGNhc2UgNDI6IGNhc2UgNDc6XG5cdFx0XHRcdFx0XHRhcHBlbmQoY29tbWVudChjb21tZW50ZXIobmV4dCgpLCBjYXJldCgpKSwgcm9vdCwgcGFyZW50KSwgZGVjbGFyYXRpb25zKVxuXHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0Y2hhcmFjdGVycyArPSAnLydcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8ge1xuXHRcdFx0Y2FzZSAxMjMgKiB2YXJpYWJsZTpcblx0XHRcdFx0cG9pbnRzW2luZGV4KytdID0gc3RybGVuKGNoYXJhY3RlcnMpICogYW1wZXJzYW5kXG5cdFx0XHQvLyB9IDsgXFwwXG5cdFx0XHRjYXNlIDEyNSAqIHZhcmlhYmxlOiBjYXNlIDU5OiBjYXNlIDA6XG5cdFx0XHRcdHN3aXRjaCAoY2hhcmFjdGVyKSB7XG5cdFx0XHRcdFx0Ly8gXFwwIH1cblx0XHRcdFx0XHRjYXNlIDA6IGNhc2UgMTI1OiBzY2FubmluZyA9IDBcblx0XHRcdFx0XHQvLyA7XG5cdFx0XHRcdFx0Y2FzZSA1OSArIG9mZnNldDogaWYgKGFtcGVyc2FuZCA9PSAtMSkgY2hhcmFjdGVycyA9IHJlcGxhY2UoY2hhcmFjdGVycywgL1xcZi9nLCAnJylcblx0XHRcdFx0XHRcdGlmIChwcm9wZXJ0eSA+IDAgJiYgKHN0cmxlbihjaGFyYWN0ZXJzKSAtIGxlbmd0aCkpXG5cdFx0XHRcdFx0XHRcdGFwcGVuZChwcm9wZXJ0eSA+IDMyID8gZGVjbGFyYXRpb24oY2hhcmFjdGVycyArICc7JywgcnVsZSwgcGFyZW50LCBsZW5ndGggLSAxKSA6IGRlY2xhcmF0aW9uKHJlcGxhY2UoY2hhcmFjdGVycywgJyAnLCAnJykgKyAnOycsIHJ1bGUsIHBhcmVudCwgbGVuZ3RoIC0gMiksIGRlY2xhcmF0aW9ucylcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0Ly8gQCA7XG5cdFx0XHRcdFx0Y2FzZSA1OTogY2hhcmFjdGVycyArPSAnOydcblx0XHRcdFx0XHQvLyB7IHJ1bGUvYXQtcnVsZVxuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRhcHBlbmQocmVmZXJlbmNlID0gcnVsZXNldChjaGFyYWN0ZXJzLCByb290LCBwYXJlbnQsIGluZGV4LCBvZmZzZXQsIHJ1bGVzLCBwb2ludHMsIHR5cGUsIHByb3BzID0gW10sIGNoaWxkcmVuID0gW10sIGxlbmd0aCksIHJ1bGVzZXRzKVxuXG5cdFx0XHRcdFx0XHRpZiAoY2hhcmFjdGVyID09PSAxMjMpXG5cdFx0XHRcdFx0XHRcdGlmIChvZmZzZXQgPT09IDApXG5cdFx0XHRcdFx0XHRcdFx0cGFyc2UoY2hhcmFjdGVycywgcm9vdCwgcmVmZXJlbmNlLCByZWZlcmVuY2UsIHByb3BzLCBydWxlc2V0cywgbGVuZ3RoLCBwb2ludHMsIGNoaWxkcmVuKVxuXHRcdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdFx0c3dpdGNoIChhdHJ1bGUgPT09IDk5ICYmIGNoYXJhdChjaGFyYWN0ZXJzLCAzKSA9PT0gMTEwID8gMTAwIDogYXRydWxlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBkIGwgbSBzXG5cdFx0XHRcdFx0XHRcdFx0XHRjYXNlIDEwMDogY2FzZSAxMDg6IGNhc2UgMTA5OiBjYXNlIDExNTpcblx0XHRcdFx0XHRcdFx0XHRcdFx0cGFyc2UodmFsdWUsIHJlZmVyZW5jZSwgcmVmZXJlbmNlLCBydWxlICYmIGFwcGVuZChydWxlc2V0KHZhbHVlLCByZWZlcmVuY2UsIHJlZmVyZW5jZSwgMCwgMCwgcnVsZXMsIHBvaW50cywgdHlwZSwgcnVsZXMsIHByb3BzID0gW10sIGxlbmd0aCksIGNoaWxkcmVuKSwgcnVsZXMsIGNoaWxkcmVuLCBsZW5ndGgsIHBvaW50cywgcnVsZSA/IHByb3BzIDogY2hpbGRyZW4pXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRwYXJzZShjaGFyYWN0ZXJzLCByZWZlcmVuY2UsIHJlZmVyZW5jZSwgcmVmZXJlbmNlLCBbJyddLCBjaGlsZHJlbiwgMCwgcG9pbnRzLCBjaGlsZHJlbilcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpbmRleCA9IG9mZnNldCA9IHByb3BlcnR5ID0gMCwgdmFyaWFibGUgPSBhbXBlcnNhbmQgPSAxLCB0eXBlID0gY2hhcmFjdGVycyA9ICcnLCBsZW5ndGggPSBwc2V1ZG9cblx0XHRcdFx0YnJlYWtcblx0XHRcdC8vIDpcblx0XHRcdGNhc2UgNTg6XG5cdFx0XHRcdGxlbmd0aCA9IDEgKyBzdHJsZW4oY2hhcmFjdGVycyksIHByb3BlcnR5ID0gcHJldmlvdXNcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGlmICh2YXJpYWJsZSA8IDEpXG5cdFx0XHRcdFx0aWYgKGNoYXJhY3RlciA9PSAxMjMpXG5cdFx0XHRcdFx0XHQtLXZhcmlhYmxlXG5cdFx0XHRcdFx0ZWxzZSBpZiAoY2hhcmFjdGVyID09IDEyNSAmJiB2YXJpYWJsZSsrID09IDAgJiYgcHJldigpID09IDEyNSlcblx0XHRcdFx0XHRcdGNvbnRpbnVlXG5cblx0XHRcdFx0c3dpdGNoIChjaGFyYWN0ZXJzICs9IGZyb20oY2hhcmFjdGVyKSwgY2hhcmFjdGVyICogdmFyaWFibGUpIHtcblx0XHRcdFx0XHQvLyAmXG5cdFx0XHRcdFx0Y2FzZSAzODpcblx0XHRcdFx0XHRcdGFtcGVyc2FuZCA9IG9mZnNldCA+IDAgPyAxIDogKGNoYXJhY3RlcnMgKz0gJ1xcZicsIC0xKVxuXHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHQvLyAsXG5cdFx0XHRcdFx0Y2FzZSA0NDpcblx0XHRcdFx0XHRcdHBvaW50c1tpbmRleCsrXSA9IChzdHJsZW4oY2hhcmFjdGVycykgLSAxKSAqIGFtcGVyc2FuZCwgYW1wZXJzYW5kID0gMVxuXHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHQvLyBAXG5cdFx0XHRcdFx0Y2FzZSA2NDpcblx0XHRcdFx0XHRcdC8vIC1cblx0XHRcdFx0XHRcdGlmIChwZWVrKCkgPT09IDQ1KVxuXHRcdFx0XHRcdFx0XHRjaGFyYWN0ZXJzICs9IGRlbGltaXQobmV4dCgpKVxuXG5cdFx0XHRcdFx0XHRhdHJ1bGUgPSBwZWVrKCksIG9mZnNldCA9IGxlbmd0aCA9IHN0cmxlbih0eXBlID0gY2hhcmFjdGVycyArPSBpZGVudGlmaWVyKGNhcmV0KCkpKSwgY2hhcmFjdGVyKytcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0Ly8gLVxuXHRcdFx0XHRcdGNhc2UgNDU6XG5cdFx0XHRcdFx0XHRpZiAocHJldmlvdXMgPT09IDQ1ICYmIHN0cmxlbihjaGFyYWN0ZXJzKSA9PSAyKVxuXHRcdFx0XHRcdFx0XHR2YXJpYWJsZSA9IDBcblx0XHRcdFx0fVxuXHRcdH1cblxuXHRyZXR1cm4gcnVsZXNldHNcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7b2JqZWN0fSByb290XG4gKiBAcGFyYW0ge29iamVjdD99IHBhcmVudFxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0XG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBydWxlc1xuICogQHBhcmFtIHtudW1iZXJbXX0gcG9pbnRzXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtzdHJpbmdbXX0gcHJvcHNcbiAqIEBwYXJhbSB7c3RyaW5nW119IGNoaWxkcmVuXG4gKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydWxlc2V0ICh2YWx1ZSwgcm9vdCwgcGFyZW50LCBpbmRleCwgb2Zmc2V0LCBydWxlcywgcG9pbnRzLCB0eXBlLCBwcm9wcywgY2hpbGRyZW4sIGxlbmd0aCkge1xuXHR2YXIgcG9zdCA9IG9mZnNldCAtIDFcblx0dmFyIHJ1bGUgPSBvZmZzZXQgPT09IDAgPyBydWxlcyA6IFsnJ11cblx0dmFyIHNpemUgPSBzaXplb2YocnVsZSlcblxuXHRmb3IgKHZhciBpID0gMCwgaiA9IDAsIGsgPSAwOyBpIDwgaW5kZXg7ICsraSlcblx0XHRmb3IgKHZhciB4ID0gMCwgeSA9IHN1YnN0cih2YWx1ZSwgcG9zdCArIDEsIHBvc3QgPSBhYnMoaiA9IHBvaW50c1tpXSkpLCB6ID0gdmFsdWU7IHggPCBzaXplOyArK3gpXG5cdFx0XHRpZiAoeiA9IHRyaW0oaiA+IDAgPyBydWxlW3hdICsgJyAnICsgeSA6IHJlcGxhY2UoeSwgLyZcXGYvZywgcnVsZVt4XSkpKVxuXHRcdFx0XHRwcm9wc1trKytdID0gelxuXG5cdHJldHVybiBub2RlKHZhbHVlLCByb290LCBwYXJlbnQsIG9mZnNldCA9PT0gMCA/IFJVTEVTRVQgOiB0eXBlLCBwcm9wcywgY2hpbGRyZW4sIGxlbmd0aClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEBwYXJhbSB7b2JqZWN0fSByb290XG4gKiBAcGFyYW0ge29iamVjdD99IHBhcmVudFxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tbWVudCAodmFsdWUsIHJvb3QsIHBhcmVudCkge1xuXHRyZXR1cm4gbm9kZSh2YWx1ZSwgcm9vdCwgcGFyZW50LCBDT01NRU5ULCBmcm9tKGNoYXIoKSksIHN1YnN0cih2YWx1ZSwgMiwgLTIpLCAwKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtvYmplY3R9IHJvb3RcbiAqIEBwYXJhbSB7b2JqZWN0P30gcGFyZW50XG4gKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNsYXJhdGlvbiAodmFsdWUsIHJvb3QsIHBhcmVudCwgbGVuZ3RoKSB7XG5cdHJldHVybiBub2RlKHZhbHVlLCByb290LCBwYXJlbnQsIERFQ0xBUkFUSU9OLCBzdWJzdHIodmFsdWUsIDAsIGxlbmd0aCksIHN1YnN0cih2YWx1ZSwgbGVuZ3RoICsgMSwgLTEpLCBsZW5ndGgpXG59XG4iLCAiaW1wb3J0IHtJTVBPUlQsIExBWUVSLCBDT01NRU5ULCBSVUxFU0VULCBERUNMQVJBVElPTiwgS0VZRlJBTUVTfSBmcm9tICcuL0VudW0uanMnXG5pbXBvcnQge3N0cmxlbiwgc2l6ZW9mfSBmcm9tICcuL1V0aWxpdHkuanMnXG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3RbXX0gY2hpbGRyZW5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemUgKGNoaWxkcmVuLCBjYWxsYmFjaykge1xuXHR2YXIgb3V0cHV0ID0gJydcblx0dmFyIGxlbmd0aCA9IHNpemVvZihjaGlsZHJlbilcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKVxuXHRcdG91dHB1dCArPSBjYWxsYmFjayhjaGlsZHJlbltpXSwgaSwgY2hpbGRyZW4sIGNhbGxiYWNrKSB8fCAnJ1xuXG5cdHJldHVybiBvdXRwdXRcbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZWxlbWVudFxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcGFyYW0ge29iamVjdFtdfSBjaGlsZHJlblxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ2lmeSAoZWxlbWVudCwgaW5kZXgsIGNoaWxkcmVuLCBjYWxsYmFjaykge1xuXHRzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xuXHRcdGNhc2UgTEFZRVI6IGlmIChlbGVtZW50LmNoaWxkcmVuLmxlbmd0aCkgYnJlYWtcblx0XHRjYXNlIElNUE9SVDogY2FzZSBERUNMQVJBVElPTjogcmV0dXJuIGVsZW1lbnQucmV0dXJuID0gZWxlbWVudC5yZXR1cm4gfHwgZWxlbWVudC52YWx1ZVxuXHRcdGNhc2UgQ09NTUVOVDogcmV0dXJuICcnXG5cdFx0Y2FzZSBLRVlGUkFNRVM6IHJldHVybiBlbGVtZW50LnJldHVybiA9IGVsZW1lbnQudmFsdWUgKyAneycgKyBzZXJpYWxpemUoZWxlbWVudC5jaGlsZHJlbiwgY2FsbGJhY2spICsgJ30nXG5cdFx0Y2FzZSBSVUxFU0VUOiBlbGVtZW50LnZhbHVlID0gZWxlbWVudC5wcm9wcy5qb2luKCcsJylcblx0fVxuXG5cdHJldHVybiBzdHJsZW4oY2hpbGRyZW4gPSBzZXJpYWxpemUoZWxlbWVudC5jaGlsZHJlbiwgY2FsbGJhY2spKSA/IGVsZW1lbnQucmV0dXJuID0gZWxlbWVudC52YWx1ZSArICd7JyArIGNoaWxkcmVuICsgJ30nIDogJydcbn1cbiIsICJpbXBvcnQge01TLCBNT1osIFdFQktJVCwgUlVMRVNFVCwgS0VZRlJBTUVTLCBERUNMQVJBVElPTn0gZnJvbSAnLi9FbnVtLmpzJ1xuaW1wb3J0IHttYXRjaCwgY2hhcmF0LCBzdWJzdHIsIHN0cmxlbiwgc2l6ZW9mLCByZXBsYWNlLCBjb21iaW5lfSBmcm9tICcuL1V0aWxpdHkuanMnXG5pbXBvcnQge2NvcHksIHRva2VuaXplfSBmcm9tICcuL1Rva2VuaXplci5qcydcbmltcG9ydCB7c2VyaWFsaXplfSBmcm9tICcuL1NlcmlhbGl6ZXIuanMnXG5pbXBvcnQge3ByZWZpeH0gZnJvbSAnLi9QcmVmaXhlci5qcydcblxuLyoqXG4gKiBAcGFyYW0ge2Z1bmN0aW9uW119IGNvbGxlY3Rpb25cbiAqIEByZXR1cm4ge2Z1bmN0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWlkZGxld2FyZSAoY29sbGVjdGlvbikge1xuXHR2YXIgbGVuZ3RoID0gc2l6ZW9mKGNvbGxlY3Rpb24pXG5cblx0cmV0dXJuIGZ1bmN0aW9uIChlbGVtZW50LCBpbmRleCwgY2hpbGRyZW4sIGNhbGxiYWNrKSB7XG5cdFx0dmFyIG91dHB1dCA9ICcnXG5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKVxuXHRcdFx0b3V0cHV0ICs9IGNvbGxlY3Rpb25baV0oZWxlbWVudCwgaW5kZXgsIGNoaWxkcmVuLCBjYWxsYmFjaykgfHwgJydcblxuXHRcdHJldHVybiBvdXRwdXRcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtmdW5jdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1bGVzaGVldCAoY2FsbGJhY2spIHtcblx0cmV0dXJuIGZ1bmN0aW9uIChlbGVtZW50KSB7XG5cdFx0aWYgKCFlbGVtZW50LnJvb3QpXG5cdFx0XHRpZiAoZWxlbWVudCA9IGVsZW1lbnQucmV0dXJuKVxuXHRcdFx0XHRjYWxsYmFjayhlbGVtZW50KVxuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGVsZW1lbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHBhcmFtIHtvYmplY3RbXX0gY2hpbGRyZW5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmVmaXhlciAoZWxlbWVudCwgaW5kZXgsIGNoaWxkcmVuLCBjYWxsYmFjaykge1xuXHRpZiAoZWxlbWVudC5sZW5ndGggPiAtMSlcblx0XHRpZiAoIWVsZW1lbnQucmV0dXJuKVxuXHRcdFx0c3dpdGNoIChlbGVtZW50LnR5cGUpIHtcblx0XHRcdFx0Y2FzZSBERUNMQVJBVElPTjogZWxlbWVudC5yZXR1cm4gPSBwcmVmaXgoZWxlbWVudC52YWx1ZSwgZWxlbWVudC5sZW5ndGgsIGNoaWxkcmVuKVxuXHRcdFx0XHRcdHJldHVyblxuXHRcdFx0XHRjYXNlIEtFWUZSQU1FUzpcblx0XHRcdFx0XHRyZXR1cm4gc2VyaWFsaXplKFtjb3B5KGVsZW1lbnQsIHt2YWx1ZTogcmVwbGFjZShlbGVtZW50LnZhbHVlLCAnQCcsICdAJyArIFdFQktJVCl9KV0sIGNhbGxiYWNrKVxuXHRcdFx0XHRjYXNlIFJVTEVTRVQ6XG5cdFx0XHRcdFx0aWYgKGVsZW1lbnQubGVuZ3RoKVxuXHRcdFx0XHRcdFx0cmV0dXJuIGNvbWJpbmUoZWxlbWVudC5wcm9wcywgZnVuY3Rpb24gKHZhbHVlKSB7XG5cdFx0XHRcdFx0XHRcdHN3aXRjaCAobWF0Y2godmFsdWUsIC8oOjpwbGFjXFx3K3w6cmVhZC1cXHcrKS8pKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gOnJlYWQtKG9ubHl8d3JpdGUpXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSAnOnJlYWQtb25seSc6IGNhc2UgJzpyZWFkLXdyaXRlJzpcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBzZXJpYWxpemUoW2NvcHkoZWxlbWVudCwge3Byb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocmVhZC1cXHcrKS8sICc6JyArIE1PWiArICckMScpXX0pXSwgY2FsbGJhY2spXG5cdFx0XHRcdFx0XHRcdFx0Ly8gOnBsYWNlaG9sZGVyXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSAnOjpwbGFjZWhvbGRlcic6XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gc2VyaWFsaXplKFtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29weShlbGVtZW50LCB7cHJvcHM6IFtyZXBsYWNlKHZhbHVlLCAvOihwbGFjXFx3KykvLCAnOicgKyBXRUJLSVQgKyAnaW5wdXQtJDEnKV19KSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29weShlbGVtZW50LCB7cHJvcHM6IFtyZXBsYWNlKHZhbHVlLCAvOihwbGFjXFx3KykvLCAnOicgKyBNT1ogKyAnJDEnKV19KSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29weShlbGVtZW50LCB7cHJvcHM6IFtyZXBsYWNlKHZhbHVlLCAvOihwbGFjXFx3KykvLCBNUyArICdpbnB1dC0kMScpXX0pXG5cdFx0XHRcdFx0XHRcdFx0XHRdLCBjYWxsYmFjaylcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdHJldHVybiAnJ1xuXHRcdFx0XHRcdFx0fSlcblx0XHRcdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZWxlbWVudFxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcGFyYW0ge29iamVjdFtdfSBjaGlsZHJlblxuICovXG5leHBvcnQgZnVuY3Rpb24gbmFtZXNwYWNlIChlbGVtZW50KSB7XG5cdHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XG5cdFx0Y2FzZSBSVUxFU0VUOlxuXHRcdFx0ZWxlbWVudC5wcm9wcyA9IGVsZW1lbnQucHJvcHMubWFwKGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRcdFx0XHRyZXR1cm4gY29tYmluZSh0b2tlbml6ZSh2YWx1ZSksIGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGNoaWxkcmVuKSB7XG5cdFx0XHRcdFx0c3dpdGNoIChjaGFyYXQodmFsdWUsIDApKSB7XG5cdFx0XHRcdFx0XHQvLyBcXGZcblx0XHRcdFx0XHRcdGNhc2UgMTI6XG5cdFx0XHRcdFx0XHRcdHJldHVybiBzdWJzdHIodmFsdWUsIDEsIHN0cmxlbih2YWx1ZSkpXG5cdFx0XHRcdFx0XHQvLyBcXDAgKCArID4gflxuXHRcdFx0XHRcdFx0Y2FzZSAwOiBjYXNlIDQwOiBjYXNlIDQzOiBjYXNlIDYyOiBjYXNlIDEyNjpcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHZhbHVlXG5cdFx0XHRcdFx0XHQvLyA6XG5cdFx0XHRcdFx0XHRjYXNlIDU4OlxuXHRcdFx0XHRcdFx0XHRpZiAoY2hpbGRyZW5bKytpbmRleF0gPT09ICdnbG9iYWwnKVxuXHRcdFx0XHRcdFx0XHRcdGNoaWxkcmVuW2luZGV4XSA9ICcnLCBjaGlsZHJlblsrK2luZGV4XSA9ICdcXGYnICsgc3Vic3RyKGNoaWxkcmVuW2luZGV4XSwgaW5kZXggPSAxLCAtMSlcblx0XHRcdFx0XHRcdC8vIFxcc1xuXHRcdFx0XHRcdFx0Y2FzZSAzMjpcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGluZGV4ID09PSAxID8gJycgOiB2YWx1ZVxuXHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0c3dpdGNoIChpbmRleCkge1xuXHRcdFx0XHRcdFx0XHRcdGNhc2UgMDogZWxlbWVudCA9IHZhbHVlXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gc2l6ZW9mKGNoaWxkcmVuKSA+IDEgPyAnJyA6IHZhbHVlXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBpbmRleCA9IHNpemVvZihjaGlsZHJlbikgLSAxOiBjYXNlIDI6XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gaW5kZXggPT09IDIgPyB2YWx1ZSArIGVsZW1lbnQgKyBlbGVtZW50IDogdmFsdWUgKyBlbGVtZW50XG5cdFx0XHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0fSlcblx0fVxufVxuIiwgImZ1bmN0aW9uIG1lbW9pemUoZm4pIHtcbiAgdmFyIGNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChhcmcpIHtcbiAgICBpZiAoY2FjaGVbYXJnXSA9PT0gdW5kZWZpbmVkKSBjYWNoZVthcmddID0gZm4oYXJnKTtcbiAgICByZXR1cm4gY2FjaGVbYXJnXTtcbiAgfTtcbn1cblxuZXhwb3J0IHsgbWVtb2l6ZSBhcyBkZWZhdWx0IH07XG4iLCAiaW1wb3J0IHsgU3R5bGVTaGVldCB9IGZyb20gJ0BlbW90aW9uL3NoZWV0JztcbmltcG9ydCB7IGRlYWxsb2MsIGFsbG9jLCBuZXh0LCB0b2tlbiwgZnJvbSwgcGVlaywgZGVsaW1pdCwgc2xpY2UsIHBvc2l0aW9uLCBSVUxFU0VULCBjb21iaW5lLCBtYXRjaCwgc2VyaWFsaXplLCBjb3B5LCByZXBsYWNlLCBXRUJLSVQsIE1PWiwgTVMsIEtFWUZSQU1FUywgREVDTEFSQVRJT04sIGhhc2gsIGNoYXJhdCwgc3RybGVuLCBpbmRleG9mLCBzdHJpbmdpZnksIENPTU1FTlQsIHJ1bGVzaGVldCwgbWlkZGxld2FyZSwgY29tcGlsZSB9IGZyb20gJ3N0eWxpcyc7XG5pbXBvcnQgJ0BlbW90aW9uL3dlYWstbWVtb2l6ZSc7XG5pbXBvcnQgJ0BlbW90aW9uL21lbW9pemUnO1xuXG52YXIgaWRlbnRpZmllcldpdGhQb2ludFRyYWNraW5nID0gZnVuY3Rpb24gaWRlbnRpZmllcldpdGhQb2ludFRyYWNraW5nKGJlZ2luLCBwb2ludHMsIGluZGV4KSB7XG4gIHZhciBwcmV2aW91cyA9IDA7XG4gIHZhciBjaGFyYWN0ZXIgPSAwO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgcHJldmlvdXMgPSBjaGFyYWN0ZXI7XG4gICAgY2hhcmFjdGVyID0gcGVlaygpOyAvLyAmXFxmXG5cbiAgICBpZiAocHJldmlvdXMgPT09IDM4ICYmIGNoYXJhY3RlciA9PT0gMTIpIHtcbiAgICAgIHBvaW50c1tpbmRleF0gPSAxO1xuICAgIH1cblxuICAgIGlmICh0b2tlbihjaGFyYWN0ZXIpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBuZXh0KCk7XG4gIH1cblxuICByZXR1cm4gc2xpY2UoYmVnaW4sIHBvc2l0aW9uKTtcbn07XG5cbnZhciB0b1J1bGVzID0gZnVuY3Rpb24gdG9SdWxlcyhwYXJzZWQsIHBvaW50cykge1xuICAvLyBwcmV0ZW5kIHdlJ3ZlIHN0YXJ0ZWQgd2l0aCBhIGNvbW1hXG4gIHZhciBpbmRleCA9IC0xO1xuICB2YXIgY2hhcmFjdGVyID0gNDQ7XG5cbiAgZG8ge1xuICAgIHN3aXRjaCAodG9rZW4oY2hhcmFjdGVyKSkge1xuICAgICAgY2FzZSAwOlxuICAgICAgICAvLyAmXFxmXG4gICAgICAgIGlmIChjaGFyYWN0ZXIgPT09IDM4ICYmIHBlZWsoKSA9PT0gMTIpIHtcbiAgICAgICAgICAvLyB0aGlzIGlzIG5vdCAxMDAlIGNvcnJlY3QsIHdlIGRvbid0IGFjY291bnQgZm9yIGxpdGVyYWwgc2VxdWVuY2VzIGhlcmUgLSBsaWtlIGZvciBleGFtcGxlIHF1b3RlZCBzdHJpbmdzXG4gICAgICAgICAgLy8gc3R5bGlzIGluc2VydHMgXFxmIGFmdGVyICYgdG8ga25vdyB3aGVuICYgd2hlcmUgaXQgc2hvdWxkIHJlcGxhY2UgdGhpcyBzZXF1ZW5jZSB3aXRoIHRoZSBjb250ZXh0IHNlbGVjdG9yXG4gICAgICAgICAgLy8gYW5kIHdoZW4gaXQgc2hvdWxkIGp1c3QgY29uY2F0ZW5hdGUgdGhlIG91dGVyIGFuZCBpbm5lciBzZWxlY3RvcnNcbiAgICAgICAgICAvLyBpdCdzIHZlcnkgdW5saWtlbHkgZm9yIHRoaXMgc2VxdWVuY2UgdG8gYWN0dWFsbHkgYXBwZWFyIGluIGEgZGlmZmVyZW50IGNvbnRleHQsIHNvIHdlIGp1c3QgbGV2ZXJhZ2UgdGhpcyBmYWN0IGhlcmVcbiAgICAgICAgICBwb2ludHNbaW5kZXhdID0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBhcnNlZFtpbmRleF0gKz0gaWRlbnRpZmllcldpdGhQb2ludFRyYWNraW5nKHBvc2l0aW9uIC0gMSwgcG9pbnRzLCBpbmRleCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDI6XG4gICAgICAgIHBhcnNlZFtpbmRleF0gKz0gZGVsaW1pdChjaGFyYWN0ZXIpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSA0OlxuICAgICAgICAvLyBjb21tYVxuICAgICAgICBpZiAoY2hhcmFjdGVyID09PSA0NCkge1xuICAgICAgICAgIC8vIGNvbG9uXG4gICAgICAgICAgcGFyc2VkWysraW5kZXhdID0gcGVlaygpID09PSA1OCA/ICcmXFxmJyA6ICcnO1xuICAgICAgICAgIHBvaW50c1tpbmRleF0gPSBwYXJzZWRbaW5kZXhdLmxlbmd0aDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAvLyBmYWxsdGhyb3VnaFxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBwYXJzZWRbaW5kZXhdICs9IGZyb20oY2hhcmFjdGVyKTtcbiAgICB9XG4gIH0gd2hpbGUgKGNoYXJhY3RlciA9IG5leHQoKSk7XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn07XG5cbnZhciBnZXRSdWxlcyA9IGZ1bmN0aW9uIGdldFJ1bGVzKHZhbHVlLCBwb2ludHMpIHtcbiAgcmV0dXJuIGRlYWxsb2ModG9SdWxlcyhhbGxvYyh2YWx1ZSksIHBvaW50cykpO1xufTsgLy8gV2Vha1NldCB3b3VsZCBiZSBtb3JlIGFwcHJvcHJpYXRlLCBidXQgb25seSBXZWFrTWFwIGlzIHN1cHBvcnRlZCBpbiBJRTExXG5cblxudmFyIGZpeGVkRWxlbWVudHMgPSAvKiAjX19QVVJFX18gKi9uZXcgV2Vha01hcCgpO1xudmFyIGNvbXBhdCA9IGZ1bmN0aW9uIGNvbXBhdChlbGVtZW50KSB7XG4gIGlmIChlbGVtZW50LnR5cGUgIT09ICdydWxlJyB8fCAhZWxlbWVudC5wYXJlbnQgfHwgLy8gcG9zaXRpdmUgLmxlbmd0aCBpbmRpY2F0ZXMgdGhhdCB0aGlzIHJ1bGUgY29udGFpbnMgcHNldWRvXG4gIC8vIG5lZ2F0aXZlIC5sZW5ndGggaW5kaWNhdGVzIHRoYXQgdGhpcyBydWxlIGhhcyBiZWVuIGFscmVhZHkgcHJlZml4ZWRcbiAgZWxlbWVudC5sZW5ndGggPCAxKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHZhbHVlID0gZWxlbWVudC52YWx1ZSxcbiAgICAgIHBhcmVudCA9IGVsZW1lbnQucGFyZW50O1xuICB2YXIgaXNJbXBsaWNpdFJ1bGUgPSBlbGVtZW50LmNvbHVtbiA9PT0gcGFyZW50LmNvbHVtbiAmJiBlbGVtZW50LmxpbmUgPT09IHBhcmVudC5saW5lO1xuXG4gIHdoaWxlIChwYXJlbnQudHlwZSAhPT0gJ3J1bGUnKSB7XG4gICAgcGFyZW50ID0gcGFyZW50LnBhcmVudDtcbiAgICBpZiAoIXBhcmVudCkgcmV0dXJuO1xuICB9IC8vIHNob3J0LWNpcmN1aXQgZm9yIHRoZSBzaW1wbGVzdCBjYXNlXG5cblxuICBpZiAoZWxlbWVudC5wcm9wcy5sZW5ndGggPT09IDEgJiYgdmFsdWUuY2hhckNvZGVBdCgwKSAhPT0gNThcbiAgLyogY29sb24gKi9cbiAgJiYgIWZpeGVkRWxlbWVudHMuZ2V0KHBhcmVudCkpIHtcbiAgICByZXR1cm47XG4gIH0gLy8gaWYgdGhpcyBpcyBhbiBpbXBsaWNpdGx5IGluc2VydGVkIHJ1bGUgKHRoZSBvbmUgZWFnZXJseSBpbnNlcnRlZCBhdCB0aGUgZWFjaCBuZXcgbmVzdGVkIGxldmVsKVxuICAvLyB0aGVuIHRoZSBwcm9wcyBoYXMgYWxyZWFkeSBiZWVuIG1hbmlwdWxhdGVkIGJlZm9yZWhhbmQgYXMgdGhleSB0aGF0IGFycmF5IGlzIHNoYXJlZCBiZXR3ZWVuIGl0IGFuZCBpdHMgXCJydWxlIHBhcmVudFwiXG5cblxuICBpZiAoaXNJbXBsaWNpdFJ1bGUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBmaXhlZEVsZW1lbnRzLnNldChlbGVtZW50LCB0cnVlKTtcbiAgdmFyIHBvaW50cyA9IFtdO1xuICB2YXIgcnVsZXMgPSBnZXRSdWxlcyh2YWx1ZSwgcG9pbnRzKTtcbiAgdmFyIHBhcmVudFJ1bGVzID0gcGFyZW50LnByb3BzO1xuXG4gIGZvciAodmFyIGkgPSAwLCBrID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBwYXJlbnRSdWxlcy5sZW5ndGg7IGorKywgaysrKSB7XG4gICAgICBlbGVtZW50LnByb3BzW2tdID0gcG9pbnRzW2ldID8gcnVsZXNbaV0ucmVwbGFjZSgvJlxcZi9nLCBwYXJlbnRSdWxlc1tqXSkgOiBwYXJlbnRSdWxlc1tqXSArIFwiIFwiICsgcnVsZXNbaV07XG4gICAgfVxuICB9XG59O1xudmFyIHJlbW92ZUxhYmVsID0gZnVuY3Rpb24gcmVtb3ZlTGFiZWwoZWxlbWVudCkge1xuICBpZiAoZWxlbWVudC50eXBlID09PSAnZGVjbCcpIHtcbiAgICB2YXIgdmFsdWUgPSBlbGVtZW50LnZhbHVlO1xuXG4gICAgaWYgKCAvLyBjaGFyY29kZSBmb3IgbFxuICAgIHZhbHVlLmNoYXJDb2RlQXQoMCkgPT09IDEwOCAmJiAvLyBjaGFyY29kZSBmb3IgYlxuICAgIHZhbHVlLmNoYXJDb2RlQXQoMikgPT09IDk4KSB7XG4gICAgICAvLyB0aGlzIGlnbm9yZXMgbGFiZWxcbiAgICAgIGVsZW1lbnRbXCJyZXR1cm5cIl0gPSAnJztcbiAgICAgIGVsZW1lbnQudmFsdWUgPSAnJztcbiAgICB9XG4gIH1cbn07XG52YXIgaWdub3JlRmxhZyA9ICdlbW90aW9uLWRpc2FibGUtc2VydmVyLXJlbmRlcmluZy11bnNhZmUtc2VsZWN0b3Itd2FybmluZy1wbGVhc2UtZG8tbm90LXVzZS10aGlzLXRoZS13YXJuaW5nLWV4aXN0cy1mb3ItYS1yZWFzb24nO1xuXG52YXIgaXNJZ25vcmluZ0NvbW1lbnQgPSBmdW5jdGlvbiBpc0lnbm9yaW5nQ29tbWVudChlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50LnR5cGUgPT09ICdjb21tJyAmJiBlbGVtZW50LmNoaWxkcmVuLmluZGV4T2YoaWdub3JlRmxhZykgPiAtMTtcbn07XG5cbnZhciBjcmVhdGVVbnNhZmVTZWxlY3RvcnNBbGFybSA9IGZ1bmN0aW9uIGNyZWF0ZVVuc2FmZVNlbGVjdG9yc0FsYXJtKGNhY2hlKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZWxlbWVudCwgaW5kZXgsIGNoaWxkcmVuKSB7XG4gICAgaWYgKGVsZW1lbnQudHlwZSAhPT0gJ3J1bGUnIHx8IGNhY2hlLmNvbXBhdCkgcmV0dXJuO1xuICAgIHZhciB1bnNhZmVQc2V1ZG9DbGFzc2VzID0gZWxlbWVudC52YWx1ZS5tYXRjaCgvKDpmaXJzdHw6bnRofDpudGgtbGFzdCktY2hpbGQvZyk7XG5cbiAgICBpZiAodW5zYWZlUHNldWRvQ2xhc3Nlcykge1xuICAgICAgdmFyIGlzTmVzdGVkID0gISFlbGVtZW50LnBhcmVudDsgLy8gaW4gbmVzdGVkIHJ1bGVzIGNvbW1lbnRzIGJlY29tZSBjaGlsZHJlbiBvZiB0aGUgXCJhdXRvLWluc2VydGVkXCIgcnVsZSBhbmQgdGhhdCdzIGFsd2F5cyB0aGUgYGVsZW1lbnQucGFyZW50YFxuICAgICAgLy9cbiAgICAgIC8vIGNvbnNpZGVyaW5nIHRoaXMgaW5wdXQ6XG4gICAgICAvLyAuYSB7XG4gICAgICAvLyAgIC5iIC8qIGNvbW0gKi8ge31cbiAgICAgIC8vICAgY29sb3I6IGhvdHBpbms7XG4gICAgICAvLyB9XG4gICAgICAvLyB3ZSBnZXQgb3V0cHV0IGNvcnJlc3BvbmRpbmcgdG8gdGhpczpcbiAgICAgIC8vIC5hIHtcbiAgICAgIC8vICAgJiB7XG4gICAgICAvLyAgICAgLyogY29tbSAqL1xuICAgICAgLy8gICAgIGNvbG9yOiBob3RwaW5rO1xuICAgICAgLy8gICB9XG4gICAgICAvLyAgIC5iIHt9XG4gICAgICAvLyB9XG5cbiAgICAgIHZhciBjb21tZW50Q29udGFpbmVyID0gaXNOZXN0ZWQgPyBlbGVtZW50LnBhcmVudC5jaGlsZHJlbiA6IC8vIGdsb2JhbCBydWxlIGF0IHRoZSByb290IGxldmVsXG4gICAgICBjaGlsZHJlbjtcblxuICAgICAgZm9yICh2YXIgaSA9IGNvbW1lbnRDb250YWluZXIubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgdmFyIG5vZGUgPSBjb21tZW50Q29udGFpbmVyW2ldO1xuXG4gICAgICAgIGlmIChub2RlLmxpbmUgPCBlbGVtZW50LmxpbmUpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSAvLyBpdCBpcyBxdWl0ZSB3ZWlyZCBidXQgY29tbWVudHMgYXJlICp1c3VhbGx5KiBwdXQgYXQgYGNvbHVtbjogZWxlbWVudC5jb2x1bW4gLSAxYFxuICAgICAgICAvLyBzbyB3ZSBzZWVrICpmcm9tIHRoZSBlbmQqIGZvciB0aGUgbm9kZSB0aGF0IGlzIGVhcmxpZXIgdGhhbiB0aGUgcnVsZSdzIGBlbGVtZW50YCBhbmQgY2hlY2sgdGhhdFxuICAgICAgICAvLyB0aGlzIHdpbGwgYWxzbyBtYXRjaCBpbnB1dHMgbGlrZSB0aGlzOlxuICAgICAgICAvLyAuYSB7XG4gICAgICAgIC8vICAgLyogY29tbSAqL1xuICAgICAgICAvLyAgIC5iIHt9XG4gICAgICAgIC8vIH1cbiAgICAgICAgLy9cbiAgICAgICAgLy8gYnV0IHRoYXQgaXMgZmluZVxuICAgICAgICAvL1xuICAgICAgICAvLyBpdCB3b3VsZCBiZSB0aGUgZWFzaWVzdCB0byBjaGFuZ2UgdGhlIHBsYWNlbWVudCBvZiB0aGUgY29tbWVudCB0byBiZSB0aGUgZmlyc3QgY2hpbGQgb2YgdGhlIHJ1bGU6XG4gICAgICAgIC8vIC5hIHtcbiAgICAgICAgLy8gICAuYiB7IC8qIGNvbW0gKi8gfVxuICAgICAgICAvLyB9XG4gICAgICAgIC8vIHdpdGggc3VjaCBpbnB1dHMgd2Ugd291bGRuJ3QgaGF2ZSB0byBzZWFyY2ggZm9yIHRoZSBjb21tZW50IGF0IGFsbFxuICAgICAgICAvLyBUT0RPOiBjb25zaWRlciBjaGFuZ2luZyB0aGlzIGNvbW1lbnQgcGxhY2VtZW50IGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb25cblxuXG4gICAgICAgIGlmIChub2RlLmNvbHVtbiA8IGVsZW1lbnQuY29sdW1uKSB7XG4gICAgICAgICAgaWYgKGlzSWdub3JpbmdDb21tZW50KG5vZGUpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdW5zYWZlUHNldWRvQ2xhc3Nlcy5mb3JFYWNoKGZ1bmN0aW9uICh1bnNhZmVQc2V1ZG9DbGFzcykge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiVGhlIHBzZXVkbyBjbGFzcyBcXFwiXCIgKyB1bnNhZmVQc2V1ZG9DbGFzcyArIFwiXFxcIiBpcyBwb3RlbnRpYWxseSB1bnNhZmUgd2hlbiBkb2luZyBzZXJ2ZXItc2lkZSByZW5kZXJpbmcuIFRyeSBjaGFuZ2luZyBpdCB0byBcXFwiXCIgKyB1bnNhZmVQc2V1ZG9DbGFzcy5zcGxpdCgnLWNoaWxkJylbMF0gKyBcIi1vZi10eXBlXFxcIi5cIik7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG59O1xuXG52YXIgaXNJbXBvcnRSdWxlID0gZnVuY3Rpb24gaXNJbXBvcnRSdWxlKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnQudHlwZS5jaGFyQ29kZUF0KDEpID09PSAxMDUgJiYgZWxlbWVudC50eXBlLmNoYXJDb2RlQXQoMCkgPT09IDY0O1xufTtcblxudmFyIGlzUHJlcGVuZGVkV2l0aFJlZ3VsYXJSdWxlcyA9IGZ1bmN0aW9uIGlzUHJlcGVuZGVkV2l0aFJlZ3VsYXJSdWxlcyhpbmRleCwgY2hpbGRyZW4pIHtcbiAgZm9yICh2YXIgaSA9IGluZGV4IC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBpZiAoIWlzSW1wb3J0UnVsZShjaGlsZHJlbltpXSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn07IC8vIHVzZSB0aGlzIHRvIHJlbW92ZSBpbmNvcnJlY3QgZWxlbWVudHMgZnJvbSBmdXJ0aGVyIHByb2Nlc3Npbmdcbi8vIHNvIHRoZXkgZG9uJ3QgZ2V0IGhhbmRlZCB0byB0aGUgYHNoZWV0YCAob3IgYW55dGhpbmcgZWxzZSlcbi8vIGFzIHRoYXQgY291bGQgcG90ZW50aWFsbHkgbGVhZCB0byBhZGRpdGlvbmFsIGxvZ3Mgd2hpY2ggaW4gdHVybiBjb3VsZCBiZSBvdmVyaGVsbWluZyB0byB0aGUgdXNlclxuXG5cbnZhciBudWxsaWZ5RWxlbWVudCA9IGZ1bmN0aW9uIG51bGxpZnlFbGVtZW50KGVsZW1lbnQpIHtcbiAgZWxlbWVudC50eXBlID0gJyc7XG4gIGVsZW1lbnQudmFsdWUgPSAnJztcbiAgZWxlbWVudFtcInJldHVyblwiXSA9ICcnO1xuICBlbGVtZW50LmNoaWxkcmVuID0gJyc7XG4gIGVsZW1lbnQucHJvcHMgPSAnJztcbn07XG5cbnZhciBpbmNvcnJlY3RJbXBvcnRBbGFybSA9IGZ1bmN0aW9uIGluY29ycmVjdEltcG9ydEFsYXJtKGVsZW1lbnQsIGluZGV4LCBjaGlsZHJlbikge1xuICBpZiAoIWlzSW1wb3J0UnVsZShlbGVtZW50KSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChlbGVtZW50LnBhcmVudCkge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJgQGltcG9ydGAgcnVsZXMgY2FuJ3QgYmUgbmVzdGVkIGluc2lkZSBvdGhlciBydWxlcy4gUGxlYXNlIG1vdmUgaXQgdG8gdGhlIHRvcCBsZXZlbCBhbmQgcHV0IGl0IGJlZm9yZSByZWd1bGFyIHJ1bGVzLiBLZWVwIGluIG1pbmQgdGhhdCB0aGV5IGNhbiBvbmx5IGJlIHVzZWQgd2l0aGluIGdsb2JhbCBzdHlsZXMuXCIpO1xuICAgIG51bGxpZnlFbGVtZW50KGVsZW1lbnQpO1xuICB9IGVsc2UgaWYgKGlzUHJlcGVuZGVkV2l0aFJlZ3VsYXJSdWxlcyhpbmRleCwgY2hpbGRyZW4pKSB7XG4gICAgY29uc29sZS5lcnJvcihcImBAaW1wb3J0YCBydWxlcyBjYW4ndCBiZSBhZnRlciBvdGhlciBydWxlcy4gUGxlYXNlIHB1dCB5b3VyIGBAaW1wb3J0YCBydWxlcyBiZWZvcmUgeW91ciBvdGhlciBydWxlcy5cIik7XG4gICAgbnVsbGlmeUVsZW1lbnQoZWxlbWVudCk7XG4gIH1cbn07XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLWZhbGx0aHJvdWdoICovXG5cbmZ1bmN0aW9uIHByZWZpeCh2YWx1ZSwgbGVuZ3RoKSB7XG4gIHN3aXRjaCAoaGFzaCh2YWx1ZSwgbGVuZ3RoKSkge1xuICAgIC8vIGNvbG9yLWFkanVzdFxuICAgIGNhc2UgNTEwMzpcbiAgICAgIHJldHVybiBXRUJLSVQgKyAncHJpbnQtJyArIHZhbHVlICsgdmFsdWU7XG4gICAgLy8gYW5pbWF0aW9uLCBhbmltYXRpb24tKGRlbGF5fGRpcmVjdGlvbnxkdXJhdGlvbnxmaWxsLW1vZGV8aXRlcmF0aW9uLWNvdW50fG5hbWV8cGxheS1zdGF0ZXx0aW1pbmctZnVuY3Rpb24pXG5cbiAgICBjYXNlIDU3Mzc6XG4gICAgY2FzZSA0MjAxOlxuICAgIGNhc2UgMzE3NzpcbiAgICBjYXNlIDM0MzM6XG4gICAgY2FzZSAxNjQxOlxuICAgIGNhc2UgNDQ1NzpcbiAgICBjYXNlIDI5MjE6IC8vIHRleHQtZGVjb3JhdGlvbiwgZmlsdGVyLCBjbGlwLXBhdGgsIGJhY2tmYWNlLXZpc2liaWxpdHksIGNvbHVtbiwgYm94LWRlY29yYXRpb24tYnJlYWtcblxuICAgIGNhc2UgNTU3MjpcbiAgICBjYXNlIDYzNTY6XG4gICAgY2FzZSA1ODQ0OlxuICAgIGNhc2UgMzE5MTpcbiAgICBjYXNlIDY2NDU6XG4gICAgY2FzZSAzMDA1OiAvLyBtYXNrLCBtYXNrLWltYWdlLCBtYXNrLShtb2RlfGNsaXB8c2l6ZSksIG1hc2stKHJlcGVhdHxvcmlnaW4pLCBtYXNrLXBvc2l0aW9uLCBtYXNrLWNvbXBvc2l0ZSxcblxuICAgIGNhc2UgNjM5MTpcbiAgICBjYXNlIDU4Nzk6XG4gICAgY2FzZSA1NjIzOlxuICAgIGNhc2UgNjEzNTpcbiAgICBjYXNlIDQ1OTk6XG4gICAgY2FzZSA0ODU1OiAvLyBiYWNrZ3JvdW5kLWNsaXAsIGNvbHVtbnMsIGNvbHVtbi0oY291bnR8ZmlsbHxnYXB8cnVsZXxydWxlLWNvbG9yfHJ1bGUtc3R5bGV8cnVsZS13aWR0aHxzcGFufHdpZHRoKVxuXG4gICAgY2FzZSA0MjE1OlxuICAgIGNhc2UgNjM4OTpcbiAgICBjYXNlIDUxMDk6XG4gICAgY2FzZSA1MzY1OlxuICAgIGNhc2UgNTYyMTpcbiAgICBjYXNlIDM4Mjk6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyB2YWx1ZTtcbiAgICAvLyBhcHBlYXJhbmNlLCB1c2VyLXNlbGVjdCwgdHJhbnNmb3JtLCBoeXBoZW5zLCB0ZXh0LXNpemUtYWRqdXN0XG5cbiAgICBjYXNlIDUzNDk6XG4gICAgY2FzZSA0MjQ2OlxuICAgIGNhc2UgNDgxMDpcbiAgICBjYXNlIDY5Njg6XG4gICAgY2FzZSAyNzU2OlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTU9aICsgdmFsdWUgKyBNUyArIHZhbHVlICsgdmFsdWU7XG4gICAgLy8gZmxleCwgZmxleC1kaXJlY3Rpb25cblxuICAgIGNhc2UgNjgyODpcbiAgICBjYXNlIDQyNjg6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHZhbHVlICsgdmFsdWU7XG4gICAgLy8gb3JkZXJcblxuICAgIGNhc2UgNjE2NTpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgJ2ZsZXgtJyArIHZhbHVlICsgdmFsdWU7XG4gICAgLy8gYWxpZ24taXRlbXNcblxuICAgIGNhc2UgNTE4NzpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIHJlcGxhY2UodmFsdWUsIC8oXFx3KykuKyg6W15dKykvLCBXRUJLSVQgKyAnYm94LSQxJDInICsgTVMgKyAnZmxleC0kMSQyJykgKyB2YWx1ZTtcbiAgICAvLyBhbGlnbi1zZWxmXG5cbiAgICBjYXNlIDU0NDM6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArICdmbGV4LWl0ZW0tJyArIHJlcGxhY2UodmFsdWUsIC9mbGV4LXwtc2VsZi8sICcnKSArIHZhbHVlO1xuICAgIC8vIGFsaWduLWNvbnRlbnRcblxuICAgIGNhc2UgNDY3NTpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgJ2ZsZXgtbGluZS1wYWNrJyArIHJlcGxhY2UodmFsdWUsIC9hbGlnbi1jb250ZW50fGZsZXgtfC1zZWxmLywgJycpICsgdmFsdWU7XG4gICAgLy8gZmxleC1zaHJpbmtcblxuICAgIGNhc2UgNTU0ODpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgJ3NocmluaycsICduZWdhdGl2ZScpICsgdmFsdWU7XG4gICAgLy8gZmxleC1iYXNpc1xuXG4gICAgY2FzZSA1MjkyOlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAnYmFzaXMnLCAncHJlZmVycmVkLXNpemUnKSArIHZhbHVlO1xuICAgIC8vIGZsZXgtZ3Jvd1xuXG4gICAgY2FzZSA2MDYwOlxuICAgICAgcmV0dXJuIFdFQktJVCArICdib3gtJyArIHJlcGxhY2UodmFsdWUsICctZ3JvdycsICcnKSArIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAnZ3JvdycsICdwb3NpdGl2ZScpICsgdmFsdWU7XG4gICAgLy8gdHJhbnNpdGlvblxuXG4gICAgY2FzZSA0NTU0OlxuICAgICAgcmV0dXJuIFdFQktJVCArIHJlcGxhY2UodmFsdWUsIC8oW14tXSkodHJhbnNmb3JtKS9nLCAnJDEnICsgV0VCS0lUICsgJyQyJykgKyB2YWx1ZTtcbiAgICAvLyBjdXJzb3JcblxuICAgIGNhc2UgNjE4NzpcbiAgICAgIHJldHVybiByZXBsYWNlKHJlcGxhY2UocmVwbGFjZSh2YWx1ZSwgLyh6b29tLXxncmFiKS8sIFdFQktJVCArICckMScpLCAvKGltYWdlLXNldCkvLCBXRUJLSVQgKyAnJDEnKSwgdmFsdWUsICcnKSArIHZhbHVlO1xuICAgIC8vIGJhY2tncm91bmQsIGJhY2tncm91bmQtaW1hZ2VcblxuICAgIGNhc2UgNTQ5NTpcbiAgICBjYXNlIDM5NTk6XG4gICAgICByZXR1cm4gcmVwbGFjZSh2YWx1ZSwgLyhpbWFnZS1zZXRcXChbXl0qKS8sIFdFQktJVCArICckMScgKyAnJGAkMScpO1xuICAgIC8vIGp1c3RpZnktY29udGVudFxuXG4gICAgY2FzZSA0OTY4OlxuICAgICAgcmV0dXJuIHJlcGxhY2UocmVwbGFjZSh2YWx1ZSwgLyguKzopKGZsZXgtKT8oLiopLywgV0VCS0lUICsgJ2JveC1wYWNrOiQzJyArIE1TICsgJ2ZsZXgtcGFjazokMycpLCAvcy4rLWJbXjtdKy8sICdqdXN0aWZ5JykgKyBXRUJLSVQgKyB2YWx1ZSArIHZhbHVlO1xuICAgIC8vIChtYXJnaW58cGFkZGluZyktaW5saW5lLShzdGFydHxlbmQpXG5cbiAgICBjYXNlIDQwOTU6XG4gICAgY2FzZSAzNTgzOlxuICAgIGNhc2UgNDA2ODpcbiAgICBjYXNlIDI1MzI6XG4gICAgICByZXR1cm4gcmVwbGFjZSh2YWx1ZSwgLyguKyktaW5saW5lKC4rKS8sIFdFQktJVCArICckMSQyJykgKyB2YWx1ZTtcbiAgICAvLyAobWlufG1heCk/KHdpZHRofGhlaWdodHxpbmxpbmUtc2l6ZXxibG9jay1zaXplKVxuXG4gICAgY2FzZSA4MTE2OlxuICAgIGNhc2UgNzA1OTpcbiAgICBjYXNlIDU3NTM6XG4gICAgY2FzZSA1NTM1OlxuICAgIGNhc2UgNTQ0NTpcbiAgICBjYXNlIDU3MDE6XG4gICAgY2FzZSA0OTMzOlxuICAgIGNhc2UgNDY3NzpcbiAgICBjYXNlIDU1MzM6XG4gICAgY2FzZSA1Nzg5OlxuICAgIGNhc2UgNTAyMTpcbiAgICBjYXNlIDQ3NjU6XG4gICAgICAvLyBzdHJldGNoLCBtYXgtY29udGVudCwgbWluLWNvbnRlbnQsIGZpbGwtYXZhaWxhYmxlXG4gICAgICBpZiAoc3RybGVuKHZhbHVlKSAtIDEgLSBsZW5ndGggPiA2KSBzd2l0Y2ggKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgMSkpIHtcbiAgICAgICAgLy8gKG0pYXgtY29udGVudCwgKG0paW4tY29udGVudFxuICAgICAgICBjYXNlIDEwOTpcbiAgICAgICAgICAvLyAtXG4gICAgICAgICAgaWYgKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgNCkgIT09IDQ1KSBicmVhaztcbiAgICAgICAgLy8gKGYpaWxsLWF2YWlsYWJsZSwgKGYpaXQtY29udGVudFxuXG4gICAgICAgIGNhc2UgMTAyOlxuICAgICAgICAgIHJldHVybiByZXBsYWNlKHZhbHVlLCAvKC4rOikoLispLShbXl0rKS8sICckMScgKyBXRUJLSVQgKyAnJDItJDMnICsgJyQxJyArIE1PWiArIChjaGFyYXQodmFsdWUsIGxlbmd0aCArIDMpID09IDEwOCA/ICckMycgOiAnJDItJDMnKSkgKyB2YWx1ZTtcbiAgICAgICAgLy8gKHMpdHJldGNoXG5cbiAgICAgICAgY2FzZSAxMTU6XG4gICAgICAgICAgcmV0dXJuIH5pbmRleG9mKHZhbHVlLCAnc3RyZXRjaCcpID8gcHJlZml4KHJlcGxhY2UodmFsdWUsICdzdHJldGNoJywgJ2ZpbGwtYXZhaWxhYmxlJyksIGxlbmd0aCkgKyB2YWx1ZSA6IHZhbHVlO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgLy8gcG9zaXRpb246IHN0aWNreVxuXG4gICAgY2FzZSA0OTQ5OlxuICAgICAgLy8gKHMpdGlja3k/XG4gICAgICBpZiAoY2hhcmF0KHZhbHVlLCBsZW5ndGggKyAxKSAhPT0gMTE1KSBicmVhaztcbiAgICAvLyBkaXNwbGF5OiAoZmxleHxpbmxpbmUtZmxleClcblxuICAgIGNhc2UgNjQ0NDpcbiAgICAgIHN3aXRjaCAoY2hhcmF0KHZhbHVlLCBzdHJsZW4odmFsdWUpIC0gMyAtICh+aW5kZXhvZih2YWx1ZSwgJyFpbXBvcnRhbnQnKSAmJiAxMCkpKSB7XG4gICAgICAgIC8vIHN0aWMoayl5XG4gICAgICAgIGNhc2UgMTA3OlxuICAgICAgICAgIHJldHVybiByZXBsYWNlKHZhbHVlLCAnOicsICc6JyArIFdFQktJVCkgKyB2YWx1ZTtcbiAgICAgICAgLy8gKGlubGluZS0pP2ZsKGUpeFxuXG4gICAgICAgIGNhc2UgMTAxOlxuICAgICAgICAgIHJldHVybiByZXBsYWNlKHZhbHVlLCAvKC4rOikoW147IV0rKSg7fCEuKyk/LywgJyQxJyArIFdFQktJVCArIChjaGFyYXQodmFsdWUsIDE0KSA9PT0gNDUgPyAnaW5saW5lLScgOiAnJykgKyAnYm94JDMnICsgJyQxJyArIFdFQktJVCArICckMiQzJyArICckMScgKyBNUyArICckMmJveCQzJykgKyB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG4gICAgLy8gd3JpdGluZy1tb2RlXG5cbiAgICBjYXNlIDU5MzY6XG4gICAgICBzd2l0Y2ggKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgMTEpKSB7XG4gICAgICAgIC8vIHZlcnRpY2FsLWwocilcbiAgICAgICAgY2FzZSAxMTQ6XG4gICAgICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAvW3N2aF1cXHcrLVt0YmxyXXsyfS8sICd0YicpICsgdmFsdWU7XG4gICAgICAgIC8vIHZlcnRpY2FsLXIobClcblxuICAgICAgICBjYXNlIDEwODpcbiAgICAgICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsIC9bc3ZoXVxcdystW3RibHJdezJ9LywgJ3RiLXJsJykgKyB2YWx1ZTtcbiAgICAgICAgLy8gaG9yaXpvbnRhbCgtKXRiXG5cbiAgICAgICAgY2FzZSA0NTpcbiAgICAgICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsIC9bc3ZoXVxcdystW3RibHJdezJ9LywgJ2xyJykgKyB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyB2YWx1ZSArIHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG52YXIgcHJlZml4ZXIgPSBmdW5jdGlvbiBwcmVmaXhlcihlbGVtZW50LCBpbmRleCwgY2hpbGRyZW4sIGNhbGxiYWNrKSB7XG4gIGlmIChlbGVtZW50Lmxlbmd0aCA+IC0xKSBpZiAoIWVsZW1lbnRbXCJyZXR1cm5cIl0pIHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XG4gICAgY2FzZSBERUNMQVJBVElPTjpcbiAgICAgIGVsZW1lbnRbXCJyZXR1cm5cIl0gPSBwcmVmaXgoZWxlbWVudC52YWx1ZSwgZWxlbWVudC5sZW5ndGgpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIEtFWUZSQU1FUzpcbiAgICAgIHJldHVybiBzZXJpYWxpemUoW2NvcHkoZWxlbWVudCwge1xuICAgICAgICB2YWx1ZTogcmVwbGFjZShlbGVtZW50LnZhbHVlLCAnQCcsICdAJyArIFdFQktJVClcbiAgICAgIH0pXSwgY2FsbGJhY2spO1xuXG4gICAgY2FzZSBSVUxFU0VUOlxuICAgICAgaWYgKGVsZW1lbnQubGVuZ3RoKSByZXR1cm4gY29tYmluZShlbGVtZW50LnByb3BzLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgc3dpdGNoIChtYXRjaCh2YWx1ZSwgLyg6OnBsYWNcXHcrfDpyZWFkLVxcdyspLykpIHtcbiAgICAgICAgICAvLyA6cmVhZC0ob25seXx3cml0ZSlcbiAgICAgICAgICBjYXNlICc6cmVhZC1vbmx5JzpcbiAgICAgICAgICBjYXNlICc6cmVhZC13cml0ZSc6XG4gICAgICAgICAgICByZXR1cm4gc2VyaWFsaXplKFtjb3B5KGVsZW1lbnQsIHtcbiAgICAgICAgICAgICAgcHJvcHM6IFtyZXBsYWNlKHZhbHVlLCAvOihyZWFkLVxcdyspLywgJzonICsgTU9aICsgJyQxJyldXG4gICAgICAgICAgICB9KV0sIGNhbGxiYWNrKTtcbiAgICAgICAgICAvLyA6cGxhY2Vob2xkZXJcblxuICAgICAgICAgIGNhc2UgJzo6cGxhY2Vob2xkZXInOlxuICAgICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZShbY29weShlbGVtZW50LCB7XG4gICAgICAgICAgICAgIHByb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocGxhY1xcdyspLywgJzonICsgV0VCS0lUICsgJ2lucHV0LSQxJyldXG4gICAgICAgICAgICB9KSwgY29weShlbGVtZW50LCB7XG4gICAgICAgICAgICAgIHByb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocGxhY1xcdyspLywgJzonICsgTU9aICsgJyQxJyldXG4gICAgICAgICAgICB9KSwgY29weShlbGVtZW50LCB7XG4gICAgICAgICAgICAgIHByb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocGxhY1xcdyspLywgTVMgKyAnaW5wdXQtJDEnKV1cbiAgICAgICAgICAgIH0pXSwgY2FsbGJhY2spO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfSk7XG4gIH1cbn07XG5cbnZhciBkZWZhdWx0U3R5bGlzUGx1Z2lucyA9IFtwcmVmaXhlcl07XG5cbnZhciBjcmVhdGVDYWNoZSA9IGZ1bmN0aW9uIGNyZWF0ZUNhY2hlKG9wdGlvbnMpIHtcbiAgdmFyIGtleSA9IG9wdGlvbnMua2V5O1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICFrZXkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJZb3UgaGF2ZSB0byBjb25maWd1cmUgYGtleWAgZm9yIHlvdXIgY2FjaGUuIFBsZWFzZSBtYWtlIHN1cmUgaXQncyB1bmlxdWUgKGFuZCBub3QgZXF1YWwgdG8gJ2NzcycpIGFzIGl0J3MgdXNlZCBmb3IgbGlua2luZyBzdHlsZXMgdG8geW91ciBjYWNoZS5cXG5cIiArIFwiSWYgbXVsdGlwbGUgY2FjaGVzIHNoYXJlIHRoZSBzYW1lIGtleSB0aGV5IG1pZ2h0IFxcXCJmaWdodFxcXCIgZm9yIGVhY2ggb3RoZXIncyBzdHlsZSBlbGVtZW50cy5cIik7XG4gIH1cblxuICBpZiAoa2V5ID09PSAnY3NzJykge1xuICAgIHZhciBzc3JTdHlsZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwic3R5bGVbZGF0YS1lbW90aW9uXTpub3QoW2RhdGEtc10pXCIpOyAvLyBnZXQgU1NSZWQgc3R5bGVzIG91dCBvZiB0aGUgd2F5IG9mIFJlYWN0J3MgaHlkcmF0aW9uXG4gICAgLy8gZG9jdW1lbnQuaGVhZCBpcyBhIHNhZmUgcGxhY2UgdG8gbW92ZSB0aGVtIHRvKHRob3VnaCBub3RlIGRvY3VtZW50LmhlYWQgaXMgbm90IG5lY2Vzc2FyaWx5IHRoZSBsYXN0IHBsYWNlIHRoZXkgd2lsbCBiZSlcbiAgICAvLyBub3RlIHRoaXMgdmVyeSB2ZXJ5IGludGVudGlvbmFsbHkgdGFyZ2V0cyBhbGwgc3R5bGUgZWxlbWVudHMgcmVnYXJkbGVzcyBvZiB0aGUga2V5IHRvIGVuc3VyZVxuICAgIC8vIHRoYXQgY3JlYXRpbmcgYSBjYWNoZSB3b3JrcyBpbnNpZGUgb2YgcmVuZGVyIG9mIGEgUmVhY3QgY29tcG9uZW50XG5cbiAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKHNzclN0eWxlcywgZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIC8vIHdlIHdhbnQgdG8gb25seSBtb3ZlIGVsZW1lbnRzIHdoaWNoIGhhdmUgYSBzcGFjZSBpbiB0aGUgZGF0YS1lbW90aW9uIGF0dHJpYnV0ZSB2YWx1ZVxuICAgICAgLy8gYmVjYXVzZSB0aGF0IGluZGljYXRlcyB0aGF0IGl0IGlzIGFuIEVtb3Rpb24gMTEgc2VydmVyLXNpZGUgcmVuZGVyZWQgc3R5bGUgZWxlbWVudHNcbiAgICAgIC8vIHdoaWxlIHdlIHdpbGwgYWxyZWFkeSBpZ25vcmUgRW1vdGlvbiAxMSBjbGllbnQtc2lkZSBpbnNlcnRlZCBzdHlsZXMgYmVjYXVzZSBvZiB0aGUgOm5vdChbZGF0YS1zXSkgcGFydCBpbiB0aGUgc2VsZWN0b3JcbiAgICAgIC8vIEVtb3Rpb24gMTAgY2xpZW50LXNpZGUgaW5zZXJ0ZWQgc3R5bGVzIGRpZCBub3QgaGF2ZSBkYXRhLXMgKGJ1dCBpbXBvcnRhbnRseSBkaWQgbm90IGhhdmUgYSBzcGFjZSBpbiB0aGVpciBkYXRhLWVtb3Rpb24gYXR0cmlidXRlcylcbiAgICAgIC8vIHNvIGNoZWNraW5nIGZvciB0aGUgc3BhY2UgZW5zdXJlcyB0aGF0IGxvYWRpbmcgRW1vdGlvbiAxMSBhZnRlciBFbW90aW9uIDEwIGhhcyBpbnNlcnRlZCBzb21lIHN0eWxlc1xuICAgICAgLy8gd2lsbCBub3QgcmVzdWx0IGluIHRoZSBFbW90aW9uIDEwIHN0eWxlcyBiZWluZyBkZXN0cm95ZWRcbiAgICAgIHZhciBkYXRhRW1vdGlvbkF0dHJpYnV0ZSA9IG5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLWVtb3Rpb24nKTtcblxuICAgICAgaWYgKGRhdGFFbW90aW9uQXR0cmlidXRlLmluZGV4T2YoJyAnKSA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChub2RlKTtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdkYXRhLXMnLCAnJyk7XG4gICAgfSk7XG4gIH1cblxuICB2YXIgc3R5bGlzUGx1Z2lucyA9IG9wdGlvbnMuc3R5bGlzUGx1Z2lucyB8fCBkZWZhdWx0U3R5bGlzUGx1Z2lucztcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIC8vICRGbG93Rml4TWVcbiAgICBpZiAoL1teYS16LV0vLnRlc3Qoa2V5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRW1vdGlvbiBrZXkgbXVzdCBvbmx5IGNvbnRhaW4gbG93ZXIgY2FzZSBhbHBoYWJldGljYWwgY2hhcmFjdGVycyBhbmQgLSBidXQgXFxcIlwiICsga2V5ICsgXCJcXFwiIHdhcyBwYXNzZWRcIik7XG4gICAgfVxuICB9XG5cbiAgdmFyIGluc2VydGVkID0ge307XG4gIHZhciBjb250YWluZXI7XG4gIHZhciBub2Rlc1RvSHlkcmF0ZSA9IFtdO1xuXG4gIHtcbiAgICBjb250YWluZXIgPSBvcHRpb25zLmNvbnRhaW5lciB8fCBkb2N1bWVudC5oZWFkO1xuICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoIC8vIHRoaXMgbWVhbnMgd2Ugd2lsbCBpZ25vcmUgZWxlbWVudHMgd2hpY2ggZG9uJ3QgaGF2ZSBhIHNwYWNlIGluIHRoZW0gd2hpY2hcbiAgICAvLyBtZWFucyB0aGF0IHRoZSBzdHlsZSBlbGVtZW50cyB3ZSdyZSBsb29raW5nIGF0IGFyZSBvbmx5IEVtb3Rpb24gMTEgc2VydmVyLXJlbmRlcmVkIHN0eWxlIGVsZW1lbnRzXG4gICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcInN0eWxlW2RhdGEtZW1vdGlvbl49XFxcIlwiICsga2V5ICsgXCIgXFxcIl1cIiksIGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICB2YXIgYXR0cmliID0gbm9kZS5nZXRBdHRyaWJ1dGUoXCJkYXRhLWVtb3Rpb25cIikuc3BsaXQoJyAnKTsgLy8gJEZsb3dGaXhNZVxuXG4gICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGF0dHJpYi5sZW5ndGg7IGkrKykge1xuICAgICAgICBpbnNlcnRlZFthdHRyaWJbaV1dID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgbm9kZXNUb0h5ZHJhdGUucHVzaChub2RlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhciBfaW5zZXJ0O1xuXG4gIHZhciBvbW5pcHJlc2VudFBsdWdpbnMgPSBbY29tcGF0LCByZW1vdmVMYWJlbF07XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBvbW5pcHJlc2VudFBsdWdpbnMucHVzaChjcmVhdGVVbnNhZmVTZWxlY3RvcnNBbGFybSh7XG4gICAgICBnZXQgY29tcGF0KCkge1xuICAgICAgICByZXR1cm4gY2FjaGUuY29tcGF0O1xuICAgICAgfVxuXG4gICAgfSksIGluY29ycmVjdEltcG9ydEFsYXJtKTtcbiAgfVxuXG4gIHtcbiAgICB2YXIgY3VycmVudFNoZWV0O1xuICAgIHZhciBmaW5hbGl6aW5nUGx1Z2lucyA9IFtzdHJpbmdpZnksIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgaWYgKCFlbGVtZW50LnJvb3QpIHtcbiAgICAgICAgaWYgKGVsZW1lbnRbXCJyZXR1cm5cIl0pIHtcbiAgICAgICAgICBjdXJyZW50U2hlZXQuaW5zZXJ0KGVsZW1lbnRbXCJyZXR1cm5cIl0pO1xuICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQudmFsdWUgJiYgZWxlbWVudC50eXBlICE9PSBDT01NRU5UKSB7XG4gICAgICAgICAgLy8gaW5zZXJ0IGVtcHR5IHJ1bGUgaW4gbm9uLXByb2R1Y3Rpb24gZW52aXJvbm1lbnRzXG4gICAgICAgICAgLy8gc28gQGVtb3Rpb24vamVzdCBjYW4gZ3JhYiBga2V5YCBmcm9tIHRoZSAoSlMpRE9NIGZvciBjYWNoZXMgd2l0aG91dCBhbnkgcnVsZXMgaW5zZXJ0ZWQgeWV0XG4gICAgICAgICAgY3VycmVudFNoZWV0Lmluc2VydChlbGVtZW50LnZhbHVlICsgXCJ7fVwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gOiBydWxlc2hlZXQoZnVuY3Rpb24gKHJ1bGUpIHtcbiAgICAgIGN1cnJlbnRTaGVldC5pbnNlcnQocnVsZSk7XG4gICAgfSldO1xuICAgIHZhciBzZXJpYWxpemVyID0gbWlkZGxld2FyZShvbW5pcHJlc2VudFBsdWdpbnMuY29uY2F0KHN0eWxpc1BsdWdpbnMsIGZpbmFsaXppbmdQbHVnaW5zKSk7XG5cbiAgICB2YXIgc3R5bGlzID0gZnVuY3Rpb24gc3R5bGlzKHN0eWxlcykge1xuICAgICAgcmV0dXJuIHNlcmlhbGl6ZShjb21waWxlKHN0eWxlcyksIHNlcmlhbGl6ZXIpO1xuICAgIH07XG5cbiAgICBfaW5zZXJ0ID0gZnVuY3Rpb24gaW5zZXJ0KHNlbGVjdG9yLCBzZXJpYWxpemVkLCBzaGVldCwgc2hvdWxkQ2FjaGUpIHtcbiAgICAgIGN1cnJlbnRTaGVldCA9IHNoZWV0O1xuXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBzZXJpYWxpemVkLm1hcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGN1cnJlbnRTaGVldCA9IHtcbiAgICAgICAgICBpbnNlcnQ6IGZ1bmN0aW9uIGluc2VydChydWxlKSB7XG4gICAgICAgICAgICBzaGVldC5pbnNlcnQocnVsZSArIHNlcmlhbGl6ZWQubWFwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHN0eWxpcyhzZWxlY3RvciA/IHNlbGVjdG9yICsgXCJ7XCIgKyBzZXJpYWxpemVkLnN0eWxlcyArIFwifVwiIDogc2VyaWFsaXplZC5zdHlsZXMpO1xuXG4gICAgICBpZiAoc2hvdWxkQ2FjaGUpIHtcbiAgICAgICAgY2FjaGUuaW5zZXJ0ZWRbc2VyaWFsaXplZC5uYW1lXSA9IHRydWU7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHZhciBjYWNoZSA9IHtcbiAgICBrZXk6IGtleSxcbiAgICBzaGVldDogbmV3IFN0eWxlU2hlZXQoe1xuICAgICAga2V5OiBrZXksXG4gICAgICBjb250YWluZXI6IGNvbnRhaW5lcixcbiAgICAgIG5vbmNlOiBvcHRpb25zLm5vbmNlLFxuICAgICAgc3BlZWR5OiBvcHRpb25zLnNwZWVkeSxcbiAgICAgIHByZXBlbmQ6IG9wdGlvbnMucHJlcGVuZCxcbiAgICAgIGluc2VydGlvblBvaW50OiBvcHRpb25zLmluc2VydGlvblBvaW50XG4gICAgfSksXG4gICAgbm9uY2U6IG9wdGlvbnMubm9uY2UsXG4gICAgaW5zZXJ0ZWQ6IGluc2VydGVkLFxuICAgIHJlZ2lzdGVyZWQ6IHt9LFxuICAgIGluc2VydDogX2luc2VydFxuICB9O1xuICBjYWNoZS5zaGVldC5oeWRyYXRlKG5vZGVzVG9IeWRyYXRlKTtcbiAgcmV0dXJuIGNhY2hlO1xufTtcblxuZXhwb3J0IHsgY3JlYXRlQ2FjaGUgYXMgZGVmYXVsdCB9O1xuIiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9leHRlbmRzKCkge1xuICBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcbiAgICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH07XG4gIHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufSIsICJ2YXIgaXNCcm93c2VyID0gXCJvYmplY3RcIiAhPT0gJ3VuZGVmaW5lZCc7XG5mdW5jdGlvbiBnZXRSZWdpc3RlcmVkU3R5bGVzKHJlZ2lzdGVyZWQsIHJlZ2lzdGVyZWRTdHlsZXMsIGNsYXNzTmFtZXMpIHtcbiAgdmFyIHJhd0NsYXNzTmFtZSA9ICcnO1xuICBjbGFzc05hbWVzLnNwbGl0KCcgJykuZm9yRWFjaChmdW5jdGlvbiAoY2xhc3NOYW1lKSB7XG4gICAgaWYgKHJlZ2lzdGVyZWRbY2xhc3NOYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZWdpc3RlcmVkU3R5bGVzLnB1c2gocmVnaXN0ZXJlZFtjbGFzc05hbWVdICsgXCI7XCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICByYXdDbGFzc05hbWUgKz0gY2xhc3NOYW1lICsgXCIgXCI7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJhd0NsYXNzTmFtZTtcbn1cbnZhciByZWdpc3RlclN0eWxlcyA9IGZ1bmN0aW9uIHJlZ2lzdGVyU3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLCBpc1N0cmluZ1RhZykge1xuICB2YXIgY2xhc3NOYW1lID0gY2FjaGUua2V5ICsgXCItXCIgKyBzZXJpYWxpemVkLm5hbWU7XG5cbiAgaWYgKCAvLyB3ZSBvbmx5IG5lZWQgdG8gYWRkIHRoZSBzdHlsZXMgdG8gdGhlIHJlZ2lzdGVyZWQgY2FjaGUgaWYgdGhlXG4gIC8vIGNsYXNzIG5hbWUgY291bGQgYmUgdXNlZCBmdXJ0aGVyIGRvd25cbiAgLy8gdGhlIHRyZWUgYnV0IGlmIGl0J3MgYSBzdHJpbmcgdGFnLCB3ZSBrbm93IGl0IHdvbid0XG4gIC8vIHNvIHdlIGRvbid0IGhhdmUgdG8gYWRkIGl0IHRvIHJlZ2lzdGVyZWQgY2FjaGUuXG4gIC8vIHRoaXMgaW1wcm92ZXMgbWVtb3J5IHVzYWdlIHNpbmNlIHdlIGNhbiBhdm9pZCBzdG9yaW5nIHRoZSB3aG9sZSBzdHlsZSBzdHJpbmdcbiAgKGlzU3RyaW5nVGFnID09PSBmYWxzZSB8fCAvLyB3ZSBuZWVkIHRvIGFsd2F5cyBzdG9yZSBpdCBpZiB3ZSdyZSBpbiBjb21wYXQgbW9kZSBhbmRcbiAgLy8gaW4gbm9kZSBzaW5jZSBlbW90aW9uLXNlcnZlciByZWxpZXMgb24gd2hldGhlciBhIHN0eWxlIGlzIGluXG4gIC8vIHRoZSByZWdpc3RlcmVkIGNhY2hlIHRvIGtub3cgd2hldGhlciBhIHN0eWxlIGlzIGdsb2JhbCBvciBub3RcbiAgLy8gYWxzbywgbm90ZSB0aGF0IHRoaXMgY2hlY2sgd2lsbCBiZSBkZWFkIGNvZGUgZWxpbWluYXRlZCBpbiB0aGUgYnJvd3NlclxuICBpc0Jyb3dzZXIgPT09IGZhbHNlICkgJiYgY2FjaGUucmVnaXN0ZXJlZFtjbGFzc05hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICBjYWNoZS5yZWdpc3RlcmVkW2NsYXNzTmFtZV0gPSBzZXJpYWxpemVkLnN0eWxlcztcbiAgfVxufTtcbnZhciBpbnNlcnRTdHlsZXMgPSBmdW5jdGlvbiBpbnNlcnRTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQsIGlzU3RyaW5nVGFnKSB7XG4gIHJlZ2lzdGVyU3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLCBpc1N0cmluZ1RhZyk7XG4gIHZhciBjbGFzc05hbWUgPSBjYWNoZS5rZXkgKyBcIi1cIiArIHNlcmlhbGl6ZWQubmFtZTtcblxuICBpZiAoY2FjaGUuaW5zZXJ0ZWRbc2VyaWFsaXplZC5uYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdmFyIGN1cnJlbnQgPSBzZXJpYWxpemVkO1xuXG4gICAgZG8ge1xuICAgICAgY2FjaGUuaW5zZXJ0KHNlcmlhbGl6ZWQgPT09IGN1cnJlbnQgPyBcIi5cIiArIGNsYXNzTmFtZSA6ICcnLCBjdXJyZW50LCBjYWNoZS5zaGVldCwgdHJ1ZSk7XG5cbiAgICAgIGN1cnJlbnQgPSBjdXJyZW50Lm5leHQ7XG4gICAgfSB3aGlsZSAoY3VycmVudCAhPT0gdW5kZWZpbmVkKTtcbiAgfVxufTtcblxuZXhwb3J0IHsgZ2V0UmVnaXN0ZXJlZFN0eWxlcywgaW5zZXJ0U3R5bGVzLCByZWdpc3RlclN0eWxlcyB9O1xuIiwgIi8qIGVzbGludC1kaXNhYmxlICovXG4vLyBJbnNwaXJlZCBieSBodHRwczovL2dpdGh1Yi5jb20vZ2FyeWNvdXJ0L211cm11cmhhc2gtanNcbi8vIFBvcnRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9hYXBwbGVieS9zbWhhc2hlci9ibG9iLzYxYTA1MzBmMjgyNzdmMmU4NTBiZmMzOTYwMGNlNjFkMDJiNTE4ZGUvc3JjL011cm11ckhhc2gyLmNwcCNMMzctTDg2XG5mdW5jdGlvbiBtdXJtdXIyKHN0cikge1xuICAvLyAnbScgYW5kICdyJyBhcmUgbWl4aW5nIGNvbnN0YW50cyBnZW5lcmF0ZWQgb2ZmbGluZS5cbiAgLy8gVGhleSdyZSBub3QgcmVhbGx5ICdtYWdpYycsIHRoZXkganVzdCBoYXBwZW4gdG8gd29yayB3ZWxsLlxuICAvLyBjb25zdCBtID0gMHg1YmQxZTk5NTtcbiAgLy8gY29uc3QgciA9IDI0O1xuICAvLyBJbml0aWFsaXplIHRoZSBoYXNoXG4gIHZhciBoID0gMDsgLy8gTWl4IDQgYnl0ZXMgYXQgYSB0aW1lIGludG8gdGhlIGhhc2hcblxuICB2YXIgayxcbiAgICAgIGkgPSAwLFxuICAgICAgbGVuID0gc3RyLmxlbmd0aDtcblxuICBmb3IgKDsgbGVuID49IDQ7ICsraSwgbGVuIC09IDQpIHtcbiAgICBrID0gc3RyLmNoYXJDb2RlQXQoaSkgJiAweGZmIHwgKHN0ci5jaGFyQ29kZUF0KCsraSkgJiAweGZmKSA8PCA4IHwgKHN0ci5jaGFyQ29kZUF0KCsraSkgJiAweGZmKSA8PCAxNiB8IChzdHIuY2hhckNvZGVBdCgrK2kpICYgMHhmZikgPDwgMjQ7XG4gICAgayA9XG4gICAgLyogTWF0aC5pbXVsKGssIG0pOiAqL1xuICAgIChrICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUgKyAoKGsgPj4+IDE2KSAqIDB4ZTk5NSA8PCAxNik7XG4gICAgayBePVxuICAgIC8qIGsgPj4+IHI6ICovXG4gICAgayA+Pj4gMjQ7XG4gICAgaCA9XG4gICAgLyogTWF0aC5pbXVsKGssIG0pOiAqL1xuICAgIChrICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUgKyAoKGsgPj4+IDE2KSAqIDB4ZTk5NSA8PCAxNikgXlxuICAgIC8qIE1hdGguaW11bChoLCBtKTogKi9cbiAgICAoaCAmIDB4ZmZmZikgKiAweDViZDFlOTk1ICsgKChoID4+PiAxNikgKiAweGU5OTUgPDwgMTYpO1xuICB9IC8vIEhhbmRsZSB0aGUgbGFzdCBmZXcgYnl0ZXMgb2YgdGhlIGlucHV0IGFycmF5XG5cblxuICBzd2l0Y2ggKGxlbikge1xuICAgIGNhc2UgMzpcbiAgICAgIGggXj0gKHN0ci5jaGFyQ29kZUF0KGkgKyAyKSAmIDB4ZmYpIDw8IDE2O1xuXG4gICAgY2FzZSAyOlxuICAgICAgaCBePSAoc3RyLmNoYXJDb2RlQXQoaSArIDEpICYgMHhmZikgPDwgODtcblxuICAgIGNhc2UgMTpcbiAgICAgIGggXj0gc3RyLmNoYXJDb2RlQXQoaSkgJiAweGZmO1xuICAgICAgaCA9XG4gICAgICAvKiBNYXRoLmltdWwoaCwgbSk6ICovXG4gICAgICAoaCAmIDB4ZmZmZikgKiAweDViZDFlOTk1ICsgKChoID4+PiAxNikgKiAweGU5OTUgPDwgMTYpO1xuICB9IC8vIERvIGEgZmV3IGZpbmFsIG1peGVzIG9mIHRoZSBoYXNoIHRvIGVuc3VyZSB0aGUgbGFzdCBmZXdcbiAgLy8gYnl0ZXMgYXJlIHdlbGwtaW5jb3Jwb3JhdGVkLlxuXG5cbiAgaCBePSBoID4+PiAxMztcbiAgaCA9XG4gIC8qIE1hdGguaW11bChoLCBtKTogKi9cbiAgKGggJiAweGZmZmYpICogMHg1YmQxZTk5NSArICgoaCA+Pj4gMTYpICogMHhlOTk1IDw8IDE2KTtcbiAgcmV0dXJuICgoaCBeIGggPj4+IDE1KSA+Pj4gMCkudG9TdHJpbmcoMzYpO1xufVxuXG5leHBvcnQgeyBtdXJtdXIyIGFzIGRlZmF1bHQgfTtcbiIsICJ2YXIgdW5pdGxlc3NLZXlzID0ge1xuICBhbmltYXRpb25JdGVyYXRpb25Db3VudDogMSxcbiAgYXNwZWN0UmF0aW86IDEsXG4gIGJvcmRlckltYWdlT3V0c2V0OiAxLFxuICBib3JkZXJJbWFnZVNsaWNlOiAxLFxuICBib3JkZXJJbWFnZVdpZHRoOiAxLFxuICBib3hGbGV4OiAxLFxuICBib3hGbGV4R3JvdXA6IDEsXG4gIGJveE9yZGluYWxHcm91cDogMSxcbiAgY29sdW1uQ291bnQ6IDEsXG4gIGNvbHVtbnM6IDEsXG4gIGZsZXg6IDEsXG4gIGZsZXhHcm93OiAxLFxuICBmbGV4UG9zaXRpdmU6IDEsXG4gIGZsZXhTaHJpbms6IDEsXG4gIGZsZXhOZWdhdGl2ZTogMSxcbiAgZmxleE9yZGVyOiAxLFxuICBncmlkUm93OiAxLFxuICBncmlkUm93RW5kOiAxLFxuICBncmlkUm93U3BhbjogMSxcbiAgZ3JpZFJvd1N0YXJ0OiAxLFxuICBncmlkQ29sdW1uOiAxLFxuICBncmlkQ29sdW1uRW5kOiAxLFxuICBncmlkQ29sdW1uU3BhbjogMSxcbiAgZ3JpZENvbHVtblN0YXJ0OiAxLFxuICBtc0dyaWRSb3c6IDEsXG4gIG1zR3JpZFJvd1NwYW46IDEsXG4gIG1zR3JpZENvbHVtbjogMSxcbiAgbXNHcmlkQ29sdW1uU3BhbjogMSxcbiAgZm9udFdlaWdodDogMSxcbiAgbGluZUhlaWdodDogMSxcbiAgb3BhY2l0eTogMSxcbiAgb3JkZXI6IDEsXG4gIG9ycGhhbnM6IDEsXG4gIHRhYlNpemU6IDEsXG4gIHdpZG93czogMSxcbiAgekluZGV4OiAxLFxuICB6b29tOiAxLFxuICBXZWJraXRMaW5lQ2xhbXA6IDEsXG4gIC8vIFNWRy1yZWxhdGVkIHByb3BlcnRpZXNcbiAgZmlsbE9wYWNpdHk6IDEsXG4gIGZsb29kT3BhY2l0eTogMSxcbiAgc3RvcE9wYWNpdHk6IDEsXG4gIHN0cm9rZURhc2hhcnJheTogMSxcbiAgc3Ryb2tlRGFzaG9mZnNldDogMSxcbiAgc3Ryb2tlTWl0ZXJsaW1pdDogMSxcbiAgc3Ryb2tlT3BhY2l0eTogMSxcbiAgc3Ryb2tlV2lkdGg6IDFcbn07XG5cbmV4cG9ydCB7IHVuaXRsZXNzS2V5cyBhcyBkZWZhdWx0IH07XG4iLCAiaW1wb3J0IGhhc2hTdHJpbmcgZnJvbSAnQGVtb3Rpb24vaGFzaCc7XG5pbXBvcnQgdW5pdGxlc3MgZnJvbSAnQGVtb3Rpb24vdW5pdGxlc3MnO1xuaW1wb3J0IG1lbW9pemUgZnJvbSAnQGVtb3Rpb24vbWVtb2l6ZSc7XG5cbnZhciBJTExFR0FMX0VTQ0FQRV9TRVFVRU5DRV9FUlJPUiA9IFwiWW91IGhhdmUgaWxsZWdhbCBlc2NhcGUgc2VxdWVuY2UgaW4geW91ciB0ZW1wbGF0ZSBsaXRlcmFsLCBtb3N0IGxpa2VseSBpbnNpZGUgY29udGVudCdzIHByb3BlcnR5IHZhbHVlLlxcbkJlY2F1c2UgeW91IHdyaXRlIHlvdXIgQ1NTIGluc2lkZSBhIEphdmFTY3JpcHQgc3RyaW5nIHlvdSBhY3R1YWxseSBoYXZlIHRvIGRvIGRvdWJsZSBlc2NhcGluZywgc28gZm9yIGV4YW1wbGUgXFxcImNvbnRlbnQ6ICdcXFxcMDBkNyc7XFxcIiBzaG91bGQgYmVjb21lIFxcXCJjb250ZW50OiAnXFxcXFxcXFwwMGQ3JztcXFwiLlxcbllvdSBjYW4gcmVhZCBtb3JlIGFib3V0IHRoaXMgaGVyZTpcXG5odHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9UZW1wbGF0ZV9saXRlcmFscyNFUzIwMThfcmV2aXNpb25fb2ZfaWxsZWdhbF9lc2NhcGVfc2VxdWVuY2VzXCI7XG52YXIgVU5ERUZJTkVEX0FTX09CSkVDVF9LRVlfRVJST1IgPSBcIllvdSBoYXZlIHBhc3NlZCBpbiBmYWxzeSB2YWx1ZSBhcyBzdHlsZSBvYmplY3QncyBrZXkgKGNhbiBoYXBwZW4gd2hlbiBpbiBleGFtcGxlIHlvdSBwYXNzIHVuZXhwb3J0ZWQgY29tcG9uZW50IGFzIGNvbXB1dGVkIGtleSkuXCI7XG52YXIgaHlwaGVuYXRlUmVnZXggPSAvW0EtWl18Xm1zL2c7XG52YXIgYW5pbWF0aW9uUmVnZXggPSAvX0VNT18oW15fXSs/KV8oW15dKj8pX0VNT18vZztcblxudmFyIGlzQ3VzdG9tUHJvcGVydHkgPSBmdW5jdGlvbiBpc0N1c3RvbVByb3BlcnR5KHByb3BlcnR5KSB7XG4gIHJldHVybiBwcm9wZXJ0eS5jaGFyQ29kZUF0KDEpID09PSA0NTtcbn07XG5cbnZhciBpc1Byb2Nlc3NhYmxlVmFsdWUgPSBmdW5jdGlvbiBpc1Byb2Nlc3NhYmxlVmFsdWUodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlICE9PSAnYm9vbGVhbic7XG59O1xuXG52YXIgcHJvY2Vzc1N0eWxlTmFtZSA9IC8qICNfX1BVUkVfXyAqL21lbW9pemUoZnVuY3Rpb24gKHN0eWxlTmFtZSkge1xuICByZXR1cm4gaXNDdXN0b21Qcm9wZXJ0eShzdHlsZU5hbWUpID8gc3R5bGVOYW1lIDogc3R5bGVOYW1lLnJlcGxhY2UoaHlwaGVuYXRlUmVnZXgsICctJCYnKS50b0xvd2VyQ2FzZSgpO1xufSk7XG5cbnZhciBwcm9jZXNzU3R5bGVWYWx1ZSA9IGZ1bmN0aW9uIHByb2Nlc3NTdHlsZVZhbHVlKGtleSwgdmFsdWUpIHtcbiAgc3dpdGNoIChrZXkpIHtcbiAgICBjYXNlICdhbmltYXRpb24nOlxuICAgIGNhc2UgJ2FuaW1hdGlvbk5hbWUnOlxuICAgICAge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKGFuaW1hdGlvblJlZ2V4LCBmdW5jdGlvbiAobWF0Y2gsIHAxLCBwMikge1xuICAgICAgICAgICAgY3Vyc29yID0ge1xuICAgICAgICAgICAgICBuYW1lOiBwMSxcbiAgICAgICAgICAgICAgc3R5bGVzOiBwMixcbiAgICAgICAgICAgICAgbmV4dDogY3Vyc29yXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIHAxO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gIH1cblxuICBpZiAodW5pdGxlc3Nba2V5XSAhPT0gMSAmJiAhaXNDdXN0b21Qcm9wZXJ0eShrZXkpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgIT09IDApIHtcbiAgICByZXR1cm4gdmFsdWUgKyAncHgnO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFyIGNvbnRlbnRWYWx1ZVBhdHRlcm4gPSAvKHZhcnxhdHRyfGNvdW50ZXJzP3x1cmx8ZWxlbWVudHwoKChyZXBlYXRpbmctKT8obGluZWFyfHJhZGlhbCkpfGNvbmljKS1ncmFkaWVudClcXCh8KG5vLSk/KG9wZW58Y2xvc2UpLXF1b3RlLztcbiAgdmFyIGNvbnRlbnRWYWx1ZXMgPSBbJ25vcm1hbCcsICdub25lJywgJ2luaXRpYWwnLCAnaW5oZXJpdCcsICd1bnNldCddO1xuICB2YXIgb2xkUHJvY2Vzc1N0eWxlVmFsdWUgPSBwcm9jZXNzU3R5bGVWYWx1ZTtcbiAgdmFyIG1zUGF0dGVybiA9IC9eLW1zLS87XG4gIHZhciBoeXBoZW5QYXR0ZXJuID0gLy0oLikvZztcbiAgdmFyIGh5cGhlbmF0ZWRDYWNoZSA9IHt9O1xuXG4gIHByb2Nlc3NTdHlsZVZhbHVlID0gZnVuY3Rpb24gcHJvY2Vzc1N0eWxlVmFsdWUoa2V5LCB2YWx1ZSkge1xuICAgIGlmIChrZXkgPT09ICdjb250ZW50Jykge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycgfHwgY29udGVudFZhbHVlcy5pbmRleE9mKHZhbHVlKSA9PT0gLTEgJiYgIWNvbnRlbnRWYWx1ZVBhdHRlcm4udGVzdCh2YWx1ZSkgJiYgKHZhbHVlLmNoYXJBdCgwKSAhPT0gdmFsdWUuY2hhckF0KHZhbHVlLmxlbmd0aCAtIDEpIHx8IHZhbHVlLmNoYXJBdCgwKSAhPT0gJ1wiJyAmJiB2YWx1ZS5jaGFyQXQoMCkgIT09IFwiJ1wiKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJZb3Ugc2VlbSB0byBiZSB1c2luZyBhIHZhbHVlIGZvciAnY29udGVudCcgd2l0aG91dCBxdW90ZXMsIHRyeSByZXBsYWNpbmcgaXQgd2l0aCBgY29udGVudDogJ1xcXCJcIiArIHZhbHVlICsgXCJcXFwiJ2BcIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHByb2Nlc3NlZCA9IG9sZFByb2Nlc3NTdHlsZVZhbHVlKGtleSwgdmFsdWUpO1xuXG4gICAgaWYgKHByb2Nlc3NlZCAhPT0gJycgJiYgIWlzQ3VzdG9tUHJvcGVydHkoa2V5KSAmJiBrZXkuaW5kZXhPZignLScpICE9PSAtMSAmJiBoeXBoZW5hdGVkQ2FjaGVba2V5XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBoeXBoZW5hdGVkQ2FjaGVba2V5XSA9IHRydWU7XG4gICAgICBjb25zb2xlLmVycm9yKFwiVXNpbmcga2ViYWItY2FzZSBmb3IgY3NzIHByb3BlcnRpZXMgaW4gb2JqZWN0cyBpcyBub3Qgc3VwcG9ydGVkLiBEaWQgeW91IG1lYW4gXCIgKyBrZXkucmVwbGFjZShtc1BhdHRlcm4sICdtcy0nKS5yZXBsYWNlKGh5cGhlblBhdHRlcm4sIGZ1bmN0aW9uIChzdHIsIF9jaGFyKSB7XG4gICAgICAgIHJldHVybiBfY2hhci50b1VwcGVyQ2FzZSgpO1xuICAgICAgfSkgKyBcIj9cIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb2Nlc3NlZDtcbiAgfTtcbn1cblxudmFyIG5vQ29tcG9uZW50U2VsZWN0b3JNZXNzYWdlID0gJ0NvbXBvbmVudCBzZWxlY3RvcnMgY2FuIG9ubHkgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoICcgKyAnQGVtb3Rpb24vYmFiZWwtcGx1Z2luLCB0aGUgc3djIEVtb3Rpb24gcGx1Z2luLCBvciBhbm90aGVyIEVtb3Rpb24tYXdhcmUgJyArICdjb21waWxlciB0cmFuc2Zvcm0uJztcblxuZnVuY3Rpb24gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgaW50ZXJwb2xhdGlvbikge1xuICBpZiAoaW50ZXJwb2xhdGlvbiA9PSBudWxsKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgaWYgKGludGVycG9sYXRpb24uX19lbW90aW9uX3N0eWxlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgaW50ZXJwb2xhdGlvbi50b1N0cmluZygpID09PSAnTk9fQ09NUE9ORU5UX1NFTEVDVE9SJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKG5vQ29tcG9uZW50U2VsZWN0b3JNZXNzYWdlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW50ZXJwb2xhdGlvbjtcbiAgfVxuXG4gIHN3aXRjaCAodHlwZW9mIGludGVycG9sYXRpb24pIHtcbiAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuXG4gICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgIHtcbiAgICAgICAgaWYgKGludGVycG9sYXRpb24uYW5pbSA9PT0gMSkge1xuICAgICAgICAgIGN1cnNvciA9IHtcbiAgICAgICAgICAgIG5hbWU6IGludGVycG9sYXRpb24ubmFtZSxcbiAgICAgICAgICAgIHN0eWxlczogaW50ZXJwb2xhdGlvbi5zdHlsZXMsXG4gICAgICAgICAgICBuZXh0OiBjdXJzb3JcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiBpbnRlcnBvbGF0aW9uLm5hbWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW50ZXJwb2xhdGlvbi5zdHlsZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHZhciBuZXh0ID0gaW50ZXJwb2xhdGlvbi5uZXh0O1xuXG4gICAgICAgICAgaWYgKG5leHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gbm90IHRoZSBtb3N0IGVmZmljaWVudCB0aGluZyBldmVyIGJ1dCB0aGlzIGlzIGEgcHJldHR5IHJhcmUgY2FzZVxuICAgICAgICAgICAgLy8gYW5kIHRoZXJlIHdpbGwgYmUgdmVyeSBmZXcgaXRlcmF0aW9ucyBvZiB0aGlzIGdlbmVyYWxseVxuICAgICAgICAgICAgd2hpbGUgKG5leHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBjdXJzb3IgPSB7XG4gICAgICAgICAgICAgICAgbmFtZTogbmV4dC5uYW1lLFxuICAgICAgICAgICAgICAgIHN0eWxlczogbmV4dC5zdHlsZXMsXG4gICAgICAgICAgICAgICAgbmV4dDogY3Vyc29yXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIG5leHQgPSBuZXh0Lm5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIHN0eWxlcyA9IGludGVycG9sYXRpb24uc3R5bGVzICsgXCI7XCI7XG5cbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBpbnRlcnBvbGF0aW9uLm1hcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzdHlsZXMgKz0gaW50ZXJwb2xhdGlvbi5tYXA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHN0eWxlcztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjcmVhdGVTdHJpbmdGcm9tT2JqZWN0KG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCBpbnRlcnBvbGF0aW9uKTtcbiAgICAgIH1cblxuICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgIHtcbiAgICAgICAgaWYgKG1lcmdlZFByb3BzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB2YXIgcHJldmlvdXNDdXJzb3IgPSBjdXJzb3I7XG4gICAgICAgICAgdmFyIHJlc3VsdCA9IGludGVycG9sYXRpb24obWVyZ2VkUHJvcHMpO1xuICAgICAgICAgIGN1cnNvciA9IHByZXZpb3VzQ3Vyc29yO1xuICAgICAgICAgIHJldHVybiBoYW5kbGVJbnRlcnBvbGF0aW9uKG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCByZXN1bHQpO1xuICAgICAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdGdW5jdGlvbnMgdGhhdCBhcmUgaW50ZXJwb2xhdGVkIGluIGNzcyBjYWxscyB3aWxsIGJlIHN0cmluZ2lmaWVkLlxcbicgKyAnSWYgeW91IHdhbnQgdG8gaGF2ZSBhIGNzcyBjYWxsIGJhc2VkIG9uIHByb3BzLCBjcmVhdGUgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBjc3MgY2FsbCBsaWtlIHRoaXNcXG4nICsgJ2xldCBkeW5hbWljU3R5bGUgPSAocHJvcHMpID0+IGNzc2Bjb2xvcjogJHtwcm9wcy5jb2xvcn1gXFxuJyArICdJdCBjYW4gYmUgY2FsbGVkIGRpcmVjdGx5IHdpdGggcHJvcHMgb3IgaW50ZXJwb2xhdGVkIGluIGEgc3R5bGVkIGNhbGwgbGlrZSB0aGlzXFxuJyArIFwibGV0IFNvbWVDb21wb25lbnQgPSBzdHlsZWQoJ2RpdicpYCR7ZHluYW1pY1N0eWxlfWBcIik7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICB2YXIgbWF0Y2hlZCA9IFtdO1xuICAgICAgICB2YXIgcmVwbGFjZWQgPSBpbnRlcnBvbGF0aW9uLnJlcGxhY2UoYW5pbWF0aW9uUmVnZXgsIGZ1bmN0aW9uIChtYXRjaCwgcDEsIHAyKSB7XG4gICAgICAgICAgdmFyIGZha2VWYXJOYW1lID0gXCJhbmltYXRpb25cIiArIG1hdGNoZWQubGVuZ3RoO1xuICAgICAgICAgIG1hdGNoZWQucHVzaChcImNvbnN0IFwiICsgZmFrZVZhck5hbWUgKyBcIiA9IGtleWZyYW1lc2BcIiArIHAyLnJlcGxhY2UoL15Aa2V5ZnJhbWVzIGFuaW1hdGlvbi1cXHcrLywgJycpICsgXCJgXCIpO1xuICAgICAgICAgIHJldHVybiBcIiR7XCIgKyBmYWtlVmFyTmFtZSArIFwifVwiO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAobWF0Y2hlZC5sZW5ndGgpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdga2V5ZnJhbWVzYCBvdXRwdXQgZ290IGludGVycG9sYXRlZCBpbnRvIHBsYWluIHN0cmluZywgcGxlYXNlIHdyYXAgaXQgd2l0aCBgY3NzYC5cXG5cXG4nICsgJ0luc3RlYWQgb2YgZG9pbmcgdGhpczpcXG5cXG4nICsgW10uY29uY2F0KG1hdGNoZWQsIFtcImBcIiArIHJlcGxhY2VkICsgXCJgXCJdKS5qb2luKCdcXG4nKSArICdcXG5cXG5Zb3Ugc2hvdWxkIHdyYXAgaXQgd2l0aCBgY3NzYCBsaWtlIHRoaXM6XFxuXFxuJyArIChcImNzc2BcIiArIHJlcGxhY2VkICsgXCJgXCIpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBicmVhaztcbiAgfSAvLyBmaW5hbGl6ZSBzdHJpbmcgdmFsdWVzIChyZWd1bGFyIHN0cmluZ3MgYW5kIGZ1bmN0aW9ucyBpbnRlcnBvbGF0ZWQgaW50byBjc3MgY2FsbHMpXG5cblxuICBpZiAocmVnaXN0ZXJlZCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGludGVycG9sYXRpb247XG4gIH1cblxuICB2YXIgY2FjaGVkID0gcmVnaXN0ZXJlZFtpbnRlcnBvbGF0aW9uXTtcbiAgcmV0dXJuIGNhY2hlZCAhPT0gdW5kZWZpbmVkID8gY2FjaGVkIDogaW50ZXJwb2xhdGlvbjtcbn1cblxuZnVuY3Rpb24gY3JlYXRlU3RyaW5nRnJvbU9iamVjdChtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgb2JqKSB7XG4gIHZhciBzdHJpbmcgPSAnJztcblxuICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmoubGVuZ3RoOyBpKyspIHtcbiAgICAgIHN0cmluZyArPSBoYW5kbGVJbnRlcnBvbGF0aW9uKG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCBvYmpbaV0pICsgXCI7XCI7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIF9rZXkgaW4gb2JqKSB7XG4gICAgICB2YXIgdmFsdWUgPSBvYmpbX2tleV07XG5cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIGlmIChyZWdpc3RlcmVkICE9IG51bGwgJiYgcmVnaXN0ZXJlZFt2YWx1ZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHN0cmluZyArPSBfa2V5ICsgXCJ7XCIgKyByZWdpc3RlcmVkW3ZhbHVlXSArIFwifVwiO1xuICAgICAgICB9IGVsc2UgaWYgKGlzUHJvY2Vzc2FibGVWYWx1ZSh2YWx1ZSkpIHtcbiAgICAgICAgICBzdHJpbmcgKz0gcHJvY2Vzc1N0eWxlTmFtZShfa2V5KSArIFwiOlwiICsgcHJvY2Vzc1N0eWxlVmFsdWUoX2tleSwgdmFsdWUpICsgXCI7XCI7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChfa2V5ID09PSAnTk9fQ09NUE9ORU5UX1NFTEVDVE9SJyAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG5vQ29tcG9uZW50U2VsZWN0b3JNZXNzYWdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB0eXBlb2YgdmFsdWVbMF0gPT09ICdzdHJpbmcnICYmIChyZWdpc3RlcmVkID09IG51bGwgfHwgcmVnaXN0ZXJlZFt2YWx1ZVswXV0gPT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgdmFsdWUubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBpZiAoaXNQcm9jZXNzYWJsZVZhbHVlKHZhbHVlW19pXSkpIHtcbiAgICAgICAgICAgICAgc3RyaW5nICs9IHByb2Nlc3NTdHlsZU5hbWUoX2tleSkgKyBcIjpcIiArIHByb2Nlc3NTdHlsZVZhbHVlKF9rZXksIHZhbHVlW19pXSkgKyBcIjtcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIGludGVycG9sYXRlZCA9IGhhbmRsZUludGVycG9sYXRpb24obWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIHZhbHVlKTtcblxuICAgICAgICAgIHN3aXRjaCAoX2tleSkge1xuICAgICAgICAgICAgY2FzZSAnYW5pbWF0aW9uJzpcbiAgICAgICAgICAgIGNhc2UgJ2FuaW1hdGlvbk5hbWUnOlxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3RyaW5nICs9IHByb2Nlc3NTdHlsZU5hbWUoX2tleSkgKyBcIjpcIiArIGludGVycG9sYXRlZCArIFwiO1wiO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBfa2V5ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihVTkRFRklORURfQVNfT0JKRUNUX0tFWV9FUlJPUik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgc3RyaW5nICs9IF9rZXkgKyBcIntcIiArIGludGVycG9sYXRlZCArIFwifVwiO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0cmluZztcbn1cblxudmFyIGxhYmVsUGF0dGVybiA9IC9sYWJlbDpcXHMqKFteXFxzO1xcbntdKylcXHMqKDt8JCkvZztcbnZhciBzb3VyY2VNYXBQYXR0ZXJuO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBzb3VyY2VNYXBQYXR0ZXJuID0gL1xcL1xcKiNcXHNzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb25cXC9qc29uO1xcUytcXHMrXFwqXFwvL2c7XG59IC8vIHRoaXMgaXMgdGhlIGN1cnNvciBmb3Iga2V5ZnJhbWVzXG4vLyBrZXlmcmFtZXMgYXJlIHN0b3JlZCBvbiB0aGUgU2VyaWFsaXplZFN0eWxlcyBvYmplY3QgYXMgYSBsaW5rZWQgbGlzdFxuXG5cbnZhciBjdXJzb3I7XG52YXIgc2VyaWFsaXplU3R5bGVzID0gZnVuY3Rpb24gc2VyaWFsaXplU3R5bGVzKGFyZ3MsIHJlZ2lzdGVyZWQsIG1lcmdlZFByb3BzKSB7XG4gIGlmIChhcmdzLmxlbmd0aCA9PT0gMSAmJiB0eXBlb2YgYXJnc1swXSA9PT0gJ29iamVjdCcgJiYgYXJnc1swXSAhPT0gbnVsbCAmJiBhcmdzWzBdLnN0eWxlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGFyZ3NbMF07XG4gIH1cblxuICB2YXIgc3RyaW5nTW9kZSA9IHRydWU7XG4gIHZhciBzdHlsZXMgPSAnJztcbiAgY3Vyc29yID0gdW5kZWZpbmVkO1xuICB2YXIgc3RyaW5ncyA9IGFyZ3NbMF07XG5cbiAgaWYgKHN0cmluZ3MgPT0gbnVsbCB8fCBzdHJpbmdzLnJhdyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgc3RyaW5nTW9kZSA9IGZhbHNlO1xuICAgIHN0eWxlcyArPSBoYW5kbGVJbnRlcnBvbGF0aW9uKG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCBzdHJpbmdzKTtcbiAgfSBlbHNlIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBzdHJpbmdzWzBdID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoSUxMRUdBTF9FU0NBUEVfU0VRVUVOQ0VfRVJST1IpO1xuICAgIH1cblxuICAgIHN0eWxlcyArPSBzdHJpbmdzWzBdO1xuICB9IC8vIHdlIHN0YXJ0IGF0IDEgc2luY2Ugd2UndmUgYWxyZWFkeSBoYW5kbGVkIHRoZSBmaXJzdCBhcmdcblxuXG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgIHN0eWxlcyArPSBoYW5kbGVJbnRlcnBvbGF0aW9uKG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCBhcmdzW2ldKTtcblxuICAgIGlmIChzdHJpbmdNb2RlKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBzdHJpbmdzW2ldID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihJTExFR0FMX0VTQ0FQRV9TRVFVRU5DRV9FUlJPUik7XG4gICAgICB9XG5cbiAgICAgIHN0eWxlcyArPSBzdHJpbmdzW2ldO1xuICAgIH1cbiAgfVxuXG4gIHZhciBzb3VyY2VNYXA7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBzdHlsZXMgPSBzdHlsZXMucmVwbGFjZShzb3VyY2VNYXBQYXR0ZXJuLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgIHNvdXJjZU1hcCA9IG1hdGNoO1xuICAgICAgcmV0dXJuICcnO1xuICAgIH0pO1xuICB9IC8vIHVzaW5nIGEgZ2xvYmFsIHJlZ2V4IHdpdGggLmV4ZWMgaXMgc3RhdGVmdWwgc28gbGFzdEluZGV4IGhhcyB0byBiZSByZXNldCBlYWNoIHRpbWVcblxuXG4gIGxhYmVsUGF0dGVybi5sYXN0SW5kZXggPSAwO1xuICB2YXIgaWRlbnRpZmllck5hbWUgPSAnJztcbiAgdmFyIG1hdGNoOyAvLyBodHRwczovL2VzYmVuY2guY29tL2JlbmNoLzViODA5YzJjZjI5NDk4MDBhMGY2MWZiNVxuXG4gIHdoaWxlICgobWF0Y2ggPSBsYWJlbFBhdHRlcm4uZXhlYyhzdHlsZXMpKSAhPT0gbnVsbCkge1xuICAgIGlkZW50aWZpZXJOYW1lICs9ICctJyArIC8vICRGbG93Rml4TWUgd2Uga25vdyBpdCdzIG5vdCBudWxsXG4gICAgbWF0Y2hbMV07XG4gIH1cblxuICB2YXIgbmFtZSA9IGhhc2hTdHJpbmcoc3R5bGVzKSArIGlkZW50aWZpZXJOYW1lO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gJEZsb3dGaXhNZSBTZXJpYWxpemVkU3R5bGVzIHR5cGUgZG9lc24ndCBoYXZlIHRvU3RyaW5nIHByb3BlcnR5IChhbmQgd2UgZG9uJ3Qgd2FudCB0byBhZGQgaXQpXG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IG5hbWUsXG4gICAgICBzdHlsZXM6IHN0eWxlcyxcbiAgICAgIG1hcDogc291cmNlTWFwLFxuICAgICAgbmV4dDogY3Vyc29yLFxuICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbmFtZTogbmFtZSxcbiAgICBzdHlsZXM6IHN0eWxlcyxcbiAgICBuZXh0OiBjdXJzb3JcbiAgfTtcbn07XG5cbmV4cG9ydCB7IHNlcmlhbGl6ZVN0eWxlcyB9O1xuIiwgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcblxudmFyIHN5bmNGYWxsYmFjayA9IGZ1bmN0aW9uIHN5bmNGYWxsYmFjayhjcmVhdGUpIHtcbiAgcmV0dXJuIGNyZWF0ZSgpO1xufTtcblxudmFyIHVzZUluc2VydGlvbkVmZmVjdCA9IFJlYWN0Wyd1c2VJbnNlcnRpb24nICsgJ0VmZmVjdCddID8gUmVhY3RbJ3VzZUluc2VydGlvbicgKyAnRWZmZWN0J10gOiBmYWxzZTtcbnZhciB1c2VJbnNlcnRpb25FZmZlY3RBbHdheXNXaXRoU3luY0ZhbGxiYWNrID0gdXNlSW5zZXJ0aW9uRWZmZWN0IHx8IHN5bmNGYWxsYmFjaztcbnZhciB1c2VJbnNlcnRpb25FZmZlY3RXaXRoTGF5b3V0RmFsbGJhY2sgPSB1c2VJbnNlcnRpb25FZmZlY3QgfHwgUmVhY3QudXNlTGF5b3V0RWZmZWN0O1xuXG5leHBvcnQgeyB1c2VJbnNlcnRpb25FZmZlY3RBbHdheXNXaXRoU3luY0ZhbGxiYWNrLCB1c2VJbnNlcnRpb25FZmZlY3RXaXRoTGF5b3V0RmFsbGJhY2sgfTtcbiIsICJpbXBvcnQgeyBoIGFzIGhhc093biwgRSBhcyBFbW90aW9uLCBjIGFzIGNyZWF0ZUVtb3Rpb25Qcm9wcywgdyBhcyB3aXRoRW1vdGlvbkNhY2hlLCBUIGFzIFRoZW1lQ29udGV4dCwgaSBhcyBpc0Jyb3dzZXIkMSB9IGZyb20gJy4vZW1vdGlvbi1lbGVtZW50LTQzYzZmZWEwLmJyb3dzZXIuZXNtLmpzJztcbmV4cG9ydCB7IEMgYXMgQ2FjaGVQcm92aWRlciwgVCBhcyBUaGVtZUNvbnRleHQsIGEgYXMgVGhlbWVQcm92aWRlciwgXyBhcyBfX3Vuc2FmZV91c2VFbW90aW9uQ2FjaGUsIHUgYXMgdXNlVGhlbWUsIHcgYXMgd2l0aEVtb3Rpb25DYWNoZSwgYiBhcyB3aXRoVGhlbWUgfSBmcm9tICcuL2Vtb3Rpb24tZWxlbWVudC00M2M2ZmVhMC5icm93c2VyLmVzbS5qcyc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBpbnNlcnRTdHlsZXMsIHJlZ2lzdGVyU3R5bGVzLCBnZXRSZWdpc3RlcmVkU3R5bGVzIH0gZnJvbSAnQGVtb3Rpb24vdXRpbHMnO1xuaW1wb3J0IHsgdXNlSW5zZXJ0aW9uRWZmZWN0V2l0aExheW91dEZhbGxiYWNrLCB1c2VJbnNlcnRpb25FZmZlY3RBbHdheXNXaXRoU3luY0ZhbGxiYWNrIH0gZnJvbSAnQGVtb3Rpb24vdXNlLWluc2VydGlvbi1lZmZlY3Qtd2l0aC1mYWxsYmFja3MnO1xuaW1wb3J0IHsgc2VyaWFsaXplU3R5bGVzIH0gZnJvbSAnQGVtb3Rpb24vc2VyaWFsaXplJztcbmltcG9ydCAnQGVtb3Rpb24vY2FjaGUnO1xuaW1wb3J0ICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2V4dGVuZHMnO1xuaW1wb3J0ICdAZW1vdGlvbi93ZWFrLW1lbW9pemUnO1xuaW1wb3J0ICcuLi9faXNvbGF0ZWQtaG5ycy9kaXN0L2Vtb3Rpb24tcmVhY3QtX2lzb2xhdGVkLWhucnMuYnJvd3Nlci5lc20uanMnO1xuaW1wb3J0ICdob2lzdC1ub24tcmVhY3Qtc3RhdGljcyc7XG5cbnZhciBwa2cgPSB7XG5cdG5hbWU6IFwiQGVtb3Rpb24vcmVhY3RcIixcblx0dmVyc2lvbjogXCIxMS4xMS40XCIsXG5cdG1haW46IFwiZGlzdC9lbW90aW9uLXJlYWN0LmNqcy5qc1wiLFxuXHRtb2R1bGU6IFwiZGlzdC9lbW90aW9uLXJlYWN0LmVzbS5qc1wiLFxuXHRicm93c2VyOiB7XG5cdFx0XCIuL2Rpc3QvZW1vdGlvbi1yZWFjdC5lc20uanNcIjogXCIuL2Rpc3QvZW1vdGlvbi1yZWFjdC5icm93c2VyLmVzbS5qc1wiXG5cdH0sXG5cdGV4cG9ydHM6IHtcblx0XHRcIi5cIjoge1xuXHRcdFx0bW9kdWxlOiB7XG5cdFx0XHRcdHdvcmtlcjogXCIuL2Rpc3QvZW1vdGlvbi1yZWFjdC53b3JrZXIuZXNtLmpzXCIsXG5cdFx0XHRcdGJyb3dzZXI6IFwiLi9kaXN0L2Vtb3Rpb24tcmVhY3QuYnJvd3Nlci5lc20uanNcIixcblx0XHRcdFx0XCJkZWZhdWx0XCI6IFwiLi9kaXN0L2Vtb3Rpb24tcmVhY3QuZXNtLmpzXCJcblx0XHRcdH0sXG5cdFx0XHRcImltcG9ydFwiOiBcIi4vZGlzdC9lbW90aW9uLXJlYWN0LmNqcy5tanNcIixcblx0XHRcdFwiZGVmYXVsdFwiOiBcIi4vZGlzdC9lbW90aW9uLXJlYWN0LmNqcy5qc1wiXG5cdFx0fSxcblx0XHRcIi4vanN4LXJ1bnRpbWVcIjoge1xuXHRcdFx0bW9kdWxlOiB7XG5cdFx0XHRcdHdvcmtlcjogXCIuL2pzeC1ydW50aW1lL2Rpc3QvZW1vdGlvbi1yZWFjdC1qc3gtcnVudGltZS53b3JrZXIuZXNtLmpzXCIsXG5cdFx0XHRcdGJyb3dzZXI6IFwiLi9qc3gtcnVudGltZS9kaXN0L2Vtb3Rpb24tcmVhY3QtanN4LXJ1bnRpbWUuYnJvd3Nlci5lc20uanNcIixcblx0XHRcdFx0XCJkZWZhdWx0XCI6IFwiLi9qc3gtcnVudGltZS9kaXN0L2Vtb3Rpb24tcmVhY3QtanN4LXJ1bnRpbWUuZXNtLmpzXCJcblx0XHRcdH0sXG5cdFx0XHRcImltcG9ydFwiOiBcIi4vanN4LXJ1bnRpbWUvZGlzdC9lbW90aW9uLXJlYWN0LWpzeC1ydW50aW1lLmNqcy5tanNcIixcblx0XHRcdFwiZGVmYXVsdFwiOiBcIi4vanN4LXJ1bnRpbWUvZGlzdC9lbW90aW9uLXJlYWN0LWpzeC1ydW50aW1lLmNqcy5qc1wiXG5cdFx0fSxcblx0XHRcIi4vX2lzb2xhdGVkLWhucnNcIjoge1xuXHRcdFx0bW9kdWxlOiB7XG5cdFx0XHRcdHdvcmtlcjogXCIuL19pc29sYXRlZC1obnJzL2Rpc3QvZW1vdGlvbi1yZWFjdC1faXNvbGF0ZWQtaG5ycy53b3JrZXIuZXNtLmpzXCIsXG5cdFx0XHRcdGJyb3dzZXI6IFwiLi9faXNvbGF0ZWQtaG5ycy9kaXN0L2Vtb3Rpb24tcmVhY3QtX2lzb2xhdGVkLWhucnMuYnJvd3Nlci5lc20uanNcIixcblx0XHRcdFx0XCJkZWZhdWx0XCI6IFwiLi9faXNvbGF0ZWQtaG5ycy9kaXN0L2Vtb3Rpb24tcmVhY3QtX2lzb2xhdGVkLWhucnMuZXNtLmpzXCJcblx0XHRcdH0sXG5cdFx0XHRcImltcG9ydFwiOiBcIi4vX2lzb2xhdGVkLWhucnMvZGlzdC9lbW90aW9uLXJlYWN0LV9pc29sYXRlZC1obnJzLmNqcy5tanNcIixcblx0XHRcdFwiZGVmYXVsdFwiOiBcIi4vX2lzb2xhdGVkLWhucnMvZGlzdC9lbW90aW9uLXJlYWN0LV9pc29sYXRlZC1obnJzLmNqcy5qc1wiXG5cdFx0fSxcblx0XHRcIi4vanN4LWRldi1ydW50aW1lXCI6IHtcblx0XHRcdG1vZHVsZToge1xuXHRcdFx0XHR3b3JrZXI6IFwiLi9qc3gtZGV2LXJ1bnRpbWUvZGlzdC9lbW90aW9uLXJlYWN0LWpzeC1kZXYtcnVudGltZS53b3JrZXIuZXNtLmpzXCIsXG5cdFx0XHRcdGJyb3dzZXI6IFwiLi9qc3gtZGV2LXJ1bnRpbWUvZGlzdC9lbW90aW9uLXJlYWN0LWpzeC1kZXYtcnVudGltZS5icm93c2VyLmVzbS5qc1wiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogXCIuL2pzeC1kZXYtcnVudGltZS9kaXN0L2Vtb3Rpb24tcmVhY3QtanN4LWRldi1ydW50aW1lLmVzbS5qc1wiXG5cdFx0XHR9LFxuXHRcdFx0XCJpbXBvcnRcIjogXCIuL2pzeC1kZXYtcnVudGltZS9kaXN0L2Vtb3Rpb24tcmVhY3QtanN4LWRldi1ydW50aW1lLmNqcy5tanNcIixcblx0XHRcdFwiZGVmYXVsdFwiOiBcIi4vanN4LWRldi1ydW50aW1lL2Rpc3QvZW1vdGlvbi1yZWFjdC1qc3gtZGV2LXJ1bnRpbWUuY2pzLmpzXCJcblx0XHR9LFxuXHRcdFwiLi9wYWNrYWdlLmpzb25cIjogXCIuL3BhY2thZ2UuanNvblwiLFxuXHRcdFwiLi90eXBlcy9jc3MtcHJvcFwiOiBcIi4vdHlwZXMvY3NzLXByb3AuZC50c1wiLFxuXHRcdFwiLi9tYWNyb1wiOiB7XG5cdFx0XHR0eXBlczoge1xuXHRcdFx0XHRcImltcG9ydFwiOiBcIi4vbWFjcm8uZC5tdHNcIixcblx0XHRcdFx0XCJkZWZhdWx0XCI6IFwiLi9tYWNyby5kLnRzXCJcblx0XHRcdH0sXG5cdFx0XHRcImRlZmF1bHRcIjogXCIuL21hY3JvLmpzXCJcblx0XHR9XG5cdH0sXG5cdHR5cGVzOiBcInR5cGVzL2luZGV4LmQudHNcIixcblx0ZmlsZXM6IFtcblx0XHRcInNyY1wiLFxuXHRcdFwiZGlzdFwiLFxuXHRcdFwianN4LXJ1bnRpbWVcIixcblx0XHRcImpzeC1kZXYtcnVudGltZVwiLFxuXHRcdFwiX2lzb2xhdGVkLWhucnNcIixcblx0XHRcInR5cGVzLyouZC50c1wiLFxuXHRcdFwibWFjcm8uKlwiXG5cdF0sXG5cdHNpZGVFZmZlY3RzOiBmYWxzZSxcblx0YXV0aG9yOiBcIkVtb3Rpb24gQ29udHJpYnV0b3JzXCIsXG5cdGxpY2Vuc2U6IFwiTUlUXCIsXG5cdHNjcmlwdHM6IHtcblx0XHRcInRlc3Q6dHlwZXNjcmlwdFwiOiBcImR0c2xpbnQgdHlwZXNcIlxuXHR9LFxuXHRkZXBlbmRlbmNpZXM6IHtcblx0XHRcIkBiYWJlbC9ydW50aW1lXCI6IFwiXjcuMTguM1wiLFxuXHRcdFwiQGVtb3Rpb24vYmFiZWwtcGx1Z2luXCI6IFwiXjExLjExLjBcIixcblx0XHRcIkBlbW90aW9uL2NhY2hlXCI6IFwiXjExLjExLjBcIixcblx0XHRcIkBlbW90aW9uL3NlcmlhbGl6ZVwiOiBcIl4xLjEuM1wiLFxuXHRcdFwiQGVtb3Rpb24vdXNlLWluc2VydGlvbi1lZmZlY3Qtd2l0aC1mYWxsYmFja3NcIjogXCJeMS4wLjFcIixcblx0XHRcIkBlbW90aW9uL3V0aWxzXCI6IFwiXjEuMi4xXCIsXG5cdFx0XCJAZW1vdGlvbi93ZWFrLW1lbW9pemVcIjogXCJeMC4zLjFcIixcblx0XHRcImhvaXN0LW5vbi1yZWFjdC1zdGF0aWNzXCI6IFwiXjMuMy4xXCJcblx0fSxcblx0cGVlckRlcGVuZGVuY2llczoge1xuXHRcdHJlYWN0OiBcIj49MTYuOC4wXCJcblx0fSxcblx0cGVlckRlcGVuZGVuY2llc01ldGE6IHtcblx0XHRcIkB0eXBlcy9yZWFjdFwiOiB7XG5cdFx0XHRvcHRpb25hbDogdHJ1ZVxuXHRcdH1cblx0fSxcblx0ZGV2RGVwZW5kZW5jaWVzOiB7XG5cdFx0XCJAZGVmaW5pdGVseXR5cGVkL2R0c2xpbnRcIjogXCIwLjAuMTEyXCIsXG5cdFx0XCJAZW1vdGlvbi9jc3NcIjogXCIxMS4xMS4yXCIsXG5cdFx0XCJAZW1vdGlvbi9jc3MtcHJldHRpZmllclwiOiBcIjEuMS4zXCIsXG5cdFx0XCJAZW1vdGlvbi9zZXJ2ZXJcIjogXCIxMS4xMS4wXCIsXG5cdFx0XCJAZW1vdGlvbi9zdHlsZWRcIjogXCIxMS4xMS4wXCIsXG5cdFx0XCJodG1sLXRhZy1uYW1lc1wiOiBcIl4xLjEuMlwiLFxuXHRcdHJlYWN0OiBcIjE2LjE0LjBcIixcblx0XHRcInN2Zy10YWctbmFtZXNcIjogXCJeMS4xLjFcIixcblx0XHR0eXBlc2NyaXB0OiBcIl40LjUuNVwiXG5cdH0sXG5cdHJlcG9zaXRvcnk6IFwiaHR0cHM6Ly9naXRodWIuY29tL2Vtb3Rpb24tanMvZW1vdGlvbi90cmVlL21haW4vcGFja2FnZXMvcmVhY3RcIixcblx0cHVibGlzaENvbmZpZzoge1xuXHRcdGFjY2VzczogXCJwdWJsaWNcIlxuXHR9LFxuXHRcInVtZDptYWluXCI6IFwiZGlzdC9lbW90aW9uLXJlYWN0LnVtZC5taW4uanNcIixcblx0cHJlY29uc3RydWN0OiB7XG5cdFx0ZW50cnlwb2ludHM6IFtcblx0XHRcdFwiLi9pbmRleC5qc1wiLFxuXHRcdFx0XCIuL2pzeC1ydW50aW1lLmpzXCIsXG5cdFx0XHRcIi4vanN4LWRldi1ydW50aW1lLmpzXCIsXG5cdFx0XHRcIi4vX2lzb2xhdGVkLWhucnMuanNcIlxuXHRcdF0sXG5cdFx0dW1kTmFtZTogXCJlbW90aW9uUmVhY3RcIixcblx0XHRleHBvcnRzOiB7XG5cdFx0XHRlbnZDb25kaXRpb25zOiBbXG5cdFx0XHRcdFwiYnJvd3NlclwiLFxuXHRcdFx0XHRcIndvcmtlclwiXG5cdFx0XHRdLFxuXHRcdFx0ZXh0cmE6IHtcblx0XHRcdFx0XCIuL3R5cGVzL2Nzcy1wcm9wXCI6IFwiLi90eXBlcy9jc3MtcHJvcC5kLnRzXCIsXG5cdFx0XHRcdFwiLi9tYWNyb1wiOiB7XG5cdFx0XHRcdFx0dHlwZXM6IHtcblx0XHRcdFx0XHRcdFwiaW1wb3J0XCI6IFwiLi9tYWNyby5kLm10c1wiLFxuXHRcdFx0XHRcdFx0XCJkZWZhdWx0XCI6IFwiLi9tYWNyby5kLnRzXCJcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFwiZGVmYXVsdFwiOiBcIi4vbWFjcm8uanNcIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG52YXIganN4ID0gZnVuY3Rpb24ganN4KHR5cGUsIHByb3BzKSB7XG4gIHZhciBhcmdzID0gYXJndW1lbnRzO1xuXG4gIGlmIChwcm9wcyA9PSBudWxsIHx8ICFoYXNPd24uY2FsbChwcm9wcywgJ2NzcycpKSB7XG4gICAgLy8gJEZsb3dGaXhNZVxuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50LmFwcGx5KHVuZGVmaW5lZCwgYXJncyk7XG4gIH1cblxuICB2YXIgYXJnc0xlbmd0aCA9IGFyZ3MubGVuZ3RoO1xuICB2YXIgY3JlYXRlRWxlbWVudEFyZ0FycmF5ID0gbmV3IEFycmF5KGFyZ3NMZW5ndGgpO1xuICBjcmVhdGVFbGVtZW50QXJnQXJyYXlbMF0gPSBFbW90aW9uO1xuICBjcmVhdGVFbGVtZW50QXJnQXJyYXlbMV0gPSBjcmVhdGVFbW90aW9uUHJvcHModHlwZSwgcHJvcHMpO1xuXG4gIGZvciAodmFyIGkgPSAyOyBpIDwgYXJnc0xlbmd0aDsgaSsrKSB7XG4gICAgY3JlYXRlRWxlbWVudEFyZ0FycmF5W2ldID0gYXJnc1tpXTtcbiAgfSAvLyAkRmxvd0ZpeE1lXG5cblxuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudC5hcHBseShudWxsLCBjcmVhdGVFbGVtZW50QXJnQXJyYXkpO1xufTtcblxudmFyIHdhcm5lZEFib3V0Q3NzUHJvcEZvckdsb2JhbCA9IGZhbHNlOyAvLyBtYWludGFpbiBwbGFjZSBvdmVyIHJlcmVuZGVycy5cbi8vIGluaXRpYWwgcmVuZGVyIGZyb20gYnJvd3NlciwgaW5zZXJ0QmVmb3JlIGNvbnRleHQuc2hlZXQudGFnc1swXSBvciBpZiBhIHN0eWxlIGhhc24ndCBiZWVuIGluc2VydGVkIHRoZXJlIHlldCwgYXBwZW5kQ2hpbGRcbi8vIGluaXRpYWwgY2xpZW50LXNpZGUgcmVuZGVyIGZyb20gU1NSLCB1c2UgcGxhY2Ugb2YgaHlkcmF0aW5nIHRhZ1xuXG52YXIgR2xvYmFsID0gLyogI19fUFVSRV9fICovd2l0aEVtb3Rpb25DYWNoZShmdW5jdGlvbiAocHJvcHMsIGNhY2hlKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICF3YXJuZWRBYm91dENzc1Byb3BGb3JHbG9iYWwgJiYgKCAvLyBjaGVjayBmb3IgY2xhc3NOYW1lIGFzIHdlbGwgc2luY2UgdGhlIHVzZXIgaXNcbiAgLy8gcHJvYmFibHkgdXNpbmcgdGhlIGN1c3RvbSBjcmVhdGVFbGVtZW50IHdoaWNoXG4gIC8vIG1lYW5zIGl0IHdpbGwgYmUgdHVybmVkIGludG8gYSBjbGFzc05hbWUgcHJvcFxuICAvLyAkRmxvd0ZpeE1lIEkgZG9uJ3QgcmVhbGx5IHdhbnQgdG8gYWRkIGl0IHRvIHRoZSB0eXBlIHNpbmNlIGl0IHNob3VsZG4ndCBiZSB1c2VkXG4gIHByb3BzLmNsYXNzTmFtZSB8fCBwcm9wcy5jc3MpKSB7XG4gICAgY29uc29sZS5lcnJvcihcIkl0IGxvb2tzIGxpa2UgeW91J3JlIHVzaW5nIHRoZSBjc3MgcHJvcCBvbiBHbG9iYWwsIGRpZCB5b3UgbWVhbiB0byB1c2UgdGhlIHN0eWxlcyBwcm9wIGluc3RlYWQ/XCIpO1xuICAgIHdhcm5lZEFib3V0Q3NzUHJvcEZvckdsb2JhbCA9IHRydWU7XG4gIH1cblxuICB2YXIgc3R5bGVzID0gcHJvcHMuc3R5bGVzO1xuICB2YXIgc2VyaWFsaXplZCA9IHNlcmlhbGl6ZVN0eWxlcyhbc3R5bGVzXSwgdW5kZWZpbmVkLCBSZWFjdC51c2VDb250ZXh0KFRoZW1lQ29udGV4dCkpO1xuXG4gIGlmICghaXNCcm93c2VyJDEpIHtcbiAgICB2YXIgX3JlZjtcblxuICAgIHZhciBzZXJpYWxpemVkTmFtZXMgPSBzZXJpYWxpemVkLm5hbWU7XG4gICAgdmFyIHNlcmlhbGl6ZWRTdHlsZXMgPSBzZXJpYWxpemVkLnN0eWxlcztcbiAgICB2YXIgbmV4dCA9IHNlcmlhbGl6ZWQubmV4dDtcblxuICAgIHdoaWxlIChuZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHNlcmlhbGl6ZWROYW1lcyArPSAnICcgKyBuZXh0Lm5hbWU7XG4gICAgICBzZXJpYWxpemVkU3R5bGVzICs9IG5leHQuc3R5bGVzO1xuICAgICAgbmV4dCA9IG5leHQubmV4dDtcbiAgICB9XG5cbiAgICB2YXIgc2hvdWxkQ2FjaGUgPSBjYWNoZS5jb21wYXQgPT09IHRydWU7XG4gICAgdmFyIHJ1bGVzID0gY2FjaGUuaW5zZXJ0KFwiXCIsIHtcbiAgICAgIG5hbWU6IHNlcmlhbGl6ZWROYW1lcyxcbiAgICAgIHN0eWxlczogc2VyaWFsaXplZFN0eWxlc1xuICAgIH0sIGNhY2hlLnNoZWV0LCBzaG91bGRDYWNoZSk7XG5cbiAgICBpZiAoc2hvdWxkQ2FjaGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN0eWxlXCIsIChfcmVmID0ge30sIF9yZWZbXCJkYXRhLWVtb3Rpb25cIl0gPSBjYWNoZS5rZXkgKyBcIi1nbG9iYWwgXCIgKyBzZXJpYWxpemVkTmFtZXMsIF9yZWYuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgPSB7XG4gICAgICBfX2h0bWw6IHJ1bGVzXG4gICAgfSwgX3JlZi5ub25jZSA9IGNhY2hlLnNoZWV0Lm5vbmNlLCBfcmVmKSk7XG4gIH0gLy8geWVzLCBpIGtub3cgdGhlc2UgaG9va3MgYXJlIHVzZWQgY29uZGl0aW9uYWxseVxuICAvLyBidXQgaXQgaXMgYmFzZWQgb24gYSBjb25zdGFudCB0aGF0IHdpbGwgbmV2ZXIgY2hhbmdlIGF0IHJ1bnRpbWVcbiAgLy8gaXQncyBlZmZlY3RpdmVseSBsaWtlIGhhdmluZyB0d28gaW1wbGVtZW50YXRpb25zIGFuZCBzd2l0Y2hpbmcgdGhlbSBvdXRcbiAgLy8gc28gaXQncyBub3QgYWN0dWFsbHkgYnJlYWtpbmcgYW55dGhpbmdcblxuXG4gIHZhciBzaGVldFJlZiA9IFJlYWN0LnVzZVJlZigpO1xuICB1c2VJbnNlcnRpb25FZmZlY3RXaXRoTGF5b3V0RmFsbGJhY2soZnVuY3Rpb24gKCkge1xuICAgIHZhciBrZXkgPSBjYWNoZS5rZXkgKyBcIi1nbG9iYWxcIjsgLy8gdXNlIGNhc2Ugb2YgaHR0cHM6Ly9naXRodWIuY29tL2Vtb3Rpb24tanMvZW1vdGlvbi9pc3N1ZXMvMjY3NVxuXG4gICAgdmFyIHNoZWV0ID0gbmV3IGNhY2hlLnNoZWV0LmNvbnN0cnVjdG9yKHtcbiAgICAgIGtleToga2V5LFxuICAgICAgbm9uY2U6IGNhY2hlLnNoZWV0Lm5vbmNlLFxuICAgICAgY29udGFpbmVyOiBjYWNoZS5zaGVldC5jb250YWluZXIsXG4gICAgICBzcGVlZHk6IGNhY2hlLnNoZWV0LmlzU3BlZWR5XG4gICAgfSk7XG4gICAgdmFyIHJlaHlkcmF0aW5nID0gZmFsc2U7IC8vICRGbG93Rml4TWVcblxuICAgIHZhciBub2RlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcInN0eWxlW2RhdGEtZW1vdGlvbj1cXFwiXCIgKyBrZXkgKyBcIiBcIiArIHNlcmlhbGl6ZWQubmFtZSArIFwiXFxcIl1cIik7XG5cbiAgICBpZiAoY2FjaGUuc2hlZXQudGFncy5sZW5ndGgpIHtcbiAgICAgIHNoZWV0LmJlZm9yZSA9IGNhY2hlLnNoZWV0LnRhZ3NbMF07XG4gICAgfVxuXG4gICAgaWYgKG5vZGUgIT09IG51bGwpIHtcbiAgICAgIHJlaHlkcmF0aW5nID0gdHJ1ZTsgLy8gY2xlYXIgdGhlIGhhc2ggc28gdGhpcyBub2RlIHdvbid0IGJlIHJlY29nbml6YWJsZSBhcyByZWh5ZHJhdGFibGUgYnkgb3RoZXIgPEdsb2JhbC8+c1xuXG4gICAgICBub2RlLnNldEF0dHJpYnV0ZSgnZGF0YS1lbW90aW9uJywga2V5KTtcbiAgICAgIHNoZWV0Lmh5ZHJhdGUoW25vZGVdKTtcbiAgICB9XG5cbiAgICBzaGVldFJlZi5jdXJyZW50ID0gW3NoZWV0LCByZWh5ZHJhdGluZ107XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNoZWV0LmZsdXNoKCk7XG4gICAgfTtcbiAgfSwgW2NhY2hlXSk7XG4gIHVzZUluc2VydGlvbkVmZmVjdFdpdGhMYXlvdXRGYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNoZWV0UmVmQ3VycmVudCA9IHNoZWV0UmVmLmN1cnJlbnQ7XG4gICAgdmFyIHNoZWV0ID0gc2hlZXRSZWZDdXJyZW50WzBdLFxuICAgICAgICByZWh5ZHJhdGluZyA9IHNoZWV0UmVmQ3VycmVudFsxXTtcblxuICAgIGlmIChyZWh5ZHJhdGluZykge1xuICAgICAgc2hlZXRSZWZDdXJyZW50WzFdID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHNlcmlhbGl6ZWQubmV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBpbnNlcnQga2V5ZnJhbWVzXG4gICAgICBpbnNlcnRTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQubmV4dCwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgaWYgKHNoZWV0LnRhZ3MubGVuZ3RoKSB7XG4gICAgICAvLyBpZiB0aGlzIGRvZXNuJ3QgZXhpc3QgdGhlbiBpdCB3aWxsIGJlIG51bGwgc28gdGhlIHN0eWxlIGVsZW1lbnQgd2lsbCBiZSBhcHBlbmRlZFxuICAgICAgdmFyIGVsZW1lbnQgPSBzaGVldC50YWdzW3NoZWV0LnRhZ3MubGVuZ3RoIC0gMV0ubmV4dEVsZW1lbnRTaWJsaW5nO1xuICAgICAgc2hlZXQuYmVmb3JlID0gZWxlbWVudDtcbiAgICAgIHNoZWV0LmZsdXNoKCk7XG4gICAgfVxuXG4gICAgY2FjaGUuaW5zZXJ0KFwiXCIsIHNlcmlhbGl6ZWQsIHNoZWV0LCBmYWxzZSk7XG4gIH0sIFtjYWNoZSwgc2VyaWFsaXplZC5uYW1lXSk7XG4gIHJldHVybiBudWxsO1xufSk7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIEdsb2JhbC5kaXNwbGF5TmFtZSA9ICdFbW90aW9uR2xvYmFsJztcbn1cblxuZnVuY3Rpb24gY3NzKCkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgcmV0dXJuIHNlcmlhbGl6ZVN0eWxlcyhhcmdzKTtcbn1cblxudmFyIGtleWZyYW1lcyA9IGZ1bmN0aW9uIGtleWZyYW1lcygpIHtcbiAgdmFyIGluc2VydGFibGUgPSBjc3MuYXBwbHkodm9pZCAwLCBhcmd1bWVudHMpO1xuICB2YXIgbmFtZSA9IFwiYW5pbWF0aW9uLVwiICsgaW5zZXJ0YWJsZS5uYW1lOyAvLyAkRmxvd0ZpeE1lXG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBuYW1lLFxuICAgIHN0eWxlczogXCJAa2V5ZnJhbWVzIFwiICsgbmFtZSArIFwie1wiICsgaW5zZXJ0YWJsZS5zdHlsZXMgKyBcIn1cIixcbiAgICBhbmltOiAxLFxuICAgIHRvU3RyaW5nOiBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICAgIHJldHVybiBcIl9FTU9fXCIgKyB0aGlzLm5hbWUgKyBcIl9cIiArIHRoaXMuc3R5bGVzICsgXCJfRU1PX1wiO1xuICAgIH1cbiAgfTtcbn07XG5cbnZhciBjbGFzc25hbWVzID0gZnVuY3Rpb24gY2xhc3NuYW1lcyhhcmdzKSB7XG4gIHZhciBsZW4gPSBhcmdzLmxlbmd0aDtcbiAgdmFyIGkgPSAwO1xuICB2YXIgY2xzID0gJyc7XG5cbiAgZm9yICg7IGkgPCBsZW47IGkrKykge1xuICAgIHZhciBhcmcgPSBhcmdzW2ldO1xuICAgIGlmIChhcmcgPT0gbnVsbCkgY29udGludWU7XG4gICAgdmFyIHRvQWRkID0gdm9pZCAwO1xuXG4gICAgc3dpdGNoICh0eXBlb2YgYXJnKSB7XG4gICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG4gICAgICAgICAgICB0b0FkZCA9IGNsYXNzbmFtZXMoYXJnKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgYXJnLnN0eWxlcyAhPT0gdW5kZWZpbmVkICYmIGFyZy5uYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignWW91IGhhdmUgcGFzc2VkIHN0eWxlcyBjcmVhdGVkIHdpdGggYGNzc2AgZnJvbSBgQGVtb3Rpb24vcmVhY3RgIHBhY2thZ2UgdG8gdGhlIGBjeGAuXFxuJyArICdgY3hgIGlzIG1lYW50IHRvIGNvbXBvc2UgY2xhc3MgbmFtZXMgKHN0cmluZ3MpIHNvIHlvdSBzaG91bGQgY29udmVydCB0aG9zZSBzdHlsZXMgdG8gYSBjbGFzcyBuYW1lIGJ5IHBhc3NpbmcgdGhlbSB0byB0aGUgYGNzc2AgcmVjZWl2ZWQgZnJvbSA8Q2xhc3NOYW1lcy8+IGNvbXBvbmVudC4nKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdG9BZGQgPSAnJztcblxuICAgICAgICAgICAgZm9yICh2YXIgayBpbiBhcmcpIHtcbiAgICAgICAgICAgICAgaWYgKGFyZ1trXSAmJiBrKSB7XG4gICAgICAgICAgICAgICAgdG9BZGQgJiYgKHRvQWRkICs9ICcgJyk7XG4gICAgICAgICAgICAgICAgdG9BZGQgKz0gaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHtcbiAgICAgICAgICB0b0FkZCA9IGFyZztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0b0FkZCkge1xuICAgICAgY2xzICYmIChjbHMgKz0gJyAnKTtcbiAgICAgIGNscyArPSB0b0FkZDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY2xzO1xufTtcblxuZnVuY3Rpb24gbWVyZ2UocmVnaXN0ZXJlZCwgY3NzLCBjbGFzc05hbWUpIHtcbiAgdmFyIHJlZ2lzdGVyZWRTdHlsZXMgPSBbXTtcbiAgdmFyIHJhd0NsYXNzTmFtZSA9IGdldFJlZ2lzdGVyZWRTdHlsZXMocmVnaXN0ZXJlZCwgcmVnaXN0ZXJlZFN0eWxlcywgY2xhc3NOYW1lKTtcblxuICBpZiAocmVnaXN0ZXJlZFN0eWxlcy5sZW5ndGggPCAyKSB7XG4gICAgcmV0dXJuIGNsYXNzTmFtZTtcbiAgfVxuXG4gIHJldHVybiByYXdDbGFzc05hbWUgKyBjc3MocmVnaXN0ZXJlZFN0eWxlcyk7XG59XG5cbnZhciBJbnNlcnRpb24gPSBmdW5jdGlvbiBJbnNlcnRpb24oX3JlZikge1xuICB2YXIgY2FjaGUgPSBfcmVmLmNhY2hlLFxuICAgICAgc2VyaWFsaXplZEFyciA9IF9yZWYuc2VyaWFsaXplZEFycjtcbiAgdXNlSW5zZXJ0aW9uRWZmZWN0QWx3YXlzV2l0aFN5bmNGYWxsYmFjayhmdW5jdGlvbiAoKSB7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlcmlhbGl6ZWRBcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgIGluc2VydFN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZEFycltpXSwgZmFsc2UpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG52YXIgQ2xhc3NOYW1lcyA9IC8qICNfX1BVUkVfXyAqL3dpdGhFbW90aW9uQ2FjaGUoZnVuY3Rpb24gKHByb3BzLCBjYWNoZSkge1xuICB2YXIgaGFzUmVuZGVyZWQgPSBmYWxzZTtcbiAgdmFyIHNlcmlhbGl6ZWRBcnIgPSBbXTtcblxuICB2YXIgY3NzID0gZnVuY3Rpb24gY3NzKCkge1xuICAgIGlmIChoYXNSZW5kZXJlZCAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NzcyBjYW4gb25seSBiZSB1c2VkIGR1cmluZyByZW5kZXInKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgdmFyIHNlcmlhbGl6ZWQgPSBzZXJpYWxpemVTdHlsZXMoYXJncywgY2FjaGUucmVnaXN0ZXJlZCk7XG4gICAgc2VyaWFsaXplZEFyci5wdXNoKHNlcmlhbGl6ZWQpOyAvLyByZWdpc3RyYXRpb24gaGFzIHRvIGhhcHBlbiBoZXJlIGFzIHRoZSByZXN1bHQgb2YgdGhpcyBtaWdodCBnZXQgY29uc3VtZWQgYnkgYGN4YFxuXG4gICAgcmVnaXN0ZXJTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQsIGZhbHNlKTtcbiAgICByZXR1cm4gY2FjaGUua2V5ICsgXCItXCIgKyBzZXJpYWxpemVkLm5hbWU7XG4gIH07XG5cbiAgdmFyIGN4ID0gZnVuY3Rpb24gY3goKSB7XG4gICAgaWYgKGhhc1JlbmRlcmVkICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY3ggY2FuIG9ubHkgYmUgdXNlZCBkdXJpbmcgcmVuZGVyJyk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4yKSwgX2tleTIgPSAwOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICBhcmdzW19rZXkyXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lcmdlKGNhY2hlLnJlZ2lzdGVyZWQsIGNzcywgY2xhc3NuYW1lcyhhcmdzKSk7XG4gIH07XG5cbiAgdmFyIGNvbnRlbnQgPSB7XG4gICAgY3NzOiBjc3MsXG4gICAgY3g6IGN4LFxuICAgIHRoZW1lOiBSZWFjdC51c2VDb250ZXh0KFRoZW1lQ29udGV4dClcbiAgfTtcbiAgdmFyIGVsZSA9IHByb3BzLmNoaWxkcmVuKGNvbnRlbnQpO1xuICBoYXNSZW5kZXJlZCA9IHRydWU7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoSW5zZXJ0aW9uLCB7XG4gICAgY2FjaGU6IGNhY2hlLFxuICAgIHNlcmlhbGl6ZWRBcnI6IHNlcmlhbGl6ZWRBcnJcbiAgfSksIGVsZSk7XG59KTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgQ2xhc3NOYW1lcy5kaXNwbGF5TmFtZSA9ICdFbW90aW9uQ2xhc3NOYW1lcyc7XG59XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBpc0Jyb3dzZXIgPSBcIm9iamVjdFwiICE9PSAndW5kZWZpbmVkJzsgLy8gIzE3MjcsICMyOTA1IGZvciBzb21lIHJlYXNvbiBKZXN0IGFuZCBWaXRlc3QgZXZhbHVhdGUgbW9kdWxlcyB0d2ljZSBpZiBzb21lIGNvbnN1bWluZyBtb2R1bGUgZ2V0cyBtb2NrZWRcblxuICB2YXIgaXNUZXN0RW52ID0gdHlwZW9mIGplc3QgIT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiB2aSAhPT0gJ3VuZGVmaW5lZCc7XG5cbiAgaWYgKGlzQnJvd3NlciAmJiAhaXNUZXN0RW52KSB7XG4gICAgLy8gZ2xvYmFsVGhpcyBoYXMgd2lkZSBicm93c2VyIHN1cHBvcnQgLSBodHRwczovL2Nhbml1c2UuY29tLz9zZWFyY2g9Z2xvYmFsVGhpcywgTm9kZS5qcyAxMiBhbmQgbGF0ZXJcbiAgICB2YXIgZ2xvYmFsQ29udGV4dCA9IC8vICRGbG93SWdub3JlXG4gICAgdHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsVGhpcyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG4gICAgOiBpc0Jyb3dzZXIgPyB3aW5kb3cgOiBnbG9iYWw7XG4gICAgdmFyIGdsb2JhbEtleSA9IFwiX19FTU9USU9OX1JFQUNUX1wiICsgcGtnLnZlcnNpb24uc3BsaXQoJy4nKVswXSArIFwiX19cIjtcblxuICAgIGlmIChnbG9iYWxDb250ZXh0W2dsb2JhbEtleV0pIHtcbiAgICAgIGNvbnNvbGUud2FybignWW91IGFyZSBsb2FkaW5nIEBlbW90aW9uL3JlYWN0IHdoZW4gaXQgaXMgYWxyZWFkeSBsb2FkZWQuIFJ1bm5pbmcgJyArICdtdWx0aXBsZSBpbnN0YW5jZXMgbWF5IGNhdXNlIHByb2JsZW1zLiBUaGlzIGNhbiBoYXBwZW4gaWYgbXVsdGlwbGUgJyArICd2ZXJzaW9ucyBhcmUgdXNlZCwgb3IgaWYgbXVsdGlwbGUgYnVpbGRzIG9mIHRoZSBzYW1lIHZlcnNpb24gYXJlICcgKyAndXNlZC4nKTtcbiAgICB9XG5cbiAgICBnbG9iYWxDb250ZXh0W2dsb2JhbEtleV0gPSB0cnVlO1xuICB9XG59XG5cbmV4cG9ydCB7IENsYXNzTmFtZXMsIEdsb2JhbCwganN4IGFzIGNyZWF0ZUVsZW1lbnQsIGNzcywganN4LCBrZXlmcmFtZXMgfTtcbiIsICJmdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBqc3ggfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG4vKipcbiAqIFJlYWN0LmNsb25lRWxlbWVudCBkb2VzIG5vdCB3b3JrIGlmIHRoZSBjbG9uZWQgZWxlbWVudCBkb2VzIG5vdCBhbHJlYWR5IGhhdmUgdGhlXG4gKiBgY3NzYCBwcm9wIC0gYXMgYSByZXN1bHQsIHdlIG5lZWQgdG8gdXNlIGBqc3goKWAgdG8gbWFudWFsbHkgY2xvbmUgdGhlIGVsZW1lbnRcbiAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZW1vdGlvbi1qcy9lbW90aW9uL2lzc3Vlcy8xNDA0XG4gKlxuICogTk9URTogV2UncmUgc3RpbGwgdXNpbmcvdGVzdGluZyB0aGlzIHV0aWxpdHkgaW50ZXJuYWxseSwgc28gdGhpcyBpcyBub3QgeWV0IGEgcHVibGljIEFQSVxuICovXG5cbmV4cG9ydCB2YXIgY2xvbmVFbGVtZW50V2l0aENzcyA9IGZ1bmN0aW9uIGNsb25lRWxlbWVudFdpdGhDc3MoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIGNsb25lZEVsZW1lbnQgPSBlbGVtZW50LnByb3BzLl9fRU1PVElPTl9UWVBFX1BMRUFTRV9ET19OT1RfVVNFX18gfHwgZWxlbWVudC50eXBlOyAvLyBFTU9USU9OX1RZUEUgaGFuZGxlcyBub24tUmVhY3QgZWxlbWVudHMgKG5hdGl2ZSBKU1gvSFRNTCBub2RlcylcblxuICB2YXIgY2xvbmVkUHJvcHMgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe1xuICAgIGtleTogZWxlbWVudC5rZXksXG4gICAgcmVmOiBlbGVtZW50LnJlZlxuICB9LCBlbGVtZW50LnByb3BzKSwgcHJvcHMpO1xuXG4gIGlmIChwcm9wcy5jc3MgfHwgZWxlbWVudC5wcm9wcy5jc3MpIHtcbiAgICBjbG9uZWRQcm9wcy5jc3MgPSBbZWxlbWVudC5wcm9wcy5jc3MsIHByb3BzLmNzc107XG4gIH1cblxuICByZXR1cm4ganN4KGNsb25lZEVsZW1lbnQsIGNsb25lZFByb3BzKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG4vKlxuICogTWl4aW4gdGhhdCBoaWRlcyBlbGVtZW50cyBvZmZzY3JlZW4gdG8gb25seSBiZSByZWFkIGJ5IHNjcmVlbiByZWFkZXJcbiAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZWxhc3RpYy9ldWkvcHVsbC81MTMwIGFuZCBodHRwczovL2dpdGh1Yi5jb20vZWxhc3RpYy9ldWkvcHVsbC81MTUyIGZvciBtb3JlIGluZm9cbiAqL1xuXG5leHBvcnQgdmFyIGV1aVNjcmVlblJlYWRlck9ubHkgPSBmdW5jdGlvbiBldWlTY3JlZW5SZWFkZXJPbmx5KCkge1xuICByZXR1cm4gXCJcXG4gIC8vIFRha2UgdGhlIGVsZW1lbnQgb3V0IG9mIHRoZSBsYXlvdXRcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIC8vIEtlZXAgaXQgdmVydGljYWxseSBpbmxpbmVcXG4gIHRvcDogYXV0bztcXG4gIC8vIENocm9tZSByZXF1aXJlcyBhIGxlZnQgdmFsdWUsIGFuZCBTZWxlbml1bSAodXNlZCBieSBLaWJhbmEncyBGVFIpIHJlcXVpcmVzIGFuIG9mZi1zY3JlZW4gcG9zaXRpb24gZm9yIGl0cyAuZ2V0VmlzaWJsZVRleHQoKSB0byBub3QgcmVnaXN0ZXIgU1Itb25seSB0ZXh0XFxuICBsZWZ0OiAtMTAwMDBweDtcXG4gIC8vIFRoZSBlbGVtZW50IG11c3QgaGF2ZSBhIHNpemUgKGZvciBzb21lIHNjcmVlbiByZWFkZXJzKVxcbiAgd2lkdGg6IDFweDtcXG4gIGhlaWdodDogMXB4O1xcbiAgLy8gQnV0IHJlZHVjZSB0aGUgdmlzaWJsZSBzaXplIHRvIG5vdGhpbmdcXG4gIGNsaXA6IHJlY3QoMCAwIDAgMCk7XFxuICBjbGlwLXBhdGg6IGluc2V0KDUwJSk7XFxuICAvLyBBbmQgZW5zdXJlIG5vIG92ZXJmbG93cyBvY2N1clxcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIC8vIENocm9tZSByZXF1aXJlcyB0aGUgbmVnYXRpdmUgbWFyZ2luIHRvIG5vdCBjYXVzZSBvdmVyZmxvd3Mgb2YgcGFyZW50IGNvbnRhaW5lcnNcXG4gIG1hcmdpbjogLTFweDtcXG5cIjtcbn07XG4vKlxuICogU3R5bGVzXG4gKi9cblxuZXhwb3J0IHZhciBldWlTY3JlZW5SZWFkZXJPbmx5U3R5bGVzID0gZnVuY3Rpb24gZXVpU2NyZWVuUmVhZGVyT25seVN0eWxlcyhzaG93T25Gb2N1cykge1xuICByZXR1cm4ge1xuICAgIGV1aVNjcmVlblJlYWRlck9ubHk6IHNob3dPbkZvY3VzID8gLyojX19QVVJFX18qL2NzcyhcIiY6bm90KDpmb2N1cyk6bm90KDphY3RpdmUpe1wiLCBldWlTY3JlZW5SZWFkZXJPbmx5KCksIFwiO307bGFiZWw6ZXVpU2NyZWVuUmVhZGVyT25seTtcIikgOiAvKiNfX1BVUkVfXyovY3NzKGV1aVNjcmVlblJlYWRlck9ubHkoKSwgXCI7bGFiZWw6ZXVpU2NyZWVuUmVhZGVyT25seTtcIilcbiAgfTtcbn07IiwgImNvbnN0IGNhbmRpZGF0ZVNlbGVjdG9ycyA9IFtcbiAgJ2lucHV0JyxcbiAgJ3NlbGVjdCcsXG4gICd0ZXh0YXJlYScsXG4gICdhW2hyZWZdJyxcbiAgJ2J1dHRvbicsXG4gICdbdGFiaW5kZXhdOm5vdChzbG90KScsXG4gICdhdWRpb1tjb250cm9sc10nLFxuICAndmlkZW9bY29udHJvbHNdJyxcbiAgJ1tjb250ZW50ZWRpdGFibGVdOm5vdChbY29udGVudGVkaXRhYmxlPVwiZmFsc2VcIl0pJyxcbiAgJ2RldGFpbHM+c3VtbWFyeTpmaXJzdC1vZi10eXBlJyxcbiAgJ2RldGFpbHMnLFxuXTtcbmNvbnN0IGNhbmRpZGF0ZVNlbGVjdG9yID0gLyogI19fUFVSRV9fICovIGNhbmRpZGF0ZVNlbGVjdG9ycy5qb2luKCcsJyk7XG5cbmNvbnN0IE5vRWxlbWVudCA9IHR5cGVvZiBFbGVtZW50ID09PSAndW5kZWZpbmVkJztcblxuY29uc3QgbWF0Y2hlcyA9IE5vRWxlbWVudFxuICA/IGZ1bmN0aW9uICgpIHt9XG4gIDogRWxlbWVudC5wcm90b3R5cGUubWF0Y2hlcyB8fFxuICAgIEVsZW1lbnQucHJvdG90eXBlLm1zTWF0Y2hlc1NlbGVjdG9yIHx8XG4gICAgRWxlbWVudC5wcm90b3R5cGUud2Via2l0TWF0Y2hlc1NlbGVjdG9yO1xuXG5jb25zdCBnZXRSb290Tm9kZSA9XG4gICFOb0VsZW1lbnQgJiYgRWxlbWVudC5wcm90b3R5cGUuZ2V0Um9vdE5vZGVcbiAgICA/IChlbGVtZW50KSA9PiBlbGVtZW50LmdldFJvb3ROb2RlKClcbiAgICA6IChlbGVtZW50KSA9PiBlbGVtZW50Lm93bmVyRG9jdW1lbnQ7XG5cbi8qKlxuICogQHBhcmFtIHtFbGVtZW50fSBlbCBjb250YWluZXIgdG8gY2hlY2sgaW5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5jbHVkZUNvbnRhaW5lciBhZGQgY29udGFpbmVyIHRvIGNoZWNrXG4gKiBAcGFyYW0geyhub2RlOiBFbGVtZW50KSA9PiBib29sZWFufSBmaWx0ZXIgZmlsdGVyIGNhbmRpZGF0ZXNcbiAqIEByZXR1cm5zIHtFbGVtZW50W119XG4gKi9cbmNvbnN0IGdldENhbmRpZGF0ZXMgPSBmdW5jdGlvbiAoZWwsIGluY2x1ZGVDb250YWluZXIsIGZpbHRlcikge1xuICBsZXQgY2FuZGlkYXRlcyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5hcHBseShcbiAgICBlbC5xdWVyeVNlbGVjdG9yQWxsKGNhbmRpZGF0ZVNlbGVjdG9yKVxuICApO1xuICBpZiAoaW5jbHVkZUNvbnRhaW5lciAmJiBtYXRjaGVzLmNhbGwoZWwsIGNhbmRpZGF0ZVNlbGVjdG9yKSkge1xuICAgIGNhbmRpZGF0ZXMudW5zaGlmdChlbCk7XG4gIH1cbiAgY2FuZGlkYXRlcyA9IGNhbmRpZGF0ZXMuZmlsdGVyKGZpbHRlcik7XG4gIHJldHVybiBjYW5kaWRhdGVzO1xufTtcblxuLyoqXG4gKiBAY2FsbGJhY2sgR2V0U2hhZG93Um9vdFxuICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IHRvIGNoZWNrIGZvciBzaGFkb3cgcm9vdFxuICogQHJldHVybnMge1NoYWRvd1Jvb3R8Ym9vbGVhbn0gU2hhZG93Um9vdCBpZiBhdmFpbGFibGUgb3IgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIGEgc2hhZG93Um9vdCBpcyBhdHRhY2hlZCBidXQgbm90IGF2YWlsYWJsZS5cbiAqL1xuXG4vKipcbiAqIEBjYWxsYmFjayBTaGFkb3dSb290RmlsdGVyXG4gKiBAcGFyYW0ge0VsZW1lbnR9IHNoYWRvd0hvc3ROb2RlIHRoZSBlbGVtZW50IHdoaWNoIGNvbnRhaW5zIHNoYWRvdyBjb250ZW50XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiBhIHNoYWRvdyByb290IGNvdWxkIHBvdGVudGlhbGx5IGNvbnRhaW4gdmFsaWQgY2FuZGlkYXRlcy5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IENhbmRpZGF0ZXNTY29wZVxuICogQHByb3BlcnR5IHtFbGVtZW50fSBzY29wZSBjb250YWlucyBpbm5lciBjYW5kaWRhdGVzXG4gKiBAcHJvcGVydHkge0VsZW1lbnRbXX0gY2FuZGlkYXRlc1xuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gSXRlcmF0aXZlT3B0aW9uc1xuICogQHByb3BlcnR5IHtHZXRTaGFkb3dSb290fGJvb2xlYW59IGdldFNoYWRvd1Jvb3QgdHJ1ZSBpZiBzaGFkb3cgc3VwcG9ydCBpcyBlbmFibGVkOyBmYWxzeSBpZiBub3Q7XG4gKiAgaWYgYSBmdW5jdGlvbiwgaW1wbGllcyBzaGFkb3cgc3VwcG9ydCBpcyBlbmFibGVkIGFuZCBlaXRoZXIgcmV0dXJucyB0aGUgc2hhZG93IHJvb3Qgb2YgYW4gZWxlbWVudFxuICogIG9yIGEgYm9vbGVhbiBzdGF0aW5nIGlmIGl0IGhhcyBhbiB1bmRpc2Nsb3NlZCBzaGFkb3cgcm9vdFxuICogQHByb3BlcnR5IHsobm9kZTogRWxlbWVudCkgPT4gYm9vbGVhbn0gZmlsdGVyIGZpbHRlciBjYW5kaWRhdGVzXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGZsYXR0ZW4gaWYgdHJ1ZSB0aGVuIHJlc3VsdCB3aWxsIGZsYXR0ZW4gYW55IENhbmRpZGF0ZXNTY29wZSBpbnRvIHRoZSByZXR1cm5lZCBsaXN0XG4gKiBAcHJvcGVydHkge1NoYWRvd1Jvb3RGaWx0ZXJ9IHNoYWRvd1Jvb3RGaWx0ZXIgZmlsdGVyIHNoYWRvdyByb290cztcbiAqL1xuXG4vKipcbiAqIEBwYXJhbSB7RWxlbWVudFtdfSBlbGVtZW50cyBsaXN0IG9mIGVsZW1lbnQgY29udGFpbmVycyB0byBtYXRjaCBjYW5kaWRhdGVzIGZyb21cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5jbHVkZUNvbnRhaW5lciBhZGQgY29udGFpbmVyIGxpc3QgdG8gY2hlY2tcbiAqIEBwYXJhbSB7SXRlcmF0aXZlT3B0aW9uc30gb3B0aW9uc1xuICogQHJldHVybnMge0FycmF5LjxFbGVtZW50fENhbmRpZGF0ZXNTY29wZT59XG4gKi9cbmNvbnN0IGdldENhbmRpZGF0ZXNJdGVyYXRpdmVseSA9IGZ1bmN0aW9uIChcbiAgZWxlbWVudHMsXG4gIGluY2x1ZGVDb250YWluZXIsXG4gIG9wdGlvbnNcbikge1xuICBjb25zdCBjYW5kaWRhdGVzID0gW107XG4gIGNvbnN0IGVsZW1lbnRzVG9DaGVjayA9IEFycmF5LmZyb20oZWxlbWVudHMpO1xuICB3aGlsZSAoZWxlbWVudHNUb0NoZWNrLmxlbmd0aCkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBlbGVtZW50c1RvQ2hlY2suc2hpZnQoKTtcbiAgICBpZiAoZWxlbWVudC50YWdOYW1lID09PSAnU0xPVCcpIHtcbiAgICAgIC8vIGFkZCBzaGFkb3cgZG9tIHNsb3Qgc2NvcGUgKHNsb3QgaXRzZWxmIGNhbm5vdCBiZSBmb2N1c2FibGUpXG4gICAgICBjb25zdCBhc3NpZ25lZCA9IGVsZW1lbnQuYXNzaWduZWRFbGVtZW50cygpO1xuICAgICAgY29uc3QgY29udGVudCA9IGFzc2lnbmVkLmxlbmd0aCA/IGFzc2lnbmVkIDogZWxlbWVudC5jaGlsZHJlbjtcbiAgICAgIGNvbnN0IG5lc3RlZENhbmRpZGF0ZXMgPSBnZXRDYW5kaWRhdGVzSXRlcmF0aXZlbHkoY29udGVudCwgdHJ1ZSwgb3B0aW9ucyk7XG4gICAgICBpZiAob3B0aW9ucy5mbGF0dGVuKSB7XG4gICAgICAgIGNhbmRpZGF0ZXMucHVzaCguLi5uZXN0ZWRDYW5kaWRhdGVzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhbmRpZGF0ZXMucHVzaCh7XG4gICAgICAgICAgc2NvcGU6IGVsZW1lbnQsXG4gICAgICAgICAgY2FuZGlkYXRlczogbmVzdGVkQ2FuZGlkYXRlcyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGNoZWNrIGNhbmRpZGF0ZSBlbGVtZW50XG4gICAgICBjb25zdCB2YWxpZENhbmRpZGF0ZSA9IG1hdGNoZXMuY2FsbChlbGVtZW50LCBjYW5kaWRhdGVTZWxlY3Rvcik7XG4gICAgICBpZiAoXG4gICAgICAgIHZhbGlkQ2FuZGlkYXRlICYmXG4gICAgICAgIG9wdGlvbnMuZmlsdGVyKGVsZW1lbnQpICYmXG4gICAgICAgIChpbmNsdWRlQ29udGFpbmVyIHx8ICFlbGVtZW50cy5pbmNsdWRlcyhlbGVtZW50KSlcbiAgICAgICkge1xuICAgICAgICBjYW5kaWRhdGVzLnB1c2goZWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIC8vIGl0ZXJhdGUgb3ZlciBzaGFkb3cgY29udGVudCBpZiBwb3NzaWJsZVxuICAgICAgY29uc3Qgc2hhZG93Um9vdCA9XG4gICAgICAgIGVsZW1lbnQuc2hhZG93Um9vdCB8fFxuICAgICAgICAvLyBjaGVjayBmb3IgYW4gdW5kaXNjbG9zZWQgc2hhZG93XG4gICAgICAgICh0eXBlb2Ygb3B0aW9ucy5nZXRTaGFkb3dSb290ID09PSAnZnVuY3Rpb24nICYmXG4gICAgICAgICAgb3B0aW9ucy5nZXRTaGFkb3dSb290KGVsZW1lbnQpKTtcblxuICAgICAgY29uc3QgdmFsaWRTaGFkb3dSb290ID1cbiAgICAgICAgIW9wdGlvbnMuc2hhZG93Um9vdEZpbHRlciB8fCBvcHRpb25zLnNoYWRvd1Jvb3RGaWx0ZXIoZWxlbWVudCk7XG5cbiAgICAgIGlmIChzaGFkb3dSb290ICYmIHZhbGlkU2hhZG93Um9vdCkge1xuICAgICAgICAvLyBhZGQgc2hhZG93IGRvbSBzY29wZSBJSUYgYSBzaGFkb3cgcm9vdCBub2RlIHdhcyBnaXZlbjsgb3RoZXJ3aXNlLCBhbiB1bmRpc2Nsb3NlZFxuICAgICAgICAvLyAgc2hhZG93IGV4aXN0cywgc28gbG9vayBhdCBsaWdodCBkb20gY2hpbGRyZW4gYXMgZmFsbGJhY2sgQlVUIGNyZWF0ZSBhIHNjb3BlIGZvciBhbnlcbiAgICAgICAgLy8gIGNoaWxkIGNhbmRpZGF0ZXMgZm91bmQgYmVjYXVzZSB0aGV5J3JlIGxpa2VseSBzbG90dGVkIGVsZW1lbnRzIChlbGVtZW50cyB0aGF0IGFyZVxuICAgICAgICAvLyAgY2hpbGRyZW4gb2YgdGhlIHdlYiBjb21wb25lbnQgZWxlbWVudCAod2hpY2ggaGFzIHRoZSBzaGFkb3cpLCBpbiB0aGUgbGlnaHQgZG9tLCBidXRcbiAgICAgICAgLy8gIHNsb3R0ZWQgc29tZXdoZXJlIF9pbnNpZGVfIHRoZSB1bmRpc2Nsb3NlZCBzaGFkb3cpIC0tIHRoZSBzY29wZSBpcyBjcmVhdGVkIGJlbG93LFxuICAgICAgICAvLyAgX2FmdGVyXyB3ZSByZXR1cm4gZnJvbSB0aGlzIHJlY3Vyc2l2ZSBjYWxsXG4gICAgICAgIGNvbnN0IG5lc3RlZENhbmRpZGF0ZXMgPSBnZXRDYW5kaWRhdGVzSXRlcmF0aXZlbHkoXG4gICAgICAgICAgc2hhZG93Um9vdCA9PT0gdHJ1ZSA/IGVsZW1lbnQuY2hpbGRyZW4gOiBzaGFkb3dSb290LmNoaWxkcmVuLFxuICAgICAgICAgIHRydWUsXG4gICAgICAgICAgb3B0aW9uc1xuICAgICAgICApO1xuXG4gICAgICAgIGlmIChvcHRpb25zLmZsYXR0ZW4pIHtcbiAgICAgICAgICBjYW5kaWRhdGVzLnB1c2goLi4ubmVzdGVkQ2FuZGlkYXRlcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FuZGlkYXRlcy5wdXNoKHtcbiAgICAgICAgICAgIHNjb3BlOiBlbGVtZW50LFxuICAgICAgICAgICAgY2FuZGlkYXRlczogbmVzdGVkQ2FuZGlkYXRlcyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdGhlcmUncyBub3Qgc2hhZG93IHNvIGp1c3QgZGlnIGludG8gdGhlIGVsZW1lbnQncyAobGlnaHQgZG9tKSBjaGlsZHJlblxuICAgICAgICAvLyAgX193aXRob3V0X18gZ2l2aW5nIHRoZSBlbGVtZW50IHNwZWNpYWwgc2NvcGUgdHJlYXRtZW50XG4gICAgICAgIGVsZW1lbnRzVG9DaGVjay51bnNoaWZ0KC4uLmVsZW1lbnQuY2hpbGRyZW4pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gY2FuZGlkYXRlcztcbn07XG5cbmNvbnN0IGdldFRhYmluZGV4ID0gZnVuY3Rpb24gKG5vZGUsIGlzU2NvcGUpIHtcbiAgaWYgKG5vZGUudGFiSW5kZXggPCAwKSB7XG4gICAgLy8gaW4gQ2hyb21lLCA8ZGV0YWlscy8+LCA8YXVkaW8gY29udHJvbHMvPiBhbmQgPHZpZGVvIGNvbnRyb2xzLz4gZWxlbWVudHMgZ2V0IGEgZGVmYXVsdFxuICAgIC8vIGB0YWJJbmRleGAgb2YgLTEgd2hlbiB0aGUgJ3RhYmluZGV4JyBhdHRyaWJ1dGUgaXNuJ3Qgc3BlY2lmaWVkIGluIHRoZSBET00sXG4gICAgLy8geWV0IHRoZXkgYXJlIHN0aWxsIHBhcnQgb2YgdGhlIHJlZ3VsYXIgdGFiIG9yZGVyOyBpbiBGRiwgdGhleSBnZXQgYSBkZWZhdWx0XG4gICAgLy8gYHRhYkluZGV4YCBvZiAwOyBzaW5jZSBDaHJvbWUgc3RpbGwgcHV0cyB0aG9zZSBlbGVtZW50cyBpbiB0aGUgcmVndWxhciB0YWJcbiAgICAvLyBvcmRlciwgY29uc2lkZXIgdGhlaXIgdGFiIGluZGV4IHRvIGJlIDAuXG4gICAgLy8gQWxzbyBicm93c2VycyBkbyBub3QgcmV0dXJuIGB0YWJJbmRleGAgY29ycmVjdGx5IGZvciBjb250ZW50RWRpdGFibGUgbm9kZXM7XG4gICAgLy8gc28gaWYgdGhleSBkb24ndCBoYXZlIGEgdGFiaW5kZXggYXR0cmlidXRlIHNwZWNpZmljYWxseSBzZXQsIGFzc3VtZSBpdCdzIDAuXG4gICAgLy9cbiAgICAvLyBpc1Njb3BlIGlzIHBvc2l0aXZlIGZvciBjdXN0b20gZWxlbWVudCB3aXRoIHNoYWRvdyByb290IG9yIHNsb3QgdGhhdCBieSBkZWZhdWx0XG4gICAgLy8gaGF2ZSB0YWJJbmRleCAtMSwgYnV0IG5lZWQgdG8gYmUgc29ydGVkIGJ5IGRvY3VtZW50IG9yZGVyIGluIG9yZGVyIGZvciB0aGVpclxuICAgIC8vIGNvbnRlbnQgdG8gYmUgaW5zZXJ0ZWQgaW4gdGhlIGNvcnJlY3QgcG9zaXRpb25cbiAgICBpZiAoXG4gICAgICAoaXNTY29wZSB8fFxuICAgICAgICAvXihBVURJT3xWSURFT3xERVRBSUxTKSQvLnRlc3Qobm9kZS50YWdOYW1lKSB8fFxuICAgICAgICBub2RlLmlzQ29udGVudEVkaXRhYmxlKSAmJlxuICAgICAgaXNOYU4ocGFyc2VJbnQobm9kZS5nZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JyksIDEwKSlcbiAgICApIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBub2RlLnRhYkluZGV4O1xufTtcblxuY29uc3Qgc29ydE9yZGVyZWRUYWJiYWJsZXMgPSBmdW5jdGlvbiAoYSwgYikge1xuICByZXR1cm4gYS50YWJJbmRleCA9PT0gYi50YWJJbmRleFxuICAgID8gYS5kb2N1bWVudE9yZGVyIC0gYi5kb2N1bWVudE9yZGVyXG4gICAgOiBhLnRhYkluZGV4IC0gYi50YWJJbmRleDtcbn07XG5cbmNvbnN0IGlzSW5wdXQgPSBmdW5jdGlvbiAobm9kZSkge1xuICByZXR1cm4gbm9kZS50YWdOYW1lID09PSAnSU5QVVQnO1xufTtcblxuY29uc3QgaXNIaWRkZW5JbnB1dCA9IGZ1bmN0aW9uIChub2RlKSB7XG4gIHJldHVybiBpc0lucHV0KG5vZGUpICYmIG5vZGUudHlwZSA9PT0gJ2hpZGRlbic7XG59O1xuXG5jb25zdCBpc0RldGFpbHNXaXRoU3VtbWFyeSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gIGNvbnN0IHIgPVxuICAgIG5vZGUudGFnTmFtZSA9PT0gJ0RFVEFJTFMnICYmXG4gICAgQXJyYXkucHJvdG90eXBlLnNsaWNlXG4gICAgICAuYXBwbHkobm9kZS5jaGlsZHJlbilcbiAgICAgIC5zb21lKChjaGlsZCkgPT4gY2hpbGQudGFnTmFtZSA9PT0gJ1NVTU1BUlknKTtcbiAgcmV0dXJuIHI7XG59O1xuXG5jb25zdCBnZXRDaGVja2VkUmFkaW8gPSBmdW5jdGlvbiAobm9kZXMsIGZvcm0pIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChub2Rlc1tpXS5jaGVja2VkICYmIG5vZGVzW2ldLmZvcm0gPT09IGZvcm0pIHtcbiAgICAgIHJldHVybiBub2Rlc1tpXTtcbiAgICB9XG4gIH1cbn07XG5cbmNvbnN0IGlzVGFiYmFibGVSYWRpbyA9IGZ1bmN0aW9uIChub2RlKSB7XG4gIGlmICghbm9kZS5uYW1lKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgY29uc3QgcmFkaW9TY29wZSA9IG5vZGUuZm9ybSB8fCBnZXRSb290Tm9kZShub2RlKTtcbiAgY29uc3QgcXVlcnlSYWRpb3MgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHJldHVybiByYWRpb1Njb3BlLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAnaW5wdXRbdHlwZT1cInJhZGlvXCJdW25hbWU9XCInICsgbmFtZSArICdcIl0nXG4gICAgKTtcbiAgfTtcblxuICBsZXQgcmFkaW9TZXQ7XG4gIGlmIChcbiAgICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIHR5cGVvZiB3aW5kb3cuQ1NTICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIHR5cGVvZiB3aW5kb3cuQ1NTLmVzY2FwZSA9PT0gJ2Z1bmN0aW9uJ1xuICApIHtcbiAgICByYWRpb1NldCA9IHF1ZXJ5UmFkaW9zKHdpbmRvdy5DU1MuZXNjYXBlKG5vZGUubmFtZSkpO1xuICB9IGVsc2Uge1xuICAgIHRyeSB7XG4gICAgICByYWRpb1NldCA9IHF1ZXJ5UmFkaW9zKG5vZGUubmFtZSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgJ0xvb2tzIGxpa2UgeW91IGhhdmUgYSByYWRpbyBidXR0b24gd2l0aCBhIG5hbWUgYXR0cmlidXRlIGNvbnRhaW5pbmcgaW52YWxpZCBDU1Mgc2VsZWN0b3IgY2hhcmFjdGVycyBhbmQgbmVlZCB0aGUgQ1NTLmVzY2FwZSBwb2x5ZmlsbDogJXMnLFxuICAgICAgICBlcnIubWVzc2FnZVxuICAgICAgKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBjaGVja2VkID0gZ2V0Q2hlY2tlZFJhZGlvKHJhZGlvU2V0LCBub2RlLmZvcm0pO1xuICByZXR1cm4gIWNoZWNrZWQgfHwgY2hlY2tlZCA9PT0gbm9kZTtcbn07XG5cbmNvbnN0IGlzUmFkaW8gPSBmdW5jdGlvbiAobm9kZSkge1xuICByZXR1cm4gaXNJbnB1dChub2RlKSAmJiBub2RlLnR5cGUgPT09ICdyYWRpbyc7XG59O1xuXG5jb25zdCBpc05vblRhYmJhYmxlUmFkaW8gPSBmdW5jdGlvbiAobm9kZSkge1xuICByZXR1cm4gaXNSYWRpbyhub2RlKSAmJiAhaXNUYWJiYWJsZVJhZGlvKG5vZGUpO1xufTtcblxuY29uc3QgaXNaZXJvQXJlYSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gbm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgcmV0dXJuIHdpZHRoID09PSAwICYmIGhlaWdodCA9PT0gMDtcbn07XG5jb25zdCBpc0hpZGRlbiA9IGZ1bmN0aW9uIChub2RlLCB7IGRpc3BsYXlDaGVjaywgZ2V0U2hhZG93Um9vdCB9KSB7XG4gIC8vIE5PVEU6IHZpc2liaWxpdHkgd2lsbCBiZSBgdW5kZWZpbmVkYCBpZiBub2RlIGlzIGRldGFjaGVkIGZyb20gdGhlIGRvY3VtZW50XG4gIC8vICAoc2VlIG5vdGVzIGFib3V0IHRoaXMgZnVydGhlciBkb3duKSwgd2hpY2ggbWVhbnMgd2Ugd2lsbCBjb25zaWRlciBpdCB2aXNpYmxlXG4gIC8vICAodGhpcyBpcyBsZWdhY3kgYmVoYXZpb3IgZnJvbSBhIHZlcnkgbG9uZyB3YXkgYmFjaylcbiAgLy8gTk9URTogd2UgY2hlY2sgdGhpcyByZWdhcmRsZXNzIG9mIGBkaXNwbGF5Q2hlY2s9XCJub25lXCJgIGJlY2F1c2UgdGhpcyBpcyBhXG4gIC8vICBfdmlzaWJpbGl0eV8gY2hlY2ssIG5vdCBhIF9kaXNwbGF5XyBjaGVja1xuICBpZiAoZ2V0Q29tcHV0ZWRTdHlsZShub2RlKS52aXNpYmlsaXR5ID09PSAnaGlkZGVuJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY29uc3QgaXNEaXJlY3RTdW1tYXJ5ID0gbWF0Y2hlcy5jYWxsKG5vZGUsICdkZXRhaWxzPnN1bW1hcnk6Zmlyc3Qtb2YtdHlwZScpO1xuICBjb25zdCBub2RlVW5kZXJEZXRhaWxzID0gaXNEaXJlY3RTdW1tYXJ5ID8gbm9kZS5wYXJlbnRFbGVtZW50IDogbm9kZTtcbiAgaWYgKG1hdGNoZXMuY2FsbChub2RlVW5kZXJEZXRhaWxzLCAnZGV0YWlsczpub3QoW29wZW5dKSAqJykpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIFRoZSByb290IG5vZGUgaXMgdGhlIHNoYWRvdyByb290IGlmIHRoZSBub2RlIGlzIGluIGEgc2hhZG93IERPTTsgc29tZSBkb2N1bWVudCBvdGhlcndpc2VcbiAgLy8gIChidXQgTk9UIF90aGVfIGRvY3VtZW50OyBzZWUgc2Vjb25kICdJZicgY29tbWVudCBiZWxvdyBmb3IgbW9yZSkuXG4gIC8vIElmIHJvb3ROb2RlIGlzIHNoYWRvdyByb290LCBpdCdsbCBoYXZlIGEgaG9zdCwgd2hpY2ggaXMgdGhlIGVsZW1lbnQgdG8gd2hpY2ggdGhlIHNoYWRvd1xuICAvLyAgaXMgYXR0YWNoZWQsIGFuZCB0aGUgb25lIHdlIG5lZWQgdG8gY2hlY2sgaWYgaXQncyBpbiB0aGUgZG9jdW1lbnQgb3Igbm90IChiZWNhdXNlIHRoZVxuICAvLyAgc2hhZG93LCBhbmQgYWxsIG5vZGVzIGl0IGNvbnRhaW5zLCBpcyBuZXZlciBjb25zaWRlcmVkIGluIHRoZSBkb2N1bWVudCBzaW5jZSBzaGFkb3dzXG4gIC8vICBiZWhhdmUgbGlrZSBzZWxmLWNvbnRhaW5lZCBET01zOyBidXQgaWYgdGhlIHNoYWRvdydzIEhPU1QsIHdoaWNoIGlzIHBhcnQgb2YgdGhlIGRvY3VtZW50LFxuICAvLyAgaXMgaGlkZGVuLCBvciBpcyBub3QgaW4gdGhlIGRvY3VtZW50IGl0c2VsZiBidXQgaXMgZGV0YWNoZWQsIGl0IHdpbGwgYWZmZWN0IHRoZSBzaGFkb3cnc1xuICAvLyAgdmlzaWJpbGl0eSwgaW5jbHVkaW5nIGFsbCB0aGUgbm9kZXMgaXQgY29udGFpbnMpLiBUaGUgaG9zdCBjb3VsZCBiZSBhbnkgbm9ybWFsIG5vZGUsXG4gIC8vICBvciBhIGN1c3RvbSBlbGVtZW50IChpLmUuIHdlYiBjb21wb25lbnQpLiBFaXRoZXIgd2F5LCB0aGF0J3MgdGhlIG9uZSB0aGF0IGlzIGNvbnNpZGVyZWRcbiAgLy8gIHBhcnQgb2YgdGhlIGRvY3VtZW50LCBub3QgdGhlIHNoYWRvdyByb290LCBub3IgYW55IG9mIGl0cyBjaGlsZHJlbiAoaS5lLiB0aGUgbm9kZSBiZWluZ1xuICAvLyAgdGVzdGVkKS5cbiAgLy8gSWYgcm9vdE5vZGUgaXMgbm90IGEgc2hhZG93IHJvb3QsIGl0IHdvbid0IGhhdmUgYSBob3N0LCBhbmQgc28gcm9vdE5vZGUgc2hvdWxkIGJlIHRoZVxuICAvLyAgZG9jdW1lbnQgKHBlciB0aGUgZG9jcykgYW5kIHdoaWxlIGl0J3MgYSBEb2N1bWVudC10eXBlIG9iamVjdCwgdGhhdCBkb2N1bWVudCBkb2VzIG5vdFxuICAvLyAgYXBwZWFyIHRvIGJlIHRoZSBzYW1lIGFzIHRoZSBub2RlJ3MgYG93bmVyRG9jdW1lbnRgIGZvciBzb21lIHJlYXNvbiwgc28gaXQncyBzYWZlclxuICAvLyAgdG8gaWdub3JlIHRoZSByb290Tm9kZSBhdCB0aGlzIHBvaW50LCBhbmQgdXNlIGBub2RlLm93bmVyRG9jdW1lbnRgLiBPdGhlcndpc2UsXG4gIC8vICB1c2luZyBgcm9vdE5vZGUuY29udGFpbnMobm9kZSlgIHdpbGwgX2Fsd2F5c18gYmUgdHJ1ZSB3ZSdsbCBnZXQgZmFsc2UtcG9zaXRpdmVzIHdoZW5cbiAgLy8gIG5vZGUgaXMgYWN0dWFsbHkgZGV0YWNoZWQuXG4gIGNvbnN0IG5vZGVSb290SG9zdCA9IGdldFJvb3ROb2RlKG5vZGUpLmhvc3Q7XG4gIGNvbnN0IG5vZGVJc0F0dGFjaGVkID1cbiAgICBub2RlUm9vdEhvc3Q/Lm93bmVyRG9jdW1lbnQuY29udGFpbnMobm9kZVJvb3RIb3N0KSB8fFxuICAgIG5vZGUub3duZXJEb2N1bWVudC5jb250YWlucyhub2RlKTtcblxuICBpZiAoIWRpc3BsYXlDaGVjayB8fCBkaXNwbGF5Q2hlY2sgPT09ICdmdWxsJykge1xuICAgIGlmICh0eXBlb2YgZ2V0U2hhZG93Um9vdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gZmlndXJlIG91dCBpZiB3ZSBzaG91bGQgY29uc2lkZXIgdGhlIG5vZGUgdG8gYmUgaW4gYW4gdW5kaXNjbG9zZWQgc2hhZG93IGFuZCB1c2UgdGhlXG4gICAgICAvLyAgJ25vbi16ZXJvLWFyZWEnIGZhbGxiYWNrXG4gICAgICBjb25zdCBvcmlnaW5hbE5vZGUgPSBub2RlO1xuICAgICAgd2hpbGUgKG5vZGUpIHtcbiAgICAgICAgY29uc3QgcGFyZW50RWxlbWVudCA9IG5vZGUucGFyZW50RWxlbWVudDtcbiAgICAgICAgY29uc3Qgcm9vdE5vZGUgPSBnZXRSb290Tm9kZShub2RlKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHBhcmVudEVsZW1lbnQgJiZcbiAgICAgICAgICAhcGFyZW50RWxlbWVudC5zaGFkb3dSb290ICYmXG4gICAgICAgICAgZ2V0U2hhZG93Um9vdChwYXJlbnRFbGVtZW50KSA9PT0gdHJ1ZSAvLyBjaGVjayBpZiB0aGVyZSdzIGFuIHVuZGlzY2xvc2VkIHNoYWRvd1xuICAgICAgICApIHtcbiAgICAgICAgICAvLyBub2RlIGhhcyBhbiB1bmRpc2Nsb3NlZCBzaGFkb3cgd2hpY2ggbWVhbnMgd2UgY2FuIG9ubHkgdHJlYXQgaXQgYXMgYSBibGFjayBib3gsIHNvIHdlXG4gICAgICAgICAgLy8gIGZhbGwgYmFjayB0byBhIG5vbi16ZXJvLWFyZWEgdGVzdFxuICAgICAgICAgIHJldHVybiBpc1plcm9BcmVhKG5vZGUpO1xuICAgICAgICB9IGVsc2UgaWYgKG5vZGUuYXNzaWduZWRTbG90KSB7XG4gICAgICAgICAgLy8gaXRlcmF0ZSB1cCBzbG90XG4gICAgICAgICAgbm9kZSA9IG5vZGUuYXNzaWduZWRTbG90O1xuICAgICAgICB9IGVsc2UgaWYgKCFwYXJlbnRFbGVtZW50ICYmIHJvb3ROb2RlICE9PSBub2RlLm93bmVyRG9jdW1lbnQpIHtcbiAgICAgICAgICAvLyBjcm9zcyBzaGFkb3cgYm91bmRhcnlcbiAgICAgICAgICBub2RlID0gcm9vdE5vZGUuaG9zdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBpdGVyYXRlIHVwIG5vcm1hbCBkb21cbiAgICAgICAgICBub2RlID0gcGFyZW50RWxlbWVudDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBub2RlID0gb3JpZ2luYWxOb2RlO1xuICAgIH1cbiAgICAvLyBlbHNlLCBgZ2V0U2hhZG93Um9vdGAgbWlnaHQgYmUgdHJ1ZSwgYnV0IGFsbCB0aGF0IGRvZXMgaXMgZW5hYmxlIHNoYWRvdyBET00gc3VwcG9ydFxuICAgIC8vICAoaS5lLiBpdCBkb2VzIG5vdCBhbHNvIHByZXN1bWUgdGhhdCBhbGwgbm9kZXMgbWlnaHQgaGF2ZSB1bmRpc2Nsb3NlZCBzaGFkb3dzKTsgb3JcbiAgICAvLyAgaXQgbWlnaHQgYmUgYSBmYWxzeSB2YWx1ZSwgd2hpY2ggbWVhbnMgc2hhZG93IERPTSBzdXBwb3J0IGlzIGRpc2FibGVkXG5cbiAgICAvLyBTaW5jZSB3ZSBkaWRuJ3QgZmluZCBpdCBzaXR0aW5nIGluIGFuIHVuZGlzY2xvc2VkIHNoYWRvdyAob3Igc2hhZG93cyBhcmUgZGlzYWJsZWQpXG4gICAgLy8gIG5vdyB3ZSBjYW4ganVzdCB0ZXN0IHRvIHNlZSBpZiBpdCB3b3VsZCBub3JtYWxseSBiZSB2aXNpYmxlIG9yIG5vdCwgcHJvdmlkZWQgaXQnc1xuICAgIC8vICBhdHRhY2hlZCB0byB0aGUgbWFpbiBkb2N1bWVudC5cbiAgICAvLyBOT1RFOiBXZSBtdXN0IGNvbnNpZGVyIGNhc2Ugd2hlcmUgbm9kZSBpcyBpbnNpZGUgYSBzaGFkb3cgRE9NIGFuZCBnaXZlbiBkaXJlY3RseSB0b1xuICAgIC8vICBgaXNUYWJiYWJsZSgpYCBvciBgaXNGb2N1c2FibGUoKWAgLS0gcmVnYXJkbGVzcyBvZiBgZ2V0U2hhZG93Um9vdGAgb3B0aW9uIHNldHRpbmcuXG5cbiAgICBpZiAobm9kZUlzQXR0YWNoZWQpIHtcbiAgICAgIC8vIHRoaXMgd29ya3Mgd2hlcmV2ZXIgdGhlIG5vZGUgaXM6IGlmIHRoZXJlJ3MgYXQgbGVhc3Qgb25lIGNsaWVudCByZWN0LCBpdCdzXG4gICAgICAvLyAgc29tZWhvdyBkaXNwbGF5ZWQ7IGl0IGFsc28gY292ZXJzIHRoZSBDU1MgJ2Rpc3BsYXk6IGNvbnRlbnRzJyBjYXNlIHdoZXJlIHRoZVxuICAgICAgLy8gIG5vZGUgaXRzZWxmIGlzIGhpZGRlbiBpbiBwbGFjZSBvZiBpdHMgY29udGVudHM7IGFuZCB0aGVyZSdzIG5vIG5lZWQgdG8gc2VhcmNoXG4gICAgICAvLyAgdXAgdGhlIGhpZXJhcmNoeSBlaXRoZXJcbiAgICAgIHJldHVybiAhbm9kZS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aDtcbiAgICB9XG5cbiAgICAvLyBFbHNlLCB0aGUgbm9kZSBpc24ndCBhdHRhY2hlZCB0byB0aGUgZG9jdW1lbnQsIHdoaWNoIG1lYW5zIHRoZSBgZ2V0Q2xpZW50UmVjdHMoKWBcbiAgICAvLyAgQVBJIHdpbGwgX19hbHdheXNfXyByZXR1cm4gemVybyByZWN0cyAodGhpcyBjYW4gaGFwcGVuLCBmb3IgZXhhbXBsZSwgaWYgUmVhY3RcbiAgICAvLyAgaXMgdXNlZCB0byByZW5kZXIgbm9kZXMgb250byBhIGRldGFjaGVkIHRyZWUsIGFzIGNvbmZpcm1lZCBpbiB0aGlzIHRocmVhZDpcbiAgICAvLyAgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy85MTE3I2lzc3VlY29tbWVudC0yODQyMjg4NzApXG4gICAgLy9cbiAgICAvLyBJdCBhbHNvIG1lYW5zIHRoYXQgZXZlbiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShub2RlKS5kaXNwbGF5IHdpbGwgcmV0dXJuIGB1bmRlZmluZWRgXG4gICAgLy8gIGJlY2F1c2Ugc3R5bGVzIGFyZSBvbmx5IGNvbXB1dGVkIGZvciBub2RlcyB0aGF0IGFyZSBpbiB0aGUgZG9jdW1lbnQuXG4gICAgLy9cbiAgICAvLyBOT1RFOiBUSElTIEhBUyBCRUVOIFRIRSBDQVNFIEZPUiBZRUFSUy4gSXQgaXMgbm90IG5ldywgbm9yIGlzIGl0IGNhdXNlZCBieSB0YWJiYWJsZVxuICAgIC8vICBzb21laG93LiBUaG91Z2ggaXQgd2FzIG5ldmVyIHN0YXRlZCBvZmZpY2lhbGx5LCBhbnlvbmUgd2hvIGhhcyBldmVyIHVzZWQgdGFiYmFibGVcbiAgICAvLyAgQVBJcyBvbiBub2RlcyBpbiBkZXRhY2hlZCBjb250YWluZXJzIGhhcyBhY3R1YWxseSBpbXBsaWNpdGx5IHVzZWQgdGFiYmFibGUgaW4gd2hhdFxuICAgIC8vICB3YXMgbGF0ZXIgKGFzIG9mIHY1LjIuMCBvbiBBcHIgOSwgMjAyMSkgY2FsbGVkIGBkaXNwbGF5Q2hlY2s9XCJub25lXCJgIG1vZGUgLS0gZXNzZW50aWFsbHlcbiAgICAvLyAgY29uc2lkZXJpbmcgX19ldmVyeXRoaW5nX18gdG8gYmUgdmlzaWJsZSBiZWNhdXNlIG9mIHRoZSBpbm5hYmlsaXR5IHRvIGRldGVybWluZSBzdHlsZXMuXG4gIH0gZWxzZSBpZiAoZGlzcGxheUNoZWNrID09PSAnbm9uLXplcm8tYXJlYScpIHtcbiAgICAvLyBOT1RFOiBFdmVuIHRob3VnaCB0aGlzIHRlc3RzIHRoYXQgdGhlIG5vZGUncyBjbGllbnQgcmVjdCBpcyBub24temVybyB0byBkZXRlcm1pbmVcbiAgICAvLyAgd2hldGhlciBpdCdzIGRpc3BsYXllZCwgYW5kIHRoYXQgYSBkZXRhY2hlZCBub2RlIHdpbGwgX19hbHdheXNfXyBoYXZlIGEgemVyby1hcmVhXG4gICAgLy8gIGNsaWVudCByZWN0LCB3ZSBkb24ndCBzcGVjaWFsLWNhc2UgZm9yIHdoZXRoZXIgdGhlIG5vZGUgaXMgYXR0YWNoZWQgb3Igbm90LiBJblxuICAgIC8vICB0aGlzIG1vZGUsIHdlIGRvIHdhbnQgdG8gY29uc2lkZXIgbm9kZXMgdGhhdCBoYXZlIGEgemVybyBhcmVhIHRvIGJlIGhpZGRlbiBhdCBhbGxcbiAgICAvLyAgdGltZXMsIGFuZCB0aGF0IGluY2x1ZGVzIGF0dGFjaGVkIG9yIG5vdC5cbiAgICByZXR1cm4gaXNaZXJvQXJlYShub2RlKTtcbiAgfVxuXG4gIC8vIHZpc2libGUsIGFzIGZhciBhcyB3ZSBjYW4gdGVsbCwgb3IgcGVyIGN1cnJlbnQgYGRpc3BsYXlDaGVja2AgbW9kZVxuICByZXR1cm4gZmFsc2U7XG59O1xuXG4vLyBmb3JtIGZpZWxkcyAobmVzdGVkKSBpbnNpZGUgYSBkaXNhYmxlZCBmaWVsZHNldCBhcmUgbm90IGZvY3VzYWJsZS90YWJiYWJsZVxuLy8gIHVubGVzcyB0aGV5IGFyZSBpbiB0aGUgX2ZpcnN0XyA8bGVnZW5kPiBlbGVtZW50IG9mIHRoZSB0b3AtbW9zdCBkaXNhYmxlZFxuLy8gIGZpZWxkc2V0XG5jb25zdCBpc0Rpc2FibGVkRnJvbUZpZWxkc2V0ID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgaWYgKC9eKElOUFVUfEJVVFRPTnxTRUxFQ1R8VEVYVEFSRUEpJC8udGVzdChub2RlLnRhZ05hbWUpKSB7XG4gICAgbGV0IHBhcmVudE5vZGUgPSBub2RlLnBhcmVudEVsZW1lbnQ7XG4gICAgLy8gY2hlY2sgaWYgYG5vZGVgIGlzIGNvbnRhaW5lZCBpbiBhIGRpc2FibGVkIDxmaWVsZHNldD5cbiAgICB3aGlsZSAocGFyZW50Tm9kZSkge1xuICAgICAgaWYgKHBhcmVudE5vZGUudGFnTmFtZSA9PT0gJ0ZJRUxEU0VUJyAmJiBwYXJlbnROb2RlLmRpc2FibGVkKSB7XG4gICAgICAgIC8vIGxvb2sgZm9yIHRoZSBmaXJzdCA8bGVnZW5kPiBhbW9uZyB0aGUgY2hpbGRyZW4gb2YgdGhlIGRpc2FibGVkIDxmaWVsZHNldD5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJlbnROb2RlLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgY2hpbGQgPSBwYXJlbnROb2RlLmNoaWxkcmVuLml0ZW0oaSk7XG4gICAgICAgICAgLy8gd2hlbiB0aGUgZmlyc3QgPGxlZ2VuZD4gKGluIGRvY3VtZW50IG9yZGVyKSBpcyBmb3VuZFxuICAgICAgICAgIGlmIChjaGlsZC50YWdOYW1lID09PSAnTEVHRU5EJykge1xuICAgICAgICAgICAgLy8gaWYgaXRzIHBhcmVudCA8ZmllbGRzZXQ+IGlzIG5vdCBuZXN0ZWQgaW4gYW5vdGhlciBkaXNhYmxlZCA8ZmllbGRzZXQ+LFxuICAgICAgICAgICAgLy8gcmV0dXJuIHdoZXRoZXIgYG5vZGVgIGlzIGEgZGVzY2VuZGFudCBvZiBpdHMgZmlyc3QgPGxlZ2VuZD5cbiAgICAgICAgICAgIHJldHVybiBtYXRjaGVzLmNhbGwocGFyZW50Tm9kZSwgJ2ZpZWxkc2V0W2Rpc2FibGVkXSAqJylcbiAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgIDogIWNoaWxkLmNvbnRhaW5zKG5vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyB0aGUgZGlzYWJsZWQgPGZpZWxkc2V0PiBjb250YWluaW5nIGBub2RlYCBoYXMgbm8gPGxlZ2VuZD5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBwYXJlbnROb2RlID0gcGFyZW50Tm9kZS5wYXJlbnRFbGVtZW50O1xuICAgIH1cbiAgfVxuXG4gIC8vIGVsc2UsIG5vZGUncyB0YWJiYWJsZS9mb2N1c2FibGUgc3RhdGUgc2hvdWxkIG5vdCBiZSBhZmZlY3RlZCBieSBhIGZpZWxkc2V0J3NcbiAgLy8gIGVuYWJsZWQvZGlzYWJsZWQgc3RhdGVcbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuY29uc3QgaXNOb2RlTWF0Y2hpbmdTZWxlY3RvckZvY3VzYWJsZSA9IGZ1bmN0aW9uIChvcHRpb25zLCBub2RlKSB7XG4gIGlmIChcbiAgICBub2RlLmRpc2FibGVkIHx8XG4gICAgaXNIaWRkZW5JbnB1dChub2RlKSB8fFxuICAgIGlzSGlkZGVuKG5vZGUsIG9wdGlvbnMpIHx8XG4gICAgLy8gRm9yIGEgZGV0YWlscyBlbGVtZW50IHdpdGggYSBzdW1tYXJ5LCB0aGUgc3VtbWFyeSBlbGVtZW50IGdldHMgdGhlIGZvY3VzXG4gICAgaXNEZXRhaWxzV2l0aFN1bW1hcnkobm9kZSkgfHxcbiAgICBpc0Rpc2FibGVkRnJvbUZpZWxkc2V0KG5vZGUpXG4gICkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmNvbnN0IGlzTm9kZU1hdGNoaW5nU2VsZWN0b3JUYWJiYWJsZSA9IGZ1bmN0aW9uIChvcHRpb25zLCBub2RlKSB7XG4gIGlmIChcbiAgICBpc05vblRhYmJhYmxlUmFkaW8obm9kZSkgfHxcbiAgICBnZXRUYWJpbmRleChub2RlKSA8IDAgfHxcbiAgICAhaXNOb2RlTWF0Y2hpbmdTZWxlY3RvckZvY3VzYWJsZShvcHRpb25zLCBub2RlKVxuICApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5jb25zdCBpc1ZhbGlkU2hhZG93Um9vdFRhYmJhYmxlID0gZnVuY3Rpb24gKHNoYWRvd0hvc3ROb2RlKSB7XG4gIGNvbnN0IHRhYkluZGV4ID0gcGFyc2VJbnQoc2hhZG93SG9zdE5vZGUuZ2V0QXR0cmlidXRlKCd0YWJpbmRleCcpLCAxMCk7XG4gIGlmIChpc05hTih0YWJJbmRleCkgfHwgdGFiSW5kZXggPj0gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIC8vIElmIGEgY3VzdG9tIGVsZW1lbnQgaGFzIGFuIGV4cGxpY2l0IG5lZ2F0aXZlIHRhYmluZGV4LFxuICAvLyBicm93c2VycyB3aWxsIG5vdCBhbGxvdyB0YWIgdGFyZ2V0aW5nIHNhaWQgZWxlbWVudCdzIGNoaWxkcmVuLlxuICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7QXJyYXkuPEVsZW1lbnR8Q2FuZGlkYXRlc1Njb3BlPn0gY2FuZGlkYXRlc1xuICogQHJldHVybnMgRWxlbWVudFtdXG4gKi9cbmNvbnN0IHNvcnRCeU9yZGVyID0gZnVuY3Rpb24gKGNhbmRpZGF0ZXMpIHtcbiAgY29uc3QgcmVndWxhclRhYmJhYmxlcyA9IFtdO1xuICBjb25zdCBvcmRlcmVkVGFiYmFibGVzID0gW107XG4gIGNhbmRpZGF0ZXMuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSwgaSkge1xuICAgIGNvbnN0IGlzU2NvcGUgPSAhIWl0ZW0uc2NvcGU7XG4gICAgY29uc3QgZWxlbWVudCA9IGlzU2NvcGUgPyBpdGVtLnNjb3BlIDogaXRlbTtcbiAgICBjb25zdCBjYW5kaWRhdGVUYWJpbmRleCA9IGdldFRhYmluZGV4KGVsZW1lbnQsIGlzU2NvcGUpO1xuICAgIGNvbnN0IGVsZW1lbnRzID0gaXNTY29wZSA/IHNvcnRCeU9yZGVyKGl0ZW0uY2FuZGlkYXRlcykgOiBlbGVtZW50O1xuICAgIGlmIChjYW5kaWRhdGVUYWJpbmRleCA9PT0gMCkge1xuICAgICAgaXNTY29wZVxuICAgICAgICA/IHJlZ3VsYXJUYWJiYWJsZXMucHVzaCguLi5lbGVtZW50cylcbiAgICAgICAgOiByZWd1bGFyVGFiYmFibGVzLnB1c2goZWxlbWVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9yZGVyZWRUYWJiYWJsZXMucHVzaCh7XG4gICAgICAgIGRvY3VtZW50T3JkZXI6IGksXG4gICAgICAgIHRhYkluZGV4OiBjYW5kaWRhdGVUYWJpbmRleCxcbiAgICAgICAgaXRlbTogaXRlbSxcbiAgICAgICAgaXNTY29wZTogaXNTY29wZSxcbiAgICAgICAgY29udGVudDogZWxlbWVudHMsXG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBvcmRlcmVkVGFiYmFibGVzXG4gICAgLnNvcnQoc29ydE9yZGVyZWRUYWJiYWJsZXMpXG4gICAgLnJlZHVjZSgoYWNjLCBzb3J0YWJsZSkgPT4ge1xuICAgICAgc29ydGFibGUuaXNTY29wZVxuICAgICAgICA/IGFjYy5wdXNoKC4uLnNvcnRhYmxlLmNvbnRlbnQpXG4gICAgICAgIDogYWNjLnB1c2goc29ydGFibGUuY29udGVudCk7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIFtdKVxuICAgIC5jb25jYXQocmVndWxhclRhYmJhYmxlcyk7XG59O1xuXG5jb25zdCB0YWJiYWJsZSA9IGZ1bmN0aW9uIChlbCwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICBsZXQgY2FuZGlkYXRlcztcbiAgaWYgKG9wdGlvbnMuZ2V0U2hhZG93Um9vdCkge1xuICAgIGNhbmRpZGF0ZXMgPSBnZXRDYW5kaWRhdGVzSXRlcmF0aXZlbHkoW2VsXSwgb3B0aW9ucy5pbmNsdWRlQ29udGFpbmVyLCB7XG4gICAgICBmaWx0ZXI6IGlzTm9kZU1hdGNoaW5nU2VsZWN0b3JUYWJiYWJsZS5iaW5kKG51bGwsIG9wdGlvbnMpLFxuICAgICAgZmxhdHRlbjogZmFsc2UsXG4gICAgICBnZXRTaGFkb3dSb290OiBvcHRpb25zLmdldFNoYWRvd1Jvb3QsXG4gICAgICBzaGFkb3dSb290RmlsdGVyOiBpc1ZhbGlkU2hhZG93Um9vdFRhYmJhYmxlLFxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGNhbmRpZGF0ZXMgPSBnZXRDYW5kaWRhdGVzKFxuICAgICAgZWwsXG4gICAgICBvcHRpb25zLmluY2x1ZGVDb250YWluZXIsXG4gICAgICBpc05vZGVNYXRjaGluZ1NlbGVjdG9yVGFiYmFibGUuYmluZChudWxsLCBvcHRpb25zKVxuICAgICk7XG4gIH1cbiAgcmV0dXJuIHNvcnRCeU9yZGVyKGNhbmRpZGF0ZXMpO1xufTtcblxuY29uc3QgZm9jdXNhYmxlID0gZnVuY3Rpb24gKGVsLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gIGxldCBjYW5kaWRhdGVzO1xuICBpZiAob3B0aW9ucy5nZXRTaGFkb3dSb290KSB7XG4gICAgY2FuZGlkYXRlcyA9IGdldENhbmRpZGF0ZXNJdGVyYXRpdmVseShbZWxdLCBvcHRpb25zLmluY2x1ZGVDb250YWluZXIsIHtcbiAgICAgIGZpbHRlcjogaXNOb2RlTWF0Y2hpbmdTZWxlY3RvckZvY3VzYWJsZS5iaW5kKG51bGwsIG9wdGlvbnMpLFxuICAgICAgZmxhdHRlbjogdHJ1ZSxcbiAgICAgIGdldFNoYWRvd1Jvb3Q6IG9wdGlvbnMuZ2V0U2hhZG93Um9vdCxcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBjYW5kaWRhdGVzID0gZ2V0Q2FuZGlkYXRlcyhcbiAgICAgIGVsLFxuICAgICAgb3B0aW9ucy5pbmNsdWRlQ29udGFpbmVyLFxuICAgICAgaXNOb2RlTWF0Y2hpbmdTZWxlY3RvckZvY3VzYWJsZS5iaW5kKG51bGwsIG9wdGlvbnMpXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBjYW5kaWRhdGVzO1xufTtcblxuY29uc3QgaXNUYWJiYWJsZSA9IGZ1bmN0aW9uIChub2RlLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBpZiAoIW5vZGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIG5vZGUgcHJvdmlkZWQnKTtcbiAgfVxuICBpZiAobWF0Y2hlcy5jYWxsKG5vZGUsIGNhbmRpZGF0ZVNlbGVjdG9yKSA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGlzTm9kZU1hdGNoaW5nU2VsZWN0b3JUYWJiYWJsZShvcHRpb25zLCBub2RlKTtcbn07XG5cbmNvbnN0IGZvY3VzYWJsZUNhbmRpZGF0ZVNlbGVjdG9yID0gLyogI19fUFVSRV9fICovIGNhbmRpZGF0ZVNlbGVjdG9yc1xuICAuY29uY2F0KCdpZnJhbWUnKVxuICAuam9pbignLCcpO1xuXG5jb25zdCBpc0ZvY3VzYWJsZSA9IGZ1bmN0aW9uIChub2RlLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBpZiAoIW5vZGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIG5vZGUgcHJvdmlkZWQnKTtcbiAgfVxuICBpZiAobWF0Y2hlcy5jYWxsKG5vZGUsIGZvY3VzYWJsZUNhbmRpZGF0ZVNlbGVjdG9yKSA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGlzTm9kZU1hdGNoaW5nU2VsZWN0b3JGb2N1c2FibGUob3B0aW9ucywgbm9kZSk7XG59O1xuXG5leHBvcnQgeyB0YWJiYWJsZSwgZm9jdXNhYmxlLCBpc1RhYmJhYmxlLCBpc0ZvY3VzYWJsZSB9O1xuIiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5leHBvcnQgdmFyIEVOVEVSID0gJ0VudGVyJztcbmV4cG9ydCB2YXIgU1BBQ0UgPSAnICc7XG5leHBvcnQgdmFyIEVTQ0FQRSA9ICdFc2NhcGUnO1xuZXhwb3J0IHZhciBUQUIgPSAnVGFiJztcbmV4cG9ydCB2YXIgQkFDS1NQQUNFID0gJ0JhY2tzcGFjZSc7XG5leHBvcnQgdmFyIEYyID0gJ0YyJztcbmV4cG9ydCB2YXIgQUxUID0gJ0FsdCc7XG5leHBvcnQgdmFyIFNISUZUID0gJ1NoaWZ0JztcbmV4cG9ydCB2YXIgQ1RSTCA9ICdDb250cm9sJztcbmV4cG9ydCB2YXIgTUVUQSA9ICdNZXRhJzsgLy8gV2luZG93cywgQ29tbWFuZCwgT3B0aW9uXG5cbmV4cG9ydCB2YXIgQVJST1dfRE9XTiA9ICdBcnJvd0Rvd24nO1xuZXhwb3J0IHZhciBBUlJPV19VUCA9ICdBcnJvd1VwJztcbmV4cG9ydCB2YXIgQVJST1dfTEVGVCA9ICdBcnJvd0xlZnQnO1xuZXhwb3J0IHZhciBBUlJPV19SSUdIVCA9ICdBcnJvd1JpZ2h0JztcbmV4cG9ydCB2YXIgUEFHRV9VUCA9ICdQYWdlVXAnO1xuZXhwb3J0IHZhciBQQUdFX0RPV04gPSAnUGFnZURvd24nO1xuZXhwb3J0IHZhciBFTkQgPSAnRW5kJztcbmV4cG9ydCB2YXIgSE9NRSA9ICdIb21lJztcbmV4cG9ydCB2YXIga2V5cztcblxuKGZ1bmN0aW9uIChrZXlzKSB7XG4gIGtleXNbXCJFTlRFUlwiXSA9IFwiRW50ZXJcIjtcbiAga2V5c1tcIlNQQUNFXCJdID0gXCIgXCI7XG4gIGtleXNbXCJFU0NBUEVcIl0gPSBcIkVzY2FwZVwiO1xuICBrZXlzW1wiVEFCXCJdID0gXCJUYWJcIjtcbiAga2V5c1tcIkJBQ0tTUEFDRVwiXSA9IFwiQmFja3NwYWNlXCI7XG4gIGtleXNbXCJGMlwiXSA9IFwiRjJcIjtcbiAga2V5c1tcIkFMVFwiXSA9IFwiQWx0XCI7XG4gIGtleXNbXCJTSElGVFwiXSA9IFwiU2hpZnRcIjtcbiAga2V5c1tcIkNUUkxcIl0gPSBcIkNvbnRyb2xcIjtcbiAga2V5c1tcIk1FVEFcIl0gPSBcIk1ldGFcIjtcbiAga2V5c1tcIkFSUk9XX0RPV05cIl0gPSBcIkFycm93RG93blwiO1xuICBrZXlzW1wiQVJST1dfVVBcIl0gPSBcIkFycm93VXBcIjtcbiAga2V5c1tcIkFSUk9XX0xFRlRcIl0gPSBcIkFycm93TGVmdFwiO1xuICBrZXlzW1wiQVJST1dfUklHSFRcIl0gPSBcIkFycm93UmlnaHRcIjtcbiAga2V5c1tcIlBBR0VfVVBcIl0gPSBcIlBhZ2VVcFwiO1xuICBrZXlzW1wiUEFHRV9ET1dOXCJdID0gXCJQYWdlRG93blwiO1xuICBrZXlzW1wiRU5EXCJdID0gXCJFbmRcIjtcbiAga2V5c1tcIkhPTUVcIl0gPSBcIkhvbWVcIjtcbn0pKGtleXMgfHwgKGtleXMgPSB7fSkpOyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vKipcbiAqIFRoZXNlIGtleXMgYXJlIHVzZWQgZm9yIG5hdmlnYXRpbmcgY2FzY2FkaW5nIG1lbnUgVUkgY29tcG9uZW50cy5cbiAqXG4gKiBBUlJPV19ET1dOOiBTZWxlY3QgdGhlIG5leHQgaXRlbSBpbiB0aGUgbGlzdC5cbiAqIEFSUk9XX0xFRlQ6IFNob3cgdGhlIHByZXZpb3VzIG1lbnUuXG4gKiBBUlJPV19SSUdIVDogU2hvdyB0aGUgbmV4dCBtZW51IGZvciB0aGUgc2VsZWN0ZWQgaXRlbS5cbiAqIEFSUk9XX1VQOiBTZWxlY3QgdGhlIHByZXZpb3VzIGl0ZW0gaW4gdGhlIGxpc3QuXG4gKiBFU0M6IERlc2VsZWN0IHRoZSBjdXJyZW50IHNlbGVjdGlvbiBhbmQgaGlkZSB0aGUgbGlzdC5cbiAqIFRBQjogTm9ybWFsIHRhYmJpbmcgbmF2aWdhdGlvbiBpcyBzdGlsbCBzdXBwb3J0ZWQuXG4gKi9cbmltcG9ydCB7IEFSUk9XX0RPV04sIEFSUk9XX0xFRlQsIEFSUk9XX1JJR0hULCBBUlJPV19VUCwgRVNDQVBFLCBUQUIgfSBmcm9tICcuLi9rZXlzJztcbmV4cG9ydCB2YXIgY2FzY2FkaW5nTWVudUtleXMgPSB7XG4gIEFSUk9XX0RPV046IEFSUk9XX0RPV04sXG4gIEFSUk9XX0xFRlQ6IEFSUk9XX0xFRlQsXG4gIEFSUk9XX1JJR0hUOiBBUlJPV19SSUdIVCxcbiAgQVJST1dfVVA6IEFSUk9XX1VQLFxuICBFU0NBUEU6IEVTQ0FQRSxcbiAgVEFCOiBUQUJcbn07IiwgIi8vIFVuaXF1ZSBJRCBjcmVhdGlvbiByZXF1aXJlcyBhIGhpZ2ggcXVhbGl0eSByYW5kb20gIyBnZW5lcmF0b3IuIEluIHRoZSBicm93c2VyIHdlIHRoZXJlZm9yZVxuLy8gcmVxdWlyZSB0aGUgY3J5cHRvIEFQSSBhbmQgZG8gbm90IHN1cHBvcnQgYnVpbHQtaW4gZmFsbGJhY2sgdG8gbG93ZXIgcXVhbGl0eSByYW5kb20gbnVtYmVyXG4vLyBnZW5lcmF0b3JzIChsaWtlIE1hdGgucmFuZG9tKCkpLlxudmFyIGdldFJhbmRvbVZhbHVlcztcbnZhciBybmRzOCA9IG5ldyBVaW50OEFycmF5KDE2KTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJuZygpIHtcbiAgLy8gbGF6eSBsb2FkIHNvIHRoYXQgZW52aXJvbm1lbnRzIHRoYXQgbmVlZCB0byBwb2x5ZmlsbCBoYXZlIGEgY2hhbmNlIHRvIGRvIHNvXG4gIGlmICghZ2V0UmFuZG9tVmFsdWVzKSB7XG4gICAgLy8gZ2V0UmFuZG9tVmFsdWVzIG5lZWRzIHRvIGJlIGludm9rZWQgaW4gYSBjb250ZXh0IHdoZXJlIFwidGhpc1wiIGlzIGEgQ3J5cHRvIGltcGxlbWVudGF0aW9uLiBBbHNvLFxuICAgIC8vIGZpbmQgdGhlIGNvbXBsZXRlIGltcGxlbWVudGF0aW9uIG9mIGNyeXB0byAobXNDcnlwdG8pIG9uIElFMTEuXG4gICAgZ2V0UmFuZG9tVmFsdWVzID0gdHlwZW9mIGNyeXB0byAhPT0gJ3VuZGVmaW5lZCcgJiYgY3J5cHRvLmdldFJhbmRvbVZhbHVlcyAmJiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzLmJpbmQoY3J5cHRvKSB8fCB0eXBlb2YgbXNDcnlwdG8gIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBtc0NyeXB0by5nZXRSYW5kb21WYWx1ZXMgPT09ICdmdW5jdGlvbicgJiYgbXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzLmJpbmQobXNDcnlwdG8pO1xuXG4gICAgaWYgKCFnZXRSYW5kb21WYWx1ZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY3J5cHRvLmdldFJhbmRvbVZhbHVlcygpIG5vdCBzdXBwb3J0ZWQuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdXVpZGpzL3V1aWQjZ2V0cmFuZG9tdmFsdWVzLW5vdC1zdXBwb3J0ZWQnKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZ2V0UmFuZG9tVmFsdWVzKHJuZHM4KTtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgL14oPzpbMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMS01XVswLTlhLWZdezN9LVs4OWFiXVswLTlhLWZdezN9LVswLTlhLWZdezEyfXwwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDApJC9pOyIsICJpbXBvcnQgUkVHRVggZnJvbSAnLi9yZWdleC5qcyc7XG5cbmZ1bmN0aW9uIHZhbGlkYXRlKHV1aWQpIHtcbiAgcmV0dXJuIHR5cGVvZiB1dWlkID09PSAnc3RyaW5nJyAmJiBSRUdFWC50ZXN0KHV1aWQpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB2YWxpZGF0ZTsiLCAiaW1wb3J0IHZhbGlkYXRlIGZyb20gJy4vdmFsaWRhdGUuanMnO1xuLyoqXG4gKiBDb252ZXJ0IGFycmF5IG9mIDE2IGJ5dGUgdmFsdWVzIHRvIFVVSUQgc3RyaW5nIGZvcm1hdCBvZiB0aGUgZm9ybTpcbiAqIFhYWFhYWFhYLVhYWFgtWFhYWC1YWFhYLVhYWFhYWFhYWFhYWFxuICovXG5cbnZhciBieXRlVG9IZXggPSBbXTtcblxuZm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7ICsraSkge1xuICBieXRlVG9IZXgucHVzaCgoaSArIDB4MTAwKS50b1N0cmluZygxNikuc3Vic3RyKDEpKTtcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5KGFycikge1xuICB2YXIgb2Zmc2V0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAwO1xuICAvLyBOb3RlOiBCZSBjYXJlZnVsIGVkaXRpbmcgdGhpcyBjb2RlISAgSXQncyBiZWVuIHR1bmVkIGZvciBwZXJmb3JtYW5jZVxuICAvLyBhbmQgd29ya3MgaW4gd2F5cyB5b3UgbWF5IG5vdCBleHBlY3QuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdXVpZGpzL3V1aWQvcHVsbC80MzRcbiAgdmFyIHV1aWQgPSAoYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAwXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDFdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMl1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAzXV0gKyAnLScgKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDRdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgNV1dICsgJy0nICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA2XV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDddXSArICctJyArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgOF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA5XV0gKyAnLScgKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDEwXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDExXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDEyXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDEzXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDE0XV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDE1XV0pLnRvTG93ZXJDYXNlKCk7IC8vIENvbnNpc3RlbmN5IGNoZWNrIGZvciB2YWxpZCBVVUlELiAgSWYgdGhpcyB0aHJvd3MsIGl0J3MgbGlrZWx5IGR1ZSB0byBvbmVcbiAgLy8gb2YgdGhlIGZvbGxvd2luZzpcbiAgLy8gLSBPbmUgb3IgbW9yZSBpbnB1dCBhcnJheSB2YWx1ZXMgZG9uJ3QgbWFwIHRvIGEgaGV4IG9jdGV0IChsZWFkaW5nIHRvXG4gIC8vIFwidW5kZWZpbmVkXCIgaW4gdGhlIHV1aWQpXG4gIC8vIC0gSW52YWxpZCBpbnB1dCB2YWx1ZXMgZm9yIHRoZSBSRkMgYHZlcnNpb25gIG9yIGB2YXJpYW50YCBmaWVsZHNcblxuICBpZiAoIXZhbGlkYXRlKHV1aWQpKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKCdTdHJpbmdpZmllZCBVVUlEIGlzIGludmFsaWQnKTtcbiAgfVxuXG4gIHJldHVybiB1dWlkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBzdHJpbmdpZnk7IiwgImltcG9ydCBybmcgZnJvbSAnLi9ybmcuanMnO1xuaW1wb3J0IHN0cmluZ2lmeSBmcm9tICcuL3N0cmluZ2lmeS5qcyc7IC8vICoqYHYxKClgIC0gR2VuZXJhdGUgdGltZS1iYXNlZCBVVUlEKipcbi8vXG4vLyBJbnNwaXJlZCBieSBodHRwczovL2dpdGh1Yi5jb20vTGlvc0svVVVJRC5qc1xuLy8gYW5kIGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvbGlicmFyeS91dWlkLmh0bWxcblxudmFyIF9ub2RlSWQ7XG5cbnZhciBfY2xvY2tzZXE7IC8vIFByZXZpb3VzIHV1aWQgY3JlYXRpb24gdGltZVxuXG5cbnZhciBfbGFzdE1TZWNzID0gMDtcbnZhciBfbGFzdE5TZWNzID0gMDsgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS91dWlkanMvdXVpZCBmb3IgQVBJIGRldGFpbHNcblxuZnVuY3Rpb24gdjEob3B0aW9ucywgYnVmLCBvZmZzZXQpIHtcbiAgdmFyIGkgPSBidWYgJiYgb2Zmc2V0IHx8IDA7XG4gIHZhciBiID0gYnVmIHx8IG5ldyBBcnJheSgxNik7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICB2YXIgbm9kZSA9IG9wdGlvbnMubm9kZSB8fCBfbm9kZUlkO1xuICB2YXIgY2xvY2tzZXEgPSBvcHRpb25zLmNsb2Nrc2VxICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmNsb2Nrc2VxIDogX2Nsb2Nrc2VxOyAvLyBub2RlIGFuZCBjbG9ja3NlcSBuZWVkIHRvIGJlIGluaXRpYWxpemVkIHRvIHJhbmRvbSB2YWx1ZXMgaWYgdGhleSdyZSBub3RcbiAgLy8gc3BlY2lmaWVkLiAgV2UgZG8gdGhpcyBsYXppbHkgdG8gbWluaW1pemUgaXNzdWVzIHJlbGF0ZWQgdG8gaW5zdWZmaWNpZW50XG4gIC8vIHN5c3RlbSBlbnRyb3B5LiAgU2VlICMxODlcblxuICBpZiAobm9kZSA9PSBudWxsIHx8IGNsb2Nrc2VxID09IG51bGwpIHtcbiAgICB2YXIgc2VlZEJ5dGVzID0gb3B0aW9ucy5yYW5kb20gfHwgKG9wdGlvbnMucm5nIHx8IHJuZykoKTtcblxuICAgIGlmIChub2RlID09IG51bGwpIHtcbiAgICAgIC8vIFBlciA0LjUsIGNyZWF0ZSBhbmQgNDgtYml0IG5vZGUgaWQsICg0NyByYW5kb20gYml0cyArIG11bHRpY2FzdCBiaXQgPSAxKVxuICAgICAgbm9kZSA9IF9ub2RlSWQgPSBbc2VlZEJ5dGVzWzBdIHwgMHgwMSwgc2VlZEJ5dGVzWzFdLCBzZWVkQnl0ZXNbMl0sIHNlZWRCeXRlc1szXSwgc2VlZEJ5dGVzWzRdLCBzZWVkQnl0ZXNbNV1dO1xuICAgIH1cblxuICAgIGlmIChjbG9ja3NlcSA9PSBudWxsKSB7XG4gICAgICAvLyBQZXIgNC4yLjIsIHJhbmRvbWl6ZSAoMTQgYml0KSBjbG9ja3NlcVxuICAgICAgY2xvY2tzZXEgPSBfY2xvY2tzZXEgPSAoc2VlZEJ5dGVzWzZdIDw8IDggfCBzZWVkQnl0ZXNbN10pICYgMHgzZmZmO1xuICAgIH1cbiAgfSAvLyBVVUlEIHRpbWVzdGFtcHMgYXJlIDEwMCBuYW5vLXNlY29uZCB1bml0cyBzaW5jZSB0aGUgR3JlZ29yaWFuIGVwb2NoLFxuICAvLyAoMTU4Mi0xMC0xNSAwMDowMCkuICBKU051bWJlcnMgYXJlbid0IHByZWNpc2UgZW5vdWdoIGZvciB0aGlzLCBzb1xuICAvLyB0aW1lIGlzIGhhbmRsZWQgaW50ZXJuYWxseSBhcyAnbXNlY3MnIChpbnRlZ2VyIG1pbGxpc2Vjb25kcykgYW5kICduc2VjcydcbiAgLy8gKDEwMC1uYW5vc2Vjb25kcyBvZmZzZXQgZnJvbSBtc2Vjcykgc2luY2UgdW5peCBlcG9jaCwgMTk3MC0wMS0wMSAwMDowMC5cblxuXG4gIHZhciBtc2VjcyA9IG9wdGlvbnMubXNlY3MgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubXNlY3MgOiBEYXRlLm5vdygpOyAvLyBQZXIgNC4yLjEuMiwgdXNlIGNvdW50IG9mIHV1aWQncyBnZW5lcmF0ZWQgZHVyaW5nIHRoZSBjdXJyZW50IGNsb2NrXG4gIC8vIGN5Y2xlIHRvIHNpbXVsYXRlIGhpZ2hlciByZXNvbHV0aW9uIGNsb2NrXG5cbiAgdmFyIG5zZWNzID0gb3B0aW9ucy5uc2VjcyAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5uc2VjcyA6IF9sYXN0TlNlY3MgKyAxOyAvLyBUaW1lIHNpbmNlIGxhc3QgdXVpZCBjcmVhdGlvbiAoaW4gbXNlY3MpXG5cbiAgdmFyIGR0ID0gbXNlY3MgLSBfbGFzdE1TZWNzICsgKG5zZWNzIC0gX2xhc3ROU2VjcykgLyAxMDAwMDsgLy8gUGVyIDQuMi4xLjIsIEJ1bXAgY2xvY2tzZXEgb24gY2xvY2sgcmVncmVzc2lvblxuXG4gIGlmIChkdCA8IDAgJiYgb3B0aW9ucy5jbG9ja3NlcSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY2xvY2tzZXEgPSBjbG9ja3NlcSArIDEgJiAweDNmZmY7XG4gIH0gLy8gUmVzZXQgbnNlY3MgaWYgY2xvY2sgcmVncmVzc2VzIChuZXcgY2xvY2tzZXEpIG9yIHdlJ3ZlIG1vdmVkIG9udG8gYSBuZXdcbiAgLy8gdGltZSBpbnRlcnZhbFxuXG5cbiAgaWYgKChkdCA8IDAgfHwgbXNlY3MgPiBfbGFzdE1TZWNzKSAmJiBvcHRpb25zLm5zZWNzID09PSB1bmRlZmluZWQpIHtcbiAgICBuc2VjcyA9IDA7XG4gIH0gLy8gUGVyIDQuMi4xLjIgVGhyb3cgZXJyb3IgaWYgdG9vIG1hbnkgdXVpZHMgYXJlIHJlcXVlc3RlZFxuXG5cbiAgaWYgKG5zZWNzID49IDEwMDAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwidXVpZC52MSgpOiBDYW4ndCBjcmVhdGUgbW9yZSB0aGFuIDEwTSB1dWlkcy9zZWNcIik7XG4gIH1cblxuICBfbGFzdE1TZWNzID0gbXNlY3M7XG4gIF9sYXN0TlNlY3MgPSBuc2VjcztcbiAgX2Nsb2Nrc2VxID0gY2xvY2tzZXE7IC8vIFBlciA0LjEuNCAtIENvbnZlcnQgZnJvbSB1bml4IGVwb2NoIHRvIEdyZWdvcmlhbiBlcG9jaFxuXG4gIG1zZWNzICs9IDEyMjE5MjkyODAwMDAwOyAvLyBgdGltZV9sb3dgXG5cbiAgdmFyIHRsID0gKChtc2VjcyAmIDB4ZmZmZmZmZikgKiAxMDAwMCArIG5zZWNzKSAlIDB4MTAwMDAwMDAwO1xuICBiW2krK10gPSB0bCA+Pj4gMjQgJiAweGZmO1xuICBiW2krK10gPSB0bCA+Pj4gMTYgJiAweGZmO1xuICBiW2krK10gPSB0bCA+Pj4gOCAmIDB4ZmY7XG4gIGJbaSsrXSA9IHRsICYgMHhmZjsgLy8gYHRpbWVfbWlkYFxuXG4gIHZhciB0bWggPSBtc2VjcyAvIDB4MTAwMDAwMDAwICogMTAwMDAgJiAweGZmZmZmZmY7XG4gIGJbaSsrXSA9IHRtaCA+Pj4gOCAmIDB4ZmY7XG4gIGJbaSsrXSA9IHRtaCAmIDB4ZmY7IC8vIGB0aW1lX2hpZ2hfYW5kX3ZlcnNpb25gXG5cbiAgYltpKytdID0gdG1oID4+PiAyNCAmIDB4ZiB8IDB4MTA7IC8vIGluY2x1ZGUgdmVyc2lvblxuXG4gIGJbaSsrXSA9IHRtaCA+Pj4gMTYgJiAweGZmOyAvLyBgY2xvY2tfc2VxX2hpX2FuZF9yZXNlcnZlZGAgKFBlciA0LjIuMiAtIGluY2x1ZGUgdmFyaWFudClcblxuICBiW2krK10gPSBjbG9ja3NlcSA+Pj4gOCB8IDB4ODA7IC8vIGBjbG9ja19zZXFfbG93YFxuXG4gIGJbaSsrXSA9IGNsb2Nrc2VxICYgMHhmZjsgLy8gYG5vZGVgXG5cbiAgZm9yICh2YXIgbiA9IDA7IG4gPCA2OyArK24pIHtcbiAgICBiW2kgKyBuXSA9IG5vZGVbbl07XG4gIH1cblxuICByZXR1cm4gYnVmIHx8IHN0cmluZ2lmeShiKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdjE7IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyB2MSBhcyB1dWlkdjEgfSBmcm9tICd1dWlkJztcbmltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIGlkcy5cbiAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gZ2VuZXJhdGUgdW5pcXVlLCBidXQgcHJlZGljdGFibGUgaWRzIHRvIHBhaXIgbGFiZWxzXG4gKiB3aXRoIHRoZWlyIGlucHV0cy4gSXQgdGFrZXMgYW4gb3B0aW9uYWwgcHJlZml4IGFzIGEgcGFyYW1ldGVyLiBJZiB5b3UgZG9uJ3RcbiAqIHNwZWNpZnkgaXQsIGl0IGdlbmVyYXRlcyBhIHJhbmRvbSBpZCBwcmVmaXguIElmIHlvdSBzcGVjaWZ5IGEgY3VzdG9tIHByZWZpeFxuICogaXQgc2hvdWxkIGJlZ2luIHdpdGggYW4gbGV0dGVyIHRvIGJlIEhUTUw0IGNvbXBsaWFudC5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaHRtbElkR2VuZXJhdG9yKCkge1xuICB2YXIgaWRQcmVmaXggPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6ICcnO1xuICB2YXIgc3RhdGljVXVpZCA9IHV1aWR2MSgpO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBpZFN1ZmZpeCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogJyc7XG4gICAgdmFyIHByZWZpeCA9IFwiXCIuY29uY2F0KGlkUHJlZml4KS5jb25jYXQoaWRQcmVmaXggIT09ICcnID8gJ18nIDogJ2knKTtcbiAgICB2YXIgc3VmZml4ID0gaWRTdWZmaXggPyBcIl9cIi5jb25jYXQoaWRTdWZmaXgpIDogJyc7XG4gICAgcmV0dXJuIFwiXCIuY29uY2F0KHByZWZpeCkuY29uY2F0KHN1ZmZpeCA/IHN0YXRpY1V1aWQgOiB1dWlkdjEoKSkuY29uY2F0KHN1ZmZpeCk7XG4gIH07XG59XG4vKipcbiAqIEdlbmVyYXRlcyBhIG1lbW9pemVkIElEIHRoYXQgcmVtYWlucyBzdGF0aWMgdW50aWwgY29tcG9uZW50IHVubW91bnQuXG4gKiBUaGlzIHByZXZlbnRzIElEcyBmcm9tIGJlaW5nIHJlLXJhbmRvbWl6ZWQgb24gZXZlcnkgY29tcG9uZW50IHVwZGF0ZS5cbiAqL1xuXG5leHBvcnQgdmFyIHVzZUdlbmVyYXRlZEh0bWxJZCA9IGZ1bmN0aW9uIHVzZUdlbmVyYXRlZEh0bWxJZCgpIHtcbiAgdmFyIF9yZWYgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9LFxuICAgICAgcHJlZml4ID0gX3JlZi5wcmVmaXgsXG4gICAgICBzdWZmaXggPSBfcmVmLnN1ZmZpeCxcbiAgICAgIGNvbmRpdGlvbmFsSWQgPSBfcmVmLmNvbmRpdGlvbmFsSWQ7XG5cbiAgcmV0dXJuIHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBjb25kaXRpb25hbElkIHx8IGh0bWxJZEdlbmVyYXRvcihwcmVmaXgpKHN1ZmZpeCk7XG4gIH0sIFtjb25kaXRpb25hbElkLCBwcmVmaXgsIHN1ZmZpeF0pO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmV4cG9ydCB2YXIgTEVGVF9BTElHTk1FTlQgPSAnbGVmdCc7XG5leHBvcnQgdmFyIFJJR0hUX0FMSUdOTUVOVCA9ICdyaWdodCc7XG5leHBvcnQgdmFyIENFTlRFUl9BTElHTk1FTlQgPSAnY2VudGVyJzsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmV4cG9ydCB2YXIgYXNzZXJ0TmV2ZXIgPSBmdW5jdGlvbiBhc3NlcnROZXZlcih4KSB7XG4gIHRocm93IG5ldyBFcnJvcihcIlVuZXhwZWN0ZWQgdmFsdWUgXCIuY29uY2F0KHgpKTtcbn07IC8vIHV0aWxpdHkgdHlwZXM6XG5cbi8qKlxuICogWE9SIGZvciBzb21lIHByb3BlcnRpZXMgYXBwbGllZCB0byBhIHR5cGVcbiAqIChYT1IgaXMgb25lIG9mIHRoZXNlIGJ1dCBub3QgYm90aCBvciBuZWl0aGVyKVxuICpcbiAqIFVzYWdlOiBPbmVPZjx0eXBlVG9FeHRlbmQsIG9uZSB8IGJ1dCB8IG5vdCB8IG11bHRpcGxlIHwgb2YgfCB0aGVzZSB8IGFyZSB8IHJlcXVpcmVkPlxuICpcbiAqIFRvIHJlcXVpcmUgYXJpYS1sYWJlbCBvciBhcmlhLWxhYmVsbGVkYnkgYnV0IG5vdCBib3RoXG4gKiBFeGFtcGxlOiBPbmVPZjxUeXBlLCAnYXJpYS1sYWJlbCcgfCAnYXJpYS1sYWJlbGxlZGJ5Jz5cbiAqL1xuXG4vKipcbiAqIFdyYXBzIE9iamVjdC5rZXlzIHdpdGggcHJvcGVyIHR5cGVzY3JpcHQgZGVmaW5pdGlvbiBvZiB0aGUgcmVzdWx0aW5nIGFycmF5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBrZXlzT2Yob2JqKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopO1xufVxuLyoqXG4gKiBMaWtlIGBrZXlvZiB0eXBlb2ZgLCBidXQgZm9yIGdldHRpbmcgdmFsdWVzIGluc3RlYWQgb2Yga2V5c1xuICogVmFsdWVPZjx0eXBlb2Yge2tleTE6ICd2YWx1ZTEnLCBrZXkyOiAndmFsdWUyJ30+XG4gKiBSZXN1bHRzIGluIGAndmFsdWUxJyB8ICd2YWx1ZTInYFxuICovIiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5leHBvcnQgdmFyIGJyZWFrcG9pbnQgPSB7XG4gIHhsOiAxMjAwLFxuICBsOiA5OTIsXG4gIG06IDc2OCxcbiAgczogNTc1LFxuICB4czogMFxufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IGtleXNPZiB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvY29tbW9uJztcbmltcG9ydCB7IGJyZWFrcG9pbnQgfSBmcm9tICcuLi8uLi90aGVtZXMvYW1zdGVyZGFtL2dsb2JhbF9zdHlsaW5nL3ZhcmlhYmxlcy9fYnJlYWtwb2ludCc7XG5leHBvcnQgdmFyIEJSRUFLUE9JTlRTID0gYnJlYWtwb2ludDtcbmV4cG9ydCB2YXIgQlJFQUtQT0lOVF9LRVlTID0ga2V5c09mKEJSRUFLUE9JTlRTKTtcbi8qKlxuICogR2l2ZW4gdGhlIGN1cnJlbnQgYHdpZHRoYCBhbmQgYW4gb2JqZWN0IG9mIGBFdWlCcmVha3BvaW50c2AsXG4gKiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHN0cmluZyB0aGF0IGlzIHRoZSBuYW1lIG9mIHRoZSBicmVha3BvaW50IGtleVxuICogdGhhdCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHdpZHRoXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIENhbiBlaXRoZXIgYmUgdGhlIGZ1bGwgd2luZG93IHdpZHRoIG9yIGFueSB3aWR0aFxuICogQHBhcmFtIHtFdWlCcmVha3BvaW50c30gYnJlYWtwb2ludHMgQW4gb2JqZWN0IHdpdGgga2V5cyBmb3Igc2l6aW5nIGFuZCB2YWx1ZXMgZm9yIG1pbmltdW0gd2lkdGhcbiAqIEByZXR1cm5zIHtzdHJpbmcgfCB1bmRlZmluZWR9IE5hbWUgb2YgdGhlIGJyZWFrcG9pbnQga2V5IG9yIGB1bmRlZmluZWRgIGlmIGEga2V5IGRvZXNuJ3QgZXhpc3RcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QnJlYWtwb2ludCh3aWR0aCkge1xuICB2YXIgYnJlYWtwb2ludHMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IEJSRUFLUE9JTlRTO1xuICAvLyBGaW5kIHRoZSBicmVha3BvaW50IChrZXkpIHdob3NlIHZhbHVlIGlzIDw9IHdpbmRvd1dpZHRoIHN0YXJ0aW5nIHdpdGggbGFyZ2VzdCBmaXJzdFxuICByZXR1cm4gQlJFQUtQT0lOVF9LRVlTLmZpbmQoZnVuY3Rpb24gKGtleSkge1xuICAgIHJldHVybiBicmVha3BvaW50c1trZXldIDw9IHdpZHRoO1xuICB9KTtcbn1cbi8qKlxuICogR2l2ZW4gdGhlIGN1cnJlbnQgYHdpZHRoYCBhbmQgYSBtYXggYnJlYWtwb2ludCBrZXksXG4gKiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBvciBmYWxzZSBpZiB0aGUgYHdpZHRoYCBmYWxscyB3aXRoaW4gdGhlIG1heFxuICogYnJlYWtwb2ludCBvciBhbnkgYnJlYWtwb2ludHMgYmVsb3dcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gd2lkdGggQ2FuIGVpdGhlciBiZSB0aGUgZnVsbCB3aW5kb3cgd2lkdGggb3IgYW55IHdpZHRoXG4gKiBAcGFyYW0ge0V1aUJyZWFrcG9pbnRTaXplIHwgbnVtYmVyfSBtYXggVGhlIG5hbWVkIGJyZWFrcG9pbnQgb3IgY3VzdG9tIG51bWJlciB0byBjaGVjayBhZ2FpbnN0XG4gKiBAcGFyYW0ge0V1aUJyZWFrcG9pbnRzfSBicmVha3BvaW50cyBBbiBvYmplY3Qgd2l0aCBrZXlzIGZvciBzaXppbmcgYW5kIHZhbHVlcyBmb3IgbWluaW11bSB3aWR0aFxuICogQHJldHVybnMge2Jvb2xlYW59IFdpbGwgcmV0dXJuIGBmYWxzZWAgaWYgaXQgY2FuJ3QgZmluZCBhIHZhbHVlIGZvciB0aGUgYG1heGAgYnJlYWtwb2ludFxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBpc1dpdGhpbk1heEJyZWFrcG9pbnQod2lkdGgsIG1heCkge1xuICB2YXIgYnJlYWtwb2ludHMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IEJSRUFLUE9JTlRTO1xuXG4gIGlmICh0eXBlb2YgbWF4ID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiB3aWR0aCA8PSBtYXg7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGN1cnJlbnRCcmVha3BvaW50ID0gZ2V0QnJlYWtwb2ludCh3aWR0aCwgYnJlYWtwb2ludHMpO1xuICAgIHJldHVybiBjdXJyZW50QnJlYWtwb2ludCA/IGJyZWFrcG9pbnRzW2N1cnJlbnRCcmVha3BvaW50XSA8PSBicmVha3BvaW50c1ttYXhdIDogZmFsc2U7XG4gIH1cbn1cbi8qKlxuICogR2l2ZW4gdGhlIGN1cnJlbnQgYHdpZHRoYCBhbmQgYSBtaW4gYnJlYWtwb2ludCBrZXksXG4gKiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBvciBmYWxzZSBpZiB0aGUgYHdpZHRoYCBmYWxscyB3aXRoaW4gdGhlIG1pblxuICogYnJlYWtwb2ludCBvciBhbnkgYnJlYWtwb2ludHMgYWJvdmVcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gd2lkdGggQ2FuIGVpdGhlciBiZSB0aGUgZnVsbCB3aW5kb3cgd2lkdGggb3IgYW55IHdpZHRoXG4gKiBAcGFyYW0ge0V1aUJyZWFrcG9pbnRTaXplIHwgbnVtYmVyfSBtaW4gVGhlIG5hbWVkIGJyZWFrcG9pbnQgb3IgY3VzdG9tIG51bWJlciB0byBjaGVjayBhZ2FpbnN0XG4gKiBAcGFyYW0ge0V1aUJyZWFrcG9pbnRzfSBicmVha3BvaW50cyBBbiBvYmplY3Qgd2l0aCBrZXlzIGZvciBzaXppbmcgYW5kIHZhbHVlcyBmb3IgbWluaW11bSB3aWR0aFxuICogQHJldHVybnMge2Jvb2xlYW59IFdpbGwgcmV0dXJuIGBmYWxzZWAgaWYgaXQgY2FuJ3QgZmluZCBhIHZhbHVlIGZvciB0aGUgYG1pbmAgYnJlYWtwb2ludFxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBpc1dpdGhpbk1pbkJyZWFrcG9pbnQod2lkdGgsIG1pbikge1xuICB2YXIgYnJlYWtwb2ludHMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IEJSRUFLUE9JTlRTO1xuXG4gIGlmICh0eXBlb2YgbWluID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiB3aWR0aCA+PSBtaW47XG4gIH0gZWxzZSB7XG4gICAgdmFyIGN1cnJlbnRCcmVha3BvaW50ID0gZ2V0QnJlYWtwb2ludCh3aWR0aCwgYnJlYWtwb2ludHMpO1xuICAgIHJldHVybiBjdXJyZW50QnJlYWtwb2ludCA/IGJyZWFrcG9pbnRzW2N1cnJlbnRCcmVha3BvaW50XSA+PSBicmVha3BvaW50c1ttaW5dIDogZmFsc2U7XG4gIH1cbn1cbi8qKlxuICogR2l2ZW4gdGhlIGN1cnJlbnQgYHdpZHRoYCBhbmQgYW4gYXJyYXkgb2YgYnJlYWtwb2ludCBrZXlzLFxuICogdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRydWUgb3IgZmFsc2UgaWYgdGhlIGB3aWR0aGAgZmFsbHMgd2l0aGluXG4gKiBhbnkgb2YgdGhlIG5hbWVkIGJyZWFrcG9pbnRzXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIENhbiBlaXRoZXIgYmUgdGhlIGZ1bGwgd2luZG93IHdpZHRoIG9yIGFueSB3aWR0aFxuICogQHBhcmFtIHtFdWlCcmVha3BvaW50U2l6ZVtdfSBzaXplcyBBbiBhcnJheSBvZiBuYW1lZCBicmVha3BvaW50c1xuICogQHBhcmFtIHtFdWlCcmVha3BvaW50c30gYnJlYWtwb2ludHMgQW4gb2JqZWN0IHdpdGgga2V5cyBmb3Igc2l6aW5nIGFuZCB2YWx1ZXMgZm9yIG1pbmltdW0gd2lkdGhcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBjdXJyZW50IGJyZWFrcG9pbnQgbmFtZSBpcyBpbmNsdWRlZCBpbiBgc2l6ZXNgXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGlzV2l0aGluQnJlYWtwb2ludHMod2lkdGgsIHNpemVzKSB7XG4gIHZhciBicmVha3BvaW50cyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogQlJFQUtQT0lOVFM7XG4gIHZhciBjdXJyZW50QnJlYWtwb2ludCA9IGdldEJyZWFrcG9pbnQod2lkdGgsIGJyZWFrcG9pbnRzKTtcbiAgcmV0dXJuIGN1cnJlbnRCcmVha3BvaW50ID8gc2l6ZXMuaW5jbHVkZXMoY3VycmVudEJyZWFrcG9pbnQpIDogZmFsc2U7XG59IiwgImZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7IHZhciBfaSA9IGFyciA9PSBudWxsID8gbnVsbCA6IHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgYXJyW1N5bWJvbC5pdGVyYXRvcl0gfHwgYXJyW1wiQEBpdGVyYXRvclwiXTsgaWYgKF9pID09IG51bGwpIHJldHVybjsgdmFyIF9hcnIgPSBbXTsgdmFyIF9uID0gdHJ1ZTsgdmFyIF9kID0gZmFsc2U7IHZhciBfcywgX2U7IHRyeSB7IGZvciAoX2kgPSBfaS5jYWxsKGFycik7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHsgX2Fyci5wdXNoKF9zLnZhbHVlKTsgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOyB9IH0gY2F0Y2ggKGVycikgeyBfZCA9IHRydWU7IF9lID0gZXJyOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7IH0gZmluYWxseSB7IGlmIChfZCkgdGhyb3cgX2U7IH0gfSByZXR1cm4gX2FycjsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBjcmVhdGVDb250ZXh0LCB1c2VTdGF0ZSwgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi90aGVtZSc7XG5pbXBvcnQgeyB0aHJvdHRsZSB9IGZyb20gJy4uL3Rocm90dGxlJztcbmltcG9ydCB7IGdldEJyZWFrcG9pbnQgfSBmcm9tICcuL2JyZWFrcG9pbnQnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgQ3VycmVudEV1aUJyZWFrcG9pbnRDb250ZXh0ID0gLyojX19QVVJFX18qL2NyZWF0ZUNvbnRleHQodW5kZWZpbmVkKTtcbi8qKlxuICogVG9wIGxldmVsIHByb3ZpZGVyIChuZXN0ZWQgd2l0aGluIEV1aVByb3ZpZGVyKSB3aGljaCBwcm92aWRlcyBhIHNpbmdsZVxuICogcmVzaXplIGxpc3RlbmVyIHRoYXQgcmV0dXJucyB0aGUgY3VycmVudCBicmVha3BvaW50IGJhc2VkIG9uIHdpbmRvdyB3aWR0aFxuICovXG5cbmV4cG9ydCB2YXIgQ3VycmVudEV1aUJyZWFrcG9pbnRQcm92aWRlciA9IGZ1bmN0aW9uIEN1cnJlbnRFdWlCcmVha3BvaW50UHJvdmlkZXIoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuO1xuXG4gIHZhciBfdXNlRXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpLFxuICAgICAgYnJlYWtwb2ludHMgPSBfdXNlRXVpVGhlbWUuZXVpVGhlbWUuYnJlYWtwb2ludDtcblxuICB2YXIgX3VzZVN0YXRlID0gdXNlU3RhdGUodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyBnZXRCcmVha3BvaW50KHdpbmRvdy5pbm5lcldpZHRoLCBicmVha3BvaW50cykgOiB1bmRlZmluZWQpLFxuICAgICAgX3VzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZSwgMiksXG4gICAgICBjdXJyZW50QnJlYWtwb2ludCA9IF91c2VTdGF0ZTJbMF0sXG4gICAgICBzZXRDdXJyZW50QnJlYWtwb2ludCA9IF91c2VTdGF0ZTJbMV07XG5cbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgb25XaW5kb3dSZXNpemUgPSB0aHJvdHRsZShmdW5jdGlvbiAoKSB7XG4gICAgICBzZXRDdXJyZW50QnJlYWtwb2ludChnZXRCcmVha3BvaW50KHdpbmRvdy5pbm5lcldpZHRoLCBicmVha3BvaW50cykpO1xuICAgIH0sIDUwKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgb25XaW5kb3dSZXNpemUpO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIG9uV2luZG93UmVzaXplKTtcbiAgICB9O1xuICB9LCBbYnJlYWtwb2ludHNdKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goQ3VycmVudEV1aUJyZWFrcG9pbnRDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IGN1cnJlbnRCcmVha3BvaW50XG4gIH0sIGNoaWxkcmVuKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgRXVpVGhlbWVBbXN0ZXJkYW0gfSBmcm9tICcuLi8uLi90aGVtZXMvYW1zdGVyZGFtL3RoZW1lJztcbmltcG9ydCB7IERFRkFVTFRfQ09MT1JfTU9ERSwgZ2V0Q29tcHV0ZWQgfSBmcm9tICcuL3V0aWxzJztcbmV4cG9ydCB2YXIgRXVpU3lzdGVtQ29udGV4dCA9IC8qI19fUFVSRV9fKi9jcmVhdGVDb250ZXh0KEV1aVRoZW1lQW1zdGVyZGFtKTtcbmV4cG9ydCB2YXIgRXVpTW9kaWZpY2F0aW9uc0NvbnRleHQgPSAvKiNfX1BVUkVfXyovY3JlYXRlQ29udGV4dCh7fSk7XG5leHBvcnQgdmFyIEV1aUNvbG9yTW9kZUNvbnRleHQgPSAvKiNfX1BVUkVfXyovY3JlYXRlQ29udGV4dChERUZBVUxUX0NPTE9SX01PREUpO1xuZXhwb3J0IHZhciBFdWlUaGVtZUNvbnRleHQgPSAvKiNfX1BVUkVfXyovY3JlYXRlQ29udGV4dChnZXRDb21wdXRlZChFdWlUaGVtZUFtc3RlcmRhbSwge30sIERFRkFVTFRfQ09MT1JfTU9ERSkpOyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuZXhwb3J0IHZhciBDT0xPUl9NT0RFU19TVEFOREFSRCA9IHtcbiAgbGlnaHQ6ICdMSUdIVCcsXG4gIGRhcms6ICdEQVJLJ1xufTtcbmV4cG9ydCB2YXIgQ09MT1JfTU9ERVNfSU5WRVJTRSA9ICdJTlZFUlNFJzsiLCAiZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7IHJldHVybiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5KGFycikgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFycikgfHwgX25vbkl0ZXJhYmxlU3ByZWFkKCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7IGlmICh0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGl0ZXJbU3ltYm9sLml0ZXJhdG9yXSAhPSBudWxsIHx8IGl0ZXJbXCJAQGl0ZXJhdG9yXCJdICE9IG51bGwpIHJldHVybiBBcnJheS5mcm9tKGl0ZXIpOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KGFycik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgQ09MT1JfTU9ERVNfU1RBTkRBUkQsIENPTE9SX01PREVTX0lOVkVSU0UgfSBmcm9tICcuL3R5cGVzJztcbmV4cG9ydCB2YXIgREVGQVVMVF9DT0xPUl9NT0RFID0gQ09MT1JfTU9ERVNfU1RBTkRBUkQubGlnaHQ7XG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGUgcGFyYW1ldGVyIGlzIGFuIG9iamVjdFxuICogQHBhcmFtIHthbnl9IG9iaiAtIEFueXRoaW5nXG4gKi9cblxudmFyIGlzT2JqZWN0ID0gZnVuY3Rpb24gaXNPYmplY3Qob2JqKSB7XG4gIHJldHVybiBvYmogJiYgX3R5cGVvZihvYmopID09PSAnb2JqZWN0Jztcbn07XG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGUgcHJvdmlkZWQgY29sb3IgbW9kZSBpcyBgaW52ZXJzZWBcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvck1vZGUgLSBgbGlnaHRgLCBgZGFya2AsIG9yIGBpbnZlcnNlYFxuICovXG5cblxuZXhwb3J0IHZhciBpc0ludmVyc2VDb2xvck1vZGUgPSBmdW5jdGlvbiBpc0ludmVyc2VDb2xvck1vZGUoY29sb3JNb2RlKSB7XG4gIHJldHVybiBjb2xvck1vZGUgPT09IENPTE9SX01PREVTX0lOVkVSU0U7XG59O1xuLyoqXG4gKiBSZXR1cm5zIHRoZSBjb2xvciBtb2RlIGNvbmZpZ3VyZWQgaW4gdGhlIGN1cnJlbnQgRXVpVGhlbWVQcm92aWRlci5cbiAqIFJldHVybnMgdGhlIHBhcmVudCBjb2xvciBtb2RlIGlmIG5vbmUgaXMgZXhwbGljaXR5IHNldC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvTW9kZSAtIGBsaWdodGAsIGBkYXJrYCwgb3IgYGludmVyc2VgXG4gKiBAcGFyYW0ge3N0cmluZ30gcGFyZW50Q29sb3JNb2RlIC0gYExJR0hUYCBvciBgREFSS2A7IHVzZWQgYXMgdGhlIGZhbGxiYWNrXG4gKi9cblxuZXhwb3J0IHZhciBnZXRDb2xvck1vZGUgPSBmdW5jdGlvbiBnZXRDb2xvck1vZGUoY29sb3JNb2RlLCBwYXJlbnRDb2xvck1vZGUpIHtcbiAgaWYgKGNvbG9yTW9kZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHBhcmVudENvbG9yTW9kZSB8fCBERUZBVUxUX0NPTE9SX01PREU7XG4gIH1cblxuICB2YXIgbW9kZSA9IGNvbG9yTW9kZS50b1VwcGVyQ2FzZSgpO1xuXG4gIGlmIChpc0ludmVyc2VDb2xvck1vZGUobW9kZSkpIHtcbiAgICByZXR1cm4gcGFyZW50Q29sb3JNb2RlID09PSBDT0xPUl9NT0RFU19TVEFOREFSRC5kYXJrIHx8IHBhcmVudENvbG9yTW9kZSA9PT0gdW5kZWZpbmVkID8gQ09MT1JfTU9ERVNfU1RBTkRBUkQubGlnaHQgOiBDT0xPUl9NT0RFU19TVEFOREFSRC5kYXJrO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBtb2RlO1xuICB9XG59O1xuLyoqXG4gKiBSZXR1cm5zIGEgdmFsdWUgYXQgYSBnaXZlbiBwYXRoIG9uIGFuIG9iamVjdC5cbiAqIElmIGBjb2xvck1vZGVgIGlzIHByb3ZpZGVkLCB3aWxsIHNjb3BlIHRoZSB2YWx1ZSB0byB0aGUgYXBwcm9wcmlhdGUgY29sb3IgbW9kZSBrZXkgKExJR0hUXFxEQVJLKVxuICogQHBhcmFtIHtvYmplY3R9IG1vZGVsIC0gT2JqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ30gX3BhdGggLSBEb3Qtbm90YXRlZCBzdHJpbmcgdG8gYSBwYXRoIG9uIHRoZSBvYmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvck1vZGUgLSBgbGlnaHRgIG9yIGBkYXJrYFxuICovXG5cbmV4cG9ydCB2YXIgZ2V0T24gPSBmdW5jdGlvbiBnZXRPbihtb2RlbCwgX3BhdGgsIGNvbG9yTW9kZSkge1xuICB2YXIgcGF0aCA9IF9wYXRoLnNwbGl0KCcuJyk7XG5cbiAgdmFyIG5vZGUgPSBtb2RlbDtcblxuICB3aGlsZSAocGF0aC5sZW5ndGgpIHtcbiAgICB2YXIgc2VnbWVudCA9IHBhdGguc2hpZnQoKTtcblxuICAgIGlmIChub2RlLmhhc093blByb3BlcnR5KHNlZ21lbnQpID09PSBmYWxzZSkge1xuICAgICAgaWYgKGNvbG9yTW9kZSAmJiBub2RlLmhhc093blByb3BlcnR5KGNvbG9yTW9kZSkgPT09IHRydWUgJiYgbm9kZVtjb2xvck1vZGVdLmhhc093blByb3BlcnR5KHNlZ21lbnQpID09PSB0cnVlKSB7XG4gICAgICAgIGlmIChub2RlW2NvbG9yTW9kZV1bc2VnbWVudF0gaW5zdGFuY2VvZiBDb21wdXRlZCkge1xuICAgICAgICAgIG5vZGUgPSBub2RlW2NvbG9yTW9kZV1bc2VnbWVudF0uZ2V0VmFsdWUobnVsbCwgbnVsbCwgbm9kZSwgY29sb3JNb2RlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBub2RlID0gbm9kZVtjb2xvck1vZGVdW3NlZ21lbnRdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAobm9kZVtzZWdtZW50XSBpbnN0YW5jZW9mIENvbXB1dGVkKSB7XG4gICAgICAgIG5vZGUgPSBub2RlW3NlZ21lbnRdLmdldFZhbHVlKG51bGwsIG51bGwsIG5vZGUsIGNvbG9yTW9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlID0gbm9kZVtzZWdtZW50XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbm9kZTtcbn07XG4vKipcbiAqIFNldHMgYSB2YWx1ZSBhdCBhIGdpdmVuIHBhdGggb24gYW4gb2JqZWN0LlxuICogQHBhcmFtIHtvYmplY3R9IG1vZGVsIC0gT2JqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ30gX3BhdGggLSBEb3Qtbm90YXRlZCBzdHJpbmcgdG8gYSBwYXRoIG9uIHRoZSBvYmplY3RcbiAqIEBwYXJhbSB7YW55fSBzdHJpbmcgLSAgVGhlIHZhbHVlIHRvIHNldFxuICovXG5cbmV4cG9ydCB2YXIgc2V0T24gPSBmdW5jdGlvbiBzZXRPbihtb2RlbCwgX3BhdGgsIHZhbHVlKSB7XG4gIHZhciBwYXRoID0gX3BhdGguc3BsaXQoJy4nKTtcblxuICB2YXIgcHJvcGVydHlOYW1lID0gcGF0aC5wb3AoKTtcbiAgdmFyIG5vZGUgPSBtb2RlbDtcblxuICB3aGlsZSAocGF0aC5sZW5ndGgpIHtcbiAgICB2YXIgc2VnbWVudCA9IHBhdGguc2hpZnQoKTtcblxuICAgIGlmIChub2RlLmhhc093blByb3BlcnR5KHNlZ21lbnQpID09PSBmYWxzZSkge1xuICAgICAgbm9kZVtzZWdtZW50XSA9IHt9O1xuICAgIH1cblxuICAgIG5vZGUgPSBub2RlW3NlZ21lbnRdO1xuICB9XG5cbiAgbm9kZVtwcm9wZXJ0eU5hbWVdID0gdmFsdWU7XG4gIHJldHVybiB0cnVlO1xufTtcbi8qKlxuICogQ3JlYXRlcyBhIGNsYXNzIHRvIHN0b3JlIHRoZSBgY29tcHV0ZXJgIG1ldGhvZCBhbmQgaXRzIGV2ZW50dWFsIHBhcmFtZXRlcnMuXG4gKiBBbGxvd3MgZm9yIG9uLWRlbWFuZCBjb21wdXRhdGlvbiB3aXRoIHVwLXRvLWRhdGUgcGFyYW1ldGVycyB2aWEgYGdldFZhbHVlYCBtZXRob2QuXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNvbXB1dGVyIC0gRnVuY3Rpb24gdG8gYmUgY29tcHV0ZWRcbiAqIEBwYXJhbSB7c3RyaW5nIHwgYXJyYXl9IGRlcGVuZGVuY2llcyAtIERlcGVuZGVuY2llcyBwYXNzZWQgdG8gdGhlIGBjb21wdXRlcmAgYXMgcGFyYW1ldGVyc1xuICovXG5cbmV4cG9ydCB2YXIgQ29tcHV0ZWQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBDb21wdXRlZChjb21wdXRlcikge1xuICAgIHZhciBkZXBlbmRlbmNpZXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IFtdO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIENvbXB1dGVkKTtcblxuICAgIHRoaXMuY29tcHV0ZXIgPSBjb21wdXRlcjtcbiAgICB0aGlzLmRlcGVuZGVuY2llcyA9IGRlcGVuZGVuY2llcztcbiAgfVxuICAvKipcbiAgICogRXhlY3V0ZXMgdGhlIGBjb21wdXRlcmAgbWV0aG9kIHdpdGggdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHRoZW1lXG4gICAqIGJ5IHRha2luZyBpbnRvIGFjY291bnQgcHJldmlvdXNseSBjb21wdXRlZCB2YWx1ZXMgYW5kIG1vZGlmaWNhdGlvbnMuXG4gICAqIEBwYXJhbSB7UHJveHkgfCBvYmplY3R9IGJhc2UgLSBDb21wdXRlZCBvciB1bmNvbXB1dGVkIHRoZW1lXG4gICAqIEBwYXJhbSB7UHJveHkgfCBvYmplY3R9IG1vZGlmaWNhdGlvbnMgLSBUaGVtZSB2YWx1ZSBvdmVycmlkZXNcbiAgICogQHBhcmFtIHtvYmplY3R9IHdvcmtpbmcgLSBQYXJ0aWFsbHkgY29tcHV0ZWQgdGhlbWVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yTW9kZSAtIGBsaWdodGAgb3IgYGRhcmtgXG4gICAqL1xuXG5cbiAgX2NyZWF0ZUNsYXNzKENvbXB1dGVkLCBbe1xuICAgIGtleTogXCJnZXRWYWx1ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRWYWx1ZShiYXNlKSB7XG4gICAgICB2YXIgbW9kaWZpY2F0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgICB2YXIgd29ya2luZyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkO1xuICAgICAgdmFyIGNvbG9yTW9kZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAzID8gYXJndW1lbnRzWzNdIDogdW5kZWZpbmVkO1xuXG4gICAgICBpZiAoIXRoaXMuZGVwZW5kZW5jaWVzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb21wdXRlcih3b3JraW5nKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRoaXMuZGVwZW5kZW5jaWVzKSkge1xuICAgICAgICB2YXIgX3JlZiwgX2dldE9uO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmNvbXB1dGVyKChfcmVmID0gKF9nZXRPbiA9IGdldE9uKHdvcmtpbmcsIHRoaXMuZGVwZW5kZW5jaWVzKSkgIT09IG51bGwgJiYgX2dldE9uICE9PSB2b2lkIDAgPyBfZ2V0T24gOiBnZXRPbihtb2RpZmljYXRpb25zLCB0aGlzLmRlcGVuZGVuY2llcywgY29sb3JNb2RlKSkgIT09IG51bGwgJiYgX3JlZiAhPT0gdm9pZCAwID8gX3JlZiA6IGdldE9uKGJhc2UsIHRoaXMuZGVwZW5kZW5jaWVzLCBjb2xvck1vZGUpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuY29tcHV0ZXIodGhpcy5kZXBlbmRlbmNpZXMubWFwKGZ1bmN0aW9uIChkZXBlbmRlbmN5KSB7XG4gICAgICAgIHZhciBfcmVmMiwgX2dldE9uMjtcblxuICAgICAgICByZXR1cm4gKF9yZWYyID0gKF9nZXRPbjIgPSBnZXRPbih3b3JraW5nLCBkZXBlbmRlbmN5KSkgIT09IG51bGwgJiYgX2dldE9uMiAhPT0gdm9pZCAwID8gX2dldE9uMiA6IGdldE9uKG1vZGlmaWNhdGlvbnMsIGRlcGVuZGVuY3ksIGNvbG9yTW9kZSkpICE9PSBudWxsICYmIF9yZWYyICE9PSB2b2lkIDAgPyBfcmVmMiA6IGdldE9uKGJhc2UsIGRlcGVuZGVuY3ksIGNvbG9yTW9kZSk7XG4gICAgICB9KSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIENvbXB1dGVkO1xufSgpO1xuLyoqXG4gKiBSZXR1cm5zIGEgQ2xhc3MgKGBDb21wdXRlZGApIHRoYXQgc3RvcmVzIHRoZSBhcmJpdHJhcnkgY29tcHV0ZXIgbWV0aG9kXG4gKiBhbmQgcmVmZXJlbmNlcyB0byBpdHMgb3B0aW9uYWwgZGVwZW5kZWNpZXMuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjb21wdXRlciAtIEFyYml0cmFyeSBtZXRob2QgdG8gYmUgY2FsbGVkIGF0IGNvbXB1dGUgdGltZS5cbiAqIEBwYXJhbSB7c3RyaW5nIHwgYXJyYXl9IGRlcGVuZGVuY2llcyAtIFZhbHVlcyB0aGF0IHdpbGwgYmUgcHJvdmlkZWQgdG8gYGNvbXB1dGVyYCBhdCBjb21wdXRlIHRpbWUuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVkKGNvbXAsIGRlcCkge1xuICByZXR1cm4gbmV3IENvbXB1dGVkKGNvbXAsIGRlcCk7XG59XG4vKipcbiAqIFRha2VzIGFuIHVuY29tcHV0ZWQgdGhlbWUsIGFuZCBjb21wdXRlcyBhbmQgcmV0dXJucyBhbGwgdmFsdWVzIHRha2luZ1xuICogaW50byBjb25zaWRlcmF0aW9uIHZhbHVlIG92ZXJyaWRlcyBhbmQgY29uZmlndXJlZCBjb2xvciBtb2RlLlxuICogT3ZlcnJpZGVzIHRha2UgcHJlY2VkZW5jZSwgYW5kIG9ubHkgdmFsdWVzIGluIHRoZSBjdXJyZW50IGNvbG9yIG1vZGVcbiAqIGFyZSBjb21wdXRlZCBhbmQgcmV0dXJuZWQuXG4gKiBAcGFyYW0ge1Byb3h5fSBiYXNlIC0gT2JqZWN0IHRvIHRyYW5zZm9ybSBpbnRvIFByb3h5XG4gKiBAcGFyYW0ge1Byb3h5IHwgb2JqZWN0fSBvdmVyIC0gVW5pcXVlIGlkZW50aWZpZXIgb3IgbmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yTW9kZSAtIGBsaWdodGAgb3IgYGRhcmtgXG4gKi9cblxuZXhwb3J0IHZhciBnZXRDb21wdXRlZCA9IGZ1bmN0aW9uIGdldENvbXB1dGVkKGJhc2UsIG92ZXIsIGNvbG9yTW9kZSkge1xuICB2YXIgb3V0cHV0ID0ge1xuICAgIHRoZW1lTmFtZTogYmFzZS5rZXlcbiAgfTtcblxuICBmdW5jdGlvbiBsb29wKGJhc2UsIG92ZXIpIHtcbiAgICB2YXIgY2hlY2tFeGlzdGluZyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogZmFsc2U7XG4gICAgdmFyIHBhdGggPSBhcmd1bWVudHMubGVuZ3RoID4gMyA/IGFyZ3VtZW50c1szXSA6IHVuZGVmaW5lZDtcbiAgICBPYmplY3Qua2V5cyhiYXNlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHZhciBuZXdQYXRoID0gcGF0aCA/IFwiXCIuY29uY2F0KHBhdGgsIFwiLlwiKS5jb25jYXQoa2V5KSA6IFwiXCIuY29uY2F0KGtleSk7IC8vIEB0cy1leHBlY3QtZXJyb3IgYGtleWAgaXMgbm90IG5lY2Vzc2FyaWx5IGEgY29sb3JNb2RlIGtleVxuXG4gICAgICBpZiAoW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShPYmplY3QudmFsdWVzKENPTE9SX01PREVTX1NUQU5EQVJEKSksIFtjb2xvck1vZGVdKS5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgIGlmIChrZXkgIT09IGNvbG9yTW9kZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgY29sb3JNb2RlU2VnbWVudCA9IG5ldyBSZWdFeHAoXCIoXFxcXC5cIi5jb25jYXQoY29sb3JNb2RlLCBcIlxcXFxiKXwoXFxcXGJcIikuY29uY2F0KGNvbG9yTW9kZSwgXCJcXFxcLilcIikpO1xuICAgICAgICAgIG5ld1BhdGggPSBuZXdQYXRoLnJlcGxhY2UoY29sb3JNb2RlU2VnbWVudCwgJycpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBleGlzdGluZyA9IGNoZWNrRXhpc3RpbmcgJiYgZ2V0T24ob3V0cHV0LCBuZXdQYXRoKTtcblxuICAgICAgaWYgKCFleGlzdGluZyB8fCBpc09iamVjdChleGlzdGluZykpIHtcbiAgICAgICAgdmFyIGJhc2VWYWx1ZSA9IGJhc2Vba2V5XSBpbnN0YW5jZW9mIENvbXB1dGVkID8gYmFzZVtrZXldLmdldFZhbHVlKGJhc2Uucm9vdCwgb3Zlci5yb290LCBvdXRwdXQsIGNvbG9yTW9kZSkgOiBiYXNlW2tleV07XG4gICAgICAgIHZhciBvdmVyVmFsdWUgPSBvdmVyW2tleV0gaW5zdGFuY2VvZiBDb21wdXRlZCA/IG92ZXJba2V5XS5nZXRWYWx1ZShiYXNlLnJvb3QsIG92ZXIucm9vdCwgb3V0cHV0LCBjb2xvck1vZGUpIDogb3ZlcltrZXldO1xuXG4gICAgICAgIGlmIChpc09iamVjdChiYXNlVmFsdWUpICYmICFBcnJheS5pc0FycmF5KGJhc2VWYWx1ZSkpIHtcbiAgICAgICAgICBsb29wKGJhc2VWYWx1ZSwgb3ZlclZhbHVlICE9PSBudWxsICYmIG92ZXJWYWx1ZSAhPT0gdm9pZCAwID8gb3ZlclZhbHVlIDoge30sIGNoZWNrRXhpc3RpbmcsIG5ld1BhdGgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNldE9uKG91dHB1dCwgbmV3UGF0aCwgb3ZlclZhbHVlICE9PSBudWxsICYmIG92ZXJWYWx1ZSAhPT0gdm9pZCAwID8gb3ZlclZhbHVlIDogYmFzZVZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9IC8vIENvbXB1dGUgc3RhbmRhcmQgdGhlbWUgdmFsdWVzIGFuZCBhcHBseSBvdmVycmlkZXNcblxuXG4gIGxvb3AoYmFzZSwgb3Zlcik7IC8vIENvbXB1dGUgYW5kIGFwcGx5IGV4dGVuc2lvbiB2YWx1ZXMgb25seVxuXG4gIGxvb3Aob3Zlciwge30sIHRydWUpO1xuICByZXR1cm4gb3V0cHV0O1xufTtcbi8qKlxuICogQnVpbGRzIGEgUHJveHkgd2l0aCBhIGN1c3RvbSBgaGFuZGxlcmAgZGVzaWduZWQgdG8gc2VsZi1yZWZlcmVuY2UgdmFsdWVzXG4gKiBhbmQgcHJldmVudCBhcmJpdHJhcnkgdmFsdWUgb3ZlcnJpZGVzLlxuICogQHBhcmFtIHtvYmplY3R9IG1vZGVsIC0gT2JqZWN0IHRvIHRyYW5zZm9ybSBpbnRvIFByb3h5XG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVW5pcXVlIGlkZW50aWZpZXIgb3IgbmFtZVxuICovXG5cbmV4cG9ydCB2YXIgYnVpbGRUaGVtZSA9IGZ1bmN0aW9uIGJ1aWxkVGhlbWUobW9kZWwsIGtleSkge1xuICB2YXIgaGFuZGxlciA9IHtcbiAgICBnZXRQcm90b3R5cGVPZjogZnVuY3Rpb24gZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSB7XG4gICAgICByZXR1cm4gUmVmbGVjdC5nZXRQcm90b3R5cGVPZih0YXJnZXQubW9kZWwpO1xuICAgIH0sXG4gICAgc2V0UHJvdG90eXBlT2Y6IGZ1bmN0aW9uIHNldFByb3RvdHlwZU9mKHRhcmdldCwgcHJvdG90eXBlKSB7XG4gICAgICByZXR1cm4gUmVmbGVjdC5zZXRQcm90b3R5cGVPZih0YXJnZXQubW9kZWwsIHByb3RvdHlwZSk7XG4gICAgfSxcbiAgICBpc0V4dGVuc2libGU6IGZ1bmN0aW9uIGlzRXh0ZW5zaWJsZSh0YXJnZXQpIHtcbiAgICAgIHJldHVybiBSZWZsZWN0LmlzRXh0ZW5zaWJsZSh0YXJnZXQpO1xuICAgIH0sXG4gICAgcHJldmVudEV4dGVuc2lvbnM6IGZ1bmN0aW9uIHByZXZlbnRFeHRlbnNpb25zKHRhcmdldCkge1xuICAgICAgcmV0dXJuIFJlZmxlY3QucHJldmVudEV4dGVuc2lvbnModGFyZ2V0Lm1vZGVsKTtcbiAgICB9LFxuICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSB7XG4gICAgICByZXR1cm4gUmVmbGVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0Lm1vZGVsLCBrZXkpO1xuICAgIH0sXG4gICAgZGVmaW5lUHJvcGVydHk6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHksIGF0dHJpYnV0ZXMpIHtcbiAgICAgIHJldHVybiBSZWZsZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldC5tb2RlbCwgcHJvcGVydHksIGF0dHJpYnV0ZXMpO1xuICAgIH0sXG4gICAgaGFzOiBmdW5jdGlvbiBoYXModGFyZ2V0LCBwcm9wZXJ0eSkge1xuICAgICAgcmV0dXJuIFJlZmxlY3QuaGFzKHRhcmdldC5tb2RlbCwgcHJvcGVydHkpO1xuICAgIH0sXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoX3RhcmdldCwgcHJvcGVydHkpIHtcbiAgICAgIGlmIChwcm9wZXJ0eSA9PT0gJ2tleScpIHtcbiAgICAgICAgcmV0dXJuIF90YXJnZXRbcHJvcGVydHldO1xuICAgICAgfSAvLyBwcmV2ZW50IFNhZmFyaSBmcm9tIGxvY2tpbmcgdXAgd2hlbiB0aGUgcHJveHkgaXMgdXNlZCBpbiBkZXYgdG9vbHNcbiAgICAgIC8vIGFzIGl0IGRvZXNuJ3Qgc3VwcG9ydCBnZXRQcm90b3R5cGVPZlxuXG5cbiAgICAgIGlmIChwcm9wZXJ0eSA9PT0gJ19fcHJvdG9fXycpIHJldHVybiB7fTtcbiAgICAgIHZhciB0YXJnZXQgPSBwcm9wZXJ0eSA9PT0gJ3Jvb3QnID8gX3RhcmdldCA6IF90YXJnZXQubW9kZWwgfHwgX3RhcmdldDsgLy8gQHRzLWlnbm9yZSBgc3RyaW5nYCBpbmRleCBzaWduYXR1cmVcblxuICAgICAgdmFyIHZhbHVlID0gdGFyZ2V0W3Byb3BlcnR5XTtcblxuICAgICAgaWYgKGlzT2JqZWN0KHZhbHVlKSAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm94eSh7XG4gICAgICAgICAgbW9kZWw6IHZhbHVlLFxuICAgICAgICAgIHJvb3Q6IF90YXJnZXQucm9vdCxcbiAgICAgICAgICBrZXk6IFwiX1wiLmNvbmNhdChfdGFyZ2V0LmtleSlcbiAgICAgICAgfSwgaGFuZGxlcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uIHNldCh0YXJnZXQpIHtcbiAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfSxcbiAgICBkZWxldGVQcm9wZXJ0eTogZnVuY3Rpb24gZGVsZXRlUHJvcGVydHkodGFyZ2V0KSB7XG4gICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH0sXG4gICAgb3duS2V5czogZnVuY3Rpb24gb3duS2V5cyh0YXJnZXQpIHtcbiAgICAgIHJldHVybiBSZWZsZWN0Lm93bktleXModGFyZ2V0Lm1vZGVsKTtcbiAgICB9LFxuICAgIGFwcGx5OiBmdW5jdGlvbiBhcHBseSh0YXJnZXQpIHtcbiAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfSxcbiAgICBjb25zdHJ1Y3Q6IGZ1bmN0aW9uIGNvbnN0cnVjdCh0YXJnZXQpIHtcbiAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfVxuICB9O1xuICB2YXIgdGhlbWVQcm94eSA9IG5ldyBQcm94eSh7XG4gICAgbW9kZWw6IG1vZGVsLFxuICAgIHJvb3Q6IG1vZGVsLFxuICAgIGtleToga2V5XG4gIH0sIGhhbmRsZXIpO1xuICByZXR1cm4gdGhlbWVQcm94eTtcbn07XG4vKipcbiAqIERlZXBseSBtZXJnZXMgdHdvIG9iamVjdHMsIHVzaW5nIGBzb3VyY2VgIHZhbHVlcyB3aGVuZXZlciBwb3NzaWJsZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBfdGFyZ2V0IC0gT2JqZWN0IHdpdGggZmFsbGJhY2sgdmFsdWVzXG4gKiBAcGFyYW0ge29iamVjdH0gc291cmNlIC0gT2JqZWN0IHdpdGggZGVzaXJlZCB2YWx1ZXNcbiAqL1xuXG5leHBvcnQgdmFyIG1lcmdlRGVlcCA9IGZ1bmN0aW9uIG1lcmdlRGVlcChfdGFyZ2V0KSB7XG4gIHZhciBzb3VyY2UgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuXG4gIHZhciB0YXJnZXQgPSBfb2JqZWN0U3ByZWFkKHt9LCBfdGFyZ2V0KTtcblxuICBpZiAoIWlzT2JqZWN0KHRhcmdldCkgfHwgIWlzT2JqZWN0KHNvdXJjZSkpIHtcbiAgICByZXR1cm4gc291cmNlO1xuICB9XG5cbiAgT2JqZWN0LmtleXMoc291cmNlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgdGFyZ2V0VmFsdWUgPSB0YXJnZXRba2V5XTtcbiAgICB2YXIgc291cmNlVmFsdWUgPSBzb3VyY2Vba2V5XTtcblxuICAgIGlmIChpc09iamVjdCh0YXJnZXRWYWx1ZSkgJiYgaXNPYmplY3Qoc291cmNlVmFsdWUpKSB7XG4gICAgICB0YXJnZXRba2V5XSA9IG1lcmdlRGVlcChfb2JqZWN0U3ByZWFkKHt9LCB0YXJnZXRWYWx1ZSksIF9vYmplY3RTcHJlYWQoe30sIHNvdXJjZVZhbHVlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhcmdldFtrZXldID0gc291cmNlVmFsdWU7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHRhcmdldDtcbn07IiwgImZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7IHZhciBfaSA9IGFyciA9PSBudWxsID8gbnVsbCA6IHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgYXJyW1N5bWJvbC5pdGVyYXRvcl0gfHwgYXJyW1wiQEBpdGVyYXRvclwiXTsgaWYgKF9pID09IG51bGwpIHJldHVybjsgdmFyIF9hcnIgPSBbXTsgdmFyIF9uID0gdHJ1ZTsgdmFyIF9kID0gZmFsc2U7IHZhciBfcywgX2U7IHRyeSB7IGZvciAoX2kgPSBfaS5jYWxsKGFycik7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHsgX2Fyci5wdXNoKF9zLnZhbHVlKTsgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOyB9IH0gY2F0Y2ggKGVycikgeyBfZCA9IHRydWU7IF9lID0gZXJyOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7IH0gZmluYWxseSB7IGlmIChfZCkgdGhyb3cgX2U7IH0gfSByZXR1cm4gX2FycjsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGNhbGN1bGF0ZXMgaWYgdGhlIHNwZWNpZmllZCBjb2xvciBpcyBcImRhcmtcIiwgd2hpY2ggdXN1YWxseSBtZWFuc1xuICogeW91IG5lZWQgbGlnaHQgdGV4dCBpZiB5b3UgdXNlIGl0IGFzIGEgYmFja2dyb3VuZCBjb2xvciB0byBmdWxmaWxsIFdDQUcgY29udHJhc3RcbiAqIHJlcXVpcmVtZW50LlxuICogVGhlIGNvbG9yIG11c3QgYmUgc3BlY2lmaWVkIHZpYSBpdHMgcmVkLCBncmVlbiBhbmQgYmx1ZSB2YWx1ZSBpbiB0aGUgcmFuZ2Ugb2ZcbiAqIDAgdG8gMjU1LlxuICogVGhlIGZvcm11bGEgaXMgYmFzZWQgb24gdGhpcyBTdGFja292ZXJmbG93IGFuc3dlcjogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzM5NDMwMjNcbiAqIHdoaWNoIGl0c2VsZiBpcyBiYXNlZCB1cG9uIHRoZSBXQ0FHIHJlY29tbWVuZGF0aW9uIGZvciBjb2xvciBjb250cmFzdC5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gcmVkIFRoZSByZWQgY29tcG9uZW50IGluIHRoZSByYW5nZSAwIHRvIDI1NVxuICogQHBhcmFtIHtudW1iZXJ9IGdyZWVuIFRoZSBncmVlbiBjb21wb25lbnQgaW4gdGhlIHJhbmdlIDAgdG8gMjU1XG4gKiBAcGFyYW0ge251bWJlcn0gYmx1ZSBUaGUgYmx1ZSBjb21wb25lbnQgaW4gdGhlIHJhbmdlIDAgdG8gMjU1XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgY29sb3IgaXMgZGFyaywgZmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNDb2xvckRhcmsocmVkLCBncmVlbiwgYmx1ZSkge1xuICB2YXIgX21hcCRtYXAgPSBbcmVkLCBncmVlbiwgYmx1ZV0ubWFwKGZ1bmN0aW9uIChjKSB7XG4gICAgcmV0dXJuIGMgLyAyNTUuMDtcbiAgfSkubWFwKGZ1bmN0aW9uIChjKSB7XG4gICAgcmV0dXJuIGMgPD0gMC4wMzkyOCA/IGMgLyAxMi45MiA6IE1hdGgucG93KChjICsgMC4wNTUpIC8gMS4wNTUsIDIuNCk7XG4gIH0pLFxuICAgICAgX21hcCRtYXAyID0gX3NsaWNlZFRvQXJyYXkoX21hcCRtYXAsIDMpLFxuICAgICAgciA9IF9tYXAkbWFwMlswXSxcbiAgICAgIGcgPSBfbWFwJG1hcDJbMV0sXG4gICAgICBiID0gX21hcCRtYXAyWzJdO1xuXG4gIHZhciBsdW1pbmFuY2UgPSAwLjIxMjYgKiByICsgMC43MTUyICogZyArIDAuMDcyMiAqIGI7XG4gIHJldHVybiBsdW1pbmFuY2UgPD0gMC4xNzk7XG59IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZEhleChoZXgpIHtcbiAgcmV0dXJuIC8oXiNbMC05QS1GXXs2fSQpfCheI1swLTlBLUZdezN9JCkvaS50ZXN0KGhleCk7XG59IiwgImZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHsgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHsgaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgaXRlcltTeW1ib2wuaXRlcmF0b3JdICE9IG51bGwgfHwgaXRlcltcIkBAaXRlcmF0b3JcIl0gIT0gbnVsbCkgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkoYXJyKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBjaHJvbWEgZnJvbSAnY2hyb21hLWpzJztcbmltcG9ydCB7IGNvbG9yUGFsZXR0ZSB9IGZyb20gJy4vY29sb3JfcGFsZXR0ZSc7XG5cbnZhciBmbGF0dGVuID0gZnVuY3Rpb24gZmxhdHRlbihhcnIpIHtcbiAgdmFyIF9yZWY7XG5cbiAgcmV0dXJuIChfcmVmID0gW10pLmNvbmNhdC5hcHBseShfcmVmLCBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSk7XG59O1xuXG52YXIgZXVpUGFsZXR0ZSA9IGZ1bmN0aW9uIGV1aVBhbGV0dGUoY29sb3JzLCBzdGVwcykge1xuICB2YXIgZGl2ZXJnZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogZmFsc2U7XG4gIHZhciBjYXRlZ29yaWNhbCA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDogdHJ1ZTtcblxuICAvLyBUaGlzIGZ1bmN0aW9uIGFsc28gdHJpbXMgdGhlIGZpcnN0IGNvbG9yIHNvIHdoaXRlL2JsYWNrIGlzIG5ldmVyIGEgY29sb3JcbiAgaWYgKCFkaXZlcmdlICYmIHN0ZXBzID4gMSkge1xuICAgIHZhciBwYWxldHRlID0gY29sb3JQYWxldHRlKGNvbG9ycywgc3RlcHMgKyAxKTtcbiAgICBwYWxldHRlLnNoaWZ0KCk7XG4gICAgcmV0dXJuIHBhbGV0dGU7XG4gIH1cblxuICByZXR1cm4gY29sb3JQYWxldHRlKGNvbG9ycywgc3RlcHMsIGRpdmVyZ2UsIGNhdGVnb3JpY2FsKTtcbn07XG5cbmV4cG9ydCB2YXIgZXVpUGFsZXR0ZUNvbG9yQmxpbmQgPSBmdW5jdGlvbiBldWlQYWxldHRlQ29sb3JCbGluZCgpIHtcbiAgdmFyIF9yZWYyID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fSxcbiAgICAgIF9yZWYyJHJvdGF0aW9ucyA9IF9yZWYyLnJvdGF0aW9ucyxcbiAgICAgIHJvdGF0aW9ucyA9IF9yZWYyJHJvdGF0aW9ucyA9PT0gdm9pZCAwID8gMSA6IF9yZWYyJHJvdGF0aW9ucyxcbiAgICAgIF9yZWYyJG9yZGVyID0gX3JlZjIub3JkZXIsXG4gICAgICBvcmRlciA9IF9yZWYyJG9yZGVyID09PSB2b2lkIDAgPyAnYXBwZW5kJyA6IF9yZWYyJG9yZGVyLFxuICAgICAgX3JlZjIkZGlyZWN0aW9uID0gX3JlZjIuZGlyZWN0aW9uLFxuICAgICAgZGlyZWN0aW9uID0gX3JlZjIkZGlyZWN0aW9uID09PSB2b2lkIDAgPyAnbGlnaHRlcicgOiBfcmVmMiRkaXJlY3Rpb24sXG4gICAgICBfcmVmMiRzb3J0QnkgPSBfcmVmMi5zb3J0QnksXG4gICAgICBzb3J0QnkgPSBfcmVmMiRzb3J0QnkgPT09IHZvaWQgMCA/ICdkZWZhdWx0JyA6IF9yZWYyJHNvcnRCeSxcbiAgICAgIF9yZWYyJHNvcnRTaGlmdCA9IF9yZWYyLnNvcnRTaGlmdCxcbiAgICAgIHNvcnRTaGlmdCA9IF9yZWYyJHNvcnRTaGlmdCA9PT0gdm9pZCAwID8gJy0xMDAnIDogX3JlZjIkc29ydFNoaWZ0O1xuXG4gIHZhciBjb2xvcnMgPSBbXTtcbiAgdmFyIGJhc2UgPSBbJyM1NEIzOTknLCAvLyAwIGdyZWVuXG4gICcjNjA5MkMwJywgLy8gMSBibHVlXG4gICcjRDM2MDg2JywgLy8gMiBkYXJrIHBpbmtcbiAgJyM5MTcwQjgnLCAvLyAzIHB1cnBsZVxuICAnI0NBOEVBRScsIC8vIDQgbGlnaHQgcGlua1xuICAnI0Q2QkY1NycsIC8vIDUgeWVsbG93XG4gICcjQjlBODg4JywgLy8gNiB0YW5cbiAgJyNEQThCNDUnLCAvLyA3IG9yYW5nZVxuICAnI0FBNjU1NicsIC8vIDggYnJvd25cbiAgJyNFNzY2NEMnIC8vIDkgcmVkXG4gIF07XG5cbiAgaWYgKHNvcnRCeSA9PT0gJ25hdHVyYWwnKSB7XG4gICAgLy8gU29ydCB0aGUgY29sb3JzIGJhc2VkIG9uIHRoZSBjb2xvciB3aGVlbCwgYnV0IHNoaWZ0aW5nIHRoZSB2YWx1ZXMgYmFzZWQgb24gc29ydFNoaWZ0XG4gICAgYmFzZSA9IF90b0NvbnN1bWFibGVBcnJheShiYXNlKS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gY2hyb21hKGEpLnNldCgnaHNsLmgnLCBzb3J0U2hpZnQpLmhzbCgpWzBdIC0gY2hyb21hKGIpLnNldCgnaHNsLmgnLCBzb3J0U2hpZnQpLmhzbCgpWzBdO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKHJvdGF0aW9ucyA+IDEpIHtcbiAgICB2YXIgcGFsZXR0ZXMgPSBiYXNlLm1hcChmdW5jdGlvbiAoY29sb3IpIHtcbiAgICAgIC8vIENyZWF0ZSB0aGUgZGFya2VzdCBhbmQgbGlnaHRlc3QgdmVyc2lvbnMgb2YgZWFjaCBjb2xvciB1c2luZyBibGFjayBhbmQgd2hpdGVcbiAgICAgIHZhciBwYWxldHRlID0gY29sb3JQYWxldHRlKFsnYmxhY2snLCBjb2xvciwgJ3doaXRlJ10sIDUsIGZhbHNlLCB0cnVlKTsgLy8gVGhlbiByZW1vdmluZyB0aGUgZXh0cmVtZXNcblxuICAgICAgcGFsZXR0ZS5wb3AoKTtcbiAgICAgIHBhbGV0dGUuc2hpZnQoKTtcblxuICAgICAgc3dpdGNoIChkaXJlY3Rpb24pIHtcbiAgICAgICAgY2FzZSAnbGlnaHRlcic6XG4gICAgICAgICAgcmV0dXJuIGNvbG9yUGFsZXR0ZShbcGFsZXR0ZVsxXSwgcGFsZXR0ZVsyXV0sIHJvdGF0aW9ucywgZmFsc2UsIHRydWUpO1xuXG4gICAgICAgIGNhc2UgJ2Rhcmtlcic6XG4gICAgICAgICAgcmV0dXJuIGNvbG9yUGFsZXR0ZShbcGFsZXR0ZVsxXSwgcGFsZXR0ZVswXV0sIHJvdGF0aW9ucywgZmFsc2UsIHRydWUpO1xuXG4gICAgICAgIGNhc2UgJ2JvdGgnOlxuICAgICAgICAgIHJldHVybiBjb2xvclBhbGV0dGUocGFsZXR0ZSwgcm90YXRpb25zLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAob3JkZXIgPT09ICdncm91cCcpIHtcbiAgICAgIGNvbG9ycyA9IGZsYXR0ZW4ocGFsZXR0ZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgX2xvb3AgPSBmdW5jdGlvbiBfbG9vcChpKSB7XG4gICAgICAgIHZhciBfY29sb3JzO1xuXG4gICAgICAgIHZhciByb3RhdGlvbiA9IHBhbGV0dGVzLm1hcChmdW5jdGlvbiAocGFsZXR0ZSkge1xuICAgICAgICAgIHJldHVybiBwYWxldHRlW2ldO1xuICAgICAgICB9KTtcblxuICAgICAgICAoX2NvbG9ycyA9IGNvbG9ycykucHVzaC5hcHBseShfY29sb3JzLCBfdG9Db25zdW1hYmxlQXJyYXkocm90YXRpb24pKTtcbiAgICAgIH07XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm90YXRpb25zOyBpKyspIHtcbiAgICAgICAgX2xvb3AoaSk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNvbG9ycyA9IGJhc2U7XG4gIH1cblxuICByZXR1cm4gY29sb3JzO1xufTtcbi8qKlxuICogQ29sb3IgYmxpbmQgcGFsZXR0ZSB3aXRoIHRleHQgaXMgbWVhbnQgZm9yIHVzZSB3aGVuIHRleHQgaXMgYXBwbGllZCBvbiB0b3Agb2YgdGhlIGNvbG9yLlxuICogSXQgaW5jcmVhc2VzIHRoZSBicmlnaHRuZXNzIG9mIHRoZSBjb2xvciB0byBnaXZlIHRoZSB0ZXh0IG1vcmUgY29udHJhc3QuXG4gKi9cblxuZXhwb3J0IHZhciBldWlQYWxldHRlQ29sb3JCbGluZEJlaGluZFRleHQgPSBmdW5jdGlvbiBldWlQYWxldHRlQ29sb3JCbGluZEJlaGluZFRleHQoKSB7XG4gIHZhciBwYWxldHRlUHJvcHMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICB2YXIgb3JpZ2luYWxQYWxldHRlID0gZXVpUGFsZXR0ZUNvbG9yQmxpbmQocGFsZXR0ZVByb3BzKTtcbiAgdmFyIG5ld1BhbGV0dGUgPSBvcmlnaW5hbFBhbGV0dGUubWFwKGZ1bmN0aW9uIChjb2xvcikge1xuICAgIHJldHVybiBjaHJvbWEoY29sb3IpLmJyaWdodGVuKDAuNSkuaGV4KCk7XG4gIH0pO1xuICByZXR1cm4gbmV3UGFsZXR0ZTtcbn07XG5leHBvcnQgdmFyIGV1aVBhbGV0dGVGb3JMaWdodEJhY2tncm91bmQgPSBmdW5jdGlvbiBldWlQYWxldHRlRm9yTGlnaHRCYWNrZ3JvdW5kKCkge1xuICByZXR1cm4gWycjMDA2QkI0JywgJyMwMTdENzMnLCAnI0Y1QTcwMCcsICcjQkQyNzFFJywgJyNERDBBNzMnXTtcbn07XG5leHBvcnQgdmFyIGV1aVBhbGV0dGVGb3JEYXJrQmFja2dyb3VuZCA9IGZ1bmN0aW9uIGV1aVBhbGV0dGVGb3JEYXJrQmFja2dyb3VuZCgpIHtcbiAgcmV0dXJuIFsnIzFCQTlGNScsICcjN0RFMkQxJywgJyNGOTkwQzAnLCAnI0Y2NicsICcjRkZDRTdBJ107XG59O1xudmFyIHBvc2l0aXZlQ29sb3IgPSAnIzIwOTI4MCc7XG52YXIgbmVnYXRpdmVDb2xvciA9ICcjQ0M1NjQyJztcbnZhciBsaWdodE5lZ2F0aXZlQ29sb3IgPSBldWlQYWxldHRlQ29sb3JCbGluZCgpWzldO1xudmFyIGNvb2xBcnJheSA9IFtldWlQYWxldHRlQ29sb3JCbGluZCgpWzFdLCAnIzYwOTJDMCddO1xudmFyIHdhcm1BcnJheSA9IFtldWlQYWxldHRlQ29sb3JCbGluZCgpWzddLCBldWlQYWxldHRlQ29sb3JCbGluZCgpWzldXTtcbmV4cG9ydCB2YXIgZXVpUGFsZXR0ZUZvclN0YXR1cyA9IGZ1bmN0aW9uIGV1aVBhbGV0dGVGb3JTdGF0dXMoc3RlcHMpIHtcbiAgaWYgKHN0ZXBzID09PSAxKSB7XG4gICAgcmV0dXJuIFtwb3NpdGl2ZUNvbG9yXTtcbiAgfVxuXG4gIGlmIChzdGVwcyA8PSAzKSB7XG4gICAgcmV0dXJuIGV1aVBhbGV0dGUoW3Bvc2l0aXZlQ29sb3IsIGV1aVBhbGV0dGVDb2xvckJsaW5kKClbNV0sIG5lZ2F0aXZlQ29sb3JdLCBzdGVwcywgdHJ1ZSk7XG4gIH1cblxuICByZXR1cm4gZXVpUGFsZXR0ZShbcG9zaXRpdmVDb2xvciwgZXVpUGFsZXR0ZUNvbG9yQmxpbmQoKVswXSwgZXVpUGFsZXR0ZUNvbG9yQmxpbmQoKVs1XSwgbGlnaHROZWdhdGl2ZUNvbG9yLCBuZWdhdGl2ZUNvbG9yXSwgc3RlcHMsIHRydWUpO1xufTtcbmV4cG9ydCB2YXIgZXVpUGFsZXR0ZUZvclRlbXBlcmF0dXJlID0gZnVuY3Rpb24gZXVpUGFsZXR0ZUZvclRlbXBlcmF0dXJlKHN0ZXBzKSB7XG4gIHZhciBjb29scyA9IGNvbG9yUGFsZXR0ZShbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGNvb2xBcnJheS5zbGljZSgpLnJldmVyc2UoKSksIFsnI0VCRUZGNSddKSwgMyk7XG4gIHZhciB3YXJtcyA9IGNvbG9yUGFsZXR0ZShbJyNGNEYzREInXS5jb25jYXQod2FybUFycmF5KSwgMyk7XG5cbiAgaWYgKHN0ZXBzID09PSAxKSB7XG4gICAgcmV0dXJuIFtjb29sc1swXV07XG4gIH0gZWxzZSBpZiAoc3RlcHMgPD0gMykge1xuICAgIHJldHVybiBldWlQYWxldHRlKFtjb29sc1swXSwgbGlnaHROZWdhdGl2ZUNvbG9yXSwgc3RlcHMsIHRydWUpO1xuICB9XG5cbiAgcmV0dXJuIGV1aVBhbGV0dGUoW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShjb29scyksIF90b0NvbnN1bWFibGVBcnJheSh3YXJtcykpLCBzdGVwcywgdHJ1ZSk7XG59O1xuZXhwb3J0IHZhciBldWlQYWxldHRlQ29tcGxpbWVudGFyeSA9IGZ1bmN0aW9uIGV1aVBhbGV0dGVDb21wbGltZW50YXJ5KHN0ZXBzKSB7XG4gIGlmIChzdGVwcyA9PT0gMSkge1xuICAgIHJldHVybiBbZXVpUGFsZXR0ZUNvbG9yQmxpbmQoKVsxXV07XG4gIH1cblxuICByZXR1cm4gZXVpUGFsZXR0ZShbZXVpUGFsZXR0ZUNvbG9yQmxpbmQoKVsxXSwgZXVpUGFsZXR0ZUNvbG9yQmxpbmQoKVs3XV0sIHN0ZXBzLCB0cnVlKTtcbn07XG5leHBvcnQgdmFyIGV1aVBhbGV0dGVOZWdhdGl2ZSA9IGZ1bmN0aW9uIGV1aVBhbGV0dGVOZWdhdGl2ZShzdGVwcykge1xuICBpZiAoc3RlcHMgPT09IDEpIHtcbiAgICByZXR1cm4gW2xpZ2h0TmVnYXRpdmVDb2xvcl07XG4gIH1cblxuICByZXR1cm4gZXVpUGFsZXR0ZShbJ3doaXRlJywgbmVnYXRpdmVDb2xvcl0sIHN0ZXBzKTtcbn07XG5leHBvcnQgdmFyIGV1aVBhbGV0dGVQb3NpdGl2ZSA9IGZ1bmN0aW9uIGV1aVBhbGV0dGVQb3NpdGl2ZShzdGVwcykge1xuICBpZiAoc3RlcHMgPT09IDEpIHtcbiAgICByZXR1cm4gW2V1aVBhbGV0dGVDb2xvckJsaW5kKClbMF1dO1xuICB9XG5cbiAgcmV0dXJuIGV1aVBhbGV0dGUoWyd3aGl0ZScsIHBvc2l0aXZlQ29sb3JdLCBzdGVwcyk7XG59O1xuZXhwb3J0IHZhciBldWlQYWxldHRlQ29vbCA9IGZ1bmN0aW9uIGV1aVBhbGV0dGVDb29sKHN0ZXBzKSB7XG4gIGlmIChzdGVwcyA9PT0gMSkge1xuICAgIHJldHVybiBbY29vbEFycmF5WzFdXTtcbiAgfVxuXG4gIHJldHVybiBldWlQYWxldHRlKFsnd2hpdGUnXS5jb25jYXQoY29vbEFycmF5KSwgc3RlcHMpO1xufTtcbmV4cG9ydCB2YXIgZXVpUGFsZXR0ZVdhcm0gPSBmdW5jdGlvbiBldWlQYWxldHRlV2FybShzdGVwcykge1xuICBpZiAoc3RlcHMgPT09IDEpIHtcbiAgICByZXR1cm4gW2xpZ2h0TmVnYXRpdmVDb2xvcl07XG4gIH1cblxuICByZXR1cm4gZXVpUGFsZXR0ZShbJyNGQkZCREMnXS5jb25jYXQod2FybUFycmF5KSwgc3RlcHMpO1xufTtcbmV4cG9ydCB2YXIgZXVpUGFsZXR0ZUdyYXkgPSBmdW5jdGlvbiBldWlQYWxldHRlR3JheShzdGVwcykge1xuICBpZiAoc3RlcHMgPT09IDEpIHtcbiAgICByZXR1cm4gWycjOThhMmIzJ107XG4gIH1cblxuICByZXR1cm4gZXVpUGFsZXR0ZShbJ3doaXRlJywgJyNkM2RhZTYnLCAnIzk4YTJiMycsICcjNjk3MDdkJywgJyMzNDM3NDEnXSwgc3RlcHMsIGZhbHNlKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgY2hyb21hIGZyb20gJ2Nocm9tYS1qcyc7XG5leHBvcnQgdmFyIE1JRF9DT0xPUl9TVE9QID0gJyNFQkVGRjUnO1xuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHRha2VzIGFuIGFycmF5IG9mIGNvbG9ycyBhbmQgcmV0dXJucyBhbiBhcnJheSBvZiBpbnRlcnBvbGF0ZWRcbiAqIGNvbG9ycyBiYXNlZCBvbiB0aGUgbnVtYmVyIG9mIHN0ZXBzL2xlbiBuZWVkZWQgZm9yIHVzZSBpbiBVSSBlbGVtZW50cyBzdWNoIGFzIGNoYXJ0cy5cbiAqIERlcml2ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZ2thL3BhbGV0dGVzIChVbmxpY2Vuc2VkKVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjb2xvclBhbGV0dGUoXG4vKipcbiAqIFRoZSBtYWluIGNvbG9yIGNvZGUgb3IgYXJyYXkgb2YgY29kZXNcbiAqL1xuY29sb3JzKSB7XG4gIHZhciBsZW4gPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IDEwO1xuICB2YXIgZGl2ZXJnaW5nID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBmYWxzZTtcbiAgdmFyIGNhdGVnb3JpY2FsID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiBmYWxzZTtcbiAgdmFyIGhleFN0YXJ0ID0gY29sb3JzLnNsaWNlKCk7XG4gIHZhciBoZXhFbmQgPSBbXTtcbiAgdmFyIGV2ZW4gPSBsZW4gJSAyID09PSAwO1xuICB2YXIgbnVtQ29sb3JzTGVmdCA9IGRpdmVyZ2luZyA/IE1hdGguY2VpbChsZW4gLyAyKSArIChldmVuID8gMSA6IDApIDogbGVuO1xuICB2YXIgbnVtQ29sb3JzUmlnaHQgPSBkaXZlcmdpbmcgPyBNYXRoLmNlaWwobGVuIC8gMikgKyAoZXZlbiA/IDEgOiAwKSA6IDA7IC8vIElmIG9ubHkgYSBzaW5nbGUgY29sb3IgaXMgcHJvdmlkZWQgcHJlcGVuZCB0aGUgbWlkLXBvaW50IGNvbG9yXG5cbiAgaWYgKGhleFN0YXJ0Lmxlbmd0aCA9PT0gMSkge1xuICAgIGhleFN0YXJ0LnVuc2hpZnQoTUlEX0NPTE9SX1NUT1ApO1xuICB9IC8vIElmIGRpdmVyZ2luZywgc3BsaXQgdGhlIHN0YXJ0IGFycmF5IGFuZCBkdXBsaWNhdGUgdGhlIG1pZCBjb2xvclxuXG5cbiAgaWYgKGRpdmVyZ2luZykge1xuICAgIC8vIElmIHRoZXJlJ3Mgbm8gbWlkcG9pbnQsIGNyZWF0ZSBvbmVcbiAgICBpZiAoaGV4U3RhcnQubGVuZ3RoIDwgMykge1xuICAgICAgaGV4U3RhcnRbMl0gPSBoZXhTdGFydFsxXTtcbiAgICAgIGhleFN0YXJ0WzFdID0gTUlEX0NPTE9SX1NUT1A7XG4gICAgfVxuXG4gICAgdmFyIG51bUNvbG9yc0hhbGYgPSBNYXRoLmNlaWwoaGV4U3RhcnQubGVuZ3RoIC8gMik7XG4gICAgdmFyIGNvbG9yc0xlZnQgPSBoZXhTdGFydC5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0sIGluZGV4KSB7XG4gICAgICBpZiAoaW5kZXggPCBudW1Db2xvcnNIYWxmKSB7XG4gICAgICAgIHJldHVybiB0cnVlOyAvLyBrZWVwIGl0XG4gICAgICB9XG4gICAgfSk7XG4gICAgdmFyIGNvbG9yc1JpZ2h0ID0gaGV4U3RhcnQucmV2ZXJzZSgpLmZpbHRlcihmdW5jdGlvbiAoaXRlbSwgaW5kZXgpIHtcbiAgICAgIGlmIChpbmRleCA8IG51bUNvbG9yc0hhbGYpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7IC8vIGtlZXAgaXRcbiAgICAgIH1cbiAgICB9KS5yZXZlcnNlKCk7XG4gICAgaGV4U3RhcnQgPSBjb2xvcnNMZWZ0O1xuICAgIGhleEVuZCA9IGNvbG9yc1JpZ2h0O1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlU3RlcHMoY29sb3JzLCBzdGVwcykge1xuICAgIGlmICghY29sb3JzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGNvbG9ycztcbiAgICB9XG5cbiAgICBpZiAoIWNhdGVnb3JpY2FsKSB7XG4gICAgICByZXR1cm4gY2hyb21hLmJlemllcihjb2xvcnMpLnNjYWxlKCkuY29ycmVjdExpZ2h0bmVzcygpLmNvbG9ycyhzdGVwcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBjaHJvbWEuc2NhbGUoY29sb3JzKS5jb2xvcnMoc3RlcHMpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBzdGVwc0xlZnQgPSBjcmVhdGVTdGVwcyhoZXhTdGFydCwgbnVtQ29sb3JzTGVmdCk7XG4gIHZhciBzdGVwc1JpZ2h0ID0gY3JlYXRlU3RlcHMoaGV4RW5kLCBudW1Db2xvcnNSaWdodCk7XG4gIHJldHVybiAoZXZlbiAmJiBkaXZlcmdpbmcgPyBzdGVwc0xlZnQuc2xpY2UoMCwgc3RlcHNMZWZ0Lmxlbmd0aCAtIDEpIDogc3RlcHNMZWZ0KS5jb25jYXQoc3RlcHNSaWdodC5zbGljZSgxKSk7XG59IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgY2hyb21hIGZyb20gJ2Nocm9tYS1qcyc7XG5pbXBvcnQgeyBpc1ZhbGlkSGV4IH0gZnJvbSAnLi9pc192YWxpZF9oZXgnO1xuXG52YXIgaW5PcmlnaW5hbEZvcm1hdCA9IGZ1bmN0aW9uIGluT3JpZ2luYWxGb3JtYXQob3JpZ2luYWxDb2xvciwgbmV3Q29sb3IpIHtcbiAgcmV0dXJuIGlzVmFsaWRIZXgob3JpZ2luYWxDb2xvcikgPyBuZXdDb2xvci5oZXgoKSA6IG5ld0NvbG9yLmNzcygpO1xufTtcbi8qKlxuICogTWFrZXMgYSBjb2xvciBtb3JlIHRyYW5zcGFyZW50LlxuICogQHBhcmFtIGNvbG9yIC0gQ29sb3IgdG8gbWFuaXB1bGF0ZVxuICogQHBhcmFtIGFscGhhIC0gYWxwaGEgY2hhbm5lbCB2YWx1ZS4gRnJvbSAwLTEuXG4gKi9cblxuXG5leHBvcnQgdmFyIHRyYW5zcGFyZW50aXplID0gZnVuY3Rpb24gdHJhbnNwYXJlbnRpemUoY29sb3IsIGFscGhhKSB7XG4gIHJldHVybiBjaHJvbWEoY29sb3IpLmFscGhhKGFscGhhKS5jc3MoKTtcbn07XG4vKipcbiAqIE1peGVzIGEgcHJvdmlkZWQgY29sb3Igd2l0aCB3aGl0ZS5cbiAqIEBwYXJhbSBjb2xvciAtIENvbG9yIHRvIG1peCB3aXRoIHdoaXRlXG4gKiBAcGFyYW0gcmF0aW8gLSBNaXggd2VpZ2h0LiBGcm9tIDAtMS4gTGFyZ2VyIHZhbHVlIGluZGljYXRlcyBtb3JlIHdoaXRlLlxuICovXG5cbmV4cG9ydCB2YXIgdGludCA9IGZ1bmN0aW9uIHRpbnQoY29sb3IsIHJhdGlvKSB7XG4gIHZhciB0aW50ID0gY2hyb21hLm1peChjb2xvciwgJyNmZmYnLCByYXRpbywgJ3JnYicpO1xuICByZXR1cm4gaW5PcmlnaW5hbEZvcm1hdChjb2xvciwgdGludCk7XG59O1xuLyoqXG4gKiBNaXhlcyBhIHByb3ZpZGVkIGNvbG9yIHdpdGggYmxhY2suXG4gKiBAcGFyYW0gY29sb3IgLSBDb2xvciB0byBtaXggd2l0aCBibGFja1xuICogQHBhcmFtIHJhdGlvIC0gTWl4IHdlaWdodC4gRnJvbSAwLTEuIExhcmdlciB2YWx1ZSBpbmRpY2F0ZXMgbW9yZSBibGFjay5cbiAqL1xuXG5leHBvcnQgdmFyIHNoYWRlID0gZnVuY3Rpb24gc2hhZGUoY29sb3IsIHJhdGlvKSB7XG4gIHZhciBzaGFkZSA9IGNocm9tYS5taXgoY29sb3IsICcjMDAwJywgcmF0aW8sICdyZ2InKTtcbiAgcmV0dXJuIGluT3JpZ2luYWxGb3JtYXQoY29sb3IsIHNoYWRlKTtcbn07XG4vKipcbiAqIFJldHVybnMgdGhlIHRpbnRlZCBjb2xvciBmb3IgbGlnaHQgbW9kZSBhbmQgc2hhZGVkIGNvbG9yIGZvciBkYXJrIG1vZGVcbiAqIEBwYXJhbSBjb2xvciAtIENvbG9yIHRvIG1peCB3aXRoIHdoaXRlXG4gKiBAcGFyYW0gcmF0aW8gLSBNaXggd2VpZ2h0LiBGcm9tIDAtMS4gTGFyZ2VyIHZhbHVlIGluZGljYXRlcyBtb3JlIHdoaXRlLlxuICogQHBhcmFtIGNvbG9yTW9kZSAtIExpZ2h0IG9yIGRhcmsgb25seVxuICovXG5cbmV4cG9ydCB2YXIgdGludE9yU2hhZGUgPSBmdW5jdGlvbiB0aW50T3JTaGFkZShjb2xvciwgcmF0aW8sIGNvbG9yTW9kZSkge1xuICByZXR1cm4gY29sb3JNb2RlID09PSAnREFSSycgPyBzaGFkZShjb2xvciwgcmF0aW8pIDogdGludChjb2xvciwgcmF0aW8pO1xufTtcbi8qKlxuICogUmV0dXJucyB0aGUgc2hhZGVkIGNvbG9yIGZvciBsaWdodCBtb2RlIGFuZCB0aW50ZWQgY29sb3IgZm9yIGRhcmsgbW9kZVxuICogQHBhcmFtIGNvbG9yIC0gQ29sb3IgdG8gbWl4IHdpdGggd2hpdGVcbiAqIEBwYXJhbSByYXRpbyAtIE1peCB3ZWlnaHQuIEZyb20gMC0xLiBMYXJnZXIgdmFsdWUgaW5kaWNhdGVzIG1vcmUgd2hpdGUuXG4gKiBAcGFyYW0gY29sb3JNb2RlIC0gTGlnaHQgb3IgZGFyayBvbmx5XG4gKi9cblxuZXhwb3J0IHZhciBzaGFkZU9yVGludCA9IGZ1bmN0aW9uIHNoYWRlT3JUaW50KGNvbG9yLCByYXRpbywgY29sb3JNb2RlKSB7XG4gIHJldHVybiBjb2xvck1vZGUgPT09ICdEQVJLJyA/IHRpbnQoY29sb3IsIHJhdGlvKSA6IHNoYWRlKGNvbG9yLCByYXRpbyk7XG59O1xuLyoqXG4gKiBJbmNyZWFzZXMgdGhlIHNhdHVyYXRpb24gb2YgYSBjb2xvciBieSBtYW5pcHVsYXRpbmcgdGhlIGhzbCBzYXR1cmF0aW9uLlxuICogQHBhcmFtIGNvbG9yIC0gQ29sb3IgdG8gbWFuaXB1bGF0ZVxuICogQHBhcmFtIGFtb3VudCAtIEFtb3VudCB0byBjaGFuZ2UgaW4gYWJzb2x1dGUgdGVybXMuIDAtMS5cbiAqL1xuXG5leHBvcnQgdmFyIHNhdHVyYXRlID0gZnVuY3Rpb24gc2F0dXJhdGUoY29sb3IsIGFtb3VudCkge1xuICB2YXIgc2F0dXJhdGUgPSBjaHJvbWEoY29sb3IpLnNldCgnaHNsLnMnLCBcIitcIi5jb25jYXQoYW1vdW50KSk7XG4gIHJldHVybiBpbk9yaWdpbmFsRm9ybWF0KGNvbG9yLCBzYXR1cmF0ZSk7XG59O1xuLyoqXG4gKiBEZWNyZWFzZXMgdGhlIHNhdHVyYXRpb24gb2YgYSBjb2xvciBieSBtYW5pcHVsYXRpbmcgdGhlIGhzbCBzYXR1cmF0aW9uLlxuICogQHBhcmFtIGNvbG9yIC0gQ29sb3IgdG8gbWFuaXB1bGF0ZVxuICogQHBhcmFtIGFtb3VudCAtIEFtb3VudCB0byBjaGFuZ2UgaW4gYWJzb2x1dGUgdGVybXMuIDAtMS5cbiAqL1xuXG5leHBvcnQgdmFyIGRlc2F0dXJhdGUgPSBmdW5jdGlvbiBkZXNhdHVyYXRlKGNvbG9yLCBhbW91bnQpIHtcbiAgdmFyIGRlc2F0dXJhdGUgPSBjaHJvbWEoY29sb3IpLnNldCgnaHNsLnMnLCBcIi1cIi5jb25jYXQoYW1vdW50KSk7XG4gIHJldHVybiBpbk9yaWdpbmFsRm9ybWF0KGNvbG9yLCBkZXNhdHVyYXRlKTtcbn07XG4vKipcbiAqIFJldHVybnMgdGhlIGxpZ2h0bmVzcyB2YWx1ZSBvZiBhIGNvbG9yLiAwLTEwMFxuICogQHBhcmFtIGNvbG9yXG4gKi9cblxuZXhwb3J0IHZhciBsaWdodG5lc3MgPSBmdW5jdGlvbiBsaWdodG5lc3MoY29sb3IpIHtcbiAgcmV0dXJuIGNocm9tYShjb2xvcikuZ2V0KCdoc2wubCcpICogMTAwO1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IGNocm9tYSBmcm9tICdjaHJvbWEtanMnO1xuaW1wb3J0IHsgc2hhZGUsIHRpbnQsIGxpZ2h0bmVzcyBhcyBnZXRMaWdodG5lc3MgfSBmcm9tICcuL21hbmlwdWxhdGlvbic7XG5pbXBvcnQgeyBnZXRPbiB9IGZyb20gJy4uL3RoZW1lL3V0aWxzJztcbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBjb2xvciB0aGF0IG1lZXRzIG9yIGV4Y2VlZHMgV0NBRyBsZXZlbCBBQVxuICogQHBhcmFtIGZvcmVncm91bmQgLSBDb2xvciB0byBtYW5pcHVsYXRlXG4gKiBAcGFyYW0gcmF0aW8gLSBBbW91bnQgdG8gY2hhbmdlIGluIGFic29sdXRlIHRlcm1zLiAwLTEwLlxuICogKlxuICogQHBhcmFtIHRoZW1lT3JCYWNrZ3JvdW5kIC0gQ29sb3IgdG8gdXNlIGFzIHRoZSBjb250cmFzdCBiYXNpcyBvciBqdXN0IHBhc3MgRXVpVGhlbWVcbiAqL1xuXG5leHBvcnQgdmFyIG1ha2VIaWdoQ29udHJhc3RDb2xvciA9IGZ1bmN0aW9uIG1ha2VIaWdoQ29udHJhc3RDb2xvcihfZm9yZWdyb3VuZCkge1xuICB2YXIgcmF0aW8gPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IDQuODU7XG4gIHJldHVybiBmdW5jdGlvbiAodGhlbWVPckJhY2tncm91bmQpIHtcbiAgICB2YXIgX2dldE9uO1xuXG4gICAgdmFyIGZvcmVncm91bmQgPSBfdHlwZW9mKHRoZW1lT3JCYWNrZ3JvdW5kKSA9PT0gJ29iamVjdCcgPyAoX2dldE9uID0gZ2V0T24odGhlbWVPckJhY2tncm91bmQsIF9mb3JlZ3JvdW5kKSkgIT09IG51bGwgJiYgX2dldE9uICE9PSB2b2lkIDAgPyBfZ2V0T24gOiBfZm9yZWdyb3VuZCA6IF9mb3JlZ3JvdW5kO1xuICAgIHZhciBiYWNrZ3JvdW5kID0gX3R5cGVvZih0aGVtZU9yQmFja2dyb3VuZCkgPT09ICdvYmplY3QnID8gdGhlbWVPckJhY2tncm91bmQuY29sb3JzLmJvZHkgOiB0aGVtZU9yQmFja2dyb3VuZDtcblxuICAgIGlmIChjaHJvbWEoZm9yZWdyb3VuZCkuYWxwaGEoKSA8IDEgfHwgY2hyb21hKGJhY2tncm91bmQpLmFscGhhKCkgPCAxKSB7XG4gICAgICBjb25zb2xlLndhcm4oXCJDb250cmFzdCBjYW5ub3QgYmUgYWNjdXJhdGVseSBjYWxjdWxhdGVkIHdoZW4gY29sb3JzIGhhdmUgYWxwaGEgY2hhbm5lbCBvcGFjaXR5LiBNYWtlIHN1cmUgdGhlIHByb3ZpZGVkIGZvcmVncm91bmQgYW5kIGJhY2tncm91bmQgY29sb3JzIGhhdmUgbm8gdHJhbnNwYXJlbmN5OlxcblxcbkZvcmVncm91bmQ6IFwiLmNvbmNhdChmb3JlZ3JvdW5kLCBcIlxcbkJhY2tncm91bmQ6IFwiKS5jb25jYXQoYmFja2dyb3VuZCkpO1xuICAgIH1cblxuICAgIHZhciBjb250cmFzdCA9IGNocm9tYS5jb250cmFzdChmb3JlZ3JvdW5kLCBiYWNrZ3JvdW5kKTsgLy8gRGV0ZXJtaW5lIHRoZSBsaWdodG5lc3MgZmFjdG9yIG9mIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIGZpcnN0IHRvXG4gICAgLy8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gc2hhZGUgb3IgdGludCB0aGUgZm9yZWdyb3VuZC5cblxuICAgIHZhciBicmlnaHRuZXNzID0gZ2V0TGlnaHRuZXNzKGJhY2tncm91bmQpO1xuICAgIHZhciBoaWdoQ29udHJhc3RUZXh0Q29sb3IgPSBmb3JlZ3JvdW5kO1xuXG4gICAgd2hpbGUgKGNvbnRyYXN0IDwgcmF0aW8pIHtcbiAgICAgIGlmIChicmlnaHRuZXNzID4gNTApIHtcbiAgICAgICAgaGlnaENvbnRyYXN0VGV4dENvbG9yID0gc2hhZGUoaGlnaENvbnRyYXN0VGV4dENvbG9yLCAwLjA1KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhpZ2hDb250cmFzdFRleHRDb2xvciA9IHRpbnQoaGlnaENvbnRyYXN0VGV4dENvbG9yLCAwLjA1KTtcbiAgICAgIH1cblxuICAgICAgY29udHJhc3QgPSBjaHJvbWEuY29udHJhc3QoaGlnaENvbnRyYXN0VGV4dENvbG9yLCBiYWNrZ3JvdW5kKTtcbiAgICAgIHZhciBsaWdodG5lc3MgPSBnZXRMaWdodG5lc3MoaGlnaENvbnRyYXN0VGV4dENvbG9yKTtcblxuICAgICAgaWYgKGxpZ2h0bmVzcyA8IDUpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdIaWdoIGVub3VnaCBjb250cmFzdCBjb3VsZCBub3QgYmUgZGV0ZXJtaW5lZC4gTW9zdCBsaWtlbHkgeW91ciBiYWNrZ3JvdW5kIGNvbG9yIGRvZXMgbm90IGFkanVzdCBmb3IgbGlnaHQgbW9kZS4nKTtcbiAgICAgICAgcmV0dXJuIGhpZ2hDb250cmFzdFRleHRDb2xvcjtcbiAgICAgIH1cblxuICAgICAgaWYgKGxpZ2h0bmVzcyA+IDk1KSB7XG4gICAgICAgIGNvbnNvbGUud2FybignSGlnaCBlbm91Z2ggY29udHJhc3QgY291bGQgbm90IGJlIGRldGVybWluZWQuIE1vc3QgbGlrZWx5IHlvdXIgYmFja2dyb3VuZCBjb2xvciBkb2VzIG5vdCBhZGp1c3QgZm9yIGRhcmsgbW9kZS4nKTtcbiAgICAgICAgcmV0dXJuIGhpZ2hDb250cmFzdFRleHRDb2xvcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY2hyb21hKGhpZ2hDb250cmFzdFRleHRDb2xvcikuaGV4KCk7XG4gIH07XG59O1xuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IGNvbG9yIHdpdGggaW5jcmVhc2VkIGNvbnRyYXN0XG4gKiBEaXNhYmxlZCBjb250ZW50IG9ubHkgbmVlZHMgYSBjb250cmFzdCBvZiBhdCBsZWFzdCAyIGJlY2F1c2UgdGhlcmUgaXMgbm8gaW50ZXJhY3Rpb24gYXZhaWxhYmxlXG4gKiBAcGFyYW0gZm9yZWdyb3VuZCAtIENvbG9yIHRvIG1hbmlwdWxhdGVcbiAqIEBwYXJhbSByYXRpbyAtIEFtb3VudCB0byBjaGFuZ2UgaW4gYWJzb2x1dGUgdGVybXMuIDAtMTAuXG4gKiAqXG4gKiBAcGFyYW0gdGhlbWVPckJhY2tncm91bmQgLSBDb2xvciB0byB1c2UgYXMgdGhlIGNvbnRyYXN0IGJhc2lzXG4gKi9cblxuZXhwb3J0IHZhciBtYWtlRGlzYWJsZWRDb250cmFzdENvbG9yID0gZnVuY3Rpb24gbWFrZURpc2FibGVkQ29udHJhc3RDb2xvcihjb2xvcikge1xuICB2YXIgcmF0aW8gPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IDI7XG4gIHJldHVybiBmdW5jdGlvbiAodGhlbWVPckJhY2tncm91bmQpIHtcbiAgICByZXR1cm4gbWFrZUhpZ2hDb250cmFzdENvbG9yKGNvbG9yLCByYXRpbykodGhlbWVPckJhY2tncm91bmQpO1xuICB9O1xufTsiLCAiZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgeyB2YXIgX2kgPSBhcnIgPT0gbnVsbCA/IG51bGwgOiB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGFycltTeW1ib2wuaXRlcmF0b3JdIHx8IGFycltcIkBAaXRlcmF0b3JcIl07IGlmIChfaSA9PSBudWxsKSByZXR1cm47IHZhciBfYXJyID0gW107IHZhciBfbiA9IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIgX3MsIF9lOyB0cnkgeyBmb3IgKF9pID0gX2kuY2FsbChhcnIpOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7IF9hcnIucHVzaChfcy52YWx1ZSk7IGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhazsgfSB9IGNhdGNoIChlcnIpIHsgX2QgPSB0cnVlOyBfZSA9IGVycjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSAhPSBudWxsKSBfaVtcInJldHVyblwiXSgpOyB9IGZpbmFsbHkgeyBpZiAoX2QpIHRocm93IF9lOyB9IH0gcmV0dXJuIF9hcnI7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBzaGFkZSwgdGludCB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL2NvbG9yJztcbmltcG9ydCB7IGNvbXB1dGVkIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvdGhlbWUvdXRpbHMnO1xuaW1wb3J0IHsgbWFrZUhpZ2hDb250cmFzdENvbG9yLCBtYWtlRGlzYWJsZWRDb250cmFzdENvbG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvY29sb3IvY29udHJhc3QnO1xuXG4vKlxuICogTElHSFQgVEhFTUVcbiAqIE9ubHkgc3BsaXQgdXAgaW4gdGhlIGxpZ2h0IHRoZW1lIHRvIGFjY2VzcyB0aGUga2V5cyBieSBzZWN0aW9uIGluIHRoZSBkb2NzXG4gKi9cbmV4cG9ydCB2YXIgYnJhbmRfY29sb3JzID0ge1xuICBwcmltYXJ5OiAnIzA3QycsXG4gIGFjY2VudDogJyNGMDRFOTgnLFxuICBzdWNjZXNzOiAnIzAwQkZCMycsXG4gIHdhcm5pbmc6ICcjRkVDNTE0JyxcbiAgZGFuZ2VyOiAnI0JEMjcxRSdcbn07XG5leHBvcnQgdmFyIGJyYW5kX3RleHRfY29sb3JzID0ge1xuICBwcmltYXJ5VGV4dDogY29tcHV0ZWQobWFrZUhpZ2hDb250cmFzdENvbG9yKCdjb2xvcnMucHJpbWFyeScpKSxcbiAgYWNjZW50VGV4dDogY29tcHV0ZWQobWFrZUhpZ2hDb250cmFzdENvbG9yKCdjb2xvcnMuYWNjZW50JykpLFxuICBzdWNjZXNzVGV4dDogY29tcHV0ZWQobWFrZUhpZ2hDb250cmFzdENvbG9yKCdjb2xvcnMuc3VjY2VzcycpKSxcbiAgd2FybmluZ1RleHQ6IGNvbXB1dGVkKG1ha2VIaWdoQ29udHJhc3RDb2xvcignY29sb3JzLndhcm5pbmcnKSksXG4gIGRhbmdlclRleHQ6IGNvbXB1dGVkKG1ha2VIaWdoQ29udHJhc3RDb2xvcignY29sb3JzLmRhbmdlcicpKVxufTtcbmV4cG9ydCB2YXIgc2hhZGVfY29sb3JzID0ge1xuICBlbXB0eVNoYWRlOiAnI0ZGRicsXG4gIGxpZ2h0ZXN0U2hhZGU6ICcjRjFGNEZBJyxcbiAgbGlnaHRTaGFkZTogJyNEM0RBRTYnLFxuICBtZWRpdW1TaGFkZTogJyM5OEEyQjMnLFxuICBkYXJrU2hhZGU6ICcjNjk3MDdEJyxcbiAgZGFya2VzdFNoYWRlOiAnIzM0Mzc0MScsXG4gIGZ1bGxTaGFkZTogJyMwMDAnXG59O1xuZXhwb3J0IHZhciBzcGVjaWFsX2NvbG9ycyA9IHtcbiAgYm9keTogY29tcHV0ZWQoZnVuY3Rpb24gKF9yZWYpIHtcbiAgICB2YXIgX3JlZjIgPSBfc2xpY2VkVG9BcnJheShfcmVmLCAxKSxcbiAgICAgICAgbGlnaHRlc3RTaGFkZSA9IF9yZWYyWzBdO1xuXG4gICAgcmV0dXJuIHRpbnQobGlnaHRlc3RTaGFkZSwgMC40KTtcbiAgfSwgWydjb2xvcnMubGlnaHRlc3RTaGFkZSddKSxcbiAgaGlnaGxpZ2h0OiBjb21wdXRlZChmdW5jdGlvbiAoX3JlZjMpIHtcbiAgICB2YXIgX3JlZjQgPSBfc2xpY2VkVG9BcnJheShfcmVmMywgMSksXG4gICAgICAgIHdhcm5pbmcgPSBfcmVmNFswXTtcblxuICAgIHJldHVybiB0aW50KHdhcm5pbmcsIDAuOSk7XG4gIH0sIFsnY29sb3JzLndhcm5pbmcnXSksXG4gIGRpc2FibGVkOiAnI0FCQjRDNCcsXG4gIGRpc2FibGVkVGV4dDogY29tcHV0ZWQobWFrZURpc2FibGVkQ29udHJhc3RDb2xvcignY29sb3JzLmRpc2FibGVkJykpLFxuICBzaGFkb3c6IGNvbXB1dGVkKGZ1bmN0aW9uIChfcmVmNSkge1xuICAgIHZhciBjb2xvcnMgPSBfcmVmNS5jb2xvcnM7XG4gICAgcmV0dXJuIGNvbG9ycy5pbms7XG4gIH0pXG59O1xuZXhwb3J0IHZhciB0ZXh0X2NvbG9ycyA9IHtcbiAgdGV4dDogY29tcHV0ZWQoZnVuY3Rpb24gKF9yZWY2KSB7XG4gICAgdmFyIF9yZWY3ID0gX3NsaWNlZFRvQXJyYXkoX3JlZjYsIDEpLFxuICAgICAgICBkYXJrZXN0U2hhZGUgPSBfcmVmN1swXTtcblxuICAgIHJldHVybiBkYXJrZXN0U2hhZGU7XG4gIH0sIFsnY29sb3JzLmRhcmtlc3RTaGFkZSddKSxcbiAgdGl0bGU6IGNvbXB1dGVkKGZ1bmN0aW9uIChfcmVmOCkge1xuICAgIHZhciBfcmVmOSA9IF9zbGljZWRUb0FycmF5KF9yZWY4LCAxKSxcbiAgICAgICAgdGV4dCA9IF9yZWY5WzBdO1xuXG4gICAgcmV0dXJuIHNoYWRlKHRleHQsIDAuNSk7XG4gIH0sIFsnY29sb3JzLnRleHQnXSksXG4gIHN1YmR1ZWRUZXh0OiBjb21wdXRlZChtYWtlSGlnaENvbnRyYXN0Q29sb3IoJ2NvbG9ycy5kYXJrU2hhZGUnKSksXG4gIGxpbms6IGNvbXB1dGVkKGZ1bmN0aW9uIChfcmVmMTApIHtcbiAgICB2YXIgX3JlZjExID0gX3NsaWNlZFRvQXJyYXkoX3JlZjEwLCAxKSxcbiAgICAgICAgcHJpbWFyeVRleHQgPSBfcmVmMTFbMF07XG5cbiAgICByZXR1cm4gcHJpbWFyeVRleHQ7XG4gIH0sIFsnY29sb3JzLnByaW1hcnlUZXh0J10pXG59O1xuZXhwb3J0IHZhciBsaWdodF9jb2xvcnMgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGJyYW5kX2NvbG9ycyksIHNoYWRlX2NvbG9ycyksIHNwZWNpYWxfY29sb3JzKSwgYnJhbmRfdGV4dF9jb2xvcnMpLCB0ZXh0X2NvbG9ycyk7XG4vKlxuICogREFSSyBUSEVNRVxuICovXG5cbmV4cG9ydCB2YXIgZGFya19zaGFkZXMgPSB7XG4gIGVtcHR5U2hhZGU6ICcjMUQxRTI0JyxcbiAgbGlnaHRlc3RTaGFkZTogJyMyNTI2MkUnLFxuICBsaWdodFNoYWRlOiAnIzM0Mzc0MScsXG4gIG1lZGl1bVNoYWRlOiAnIzUzNTk2NicsXG4gIGRhcmtTaGFkZTogJyM5OEEyQjMnLFxuICBkYXJrZXN0U2hhZGU6ICcjRDREQUU1JyxcbiAgZnVsbFNoYWRlOiAnI0ZGRidcbn07XG5leHBvcnQgdmFyIGRhcmtfY29sb3JzX2FtcyA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHtcbiAgLy8gQnJhbmRcbiAgcHJpbWFyeTogJyMzNkEyRUYnLFxuICBhY2NlbnQ6ICcjRjY4RkJFJyxcbiAgc3VjY2VzczogJyM3RERFRDgnLFxuICB3YXJuaW5nOiAnI0YzRDM3MScsXG4gIGRhbmdlcjogJyNGODZCNjMnXG59LCBkYXJrX3NoYWRlcyksIHt9LCB7XG4gIC8vIFNwZWNpYWxcbiAgYm9keTogY29tcHV0ZWQoZnVuY3Rpb24gKF9yZWYxMikge1xuICAgIHZhciBfcmVmMTMgPSBfc2xpY2VkVG9BcnJheShfcmVmMTIsIDEpLFxuICAgICAgICBsaWdodGVzdFNoYWRlID0gX3JlZjEzWzBdO1xuXG4gICAgcmV0dXJuIHNoYWRlKGxpZ2h0ZXN0U2hhZGUsIDAuNDUpO1xuICB9LCBbJ2NvbG9ycy5saWdodGVzdFNoYWRlJ10pLFxuICBoaWdobGlnaHQ6ICcjMkUyRDI1JyxcbiAgZGlzYWJsZWQ6ICcjNTE1NzYxJyxcbiAgZGlzYWJsZWRUZXh0OiBjb21wdXRlZChtYWtlRGlzYWJsZWRDb250cmFzdENvbG9yKCdjb2xvcnMuZGlzYWJsZWQnKSksXG4gIHNoYWRvdzogY29tcHV0ZWQoZnVuY3Rpb24gKF9yZWYxNCkge1xuICAgIHZhciBjb2xvcnMgPSBfcmVmMTQuY29sb3JzO1xuICAgIHJldHVybiBjb2xvcnMuaW5rO1xuICB9KVxufSwgYnJhbmRfdGV4dF9jb2xvcnMpLCB7fSwge1xuICAvLyBUZXh0XG4gIHRleHQ6ICcjREZFNUVGJyxcbiAgdGl0bGU6IGNvbXB1dGVkKGZ1bmN0aW9uIChfcmVmMTUpIHtcbiAgICB2YXIgX3JlZjE2ID0gX3NsaWNlZFRvQXJyYXkoX3JlZjE1LCAxKSxcbiAgICAgICAgdGV4dCA9IF9yZWYxNlswXTtcblxuICAgIHJldHVybiB0ZXh0O1xuICB9LCBbJ2NvbG9ycy50ZXh0J10pLFxuICBzdWJkdWVkVGV4dDogY29tcHV0ZWQobWFrZUhpZ2hDb250cmFzdENvbG9yKCdjb2xvcnMubWVkaXVtU2hhZGUnKSksXG4gIGxpbms6IGNvbXB1dGVkKGZ1bmN0aW9uIChfcmVmMTcpIHtcbiAgICB2YXIgX3JlZjE4ID0gX3NsaWNlZFRvQXJyYXkoX3JlZjE3LCAxKSxcbiAgICAgICAgcHJpbWFyeVRleHQgPSBfcmVmMThbMF07XG5cbiAgICByZXR1cm4gcHJpbWFyeVRleHQ7XG4gIH0sIFsnY29sb3JzLnByaW1hcnlUZXh0J10pXG59KTtcbi8qXG4gKiBGVUxMXG4gKi9cblxuZXhwb3J0IHZhciBjb2xvcnMgPSB7XG4gIGdob3N0OiAnI0ZGRicsXG4gIGluazogJyMwMDAnLFxuICBMSUdIVDogbGlnaHRfY29sb3JzLFxuICBEQVJLOiBkYXJrX2NvbG9yc19hbXNcbn07IiwgImZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmV4cG9ydCB2YXIgYW5pbWF0aW9uX3NwZWVkID0ge1xuICBleHRyYUZhc3Q6ICc5MG1zJyxcbiAgZmFzdDogJzE1MG1zJyxcbiAgbm9ybWFsOiAnMjUwbXMnLFxuICBzbG93OiAnMzUwbXMnLFxuICBleHRyYVNsb3c6ICc1MDBtcydcbn07XG5leHBvcnQgdmFyIGFuaW1hdGlvbl9lYXNlID0ge1xuICBib3VuY2U6ICdjdWJpYy1iZXppZXIoLjM0LCAxLjYxLCAuNywgMSknLFxuICByZXNpc3RhbmNlOiAnY3ViaWMtYmV6aWVyKC42OTQsIC4wNDgyLCAuMzM1LCAxKSdcbn07XG5leHBvcnQgdmFyIGFuaW1hdGlvbiA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgYW5pbWF0aW9uX3NwZWVkKSwgYW5pbWF0aW9uX2Vhc2UpOyIsICJmdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBrZXlzT2YgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2NvbW1vbic7XG4vKipcbiAqIEVVSSB1dGlsaXplcyBsb2dpY2FsIENTUyBwcm9wZXJ0aWVzIHRvIGVuYWJsZSBkaXJlY3Rpb25hbCB3cml0aW5nLW1vZGVzLlxuICogVG8gZW5jb3VyYWdlIHVzZSBvZiBsb2dpY2FsIHByb3BlcnRpZXMsIHdlIHByb3ZpZGUgYSBmZXcgaGVscGVyIHV0aWxpdGllcyB0b1xuICogY29udmVydCBjZXJ0YWluIGRpcmVjdGlvbmFsIHByb3BlcnRpZXMgdG8gbG9naWNhbCBwcm9wZXJ0aWVzLlxuICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL0NTU19Mb2dpY2FsX1Byb3BlcnRpZXNcbiAqL1xuXG5leHBvcnQgdmFyIGxvZ2ljYWxTaWRlID0ge1xuICBsZWZ0OiAnaW5saW5lLXN0YXJ0JyxcbiAgcmlnaHQ6ICdpbmxpbmUtZW5kJyxcbiAgdG9wOiAnYmxvY2stc3RhcnQnLFxuICBib3R0b206ICdibG9jay1lbmQnLFxuICBob3Jpem9udGFsOiAnaW5saW5lJyxcbiAgdmVydGljYWw6ICdibG9jaydcbn07XG5leHBvcnQgdmFyIExPR0lDQUxfU0lERVMgPSBrZXlzT2YobG9naWNhbFNpZGUpO1xudmFyIGxvZ2ljYWxNYXJnaW5zID0ge1xuICAnbWFyZ2luLWxlZnQnOiAnbWFyZ2luLWlubGluZS1zdGFydCcsXG4gICdtYXJnaW4tcmlnaHQnOiAnbWFyZ2luLWlubGluZS1lbmQnLFxuICAnbWFyZ2luLXRvcCc6ICdtYXJnaW4tYmxvY2stc3RhcnQnLFxuICAnbWFyZ2luLWJvdHRvbSc6ICdtYXJnaW4tYmxvY2stZW5kJyxcbiAgJ21hcmdpbi1ob3Jpem9udGFsJzogJ21hcmdpbi1pbmxpbmUnLFxuICAnbWFyZ2luLXZlcnRpY2FsJzogJ21hcmdpbi1ibG9jaydcbn07XG52YXIgbG9naWNhbFBhZGRpbmdzID0ge1xuICAncGFkZGluZy1sZWZ0JzogJ3BhZGRpbmctaW5saW5lLXN0YXJ0JyxcbiAgJ3BhZGRpbmctcmlnaHQnOiAncGFkZGluZy1pbmxpbmUtZW5kJyxcbiAgJ3BhZGRpbmctdG9wJzogJ3BhZGRpbmctYmxvY2stc3RhcnQnLFxuICAncGFkZGluZy1ib3R0b20nOiAncGFkZGluZy1ibG9jay1lbmQnLFxuICAncGFkZGluZy1ob3Jpem9udGFsJzogJ3BhZGRpbmctaW5saW5lJyxcbiAgJ3BhZGRpbmctdmVydGljYWwnOiAncGFkZGluZy1ibG9jaydcbn07XG52YXIgbG9naWNhbFBvc2l0aW9uID0ge1xuICB0b3A6ICdpbnNldC1ibG9jay1zdGFydCcsXG4gIHJpZ2h0OiAnaW5zZXQtaW5saW5lLWVuZCcsXG4gIGJvdHRvbTogJ2luc2V0LWJsb2NrLWVuZCcsXG4gIGxlZnQ6ICdpbnNldC1pbmxpbmUtc3RhcnQnLFxuICBob3Jpem9udGFsOiAnaW5zZXQtYmxvY2snLFxuICB2ZXJ0aWNhbDogJ2luc2V0LWlubGluZScsXG4gIGluc2V0OiAnaW5zZXQnXG59O1xudmFyIGxvZ2ljYWxTaXplID0ge1xuICBoZWlnaHQ6ICdibG9jay1zaXplJyxcbiAgd2lkdGg6ICdpbmxpbmUtc2l6ZScsXG4gICdtYXgtaGVpZ2h0JzogJ21heC1ibG9jay1zaXplJyxcbiAgJ21heC13aWR0aCc6ICdtYXgtaW5saW5lLXNpemUnLFxuICAnbWluLWhlaWdodCc6ICdtaW4tYmxvY2stc2l6ZScsXG4gICdtaW4td2lkdGgnOiAnbWluLWlubGluZS1zaXplJ1xufTtcbnZhciBsb2dpY2FsT3ZlcmZsb3cgPSB7XG4gICdvdmVyZmxvdy14JzogJ292ZXJmbG93LWJsb2NrJyxcbiAgJ292ZXJmbG93LXknOiAnb3ZlcmZsb3ctaW5saW5lJ1xufTtcbnZhciBsb2dpY2FsQm9yZGVycyA9IHtcbiAgJ2JvcmRlci1ob3Jpem9udGFsJzogJ2JvcmRlci1pbmxpbmUnLFxuICAnYm9yZGVyLWhvcml6b250YWwtY29sb3InOiAnYm9yZGVyLWlubGluZS1jb2xvcicsXG4gICdib3JkZXItaG9yaXpvbnRhbC13aWR0aCc6ICdib3JkZXItaW5saW5lLXdpZHRoJyxcbiAgJ2JvcmRlci1ob3Jpem9udGFsLXN0eWxlJzogJ2JvcmRlci1pbmxpbmUtc3R5bGUnLFxuICAnYm9yZGVyLXZlcnRpY2FsJzogJ2JvcmRlci1ibG9jaycsXG4gICdib3JkZXItdmVydGljYWwtY29sb3InOiAnYm9yZGVyLWJsb2NrLWNvbG9yJyxcbiAgJ2JvcmRlci12ZXJ0aWNhbC13aWR0aCc6ICdib3JkZXItYmxvY2std2lkdGgnLFxuICAnYm9yZGVyLXZlcnRpY2FsLXN0eWxlJzogJ2JvcmRlci1ibG9jay1zdHlsZScsXG4gICdib3JkZXItYm90dG9tJzogJ2JvcmRlci1ibG9jay1lbmQnLFxuICAnYm9yZGVyLWJvdHRvbS1jb2xvcic6ICdib3JkZXItYmxvY2stZW5kLWNvbG9yJyxcbiAgJ2JvcmRlci1ib3R0b20tc3R5bGUnOiAnYm9yZGVyLWJsb2NrLWVuZC1zdHlsZScsXG4gICdib3JkZXItYm90dG9tLXdpZHRoJzogJ2JvcmRlci1ibG9jay1lbmQtd2lkdGgnLFxuICAnYm9yZGVyLXRvcCc6ICdib3JkZXItYmxvY2stc3RhcnQnLFxuICAnYm9yZGVyLXRvcC1jb2xvcic6ICdib3JkZXItYmxvY2stc3RhcnQtY29sb3InLFxuICAnYm9yZGVyLXRvcC1zdHlsZSc6ICdib3JkZXItYmxvY2stc3RhcnQtc3R5bGUnLFxuICAnYm9yZGVyLXRvcC13aWR0aCc6ICdib3JkZXItYmxvY2stc3RhcnQtd2lkdGgnLFxuICAnYm9yZGVyLXJpZ2h0JzogJ2JvcmRlci1pbmxpbmUtZW5kJyxcbiAgJ2JvcmRlci1yaWdodC1jb2xvcic6ICdib3JkZXItaW5saW5lLWVuZC1jb2xvcicsXG4gICdib3JkZXItcmlnaHQtc3R5bGUnOiAnYm9yZGVyLWlubGluZS1lbmQtc3R5bGUnLFxuICAnYm9yZGVyLXJpZ2h0LXdpZHRoJzogJ2JvcmRlci1pbmxpbmUtZW5kLXdpZHRoJyxcbiAgJ2JvcmRlci1sZWZ0JzogJ2JvcmRlci1pbmxpbmUtc3RhcnQnLFxuICAnYm9yZGVyLWxlZnQtY29sb3InOiAnYm9yZGVyLWlubGluZS1zdGFydC1jb2xvcicsXG4gICdib3JkZXItbGVmdC1zdHlsZSc6ICdib3JkZXItaW5saW5lLXN0YXJ0LXN0eWxlJyxcbiAgJ2JvcmRlci1sZWZ0LXdpZHRoJzogJ2JvcmRlci1pbmxpbmUtc3RhcnQtd2lkdGgnLFxuICAnYm9yZGVyLXRvcC1sZWZ0LXJhZGl1cyc6ICdib3JkZXItc3RhcnQtc3RhcnQtcmFkaXVzJyxcbiAgJ2JvcmRlci10b3AtcmlnaHQtcmFkaXVzJzogJ2JvcmRlci1zdGFydC1lbmQtcmFkaXVzJyxcbiAgJ2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXMnOiAnYm9yZGVyLWVuZC1zdGFydC1yYWRpdXMnLFxuICAnYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXMnOiAnYm9yZGVyLWVuZC1lbmQtcmFkaXVzJ1xufTtcbmV4cG9ydCB2YXIgbG9naWNhbHMgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgbG9naWNhbE1hcmdpbnMpLCBsb2dpY2FsUGFkZGluZ3MpLCBsb2dpY2FsUG9zaXRpb24pLCBsb2dpY2FsU2l6ZSksIGxvZ2ljYWxPdmVyZmxvdyksIGxvZ2ljYWxCb3JkZXJzKTtcbmV4cG9ydCB2YXIgTE9HSUNBTF9QUk9QRVJUSUVTID0ga2V5c09mKGxvZ2ljYWxzKTtcblxuLyoqXG4gKlxuICogQHBhcmFtIHByb3BlcnR5IEEgc3RyaW5nIHRoYXQgaXMgYSB2YWxpZCBDU1MgbG9naWNhbCBwcm9wZXJ0eVxuICogQHBhcmFtIHZhbHVlIFN0cmluZyB0byBvdXRwdXQgYXMgdGhlIHByb3BlcnR5IHZhbHVlXG4gKiBAcmV0dXJucyBgc3RyaW5nYCBSZXR1cm5zIHRoZSBsb2dpY2FsIENTUyBwcm9wZXJ0eSB2ZXJzaW9uIGZvciB0aGUgZ2l2ZW4gYHByb3BlcnR5OiB2YWx1ZWAgcGFpclxuICovXG5leHBvcnQgdmFyIGxvZ2ljYWxDU1MgPSBmdW5jdGlvbiBsb2dpY2FsQ1NTKHByb3BlcnR5LCB2YWx1ZSkge1xuICByZXR1cm4gXCJcIi5jb25jYXQobG9naWNhbHNbcHJvcGVydHldLCBcIjogXCIpLmNvbmNhdCh2YWx1ZSwgXCI7XCIpO1xufTtcbi8qKlxuICpcbiAqIEBwYXJhbSBwcm9wZXJ0eSBBIHN0cmluZyB0aGF0IGlzIGEgdmFsaWQgQ1NTIGxvZ2ljYWwgcHJvcGVydHlcbiAqIEBwYXJhbSB2YWx1ZSBTdHJpbmcgdG8gb3V0cHV0IGFzIHRoZSBwcm9wZXJ0eSB2YWx1ZVxuICogQHJldHVybnMgYG9iamVjdGAgUmV0dXJucyB0aGUgbG9naWNhbCBDU1MgcHJvcGVydHkgdmVyc2lvbiBmb3IgdGhlIGdpdmVuIGBwcm9wZXJ0eTogdmFsdWVgIHBhaXJcbiAqL1xuXG5leHBvcnQgdmFyIGxvZ2ljYWxTdHlsZSA9IGZ1bmN0aW9uIGxvZ2ljYWxTdHlsZShwcm9wZXJ0eSwgdmFsdWUpIHtcbiAgLy8gU3RyaXAgaHlwaGVucyBhbmQgY2FtZWxDYXNlIHRoZSBDU1MgbG9naWNhbCBwcm9wZXJ0eSBzbyBSZWFjdCBkb2Vzbid0IHRocm93IGVycm9yc1xuICB2YXIgY2FtZWxDYXNlZFByb3BlcnR5ID0gbG9naWNhbHNbcHJvcGVydHldLnJlcGxhY2UoLy1cXHcvZywgZnVuY3Rpb24gKHN0cikge1xuICAgIHJldHVybiBzdHIuY2hhckF0KDEpLnRvVXBwZXJDYXNlKCk7XG4gIH0pO1xuICByZXR1cm4gX2RlZmluZVByb3BlcnR5KHt9LCBjYW1lbENhc2VkUHJvcGVydHksIFwiXCIuY29uY2F0KHZhbHVlKSk7XG59O1xuLyoqXG4gKlxuICogQHBhcmFtIHdpZHRoIEEgc3RyaW5nIHZhbHVlIGZvciB0aGUgTFRSIHdpZHRoXG4gKiBAcGFyYW0gaGVpZ2h0IEEgc3RyaW5nIHZhbHVlIGZvciB0aGUgTFRSIGhlaWdodFxuICogQHJldHVybnMgYHN0cmluZ2AgUmV0dXJucyB0aGUgbG9naWNhbCBDU1MgcHJvcGVydGllcyBmb3IgaGVpZ2h0IGFuZCB3aWR0aFxuICovXG5cbmV4cG9ydCB2YXIgbG9naWNhbFNpemVDU1MgPSBmdW5jdGlvbiBsb2dpY2FsU2l6ZUNTUyh3aWR0aCwgaGVpZ2h0KSB7XG4gIHJldHVybiBcIlxcbiAgICBcIi5jb25jYXQobG9naWNhbHMud2lkdGgsIFwiOiBcIikuY29uY2F0KHdpZHRoLCBcIjtcXG4gICAgXCIpLmNvbmNhdChsb2dpY2Fscy5oZWlnaHQsIFwiOiBcIikuY29uY2F0KGhlaWdodCwgXCI7XFxuICBcIik7XG59O1xuLyoqXG4gKlxuICogQHBhcmFtIHdpZHRoIEEgc3RyaW5nIHZhbHVlIGZvciB0aGUgTFRSIHdpZHRoXG4gKiBAcGFyYW0gaGVpZ2h0IEEgc3RyaW5nIHZhbHVlIGZvciB0aGUgTFRSIGhlaWdodFxuICogQHJldHVybnMgYG9iamVjdGAgUmV0dXJucyB0aGUgbG9naWNhbCBDU1MgcHJvcGVydGllcyBmb3IgaGVpZ2h0IGFuZCB3aWR0aFxuICovXG5cbmV4cG9ydCB2YXIgbG9naWNhbFNpemVTdHlsZSA9IGZ1bmN0aW9uIGxvZ2ljYWxTaXplU3R5bGUod2lkdGgsIGhlaWdodCkge1xuICB2YXIgX3JlZjI7XG5cbiAgcmV0dXJuIF9yZWYyID0ge30sIF9kZWZpbmVQcm9wZXJ0eShfcmVmMiwgbG9naWNhbHMud2lkdGgsIHdpZHRoKSwgX2RlZmluZVByb3BlcnR5KF9yZWYyLCBsb2dpY2Fscy5oZWlnaHQsIGhlaWdodCksIF9yZWYyO1xufTsgLy8gVGV4dCBhbGlnbm1lbnQgaXMgc2VwYXJhdGUgYmVjYXVzZSBpdHMgdGhlIHZhbHVlIHRoYXQgY2hhbmdlcyBub3QgdGhlIHByb3BlcnR5XG5cbmV4cG9ydCB2YXIgbG9naWNhbFRleHQgPSB7XG4gICd0ZXh0LWFsaWduJzoge1xuICAgIGxlZnQ6ICdzdGFydCcsXG4gICAgY2VudGVyOiAnY2VudGVyJyxcbiAgICByaWdodDogJ2VuZCdcbiAgfVxufTtcbmV4cG9ydCB2YXIgTE9HSUNBTF9URVhUX0FMSUdOTUVOVCA9IGtleXNPZihsb2dpY2FsVGV4dFsndGV4dC1hbGlnbiddKTtcblxuLyoqXG4gKlxuICogQHBhcmFtIHByb3BlcnR5IEEgc3RyaW5nIHRoYXQgaXMgYSB2YWxpZCBDU1MgbG9naWNhbCBwcm9wZXJ0eVxuICogQHBhcmFtIHZhbHVlIFN0cmluZyB0byBvdXRwdXQgYXMgdGhlIHByb3BlcnR5IHZhbHVlXG4gKiBAcmV0dXJucyBgc3RyaW5nYCBSZXR1cm5zIHRoZSBsb2dpY2FsIENTUyBwcm9wZXJ0eSB2ZXJzaW9uIGZvciB0aGUgZ2l2ZW4gYHByb3BlcnR5OiB2YWx1ZWAgcGFpclxuICovXG5leHBvcnQgdmFyIGxvZ2ljYWxUZXh0QWxpZ25DU1MgPSBmdW5jdGlvbiBsb2dpY2FsVGV4dEFsaWduQ1NTKHZhbHVlKSB7XG4gIHJldHVybiBcInRleHQtYWxpZ246IFwiLmNvbmNhdChsb2dpY2FsVGV4dFsndGV4dC1hbGlnbiddW3ZhbHVlXSwgXCI7XCIpO1xufTtcbi8qKlxuICpcbiAqIEBwYXJhbSBwcm9wZXJ0eSBBIHN0cmluZyB0aGF0IGlzIGEgdmFsaWQgQ1NTIGxvZ2ljYWwgcHJvcGVydHlcbiAqIEBwYXJhbSB2YWx1ZSBTdHJpbmcgdG8gb3V0cHV0IGFzIHRoZSBwcm9wZXJ0eSB2YWx1ZVxuICogQHJldHVybnMgYG9iamVjdGAgUmV0dXJucyB0aGUgbG9naWNhbCBDU1MgcHJvcGVydHkgdmVyc2lvbiBmb3IgdGhlIGdpdmVuIGBwcm9wZXJ0eTogdmFsdWVgIHBhaXJcbiAqL1xuXG5leHBvcnQgdmFyIGxvZ2ljYWxUZXh0QWxpZ25TdHlsZSA9IGZ1bmN0aW9uIGxvZ2ljYWxUZXh0QWxpZ25TdHlsZSh2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIHRleHRBbGlnbjogbG9naWNhbFRleHRbJ3RleHQtYWxpZ24nXVt2YWx1ZV1cbiAgfTtcbn07IiwgImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBgcHhgIHZhbHVlIGJhc2VkIG9uIGEgc2NhbGUgbXVsdGlwbGllclxuICogQHBhcmFtIHNjYWxlIC0gVGhlIGZvbnQgc2NhbGUgbXVsdGlwbGllclxuICogKlxuICogQHBhcmFtIHRoZW1lT3JCYXNlIC0gVGhlbWUgYmFzZSB2YWx1ZVxuICogKlxuICogQHJldHVybnMgc3RyaW5nIC0gUmVtIHVuaXQgYWxpZ25lZCB0byBiYXNlbGluZVxuICovXG5leHBvcnQgdmFyIHNpemVUb1BpeGVsID0gZnVuY3Rpb24gc2l6ZVRvUGl4ZWwoKSB7XG4gIHZhciBzY2FsZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogMTtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0aGVtZU9yQmFzZSkge1xuICAgIHZhciBiYXNlID0gX3R5cGVvZih0aGVtZU9yQmFzZSkgPT09ICdvYmplY3QnID8gdGhlbWVPckJhc2UuYmFzZSA6IHRoZW1lT3JCYXNlO1xuICAgIHJldHVybiBcIlwiLmNvbmNhdChiYXNlICogc2NhbGUsIFwicHhcIik7XG4gIH07XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGZvbnQtc2l6ZSB2YWx1ZSBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgc2NhbGUga2V5XG4gKiBAcGFyYW0gc2NhbGUgLSBUaGUgZm9udCBzY2FsZSBrZXlcbiAqIEBwYXJhbSB0aGVtZSAtIFJlcXVpcmVzIHRoZSBgYmFzZWAgYW5kIGBmb250YCBrZXlzXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIHBhcmFtZXRlcnMgLSBzZWUgX0ZvbnRTY2FsZU9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBzdHJpbmcgLSBDYWxjdWxhdGVkIGZvbnQtc2l6ZSB2YWx1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZXVpRm9udFNpemVGcm9tU2NhbGUoc2NhbGUsIF9yZWYpIHtcbiAgdmFyIGJhc2UgPSBfcmVmLmJhc2UsXG4gICAgICBmb250ID0gX3JlZi5mb250O1xuXG4gIHZhciBfcmVmMiA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDoge30sXG4gICAgICBfcmVmMiRtZWFzdXJlbWVudCA9IF9yZWYyLm1lYXN1cmVtZW50LFxuICAgICAgbWVhc3VyZW1lbnQgPSBfcmVmMiRtZWFzdXJlbWVudCA9PT0gdm9pZCAwID8gJ3JlbScgOiBfcmVmMiRtZWFzdXJlbWVudCxcbiAgICAgIGN1c3RvbVNjYWxlID0gX3JlZjIuY3VzdG9tU2NhbGU7XG5cbiAgaWYgKG1lYXN1cmVtZW50ID09PSAnZW0nKSB7XG4gICAgcmV0dXJuIFwiXCIuY29uY2F0KGZvbnQuc2NhbGVbc2NhbGVdLCBcImVtXCIpO1xuICB9XG5cbiAgdmFyIG51bWVyYXRvciA9IGJhc2UgKiBmb250LnNjYWxlW3NjYWxlXTtcbiAgaWYgKGN1c3RvbVNjYWxlKSBudW1lcmF0b3IgKj0gZm9udC5zY2FsZVtjdXN0b21TY2FsZV07XG4gIHZhciBkZW5vbWluYXRvciA9IGJhc2UgKiBmb250LnNjYWxlW2ZvbnQuYm9keS5zY2FsZV07XG4gIHJldHVybiBtZWFzdXJlbWVudCA9PT0gJ3B4JyA/IFwiXCIuY29uY2F0KG51bWVyYXRvciwgXCJweFwiKSA6IFwiXCIuY29uY2F0KChudW1lcmF0b3IgLyBkZW5vbWluYXRvcikudG9GaXhlZCg0KSwgXCJyZW1cIik7XG59XG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGxpbmUtaGVpZ2h0IHRvIHRoZSBjbG9zZXN0IG11bHRpcGxlIG9mIHRoZSBiYXNlbGluZVxuICogRVg6IEEgcHJvcGVyIGxpbmUtaGVpZ2h0IGZvciB0ZXh0IGlzIDEuNSB0aW1lcyB0aGUgZm9udC1zaXplLlxuICogICAgIElmIG91ciBiYXNlIGZvbnQgc2l6ZSAoZXVpRm9udFNpemUpIGlzIDE2LCBhbmQgb3VyIGJhc2VsaW5lIGlzIDQuIFRvIGVuc3VyZSB0aGVcbiAqICAgICB0ZXh0IHN0YXlzIG9uIHRoZSBiYXNlbGluZSwgd2UgcGFzcyBhIG11bHRpcGxpZXIgdG8gY2FsY3VsYXRlIGEgbGluZS1oZWlnaHQuXG4gKiBAcGFyYW0gc2NhbGUgLSBUaGUgZm9udCBzY2FsZSBrZXlcbiAqIEBwYXJhbSB0aGVtZSAtIFJlcXVpcmVzIHRoZSBgYmFzZWAgYW5kIGBmb250YCBrZXlzXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIHBhcmFtZXRlcnMgLSBzZWUgX0ZvbnRTY2FsZU9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBzdHJpbmcgLSBDYWxjdWxhdGVkIGxpbmUtaGVpZ2h0IHZhbHVlIGFsaWduZWQgdG8gYmFzZWxpbmVcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZXVpTGluZUhlaWdodEZyb21CYXNlbGluZShzY2FsZSwgX3JlZjMpIHtcbiAgdmFyIGJhc2UgPSBfcmVmMy5iYXNlLFxuICAgICAgZm9udCA9IF9yZWYzLmZvbnQ7XG5cbiAgdmFyIF9yZWY0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiB7fSxcbiAgICAgIF9yZWY0JG1lYXN1cmVtZW50ID0gX3JlZjQubWVhc3VyZW1lbnQsXG4gICAgICBtZWFzdXJlbWVudCA9IF9yZWY0JG1lYXN1cmVtZW50ID09PSB2b2lkIDAgPyAncmVtJyA6IF9yZWY0JG1lYXN1cmVtZW50LFxuICAgICAgY3VzdG9tU2NhbGUgPSBfcmVmNC5jdXN0b21TY2FsZTtcblxuICB2YXIgYmFzZWxpbmUgPSBmb250LmJhc2VsaW5lLFxuICAgICAgbGluZUhlaWdodE11bHRpcGxpZXIgPSBmb250LmxpbmVIZWlnaHRNdWx0aXBsaWVyO1xuICB2YXIgbnVtZXJhdG9yID0gYmFzZSAqIGZvbnQuc2NhbGVbc2NhbGVdO1xuICBpZiAoY3VzdG9tU2NhbGUpIG51bWVyYXRvciAqPSBmb250LnNjYWxlW2N1c3RvbVNjYWxlXTtcbiAgdmFyIGRlbm9taW5hdG9yID0gYmFzZSAqIGZvbnQuc2NhbGVbZm9udC5ib2R5LnNjYWxlXTtcblxuICB2YXIgX2xpbmVIZWlnaHRNdWx0aXBsaWVyID0gbnVtZXJhdG9yIDw9IGJhc2UgPyBsaW5lSGVpZ2h0TXVsdGlwbGllciA6IGxpbmVIZWlnaHRNdWx0aXBsaWVyICogMC44MzM7XG5cbiAgaWYgKG1lYXN1cmVtZW50ID09PSAnZW0nKSB7XG4gICAgLy8gRXZlbiB0aG91Z2ggdGhlIGxpbmUtaGVpZ2h0IHZpYSBgZW1gIGNhbm5vdCBiZSBkZXRlcm1pbmVkIGFnYWluc3QgdGhlIHBpeGVsIGJhc2VsaW5lIGdyaWQ7XG4gICAgLy8gd2Ugd2lsbCBhc3N1bWUgdGhhdCB0eXBpY2FsbHkgbGFyZ2VyIHNjYWxlIGZvbnQtc2l6ZXMgc2hvdWxkIGhhdmUgYSBzaG9ydGVyIGxpbmUtaGVpZ2h0O1xuICAgIHJldHVybiBfbGluZUhlaWdodE11bHRpcGxpZXIudG9GaXhlZCg0KS50b1N0cmluZygpO1xuICB9XG5cbiAgdmFyIHBpeGVsVmFsdWUgPSBNYXRoLmZsb29yKE1hdGgucm91bmQobnVtZXJhdG9yICogX2xpbmVIZWlnaHRNdWx0aXBsaWVyKSAvIGJhc2VsaW5lKSAqIGJhc2VsaW5lO1xuICByZXR1cm4gbWVhc3VyZW1lbnQgPT09ICdweCcgPyBcIlwiLmNvbmNhdChwaXhlbFZhbHVlLCBcInB4XCIpIDogXCJcIi5jb25jYXQoKHBpeGVsVmFsdWUgLyBkZW5vbWluYXRvcikudG9GaXhlZCg0KSwgXCJyZW1cIik7XG59XG4vKipcbiAqIFRleHQgd2VpZ2h0IHNoaWZ0aW5nXG4gKlxuICogV2hlbiBjaGFuZ2luZyB0aGUgZm9udC13ZWlnaHQgYmFzZWQgb24gdGhlIHN0YXRlIG9mIHRoZSBjb21wb25lbnQsXG4gKiB0aGlzIG1peGluIHdpbGwgZW5zdXJlIHRoYXQgdGhlIHNpemluZyBpcyBkZXBlbmRlbnQgb24gdGhlIGJvbGRlc3RcbiAqIHdlaWdodCBzbyBpdCBkb2Vzbid0IHNoaWZ0IHNpYmxpbmcgY29udGVudC5cbiAqL1xuXG5leHBvcnQgdmFyIGV1aVRleHRTaGlmdCA9IGZ1bmN0aW9uIGV1aVRleHRTaGlmdCgpIHtcbiAgdmFyIGZvbnRXZWlnaHQgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6ICdib2xkJztcbiAgdmFyIGF0dHJpYnV0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogJ2RhdGEtdGV4dCc7XG4gIHZhciBldWlUaGVtZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkO1xuICByZXR1cm4gXCJcXG4gICY6OmFmdGVyIHtcXG4gICAgZGlzcGxheTogYmxvY2s7XFxuICAgIGNvbnRlbnQ6IGF0dHIoXCIuY29uY2F0KGF0dHJpYnV0ZSwgXCIpO1xcbiAgICBmb250LXdlaWdodDogXCIpLmNvbmNhdChldWlUaGVtZS5mb250LndlaWdodFtmb250V2VpZ2h0XSwgXCI7XFxuICAgIGhlaWdodDogMDtcXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gICAgdmlzaWJpbGl0eTogaGlkZGVuO1xcbiAgfVwiKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBzaXplVG9QaXhlbCB9IGZyb20gJy4uLy4uLy4uLy4uL2dsb2JhbF9zdHlsaW5nL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBjb21wdXRlZCB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL3RoZW1lL3V0aWxzJztcbmV4cG9ydCB2YXIgYmFzZSA9IDE2O1xuZXhwb3J0IHZhciBzaXplID0ge1xuICB4eHM6IGNvbXB1dGVkKHNpemVUb1BpeGVsKDAuMTI1KSksXG4gIHhzOiBjb21wdXRlZChzaXplVG9QaXhlbCgwLjI1KSksXG4gIHM6IGNvbXB1dGVkKHNpemVUb1BpeGVsKDAuNSkpLFxuICBtOiBjb21wdXRlZChzaXplVG9QaXhlbCgwLjc1KSksXG4gIGJhc2U6IGNvbXB1dGVkKHNpemVUb1BpeGVsKCkpLFxuICBsOiBjb21wdXRlZChzaXplVG9QaXhlbCgxLjUpKSxcbiAgeGw6IGNvbXB1dGVkKHNpemVUb1BpeGVsKDIpKSxcbiAgeHhsOiBjb21wdXRlZChzaXplVG9QaXhlbCgyLjUpKSxcbiAgeHh4bDogY29tcHV0ZWQoc2l6ZVRvUGl4ZWwoMykpLFxuICB4eHh4bDogY29tcHV0ZWQoc2l6ZVRvUGl4ZWwoNCkpXG59OyIsICJmdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgeyB2YXIgX2kgPSBhcnIgPT0gbnVsbCA/IG51bGwgOiB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGFycltTeW1ib2wuaXRlcmF0b3JdIHx8IGFycltcIkBAaXRlcmF0b3JcIl07IGlmIChfaSA9PSBudWxsKSByZXR1cm47IHZhciBfYXJyID0gW107IHZhciBfbiA9IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIgX3MsIF9lOyB0cnkgeyBmb3IgKF9pID0gX2kuY2FsbChhcnIpOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7IF9hcnIucHVzaChfcy52YWx1ZSk7IGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhazsgfSB9IGNhdGNoIChlcnIpIHsgX2QgPSB0cnVlOyBfZSA9IGVycjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSAhPSBudWxsKSBfaVtcInJldHVyblwiXSgpOyB9IGZpbmFsbHkgeyBpZiAoX2QpIHRocm93IF9lOyB9IH0gcmV0dXJuIF9hcnI7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBzaXplVG9QaXhlbCB9IGZyb20gJy4uLy4uLy4uLy4uL2dsb2JhbF9zdHlsaW5nL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBjb21wdXRlZCB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL3RoZW1lL3V0aWxzJztcbmV4cG9ydCB2YXIgYm9yZGVyID0ge1xuICBjb2xvcjogY29tcHV0ZWQoZnVuY3Rpb24gKF9yZWYpIHtcbiAgICB2YXIgX3JlZjIgPSBfc2xpY2VkVG9BcnJheShfcmVmLCAxKSxcbiAgICAgICAgbGlnaHRTaGFkZSA9IF9yZWYyWzBdO1xuXG4gICAgcmV0dXJuIGxpZ2h0U2hhZGU7XG4gIH0sIFsnY29sb3JzLmxpZ2h0U2hhZGUnXSksXG4gIHdpZHRoOiB7XG4gICAgdGhpbjogJzFweCcsXG4gICAgdGhpY2s6ICcycHgnXG4gIH0sXG4gIHJhZGl1czoge1xuICAgIG1lZGl1bTogY29tcHV0ZWQoc2l6ZVRvUGl4ZWwoMC4zNzUpKSxcbiAgICBzbWFsbDogY29tcHV0ZWQoc2l6ZVRvUGl4ZWwoMC4yNSkpXG4gIH0sXG4gIHRoaW46IGNvbXB1dGVkKGZ1bmN0aW9uIChfcmVmMykge1xuICAgIHZhciBfcmVmNCA9IF9zbGljZWRUb0FycmF5KF9yZWYzLCAyKSxcbiAgICAgICAgd2lkdGggPSBfcmVmNFswXSxcbiAgICAgICAgY29sb3IgPSBfcmVmNFsxXTtcblxuICAgIHJldHVybiBcIlwiLmNvbmNhdCh3aWR0aC50aGluLCBcIiBzb2xpZCBcIikuY29uY2F0KGNvbG9yKTtcbiAgfSwgWydib3JkZXIud2lkdGgnLCAnYm9yZGVyLmNvbG9yJ10pLFxuICB0aGljazogY29tcHV0ZWQoZnVuY3Rpb24gKF9yZWY1KSB7XG4gICAgdmFyIF9yZWY2ID0gX3NsaWNlZFRvQXJyYXkoX3JlZjUsIDIpLFxuICAgICAgICB3aWR0aCA9IF9yZWY2WzBdLFxuICAgICAgICBjb2xvciA9IF9yZWY2WzFdO1xuXG4gICAgcmV0dXJuIFwiXCIuY29uY2F0KHdpZHRoLnRoaWNrLCBcIiBzb2xpZCBcIikuY29uY2F0KGNvbG9yKTtcbiAgfSwgWydib3JkZXIud2lkdGgnLCAnYm9yZGVyLmNvbG9yJ10pLFxuICBlZGl0YWJsZTogY29tcHV0ZWQoZnVuY3Rpb24gKF9yZWY3KSB7XG4gICAgdmFyIF9yZWY4ID0gX3NsaWNlZFRvQXJyYXkoX3JlZjcsIDIpLFxuICAgICAgICB3aWR0aCA9IF9yZWY4WzBdLFxuICAgICAgICBjb2xvciA9IF9yZWY4WzFdO1xuXG4gICAgcmV0dXJuIFwiXCIuY29uY2F0KHdpZHRoLnRoaWNrLCBcIiBkb3R0ZWQgXCIpLmNvbmNhdChjb2xvcik7XG4gIH0sIFsnYm9yZGVyLndpZHRoJywgJ2JvcmRlci5jb2xvciddKVxufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmV4cG9ydCB2YXIgbGV2ZWxzID0ge1xuICB0b2FzdDogOTAwMCxcbiAgbW9kYWw6IDgwMDAsXG4gIG1hc2s6IDYwMDAsXG4gIG5hdmlnYXRpb246IDYwMDAsXG4gIG1lbnU6IDIwMDAsXG4gIGhlYWRlcjogMTAwMCxcbiAgZmx5b3V0OiAxMDAwLFxuICBtYXNrQmVsb3dIZWFkZXI6IDEwMDAsXG4gIGNvbnRlbnQ6IDBcbn07IiwgImZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHsgdmFyIF9pID0gYXJyID09IG51bGwgPyBudWxsIDogdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBhcnJbU3ltYm9sLml0ZXJhdG9yXSB8fCBhcnJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAoX2kgPT0gbnVsbCkgcmV0dXJuOyB2YXIgX2FyciA9IFtdOyB2YXIgX24gPSB0cnVlOyB2YXIgX2QgPSBmYWxzZTsgdmFyIF9zLCBfZTsgdHJ5IHsgZm9yIChfaSA9IF9pLmNhbGwoYXJyKTsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkgeyBfYXJyLnB1c2goX3MudmFsdWUpOyBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7IH0gfSBjYXRjaCAoZXJyKSB7IF9kID0gdHJ1ZTsgX2UgPSBlcnI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTsgfSBmaW5hbGx5IHsgaWYgKF9kKSB0aHJvdyBfZTsgfSB9IHJldHVybiBfYXJyOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgY29tcHV0ZWQgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy90aGVtZS91dGlscyc7XG4vLyBUeXBvZ3JhcGhpYyBzY2FsZSAtLSBsb29zZWx5IGJhc2VkIG9uIE1ham9yIFRoaXJkICgxLjI1MClcbmV4cG9ydCB2YXIgZm9udFNjYWxlID0ge1xuICB4eHhzOiAwLjU2MjUsXG4gIHh4czogMC42ODc1LFxuICB4czogMC43NSxcbiAgczogMC44NzUsXG4gIG06IDEsXG4gIGw6IDEuMzc1LFxuICB4bDogMS42ODc1LFxuICB4eGw6IDIuMTI1XG59OyAvLyBGYW1pbGllcyAmIGJhc2UgZm9udCBzZXR0aW5nc1xuXG5leHBvcnQgdmFyIGZvbnRCYXNlID0ge1xuICBmYW1pbHk6IFwiJ0ludGVyJywgQmxpbmtNYWNTeXN0ZW1Gb250LCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmXCIsXG4gIGZhbWlseUNvZGU6IFwiJ1JvYm90byBNb25vJywgTWVubG8sIENvdXJpZXIsIG1vbm9zcGFjZVwiLFxuICBmYW1pbHlTZXJpZjogJ0dlb3JnaWEsIFRpbWVzLCBUaW1lcyBOZXcgUm9tYW4sIHNlcmlmJyxcbiAgLy8gQ2FyZWZ1bCB1c2luZyBsaWdhdHVyZXMuIENvZGUgZWRpdG9ycyBsaWtlIEFDRSB3aWxsIG9mdGVuIGVycm9yIGJlY2F1c2Ugb2Ygd2lkdGggY2FsY3VsYXRpb25zXG4gIGZlYXR1cmVTZXR0aW5nczogXCInY2FsdCcgMSwgJ2tlcm4nIDEsICdsaWdhJyAxXCIsXG4gIGJhc2VsaW5lOiBjb21wdXRlZChmdW5jdGlvbiAoX3JlZikge1xuICAgIHZhciBfcmVmMiA9IF9zbGljZWRUb0FycmF5KF9yZWYsIDEpLFxuICAgICAgICBiYXNlID0gX3JlZjJbMF07XG5cbiAgICByZXR1cm4gYmFzZSAvIDQ7XG4gIH0sIFsnYmFzZSddKSxcbiAgbGluZUhlaWdodE11bHRpcGxpZXI6IDEuNVxufTtcbmV4cG9ydCB2YXIgZm9udFdlaWdodCA9IHtcbiAgbGlnaHQ6IDMwMCxcbiAgcmVndWxhcjogNDAwLFxuICBtZWRpdW06IDUwMCxcbiAgc2VtaUJvbGQ6IDYwMCxcbiAgYm9sZDogNzAwXG59O1xuZXhwb3J0IHZhciBmb250ID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBmb250QmFzZSksIHt9LCB7XG4gIHNjYWxlOiBmb250U2NhbGUsXG4gIHdlaWdodDogZm9udFdlaWdodCxcbiAgYm9keToge1xuICAgIHNjYWxlOiAncycsXG4gICAgd2VpZ2h0OiAncmVndWxhcidcbiAgfSxcbiAgdGl0bGU6IHtcbiAgICB3ZWlnaHQ6ICdib2xkJ1xuICB9XG59KTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLyoqXG4gKiBOT1RFOiBUaGVzZSB3ZXJlIHF1aWNrIGNvbnZlcnNpb25zIG9mIHRoZWlyIFNhc3MgY291bnRlcnBhcnRzLlxuICogICAgICAgVGhlIGNvbW1lbnRlZCBvdXQga2V5cyBoYXZlIG5vdCBiZWVuIGVzdGFibGlzaGVkIGFzIG5lY2Vzc2FyeSB5ZXQuXG4gKi9cbmltcG9ydCB7IGNvbXB1dGVkIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvdGhlbWUvdXRpbHMnO1xuaW1wb3J0IHsgc2l6ZVRvUGl4ZWwgfSBmcm9tICcuLi8uLi8uLi8uLi9nbG9iYWxfc3R5bGluZy9mdW5jdGlvbnMvc2l6ZSc7XG5leHBvcnQgdmFyIGZvY3VzID0ge1xuICBjb2xvcjogJ2N1cnJlbnRDb2xvcicsXG4gIHdpZHRoOiBjb21wdXRlZChzaXplVG9QaXhlbCgwLjEyNSkpIC8vIHRyYW5zcGFyZW5jeTogeyBMSUdIVDogMC45LCBEQVJLOiAwLjcgfSxcbiAgLy8gYmFja2dyb3VuZENvbG9yOiBjb21wdXRlZCgoeyBjb2xvcnMsIGZvY3VzIH0pID0+XG4gIC8vICAgdHJhbnNwYXJlbnRpemUoY29sb3JzLnByaW1hcnksIGZvY3VzIS50cmFuc3BhcmVuY3kpXG4gIC8vICksXG4gIC8vIE91dGxpbmVcbiAgLy8gb3V0bGluZToge1xuICAvLyAgIG91dGxpbmU6IGNvbXB1dGVkKCh7IGZvY3VzIH0pID0+IGAke2ZvY3VzIS53aWR0aH0gc29saWQgJHtmb2N1cyEuY29sb3J9YCksXG4gIC8vIH0sXG5cbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBidWlsZFRoZW1lIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGhlbWUvdXRpbHMnO1xuaW1wb3J0IHsgY29sb3JzIH0gZnJvbSAnLi9nbG9iYWxfc3R5bGluZy92YXJpYWJsZXMvX2NvbG9ycyc7XG5pbXBvcnQgeyBhbmltYXRpb24gfSBmcm9tICcuL2dsb2JhbF9zdHlsaW5nL3ZhcmlhYmxlcy9fYW5pbWF0aW9uJztcbmltcG9ydCB7IGJyZWFrcG9pbnQgfSBmcm9tICcuL2dsb2JhbF9zdHlsaW5nL3ZhcmlhYmxlcy9fYnJlYWtwb2ludCc7XG5pbXBvcnQgeyBiYXNlLCBzaXplIH0gZnJvbSAnLi9nbG9iYWxfc3R5bGluZy92YXJpYWJsZXMvX3NpemUnO1xuaW1wb3J0IHsgYm9yZGVyIH0gZnJvbSAnLi9nbG9iYWxfc3R5bGluZy92YXJpYWJsZXMvX2JvcmRlcnMnO1xuaW1wb3J0IHsgbGV2ZWxzIH0gZnJvbSAnLi9nbG9iYWxfc3R5bGluZy92YXJpYWJsZXMvX2xldmVscyc7XG5pbXBvcnQgeyBmb250IH0gZnJvbSAnLi9nbG9iYWxfc3R5bGluZy92YXJpYWJsZXMvX3R5cG9ncmFwaHknO1xuaW1wb3J0IHsgZm9jdXMgfSBmcm9tICcuL2dsb2JhbF9zdHlsaW5nL3ZhcmlhYmxlcy9fc3RhdGVzJztcbmV4cG9ydCB2YXIgQU1TVEVSREFNX05BTUVfS0VZID0gJ0VVSV9USEVNRV9BTVNURVJEQU0nO1xuZXhwb3J0IHZhciBldWlUaGVtZUFtc3RlcmRhbSA9IHtcbiAgY29sb3JzOiBjb2xvcnMsXG4gIGJhc2U6IGJhc2UsXG4gIHNpemU6IHNpemUsXG4gIGJvcmRlcjogYm9yZGVyLFxuICBmb250OiBmb250LFxuICBhbmltYXRpb246IGFuaW1hdGlvbixcbiAgYnJlYWtwb2ludDogYnJlYWtwb2ludCxcbiAgbGV2ZWxzOiBsZXZlbHMsXG4gIGZvY3VzOiBmb2N1c1xufTtcbmV4cG9ydCB2YXIgRXVpVGhlbWVBbXN0ZXJkYW0gPSBidWlsZFRoZW1lKGV1aVRoZW1lQW1zdGVyZGFtLCBBTVNURVJEQU1fTkFNRV9LRVkpOyIsICJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYsIHVzZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBFdWlUaGVtZUNvbnRleHQsIEV1aU1vZGlmaWNhdGlvbnNDb250ZXh0LCBFdWlDb2xvck1vZGVDb250ZXh0IH0gZnJvbSAnLi9jb250ZXh0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIHVzZUV1aVRoZW1lID0gZnVuY3Rpb24gdXNlRXVpVGhlbWUoKSB7XG4gIHZhciB0aGVtZSA9IHVzZUNvbnRleHQoRXVpVGhlbWVDb250ZXh0KTtcbiAgdmFyIGNvbG9yTW9kZSA9IHVzZUNvbnRleHQoRXVpQ29sb3JNb2RlQ29udGV4dCk7XG4gIHZhciBtb2RpZmljYXRpb25zID0gdXNlQ29udGV4dChFdWlNb2RpZmljYXRpb25zQ29udGV4dCk7XG4gIHJldHVybiB7XG4gICAgZXVpVGhlbWU6IHRoZW1lLFxuICAgIGNvbG9yTW9kZTogY29sb3JNb2RlLFxuICAgIG1vZGlmaWNhdGlvbnM6IG1vZGlmaWNhdGlvbnNcbiAgfTtcbn07XG4vLyBQcm92aWRlIHRoZSBjb21wb25lbnQgcHJvcHMgaW50ZXJmYWNlIGFzIHRoZSBnZW5lcmljIHRvIGFsbG93IHRoZSBkb2NzIHByb3BzIHRhYmxlIHRvIHBvcHVsYXRlLlxuLy8gZS5nLiwgYGNvbnN0IEV1aUNvbXBvbmVudCA9IHdpdGhFdWlUaGVtZTxFdWlDb21wb25lbnRQcm9wcz4oX0V1aUNvbXBvbmVudClgXG5leHBvcnQgdmFyIHdpdGhFdWlUaGVtZSA9IGZ1bmN0aW9uIHdpdGhFdWlUaGVtZShDb21wb25lbnQpIHtcbiAgdmFyIGNvbXBvbmVudE5hbWUgPSBDb21wb25lbnQuZGlzcGxheU5hbWUgfHwgQ29tcG9uZW50Lm5hbWUgfHwgJ0NvbXBvbmVudFdpdGhUaGVtZSc7XG5cbiAgdmFyIFJlbmRlciA9IGZ1bmN0aW9uIFJlbmRlcihwcm9wcywgcmVmKSB7XG4gICAgdmFyIF91c2VFdWlUaGVtZSA9IHVzZUV1aVRoZW1lKCksXG4gICAgICAgIGV1aVRoZW1lID0gX3VzZUV1aVRoZW1lLmV1aVRoZW1lLFxuICAgICAgICBjb2xvck1vZGUgPSBfdXNlRXVpVGhlbWUuY29sb3JNb2RlLFxuICAgICAgICBtb2RpZmljYXRpb25zID0gX3VzZUV1aVRoZW1lLm1vZGlmaWNhdGlvbnM7XG5cbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChDb21wb25lbnQsIF9leHRlbmRzKHtcbiAgICAgIHRoZW1lOiB7XG4gICAgICAgIGV1aVRoZW1lOiBldWlUaGVtZSxcbiAgICAgICAgY29sb3JNb2RlOiBjb2xvck1vZGUsXG4gICAgICAgIG1vZGlmaWNhdGlvbnM6IG1vZGlmaWNhdGlvbnNcbiAgICAgIH0sXG4gICAgICByZWY6IHJlZlxuICAgIH0sIHByb3BzKSk7XG4gIH07XG5cbiAgdmFyIFdpdGhFdWlUaGVtZSA9IC8qI19fUFVSRV9fKi9mb3J3YXJkUmVmKFJlbmRlcik7XG4gIFdpdGhFdWlUaGVtZS5kaXNwbGF5TmFtZSA9IGNvbXBvbmVudE5hbWU7XG4gIHJldHVybiBXaXRoRXVpVGhlbWU7XG59OyIsICJmdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgeyB2YXIgX2kgPSBhcnIgPT0gbnVsbCA/IG51bGwgOiB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGFycltTeW1ib2wuaXRlcmF0b3JdIHx8IGFycltcIkBAaXRlcmF0b3JcIl07IGlmIChfaSA9PSBudWxsKSByZXR1cm47IHZhciBfYXJyID0gW107IHZhciBfbiA9IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIgX3MsIF9lOyB0cnkgeyBmb3IgKF9pID0gX2kuY2FsbChhcnIpOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7IF9hcnIucHVzaChfcy52YWx1ZSk7IGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhazsgfSB9IGNhdGNoIChlcnIpIHsgX2QgPSB0cnVlOyBfZSA9IGVycjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSAhPSBudWxsKSBfaVtcInJldHVyblwiXSgpOyB9IGZpbmFsbHkgeyBpZiAoX2QpIHRocm93IF9lOyB9IH0gcmV0dXJuIF9hcnI7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ29udGV4dCwgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IGlzRXF1YWwgZnJvbSAnbG9kYXNoL2lzRXF1YWwnO1xuaW1wb3J0IHsgRXVpU3lzdGVtQ29udGV4dCwgRXVpVGhlbWVDb250ZXh0LCBFdWlNb2RpZmljYXRpb25zQ29udGV4dCwgRXVpQ29sb3JNb2RlQ29udGV4dCB9IGZyb20gJy4vY29udGV4dCc7XG5pbXBvcnQgeyBidWlsZFRoZW1lLCBnZXRDb2xvck1vZGUsIGdldENvbXB1dGVkLCBtZXJnZURlZXAgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVRoZW1lUHJvdmlkZXIgPSBmdW5jdGlvbiBFdWlUaGVtZVByb3ZpZGVyKF9yZWYpIHtcbiAgdmFyIF9zeXN0ZW0gPSBfcmVmLnRoZW1lLFxuICAgICAgX2NvbG9yTW9kZSA9IF9yZWYuY29sb3JNb2RlLFxuICAgICAgX21vZGlmaWNhdGlvbnMgPSBfcmVmLm1vZGlmeSxcbiAgICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbjtcbiAgdmFyIHBhcmVudFN5c3RlbSA9IHVzZUNvbnRleHQoRXVpU3lzdGVtQ29udGV4dCk7XG4gIHZhciBwYXJlbnRNb2RpZmljYXRpb25zID0gdXNlQ29udGV4dChFdWlNb2RpZmljYXRpb25zQ29udGV4dCk7XG4gIHZhciBwYXJlbnRDb2xvck1vZGUgPSB1c2VDb250ZXh0KEV1aUNvbG9yTW9kZUNvbnRleHQpO1xuICB2YXIgcGFyZW50VGhlbWUgPSB1c2VDb250ZXh0KEV1aVRoZW1lQ29udGV4dCk7XG5cbiAgdmFyIF91c2VTdGF0ZSA9IHVzZVN0YXRlKF9zeXN0ZW0gfHwgcGFyZW50U3lzdGVtKSxcbiAgICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgICAgc3lzdGVtID0gX3VzZVN0YXRlMlswXSxcbiAgICAgIHNldFN5c3RlbSA9IF91c2VTdGF0ZTJbMV07XG5cbiAgdmFyIHByZXZTeXN0ZW1LZXkgPSB1c2VSZWYoc3lzdGVtLmtleSk7XG5cbiAgdmFyIF91c2VTdGF0ZTMgPSB1c2VTdGF0ZShtZXJnZURlZXAocGFyZW50TW9kaWZpY2F0aW9ucywgX21vZGlmaWNhdGlvbnMpKSxcbiAgICAgIF91c2VTdGF0ZTQgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUzLCAyKSxcbiAgICAgIG1vZGlmaWNhdGlvbnMgPSBfdXNlU3RhdGU0WzBdLFxuICAgICAgc2V0TW9kaWZpY2F0aW9ucyA9IF91c2VTdGF0ZTRbMV07XG5cbiAgdmFyIHByZXZNb2RpZmljYXRpb25zID0gdXNlUmVmKG1vZGlmaWNhdGlvbnMpO1xuXG4gIHZhciBfdXNlU3RhdGU1ID0gdXNlU3RhdGUoZ2V0Q29sb3JNb2RlKF9jb2xvck1vZGUsIHBhcmVudENvbG9yTW9kZSkpLFxuICAgICAgX3VzZVN0YXRlNiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZTUsIDIpLFxuICAgICAgY29sb3JNb2RlID0gX3VzZVN0YXRlNlswXSxcbiAgICAgIHNldENvbG9yTW9kZSA9IF91c2VTdGF0ZTZbMV07XG5cbiAgdmFyIHByZXZDb2xvck1vZGUgPSB1c2VSZWYoY29sb3JNb2RlKTtcbiAgdmFyIGlzUGFyZW50VGhlbWUgPSB1c2VSZWYocHJldlN5c3RlbUtleS5jdXJyZW50ID09PSBwYXJlbnRTeXN0ZW0ua2V5ICYmIGNvbG9yTW9kZSA9PT0gcGFyZW50Q29sb3JNb2RlICYmIGlzRXF1YWwocGFyZW50TW9kaWZpY2F0aW9ucywgbW9kaWZpY2F0aW9ucykpO1xuXG4gIHZhciBfdXNlU3RhdGU3ID0gdXNlU3RhdGUoaXNQYXJlbnRUaGVtZS5jdXJyZW50ICYmIE9iamVjdC5rZXlzKHBhcmVudFRoZW1lKS5sZW5ndGggPyBwYXJlbnRUaGVtZSA6IGdldENvbXB1dGVkKHN5c3RlbSwgYnVpbGRUaGVtZShtb2RpZmljYXRpb25zLCBcIl9cIi5jb25jYXQoc3lzdGVtLmtleSkpLCBjb2xvck1vZGUpKSxcbiAgICAgIF91c2VTdGF0ZTggPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGU3LCAyKSxcbiAgICAgIHRoZW1lID0gX3VzZVN0YXRlOFswXSxcbiAgICAgIHNldFRoZW1lID0gX3VzZVN0YXRlOFsxXTtcblxuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHZhciBuZXdTeXN0ZW0gPSBfc3lzdGVtIHx8IHBhcmVudFN5c3RlbTtcblxuICAgIGlmIChwcmV2U3lzdGVtS2V5LmN1cnJlbnQgIT09IG5ld1N5c3RlbS5rZXkpIHtcbiAgICAgIHNldFN5c3RlbShuZXdTeXN0ZW0pO1xuICAgICAgcHJldlN5c3RlbUtleS5jdXJyZW50ID0gbmV3U3lzdGVtLmtleTtcbiAgICAgIGlzUGFyZW50VGhlbWUuY3VycmVudCA9IGZhbHNlO1xuICAgIH1cbiAgfSwgW19zeXN0ZW0sIHBhcmVudFN5c3RlbV0pO1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHZhciBuZXdNb2RpZmljYXRpb25zID0gbWVyZ2VEZWVwKHBhcmVudE1vZGlmaWNhdGlvbnMsIF9tb2RpZmljYXRpb25zKTtcblxuICAgIGlmICghaXNFcXVhbChwcmV2TW9kaWZpY2F0aW9ucy5jdXJyZW50LCBuZXdNb2RpZmljYXRpb25zKSkge1xuICAgICAgc2V0TW9kaWZpY2F0aW9ucyhuZXdNb2RpZmljYXRpb25zKTtcbiAgICAgIHByZXZNb2RpZmljYXRpb25zLmN1cnJlbnQgPSBuZXdNb2RpZmljYXRpb25zO1xuICAgICAgaXNQYXJlbnRUaGVtZS5jdXJyZW50ID0gZmFsc2U7XG4gICAgfVxuICB9LCBbX21vZGlmaWNhdGlvbnMsIHBhcmVudE1vZGlmaWNhdGlvbnNdKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbmV3Q29sb3JNb2RlID0gZ2V0Q29sb3JNb2RlKF9jb2xvck1vZGUsIHBhcmVudENvbG9yTW9kZSk7XG5cbiAgICBpZiAoIWlzRXF1YWwobmV3Q29sb3JNb2RlLCBwcmV2Q29sb3JNb2RlLmN1cnJlbnQpKSB7XG4gICAgICBzZXRDb2xvck1vZGUobmV3Q29sb3JNb2RlKTtcbiAgICAgIHByZXZDb2xvck1vZGUuY3VycmVudCA9IG5ld0NvbG9yTW9kZTtcbiAgICAgIGlzUGFyZW50VGhlbWUuY3VycmVudCA9IGZhbHNlO1xuICAgIH1cbiAgfSwgW19jb2xvck1vZGUsIHBhcmVudENvbG9yTW9kZV0pO1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmICghaXNQYXJlbnRUaGVtZS5jdXJyZW50KSB7XG4gICAgICBzZXRUaGVtZShnZXRDb21wdXRlZChzeXN0ZW0sIGJ1aWxkVGhlbWUobW9kaWZpY2F0aW9ucywgXCJfXCIuY29uY2F0KHN5c3RlbS5rZXkpKSwgY29sb3JNb2RlKSk7XG4gICAgfVxuICB9LCBbY29sb3JNb2RlLCBzeXN0ZW0sIG1vZGlmaWNhdGlvbnNdKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpQ29sb3JNb2RlQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBjb2xvck1vZGVcbiAgfSwgX19fRW1vdGlvbkpTWChFdWlTeXN0ZW1Db250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IHN5c3RlbVxuICB9LCBfX19FbW90aW9uSlNYKEV1aU1vZGlmaWNhdGlvbnNDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IG1vZGlmaWNhdGlvbnNcbiAgfSwgX19fRW1vdGlvbkpTWChFdWlUaGVtZUNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogdGhlbWVcbiAgfSwgY2hpbGRyZW4pKSkpO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmV4cG9ydCB2YXIgdGhyb3R0bGUgPSBmdW5jdGlvbiB0aHJvdHRsZShmbikge1xuICB2YXIgd2FpdCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogNTA7XG4gIHZhciB0aW1lID0gRGF0ZS5ub3coKTtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGltZSArIHdhaXQgLSBEYXRlLm5vdygpIDwgMCkge1xuICAgICAgZm4uYXBwbHkodm9pZCAwLCBhcmd1bWVudHMpO1xuICAgICAgdGltZSA9IERhdGUubm93KCk7XG4gICAgfVxuICB9O1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IHVzZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBDdXJyZW50RXVpQnJlYWtwb2ludENvbnRleHQgfSBmcm9tICcuL2N1cnJlbnRfYnJlYWtwb2ludCc7XG4vKipcbiAqIEhvb2sgdXRpbCAvIHN5bnRhY3RpY2FsIHN1Z2FyIGZvciB1c2VDb250ZXh0KClcbiAqXG4gKiBUaGlzIGhvb2sgaXMgaW4gaXRzIG93biBzZXBhcmF0ZSBmaWxlIHRvIG1ha2UgbW9ja2luZyBpdFxuICogYXMgYSB0ZXN0ZW52IGVhc3kgZm9yIEplc3QgdW5pdCB0ZXN0c1xuICovXG5cbmV4cG9ydCB2YXIgdXNlQ3VycmVudEV1aUJyZWFrcG9pbnQgPSBmdW5jdGlvbiB1c2VDdXJyZW50RXVpQnJlYWtwb2ludCgpIHtcbiAgdmFyIGN1cnJlbnRCcmVha3BvaW50ID0gdXNlQ29udGV4dChDdXJyZW50RXVpQnJlYWtwb2ludENvbnRleHQpO1xuICByZXR1cm4gY3VycmVudEJyZWFrcG9pbnQ7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgdXNlQ3VycmVudEV1aUJyZWFrcG9pbnQgfSBmcm9tICcuL2N1cnJlbnRfYnJlYWtwb2ludF9ob29rJztcbi8qKlxuICogR2l2ZW4gdGhlIGN1cnJlbnQgd2luZG93LmlubmVyV2lkdGggYW5kIGFuIGFycmF5IG9mIGJyZWFrcG9pbnQga2V5cyxcbiAqIHRoaXMgaG9vayBzdG9yZXMgc3RhdGUgYW5kIHJldHVybnMgdHJ1ZSBvciBmYWxzZSBpZiB0aGUgd2luZG93LmlubmVyV2lkdGhcbiAqIGZhbGxzIHdpdGhpbiBhbnkgb2YgdGhlIG5hbWVkIGJyZWFrcG9pbnRzLlxuICpcbiAqIEBwYXJhbSB7X0V1aVRoZW1lQnJlYWtwb2ludFtdfSBzaXplcyBBbiBhcnJheSBvZiBuYW1lZCBFVUkgYnJlYWtwb2ludHNcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNSZXNwb25zaXZlIFNvbWUgY29tcG9uZW50cyBoYXZlIHRoZSBvcHRpb24gdG8gdHVybiBvZmYgcmVzcG9uc2l2ZSBiZWhhdmlvci5cbiAqICAgU2luY2UgaG9va3MgY2FuJ3QgYmUgY2FsbGVkIGNvbmRpdGlvbmFsbHksIGl0J3MgZWFzaWVyIHRvIHBhc3MgdGhlIGNvbmRpdGlvbiBpbnRvIHRoZSBob29rXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgY3VycmVudCBicmVha3BvaW50IG5hbWUgaXMgaW5jbHVkZWQgaW4gYHNpemVzYFxuICovXG5cbmV4cG9ydCB2YXIgdXNlSXNXaXRoaW5CcmVha3BvaW50cyA9IGZ1bmN0aW9uIHVzZUlzV2l0aGluQnJlYWtwb2ludHMoc2l6ZXMpIHtcbiAgdmFyIGlzUmVzcG9uc2l2ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogdHJ1ZTtcbiAgdmFyIGN1cnJlbnRCcmVha3BvaW50ID0gdXNlQ3VycmVudEV1aUJyZWFrcG9pbnQoKTtcbiAgcmV0dXJuIGN1cnJlbnRCcmVha3BvaW50ICYmIGlzUmVzcG9uc2l2ZSA/IHNpemVzLmluY2x1ZGVzKGN1cnJlbnRCcmVha3BvaW50KSA6IGZhbHNlO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLyoqXG4gKiBBIERPTSBub2RlLCBhIHNlbGVjdG9yIHN0cmluZyAod2hpY2ggd2lsbCBiZSBwYXNzZWQgdG9cbiAqIGBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKClgIHRvIGZpbmQgdGhlIERPTSBub2RlKSwgb3IgYSBmdW5jdGlvbiB0aGF0XG4gKiByZXR1cm5zIGEgRE9NIG5vZGUuXG4gKi9cbmV4cG9ydCB2YXIgZmluZEVsZW1lbnRCeVNlbGVjdG9yT3JSZWYgPSBmdW5jdGlvbiBmaW5kRWxlbWVudEJ5U2VsZWN0b3JPclJlZihlbGVtZW50VGFyZ2V0KSB7XG4gIHZhciBub2RlID0gZWxlbWVudFRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ID8gZWxlbWVudFRhcmdldCA6IG51bGw7XG5cbiAgaWYgKHR5cGVvZiBlbGVtZW50VGFyZ2V0ID09PSAnc3RyaW5nJykge1xuICAgIG5vZGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGVsZW1lbnRUYXJnZXQpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBlbGVtZW50VGFyZ2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgbm9kZSA9IGVsZW1lbnRUYXJnZXQoKTtcbiAgfVxuXG4gIHJldHVybiBub2RlO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmV4cG9ydCB2YXIgYWx3YXlzID0gZnVuY3Rpb24gYWx3YXlzKF92YWx1ZSkge1xuICByZXR1cm4gdHJ1ZTtcbn07XG5leHBvcnQgdmFyIG5ldmVyID0gZnVuY3Rpb24gbmV2ZXIoX3ZhbHVlKSB7XG4gIHJldHVybiBmYWxzZTtcbn07XG5leHBvcnQgdmFyIGlzVW5kZWZpbmVkID0gZnVuY3Rpb24gaXNVbmRlZmluZWQodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQ7XG59O1xuZXhwb3J0IHZhciBpc051bGwgPSBmdW5jdGlvbiBpc051bGwodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09PSBudWxsO1xufTtcbmV4cG9ydCB2YXIgaXNOaWwgPSBmdW5jdGlvbiBpc05pbCh2YWx1ZSkge1xuICByZXR1cm4gaXNVbmRlZmluZWQodmFsdWUpIHx8IGlzTnVsbCh2YWx1ZSk7XG59O1xuZXhwb3J0IHZhciBpc01vbWVudCA9IGZ1bmN0aW9uIGlzTW9tZW50KHZhbHVlKSB7XG4gIHJldHVybiBtb21lbnQuaXNNb21lbnQodmFsdWUpO1xufTtcbmV4cG9ydCB2YXIgaXNEYXRlID0gZnVuY3Rpb24gaXNEYXRlKHZhbHVlKSB7XG4gIHJldHVybiBtb21lbnQuaXNEYXRlKHZhbHVlKTtcbn07XG5leHBvcnQgdmFyIGlzRGF0ZUxpa2UgPSBmdW5jdGlvbiBpc0RhdGVMaWtlKHZhbHVlKSB7XG4gIHJldHVybiBpc01vbWVudCh2YWx1ZSkgfHwgaXNEYXRlKHZhbHVlKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgX2lzRnVuY3Rpb24gZnJvbSAnbG9kYXNoL2lzRnVuY3Rpb24nO1xuaW1wb3J0IF9pc0FycmF5IGZyb20gJ2xvZGFzaC9pc0FycmF5JztcbmltcG9ydCBfaXNTdHJpbmcgZnJvbSAnbG9kYXNoL2lzU3RyaW5nJztcbmltcG9ydCBfaXNCb29sZWFuIGZyb20gJ2xvZGFzaC9pc0Jvb2xlYW4nO1xuaW1wb3J0IF9pc051bWJlciBmcm9tICdsb2Rhc2gvaXNOdW1iZXInO1xuaW1wb3J0IF9pc05hTiBmcm9tICdsb2Rhc2gvaXNOYU4nO1xuaW1wb3J0IF9pc09iamVjdCBmcm9tICdsb2Rhc2gvaXNPYmplY3QnOyAvLyB3cmFwIHRoZSBsb2Rhc2ggZnVuY3Rpb25zIHRvIGF2b2lkIGhhdmluZyBsb2Rhc2gncyBUUyB0eXBlIGRlZmluaXRpb24gZnJvbSBiZWluZ1xuLy8gZXhwb3J0ZWQsIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIHRoZSBsb2Rhc2ggbmFtZXNwYWNlIGlmIG90aGVyIHZlcnNpb25zIGFyZSB1c2VkXG5cbmV4cG9ydCB2YXIgaXNGdW5jdGlvbiA9IGZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIF9pc0Z1bmN0aW9uKHZhbHVlKTtcbn07XG5leHBvcnQgdmFyIGlzQXJyYXkgPSBmdW5jdGlvbiBpc0FycmF5KHZhbHVlKSB7XG4gIHJldHVybiBfaXNBcnJheSh2YWx1ZSk7XG59O1xuZXhwb3J0IHZhciBpc1N0cmluZyA9IGZ1bmN0aW9uIGlzU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiBfaXNTdHJpbmcodmFsdWUpO1xufTtcbmV4cG9ydCB2YXIgaXNCb29sZWFuID0gZnVuY3Rpb24gaXNCb29sZWFuKHZhbHVlKSB7XG4gIHJldHVybiBfaXNCb29sZWFuKHZhbHVlKTtcbn07XG5leHBvcnQgdmFyIGlzTnVtYmVyID0gZnVuY3Rpb24gaXNOdW1iZXIodmFsdWUpIHtcbiAgcmV0dXJuIF9pc051bWJlcih2YWx1ZSk7XG59O1xuZXhwb3J0IHZhciBpc05hTiA9IGZ1bmN0aW9uIGlzTmFOKHZhbHVlKSB7XG4gIHJldHVybiBfaXNOYU4odmFsdWUpO1xufTtcbmV4cG9ydCB2YXIgaXNPYmplY3QgPSBmdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xuICByZXR1cm4gX2lzT2JqZWN0KHZhbHVlKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBpc05pbCB9IGZyb20gJy4uL3ByZWRpY2F0ZSc7XG5leHBvcnQgdmFyIGZvcm1hdEJvb2xlYW4gPSBmdW5jdGlvbiBmb3JtYXRCb29sZWFuKHZhbHVlKSB7XG4gIHZhciBfcmVmID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcbiAgICAgIF9yZWYkeWVzID0gX3JlZi55ZXMsXG4gICAgICB5ZXMgPSBfcmVmJHllcyA9PT0gdm9pZCAwID8gJ1llcycgOiBfcmVmJHllcyxcbiAgICAgIF9yZWYkbm8gPSBfcmVmLm5vLFxuICAgICAgbm8gPSBfcmVmJG5vID09PSB2b2lkIDAgPyAnTm8nIDogX3JlZiRubyxcbiAgICAgIF9yZWYkbmlsID0gX3JlZi5uaWwsXG4gICAgICBuaWwgPSBfcmVmJG5pbCA9PT0gdm9pZCAwID8gJycgOiBfcmVmJG5pbDtcblxuICBpZiAoaXNOaWwodmFsdWUpKSB7XG4gICAgcmV0dXJuIG5pbDtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZSA/IHllcyA6IG5vO1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBpc05pbCwgaXNGdW5jdGlvbiwgaXNTdHJpbmcgfSBmcm9tICcuLi9wcmVkaWNhdGUnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuXG52YXIgY2FsZW5kYXIgPSBmdW5jdGlvbiBjYWxlbmRhcih2YWx1ZSkge1xuICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gIHZhciByZWZUaW1lID0gb3B0aW9ucy5yZWZUaW1lO1xuICByZXR1cm4gbW9tZW50KHZhbHVlKS5jYWxlbmRhcihyZWZUaW1lLCBvcHRpb25zKTtcbn07XG5cbmV4cG9ydCB2YXIgZGF0ZUZvcm1hdEFsaWFzZXMgPSB7XG4gIGRhdGU6ICdEIE1NTSBZWVlZJyxcbiAgbG9uZ0RhdGU6ICdERCBNTU1NIFlZWVknLFxuICBzaG9ydERhdGU6ICdEIE1NTSBZWScsXG4gIGRhdGVUaW1lOiAnRCBNTU0gWVlZWSBISDptbScsXG4gIGxvbmdEYXRlVGltZTogJ0REIE1NTU0gWVlZWSBISDptbTpzcycsXG4gIHNob3J0RGF0ZVRpbWU6ICdEIE1NTSBZWSBISDptbScsXG4gIGRvYlNob3J0OiAnRG8gTU1NIFlZJyxcbiAgZG9iTG9uZzogJ0RvIE1NTU0gWVlZWScsXG4gIGlzbzg2MDE6ICdZWVlZLU1NLUREVEhIOm1tOnNzLlNTU1onLFxuICBjYWxlbmRhcjogY2FsZW5kYXIsXG4gIGNhbGVuZGFyRGF0ZVRpbWU6IGZ1bmN0aW9uIGNhbGVuZGFyRGF0ZVRpbWUodmFsdWUsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gY2FsZW5kYXIodmFsdWUsIF9vYmplY3RTcHJlYWQoe1xuICAgICAgc2FtZURheTogJ1tUb2RheSBhdF0gSDptbUEnLFxuICAgICAgbmV4dERheTogJ1tUb21vcnJvdyBhdF0gSDptbUEnLFxuICAgICAgbmV4dFdlZWs6ICdkZGRkIFthdF0gSDptbUEnLFxuICAgICAgbGFzdERheTogJ1tZZXN0ZXJkYXkgYXRdIEg6bW1BJyxcbiAgICAgIGxhc3RXZWVrOiAnW0xhc3RdIGRkZGQgW2F0XSBIOm1tQScsXG4gICAgICBzYW1lRWxzZTogJ0RvIE1NTSBZWVlZIFthdF0gSDptbUEnXG4gICAgfSwgb3B0aW9ucykpO1xuICB9LFxuICBjYWxlbmRhckRhdGU6IGZ1bmN0aW9uIGNhbGVuZGFyRGF0ZSh2YWx1ZSwgb3B0aW9ucykge1xuICAgIHJldHVybiBjYWxlbmRhcih2YWx1ZSwgX29iamVjdFNwcmVhZCh7XG4gICAgICBzYW1lRGF5OiAnW1RvZGF5XScsXG4gICAgICBuZXh0RGF5OiAnW1RvbW9ycm93XScsXG4gICAgICBuZXh0V2VlazogJ2RkZGQnLFxuICAgICAgbGFzdERheTogJ1tZZXN0ZXJkYXldJyxcbiAgICAgIGxhc3RXZWVrOiAnW0xhc3RdIGRkZGQnLFxuICAgICAgc2FtZUVsc2U6ICdEbyBNTU0gWVlZWSdcbiAgICB9LCBvcHRpb25zKSk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGlzU3RyaW5nQURhdGVGb3JtYXQoeCkge1xuICByZXR1cm4gZGF0ZUZvcm1hdEFsaWFzZXMuaGFzT3duUHJvcGVydHkoeCk7XG59XG5cbmZ1bmN0aW9uIGluc3RhbmNlT2ZGb3JtYXREYXRlQ29uZmlnKHgpIHtcbiAgcmV0dXJuIF90eXBlb2YoeCkgPT09ICdvYmplY3QnICYmICh4Lmhhc093blByb3BlcnR5KCdmb3JtYXQnKSB8fCB4Lmhhc093blByb3BlcnR5KCduaWwnKSB8fCB4Lmhhc093blByb3BlcnR5KCdvcHRpb25zJykpO1xufVxuXG5leHBvcnQgdmFyIGZvcm1hdERhdGUgPSBmdW5jdGlvbiBmb3JtYXREYXRlKHZhbHVlKSB7XG4gIHZhciBkYXRlRm9ybWF0S2V5T3JDb25maWcgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6ICdkYXRlVGltZSc7XG5cbiAgaWYgKGlzU3RyaW5nKGRhdGVGb3JtYXRLZXlPckNvbmZpZykpIHtcbiAgICBpZiAoaXNOaWwodmFsdWUpKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgdmFyIGRhdGVGb3JtYXRTdHJPckZ1bmMgPSBpc1N0cmluZ0FEYXRlRm9ybWF0KGRhdGVGb3JtYXRLZXlPckNvbmZpZykgPyBkYXRlRm9ybWF0QWxpYXNlc1tkYXRlRm9ybWF0S2V5T3JDb25maWddIDogZGF0ZUZvcm1hdEtleU9yQ29uZmlnO1xuXG4gICAgaWYgKGlzRnVuY3Rpb24oZGF0ZUZvcm1hdFN0ck9yRnVuYykpIHtcbiAgICAgIHJldHVybiBkYXRlRm9ybWF0U3RyT3JGdW5jKHZhbHVlLCB7fSk7XG4gICAgfVxuXG4gICAgaWYgKGlzU3RyaW5nKGRhdGVGb3JtYXRTdHJPckZ1bmMpKSB7XG4gICAgICByZXR1cm4gbW9tZW50KHZhbHVlKS5mb3JtYXQoZGF0ZUZvcm1hdFN0ck9yRnVuYyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGluc3RhbmNlT2ZGb3JtYXREYXRlQ29uZmlnKGRhdGVGb3JtYXRLZXlPckNvbmZpZykpIHtcbiAgICB2YXIgX2RhdGVGb3JtYXRLZXlPckNvbmZpID0gZGF0ZUZvcm1hdEtleU9yQ29uZmlnLmZvcm1hdCxcbiAgICAgICAgZm9ybWF0ID0gX2RhdGVGb3JtYXRLZXlPckNvbmZpID09PSB2b2lkIDAgPyAnZGF0ZVRpbWUnIDogX2RhdGVGb3JtYXRLZXlPckNvbmZpLFxuICAgICAgICBfZGF0ZUZvcm1hdEtleU9yQ29uZmkyID0gZGF0ZUZvcm1hdEtleU9yQ29uZmlnLm5pbCxcbiAgICAgICAgbmlsID0gX2RhdGVGb3JtYXRLZXlPckNvbmZpMiA9PT0gdm9pZCAwID8gJycgOiBfZGF0ZUZvcm1hdEtleU9yQ29uZmkyLFxuICAgICAgICBvcHRpb25zID0gZGF0ZUZvcm1hdEtleU9yQ29uZmlnLm9wdGlvbnM7XG4gICAgdmFyIGRhdGVGb3JtYXQgPSBkYXRlRm9ybWF0QWxpYXNlc1tmb3JtYXRdIHx8IGZvcm1hdDtcblxuICAgIGlmIChpc05pbCh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBuaWw7XG4gICAgfVxuXG4gICAgaWYgKGlzRnVuY3Rpb24oZGF0ZUZvcm1hdCkpIHtcbiAgICAgIHJldHVybiBkYXRlRm9ybWF0KHZhbHVlLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBpZiAoaXNTdHJpbmcoZGF0ZUZvcm1hdCkpIHtcbiAgICAgIHJldHVybiBtb21lbnQodmFsdWUpLmZvcm1hdChkYXRlRm9ybWF0KTtcbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gZm9ybWF0IHZhbHVlIHVzaW5nIGRhdGVGb3JtYXRLZXlPckNvbmZpZzogXCIuY29uY2F0KGRhdGVGb3JtYXRLZXlPckNvbmZpZykpO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBudW1lcmFsIGZyb20gJ251bWVyYWwnO1xuaW1wb3J0IHsgaXNOaWwsIGlzU3RyaW5nIH0gZnJvbSAnLi4vcHJlZGljYXRlJztcbnZhciBudW1iZXJGb3JtYXRBbGlhc2VzID0ge1xuICBkZWNpbWFsMTogJzAsMC4wJyxcbiAgZGVjaW1hbDI6ICcwLDAuMDAnLFxuICBkZWNpbWFsMzogJzAsMC4wMDAnLFxuICBvcmRpbmFsOiAnMG8nLFxuICBpbnRlZ2VyOiAnMCwwJ1xufTtcbmV4cG9ydCB2YXIgZm9ybWF0TnVtYmVyID0gZnVuY3Rpb24gZm9ybWF0TnVtYmVyKHZhbHVlKSB7XG4gIHZhciBudW1iZXJGb3JtYXRPckNvbmZpZyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gIHZhciBmb3JtYXQ7XG4gIHZhciBuaWwgPSAnJztcbiAgdmFyIHJvdW5kO1xuXG4gIGlmIChpc1N0cmluZyhudW1iZXJGb3JtYXRPckNvbmZpZykpIHtcbiAgICBmb3JtYXQgPSBudW1iZXJGb3JtYXRPckNvbmZpZztcbiAgfSBlbHNlIHtcbiAgICBmb3JtYXQgPSBudW1iZXJGb3JtYXRPckNvbmZpZy5mb3JtYXQ7XG4gICAgbmlsID0gbnVtYmVyRm9ybWF0T3JDb25maWcubmlsIHx8ICcnO1xuICAgIHJvdW5kID0gbnVtYmVyRm9ybWF0T3JDb25maWcucm91bmQ7XG4gIH1cblxuICBpZiAoIWZvcm1hdCkge1xuICAgIHJldHVybiBpc05pbCh2YWx1ZSkgPyBuaWwgOiB2YWx1ZS50b1N0cmluZygpO1xuICB9XG5cbiAgdmFyIHJvdW5kaW5nRnVuYyA9IHJvdW5kID8gTWF0aC5yb3VuZCA6IE1hdGguZmxvb3I7XG4gIHZhciBudW1iZXJGb3JtYXQgPSBudW1iZXJGb3JtYXRBbGlhc2VzW2Zvcm1hdF0gfHwgZm9ybWF0O1xuICByZXR1cm4gaXNOaWwodmFsdWUpID8gbmlsIDogbnVtZXJhbCh2YWx1ZSkuZm9ybWF0KG51bWJlckZvcm1hdCwgcm91bmRpbmdGdW5jKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBpc05pbCB9IGZyb20gJy4uL3ByZWRpY2F0ZSc7XG5leHBvcnQgdmFyIGZvcm1hdFRleHQgPSBmdW5jdGlvbiBmb3JtYXRUZXh0KHZhbHVlKSB7XG4gIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7XG4gICAgbmlsOiAnJ1xuICB9O1xuICByZXR1cm4gaXNOaWwodmFsdWUpID8gb3B0aW9ucy5uaWwgOiB2YWx1ZS50b1N0cmluZygpO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IGlzTmlsLCBpc0FycmF5LCBpc0Jvb2xlYW4sIGlzRGF0ZSwgaXNOYU4sIGlzTnVtYmVyLCBpc1N0cmluZyB9IGZyb20gJy4uL3ByZWRpY2F0ZSc7XG5pbXBvcnQgeyBmb3JtYXRCb29sZWFuIH0gZnJvbSAnLi9mb3JtYXRfYm9vbGVhbic7XG5pbXBvcnQgeyBmb3JtYXREYXRlIH0gZnJvbSAnLi9mb3JtYXRfZGF0ZSc7XG5pbXBvcnQgeyBmb3JtYXROdW1iZXIgfSBmcm9tICcuL2Zvcm1hdF9udW1iZXInO1xuaW1wb3J0IHsgZm9ybWF0VGV4dCB9IGZyb20gJy4vZm9ybWF0X3RleHQnO1xuZXhwb3J0IHZhciBmb3JtYXRBdXRvID0gZnVuY3Rpb24gZm9ybWF0QXV0byh2YWx1ZSkge1xuICBpZiAoaXNOaWwodmFsdWUpIHx8IGlzTmFOKHZhbHVlKSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZm9ybWF0VGV4dCh2YWx1ZSk7XG4gIH1cblxuICBpZiAoaXNEYXRlKHZhbHVlKSkge1xuICAgIHJldHVybiBmb3JtYXREYXRlKHZhbHVlKTtcbiAgfVxuXG4gIGlmIChpc0Jvb2xlYW4odmFsdWUpKSB7XG4gICAgcmV0dXJuIGZvcm1hdEJvb2xlYW4odmFsdWUpO1xuICB9XG5cbiAgaWYgKGlzTnVtYmVyKHZhbHVlKSkge1xuICAgIHJldHVybiBmb3JtYXROdW1iZXIodmFsdWUpO1xuICB9XG5cbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICByZXR1cm4gZm9ybWF0QXV0byhpdGVtKTtcbiAgICB9KS5qb2luKCcsICcpIDogZm9ybWF0QXV0byh2YWx1ZSk7XG4gIH0gLy8gVE9ETyBub3Qgc3VyZSBpZiB3ZSB3YW50IHRoYXQuLiB0aGUgKCspIGlzIHRoYXQgd2Ugc2hvdyBzb21ldGhpbmcsIHRoZSAoLSkgaXMgdGhhdCBpdCdzIHZlcnkgdGVjaG5pY2FsXG5cblxuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbnZhciBpc0VsYXN0aWNIb3N0ID0gL14oW2EtekEtWjAtOV0rXFwuKSplbGFzdGljXFwuY28kLzsgLy8gSW4gb3JkZXIgZm9yIHRoZSBkb21haW4gdG8gYmUgc2VjdXJlIGl0IG5lZWRzIHRvIGJlIGluIGEgcGFyc2FibGUgZm9ybWF0LFxuLy8gd2l0aCB0aGUgcHJvdG9jb2wgb2YgaHR0cDogb3IgaHR0cHM6IGFuZCB0aGUgaG9zdCBtYXRjaGluZyBlbGFzdGljLmNvIG9yXG4vLyBvZiBvbmUgaXRzIHN1YmRvbWFpbnNcblxuZXhwb3J0IHZhciBpc0RvbWFpblNlY3VyZSA9IGZ1bmN0aW9uIGlzRG9tYWluU2VjdXJlKCkge1xuICB2YXIgdXJsID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiAnJztcblxuICB0cnkge1xuICAgIHZhciBwYXJzZWQgPSBuZXcgVVJMKHVybCk7XG4gICAgdmFyIHByb3RvY29sTWF0Y2hlcyA9IHBhcnNlZC5wcm90b2NvbCA9PT0gJ2h0dHA6JyB8fCBwYXJzZWQucHJvdG9jb2wgPT09ICdodHRwczonO1xuICAgIHZhciBkb21haW5NYXRjaGVzID0gISFwYXJzZWQuaG9zdC5tYXRjaChpc0VsYXN0aWNIb3N0KTtcbiAgICByZXR1cm4gcHJvdG9jb2xNYXRjaGVzICYmIGRvbWFpbk1hdGNoZXM7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8qKlxuICogU2VjdXJlcyBvdXRib3VuZCBsaW5rcy4gRm9yIG1vcmUgaW5mbzpcbiAqIGh0dHBzOi8vd3d3LmppdGJpdC5jb20vYWxleGJsb2cvMjU2LXRhcmdldGJsYW5rLS0tdGhlLW1vc3QtdW5kZXJlc3RpbWF0ZWQtdnVsbmVyYWJpbGl0eS1ldmVyL1xuICovXG5pbXBvcnQgeyBpc0RvbWFpblNlY3VyZSB9IGZyb20gJy4uL3VybCc7XG5leHBvcnQgdmFyIGdldFNlY3VyZVJlbEZvclRhcmdldCA9IGZ1bmN0aW9uIGdldFNlY3VyZVJlbEZvclRhcmdldChfcmVmKSB7XG4gIHZhciBocmVmID0gX3JlZi5ocmVmLFxuICAgICAgX3JlZiR0YXJnZXQgPSBfcmVmLnRhcmdldCxcbiAgICAgIHRhcmdldCA9IF9yZWYkdGFyZ2V0ID09PSB2b2lkIDAgPyAnJyA6IF9yZWYkdGFyZ2V0LFxuICAgICAgcmVsID0gX3JlZi5yZWw7XG4gIHZhciBpc0VsYXN0aWNIcmVmID0gISFocmVmICYmIGlzRG9tYWluU2VjdXJlKGhyZWYpO1xuICB2YXIgcmVsUGFydHMgPSAhIXJlbCA/IHJlbC5zcGxpdCgnICcpLmZpbHRlcihmdW5jdGlvbiAocGFydCkge1xuICAgIHJldHVybiAhIXBhcnQubGVuZ3RoICYmIHBhcnQgIT09ICdub3JlZmVycmVyJztcbiAgfSkgOiBbXTtcblxuICBpZiAoIWlzRWxhc3RpY0hyZWYpIHtcbiAgICByZWxQYXJ0cy5wdXNoKCdub3JlZmVycmVyJyk7XG4gIH1cblxuICBpZiAodGFyZ2V0LmluY2x1ZGVzKCdfYmxhbmsnKSAmJiByZWxQYXJ0cy5pbmRleE9mKCdub29wZW5lcicpID09PSAtMSkge1xuICAgIHJlbFBhcnRzLnB1c2goJ25vb3BlbmVyJyk7XG4gIH1cblxuICByZXR1cm4gcmVsUGFydHMuc29ydCgpLmpvaW4oJyAnKS50cmltKCk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBBU0MgPSAnYXNjJztcbnZhciBERVNDID0gJ2Rlc2MnO1xuZXhwb3J0IHZhciBTb3J0RGlyZWN0aW9uID0gT2JqZWN0LmZyZWV6ZSh7XG4gIEFTQzogQVNDLFxuICBERVNDOiBERVNDLFxuICBpc0FzYzogZnVuY3Rpb24gaXNBc2MoZGlyZWN0aW9uKSB7XG4gICAgcmV0dXJuIGRpcmVjdGlvbiA9PT0gQVNDO1xuICB9LFxuICByZXZlcnNlOiBmdW5jdGlvbiByZXZlcnNlKGRpcmVjdGlvbikge1xuICAgIHJldHVybiB0aGlzLmlzQXNjKGRpcmVjdGlvbikgPyBERVNDIDogQVNDO1xuICB9XG59KTtcbmV4cG9ydCB2YXIgU29ydERpcmVjdGlvblR5cGUgPSBQcm9wVHlwZXMub25lT2YoW0FTQywgREVTQ10pOyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IF9nZXQgZnJvbSAnbG9kYXNoL2dldCc7XG5pbXBvcnQgX29taXQgZnJvbSAnbG9kYXNoL29taXQnOyAvLyB3cmFwIHRoZSBsb2Rhc2ggZnVuY3Rpb25zIHRvIGF2b2lkIGhhdmluZyBsb2Rhc2gncyBUUyB0eXBlIGRlZmluaXRpb24gZnJvbSBiZWluZ1xuLy8gZXhwb3J0ZWQsIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIHRoZSBsb2Rhc2ggbmFtZXNwYWNlIGlmIG90aGVyIHZlcnNpb25zIGFyZSB1c2VkXG5cbmV4cG9ydCB2YXIgZ2V0ID0gZnVuY3Rpb24gZ2V0KG9iamVjdCwgcGF0aCwgZGVmYXVsdFZhbHVlKSB7XG4gIHJldHVybiBfZ2V0KG9iamVjdCwgcGF0aCwgZGVmYXVsdFZhbHVlKTtcbn07XG5leHBvcnQgdmFyIG9taXQgPSBmdW5jdGlvbiBvbWl0KG9iamVjdCwgcGF0aHMpIHtcbiAgcmV0dXJuIF9vbWl0KG9iamVjdCwgcGF0aHMpO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IFNvcnREaXJlY3Rpb24gfSBmcm9tICcuL3NvcnRfZGlyZWN0aW9uJztcbmltcG9ydCB7IGdldCB9IGZyb20gJy4uL29iamVjdHMnO1xuZXhwb3J0IHZhciBDb21wYXJhdG9ycyA9IE9iamVjdC5mcmVlemUoe1xuICBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgICB2YXIgZGlyZWN0aW9uID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBTb3J0RGlyZWN0aW9uLkFTQztcbiAgICByZXR1cm4gZnVuY3Rpb24gKHYxLCB2Mikge1xuICAgICAgLy8gSmF2YVNjcmlwdCdzIGNvbXBhcmlzb24gb2YgbnVsbC91bmRlZmluZWQgKGFuZCBzb21lIG90aGVycyBub3QgaGFuZGxlZCBoZXJlKSB2YWx1ZXMgYWx3YXlzIHJldHVybnMgYGZhbHNlYFxuICAgICAgLy8gKGh0dHBzOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvI3NlYy1hYnN0cmFjdC1yZWxhdGlvbmFsLWNvbXBhcmlzb24pXG4gICAgICAvLyByZXN1bHRpbmcgaW4gY2FzZXMgd2hlcmUgdjEgPCB2MiBhbmQgdjEgPiB2MiBhcmUgYm90aCBmYWxzZS5cbiAgICAgIC8vIFRoaXMgbGVhZHMgdG8gdW5wcmVkaWN0YWJsZSBzb3J0aW5nIHJlc3VsdHMgaW4gbXVsdGlwbGUgSlMgZW5naW5lIHNvcnRpbmcgYWxnb3JpdGhtc1xuICAgICAgLy8gd2hpY2ggY2F1c2VzIHVucHJlZGljdGFibGUgdXNlciBleHBlcmllbmNlcy5cbiAgICAgIC8vIEluc3RlYWQ6XG4gICAgICAvLyAqIDEuIHB1c2ggdW5kZWZpbmVkL251bGwgdmFsdWVzIHRvIHRoZSBlbmQgb2YgdGhlIHNvcnRlZCBsaXN0LCBfcmVnYXJkbGVzcyBvZiBzb3J0IGRpcmVjdGlvbl9cbiAgICAgIC8vICAgIChub24tc29ydGFibGUgdmFsdWVzIGFsd2F5cyBhcHBlYXIgYXQgdGhlIGVuZCwgYW5kIHNvcnRhYmxlIHZhbHVlcyBhcmUgc29ydGVkIGF0IHRoZSB0b3ApXG4gICAgICAvLyAqIDIuIHJlcG9ydCB1bmRlZmluZWQvbnVsbCB2YWx1ZXMgYXMgZXF1YWxcbiAgICAgIC8vICogMy4gd2hlbiBib3RoIHZhbHVlcyBhcmUgY29tcGFyYWJsZSB0aGV5IGFyZSBzb3J0ZWQgbm9ybWFsbHlcbiAgICAgIHZhciB2MUlzQ29tcGFyYWJsZSA9IHYxICE9IG51bGw7XG4gICAgICB2YXIgdjJJc0NvbXBhcmFibGUgPSB2MiAhPSBudWxsOyAvLyAqIDEuXG5cbiAgICAgIGlmICh2MUlzQ29tcGFyYWJsZSAmJiAhdjJJc0NvbXBhcmFibGUpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXYxSXNDb21wYXJhYmxlICYmIHYySXNDb21wYXJhYmxlKSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfSAvLyAqIDIuXG5cblxuICAgICAgaWYgKCF2MUlzQ29tcGFyYWJsZSAmJiAhdjJJc0NvbXBhcmFibGUpIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9IC8vICogMy5cblxuXG4gICAgICBpZiAodjEgPT09IHYyKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVzdWx0ID0gdjEgPiB2MiA/IDEgOiAtMTtcbiAgICAgIHJldHVybiBTb3J0RGlyZWN0aW9uLmlzQXNjKGRpcmVjdGlvbikgPyByZXN1bHQgOiAtMSAqIHJlc3VsdDtcbiAgICB9O1xuICB9LFxuICByZXZlcnNlOiBmdW5jdGlvbiByZXZlcnNlKGNvbXBhcmF0b3IpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHYxLCB2Mikge1xuICAgICAgcmV0dXJuIGNvbXBhcmF0b3IodjIsIHYxKTtcbiAgICB9O1xuICB9LFxuICB2YWx1ZTogZnVuY3Rpb24gKF92YWx1ZSkge1xuICAgIGZ1bmN0aW9uIHZhbHVlKF94LCBfeDIpIHtcbiAgICAgIHJldHVybiBfdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICB2YWx1ZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdmFsdWUudG9TdHJpbmcoKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9KGZ1bmN0aW9uICh2YWx1ZUNhbGxiYWNrLCBjb21wYXJhdG9yKSB7XG4gICAgaWYgKCFjb21wYXJhdG9yKSB7XG4gICAgICBjb21wYXJhdG9yID0gdGhpcy5kZWZhdWx0KFNvcnREaXJlY3Rpb24uQVNDKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gKG8xLCBvMikge1xuICAgICAgcmV0dXJuIGNvbXBhcmF0b3IodmFsdWVDYWxsYmFjayhvMSksIHZhbHVlQ2FsbGJhY2sobzIpKTtcbiAgICB9O1xuICB9KSxcbiAgcHJvcGVydHk6IGZ1bmN0aW9uIHByb3BlcnR5KHByb3AsIGNvbXBhcmF0b3IpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZShmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIHJldHVybiBnZXQodmFsdWUsIHByb3ApO1xuICAgIH0sIGNvbXBhcmF0b3IpO1xuICB9XG59KTsiLCAiZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHsgdmFyIF9pID0gYXJyID09IG51bGwgPyBudWxsIDogdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBhcnJbU3ltYm9sLml0ZXJhdG9yXSB8fCBhcnJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAoX2kgPT0gbnVsbCkgcmV0dXJuOyB2YXIgX2FyciA9IFtdOyB2YXIgX24gPSB0cnVlOyB2YXIgX2QgPSBmYWxzZTsgdmFyIF9zLCBfZTsgdHJ5IHsgZm9yIChfaSA9IF9pLmNhbGwoYXJyKTsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkgeyBfYXJyLnB1c2goX3MudmFsdWUpOyBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7IH0gfSBjYXRjaCAoZXJyKSB7IF9kID0gdHJ1ZTsgX2UgPSBlcnI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTsgfSBmaW5hbGx5IHsgaWYgKF9kKSB0aHJvdyBfZTsgfSB9IHJldHVybiBfYXJyOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuZXhwb3J0IHZhciBQT1NJVElPTlMgPSBbJ3RvcCcsICdyaWdodCcsICdib3R0b20nLCAnbGVmdCddO1xudmFyIHJlbGF0ZWREaW1lbnNpb24gPSB7XG4gIHRvcDogJ2hlaWdodCcsXG4gIHJpZ2h0OiAnd2lkdGgnLFxuICBib3R0b206ICdoZWlnaHQnLFxuICBsZWZ0OiAnd2lkdGgnXG59O1xudmFyIGRpbWVuc2lvblBvc2l0aW9uQXR0cmlidXRlID0ge1xuICBoZWlnaHQ6ICd0b3AnLFxuICB3aWR0aDogJ2xlZnQnXG59O1xudmFyIHBvc2l0aW9uQ29tcGxlbWVudHMgPSB7XG4gIHRvcDogJ2JvdHRvbScsXG4gIHJpZ2h0OiAnbGVmdCcsXG4gIGJvdHRvbTogJ3RvcCcsXG4gIGxlZnQ6ICdyaWdodCdcbn07IC8vIGFsd2F5cyByZXNvbHZpbmcgdG8gdG9wL2xlZnQgaXMgdGFrZW4gYWR2YW50YWdlIG9mIGJ5IGtub3dpbmcgdGhleSBhcmUgdGhlXG4vLyBtaW5pbXVtIGVkZ2VzIG9mIHRoZSBib3VuZGluZyBib3hcblxudmFyIHBvc2l0aW9uU3Vic3RpdHV0ZXMgPSB7XG4gIHRvcDogJ2xlZnQnLFxuICByaWdodDogJ3RvcCcsXG4gIGJvdHRvbTogJ2xlZnQnLFxuICBsZWZ0OiAndG9wJ1xufTtcblxudmFyIGdldEJ1ZmZlclZhbHVlcyA9IGZ1bmN0aW9uIGdldEJ1ZmZlclZhbHVlcyhidWZmZXIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYnVmZmVyKSkge1xuICAgIHZhciBfYnVmZmVyID0gX3NsaWNlZFRvQXJyYXkoYnVmZmVyLCA0KSxcbiAgICAgICAgdG9wQnVmZmVyID0gX2J1ZmZlclswXSxcbiAgICAgICAgcmlnaHRCdWZmZXIgPSBfYnVmZmVyWzFdLFxuICAgICAgICBib3R0b21CdWZmZXIgPSBfYnVmZmVyWzJdLFxuICAgICAgICBsZWZ0QnVmZmVyID0gX2J1ZmZlclszXTtcblxuICAgIHJldHVybiBbdG9wQnVmZmVyLCByaWdodEJ1ZmZlciwgYm90dG9tQnVmZmVyLCBsZWZ0QnVmZmVyXTtcbiAgfVxuXG4gIHJldHVybiBbYnVmZmVyLCBidWZmZXIsIGJ1ZmZlciwgYnVmZmVyXTtcbn07XG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGFic29sdXRlIHBvc2l0aW9uaW5nIChyZWxhdGl2ZSB0byBkb2N1bWVudC5ib2R5KSB0byBwbGFjZSBhIHBvcG92ZXIgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBhbmNob3Ige0hUTUxFbGVtZW50fSBFbGVtZW50IHRvIGFuY2hvciB0aGUgcG9wb3ZlciB0b1xuICogQHBhcmFtIHBvcG92ZXIge0hUTUxFbGVtZW50fSBFbGVtZW50IGNvbnRhaW5pbmcgdGhlIHBvcG92ZXIgY29udGVudFxuICogQHBhcmFtIHBvc2l0aW9uIHtzdHJpbmd9IFBvc2l0aW9uIHRoZSB1c2VyIHdhbnRzLiBPbmUgb2YgW1widG9wXCIsIFwicmlnaHRcIiwgXCJib3R0b21cIiwgXCJsZWZ0XCJdXG4gKiBAcGFyYW0gW2ZvcmNlUG9zaXRpb25dIHtib29sZWFufSBJZiB0cnVlLCB1c2Ugb25seSB0aGUgcHJvdmlkZWQgYHBvc2l0aW9uYCB2YWx1ZSBhbmQgZG9uJ3QgdHJ5IGFueSBvdGhlciBwb3NpdGlvblxuICogQHBhcmFtIFthbGlnbl0ge3N0cmluZ30gQ3Jvc3MtYXhpcyBhbGlnbm1lbnQuIE9uZSBvZiBbXCJ0b3BcIiwgXCJyaWdodFwiLCBcImJvdHRvbVwiLCBcImxlZnRcIl1cbiAqIEBwYXJhbSBbYnVmZmVyPTE2XSB7bnVtYmVyfSBNaW5pbXVtIGRpc3RhbmNlIGJldHdlZW4gdGhlIHBvcG92ZXIgYW5kIHRoZSBib3VuZGluZyBjb250YWluZXJcbiAqIEBwYXJhbSBbb2Zmc2V0PTBdIHtudW1iZXJ9IERpc3RhbmNlIGJldHdlZW4gdGhlIHBvcG92ZXIgYW5kIHRoZSBhbmNob3JcbiAqIEBwYXJhbSBbYWxsb3dDcm9zc0F4aXM9dHJ1ZV0ge2Jvb2xlYW59IFdoZXRoZXIgdG8gYWxsb3cgdGhlIHBvcG92ZXIgdG8gYmUgcG9zaXRpb25lZCBvbiB0aGUgY3Jvc3MtYXhpc1xuICogQHBhcmFtIFtjb250YWluZXJdIHtIVE1MRWxlbWVudH0gRWxlbWVudCB0aGUgcG9wb3ZlciBtdXN0IGJlIGNvbnN0cmFpbmVkIHRvIGZpdCB3aXRoaW5cbiAqIEBwYXJhbSBbYXJyb3dDb25maWddIHt7YXJyb3dXaWR0aDogbnVtYmVyLCBhcnJvd0J1ZmZlcjogbnVtYmVyfX0gSWZcbiAqICBwcmVzZW50LCBkZXNjcmliZXMgdGhlIHNpemUgJiBjb25zdHJhaW50cyBmb3IgYW4gYXJyb3cgZWxlbWVudCwgYW5kIHRoZVxuICogIGZ1bmN0aW9uIHJldHVybiB2YWx1ZSB3aWxsIGluY2x1ZGUgYW4gYGFycm93YCBwYXJhbSB3aXRoIHBvc2l0aW9uIGRldGFpbHNcbiAqXG4gKiBAcmV0dXJucyB7RmluZFBvcG92ZXJQb3NpdGlvblJlc3VsdH0gYWJzb2x1dGUgcGFnZSBjb29yZGluYXRlcyBmb3IgdGhlXG4gKiBwb3BvdmVyLCBhbmQgdGhlIHBsYWNlbWVudCdzIHJlbGF0aW9uIHRvIHRoZSBhbmNob3Igb3IgdW5kZWZpbmVkXG4gKiB0aGVyZSdzIG5vIHJvb20uXG4gKi9cblxuXG5leHBvcnQgZnVuY3Rpb24gZmluZFBvcG92ZXJQb3NpdGlvbihfcmVmKSB7XG4gIHZhciBhbmNob3IgPSBfcmVmLmFuY2hvcixcbiAgICAgIHBvcG92ZXIgPSBfcmVmLnBvcG92ZXIsXG4gICAgICBhbGlnbiA9IF9yZWYuYWxpZ24sXG4gICAgICBwb3NpdGlvbiA9IF9yZWYucG9zaXRpb24sXG4gICAgICBmb3JjZVBvc2l0aW9uID0gX3JlZi5mb3JjZVBvc2l0aW9uLFxuICAgICAgX3JlZiRidWZmZXIgPSBfcmVmLmJ1ZmZlcixcbiAgICAgIGJ1ZmZlciA9IF9yZWYkYnVmZmVyID09PSB2b2lkIDAgPyAxNiA6IF9yZWYkYnVmZmVyLFxuICAgICAgX3JlZiRvZmZzZXQgPSBfcmVmLm9mZnNldCxcbiAgICAgIG9mZnNldCA9IF9yZWYkb2Zmc2V0ID09PSB2b2lkIDAgPyAwIDogX3JlZiRvZmZzZXQsXG4gICAgICBfcmVmJGFsbG93Q3Jvc3NBeGlzID0gX3JlZi5hbGxvd0Nyb3NzQXhpcyxcbiAgICAgIGFsbG93Q3Jvc3NBeGlzID0gX3JlZiRhbGxvd0Nyb3NzQXhpcyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYkYWxsb3dDcm9zc0F4aXMsXG4gICAgICBjb250YWluZXIgPSBfcmVmLmNvbnRhaW5lcixcbiAgICAgIGFycm93Q29uZmlnID0gX3JlZi5hcnJvd0NvbmZpZyxcbiAgICAgIHJldHVybkJvdW5kaW5nQm94ID0gX3JlZi5yZXR1cm5Cb3VuZGluZ0JveDtcbiAgLy8gZmluZCB0aGUgc2NyZWVuLXJlbGF0aXZlIGJvdW5kaW5nIGJveGVzIG9mIHRoZSBhbmNob3IsIHBvcG92ZXIsIGFuZCBjb250YWluZXJcbiAgdmFyIGFuY2hvckJvdW5kaW5nQm94ID0gZ2V0RWxlbWVudEJvdW5kaW5nQm94KGFuY2hvcik7XG4gIHZhciBwb3BvdmVyQm91bmRpbmdCb3ggPSBnZXRFbGVtZW50Qm91bmRpbmdCb3gocG9wb3Zlcik7IC8vIGNhbGN1bGF0ZSB0aGUgd2luZG93J3MgYm91bmRzXG4gIC8vIHdpbmRvdy4oaW5uZXJXaWR0aHxpbm5lckhlaWdodCkgZG8gbm90IGFjY291bnQgZm9yIHNjcm9sbGJhcnNcbiAgLy8gc28gcHJlZmVyIHRoZSBjbGllbnRXaWR0aC9jbGllbnRIZWlnaHQgb2YgdGhlIERPTSBpZiBhdmFpbGFibGVcblxuICB2YXIgZG9jdW1lbnRXaWR0aCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCB8fCB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgdmFyIGRvY3VtZW50SGVpZ2h0ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCB8fCB3aW5kb3cuaW5uZXJIZWlnaHQ7XG4gIHZhciB3aW5kb3dCb3VuZGluZ0JveCA9IHtcbiAgICB0b3A6IDAsXG4gICAgcmlnaHQ6IGRvY3VtZW50V2lkdGgsXG4gICAgYm90dG9tOiBkb2N1bWVudEhlaWdodCxcbiAgICBsZWZ0OiAwLFxuICAgIGhlaWdodDogZG9jdW1lbnRIZWlnaHQsXG4gICAgd2lkdGg6IGRvY3VtZW50V2lkdGhcbiAgfTsgLy8gaWYgbm8gY29udGFpbmVyIGVsZW1lbnQgaXMgZ2l2ZW4gZmFsbCBiYWNrIHRvIHVzaW5nIHRoZSB3aW5kb3cgdmlld3BvcnRcblxuICB2YXIgY29udGFpbmVyQm91bmRpbmdCb3ggPSBjb250YWluZXIgPyBnZXRFbGVtZW50Qm91bmRpbmdCb3goY29udGFpbmVyKSA6IHdpbmRvd0JvdW5kaW5nQm94O1xuICAvKipcbiAgICogYHBvc2l0aW9uYCB3YXMgc3BlY2lmaWVkIGJ5IHRoZSBmdW5jdGlvbiBjYWxsZXIgYW5kIGlzIGEgc3Ryb25nIGhpbnRcbiAgICogYXMgdG8gdGhlIHByZWZlcnJlZCBsb2NhdGlvbiBvZiB0aGUgcG9wb3ZlciByZWxhdGl2ZSB0byB0aGUgYW5jaG9yLlxuICAgKiBIb3dldmVyLCB3ZSBzdHJvbmdseSBwcmVmZXIgc2hvd2luZyBhbGwgb2YgdGhlIHBvcG92ZXIgY29udGVudCB3aXRoaW5cbiAgICogdGhlIHdpbmRvdytjb250YWluZXIgYm91bmRhcnkgYW5kIHdpbGwgaXRlcmF0ZSBvdmVyIHRoZSBmb3VyXG4gICAqIHBvc3NpYmxlIHNpZGVzIHVudGlsIGEgcGVyZmVjdCBmaXQgaXMgbG9jYXRlZC4gSWYgbm9uZSBvZiB0aGUgbG9jYXRpb25zXG4gICAqIGZ1bGx5IGNvbnRhaW4gcG9wb3ZlciwgdGhlIGxvY2F0aW9uIHdpdGggdGhlIGJlc3QgZml0IGlzIHNlbGVjdGVkLlxuICAgKlxuICAgKiBUaGlzIGFwcHJvYWNoIGZpcnN0IGNoZWNrcyB0aGUgcHJlZmVycmVkIGBwb3NpdGlvbmAsIHRoZW4gaXRzIG9wcG9zaXRlXG4gICAqIGFsb25nIHRoZSBzYW1lIGF4aXMsIG5leHQgYSBsb2NhdGlvbiBvbiB0aGUgY3Jvc3MtYXhpcywgYW5kIGZpbmFsbHkgaXRcbiAgICogdGVzdHMgdGhlIHJlbWFpbmluZyBwb3NpdGlvbi5cbiAgICpcbiAgICogZS5nLlxuICAgKiBpZiBwb3NpdGlvbiA9IFwidG9wXCIgdGhlIG9yZGVyIGlzIHRvcCwgYm90dG9tLCBsZWZ0IHJpZ2h0XG4gICAqIGlmIHBvc2l0aW9uID0gXCJyaWdodFwiIHRoZSBvcmRlciBpcyByaWdodCwgbGVmdCwgdG9wLCBib3R0b21cbiAgICovXG4gIC8vIFRyeSB0aGUgdXNlci1kZXNpcmVkIHBvc2l0aW9uIGZpcnN0LlxuXG4gIHZhciBpdGVyYXRpb25Qb3NpdGlvbnMgPSBbcG9zaXRpb25dOyAvLyBrZWVwIHVzZXItZGVmaW5lZCBhbGlnbm1lbnQgaW4gdGhlIG9yaWdpbmFsIHBvc2l0aW9ucy5cblxuICB2YXIgaXRlcmF0aW9uQWxpZ25tZW50cyA9IFthbGlnbl07XG5cbiAgaWYgKGZvcmNlUG9zaXRpb24gIT09IHRydWUpIHtcbiAgICBpdGVyYXRpb25Qb3NpdGlvbnMucHVzaChwb3NpdGlvbkNvbXBsZW1lbnRzW3Bvc2l0aW9uXSk7IC8vIFRyeSB0aGUgY29tcGxlbWVudGFyeSBwb3NpdGlvbi5cblxuICAgIGl0ZXJhdGlvbkFsaWdubWVudHMucHVzaChhbGlnbik7IC8vIGtlZXAgdXNlci1kZWZpbmVkIGFsaWdubWVudCBpbiB0aGUgY29tcGxlbWVudGFyeSBwb3NpdGlvbi5cblxuICAgIGlmIChhbGxvd0Nyb3NzQXhpcykge1xuICAgICAgaXRlcmF0aW9uUG9zaXRpb25zLnB1c2gocG9zaXRpb25TdWJzdGl0dXRlc1twb3NpdGlvbl0sIC8vIFN3aXRjaCB0byB0aGUgY3Jvc3MgYXhpcy5cbiAgICAgIHBvc2l0aW9uQ29tcGxlbWVudHNbcG9zaXRpb25TdWJzdGl0dXRlc1twb3NpdGlvbl1dIC8vIFRyeSB0aGUgY29tcGxlbWVudGFyeSBwb3NpdGlvbiBvbiB0aGUgY3Jvc3MgYXhpcy5cbiAgICAgICk7XG4gICAgICBpdGVyYXRpb25BbGlnbm1lbnRzLnB1c2godW5kZWZpbmVkLCB1bmRlZmluZWQpOyAvLyBkaXNjYXJkIGRlc2lyZWQgYWxpZ25tZW50IG9uIGNyb3NzLWF4aXNcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gcG9zaXRpb24gaXMgZm9yY2VkLCBpZiBpdCBjb25mbGljdHMgd2l0aCB0aGUgYWxpZ25tZW50IHRoZW4gcmVzZXQgYWxpZ24gdG8gYG51bGxgXG4gICAgLy8gZS5nLiBvcmlnaW5hbCBwbGFjZW1lbnQgcmVxdWVzdCBmb3IgYGRvd25MZWZ0YCBpcyBtb3ZlZCB0byB0aGUgYGxlZnRgIHNpZGUsIGZ1dHVyZSBjYWxsc1xuICAgIC8vIHdpbGwgcG9zaXRpb24gYW5kIGFsaWduIGBsZWZ0YCwgYW5kIGBsZWZ0TGVmdGAgaXMgbm90IGEgdmFsaWQgcGxhY2VtZW50XG4gICAgaWYgKHBvc2l0aW9uID09PSBhbGlnbiB8fCBhbGlnbiAhPT0gdW5kZWZpbmVkICYmIHBvc2l0aW9uID09PSBwb3NpdGlvbkNvbXBsZW1lbnRzW2FsaWduXSkge1xuICAgICAgaXRlcmF0aW9uQWxpZ25tZW50c1swXSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICB2YXIgYmVzdEZpdCA9IHVuZGVmaW5lZDtcbiAgdmFyIGJlc3RQb3NpdGlvbiA9IG51bGw7XG5cbiAgZm9yICh2YXIgaWR4ID0gMDsgaWR4IDwgaXRlcmF0aW9uUG9zaXRpb25zLmxlbmd0aDsgaWR4KyspIHtcbiAgICB2YXIgaXRlcmF0aW9uUG9zaXRpb24gPSBpdGVyYXRpb25Qb3NpdGlvbnNbaWR4XTsgLy8gU2VlIGlmIHdlIGNhbiBmaW5kIGEgcG9zaXRpb24gd2l0aCBhIGJldHRlciBmaXQgdGhhbiB3ZSd2ZSBmb3VuZCBzbyBmYXIuXG5cbiAgICB2YXIgc2NyZWVuQ29vcmRpbmF0ZXMgPSBnZXRQb3BvdmVyU2NyZWVuQ29vcmRpbmF0ZXMoe1xuICAgICAgcG9zaXRpb246IGl0ZXJhdGlvblBvc2l0aW9uLFxuICAgICAgYWxpZ246IGl0ZXJhdGlvbkFsaWdubWVudHNbaWR4XSxcbiAgICAgIGFuY2hvckJvdW5kaW5nQm94OiBhbmNob3JCb3VuZGluZ0JveCxcbiAgICAgIHBvcG92ZXJCb3VuZGluZ0JveDogcG9wb3ZlckJvdW5kaW5nQm94LFxuICAgICAgd2luZG93Qm91bmRpbmdCb3g6IHdpbmRvd0JvdW5kaW5nQm94LFxuICAgICAgY29udGFpbmVyQm91bmRpbmdCb3g6IGNvbnRhaW5lckJvdW5kaW5nQm94LFxuICAgICAgb2Zmc2V0OiBvZmZzZXQsXG4gICAgICBidWZmZXI6IGJ1ZmZlcixcbiAgICAgIGFycm93Q29uZmlnOiBhcnJvd0NvbmZpZ1xuICAgIH0pO1xuXG4gICAgaWYgKGJlc3RGaXQgPT09IHVuZGVmaW5lZCB8fCBzY3JlZW5Db29yZGluYXRlcy5maXQgPiBiZXN0Rml0KSB7XG4gICAgICBiZXN0Rml0ID0gc2NyZWVuQ29vcmRpbmF0ZXMuZml0O1xuICAgICAgYmVzdFBvc2l0aW9uID0ge1xuICAgICAgICBmaXQ6IHNjcmVlbkNvb3JkaW5hdGVzLmZpdCxcbiAgICAgICAgcG9zaXRpb246IGl0ZXJhdGlvblBvc2l0aW9uLFxuICAgICAgICB0b3A6IHNjcmVlbkNvb3JkaW5hdGVzLnRvcCArIHdpbmRvdy5wYWdlWU9mZnNldCxcbiAgICAgICAgbGVmdDogc2NyZWVuQ29vcmRpbmF0ZXMubGVmdCArIHdpbmRvdy5wYWdlWE9mZnNldCxcbiAgICAgICAgYXJyb3c6IHNjcmVlbkNvb3JkaW5hdGVzLmFycm93XG4gICAgICB9OyAvLyBJZiB3ZSd2ZSBhbHJlYWR5IGZvdW5kIHRoZSBpZGVhbCBmaXQsIHVzZSB0aGF0IHBvc2l0aW9uLlxuXG4gICAgICBpZiAoYmVzdEZpdCA9PT0gMSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9IC8vIElmIHdlIGhhdmVuJ3QgaW1wcm92ZWQgdGhlIGZpdCwgdGhlbiBjb250aW51ZSBvbiBhbmQgdHJ5IGEgbmV3IHBvc2l0aW9uLlxuXG4gIH1cblxuICBpZiAoYmVzdFBvc2l0aW9uID09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBjYWxjdWxhdGUgYmVzdFBvc2l0aW9uJyk7XG4gIH1cblxuICBpZiAocmV0dXJuQm91bmRpbmdCb3gpIHtcbiAgICBiZXN0UG9zaXRpb24uYW5jaG9yQm91bmRpbmdCb3ggPSBhbmNob3JCb3VuZGluZ0JveDtcbiAgfVxuXG4gIHJldHVybiBiZXN0UG9zaXRpb247XG59XG5cbi8qKlxuICogR2l2ZW4gYSB0YXJnZXQgcG9zaXRpb24gYW5kIHRoZSBwb3BvdmVyJ3Mgc3Vycm91bmRpbmcgY29udGV4dCwgcmV0dXJucyBlaXRoZXIgYW5cbiAqIG9iamVjdCB3aXRoIHt0b3AsIGxlZnR9IHNjcmVlbiBjb29yZGluYXRlcyBvciBgbnVsbGAgaWYgaXQncyBub3QgcG9zc2libGUgdG8gc2hvd1xuICogY29udGVudCBpbiB0aGUgdGFyZ2V0IHBvc2l0aW9uXG4gKiBAcGFyYW0gcG9zaXRpb24ge3N0cmluZ30gdGhlIHRhcmdldCBwb3NpdGlvbiwgb25lIG9mIFtcInRvcFwiLCBcInJpZ2h0XCIsIFwiYm90dG9tXCIsIFwibGVmdFwiXVxuICogQHBhcmFtIGFsaWduIHtzdHJpbmd9IHRhcmdldCBhbGlnbm1lbnQgb24gdGhlIGNyb3NzLWF4aXMsIG9uZSBvZiBbXCJ0b3BcIiwgXCJyaWdodFwiLCBcImJvdHRvbVwiLCBcImxlZnRcIl1cbiAqIEBwYXJhbSBhbmNob3JCb3VuZGluZ0JveCB7T2JqZWN0fSBib3VuZGluZyBib3ggb2YgdGhlIGFuY2hvciBlbGVtZW50XG4gKiBAcGFyYW0gcG9wb3ZlckJvdW5kaW5nQm94IHtPYmplY3R9IGJvdW5kaW5nIGJveCBvZiB0aGUgcG9wb3ZlciBlbGVtZW50XG4gKiBAcGFyYW0gd2luZG93Qm91bmRpbmdCb3gge09iamVjdH0gYm91bmRpbmcgYm94IG9mIHRoZSB3aW5kb3dcbiAqIEBwYXJhbSBjb250YWluZXJCb3VuZGluZ0JveCB7T2JqZWN0fSBib3VuZGluZyBib3ggb2YgdGhlIGNvbnRhaW5lclxuICogQHBhcmFtIFthcnJvd0NvbmZpZ10ge3thcnJvd1dpZHRoOiBudW1iZXIsIGFycm93QnVmZmVyOiBudW1iZXJ9fSBJZiBwcmVzZW50LCBkZXNjcmliZXMgdGhlIHNpemUgJlxuICogIGNvbnN0cmFpbnRzIGZvciBhbiBhcnJvdyBlbGVtZW50LCBhbmQgdGhlIGZ1bmN0aW9uIHJldHVybiB2YWx1ZSB3aWxsIGluY2x1ZGUgYW4gYGFycm93YCBwYXJhbVxuICogIHdpdGggcG9zaXRpb24gZGV0YWlsc1xuICogQHBhcmFtIFtvZmZzZXQ9MF0ge251bWJlcn0gRGlzdGFuY2UgYmV0d2VlbiB0aGUgcG9wb3ZlciBhbmQgdGhlIGFuY2hvclxuICogQHBhcmFtIFtidWZmZXI9MF0ge251bWJlcn0gTWluaW11bSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBwb3BvdmVyJ3NcbiAqICBwbGFjZW1lbnQgYW5kIHRoZSBjb250YWluZXIgZWRnZVxuICpcbiAqIEByZXR1cm5zIHtHZXRQb3BvdmVyU2NyZWVuQ29vcmRpbmF0ZXNSZXN1bHR9XG4gKiAgb2JqZWN0IHdpdGggdG9wL2xlZnQgY29vcmRpbmF0ZXMsIHRoZSBwb3BvdmVyJ3MgcmVsYXRpdmUgcG9zaXRpb24gdG8gdGhlIGFuY2hvciwgYW5kIGhvdyB3ZWxsIHRoZVxuICogIHBvcG92ZXIgZml0cyBpbiB0aGUgbG9jYXRpb24gKDAuMCAtPiAxLjApIGNvb3JkaW5hdGVzIGFuZCB0aGUgcG9wb3ZlcidzIHJlbGF0aXZlIHBvc2l0aW9uLCBpZlxuICogIHRoZXJlIGlzIG5vIHJvb20gaW4gdGhpcyBwbGFjZW1lbnQgdGhlbiBudWxsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQb3BvdmVyU2NyZWVuQ29vcmRpbmF0ZXMoX3JlZjIpIHtcbiAgdmFyIF9wb3BvdmVyUGxhY2VtZW50LCBfcmVmMztcblxuICB2YXIgcG9zaXRpb24gPSBfcmVmMi5wb3NpdGlvbixcbiAgICAgIGFsaWduID0gX3JlZjIuYWxpZ24sXG4gICAgICBhbmNob3JCb3VuZGluZ0JveCA9IF9yZWYyLmFuY2hvckJvdW5kaW5nQm94LFxuICAgICAgcG9wb3ZlckJvdW5kaW5nQm94ID0gX3JlZjIucG9wb3ZlckJvdW5kaW5nQm94LFxuICAgICAgd2luZG93Qm91bmRpbmdCb3ggPSBfcmVmMi53aW5kb3dCb3VuZGluZ0JveCxcbiAgICAgIGNvbnRhaW5lckJvdW5kaW5nQm94ID0gX3JlZjIuY29udGFpbmVyQm91bmRpbmdCb3gsXG4gICAgICBhcnJvd0NvbmZpZyA9IF9yZWYyLmFycm93Q29uZmlnLFxuICAgICAgX3JlZjIkb2Zmc2V0ID0gX3JlZjIub2Zmc2V0LFxuICAgICAgb2Zmc2V0ID0gX3JlZjIkb2Zmc2V0ID09PSB2b2lkIDAgPyAwIDogX3JlZjIkb2Zmc2V0LFxuICAgICAgX3JlZjIkYnVmZmVyID0gX3JlZjIuYnVmZmVyLFxuICAgICAgYnVmZmVyID0gX3JlZjIkYnVmZmVyID09PSB2b2lkIDAgPyAwIDogX3JlZjIkYnVmZmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgZ29hbCBpcyB0byBmaW5kIHRoZSBiZXN0IHdheSB0byBhbGlnbiB0aGUgcG9wb3ZlciBjb250ZW50XG4gICAqIG9uIHRoZSBnaXZlbiBzaWRlIG9mIHRoZSBhbmNob3IgZWxlbWVudC4gVGhlIHBvcG92ZXIgcHJlZmVyc1xuICAgKiBjZW50ZXJpbmcgb24gdGhlIGFuY2hvciBidXQgY2FuIHNoaWZ0IGFsb25nIHRoZSBjcm9zcy1heGlzIGFzIG5lZWRlZC5cbiAgICpcbiAgICogV2UgcmV0dXJuIHRoZSB0b3AvbGVmdCBjb29yZGluYXRlcyB0aGF0IGJlc3QgZml0IHRoZSBwb3BvdmVyIGluc2lkZVxuICAgKiB0aGUgZ2l2ZW4gYm91bmRhcmllcywgYW5kIGFsc28gcmV0dXJuIHRoZSBgZml0YCB2YWx1ZSB3aGljaCBpbmRpY2F0ZXNcbiAgICogd2hhdCBwZXJjZW50YWdlIG9mIHRoZSBwb3BvdmVyIGlzIHdpdGhpbiB0aGUgYm91bmRzLlxuICAgKlxuICAgKiBlLmcuIGZpbmRpbmcgYSBsb2NhdGlvbiB3aGVuIHBvc2l0aW9uPXRvcFxuICAgKiB0aGUgcHJlZmVycmVkIGxvY2F0aW9uIGlzIGRpcmVjdGx5IG92ZXIgdGhlIGFuY2hvclxuICAgKlxuICAgKiAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICAqICAgICAgICB8ICAgICAgIHBvcG92ZXIgICAgICAgIHxcbiAgICogICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgKiAgICAgICAgICAgICAgICAgICB2XG4gICAqICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tK1xuICAgKiAgICAgICAgICAgIHwgICAgYW5jaG9yICAgIHxcbiAgICogICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0rXG4gICAqXG4gICAqIGJ1dCBpZiBhbmNob3IgZG9lc24ndCBoYXZlIG11Y2ggKG9yIGFueSkgcm9vbSBvbiBpdHMgcmlkZSBzaWRlXG4gICAqIHRoZSBwb3BvdmVyIHdpbGwgc2hpZnQgdG8gdGhlIGxlZnRcbiAgICpcbiAgICogICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICAqICAgIHwgICAgICAgcG9wb3ZlciAgICAgICAgfFxuICAgKiAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgICogICAgICAgICAgICAgICAgICAgdlxuICAgKiAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLStcbiAgICogICAgICAgICAgICB8ICAgIGFuY2hvciAgICB8XG4gICAqICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tK1xuICAgKlxuICAgKi9cbiAgdmFyIGNyb3NzQXhpc0ZpcnN0U2lkZSA9IHBvc2l0aW9uU3Vic3RpdHV0ZXNbcG9zaXRpb25dOyAvLyBcInRvcFwiIC0+IFwibGVmdFwiXG5cbiAgdmFyIGNyb3NzQXhpc1NlY29uZFNpZGUgPSBwb3NpdGlvbkNvbXBsZW1lbnRzW2Nyb3NzQXhpc0ZpcnN0U2lkZV07IC8vIFwibGVmdFwiIC0+IFwicmlnaHRcIlxuXG4gIHZhciBjcm9zc0F4aXNEaW1lbnNpb24gPSByZWxhdGVkRGltZW5zaW9uW2Nyb3NzQXhpc0ZpcnN0U2lkZV07IC8vIFwibGVmdFwiIC0+IFwid2lkdGhcIlxuXG4gIHZhciBfZ2V0QnVmZmVyVmFsdWVzID0gZ2V0QnVmZmVyVmFsdWVzKGJ1ZmZlciksXG4gICAgICBfZ2V0QnVmZmVyVmFsdWVzMiA9IF9zbGljZWRUb0FycmF5KF9nZXRCdWZmZXJWYWx1ZXMsIDQpLFxuICAgICAgdG9wQnVmZmVyID0gX2dldEJ1ZmZlclZhbHVlczJbMF0sXG4gICAgICByaWdodEJ1ZmZlciA9IF9nZXRCdWZmZXJWYWx1ZXMyWzFdLFxuICAgICAgYm90dG9tQnVmZmVyID0gX2dldEJ1ZmZlclZhbHVlczJbMl0sXG4gICAgICBsZWZ0QnVmZmVyID0gX2dldEJ1ZmZlclZhbHVlczJbM107XG5cbiAgdmFyIF9nZXRDcm9zc0F4aXNQb3NpdGlvbiA9IGdldENyb3NzQXhpc1Bvc2l0aW9uKHtcbiAgICBjcm9zc0F4aXNGaXJzdFNpZGU6IGNyb3NzQXhpc0ZpcnN0U2lkZSxcbiAgICBjcm9zc0F4aXNTZWNvbmRTaWRlOiBjcm9zc0F4aXNTZWNvbmRTaWRlLFxuICAgIGNyb3NzQXhpc0RpbWVuc2lvbjogY3Jvc3NBeGlzRGltZW5zaW9uLFxuICAgIHBvc2l0aW9uOiBwb3NpdGlvbixcbiAgICBhbGlnbjogYWxpZ24sXG4gICAgYnVmZmVyOiBidWZmZXIsXG4gICAgb2Zmc2V0OiBvZmZzZXQsXG4gICAgd2luZG93Qm91bmRpbmdCb3g6IHdpbmRvd0JvdW5kaW5nQm94LFxuICAgIGNvbnRhaW5lckJvdW5kaW5nQm94OiBjb250YWluZXJCb3VuZGluZ0JveCxcbiAgICBwb3BvdmVyQm91bmRpbmdCb3g6IHBvcG92ZXJCb3VuZGluZ0JveCxcbiAgICBhbmNob3JCb3VuZGluZ0JveDogYW5jaG9yQm91bmRpbmdCb3gsXG4gICAgYXJyb3dDb25maWc6IGFycm93Q29uZmlnXG4gIH0pLFxuICAgICAgY3Jvc3NBeGlzUG9zaXRpb24gPSBfZ2V0Q3Jvc3NBeGlzUG9zaXRpb24uY3Jvc3NBeGlzUG9zaXRpb24sXG4gICAgICBjcm9zc0F4aXNBcnJvd1Bvc2l0aW9uID0gX2dldENyb3NzQXhpc1Bvc2l0aW9uLmNyb3NzQXhpc0Fycm93UG9zaXRpb247XG5cbiAgdmFyIHByaW1hcnlBeGlzRGltZW5zaW9uID0gcmVsYXRlZERpbWVuc2lvbltwb3NpdGlvbl07IC8vIFwidG9wXCIgLT4gXCJoZWlnaHRcIlxuXG4gIHZhciBwcmltYXJ5QXhpc1Bvc2l0aW9uTmFtZSA9IGRpbWVuc2lvblBvc2l0aW9uQXR0cmlidXRlW3ByaW1hcnlBeGlzRGltZW5zaW9uXTsgLy8gXCJoZWlnaHRcIiAtPiBcInRvcFwiXG5cbiAgdmFyIF9nZXRQcmltYXJ5QXhpc1Bvc2l0aSA9IGdldFByaW1hcnlBeGlzUG9zaXRpb24oe1xuICAgIHBvc2l0aW9uOiBwb3NpdGlvbixcbiAgICBvZmZzZXQ6IG9mZnNldCxcbiAgICBwb3BvdmVyQm91bmRpbmdCb3g6IHBvcG92ZXJCb3VuZGluZ0JveCxcbiAgICBhbmNob3JCb3VuZGluZ0JveDogYW5jaG9yQm91bmRpbmdCb3gsXG4gICAgYXJyb3dDb25maWc6IGFycm93Q29uZmlnXG4gIH0pLFxuICAgICAgcHJpbWFyeUF4aXNQb3NpdGlvbiA9IF9nZXRQcmltYXJ5QXhpc1Bvc2l0aS5wcmltYXJ5QXhpc1Bvc2l0aW9uLFxuICAgICAgcHJpbWFyeUF4aXNBcnJvd1Bvc2l0aW9uID0gX2dldFByaW1hcnlBeGlzUG9zaXRpLnByaW1hcnlBeGlzQXJyb3dQb3NpdGlvbjtcblxuICB2YXIgcG9wb3ZlclBsYWNlbWVudCA9IChfcG9wb3ZlclBsYWNlbWVudCA9IHt9LCBfZGVmaW5lUHJvcGVydHkoX3BvcG92ZXJQbGFjZW1lbnQsIGNyb3NzQXhpc0ZpcnN0U2lkZSwgY3Jvc3NBeGlzUG9zaXRpb24pLCBfZGVmaW5lUHJvcGVydHkoX3BvcG92ZXJQbGFjZW1lbnQsIHByaW1hcnlBeGlzUG9zaXRpb25OYW1lLCBwcmltYXJ5QXhpc1Bvc2l0aW9uKSwgX3BvcG92ZXJQbGFjZW1lbnQpOyAvLyBjYWxjdWxhdGUgdGhlIGZpdCBvZiB0aGUgcG9wb3ZlciBpbiB0aGlzIGxvY2F0aW9uXG4gIC8vIGZpdCBpcyBpbiByYW5nZSAwLjAgLT4gMS4wIGFuZCBpcyB0aGUgcGVyY2VudGFnZSBvZiB0aGUgcG9wb3ZlciB3aGljaCBpcyB2aXNpYmxlIGluIHRoaXMgbG9jYXRpb25cblxuICB2YXIgY29tYmluZWRCb3VuZGluZ0JveCA9IGludGVyc2VjdEJvdW5kaW5nQm94ZXMod2luZG93Qm91bmRpbmdCb3gsIGNvbnRhaW5lckJvdW5kaW5nQm94KTsgLy8gc2hyaW5rIHRoZSB2aXNpYmxlIGJvdW5kaW5nIGJveCBieSBgYnVmZmVyYFxuICAvLyB0byBjb21wdXRlIGEgZml0IHZhbHVlXG5cbiAgY29tYmluZWRCb3VuZGluZ0JveC50b3AgKz0gdG9wQnVmZmVyO1xuICBjb21iaW5lZEJvdW5kaW5nQm94LnJpZ2h0IC09IHJpZ2h0QnVmZmVyO1xuICBjb21iaW5lZEJvdW5kaW5nQm94LmJvdHRvbSAtPSBib3R0b21CdWZmZXI7XG4gIGNvbWJpbmVkQm91bmRpbmdCb3gubGVmdCArPSBsZWZ0QnVmZmVyO1xuICB2YXIgZml0ID0gZ2V0VmlzaWJsZUZpdCh7XG4gICAgdG9wOiBwb3BvdmVyUGxhY2VtZW50LnRvcCxcbiAgICByaWdodDogcG9wb3ZlclBsYWNlbWVudC5sZWZ0ICsgcG9wb3ZlckJvdW5kaW5nQm94LndpZHRoLFxuICAgIGJvdHRvbTogcG9wb3ZlclBsYWNlbWVudC50b3AgKyBwb3BvdmVyQm91bmRpbmdCb3guaGVpZ2h0LFxuICAgIGxlZnQ6IHBvcG92ZXJQbGFjZW1lbnQubGVmdCxcbiAgICB3aWR0aDogcG9wb3ZlckJvdW5kaW5nQm94LndpZHRoLFxuICAgIGhlaWdodDogcG9wb3ZlckJvdW5kaW5nQm94LmhlaWdodFxuICB9LCBjb21iaW5lZEJvdW5kaW5nQm94KTtcbiAgdmFyIGFycm93ID0gYXJyb3dDb25maWcgPyAoX3JlZjMgPSB7fSwgX2RlZmluZVByb3BlcnR5KF9yZWYzLCBjcm9zc0F4aXNGaXJzdFNpZGUsIGNyb3NzQXhpc0Fycm93UG9zaXRpb24gLSBwb3BvdmVyUGxhY2VtZW50W2Nyb3NzQXhpc0ZpcnN0U2lkZV0pLCBfZGVmaW5lUHJvcGVydHkoX3JlZjMsIHByaW1hcnlBeGlzUG9zaXRpb25OYW1lLCBwcmltYXJ5QXhpc0Fycm93UG9zaXRpb24pLCBfcmVmMykgOiB1bmRlZmluZWQ7XG4gIHJldHVybiB7XG4gICAgZml0OiBmaXQsXG4gICAgdG9wOiBwb3BvdmVyUGxhY2VtZW50LnRvcCxcbiAgICBsZWZ0OiBwb3BvdmVyUGxhY2VtZW50LmxlZnQsXG4gICAgYXJyb3c6IGFycm93ID8ge1xuICAgICAgbGVmdDogYXJyb3cubGVmdCxcbiAgICAgIHRvcDogYXJyb3cudG9wXG4gICAgfSA6IHVuZGVmaW5lZFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRDcm9zc0F4aXNQb3NpdGlvbihfcmVmNCkge1xuICB2YXIgY3Jvc3NBeGlzRmlyc3RTaWRlID0gX3JlZjQuY3Jvc3NBeGlzRmlyc3RTaWRlLFxuICAgICAgY3Jvc3NBeGlzU2Vjb25kU2lkZSA9IF9yZWY0LmNyb3NzQXhpc1NlY29uZFNpZGUsXG4gICAgICBjcm9zc0F4aXNEaW1lbnNpb24gPSBfcmVmNC5jcm9zc0F4aXNEaW1lbnNpb24sXG4gICAgICBwb3NpdGlvbiA9IF9yZWY0LnBvc2l0aW9uLFxuICAgICAgYWxpZ24gPSBfcmVmNC5hbGlnbixcbiAgICAgIGJ1ZmZlciA9IF9yZWY0LmJ1ZmZlcixcbiAgICAgIG9mZnNldCA9IF9yZWY0Lm9mZnNldCxcbiAgICAgIHdpbmRvd0JvdW5kaW5nQm94ID0gX3JlZjQud2luZG93Qm91bmRpbmdCb3gsXG4gICAgICBjb250YWluZXJCb3VuZGluZ0JveCA9IF9yZWY0LmNvbnRhaW5lckJvdW5kaW5nQm94LFxuICAgICAgcG9wb3ZlckJvdW5kaW5nQm94ID0gX3JlZjQucG9wb3ZlckJvdW5kaW5nQm94LFxuICAgICAgYW5jaG9yQm91bmRpbmdCb3ggPSBfcmVmNC5hbmNob3JCb3VuZGluZ0JveCxcbiAgICAgIGFycm93Q29uZmlnID0gX3JlZjQuYXJyb3dDb25maWc7XG4gIC8vIGhvdyBtdWNoIG9mIHRoZSBwb3BvdmVyIG92ZXJmbG93cyBwYXN0IGVpdGhlciBzaWRlIG9mIHRoZSBhbmNob3IgaWYgaXRzIGNlbnRlcmVkXG4gIHZhciBwb3BvdmVyU2l6ZU9uQ3Jvc3NBeGlzID0gcG9wb3ZlckJvdW5kaW5nQm94W2Nyb3NzQXhpc0RpbWVuc2lvbl07XG4gIHZhciBhbmNob3JTaXplT25Dcm9zc0F4aXMgPSBhbmNob3JCb3VuZGluZ0JveFtjcm9zc0F4aXNEaW1lbnNpb25dO1xuICB2YXIgYW5jaG9ySGFsZlNpemUgPSBhbmNob3JTaXplT25Dcm9zc0F4aXMgLyAyOyAvLyB0aGUgcG9wb3ZlcidzIG9yaWdpbmFsIHBvc2l0aW9uIG9uIHRoZSBjcm9zcy1heGlzIGlzIGRldGVybWluZWQgYnk6XG5cbiAgdmFyIGNyb3NzQXhpc1Bvc2l0aW9uT3JpZ2luYWwgPSBhbmNob3JCb3VuZGluZ0JveFtjcm9zc0F4aXNGaXJzdFNpZGVdICsgLy8gd2hlcmUgdGhlIGFuY2hvciBpcyBsb2NhdGVkXG4gIGFuY2hvckhhbGZTaXplIC0gLy8gcGx1cyBoYWxmIGFuY2hvciBkaW1lbnNpb25cbiAgcG9wb3ZlclNpemVPbkNyb3NzQXhpcyAvIDI7IC8vIGxlc3MgaGFsZiB0aGUgcG9wb3ZlciBkaW1lbnNpb25cbiAgLy8gVG8gZml0IHRoZSBjb250ZW50IHdpdGhpbiBib3RoIHRoZSB3aW5kb3cgYW5kIGNvbnRhaW5lcixcbiAgLy8gY29tcHV0ZSB0aGUgc21hbGxlciBvZiB0aGUgdHdvIHNwYWNlcyBhbG9uZyBlYWNoIGVkZ2VcblxuICB2YXIgY29tYmluZWRCb3VuZGluZ0JveCA9IGludGVyc2VjdEJvdW5kaW5nQm94ZXMod2luZG93Qm91bmRpbmdCb3gsIGNvbnRhaW5lckJvdW5kaW5nQm94KTtcbiAgdmFyIGF2YWlsYWJsZVNwYWNlID0gZ2V0QXZhaWxhYmxlU3BhY2UoYW5jaG9yQm91bmRpbmdCb3gsIGNvbWJpbmVkQm91bmRpbmdCb3gsIGJ1ZmZlciwgb2Zmc2V0LCBwb3NpdGlvbik7XG4gIHZhciBtaW5pbXVtU3BhY2UgPSBhcnJvd0NvbmZpZyA/IGFycm93Q29uZmlnLmFycm93QnVmZmVyIDogMDtcbiAgdmFyIGNvbnRlbnRPdmVyZmxvd1NpemUgPSAocG9wb3ZlclNpemVPbkNyb3NzQXhpcyAtIGFuY2hvclNpemVPbkNyb3NzQXhpcykgLyAyO1xuICB2YXIgYWxpZ25BbW91bnQgPSAwO1xuICB2YXIgYWxpZ25EaXJlY3Rpb24gPSAxO1xuICB2YXIgYW1vdW50T2ZTaGlmdE5lZWRlZCA9IDA7XG4gIHZhciBzaGlmdERpcmVjdGlvbiA9IDE7XG5cbiAgaWYgKGFsaWduICE9IG51bGwpIHtcbiAgICAvLyBubyBhbGlnbm1lbnQsIGZpbmQgaG93IG11Y2ggdGhlIGNvbnRhaW5lciBib3VuZGFyeSByZXF1aXJlcyB0aGUgY29udGVudCB0byBzaGlmdFxuICAgIGFsaWduRGlyZWN0aW9uID0gYWxpZ24gPT09ICd0b3AnIHx8IGFsaWduID09PSAnbGVmdCcgPyAxIDogLTE7XG4gICAgYWxpZ25BbW91bnQgPSBjb250ZW50T3ZlcmZsb3dTaXplO1xuICAgIHZhciBhbGlnbmVkT3ZlcmZsb3dBbW91bnQgPSBjb250ZW50T3ZlcmZsb3dTaXplICsgYWxpZ25BbW91bnQ7XG4gICAgdmFyIG5lZWRzU2hpZnQgPSBhbGlnbmVkT3ZlcmZsb3dBbW91bnQgPiBhdmFpbGFibGVTcGFjZVtwb3NpdGlvbkNvbXBsZW1lbnRzW2FsaWduXV07XG4gICAgYW1vdW50T2ZTaGlmdE5lZWRlZCA9IG5lZWRzU2hpZnQgPyBhbGlnbmVkT3ZlcmZsb3dBbW91bnQgLSBhdmFpbGFibGVTcGFjZVtwb3NpdGlvbkNvbXBsZW1lbnRzW2FsaWduXV0gOiAwO1xuICAgIHNoaWZ0RGlyZWN0aW9uID0gLTEgKiBhbGlnbkRpcmVjdGlvbjtcbiAgfSBlbHNlIHtcbiAgICAvLyBzaGlmdGluZyB0aGUgcG9wb3ZlciB0byBvbmUgc2lkZSBtYXkgeWllbGQgYSBiZXR0ZXIgZml0XG4gICAgdmFyIHNwYWNlQXZhaWxhYmxlT25GaXJzdFNpZGUgPSBhdmFpbGFibGVTcGFjZVtjcm9zc0F4aXNGaXJzdFNpZGVdO1xuICAgIHZhciBzcGFjZUF2YWlsYWJsZU9uU2Vjb25kU2lkZSA9IGF2YWlsYWJsZVNwYWNlW2Nyb3NzQXhpc1NlY29uZFNpZGVdO1xuICAgIHZhciBpc1NoaWZ0VG93YXJkRmlyc3RTaWRlID0gc3BhY2VBdmFpbGFibGVPbkZpcnN0U2lkZSA+IHNwYWNlQXZhaWxhYmxlT25TZWNvbmRTaWRlO1xuICAgIHNoaWZ0RGlyZWN0aW9uID0gaXNTaGlmdFRvd2FyZEZpcnN0U2lkZSA/IC0xIDogMTsgLy8gZGV0ZXJtaW5lIHdoaWNoIGRpcmVjdGlvbiBoYXMgbW9yZSByb29tIGFuZCB0aGUgcG9wb3ZlciBzaG91bGQgc2hpZnQgdG9cblxuICAgIHZhciBsZWFzdEF2YWlsYWJsZVNwYWNlID0gTWF0aC5taW4oc3BhY2VBdmFpbGFibGVPbkZpcnN0U2lkZSwgc3BhY2VBdmFpbGFibGVPblNlY29uZFNpZGUpO1xuXG4gICAgdmFyIF9uZWVkc1NoaWZ0ID0gY29udGVudE92ZXJmbG93U2l6ZSA+IGxlYXN0QXZhaWxhYmxlU3BhY2U7XG5cbiAgICBhbW91bnRPZlNoaWZ0TmVlZGVkID0gX25lZWRzU2hpZnQgPyBjb250ZW50T3ZlcmZsb3dTaXplIC0gbGVhc3RBdmFpbGFibGVTcGFjZSA6IDA7XG4gIH0gLy8gc2hpZnQgb3ZlciB0aGUgcG9wb3ZlciBpZiBuZWNlc3NhcnlcblxuXG4gIHZhciBzaGlmdEFtb3VudCA9IGFtb3VudE9mU2hpZnROZWVkZWQgKiBzaGlmdERpcmVjdGlvbjtcbiAgdmFyIGNyb3NzQXhpc1Bvc2l0aW9uID0gY3Jvc3NBeGlzUG9zaXRpb25PcmlnaW5hbCArIHNoaWZ0QW1vdW50ICsgYWxpZ25BbW91bnQgKiBhbGlnbkRpcmVjdGlvbjsgLy8gaWYgYW4gYGFycm93Q29uZmlnYCBpcyBzcGVjaWZpZWQsIGZpbmQgd2hlcmUgdG8gcG9zaXRpb24gdGhlIGFycm93XG5cbiAgdmFyIGNyb3NzQXhpc0Fycm93UG9zaXRpb247XG5cbiAgaWYgKGFycm93Q29uZmlnKSB7XG4gICAgdmFyIGFycm93V2lkdGggPSBhcnJvd0NvbmZpZy5hcnJvd1dpZHRoO1xuICAgIGNyb3NzQXhpc0Fycm93UG9zaXRpb24gPSBhbmNob3JCb3VuZGluZ0JveFtjcm9zc0F4aXNGaXJzdFNpZGVdICsgYW5jaG9ySGFsZlNpemUgLSBhcnJvd1dpZHRoIC8gMjsgLy8gbWFrZSBzdXJlIHRoZXJlJ3MgZW5vdWdoIGJ1ZmZlciBhcm91bmQgdGhlIGFycm93XG4gICAgLy8gYnkgY2FsY3VsYXRpbmcgaG93IGhvdyBtdWNoIHRoZSBhcnJvdyB3b3VsZCBuZWVkIHRvIG1vdmVcbiAgICAvLyBidXQgaW5zdGVhZCBvZiBtb3ZpbmcgdGhlIGFycm93LCBzaGlmdCB0aGUgcG9wb3ZlciBjb250ZW50XG5cbiAgICBpZiAoY3Jvc3NBeGlzQXJyb3dQb3NpdGlvbiA8IGNyb3NzQXhpc1Bvc2l0aW9uICsgbWluaW11bVNwYWNlKSB7XG4gICAgICAvLyBhcnJvdyBpcyB0b28gY2xvc2UgdG8gdGhlIG1pbmltdW0gc2lkZVxuICAgICAgdmFyIGRpZmZlcmVuY2UgPSBjcm9zc0F4aXNQb3NpdGlvbiArIG1pbmltdW1TcGFjZSAtIGNyb3NzQXhpc0Fycm93UG9zaXRpb247XG4gICAgICBjcm9zc0F4aXNQb3NpdGlvbiAtPSBkaWZmZXJlbmNlO1xuICAgIH0gZWxzZSBpZiAoY3Jvc3NBeGlzQXJyb3dQb3NpdGlvbiArIG1pbmltdW1TcGFjZSArIGFycm93V2lkdGggPiBjcm9zc0F4aXNQb3NpdGlvbiArIHBvcG92ZXJTaXplT25Dcm9zc0F4aXMpIHtcbiAgICAgIC8vIGFycm93IGlzIHRvbyBjbG9zZSB0byB0aGUgbWF4aW11bSBzaWRlXG4gICAgICB2YXIgZWRnZSA9IGNyb3NzQXhpc1Bvc2l0aW9uICsgcG9wb3ZlclNpemVPbkNyb3NzQXhpcztcblxuICAgICAgdmFyIF9kaWZmZXJlbmNlID0gY3Jvc3NBeGlzQXJyb3dQb3NpdGlvbiAtIChlZGdlIC0gbWluaW11bVNwYWNlIC0gYXJyb3dXaWR0aCk7XG5cbiAgICAgIGNyb3NzQXhpc1Bvc2l0aW9uICs9IF9kaWZmZXJlbmNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgY3Jvc3NBeGlzUG9zaXRpb246IGNyb3NzQXhpc1Bvc2l0aW9uLFxuICAgIGNyb3NzQXhpc0Fycm93UG9zaXRpb246IGNyb3NzQXhpc0Fycm93UG9zaXRpb25cbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0UHJpbWFyeUF4aXNQb3NpdGlvbihfcmVmNSkge1xuICB2YXIgcG9zaXRpb24gPSBfcmVmNS5wb3NpdGlvbixcbiAgICAgIG9mZnNldCA9IF9yZWY1Lm9mZnNldCxcbiAgICAgIHBvcG92ZXJCb3VuZGluZ0JveCA9IF9yZWY1LnBvcG92ZXJCb3VuZGluZ0JveCxcbiAgICAgIGFuY2hvckJvdW5kaW5nQm94ID0gX3JlZjUuYW5jaG9yQm91bmRpbmdCb3gsXG4gICAgICBhcnJvd0NvbmZpZyA9IF9yZWY1LmFycm93Q29uZmlnO1xuICAvLyBpZiBwb3NpdGlvbmluZyB0byB0aGUgdG9wIG9yIGxlZnQsIHRoZSB0YXJnZXQgcG9zaXRpb24gZGVjcmVhc2VzXG4gIC8vIGZyb20gdGhlIGFuY2hvcidzIHRvcCBvciBsZWZ0LCBvdGhlcndpc2UgdGhlIHBvc2l0aW9uIGFkZHMgdG8gdGhlIGFuY2hvcidzXG4gIHZhciBpc09mZnNldERlY3JlYXNpbmcgPSBwb3NpdGlvbiA9PT0gJ3RvcCcgfHwgcG9zaXRpb24gPT09ICdsZWZ0JztcbiAgdmFyIHByaW1hcnlBeGlzRGltZW5zaW9uID0gcmVsYXRlZERpbWVuc2lvbltwb3NpdGlvbl07IC8vIFwidG9wXCIgLT4gXCJoZWlnaHRcIlxuXG4gIHZhciBwb3BvdmVyU2l6ZU9uUHJpbWFyeUF4aXMgPSBwb3BvdmVyQm91bmRpbmdCb3hbcHJpbWFyeUF4aXNEaW1lbnNpb25dOyAvLyBzdGFydCBhdCB0aGUgdG9wIG9yIGxlZnQgZWRnZSBvZiB0aGUgYW5jaG9yIGVsZW1lbnRcblxuICB2YXIgcHJpbWFyeUF4aXNQb3NpdGlvbk5hbWUgPSBkaW1lbnNpb25Qb3NpdGlvbkF0dHJpYnV0ZVtwcmltYXJ5QXhpc0RpbWVuc2lvbl07IC8vIFwiaGVpZ2h0XCIgLT4gXCJ0b3BcIlxuXG4gIHZhciBhbmNob3JFZGdlT3JpZ2luID0gYW5jaG9yQm91bmRpbmdCb3hbcHJpbWFyeUF4aXNQb3NpdGlvbk5hbWVdOyAvLyBmaW5kIHRoZSBwb3BvdmVyIHBvc2l0aW9uIG9uIHRoZSBwcmltYXJ5IGF4aXNcblxuICB2YXIgYW5jaG9yU2l6ZU9uUHJpbWFyeUF4aXMgPSBhbmNob3JCb3VuZGluZ0JveFtwcmltYXJ5QXhpc0RpbWVuc2lvbl07XG4gIHZhciBwcmltYXJ5QXhpc09mZnNldCA9IGlzT2Zmc2V0RGVjcmVhc2luZyA/IHBvcG92ZXJTaXplT25QcmltYXJ5QXhpcyA6IGFuY2hvclNpemVPblByaW1hcnlBeGlzO1xuICB2YXIgY29udGVudE9mZnNldCA9IChvZmZzZXQgKyBwcmltYXJ5QXhpc09mZnNldCkgKiAoaXNPZmZzZXREZWNyZWFzaW5nID8gLTEgOiAxKTtcbiAgdmFyIHByaW1hcnlBeGlzUG9zaXRpb24gPSBhbmNob3JFZGdlT3JpZ2luICsgY29udGVudE9mZnNldDtcbiAgdmFyIHByaW1hcnlBeGlzQXJyb3dQb3NpdGlvbjtcblxuICBpZiAoYXJyb3dDb25maWcpIHtcbiAgICBwcmltYXJ5QXhpc0Fycm93UG9zaXRpb24gPSBpc09mZnNldERlY3JlYXNpbmcgPyBwb3BvdmVyU2l6ZU9uUHJpbWFyeUF4aXMgOiAwO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBwcmltYXJ5QXhpc1Bvc2l0aW9uOiBwcmltYXJ5QXhpc1Bvc2l0aW9uLFxuICAgIHByaW1hcnlBeGlzQXJyb3dQb3NpdGlvbjogcHJpbWFyeUF4aXNBcnJvd1Bvc2l0aW9uXG4gIH07XG59XG4vKipcbiAqIEZpbmRzIHRoZSBjbGllbnQgcGl4ZWwgY29vcmRpbmF0ZSBvZiBlYWNoIGVkZ2UgZm9yIHRoZSBlbGVtZW50J3MgYm91bmRpbmcgYm94LFxuICogYW5kIHRoZSBib3VuZGluZyBib3gncyB3aWR0aCAmIGhlaWdodFxuICpcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEByZXR1cm5zIHt7dG9wOiBudW1iZXIsIHJpZ2h0OiBudW1iZXIsIGJvdHRvbTogbnVtYmVyLCBsZWZ0OiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCB3aWR0aDogbnVtYmVyfX1cbiAqL1xuXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbGVtZW50Qm91bmRpbmdCb3goZWxlbWVudCkge1xuICB2YXIgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIHJldHVybiB7XG4gICAgdG9wOiByZWN0LnRvcCxcbiAgICByaWdodDogcmVjdC5yaWdodCxcbiAgICBib3R0b206IHJlY3QuYm90dG9tLFxuICAgIGxlZnQ6IHJlY3QubGVmdCxcbiAgICBoZWlnaHQ6IHJlY3QuaGVpZ2h0LFxuICAgIHdpZHRoOiByZWN0LndpZHRoXG4gIH07XG59XG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGF2YWlsYWJsZSBjb250ZW50IHNwYWNlIGJldHdlZW4gYW5jaG9yIGFuZCBjb250YWluZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gYW5jaG9yQm91bmRpbmdCb3ggQ2xpZW50IGJvdW5kaW5nIGJveCBvZiB0aGUgYW5jaG9yIGVsZW1lbnRcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250YWluZXJCb3VuZGluZ0JveCBDbGllbnQgYm91bmRpbmcgYm94IG9mIHRoZSBjb250YWluZXIgZWxlbWVudFxuICogQHBhcmFtIHtudW1iZXJ9IGJ1ZmZlciBNaW5pbXVtIGRpc3RhbmNlIGJldHdlZW4gdGhlIHBvcG92ZXIgYW5kIHRoZSBib3VuZGluZyBjb250YWluZXJcbiAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXQgRGlzdGFuY2UgYmV0d2VlbiB0aGUgcG9wb3ZlciBhbmQgdGhlIGFuY2hvclxuICogQHBhcmFtIHtzdHJpbmd9IG9mZnNldFNpZGUgU2lkZSB0aGUgb2Zmc2V0IG5lZWRzIHRvIGJlIGFwcGxpZWQgdG8sIG9uZVxuICogIG9mIFtcInRvcFwiLCBcInJpZ2h0XCIsIFwiYm90dG9tXCIsIFwibGVmdFwiXVxuICogQHJldHVybnMge3t0b3A6IG51bWJlciwgcmlnaHQ6IG51bWJlciwgYm90dG9tOiBudW1iZXIsIGxlZnQ6IG51bWJlcn19XG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEF2YWlsYWJsZVNwYWNlKGFuY2hvckJvdW5kaW5nQm94LCBjb250YWluZXJCb3VuZGluZ0JveCwgYnVmZmVyLCBvZmZzZXQsIG9mZnNldFNpZGUpIHtcbiAgdmFyIF9nZXRCdWZmZXJWYWx1ZXMzID0gZ2V0QnVmZmVyVmFsdWVzKGJ1ZmZlciksXG4gICAgICBfZ2V0QnVmZmVyVmFsdWVzNCA9IF9zbGljZWRUb0FycmF5KF9nZXRCdWZmZXJWYWx1ZXMzLCA0KSxcbiAgICAgIHRvcEJ1ZmZlciA9IF9nZXRCdWZmZXJWYWx1ZXM0WzBdLFxuICAgICAgcmlnaHRCdWZmZXIgPSBfZ2V0QnVmZmVyVmFsdWVzNFsxXSxcbiAgICAgIGJvdHRvbUJ1ZmZlciA9IF9nZXRCdWZmZXJWYWx1ZXM0WzJdLFxuICAgICAgbGVmdEJ1ZmZlciA9IF9nZXRCdWZmZXJWYWx1ZXM0WzNdO1xuXG4gIHJldHVybiB7XG4gICAgdG9wOiBhbmNob3JCb3VuZGluZ0JveC50b3AgLSBjb250YWluZXJCb3VuZGluZ0JveC50b3AgLSB0b3BCdWZmZXIgLSAob2Zmc2V0U2lkZSA9PT0gJ3RvcCcgPyBvZmZzZXQgOiAwKSxcbiAgICByaWdodDogY29udGFpbmVyQm91bmRpbmdCb3gucmlnaHQgLSBhbmNob3JCb3VuZGluZ0JveC5yaWdodCAtIHJpZ2h0QnVmZmVyIC0gKG9mZnNldFNpZGUgPT09ICdyaWdodCcgPyBvZmZzZXQgOiAwKSxcbiAgICBib3R0b206IGNvbnRhaW5lckJvdW5kaW5nQm94LmJvdHRvbSAtIGFuY2hvckJvdW5kaW5nQm94LmJvdHRvbSAtIGJvdHRvbUJ1ZmZlciAtIChvZmZzZXRTaWRlID09PSAnYm90dG9tJyA/IG9mZnNldCA6IDApLFxuICAgIGxlZnQ6IGFuY2hvckJvdW5kaW5nQm94LmxlZnQgLSBjb250YWluZXJCb3VuZGluZ0JveC5sZWZ0IC0gbGVmdEJ1ZmZlciAtIChvZmZzZXRTaWRlID09PSAnbGVmdCcgPyBvZmZzZXQgOiAwKVxuICB9O1xufVxuLyoqXG4gKiBDb21wdXRlcyB0aGUgZml0IChvdmVybGFwKSBvZiB0aGUgY29udGVudCB3aXRoaW4gdGhlIGNvbnRhaW5lciwgZml0IGlzIGluIHJhbmdlIDAuMCA9PiAxLjBcbiAqIEBwYXJhbSBjb250ZW50Qm91bmRpbmdCb3ggYm91bmRpbmcgYm94IG9mIGNvbnRlbnQgdG8gY2FsY3VsYXRlIGZpdCBmb3JcbiAqIEBwYXJhbSBjb250YWluZXJCb3VuZGluZ0JveCBib3VuZGluZyBib3ggb2YgY29udGFpbmVyXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaXNpYmxlRml0KGNvbnRlbnRCb3VuZGluZ0JveCwgY29udGFpbmVyQm91bmRpbmdCb3gpIHtcbiAgdmFyIGludGVyc2VjdGlvbiA9IGludGVyc2VjdEJvdW5kaW5nQm94ZXMoY29udGVudEJvdW5kaW5nQm94LCBjb250YWluZXJCb3VuZGluZ0JveCk7XG5cbiAgaWYgKGludGVyc2VjdGlvbi5sZWZ0ID4gaW50ZXJzZWN0aW9uLnJpZ2h0IHx8IGludGVyc2VjdGlvbi50b3AgPiBpbnRlcnNlY3Rpb24udG9wKSB7XG4gICAgLy8gdGhlcmUgaXMgbm8gaW50ZXJzZWN0aW9uLCB0aGUgYm94ZXMgYXJlIGNvbXBsZXRlbHkgc2VwYXJhdGVkIG9uIGF0IGxlYXN0IG9uZSBheGlzXG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICB2YXIgaW50ZXJzZWN0aW9uQXJlYSA9IChpbnRlcnNlY3Rpb24ucmlnaHQgLSBpbnRlcnNlY3Rpb24ubGVmdCkgKiAoaW50ZXJzZWN0aW9uLmJvdHRvbSAtIGludGVyc2VjdGlvbi50b3ApO1xuICB2YXIgY29udGVudEFyZWEgPSAoY29udGVudEJvdW5kaW5nQm94LnJpZ2h0IC0gY29udGVudEJvdW5kaW5nQm94LmxlZnQpICogKGNvbnRlbnRCb3VuZGluZ0JveC5ib3R0b20gLSBjb250ZW50Qm91bmRpbmdCb3gudG9wKTtcbiAgcmV0dXJuIGludGVyc2VjdGlvbkFyZWEgLyBjb250ZW50QXJlYTtcbn1cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgaW50ZXJzZWN0aW9uIHNwYWNlIGJldHdlZW4gdHdvIGJvdW5kaW5nIGJveGVzXG4gKlxuICogQHBhcmFtIGZpcnN0Qm94XG4gKiBAcGFyYW0gc2Vjb25kQm94XG4gKiBAcmV0dXJucyB7RXVpQ2xpZW50UmVjdH1cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaW50ZXJzZWN0Qm91bmRpbmdCb3hlcyhmaXJzdEJveCwgc2Vjb25kQm94KSB7XG4gIHZhciB0b3AgPSBNYXRoLm1heChmaXJzdEJveC50b3AsIHNlY29uZEJveC50b3ApO1xuICB2YXIgcmlnaHQgPSBNYXRoLm1pbihmaXJzdEJveC5yaWdodCwgc2Vjb25kQm94LnJpZ2h0KTtcbiAgdmFyIGJvdHRvbSA9IE1hdGgubWluKGZpcnN0Qm94LmJvdHRvbSwgc2Vjb25kQm94LmJvdHRvbSk7XG4gIHZhciBsZWZ0ID0gTWF0aC5tYXgoZmlyc3RCb3gubGVmdCwgc2Vjb25kQm94LmxlZnQpO1xuICB2YXIgaGVpZ2h0ID0gTWF0aC5tYXgoYm90dG9tIC0gdG9wLCAwKTtcbiAgdmFyIHdpZHRoID0gTWF0aC5tYXgocmlnaHQgLSBsZWZ0LCAwKTtcbiAgcmV0dXJuIHtcbiAgICB0b3A6IHRvcCxcbiAgICByaWdodDogcmlnaHQsXG4gICAgYm90dG9tOiBib3R0b20sXG4gICAgbGVmdDogbGVmdCxcbiAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICB3aWR0aDogd2lkdGhcbiAgfTtcbn1cbi8qKlxuICogUmV0dXJucyB0aGUgdG9wLW1vc3QgZGVmaW5lZCB6LWluZGV4IGluIHRoZSBlbGVtZW50J3MgYW5jZXN0b3IgaGllcmFyY2h5XG4gKiByZWxhdGl2ZSB0byB0aGUgYHRhcmdldGAgZWxlbWVudDsgaWYgbm8gei1pbmRleCBpcyBkZWZpbmVkLCByZXR1cm5zIDBcbiAqIEBwYXJhbSBlbGVtZW50IHtIVE1MRWxlbWVudH1cbiAqIEBwYXJhbSBjb3VzaW4ge0hUTUxFbGVtZW50fVxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RWxlbWVudFpJbmRleChlbGVtZW50LCBjb3VzaW4pIHtcbiAgLyoqXG4gICAqIGZpbmRpbmcgdGhlIHotaW5kZXggb2YgYGVsZW1lbnRgIGlzIG5vdCB0aGUgZnVsbCBzdG9yeVxuICAgKiBpdHMgdGhlIENTUyBzdGFja2luZyBjb250ZXh0IHRoYXQgaXMgaW1wb3J0YW50XG4gICAqIHRha2UgdGhpcyBET00gZm9yIGV4YW1wbGU6XG4gICAqIGJvZHlcbiAgICogICBzZWN0aW9uW3otaW5kZXg6IDEwMDBdXG4gICAqICAgICBwW3otaW5kZXg6IDUwMF1cbiAgICogICAgICAgYnV0dG9uXG4gICAqICAgZGl2XG4gICAqXG4gICAqIHdoYXQgei1pbmRleCBkb2VzIHRoZSBgZGl2YCBuZWVkIHRvIGRpc3BsYXkgbmV4dCB0byBgYnV0dG9uYD9cbiAgICogdGhlIGBkaXZgIGFuZCBgc2VjdGlvbmAgYXJlIHdoZXJlIHRoZSBzdGFja2luZyBjb250ZXh0IHNwbGl0c1xuICAgKiBzbyBgZGl2YCBuZWVkcyB0byBjb3B5IGBzZWN0aW9uYCdzIHotaW5kZXggaW4gb3JkZXIgdG9cbiAgICogYXBwZWFyIG5leHQgdG8gLyBvdmVyIGBidXR0b25gXG4gICAqXG4gICAqIGNhbGN1bGF0ZSB0aGlzIGJ5IHN0YXJ0aW5nIGF0IGBidXR0b25gIGFuZCBmaW5kaW5nIGl0cyBvZmZzZXRQYXJlbnRzXG4gICAqIHRoZW4gd2FsayB0aGUgcGFyZW50cyBmcm9tIHRvcCAtPiBkb3duIHVudGlsIHRoZSBzdGFja2luZyBjb250ZXh0XG4gICAqIHNwbGl0IGlzIGZvdW5kLCBvciBpZiB0aGVyZSBpcyBubyBzcGxpdCB0aGVuIGEgc3BlY2lmaWMgei1pbmRleCBpcyB1bmltcG9ydGFudFxuICAgKi9cbiAgLy8gYnVpbGQgdGhlIGFycmF5IG9mIHRoZSBlbGVtZW50ICsgaXRzIG9mZnNldCBwYXJlbnRzXG4gIHZhciBub2Rlc1RvSW5zcGVjdCA9IFtdO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgbm9kZXNUb0luc3BlY3QucHVzaChlbGVtZW50KTsgLy8gQUZBSUNUIHRoaXMgaXMgYSB2YWxpZCBjYXN0IC0gdGhlIGxpYmRlZnMgYXBwZWFyIHdyb25nXG5cbiAgICBlbGVtZW50ID0gZWxlbWVudC5vZmZzZXRQYXJlbnQ7IC8vIHN0b3AgaWYgdGhlcmUgaXMgbm8gcGFyZW50XG5cbiAgICBpZiAoZWxlbWVudCA9PSBudWxsKSB7XG4gICAgICBicmVhaztcbiAgICB9IC8vIHN0b3AgaWYgdGhlIHBhcmVudCBjb250YWlucyB0aGUgcmVsYXRlZCBlbGVtZW50XG4gICAgLy8gYXMgdGhpcyBpcyB0aGUgei1pbmRleCBhbmNlc3RvclxuXG5cbiAgICBpZiAoZWxlbWVudC5jb250YWlucyhjb3VzaW4pKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH0gLy8gcmV2ZXJzZSB0aGUgbm9kZXMgdG8gd2FsayBmcm9tIHRvcCAtPiBlbGVtZW50XG5cblxuICBub2Rlc1RvSW5zcGVjdC5yZXZlcnNlKCk7XG5cbiAgZm9yICh2YXIgX2kyID0gMCwgX25vZGVzVG9JbnNwZWN0ID0gbm9kZXNUb0luc3BlY3Q7IF9pMiA8IF9ub2Rlc1RvSW5zcGVjdC5sZW5ndGg7IF9pMisrKSB7XG4gICAgdmFyIG5vZGUgPSBfbm9kZXNUb0luc3BlY3RbX2kyXTtcbiAgICAvLyBnZXQgdGhpcyBub2RlJ3Mgei1pbmRleCBjc3MgdmFsdWVcbiAgICB2YXIgekluZGV4ID0gd2luZG93LmRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUobm9kZSkuZ2V0UHJvcGVydHlWYWx1ZSgnei1pbmRleCcpOyAvLyBpZiB0aGUgei1pbmRleCBpcyBub3QgYSBudW1iZXIgKGUuZy4gXCJhdXRvXCIpIHJldHVybiBudWxsLCBlbHNlIHRoZSB2YWx1ZVxuXG4gICAgdmFyIHBhcnNlZFpJbmRleCA9IHBhcnNlSW50KHpJbmRleCwgMTApO1xuXG4gICAgaWYgKCFpc05hTihwYXJzZWRaSW5kZXgpKSB7XG4gICAgICByZXR1cm4gcGFyc2VkWkluZGV4O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAwO1xufSIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xudmFyIEdST1VQX05VTUVSSUMgPSAvXihbXFxkLl0rKShzfG1zKS87XG5cbmZ1bmN0aW9uIGdldE1pbGxpc2Vjb25kcyh2YWx1ZSwgdW5pdCkge1xuICAvLyBHaXZlbiB0aGUgcmVnZXggbWF0Y2ggYW5kIGNhcHR1cmUgZ3JvdXBzLCB3ZSBjYW4gYXNzdW1lIGB1bml0YCB0byBiZSBlaXRoZXIgJ3MnIG9yICdtcydcbiAgdmFyIG11bHRpcGxpZXIgPSB1bml0ID09PSAncycgPyAxMDAwIDogMTtcbiAgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUpICogbXVsdGlwbGllcjtcbn0gLy8gRmluZCBDU1MgYHRyYW5zaXRpb24tZHVyYXRpb25gIGFuZCBgdHJhbnNpdGlvbi1kZWxheWAgaW50ZXJ2YWxzXG4vLyBhbmQgcmV0dXJuIHRoZSB2YWx1ZSBvZiBlYWNoIGNvbXB1dGVkIHByb3BlcnR5IGluICdtcydcblxuXG5leHBvcnQgdmFyIGdldFRyYW5zaXRpb25UaW1pbmdzID0gZnVuY3Rpb24gZ2V0VHJhbnNpdGlvblRpbWluZ3MoZWxlbWVudCkge1xuICB2YXIgY29tcHV0ZWRTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuICB2YXIgY29tcHV0ZWREdXJhdGlvbiA9IGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgndHJhbnNpdGlvbi1kdXJhdGlvbicpO1xuICB2YXIgZHVyYXRpb25NYXRjaEFycmF5ID0gY29tcHV0ZWREdXJhdGlvbi5tYXRjaChHUk9VUF9OVU1FUklDKTtcbiAgdmFyIGR1cmF0aW9uTWF0Y2ggPSBkdXJhdGlvbk1hdGNoQXJyYXkgPyBnZXRNaWxsaXNlY29uZHMoZHVyYXRpb25NYXRjaEFycmF5WzFdLCBkdXJhdGlvbk1hdGNoQXJyYXlbMl0pIDogMDtcbiAgdmFyIGNvbXB1dGVkRGVsYXkgPSBjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ3RyYW5zaXRpb24tZGVsYXknKTtcbiAgdmFyIGRlbGF5TWF0Y2hBcnJheSA9IGNvbXB1dGVkRGVsYXkubWF0Y2goR1JPVVBfTlVNRVJJQyk7XG4gIHZhciBkZWxheU1hdGNoID0gZGVsYXlNYXRjaEFycmF5ID8gZ2V0TWlsbGlzZWNvbmRzKGRlbGF5TWF0Y2hBcnJheVsxXSwgZGVsYXlNYXRjaEFycmF5WzJdKSA6IDA7XG4gIHJldHVybiB7XG4gICAgZHVyYXRpb25NYXRjaDogZHVyYXRpb25NYXRjaCxcbiAgICBkZWxheU1hdGNoOiBkZWxheU1hdGNoXG4gIH07XG59O1xuXG5mdW5jdGlvbiBpc0VsZW1lbnROb2RlKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnQubm9kZVR5cGUgPT09IGRvY3VtZW50LkVMRU1FTlRfTk9ERTtcbn0gLy8gVXNlcyBgZ2V0VHJhbnNpdGlvblRpbWluZ3NgIHRvIGZpbmQgdGhlIHRvdGFsIHRyYW5zaXRpb24gdGltZSBmb3Jcbi8vIGFsbCBlbGVtZW50cyB0YXJnZXRlZCBieSBhIE11dGF0aW9uT2JzZXJ2ZXIgY2FsbGJhY2tcblxuXG5leHBvcnQgdmFyIGdldFdhaXREdXJhdGlvbiA9IGZ1bmN0aW9uIGdldFdhaXREdXJhdGlvbihyZWNvcmRzKSB7XG4gIHJldHVybiByZWNvcmRzLnJlZHVjZShmdW5jdGlvbiAod2FpdER1cmF0aW9uLCByZWNvcmQpIHtcbiAgICAvLyBvbmx5IGNoZWNrIGZvciBDU1MgdHJhbnNpdGlvbiB2YWx1ZXMgZm9yIEVMRU1FTlQgbm9kZXNcbiAgICBpZiAoaXNFbGVtZW50Tm9kZShyZWNvcmQudGFyZ2V0KSkge1xuICAgICAgdmFyIF9nZXRUcmFuc2l0aW9uVGltaW5ncyA9IGdldFRyYW5zaXRpb25UaW1pbmdzKHJlY29yZC50YXJnZXQpLFxuICAgICAgICAgIGR1cmF0aW9uTWF0Y2ggPSBfZ2V0VHJhbnNpdGlvblRpbWluZ3MuZHVyYXRpb25NYXRjaCxcbiAgICAgICAgICBkZWxheU1hdGNoID0gX2dldFRyYW5zaXRpb25UaW1pbmdzLmRlbGF5TWF0Y2g7XG5cbiAgICAgIHdhaXREdXJhdGlvbiA9IE1hdGgubWF4KHdhaXREdXJhdGlvbiwgZHVyYXRpb25NYXRjaCArIGRlbGF5TWF0Y2gpO1xuICAgIH1cblxuICAgIHJldHVybiB3YWl0RHVyYXRpb247XG4gIH0sIDApO1xufTsgLy8gVXNlcyBgcmVxdWVzdEFuaW1hdGlvbkZyYW1lYCB0byBwZXJmb3JtIGEgZ2l2ZW4gY2FsbGJhY2sgYWZ0ZXIgYSBzcGVjaWZpZWQgd2FpdGluZyBwZXJpb2RcblxuZXhwb3J0IHZhciBwZXJmb3JtT25GcmFtZSA9IGZ1bmN0aW9uIHBlcmZvcm1PbkZyYW1lKHdhaXREdXJhdGlvbiwgdG9QZXJmb3JtKSB7XG4gIGlmICh3YWl0RHVyYXRpb24gPiAwKSB7XG4gICAgdmFyIHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgdmFyIGVuZFRpbWUgPSBzdGFydFRpbWUgKyB3YWl0RHVyYXRpb247XG5cbiAgICB2YXIgb25GcmFtZSA9IGZ1bmN0aW9uIG9uRnJhbWUoKSB7XG4gICAgICB0b1BlcmZvcm0oKTtcblxuICAgICAgaWYgKGVuZFRpbWUgPiBEYXRlLm5vdygpKSB7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShvbkZyYW1lKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKG9uRnJhbWUpO1xuICB9XG59OyAvLyBDb252ZW5pZW5jZSBtZXRob2QgZm9yIGNvbWJpbmluZyB0aGUgcmVzdWx0IG9mICdnZXRXYWl0RHVyYXRpb24nIGRpcmVjdGx5IHdpdGggJ3BlcmZvcm1PbkZyYW1lJ1xuXG5leHBvcnQgdmFyIGdldER1cmF0aW9uQW5kUGVyZm9ybU9uRnJhbWUgPSBmdW5jdGlvbiBnZXREdXJhdGlvbkFuZFBlcmZvcm1PbkZyYW1lKHJlY29yZHMsIHRvUGVyZm9ybSkge1xuICBwZXJmb3JtT25GcmFtZShnZXRXYWl0RHVyYXRpb24ocmVjb3JkcyksIHRvUGVyZm9ybSk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG4vKlxuICogRm9yIHVzZSB3aGVuIGEgY29tcG9uZW50IG5lZWRzIHRvIHNldCBgcmVmYCBvYmplY3RzIGZyb20gbXVsdGlwbGUgc291cmNlcy5cbiAqIEZvciBpbnN0YW5jZSwgaWYgYSBjb21wb25lbnQgYWNjZXB0cyBhIGByZWZgIHByb3AgYnV0IGFsc28gbmVlZHMgaXRzIG93blxuICogbG9jYWwgcmVmZXJlbmNlIGZvciBjYWxjdWxhdGlvbnMsIGV0Yy5cbiAqIFRoaXMgaG9vayBoYW5kbGVzIHNldHRpbmcgbXVsdGlwbGUgYHJlZmBzIG9mIGFueSBhdmFpbGFibGUgYHJlZmAgdHlwZVxuICogaW4gYSBzaW5nbGUgY2FsbGJhY2sgZnVuY3Rpb24uXG4gKi9cblxuZXhwb3J0IHZhciB1c2VDb21iaW5lZFJlZnMgPSBmdW5jdGlvbiB1c2VDb21iaW5lZFJlZnMocmVmcykge1xuICByZXR1cm4gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKG5vZGUpIHtcbiAgICByZXR1cm4gcmVmcy5mb3JFYWNoKGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgIGlmICghcmVmKSByZXR1cm47XG5cbiAgICAgIGlmICh0eXBlb2YgcmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJlZihub2RlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlZi5jdXJyZW50ID0gbm9kZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSwgW3JlZnNdKTtcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJpc0Rpc2FibGVkXCIsIFwiZGlzYWJsZWRcIiwgXCJocmVmXCIsIFwidGFyZ2V0XCIsIFwicmVsXCIsIFwidHlwZVwiLCBcImJ1dHRvblJlZlwiXSxcbiAgICBfZXhjbHVkZWQyID0gW1wiZWxlbWVudFwiLCBcImJhc2VDbGFzc05hbWVcIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImljb25UeXBlXCIsIFwiaWNvblNpZGVcIiwgXCJjb2xvclwiLCBcInNpemVcIiwgXCJmaWxsXCIsIFwiaXNEaXNhYmxlZFwiLCBcImlzTG9hZGluZ1wiLCBcImlzU2VsZWN0ZWRcIiwgXCJjb250ZW50UHJvcHNcIiwgXCJ0ZXh0UHJvcHNcIiwgXCJmdWxsV2lkdGhcIiwgXCJtaW5XaWR0aFwiLCBcInN0eWxlXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsga2V5c09mIH0gZnJvbSAnLi4vY29tbW9uJztcbmltcG9ydCB7IGdldFNlY3VyZVJlbEZvclRhcmdldCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aUJ1dHRvbkNvbnRlbnREZXByZWNhdGVkIGFzIEV1aUJ1dHRvbkNvbnRlbnQgfSBmcm9tICcuL19idXR0b25fY29udGVudF9kZXByZWNhdGVkJztcbmltcG9ydCB7IHZhbGlkYXRlSHJlZiB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3NlY3VyaXR5L2hyZWZfdmFsaWRhdG9yJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIGNvbG9yVG9DbGFzc05hbWVNYXAgPSB7XG4gIHByaW1hcnk6ICctLXByaW1hcnknLFxuICBhY2NlbnQ6ICctLWFjY2VudCcsXG4gIHN1Y2Nlc3M6ICctLXN1Y2Nlc3MnLFxuICB3YXJuaW5nOiAnLS13YXJuaW5nJyxcbiAgZGFuZ2VyOiAnLS1kYW5nZXInLFxuICBnaG9zdDogJy0tZ2hvc3QnLFxuICB0ZXh0OiAnLS10ZXh0J1xufTtcbmV4cG9ydCB2YXIgQ09MT1JTID0ga2V5c09mKGNvbG9yVG9DbGFzc05hbWVNYXApO1xuZXhwb3J0IHZhciBzaXplVG9DbGFzc05hbWVNYXAgPSB7XG4gIHM6ICctLXNtYWxsJyxcbiAgbTogbnVsbFxufTtcbmV4cG9ydCB2YXIgU0laRVMgPSBrZXlzT2Yoc2l6ZVRvQ2xhc3NOYW1lTWFwKTtcbi8qKlxuICogRXh0ZW5kcyBFdWlCdXR0b25Db250ZW50UHJvcHMgd2hpY2ggcHJvdmlkZXNcbiAqIGBpY29uVHlwZWAsIGBpY29uU2lkZWAsIGFuZCBgdGV4dFByb3BzYFxuICovXG5cbi8qKlxuICogRXVpQnV0dG9uIGlzIGxhcmdlbHkgcmVzcG9uc2libGUgZm9yIHByb3ZpZGluZyByZWxldmFudCBwcm9wc1xuICogYW5kIHRoZSBsb2dpYyBmb3IgZWxlbWVudC1zcGVjaWZpYyBhdHRyaWJ1dGVzXG4gKi9cbmV4cG9ydCB2YXIgRXVpQnV0dG9uID0gZnVuY3Rpb24gRXVpQnV0dG9uKF9yZWYpIHtcbiAgdmFyIF9pc0Rpc2FibGVkID0gX3JlZi5pc0Rpc2FibGVkLFxuICAgICAgX2Rpc2FibGVkID0gX3JlZi5kaXNhYmxlZCxcbiAgICAgIGhyZWYgPSBfcmVmLmhyZWYsXG4gICAgICB0YXJnZXQgPSBfcmVmLnRhcmdldCxcbiAgICAgIHJlbCA9IF9yZWYucmVsLFxuICAgICAgX3JlZiR0eXBlID0gX3JlZi50eXBlLFxuICAgICAgdHlwZSA9IF9yZWYkdHlwZSA9PT0gdm9pZCAwID8gJ2J1dHRvbicgOiBfcmVmJHR5cGUsXG4gICAgICBidXR0b25SZWYgPSBfcmVmLmJ1dHRvblJlZixcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgaXNIcmVmVmFsaWQgPSAhaHJlZiB8fCB2YWxpZGF0ZUhyZWYoaHJlZik7XG4gIHZhciBkaXNhYmxlZCA9IF9kaXNhYmxlZCB8fCAhaXNIcmVmVmFsaWQ7XG4gIHZhciBpc0Rpc2FibGVkID0gX2lzRGlzYWJsZWQgfHwgIWlzSHJlZlZhbGlkO1xuICB2YXIgYnV0dG9uSXNEaXNhYmxlZCA9IHJlc3QuaXNMb2FkaW5nIHx8IGlzRGlzYWJsZWQgfHwgZGlzYWJsZWQ7XG4gIHZhciBlbGVtZW50ID0gaHJlZiAmJiAhaXNEaXNhYmxlZCA/ICdhJyA6ICdidXR0b24nO1xuICB2YXIgZWxlbWVudFByb3BzID0ge307IC8vIFByb3BzIGZvciBhbGwgZWxlbWVudHNcblxuICBlbGVtZW50UHJvcHMgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGVsZW1lbnRQcm9wcyksIHt9LCB7XG4gICAgaXNEaXNhYmxlZDogYnV0dG9uSXNEaXNhYmxlZFxuICB9KTsgLy8gRWxlbWVudC1zcGVjaWZpYyBhdHRyaWJ1dGVzXG5cbiAgaWYgKGVsZW1lbnQgPT09ICdidXR0b24nKSB7XG4gICAgZWxlbWVudFByb3BzID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBlbGVtZW50UHJvcHMpLCB7fSwge1xuICAgICAgZGlzYWJsZWQ6IGJ1dHRvbklzRGlzYWJsZWRcbiAgICB9KTtcbiAgfVxuXG4gIHZhciByZWxPYmogPSB7fTtcblxuICBpZiAoaHJlZiAmJiAhYnV0dG9uSXNEaXNhYmxlZCkge1xuICAgIHJlbE9iai5ocmVmID0gaHJlZjtcbiAgICByZWxPYmoucmVsID0gZ2V0U2VjdXJlUmVsRm9yVGFyZ2V0KHtcbiAgICAgIGhyZWY6IGhyZWYsXG4gICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgIHJlbDogcmVsXG4gICAgfSk7XG4gICAgcmVsT2JqLnRhcmdldCA9IHRhcmdldDtcbiAgfSBlbHNlIHtcbiAgICByZWxPYmoudHlwZSA9IHR5cGU7XG4gIH1cblxuICByZXR1cm4gKC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9qc3gtcGFzY2FsLWNhc2VcbiAgICBfX19FbW90aW9uSlNYKEV1aUJ1dHRvbkRpc3BsYXlEZXByZWNhdGVkLCBfZXh0ZW5kcyh7XG4gICAgICBlbGVtZW50OiBlbGVtZW50LFxuICAgICAgYmFzZUNsYXNzTmFtZTogXCJldWlCdXR0b25cIixcbiAgICAgIHJlZjogYnV0dG9uUmVmXG4gICAgfSwgZWxlbWVudFByb3BzLCByZWxPYmosIHJlc3QpKVxuICApO1xufTtcbkV1aUJ1dHRvbi5wcm9wVHlwZXMgPSB7XG4gIGhyZWY6IFByb3BUeXBlcy5zdHJpbmcsXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAgICogTWFrZSBidXR0b24gYSBzb2xpZCBjb2xvciBmb3IgcHJvbWluZW5jZVxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIE1ha2UgYnV0dG9uIGEgc29saWQgY29sb3IgZm9yIHByb21pbmVuY2VcbiAgICAgKi9cbiAgZmlsbDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogQW55IG9mIG91ciBuYW1lZCBjb2xvcnMuXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogQW55IG9mIG91ciBuYW1lZCBjb2xvcnMuXG4gICAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMub25lT2YoW1wicHJpbWFyeVwiLCBcImFjY2VudFwiLCBcInN1Y2Nlc3NcIiwgXCJ3YXJuaW5nXCIsIFwiZGFuZ2VyXCIsIFwiZ2hvc3RcIiwgXCJ0ZXh0XCJdKSxcblxuICAvKipcbiAgICAgKiBVc2Ugc2l6ZSBgc2AgaW4gY29uZmluZWQgc3BhY2VzXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogVXNlIHNpemUgYHNgIGluIGNvbmZpbmVkIHNwYWNlc1xuICAgICAqL1xuICBzaXplOiBQcm9wVHlwZXMub25lT2YoW1wic1wiLCBcIm1cIl0pLFxuXG4gIC8qKlxuICAgICAqIGBkaXNhYmxlZGAgaXMgYWxzbyBhbGxvd2VkXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogYGRpc2FibGVkYCBpcyBhbHNvIGFsbG93ZWRcbiAgICAgKi9cbiAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogQXBwbGllcyB0aGUgYm9vbGVhbiBzdGF0ZSBhcyB0aGUgYGFyaWEtcHJlc3NlZGAgcHJvcGVydHkgdG8gY3JlYXRlIGEgdG9nZ2xlIGJ1dHRvbi5cbiAgICAgKiAqT25seSB1c2Ugd2hlbiB0aGUgcmVhZGFibGUgdGV4dCBkb2VzIG5vdCBjaGFuZ2UgYmV0d2VlbiBzdGF0ZXMuKlxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIEFwcGxpZXMgdGhlIGJvb2xlYW4gc3RhdGUgYXMgdGhlIGBhcmlhLXByZXNzZWRgIHByb3BlcnR5IHRvIGNyZWF0ZSBhIHRvZ2dsZSBidXR0b24uXG4gICAgICogKk9ubHkgdXNlIHdoZW4gdGhlIHJlYWRhYmxlIHRleHQgZG9lcyBub3QgY2hhbmdlIGJldHdlZW4gc3RhdGVzLipcbiAgICAgKi9cbiAgaXNTZWxlY3RlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogRXh0ZW5kcyB0aGUgYnV0dG9uIHRvIDEwMCUgd2lkdGhcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBFeHRlbmRzIHRoZSBidXR0b24gdG8gMTAwJSB3aWR0aFxuICAgICAqL1xuICBmdWxsV2lkdGg6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIE92ZXJyaWRlIHRoZSBkZWZhdWx0IG1pbmltdW0gd2lkdGhcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBPdmVycmlkZSB0aGUgZGVmYXVsdCBtaW5pbXVtIHdpZHRoXG4gICAgICovXG4gIG1pbldpZHRoOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIEZvcmNlIGRpc2FibGVzIHRoZSBidXR0b24gYW5kIGNoYW5nZXMgdGhlIGljb24gdG8gYSBsb2FkaW5nIHNwaW5uZXJcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBGb3JjZSBkaXNhYmxlcyB0aGUgYnV0dG9uIGFuZCBjaGFuZ2VzIHRoZSBpY29uIHRvIGEgbG9hZGluZyBzcGlubmVyXG4gICAgICovXG4gIGlzTG9hZGluZzogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogT2JqZWN0IG9mIHByb3BzIHBhc3NlZCB0byB0aGUgPHNwYW4vPiB3cmFwcGluZyB0aGUgYnV0dG9uJ3MgY29udGVudFxuICAgICAqL1xuICBjb250ZW50UHJvcHM6IFByb3BUeXBlcy5hbnksXG4gIHN0eWxlOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIEFueSBgdHlwZWAgYWNjZXB0ZWQgYnkgRXVpSWNvblxuICAgICAqL1xuICBpY29uVHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYWxlcnRcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhc3Rlcmlza1wiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJib2x0XCIsIFwiYm94ZXNIb3Jpem9udGFsXCIsIFwiYm94ZXNWZXJ0aWNhbFwiLCBcImJyYW5jaFwiLCBcImJyYW5jaFVzZXJcIiwgXCJicm9vbVwiLCBcImJydXNoXCIsIFwiYnVnXCIsIFwiYnVsbHNleWVcIiwgXCJjYWxlbmRhclwiLCBcImNhbnZhc0FwcFwiLCBcImNhc2VzQXBwXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsb2NrXCIsIFwiY2xvdWREcml6emxlXCIsIFwiY2xvdWRTdG9ybXlcIiwgXCJjbG91ZFN1bm55XCIsIFwiY2x1c3RlclwiLCBcImNvZGVBcHBcIiwgXCJjb2xvclwiLCBcImNvbXB1dGVcIiwgXCJjb25zb2xlXCIsIFwiY29uc29sZUFwcFwiLCBcImNvbnRhaW5lclwiLCBcImNvbnRpbnVpdHlBYm92ZVwiLCBcImNvbnRpbnVpdHlBYm92ZUJlbG93XCIsIFwiY29udGludWl0eUJlbG93XCIsIFwiY29udGludWl0eVdpdGhpblwiLCBcImNvbnRyb2xzSG9yaXpvbnRhbFwiLCBcImNvbnRyb2xzVmVydGljYWxcIiwgXCJjb3B5XCIsIFwiY29weUNsaXBib2FyZFwiLCBcImNyZWF0ZUFkdmFuY2VkSm9iXCIsIFwiY3JlYXRlTXVsdGlNZXRyaWNKb2JcIiwgXCJjcmVhdGVQb3B1bGF0aW9uSm9iXCIsIFwiY3JlYXRlU2luZ2xlTWV0cmljSm9iXCIsIFwiY3Jvc3NcIiwgXCJjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcFwiLCBcImNyb3NzSW5BQ2lyY2xlRmlsbGVkXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpc2NvdmVyQXBwXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG91YmxlQXJyb3dMZWZ0XCIsIFwiZG91YmxlQXJyb3dSaWdodFwiLCBcImRvd25sb2FkXCIsIFwiZWRpdG9yQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JBbGlnbkxlZnRcIiwgXCJlZGl0b3JBbGlnblJpZ2h0XCIsIFwiZWRpdG9yQm9sZFwiLCBcImVkaXRvckNoZWNrbGlzdFwiLCBcImVkaXRvckNvZGVCbG9ja1wiLCBcImVkaXRvckNvbW1lbnRcIiwgXCJlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbFwiLCBcImVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbFwiLCBcImVkaXRvckhlYWRpbmdcIiwgXCJlZGl0b3JJdGFsaWNcIiwgXCJlZGl0b3JJdGVtQWxpZ25Cb3R0b21cIiwgXCJlZGl0b3JJdGVtQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JJdGVtQWxpZ25MZWZ0XCIsIFwiZWRpdG9ySXRlbUFsaWduTWlkZGxlXCIsIFwiZWRpdG9ySXRlbUFsaWduUmlnaHRcIiwgXCJlZGl0b3JJdGVtQWxpZ25Ub3BcIiwgXCJlZGl0b3JMaW5rXCIsIFwiZWRpdG9yT3JkZXJlZExpc3RcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnRcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BMZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BSaWdodFwiLCBcImVkaXRvclJlZG9cIiwgXCJlZGl0b3JTdHJpa2VcIiwgXCJlZGl0b3JUYWJsZVwiLCBcImVkaXRvclVuZGVybGluZVwiLCBcImVkaXRvclVuZG9cIiwgXCJlZGl0b3JVbm9yZGVyZWRMaXN0XCIsIFwiZW1haWxcIiwgXCJlbXB0eVwiLCBcImVtc0FwcFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibW9iaWxlXCIsIFwibW9uaXRvcmluZ0FwcFwiLCBcIm1vb25cIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFwZXJDbGlwXCIsIFwicGFydGlhbFwiLCBcInBhdXNlXCIsIFwicGF5bWVudFwiLCBcInBlbmNpbFwiLCBcInBlcmNlbnRcIiwgXCJwaW5cIiwgXCJwaW5GaWxsZWRcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBsYXlcIiwgXCJwbGF5RmlsbGVkXCIsIFwicGx1c1wiLCBcInBsdXNJbkNpcmNsZVwiLCBcInBsdXNJbkNpcmNsZUZpbGxlZFwiLCBcInBvcG91dFwiLCBcInB1c2hcIiwgXCJxdWVzdGlvbkluQ2lyY2xlXCIsIFwicXVvdGVcIiwgXCJyZWNlbnRseVZpZXdlZEFwcFwiLCBcInJlZnJlc2hcIiwgXCJyZWdyZXNzaW9uSm9iXCIsIFwicmVwb3J0ZXJcIiwgXCJyZXBvcnRpbmdBcHBcIiwgXCJyZXR1cm5LZXlcIiwgXCJzYXZlXCIsIFwic2F2ZWRPYmplY3RzQXBwXCIsIFwic2NhbGVcIiwgXCJzZWFyY2hcIiwgXCJzZWFyY2hQcm9maWxlckFwcFwiLCBcInNlY3VyaXR5QW5hbHl0aWNzQXBwXCIsIFwic2VjdXJpdHlBcHBcIiwgXCJzZWN1cml0eVNpZ25hbFwiLCBcInNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWRcIiwgXCJzZWN1cml0eVNpZ25hbFJlc29sdmVkXCIsIFwic2Vzc2lvblZpZXdlclwiLCBcInNoYXJkXCIsIFwic2hhcmVcIiwgXCJzbm93Zmxha2VcIiwgXCJzb3J0RG93blwiLCBcInNvcnRMZWZ0XCIsIFwic29ydFJpZ2h0XCIsIFwic29ydFVwXCIsIFwic29ydGFibGVcIiwgXCJzcGFjZXNBcHBcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EZW5zZVZlY3RvclwiLCBcInRva2VuRWxlbWVudFwiLCBcInRva2VuRW51bVwiLCBcInRva2VuRW51bU1lbWJlclwiLCBcInRva2VuRXZlbnRcIiwgXCJ0b2tlbkV4Y2VwdGlvblwiLCBcInRva2VuRmllbGRcIiwgXCJ0b2tlbkZpbGVcIiwgXCJ0b2tlbkZsYXR0ZW5lZFwiLCBcInRva2VuRnVuY3Rpb25cIiwgXCJ0b2tlbkdlb1wiLCBcInRva2VuSGlzdG9ncmFtXCIsIFwidG9rZW5JbnRlcmZhY2VcIiwgXCJ0b2tlbklQXCIsIFwidG9rZW5Kb2luXCIsIFwidG9rZW5LZXlcIiwgXCJ0b2tlbktleXdvcmRcIiwgXCJ0b2tlbk1ldGhvZFwiLCBcInRva2VuTWV0cmljQ291bnRlclwiLCBcInRva2VuTWV0cmljR2F1Z2VcIiwgXCJ0b2tlbk1vZHVsZVwiLCBcInRva2VuTmFtZXNwYWNlXCIsIFwidG9rZW5OZXN0ZWRcIiwgXCJ0b2tlbk51bGxcIiwgXCJ0b2tlbk51bWJlclwiLCBcInRva2VuT2JqZWN0XCIsIFwidG9rZW5PcGVyYXRvclwiLCBcInRva2VuUGFja2FnZVwiLCBcInRva2VuUGFyYW1ldGVyXCIsIFwidG9rZW5QZXJjb2xhdG9yXCIsIFwidG9rZW5Qcm9wZXJ0eVwiLCBcInRva2VuUmFuZ2VcIiwgXCJ0b2tlblJhbmtGZWF0dXJlXCIsIFwidG9rZW5SYW5rRmVhdHVyZXNcIiwgXCJ0b2tlblJlcG9cIiwgXCJ0b2tlblNlYXJjaFR5cGVcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkXSksXG5cbiAgLyoqXG4gICAgICogQ2FuIG9ubHkgYmUgb25lIHNpZGUgYGxlZnRgIG9yIGByaWdodGBcbiAgICAgKi9cbiAgaWNvblNpZGU6IFByb3BUeXBlcy5vbmVPZihbXCJsZWZ0XCIsIFwicmlnaHRcIl0pLFxuXG4gIC8qKlxuICAgICAqIE9iamVjdCBvZiBwcm9wcyBwYXNzZWQgdG8gdGhlIDxzcGFuLz4gd3JhcHBpbmcgdGhlIGNvbnRlbnQncyB0ZXh0IChvbmx5IGlmIHRoZSBjaGlsZHJlbiBpcyBhIGBzdHJpbmdgKVxuICAgICAqIEl0IGRvZXNuJ3QgYXBwbHkgdG8gdGhlIGljb24uXG4gICAgICovXG4gIHRleHRQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHJlZjogUHJvcFR5cGVzLmFueSxcbiAgICBcImRhdGEtdGV4dFwiOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLFxuICBpY29uU2l6ZTogUHJvcFR5cGVzLm9uZU9mKFtcInNcIiwgXCJtXCJdKSxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBidXR0b25SZWY6IFByb3BUeXBlcy5hbnlcbn07XG5FdWlCdXR0b24uZGlzcGxheU5hbWUgPSAnRXVpQnV0dG9uJztcblxuLyoqXG4gKiAqREVQUkVDQVRFRCpcbiAqIEV1aUJ1dHRvbkRpc3BsYXkgaXMgYW4gaW50ZXJuYWwtb25seSBjb21wb25lbnQgdXNlZCBmb3IgZGlzcGxheWluZ1xuICogYW55IGVsZW1lbnQgYXMgYSBidXR0b24uXG4gKiBOT1RFOiBUaGlzIGNvbXBvbmVudCAqbXVzdCogYmUgYmVsb3cgRXVpQnV0dG9uIGluIHRoZSBmaWxlIGFuZFxuICogRXVpQnV0dG9uIG11c3QgYWxzbyBzZXQgYSBkaXNwbGF5TmFtZSBmb3IgcmVhY3QtZG9jZ2VuLXR5cGVzY3JpcHRcbiAqIHRvIGNvcnJlY3RseSBzZXQgRXVpQnV0dG9uJ3MgZG9jZ2VuSW5mbyBhbmQgZGlzcGxheSBhIHByb3BzIHRhYmxlLlxuICogVGhpcyBjb21wb25lbnQgaGFzIGJlZW4gZGVwcmVjYXRlZCBpbiBmYXZvciBvZiB0aGUgbmV3IEV1aUJ1dHRvbkRpc3BsYXlcbiAqIHRoYXQgY2FuIGJlIGZvdW5kIGluIGBzcmMvY29tcG9uZW50cy9idXR0b24vYnV0dG9uX2Rpc3BsYXkvX2J1dHRvbl9kaXNwbGF5LnRzeGBcbiAqL1xuZXhwb3J0IHZhciBFdWlCdXR0b25EaXNwbGF5RGVwcmVjYXRlZCA9IC8qI19fUFVSRV9fKi9mb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmMiwgcmVmKSB7XG4gIHZhciBfcmVmMiRlbGVtZW50ID0gX3JlZjIuZWxlbWVudCxcbiAgICAgIGVsZW1lbnQgPSBfcmVmMiRlbGVtZW50ID09PSB2b2lkIDAgPyAnYnV0dG9uJyA6IF9yZWYyJGVsZW1lbnQsXG4gICAgICBiYXNlQ2xhc3NOYW1lID0gX3JlZjIuYmFzZUNsYXNzTmFtZSxcbiAgICAgIGNoaWxkcmVuID0gX3JlZjIuY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUgPSBfcmVmMi5jbGFzc05hbWUsXG4gICAgICBpY29uVHlwZSA9IF9yZWYyLmljb25UeXBlLFxuICAgICAgX3JlZjIkaWNvblNpZGUgPSBfcmVmMi5pY29uU2lkZSxcbiAgICAgIGljb25TaWRlID0gX3JlZjIkaWNvblNpZGUgPT09IHZvaWQgMCA/ICdsZWZ0JyA6IF9yZWYyJGljb25TaWRlLFxuICAgICAgX3JlZjIkY29sb3IgPSBfcmVmMi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZjIkY29sb3IgPT09IHZvaWQgMCA/ICdwcmltYXJ5JyA6IF9yZWYyJGNvbG9yLFxuICAgICAgX3JlZjIkc2l6ZSA9IF9yZWYyLnNpemUsXG4gICAgICBzaXplID0gX3JlZjIkc2l6ZSA9PT0gdm9pZCAwID8gJ20nIDogX3JlZjIkc2l6ZSxcbiAgICAgIF9yZWYyJGZpbGwgPSBfcmVmMi5maWxsLFxuICAgICAgZmlsbCA9IF9yZWYyJGZpbGwgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZjIkZmlsbCxcbiAgICAgIGlzRGlzYWJsZWQgPSBfcmVmMi5pc0Rpc2FibGVkLFxuICAgICAgaXNMb2FkaW5nID0gX3JlZjIuaXNMb2FkaW5nLFxuICAgICAgaXNTZWxlY3RlZCA9IF9yZWYyLmlzU2VsZWN0ZWQsXG4gICAgICBjb250ZW50UHJvcHMgPSBfcmVmMi5jb250ZW50UHJvcHMsXG4gICAgICB0ZXh0UHJvcHMgPSBfcmVmMi50ZXh0UHJvcHMsXG4gICAgICBmdWxsV2lkdGggPSBfcmVmMi5mdWxsV2lkdGgsXG4gICAgICBtaW5XaWR0aCA9IF9yZWYyLm1pbldpZHRoLFxuICAgICAgc3R5bGUgPSBfcmVmMi5zdHlsZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZjIsIF9leGNsdWRlZDIpO1xuXG4gIHZhciBidXR0b25Jc0Rpc2FibGVkID0gaXNMb2FkaW5nIHx8IGlzRGlzYWJsZWQ7XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcyhiYXNlQ2xhc3NOYW1lLCBjb2xvciAmJiBjb2xvclRvQ2xhc3NOYW1lTWFwW2NvbG9yXSA/IFwiXCIuY29uY2F0KGJhc2VDbGFzc05hbWUpLmNvbmNhdChjb2xvclRvQ2xhc3NOYW1lTWFwW2NvbG9yXSkgOiBcIlwiLmNvbmNhdChiYXNlQ2xhc3NOYW1lKS5jb25jYXQoY29sb3JUb0NsYXNzTmFtZU1hcC5wcmltYXJ5KSwgc2l6ZSAmJiBzaXplVG9DbGFzc05hbWVNYXBbc2l6ZV0gPyBcIlwiLmNvbmNhdChiYXNlQ2xhc3NOYW1lKS5jb25jYXQoc2l6ZVRvQ2xhc3NOYW1lTWFwW3NpemVdKSA6IG51bGwsIGZpbGwgJiYgXCJcIi5jb25jYXQoYmFzZUNsYXNzTmFtZSwgXCItLWZpbGxcIiksIGZ1bGxXaWR0aCAmJiBcIlwiLmNvbmNhdChiYXNlQ2xhc3NOYW1lLCBcIi0tZnVsbFdpZHRoXCIpLCBidXR0b25Jc0Rpc2FibGVkICYmIFwiXCIuY29uY2F0KGJhc2VDbGFzc05hbWUsIFwiLWlzRGlzYWJsZWRcIiksIGNsYXNzTmFtZSk7XG4gIC8qKlxuICAgKiBOb3QgY2hhbmdpbmcgdGhlIGNvbnRlbnQgb3IgdGV4dCBjbGFzcyBuYW1lcyB0byBtYXRjaCBiYXNlQ2xhc3NOYW1lIHlldCxcbiAgICogYXMgaXQgaXMgYSBtYWpvciBicmVha2luZyBjaGFuZ2UuXG4gICAqL1xuXG4gIHZhciBjb250ZW50Q2xhc3NOYW1lcyA9IGNsYXNzTmFtZXMoJ2V1aUJ1dHRvbl9fY29udGVudCcsIGNvbnRlbnRQcm9wcyAmJiBjb250ZW50UHJvcHMuY2xhc3NOYW1lKTtcbiAgdmFyIHRleHRDbGFzc05hbWVzID0gY2xhc3NOYW1lcygnZXVpQnV0dG9uX190ZXh0JywgdGV4dFByb3BzICYmIHRleHRQcm9wcy5jbGFzc05hbWUpO1xuXG4gIHZhciBpbm5lck5vZGUgPSBfX19FbW90aW9uSlNYKEV1aUJ1dHRvbkNvbnRlbnQsIF9leHRlbmRzKHtcbiAgICBpc0xvYWRpbmc6IGlzTG9hZGluZyxcbiAgICBpY29uVHlwZTogaWNvblR5cGUsXG4gICAgaWNvblNpZGU6IGljb25TaWRlLFxuICAgIHRleHRQcm9wczogX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCB0ZXh0UHJvcHMpLCB7fSwge1xuICAgICAgY2xhc3NOYW1lOiB0ZXh0Q2xhc3NOYW1lc1xuICAgIH0pXG4gIH0sIGNvbnRlbnRQcm9wcywge1xuICAgIC8vIGNsYXNzTmFtZSBoYXMgdG8gY29tZSBsYXN0IHRvIG92ZXJyaWRlIGNvbnRlbnRQcm9wcy5jbGFzc05hbWVcbiAgICBjbGFzc05hbWU6IGNvbnRlbnRDbGFzc05hbWVzXG4gIH0pLCBjaGlsZHJlbik7XG5cbiAgdmFyIGNhbGN1bGF0ZWRTdHlsZSA9IHN0eWxlO1xuXG4gIGlmIChtaW5XaWR0aCAhPT0gdW5kZWZpbmVkIHx8IG1pbldpZHRoICE9PSBudWxsKSB7XG4gICAgY2FsY3VsYXRlZFN0eWxlID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBjYWxjdWxhdGVkU3R5bGUpLCB7fSwge1xuICAgICAgbWluV2lkdGg6IG1pbldpZHRoXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoZWxlbWVudCwgX29iamVjdFNwcmVhZCh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIHN0eWxlOiBjYWxjdWxhdGVkU3R5bGUsXG4gICAgZGlzYWJsZWQ6IGVsZW1lbnQgPT09ICdidXR0b24nICYmIGJ1dHRvbklzRGlzYWJsZWQsXG4gICAgJ2FyaWEtcHJlc3NlZCc6IGVsZW1lbnQgPT09ICdidXR0b24nID8gaXNTZWxlY3RlZCA6IHVuZGVmaW5lZCxcbiAgICByZWY6IHJlZlxuICB9LCByZXN0KSwgaW5uZXJOb2RlKTtcbn0pO1xuRXVpQnV0dG9uRGlzcGxheURlcHJlY2F0ZWQucHJvcFR5cGVzID0ge1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAgICogTWFrZSBidXR0b24gYSBzb2xpZCBjb2xvciBmb3IgcHJvbWluZW5jZVxuICAgICAqL1xuICBmaWxsOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBBbnkgb2Ygb3VyIG5hbWVkIGNvbG9ycy5cbiAgICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcy5vbmVPZihbXCJwcmltYXJ5XCIsIFwiYWNjZW50XCIsIFwic3VjY2Vzc1wiLCBcIndhcm5pbmdcIiwgXCJkYW5nZXJcIiwgXCJnaG9zdFwiLCBcInRleHRcIl0pLFxuXG4gIC8qKlxuICAgICAqIFVzZSBzaXplIGBzYCBpbiBjb25maW5lZCBzcGFjZXNcbiAgICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mKFtcInNcIiwgXCJtXCJdKSxcblxuICAvKipcbiAgICAgKiBgZGlzYWJsZWRgIGlzIGFsc28gYWxsb3dlZFxuICAgICAqL1xuICBpc0Rpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBBcHBsaWVzIHRoZSBib29sZWFuIHN0YXRlIGFzIHRoZSBgYXJpYS1wcmVzc2VkYCBwcm9wZXJ0eSB0byBjcmVhdGUgYSB0b2dnbGUgYnV0dG9uLlxuICAgICAqICpPbmx5IHVzZSB3aGVuIHRoZSByZWFkYWJsZSB0ZXh0IGRvZXMgbm90IGNoYW5nZSBiZXR3ZWVuIHN0YXRlcy4qXG4gICAgICovXG4gIGlzU2VsZWN0ZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIEV4dGVuZHMgdGhlIGJ1dHRvbiB0byAxMDAlIHdpZHRoXG4gICAgICovXG4gIGZ1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogT3ZlcnJpZGUgdGhlIGRlZmF1bHQgbWluaW11bSB3aWR0aFxuICAgICAqL1xuICBtaW5XaWR0aDogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBGb3JjZSBkaXNhYmxlcyB0aGUgYnV0dG9uIGFuZCBjaGFuZ2VzIHRoZSBpY29uIHRvIGEgbG9hZGluZyBzcGlubmVyXG4gICAgICovXG4gIGlzTG9hZGluZzogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogT2JqZWN0IG9mIHByb3BzIHBhc3NlZCB0byB0aGUgPHNwYW4vPiB3cmFwcGluZyB0aGUgYnV0dG9uJ3MgY29udGVudFxuICAgICAqL1xuICBjb250ZW50UHJvcHM6IFByb3BUeXBlcy5hbnksXG4gIHN0eWxlOiBQcm9wVHlwZXMuYW55LFxuICBpY29uVHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYWxlcnRcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhc3Rlcmlza1wiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJib2x0XCIsIFwiYm94ZXNIb3Jpem9udGFsXCIsIFwiYm94ZXNWZXJ0aWNhbFwiLCBcImJyYW5jaFwiLCBcImJyYW5jaFVzZXJcIiwgXCJicm9vbVwiLCBcImJydXNoXCIsIFwiYnVnXCIsIFwiYnVsbHNleWVcIiwgXCJjYWxlbmRhclwiLCBcImNhbnZhc0FwcFwiLCBcImNhc2VzQXBwXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsb2NrXCIsIFwiY2xvdWREcml6emxlXCIsIFwiY2xvdWRTdG9ybXlcIiwgXCJjbG91ZFN1bm55XCIsIFwiY2x1c3RlclwiLCBcImNvZGVBcHBcIiwgXCJjb2xvclwiLCBcImNvbXB1dGVcIiwgXCJjb25zb2xlXCIsIFwiY29uc29sZUFwcFwiLCBcImNvbnRhaW5lclwiLCBcImNvbnRpbnVpdHlBYm92ZVwiLCBcImNvbnRpbnVpdHlBYm92ZUJlbG93XCIsIFwiY29udGludWl0eUJlbG93XCIsIFwiY29udGludWl0eVdpdGhpblwiLCBcImNvbnRyb2xzSG9yaXpvbnRhbFwiLCBcImNvbnRyb2xzVmVydGljYWxcIiwgXCJjb3B5XCIsIFwiY29weUNsaXBib2FyZFwiLCBcImNyZWF0ZUFkdmFuY2VkSm9iXCIsIFwiY3JlYXRlTXVsdGlNZXRyaWNKb2JcIiwgXCJjcmVhdGVQb3B1bGF0aW9uSm9iXCIsIFwiY3JlYXRlU2luZ2xlTWV0cmljSm9iXCIsIFwiY3Jvc3NcIiwgXCJjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcFwiLCBcImNyb3NzSW5BQ2lyY2xlRmlsbGVkXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpc2NvdmVyQXBwXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG91YmxlQXJyb3dMZWZ0XCIsIFwiZG91YmxlQXJyb3dSaWdodFwiLCBcImRvd25sb2FkXCIsIFwiZWRpdG9yQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JBbGlnbkxlZnRcIiwgXCJlZGl0b3JBbGlnblJpZ2h0XCIsIFwiZWRpdG9yQm9sZFwiLCBcImVkaXRvckNoZWNrbGlzdFwiLCBcImVkaXRvckNvZGVCbG9ja1wiLCBcImVkaXRvckNvbW1lbnRcIiwgXCJlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbFwiLCBcImVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbFwiLCBcImVkaXRvckhlYWRpbmdcIiwgXCJlZGl0b3JJdGFsaWNcIiwgXCJlZGl0b3JJdGVtQWxpZ25Cb3R0b21cIiwgXCJlZGl0b3JJdGVtQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JJdGVtQWxpZ25MZWZ0XCIsIFwiZWRpdG9ySXRlbUFsaWduTWlkZGxlXCIsIFwiZWRpdG9ySXRlbUFsaWduUmlnaHRcIiwgXCJlZGl0b3JJdGVtQWxpZ25Ub3BcIiwgXCJlZGl0b3JMaW5rXCIsIFwiZWRpdG9yT3JkZXJlZExpc3RcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnRcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BMZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BSaWdodFwiLCBcImVkaXRvclJlZG9cIiwgXCJlZGl0b3JTdHJpa2VcIiwgXCJlZGl0b3JUYWJsZVwiLCBcImVkaXRvclVuZGVybGluZVwiLCBcImVkaXRvclVuZG9cIiwgXCJlZGl0b3JVbm9yZGVyZWRMaXN0XCIsIFwiZW1haWxcIiwgXCJlbXB0eVwiLCBcImVtc0FwcFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibW9iaWxlXCIsIFwibW9uaXRvcmluZ0FwcFwiLCBcIm1vb25cIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFwZXJDbGlwXCIsIFwicGFydGlhbFwiLCBcInBhdXNlXCIsIFwicGF5bWVudFwiLCBcInBlbmNpbFwiLCBcInBlcmNlbnRcIiwgXCJwaW5cIiwgXCJwaW5GaWxsZWRcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBsYXlcIiwgXCJwbGF5RmlsbGVkXCIsIFwicGx1c1wiLCBcInBsdXNJbkNpcmNsZVwiLCBcInBsdXNJbkNpcmNsZUZpbGxlZFwiLCBcInBvcG91dFwiLCBcInB1c2hcIiwgXCJxdWVzdGlvbkluQ2lyY2xlXCIsIFwicXVvdGVcIiwgXCJyZWNlbnRseVZpZXdlZEFwcFwiLCBcInJlZnJlc2hcIiwgXCJyZWdyZXNzaW9uSm9iXCIsIFwicmVwb3J0ZXJcIiwgXCJyZXBvcnRpbmdBcHBcIiwgXCJyZXR1cm5LZXlcIiwgXCJzYXZlXCIsIFwic2F2ZWRPYmplY3RzQXBwXCIsIFwic2NhbGVcIiwgXCJzZWFyY2hcIiwgXCJzZWFyY2hQcm9maWxlckFwcFwiLCBcInNlY3VyaXR5QW5hbHl0aWNzQXBwXCIsIFwic2VjdXJpdHlBcHBcIiwgXCJzZWN1cml0eVNpZ25hbFwiLCBcInNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWRcIiwgXCJzZWN1cml0eVNpZ25hbFJlc29sdmVkXCIsIFwic2Vzc2lvblZpZXdlclwiLCBcInNoYXJkXCIsIFwic2hhcmVcIiwgXCJzbm93Zmxha2VcIiwgXCJzb3J0RG93blwiLCBcInNvcnRMZWZ0XCIsIFwic29ydFJpZ2h0XCIsIFwic29ydFVwXCIsIFwic29ydGFibGVcIiwgXCJzcGFjZXNBcHBcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EZW5zZVZlY3RvclwiLCBcInRva2VuRWxlbWVudFwiLCBcInRva2VuRW51bVwiLCBcInRva2VuRW51bU1lbWJlclwiLCBcInRva2VuRXZlbnRcIiwgXCJ0b2tlbkV4Y2VwdGlvblwiLCBcInRva2VuRmllbGRcIiwgXCJ0b2tlbkZpbGVcIiwgXCJ0b2tlbkZsYXR0ZW5lZFwiLCBcInRva2VuRnVuY3Rpb25cIiwgXCJ0b2tlbkdlb1wiLCBcInRva2VuSGlzdG9ncmFtXCIsIFwidG9rZW5JbnRlcmZhY2VcIiwgXCJ0b2tlbklQXCIsIFwidG9rZW5Kb2luXCIsIFwidG9rZW5LZXlcIiwgXCJ0b2tlbktleXdvcmRcIiwgXCJ0b2tlbk1ldGhvZFwiLCBcInRva2VuTWV0cmljQ291bnRlclwiLCBcInRva2VuTWV0cmljR2F1Z2VcIiwgXCJ0b2tlbk1vZHVsZVwiLCBcInRva2VuTmFtZXNwYWNlXCIsIFwidG9rZW5OZXN0ZWRcIiwgXCJ0b2tlbk51bGxcIiwgXCJ0b2tlbk51bWJlclwiLCBcInRva2VuT2JqZWN0XCIsIFwidG9rZW5PcGVyYXRvclwiLCBcInRva2VuUGFja2FnZVwiLCBcInRva2VuUGFyYW1ldGVyXCIsIFwidG9rZW5QZXJjb2xhdG9yXCIsIFwidG9rZW5Qcm9wZXJ0eVwiLCBcInRva2VuUmFuZ2VcIiwgXCJ0b2tlblJhbmtGZWF0dXJlXCIsIFwidG9rZW5SYW5rRmVhdHVyZXNcIiwgXCJ0b2tlblJlcG9cIiwgXCJ0b2tlblNlYXJjaFR5cGVcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkXSksXG4gIGljb25TaWRlOiBQcm9wVHlwZXMub25lT2YoW1wibGVmdFwiLCBcInJpZ2h0XCJdKSxcbiAgdGV4dFByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgcmVmOiBQcm9wVHlwZXMuYW55LFxuICAgIFwiZGF0YS10ZXh0XCI6IFByb3BUeXBlcy5zdHJpbmdcbiAgfSksXG4gIGljb25TaXplOiBQcm9wVHlwZXMub25lT2YoW1wic1wiLCBcIm1cIl0pLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICAgKiBQcm92aWRlIGEgdmFsaWQgZWxlbWVudCB0byByZW5kZXIgdGhlIGVsZW1lbnQgYXNcbiAgICAgICAqL1xuICBlbGVtZW50OiBQcm9wVHlwZXMub25lT2YoW1wiYVwiLCBcImJ1dHRvblwiLCBcInNwYW5cIiwgXCJsYWJlbFwiXSkuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICAgICAqIFByb3ZpZGUgdGhlIGNvbXBvbmVudCdzIGJhc2UgY2xhc3MgbmFtZSB0byBidWlsZCB0aGUgY2xhc3MgbGlzdCBvblxuICAgICAgICovXG4gIGJhc2VDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZFxufTtcbkV1aUJ1dHRvbkRpc3BsYXlEZXByZWNhdGVkLmRpc3BsYXlOYW1lID0gJ0V1aUJ1dHRvbkRpc3BsYXknOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJ0ZXh0UHJvcHNcIiwgXCJpc0xvYWRpbmdcIiwgXCJpY29uVHlwZVwiLCBcImljb25TaXplXCIsIFwiaWNvblNpZGVcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBrZXlzT2YgfSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IHsgRXVpTG9hZGluZ1NwaW5uZXIgfSBmcm9tICcuLi9sb2FkaW5nJztcbmltcG9ydCB7IEV1aUljb24gfSBmcm9tICcuLi9pY29uJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgaWNvblNpZGVUb0NsYXNzTmFtZU1hcCA9IHtcbiAgbGVmdDogbnVsbCxcbiAgcmlnaHQ6ICdldWlCdXR0b25Db250ZW50LS1pY29uUmlnaHQnXG59O1xuZXhwb3J0IHZhciBJQ09OX1NJREVTID0ga2V5c09mKGljb25TaWRlVG9DbGFzc05hbWVNYXApO1xuZXhwb3J0IHZhciBFdWlCdXR0b25Db250ZW50RGVwcmVjYXRlZCA9IGZ1bmN0aW9uIEV1aUJ1dHRvbkNvbnRlbnREZXByZWNhdGVkKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIHRleHRQcm9wcyA9IF9yZWYudGV4dFByb3BzLFxuICAgICAgX3JlZiRpc0xvYWRpbmcgPSBfcmVmLmlzTG9hZGluZyxcbiAgICAgIGlzTG9hZGluZyA9IF9yZWYkaXNMb2FkaW5nID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkaXNMb2FkaW5nLFxuICAgICAgaWNvblR5cGUgPSBfcmVmLmljb25UeXBlLFxuICAgICAgX3JlZiRpY29uU2l6ZSA9IF9yZWYuaWNvblNpemUsXG4gICAgICBpY29uU2l6ZSA9IF9yZWYkaWNvblNpemUgPT09IHZvaWQgMCA/ICdtJyA6IF9yZWYkaWNvblNpemUsXG4gICAgICBfcmVmJGljb25TaWRlID0gX3JlZi5pY29uU2lkZSxcbiAgICAgIGljb25TaWRlID0gX3JlZiRpY29uU2lkZSA9PT0gdm9pZCAwID8gJ2xlZnQnIDogX3JlZiRpY29uU2lkZSxcbiAgICAgIGNvbnRlbnRQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIC8vIEFkZCBhbiBpY29uIHRvIHRoZSBidXR0b24gaWYgb25lIGV4aXN0cy5cbiAgdmFyIGJ1dHRvbkljb247XG5cbiAgaWYgKGlzTG9hZGluZykge1xuICAgIGJ1dHRvbkljb24gPSBfX19FbW90aW9uSlNYKEV1aUxvYWRpbmdTcGlubmVyLCB7XG4gICAgICBjbGFzc05hbWU6IFwiZXVpQnV0dG9uQ29udGVudF9fc3Bpbm5lclwiLFxuICAgICAgc2l6ZTogaWNvblNpemVcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChpY29uVHlwZSkge1xuICAgIGJ1dHRvbkljb24gPSBfX19FbW90aW9uSlNYKEV1aUljb24sIHtcbiAgICAgIGNsYXNzTmFtZTogXCJldWlCdXR0b25Db250ZW50X19pY29uXCIsXG4gICAgICB0eXBlOiBpY29uVHlwZSxcbiAgICAgIHNpemU6IGljb25TaXplLFxuICAgICAgY29sb3I6IFwiaW5oZXJpdFwiIC8vIGZvcmNlcyB0aGUgaWNvbiB0byBpbmhlcml0IGl0cyBwYXJlbnQgY29sb3JcblxuICAgIH0pO1xuICB9XG5cbiAgdmFyIGNvbnRlbnRDbGFzc05hbWVzID0gY2xhc3NOYW1lcygnZXVpQnV0dG9uQ29udGVudCcsIGljb25TaWRlID8gaWNvblNpZGVUb0NsYXNzTmFtZU1hcFtpY29uU2lkZV0gOiBudWxsLCBjb250ZW50UHJvcHMgJiYgY29udGVudFByb3BzLmNsYXNzTmFtZSk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3BhblwiLCBfZXh0ZW5kcyh7fSwgY29udGVudFByb3BzLCB7XG4gICAgY2xhc3NOYW1lOiBjb250ZW50Q2xhc3NOYW1lc1xuICB9KSwgYnV0dG9uSWNvbiwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwgdGV4dFByb3BzLCBjaGlsZHJlbikpO1xufTtcbkV1aUJ1dHRvbkNvbnRlbnREZXByZWNhdGVkLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAgICogQW55IGB0eXBlYCBhY2NlcHRlZCBieSBFdWlJY29uXG4gICAgICovXG4gIGljb25UeXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbGVydFwiLCBcImFuYWx5emVFdmVudFwiLCBcImFubm90YXRpb25cIiwgXCJhcG1BcHBcIiwgXCJhcG1UcmFjZVwiLCBcImFwcFNlYXJjaEFwcFwiLCBcImFwcHNcIiwgXCJhcnJvd0Rvd25cIiwgXCJhcnJvd0xlZnRcIiwgXCJhcnJvd1JpZ2h0XCIsIFwiYXJyb3dVcFwiLCBcImFycm93U3RhcnRcIiwgXCJhcnJvd0VuZFwiLCBcImFzdGVyaXNrXCIsIFwiYXVkaXRiZWF0QXBwXCIsIFwiYmVha2VyXCIsIFwiYmVsbFwiLCBcImJlbGxTbGFzaFwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGVja1wiLCBcImNoZWNrSW5DaXJjbGVGaWxsZWRcIiwgXCJjaGVlclwiLCBcImNsYXNzaWZpY2F0aW9uSm9iXCIsIFwiY2xvY2tcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkFDaXJjbGVGaWxsZWRcIiwgXCJjcm9zc2hhaXJzXCIsIFwiY3VycmVuY3lcIiwgXCJjdXRcIiwgXCJkYXNoYm9hcmRBcHBcIiwgXCJkYXRhVmlzdWFsaXplclwiLCBcImRhdGFiYXNlXCIsIFwiZGVza3RvcFwiLCBcImRldlRvb2xzQXBwXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZXFsXCIsIFwiZXJhc2VyXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZsYWdcIiwgXCJmbGVldEFwcFwiLCBcImZvbGRcIiwgXCJmb2xkZXJDaGVja1wiLCBcImZvbGRlckNsb3NlZFwiLCBcImZvbGRlckV4Y2xhbWF0aW9uXCIsIFwiZm9sZGVyT3BlblwiLCBcImZyYW1lTmV4dFwiLCBcImZyYW1lUHJldmlvdXNcIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFNjcmVlbkV4aXRcIiwgXCJmdW5jdGlvblwiLCBcImdlYXJcIiwgXCJnaXNBcHBcIiwgXCJnbGFzc2VzXCIsIFwiZ2xvYmVcIiwgXCJncmFiXCIsIFwiZ3JhYkhvcml6b250YWxcIiwgXCJncmFwaEFwcFwiLCBcImdyaWRcIiwgXCJncm9rQXBwXCIsIFwiaGVhcnRcIiwgXCJoZWFydGJlYXRBcHBcIiwgXCJoZWF0bWFwXCIsIFwiaGVscFwiLCBcImhvbWVcIiwgXCJpSW5DaXJjbGVcIiwgXCJpbWFnZVwiLCBcImltcG9ydEFjdGlvblwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5wdXRPdXRwdXRcIiwgXCJpbnNwZWN0XCIsIFwiaW52ZXJ0XCIsIFwiaXBcIiwgXCJrZXlib2FyZFwiLCBcImtxbEZpZWxkXCIsIFwia3FsRnVuY3Rpb25cIiwgXCJrcWxPcGVyYW5kXCIsIFwia3FsU2VsZWN0b3JcIiwgXCJrcWxWYWx1ZVwiLCBcImt1YmVybmV0ZXNOb2RlXCIsIFwia3ViZXJuZXRlc1BvZFwiLCBcImxheWVyc1wiLCBcImxlbnNBcHBcIiwgXCJsZXR0ZXJpbmdcIiwgXCJsaW5lRGFzaGVkXCIsIFwibGluZURvdHRlZFwiLCBcImxpbmVTb2xpZFwiLCBcImxpbmtcIiwgXCJsaXN0XCIsIFwibGlzdEFkZFwiLCBcImxvY2tcIiwgXCJsb2NrT3BlblwiLCBcImxvZ29BV1NcIiwgXCJsb2dvQVdTTW9ub1wiLCBcImxvZ29BZXJvc3Bpa2VcIiwgXCJsb2dvQXBhY2hlXCIsIFwibG9nb0FwcFNlYXJjaFwiLCBcImxvZ29BenVyZVwiLCBcImxvZ29BenVyZU1vbm9cIiwgXCJsb2dvQmVhdHNcIiwgXCJsb2dvQnVzaW5lc3NBbmFseXRpY3NcIiwgXCJsb2dvQ2VwaFwiLCBcImxvZ29DbG91ZFwiLCBcImxvZ29DbG91ZEVudGVycHJpc2VcIiwgXCJsb2dvQ29kZVwiLCBcImxvZ29Db2Rlc2FuZGJveFwiLCBcImxvZ29Db3VjaGJhc2VcIiwgXCJsb2dvRG9ja2VyXCIsIFwibG9nb0Ryb3B3aXphcmRcIiwgXCJsb2dvRWxhc3RpY1wiLCBcImxvZ29FbGFzdGljU3RhY2tcIiwgXCJsb2dvRWxhc3RpY3NlYXJjaFwiLCBcImxvZ29FbnRlcnByaXNlU2VhcmNoXCIsIFwibG9nb0V0Y2RcIiwgXCJsb2dvR0NQXCIsIFwibG9nb0dDUE1vbm9cIiwgXCJsb2dvR2l0aHViXCIsIFwibG9nb0dtYWlsXCIsIFwibG9nb0dvbGFuZ1wiLCBcImxvZ29Hb29nbGVHXCIsIFwibG9nb0hBcHJveHlcIiwgXCJsb2dvSUJNXCIsIFwibG9nb0lCTU1vbm9cIiwgXCJsb2dvS2Fma2FcIiwgXCJsb2dvS2liYW5hXCIsIFwibG9nb0t1YmVybmV0ZXNcIiwgXCJsb2dvTG9nZ2luZ1wiLCBcImxvZ29Mb2dzdGFzaFwiLCBcImxvZ29NYXBzXCIsIFwibG9nb01lbWNhY2hlZFwiLCBcImxvZ29NZXRyaWNzXCIsIFwibG9nb01vbmdvZGJcIiwgXCJsb2dvTXlTUUxcIiwgXCJsb2dvTmdpbnhcIiwgXCJsb2dvT2JzZXJ2YWJpbGl0eVwiLCBcImxvZ29Pc3F1ZXJ5XCIsIFwibG9nb1BocFwiLCBcImxvZ29Qb3N0Z3Jlc1wiLCBcImxvZ29Qcm9tZXRoZXVzXCIsIFwibG9nb1JhYmJpdG1xXCIsIFwibG9nb1JlZGlzXCIsIFwibG9nb1NlY3VyaXR5XCIsIFwibG9nb1NpdGVTZWFyY2hcIiwgXCJsb2dvU2tldGNoXCIsIFwibG9nb1NsYWNrXCIsIFwibG9nb1VwdGltZVwiLCBcImxvZ29XZWJob29rXCIsIFwibG9nb1dpbmRvd3NcIiwgXCJsb2dvV29ya3BsYWNlU2VhcmNoXCIsIFwibG9nc0FwcFwiLCBcImxvZ3N0YXNoRmlsdGVyXCIsIFwibG9nc3Rhc2hJZlwiLCBcImxvZ3N0YXNoSW5wdXRcIiwgXCJsb2dzdGFzaE91dHB1dFwiLCBcImxvZ3N0YXNoUXVldWVcIiwgXCJtYWNoaW5lTGVhcm5pbmdBcHBcIiwgXCJtYWduZXRcIiwgXCJtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uXCIsIFwibWFnbmlmeVdpdGhNaW51c1wiLCBcIm1hZ25pZnlXaXRoUGx1c1wiLCBcIm1hbmFnZW1lbnRBcHBcIiwgXCJtYXBNYXJrZXJcIiwgXCJtZW1vcnlcIiwgXCJtZW51XCIsIFwibWVudURvd25cIiwgXCJtZW51TGVmdFwiLCBcIm1lbnVSaWdodFwiLCBcIm1lbnVVcFwiLCBcIm1lcmdlXCIsIFwibWV0cmljYmVhdEFwcFwiLCBcIm1ldHJpY3NBcHBcIiwgXCJtaW5pbWl6ZVwiLCBcIm1pbnVzXCIsIFwibWludXNJbkNpcmNsZVwiLCBcIm1pbnVzSW5DaXJjbGVGaWxsZWRcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5vZGVcIiwgXCJub3RlYm9va0FwcFwiLCBcIm51bWJlclwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIiwgXCJvdXRsaWVyRGV0ZWN0aW9uSm9iXCIsIFwicGFja2FnZVwiLCBcInBhY2tldGJlYXRBcHBcIiwgXCJwYWdlU2VsZWN0XCIsIFwicGFnZXNTZWxlY3RcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVsaW5lQXBwXCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNub3dmbGFrZVwiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc0FwcFwiLCBcInNxbEFwcFwiLCBcInN0YXJFbXB0eVwiLCBcInN0YXJFbXB0eVNwYWNlXCIsIFwic3RhckZpbGxlZFwiLCBcInN0YXJGaWxsZWRTcGFjZVwiLCBcInN0YXJNaW51c0VtcHR5XCIsIFwic3Rhck1pbnVzRmlsbGVkXCIsIFwic3RhclBsdXNFbXB0eVwiLCBcInN0YXJQbHVzRmlsbGVkXCIsIFwic3RhdHNcIiwgXCJzdG9wXCIsIFwic3RvcEZpbGxlZFwiLCBcInN0b3BTbGFzaFwiLCBcInN0b3JhZ2VcIiwgXCJzdHJpbmdcIiwgXCJzdWJtb2R1bGVcIiwgXCJzdW5cIiwgXCJzd2F0Y2hJbnB1dFwiLCBcInN5bWxpbmtcIiwgXCJ0YWJsZURlbnNpdHlDb21wYWN0XCIsIFwidGFibGVEZW5zaXR5RXhwYW5kZWRcIiwgXCJ0YWJsZURlbnNpdHlOb3JtYWxcIiwgXCJ0YWJsZU9mQ29udGVudHNcIiwgXCJ0YWdcIiwgXCJ0ZWFyXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJ0aW1lbGluZVwiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFzaFwiLCBcInVuZm9sZFwiLCBcInVubGlua1wiLCBcInVwZ3JhZGVBc3Npc3RhbnRBcHBcIiwgXCJ1cHRpbWVBcHBcIiwgXCJ1c2VyXCIsIFwidXNlckF2YXRhclwiLCBcInVzZXJzXCIsIFwidXNlcnNSb2xlc0FwcFwiLCBcInZlY3RvclwiLCBcInZpZGVvUGxheWVyXCIsIFwidmlzQXJlYVwiLCBcInZpc0FyZWFTdGFja2VkXCIsIFwidmlzQmFySG9yaXpvbnRhbFwiLCBcInZpc0Jhckhvcml6b250YWxTdGFja2VkXCIsIFwidmlzQmFyVmVydGljYWxcIiwgXCJ2aXNCYXJWZXJ0aWNhbFN0YWNrZWRcIiwgXCJ2aXNHYXVnZVwiLCBcInZpc0dvYWxcIiwgXCJ2aXNMaW5lXCIsIFwidmlzTWFwQ29vcmRpbmF0ZVwiLCBcInZpc01hcFJlZ2lvblwiLCBcInZpc01ldHJpY1wiLCBcInZpc1BpZVwiLCBcInZpc1RhYmxlXCIsIFwidmlzVGFnQ2xvdWRcIiwgXCJ2aXNUZXh0XCIsIFwidmlzVGltZWxpb25cIiwgXCJ2aXNWZWdhXCIsIFwidmlzVmlzdWFsQnVpbGRlclwiLCBcInZpc3VhbGl6ZUFwcFwiLCBcIndhdGNoZXNBcHBcIiwgXCJ3b3JkV3JhcFwiLCBcIndvcmRXcmFwRGlzYWJsZWRcIiwgXCJ3b3JrcGxhY2VTZWFyY2hBcHBcIiwgXCJ3cmVuY2hcIiwgXCJ0b2tlbkFsaWFzXCIsIFwidG9rZW5Bbm5vdGF0aW9uXCIsIFwidG9rZW5BcnJheVwiLCBcInRva2VuQmluYXJ5XCIsIFwidG9rZW5Cb29sZWFuXCIsIFwidG9rZW5DbGFzc1wiLCBcInRva2VuQ29tcGxldGlvblN1Z2dlc3RlclwiLCBcInRva2VuQ29uc3RhbnRcIiwgXCJ0b2tlbkRhdGVcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2hhcGVcIiwgXCJ0b2tlblN0cmluZ1wiLCBcInRva2VuU3RydWN0XCIsIFwidG9rZW5TeW1ib2xcIiwgXCJ0b2tlblRhZ1wiLCBcInRva2VuVGV4dFwiLCBcInRva2VuVG9rZW5Db3VudFwiLCBcInRva2VuVmFyaWFibGVcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWRdKSxcblxuICAvKipcbiAgICAgKiBDYW4gb25seSBiZSBvbmUgc2lkZSBgbGVmdGAgb3IgYHJpZ2h0YFxuICAgICAqL1xuICBpY29uU2lkZTogUHJvcFR5cGVzLm9uZU9mKFtcImxlZnRcIiwgXCJyaWdodFwiXSksXG4gIGlzTG9hZGluZzogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogT2JqZWN0IG9mIHByb3BzIHBhc3NlZCB0byB0aGUgPHNwYW4vPiB3cmFwcGluZyB0aGUgY29udGVudCdzIHRleHQgKG9ubHkgaWYgdGhlIGNoaWxkcmVuIGlzIGEgYHN0cmluZ2ApXG4gICAgICogSXQgZG9lc24ndCBhcHBseSB0byB0aGUgaWNvbi5cbiAgICAgKi9cbiAgdGV4dFByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgcmVmOiBQcm9wVHlwZXMuYW55LFxuICAgIFwiZGF0YS10ZXh0XCI6IFByb3BUeXBlcy5zdHJpbmdcbiAgfSksXG4gIGljb25TaXplOiBQcm9wVHlwZXMub25lT2YoW1wic1wiLCBcIm1cIl0pLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFjY2Vzc2liaWxpdHkgPSBmdW5jdGlvbiBFdWlJY29uQWNjZXNzaWJpbGl0eShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggMGE4IDggMCAxMTAgMTZBOCA4IDAgMDE4IDB6bTAgMWE3IDcgMCAxMDAgMTRBNyA3IDAgMDA4IDF6bTMuOTc0IDQuMzQyYS41LjUgMCAwMS0uMjMzLjU5NmwtLjA4My4wMzZMOSA2Ljg2djIuNTU5bC45NzQgMi45MjNhLjUuNSAwIDAxLS4yMzMuNTk2bC0uMDgzLjAzNmEuNS41IDAgMDEtLjU5Ni0uMjMzbC0uMDM2LS4wODMtMS0zTDggOS41bC0uMDI2LjE1OC0xIDNhLjUuNSAwIDAxLS45Ny0uMjI4bC4wMjItLjA4OEw3IDkuNDE2VjYuODZsLTIuNjU4LS44ODZhLjUuNSAwIDAxLjIyOC0uOTdsLjA4OC4wMjJMNy41ODMgNmguODMzbDIuOTI2LS45NzRhLjUuNSAwIDAxLjYzMi4zMTZ6TTggM2ExIDEgMCAxMTAgMiAxIDEgMCAwMTAtMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQWNjZXNzaWJpbGl0eTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQWdncmVnYXRlID0gZnVuY3Rpb24gRXVpSWNvbkFnZ3JlZ2F0ZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0yLjUgMmEuNS41IDAgMTAwIDEgLjUuNSAwIDAwMC0xem0wLTFhMS41IDEuNSAwIDAxMS40MTUgMWgxLjkwOGExLjUgMS41IDAgMDExLjM5My45NDNMOC44MzkgN0gxMi41YS41LjUgMCAwMTAgMUg4LjgzOWwtMS42MjMgNC4wNTdBMS41IDEuNSAwIDAxNS44MjMgMTNIMy45MTVhMS41IDEuNSAwIDExMC0xaDEuOTA4YS41LjUgMCAwMC40NjQtLjMxNEw3Ljc2MSA4SDMuOTE1YTEuNSAxLjUgMCAxMTAtMUg3Ljc2TDYuMjg3IDMuMzE0QS41LjUgMCAwMDUuODIzIDNIMy45MTVBMS41IDEuNSAwIDExMi41IDF6bTAgMTFhLjUuNSAwIDExMCAxIC41LjUgMCAwMTAtMXpNMyA3LjVhLjUuNSAwIDEwLTEgMCAuNS41IDAgMDAxIDB6bTkuMzU0LTMuMzU0YS41LjUgMCAwMC0uNzA4LjcwOEwxMy43OTMgN2EuNzA3LjcwNyAwIDAxMCAxbC0yLjE0NyAyLjE0NmEuNS41IDAgMDAuNzA4LjcwOEwxNC41IDguNzA3YTEuNzA3IDEuNzA3IDAgMDAwLTIuNDE0bC0yLjE0Ni0yLjE0N3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQWdncmVnYXRlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BbGVydCA9IGZ1bmN0aW9uIEV1aUljb25BbGVydChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk03LjU5IDEwLjA1OUw3LjM1IDUuMThoMS4zTDguNCAxMC4wNmgtLjgxem0uMzk0IDEuOTAxYS42MS42MSAwIDAxLS40NDgtLjE4Ni42MDYuNjA2IDAgMDEtLjE4Ni0uNDQ0YzAtLjE3NC4wNjItLjMyMy4xODYtLjQ0NmEuNjE0LjYxNCAwIDAxLjQ0OC0uMTg0Yy4xNjkgMCAuMzE1LjA2LjQ0LjE4Mi4xMjQuMTIyLjE4Ni4yNy4xODYuNDQ4YS42LjYgMCAwMS0uMTg5LjQ0Ni42MDcuNjA3IDAgMDEtLjQzNy4xODR6TTIgMTRhMSAxIDAgMDEtLjg3OC0xLjQ3OWw2LTExYTEgMSAwIDAxMS43NTYgMGw2IDExQTEgMSAwIDAxMTQgMTRIMnptMC0xaDEyTDggMiAyIDEzelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BbGVydDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQW5hbHl6ZUV2ZW50ID0gZnVuY3Rpb24gRXVpSWNvbkFuYWx5emVFdmVudChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOCA5LjE2OUwyIDUuMjV2Ni4xN2w2IDMuNDI4IDYtMy40MjhWNS4yNUw4IDkuMTd6TTE1IDR2OGwtNyA0LTctNFY0bDctNCA3IDR6bS0xLjQyOC4zMzZMOCAxLjE1MiAyLjQyOCA0LjMzNiA4IDcuOTc0bDUuNTcyLTMuNjM4elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BbmFseXplRXZlbnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFuYWx5emVFdmVudCA9IGZ1bmN0aW9uIEV1aUljb25BbmFseXplRXZlbnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE0LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTMuOTI0IDQuMDEzYS42MDUuNjA1IDAgMDAtLjIyOC0uMjM2TDcuMzA0LjA4MmEuNjA3LjYwNyAwIDAwLS42MDggMEwuMzA0IDMuNzc3QS42Mi42MiAwIDAwMCA0LjMwNHY3LjM5MmMwIC4yMTcuMTE2LjQxOC4zMDQuNTI3bDYuMzkyIDMuNjk1Yy4xODguMTEuNDIuMTEuNjA4IDBsNi4zOTItMy42OTVhLjYwOS42MDkgMCAwMC4zMDQtLjUyN1Y0LjMwNGEuNjA3LjYwNyAwIDAwLS4wNzYtLjI5MXpNMSA1LjA3OXY2LjM5MWw2IDMuNDcgNi0zLjQ3VjUuMDhMNy4yNTIgOC40MzIgNyA4LjU3OWwtLjI1Mi0uMTQ3TDEgNS4wNzl6bTExLjQ3Ni0uODUyTDcgMS4wNiAxLjUyNCA0LjIyNyA3IDcuNDJsNS40NzYtMy4xOTR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFuYWx5emVFdmVudDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQW5ub3RhdGlvbiA9IGZ1bmN0aW9uIEV1aUljb25Bbm5vdGF0aW9uKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMyA2LjVhNC41IDQuNSAwIDExNSA0LjQ3M1YxNkg3di01LjAyN0E0LjUgNC41IDAgMDEzIDYuNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQW5ub3RhdGlvbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBtVHJhY2UgPSBmdW5jdGlvbiBFdWlJY29uQXBtVHJhY2UoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yIDBoMTJhMiAyIDAgMDEyIDJ2MTJhMiAyIDAgMDEtMiAySDJhMiAyIDAgMDEtMi0yVjJhMiAyIDAgMDEyLTJ6bTAgMWExIDEgMCAwMC0xIDF2MTJhMSAxIDAgMDAxIDFoMTJhMSAxIDAgMDAxLTFWMmExIDEgMCAwMC0xLTFIMnptLjUgMmgxMGEuNS41IDAgMTEwIDFoLTEwYS41LjUgMCAwMTAtMXptMSAzaDZhLjUuNSAwIDAxMCAxaC02YS41LjUgMCAwMTAtMXptMiAzaDRhLjUuNSAwIDAxMCAxaC00YS41LjUgMCAwMTAtMXptMyAzaDVhLjUuNSAwIDExMCAxaC01YS41LjUgMCAxMTAtMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBtVHJhY2U7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcEFkZERhdGEgPSBmdW5jdGlvbiBFdWlJY29uQXBwQWRkRGF0YShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMyIDMwSDBWM2gxMi41N2wzIDVIMzJ2MjJ6TTIgMjhoMjhWMTBIMTQuNDNsLTMtNUgydjIzelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0yMSAxOGgtNHYtNGgtMnY0aC00djJoNHY0aDJ2LTRoNHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwQWRkRGF0YTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwQWR2YW5jZWRTZXR0aW5ncyA9IGZ1bmN0aW9uIEV1aUljb25BcHBBZHZhbmNlZFNldHRpbmdzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0yLjkwOSAyNi4xODJoMS45Mzl2NC44NDhIMi45MDl6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00Ljg0OCAxNi42MlYwSDIuOTF2MTYuNjJhMy44NzkgMy44NzkgMCAxMDEuOTQgMHptLS45NyA1LjY4M2ExLjk0IDEuOTQgMCAxMTAtMy44NzkgMS45NCAxLjk0IDAgMDEwIDMuODc5elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0xNC41NDUgMTYuNDg1aDEuOTM5VjMxLjAzaC0xLjkzOXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2LjQ4NSA2LjkyNFYwaC0xLjk0djYuOTI0YTMuODc5IDMuODc5IDAgMTAxLjk0IDB6bS0uOTcgNS42ODJhMS45NCAxLjk0IDAgMTEwLTMuODc5IDEuOTQgMS45NCAwIDAxMCAzLjg4elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0yNi4xODIgMjYuMTgyaDEuOTM5djQuODQ4aC0xLjkzOXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI4LjEyMSAxNi42MlYwaC0xLjk0djE2LjYyYTMuODc5IDMuODc5IDAgMTAxLjk0IDB6bS0uOTcgNS42ODNhMS45NCAxLjk0IDAgMTEwLTMuODc5IDEuOTQgMS45NCAwIDAxMCAzLjg3OXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwQWR2YW5jZWRTZXR0aW5nczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwQWdlbnQgPSBmdW5jdGlvbiBFdWlJY29uQXBwQWdlbnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTIxIDIuODJMMTYgLjAzOCAxMSAyLjgydjIuMjg5bDUtMi43ODIgNSAyLjc4MnYtMi4yOXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMjEgNy4yODJMMTYgNC41bC01IDIuNzgyVjkuNTdsNS0yLjc4MSA1IDIuNzgxVjcuMjgyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNyA1LjA0NUwyIDcuODI3djE1LjU3N2wxNCA3Ljc4OCAxNC03Ljc4OFY3LjgyN2wtNS0yLjc4MnYyLjI4OWwzIDEuNjY5djEzLjIyNWwtMTIgNi42NzYtMTItNi42NzZWOS4wMDNsMy0xLjY2OVY1LjA0NXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0yMiAxMi41TDE2IDlsLTYgMy41djdsNiAzLjUgNi0zLjV2LTd6bS05Ljk3NCAxLjIwNUwxNiAxMS4zODdsMy45NzQgMi4zMTh2NC41OUwxNiAyMC42MTNsLTMuOTc0LTIuMzE4di00LjU5elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBBZ2VudDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwQXBtID0gZnVuY3Rpb24gRXVpSWNvbkFwcEFwbShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMgMTBoNHYySDFWMWgzMHY2aC0yVjNIM3Y3em0yNiAxOXYtNmgydjhIMTh2LThoMnY2aDl6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTMxIDEwSDl2MTFoMTJjNS41MjMgMCAxMC00LjQ3NyAxMC0xMHYtMXptLTEwIDlIMTF2LTdoMTcuOTM4QTguMDAxIDguMDAxIDAgMDEyMSAxOXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwQXBtOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBBcHBTZWFyY2ggPSBmdW5jdGlvbiBFdWlJY29uQXBwQXBwU2VhcmNoKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTE1LjUgMTEuOTE1TDI3IDUuMjc5IDE5LjUuOTM4YTcuMDAyIDcuMDAyIDAgMDAtNyAwbC04IDQuNjJBNyA3IDAgMDAxIDExLjYydjkuMjM3YTcgNyAwIDAwMy41IDYuMDYxbDcuNSA0LjMzVjE3Ljk4YTcgNyAwIDAxMy41LTYuMDYzek0xMCAyNy43ODV2LTkuODA4YTkgOSAwIDAxNC41LTcuNzkzbDguNTAzLTQuOTFMMTguNSAyLjY3MmE1LjAwMyA1LjAwMyAwIDAwLTUgMGwtOCA0LjYxOUE1IDUgMCAwMDMgMTEuNjJ2OS4yMzhhNSA1IDAgMDAyLjUgNC4zM2w0LjUgMi41OTh6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0xOC40MDkgMTMuNTVhNy4wODkgNy4wODkgMCAwMTEuMDM1IDEuNzExQTYuOTMgNi45MyAwIDAxMjAgMTcuOTh2MTMuMjdsNy41LTQuMzNhNyA3IDAgMDAzLjUtNi4wNjF2LTkuMjM5YTYuOTkyIDYuOTkyIDAgMDAtMS41ODctNC40MjFMMTguNDA5IDEzLjU1em0yLjc3Ny43MDVBOC45MzMgOC45MzMgMCAwMTIyIDE3Ljk3OXY5LjgwN2w0LjUtMi41OThhNSA1IDAgMDAyLjUtNC4zM1YxMS42MmMwLS41ODgtLjEwNi0xLjE2MS0uMzAzLTEuN2wtNy41MTEgNC4zMzV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcEFwcFNlYXJjaDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwQXVkaXRiZWF0ID0gZnVuY3Rpb24gRXVpSWNvbkFwcEF1ZGl0YmVhdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMTUgMGgydjMyaC0yelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMCAzMmgxM3YtMkgyVjJoMTFWMEgwek0xOSAwdjJoMTF2MjhIMTl2MmgxM1YwelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBBdWRpdGJlYXQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcENhbnZhcyA9IGZ1bmN0aW9uIEV1aUljb25BcHBDYW52YXMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTcgMTdoMnY3SDd6TTEyIDE0aDJ2MTBoLTJ6TTE3IDE2aDJ2OGgtMnpNMjIgMTRoM3YyaC0zek0yMiAxOGgzdjJoLTN6TTIyIDIyaDN2MmgtM3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMwLjczIDI0YTYuNDcgNi40NyAwIDAxLjQ1LTIuMTljLjMzNy0uOS41Mi0xLjg1LjU0LTIuODFhOC41NSA4LjU1IDAgMDAtLjU0LTIuODEgNi40NyA2LjQ3IDAgMDEtLjQ1LTIuMTkgOS4yIDkuMiAwIDAxLjYyLTIuNDljLjUzLTEuNTcgMS4wOC0zLjE5LjA4LTQuMi0xLTEuMDEtMi40MS0uNDQtMy41Mi4wNWE1LjU5IDUuNTkgMCAwMS0yLjA5LjY0IDUuMyA1LjMgMCAwMS0uNTkgMEwxNiAuMjggNi43NyA4YTUuMyA1LjMgMCAwMS0uNTkgMCA1LjU5IDUuNTkgMCAwMS0yLjA5LS42NUMzIDYuODcgMS42IDYuMjUuNTcgNy4zMWMtMS4wMyAxLjA2LS40NSAyLjYzLjA4IDQuMkE5LjIgOS4yIDAgMDExLjI3IDE0YTYuNDcgNi40NyAwIDAxLS40NSAyLjE5QTguNTUgOC41NSAwIDAwLjI4IDE5Yy4wMi45Ni4yMDMgMS45MS41NCAyLjgxQTYuNDcgNi40NyAwIDAxMS4yNyAyNGE5LjIgOS4yIDAgMDEtLjYyIDIuNDljLS41MyAxLjU3LTEuMDggMy4xOS0uMDggNC4yLjM1My4zOC44NTIuNTkgMS4zNy41OGE1LjY3IDUuNjcgMCAwMDIuMTUtLjYzQTUuNTkgNS41OSAwIDAxNi4xOCAzMGE3LjEzIDcuMTMgMCAwMTIuMjkuNDcgOCA4IDAgMDAyLjYyLjUzIDcuMzcgNy4zNyAwIDAwMi40Ny0uNTFBNy4xNCA3LjE0IDAgMDExNiAzMGE2LjI0IDYuMjQgMCAwMTIuMTQuNDUgOCA4IDAgMDAyLjc3LjU1IDguMDggOC4wOCAwIDAwMi43Ny0uNTUgNi4yNCA2LjI0IDAgMDEyLjE0LS40NSA1LjU5IDUuNTkgMCAwMTIuMDkuNjVjMS4xMS40OSAyLjQ5IDEuMTEgMy41Mi4wNSAxLjAzLTEuMDYuNDUtMi42My0uMDgtNC4yYTkuMiA5LjIgMCAwMS0uNjItMi41ek0yMS4xNyA3aC0uMjZhOCA4IDAgMDAtMi43Ny41NUE2LjI0IDYuMjQgMCAwMTE2IDhhNi4yNCA2LjI0IDAgMDEtMi4xNC0uNDVBOCA4IDAgMDAxMS4wOSA3aC0uMjZMMTYgMi43MiAyMS4xNyA3em04Ljg5IDIyLjI3YTQuNDIgNC40MiAwIDAxLTEuMzQtLjQ2IDcuMDggNy4wOCAwIDAwLTIuOS0uODIgOC4xNCA4LjE0IDAgMDAtMi43OC41NSA2LjEzIDYuMTMgMCAwMS0yLjEzLjQ1IDYuMjQgNi4yNCAwIDAxLTIuMTQtLjQ1QTggOCAwIDAwMTYgMjhhOSA5IDAgMDAtMy4wOC42IDUuNzQgNS43NCAwIDAxLTEuODMuNCA2LjM2IDYuMzYgMCAwMS0yLS40M0E4LjcyIDguNzIgMCAwMDYuMTggMjhhNy4wOCA3LjA4IDAgMDAtMi45LjgyIDkuNjUgOS42NSAwIDAxLTEuMjguNTIgNi4wOCA2LjA4IDAgMDEuNTItMi4yMWMuNDAzLTEgLjY1LTIuMDU1LjczLTMuMTNhOC41NSA4LjU1IDAgMDAtLjU0LTIuODFBNi40NyA2LjQ3IDAgMDEyLjI3IDE5YTYuNDcgNi40NyAwIDAxLjQ0LTIuMTljLjMzNy0uOS41Mi0xLjg1LjU0LTIuODFhMTAuNDggMTAuNDggMCAwMC0uNzItMy4xMyA5IDkgMCAwMS0uNTktMi4xNkgyYy40NDcuMS44OC4yNTUgMS4yOS40NmE3LjA4IDcuMDggMCAwMDIuOS44MkE4LjE0IDguMTQgMCAwMDkgOS40NCA2LjEzIDYuMTMgMCAwMTExLjA5IDlhNi4xMyA2LjEzIDAgMDEyLjEzLjQ1QTguMTQgOC4xNCAwIDAwMTYgMTBhOC4xNCA4LjE0IDAgMDAyLjc4LS41NUE2LjEzIDYuMTMgMCAwMTIwLjkxIDlhNi4xMyA2LjEzIDAgMDEyLjA5LjQ0IDguMTQgOC4xNCAwIDAwMi43OC41NSA3LjA4IDcuMDggMCAwMDIuOS0uODJBOS42NSA5LjY1IDAgMDEzMCA4LjY2YTYuMDggNi4wOCAwIDAxLS41MiAyLjIxYy0uNDAzIDEtLjY1IDIuMDU1LS43MyAzLjEzLjAyLjk2LjIwMyAxLjkxLjU0IDIuODFhNi40NyA2LjQ3IDAgMDEuNDQgMi4xOSA2LjQ3IDYuNDcgMCAwMS0uNDQgMi4xOSA4LjU1IDguNTUgMCAwMC0uNTQgMi44MWMuMDc4IDEuMDc0LjMyIDIuMTMuNzIgMy4xM2E5IDkgMCAwMS41OSAyLjE2di0uMDJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcENhbnZhczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwQ2FzZXMgPSBmdW5jdGlvbiBFdWlJY29uQXBwQ2FzZXMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMjIuNSAyNGE1LjUgNS41IDAgMTAwLTExIDUuNSA1LjUgMCAwMDAgMTF6bTAgMmE3LjUgNy41IDAgMTAwLTE1IDcuNSA3LjUgMCAwMDAgMTV6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zMC4yOTMgMjcuNzA3bC00LTQgMS40MTQtMS40MTQgNCA0LTEuNDE0IDEuNDE0ek02IDRIMnYyN2gyNXYtM2gtMnYxSDRWNmgyVjR6bTE5IDZoMlY0aC00djJoMnY0elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTE2LjM4MSAzLjAyNGwuNTM4IDEuMTU4aDIuMjc0bC42MzYgMi41NDVIOS42OGwuNjM3LTIuNTQ1aDIuNTU4bC41MzgtMS4xNThjLjI5Mi0uNjMuOTU1LTEuMDI0IDEuNDg0LTEuMDI0LjUzIDAgMS4xOTMuMzk0IDEuNDg1IDEuMDI0em02LjAxIDUuNzAzbC0xLjYzNi02LjU0NWgtMi41NkMxNy42Ljg5OCAxNi4yNjIgMCAxNC44OTcgMGMtMS4zNjQgMC0yLjcwMy44OTgtMy4yOTkgMi4xODJIOC43NTVMNy4xMTggOC43MjdoMTUuMjczek03IDE1aDZ2LTJIN3Yyem02IDVIN3YtMmg2djJ6bS02IDVoNnYtMkg3djJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcENhc2VzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBDb2RlID0gZnVuY3Rpb24gRXVpSWNvbkFwcENvZGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMS4yNzYgMjlsLjU5NCAySDBsNy42MjEtMTQuMjkuODExIDIuNzNMMy4zMzMgMjloNy45NDN6TTI4LjkyIDMxbC00Ljk4Ny0xNi41OThBMTYgMTYgMCAwMDguNjg4IDNsMS44IDZIOC40TDYgMWgyLjYwN2ExOCAxOCAwIDAxMTcuMjQxIDEyLjgyOEwzMSAzMWgtMi4wOHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMTIuMDM3IDE0LjAyTDE2LjQ5MiAyOWg2LjgyN2wtMi4zMzMtNy44NDlhMTAgMTAgMCAwMC04Ljk0OS03LjEzek05LjM1IDEyaDIuMDVhMTIgMTIgMCAwMTExLjUwMyA4LjU4MUwyNiAzMUgxNUw5LjM1IDEyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBDb2RlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBDb25zb2xlID0gZnVuY3Rpb24gRXVpSWNvbkFwcENvbnNvbGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yOSA5SDNhMyAzIDAgMDEtMy0zVjNhMyAzIDAgMDEzLTNoMjZhMyAzIDAgMDEzIDN2M2EzIDMgMCAwMS0zIDN6TTMgMmExIDEgMCAwMC0xIDF2M2ExIDEgMCAwMDEgMWgyNmExIDEgMCAwMDEtMVYzYTEgMSAwIDAwLTEtMUgzelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0yOSAzMkgzYTMgMyAwIDAxLTMtM1YxNGEzIDMgMCAwMTMtM2gyNmEzIDMgMCAwMTMgM3YxNWEzIDMgMCAwMS0zIDN6TTMgMTNhMSAxIDAgMDAtMSAxdjE1YTEgMSAwIDAwMSAxaDI2YTEgMSAwIDAwMS0xVjE0YTEgMSAwIDAwLTEtMUgzelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNy4yOSAxNy43MWwzLjMgMy4yOS0zLjMgMy4yOSAxLjQyIDEuNDIgNC43LTQuNzEtNC43LTQuNzF6TTE1IDI0aDl2MmgtOXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwQ29uc29sZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwQ3Jvc3NDbHVzdGVyUmVwbGljYXRpb24gPSBmdW5jdGlvbiBFdWlJY29uQXBwQ3Jvc3NDbHVzdGVyUmVwbGljYXRpb24oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0wIDB2MTZoOC43bDUuMy02VjBIMHptMiAyaDEwdjdIN3Y1SDJWMnptOC40NSA5TDkgMTIuNjRWMTFoMS40NXpNMTggMTZ2MTZoOC43bDUuMy02VjE2SDE4em0yIDJoMTB2N2gtNXY1aC01VjE4em04LjQ1IDlMMjcgMjguNjRWMjdoMS40NXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNNSAxOEgzYzAgNi4wNzUgNC45MjUgMTEgMTEgMTFoMnYtMmgtMmE5IDkgMCAwMS05LTl6TTE4IDNoLTJ2MmgyYTkgOSAwIDAxOSA5aDJjMC02LjA3NS00LjkyNS0xMS0xMS0xMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwQ3Jvc3NDbHVzdGVyUmVwbGljYXRpb247IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcERhc2hib2FyZCA9IGZ1bmN0aW9uIEV1aUljb25BcHBEYXNoYm9hcmQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yOSA5SDNhMyAzIDAgMDEtMy0zVjNhMyAzIDAgMDEzLTNoMjZhMyAzIDAgMDEzIDN2M2EzIDMgMCAwMS0zIDN6TTMgMmExIDEgMCAwMC0xIDF2M2ExIDEgMCAwMDEgMWgyNmExIDEgMCAwMDEtMVYzYTEgMSAwIDAwLTEtMUgzelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0xMiAyMEgzYTMgMyAwIDAxLTMtM3YtM2EzIDMgMCAwMTMtM2g5YTMgMyAwIDAxMyAzdjNhMyAzIDAgMDEtMyAzem0tOS03YTEgMSAwIDAwLTEgMXYzYTEgMSAwIDAwMSAxaDlhMSAxIDAgMDAxLTF2LTNhMSAxIDAgMDAtMS0xSDN6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMiAzMUgzYTMgMyAwIDAxLTMtM3YtM2EzIDMgMCAwMTMtM2g5YTMgMyAwIDAxMyAzdjNhMyAzIDAgMDEtMyAzem0tOS03YTEgMSAwIDAwLTEgMXYzYTEgMSAwIDAwMSAxaDlhMSAxIDAgMDAxLTF2LTNhMSAxIDAgMDAtMS0xSDN6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTI5IDMxaC05YTMgMyAwIDAxLTMtM1YxNGEzIDMgMCAwMTMtM2g5YTMgMyAwIDAxMyAzdjE0YTMgMyAwIDAxLTMgM3ptLTktMThhMSAxIDAgMDAtMSAxdjE0YTEgMSAwIDAwMSAxaDlhMSAxIDAgMDAxLTFWMTRhMSAxIDAgMDAtMS0xaC05elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBEYXNoYm9hcmQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcERldnRvb2xzID0gZnVuY3Rpb24gRXVpSWNvbkFwcERldnRvb2xzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjEgMjhoLTJ2LTguNDlsLjYtLjI2QTkgOSAwIDAwMjEgMy41MlYxMUgxMVYzLjUyYTkgOSAwIDAwMS40IDE1LjczbC42LjI2VjI4aC0ydi03LjIxQTExIDExIDAgMDExMS42LjkyTDEzIC4zMVY5aDZWLjMxbDEuNC42MWExMSAxMSAwIDAxLjYgMTkuODdWMjh6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTExIDMwaDEwdjJIMTF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcERldnRvb2xzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBEaXNjb3ZlciA9IGZ1bmN0aW9uIEV1aUljb25BcHBEaXNjb3ZlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNOC4zMyAyMy42N2w0Ljc5LTEwLjU1IDEwLjU1LTQuNzktNC43OSAxMC41NS0xMC41NSA0Ljc5em02LjMtOWwtMi4yOCA1IDUtMi4yOCAyLjI4LTUtNSAyLjI4elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYgMEM3LjE2MyAwIDAgNy4xNjMgMCAxNnM3LjE2MyAxNiAxNiAxNiAxNi03LjE2MyAxNi0xNkExNiAxNiAwIDAwMTYgMHptMSAyOS45NVYyOGgtMnYxLjk1QTE0IDE0IDAgMDEyLjA1IDE3SDR2LTJIMi4wNUExNCAxNCAwIDAxMTUgMi4wNVY0aDJWMi4wNUExNCAxNCAwIDAxMjkuOTUgMTVIMjh2MmgxLjk1QTE0IDE0IDAgMDExNyAyOS45NXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwRGlzY292ZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcEVtcyA9IGZ1bmN0aW9uIEV1aUljb25BcHBFbXMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTMgMjJoM3YySDFWMWgyM3Y1aC0yVjNIM3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE1LjIyOCAyOWMxLjQ5Mi0xLjY3OCAxLjM1My0yLjg1OS4wMDktNS42NTQtLjA0OS0uMS0uMDQ5LS4xLS4wOTctLjIwMy0xLjM2OS0yLjg1NS0xLjYyNi00LjQ5MS0uMzI1LTYuNTgyIDIuNzk2LTQuNDk4IDkuNTE0LTIuNjQyIDE0LjE4NSAyLjMxN1YxMEgxMHYxOWg1LjIyOHptMi40NyAwSDI5di02Ljk4M2MtMy44OC01LjQwNi0xMC4zNzYtNy43OTUtMTIuNDg3LTQuNC0uODMgMS4zMzYtLjY2OSAyLjM3LjQzIDQuNjYybC4wOTcuMmMxLjM1MiAyLjgxNCAxLjczMSA0LjYzLjY1OSA2LjUyMXpNMzEgOHYyM0g4VjhoMjN6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcEVtczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwRmlsZWJlYXQgPSBmdW5jdGlvbiBFdWlJY29uQXBwRmlsZWJlYXQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTggMThoMTZ2Mkg4ek04IDEzaDl2Mkg4ek04IDIzaDE2djJIOHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIxLjQxIDBINWEzIDMgMCAwMC0zIDN2MjZhMyAzIDAgMDAzIDNoMjJhMyAzIDAgMDAzLTNWOC41OUwyMS40MSAwek0yMiAzLjQxTDI2LjU5IDhIMjJWMy40MXpNMjcgMzBINWExIDEgMCAwMS0xLTFWM2ExIDEgMCAwMTEtMWgxNXY4aDh2MTlhMSAxIDAgMDEtMSAxelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBGaWxlYmVhdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwRmxlZXQgPSBmdW5jdGlvbiBFdWlJY29uQXBwRmxlZXQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yLjk5NiAxOC42MzZMMCAyMC40MzR2Ni4xMzJsNiAzLjYgNS0zIDUgMyA1LTMgNSAzIDYtMy42di02LjEzMmwtNS0zdi01bC01LTN2LTVsLTYtMy42LTYgMy42djIuODMybDIgLjAzM1Y1LjU2Nmw0LTIuNCA0IDIuNHYzLjg2OGwtMS45OTYgMS4xOTcgMSAxLjczM0wyMSAxMS4xNjZsNCAyLjR2My44NjhsLTQgMi40LTIuMjU3LTEuMzU0LS45NzEgMS43NUwyMCAyMS41NjV2My44NjhsLTQgMi40LTQtMi40di0xLjdsLTItLjAzM3YxLjczM2wtNCAyLjQtNC0yLjR2LTMuODY4bDEuOTk2LTEuMTk3LTEtMS43MzN6TTIyIDI1LjQzNHYtMy44NjhsNC0yLjQgNCAyLjR2My44NjhsLTQgMi40LTQtMi40elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0xMSAyMi4xNjZsLTYtMy42di02LjEzMmw2LTMuNiA2IDMuNnY2LjEzMmwtNiAzLjZ6bTQtNC43MzJ2LTMuODY4bC00LTIuNC00IDIuNHYzLjg2OGw0IDIuNCA0LTIuNHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwRmxlZXQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcEdpcyA9IGZ1bmN0aW9uIEV1aUljb25BcHBHaXMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTI5LjAxNCAyMy44OWwyLjI5NiAxLjE0NUwxNiAzMi4xMDEuNTMgMjQuOTYxbDIuNDktMS4wNTYgMi40NTMgMS4xMzItLjAwMy4wMDJMMTYgMjkuODk5bDEwLjY5LTQuOTM0LS4wMDMtLjAwMSAyLjMyNy0xLjA3NHptLTQuOTcyLTcuNDgybDcuMjY4IDMuNjI3TDE2IDI3LjEwMS41MyAxOS45NjFsNy42NjgtMy4yNTJjLjM5Mi40ODYuODM4IDEuMDIgMS4zNCAxLjYwNEw1LjQ3IDIwLjAzOSAxNiAyNC44OTlsMTAuNjktNC45MzQtMy45NTQtMS45NzNjLjQ5My0uNTguOTI4LTEuMTA3IDEuMzA2LTEuNTg0elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTggOWEyIDIgMCAxMC00IDAgMiAyIDAgMDA0IDB6bTIgMGE0IDQgMCAxMS04IDAgNCA0IDAgMDE4IDB6bS0zLjI2OCAxMi42ODFsLS43MzIuNzg3LS43MzItLjc4N2MtMy41NTctMy44MjQtNS44MTctNi40NjItNi44MS03Ljk2QTguNzQ2IDguNzQ2IDAgMDE3IDguODc1QzcgMy45NyAxMS4wMzMgMCAxNiAwczkgMy45NyA5IDguODc1YTguNzQ2IDguNzQ2IDAgMDEtMS40NTkgNC44NDZjLS45OTIgMS40OTgtMy4yNTIgNC4xMzYtNi44MDkgNy45NnptNS4xNDItOS4wNjRBNi43NDcgNi43NDcgMCAwMDIzIDguODc1QzIzIDUuMDgxIDE5Ljg3IDIgMTYgMlM5IDUuMDgxIDkgOC44NzVjMCAxLjM0OS4zOTQgMi42MzYgMS4xMjYgMy43NDIuODQ2IDEuMjc3IDIuODEyIDMuNTkzIDUuODc0IDYuOTEyIDMuMDYyLTMuMzIgNS4wMjgtNS42MzUgNS44NzQtNi45MTJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcEdpczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwR3JhcGggPSBmdW5jdGlvbiBFdWlJY29uQXBwR3JhcGgoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTI0IDIwYTQgNCAwIDExMC04IDQgNCAwIDAxMCA4em0wLTZhMiAyIDAgMTAwIDQgMiAyIDAgMDAwLTR6bS04LjItNS42MkE0IDQgMCAxMTE4IDEuMDZhNCA0IDAgMDEtMi4yIDcuMzJ6bTAtNmEyIDIgMCAxMC4wMSAwaC0uMDF6bS4wMSAyOS4yNGE0IDQgMCAxMS0uMDgzLTggNCA0IDAgMDEuMDgzIDh6bTAtNmEyIDIgMCAxMC4zOSAwIDIgMiAwIDAwLS40IDBoLjAxelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTggMTd2LTJoLTYuMTRhNCA0IDAgMDAtLjg2LTEuNjRsMi4zMS0zLjQ0LTEuNjgtMS4xMi0yLjMxIDMuNDRBNCA0IDAgMDA4IDEyYTQgNCAwIDEwMCA4IDQgNCAwIDAwMS4zMi0uMjRsMi4zMSAzLjQ0IDEuNjYtMS4xMkwxMSAxOC42NGE0IDQgMCAwMC44Ni0xLjY0SDE4ek02IDE2YTIgMiAwIDExNCAwIDIgMiAwIDAxLTQgMHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwR3JhcGg7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcEdyb2sgPSBmdW5jdGlvbiBFdWlJY29uQXBwR3JvayhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuNzI3IDIuOTFWLjk3Yy0xLjM1NyAwLTQuMTggMC01LjgxOCAxLjk0LS45NyAxLjE4Mi0xLjMyOCAyLjkwOC0uOTcgNC45ODMuNTYzIDMuMzA3Ljk3IDYuMzMyLjMwMSA3LjE1Ny0uMy4zMS0uOTcuNDY1LTIuMjQuNDY1djEuOTRjMS4yNyAwIDEuOTQuMTU1IDIuMjUuNDk0LjY5OC44MjQuMjYyIDMuODc5LS4zIDcuMTU2LS4zNSAyLjEyNC0uMDEgMy44MDIuOTYgNC45NTZDNS41MjcgMzIgOC4zNSAzMiA5LjcyNiAzMnYtMS45NGMtMS4xNDQgMC0zLjI4NyAwLTQuMzE1LTEuMjIxYTQuMTEyIDQuMTEyIDAgMDEtLjUzMy0zLjQxNGMuODQzLTUuMDQyLjk3LTcuMzctLjEzNi04LjcyNy0uMDY4LS4wNzctLjE0NS0uMTM2LS4yMTMtLjIwMy0uMDY4LS4wNjguMTQ1LS4xMjcuMjEzLS4yMDQgMS4xNDQtMS4zNjcuOTctMy42OTUuMTM2LTguNzI3YTQuMTEyIDQuMTEyIDAgMDEuNTQzLTMuNDE0QzYuNDQgMi45MSA4LjU4MyAyLjkxIDkuNzI3IDIuOTF6TTMyLjAzIDE3LjQ1NHYtMS45NGMtMS4yNyAwLTEuOTQtLjE1NS0yLjI1LS40OTQtLjY5OC0uODI1LS4yNjEtMy44OC4zMDEtNy4xNTcuMzUtMi4xMjMgMC0zLjgwMS0uOTctNC45ODRDMjcuNDkzLjk0IDI0LjY3Mi45NCAyMy4yOTQuOTR2MS45N2MxLjE0NSAwIDMuMjg4IDAgNC4zMTUgMS4yMmE0LjExMiA0LjExMiAwIDAxLjU0NCAzLjQxNGMtLjg0NCA1LjA0My0uOTcgNy4zNy4xMzUgOC43MjguMDY4LjA3Ny4xNDYuMTM1LjIxNC4yMDMuMDY3LjA2OC0uMTQ2LjEyNi0uMjE0LjIwNC0xLjE0NCAxLjM2Ny0uOTcgMy42OTQtLjEzNSA4LjcyNy4zMjkgMS4xNjIuMTMgMi40MS0uNTQ0IDMuNDEzLTEuMDE4IDEuMjQyLTMuMTYgMS4yNDItNC4zMDUgMS4yNDJWMzJjMS4zNTggMCA0LjE4IDAgNS44MTgtMS45NC45Ny0xLjE4MiAxLjMyOS0yLjkwOC45Ny00Ljk4NC0uNTYzLTMuMzA2LS45Ny02LjMzMi0uMy03LjE1Ni4zLS4zMS45NjktLjQ2NSAyLjI0LS40NjV6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTI2LjIxMiAxNS41MTVoLTIuMDA3YTcuNzU4IDcuNzU4IDAgMDAtNi43Mi02LjcyVjYuNzg4aC0xLjk0djIuMDA3YTcuNzU4IDcuNzU4IDAgMDAtNi43MiA2LjcySDYuODE4djEuOTRoMi4wMDdhNy43NTggNy43NTggMCAwMDYuNzIgNi43MnYyLjAwN2gxLjk0di0yLjAwN2E3Ljc1OCA3Ljc1OCAwIDAwNi43Mi02LjcyaDIuMDA3di0xLjk0em0tOC43MjcgNi43di0xLjg1MWgtMS45NHYxLjg1MmE1LjgxOCA1LjgxOCAwIDAxLTQuNzYtNC43NjFoMS44NTF2LTEuOTRoLTEuODUyYTUuODE4IDUuODE4IDAgMDE0Ljc2MS00Ljc2MXYxLjg1MmgxLjk0di0xLjg1MmE1LjgxOCA1LjgxOCAwIDAxNC43NjEgNC43NjFoLTEuODUydjEuOTRoMS44NTJhNS44MTggNS44MTggMCAwMS00Ljc2MSA0Ljc2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBHcm9rOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBIZWFydGJlYXQgPSBmdW5jdGlvbiBFdWlJY29uQXBwSGVhcnRiZWF0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk00LjE0IDE1LjM5YTguMDU4IDguMDU4IDAgMDEtMi4yLTQuMDQzQTYuNzg4IDYuNzg4IDAgMDE0LjE5OCA1LjQ3YTYuNzMgNi43MyAwIDAxOC43MjctLjIxM2wxLjI2LTEuNDY0YTguNjUgOC42NSAwIDAwLTExLjI3Ny4yMzJBOC43MjcgOC43MjcgMCAwMC4wNjggMTEuNmExMC4xNzIgMTAuMTcyIDAgMDAyLjc5MyA1LjI3NWwxLjI4LTEuNDg0elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTUuNTE1IDMxLjI3NEw0LjU0OCAxOC40NTQgMTUuODU1IDQuNzYzYTguNjcgOC42NyAwIDAxMTIuMjY2LS43NDYgOC43MjcgOC43MjcgMCAwMTIuOTEgNy4yMDVjLS4yNDMgMi42OTUtMi4wMzcgNC43MzItMy40ODIgNi4zN0wxNS41MTUgMzEuMjc1em0tOC40MjctMTIuODJsOC40MjcgOS44NjIgMTAuNTUtMTEuOTk1YzEuMzItMS41MDMgMi44MjItMy4yMSAzLjAwNy01LjI2NWE2Ljc4OCA2Ljc4OCAwIDAwLTIuMjQtNS41ODYgNi43MyA2LjczIDAgMDAtOS41MDQuNTYzTDcuMDg4IDE4LjQ1NXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwSGVhcnRiZWF0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBJbmRleE1hbmFnZW1lbnQgPSBmdW5jdGlvbiBFdWlJY29uQXBwSW5kZXhNYW5hZ2VtZW50KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTcgMTh2LTJoLTJ2MkgzdjZoMnYtNGgxMHY0aDJ2LTRoMTB2NGgydi02elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk00IDMyYTMgMyAwIDExMC02IDMgMyAwIDAxMCA2em0wLTRhMSAxIDAgMTAwIDIgMSAxIDAgMDAwLTJ6bTEyIDRhMyAzIDAgMTEwLTYgMyAzIDAgMDEwIDZ6bTAtNGExIDEgMCAxMDAgMiAxIDEgMCAwMDAtMnptMTIgNGEzIDMgMCAxMTAtNiAzIDMgMCAwMTAgNnptMC00YTEgMSAwIDEwMCAyIDEgMSAwIDAwMC0yek0yMyA4VjZoLTIuMWE1IDUgMCAwMC0uNzMtMS43NWwxLjQ5LTEuNDktMS40Mi0xLjQyLTEuNDkgMS40OUE1IDUgMCAwMDE3IDIuMVYwaC0ydjIuMWE1IDUgMCAwMC0xLjc1LjczbC0xLjQ5LTEuNDktMS40MiAxLjQyIDEuNDkgMS40OUE1IDUgMCAwMDExLjEgNkg5djJoMi4xYTUgNSAwIDAwLjczIDEuNzVsLTEuNDkgMS40OSAxLjQxIDEuNDEgMS40OS0xLjQ5YTUgNSAwIDAwMS43Ni43NFYxNGgydi0yLjFhNSA1IDAgMDAxLjc1LS43M2wxLjQ5IDEuNDkgMS40MS0xLjQxLTEuNDgtMS41QTUgNSAwIDAwMjAuOSA4SDIzem0tNyAyYTMgMyAwIDExMC02IDMgMyAwIDAxMCA2elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYgOGExIDEgMCAwMS0xLTEgMS4zOSAxLjM5IDAgMDEwLS4yLjY1LjY1IDAgMDEuMDYtLjE4Ljc0Ljc0IDAgMDEuMDktLjE4IDEuNjEgMS42MSAwIDAxLjEyLS4xNS45My45MyAwIDAxLjMzLS4yMSAxIDEgMCAwMTEuMDkuMjFsLjEyLjE1YS43OC43OCAwIDAxLjA5LjE4LjYyLjYyIDAgMDEuMS4xOCAxLjI3IDEuMjcgMCAwMTAgLjIgMSAxIDAgMDEtMSAxelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBJbmRleE1hbmFnZW1lbnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcEluZGV4UGF0dGVybiA9IGZ1bmN0aW9uIEV1aUljb25BcHBJbmRleFBhdHRlcm4oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMCAxNGgtOGEzIDMgMCAwMS0zLTNWM2EzIDMgMCAwMTMtM2g4YTMgMyAwIDAxMyAzdjhhMyAzIDAgMDEtMyAzek0xMiAyYTEgMSAwIDAwLTEgMXY4YTEgMSAwIDAwMSAxaDhhMSAxIDAgMDAxLTFWM2ExIDEgMCAwMC0xLTFoLTh6TTE3IDE4di0yaC0ydjJIM3Y2aDJ2LTRoMTB2NGgydi00aDEwdjRoMnYtNnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNNCAzMmEzIDMgMCAxMTAtNiAzIDMgMCAwMTAgNnptMC00YTEgMSAwIDEwMCAyIDEgMSAwIDAwMC0yem0xMiA0YTMgMyAwIDExMC02IDMgMyAwIDAxMCA2em0wLTRhMSAxIDAgMTAwIDIgMSAxIDAgMDAwLTJ6bTEyIDRhMyAzIDAgMTEwLTYgMyAzIDAgMDEwIDZ6bTAtNGExIDEgMCAxMDAgMiAxIDEgMCAwMDAtMnpNMTMgNGg2djJoLTZ6TTEzIDhoNnYyaC02elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBJbmRleFBhdHRlcm47IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcEluZGV4Um9sbHVwID0gZnVuY3Rpb24gRXVpSWNvbkFwcEluZGV4Um9sbHVwKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMzIgMjZ2LTJoLTIuMWE1IDUgMCAwMC0uNzMtMS43NWwxLjQ5LTEuNDktMS40MS0xLjQxLTEuNDkgMS40OUE1IDUgMCAwMDI2IDIwLjFWMThoLTJ2Mi4xYTUgNSAwIDAwLTEuNzUuNzNsLTEuNDktMS40OS0xLjQxIDEuNDEgMS40OSAxLjQ5QTUgNSAwIDAwMjAuMSAyNEgxOHYyaDIuMWE1IDUgMCAwMC43MyAxLjc1bC0xLjQ5IDEuNDkgMS40MSAxLjQxIDEuNDktMS40OWE1IDUgMCAwMDEuNzYuNzRWMzJoMnYtMi4xYTUgNSAwIDAwMS43NS0uNzNsMS40OSAxLjQ5IDEuNDEtMS40MS0xLjQ5LTEuNDlBNSA1IDAgMDAyOS45IDI2SDMyem0tNyAyYTMgMyAwIDExMC02IDMgMyAwIDAxMCA2elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjUuNzEgMjQuMjlhMSAxIDAgMDAtMS4wOS0uMjEgMS4xNSAxLjE1IDAgMDAtLjMzLjIxLjkzLjkzIDAgMDAtLjIxLjMzIDEgMSAwIDAwMS4zIDEuMyAxLjE1IDEuMTUgMCAwMC4zMy0uMjEgMSAxIDAgMDAuMjEtMS4wOS45NC45NCAwIDAwLS4yMS0uMzN6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTUgNmgxNnYySDV6TTUgMTJoMTZ2Mkg1ek01IDE4aDEwdjJINXpNNSAyNGg4djJINXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDMySDNhMyAzIDAgMDEtMy0zVjNhMyAzIDAgMDEzLTNoMjBhMyAzIDAgMDEzIDN2MTNoLTJWM2ExIDEgMCAwMC0xLTFIM2ExIDEgMCAwMC0xIDF2MjZhMSAxIDAgMDAxIDFoMTN2MnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwSW5kZXhSb2xsdXA7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcExlbnMgPSBmdW5jdGlvbiBFdWlJY29uQXBwTGVucyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMjMuNzkzIDE0LjI5M2wxLjQxNCAxLjQxNC02LjQwOCA2LjQwOS0zLjc1LTMuMjUtNC4zNDIgNC4zNDEtMS40MTQtMS40MTQgNS42NTgtNS42NTkgMy43NSAzLjI1IDUuMDkyLTUuMDkxek0xMiAxMXY1bC0yIDJ2LTdoMnptMTAtNnY4bC0yIDJWNWgyem0tNSAzdjdsLTItMlY4aDJ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNyAwYzguMjg0IDAgMTUgNi43MTYgMTUgMTUgMCA4LjI4NC02LjcxNiAxNS0xNSAxNS0zLjc4MiAwLTcuMjM4LTEuNC05Ljg3Ni0zLjcxbC01LjQxNyA1LjQxNy0xLjQxNC0xLjQxNCA1LjQxNy01LjQxN0ExNC45NDMgMTQuOTQzIDAgMDEyIDE1YzAtMS4wNS4xMDgtMi4wNzQuMzEzLTMuMDYybDEuOTA2LjY3MkM0LjA3NSAxMy4zODUgNCAxNC4xODQgNCAxNWMwIDcuMTggNS44MiAxMyAxMyAxM3MxMy01LjgyIDEzLTEzUzI0LjE4IDIgMTcgMmMtMS4wMDIgMC0xLjk3OC4xMTMtMi45MTUuMzI4bC0uNzUtMS44NzdBMTUuMDMxIDE1LjAzMSAwIDAxMTcgMHpNOS42MjEgMS45MzdsLjc1IDEuODc3YTEzLjA2MiAxMy4wNjIgMCAwMC00LjgyIDUuMDI0bC0xLjkwNy0uNjczYTE1LjA2OCAxNS4wNjggMCAwMTUuOTc3LTYuMjI4elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBMZW5zOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBMb2dzID0gZnVuY3Rpb24gRXVpSWNvbkFwcExvZ3MoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xIDhjMy45ODMgMCA3LjczMiAxLjAxMyAxMS4wMDEgMi43OTd2Mi4zMTJBMjAuODg3IDIwLjg4NyAwIDAwMiAxMC4wMjN2MTEuMDI1YzQuODUuNDYyIDkuMjcgNC4xODMgOS45NTUgOC42OTFsLjAzNS4yNjFIMTJ2MmgtMS45MzhsLS4wMTgtMS4yMzZjLS4xMTYtNC4wMTUtNC4zMzYtNy42MzEtOC43OTMtNy43NkwwIDIyLjk4NlY4aDF6bTEzLThoMWM5LjI4IDAgMTYuODI1IDcuNDM3IDE2Ljk5NyAxNi42NzdMMzIgMTd2MTVoLTJWMTdjMC03Ljg0LTYuMDE0LTE0LjI3NC0xMy42OC0xNC45NDNMMTYgMi4wMzN2Ny42ODFsLTItMS4xNDNWMGgxLTF6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTI2Ljk5NyAzMC42MzZMMjcuMDA5IDMySDE0VjExLjMwNWwxLjQ4My44MmM2Ljk5NCAzLjg2MSAxMS4zODIgMTAuNzM1IDExLjUxNCAxOC41MXptLTIuMDQ4LTEuMDRDMjQuNTA1IDIzLjU1NiAyMS4yMDUgMTguMiAxNiAxNC43NzFWMzBoOC45NzRsLS4wMjUtLjQwNHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwTG9nczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwTWFuYWdlbWVudCA9IGZ1bmN0aW9uIEV1aUljb25BcHBNYW5hZ2VtZW50KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0xNiAyMWE1IDUgMCAxMTAtMTAgNSA1IDAgMDEwIDEwem0wLThhMyAzIDAgMTAwIDYgMyAzIDAgMDAwLTZ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMCAzMmgtOHYtNC4wNmExIDEgMCAwMC0xLjYxLS42N2wtMi44OCAyLjg3LTUuNjUtNS42NSAyLjg3LTIuODdhLjkyLjkyIDAgMDAuMi0xIC45My45MyAwIDAwLS44Ni0uNkgwVjEyaDQuMDZhLjkyLjkyIDAgMDAuODUtLjU4Ljk0Ljk0IDAgMDAtLjE5LTFMMS44NiA3LjUxbDUuNjUtNS42NSAyLjg3IDIuODdBMSAxIDAgMDAxMiA0LjA2VjBoOHY0LjA2YTEgMSAwIDAwMS42MS42N2wyLjg3LTIuODcgNS42NiA1LjY2LTIuODcgMi44N2EuOTIuOTIgMCAwMC0uMiAxIC45My45MyAwIDAwLjg2LjZIMzJ2OGgtNC4wNmEuOTIuOTIgMCAwMC0uODUuNTguOTQuOTQgMCAwMC4xOSAxbDIuODcgMi44Ny01LjY2IDUuNjYtMi44Ny0yLjg3YTEgMSAwIDAwLTEuNjEuNjdMMjAgMzJ6bS02LTJoNHYtMi4wNmEzIDMgMCAwMTUtMi4wOGwxLjQ2IDEuNDYgMi44My0yLjgzTDI1Ljg2IDIzYTMgMyAwIDAxMi4wOC01SDMwdi00aC0yLjA2YTMgMyAwIDAxLTIuMDgtNWwxLjQ2LTEuNDYtMi44My0yLjg1TDIzIDYuMTRhMyAzIDAgMDEtNS0yLjA4VjJoLTR2Mi4wNmEzIDMgMCAwMS01IDIuMDhMNy41MSA0LjY5IDQuNjkgNy41MSA2LjE0IDlhMyAzIDAgMDEtMi4wOCA1SDJ2NGgyLjA2YTMgMyAwIDAxMi4wOCA1bC0xLjQ1IDEuNDkgMi44MyAyLjgzTDkgMjUuODZhMyAzIDAgMDE1IDIuMDhWMzB6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcE1hbmFnZW1lbnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcE1ldHJpY2JlYXQgPSBmdW5jdGlvbiBFdWlJY29uQXBwTWV0cmljYmVhdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDMyQzcuMTYzIDMyIDAgMjQuODM3IDAgMTZTNy4xNjMgMCAxNiAwczE2IDcuMTYzIDE2IDE2YTE2IDE2IDAgMDEtMTYgMTZ6bTAtMzBDOC4yNjggMiAyIDguMjY4IDIgMTZzNi4yNjggMTQgMTQgMTQgMTQtNi4yNjggMTQtMTRBMTQgMTQgMCAwMDE2IDJ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTI4IDE2aC0yYzAtNS41MjMtNC40NzctMTAtMTAtMTBTNiAxMC40NzcgNiAxNkg0QzQgOS4zNzMgOS4zNzMgNCAxNiA0czEyIDUuMzczIDEyIDEyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjEuNzEgMTEuNzFMMjAuMyAxMC4zIDE4IDEyLjU3YTQgNCAwIDAwLTItLjU3IDQgNCAwIDEwNCA0IDQgNCAwIDAwLS41Ny0ybDIuMjgtMi4yOXpNMTYgMThhMiAyIDAgMTEwLTQgMiAyIDAgMDEwIDR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcE1ldHJpY2JlYXQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcE1ldHJpY3MgPSBmdW5jdGlvbiBFdWlJY29uQXBwTWV0cmljcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMwIDE5LjA5MnYxMi44OEgydi01LjM4Nmw2Ljc0Ny02Ljc0Ny43MDguNzA4Yy4yMzYuMjM2LjQ4LjQ2My43MzMuNjhMNCAyNy40MTR2Mi41NThoMjR2LTguOTFjLjE4Ni0uMTY2LjM2OS0uMzM5LjU0Ni0uNTE2TDMwIDE5LjA5MnptLTIwLjg1LTMuMTlBMTAuOTU1IDEwLjk1NSAwIDAxOCAxMUM4IDQuOTI1IDEyLjkyNSAwIDE5IDBzMTEgNC45MjUgMTEgMTFjMCAxLjc2LS40MTQgMy40MjUtMS4xNSA0LjlsLTEuNTEtMS41MUE4Ljk3MyA4Ljk3MyAwIDAwMjggMTFhOSA5IDAgMTAtMTcuMzQgMy4zOTFsLTEuNTEgMS41MXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMTkgMjBhOC45NiA4Ljk2IDAgMDA1LjYxOC0xLjk2OGwtNC4yMDItNC4yMDRhMiAyIDAgMDAtMi44MjggMGwtNC4yMDUgNC4yMDVBOC45NiA4Ljk2IDAgMDAxOSAyMHptLTIuODI2LTcuNTg2YTQgNCAwIDAxNS42NTYgMGw1LjY1NiA1LjY1Ny0uNzA3LjcwN0ExMC45NjcgMTAuOTY3IDAgMDExOSAyMmExMC45NjcgMTAuOTY3IDAgMDEtNy43NzgtMy4yMjFsLS43MDctLjcwNyA1LjY1OS01LjY1OHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwTWV0cmljczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwTWwgPSBmdW5jdGlvbiBFdWlJY29uQXBwTWwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTEwIDE4di41NmExIDEgMCAwMS0uNjguOTVMMyAyMS42MVYxMGExIDEgMCAwMS40LS44bDMuMi0yLjQtMS4yLTEuNi0zLjIgMi40QTMgMyAwIDAwMSAxMHYxMmEzIDMgMCAwMDEuMiAyLjRsMy4yIDIuNCAxLjItMS42LTIuNDctMS44NSA1LjgyLTEuOTVBMyAzIDAgMDAxMiAxOC41NlYxOGgtMnpNMjkuOCA3LjZsLTMuMi0yLjQtMS4yIDEuNiAzLjIgMi40YTEgMSAwIDAxLjQuOHYxMS42MWwtNi4zMi0yLjExYTEgMSAwIDAxLS42OC0uOTVWMThoLTJ2LjU2YTMgMyAwIDAwMi4wNSAyLjg1bDUuODIgMS45NC0yLjQ3IDEuODUgMS4yIDEuNiAzLjItMi40QTMgMyAwIDAwMzEgMjJWMTBhMyAzIDAgMDAtMS4yLTIuNHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTExIDZBMyAzIDAgMDE4Ljg4Ljg4YTMuMDcgMy4wNyAwIDAxNC4yNCAwQTMgMyAwIDAxMTEgNnptMC00YTEgMSAwIDEwLS4wMTIgMkExIDEgMCAwMDExIDJ6bTAgMzBhMyAzIDAgMDEtMi4xMi01LjEyIDMuMDcgMy4wNyAwIDAxNC4yNCAwQTMgMyAwIDAxMTEgMzJ6bTAtNGExIDEgMCAxMC0uMDEyIDJBMSAxIDAgMDAxMSAyOHptMC0xMmEzIDMgMCAwMS0yLjEyLTUuMTIgMy4wNyAzLjA3IDAgMDE0LjI0IDBBMyAzIDAgMDExMSAxNnptMC00YTEgMSAwIDEwLS4wMTIgMkExIDEgMCAwMDExIDEyem0xMC02QTMgMyAwIDAxMTguODguODhhMy4wNyAzLjA3IDAgMDE0LjI0IDBBMyAzIDAgMDEyMSA2em0wLTRhMSAxIDAgMTAtLjAxMiAyQTEgMSAwIDAwMjEgMnptMCAzMGEzIDMgMCAwMS0yLjEyLTUuMTIgMy4wNyAzLjA3IDAgMDE0LjI0IDBBMyAzIDAgMDEyMSAzMnptMC00YTEgMSAwIDEwLS4wMTIgMkExIDEgMCAwMDIxIDI4em0wLTEyYTMgMyAwIDAxLTIuMTItNS4xMiAzLjA3IDMuMDcgMCAwMTQuMjQgMEEzIDMgMCAwMTIxIDE2em0wLTRhMSAxIDAgMTAtLjAxMiAyQTEgMSAwIDAwMjEgMTJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcE1sOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBNb25pdG9yaW5nID0gZnVuY3Rpb24gRXVpSWNvbkFwcE1vbml0b3JpbmcoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xLjgxIDE1LjE5QTguOTQgOC45NCAwIDAxMTUuNjIgMy44NmwuMzguNDIuMzgtLjQyYTguOTQgOC45NCAwIDAxMTQuMjYgMTAuNjhsLTEuNy0xLjA3YTYuOTQgNi45NCAwIDAwLTExLjA3LTguMjhMMTYgNy4yOWwtMS44Ny0yLjFBNi45NCA2Ljk0IDAgMDAzLjQxIDE0bC0xLjYgMS4xOXpNMTYgMzEuMThsLTcuNzQtOC41MSAxLjQ4LTEuMzRMMTYgMjguMjFsNi4yNi02Ljg4IDEuNDggMS4zNHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMTYuMTYgMjMuMjlsLTQuMS03LjE3TDEwLjYyIDE5SDB2LTJoOS4zOGwyLjU2LTUuMTIgMy45IDYuODMgNC4xMy0xMC4zMkwyMy42NiAxN0gzMnYyaC05LjY2bC0yLjMxLTUuMzl6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcE1vbml0b3Jpbmc7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcE5vdGVib29rID0gZnVuY3Rpb24gRXVpSWNvbkFwcE5vdGVib29rKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjUgMmgtNVYwaC0ydjJoLTNWMGgtMnYyaC0zVjBIOHYySDN2MjZoMjJWMnptLTIgMjRINVY0aDN2MmgyVjRoM3YyaDJWNGgzdjJoMlY0aDN2MjJ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yNyA3djIzSDh2MmgyMVY3elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk04IDEyaDEydjJIOHpNOCAxN2gxMnYySDh6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcE5vdGVib29rOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBQYWNrZXRiZWF0ID0gZnVuY3Rpb24gRXVpSWNvbkFwcFBhY2tldGJlYXQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTE2IDIwYTQgNCAwIDExMC04IDQgNCAwIDAxMCA4em0wLTZhMiAyIDAgMTAwIDQgMiAyIDAgMDAwLTR6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDRhNCA0IDAgMTAtNCA0IDQgNCAwIDAwMi0uNTdsNS4yNyA1LjI3IDEuNDEtMS40MUw3LjQzIDZBNCA0IDAgMDA4IDR6TTQgNmEyIDIgMCAxMTAtNCAyIDIgMCAwMTAgNHptMTYuNzEgNi43MUwyNiA3LjQzQTQgNCAwIDAwMjggOGE0IDQgMCAxMC00LTQgNCA0IDAgMDAuNTcgMmwtNS4yNyA1LjI3IDEuNDEgMS40NHpNMjggMmEyIDIgMCAxMTAgNCAyIDIgMCAwMTAtNHpNMTEuMjkgMTkuMjlMNiAyNC41N0E0IDQgMCAwMDQgMjRhNCA0IDAgMTA0IDQgNCA0IDAgMDAtLjU3LTJsNS4yNy01LjI3LTEuNDEtMS40NHpNNCAzMGEyIDIgMCAxMTAtNCAyIDIgMCAwMTAgNHptMjQtNmE0IDQgMCAwMC0yIC41N2wtNS4yNy01LjI3LTEuNDEgMS40MUwyNC41NyAyNmE0IDQgMCAwMC0uNTcgMiA0IDQgMCAxMDQtNHptMCA2YTIgMiAwIDExMC00IDIgMiAwIDAxMCA0elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBQYWNrZXRiZWF0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBQaXBlbGluZSA9IGZ1bmN0aW9uIEV1aUljb25BcHBQaXBlbGluZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI5IDEyYTMgMyAwIDAwLTMgM2gtNGEzIDMgMCAwMC0zLTNoLTZhMyAzIDAgMDAtMyAzSDZhMyAzIDAgMDAtMy0zSDB2MTRoM2EzIDMgMCAwMDMtM2g0YTMgMyAwIDAwMyAzaDZhMyAzIDAgMDAzLTNoNGEzIDMgMCAwMDMgM2gzVjEyaC0zek0zIDI0SDJWMTRoMWExIDEgMCAwMTEgMXY4YTEgMSAwIDAxLTEgMXptMTctM3YyYTEgMSAwIDAxLTEgMWgtNmExIDEgMCAwMS0xLTF2LTJINnYtNGg2di0yYTEgMSAwIDAxMS0xaDZhMSAxIDAgMDExIDF2Mmg2djRoLTZ6bTEwIDNoLTFhMSAxIDAgMDEtMS0xdi04YTEgMSAwIDAxMS0xaDF2MTB6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTIyIDZIMTB2Mmg1djJoMlY4aDV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcFBpcGVsaW5lOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBSZWNlbnRseVZpZXdlZCA9IGZ1bmN0aW9uIEV1aUljb25BcHBSZWNlbnRseVZpZXdlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDMyQzcuMTYzIDMyIDAgMjQuODM3IDAgMTZTNy4xNjMgMCAxNiAwczE2IDcuMTYzIDE2IDE2YTE2IDE2IDAgMDEtMTYgMTZ6bTAtMzBDOC4yNjggMiAyIDguMjY4IDIgMTZzNi4yNjggMTQgMTQgMTQgMTQtNi4yNjggMTQtMTRBMTQgMTQgMCAwMDE2IDJ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTE1IDRoMnY5LjE3QTMuMDA5IDMuMDA5IDAgMDExOC44MyAxNUgyNnYyaC03LjE3QTMuMDAxIDMuMDAxIDAgMTExNSAxMy4xN1Y0em0xIDEzYTEgMSAwIDEwMC0yIDEgMSAwIDAwMCAyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBSZWNlbnRseVZpZXdlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwUmVwb3J0aW5nID0gZnVuY3Rpb24gRXVpSWNvbkFwcFJlcG9ydGluZyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI1IDVoLS4xN3YySDI1YTEgMSAwIDAxMSAxdjIwYTEgMSAwIDAxLTEgMUg3YTEgMSAwIDAxLTEtMVY4YTEgMSAwIDAxMS0xaC4xN1Y1SDdhMyAzIDAgMDAtMyAzdjIwYTMgMyAwIDAwMyAzaDE4YTMgMyAwIDAwMy0zVjhhMyAzIDAgMDAtMy0zelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjMgM2gtM1YwaC04djNIOXY2aDE0VjN6bS0yIDRIMTFWNWgzVjJoNHYzaDN2MnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMTAgMTNoMTJ2MkgxMHpNMTAgMThoMTJ2MkgxMHpNMTAgMjNoMTJ2MkgxMHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwUmVwb3J0aW5nOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBTYXZlZE9iamVjdHMgPSBmdW5jdGlvbiBFdWlJY29uQXBwU2F2ZWRPYmplY3RzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0yMC4zOCA3LjAwMUwxNyA5LjYxOVYwaC0ydjkuNjE5bC0zLjM3LTIuNjE4LTEuMjUgMS41MTNMMTYgMTIuODc4bDUuNjMtNC4zNjR6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMS4wNi4xNjVsLTEuMTEgMS42MSA5LjI1IDUuOTgzTDE2IDE2LjI5IDIuOCA3Ljc1OGw5LjI1LTUuOTgzLTEuMS0xLjYxTDAgNy4yMzR2MTMuNjUzbDE2IDEwLjMzNyAxNi0xMC4zMzdWNy4yMzRMMjEuMDYuMTY0ek0yIDkuNTdsMTMgOC40MDd2MTAuMjc5TDIgMTkuODRWOS41N3ptMTUgMTguNjc2VjE3Ljk3OGwxMy04LjQwN1YxOS44NWwtMTMgOC4zOTd6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcFNhdmVkT2JqZWN0czsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwU2VhcmNoUHJvZmlsZXIgPSBmdW5jdGlvbiBFdWlJY29uQXBwU2VhcmNoUHJvZmlsZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTExLjYzIDhoNy4zOHYyaC03LjM4elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNyA4aDMuMTl2Mkg3elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk03IDE2aDcuMzh2Mkg3elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTUuODEgMTZIMTl2MmgtMy4xOXpNNyAxMmg5djJIN3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEzIDBDNS44MiAwIDAgNS44MiAwIDEzczUuODIgMTMgMTMgMTMgMTMtNS44MiAxMy0xM0ExMyAxMyAwIDAwMTMgMHptMCAyNEM2LjkyNSAyNCAyIDE5LjA3NSAyIDEzUzYuOTI1IDIgMTMgMnMxMSA0LjkyNSAxMSAxMS00LjkyNSAxMS0xMSAxMXpNMjIuNTgxIDIzLjk5M2wxLjQxNC0xLjQxNCA3LjcwOCA3LjcwOC0xLjQxNCAxLjQxNHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwU2VhcmNoUHJvZmlsZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcFNlY3VyaXR5ID0gZnVuY3Rpb24gRXVpSWNvbkFwcFNlY3VyaXR5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTQgMzJsLS4zNi0uMTRBMjEuMDcgMjEuMDcgMCAwMTAgMTIuMDdWNS40NEwxNCAuMDZsMTQgNS4zOHY2LjYzYTIxLjA3IDIxLjA3IDAgMDEtMTMuNjQgMTkuNzhMMTQgMzJ6TTIgNi44MnY1LjI1YTE5LjA4IDE5LjA4IDAgMDAxMiAxNy43NyAxOS4wOCAxOS4wOCAwIDAwMTItMTcuNzdWNi44MkwxNCAyLjIgMiA2LjgyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk05IDE3LjgzaDJWMjNIOXpNMTEgMTAuMThWN0g5djMuMThhMyAzIDAgMTAyIDB6TTEwIDE0YTEgMSAwIDExMC0yIDEgMSAwIDAxMCAyek0xNyA3aDJ2NS4xN2gtMnpNMjEgMTdhMyAzIDAgMTAtNCAyLjgyVjIzaDJ2LTMuMThBMyAzIDAgMDAyMSAxN3ptLTMgMWExIDEgMCAxMTAtMiAxIDEgMCAwMTAgMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwU2VjdXJpdHk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcFNlY3VyaXR5QW5hbHl0aWNzID0gZnVuY3Rpb24gRXVpSWNvbkFwcFNlY3VyaXR5QW5hbHl0aWNzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMyAxMGg0djJINXY3LjkyOGMwIDEuMjk5LjgwOCAyLjc5NSAyLjg4IDQuNDggMS44MyAxLjQ4OSA0LjUyNCAzLjAyIDguMTIgNC41ODRWMjZoMnY1Ljk5MmwtMS4zOC0uNTY3Yy00LjM3Mi0xLjc5Ny03LjcyNC0zLjYxMy0xMC01LjQ2NUM0LjM1OCAyNC4xMjIgMyAyMi4xMTQgMyAxOS45MjhWMTB6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTkgMTBoOXYxNGwtMS4yNzItLjQ1OGMtMS4zNjctLjQ5NC0zLjIzLTEuMzE0LTQuNzY4LTIuMzlDMTAuNDg0IDIwLjExOCA5IDE4LjYzNiA5IDE2Ljc2MVYxMHptMS44OTUgMS44NzZ2NC44ODdjMCAuODc3Ljc0NCAxLjg2NyAyLjE1OCAyLjg1Ni45MzcuNjU2IDIuMDM4IDEuMjE5IDMuMDUyIDEuNjU3di05LjRoLTUuMjF6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yOSAxSDl2N2gyVjIuOTY2aDE2VjE2LjczYzAgLjU1OC0uMjQ1IDEuMTI4LS43NTYgMS43Mi0uNTE1LjU5Ni0xLjI1NiAxLjE1OC0yLjEyIDEuNjY4LTEuMzgxLjgxOC0yLjk2MSAxLjQzNC00LjEyNCAxLjgxN1YyNGMxLjI2LS4zNzggMy4zMzQtMS4xMiA1LjE1NS0yLjE5Ny45NjUtLjU3IDEuOTA1LTEuMjYxIDIuNjEyLTIuMDguNzEyLS44MjIgMS4yMzMtMS44MjcgMS4yMzMtMi45OTJWMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwU2VjdXJpdHlBbmFseXRpY3M7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcFNwYWNlcyA9IGZ1bmN0aW9uIEV1aUljb25BcHBTcGFjZXMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTQgNGg2djJINHpNMjIgNGg2djJoLTZ6TTQgMjJoNnYySDR6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0wIDE0aDE0VjBIMHYxNHpNMiAyaDEwdjEwSDJWMnptMTYtMnYxNGgxNFYwSDE4em0xMiAxMkgyMFYyaDEwdjEwek0wIDMyaDE0VjE4SDB2MTR6bTItMTJoMTB2MTBIMlYyMHptMTYgMTJoMTRWMThIMTh2MTR6bTItMTJoMTB2MTBIMjBWMjB6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTIyIDIyaDZ2MmgtNnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwU3BhY2VzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBTcWwgPSBmdW5jdGlvbiBFdWlJY29uQXBwU3FsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0xOCA2aDl2MmgtOXpNNSA2aDl2Mkg1ek01IDEyaDl2Mkg1ek0xOCAxMmg5djJoLTl6TTUgMThoOXYySDV6TTE4IDE4aDl2MmgtOXpNMTggMjRoOXYyaC05ek01IDI0aDl2Mkg1elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjkgMzJIM2EzIDMgMCAwMS0zLTNWM2EzIDMgMCAwMTMtM2gyNmEzIDMgMCAwMTMgM3YyNmEzIDMgMCAwMS0zIDN6TTMgMmExIDEgMCAwMC0xIDF2MjZhMSAxIDAgMDAxIDFoMjZhMSAxIDAgMDAxLTFWM2ExIDEgMCAwMC0xLTFIM3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwU3FsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBUaW1lbGlvbiA9IGZ1bmN0aW9uIEV1aUljb25BcHBUaW1lbGlvbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQgNHYyMC4zNEwxNiAzMmwxMi03LjY0VjRINHptMjIgMnY0aC00YTMgMyAwIDAwLTMgM3Y1aC02di01YTMgMyAwIDAwLTMtM0g2VjZoMjB6bS03Ljg3IDE0TDE2IDIyLjUyIDEzLjg3IDIwaDQuMjZ6TTYgMTJoNGExIDEgMCAwMTEgMXY2LjdsMy42OSA0LjM3LTIuNTggMy4wNkw2IDIzLjI0VjEyem03LjgxIDE2LjIybDIuMTktMi42IDIuMTkgMi42TDE2IDI5LjYxbC0yLjE5LTEuMzl6bTYuMDgtMS4wOWwtMi41OC0zLjA2TDIxIDE5LjdWMTNhMSAxIDAgMDExLTFoNHYxMS4yNGwtNi4xMSAzLjg5elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk00IDBoMjR2Mkg0elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBUaW1lbGlvbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwVXBncmFkZUFzc2lzdGFudCA9IGZ1bmN0aW9uIEV1aUljb25BcHBVcGdyYWRlQXNzaXN0YW50KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0xNiAyMWE1IDUgMCAxMTAtMTAgNSA1IDAgMDEwIDEwem0wLThhMyAzIDAgMTAwIDYgMyAzIDAgMDAwLTZ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yNy40MiAxOS42OWExMiAxMiAwIDAxLTIzLjExLTFsMi4yNy0uNDUtNC4zMi00LjQ3TDAgMTkuNTVsMi4zOS0uNDdhMTQgMTQgMCAwMDI3IDEuMjNsLTEuOTctLjYyem0yLjIzLTYuNzdhMTQgMTQgMCAwMC0yNy0xLjIzbDEuOS42MmExMiAxMiAwIDAxMjMuMTEgMWwtMi4yNy40NSA0LjMyIDQuNDZMMzIgMTIuNDVsLTIuMzUuNDd6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcFVwZ3JhZGVBc3Npc3RhbnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcFVwdGltZSA9IGZ1bmN0aW9uIEV1aUljb25BcHBVcHRpbWUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTQuMjE2IDEyLjM3N0ExMC45NDggMTAuOTQ4IDAgMDAyLjE4MSAxN0guMTUzYTEyLjk0MSAxMi45NDEgMCAwMTIuNjkzLTYuMTE4bDEuMzcgMS40OTV6bTIuOTQ4LTIuNzAzbC0xLjM3LTEuNDk1QTEyLjk0IDEyLjk0IDAgMDExMyA2djJjLTIuMTQ0IDAtNC4xNDQuNjEzLTUuODM2IDEuNjc0elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjYgNC40MTRWMTljMCA3LjE4LTUuODIgMTMtMTMgMTNDNi41IDMyIDEuMTE1IDI3LjIzLjE1MyAyMUgyLjE4Yy45NCA1LjEyIDUuNDI3IDkgMTAuODE5IDkgNi4wNzUgMCAxMS00LjkyNSAxMS0xMVY0LjQxNGwtNC4yOTMgNC4yOTMtMS40MTQtMS40MTRMMjUgLjU4Nmw2LjcwNyA2LjcwNy0xLjQxNCAxLjQxNEwyNiA0LjQxNHptLTcuODM2IDkuOTA5bDEuNDcyIDEuMzU0LTcuNTc3IDguMjM1LTQuODM1LTQuNDQyIDEuMzUzLTEuNDczIDMuMzY0IDMuMDkgNi4yMjMtNi43NjR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcFVwdGltZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwVXNlcnNSb2xlcyA9IGZ1bmN0aW9uIEV1aUljb25BcHBVc2Vyc1JvbGVzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTkuMzA3IDMuMjFhMi45MSAyLjkxIDAgMTAtLjIyMyAxLjk0IDExLjYzNiAxMS42MzYgMCAwMTguMjMyIDcuMDQ5bDEuNzc1LS42OThhMTMuNTc2IDEzLjU3NiAwIDAwLTkuNzg0LTguMjkxem0tMi44MjIgMS42MzhhLjk3Ljk3IDAgMTEwLTEuOTM5Ljk3Ljk3IDAgMDEwIDEuOTR6bS00LjI2Ny44MDVsLS43MTctMS43NzRhMTMuNTc2IDEzLjU3NiAwIDAwLTguMjkxIDkuNzg0IDIuOTEgMi45MSAwIDEwMS45NC4yMjMgMTEuNjM2IDExLjYzNiAwIDAxNy4wNjgtOC4yMzN6bS04LjM0IDExLjgwMmEuOTcuOTcgMCAxMTAtMS45NC45Ny45NyAwIDAxMCAxLjk0em0xMi42MDcgOC43MjdhMi45MSAyLjkxIDAgMDAtMi41OTkgMS42MiAxMS42MzYgMTEuNjM2IDAgMDEtOC4yMzMtNy4wNWwtMS43NzQuNzE3YTEzLjU3NiAxMy41NzYgMCAwMDkuODEzIDguMjkxIDIuOTEgMi45MSAwIDEwMi43OTMtMy41Nzh6bTAgMy44NzlhLjk3Ljk3IDAgMTEwLTEuOTQuOTcuOTcgMCAwMTAgMS45NHpNMzIgMTYuNDg1YTIuOTEgMi45MSAwIDEwLTQuMTk5IDIuNTk5IDExLjYzNiAxMS42MzYgMCAwMS03LjA1IDguMjMybC43MTggMS43NzVhMTMuNTc2IDEzLjU3NiAwIDAwOC4yOTEtOS44MTNBMi45MSAyLjkxIDAgMDAzMiAxNi40ODV6bS0yLjkxLjk3YS45Ny45NyAwIDExMC0xLjk0Ljk3Ljk3IDAgMDEwIDEuOTR6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTE5LjE5IDE2LjM1YTMuODc5IDMuODc5IDAgMTAtNS40MiAwIDQuODQ4IDQuODQ4IDAgMDAtMi4xMzQgNC4wMTR2MS45MzloOS42OTd2LTEuOTRhNC44NDggNC44NDggMCAwMC0yLjE0My00LjAxNHptLTQuNjQ1LTIuNzc0YTEuOTQgMS45NCAwIDExMy44OCAwIDEuOTQgMS45NCAwIDAxLTMuODggMHptLS45NyA2Ljc4OGEyLjkxIDIuOTEgMCAxMTUuODE5IDBoLTUuODE4elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBVc2Vyc1JvbGVzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBWaXN1YWxpemUgPSBmdW5jdGlvbiBFdWlJY29uQXBwVmlzdWFsaXplKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0zMiAzMkg0YTQgNCAwIDAxLTQtNFYwaDJ2MjhhMiAyIDAgMDAyIDJoMjh2MnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYgMjBoMnY3SDZ6TTE2IDEyaDJ2MTVoLTJ6TTI2IDE3aDJ2MTBoLTJ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yNyA2YTMgMyAwIDAwLTIuMDguODRMMjAgNC4zNkEyLjIgMi4yIDAgMDAyMCA0YTMgMyAwIDAwLTYgMGMuMDAxLjM0MS4wNjIuNjguMTggMWwtNS42IDQuNDZBMyAzIDAgMDA3IDlhMyAzIDAgMTAzIDMgMi45MyAyLjkzIDAgMDAtLjE4LTFsNS42LTQuNDhBMyAzIDAgMDAxNyA3YTMgMyAwIDAwMi4wOC0uODRsNSAyLjQ4QTIuMiAyLjIgMCAwMDI0IDlhMyAzIDAgMTAzLTN6TTcgMTNhMSAxIDAgMTEwLTIgMSAxIDAgMDEwIDJ6bTEwLThhMSAxIDAgMTEwLTIgMSAxIDAgMDEwIDJ6bTEwIDVhMSAxIDAgMTEwLTIgMSAxIDAgMDEwIDJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcFZpc3VhbGl6ZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwV2F0Y2hlcyA9IGZ1bmN0aW9uIEV1aUljb25BcHBXYXRjaGVzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS43NCA3LjczbC0xLjUtMS4zMmExMyAxMyAwIDAwMCAxNy4xOWwxLjUtMS4zMmExMSAxMSAwIDAxMC0xNC41NHYtLjAxelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNi41MSAzLjY2TDUgMi4zNGMtNi4zNzcgNy4yNC02LjM3NyAxOC4wOSAwIDI1LjMzbDEuNS0xLjMyQy43OTIgMTkuODY3Ljc5MiAxMC4xNTMgNi41IDMuNjdsLjAxLS4wMXptMTcuMjUgMi43NWwtMS41IDEuMzJhMTEgMTEgMCAwMTAgMTQuNTRsMS41IDEuMzJhMTMgMTMgMCAwMDAtMTcuMTl2LjAxelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjcgMi4zNGwtMS41IDEuMzJjNS43MDggNi40ODMgNS43MDggMTYuMTk3IDAgMjIuNjhsMS41IDEuMzNjNi4zNzctNy4yNCA2LjM3Ny0xOC4wOSAwLTI1LjMzelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0yMSAxNWE1IDUgMCAxMC02IDQuOVYzMWgyVjE5LjlhNSA1IDAgMDA0LTQuOXptLTUgM2EzIDMgMCAxMTAtNiAzIDMgMCAwMTAgNnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwV2F0Y2hlczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwV29ya3BsYWNlU2VhcmNoID0gZnVuY3Rpb24gRXVpSWNvbkFwcFdvcmtwbGFjZVNlYXJjaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk03LjgxIDFIMnYzMGg1LjgxNWMxLjcwNSAwIDMuMzQzLS43ODMgNC4zOC0yLjA5NGwzLjE4Mi00LjAyMy4wMDYuMDA2IDIuNjA3LTMuMTM3LjAxLS4wMTRhOS40MiA5LjQyIDAgMDAxLjk1My00LjgyNiA5LjExMiA5LjExMiAwIDAwLTEuODkxLTYuNTIybC0uMDEtLjAxMi0yLjYwMy0zLjE1NkwxMi4xOTcgMy4xQzExLjE2IDEuNzg2IDkuNTIgMSA3LjgxIDF6bTYuMTE4IDcuNTIzbC0zLjMxLTQuMTk1QzkuOTY4IDMuNTEyIDguOTE3IDMgNy44MSAzSDR2MjZoMy44MTVjMS4xIDAgMi4xNS0uNTA4IDIuOC0xLjMybDMuMzMtNC4yMS0xLjc5Ni0xLjc3LS4wMjctLjAzM2MtMi44NC0zLjMxNy0yLjgzLTguMTk1LjAyOC0xMS4yODdsLjAwNC0uMDA0YTk4Ljg5MyA5OC44OTMgMCAwMTEuNzc0LTEuODUzem00LjA0MyA4LjA5OWMtLjEyIDEuMjc5LS42MTYgMi41MzctMS40OSAzLjY0bC0xLjI4OCAxLjYzLTEuNTc4LTEuNTU2Yy0yLjE5LTIuNTktMi4xMTgtNi4zLjAwMS04LjU5Ni42LS42NCAxLjExOS0xLjE4MyAxLjU2MS0xLjYzNWwxLjI5MyAxLjYzOHYuMDAybC4wMTQuMDE2Yy45NDIgMS4xOTIgMS40NDYgMi41NjQgMS41MSAzLjk0OWE3LjA5IDcuMDkgMCAwMS0uMDIzLjkxMnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTIzLjgwMSAzYy0uMzgyIDAtMS4wNTIuMjMxLTEuOTI1LjgxMi0uNjM2LjQyMi0xLjIyOC45MjgtMS42NzcgMS4zNTdsMS43NzEgMi4yNDUuMDA1LjAwNy4wMjQuMDMuMDA4LjAxYzQuMDAzIDUuMDk5IDMuOTkgMTIuMDU3LS4wMzUgMTcuMTQ1bC0xLjc5MyAyLjI2N2E4LjIwNiA4LjIwNiAwIDAwMS43NjkgMS40OThjLjY5OC40MjcgMS4zMzcuNjI5IDEuODUyLjYyOUgyOFYzaC00LjE5OXptLTYuMTQ4IDIzLjg0MmwuNzY1IDEuMDUzLjAyMy4wMjdjLjcxNy44NTEgMS41NjYgMS42MDcgMi40NjQgMi4xNTYuODkuNTQ0IDEuODkuOTIyIDIuODk1LjkyMkgzMFYxaC02LjE5OWMtLjk4NyAwLTIuMDY2LjUwNS0zLjAzMiAxLjE0NmExNC45MzQgMTQuOTM0IDAgMDAtMi4zNTIgMS45NzRsLS4yNzYuMjg4LS41OTUuNjI4IDIuODU1IDMuNjE5LjAwNi4wMDZjMy40NTkgNC4zNzUgMy40NTcgMTAuMzI5LS4wMDQgMTQuNzA0bC0yLjc1IDMuNDc3elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBXb3JrcGxhY2VTZWFyY2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcHMgPSBmdW5jdGlvbiBFdWlJY29uQXBwcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIgNFYyaDJ2Mkgyem01IDBWMmgydjJIN3ptNSAwVjJoMnYyaC0yek0yIDlWN2gydjJIMnptNSAwVjdoMnYySDd6bTUgMFY3aDJ2MmgtMnpNMiAxNHYtMmgydjJIMnptNSAwdi0yaDJ2Mkg3em01IDB2LTJoMnYyaC0yelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcnJvd0VuZCA9IGZ1bmN0aW9uIEV1aUljb25BcnJvd0VuZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMi44NTcgMTQuMDQzYS43NS43NSAwIDAxLS4wMjUtMS4wNmw0LjU5MS00LjgxYS4yNS4yNSAwIDAwMC0uMzQ2bC00LjU5LTQuODFhLjc1Ljc1IDAgMDExLjA4NS0xLjAzNWw0LjU5IDQuODFhMS43NSAxLjc1IDAgMDEwIDIuNDE2bC00LjU5IDQuODFhLjc1Ljc1IDAgMDEtMS4wNi4wMjR6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMC41IDIuNzVhLjc1Ljc1IDAgMDExLjUgMHYxMC41YS43NS43NSAwIDAxLTEuNSAwVjIuNzV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFycm93RW5kOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcnJvd1N0YXJ0ID0gZnVuY3Rpb24gRXVpSWNvbkFycm93U3RhcnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00IDIuNzVhLjc1Ljc1IDAgMDExLjUgMHYxMC41YS43NS43NSAwIDAxLTEuNSAwVjIuNzV6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEzLjEzNSAxNC4wNDNhLjc1Ljc1IDAgMDAuMDI1LTEuMDZsLTQuNTktNC44MWEuMjUuMjUgMCAwMTAtLjM0Nmw0LjU5LTQuODFhLjc1Ljc1IDAgMDAtMS4wODUtMS4wMzVsLTQuNTkgNC44MWExLjc1IDEuNzUgMCAwMDAgMi40MTZsNC41OSA0LjgxYy4yODYuMy43Ni4zMSAxLjA2LjAyNHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXJyb3dTdGFydDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXJyb3dEb3duID0gZnVuY3Rpb24gRXVpSWNvbkFycm93RG93bihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMS45NTcgNC45ODJhLjc1Ljc1IDAgMDExLjA2LS4wMjVsNC44MSA0LjU5MWEuMjUuMjUgMCAwMC4zNDYgMGw0LjgxLTQuNTlhLjc1Ljc1IDAgMDExLjAzNSAxLjA4NWwtNC44MSA0LjU5YTEuNzUgMS43NSAwIDAxLTIuNDE2IDBsLTQuODEtNC41OWEuNzUuNzUgMCAwMS0uMDI1LTEuMDZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFycm93RG93bjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXJyb3dMZWZ0ID0gZnVuY3Rpb24gRXVpSWNvbkFycm93TGVmdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTEuMDE4IDE0LjA0M2EuNzUuNzUgMCAwMC4wMjQtMS4wNmwtNC41OS00LjgxYS4yNS4yNSAwIDAxMC0uMzQ2bDQuNTktNC44MWEuNzUuNzUgMCAxMC0xLjA4NS0xLjAzNWwtNC41OSA0LjgxYTEuNzUgMS43NSAwIDAwMCAyLjQxNmw0LjU5IDQuODFjLjI4Ni4zLjc2MS4zMSAxLjA2LjAyNHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXJyb3dMZWZ0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcnJvd1JpZ2h0ID0gZnVuY3Rpb24gRXVpSWNvbkFycm93UmlnaHQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTQuOTgyIDE0LjA0M2EuNzUuNzUgMCAwMS0uMDI1LTEuMDZsNC41OTEtNC44MWEuMjUuMjUgMCAwMDAtLjM0NmwtNC41OS00LjgxYS43NS43NSAwIDAxMS4wODUtMS4wMzVsNC41OSA0LjgxYTEuNzUgMS43NSAwIDAxMCAyLjQxNmwtNC41OSA0LjgxYS43NS43NSAwIDAxLTEuMDYuMDI0elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcnJvd1JpZ2h0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcnJvd1VwID0gZnVuY3Rpb24gRXVpSWNvbkFycm93VXAoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEuOTU3IDExLjAxOGMuMjg2LjMuNzYxLjMxIDEuMDYuMDI0bDQuODEtNC41OWEuMjUuMjUgMCAwMS4zNDYgMGw0LjgxIDQuNTlhLjc1Ljc1IDAgMDAxLjAzNS0xLjA4NWwtNC44MS00LjU5YTEuNzUgMS43NSAwIDAwLTIuNDE2IDBsLTQuODEgNC41OWEuNzUuNzUgMCAwMC0uMDI1IDEuMDZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFycm93VXA7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFzdGVyaXNrID0gZnVuY3Rpb24gRXVpSWNvbkFzdGVyaXNrKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNi45MjggOC40NjhMNCA3LjYxOGwuNDQ2LTEuNDI3TDcuMzc1IDcuMjUgNy4yODcgNGgxLjQ4NGwtLjA5NyAzLjI5NiAyLjg4LTEuMDM5TDEyIDcuNjkzbC0yLjk3Ny44NiAxLjkyIDIuNTZMOS43NDEgMTIgNy45MzcgOS4yOGwtMS43NDUgMi42NTQtMS4yMTMtLjg2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Bc3RlcmlzazsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQmVha2VyID0gZnVuY3Rpb24gRXVpSWNvbkJlYWtlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUuMjc3IDEwLjA4OGMuMDIuMDE0LjA0LjAzLjA1Ny4wNDcuNTgyLjU1IDEuMTM0LjgxMiAxLjY2Ni44MTIuNTg2IDAgMS44NC0uMjkzIDMuNzEzLS44OEw5IDYuMjEyVjJIN3Y0LjIxMmwtMS43MjMgMy44NzZ6bS0uNDM4Ljk4N0wzLjUzOSAxNGg4LjkyMmwtMS4zMi0yLjk2OUM5LjA5NiAxMS42NzcgNy43MzMgMTIgNyAxMmMtLjc0IDAtMS40NjMtLjMxNS0yLjE2MS0uOTI1ek02IDJINVYxaDZ2MWgtMXY0bDMuMzc1IDcuNTk0QTEgMSAwIDAxMTIuNDYxIDE1SDMuNTRhMSAxIDAgMDEtLjkxNC0xLjQwNkw2IDZWMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQmVha2VyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25CZWxsID0gZnVuY3Rpb24gRXVpSWNvbkJlbGwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMi4zMTYgMTJoMTAuMzY4Yy0uMTg4LS43MDQtLjI4LTEuNjkxLS4zNDgtMy4wMzctLjA3LTEuMzgyLS4xMDMtMS44ODgtLjE5LTIuNjEyLS4wMjgtLjIzNi0uMDYtLjQ2Mi0uMDk2LS42OC0uMzEtMS44OTItMS41MDYtMi45MjMtMy43MDgtMy4xMzFhMSAxIDAgMTAtMS42ODQgMGMtMi4yMDIuMjA4LTMuMzk3IDEuMjQtMy43MDggMy4xM2ExNi4wMSAxNi4wMSAwIDAwLS4wOTYuNjhjLS4wODcuNzI1LS4xMiAxLjIzLS4xOSAyLjYxMy0uMDY4IDEuMzQ2LS4xNiAyLjMzMy0uMzQ4IDMuMDM3em0xMC44NDMgMUgxLjg0Yy0uMzA4LjM1My0uNzM3LjUtMS4zNDEuNWEuNS41IDAgMTEwLTFjLjc4NiAwIDEuMDI0LS43ODMgMS4xNjYtMy41ODcuMDctMS40MDcuMTA1LTEuOTI2LjE5Ni0yLjY4MS4wMy0uMjUuMDYzLS40OS4xMDItLjcyNC4zMzQtMi4wNDEgMS41NDYtMy4zMTMgMy41NTYtMy43OTJhMiAyIDAgMDEzLjk2IDBjMi4wMS40NzkgMy4yMjIgMS43NSAzLjU1NyAzLjc5MmExNyAxNyAwIDAxLjEwMi43MjRjLjA5Ljc1NS4xMjUgMS4yNzQuMTk2IDIuNjgxLjE0IDIuODA0LjM3OSAzLjU4NyAxLjE2NSAzLjU4N2EuNS41IDAgMTEwIDFjLS42MDQgMC0xLjAzMy0uMTQ3LTEuMzQxLS41ek01LjUgMTRoNGEyIDIgMCAxMS00IDB6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkJlbGw7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkJlbGxTbGFzaCA9IGZ1bmN0aW9uIEV1aUljb25CZWxsU2xhc2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05LjUgMTRsLS4wMDUuMTVhMiAyIDAgMDEtMy45NzIuMTUzbC0uMDE4LS4xNTRMNS41IDE0aDR6bTUuMzgtMTIuODI1YS41LjUgMCAwMS4wMDguNjRsLS4wNjMuMDY1LTE0IDEyYS41LjUgMCAwMS0uNzEzLS42OTVsLjA2My0uMDY1IDE0LTEyYS41LjUgMCAwMS43MDUuMDU1ek0xMy4wMzYgNS41MWwuMDU1LjM1My4wNDguMzY4Yy4wNjYuNTU0LjEwMy45OC4xNDUgMS43MjRsLjA4IDEuNDkxYy4xNDYgMi4zNzEuNDAyIDMuMDUzIDEuMTM2IDMuMDUzYS41LjUgMCAxMTAgMWMtLjYwMyAwLTEuMDMxLS4xNDYtMS4zNC0uNDk5SDQuMTg1bDEuMTgyLTFoNy4zMTdjLS4xNzItLjY0NC0uMjY0LTEuNTI4LS4zMy0yLjcwOGwtLjA5LTEuNjM4Yy0uMDMzLS41MTQtLjA2Ni0uODctLjExOC0xLjMwNGwtLjAxMS0uMDc3LjkwMS0uNzYzek03LjUgMGEyIDIgMCAwMTEuOTggMS43MTdjLjQ3Ni4xMTMuOTA3LjI3IDEuMjkyLjQ3MmwtLjgzOC43MWE1LjcyOCA1LjcyOCAwIDAwLTEuNTkxLS4zNiAxIDEgMCAxMC0xLjY4NCAwQzQuNDU1IDIuNzUgMy4yNiAzLjc4IDIuOTUgNS42NzFsLS4wNS4zMzQtLjA0Ni4zNDdjLS4wOC42NzYtLjExNSAxLjE2MS0uMTc2IDIuMzQ3bC0uMDE0LjI2NS0uMDA1LjA5LTEuMDU4Ljg5N2MuMDE4LS4yMzQuMDM1LS40ODguMDUtLjc2M2wuMDc3LTEuNDI3Yy4wMzgtLjYyNi4wNzMtMS4wMjUuMTM0LTEuNTI4LjAzLS4yNS4wNjMtLjQ5LjEwMi0uNzI0LjMzNC0yLjA0IDEuNTQ2LTMuMzEzIDMuNTU1LTMuNzkybC4wMDQtLjAxOUEyIDIgMCAwMTcuNSAwelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25CZWxsU2xhc2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkJvbHQgPSBmdW5jdGlvbiBFdWlJY29uQm9sdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuMDQgMTMuMjc0YS41LjUgMCAxMC44OTIuNDUzbDMuMDE0LTUuOTMxYS41LjUgMCAwMC0uNDQ1LS43MjdINS4zMTZMOC4wMyAxLjcyN2EuNS41IDAgMTAtLjg5Mi0uNDUzTDQuMDU1IDcuMzQzYS41LjUgMCAwMC40NDYuNzI2aDUuMTg1TDcuMDQgMTMuMjc0elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Cb2x0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Cb3hlc0hvcml6b250YWwgPSBmdW5jdGlvbiBFdWlJY29uQm94ZXNIb3Jpem9udGFsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMCA2aDR2NEgwVjZ6bTEgMXYyaDJWN0gxem01LTFoNHY0SDZWNnptMSAxdjJoMlY3SDd6bTUtMWg0djRoLTRWNnptMSAzaDJWN2gtMnYyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Cb3hlc0hvcml6b250YWw7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkJveGVzVmVydGljYWwgPSBmdW5jdGlvbiBFdWlJY29uQm94ZXNWZXJ0aWNhbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcgMXYyaDJWMUg3ek02IDBoNHY0SDZWMHptMCA2aDR2NEg2VjZ6bTEgMXYyaDJWN0g3em0tMSA1aDR2NEg2di00em0xIDF2Mmgydi0ySDd6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkJveGVzVmVydGljYWw7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkJyYW5jaCA9IGZ1bmN0aW9uIEV1aUljb25CcmFuY2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01IDEwLjAzOGEzLjQ5IDMuNDkgMCAwMTIuNS0xLjA1aDJhMi41IDIuNSAwIDAwMi40NjItMi4wNjEgMiAyIDAgMTExLjAwOC4wMTdBMy41IDMuNSAwIDAxOS41IDkuOTg3aC0yYTIuNSAyLjUgMCAwMC0yLjQ2NiAyLjA4NUEyIDIgMCAxMTQgMTIuMDYzVjMuOTM3YTIgMiAwIDExMSAwdjYuMXpNNC41IDNhMSAxIDAgMTAwLTIgMSAxIDAgMDAwIDJ6bTAgMTJhMSAxIDAgMTAwLTIgMSAxIDAgMDAwIDJ6bTgtOWExIDEgMCAxMDAtMiAxIDEgMCAwMDAgMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQnJhbmNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25CcmFuY2hVc2VyID0gZnVuY3Rpb24gRXVpSWNvbkJyYW5jaFVzZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNiA3Ljk4N2EzLjQ5IDMuNDkgMCAwMC0yLjUgMS4wNXYtNC4xYTIgMiAwIDEwLTEgMHY2LjEyNmEyIDIgMCAxMDEuMDM0LjAxQTIuNSAyLjUgMCAwMTYgOC45ODZoMWEzLjUgMy41IDAgMDAzLjQ3LTMuMDQzIDIgMiAwIDEwLTEuMDA5LS4wMTdBMi41IDIuNSAwIDAxNyA3Ljk4N0g2ek00IDNhMSAxIDAgMTEtMiAwIDEgMSAwIDAxMiAwem0wIDEwYTEgMSAwIDExLTIgMCAxIDEgMCAwMTIgMHptNy05YTEgMSAwIDExLTIgMCAxIDEgMCAwMTIgMHpcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMy41IDEwLjVhMS41IDEuNSAwIDExLTMgMCAxLjUgMS41IDAgMDEzIDB6TTkgMTVjLjI4NC0xLjIyMyAxLjUxOS0yLjE0MyAzLTIuMTQzczIuNzE2LjkyIDMgMi4xNDNIOXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQnJhbmNoVXNlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQnJvb20gPSBmdW5jdGlvbiBFdWlJY29uQnJvb20oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zLjczMiAxMy4wOTZsLS4xOTctLjE5NyAyLjgzLTIuODI4LjcwNi43MDctMi44MjkgMi44MjguNzA4LjcwOCAyLjgyOC0yLjgyOGExIDEgMCAwMDAtMS40MTRMNS42NTggNy45NWEuOTkzLjk5MyAwIDAwLS43MDgtLjI5My45OTQuOTk0IDAgMDAtLjcwOC4yOTNsLTIuODI4IDIuODI5LjcwNy43MDcgMi44MjktMi44My43MDcuNzA4LTIuODI5IDIuODI5LjkwNC45MDN6bTEuMjE4LTYuNDRjLjUxMiAwIDEuMDIzLjE5NiAxLjQxNC41ODdsMi4xMjEgMi4xMmEyIDIgMCAwMTAgMi44M0w0Ljk1IDE1LjcyOCAwIDEwLjc3OGwzLjUzNS0zLjUzNWExLjk5MyAxLjk5MyAwIDAxMS40MTUtLjU4NnpNMTQuMDIgMWwuNzA4LjcwNy02Ljk1IDYuOTUtLjcwNy0uNzA3TDE0LjAyMSAxelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ccm9vbTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQnJ1c2ggPSBmdW5jdGlvbiBFdWlJY29uQnJ1c2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMS45OTMgOC4xN2MwIC44My0uNjczIDEuNTA3LTEuNDk5IDEuNTA3SDUuNDk4QTEuNTA1IDEuNTA1IDAgMDEzLjk5OSA4LjE3VjYuNjYyaDcuOTk0VjguMTd6bS0yLjk5OCA1Ljk5OGMwIC40NTUtLjQ0OC44MjctLjk5OS44MjctLjU1IDAtMS0uMzcyLTEtLjgyN3YtMy40ODZoMnYzLjQ4NnpNNCA1LjY1OFYxLjAwNWgxLjI2MnY0LjY1M0g0em0yLjI2MSAwVjEuMDA1aDEuMjQ0djQuNjUzSDYuMjZ6bTIuMjQ0IDBWMS4wMDVoMS4yMzV2NC42NTNIOC41MDR6bTIuMjM0IDBWMS4wMDVoMS4yNTR2NC42NTNoLTEuMjU0ek0zLjAwOCAwTDMgOC4xN2EyLjUwOSAyLjUwOSAwIDAwMi40OTggMi41MTJoLjV2My40ODZjMCAxLjAxLjg5NiAxLjgzMiAxLjk5OCAxLjgzMiAxLjEwMiAwIDEuOTk4LS44MjIgMS45OTgtMS44MzJ2LTMuNDg2aC41YTIuNTA5IDIuNTA5IDAgMDAyLjQ5OC0yLjUxMkwxMyAwSDMuMDA4elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25CcnVzaDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQnVnID0gZnVuY3Rpb24gRXVpSWNvbkJ1ZyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEwLjY1MSA1LjEyNmwuOTIyLS40NTUuODg0LTIuMzQzYS41LjUgMCAwMS45MzkuMzQ0TDEyLjM3NCA1LjM5bC0xLjQ1LjcxN0E1LjMgNS4zIDAgMDExMSA3aDEuMDQzbDIuMyAyLjE5OGEuNS41IDAgMDEtLjY5Mi43MjNMMTEuNjQyIDhoLS43MzdjLS4wOS40NjYtLjI0Ljg5OS0uNDQxIDEuMjgzbC44OTIuNDkgMS4yNzggMy41NTRhLjUuNSAwIDAxLS45NC4zNDJsLTEuMTUtMy4yLS42NTUtLjM2QzkuMzczIDEwLjY2NSA4LjcxNiAxMSA4IDExcy0xLjM3NC0uMzM1LTEuODktLjg5M2wtLjY1OC4zNjEtMS4xNSAzLjIwMWEuNS41IDAgMTEtLjk0LS4zNDJsMS4yNzktMy41NTQuODk1LS40OTFBNC43IDQuNyAwIDAxNS4wOTUgOGgtLjc0bC0yLjAxIDEuOTJhLjUuNSAwIDAxLS42OS0uNzIyTDMuOTUyIDdINWE1LjMgNS4zIDAgMDEuMDc1LS44OTJMMy42MjMgNS4zOSAyLjYgMi42NzJhLjUuNSAwIDExLjkzOS0uMzQ0bC44ODQgMi4zNDMuOTI0LjQ1N2MuMTctLjQyOC4zOTctLjgxLjY2OC0xLjEyOGguNTdhMS41IDEuNSAwIDExMi44MyAwaC41NjhjLjI3LjMxOC40OTcuNjk5LjY2NyAxLjEyNnpNOCA0YS41LjUgMCAxMDAtMSAuNS41IDAgMDAwIDF6bTEuNzUxIDEuNTcxQTMuMzI2IDMuMzI2IDAgMDA5LjQ3NiA1SDYuNTI0Yy0uMTA3LjE3NS0uMi4zNjctLjI3Ni41NzMtLjExLjI5NS0uMTg2LjYxOC0uMjIzLjk1N2E0LjM1NCA0LjM1NCAwIDAwLjA5IDEuNDY1Yy4wNzEuMjk0LjE3Mi41NjUuMjk1LjgwNi4xNjguMzI4LjM4LjYwMS42MTYuODAzLjI5NS4yNTMuNjMxLjM5Ni45NzQuMzk2LjM0MiAwIC42NzgtLjE0Mi45NzMtLjM5NC4yMzctLjIwMy40NDgtLjQ3Ni42MTYtLjgwM2EzLjYyIDMuNjIgMCAwMC4yOTYtLjgwNyA0LjI2MyA0LjI2MyAwIDAwLjA5LTEuNDY2IDMuOTg4IDMuOTg4IDAgMDAtLjIyNC0uOTU5elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25CdWc7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkJ1bGxzZXllID0gZnVuY3Rpb24gRXVpSWNvbkJ1bGxzZXllKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCAxNEE2IDYgMCAxMDggMmE2IDYgMCAwMDAgMTJ6bTAgMUE3IDcgMCAxMTggMWE3IDcgMCAwMTAgMTR6bTAtM2E0IDQgMCAxMDAtOCA0IDQgMCAwMDAgOHptMC0xYTMgMyAwIDExMC02IDMgMyAwIDAxMCA2em0wLTJhMSAxIDAgMTAwLTIgMSAxIDAgMDAwIDJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkJ1bGxzZXllOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25DYWxlbmRhciA9IGZ1bmN0aW9uIEV1aUljb25DYWxlbmRhcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE0IDR2LS45OTRDMTQgMi40NSAxMy41NSAyIDEyLjk5NCAySDExdjFoLTFWMkg2djFINVYySDMuMDA2QzIuNDUgMiAyIDIuNDUgMiAzLjAwNnY5Ljk4OEMyIDEzLjU1IDIuNDUgMTQgMy4wMDYgMTRoOS45ODhDMTMuNTUgMTQgMTQgMTMuNTUgMTQgMTIuOTk0VjVIMlY0aDEyem0tMy0zaDEuOTk0QzE0LjEwMiAxIDE1IDEuODk3IDE1IDMuMDA2djkuOTg4QTIuMDA1IDIuMDA1IDAgMDExMi45OTQgMTVIMy4wMDZBMi4wMDUgMi4wMDUgMCAwMTEgMTIuOTk0VjMuMDA2QzEgMS44OTggMS44OTcgMSAzLjAwNiAxSDVWMGgxdjFoNFYwaDF2MXpNNCA3aDJ2MUg0Vjd6bTMgMGgydjFIN1Y3em0zIDBoMnYxaC0yVjd6TTQgOWgydjFINFY5em0zIDBoMnYxSDdWOXptMyAwaDJ2MWgtMlY5em0tNiAyaDJ2MUg0di0xem0zIDBoMnYxSDd2LTF6bTMgMGgydjFoLTJ2LTF6XCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25DYWxlbmRhcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQ2hlY2sgPSBmdW5jdGlvbiBFdWlJY29uQ2hlY2soX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNi41IDEyYS41MDIuNTAyIDAgMDEtLjM1NC0uMTQ2bC00LTRhLjUwMi41MDIgMCAwMS43MDgtLjcwOEw2LjUgMTAuNzkzbDYuNjQ2LTYuNjQ3YS41MDIuNTAyIDAgMDEuNzA4LjcwOGwtNyA3QS41MDIuNTAyIDAgMDE2LjUgMTJcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ2hlY2s7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkNoZWNrSW5DaXJjbGVGaWxsZWQgPSBmdW5jdGlvbiBFdWlJY29uQ2hlY2tJbkNpcmNsZUZpbGxlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk04IDE2QTggOCAwIDExOCAwYTggOCAwIDAxMCAxNnptMy42NS0xMC44NTdMNi45MSA5LjggNC4zNSA3LjI4NmEuNS41IDAgMDAtLjcuNzE0bDIuOTA5IDIuODU3YS41LjUgMCAwMC43IDBsNS4wOTEtNWEuNS41IDAgMTAtLjctLjcxNHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ2hlY2tJbkNpcmNsZUZpbGxlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQ2hlZXIgPSBmdW5jdGlvbiBFdWlJY29uQ2hlZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00LjkzNCAzLjA2M2ExLjUgMS41IDAgMDEuNTQ3LjMyMWwuMTEyLjExNSA2LjA3IDYuOTE1YTEuNSAxLjUgMCAwMS0uNjQ2IDIuNDFsLS4xNDIuMDQtOS4wMzEgMi4wOTdBMS41IDEuNSAwIDAxLjAzNyAxMy4xOWwuMDQzLS4xNTlMMy4wNCA0LjAyYTEuNSAxLjUgMCAwMTEuODkzLS45NTd6TTQuMDI3IDQuMjVsLS4wMzYuMDgzLTIuOTYxIDkuMDExYS41LjUgMCAwMC40OTguNjU2bC4wOS0uMDEzIDIuOTM3LS42ODEtMS4zOTktMS41MDhhLjUuNSAwIDAxLjY2Ni0uNzRsLjA2Ny4wNiAxLjc4OCAxLjkyNyAyLjYzNC0uNjExLTMuMTk4LTMuNjAxYS41LjUgMCAwMS42ODItLjcyNmwuMDY2LjA2MiAzLjU1OSA0LjAwNyAxLjIyOS0uMjg0YS41LjUgMCAwMC4xNS0uMDYzbC4wNjctLjA0OWEuNS41IDAgMDAuMDk5LS42MzJsLS4wNTMtLjA3My02LjA3LTYuOTE2YS41LjUgMCAwMC0uMTM4LS4xMWwtLjA4Mi0uMDM1LS4wODgtLjAyYS41LjUgMCAwMC0uNTA3LjI1NnptMTEuNjYgNS4wMzlhMi41IDIuNSAwIDAxLS45NzUgMy4zOTkuNS41IDAgMDEtLjQ4NS0uODc1IDEuNSAxLjUgMCAwMC0xLjQ1NC0yLjYyNC41LjUgMCAwMS0uNDg1LS44NzUgMi41IDIuNSAwIDAxMy4zOTkuOTc1em0tNS4wMy02LjIwNmEuNS41IDAgMDEuMzM4LjU0NGwtLjAyLjA4OC0uNjc3IDIuMDM1IDIuMDY4LS43MjFhLjUuNSAwIDAxLjYuMjI1bC4wMzYuMDgyYS41LjUgMCAwMS0uMjI1LjZsLS4wODIuMDM3TDkuNjcgNy4wMjhhLjUuNSAwIDAxLS42NTktLjU1bC4wMi0uMDguOTk1LTNhLjUuNSAwIDAxLjYzMi0uMzE2ek0xNC41IDRhLjUuNSAwIDExMCAxIC41LjUgMCAwMTAtMXpNNy44NjIuNDAzYTIuNSAyLjUgMCAwMS43MzUgMy40NTkuNS41IDAgMDEtLjgzOS0uNTQ1IDEuNSAxLjUgMCAxMC0yLjUxNi0xLjYzNC41LjUgMCAwMS0uODM5LS41NDVBMi41IDIuNSAwIDAxNy44NjIuNDAzek0xMy41IDJhLjUuNSAwIDExMCAxIC41LjUgMCAwMTAtMXptLTMtMWEuNS41IDAgMTEwIDEgLjUuNSAwIDAxMC0xem00LTFhLjUuNSAwIDExMCAxIC41LjUgMCAwMTAtMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ2hlZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkNsb2NrID0gZnVuY3Rpb24gRXVpSWNvbkNsb2NrKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTcuNSAxM0E1LjUwNiA1LjUwNiAwIDAxMiA3LjVDMiA0LjQ2NyA0LjQ2NyAyIDcuNSAyUzEzIDQuNDY3IDEzIDcuNSAxMC41MzMgMTMgNy41IDEzbTAtMTJhNi41IDYuNSAwIDEwMCAxMyA2LjUgNi41IDAgMDAwLTEzbTMgNkg4VjMuNWEuNS41IDAgMDAtMSAwdjRhLjUuNSAwIDAwLjUuNWgzYS41LjUgMCAwMDAtMVwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25DbG9jazsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQ2xvdWREcml6emxlID0gZnVuY3Rpb24gRXVpSWNvbkNsb3VkRHJpenpsZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuMzQ4IDMuNzYxQTMuOTk1IDMuOTk1IDAgMDE4IDdhLjUuNSAwIDAxLTEgMCAzIDMgMCAxMC00Ljg3OCAyLjM0LjUuNSAwIDAxLS42MjcuNzc5IDQgNCAwIDAxMy45NzMtNi44NCA1LjUwMiA1LjUwMiAwIDAxMTAuMDk2IDQuMzcuNS41IDAgMTEtLjkyLS4zOSA0LjUgNC41IDAgMTAtOC4yOTYtMy40OTd6bS0xLjYxIDQuOTM1YS41LjUgMCAxMS43NzUuNjMzbC0xLjQ2NiAxLjc5MmEuNS41IDAgMTEtLjc3NC0uNjMzbDEuNDY2LTEuNzkyem0tMy4xMiAzLjY0N2EuNS41IDAgMDEuNzc0LjYzNGwtMS41MDUgMS44NGEuNS41IDAgMDEtLjc3NC0uNjM0bDEuNTA1LTEuODR6bTcuNjItMy42NDdhLjUuNSAwIDAxLjc3NS42MzNsLTEuNDY2IDEuNzkyYS41LjUgMCAxMS0uNzc0LS42MzNsMS40NjYtMS43OTJ6bS0zLjEyIDMuNjQ3YS41LjUgMCAwMS43NzQuNjM0bC0xLjUwNSAxLjg0YS41LjUgMCAwMS0uNzc0LS42MzRsMS41MDUtMS44NHptNy42Mi0zLjY0N2EuNS41IDAgMTEuNzc1LjYzM2wtMS40NjYgMS43OTJhLjUuNSAwIDExLS43NzQtLjYzM2wxLjQ2Ni0xLjc5MnptLTMuMTIgMy42NDdhLjUuNSAwIDAxLjc3NC42MzRsLTEuNTA1IDEuODRhLjUuNSAwIDAxLS43NzQtLjYzNGwxLjUwNS0xLjg0elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25DbG91ZERyaXp6bGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkNsb3VkU3Rvcm15ID0gZnVuY3Rpb24gRXVpSWNvbkNsb3VkU3Rvcm15KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNy40MjEgNC45M2EuNS41IDAgMTEtLjg3LjQ5IDMgMyAwIDEwLTQuNDMgMy45MTguNS41IDAgMDEtLjYyNi43OCA0IDQgMCAwMTMuOTczLTYuODRsLjAzMi4wMThWMy4yOGE1LjUgNS41IDAgMTE3LjAwMyA3LjM1Ny41LjUgMCAxMS0uMzYtLjkzNCA0LjUgNC41IDAgMTAtNS43Ny01LjkyM2MuNDIuMzEuNzc4LjcwMSAxLjA1IDEuMTVoLS4wMDJ6TTkuNiAxMWMuNjY5LjAwMi43OTQuNjcuMzYgMS4wMDNsLTQuNjggMy44ODJjLS40NTcuMzc4LTEuMDUzLS4yNi0uNjQzLS42ODlsMy4wOC0zLjE5M0E1NDExLjcgNTQxMS43IDAgMDE1LjExMyAxMmMtLjY2OC0uMDAxLS43OTMtLjY2OS0uMzYtMS4wMDNsNC42OC0zLjg4MWMuNDU4LS4zNzkgMS4wNTMuMjYuNjQzLjY4OGwtMy4wOCAzLjE5M0w5LjYgMTF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNsb3VkU3Rvcm15OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25DbG91ZFN1bm55ID0gZnVuY3Rpb24gRXVpSWNvbkNsb3VkU3VubnkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMC43NDYgNS4wMDVBNS41IDUuNSAwIDAxMTAuNSAxNkg0YTQgNCAwIDAxLTEuNjEtNy42NjNBNC40NzMgNC40NzMgMCAwMTIuMDI5IDdILjVhLjUuNSAwIDAxMC0xaDEuNTI3YTQuNDc5IDQuNDc5IDAgMDEuOTU3LTIuMzA5TDEuNjQ2IDIuMzU0YS41LjUgMCAxMS43MDgtLjcwOEwzLjY5IDIuOTg0QTQuNDc5IDQuNDc5IDAgMDE2IDIuMDI3Vi41YS41LjUgMCAwMTEgMHYxLjUyOGE0LjQ5MyA0LjQ5MyAwIDAxMi4zMDkuOTU2bDEuMzM3LTEuMzM4YS41LjUgMCAwMS43MDguNzA4TDEwLjAxNiAzLjY5Yy4zMTEuMzg4LjU2LjgzMS43MyAxLjMxNHpNNCAxNWg2LjVhNC41IDQuNSAwIDEwLTQuMTUyLTYuMjM5QTMuOTk1IDMuOTk1IDAgMDE4IDEyYS41LjUgMCAxMS0xIDAgMyAzIDAgMTAtMyAzem01LjY5MS05Ljk0YTMuNSAzLjUgMCAxMC02LjMzIDIuOTkxIDQuMDI5IDQuMDI5IDAgMDEyLjEwNi4yMjcgNS41MDUgNS41MDUgMCAwMTQuMjI0LTMuMjE5elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25DbG91ZFN1bm55OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25DbHVzdGVyID0gZnVuY3Rpb24gRXVpSWNvbkNsdXN0ZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTQuNSA3YTIuNSAyLjUgMCAxMDAtNSAyLjUgMi41IDAgMDAwIDV6bTAtNmEzLjUgMy41IDAgMDEzLjQ2NSAzaDMuMTJhMS41IDEuNSAwIDExMCAxaC0zLjEyYTMuNDgyIDMuNDgyIDAgMDEtLjY2MiAxLjU5NmwyLjEgMi4xQTMuNSAzLjUgMCAxMTguMDM2IDEyaC0zLjEyYTEuNSAxLjUgMCAxMTAtLjk5OWgzLjEyYTMuNDgyIDMuNDgyIDAgMDEuNjYyLTEuNTk2bC0yLjEtMi4xQTMuNSAzLjUgMCAxMTQuNSAxek0xMiA0LjVhLjUuNSAwIDEwMSAwIC41LjUgMCAwMC0xIDB6bS0uNSA5LjVhMi41IDIuNSAwIDExMC01IDIuNSAyLjUgMCAwMTAgNXpNNCAxMS41YS41LjUgMCAxMS0xIDAgLjUuNSAwIDAxMSAwelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25DbHVzdGVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Db2xvciA9IGZ1bmN0aW9uIEV1aUljb25Db2xvcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEzIDExYzEuMzM0IDEuMzkzIDIgMi40MzUgMiAzLjEyNUMxNSAxNS4xNjEgMTQuMTA1IDE2IDEzIDE2Yy0xLjEwNCAwLTItLjg0LTItMS44NzUgMC0uNjkuNjY3LTEuNzMyIDItMy4xMjV6TTUuODU3LjE1bDYuMzQgNi40NS4wMTYuMDIuMzI0LjMyMWExLjUgMS41IDAgMDEuMTEgMi4wMDZsLS4xMDMuMTE0LTQuNDc0IDQuNTEzYTEuNSAxLjUgMCAwMS0yLjEyMy4wMDhMMS40NjQgOS4wNmExLjUgMS41IDAgMDEuMDA3LTIuMTJsNC40NzItNC40NWMuMTQ1LS4xNDYuMzEzLS4yNTQuNDkyLS4zMjdMNS4xNDQuODVhLjUuNSAwIDAxLjcxMy0uN3ptMS40OTYgMy4wNDlhLjUuNSAwIDAwLS43MDUgMEwyLjE3NyA3LjY1YS40OTguNDk4IDAgMDAtLjE0OC4zNWg5Ljk1YS40OTguNDk4IDAgMDAtLjE0OC0uMzVMNy4zNTMgMy4yelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Db2xvcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQ29tcHV0ZSA9IGZ1bmN0aW9uIEV1aUljb25Db21wdXRlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNCAzYTEgMSAwIDAwLTEgMXY4YTEgMSAwIDAwMSAxaDhhMSAxIDAgMDAxLTFWNGExIDEgMCAwMC0xLTFINHptMTAgOHYxYTIgMiAwIDAxLTIgMmgtMXYyaC0xdi0ySDguNXYyaC0xdi0ySDZ2Mkg1di0ySDRhMiAyIDAgMDEtMi0ydi0xSDB2LTFoMlY4LjVIMHYtMWgyVjZIMFY1aDJWNGEyIDIgMCAwMTItMmgxVjBoMXYyaDEuNVYwaDF2MkgxMFYwaDF2MmgxYTIgMiAwIDAxMiAydjFoMnYxaC0ydjEuNWgydjFoLTJWMTBoMnYxaC0yelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicmVjdFwiLCB7XG4gICAgd2lkdGg6IDYsXG4gICAgaGVpZ2h0OiA2LFxuICAgIHg6IDUsXG4gICAgeTogNSxcbiAgICByeDogMVxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ29tcHV0ZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQ29uc29sZSA9IGZ1bmN0aW9uIEV1aUljb25Db25zb2xlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMS4xNTcgMTIuMjI0TDUuNzY4IDguMzJhLjQwNC40MDQgMCAwMDAtLjY0bC00LjYxLTMuOTA0YS40MDcuNDA3IDAgMDEwLS42NDMuNjA4LjYwOCAwIDAxLjc1OSAwbDQuNjEgMy45MDRjLjYzMS41MzQuNjMgMS4zOTMgMCAxLjkyNmwtNC42MSAzLjkwNGEuNjA4LjYwOCAwIDAxLS43NiAwIC40MDcuNDA3IDAgMDEwLS42NDN6TTkgMTJoNnYxSDl2LTF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNvbnNvbGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkNvbnRhaW5lciA9IGZ1bmN0aW9uIEV1aUljb25Db250YWluZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTAgMi41QS41LjUgMCAwMS41IDJoMTVhLjUuNSAwIDAxMCAxSDE1djEwaC41YS41LjUgMCAwMTAgMUguNWEuNS41IDAgMDEwLTFIMVYzSC41YS41LjUgMCAwMS0uNS0uNXpNMiAzaDEydjEwSDJWM3ptMyAyYS41LjUgMCAwMC0uNS41djVhLjUuNSAwIDAwMSAwdi01QS41LjUgMCAwMDUgNXptNS41LjVhLjUuNSAwIDAxMSAwdjVhLjUuNSAwIDAxLTEgMHYtNXpNOCA1YS41LjUgMCAwMC0uNS41djVhLjUuNSAwIDAwMSAwdi01QS41LjUgMCAwMDggNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ29udGFpbmVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Db250aW51aXR5QWJvdmUgPSBmdW5jdGlvbiBFdWlJY29uQ29udGludWl0eUFib3ZlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMS41IDNhLjUuNSAwIDAwLS41LjV2OWEuNS41IDAgMDAxIDB2LTlhLjUuNSAwIDAwLS41LS41em0zIDBhLjUuNSAwIDAwLS41LjV2OWEuNS41IDAgMDAxIDBWOWg2djEuNWEuNS41IDAgMDAuODIuMzg0bDMtMi41YS41LjUgMCAwMDAtLjc2OGwtMy0yLjVBLjUuNSAwIDAwMTEgNS41VjdINVYzLjVhLjUuNSAwIDAwLS41LS41elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Db250aW51aXR5QWJvdmU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkNvbnRpbnVpdHlBYm92ZUJlbG93ID0gZnVuY3Rpb24gRXVpSWNvbkNvbnRpbnVpdHlBYm92ZUJlbG93KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNi41IDNhLjUuNSAwIDAxLjUuNXY5YS41LjUgMCAwMS0xIDBWOUg0djEuNWEuNS41IDAgMDEtLjgyLjM4NGwtMy0yLjVhLjUuNSAwIDAxMC0uNzY4bDMtMi41QS41LjUgMCAwMTQgNS41VjdoMlYzLjVhLjUuNSAwIDAxLjUtLjV6bTMgMGEuNS41IDAgMDAtLjUuNXY5YS41LjUgMCAwMDEgMFY5aDJ2MS41YS41LjUgMCAwMC44Mi4zODRsMy0yLjVhLjUuNSAwIDAwMC0uNzY4bC0zLTIuNUEuNS41IDAgMDAxMiA1LjVWN2gtMlYzLjVhLjUuNSAwIDAwLS41LS41elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Db250aW51aXR5QWJvdmVCZWxvdzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQ29udGludWl0eUJlbG93ID0gZnVuY3Rpb24gRXVpSWNvbkNvbnRpbnVpdHlCZWxvdyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTExLjUgM2EuNS41IDAgMDEuNS41djlhLjUuNSAwIDAxLTEgMFY5SDV2MS41YS41LjUgMCAwMS0uODIuMzg0bC0zLTIuNWEuNS41IDAgMDEwLS43NjhsMy0yLjVBLjUuNSAwIDAxNSA1LjVWN2g2VjMuNWEuNS41IDAgMDEuNS0uNXptMyAwYS41LjUgMCAwMS41LjV2OWEuNS41IDAgMDEtMSAwdi05YS41LjUgMCAwMS41LS41elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Db250aW51aXR5QmVsb3c7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkNvbnRpbnVpdHlXaXRoaW4gPSBmdW5jdGlvbiBFdWlJY29uQ29udGludWl0eVdpdGhpbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTS41IDNhLjUuNSAwIDAwLS41LjV2OWEuNS41IDAgMDAxIDB2LTlBLjUuNSAwIDAwLjUgM3ptMTQuNS41YS41LjUgMCAwMTEgMHY5YS41LjUgMCAwMS0xIDB2LTl6bS00LjcxMiAxLjU0N2EuNS41IDAgMDEuNTMyLjA2OWwzIDIuNWEuNS41IDAgMDEwIC43NjhsLTMgMi41QS41LjUgMCAwMTEwIDEwLjVWOUg2djEuNWEuNS41IDAgMDEtLjgyLjM4NGwtMy0yLjVhLjUuNSAwIDAxMC0uNzY4bDMtMi41QS41LjUgMCAwMTYgNS41VjdoNFY1LjVhLjUuNSAwIDAxLjI4OC0uNDUzelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Db250aW51aXR5V2l0aGluOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Db250cm9sc0hvcml6b250YWwgPSBmdW5jdGlvbiBFdWlJY29uQ29udHJvbHNIb3Jpem9udGFsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTguMDUgMTBhMi41IDIuNSAwIDAxNC45IDBoMS41NWEuNS41IDAgMTEwIDFoLTEuNTVhMi41IDIuNSAwIDAxLTQuOSAwSDEuNWEuNS41IDAgMTEwLTFoNi41NXptLS4xLTRhMi41IDIuNSAwIDAxLTQuOSAwSDEuNWEuNS41IDAgMDEwLTFoMS41NWEyLjUgMi41IDAgMDE0LjkgMGg2LjU1YS41LjUgMCAxMTAgMUg3Ljk1ek00IDUuNWExLjUgMS41IDAgMTAzIDAgMS41IDEuNSAwIDAwLTMgMHptOCA1YTEuNSAxLjUgMCAxMC0zIDAgMS41IDEuNSAwIDAwMyAwelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Db250cm9sc0hvcml6b250YWw7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkNvbnRyb2xzVmVydGljYWwgPSBmdW5jdGlvbiBFdWlJY29uQ29udHJvbHNWZXJ0aWNhbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMCA3Ljk1YTIuNSAyLjUgMCAwMTAtNC45VjEuNWEuNS41IDAgMTExIDB2MS41NWEyLjUgMi41IDAgMDEwIDQuOXY2LjU1YS41LjUgMCAxMS0xIDBWNy45NXptLTQgLjFhMi41IDIuNSAwIDAxMCA0Ljl2MS41NWEuNS41IDAgMTEtMSAwdi0xLjU1YTIuNSAyLjUgMCAwMTAtNC45VjEuNWEuNS41IDAgMDExIDB2Ni41NXpNNS41IDEyYTEuNSAxLjUgMCAxMDAtMyAxLjUgMS41IDAgMDAwIDN6bTUtOGExLjUgMS41IDAgMTAwIDMgMS41IDEuNSAwIDAwMC0zelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Db250cm9sc1ZlcnRpY2FsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Db3B5ID0gZnVuY3Rpb24gRXVpSWNvbkNvcHkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMS40IDBjLjIzNSAwIC40Ni4wOTkuNjIyLjI3M2wyLjc0MyAzYy4xNTEuMTYyLjIzNS4zNzguMjM1LjYwMnY5LjI1YS44NjcuODY3IDAgMDEtLjg1Ny44NzVIMy44NTdBLjg2Ny44NjcgMCAwMTMgMTMuMTI1Vi44NzVDMyAuMzkyIDMuMzg0IDAgMy44NTcgMEgxMS40ek0xNCA0aC0yLjZhLjQuNCAwIDAxLS40LS40VjFINHYxMmgxMFY0elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMyAxSDJhMSAxIDAgMDAtMSAxdjEzYTEgMSAwIDAwMSAxaDEwYTEgMSAwIDAwMS0xdi0xaC0xdjFIMlYyaDFWMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ29weTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQ29weUNsaXBib2FyZCA9IGZ1bmN0aW9uIEV1aUljb25Db3B5Q2xpcGJvYXJkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMiAyLjcyOVYyYTEgMSAwIDAxMS0xaDJ2MUgzdjEyaDR2MUgzYTEgMSAwIDAxLTEtMVYyLjcyOXpNMTQgNVYyYTEgMSAwIDAwLTEtMWgtMnYxaDJ2M2gxem0tMSAxaDJ2OUg4VjZoNVY1SDhhMSAxIDAgMDAtMSAxdjlhMSAxIDAgMDAxIDFoN2ExIDEgMCAwMDEtMVY2YTEgMSAwIDAwLTEtMWgtMnYxelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOSAxMGg1VjlIOXYxem0wLTJoNVY3SDl2MXptMCA0aDV2LTFIOXYxem0wIDJoNXYtMUg5djF6bTItMTJWMWExIDEgMCAwMC0xLTFINmExIDEgMCAwMC0xIDF2MWgxVjFoNHYxaDF6TTUgM2g2VjJINXYxelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Db3B5Q2xpcGJvYXJkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Dcm9zcyA9IGZ1bmN0aW9uIEV1aUljb25Dcm9zcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuMjkzIDhMMy4xNDYgMy44NTRhLjUuNSAwIDExLjcwOC0uNzA4TDggNy4yOTNsNC4xNDYtNC4xNDdhLjUuNSAwIDAxLjcwOC43MDhMOC43MDcgOGw0LjE0NyA0LjE0NmEuNS41IDAgMDEtLjcwOC43MDhMOCA4LjcwN2wtNC4xNDYgNC4xNDdhLjUuNSAwIDAxLS43MDgtLjcwOEw3LjI5MyA4elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Dcm9zczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQ3Jvc3NJbkFDaXJjbGVGaWxsZWQgPSBmdW5jdGlvbiBFdWlJY29uQ3Jvc3NJbkFDaXJjbGVGaWxsZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04Ljc0NiA4bDMuMS0zLjFhLjUyNy41MjcgMCAxMC0uNzQ2LS43NDZMOCA3LjI1NGwtMy4xLTMuMWEuNTI3LjUyNyAwIDEwLS43NDYuNzQ2bDMuMSAzLjEtMy4xIDMuMWEuNTI3LjUyNyAwIDEwLjc0Ni43NDZsMy4xLTMuMSAzLjEgMy4xYS41MjcuNTI3IDAgMTAuNzQ2LS43NDZMOC43NDYgOHpNOCAxNkE4IDggMCAxMTggMGE4IDggMCAwMTAgMTZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNyb3NzSW5BQ2lyY2xlRmlsbGVkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Dcm9zc2hhaXJzID0gZnVuY3Rpb24gRXVpSWNvbkNyb3NzaGFpcnMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01LjgyMiAxLjg3NGEuNS41IDAgMTEuMzM1Ljk0MiA1LjUxNyA1LjUxNyAwIDAwLTMuMzQgMy4zNDEuNS41IDAgMTEtLjk0My0uMzM1IDYuNTE3IDYuNTE3IDAgMDEzLjk0OC0zLjk0OHpNMS44NjQgMTAuMTVhLjUuNSAwIDExLjk0NC0uMzMgNS41MTcgNS41MTcgMCAwMDMuMzY1IDMuMzcuNS41IDAgMDEtLjMzMy45NDMgNi41MTcgNi41MTcgMCAwMS0zLjk3Ni0zLjk4M3ptOC4zMDIgMy45ODFhLjUuNSAwIDExLS4zMzMtLjk0MyA1LjUxNyA1LjUxNyAwIDAwMy4zNDctMy4zMzIuNS41IDAgMTEuOTQxLjMzNyA2LjUxNyA2LjUxNyAwIDAxLTMuOTU1IDMuOTM4em0zLjk2OC04LjI4NWEuNS41IDAgMTEtLjk0My4zMzFBNS41MTcgNS41MTcgMCAwMDkuODUgMi44MmEuNS41IDAgMDEuMzM3LS45NDIgNi41MTcgNi41MTcgMCAwMTMuOTQ2IDMuOTY4ek04LjUgMy41YS41LjUgMCAwMS0xIDBWLjk5N2EuNS41IDAgMDExIDBWMy41em0tNC45OTcgNGEuNS41IDAgMDEwIDFIMWEuNS41IDAgMDEwLTFoMi41MDN6TTcuNSAxMi40OTdhLjUuNSAwIDAxMSAwVjE1YS41LjUgMCAxMS0xIDB2LTIuNTAzek0xMi40OTcgOC41YS41LjUgMCAwMTAtMUgxNWEuNS41IDAgMTEwIDFoLTIuNTAzek04IDlhMSAxIDAgMTEwLTIgMSAxIDAgMDEwIDJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNyb3NzaGFpcnM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkN1cnJlbmN5ID0gZnVuY3Rpb24gRXVpSWNvbkN1cnJlbmN5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIuOTUgMS42MzZsMS40MTQgMS40MTQtMi4xOTIgMi4xOTNDMTIuNjk1IDYuMDMzIDEzIDYuOTggMTMgOGMwIDEuMDItLjMwNSAxLjk2Ny0uODI4IDIuNzU3bDIuMTkyIDIuMTkzLTEuNDE0IDEuNDE0LTIuMTkzLTIuMTkyQTQuOTc3IDQuOTc3IDAgMDE4IDEzYTQuOTc3IDQuOTc3IDAgMDEtMi43NTctLjgyOEwzLjA1IDE0LjM2NCAxLjYzNiAxMi45NWwyLjE5Mi0yLjE5M0E0Ljk3NyA0Ljk3NyAwIDAxMyA4YzAtMS4wMi4zMDUtMS45NjcuODI4LTIuNzU3TDEuNjM2IDMuMDUgMy4wNSAxLjYzNmwyLjE5MyAyLjE5MkE0Ljk3NyA0Ljk3NyAwIDAxOCAzYzEuMDIgMCAxLjk2Ny4zMDUgMi43NTcuODI4bDIuMTkzLTIuMTkyek04IDVhMi45OSAyLjk5IDAgMDAtMS4xNjguMjM2bC0uMTI2LjA1Ny0uMjE4LjExNi0uMTMyLjA4MS0uMDczLjA1YTMuMDEzIDMuMDEzIDAgMDAtLjI0MS4xODdsLS4xMTMuMTAzLS4xNDcuMTVjLS4wNS4wNTQtLjA5Ny4xMS0uMTQyLjE2OGwtLjEuMTM1LS4wNS4wNzMtLjA2LjA5N2MtLjA1LjA4Mi0uMDk2LjE2Ni0uMTM3LjI1M2wtLjA1Ny4xMjZBMi45OSAyLjk5IDAgMDA1IDhjMCAuNDE0LjA4NC44MDkuMjM2IDEuMTY4bC4wNTcuMTI2LjExNi4yMTguMDgxLjEzMmMuMDU5LjA4OS4xMjEuMTc1LjE4OS4yNTdsLjE1LjE3LjE1MS4xNDdjLjA1Ni4wNTEuMTE0LjEuMTc0LjE0N2wuMTQyLjEwNWMuMDU0LjAzNy4xMDkuMDcyLjE2NS4xMDZsLS4xMjQtLjA3OS4wOTIuMDYuMDk0LjA1NWMuNDM2LjI0Ny45NC4zODggMS40NzcuMzg4YTIuOTkgMi45OSAwIDAwMS4xNjgtLjIzNmwuMTI1LS4wNTYuMjEzLS4xMTMuMTUxLS4wOTQuMDUtLjAzNGEzLjAxMSAzLjAxMSAwIDAwLjMyMy0uMjU4bC0uMTUuMTI5LjA5LS4wNzUuMTY4LS4xNTkuMDgtLjA4NGMuMDUxLS4wNTYuMS0uMTE0LjE0Ny0uMTc0bC4xMDUtLjE0Mi4xMDYtLjE2NWMuMDQ3LS4wOC4wOTEtLjE2MS4xMzEtLjI0NWwuMDU3LS4xMjZBMi45OSAyLjk5IDAgMDAxMSA4YTIuOTkgMi45OSAwIDAwLS4yMzYtMS4xNjhsLS4wNTYtLjEyNS0uMTEyLS4yMTEtLjA5Ni0uMTU1LS4wMzMtLjA0OWEzLjAxMSAzLjAxMSAwIDAwLS4yNTgtLjMyMmwuMTI5LjE1LS4wNzUtLjA5LS4xNTktLjE2OC0uMDg0LS4wOGEzLjAxNSAzLjAxNSAwIDAwLS4xNzQtLjE0N2wtLjE4My0uMTMyLS4xMjQtLjA3OWEyLjk5MyAyLjk5MyAwIDAwLS4yNDUtLjEzMWwtLjEyNi0uMDU3QTIuOTkgMi45OSAwIDAwOCA1elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25DdXJyZW5jeTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQ3V0ID0gZnVuY3Rpb24gRXVpSWNvbkN1dChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk01LjE0MiAxMS4wNzRsLTEuOTEyLjU0OGEyLjUzMiAyLjUzMiAwIDExLTEuMzk1LTQuODY3bDEuOTQ3LS41NTlhMi41MzIgMi41MzIgMCAwMTIuNTU1LjcxM2wxLjUzLTUuMzM1Yy4xMzktLjQ4NS42LS44OTcgMS4xNTktMS4yMzguMjctLjE2NC41Mi0uMjc4Ljc3OS0uMzIuODE0LS4xMzIgMS41MDMuNTU4IDEuMjYxIDEuNDIyTDkuNTc0IDYuNjQzbDQuOTg4LTEuNDNjLjg2NC0uMjQyIDEuNTU0LjQ0NyAxLjQyMiAxLjI2LS4wNDIuMjYtLjE1Ni41MS0uMzIuNzgtLjM0MS41Ni0uNzUzIDEuMDItMS4yMzggMS4xNkw5LjUyMyA5LjgxN2EyLjUzIDIuNTMgMCAwMS41NiAyLjRsLS41NiAxLjk0N2EyLjUzMiAyLjUzMiAwIDExLTQuODY3LTEuMzk1bC40ODYtMS42OTZ6bS4zMy0xLjE0OGwuNDgtMS42NzNhMS41MiAxLjUyIDAgMDAtMS44OS0xLjA4M2wtMS45NDguNTU4YTEuNTIgMS41MiAwIDAwLjgzNyAyLjkybDIuNTItLjcyMnptMy43NzMtMi4xMzVsLS4zMyAxLjE0OCA1LjIzMi0xLjVjLjMyNC0uMDkzIDEuMTgyLTEuMzkuNjk0LTEuMjUzTDkuMjQ1IDcuNzkxek01LjYzIDEzLjA0OWExLjUyIDEuNTIgMCAwMDIuOTIuODM3bC41NTktMS45NDdhMS41MiAxLjUyIDAgMDAtMS41NTMtMS45MzVsMi41MzctOC44NDVjLjEzNi0uNDg4LTEuMTYuMzctMS4yNTMuNjk0TDUuNjMgMTMuMDV6bS45NzMuMjc5bC41NTktMS45NDdhLjUwNi41MDYgMCAxMS45NzMuMjc5bC0uNTU4IDEuOTQ3YS41MDYuNTA2IDAgMTEtLjk3NC0uMjh6bS0zLjkzLTMuNjUzYS41MDYuNTA2IDAgMTEtLjI4LS45NzNsMS45NDctLjU1OGEuNTA2LjUwNiAwIDAxLjI4Ljk3M2wtMS45NDguNTU4elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25DdXQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkRhdGFiYXNlID0gZnVuY3Rpb24gRXVpSWNvbkRhdGFiYXNlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMiAxMmgxMnYtMS45N2MtMS4yMjUuNTgyLTMuNDU0Ljk3LTYgLjk3cy00Ljc3NS0uMzg4LTYtLjk3VjEyem0tMSAwVjNjMC0xLjEwNSAzLjEzNC0yIDctMnM3IC44OTUgNyAydjljMCAxLjEwNS0zLjEzNCAyLTcgMnMtNy0uODk1LTctMnptMS0zaDEyVjcuMDNjLTEuMjI1LjU4Mi0zLjQ1NC45Ny02IC45N3MtNC43NzUtLjM4OC02LS45N1Y5em0wLTQuOTdWNmgxMlY0LjAzYy0xLjIyNS41ODItMy40NTQuOTctNiAuOTdzLTQuNzc1LS4zODgtNi0uOTd6bTEwLjY3NS0xLjQ4M0MxMS40NjcgMi4yMDIgOS43OTUgMiA4IDJjLTEuNzk0IDAtMy40NjcuMjAyLTQuNjc1LjU0Ny0uNDkyLjE0LS44OC4yOTgtMS4xMzYuNDUzLjI1Ni4xNTUuNjQ0LjMxMiAxLjEzNi40NTNDNC41MzMgMy43OTggNi4yMDUgNCA4IDRjMS43OTQgMCAzLjQ2Ny0uMjAyIDQuNjc1LS41NDcuNDkyLS4xNC44OC0uMjk4IDEuMTM2LS40NTMtLjI1Ni0uMTU1LS42NDQtLjMxMi0xLjEzNi0uNDUzek0yIDZjLjI1Ny4xNTUuODMzLjMxMiAxLjMyNS40NTNDNC41MzMgNi43OTggNi4yMDUgNyA4IDdjMS43OTQgMCAzLjQ2Ny0uMjAyIDQuNjc1LS41NDcuNDkyLS4xNCAxLjA3LS4yOTggMS4zMjctLjQ1M0gyem0wIDNjLjI1Ny4xNTUuODMzLjMxMiAxLjMyNS40NTNDNC41MzMgOS43OTggNi4yMDUgMTAgOCAxMGMxLjc5NCAwIDMuNDY3LS4yMDIgNC42NzUtLjU0Ny40OTItLjE0IDEuMDctLjI5OCAxLjMyNy0uNDUzSDJ6bTAgM2MuMjU3LjE1NS44MzMuMzEyIDEuMzI1LjQ1M0M0LjUzMyAxMi43OTggNi4yMDUgMTMgOCAxM2MxLjc5NCAwIDMuNDY3LS4yMDIgNC42NzUtLjU0Ny40OTItLjE0IDEuMDctLjI5OCAxLjMyNy0uNDUzSDJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkRhdGFiYXNlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25EZXNrdG9wID0gZnVuY3Rpb24gRXVpSWNvbkRlc2t0b3AoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMiAyYTEgMSAwIDAwLTEgMXY3YTEgMSAwIDAwMSAxaDRsLTEgM0gzLjVhLjUuNSAwIDAwMCAxaDlhLjUuNSAwIDAwMC0xSDExbC0xLTNoNGExIDEgMCAwMDEtMVYzYTEgMSAwIDAwLTEtMUgyem0wIDhWM2gxMnY3SDJ6bTUgMWgybDEgM0g2bDEtM3pcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00LjUgNmEuNS41IDAgMDAwIDFoMWEuNS41IDAgMDAwLTFoLTF6bTMgMGEuNS41IDAgMDAwIDFoMWEuNS41IDAgMDAwLTFoLTF6bTIuNS41YS41LjUgMCAwMS41LS41aDFhLjUuNSAwIDAxMCAxaC0xYS41LjUgMCAwMS0uNS0uNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRGVza3RvcDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRG9jdW1lbnQgPSBmdW5jdGlvbiBFdWlJY29uRG9jdW1lbnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMC44IDBjLjI3NCAwIC41MzcuMTEzLjcyNi4zMTJsMy4yIDMuNDI4Yy4xNzYuMTg2LjI3NC40MzMuMjc0LjY4OVYxNWExIDEgMCAwMS0xIDFIMmExIDEgMCAwMS0xLTFWMWExIDEgMCAwMTEtMWg4Ljh6TTE0IDVoLTMuNWEuNS41IDAgMDEtLjUtLjVWMUgydjE0aDEyVjV6bS04LjUgN2EuNS41IDAgMTEwLTFoNWEuNS41IDAgMTEwIDFoLTV6bTAtM2EuNS41IDAgMDEwLTFoNWEuNS41IDAgMTEwIDFoLTV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkRvY3VtZW50OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Eb2N1bWVudEVkaXQgPSBmdW5jdGlvbiBFdWlJY29uRG9jdW1lbnRFZGl0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOC41MDUgOC45OTVsNi40NTMtNi40NC0xLjUtMS41LTYuNDUzIDYuNDQgMS41IDEuNXpNMTIuOTY4LjE5Yy4yNTgtLjIzOC42NTctLjI2LjkxIDBsMS45MjggMS45MjlhLjY0Mi42NDIgMCAwMTAgLjkwOWwtNi43OCA2Ljc4NEEuNjQxLjY0MSAwIDAxOC41NyAxMEg2LjY0M0EuNjQzLjY0MyAwIDAxNiA5LjM1N1Y3LjQzYzAtLjE3LjA2Ny0uMzM1LjE4OC0uNDU1TDEyLjk2OC4xOXpNNC41IDEzYS41LjUgMCAxMTAtMWg3YS41LjUgMCAxMTAgMWgtN3ptNC0xMmEuNS41IDAgMDEwIDFIMnYxM2gxMlY3LjVhLjUuNSAwIDExMSAwVjE1YTEgMSAwIDAxLTEgMUgyYTEgMSAwIDAxLTEtMVYyYTEgMSAwIDAxMS0xaDYuNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRG9jdW1lbnRFZGl0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Eb2N1bWVudGF0aW9uID0gZnVuY3Rpb24gRXVpSWNvbkRvY3VtZW50YXRpb24oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05IDMuNWEuNS41IDAgMTEtMSAwIC41LjUgMCAwMTEgMHpNOSA1djNoMXYxSDhWNkg3VjVoMnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEzLjg1NSAxNC4xNDdhMS4zNCAxLjM0IDAgMDEtLjE1OC0uMjQ2QTEuOTk4IDEuOTk4IDAgMDExMy41IDEzYzAtLjQxNC4xMDMtLjcxMy4xOTctLjkwMWExLjM0IDEuMzQgMCAwMS4xNTgtLjI0NmwuMDAzLS4wMDVBLjUuNSAwIDAwMTQgMTEuNVYuNWEuNS41IDAgMDAtLjUtLjVIMy40NjFsLS4wODMuMDA1YTIuOTU3IDIuOTU3IDAgMDAtMS4xMDIuMjk4IDIuMjU3IDIuMjU3IDAgMDAtLjg4Ljc2M0MxLjE0OCAxLjQ0IDEgMS45MTMgMSAyLjVWMTNjMCAuNDYzLjExNy44NDMuMzE4IDEuMTQ1LjIuMjk4LjQ2Mi40OTEuNzA4LjYxNWEyLjM0NCAyLjM0NCAwIDAwLjk0LjI0SDN2LTFjLS4wMDUgMC0uMDE1IDAtLjAyOS0uMDAyYTEuMzQ0IDEuMzQ0IDAgMDEtLjQ5OC0uMTMzLjgxNy44MTcgMCAwMS0uMzIzLS4yNzVDMi4wNyAxMy40NyAyIDEzLjI4NyAyIDEzcy4wNy0uNDcuMTUtLjU5YS44MTcuODE3IDAgMDEuMzI0LS4yNzVBMS4zNDQgMS4zNDQgMCAwMTMgMTJoOS42NThjLS4wOTEuMjctLjE1OC42MDUtLjE1OCAxcy4wNjcuNzMuMTU4IDFIOHYxaDUuNWEuNS41IDAgMDAuMzU5LS44NDhsLS4wMDQtLjAwNXptLS4wMDEgMGwuMDAyLjAwMi0uMDAyLS4wMDJ6TTIuNzI0IDEuMTk3Yy4wOTItLjA0Ni4xODYtLjA4Mi4yNzYtLjExQzMgMi45MTggMy4wMDEgMTEgMi45OTkgMTFoLS4wMzNhMS45NzcgMS45NzcgMCAwMC0uMjgzLjAzIDIuMzQ0IDIuMzQ0IDAgMDAtLjY1Ny4yMUwyIDExLjI1NFYyLjVjMC0uNDEzLjEwMi0uNjg5LjIyOS0uODc5LjEyOC0uMTkzLjMwNC0uMzI4LjQ5NS0uNDI0ek00IDExVjFoOXYxMEg0elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNyAxM0g0djIuNWEuNS41IDAgMDAuODU0LjM1NGwuNjQ2LS42NDcuNjQ2LjY0N0EuNS41IDAgMDA3IDE1LjVWMTN6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkRvY3VtZW50YXRpb247IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkRvY3VtZW50cyA9IGZ1bmN0aW9uIEV1aUljb25Eb2N1bWVudHMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04LjggMGMuMjc0IDAgLjUzNy4xMTMuNzI2LjMxMmwzLjIgMy40MjhjLjE3Ni4xODYuMjc0LjQzMy4yNzQuNjg5VjEzYTEgMSAwIDAxLTEgMUgyYTEgMSAwIDAxLTEtMVYxYTEgMSAwIDAxMS0xaDYuOHpNMTIgNUg4LjVhLjUuNSAwIDAxLS41LS41VjFIMnYxMmgxMFY1em0tNy41IDZhLjUuNSAwIDExMC0xaDVhLjUuNSAwIDExMCAxaC01em0wLTNhLjUuNSAwIDAxMC0xaDVhLjUuNSAwIDExMCAxaC01em0xIDhhLjUuNSAwIDExMC0xSDE0VjYuNWEuNS41IDAgMTExIDBWMTVhMSAxIDAgMDEtMSAxSDUuNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRG9jdW1lbnRzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Eb3QgPSBmdW5jdGlvbiBFdWlJY29uRG90KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiY2lyY2xlXCIsIHtcbiAgICBjeDogOCxcbiAgICBjeTogOCxcbiAgICByOiA0XG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Eb3Q7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkRvdWJsZUFycm93TGVmdCA9IGZ1bmN0aW9uIEV1aUljb25Eb3VibGVBcnJvd0xlZnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTguMTM1IDE0LjA0M2EuNzUuNzUgMCAwMC4wMjUtMS4wNmwtNC41OTEtNC44MWEuMjUuMjUgMCAwMTAtLjM0Nmw0LjU5LTQuODFhLjc1Ljc1IDAgMTAtMS4wODQtMS4wMzVsLTQuNTkxIDQuODFhMS43NSAxLjc1IDAgMDAwIDIuNDE2bDQuNTkgNC44MWMuMjg3LjMuNzYxLjMxIDEuMDYxLjAyNHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTQuMTM1IDE0LjA0M2EuNzUuNzUgMCAwMC4wMjUtMS4wNmwtNC41OTEtNC44MWEuMjUuMjUgMCAwMTAtLjM0Nmw0LjU5LTQuODFhLjc1Ljc1IDAgMTAtMS4wODQtMS4wMzVsLTQuNTkxIDQuODFhMS43NSAxLjc1IDAgMDAwIDIuNDE2bDQuNTkgNC44MWMuMjg3LjMuNzYxLjMxIDEuMDYxLjAyNHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRG91YmxlQXJyb3dMZWZ0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Eb3VibGVBcnJvd1JpZ2h0ID0gZnVuY3Rpb24gRXVpSWNvbkRvdWJsZUFycm93UmlnaHQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTIuMjMyIDE0LjA0M2EuNzUuNzUgMCAwMS0uMDI1LTEuMDZsNC41OTEtNC44MWEuMjUuMjUgMCAwMDAtLjM0NmwtNC41OS00LjgxYS43NS43NSAwIDAxMS4wODUtMS4wMzVsNC41OSA0LjgxYTEuNzUgMS43NSAwIDAxMCAyLjQxNmwtNC41OSA0LjgxYS43NS43NSAwIDAxLTEuMDYuMDI0elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk04LjIzMiAxNC4wNDNhLjc1Ljc1IDAgMDEtLjAyNS0xLjA2bDQuNTkxLTQuODFhLjI1LjI1IDAgMDAwLS4zNDZsLTQuNTktNC44MWEuNzUuNzUgMCAwMTEuMDg1LTEuMDM1bDQuNTkgNC44MWExLjc1IDEuNzUgMCAwMTAgMi40MTZsLTQuNTkgNC44MWEuNzUuNzUgMCAwMS0xLjA2LjAyNHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRG91YmxlQXJyb3dSaWdodDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRG93bmxvYWQgPSBmdW5jdGlvbiBFdWlJY29uRG93bmxvYWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05IDkuMTE0bDEuODUtMS45NDNhLjUyLjUyIDAgMDEuNzcgMGMuMjE0LjIyOC4yMTQuNiAwIC44MjlsLTEuOTUgMi4wNWExLjU1MiAxLjU1MiAwIDAxLTIuMzEgMEw1LjQxIDhhLjYxNy42MTcgMCAwMTAtLjgyOS41Mi41MiAwIDAxLjc3IDBMOCA5LjA4MlYuNTU2QzggLjI0OSA4LjIyNCAwIDguNSAwcy41LjI0OS41LjU1NnY4LjU1OHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDEzLjAwNlYxMGgtMXYzLjAwNmEuOTk1Ljk5NSAwIDAxLS45OTQuOTk0SDMuMDFhLjk5NS45OTUgMCAwMS0uOTk0LS45OTRWMTBoLTF2My4wMDZjMCAxLjEuODkyIDEuOTk0IDEuOTk0IDEuOTk0aDEwLjk5NmMxLjEgMCAxLjk5NC0uODkzIDEuOTk0LTEuOTk0elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Eb3dubG9hZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWwgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03IDJoMmEyIDIgMCAwMTIgMnY4YTIgMiAwIDAxLTIgMkg3YTIgMiAwIDAxLTItMlY0YTIgMiAwIDAxMi0yek0xLjUgMWEuNS41IDAgMDEuNS41djEzYS41LjUgMCAxMS0xIDB2LTEzYS41LjUgMCAwMS41LS41em0xMyAwYS41LjUgMCAwMS41LjV2MTNhLjUuNSAwIDExLTEgMHYtMTNhLjUuNSAwIDAxLjUtLjV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25FZGl0b3JEaXN0cmlidXRlVmVydGljYWwgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNCA1aDhhMiAyIDAgMDEyIDJ2MmEyIDIgMCAwMS0yIDJINGEyIDIgMCAwMS0yLTJWN2EyIDIgMCAwMTItMnpNMS41IDFoMTNhLjUuNSAwIDExMCAxaC0xM2EuNS41IDAgMDEwLTF6bTAgMTNoMTNhLjUuNSAwIDExMCAxaC0xM2EuNS41IDAgMTEwLTF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9ySXRlbUFsaWduQm90dG9tID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckl0ZW1BbGlnbkJvdHRvbShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcgMWgyYTIgMiAwIDAxMiAydjhhMiAyIDAgMDEtMiAySDdhMiAyIDAgMDEtMi0yVjNhMiAyIDAgMDEyLTJ6TTEuNSAxNGgxM2EuNS41IDAgMTEwIDFoLTEzYS41LjUgMCAxMTAtMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9ySXRlbUFsaWduQm90dG9tOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25FZGl0b3JJdGVtQWxpZ25DZW50ZXIgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9ySXRlbUFsaWduQ2VudGVyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCA0SDdWMS41YS41LjUgMCAwMTEgMFY0em0wIDh2Mi41YS41LjUgMCAxMS0xIDBWMTJoMXpNMyA1aDlhMiAyIDAgMDEyIDJ2MmEyIDIgMCAwMS0yIDJIM2EyIDIgMCAwMS0yLTJWN2EyIDIgMCAwMTItMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9ySXRlbUFsaWduQ2VudGVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25FZGl0b3JJdGVtQWxpZ25MZWZ0ID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckl0ZW1BbGlnbkxlZnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01IDVoOGEyIDIgMCAwMTIgMnYyYTIgMiAwIDAxLTIgMkg1YTIgMiAwIDAxLTItMlY3YTIgMiAwIDAxMi0yek0xLjUgMWEuNS41IDAgMDEuNS41djEzYS41LjUgMCAxMS0xIDB2LTEzYS41LjUgMCAwMS41LS41elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JJdGVtQWxpZ25MZWZ0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25FZGl0b3JJdGVtQWxpZ25NaWRkbGUgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9ySXRlbUFsaWduTWlkZGxlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNCA3djFIMS41YS41LjUgMCAwMTAtMUg0em04IDBoMi41YS41LjUgMCAxMTAgMUgxMlY3ek03IDFoMmEyIDIgMCAwMTIgMnY5YTIgMiAwIDAxLTIgMkg3YTIgMiAwIDAxLTItMlYzYTIgMiAwIDAxMi0yelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JJdGVtQWxpZ25NaWRkbGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkVkaXRvckl0ZW1BbGlnblJpZ2h0ID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckl0ZW1BbGlnblJpZ2h0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMyA1aDhhMiAyIDAgMDEyIDJ2MmEyIDIgMCAwMS0yIDJIM2EyIDIgMCAwMS0yLTJWN2EyIDIgMCAwMTItMnptMTEuNS00YS41LjUgMCAwMS41LjV2MTNhLjUuNSAwIDExLTEgMHYtMTNhLjUuNSAwIDAxLjUtLjV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvckl0ZW1BbGlnblJpZ2h0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25FZGl0b3JJdGVtQWxpZ25Ub3AgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9ySXRlbUFsaWduVG9wKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNyAzaDJhMiAyIDAgMDEyIDJ2OGEyIDIgMCAwMS0yIDJIN2EyIDIgMCAwMS0yLTJWNWEyIDIgMCAwMTItMnpNMS41IDFoMTNhLjUuNSAwIDExMCAxaC0xM2EuNS41IDAgMDEwLTF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvckl0ZW1BbGlnblRvcDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0ID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvclBvc2l0aW9uQm90dG9tTGVmdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIgOGg1YTEgMSAwIDAxMSAxdjVIM2ExIDEgMCAwMS0xLTFWOHptMS03aDEwYTIgMiAwIDAxMiAydjEwYTIgMiAwIDAxLTIgMkgzYTIgMiAwIDAxLTItMlYzYTIgMiAwIDAxMi0yem0wIDFhMSAxIDAgMDAtMSAxdjEwYTEgMSAwIDAwMSAxaDEwYTEgMSAwIDAwMS0xVjNhMSAxIDAgMDAtMS0xSDN6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvclBvc2l0aW9uQm90dG9tTGVmdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodCA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOSA4aDV2NWExIDEgMCAwMS0xIDFIOFY5YTEgMSAwIDAxMS0xek0zIDFoMTBhMiAyIDAgMDEyIDJ2MTBhMiAyIDAgMDEtMiAySDNhMiAyIDAgMDEtMi0yVjNhMiAyIDAgMDEyLTJ6bTAgMWExIDEgMCAwMC0xIDF2MTBhMSAxIDAgMDAxIDFoMTBhMSAxIDAgMDAxLTFWM2ExIDEgMCAwMC0xLTFIM3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9yUG9zaXRpb25Ub3BMZWZ0ID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvclBvc2l0aW9uVG9wTGVmdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMgMmg1djVhMSAxIDAgMDEtMSAxSDJWM2ExIDEgMCAwMTEtMXptMC0xaDEwYTIgMiAwIDAxMiAydjEwYTIgMiAwIDAxLTIgMkgzYTIgMiAwIDAxLTItMlYzYTIgMiAwIDAxMi0yem0wIDFhMSAxIDAgMDAtMSAxdjEwYTEgMSAwIDAwMSAxaDEwYTEgMSAwIDAwMS0xVjNhMSAxIDAgMDAtMS0xSDN6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvclBvc2l0aW9uVG9wTGVmdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9yUG9zaXRpb25Ub3BSaWdodCA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JQb3NpdGlvblRvcFJpZ2h0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCAyaDVhMSAxIDAgMDExIDF2NUg5YTEgMSAwIDAxLTEtMVYyek0zIDFoMTBhMiAyIDAgMDEyIDJ2MTBhMiAyIDAgMDEtMiAySDNhMiAyIDAgMDEtMi0yVjNhMiAyIDAgMDEyLTJ6bTAgMWExIDEgMCAwMC0xIDF2MTBhMSAxIDAgMDAxIDFoMTBhMSAxIDAgMDAxLTFWM2ExIDEgMCAwMC0xLTFIM3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9yUG9zaXRpb25Ub3BSaWdodDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9yQWxpZ25DZW50ZXIgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yQWxpZ25DZW50ZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01IDRWM2g2djFINXpNMyA3VjZoMTB2MUgzem0yIDNWOWg2djFINXptLTIgM3YtMWgxMHYxSDN6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvckFsaWduQ2VudGVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25FZGl0b3JBbGlnbkxlZnQgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yQWxpZ25MZWZ0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMiA0VjNoNnYxSDJ6bTAgM1Y2aDEwdjFIMnptMCAzVjloNnYxSDJ6bTAgM3YtMWgxMHYxSDJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvckFsaWduTGVmdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9yQWxpZ25SaWdodCA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JBbGlnblJpZ2h0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCA0VjNoNnYxSDh6TTQgN1Y2aDEwdjFINHptNCAzVjloNnYxSDh6bS00IDN2LTFoMTB2MUg0elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JBbGlnblJpZ2h0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25FZGl0b3JCb2xkID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckJvbGQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04LjE5MyAxM0g0VjNoNC4xNTFjMS44MTYgMCAyLjk4Ny45NzcgMi45ODcgMi40OTUgMCAxLjA3NC0uNzk3IDIuMDEtMS44MjMgMi4xNzZ2LjA1NWMxLjM1OS4xMzIgMi4zMDggMS4xMSAyLjMwOCAyLjQzMyAwIDEuNzYtMS4yOTYgMi44NDEtMy40MyAyLjg0MXpNNS43ODggNC4zOTN2Mi44MmgxLjYzNWMxLjI0OCAwIDEuOTQ4LS41MjYgMS45NDgtMS40NTUgMC0uODczLS42MDMtMS4zNjUtMS42Ny0xLjM2NUg1Ljc4OHptMCA3LjIxNGgxLjk5NmMxLjMxNiAwIDIuMDE2LS41NDcgMi4wMTYtMS41NzMgMC0xLjAxOS0uNzItMS41NTItMi4wOTItMS41NTJoLTEuOTJ2My4xMjV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvckJvbGQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkVkaXRvckNoZWNrbGlzdCA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JDaGVja2xpc3QoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00LjU5NyAzYS40MTEuNDExIDAgMDAtLjI5OS4xMzJsLTEuODUgMS45OTMtLjc1Ni0uN2EuNDEyLjQxMiAwIDAwLS4yOC0uMTI0LjQyLjQyIDAgMDAtLjI5Mi4wOTguMzMzLjMzMyAwIDAwLS4xMi4yNTcuMzM1LjMzNSAwIDAwLjEyNy4yNTRsMS4wNjQuOTgyQS40MTguNDE4IDAgMDAyLjQ4OCA2YS40MTEuNDExIDAgMDAuMjg4LS4xMjZMNC45MDQgMy41OGEuMzI4LjMyOCAwIDAwLjA5NS0uMjUuMzM3LjMzNyAwIDAwLS4xMjYtLjIzOEEuNDIxLjQyMSAwIDAwNC41OTcgM3ptLS4yOTkgNC4xMzJBLjQxMS40MTEgMCAwMTQuNTk3IDdhLjQyMS40MjEgMCAwMS4yNzYuMDkzYy4wNzYuMDYyLjEyLjE0Ny4xMjYuMjM4YS4zMjguMzI4IDAgMDEtLjA5NS4yNUwyLjc3NiA5Ljg3NGEuNDExLjQxMSAwIDAxLS4yODguMTI2LjQxOC40MTggMCAwMS0uMjk3LS4xMDhMMS4xMjcgOC45MUEuMzM1LjMzNSAwIDAxMSA4LjY1NmEuMzMzLjMzMyAwIDAxLjEyLS4yNTcuNDIuNDIgMCAwMS4yOTItLjA5OGMuMTA4LjAwNS4yMS4wNS4yOC4xMjNsLjc1Ny43MDEgMS44NDktMS45OTN6TTQuNTk3IDExYS40MTEuNDExIDAgMDAtLjI5OS4xMzJsLTEuODUgMS45OTMtLjc1Ni0uN2EuNDEyLjQxMiAwIDAwLS4yOC0uMTI0LjQyMS40MjEgMCAwMC0uMjkyLjA5OC4zMzMuMzMzIDAgMDAtLjEyLjI1Ny4zMzUuMzM1IDAgMDAuMTI3LjI1NGwxLjA2NC45ODJhLjQxOC40MTggMCAwMC4yOTcuMTA4LjQxMS40MTEgMCAwMC4yODgtLjEyNmwyLjEyOC0yLjI5M2EuMzI4LjMyOCAwIDAwLjA5NS0uMjUuMzM3LjMzNyAwIDAwLS4xMjYtLjIzOC40MjEuNDIxIDAgMDAtLjI3Ni0uMDkzek02LjUgNGEuNS41IDAgMDAwIDFoN2EuNS41IDAgMDAwLTFoLTd6TTYgOC41YS41LjUgMCAwMS41LS41aDdhLjUuNSAwIDAxMCAxaC03YS41LjUgMCAwMS0uNS0uNXptLjUgMy41YS41LjUgMCAwMDAgMWg3YS41LjUgMCAwMDAtMWgtN3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9yQ2hlY2tsaXN0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25FZGl0b3JDb2RlQmxvY2sgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yQ29kZUJsb2NrKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMi40MTQgOC4wMzZMNC44OSAxMC41MWEuNS41IDAgMDEtLjcwNy43MDhMMS4zNTQgOC4zODlhLjUuNSAwIDAxMC0uNzA3bDIuODI4LTIuODI4YS41LjUgMCAxMS43MDcuNzA3TDIuNDE0IDguMDM2em04Ljc2OCAyLjQ3NGwyLjQ3NS0yLjQ3NC0yLjQ3NS0yLjQ3NWEuNS41IDAgMDEuNzA3LS43MDdsMi44MjkgMi44MjhhLjUuNSAwIDAxMCAuNzA3bC0yLjgyOSAyLjgyOWEuNS41IDAgMTEtLjcwNy0uNzA4ek04LjU1OSAyLjUwNmEuNS41IDAgMDEuOTgxLjE5TDcuNDQxIDEzLjQ5NGEuNS41IDAgMDEtLjk4MS0uMTlMOC41NTkgMi41MDZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvckNvZGVCbG9jazsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9yQ29tbWVudCA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JDb21tZW50KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNi4xMTEgMTBIMTJhMSAxIDAgMDAxLTFWNWExIDEgMCAwMC0xLTFINGExIDEgMCAwMC0xIDF2NGExIDEgMCAwMDEgMWgxdjEuMjk3TDYuMTExIDEwem0uNDYgMUw0IDE0di0zYTIgMiAwIDAxLTItMlY1YTIgMiAwIDAxMi0yaDhhMiAyIDAgMDEyIDJ2NGEyIDIgMCAwMS0yIDJINi41NzF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvckNvbW1lbnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkVkaXRvckhlYWRpbmcgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9ySGVhZGluZyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYgMTFhMSAxIDAgMDEwIDJINGExIDEgMCAwMTAtMlY1YTEgMSAwIDExMC0yaDJhMSAxIDAgMTEwIDJ2Mmg0VjVhMSAxIDAgMTEwLTJoMmExIDEgMCAwMTAgMnY2YTEgMSAwIDAxMCAyaC0yYTEgMSAwIDAxMC0yVjlINnYyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JIZWFkaW5nOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25FZGl0b3JJdGFsaWMgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9ySXRhbGljKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOC4xNiAxMkg5LjVhLjUuNSAwIDExMCAxaC00YS41LjUgMCAxMTAtMWgxLjYzOWwxLjctOEg3LjVhLjUuNSAwIDAxMC0xaDRhLjUuNSAwIDExMCAxSDkuODYxbC0xLjcgOHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9ySXRhbGljOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25FZGl0b3JMaW5rID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckxpbmsoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjU1NiA1LjA1MWEuNDUuNDUgMCAwMC42MzcuNjM3bDEuNTAzLTEuNTA0Yy40MzItLjQzMSAxLjI3OC0uMzgyIDEuODkuMjMuNjEyLjYxMi42NjIgMS40NTguMjMgMS44OUw5LjUxOSA4LjZjLS40MzIuNDMyLTEuMjc4LjM4My0xLjg5LS4yM2EuNDUuNDUgMCAxMC0uNjM2LjYzN2MuOTE0LjkxNCAyLjMzIDEuMDYzIDMuMTYyLjIzbDIuMjk3LTIuMjk3Yy44MzMtLjgzMy42ODQtMi4yNDgtLjIzLTMuMTYyLS45MTQtLjkxNS0yLjMzLTEuMDYzLTMuMTYyLS4yM0w3LjU1NiA1LjA1MXptLjg4OCA1LjI2MWEuNDUuNDUgMCAwMC0uNjM3IDBsLTEuNTAzIDEuNTA0Yy0uNDMyLjQzMS0xLjI3OC4zODItMS44OS0uMjMtLjYxMi0uNjEyLS42NjEtMS40NTgtLjIzLTEuODlMNi40ODEgNy40Yy40MzItLjQzMiAxLjI3OC0uMzgzIDEuODkuMjNhLjQ1LjQ1IDAgMDAuNjM2LS42MzdjLS45MTQtLjkxNC0yLjMzLTEuMDYzLTMuMTYyLS4yM0wzLjU0OCA5LjA2Yy0uODMzLjgzMy0uNjg1IDIuMjQ4LjIzIDMuMTYyLjkxNC45MTUgMi4zMyAxLjA2MyAzLjE2Mi4yM2wxLjUwNC0xLjUwM2EuNDUuNDUgMCAwMDAtLjYzN3pNNy44NzcgNS43NmEuMzkuMzkgMCAwMC4yNzQtLjExNGwxLjUwMy0xLjUwNC0xLjUwMyAxLjUwNGEuMzkuMzkgMCAwMS0uMjc0LjExNHptLjkxMiAzLjE4M2MtLjQuMDAzLS44NDMtLjE3Mi0xLjIwMi0uNTMuMzU5LjM1OC44MDIuNTMzIDEuMjAyLjUzek0xMi4xOCAzLjgyYy0uNTAyLS41MDMtMS4xNTUtLjc2Ni0xLjc3My0uNzYuNjE4LS4wMDYgMS4yNy4yNTcgMS43NzMuNzYuODk4Ljg5OCAxLjAzNCAyLjI3NS4yMyAzLjA3OGwtMi4yOTcgMi4yOTcgMi4yOTctMi4yOTdjLjgwNC0uODAzLjY2OC0yLjE4LS4yMy0zLjA3OHptLTQuMDYyIDYuNDJhLjM5LjM5IDAgMDEuMjg0LjY2N0w2Ljg5OCAxMi40MWwxLjUwNC0xLjUwM2EuMzkuMzkgMCAwMC0uMjg0LS42Njd6bS0uOTI2LTMuOTY1Yy42MTgtLjAwNiAxLjI3LjI1NyAxLjc3My43Ni0uNTAyLS41MDMtMS4xNTUtLjc2Ni0xLjc3My0uNzZ6TTUuNDE0IDEyLjE1YTEuNzYyIDEuNzYyIDAgMDEtMS4wNDItLjUyMmMtLjYyNi0uNjI3LS42OTItMS41MTEtLjIzLTEuOTc0TDYuNDQgNy4zNTggNC4xNDIgOS42NTRjLS40NjIuNDYzLS4zOTYgMS4zNDguMjMgMS45NzQuMzExLjMxMS42ODcuNDg0IDEuMDQyLjUyMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9yTGluazsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9yT3JkZXJlZExpc3QgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yT3JkZXJlZExpc3QoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zIDh2MWgxdjFIMVY5aDFWOEgxVjdoM3YxSDN6bTEgNHYySDF2LTFoMXYtMUgxdi0xaDN2MXpNMyA1aDF2MUgxVjVoMVY0SDFWM2gydjJ6bTIuNS0xaDhhLjUuNSAwIDExMCAxaC04YS41LjUgMCAwMTAtMXptMCA0aDhhLjUuNSAwIDExMCAxaC04YS41LjUgMCAwMTAtMXptMCA0aDhhLjUuNSAwIDExMCAxaC04YS41LjUgMCAxMTAtMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9yT3JkZXJlZExpc3Q7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkVkaXRvclJlZG8gPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yUmVkbyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEwIDZINUMzLjA1NyA2IDIgNy4wNTcgMiA5czEuMDU3IDMgMyAzaDEuNXYtMUg1Yy0xLjM5IDAtMi0uNjEtMi0yIDAtMS4zOS42MS0yIDItMmg1djNsMy41LTMuNUwxMCAzdjN6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvclJlZG87IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkVkaXRvclN0cmlrZSA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JTdHJpa2UoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMC4wMjMgMTBoMS4yNzRjLjAwNi4wOC4wMS4xNjQuMDEuMjVhMi41NTcgMi41NTcgMCAwMS0uODgzIDEuOTQ5Yy0uMjg0LjI1LS42MjcuNDQ2LTEuMDMuNTg4QTQuMDg3IDQuMDg3IDAgMDE4LjAyOCAxM2E0LjYxNiA0LjYxNiAwIDAxLTMuMzgyLTEuNDI2Yy0uMTkzLS4yNTktLjE5My0uNSAwLS43MjQuMTkzLS4yMjMuNDM4LS4yNjYuNzM1LS4xMy4zNDMuMzYzLjc0OC42NTUgMS4yMTMuODc2LjQ2Ni4yMi45NDkuMzMgMS40NDkuMzMuNjM3IDAgMS4xMzItLjE0NCAxLjQ4NS0uNDMzLjM1My0uMjkuNTMtLjY3LjUzLTEuMTRhMS43MiAxLjcyIDAgMDAtLjAzNC0uMzUzek01LjU4NiA3YTIuNDkgMi40OSAwIDAxLS4yOTQtLjUwNyAyLjMxNiAyLjMxNiAwIDAxLS4xNzctLjkzNGMwLS4zNjMuMDc2LS43MDEuMjI4LTEuMDE1LjE1Mi0uMzE0LjM2My0uNTg2LjYzMy0uODE2LjI3LS4yMy41ODgtLjQxLjk1NS0uNTM3QTMuNjgzIDMuNjgzIDAgMDE4LjE0NSAzYy41NzggMCAxLjExMi4xMSAxLjYwMy4zMy40OS4yMjEuOTA3LjUwOCAxLjI1Ljg2MS4xNi4yODIuMTYuNTEyIDAgLjY5Mi0uMTYuMTgtLjM4LjIxNC0uNjYyLjEwMmEzLjQzOCAzLjQzOCAwIDAwLS45NzgtLjY2OSAyLjkxNCAyLjkxNCAwIDAwLTEuMjEzLS4yNDJjLS41NCAwLS45NzMuMTI1LTEuMzAyLjM3NS0uMzI4LjI1LS40OTIuNTk1LS40OTIgMS4wMzYgMCAuMjM2LjA0Ni40MzQuMTQuNTk2LjA5Mi4xNjIuMjE3LjMwNC4zNzQuNDI2LjE1Ny4xMjMuMzI5LjIzLjUxNS4zMjQuMTE5LjA2LjI0LjExNi4zNjIuMTY5SDUuNTg2ek0yLjUgOGgxMWEuNS41IDAgMTEwIDFoLTExYS41LjUgMCAwMTAtMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9yU3RyaWtlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25FZGl0b3JUYWJsZSA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JUYWJsZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE0IDN2MkgyVjN2MTBoMTJWM3pNMiAyaDEyYy41NTIgMCAxIC40MTMgMSAuOTIzdjEwLjE1NGMwIC41MS0uNDQ4LjkyMy0xIC45MjNIMmMtLjU1MiAwLTEtLjQxMy0xLS45MjNWMi45MjNDMSAyLjQxMyAxLjQ0OCAyIDIgMnptMCA1aDEydjFIMlY3em0wIDNoMTJ2MUgydi0xelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JUYWJsZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9yVW5kZXJsaW5lID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvclVuZGVybGluZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUgMy41MzZWNy44YzAgMS42MjggMS4yMjQgMi42IDMgMi42IDEuNzgzIDAgMy0uOTcyIDMtMi42VjMuNTM2YzAtLjM1Ny4xNjctLjUzNi41LS41MzYuMzMzIDAgLjUuMTc5LjUuNTM2djQuMzE4YzAgMi4wOTMtMS42NjUgMy41NDYtNCAzLjU0NlM0IDkuODkzIDQgNy44VjMuNTM2QzQgMy4xNzkgNC4xNjcgMyA0LjUgM2MuMzMzIDAgLjUuMTc5LjUuNTM2ek0yLjUgMTNoMTFhLjUuNSAwIDExMCAxaC0xMWEuNS41IDAgMTEwLTF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvclVuZGVybGluZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9yVW5kbyA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JVbmRvKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNS41IDZoNWMxLjk0MyAwIDMgMS4wNTcgMyAzcy0xLjA1NyAzLTMgM0g5di0xaDEuNWMxLjM5IDAgMi0uNjEgMi0yIDAtMS4zOS0uNjEtMi0yLTJoLTV2M0wyIDYuNSA1LjUgM3YzelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JVbmRvOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25FZGl0b3JVbm9yZGVyZWRMaXN0ID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvclVub3JkZXJlZExpc3QoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01LjUgNGg4YS41LjUgMCAxMTAgMWgtOGEuNS41IDAgMDEwLTF6bTAgNGg4YS41LjUgMCAxMTAgMWgtOGEuNS41IDAgMDEwLTF6bTAgNGg4YS41LjUgMCAxMTAgMWgtOGEuNS41IDAgMTEwLTF6bS0zLTdhLjUuNSAwIDExMC0xIC41LjUgMCAwMTAgMXptMCA0YS41LjUgMCAxMTAtMSAuNS41IDAgMDEwIDF6bTAgNGEuNS41IDAgMTEwLTEgLjUuNSAwIDAxMCAxelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JVbm9yZGVyZWRMaXN0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25FbWFpbCA9IGZ1bmN0aW9uIEV1aUljb25FbWFpbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xNC45NSAzLjY4NEw4LjYzNyA4LjkxMmExIDEgMCAwMS0xLjI3NiAwTDEuMDUxIDMuNjg0QS45OTkuOTk5IDAgMDAxIDR2OGExIDEgMCAwMDEgMWgxMmExIDEgMCAwMDEtMVY0YS45OTkuOTk5IDAgMDAtLjA1LS4zMTZ6TTIgMmgxMmEyIDIgMCAwMTIgMnY4YTIgMiAwIDAxLTIgMkgyYTIgMiAwIDAxLTItMlY0YTIgMiAwIDAxMi0yem0tLjIxIDFsNS41NzYgNC42MDNhMSAxIDAgMDAxLjI3LjAwM0wxNC4yNjggM0gxLjc5elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FbWFpbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRW1wdHkgPSBmdW5jdGlvbiBFdWlJY29uRW1wdHkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRW1wdHk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkVxbCA9IGZ1bmN0aW9uIEV1aUljb25FcWwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNS44NjIgMTQuMTh2LjAwMWEuNDgyLjQ4MiAwIDAxLjEuNTIxLjUuNSAwIDAxLS40NDcuMjk5aC0zLjE0OWMtLjA3IDAtLjEzNiAwLS4yLS4wMDNhLjY2NC42NjQgMCAwMS0uNDE0LS4xNGMtLjM1LS4zMS0uNjg0LS42MzctMS4wMDEtLjk4MWwtMS43NzItMS43MzhhNS45NDEgNS45NDEgMCAwMS0zLjgwMi4xNGwtLjA0NS0uMDEyYTUuODkgNS44OSAwIDAxLTIuNjgyLTEuNzEyQTUuNzE1IDUuNzE1IDAgMDExLjA4IDcuNzJhNS42NiA1LjY2IDAgMDEuMzQ4LTMuMTE4QTUuNzggNS43OCAwIDAxMy4zOSAyLjEyNGE1Ljk3OSA1Ljk3OSAwIDAxNi4xMzYtLjUwNSA1LjgzNiA1LjgzNiAwIDAxMi4zNTYgMi4xMjMgNS42NyA1LjY3IDAgMDEuODczIDMuMDE3bC4wMDEuMDAzYzAgLjEyOC0uMDUxLjI1LS4xNDMuMzRhLjQ5NS40OTUgMCAwMS0uNjk0IDAgLjQ3Ni40NzYgMCAwMS0uMTQzLS4zNGMwLS45NS0uMjg4LTEuODc4LS44MjYtMi42NjhhNC44OCA0Ljg4IDAgMDAtMi4xOTgtMS43NjkgNC45OSA0Ljk5IDAgMDAtMi44My0uMjczIDQuOTMgNC45MyAwIDAwLTIuNTA5IDEuMzE0IDQuNzc0IDQuNzc0IDAgMDAtMS4zNCAyLjQ2QTQuNzE1IDQuNzE1IDAgMDAyLjM1MiA4LjZhNC44MiA0LjgyIDAgMDAxLjgwNCAyLjE1NWMuODA1LjUyOCAxLjc1Mi44MSAyLjcyMS44MWE0Ljg5OSA0Ljg5OSAwIDAwMS4yOTYtLjE5NGwuMDMyLS4wMDkuNzE3LS4yMTFhLjUwNi41MDYgMCAwMS40ODMuMTExbDEuMTEgMS4wMjYgMS43ODggMS43NTJoMi4wM2wtMy42NTctMy41ODNhLjQ3NS40NzUgMCAwMS4wMTQtLjY2Ni40OTUuNDk1IDAgMDEuNjc5LS4wMTNsNC40OTMgNC40MDJ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjA5NyAzLjQ2OEw5LjY3OSA0LjkzYS40MzMuNDMzIDAgMDEuMjE4LjM3djIuOTI0YS40MjIuNDIyIDAgMDEtLjIxOC4zN2wtMi41ODIgMS40NjFhLjQzOC40MzggMCAwMS0uNDM3IDBMNC4wNzcgOC41OTRhLjQzMy40MzMgMCAwMS0uMjE4LS4zN1Y1LjNhLjQyMi40MjIgMCAwMS4yMTgtLjM3TDYuNjYgMy40NjdhLjQ0Ni40NDYgMCAwMS40MzcgMHptMS44NDUgNC4yN1Y1Ljc4NGEuMzI4LjMyOCAwIDAwLS4xNy0uMjg3TDcuMDQ3IDQuNTJhLjM0Mi4zNDIgMCAwMC0uMzM4IDBsLTEuNzI2Ljk3N2EuMzM2LjMzNiAwIDAwLS4xNjguMjg3djEuOTUzYS4zMjYuMzI2IDAgMDAuMTcuMjg3bDEuNzI0Ljk3N2EuMzQyLjM0MiAwIDAwLjMzOCAwbDEuNzI2LS45NzhhLjMzNC4zMzQgMCAwMC4xNjktLjI4N3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRXFsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25FcmFzZXIgPSBmdW5jdGlvbiBFdWlJY29uRXJhc2VyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMi42NDggOS45MzdsNy4yOS03LjI4OGEyLjIxIDIuMjEgMCAwMTMuMTI0IDBsMi4yOSAyLjI4OGEyLjIxIDIuMjEgMCAwMTAgMy4xMjZMMTAuNDEzIDEzSDEyLjVhLjUuNSAwIDAxMCAxSDQuNTAxYTIuMjEgMi4yMSAwIDAxLTEuNTYzLS42NDdsLjcwNy0uNzA3Yy4yMjcuMjI2LjUzNS4zNTQuODU2LjM1NGg0LjAwNWExLjIxIDEuMjEgMCAwMC44NDgtLjM1NGwxLjI5Mi0xLjI5My00LTQtMy4yOSAzLjI5MWExLjIxIDEuMjEgMCAwMDAgMS43MTJsLjI5LjI5LS43MDguNzA3LS4yOS0uMjlhMi4yMSAyLjIxIDAgMDEwLTMuMTI2ek04IDZoNi44OWExLjIwOCAxLjIwOCAwIDAwLS4yNDYtLjM1NkwxNCA1SDlMOCA2em0yLTJoM2wtLjY0NS0uNjQ0YTEuMjEgMS4yMSAwIDAwLTEuNzEgMEwxMCA0em00Ljg5IDNINy43MDhsMSAxSDE0bC42NDQtLjY0NEExLjIyIDEuMjIgMCAwMDE0Ljg5MSA3ek05LjcwOCA5bDEuNjQ2IDEuNjQ2TDEzIDlIOS43MDd6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNCAxMS41YS41LjUgMCAxMS0xIDAgLjUuNSAwIDAxMSAwem0xLjUtLjVhLjUuNSAwIDEwMC0xIC41LjUgMCAwMDAgMXptLTEgMmEuNS41IDAgMDAwIDFoMWEuNS41IDAgMDAwLTFoLTF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVyYXNlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRXhpdCA9IGZ1bmN0aW9uIEV1aUljb25FeGl0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEyLjUzNSAxMi40OTNhLjQ3LjQ3IDAgMDEuNDY4LjQ2OHYyLjU2NGEuNDczLjQ3MyAwIDAxLS40NjYuNDc1SDNWMEgxMi41OTVhLjQ1LjQ1IDAgMDEuMzk4LjQ2M3YyLjU2NWEuNDY5LjQ2OSAwIDAxLS40NjguNDY3aC0uMDY1YS40NjguNDY4IDAgMDEtLjQ2Ny0uNDY3VjFINHYxNGg4LjAxbC0uMDA3LTIuMDRjMC0uMjU3LjIxLS40NjcuNDY3LS40NjdoLjA2NXptLTEuMDk2LTcuNTlsMi4xMjEgMi4xMjJhMS41IDEuNSAwIDAxMCAyLjEyMWwtMi4xMiAyLjEyMmEuNS41IDAgMTEtLjcwOC0uNzA4bDIuMTIxLTIuMTJhLjUuNSAwIDAwMC0uNzA4bC0yLjEyMS0yLjEyMWEuNS41IDAgMDEuNzA3LS43MDd6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkV4aXQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkV4cGFuZCA9IGZ1bmN0aW9uIEV1aUljb25FeHBhbmQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNC4zNTQgMTIuMzU0bDgtOGEuNS41IDAgMDAtLjcwOC0uNzA4bC04IDhhLjUuNSAwIDAwLjcwOC43MDh6TTEgMTAuNWEuNS41IDAgMTExIDB2M2EuNS41IDAgMDAuNS41aDNhLjUuNSAwIDExMCAxaC0zQTEuNSAxLjUgMCAwMTEgMTMuNXYtM3ptMTQtNWEuNS41IDAgMTEtMSAwdi0zYS41LjUgMCAwMC0uNS0uNWgtM2EuNS41IDAgMTEwLTFoM0ExLjUgMS41IDAgMDExNSAyLjV2M3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRXhwYW5kOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25FeHBhbmRNaW5pID0gZnVuY3Rpb24gRXVpSWNvbkV4cGFuZE1pbmkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNi43MDcgMTBMMTAgNi43MDdBLjUuNSAwIDAwOS4yOTMgNkw2IDkuMjkzYS41LjUgMCAxMC43MDcuNzA3ek00IDkuNWEuNS41IDAgMDExIDB2MWEuNS41IDAgMDAuNS41aDFhLjUuNSAwIDExMCAxaC0xQTEuNSAxLjUgMCAwMTQgMTAuNXYtMXptOC0zYS41LjUgMCAxMS0xIDB2LTFhLjUuNSAwIDAwLS41LS41aC0xYS41LjUgMCAwMTAtMWgxQTEuNSAxLjUgMCAwMTEyIDUuNXYxelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FeHBhbmRNaW5pOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25FeHBvcnQgPSBmdW5jdGlvbiBFdWlJY29uRXhwb3J0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOC41MDUgMWMuNDIyLS4wMDMuODQ0LjE3IDEuMTY2LjUxNmwxLjk1IDIuMDVjLjIxMy4yMjguMjEzLjYgMCAuODI4YS41Mi41MiAwIDAxLS43NzEgMEw5IDIuNDUxdjcuOTkzYzAgLjMwNy0uMjI0LjU1Ni0uNS41NTZzLS41LS4yNDktLjUtLjU1NnYtNy45NmwtMS44MiAxLjkxYS41Mi41MiAwIDAxLS43NyAwIC42MTcuNjE3IDAgMDEwLS44MjlsMS45NS0yLjA1QTEuNTc1IDEuNTc1IDAgMDE4LjUgMWguMDA1ek00LjE4IDdjLS40NzMgMC0uODguMjk0LS45NzIuNzAzbC0xLjE4OSA1LjI1YS43NzYuNzc2IDAgMDAtLjAxOS4xNzJjMCAuNDgzLjQ0NC44NzUuOTkuODc1SDE0LjAxYy4wNjUgMCAuMTMtLjAwNi4xOTQtLjAxNy41MzctLjA5NS44ODUtLjU1Ni43NzgtMS4wM2wtMS4xOS01LjI1QzEzLjcgNy4yOTQgMTMuMjkzIDcgMTIuODIyIDdINC4xOHpNNiA2djFoNVY2aDEuODI1Yy45NDYgMCAxLjc2LjYwNiAxLjk0NiAxLjQ0N2wxLjE5IDUuNGMuMjE1Ljk3NS0uNDgyIDEuOTIzLTEuNTU2IDIuMTE4YTIuMTggMi4xOCAwIDAxLS4zOS4wMzVIMi45ODVDMS44ODggMTUgMSAxNC4xOTQgMSAxMy4yYzAtLjExOS4wMTMtLjIzNy4wMzktLjM1M2wxLjE5LTUuNEMyLjQxNCA2LjYwNiAzLjIyOSA2IDQuMTc0IDZINnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRXhwb3J0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25FeWUgPSBmdW5jdGlvbiBFdWlJY29uRXllKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTUuOTggNy44NzNjLjAxMy4wMy4wMi4wNjQuMDIuMDk4di4wNmEuMjQuMjQgMCAwMS0uMDIuMDk3QzE1Ljk1MiA4LjE4OCAxMy4yOTEgMTQgOCAxNFMuMDQ3IDguMTg4LjAyIDguMTI4QS4yNC4yNCAwIDAxMCA4LjAzdi0uMDU5YzAtLjAzNC4wMDctLjA2OC4wMi0uMDk4Qy4wNDggNy44MTMgMi43MDkgMiA4IDJzNy45NTMgNS44MTMgNy45OCA1Ljg3M3ptLTEuMzctLjQyNGExMi4wOTcgMTIuMDk3IDAgMDAtMS4zODUtMS44NjJDMTEuNzM5IDMuOTU2IDkuOTk5IDMgOCAzYy0yIDAtMy43NC45NTYtNS4yMjUgMi41ODdhMTIuMDk4IDEyLjA5OCAwIDAwLTEuNzAxIDIuNDE0IDEyLjA5NSAxMi4wOTUgMCAwMDEuNyAyLjQxM0M0LjI2IDEyLjA0MyA2LjAwMiAxMyA4IDEzczMuNzQtLjk1NiA1LjIyNS0yLjU4N0ExMi4wOTcgMTIuMDk3IDAgMDAxNC45MjYgOGMtLjA4LS4xNS0uMTg5LS4zNDMtLjMxNS0uNTUxek04IDQuNzVBMy4yNTMgMy4yNTMgMCAwMTExLjI1IDggMy4yNTQgMy4yNTQgMCAwMTggMTEuMjUgMy4yNTMgMy4yNTMgMCAwMTQuNzUgOCAzLjI1MiAzLjI1MiAwIDAxOCA0Ljc1em0wIDFDNi43NiA1Ljc1IDUuNzUgNi43NiA1Ljc1IDhTNi43NiAxMC4yNSA4IDEwLjI1IDEwLjI1IDkuMjQgMTAuMjUgOCA5LjI0IDUuNzUgOCA1Ljc1em0wIDEuNWEuNzUuNzUgMCAxMDAgMS41Ljc1Ljc1IDAgMDAwLTEuNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRXllOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25FeWVDbG9zZWQgPSBmdW5jdGlvbiBFdWlJY29uRXllQ2xvc2VkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNS4zMTggMTMuNDdsLjc3Ni0uNzc2QTYuMDQgNi4wNCAwIDAwOCAxM2MxLjk5OSAwIDMuNzQtLjk1NiA1LjIyNS0yLjU4N0ExMi4wOTcgMTIuMDk3IDAgMDAxNC45MjYgOGExMi4wOTcgMTIuMDk3IDAgMDAtMS43MDEtMi40MTNsLS4wMTEtLjAxMi43MDctLjcwOGMxLjM1OSAxLjQ3NiAyLjA0NSAyLjk3NiAyLjA1OCAzLjAwNi4wMTQuMDMuMDIxLjA2NC4wMjEuMDk4di4wNmEuMjQuMjQgMCAwMS0uMDIuMDk3QzE1Ljk1MiA4LjE4OCAxMy4yOTEgMTQgOCAxNGE3LjAzIDcuMDMgMCAwMS0yLjY4Mi0uNTN6TTIuMDQgMTEuMDkyQy43MDcgOS42MjkuMDM0IDguMTU4LjAyIDguMTI4QS4yNC4yNCAwIDAxMCA4LjAzdi0uMDU5YzAtLjAzNC4wMDctLjA2OC4wMi0uMDk4Qy4wNDggNy44MTMgMi43MDkgMiA4IDJjLjk2MiAwIDEuODM3LjE5MiAyLjYyNS41MDdsLS43OC43OEE2LjAzOSA2LjAzOSAwIDAwOCAzYy0yIDAtMy43NC45NTYtNS4yMjUgMi41ODdhMTIuMDk4IDEyLjA5OCAwIDAwLTEuNzAxIDIuNDE0IDEyLjExIDEyLjExIDAgMDAxLjY3NCAyLjM4M2wtLjcwOC43MDh6TTguMzYyIDQuNzdMNy4yNTUgNS44NzdhMi4yNjIgMi4yNjIgMCAwMC0xLjM3OCAxLjM3OEw0Ljc3IDguMzYyQTMuMjUyIDMuMjUyIDAgMDE4LjM2MiA0Ljc3em0yLjg2IDIuNzk3YTMuMjU0IDMuMjU0IDAgMDEtMy42NTQgMy42NTRsMS4wNi0xLjA2YTIuMjYyIDIuMjYyIDAgMDAxLjUzMy0xLjUzM2wxLjA2LTEuMDZ6bS05LjM2OCA3LjI4N2EuNS41IDAgMDEtLjcwOC0uNzA4bDEzLTEzYS41LjUgMCAwMS43MDguNzA4bC0xMyAxM3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRXllQ2xvc2VkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25GYWNlSGFwcHkgPSBmdW5jdGlvbiBFdWlJY29uRmFjZUhhcHB5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCAxNkE4IDggMCAxMTggMGE4IDggMCAwMTAgMTZ6bTAtMS4wNjdBNi45MzMgNi45MzMgMCAxMDggMS4wNjdhNi45MzMgNi45MzMgMCAwMDAgMTMuODY2ek01LjMzMyA2LjRhMS4wNjcgMS4wNjcgMCAxMTAtMi4xMzMgMS4wNjcgMS4wNjcgMCAwMTAgMi4xMzN6bTUuMzM0IDBhMS4wNjcgMS4wNjcgMCAxMTAtMi4xMzMgMS4wNjcgMS4wNjcgMCAwMTAgMi4xMzN6TTIuNzM5IDguODAyYS41MzMuNTMzIDAgMDEuOTIyLS41MzdDNC44MTUgMTAuMjQ1IDYuMjQ5IDExLjIgOCAxMS4yYzEuNzUgMCAzLjE4NS0uOTU2IDQuMzQtMi45MzVhLjUzMy41MzMgMCAwMS45Mi41MzdjLTEuMzMzIDIuMjg3LTMuMSAzLjQ2NS01LjI2IDMuNDY1LTIuMTYgMC0zLjkyNy0xLjE3OC01LjI2LTMuNDY1elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25GYWNlSGFwcHk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkZhY2VOZXV0cmFsID0gZnVuY3Rpb24gRXVpSWNvbkZhY2VOZXV0cmFsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCAxNkE4IDggMCAxMTggMGE4IDggMCAwMTAgMTZ6bTAtMS4wNjdBNi45MzMgNi45MzMgMCAxMDggMS4wNjdhNi45MzMgNi45MzMgMCAwMDAgMTMuODY2ek01LjMzMyA2LjRhMS4wNjcgMS4wNjcgMCAxMTAtMi4xMzMgMS4wNjcgMS4wNjcgMCAwMTAgMi4xMzN6bTUuMzM0IDBhMS4wNjcgMS4wNjcgMCAxMTAtMi4xMzMgMS4wNjcgMS4wNjcgMCAwMTAgMi4xMzN6TTMuMiAxMC42NjdhLjUzMy41MzMgMCAwMTAtMS4wNjdoOS42YS41MzMuNTMzIDAgMTEwIDEuMDY3SDMuMnpcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkZhY2VOZXV0cmFsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25GYWNlU2FkID0gZnVuY3Rpb24gRXVpSWNvbkZhY2VTYWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDE2QTggOCAwIDExOCAwYTggOCAwIDAxMCAxNnptMC0xLjA2N0E2LjkzMyA2LjkzMyAwIDEwOCAxLjA2N2E2LjkzMyA2LjkzMyAwIDAwMCAxMy44NjZ6TTUuMzMzIDYuNGExLjA2NyAxLjA2NyAwIDExMC0yLjEzMyAxLjA2NyAxLjA2NyAwIDAxMCAyLjEzM3ptNS4zMzQgMGExLjA2NyAxLjA2NyAwIDExMC0yLjEzMyAxLjA2NyAxLjA2NyAwIDAxMCAyLjEzM3ptMi40ODcgMy44NjhhLjUzMy41MzMgMCAxMS0uNzA4Ljc5N0MxMC45MzYgOS43MjUgOS40NTggOS4wNjcgOCA5LjA2N2MtMS40NTggMC0yLjkzNy42NTctNC40NDYgMS45OThhLjUzMy41MzMgMCAxMS0uNzA4LS43OTdDNC41MzYgOC43NjUgNi4yNTggOCA4IDhzMy40NjMuNzY1IDUuMTU0IDIuMjY4elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25GYWNlU2FkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25GaWx0ZXIgPSBmdW5jdGlvbiBFdWlJY29uRmlsdGVyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTcuOTk5IDE1Ljk5OWE4IDggMCAxMTAtMTYgOCA4IDAgMDEwIDE2ek04IDE1QTcgNyAwIDEwOCAxYTcgNyAwIDAwMCAxNHpNMy41IDVoOWEuNS41IDAgMTEwIDFoLTlhLjUuNSAwIDAxMC0xem0yIDNoNWEuNS41IDAgMTEwIDFoLTVhLjUuNSAwIDAxMC0xem0yIDNoMWEuNS41IDAgMTEwIDFoLTFhLjUuNSAwIDExMC0xelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25GaWx0ZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkZsYWcgPSBmdW5jdGlvbiBFdWlJY29uRmxhZyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuNjg2IDguNDY0YzEuNTQ3LS42MTkgMy4wOC0uNjE5IDQuNjI4IDBBLjUuNSAwIDAwMTMgOFYyYS41LjUgMCAwMC0uMjc2LS40NDdDMTEuMjU5LjgyIDkuNDU4LjgyIDcuMzQyIDEuNTI2Yy0xLjg4NC42MjgtMy40MTcuNjI4LTQuNjE4LjAyN0EuNS41IDAgMDAyIDJ2MTIuNWEuNS41IDAgMTAxIDBWOC41NTNjMS40MTEuNjI3IDIuOTgzLjU5MiA0LjY4Ni0uMDg5ek0zIDIuNzQxYzEuMzIyLjQyIDIuODc4LjMyNyA0LjY1OC0uMjY3QzkuNCAxLjg5NCAxMC44NDMgMS44NSAxMiAyLjMyMnY0Ljk3NWMtMS41Ni0uNDY0LTMuMTI4LS4zODQtNC42ODYuMjM5LTEuNTQuNjE2LTIuODkyLjYxNi00LjA5LjAxN0EuNDk4LjQ5OCAwIDAwMyA3LjVWMi43NHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRmxhZzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRm9sZCA9IGZ1bmN0aW9uIEV1aUljb25Gb2xkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNS4xNC4xOTJMNy41MyAyLjQ5YS42Ny42NyAwIDAwLjk0MiAwTDEwLjg2LjE5MmEuNjc3LjY3NyAwIDAxLjk0NCAwIC42NS42NSAwIDAxMCAuOTNsLTIuMzg4IDIuM2EyLjAyIDIuMDIgMCAwMS0yLjgzMiAwbC0yLjM4OC0yLjNhLjY1LjY1IDAgMDEwLS45My42NzcuNjc3IDAgMDEuOTQ0IDB6bTAgMTUuNjE2bDIuMzktMi4yOThhLjY3LjY3IDAgMDEuOTQyIDBsMi4zODkgMi4yOThjLjI2LjI1Ni42ODUuMjU2Ljk0NCAwYS42NS42NSAwIDAwMC0uOTNsLTIuMzg4LTIuM2EyLjAyIDIuMDIgMCAwMC0yLjgzMiAwbC0yLjM4OCAyLjNhLjY1LjY1IDAgMDAwIC45M2MuMjYuMjU2LjY4My4yNTYuOTQ0IDB6TTE2IDZIMHY0aDE2VjZ6TTEgOVY3aDE0djJIMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRm9sZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRm9sZGVyQ2hlY2sgPSBmdW5jdGlvbiBFdWlJY29uRm9sZGVyQ2hlY2soX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNiAySDF2MTFoNi4xYy4wNy4zNDguMTc3LjY4Mi4zMTYgMUgxYTEgMSAwIDAxLTEtMVYyYTEgMSAwIDAxMS0xaDUuMjVhLjc1Ljc1IDAgMDEuNzUuNzV2MS4xMjVjMCAuMDY5LjA1Ni4xMjUuMTI1LjEyNUgxM2ExIDEgMCAwMTEgMXYzLjQxNmE0Ljk2MiA0Ljk2MiAwIDAwLTEtLjMxNlY0SDcuMTI1QTEuMTI1IDEuMTI1IDAgMDE2IDIuODc1VjJ6bTEwIDEwYTQgNCAwIDExLTggMCA0IDQgMCAwMTggMHptLTEuNjQ2LTEuMzU0YS41LjUgMCAwMTAgLjcwOGwtMi41IDIuNWEuNS41IDAgMDEtLjcwOCAwbC0xLTFhLjUuNSAwIDAxLjcwOC0uNzA4bC42NDYuNjQ3IDIuMTQ2LTIuMTQ3YS41LjUgMCAwMS43MDggMHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRm9sZGVyQ2hlY2s7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkZvbGRlckNsb3NlZCA9IGZ1bmN0aW9uIEV1aUljb25Gb2xkZXJDbG9zZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03IDJIMnYxMWgxMlY0SDguMTI1QTEuMTI1IDEuMTI1IDAgMDE3IDIuODc1VjJ6bS4yNS0xYS43NS43NSAwIDAxLjc1Ljc1djEuMTI1YzAgLjA2OS4wNTYuMTI1LjEyNS4xMjVIMTRhMSAxIDAgMDExIDF2OWExIDEgMCAwMS0xIDFIMmExIDEgMCAwMS0xLTFWMmExIDEgMCAwMTEtMWg1LjI1elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Gb2xkZXJDbG9zZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkZvbGRlckV4Y2xhbWF0aW9uID0gZnVuY3Rpb24gRXVpSWNvbkZvbGRlckV4Y2xhbWF0aW9uKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEgOS41bC44MjYtMy43MTdBMSAxIDAgMDEyLjgwMiA1SDEzVjRINy4xMjVBMS4xMjUgMS4xMjUgMCAwMTYgMi44NzVWMkgxdjcuNXptLjI0NyAzLjVINy4xYy4wNy4zNDguMTc3LjY4Mi4zMTYgMUgxYTEgMSAwIDAxLTEtMVYyYTEgMSAwIDAxMS0xaDUuMjVhLjc1Ljc1IDAgMDEuNzUuNzV2MS4xMjVjMCAuMDY5LjA1Ni4xMjUuMTI1LjEyNUgxM2ExIDEgMCAwMTEgMXYxaC43NTNhMSAxIDAgMDEuOTc3IDEuMjE3bC0uNDQ3IDIuMDExYTUuMDE1IDUuMDE1IDAgMDAtLjg4Ny0uNjE4TDE0Ljc1MyA2SDIuODAzbC0xLjU1NiA3ek0xNiAxMmE0IDQgMCAxMS04IDAgNCA0IDAgMDE4IDB6bS00IC41YS41NzcuNTc3IDAgMDEtLjU3LS40OTVsLS4yOS0yLjAxNWEuODY3Ljg2NyAwIDExMS43MTggMGwtLjI4OCAyLjAxNWEuNTc3LjU3NyAwIDAxLS41Ny40OTV6bTAgMi41YTEgMSAwIDEwMC0yIDEgMSAwIDAwMCAyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Gb2xkZXJFeGNsYW1hdGlvbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRm9sZGVyT3BlbiA9IGZ1bmN0aW9uIEV1aUljb25Gb2xkZXJPcGVuKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMSA5LjVsLjgyNi0zLjcxN0ExIDEgMCAwMTIuODAyIDVIMTNWNEg3LjEyNUExLjEyNSAxLjEyNSAwIDAxNiAyLjg3NVYySDF2Ny41em0uMjQ3IDMuNWgxMS45NWwxLjU1Ni03SDIuODAzbC0xLjU1NiA3ek0xMyAxNEgxYTEgMSAwIDAxLTEtMVYyYTEgMSAwIDAxMS0xaDUuMjVhLjc1Ljc1IDAgMDEuNzUuNzV2MS4xMjVjMCAuMDY5LjA1Ni4xMjUuMTI1LjEyNUgxM2ExIDEgMCAwMTEgMXYxaC43NTNhMSAxIDAgMDEuOTc3IDEuMjE3bC0xLjU1NiA3YTEgMSAwIDAxLS45NzYuNzgzSDEzelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Gb2xkZXJPcGVuOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25GcmFtZU5leHQgPSBmdW5jdGlvbiBFdWlJY29uRnJhbWVOZXh0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMyAyYTEgMSAwIDAwLTEgMXYxMGExIDEgMCAxMDIgMFYzYTEgMSAwIDAwLTEtMXptNS4xNDYuMjJsNy4yIDQuNTgxYTEuNDI1IDEuNDI1IDAgMDEwIDIuMzk4bC03LjIgNC41ODFDNy4yMSAxNC4zNzUgNiAxMy42OTIgNiAxMi41ODFWMy40MmMwLTEuMTEyIDEuMjEtMS43OTUgMi4xNDYtMS4yelwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRnJhbWVOZXh0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25GcmFtZVByZXZpb3VzID0gZnVuY3Rpb24gRXVpSWNvbkZyYW1lUHJldmlvdXMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMyAyYTEgMSAwIDAxMSAxdjEwYTEgMSAwIDExLTIgMFYzYTEgMSAwIDAxMS0xem0tNS4xNDYuMjJsLTcuMiA0LjU4MWExLjQyNSAxLjQyNSAwIDAwMCAyLjM5OGw3LjIgNC41ODFjLjkzNi41OTUgMi4xNDYtLjA4OCAyLjE0Ni0xLjE5OVYzLjQyYzAtMS4xMTEtMS4yMS0xLjc5NC0yLjE0Ni0xLjE5OXpcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkZyYW1lUHJldmlvdXM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkZ1bGxTY3JlZW5FeGl0ID0gZnVuY3Rpb24gRXVpSWNvbkZ1bGxTY3JlZW5FeGl0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOSA3VjNoMXYzaDN2MUg5ek03IDdIM1Y2aDNWM2gxdjR6bTIgMmg0djFoLTN2M0g5Vjl6TTcgOXY0SDZ2LTNIM1Y5aDR6TTAgMS45OTRDMCAuODkzLjg5NSAwIDEuOTk0IDBoMTIuMDEyQzE1LjEwNyAwIDE2IC44OTUgMTYgMS45OTR2MTIuMDEyQTEuOTk1IDEuOTk1IDAgMDExNC4wMDYgMTZIMS45OTRBMS45OTUgMS45OTUgMCAwMTAgMTQuMDA2VjEuOTk0em0xIDB2MTIuMDEyYzAgLjU0OC40NDYuOTk0Ljk5NC45OTRoMTIuMDEyYS45OTUuOTk1IDAgMDAuOTk0LS45OTRWMS45OTRBLjk5NS45OTUgMCAwMDE0LjAwNiAxSDEuOTk0QS45OTUuOTk1IDAgMDAxIDEuOTk0elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25GdWxsU2NyZWVuRXhpdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRnVsbFNjcmVlbiA9IGZ1bmN0aW9uIEV1aUljb25GdWxsU2NyZWVuKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTMgM3Y0aC0xVjRIOVYzaDR6TTMgM2g0djFINHYzSDNWM3ptMTAgMTBIOXYtMWgzVjloMXY0ek0zIDEzVjloMXYzaDN2MUgzek0wIDEuOTk0QzAgLjg5My44OTUgMCAxLjk5NCAwaDEyLjAxMkMxNS4xMDcgMCAxNiAuODk1IDE2IDEuOTk0djEyLjAxMkExLjk5NSAxLjk5NSAwIDAxMTQuMDA2IDE2SDEuOTk0QTEuOTk1IDEuOTk1IDAgMDEwIDE0LjAwNlYxLjk5NHptMSAwdjEyLjAxMmMwIC41NDguNDQ2Ljk5NC45OTQuOTk0aDEyLjAxMmEuOTk1Ljk5NSAwIDAwLjk5NC0uOTk0VjEuOTk0QS45OTUuOTk1IDAgMDAxNC4wMDYgMUgxLjk5NEEuOTk1Ljk5NSAwIDAwMSAxLjk5NHpcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkZ1bGxTY3JlZW47IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkZ1bmN0aW9uID0gZnVuY3Rpb24gRXVpSWNvbkZ1bmN0aW9uKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTMgMi4yMjZ2Mi4yMThjLS4zNTktLjE0My0uODQ1LS4yMTgtMS4zMTUtLjIxOC0xLjA1OSAwLTEuNjMxLjUxOS0xLjgwMiAxLjU2NWwtLjE2OC45MzdoMi43OTh2Mi4xNTlIOS40MWwtLjMxMyAxLjY3NEM4LjY5NiAxMi45ODcgNy4yNjEgMTQgNC43ODUgMTRjLS43MTggMC0xLjM1LS4wOTItMS43ODUtLjI1MXYtMi4yNDNjLjQxOC4xNzYuOTA1LjI2OCAxLjM4My4yNjggMS4wMDggMCAxLjU0Ni0uNDM1IDEuNzI1LTEuNTIzbC4yNC0xLjM2NEgzLjc4N1Y2LjcyOGgyLjgxMmwuMjg4LTEuMjY0QzcuMjg2IDMuMDcxIDguNjYyIDIgMTEuMzUyIDJjLjU5OCAwIDEuMzA2LjEgMS42NDguMjI2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25GdW5jdGlvbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uR2VhciA9IGZ1bmN0aW9uIEV1aUljb25HZWFyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNLjE2NCAxMC4zMjlMMS44NyA4IC4xNjMgNS42N2MuMTgtLjYwMS40My0xLjE5Ljc1OC0xLjc1N2E4LjE5NyA4LjE5NyAwIDAxMS4xNDItMS41MzVsMi44NzIuMzEzTDYuMDk5LjA1YTguMTY2IDguMTY2IDAgMDEzLjgtLjAwM2wxLjE2NiAyLjY0NCAyLjg3Mi0uMzEzYTguMTY2IDguMTY2IDAgMDExLjg5OSAzLjI5M0wxNC4xMyA4bDEuNzA2IDIuMzNjLS4xOC42MDEtLjQzIDEuMTktLjc1OCAxLjc1N2E4LjE5NyA4LjE5NyAwIDAxLTEuMTQyIDEuNTM1bC0yLjg3Mi0uMzEzLTEuMTY0IDIuNjQxYTguMTY2IDguMTY2IDAgMDEtMy44LjAwM2wtMS4xNjYtMi42NDQtMi44NzIuMzEzYTguMTY2IDguMTY2IDAgMDEtMS44OTktMy4yOTN6bTQuNjYzIDEuOTg2YTEgMSAwIDAxMS4wMjMuNTkxbC45NTcgMi4xN2MuNzkuMTM0IDEuNTk3LjEzMiAyLjM4Ny0uMDAxbC45NTYtMi4xNjlhMSAxIDAgMDExLjAyMy0uNTlsMi4zNTguMjU2YTcuMjMgNy4yMyAwIDAwMS4xOTQtMi4wNjhsLTEuNDAxLTEuOTEzYTEgMSAwIDAxMC0xLjE4MmwxLjQtMS45MTJhNy4xNjUgNy4xNjUgMCAwMC0xLjE5Mi0yLjA2OWwtMi4zNTkuMjU3YTEgMSAwIDAxLTEuMDIzLS41OTFMOS4xOTMuOTI0YTcuMTY1IDcuMTY1IDAgMDAtMi4zODcuMDAxTDUuODUgMy4wOTRhMSAxIDAgMDEtMS4wMjMuNTlsLTIuMzU4LS4yNTZhNy4yMyA3LjIzIDAgMDAtMS4xOTQgMi4wNjhsMS40MDEgMS45MTNhMSAxIDAgMDEwIDEuMTgybC0xLjQgMS45MTJjLjI4Ljc1MS42ODEgMS40NSAxLjE5MiAyLjA2OWwyLjM1OS0uMjU3ek04IDExYTMgMyAwIDExMC02IDMgMyAwIDAxMCA2em0wLTFhMiAyIDAgMTAwLTQgMiAyIDAgMDAwIDR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkdlYXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkdsYXNzZXMgPSBmdW5jdGlvbiBFdWlJY29uR2xhc3NlcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuMDM1IDlBMy41IDMuNSAwIDAxMTUgNy4wNVY0LjVjMC0xLjA3Mi0uNjQ4LTEuNzItMi4wOTgtMi4wMWEuNS41IDAgMDEuMTk2LS45OEMxNC45ODEgMS44ODYgMTYgMi45MDUgMTYgNC41djQuMjVjMCAuMDcyLS4wMTUuMTQtLjA0My4yMDJBMy41IDMuNSAwIDExOS4wMzUgMTBoLTIuMDdBMy41IDMuNSAwIDExLjA0MyA4Ljk1Mi40OTguNDk4IDAgMDEwIDguNzVWNC41YzAtMS41OTUgMS4wMTktMi42MTQgMi45MDItMi45OWEuNS41IDAgMDEuMTk2Ljk4QzEuNjQ4IDIuNzggMSAzLjQyOCAxIDQuNXYyLjU1QTMuNSAzLjUgMCAwMTYuOTY1IDloMi4wN3pNMy41IDEyYTIuNSAyLjUgMCAxMDAtNSAyLjUgMi41IDAgMDAwIDV6bTkgMGEyLjUgMi41IDAgMTAwLTUgMi41IDIuNSAwIDAwMCA1elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25HbGFzc2VzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25HbG9iZSA9IGZ1bmN0aW9uIEV1aUljb25HbG9iZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEuMDE5IDhhNi40NjIgNi40NjIgMCAwMDEuMDAzIDNoMi4zODJhMTQuNDY5IDE0LjQ2OSAwIDAxLS4zOTYtM2gtMi45OXptMC0xaDIuOTg5Yy4wMzMtMS4wNzguMTcyLTIuMDk0LjM5Ni0zSDIuMDIyYTYuNDYyIDYuNDYyIDAgMDAtMS4wMDMgM3pNMTMuOTggOGgtMi45ODlhMTQuNDY5IDE0LjQ2OSAwIDAxLS4zOTYgM2gyLjM4MmE2LjQ2MiA2LjQ2MiAwIDAwMS4wMDMtM3ptMC0xYTYuNDYyIDYuNDYyIDAgMDAtMS4wMDMtM2gtMi4zODJjLjIyNC45MDYuMzYzIDEuOTIyLjM5NiAzaDIuOTl6TTUuMDA4IDhjLjAzNyAxLjEwNy4xOTUgMi4xMjcuNDI5IDNoNC4xMjZjLjIzNC0uODczLjM5Mi0xLjg5My40MjktM0g1LjAwOHptMC0xaDQuOTg0YTEzLjQyMiAxMy40MjIgMCAwMC0uNDI5LTNINS40MzdhMTMuNDIyIDEzLjQyMiAwIDAwLS40MjkgM3pNLjAxNiA4SDBWN2guMDE2YTcuNSA3LjUgMCAwMTE0Ljk2OCAwSDE1djFoLS4wMTZBNy41IDcuNSAwIDAxLjAxNiA4em0yLjc5NCA0YTYuNTAxIDYuNTAxIDAgMDAyLjcxNyAxLjY5NUE3LjMxNSA3LjMxNSAwIDAxNC43IDEySDIuODF6bTkuMzggMEgxMC4zYy0uMjMuNjU3LS41MSAxLjIzLS44MjcgMS42OTVBNi41MDEgNi41MDEgMCAwMDEyLjE5IDEyem0tNi40MjggMGMuNDg0IDEuMjQgMS4xMzIgMiAxLjczOCAyIC42MDYgMCAxLjI1NC0uNzYgMS43MzgtMkg1Ljc2MnpNMi44MSAzSDQuN2MuMjMtLjY1Ny41MS0xLjIzLjgyNy0xLjY5NUE2LjUwMSA2LjUwMSAwIDAwMi44MSAzem05LjM4IDBhNi41MDEgNi41MDEgMCAwMC0yLjcxNy0xLjY5NWMuMzE3LjQ2NS41OTcgMS4wMzguODI3IDEuNjk1aDEuODl6TTUuNzYyIDNoMy40NzZDOC43NTQgMS43NiA4LjEwNiAxIDcuNSAxYy0uNjA2IDAtMS4yNTQuNzYtMS43MzggMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uR2xvYmU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkdyYWIgPSBmdW5jdGlvbiBFdWlJY29uR3JhYihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMy41IDZjLjI3NiAwIC41LjIzMi41LjUgMCAuMjc2LS4yMjkuNS0uNS41aC0xMWEuNTA1LjUwNSAwIDAxLS41LS41YzAtLjI3Ni4yMjktLjUuNS0uNWgxMXptMCAzYy4yNzYgMCAuNS4yMzIuNS41IDAgLjI3Ni0uMjI5LjUtLjUuNWgtMTFhLjUwNS41MDUgMCAwMS0uNS0uNWMwLS4yNzYuMjI5LS41LjUtLjVoMTF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkdyYWI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkdyYWJIb3Jpem9udGFsID0gZnVuY3Rpb24gRXVpSWNvbkdyYWJIb3Jpem9udGFsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTYgMi41YzAtLjI3Ni4yMzItLjUuNS0uNS4yNzYgMCAuNS4yMjkuNS41djExYzAgLjI3Ni0uMjMyLjUtLjUuNWEuNTAzLjUwMyAwIDAxLS41LS41di0xMXptMyAwYzAtLjI3Ni4yMzItLjUuNS0uNS4yNzYgMCAuNS4yMjkuNS41djExYzAgLjI3Ni0uMjMyLjUtLjUuNWEuNTAzLjUwMyAwIDAxLS41LS41di0xMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uR3JhYkhvcml6b250YWw7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkdyaWQgPSBmdW5jdGlvbiBFdWlJY29uR3JpZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEgNVYxaDR2NEgxem0zLTFWMkgydjJoMnptMiAxVjFoNHY0SDZ6bTMtMVYySDd2Mmgyem0yIDFWMWg0djRoLTR6bTEtMWgyVjJoLTJ2MnpNMSAxMFY2aDR2NEgxem0zLTFWN0gydjJoMnptMiAxVjZoNHY0SDZ6bTMtMVY3SDd2Mmgyem0yIDFWNmg0djRoLTR6bTMtMVY3aC0ydjJoMnpNMSAxNXYtNGg0djRIMXptMS0xaDJ2LTJIMnYyem00IDF2LTRoNHY0SDZ6bTEtMWgydi0ySDd2MnptNCAxdi00aDR2NGgtNHptMS0xaDJ2LTJoLTJ2MnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uR3JpZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uSGVhcnQgPSBmdW5jdGlvbiBFdWlJY29uSGVhcnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjQwMiAzLjA5OGEzLjc1IDMuNzUgMCAwMC01LjMwNCA1LjMwNGw1LjU1OCA1LjI3TDggMTRsNS44OTItNS41ODhhMy43NSAzLjc1IDAgMTAtNS4yOTQtNS4zMTNMOCAzLjY5N2wtLjU5OC0uNTk5ek0yLjc5NiA3LjY4NWEyLjc0NyAyLjc0NyAwIDAxLjAxLTMuODggMi43NSAyLjc1IDAgMDEzLjg4OSAwTDggNS4xMTFsMS4zMDUtMS4zMDZhMi43NSAyLjc1IDAgMTEzLjg5IDMuODlMOCAxMi42MiAyLjc5NiA3LjY4NXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uSGVhcnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkhlYXRtYXAgPSBmdW5jdGlvbiBFdWlJY29uSGVhdG1hcChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyIDlhMyAzIDAgMTEwIDYgMyAzIDAgMDEwLTZ6bTAgMWEyIDIgMCAxMDAgNCAyIDIgMCAwMDAtNHpNNCAyYTIgMiAwIDExMCA0IDIgMiAwIDAxMC00em0wIDFhMSAxIDAgMTAwIDIgMSAxIDAgMDAwLTJ6bTAgNWE0IDQgMCAxMTAgOCA0IDQgMCAwMTAtOHptMCAxYTMgMyAwIDEwMCA2IDMgMyAwIDAwMC02em04LTlhNCA0IDAgMTEwIDggNCA0IDAgMDEwLTh6bTAgMWEzIDMgMCAxMDAgNiAzIDMgMCAwMDAtNnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uSGVhdG1hcDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uSGVscCA9IGZ1bmN0aW9uIEV1aUljb25IZWxwKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEzLjYgMTIuMTg2bC0xLjM1Ny0xLjM1OGMtLjAyNS0uMDI1LS4wNTgtLjAzNC0uMDg0LS4wNTYuNTMtLjc5NC44NC0xLjc0Ni44NC0yLjc3M2E0Ljk3NyA0Ljk3NyAwIDAwLS44NC0yLjc3MmMuMDI2LS4wMi4wNTktLjAzLjA4NC0uMDU2TDEzLjYgMy44MTNhNi45NiA2Ljk2IDAgMDEwIDguMzczek04IDE1QTYuOTU2IDYuOTU2IDAgMDEzLjgxNCAxMy42bDEuMzU4LTEuMzU4Yy4wMjUtLjAyNS4wMzQtLjA1Ny4wNTUtLjA4NEM2LjAyIDEyLjY4OCA2Ljk3NCAxMyA4IDEzYTQuOTc4IDQuOTc4IDAgMDAyLjc3My0uODRjLjAyLjAyNi4wMy4wNTguMDU2LjA4M2wxLjM1NyAxLjM1OEE2Ljk1NiA2Ljk1NiAwIDAxOCAxNXptLTUuNjAxLTIuODEzYTYuOTYzIDYuOTYzIDAgMDEwLTguMzczbDEuMzU5IDEuMzU4Yy4wMjQuMDI1LjA1Ny4wMzUuMDg0LjA1NkE0Ljk3IDQuOTcgMCAwMDMgOGMwIDEuMDI3LjMxIDEuOTguODQyIDIuNzczLS4wMjcuMDIyLS4wNi4wMzEtLjA4NC4wNTZsLTEuMzYgMS4zNTh6bTUuNi0uMTg3QTQgNCAwIDExOCA0YTQgNCAwIDAxMCA4ek04IDFjMS41NzMgMCAzLjAxOS41MjUgNC4xODcgMS40bC0xLjM1NyAxLjM1OGMtLjAyNS4wMjUtLjAzNS4wNTctLjA1Ni4wODRBNC45NzkgNC45NzkgMCAwMDggM2E0Ljk3OSA0Ljk3OSAwIDAwLTIuNzczLjg0MmMtLjAyMS0uMDI3LS4wMy0uMDU5LS4wNTUtLjA4NEwzLjgxNCAyLjRBNi45NTcgNi45NTcgMCAwMTggMXptMC0xYTguMDAxIDguMDAxIDAgMTAuMDAzIDE2LjAwMkE4LjAwMSA4LjAwMSAwIDAwOCAwelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25IZWxwOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ib21lID0gZnVuY3Rpb24gRXVpSWNvbkhvbWUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04LjEzIDEuMjI5bDUuNSA0LjQ3YTEgMSAwIDAxLjM3Ljc3N1YxNGExIDEgMCAwMS0xIDFIMmExIDEgMCAwMS0xLTFWNi40NzZhMSAxIDAgMDEuMzctLjc3Nmw1LjUtNC40NzFhMSAxIDAgMDExLjI2IDB6TTEzIDYuNDc2TDcuNSAyLjAwNSAyIDYuNDc1VjE0aDExVjYuNDc2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ib21lOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25JSW5DaXJjbGUgPSBmdW5jdGlvbiBFdWlJY29uSUluQ2lyY2xlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTcuNSAxMS41MDhMNy40NjggOEg2LjI1VjdoMi40MDFsLjAzIDMuNTA4SDkuOHYxSDcuNXptLS4yNS02LjIwMmEuODMuODMgMCAwMS4yMDctLjU3N2MuMTM3LS4xNTMuMzM0LS4yMjkuNTktLjIyOS4yNTYgMCAuNDU0LjA3Ni41OTQuMjMuMTQuMTUyLjIwOS4zNDUuMjA5LjU3NiAwIC4yMjgtLjA3LjQxNy0uMjEuNTY4LS4xNC4xNS0uMzM3LjIyNi0uNTkzLjIyNi0uMjU2IDAtLjQ1My0uMDc1LS41OS0uMjI2YS44MS44MSAwIDAxLS4yMDctLjU2OHpNOCAxM0E1IDUgMCAxMDggM2E1IDUgMCAwMDAgMTB6bTAgMUE2IDYgMCAxMTggMmE2IDYgMCAwMTAgMTJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbklJbkNpcmNsZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uSW1hZ2UgPSBmdW5jdGlvbiBFdWlJY29uSW1hZ2UoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02IDVhMiAyIDAgMTEtNCAwIDIgMiAwIDAxNCAwem05LTRhMSAxIDAgMDExIDF2MTJhMSAxIDAgMDEtMSAxSDFhMSAxIDAgMDEtMS0xVjJhMSAxIDAgMDExLTF6bS0zLjQ0OCA2LjEzNGwtMy43NiAyLjc2OWEuNS41IDAgMDEtLjQzNi4wNzdsLS4wODctLjAzNC0xLjcxMy0uODdMMSAxMS44VjE0aDE0VjkuNzUxbC0zLjQ0OC0yLjYxN3pNMTUgMkgxdjguNjM1bDQuMjgtMi41NThhLjUuNSAwIDAxLjM4OS0uMDU0bC4wOTQuMDM3IDEuNjg0Ljg1NSAzLjgxMy0yLjgwN2EuNS41IDAgMDEuNTItLjA0NWwuMDc5LjA1TDE1IDguNDk1VjJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkltYWdlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25JbXBvcnQgPSBmdW5jdGlvbiBFdWlJY29uSW1wb3J0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOSAxMC4xMTRsMS44NS0xLjk0M2EuNTIuNTIgMCAwMS43NyAwYy4yMTQuMjI4LjIxNC42IDAgLjgyOWwtMS45NSAyLjA1YTEuNTUyIDEuNTUyIDAgMDEtMi4zMSAwTDUuNDEgOWEuNjE3LjYxNyAwIDAxMC0uODI5LjUyLjUyIDAgMDEuNzcgMEw4IDEwLjA4MlYxLjU1NkM4IDEuMjQ5IDguMjI0IDEgOC41IDFzLjUuMjQ5LjUuNTU2djguNTU4ek00LjE4IDZhLjk5My45OTMgMCAwMC0uOTcyLjgwNGwtMS4xODkgNkEuOTk1Ljk5NSAwIDAwMi45OTEgMTRoMTEuMDE4YTEgMSAwIDAwLjk3Mi0xLjE5NmwtMS4xOS02YS45OTMuOTkzIDAgMDAtLjk3LS44MDRINC4xOHpNNiA1djFoNVY1aDEuODI1Yy45NDYgMCAxLjc2LjY3MyAxLjk0NiAxLjYwOGwxLjE5IDZBMiAyIDAgMDExNC4wMTYgMTVIMi45ODRhMS45OTIgMS45OTIgMCAwMS0xLjk0NS0yLjM5MmwxLjE5LTZDMi40MTQgNS42NzMgMy4yMjkgNSA0LjE3NCA1SDZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkltcG9ydDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uSW5kZXhDbG9zZSA9IGZ1bmN0aW9uIEV1aUljb25JbmRleENsb3NlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIgMkgydjExaDZ2MUgxVjFoMTJ2NmgtMVYyek01IDVoNS45OTlWNEg1djF6TTMgNVY0aDF2MUgzem0yIDNWN2gzdjFINXpNMyA4VjdoMXYxSDN6bTIgM3YtMWgydjFINXptNS41LTEuMjA3TDkuMDg2IDguMzc5bC0uNzA3LjcwN0w5Ljc5MyAxMC41bC0xLjQxNCAxLjQxNC43MDcuNzA3IDEuNDE0LTEuNDE0IDEuNDE0IDEuNDE0LjcwNy0uNzA3LTEuNDE0LTEuNDE0IDEuNDE0LTEuNDE0LS43MDctLjcwN0wxMC41IDkuNzkzek0zIDExdi0xaDF2MUgzem03LjUtNWE0LjUgNC41IDAgMTEwIDkgNC41IDQuNSAwIDAxMC05elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25JbmRleENsb3NlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25JbmRleEVkaXQgPSBmdW5jdGlvbiBFdWlJY29uSW5kZXhFZGl0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIgMkgydjExaDR2MUgxVjFoMTJ2NWgtMVYyek01IDVoNS45OTlWNEg1djF6TTMgNVY0aDF2MUgzem0yIDNWN2g2djFINXpNMyA4VjdoMXYxSDN6bTIgM3YtMWgzdjFINXptLTIgMHYtMWgxdjFIM3ptNC41MDIgMS40MUwxMi45MTMgNyAxNSA5LjA4N2wtNS40MSA1LjQxTDcgMTVsLjUwMi0yLjU5elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25JbmRleEVkaXQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkluZGV4Rmx1c2ggPSBmdW5jdGlvbiBFdWlJY29uSW5kZXhGbHVzaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xNC41MTYgOUgxMC41YS41LjUgMCAwMTAtMWg0LjAxNkwxMy4xMSA1Ljk0OGMtLjE3MS0uMjUyLS4xMzctLjYyLjA3OS0uODIxLjIxNy0uMi41MzEtLjE1OS43MDMuMDkybDIgMi45MTZhLjY0OC42NDggMCAwMS4xMDguMzk3LjY0My42NDMgMCAwMS0uMTA4LjMzMmwtMiAyLjkxOEEuNDc4LjQ3OCAwIDAxMTMuNSAxMmEuNDU3LjQ1NyAwIDAxLS4zMTItLjEyN2MtLjIxNi0uMjAyLS4yNS0uNTctLjA3OS0uODJMMTQuNTE2IDl6TTMgMTVIMWExIDEgMCAwMS0xLTFWMmExIDEgMCAwMTEtMWg3LjhjLjI3NCAwIC41MzcuMTEzLjcyNi4zMTJsMi4yIDIuNDI4Yy4xNzYuMTg2LjI3NC40MzMuMjc0LjY4OVY3aC0xVjVIOC41YS41LjUgMCAwMS0uNS0uNVYySDN2MTJoOHYtNGgxdjRhMSAxIDAgMDEtMSAxSDN6bS0xLTFWMkgxdjEyaDF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkluZGV4Rmx1c2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkluZGV4TWFwcGluZyA9IGZ1bmN0aW9uIEV1aUljb25JbmRleE1hcHBpbmcoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDhINC45MTVhMS41IDEuNSAwIDExMC0xSDhWMi41QTEuNSAxLjUgMCAwMTkuNSAxaDIuNTg1YTEuNSAxLjUgMCAxMTAgMUg5LjVhLjUuNSAwIDAwLS41LjV2MTBhLjUuNSAwIDAwLjUuNWgyLjU4NWExLjUgMS41IDAgMTEwIDFIOS41QTEuNSAxLjUgMCAwMTggMTIuNVY4ek0zLjUgM2ExLjUgMS41IDAgMTEwLTMgMS41IDEuNSAwIDAxMCAzem0wIDEyYTEuNSAxLjUgMCAxMTAtMyAxLjUgMS41IDAgMDEwIDN6bTEwLTZhMS41IDEuNSAwIDExMC0zIDEuNSAxLjUgMCAwMTAgM3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uSW5kZXhNYXBwaW5nOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25JbmRleE9wZW4gPSBmdW5jdGlvbiBFdWlJY29uSW5kZXhPcGVuKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIgMkgydjExaDZ2MUgxVjFoMTJ2NmgtMVYyek01IDVoNS45OTlWNEg1djF6TTMgNVY0aDF2MUgzem0yIDNWN2gzdjFINXpNMyA4VjdoMXYxSDN6bTIgM3YtMWgydjFINXptNS0xSDh2MWgydjJoMXYtMmgydi0xaC0yVjhoLTF2MnptLTcgMXYtMWgxdjFIM3ptNy41LTVhNC41IDQuNSAwIDExMCA5IDQuNSA0LjUgMCAwMTAtOXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uSW5kZXhPcGVuOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25JbmRleFJ1bnRpbWUgPSBmdW5jdGlvbiBFdWlJY29uSW5kZXhSdW50aW1lKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIgMkgydjExaDZ2MUgxVjFoMTJ2Ni44MzlsLTEtLjcwN1YyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCAxMXYtMUg1djFoM3ptMC0zLjA1NWMwLS4zNDIuMDgyLS42NjQuMjMtLjk0NUg1djFoM3YtLjA1NXpNNSA1aDUuOTk5VjRINXYxek0zIDR2MWgxVjRIM3ptMCAzdjFoMVY3SDN6bTAgM3YxaDF2LTFIM3ptMTEuNjA3LjJsLTQuMzItMy4wNTVDOS43MjcgNi43NSA5IDcuMjA0IDkgNy45NDV2Ni4xMDhjMCAuNzQuNzI2IDEuMTk2IDEuMjg3LjhsNC4zMi0zLjA1NWMuNTI0LS4zNy41MjQtMS4yMjggMC0xLjU5OHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uSW5kZXhSdW50aW1lOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25JbmRleFNldHRpbmdzID0gZnVuY3Rpb24gRXVpSWNvbkluZGV4U2V0dGluZ3MoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01IDVoNS45OTlWNEg1djF6TTMgNWgxVjRIM3Yxem0wIDNoMVY3SDN2MXptNi4wMjItMWwtLjE1LjMzMy0uNzM3LS4wNzgtLjQ2Ny0uMDUtLjMzLjM0MkE1LjEzIDUuMTMgMCAwMDYuOTQ4IDhINVY3aDQuMDIyem0tMy4wMDUgM0w2IDEwLjA1NmwuMzA2LjQxMS4zOTkuNTMzSDV2LTFoMS4wMTd6TTMgMTFoMXYtMUgzdjF6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMyA3LjA1bC0uMTYyLS4zNTktLjItLjQ0Ny0uNDctLjExQTUuMDE5IDUuMDE5IDAgMDAxMiA2LjA5OFYySDJ2MTFoNC4zNmMuMTU3LjM1NC4zNTUuNjkuNTkgMUgxVjFoMTJ2Ni4wNXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTExLjAwNCA3Yy4zMjIgMCAuNjQ2LjAzNi45NjYuMTA5bC41OTUgMS4yOTMgMS40NjUtLjE1MmMuNDU3LjQ2Mi43ODYgMS4wMTYuOTY5IDEuNjFsLS44NyAxLjE0Ljg3MSAxLjE0MWEzLjk0IDMuOTQgMCAwMS0uMzg3Ljg1OSA0LjA1OCA0LjA1OCAwIDAxLS41ODMuNzVsLTEuNDY1LS4xNTItLjU5NCAxLjI5MmE0LjM3IDQuMzcgMCAwMS0xLjk0MS4wMDFsLS41OTQtMS4yOTMtMS40NjYuMTUyYTMuOTU0IDMuOTU0IDAgMDEtLjk2OS0xLjYxbC44Ny0xLjE0TDcgOS44NmEzLjk0NyAzLjk0NyAwIDAxLjk3LTEuNjFsMS40NjYuMTUyLjU5My0xLjI5MmE0LjM3IDQuMzcgMCAwMS45NzUtLjExek0xMSAxMmExIDEgMCAxMC4wMDItMS45OThBMSAxIDAgMDAxMSAxMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uSW5kZXhTZXR0aW5nczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uSW5wdXRPdXRwdXQgPSBmdW5jdGlvbiBFdWlJY29uSW5wdXRPdXRwdXQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMCAxMy45OTl2LTIuOTloMVYxNUgwVjFoMTF2My45OTloLTFWMi4wMDFIMXYxMS45OTh6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00LjUgMTBWOUgxMXYxek0xMyA5LjVsMy0zLTMtM3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUuNSA2LjV2NmwtMy0zek03IDdWNmg2LjV2MXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uSW5wdXRPdXRwdXQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkluc3BlY3QgPSBmdW5jdGlvbiBFdWlJY29uSW5zcGVjdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE1LjM2MyAxNC42NThhLjUuNSAwIDExLS43MTMuN2wtMi45Ny0zLjAyM2EuNS41IDAgMDEuMDAxLS43QTMuOSAzLjkgMCAxMDguOSAxMi44YS41LjUgMCAxMTAgLjk5OSA0LjkgNC45IDAgMTEzLjgyMS0xLjgzM2wyLjY0MiAyLjY5MXpNMy4wOTQgMTNhLjUuNSAwIDExMCAxSDIuNUEyLjUgMi41IDAgMDEwIDExLjV2LTlBMi41IDIuNSAwIDAxMi41IDBoOUEyLjUgMi41IDAgMDExNCAyLjV2LjU5OWEuNS41IDAgMTEtMSAwVjIuNUExLjUgMS41IDAgMDAxMS41IDFoLTlBMS41IDEuNSAwIDAwMSAyLjV2OUExLjUgMS41IDAgMDAyLjUgMTNoLjU5NHpNMi41IDNhLjUuNSAwIDExMC0xIC41LjUgMCAwMTAgMXptMiAwYS41LjUgMCAxMTAtMSAuNS41IDAgMDEwIDF6bTIgMGEuNS41IDAgMTEwLTEgLjUuNSAwIDAxMCAxem0tNCAyYS41LjUgMCAxMTAtMSAuNS41IDAgMDEwIDF6bTIgMGEuNS41IDAgMTEwLTEgLjUuNSAwIDAxMCAxem0tMiAxYS41LjUgMCAxMTAgMSAuNS41IDAgMDEwLTF6bTAgM2EuNS41IDAgMTEwLTEgLjUuNSAwIDAxMCAxem02LTZhLjUuNSAwIDExMC0xIC41LjUgMCAwMTAgMXptMiAwYS41LjUgMCAxMTAtMSAuNS41IDAgMDEwIDF6bS04IDhhLjUuNSAwIDExMC0xIC41LjUgMCAwMTAgMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uSW5zcGVjdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uSW52ZXJ0ID0gZnVuY3Rpb24gRXVpSWNvbkludmVydChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggMTMuMjVhNS4yNSA1LjI1IDAgMTAwLTEwLjUgNS4yNSA1LjI1IDAgMDAwIDEwLjV6TTggMTRBNiA2IDAgMTE4IDJhNiA2IDAgMDEwIDEyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCAyYTYgNiAwIDEwMCAxMlYyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25JbnZlcnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbklwID0gZnVuY3Rpb24gRXVpSWNvbklwKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIgMmEyIDIgMCAwMTIgMnY4YTIgMiAwIDAxLTIgMkg0YTIgMiAwIDAxLTItMlY0YTIgMiAwIDAxMi0yaDh6bS0yIDNIOHY2aDFWOS4wMTRoMWMuMjk4LS4wMTMgMiAwIDItMi4wMTggMC0xLjc0LTEuMzE0LTEuOTUyLTEuODI1LTEuOTg3TDEwIDV6TTYgNUg1djZoMVY1em00IC45ODRjLjY2NyAwIDEgLjMzNiAxIDEuMDA4QzExIDcuNjY0IDEwLjY2NyA4IDEwIDhIOVY1Ljk4NHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uSXA7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbktleWJvYXJkID0gZnVuY3Rpb24gRXVpSWNvbktleWJvYXJkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0wIDNoMTZ2MTFIMFYzem0xNSAxMFY0SDF2OWgxNHpNMiA1aDJ2MUgyVjV6bTIgN3YtMUgydjFoMnptMTAtMXYxaC0ydi0xaDJ6bS0zIDF2LTFINXYxaDZ6TTUgNWgxdjFINVY1ek0zIDdIMnYxaDFWN3ptMyAwaDF2MUg2Vjd6TTMgOUgydjFoMVY5em0zIDBoMXYxSDZWOXptMi00SDd2MWgxVjV6TTQgN2gxdjFINFY3em01IDBIOHYxaDFWN3ptMSAwaDF2MWgtMVY3ek01IDlINHYxaDFWOXptMyAwaDF2MUg4Vjl6bTMgMGgtMXYxaDFWOXpNOSA1aDF2MUg5VjV6bTMgMGgtMXYxaDFWNXptMSAwaDF2MWgtMVY1em0xIDJoLTJ2M2gyVjd6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbktleWJvYXJkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25LcWxGaWVsZCA9IGZ1bmN0aW9uIEV1aUljb25LcWxGaWVsZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxMCxcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxMFwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggOWE1IDUgMCAxMTAtOCA1IDUgMCAxMTAgOHptLjc1LS42OTJhNCA0IDAgMTAwLTYuNjE1QTQuOTgxIDQuOTgxIDAgMDExMCA1YTQuOTgxIDQuOTgxIDAgMDEtMS4yNSAzLjMwOHpNNC4xMzMgOFY1LjU1OWgyLjQ5NnYtLjYyNUg0LjEzM1YyLjk5NmgyLjcxOXYtLjYzM0gzLjQzVjhoLjcwM3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uS3FsRmllbGQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbktxbEZ1bmN0aW9uID0gZnVuY3Rpb24gRXVpSWNvbktxbEZ1bmN0aW9uKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNyA3SDN2Mmg0djJsMy0zLTMtM3Yyek02IDZWNWExIDEgMCAwMTEuNzA3LS43MDdsMyAzYTEgMSAwIDAxMCAxLjQxNGwtMyAzQTEgMSAwIDAxNiAxMXYtMUgzYTEgMSAwIDAxLTEtMVY3YTEgMSAwIDAxMS0xaDN6bTcuNS0zYS41LjUgMCAwMS41LjV2OWEuNS41IDAgMTEtMSAwdi05YS41LjUgMCAwMS41LS41elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25LcWxGdW5jdGlvbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uS3FsT3BlcmFuZCA9IGZ1bmN0aW9uIEV1aUljb25LcWxPcGVyYW5kKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTEuMTkyIDEwLjE0NWwyLjI5OC0xLjc5MmMuMjU5LS4xOTYuMjU5LS41MDkgMC0uNzA2bC0yLjI5OC0xLjc5MmMtLjI1Ni0uMTk2LS4yNTYtLjUxMyAwLS43MDhhLjgxLjgxIDAgMDEuOTMgMGwyLjMgMS43OTFjLjc3Mi41OS43NyAxLjUzNyAwIDIuMTI0bC0yLjMgMS43OTFhLjgxLjgxIDAgMDEtLjkzIDBjLS4yNTYtLjE5NS0uMjU2LS41MTIgMC0uNzA4em0tNi4zODQtNC4yOUwyLjUxIDcuNjQ3Yy0uMjU5LjE5Ni0uMjU5LjUwOSAwIC43MDZsMi4yOTggMS43OTJjLjI1Ni4xOTYuMjU2LjUxMyAwIC43MDhhLjgxLjgxIDAgMDEtLjkzIDBsLTIuMy0xLjc5MWMtLjc3Mi0uNTktLjc3LTEuNTM3IDAtMi4xMjRsMi4zLTEuNzkxYS44MS44MSAwIDAxLjkzIDBjLjI1Ni4xOTUuMjU2LjUxMiAwIC43MDh6TTYuNSA2aDNhLjUuNSAwIDAxMCAxaC0zYS41LjUgMCAwMTAtMXptMCAzaDNhLjUuNSAwIDAxMCAxaC0zYS41LjUgMCAwMTAtMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uS3FsT3BlcmFuZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uS3FsU2VsZWN0b3IgPSBmdW5jdGlvbiBFdWlJY29uS3FsU2VsZWN0b3IoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01IDEyYTQgNCAwIDEwMC04IDQgNCAwIDAwMCA4em0wIDFBNSA1IDAgMTE1IDNhNSA1IDAgMDEwIDEwem02LTFhNCA0IDAgMTAwLTggNCA0IDAgMDAwIDh6bTAgMWE1IDUgMCAxMTAtMTAgNSA1IDAgMDEwIDEwelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25LcWxTZWxlY3RvcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uS3FsVmFsdWUgPSBmdW5jdGlvbiBFdWlJY29uS3FsVmFsdWUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDRhNSA1IDAgMTEwIDggNSA1IDAgMTEwLTh6bS0uNzUuNjkyYTQgNCAwIDEwMCA2LjYxNUE0Ljk4MSA0Ljk4MSAwIDAxNiA4YzAtMS4yNjguNDcyLTIuNDI2IDEuMjUtMy4zMDh6TTExLjM0OCAxMWwyLjA3OC01LjYzN2gtLjczOWwtMS42NTYgNC43MjdoLS4wNjJMOS4zMTMgNS4zNjNoLS43MzlMMTAuNjUyIDExaC42OTZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbktxbFZhbHVlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25LdWJlcm5ldGVzTm9kZSA9IGZ1bmN0aW9uIEV1aUljb25LdWJlcm5ldGVzTm9kZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTQgMTEuNDJWNC41OEw4IDEuMTUyIDIgNC41OHY2Ljg0bDYgMy40MjggNi0zLjQyOHpNOCAxNmw3LTRWNEw4IDAgMSA0djhsNyA0ek04IDQuNjA3bDMgMS43MTRWOS42OGwtMyAxLjcxNC0zLTEuNzE0VjYuMzJsMy0xLjcxNHptNCAxLjEzNHY0LjUxOGwtNCAyLjI4Ni00LTIuMjg2VjUuNzQxbDQtMi4yODYgNCAyLjI4NnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uS3ViZXJuZXRlc05vZGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkt1YmVybmV0ZXNQb2QgPSBmdW5jdGlvbiBFdWlJY29uS3ViZXJuZXRlc1BvZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTQgNS4xNTF2Ni4yNjlsLTUuNSAzLjE0MlY4LjI5TDE0IDUuMTUxem0tLjUwOC0uODYxTDggMS4xNTIgMi41MDggNC4yOSA4IDcuNDI0bDUuNDkyLTMuMTM0ek0yIDUuMTUxbDUuNSAzLjE0djYuMjcyTDIgMTEuNDJWNS4xNXpNMTUgMTJsLTcgNC03LTRWNGw3LTQgNyA0djh6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkt1YmVybmV0ZXNQb2Q7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxheWVycyA9IGZ1bmN0aW9uIEV1aUljb25MYXllcnMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjI3NiAxLjA1M2EuNS41IDAgMDEuNDQ4IDBsNiAzYS41LjUgMCAwMTAgLjg5NGwtNiAzYS41LjUgMCAwMS0uNDQ4IDBsLTYtM2EuNS41IDAgMDEwLS44OTRsNi0zek0yLjYxOCA0LjVMNy41IDYuOTQxIDEyLjM4MiA0LjUgNy41IDIuMDU5IDIuNjE4IDQuNXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEuMDUzIDcuMjc2YS41LjUgMCAwMS42Ny0uMjIzTDcuNSA5Ljk0bDUuNzc2LTIuODg4YS41LjUgMCAxMS40NDguODk0bC02IDNhLjUuNSAwIDAxLS40NDggMGwtNi0zYS41LjUgMCAwMS0uMjIzLS42N3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEuNzI0IDEwLjA1M2EuNS41IDAgMTAtLjQ0OC44OTRsNiAzYS41LjUgMCAwMC40NDggMGw2LTNhLjUuNSAwIDEwLS40NDgtLjg5NEw3LjUgMTIuOTRsLTUuNzc2LTIuODg4elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25MYXllcnM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxldHRlcmluZyA9IGZ1bmN0aW9uIEV1aUljb25MZXR0ZXJpbmcoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNSAzbDMgOUg3TDYgOUgzbC0xIDNIMWwzLTloMXptLS41IDEuNUw1LjY2NyA4SDMuMzMzTDQuNSA0LjV6bTcuOTkgMS42NDdDMTIuMTYgNi4wMDUgMTEuNzYgNiAxMS41IDZjLS4zNTkgMC0xLjAyMi4xNzUtMS42MzIuODM4bC0uNzM2LS42NzZDOS45MjkgNS4yOTQgMTAuODU5IDUgMTEuNSA1aC4wMTZjLjI1IDAgLjgzNiAwIDEuMzY5LjIyOC4yODEuMTIuNTY4LjMxMy43ODIuNjE3LjIxNi4zMDcuMzMzLjY5My4zMzMgMS4xNTV2NWgtMXYtLjM1NGEyLjEwMSAyLjEwMSAwIDAxLS4wNjQuMDM4Yy0uNTU0LjMxNy0xLjE2Ni4zMTYtMS40Mi4zMTZoLS4wMzJjLS4yNSAwLS44MzYgMC0xLjM2OC0uMjI4YTEuODEgMS44MSAwIDAxLS43ODMtLjYxN0M5LjExNyAxMC44NDggOSAxMC40NjIgOSAxMGMwLS40NjIuMTE3LS44NDguMzMzLTEuMTU1LjIxNC0uMzA0LjUtLjQ5Ni43ODMtLjYxN0MxMC42NDggOCAxMS4yMzMgOCAxMS40ODQgOGguMDE2Yy4yNTggMCAuNjktLjAwMyAxLjA1LS4xMDZhLjg4OS44ODkgMCAwMC4zNjQtLjE3OWMuMDUzLS4wNS4wODYtLjEwOC4wODYtLjIxNVY3YzAtLjI4OC0uMDctLjQ2NS0uMTUxLS41OGEuODE0LjgxNCAwIDAwLS4zNTgtLjI3M3pNMTMgOC44Yy0uMDYuMDIyLS4xMTguMDQtLjE3NS4wNTdDMTIuMzIgOSAxMS43NjIgOSAxMS41MTMgOUgxMS41Yy0uMjU5IDAtLjY2LjAwNS0uOTkuMTQ3YS44MTQuODE0IDAgMDAtLjM1OS4yNzRjLS4wOC4xMTQtLjE1MS4yOTEtLjE1MS41NzlzLjA3LjQ2NS4xNTEuNThhLjgxMy44MTMgMCAwMC4zNTguMjczYy4zMzEuMTQyLjczMi4xNDcuOTkxLjE0Ny4yNTcgMCAuNjMtLjAwOC45NC0uMTg0LjI1NS0uMTQ2LjU2LS40NjMuNTYtMS4zMTZ2LS43MDF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxldHRlcmluZzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTGluZURhc2hlZCA9IGZ1bmN0aW9uIEV1aUljb25MaW5lRGFzaGVkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIuNzA3IDQuNzA3YTEgMSAwIDExLTEuNDE0LTEuNDE0bDItMmExIDEgMCAxMTEuNDE0IDEuNDE0bC0yIDJ6bS02LjQxNCA1YTEgMSAwIDAwMS40MTQgMGwyLTJhMSAxIDAgMTAtMS40MTQtMS40MTRsLTIgMmExIDEgMCAwMDAgMS40MTR6bS01IDVhMSAxIDAgMDAxLjQxNCAwbDItMmExIDEgMCAxMC0xLjQxNC0xLjQxNGwtMiAyYTEgMSAwIDAwMCAxLjQxNHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTGluZURhc2hlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTGluZURvdHRlZCA9IGZ1bmN0aW9uIEV1aUljb25MaW5lRG90dGVkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTMuNSAzYTEuNSAxLjUgMCAxMDAtMyAxLjUgMS41IDAgMDAwIDN6TTExIDUuNWExLjUgMS41IDAgMTEtMyAwIDEuNSAxLjUgMCAwMTMgMHpNNS41IDExYTEuNSAxLjUgMCAxMDAtMyAxLjUgMS41IDAgMDAwIDN6bS00IDRhMS41IDEuNSAwIDEwMC0zIDEuNSAxLjUgMCAwMDAgM3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTGluZURvdHRlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTGluZVNvbGlkID0gZnVuY3Rpb24gRXVpSWNvbkxpbmVTb2xpZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEuMjkzIDE0LjcwN2ExIDEgMCAwMDEuNDE0IDBsMTItMTJhMSAxIDAgMTAtMS40MTQtMS40MTRsLTEyIDEyYTEgMSAwIDAwMCAxLjQxNHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTGluZVNvbGlkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25MaW5rID0gZnVuY3Rpb24gRXVpSWNvbkxpbmsoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjY2IDMuODAzYS41LjUgMCAxMS0uNzA2LS43MDdMOS4yNjguNzhjMS4xODctMS4xODcgMy4yNDItMSA0LjU5Ni4zNTRzMS41NCAzLjQwOS4zNTQgNC41OTZsLTMuNTM2IDMuNTM2Yy0xLjE4NyAxLjE4Ny0zLjI0MiAxLTQuNTk2LS4zNTRhLjUuNSAwIDExLjcwNy0uNzA3Yy45OS45OSAyLjQxNyAxLjExOSAzLjE4Mi4zNTRsMy41MzYtMy41MzZjLjc2NS0uNzY1LjYzNS0yLjE5My0uMzU0LTMuMTgyLS45OS0uOTktMi40MTctMS4xMTktMy4xODItLjM1NEw3LjY2MSAzLjgwM3ptLS4zMiA3LjM5MmEuNS41IDAgMTEuNzA3LjcwN2wtMi4zMTUgMi4zMTRjLTEuMTg3IDEuMTg4LTMuMjQyIDEtNC41OTYtLjM1My0xLjM1NC0xLjM1NC0xLjU0LTMuNDEtLjM1My00LjU5Nkw0LjMxOCA1LjczYzEuMTg3LTEuMTg3IDMuMjQyLTEgNC41OTYuMzU0YS41LjUgMCAwMS0uNzA3LjcwN2MtLjk4OS0uOTktMi40MTYtMS4xMi0zLjE4Mi0uMzU0TDEuNDkgOS45NzRjLS43NjYuNzY1LS42MzYgMi4xOTMuMzUzIDMuMTgyLjk5Ljk4OSAyLjQxNyAxLjExOSAzLjE4Mi4zNTNsMi4zMTUtMi4zMTR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxpbms7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxpc3QgPSBmdW5jdGlvbiBFdWlJY29uTGlzdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIgNFYzaDJ2MUgyem00IDBWM2g4djFINnptMCAzVjZoOHYxSDZ6bTAgM1Y5aDh2MUg2ek0yIDdWNmgydjFIMnptMCAzVjloMnYxSDJ6bTQgM3YtMWg4djFINnptLTQgMHYtMWgydjFIMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTGlzdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTGlzdEFkZCA9IGZ1bmN0aW9uIEV1aUljb25MaXN0QWRkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTEgMTFIOXYxaDJ2Mmgxdi0yaDJ2LTFoLTJWOWgtMXYyek03Ljc1OCA5YTQuNSA0LjUgMCAxMS0uNTAyIDRINnYtMWgxLjAyN2E0LjU0OCA0LjU0OCAwIDAxLjIzLTJINlY5aDEuNzU4ek0yIDRWM2gydjFIMnptNCAwVjNoOHYxSDZ6bTAgM1Y2aDh2MUg2ek0yIDdWNmgydjFIMnptMCAzVjloMnYxSDJ6bTAgM3YtMWgydjFIMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTGlzdEFkZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9jayA9IGZ1bmN0aW9uIEV1aUljb25Mb2NrKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNCA1di0uOEM0IDEuODggNS43OSAwIDggMHM0IDEuODggNCA0LjJWNWgxLjE0M2MuNDczIDAgLjg1Ny40NDguODU3IDF2OWMwIC41NTItLjM4NCAxLS44NTcgMUgyLjg1N0MyLjM4NCAxNiAyIDE1LjU1MiAyIDE1VjZjMC0uNTUyLjM4NC0xIC44NTctMUg0ek0zIDE1aDEwVjZIM3Y5em01Ljk5OC0zLjcwNkw5LjUgMTIuNWgtM2wuNTAyLTEuMjA2QTEuNjQ0IDEuNjQ0IDAgMDE2LjUgMTAuMWMwLS44ODMuNjcyLTEuNiAxLjUtMS42czEuNS43MTcgMS41IDEuNmMwIC40NzUtLjE5NC45MDEtLjUwMiAxLjE5NHpNMTEgNC4zNkMxMSAyLjUwNCA5LjY1NyAxIDggMVM1IDIuNTA0IDUgNC4zNlY1aDZ2LS42NHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9jazsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9ja09wZW4gPSBmdW5jdGlvbiBFdWlJY29uTG9ja09wZW4oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMS4xNDMgNWMuNDczIDAgLjg1Ny40NDguODU3IDF2OWMwIC41NTItLjM4NCAxLS44NTcgMUguODU3Qy4zODQgMTYgMCAxNS41NTIgMCAxNVY2YzAtLjU1Mi4zODQtMSAuODU3LTFIOHYtLjhDOCAxLjg4IDkuNzkgMCAxMiAwczQgMS44OCA0IDQuMlY1aC0xdi0uNjRDMTUgMi41MDQgMTMuNjU3IDEgMTIgMVM5IDIuNTA0IDkgNC4zNlY1aDIuMTQzek0xIDE1aDEwVjZIMXY5em01Ljk5OC0zLjcwNkw3LjUgMTIuNWgtM2wuNTAyLTEuMjA2QTEuNjQ0IDEuNjQ0IDAgMDE0LjUgMTAuMWMwLS44ODMuNjcyLTEuNiAxLjUtMS42czEuNS43MTcgMS41IDEuNmMwIC40NzUtLjE5NC45MDEtLjUwMiAxLjE5NHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9ja09wZW47IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29BZXJvc3Bpa2UgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0Flcm9zcGlrZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGw6IFwibm9uZVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNDNDM3M0FcIixcbiAgICBkOiBcIk0wIDMxLjgwNmgzMlYuNzc2SDB6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRkZcIixcbiAgICBkOiBcIk0xOS40NDggMTIuNTA4bC04Ljk4NiAzLjg2IDguOTg2IDMuODgzdi03Ljc0M3ptLTExLjMwNCA0LjczbC0yLjA5NC0uODYzIDIuMDk0LS45MzEgMTcuNzQ5LTcuNzQxdjIuMDYybC00LjY1NCAxLjk5djkuMjVsNC42NTQgMi4wMXYxLjk2OEw4LjE0MyAxNy4yNHpcIlxuICB9KSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29BZXJvc3Bpa2U7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBodG1sSWRHZW5lcmF0b3IgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29BcGFjaGUgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0FwYWNoZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgZ2VuZXJhdGVJZCA9IGh0bWxJZEdlbmVyYXRvcignbG9nb19hcGFjaGUnKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJkZWZzXCIsIG51bGwsIF9fX0Vtb3Rpb25KU1goXCJsaW5lYXJHcmFkaWVudFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2EnKSxcbiAgICB4MTogXCIyMS45MDIlXCIsXG4gICAgeDI6IFwiMTQxLjg3OSVcIixcbiAgICB5MTogXCI2My45MDUlXCIsXG4gICAgeTI6IFwiMjAuMjEzJVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0Y2OTkyM1wiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjMxLjIzJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjRjc5QTIzXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiODMuODMlXCIsXG4gICAgc3RvcENvbG9yOiBcIiNFOTc4MjZcIlxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJsaW5lYXJHcmFkaWVudFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2InKSxcbiAgICB4MTogXCItMjE3LjY1MSVcIixcbiAgICB4MjogXCI3NC43NDMlXCIsXG4gICAgeTE6IFwiMTc3LjEyNyVcIixcbiAgICB5MjogXCIzNi42NjUlXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIzMi4zMyVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzlFMjA2NFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjYzLjAyJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjQzkyMDM3XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiNzUuMTQlXCIsXG4gICAgc3RvcENvbG9yOiBcIiNDRDIzMzVcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIxMDAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiNFOTc4MjZcIlxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJsaW5lYXJHcmFkaWVudFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2MnKSxcbiAgICB4MTogXCItODAuMDQ0JVwiLFxuICAgIHgyOiBcIjE0Ni4yNCVcIixcbiAgICB5MTogXCI3My41NzQlXCIsXG4gICAgeTI6IFwiMzEuNTM5JVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMzIuMzMlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM5RTIwNjRcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCI2My4wMiVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0M5MjAzN1wiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjc1LjE0JVwiLFxuICAgIHN0b3BDb2xvcjogXCIjQ0QyMzM1XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMTAwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjRTk3ODI2XCJcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwibGluZWFyR3JhZGllbnRcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdkJyksXG4gICAgeDE6IFwiLTE4LjMxNiVcIixcbiAgICB4MjogXCIxNjUuMDAyJVwiLFxuICAgIHkxOiBcIjUyLjQ5NyVcIixcbiAgICB5MjogXCI0MS42NTYlXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjMjgyNjYyXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiOS41NDglXCIsXG4gICAgc3RvcENvbG9yOiBcIiM2NjJFOERcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCI3OC44MiVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzlGMjA2NFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjk0Ljg3JVwiLFxuICAgIHN0b3BDb2xvcjogXCIjQ0QyMDMyXCJcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwibGluZWFyR3JhZGllbnRcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdlJyksXG4gICAgeDE6IFwiLTEwOS43MDElXCIsXG4gICAgeDI6IFwiNjQuNjE3JVwiLFxuICAgIHkxOiBcIjQ2My43MTUlXCIsXG4gICAgeTI6IFwiMTcuMTklXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIzMi4zMyVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzlFMjA2NFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjYzLjAyJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjQzkyMDM3XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiNzUuMTQlXCIsXG4gICAgc3RvcENvbG9yOiBcIiNDRDIzMzVcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIxMDAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiNFOTc4MjZcIlxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJsaW5lYXJHcmFkaWVudFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2YnKSxcbiAgICB4MTogXCItMzQuODglXCIsXG4gICAgeDI6IFwiMTEwLjU5OSVcIixcbiAgICB5MTogXCIxMzAuNTIyJVwiLFxuICAgIHkyOiBcIi05LjExOCVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjMyLjMzJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjOUUyMDY0XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiNjMuMDIlXCIsXG4gICAgc3RvcENvbG9yOiBcIiNDOTIwMzdcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCI3NS4xNCVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0NEMjMzNVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjEwMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0U5NzgyNlwiXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImxpbmVhckdyYWRpZW50XCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnZycpLFxuICAgIHgxOiBcIi0xMy42NzMlXCIsXG4gICAgeDI6IFwiMTE3Ljg1OCVcIixcbiAgICB5MTogXCIxOTIuNTY0JVwiLFxuICAgIHkyOiBcIi0xMzYuOTA2JVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzI4MjY2MlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjkuNTQ4JVwiLFxuICAgIHN0b3BDb2xvcjogXCIjNjYyRThEXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiNzguODIlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM5RjIwNjRcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCI5NC44NyVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0NEMjAzMlwiXG4gIH0pKSksIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdhJyksIFwiKVwiKSxcbiAgICBkOiBcIk0xMy42MjguMThjLS40OTguMjkzLTEuMzMyIDEuMTM0LTIuMzI4IDIuMzQ4di4wNzRsLjg3MSAxLjYxMy4wNDQuMDNjLjY0MS0uOTE0IDEuMjg5LTEuNzQyIDEuOTQ4LTIuNDQ2LjA1LS4wNTYuMDc1LS4wOC4wNzUtLjA4LS4wMjUuMDI0LS4wNS4wNTUtLjA3NS4wOC0uMjExLjIzNy0uODU5Ljk4NC0xLjgzIDIuNDc4bC4xMTIuMDI1czIuMjczLS4yMjQgMy4zNjgtLjQxbC4wNjItLjA1N2MuMzUtMS45NTUtLjM0Mi0yLjg1MS0uMzQyLTIuODUxUzE0LjY2MS0uNDIzIDEzLjYyOC4xOHpcIixcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDgpXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2InKSwgXCIpXCIpLFxuICAgIGQ6IFwiTTkuNTI1IDguNjk3Yy4yOC0uNTE2LjU2LTEuMDI3Ljg0LTEuNTE5LjI5My0uNTEuNTkyLTEuMDA4Ljg5Ny0xLjQ4OGEuMzk3LjM5NyAwIDAwLjA1LS4wODdjLjI5OS0uNDczLjU5OC0uOTIxLjkwMy0xLjM1N0wxMS4zIDIuNTJjLS4wNjkuMDgxLS4xMzcuMTY4LS4yMDYuMjU2LS4yNjEuMzMtLjUzNS42NzgtLjgxNSAxLjA1MmE1MS43ODMgNTEuNzgzIDAgMDAtMS44OTMgMi43MDhjLS4yNjEuNDA1LS41My44MTYtLjc5IDEuMjQ1bC0uMDMyLjA1VjcuOWwxLjE0IDIuMjYuMDUuMDE5Yy4yNTUtLjQ5OC41MS0uOTk2Ljc3MS0xLjQ4MnpcIixcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDgpXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2MnKSwgXCIpXCIpLFxuICAgIGQ6IFwiTTQuNTYzIDE5Ljc2Yy4yMDYtLjUzNS40MjQtMS4wNzcuNjQyLTEuNjI1LjIxMS0uNTIzLjQyMy0xLjA1Mi42NDctMS41OC4yMTgtLjUzLjQ0OC0xLjA2LjY3OS0xLjU5NS4yMzYtLjU0MS40NzMtMS4wODMuNzE2LTEuNjE4LjI0Mi0uNTMuNDg1LTEuMDU5LjczNC0xLjU4Mi4wODctLjE4Ni4xOC0uMzguMjc0LS41NjYuMTU2LS4zMjQuMzE4LS42NDguNDczLS45NjUuMDA3LS4wMTkuMDItLjAzMS4wMjUtLjA1TDcuNTY0IDcuODMybC0uMDU2LjA5M2MtLjI3NC40NTUtLjU1NC45MTUtLjgyMiAxLjM4OWE1NC41MzUgNTQuNTM1IDAgMDAtMS40NSAyLjcxNGMtLjA0NC4wODctLjA4MS4xNjgtLjEyNS4yNTVhMzIuMTUgMzIuMTUgMCAwMC0uNzAzIDEuNTQ0Yy0uMjM3LjU2LS40NDggMS4wOTYtLjYzNSAxLjYwNi0uMTI1LjMzNy0uMjMuNjU0LS4zMzYuOTY1LS4wODEuMjYyLS4xNjIuNTMtLjIzNy43OTEtLjE4LjYyMy0uMzMgMS4yMzktLjQ1NCAxLjg2MmwuMDE4LjA3NCAxLjE0IDIuMjY2LjAzNy4wMmMuMTU1LS40MjQuMzE3LS44NDguNDg1LTEuMjgzLjA0NC0uMTI1LjA5NC0uMjQzLjEzNy0uMzY4elwiLFxuICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoOClcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnZCcpLCBcIilcIiksXG4gICAgZDogXCJNMi43MzMgMTkuMTMyYTE4Ljg0IDE4Ljg0IDAgMDAtLjMxMSAyLjI1M2MwIC4wMjUtLjAwNi4wNS0uMDA2LjA4MS0uMzc0LS41OTgtMS4zNy0xLjE3Ny0xLjM3LTEuMTc3LjcxNiAxLjAzNCAxLjI1OCAyLjA2MSAxLjMzOCAzLjA3LS4zOC4wOC0uOTAyLS4wMzgtMS41MTItLjI1NS42MjguNTc4IDEuMTAyLjc0IDEuMjg4Ljc4NC0uNTc5LjAzNy0xLjE4My40MzYtMS43OTMuODkuODktLjM2IDEuNjA3LS41MDQgMi4xMjMtLjM5Mi0uODE1IDIuMzEtMS42MyA0Ljg2Mi0yLjQ1MyA3LjU2NC4yNS0uMDc1LjM5OS0uMjQzLjQ4Ni0uNDczLjE0My0uNDkyIDEuMTE0LTMuNzA0IDIuNjI3LTcuOTMxLjA0NC0uMTE5LjA4Ny0uMjQzLjEzLS4zNjIuMDEzLS4wMy4wMjYtLjA2OC4wMzgtLjEuMTYyLS40NDEuMzI0LS44OTYuNDk4LTEuMzU2LjAzOC0uMTA2LjA4MS0uMjEyLjExOS0uMzE4di0uMDA2bC0xLjE5LTIuMzUzYzAgLjAzLS4wMDYuMDU2LS4wMTIuMDh6XCIsXG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSg4KVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdlJyksIFwiKVwiKSxcbiAgICBkOiBcIk0xMi4zMzMgNC4yODNjLS4yNjguNDExLS41Ni44NzgtLjg3OCAxLjQwNy0uMDE4LjAyNS0uMDMuMDU2LS4wNS4wODFhNjIuNTM4IDYyLjUzOCAwIDAwLTEuNjg3IDMuMDVjLS4yNDkuNDgtLjUwNC45ODQtLjc2NSAxLjUyNmwuMDU2LjAyNSAyLjg5NS0uMzExLjA2OC0uMDVjLjg3OC0uNDA1IDEuMjctLjc3MiAxLjY1LTEuMzAxLjEtLjE0My4yMDUtLjMuMzA1LS40NTUuMzExLS40ODUuNjE2LTEuMDE1Ljg4NC0xLjU0NC4yNjEtLjUxLjQ5Mi0xLjAyLjY3Mi0xLjQ3NWE2LjU2IDYuNTYgMCAwMC4zOTgtMS4zOTVjLTEuMTcuMjA2LTIuNjA4LjM5OS0zLjU0OC40NDJ6XCIsXG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSg4KVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdmJyksIFwiKVwiKSxcbiAgICBkOiBcIk04Ljg0IDEwLjU5Yy0uMS4yMTItLjIwNS40My0uMzEuNjQ3LS4xMTMuMjM3LS4yMzEuNDg2LS4zNDMuNzM1LS4wNTYuMTI0LS4xMTkuMjU1LS4xNzUuMzgtLjE4LjM4Ni0uMzU0Ljc4NC0uNTQxIDEuMTk1YTEwNy4wMzUgMTA3LjAzNSAwIDAwLTEuMzU3IDMuMTk0Yy0uMjE4LjUyOS0uNDM2IDEuMDc3LS42NTQgMS42MzctLjIuNTA0LS4zOTkgMS4wMTUtLjU5OCAxLjU1LS4wMTIuMDI1LS4wMTguMDUtLjAzLjA3NS0uMi41My0uMzk0IDEuMDY4LS42IDEuNjIyLS4wMDYuMDEyLS4wMTcuMDQ1LS4wMjMuMDU3bC4wNDMuMDEuODY2LS4wOTQuMDQ4LS4wMmMtLjAxOC0uMDA2LS4wMy0uMDMtLjA0OC0uMDM3IDEuMTQ1LS4xNDMgMi42Ny0xLjAwMiAzLjY2LTIuMDYuNDU1LS40ODYuODY2LTEuMDY1IDEuMjUyLTEuNzM4LjI4Ni0uNTA0LjU0Ny0xLjA1OC44MDMtMS42NzUuMjI0LS41MzUuNDM1LTEuMTIuNjQtMS43NDlhMy40NTcgMy40NTcgMCAwMS0uODk2LjMxMSA4Ljk3NyA4Ljk3NyAwIDAxLS4xOC4wMzhjLS4wNjIuMDEyLS4xMjUuMDE4LS4xOC4wMyAxLjA3LS40MSAxLjc0My0xLjIwNyAyLjIzNC0yLjE3OC0uMjguMTkzLS43NC40NDItMS4yODguNTY2YTIuNTIgMi41MiAwIDAxLS4yMy4wNDRjLS4wMiAwLS4wMzguMDA2LS4wNTcuMDA2LjM3NC0uMTU1LjY4NS0uMzMuOTU5LS41MzUuMDU2LS4wNDQuMTEyLS4wODcuMTY4LS4xMzcuMDgxLS4wNzUuMTYyLS4xNS4yMzctLjIyNC4wNS0uMDUuMDkzLS4xLjE0My0uMTU2LjEwNi0uMTI0LjIwNS0uMjYxLjI5OS0uNDEuMDMtLjA0NC4wNTYtLjA5NC4wODctLjEzOC4wMzctLjA2OC4wNjgtLjEzNy4xLS4yMDUuMTQ5LS4zLjI2Ny0uNTY3LjM2LS44MDMuMDUtLjExOS4wODgtLjIyNC4xMjUtLjMzLjAxMy0uMDM4LjAyNS0uMDgxLjA0NC0uMTE5LjAzNy0uMTEyLjA2OC0uMjExLjA5My0uMzA1LjAzNy0uMTMuMDU2LS4yMzYuMDY5LS4zMTFhMS4wNzcgMS4wNzcgMCAwMS0uMTI1LjA4N2MtLjMyNC4xOTMtLjg3OC4zNjgtMS4zMjYuNDQ4bC44ODQtLjEtLjg4NC4xYy0uMDYyLjAxMy0uMTA2LjAyLS4xNTYuMDMyLjAwNC0uMDA1LS45OTQuMTAxLTIuOTk1LjMxNmEyLjMxMyAyLjMxMyAwIDAwLS4xMTguMjQ0elwiLFxuICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoOClcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnZycpLCBcIilcIiksXG4gICAgZDogXCJNNC4xMTUgMjEuOTE0Yy0uMTU1LjQzLS4zMTcuODcyLS40NzMgMS4zMiAwIC4wMDYtLjAwNi4wMTMtLjAwNi4wMTktLjAyNS4wNjItLjA0NC4xMjQtLjA2OS4xOTMtLjEwNi4zMDUtLjE5OS41NzMtLjQxIDEuMTk1LjM0OC4xNjIuNjI4LjU4Ljg5NiAxLjA1OWExLjg3NiAxLjg3NiAwIDAwLS42MjMtMS4zMTRjMS43MjUuMDc1IDMuMjEzLS4zNjEgMy45NzktMS42MTkuMDY4LS4xMTIuMTMtLjIzLjE4Ni0uMzU1LS4zNDguNDQyLS43ODQuNjMtMS41OTMuNTg2aC0uMDA3LjAwN2MxLjIwMS0uNTM2IDEuNzk5LTEuMDUyIDIuMzM0LTEuOTA1LjEyNS0uMjA2LjI1LS40MjQuMzc0LS42NjctMS4wNTIgMS4wNzgtMi4yNjYgMS4zODMtMy41NDMgMS4xNTJsLS45NTguMTA2Yy0uMDMyLjA2OS0uMDYzLjE1LS4wOTQuMjN6XCIsXG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSg4KVwiXG4gIH0pKSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0FwYWNoZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0FwcFNlYXJjaCA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvQXBwU2VhcmNoKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDA4MEQ1XCIsXG4gICAgZDogXCJNMTkuNS45MzhhNy4wMDIgNy4wMDIgMCAwMC03IDBsLTggNC42MTlBNyA3IDAgMDAxIDExLjYydjkuMjM3YTcgNyAwIDAwMy41IDYuMDYybDcuNSA0LjMzVjE3Ljk3OWE3IDcgMCAwMTMuNS02LjA2MkwyNyA1LjI3NiAxOS41LjkzOXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsTmVnYXRpdmVcIixcbiAgICBkOiBcIk0xOS41LjkzOGE3LjAwMiA3LjAwMiAwIDAwLTcgMEw1IDUuMjc3bDExIDYuMzUgMTEtNi4zNS03LjUtNC4zNHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZBNzQ0RVwiLFxuICAgIGQ6IFwiTTI4LjQzNSA3Ljc2bC0xMC4wMjYgNS43OWE2Ljk5NCA2Ljk5NCAwIDAxMS41OSA0LjQyOHYxMy4yN2w3LjUtNC4zM2E3IDcgMCAwMDMuNS02LjA2MXYtOS4yMzhhNi45OTIgNi45OTIgMCAwMC0xLjU4Ni00LjQyMmwtLjk3OC41NjR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29BcHBTZWFyY2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29Bd3MgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0F3cyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxOZWdhdGl2ZVwiLFxuICAgIGQ6IFwiTTkuMDE5IDEzLjg3OGMwIC4zOS4wNDIuNzA1LjExNy45MzYuMDg1LjIzMi4xOTEuNDg0LjM0Ljc1OGEuNDU0LjQ1NCAwIDAxLjA3NS4yNDJjMCAuMTA1LS4wNjQuMjEtLjIwMi4zMTVsLS42Ny40NDJhLjUxNC41MTQgMCAwMS0uMjc3LjA5NWMtLjEwNyAwLS4yMTMtLjA1My0uMzItLjE0OGEzLjI1OCAzLjI1OCAwIDAxLS4zODMtLjQ5NCA4LjEwOSA4LjEwOSAwIDAxLS4zMy0uNjJjLS44My45NjctMS44NzMgMS40NS0zLjEyOCAxLjQ1LS44OTQgMC0xLjYwNy0uMjUyLTIuMTI5LS43NTYtLjUyMS0uNTA1LS43ODctMS4xNzgtLjc4Ny0yLjAyIDAtLjg5NC4zMTktMS42Mi45NjgtMi4xNjYuNjUtLjU0NyAxLjUxMS0uODIgMi42MDctLjgyLjM2MiAwIC43MzUuMDMgMS4xMjguMDgzLjM5NC4wNTMuNzk5LjEzNyAxLjIyNC4yMzJ2LS43NjhjMC0uOC0uMTctMS4zNTctLjUtMS42ODMtLjM0LS4zMjYtLjkxNS0uNDg0LTEuNzM1LS40ODQtLjM3MiAwLS43NTUuMDQzLTEuMTQ5LjEzNy0uMzk0LjA5NS0uNzc3LjIxLTEuMTUuMzU4LS4xNy4wNzMtLjI5Ny4xMTUtLjM3Mi4xMzZhLjY2LjY2IDAgMDEtLjE3LjAzMmMtLjE0OSAwLS4yMjMtLjEwNS0uMjIzLS4zMjZ2LS41MTVjMC0uMTY5LjAyLS4yOTUuMDc0LS4zNjhhLjc5Ni43OTYgMCAwMS4yOTgtLjIyMWMuMzczLS4xOS44Mi0uMzQ3IDEuMzQtLjQ3NGE2LjUyNCA2LjUyNCAwIDAxMS42NjEtLjJjMS4yNjYgMCAyLjE5Mi4yODUgMi43ODguODUyLjU4Ni41NjguODg0IDEuNDMuODg0IDIuNTg4djMuNDA3aC4wMnptLTQuMzIgMS42Yy4zNSAwIC43MTItLjA2NCAxLjA5NS0uMTlhMi4zNzMgMi4zNzMgMCAwMDEuMDExLS42NzNjLjE3LS4yLjI5OC0uNDIxLjM2Mi0uNjczLjA2NC0uMjUzLjEwNy0uNTU4LjEwNy0uOTE2di0uNDQxYTguOTgyIDguOTgyIDAgMDAtLjk4LS4xNzkgOC4xMTMgOC4xMTMgMCAwMC0xLS4wNjNjLS43MTMgMC0xLjIzNC4xMzctMS41ODYuNDItLjM1LjI4NS0uNTIxLjY4NC0uNTIxIDEuMjEgMCAuNDk0LjEyOC44NjIuMzk0IDEuMTE1LjI1NS4yNjMuNjI4LjM5IDEuMTE3LjM5em04LjU0NSAxLjEzNWMtLjE5MiAwLS4zMi0uMDMyLS40MDUtLjEwNS0uMDg1LS4wNjMtLjE2LS4yMS0uMjIzLS40MWwtMi41MDEtOC4xM2MtLjA2NC0uMjEtLjA5Ni0uMzQ3LS4wOTYtLjQyMSAwLS4xNjguMDg1LS4yNjMuMjU2LS4yNjNoMS4wNDNjLjIwMiAwIC4zNC4wMzIuNDE1LjEwNS4wODUuMDYzLjE0OS4yMS4yMTIuNDFsMS43ODggNi45NjMgMS42Ni02Ljk2M2MuMDU0LS4yMS4xMTctLjM0Ny4yMDMtLjQxLjA4NS0uMDYzLjIzNC0uMTA1LjQyNS0uMTA1aC44NTJjLjIwMiAwIC4zNC4wMzIuNDI1LjEwNS4wODUuMDYzLjE2LjIxLjIwMy40MWwxLjY4MSA3LjA0NyAxLjg0MS03LjA0N2MuMDY0LS4yMS4xMzgtLjM0Ny4yMTMtLjQxLjA4NS0uMDYzLjIyMy0uMTA1LjQxNS0uMTA1aC45OWMuMTcgMCAuMjY2LjA4NC4yNjYuMjYzIDAgLjA1Mi0uMDExLjEwNS0uMDIyLjE2OC0uMDEuMDYzLS4wMzIuMTQ3LS4wNzQuMjYzbC0yLjU2NSA4LjEzYy0uMDY0LjIxLS4xMzguMzQ3LS4yMjMuNDEtLjA4NS4wNjMtLjIyNC4xMDUtLjQwNS4xMDVoLS45MTVjLS4yMDIgMC0uMzQtLjAzMS0uNDI2LS4xMDUtLjA4NS0uMDczLS4xNi0uMjEtLjIwMi0uNDJsLTEuNjUtNi43ODQtMS42MzggNi43NzNjLS4wNTMuMjEtLjExNy4zNDctLjIwMi40Mi0uMDg2LjA3NC0uMjM1LjEwNi0uNDI2LjEwNmgtLjkxNXptMTMuNjc1LjI4NGE3LjEyMiA3LjEyMiAwIDAxLTEuNjQtLjE5Yy0uNTMxLS4xMjYtLjk0Ni0uMjYyLTEuMjIzLS40Mi0uMTctLjA5NS0uMjg3LS4yLS4zMy0uMjk1YS43MzUuNzM1IDAgMDEtLjA2NC0uMjk0di0uNTM2YzAtLjIyMS4wODUtLjMyNy4yNDUtLjMyN2EuNjEuNjEgMCAwMS4xOTIuMDMyYy4wNjMuMDIxLjE2LjA2My4yNjYuMTA1LjM2MS4xNTguNzU1LjI4NCAxLjE3LjM2OC40MjYuMDg0Ljg0LjEyNyAxLjI2Ny4xMjcuNjcgMCAxLjE5Mi0uMTE2IDEuNTUzLS4zNDhhMS4xMyAxLjEzIDAgMDAuNTU0LS45OTljMC0uMjk0LS4wOTYtLjUzNi0uMjg4LS43MzYtLjE5MS0uMi0uNTUzLS4zNzktMS4wNzQtLjU0N2wtMS41NDQtLjQ3M2MtLjc3Ni0uMjQyLTEuMzUxLS42LTEuNzAyLTEuMDczYTIuNDg3IDIuNDg3IDAgMDEtLjUzMi0xLjUyNWMwLS40NDIuMDk1LS44My4yODctMS4xNjcuMTkyLS4zMzcuNDQ3LS42MzEuNzY2LS44NjMuMzItLjI0Mi42ODEtLjQyIDEuMTA3LS41NDdhNC42OSA0LjY5IDAgMDExLjM0LS4xNzhjLjIzNSAwIC40OC4wMS43MTQuMDQyLjI0NS4wMzEuNDY4LjA3My42OTIuMTE1LjIxMi4wNTMuNDE1LjEwNS42MDYuMTY5LjE5Mi4wNjMuMzQuMTI2LjQ0Ny4xODlhLjkxOC45MTggMCAwMS4zMi4yNjNjLjA2My4wODQuMDk1LjIuMDk1LjM0N3YuNDk0YzAgLjIyMS0uMDg1LjMzNy0uMjQ1LjMzNy0uMDg1IDAtLjIyMy0uMDQyLS40MDQtLjEyNi0uNjA3LS4yNzQtMS4yODgtLjQxLTIuMDQzLS40MS0uNjA3IDAtMS4wODYuMDk0LTEuNDE2LjI5NC0uMzMuMi0uNS41MDUtLjUuOTM2IDAgLjI5NC4xMDcuNTQ3LjMyLjc0Ny4yMTIuMi42MDYuNCAxLjE3LjU3OGwxLjUxMS40NzNjLjc2Ni4yNDIgMS4zMi41NzkgMS42NSAxLjAxLjMzLjQzMS40OS45MjYuNDkgMS40NzMgMCAuNDUyLS4wOTYuODYyLS4yNzcgMS4yMmEyLjgzNiAyLjgzNiAwIDAxLS43NzcuOTI1Yy0uMzMuMjYzLS43MjQuNDUyLTEuMTgyLjU5LS40NzguMTQ2LS45NzkuMjItMS41MjEuMjJ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIiNGOTBcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjguOTMgMjIuMDA5Yy0zLjUwMSAyLjU1Ni04LjU4OCAzLjkxMi0xMi45NjIgMy45MTItNi4xMyAwLTExLjY1My0yLjI0LTE1LjgyNS01Ljk2My0uMzMtLjI5NS0uMDMyLS42OTQuMzYyLS40NjMgNC41MTIgMi41ODcgMTAuMDc4IDQuMTU1IDE1LjgzNiA0LjE1NSAzLjg4NCAwIDguMTUxLS44IDEyLjA3OC0yLjQ0LjU4Ni0uMjYzIDEuMDg2LjM3OC41MTEuNzk5elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMzAuMzg4IDIwLjM2OGMtLjQ0Ny0uNTY4LTIuOTU4LS4yNzMtNC4wOTctLjEzNy0uMzQuMDQyLS4zOTQtLjI1Mi0uMDg1LS40NzMgMi0xLjM4OCA1LjI4OS0uOTg5IDUuNjcyLS41MjYuMzgzLjQ3NC0uMTA3IDMuNzIzLTEuOTggNS4yOC0uMjg3LjI0Mi0uNTY0LjExNi0uNDM2LS4yLjQyNi0xLjA0MSAxLjM3My0zLjM4Ni45MjYtMy45NDR6XCJcbiAgfSkpKSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0F3czsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0F3c01vbm8gPSBmdW5jdGlvbiBFdWlJY29uTG9nb0F3c01vbm8oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcIm5vbnplcm9cIixcbiAgICBkOiBcIk05LjAxOSAxMy44NzhjMCAuMzkuMDQyLjcwNS4xMTcuOTM2LjA4NS4yMzIuMTkxLjQ4NC4zNC43NThhLjQ1NC40NTQgMCAwMS4wNzUuMjQyYzAgLjEwNS0uMDY0LjIxLS4yMDIuMzE1bC0uNjcuNDQyYS41MTQuNTE0IDAgMDEtLjI3Ny4wOTVjLS4xMDcgMC0uMjEzLS4wNTMtLjMyLS4xNDhhMy4yNTggMy4yNTggMCAwMS0uMzgzLS40OTQgOC4xMDkgOC4xMDkgMCAwMS0uMzMtLjYyYy0uODMuOTY3LTEuODczIDEuNDUtMy4xMjggMS40NS0uODk0IDAtMS42MDctLjI1Mi0yLjEyOS0uNzU2LS41MjEtLjUwNS0uNzg3LTEuMTc4LS43ODctMi4wMiAwLS44OTQuMzE5LTEuNjIuOTY4LTIuMTY2LjY1LS41NDcgMS41MTEtLjgyIDIuNjA3LS44Mi4zNjIgMCAuNzM1LjAzIDEuMTI4LjA4My4zOTQuMDUzLjc5OS4xMzcgMS4yMjQuMjMydi0uNzY4YzAtLjgtLjE3LTEuMzU3LS41LTEuNjgzLS4zNC0uMzI2LS45MTUtLjQ4NC0xLjczNS0uNDg0LS4zNzIgMC0uNzU1LjA0My0xLjE0OS4xMzctLjM5NC4wOTUtLjc3Ny4yMS0xLjE1LjM1OC0uMTcuMDczLS4yOTcuMTE1LS4zNzIuMTM2YS42Ni42NiAwIDAxLS4xNy4wMzJjLS4xNDkgMC0uMjIzLS4xMDUtLjIyMy0uMzI2di0uNTE1YzAtLjE2OS4wMi0uMjk1LjA3NC0uMzY4YS43OTYuNzk2IDAgMDEuMjk4LS4yMjFjLjM3My0uMTkuODItLjM0NyAxLjM0LS40NzRhNi41MjQgNi41MjQgMCAwMTEuNjYxLS4yYzEuMjY2IDAgMi4xOTIuMjg1IDIuNzg4Ljg1Mi41ODYuNTY4Ljg4NCAxLjQzLjg4NCAyLjU4OHYzLjQwN2guMDJ6bS00LjMyIDEuNmMuMzUgMCAuNzEyLS4wNjQgMS4wOTUtLjE5YTIuMzczIDIuMzczIDAgMDAxLjAxMS0uNjczYy4xNy0uMi4yOTgtLjQyMS4zNjItLjY3My4wNjQtLjI1My4xMDctLjU1OC4xMDctLjkxNnYtLjQ0MWE4Ljk4MiA4Ljk4MiAwIDAwLS45OC0uMTc5IDguMTEzIDguMTEzIDAgMDAtMS0uMDYzYy0uNzEzIDAtMS4yMzQuMTM3LTEuNTg2LjQyLS4zNS4yODUtLjUyMS42ODQtLjUyMSAxLjIxIDAgLjQ5NC4xMjguODYyLjM5NCAxLjExNS4yNTUuMjYzLjYyOC4zOSAxLjExNy4zOXptOC41NDUgMS4xMzVjLS4xOTIgMC0uMzItLjAzMi0uNDA1LS4xMDUtLjA4NS0uMDYzLS4xNi0uMjEtLjIyMy0uNDFsLTIuNTAxLTguMTNjLS4wNjQtLjIxLS4wOTYtLjM0Ny0uMDk2LS40MjEgMC0uMTY4LjA4NS0uMjYzLjI1Ni0uMjYzaDEuMDQzYy4yMDIgMCAuMzQuMDMyLjQxNS4xMDUuMDg1LjA2My4xNDkuMjEuMjEyLjQxbDEuNzg4IDYuOTYzIDEuNjYtNi45NjNjLjA1NC0uMjEuMTE3LS4zNDcuMjAzLS40MS4wODUtLjA2My4yMzQtLjEwNS40MjUtLjEwNWguODUyYy4yMDIgMCAuMzQuMDMyLjQyNS4xMDUuMDg1LjA2My4xNi4yMS4yMDMuNDFsMS42ODEgNy4wNDcgMS44NDEtNy4wNDdjLjA2NC0uMjEuMTM4LS4zNDcuMjEzLS40MS4wODUtLjA2My4yMjMtLjEwNS40MTUtLjEwNWguOTljLjE3IDAgLjI2Ni4wODQuMjY2LjI2MyAwIC4wNTItLjAxMS4xMDUtLjAyMi4xNjgtLjAxLjA2My0uMDMyLjE0Ny0uMDc0LjI2M2wtMi41NjUgOC4xM2MtLjA2NC4yMS0uMTM4LjM0Ny0uMjIzLjQxLS4wODUuMDYzLS4yMjQuMTA1LS40MDUuMTA1aC0uOTE1Yy0uMjAyIDAtLjM0LS4wMzEtLjQyNi0uMTA1LS4wODUtLjA3My0uMTYtLjIxLS4yMDItLjQybC0xLjY1LTYuNzg0LTEuNjM4IDYuNzczYy0uMDUzLjIxLS4xMTcuMzQ3LS4yMDIuNDItLjA4Ni4wNzQtLjIzNS4xMDYtLjQyNi4xMDZoLS45MTV6bTEzLjY3NS4yODRhNy4xMjIgNy4xMjIgMCAwMS0xLjY0LS4xOWMtLjUzMS0uMTI2LS45NDYtLjI2Mi0xLjIyMy0uNDItLjE3LS4wOTUtLjI4Ny0uMi0uMzMtLjI5NWEuNzM1LjczNSAwIDAxLS4wNjQtLjI5NHYtLjUzNmMwLS4yMjEuMDg1LS4zMjcuMjQ1LS4zMjdhLjYxLjYxIDAgMDEuMTkyLjAzMmMuMDYzLjAyMS4xNi4wNjMuMjY2LjEwNS4zNjEuMTU4Ljc1NS4yODQgMS4xNy4zNjguNDI2LjA4NC44NC4xMjcgMS4yNjcuMTI3LjY3IDAgMS4xOTItLjExNiAxLjU1My0uMzQ4YTEuMTMgMS4xMyAwIDAwLjU1NC0uOTk5YzAtLjI5NC0uMDk2LS41MzYtLjI4OC0uNzM2LS4xOTEtLjItLjU1My0uMzc5LTEuMDc0LS41NDdsLTEuNTQ0LS40NzNjLS43NzYtLjI0Mi0xLjM1MS0uNi0xLjcwMi0xLjA3M2EyLjQ4NyAyLjQ4NyAwIDAxLS41MzItMS41MjVjMC0uNDQyLjA5NS0uODMuMjg3LTEuMTY3LjE5Mi0uMzM3LjQ0Ny0uNjMxLjc2Ni0uODYzLjMyLS4yNDIuNjgxLS40MiAxLjEwNy0uNTQ3YTQuNjkgNC42OSAwIDAxMS4zNC0uMTc4Yy4yMzUgMCAuNDguMDEuNzE0LjA0Mi4yNDUuMDMxLjQ2OC4wNzMuNjkyLjExNS4yMTIuMDUzLjQxNS4xMDUuNjA2LjE2OS4xOTIuMDYzLjM0LjEyNi40NDcuMTg5YS45MTguOTE4IDAgMDEuMzIuMjYzYy4wNjMuMDg0LjA5NS4yLjA5NS4zNDd2LjQ5NGMwIC4yMjEtLjA4NS4zMzctLjI0NS4zMzctLjA4NSAwLS4yMjMtLjA0Mi0uNDA0LS4xMjYtLjYwNy0uMjc0LTEuMjg4LS40MS0yLjA0My0uNDEtLjYwNyAwLTEuMDg2LjA5NC0xLjQxNi4yOTQtLjMzLjItLjUuNTA1LS41LjkzNiAwIC4yOTQuMTA3LjU0Ny4zMi43NDcuMjEyLjIuNjA2LjQgMS4xNy41NzhsMS41MTEuNDczYy43NjYuMjQyIDEuMzIuNTc5IDEuNjUgMS4wMS4zMy40MzEuNDkuOTI2LjQ5IDEuNDczIDAgLjQ1Mi0uMDk2Ljg2Mi0uMjc3IDEuMjJhMi44MzYgMi44MzYgMCAwMS0uNzc3LjkyNWMtLjMzLjI2My0uNzI0LjQ1Mi0xLjE4Mi41OS0uNDc4LjE0Ni0uOTc5LjIyLTEuNTIxLjIyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjguOTMgMjIuMDA5Yy0zLjUwMSAyLjU1Ni04LjU4OCAzLjkxMi0xMi45NjIgMy45MTItNi4xMyAwLTExLjY1My0yLjI0LTE1LjgyNS01Ljk2My0uMzMtLjI5NS0uMDMyLS42OTQuMzYyLS40NjMgNC41MTIgMi41ODcgMTAuMDc4IDQuMTU1IDE1LjgzNiA0LjE1NSAzLjg4NCAwIDguMTUxLS44IDEyLjA3OC0yLjQ0LjU4Ni0uMjYzIDEuMDg2LjM3OC41MTEuNzk5elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMzAuMzg4IDIwLjM2OGMtLjQ0Ny0uNTY4LTIuOTU4LS4yNzMtNC4wOTctLjEzNy0uMzQuMDQyLS4zOTQtLjI1Mi0uMDg1LS40NzMgMi0xLjM4OCA1LjI4OS0uOTg5IDUuNjcyLS41MjYuMzgzLjQ3NC0uMTA3IDMuNzIzLTEuOTggNS4yOC0uMjg3LjI0Mi0uNTY0LjExNi0uNDM2LS4yLjQyNi0xLjA0MSAxLjM3My0zLjM4Ni45MjYtMy45NDR6XCJcbiAgfSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvQXdzTW9ubzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0F6dXJlID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29BenVyZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwNzJDNlwiLFxuICAgIGQ6IFwiTTE3LjQ0OCA0bC05LjQxNCA4LjAxTDAgMjYuMTU3aDcuMjQzTDE3LjQ0OCA0ek0xOC43IDUuODc0bC00LjAxOCAxMS4xMSA3LjcwNCA5LjQ5N0w3LjQ0MSAyOWgyNC40OTRMMTguNyA1Ljg3NHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0F6dXJlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvQXp1cmVNb25vID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29BenVyZU1vbm8oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNy40NDggNGwtOS40MTQgOC4wMUwwIDI2LjE1N2g3LjI0M0wxNy40NDggNHpNMTguNyA1Ljg3NGwtNC4wMTggMTEuMTEgNy43MDQgOS40OTdMNy40NDEgMjloMjQuNDk0TDE4LjcgNS44NzR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29BenVyZU1vbm87IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29CZWF0cyA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvQmVhdHMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMDgwRDVcIixcbiAgICBkOiBcIk0xNSAyMEg0VjBoMTFjNS41MjIgMCAxMCA0LjQ3OCAxMCAxMHMtNC40NzggMTAtMTAgMTBcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwQzJCM1wiLFxuICAgIGQ6IFwiTTI2LjcwMiAxNS42MjRDMjQuNiAxOS45NzkgMjAuMTUyIDIzIDE1IDIzSDR2OWgxNWM1LjUyMiAwIDEwLTQuNDc4IDEwLTEwYTkuOTUyIDkuOTUyIDAgMDAtMi4yOTgtNi4zNzZcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsTmVnYXRpdmVcIixcbiAgICBkOiBcIk0yNC4zMzggMTMuNTU0QTkuOTQyIDkuOTQyIDAgMDAxOSAxMkg0djhoMTFjNC4yNyAwIDcuOTAzLTIuNjggOS4zMzgtNi40NDZcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0JlYXRzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvQnVzaW5lc3NBbmFseXRpY3MgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0J1c2luZXNzQW5hbHl0aWNzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMEJGQjNcIixcbiAgICBkOiBcIk0wIDIyYzAgNS41MjIgNC40NzggMTAgMTAgMTBWMTJDNC40NzggMTIgMCAxNi40NzggMCAyMlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxOZWdhdGl2ZVwiLFxuICAgIGQ6IFwiTTEwIDEydjEwaDEwYzAtNS41MjItNC40NzgtMTAtMTAtMTBcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0YwNEU5OFwiLFxuICAgIGQ6IFwiTTEwIDB2OWM3LjE2OCAwIDEzIDUuODMyIDEzIDEzaDlDMzIgOS44NSAyMi4xNSAwIDEwIDBcIlxuICB9KSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29CdXNpbmVzc0FuYWx5dGljczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0NlcGggPSBmdW5jdGlvbiBFdWlJY29uTG9nb0NlcGgoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yNS40NzEgMjcuNTZjLTEuMDYtLjU2Ny0xLjY3Ni0xLjIwNi0xLjgxMS0xLjkwMi0uMTMtLjY3My4xNy0xLjQyMS45MTgtMi4yODhhMTEuMjkgMTEuMjkgMCAwMDIuNzczLTcuNDJBMTEuMzI0IDExLjMyNCAwIDAwMTYuMDQyIDQuNjRsLS4wNS4wMDFoLS4wNUExMS4zMjQgMTEuMzI0IDAgMDA0LjYzMiAxNS45NDlhMTEuMjkxIDExLjI5MSAwIDAwMi43NzQgNy40MjJjLjc1My44NzIgMS4wNDcgMS41OTEuOTI4IDIuMjU3LS4xMy42OTQtLjc0IDEuMzQyLTEuODE3IDEuOTMtMS42NTctMS4zNzUtMy4xMTYtMy4yMTItNC4wMS01LjA1NmExNC45NDMgMTQuOTQzIDAgMDEtMS4xMTctMy4xMzlBMTQuOTk3IDE0Ljk5NyAwIDAxMSAxNS45NWExNC45MDEgMTQuOTAxIDAgMDE0LjM3OC0xMC41NyAxNC45MjQgMTQuOTI0IDAgMDE0Ljc1Mi0zLjIwNEMxMS45NyAxLjM5NSAxMy45NS45OTYgMTUuOTQ4IDFoLjEwMWExNC44ODggMTQuODg4IDAgMDExMC41NyA0LjM3OCAxNC45MTIgMTQuOTEyIDAgMDEzLjk4MiAxMy45ODUgMTQuODcxIDE0Ljg3MSAwIDAxLTEuMTE4IDMuMTRjLS45IDEuODQzLTIuMzU4IDMuNjgxLTQuMDEgNS4wNTdoLS4wMDN6bS01LjUyMyAyLjc5OGMtLjE3My0uMTEtLjc2Ny0uNTUtMS4zNDUtMS4zNTNhNi4xMjIgNi4xMjIgMCAwMS0xLjE3NC0zLjczOCA4LjI2IDguMjYgMCAwMS42MTEtMi45NjQgOC40MiA4LjQyIDAgMDExLjYyNy0yLjU0bC4wMDQtLjAwOC4xNTQtLjE3OGMuMjYzLS4zMDUuNTM2LS42MjIuNzUzLS45OS4yNjgtLjQ1NC40NjItLjkzMS41NzgtMS40Mi4xNzgtLjc1OC4xODgtMS41NDcuMDI5LTIuMzFhNS4zIDUuMyAwIDAwLS44NTgtMS45NTYgNS4yNjQgNS4yNjQgMCAwMC00LjI5LTIuMjE3aC0uMTA4YTUuMjUgNS4yNSAwIDAwLTQuMjkgMi4yMTYgNS4zMSA1LjMxIDAgMDAtLjg1NiAxLjk1NmMtLjE2Ljc2My0uMTUgMS41NTIuMDMgMi4zMTEuMTE1LjQ4OC4zMS45NjUuNTc2IDEuNDE5LjIxOS4zNy40OS42ODQuNzUzLjk5bC4xNTUuMTc5LjAwMy4wMDdhOC4zODQgOC4zODQgMCAwMTEuNjI4IDIuNTQgOC4yNCA4LjI0IDAgMDEuNjEgMi45NjQgNi4xMjMgNi4xMjMgMCAwMS0xLjE3MyAzLjczOGMtLjU4Ljc5NS0xLjE3NCAxLjI0My0xLjM0NiAxLjM1MmwtLjg2Ny0uMjZhMTUuNDM0IDE1LjQzNCAwIDAxLTIuNDktMS4wOTggNC4yNDUgNC4yNDUgMCAwMDIuMjM0LTMuNzM2YzAtMS4wMzQtLjQwMy0yLjAyOC0xLjE5NS0yLjk1bC0uMDM0LS4wMzQtLjIzNy0uMjYtLjYzNi0uNzQ2YTguOTI0IDguOTI0IDAgMDEtMS41MjUtMy4yNiA4Ljk4MyA4Ljk4MyAwIDAxLS4wNS0zLjkwNSA4LjkwNiA4LjkwNiAwIDAxMS40Ni0zLjMxM0E4Ljk5MyA4Ljk5MyAwIDAxMTEuMjMgOC4zOWE4LjkzNyA4LjkzNyAwIDAxNC43MDItMS4zNDRoLjExMmMuNDIgMCAuODQuMDI5IDEuMjU1LjA4OGE4LjkzOCA4LjkzOCAwIDAxMy40NDggMS4yNTYgOS4wMDMgOS4wMDMgMCAwMTIuNTU0IDIuNDA0IDkuMDkzIDkuMDkzIDAgMDExLjQ1OSAzLjMxMyA5LjA0MyA5LjA0MyAwIDAxLS4wNSAzLjkxMiA4LjkyNSA4LjkyNSAwIDAxLTEuNTI2IDMuMjZjLS4yLjI2NS0uNDA5LjQ5NS0uNjM3Ljc0NWwtLjIzLjI1NGMtLjAxNy4wMTYtLjAzLjAyNy0uMDQuMDQzLS44MDQuOTYxLTEuMTk1IDEuOTI3LTEuMTk1IDIuOTQ4YTQuMjUgNC4yNSAwIDAwMi4yMzcgMy43MzVjLS43OTUuNDQxLTEuNjMuODA5LTIuNDkxIDEuMDk4bC0uODYyLjI2LS4wMTgtLjAwNHptLTMuOTU2LTExLjMxNGEyLjk1NyAyLjk1NyAwIDAxLTIuOTUyLTIuOTUyIDIuOTU3IDIuOTU3IDAgMDEyLjk1Mi0yLjk1MiAyLjk1NiAyLjk1NiAwIDAxMi45NSAyLjk1MiAyLjk1NyAyLjk1NyAwIDAxLTIuOTUgMi45NTJcIixcbiAgICBmaWxsOiBcIiNGMDVDNTZcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0NlcGg7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29DbG91ZCA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvQ2xvdWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsTmVnYXRpdmVcIixcbiAgICBkOiBcIk0xMi4zNyAxOC4zNTJjLjAzMi0uMDEuMDY2LS4wMTQuMS0uMDIzQTYgNiAwIDAxMTggMTBWMEM5LjE2MyAwIDIgNy4xNjQgMiAxNmMwIDIuNzkzLjcyIDUuNDE3IDEuOTc2IDcuNzAyYTE4Ljk0NyAxOC45NDcgMCAwMTguMzkzLTUuMzQ5XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMDgwRDVcIixcbiAgICBkOiBcIk0xOCAwQTE1Ljk1OSAxNS45NTkgMCAwMDUuNzE3IDUuNzVhMTYuMDA2IDE2LjAwNiAwIDAwNy41NDEgNS4wMzJjLjcxLjIyIDEuNDc3LjEzNSAyLjE0Ni0uMTg4QTUuOTQgNS45NCAwIDAxMTggMTBhNS45NCA1Ljk0IDAgMDEyLjU5Ni41OTRjLjY2OS4zMjMgMS40MzYuNDA4IDIuMTQ2LjE4OGExNi4wMSAxNi4wMSAwIDAwNy41NDEtNS4wMzJBMTUuOTU5IDE1Ljk1OSAwIDAwMTggMFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDBCRkIzXCIsXG4gICAgZDogXCJNMjIuNzQyIDIxLjIxOGMtLjcxLS4yMi0xLjQ3OC0uMTM1LTIuMTQ2LjE4OEE1Ljk0NyA1Ljk0NyAwIDAxMTggMjJhNS45NCA1Ljk0IDAgMDEtMi41OTYtLjU5NGMtLjY2OS0uMzIzLTEuNDM2LS40MDgtMi4xNDYtLjE4OGExNi4wMDYgMTYuMDA2IDAgMDAtNy41NCA1LjAzMkExNS45NTkgMTUuOTU5IDAgMDAxOCAzMmM0LjkzNiAwIDkuMzQ4LTIuMjM2IDEyLjI4My01Ljc1YTE2LjAxNiAxNi4wMTYgMCAwMC03LjU0LTUuMDMyXCJcbiAgfSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvQ2xvdWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29DbG91ZEVjZSA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvQ2xvdWRFY2UoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCIsXG4gICAgZDogXCJNMTggMHYxMGE2IDYgMCAwMC01LjUzIDguMzNjLS4wMzQuMDA5LS4wNjguMDEyLS4xLjAyM0ExOC45NDcgMTguOTQ3IDAgMDAzLjk3NSAyMy43IDE1LjkzNCAxNS45MzQgMCAwMTIgMTZDMiA3LjE2NCA5LjE2MyAwIDE4IDB6bTAgMTNhMyAzIDAgMTEwIDYgMyAzIDAgMDEwLTZ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMEFFRkFcIixcbiAgICBkOiBcIk0yMi43NDIgMjEuMjE4Yy0uNzEtLjIyLTEuNDc4LS4xMzUtMi4xNDYuMTg4QTUuOTQ3IDUuOTQ3IDAgMDExOCAyMmE1Ljk0IDUuOTQgMCAwMS0yLjU5Ni0uNTk0Yy0uNjY5LS4zMjMtMS40MzYtLjQwOC0yLjE0Ni0uMTg4YTE2LjAwNiAxNi4wMDYgMCAwMC03LjU0IDUuMDMyQTE1Ljk1OSAxNS45NTkgMCAwMDE4IDMyYzQuOTM2IDAgOS4zNDgtMi4yMzYgMTIuMjgzLTUuNzVhMTYuMDE2IDE2LjAxNiAwIDAwLTcuNTQtNS4wMzJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwODBENVwiLFxuICAgIGQ6IFwiTTE4IDBBMTUuOTU5IDE1Ljk1OSAwIDAwNS43MTcgNS43NWExNi4wMDYgMTYuMDA2IDAgMDA3LjU0MSA1LjAzMmMuNzEuMjIgMS40NzcuMTM1IDIuMTQ2LS4xODhBNS45NCA1Ljk0IDAgMDExOCAxMGE1Ljk0IDUuOTQgMCAwMTIuNTk2LjU5NGMuNjY5LjMyMyAxLjQzNi40MDggMi4xNDYuMTg4YTE2LjAxIDE2LjAxIDAgMDA3LjU0MS01LjAzMkExNS45NTkgMTUuOTU5IDAgMDAxOCAwXCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29DbG91ZEVjZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0NvZGUgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0NvZGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCIsXG4gICAgZDogXCJNOS43NSAxMkwxNiAzMmgxMGwtMy40LTEwLjg4QTEzIDEzIDAgMDAxMC4xOSAxMmgtLjQ0elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMjJBN0YzXCIsXG4gICAgZDogXCJNMjUuNzI1IDExLjkzQTE3IDE3IDAgMDA5LjUgMEg2bDMuNzUgMTJoLjQ0YTEzIDEzIDAgMDExMi40MSA5LjEyTDI2IDMyaDZsLTYuMjc1LTIwLjA3elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDM3N0NBXCIsXG4gICAgZDogXCJNNy45MSAxNi4xNzVMMCAzMmgxMi44NTV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29Db2RlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvQ29kZXNhbmRib3ggPSBmdW5jdGlvbiBFdWlJY29uTG9nb0NvZGVzYW5kYm94KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTQuNzM4IDI4LjA0NFYxNi42ODFMMy4xNzIgMTAuOTE5djYuNDZsNS4zMiAyLjY3djQuODg5bDYuMjQ2IDMuMTA2em0yLjM0NC4wNjZsNi4zNTctMy4xN3YtNS4wMDJsNS4zNTMtMi42ODZWMTAuODdsLTExLjcxIDUuODU0VjI4LjExek0yNy4zMDYgOC45OTNsLTYuMDAzLTMuMDEyLTUuMjg2IDIuNjU2LTUuMzI1LTIuNjU5TDQuNjM3IDkuMDNsMTEuMzE3IDUuNjM4IDExLjM1Mi01LjY3NXpNLjgyOCAyMy43NDRWOC4zMjRMMTUuOTgxLjY4OWwxNS4xNTUgNy42MDRWMjMuNzJMMTUuOTggMzEuMjguODI4IDIzLjc0M3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0NvZGVzYW5kYm94OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvQ291Y2hiYXNlID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Db3VjaGJhc2UoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNFRDIyMjZcIixcbiAgICBkOiBcIk0xNi4wNzIuMDI0QzcuMjkuMDI0LjE0NCA3LjE0Ni4xNDQgMTUuOTUyYzAgOC43ODIgNy4xMjIgMTUuOTI4IDE1LjkyOCAxNS45MjhDMjQuODU0IDMxLjg4IDMyIDI0Ljc1OCAzMiAxNS45NTIgMzIgNy4xNDYgMjQuODU0LjAyNCAxNi4wNzIuMDI0em0xMC43NTUgMTguNzE5YzAgLjk2Mi0uNTUzIDEuODA0LTEuNjM2IDEuOTk3LTEuODc3LjMzNi01LjgyMy41My05LjExOS41My0zLjI5NiAwLTcuMjQyLS4xOTQtOS4xMTktLjUzLTEuMDgyLS4xOTMtMS42MzYtMS4wMzUtMS42MzYtMS45OTd2LTYuMjA4YzAtLjk2Mi43NDYtMS44NTIgMS42MzYtMS45OTcuNTU0LS4wOTYgMS44NTMtLjE5MiAyLjg2NC0uMTkyLjM4NSAwIC42OTcuMjg5LjY5Ny43NDZ2NC4zNTVsNS41ODItLjEyIDUuNTgyLjEydi00LjM1NWMwLS40NTcuMzEzLS43NDYuNjk4LS43NDYgMS4wMSAwIDIuMzEuMDk2IDIuODYzLjE5Mi45MTQuMTQ1IDEuNjM2IDEuMDM1IDEuNjM2IDEuOTk3LS4wNDggMi4wNDUtLjA0OCA0LjEzOS0uMDQ4IDYuMjA4elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvQ291Y2hiYXNlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvRG9ja2VyID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Eb2NrZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xOC4wOTkgMTUuMTA4aDMuMzA0di0yLjk3M0gxOC4xdjIuOTczem0tMy45MDUgMGgzLjMwNHYtMi45NzNoLTMuMzA0djIuOTczem0tMy45MDUgMGgzLjMwNHYtMi45NzNIMTAuMjl2Mi45NzN6bS0zLjkwNSAwSDkuNjl2LTIuOTczSDYuMzg0djIuOTczem0tMy45MDQgMGgzLjMwNHYtMi45NzNIMi40OHYyLjk3M3ptMy45MDQtMy41NjhIOS42OVY4LjU2OEg2LjM4NHYyLjk3MnptMy45MDUgMGgzLjMwNFY4LjU2OEgxMC4yOXYyLjk3MnptMy45MDUgMGgzLjMwNFY4LjU2OGgtMy4zMDR2Mi45NzJ6bTAtMy41NjdoMy4zMDRWNWgtMy4zMDR2Mi45NzN6bTE3LjEzOSA1LjQwMmMtLjcyMi0uNDc4LTIuMzgtLjY1My0zLjY1Ni0uNDE1LS4xNjQtMS4xOS0uODM0LTIuMjIxLTIuMDUyLTMuMTUzbC0uNy0uNDYzLS40NjguNjk0Yy0uNTk4Ljg5My0uODk3IDIuMTMtLjggMy4zMTcuMDQ1LjQxOC4xODMgMS4xNjQuNjE3IDEuODItLjQzMy4yMzEtMS4yOS41NDktMi40Mi41MjhILjEyNGwtLjA0My4yNDdjLS4yMDQgMS4xOTMtLjIgNC45MTQgMi4yNCA3Ljc3NEM0LjE3OCAyNS44OTggNi45NiAyNyAxMC41OSAyN2M3Ljg3IDAgMTMuNjkzLTMuNTg2IDE2LjQyLTEwLjEwNCAxLjA3My4wMiAzLjM4MS4wMDYgNC41NjctMi4yMzcuMDMxLS4wNTEuMTAyLS4xODYuMzEtLjYxbC4xMTMtLjIzNC0uNjY3LS40NHpcIixcbiAgICBmaWxsOiBcIiMxMzZFQTNcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29Eb2NrZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBodG1sSWRHZW5lcmF0b3IgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29Ecm9wd2l6YXJkID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Ecm9wd2l6YXJkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBnZW5lcmF0ZUlkID0gaHRtbElkR2VuZXJhdG9yKCdsb2dvX2Ryb3B3aXphcmQnKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDI5LjYxczkuNTUgNC43NCAxNi44NTYtLjg5M2MtMS45MDUtNS4xMTQtNS4yNS0xOS44NjctNy4yMjYtMjYuMzgzLS40MjItMS4zODktLjQ5LTEuNTI3LS42NjMtMS45MDktLjk2NC0yLjEzNC0xLjk3OCA0LjE0Mi0zLjYyOCAxMC40NTlDMTIuNzQ5IDEzLjE0OCA4IDI5LjYxIDggMjkuNjFcIixcbiAgICBmaWxsOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2EnKSwgXCIpXCIpXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS45MjYgMjguNTYzczguMTcgNC43OTQgMTQuOTMuMTU0Yy0uMTgtLjgwNy0uNjQyLTIuMTAzLS45NTUtMy4zMTEtMS42NjQtNi40MTYtNC42NzYtMTcuMjQ4LTYuMTQ0LTIyLjYyNi0xLjU5LTUuODIyLTIuMTA1Ljk4Ni0zLjk2MSA4LjIzLS41NjQgMi4yMDQtMy44NyAxNy41NTMtMy44NyAxNy41NTNcIixcbiAgICBmaWxsOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2InKSwgXCIpXCIpXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIuMTQgMjQuNDFsLjg1LTEuNDY2Ljc5MyAxLjU0NC0uOTA4IDEuOTktLjczNS0yLjA2OXptNi45MzQtNS41NDVsLjg1LTEuNDY1Ljc5MyAxLjU0My0uOTA4IDEuOTktLjczNS0yLjA2OHptLTQuNzQ3LTUuODUxbC44NS0xLjQ2NS43OTIgMS41NDMtLjkwOCAxLjk5LS43MzQtMi4wNjhcIixcbiAgICBmaWxsOiBcIiNGOUE3MkJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyLjE0IDI0LjQxbC44NS0xLjcxNi43OTMgMS43OTQtLjkwNyAxLjQ2OC0uNzM2LTEuNTQ2em02LjkzNC01LjU0NWwuODUxLTEuNzE2Ljc5MiAxLjc5NC0uOTA2IDEuNDY4LS43MzctMS41NDZ6bS00Ljc0Ny01Ljg1MWwuODUtMS43MTYuNzkyIDEuNzk0LS45MDYgMS40NjgtLjczNi0xLjU0NlwiLFxuICAgIGZpbGw6IFwiI0ZGRjIwMFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIuOTg3IDI4LjQyMnM2LjA4MiAxLjAxNSAxMC4wODYtMS41NDljLS41MDIgMS41NS00Ljk5MSAzLjMxNC0xMC4wODYgMS41NVwiLFxuICAgIGZpbGw6IFwiIzI0MjY1RFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwiZGVmc1wiLCBudWxsLCBfX19FbW90aW9uSlNYKFwibGluZWFyR3JhZGllbnRcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdhJyksXG4gICAgeDE6IDMzLjQ3MyxcbiAgICB5MTogNy42NzQsXG4gICAgeDI6IDcuNzUxLFxuICAgIHkyOiAyMS4zMzEsXG4gICAgZ3JhZGllbnRVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBzdG9wQ29sb3I6IFwiIzM4NzFDMVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiAwLjUxNSxcbiAgICBzdG9wQ29sb3I6IFwiIzJDMzc5MlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiAwLjg2NSxcbiAgICBzdG9wQ29sb3I6IFwiIzI0MjY1RFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiAxLFxuICAgIHN0b3BDb2xvcjogXCIjMjUyNzYxXCJcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwibGluZWFyR3JhZGllbnRcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdiJyksXG4gICAgeDE6IDIxLjAyOCxcbiAgICB5MTogMTQuOTI4LFxuICAgIHgyOiA2LjAxNyxcbiAgICB5MjogMTguODQ0LFxuICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgc3RvcENvbG9yOiBcIiMzODcxQzFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogMC41MTUsXG4gICAgc3RvcENvbG9yOiBcIiMyQzM3OTJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogMC44NjUsXG4gICAgc3RvcENvbG9yOiBcIiMyNDI2NURcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogMSxcbiAgICBzdG9wQ29sb3I6IFwiIzI1Mjc2MVwiXG4gIH0pKSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29Ecm9wd2l6YXJkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvRWxhc3RpYyA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvRWxhc3RpYyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgXCJkYXRhLXR5cGVcIjogXCJsb2dvRWxhc3RpY1wiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwib3V0bGluZVwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMzAuODYgMTMuMTI5QTYuMzMzIDYuMzMzIDAgMDEzMiAxNi43N2E2LjQxOSA2LjQxOSAwIDAxLTEuMTYyIDMuNjUyIDYuMzgyIDYuMzgyIDAgMDEtMy4wMzIgMi4zMzEgNC44MzMgNC44MzMgMCAwMS0xLjY3MiA1LjU0MiA0Ljc4OSA0Ljc4OSAwIDAxLTUuNzctLjA3NCA5LjAxNiA5LjAxNiAwIDAxLTQuNSAzLjMyMiA4Ljk4MiA4Ljk4MiAwIDAxLTUuNTg3LjAyMyA5LjAxNCA5LjAxNCAwIDAxLTQuNTI2LTMuMjg3IDkuMDY3IDkuMDY3IDAgMDEtMS43MjctNS4zMzNjMC0uNTc5LjA1My0xLjE1Ni4xNi0xLjcyNUE2LjMwNSA2LjMwNSAwIDAxMS4xNDUgMTguOSA2LjM0MSA2LjM0MSAwIDAxMCAxNS4yNDJhNi40MiA2LjQyIDAgMDExLjE2My0zLjY1MiA2LjM4NCA2LjM4NCAwIDAxMy4wMzUtMi4zMyA0LjgzMyA0LjgzMyAwIDAxMS42NTgtNS41NTcgNC43ODkgNC43ODkgMCAwMTUuNzguMDcgOS4wMzcgOS4wMzcgMCAwMTQuOTMtMy40NDYgOS4wMDcgOS4wMDcgMCAwMTUuOTk0LjQxOSA5LjA1IDkuMDUgMCAwMTQuNDA3IDQuMDk4IDkuMDk3IDkuMDk3IDAgMDEuODczIDUuOTY1IDYuMjk4IDYuMjk4IDAgMDEzLjAyIDIuMzJ6bS0xOC4yOC42NThsNy4wMDIgMy4yMTEgNy4wNjYtNi4yMTNhNy44NSA3Ljg1IDAgMDAuMTUyLTEuNTU3YzAtMS42OTItLjUzOS0zLjM0LTEuNTQtNC43MDRhNy44OTcgNy44OTcgMCAwMC00LjAyLTIuODY5IDcuODcgNy44NyAwIDAwLTQuOTMyLjA4NiA3LjkgNy45IDAgMDAtMy45MiAzLjAwN2wtMS4xNzQgNi4xMTggMS4zNjcgMi45Mi0uMDAxLjAwMXptLTcuMjQ3IDcuNDQxQTcuOTY0IDcuOTY0IDAgMDA2LjcyIDI3LjUzYTcuOTE4IDcuOTE4IDAgMDA0LjA0IDIuODc0IDcuODkgNy44OSAwIDAwNC45NS0uMDk3IDcuOTIgNy45MiAwIDAwMy45MjYtMy4wM2wxLjE2Ni02LjEwMi0xLjU1NS0yLjk4NS03LjAzLTMuMjExLTYuODg1IDYuMjQ4LjAwMS4wMDF6bTQuNzU1LTExLjAyNGwtNC44LTEuMTM3LjAwMi0uMDAyYTMuODIgMy44MiAwIDAxMS4zMTItNC4zNTggMy43ODUgMy43ODUgMCAwMTQuNTM4LjAyM2wtMS4wNTIgNS40NzR6bS01LjIxNi4wMWE1LjI5NCA1LjI5NCAwIDAwLTIuNTk1IDEuODgyIDUuMzI0IDUuMzI0IDAgMDAtLjE0MiA2LjEyNCA1LjI4NyA1LjI4NyAwIDAwMi41MDUgMmw2LjczMy02LjEwMS0xLjIzNS0yLjY1LTUuMjY2LTEuMjU1em0xOC4yODYgMTcuODQ4YTMuNzM3IDMuNzM3IDAgMDEtMi4yODUtLjc4NWwxLjAzNy01LjQ1NCA0LjggMS4xMjVhMy44MTIgMy44MTIgMCAwMS0xLjgwMSA0LjY4Yy0uNTQuMjgzLTEuMTQuNDMyLTEuNzUxLjQzNHptLTEuMzEtNy40OTlsNS4yOCAxLjIzOGE1LjM0IDUuMzQgMCAwMDIuNjIyLTEuOTM4IDUuMzcgNS4zNyAwIDAwMS4wMTMtMy4xMDYgNS4zMTEgNS4zMTEgMCAwMC0uOTM2LTMuMDEgNS4yODIgNS4yODIgMCAwMC0yLjQ3NS0xLjk0NGwtNi45MDQgNi4wNyAxLjQgMi42OXpcIixcbiAgICBmaWxsOiBcIiNmZmZcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyLjU4IDEzLjc4N2w3LjAwMiAzLjIxMSA3LjA2Ni02LjIxM2E3Ljg0OSA3Ljg0OSAwIDAwLjE1Mi0xLjU1N2MwLTEuNjkyLS41MzktMy4zNC0xLjU0LTQuNzA0YTcuODk3IDcuODk3IDAgMDAtNC4wMi0yLjg2OSA3Ljg3IDcuODcgMCAwMC00LjkzMi4wODYgNy45IDcuOSAwIDAwLTMuOTIgMy4wMDdsLTEuMTc0IDYuMTE4IDEuMzY3IDIuOTItLjAwMS4wMDF6XCIsXG4gICAgZmlsbDogXCIjRkVDNTE0XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01LjMzMyAyMS4yMjhBNy45NjQgNy45NjQgMCAwMDYuNzIgMjcuNTNhNy45MTggNy45MTggMCAwMDQuMDQgMi44NzQgNy44OSA3Ljg5IDAgMDA0Ljk1LS4wOTcgNy45MiA3LjkyIDAgMDAzLjkyNi0zLjAzbDEuMTY2LTYuMTAyLTEuNTU1LTIuOTg1LTcuMDMtMy4yMTEtNi44ODUgNi4yNDguMDAxLjAwMXpcIixcbiAgICBmaWxsOiBcIiMwMEJGQjNcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUuMjg4IDkuMDY3bDQuOCAxLjEzN0wxMS4xNCA0LjczYTMuNzg1IDMuNzg1IDAgMDAtNS45MTQgMS45NCAzLjgyIDMuODIgMCAwMC4wNjQgMi4zOTVcIixcbiAgICBmaWxsOiBcIiNGMDRFOThcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQuODcyIDEwLjIxNGE1LjI5NCA1LjI5NCAwIDAwLTIuNTk1IDEuODgyIDUuMzI0IDUuMzI0IDAgMDAtLjE0MiA2LjEyNCA1LjI4NyA1LjI4NyAwIDAwMi41MDUgMmw2LjczMy02LjEwMS0xLjIzNS0yLjY1LTUuMjY2LTEuMjU1elwiLFxuICAgIGZpbGw6IFwiIzFCQTlGNVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjAuODczIDI3LjI3N2EzLjczNiAzLjczNiAwIDAwMi4yODUuNzg1IDMuNzgzIDMuNzgzIDAgMDAzLjEwMS0xLjYzIDMuODEyIDMuODEyIDAgMDAuNDUxLTMuNDg0bC00LjgtMS4xMjUtMS4wMzcgNS40NTR6XCIsXG4gICAgZmlsbDogXCIjOTNDOTBFXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMS44NDggMjAuNTYzbDUuMjggMS4yMzhhNS4zNCA1LjM0IDAgMDAyLjYyMi0xLjkzOCA1LjM3IDUuMzcgMCAwMDEuMDEzLTMuMTA2IDUuMzEyIDUuMzEyIDAgMDAtLjkzNi0zLjAxIDUuMjgzIDUuMjgzIDAgMDAtMi40NzUtMS45NDRsLTYuOTA0IDYuMDcgMS40IDIuNjl6XCIsXG4gICAgZmlsbDogXCIjMDdDXCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29FbGFzdGljOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvRWxhc3RpY1N0YWNrID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29FbGFzdGljU3RhY2soX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0YwNEU5OFwiLFxuICAgIGQ6IFwiTTMyIDlWMi41QTIuNSAyLjUgMCAwMDI5LjUgMGgtMjdBMi41IDIuNSAwIDAwMCAyLjVWOWgzMnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwQkZCM1wiLFxuICAgIGQ6IFwiTTAgMjBoMzJ2LThIMHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwODBENVwiLFxuICAgIGQ6IFwiTTE0LjUgMjNIMHY2LjVBMi41IDIuNSAwIDAwMi41IDMyaDEydi05elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkVDNTE0XCIsXG4gICAgZDogXCJNMTcuNSAyM3Y5aDEyYTIuNSAyLjUgMCAwMDIuNS0yLjVWMjNIMTcuNXpcIlxuICB9KSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29FbGFzdGljU3RhY2s7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29FbGFzdGljc2VhcmNoID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29FbGFzdGljc2VhcmNoKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCIsXG4gICAgZDogXCJNMiAxNmMwIDEuMzg0LjE5NCAyLjcyLjUyNCA0SDIyYTQgNCAwIDAwMC04SDIuNTI0QTE1Ljk4NCAxNS45ODQgMCAwMDIgMTZcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZFQzUxNFwiLFxuICAgIGQ6IFwiTTI4LjkyNCA3LjY2MkExNS4zODEgMTUuMzgxIDAgMDAzMC40OCA2QzI3LjU0NyAyLjM0NiAyMy4wNSAwIDE4IDAgMTEuNjc5IDAgNi4yMzkgMy42NzggMy42NDQgOUgyNS41MWE1LjAzOSA1LjAzOSAwIDAwMy40MTMtMS4zMzhcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwQkZCM1wiLFxuICAgIGQ6IFwiTTI1LjUxIDIzSDMuNjQ1QzYuMjQgMjguMzIzIDExLjY3OSAzMiAxOCAzMmM1LjA1IDAgOS41NDctMi4zNDYgMTIuNDgtNmExNS4zODEgMTUuMzgxIDAgMDAtMS41NTYtMS42NjJBNS4wMzQgNS4wMzQgMCAwMDI1LjUxIDIzXCJcbiAgfSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvRWxhc3RpY3NlYXJjaDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0VudGVycHJpc2VTZWFyY2ggPSBmdW5jdGlvbiBFdWlJY29uTG9nb0VudGVycHJpc2VTZWFyY2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMEJGQjNcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTYgMGMtMi45MTggMC01LjY0NS43OTQtOCAyLjE1OCA0Ljc3NyAyLjc2OCA4IDcuOTIzIDggMTMuODQyIDAgNS45MTktMy4yMjMgMTEuMDc0LTggMTMuODQyQTE1LjkwNyAxNS45MDcgMCAwMDE2IDMyYzguODM3IDAgMTYtNy4xNjMgMTYtMTZTMjQuODM3IDAgMTYgMHpcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRUM1MTRcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOCAyNGgyLjIyMkExMi45OTYgMTIuOTk2IDAgMDAxMyAxNmMwLTIuOTM1LTEuMDEyLTUuNzQ0LTIuNzc4LThIOGE4IDggMCAwMDAgMTZ6XCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxOZWdhdGl2ZVwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xNiA4aC0yLjE1MkExNS44NzcgMTUuODc3IDAgMDExNiAxNmMwIDIuOTE4LS43ODYgNS42NDctMi4xNTIgOEgxNmE4IDggMCAwMDAtMTZ6XCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvRW50ZXJwcmlzZVNlYXJjaDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0V0Y2QgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0V0Y2QoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIiM0MTlFREFcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTQuNjUgMTQuMTY0YzAgMS4xODktLjkzMyAyLjE1LTIuMDgzIDIuMTUtMS4xNTIgMC0yLjA4Mi0uOTYxLTIuMDgyLTIuMTUgMC0xLjE4NS45My0yLjE1IDIuMDgyLTIuMTUgMS4xNSAwIDIuMDgzLjk2NSAyLjA4MyAyLjE1em0yLjY5MyAwYzAgMS4xODkuOTM0IDIuMTUgMi4wODQgMi4xNXMyLjA4My0uOTYxIDIuMDgzLTIuMTVjMC0xLjE4NS0uOTMzLTIuMTUtMi4wODMtMi4xNS0xLjE1IDAtMi4wODQuOTY1LTIuMDg0IDIuMTV6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zMS41MjIgMTYuNDk1YTUuODQ1IDUuODQ1IDAgMDEtMy4xMDUtLjYxOGMuMjcyLTEuNjAzLjM4Ny0zLjIxOC4zNTctNC44MjdhMjQuODk2IDI0Ljg5NiAwIDAwLTMuMDI3LTMuNzAzIDYuMTM3IDYuMTM3IDAgMDEyLjEzMy0yLjM2bC4zOTEtLjI1LS4zMDQtLjM1NGMtMS41Ny0xLjgyNS0zLjQ0NC0zLjIzNS01LjU2OC00LjE5M0wyMS45NzUgMGwtLjEwNy40NjJhNi4yNDggNi4yNDggMCAwMS0xLjUxIDIuODI5IDIzLjc3IDIzLjc3IDAgMDAtNC4zNjItMS44NTUgMjMuNzkgMjMuNzkgMCAwMC00LjM1NSAxLjg1MUE2LjI0NiA2LjI0NiAwIDAxMTAuMTM3LjQ2NWwtLjEwOC0uNDYyLS40MjMuMTg5Yy0yLjA5Ny45NDMtNC4wMjIgMi4zOTItNS41NjYgNC4xOWwtLjMwNi4zNTUuMzkuMjVhNi4xMjUgNi4xMjUgMCAwMTIuMTI5IDIuMzQ3IDI1LjAwMSAyNS4wMDEgMCAwMC0zLjAyMiAzLjY4OSAyNi4wNjggMjYuMDY4IDAgMDAuMzQ3IDQuODYgNS44MzIgNS44MzIgMCAwMS0zLjA5LjYxMkwuMDMgMTYuNDZsLjA0My40NzNhMTYuNzIzIDE2LjcyMyAwIDAwMi4xNCA2Ljc2NWwuMjM0LjQxLjM1LS4zMDhhNS45MTQgNS45MTQgMCAwMTIuODM3LTEuMzcyIDI1LjI1NSAyNS4yNTUgMCAwMDIuNDI5IDQuMDgzYzEuNDc1LjUzMyAzLjAxMy45MyA0LjYwMSAxLjE2N2E2LjM1OSA2LjM1OSAwIDAxLS4zODMgMy4yNDNsLS4xNzUuNDM5LjQ1LjEwMmMxLjE1LjI2MSAyLjMxLjM5NCAzLjQ0Ny4zOTRsMy40NDctLjM5NC40NS0uMTAyLS4xNzUtLjQ0YTYuMzc2IDYuMzc2IDAgMDEtLjM4My0zLjI0NCAyMy45MDUgMjMuOTA1IDAgMDA0LjU4NS0xLjE2NSAyNS4yODYgMjUuMjg2IDAgMDAyLjQzLTQuMDg2IDUuOTQgNS45NCAwIDAxMi44NTEgMS4zNzNsLjM1LjMwNi4yMzMtLjQwOGExNi42NjEgMTYuNjYxIDAgMDAyLjE0LTYuNzY0bC4wNDItLjQ3Mi0uNDUuMDM2ek0yMC45MyAyMi4yNzhjLTEuNjMuNDU4LTMuMjg3LjY4OS00LjkzMy42ODktMS42NSAwLTMuMzA0LS4yMzEtNC45MzYtLjY5YTIwLjAyOCAyMC4wMjggMCAwMS0yLjExMy00LjU5NCAyMC4wNzIgMjAuMDcyIDAgMDEtLjg5LTUuMDQgMTkuMDc2IDE5LjA3NiAwIDAxMy41NzYtMy41MTYgMTguODY3IDE4Ljg2NyAwIDAxNC4zNjMtMi40NDggMTguOTQ0IDE4Ljk0NCAwIDAxNC4zNTUgMi40NDMgMTkuMTkgMTkuMTkgMCAwMTMuNTkyIDMuNTM4Yy0uMDkgMS43My0uMzkgMy40MS0uODk5IDUuMDE5YTE5Ljk2NSAxOS45NjUgMCAwMS0yLjExNSA0LjU5OXpcIlxuICB9KSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29FdGNkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaHRtbElkR2VuZXJhdG9yIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvR2NwID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29HY3AoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGdlbmVyYXRlSWQgPSBodG1sSWRHZW5lcmF0b3IoJ2xvZ29fZ2NwJyk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHhtbG5zWGxpbms6IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZGVmc1wiLCBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2EnKSxcbiAgICBkOiBcIk0uMDg1LjFoNC41NDl2Ni4yOTFILjA4NXpcIlxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0RCNDQzN1wiLFxuICAgIGZpbGxSdWxlOiBcIm5vbnplcm9cIixcbiAgICBkOiBcIk0yMi41NyAyOS45ODJoLTUuNzQ5Yy41MjcgMCAuOTg3LS4yODIgMS4yMzMtLjdMMjUuODU3IDE2IDIwLjkzIDcuNjFsNS43NDguMDAxYy40OTIgMCAuOTcuMjUxIDEuMjMyLjdsMy42OTggNi4yOTFjLjQ5LjgzNy41MjYgMS45IDAgMi43OTdsLTYuNTcyIDExLjE4NWEyLjg1MyAyLjg1MyAwIDAxLTIuNDY0IDEuMzk4em0tLjcxLTIuNzk2YzAgLjM4Ni4zMTguNy43MS43YS43MDUuNzA1IDAgMDAuNzEyLS43YzAtLjM4Ni0uMzE4LS43LS43MTEtLjdhLjcwNS43MDUgMCAwMC0uNzEyLjd6bTYuOTI3LTEwLjU4Yy4zNC4xOTMuNzc1LjA3OC45NzEtLjI1NmEuNjkyLjY5MiAwIDAwLS4yNi0uOTU1LjcxOC43MTggMCAwMC0uOTcyLjI1Ni42OTIuNjkyIDAgMDAuMjYuOTU1elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjNDI4NUY0XCIsXG4gICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiLFxuICAgIGQ6IFwiTTI1LjAzNiAzLjQxNmwyLjg3MyA0Ljg5NGExLjQyNyAxLjQyNyAwIDAwLTEuMjMyLS42OTlIMTEuMDcxbC00LjkyOCA4LjM4OC0yLjg3NC00Ljg5MmExLjM3NyAxLjM3NyAwIDAxMC0xLjM5OWwzLjY5Ni02LjI5MmEyLjg1MyAyLjg1MyAwIDAxMi40NjQtMS4zOThoMTMuMTQzYy45ODIgMCAxLjkzNy41MDIgMi40NjQgMS4zOTh6TTEwLjE0IDQuODE0YzAtLjM4Ni0uMzE4LS43LS43MS0uN2EuNzA1LjcwNSAwIDAwLS43MTIuN2MwIC4zODYuMzE4LjcuNzExLjdhLjcwNS43MDUgMCAwMC43MTEtLjd6bTEyLjc4Ny42MDZhLjY5Mi42OTIgMCAwMC4yNi0uOTU1LjcxOC43MTggMCAwMC0uOTcxLS4yNTYuNjkyLjY5MiAwIDAwLS4yNi45NTUuNzE4LjcxOCAwIDAwLjk3MS4yNTZ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGNEI0MDBcIixcbiAgICBmaWxsUnVsZTogXCJub256ZXJvXCIsXG4gICAgZDogXCJNLjM5NCAxNC42MDFsMi44NzUtNC44OTNjLS4yNjMuNDQ5LS4yNDUuOTggMCAxLjM5OUwxMS4wNyAyNC4zOWg5Ljg1N2wtMi44NzQgNC44OTJjLS4yNDYuNDE4LS43MDYuNy0xLjIzMy43SDkuNDI4YTIuODU0IDIuODU0IDAgMDEtMi40NjQtMS4zOThMLjM5NCAxNy4zOThhMi43NTQgMi43NTQgMCAwMTAtMi43OTd6bTIuODIuNzkzYS43MTguNzE4IDAgMDAtLjk3Mi4yNTYuNjkzLjY5MyAwIDAwLjI2Ljk1NWMuMzQuMTkzLjc3NS4wNzguOTcxLS4yNTZhLjY5Mi42OTIgMCAwMC0uMjYtLjk1NXpNOS4wNzIgMjYuNThhLjY5Mi42OTIgMCAwMC0uMjYuOTU1LjcxOC43MTggMCAwMC45NzEuMjU2LjY5Mi42OTIgMCAwMC4yNi0uOTU1LjcxOC43MTggMCAwMC0uOTcxLS4yNTZ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMDBcIixcbiAgICBkOiBcIk0xOC4wNTQgMjkuMjgybDIuODc1LTQuODkySDE3Ljk2bC0xLjEzOCA1LjU5MWMuNTI2IDAgLjk4Ni0uMjggMS4yMzItLjY5OU0yNi42NzggNy42MTFoLTUuNzQ5bDEuNDg0IDIuNTI3TDI3LjkxIDguMzFhMS40MjcgMS40MjcgMCAwMC0xLjIzMi0uN1wiLFxuICAgIG9wYWNpdHk6IDAuMVxuICB9KSwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIG9wYWNpdHk6IDAuMSxcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDIuOTk0IDkuNjA5KVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJtYXNrXCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnYicpLFxuICAgIGZpbGw6IFwiI2ZmZlwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJ1c2VcIiwge1xuICAgIHhsaW5rSHJlZjogXCIjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2EnKSlcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDAwXCIsXG4gICAgZDogXCJNLjI3NSAxLjQ5OEwzLjE1IDYuMzkxbDEuNDg1LTIuNTI3TC4yNzUuMWMtLjI2My40NDgtLjI0NS45OCAwIDEuMzk4XCIsXG4gICAgbWFzazogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdiJyksIFwiKVwiKVxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNDQ0NcIixcbiAgICBmaWxsUnVsZTogXCJub256ZXJvXCIsXG4gICAgZDogXCJNMTEuMDcxIDI0LjM5TDYuMTQzIDE2bDQuOTI4LTguMzloOS44NThMMjUuODU3IDE2bC00LjkyOCA4LjM5SDExLjA3ek0yMC4yNjggMTZjMC0yLjMxNy0xLjkxLTQuMTk0LTQuMjY4LTQuMTk0LTIuMzU3IDAtNC4yNjggMS44NzctNC4yNjggNC4xOTQgMCAyLjMxNiAxLjkxIDQuMTk0IDQuMjY4IDQuMTk0IDIuMzU3IDAgNC4yNjgtMS44NzggNC4yNjgtNC4xOTR6XCJcbiAgfSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvR2NwOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvR2NwTW9ubyA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvR2NwTW9ubyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIwLjI1NiAxNS45ODJjMC0yLjMxNi0xLjkxLTQuMTk0LTQuMjY4LTQuMTk0LTIuMzU3IDAtNC4yNjggMS44NzgtNC4yNjggNC4xOTQgMCAyLjMxNyAxLjkxMSA0LjE5NSA0LjI2OCA0LjE5NSAyLjM1NyAwIDQuMjY4LTEuODc4IDQuMjY4LTQuMTk1XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yOS44NyAxNi41NDNhLjg2Mi44NjIgMCAwMS0xLjE2Ny4zMDguODMyLjgzMiAwIDAxLS4zMTItMS4xNDcuODYyLjg2MiAwIDAxMS4xNjctLjMwOC44MzIuODMyIDAgMDEuMzEyIDEuMTQ3TTIyLjU2IDI4LjE1YS44NDcuODQ3IDAgMDEtLjg1NS0uODRjMC0uNDY0LjM4My0uODQuODU1LS44NHMuODU0LjM3Ni44NTQuODRjMCAuNDY0LS4zODIuODQtLjg1NC44NG0tMTIuNzE1LS4xMTNhLjg2My44NjMgMCAwMS0xLjE2Ny0uMzA4LjgzMi44MzIgMCAwMS4zMTItMS4xNDcuODYyLjg2MiAwIDAxMS4xNjcuMzA4LjgzMi44MzIgMCAwMS0uMzEyIDEuMTQ3TTMuNTg2IDE2LjU0MmEuODYzLjg2MyAwIDAxLTEuMTY3LjMwOC44MzIuODMyIDAgMDEtLjMxMy0xLjE0Ny44NjIuODYyIDAgMDExLjE2Ny0uMzA4LjgzMi44MzIgMCAwMS4zMTMgMS4xNDdNMjIuOTg3IDUuNjY1YS44NjIuODYyIDAgMDEtMS4xNjctLjMwOC44MzIuODMyIDAgMDEuMzEyLTEuMTQ3Ljg2My44NjMgMCAwMTEuMTY4LjMwOC44MzIuODMyIDAgMDEtLjMxMyAxLjE0N20tMTMuNTcuMTEyYS44NDcuODQ3IDAgMDEtLjg1NC0uODRjMC0uNDY0LjM4Mi0uODQuODU0LS44NHMuODU1LjM3Ni44NTUuODRjMCAuNDY0LS4zODMuODQtLjg1NS44NG0yMi4xNzggOC43OTdsLTMuNjk3LTYuMjkyYy0uMDE0LS4wMjMtLjAzLS4wNDMtLjA0NS0uMDY1bC0yLjgzLTQuODE4QTIuODU0IDIuODU0IDAgMDAyMi41NiAySDkuNDE3YTIuODUzIDIuODUzIDAgMDAtMi40NjQgMS4zOThMMy4yNTcgOS42OWwzLjI4NCA1LjU5IDQuNTE5LTcuNjloMTUuNjA1Yy40OTEgMCAuOTY5LjI1MSAxLjIzMi42OTloLTYuNTY1bDQuNTEzIDcuNjgyLTQuOTM1IDguNC0yLjg3IDQuODgzYTEuNDI2IDEuNDI2IDAgMDEtMS4yMy42OTlsMy4yNzktNS41ODJoLTkuMDNsLTQuNTQ0LTcuNzM4LS4zODQtLjY1My0yLjg3NC00Ljg5M2ExLjM3NyAxLjM3NyAwIDAxLS4wMDMtMS4zOTFMLjM4MiAxNC41ODRhMi43NTQgMi43NTQgMCAwMDAgMi43OTZsNi41NyAxMS4xODZhMi44NTQgMi44NTQgMCAwMDIuNDY1IDEuMzk4aDcuMzkyYy4wNTQgMCAuMTA3LS4wMDUuMTYtLjAxMWg1LjU5YTIuODUzIDIuODUzIDAgMDAyLjQ2NC0xLjM5N2w2LjU3Mi0xMS4xODZjLjUyNi0uODk2LjQ5LTEuOTYgMC0yLjc5NlwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvR2NwTW9ubzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0dpdGh1YiA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvR2l0aHViKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYgMEM3LjE2NCAwIDAgNy4zNDMgMCAxNi40YzAgNy4yNDggNC41ODQgMTMuMzk0IDEwLjk0MiAxNS41NjIuOC4xNSAxLjA5Mi0uMzU2IDEuMDkyLS43ODkgMC0uMzktLjAxNC0xLjY4NC0uMDIyLTMuMDUzLTQuNDUuOTkxLTUuMzktMS45MzQtNS4zOS0xLjkzNC0uNzI4LTEuODk0LTEuNzc2LTIuMzk4LTEuNzc2LTIuMzk4LTEuNDU0LTEuMDE3LjExLS45OTcuMTEtLjk5NyAxLjYwNi4xMTQgMi40NTIgMS42OSAyLjQ1MiAxLjY5IDEuNDI4IDIuNTA2IDMuNzQ2IDEuNzgxIDQuNjU2IDEuMzYuMTQ2LTEuMDU2LjU2LTEuNzggMS4wMTYtMi4xOS0zLjU1Mi0uNDE0LTcuMjg4LTEuODIxLTcuMjg4LTguMTA1IDAtMS43OTIuNjI0LTMuMjU0IDEuNjQ2LTQuNDAyLS4xNjQtLjQxNi0uNzE0LTIuMDg1LjE1OC00LjM0MiAwIDAgMS4zNDEtLjQ0IDQuNCAxLjY4MUExNC44ODIgMTQuODgyIDAgMDExNiA3LjkzMmMxLjM2LjAwNiAyLjcyOC4xODggNC4wMDYuNTUzIDMuMDUzLTIuMTI0IDQuMzk2LTEuNjgxIDQuMzk2LTEuNjgxLjg3NSAyLjI1OS4zMjUgMy45MjYuMTYgNC4zNCAxLjAyNiAxLjE0OCAxLjY0NSAyLjYxIDEuNjQ1IDQuNDAyIDAgNi4zLTMuNzQyIDcuNjg3LTcuMzA3IDguMDk0LjU3Ny41MDggMS4wODYgMS41MDUgMS4wODYgMy4wMzUgMCAyLjE5Mi0uMDIxIDMuOTYtLjAyMSA0LjUgMCAuNDM3LjI5Ljk0NyAxLjEwMS43ODdDMjcuNDIgMjkuNzkgMzIgMjMuNjQ0IDMyIDE2LjQgMzIgNy4zNDMgMjQuODM2IDAgMTYgMHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0dpdGh1YjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0dtYWlsID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29HbWFpbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGw6IFwibm9uZVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNFNjVBNERcIixcbiAgICBkOiBcIk0yOS4xNjIgNC4xNDljLjI5LS4xNzUuNTg4LS4wNzguODczIDBhMi42MTYgMi42MTYgMCAwMTEuOTA3IDIuNDc2Yy4wMDYuMjktLjAwNy41ODEtLjAwNy44NjYtLjA4NCAwLS4xMzUuMDUyLS4yLjA5Ny0uODE1LjU4Mi0xLjY0MiAxLjE2NC0yLjQ1IDEuNzUyLS4zMy4yMzktLjY5Mi40MjYtLjk3LjczLS4xMTYgMC0uMi4wNzgtLjI4NC4xMzYtMi42OSAxLjg1NS01LjM3OSAzLjcwNC04LjA2MiA1LjU2LTEuMzMxLjkxOC0yLjY2MyAxLjg0OS0zLjk5NSAyLjc3M2gtLjExYy0uMDU4LS4wNDUtLjExLS4xMDMtLjE2OC0uMTQyTDUuODYzIDExLjU1Yy0uNjcyLS40NjYtMS4zNDQtLjkzOC0yLjAxNy0xLjQwMy0uMDc3LS4wNTItLjE0OC0uMTYyLS4yNDUtLjEwNC0uMDkuMDUyLS4wMzMuMTc1LS4wNDUuMjcyLS4wMDcuMDMyIDAgLjA2NSAwIC4wOTd2MTYuMTk0YzAgLjExNi4wMDYuMjQuMDEyLjM1NSAwIC4wNjUtLjAwNi4xMjMtLjAwNi4xODgtMS4yMjguMTQ5LTIuMzQ3LS4wMi0zLjExNi0xLjEzMWEyLjM4MSAyLjM4MSAwIDAxLS40NC0xLjM2NGMwLTYuMDMyLS4wMDYtMTIuMDU3LjAwNy0xOC4wODkgMC0xLjIyOC45OTUtMi4zMTQgMi4yMTctMi40ODguMTk0LS4wMjYuMzg4LS4wNTIuNTU2LjA3Ny4wNC4wMzkuMDcxLjA3OC4xMTcuMTEgNC4yNzMgMy4xNjggOC41NDYgNi4zMzUgMTIuODE5IDkuNTEuMTY4LjEyMi4yNzguMTE2LjQ0Ni0uMDA3IDMuNDEzLTIuNTIxIDYuODMzLTUuMDM2IDEwLjI0Ny03LjU1LjkwNS0uNjkyIDEuODIzLTEuMzg0IDIuNzQ3LTIuMDd6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGNkY0RUNcIixcbiAgICBkOiBcIk0yOS4xNjIgNC4xNDljLS45MjQuNjg1LTEuODQyIDEuMzc3LTIuNzY3IDIuMDYyLTMuNDEzIDIuNTIxLTYuODMzIDUuMDMtMTAuMjQ2IDcuNTUtLjE2OC4xMjMtLjI3Mi4xMy0uNDQ2LjAwNy00LjI2Ny0zLjE3NC04LjU0LTYuMzM1LTEyLjgxMy05LjUxLS4wNDYtLjAzMi0uMDc4LS4wNy0uMTE3LS4xMS4wNzgtLjEyOS4yMTQtLjA4My4zMjQtLjA4M2gyNS43NDJjLjExIDAgLjIzOS0uMDQ2LjMyMy4wODR6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNFNkUzRDZcIixcbiAgICBkOiBcIk0zLjU1NiAyNi45NWE2LjUzMyA2LjUzMyAwIDAxLS4wMTMtLjM1NlYxMC40YzAtLjAzMi0uMDA3LS4wNjUgMC0uMDk3LjAxMy0uMDktLjA0Ni0uMjEzLjA0NS0uMjcxLjA5Ny0uMDU5LjE3NC4wNTEuMjQ2LjEwMy42NzIuNDY1IDEuMzQ0LjkzNyAyLjAxNyAxLjQwM2w5LjgzMiA2Ljg0NmMuMDU4LjA0NS4xMTcuMDk3LjE2OC4xNDItLjAyNi4wMjYtLjA1OC4wNDUtLjA4NC4wNzFsLS4wNjQuMDY1Yy0uMDUyIDAtLjEwNC4wMTMtLjEzLjA2NGwtLjA2NC4wNjVjLS4wMDcuMDEzLS4wMi4wMi0uMDI2LjAzMi4wMTMtLjAwNi4wMi0uMDE5LjAzMi0uMDI1bC4wNjUtLjA2NWMuMDUyIDAgLjEwMy0uMDEzLjEzLS4wNjUuMDE4LS4wMi4wNDQtLjA0NS4wNjQtLjA2NC4wNjQgMCAuMTI5LS4wMDcuMTk0LS4wMDcuODk4LjYyNyAxLjgwMyAxLjI0OCAyLjcwMiAxLjg3NSAyLjY3NiAxLjg1NSA1LjM1MyAzLjcwNCA4LjAyMyA1LjU3Mi40NzguMzM3IDEuMDAyLjYyOCAxLjQyOCAxLjAzNS0uMTE2LjExLS4yNTguMDM5LS4zODguMDU4LjAwNy0uMTQ5LS4xMjItLjE4OC0uMjItLjI1Mi0uNDktLjM0My0uOTk1LS42NzItMS40NzMtMS4wMjgtLjgwMi0uNTg4LTEuNjE3LTEuMTUtMi40MzEtMS43Mi0uNjc5LS40NzItMS4zNTEtLjk2My0yLjA1LTEuNDA5LS42MDctLjM4OC0xLjE3LS44NTMtMS43NzctMS4yNDgtLjY4NS0uNDQtMS4zMzItLjkzLTIuMDEtMS4zNzctLjU2My0uMzY4LTEuMTEzLS43NjItMS42NjItMS4xNS0uMTEtLjA3OC0uMjA3LS4xMS0uMzIzLS4wMzMtLjIzMy4xNjgtLjUzLjI3OC0uNzI0LjQ2LS41NTYuNTEtMS4yMzUuODQtMS44MTcgMS4zMDUtLjc0My41ODktMS41NDUgMS4xMTItMi4zNCAxLjYzNi0xLjMxOS44NzMtMi41OTkgMS44MTYtMy45MTEgMi42OTZhNDMuNjk3IDQzLjY5NyAwIDAwLTIuMzA4IDEuNjI5Yy0uMjA3LjE1NS0uNDg1LjIyNi0uNjE0LjQ4NS0uMTMtLjAxMy0uMjcyLjAzOC0uMzk1LS4wNDYgMi4zMTUtMS42MTYgNC42My0zLjIyNiA2LjkzNy00Ljg0Mi4zMDQtLjIxMy42NDYtLjM4MS44OTktLjY2Ni4wNDUtLjAxMy4xMDMtLjAxOS4wOTctLjA4NCAwLS4wMDYtLjAxMy0uMDItLjAyLS4wMi0uMDY1LS4wMDYtLjA3Ny4wNDYtLjA5LjA5MS0uMjMzLjAxMy0uMzc1LjE5NC0uNTUuMzEtMi40NjMgMS43LTQuOTMyIDMuMzg4LTcuMzk1IDUuMDc1em0xMS4xMTktNy41NjRsLjA2NC0uMDY1Yy4wNTIgMCAuMTA0LS4wMTMuMTMtLjA2NGwuMDY0LS4wNjVjLjA1MiAwIC4xMDQtLjAxMy4xMy0uMDY1LjAwNi0uMDEzLjAxOS0uMDIuMDI1LS4wMzItLjAxMi4wMDYtLjAxOS4wMi0uMDMyLjAyNi0uMDUyIDAtLjEwMy4wMTMtLjEzLjA2NGwtLjA2NC4wNjVjLS4wNTEgMC0uMTAzLjAxMy0uMTMuMDY1LS4wMTguMDI2LS4wMzguMDQ1LS4wNTcuMDctLjAxMy4wMDctLjAyNi4wMTQtLjAzMy4wMjcuMDEzLS4wMDcuMDI2LS4wMTMuMDMzLS4wMjZ6bS0uODQuNTc1Yy0uMDUyIDAtLjEwNC4wMTMtLjEzLjA2NS0uMDM5LjAwNi0uMDkuMDA2LS4wOTcuMDY1IDAgLjAxMi4wMjYuMDM4LjAzOS4wMzguMDUyLS4wMDYuMDU4LS4wNTEuMDY1LS4wOS4wNTEtLjAwNy4wOTYtLjAxMy4xMjItLjA3OGEuMzExLjMxMSAwIDAwLjA3MS0uMDU4Yy4wNTIgMCAuMTA0LS4wMTMuMTMtLjA2NWwuMDY0LS4wNjRjLjA1MiAwIC4xMDQtLjAxMy4xMy0uMDY1LjAwNi0uMDEzLjAyLS4wMi4wMjYtLjAzMi0uMDEzLjAwNi0uMDIuMDItLjAzMy4wMjYtLjA1MSAwLS4xMDMuMDEzLS4xMy4wNjQtLjAxOC4wMi0uMDQ0LjA0Ni0uMDY0LjA2NS0uMDUxIDAtLjEwMy4wMTMtLjEyOS4wNjVsLS4wNjUuMDY0em0tLjg0MS41ODhjLS4wNTIgMC0uMTAzLjAxMy0uMTMuMDY1LS4wNTEuMDA3LS4xMDMuMDEzLS4wOTYuMDg0IDAgLjAwNy4wMTMuMDIuMDIuMDIuMDcuMDA2LjA3Ny0uMDQ2LjA4My0uMDk3LjA1Mi0uMDA3LjA5Ny0uMDIuMTIzLS4wNzIuMDI2LS4wMTIuMDQ1LS4wMzguMDcxLS4wNTguMDUyIDAgLjEwMy0uMDEzLjEzLS4wNjRsLjA2NC0uMDY1Yy4wNTIgMCAuMTAzLS4wMTMuMTMtLjA2NS4wMDYtLjAxMy4wMTktLjAxOS4wMjUtLjAzMi0uMDEzLjAwNy0uMDIuMDItLjAzMi4wMjYtLjA1MiAwLS4xMDQuMDEzLS4xMy4wNjVsLS4wNjQuMDY0Yy0uMDUyIDAtLjEwNC4wMTMtLjEzLjA2NWEuMzA2LjMwNiAwIDAwLS4wNjQuMDY0em0tLjY0Ny40NmMuMDUyLS4wMDcuMTA0LS4wMTMuMDk3LS4wODUgMC0uMDA2LS4wMTItLjAxOS0uMDE5LS4wMTktLjA3MS0uMDA2LS4wNzguMDQ1LS4wODQuMDk3LS4wNTIgMC0uMDk3LjAxMy0uMTMuMDY1YS4yMjMuMjIzIDAgMDAtLjE5My4xMjljLS4wNDUuMDEzLS4xMDQuMDEzLS4wOTcuMDg0IDAgLjAwNi4wMTMuMDIuMDIuMDIuMDY0LjAwNi4wNzctLjA0Ni4wODMtLjA5OC4wOSAwIC4xODEtLjAwNi4xOTQtLjEyOS4wNTgtLjAwNi4xMDQtLjAyLjEzLS4wNjV6bTIuMTI4LTEuNTMzYy0uMDA4LjAyNy0uMDI1LjA1NC0uMDMzLjA3Mi4wMjUuMDA5LjA1LjAzNS4wNjcuMDI3LjAxNi0uMDEuMDI1LS4wNDUuMDMzLS4wNzJhLjU1LjU1IDAgMDEtLjA2Ny0uMDI3em0tMS44MSAxLjM1Yy0uMDA4LS4wMjQtLjAxNS0uMDU2LS4wMy0uMDU2LS4wMTUtLjAwOC0uMDUyLjAwOC0uMDYuMDI0LS4wMjIuMDMzLS4wMDcuMDc0LjAzLjA3NC4wMjIgMCAuMDM3LS4wMjUuMDYtLjA0MXpNMTUuMzU1IDE5YS4xODUuMTg1IDAgMDEuMDM0LS4wNzJjLS4wMjUtLjAwOS0uMDUtLjAzNS0uMDY3LS4wMjYtLjAxNi4wMDgtLjAyNS4wNDQtLjAzMy4wNy4wMTcuMDEuMDQyLjAxOS4wNjcuMDI4em0tMy41MjYgMi40MDJjLS4wMTYtLjAyNC0uMDMxLS4wNS0uMDQtLjA1Ny0uMDE1IDAtLjA1NS4wMTYtLjA1NS4wMzMtLjAxNi4wNC4wMDguMDc0LjA0OC4wNjUuMDE2IDAgLjAzMS0uMDI0LjA0Ny0uMDR6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNCNkI1QUNcIixcbiAgICBkOiBcIk0yOC4xMjEgMjcuMDg1Yy0uNDI2LS40MTMtLjk0NC0uNjk4LTEuNDI4LTEuMDM0LTIuNjctMS44NjItNS4zNDctMy43MTctOC4wMjMtNS41NzMtLjg5OS0uNjI3LTEuODA0LTEuMjQ3LTIuNzAyLTEuODc0IDAtLjAyLS4wMDctLjA0Ni0uMDA3LS4wNjVsMy45OTUtMi43NzNjMi42OS0xLjg1NiA1LjM3OS0zLjcwNSA4LjA2Mi01LjU2LjA4NC0uMDU4LjE2OC0uMTM2LjI4NC0uMTM2djE3LjA3M2MtLjA1MS0uMDE5LS4xMTYtLjAzOC0uMTgtLjA1OHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0U2RTNENlwiLFxuICAgIGQ6IFwiTTQuMDczIDI3LjE0M2MuMTIzLS4yNTguNDA3LS4zMy42MTQtLjQ4NGE0Ny44NDUgNDcuODQ1IDAgMDEyLjMwOC0xLjYzYzEuMzEyLS44ODUgMi41OTItMS44MjMgMy45MS0yLjY5NS43OTYtLjUyNCAxLjU5OC0xLjA0OCAyLjM0MS0xLjYzNi41ODgtLjQ2NSAxLjI2LS43OTUgMS44MTctMS4zMDYuMi0uMTguNDktLjI5LjcyNC0uNDU5LjExLS4wODQuMjA3LS4wNTEuMzIzLjAzMy41NS4zODggMS4wOTkuNzgyIDEuNjYxIDEuMTUuNjguNDQ2IDEuMzI2Ljk0NCAyLjAxIDEuMzc3LjYwOC4zODggMS4xNy44NTQgMS43NzkgMS4yNDguNjk4LjQ0NiAxLjM3LjkzNyAyLjA0OSAxLjQxLjgxNC41NjggMS42MzUgMS4xMyAyLjQzIDEuNzE5LjQ4NS4zNTUuOTgzLjY4NSAxLjQ3NSAxLjAyOC4wOS4wNjQuMjI2LjEwMy4yMi4yNTItNy44ODgtLjAwNy0xNS43NzQtLjAwNy0yMy42NjEtLjAwN3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0IxMzkyRlwiLFxuICAgIGQ6IFwiTTI4LjMxNSAyNy4xNDNWMTAuMDdjLjI3OC0uMzA0LjY0LS40OTEuOTctLjczLjgxNC0uNTk1IDEuNjM1LTEuMTcgMi40NS0xLjc1Mi4wNTgtLjA0NS4xMTYtLjA5Ny4yLS4wOTcuMDA3LjExLjAxMy4yMTMuMDEzLjMyMyAwIDUuNTAyIDAgMTEuMDEuMDA3IDE2LjUxIDAgLjM3Ni0uMDEzLjc1LS4xMDQgMS4xMjYtLjE2MS42OTEtLjU3NSAxLjE3LTEuMjQ3IDEuNDA5LS43NDQuMjU5LTEuNTEzLjMzLTIuMjg5LjI4NHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0JFQkRCM1wiLFxuICAgIGQ6IFwiTTExLjUxNCAyMS41OWMtLjI1My4yODUtLjU5NS40NTMtLjkuNjY2YTI2NTAuMDc4IDI2NTAuMDc4IDAgMDEtNi45MzYgNC44NDJsLS4xMjkuMDM5YzAtLjA2NS4wMDctLjEyMy4wMDctLjE4OCAyLjQ3LTEuNjg3IDQuOTMyLTMuMzc0IDcuNDAyLTUuMDYxLjE3NC0uMTE3LjMxLS4zMDQuNTUtLjMxbC4wMDYuMDEyelwiXG4gIH0pKSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0dtYWlsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvR29sYW5nID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Hb2xhbmcoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00LjMxNSAxNy4zMDFjLjA0NS45NDYgMSAuNSAxLjQxNi4yMS40MTUtLjI5LjUtLjA0NS41Ni0uNmE5LjA3IDkuMDcgMCAwMC4wNDUtMS4wOSAyLjY3NiAyLjY3NiAwIDAwLTEuNzg2LjQ1NWMtLjI2LjE5LS43NDUuNzktLjI0IDFcIixcbiAgICBmaWxsOiBcIiNGNkQyQTJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQuODA1IDE3Ljk4N2EuNi42IDAgMDEtLjI3LS4wNi42Mi42MiAwIDAxLS4zMS0uNTVBLjQxLjQxIDAgMDE0IDE3LjA1YTEuMTUgMS4xNSAwIDAxLjUtLjgzIDIuNzUyIDIuNzUyIDAgMDExLjg0Ni0uNDdoLjA3NXYuMDc0Yy4wMS4yODYuMDAzLjU3Mi0uMDI1Ljg1NnYuMjVjLS4wMjUuMzktLjEuNDUtLjMuNWExLjExOCAxLjExOCAwIDAwLS4zLjE0NWMtLjI4OC4yMjMtLjYzLjM2NC0uOTkuNDF6bTEuMjcxLTIuMDY3YTIuNTAyIDIuNTAyIDAgMDAtMS40Ny40NSAxIDEgMCAwMC0uNDIuNjcxLjI1LjI1IDAgMDAuMTcuMjA1aC4wNXYuMDU1YS41LjUgMCAwMC4yMS40NSAxLjMxIDEuMzEgMCAwMDEuMDY1LS4zMSAxLjI5IDEuMjkgMCAwMS4zNC0uMTdjLjEzLS4wNDUuMTYtLjA1NS4xOC0uMzY1di0uMjVjLjAyNC0uMjUuMDM0LS41LjAzLS43NWgtLjE1NXYuMDE0elwiLFxuICAgIGZpbGw6IFwiIzAxMDEwMVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNC4zMTUgMTcuM2EuNzQ1Ljc0NSAwIDAwLjM3Ni0uMjF6XCIsXG4gICAgZmlsbDogXCIjQzdCMTk5XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00LjMxNSAxNy4zOTFhLjA5Mi4wOTIgMCAxMS0uMDU1LS4xNzVoLjA2YS41NC41NCAwIDAwLjI3NS0uMTYuMDkyLjA5MiAwIDAxLjA2LS4wMzUuMDkuMDkgMCAwMS4wNjguMDE3LjA5LjA5IDAgMDEuMDM1LjA2LjA5MS4wOTEgMCAwMS0uMDE4LjA2OC43LjcgMCAwMS0uMzYuMjJoLS4wNjV2LjAwNXpcIixcbiAgICBmaWxsOiBcIiMwMTAxMDFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuNDk2IDYuMDVDMi44OCA1LjA0OSA1LjU3MS40MyA4LjQ5OCAyLjMyMkw2LjQ5NiA2LjA1elwiLFxuICAgIGZpbGw6IFwiIzc0Q0RERFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNi41NDEgNi4xNTRoLS4wN2MtMS4wMy0uMjktMS42NjYtLjktMS43ODYtMS43MTZhMi4zOTYgMi4zOTYgMCAwMTEuMTE2LTIuMjYgMi40MjEgMi40MjEgMCAwMTIuNzIyLjA5bC4wNy4wNDRMNi41NCA2LjE1NHptLjUtNC4xOTJjLS40MSAwLS44MTEuMTItMS4xNTUuMzQ1QTIuMjExIDIuMjExIDAgMDA0Ljg1IDQuMzkzYy4xMS43MjYuNjcgMS4yNzYgMS41ODYgMS41NTFsMS45MDEtMy41ODdhMi41MDEgMi41MDEgMCAwMC0xLjI4LS4zOGwtLjAxNS0uMDE1elwiLFxuICAgIGZpbGw6IFwiIzAxMDEwMVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjIuNTY2IDEuOTc3YzIuODYyLTIuMDAxIDUuNDQ4IDIuNTAyIDIuMTIxIDMuNjY3bC0yLjEyMS0zLjY2N3pcIixcbiAgICBmaWxsOiBcIiM3NENERERcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI0LjY0NyA1Ljc1NGwtMi4yMDEtMy44MDIuMDY1LS4wNDVhMi4zNjIgMi4zNjIgMCAwMTIuNjI2LS4yMiAyLjQyNyAyLjQyNyAwIDAxMS4xOTYgMi4yNDFjLS4wNS41LS4zMiAxLjM1Ni0xLjYxNiAxLjgwMWwtLjA3LjAyNXptLTEuOTYxLTMuNzUybDIuMDQxIDMuNTMyYTEuOTU2IDEuOTU2IDAgMDAxLjQyNi0xLjYyIDIuMjQgMi4yNCAwIDAwLTEuMTA2LTIuMDc3IDIuMTI2IDIuMTI2IDAgMDAtMi4zNjEuMTY1elwiLFxuICAgIGZpbGw6IFwiIzAxMDEwMVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjMuMTgxIDI4LjkyOGMuNzI2LjQ1IDIuMDU2IDEuODExLjk2NiAyLjQ3MS0xLjA0Ni45NjEtMS42MzYtMS4wNTUtMi41NTctMS4zM2EyLjU0OSAyLjU0OSAwIDAxMS41OTEtMS4xNDF6XCIsXG4gICAgZmlsbDogXCIjRjZEMkEyXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMy41OTIgMzEuNzQ1aC0uMDRjLS40MTYtLjAyNS0uNzU2LS40My0xLjA4Ni0uODE2YTIuMzMgMi4zMyAwIDAwLS45LS43NzVsLS4xMi0uMDM1LjA3NC0uMTI1YTIuNjU2IDIuNjU2IDAgMDExLjY0Ni0xLjE3NmguMDY1Yy40NjYuMjkgMS40MjYgMS4xMyAxLjQyMSAxLjg5MWEuODM1LjgzNSAwIDAxLS40NS43MjUuOTA1LjkwNSAwIDAxLS42MS4zMXptLTEuODYxLTEuNzIxYy4zMzkuMi42MzMuNDY3Ljg2NS43ODUuMjE5LjM2LjU2LjYyOC45Ni43NTVhLjcxNi43MTYgMCAwMC41LS4yMzUuNjYxLjY2MSAwIDAwLjM3MS0uNThjMC0uNjEtLjc3LTEuMzc2LTEuMzA2LTEuNzIxYTIuMzUxIDIuMzUxIDAgMDAtMS4zODYuOTk2aC0uMDA1elwiLFxuICAgIGZpbGw6IFwiIzAxMDEwMVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjQuMTQ3IDMxLjQ5NGEuMDkuMDkgMCAwMS0uMDgtLjA1Yy0uMDUzLS4xMS0uMS0uMjI0LS4xNC0uMzRhMS41IDEuNSAwIDAwLS4zMy0uNjEuMDkxLjA5MSAwIDAxLS4wMjItLjA5OC4wOS4wOSAwIDAxLjE0Ny0uMDMyYy4xNzIuMTg4LjMuNDE0LjM3LjY2LjAzOS4xMS4wODQuMjE2LjEzNS4zMmEuMDkuMDkgMCAwMS0uMDQuMTJsLS4wNC4wM3pcIixcbiAgICBmaWxsOiBcIiMwMTAxMDFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEwLjE4OSAzMC40NjRjLS44NTYuMTMtMS4zMzYuOS0yLjA0NiAxLjI5YS42Mi42MiAwIDAxLTEuMDAxLS4yMzUuMzI1LjMyNSAwIDAxLS4yNi0uMTJjLS42Mi0xIC42NDUtMS42OTYgMS4zMS0yLjE4Ni45MzYtLjE4IDEuNTExLjYxNSAxLjk5NyAxLjI1elwiLFxuICAgIGZpbGw6IFwiI0Y2RDJBMlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNy42OTIgMzEuOTk1YS42MTMuNjEzIDAgMDEtLjE2IDAgLjc0Ljc0IDAgMDEtLjQzNS0uMzc1LjMwMS4zMDEgMCAwMS0uMjQ1LS4xM2MtLjYtLjk0Ni40Mi0xLjY2MiAxLjA5Ni0yLjEzN2wuMjM1LS4xN2MuOTQ1LS4xOSAxLjU0Ni41OSAyLjAyNiAxLjIybC4xMzUuMTgxaC0uMTVhMi41ODYgMi41ODYgMCAwMC0xLjI2Ni43MjVjLS4yMy4yMTItLjQ4Mi40LS43NS41NmExLjAwMSAxLjAwMSAwIDAxLS40ODYuMTI2em0tLjYtLjU4YS4yNDUuMjQ1IDAgMDEuMTA1IDBoLjAyNWwuMDQuMDhhLjU4LjU4IDAgMDAuMzM1LjMwNS42ODYuNjg2IDAgMDAuNS0uMTJjLjI2LS4xNTUuNTAzLS4zMzcuNzI2LS41NGEzIDMgMCAwMTEuMjA2LS43MzZjLS40Ni0uNi0xLTEuMjUtMS43ODYtMS4xbC0uMjI1LjE2Yy0uNjkuNS0xLjU0NiAxLjA5LTEuMDUxIDEuODg1YS4xNDYuMTQ2IDAgMDAuMTA1LjA3bC4wMi0uMDA1elwiLFxuICAgIGZpbGw6IFwiIzAxMDEwMVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNy4xNTcgMzEuNjE0YS4wOS4wOSAwIDAxLS4wOS0uMTJjLjAzNy0uMjQuMTM3LS40NjYuMjktLjY1NS4wNzItLjEuMTM2LS4yMDUuMTktLjMxNWEuMDkuMDkgMCAxMS4xNjUuMDc1Yy0uMDU4LjEyLS4xMjcuMjM2LS4yMDUuMzQ1LS4xMzIuMTctLjIxNy4zNzItLjI0NS41ODVhLjA5LjA5IDAgMDEtLjA2Ny4wODQuMDkuMDkgMCAwMS0uMDM4LjAwMnpNNi42NDcgNC43OGMtLjUtLjI1LS44MjYtLjU5Ni0uNTM2LTEuMTQ2LjI5LS41NS43Ny0uNDU1IDEuMjUxLS4yMDVsLS43MTUgMS4zNXptMTcuMjg1LS40OGMuNS0uMjUuODI1LS41OTYuNTM1LTEuMTQ2LS4yOS0uNTUtLjc3LS40NTYtMS4yNS0uMjA1bC43MTUgMS4zNXpcIixcbiAgICBmaWxsOiBcIiMwMTAxMDFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI3LjIxOSAxNy4xODFjLS4wNDUuOTQ2LTEuMDAxLjUtMS40MTYuMjEtLjQxNi0uMjktLjUtLjA0NS0uNTYtLjZhOS4wNjggOS4wNjggMCAwMS0uMDQ2LTEuMDkgMi42NzcgMi42NzcgMCAwMTEuNzg3LjQ1NGMuMjYuMTkuNzQ1Ljc5LjI0IDEuMDAxXCIsXG4gICAgZmlsbDogXCIjRjZEMkEyXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yNi43MjggMTcuODQ2YTIuMDQ2IDIuMDQ2IDAgMDEtLjk1NS0uMzYgMS4xMTcgMS4xMTcgMCAwMC0uMy0uMTQ1Yy0uMi0uMDctLjI3NS0uMTMtLjMtLjV2LS4yNWE2LjUxNiA2LjUxNiAwIDAxLS4wMjYtLjg1NnYtLjEyaC4wNzZhMi43NTEgMi43NTEgMCAwMTEuODQ2LjQ3IDEuMTUgMS4xNSAwIDAxLjUuODMuNDEyLjQxMiAwIDAxLS4yMjUuMzI2LjYyLjYyIDAgMDEtLjMxLjU1LjYwNS42MDUgMCAwMS0uMzA2LjA1NXptLTEuNDU2LTIuMDZjLS4wMDMuMjUuMDA3LjUuMDMuNzV2LjI1YzAgLjMwNS4wNDYuMzE1LjE4LjM2NS4xMjIuMDQuMjM2LjA5Ny4zNC4xN2ExLjMwNyAxLjMwNyAwIDAwMS4wNjcuMzEuNTAyLjUwMiAwIDAwLjIxLS40NXYtLjA2aC4wNWEuMjUuMjUgMCAwMC4xNy0uMjA1IDEuMDAyIDEuMDAyIDAgMDAtLjQyLS42NyAyLjU1MiAyLjU1MiAwIDAwLTEuNjI3LS40NnpcIixcbiAgICBmaWxsOiBcIiMwMTAxMDFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI3LjIxOCAxNy4xODFhLjc0Ni43NDYgMCAwMS0uMzc1LS4xOTV6XCIsXG4gICAgZmlsbDogXCIjQzdCMTk5XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yNy4yMTkgMTcuMjcxaC0uMDk1YS43LjcgMCAwMS0uMzUtLjI1LjA5LjA5IDAgMDEtLjAwNy0uMTAxLjA5MS4wOTEgMCAwMS4xNTItLjAxLjU0LjU0IDAgMDAuMjc1LjE2aC4wNmEuMTAxLjEwMSAwIDExLS4wMzUuMjAxelwiLFxuICAgIGZpbGw6IFwiIzAxMDEwMVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTUuNDA3LjA2NmMzLjYyMiAwIDcuMDA0LjUgOC43ODUgNC4wMDIgMS41ODYgMy44OTggMSA4LjEwNSAxLjI2NiAxMi4yMjMuMjEgMy41MzcuNjcgNy42MjQtLjk3IDEwLjkwNi0xLjcxNyAzLjQ0Mi02LjA1IDQuMjk3LTkuNjAxIDQuMTgyLTIuNzkyLS4xLTYuMTY0LTEtNy43NC0zLjU2Mi0xLjg1MS0zLjAwMi0uOTc2LTcuNDQ0LS44NC0xMC43NzEuMTYtMy45NDItMS4wNzEtNy45LjIyNS0xMS43NjJDNy44NzcgMS4yODIgMTEuNS4zNzYgMTUuNDAyLjA2NlwiLFxuICAgIGZpbGw6IFwiIzc0Q0RERFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTUuNTAyIDMxLjQ5NGgtLjYyYTEzLjIwMiAxMy4yMDIgMCAwMS00LjM1OC0uODcgNi45NjkgNi45NjkgMCAwMS0zLjQ1Ny0yLjczN2MtMS41MDEtMi40MjEtMS4yMy01Ljc2My0xLTguNzE1LjA2LS43NC4xMTQtMS40NDYuMTQtMi4xMDYuMDI2LTEuNC0uMDM0LTIuOC0uMTgtNC4xOTItLjIxMS0yLjUwMi0uNDMxLTUuMDg5LjQxLTcuNTk1YTYuNjQ0IDYuNjQ0IDAgMDEzLjUwMS00LjA0N0MxMS4yOS41NzIgMTIuOTQuMTkgMTUuMzY3IDBjMy41NzItLjAyNSA3LjA5NC40NzUgOC45MDUgNC4wMjIgMS4xNiAyLjg1MiAxLjE3NiA1LjkxNCAxLjE5NiA4Ljg3NiAwIDEuMTEgMCAyLjI1Ni4wOCAzLjM3NyAwIC4zNC4wNC42ODUuMDY1IDEuMDMuMjEgMy4yNDcuNDUgNi45MzQtMS4wNDYgOS45MTYtMS44NzEgMy43MzItNi41NzQgNC4yNzItOS4wNjUgNC4yNzJ6TTE1LjQwNy4xNTZjLTMuNzY4LjMyLTcuNDQgMS4xMy04Ljc5IDUuMTU4LS44MzEgMi40NzEtLjYxIDUuMDM4LS40MDYgNy41MDQuMTQ3IDEuNC4yMDcgMi44MDYuMTggNC4yMTMtLjAyNS42NjUtLjA4NSAxLjM3LS4xNCAyLjExNi0uMjMgMi45MjItLjUgNi4yMzkuOTY2IDguNjA1LjYxNSAxIDIuNTk2IDMuMzM3IDcuNjcgMy41MDIgMi4xOTYuMDggNy41MDQtLjE3IDkuNTA1LTQuMTQyIDEuNDctMi45NDIgMS4yMzYtNi41OTkgMS4wMjYtOS44MjYgMC0uMzUtLjA0NS0uNjk1LS4wNjUtMS4wM2E2Ny40NTEgNjcuNDUxIDAgMDEtLjA4LTMuMzUzYzAtMi45NDEtLjAzLTYuMDAzLTEuMTgxLTguODA1QTYuNDM4IDYuNDM4IDAgMDAyMC40NDUuODQxYTE0Ljk2IDE0Ljk2IDAgMDAtNS4wMzgtLjY4NXpcIixcbiAgICBmaWxsOiBcIiMwMTAxMDFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2LjA0MiA0LjkyNGMuNjUgMy43NzcgNi44MjQgMi43ODEgNS45MzgtMS4wMy0uNzk1LTMuNDE4LTYuMTUzLTIuNDcyLTUuOTM4IDEuMDN6XCIsXG4gICAgZmlsbDogXCIjZmZmXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xOC45NzkgNy4zOWEzLjQ1NyAzLjQ1NyAwIDAxLTEuMTMtLjE4NSAyLjc5NyAyLjc5NyAwIDAxLTEuODkyLTIuMjY2IDIuODgyIDIuODgyIDAgMDEuNzgtMi4yMjIgMy40MDcgMy40MDcgMCAwMTIuMDAyLTEgMy4yMDIgMy4yMDIgMCAwMTIuMDMxLjM1IDIuNzI3IDIuNzI3IDAgMDExLjI5NiAxLjgwNiAyLjY0MyAyLjY0MyAwIDAxLS43NyAyLjY4MiAzLjUwMiAzLjUwMiAwIDAxLTIuMzE3LjgzNXptLTIuODQ3LTIuNDc2YTIuNjI2IDIuNjI2IDAgMDAxLjc3NiAyLjEyNiAzLjQxNyAzLjQxNyAwIDAwMy4yNzctLjYyIDIuNTAyIDIuNTAyIDAgMDAuNzE2LTIuNTAyIDIuNjcyIDIuNjcyIDAgMDAtMy4xMzItMi4wMzEgMi44ODcgMi44ODcgMCAwMC0yLjYzNyAzLjAyN3pcIixcbiAgICBmaWxsOiBcIiMwMTAxMDFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguNjYzIDUuNTM5Yy44NCAzLjI4NyA2LjEwMyAyLjQ0MSA1LjkwOC0uODU1LS4yMzUtMy45NTMtNi43MTQtMy4yMDctNS45MDguODU1elwiLFxuICAgIGZpbGw6IFwiI2ZmZlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTEuNDc0IDcuNzA1YTMuMjMyIDMuMjMyIDAgMDEtMS41MzYtLjM3NSAyLjcyNyAyLjcyNyAwIDAxLTEuMzU1LTEuNzc2IDIuNzU3IDIuNzU3IDAgMDEuOTQtMi44MjcgMy41NTIgMy41NTIgMCAwMTMuNTMyLS40NSAyLjY3MiAyLjY3MiAwIDAxMS42MDEgMi40MDJjLjEwNSAxLjc1LTEuMjg2IDIuNzcxLTIuNjE3IDMuMDAxYTMuNjU3IDMuNjU3IDAgMDEtLjU2NS4wMjV6TTguNzYzIDUuNTJBMi43MzIgMi43MzIgMCAwMDEyLjAzIDcuNTJjMS4yNi0uMiAyLjU3Ni0xLjE2IDIuNDc2LTIuODA2YTIuNTAxIDIuNTAxIDAgMDAtMS41LTIuMjYyIDMuMzc3IDMuMzc3IDAgMDAtMy4zNTguNDMgMi41OTcgMi41OTcgMCAwMC0uODg1IDIuNjM3elwiLFxuICAgIGZpbGw6IFwiIzAxMDEwMVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYuNzY3IDkuNDgxYy4wNDkuNTIxLjA0OSAxLjA0NiAwIDEuNTY2YTEgMSAwIDAxLS41ODUuMzYuODYxLjg2MSAwIDAxLS42NTUtLjVjLS4wMzItLjU5LS4wMTctMS4xODMuMDQ1LTEuNzdsMS4xOTUuMzQ0elwiLFxuICAgIGZpbGw6IFwiI2ZmZlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYuMjM3IDExLjQ4M2gtLjAyNWEuOTQ0Ljk0NCAwIDAxLS43MjUtLjU2NiA1Ljk1IDUuOTUgMCAwMTAtMS4yMTVjMC0uMTg1LjAzLS4zOC4wMzUtLjU3di0uMTVsMS4zNS40MTR2LjA4NWMwIC4xNiAwIC4zMy4wMjYuNS4wNDUuMzU4LjA0NS43MiAwIDEuMDc2di4wMjVhLjc1Ljc1IDAgMDEtLjQ3Ni4zNGwtLjE1NS4wNmgtLjAzem0tLjU4LS42M2EuNzY2Ljc2NiAwIDAwLjU2LjQ0NWwuMTQtLjA1NmEuNi42IDAgMDAuMzY2LS4yNmMuMDQtLjMzMi4wNC0uNjY4IDAtMSAwLS4xNTUgMC0uMzA1LS4wMjYtLjQ1NWwtMS0uMzA2YzAgLjE1NSAwIC4zMS0uMDMuNDYtLjA0NC4zODgtLjA1Ljc3OC0uMDE1IDEuMTY2bC4wMDUuMDA1ek0xMC4xMTQgNS45NjRjLjQ5MSAwIC44OS0uNDMyLjg5LS45NjUgMC0uNTM0LS4zOTktLjk2Ni0uODktLjk2Ni0uNDkyIDAtLjg5LjQzMi0uODkuOTY2IDAgLjUzMy4zOTguOTY1Ljg5Ljk2NXpcIixcbiAgICBmaWxsOiBcIiMwMTAxMDFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEwLjUxOSA1LjQ2NGMuMTE2IDAgLjIxLS4xMS4yMS0uMjQ1cy0uMDk0LS4yNDUtLjIxLS4yNDVjLS4xMTYgMC0uMjEuMTEtLjIxLjI0NXMuMDk0LjI0NS4yMS4yNDV6XCIsXG4gICAgZmlsbDogXCIjZmZmXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNy41NjggNS43MjRjLjQ4MyAwIC44NzUtLjQzMi44NzUtLjk2NSAwLS41MzMtLjM5Mi0uOTY2LS44NzUtLjk2Ni0uNDg0IDAtLjg3Ni40MzMtLjg3Ni45NjYgMCAuNTMzLjM5Mi45NjUuODc2Ljk2NXpcIixcbiAgICBmaWxsOiBcIiMwMTAxMDFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE3Ljk2MyA1LjIyNGMuMTE0IDAgLjIwNi0uMTEuMjA2LS4yNDUgMC0uMTM2LS4wOTItLjI0NS0uMjA2LS4yNDUtLjExMyAwLS4yMDUuMTEtLjIwNS4yNDVzLjA5Mi4yNDUuMjA1LjI0NXpNMTQuMjY2IDkuNDA2Yy0uMzkuOTQxLjIxNSAyLjgyMiAxLjI3IDEuNDM2YTExLjEyIDExLjEyIDAgMDEuMDQ2LTEuNzdsLTEuMzE2LjMzNHpcIixcbiAgICBmaWxsOiBcIiNmZmZcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE0LjgxMiAxMS40MjhhLjUuNSAwIDAxLS4yNi0uMDdjLS40MjYtLjI0Ni0uNjkxLTEuMjUxLS4zOS0yLjAwMnYtLjA0bDEuNS0uMzh2LjEyYzAgLjE5NSAwIC4zOS0uMDM1LjU3NWE1LjcxIDUuNzEgMCAwMDAgMS4xODF2LjA2NWExLjA1NiAxLjA1NiAwIDAxLS44MTUuNTV6bS0uNDk2LTEuOTQ3Yy0uMjE1LjU4Ni0uMDQ1IDEuNTAxLjMzIDEuNzE2LjI3LjE1NS41Ny0uMTE1Ljc4LS4zODVhNi4xMjggNi4xMjggMCAwMTAtMS4xOGMwLS4xNDYgMC0uMy4wMzEtLjQ1bC0xLjE0LjN6XCIsXG4gICAgZmlsbDogXCIjMDEwMTAxXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNC4zOCA3LjU5NWExLjE0NiAxLjE0NiAwIDAwLS45NCAxLjYwMWMuNS45IDEuNjExLS4wOCAyLjMwMiAwIC43OTUgMCAxLjQ1Ljg0IDIuMDkuMTUuNzExLS43Ny0uMzA0LTEuNS0xLjEtMS44NTZsLTIuMzUxLjEwNXpcIixcbiAgICBmaWxsOiBcIiNGNkQyQTJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE3LjI2OCA5LjcyN2EyIDIgMCAwMS0uNzMtLjIwNiAyLjIwNyAyLjIwNyAwIDAwLS43OTEtLjIyYy0uMjg3IDAtLjU3LjA2Mi0uODMuMTgtLjU2MS4xOTUtMS4xOTYuNDE2LTEuNTU3LS4yM2ExLjA4IDEuMDggMCAwMTAtMS4wNSAxLjI4MSAxLjI4MSAwIDAxMS4wMDEtLjY4NmwyLjQwNi0uMTA1Yy41OS4yNSAxLjI2Ni43MDYgMS4zODEgMS4yMzZhLjk1NS45NTUgMCAwMS0uODggMS4wOHptLTEuNTAxLS42MDZjLjI5Ni4wMjQuNTg0LjEwNC44NS4yMzUuNDUuMTkuODA2LjMzNSAxLjE2Ni0uMDU1YS42NjQuNjY0IDAgMDAuMjA1LS42MDVjLS4xLS40Ni0uNzM1LS44OC0xLjI1Ni0xLjFsLTIuMzI2LjA5NGExLjExIDEuMTEgMCAwMC0uODUuNTkuOTA2LjkwNiAwIDAwMCAuODc2Yy4yODUuNS43OTUuMzM1IDEuMzQuMTUuMjc0LS4xMjIuNTctLjE4NS44Ny0uMTg1elwiLFxuICAgIGZpbGw6IFwiIzIzMUYyMFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTQuMjY2IDcuNTZjLS4wNTUtMS4yNSAyLjMzNi0xLjQxIDIuNjE3LS4zNi4yOCAxLjA1LTIuNTAyIDEuMjktMi42MTcuMzZ6XCIsXG4gICAgZmlsbDogXCIjMDEwMTAxXCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29Hb2xhbmc7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBodG1sSWRHZW5lcmF0b3IgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29Hb29nbGVHID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Hb29nbGVHKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBnZW5lcmF0ZUlkID0gaHRtbElkR2VuZXJhdG9yKCdsb2dvX2dvb2dsZV9nJyk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHhtbG5zWGxpbms6IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZGVmc1wiLCBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2EnKSxcbiAgICBkOiBcIk0xNS4zMTkgMy4yNzhjMC0xLjEzMS0uMTAyLTIuMjItLjI5LTMuMjY0SDB2Ni4xNzJoOC41ODdjLS4zNyAxLjk5NS0xLjQ5NCAzLjY4NS0zLjE4NCA0LjgxNnY0LjAwNGg1LjE1N2MzLjAxNy0yLjc3OCA0Ljc1OC02Ljg2OSA0Ljc1OC0xMS43Mjh6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnYycpLFxuICAgIGQ6IFwiTTE0LjM0MyAxMi45NTZjNC4zMDggMCA3LjkyLTEuNDMgMTAuNTYtMy44NjZsLTUuMTU3LTQuMDA0Yy0xLjQyOS45NTgtMy4yNTYgMS41MjMtNS40MDMgMS41MjMtNC4xNTYgMC03LjY3NC0yLjgwNi04LjkyOC02LjU3OEguMDg0djQuMTM0YzIuNjI1IDUuMjE1IDguMDIxIDguNzkgMTQuMjU5IDguNzl6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnZScpLFxuICAgIGQ6IFwiTTcuMDI4IDEwLjI1YTkuNTkgOS41OSAwIDAxLS41LTMuMDMyIDkuNTkgOS41OSAwIDAxLjUtMy4wMzJWLjA1MmgtNS4zM0ExNS45NSAxNS45NSAwIDAwMCA3LjIxOGMwIDIuNTc1LjYxNyA1LjAxMiAxLjY5NyA3LjE2Nmw1LjMzMS00LjEzNHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdnJyksXG4gICAgZDogXCJNMTQuMzQzIDYuMzkyYzIuMzQyIDAgNC40NDYuODA1IDYuMSAyLjM4Nmw0LjU3Ni00LjU3NkMyMi4yNTYgMS42MjcgMTguNjQ0LjA0NiAxNC4zNDMuMDQ2IDguMTA1LjA0NiAyLjcwOSAzLjYyMi4wODMgOC44MzZsNS4zMzIgNC4xMzRjMS4yNTQtMy43NyA0Ljc3Mi02LjU3OCA4LjkyOC02LjU3OHpcIlxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoMTUuOTU1IDEzLjA4NylcIlxuICB9LCBfX19FbW90aW9uSlNYKFwibWFza1wiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2InKSxcbiAgICBmaWxsOiBcIiNmZmZcIlxuICB9LCBfX19FbW90aW9uSlNYKFwidXNlXCIsIHtcbiAgICB4bGlua0hyZWY6IFwiI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdhJykpXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzQyODVGNFwiLFxuICAgIGZpbGxSdWxlOiBcIm5vbnplcm9cIixcbiAgICBtYXNrOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2InKSwgXCIpXCIpLFxuICAgIGQ6IFwiTS4wMDEgMTUuMDA2aDE1LjMxOFYuMDE0SC4wMDF6XCJcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgxLjYxMyAxOS4wMDMpXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcIm1hc2tcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdkJyksXG4gICAgZmlsbDogXCIjZmZmXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInVzZVwiLCB7XG4gICAgeGxpbmtIcmVmOiBcIiNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnYycpKVxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMzNEE4NTNcIixcbiAgICBmaWxsUnVsZTogXCJub256ZXJvXCIsXG4gICAgbWFzazogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdkJyksIFwiKVwiKSxcbiAgICBkOiBcIk0uMDg0IDEyLjk1NmgyNC44MTlWLjAzMUguMDg0elwiXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoMCA4Ljc4NClcIlxuICB9LCBfX19FbW90aW9uSlNYKFwibWFza1wiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2YnKSxcbiAgICBmaWxsOiBcIiNmZmZcIlxuICB9LCBfX19FbW90aW9uSlNYKFwidXNlXCIsIHtcbiAgICB4bGlua0hyZWY6IFwiI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdlJykpXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZCQkMwNFwiLFxuICAgIGZpbGxSdWxlOiBcIm5vbnplcm9cIixcbiAgICBtYXNrOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2YnKSwgXCIpXCIpLFxuICAgIGQ6IFwiTTAgMTQuMzg0aDcuMDI4Vi4wNTJIMHpcIlxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDEuNjEzKVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJtYXNrXCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnaCcpLFxuICAgIGZpbGw6IFwiI2ZmZlwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJ1c2VcIiwge1xuICAgIHhsaW5rSHJlZjogXCIjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2cnKSlcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRUE0MzM1XCIsXG4gICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiLFxuICAgIG1hc2s6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnaCcpLCBcIilcIiksXG4gICAgZDogXCJNLjA4NCAxMi45N2gyNC45MzVWLjA0NkguMDg0elwiXG4gIH0pKSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29Hb29nbGVHOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaHRtbElkR2VuZXJhdG9yIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvSGFwcm94eSA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvSGFwcm94eShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgZ2VuZXJhdGVJZCA9IGh0bWxJZEdlbmVyYXRvcignbG9nb19oYXByb3h5Jyk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgY2xpcFBhdGg6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnY2xpcDAnKSwgXCIpXCIpXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNi4wNSAxMy4yMzdsLTMuMTEtMy42MTJcIixcbiAgICBzdHJva2U6IFwiIzA1NDg2RFwiLFxuICAgIHN0cm9rZVdpZHRoOiAwLjEyLFxuICAgIHN0cm9rZU1pdGVybGltaXQ6IDEwXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNi4xMTcgMTAuNTI4bDIuNTA5IDMuNTEyXCIsXG4gICAgc3Ryb2tlOiBcIiMwNTQ4NkRcIixcbiAgICBzdHJva2VXaWR0aDogMC4wNixcbiAgICBzdHJva2VNaXRlcmxpbWl0OiAxMFxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2LjA1IDEzLjIzN2wzLjExLTMuNjEyTTE5Ljg2MyAxNy4xNWwzLjcxMi0zLjExTTE5Ljg2MyAxNy4xNWwzLjcxMiAzLjMxMU0xOS4xNiAyNC41NzVsLTMuMTEtMy41MTFNMTIuOTQgMjQuNTc1bDMuMTEtMy41MTFNOC42MjUgMjAuMjZsMy41MTItMy4xMU04LjYyNSAxNC4wNGwzLjUxMiAzLjExTTE2LjA1IDEzLjIzOGwtNy40MjUuODAyTTE2LjA1IDEzLjIzOGw3LjUyNS44MDJNMTkuODYzIDE3LjE1bC0uNzAyLTcuNTI1TTE5Ljg2MyAxNy4xNWwtLjcwMiA3LjQyNU0yMy41NzUgMjAuNDYxbC03LjUyNS42MDJNOC42MjUgMjAuMjYxbDcuNDI1LjgwM00xMi45NCAyNC41NzVsLS44MDMtNy40MjVNMTIuOTQgOS42MjVsLS44MDMgNy41MjVcIixcbiAgICBzdHJva2U6IFwiIzA1NDg2RFwiLFxuICAgIHN0cm9rZVdpZHRoOiAwLjEyLFxuICAgIHN0cm9rZU1pdGVybGltaXQ6IDEwXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNS4xMTQgMTUuMDQzbDMuNTExLTEuMDAzTTkuMzI4IDcuMTE3bDMuNjEyIDIuNTA5TTEzLjc0MyA1LjUxMmwtLjgwMyA0LjExM00xMy43NDMgNS41MTJsNS40MTggNC4xMTNNMTguMzU4IDUuNTEybC44MDMgNC4xMTNNMjIuNzczIDcuMTE3TDE5LjE2IDkuNjI2TTI1Ljk4MyAxMC41MjhsLTYuODIyLS45MDNNMjMuNTc1IDE0LjA0bDIuNDA4LTMuNTEyTTIzLjU3NSAxNC4wNGwzLjQxMiAxLjAwM00yMy41NzUgMTQuMDRsMy40MTIgNS4yMTdNMTguMzU4IDUuNTEyTDEyLjk0IDkuNjI1TTIzLjU3NiAxNC4wNGwtLjgwMy02LjkyM00yMy41NzUgMjAuNDYybDMuNDEyLTEuMjA0TTIzLjU3NSAyMC40NjJsMy40MTItNS40MThNMjMuNTc1IDIwLjQ2MWwyLjQwOCAzLjMxMk0yMy41NzYgMjAuNDYxbC0uODAzIDYuNzIzTTE5LjE2IDI0LjU3NWwzLjYxMyAyLjYwOU0xOS4xNiAyNC41NzVsNi44MjMtLjgwMk0xOS4xNiAyNC41NzVsLS44MDIgNC4yMTRNMTkuMTYgMjQuNTc1bC01LjQxNyA0LjIxNE0xMi45NCAyNC41NzVsLjgwMyA0LjIxNE0xMi45NCAyNC41NzVsNS40MTggNC4yMTRNMTIuOTQgMjQuNTc1bC0zLjYxMiAyLjYwOU0xMi45NCAyNC41NzVsLTYuODIzLS44MDJNOC42MjYgMjAuMjYxbC0yLjUwOSAzLjUxMk04LjYyNSAyMC4yNjFsLjcwMyA2LjkyM004LjYyNSAyMC4yNmwtMy41MTEtMS4wMDJNOC42MjUgMTQuMDRsLTMuNTExIDUuMjE3TTguNjI1IDIwLjI2bC0zLjUxMS01LjIxN005LjMyOCA3LjExN2wtLjcwMyA2LjkyM002LjExNyAxMC41MjhsNi44MjMtLjkwM1wiLFxuICAgIHN0cm9rZTogXCIjMDU0ODZEXCIsXG4gICAgc3Ryb2tlV2lkdGg6IDAuMDYsXG4gICAgc3Ryb2tlTWl0ZXJsaW1pdDogMTBcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05LjMyNyA3LjExN0w2LjcyIDUuODEzTTkuMzI4IDcuMTE3bC0uMjAxLTIuOTFNMTMuNzQyIDUuNTEyTDkuMTI3IDQuMjA3TTEzLjc0MiA1LjUxMmwtMi4wMDYtMi41MDlNMTMuNzQzIDUuNTEybC44MDItMi45MU05LjMyOCA3LjExN2wyLjQwOC00LjExNE0xOC4zNTggNS41MTJsLTMuODEzLTIuOTFNMTguMzU4IDUuNTEybC0uODAzLTMuMDFNMTMuNzQzIDUuNTEybDMuODEyLTMuMDFNMTguMzU4IDUuNTEybDIuMDA3LTIuNTA5TTIyLjc3MyA3LjExN2wtMi40MDgtNC4xMTRNMjIuNzczIDcuMTE3bC4zMDEtMi45MU0xOC4zNTggNS41MTJsNC43MTYtMS4zMDVNMjIuNzczIDcuMTE3bDIuNzA5LTEuNDA1TTIyLjc3MyA3LjExN2w0LjcxNi43MDNNMjUuOTgzIDEwLjUyOGwxLjUwNS0yLjcwOU0yNS45ODQgMTAuNTI4bC0uNTAyLTQuODE2TTI1Ljk4MyAxMC41MjhsMy4xMS0uM00yNS45ODMgMTAuNTI4bDQuMjE0IDIuMzA4TTI2Ljk4NyAxNS4wNDRsMi4xMDctNC44MTdNMjYuOTg3IDE1LjA0M2wzLjIxLTIuMjA3TTI2Ljk4NyAxNS4wNDNsMy42MTIuNzAzTTI2Ljk4NyAxOS4yNThsMy42MTItMy41MTJNMjYuOTg3IDE5LjI1OGwzLjcxMi0uNzAzTTI2Ljk4NyAxNS4wNDNsMy43MTIgMy41MTJNMjYuOTg3IDE5LjI1OGwzLjExIDIuMTA3TTI1Ljk4MyAyMy43NzNsNC4xMTQtMi40MDlNMjUuOTgzIDIzLjc3M2wzLjExLjNNMjYuOTg3IDE5LjI1OGwyLjEwNyA0LjgxNk0yNS45ODMgMjMuNzczbDEuNTA1IDIuNzA5TTI1Ljk4NCAyMy43NzNsLS41MDIgNC43MTVNMjUuNDgyIDI4LjQ4OGwtMi43MS0xLjMwNE0yMi43NzMgMjcuMTg0bC4yIDIuOTFNMjIuNzczIDI3LjE4NGw0LjcxNi0uNzAzTTIyLjc3MyAyNy4xODRsLTIuNDA4IDQuMTE0TTE4LjM1OCAyOC43OWwyLjAwNyAyLjUwOE0xOC4zNTggMjguNzlsNC42MTUgMS4zMDRNMTguMzU4IDI4Ljc5bC0uODAzIDMuMDFNMTguMzU4IDI4Ljc5bC0zLjgxMyAzLjAxTTEzLjc0MyAyOC43OWwuODAyIDMuMDFNMTMuNzQzIDI4Ljc5bDMuODEyIDMuMDFNMTMuNzQyIDI4Ljc5bC0yLjAwNiAyLjUwOE05LjMyOCAyNy4xODRsMi40MDggNC4xMTRNMTMuNzQyIDI4Ljc5bC00LjYxNSAxLjQwNE05LjMyOCAyNy4xODRsLS4yMDEgMy4wMU05LjMyOCAyNy4xODRsLTIuNzEgMS40MDRNNi4xMTcgMjMuNzczbC41MDIgNC44MTZNOS4zMjggMjcuMTg0bC00LjcxNi0uNzAzTTYuMTE3IDIzLjc3M2wtMS41MDUgMi43MDlNNi4xMTcgMjMuNzczbC0zLjExLjNNNi4xMTcgMjMuNzczbC00LjIxNC0yLjQwOU01LjExNCAxOS4yNThsLTMuMjEgMi4xMDdNNS4xMTQgMTkuMjU4TDEuNCAxOC41NTVNNS4xMTQgMTkuMjU4bC0yLjEwNyA0LjgxNk01LjExNCAxNS4wNDNMMS40IDE4LjU1NU01LjExNCAxOS4yNThMMS40IDE1Ljc0Nk01LjExNCAxNS4wNDNsLTMuMTEtMi4xMDZNNS4xMTQgMTUuMDQzbC0zLjcxMy43MDNNNS4xMTQgMTUuMDQ0bC0yLjAwNy00LjgxN002LjExNyAxMC41MjhsLTMuMDEtLjNNNi4xMTcgMTAuNTI4bC00LjExNCAyLjQwOE02LjExNyAxMC41MjhMNC43MTIgNy45Mk02LjExNyAxMC41MjhsLjYwMi00LjcxNU05LjMyOCA3LjExN2wtNC42MTYuODAzXCIsXG4gICAgc3Ryb2tlOiBcIiMwODNENUZcIixcbiAgICBzdHJva2VXaWR0aDogMC4wNSxcbiAgICBzdHJva2VNaXRlcmxpbWl0OiAxMFxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEzLjk0MyAxNS4yNDRoLTMuNjEydjMuNTkyaDMuNjEydi0zLjU5MnpNMTcuNzU2IDExLjMzMWgtMy42MTJ2My41OTJoMy42MTJ2LTMuNTkyek0xNy43NTYgMTkuMTU3aC0zLjYxMnYzLjU5MmgzLjYxMnYtMy41OTJ6TTIxLjY2OSAxNS4yNDRoLTMuNjEydjMuNTkyaDMuNjEydi0zLjU5MnpcIixcbiAgICBmaWxsOiBcIiMwMDZEQThcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIwLjM2NSA4LjQyMWgtMi41MDlWMTAuOWgyLjUwOVY4LjQyek0xNC4xNDQgOC4zMjFoLTIuNTA5djIuNDc4aDIuNTA5VjguMzIxek05LjgzIDEyLjgzNkg3LjMydjIuNDc4SDkuODN2LTIuNDc4ek05LjgzIDE4Ljk1Nkg3LjMydjIuNDc5SDkuODN2LTIuNDc5ek0yNC42NzkgMTguOTU2SDIyLjE3djIuNDc5aDIuNTA5di0yLjQ3OXpNMjQuNjc5IDEyLjczNkgyMi4xN3YyLjQ3OGgyLjUwOXYtMi40Nzh6XCIsXG4gICAgZmlsbDogXCIjMkY3N0JDXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02LjkyIDkuNjI1SDUuMzE0djEuNjc2SDYuOTJWOS42MjV6TTEwLjEzIDYuMjE0SDguNTI2djEuNjc1aDEuNjA2VjYuMjE0ek0xNC40NDUgNC42MDloLTEuNjA2djEuNjc1aDEuNjA2VjQuNjF6TTUuOTE2IDE0LjE0SDQuMzExdjEuNjc2aDEuNjA1VjE0LjE0ek0yNi43ODYgOS44MjZIMjUuMDh2MS42NDZoMS43MDZWOS44MjZ6TTIzLjU3NSA2LjQxNUgyMS44N1Y4LjA2aDEuNzA1VjYuNDE1ek0xOS4yNiA0LjgxaC0xLjcwNXYxLjY0NWgxLjcwNlY0LjgwOXpNMjcuNjg5IDE0LjQ0MWgtMS42MDV2MS42NDZoMS42MDVWMTQuNDR6XCIsXG4gICAgZmlsbDogXCIjMTM5QkQ3XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNC4xNDQgMjMuMjdoLTIuNTA5djIuNDc5aDIuNTA5di0yLjQ3OHpNMjAuMjY0IDIzLjI3aC0yLjUwOHYyLjQ3OWgyLjUwOHYtMi40Nzh6XCIsXG4gICAgZmlsbDogXCIjMkY3N0JDXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yNi42ODUgMjIuNzdIMjUuMDh2MS42NzVoMS42MDV2LTEuNjc2ek0yMy4zNzUgMjYuMDhIMjEuNzd2MS42NzZoMS42MDVWMjYuMDh6TTE5LjA2IDI3LjY4NmgtMS42MDV2MS42NzVoMS42MDV2LTEuNjc1ek0yNy41ODkgMTguMjU0aC0xLjYwNnYxLjY3NmgxLjYwNnYtMS42NzZ6TTYuOTIgMjIuOTdINS4yMTR2MS42NDZINi45MlYyMi45N3pNMTAuMDMgMjYuMzgxSDguMzI1djEuNjQ2aDEuNzA1VjI2LjM4ek0xNC40NDUgMjcuOTg3aC0xLjcwNnYxLjY0NWgxLjcwNnYtMS42NDV6TTUuODE2IDE4LjM1NUg0LjIxVjIwaDEuNjA2di0xLjY0NXpcIixcbiAgICBmaWxsOiBcIiMxMzlCRDdcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuMTIgNS4zMTFoLS45MDN2LjkzM2guOTAzdi0uOTMzek0xLjkwMyAxNS4yNDRIMXYuOTMzaC45MDN2LS45MzN6TTI1Ljc4MiA1LjIxaC0uOTAzdi45MzRoLjkwM1Y1LjIxek0yLjUwNSAxMi4zMzVoLS45MDN2LjkzM2guOTAzdi0uOTM0ek0xMi4xMzcgMi41MDJoLS45MDN2LjkzM2guOTAzdi0uOTMzek0zLjUwOCA5LjcyNmgtLjkwM3YuOTMzaC45MDN2LS45MzN6TTUuMTEzIDcuMzE4SDQuMjF2LjkzM2guOTAzdi0uOTMzek05LjYyOSAzLjgwNmgtLjkwM3YuOTAzaC45MDN2LS45MDN6TTE1LjA0NyAyLjFoLS45MDN2LjkwM2guOTAzVjIuMXpNMjMuMzc0IDMuNjA1aC0uOTAzdi45MzNoLjkwM3YtLjkzM3pNMjkuMjk1IDkuNzI2aC0uOTAzdi45MzNoLjkwM3YtLjkzM3pNMzAuNDk4IDEyLjMzNWgtLjkwM3YuOTMzaC45MDN2LS45MzR6TTI3LjY5IDcuMzE4aC0uOTA0di45MzNoLjkwM3YtLjkzM3pNMzAuOSAxNS4xNDRoLS45MDN2LjkzM2guOTAzdi0uOTMzek0xNy44NTYgMmgtLjkwM3YuOTMzaC45MDNWMnpNMjAuNjY1IDIuNjAyaC0uOTAzdi45MzNoLjkwM3YtLjkzM3pcIixcbiAgICBmaWxsOiBcIiMwM0E5REFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuMTIgNS4zMTFoLS45MDN2LjkzM2guOTAzdi0uOTMzek0xLjkwMyAxNS4yNDRIMXYuOTMzaC45MDN2LS45MzN6TTI1Ljc4MiA1LjIxaC0uOTAzdi45MzRoLjkwM1Y1LjIxek0yLjUwNSAxMi4zMzVoLS45MDN2LjkzM2guOTAzdi0uOTM0ek0xMi4xMzcgMi41MDJoLS45MDN2LjkzM2guOTAzdi0uOTMzek0zLjUwOCA5LjcyNmgtLjkwM3YuOTMzaC45MDN2LS45MzN6TTUuMTEzIDcuMzE4SDQuMjF2LjkzM2guOTAzdi0uOTMzek05LjYyOSAzLjgwNmgtLjkwM3YuOTAzaC45MDN2LS45MDN6TTE1LjA0NyAyLjFoLS45MDN2LjkwM2guOTAzVjIuMXpNMjMuMzc0IDMuNjA1aC0uOTAzdi45MzNoLjkwM3YtLjkzM3pNMjkuMjk1IDkuNzI2aC0uOTAzdi45MzNoLjkwM3YtLjkzM3pNMzAuNDk4IDEyLjMzNWgtLjkwM3YuOTMzaC45MDN2LS45MzR6TTI3LjY5IDcuMzE4aC0uOTA0di45MzNoLjkwM3YtLjkzM3pNMzAuOSAxNS4xNDRoLS45MDN2LjkzM2guOTAzdi0uOTMzek0xNy44NTYgMmgtLjkwM3YuOTMzaC45MDNWMnpNMjAuNjY1IDIuNjAyaC0uOTAzdi45MzNoLjkwM3YtLjkzM3pNMjUuNjgyIDI3Ljg4NmgtLjkwM3YuOTMzaC45MDN2LS45MzN6TTMxIDE3Ljk1M2gtLjkwM3YuOTMzSDMxdi0uOTMzek03LjEyIDI3Ljk4N2gtLjkwM3YuOTMzaC45MDN2LS45MzN6TTMwLjM5OCAyMC43NjNoLS45MDN2LjkzM2guOTAzdi0uOTMzek0yMC42NjUgMzAuNTk2aC0uOTAzdi45MzNoLjkwM3YtLjkzM3pNMjkuMjk1IDIzLjM3MWgtLjkwM3YuOTMzaC45MDN2LS45MzN6TTI3LjY5IDI1Ljc4aC0uOTA0di45MzJoLjkwM3YtLjkzM3pNMjMuMjc0IDI5Ljc5M2gtLjkwM3YuOTAyaC45MDN2LS45MDJ6TTE3Ljc1NiAzMS40OThoLS45MDN2LjkwM2guOTAzdi0uOTAzek05LjQyOCAyOS40OTJoLS45MDN2LjkzM2guOTAzdi0uOTMzek0zLjUwOCAyMy40NzJoLS45MDN2LjkzM2guOTAzdi0uOTMzek0yLjMwNCAyMC44NjNoLS45MDN2LjkzM2guOTAzdi0uOTMzek01LjAxMyAyNS44OEg0LjExdi45MzNoLjkwM3YtLjkzM3pNMS45MDMgMTcuOTUzSDF2LjkzM2guOTAzdi0uOTMzek0xNC45NDcgMzEuNDk4aC0uOTAzdi45MzNoLjkwMnYtLjkzM3pNMTIuMTM3IDMwLjU5NmgtLjkwM3YuOTMzaC45MDN2LS45MzN6XCIsXG4gICAgZmlsbDogXCIjMDNBOURBXCJcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwiZGVmc1wiLCBudWxsLCBfX19FbW90aW9uSlNYKFwiY2xpcFBhdGhcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdjbGlwMCcpXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0wIDBoMzJ2MzJIMFYwelwiLFxuICAgIGZpbGw6IFwiI2ZmZlwiXG4gIH0pKSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29IYXByb3h5OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaHRtbElkR2VuZXJhdG9yIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvSWJtID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29JYm0oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGdlbmVyYXRlSWQgPSBodG1sSWRHZW5lcmF0b3IoJ2xvZ29faWJtJyk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZGVmc1wiLCBudWxsLCBfX19FbW90aW9uSlNYKFwibGluZWFyR3JhZGllbnRcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdhJyksXG4gICAgeDE6IFwiOC4wMDUlXCIsXG4gICAgeDI6IFwiNTMuMzMlXCIsXG4gICAgeTE6IFwiNzkuMzIzJVwiLFxuICAgIHkyOiBcIjc5LjMyNCVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiMzQkRBREVcIixcbiAgICBzdG9wT3BhY2l0eTogMFxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIzMC40NzYlXCIsXG4gICAgc3RvcENvbG9yOiBcIiMzNkNFRTFcIixcbiAgICBzdG9wT3BhY2l0eTogMC4zODNcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMTAwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjMjFBMkVGXCJcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwibGluZWFyR3JhZGllbnRcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdiJyksXG4gICAgeDE6IFwiMTkuNDk2JVwiLFxuICAgIHgyOiBcIjcxLjMwOSVcIixcbiAgICB5MTogXCI4My4zNDQlXCIsXG4gICAgeTI6IFwiMTcuNjM4JVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzIwN0ZGQVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjEwMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzZFQUZGMVwiLFxuICAgIHN0b3BPcGFjaXR5OiAwXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImxpbmVhckdyYWRpZW50XCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnYycpLFxuICAgIHgxOiBcIjIxLjkwOSVcIixcbiAgICB4MjogXCIyMS45MDklXCIsXG4gICAgeTE6IFwiOTYuMzE0JVwiLFxuICAgIHkyOiBcIjI5LjQ1NCVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM0MkMxRTZcIixcbiAgICBzdG9wT3BhY2l0eTogMFxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCI1Ny4wNzYlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM2RkI5RUZcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCI4Ni43MTYlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM2MENCRTdcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIxMDAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM1Q0NGRTVcIixcbiAgICBzdG9wT3BhY2l0eTogMFxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJsaW5lYXJHcmFkaWVudFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2QnKSxcbiAgICB4MTogXCI5Ni4yMDUlXCIsXG4gICAgeDI6IFwiLTEuMTcyJVwiLFxuICAgIHkxOiBcIjEyLjY2NyVcIixcbiAgICB5MjogXCItMjIuMjUyJVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzZGQjlFRlwiLFxuICAgIHN0b3BPcGFjaXR5OiAwXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjIyLjQyNyVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzM4RDJFMFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjkxLjIwMyVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzZBQkZFQ1wiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjEwMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzVDQ0ZFNVwiLFxuICAgIHN0b3BPcGFjaXR5OiAwXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImxpbmVhckdyYWRpZW50XCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnZScpLFxuICAgIHgxOiBcIjkuNDA4JVwiLFxuICAgIHgyOiBcIjgwLjU4OSVcIixcbiAgICB5MTogXCI4Ny43NjQlXCIsXG4gICAgeTI6IFwiODMuMTM4JVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzEyNkNGRFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjEwMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzIxQTFFRlwiXG4gIH0pKSksIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzM4RDJFMFwiLFxuICAgIGQ6IFwiTTQuMjYyIDEzLjEyMmEuNjA0LjYwNCAwIDAxLS4zLS4wOGwtMi44NDQtMS42MjVhLjYxNy42MTcgMCAwMS0uMjk1LS43MzQuNjA4LjYwOCAwIDAxLjg2OC0uMzE1bDIuODQzIDEuNjI1Yy4yOS4xNTkuNDA1LjUxNC4yNjEuODFhLjYwMy42MDMgMCAwMS0uNTMzLjMyem00LjkxNC00Ljg2NGEuNjAzLjYwMyAwIDAxLS41MjItLjI5OEw3LjAxMiA1LjE0NGEuNjE1LjYxNSAwIDAxLjExNS0uNzgyLjYwNi42MDYgMCAwMS45MS4xNTdsMS42NCAyLjgxM2EuNjE3LjYxNyAwIDAxLS4xNTguODE5Yy0uMS4wNy0uMjIuMTA3LS4zNDMuMTA3em02LjEwNy0yLjQxNlYyLjYzNWEuNjI0LjYyNCAwIDAxLjU3NS0uNjM0LjYwNS42MDUgMCAwMS40NDMuMTY0LjU5My41OTMgMCAwMS4xODYuNDMxdjMuMjg1YS41OTMuNTkzIDAgMDEtLjE4Ni40My42MDUuNjA1IDAgMDEtLjQ0My4xNjUuNjI0LjYyNCAwIDAxLS41NzUtLjYzNHptNy4zMTIgMi40MTZhLjYwNC42MDQgMCAwMS0uMzQzLS4xMDcuNjE3LjYxNyAwIDAxLS4xNTktLjgybDEuNjQtMi44MTJhLjYwMi42MDIgMCAwMS45MTEtLjE1N2MuMjIzLjIuMjcxLjUyOC4xMTUuNzgyTDIzLjExNyA3Ljk2YS42MDMuNjAzIDAgMDEtLjUyMi4yOTh6bTQuOTE0IDQuODY0YS42MDIuNjAyIDAgMDEtLjUzNC0uMzE5LjYxNi42MTYgMCAwMS4yNjItLjgxbDIuODE4LTEuNjExYS42MjYuNjI2IDAgMDEuNzgzLjExMi41OTIuNTkyIDAgMDEtLjE1Ni45MDZsLTIuODczIDEuNjQzYS42MDQuNjA0IDAgMDEtLjMuMDh6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2EnKSwgXCIpXCIpLFxuICAgIGQ6IFwiTTE2LjUzNiAxOS42NDVsLTEuMjA0LS4wMDljLjAyNi0zLjM3NyAyLjE0Ni02LjM5MSA1LjMzNy03LjU4NWE4LjMwOCA4LjMwOCAwIDAxOS4wNjggMi4xOTdsLS44OTcuNzk1YTcuMDk3IDcuMDk3IDAgMDAtNy43NDUtMS44NzZjLTIuNzI2IDEuMDE5LTQuNTM3IDMuNTkzLTQuNTU5IDYuNDc4elwiLFxuICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoMCAyKVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdiJyksIFwiKVwiKSxcbiAgICBkOiBcIk0uMDI5IDIwLjkwOWMuMDIyLTMuMzU0IDIuNDc1LTYuMjA4IDUuODE1LTYuNzY0bC4yMDEgMS4xNzZjLTIuNzY0LjQ2LTQuNzk0IDIuODItNC44MTIgNS41OTZMLjAyOSAyMC45MXpcIixcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDAgMilcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnYycpLCBcIilcIiksXG4gICAgZDogXCJNOC4yNDYgMjQuNzM3YTEwLjYyNSAxMC42MjUgMCAwMTAtMTUuMTMxYzQuMjE5LTQuMTc4IDExLjA2LTQuMTc4IDE1LjI3OSAwYTEwLjg5IDEwLjg5IDAgMDExLjM4NCAxLjY3OGwtMS4wMDQuNjU3YTkuNTE3IDkuNTE3IDAgMDAtMS4yMzEtMS40OTJjLTMuNzUtMy43MTMtOS44MjgtMy43MTMtMTMuNTc3IDBhOS40NDIgOS40NDIgMCAwMDAgMTMuNDQ1bC0uODUxLjg0M3pcIixcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDAgMilcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnZCcpLCBcIilcIiksXG4gICAgZDogXCJNNS44MzYgMTMuMjM0Yy40MDQtMS4zMzIgMS4zMy0yLjU2IDIuNDEtMy42MjggNC4yMTktNC4xNzggMTEuMDYtNC4xNzggMTUuMjc5IDBhMTAuODkgMTAuODkgMCAwMTEuMzg0IDEuNjc4bC0xLjAwNC42NTdhOS41MTcgOS41MTcgMCAwMC0xLjIzMS0xLjQ5MmMtMy43NS0zLjcxMy05LjgyOC0zLjcxMy0xMy41NzcgMGE5LjQ3NCA5LjQ3NCAwIDAwLTIuMDc0IDMuMDZjLTEuNDUyIDMuNDUtMi4zNTggMy41OTMtMS4xODctLjI3NXpcIixcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDAgMilcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnZScpLCBcIilcIiksXG4gICAgZDogXCJNMjMuNTI0IDI3Ljg3SDYuOTZhNy4wMTIgNy4wMTIgMCAwMS00LjkyMi0yLjA1OUE2Ljg3NiA2Ljg3NiAwIDAxLjAyOSAyMC45MWwxLjIwNC4wMDlhNS42OSA1LjY5IDAgMDAxLjY2IDQuMDU1IDUuODAyIDUuODAyIDAgMDA0LjA3MSAxLjcwNWgxNi42MThjMi43OC4wMDIgNS4zMDItMS42MTYgNi40MzgtNC4xM2E2LjkyOSA2LjkyOSAwIDAwLTEuMTgtNy41MDVsLjg5Ny0uNzk1YTguMTEyIDguMTEyIDAgMDExLjM4NCA4Ljc4NWMtMS4zMjkgMi45NDMtNC4yNzkgNC44MzctNy41MzQgNC44MzhoLS4wNjN6XCIsXG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgwIDIpXCJcbiAgfSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvSWJtOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvSWJtTW9ubyA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvSWJtTW9ubyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0uMDQ3IDIyLjkwOWwxLjE4Ni4wMDlhNS42OSA1LjY5IDAgMDAxLjY2IDQuMDU1IDUuODAyIDUuODAyIDAgMDA0LjA3MSAxLjcwNWgxNi42MThjMi43OC4wMDIgNS4zMDItMS42MTYgNi40MzgtNC4xM2E2LjkyOSA2LjkyOSAwIDAwLTEuMTgtNy41MDVsLjg5Ny0uNzk1YTguMTEyIDguMTEyIDAgMDExLjM4NCA4Ljc4NWMtMS4zMjkgMi45NDMtNC4yNzkgNC44MzctNy41MzQgNC44MzhINi45NmE3LjAxMiA3LjAxMiAwIDAxLTQuOTIyLTIuMDZBNi44NzYgNi44NzYgMCAwMS4wMjkgMjIuOTFoLjAxOC0uMDE4Yy4wMTctMi43MSAxLjYyLTUuMDkxIDMuOTk3LTYuMi4xMTQtLjA1NC4zMi4yOS42MTkgMS4wM2E1LjcxIDUuNzEgMCAwMC0zLjQxMiA1LjE4bC0xLjE4Ni0uMDF6bTQuMjE1LTkuNzg3YS42MDQuNjA0IDAgMDEtLjMtLjA4bC0yLjg0NC0xLjYyNWEuNjE3LjYxNyAwIDAxLS4yOTUtLjczNC42MDguNjA4IDAgMDEuODY4LS4zMTVsMi44NDMgMS42MjVjLjI5LjE1OS40MDUuNTE0LjI2MS44MWEuNjAzLjYwMyAwIDAxLS41MzMuMzJ6bTQuOTE0LTQuODY0YS42MDMuNjAzIDAgMDEtLjUyMi0uMjk4TDcuMDEyIDUuMTQ0YS42MTUuNjE1IDAgMDEuMTE1LS43ODIuNjA2LjYwNiAwIDAxLjkxLjE1N2wxLjY0IDIuODEzYS42MTcuNjE3IDAgMDEtLjE1OC44MTljLS4xLjA3LS4yMi4xMDctLjM0My4xMDd6bTYuMTA3LTIuNDE2VjIuNjM1YS42MjQuNjI0IDAgMDEuNTc1LS42MzQuNjA1LjYwNSAwIDAxLjQ0My4xNjQuNTkzLjU5MyAwIDAxLjE4Ni40MzF2My4yODVhLjU5My41OTMgMCAwMS0uMTg2LjQzLjYwNS42MDUgMCAwMS0uNDQzLjE2NS42MjQuNjI0IDAgMDEtLjU3NS0uNjM0em03LjMxMiAyLjQxNmEuNjA0LjYwNCAwIDAxLS4zNDMtLjEwNy42MTcuNjE3IDAgMDEtLjE1OS0uODJsMS42NC0yLjgxMmEuNjAyLjYwMiAwIDAxLjkxMS0uMTU3Yy4yMjMuMi4yNzEuNTI4LjExNS43ODJMMjMuMTE3IDcuOTZhLjYwMy42MDMgMCAwMS0uNTIyLjI5OHptNC45MTQgNC44NjRhLjYwMi42MDIgMCAwMS0uNTM0LS4zMTkuNjE2LjYxNiAwIDAxLjI2Mi0uODFsMi44MTgtMS42MTFhLjYyNi42MjYgMCAwMS43ODMuMTEyLjU5Mi41OTIgMCAwMS0uMTU2LjkwNmwtMi44NzMgMS42NDNhLjYwNC42MDQgMCAwMS0uMy4wOHpNMTYuMzY2IDE5Ljc4SDE2YTIuMzIyIDIuMzIyIDAgMDEtLjMwMiAwYy0uMDktLjAxMS0uMTUyLjA1LS4wODYtLjE5NmE4LjIwNCA4LjIwNCAwIDAxNS4wNTctNS41MzMgOC4zMDggOC4zMDggMCAwMTkuMDY4IDIuMTk3bC0uODk3Ljc5NWE3LjA5NyA3LjA5NyAwIDAwLTcuNzQ1LTEuODc2IDcuMDA5IDcuMDA5IDAgMDAtNC4yODggNC42MTNjLS4xMTUuMzk5LS4xMTUuMzk5IDAgMGgtLjQ0ek02LjE1NCAyMy44MjZhMTAuNjI2IDEwLjYyNiAwIDAxMi4wOTItMTIuMjJjNC4yMTktNC4xNzggMTEuMDYtNC4xNzggMTUuMjc5IDBsLS44NTEuODQzYy0zLjc1LTMuNzEzLTkuODI4LTMuNzEzLTEzLjU3NyAwQTkuNDQyIDkuNDQyIDAgMDA3LjI2NCAyMy4zNmE2Ljk5IDYuOTkgMCAwMC0uNDE4LjE3MmwtLjIxMi4wOTQtLjE2Mi4wNzctLjA5NC4wMy0uMDkuMDM5Yy42NDgtLjI4Mi45NjUtLjQyLjk1LS40MTItLjAyNi4wMTUtMS4wNzMuNDg5LTEuMDg0LjQ2NnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0libU1vbm87IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29LYWZrYSA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvS2Fma2EoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMS41NjUgMTcuNjIzYy0xLjE3MyAwLTIuMjI1LjUyLTIuOTQ1IDEuMzM3bC0xLjg0NS0xLjMwNmMuMTk2LS41NC4zMDktMS4xMTguMzA5LTEuNzI0IDAtLjU5Ni0uMTA5LTEuMTY1LS4yOTgtMS42OTZsMS44NC0xLjI5M2EzLjkxNCAzLjkxNCAwIDAwMi45MzkgMS4zMzEgMy45MyAzLjkzIDAgMDAzLjkyNi0zLjkyNiAzLjkzIDMuOTMgMCAwMC0zLjkyNi0zLjkyNiAzLjkzIDMuOTMgMCAwMC0zLjkyNiAzLjkyNmMwIC4zODcuMDU4Ljc2MS4xNjMgMS4xMTVsLTEuODQyIDEuMjkzYTUuMDY4IDUuMDY4IDAgMDAtMy4xNC0xLjgyNVY4LjcxYTMuOTMyIDMuOTMyIDAgMDAzLjExOS0zLjg0MkEzLjkzIDMuOTMgMCAwMDEyLjAxMi45NDFhMy45MyAzLjkzIDAgMDAtMy45MjYgMy45MjYgMy45MyAzLjkzIDAgMDAzLjA0OCAzLjgyNHYyLjI0OWE1LjA3NSA1LjA3NSAwIDAwLTQuMTkzIDQuOTkgNS4wNzUgNS4wNzUgMCAwMDQuMjI5IDQuOTk1VjIzLjNhMy45MzEgMy45MzEgMCAwMC0zLjA4NCAzLjgzMyAzLjkzIDMuOTMgMCAwMDMuOTI2IDMuOTI2IDMuOTMgMy45MyAwIDAwMy45MjctMy45MjYgMy45MzEgMy45MzEgMCAwMC0zLjA4NC0zLjgzM3YtMi4zNzVhNS4wNyA1LjA3IDAgMDAzLjA4Ny0xLjc5NWwxLjg1NyAxLjMxNGMtLjEwMy4zNTEtLjE2LjcyMS0uMTYgMS4xMDVhMy45MyAzLjkzIDAgMDAzLjkyNiAzLjkyNiAzLjkzIDMuOTMgMCAwMDMuOTI2LTMuOTI2IDMuOTMgMy45MyAwIDAwLTMuOTI2LTMuOTI2em0wLTkuMThjMS4wNSAwIDEuOTAzLjg1MyAxLjkwMyAxLjkwM3MtLjg1NCAxLjkwMy0xLjkwMyAxLjkwM2ExLjkwNiAxLjkwNiAwIDAxLTEuOTA0LTEuOTAzYzAtMS4wNS44NTQtMS45MDQgMS45MDQtMS45MDR6TTEwLjEwOSA0Ljg2NmMwLTEuMDUuODU0LTEuOTAzIDEuOTAzLTEuOTAzIDEuMDUgMCAxLjkwNC44NTQgMS45MDQgMS45MDMgMCAxLjA1LS44NTQgMS45MDQtMS45MDQgMS45MDRhMS45MDYgMS45MDYgMCAwMS0xLjkwMy0xLjkwNHptMy44MDcgMjIuMjY2YzAgMS4wNS0uODU0IDEuOTAzLTEuOTA0IDEuOTAzYTEuOTA2IDEuOTA2IDAgMDEtMS45MDMtMS45MDNjMC0xLjA1Ljg1NC0xLjkwNCAxLjkwMy0xLjkwNCAxLjA1IDAgMS45MDQuODU0IDEuOTA0IDEuOTA0em0tMS45MDQtOC41NDhhMi42NTggMi42NTggMCAwMS0yLjY1NS0yLjY1NSAyLjY1OCAyLjY1OCAwIDAxMi42NTUtMi42NTUgMi42NTggMi42NTggMCAwMTIuNjU1IDIuNjU1IDIuNjU4IDIuNjU4IDAgMDEtMi42NTUgMi42NTV6bTkuNTUzIDQuODY3YTEuOTA2IDEuOTA2IDAgMDEtMS45MDQtMS45MDNjMC0xLjA1Ljg1NC0xLjkwNCAxLjkwNC0xLjkwNCAxLjA1IDAgMS45MDMuODU0IDEuOTAzIDEuOTA0IDAgMS4wNS0uODU0IDEuOTAzLTEuOTAzIDEuOTAzelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvS2Fma2E7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29LaWJhbmEgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0tpYmFuYShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRjA0RTk4XCIsXG4gICAgZDogXCJNNCAwdjI4Ljc4OUwyOC45MzUuMDE3elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxOZWdhdGl2ZVwiLFxuICAgIGQ6IFwiTTQgMTJ2MTYuNzg5bDExLjkwNi0xMy43MzhBMjQuNzIxIDI0LjcyMSAwIDAwNCAxMlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDBCRkIzXCIsXG4gICAgZDogXCJNMTguNDc5IDE2LjY2NEw2LjI2OCAzMC43NTRsLTEuMDczIDEuMjM3aDIzLjE5MWMtMS4yNTItNi4yOTItNC44ODMtMTEuNzE5LTkuOTA4LTE1LjMyN1wiXG4gIH0pKSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0tpYmFuYTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0t1YmVybmV0ZXMgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0t1YmVybmV0ZXMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNS44OS4wMDNhMi4xNCAyLjE0IDAgMDExLjAzLjIwNmwxMS4xMjcgNS4zMDRhMi4xMSAyLjExIDAgMDExLjE1IDEuNDI5bDIuNzUgMTEuOTIxYTIuMDkgMi4wOSAwIDAxLS40MTIgMS43ODNsLTcuNjk3IDkuNTZjLS40MDQuNS0xLjAxNi43OTItMS42NjMuNzkxTDkuODI3IDMxYy0uNjQ4IDAtMS4yNi0uMjkyLTEuNjY0LS43OTNsLTcuNy05LjU1OGEyLjEwNyAyLjEwNyAwIDAxLS40MS0xLjc4M0wyLjc5OCA2Ljk0NWEyLjExIDIuMTEgMCAwMTEuMTUxLTEuNDNMMTUuMDc0LjIxYy4yNTUtLjEyMi41MzItLjE5Mi44MTUtLjIwNnpNMTYgNC4wNmMtLjM2OCAwLS42NjcuMzMtLjY2Ny43MzhsLjAwMi4wMTljMCAuMDU1LS4wMDMuMTIyLS4wMDIuMTcuMDEuMjM2LjA2LjQxNi4wOTEuNjMyLjA1Ny40NjQuMTAzLjg0OS4wNzQgMS4yMDYtLjAyOC4xMzUtLjEyNy4yNTgtLjIxNi4zNDRsLS4wMTUuMjgxYTguNTY5IDguNTY5IDAgMDAtNS41NTUgMi42NjYgOS45OCA5Ljk4IDAgMDEtLjI0LS4xN2MtLjEyLjAxNi0uMjQuMDUzLS4zOTYtLjAzOC0uMjk4LS4yLS41Ny0uNDc3LS44OTgtLjgxLS4xNS0uMTYtLjI2LS4zMS0uNDM4LS40NjQtLjA0LS4wMzUtLjEwMy0uMDgyLS4xNDgtLjExOGEuNzkzLjc5MyAwIDAwLS40NjQtLjE3NS42NDIuNjQyIDAgMDAtLjUzLjIzNGMtLjIzLjI4OC0uMTU2LjcyNi4xNjMuOThsLjAxLjAwOGMuMDQ0LjAzNS4wOTguMDguMTM4LjExLjE5LjE0LjM2My4yMTIuNTUyLjMyMy4zOTguMjQ2LjcyOS40NS45OS42OTUuMTAzLjEwOC4xMi4zLjEzNC4zODNsLjIxNC4xOWE4LjU5MiA4LjU5MiAwIDAwLTEuMzYgNS45OThsLS4yNzguMDhjLS4wNzQuMDk2LS4xNzcuMjQ1LS4yODYuMjktLjM0My4xMDctLjcyOC4xNDctMS4xOTQuMTk1LS4yMTguMDE4LS40MDcuMDA4LS42MzkuMDUxLS4wNS4wMS0uMTIyLjAyOS0uMTc3LjA0MmwtLjAwNi4wMDEtLjAxLjAwM2MtLjM5My4wOTUtLjY0NS40NTUtLjU2NC44MS4wODIuMzU1LjQ2NS41Ny44Ni40ODVsLjAxLS4wMDEuMDEzLS4wMDRjLjA1NS0uMDEyLjEyNC0uMDI2LjE3Mi0uMDM5LjIyOC0uMDYuMzkzLS4xNS41OTctLjIyOC40NC0uMTU4LjgwNi0uMjkgMS4xNjEtLjM0MS4xNDktLjAxMi4zMDUuMDkxLjM4My4xMzVsLjI5LS4wNWE4LjY1NCA4LjY1NCAwIDAwMy44NCA0Ljc4N2wtLjEyLjI5Yy4wNDMuMTEzLjA5MS4yNjUuMDU5LjM3Ni0uMTMuMzM0LS4zNS42ODgtLjYwMyAxLjA4MS0uMTIyLjE4Mi0uMjQ3LjMyNC0uMzU3LjUzMi0uMDI2LjA1LS4wNi4xMjYtLjA4Ni4xNzktLjE3LjM2NS0uMDQ1Ljc4Ni4yODQuOTQ0LjMzLjE2Ljc0MS0uMDA4LjkxOS0uMzc1bC4wMDEtLjAwMXYtLjAwMmMuMDI1LS4wNTEuMDYxLS4xMi4wODMtLjE2OS4wOTQtLjIxNS4xMjUtLjQuMTkyLS42MDkuMTc2LS40NDIuMjczLS45MDUuNTE1LTEuMTk0LjA2Ny0uMDguMTc1LS4xMS4yODctLjE0bC4xNTEtLjI3M2E4LjYxNiA4LjYxNiAwIDAwNi4xNDUuMDE2bC4xNDIuMjU2Yy4xMTQuMDM3LjIzOS4wNTYuMzQuMjA2LjE4Mi4zMS4zMDYuNjc1LjQ1NyAxLjExOC4wNjYuMjA4LjEuMzkzLjE5NC42MS4wMjEuMDQ4LjA1Ny4xMTcuMDgyLjE3LjE3Ny4zNjcuNTkuNTM1LjkyLjM3Ni4zMy0uMTU4LjQ1NS0uNTguMjg0LS45NDUtLjAyNi0uMDUyLS4wNi0uMTI5LS4wODctLjE3OS0uMTEtLjIwOC0uMjM1LS4zNDgtLjM1Ny0uNTMtLjI1Mi0uMzkzLS40NjEtLjcyLS41OS0xLjA1NS0uMDU1LS4xNzMuMDA5LS4yOC4wNS0uMzkyLS4wMjUtLjAyOS0uMDc5LS4xOTItLjExLS4yNjhhOC42NTQgOC42NTQgMCAwMDMuODM4LTQuODIyYy4wODYuMDE0LjIzNi4wNC4yODUuMDUuMS0uMDY2LjE5Mi0uMTUyLjM3My0uMTM4LjM1NS4wNTIuNzIuMTgzIDEuMTYuMzQxLjIwNS4wNzguMzcuMTcuNTk4LjIzLjA0OC4wMTMuMTE3LjAyNS4xNzIuMDM3bC4wMTMuMDA0LjAxLjAwMmMuMzk1LjA4NS43NzgtLjEzMS44Ni0uNDg2LjA4LS4zNTUtLjE3MS0uNzE1LS41NjQtLjgxLS4wNTctLjAxMy0uMTM4LS4wMzUtLjE5My0uMDQ1LS4yMzItLjA0NC0uNDItLjAzMy0uNjQtLjA1MS0uNDY1LS4wNDktLjg1LS4wODktMS4xOTMtLjE5Ni0uMTQtLjA1NC0uMjM5LS4yMi0uMjg3LS4yODlsLS4yNy0uMDc4YTguNTcyIDguNTcyIDAgMDAtLjEzOS0zLjEwNCA4LjU5OSA4LjU5OSAwIDAwLTEuMjQ3LTIuODhjLjA2OC0uMDYyLjE5OS0uMTc3LjIzNi0uMjEuMDEtLjEyLjAwMS0uMjQ1LjEyNS0uMzc3LjI2Mi0uMjQ2LjU5Mi0uNDUuOTktLjY5NS4xOS0uMTEuMzY0LS4xODIuNTU0LS4zMjIuMDQzLS4wMzIuMTAxLS4wODIuMTQ2LS4xMTguMzItLjI1NS4zOTMtLjY5My4xNjQtLjk4LS4yMy0uMjg3LS42NzQtLjMxNC0uOTkzLS4wNi0uMDQ2LjAzNi0uMTA3LjA4My0uMTQ4LjExOC0uMTc5LjE1My0uMjkuMzA1LS40NC40NjQtLjMyOC4zMzMtLjYuNjExLS44OTguODEyLS4xMjkuMDc1LS4zMTguMDQ5LS40MDQuMDQ0bC0uMjUzLjE4YTguNzMyIDguNzMyIDAgMDAtNS41MjgtMi42NjYgMTYuMDM2IDE2LjAzNiAwIDAxLS4wMTUtLjI5N2MtLjA4Ny0uMDgzLS4xOTItLjE1NC0uMjE4LS4zMzMtLjAyOS0uMzU3LjAyLS43NDIuMDc2LTEuMjA2LjAzLS4yMTYuMDgyLS4zOTYuMDktLjYzMi4wMDMtLjA1MyAwLS4xMyAwLS4xODkgMC0uNDA4LS4yOTktLjczOC0uNjY3LS43Mzh6bS0uODM0IDUuMTU2bC0uMTk4IDMuNDg4LS4wMTQuMDA3YS41ODcuNTg3IDAgMDEtLjkzMi40NDlsLS4wMDYuMDAyLTIuODY0LTIuMDI3YTYuODYyIDYuODYyIDAgMDE0LjAxNC0xLjkxOXptMS42NjggMGE2LjkyMiA2LjkyMiAwIDAxMy45OSAxLjkybC0yLjg0NiAyLjAxNS0uMDEtLjAwNGEuNTg4LjU4OCAwIDAxLS45MzMtLjQ0OGwtLjAwMy0uMDAxLS4xOTgtMy40ODJ6bS02LjcyIDMuMjIybDIuNjE0IDIuMzM1LS4wMDMuMDE0YS41ODUuNTg1IDAgMDEtLjIzIDEuMDA4bC0uMDAzLjAxLTMuMzUyLjk2N2E2LjgzOCA2LjgzOCAwIDAxLjk3My00LjMzNHptMTEuNzUzLjAwMWMuMzg4LjYzLjY4MyAxLjMzMS44NTggMi4wOTNhNi45MSA2LjkxIDAgMDEuMTQ1IDIuMjI5bC0zLjM3LS45Ny0uMDAyLS4wMTNhLjU4Ni41ODYgMCAwMS0uMjMtMS4wMDhsLS4wMDItLjAwNyAyLjYtMi4zMjR6bS02LjQwNCAyLjUxNWgxLjA3MWwuNjY2LjgzLS4yMzkgMS4wMzgtLjk2Mi40NjEtLjk2NC0uNDYzLS4yNC0xLjAzNy42NjgtLjgzem0zLjQzNSAyLjg0NGEuNTg1LjU4NSAwIDAxLjEzNS4wMWwuMDA1LS4wMDggMy40NjguNTg2YTYuODU4IDYuODU4IDAgMDEtMi43NzYgMy40ODFsLTEuMzQ2LTMuMjQ2LjAwNC0uMDA1YS41ODYuNTg2IDAgMDEuNTEtLjgxOHptLTUuODI0LjAxNGEuNTg3LjU4NyAwIDAxLjUzLjgxN2wuMDEuMDEyLTEuMzMxIDMuMjE0YTYuODg2IDYuODg2IDAgMDEtMi43NjctMy40NThsMy40MzctLjU4Mi4wMDYuMDA3YS41OTUuNTk1IDAgMDEuMTE1LS4wMXptMi45MDQgMS40MDdhLjU4Mi41ODIgMCAwMS4yNzUuMDU5LjU4My41ODMgMCAwMS4yNjMuMjVoLjAxM2wxLjY5NCAzLjA1N2MtLjIyLjA3My0uNDQ2LjEzNi0uNjc3LjE4OWE2Ljg5NiA2Ljg5NiAwIDAxLTMuNzU4LS4xOTRsMS42OS0zLjA1aC4wMDNhLjU4OC41ODggMCAwMS40OTctLjMxelwiLFxuICAgIGZpbGw6IFwiIzMyNkNFNVwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvS3ViZXJuZXRlczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0xvZ2dpbmcgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0xvZ2dpbmcoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMDgwRDVcIixcbiAgICBkOiBcIk0yIDEwdjEzYTkgOSAwIDAxOSA5aDEzYzAtMTIuMTUtOS44NS0yMi0yMi0yMlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxOZWdhdGl2ZVwiLFxuICAgIGQ6IFwiTTE0IDEzLjU2NVYzMmgxMGMwLTcuNzIyLTMuOTgxLTE0LjUxLTEwLTE4LjQzNlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDBCRkIzXCIsXG4gICAgZDogXCJNMTQgMHYxMC4yMjZDMjEuNjY2IDE0LjQ2OCAyNi44NjkgMjIuNjM2IDI2Ljg2OSAzMkgzMFYxNmMwLTguODM3LTcuMTYzLTE2LTE2LTE2XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29Mb2dnaW5nOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvTG9nc3Rhc2ggPSBmdW5jdGlvbiBFdWlJY29uTG9nb0xvZ3N0YXNoKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjM0VCRUIwXCIsXG4gICAgZDogXCJNMTkgMzJoMTFWMjBIMTl6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRUM1MTRcIixcbiAgICBkOiBcIk00IDBIM3YyMGgxM3YtOEMxNiA1LjM3MyAxMC42MjcgMCA0IDBcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsTmVnYXRpdmVcIixcbiAgICBkOiBcIk0zIDIwYzAgNi42MjcgNS4zNzMgMTIgMTIgMTJoMVYyMEgzelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvTG9nc3Rhc2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29NYXBzID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29NYXBzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMjJBN0YzXCIsXG4gICAgZDogXCJNMjUuNSA5LjVjMCA2LjY1LTkuNSAxMS40MjUtOS41IDExLjQyNVM2LjUgMTYuMTUgNi41IDkuNUE5LjUgOS41IDAgMDExNiAwYTkuNSA5LjUgMCAwMTkuNSA5LjVcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsTmVnYXRpdmVcIixcbiAgICBkOiBcIk0xNiAyMC45MjVzNC4zMjYtMi4xODMgNy4xNDEtNS42NDVsLTIuNTA1LTEuODc4YTcuNzI1IDcuNzI1IDAgMDAtOS4yNzIgMEw4Ljg1OSAxNS4yOEMxMS42NzQgMTguNzQyIDE2IDIwLjkyNSAxNiAyMC45MjVcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZBNzQ0RVwiLFxuICAgIGQ6IFwiTTI1LjUzIDE3LjA3M2EyMS4xMjQgMjEuMTI0IDAgMDEtMi44MzQgMi45MTZjLTIuNjIgMi4yMzUtNS4yMzkgMy41NjEtNS4zNDkgMy42MTZMMTYgMjQuMjgybC0xLjM0OC0uNjc3Yy0uMTA5LS4wNTUtMi43MjgtMS4zODEtNS4zNDktMy42MTZhMjEuMTgyIDIxLjE4MiAwIDAxLTIuODM0LTIuOTE2TDAgMjEuOTI1bDExLjM2NCA4LjUyM2E3LjcyNCA3LjcyNCAwIDAwOS4yNzEgMEwzMiAyMS45MjVsLTYuNDctNC44NTJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29NYXBzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaHRtbElkR2VuZXJhdG9yIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvTWVtY2FjaGVkID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29NZW1jYWNoZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGdlbmVyYXRlSWQgPSBodG1sSWRHZW5lcmF0b3IoJ2xvZ29fbWVtY2FjaGVkJyk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZGVmc1wiLCBudWxsLCBfX19FbW90aW9uSlNYKFwicmFkaWFsR3JhZGllbnRcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdjJyksXG4gICAgY3g6IFwiNDEuNDA2JVwiLFxuICAgIGN5OiBcIjQyLjcwOCVcIixcbiAgICByOiBcIjAlXCIsXG4gICAgZng6IFwiNDEuNDA2JVwiLFxuICAgIGZ5OiBcIjQyLjcwOCVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiNEQjdDN0NcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIxMDAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiNDODM3MzdcIlxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJyYWRpYWxHcmFkaWVudFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2QnKSxcbiAgICBjeDogXCI0NC4yNzElXCIsXG4gICAgY3k6IFwiNDIuNzA4JVwiLFxuICAgIHI6IFwiMCVcIixcbiAgICBmeDogXCI0NC4yNzElXCIsXG4gICAgZnk6IFwiNDIuNzA4JVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0RCN0M3Q1wiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjEwMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0M4MzczN1wiXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImxpbmVhckdyYWRpZW50XCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnYScpLFxuICAgIHgxOiBcIjUwJVwiLFxuICAgIHgyOiBcIjUwJVwiLFxuICAgIHkxOiBcIjEwMCVcIixcbiAgICB5MjogXCIwJVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzU3NEM0QVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjEwMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzgwNzE2RFwiXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImxpbmVhckdyYWRpZW50XCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnYicpLFxuICAgIHgxOiBcIjg4Ljc3OCVcIixcbiAgICB4MjogXCIzMC4xNDklXCIsXG4gICAgeTE6IFwiOTguMzQyJVwiLFxuICAgIHkyOiBcIi04LjY4JVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzI2OEQ4M1wiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjEwMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzJFQTE5RVwiXG4gIH0pKSksIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdhJyksIFwiKVwiKSxcbiAgICBkOiBcIk0wIDIxLjU2N1YxMC4zNTJDMCAxLjI5NCAxLjI5MyAwIDEwLjM0MiAwaDExLjIzNmM5LjA0OSAwIDEwLjM0MSAxLjI5NCAxMC4zNDEgMTAuMzUydjExLjIxNWMwIDkuMDU5LTEuMjkyIDEwLjM1Mi0xMC4zNDEgMTAuMzUySDEwLjM0MkMxLjI5MiAzMS45MiAwIDMwLjYyNiAwIDIxLjU2N3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnYicpLCBcIilcIiksXG4gICAgZDogXCJNNi44ODkgNi4wMTZDNS4zMiAxNS45NiA2LjE0IDI1LjI3IDYuMTQgMjUuMjdoNC45MDRjLS40NjYtMi40ODMtMi4xNC0xMy44MjQtLjc0OC0xMy44NjEuNzQ2LjExOCA0LjE1NiA5LjYyMSA0LjE1NiA5LjYyMXMuNzUxLS4wOTMgMS41MDctLjA5M2MuNzU1IDAgMS41MDYuMDkzIDEuNTA2LjA5M3MzLjQxLTkuNTAzIDQuMTU3LTkuNjIxYzEuMzkyLjAzNy0uMjgyIDExLjM3OC0uNzQ4IDEzLjg2aDQuOTA0cy44Mi05LjMxLS43NDgtMTkuMjUzaC00LjU0Yy0uODY1LjAxLTQuMTUzIDUuNzc3LTQuNTMxIDUuNzc3LS4zNzggMC0zLjY2Ni01Ljc2Ny00LjUzLTUuNzc3SDYuODg5elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdjJyksIFwiKVwiKSxcbiAgICBkOiBcIk0xNC45OTMgMjQuMTA5YTEuMTYgMS4xNiAwIDExLTIuMzIyIDAgMS4xNiAxLjE2IDAgMDEyLjMyMiAwelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdkJyksIFwiKVwiKSxcbiAgICBkOiBcIk0xOS4yNDkgMjQuMTA5YTEuMTYgMS4xNiAwIDExLTIuMzIyIDAgMS4xNiAxLjE2IDAgMDEyLjMyMiAwelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDAwXCIsXG4gICAgZDogXCJNMjQuOCA2LjM0NWMuNzA3IDQuNzkuODczIDkuMzg4Ljg2IDEyLjgxMy0uMDEzIDMuNTAzLS4yMTQgNS43OC0uMjE0IDUuNzhoLTQuMTI4bC0uNDQzLjMzMmg0LjkwNHMuODItOS4zMS0uNzQ4LTE5LjI1NGwtLjIzMi4zMjl6bS0xMi45OTYtLjEyMWMxLjI4OCAxLjQzMyAzLjUxNiA1LjIzNyAzLjgyMyA1LjIzNy0uODE3LTEuMDQ1LTIuODIzLTQuMzc4LTMuODIzLTUuMjM3em0tMS44NCA0Ljg1MmMtMS4zOTIuMDM4LjI4MiAxMS4zNzkuNzQ5IDEzLjg2MUg2LjQzbC0uMjkuMzMzaDQuOTA0Yy0uNDY0LTIuNDctMi4xMjMtMTMuNzEtLjc2OS0xMy44NjEtLjEyNi0uMTktLjIzNS0uMzItLjMxMS0uMzMzem0xMS4zMjYgMGMtLjc0Ni4xMTktNC4xNTYgOS42MjItNC4xNTYgOS42MjJzLS43NTEtLjA5NC0xLjUwNy0uMDk0Yy0uNDQ3IDAtLjgzMi4wMjgtMS4wOTIuMDUybC0uMDgyLjM3NHMuNzUxLS4wOTMgMS41MDctLjA5M2MuNzU1IDAgMS41MDYuMDkzIDEuNTA2LjA5M3MzLjM4NS05LjQ0IDQuMTQ2LTkuNjIxYy0uMDgyLS4yMDgtLjE4My0uMzMtLjMyMi0uMzMzelwiLFxuICAgIG9wYWNpdHk6IDAuMVxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZGRlwiLFxuICAgIGQ6IFwiTTYuODg5IDYuMDE2QzUuMzIgMTUuOTYgNi4xNCAyNS4yNyA2LjE0IDI1LjI3bC4yODktLjMyNWMtLjE0OC0yLjE5Ny0uNTQzLTEwLjE0Ljc5MS0xOC41OTdoNC41NDFjLjA5Ni4wMDIuMjI1LjA4LjM3NC4yMDgtLjI5Ny0uMzMtLjU0NC0uNTM4LS43MDYtLjU0SDYuODg5em0xMy42MDEgMGMtLjg2NC4wMS00LjE1MiA1Ljc3Ny00LjUzIDUuNzc3LjE1NC4xOTcuMjc5LjMzMy4zMzIuMzMzLjM3OCAwIDMuNjY2LTUuNzY3IDQuNTMtNS43NzdoNC4wMDhsLjItLjMzM2gtNC41NHptLTkuODgxIDUuNzI1YzEuMTAzIDEuNjU3IDMuODQ0IDkuMjkgMy44NDQgOS4yOWwuMDgtLjM3M2MtLjY3Ni0xLjg1Ni0zLjI1Ni04LjgxNC0zLjkwMy04LjkxN2gtLjAyMXptMTEuMzQ2IDBjLjc0IDEuODg3LS42NiAxMS4yOTUtMS4wOCAxMy41MjlsLjQ0NC0uMzQ4Yy41NjgtMy4zMzEgMS45MzYtMTMuMTQ2LjYzNi0xMy4xOHpcIixcbiAgICBvcGFjaXR5OiAwLjNcbiAgfSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvTWVtY2FjaGVkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvTWV0cmljcyA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvTWV0cmljcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRjA0RTk4XCIsXG4gICAgZDogXCJNMiAzMmgyOFYyMGwtNi40NjUtNi40NjVhNSA1IDAgMDAtNy4wNyAwTDIgMjh2NHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsTmVnYXRpdmVcIixcbiAgICBkOiBcIk0xNi40NjUgMTMuNTM1bC0zLjUzNiAzLjUzNmE5Ljk2NSA5Ljk2NSAwIDAwNy4wNyAyLjkzIDkuOTY1IDkuOTY1IDAgMDA3LjA3Mi0yLjkzbC0zLjUzNi0zLjUzNmE1IDUgMCAwMC03LjA3IDBcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZFQzUxNFwiLFxuICAgIGQ6IFwiTTE0LjM0MyAxMS40MTRBNy45NTEgNy45NTEgMCAwMTIwIDkuMDcxYzIuMTM3IDAgNC4xNDYuODMyIDUuNjU3IDIuMzQzbDMuMjA3IDMuMjA3QTkuOTU1IDkuOTU1IDAgMDAzMCAxMC4wMDFjMC01LjUyNC00LjQ3Ny0xMC0xMC0xMC01LjUyMiAwLTEwIDQuNDc2LTEwIDEwIDAgMS42NjcuNDE0IDMuMjM3IDEuMTM3IDQuNjJsMy4yMDYtMy4yMDd6XCJcbiAgfSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvTWV0cmljczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb01vbmdvZGIgPSBmdW5jdGlvbiBFdWlJY29uTG9nb01vbmdvZGIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkZGXCIsXG4gICAgZDogXCJNMTYuODQ0IDMxLjg0N2wtLjg0Ny0uMjlzLjEwNC00LjMxNS0xLjQ0NS00LjYyNWMtMS4wMzItMS4xOTguMTY1LTUwLjggMy44ODItLjE2NSAwIDAtMS4yOC42NC0xLjUwNyAxLjczNS0uMjQ4IDEuMDc0LS4wODMgMy4zNDUtLjA4MyAzLjM0NXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0E2QTM4NVwiLFxuICAgIGQ6IFwiTTE2Ljg0NCAzMS44NDdsLS44NDctLjI5cy4xMDQtNC4zMTUtMS40NDUtNC42MjVjLTEuMDMyLTEuMTk4LjE2NS01MC44IDMuODgyLS4xNjUgMCAwLTEuMjguNjQtMS41MDcgMS43MzUtLjI0OCAxLjA3NC0uMDgzIDMuMzQ1LS4wODMgMy4zNDV6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRkZcIixcbiAgICBkOiBcIk0xNy4yOTkgMjcuNjc2czcuNDEzLTQuODc0IDUuNjc4LTE1LjAxM2MtMS42NzItNy4zNzItNS42MTYtOS43ODgtNi4wNS0xMC43MTgtLjQ3NS0uNjYtLjkzLTEuODE3LS45My0xLjgxN2wuMzEgMjAuNTA2YzAgLjAyLS42NCA2LjI3OC45OTIgNy4wNDJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzQ5OUQ0QVwiLFxuICAgIGQ6IFwiTTE3LjI5OSAyNy42NzZzNy40MTMtNC44NzQgNS42NzgtMTUuMDEzYy0xLjY3Mi03LjM3Mi01LjYxNi05Ljc4OC02LjA1LTEwLjcxOC0uNDc1LS42Ni0uOTMtMS44MTctLjkzLTEuODE3bC4zMSAyMC41MDZjMCAuMDItLjY0IDYuMjc4Ljk5MiA3LjA0MlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkZGXCIsXG4gICAgZDogXCJNMTUuNTY0IDI3Ljk0NHMtNi45Ni00Ljc1LTYuNTQ2LTEzLjExM2MuMzkyLTguMzYzIDUuMzA3LTEyLjQ3MyA2LjI1Ny0xMy4yMTYuNjItLjY2LjY0LS45MDkuNjgxLTEuNTcuNDM0LjkzLjM1MSAxMy44OTguNDEzIDE1LjQyNi4xODYgNS44ODYtLjMzIDExLjM1OC0uODA1IDEyLjQ3M3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzU4QUE1MFwiLFxuICAgIGQ6IFwiTTE1LjU2NCAyNy45NDRzLTYuOTYtNC43NS02LjU0Ni0xMy4xMTNjLjM5Mi04LjM2MyA1LjMwNy0xMi40NzMgNi4yNTctMTMuMjE2LjYyLS42Ni42NC0uOTA5LjY4MS0xLjU3LjQzNC45My4zNTEgMTMuODk4LjQxMyAxNS40MjYuMTg2IDUuODg2LS4zMyAxMS4zNTgtLjgwNSAxMi40NzN6XCJcbiAgfSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvTW9uZ29kYjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb015c3FsID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29NeXNxbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGw6IFwiIzAwNTQ2QlwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yOS40NTYgMjQuMjc2Yy0xLjc0LS4wNDMtMy4wODguMTMxLTQuMjE5LjYxLS4zMjYuMTMtLjg0OC4xMy0uODkyLjU0My4xNzQuMTc0LjE5Ni40NTcuMzQ4LjY5Ni4yNjEuNDM1LjcxOCAxLjAyMiAxLjEzMSAxLjMyNy40NTcuMzQ4LjkxNC42OTYgMS4zOTIgMSAuODQ4LjUyMiAxLjgwNS44MjcgMi42MzEgMS4zNDkuNDguMzA0Ljk1Ny42OTUgMS40MzYgMS4wMjIuMjQuMTczLjM5MS40NTYuNjk2LjU2NXYtLjA2NWMtLjE1My0uMTk2LS4xOTYtLjQ3OS0uMzQ4LS42OTYtLjIxOC0uMjE4LS40MzUtLjQxMy0uNjUzLS42M2ExMC4zMTYgMTAuMzE2IDAgMDAtMi4yNjEtMi4xOTdjLS42OTYtLjQ3OS0yLjIxOS0xLjEzMS0yLjUwMS0xLjkzNmwtLjA0NC0uMDQzYy40NzktLjA0NCAxLjA0NC0uMjE4IDEuNS0uMzQ4Ljc0LS4xOTYgMS40MTQtLjE1MyAyLjE3NS0uMzQ4LjM0OC0uMDg3LjY5Ni0uMTk2IDEuMDQ0LS4zMDV2LS4xOTVjLS4zOTEtLjM5Mi0uNjc0LS45MTQtMS4wODctMS4yODQtMS4xMS0uOTU3LTIuMzI3LTEuODkyLTMuNTg4LTIuNjc0LS42NzUtLjQzNS0xLjU0NS0uNzE4LTIuMjYyLTEuMDg4LS4yNjEtLjEzLS42OTYtLjE5Ni0uODQ4LS40MTMtLjM5Mi0uNDc5LS42MS0xLjExLS44OTItMS42NzVhNTQuOTIyIDU0LjkyMiAwIDAxLTEuNzgzLTMuNzg0Yy0uMzkyLS44NDgtLjYzLTEuNjk2LTEuMTEtMi40NzktMi4yNC0zLjY5Ny00LjY3NS01LjkzNy04LjQxNi04LjEzNC0uODA0LS40NTYtMS43NjEtLjY1Mi0yLjc4My0uODkxLS41NDQtLjAyMi0xLjA4OC0uMDY1LTEuNjMxLS4wODctLjM0OC0uMTUyLS42OTYtLjU2Ni0xLS43NjEtMS4yNC0uNzgzLTQuNDM3LTIuNDgtNS4zNS0uMjQtLjU4OCAxLjQxNC44NyAyLjgwNiAxLjM3IDMuNTI0LjM3LjUuODQ4IDEuMDY1IDEuMTA5IDEuNjMuMTUyLjM3LjE5NS43NjIuMzQ3IDEuMTUzLjM0OC45NTcuNjc1IDIuMDIzIDEuMTMxIDIuOTE0LjI0LjQ1Ny41LjkzNi44MDUgMS4zNDkuMTc0LjIzOS40NzguMzQ4LjU0NC43NC0uMzA1LjQzNC0uMzI3IDEuMDg3LS41IDEuNjMtLjc4MyAyLjQ1OC0uNDc5IDUuNTAyLjYzIDcuMzA3LjM0OC41NDQgMS4xNzUgMS43NCAyLjI4NCAxLjI4NC45NzgtLjM5Mi43Ni0xLjYzMiAxLjA0My0yLjcxOS4wNjYtLjI2MS4wMjItLjQzNS4xNTMtLjYwOXYuMDQ0Yy4zMDQuNjA5LjYwOSAxLjE5Ni44OTEgMS44MDUuNjc1IDEuMDY1IDEuODQ5IDIuMTc0IDIuODI4IDIuOTE0LjUyMi4zOTEuOTM1IDEuMDY1IDEuNTg3IDEuMzA1di0uMDY2aC0uMDQzYy0uMTMtLjE5NS0uMzI3LS4yODItLjUtLjQzNS0uMzkyLS4zOS0uODI3LS44Ny0xLjEzMS0xLjMwNC0uOTE0LTEuMjE4LTEuNzE5LTIuNTY3LTIuNDM2LTMuOTU4LS4zNDgtLjY3NS0uNjUzLTEuNDE0LS45MzUtMi4wODgtLjEzLS4yNjEtLjEzLS42NTMtLjM0OC0uNzgzLS4zMjcuNDc4LS44MDUuODkyLTEuMDQ0IDEuNDc5LS40MTMuOTM1LS40NTcgMi4wODgtLjYxIDMuMjg0LS4wODYuMDIxLS4wNDMgMC0uMDg2LjA0My0uNjk2LS4xNzQtLjkzNS0uODkxLTEuMTk2LTEuNS0uNjUzLTEuNTQ1LS43NjEtNC4wMjQtLjE5Ni01LjgwNy4xNTItLjQ1Ny44MDUtMS44OTIuNTQ0LTIuMzI3LS4xMy0uNDEzLS41NjYtLjY1Mi0uODA1LS45NzlhOC43NjQgOC43NjQgMCAwMS0uNzgzLTEuMzkyYy0uNTIyLTEuMjE3LS43ODMtMi41NjYtMS4zNDgtMy43ODQtLjI2MS0uNTY1LS43MTgtMS4xNTItMS4wODctMS42NzQtLjQxNC0uNTg3LS44Ny0xLTEuMTk3LTEuNjk3LS4xMDgtLjIzOS0uMjYtLjYzLS4wODctLjg5MS4wNDQtLjE3NC4xMy0uMjQuMzA1LS4yODMuMjgzLS4yNCAxLjA4Ny4wNjUgMS4zNy4xOTYuODA1LjMyNiAxLjQ3OS42MyAyLjE1MyAxLjA4Ny4zMDQuMjE4LjYzLjYzMSAxLjAyMi43NGguNDU3Yy42OTYuMTUyIDEuNDc5LjA0MyAyLjEzMS4yMzkgMS4xNTMuMzcgMi4xOTYuOTEzIDMuMTMyIDEuNWExOS4yOTQgMTkuMjk0IDAgMDE2Ljc4NSA3LjQzOGMuMjYxLjUuMzcuOTU3LjYwOSAxLjQ3OS40NTcgMS4wNjYgMS4wMjIgMi4xNTMgMS40NzkgMy4xOTcuNDU2IDEuMDIyLjg5MSAyLjA2NiAxLjU0NCAyLjkxNC4zMjYuNDU3IDEuNjMuNjk2IDIuMjE4LjkzNS40MzUuMTk2IDEuMTEuMzcgMS41LjYxLjc0LjQ1NiAxLjQ4Ljk3OCAyLjE3NSAxLjQ3OC4zNDguMjYgMS40MzYuODA1IDEuNTAxIDEuMjR6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjI3MyA1LjM3OGMtLjM3IDAtLjYzLjA0My0uODkxLjEwOXYuMDQzaC4wNDNjLjE3NC4zNDguNDc5LjU4Ny42OTYuODkyLjE3NC4zNDguMzI2LjY5Ni41IDEuMDQ0bC4wNDQtLjA0NGMuMzA0LS4yMTcuNDU3LS41NjUuNDU3LTEuMDg3LS4xMzEtLjE1Mi0uMTUzLS4zMDUtLjI2MS0uNDU3LS4xMy0uMjE4LS40MTQtLjMyNi0uNTg4LS41elwiXG4gIH0pKSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb015c3FsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvTmdpbnggPSBmdW5jdGlvbiBFdWlJY29uTG9nb05naW54KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMxMTk2MzlcIixcbiAgICBkOiBcIk0xNiAwbDEzLjg1NiA4djE2TDE2IDMyIDIuMTQ0IDI0Vjh6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRkZcIixcbiAgICBmaWxsUnVsZTogXCJub256ZXJvXCIsXG4gICAgZDogXCJNMTEuMTcgMTMuNTEydjguMzc2YTEuNjA3IDEuNjA3IDAgMTEtMy4yMTUgMFY5LjYzMmMwLTEuNDMyIDEuNzMxLTIuMTQ5IDIuNzQ0LTEuMTM2bDkuNTEgOS41MTJWOS42MzJhMS42MDcgMS42MDcgMCAwMTMuMjE1IDB2MTIuMjU2YzAgMS40MzItMS43MzEgMi4xNDktMi43NDQgMS4xMzZsLTkuNTEtOS41MTJ6XCJcbiAgfSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvTmdpbng7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29PYnNlcnZhYmlsaXR5ID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29PYnNlcnZhYmlsaXR5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAgMzJINy4yMzhDMy43OTMgMzIgMSAyOC44NjUgMSAyNC45OThWMTVoOXYxN3pcIixcbiAgICBmaWxsOiBcIiNGMDRFOThcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsTmVnYXRpdmVcIixcbiAgICBkOiBcIk0xMCAzMmg5VjhoLTl6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zMSAzMmgtOVYwbDEuOTczLjAyNEMyNy44NjYuMDcyIDMxIDMuNzMxIDMxIDguMjI4VjMyelwiLFxuICAgIGZpbGw6IFwiIzA3Q1wiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvT2JzZXJ2YWJpbGl0eTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb09zcXVlcnkgPSBmdW5jdGlvbiBFdWlJY29uTG9nb09zcXVlcnkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjQTU5NkZGXCIsXG4gICAgZDogXCJNMzEuOTA3LjAzMnY3Ljk2OWwtNy45NTIgNy45NTFWNy45NjdMMzEuOTA3LjAzMlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMzMzXCIsXG4gICAgZDogXCJNMTYuMDAzLjAzMnY3Ljk2OWw3Ljk1MiA3Ljk1MVY3Ljk2N0wxNi4wMDMuMDMyXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNBNTk2RkZcIixcbiAgICBkOiBcIk0zMS45MjMgMzEuODU1aC03Ljk2OGwtNy45NTItNy45NTFoNy45ODVsNy45MzUgNy45NTFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzMzM1wiLFxuICAgIGQ6IFwiTTMxLjkyMyAxNS45NTJoLTcuOTY4bC03Ljk1MiA3Ljk1Mmg3Ljk4NWw3LjkzNS03Ljk1MlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjQTU5NkZGXCIsXG4gICAgZDogXCJNLjEgMzEuODcydi03Ljk2OGw3Ljk1Mi03Ljk1MnY3Ljk4NUwuMSAzMS44NzJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzMzM1wiLFxuICAgIGQ6IFwiTTE2LjAwNCAzMS44NzJ2LTcuOTY4bC03Ljk1Mi03Ljk1MnY3Ljk4NWw3Ljk1MiA3LjkzNVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjQTU5NkZGXCIsXG4gICAgZDogXCJNLjA4NC4wNDhoNy45NjhMMTYuMDA0IDhIOC4wMTlMLjA4NC4wNDhcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzMzM1wiLFxuICAgIGQ6IFwiTS4wODQgMTUuOTUyaDcuOTY4TDE2LjAwNCA4SDguMDE5TC4wODQgMTUuOTUyXCJcbiAgfSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvT3NxdWVyeTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGh0bWxJZEdlbmVyYXRvciB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb1BocCA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvUGhwKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBnZW5lcmF0ZUlkID0gaHRtbElkR2VuZXJhdG9yKCdsb2dvX3BocCcpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB4bWxuc1hsaW5rOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImRlZnNcIiwgbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdhJyksXG4gICAgZDogXCJNLjAyOCA3Ljg1NEMuMDI4IDMuNTM0IDYuNjg4LjAzIDE0LjkwMi4wM3MxNC44NzQgMy41MDMgMTQuODc0IDcuODI0YzAgNC4zMjItNi42NiA3LjgyNS0xNC44NzQgNy44MjUtOC4yMTUgMC0xNC44NzQtMy41MDMtMTQuODc0LTcuODI1XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnZCcpLFxuICAgIGQ6IFwiTTAgMTcuNDNoMzAuOTg3VjBIMHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdmJyksXG4gICAgZDogXCJNMCAxNy40M2gzMC45ODdWMEgwelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicmFkaWFsR3JhZGllbnRcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdiJyksXG4gICAgY3g6IFwiMzAuMDIlXCIsXG4gICAgY3k6IFwiODIuNDIyJVwiLFxuICAgIHI6IFwiMTI0LjgxNCVcIixcbiAgICBmeDogXCIzMC4wMiVcIixcbiAgICBmeTogXCI4Mi40MjIlXCIsXG4gICAgZ3JhZGllbnRUcmFuc2Zvcm06IFwibWF0cml4KC41MjYwNCAwIDAgMSAuMTQyIDApXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjQUVCMkQ1XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMzAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiNBRUIyRDVcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCI3NSVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzQ4NEM4OVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjEwMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzQ4NEM4OVwiXG4gIH0pKSksIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgdHJhbnNmb3JtOiBcIm1hdHJpeCgxIDAgMCAtMSAuMDI2IDI1LjQxMylcIlxuICB9LCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSguNTkyIC44NilcIlxuICB9LCBfX19FbW90aW9uSlNYKFwibWFza1wiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2MnKSxcbiAgICBmaWxsOiBcIiNmZmZcIlxuICB9LCBfX19FbW90aW9uSlNYKFwidXNlXCIsIHtcbiAgICB4bGlua0hyZWY6IFwiI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdhJykpXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnYicpLCBcIilcIiksXG4gICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiLFxuICAgIG1hc2s6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnYycpLCBcIilcIilcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTS4wMjggNy44NTRDLjAyOCAzLjUzNCA2LjY4OC4wMyAxNC45MDIuMDNzMTQuODc0IDMuNTAzIDE0Ljg3NCA3LjgyNGMwIDQuMzIyLTYuNjYgNy44MjUtMTQuODc0IDcuODI1LTguMjE1IDAtMTQuODc0LTMuNTAzLTE0Ljg3NC03LjgyNVwiXG4gIH0pKSksIF9fX0Vtb3Rpb25KU1goXCJtYXNrXCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnZScpLFxuICAgIGZpbGw6IFwiI2ZmZlwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJ1c2VcIiwge1xuICAgIHhsaW5rSHJlZjogXCIjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2QnKSlcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgbWFzazogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdlJyksIFwiKVwiKVxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjNzc3QkIzXCIsXG4gICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiLFxuICAgIGQ6IFwiTTE1LjQ5NCAxLjQ3MmM3Ljg5NCAwIDE0LjI5MyAzLjI0MyAxNC4yOTMgNy4yNDNzLTYuNCA3LjI0NC0xNC4yOTMgNy4yNDRjLTcuODk0IDAtMTQuMjkzLTMuMjQzLTE0LjI5My03LjI0NCAwLTQgNi40LTcuMjQzIDE0LjI5My03LjI0M1wiXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcIm1hc2tcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdnJyksXG4gICAgZmlsbDogXCIjZmZmXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInVzZVwiLCB7XG4gICAgeGxpbmtIcmVmOiBcIiNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnZicpKVxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsUnVsZTogXCJub256ZXJvXCIsXG4gICAgbWFzazogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdnJyksIFwiKVwiKVxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDAwXCIsXG4gICAgZDogXCJNOC43MDEgNy44MTdjLjY1IDAgMS4xMzQuMTIgMS40NC4zNTYuMzA0LjIzMy41MTMuNjM4LjYyMyAxLjIwMi4xMDMuNTI4LjA2NC44OTYtLjExNiAxLjA5NS0uMTgzLjIwMy0uNTguMzA2LTEuMTc3LjMwNkg4LjQzM2wtLjU3NS0yLjk1OWguODQzek01LjMxIDQuMTcyYS4xNjEuMTYxIDAgMDAtLjE1OS4xOTNsMS41MjQgNy44NGMuMDE1LjA3Ni4wODIuMTMxLjE1OS4xMzFoMy4yODRjMS4wMzMgMCAxLjgwMS0uMjggMi4yODQtLjgzMy40ODUtLjU1Ni42MzUtMS4zMzMuNDQ2LTIuMzA5YTMuNjg2IDMuNjg2IDAgMDAtLjM5NS0xLjA5OCAzLjY3NiAzLjY3NiAwIDAwLS43MjctLjkxIDMuMTg5IDMuMTg5IDAgMDAtMS4xOTctLjcxOGMtLjQzLS4xNC0uOTgzLS4yMS0xLjY0My0uMjFoLTEuMzNsLS4zOC0xLjk1NWEuMTYxLjE2MSAwIDAwLS4xNTgtLjEzSDUuMzA5elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkZGXCIsXG4gICAgZDogXCJNOC41NjYgMTAuNjE1aC45MDVjLjcyMiAwIC45NzItLjE1OCAxLjA1OC0uMjUzLjE0MS0uMTU3LjE2OC0uNDg3LjA3Ny0uOTU2LS4xMDItLjUyNC0uMjkxLS44OTYtLjU2My0xLjEwNS0uMjc3LS4yMTQtLjcyOS0uMzIyLTEuMzQxLS4zMjJoLS42NDhsLjUxMiAyLjYzNnptMS41NTEgMS44ODNINi44MzNhLjMyMy4zMjMgMCAwMS0uMzE3LS4yNjFMNC45OTIgNC4zOTZhLjMyMy4zMjMgMCAwMS4zMTctLjM4NWgxLjcwOGMuMTU1IDAgLjI4Ny4xMS4zMTcuMjYybC4zNTQgMS44MjNoMS4xOTdjLjY3NyAwIDEuMjQ3LjA3NCAxLjY5NC4yMi40Ni4xNDkuODgyLjQwMiAxLjI1Ni43NTIuMzEuMjg0LjU2NC42MDQuNzU4Ljk1LjE5My4zNDUuMzMxLjczMS40MTIgMS4xNDYuMiAxLjAyNy4wMzggMS44NS0uNDgyIDIuNDQ2LS41MTUuNTktMS4zMjUuODg4LTIuNDA2Ljg4OHpNNy42NjMgNy42NTZoMS4wMzljLjY4OCAwIDEuMjAxLjEzIDEuNTM4LjM5LjMzNy4yNTkuNTY1LjY5Mi42ODMgMS4yOTkuMTEzLjU4My4wNjEuOTk0LS4xNTUgMS4yMzMtLjIxNi4yNC0uNjQ4LjM2LTEuMjk3LjM2SDguM2wtLjYzOC0zLjI4MnptMi40NTQgNC41MmMuOTg5IDAgMS43MS0uMjYgMi4xNjItLjc3OS40NTMtLjUxOC41OS0xLjI0Mi40MS0yLjE3MmEzLjUxIDMuNTEgMCAwMC0uMzc4LTEuMDUgMy41MDIgMy41MDIgMCAwMC0uNjk1LS44NyAzLjAxNyAzLjAxNyAwIDAwLTEuMTM3LS42ODNjLS40MTctLjEzNS0uOTQ4LS4yMDMtMS41OTQtLjIwM0g3LjQyMmwtLjQwNS0yLjA4NUg1LjMwOWwxLjUyNCA3Ljg0MWgzLjI4NHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwMFwiLFxuICAgIGQ6IFwiTTE2Ljc2MyA2LjI1N2EuMTYxLjE2MSAwIDAwLS4xNTkuMTkybC42NzQgMy40N2MuMDY0LjMzLjA0OS41NjYtLjA0NC42NjYtLjA1Ny4wNjEtLjIyOC4xNjQtLjczMi4xNjRIMTUuMjhsLS44NDctNC4zNjFhLjE2MS4xNjEgMCAwMC0uMTU5LS4xMzFIMTIuNThhLjE2MS4xNjEgMCAwMC0uMTU5LjE5MmwxLjUyNCA3Ljg0MWMuMDE1LjA3Ni4wODIuMTMuMTU5LjEzaDEuNjk0YS4xNjEuMTYxIDAgMDAuMTU5LS4xOTFsLS4zNjgtMS44OTNoMS4zMTRjMSAwIDEuNjgtLjE3NiAyLjA3NS0uNTQuNDAzLS4zNy41MjktLjk2Mi4zNzQtMS43NmwtLjcxLTMuNjQ4YS4xNjEuMTYxIDAgMDAtLjE1OC0uMTMxaC0xLjcyMXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZGRlwiLFxuICAgIGQ6IFwiTTE1Ljc5OSAxNC41ODJoLTEuNjk1YS4zMjMuMzIzIDAgMDEtLjMxNy0uMjYxTDEyLjI2MyA2LjQ4YS4zMjMuMzIzIDAgMDEuMzE3LS4zODVoMS42OTVjLjE1NCAwIC4yODcuMTEuMzE3LjI2MmwuODIyIDQuMjNoMS4wODhjLjUwNCAwIC42MS0uMTA3LjYxNC0uMTEyLjAzLS4wMzMuMDctLjE4NS4wMDQtLjUyNmwtLjY3NC0zLjQ3YS4zMjMuMzIzIDAgMDEuMzE3LS4zODRoMS43MjFjLjE1NSAwIC4yODguMTEuMzE3LjI2MmwuNzEgMy42NDhjLjE2Ni44NTcuMDIzIDEuNS0uNDI0IDEuOTEtLjQyNi4zOTItMS4xNC41ODItMi4xODQuNTgyaC0xLjExOGwuMzMgMS43YS4zMjMuMzIzIDAgMDEtLjMxNi4zODVtMC0uMzIzbC0uNDA2LTIuMDg0aDEuNTFjLjk1IDAgMS42MDUtLjE2NiAxLjk2Ni0uNDk3LjM2LS4zMzIuNDY4LS44NjkuMzI0LTEuNjExbC0uNzA5LTMuNjQ5aC0xLjcyMWwuNjc0IDMuNDdjLjA3Ny4zOTQuMDQ4LjY2My0uMDg1LjgwNy0uMTMzLjE0My0uNDE2LjIxNS0uODUuMjE1aC0xLjM1NGwtLjg3My00LjQ5MkgxMi41OGwxLjUyNCA3Ljg0MWgxLjY5NVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDAwXCIsXG4gICAgZDogXCJNMjIuMDMzIDcuODE3Yy42NSAwIDEuMTM0LjEyIDEuNDQuMzU2LjMwNC4yMzMuNTEzLjYzOC42MjMgMS4yMDIuMTAzLjUyOC4wNjQuODk2LS4xMTYgMS4wOTUtLjE4My4yMDMtLjU4LjMwNi0xLjE3Ny4zMDZoLTEuMDM4bC0uNTc1LTIuOTU5aC44NDN6bS0zLjM5Mi0zLjY0NWEuMTYxLjE2MSAwIDAwLS4xNTkuMTkzbDEuNTI0IDcuODRjLjAxNS4wNzYuMDgyLjEzMS4xNTkuMTMxaDMuMjg0YzEuMDMzIDAgMS44MDEtLjI4IDIuMjg0LS44MzMuNDg1LS41NTYuNjM1LTEuMzMzLjQ0Ni0yLjMwOWEzLjY4OSAzLjY4OSAwIDAwLS4zOTUtMS4wOTggMy42NzYgMy42NzYgMCAwMC0uNzI3LS45MSAzLjE4OSAzLjE4OSAwIDAwLTEuMTk3LS43MThjLS40My0uMTQtLjk4My0uMjEtMS42NDMtLjIxaC0xLjMzbC0uMzgtMS45NTVhLjE2MS4xNjEgMCAwMC0uMTU4LS4xM0gxOC42NHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZGRlwiLFxuICAgIGQ6IFwiTTIxLjg5OCAxMC42MTVoLjkwNWMuNzIyIDAgLjk3Mi0uMTU4IDEuMDU4LS4yNTMuMTQxLS4xNTcuMTY4LS40ODcuMDc3LS45NTYtLjEwMi0uNTI0LS4yOTItLjg5Ni0uNTYzLTEuMTA1LS4yNzctLjIxNC0uNzI5LS4zMjItMS4zNDEtLjMyMmgtLjY0OGwuNTEyIDIuNjM2em0xLjU1MSAxLjg4M2gtMy4yODRhLjMyMy4zMjMgMCAwMS0uMzE3LS4yNjFsLTEuNTI0LTcuODQxYS4zMjMuMzIzIDAgMDEuMzE3LS4zODVoMS43MDhjLjE1NSAwIC4yODcuMTEuMzE3LjI2MmwuMzU0IDEuODIzaDEuMTk3Yy42NzcgMCAxLjI0Ny4wNzQgMS42OTQuMjIuNDYuMTQ5Ljg4Mi40MDIgMS4yNTYuNzUyLjMxLjI4NC41NjQuNjA0Ljc1OC45NS4xOTMuMzQ1LjMzMS43MzEuNDEyIDEuMTQ2LjIgMS4wMjcuMDM4IDEuODUtLjQ4MiAyLjQ0Ni0uNTE1LjU5LTEuMzI1Ljg4OC0yLjQwNi44ODh6bS0yLjQ1NC00Ljg0MmgxLjAzOWMuNjg4IDAgMS4yMDEuMTMgMS41MzguMzkuMzM3LjI1OS41NjUuNjkyLjY4MyAxLjI5OS4xMTMuNTgzLjA2MS45OTQtLjE1NSAxLjIzMy0uMjE2LjI0LS42NDguMzYtMS4yOTcuMzZoLTEuMTdsLS42MzgtMy4yODJ6bTIuNDU0IDQuNTJjLjk4OSAwIDEuNzEtLjI2IDIuMTYyLS43NzkuNDU0LS41MTguNTktMS4yNDIuNDEtMi4xNzJhMy41MSAzLjUxIDAgMDAtLjM3OC0xLjA1IDMuNTAyIDMuNTAyIDAgMDAtLjY5NS0uODcgMy4wMTcgMy4wMTcgMCAwMC0xLjEzNy0uNjgzYy0uNDE3LS4xMzUtLjk0OC0uMjAzLTEuNTk0LS4yMDNoLTEuNDYzbC0uNDA1LTIuMDg1aC0xLjcwOGwxLjUyNCA3Ljg0MWgzLjI4NHpcIlxuICB9KSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvUGhwOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvUG9zdGdyZXMgPSBmdW5jdGlvbiBFdWlJY29uTG9nb1Bvc3RncmVzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwMFwiLFxuICAgIGQ6IFwiTTMxLjg3NiAxOS4xNjJjLS4xOTItLjU2NC0uNjk1LS45NTYtMS4zNDUtMS4wNS0uMzA2LS4wNDUtLjY1Ny0uMDI2LTEuMDcyLjA1Ny0uNzI0LjE0NS0xLjI2MS4yLTEuNjU0LjIxMSAxLjQ4LTIuNDIyIDIuNjgzLTUuMTg1IDMuMzc2LTcuNzg1IDEuMTItNC4yMDUuNTIxLTYuMTItLjE3OC02Ljk4Ny0xLjg1LTIuMjkzLTQuNTUxLTMuNTI1LTcuODA5LTMuNTYzYTE0LjIzOSAxNC4yMzkgMCAwMC00LjA2LjU1MSAxNS41NzMgMTUuNTczIDAgMDAtMi4zNzMtLjIxYy0xLjU2Ny0uMDI0LTIuOTUyLjMwNy00LjEzNS45ODhhMTkuMzM0IDE5LjMzNCAwIDAwLTIuOTItLjcxMUM2Ljg1LjIwOCA0LjU0OS41NjMgMi44NjYgMS43MTYuODI4IDMuMTEyLS4xMTcgNS41MzcuMDU4IDguOTI2LjExMyAxMCAuNzM0IDEzLjI3MyAxLjcxIDE2LjM3NmMuNTYxIDEuNzg0IDEuMTYgMy4yNjYgMS43OCA0LjQwNC44NzggMS42MTQgMS44MTggMi41NjQgMi44NzMgMi45MDYuNTkxLjE5IDEuNjY2LjMyNSAyLjc5Ni0uNTg4LjE0My4xNjguMzM0LjMzNS41ODguNDkuMzIyLjE5OC43MTYuMzU5IDEuMTA5LjQ1NCAxLjQxOC4zNDQgMi43NDUuMjU4IDMuODc4LS4yMjQuMDA3LjE5NS4wMTMuMzgyLjAxNy41NDMuMDA4LjI2Mi4wMTUuNTE4LjAyNS43NTguMDY3IDEuNjIuMTgxIDIuODgxLjUxOCAzLjc2M2wuMDcuMjAxYy4xNjguNS40NDkgMS4zMzUgMS4xNjQgMS45OS43NC42NzcgMS42MzcuODg1IDIuNDU3Ljg4NS40MTIgMCAuODA0LS4wNTIgMS4xNDktLjEyNCAxLjIyNy0uMjU1IDIuNjIxLS42NDMgMy42My0yLjAzNi45NTMtMS4zMTYgMS40MTctMy4yOTkgMS41LTYuNDIzbC4wMzEtLjI1My4wMi0uMTY1LjIyNS4wMTkuMDU4LjAwNGMxLjI1LjA1NSAyLjc3OS0uMjAyIDMuNzE4LS42MjUuNzQxLS4zMzQgMy4xMTktMS41NSAyLjU1OS0zLjE5NFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMzM2NzkxXCIsXG4gICAgZDogXCJNMjkuNzM4IDE5LjQ4MWMtMy43MTcuNzQ0LTMuOTczLS40NzYtMy45NzMtLjQ3NiAzLjkyNS01LjY0OCA1LjU2Ni0xMi44MTcgNC4xNS0xNC41NzFDMjYuMDUyLS4zNTIgMTkuMzY1IDEuOTEgMTkuMjU0IDEuOTdsLS4wMzYuMDA2YTEzLjY1NyAxMy42NTcgMCAwMC0yLjQ4LS4yNWMtMS42ODItLjAyNy0yLjk1OC40MjctMy45MjcgMS4xNCAwIDAtMTEuOTI4LTQuNzY2LTExLjM3NCA1Ljk5Mi4xMTggMi4yODkgMy4zODMgMTcuMzE4IDcuMjc4IDEyLjc3OWE3MC40NDMgNzAuNDQzIDAgMDEyLjc5OC0zLjA2NGMuNjgzLjQ0IDEuNTAxLjY2NSAyLjM1OC41ODRsLjA2Ny0uMDU1Yy0uMDIuMjA2LS4wMTEuNDA4LjAyNy42NDctMS4wMDQgMS4wODctLjcwOSAxLjI3Ny0yLjcxNCAxLjY3OC0yLjAzLjQwNS0uODM3IDEuMTI3LS4wNiAxLjMxNi45NDQuMjI5IDMuMTI3LjU1MyA0LjYwMi0xLjQ1bC0uMDU4LjIzYy4zOTMuMzA0LjY2OSAxLjk4NS42MjMgMy41MDgtLjA0NyAxLjUyNC0uMDc4IDIuNTcuMjMyIDMuMzg3LjMxLjgxNy42MTkgMi42NTUgMy4yNTUgMi4xMDcgMi4yMDMtLjQ1OCAzLjM0NS0xLjY0NCAzLjUwMy0zLjYyMy4xMTMtMS40MDcuMzY4LTEuMTk5LjM4NC0yLjQ1N2wuMjA1LS41OTVjLjIzNi0xLjkwNy4wMzctMi41MjIgMS4zOTQtMi4yMzZsLjMzLjAyOGMxIC4wNDQgMi4zMDctLjE1NiAzLjA3NC0uNTAyIDEuNjUyLS43NDMgMi42MzItMS45ODUgMS4wMDMtMS42NTlcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZGRlwiLFxuICAgIGQ6IFwiTTEzLjUxIDkuODgyYy0uMzM1LS4wNDUtLjYzOS0uMDA0LS43OTIuMTFhLjI4LjI4IDAgMDAtLjEyLjE4N2MtLjAyLjEzMy4wNzcuMjgyLjEzNi4zNTguMTY5LjIxNi40MTQuMzY1LjY1OC4zOTguMDM1LjAwNC4wNy4wMDcuMTA1LjAwNy40MDUgMCAuNzc0LS4zMDcuODA3LS41MzMuMDQtLjI4My0uMzgzLS40NzItLjc5NS0uNTI3bTExLjA5OS4wMDljLS4wMzItLjIyMi0uNDQtLjI4NS0uODI2LS4yMzMtLjM4Ni4wNTItLjc2LjIyLS43My40NDMuMDI2LjE3My4zNDguNDY4LjczLjQ2OGEuNzE4LjcxOCAwIDAwLjA5Ny0uMDA2Ljk0Ny45NDcgMCAwMC41My0uMjgxYy4xMzUtLjEzOC4yMTMtLjI5MS4xOTktLjM5MVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkZGXCIsXG4gICAgZDogXCJNMzAuOTc1IDE5LjM5N2MtLjE0Mi0uNDE2LS41OTgtLjU1LTEuMzU2LS4zOTgtMi4yNS40NS0zLjA1Ni4xMzktMy4zMjEtLjA1IDEuNzUtMi41ODQgMy4xODktNS43MDggMy45NjUtOC42MjMuMzY4LTEuMzguNTctMi42NjMuNTg3LTMuNzA4LjAxOS0xLjE0Ny0uMTgzLTEuOTktLjU5OC0yLjUwNS0xLjY3NS0yLjA3NS00LjEzNC0zLjE4OS03LjExLTMuMjItMi4wNDctLjAyMi0zLjc3NS40ODYtNC4xMS42MjlhMTAuNTQ5IDEwLjU0OSAwIDAwLTIuMzEzLS4yODhjLTEuNTM2LS4wMjQtMi44NjQuMzMyLTMuOTYzIDEuMDZhMTguMTMxIDE4LjEzMSAwIDAwLTMuMjItLjgyYy0yLjYxLS40MDctNC42ODMtLjA5OC02LjE2My45MThDMS42MDggMy42MDUuNzkzIDUuNzczLjk1MSA4LjgzNmMuMDUzIDEuMDMuNjU4IDQuMiAxLjYxNCA3LjIzNiAxLjI1OCAzLjk5NiAyLjYyNSA2LjI1NyA0LjA2MyA2LjcyMy4xNjkuMDU0LjM2My4wOTIuNTc3LjA5Mi41MjUgMCAxLjE2OC0uMjMgMS44MzgtMS4wMWE2NC44OTQgNjQuODk0IDAgMDEyLjUzMi0yLjc3OCA0LjE4IDQuMTggMCAwMDEuODIyLjQ3NWwuMDA1LjA0OGMtLjExLjEyNy0uMjE3LjI1NS0uMzIxLjM4NS0uNDQuNTQyLS41MzIuNjU1LTEuOTUuOTM4LS40MDMuMDgtMS40NzMuMjk0LTEuNDg5IDEuMDIyLS4wMTcuNzk1IDEuMjY2IDEuMTMgMS40MTIgMS4xNjUuNTA5LjEyMyAxIC4xODQgMS40NjcuMTg0IDEuMTM4IDAgMi4xNC0uMzYzIDIuOTQtMS4wNjQtLjAyNSAyLjgzNC4wOTcgNS42MjguNDQ4IDYuNDc5LjI4OC42OTYuOTkgMi40IDMuMjA4IDIuMzk5YTUuMyA1LjMgMCAwMDEuMDc4LS4xMTljMi4zMTUtLjQ4IDMuMzItMS40NzMgMy43MS0zLjY2LjIwOC0xLjE3LjU2NS0zLjk2MS43MzMtNS40NTkuMzU0LjEwNy44MS4xNTYgMS4zMDQuMTU2IDEuMDI5IDAgMi4yMTYtLjIxMiAyLjk2MS0uNTQ3LjgzNy0uMzc3IDIuMzQ2LTEuMyAyLjA3Mi0yLjEwNHpNMjUuNDYyIDkuMjc4Yy0uMDA4LjQ0Mi0uMDcuODQ0LS4xMzcgMS4yNjItLjA3Mi40NTEtLjE0NS45MTctLjE2NCAxLjQ4Mi0uMDE5LjU1LjA1MiAxLjEyMy4xMiAxLjY3Ni4xNCAxLjExOC4yODIgMi4yNjgtLjI2OSAzLjQwM2E0LjM3IDQuMzcgMCAwMS0uMjQzLS40ODVjLS4wNjktLjE2MS0uMjE3LS40Mi0uNDIzLS43NzctLjgtMS4zOS0yLjY3My00LjY0OC0xLjcxNC01Ljk3Ny4yODYtLjM5NiAxLjAxLS44MDMgMi44My0uNTg0em0tMi4yMDYtNy40OWMyLjY2Ny4wNTggNC43NzcgMS4wMjUgNi4yNyAyLjg3NiAxLjE0NiAxLjQyLS4xMTYgNy44NzktMy43NjcgMTMuNDVsLS4xMTEtLjEzNS0uMDQ2LS4wNTZjLjk0My0xLjUxLjc1OS0zLjAwNi41OTUtNC4zMzEtLjA2OC0uNTQ0LS4xMzItMS4wNTgtLjExNS0xLjU0MS4wMTYtLjUxMS4wODYtLjk1LjE1NC0xLjM3NS4wODItLjUyMi4xNjctMS4wNjMuMTQ0LTEuNzAxYS42ODQuNjg0IDAgMDAuMDE1LS4yNGMtLjA2LS42MTEtLjc4LTIuNDQxLTIuMjQ3LTQuMDk4YTEwLjA5NCAxMC4wOTQgMCAwMC0zLjU3Mi0yLjYwNCAxMi40MDcgMTIuNDA3IDAgMDEyLjY4LS4yNDR6TTguMzM0IDIxLjMwN2MtLjczNy44Ni0xLjI0Ni42OTUtMS40MTQuNjQxLTEuMDkxLS4zNTMtMi4zNTctMi41OS0zLjQ3NC02LjEzNi0uOTY2LTMuMDY5LTEuNTMtNi4xNTUtMS41NzUtNy4wMi0uMTQxLTIuNzM3LjU0My00LjY0NCAyLjAzMy01LjY2OSAyLjQyNi0xLjY2OCA2LjQxNC0uNjcgOC4wMTYtLjE2My0uMDIzLjAyMi0uMDQ3LjA0Mi0uMDcuMDY1LTIuNjMgMi41NzUtMi41NjcgNi45NzQtMi41NiA3LjI0MyAwIC4xMDQuMDA4LjI1MS4wMi40NTMuMDQ2Ljc0LjEzIDIuMTE3LS4wOTUgMy42NzctLjIwOSAxLjQ1LjI1MiAyLjg2OCAxLjI2NCAzLjg5Mi4xMDQuMTA1LjIxMy4yMDUuMzI3LjMtLjQ1LjQ2Ny0xLjQzIDEuNTAyLTIuNDcyIDIuNzE3em0yLjgxLTMuNjM1Yy0uODE2LS44MjYtMS4xODYtMS45NzQtMS4wMTctMy4xNS4yMzgtMS42NDguMTUtMy4wODMuMTAzLTMuODU0bC0uMDE2LS4yNzdjLjM4NC0uMzMgMi4xNjUtMS4yNTUgMy40MzQtLjk3My41OC4xMjkuOTMyLjUxMSAxLjA4IDEuMTcuNzU5IDMuNDA2LjEgNC44MjUtLjQzIDUuOTY2LS4xMDkuMjM1LS4yMTIuNDU4LS4zLjY4N2wtLjA2OC4xNzhjLS4xNzMuNDUtLjMzNC44NjctLjQzNCAxLjI2NGEzLjMyNSAzLjMyNSAwIDAxLTIuMzUyLTEuMDExem0uMTMzIDQuNTk0YTIuMDcgMi4wNyAwIDAxLS42MTQtLjI1NmMuMTExLS4wNTEuMzEtLjEyLjY1NC0uMTkgMS42NjgtLjMzMiAxLjkyNS0uNTY3IDIuNDg3LTEuMjYuMTMtLjE1OC4yNzUtLjMzOC40NzgtLjU1Ny4zMDEtLjMyOC40NC0uMjcyLjY5LS4xNzIuMjAyLjA4Mi40LjMyOC40OC41OTkuMDM3LjEyOC4wOC4zNy0uMDYuNTYtMS4xNzQgMS41OTUtMi44ODYgMS41NzQtNC4xMTUgMS4yNzZ6bTguNzI1IDcuODczYy0yLjA0LjQyNC0yLjc2MS0uNTg2LTMuMjM3LTEuNzQtLjMwOC0uNzQ0LS40NTktNC4xMDItLjM1MS03LjgxYS40MzQuNDM0IDAgMDAtLjAyLS4xNDMgMS44MjMgMS44MjMgMCAwMC0uMDU3LS4yNjJjLS4xNi0uNTQtLjU0OC0uOTktMS4wMTMtMS4xNzgtLjE4NS0uMDc0LS41MjUtLjIxLS45MzMtLjExLjA4Ny0uMzQ3LjIzOC0uNzQuNDAyLTEuMTY1bC4wNjgtLjE3OGMuMDc4LS4yMDIuMTc1LS40MS4yNzctLjYzMi41NTQtMS4xOTQgMS4zMTMtMi44MjkuNDktNi41MjItLjMwOS0xLjM4NC0xLjM0LTIuMDYtMi45MDEtMS45MDMtLjkzNi4wOTQtMS43OTMuNDYtMi4yMi42N2E3LjI1NSA3LjI1NSAwIDAwLS4yNTUuMTMyYy4xMi0xLjM5NC41Ny00IDIuMjU1LTUuNjQ3IDEuMDYyLTEuMDM4IDIuNDc1LTEuNTUgNC4xOTYtMS41MjMgMy4zOTMuMDU0IDUuNTY5IDEuNzQyIDYuNzk2IDMuMTUgMS4wNTggMS4yMTEgMS42MzEgMi40MzMgMS44NiAzLjA5MS0xLjcyLS4xNy0yLjg4OS4xNi0zLjQ4Mi45ODItMS4yOSAxLjc4Ny43MDYgNS4yNTcgMS42NjUgNi45MjQuMTc1LjMwNi4zMjcuNTcuMzc1LjY4Mi4zMTIuNzM0LjcxNiAxLjIyNCAxLjAxMiAxLjU4Mi4wOS4xMS4xNzguMjE1LjI0NS4zMDgtLjUyMS4xNDYtMS40NTYuNDgyLTEuMzcxIDIuMTY0LS4wNjkuODQzLS41NTggNC43OTMtLjgwNiA2LjE4OS0uMzI4IDEuODQzLTEuMDI4IDIuNTMtMi45OTUgMi45Mzl6bTguNTEzLTkuNDQ3Yy0uNTMyLjI0LTEuNDI0LjQyLTIuMjcuNDU4LS45MzUuMDQzLTEuNDExLS4xMDEtMS41MjMtLjE5LS4wNTMtMS4wNDguMzUtMS4xNTcuNzc1LTEuMjczYTMuMzUgMy4zNSAwIDAwLjE5NS0uMDU4Yy4wNC4wMzEuMDgyLjA2Mi4xMy4wOTIuNzUuNDgxIDIuMDkxLjUzMyAzLjk4NC4xNTRsLjAyLS4wMDRjLS4yNTUuMjMyLS42OTIuNTQyLTEuMzEuODIxelwiXG4gIH0pKSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb1Bvc3RncmVzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvUHJvbWV0aGV1cyA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvUHJvbWV0aGV1cyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0U2NTIyQ1wiLFxuICAgIGQ6IFwiTTE1LjkwNy4xODdDNy4xMjIuMTg3IDAgNy4zMDggMCAxNi4wOTNTNy4xMjIgMzIgMTUuOTA3IDMyYzguNzg0IDAgMTUuOTA2LTcuMTIxIDE1LjkwNi0xNS45MDZTMjQuNjkuMTg3IDE1LjkwNy4xODd6bTAgMjkuNzdjLTIuNSAwLTQuNTI2LTEuNjctNC41MjYtMy43MjloOS4wNTFjMCAyLjA2LTIuMDI2IDMuNzMtNC41MjUgMy43M3ptNy40NzUtNC45NjNIOC40M3YtMi43MTFoMTQuOTV2Mi43MXptLS4wNTQtNC4xMDdIOC40NzNjLS4wNS0uMDU3LS4xLS4xMTMtLjE0Ny0uMTctMS41My0xLjg1OS0xLjg5MS0yLjgyOS0yLjI0MS0zLjgxOC0uMDA2LS4wMzIgMS44NTUuMzggMy4xNzYuNjc4IDAgMCAuNjc5LjE1NyAxLjY3Mi4zMzgtLjk1My0xLjExOC0xLjUyLTIuNTM5LTEuNTItMy45OTEgMC0zLjE4OSAyLjQ0Ni01Ljk3NSAxLjU2NC04LjIyNy44NTguMDcgMS43NzcgMS44MTIgMS44MzkgNC41MzcuOTEzLTEuMjYyIDEuMjk1LTMuNTY2IDEuMjk1LTQuOTc4IDAtMS40NjMuOTYzLTMuMTYxIDEuOTI3LTMuMjItLjg2IDEuNDE3LjIyMyAyLjYzIDEuMTg0IDUuNjQyLjM2MSAxLjEzMi4zMTUgMy4wMzUuNTk0IDQuMjQzLjA5Mi0yLjUwOC41MjMtNi4xNjcgMi4xMTQtNy40My0uNzAyIDEuNTkxLjEwNCAzLjU4MS42NTUgNC41MzguODg5IDEuNTQ0IDEuNDI4IDIuNzE0IDEuNDI4IDQuOTI2IDAgMS40ODMtLjU0OCAyLjg4LTEuNDcyIDMuOTcxIDEuMDUtLjE5NyAxLjc3Ni0uMzc0IDEuNzc2LS4zNzRsMy40MTEtLjY2NnMtLjQ5NSAyLjAzOC0yLjQgNC4wMDF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29Qcm9tZXRoZXVzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvUmFiYml0bXEgPSBmdW5jdGlvbiBFdWlJY29uTG9nb1JhYmJpdG1xKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRjYwXCIsXG4gICAgZDogXCJNMzAuMDgzIDEzLjE5N2gtOS44NzhjLS43OS0uMDg4LTEuMzkxLS43NC0xLjM5MS0xLjUwOFYxLjk3YzAtLjgzLS43MTgtMS40OTUtMS41OTUtMS40OTVoLTMuNDU2Yy0uODg1IDAtMS41OTUuNjcyLTEuNTk1IDEuNDk1djkuODJjLS4wNDMuNzQtLjY5NiAxLjMzOC0xLjQ3OCAxLjQwNkg4LjEwMmMtLjc2LS4wODgtMS4zNDgtLjY4Ni0xLjM5OC0xLjQwNlYxLjk3YzAtLjgzLS43MTgtMS40OTUtMS41OTUtMS40OTVIMS42NTJDLjc2OC40NzYuMDU4IDEuMTQ4LjA1OCAxLjk3djI4LjM1OGMwIC44My43MTcgMS40OTUgMS41OTQgMS40OTVoMjguNDM5Yy44ODQgMCAxLjU5NC0uNjczIDEuNTk0LTEuNDk1VjE0LjY5MmMtLjAwNy0uODI5LS43MTgtMS40OTUtMS42MDItMS40OTV6bS00LjU1IDEwLjcyNGMwIC44MjktLjcxOCAxLjQ5NS0xLjU5NSAxLjQ5NUgyMC40OGMtLjg4NCAwLTEuNTk1LS42NzMtMS41OTUtMS40OTV2LTMuMDU4YzAtLjgzLjcxOC0xLjQ5NSAxLjU5NS0xLjQ5NWgzLjQ1N2MuODg0IDAgMS41OTQuNjcyIDEuNTk0IDEuNDk1djMuMDU4elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvUmFiYml0bXE7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29SZWRpcyA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvUmVkaXMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDAgMylcIixcbiAgICBmaWxsOiBcIm5vbmVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMzAuNTk0IDIwLjc5MWMtMS42ODkuODc1LTEwLjQzOCA0LjQ1MS0xMi4zIDUuNDE2LTEuODYzLjk2Ni0yLjg5OC45NTYtNC4zNy4yNTctMS40NzEtLjY5OS0xMC43ODItNC40MzctMTIuNDYtNS4yMzQtLjgzOC0uMzk5LTEuMjc4LS43MzUtMS4yNzgtMS4wNTJ2LTMuMThzMTIuMTIxLTIuNjIzIDE0LjA3OC0zLjMyYzEuOTU3LS42OTkgMi42MzYtLjcyNCA0LjMwMS0uMTE4IDEuNjY2LjYwNyAxMS42MjMgMi4zOTMgMTMuMjcgMi45OTJsLS4wMDEgMy4xMzVjMCAuMzE0LS4zOC42NTktMS4yNCAxLjEwNHpcIixcbiAgICBmaWxsOiBcIiNBNDFFMTFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMwLjU5NCAxNy42MWMtMS42ODkuODc1LTEwLjQzOCA0LjQ1MS0xMi4zIDUuNDE3LTEuODYzLjk2NS0yLjg5OC45NTYtNC4zNy4yNTYtMS40NzEtLjY5OC0xMC43ODItNC40MzgtMTIuNDYtNS4yMzQtMS42NzYtLjc5Ny0xLjcxMi0xLjM0NS0uMDY0LTEuOTg3IDEuNjQ3LS42NDEgMTAuOTA3LTQuMjUyIDEyLjg2NC00Ljk1IDEuOTU3LS42OTggMi42MzYtLjcyMyA0LjMwMS0uMTE3IDEuNjY2LjYwNyAxMC4zNjMgNC4wNDggMTIuMDA5IDQuNjQ3IDEuNjQ2LjYgMS43MSAxLjA5My4wMiAxLjk2OHpcIixcbiAgICBmaWxsOiBcIiNEODJDMjBcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMwLjU5NCAxNS42MDZjLTEuNjg5Ljg3NS0xMC40MzggNC40NS0xMi4zIDUuNDE2LTEuODYzLjk2NS0yLjg5OC45NTYtNC4zNy4yNTctMS40NzEtLjctMTAuNzgyLTQuNDM4LTEyLjQ2LTUuMjM1LS44MzgtLjM5OC0xLjI3OC0uNzM0LTEuMjc4LTEuMDUxdi0zLjE4UzEyLjMwNyA5LjE5IDE0LjI2NCA4LjQ5MmMxLjk1Ny0uNjk4IDIuNjM2LS43MjMgNC4zMDEtLjExNyAxLjY2Ni42MDYgMTEuNjIzIDIuMzkyIDEzLjI3IDIuOTkxbC0uMDAxIDMuMTM1YzAgLjMxNS0uMzguNjYtMS4yNCAxLjEwNXpcIixcbiAgICBmaWxsOiBcIiNBNDFFMTFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMwLjU5NCAxMi40MjVjLTEuNjg5Ljg3NS0xMC40MzggNC40NS0xMi4zIDUuNDE2LTEuODYzLjk2Ni0yLjg5OC45NTYtNC4zNy4yNTctMS40NzEtLjY5OS0xMC43ODItNC40MzgtMTIuNDYtNS4yMzUtMS42NzYtLjc5Ni0xLjcxMi0xLjM0NS0uMDY0LTEuOTg2IDEuNjQ3LS42NDEgMTAuOTA3LTQuMjUzIDEyLjg2NC00Ljk1IDEuOTU3LS42OTggMi42MzYtLjcyNCA0LjMwMS0uMTE3IDEuNjY2LjYwNiAxMC4zNjMgNC4wNDcgMTIuMDA5IDQuNjQ2IDEuNjQ2LjYgMS43MSAxLjA5NC4wMiAxLjk2OXpcIixcbiAgICBmaWxsOiBcIiNEODJDMjBcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMwLjU5NCAxMC4yMjhjLTEuNjg5Ljg3NS0xMC40MzggNC40NTEtMTIuMyA1LjQxNy0xLjg2My45NjUtMi44OTguOTU1LTQuMzcuMjU2LTEuNDcxLS42OTktMTAuNzgyLTQuNDM4LTEyLjQ2LTUuMjM0Qy42MjcgMTAuMjY4LjE4NyA5LjkzMi4xODcgOS42MTV2LTMuMThzMTIuMTIxLTIuNjIzIDE0LjA3OC0zLjMyYzEuOTU3LS42OTkgMi42MzYtLjcyNCA0LjMwMS0uMTE3IDEuNjY2LjYwNiAxMS42MjMgMi4zOTEgMTMuMjcgMi45OWwtLjAwMSAzLjEzNmMwIC4zMTQtLjM4LjY1OS0xLjI0IDEuMTA0elwiLFxuICAgIGZpbGw6IFwiI0E0MUUxMVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMzAuNTk0IDcuMDQ3Yy0xLjY4OS44NzUtMTAuNDM4IDQuNDUxLTEyLjMgNS40MTctMS44NjMuOTY1LTIuODk4Ljk1NS00LjM3LjI1Ni0xLjQ3MS0uNjk5LTEwLjc4Mi00LjQzNy0xMi40Ni01LjIzNEMtLjIxMSA2LjY4OS0uMjQ3IDYuMTQgMS40IDUuNDk5UzEyLjMwNyAxLjI0NyAxNC4yNjQuNTVjMS45NTctLjcgMi42MzYtLjcyNCA0LjMwMS0uMTE4IDEuNjY2LjYwNyAxMC4zNjMgNC4wNDggMTIuMDA5IDQuNjQ3IDEuNjQ2LjYgMS43MSAxLjA5My4wMiAxLjk2OHpcIixcbiAgICBmaWxsOiBcIiNEODJDMjBcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZGRlwiLFxuICAgIGQ6IFwiTTIwLjE1NyAzLjk4NWwtMi43NDIuMjgzLS42MTQgMS40NjgtLjk5Mi0xLjYzOC0zLjE2Ni0uMjgzIDIuMzYyLS44NDctLjcwOC0xLjMgMi4yMTIuODYgMi4wODUtLjY4LS41NjMgMS4zNDV6bS0zLjUyIDcuMTIzbC01LjExOC0yLjExIDcuMzM0LTEuMTE5elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwiZWxsaXBzZVwiLCB7XG4gICAgZmlsbDogXCIjRkZGXCIsXG4gICAgY3g6IDkuNTQxLFxuICAgIGN5OiA2LjMxMSxcbiAgICByeDogMy45MixcbiAgICByeTogMS41MVxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzdBMEMwMFwiLFxuICAgIGQ6IFwiTTIzLjM5OCA0LjM4Nmw0LjM0IDEuNzA1LTQuMzM2IDEuNzAzelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjQUQyMTE1XCIsXG4gICAgZDogXCJNMTguNTk2IDYuMjc0bDQuODAyLTEuODg4LjAwNCAzLjQwOC0uNDcxLjE4M3pcIlxuICB9KSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29SZWRpczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb1NlY3VyaXR5ID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29TZWN1cml0eShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkgNy4wMDhWMGgyMHYxNi43NDRjMCAzLjkxMy02LjM3OCA2LjQ3Ny05LjAxNSA3LjI1NlY3LjAwOEg5elwiLFxuICAgIGZpbGw6IFwiI0ZBNzQ0RVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMyAyMC4wNzNWMTBoMTR2MjJDNy42NjcgMjcuOTggMyAyNC4wMDQgMyAyMC4wNzN6XCIsXG4gICAgZmlsbDogXCIjMURCQUIwXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05IDEwaDh2MTRjLTIuOTgzLTEuMTQtOC0zLjc1Ni04LTcuMDQzVjEwelwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsTmVnYXRpdmVcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb1NlY3VyaXR5OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvU2l0ZVNlYXJjaCA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvU2l0ZVNlYXJjaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkE3NDRFXCIsXG4gICAgZDogXCJNMjcuMDUgMTBoLTcuMzRsLTExIDIyczE1LjY5Ni00Ljk2IDIxLjg1NS0xNi4wNzZDMzIuMDM3IDEzLjI2NiAzMC4wODggMTAgMjcuMDUgMTBcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwQkZCM1wiLFxuICAgIGQ6IFwiTTIxLjM1NSAwSDcuNTMzTC40MjcgMTQuMjExQy0uOTAzIDE2Ljg3MSAxLjAzMiAyMCA0LjAwNCAyMGg3LjM1MWwxMC0yMHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsTmVnYXRpdmVcIixcbiAgICBkOiBcIk0yLjUzMyAxMEwuNDI4IDE0LjIxMUMtLjkwMyAxNi44NzEgMS4wMzIgMjAgNC4wMDUgMjBoNy4zNWw1LTEwSDIuNTMzelwiXG4gIH0pKSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb1NpdGVTZWFyY2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29Ta2V0Y2ggPSBmdW5jdGlvbiBFdWlJY29uTG9nb1NrZXRjaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGw6IFwibm9uZVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRkFFMDBcIixcbiAgICBkOiBcIk0xNiAzMkwwIDExLjQ1NGw2LjkzMS0xMC4zOEwxNiAwbDkuMDY5IDEuMDc0TDMyIDExLjQ1NHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0VDNkMwMFwiLFxuICAgIGQ6IFwiTTE2IDMyTDAgMTEuNDU0aDMyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkZBRTAwXCIsXG4gICAgZDogXCJNMTYgMzJMNi40NzcgMTEuNDU0aDE5LjA0NXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZGRUZCNFwiLFxuICAgIGQ6IFwiTTE2IDBMNi40NzcgMTEuNDU0aDE5LjA0NXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZGQUUwMFwiLFxuICAgIGQ6IFwiTTYuOTMyIDEuMDc0TDMuMzY5IDYuMy4wMDEgMTEuNDU0aDYuNTQyek0yNS4wNjkgMS4wNzRMMjguNjMyIDYuMyAzMiAxMS40NTRoLTYuNTQyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkVEMzA1XCIsXG4gICAgZDogXCJNNi45MzEgMS4wNzRsLS40NTMgMTAuMzhMMTYgMHpNMjUuMDY5IDEuMDc0bC40NTMgMTAuMzhMMTYgMHpcIlxuICB9KSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29Ta2V0Y2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29TbGFjayA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvU2xhY2soX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRTAxRTVBXCIsXG4gICAgZDogXCJNNi44MTMgMjAuMThhMy4zMzcgMy4zMzcgMCAwMS0zLjMzIDMuMzMgMy4zMzcgMy4zMzcgMCAwMS0zLjMyOC0zLjMzIDMuMzM3IDMuMzM3IDAgMDEzLjMyOS0zLjMyOWgzLjMyOXYzLjMzem0xLjY3NyAwYTMuMzM3IDMuMzM3IDAgMDEzLjMzLTMuMzI5IDMuMzM3IDMuMzM3IDAgMDEzLjMyOCAzLjMzdjguMzM1YTMuMzM3IDMuMzM3IDAgMDEtMy4zMjkgMy4zMjkgMy4zMzcgMy4zMzcgMCAwMS0zLjMyOS0zLjMzVjIwLjE4elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMzZDNUYwXCIsXG4gICAgZDogXCJNMTEuODIgNi44MTNhMy4zMzcgMy4zMzcgMCAwMS0zLjMzLTMuMzNBMy4zMzcgMy4zMzcgMCAwMTExLjgyLjE1NmEzLjMzNyAzLjMzNyAwIDAxMy4zMjggMy4zMjl2My4zMjlIMTEuODJ6bTAgMS42NzdhMy4zMzcgMy4zMzcgMCAwMTMuMzI4IDMuMzMgMy4zMzcgMy4zMzcgMCAwMS0zLjMyOSAzLjMyOEgzLjQ4NGEzLjMzNyAzLjMzNyAwIDAxLTMuMzMtMy4zMjkgMy4zMzcgMy4zMzcgMCAwMTMuMzMtMy4zMjloOC4zMzV6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMyRUI2N0RcIixcbiAgICBkOiBcIk0yNS4xODcgMTEuODJhMy4zMzcgMy4zMzcgMCAwMTMuMzI5LTMuMzMgMy4zMzcgMy4zMzcgMCAwMTMuMzI5IDMuMzMgMy4zMzcgMy4zMzcgMCAwMS0zLjMzIDMuMzI4aC0zLjMyOFYxMS44MnptLTEuNjc4IDBhMy4zMzcgMy4zMzcgMCAwMS0zLjMyOSAzLjMyOCAzLjMzNyAzLjMzNyAwIDAxLTMuMzI5LTMuMzI5VjMuNDg0YTMuMzM3IDMuMzM3IDAgMDEzLjMzLTMuMzMgMy4zMzcgMy4zMzcgMCAwMTMuMzI4IDMuMzN2OC4zMzV6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNFQ0IyMkVcIixcbiAgICBkOiBcIk0yMC4xOCAyNS4xODdhMy4zMzcgMy4zMzcgMCAwMTMuMzMgMy4zMjkgMy4zMzcgMy4zMzcgMCAwMS0zLjMzIDMuMzI5IDMuMzM3IDMuMzM3IDAgMDEtMy4zMjktMy4zM3YtMy4zMjhoMy4zM3ptMC0xLjY3OGEzLjMzNyAzLjMzNyAwIDAxLTMuMzI5LTMuMzI5IDMuMzM3IDMuMzM3IDAgMDEzLjMzLTMuMzI5aDguMzM1YTMuMzM3IDMuMzM3IDAgMDEzLjMyOSAzLjMzIDMuMzM3IDMuMzM3IDAgMDEtMy4zMyAzLjMyOEgyMC4xOHpcIlxuICB9KSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29TbGFjazsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb1VwdGltZSA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvVXB0aW1lKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjM0VCRUIwXCIsXG4gICAgZDogXCJNMTkgMTVjMCA3LjA2Mi00Ljg4OCAxMi45NjktMTEuNDYgMTQuNTYzQTE1LjkxNCAxNS45MTQgMCAwMDE2IDMyYzguODM2IDAgMTYtNy4xNjMgMTYtMTZ2LTNsLTYuNS02LTYuNSA2djJ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwN0NcIixcbiAgICBkOiBcIk02LjgzMyAyNi42NDZhMTEuOTU0IDExLjk1NCAwIDAwOC41NDQtNy44MzRBMTIuNDMgMTIuNDMgMCAwMTEzIDExLjVWLjI5MkM1LjYgMS42OTYgMCA4LjE5IDAgMTYuMDAyYzAgNC4zNTggMS43NSA4LjMwNiA0LjU3NyAxMS4xOTJsMi4yNTYtLjU0N3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsTmVnYXRpdmVcIixcbiAgICBkOiBcIk0zMC4zNjIgMjMuMDJjLTEuNDk0LjYzLTMuMTM3Ljk4LTQuODYxLjk4YTEyLjQ0MyAxMi40NDMgMCAwMS03Ljg1Mi0yLjc4IDE1LjA0MiAxNS4wNDIgMCAwMS0xMC4xMSA4LjM0M0ExNS45MSAxNS45MSAwIDAwMTYuMDAyIDMyYzYuMzE0IDAgMTEuNzU4LTMuNjY5IDE0LjM2LTguOThcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb1VwdGltZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb1dlYmhvb2sgPSBmdW5jdGlvbiBFdWlJY29uTG9nb1dlYmhvb2soX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjQzczQTYzXCIsXG4gICAgZDogXCJNMTQuOTQzIDEzLjU2M2MtMS4zMjcgMi4yMy0yLjU5NyA0LjM4OC0zLjg5NCA2LjUzMS0uMzM0LjU1LS40OTguOTk4LS4yMzIgMS42OTguNzM0IDEuOTMxLS4zMDIgMy44MTEtMi4yNSA0LjMyMS0xLjgzNy40ODItMy42MjctLjcyNi0zLjk5Mi0yLjY5Mi0uMzIzLTEuNzQxIDEuMDI4LTMuNDQ4IDIuOTQ4LTMuNzIuMTYtLjAyMy4zMjUtLjAyNi41OTUtLjA0NmwyLjkyLTQuODk2QzkuMiAxMi45MzMgOC4xMDggMTAuOCA4LjM1IDguMTU0Yy4xNzEtMS44Ny45MDctMy40ODYgMi4yNS00LjgxYTcuNjM5IDcuNjM5IDAgMDE5LjUzMS0xYzIuOTEgMS44NyA0LjI0NCA1LjUxMiAzLjEwNyA4LjYyOWwtMi42NjgtLjcyNGMuMzU3LTEuNzMzLjA5My0zLjI5LTEuMDc2LTQuNjIzLS43NzItLjg4LTEuNzYzLTEuMzQxLTIuODktMS41MTEtMi4yNTgtLjM0MS00LjQ3NiAxLjExLTUuMTM0IDMuMzI3LS43NDggMi41MTYuMzgzIDQuNTcyIDMuNDczIDYuMTIxelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjNEI0QjRCXCIsXG4gICAgZDogXCJNMTguNzMgMTAuOTI2bDIuODIzIDQuOThjNC43NTMtMS40NyA4LjMzNiAxLjE2IDkuNjIyIDMuOTc3IDEuNTUyIDMuNDAyLjQ5MSA3LjQzMi0yLjU1OCA5LjUzMS0zLjEzIDIuMTU1LTcuMDg5IDEuNzg3LTkuODYyLS45ODFsMi4xNzYtMS44MjFjMi43MzkgMS43NzQgNS4xMzUgMS42OSA2LjkxMy0uNDFhNC43NjYgNC43NjYgMCAwMC0uMDc3LTYuMjE5Yy0xLjgtMi4wMjUtNC4yMTMtMi4wODYtNy4xMy0uMTQzLTEuMjA5LTIuMTQ2LTIuNDQtNC4yNzUtMy42MS02LjQzNi0uMzk2LS43MjktLjgzMi0xLjE1Mi0xLjcyMi0xLjMwNi0xLjQ4Ny0uMjU3LTIuNDQ2LTEuNTM0LTIuNTA0LTIuOTY0YTMuMjU4IDMuMjU4IDAgMDEyLjA4LTMuMTkyIDMuMjQzIDMuMjQzIDAgMDEzLjY3MSAxLjAwMmMuNzEuODk2LjkzNSAxLjkwNS41NjIgMy4wMS0uMTA0LjMwOS0uMjM4LjYwNy0uMzg0Ljk3MnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzRBNEE0QVwiLFxuICAgIGQ6IFwiTTIwLjk2MyAyNC40MDFoLTUuNzJjLS41NSAyLjI1Ni0xLjczNCA0LjA3Ny0zLjc3NSA1LjIzNS0xLjU4Ni45LTMuMjk2IDEuMjA1LTUuMTE2LjkxMUMzIDMwLjAwNy4yNiAyNi45OS4wMTkgMjMuNTkzYy0uMjczLTMuODQ4IDIuMzcyLTcuMjY4IDUuODk4LTguMDM2bC43MzIgMi42NThjLTMuMjM0IDEuNjUtNC4zNTMgMy43My0zLjQ0OCA2LjMzLjc5NyAyLjI4NyAzLjA2IDMuNTQxIDUuNTE4IDMuMDU2IDIuNTEtLjQ5NSAzLjc3Ni0yLjU4MSAzLjYyMS01LjkyOSAyLjM4IDAgNC43NjEtLjAyNCA3LjE0LjAxMi45My4wMTUgMS42NDgtLjA4MSAyLjM0OC0uOSAxLjE1Mi0xLjM0OSAzLjI3My0xLjIyNyA0LjUxNS4wNDYgMS4yNjggMS4zMDEgMS4yMDcgMy4zOTUtLjEzNSA0LjY0MWEzLjIzNiAzLjIzNiAwIDAxLTQuNTUzLS4xNTdjLS4yNDktLjI2Ny0uNDQ1LS41ODUtLjY5Mi0uOTEzelwiXG4gIH0pKSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb1dlYmhvb2s7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29XaW5kb3dzID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29XaW5kb3dzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDBBREVGXCIsXG4gICAgZDogXCJNMCA0LjUxbDEyLjk3Ny0xLjc2OC4wMDYgMTIuNTE4LTEyLjk3MS4wNzRMMCA0LjUxem0xMi45NyAxMi4xOTJsLjAxMSAxMi41MjktMTIuOTctMS43ODQtLjAwMi0xMC44MjkgMTIuOTYyLjA4NHptMS41NzQtMTQuMTlMMzEuNzUxIDB2MTUuMWwtMTcuMjA3LjEzN1YyLjUxMXptMTcuMjEgMTQuMzA4bC0uMDAzIDE1LjAzMy0xNy4yMDctMi40MjktLjAyNC0xMi42MzIgMTcuMjM1LjAyOHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb1dpbmRvd3M7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29Xb3JrcGxhY2VTZWFyY2ggPSBmdW5jdGlvbiBFdWlJY29uTG9nb1dvcmtwbGFjZVNlYXJjaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE3LjU1NyA1LjA1Yy4xNy0uMjAyLjQ1Ny0uNTEyLjg2LS45M0MxOS40ODMgMy4wMTcgMjEuODI4IDEgMjMuODAxIDFIMzB2MzBoLTYuMmMtMS45NzIgMC0zLjk5NS0xLjQ0OS01LjM4My0zLjEwNmwtLjc2NC0xLjA1MiAyLjc1LTMuNDc3YzMuNDYyLTQuMzc2IDMuNDYzLTEwLjMzMi4wMDEtMTQuNzA3TDE3LjU1NyA1LjA1elwiLFxuICAgIGZpbGw6IFwiI0ZFQzUxNFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMiAzMVYxaDUuODFjMS43MSAwIDMuMzUuNzg2IDQuMzg3IDIuMWw1Ljg1NSA3LjQyYzIuNTk4IDMuMjgzIDIuNTk4IDcuNjk4LS4wMDIgMTAuOTgzbC01Ljg1NSA3LjQwM0MxMS4xNTggMzAuMjE3IDkuNTIgMzEgNy44MTUgMzFIMnpcIixcbiAgICBmaWxsOiBcIiNGMDRFOThcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE1LjM4NCAyNC44OUwxMi4xNSAyMS43Yy0yLjg2OC0zLjMxOC0yLjg2OC04LjIyLjAwMi0xMS4zMjIgMS41MzUtMS42MzkgMi42MTEtMi43MTggMy4yMy0zLjIzOGwyLjY3IDMuMjM4YzIuNjM3IDMuMzg1IDIuNTc1IDcuOTg3LS4wNjIgMTEuMzc0bC0yLjYwNyAzLjEzN3pcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29Xb3JrcGxhY2VTZWFyY2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ3N0YXNoRmlsdGVyID0gZnVuY3Rpb24gRXVpSWNvbkxvZ3N0YXNoRmlsdGVyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNy45MTQgMWMtMy42IDAtNS44OTcgMS4xMTEtNS44OTcgMS44NzYgMCAuNzY2IDIuMjk3IDEuODc3IDUuODk3IDEuODc3czUuODk3LTEuMTExIDUuODk3LTEuODc3QzEzLjgxMSAyLjExMSAxMS41MTQgMSA3LjkxNCAxbTMuOTggNy45ODhjLTEuMTg3LjMzMS0yLjYwMS41MDItMy45OC41MDItMS4zODMgMC0yLjgwMS0uMTcyLTMuOTkxLS41MDVsMi44NjMgMy4yNDJ2Mi41MTVjLjEzNi4wOC41MTUuMjE0IDEuMTI4LjIxNC42MSAwIC45ODktLjEzMyAxLjEyNi0uMjEzdi0yLjUxNWwyLjg1NC0zLjI0em0yLjM5NC0xLjIwNmwtNC4yNDggNC44MjN2Mi4yNDZoLjAwNGMwIC43NjMtMS4wNjkgMS4xMDUtMi4xMyAxLjEwNS0xLjA2IDAtMi4xMy0uMzQyLTIuMTMtMS4xMDVoLjAwMnYtMi4yNDVMMS4zMjEgNy41NWwuMDEtLjAwOEExLjUzIDEuNTMgMCAwMTEgNi42MDdWMi43OGguMDJDMS4xNC45NzMgNC42MjcgMCA3LjkxMyAwYzMuMjg2IDAgNi43NzQuOTczIDYuODk0IDIuNzhoLjAydjMuODI3YzAgLjM0My0uMTIuNjU3LS4zMzUuOTQxbC0uMDAzLjAwNGMtLjA2LjA3OS0uMTI4LjE1NS0uMjAyLjIzem0tLjU3OC0uODU2YS41Ni41NiAwIDAwLjExOC0uMzE5VjQuNDExYy0xLjI4OC44NzktMy42NDkgMS4zNDItNS45MTQgMS4zNDJDNS42NSA1Ljc1MyAzLjI4OCA1LjI5IDIgNC40MTF2Mi4xOTZDMiA3LjM3NSA0LjMwNCA4LjQ5IDcuOTE0IDguNDljMi44NzkgMCA0LjkyNy0uNzA5IDUuNjM5LTEuMzg1bC4xNTctLjE4elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dzdGFzaEZpbHRlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nc3Rhc2hJZiA9IGZ1bmN0aW9uIEV1aUljb25Mb2dzdGFzaElmKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNi45MTggOS43OTlsLTQuODIgNC44MTkgMi44OC0uNDMuMTQ4Ljk4N0wwIDE1Ljk0M2wuNzY4LTUuMTI2Ljk4OC4xNDgtLjQ1MyAzLjAzMyA0LjkzNi00LjkzNWEyLjAwMyAyLjAwMyAwIDAxMS4yNjUtMi44ODVWMGgxdjYuMTc4YTIuMDAzIDIuMDAzIDAgMDExLjI2MyAyLjg4NGw0Ljg2NSA0Ljg2Ni0uNDQzLTIuOTYzLjk4OC0uMTQ3Ljc2OCA1LjEyNi01LjEyNy0uNzY5LjE1LS45ODggMi45NS40NDEtNC44My00LjgzYy0uMzEyLjIwMy0uNjg1LjMyLTEuMDg1LjMyLS40IDAtLjc3My0uMTE3LTEuMDg1LS4zMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nc3Rhc2hJZjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nc3Rhc2hJbnB1dCA9IGZ1bmN0aW9uIEV1aUljb25Mb2dzdGFzaElucHV0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMS43NDcgMTAuOTkyaDEzLjFhLjEyMy4xMjMgMCAwMC4xMjItLjEyM1Y4LjUxYS4xMjIuMTIyIDAgMDAtLjEyMi0uMTIySDEuMTIyQS4xMjIuMTIyIDAgMDAxIDguNTF2Mi4zNmMwIC4wNjYuMDU1LjEyMi4xMjIuMTIyaC42MjV6bTEyLjAxMSAxSDIuMjFWMTZoLTF2LTQuMDA4aC0uMDg4QTEuMTI0IDEuMTI0IDAgMDEwIDEwLjg3VjguNTFjMC0uNjIuNTAzLTEuMTIyIDEuMTIyLTEuMTIyaDEzLjcyNWMuNjIgMCAxLjEyMi41MDIgMS4xMjIgMS4xMjJ2Mi4zNmMwIC42MTgtLjUwMyAxLjEyMi0xLjEyMiAxLjEyMmgtLjA4OVYxNmgtMXYtNC4wMDh6bS02LjI3LTcuNDg3VjBoMXY0LjUyOWwyLjQwNy0yLjI2Mi42ODUuNzNMOCA2LjM1NiA0LjQyIDIuOTk1bC42ODUtLjcyOSAyLjM4MyAyLjI0elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dzdGFzaElucHV0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dzdGFzaE91dHB1dCA9IGZ1bmN0aW9uIEV1aUljb25Mb2dzdGFzaE91dHB1dChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIuMjEgNC4wMDhIMTMuNzZWMGgxdjQuMDA4aC4wODhjLjYxOSAwIDEuMTIyLjUwNCAxLjEyMiAxLjEyM1Y3LjQ5YzAgLjYyLS41MDMgMS4xMjItMS4xMjIgMS4xMjJIMS4xMjJBMS4xMjIgMS4xMjIgMCAwMTAgNy40OVY1LjEzYzAtLjYxOC41MDMtMS4xMjIgMS4xMjItMS4xMjJoLjA4OVYwaDF2NC4wMDh6bTExLjU0OSAxSDEuMTJBLjEyMy4xMjMgMCAwMDEgNS4xM1Y3LjQ5YzAgLjA2OC4wNTUuMTIyLjEyMi4xMjJoMTMuNzI1YS4xMjIuMTIyIDAgMDAuMTIyLS4xMjJWNS4xM2EuMTIzLjEyMyAwIDAwLS4xMjItLjEyMmgtMS4wODh6bS01LjMwMSA5LjA5N2wyLjQwNS0yLjI2LjY4Ni43MjgtMy41OCAzLjM2My0zLjU4LTMuMzYzLjY4Ni0uNzI4IDIuMzgzIDIuMjRWOS41NzdoMXY0LjUyOHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nc3Rhc2hPdXRwdXQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ3N0YXNoUXVldWUgPSBmdW5jdGlvbiBFdWlJY29uTG9nc3Rhc2hRdWV1ZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTExLjMzOSAxNS40NjRINC43N2EzLjI0OCAzLjI0OCAwIDAxLTMuMjQ1LTMuMjQ0VjQuNTQ5SDB2LTFoMi41MjZ2OC42N2EyLjI0NyAyLjI0NyAwIDAwMi4yNDUgMi4yNDVoNi41NjhhMi4yNDcgMi4yNDcgMCAwMDIuMjQ0LTIuMjQ0VjMuNTQ5aDIuNDU1djFoLTEuNDU1djcuNjdhMy4yNDcgMy4yNDcgMCAwMS0zLjI0NCAzLjI0NXptLjUxMy01Ljk2MnYxLjA5NWwtMy44NDggMS43Mi0zLjg1LTEuNzJWOS41MDJsMy44NSAxLjcyIDMuODQ4LTEuNzJ6bTAtNC4yNTF2MS4wOTVsLTMuODQ4IDEuNzItMy44NS0xLjcyVjUuMjVsMy44NSAxLjcyIDMuODQ4LTEuNzJ6bTAtNC4yNTF2MS4wOTVsLTMuODQ4IDEuNzItMy44NS0xLjcyVjFsMy44NSAxLjcyTDExLjg1MiAxelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dzdGFzaFF1ZXVlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25NYWduZXQgPSBmdW5jdGlvbiBFdWlJY29uTWFnbmV0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNC41NTIgMTAuNzFhMy4wMDggMy4wMDggMCAwMDQuMTkuNzM4bDEuNjQyLTEuMTUgMS4xNSAxLjY0Mi0xLjY0MyAxLjE1YTUuMDEzIDUuMDEzIDAgMTEtNS43NS04LjIxMmwxLjY0Mi0xLjE1IDEuMTUgMS42NDMtMS42NDIgMS4xNWEzLjAwNyAzLjAwNyAwIDAwLS43MzkgNC4xODl6bTguMjk2LTIuMTM3bDEuMTUgMS42NDMtMS42NDMgMS4xNDktMS4xNS0xLjY0MiAxLjY0My0xLjE1em0tNC42LTYuNTcxbDEuMTUgMS42NDMtMS42NDMgMS4xNS0xLjE1LTEuNjQyIDEuNjQyLTEuMTUxem0xLjk3IDEuMDY4TDkuMDcgMS40MjhhMS4wMDMgMS4wMDMgMCAwMC0xLjM5Ny0uMjQ2TDMuNTY2IDQuMDU3QTUuOTk1IDUuOTk1IDAgMDAxLjA5MiA3Ljk0YTUuOTkzIDUuOTkzIDAgMDAuOTk2IDQuNDk1IDUuOTkgNS45OSAwIDAwMy44ODMgMi40NzMgNS45OTEgNS45OTEgMCAwMDQuNDk1LS45OTZsNC4xMDctMi44NzVjLjQ1NC0uMzE4LjU2My0uOTQzLjI0Ni0xLjM5NmwtMS4xNS0xLjY0M2ExLjAwMiAxLjAwMiAwIDAwLTEuMzk2LS4yNDZsLTQuMTA3IDIuODc1YTIuMDAyIDIuMDAyIDAgMDEtMS40OTguMzMyIDIgMiAwIDAxLTEuNjI3LTIuMzIzYy4wOS0uNTA1LjM3MS0uOTc2LjgyNC0xLjI5NGw0LjEwNy0yLjg3NmMuNDU0LS4zMTcuNTY0LS45NDIuMjQ2LTEuMzk2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25NYWduZXQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbk1hZ25pZnlXaXRoRXhjbGFtYXRpb24gPSBmdW5jdGlvbiBFdWlJY29uTWFnbmlmeVdpdGhFeGNsYW1hdGlvbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE1LjE0MyAxNS44NWwtMy44NzItMy44NzJhLjUuNSAwIDAxLS4wMzQtLjczOCA2LjAxIDYuMDEgMCAwMDAtOC40ODYgNi4wMDQgNi4wMDQgMCAwMC04LjQ4NCAwIDYuMDEgNi4wMSAwIDAwMCA4LjQ4NiA1Ljk2IDUuOTYgMCAwMDQuMjQyIDEuNzU3LjUuNSAwIDAxMCAxIDYuOTU1IDYuOTU1IDAgMDEtNC45NDktMi4wNWMtMi43MjgtMi43My0yLjcyOC03LjE3MSAwLTkuOSAyLjcyOC0yLjczIDcuMTY4LTIuNzMgOS44OTggMCAyLjYwOSAyLjYxIDIuNzIzIDYuNzg1LjM0MiA5LjUzMmwzLjU2NSAzLjU2NGEuNTAyLjUwMiAwIDAxLS43MDguNzA4ek02LjI1NCAzbC4yNzcgNS4wNjNoLjkzNUw3Ljc1NCAzaC0xLjV6bS4yMjIgNy41NDhhLjcyNy43MjcgMCAwMC41MzMuMjIyLjcxNy43MTcgMCAwMC41Mi0uMjIuNzE1LjcxNSAwIDAwLjIyNS0uNTMuNzE2LjcxNiAwIDAwLS4yMjItLjUzNC43MjQuNzI0IDAgMDAtLjUyMy0uMjE2LjczMS43MzEgMCAwMC0uNTMzLjIxOS43MTkuNzE5IDAgMDAtLjIyMi41M2MwIC4yMDUuMDc0LjM4LjIyMi41Mjl6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1hZ25pZnlXaXRoRXhjbGFtYXRpb247IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbk1hZ25pZnlXaXRoTWludXMgPSBmdW5jdGlvbiBFdWlJY29uTWFnbmlmeVdpdGhNaW51cyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuNSA2YS41LjUgMCAwMTAgMWgtNmEuNS41IDAgMDEwLTFoNnptLjc0IDQuNzRjMC0uMTE3LjA0LS4yMjUuMTA3LS4zMUE1LjQ3OCA1LjQ3OCAwIDAwMTIgNi41IDUuNSA1LjUgMCAxMDYuNSAxMmEuNS41IDAgMTEwIDEgNi41IDYuNSAwIDExNC45MzYtMi4yN2w0LjQxOSA0LjQxOGEuNS41IDAgMDEtLjcwNy43MDdsLTQuNzY4LTQuNzY4YS40OTkuNDk5IDAgMDEtLjE0LS4zNDd6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1hZ25pZnlXaXRoTWludXM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbk1hZ25pZnlXaXRoUGx1cyA9IGZ1bmN0aW9uIEV1aUljb25NYWduaWZ5V2l0aFBsdXMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03IDZoMi41YS41LjUgMCAwMTAgMUg3djIuNWEuNS41IDAgMDEtMSAwVjdIMy41YS41LjUgMCAwMTAtMUg2VjMuNWEuNS41IDAgMDExIDBWNnptMy4yNCA0Ljc0YzAtLjExNy4wNC0uMjI1LjEwNy0uMzFBNS40NzggNS40NzggMCAwMDEyIDYuNSA1LjUgNS41IDAgMTA2LjUgMTJhLjUuNSAwIDExMCAxIDYuNSA2LjUgMCAxMTQuOTM2LTIuMjdsNC40MTkgNC40MThhLjUuNSAwIDAxLS43MDcuNzA3bC00Ljc2OC00Ljc2OGEuNDk5LjQ5OSAwIDAxLS4xNC0uMzQ3elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25NYWduaWZ5V2l0aFBsdXM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbk1hcE1hcmtlciA9IGZ1bmN0aW9uIEV1aUljb25NYXBNYXJrZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjU1IDE0LjIyNGEuNTAyLjUwMiAwIDAwLjg5NyAwbDQtOGEuNS41IDAgMDAuMDUzLS4yMzUgNC42NzIgNC42NzIgMCAwMC0uMDg0LS43MDUgNS41MzggNS41MzggMCAwMC0uNTA1LTEuNTEyQzExLjE4OSAyLjM2MiA5LjkwNiAxLjUgOCAxLjVjLTEuOTA2IDAtMy4xOS44NjItMy45MSAyLjI3Mi0uMjQ4LjQ4NS0uNDEuOTk4LS41MDYgMS41MTItLjA1OC4zMS0uMDguNTU0LS4wODQuNzA1YS41LjUgMCAwMC4wNTMuMjM1bDMuOTk3IDh6TTggNWExIDEgMCAxMDAgMiAxIDEgMCAwMDAtMnptLTMuNDkzLjg5NWMuMDA5LS4xMDYuMDI3LS4yNTMuMDYtLjQyOS4wNzktLjQyNC4yMTMtLjg0OC40MTMtMS4yMzhDNS41MzcgMy4xMzggNi40ODcgMi41IDggMi41YzEuNTEzIDAgMi40NjMuNjM4IDMuMDIgMS43MjguMi4zOS4zMzQuODE0LjQxMyAxLjIzOC4wMzMuMTc2LjA1MS4zMjMuMDYuNDNMOCAxMi44ODEgNC41MDcgNS44OTV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1hcE1hcmtlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTWVtb3J5ID0gZnVuY3Rpb24gRXVpSWNvbk1lbW9yeShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcgMTBoMlY2SDd6TTMgMTBoMlY2SDN6TTExLjAyNSAxMGgyVjZoLTJ6TTMuNSAxMy43NWgxdi0yLjRoLTF6TTYuMTc1IDEzLjc1aDEuMDAxdi0yLjRINi4xNzV6TTguODUgMTMuNzVoMXYtMi40aC0xek0xMS41MjUgMTMuNzVoMXYtMi40aC0xelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMCAzdjcuMDVoMXYzLjY5OGgxdi0zLjY5OWgxMnYzLjY5OWgxdi0zLjY5OWgxVjNIMHptMSA2aDE0VjRIMXY1elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25NZW1vcnk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbk1lbnUgPSBmdW5jdGlvbiBFdWlJY29uTWVudShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTAgMmgxNnYySDBWMnptMCA1aDE2djJIMFY3em0xNiA1SDB2MmgxNnYtMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWVudTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTWVudURvd24gPSBmdW5jdGlvbiBFdWlJY29uTWVudURvd24oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02IDcuNWMwIC4yNzYtLjIxNi41LS40OTUuNWgtMi4wMWEuNTAzLjUwMyAwIDAxLS40ODctLjQxMkwzIDcuNWMwLS4yNzYuMjE2LS41LjQ5NS0uNWgyLjAxYy4yNDMgMCAuNDQ1LjE4My40ODcuNDEyTDYgNy41ek0zLjUxIDRhLjUxMy41MTMgMCAwMS0uNTAyLS40MTJMMyAzLjVjMC0uMjc2LjIyOC0uNS41MS0uNWg4Ljk4Yy4yNSAwIC40NTkuMTgzLjUwMi40MTJMMTMgMy41YzAgLjI3Ni0uMjI4LjUtLjUxLjVIOC40OTN2Ny43OTJsMi4wNi0yLjA2YS41LjUgMCAxMS43MDcuNzA3TDkuMTQgMTIuNTZBMS40OTYgMS40OTYgMCAwMTguMDI2IDEzTDcuOTkzIDEzYS41MDEuNTAxIDAgMDEtLjExOC0uMDE0IDEuNDkzIDEuNDkzIDAgMDEtLjg1Ny0uNDI2bC0yLjEyMi0yLjEyYS41LjUgMCAwMS43MDgtLjcwOGwxLjg4OSAxLjg5VjRIMy41MXpNMTMgNy41YzAgLjI3Ni0uMjE2LjUtLjQ5NS41aC0yLjAxYS41MDMuNTAzIDAgMDEtLjQ4Ny0uNDEyTDEwIDcuNWMwLS4yNzYuMjE2LS41LjQ5NS0uNWgyLjAxYy4yNDMgMCAuNDQ1LjE4My40ODcuNDEyTDEzIDcuNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWVudURvd247IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbk1lbnVMZWZ0ID0gZnVuY3Rpb24gRXVpSWNvbk1lbnVMZWZ0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMS4wMTQgNy4zODJhLjUwMS41MDEgMCAwMC0uMDEzLjE1MmMtLjAxNC40LjEzMy44MDYuNDM5IDEuMTEybDIuMTIgMi4xMjJhLjUuNSAwIDEwLjcwOC0uNzA4TDIuMjA4IDhIMTQuNWEuNS41IDAgMDAwLTFIMi4zNzlsMS44ODktMS44OWEuNS41IDAgMDAtLjcwNy0uNzA2TDEuNDQgNi41MjRjLS4yNDEuMjQyLS4zODMuNTQ0LS40MjYuODU4ek0xNC41IDNoLTdhLjUuNSAwIDAwMCAxaDdhLjUuNSAwIDAwMC0xem0wIDhoLTdhLjUuNSAwIDEwMCAxaDdhLjUuNSAwIDEwMC0xelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25NZW51TGVmdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTWVudVJpZ2h0ID0gZnVuY3Rpb24gRXVpSWNvbk1lbnVSaWdodChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE0Ljk4NiA3LjM4MmEuNTAxLjUwMSAwIDAxLjAxMy4xNTJjLjAxNC40LS4xMzMuODA2LS40MzkgMS4xMTJsLTIuMTIgMi4xMjJhLjUuNSAwIDExLS43MDgtLjcwOEwxMy43OTIgOEgxLjVhLjUuNSAwIDAxMC0xaDEyLjEyMWwtMS44ODktMS44OWEuNS41IDAgMDEuNzA3LS43MDZsMi4xMjEgMi4xMmMuMjQxLjI0Mi4zODMuNTQ0LjQyNi44NTh6TTEuNSAzaDdhLjUuNSAwIDAxMCAxaC03YS41LjUgMCAwMTAtMXptMCA4aDdhLjUuNSAwIDExMCAxaC03YS41LjUgMCAxMTAtMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWVudVJpZ2h0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25NZW51VXAgPSBmdW5jdGlvbiBFdWlJY29uTWVudVVwKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAuMDEgOC41YzAtLjI3Ni4yMTYtLjUuNDk1LS41aDIuMDFjLjI0MyAwIC40NDUuMTgzLjQ4Ny40MTJsLjAwOC4wODhjMCAuMjc2LS4yMTYuNS0uNDk1LjVoLTIuMDFhLjUwMy41MDMgMCAwMS0uNDg3LS40MTJMMTAuMDEgOC41ek0xMi41IDEyYy4yNSAwIC40NTkuMTgzLjUwMi40MTJsLjAwOC4wODhjMCAuMjc2LS4yMjguNS0uNTEuNUgzLjUyYS41MTMuNTEzIDAgMDEtLjUwMi0uNDEyTDMuMDEgMTIuNWMwLS4yNzYuMjI4LS41LjUxLS41aDMuOTg3VjQuMjA4bC0yLjA2IDIuMDZhLjUuNSAwIDExLS43MDctLjcwN0w2Ljg2IDMuNDRBMS40OTYgMS40OTYgMCAwMTcuOTc0IDNMOC4wMDcgM2MuMDQgMCAuMDguMDA1LjExOC4wMTQuMzE0LjA0My42MTYuMTg1Ljg1Ny40MjZsMi4xMjIgMi4xMmEuNS41IDAgMDEtLjcwOC43MDhsLTEuODg5LTEuODlWMTJIMTIuNXpNMyA4LjVjMC0uMjc2LjIxNi0uNS40OTUtLjVoMi4wMWMuMjQzIDAgLjQ0NS4xODMuNDg3LjQxMkw2IDguNWMwIC4yNzYtLjIxNi41LS40OTUuNWgtMi4wMWEuNTAzLjUwMyAwIDAxLS40ODctLjQxMkwzIDguNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWVudVVwOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25NZXJnZSA9IGZ1bmN0aW9uIEV1aUljb25NZXJnZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuMzUyIDZIMi41YS41LjUgMCAwMTAtMWg0Ljg1Mkw1LjEyIDIuNzIxYy0uMTgtLjE4My0uMTU1LS40Ni4wNTUtLjYxNmEuNTUxLjU1MSAwIDAxLjcwNS4wNDhsMyAzLjA2MmMuMTYuMTY0LjE2LjQwNSAwIC41N2wtMyAzLjA2MkEuNTMyLjUzMiAwIDAxNS41IDlhLjU0LjU0IDAgMDEtLjMyNS0uMTA2Yy0uMjEtLjE1Ny0uMjM1LS40MzMtLjA1NS0uNjE2TDcuMzUyIDZ6bTEuMjk2IDRIMTMuNWEuNS41IDAgMDEwIDFIOC42NDhsMi4yMzIgMi4yNzhjLjE4LjE4My4xNTUuNDYtLjA1NS42MTdBLjU0LjU0IDAgMDExMC41IDE0YS41MzIuNTMyIDAgMDEtLjM4LS4xNTNsLTMtMy4wNjNhLjM5Ny4zOTcgMCAwMTAtLjU2OGwzLTMuMDYzYS41NTEuNTUxIDAgMDEuNzA1LS4wNDdjLjIxLjE1Ni4yMzUuNDMzLjA1NS42MTZMOC42NDggMTB6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1lcmdlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25NaW5pbWl6ZSA9IGZ1bmN0aW9uIEV1aUljb25NaW5pbWl6ZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEuMTQ2IDE0LjE0Nmw0LTRhLjUuNSAwIDAxLjc2NS42MzhsLS4wNTcuMDctNCA0YS41LjUgMCAwMS0uNzY1LS42MzhsLjA1Ny0uMDcgNC00LTQgNHpNNi41IDhBMS41IDEuNSAwIDAxOCA5LjV2M2EuNS41IDAgMTEtMSAwdi0zYS41LjUgMCAwMC0uNS0uNWgtM2EuNS41IDAgMDEwLTFoM3ptMi01YS41LjUgMCAwMS41LjV2M2EuNS41IDAgMDAuNS41aDNhLjUuNSAwIDExMCAxaC0zQTEuNSAxLjUgMCAwMTggNi41di0zYS41LjUgMCAwMS41LS41em0xLjY1MSAyLjE0Nmw0LTRhLjUuNSAwIDAxLjc2NS42MzhsLS4wNTcuMDctNCA0YS41LjUgMCAwMS0uNzY1LS42MzhsLjA1Ny0uMDcgNC00LTQgNHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWluaW1pemU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbk1pbnVzID0gZnVuY3Rpb24gRXVpSWNvbk1pbnVzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicmVjdFwiLCB7XG4gICAgd2lkdGg6IDEwLFxuICAgIGhlaWdodDogMS41LFxuICAgIHg6IDMsXG4gICAgeTogNy4yNSxcbiAgICByeDogMC41XG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25NaW51czsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTWludXNJbkNpcmNsZSA9IGZ1bmN0aW9uIEV1aUljb25NaW51c0luQ2lyY2xlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTcuNSAwQzExLjYzNiAwIDE1IDMuMzY0IDE1IDcuNVMxMS42MzYgMTUgNy41IDE1IDAgMTEuNjM2IDAgNy41IDMuMzY0IDAgNy41IDB6bTAgLjg4MmE2LjYxOCA2LjYxOCAwIDEwMCAxMy4yMzZBNi42MTggNi42MTggMCAwMDcuNS44ODJ6TTMuNSA3aDhhLjUuNSAwIDExMCAxaC04YS41LjUgMCAwMTAtMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWludXNJbkNpcmNsZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTWludXNJbkNpcmNsZUZpbGxlZCA9IGZ1bmN0aW9uIEV1aUljb25NaW51c0luQ2lyY2xlRmlsbGVkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTcuNSAwQzExLjYzNiAwIDE1IDMuMzY0IDE1IDcuNVMxMS42MzYgMTUgNy41IDE1IDAgMTEuNjM2IDAgNy41IDMuMzY0IDAgNy41IDB6bS00IDdhLjUuNSAwIDAwMCAxaDhhLjUuNSAwIDEwMC0xaC04elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25NaW51c0luQ2lyY2xlRmlsbGVkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25NbENsYXNzaWZpY2F0aW9uSm9iID0gZnVuY3Rpb24gRXVpSWNvbk1sQ2xhc3NpZmljYXRpb25Kb2IoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03IDE2djVoMi4wMzhhMTMuMTc5IDEzLjE3OSAwIDAwMCAySDd2NUg1di01SDB2LTJoNXYtNWgyek03IDB2NWg1djJIN3Y1SDVWN0gwVjVoNVYwaDJ6bTE2IDB2NWg1djJoLTV2Mi4wMzhhMTMuMTc5IDEzLjE3OSAwIDAwLTIgMFY3aC01VjVoNVYwaDJ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTIyIDEwYzMuMDczIDAgNS44NzcgMS4xNTUgOCAzLjA1NnYzLjI1MkE5LjgyIDkuODIgMCAxMDE2LjMwNyAzMGgtMy4yNTFBMTEuOTU1IDExLjk1NSAwIDAxMTAgMjJjMC02LjYyNyA1LjM3My0xMiAxMi0xMnptMSA4djNoM3YyaC0zdjNoLTJ2LTNoLTN2LTJoM3YtM2gyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25NbENsYXNzaWZpY2F0aW9uSm9iOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25NbENyZWF0ZUFkdmFuY2VkSm9iID0gZnVuY3Rpb24gRXVpSWNvbk1sQ3JlYXRlQWR2YW5jZWRKb2IoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNiAzMkM3LjE2MyAzMiAwIDI0LjgzNyAwIDE2UzcuMTYzIDAgMTYgMHMxNiA3LjE2MyAxNiAxNmgtMmMwLTcuNzMyLTYuMjY4LTE0LTE0LTE0UzIgOC4yNjggMiAxNnM2LjI2OCAxNCAxNCAxNHYyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0yNyAyMHYxMmgtMlYyMGgyem0tNSA0djhoLTJ2LThoMnptMTAtMnYxMGgtMlYyMmgyek0xNyA5djZoNnYyaC02djZoLTJ2LTZIOXYtMmg2VjloMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWxDcmVhdGVBZHZhbmNlZEpvYjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTWxDcmVhdGVNdWx0aU1ldHJpY0pvYiA9IGZ1bmN0aW9uIEV1aUljb25NbENyZWF0ZU11bHRpTWV0cmljSm9iKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk00IDI0YTQgNCAwIDExMCA4IDQgNCAwIDAxMC04em0yNCAwYTQgNCAwIDExMCA4IDQgNCAwIDAxMC04ek00IDI2YTIgMiAwIDEwMCA0IDIgMiAwIDAwMC00em0yNCAwYTIgMiAwIDEwMCA0IDIgMiAwIDAwMC00ek0xNyA5djZoNnYyaC02djZoLTJ2LTZIOXYtMmg2VjloMnpNNCAwYTQgNCAwIDExMCA4IDQgNCAwIDAxMC04em0yNCAwYTQgNCAwIDExMCA4IDQgNCAwIDAxMC04em0wIDJhMiAyIDAgMTAwIDQgMiAyIDAgMDAwLTR6TTQgMmEyIDIgMCAxMDAgNCAyIDIgMCAwMDAtNHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIxLjA3OCAyOS4wNWMuMTAyLjY3Ny4zIDEuMzIyLjU4MiAxLjkyQTE1Ljk2MyAxNS45NjMgMCAwMTE2IDMyYy0xLjk5MyAwLTMuOS0uMzY0LTUuNjYtMS4wMy4yODEtLjU5OC40OC0xLjI0My41ODItMS45MiAxLjU3NC42MTQgMy4yODcuOTUgNS4wNzguOTUgMS43OTEgMCAzLjUwNC0uMzM2IDUuMDc4LS45NXptOS44OTItMTguNzFBMTUuOTYzIDE1Ljk2MyAwIDAxMzIgMTZjMCAxLjk5My0uMzY0IDMuOS0xLjAzIDUuNjZhNi45NDggNi45NDggMCAwMC0xLjkyLS41ODJjLjYxNC0xLjU3NC45NS0zLjI4Ny45NS01LjA3OCAwLTEuNzkxLS4zMzYtMy41MDQtLjk1LTUuMDc4YTYuOTQ4IDYuOTQ4IDAgMDAxLjkyLS41ODJ6bS0yOS45NCAwYy41OTguMjgxIDEuMjQzLjQ4IDEuOTIuNTgyQTEzLjk2NSAxMy45NjUgMCAwMDIgMTZjMCAxLjc5MS4zMzYgMy41MDQuOTUgNS4wNzgtLjY3Ny4xMDItMS4zMjIuMy0xLjkyLjU4MkExNS45NjQgMTUuOTY0IDAgMDEwIDE2YzAtMS45OTMuMzY0LTMuOSAxLjAzLTUuNjZ6TTE2IDBjMS45OTMgMCAzLjkuMzY0IDUuNjYgMS4wM2E2Ljk0OCA2Ljk0OCAwIDAwLS41ODIgMS45MkExMy45NjUgMTMuOTY1IDAgMDAxNiAyYy0xLjc5MSAwLTMuNTA0LjMzNi01LjA3OC45NWE2Ljk0OCA2Ljk0OCAwIDAwLS41ODItMS45MkExNS45NjQgMTUuOTY0IDAgMDExNiAwelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25NbENyZWF0ZU11bHRpTWV0cmljSm9iOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25NbENyZWF0ZVBvcHVsYXRpb25Kb2IgPSBmdW5jdGlvbiBFdWlJY29uTWxDcmVhdGVQb3B1bGF0aW9uSm9iKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYgMGM1LjUyMyAwIDEwIDQuNDc3IDEwIDEwcy00LjQ3NyAxMC0xMCAxMFM2IDE1LjUyMyA2IDEwIDEwLjQ3NyAwIDE2IDB6bTAgMmE4IDggMCAxMDAgMTYgOCA4IDAgMDAwLTE2elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk04LjQgMTkuMjg4Yy40OTIuNDAyIDEuMDE1Ljc2NiAxLjU2NiAxLjA4N0w3LjI2IDIzLjY4MmE0IDQgMCAxMS0xLjQzNy0xLjI0M2wyLjU3OC0zLjE1MXptMTUuMiAwbDIuNTc3IDMuMTVhNCA0IDAgMTEtMS40MzcgMS4yNDNsLTIuNzA2LTMuMzA2YTEyLjAzMiAxMi4wMzIgMCAwMDEuNTY1LTEuMDg3ek00IDI0YTIgMiAwIDEwMCA0IDIgMiAwIDAwMC00em0yNCAwYTIgMiAwIDEwMCA0IDIgMiAwIDAwMC00ek0xNyA2djNoM3YyaC0zdjNoLTJ2LTNoLTNWOWgzVjZoMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWxDcmVhdGVQb3B1bGF0aW9uSm9iOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25NbENyZWF0ZVNpbmdsZU1ldHJpY0pvYiA9IGZ1bmN0aW9uIEV1aUljb25NbENyZWF0ZVNpbmdsZU1ldHJpY0pvYihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDMyQzcuMTYzIDMyIDAgMjQuODM3IDAgMTZTNy4xNjMgMCAxNiAwczE2IDcuMTYzIDE2IDE2YTE2IDE2IDAgMDEtMTYgMTZ6bTAtMzBDOC4yNjggMiAyIDguMjY4IDIgMTZzNi4yNjggMTQgMTQgMTQgMTQtNi4yNjggMTQtMTRBMTQgMTQgMCAwMDE2IDJ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTIzIDE1aC02VjloLTJ2Nkg5djJoNnY2aDJ2LTZoNnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWxDcmVhdGVTaW5nbGVNZXRyaWNKb2I7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbk1sRGF0YVZpc3VhbGl6ZXIgPSBmdW5jdGlvbiBFdWlJY29uTWxEYXRhVmlzdWFsaXplcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIgMjB2MTBoMTB2MkgwVjIwaDJ6bTMwIDB2MTJIMjB2LTJoMTBWMjBoMnpNMTIgNGE4IDggMCAxMTAgMTYgOCA4IDAgMDEwLTE2em0wIDJhNiA2IDAgMTAwIDEyIDYgNiAwIDAwMC0xMnptMC02djJIMnYxMEgwVjBoMTJ6bTIwIDB2MTJoLTJWMkgyMFYwaDEyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0yMS45OTcgMTIuMjUxYy0uMDE3LjY4OS0uMTA0IDEuMzYtLjI1MyAyLjAwNmE2IDYgMCAxMS03LjQ4NyA3LjQ4N2MtLjY0Ni4xNS0xLjMxNy4yMzYtMi4wMDYuMjUzYTggOCAwIDEwOS43NDYtOS43NDZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1sRGF0YVZpc3VhbGl6ZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbk1sT3V0bGllckRldGVjdGlvbkpvYiA9IGZ1bmN0aW9uIEV1aUljb25NbE91dGxpZXJEZXRlY3Rpb25Kb2IoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yIDEydjZoNnYySDB2LThoMnptMTggMHY4aC04di0yaDZ2LTZoMnpNOCAwdjJIMnY2SDBWMGg4em0xMiAwdjhoLTJWMmgtNlYwaDh6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTE2IDI0YTQgNCAwIDExMCA4IDQgNCAwIDAxMC04em0xMiAwYTQgNCAwIDExMCA4IDQgNCAwIDAxMC04em0tMTIgMS43NWEyLjI1IDIuMjUgMCAxMDAgNC41IDIuMjUgMi4yNSAwIDAwMC00LjV6bTEyIDBhMi4yNSAyLjI1IDAgMTAwIDQuNSAyLjI1IDIuMjUgMCAwMDAtNC41ek0yOCAxMmE0IDQgMCAxMTAgOCA0IDQgMCAwMTAtOHptMCAxLjc1YTIuMjUgMi4yNSAwIDEwMCA0LjUgMi4yNSAyLjI1IDAgMDAwLTQuNXpNMTAgNmE0IDQgMCAxMTAgOCA0IDQgMCAwMTAtOHptMCAxLjc1YTIuMjUgMi4yNSAwIDEwMCA0LjUgMi4yNSAyLjI1IDAgMDAwLTQuNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWxPdXRsaWVyRGV0ZWN0aW9uSm9iOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25NbFJlZ3Jlc3Npb25Kb2IgPSBmdW5jdGlvbiBFdWlJY29uTWxSZWdyZXNzaW9uSm9iKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjQgMGE4IDggMCAxMS00LjkwNiAxNC4zMmwtNC43NzQgNC43NzRhOCA4IDAgMTEtMS40MTQtMS40MTRsNC43NzQtNC43NzRBOCA4IDAgMDEyNCAwek04IDE4YTYgNiAwIDEwMCAxMiA2IDYgMCAwMDAtMTJ6TTI0IDJhNiA2IDAgMTAwIDEyIDYgNiAwIDAwMC0xMnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMzIgMjB2MTJIMjBWMjBoMTJ6bS0yIDJoLTh2OGg4di04ek0xMiAwdjEySDBWMGgxMnptLTIgMkgydjhoOFYyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25NbFJlZ3Jlc3Npb25Kb2I7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbk1vYmlsZSA9IGZ1bmN0aW9uIEV1aUljb25Nb2JpbGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02IDIuNWEuNS41IDAgMDEuNS0uNWgzYS41LjUgMCAwMTAgMWgtM2EuNS41IDAgMDEtLjUtLjV6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTQuNSAwQTEuNSAxLjUgMCAwMDMgMS41djEzQTEuNSAxLjUgMCAwMDQuNSAxNmg3YTEuNSAxLjUgMCAwMDEuNS0xLjV2LTEzQTEuNSAxLjUgMCAwMDExLjUgMGgtN3pNNCAxLjVhLjUuNSAwIDAxLjUtLjVoN2EuNS41IDAgMDEuNS41VjRINFYxLjV6TTQgMTN2MS41YS41LjUgMCAwMC41LjVoN2EuNS41IDAgMDAuNS0uNVYxM0g0em0wLTFoOFY1SDR2N3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTW9iaWxlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Nb29uID0gZnVuY3Rpb24gRXVpSWNvbk1vb24oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04Ljc5NiA5LjA0OGMtMS41NTItMi4yMzgtMS4xOTktNS4zMjMuNjEtOC4xLTMuNDctLjEyLTYuNiAyLjIzMi03LjI2OSA1LjY3Mi0uNzQyIDMuODIgMS44MyA3LjUzMyA1Ljc0OSA4LjI5NGE3LjIyNiA3LjIyNiAwIDAwNy41MjYtMy4yMThjLTIuNzk0LjE3Ny01LjI3LS43MTEtNi42MTYtMi42NDh6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1vb247IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbk5hbWVzcGFjZSA9IGZ1bmN0aW9uIEV1aUljb25OYW1lc3BhY2UoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEgMWgxNHYxNEgxVjF6bTEzIDEydjFIMlYyaDEydjExek02IDZoNHY0SDZWNnptLTEgNVY1aDZ2Nkg1elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25OYW1lc3BhY2U7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbk5lc3RlZCA9IGZ1bmN0aW9uIEV1aUljb25OZXN0ZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01LjUgMWEuNS41IDAgMDEwIDFIMy4wMDZDMi40NSAyIDIgMi40NSAyIDMuMDA2djkuOTg4QzIgMTMuNTUgMi40NSAxNCAzLjAwNiAxNEg1LjVhLjUuNSAwIDExMCAxSDMuMDA2QTIuMDA1IDIuMDA1IDAgMDExIDEyLjk5NFYzLjAwNkMxIDEuODk4IDEuODk3IDEgMy4wMDYgMUg1LjV6bTcuNDk0IDBjMS4wNTkgMCAxLjkyNC44MTggMiAxLjg1NmwuMDA2LjE1djkuOTg4YTIuMDA1IDIuMDA1IDAgMDEtMS44NTYgMmwtLjE1LjAwNkgxMC41YS41LjUgMCAwMS0uMDktLjk5MkwxMC41IDE0aDIuNDk0Yy41MTYgMCAuOTQxLS4zODggMS0uODg4bC4wMDYtLjExOFYzLjAwNmMwLS41MTYtLjM4OC0uOTQxLS44ODgtMUwxMi45OTQgMkgxMC41YS41LjUgMCAwMS0uMDktLjk5MkwxMC41IDFoMi40OTR6TTUgN2ExIDEgMCAxMTAgMiAxIDEgMCAwMTAtMnptMyAwYTEgMSAwIDExMCAyIDEgMSAwIDAxMC0yem0zIDBhMSAxIDAgMTEwIDIgMSAxIDAgMDEwLTJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk5lc3RlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTm9kZSA9IGZ1bmN0aW9uIEV1aUljb25Ob2RlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOC41IDEuNDQzYTEgMSAwIDAwLTEgMEwyLjU3MiA0LjI5YTEgMSAwIDAwLS41Ljg2NnY1LjY5YTEgMSAwIDAwLjUuODY2TDcuNSAxNC41NTdhMSAxIDAgMDAxIDBsNC45MjgtMi44NDZhMSAxIDAgMDAuNS0uODY2di01LjY5YTEgMSAwIDAwLS41LS44NjZMOC41IDEuNDQzek05IC41NzdsNC45MjggMi44NDZhMiAyIDAgMDExIDEuNzMydjUuNjlhMiAyIDAgMDEtMSAxLjczMkw5IDE1LjQyM2EyIDIgMCAwMS0yIDBsLTQuOTI4LTIuODQ2YTIgMiAwIDAxLTEtMS43MzJ2LTUuNjlhMiAyIDAgMDExLTEuNzMyTDcgLjU3N2EyIDIgMCAwMTIgMHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTm9kZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTnVtYmVyID0gZnVuY3Rpb24gRXVpSWNvbk51bWJlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuODA4IDEwLjE5N0g2Ljc5Nkw1Ljg1OSAxM0g0LjQ4NWwuOTM3LTIuODAzSDMuOTY2bC4yMTktMS4yNWgxLjY0N2wuNjA4LTEuODA1SDQuOTkxbC4yMjYtMS4yNTFoMS42NGwuOTUtMi44NDRoMS4zNjhsLS45NSAyLjg0NGgxLjAxOGwuOTUtMi44NDRoMS4zNzRsLS45NSAyLjg0NGgxLjUxbC0uMjE4IDEuMjVoLTEuNzAybC0uNjA4IDEuODA1aDEuNDk3bC0uMjE5IDEuMjUxSDkuMTgyTDguMjUyIDEzSDYuODc4bC45My0yLjgwM3ptLS42MDItMS4yNWgxLjAxMmwuNjE1LTEuODA1SDcuODE0bC0uNjA4IDEuODA0elwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTnVtYmVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25PZmZsaW5lID0gZnVuY3Rpb24gRXVpSWNvbk9mZmxpbmUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02LjUxNyAxMi4yNzFsMS4yNTQtMS4yNTRhMS41IDEuNSAwIDExLTEuMjU0IDEuMjU0em0yLjk0NS0yLjk0NGwuNzQtLjc0Yy4zNjEuMjA4LjY5NC40NjcuOTg3Ljc3MmEuNS41IDAgMDEtLjcyMS42OTMgMy40MjQgMy40MjQgMCAwMC0xLjAwNi0uNzI1em0yLjE2Mi0yLjE2M2wuNzE2LS43MTVjLjMwOC4yMzIuNTk5LjQ5Ljg3Ljc3MmEuNS41IDAgMTEtLjcyMi42OTIgNi4yNiA2LjI2IDAgMDAtLjg2NC0uNzQ5ek03LjA2MSA2LjA3QTYuMTk4IDYuMTk4IDAgMDAzLjU0IDcuODg1YS41LjUgMCAwMS0uNzE3LS42OTcgNy4xOTkgNy4xOTkgMCAwMTUuMzA5LTIuMTg3bC0xLjA3IDEuMDd6bTYuNjcyLTEuMDE0bC43MS0uNzFjLjI3NC4yMy41MzYuNDc2Ljc4Ni43MzZhLjUuNSAwIDAxLS43MjEuNjkyIDkuMSA5LjEgMCAwMC0uNzc1LS43MTh6bS0zLjgwNy0xLjg1QTkuMDYgOS4wNiAwIDAwOCAzYTguOTkgOC45OSAwIDAwLTYuNDY5IDIuNzM0LjUuNSAwIDExLS43MTctLjY5N0E5Ljk5IDkuOTkgMCAwMTggMmMuOTQ0IDAgMS44NjguMTMxIDIuNzUuMzgybC0uODI0LjgyNHpNOCAxM2EuNS41IDAgMTAwLTEgLjUuNSAwIDAwMCAxem0tNS40MjQgMWEuNS41IDAgMDEtLjcwNy0uNzA3TDE0LjE0NiAxLjE0NmEuNS41IDAgMDEuNzA4LjcwOEwyLjU3NiAxNHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uT2ZmbGluZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uT25saW5lID0gZnVuY3Rpb24gRXVpSWNvbk9ubGluZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggMTRhMS41IDEuNSAwIDExMC0zIDEuNSAxLjUgMCAwMTAgM3ptMC0xYS41LjUgMCAxMDAtMSAuNS41IDAgMDAwIDF6bTMuMTg5LTMuNjRhLjUuNSAwIDAxLS43MjEuNjkyQTMuNDA4IDMuNDA4IDAgMDA4IDljLS45MzcgMC0xLjgxMy4zNzgtMi40NTMgMS4wMzdhLjUuNSAwIDAxLS43MTctLjY5N0E0LjQwOCA0LjQwOCAwIDAxOCA4YzEuMjIgMCAyLjM2MS40OTcgMy4xODkgMS4zNnptMi4wMi0yLjE0YS41LjUgMCAxMS0uNzIxLjY5M0E2LjIgNi4yIDAgMDA4IDZhNi4xOTkgNi4xOTkgMCAwMC00LjQ2IDEuODg1LjUuNSAwIDAxLS43MTgtLjY5N0E3LjE5OSA3LjE5OSAwIDAxOCA1YTcuMiA3LjIgMCAwMTUuMjEgMi4yMnptMi4wMi0yLjEzOGEuNS41IDAgMDEtLjcyMS42OTJBOC45OSA4Ljk5IDAgMDA4IDNhOC45OSA4Ljk5IDAgMDAtNi40NjkgMi43MzQuNS41IDAgMTEtLjcxNy0uNjk3QTkuOTkgOS45OSAwIDAxOCAyYTkuOTkgOS45OSAwIDAxNy4yMyAzLjA4MnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uT25saW5lOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25QYWNrYWdlID0gZnVuY3Rpb24gRXVpSWNvblBhY2thZ2UoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNC40NDcgMy43MjRsLTYtM2ExIDEgMCAwMC0uODk0IDBsLTYgM0ExIDEgMCAwMDEgNC42MTh2Ni43NjRhMSAxIDAgMDAuNTUzLjg5NGw2IDNhMSAxIDAgMDAuODk0IDBsNi0zYTEgMSAwIDAwLjU1My0uODk0VjQuNjE4YTEgMSAwIDAwLS41NTMtLjg5NHpNNS44NzEgNS44OTdsNS4zNDMtMi42NzIgMi4xNTggMS4wNzlMOCA2Ljk0M3pNOCAxLjYxOGwyLjA5NiAxLjA0OC01LjM1MyAyLjY3Ny0yLjExNS0xLjAzOXpNMiA1LjExbDIuMjUgMS4xMDVWOWEuNS41IDAgMDAxIDBWNi43MDZMNy41IDcuODExdjYuMzIxTDIgMTEuMzgyem02LjUgOS4wMjJ2LTYuMzJMMTQgNS4xMXY2LjI3MnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUGFja2FnZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uUGFnZVNlbGVjdCA9IGZ1bmN0aW9uIEV1aUljb25QYWdlU2VsZWN0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTMgMWExIDEgMCAwMC0xIDF2MTJhMSAxIDAgMDAxIDFoNWE0Ljk5NSA0Ljk5NSAwIDAxLS41ODQtMUgzVjJoN3YyYTEgMSAwIDAwMSAxaDJ2Mi4xYy4zNDguMDcuNjgyLjE3NyAxIC4zMTZWNGExIDEgMCAwMC0uMjkzLS43MDdsLTItMkExIDEgMCAwMDExIDFIM3ptMTMgMTFhNCA0IDAgMTEtOCAwIDQgNCAwIDAxOCAwem0tMS42NDYtMS4zNTRhLjUuNSAwIDAxMCAuNzA4bC0yLjUgMi41YS41LjUgMCAwMS0uNzA4IDBsLTEtMWEuNS41IDAgMDEuNzA4LS43MDhsLjY0Ni42NDcgMi4xNDYtMi4xNDdhLjUuNSAwIDAxLjcwOCAwelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QYWdlU2VsZWN0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25QYWdlc1NlbGVjdCA9IGZ1bmN0aW9uIEV1aUljb25QYWdlc1NlbGVjdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0zIDFhMSAxIDAgMDExLTFoOGExIDEgMCAwMS43MDcuMjkzbDIgMkExIDEgMCAwMTE1IDN2NWE0Ljk5NSA0Ljk5NSAwIDAwLTEtLjU4NFY0aC0yYTEgMSAwIDAxLTEtMVYxSDR2MTJoMy4xYy4wNy4zNDguMTc3LjY4Mi4zMTYgMUg0YTEgMSAwIDAxLTEtMVYxem01IDE0SDJWMmExIDEgMCAwMC0xIDF2MTJhMSAxIDAgMDAxIDFoN2E1LjAyOSA1LjAyOSAwIDAxLTEtMXptOC0zYTQgNCAwIDExLTggMCA0IDQgMCAwMTggMHptLTEuNjQ2LTEuMzU0YS41LjUgMCAwMTAgLjcwOGwtMi41IDIuNWEuNS41IDAgMDEtLjcwOCAwbC0xLTFhLjUuNSAwIDAxLjcwOC0uNzA4bC42NDYuNjQ3IDIuMTQ2LTIuMTQ3YS41LjUgMCAwMS43MDggMHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUGFnZXNTZWxlY3Q7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblBhaW50ID0gZnVuY3Rpb24gRXVpSWNvblBhaW50KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTEuOTkzIDguMTdjMCAuODMtLjY3MyAxLjUwNy0xLjQ5OSAxLjUwN0g1LjQ5OEExLjUwNSAxLjUwNSAwIDAxMy45OTkgOC4xN1Y2LjY2Mmg3Ljk5NFY4LjE3em0tMi45OTggNS45OThjMCAuNDU1LS40NDguODI3LS45OTkuODI3LS41NSAwLTEtLjM3Mi0xLS44Mjd2LTMuNDg2aDJ2My40ODZ6TTQgNS42NThoMS4yNjJWMS4wMDVINHY0LjY1M3ptMi4yNjEgMGgxLjI0NFYxLjAwNUg2LjI2djQuNjUzem0yLjI0NCAwaDEuMjM1VjEuMDA1SDguNTA0djQuNjUzem0yLjIzNCAwaDEuMjU0VjEuMDA1aC0xLjI1NHY0LjY1M3pNMy4wMDggMEwzIDguMTdhMi41MDkgMi41MDkgMCAwMDIuNDk4IDIuNTEyaC41djMuNDg2YzAgMS4wMS44OTYgMS44MzIgMS45OTggMS44MzIgMS4xMDIgMCAxLjk5OC0uODIyIDEuOTk4LTEuODMydi0zLjQ4NmguNWEyLjUwOSAyLjUwOSAwIDAwMi40OTgtMi41MTJMMTMgMEgzLjAwOHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUGFpbnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblBhcGVyQ2xpcCA9IGZ1bmN0aW9uIEV1aUljb25QYXBlckNsaXAoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05Ljg0IDIuMDE5TDMuMDQ2IDguNTdjLS45ODcuOTUyLTEuMTMzIDIuNTE3LS4xOTkgMy41MTYuOTUxIDEuMDIxIDIuNTggMS4xMDYgMy42NC4xOS4wMzQtLjAzLjA2OC0uMDYxLjEtLjA5Mmw1LjY1NS01LjQ1MmEuNDg0LjQ4NCAwIDAwMC0uNzAzLjUzLjUzIDAgMDAtLjcyOSAwTDUuOTIgMTEuNDIxYy0uNTcyLjU1MS0xLjUwNS42NTctMi4xMzEuMTYzYTEuNDU1IDEuNDU1IDAgMDEtLjExOC0yLjIxMWw2Ljg5OS02LjY1MWEyLjY0NiAyLjY0NiAwIDAxMy42NDQgMCAyLjQyMiAyLjQyMiAwIDAxMCAzLjUxM0w3LjMgMTIuOTAxYy0xLjMzMyAxLjI4NS0zLjQ5NyAxLjQ5My00Ljk1LjMzNi0xLjU0LTEuMjItMS43NjQtMy40MTEtLjUtNC44OTdhMy4zMyAzLjMzIDAgMDEuMjM4LS4yNTJsNS43OC01LjU3MmEuNDg0LjQ4NCAwIDAwMC0uNzAzLjUzLjUzIDAgMDAtLjczIDBsLTUuNzggNS41NzJhNC4zNiA0LjM2IDAgMDAwIDYuMzI0YzIuMTg4IDIuMTA5IDUuMjAyIDEuMzEgNi42Ni0uMDk1bDYuOTI1LTYuNjc2YTMuMzkgMy4zOSAwIDAwMC00LjkyQzEzLjUzNC42NiAxMS4yNS42NiA5Ljg0MSAyLjAxOXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUGFwZXJDbGlwOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25QYXJ0aWFsID0gZnVuY3Rpb24gRXVpSWNvblBhcnRpYWwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02LjY2NCAxNC44NzFhNyA3IDAgMDEtMi40Mi0xMi43NzguNS41IDAgMDEuNjEyLjA2Yy40NTYuNDMxIDguMjE2IDguMjEyIDguOTggOS4wMDJhLjUuNSAwIDAxLjA2My42MTggNy4wMDIgNy4wMDIgMCAwMS03LjIzNSAzLjA5OHptNi4xNjgtMy4zMTJhMTk2MS43MzMgMTk2MS43MzMgMCAwMC04LjM3Ny04LjQgNiA2IDAgMTA4LjM3OCA4LjR6bTIuMDk1LTIuNTQ4YS41LjUgMCAxMS0uOTktLjE0NGMuMDEtLjA2Ni4wMS0uMDY2LjAxOC0uMTMzYTYuMDA3IDYuMDA3IDAgMDAtLjAzNC0xLjcxNC41LjUgMCAxMS45ODctLjE2M2MuMTA4LjY1NS4xMjIgMS4zMjYuMDQgMS45OTlsLS4wMjEuMTU1em0tMS4yNzMtNS4xMzhhLjUuNSAwIDExLS44MDguNTkgNi4wMjYgNi4wMjYgMCAwMC0xLjMwNC0xLjMwOC41LjUgMCAwMS41OS0uODA2IDcuMDI2IDcuMDI2IDAgMDExLjUyMiAxLjUyNHpNOS4xNjkgMS4wOThhLjUuNSAwIDExLS4xNjYuOTg2IDYuMTA1IDYuMTA1IDAgMDAtMS44NDktLjAyNi41LjUgMCAwMS0uMTQtLjk5IDcuMDIgNy4wMiAwIDAxMi4xNTUuMDN6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBhcnRpYWw7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblBhdXNlID0gZnVuY3Rpb24gRXVpSWNvblBhdXNlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNSAyYTEgMSAwIDAwLTEgMXYxMGExIDEgMCAxMDIgMFYzYTEgMSAwIDAwLTEtMXptNiAwYTEgMSAwIDAwLTEgMXYxMGExIDEgMCAxMDIgMFYzYTEgMSAwIDAwLTEtMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUGF1c2U7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblBheW1lbnQgPSBmdW5jdGlvbiBFdWlJY29uUGF5bWVudChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTS41ODYgMi41ODZBMiAyIDAgMDAwIDRoMWExIDEgMCAwMTEtMVYyYTIgMiAwIDAwLTEuNDE0LjU4NnpNMiAyaDEwLjVhLjUuNSAwIDAxMCAxSDJWMnpNMCA0aDF2Ni41YS41LjUgMCAwMS0xIDBWNHptMi41ODYuNTg2QTIgMiAwIDAwMiA2aDFhMSAxIDAgMDExLTFWNGEyIDIgMCAwMC0xLjQxNC41ODZ6bTAgOC44MjhBMiAyIDAgMDEyIDEyaDFhMSAxIDAgMDAxIDF2MWEyIDIgMCAwMS0xLjQxNC0uNTg2em0xMi44MjgtOC44MjhBMiAyIDAgMDExNiA2aC0xYTEgMSAwIDAwLTEtMVY0YTIgMiAwIDAxMS40MTQuNTg2em0wIDguODI4QTIgMiAwIDAwMTYgMTJoLTFhMSAxIDAgMDEtMSAxdjFhMiAyIDAgMDAxLjQxNC0uNTg2ek00IDRoMTB2MUg0ek0zIDdoMTJ2MUgzem0xIDZoMTB2MUg0ek0yIDZoMXY2SDJ6bTEzIDBoMXY2aC0xem0tNS41IDRhLjUuNSAwIDAxMCAxSDcuNDk2YS41LjUgMCAwMTAtMUg5LjV6bTQgMGEuNS41IDAgMDEwIDFoLTIuMDA0YS41LjUgMCAwMTAtMUgxMy41elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QYXltZW50OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25QZW5jaWwgPSBmdW5jdGlvbiBFdWlJY29uUGVuY2lsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIuMTQ4IDMuMTQ4TDExIDJsLTkgOXYzaDNsOS05LTEuMTQ0LTEuMTQ0LTguMDAyIDcuOTk4YS41MDIuNTAyIDAgMDEtLjcwOCAwIC41MDIuNTAyIDAgMDEwLS43MDhsOC4wMDItNy45OTh6TTExIDFjLjI1NiAwIC41MTIuMDk4LjcwNy4yOTNsMyAzYS45OTkuOTk5IDAgMDEwIDEuNDE0bC05IDlBLjk5Ny45OTcgMCAwMTUgMTVIMmExIDEgMCAwMS0xLTF2LTNjMC0uMjY1LjEwNS0uNTIuMjkzLS43MDdsOS05QS45OTcuOTk3IDAgMDExMSAxek01IDE0SDJ2LTNsMyAzelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QZW5jaWw7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblBlcmNlbnQgPSBmdW5jdGlvbiBFdWlJY29uUGVyY2VudChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk01IDhjMS4xMDUgMCAyLTEuMTIgMi0yLjVTNi4xMDUgMyA1IDMgMyA0LjEyIDMgNS41IDMuODk1IDggNSA4em0wLTFjLjM1NiAwIDEtLjQ1MiAxLTEuNVM1LjM1NiA0IDUgNHMtMSAuNDUyLTEgMS41UzQuNjQ0IDcgNSA3elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAuNSAzSDEyTDUuNSAxM0g0bDYuNS0xMHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMyAxMC41YzAgMS4zOC0uODk1IDIuNS0yIDIuNXMtMi0xLjEyLTItMi41UzkuODk1IDggMTEgOHMyIDEuMTIgMiAyLjV6bS0xIDBjMCAxLjA0OC0uNjQ0IDEuNS0xIDEuNXMtMS0uNDUyLTEtMS41LjY0NC0xLjUgMS0xLjUgMSAuNDUyIDEgMS41elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QZXJjZW50OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25QaW4gPSBmdW5jdGlvbiBFdWlJY29uUGluKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTggMTFoNC41YS41LjUgMCAxMDAtMWgtMTBhLjUuNSAwIDAwMCAxSDd2NC4yNWMwIC40MTQuMjI0Ljc1LjUuNzVzLjUtLjMzNi41LS43NVYxMXpNNCA0aDF2Nkg0VjR6bTYgMGgxdjZoLTFWNHpNNC4yODYgMkM0LjA4IDIgNCAyLjA2MyA0IDJ2MWMwLS4wNjMuMDggMCAuMjg2IDBoNi40MjhDMTAuOTIgMyAxMSAyLjkzNyAxMSAzVjJjMCAuMDYzLS4wOCAwLS4yODYgMEg0LjI4NnptMC0xaDYuNDI4QzExLjQyNCAxIDEyIDEuNDQ4IDEyIDJ2MWMwIC41NTItLjU3NiAxLTEuMjg2IDFINC4yODZDMy41NzYgNCAzIDMuNTUyIDMgM1YyYzAtLjU1Mi41NzYtMSAxLjI4Ni0xelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QaW47IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblBpbkZpbGxlZCA9IGZ1bmN0aW9uIEV1aUljb25QaW5GaWxsZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05IDExaDQuNWEuNS41IDAgMTAwLTFoLTEwYS41LjUgMCAxMDAgMUg4djQuMjVjMCAuNDE0LjIyNC43NS41Ljc1cy41LS4zMzYuNS0uNzVWMTF6TTUgNGg3djZINVY0em0uMjg2LTNoNi40MjhDMTIuNDI0IDEgMTMgMS40NDggMTMgMnYxYzAgLjU1Mi0uNTc2IDEtMS4yODYgMUg1LjI4NkM0LjU3NiA0IDQgMy41NTIgNCAzVjJjMC0uNTUyLjU3Ni0xIDEuMjg2LTF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBpbkZpbGxlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uUGxheSA9IGZ1bmN0aW9uIEV1aUljb25QbGF5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNC42MDggMy4wNjNDNC4zNDUgMi44OTUgNCAzLjA4OSA0IDMuNDE4djkuMTY3YzAgLjMyOS4zNDUuNTIzLjYwOC4zNTZsNy4yLTQuNTg0YS40MjYuNDI2IDAgMDAwLS43MTFsLTcuMi00LjU4M3ptLjUzOC0uODQ0bDcuMiA0LjU4M2ExLjQyNiAxLjQyNiAwIDAxMCAyLjM5OWwtNy4yIDQuNTgzQzQuMjEgMTQuMzggMyAxMy42OTYgMyAxMi41ODVWMy40MThDMyAyLjMwNyA0LjIxIDEuNjI0IDUuMTQ2IDIuMjJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBsYXk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblBsYXlGaWxsZWQgPSBmdW5jdGlvbiBFdWlJY29uUGxheUZpbGxlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyLjM0NSA2LjgwMWwtNy4yLTQuNTgxQzQuMjEgMS42MjUgMyAyLjMwOCAzIDMuNDE5djkuMTYyYzAgMS4xMTEgMS4yMSAxLjc5NCAyLjE0NiAxLjE5OWw3LjItNC41ODFhMS40MjUgMS40MjUgMCAwMDAtMi4zOTh6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBsYXlGaWxsZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblBsdXMgPSBmdW5jdGlvbiBFdWlJY29uUGx1cyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguMjUgM2EuNS41IDAgMDEuNS41djMuNzVoMy43NWEuNS41IDAgMDEuNS41di41YS41LjUgMCAwMS0uNS41SDguNzV2My43NWEuNS41IDAgMDEtLjUuNWgtLjVhLjUuNSAwIDAxLS41LS41VjguNzVIMy41YS41LjUgMCAwMS0uNS0uNXYtLjVhLjUuNSAwIDAxLjUtLjVoMy43NVYzLjVhLjUuNSAwIDAxLjUtLjVoLjV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBsdXM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblBsdXNJbkNpcmNsZSA9IGZ1bmN0aW9uIEV1aUljb25QbHVzSW5DaXJjbGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOCA3aDMuNWEuNS41IDAgMTEwIDFIOHYzLjVhLjUuNSAwIDExLTEgMFY4SDMuNWEuNS41IDAgMDEwLTFIN1YzLjVhLjUuNSAwIDAxMSAwVjd6bS0uNS03QzExLjYzNiAwIDE1IDMuMzY0IDE1IDcuNVMxMS42MzYgMTUgNy41IDE1IDAgMTEuNjM2IDAgNy41IDMuMzY0IDAgNy41IDB6bTAgLjg4MmE2LjYxOCA2LjYxOCAwIDEwMCAxMy4yMzZBNi42MTggNi42MTggMCAwMDcuNS44ODJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBsdXNJbkNpcmNsZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uUGx1c0luQ2lyY2xlRmlsbGVkID0gZnVuY3Rpb24gRXVpSWNvblBsdXNJbkNpcmNsZUZpbGxlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggN1YzLjVhLjUuNSAwIDAwLTEgMFY3SDMuNWEuNS41IDAgMDAwIDFIN3YzLjVhLjUuNSAwIDEwMSAwVjhoMy41YS41LjUgMCAxMDAtMUg4em0tLjUgOGE3LjUgNy41IDAgMTEwLTE1IDcuNSA3LjUgMCAwMTAgMTV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBsdXNJbkNpcmNsZUZpbGxlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uUG9wb3V0ID0gZnVuY3Rpb24gRXVpSWNvblBvcG91dChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEzIDguNWEuNS41IDAgMTExIDBWMTJhMiAyIDAgMDEtMiAySDRhMiAyIDAgMDEtMi0yVjRhMiAyIDAgMDEyLTJoMy41YS41LjUgMCAwMTAgMUg0YTEgMSAwIDAwLTEgMXY4YTEgMSAwIDAwMSAxaDhhMSAxIDAgMDAxLTFWOC41em0tNS4xMi4zMzlhLjUuNSAwIDExLS43MDYtLjcwN0wxMy4zMDUgMkgxMC41YS41LjUgMCAxMTAtMUgxNGExIDEgMCAwMTEgMXYzLjVhLjUuNSAwIDExLTEgMFYyLjcyTDcuODggOC44Mzh6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBvcG91dDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uUHVzaCA9IGZ1bmN0aW9uIEV1aUljb25QdXNoKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOC4xNzEgNS4xNUwxMC4xMTQgN0gxLjU1NkMxLjI0OSA3IDEgNy4yMjQgMSA3LjVzLjI0OS41LjU1Ni41aDguNTI2bC0xLjkxIDEuODJhLjUyLjUyIDAgMDAwIC43N2MuMjI3LjIxMy42LjIxMy44MjggMGwyLjA1LTEuOTVhMS41NTIgMS41NTIgMCAwMDAtMi4zMUw5IDQuMzhhLjYxNy42MTcgMCAwMC0uODI5IDAgLjUyLjUyIDAgMDAwIC43N3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuODA0IDEyLjc5MkEuOTkzLjk5MyAwIDAxNiAxMS44MlYxMEg1djEuODI2YzAgLjk0NS42NzMgMS43NiAxLjYwOCAxLjk0NWw2IDEuMTlBMS45OTIgMS45OTIgMCAwMDE1IDEzLjAxNlYxLjk4NEEyIDIgMCAwMDEyLjYwOC4wNGwtNiAxLjE5QzUuNjczIDEuNDE1IDUgMi4yMyA1IDMuMTc1VjVoMVYzLjE4YzAtLjQ3Mi4zMzYtLjg3OS44MDQtLjk3Mmw2LTEuMTg5QTEgMSAwIDAxMTQgMS45OTF2MTEuMDE4YS45OTUuOTk1IDAgMDEtMS4xOTYuOTcybC02LTEuMTl6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblB1c2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblF1ZXN0aW9uSW5DaXJjbGUgPSBmdW5jdGlvbiBFdWlJY29uUXVlc3Rpb25JbkNpcmNsZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggMTRBNiA2IDAgMTE4IDJhNiA2IDAgMDEwIDEyem0wLTFBNSA1IDAgMTA4IDNhNSA1IDAgMDAwIDEwem0tLjE4Ni0xLjA2NUEuNzg1Ljc4NSAwIDAxNyAxMS4xMmMwLS40OC4zNC0uODIuODE0LS44Mi40NzUgMCAuODA5LjM0LjgwOS44MiAwIC40NzUtLjMzNC44MTUtLjgwOS44MTV6TTUuOSA2LjMxN0M1Ljk2IDUuMTY4IDYuNzU1IDQuNCA4LjA0OCA0LjRjMS4yMTggMCAyLjA5MS43NTkgMi4wOTEgMS44IDAgLjczNi0uMzYgMS4zMDQtMS4wMyAxLjcwNy0uNTYuMzMtLjcxNy41Ni0uNzE3IDEuMDIydi4zMDVsLS4xLjFINy40N2wtLjEtLjF2LS40MzFjLS4wMDUtLjY0Ni4zMDItMS4xMDQuOTg3LTEuNTE0LjUyNy0uMzIyLjcwOC0uNTkuNzA4LTEuMDQ3IDAtLjUzNi0uNDE2LS45MS0xLjA1LS45MS0uNjUyIDAtMS4wNjQuMzc0LTEuMTEyLjk5OGwtLjEuMDkySDZsLS4xLS4xMDV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblF1ZXN0aW9uSW5DaXJjbGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblF1b3RlID0gZnVuY3Rpb24gRXVpSWNvblF1b3RlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNi44NDggMi40N2ExIDEgMCAwMS0uMzE4IDEuMzc4QTcuMjg0IDcuMjg0IDAgMDAzLjc1IDcuMDEgMyAzIDAgMTExIDEwdi0uMDI3YTMuNTIxIDMuNTIxIDAgMDEuMDEtLjIzMmMuMDA5LS4xNS4wMjctLjM2LjA2Mi0uNjE4LjA3LS41MTMuMjA3LTEuMjIuNDg0LTIuMDE0LjU1Mi0xLjU5IDEuNjctMy41NTUgMy45MTQtNC45NTdhMSAxIDAgMDExLjM3OC4zMTh6bTcgMGExIDEgMCAwMS0uMzE4IDEuMzc4IDcuMjgzIDcuMjgzIDAgMDAtMi43OCAzLjE2MkEzIDMgMCAxMTggMTB2LS4wMjdhMy41MjEgMy41MjEgMCAwMS4wMS0uMjMyYy4wMDktLjE1LjAyNy0uMzYuMDYyLS42MTguMDctLjUxMy4yMDctMS4yMi40ODQtMi4wMTQuNTUyLTEuNTkgMS42Ny0zLjU1NSAzLjkxNC00Ljk1N2ExIDEgMCAwMTEuMzc4LjMxOHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUXVvdGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblJlZnJlc2ggPSBmdW5jdGlvbiBFdWlJY29uUmVmcmVzaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTExLjIyOCAyLjk0MmEuNS41IDAgMTEtLjUzOC44NDJBNSA1IDAgMTAxMyA4YS41LjUgMCAxMTEgMCA2IDYgMCAxMS0yLjc3Mi01LjA1OHpNMTQgMS41djNBMS41IDEuNSAwIDAxMTIuNSA2aC0zYS41LjUgMCAwMTAtMWgzYS41LjUgMCAwMC41LS41di0zYS41LjUgMCAxMTEgMHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUmVmcmVzaDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uUmVwb3J0ZXIgPSBmdW5jdGlvbiBFdWlJY29uUmVwb3J0ZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNy42ODQuODk1TDYuMDc0LjM1OGExIDEgMCAwMC0xLjI5Ni43NTNMNC4yIDRIMi41YS41LjUgMCAwMDAgMWgxLjYyNmE0LjAwNyA0LjAwNyAwIDAwLjExIDIuMzU5bC0yLjA3Mi0uMzQ1QTEgMSAwIDAwMSA4djFjLjM2NCAwIC43MDYuMDk3IDEgLjI2OFY4bDEgLjE2NyAxLjg1OS4zMSAyLjE2My4zNi40NzguMDh2NkwyIDE0di0xLjI2OEExLjk5IDEuOTkgMCAwMTEgMTN2MWExIDEgMCAwMC44MzYuOTg2bDYgMWMuMTA4LjAxOC4yMi4wMTguMzI4IDBsNi0xQTEgMSAwIDAwMTUgMTR2LTFhMS45OSAxLjk5IDAgMDEtMS0uMjY4VjE0bC01LjUuOTE3di02bC40NzgtLjA4IDIuMTYzLS4zNkwxMyA4LjE2NiAxNCA4djEuMjY4QTEuOTkgMS45OSAwIDAxMTUgOVY4YTEgMSAwIDAwLTEuMTY0LS45ODZsLTIuMDczLjM0NUEzLjk5MSAzLjk5MSAwIDAwMTEuODc0IDVIMTMuNWEuNS41IDAgMDAwLTFoLTEuN2wtLjU3OC0yLjg5QTEgMSAwIDAwOS45MjUuMzU5TDguMzE2Ljg5NWExIDEgMCAwMS0uNjMyIDB6bTIuODggNi42NjRBMy4wMTMgMy4wMTMgMCAwMDEwLjgzIDVINS4xN2EzLjAxMyAzLjAxMyAwIDAwLjI2NiAyLjU1OUw4IDcuOTg2bDIuNTY0LS40Mjd6TTEwLjggNEg5LjJMOSAzbDEuNS0uNS4zIDEuNXpNMSAxMmExIDEgMCAxMDAtMiAxIDEgMCAwMDAgMnptMTQgMGExIDEgMCAxMDAtMiAxIDEgMCAwMDAgMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUmVwb3J0ZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblJldHVybktleSA9IGZ1bmN0aW9uIEV1aUljb25SZXR1cm5LZXkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMS45OTQgNGMxLjA1OSAwIDEuOTI0LjgxOCAyIDEuODU2bC4wMDYuMTV2MS45ODhhMi4wMDUgMi4wMDUgMCAwMS0xLjg1NiAyTDEyIDEwSDMuNDg0bDEuOTEgMS44MmEuNTIuNTIgMCAwMTAgLjc3LjYxNi42MTYgMCAwMS0uODI5IDBsLTIuMDUtMS45NWExLjU1MSAxLjU1MSAwIDAxMC0yLjMxbDIuMDUtMS45NWEuNjE3LjYxNyAwIDAxLjgzIDAgLjUyLjUyIDAgMDEwIC43N0wzLjQ1IDlIMTJjLjUxNC0uMDAzLjkzNS0uMzkuOTkzLS44ODhMMTMgNy45OTRWNi4wMDZjMC0uNTE2LS4zODgtLjk0MS0uODg4LTFMMTEuOTk0IDVIOS41YS41LjUgMCAwMS0uMDktLjk5Mkw5LjUgNGgyLjQ5NHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUmV0dXJuS2V5OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25TYXZlID0gZnVuY3Rpb24gRXVpSWNvblNhdmUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01LjAwOCAySDIuMjgyYy0uMTgxIDAtLjI0NS4wMDItLjI3NS4wMDctLjAwNS4wMy0uMDA3LjA5NC0uMDA3LjI3NXYxMS40MzZjMCAuMTgxLjAwMi4yNDUuMDA3LjI3NS4wMy4wMDUuMDk0LjAwNy4yNzUuMDA3aDExLjQzNmMuMTgxIDAgLjI0NS0uMDAyLjI3NS0uMDA3LjAwNS0uMDMuMDA3LS4wOTQuMDA3LS4yNzVWNC42MmMwLS4xMy0uMDAxLS4xOC0uMDA0LS4yMDRhMi42NTQgMi42NTQgMCAwMC0uMTQxLS4xNDdMMTEuNzMgMi4xNDVhMi42NTQgMi42NTQgMCAwMC0uMTQ3LS4xNDFBMi42NTQgMi42NTQgMCAwMDExLjM4IDJoLS4zODhjLjAwNS4wOC4wMDguMTcyLjAwOC4yODJ2Mi40MzZjMCAuNDQ2LS4wNDYuNjA3LS4xMzQuNzdhLjkwOS45MDkgMCAwMS0uMzc4LjM3OGMtLjE2My4wODgtLjMyNC4xMzQtLjc3LjEzNEg2LjI4MmMtLjQ0NiAwLS42MDctLjA0Ni0uNzctLjEzNGEuOTA5LjkwOSAwIDAxLS4zNzgtLjM3OEM1LjA0NiA1LjMyNSA1IDUuMTY0IDUgNC43MThWMi4yODJjMC0uMTEuMDAzLS4yMDIuMDA4LS4yODJ6TTIuMjgyIDFoOS4wOThjLjI1OSAwIC4zNDguMDEuNDQ3LjAzMmEuODcuODcgMCAwMS4yNzMuMTEzYy4wODYuMDU0LjE1Ni4xMS4zMzguMjkzbDIuMTI0IDIuMTI0Yy4xODIuMTgyLjIzOS4yNTIuMjkzLjMzOGEuODcuODcgMCAwMS4xMTMuMjczYy4wMjMuMS4wMzIuMTg4LjAzMi40NDd2OS4wOThjMCAuNDQ2LS4wNDYuNjA3LS4xMzQuNzdhLjkwOS45MDkgMCAwMS0uMzc4LjM3OGMtLjE2My4wODgtLjMyNC4xMzQtLjc3LjEzNEgyLjI4MmMtLjQ0NiAwLS42MDctLjA0Ni0uNzctLjEzNGEuOTA5LjkwOSAwIDAxLS4zNzgtLjM3OGMtLjA4OC0uMTYzLS4xMzQtLjMyNC0uMTM0LS43N1YyLjI4MmMwLS40NDYuMDQ2LS42MDcuMTM0LS43N2EuOTA5LjkwOSAwIDAxLjM3OC0uMzc4Yy4xNjMtLjA4OC4zMjQtLjEzNC43Ny0uMTM0ek02IDIuMjgydjIuNDM2YzAgLjE4MS4wMDIuMjQ1LjAwNy4yNzUuMDMuMDA1LjA5NC4wMDcuMjc1LjAwN2gzLjQzNmMuMTgxIDAgLjI0NS0uMDAyLjI3NS0uMDA3LjAwNS0uMDMuMDA3LS4wOTQuMDA3LS4yNzVWMi4yODJjMC0uMTgxLS4wMDItLjI0NS0uMDA3LS4yNzVBMi4yNDggMi4yNDggMCAwMDkuNzE4IDJINi4yODJjLS4xODEgMC0uMjQ1LjAwMi0uMjc1LjAwNy0uMDA1LjAzLS4wMDcuMDk0LS4wMDcuMjc1ek04IDEyYTIgMiAwIDExMC00IDIgMiAwIDAxMCA0em0wLTFhMSAxIDAgMTAwLTIgMSAxIDAgMDAwIDJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblNhdmU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblNjYWxlID0gZnVuY3Rpb24gRXVpSWNvblNjYWxlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEyLjUgMTJhLjUuNSAwIDExMCAxIC41LjUgMCAwMTAtMXptLTIgMGEuNS41IDAgMTEwIDEgLjUuNSAwIDAxMC0xem0tMiAwYS41LjUgMCAxMTAgMSAuNS41IDAgMDEwLTF6bTQtMmEuNS41IDAgMTEwIDEgLjUuNSAwIDAxMC0xem0tMiAwYS41LjUgMCAxMTAgMSAuNS41IDAgMDEwLTF6bTItMWEuNS41IDAgMTEwLTEgLjUuNSAwIDAxMCAxem0wLTNhLjUuNSAwIDExMCAxIC41LjUgMCAwMTAtMXptLTIgMmEuNS41IDAgMTEwIDEgLjUuNSAwIDAxMC0xem0tMiAwYS41LjUgMCAxMTAgMSAuNS41IDAgMDEwLTF6bTAgMmEuNS41IDAgMTEwIDEgLjUuNSAwIDAxMC0xem0tMiAyYS41LjUgMCAxMTAgMSAuNS41IDAgMDEwLTF6bS0yIDBhLjUuNSAwIDExMCAxIC41LjUgMCAwMTAtMXptMi0yYS41LjUgMCAxMTAgMSAuNS41IDAgMDEwLTF6bTYtNmEuNS41IDAgMTEwIDEgLjUuNSAwIDAxMC0xem0tMiAyYS41LjUgMCAxMTAgMSAuNS41IDAgMDEwLTF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblNjYWxlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25TZWFyY2ggPSBmdW5jdGlvbiBFdWlJY29uU2VhcmNoKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTEuMjcxIDExLjk3OGwzLjg3MiAzLjg3M2EuNTAyLjUwMiAwIDAwLjcwOCAwIC41MDIuNTAyIDAgMDAwLS43MDhsLTMuNTY1LTMuNTY0YzIuMzgtMi43NDcgMi4yNjctNi45MjMtLjM0Mi05LjUzMi0yLjczLTIuNzMtNy4xNy0yLjczLTkuODk4IDAtMi43MjggMi43MjktMi43MjggNy4xNyAwIDkuOWE2Ljk1NSA2Ljk1NSAwIDAwNC45NDkgMi4wNS41LjUgMCAwMDAtMSA1Ljk2IDUuOTYgMCAwMS00LjI0Mi0xLjc1NyA2LjAxIDYuMDEgMCAwMTAtOC40ODZjMi4zMzctMi4zNCA2LjE0My0yLjM0IDguNDg0IDBhNi4wMSA2LjAxIDAgMDEwIDguNDg2LjUuNSAwIDAwLjAzNC43Mzh6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblNlYXJjaDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uU2VjdXJpdHlTaWduYWwgPSBmdW5jdGlvbiBFdWlJY29uU2VjdXJpdHlTaWduYWwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTEuODc1IDMuNDE4YTYgNiAwIDEwLjcwNy43MDdsLTIuNDYgMi40Ni0xLjE1NiAxLjE1NmExIDEgMCAxMS0uNzA3LS43MDdsLjc1Ny0uNzU3YTIgMiAwIDAwLTIuNDMgMy4xMzcuNS41IDAgMTEtLjcwNy43MDcgMyAzIDAgMDEzLjg2LTQuNTY3bC43MTQtLjcxNEE0IDQgMCAxMDggMTJhLjUuNSAwIDExMCAxIDUgNSAwIDExMy4xNjQtOC44NzFsLjcxLS43MXptLjcwOS0uNzA5YTcgNyAwIDEwLjcwNy43MDdsLjM2Ni0uMzY2YS41LjUgMCAxMC0uNzA3LS43MDdsLS4zNjYuMzY2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TZWN1cml0eVNpZ25hbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uU2VjdXJpdHlTaWduYWxEZXRlY3RlZCA9IGZ1bmN0aW9uIEV1aUljb25TZWN1cml0eVNpZ25hbERldGVjdGVkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEzLjY1NyAzLjA1YS41LjUgMCAwMC0uNzA3LS43MDdsLS4zNjYuMzY2QTcgNyAwIDEwOCAxNWE0Ljk5NCA0Ljk5NCAwIDAxLS41OTctMS4wMyA2IDYgMCAxMTQuNDcxLTEwLjU1MmwtLjcxLjcxYTUgNSAwIDEwLTQuMDggOC43ODggNS4wMjcgNS4wMjcgMCAwMS0uMDgyLTEuMDQyQTQuMDAyIDQuMDAyIDAgMDE4IDRhMy45OCAzLjk4IDAgMDEyLjQ1My44NGwtLjcxNS43MTRhMyAzIDAgMDAtMy44NiA0LjU2Ny41LjUgMCAxMC43MDgtLjcwNyAyIDIgMCAwMTIuNDMtMy4xMzdsLS43NTcuNzU3YTEgMSAwIDEwLjcwNy43MDdsMS4xNTUtMS4xNTUgMi40Ni0yLjQ2YTUuOTcyIDUuOTcyIDAgMDExLjM5IDMuMjc3Yy4zNjcuMTU4LjcxMy4zNiAxLjAyOS41OTcgMC0xLjYzNi0uNTctMy4yNzEtMS43MS00LjU4NGwuMzY3LS4zNjZ6TTE2IDEyYTQgNCAwIDExLTggMCA0IDQgMCAwMTggMHptLTQgLjVhLjU3Ny41NzcgMCAwMS0uNTctLjQ5NWwtLjI5LTIuMDE1YS44NjcuODY3IDAgMTExLjcxOCAwbC0uMjg4IDIuMDE1YS41NzcuNTc3IDAgMDEtLjU3LjQ5NXptMCAyLjVhMSAxIDAgMTAwLTIgMSAxIDAgMDAwIDJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblNlY3VyaXR5U2lnbmFsUmVzb2x2ZWQgPSBmdW5jdGlvbiBFdWlJY29uU2VjdXJpdHlTaWduYWxSZXNvbHZlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMy42NTcgMy4wNWEuNS41IDAgMTAtLjcwNy0uNzA3bC0uMzY2LjM2NkE3IDcgMCAxMDggMTVhNC45OTQgNC45OTQgMCAwMS0uNTk3LTEuMDMgNiA2IDAgMTE0LjQ3MS0xMC41NTJsLS43MS43MWE1IDUgMCAxMC00LjA4IDguNzg4IDUuMDI4IDUuMDI4IDAgMDEtLjA4Mi0xLjA0MkE0LjAwMiA0LjAwMiAwIDAxOCA0YTMuOTggMy45OCAwIDAxMi40NTMuODRsLS43MTUuNzE0YTMgMyAwIDAwLTMuODYgNC41NjcuNS41IDAgMTAuNzA4LS43MDcgMiAyIDAgMDEyLjQzLTMuMTM3bC0uNzU3Ljc1N2ExIDEgMCAxMC43MDcuNzA3bDEuMTU1LTEuMTU1IDIuNDYtMi40NmE1Ljk3MiA1Ljk3MiAwIDAxMS4zOSAzLjI3N2MuMzY3LjE1OC43MTMuMzYgMS4wMjkuNTk3IDAtMS42MzYtLjU3LTMuMjcxLTEuNzEtNC41ODRsLjM2Ny0uMzY2ek0xNiAxMmE0IDQgMCAxMS04IDAgNCA0IDAgMDE4IDB6bS0xLjY0Ni0xLjM1NGEuNS41IDAgMDEwIC43MDdsLTIuNSAyLjVhLjUuNSAwIDAxLS43MDggMGwtMS0xYS41LjUgMCAwMS43MDgtLjcwN2wuNjQ2LjY0NyAyLjE0Ni0yLjE0N2EuNS41IDAgMDEuNzA4IDB6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblNlY3VyaXR5U2lnbmFsUmVzb2x2ZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblNlc3Npb25WaWV3ZXIgPSBmdW5jdGlvbiBFdWlJY29uU2Vzc2lvblZpZXdlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQgNmgxdjFINFY2em0yIDJINVY3aDF2MXptMCAxVjhoMXYxSDZ6bS0xIDFWOWgxdjFINXptMCAwdjFINHYtMWgxem0yIDBoNHYxSDd2LTF6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMSAzYTEgMSAwIDAxMS0xaDEyYTEgMSAwIDAxMSAxdjEwYTEgMSAwIDAxLTEgMUgyYTEgMSAwIDAxLTEtMVYzem0xIDFoMTJ2OUgyVjR6XCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TZXNzaW9uVmlld2VyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25TaGFyZCA9IGZ1bmN0aW9uIEV1aUljb25TaGFyZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUuMTM0IDcuMDMxTDggMTIuNzY0bDIuODY2LTUuNzMzTDggMi4wMTYgNS4xMzQgNy4wM3pNOCAwbDQgNy00IDgtNC04IDQtN3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU2hhcmQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblNoYXJlID0gZnVuY3Rpb24gRXVpSWNvblNoYXJlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMyA2LjgxdjYuMzhjMCAuNDkzLjQ0OC45Ljk5Mi45aDcuMDE2Yy41NDMgMCAuOTkyLS40MDYuOTkyLS45VjYuODFjMC0uNDkzLS40NDgtLjktLjk5Mi0uOUgzLjk5MmMtLjU0MyAwLS45OTIuNDA2LS45OTIuOXpNNiA1di45MWgzVjVoMi4wMDhDMTIuMTA4IDUgMTMgNS44MTggMTMgNi44MXY2LjM4YzAgMS0uOSAxLjgxLTEuOTkyIDEuODFIMy45OTJDMi44OTIgMTUgMiAxNC4xODIgMiAxMy4xOVY2LjgxQzIgNS44MSAyLjkgNSAzLjk5MiA1SDZ6bTEuOTk3LTMuNTUyQS41MDYuNTA2IDAgMDE4IDEuNXY4YS41LjUgMCAwMS0xIDB2LThhLjUxLjUxIDAgMDEwLS4wMTdMNS4xOCAzLjM5NGEuNTIuNTIgMCAwMS0uNzcgMCAuNjE3LjYxNyAwIDAxMC0uODI5TDYuMzYuNTE1YTEuNTUyIDEuNTUyIDAgMDEyLjMxIDBsMS45NSAyLjA1Yy4yMTQuMjI5LjIxNC42MDEgMCAuODNhLjUyLjUyIDAgMDEtLjc3IDBMNy45OTcgMS40NDd6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblNoYXJlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Tbm93Zmxha2UgPSBmdW5jdGlvbiBFdWlJY29uU25vd2ZsYWtlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTcuMDA3LjVhLjUuNSAwIDAxMSAwdjIuMDI0YS45OTkuOTk5IDAgMDAuMjY4LS4yMjdsMS4wMjctMS4yMzNhLjUuNSAwIDAxLjc2OS42NEw4LjI3NSAzLjg2YS45OTkuOTk5IDAgMDEtLjI2OC4yMjd2Mi41NDhsMi4yMDctMS4yNzRjMC0uMTE0LjAyLS4yMzEuMDYyLS4zNDZsLjk2OC0yLjYzMmEuNS41IDAgMTEuOTM4LjM0NWwtLjU1NCAxLjUwNmEuOTk4Ljk5OCAwIDAwLS4wNjIuMzQ2bDEuNzUzLTEuMDEyYS41LjUgMCAxMS41Ljg2NmwtMS43NTMgMS4wMTJjLjEuMDU3LjIxLjA5OC4zMy4xMTlsMS41ODIuMjczYS41LjUgMCAxMS0uMTcuOTg2bC0yLjc2NC0uNDc4YTEgMSAwIDAxLS4zMy0uMTJMOC41MDYgNy41bDIuMjA3IDEuMjc0YTEgMSAwIDAxLjMzLS4xMTlsMi43NjQtLjQ3OGEuNS41IDAgMTEuMTcuOTg2bC0xLjU4Mi4yNzNhLjk5OS45OTkgMCAwMC0uMzMuMTJsMS43NTMgMS4wMTFhLjUuNSAwIDExLS41Ljg2NmwtMS43NTMtMS4wMTJjMCAuMTE1LjAyLjIzMS4wNjIuMzQ2bC41NTQgMS41MDZhLjUuNSAwIDAxLS45MzguMzQ1bC0uOTY4LTIuNjMyYS45OTkuOTk5IDAgMDEtLjA2Mi0uMzQ2TDguMDA3IDguMzY2djIuNTQ4Yy4wOTguMDU4LjE5LjEzMy4yNjguMjI3bDEuNzk2IDIuMTU1YS41LjUgMCAwMS0uNzY5LjY0bC0xLjAyNy0xLjIzM2EuOTk5Ljk5OSAwIDAwLS4yNjgtLjIyNlYxNC41YS41LjUgMCAwMS0xIDB2LTIuMDI0YS45OTkuOTk5IDAgMDAtLjI2OS4yMjdsLTEuMDI3IDEuMjMzYS41LjUgMCAwMS0uNzY4LS42NGwxLjc5NS0yLjE1NWEuOTk5Ljk5OSAwIDAxLjI2OS0uMjI3VjguMzY2TDQuOCA5LjY0YzAgLjExNC0uMDIuMjMxLS4wNjIuMzQ2bC0uOTY5IDIuNjMyYS41LjUgMCAxMS0uOTM4LS4zNDVsLjU1NC0xLjUwNmExIDEgMCAwMC4wNjItLjM0NmwtMS43NTMgMS4wMTJhLjUuNSAwIDAxLS41LS44NjZsMS43NTMtMS4wMTJhLjk5OS45OTkgMCAwMC0uMzMtLjExOWwtMS41ODItLjI3M2EuNS41IDAgMDEuMTctLjk4NmwyLjc2NC40NzhjLjEyLjAyLjIzMi4wNjIuMzMuMTJMNi41MDggNy41IDQuMyA2LjIyNmEuOTk5Ljk5OSAwIDAxLS4zMy4xMTlsLTIuNzY1LjQ3OGEuNS41IDAgMTEtLjE3LS45ODZsMS41ODItLjI3M2EuOTk5Ljk5OSAwIDAwLjMzLS4xMkwxLjE5NCA0LjQzNGEuNS41IDAgMTEuNS0uODY2bDEuNzUzIDEuMDEyYzAtLjExNC0uMDItLjIzMS0uMDYyLS4zNDZMMi44MyAyLjcyN2EuNS41IDAgMTEuOTM4LS4zNDVsLjk2OSAyLjYzMmEuOTk5Ljk5OSAwIDAxLjA2Mi4zNDZsMi4yMDcgMS4yNzRWNC4wODZhMSAxIDAgMDEtLjI2OS0uMjI3TDQuOTQzIDEuNzA0YS41LjUgMCAwMS43NjgtLjY0bDEuMDI3IDEuMjMzYy4wNzkuMDk0LjE3LjE3LjI2OS4yMjdWLjV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblNub3dmbGFrZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uU29ydExlZnQgPSBmdW5jdGlvbiBFdWlJY29uU29ydExlZnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00LjMwOCA3aDguMTM2Yy4zMDcgMCAuNTU2LjIyNC41NTYuNXMtLjI0OS41LS41NTYuNUg0LjMwOGw0LjA5NiA0LjA5NmEuNS41IDAgMDEtLjcwNy43MDdMMy40NTQgOC41NjFhMS40OTQgMS40OTQgMCAwMS0uNDMzLS45MjUuNDU0LjQ1NCAwIDAxMC0uMjcyYy4wMy0uMzM4LjE3NS0uNjY2LjQzMy0uOTI1bDQuMjQzLTQuMjQyYS41LjUgMCAxMS43MDcuNzA3TDQuMzA4IDd6XCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Tb3J0TGVmdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uU29ydFJpZ2h0ID0gZnVuY3Rpb24gRXVpSWNvblNvcnRSaWdodChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTExLjY5MiA3SDMuNTU2QzMuMjQ5IDcgMyA3LjIyNCAzIDcuNXMuMjQ5LjUuNTU2LjVoOC4xMzZsLTQuMDk2IDQuMDk2YS41LjUgMCAwMC43MDcuNzA3bDQuMjQzLTQuMjQyYy4yNTgtLjI1OS40MDMtLjU4Ny40MzMtLjkyNWEuNDU0LjQ1NCAwIDAwMC0uMjcyIDEuNDk0IDEuNDk0IDAgMDAtLjQzMy0uOTI1TDguMzAzIDIuMTk3YS41LjUgMCAxMC0uNzA3LjcwN0wxMS42OTIgN3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU29ydFJpZ2h0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Tb3J0RG93biA9IGZ1bmN0aW9uIEV1aUljb25Tb3J0RG93bihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcgMTEuNjkyVjMuNTU2QzcgMy4yNDkgNy4yMjQgMyA3LjUgM3MuNS4yNDkuNS41NTZ2OC4xMzZsNC4wOTYtNC4wOTZhLjUuNSAwIDAxLjcwNy43MDdsLTQuMjQyIDQuMjQzYTEuNDk0IDEuNDk0IDAgMDEtLjkyNS40MzMuNDU0LjQ1NCAwIDAxLS4yNzIgMCAxLjQ5NCAxLjQ5NCAwIDAxLS45MjUtLjQzM0wyLjE5NyA4LjMwM2EuNS41IDAgMTEuNzA3LS43MDdMNyAxMS42OTJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblNvcnREb3duOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Tb3J0VXAgPSBmdW5jdGlvbiBFdWlJY29uU29ydFVwKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCA0LjIwN3Y4LjIzN2MwIC4zMDctLjIyNC41NTYtLjUuNTU2cy0uNS0uMjQ5LS41LS41NTZWNC4yMDdMMi45MDQgOC4zMDNhLjUuNSAwIDAxLS43MDctLjcwN2w0LjI0Mi00LjI0MmExLjUgMS41IDAgMDEyLjEyMiAwbDQuMjQyIDQuMjQyYS41LjUgMCAxMS0uNzA3LjcwN0w4IDQuMjA3elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Tb3J0VXA7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblNvcnRhYmxlID0gZnVuY3Rpb24gRXVpSWNvblNvcnRhYmxlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNyAxMi43ODZWMy4yTDMuNjA0IDYuNTk2YS41LjUgMCAwMS0uNzA4LS43MDdsMy41MzYtMy41MzVhMS41IDEuNSAwIDAxMi4xMjEgMGwzLjUzNiAzLjUzNWEuNS41IDAgMDEtLjcwNy43MDdMOCAzLjIxNHY5LjU1N2wzLjM4Mi0zLjM4MmEuNS41IDAgMDEuNzA3LjcwN2wtMy41MzYgMy41MzZhMS41IDEuNSAwIDAxLTIuMTIxIDBsLTMuNTM2LTMuNTM2YS41LjUgMCAwMS43MDgtLjcwN0w3IDEyLjc4NnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU29ydGFibGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblN0YXJQbHVzRW1wdHkgPSBmdW5jdGlvbiBFdWlJY29uU3RhclBsdXNFbXB0eShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk02IDJhLjg2Ljg2IDAgMDAtLjc5Mi41MTFsLTEuMzMgMi45MjQtMy4xMjguNDQ2Yy0uNzEuMTAyLTEuMDAxLjk3Ni0uNDk2IDEuNDg3bDIuMzEzIDIuMzM2LS41NjMgMy4yNjhBLjg3Ny44NzcgMCAwMDIuODY0IDE0Yy4xNDIgMCAuMjg5LS4wMzYuNDI5LS4xMTZMNiAxMi4zNDJsMi43MDcgMS41NDJjLjE0LjA4LjI4Ny4xMTYuNDMuMTE2YS44NzcuODc3IDAgMDAuODU5LTEuMDI3bC0uNTYzLTMuMjY5IDIuMzEzLTIuMzM2Yy41MDUtLjUxMS4yMTQtMS4zODUtLjQ5Ni0xLjQ4N2wtMy4xMjgtLjQ0Ni0xLjMzLTIuOTIzQS44Ni44NiAwIDAwNiAybTggOGgydjFoLTJ2MmgtMXYtMmgtMnYtMWgyVjhoMXYyek02IDNjLjA3MyAwIC4wOTUuMDQ5LjEwNC4wN2wxLjI2NyAyLjc4My4xNjIuMzU2LjM4Ny4wNTUgMi45NzguNDI1Yy4wMTcuMDAyLjA3MS4wMS4wOTUuMDhhLjExNi4xMTYgMCAwMS0uMDI5LjEyNkw4Ljc2MiA5LjEyMWwtLjI1OS4yNjEuMDYzLjM2Mi41MzUgMy4xMTJjLjAwNy4wNCAwIC4wNy0uMDIzLjA5OGEuMTI3LjEyNyAwIDAxLS4wOTEuMDQ2LjEwNi4xMDYgMCAwMS0uMDU1LS4wMTZsLTIuNTc4LTEuNDY5TDYgMTEuMzE0bC0uMzU0LjIwMS0yLjU3OSAxLjQ2OWEuMTAzLjEwMyAwIDAxLS4wNTQuMDE2LjEyNy4xMjcgMCAwMS0uMDkxLS4wNDZjLS4wMjMtLjAyOC0uMDMtLjA1OC0uMDI0LS4wOThsLjUzNi0zLjExMi4wNjMtLjM2Mi0uMjU5LS4yNjEtMi4yMDItMi4yMjZhLjExNi4xMTYgMCAwMS0uMDI5LS4xMjYuMTA4LjEwOCAwIDAxLjA5NC0uMDhsMi45OC0uNDI1LjM4Ni0uMDU1LjE2Mi0uMzU2IDEuMjY3LTIuNzg2QzUuOTA1IDMuMDUgNS45MjcgMyA2IDN6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblN0YXJQbHVzRW1wdHk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblN0YXJQbHVzRmlsbGVkID0gZnVuY3Rpb24gRXVpSWNvblN0YXJQbHVzRmlsbGVkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTE0IDEwaDJ2MWgtMnYyaC0xdi0yaC0ydi0xaDJWOGgxdjJ6TTYgMmEuODYuODYgMCAwMC0uNzkyLjUxMWwtMS4zMyAyLjkyNC0zLjEyOC40NDZjLS43MS4xMDItMS4wMDEuOTc2LS40OTYgMS40ODdsMi4zMTMgMi4zMzYtLjU2MyAzLjI2OEEuODc3Ljg3NyAwIDAwMi44NjQgMTRjLjE0MiAwIC4yODktLjAzNi40MjktLjExNkw2IDEyLjM0MmwyLjcwNyAxLjU0MmMuMTQuMDguMjg3LjExNi40My4xMTZhLjg3Ny44NzcgMCAwMC44NTktMS4wMjdsLS41NjMtMy4yNjkgMi4zMTMtMi4zMzZjLjUwNS0uNTExLjIxNC0xLjM4NS0uNDk2LTEuNDg3bC0zLjEyOC0uNDQ2LTEuMzMtMi45MjNBLjg2Ljg2IDAgMDA2IDJcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU3RhclBsdXNGaWxsZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblN0YXJFbXB0eSA9IGZ1bmN0aW9uIEV1aUljb25TdGFyRW1wdHkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOCAyYS44Ni44NiAwIDAwLS43OTIuNTExbC0xLjMzIDIuOTI0LTMuMTI4LjQ0NmMtLjcxLjEwMi0xLjAwMS45NzYtLjQ5NiAxLjQ4N2wyLjMxMyAyLjMzNi0uNTYzIDMuMjY4QS44NzcuODc3IDAgMDA0Ljg2NCAxNGMuMTQyIDAgLjI4OS0uMDM2LjQyOS0uMTE2TDggMTIuMzQybDIuNzA3IDEuNTQyYy4xNC4wOC4yODcuMTE2LjQzLjExNmEuODc3Ljg3NyAwIDAwLjg1OS0xLjAyN2wtLjU2My0zLjI2OSAyLjMxMy0yLjMzNmMuNTA1LS41MTEuMjE0LTEuMzg1LS40OTYtMS40ODdsLTMuMTI4LS40NDYtMS4zMy0yLjkyM0EuODYuODYgMCAwMDggMm0wIDFjLjA3MyAwIC4wOTUuMDQ5LjEwNC4wN2wxLjI2NyAyLjc4My4xNjIuMzU2LjM4Ny4wNTUgMi45NzguNDI1Yy4wMTcuMDAyLjA3MS4wMS4wOTUuMDhhLjExNi4xMTYgMCAwMS0uMDI5LjEyNmwtMi4yMDIgMi4yMjYtLjI1OS4yNjEuMDYzLjM2Mi41MzUgMy4xMTJjLjAwNy4wNCAwIC4wNy0uMDIzLjA5OGEuMTI3LjEyNyAwIDAxLS4wOTEuMDQ2LjEwNi4xMDYgMCAwMS0uMDU1LS4wMTZsLTIuNTc4LTEuNDY5TDggMTEuMzE0bC0uMzU0LjIwMS0yLjU3OSAxLjQ2OWEuMTAzLjEwMyAwIDAxLS4wNTQuMDE2LjEyNy4xMjcgMCAwMS0uMDkxLS4wNDZjLS4wMjMtLjAyOC0uMDMtLjA1OC0uMDI0LS4wOThsLjUzNi0zLjExMi4wNjMtLjM2Mi0uMjU5LS4yNjEtMi4yMDItMi4yMjZhLjExNi4xMTYgMCAwMS0uMDI5LS4xMjYuMTA4LjEwOCAwIDAxLjA5NC0uMDhsMi45OC0uNDI1LjM4Ni0uMDU1LjE2Mi0uMzU2IDEuMjY3LTIuNzg2QzcuOTA1IDMuMDUgNy45MjcgMyA4IDNcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU3RhckVtcHR5OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25TdGFyRW1wdHlTcGFjZSA9IGZ1bmN0aW9uIEV1aUljb25TdGFyRW1wdHlTcGFjZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk02IDJhLjg2Ljg2IDAgMDAtLjc5Mi41MTFsLTEuMzMgMi45MjQtMy4xMjguNDQ2Yy0uNzEuMTAyLTEuMDAxLjk3Ni0uNDk2IDEuNDg3bDIuMzEzIDIuMzM2LS41NjMgMy4yNjhBLjg3Ny44NzcgMCAwMDIuODY0IDE0Yy4xNDIgMCAuMjg5LS4wMzYuNDI5LS4xMTZMNiAxMi4zNDJsMi43MDcgMS41NDJjLjE0LjA4LjI4Ny4xMTYuNDMuMTE2YS44NzcuODc3IDAgMDAuODU5LTEuMDI3bC0uNTYzLTMuMjY5IDIuMzEzLTIuMzM2Yy41MDUtLjUxMS4yMTQtMS4zODUtLjQ5Ni0xLjQ4N2wtMy4xMjgtLjQ0Ni0xLjMzLTIuOTIzQS44Ni44NiAwIDAwNiAybTAgMWMuMDczIDAgLjA5NS4wNDkuMTA0LjA3bDEuMjY3IDIuNzgzLjE2Mi4zNTYuMzg3LjA1NSAyLjk3OC40MjVjLjAxNy4wMDIuMDcxLjAxLjA5NS4wOGEuMTE2LjExNiAwIDAxLS4wMjkuMTI2TDguNzYyIDkuMTIxbC0uMjU5LjI2MS4wNjMuMzYyLjUzNSAzLjExMmMuMDA3LjA0IDAgLjA3LS4wMjMuMDk4YS4xMjcuMTI3IDAgMDEtLjA5MS4wNDYuMTA2LjEwNiAwIDAxLS4wNTUtLjAxNmwtMi41NzgtMS40NjlMNiAxMS4zMTRsLS4zNTQuMjAxLTIuNTc5IDEuNDY5YS4xMDMuMTAzIDAgMDEtLjA1NC4wMTYuMTI3LjEyNyAwIDAxLS4wOTEtLjA0NmMtLjAyMy0uMDI4LS4wMy0uMDU4LS4wMjQtLjA5OGwuNTM2LTMuMTEyLjA2My0uMzYyLS4yNTktLjI2MS0yLjIwMi0yLjIyNmEuMTE2LjExNiAwIDAxLS4wMjktLjEyNi4xMDguMTA4IDAgMDEuMDk0LS4wOGwyLjk4LS40MjUuMzg2LS4wNTUuMTYyLS4zNTYgMS4yNjctMi43ODZDNS45MDUgMy4wNSA1LjkyNyAzIDYgM1wiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TdGFyRW1wdHlTcGFjZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uU3RhckZpbGxlZCA9IGZ1bmN0aW9uIEV1aUljb25TdGFyRmlsbGVkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTggMmEuODYuODYgMCAwMC0uNzkyLjUxMWwtMS4zMyAyLjkyNC0zLjEyOC40NDZjLS43MS4xMDItMS4wMDEuOTc2LS40OTYgMS40ODdsMi4zMTMgMi4zMzYtLjU2MyAzLjI2OEEuODc3Ljg3NyAwIDAwNC44NjQgMTRjLjE0MiAwIC4yODktLjAzNi40MjktLjExNkw4IDEyLjM0MmwyLjcwNyAxLjU0MmMuMTQuMDguMjg3LjExNi40My4xMTZhLjg3Ny44NzcgMCAwMC44NTktMS4wMjdsLS41NjMtMy4yNjkgMi4zMTMtMi4zMzZjLjUwNS0uNTExLjIxNC0xLjM4NS0uNDk2LTEuNDg3bC0zLjEyOC0uNDQ2LTEuMzMtMi45MjNBLjg2Ljg2IDAgMDA4IDJcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU3RhckZpbGxlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uU3RhckZpbGxlZFNwYWNlID0gZnVuY3Rpb24gRXVpSWNvblN0YXJGaWxsZWRTcGFjZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk02IDJhLjg2Ljg2IDAgMDAtLjc5Mi41MTFsLTEuMzMgMi45MjQtMy4xMjguNDQ2Yy0uNzEuMTAyLTEuMDAxLjk3Ni0uNDk2IDEuNDg3bDIuMzEzIDIuMzM2LS41NjMgMy4yNjhBLjg3Ny44NzcgMCAwMDIuODY0IDE0Yy4xNDIgMCAuMjg5LS4wMzYuNDI5LS4xMTZMNiAxMi4zNDJsMi43MDcgMS41NDJjLjE0LjA4LjI4Ny4xMTYuNDMuMTE2YS44NzcuODc3IDAgMDAuODU5LTEuMDI3bC0uNTYzLTMuMjY5IDIuMzEzLTIuMzM2Yy41MDUtLjUxMS4yMTQtMS4zODUtLjQ5Ni0xLjQ4N2wtMy4xMjgtLjQ0Ni0xLjMzLTIuOTIzQS44Ni44NiAwIDAwNiAyXCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblN0YXJGaWxsZWRTcGFjZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uU3Rhck1pbnVzRW1wdHkgPSBmdW5jdGlvbiBFdWlJY29uU3Rhck1pbnVzRW1wdHkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNiAyYS44Ni44NiAwIDAwLS43OTIuNTExbC0xLjMzIDIuOTI0LTMuMTI4LjQ0NmMtLjcxLjEwMi0xLjAwMS45NzYtLjQ5NiAxLjQ4N2wyLjMxMyAyLjMzNi0uNTYzIDMuMjY4QS44NzcuODc3IDAgMDAyLjg2NCAxNGMuMTQyIDAgLjI4OS0uMDM2LjQyOS0uMTE2TDYgMTIuMzQybDIuNzA3IDEuNTQyYy4xNC4wOC4yODcuMTE2LjQzLjExNmEuODc3Ljg3NyAwIDAwLjg1OS0xLjAyN2wtLjU2My0zLjI2OSAyLjMxMy0yLjMzNmMuNTA1LS41MTEuMjE0LTEuMzg1LS40OTYtMS40ODdsLTMuMTI4LS40NDYtMS4zMy0yLjkyM0EuODYuODYgMCAwMDYgMm0wIDFjLjA3MyAwIC4wOTUuMDQ5LjEwNC4wN2wxLjI2NyAyLjc4My4xNjIuMzU2LjM4Ny4wNTUgMi45NzguNDI1Yy4wMTcuMDAyLjA3MS4wMS4wOTUuMDhhLjExNi4xMTYgMCAwMS0uMDI5LjEyNkw4Ljc2MiA5LjEyMWwtLjI1OS4yNjEuMDYzLjM2Mi41MzUgMy4xMTJjLjAwNy4wNCAwIC4wNy0uMDIzLjA5OGEuMTI3LjEyNyAwIDAxLS4wOTEuMDQ2LjEwNi4xMDYgMCAwMS0uMDU1LS4wMTZsLTIuNTc4LTEuNDY5TDYgMTEuMzE0bC0uMzU0LjIwMS0yLjU3OSAxLjQ2OWEuMTAzLjEwMyAwIDAxLS4wNTQuMDE2LjEyNy4xMjcgMCAwMS0uMDkxLS4wNDZjLS4wMjMtLjAyOC0uMDMtLjA1OC0uMDI0LS4wOThsLjUzNi0zLjExMi4wNjMtLjM2Mi0uMjU5LS4yNjEtMi4yMDItMi4yMjZhLjExNi4xMTYgMCAwMS0uMDI5LS4xMjYuMTA4LjEwOCAwIDAxLjA5NC0uMDhsMi45OC0uNDI1LjM4Ni0uMDU1LjE2Mi0uMzU2IDEuMjY3LTIuNzg2QzUuOTA1IDMuMDUgNS45MjcgMyA2IDN6bTEwIDd2MWgtNXYtMWg1elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TdGFyTWludXNFbXB0eTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uU3Rhck1pbnVzRmlsbGVkID0gZnVuY3Rpb24gRXVpSWNvblN0YXJNaW51c0ZpbGxlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk02IDJhLjg2Ljg2IDAgMDEuNzkyLjUxMWwxLjMzIDIuOTI0IDMuMTI4LjQ0NmMuNzEuMTAyIDEuMDAxLjk3Ni40OTYgMS40ODdMOS40MzMgOS43MDRsLjU2MyAzLjI2OEEuODc3Ljg3NyAwIDAxOS4xMzYgMTRhLjg2Mi44NjIgMCAwMS0uNDI5LS4xMTZMNiAxMi4zNDJsLTIuNzA3IDEuNTQyYS44NjIuODYyIDAgMDEtLjQzLjExNi44NzcuODc3IDAgMDEtLjg1OS0xLjAyN2wuNTYzLTMuMjY5TC4yNTQgNy4zNjhDLS4yNSA2Ljg1Ny4wNCA1Ljk4My43NSA1Ljg4bDMuMTI4LS40NDYgMS4zMy0yLjkyM0EuODYuODYgMCAwMTYgMnptMTAgOHYxaC01di0xaDV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblN0YXJNaW51c0ZpbGxlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uU3RhdHMgPSBmdW5jdGlvbiBFdWlJY29uU3RhdHMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOCAxNHYtNGgxdjRoNVY1aDF2OWExIDEgMCAwMS0xIDFIMmExIDEgMCAwMS0xLTF2LTJoMXYyaDZ6bTQuODUzLTEwLjE0NmwtMi45OTkgM2ExLjUgMS41IDAgMDEtMi41MzggMS41NjhsLTIuNzE0LjkwNEw0IDkuNTI3YTEuNSAxLjUgMCAxMS0uMzE2LS45NDhMNyA3LjQ3M2ExLjUgMS41IDAgMDEyLjE0Ni0xLjMyN2wzLTNhMS41IDEuNSAwIDExLjcwNy43MDd6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblN0YXRzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25TdG9wID0gZnVuY3Rpb24gRXVpSWNvblN0b3AoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00IDJoOGEyIDIgMCAwMTIgMnY4YTIgMiAwIDAxLTIgMkg0YTIgMiAwIDAxLTItMlY0YTIgMiAwIDAxMi0yem0wIDFhMSAxIDAgMDAtMSAxdjhhMSAxIDAgMDAxIDFoOGExIDEgMCAwMDEtMVY0YTEgMSAwIDAwLTEtMUg0elwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU3RvcDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uU3RvcEZpbGxlZCA9IGZ1bmN0aW9uIEV1aUljb25TdG9wRmlsbGVkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicmVjdFwiLCB7XG4gICAgd2lkdGg6IDEyLFxuICAgIGhlaWdodDogMTIsXG4gICAgeDogMixcbiAgICB5OiAyLFxuICAgIHJ4OiAyLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU3RvcEZpbGxlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uU3RvcFNsYXNoID0gZnVuY3Rpb24gRXVpSWNvblN0b3BTbGFzaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyLjI1OSAzLjAzNEExLjAwMSAxLjAwMSAwIDAwMTIgM0g0YTEgMSAwIDAwLTEgMXY4YzAgLjA5LjAxMi4xNzYuMDM0LjI1OWw5LjIyNS05LjIyNXptLjcwNy43MDdsLTkuMjI1IDkuMjI1Yy4wODMuMDIyLjE3LjAzNC4yNTkuMDM0aDhhMSAxIDAgMDAxLTFWNGMwLS4wOS0uMDEyLS4xNzYtLjAzNC0uMjU5ek00IDJoOGEyIDIgMCAwMTIgMnY4YTIgMiAwIDAxLTIgMkg0YTIgMiAwIDAxLTItMlY0YTIgMiAwIDAxMi0yelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TdG9wU2xhc2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblN0b3JhZ2UgPSBmdW5jdGlvbiBFdWlJY29uU3RvcmFnZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDAgMilcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiLFxuICAgIGQ6IFwiTTIgNmExIDEgMCAwMS0xLTFWMmExIDEgMCAwMTEtMWgxMmExIDEgMCAwMTEgMXYzYTEgMSAwIDAxLTEgMUgyem0xMyAydjNhMSAxIDAgMDEtMSAxSDJhMSAxIDAgMDEtMS0xVjhhMSAxIDAgMDExLTFoMTJhMSAxIDAgMDExIDF6bTEtM1YyYTIgMiAwIDAwLTItMkgyYTIgMiAwIDAwLTIgMnYzYzAgLjYwMS4yNzEgMS4xMzMuNjkgMS41Qy4yNzEgNi44NjcgMCA3LjM5OSAwIDh2M2EyIDIgMCAwMDIgMmgxMmEyIDIgMCAwMDItMlY4YzAtLjYwMS0uMjcxLTEuMTMzLS42ODktMS41LjQxOC0uMzY3LjY4OS0uODk5LjY4OS0xLjV6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJjaXJjbGVcIiwge1xuICAgIGN4OiA0LjUsXG4gICAgY3k6IDkuNSxcbiAgICByOiAxLjVcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJjaXJjbGVcIiwge1xuICAgIGN4OiA0LjUsXG4gICAgY3k6IDMuNSxcbiAgICByOiAxLjVcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMiA4aDF2M2gtMXpNMTAgOGgxdjNoLTF6TTEyIDJoMXYzaC0xek0xMCAyaDF2M2gtMXpcIlxuICB9KSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblN0b3JhZ2U7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblN0cmluZyA9IGZ1bmN0aW9uIEV1aUljb25TdHJpbmcoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOS4yOTcgM0w4LjkzIDUuMTAyaDEuMzUxbC0uMzIgMS44MjhIOC42MDlsLS42NTYgMy44ODNjLS4wMzYuMjY1LS4wMi40NjYuMDUuNjAxLjA3MS4xMzUuMjQ3LjIwOC41MjguMjE5LjExLjAwNS4zMzQtLjAwOC42NzItLjA0TDkuMDE2IDEzLjVhNC4xNiA0LjE2IDAgMDEtMS4zODMuMTk1Yy0uNzk3LS4wMS0xLjM5My0uMjQ0LTEuNzktLjcwMy0uMzk1LS40NTgtLjU1Ny0xLjA4LS40ODQtMS44NjdsLjY4OC00LjE5NUg1bC4zMTMtMS44MjhoMS4wNDZMNi43MjcgM2gyLjU3elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TdHJpbmc7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblN1Ym1vZHVsZSA9IGZ1bmN0aW9uIEV1aUljb25TdWJtb2R1bGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTYgMkgxdjEyaDNWN2ExIDEgMCAwMTEtMWg1YTEgMSAwIDAxMSAxdjFoNFY0SDdjLS42MjEgMC0xLS4zNzktMS0xVjJ6bTEwIDZ2NmExIDEgMCAwMS0xIDFIMWExIDEgMCAwMS0xLTFWMmExIDEgMCAwMTEtMWg1LjI1YS43NS43NSAwIDAxLjc1Ljc1bC0uMDA0LjIwNkM2Ljk5IDIuMzE3IDYuOTc0IDMgNyAzaDhhMSAxIDAgMDExIDF2NHptLTEgMWgtNGExIDEgMCAwMS0xLTFWN0g1djdoMTBWOXpNMiA0LjVhLjUuNSAwIDAxLjUtLjVoMmEuNS41IDAgMDEwIDFoLTJhLjUuNSAwIDAxLS41LS41ek02LjUgOWEuNS41IDAgMDAwIDFoMmEuNS41IDAgMDAwLTFoLTJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblN1Ym1vZHVsZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uU3VuID0gZnVuY3Rpb24gRXVpSWNvblN1bihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyIDhhNCA0IDAgMTEtOCAwIDQgNCAwIDAxOCAwek03LjI1Ljc1YS43NS43NSAwIDAxMS41IDB2MS41YS43NS43NSAwIDExLTEuNSAwVi43NXptMCAxM2EuNzUuNzUgMCAwMTEuNSAwdjEuNWEuNzUuNzUgMCAwMS0xLjUgMHYtMS41em01LjM0Ni0xMS40MDdhLjc1Ljc1IDAgMDExLjA2IDEuMDZsLTEuMDYgMS4wNjFhLjc1Ljc1IDAgMDEtMS4wNi0xLjA2bDEuMDYtMS4wNnptLTkuMTkyIDkuMTkzYS43NS43NSAwIDExMS4wNiAxLjA2bC0xLjA2IDEuMDZhLjc1Ljc1IDAgMDEtMS4wNi0xLjA2bDEuMDYtMS4wNnpNLjc1IDguNzVhLjc1Ljc1IDAgMDEwLTEuNWgxLjVhLjc1Ljc1IDAgMTEwIDEuNUguNzV6bTEzIDBhLjc1Ljc1IDAgMDEwLTEuNWgxLjVhLjc1Ljc1IDAgMDEwIDEuNWgtMS41ek0yLjM0MyAzLjQwNGEuNzUuNzUgMCAxMTEuMDYtMS4wNmwxLjA2MSAxLjA2YS43NS43NSAwIDAxLTEuMDYgMS4wNmwtMS4wNi0xLjA2em05LjE5MyA5LjE5MmEuNzUuNzUgMCAwMTEuMDYtMS4wNmwxLjA2IDEuMDZhLjc1Ljc1IDAgMDEtMS4wNiAxLjA2bC0xLjA2LTEuMDZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblN1bjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uU3dhdGNoSW5wdXQgPSBmdW5jdGlvbiBFdWlJY29uU3dhdGNoSW5wdXQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJyZWN0XCIsIHtcbiAgICB4OiAyLFxuICAgIHk6IDIsXG4gICAgd2lkdGg6IDEyLFxuICAgIGhlaWdodDogMTIsXG4gICAgcng6IDNcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJyZWN0XCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpU3dhdGNoSW5wdXRfX3N0cm9rZVwiLFxuICAgIHg6IDIuNSxcbiAgICB5OiAyLjUsXG4gICAgd2lkdGg6IDExLFxuICAgIGhlaWdodDogMTEsXG4gICAgcng6IDJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblN3YXRjaElucHV0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25TeW1saW5rID0gZnVuY3Rpb24gRXVpSWNvblN5bWxpbmsoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEwLjggMEgyYTEgMSAwIDAwLTEgMXY4bDEtMVYxaDh2My41YS41LjUgMCAwMC41LjVIMTR2MTBIMnYtMWEzLjUgMy41IDAgMDEzLjUtMy41SDhWMTNsMy0zLTMtM3YyLjVINS41QTQuNSA0LjUgMCAwMDEgMTR2MWExIDEgMCAwMDEgMWgxMmExIDEgMCAwMDEtMVY0LjQyOWMwLS4yNTYtLjA5OC0uNTAzLS4yNzQtLjY4OWwtMy4yLTMuNDI4QTEuMDAyIDEuMDAyIDAgMDAxMC44IDB6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblN5bWxpbms7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRhYmxlT2ZDb250ZW50cyA9IGZ1bmN0aW9uIEV1aUljb25UYWJsZU9mQ29udGVudHMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xIDF2MTRoMTRWMUgxek0wIDBoMTZ2MTZIMFYwem05IDF2MTRoMVYxSDl6TTMgMy41aDR2LTFIM3Yxem0wIDNoNHYtMUgzdjF6bTAgM2g0di0xSDN2MXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVGFibGVPZkNvbnRlbnRzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25UYWJsZURlbnNpdHlDb21wYWN0ID0gZnVuY3Rpb24gRXVpSWNvblRhYmxlRGVuc2l0eUNvbXBhY3QoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNiAzdjExYTIgMiAwIDAxLTIgMkgyYTIgMiAwIDAxLTItMlYyYTIgMiAwIDAxMi0yaDEyYTIgMiAwIDAxMiAydjF6bS0xIDBWMmExIDEgMCAwMC0xLTFIMmExIDEgMCAwMC0xIDF2MWgxNHptMCAxSDF2MTBhMSAxIDAgMDAxIDFoMTJhMSAxIDAgMDAxLTFWNHpNNC40OTYgN2EuNS41IDAgMDEwIDFIMi40OTVhLjUuNSAwIDAxMC0xaDIuMDAxem01LjIxOCAwYy4xNTggMCAuMjg2LjIyNC4yODYuNXMtLjEyOC41LS4yODYuNUg2LjI4NkM2LjEyOCA4IDYgNy43NzYgNiA3LjVzLjEyOC0uNS4yODYtLjVoMy40Mjh6TTQuNDk2IDVhLjUuNSAwIDAxMCAxSDIuNDk1YS41LjUgMCAwMTAtMWgyLjAwMXptNS4yMTggMGMuMTU4IDAgLjI4Ni4yMjQuMjg2LjVzLS4xMjguNS0uMjg2LjVINi4yODZDNi4xMjggNiA2IDUuNzc2IDYgNS41cy4xMjgtLjUuMjg2LS41aDMuNDI4ek00LjQ5NiA5YS41LjUgMCAwMTAgMUgyLjQ5NWEuNS41IDAgMDEwLTFoMi4wMDF6bTUuMjE4IDBjLjE1OCAwIC4yODYuMjI0LjI4Ni41cy0uMTI4LjUtLjI4Ni41SDYuMjg2QzYuMTI4IDEwIDYgOS43NzYgNiA5LjVzLjEyOC0uNS4yODYtLjVoMy40Mjh6bS01LjIxOCAyYS41LjUgMCAwMTAgMUgyLjQ5NWEuNS41IDAgMDEwLTFoMi4wMDF6bTUuMjE4IDBjLjE1OCAwIC4yODYuMjI0LjI4Ni41cy0uMTI4LjUtLjI4Ni41SDYuMjg2QzYuMTI4IDEyIDYgMTEuNzc2IDYgMTEuNXMuMTI4LS41LjI4Ni0uNWgzLjQyOHptLTUuMjE4IDJhLjUuNSAwIDAxMCAxSDIuNDk1YS41LjUgMCAwMTAtMWgyLjAwMXptOS02YS41LjUgMCAwMTAgMWgtMi4wMDFhLjUuNSAwIDAxMC0xaDIuMDAxem0wLTJhLjUuNSAwIDAxMCAxaC0yLjAwMWEuNS41IDAgMDEwLTFoMi4wMDF6bTAgNGEuNS41IDAgMDEwIDFoLTIuMDAxYS41LjUgMCAwMTAtMWgyLjAwMXptMCAyYS41LjUgMCAwMTAgMWgtMi4wMDFhLjUuNSAwIDAxMC0xaDIuMDAxem0wIDJhLjUuNSAwIDAxMCAxaC0yLjAwMWEuNS41IDAgMDEwLTFoMi4wMDF6bS0zLjc4MiAwYy4xNTggMCAuMjg2LjIyNC4yODYuNXMtLjEyOC41LS4yODYuNUg2LjI4NkM2LjEyOCAxNCA2IDEzLjc3NiA2IDEzLjVzLjEyOC0uNS4yODYtLjVoMy40Mjh6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRhYmxlRGVuc2l0eUNvbXBhY3Q7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRhYmxlRGVuc2l0eUV4cGFuZGVkID0gZnVuY3Rpb24gRXVpSWNvblRhYmxlRGVuc2l0eUV4cGFuZGVkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYgM3YxMWEyIDIgMCAwMS0yIDJIMmEyIDIgMCAwMS0yLTJWMmEyIDIgMCAwMTItMmgxMmEyIDIgMCAwMTIgMnYxem0tMSAwVjJhMSAxIDAgMDAtMS0xSDJhMSAxIDAgMDAtMSAxdjFoMTR6bTAgMUgxdjEwYTEgMSAwIDAwMSAxaDEyYTEgMSAwIDAwMS0xVjR6TTQuNSA3YS41LjUgMCAwMTAgMUgyLjQ5NmEuNS41IDAgMTEwLTFINC41em05IDBhLjUuNSAwIDExMCAxaC02YS41LjUgMCAwMTAtMWg2em0tOSA0YS41LjUgMCAxMTAgMUgyLjQ5NmEuNS41IDAgMTEwLTFINC41em05IDBhLjUuNSAwIDExMCAxaC02YS41LjUgMCAxMTAtMWg2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25UYWJsZURlbnNpdHlFeHBhbmRlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVGFibGVEZW5zaXR5Tm9ybWFsID0gZnVuY3Rpb24gRXVpSWNvblRhYmxlRGVuc2l0eU5vcm1hbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDN2MTFhMiAyIDAgMDEtMiAySDJhMiAyIDAgMDEtMi0yVjJhMiAyIDAgMDEyLTJoMTJhMiAyIDAgMDEyIDJ2MXptLTEgMFYyYTEgMSAwIDAwLTEtMUgyYTEgMSAwIDAwLTEgMXYxaDE0em0wIDFIMXYxMGExIDEgMCAwMDEgMWgxMmExIDEgMCAwMDEtMVY0ek00LjUgNmEuNS41IDAgMDEwIDFIMi40OTZhLjUuNSAwIDExMC0xSDQuNXptNS4yMTQgMGMuMTU4IDAgLjI4Ni4yMjQuMjg2LjVzLS4xMjguNS0uMjg2LjVINi4yODZDNi4xMjggNyA2IDYuNzc2IDYgNi41cy4xMjgtLjUuMjg2LS41aDMuNDI4ek00LjUgOWEuNS41IDAgMDEwIDFIMi40OTZhLjUuNSAwIDExMC0xSDQuNXptNS4yMTQgMGMuMTU4IDAgLjI4Ni4yMjQuMjg2LjVzLS4xMjguNS0uMjg2LjVINi4yODZDNi4xMjggMTAgNiA5Ljc3NiA2IDkuNXMuMTI4LS41LjI4Ni0uNWgzLjQyOHpNNC41IDEyYS41LjUgMCAxMTAgMUgyLjQ5NmEuNS41IDAgMTEwLTFINC41em05LTZhLjUuNSAwIDExMCAxaC0yLjAwNGEuNS41IDAgMDEwLTFIMTMuNXptMCAzYS41LjUgMCAxMTAgMWgtMi4wMDRhLjUuNSAwIDAxMC0xSDEzLjV6bTAgM2EuNS41IDAgMTEwIDFoLTIuMDA0YS41LjUgMCAwMTAtMUgxMy41em0tMy43ODYgMGMuMTU4IDAgLjI4Ni4yMjQuMjg2LjVzLS4xMjguNS0uMjg2LjVINi4yODZDNi4xMjggMTMgNiAxMi43NzYgNiAxMi41cy4xMjgtLjUuMjg2LS41aDMuNDI4elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25UYWJsZURlbnNpdHlOb3JtYWw7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRhZyA9IGZ1bmN0aW9uIEV1aUljb25UYWcoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02LjI1NCAxNC45N0wuOTk2IDkuNzEyYy0uMzE1LS4zMTYtLjM5Ny0uNDYzLS40NS0uNjRhLjkwOS45MDkgMCAwMTAtLjUzNGMuMDUzLS4xNzcuMTM1LS4zMjQuNDUtLjY0TDcuNDMgMS40NjZjLjE4Mi0uMTgzLjI1Mi0uMjQuMzM4LS4yOTNhLjg3Ljg3IDAgMDEuMjczLS4xMTNjLjA5OS0uMDIzLjE4OC0uMDMyLjQ0Ni0uMDMyaDUuMTczYy40NDUgMCAuNjA3LjA0Ni43Ny4xMzMuMTYyLjA4Ny4yOS4yMTQuMzc3LjM3Ny4wODguMTYyLjEzNC4zMjQuMTM2Ljc2OWwuMDE1IDUuMTVjMCAuMjU5LS4wMDkuMzQ4LS4wMzIuNDQ4YS44Ny44NyAwIDAxLS4xMTIuMjczYy0uMDU0LjA4Ny0uMTExLjE1Ny0uMjk0LjM0TDguMDY3IDE0Ljk3Yy0uMzE1LjMxNS0uNDYyLjM5Ni0uNjM5LjQ1YS45MDkuOTA5IDAgMDEtLjUzNSAwYy0uMTc2LS4wNTQtLjMyNC0uMTM1LS42MzktLjQ1em0xLjEwNi0uNzA3bDYuNDUzLTYuNDUzYy4wOTItLjA5Mi4xMjYtLjEyOC4xNDEtLjE0Ny4wMDMtLjAyNS4wMDQtLjA3NC4wMDQtLjIwNGwtLjAxNS01LjE1YzAtLjE4MS0uMDAzLS4yNDUtLjAwOS0uMjc1YTIuMjQ3IDIuMjQ3IDAgMDAtLjI3NC0uMDA3SDguNDg3Yy0uMTMgMC0uMTc5LjAwMS0uMjAzLjAwNC0uMDIuMDE1LS4wNTUuMDUtLjE0Ny4xNDFMMS43MDMgOC42MDZhMi4yNDggMi4yNDggMCAwMC0uMTg5LjJjLjAxNy4wMjQuMDYxLjA3LjE5LjE5OGw1LjI1NyA1LjI1OWMuMTI4LjEyOC4xNzUuMTcxLjIuMTg4LjAyNC0uMDE3LjA3MS0uMDYuMi0uMTg4em00Ljk3Mi0xMC42MDdhMiAyIDAgMTEtMi44MjggMi44MjggMiAyIDAgMDEyLjgyOC0yLjgyOHptLS43MDcuNzA3YTEgMSAwIDEwLTEuNDE0IDEuNDE0IDEgMSAwIDAwMS40MTQtMS40MTR6TTYuODA3IDExLjI4TDQuNjg2IDkuMTU5YS41LjUgMCAxMS43MDctLjcwN2wyLjEyMSAyLjEyYS41LjUgMCAxMS0uNzA3LjcwOHptMS40MTQtMS40MTRsLTIuMTItMi4xMjJhLjUuNSAwIDExLjcwNi0uNzA3TDguOTI4IDkuMTZhLjUuNSAwIDExLS43MDcuNzA3elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25UYWc7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRlYXIgPSBmdW5jdGlvbiBFdWlJY29uVGVhcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuNTUzIDEuNzc2YS41LjUgMCAwMS44OTQgMGw0IDhhLjUuNSAwIDAxLjA1My4yMzVjLS4wMDQuMTUtLjAyNi4zOTYtLjA4NC43MDVhNS41MzggNS41MzggMCAwMS0uNTA1IDEuNTEyQzExLjE4OSAxMy42MzggOS45MDYgMTQuNSA4IDE0LjVjLTEuOTA2IDAtMy4xOS0uODYyLTMuOTEtMi4yNzJhNS41MzggNS41MzggMCAwMS0uNTA2LTEuNTEyIDQuNjcyIDQuNjcyIDAgMDEtLjA4NC0uNzA1LjUuNSAwIDAxLjA1My0uMjM1bDQtOHptLTMuMDQ2IDguMzI5Yy4wMDkuMTA2LjAyNy4yNTMuMDYuNDI5LjA3OS40MjQuMjEzLjg0OC40MTMgMS4yMzhDNS41MzcgMTIuODYyIDYuNDg3IDEzLjUgOCAxMy41YzEuNTEzIDAgMi40NjMtLjYzOCAzLjAyLTEuNzI4LjItLjM5LjMzNC0uODE0LjQxMy0xLjIzOC4wMzMtLjE3Ni4wNTEtLjMyMy4wNi0uNDNMOCAzLjExOWwtMy40OTMgNi45ODd6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRlYXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRlbXBlcmF0dXJlID0gZnVuY3Rpb24gRXVpSWNvblRlbXBlcmF0dXJlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOC41IDE1YTMuNSAzLjUgMCAwMS0xLjc1LTYuNTMyTDcgOC4zMjRWMi41QTEuNDk2IDEuNDk2IDAgMDE5LjkwOCAySDguNXYxSDEwdjFIOC41djFIMTB2MUg4LjV2MUgxMHYxLjMyNGwuMjUuMTQ0QTMuNSAzLjUgMCAwMTguNSAxNU0xMSA3Ljc1OFYyLjVhMi41IDIuNSAwIDEwLTUgMHY1LjI1OGE0LjUgNC41IDAgMTA1IDBcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguNSA5YTIuNSAyLjUgMCAxMTAgNSAyLjUgMi41IDAgMDEwLTVcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVGVtcGVyYXR1cmU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRpbWVSZWZyZXNoID0gZnVuY3Rpb24gRXVpSWNvblRpbWVSZWZyZXNoKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMi44MDkgOC44MDdhNC41IDQuNSAwIDAxLTUuNTcyLTUuNzVBNSA1IDAgMDAzLjA0IDkuMzFhLjUuNSAwIDAxLS45NjYuMjU5IDYgNiAwIDAxNS42NzItNy41NTMgNC41IDQuNSAwIDExNi4xMTcgNi4zMTMgNi4wMDIgNi4wMDIgMCAwMS03LjgwMyA1LjQwOS41LjUgMCAxMS4zMDMtLjk1NCA1LjAwMSA1LjAwMSAwIDAwNi40NDUtMy45Nzl6TTExLjg1OSA1SDEzLjVhLjUuNSAwIDAwMC0xSDEyVjEuNWEuNS41IDAgMDAtMSAwdjNhLjUuNSAwIDAwLjUuNWguMzZ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zLjc1NyAxNS44NDhsLS43NzYtMi44OTdhMS41IDEuNSAwIDAxMS4wNi0xLjgzOGwyLjg5OC0uNzc2YS41LjUgMCAxMS4yNTkuOTY2bC0yLjg5OC43NzZhLjUuNSAwIDAwLS4zNTMuNjEzbC43NzYgMi44OThhLjUuNSAwIDAxLS45NjYuMjU4elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25UaW1lUmVmcmVzaDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVGltZWxpbmUgPSBmdW5jdGlvbiBFdWlJY29uVGltZWxpbmUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNyA0LjVhLjUuNSAwIDAwMSAwVjRoMWExIDEgMCAwMDEtMVYxYTEgMSAwIDAwLTEtMUg2YTEgMSAwIDAwLTEgMXYyYTEgMSAwIDAwMSAxaDF2LjV6TTkgMUg2djJoM1Yxek0yIDcuNWEuNS41IDAgMTExIDAgLjUuNSAwIDAxLTEgMHpNMi41IDlhMS41IDEuNSAwIDAxLTEuNDE1LTFILjVhLjUuNSAwIDAxMC0xaC41ODVhMS41IDEuNSAwIDAxMi44MyAwaDIuMTdhMS41IDEuNSAwIDAxMi44MyAwaDIuMTdhMS41IDEuNSAwIDAxMi44MyAwaC41ODVhLjUuNSAwIDAxMCAxaC0uNTg1YTEuNSAxLjUgMCAwMS0yLjgzIDBoLTIuMTdhMS41IDEuNSAwIDAxLTIuODMgMGgtMi4xN0ExLjUgMS41IDAgMDEyLjUgOXpNMTMgNy41YS41LjUgMCAxMC0xIDAgLjUuNSAwIDAwMSAwem0tNSAwYS41LjUgMCAxMC0xIDAgLjUuNSAwIDAwMSAwek0yLjUgMTBhLjUuNSAwIDAwLS41LjV2LjVIMWExIDEgMCAwMC0xIDF2MmExIDEgMCAwMDEgMWgzYTEgMSAwIDAwMS0xdi0yYTEgMSAwIDAwLTEtMUgzdi0uNWEuNS41IDAgMDAtLjUtLjV6TTQgMTR2LTJIMXYyaDN6bTgtMy41YS41LjUgMCAwMTEgMHYuNWgxYTEgMSAwIDAxMSAxdjJhMSAxIDAgMDEtMSAxaC0zYTEgMSAwIDAxLTEtMXYtMmExIDEgMCAwMTEtMWgxdi0uNXptMiAyLjV2MWgtM3YtMmgzdjF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRpbWVsaW5lOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25UaW1lc2xpZGVyID0gZnVuY3Rpb24gRXVpSWNvblRpbWVzbGlkZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMy45MjMgOEE1LjkzIDUuOTMgMCAwMDggMi4wNzcgNS45MyA1LjkzIDAgMDAyLjA3NyA4YTUuOTMgNS45MyAwIDAwNi4yOTYgNS45MTJjLjMyOC0uMDIxLjYyNS4yMjcuNjI1LjU1NmEuNTA0LjUwNCAwIDAxLS40NTguNTExIDcgNyAwIDExNi40My02LjMzM2MtLjAzNi4zOTgtLjQ4Ny41OC0uODE3LjM1NGEuNTk1LjU5NSAwIDAxLS4yNDgtLjU0Yy4wMTItLjE1Mi4wMTgtLjMwNS4wMTgtLjQ2em0xLjY4NCAzLjJsLTQuMzItMy4wNTVjLS41Ni0uMzk2LTEuMjg3LjA1OS0xLjI4Ny44djYuMTA4YzAgLjc0LjcyNiAxLjE5NiAxLjI4Ny44bDQuMzItMy4wNTVjLjUyNC0uMzcuNTI0LTEuMjI4IDAtMS41OTh6TTcuNDYyIDcuNDYySDQuNzY5YS41MzkuNTM5IDAgMDAwIDEuMDc2SDhBLjUzOS41MzkgMCAwMDguNTM4IDhWMy42OTJhLjUzOS41MzkgMCAwMC0xLjA3NiAwdjMuNzd6XCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25UaW1lc2xpZGVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlbkFsaWFzID0gZnVuY3Rpb24gRXVpSWNvblRva2VuQWxpYXMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOS4wNzUgNi45NTNhLjUuNSAwIDExLS43MDcuNzA3IDEuNSAxLjUgMCAwMC0yLjEyMiAwTDQuMTI1IDkuNzgyYTEuNSAxLjUgMCAxMDIuMTIxIDIuMTIxbDEuMTQ1LTEuMTQ0YS41LjUgMCAwMS43MDcuNzA3TDYuOTUzIDEyLjYxYTIuNSAyLjUgMCAxMS0zLjUzNS0zLjUzNWwyLjEyMS0yLjEyMmEyLjUgMi41IDAgMDEzLjUzNiAwem0zLjUzNS0zLjUzNWEyLjUgMi41IDAgMDEwIDMuNTM1TDEwLjQ5IDkuMDc1YTIuNSAyLjUgMCAwMS0zLjUzNiAwIC41LjUgMCAxMS43MDctLjcwOCAxLjUgMS41IDAgMDAyLjEyMiAwbDIuMTIxLTIuMTJhMS41IDEuNSAwIDEwLTIuMTIxLTIuMTIyTDguNjM3IDUuMjY5YS41LjUgMCAxMS0uNzA3LS43MDdsMS4xNDUtMS4xNDRhMi41IDIuNSAwIDAxMy41MzUgMHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5BbGlhczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5Bbm5vdGF0aW9uID0gZnVuY3Rpb24gRXVpSWNvblRva2VuQW5ub3RhdGlvbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk04LjE1IDMuMzkyYzIuNzk3IDAgNC41MjQgMS42NDQgNC41MTcgNC4yODkuMDA3IDEuODE2LS43MDggMi44OTMtMi4yMSAzLjAwNC0uOTA4LjA3Ni0xLjA4MS0uMjg3LTEuMTU3LS43MjVoLS4wNDFjLS4xNjMuNDItLjk2NC43MzItMS43NDQuNjgzLTEuMDUzLS4wNjUtMi4wODItLjg0Mi0yLjA5LTIuNTcyLjAwOC0xLjcyIDEuMDcxLTIuNDQxIDEuOTU5LTIuNTg2LjgwNC0uMTM1IDEuNTk4LjE1OCAxLjcyMy40NjJoLjA1MXYtLjM4NmgxLjE5NXYzLjQ1MmMuMDA3LjMuMTI4LjQyNS4zMDQuNDI1LjQgMCAuNjc3LS41ODMuNjczLTEuODYxLjAwNC0yLjM3Ni0xLjcwNS0yLjkxNC0zLjE4Ny0yLjkxNC0yLjM0IDAtMy40MTUgMS41MjItMy40MjIgMy4zODcuMDA3IDIuMTI3IDEuMjIgMy4yNzcgMy40MzMgMy4yNzcuODA4IDAgMS41OTgtLjE3NiAyLjAwNi0uMzQ5bC4zOTMgMS4xMjJjLS40MzUuMjctMS40MTkuNTA4LTIuNDkzLjUwOC0yLjk4IDAtNC43MjMtMS42Ni00LjcyNy00LjQ5Ni4wMDQtMi44MDQgMS43NDgtNC43MiA0LjgxNy00Ljcyek03Ljk2NCA2Ljc5Yy0uNzYgMC0xLjE4NS40NTktMS4xODggMS4yNC4wMDMuNjgzLjMgMS4zMzIgMS4yMDIgMS4zMzIuODIxIDAgMS4wOTQtLjQ3MyAxLjA3Ny0xLjM0My0uMDA0LS43MTgtLjIwNC0xLjIzLTEuMDkxLTEuMjN6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuQW5ub3RhdGlvbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5BcnJheSA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkFycmF5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTQuMzkyIDEyVjRoMi43MTN2MS4xNGgtMS4yMXY1LjcyaDEuMjFWMTJINC4zOTJ6bTcuNjkyLTh2OEg5LjM3di0xLjE0aDEuMjA5VjUuMTRIOS4zN1Y0aDIuNzE0elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkFycmF5OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlbkJpbmFyeSA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkJpbmFyeShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMiA0SDR2OGg4VjR6TTguNSA1LjVoLTN2NWgzdi01elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkJpbmFyeTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5Cb29sZWFuID0gZnVuY3Rpb24gRXVpSWNvblRva2VuQm9vbGVhbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk04IDEzQTUgNSAwIDExOCAzYTUgNSAwIDAxMCAxMHptLTIuODI4LTIuMTcyYTQgNCAwIDAxNS42NTYtNS42NTZjLjAwNC4wMTMtNS42NDUgNS42NzQtNS42NTYgNS42NTZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuQm9vbGVhbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5DbGFzcyA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkNsYXNzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTExLjMzMyA3LjAyN0g5LjM3NWMtLjA1Ni0uNzA4LS40OC0xLjE4Ny0xLjIyMi0xLjE4Ny0uOTcyIDAtMS41LjgwNi0xLjUgMi4xNiAwIDEuNDMuNTQ1IDIuMTYgMS40ODYgMi4xNi43MDggMCAxLjEzOS0uNDE1IDEuMjM2LTEuMDhsMS45NTguMDE1QzExLjIzNiAxMC40MTggMTAuMTgxIDEyIDguMDk3IDEyYy0xLjk1OCAwLTMuNDMtMS40MS0zLjQzLTQgMC0yLjYgMS41MTQtNCAzLjQzLTQgMS43OTIgMCAzLjA4NCAxLjA5NSAzLjIzNiAzLjAyN3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5DbGFzczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyID0gZnVuY3Rpb24gRXVpSWNvblRva2VuQ29tcGxldGlvblN1Z2dlc3RlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0zIDRhMSAxIDAgMDExLTFoOGExIDEgMCAwMTEgMXY1Ljk5NmExIDEgMCAwMS0xIDFoLTEuNjYxTDcuNCAxMy4yQS4yNS4yNSAwIDAxNyAxM3YtMi4wMDRINGExIDEgMCAwMS0xLTFWNHptMS41IDFhLjUuNSAwIDAxLjUtLjVoNmEuNS41IDAgMDEuNS41djRhLjUuNSAwIDAxLS41LjVoLS45TDggMTFWOS41SDVhLjUuNSAwIDAxLS41LS41VjV6XCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNi43NSA2YTEgMSAwIDEwMCAyIDEgMSAwIDAwMC0yem0yLjUgMGExIDEgMCAxMDAgMiAxIDEgMCAwMDAtMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlbkNvbnN0YW50ID0gZnVuY3Rpb24gRXVpSWNvblRva2VuQ29uc3RhbnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOS40MTQgMy43NTdsMi44MjkgMi44MjlhMiAyIDAgMDEwIDIuODI4bC0yLjgyOSAyLjgyOWEyIDIgMCAwMS0yLjgyOCAwTDMuNzU3IDkuNDE0YTIgMiAwIDAxMC0yLjgyOGwyLjgyOS0yLjgyOWEyIDIgMCAwMTIuODI4IDB6bS0xLjc0NyAyLjkxYTEgMSAwIDAwLTEgMXYuNjY2YTEgMSAwIDAwMSAxaC42NjZhMSAxIDAgMDAxLTF2LS42NjZhMSAxIDAgMDAtMS0xaC0uNjY2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkNvbnN0YW50OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlbkRhdGUgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5EYXRlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEzIDExLjU2N0MxMyAxMi4zNiAxMi4zNiAxMyAxMS41NjcgMTNINC40MzNDMy42NCAxMyAzIDEyLjM2IDMgMTEuNTY3VjQuNDMzQzMgMy42NCAzLjY0IDMgNC40MzMgM0g2di0uNDk1YS41MS41MSAwIDAxLjQxMi0uNDk3TDYuNSAyYy4yNzYgMCAuNS4yMTQuNS41MDVWM2gydi0uNDk1YS41MS41MSAwIDAxLjQxMi0uNDk3TDkuNSAyYy4yNzYgMCAuNS4yMTQuNS41MDVWM2gxLjU2N0MxMi4zNiAzIDEzIDMuNjQgMTMgNC40MzN2Ny4xMzR6TTQgNnY1LjMzYzAgLjM3LjMuNjcuNjcuNjdoNi42NmMuMzcgMCAuNjctLjMuNjctLjY3VjZINHptMS41IDRjLjI0NSAwIC40NS4xODMuNDkyLjQxMkw2IDEwLjVjMCAuMjQ1LS4xODMuNDUtLjQxMi40OTJMNS41IDExYS41MDUuNTA1IDAgMDEtLjUtLjVjMC0uMjQ1LjE4My0uNDUuNDEyLS40OTJMNS41IDEwek04IDEwYy4yNDUgMCAuNDUuMTgzLjQ5Mi40MTJsLjAwOC4wODhjMCAuMjQ1LS4xODMuNDUtLjQxMi40OTJMOCAxMWEuNTA1LjUwNSAwIDAxLS41LS41YzAtLjI0NS4xODMtLjQ1LjQxMi0uNDkyTDggMTB6bTIuNSAwYy4yNDUgMCAuNDUuMTgzLjQ5Mi40MTJMMTEgMTAuNWMwIC4yNDUtLjE4My40NS0uNDEyLjQ5MkwxMC41IDExYS41MDUuNTA1IDAgMDEtLjUtLjVjMC0uMjQ1LjE4My0uNDUuNDEyLS40OTJMMTAuNSAxMHptLTUtMS41Yy4yNDUgMCAuNDUuMTgzLjQ5Mi40MTJMNiA5YzAgLjI0NS0uMTgzLjQ1LS40MTIuNDkyTDUuNSA5LjVBLjUwNS41MDUgMCAwMTUgOWMwLS4yNDUuMTgzLS40NS40MTItLjQ5Mkw1LjUgOC41em0yLjUgMGMuMjQ1IDAgLjQ1LjE4My40OTIuNDEyTDguNSA5YzAgLjI0NS0uMTgzLjQ1LS40MTIuNDkyTDggOS41YS41MDUuNTA1IDAgMDEtLjUtLjVjMC0uMjQ1LjE4My0uNDUuNDEyLS40OTJMOCA4LjV6bTIuNSAwYy4yNDUgMCAuNDUuMTgzLjQ5Mi40MTJMMTEgOWMwIC4yNDUtLjE4My40NS0uNDEyLjQ5MkwxMC41IDkuNUEuNTA1LjUwNSAwIDAxMTAgOWMwLS4yNDUuMTgzLS40NS40MTItLjQ5MkwxMC41IDguNXpNNS41IDdjLjI0NSAwIC40NS4xODMuNDkyLjQxMkw2IDcuNWMwIC4yNDUtLjE4My40NS0uNDEyLjQ5Mkw1LjUgOGEuNTA1LjUwNSAwIDAxLS41LS41YzAtLjI0NS4xODMtLjQ1LjQxMi0uNDkyTDUuNSA3ek04IDdjLjI0NSAwIC40NS4xODMuNDkyLjQxMkw4LjUgNy41YzAgLjI0NS0uMTgzLjQ1LS40MTIuNDkyTDggOGEuNTA1LjUwNSAwIDAxLS41LS41YzAtLjI0NS4xODMtLjQ1LjQxMi0uNDkyTDggN3ptMi41IDBjLjI0NSAwIC40NS4xODMuNDkyLjQxMkwxMSA3LjVjMCAuMjQ1LS4xODMuNDUtLjQxMi40OTJMMTAuNSA4YS41MDUuNTA1IDAgMDEtLjUtLjVjMC0uMjQ1LjE4My0uNDUuNDEyLS40OTJMMTAuNSA3ek00IDVoOHYtLjMzYzAtLjM3LS4zLS42Ny0uNjctLjY3SDQuNjdDNC4zIDQgNCA0LjMgNCA0LjY3VjV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuRGF0ZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5EZW5zZVZlY3RvciA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkRlbnNlVmVjdG9yKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNC4xNTQgMTJWNGgyLjcxM3YxLjE0SDUuNjU4djUuNzJoMS4yMVYxMkg0LjE1M3ptNy42OTItOHY4SDkuMTMzdi0xLjE0aDEuMjA5VjUuMTRoLTEuMjFWNGgyLjcxNHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5EZW5zZVZlY3RvcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5FbGVtZW50ID0gZnVuY3Rpb24gRXVpSWNvblRva2VuRWxlbWVudChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk03LjM5IDkuNzM2bC0xLjA0MS45NEwzLjI1OCA4bDMuMDktMi42NzcgMS4wNDEuOTQtMi4wMzIgMS43MjJ2LjAzbDIuMDMyIDEuNzIxem0yLjc3Ny45NGwtMS4wNC0uOTQgMi4wMzItMS43MjF2LS4wM0w5LjEyNiA2LjI2NGwxLjA0LS45NEwxMy4yNTkgOGwtMy4wOTEgMi42Nzd6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuRWxlbWVudDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5FbnVtID0gZnVuY3Rpb24gRXVpSWNvblRva2VuRW51bShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk01LjIxMSAxMlY0aDUuNTc4djEuNTdINy4xNDV2MS42NDFoMy4zNTl2MS41NzRINy4xNDV2MS42NDVoMy42NDRWMTJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuRW51bTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5FbnVtTWVtYmVyID0gZnVuY3Rpb24gRXVpSWNvblRva2VuRW51bU1lbWJlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk03LjY4MiAxMlY5LjI0N2wxLjAyMy0uODYxYS41LjUgMCAwMC0uMDAzLS43NjhsLTEuMDItLjg0NFY0aDUuNTc4djEuNTdIOS42MTV2MS42NGgzLjM2djEuNTc1aC0zLjM2djEuNjQ1aDMuNjQ1VjEySDcuNjgyem0uNzQzLTQuMTAzYS4xMzguMTM4IDAgMDEwIC4yMDZMNi4xNTggOS45N2EuMTMzLjEzMyAwIDAxLS4yMTgtLjEwM3YtLjkzNEgyLjg3M0EuMTMzLjEzMyAwIDAxMi43NCA4LjhWNy4yYzAtLjA3NC4wNi0uMTMzLjEzMy0uMTMzSDUuOTR2LS45MzRhLjEzMy4xMzMgMCAwMS4yMTgtLjEwM2wyLjI2NyAxLjg2N3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5FbnVtTWVtYmVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlbkV2ZW50ID0gZnVuY3Rpb24gRXVpSWNvblRva2VuRXZlbnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTEuMjI1IDUuNjU2YzAgLjQyMy0uMTA2Ljc5LS4zMTggMS4xMDItLjIxMS4zMTEtLjUxLjU3LS44OTguNzc1YTUuNDM1IDUuNDM1IDAgMDEtMS4zOTIuNDg1Yy0uNTQuMTE3LTEuMTQuMTkzLTEuNzk4LjIyOWE2LjA0NyA2LjA0NyAwIDAwLS4wMzUuNjdjMCAuMjU4LjAyLjUxLjA2Mi43NTcuMDQuMjQ3LjExNC40NjQuMjIuNjUycy4yNS4zNC40MzIuNDU4LjQxNC4xNzYuNjk2LjE3NmMuMjExIDAgLjQ2Ny0uMDQ0Ljc2Ni0uMTMyLjMtLjA4OC42Mi0uMjQ0Ljk2LS40NjcuMTA2LS4wNy4xOTItLjEyOS4yNTYtLjE3NmEuMzY1LjM2NSAwIDAxLjIyLS4wN2MuMTE4IDAgLjE5Ny4wNjEuMjM4LjE4NWEuOTkuOTkgMCAwMS4wNjIuMjU1IDcuMSA3LjEgMCAwMS0uNTczLjQ2NyA0LjkzIDQuOTMgMCAwMS0uNzc1LjQ2N2MtLjI4OC4xNDEtLjYuMjYxLS45MzQuMzYxLS4zMzUuMS0uNjc4LjE1LTEuMDMuMTUtLjU0MSAwLS45ODItLjA4OC0xLjMyMi0uMjY0YTIuMDcyIDIuMDcyIDAgMDEtLjc5My0uNjg4IDIuNjI2IDIuNjI2IDAgMDEtLjM4OC0uOTMzIDQuOTQ5IDQuOTQ5IDAgMDEtLjEwNi0xLjAwNWMwLS42MzQuMTAzLTEuMjU3LjMwOS0xLjg2OC4yMDUtLjYxLjQ5OS0xLjE1Ny44OC0xLjYzOC4zODMtLjQ4Mi44MzgtLjg3IDEuMzY2LTEuMTYzQTMuNTY3IDMuNTY3IDAgMDE5LjA5MyA0Yy41OTkgMCAxLjEwNC4xMjYgMS41MTUuMzc5LjQxMS4yNTIuNjE3LjY3OC42MTcgMS4yNzd6bS0yLjQ2Ny0uOTUxYy0uMjIzIDAtLjQzNS4wOC0uNjM1LjIzOC0uMi4xNTgtLjM4MS4zNzMtLjU0Ni42NDMtLjE2NC4yNy0uMzA1LjU3OC0uNDIzLjkyNWE2LjQyIDYuNDIgMCAwMC0uMjY0IDEuMTAxYy40Ny0uMDQ3Ljg2My0uMTM1IDEuMTgtLjI2NC4zMTgtLjEzLjU3LS4yODUuNzU4LS40NjcuMTg4LS4xODIuMzIzLS4zODguNDA1LS42MTcuMDgzLS4yMjkuMTI0LS40NjcuMTI0LS43MTMgMC0uMjctLjA1Ni0uNDc5LS4xNjgtLjYyNmEuNTE5LjUxOSAwIDAwLS40MzEtLjIyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkV2ZW50OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlbkV4Y2VwdGlvbiA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkV4Y2VwdGlvbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuNDYxIDcuMzFoMy4wNTVhLjc0Ljc0IDAgMDEuNjYgMS4wNzRsLTIuMTQxIDQuMjExYS43NC43NCAwIDExLTEuMzE5LS42N0w5LjMxIDguNzlINi4yNTZhLjc0Ljc0IDAgMDEtLjY2LTEuMDc1bDIuMTktNC4zMWEuNzQuNzQgMCAwMTEuMzE5LjY3TDcuNDYxIDcuMzF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuRXhjZXB0aW9uOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlbkZpZWxkID0gZnVuY3Rpb24gRXVpSWNvblRva2VuRmllbGQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNS4yNyAxMlY0aDUuNDZ2MS41N0g3LjIwM3YxLjY0MWgzLjE4djEuNTc0aC0zLjE4VjEyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkZpZWxkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlbkZpbGUgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5GaWxlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS44NjcgMi42NjdINGEuNjY3LjY2NyAwIDAwLS42NjcuNjY2djkuMzM0YzAgLjM2OC4yOTkuNjY2LjY2Ny42NjZoOGEuNjY3LjY2NyAwIDAwLjY2Ny0uNjY2VjUuNjE5YS42NjkuNjY5IDAgMDAtLjE4My0uNDU5bC0yLjEzMy0yLjI4NWEuNjY4LjY2OCAwIDAwLS40ODQtLjIwOG0xLjQ2NiA0VjEySDQuNjY3VjRoNHYyLjMzM2MwIC4xODQuMTQ5LjMzNC4zMzMuMzM0aDIuMzMzelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkZpbGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuRmxhdHRlbmVkID0gZnVuY3Rpb24gRXVpSWNvblRva2VuRmxhdHRlbmVkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMy4yNSAzYS4yNS4yNSAwIDAwLS4yNS4yNXYyYzAgLjEzOC4xMTIuMjUuMjUuMjVoOS41YS4yNS4yNSAwIDAwLjI1LS4yNXYtMmEuMjUuMjUgMCAwMC0uMjUtLjI1aC05LjV6bTAgMy43NUEuMjUuMjUgMCAwMDMgN3YyYzAgLjEzOC4xMTIuMjUuMjUuMjVINS41QS4yNS4yNSAwIDAwNS43NSA5VjdhLjI1LjI1IDAgMDAtLjI1LS4yNUgzLjI1em0tLjI1IDRhLjI1LjI1IDAgMDEuMjUtLjI1SDUuNWEuMjUuMjUgMCAwMS4yNS4yNXYyYS4yNS4yNSAwIDAxLS4yNS4yNUgzLjI1YS4yNS4yNSAwIDAxLS4yNS0uMjV2LTJ6bTMuMzEtLjcyN2MtLjA4Mi0uMDczLS4wODItLjIyNCAwLS4yOTZsMy4wNTQtMi42ODNhLjE3LjE3IDAgMDEuMTktLjAyNmMuMDY0LjAzMi4xMDQuMS4xMDQuMTc0djEuMzQxbDMuMTYxLS4wMTZjLjEgMCAuMTguMDg2LjE4LjE5MnYyLjNjMCAuMTA1LS4wOC4xOTEtLjE4LjE5MWwtMy4xNjEuMDE3djEuMzQxYzAgLjA3NC0uMDQuMTQyLS4xMDMuMTc0YS4xNy4xNyAwIDAxLS4xOS0uMDI1TDYuMzEgMTAuMDIzelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkZsYXR0ZW5lZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5GdW5jdGlvbiA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkZ1bmN0aW9uKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTExLjI2NiA0LjE1VjUuNjNhMi40MSAyLjQxIDAgMDAtLjg1OS0uMTQ1Yy0uNjkyIDAtMS4wNjUuMzQ2LTEuMTc3IDEuMDQzbC0uMTEuNjI1aDEuODI4djEuNDRIOC45MjFsLS4yMDQgMS4xMTVDOC40NTUgMTEuMzI1IDcuNTE3IDEyIDUuOSAxMmMtLjQ2OSAwLS44ODItLjA2MS0xLjE2Ni0uMTY3di0xLjQ5NWMuMjczLjExNy41OTEuMTc4LjkwMy4xNzguNjU5IDAgMS4wMS0uMjkgMS4xMjctMS4wMTVsLjE1Ny0uOTFINS4yNDdWNy4xNTJoMS44MzdsLjE4OC0uODQyQzcuNTM0IDQuNzE0IDguNDMyIDQgMTAuMTkgNGMuMzkgMCAuODUzLjA2NyAxLjA3Ni4xNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5GdW5jdGlvbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5HZW8gPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5HZW8oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOCAzYzEuNjM2IDAgMy4wODguNzg1IDQgMiAuNjI4LjgzNiAxIDEuODc1IDEgM2E0Ljk3OCA0Ljk3OCAwIDAxLS45OTkgM0gxMmE0Ljk5MiA0Ljk5MiAwIDAxLTQgMiA0Ljk5MiA0Ljk5MiAwIDAxLTQtMS45OTlWMTFhNSA1IDAgMDE0LTh6bS45NDggOEg3LjA1MmMuMjc3LjYyNi42MjMgMSAuOTQ4IDEgLjMyNSAwIC42Ny0uMzc0Ljk0OC0xek02IDExbC0uNjQ1LjAwMWMuMjc0LjI0Mi41ODEuNDQ2LjkxNC42MDZBNS40NDUgNS40NDUgMCAwMTYgMTEuMDAxem00LjY0NS4wMDFIMTBhNS41MSA1LjUxIDAgMDEtLjI2OS42MDZjLjMzMy0uMTYuNjQtLjM2NC45MTQtLjYwNnptLTUuMTMzLTIuNUg0LjAzMWMuMDY4LjU0LjI0MyAxLjA0OC41MDUgMS41aDEuMTcyYTkuMTg2IDkuMTg2IDAgMDEtLjE5Ni0xLjV6bTMuOTc1IDBINi41MTNjLjAzLjU0NC4xMDQgMS4wNS4yMSAxLjVoMi41NTNjLjEwNy0uNDUuMTgyLS45NTYuMjEtMS41em0yLjQ4MiAwaC0xLjQ4MWE5LjE4NiA5LjE4NiAwIDAxLS4xOTYgMS41aDEuMTcyYy4yNjItLjQ1Mi40MzctLjk2LjUwNS0xLjV6TTUuNzA4IDZMNC41MzUgNmMtLjI2MS40NTItLjQzNy45Ni0uNTA0IDEuNWgxLjQ4MUE5LjE4NyA5LjE4NyAwIDAxNS43MDggNnptMy41NjggMEg2LjcyNGMtLjEwNy40NDktLjE4Mi45NTUtLjIxIDEuNDk5aDIuOTczYTguNDc5IDguNDc5IDAgMDAtLjIxLTEuNXpNMTEuNDY1IDZoLTEuMTczYy4xMDIuNDY3LjE3Ljk3Mi4xOTYgMS41aDEuNDgxYTMuOTc0IDMuOTc0IDAgMDAtLjUwNC0xLjV6TTYuMjY5IDQuMzkzbC0uMTI0LjA2MmMtLjI4Ni4xNS0uNTUxLjMzMy0uNzkuNTQ1SDZhNS41MSA1LjUxIDAgMDEuMjY5LS42MDd6TTggNGMtLjMyNiAwLS42NzEuMzc1LS45NDggMWgxLjg5NkM4LjY3MSA0LjM3NiA4LjMyNiA0IDggNHptMS43My4zOTNsLjAzOC4wNzFjLjA4My4xNjguMTYxLjM0Ny4yMzIuNTM2aC42NDZhNC4wMDYgNC4wMDYgMCAwMC0uOTE1LS42MDd6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuR2VvOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlbkhpc3RvZ3JhbSA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkhpc3RvZ3JhbShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMgM2g0djVoMlY1LjVoNFYxM0gzLjAwMXYtMUgzVjN6bTEgOWgyVjRINHY4em0zIDBoMlY5SDd2M3ptMyAwaDJWNi41aC0yVjEyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkhpc3RvZ3JhbTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5JUCA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbklQKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTExIDNhMiAyIDAgMDEyIDJ2NmEyIDIgMCAwMS0yIDJINWEyIDIgMCAwMS0yLTJWNWEyIDIgMCAwMTItMmg2em0tMSAySDh2NmgxVjkuMDE0aDFjLjI5OC0uMDEzIDIgMCAyLTIuMDE4IDAtMS43NC0xLjMxNC0xLjk1Mi0xLjgyNS0xLjk4N0wxMCA1ek02IDVINXY2aDFWNXptNCAuOTg0Yy42NjcgMCAxIC4zMzYgMSAxLjAwOEMxMSA3LjY2NCAxMC42NjcgOCAxMCA4SDlWNS45ODR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuSVA7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuSW50ZXJmYWNlID0gZnVuY3Rpb24gRXVpSWNvblRva2VuSW50ZXJmYWNlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTguOTY3IDEwLjY1M2gxLjcyN1YxMkg1LjMwNnYtMS4zNDdoMS43MjdWNS4zNDdINS4zMDZWNGg1LjM4OHYxLjM0N0g4Ljk2N3Y1LjMwNnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5JbnRlcmZhY2U7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuSm9pbiA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkpvaW4oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTcuNSA0LjV2MS4wMjVjMCAxLjI2OS0xLjE4NSAxLjkwOC0yLjExMiAxLjczN2EuNzUuNzUgMCAxMDAgMS40NzVjLjkyNy0uMTcgMi4xMTIuNDcgMi4xMTIgMS43Mzl2MS4wMjNoNHYtMS4wMDVhMi41IDIuNSAwIDAxMC00Ljk4OFY0LjVoLTR6TTEzIDRhMSAxIDAgMDAtMS0xSDdhMSAxIDAgMDAtMSAxdjEuNTI1YzAgLjE3Mi0uMTcyLjI5My0uMzQxLjI2MmEyLjI1IDIuMjUgMCAxMDAgNC40MjZjLjE3LS4wMzEuMzQxLjA5LjM0MS4yNjJWMTJhMSAxIDAgMDAxIDFoNWExIDEgMCAwMDEtMVY5LjAwNGEuMTYuMTYgMCAwMC0uMDQtLjEwNWMtLjEwOS0uMTI1LS41OTQtLjE2LS43MzItLjA2OGExIDEgMCAxMTAtMS42NjJjLjEzOC4wOTIuNjIzLjA1Ny43MzItLjA2OGEuMTYuMTYgMCAwMC4wNC0uMTA1VjR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuSm9pbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5LZXkgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5LZXkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTIuNjY3IDYuNTQyQTMuMjA4IDMuMjA4IDAgMDE4Ljg2IDkuNjk0bC0uNDM4LjQ5MmEuNDM3LjQzNyAwIDAxLS4zMjcuMTQ3aC0uNjc4di43M2EuNDM3LjQzNyAwIDAxLS40MzguNDM3SDYuMjV2LjczYS40MzcuNDM3IDAgMDEtLjQzOC40MzdIMy43NzJhLjQzNy40MzcgMCAwMS0uNDM4LS40Mzh2LTEuNDIzYzAtLjExNi4wNDYtLjIyNy4xMjgtLjMxbDIuOTUtMi45NDlhMy4yMDggMy4yMDggMCAwMTMuMDQ3LTQuMjE0IDMuMjAyIDMuMjAyIDAgMDEzLjIwOSAzLjIwOXptLTMuMjA5LS44NzVhLjg3NS44NzUgMCAxMDEuNzUgMCAuODc1Ljg3NSAwIDAwLTEuNzUgMHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5LZXk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuS2V5d29yZCA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbktleXdvcmQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMC4zMyAxMC4yOGMtLjEyLjA0LS4yOS4wNy0uNDIuMDctLjIzIDAtLjQzLS4wOC0uNTMtLjNsLS42My0xLjM0IDIuMzItMi44MUg5LjNMNy43NiA3LjkzaC0uMDlMOC4yMiA0SDYuNTlsLTEuMDUgNy41aDEuNjNsLjI3LTEuOTRoLjFsLjQzIDEuMTJjLjI3LjcxLjc0LjkyIDEuMzMuOTIuMjMgMCAuNi0uMDQuODYtLjExbC4xNy0xLjIxelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbktleXdvcmQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuTWV0aG9kID0gZnVuY3Rpb24gRXVpSWNvblRva2VuTWV0aG9kKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTMuMzMzIDExLjAyN1Y1LjA1aDIuMDU5djEuMTM2aC4wNjNjLjI1LS43NDcuODkxLTEuMjE0IDEuNzI4LTEuMjE0Ljg0OCAwIDEuNTI0LjQ4MyAxLjY1IDEuMjE0aC4wNjNjLjIwNC0uNzMxLjkyNy0xLjIxNCAxLjgyMi0xLjIxNCAxLjE1NSAwIDEuOTQ5Ljc5OCAxLjk0OSAyLjAyM3Y0LjAzaC0yLjE2OVY3LjU0MmMwLS41MjEtLjI5LS44NC0uNzM4LS44NHMtLjcyMy4zMTktLjcyMy44NHYzLjQ4Nkg2Ljk2M1Y3LjU0YzAtLjUyMS0uMjktLjg0LS43MzktLjg0LS40NDcgMC0uNzIyLjMxOS0uNzIyLjg0djMuNDg2SDMuMzMzelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbk1ldGhvZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5NZXRyaWNDb3VudGVyID0gZnVuY3Rpb24gRXVpSWNvblRva2VuTWV0cmljQ291bnRlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTExIDNhMSAxIDAgMDAtMSAxdjFIOWExIDEgMCAwMDAgMmgxdjFhMSAxIDAgMTAyIDBWN2gxYTEgMSAwIDEwMC0yaC0xVjRhMSAxIDAgMDAtMS0xek01IDdhMSAxIDAgMDAtMSAxdjFIM2ExIDEgMCAwMDAgMmgxdjFhMSAxIDAgMTAyIDB2LTFoMWExIDEgMCAxMDAtMkg2VjhhMSAxIDAgMDAtMS0xelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbk1ldHJpY0NvdW50ZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuTWV0cmljR2F1Z2UgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5NZXRyaWNHYXVnZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUgNGgtLjVhLjUuNSAwIDAxMC0xaDFhLjUuNSAwIDAxLjUuNXY5YS41LjUgMCAwMS0uNS41aC0xYS41LjUgMCAwMTAtMUg1di0yaC0uNWEuNS41IDAgMDEwLTFINVY3aC0uNWEuNS41IDAgMDEwLTFINVY0em0zIDFhMSAxIDAgMDAtMSAxdjZhMSAxIDAgMDAxIDFoMmExIDEgMCAwMDEtMVY2YTEgMSAwIDAwLTEtMUg4elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbk1ldHJpY0dhdWdlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlbk1vZHVsZSA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbk1vZHVsZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggMmw1LjE5NiAzdi4xNzhsLS44NjYuNDY4VjUuNUw4IDMgMy42NyA1LjV2NUw4IDEzbDQuMzMtMi41VjUuNzdsLjg2Ni0uNDc0VjExTDggMTRsLTUuMTk2LTNWNUw4IDJ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01LjI0MyA0LjQyOUw5LjU5NyA3LjA0IDggNy45MjggMy43NDMgNS41NjNhLjUuNSAwIDEwLS40ODYuODc0TDcuNSA4Ljc5NFYxMy41aDFWOC43OTRsNC4yNDMtMi4zNTdhLjUwOC41MDggMCAwMC4wNi0uMDRsLjM5Mi0uMjAyVjUuMDQ3bC0uOTE3LjUwNWEuNTczLjU3MyAwIDAwLS4wMi4wMWwtLjEwNi4wNi0uMTkxLjEwNS0xLjM1NS43NTMtNC44NDktMi45MDktLjUxNC44NTh6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuTW9kdWxlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlbk5hbWVzcGFjZSA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbk5hbWVzcGFjZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuNTU2IDguNDE2bC0uODA0LTEuNjhoLS4wMzZ2NS42NEg1VjRoMS45OTJsMi4yOTIgMy45Ni44MDQgMS42OGguMDM2VjRoMS43MTZ2OC4zNzZIOS44NDhsLTIuMjkyLTMuOTZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuTmFtZXNwYWNlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlbk5lc3RlZCA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbk5lc3RlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTEgM2MxLjA0NCAwIDEuOTEzLjc1NyAxLjk5NCAxLjczNmwuMDA2LjE0OXY2LjIzYzAgMS0uODIgMS44MDUtMS44NDUgMS44OEwxMSAxM0g5LjUwMWEuNS41IDAgMDEtLjA5LS45OTJsLjA5LS4wMDhIMTFjLjUyIDAgLjkzNy0uMzUuOTkzLS43ODNsLjAwNy0uMTAydi02LjIzYzAtLjQ0NS0uMzc5LS44MjctLjg4Mi0uODc5TDExIDRIOS41YS41LjUgMCAwMS0uMDktLjk5Mkw5LjUgM0gxMXpNNi41IDNhLjUuNSAwIDAxLjA5Ljk5Mkw2LjUgNEg1Yy0uNTIgMC0uOTM3LjM1LS45OTMuNzgzTDQgNC44ODV2Ni4yM2MwIC40NDUuMzc5LjgyNy44ODIuODc5TDUgMTJoMS41YS41LjUgMCAwMS4wOS45OTJMNi41IDEzSDVjLTEuMDQ0IDAtMS45MTMtLjc1Ny0xLjk5NC0xLjczNkwzIDExLjExNXYtNi4yM2MwLTEgLjgyLTEuODA1IDEuODQ1LTEuODhMNSAzaDEuNXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUuODY0IDcuMjVhLjcxNC43MTQgMCAxMTAgMS40MjkuNzE0LjcxNCAwIDAxMC0xLjQyOXptMi4xNDMgMGEuNzE0LjcxNCAwIDExMCAxLjQyOS43MTQuNzE0IDAgMDEwLTEuNDI5em0yLjE0MyAwYS43MTQuNzE0IDAgMTEwIDEuNDI5LjcxNC43MTQgMCAwMTAtMS40Mjl6XCJcbiAgfSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbk5lc3RlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5OdWxsID0gZnVuY3Rpb24gRXVpSWNvblRva2VuTnVsbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUuMDAyIDEyLjQxMmwtLjk2Mi45NjJhMSAxIDAgMDEtMS40MTQtMS40MTRsLjk2Mi0uOTYyYTUuMzMzIDUuMzMzIDAgMDE3LjQxLTcuNDFsLjk2Mi0uOTYyYTEgMSAwIDExMS40MTQgMS40MTRsLS45NjIuOTYyYTUuMzMzIDUuMzMzIDAgMDEtNy40MSA3LjQxem0uOTY2LS45NjZhNCA0IDAgMDA1LjQ3OC01LjQ3OGwtNS40NzggNS40Nzh6bS0xLjQxNC0xLjQxNGw1LjQ3OC01LjQ3OGE0IDQgMCAwMC01LjQ3OCA1LjQ3OHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5OdWxsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlbk51bWJlciA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbk51bWJlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuOCA5LjgxMmgtLjg0MmwtLjc4IDIuMzM1SDUuMDMxbC43OC0yLjMzNUg0LjZsLjE4Mi0xLjA0M2gxLjM3M2wuNTA3LTEuNTA0SDUuNDU0bC4xODgtMS4wNDJoMS4zNjdsLjc5Mi0yLjM3SDguOTRsLS43OTIgMi4zN2guODQ5bC43OTItMi4zN2gxLjE0NWwtLjc5MiAyLjM3SDExLjRsLS4xODIgMS4wNDJIOS44TDkuMjkzIDguNzdoMS4yNDhsLS4xODMgMS4wNDNIOC45NDZsLS43NzUgMi4zMzVINy4wMjZMNy44IDkuODEyem0tLjUtMS4wNDNoLjg0MmwuNTEzLTEuNTA0aC0uODQ5TDcuMyA4Ljc3elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbk51bWJlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5PYmplY3QgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5PYmplY3QoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNi42MyAxMmMtMS4yOTQgMC0yLjM4My0uMTA1LTIuMzgzLTEuODAyVjkuNmMwLS42MzgtLjI0Ny0uOTE0LS45OC0uOTE0di0xLjM3Yy43MzMgMCAuOTgtLjI4Ljk4LS45MTV2LS42QzQuMjQ3IDQuMTA1IDUuMzM2IDQgNi42MzEgNHYxLjE0Yy0uNzU5IDAtLjg4Ni4yNzItLjg4Ni44NDN2LjgxM2MwIC40NzktLjIyNS45MzYtMS4yMTIgMS4xMzN2LjE0MmMuOTg3LjE5NyAxLjIxMi42NTQgMS4yMTIgMS4xMzN2LjgxM2MwIC41Ny4xMjcuODQ0Ljg4Ni44NDRWMTJ6bTIuMjY2LThjMS4yOTUgMCAyLjM4NC4xMDUgMi4zODQgMS44MDJWNi40YzAgLjYzOC4yNDcuOTE0Ljk4LjkxNHYxLjM3Yy0uNzMzIDAtLjk4LjI4LS45OC45MTV2LjZDMTEuMjggMTEuODk1IDEwLjE5IDEyIDguODk2IDEydi0xLjE0Yy43NTkgMCAuODg2LS4yNzIuODg2LS44NDN2LS44MTNjMC0uNDc5LjIyNS0uOTM2IDEuMjEyLTEuMTMzVjcuOTNjLS45ODctLjE5Ny0xLjIxMi0uNjU0LTEuMjEyLTEuMTMzdi0uODEzYzAtLjU3LS4xMjctLjg0NC0uODg2LS44NDRWNHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5PYmplY3Q7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuT3BlcmF0b3IgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5PcGVyYXRvcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0yLjY2NyA4LjAwMmMwLTEuNS4zOTQtMi43NDMgMS4yNDgtMy44MjJoMS40MzdjLS42NTIuOC0xLjE0IDIuMzg4LTEuMTQgMy44MjIgMCAxLjQzLjQ4OCAzLjAxOCAxLjE0IDMuODE4SDMuOTE1Yy0uODU0LTEuMDgtMS4yNDgtMi4zMjItMS4yNDgtMy44MTh6TTYuNzcgOS45OThsLS44MTgtLjgwMyAxLjIzLTEuMTk3LTEuMjMtMS4yMDMuODMtLjc5MyAxLjIyMSAxLjE5M0w5LjIzIDYuMDAybC44MTguNzkzLTEuMjI3IDEuMiAxLjIyNyAxLjItLjgxOC44MDNMOCA4Ljc5NSA2Ljc3IDkuOTk4em02LjU2My0yYzAgMS41LS4zOTQgMi43NDMtMS4yNDggMy44MjJoLTEuNDM3Yy42NTItLjggMS4xNC0yLjM4OCAxLjE0LTMuODIyIDAtMS40My0uNDg4LTMuMDE4LTEuMTQtMy44MThoMS40MzdjLjg1NCAxLjA4IDEuMjQ4IDIuMzIyIDEuMjQ4IDMuODE4elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbk9wZXJhdG9yOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlblBhY2thZ2UgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5QYWNrYWdlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTguMDQ5IDMuNzg1bDMuODUyIDEuMDA2LTQuMDQ5IDEuMTAzTDQgNC43OTFsMy45NTEtMS4wMDZhLjE5LjE5IDAgMDEuMDk4IDB6bS4wNzMgMi42NTRsNC41NDUtMS4zMDZ2NS40NWwtLjEzMS4xODQtNC40MTQgMS40NTVWNi40Mzl6bS00Ljc4OSA0LjE0NVY1LjE4OEw3LjQ5OCA2LjQxdjUuODFsLTQuMDM0LTEuNDUzLS4xMy0uMTgzelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlblBhY2thZ2U7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuUGFyYW1ldGVyID0gZnVuY3Rpb24gRXVpSWNvblRva2VuUGFyYW1ldGVyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTQuODg5IDEyVjRoMy4zMDRjMS43OTcgMCAyLjkyMiAxLjExNyAyLjkxOCAyLjc3LjAwNCAxLjY1Mi0xLjE0NCAyLjc0Ni0yLjk3NiAyLjc0Nkg2LjgyMlYxMkg0Ljg5em0xLjkzMy00LjAwOGguOTUzYy44NjggMCAxLjMzNi0uNDcyIDEuMzMyLTEuMjIyLjAwNC0uNzMtLjQ2NC0xLjIxMS0xLjMzMi0xLjIxMWgtLjk1M3YyLjQzM3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5QYXJhbWV0ZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuUGVyY29sYXRvciA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlblBlcmNvbGF0b3IoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTUuNSA3YTEuNSAxLjUgMCAxMDAtMyAxLjUgMS41IDAgMDAwIDN6bTAgMWEyLjUgMi41IDAgMTAwLTUgMi41IDIuNSAwIDAwMCA1ek0xMSA5YTEgMSAwIDEwMC0yIDEgMSAwIDAwMCAyem0wIDFhMiAyIDAgMTAwLTQgMiAyIDAgMDAwIDR6bS0yLjUgMS41YS41LjUgMCAxMS0xIDAgLjUuNSAwIDAxMSAwem0xIDBhMS41IDEuNSAwIDExLTMgMCAxLjUgMS41IDAgMDEzIDB6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuUGVyY29sYXRvcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5Qcm9wZXJ0eSA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlblByb3BlcnR5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTQuODg5IDEyVjRoMy4zMDRjMS43OTcgMCAyLjkyMiAxLjExNyAyLjkxOCAyLjc3LjAwNCAxLjY1Mi0xLjE0NCAyLjc0Ni0yLjk3NiAyLjc0Nkg2LjgyMlYxMkg0Ljg5em0xLjkzMy00LjAwOGguOTUzYy44NjggMCAxLjMzNi0uNDcyIDEuMzMyLTEuMjIyLjAwNC0uNzMtLjQ2NC0xLjIxMS0xLjMzMi0xLjIxMWgtLjk1M3YyLjQzM3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5Qcm9wZXJ0eTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5SYW5nZSA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlblJhbmdlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05LjgyIDUuMTE2YS41LjUgMCAwMC0uNzA0LjcwNGwuMDY0LjA2NEwxMS43MTkgOGwtMi41NCAyLjExNmEuNS41IDAgMDAtLjExNC42M2wuMDUuMDc0YS41LjUgMCAwMC42My4xMTVsLjA3NS0uMDUgMy0yLjVhLjUuNSAwIDAwLjA3MS0uNjk3bC0uMDctLjA3Mi0zLTIuNXpNNi4xOCA1LjExNmEuNS41IDAgMDEuNzA0LjcwNGwtLjA2NC4wNjRMNC4yODEgOGwyLjU0IDIuMTE2YS41LjUgMCAwMS4xMTQuNjNsLS4wNS4wNzRhLjUuNSAwIDAxLS42My4xMTVsLS4wNzUtLjA1LTMtMi41YS41LjUgMCAwMS0uMDcxLS42OTdsLjA3LS4wNzIgMy0yLjV6XCJcbiAgfSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlblJhbmdlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlblJhbmtGZWF0dXJlID0gZnVuY3Rpb24gRXVpSWNvblRva2VuUmFua0ZlYXR1cmUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMyA0djhoLTJWNkg5djRINXYySDNWOGg0VjRoNnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5SYW5rRmVhdHVyZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5SYW5rRmVhdHVyZXMgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5SYW5rRmVhdHVyZXMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMyA0djhoLTJWNkg5djRINXYySDNWOGg0VjRoNnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5SYW5rRmVhdHVyZXM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuUmVwbyA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlblJlcG8oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOC41MzMgOS4wNjdjLTEuNzkyIDAtMi4zNzguNzItMi41NyAxLjE5NGExLjYwMSAxLjYwMSAwIDExLTEuMTYzLS4wMzdWNS43NzZhMS41OTUgMS41OTUgMCAwMS0xLjA2Ny0xLjUxYzAtLjg4NS43MTUtMS42IDEuNi0xLjYuODg2IDAgMS42LjcxNSAxLjYgMS42IDAgLjctLjQ0MiAxLjI5MS0xLjA2NiAxLjUxdjIuODIxQzYuMzM2IDguMjUxIDcuMDE5IDggOCA4YzEuNDI0IDAgMS44OTktLjcxNSAyLjA1My0xLjE5YTEuNjAzIDEuNjAzIDAgMDEtLjk4Ni0xLjQ3N2MwLS44ODUuNzE0LTEuNiAxLjYtMS42Ljg4NSAwIDEuNi43MTUgMS42IDEuNmExLjU5IDEuNTkgMCAwMS0xLjExNSAxLjUyNmMtLjEzOS43NjItLjY1NiAyLjIwOC0yLjYxOSAyLjIwOHptLTMuMiAyLjEzM2EuNTM1LjUzNSAwIDAwLS41MzMuNTMzYzAgLjI5NC4yNC41MzQuNTMzLjUzNGEuNTM1LjUzNSAwIDAwMC0xLjA2N3ptMC03LjQ2N2EuNTM1LjUzNSAwIDAwLS41MzMuNTM0YzAgLjI5My4yNC41MzMuNTMzLjUzMy4yOTQgMCAuNTM0LS4yNC41MzQtLjUzM2EuNTM1LjUzNSAwIDAwLS41MzQtLjUzNHpNMTAuNjY3IDQuOGEuNTM1LjUzNSAwIDAwLS41MzQuNTMzLjUzNS41MzUgMCAwMDEuMDY3IDAgLjUzNS41MzUgMCAwMC0uNTMzLS41MzN6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuUmVwbzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5TZWFyY2hUeXBlID0gZnVuY3Rpb24gRXVpSWNvblRva2VuU2VhcmNoVHlwZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuMjcgNy41YTEgMSAwIDExMiAwIDEgMSAwIDAxLTIgMHpNOC43NyA3LjVhMSAxIDAgMTEyIDAgMSAxIDAgMDEtMiAwelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMS43MDIgMTAuNjgyYTQuNTAxIDQuNTAxIDAgMDEtNS43OTYuNDgyTDQuMjggMTIuNzg5YS43NS43NSAwIDAxLTEuMDYtMS4wNkw0Ljg0NyAxMC4xYTQuNTAxIDQuNTAxIDAgMTE2Ljg1NS41ODF6bS01LjMwNC0xLjA2YTMgMyAwIDEwNC4yNDMtNC4yNDNBMyAzIDAgMDA2LjM5OCA5LjYyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlblNlYXJjaFR5cGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuU2hhcGUgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5TaGFwZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMyAxMHYzaC0zdi0xSDZ2MUgzdi0zaDFWNkgzVjNoM3YxaDRWM2gzdjNoLTF2NGgxem0tOCAxSDR2MWgxdi0xem03IDBoLTF2MWgxdi0xek01IDRINHYxaDFWNHptNyAwaC0xdjFoMVY0em0tMSAyaC0xVjVINnYxSDV2NGgxdjFoNHYtMWgxVjZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuU2hhcGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuU3RyaW5nID0gZnVuY3Rpb24gRXVpSWNvblRva2VuU3RyaW5nKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS4xNDcgNC4yOTdsLS4yNTUgMS40NTVoLjkzNmwtLjIyMiAxLjI2NmgtLjkzNWwtLjQ1NSAyLjY4OGMtLjAyNS4xODQtLjAxMy4zMjMuMDM2LjQxNy4wNDguMDkzLjE3LjE0NC4zNjUuMTUxLjA3NS4wMDQuMjMtLjAwNS40NjUtLjAyN2wtLjEzIDEuMzJjLS4zLjA5Ny0uNjE4LjE0Mi0uOTU3LjEzNS0uNTUyLS4wMDctLjk2NS0uMTctMS4yMzktLjQ4Ny0uMjc0LS4zMTctLjM4Ni0uNzQ4LS4zMzUtMS4yOTNsLjQ3Ni0yLjkwNGgtLjcyNWwuMjE2LTEuMjY2aC43MjVsLjI1NC0xLjQ1NWgxLjc4elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlblN0cmluZzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5TdHJ1Y3QgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5TdHJ1Y3QoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNC42NjcgNC42NjdoMi42NjZ2Mi42NjZINC42NjdWNC42Njd6bTAgNGgyLjY2NnYyLjY2Nkg0LjY2N1Y4LjY2N3ptNC00aDIuNjY2djIuNjY2SDguNjY3VjQuNjY3em0wIDRoMi42NjZ2Mi42NjZIOC42NjdWOC42Njd6TTMuMzMzIDMuMzMzdjkuMzM0aDkuMzM0VjMuMzMzSDMuMzMzem0wLTEuMzMzaDkuMzM0QzEzLjQwMyAyIDE0IDIuNTk3IDE0IDMuMzMzdjkuMzM0YzAgLjczNi0uNTk3IDEuMzMzLTEuMzMzIDEuMzMzSDMuMzMzQTEuMzMzIDEuMzMzIDAgMDEyIDEyLjY2N1YzLjMzM0MyIDIuNTk3IDIuNTk3IDIgMy4zMzMgMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5TdHJ1Y3Q7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuU3ltYm9sID0gZnVuY3Rpb24gRXVpSWNvblRva2VuU3ltYm9sKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOC4zMTYgMTRhNiA2IDAgMTEwLTEyIDYgNiAwIDAxMCAxMnptMC0xLjMzM2E0LjY2NyA0LjY2NyAwIDEwMC05LjMzNCA0LjY2NyA0LjY2NyAwIDAwMCA5LjMzNHptMi4xOS01LjcyaDEuMTQzYy4wMTkgMS40NDgtLjc5MyAyLjMzOC0xLjkyMiAyLjMzOC0uNjMyIDAtMS4xOTQtLjI2Ny0xLjcwNi0uODExLS4zNi0uMzk3LS42MzYtLjU3Ni0xLS41NzYtLjUxNyAwLS44NDkuMzU1LS44ODUgMS4wODNINC45ODNjLjAxNC0xLjQ3Ljg1OC0yLjMxNCAxLjk1LTIuMzE0LjU5NSAwIDEuMTI1LjI0OSAxLjY3OC44MDIuMzkyLjM4Mi42NDEuNTk1IDEuMDM4LjU5NS40ODQgMCAuODU3LS4zMjMuODU3LTEuMTE2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlblN5bWJvbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5UYWcgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5UYWcoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMCA4YTEgMSAwIDExLTIgMCAxIDEgMCAwMTIgMHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk00IDRhMSAxIDAgMDAtMSAxdjZhMSAxIDAgMDAxIDFoNi45ODlhMSAxIDAgMDAuODI1LS40MzZsMi4wNS0zYTEgMSAwIDAwMC0xLjEyOGwtMi4wNS0zQTEgMSAwIDAwMTAuOTkgNEg0em0uNzUgMS4yNWEuNS41IDAgMDAtLjUuNXY0LjVhLjUuNSAwIDAwLjUuNWg1Ljc0NWEuNS41IDAgMDAuNDA1LS4yMDZsMS42MzYtMi4yNWEuNS41IDAgMDAwLS41ODhMMTAuOSA1LjQ1NmEuNS41IDAgMDAtLjQwNS0uMjA2SDQuNzV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuVGFnOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlblRleHQgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5UZXh0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS4xNDcgNC4yOTdsLS4yNTUgMS40NTVoLjkzNmwtLjIyMiAxLjI2NmgtLjkzNWwtLjQ1NSAyLjY4OGMtLjAyNS4xODQtLjAxMy4zMjMuMDM2LjQxNy4wNDguMDkzLjE3LjE0NC4zNjUuMTUxLjA3NS4wMDQuMjMtLjAwNS40NjUtLjAyN2wtLjEzIDEuMzJjLS4zLjA5Ny0uNjE4LjE0Mi0uOTU3LjEzNS0uNTUyLS4wMDctLjk2NS0uMTctMS4yMzktLjQ4Ny0uMjc0LS4zMTctLjM4Ni0uNzQ4LS4zMzUtMS4yOTNsLjQ3Ni0yLjkwNGgtLjcyNWwuMjE2LTEuMjY2aC43MjVsLjI1NC0xLjQ1NWgxLjc4elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlblRleHQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuVG9rZW5Db3VudCA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlblRva2VuQ291bnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDRIM3YzaDVWNHpNMTMgOUg4djNoNVY5ek0xMCA0aDN2M2gtM1Y0ek02IDlIM3YzaDNWOXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5Ub2tlbkNvdW50OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlblZhcmlhYmxlID0gZnVuY3Rpb24gRXVpSWNvblRva2VuVmFyaWFibGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNi42NDkgNC42NjdsMS4zMjYgNC43aC4wNWwxLjMyNi00LjdoMS45ODJsLTIuMTM0IDYuNjY2SDYuODAxTDQuNjY3IDQuNjY3elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlblZhcmlhYmxlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25UcmFpbmluZyA9IGZ1bmN0aW9uIEV1aUljb25UcmFpbmluZyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEwLjM4NiA5LjgzNmEyLjUgMi41IDAgMTEzLjYxMS42NjdDMTUuMjEyIDExLjE3MyAxNiAxMi40NiAxNiAxNHYxLjVhLjUuNSAwIDExLTEgMFYxNGMwLTEuNzI0LTEuMjc2LTMtMy0zLS45MSAwLTEuMjk4LS4wMi0xLjgwNS0uMTIyLTEuMjUtLjI1NC0yLjMzMy0xLTMuNTg1LTIuNTY2YS41LjUgMCAxMS43OC0uNjI0Yy45IDEuMTI0IDEuNjUzIDEuNzQgMi40MzQgMi4wNDMuMTU1LjA1Mi4zNDUuMDgzLjU2Mi4xMDV6bTEuNzg1LjEyOGMuMDgzLjAxLjE2Ny4wMjEuMjUxLjAzNEwxMi41IDEwYTEuNSAxLjUgMCAxMC0uMzMtLjAzNnpNOS43OCAxMS45N2EuNS41IDAgMDEuNS41YzAgLjA3Ni0uMDQ3LjIyNi0uMDUuMjMxLS4xNzkuMzgtLjIzLjc3NC0uMjMgMS4zMDJ2MS41YS41LjUgMCAxMS0xIDB2LTEuNWMwLS42NTcuMDcyLTEuMTg2LjMwNy0xLjY5NmEuNS41IDAgMDEuNDczLS4zMzd6TTUuOTU4IDUuNzcyYS41LjUgMCAwMS0uNzguNjI1TDMuMTEgMy44MTJhLjUuNSAwIDExLjc4LS42MjRsMi4wNjggMi41ODR6TTEgMTFoNS41YS41LjUgMCAxMTAgMWgtNmEuNS41IDAgMDEtLjUtLjVWLjVBLjUuNSAwIDAxLjUgMGgxMmEuNS41IDAgMDEuNS41djNhLjUuNSAwIDExLTEgMFYxSDF2MTB6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRyYWluaW5nOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25UcmFzaCA9IGZ1bmN0aW9uIEV1aUljb25UcmFzaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTExIDNoNXYxSDBWM2g1VjFhMSAxIDAgMDExLTFoNGExIDEgMCAwMTEgMXYyem0tNy4wNTYgOEg3djFINC4xbC4zOTIgMi41MTljLjA0Mi4yNjkuMjU0LjQ1OC40OTMuNDU4aDYuMDNjLjIzOSAwIC40NTEtLjE4OS40OTMtLjQ1OGwxLjQ5OC05LjU3NkgxNGwtMS41MDQgOS43M2MtLjExNi43NDctLjc0IDEuMzA0LTEuNDgxIDEuMzA0aC02LjAzYy0uNzQxIDAtMS4zNjUtLjU1Ny0xLjQ4MS0xLjMwNGwtMS41MTEtOS43M0g5VjUuOTVIMy4xNTdMMy40NzYgOEg4djFIMy42MzJsLjMxMiAyek02IDNoNFYxSDZ2MnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVHJhc2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblVuZm9sZCA9IGZ1bmN0aW9uIEV1aUljb25VbmZvbGQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01LjE0IDMuODA4TDcuNTMgMS41MWEuNjcuNjcgMCAwMS45NDIgMGwyLjM4OSAyLjI5OGMuMjYuMjU2LjY4NS4yNTYuOTQ0IDBhLjY1LjY1IDAgMDAwLS45M0w5LjQxNi41NzhhMi4wMiAyLjAyIDAgMDAtMi44MzIgMGwtMi4zODggMi4zYS42NS42NSAwIDAwMCAuOTNjLjI2LjI1Ni42ODMuMjU2Ljk0NCAwem0wIDguMzg0bDIuMzkgMi4yOThhLjY3LjY3IDAgMDAuOTQyIDBsMi4zODktMi4yOThhLjY3Ny42NzcgMCAwMS45NDQgMCAuNjUuNjUgMCAwMTAgLjkzbC0yLjM4OCAyLjNhMi4wMiAyLjAyIDAgMDEtMi44MzIgMGwtMi4zODgtMi4zYS42NS42NSAwIDAxMC0uOTMuNjc3LjY3NyAwIDAxLjk0NCAwek0xNiA2SDB2NGgxNlY2ek0xIDlWN2gxNHYySDF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblVuZm9sZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVW5saW5rID0gZnVuY3Rpb24gRXVpSWNvblVubGluayhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuNTY1IDEwLjgzYS41LjUgMCAxMS44MTkuNTczbC0xLjg3NyAyLjY4Yy0uOTYzIDEuMzc2LTMuMDIgMS41NS00LjU4OC40NUMuMzUgMTMuNDM2LS4xOTEgMTEuNDQ1Ljc3MyAxMC4wN0wzLjY0IDUuOTczYy45NjMtMS4zNzUgMy4wMTktMS41NDggNC41ODctLjQ1YS41LjUgMCAxMS0uNTczLjgyQzYuNTA5IDUuNTQgNS4wOCA1LjY2IDQuNDYgNi41NDZsLTIuODY4IDQuMDk1Yy0uNjIxLjg4Ny0uMjQ1IDIuMjcuOSAzLjA3MyAxLjE0Ni44MDIgMi41NzUuNjgyIDMuMTk2LS4yMDVsMS44NzctMi42OHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuODkyIDMuNDNhLjUuNSAwIDExLS41NzQtLjgxOUwxMCAuNzM0YzEuMzc2LS45NjMgMy4zNjctLjQyMiA0LjQ2NSAxLjE0NiAxLjA5OCAxLjU2OS45MjYgMy42MjUtLjQ1IDQuNTg4TDkuOTE4IDkuMzM2Yy0xLjM3NS45NjMtMy4zNjYuNDIyLTQuNDY0LTEuMTQ2YS41LjUgMCAxMS44MTktLjU3NGMuODAyIDEuMTQ2IDIuMTg1IDEuNTIyIDMuMDcyLjlMMTMuNDQgNS42NWMuODg2LS42MjEgMS4wMDYtMi4wNS4yMDQtMy4xOTUtLjgwMi0xLjE0Ni0yLjE4Ni0xLjUyMi0zLjA3Mi0uOUw3Ljg5MiAzLjQzek02IC41djNhLjUuNSAwIDAxLTEgMHYtM2EuNS41IDAgMDExIDB6TTEuMDU4IDIuMjNsMi40NTggMS43MmEuNS41IDAgMDEtLjU3NC44MkwuNDg0IDMuMDVhLjUuNSAwIDExLjU3NC0uODJ6bTEyIDcuMDkzbDIuNDU3IDEuNzJhLjUuNSAwIDExLS41NzMuODJsLTIuNDU3LTEuNzJhLjUuNSAwIDExLjU3My0uODJ6bS0yLjA5OSAxLjE4MXYzYS41LjUgMCAxMS0xIDB2LTNhLjUuNSAwIDExMSAwelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Vbmxpbms7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblVzZXIgPSBmdW5jdGlvbiBFdWlJY29uVXNlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk04IDlhNCA0IDAgMTAwLTggNCA0IDAgMDAwIDh6bTAtMWEzIDMgMCAxMDAtNiAzIDMgMCAwMDAgNnpcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNSAxNC4yOTFBOS4wNTMgOS4wNTMgMCAwMDggMTFhOS4wNTMgOS4wNTMgMCAwMC03IDMuMjkxbC43MTUuNzFBOC4wNDcgOC4wNDcgMCAwMTggMTEuOTk2IDguMDQ3IDguMDQ3IDAgMDExNC4yODYgMTVsLjcxNC0uNzF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblVzZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblVzZXJBdmF0YXIgPSBmdW5jdGlvbiBFdWlJY29uVXNlckF2YXRhcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTgsXG4gICAgaGVpZ2h0OiAxOCxcbiAgICB2aWV3Qm94OiBcIjAgMCAxOCAxOFwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTMuNjg5IDExLjEzMmMxLjE1NSAxLjIyMiAxLjk1MyAyLjg3OSAyLjE4MyA0Ljc0OGExLjAwNyAxLjAwNyAwIDAxLTEgMS4xMkgzLjAwN2ExLjAwNSAxLjAwNSAwIDAxLTEtMS4xMmMuMjMtMS44NyAxLjAyOC0zLjUyNiAyLjE4My00Ljc0OC4yNDcuMjI4LjUwNS40NDIuNzgyLjYzMy0xLjAzOCAxLjA2OS0xLjc2NSAyLjU1LTEuOTcyIDQuMjM3TDE0Ljg3MiAxNmMtLjIwNC0xLjY4Ni0uOTMtMy4xNjYtMS45NjYtNC4yMzVhNy4wMSA3LjAxIDAgMDAuNzgzLS42MzN6TTguOTM5IDFjMS45IDAgMyAyIDQuMzggMi42MzNhMi40ODMgMi40ODMgMCAwMS0xLjg4Ljg2N2MtLjI5OCAwLS41NzktLjA2LS44NDQtLjE1N0EzLjcyNiAzLjcyNiAwIDAxNy42OSA1Ljc1Yy0xLjM5NSAwLTMuNzUuMjUtMy4yNDUtMS45MDNDNS45NCAzIDYuOTUyIDEgOC45NCAxelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOC45NCAyYzIuMjA1IDAgNCAxLjc5NCA0IDRzLTEuNzk1IDQtNCA0Yy0yLjIwNyAwLTQtMS43OTQtNC00czEuNzkzLTQgNC00bTAgOUE1IDUgMCAxMDguOTM3Ljk5OSA1IDUgMCAwMDguOTQgMTFcIlxuICB9KSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblVzZXJBdmF0YXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblVzZXJzID0gZnVuY3Rpb24gRXVpSWNvblVzZXJzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTUuNDgyIDQuMzQ0YTIgMiAwIDEwLTIuOTYzIDBjLS4wOC4wNDItLjE1Ni4wODctLjIzLjEzNi0uNDU3LjMwNS0uNzUuNzA0LS45MzMgMS4wNzNBMy40NTcgMy40NTcgMCAwMDEgNi45NzhWOWExIDEgMCAwMDEgMWgyLjVhMy42OSAzLjY5IDAgMDEuNjg0LS45NjJMNS4xNzEgOUgyVjdzMC0yIDItMmMxLjAwNyAwIDEuNTA3LjUwNyAxLjc1NSAxLjAxLjIyNS0uMjU0LjQ5My0uNDcuNzkzLS42MzZhMi43MTcgMi43MTcgMCAwMC0xLjA2Ni0xLjAzek00IDRhMSAxIDAgMTAwLTIgMSAxIDAgMDAwIDJ6bTEwIDZoLTIuNWEzLjY4NCAzLjY4NCAwIDAwLS42ODQtLjk2MkwxMC44MjkgOUgxNFY3czAtMi0yLTJjLTEuMDA3IDAtMS41MDcuNTA3LTEuNzU1IDEuMDFhMy4wMTIgMy4wMTIgMCAwMC0uNzkzLS42MzYgMi43MTYgMi43MTYgMCAwMTEuMDY2LTEuMDMgMiAyIDAgMTEyLjk2MyAwYy4wOC4wNDIuMTU2LjA4Ny4yMy4xMzYuNDU3LjMwNS43NS43MDQuOTMzIDEuMDczQTMuNDUzIDMuNDUzIDAgMDExNSA2Ljk0NFY5YTEgMSAwIDAxLTEgMXptLTItNmExIDEgMCAxMDAtMiAxIDEgMCAwMDAgMnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMCA4YzAgLjUxNy0uMTk2Ljk4OS0uNTE4IDEuMzQ0YTIuNzU1IDIuNzU1IDAgMDExLjE2MyAxLjIxQTMuNDUzIDMuNDUzIDAgMDExMSAxMS45NzdWMTRhMSAxIDAgMDEtMSAxSDZhMSAxIDAgMDEtMS0xdi0yLjAyMmEyLjAwNSAyLjAwNSAwIDAxLjAwNi0uMTM1IDMuNDU2IDMuNDU2IDAgMDEuMzUtMS4yOSAyLjc1NSAyLjc1NSAwIDAxMS4xNjItMS4yMUEyIDIgMCAxMTEwIDh6bS00IDR2Mmg0di0yczAtMi0yLTItMiAyLTIgMnptMy00YTEgMSAwIDExLTIgMCAxIDEgMCAwMTIgMHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVXNlcnM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblZlY3RvciA9IGZ1bmN0aW9uIEV1aUljb25WZWN0b3IoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMi41IDExVjVIMTFWMy41SDVWNUgzLjV2Nkg1djEuNWg2VjExaDEuNXptMSAwSDE1djRoLTR2LTEuNUg1VjE1SDF2LTRoMS41VjVIMVYxaDR2MS41aDZWMWg0djRoLTEuNXY2ek00IDRWMkgydjJoMnptOCAwaDJWMmgtMnYyek0yIDE0aDJ2LTJIMnYyem0xMCAwaDJ2LTJoLTJ2MnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmVjdG9yOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25WaWRlb1BsYXllciA9IGZ1bmN0aW9uIEV1aUljb25WaWRlb1BsYXllcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTAgMS45OTRDMCAuODkzLjg5NSAwIDEuOTk0IDBoMTIuMDEyQzE1LjEwNyAwIDE2IC44OTUgMTYgMS45OTR2MTIuMDEyQTEuOTk1IDEuOTk1IDAgMDExNC4wMDYgMTZIMS45OTRBMS45OTUgMS45OTUgMCAwMTAgMTQuMDA2VjEuOTk0em0xIDB2MTIuMDEyYzAgLjU0OC40NDYuOTk0Ljk5NC45OTRoMTIuMDEyYS45OTUuOTk1IDAgMDAuOTk0LS45OTRWMS45OTRBLjk5NS45OTUgMCAwMDE0LjAwNiAxSDEuOTk0QS45OTUuOTk1IDAgMDAxIDEuOTk0ek0xIDRoMTR2MUgxVjR6bTEuNS0xYS41LjUgMCAwMTAtMWgxYS41LjUgMCAwMTAgMWgtMXptMyAwYS41LjUgMCAwMTAtMWgxYS41LjUgMCAwMTAgMWgtMXptNC45NDcgNi4xMDZhMSAxIDAgMDEwIDEuNzg4bC0zIDJBMSAxIDAgMDE2IDEyVjhhMSAxIDAgMDExLjQ0Ny0uODk0bDMgMnpNMTAgMTBMNyA4djRsMy0yelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaWRlb1BsYXllcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVmlzQXJlYSA9IGZ1bmN0aW9uIEV1aUljb25WaXNBcmVhKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMyAxM2gxMFY5LjkxM2wtMi41NzEtMi44MjZMOC41NiA4Ljc1M2EuNS41IDAgMDEtLjcyOC0uMDY3TDQuNDQ4IDQuMzE3IDMgNi4xOTFWMTN6bTUuMjk1LTUuMzVsMS44MzctMS42NGEuNS41IDAgMDEuNzAzLjAzN2wzLjAzNSAzLjMzNmEuNS41IDAgMDEuMTMuMzM3djMuNzhhLjUuNSAwIDAxLS41LjVoLTExYS41LjUgMCAwMS0uNS0uNVY2LjAyYS41LjUgMCAwMS4xMDQtLjMwNWwxLjk0Ny0yLjUyYS41LjUgMCAwMS43OTEtLjAwMUw4LjI5NSA3LjY1ek0xIDE1aDEzLjVhLjUuNSAwIDExMCAxSC41YS41LjUgMCAwMS0uNS0uNXYtMTRhLjUuNSAwIDAxMSAwVjE1elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaXNBcmVhOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25WaXNBcmVhU3RhY2tlZCA9IGZ1bmN0aW9uIEV1aUljb25WaXNBcmVhU3RhY2tlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTS41IDFhLjUuNSAwIDAxLjUuNVYxNWgxMy41YS41LjUgMCAxMTAgMUguNWEuNS41IDAgMDEtLjUtLjV2LTE0QS41LjUgMCAwMS41IDF6bTQuMzQyIDIuMTk0TDguMjk1IDcuNjVsMS44MzctMS42NGEuNS41IDAgMDEuNzAzLjAzN2wzLjAzNSAzLjMzNmEuNS41IDAgMDEuMTMuMzM3djMuNzhhLjUuNSAwIDAxLS41LjVoLTExYS41LjUgMCAwMS0uNS0uNVY2LjAyYS41LjUgMCAwMS4xMDQtLjMwNWwxLjk0Ny0yLjUyYS41LjUgMCAwMS43OTEtLjAwMXptLS4zOTQgMS4xMjNMMyA2LjE5MXY0LjEwMWwxLjE0Ni0xLjE0NmEuNS41IDAgMDEuNDkzLS4xMjZsLjA4NS4wMzNMOC41IDEwLjk0bDEuNzc2LS44ODhhLjUuNSAwIDAxLjM2LS4wMzRsLjA4OC4wMzRMMTMgMTEuMTlWOS45MTNsLTIuNTcxLTIuODI2TDguNTYgOC43NTNhLjUuNSAwIDAxLS43MjgtLjA2N0w0LjQ0OCA0LjMxN3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmlzQXJlYVN0YWNrZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblZpc0Jhckhvcml6b250YWwgPSBmdW5jdGlvbiBFdWlJY29uVmlzQmFySG9yaXpvbnRhbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguNSAxMGgtNmEuNS41IDAgMDEwLTFIOFY2SDIuNWEuNS41IDAgMDEwLTFIMTNWMkgyLjVhLjUuNSAwIDAxMC0xaDExYS41LjUgMCAwMS41LjV2NGEuNS41IDAgMDEtLjUuNUg5djNoMi41YS41LjUgMCAwMS41LjV2NGEuNS41IDAgMDEtLjUuNWgtOWEuNS41IDAgMTEwLTFIMTF2LTNIOC41ek0wIC41YS41LjUgMCAxMTEgMHYxNGEuNS41IDAgMTEtMSAwVi41elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaXNCYXJIb3Jpem9udGFsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25WaXNCYXJIb3Jpem9udGFsU3RhY2tlZCA9IGZ1bmN0aW9uIEV1aUljb25WaXNCYXJIb3Jpem9udGFsU3RhY2tlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTS41IDBhLjUuNSAwIDAxLjUuNXYxNGEuNS41IDAgMTEtMSAwVi41QS41LjUgMCAwMS41IDB6bTEzIDFhLjUuNSAwIDAxLjUuNXY0YS41LjUgMCAwMS0uNS41SDl2M2gyLjVhLjUuNSAwIDAxLjUuNXY0YS41LjUgMCAwMS0uNS41aC05YS41LjUgMCAxMTAtMUg5di0zSDIuNWEuNS41IDAgMDEwLTFINlY2SDIuNWEuNS41IDAgMDEwLTFIMTBWMkgyLjVhLjUuNSAwIDAxMC0xaDExelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaXNCYXJIb3Jpem9udGFsU3RhY2tlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVmlzQmFyVmVydGljYWwgPSBmdW5jdGlvbiBFdWlJY29uVmlzQmFyVmVydGljYWwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMCA3LjV2NmEuNS41IDAgMTEtMSAwVjhINnY1LjVhLjUuNSAwIDExLTEgMFYzSDJ2MTAuNWEuNS41IDAgMTEtMSAwdi0xMWEuNS41IDAgMDEuNS0uNWg0YS41LjUgMCAwMS41LjVWN2gzVjQuNWEuNS41IDAgMDEuNS0uNWg0YS41LjUgMCAwMS41LjV2OWEuNS41IDAgMTEtMSAwVjVoLTN2Mi41ek0uNSAxNmEuNS41IDAgMTEwLTFoMTRhLjUuNSAwIDExMCAxSC41elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaXNCYXJWZXJ0aWNhbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVmlzQmFyVmVydGljYWxTdGFja2VkID0gZnVuY3Rpb24gRXVpSWNvblZpc0JhclZlcnRpY2FsU3RhY2tlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE0LjUgMTVhLjUuNSAwIDExMCAxSC41YS41LjUgMCAxMTAtMWgxNHptLTktMTNhLjUuNSAwIDAxLjUuNUw1Ljk5OSA3SDlWNC41YS41LjUgMCAwMS41LS41aDRhLjUuNSAwIDAxLjUuNXY5YS41LjUgMCAxMS0xIDBWN2gtM3Y2LjVhLjUuNSAwIDAxLS40MS40OTJMOS41IDE0YS41LjUgMCAwMS0uNS0uNVYxMEg2djMuNWEuNS41IDAgMDEtLjk5Mi4wOUw1IDEzLjVWNkgydjcuNWEuNS41IDAgMTEtMSAwdi0xMWEuNS41IDAgMDEuNS0uNWg0elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaXNCYXJWZXJ0aWNhbFN0YWNrZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblZpc0dhdWdlID0gZnVuY3Rpb24gRXVpSWNvblZpc0dhdWdlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIuODc3IDUuODQ3bC0xLjAyIDEuMDJhLjUuNSAwIDAxLS43MDgtLjcwN2wxLjEtMS4wOTljLS4wNS0uMDUzLS4xLS4xMDYtLjE1Mi0uMTU3QTYuNDcxIDYuNDcxIDAgMDA4IDMuMDE5VjQuNWEuNS41IDAgMDEtMSAwVjMuMDE5YTYuNDcgNi40NyAwIDAwLTQuMjYxIDIuMDU1bDEuMDcgMS4wNzFhLjUuNSAwIDAxLS43MDYuNzA3bC0uOTktLjk5QTYuNDYgNi40NiAwIDAwMS4wMTggMTBIMi41YS41LjUgMCAxMTAgMUgxLjE3NGMuMDgzLjM1My4xOTYuNjk3LjMzNyAxLjAzYS41LjUgMCAxMS0uOTIyLjM5QTcuNDg3IDcuNDg3IDAgMDEwIDkuNWE3LjQ4MyA3LjQ4MyAwIDAxMi4xOTctNS4zMDRBNy40ODcgNy40ODcgMCAwMTcuNSAyYTcuNDg3IDcuNDg3IDAgMDE1LjMwNCAyLjE5N0E3LjQ4MyA3LjQ4MyAwIDAxMTUgOS41YTcuNDg3IDcuNDg3IDAgMDEtLjU5IDIuOTIuNS41IDAgMDEtLjkyLS4zOWMuMTQtLjMzMy4yNTMtLjY3Ny4zMzYtMS4wM0gxMi41YS41LjUgMCAxMTAtMWgxLjQ4MWE2LjQ4MyA2LjQ4MyAwIDAwLTEuMTA0LTQuMTUzem0tNi4wNDEgNS4zMTdhLjk5My45OTMgMCAwMS0uMDEtMS40MDRjLjM4NC0uMzg1IDIuODgyLTIuMDAyIDMuMTQ5LTEuNzM1LjI2Ny4yNjctMS4zNSAyLjc2NS0xLjczNSAzLjE1YS45OTMuOTkzIDAgMDEtMS40MDQtLjAxelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaXNHYXVnZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVmlzR29hbCA9IGZ1bmN0aW9uIEV1aUljb25WaXNHb2FsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAuNzI1IDMuNjUzYTYgNiAwIDAxMi44NDcgNy41NzYuNS41IDAgMDEtLjkyOC0uMzcyIDUgNSAwIDEwLTkuMjkzLS4wMTQuNS41IDAgMDEtLjIxOC42MTlMMS4zOSAxMi40N2EuNS41IDAgMDEtLjcwOC0uMjNBNy45OSA3Ljk5IDAgMDEwIDlhOCA4IDAgMDExMS4yMTItNy4zMjkuNS41IDAgMDEuMjM0LjcwNGwtLjcyMSAxLjI3OHptLS45MzMtLjM4bC41LS44ODlhNyA3IDAgMDAtOC45MDIgOC45M2wuODg2LS41MTFhNiA2IDAgMDE3LjUxNi03LjUzek02LjczIDkuNDY3YTEuNzUgMS43NSAwIDExMi41MzkgMCAyIDIgMCAxMS0yLjUzOSAwek04IDEyLjAxM2ExIDEgMCAxMDAtMiAxIDEgMCAwMDAgMnptMC0zYS43NS43NSAwIDEwMC0xLjUuNzUuNzUgMCAwMDAgMS41elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaXNHb2FsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25WaXNMaW5lID0gZnVuY3Rpb24gRXVpSWNvblZpc0xpbmUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMi42NTQgMy40OGMuMjQ4LjIyNS41NTIuMzg5Ljg4OC40NjdMMTEuMjQgOS40M2ExLjk5IDEuOTkgMCAwMC0uOTE1LS40MDRsMi4zMy01LjU0N3pNOS4xNDYgOS4xOWEyLjAwOCAyLjAwOCAwIDAwLS43NjkuNjRsLTEuNTcyLTJjLjMxMS0uMTM2LjU4MS0uMzUuNzg1LS42MThsMS41NTYgMS45Nzh6TTUuNTgxIDcuOTU2bC0yLjEzNCA0LjI2OGEuNS41IDAgMDEtLjg5NC0uNDQ4bDIuMTM0LTQuMjY4Yy4yNS4yMi41NTcuMzc2Ljg5NC40NDh6TTEgMTVoMTMuNWEuNS41IDAgMTEwIDFILjVhLjUuNSAwIDAxLS41LS41di0xNGEuNS41IDAgMDExIDBWMTV6bTUtOGExIDEgMCAxMTAtMiAxIDEgMCAwMTAgMnptNCA1YTEgMSAwIDExMC0yIDEgMSAwIDAxMCAyem00LTlhMSAxIDAgMTEwLTIgMSAxIDAgMDEwIDJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblZpc0xpbmU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblZpc01hcENvb3JkaW5hdGUgPSBmdW5jdGlvbiBFdWlJY29uVmlzTWFwQ29vcmRpbmF0ZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuNSAxNUM1Ljc3IDE1IDIgOS45NyAyIDYuNTk1IDIgMy41MDcgNC40NiAxIDcuNSAxUzEzIDMuNTA3IDEzIDYuNTk1QzEzIDkuOTcgOS4yMyAxNSA3LjUgMTV6bTAtMWMuMjg2IDAgMS40OC0xLjA0NCAyLjQ1OS0yLjM1QzExLjIxOSA5Ljk2OSAxMiA4LjE1MyAxMiA2LjU5NiAxMiA0LjA1NSA5Ljk4MyAyIDcuNSAyUzMgNC4wNTUgMyA2LjU5NWMwIDEuNTU3Ljc4IDMuMzczIDIuMDQxIDUuMDU2QzYuMDIgMTIuOTU2IDcuMjE0IDE0IDcuNSAxNHptMC00Ljk5NmEyLjUgMi41IDAgMTEwLTUgMi41IDIuNSAwIDAxMCA1em0wLTFhMS41IDEuNSAwIDEwMC0zIDEuNSAxLjUgMCAwMDAgM3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmlzTWFwQ29vcmRpbmF0ZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVmlzTWFwUmVnaW9uID0gZnVuY3Rpb24gRXVpSWNvblZpc01hcFJlZ2lvbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuNSAyLjMwOXY4LjY5YS40OTkuNDk5IDAgMDEtLjAzMi4xNzZMOS41IDEyLjY5MVYzLjgwOWwtMy0xLjV6bS0xLS4wNEwyIDMuODI1djguOTA2bDMuNTI3LTEuNTY4YS41LjUgMCAwMS0uMDI3LS4xNjRWMi4yN3ptLjI3NC0xLjIxNmEuNDk4LjQ5OCAwIDAxLjQ3MS4wMWwzLjc2OCAxLjg4NCA0LjI4NC0xLjkwNEEuNS41IDAgMDExNSAxLjV2MTBhLjUuNSAwIDAxLS4yOTcuNDU3bC00LjUgMmEuNS41IDAgMDEtLjQyNy0uMDFsLTMuNzg5LTEuODk0LTQuMjgzIDEuOTA0YS41LjUgMCAwMS0uNzAzLS40NTd2LTEwYS41LjUgMCAwMS4yOTctLjQ1N2w0LjQ3Ni0xLjk5ek0xMC41IDMuODI1djguOTA2bDMuNS0xLjU1NlYyLjI3bC0zLjUgMS41NTZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblZpc01hcFJlZ2lvbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVmlzTWV0cmljID0gZnVuY3Rpb24gRXVpSWNvblZpc01ldHJpYyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuNTMyIDcuMzRhMi4xNjEgMi4xNjEgMCAxMTIuOTM2IDAgMi43NDYgMi43NDYgMCAxMS0yLjkzNiAwek0yIDBoMTJhMiAyIDAgMDEyIDJ2MTJhMiAyIDAgMDEtMiAySDJhMiAyIDAgMDEtMi0yVjJhMiAyIDAgMDEyLTJ6bTAgMWExIDEgMCAwMC0xIDF2MTJhMSAxIDAgMDAxIDFoMTJhMSAxIDAgMDAxLTFWMmExIDEgMCAwMC0xLTFIMnptNiA1LjkxNWExLjE2MSAxLjE2MSAwIDEwMC0yLjMyMiAxLjE2MSAxLjE2MSAwIDAwMCAyLjMyMnptMCA0LjQ5MmExLjc0NiAxLjc0NiAwIDEwMC0zLjQ5MiAxLjc0NiAxLjc0NiAwIDAwMCAzLjQ5MnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmlzTWV0cmljOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25WaXNQaWUgPSBmdW5jdGlvbiBFdWlJY29uVmlzUGllKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNi41IDlhLjUuNSAwIDAxLS41LS41VjMuMDIzQTUuNSA1LjUgMCAxMDExLjk3OCA5SDYuNXpNNyA4aDUuNWEuNS41IDAgMDEuNS41QTYuNSA2LjUgMCAxMTYuNSAyYS41LjUgMCAwMS41LjVWOHptMi02Ljk3MlY2aDQuOTcyQzEzLjY5NiAzLjU1MiAxMS40NDggMS4zMDQgOSAxLjAyOHpNMTQuNSA3aC02YS41LjUgMCAwMS0uNS0uNXYtNmEuNS41IDAgMDEuNS0uNUMxMS44NTMgMCAxNSAzLjE0NyAxNSA2LjVhLjUuNSAwIDAxLS41LjV6TTYuMTQ2IDguODU0YS41LjUgMCAxMS43MDgtLjcwOGw0IDRhLjUuNSAwIDAxLS43MDguNzA4bC00LTR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblZpc1BpZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVmlzVGFibGUgPSBmdW5jdGlvbiBFdWlJY29uVmlzVGFibGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNiAzdjExYTIgMiAwIDAxLTIgMkgyYTIgMiAwIDAxLTItMlYyYTIgMiAwIDAxMi0yaDEyYTIgMiAwIDAxMiAydjF6bS0xIDBWMmExIDEgMCAwMC0xLTFIMmExIDEgMCAwMC0xIDF2MWgxNHptMCAxSDF2MTBhMSAxIDAgMDAxIDFoMTJhMSAxIDAgMDAxLTFWNHpNNC41IDZhLjUuNSAwIDAxMCAxSDIuNDk2YS41LjUgMCAxMTAtMUg0LjV6bTkgMGEuNS41IDAgMTEwIDFoLTZhLjUuNSAwIDAxMC0xaDZ6bS05IDNhLjUuNSAwIDAxMCAxSDIuNDk2YS41LjUgMCAxMTAtMUg0LjV6bTkgMGEuNS41IDAgMTEwIDFoLTZhLjUuNSAwIDAxMC0xaDZ6bS05IDNhLjUuNSAwIDExMCAxSDIuNDk2YS41LjUgMCAxMTAtMUg0LjV6bTkgMGEuNS41IDAgMTEwIDFoLTZhLjUuNSAwIDExMC0xaDZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblZpc1RhYmxlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25WaXNUYWdDbG91ZCA9IGZ1bmN0aW9uIEV1aUljb25WaXNUYWdDbG91ZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEuNSA5LjA0N2EuNS41IDAgMTAwIDFoMTNhLjUuNSAwIDAwMC0xaC0xM3ptMC0xaDEzYTEuNSAxLjUgMCAwMTAgM2gtMTNhMS41IDEuNSAwIDAxMC0zek0xMCAxM2EuNS41IDAgMTEwIDFINGEuNS41IDAgMTEwLTFoNnpNOC4wMDEgMi4wMTVhLjUuNSAwIDExLS4wMDIgMWwtNS0uMDE1YS41LjUgMCAxMS4wMDMtMWw1IC4wMTV6TTE0IDVhLjUuNSAwIDExMCAxSDZhLjUuNSAwIDAxMC0xaDh6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblZpc1RhZ0Nsb3VkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25WaXNUZXh0ID0gZnVuY3Rpb24gRXVpSWNvblZpc1RleHQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04LjUgNXY2aDJhLjUuNSAwIDExMCAxaC01YS41LjUgMCAxMTAtMWgyVjVINXYuNWEuNS41IDAgMDEtMSAwdi0xYS41LjUgMCAwMS41LS41aDdhLjUuNSAwIDAxLjUuNTFsLS4wMjEgMWEuNS41IDAgMTEtMS0uMDJsLjAxLS40OUg4LjV6TTEgMTVoMS41YS41LjUgMCAxMTAgMWgtMmEuNS41IDAgMDEtLjUtLjV2LTEuOTk2YS41LjUgMCAwMTEgMFYxNXpNMSAxdjEuNDk3YS41LjUgMCAxMS0xIDBWLjVBLjUuNSAwIDAxLjUgMGgyYS41LjUgMCAwMTAgMUgxem0xNCAwaC0xLjQ5NWEuNS41IDAgMDEwLTFIMTUuNWEuNS41IDAgMDEuNS41djJhLjUuNSAwIDExLTEgMFYxem0wIDE0di0xLjVhLjUuNSAwIDExMSAwdjJhLjUuNSAwIDAxLS41LjVoLTJhLjUuNSAwIDExMC0xSDE1ek0wIDYuNWEuNS41IDAgMDExIDB2M2EuNS41IDAgMDEtMSAwdi0zek05LjUgMGEuNS41IDAgMDEwIDFoLTNhLjUuNSAwIDAxMC0xaDN6TTE1IDYuNWEuNS41IDAgMTExIDB2M2EuNS41IDAgMTEtMSAwdi0zek05LjUgMTVhLjUuNSAwIDExMCAxaC0zYS41LjUgMCAxMTAtMWgzelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaXNUZXh0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25WaXNUaW1lbGlvbiA9IGZ1bmN0aW9uIEV1aUljb25WaXNUaW1lbGlvbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEwLjg4NCAxLjgwMmMxLjE3MS0uMzA5IDIuMjItLjI0IDMuMTAzLjA3LjI5NS4xMDQuNTA3LjIxMi42MzEuMjkybC4xNjQuMTA2LjA0OC4xODhjLjI3OCAxLjA2Ni4yIDIuMTc1LS4wOTEgMy4yM2E2LjcyOCA2LjcyOCAwIDAxLS4xOTQuNTk4Yy4wMzUuMTIuMDc0LjI3My4xMTIuNDU0LjIyNyAxLjA2NS4yNDcgMi4xOTMtLjA4IDMuMjY3YTQuODU1IDQuODU1IDAgMDEtLjUzNCAxLjE3NWMtLjMyNC41MTQtLjcuOTU0LTEuMTE3IDEuMzIzLS44MDYuNzEyLTEuNjE2IDEuMDcxLTIuMjM1IDEuMjA2LS4xNC4xNzktLjM0Ni4zODEtLjYyOS41NzgtLjY0My40NDctMS40OTMuNzExLTIuNTYxLjcxMS0xLjA3IDAtMS45Mi0uMjY0LTIuNTYzLS43MTFhMi44NzQgMi44NzQgMCAwMS0uNjI5LS41NzhjLS42MTgtLjEzNC0xLjQyOC0uNDkzLTIuMjMyLTEuMjAzLS40MTktLjM3LS43OTYtLjgxLTEuMTItMS4zMjZhNC44NTUgNC44NTUgMCAwMS0uNTM0LTEuMTc1Qy4wOTYgOC45MzMuMTE2IDcuODA1LjM0MyA2Ljc0YTYuNzQgNi43NCAwIDAxLjExMi0uNDU0IDYuNzI4IDYuNzI4IDAgMDEtLjE5NC0uNTk4Qy0uMDMgNC42MzMtLjEwOCAzLjUyNC4xNyAyLjQ1OGwuMDQ4LS4xODguMTY0LS4xMDZjLjEyNC0uMDguMzM2LS4xODguNjMtLjI5MS44ODUtLjMxIDEuOTMzLS4zOCAzLjEwNC0uMDcuMTg0LS4xMDguNDM0LS4yMy43NDgtLjM0OEM1LjYxNiAxLjE3IDYuNDk3IDEgNy41MDEgMWMxLjAwMiAwIDEuODgzLjE3IDIuNjM0LjQ1NS4zMTUuMTE5LjU2NS4yNC43NS4zNDd6bTMuMDI3IDEuMTE2YTMuMTMgMy4xMyAwIDAwLS4yNTUtLjEwMmMtLjc0OS0uMjYzLTEuNjYtLjMwOS0yLjcwOC4wMDdsLS4yMzguMDcyLS4yMDEtLjE0N2MtLjExLS4wOC0uMzU0LS4yMTctLjcyOC0uMzU4QzkuMTQgMi4xNDcgOC4zOCAyIDcuNTAxIDJjLS44OCAwLTEuNjQxLjE0Ny0yLjI4My4zOS0uMzczLjE0MS0uNjE3LjI3OC0uNzI3LjM1OGwtLjIuMTQ3LS4yNC0uMDcyYy0xLjA0OC0uMzE2LTEuOTU4LS4yNy0yLjcwNy0uMDA3YTMuMTMgMy4xMyAwIDAwLS4yNTUuMTAyYy0uMTY3LjgxMi0uMDk0IDEuNjc0LjEzNiAyLjUwMy4wODQuMzAzLjE2Ni41MjQuMjE3LjYzN2wuMDgyLjE4Mi0uMDY2LjE5Yy0uMDMyLjA5LS4wODQuMjctLjEzNy41MTgtLjE5NS45MTQtLjIxMiAxLjg4LjA1OSAyLjc2Ny4xLjMzMy4yNDEuNjQ1LjQyMy45MzUuMjczLjQzNC41ODguODAxLjkzNiAxLjEwOC40MzQuMzgzLjg5OC42NTUgMS4zNi44MzQuMjcuMTA1LjQ3NC4xNTUuNTc1LjE3bC4yNDguMDM0LjEyLjIyYy4wNTEuMDkxLjE5OS4yNjYuNDY2LjQ1Mi40NzYuMzMgMS4xMjcuNTMyIDEuOTkzLjUzMi44NjUgMCAxLjUxNi0uMjAyIDEuOTktLjUzMi4yNjgtLjE4Ni40MTYtLjM2LjQ2Ni0uNDUybC4xMjEtLjIyLjI0OC0uMDM0Yy4xMDEtLjAxNS4zMDUtLjA2NS41NzYtLjE3LjQ2Mi0uMTguOTI3LS40NTIgMS4zNjItLjgzNi4zNDctLjMwNy42Ni0uNjc0LjkzMy0xLjEwNy4xODItLjI5LjMyMi0uNjAxLjQyMy0uOTM0LjI3MS0uODg3LjI1NC0xLjg1My4wNi0yLjc2N2E0LjU5NyA0LjU5NyAwIDAwLS4xMzgtLjUxOWwtLjA2Ni0uMTg5LjA4Mi0uMTgyYy4wNS0uMTEzLjEzMy0uMzM0LjIxNy0uNjM3LjIzLS44MjkuMzAzLTEuNjkxLjEzNi0yLjUwM3pNNSA1LjAwOGMuMDA0LjE4MS0uMDQ4LjM2NC0uMjY0LjYxNi0uNDI4LjQ5OC0uOTg1LjQ4OC0xLjQzMS4wNDktLjMyNi0uMzIxLS4zMjUtLjczMi0uMjktMS4wNDcuMDg1LS43Ni43NDgtLjcyMiAxLjI2Mi0uNDQuNDg2LjI3LjcxNy42MTYuNzIzLjgyM3ptNSAwYy4wMDYtLjIwNi4yMzctLjU1My43MjQtLjgyMS41MTQtLjI4MyAxLjE3Ni0uMzIxIDEuMjYuNDQuMDM2LjMxNC4wMzguNzI1LS4yODggMS4wNDYtLjQ0Ni40NC0xLjAwNS40NDktMS40MzMtLjA1LS4yMTctLjI1LS4yNjctLjQzNC0uMjYzLS42MTR6TTcuNSA4Yy0uNTAzIDAtLjk3Ni0uMjQtMS4zNzUtLjY3Mi0uMzk4LS40MzItLjU5Mi0xLjEyNiAwLTEuNTI4LjM4NC0uMjU5IDEuMDgyLS4zIDEuMzc1LS4zLjI5NCAwIC45OTEuMDQxIDEuMzc1LjMuNTkzLjQwMi4zOTcgMS4wOTYgMCAxLjUyOEM4LjQ3NyA3Ljc2IDguMDAyIDggNy41IDh6bTAgMWMuODA4IDAgMi42NTYuOTk0IDIuNDkgMi4wNzQtLjE1My45OTMtMi4xMTQuOTI1LTIuNDkuOTI1LS4zNzQgMC0yLjMzNi4wNjgtMi40OS0uOTI1QzQuODQ1IDkuOTk0IDYuNjkzIDkgNy41IDl6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblZpc1RpbWVsaW9uOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25WaXNWZWdhID0gZnVuY3Rpb24gRXVpSWNvblZpc1ZlZ2EoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yLjQxNCA4LjAzNkw0Ljg5IDEwLjUxYS41LjUgMCAwMS0uNzA3LjcwOEwxLjM1NCA4LjM4OWEuNS41IDAgMDEwLS43MDdsMi44MjgtMi44MjhhLjUuNSAwIDExLjcwNy43MDdMMi40MTQgOC4wMzZ6bTguNzY4IDIuNDc0bDIuNDc1LTIuNDc0LTIuNDc1LTIuNDc1YS41LjUgMCAwMS43MDctLjcwN2wyLjgyOSAyLjgyOGEuNS41IDAgMDEwIC43MDdsLTIuODI5IDIuODI5YS41LjUgMCAxMS0uNzA3LS43MDh6TTguNTU5IDIuNTA2YS41LjUgMCAwMS45ODEuMTlMNy40NDEgMTMuNDk0YS41LjUgMCAwMS0uOTgxLS4xOUw4LjU1OSAyLjUwNnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmlzVmVnYTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVmlzVmlzdWFsQnVpbGRlciA9IGZ1bmN0aW9uIEV1aUljb25WaXNWaXN1YWxCdWlsZGVyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS44MzcgN2MuMTEuOTMuMTY1IDEuODg2LjE2NSAyLjg2OVYxMy41YS41LjUgMCAxMS0xIDBWOS44NjlBMjMuMyAyMy4zIDAgMDA4LjgzIDdINy4yOWMtLjE5NSAxLjA0LS4yOTIgMS45ODUtLjI5MiAyLjgzNVYxMy41YS41LjUgMCAxMS0xIDBWOS44MzVjMC0uODY0LjA5Mi0xLjgwOS4yNzYtMi44MzVIMi41YS41LjUgMCAwMS0uNDk1LS41N2MuMjg1LTIuMDIzIDEuNjI2LTMuMzU4IDMuOTMxLTMuOTYgMS45NjctLjUxNCA0LjIyLS42MDYgNi43NTYtLjI3OEExLjUgMS41IDAgMDExNCAzLjY3OVY1LjVBMS41IDEuNSAwIDAxMTIuNSA3SDkuODM3em0tLjU2OS0xSDEyLjVhLjUuNSAwIDAwLjUtLjVWMy42OGEuNS41IDAgMDAtLjQzNi0uNDk3Yy0yLjQxNi0uMzExLTQuNTQtLjIyNS02LjM3NS4yNTRDNC40OTQgMy44OCAzLjQ5MSA0LjcyNCAzLjExNyA2SDkuMjY4ek0yIDEwdjMuNWEuNS41IDAgMTEtMSAwdi00YS41LjUgMCAwMS41LS41aDNhLjUuNSAwIDAxLjUuNXY0YS41LjUgMCAxMS0xIDBWMTBIMnptMTAgMy41YS41LjUgMCAxMS0xIDB2LTJhLjUuNSAwIDAxLjUtLjVoM2EuNS41IDAgMDEuNS41djJhLjUuNSAwIDExLTEgMFYxMmgtMnYxLjV6TTEuMDE2IDE2LjAyNmEuNS41IDAgMDEwLTFIMTVhLjUuNSAwIDExMCAxSDEuMDE2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaXNWaXN1YWxCdWlsZGVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Xb3JkV3JhcCA9IGZ1bmN0aW9uIEV1aUljb25Xb3JkV3JhcChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIgM2gxMnYxSDJWM3ptMCA4aDZ2MUgydi0xelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMiA3aDkuNXYuNVY3aC4wMzlsLjA4My4wMDVhMi45NTggMi45NTggMCAwMTEuMTAyLjI5OGMuMzA5LjE1NC42MzMuMzk0Ljg4Ljc2My4yNDguMzczLjM5Ni44NDcuMzk2IDEuNDM0IDAgLjU4OC0uMTQ4IDEuMDYxLS4zOTYgMS40MzRhMi4yNTcgMi4yNTcgMCAwMS0uODguNzYzIDIuOTU3IDIuOTU3IDAgMDEtMS4xODUuMzAyaC0uMDI1bC0uMDA5LjAwMWgtLjAwM3MtLjAwMiAwLS4wMDItLjV2LjVIMTF2MWwtMi0xLjUgMi0xLjV2MWguNTA2bC4wNDQtLjAwM2ExLjk1OSAxLjk1OSAwIDAwLjcyNi0uMTk1Yy4xOTEtLjA5NS4zNjctLjIzLjQ5NS0uNDIzLjEyNy0uMTkuMjI5LS40NjYuMjI5LS44NzlzLS4xMDItLjY4OS0uMjI5LS44NzlhMS4yNTYgMS4yNTYgMCAwMC0uNDk1LS40MjQgMS45NTggMS45NTggMCAwMC0uNzctLjE5N0gyVjd6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbldvcmRXcmFwOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Xb3JkV3JhcERpc2FibGVkID0gZnVuY3Rpb24gRXVpSWNvbldvcmRXcmFwRGlzYWJsZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNCAzLjVMMTIgMnYxSDJ2MWgxMHYxbDItMS41ek0xMiA5VjhIMlY3aDEwVjZsMiAxLjVMMTIgOXptMCAzdjFsMi0xLjUtMi0xLjV2MUgydjFoMTB6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbldvcmRXcmFwRGlzYWJsZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbldyZW5jaCA9IGZ1bmN0aW9uIEV1aUljb25XcmVuY2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02LjkxOCA5Ljc0Nmw0LjUzNyA0LjUzN2EyIDIgMCAxMDIuODI4LTIuODI5bC0zLjE1Ny0zLjE1NmEuNS41IDAgMDEuNzA4LS43MDhsMy4xNTYgMy4xNTdhMyAzIDAgMTEtNC4yNDMgNC4yNDNsLTQuOTQ5LTQuOTVhNS4wMDEgNS4wMDEgMCAwMS01LjIyLTcuMTA2LjUuNSAwIDAxLjgwNS0uMTM4TDMuNjc2IDUuMDlhMSAxIDAgMTAxLjQxNS0xLjQxNEwyLjc5NyAxLjM4MmEuNS41IDAgMDEuMTM4LS44MDUgNS4wMDEgNS4wMDEgMCAxMTMuOTgzIDkuMTY5ek0xLjIyNiA0LjA1NGE0LjAwMiA0LjAwMiAwIDAwNi42OTMgMy44NjUgNCA0IDAgMDAtMy44NjUtNi42OTNsMS43NDQgMS43NDNhMiAyIDAgMTEtMi44MjkgMi44MjhMMS4yMjYgNC4wNTR6bTEwLjIyOSA4LjgxNGExIDEgMCAxMTEuNDE0LTEuNDE0IDEgMSAwIDAxLTEuNDE0IDEuNDE0elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25XcmVuY2g7IiwgImltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMCBmcm9tICcuL2Fzc2V0cy9hY2Nlc3NpYmlsaXR5LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMSBmcm9tICcuL2Fzc2V0cy9hZ2dyZWdhdGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyIGZyb20gJy4vYXNzZXRzL2FsZXJ0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMyBmcm9tICcuL2Fzc2V0cy9hbmFseXplRXZlbnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0IGZyb20gJy4vYXNzZXRzL2FuYWx5emVfZXZlbnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1IGZyb20gJy4vYXNzZXRzL2Fubm90YXRpb24uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2IGZyb20gJy4vYXNzZXRzL2FwbV90cmFjZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcgZnJvbSAnLi9hc3NldHMvYXBwX2FkZF9kYXRhLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOCBmcm9tICcuL2Fzc2V0cy9hcHBfYWR2YW5jZWRfc2V0dGluZ3MuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5IGZyb20gJy4vYXNzZXRzL2FwcF9hZ2VudC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEwIGZyb20gJy4vYXNzZXRzL2FwcF9hcG0uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMSBmcm9tICcuL2Fzc2V0cy9hcHBfYXBwX3NlYXJjaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEyIGZyb20gJy4vYXNzZXRzL2FwcF9hdWRpdGJlYXQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMyBmcm9tICcuL2Fzc2V0cy9hcHBfY2FudmFzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTQgZnJvbSAnLi9hc3NldHMvYXBwX2Nhc2VzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTUgZnJvbSAnLi9hc3NldHMvYXBwX2NvZGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNiBmcm9tICcuL2Fzc2V0cy9hcHBfY29uc29sZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE3IGZyb20gJy4vYXNzZXRzL2FwcF9jcm9zc19jbHVzdGVyX3JlcGxpY2F0aW9uLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTggZnJvbSAnLi9hc3NldHMvYXBwX2Rhc2hib2FyZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE5IGZyb20gJy4vYXNzZXRzL2FwcF9kZXZ0b29scy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIwIGZyb20gJy4vYXNzZXRzL2FwcF9kaXNjb3Zlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIxIGZyb20gJy4vYXNzZXRzL2FwcF9lbXMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMiBmcm9tICcuL2Fzc2V0cy9hcHBfZmlsZWJlYXQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMyBmcm9tICcuL2Fzc2V0cy9hcHBfZmxlZXQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNCBmcm9tICcuL2Fzc2V0cy9hcHBfZ2lzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjUgZnJvbSAnLi9hc3NldHMvYXBwX2dyYXBoLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjYgZnJvbSAnLi9hc3NldHMvYXBwX2dyb2suanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNyBmcm9tICcuL2Fzc2V0cy9hcHBfaGVhcnRiZWF0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjggZnJvbSAnLi9hc3NldHMvYXBwX2luZGV4X21hbmFnZW1lbnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyOSBmcm9tICcuL2Fzc2V0cy9hcHBfaW5kZXhfcGF0dGVybi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMwIGZyb20gJy4vYXNzZXRzL2FwcF9pbmRleF9yb2xsdXAuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMSBmcm9tICcuL2Fzc2V0cy9hcHBfbGVucy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMyIGZyb20gJy4vYXNzZXRzL2FwcF9sb2dzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzMgZnJvbSAnLi9hc3NldHMvYXBwX21hbmFnZW1lbnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNCBmcm9tICcuL2Fzc2V0cy9hcHBfbWV0cmljYmVhdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM1IGZyb20gJy4vYXNzZXRzL2FwcF9tZXRyaWNzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzYgZnJvbSAnLi9hc3NldHMvYXBwX21sLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzcgZnJvbSAnLi9hc3NldHMvYXBwX21vbml0b3JpbmcuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzOCBmcm9tICcuL2Fzc2V0cy9hcHBfbm90ZWJvb2suanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzOSBmcm9tICcuL2Fzc2V0cy9hcHBfcGFja2V0YmVhdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQwIGZyb20gJy4vYXNzZXRzL2FwcF9waXBlbGluZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQxIGZyb20gJy4vYXNzZXRzL2FwcF9yZWNlbnRseV92aWV3ZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MiBmcm9tICcuL2Fzc2V0cy9hcHBfcmVwb3J0aW5nLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDMgZnJvbSAnLi9hc3NldHMvYXBwX3NhdmVkX29iamVjdHMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NCBmcm9tICcuL2Fzc2V0cy9hcHBfc2VhcmNoX3Byb2ZpbGVyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDUgZnJvbSAnLi9hc3NldHMvYXBwX3NlY3VyaXR5LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDYgZnJvbSAnLi9hc3NldHMvYXBwX3NlY3VyaXR5X2FuYWx5dGljcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ3IGZyb20gJy4vYXNzZXRzL2FwcF9zcGFjZXMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0OCBmcm9tICcuL2Fzc2V0cy9hcHBfc3FsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDkgZnJvbSAnLi9hc3NldHMvYXBwX3RpbWVsaW9uLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTAgZnJvbSAnLi9hc3NldHMvYXBwX3VwZ3JhZGVfYXNzaXN0YW50LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTEgZnJvbSAnLi9hc3NldHMvYXBwX3VwdGltZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUyIGZyb20gJy4vYXNzZXRzL2FwcF91c2Vyc19yb2xlcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUzIGZyb20gJy4vYXNzZXRzL2FwcF92aXN1YWxpemUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NCBmcm9tICcuL2Fzc2V0cy9hcHBfd2F0Y2hlcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU1IGZyb20gJy4vYXNzZXRzL2FwcF93b3JrcGxhY2Vfc2VhcmNoLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTYgZnJvbSAnLi9hc3NldHMvYXBwcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU3IGZyb20gJy4vYXNzZXRzL2Fycm93RW5kLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTggZnJvbSAnLi9hc3NldHMvYXJyb3dTdGFydC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU5IGZyb20gJy4vYXNzZXRzL2Fycm93X2Rvd24uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MCBmcm9tICcuL2Fzc2V0cy9hcnJvd19sZWZ0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjEgZnJvbSAnLi9hc3NldHMvYXJyb3dfcmlnaHQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MiBmcm9tICcuL2Fzc2V0cy9hcnJvd191cC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYzIGZyb20gJy4vYXNzZXRzL2FzdGVyaXNrLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjQgZnJvbSAnLi9hc3NldHMvYmVha2VyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjUgZnJvbSAnLi9hc3NldHMvYmVsbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY2IGZyb20gJy4vYXNzZXRzL2JlbGxTbGFzaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY3IGZyb20gJy4vYXNzZXRzL2JvbHQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2OCBmcm9tICcuL2Fzc2V0cy9ib3hlc19ob3Jpem9udGFsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjkgZnJvbSAnLi9hc3NldHMvYm94ZXNfdmVydGljYWwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MCBmcm9tICcuL2Fzc2V0cy9icmFuY2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MSBmcm9tICcuL2Fzc2V0cy9icmFuY2hVc2VyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzIgZnJvbSAnLi9hc3NldHMvYnJvb20uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MyBmcm9tICcuL2Fzc2V0cy9icnVzaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc0IGZyb20gJy4vYXNzZXRzL2J1Zy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc1IGZyb20gJy4vYXNzZXRzL2J1bGxzZXllLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzYgZnJvbSAnLi9hc3NldHMvY2FsZW5kYXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NyBmcm9tICcuL2Fzc2V0cy9jaGVjay5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc4IGZyb20gJy4vYXNzZXRzL2NoZWNrSW5DaXJjbGVGaWxsZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3OSBmcm9tICcuL2Fzc2V0cy9jaGVlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgwIGZyb20gJy4vYXNzZXRzL2Nsb2NrLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODEgZnJvbSAnLi9hc3NldHMvY2xvdWREcml6emxlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODIgZnJvbSAnLi9hc3NldHMvY2xvdWRTdG9ybXkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MyBmcm9tICcuL2Fzc2V0cy9jbG91ZFN1bm55LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODQgZnJvbSAnLi9hc3NldHMvY2x1c3Rlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg1IGZyb20gJy4vYXNzZXRzL2NvbG9yLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODYgZnJvbSAnLi9hc3NldHMvY29tcHV0ZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg3IGZyb20gJy4vYXNzZXRzL2NvbnNvbGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4OCBmcm9tICcuL2Fzc2V0cy9jb250YWluZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4OSBmcm9tICcuL2Fzc2V0cy9jb250aW51aXR5QWJvdmUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MCBmcm9tICcuL2Fzc2V0cy9jb250aW51aXR5QWJvdmVCZWxvdy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkxIGZyb20gJy4vYXNzZXRzL2NvbnRpbnVpdHlCZWxvdy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkyIGZyb20gJy4vYXNzZXRzL2NvbnRpbnVpdHlXaXRoaW4uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MyBmcm9tICcuL2Fzc2V0cy9jb250cm9sc19ob3Jpem9udGFsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTQgZnJvbSAnLi9hc3NldHMvY29udHJvbHNfdmVydGljYWwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5NSBmcm9tICcuL2Fzc2V0cy9jb3B5LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTYgZnJvbSAnLi9hc3NldHMvY29weV9jbGlwYm9hcmQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5NyBmcm9tICcuL2Fzc2V0cy9jcm9zcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk4IGZyb20gJy4vYXNzZXRzL2Nyb3NzSW5BQ2lyY2xlRmlsbGVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTkgZnJvbSAnLi9hc3NldHMvY3Jvc3NoYWlycy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEwMCBmcm9tICcuL2Fzc2V0cy9jdXJyZW5jeS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEwMSBmcm9tICcuL2Fzc2V0cy9jdXQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDIgZnJvbSAnLi9hc3NldHMvZGF0YWJhc2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDMgZnJvbSAnLi9hc3NldHMvZGVza3RvcC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEwNCBmcm9tICcuL2Fzc2V0cy9kb2N1bWVudC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEwNSBmcm9tICcuL2Fzc2V0cy9kb2N1bWVudEVkaXQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDYgZnJvbSAnLi9hc3NldHMvZG9jdW1lbnRhdGlvbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEwNyBmcm9tICcuL2Fzc2V0cy9kb2N1bWVudHMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDggZnJvbSAnLi9hc3NldHMvZG90LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTA5IGZyb20gJy4vYXNzZXRzL2RvdWJsZUFycm93TGVmdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTExMCBmcm9tICcuL2Fzc2V0cy9kb3VibGVBcnJvd1JpZ2h0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTExIGZyb20gJy4vYXNzZXRzL2Rvd25sb2FkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTEyIGZyb20gJy4vYXNzZXRzL2VkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTEzIGZyb20gJy4vYXNzZXRzL2VkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTExNCBmcm9tICcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25Cb3R0b20uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMTUgZnJvbSAnLi9hc3NldHMvZWRpdG9ySXRlbUFsaWduQ2VudGVyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTE2IGZyb20gJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnbkxlZnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMTcgZnJvbSAnLi9hc3NldHMvZWRpdG9ySXRlbUFsaWduTWlkZGxlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTE4IGZyb20gJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnblJpZ2h0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTE5IGZyb20gJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnblRvcC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEyMCBmcm9tICcuL2Fzc2V0cy9lZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMjEgZnJvbSAnLi9hc3NldHMvZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEyMiBmcm9tICcuL2Fzc2V0cy9lZGl0b3JQb3NpdGlvblRvcExlZnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMjMgZnJvbSAnLi9hc3NldHMvZWRpdG9yUG9zaXRpb25Ub3BSaWdodC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEyNCBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfYWxpZ25fY2VudGVyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTI1IGZyb20gJy4vYXNzZXRzL2VkaXRvcl9hbGlnbl9sZWZ0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTI2IGZyb20gJy4vYXNzZXRzL2VkaXRvcl9hbGlnbl9yaWdodC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEyNyBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfYm9sZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEyOCBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfY2hlY2tsaXN0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTI5IGZyb20gJy4vYXNzZXRzL2VkaXRvcl9jb2RlX2Jsb2NrLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTMwIGZyb20gJy4vYXNzZXRzL2VkaXRvcl9jb21tZW50LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTMxIGZyb20gJy4vYXNzZXRzL2VkaXRvcl9oZWFkaW5nLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTMyIGZyb20gJy4vYXNzZXRzL2VkaXRvcl9pdGFsaWMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMzMgZnJvbSAnLi9hc3NldHMvZWRpdG9yX2xpbmsuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMzQgZnJvbSAnLi9hc3NldHMvZWRpdG9yX29yZGVyZWRfbGlzdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEzNSBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfcmVkby5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEzNiBmcm9tICcuL2Fzc2V0cy9lZGl0b3Jfc3RyaWtlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTM3IGZyb20gJy4vYXNzZXRzL2VkaXRvcl90YWJsZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEzOCBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfdW5kZXJsaW5lLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTM5IGZyb20gJy4vYXNzZXRzL2VkaXRvcl91bmRvLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTQwIGZyb20gJy4vYXNzZXRzL2VkaXRvcl91bm9yZGVyZWRfbGlzdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE0MSBmcm9tICcuL2Fzc2V0cy9lbWFpbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE0MiBmcm9tICcuL2Fzc2V0cy9lbXB0eS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE0MyBmcm9tICcuL2Fzc2V0cy9lcWwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNDQgZnJvbSAnLi9hc3NldHMvZXJhc2VyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTQ1IGZyb20gJy4vYXNzZXRzL2V4aXQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNDYgZnJvbSAnLi9hc3NldHMvZXhwYW5kLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTQ3IGZyb20gJy4vYXNzZXRzL2V4cGFuZE1pbmkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNDggZnJvbSAnLi9hc3NldHMvZXhwb3J0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTQ5IGZyb20gJy4vYXNzZXRzL2V5ZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE1MCBmcm9tICcuL2Fzc2V0cy9leWVfY2xvc2VkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTUxIGZyb20gJy4vYXNzZXRzL2ZhY2VfaGFwcHkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNTIgZnJvbSAnLi9hc3NldHMvZmFjZV9uZXV0cmFsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTUzIGZyb20gJy4vYXNzZXRzL2ZhY2Vfc2FkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTU0IGZyb20gJy4vYXNzZXRzL2ZpbHRlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE1NSBmcm9tICcuL2Fzc2V0cy9mbGFnLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTU2IGZyb20gJy4vYXNzZXRzL2ZvbGQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNTcgZnJvbSAnLi9hc3NldHMvZm9sZGVyX2NoZWNrLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTU4IGZyb20gJy4vYXNzZXRzL2ZvbGRlcl9jbG9zZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNTkgZnJvbSAnLi9hc3NldHMvZm9sZGVyX2V4Y2xhbWF0aW9uLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTYwIGZyb20gJy4vYXNzZXRzL2ZvbGRlcl9vcGVuLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTYxIGZyb20gJy4vYXNzZXRzL2ZyYW1lTmV4dC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE2MiBmcm9tICcuL2Fzc2V0cy9mcmFtZVByZXZpb3VzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTYzIGZyb20gJy4vYXNzZXRzL2Z1bGxTY3JlZW5FeGl0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTY0IGZyb20gJy4vYXNzZXRzL2Z1bGxfc2NyZWVuLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTY1IGZyb20gJy4vYXNzZXRzL2Z1bmN0aW9uLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTY2IGZyb20gJy4vYXNzZXRzL2dlYXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNjcgZnJvbSAnLi9hc3NldHMvZ2xhc3Nlcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE2OCBmcm9tICcuL2Fzc2V0cy9nbG9iZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE2OSBmcm9tICcuL2Fzc2V0cy9ncmFiLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTcwIGZyb20gJy4vYXNzZXRzL2dyYWJfaG9yaXpvbnRhbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE3MSBmcm9tICcuL2Fzc2V0cy9ncmlkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTcyIGZyb20gJy4vYXNzZXRzL2hlYXJ0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTczIGZyb20gJy4vYXNzZXRzL2hlYXRtYXAuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNzQgZnJvbSAnLi9hc3NldHMvaGVscC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE3NSBmcm9tICcuL2Fzc2V0cy9ob21lLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTc2IGZyb20gJy4vYXNzZXRzL2lJbkNpcmNsZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE3NyBmcm9tICcuL2Fzc2V0cy9pbWFnZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE3OCBmcm9tICcuL2Fzc2V0cy9pbXBvcnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNzkgZnJvbSAnLi9hc3NldHMvaW5kZXhfY2xvc2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxODAgZnJvbSAnLi9hc3NldHMvaW5kZXhfZWRpdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE4MSBmcm9tICcuL2Fzc2V0cy9pbmRleF9mbHVzaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE4MiBmcm9tICcuL2Fzc2V0cy9pbmRleF9tYXBwaW5nLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTgzIGZyb20gJy4vYXNzZXRzL2luZGV4X29wZW4uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxODQgZnJvbSAnLi9hc3NldHMvaW5kZXhfcnVudGltZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE4NSBmcm9tICcuL2Fzc2V0cy9pbmRleF9zZXR0aW5ncy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE4NiBmcm9tICcuL2Fzc2V0cy9pbnB1dE91dHB1dC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE4NyBmcm9tICcuL2Fzc2V0cy9pbnNwZWN0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTg4IGZyb20gJy4vYXNzZXRzL2ludmVydC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE4OSBmcm9tICcuL2Fzc2V0cy9pcC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE5MCBmcm9tICcuL2Fzc2V0cy9rZXlib2FyZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE5MSBmcm9tICcuL2Fzc2V0cy9rcWxfZmllbGQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxOTIgZnJvbSAnLi9hc3NldHMva3FsX2Z1bmN0aW9uLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTkzIGZyb20gJy4vYXNzZXRzL2txbF9vcGVyYW5kLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTk0IGZyb20gJy4vYXNzZXRzL2txbF9zZWxlY3Rvci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE5NSBmcm9tICcuL2Fzc2V0cy9rcWxfdmFsdWUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxOTYgZnJvbSAnLi9hc3NldHMva3ViZXJuZXRlc05vZGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxOTcgZnJvbSAnLi9hc3NldHMva3ViZXJuZXRlc1BvZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE5OCBmcm9tICcuL2Fzc2V0cy9sYXllcnMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxOTkgZnJvbSAnLi9hc3NldHMvbGV0dGVyaW5nLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjAwIGZyb20gJy4vYXNzZXRzL2xpbmVEYXNoZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMDEgZnJvbSAnLi9hc3NldHMvbGluZURvdHRlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIwMiBmcm9tICcuL2Fzc2V0cy9saW5lU29saWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMDMgZnJvbSAnLi9hc3NldHMvbGluay5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIwNCBmcm9tICcuL2Fzc2V0cy9saXN0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjA1IGZyb20gJy4vYXNzZXRzL2xpc3RfYWRkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjA2IGZyb20gJy4vYXNzZXRzL2xvY2suanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMDcgZnJvbSAnLi9hc3NldHMvbG9ja09wZW4uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMDggZnJvbSAnLi9hc3NldHMvbG9nb19hZXJvc3Bpa2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMDkgZnJvbSAnLi9hc3NldHMvbG9nb19hcGFjaGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMTAgZnJvbSAnLi9hc3NldHMvbG9nb19hcHBfc2VhcmNoLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjExIGZyb20gJy4vYXNzZXRzL2xvZ29fYXdzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjEyIGZyb20gJy4vYXNzZXRzL2xvZ29fYXdzX21vbm8uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMTMgZnJvbSAnLi9hc3NldHMvbG9nb19henVyZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIxNCBmcm9tICcuL2Fzc2V0cy9sb2dvX2F6dXJlX21vbm8uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMTUgZnJvbSAnLi9hc3NldHMvbG9nb19iZWF0cy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIxNiBmcm9tICcuL2Fzc2V0cy9sb2dvX2J1c2luZXNzX2FuYWx5dGljcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIxNyBmcm9tICcuL2Fzc2V0cy9sb2dvX2NlcGguanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMTggZnJvbSAnLi9hc3NldHMvbG9nb19jbG91ZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIxOSBmcm9tICcuL2Fzc2V0cy9sb2dvX2Nsb3VkX2VjZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIyMCBmcm9tICcuL2Fzc2V0cy9sb2dvX2NvZGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMjEgZnJvbSAnLi9hc3NldHMvbG9nb19jb2Rlc2FuZGJveC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIyMiBmcm9tICcuL2Fzc2V0cy9sb2dvX2NvdWNoYmFzZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIyMyBmcm9tICcuL2Fzc2V0cy9sb2dvX2RvY2tlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIyNCBmcm9tICcuL2Fzc2V0cy9sb2dvX2Ryb3B3aXphcmQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMjUgZnJvbSAnLi9hc3NldHMvbG9nb19lbGFzdGljLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjI2IGZyb20gJy4vYXNzZXRzL2xvZ29fZWxhc3RpY19zdGFjay5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIyNyBmcm9tICcuL2Fzc2V0cy9sb2dvX2VsYXN0aWNzZWFyY2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMjggZnJvbSAnLi9hc3NldHMvbG9nb19lbnRlcnByaXNlX3NlYXJjaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIyOSBmcm9tICcuL2Fzc2V0cy9sb2dvX2V0Y2QuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMzAgZnJvbSAnLi9hc3NldHMvbG9nb19nY3AuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMzEgZnJvbSAnLi9hc3NldHMvbG9nb19nY3BfbW9uby5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIzMiBmcm9tICcuL2Fzc2V0cy9sb2dvX2dpdGh1Yi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIzMyBmcm9tICcuL2Fzc2V0cy9sb2dvX2dtYWlsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjM0IGZyb20gJy4vYXNzZXRzL2xvZ29fZ29sYW5nLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjM1IGZyb20gJy4vYXNzZXRzL2xvZ29fZ29vZ2xlX2cuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMzYgZnJvbSAnLi9hc3NldHMvbG9nb19oYXByb3h5LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjM3IGZyb20gJy4vYXNzZXRzL2xvZ29faWJtLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjM4IGZyb20gJy4vYXNzZXRzL2xvZ29faWJtX21vbm8uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMzkgZnJvbSAnLi9hc3NldHMvbG9nb19rYWZrYS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI0MCBmcm9tICcuL2Fzc2V0cy9sb2dvX2tpYmFuYS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI0MSBmcm9tICcuL2Fzc2V0cy9sb2dvX2t1YmVybmV0ZXMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNDIgZnJvbSAnLi9hc3NldHMvbG9nb19sb2dnaW5nLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjQzIGZyb20gJy4vYXNzZXRzL2xvZ29fbG9nc3Rhc2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNDQgZnJvbSAnLi9hc3NldHMvbG9nb19tYXBzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjQ1IGZyb20gJy4vYXNzZXRzL2xvZ29fbWVtY2FjaGVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjQ2IGZyb20gJy4vYXNzZXRzL2xvZ29fbWV0cmljcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI0NyBmcm9tICcuL2Fzc2V0cy9sb2dvX21vbmdvZGIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNDggZnJvbSAnLi9hc3NldHMvbG9nb19teXNxbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI0OSBmcm9tICcuL2Fzc2V0cy9sb2dvX25naW54LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjUwIGZyb20gJy4vYXNzZXRzL2xvZ29fb2JzZXJ2YWJpbGl0eS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI1MSBmcm9tICcuL2Fzc2V0cy9sb2dvX29zcXVlcnkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNTIgZnJvbSAnLi9hc3NldHMvbG9nb19waHAuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNTMgZnJvbSAnLi9hc3NldHMvbG9nb19wb3N0Z3Jlcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI1NCBmcm9tICcuL2Fzc2V0cy9sb2dvX3Byb21ldGhldXMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNTUgZnJvbSAnLi9hc3NldHMvbG9nb19yYWJiaXRtcS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI1NiBmcm9tICcuL2Fzc2V0cy9sb2dvX3JlZGlzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjU3IGZyb20gJy4vYXNzZXRzL2xvZ29fc2VjdXJpdHkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNTggZnJvbSAnLi9hc3NldHMvbG9nb19zaXRlX3NlYXJjaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI1OSBmcm9tICcuL2Fzc2V0cy9sb2dvX3NrZXRjaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI2MCBmcm9tICcuL2Fzc2V0cy9sb2dvX3NsYWNrLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjYxIGZyb20gJy4vYXNzZXRzL2xvZ29fdXB0aW1lLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjYyIGZyb20gJy4vYXNzZXRzL2xvZ29fd2ViaG9vay5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI2MyBmcm9tICcuL2Fzc2V0cy9sb2dvX3dpbmRvd3MuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNjQgZnJvbSAnLi9hc3NldHMvbG9nb193b3JrcGxhY2Vfc2VhcmNoLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjY1IGZyb20gJy4vYXNzZXRzL2xvZ3N0YXNoX2ZpbHRlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI2NiBmcm9tICcuL2Fzc2V0cy9sb2dzdGFzaF9pZi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI2NyBmcm9tICcuL2Fzc2V0cy9sb2dzdGFzaF9pbnB1dC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI2OCBmcm9tICcuL2Fzc2V0cy9sb2dzdGFzaF9vdXRwdXQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNjkgZnJvbSAnLi9hc3NldHMvbG9nc3Rhc2hfcXVldWUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNzAgZnJvbSAnLi9hc3NldHMvbWFnbmV0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjcxIGZyb20gJy4vYXNzZXRzL21hZ25pZnlXaXRoRXhjbGFtYXRpb24uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNzIgZnJvbSAnLi9hc3NldHMvbWFnbmlmeVdpdGhNaW51cy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI3MyBmcm9tICcuL2Fzc2V0cy9tYWduaWZ5V2l0aFBsdXMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNzQgZnJvbSAnLi9hc3NldHMvbWFwX21hcmtlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI3NSBmcm9tICcuL2Fzc2V0cy9tZW1vcnkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNzYgZnJvbSAnLi9hc3NldHMvbWVudS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI3NyBmcm9tICcuL2Fzc2V0cy9tZW51RG93bi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI3OCBmcm9tICcuL2Fzc2V0cy9tZW51TGVmdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI3OSBmcm9tICcuL2Fzc2V0cy9tZW51UmlnaHQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyODAgZnJvbSAnLi9hc3NldHMvbWVudVVwLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjgxIGZyb20gJy4vYXNzZXRzL21lcmdlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjgyIGZyb20gJy4vYXNzZXRzL21pbmltaXplLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjgzIGZyb20gJy4vYXNzZXRzL21pbnVzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjg0IGZyb20gJy4vYXNzZXRzL21pbnVzX2luX2NpcmNsZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI4NSBmcm9tICcuL2Fzc2V0cy9taW51c19pbl9jaXJjbGVfZmlsbGVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjg2IGZyb20gJy4vYXNzZXRzL21sX2NsYXNzaWZpY2F0aW9uX2pvYi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI4NyBmcm9tICcuL2Fzc2V0cy9tbF9jcmVhdGVfYWR2YW5jZWRfam9iLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjg4IGZyb20gJy4vYXNzZXRzL21sX2NyZWF0ZV9tdWx0aV9tZXRyaWNfam9iLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjg5IGZyb20gJy4vYXNzZXRzL21sX2NyZWF0ZV9wb3B1bGF0aW9uX2pvYi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI5MCBmcm9tICcuL2Fzc2V0cy9tbF9jcmVhdGVfc2luZ2xlX21ldHJpY19qb2IuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyOTEgZnJvbSAnLi9hc3NldHMvbWxfZGF0YV92aXN1YWxpemVyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjkyIGZyb20gJy4vYXNzZXRzL21sX291dGxpZXJfZGV0ZWN0aW9uX2pvYi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI5MyBmcm9tICcuL2Fzc2V0cy9tbF9yZWdyZXNzaW9uX2pvYi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI5NCBmcm9tICcuL2Fzc2V0cy9tb2JpbGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyOTUgZnJvbSAnLi9hc3NldHMvbW9vbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI5NiBmcm9tICcuL2Fzc2V0cy9uYW1lc3BhY2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyOTcgZnJvbSAnLi9hc3NldHMvbmVzdGVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjk4IGZyb20gJy4vYXNzZXRzL25vZGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyOTkgZnJvbSAnLi9hc3NldHMvbnVtYmVyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzAwIGZyb20gJy4vYXNzZXRzL29mZmxpbmUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMDEgZnJvbSAnLi9hc3NldHMvb25saW5lLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzAyIGZyb20gJy4vYXNzZXRzL3BhY2thZ2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMDMgZnJvbSAnLi9hc3NldHMvcGFnZVNlbGVjdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMwNCBmcm9tICcuL2Fzc2V0cy9wYWdlc1NlbGVjdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMwNSBmcm9tICcuL2Fzc2V0cy9wYWludC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMwNiBmcm9tICcuL2Fzc2V0cy9wYXBlcl9jbGlwLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzA3IGZyb20gJy4vYXNzZXRzL3BhcnRpYWwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMDggZnJvbSAnLi9hc3NldHMvcGF1c2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMDkgZnJvbSAnLi9hc3NldHMvcGF5bWVudC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMxMCBmcm9tICcuL2Fzc2V0cy9wZW5jaWwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMTEgZnJvbSAnLi9hc3NldHMvcGVyY2VudC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMxMiBmcm9tICcuL2Fzc2V0cy9waW4uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMTMgZnJvbSAnLi9hc3NldHMvcGluX2ZpbGxlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMxNCBmcm9tICcuL2Fzc2V0cy9wbGF5LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzE1IGZyb20gJy4vYXNzZXRzL3BsYXlGaWxsZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMTYgZnJvbSAnLi9hc3NldHMvcGx1cy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMxNyBmcm9tICcuL2Fzc2V0cy9wbHVzX2luX2NpcmNsZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMxOCBmcm9tICcuL2Fzc2V0cy9wbHVzX2luX2NpcmNsZV9maWxsZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMTkgZnJvbSAnLi9hc3NldHMvcG9wb3V0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzIwIGZyb20gJy4vYXNzZXRzL3B1c2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMjEgZnJvbSAnLi9hc3NldHMvcXVlc3Rpb25faW5fY2lyY2xlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzIyIGZyb20gJy4vYXNzZXRzL3F1b3RlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzIzIGZyb20gJy4vYXNzZXRzL3JlZnJlc2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMjQgZnJvbSAnLi9hc3NldHMvcmVwb3J0ZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMjUgZnJvbSAnLi9hc3NldHMvcmV0dXJuX2tleS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMyNiBmcm9tICcuL2Fzc2V0cy9zYXZlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzI3IGZyb20gJy4vYXNzZXRzL3NjYWxlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzI4IGZyb20gJy4vYXNzZXRzL3NlYXJjaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMyOSBmcm9tICcuL2Fzc2V0cy9zZWN1cml0eVNpZ25hbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMzMCBmcm9tICcuL2Fzc2V0cy9zZWN1cml0eVNpZ25hbERldGVjdGVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzMxIGZyb20gJy4vYXNzZXRzL3NlY3VyaXR5U2lnbmFsUmVzb2x2ZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMzIgZnJvbSAnLi9hc3NldHMvc2Vzc2lvblZpZXdlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMzMyBmcm9tICcuL2Fzc2V0cy9zaGFyZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMzNCBmcm9tICcuL2Fzc2V0cy9zaGFyZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMzNSBmcm9tICcuL2Fzc2V0cy9zbm93Zmxha2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMzYgZnJvbSAnLi9hc3NldHMvc29ydExlZnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMzcgZnJvbSAnLi9hc3NldHMvc29ydFJpZ2h0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzM4IGZyb20gJy4vYXNzZXRzL3NvcnRfZG93bi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMzOSBmcm9tICcuL2Fzc2V0cy9zb3J0X3VwLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzQwIGZyb20gJy4vYXNzZXRzL3NvcnRhYmxlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzQxIGZyb20gJy4vYXNzZXRzL3N0YXJQbHVzRW1wdHkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNDIgZnJvbSAnLi9hc3NldHMvc3RhclBsdXNGaWxsZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNDMgZnJvbSAnLi9hc3NldHMvc3Rhcl9lbXB0eS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM0NCBmcm9tICcuL2Fzc2V0cy9zdGFyX2VtcHR5X3NwYWNlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzQ1IGZyb20gJy4vYXNzZXRzL3N0YXJfZmlsbGVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzQ2IGZyb20gJy4vYXNzZXRzL3N0YXJfZmlsbGVkX3NwYWNlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzQ3IGZyb20gJy4vYXNzZXRzL3N0YXJfbWludXNfZW1wdHkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNDggZnJvbSAnLi9hc3NldHMvc3Rhcl9taW51c19maWxsZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNDkgZnJvbSAnLi9hc3NldHMvc3RhdHMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNTAgZnJvbSAnLi9hc3NldHMvc3RvcC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM1MSBmcm9tICcuL2Fzc2V0cy9zdG9wX2ZpbGxlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM1MiBmcm9tICcuL2Fzc2V0cy9zdG9wX3NsYXNoLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzUzIGZyb20gJy4vYXNzZXRzL3N0b3JhZ2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNTQgZnJvbSAnLi9hc3NldHMvc3RyaW5nLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzU1IGZyb20gJy4vYXNzZXRzL3N1Ym1vZHVsZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM1NiBmcm9tICcuL2Fzc2V0cy9zdW4uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNTcgZnJvbSAnLi9hc3NldHMvc3dhdGNoX2lucHV0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzU4IGZyb20gJy4vYXNzZXRzL3N5bWxpbmsuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNTkgZnJvbSAnLi9hc3NldHMvdGFibGVPZkNvbnRlbnRzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzYwIGZyb20gJy4vYXNzZXRzL3RhYmxlX2RlbnNpdHlfY29tcGFjdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM2MSBmcm9tICcuL2Fzc2V0cy90YWJsZV9kZW5zaXR5X2V4cGFuZGVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzYyIGZyb20gJy4vYXNzZXRzL3RhYmxlX2RlbnNpdHlfbm9ybWFsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzYzIGZyb20gJy4vYXNzZXRzL3RhZy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM2NCBmcm9tICcuL2Fzc2V0cy90ZWFyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzY1IGZyb20gJy4vYXNzZXRzL3RlbXBlcmF0dXJlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzY2IGZyb20gJy4vYXNzZXRzL3RpbWVSZWZyZXNoLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzY3IGZyb20gJy4vYXNzZXRzL3RpbWVsaW5lLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzY4IGZyb20gJy4vYXNzZXRzL3RpbWVzbGlkZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNjkgZnJvbSAnLi9hc3NldHMvdG9rZW5BbGlhcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM3MCBmcm9tICcuL2Fzc2V0cy90b2tlbkFubm90YXRpb24uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNzEgZnJvbSAnLi9hc3NldHMvdG9rZW5BcnJheS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM3MiBmcm9tICcuL2Fzc2V0cy90b2tlbkJpbmFyeS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM3MyBmcm9tICcuL2Fzc2V0cy90b2tlbkJvb2xlYW4uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNzQgZnJvbSAnLi9hc3NldHMvdG9rZW5DbGFzcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM3NSBmcm9tICcuL2Fzc2V0cy90b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNzYgZnJvbSAnLi9hc3NldHMvdG9rZW5Db25zdGFudC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM3NyBmcm9tICcuL2Fzc2V0cy90b2tlbkRhdGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNzggZnJvbSAnLi9hc3NldHMvdG9rZW5EZW5zZVZlY3Rvci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM3OSBmcm9tICcuL2Fzc2V0cy90b2tlbkVsZW1lbnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzODAgZnJvbSAnLi9hc3NldHMvdG9rZW5FbnVtLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzgxIGZyb20gJy4vYXNzZXRzL3Rva2VuRW51bU1lbWJlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM4MiBmcm9tICcuL2Fzc2V0cy90b2tlbkV2ZW50LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzgzIGZyb20gJy4vYXNzZXRzL3Rva2VuRXhjZXB0aW9uLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzg0IGZyb20gJy4vYXNzZXRzL3Rva2VuRmllbGQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzODUgZnJvbSAnLi9hc3NldHMvdG9rZW5GaWxlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzg2IGZyb20gJy4vYXNzZXRzL3Rva2VuRmxhdHRlbmVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzg3IGZyb20gJy4vYXNzZXRzL3Rva2VuRnVuY3Rpb24uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzODggZnJvbSAnLi9hc3NldHMvdG9rZW5HZW8uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzODkgZnJvbSAnLi9hc3NldHMvdG9rZW5IaXN0b2dyYW0uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzOTAgZnJvbSAnLi9hc3NldHMvdG9rZW5JUC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM5MSBmcm9tICcuL2Fzc2V0cy90b2tlbkludGVyZmFjZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM5MiBmcm9tICcuL2Fzc2V0cy90b2tlbkpvaW4uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzOTMgZnJvbSAnLi9hc3NldHMvdG9rZW5LZXkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzOTQgZnJvbSAnLi9hc3NldHMvdG9rZW5LZXl3b3JkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzk1IGZyb20gJy4vYXNzZXRzL3Rva2VuTWV0aG9kLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzk2IGZyb20gJy4vYXNzZXRzL3Rva2VuTWV0cmljQ291bnRlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM5NyBmcm9tICcuL2Fzc2V0cy90b2tlbk1ldHJpY0dhdWdlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzk4IGZyb20gJy4vYXNzZXRzL3Rva2VuTW9kdWxlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzk5IGZyb20gJy4vYXNzZXRzL3Rva2VuTmFtZXNwYWNlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDAwIGZyb20gJy4vYXNzZXRzL3Rva2VuTmVzdGVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDAxIGZyb20gJy4vYXNzZXRzL3Rva2VuTnVsbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQwMiBmcm9tICcuL2Fzc2V0cy90b2tlbk51bWJlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQwMyBmcm9tICcuL2Fzc2V0cy90b2tlbk9iamVjdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQwNCBmcm9tICcuL2Fzc2V0cy90b2tlbk9wZXJhdG9yLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDA1IGZyb20gJy4vYXNzZXRzL3Rva2VuUGFja2FnZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQwNiBmcm9tICcuL2Fzc2V0cy90b2tlblBhcmFtZXRlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQwNyBmcm9tICcuL2Fzc2V0cy90b2tlblBlcmNvbGF0b3IuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MDggZnJvbSAnLi9hc3NldHMvdG9rZW5Qcm9wZXJ0eS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQwOSBmcm9tICcuL2Fzc2V0cy90b2tlblJhbmdlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDEwIGZyb20gJy4vYXNzZXRzL3Rva2VuUmFua0ZlYXR1cmUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MTEgZnJvbSAnLi9hc3NldHMvdG9rZW5SYW5rRmVhdHVyZXMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MTIgZnJvbSAnLi9hc3NldHMvdG9rZW5SZXBvLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDEzIGZyb20gJy4vYXNzZXRzL3Rva2VuU2VhcmNoVHlwZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQxNCBmcm9tICcuL2Fzc2V0cy90b2tlblNoYXBlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDE1IGZyb20gJy4vYXNzZXRzL3Rva2VuU3RyaW5nLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDE2IGZyb20gJy4vYXNzZXRzL3Rva2VuU3RydWN0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDE3IGZyb20gJy4vYXNzZXRzL3Rva2VuU3ltYm9sLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDE4IGZyb20gJy4vYXNzZXRzL3Rva2VuVGFnLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDE5IGZyb20gJy4vYXNzZXRzL3Rva2VuVGV4dC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQyMCBmcm9tICcuL2Fzc2V0cy90b2tlblRva2VuQ291bnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MjEgZnJvbSAnLi9hc3NldHMvdG9rZW5WYXJpYWJsZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQyMiBmcm9tICcuL2Fzc2V0cy90cmFpbmluZy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQyMyBmcm9tICcuL2Fzc2V0cy90cmFzaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQyNCBmcm9tICcuL2Fzc2V0cy91bmZvbGQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MjUgZnJvbSAnLi9hc3NldHMvdW5saW5rLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDI2IGZyb20gJy4vYXNzZXRzL3VzZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MjcgZnJvbSAnLi9hc3NldHMvdXNlckF2YXRhci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQyOCBmcm9tICcuL2Fzc2V0cy91c2Vycy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQyOSBmcm9tICcuL2Fzc2V0cy92ZWN0b3IuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MzAgZnJvbSAnLi9hc3NldHMvdmlkZW9QbGF5ZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MzEgZnJvbSAnLi9hc3NldHMvdmlzX2FyZWEuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MzIgZnJvbSAnLi9hc3NldHMvdmlzX2FyZWFfc3RhY2tlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQzMyBmcm9tICcuL2Fzc2V0cy92aXNfYmFyX2hvcml6b250YWwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MzQgZnJvbSAnLi9hc3NldHMvdmlzX2Jhcl9ob3Jpem9udGFsX3N0YWNrZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MzUgZnJvbSAnLi9hc3NldHMvdmlzX2Jhcl92ZXJ0aWNhbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQzNiBmcm9tICcuL2Fzc2V0cy92aXNfYmFyX3ZlcnRpY2FsX3N0YWNrZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MzcgZnJvbSAnLi9hc3NldHMvdmlzX2dhdWdlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDM4IGZyb20gJy4vYXNzZXRzL3Zpc19nb2FsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDM5IGZyb20gJy4vYXNzZXRzL3Zpc19saW5lLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDQwIGZyb20gJy4vYXNzZXRzL3Zpc19tYXBfY29vcmRpbmF0ZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ0MSBmcm9tICcuL2Fzc2V0cy92aXNfbWFwX3JlZ2lvbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ0MiBmcm9tICcuL2Fzc2V0cy92aXNfbWV0cmljLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDQzIGZyb20gJy4vYXNzZXRzL3Zpc19waWUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NDQgZnJvbSAnLi9hc3NldHMvdmlzX3RhYmxlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDQ1IGZyb20gJy4vYXNzZXRzL3Zpc190YWdfY2xvdWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NDYgZnJvbSAnLi9hc3NldHMvdmlzX3RleHQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NDcgZnJvbSAnLi9hc3NldHMvdmlzX3RpbWVsaW9uLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDQ4IGZyb20gJy4vYXNzZXRzL3Zpc192ZWdhLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDQ5IGZyb20gJy4vYXNzZXRzL3Zpc192aXN1YWxfYnVpbGRlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ1MCBmcm9tICcuL2Fzc2V0cy93b3JkV3JhcC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ1MSBmcm9tICcuL2Fzc2V0cy93b3JkV3JhcERpc2FibGVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDUyIGZyb20gJy4vYXNzZXRzL3dyZW5jaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ1MyBmcm9tICcuL2Fzc2V0cy9hY2Nlc3NpYmlsaXR5JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDU0IGZyb20gJy4vYXNzZXRzL2FnZ3JlZ2F0ZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ1NSBmcm9tICcuL2Fzc2V0cy9hbGVydCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ1NiBmcm9tICcuL2Fzc2V0cy9hbmFseXplRXZlbnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NTcgZnJvbSAnLi9hc3NldHMvYW5hbHl6ZV9ldmVudCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ1OCBmcm9tICcuL2Fzc2V0cy9hbm5vdGF0aW9uJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDU5IGZyb20gJy4vYXNzZXRzL2FwbV90cmFjZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ2MCBmcm9tICcuL2Fzc2V0cy9hcHBfYWRkX2RhdGEnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NjEgZnJvbSAnLi9hc3NldHMvYXBwX2FkdmFuY2VkX3NldHRpbmdzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDYyIGZyb20gJy4vYXNzZXRzL2FwcF9hZ2VudCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ2MyBmcm9tICcuL2Fzc2V0cy9hcHBfYXBtJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDY0IGZyb20gJy4vYXNzZXRzL2FwcF9hcHBfc2VhcmNoJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDY1IGZyb20gJy4vYXNzZXRzL2FwcF9hdWRpdGJlYXQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NjYgZnJvbSAnLi9hc3NldHMvYXBwX2NhbnZhcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ2NyBmcm9tICcuL2Fzc2V0cy9hcHBfY2FzZXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NjggZnJvbSAnLi9hc3NldHMvYXBwX2NvZGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NjkgZnJvbSAnLi9hc3NldHMvYXBwX2NvbnNvbGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NzAgZnJvbSAnLi9hc3NldHMvYXBwX2Nyb3NzX2NsdXN0ZXJfcmVwbGljYXRpb24nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NzEgZnJvbSAnLi9hc3NldHMvYXBwX2Rhc2hib2FyZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ3MiBmcm9tICcuL2Fzc2V0cy9hcHBfZGV2dG9vbHMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NzMgZnJvbSAnLi9hc3NldHMvYXBwX2Rpc2NvdmVyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDc0IGZyb20gJy4vYXNzZXRzL2FwcF9lbXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NzUgZnJvbSAnLi9hc3NldHMvYXBwX2ZpbGViZWF0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDc2IGZyb20gJy4vYXNzZXRzL2FwcF9mbGVldCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ3NyBmcm9tICcuL2Fzc2V0cy9hcHBfZ2lzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDc4IGZyb20gJy4vYXNzZXRzL2FwcF9ncmFwaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ3OSBmcm9tICcuL2Fzc2V0cy9hcHBfZ3Jvayc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ4MCBmcm9tICcuL2Fzc2V0cy9hcHBfaGVhcnRiZWF0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDgxIGZyb20gJy4vYXNzZXRzL2FwcF9pbmRleF9tYW5hZ2VtZW50JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDgyIGZyb20gJy4vYXNzZXRzL2FwcF9pbmRleF9wYXR0ZXJuJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDgzIGZyb20gJy4vYXNzZXRzL2FwcF9pbmRleF9yb2xsdXAnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0ODQgZnJvbSAnLi9hc3NldHMvYXBwX2xlbnMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0ODUgZnJvbSAnLi9hc3NldHMvYXBwX2xvZ3MnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0ODYgZnJvbSAnLi9hc3NldHMvYXBwX21hbmFnZW1lbnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0ODcgZnJvbSAnLi9hc3NldHMvYXBwX21ldHJpY2JlYXQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0ODggZnJvbSAnLi9hc3NldHMvYXBwX21ldHJpY3MnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0ODkgZnJvbSAnLi9hc3NldHMvYXBwX21sJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDkwIGZyb20gJy4vYXNzZXRzL2FwcF9tb25pdG9yaW5nJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDkxIGZyb20gJy4vYXNzZXRzL2FwcF9ub3RlYm9vayc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ5MiBmcm9tICcuL2Fzc2V0cy9hcHBfcGFja2V0YmVhdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ5MyBmcm9tICcuL2Fzc2V0cy9hcHBfcGlwZWxpbmUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0OTQgZnJvbSAnLi9hc3NldHMvYXBwX3JlY2VudGx5X3ZpZXdlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ5NSBmcm9tICcuL2Fzc2V0cy9hcHBfcmVwb3J0aW5nJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDk2IGZyb20gJy4vYXNzZXRzL2FwcF9zYXZlZF9vYmplY3RzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDk3IGZyb20gJy4vYXNzZXRzL2FwcF9zZWFyY2hfcHJvZmlsZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0OTggZnJvbSAnLi9hc3NldHMvYXBwX3NlY3VyaXR5JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDk5IGZyb20gJy4vYXNzZXRzL2FwcF9zZWN1cml0eV9hbmFseXRpY3MnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MDAgZnJvbSAnLi9hc3NldHMvYXBwX3NwYWNlcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUwMSBmcm9tICcuL2Fzc2V0cy9hcHBfc3FsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTAyIGZyb20gJy4vYXNzZXRzL2FwcF90aW1lbGlvbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUwMyBmcm9tICcuL2Fzc2V0cy9hcHBfdXBncmFkZV9hc3Npc3RhbnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MDQgZnJvbSAnLi9hc3NldHMvYXBwX3VwdGltZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUwNSBmcm9tICcuL2Fzc2V0cy9hcHBfdXNlcnNfcm9sZXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MDYgZnJvbSAnLi9hc3NldHMvYXBwX3Zpc3VhbGl6ZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUwNyBmcm9tICcuL2Fzc2V0cy9hcHBfd2F0Y2hlcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUwOCBmcm9tICcuL2Fzc2V0cy9hcHBfd29ya3BsYWNlX3NlYXJjaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUwOSBmcm9tICcuL2Fzc2V0cy9hcHBzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTEwIGZyb20gJy4vYXNzZXRzL2Fycm93RW5kJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTExIGZyb20gJy4vYXNzZXRzL2Fycm93U3RhcnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MTIgZnJvbSAnLi9hc3NldHMvYXJyb3dfZG93bic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUxMyBmcm9tICcuL2Fzc2V0cy9hcnJvd19sZWZ0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTE0IGZyb20gJy4vYXNzZXRzL2Fycm93X3JpZ2h0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTE1IGZyb20gJy4vYXNzZXRzL2Fycm93X3VwJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTE2IGZyb20gJy4vYXNzZXRzL2FzdGVyaXNrJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTE3IGZyb20gJy4vYXNzZXRzL2JlYWtlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUxOCBmcm9tICcuL2Fzc2V0cy9iZWxsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTE5IGZyb20gJy4vYXNzZXRzL2JlbGxTbGFzaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUyMCBmcm9tICcuL2Fzc2V0cy9ib2x0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTIxIGZyb20gJy4vYXNzZXRzL2JveGVzX2hvcml6b250YWwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MjIgZnJvbSAnLi9hc3NldHMvYm94ZXNfdmVydGljYWwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MjMgZnJvbSAnLi9hc3NldHMvYnJhbmNoJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTI0IGZyb20gJy4vYXNzZXRzL2JyYW5jaFVzZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MjUgZnJvbSAnLi9hc3NldHMvYnJvb20nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MjYgZnJvbSAnLi9hc3NldHMvYnJ1c2gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MjcgZnJvbSAnLi9hc3NldHMvYnVnJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTI4IGZyb20gJy4vYXNzZXRzL2J1bGxzZXllJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTI5IGZyb20gJy4vYXNzZXRzL2NhbGVuZGFyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTMwIGZyb20gJy4vYXNzZXRzL2NoZWNrJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTMxIGZyb20gJy4vYXNzZXRzL2NoZWNrSW5DaXJjbGVGaWxsZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MzIgZnJvbSAnLi9hc3NldHMvY2hlZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MzMgZnJvbSAnLi9hc3NldHMvY2xvY2snO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MzQgZnJvbSAnLi9hc3NldHMvY2xvdWREcml6emxlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTM1IGZyb20gJy4vYXNzZXRzL2Nsb3VkU3Rvcm15JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTM2IGZyb20gJy4vYXNzZXRzL2Nsb3VkU3VubnknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MzcgZnJvbSAnLi9hc3NldHMvY2x1c3Rlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUzOCBmcm9tICcuL2Fzc2V0cy9jb2xvcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUzOSBmcm9tICcuL2Fzc2V0cy9jb21wdXRlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTQwIGZyb20gJy4vYXNzZXRzL2NvbnNvbGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NDEgZnJvbSAnLi9hc3NldHMvY29udGFpbmVyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTQyIGZyb20gJy4vYXNzZXRzL2NvbnRpbnVpdHlBYm92ZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU0MyBmcm9tICcuL2Fzc2V0cy9jb250aW51aXR5QWJvdmVCZWxvdyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU0NCBmcm9tICcuL2Fzc2V0cy9jb250aW51aXR5QmVsb3cnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NDUgZnJvbSAnLi9hc3NldHMvY29udGludWl0eVdpdGhpbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU0NiBmcm9tICcuL2Fzc2V0cy9jb250cm9sc19ob3Jpem9udGFsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTQ3IGZyb20gJy4vYXNzZXRzL2NvbnRyb2xzX3ZlcnRpY2FsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTQ4IGZyb20gJy4vYXNzZXRzL2NvcHknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NDkgZnJvbSAnLi9hc3NldHMvY29weV9jbGlwYm9hcmQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NTAgZnJvbSAnLi9hc3NldHMvY3Jvc3MnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NTEgZnJvbSAnLi9hc3NldHMvY3Jvc3NJbkFDaXJjbGVGaWxsZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NTIgZnJvbSAnLi9hc3NldHMvY3Jvc3NoYWlycyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU1MyBmcm9tICcuL2Fzc2V0cy9jdXJyZW5jeSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU1NCBmcm9tICcuL2Fzc2V0cy9jdXQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NTUgZnJvbSAnLi9hc3NldHMvZGF0YWJhc2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NTYgZnJvbSAnLi9hc3NldHMvZGVza3RvcCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU1NyBmcm9tICcuL2Fzc2V0cy9kb2N1bWVudCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU1OCBmcm9tICcuL2Fzc2V0cy9kb2N1bWVudEVkaXQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NTkgZnJvbSAnLi9hc3NldHMvZG9jdW1lbnRhdGlvbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU2MCBmcm9tICcuL2Fzc2V0cy9kb2N1bWVudHMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NjEgZnJvbSAnLi9hc3NldHMvZG90JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTYyIGZyb20gJy4vYXNzZXRzL2RvdWJsZUFycm93TGVmdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU2MyBmcm9tICcuL2Fzc2V0cy9kb3VibGVBcnJvd1JpZ2h0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTY0IGZyb20gJy4vYXNzZXRzL2Rvd25sb2FkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTY1IGZyb20gJy4vYXNzZXRzL2VkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTY2IGZyb20gJy4vYXNzZXRzL2VkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU2NyBmcm9tICcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25Cb3R0b20nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NjggZnJvbSAnLi9hc3NldHMvZWRpdG9ySXRlbUFsaWduQ2VudGVyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTY5IGZyb20gJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnbkxlZnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NzAgZnJvbSAnLi9hc3NldHMvZWRpdG9ySXRlbUFsaWduTWlkZGxlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTcxIGZyb20gJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnblJpZ2h0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTcyIGZyb20gJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnblRvcCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU3MyBmcm9tICcuL2Fzc2V0cy9lZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NzQgZnJvbSAnLi9hc3NldHMvZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU3NSBmcm9tICcuL2Fzc2V0cy9lZGl0b3JQb3NpdGlvblRvcExlZnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NzYgZnJvbSAnLi9hc3NldHMvZWRpdG9yUG9zaXRpb25Ub3BSaWdodCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU3NyBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfYWxpZ25fY2VudGVyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTc4IGZyb20gJy4vYXNzZXRzL2VkaXRvcl9hbGlnbl9sZWZ0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTc5IGZyb20gJy4vYXNzZXRzL2VkaXRvcl9hbGlnbl9yaWdodCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU4MCBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfYm9sZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU4MSBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfY2hlY2tsaXN0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTgyIGZyb20gJy4vYXNzZXRzL2VkaXRvcl9jb2RlX2Jsb2NrJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTgzIGZyb20gJy4vYXNzZXRzL2VkaXRvcl9jb21tZW50JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTg0IGZyb20gJy4vYXNzZXRzL2VkaXRvcl9oZWFkaW5nJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTg1IGZyb20gJy4vYXNzZXRzL2VkaXRvcl9pdGFsaWMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1ODYgZnJvbSAnLi9hc3NldHMvZWRpdG9yX2xpbmsnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1ODcgZnJvbSAnLi9hc3NldHMvZWRpdG9yX29yZGVyZWRfbGlzdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU4OCBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfcmVkbyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU4OSBmcm9tICcuL2Fzc2V0cy9lZGl0b3Jfc3RyaWtlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTkwIGZyb20gJy4vYXNzZXRzL2VkaXRvcl90YWJsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU5MSBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfdW5kZXJsaW5lJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTkyIGZyb20gJy4vYXNzZXRzL2VkaXRvcl91bmRvJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTkzIGZyb20gJy4vYXNzZXRzL2VkaXRvcl91bm9yZGVyZWRfbGlzdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU5NCBmcm9tICcuL2Fzc2V0cy9lbWFpbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU5NSBmcm9tICcuL2Fzc2V0cy9lbXB0eSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU5NiBmcm9tICcuL2Fzc2V0cy9lcWwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1OTcgZnJvbSAnLi9hc3NldHMvZXJhc2VyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTk4IGZyb20gJy4vYXNzZXRzL2V4aXQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1OTkgZnJvbSAnLi9hc3NldHMvZXhwYW5kJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjAwIGZyb20gJy4vYXNzZXRzL2V4cGFuZE1pbmknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MDEgZnJvbSAnLi9hc3NldHMvZXhwb3J0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjAyIGZyb20gJy4vYXNzZXRzL2V5ZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYwMyBmcm9tICcuL2Fzc2V0cy9leWVfY2xvc2VkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjA0IGZyb20gJy4vYXNzZXRzL2ZhY2VfaGFwcHknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MDUgZnJvbSAnLi9hc3NldHMvZmFjZV9uZXV0cmFsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjA2IGZyb20gJy4vYXNzZXRzL2ZhY2Vfc2FkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjA3IGZyb20gJy4vYXNzZXRzL2ZpbHRlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYwOCBmcm9tICcuL2Fzc2V0cy9mbGFnJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjA5IGZyb20gJy4vYXNzZXRzL2ZvbGQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MTAgZnJvbSAnLi9hc3NldHMvZm9sZGVyX2NoZWNrJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjExIGZyb20gJy4vYXNzZXRzL2ZvbGRlcl9jbG9zZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MTIgZnJvbSAnLi9hc3NldHMvZm9sZGVyX2V4Y2xhbWF0aW9uJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjEzIGZyb20gJy4vYXNzZXRzL2ZvbGRlcl9vcGVuJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjE0IGZyb20gJy4vYXNzZXRzL2ZyYW1lTmV4dCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYxNSBmcm9tICcuL2Fzc2V0cy9mcmFtZVByZXZpb3VzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjE2IGZyb20gJy4vYXNzZXRzL2Z1bGxTY3JlZW5FeGl0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjE3IGZyb20gJy4vYXNzZXRzL2Z1bGxfc2NyZWVuJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjE4IGZyb20gJy4vYXNzZXRzL2Z1bmN0aW9uJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjE5IGZyb20gJy4vYXNzZXRzL2dlYXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MjAgZnJvbSAnLi9hc3NldHMvZ2xhc3Nlcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYyMSBmcm9tICcuL2Fzc2V0cy9nbG9iZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYyMiBmcm9tICcuL2Fzc2V0cy9ncmFiJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjIzIGZyb20gJy4vYXNzZXRzL2dyYWJfaG9yaXpvbnRhbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYyNCBmcm9tICcuL2Fzc2V0cy9ncmlkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjI1IGZyb20gJy4vYXNzZXRzL2hlYXJ0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjI2IGZyb20gJy4vYXNzZXRzL2hlYXRtYXAnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MjcgZnJvbSAnLi9hc3NldHMvaGVscCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYyOCBmcm9tICcuL2Fzc2V0cy9ob21lJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjI5IGZyb20gJy4vYXNzZXRzL2lJbkNpcmNsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYzMCBmcm9tICcuL2Fzc2V0cy9pbWFnZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYzMSBmcm9tICcuL2Fzc2V0cy9pbXBvcnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MzIgZnJvbSAnLi9hc3NldHMvaW5kZXhfY2xvc2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MzMgZnJvbSAnLi9hc3NldHMvaW5kZXhfZWRpdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYzNCBmcm9tICcuL2Fzc2V0cy9pbmRleF9mbHVzaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYzNSBmcm9tICcuL2Fzc2V0cy9pbmRleF9tYXBwaW5nJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjM2IGZyb20gJy4vYXNzZXRzL2luZGV4X29wZW4nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MzcgZnJvbSAnLi9hc3NldHMvaW5kZXhfcnVudGltZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYzOCBmcm9tICcuL2Fzc2V0cy9pbmRleF9zZXR0aW5ncyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYzOSBmcm9tICcuL2Fzc2V0cy9pbnB1dE91dHB1dCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY0MCBmcm9tICcuL2Fzc2V0cy9pbnNwZWN0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjQxIGZyb20gJy4vYXNzZXRzL2ludmVydCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY0MiBmcm9tICcuL2Fzc2V0cy9pcCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY0MyBmcm9tICcuL2Fzc2V0cy9rZXlib2FyZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY0NCBmcm9tICcuL2Fzc2V0cy9rcWxfZmllbGQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NDUgZnJvbSAnLi9hc3NldHMva3FsX2Z1bmN0aW9uJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjQ2IGZyb20gJy4vYXNzZXRzL2txbF9vcGVyYW5kJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjQ3IGZyb20gJy4vYXNzZXRzL2txbF9zZWxlY3Rvcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY0OCBmcm9tICcuL2Fzc2V0cy9rcWxfdmFsdWUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NDkgZnJvbSAnLi9hc3NldHMva3ViZXJuZXRlc05vZGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NTAgZnJvbSAnLi9hc3NldHMva3ViZXJuZXRlc1BvZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY1MSBmcm9tICcuL2Fzc2V0cy9sYXllcnMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NTIgZnJvbSAnLi9hc3NldHMvbGV0dGVyaW5nJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjUzIGZyb20gJy4vYXNzZXRzL2xpbmVEYXNoZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NTQgZnJvbSAnLi9hc3NldHMvbGluZURvdHRlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY1NSBmcm9tICcuL2Fzc2V0cy9saW5lU29saWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NTYgZnJvbSAnLi9hc3NldHMvbGluayc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY1NyBmcm9tICcuL2Fzc2V0cy9saXN0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjU4IGZyb20gJy4vYXNzZXRzL2xpc3RfYWRkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjU5IGZyb20gJy4vYXNzZXRzL2xvY2snO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NjAgZnJvbSAnLi9hc3NldHMvbG9ja09wZW4nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NjEgZnJvbSAnLi9hc3NldHMvbG9nb19hZXJvc3Bpa2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NjIgZnJvbSAnLi9hc3NldHMvbG9nb19hcGFjaGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NjMgZnJvbSAnLi9hc3NldHMvbG9nb19hcHBfc2VhcmNoJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjY0IGZyb20gJy4vYXNzZXRzL2xvZ29fYXdzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjY1IGZyb20gJy4vYXNzZXRzL2xvZ29fYXdzX21vbm8nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NjYgZnJvbSAnLi9hc3NldHMvbG9nb19henVyZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY2NyBmcm9tICcuL2Fzc2V0cy9sb2dvX2F6dXJlX21vbm8nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NjggZnJvbSAnLi9hc3NldHMvbG9nb19iZWF0cyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY2OSBmcm9tICcuL2Fzc2V0cy9sb2dvX2J1c2luZXNzX2FuYWx5dGljcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY3MCBmcm9tICcuL2Fzc2V0cy9sb2dvX2NlcGgnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NzEgZnJvbSAnLi9hc3NldHMvbG9nb19jbG91ZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY3MiBmcm9tICcuL2Fzc2V0cy9sb2dvX2Nsb3VkX2VjZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY3MyBmcm9tICcuL2Fzc2V0cy9sb2dvX2NvZGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NzQgZnJvbSAnLi9hc3NldHMvbG9nb19jb2Rlc2FuZGJveCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY3NSBmcm9tICcuL2Fzc2V0cy9sb2dvX2NvdWNoYmFzZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY3NiBmcm9tICcuL2Fzc2V0cy9sb2dvX2RvY2tlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY3NyBmcm9tICcuL2Fzc2V0cy9sb2dvX2Ryb3B3aXphcmQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NzggZnJvbSAnLi9hc3NldHMvbG9nb19lbGFzdGljJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjc5IGZyb20gJy4vYXNzZXRzL2xvZ29fZWxhc3RpY19zdGFjayc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY4MCBmcm9tICcuL2Fzc2V0cy9sb2dvX2VsYXN0aWNzZWFyY2gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2ODEgZnJvbSAnLi9hc3NldHMvbG9nb19lbnRlcnByaXNlX3NlYXJjaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY4MiBmcm9tICcuL2Fzc2V0cy9sb2dvX2V0Y2QnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2ODMgZnJvbSAnLi9hc3NldHMvbG9nb19nY3AnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2ODQgZnJvbSAnLi9hc3NldHMvbG9nb19nY3BfbW9ubyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY4NSBmcm9tICcuL2Fzc2V0cy9sb2dvX2dpdGh1Yic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY4NiBmcm9tICcuL2Fzc2V0cy9sb2dvX2dtYWlsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjg3IGZyb20gJy4vYXNzZXRzL2xvZ29fZ29sYW5nJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjg4IGZyb20gJy4vYXNzZXRzL2xvZ29fZ29vZ2xlX2cnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2ODkgZnJvbSAnLi9hc3NldHMvbG9nb19oYXByb3h5JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjkwIGZyb20gJy4vYXNzZXRzL2xvZ29faWJtJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjkxIGZyb20gJy4vYXNzZXRzL2xvZ29faWJtX21vbm8nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2OTIgZnJvbSAnLi9hc3NldHMvbG9nb19rYWZrYSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY5MyBmcm9tICcuL2Fzc2V0cy9sb2dvX2tpYmFuYSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY5NCBmcm9tICcuL2Fzc2V0cy9sb2dvX2t1YmVybmV0ZXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2OTUgZnJvbSAnLi9hc3NldHMvbG9nb19sb2dnaW5nJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjk2IGZyb20gJy4vYXNzZXRzL2xvZ29fbG9nc3Rhc2gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2OTcgZnJvbSAnLi9hc3NldHMvbG9nb19tYXBzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjk4IGZyb20gJy4vYXNzZXRzL2xvZ29fbWVtY2FjaGVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjk5IGZyb20gJy4vYXNzZXRzL2xvZ29fbWV0cmljcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcwMCBmcm9tICcuL2Fzc2V0cy9sb2dvX21vbmdvZGInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MDEgZnJvbSAnLi9hc3NldHMvbG9nb19teXNxbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcwMiBmcm9tICcuL2Fzc2V0cy9sb2dvX25naW54JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzAzIGZyb20gJy4vYXNzZXRzL2xvZ29fb2JzZXJ2YWJpbGl0eSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcwNCBmcm9tICcuL2Fzc2V0cy9sb2dvX29zcXVlcnknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MDUgZnJvbSAnLi9hc3NldHMvbG9nb19waHAnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MDYgZnJvbSAnLi9hc3NldHMvbG9nb19wb3N0Z3Jlcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcwNyBmcm9tICcuL2Fzc2V0cy9sb2dvX3Byb21ldGhldXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MDggZnJvbSAnLi9hc3NldHMvbG9nb19yYWJiaXRtcSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcwOSBmcm9tICcuL2Fzc2V0cy9sb2dvX3JlZGlzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzEwIGZyb20gJy4vYXNzZXRzL2xvZ29fc2VjdXJpdHknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MTEgZnJvbSAnLi9hc3NldHMvbG9nb19zaXRlX3NlYXJjaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcxMiBmcm9tICcuL2Fzc2V0cy9sb2dvX3NrZXRjaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcxMyBmcm9tICcuL2Fzc2V0cy9sb2dvX3NsYWNrJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzE0IGZyb20gJy4vYXNzZXRzL2xvZ29fdXB0aW1lJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzE1IGZyb20gJy4vYXNzZXRzL2xvZ29fd2ViaG9vayc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcxNiBmcm9tICcuL2Fzc2V0cy9sb2dvX3dpbmRvd3MnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MTcgZnJvbSAnLi9hc3NldHMvbG9nb193b3JrcGxhY2Vfc2VhcmNoJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzE4IGZyb20gJy4vYXNzZXRzL2xvZ3N0YXNoX2ZpbHRlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcxOSBmcm9tICcuL2Fzc2V0cy9sb2dzdGFzaF9pZic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcyMCBmcm9tICcuL2Fzc2V0cy9sb2dzdGFzaF9pbnB1dCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcyMSBmcm9tICcuL2Fzc2V0cy9sb2dzdGFzaF9vdXRwdXQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MjIgZnJvbSAnLi9hc3NldHMvbG9nc3Rhc2hfcXVldWUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MjMgZnJvbSAnLi9hc3NldHMvbWFnbmV0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzI0IGZyb20gJy4vYXNzZXRzL21hZ25pZnlXaXRoRXhjbGFtYXRpb24nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MjUgZnJvbSAnLi9hc3NldHMvbWFnbmlmeVdpdGhNaW51cyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcyNiBmcm9tICcuL2Fzc2V0cy9tYWduaWZ5V2l0aFBsdXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MjcgZnJvbSAnLi9hc3NldHMvbWFwX21hcmtlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcyOCBmcm9tICcuL2Fzc2V0cy9tZW1vcnknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MjkgZnJvbSAnLi9hc3NldHMvbWVudSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTczMCBmcm9tICcuL2Fzc2V0cy9tZW51RG93bic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTczMSBmcm9tICcuL2Fzc2V0cy9tZW51TGVmdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTczMiBmcm9tICcuL2Fzc2V0cy9tZW51UmlnaHQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MzMgZnJvbSAnLi9hc3NldHMvbWVudVVwJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzM0IGZyb20gJy4vYXNzZXRzL21lcmdlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzM1IGZyb20gJy4vYXNzZXRzL21pbmltaXplJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzM2IGZyb20gJy4vYXNzZXRzL21pbnVzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzM3IGZyb20gJy4vYXNzZXRzL21pbnVzX2luX2NpcmNsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTczOCBmcm9tICcuL2Fzc2V0cy9taW51c19pbl9jaXJjbGVfZmlsbGVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzM5IGZyb20gJy4vYXNzZXRzL21sX2NsYXNzaWZpY2F0aW9uX2pvYic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc0MCBmcm9tICcuL2Fzc2V0cy9tbF9jcmVhdGVfYWR2YW5jZWRfam9iJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzQxIGZyb20gJy4vYXNzZXRzL21sX2NyZWF0ZV9tdWx0aV9tZXRyaWNfam9iJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzQyIGZyb20gJy4vYXNzZXRzL21sX2NyZWF0ZV9wb3B1bGF0aW9uX2pvYic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc0MyBmcm9tICcuL2Fzc2V0cy9tbF9jcmVhdGVfc2luZ2xlX21ldHJpY19qb2InO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NDQgZnJvbSAnLi9hc3NldHMvbWxfZGF0YV92aXN1YWxpemVyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzQ1IGZyb20gJy4vYXNzZXRzL21sX291dGxpZXJfZGV0ZWN0aW9uX2pvYic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc0NiBmcm9tICcuL2Fzc2V0cy9tbF9yZWdyZXNzaW9uX2pvYic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc0NyBmcm9tICcuL2Fzc2V0cy9tb2JpbGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NDggZnJvbSAnLi9hc3NldHMvbW9vbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc0OSBmcm9tICcuL2Fzc2V0cy9uYW1lc3BhY2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NTAgZnJvbSAnLi9hc3NldHMvbmVzdGVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzUxIGZyb20gJy4vYXNzZXRzL25vZGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NTIgZnJvbSAnLi9hc3NldHMvbnVtYmVyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzUzIGZyb20gJy4vYXNzZXRzL29mZmxpbmUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NTQgZnJvbSAnLi9hc3NldHMvb25saW5lJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzU1IGZyb20gJy4vYXNzZXRzL3BhY2thZ2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NTYgZnJvbSAnLi9hc3NldHMvcGFnZVNlbGVjdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc1NyBmcm9tICcuL2Fzc2V0cy9wYWdlc1NlbGVjdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc1OCBmcm9tICcuL2Fzc2V0cy9wYWludCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc1OSBmcm9tICcuL2Fzc2V0cy9wYXBlcl9jbGlwJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzYwIGZyb20gJy4vYXNzZXRzL3BhcnRpYWwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NjEgZnJvbSAnLi9hc3NldHMvcGF1c2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NjIgZnJvbSAnLi9hc3NldHMvcGF5bWVudCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc2MyBmcm9tICcuL2Fzc2V0cy9wZW5jaWwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NjQgZnJvbSAnLi9hc3NldHMvcGVyY2VudCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc2NSBmcm9tICcuL2Fzc2V0cy9waW4nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NjYgZnJvbSAnLi9hc3NldHMvcGluX2ZpbGxlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc2NyBmcm9tICcuL2Fzc2V0cy9wbGF5JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzY4IGZyb20gJy4vYXNzZXRzL3BsYXlGaWxsZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NjkgZnJvbSAnLi9hc3NldHMvcGx1cyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc3MCBmcm9tICcuL2Fzc2V0cy9wbHVzX2luX2NpcmNsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc3MSBmcm9tICcuL2Fzc2V0cy9wbHVzX2luX2NpcmNsZV9maWxsZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NzIgZnJvbSAnLi9hc3NldHMvcG9wb3V0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzczIGZyb20gJy4vYXNzZXRzL3B1c2gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NzQgZnJvbSAnLi9hc3NldHMvcXVlc3Rpb25faW5fY2lyY2xlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzc1IGZyb20gJy4vYXNzZXRzL3F1b3RlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzc2IGZyb20gJy4vYXNzZXRzL3JlZnJlc2gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NzcgZnJvbSAnLi9hc3NldHMvcmVwb3J0ZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NzggZnJvbSAnLi9hc3NldHMvcmV0dXJuX2tleSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc3OSBmcm9tICcuL2Fzc2V0cy9zYXZlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzgwIGZyb20gJy4vYXNzZXRzL3NjYWxlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzgxIGZyb20gJy4vYXNzZXRzL3NlYXJjaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc4MiBmcm9tICcuL2Fzc2V0cy9zZWN1cml0eVNpZ25hbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc4MyBmcm9tICcuL2Fzc2V0cy9zZWN1cml0eVNpZ25hbERldGVjdGVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzg0IGZyb20gJy4vYXNzZXRzL3NlY3VyaXR5U2lnbmFsUmVzb2x2ZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3ODUgZnJvbSAnLi9hc3NldHMvc2Vzc2lvblZpZXdlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc4NiBmcm9tICcuL2Fzc2V0cy9zaGFyZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc4NyBmcm9tICcuL2Fzc2V0cy9zaGFyZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc4OCBmcm9tICcuL2Fzc2V0cy9zbm93Zmxha2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3ODkgZnJvbSAnLi9hc3NldHMvc29ydExlZnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3OTAgZnJvbSAnLi9hc3NldHMvc29ydFJpZ2h0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzkxIGZyb20gJy4vYXNzZXRzL3NvcnRfZG93bic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc5MiBmcm9tICcuL2Fzc2V0cy9zb3J0X3VwJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzkzIGZyb20gJy4vYXNzZXRzL3NvcnRhYmxlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzk0IGZyb20gJy4vYXNzZXRzL3N0YXJQbHVzRW1wdHknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3OTUgZnJvbSAnLi9hc3NldHMvc3RhclBsdXNGaWxsZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3OTYgZnJvbSAnLi9hc3NldHMvc3Rhcl9lbXB0eSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc5NyBmcm9tICcuL2Fzc2V0cy9zdGFyX2VtcHR5X3NwYWNlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzk4IGZyb20gJy4vYXNzZXRzL3N0YXJfZmlsbGVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzk5IGZyb20gJy4vYXNzZXRzL3N0YXJfZmlsbGVkX3NwYWNlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODAwIGZyb20gJy4vYXNzZXRzL3N0YXJfbWludXNfZW1wdHknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MDEgZnJvbSAnLi9hc3NldHMvc3Rhcl9taW51c19maWxsZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MDIgZnJvbSAnLi9hc3NldHMvc3RhdHMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MDMgZnJvbSAnLi9hc3NldHMvc3RvcCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgwNCBmcm9tICcuL2Fzc2V0cy9zdG9wX2ZpbGxlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgwNSBmcm9tICcuL2Fzc2V0cy9zdG9wX3NsYXNoJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODA2IGZyb20gJy4vYXNzZXRzL3N0b3JhZ2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MDcgZnJvbSAnLi9hc3NldHMvc3RyaW5nJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODA4IGZyb20gJy4vYXNzZXRzL3N1Ym1vZHVsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgwOSBmcm9tICcuL2Fzc2V0cy9zdW4nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MTAgZnJvbSAnLi9hc3NldHMvc3dhdGNoX2lucHV0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODExIGZyb20gJy4vYXNzZXRzL3N5bWxpbmsnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MTIgZnJvbSAnLi9hc3NldHMvdGFibGVPZkNvbnRlbnRzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODEzIGZyb20gJy4vYXNzZXRzL3RhYmxlX2RlbnNpdHlfY29tcGFjdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgxNCBmcm9tICcuL2Fzc2V0cy90YWJsZV9kZW5zaXR5X2V4cGFuZGVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODE1IGZyb20gJy4vYXNzZXRzL3RhYmxlX2RlbnNpdHlfbm9ybWFsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODE2IGZyb20gJy4vYXNzZXRzL3RhZyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgxNyBmcm9tICcuL2Fzc2V0cy90ZWFyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODE4IGZyb20gJy4vYXNzZXRzL3RlbXBlcmF0dXJlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODE5IGZyb20gJy4vYXNzZXRzL3RpbWVSZWZyZXNoJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODIwIGZyb20gJy4vYXNzZXRzL3RpbWVsaW5lJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODIxIGZyb20gJy4vYXNzZXRzL3RpbWVzbGlkZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MjIgZnJvbSAnLi9hc3NldHMvdG9rZW5BbGlhcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgyMyBmcm9tICcuL2Fzc2V0cy90b2tlbkFubm90YXRpb24nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MjQgZnJvbSAnLi9hc3NldHMvdG9rZW5BcnJheSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgyNSBmcm9tICcuL2Fzc2V0cy90b2tlbkJpbmFyeSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgyNiBmcm9tICcuL2Fzc2V0cy90b2tlbkJvb2xlYW4nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MjcgZnJvbSAnLi9hc3NldHMvdG9rZW5DbGFzcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgyOCBmcm9tICcuL2Fzc2V0cy90b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MjkgZnJvbSAnLi9hc3NldHMvdG9rZW5Db25zdGFudCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgzMCBmcm9tICcuL2Fzc2V0cy90b2tlbkRhdGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MzEgZnJvbSAnLi9hc3NldHMvdG9rZW5EZW5zZVZlY3Rvcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgzMiBmcm9tICcuL2Fzc2V0cy90b2tlbkVsZW1lbnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MzMgZnJvbSAnLi9hc3NldHMvdG9rZW5FbnVtJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODM0IGZyb20gJy4vYXNzZXRzL3Rva2VuRW51bU1lbWJlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgzNSBmcm9tICcuL2Fzc2V0cy90b2tlbkV2ZW50JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODM2IGZyb20gJy4vYXNzZXRzL3Rva2VuRXhjZXB0aW9uJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODM3IGZyb20gJy4vYXNzZXRzL3Rva2VuRmllbGQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MzggZnJvbSAnLi9hc3NldHMvdG9rZW5GaWxlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODM5IGZyb20gJy4vYXNzZXRzL3Rva2VuRmxhdHRlbmVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODQwIGZyb20gJy4vYXNzZXRzL3Rva2VuRnVuY3Rpb24nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NDEgZnJvbSAnLi9hc3NldHMvdG9rZW5HZW8nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NDIgZnJvbSAnLi9hc3NldHMvdG9rZW5IaXN0b2dyYW0nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NDMgZnJvbSAnLi9hc3NldHMvdG9rZW5JUCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg0NCBmcm9tICcuL2Fzc2V0cy90b2tlbkludGVyZmFjZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg0NSBmcm9tICcuL2Fzc2V0cy90b2tlbkpvaW4nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NDYgZnJvbSAnLi9hc3NldHMvdG9rZW5LZXknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NDcgZnJvbSAnLi9hc3NldHMvdG9rZW5LZXl3b3JkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODQ4IGZyb20gJy4vYXNzZXRzL3Rva2VuTWV0aG9kJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODQ5IGZyb20gJy4vYXNzZXRzL3Rva2VuTWV0cmljQ291bnRlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg1MCBmcm9tICcuL2Fzc2V0cy90b2tlbk1ldHJpY0dhdWdlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODUxIGZyb20gJy4vYXNzZXRzL3Rva2VuTW9kdWxlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODUyIGZyb20gJy4vYXNzZXRzL3Rva2VuTmFtZXNwYWNlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODUzIGZyb20gJy4vYXNzZXRzL3Rva2VuTmVzdGVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODU0IGZyb20gJy4vYXNzZXRzL3Rva2VuTnVsbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg1NSBmcm9tICcuL2Fzc2V0cy90b2tlbk51bWJlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg1NiBmcm9tICcuL2Fzc2V0cy90b2tlbk9iamVjdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg1NyBmcm9tICcuL2Fzc2V0cy90b2tlbk9wZXJhdG9yJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODU4IGZyb20gJy4vYXNzZXRzL3Rva2VuUGFja2FnZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg1OSBmcm9tICcuL2Fzc2V0cy90b2tlblBhcmFtZXRlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg2MCBmcm9tICcuL2Fzc2V0cy90b2tlblBlcmNvbGF0b3InO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NjEgZnJvbSAnLi9hc3NldHMvdG9rZW5Qcm9wZXJ0eSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg2MiBmcm9tICcuL2Fzc2V0cy90b2tlblJhbmdlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODYzIGZyb20gJy4vYXNzZXRzL3Rva2VuUmFua0ZlYXR1cmUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NjQgZnJvbSAnLi9hc3NldHMvdG9rZW5SYW5rRmVhdHVyZXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NjUgZnJvbSAnLi9hc3NldHMvdG9rZW5SZXBvJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODY2IGZyb20gJy4vYXNzZXRzL3Rva2VuU2VhcmNoVHlwZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg2NyBmcm9tICcuL2Fzc2V0cy90b2tlblNoYXBlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODY4IGZyb20gJy4vYXNzZXRzL3Rva2VuU3RyaW5nJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODY5IGZyb20gJy4vYXNzZXRzL3Rva2VuU3RydWN0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODcwIGZyb20gJy4vYXNzZXRzL3Rva2VuU3ltYm9sJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODcxIGZyb20gJy4vYXNzZXRzL3Rva2VuVGFnJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODcyIGZyb20gJy4vYXNzZXRzL3Rva2VuVGV4dCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg3MyBmcm9tICcuL2Fzc2V0cy90b2tlblRva2VuQ291bnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NzQgZnJvbSAnLi9hc3NldHMvdG9rZW5WYXJpYWJsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg3NSBmcm9tICcuL2Fzc2V0cy90cmFpbmluZyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg3NiBmcm9tICcuL2Fzc2V0cy90cmFzaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg3NyBmcm9tICcuL2Fzc2V0cy91bmZvbGQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NzggZnJvbSAnLi9hc3NldHMvdW5saW5rJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODc5IGZyb20gJy4vYXNzZXRzL3VzZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4ODAgZnJvbSAnLi9hc3NldHMvdXNlckF2YXRhcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg4MSBmcm9tICcuL2Fzc2V0cy91c2Vycyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg4MiBmcm9tICcuL2Fzc2V0cy92ZWN0b3InO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4ODMgZnJvbSAnLi9hc3NldHMvdmlkZW9QbGF5ZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4ODQgZnJvbSAnLi9hc3NldHMvdmlzX2FyZWEnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4ODUgZnJvbSAnLi9hc3NldHMvdmlzX2FyZWFfc3RhY2tlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg4NiBmcm9tICcuL2Fzc2V0cy92aXNfYmFyX2hvcml6b250YWwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4ODcgZnJvbSAnLi9hc3NldHMvdmlzX2Jhcl9ob3Jpem9udGFsX3N0YWNrZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4ODggZnJvbSAnLi9hc3NldHMvdmlzX2Jhcl92ZXJ0aWNhbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg4OSBmcm9tICcuL2Fzc2V0cy92aXNfYmFyX3ZlcnRpY2FsX3N0YWNrZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4OTAgZnJvbSAnLi9hc3NldHMvdmlzX2dhdWdlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODkxIGZyb20gJy4vYXNzZXRzL3Zpc19nb2FsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODkyIGZyb20gJy4vYXNzZXRzL3Zpc19saW5lJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODkzIGZyb20gJy4vYXNzZXRzL3Zpc19tYXBfY29vcmRpbmF0ZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg5NCBmcm9tICcuL2Fzc2V0cy92aXNfbWFwX3JlZ2lvbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg5NSBmcm9tICcuL2Fzc2V0cy92aXNfbWV0cmljJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODk2IGZyb20gJy4vYXNzZXRzL3Zpc19waWUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4OTcgZnJvbSAnLi9hc3NldHMvdmlzX3RhYmxlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODk4IGZyb20gJy4vYXNzZXRzL3Zpc190YWdfY2xvdWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4OTkgZnJvbSAnLi9hc3NldHMvdmlzX3RleHQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MDAgZnJvbSAnLi9hc3NldHMvdmlzX3RpbWVsaW9uJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTAxIGZyb20gJy4vYXNzZXRzL3Zpc192ZWdhJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTAyIGZyb20gJy4vYXNzZXRzL3Zpc192aXN1YWxfYnVpbGRlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkwMyBmcm9tICcuL2Fzc2V0cy93b3JkV3JhcCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkwNCBmcm9tICcuL2Fzc2V0cy93b3JkV3JhcERpc2FibGVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTA1IGZyb20gJy4vYXNzZXRzL3dyZW5jaCc7XG5jb25zdCBfRHluYW1pY0ltcG9ydE1vZHVsZU1hcCA9IHsnLi9hc3NldHMvYWNjZXNzaWJpbGl0eS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUwLCcuL2Fzc2V0cy9hZ2dyZWdhdGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMSwnLi9hc3NldHMvYWxlcnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMiwnLi9hc3NldHMvYW5hbHl6ZUV2ZW50LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMsJy4vYXNzZXRzL2FuYWx5emVfZXZlbnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNCwnLi9hc3NldHMvYW5ub3RhdGlvbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1LCcuL2Fzc2V0cy9hcG1fdHJhY2UuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNiwnLi9hc3NldHMvYXBwX2FkZF9kYXRhLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcsJy4vYXNzZXRzL2FwcF9hZHZhbmNlZF9zZXR0aW5ncy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4LCcuL2Fzc2V0cy9hcHBfYWdlbnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlOSwnLi9hc3NldHMvYXBwX2FwbS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMCwnLi9hc3NldHMvYXBwX2FwcF9zZWFyY2guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTEsJy4vYXNzZXRzL2FwcF9hdWRpdGJlYXQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTIsJy4vYXNzZXRzL2FwcF9jYW52YXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTMsJy4vYXNzZXRzL2FwcF9jYXNlcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNCwnLi9hc3NldHMvYXBwX2NvZGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTUsJy4vYXNzZXRzL2FwcF9jb25zb2xlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE2LCcuL2Fzc2V0cy9hcHBfY3Jvc3NfY2x1c3Rlcl9yZXBsaWNhdGlvbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNywnLi9hc3NldHMvYXBwX2Rhc2hib2FyZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxOCwnLi9hc3NldHMvYXBwX2RldnRvb2xzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE5LCcuL2Fzc2V0cy9hcHBfZGlzY292ZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjAsJy4vYXNzZXRzL2FwcF9lbXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjEsJy4vYXNzZXRzL2FwcF9maWxlYmVhdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMiwnLi9hc3NldHMvYXBwX2ZsZWV0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIzLCcuL2Fzc2V0cy9hcHBfZ2lzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI0LCcuL2Fzc2V0cy9hcHBfZ3JhcGguanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjUsJy4vYXNzZXRzL2FwcF9ncm9rLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI2LCcuL2Fzc2V0cy9hcHBfaGVhcnRiZWF0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI3LCcuL2Fzc2V0cy9hcHBfaW5kZXhfbWFuYWdlbWVudC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyOCwnLi9hc3NldHMvYXBwX2luZGV4X3BhdHRlcm4uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjksJy4vYXNzZXRzL2FwcF9pbmRleF9yb2xsdXAuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzAsJy4vYXNzZXRzL2FwcF9sZW5zLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMxLCcuL2Fzc2V0cy9hcHBfbG9ncy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMiwnLi9hc3NldHMvYXBwX21hbmFnZW1lbnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzMsJy4vYXNzZXRzL2FwcF9tZXRyaWNiZWF0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM0LCcuL2Fzc2V0cy9hcHBfbWV0cmljcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNSwnLi9hc3NldHMvYXBwX21sLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM2LCcuL2Fzc2V0cy9hcHBfbW9uaXRvcmluZy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNywnLi9hc3NldHMvYXBwX25vdGVib29rLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM4LCcuL2Fzc2V0cy9hcHBfcGFja2V0YmVhdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzOSwnLi9hc3NldHMvYXBwX3BpcGVsaW5lLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQwLCcuL2Fzc2V0cy9hcHBfcmVjZW50bHlfdmlld2VkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQxLCcuL2Fzc2V0cy9hcHBfcmVwb3J0aW5nLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQyLCcuL2Fzc2V0cy9hcHBfc2F2ZWRfb2JqZWN0cy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MywnLi9hc3NldHMvYXBwX3NlYXJjaF9wcm9maWxlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NCwnLi9hc3NldHMvYXBwX3NlY3VyaXR5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ1LCcuL2Fzc2V0cy9hcHBfc2VjdXJpdHlfYW5hbHl0aWNzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ2LCcuL2Fzc2V0cy9hcHBfc3BhY2VzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ3LCcuL2Fzc2V0cy9hcHBfc3FsLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ4LCcuL2Fzc2V0cy9hcHBfdGltZWxpb24uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDksJy4vYXNzZXRzL2FwcF91cGdyYWRlX2Fzc2lzdGFudC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MCwnLi9hc3NldHMvYXBwX3VwdGltZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MSwnLi9hc3NldHMvYXBwX3VzZXJzX3JvbGVzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUyLCcuL2Fzc2V0cy9hcHBfdmlzdWFsaXplLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUzLCcuL2Fzc2V0cy9hcHBfd2F0Y2hlcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NCwnLi9hc3NldHMvYXBwX3dvcmtwbGFjZV9zZWFyY2guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTUsJy4vYXNzZXRzL2FwcHMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTYsJy4vYXNzZXRzL2Fycm93RW5kLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU3LCcuL2Fzc2V0cy9hcnJvd1N0YXJ0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU4LCcuL2Fzc2V0cy9hcnJvd19kb3duLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU5LCcuL2Fzc2V0cy9hcnJvd19sZWZ0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYwLCcuL2Fzc2V0cy9hcnJvd19yaWdodC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MSwnLi9hc3NldHMvYXJyb3dfdXAuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjIsJy4vYXNzZXRzL2FzdGVyaXNrLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYzLCcuL2Fzc2V0cy9iZWFrZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjQsJy4vYXNzZXRzL2JlbGwuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjUsJy4vYXNzZXRzL2JlbGxTbGFzaC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NiwnLi9hc3NldHMvYm9sdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NywnLi9hc3NldHMvYm94ZXNfaG9yaXpvbnRhbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2OCwnLi9hc3NldHMvYm94ZXNfdmVydGljYWwuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjksJy4vYXNzZXRzL2JyYW5jaC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MCwnLi9hc3NldHMvYnJhbmNoVXNlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MSwnLi9hc3NldHMvYnJvb20uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzIsJy4vYXNzZXRzL2JydXNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTczLCcuL2Fzc2V0cy9idWcuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzQsJy4vYXNzZXRzL2J1bGxzZXllLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc1LCcuL2Fzc2V0cy9jYWxlbmRhci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NiwnLi9hc3NldHMvY2hlY2suanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzcsJy4vYXNzZXRzL2NoZWNrSW5DaXJjbGVGaWxsZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzgsJy4vYXNzZXRzL2NoZWVyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc5LCcuL2Fzc2V0cy9jbG9jay5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MCwnLi9hc3NldHMvY2xvdWREcml6emxlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgxLCcuL2Fzc2V0cy9jbG91ZFN0b3JteS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MiwnLi9hc3NldHMvY2xvdWRTdW5ueS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MywnLi9hc3NldHMvY2x1c3Rlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NCwnLi9hc3NldHMvY29sb3IuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlODUsJy4vYXNzZXRzL2NvbXB1dGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlODYsJy4vYXNzZXRzL2NvbnNvbGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlODcsJy4vYXNzZXRzL2NvbnRhaW5lci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4OCwnLi9hc3NldHMvY29udGludWl0eUFib3ZlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg5LCcuL2Fzc2V0cy9jb250aW51aXR5QWJvdmVCZWxvdy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MCwnLi9hc3NldHMvY29udGludWl0eUJlbG93LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTkxLCcuL2Fzc2V0cy9jb250aW51aXR5V2l0aGluLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTkyLCcuL2Fzc2V0cy9jb250cm9sc19ob3Jpem9udGFsLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTkzLCcuL2Fzc2V0cy9jb250cm9sc192ZXJ0aWNhbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5NCwnLi9hc3NldHMvY29weS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5NSwnLi9hc3NldHMvY29weV9jbGlwYm9hcmQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTYsJy4vYXNzZXRzL2Nyb3NzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk3LCcuL2Fzc2V0cy9jcm9zc0luQUNpcmNsZUZpbGxlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5OCwnLi9hc3NldHMvY3Jvc3NoYWlycy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5OSwnLi9hc3NldHMvY3VycmVuY3kuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTAwLCcuL2Fzc2V0cy9jdXQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTAxLCcuL2Fzc2V0cy9kYXRhYmFzZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMDIsJy4vYXNzZXRzL2Rlc2t0b3AuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTAzLCcuL2Fzc2V0cy9kb2N1bWVudC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMDQsJy4vYXNzZXRzL2RvY3VtZW50RWRpdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMDUsJy4vYXNzZXRzL2RvY3VtZW50YXRpb24uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTA2LCcuL2Fzc2V0cy9kb2N1bWVudHMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTA3LCcuL2Fzc2V0cy9kb3QuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTA4LCcuL2Fzc2V0cy9kb3VibGVBcnJvd0xlZnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTA5LCcuL2Fzc2V0cy9kb3VibGVBcnJvd1JpZ2h0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTExMCwnLi9hc3NldHMvZG93bmxvYWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTExLCcuL2Fzc2V0cy9lZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMTIsJy4vYXNzZXRzL2VkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMTMsJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnbkJvdHRvbS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMTQsJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnbkNlbnRlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMTUsJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnbkxlZnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTE2LCcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25NaWRkbGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTE3LCcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25SaWdodC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMTgsJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnblRvcC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMTksJy4vYXNzZXRzL2VkaXRvclBvc2l0aW9uQm90dG9tTGVmdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMjAsJy4vYXNzZXRzL2VkaXRvclBvc2l0aW9uQm90dG9tUmlnaHQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTIxLCcuL2Fzc2V0cy9lZGl0b3JQb3NpdGlvblRvcExlZnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTIyLCcuL2Fzc2V0cy9lZGl0b3JQb3NpdGlvblRvcFJpZ2h0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEyMywnLi9hc3NldHMvZWRpdG9yX2FsaWduX2NlbnRlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMjQsJy4vYXNzZXRzL2VkaXRvcl9hbGlnbl9sZWZ0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEyNSwnLi9hc3NldHMvZWRpdG9yX2FsaWduX3JpZ2h0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEyNiwnLi9hc3NldHMvZWRpdG9yX2JvbGQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTI3LCcuL2Fzc2V0cy9lZGl0b3JfY2hlY2tsaXN0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEyOCwnLi9hc3NldHMvZWRpdG9yX2NvZGVfYmxvY2suanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTI5LCcuL2Fzc2V0cy9lZGl0b3JfY29tbWVudC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMzAsJy4vYXNzZXRzL2VkaXRvcl9oZWFkaW5nLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEzMSwnLi9hc3NldHMvZWRpdG9yX2l0YWxpYy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMzIsJy4vYXNzZXRzL2VkaXRvcl9saW5rLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEzMywnLi9hc3NldHMvZWRpdG9yX29yZGVyZWRfbGlzdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMzQsJy4vYXNzZXRzL2VkaXRvcl9yZWRvLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEzNSwnLi9hc3NldHMvZWRpdG9yX3N0cmlrZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMzYsJy4vYXNzZXRzL2VkaXRvcl90YWJsZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMzcsJy4vYXNzZXRzL2VkaXRvcl91bmRlcmxpbmUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTM4LCcuL2Fzc2V0cy9lZGl0b3JfdW5kby5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMzksJy4vYXNzZXRzL2VkaXRvcl91bm9yZGVyZWRfbGlzdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNDAsJy4vYXNzZXRzL2VtYWlsLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE0MSwnLi9hc3NldHMvZW1wdHkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTQyLCcuL2Fzc2V0cy9lcWwuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTQzLCcuL2Fzc2V0cy9lcmFzZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTQ0LCcuL2Fzc2V0cy9leGl0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE0NSwnLi9hc3NldHMvZXhwYW5kLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE0NiwnLi9hc3NldHMvZXhwYW5kTWluaS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNDcsJy4vYXNzZXRzL2V4cG9ydC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNDgsJy4vYXNzZXRzL2V5ZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNDksJy4vYXNzZXRzL2V5ZV9jbG9zZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTUwLCcuL2Fzc2V0cy9mYWNlX2hhcHB5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE1MSwnLi9hc3NldHMvZmFjZV9uZXV0cmFsLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE1MiwnLi9hc3NldHMvZmFjZV9zYWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTUzLCcuL2Fzc2V0cy9maWx0ZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTU0LCcuL2Fzc2V0cy9mbGFnLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE1NSwnLi9hc3NldHMvZm9sZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNTYsJy4vYXNzZXRzL2ZvbGRlcl9jaGVjay5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNTcsJy4vYXNzZXRzL2ZvbGRlcl9jbG9zZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTU4LCcuL2Fzc2V0cy9mb2xkZXJfZXhjbGFtYXRpb24uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTU5LCcuL2Fzc2V0cy9mb2xkZXJfb3Blbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNjAsJy4vYXNzZXRzL2ZyYW1lTmV4dC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNjEsJy4vYXNzZXRzL2ZyYW1lUHJldmlvdXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTYyLCcuL2Fzc2V0cy9mdWxsU2NyZWVuRXhpdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNjMsJy4vYXNzZXRzL2Z1bGxfc2NyZWVuLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE2NCwnLi9hc3NldHMvZnVuY3Rpb24uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTY1LCcuL2Fzc2V0cy9nZWFyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE2NiwnLi9hc3NldHMvZ2xhc3Nlcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNjcsJy4vYXNzZXRzL2dsb2JlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE2OCwnLi9hc3NldHMvZ3JhYi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNjksJy4vYXNzZXRzL2dyYWJfaG9yaXpvbnRhbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNzAsJy4vYXNzZXRzL2dyaWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTcxLCcuL2Fzc2V0cy9oZWFydC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNzIsJy4vYXNzZXRzL2hlYXRtYXAuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTczLCcuL2Fzc2V0cy9oZWxwLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE3NCwnLi9hc3NldHMvaG9tZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNzUsJy4vYXNzZXRzL2lJbkNpcmNsZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNzYsJy4vYXNzZXRzL2ltYWdlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE3NywnLi9hc3NldHMvaW1wb3J0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE3OCwnLi9hc3NldHMvaW5kZXhfY2xvc2UuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTc5LCcuL2Fzc2V0cy9pbmRleF9lZGl0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE4MCwnLi9hc3NldHMvaW5kZXhfZmx1c2guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTgxLCcuL2Fzc2V0cy9pbmRleF9tYXBwaW5nLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE4MiwnLi9hc3NldHMvaW5kZXhfb3Blbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxODMsJy4vYXNzZXRzL2luZGV4X3J1bnRpbWUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTg0LCcuL2Fzc2V0cy9pbmRleF9zZXR0aW5ncy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxODUsJy4vYXNzZXRzL2lucHV0T3V0cHV0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE4NiwnLi9hc3NldHMvaW5zcGVjdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxODcsJy4vYXNzZXRzL2ludmVydC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxODgsJy4vYXNzZXRzL2lwLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE4OSwnLi9hc3NldHMva2V5Ym9hcmQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTkwLCcuL2Fzc2V0cy9rcWxfZmllbGQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTkxLCcuL2Fzc2V0cy9rcWxfZnVuY3Rpb24uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTkyLCcuL2Fzc2V0cy9rcWxfb3BlcmFuZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxOTMsJy4vYXNzZXRzL2txbF9zZWxlY3Rvci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxOTQsJy4vYXNzZXRzL2txbF92YWx1ZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxOTUsJy4vYXNzZXRzL2t1YmVybmV0ZXNOb2RlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE5NiwnLi9hc3NldHMva3ViZXJuZXRlc1BvZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxOTcsJy4vYXNzZXRzL2xheWVycy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxOTgsJy4vYXNzZXRzL2xldHRlcmluZy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxOTksJy4vYXNzZXRzL2xpbmVEYXNoZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjAwLCcuL2Fzc2V0cy9saW5lRG90dGVkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIwMSwnLi9hc3NldHMvbGluZVNvbGlkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIwMiwnLi9hc3NldHMvbGluay5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMDMsJy4vYXNzZXRzL2xpc3QuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjA0LCcuL2Fzc2V0cy9saXN0X2FkZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMDUsJy4vYXNzZXRzL2xvY2suanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjA2LCcuL2Fzc2V0cy9sb2NrT3Blbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMDcsJy4vYXNzZXRzL2xvZ29fYWVyb3NwaWtlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIwOCwnLi9hc3NldHMvbG9nb19hcGFjaGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjA5LCcuL2Fzc2V0cy9sb2dvX2FwcF9zZWFyY2guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjEwLCcuL2Fzc2V0cy9sb2dvX2F3cy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMTEsJy4vYXNzZXRzL2xvZ29fYXdzX21vbm8uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjEyLCcuL2Fzc2V0cy9sb2dvX2F6dXJlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIxMywnLi9hc3NldHMvbG9nb19henVyZV9tb25vLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIxNCwnLi9hc3NldHMvbG9nb19iZWF0cy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMTUsJy4vYXNzZXRzL2xvZ29fYnVzaW5lc3NfYW5hbHl0aWNzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIxNiwnLi9hc3NldHMvbG9nb19jZXBoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIxNywnLi9hc3NldHMvbG9nb19jbG91ZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMTgsJy4vYXNzZXRzL2xvZ29fY2xvdWRfZWNlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIxOSwnLi9hc3NldHMvbG9nb19jb2RlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIyMCwnLi9hc3NldHMvbG9nb19jb2Rlc2FuZGJveC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMjEsJy4vYXNzZXRzL2xvZ29fY291Y2hiYXNlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIyMiwnLi9hc3NldHMvbG9nb19kb2NrZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjIzLCcuL2Fzc2V0cy9sb2dvX2Ryb3B3aXphcmQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjI0LCcuL2Fzc2V0cy9sb2dvX2VsYXN0aWMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjI1LCcuL2Fzc2V0cy9sb2dvX2VsYXN0aWNfc3RhY2suanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjI2LCcuL2Fzc2V0cy9sb2dvX2VsYXN0aWNzZWFyY2guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjI3LCcuL2Fzc2V0cy9sb2dvX2VudGVycHJpc2Vfc2VhcmNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIyOCwnLi9hc3NldHMvbG9nb19ldGNkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIyOSwnLi9hc3NldHMvbG9nb19nY3AuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjMwLCcuL2Fzc2V0cy9sb2dvX2djcF9tb25vLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIzMSwnLi9hc3NldHMvbG9nb19naXRodWIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjMyLCcuL2Fzc2V0cy9sb2dvX2dtYWlsLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIzMywnLi9hc3NldHMvbG9nb19nb2xhbmcuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjM0LCcuL2Fzc2V0cy9sb2dvX2dvb2dsZV9nLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIzNSwnLi9hc3NldHMvbG9nb19oYXByb3h5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIzNiwnLi9hc3NldHMvbG9nb19pYm0uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjM3LCcuL2Fzc2V0cy9sb2dvX2libV9tb25vLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIzOCwnLi9hc3NldHMvbG9nb19rYWZrYS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMzksJy4vYXNzZXRzL2xvZ29fa2liYW5hLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI0MCwnLi9hc3NldHMvbG9nb19rdWJlcm5ldGVzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI0MSwnLi9hc3NldHMvbG9nb19sb2dnaW5nLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI0MiwnLi9hc3NldHMvbG9nb19sb2dzdGFzaC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNDMsJy4vYXNzZXRzL2xvZ29fbWFwcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNDQsJy4vYXNzZXRzL2xvZ29fbWVtY2FjaGVkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI0NSwnLi9hc3NldHMvbG9nb19tZXRyaWNzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI0NiwnLi9hc3NldHMvbG9nb19tb25nb2RiLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI0NywnLi9hc3NldHMvbG9nb19teXNxbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNDgsJy4vYXNzZXRzL2xvZ29fbmdpbnguanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjQ5LCcuL2Fzc2V0cy9sb2dvX29ic2VydmFiaWxpdHkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjUwLCcuL2Fzc2V0cy9sb2dvX29zcXVlcnkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjUxLCcuL2Fzc2V0cy9sb2dvX3BocC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNTIsJy4vYXNzZXRzL2xvZ29fcG9zdGdyZXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjUzLCcuL2Fzc2V0cy9sb2dvX3Byb21ldGhldXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjU0LCcuL2Fzc2V0cy9sb2dvX3JhYmJpdG1xLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI1NSwnLi9hc3NldHMvbG9nb19yZWRpcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNTYsJy4vYXNzZXRzL2xvZ29fc2VjdXJpdHkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjU3LCcuL2Fzc2V0cy9sb2dvX3NpdGVfc2VhcmNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI1OCwnLi9hc3NldHMvbG9nb19za2V0Y2guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjU5LCcuL2Fzc2V0cy9sb2dvX3NsYWNrLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI2MCwnLi9hc3NldHMvbG9nb191cHRpbWUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjYxLCcuL2Fzc2V0cy9sb2dvX3dlYmhvb2suanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjYyLCcuL2Fzc2V0cy9sb2dvX3dpbmRvd3MuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjYzLCcuL2Fzc2V0cy9sb2dvX3dvcmtwbGFjZV9zZWFyY2guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjY0LCcuL2Fzc2V0cy9sb2dzdGFzaF9maWx0ZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjY1LCcuL2Fzc2V0cy9sb2dzdGFzaF9pZi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNjYsJy4vYXNzZXRzL2xvZ3N0YXNoX2lucHV0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI2NywnLi9hc3NldHMvbG9nc3Rhc2hfb3V0cHV0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI2OCwnLi9hc3NldHMvbG9nc3Rhc2hfcXVldWUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjY5LCcuL2Fzc2V0cy9tYWduZXQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjcwLCcuL2Fzc2V0cy9tYWduaWZ5V2l0aEV4Y2xhbWF0aW9uLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI3MSwnLi9hc3NldHMvbWFnbmlmeVdpdGhNaW51cy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNzIsJy4vYXNzZXRzL21hZ25pZnlXaXRoUGx1cy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNzMsJy4vYXNzZXRzL21hcF9tYXJrZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjc0LCcuL2Fzc2V0cy9tZW1vcnkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjc1LCcuL2Fzc2V0cy9tZW51LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI3NiwnLi9hc3NldHMvbWVudURvd24uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjc3LCcuL2Fzc2V0cy9tZW51TGVmdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNzgsJy4vYXNzZXRzL21lbnVSaWdodC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNzksJy4vYXNzZXRzL21lbnVVcC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyODAsJy4vYXNzZXRzL21lcmdlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI4MSwnLi9hc3NldHMvbWluaW1pemUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjgyLCcuL2Fzc2V0cy9taW51cy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyODMsJy4vYXNzZXRzL21pbnVzX2luX2NpcmNsZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyODQsJy4vYXNzZXRzL21pbnVzX2luX2NpcmNsZV9maWxsZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjg1LCcuL2Fzc2V0cy9tbF9jbGFzc2lmaWNhdGlvbl9qb2IuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjg2LCcuL2Fzc2V0cy9tbF9jcmVhdGVfYWR2YW5jZWRfam9iLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI4NywnLi9hc3NldHMvbWxfY3JlYXRlX211bHRpX21ldHJpY19qb2IuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjg4LCcuL2Fzc2V0cy9tbF9jcmVhdGVfcG9wdWxhdGlvbl9qb2IuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjg5LCcuL2Fzc2V0cy9tbF9jcmVhdGVfc2luZ2xlX21ldHJpY19qb2IuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjkwLCcuL2Fzc2V0cy9tbF9kYXRhX3Zpc3VhbGl6ZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjkxLCcuL2Fzc2V0cy9tbF9vdXRsaWVyX2RldGVjdGlvbl9qb2IuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjkyLCcuL2Fzc2V0cy9tbF9yZWdyZXNzaW9uX2pvYi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyOTMsJy4vYXNzZXRzL21vYmlsZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyOTQsJy4vYXNzZXRzL21vb24uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjk1LCcuL2Fzc2V0cy9uYW1lc3BhY2UuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjk2LCcuL2Fzc2V0cy9uZXN0ZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjk3LCcuL2Fzc2V0cy9ub2RlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI5OCwnLi9hc3NldHMvbnVtYmVyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI5OSwnLi9hc3NldHMvb2ZmbGluZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMDAsJy4vYXNzZXRzL29ubGluZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMDEsJy4vYXNzZXRzL3BhY2thZ2UuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzAyLCcuL2Fzc2V0cy9wYWdlU2VsZWN0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMwMywnLi9hc3NldHMvcGFnZXNTZWxlY3QuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzA0LCcuL2Fzc2V0cy9wYWludC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMDUsJy4vYXNzZXRzL3BhcGVyX2NsaXAuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzA2LCcuL2Fzc2V0cy9wYXJ0aWFsLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMwNywnLi9hc3NldHMvcGF1c2UuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzA4LCcuL2Fzc2V0cy9wYXltZW50LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMwOSwnLi9hc3NldHMvcGVuY2lsLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMxMCwnLi9hc3NldHMvcGVyY2VudC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMTEsJy4vYXNzZXRzL3Bpbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMTIsJy4vYXNzZXRzL3Bpbl9maWxsZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzEzLCcuL2Fzc2V0cy9wbGF5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMxNCwnLi9hc3NldHMvcGxheUZpbGxlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMTUsJy4vYXNzZXRzL3BsdXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzE2LCcuL2Fzc2V0cy9wbHVzX2luX2NpcmNsZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMTcsJy4vYXNzZXRzL3BsdXNfaW5fY2lyY2xlX2ZpbGxlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMTgsJy4vYXNzZXRzL3BvcG91dC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMTksJy4vYXNzZXRzL3B1c2guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzIwLCcuL2Fzc2V0cy9xdWVzdGlvbl9pbl9jaXJjbGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzIxLCcuL2Fzc2V0cy9xdW90ZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMjIsJy4vYXNzZXRzL3JlZnJlc2guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzIzLCcuL2Fzc2V0cy9yZXBvcnRlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMjQsJy4vYXNzZXRzL3JldHVybl9rZXkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzI1LCcuL2Fzc2V0cy9zYXZlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMyNiwnLi9hc3NldHMvc2NhbGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzI3LCcuL2Fzc2V0cy9zZWFyY2guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzI4LCcuL2Fzc2V0cy9zZWN1cml0eVNpZ25hbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMjksJy4vYXNzZXRzL3NlY3VyaXR5U2lnbmFsRGV0ZWN0ZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzMwLCcuL2Fzc2V0cy9zZWN1cml0eVNpZ25hbFJlc29sdmVkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMzMSwnLi9hc3NldHMvc2Vzc2lvblZpZXdlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMzIsJy4vYXNzZXRzL3NoYXJkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMzMywnLi9hc3NldHMvc2hhcmUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzM0LCcuL2Fzc2V0cy9zbm93Zmxha2UuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzM1LCcuL2Fzc2V0cy9zb3J0TGVmdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMzYsJy4vYXNzZXRzL3NvcnRSaWdodC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMzcsJy4vYXNzZXRzL3NvcnRfZG93bi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMzgsJy4vYXNzZXRzL3NvcnRfdXAuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzM5LCcuL2Fzc2V0cy9zb3J0YWJsZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNDAsJy4vYXNzZXRzL3N0YXJQbHVzRW1wdHkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzQxLCcuL2Fzc2V0cy9zdGFyUGx1c0ZpbGxlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNDIsJy4vYXNzZXRzL3N0YXJfZW1wdHkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzQzLCcuL2Fzc2V0cy9zdGFyX2VtcHR5X3NwYWNlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM0NCwnLi9hc3NldHMvc3Rhcl9maWxsZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzQ1LCcuL2Fzc2V0cy9zdGFyX2ZpbGxlZF9zcGFjZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNDYsJy4vYXNzZXRzL3N0YXJfbWludXNfZW1wdHkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzQ3LCcuL2Fzc2V0cy9zdGFyX21pbnVzX2ZpbGxlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNDgsJy4vYXNzZXRzL3N0YXRzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM0OSwnLi9hc3NldHMvc3RvcC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNTAsJy4vYXNzZXRzL3N0b3BfZmlsbGVkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM1MSwnLi9hc3NldHMvc3RvcF9zbGFzaC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNTIsJy4vYXNzZXRzL3N0b3JhZ2UuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzUzLCcuL2Fzc2V0cy9zdHJpbmcuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzU0LCcuL2Fzc2V0cy9zdWJtb2R1bGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzU1LCcuL2Fzc2V0cy9zdW4uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzU2LCcuL2Fzc2V0cy9zd2F0Y2hfaW5wdXQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzU3LCcuL2Fzc2V0cy9zeW1saW5rLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM1OCwnLi9hc3NldHMvdGFibGVPZkNvbnRlbnRzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM1OSwnLi9hc3NldHMvdGFibGVfZGVuc2l0eV9jb21wYWN0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM2MCwnLi9hc3NldHMvdGFibGVfZGVuc2l0eV9leHBhbmRlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNjEsJy4vYXNzZXRzL3RhYmxlX2RlbnNpdHlfbm9ybWFsLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM2MiwnLi9hc3NldHMvdGFnLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM2MywnLi9hc3NldHMvdGVhci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNjQsJy4vYXNzZXRzL3RlbXBlcmF0dXJlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM2NSwnLi9hc3NldHMvdGltZVJlZnJlc2guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzY2LCcuL2Fzc2V0cy90aW1lbGluZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNjcsJy4vYXNzZXRzL3RpbWVzbGlkZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzY4LCcuL2Fzc2V0cy90b2tlbkFsaWFzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM2OSwnLi9hc3NldHMvdG9rZW5Bbm5vdGF0aW9uLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM3MCwnLi9hc3NldHMvdG9rZW5BcnJheS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNzEsJy4vYXNzZXRzL3Rva2VuQmluYXJ5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM3MiwnLi9hc3NldHMvdG9rZW5Cb29sZWFuLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM3MywnLi9hc3NldHMvdG9rZW5DbGFzcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNzQsJy4vYXNzZXRzL3Rva2VuQ29tcGxldGlvblN1Z2dlc3Rlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNzUsJy4vYXNzZXRzL3Rva2VuQ29uc3RhbnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzc2LCcuL2Fzc2V0cy90b2tlbkRhdGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzc3LCcuL2Fzc2V0cy90b2tlbkRlbnNlVmVjdG9yLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM3OCwnLi9hc3NldHMvdG9rZW5FbGVtZW50LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM3OSwnLi9hc3NldHMvdG9rZW5FbnVtLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM4MCwnLi9hc3NldHMvdG9rZW5FbnVtTWVtYmVyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM4MSwnLi9hc3NldHMvdG9rZW5FdmVudC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzODIsJy4vYXNzZXRzL3Rva2VuRXhjZXB0aW9uLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM4MywnLi9hc3NldHMvdG9rZW5GaWVsZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzODQsJy4vYXNzZXRzL3Rva2VuRmlsZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzODUsJy4vYXNzZXRzL3Rva2VuRmxhdHRlbmVkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM4NiwnLi9hc3NldHMvdG9rZW5GdW5jdGlvbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzODcsJy4vYXNzZXRzL3Rva2VuR2VvLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM4OCwnLi9hc3NldHMvdG9rZW5IaXN0b2dyYW0uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzg5LCcuL2Fzc2V0cy90b2tlbklQLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM5MCwnLi9hc3NldHMvdG9rZW5JbnRlcmZhY2UuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzkxLCcuL2Fzc2V0cy90b2tlbkpvaW4uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzkyLCcuL2Fzc2V0cy90b2tlbktleS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzOTMsJy4vYXNzZXRzL3Rva2VuS2V5d29yZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzOTQsJy4vYXNzZXRzL3Rva2VuTWV0aG9kLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM5NSwnLi9hc3NldHMvdG9rZW5NZXRyaWNDb3VudGVyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM5NiwnLi9hc3NldHMvdG9rZW5NZXRyaWNHYXVnZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzOTcsJy4vYXNzZXRzL3Rva2VuTW9kdWxlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM5OCwnLi9hc3NldHMvdG9rZW5OYW1lc3BhY2UuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzk5LCcuL2Fzc2V0cy90b2tlbk5lc3RlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MDAsJy4vYXNzZXRzL3Rva2VuTnVsbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MDEsJy4vYXNzZXRzL3Rva2VuTnVtYmVyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQwMiwnLi9hc3NldHMvdG9rZW5PYmplY3QuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDAzLCcuL2Fzc2V0cy90b2tlbk9wZXJhdG9yLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQwNCwnLi9hc3NldHMvdG9rZW5QYWNrYWdlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQwNSwnLi9hc3NldHMvdG9rZW5QYXJhbWV0ZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDA2LCcuL2Fzc2V0cy90b2tlblBlcmNvbGF0b3IuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDA3LCcuL2Fzc2V0cy90b2tlblByb3BlcnR5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQwOCwnLi9hc3NldHMvdG9rZW5SYW5nZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MDksJy4vYXNzZXRzL3Rva2VuUmFua0ZlYXR1cmUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDEwLCcuL2Fzc2V0cy90b2tlblJhbmtGZWF0dXJlcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MTEsJy4vYXNzZXRzL3Rva2VuUmVwby5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MTIsJy4vYXNzZXRzL3Rva2VuU2VhcmNoVHlwZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MTMsJy4vYXNzZXRzL3Rva2VuU2hhcGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDE0LCcuL2Fzc2V0cy90b2tlblN0cmluZy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MTUsJy4vYXNzZXRzL3Rva2VuU3RydWN0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQxNiwnLi9hc3NldHMvdG9rZW5TeW1ib2wuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDE3LCcuL2Fzc2V0cy90b2tlblRhZy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MTgsJy4vYXNzZXRzL3Rva2VuVGV4dC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MTksJy4vYXNzZXRzL3Rva2VuVG9rZW5Db3VudC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MjAsJy4vYXNzZXRzL3Rva2VuVmFyaWFibGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDIxLCcuL2Fzc2V0cy90cmFpbmluZy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MjIsJy4vYXNzZXRzL3RyYXNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQyMywnLi9hc3NldHMvdW5mb2xkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQyNCwnLi9hc3NldHMvdW5saW5rLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQyNSwnLi9hc3NldHMvdXNlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MjYsJy4vYXNzZXRzL3VzZXJBdmF0YXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDI3LCcuL2Fzc2V0cy91c2Vycy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MjgsJy4vYXNzZXRzL3ZlY3Rvci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MjksJy4vYXNzZXRzL3ZpZGVvUGxheWVyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQzMCwnLi9hc3NldHMvdmlzX2FyZWEuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDMxLCcuL2Fzc2V0cy92aXNfYXJlYV9zdGFja2VkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQzMiwnLi9hc3NldHMvdmlzX2Jhcl9ob3Jpem9udGFsLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQzMywnLi9hc3NldHMvdmlzX2Jhcl9ob3Jpem9udGFsX3N0YWNrZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDM0LCcuL2Fzc2V0cy92aXNfYmFyX3ZlcnRpY2FsLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQzNSwnLi9hc3NldHMvdmlzX2Jhcl92ZXJ0aWNhbF9zdGFja2VkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQzNiwnLi9hc3NldHMvdmlzX2dhdWdlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQzNywnLi9hc3NldHMvdmlzX2dvYWwuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDM4LCcuL2Fzc2V0cy92aXNfbGluZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MzksJy4vYXNzZXRzL3Zpc19tYXBfY29vcmRpbmF0ZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NDAsJy4vYXNzZXRzL3Zpc19tYXBfcmVnaW9uLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ0MSwnLi9hc3NldHMvdmlzX21ldHJpYy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NDIsJy4vYXNzZXRzL3Zpc19waWUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDQzLCcuL2Fzc2V0cy92aXNfdGFibGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDQ0LCcuL2Fzc2V0cy92aXNfdGFnX2Nsb3VkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ0NSwnLi9hc3NldHMvdmlzX3RleHQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDQ2LCcuL2Fzc2V0cy92aXNfdGltZWxpb24uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDQ3LCcuL2Fzc2V0cy92aXNfdmVnYS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NDgsJy4vYXNzZXRzL3Zpc192aXN1YWxfYnVpbGRlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NDksJy4vYXNzZXRzL3dvcmRXcmFwLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ1MCwnLi9hc3NldHMvd29yZFdyYXBEaXNhYmxlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NTEsJy4vYXNzZXRzL3dyZW5jaC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NTIsJy4vYXNzZXRzL2FjY2Vzc2liaWxpdHknOl9EeW5hbWljSW1wb3J0TW9kdWxlNDUzLCcuL2Fzc2V0cy9hZ2dyZWdhdGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDU0LCcuL2Fzc2V0cy9hbGVydCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NTUsJy4vYXNzZXRzL2FuYWx5emVFdmVudCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NTYsJy4vYXNzZXRzL2FuYWx5emVfZXZlbnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDU3LCcuL2Fzc2V0cy9hbm5vdGF0aW9uJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ1OCwnLi9hc3NldHMvYXBtX3RyYWNlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ1OSwnLi9hc3NldHMvYXBwX2FkZF9kYXRhJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ2MCwnLi9hc3NldHMvYXBwX2FkdmFuY2VkX3NldHRpbmdzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ2MSwnLi9hc3NldHMvYXBwX2FnZW50JzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ2MiwnLi9hc3NldHMvYXBwX2FwbSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NjMsJy4vYXNzZXRzL2FwcF9hcHBfc2VhcmNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ2NCwnLi9hc3NldHMvYXBwX2F1ZGl0YmVhdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NjUsJy4vYXNzZXRzL2FwcF9jYW52YXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDY2LCcuL2Fzc2V0cy9hcHBfY2FzZXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDY3LCcuL2Fzc2V0cy9hcHBfY29kZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NjgsJy4vYXNzZXRzL2FwcF9jb25zb2xlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ2OSwnLi9hc3NldHMvYXBwX2Nyb3NzX2NsdXN0ZXJfcmVwbGljYXRpb24nOl9EeW5hbWljSW1wb3J0TW9kdWxlNDcwLCcuL2Fzc2V0cy9hcHBfZGFzaGJvYXJkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ3MSwnLi9hc3NldHMvYXBwX2RldnRvb2xzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ3MiwnLi9hc3NldHMvYXBwX2Rpc2NvdmVyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ3MywnLi9hc3NldHMvYXBwX2Vtcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NzQsJy4vYXNzZXRzL2FwcF9maWxlYmVhdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NzUsJy4vYXNzZXRzL2FwcF9mbGVldCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NzYsJy4vYXNzZXRzL2FwcF9naXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDc3LCcuL2Fzc2V0cy9hcHBfZ3JhcGgnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDc4LCcuL2Fzc2V0cy9hcHBfZ3Jvayc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NzksJy4vYXNzZXRzL2FwcF9oZWFydGJlYXQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDgwLCcuL2Fzc2V0cy9hcHBfaW5kZXhfbWFuYWdlbWVudCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0ODEsJy4vYXNzZXRzL2FwcF9pbmRleF9wYXR0ZXJuJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ4MiwnLi9hc3NldHMvYXBwX2luZGV4X3JvbGx1cCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0ODMsJy4vYXNzZXRzL2FwcF9sZW5zJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ4NCwnLi9hc3NldHMvYXBwX2xvZ3MnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDg1LCcuL2Fzc2V0cy9hcHBfbWFuYWdlbWVudCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0ODYsJy4vYXNzZXRzL2FwcF9tZXRyaWNiZWF0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ4NywnLi9hc3NldHMvYXBwX21ldHJpY3MnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDg4LCcuL2Fzc2V0cy9hcHBfbWwnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDg5LCcuL2Fzc2V0cy9hcHBfbW9uaXRvcmluZyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0OTAsJy4vYXNzZXRzL2FwcF9ub3RlYm9vayc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0OTEsJy4vYXNzZXRzL2FwcF9wYWNrZXRiZWF0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ5MiwnLi9hc3NldHMvYXBwX3BpcGVsaW5lJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ5MywnLi9hc3NldHMvYXBwX3JlY2VudGx5X3ZpZXdlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0OTQsJy4vYXNzZXRzL2FwcF9yZXBvcnRpbmcnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDk1LCcuL2Fzc2V0cy9hcHBfc2F2ZWRfb2JqZWN0cyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0OTYsJy4vYXNzZXRzL2FwcF9zZWFyY2hfcHJvZmlsZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlNDk3LCcuL2Fzc2V0cy9hcHBfc2VjdXJpdHknOl9EeW5hbWljSW1wb3J0TW9kdWxlNDk4LCcuL2Fzc2V0cy9hcHBfc2VjdXJpdHlfYW5hbHl0aWNzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ5OSwnLi9hc3NldHMvYXBwX3NwYWNlcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MDAsJy4vYXNzZXRzL2FwcF9zcWwnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTAxLCcuL2Fzc2V0cy9hcHBfdGltZWxpb24nOl9EeW5hbWljSW1wb3J0TW9kdWxlNTAyLCcuL2Fzc2V0cy9hcHBfdXBncmFkZV9hc3Npc3RhbnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTAzLCcuL2Fzc2V0cy9hcHBfdXB0aW1lJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUwNCwnLi9hc3NldHMvYXBwX3VzZXJzX3JvbGVzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUwNSwnLi9hc3NldHMvYXBwX3Zpc3VhbGl6ZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MDYsJy4vYXNzZXRzL2FwcF93YXRjaGVzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUwNywnLi9hc3NldHMvYXBwX3dvcmtwbGFjZV9zZWFyY2gnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTA4LCcuL2Fzc2V0cy9hcHBzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUwOSwnLi9hc3NldHMvYXJyb3dFbmQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTEwLCcuL2Fzc2V0cy9hcnJvd1N0YXJ0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTUxMSwnLi9hc3NldHMvYXJyb3dfZG93bic6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MTIsJy4vYXNzZXRzL2Fycm93X2xlZnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTEzLCcuL2Fzc2V0cy9hcnJvd19yaWdodCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MTQsJy4vYXNzZXRzL2Fycm93X3VwJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUxNSwnLi9hc3NldHMvYXN0ZXJpc2snOl9EeW5hbWljSW1wb3J0TW9kdWxlNTE2LCcuL2Fzc2V0cy9iZWFrZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlNTE3LCcuL2Fzc2V0cy9iZWxsJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUxOCwnLi9hc3NldHMvYmVsbFNsYXNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUxOSwnLi9hc3NldHMvYm9sdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MjAsJy4vYXNzZXRzL2JveGVzX2hvcml6b250YWwnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTIxLCcuL2Fzc2V0cy9ib3hlc192ZXJ0aWNhbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MjIsJy4vYXNzZXRzL2JyYW5jaCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MjMsJy4vYXNzZXRzL2JyYW5jaFVzZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlNTI0LCcuL2Fzc2V0cy9icm9vbSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MjUsJy4vYXNzZXRzL2JydXNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUyNiwnLi9hc3NldHMvYnVnJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUyNywnLi9hc3NldHMvYnVsbHNleWUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTI4LCcuL2Fzc2V0cy9jYWxlbmRhcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MjksJy4vYXNzZXRzL2NoZWNrJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUzMCwnLi9hc3NldHMvY2hlY2tJbkNpcmNsZUZpbGxlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MzEsJy4vYXNzZXRzL2NoZWVyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUzMiwnLi9hc3NldHMvY2xvY2snOl9EeW5hbWljSW1wb3J0TW9kdWxlNTMzLCcuL2Fzc2V0cy9jbG91ZERyaXp6bGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTM0LCcuL2Fzc2V0cy9jbG91ZFN0b3JteSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MzUsJy4vYXNzZXRzL2Nsb3VkU3VubnknOl9EeW5hbWljSW1wb3J0TW9kdWxlNTM2LCcuL2Fzc2V0cy9jbHVzdGVyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUzNywnLi9hc3NldHMvY29sb3InOl9EeW5hbWljSW1wb3J0TW9kdWxlNTM4LCcuL2Fzc2V0cy9jb21wdXRlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUzOSwnLi9hc3NldHMvY29uc29sZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NDAsJy4vYXNzZXRzL2NvbnRhaW5lcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NDEsJy4vYXNzZXRzL2NvbnRpbnVpdHlBYm92ZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NDIsJy4vYXNzZXRzL2NvbnRpbnVpdHlBYm92ZUJlbG93JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU0MywnLi9hc3NldHMvY29udGludWl0eUJlbG93JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU0NCwnLi9hc3NldHMvY29udGludWl0eVdpdGhpbic6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NDUsJy4vYXNzZXRzL2NvbnRyb2xzX2hvcml6b250YWwnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTQ2LCcuL2Fzc2V0cy9jb250cm9sc192ZXJ0aWNhbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NDcsJy4vYXNzZXRzL2NvcHknOl9EeW5hbWljSW1wb3J0TW9kdWxlNTQ4LCcuL2Fzc2V0cy9jb3B5X2NsaXBib2FyZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NDksJy4vYXNzZXRzL2Nyb3NzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU1MCwnLi9hc3NldHMvY3Jvc3NJbkFDaXJjbGVGaWxsZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTUxLCcuL2Fzc2V0cy9jcm9zc2hhaXJzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU1MiwnLi9hc3NldHMvY3VycmVuY3knOl9EeW5hbWljSW1wb3J0TW9kdWxlNTUzLCcuL2Fzc2V0cy9jdXQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTU0LCcuL2Fzc2V0cy9kYXRhYmFzZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NTUsJy4vYXNzZXRzL2Rlc2t0b3AnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTU2LCcuL2Fzc2V0cy9kb2N1bWVudCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NTcsJy4vYXNzZXRzL2RvY3VtZW50RWRpdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NTgsJy4vYXNzZXRzL2RvY3VtZW50YXRpb24nOl9EeW5hbWljSW1wb3J0TW9kdWxlNTU5LCcuL2Fzc2V0cy9kb2N1bWVudHMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTYwLCcuL2Fzc2V0cy9kb3QnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTYxLCcuL2Fzc2V0cy9kb3VibGVBcnJvd0xlZnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTYyLCcuL2Fzc2V0cy9kb3VibGVBcnJvd1JpZ2h0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU2MywnLi9hc3NldHMvZG93bmxvYWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTY0LCcuL2Fzc2V0cy9lZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NjUsJy4vYXNzZXRzL2VkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NjYsJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnbkJvdHRvbSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NjcsJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnbkNlbnRlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NjgsJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnbkxlZnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTY5LCcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25NaWRkbGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTcwLCcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25SaWdodCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NzEsJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnblRvcCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NzIsJy4vYXNzZXRzL2VkaXRvclBvc2l0aW9uQm90dG9tTGVmdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NzMsJy4vYXNzZXRzL2VkaXRvclBvc2l0aW9uQm90dG9tUmlnaHQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTc0LCcuL2Fzc2V0cy9lZGl0b3JQb3NpdGlvblRvcExlZnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTc1LCcuL2Fzc2V0cy9lZGl0b3JQb3NpdGlvblRvcFJpZ2h0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU3NiwnLi9hc3NldHMvZWRpdG9yX2FsaWduX2NlbnRlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NzcsJy4vYXNzZXRzL2VkaXRvcl9hbGlnbl9sZWZ0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU3OCwnLi9hc3NldHMvZWRpdG9yX2FsaWduX3JpZ2h0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU3OSwnLi9hc3NldHMvZWRpdG9yX2JvbGQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTgwLCcuL2Fzc2V0cy9lZGl0b3JfY2hlY2tsaXN0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU4MSwnLi9hc3NldHMvZWRpdG9yX2NvZGVfYmxvY2snOl9EeW5hbWljSW1wb3J0TW9kdWxlNTgyLCcuL2Fzc2V0cy9lZGl0b3JfY29tbWVudCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1ODMsJy4vYXNzZXRzL2VkaXRvcl9oZWFkaW5nJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU4NCwnLi9hc3NldHMvZWRpdG9yX2l0YWxpYyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1ODUsJy4vYXNzZXRzL2VkaXRvcl9saW5rJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU4NiwnLi9hc3NldHMvZWRpdG9yX29yZGVyZWRfbGlzdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1ODcsJy4vYXNzZXRzL2VkaXRvcl9yZWRvJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU4OCwnLi9hc3NldHMvZWRpdG9yX3N0cmlrZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1ODksJy4vYXNzZXRzL2VkaXRvcl90YWJsZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1OTAsJy4vYXNzZXRzL2VkaXRvcl91bmRlcmxpbmUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTkxLCcuL2Fzc2V0cy9lZGl0b3JfdW5kbyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1OTIsJy4vYXNzZXRzL2VkaXRvcl91bm9yZGVyZWRfbGlzdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1OTMsJy4vYXNzZXRzL2VtYWlsJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU5NCwnLi9hc3NldHMvZW1wdHknOl9EeW5hbWljSW1wb3J0TW9kdWxlNTk1LCcuL2Fzc2V0cy9lcWwnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTk2LCcuL2Fzc2V0cy9lcmFzZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlNTk3LCcuL2Fzc2V0cy9leGl0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU5OCwnLi9hc3NldHMvZXhwYW5kJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU5OSwnLi9hc3NldHMvZXhwYW5kTWluaSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MDAsJy4vYXNzZXRzL2V4cG9ydCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MDEsJy4vYXNzZXRzL2V5ZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MDIsJy4vYXNzZXRzL2V5ZV9jbG9zZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjAzLCcuL2Fzc2V0cy9mYWNlX2hhcHB5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTYwNCwnLi9hc3NldHMvZmFjZV9uZXV0cmFsJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYwNSwnLi9hc3NldHMvZmFjZV9zYWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjA2LCcuL2Fzc2V0cy9maWx0ZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlNjA3LCcuL2Fzc2V0cy9mbGFnJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYwOCwnLi9hc3NldHMvZm9sZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MDksJy4vYXNzZXRzL2ZvbGRlcl9jaGVjayc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MTAsJy4vYXNzZXRzL2ZvbGRlcl9jbG9zZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjExLCcuL2Fzc2V0cy9mb2xkZXJfZXhjbGFtYXRpb24nOl9EeW5hbWljSW1wb3J0TW9kdWxlNjEyLCcuL2Fzc2V0cy9mb2xkZXJfb3Blbic6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MTMsJy4vYXNzZXRzL2ZyYW1lTmV4dCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MTQsJy4vYXNzZXRzL2ZyYW1lUHJldmlvdXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjE1LCcuL2Fzc2V0cy9mdWxsU2NyZWVuRXhpdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MTYsJy4vYXNzZXRzL2Z1bGxfc2NyZWVuJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYxNywnLi9hc3NldHMvZnVuY3Rpb24nOl9EeW5hbWljSW1wb3J0TW9kdWxlNjE4LCcuL2Fzc2V0cy9nZWFyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYxOSwnLi9hc3NldHMvZ2xhc3Nlcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MjAsJy4vYXNzZXRzL2dsb2JlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYyMSwnLi9hc3NldHMvZ3JhYic6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MjIsJy4vYXNzZXRzL2dyYWJfaG9yaXpvbnRhbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MjMsJy4vYXNzZXRzL2dyaWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjI0LCcuL2Fzc2V0cy9oZWFydCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MjUsJy4vYXNzZXRzL2hlYXRtYXAnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjI2LCcuL2Fzc2V0cy9oZWxwJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYyNywnLi9hc3NldHMvaG9tZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MjgsJy4vYXNzZXRzL2lJbkNpcmNsZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MjksJy4vYXNzZXRzL2ltYWdlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYzMCwnLi9hc3NldHMvaW1wb3J0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTYzMSwnLi9hc3NldHMvaW5kZXhfY2xvc2UnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjMyLCcuL2Fzc2V0cy9pbmRleF9lZGl0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTYzMywnLi9hc3NldHMvaW5kZXhfZmx1c2gnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjM0LCcuL2Fzc2V0cy9pbmRleF9tYXBwaW5nJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYzNSwnLi9hc3NldHMvaW5kZXhfb3Blbic6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MzYsJy4vYXNzZXRzL2luZGV4X3J1bnRpbWUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjM3LCcuL2Fzc2V0cy9pbmRleF9zZXR0aW5ncyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MzgsJy4vYXNzZXRzL2lucHV0T3V0cHV0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTYzOSwnLi9hc3NldHMvaW5zcGVjdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NDAsJy4vYXNzZXRzL2ludmVydCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NDEsJy4vYXNzZXRzL2lwJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY0MiwnLi9hc3NldHMva2V5Ym9hcmQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjQzLCcuL2Fzc2V0cy9rcWxfZmllbGQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjQ0LCcuL2Fzc2V0cy9rcWxfZnVuY3Rpb24nOl9EeW5hbWljSW1wb3J0TW9kdWxlNjQ1LCcuL2Fzc2V0cy9rcWxfb3BlcmFuZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NDYsJy4vYXNzZXRzL2txbF9zZWxlY3Rvcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NDcsJy4vYXNzZXRzL2txbF92YWx1ZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NDgsJy4vYXNzZXRzL2t1YmVybmV0ZXNOb2RlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY0OSwnLi9hc3NldHMva3ViZXJuZXRlc1BvZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NTAsJy4vYXNzZXRzL2xheWVycyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NTEsJy4vYXNzZXRzL2xldHRlcmluZyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NTIsJy4vYXNzZXRzL2xpbmVEYXNoZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjUzLCcuL2Fzc2V0cy9saW5lRG90dGVkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY1NCwnLi9hc3NldHMvbGluZVNvbGlkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY1NSwnLi9hc3NldHMvbGluayc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NTYsJy4vYXNzZXRzL2xpc3QnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjU3LCcuL2Fzc2V0cy9saXN0X2FkZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NTgsJy4vYXNzZXRzL2xvY2snOl9EeW5hbWljSW1wb3J0TW9kdWxlNjU5LCcuL2Fzc2V0cy9sb2NrT3Blbic6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NjAsJy4vYXNzZXRzL2xvZ29fYWVyb3NwaWtlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY2MSwnLi9hc3NldHMvbG9nb19hcGFjaGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjYyLCcuL2Fzc2V0cy9sb2dvX2FwcF9zZWFyY2gnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjYzLCcuL2Fzc2V0cy9sb2dvX2F3cyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NjQsJy4vYXNzZXRzL2xvZ29fYXdzX21vbm8nOl9EeW5hbWljSW1wb3J0TW9kdWxlNjY1LCcuL2Fzc2V0cy9sb2dvX2F6dXJlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY2NiwnLi9hc3NldHMvbG9nb19henVyZV9tb25vJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY2NywnLi9hc3NldHMvbG9nb19iZWF0cyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NjgsJy4vYXNzZXRzL2xvZ29fYnVzaW5lc3NfYW5hbHl0aWNzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY2OSwnLi9hc3NldHMvbG9nb19jZXBoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY3MCwnLi9hc3NldHMvbG9nb19jbG91ZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NzEsJy4vYXNzZXRzL2xvZ29fY2xvdWRfZWNlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY3MiwnLi9hc3NldHMvbG9nb19jb2RlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY3MywnLi9hc3NldHMvbG9nb19jb2Rlc2FuZGJveCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NzQsJy4vYXNzZXRzL2xvZ29fY291Y2hiYXNlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY3NSwnLi9hc3NldHMvbG9nb19kb2NrZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlNjc2LCcuL2Fzc2V0cy9sb2dvX2Ryb3B3aXphcmQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjc3LCcuL2Fzc2V0cy9sb2dvX2VsYXN0aWMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjc4LCcuL2Fzc2V0cy9sb2dvX2VsYXN0aWNfc3RhY2snOl9EeW5hbWljSW1wb3J0TW9kdWxlNjc5LCcuL2Fzc2V0cy9sb2dvX2VsYXN0aWNzZWFyY2gnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjgwLCcuL2Fzc2V0cy9sb2dvX2VudGVycHJpc2Vfc2VhcmNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY4MSwnLi9hc3NldHMvbG9nb19ldGNkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY4MiwnLi9hc3NldHMvbG9nb19nY3AnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjgzLCcuL2Fzc2V0cy9sb2dvX2djcF9tb25vJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY4NCwnLi9hc3NldHMvbG9nb19naXRodWInOl9EeW5hbWljSW1wb3J0TW9kdWxlNjg1LCcuL2Fzc2V0cy9sb2dvX2dtYWlsJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY4NiwnLi9hc3NldHMvbG9nb19nb2xhbmcnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjg3LCcuL2Fzc2V0cy9sb2dvX2dvb2dsZV9nJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY4OCwnLi9hc3NldHMvbG9nb19oYXByb3h5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTY4OSwnLi9hc3NldHMvbG9nb19pYm0nOl9EeW5hbWljSW1wb3J0TW9kdWxlNjkwLCcuL2Fzc2V0cy9sb2dvX2libV9tb25vJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY5MSwnLi9hc3NldHMvbG9nb19rYWZrYSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2OTIsJy4vYXNzZXRzL2xvZ29fa2liYW5hJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY5MywnLi9hc3NldHMvbG9nb19rdWJlcm5ldGVzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY5NCwnLi9hc3NldHMvbG9nb19sb2dnaW5nJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY5NSwnLi9hc3NldHMvbG9nb19sb2dzdGFzaCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2OTYsJy4vYXNzZXRzL2xvZ29fbWFwcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2OTcsJy4vYXNzZXRzL2xvZ29fbWVtY2FjaGVkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY5OCwnLi9hc3NldHMvbG9nb19tZXRyaWNzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY5OSwnLi9hc3NldHMvbG9nb19tb25nb2RiJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcwMCwnLi9hc3NldHMvbG9nb19teXNxbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MDEsJy4vYXNzZXRzL2xvZ29fbmdpbngnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzAyLCcuL2Fzc2V0cy9sb2dvX29ic2VydmFiaWxpdHknOl9EeW5hbWljSW1wb3J0TW9kdWxlNzAzLCcuL2Fzc2V0cy9sb2dvX29zcXVlcnknOl9EeW5hbWljSW1wb3J0TW9kdWxlNzA0LCcuL2Fzc2V0cy9sb2dvX3BocCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MDUsJy4vYXNzZXRzL2xvZ29fcG9zdGdyZXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzA2LCcuL2Fzc2V0cy9sb2dvX3Byb21ldGhldXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzA3LCcuL2Fzc2V0cy9sb2dvX3JhYmJpdG1xJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcwOCwnLi9hc3NldHMvbG9nb19yZWRpcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MDksJy4vYXNzZXRzL2xvZ29fc2VjdXJpdHknOl9EeW5hbWljSW1wb3J0TW9kdWxlNzEwLCcuL2Fzc2V0cy9sb2dvX3NpdGVfc2VhcmNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcxMSwnLi9hc3NldHMvbG9nb19za2V0Y2gnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzEyLCcuL2Fzc2V0cy9sb2dvX3NsYWNrJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcxMywnLi9hc3NldHMvbG9nb191cHRpbWUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzE0LCcuL2Fzc2V0cy9sb2dvX3dlYmhvb2snOl9EeW5hbWljSW1wb3J0TW9kdWxlNzE1LCcuL2Fzc2V0cy9sb2dvX3dpbmRvd3MnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzE2LCcuL2Fzc2V0cy9sb2dvX3dvcmtwbGFjZV9zZWFyY2gnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzE3LCcuL2Fzc2V0cy9sb2dzdGFzaF9maWx0ZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlNzE4LCcuL2Fzc2V0cy9sb2dzdGFzaF9pZic6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MTksJy4vYXNzZXRzL2xvZ3N0YXNoX2lucHV0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTcyMCwnLi9hc3NldHMvbG9nc3Rhc2hfb3V0cHV0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTcyMSwnLi9hc3NldHMvbG9nc3Rhc2hfcXVldWUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzIyLCcuL2Fzc2V0cy9tYWduZXQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzIzLCcuL2Fzc2V0cy9tYWduaWZ5V2l0aEV4Y2xhbWF0aW9uJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcyNCwnLi9hc3NldHMvbWFnbmlmeVdpdGhNaW51cyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MjUsJy4vYXNzZXRzL21hZ25pZnlXaXRoUGx1cyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MjYsJy4vYXNzZXRzL21hcF9tYXJrZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlNzI3LCcuL2Fzc2V0cy9tZW1vcnknOl9EeW5hbWljSW1wb3J0TW9kdWxlNzI4LCcuL2Fzc2V0cy9tZW51JzpfRHluYW1pY0ltcG9ydE1vZHVsZTcyOSwnLi9hc3NldHMvbWVudURvd24nOl9EeW5hbWljSW1wb3J0TW9kdWxlNzMwLCcuL2Fzc2V0cy9tZW51TGVmdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MzEsJy4vYXNzZXRzL21lbnVSaWdodCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MzIsJy4vYXNzZXRzL21lbnVVcCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MzMsJy4vYXNzZXRzL21lcmdlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTczNCwnLi9hc3NldHMvbWluaW1pemUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzM1LCcuL2Fzc2V0cy9taW51cyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MzYsJy4vYXNzZXRzL21pbnVzX2luX2NpcmNsZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MzcsJy4vYXNzZXRzL21pbnVzX2luX2NpcmNsZV9maWxsZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzM4LCcuL2Fzc2V0cy9tbF9jbGFzc2lmaWNhdGlvbl9qb2InOl9EeW5hbWljSW1wb3J0TW9kdWxlNzM5LCcuL2Fzc2V0cy9tbF9jcmVhdGVfYWR2YW5jZWRfam9iJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc0MCwnLi9hc3NldHMvbWxfY3JlYXRlX211bHRpX21ldHJpY19qb2InOl9EeW5hbWljSW1wb3J0TW9kdWxlNzQxLCcuL2Fzc2V0cy9tbF9jcmVhdGVfcG9wdWxhdGlvbl9qb2InOl9EeW5hbWljSW1wb3J0TW9kdWxlNzQyLCcuL2Fzc2V0cy9tbF9jcmVhdGVfc2luZ2xlX21ldHJpY19qb2InOl9EeW5hbWljSW1wb3J0TW9kdWxlNzQzLCcuL2Fzc2V0cy9tbF9kYXRhX3Zpc3VhbGl6ZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlNzQ0LCcuL2Fzc2V0cy9tbF9vdXRsaWVyX2RldGVjdGlvbl9qb2InOl9EeW5hbWljSW1wb3J0TW9kdWxlNzQ1LCcuL2Fzc2V0cy9tbF9yZWdyZXNzaW9uX2pvYic6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NDYsJy4vYXNzZXRzL21vYmlsZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NDcsJy4vYXNzZXRzL21vb24nOl9EeW5hbWljSW1wb3J0TW9kdWxlNzQ4LCcuL2Fzc2V0cy9uYW1lc3BhY2UnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzQ5LCcuL2Fzc2V0cy9uZXN0ZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzUwLCcuL2Fzc2V0cy9ub2RlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc1MSwnLi9hc3NldHMvbnVtYmVyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc1MiwnLi9hc3NldHMvb2ZmbGluZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NTMsJy4vYXNzZXRzL29ubGluZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NTQsJy4vYXNzZXRzL3BhY2thZ2UnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzU1LCcuL2Fzc2V0cy9wYWdlU2VsZWN0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTc1NiwnLi9hc3NldHMvcGFnZXNTZWxlY3QnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzU3LCcuL2Fzc2V0cy9wYWludCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NTgsJy4vYXNzZXRzL3BhcGVyX2NsaXAnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzU5LCcuL2Fzc2V0cy9wYXJ0aWFsJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc2MCwnLi9hc3NldHMvcGF1c2UnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzYxLCcuL2Fzc2V0cy9wYXltZW50JzpfRHluYW1pY0ltcG9ydE1vZHVsZTc2MiwnLi9hc3NldHMvcGVuY2lsJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc2MywnLi9hc3NldHMvcGVyY2VudCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NjQsJy4vYXNzZXRzL3Bpbic6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NjUsJy4vYXNzZXRzL3Bpbl9maWxsZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzY2LCcuL2Fzc2V0cy9wbGF5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTc2NywnLi9hc3NldHMvcGxheUZpbGxlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NjgsJy4vYXNzZXRzL3BsdXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzY5LCcuL2Fzc2V0cy9wbHVzX2luX2NpcmNsZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NzAsJy4vYXNzZXRzL3BsdXNfaW5fY2lyY2xlX2ZpbGxlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NzEsJy4vYXNzZXRzL3BvcG91dCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NzIsJy4vYXNzZXRzL3B1c2gnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzczLCcuL2Fzc2V0cy9xdWVzdGlvbl9pbl9jaXJjbGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzc0LCcuL2Fzc2V0cy9xdW90ZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NzUsJy4vYXNzZXRzL3JlZnJlc2gnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzc2LCcuL2Fzc2V0cy9yZXBvcnRlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NzcsJy4vYXNzZXRzL3JldHVybl9rZXknOl9EeW5hbWljSW1wb3J0TW9kdWxlNzc4LCcuL2Fzc2V0cy9zYXZlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc3OSwnLi9hc3NldHMvc2NhbGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzgwLCcuL2Fzc2V0cy9zZWFyY2gnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzgxLCcuL2Fzc2V0cy9zZWN1cml0eVNpZ25hbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3ODIsJy4vYXNzZXRzL3NlY3VyaXR5U2lnbmFsRGV0ZWN0ZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzgzLCcuL2Fzc2V0cy9zZWN1cml0eVNpZ25hbFJlc29sdmVkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc4NCwnLi9hc3NldHMvc2Vzc2lvblZpZXdlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU3ODUsJy4vYXNzZXRzL3NoYXJkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc4NiwnLi9hc3NldHMvc2hhcmUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzg3LCcuL2Fzc2V0cy9zbm93Zmxha2UnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzg4LCcuL2Fzc2V0cy9zb3J0TGVmdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3ODksJy4vYXNzZXRzL3NvcnRSaWdodCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3OTAsJy4vYXNzZXRzL3NvcnRfZG93bic6X0R5bmFtaWNJbXBvcnRNb2R1bGU3OTEsJy4vYXNzZXRzL3NvcnRfdXAnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzkyLCcuL2Fzc2V0cy9zb3J0YWJsZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3OTMsJy4vYXNzZXRzL3N0YXJQbHVzRW1wdHknOl9EeW5hbWljSW1wb3J0TW9kdWxlNzk0LCcuL2Fzc2V0cy9zdGFyUGx1c0ZpbGxlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3OTUsJy4vYXNzZXRzL3N0YXJfZW1wdHknOl9EeW5hbWljSW1wb3J0TW9kdWxlNzk2LCcuL2Fzc2V0cy9zdGFyX2VtcHR5X3NwYWNlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc5NywnLi9hc3NldHMvc3Rhcl9maWxsZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzk4LCcuL2Fzc2V0cy9zdGFyX2ZpbGxlZF9zcGFjZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3OTksJy4vYXNzZXRzL3N0YXJfbWludXNfZW1wdHknOl9EeW5hbWljSW1wb3J0TW9kdWxlODAwLCcuL2Fzc2V0cy9zdGFyX21pbnVzX2ZpbGxlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MDEsJy4vYXNzZXRzL3N0YXRzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgwMiwnLi9hc3NldHMvc3RvcCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MDMsJy4vYXNzZXRzL3N0b3BfZmlsbGVkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgwNCwnLi9hc3NldHMvc3RvcF9zbGFzaCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MDUsJy4vYXNzZXRzL3N0b3JhZ2UnOl9EeW5hbWljSW1wb3J0TW9kdWxlODA2LCcuL2Fzc2V0cy9zdHJpbmcnOl9EeW5hbWljSW1wb3J0TW9kdWxlODA3LCcuL2Fzc2V0cy9zdWJtb2R1bGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlODA4LCcuL2Fzc2V0cy9zdW4nOl9EeW5hbWljSW1wb3J0TW9kdWxlODA5LCcuL2Fzc2V0cy9zd2F0Y2hfaW5wdXQnOl9EeW5hbWljSW1wb3J0TW9kdWxlODEwLCcuL2Fzc2V0cy9zeW1saW5rJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgxMSwnLi9hc3NldHMvdGFibGVPZkNvbnRlbnRzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgxMiwnLi9hc3NldHMvdGFibGVfZGVuc2l0eV9jb21wYWN0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTgxMywnLi9hc3NldHMvdGFibGVfZGVuc2l0eV9leHBhbmRlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MTQsJy4vYXNzZXRzL3RhYmxlX2RlbnNpdHlfbm9ybWFsJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgxNSwnLi9hc3NldHMvdGFnJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgxNiwnLi9hc3NldHMvdGVhcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MTcsJy4vYXNzZXRzL3RlbXBlcmF0dXJlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgxOCwnLi9hc3NldHMvdGltZVJlZnJlc2gnOl9EeW5hbWljSW1wb3J0TW9kdWxlODE5LCcuL2Fzc2V0cy90aW1lbGluZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MjAsJy4vYXNzZXRzL3RpbWVzbGlkZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlODIxLCcuL2Fzc2V0cy90b2tlbkFsaWFzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgyMiwnLi9hc3NldHMvdG9rZW5Bbm5vdGF0aW9uJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgyMywnLi9hc3NldHMvdG9rZW5BcnJheSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MjQsJy4vYXNzZXRzL3Rva2VuQmluYXJ5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTgyNSwnLi9hc3NldHMvdG9rZW5Cb29sZWFuJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgyNiwnLi9hc3NldHMvdG9rZW5DbGFzcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MjcsJy4vYXNzZXRzL3Rva2VuQ29tcGxldGlvblN1Z2dlc3Rlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MjgsJy4vYXNzZXRzL3Rva2VuQ29uc3RhbnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlODI5LCcuL2Fzc2V0cy90b2tlbkRhdGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlODMwLCcuL2Fzc2V0cy90b2tlbkRlbnNlVmVjdG9yJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgzMSwnLi9hc3NldHMvdG9rZW5FbGVtZW50JzpfRHluYW1pY0ltcG9ydE1vZHVsZTgzMiwnLi9hc3NldHMvdG9rZW5FbnVtJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgzMywnLi9hc3NldHMvdG9rZW5FbnVtTWVtYmVyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgzNCwnLi9hc3NldHMvdG9rZW5FdmVudCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MzUsJy4vYXNzZXRzL3Rva2VuRXhjZXB0aW9uJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgzNiwnLi9hc3NldHMvdG9rZW5GaWVsZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MzcsJy4vYXNzZXRzL3Rva2VuRmlsZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MzgsJy4vYXNzZXRzL3Rva2VuRmxhdHRlbmVkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgzOSwnLi9hc3NldHMvdG9rZW5GdW5jdGlvbic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NDAsJy4vYXNzZXRzL3Rva2VuR2VvJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg0MSwnLi9hc3NldHMvdG9rZW5IaXN0b2dyYW0nOl9EeW5hbWljSW1wb3J0TW9kdWxlODQyLCcuL2Fzc2V0cy90b2tlbklQJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg0MywnLi9hc3NldHMvdG9rZW5JbnRlcmZhY2UnOl9EeW5hbWljSW1wb3J0TW9kdWxlODQ0LCcuL2Fzc2V0cy90b2tlbkpvaW4nOl9EeW5hbWljSW1wb3J0TW9kdWxlODQ1LCcuL2Fzc2V0cy90b2tlbktleSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NDYsJy4vYXNzZXRzL3Rva2VuS2V5d29yZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NDcsJy4vYXNzZXRzL3Rva2VuTWV0aG9kJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg0OCwnLi9hc3NldHMvdG9rZW5NZXRyaWNDb3VudGVyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg0OSwnLi9hc3NldHMvdG9rZW5NZXRyaWNHYXVnZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NTAsJy4vYXNzZXRzL3Rva2VuTW9kdWxlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg1MSwnLi9hc3NldHMvdG9rZW5OYW1lc3BhY2UnOl9EeW5hbWljSW1wb3J0TW9kdWxlODUyLCcuL2Fzc2V0cy90b2tlbk5lc3RlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NTMsJy4vYXNzZXRzL3Rva2VuTnVsbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NTQsJy4vYXNzZXRzL3Rva2VuTnVtYmVyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg1NSwnLi9hc3NldHMvdG9rZW5PYmplY3QnOl9EeW5hbWljSW1wb3J0TW9kdWxlODU2LCcuL2Fzc2V0cy90b2tlbk9wZXJhdG9yJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg1NywnLi9hc3NldHMvdG9rZW5QYWNrYWdlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg1OCwnLi9hc3NldHMvdG9rZW5QYXJhbWV0ZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlODU5LCcuL2Fzc2V0cy90b2tlblBlcmNvbGF0b3InOl9EeW5hbWljSW1wb3J0TW9kdWxlODYwLCcuL2Fzc2V0cy90b2tlblByb3BlcnR5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTg2MSwnLi9hc3NldHMvdG9rZW5SYW5nZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NjIsJy4vYXNzZXRzL3Rva2VuUmFua0ZlYXR1cmUnOl9EeW5hbWljSW1wb3J0TW9kdWxlODYzLCcuL2Fzc2V0cy90b2tlblJhbmtGZWF0dXJlcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NjQsJy4vYXNzZXRzL3Rva2VuUmVwbyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NjUsJy4vYXNzZXRzL3Rva2VuU2VhcmNoVHlwZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NjYsJy4vYXNzZXRzL3Rva2VuU2hhcGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlODY3LCcuL2Fzc2V0cy90b2tlblN0cmluZyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NjgsJy4vYXNzZXRzL3Rva2VuU3RydWN0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTg2OSwnLi9hc3NldHMvdG9rZW5TeW1ib2wnOl9EeW5hbWljSW1wb3J0TW9kdWxlODcwLCcuL2Fzc2V0cy90b2tlblRhZyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NzEsJy4vYXNzZXRzL3Rva2VuVGV4dCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NzIsJy4vYXNzZXRzL3Rva2VuVG9rZW5Db3VudCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NzMsJy4vYXNzZXRzL3Rva2VuVmFyaWFibGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlODc0LCcuL2Fzc2V0cy90cmFpbmluZyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NzUsJy4vYXNzZXRzL3RyYXNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg3NiwnLi9hc3NldHMvdW5mb2xkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg3NywnLi9hc3NldHMvdW5saW5rJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg3OCwnLi9hc3NldHMvdXNlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NzksJy4vYXNzZXRzL3VzZXJBdmF0YXInOl9EeW5hbWljSW1wb3J0TW9kdWxlODgwLCcuL2Fzc2V0cy91c2Vycyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4ODEsJy4vYXNzZXRzL3ZlY3Rvcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4ODIsJy4vYXNzZXRzL3ZpZGVvUGxheWVyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg4MywnLi9hc3NldHMvdmlzX2FyZWEnOl9EeW5hbWljSW1wb3J0TW9kdWxlODg0LCcuL2Fzc2V0cy92aXNfYXJlYV9zdGFja2VkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg4NSwnLi9hc3NldHMvdmlzX2Jhcl9ob3Jpem9udGFsJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg4NiwnLi9hc3NldHMvdmlzX2Jhcl9ob3Jpem9udGFsX3N0YWNrZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlODg3LCcuL2Fzc2V0cy92aXNfYmFyX3ZlcnRpY2FsJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg4OCwnLi9hc3NldHMvdmlzX2Jhcl92ZXJ0aWNhbF9zdGFja2VkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg4OSwnLi9hc3NldHMvdmlzX2dhdWdlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg5MCwnLi9hc3NldHMvdmlzX2dvYWwnOl9EeW5hbWljSW1wb3J0TW9kdWxlODkxLCcuL2Fzc2V0cy92aXNfbGluZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4OTIsJy4vYXNzZXRzL3Zpc19tYXBfY29vcmRpbmF0ZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4OTMsJy4vYXNzZXRzL3Zpc19tYXBfcmVnaW9uJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg5NCwnLi9hc3NldHMvdmlzX21ldHJpYyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4OTUsJy4vYXNzZXRzL3Zpc19waWUnOl9EeW5hbWljSW1wb3J0TW9kdWxlODk2LCcuL2Fzc2V0cy92aXNfdGFibGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlODk3LCcuL2Fzc2V0cy92aXNfdGFnX2Nsb3VkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg5OCwnLi9hc3NldHMvdmlzX3RleHQnOl9EeW5hbWljSW1wb3J0TW9kdWxlODk5LCcuL2Fzc2V0cy92aXNfdGltZWxpb24nOl9EeW5hbWljSW1wb3J0TW9kdWxlOTAwLCcuL2Fzc2V0cy92aXNfdmVnYSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MDEsJy4vYXNzZXRzL3Zpc192aXN1YWxfYnVpbGRlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MDIsJy4vYXNzZXRzL3dvcmRXcmFwJzpfRHluYW1pY0ltcG9ydE1vZHVsZTkwMywnLi9hc3NldHMvd29yZFdyYXBEaXNhYmxlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MDQsJy4vYXNzZXRzL3dyZW5jaCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MDV9O1xuZnVuY3Rpb24gX0R5bmFtaWNJbXBvcnQocGF0aCkge2NvbnN0IG1vZD1fRHluYW1pY0ltcG9ydE1vZHVsZU1hcFtwYXRoXTttb2RbU3ltYm9sLnRvU3RyaW5nVGFnXT0nTW9kdWxlJztyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1vZCk7IH1cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxudmFyIF9leGNsdWRlZCA9IFtcInR5cGVcIiwgXCJzaXplXCIsIFwiY29sb3JcIiwgXCJjbGFzc05hbWVcIiwgXCJ0YWJJbmRleFwiLCBcInRpdGxlXCIsIFwib25JY29uTG9hZFwiLCBcInRoZW1lXCIsIFwic3R5bGVcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgUHVyZUNvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsga2V5c09mIH0gZnJvbSAnLi4vY29tbW9uJztcbmltcG9ydCB7IHR5cGVUb1BhdGhNYXAgfSBmcm9tICcuL2ljb25fbWFwJztcbmltcG9ydCB7IGljb24gYXMgZW1wdHkgfSBmcm9tICcuL2Fzc2V0cy9lbXB0eSc7XG5pbXBvcnQgeyBlbnF1ZXVlU3RhdGVDaGFuZ2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZWFjdCc7XG5pbXBvcnQgeyBodG1sSWRHZW5lcmF0b3IsIHdpdGhFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmV4cG9ydCB7IENPTE9SUyB9IGZyb20gJy4vbmFtZWRfY29sb3JzJztcbmltcG9ydCB7IGlzTmFtZWRDb2xvciB9IGZyb20gJy4vbmFtZWRfY29sb3JzJztcbmltcG9ydCB7IGV1aUljb25TdHlsZXMgfSBmcm9tICcuL2ljb24uc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBnZXRJc0FwcEljb24gPSBmdW5jdGlvbiBnZXRJc0FwcEljb24oaWNvblR5cGUpIHtcbiAgaWYgKHR5cGVvZiBpY29uVHlwZSAhPT0gJ3N0cmluZycpIHJldHVybiBmYWxzZTtcbiAgaWYgKGljb25UeXBlID09PSAnZGF0YVZpc3VhbGl6ZXInKSByZXR1cm4gdHJ1ZTsgLy8gU3BlY2lhbCBjYXNlXG5cbiAgaWYgKGljb25UeXBlLmluZGV4T2YoJ2RhdGE6JykgPT09IDApIHJldHVybiBmYWxzZTsgLy8gSW5saW5lIGRhdGEgVVJJcyBzaG91bGQgYmUgc2hvcnQtY2lyY3VpdGVkIGZvciBwZXJmb3JtYW5jZVxuXG4gIHJldHVybiBpY29uVHlwZS5lbmRzV2l0aCgnQXBwJykgfHwgaWNvblR5cGUuZW5kc1dpdGgoJ0pvYicpO1xufTtcblxuZXhwb3J0IHZhciBUWVBFUyA9IGtleXNPZih0eXBlVG9QYXRoTWFwKTtcbmV4cG9ydCB2YXIgU0laRVMgPSBbJ29yaWdpbmFsJywgJ3MnLCAnbScsICdsJywgJ3hsJywgJ3h4bCddO1xuXG5mdW5jdGlvbiBpc0V1aUljb25UeXBlKHgpIHtcbiAgcmV0dXJuIHR5cGVvZiB4ID09PSAnc3RyaW5nJyAmJiB0eXBlVG9QYXRoTWFwLmhhc093blByb3BlcnR5KHgpO1xufVxuXG5mdW5jdGlvbiBnZXRJbml0aWFsSWNvbihpY29uKSB7XG4gIGlmIChpY29uID09IG51bGwpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKGlzRXVpSWNvblR5cGUoaWNvbikpIHtcbiAgICBpZiAoaWNvbkNvbXBvbmVudENhY2hlLmhhc093blByb3BlcnR5KGljb24pKSB7XG4gICAgICByZXR1cm4gaWNvbkNvbXBvbmVudENhY2hlW2ljb25dO1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4gaWNvbjtcbn1cblxudmFyIGdlbmVyYXRlSWQgPSBodG1sSWRHZW5lcmF0b3IoKTtcbnZhciBpY29uQ29tcG9uZW50Q2FjaGUgPSB7fTtcbmV4cG9ydCB2YXIgY2xlYXJJY29uQ29tcG9uZW50Q2FjaGUgPSBmdW5jdGlvbiBjbGVhckljb25Db21wb25lbnRDYWNoZShpY29uVHlwZSkge1xuICBpZiAoaWNvblR5cGUgIT0gbnVsbCkge1xuICAgIGRlbGV0ZSBpY29uQ29tcG9uZW50Q2FjaGVbaWNvblR5cGVdO1xuICB9IGVsc2Uge1xuICAgIGljb25Db21wb25lbnRDYWNoZSA9IHt9O1xuICB9XG59O1xuZXhwb3J0IHZhciBhcHBlbmRJY29uQ29tcG9uZW50Q2FjaGUgPSBmdW5jdGlvbiBhcHBlbmRJY29uQ29tcG9uZW50Q2FjaGUoaWNvblR5cGVUb0ljb25Db21wb25lbnRNYXApIHtcbiAgZm9yICh2YXIgX2ljb25UeXBlIGluIGljb25UeXBlVG9JY29uQ29tcG9uZW50TWFwKSB7XG4gICAgaWYgKGljb25UeXBlVG9JY29uQ29tcG9uZW50TWFwLmhhc093blByb3BlcnR5KF9pY29uVHlwZSkpIHtcbiAgICAgIGljb25Db21wb25lbnRDYWNoZVtfaWNvblR5cGVdID0gaWNvblR5cGVUb0ljb25Db21wb25lbnRNYXBbX2ljb25UeXBlXTtcbiAgICB9XG4gIH1cbn07XG5leHBvcnQgdmFyIEV1aUljb25DbGFzcyA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1B1cmVDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEV1aUljb25DbGFzcywgX1B1cmVDb21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoRXVpSWNvbkNsYXNzKTtcblxuICBmdW5jdGlvbiBFdWlJY29uQ2xhc3MocHJvcHMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpSWNvbkNsYXNzKTtcblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgcHJvcHMpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImlzTW91bnRlZFwiLCB0cnVlKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJsb2FkSWNvbkNvbXBvbmVudFwiLCBmdW5jdGlvbiAoaWNvblR5cGUpIHtcbiAgICAgIGlmIChpY29uQ29tcG9uZW50Q2FjaGUuaGFzT3duUHJvcGVydHkoaWNvblR5cGUpKSB7XG4gICAgICAgIC8vIGV4aXN0cyBpbiBjYWNoZVxuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICBuZWVkZWRMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICBpY29uOiBpY29uQ29tcG9uZW50Q2FjaGVbaWNvblR5cGVdXG4gICAgICAgIH0pO1xuXG4gICAgICAgIF90aGlzLm9uSWNvbkxvYWQoKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIF9EeW5hbWljSW1wb3J0KGAuL2Fzc2V0cy8ke3R5cGVUb1BhdGhNYXBbaWNvblR5cGVdfWApLnRoZW4oZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgICAgdmFyIGljb24gPSBfcmVmLmljb247XG4gICAgICAgIGljb25Db21wb25lbnRDYWNoZVtpY29uVHlwZV0gPSBpY29uO1xuICAgICAgICBlbnF1ZXVlU3RhdGVDaGFuZ2UoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChfdGhpcy5pc01vdW50ZWQgJiYgX3RoaXMucHJvcHMudHlwZSA9PT0gaWNvblR5cGUpIHtcbiAgICAgICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgaWNvbjogaWNvbixcbiAgICAgICAgICAgICAgaWNvblRpdGxlOiBpY29uVHlwZSxcbiAgICAgICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZVxuICAgICAgICAgICAgfSwgX3RoaXMub25JY29uTG9hZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uSWNvbkxvYWRcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIG9uSWNvbkxvYWQgPSBfdGhpcy5wcm9wcy5vbkljb25Mb2FkO1xuXG4gICAgICBpZiAob25JY29uTG9hZCkge1xuICAgICAgICBvbkljb25Mb2FkKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB2YXIgdHlwZSA9IHByb3BzLnR5cGU7XG4gICAgdmFyIGluaXRpYWxJY29uID0gZ2V0SW5pdGlhbEljb24odHlwZSk7XG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBpY29uOiBpbml0aWFsSWNvbixcbiAgICAgIGljb25UaXRsZTogdW5kZWZpbmVkLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIG5lZWRlZExvYWRpbmc6IGZhbHNlXG4gICAgfTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoRXVpSWNvbkNsYXNzLCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHZhciB0eXBlID0gdGhpcy5wcm9wcy50eXBlO1xuXG4gICAgICBpZiAoaXNFdWlJY29uVHlwZSh0eXBlKSAmJiB0aGlzLnN0YXRlLmljb24gPT0gbnVsbCkge1xuICAgICAgICAvL2VzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9uby1kaWQtbW91bnQtc2V0LXN0YXRlXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIG5lZWRlZExvYWRpbmc6IHRydWUsXG4gICAgICAgICAgaXNMb2FkaW5nOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmxvYWRJY29uQ29tcG9uZW50KHR5cGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vbkljb25Mb2FkKCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudERpZFVwZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzKSB7XG4gICAgICB2YXIgdHlwZSA9IHRoaXMucHJvcHMudHlwZTtcblxuICAgICAgaWYgKHR5cGUgIT09IHByZXZQcm9wcy50eXBlKSB7XG4gICAgICAgIGlmIChpc0V1aUljb25UeXBlKHR5cGUpKSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L25vLWRpZC11cGRhdGUtc2V0LXN0YXRlXG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBuZWVkZWRMb2FkaW5nOiBpY29uQ29tcG9uZW50Q2FjaGUuaGFzT3duUHJvcGVydHkodHlwZSksXG4gICAgICAgICAgICBpc0xvYWRpbmc6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLmxvYWRJY29uQ29tcG9uZW50KHR5cGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9uby1kaWQtdXBkYXRlLXNldC1zdGF0ZVxuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgaWNvbjogdHlwZSxcbiAgICAgICAgICAgIG5lZWRlZExvYWRpbmc6IHRydWUsXG4gICAgICAgICAgICBpc0xvYWRpbmc6IGZhbHNlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50V2lsbFVubW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICB0aGlzLmlzTW91bnRlZCA9IGZhbHNlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICB0eXBlID0gX3RoaXMkcHJvcHMudHlwZSxcbiAgICAgICAgICBfdGhpcyRwcm9wcyRzaXplID0gX3RoaXMkcHJvcHMuc2l6ZSxcbiAgICAgICAgICBzaXplID0gX3RoaXMkcHJvcHMkc2l6ZSA9PT0gdm9pZCAwID8gJ20nIDogX3RoaXMkcHJvcHMkc2l6ZSxcbiAgICAgICAgICBjb2xvciA9IF90aGlzJHByb3BzLmNvbG9yLFxuICAgICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzLmNsYXNzTmFtZSxcbiAgICAgICAgICB0YWJJbmRleCA9IF90aGlzJHByb3BzLnRhYkluZGV4LFxuICAgICAgICAgIHRpdGxlID0gX3RoaXMkcHJvcHMudGl0bGUsXG4gICAgICAgICAgb25JY29uTG9hZCA9IF90aGlzJHByb3BzLm9uSWNvbkxvYWQsXG4gICAgICAgICAgdGhlbWUgPSBfdGhpcyRwcm9wcy50aGVtZSxcbiAgICAgICAgICBzdHlsZSA9IF90aGlzJHByb3BzLnN0eWxlLFxuICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgICAgIHZhciBfdGhpcyRzdGF0ZSA9IHRoaXMuc3RhdGUsXG4gICAgICAgICAgaXNMb2FkaW5nID0gX3RoaXMkc3RhdGUuaXNMb2FkaW5nLFxuICAgICAgICAgIG5lZWRlZExvYWRpbmcgPSBfdGhpcyRzdGF0ZS5uZWVkZWRMb2FkaW5nLFxuICAgICAgICAgIGljb25UaXRsZSA9IF90aGlzJHN0YXRlLmljb25UaXRsZTtcbiAgICAgIHZhciBpc0xvYWRlZCA9ICFpc0xvYWRpbmcgJiYgbmVlZGVkTG9hZGluZztcbiAgICAgIHZhciBpc0N1c3RvbUNvbG9yID0gY29sb3IgJiYgIWlzTmFtZWRDb2xvcihjb2xvcik7XG4gICAgICB2YXIgb3B0aW9uYWxDdXN0b21TdHlsZXMgPSBpc0N1c3RvbUNvbG9yID8gX29iamVjdFNwcmVhZCh7XG4gICAgICAgIGNvbG9yOiBjb2xvclxuICAgICAgfSwgc3R5bGUpIDogc3R5bGU7IC8vIFRoZXNlIGljb25zIGFyZSBhIGxpdHRsZSBzcGVjaWFsIGFuZCBnZXQgc29tZSBleHRyYSBDU1MgZmxleGliaWxpdHlcblxuICAgICAgdmFyIGlzQXBwSWNvbiA9IGdldElzQXBwSWNvbih0eXBlKTsgLy8gQXBwIGNvbG9yIHN0eWxlcyBhcmUgb25seSBhcHBsaWVkIGlmIG5vIGNvbG9yIGlzIHBhc3NlZCBvciBpZiBjb2xvcj1cImRlZmF1bHRcIiBpcyBwYXNzZWRcblxuICAgICAgdmFyIGFwcEljb25IYXNDb2xvciA9IGNvbG9yICYmIGNvbG9yICE9PSAnZGVmYXVsdCc7IC8vIFRoZSBFbGFzdGljIGxvZ28gc2hvdWxkIGJlIGFuIG91dGxpbmUgaW4gdGV4dCBhbmQgZ2hvc3QgbW9kZVxuXG4gICAgICB2YXIgaXNFbGFzdGljTG9nb091dGxpbmUgPSB0eXBlID09PSAnbG9nb0VsYXN0aWMnICYmIChjb2xvciA9PT0gJ2dob3N0JyB8fCBjb2xvciA9PT0gJ3RleHQnKTtcbiAgICAgIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpSWNvbicsIGNsYXNzTmFtZSk7IC8vIEVtb3Rpb24gc3R5bGVzXG5cbiAgICAgIHZhciBzdHlsZXMgPSBldWlJY29uU3R5bGVzKHRoZW1lKTtcbiAgICAgIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aUljb24sIHN0eWxlc1tzaXplXSwgY29sb3IgJiYgaXNOYW1lZENvbG9yKGNvbG9yKSAmJiBzdHlsZXNbY29sb3JdLCBpc0N1c3RvbUNvbG9yICYmIHN0eWxlcy5jdXN0b21Db2xvciwgaXNFbGFzdGljTG9nb091dGxpbmUgJiYgc3R5bGVzLmxvZ29FbGFzdGljT3V0bGluZSwgaXNBcHBJY29uICYmICFhcHBJY29uSGFzQ29sb3IgJiYgc3R5bGVzLmFwcCwgaXNMb2FkaW5nICYmIHN0eWxlcy5pc0xvYWRpbmcsICFpc0xvYWRpbmcgJiYgbmVlZGVkTG9hZGluZyAmJiBzdHlsZXMuaXNMb2FkZWRdO1xuICAgICAgdmFyIGljb24gPSB0aGlzLnN0YXRlLmljb24gfHwgZW1wdHk7IC8vIFRoaXMgaXMgYSBmaXggZm9yIElFIGFuZCBFZGdlLCB3aGljaCBpZ25vcmVzIHRhYmluZGV4PVwiLTFcIiBvbiBhbiBTVkcsIGJ1dCByZXNwZWN0c1xuICAgICAgLy8gZm9jdXNhYmxlPVwiZmFsc2VcIi5cbiAgICAgIC8vICAgLSBJZiB0aGVyZSdzIG5vIHRhYmluZGV4IHNwZWNpZmllZCwgd2UnbGwgZGVmYXVsdCB0aGUgaWNvbiB0byBub3QgYmUgZm9jdXNhYmxlLFxuICAgICAgLy8gICAgIHdoaWNoIGlzIGhvdyBTVkdzIGJlaGF2ZSBpbiBDaHJvbWUsIFNhZmFyaSwgYW5kIEZGLlxuICAgICAgLy8gICAtIElmIHRhYmluZGV4IGlzIC0xLCB0aGVuIHRoZSBjb25zdW1lciB3YW50cyB0aGUgaWNvbiB0byBiZSBmb2N1c2FibGUgYnkgSmF2YVNjcmlwdCBvbmx5LlxuICAgICAgLy8gICAtIElmIHRoZSB0YWJpbmRleCBpcyAwLCB0aGUgY29uc3VtZXIgd2FudHMgdGhlIGljb24gdG8gYmUga2V5Ym9hcmQgZm9jdXNhYmxlLlxuXG4gICAgICB2YXIgZm9jdXNhYmxlID0gdGFiSW5kZXggPT0gbnVsbCB8fCB0YWJJbmRleCA9PT0gLTEgPyAnZmFsc2UnIDogJ3RydWUnO1xuXG4gICAgICBpZiAodHlwZW9mIGljb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwiaW1nXCIsIF9leHRlbmRzKHtcbiAgICAgICAgICBhbHQ6IHRpdGxlID8gdGl0bGUgOiAnJyxcbiAgICAgICAgICBzcmM6IGljb24sXG4gICAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICAgIGNzczogY3NzU3R5bGVzLFxuICAgICAgICAgIHRhYkluZGV4OiB0YWJJbmRleFxuICAgICAgICB9LCByZXN0KSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgU3ZnID0gaWNvbjsgLy8gSWYgaXQncyBhbiBlbXB0eSBpY29uLCBvciBpZiB0aGVyZSBpcyBubyBhcmlhLWxhYmVsLCBhcmlhLWxhYmVsbGVkYnksIG9yIHRpdGxlIGl0IGdldHMgYXJpYS1oaWRkZW4gdHJ1ZVxuXG4gICAgICAgIHZhciBpc0FyaWFIaWRkZW4gPSBpY29uID09PSBlbXB0eSB8fCAhKHRoaXMucHJvcHNbJ2FyaWEtbGFiZWwnXSB8fCB0aGlzLnByb3BzWydhcmlhLWxhYmVsbGVkYnknXSB8fCB0aGlzLnByb3BzLnRpdGxlKTtcbiAgICAgICAgdmFyIGhpZGVJY29uRW1wdHkgPSBpc0FyaWFIaWRkZW4gJiYge1xuICAgICAgICAgICdhcmlhLWhpZGRlbic6IHRydWVcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIHRpdGxlSWQ7IC8vIElmIG5vIGFyaWEtbGFiZWwgb3IgYXJpYS1sYWJlbGxlZGJ5IGlzIHByb3ZpZGVkIGJ1dCB0aGVyZSdzIGEgdGl0bGUsIGEgdGl0bGVJZCBpcyBnZW5lcmF0ZWRcbiAgICAgICAgLy8gIFRoZSBzdmcgYXJpYS1sYWJlbGxlZGJ5IGF0dHJpYnV0ZSBnZXRzIHRoaXMgdGl0bGVJZFxuICAgICAgICAvLyAgVGhlIHN2ZyB0aXRsZSBlbGVtZW50IGdldHMgdGhpcyB0aXRsZUlkIGFzIGFuIGlkXG5cbiAgICAgICAgaWYgKCF0aGlzLnByb3BzWydhcmlhLWxhYmVsJ10gJiYgIXRoaXMucHJvcHNbJ2FyaWEtbGFiZWxsZWRieSddICYmIHRpdGxlKSB7XG4gICAgICAgICAgdGl0bGVJZCA9IHtcbiAgICAgICAgICAgIHRpdGxlSWQ6IGdlbmVyYXRlSWQoKVxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChTdmcsIF9leHRlbmRzKHtcbiAgICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgICAgc3R5bGU6IG9wdGlvbmFsQ3VzdG9tU3R5bGVzLFxuICAgICAgICAgIGNzczogY3NzU3R5bGVzLFxuICAgICAgICAgIHRhYkluZGV4OiB0YWJJbmRleCxcbiAgICAgICAgICBmb2N1c2FibGU6IGZvY3VzYWJsZSxcbiAgICAgICAgICByb2xlOiBcImltZ1wiLFxuICAgICAgICAgIHRpdGxlOiB0aXRsZSxcbiAgICAgICAgICBcImRhdGEtaWNvbi10eXBlXCI6IGljb25UaXRsZSxcbiAgICAgICAgICBcImRhdGEtaXMtbG9hZGVkXCI6IGlzTG9hZGVkIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICBcImRhdGEtaXMtbG9hZGluZ1wiOiBpc0xvYWRpbmcgfHwgdW5kZWZpbmVkXG4gICAgICAgIH0sIHRpdGxlSWQsIHJlc3QsIGhpZGVJY29uRW1wdHkpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gRXVpSWNvbkNsYXNzO1xufShQdXJlQ29tcG9uZW50KTtcbkV1aUljb25DbGFzcy5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgICAqIGBFbnVtYCBpcyBhbnkgb2YgdGhlIG5hbWVkIGljb25zIGxpc3RlZCBpbiB0aGUgZG9jcywgYHN0cmluZ2AgaXMgdXN1YWxseSBhIFVSTCB0byBhbiBTVkcgZmlsZSwgYW5kIGBlbGVtZW50VHlwZWAgaXMgYW55IFJlYWN0IFNWRyBjb21wb25lbnRcbiAgICAgICAqL1xuICB0eXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbGVydFwiLCBcImFuYWx5emVFdmVudFwiLCBcImFubm90YXRpb25cIiwgXCJhcG1BcHBcIiwgXCJhcG1UcmFjZVwiLCBcImFwcFNlYXJjaEFwcFwiLCBcImFwcHNcIiwgXCJhcnJvd0Rvd25cIiwgXCJhcnJvd0xlZnRcIiwgXCJhcnJvd1JpZ2h0XCIsIFwiYXJyb3dVcFwiLCBcImFycm93U3RhcnRcIiwgXCJhcnJvd0VuZFwiLCBcImFzdGVyaXNrXCIsIFwiYXVkaXRiZWF0QXBwXCIsIFwiYmVha2VyXCIsIFwiYmVsbFwiLCBcImJlbGxTbGFzaFwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGVja1wiLCBcImNoZWNrSW5DaXJjbGVGaWxsZWRcIiwgXCJjaGVlclwiLCBcImNsYXNzaWZpY2F0aW9uSm9iXCIsIFwiY2xvY2tcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkFDaXJjbGVGaWxsZWRcIiwgXCJjcm9zc2hhaXJzXCIsIFwiY3VycmVuY3lcIiwgXCJjdXRcIiwgXCJkYXNoYm9hcmRBcHBcIiwgXCJkYXRhVmlzdWFsaXplclwiLCBcImRhdGFiYXNlXCIsIFwiZGVza3RvcFwiLCBcImRldlRvb2xzQXBwXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZXFsXCIsIFwiZXJhc2VyXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZsYWdcIiwgXCJmbGVldEFwcFwiLCBcImZvbGRcIiwgXCJmb2xkZXJDaGVja1wiLCBcImZvbGRlckNsb3NlZFwiLCBcImZvbGRlckV4Y2xhbWF0aW9uXCIsIFwiZm9sZGVyT3BlblwiLCBcImZyYW1lTmV4dFwiLCBcImZyYW1lUHJldmlvdXNcIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFNjcmVlbkV4aXRcIiwgXCJmdW5jdGlvblwiLCBcImdlYXJcIiwgXCJnaXNBcHBcIiwgXCJnbGFzc2VzXCIsIFwiZ2xvYmVcIiwgXCJncmFiXCIsIFwiZ3JhYkhvcml6b250YWxcIiwgXCJncmFwaEFwcFwiLCBcImdyaWRcIiwgXCJncm9rQXBwXCIsIFwiaGVhcnRcIiwgXCJoZWFydGJlYXRBcHBcIiwgXCJoZWF0bWFwXCIsIFwiaGVscFwiLCBcImhvbWVcIiwgXCJpSW5DaXJjbGVcIiwgXCJpbWFnZVwiLCBcImltcG9ydEFjdGlvblwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5wdXRPdXRwdXRcIiwgXCJpbnNwZWN0XCIsIFwiaW52ZXJ0XCIsIFwiaXBcIiwgXCJrZXlib2FyZFwiLCBcImtxbEZpZWxkXCIsIFwia3FsRnVuY3Rpb25cIiwgXCJrcWxPcGVyYW5kXCIsIFwia3FsU2VsZWN0b3JcIiwgXCJrcWxWYWx1ZVwiLCBcImt1YmVybmV0ZXNOb2RlXCIsIFwia3ViZXJuZXRlc1BvZFwiLCBcImxheWVyc1wiLCBcImxlbnNBcHBcIiwgXCJsZXR0ZXJpbmdcIiwgXCJsaW5lRGFzaGVkXCIsIFwibGluZURvdHRlZFwiLCBcImxpbmVTb2xpZFwiLCBcImxpbmtcIiwgXCJsaXN0XCIsIFwibGlzdEFkZFwiLCBcImxvY2tcIiwgXCJsb2NrT3BlblwiLCBcImxvZ29BV1NcIiwgXCJsb2dvQVdTTW9ub1wiLCBcImxvZ29BZXJvc3Bpa2VcIiwgXCJsb2dvQXBhY2hlXCIsIFwibG9nb0FwcFNlYXJjaFwiLCBcImxvZ29BenVyZVwiLCBcImxvZ29BenVyZU1vbm9cIiwgXCJsb2dvQmVhdHNcIiwgXCJsb2dvQnVzaW5lc3NBbmFseXRpY3NcIiwgXCJsb2dvQ2VwaFwiLCBcImxvZ29DbG91ZFwiLCBcImxvZ29DbG91ZEVudGVycHJpc2VcIiwgXCJsb2dvQ29kZVwiLCBcImxvZ29Db2Rlc2FuZGJveFwiLCBcImxvZ29Db3VjaGJhc2VcIiwgXCJsb2dvRG9ja2VyXCIsIFwibG9nb0Ryb3B3aXphcmRcIiwgXCJsb2dvRWxhc3RpY1wiLCBcImxvZ29FbGFzdGljU3RhY2tcIiwgXCJsb2dvRWxhc3RpY3NlYXJjaFwiLCBcImxvZ29FbnRlcnByaXNlU2VhcmNoXCIsIFwibG9nb0V0Y2RcIiwgXCJsb2dvR0NQXCIsIFwibG9nb0dDUE1vbm9cIiwgXCJsb2dvR2l0aHViXCIsIFwibG9nb0dtYWlsXCIsIFwibG9nb0dvbGFuZ1wiLCBcImxvZ29Hb29nbGVHXCIsIFwibG9nb0hBcHJveHlcIiwgXCJsb2dvSUJNXCIsIFwibG9nb0lCTU1vbm9cIiwgXCJsb2dvS2Fma2FcIiwgXCJsb2dvS2liYW5hXCIsIFwibG9nb0t1YmVybmV0ZXNcIiwgXCJsb2dvTG9nZ2luZ1wiLCBcImxvZ29Mb2dzdGFzaFwiLCBcImxvZ29NYXBzXCIsIFwibG9nb01lbWNhY2hlZFwiLCBcImxvZ29NZXRyaWNzXCIsIFwibG9nb01vbmdvZGJcIiwgXCJsb2dvTXlTUUxcIiwgXCJsb2dvTmdpbnhcIiwgXCJsb2dvT2JzZXJ2YWJpbGl0eVwiLCBcImxvZ29Pc3F1ZXJ5XCIsIFwibG9nb1BocFwiLCBcImxvZ29Qb3N0Z3Jlc1wiLCBcImxvZ29Qcm9tZXRoZXVzXCIsIFwibG9nb1JhYmJpdG1xXCIsIFwibG9nb1JlZGlzXCIsIFwibG9nb1NlY3VyaXR5XCIsIFwibG9nb1NpdGVTZWFyY2hcIiwgXCJsb2dvU2tldGNoXCIsIFwibG9nb1NsYWNrXCIsIFwibG9nb1VwdGltZVwiLCBcImxvZ29XZWJob29rXCIsIFwibG9nb1dpbmRvd3NcIiwgXCJsb2dvV29ya3BsYWNlU2VhcmNoXCIsIFwibG9nc0FwcFwiLCBcImxvZ3N0YXNoRmlsdGVyXCIsIFwibG9nc3Rhc2hJZlwiLCBcImxvZ3N0YXNoSW5wdXRcIiwgXCJsb2dzdGFzaE91dHB1dFwiLCBcImxvZ3N0YXNoUXVldWVcIiwgXCJtYWNoaW5lTGVhcm5pbmdBcHBcIiwgXCJtYWduZXRcIiwgXCJtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uXCIsIFwibWFnbmlmeVdpdGhNaW51c1wiLCBcIm1hZ25pZnlXaXRoUGx1c1wiLCBcIm1hbmFnZW1lbnRBcHBcIiwgXCJtYXBNYXJrZXJcIiwgXCJtZW1vcnlcIiwgXCJtZW51XCIsIFwibWVudURvd25cIiwgXCJtZW51TGVmdFwiLCBcIm1lbnVSaWdodFwiLCBcIm1lbnVVcFwiLCBcIm1lcmdlXCIsIFwibWV0cmljYmVhdEFwcFwiLCBcIm1ldHJpY3NBcHBcIiwgXCJtaW5pbWl6ZVwiLCBcIm1pbnVzXCIsIFwibWludXNJbkNpcmNsZVwiLCBcIm1pbnVzSW5DaXJjbGVGaWxsZWRcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5vZGVcIiwgXCJub3RlYm9va0FwcFwiLCBcIm51bWJlclwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIiwgXCJvdXRsaWVyRGV0ZWN0aW9uSm9iXCIsIFwicGFja2FnZVwiLCBcInBhY2tldGJlYXRBcHBcIiwgXCJwYWdlU2VsZWN0XCIsIFwicGFnZXNTZWxlY3RcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVsaW5lQXBwXCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNub3dmbGFrZVwiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc0FwcFwiLCBcInNxbEFwcFwiLCBcInN0YXJFbXB0eVwiLCBcInN0YXJFbXB0eVNwYWNlXCIsIFwic3RhckZpbGxlZFwiLCBcInN0YXJGaWxsZWRTcGFjZVwiLCBcInN0YXJNaW51c0VtcHR5XCIsIFwic3Rhck1pbnVzRmlsbGVkXCIsIFwic3RhclBsdXNFbXB0eVwiLCBcInN0YXJQbHVzRmlsbGVkXCIsIFwic3RhdHNcIiwgXCJzdG9wXCIsIFwic3RvcEZpbGxlZFwiLCBcInN0b3BTbGFzaFwiLCBcInN0b3JhZ2VcIiwgXCJzdHJpbmdcIiwgXCJzdWJtb2R1bGVcIiwgXCJzdW5cIiwgXCJzd2F0Y2hJbnB1dFwiLCBcInN5bWxpbmtcIiwgXCJ0YWJsZURlbnNpdHlDb21wYWN0XCIsIFwidGFibGVEZW5zaXR5RXhwYW5kZWRcIiwgXCJ0YWJsZURlbnNpdHlOb3JtYWxcIiwgXCJ0YWJsZU9mQ29udGVudHNcIiwgXCJ0YWdcIiwgXCJ0ZWFyXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJ0aW1lbGluZVwiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFzaFwiLCBcInVuZm9sZFwiLCBcInVubGlua1wiLCBcInVwZ3JhZGVBc3Npc3RhbnRBcHBcIiwgXCJ1cHRpbWVBcHBcIiwgXCJ1c2VyXCIsIFwidXNlckF2YXRhclwiLCBcInVzZXJzXCIsIFwidXNlcnNSb2xlc0FwcFwiLCBcInZlY3RvclwiLCBcInZpZGVvUGxheWVyXCIsIFwidmlzQXJlYVwiLCBcInZpc0FyZWFTdGFja2VkXCIsIFwidmlzQmFySG9yaXpvbnRhbFwiLCBcInZpc0Jhckhvcml6b250YWxTdGFja2VkXCIsIFwidmlzQmFyVmVydGljYWxcIiwgXCJ2aXNCYXJWZXJ0aWNhbFN0YWNrZWRcIiwgXCJ2aXNHYXVnZVwiLCBcInZpc0dvYWxcIiwgXCJ2aXNMaW5lXCIsIFwidmlzTWFwQ29vcmRpbmF0ZVwiLCBcInZpc01hcFJlZ2lvblwiLCBcInZpc01ldHJpY1wiLCBcInZpc1BpZVwiLCBcInZpc1RhYmxlXCIsIFwidmlzVGFnQ2xvdWRcIiwgXCJ2aXNUZXh0XCIsIFwidmlzVGltZWxpb25cIiwgXCJ2aXNWZWdhXCIsIFwidmlzVmlzdWFsQnVpbGRlclwiLCBcInZpc3VhbGl6ZUFwcFwiLCBcIndhdGNoZXNBcHBcIiwgXCJ3b3JkV3JhcFwiLCBcIndvcmRXcmFwRGlzYWJsZWRcIiwgXCJ3b3JrcGxhY2VTZWFyY2hBcHBcIiwgXCJ3cmVuY2hcIiwgXCJ0b2tlbkFsaWFzXCIsIFwidG9rZW5Bbm5vdGF0aW9uXCIsIFwidG9rZW5BcnJheVwiLCBcInRva2VuQmluYXJ5XCIsIFwidG9rZW5Cb29sZWFuXCIsIFwidG9rZW5DbGFzc1wiLCBcInRva2VuQ29tcGxldGlvblN1Z2dlc3RlclwiLCBcInRva2VuQ29uc3RhbnRcIiwgXCJ0b2tlbkRhdGVcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2hhcGVcIiwgXCJ0b2tlblN0cmluZ1wiLCBcInRva2VuU3RydWN0XCIsIFwidG9rZW5TeW1ib2xcIiwgXCJ0b2tlblRhZ1wiLCBcInRva2VuVGV4dFwiLCBcInRva2VuVG9rZW5Db3VudFwiLCBcInRva2VuVmFyaWFibGVcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgICAgICogT25lIG9mIEVVSSdzIGNvbG9yIHBhbGV0dGUgb3IgYSB2YWxpZCBDU1MgY29sb3IgdmFsdWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL2NvbG9yX3ZhbHVlLlxuICAgICAgICogTm90ZSB0aGF0IGNvbG9yaW5nIG9ubHkgd29ya3MgaWYgeW91ciBTVkcgaXMgcmVtb3ZlZCBvZiBmaWxsIGF0dHJpYnV0ZXMuXG4gICAgICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkXSksXG5cbiAgLyoqXG4gICAgICAgKiBOb3RlIHRoYXQgZXZlcnkgc2l6ZSBvdGhlciB0aGFuIGBvcmlnaW5hbGAgYXNzdW1lcyB0aGUgcHJvdmlkZWQgU1ZHIHNpdHMgb24gYSBzcXVhcmUgdmlld2JveC5cbiAgICAgICAqL1xuICBzaXplOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAgICogRGVzY3JpcHRpdmUgdGl0bGUgZm9yIG5hbWluZyB0aGUgaWNvbiBiYXNlZCBvbiBpdHMgdXNlXG4gICAgICAgKi9cbiAgdGl0bGU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICAgKiBBIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgdGl0bGUgZWxlbWVudFxuICAgICAgICovXG4gIHRpdGxlSWQ6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICAgKiBJdHMgdmFsdWUgc2hvdWxkIGJlIG9uZSBvciBtb3JlIGVsZW1lbnQgSURzXG4gICAgICAgKi9cbiAgXCJhcmlhLWxhYmVsbGVkYnlcIjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgICAqIENhbGxiYWNrIHdoZW4gdGhlIGljb24gaGFzIGJlZW4gbG9hZGVkICYgcmVuZGVyZWRcbiAgICAgICAqL1xuICBvbkljb25Mb2FkOiBQcm9wVHlwZXMuZnVuY1xufTtcbmV4cG9ydCB2YXIgRXVpSWNvbiA9IHdpdGhFdWlUaGVtZShFdWlJY29uQ2xhc3MpOyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuZXhwb3J0IHZhciB0eXBlVG9QYXRoTWFwID0ge1xuICBhY2Nlc3NpYmlsaXR5OiAnYWNjZXNzaWJpbGl0eScsXG4gIGFkZERhdGFBcHA6ICdhcHBfYWRkX2RhdGEnLFxuICBhZHZhbmNlZFNldHRpbmdzQXBwOiAnYXBwX2FkdmFuY2VkX3NldHRpbmdzJyxcbiAgYWdlbnRBcHA6ICdhcHBfZmxlZXQnLFxuICBhZ2dyZWdhdGU6ICdhZ2dyZWdhdGUnLFxuICBhbGVydDogJ2FsZXJ0JyxcbiAgYW5hbHl6ZUV2ZW50OiAnYW5hbHl6ZUV2ZW50JyxcbiAgYW5ub3RhdGlvbjogJ2Fubm90YXRpb24nLFxuICBhcG1BcHA6ICdhcHBfYXBtJyxcbiAgYXBtVHJhY2U6ICdhcG1fdHJhY2UnLFxuICBhcHBTZWFyY2hBcHA6ICdhcHBfYXBwX3NlYXJjaCcsXG4gIGFwcHM6ICdhcHBzJyxcbiAgYXJyb3dEb3duOiAnYXJyb3dfZG93bicsXG4gIGFycm93TGVmdDogJ2Fycm93X2xlZnQnLFxuICBhcnJvd1JpZ2h0OiAnYXJyb3dfcmlnaHQnLFxuICBhcnJvd1VwOiAnYXJyb3dfdXAnLFxuICBhcnJvd1N0YXJ0OiAnYXJyb3dTdGFydCcsXG4gIGFycm93RW5kOiAnYXJyb3dFbmQnLFxuICBhc3RlcmlzazogJ2FzdGVyaXNrJyxcbiAgYXVkaXRiZWF0QXBwOiAnYXBwX2F1ZGl0YmVhdCcsXG4gIGJlYWtlcjogJ2JlYWtlcicsXG4gIGJlbGw6ICdiZWxsJyxcbiAgYmVsbFNsYXNoOiAnYmVsbFNsYXNoJyxcbiAgYm9sdDogJ2JvbHQnLFxuICBib3hlc0hvcml6b250YWw6ICdib3hlc19ob3Jpem9udGFsJyxcbiAgYm94ZXNWZXJ0aWNhbDogJ2JveGVzX3ZlcnRpY2FsJyxcbiAgYnJhbmNoOiAnYnJhbmNoJyxcbiAgYnJhbmNoVXNlcjogJ2JyYW5jaFVzZXInLFxuICBicm9vbTogJ2Jyb29tJyxcbiAgYnJ1c2g6ICdicnVzaCcsXG4gIGJ1ZzogJ2J1ZycsXG4gIGJ1bGxzZXllOiAnYnVsbHNleWUnLFxuICBjYWxlbmRhcjogJ2NhbGVuZGFyJyxcbiAgY2FudmFzQXBwOiAnYXBwX2NhbnZhcycsXG4gIGNhc2VzQXBwOiAnYXBwX2Nhc2VzJyxcbiAgY2hlY2s6ICdjaGVjaycsXG4gIGNoZWNrSW5DaXJjbGVGaWxsZWQ6ICdjaGVja0luQ2lyY2xlRmlsbGVkJyxcbiAgY2hlZXI6ICdjaGVlcicsXG4gIGNsYXNzaWZpY2F0aW9uSm9iOiAnbWxfY2xhc3NpZmljYXRpb25fam9iJyxcbiAgY2xvY2s6ICdjbG9jaycsXG4gIGNsb3VkRHJpenpsZTogJ2Nsb3VkRHJpenpsZScsXG4gIGNsb3VkU3Rvcm15OiAnY2xvdWRTdG9ybXknLFxuICBjbG91ZFN1bm55OiAnY2xvdWRTdW5ueScsXG4gIGNsdXN0ZXI6ICdjbHVzdGVyJyxcbiAgY29kZUFwcDogJ2FwcF9jb2RlJyxcbiAgY29sb3I6ICdjb2xvcicsXG4gIGNvbXB1dGU6ICdjb21wdXRlJyxcbiAgY29uc29sZTogJ2NvbnNvbGUnLFxuICBjb25zb2xlQXBwOiAnYXBwX2NvbnNvbGUnLFxuICBjb250YWluZXI6ICdjb250YWluZXInLFxuICBjb250aW51aXR5QWJvdmU6ICdjb250aW51aXR5QWJvdmUnLFxuICBjb250aW51aXR5QWJvdmVCZWxvdzogJ2NvbnRpbnVpdHlBYm92ZUJlbG93JyxcbiAgY29udGludWl0eUJlbG93OiAnY29udGludWl0eUJlbG93JyxcbiAgY29udGludWl0eVdpdGhpbjogJ2NvbnRpbnVpdHlXaXRoaW4nLFxuICBjb250cm9sc0hvcml6b250YWw6ICdjb250cm9sc19ob3Jpem9udGFsJyxcbiAgY29udHJvbHNWZXJ0aWNhbDogJ2NvbnRyb2xzX3ZlcnRpY2FsJyxcbiAgY29weTogJ2NvcHknLFxuICBjb3B5Q2xpcGJvYXJkOiAnY29weV9jbGlwYm9hcmQnLFxuICBjcmVhdGVBZHZhbmNlZEpvYjogJ21sX2NyZWF0ZV9hZHZhbmNlZF9qb2InLFxuICBjcmVhdGVNdWx0aU1ldHJpY0pvYjogJ21sX2NyZWF0ZV9tdWx0aV9tZXRyaWNfam9iJyxcbiAgY3JlYXRlUG9wdWxhdGlvbkpvYjogJ21sX2NyZWF0ZV9wb3B1bGF0aW9uX2pvYicsXG4gIGNyZWF0ZVNpbmdsZU1ldHJpY0pvYjogJ21sX2NyZWF0ZV9zaW5nbGVfbWV0cmljX2pvYicsXG4gIGNyb3NzOiAnY3Jvc3MnLFxuICBjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcDogJ2FwcF9jcm9zc19jbHVzdGVyX3JlcGxpY2F0aW9uJyxcbiAgY3Jvc3NJbkFDaXJjbGVGaWxsZWQ6ICdjcm9zc0luQUNpcmNsZUZpbGxlZCcsXG4gIGNyb3NzaGFpcnM6ICdjcm9zc2hhaXJzJyxcbiAgY3VycmVuY3k6ICdjdXJyZW5jeScsXG4gIGN1dDogJ2N1dCcsXG4gIGRhc2hib2FyZEFwcDogJ2FwcF9kYXNoYm9hcmQnLFxuICBkYXRhVmlzdWFsaXplcjogJ21sX2RhdGFfdmlzdWFsaXplcicsXG4gIGRhdGFiYXNlOiAnZGF0YWJhc2UnLFxuICBkZXNrdG9wOiAnZGVza3RvcCcsXG4gIGRldlRvb2xzQXBwOiAnYXBwX2RldnRvb2xzJyxcbiAgZGlzY292ZXJBcHA6ICdhcHBfZGlzY292ZXInLFxuICBkb2N1bWVudDogJ2RvY3VtZW50JyxcbiAgZG9jdW1lbnRFZGl0OiAnZG9jdW1lbnRFZGl0JyxcbiAgZG9jdW1lbnRhdGlvbjogJ2RvY3VtZW50YXRpb24nLFxuICBkb2N1bWVudHM6ICdkb2N1bWVudHMnLFxuICBkb3Q6ICdkb3QnLFxuICBkb3VibGVBcnJvd0xlZnQ6ICdkb3VibGVBcnJvd0xlZnQnLFxuICBkb3VibGVBcnJvd1JpZ2h0OiAnZG91YmxlQXJyb3dSaWdodCcsXG4gIGRvd25sb2FkOiAnZG93bmxvYWQnLFxuICBlZGl0b3JBbGlnbkNlbnRlcjogJ2VkaXRvcl9hbGlnbl9jZW50ZXInLFxuICBlZGl0b3JBbGlnbkxlZnQ6ICdlZGl0b3JfYWxpZ25fbGVmdCcsXG4gIGVkaXRvckFsaWduUmlnaHQ6ICdlZGl0b3JfYWxpZ25fcmlnaHQnLFxuICBlZGl0b3JCb2xkOiAnZWRpdG9yX2JvbGQnLFxuICBlZGl0b3JDaGVja2xpc3Q6ICdlZGl0b3JfY2hlY2tsaXN0JyxcbiAgZWRpdG9yQ29kZUJsb2NrOiAnZWRpdG9yX2NvZGVfYmxvY2snLFxuICBlZGl0b3JDb21tZW50OiAnZWRpdG9yX2NvbW1lbnQnLFxuICBlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbDogJ2VkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsJyxcbiAgZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsOiAnZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsJyxcbiAgZWRpdG9ySGVhZGluZzogJ2VkaXRvcl9oZWFkaW5nJyxcbiAgZWRpdG9ySXRhbGljOiAnZWRpdG9yX2l0YWxpYycsXG4gIGVkaXRvckl0ZW1BbGlnbkJvdHRvbTogJ2VkaXRvckl0ZW1BbGlnbkJvdHRvbScsXG4gIGVkaXRvckl0ZW1BbGlnbkNlbnRlcjogJ2VkaXRvckl0ZW1BbGlnbkNlbnRlcicsXG4gIGVkaXRvckl0ZW1BbGlnbkxlZnQ6ICdlZGl0b3JJdGVtQWxpZ25MZWZ0JyxcbiAgZWRpdG9ySXRlbUFsaWduTWlkZGxlOiAnZWRpdG9ySXRlbUFsaWduTWlkZGxlJyxcbiAgZWRpdG9ySXRlbUFsaWduUmlnaHQ6ICdlZGl0b3JJdGVtQWxpZ25SaWdodCcsXG4gIGVkaXRvckl0ZW1BbGlnblRvcDogJ2VkaXRvckl0ZW1BbGlnblRvcCcsXG4gIGVkaXRvckxpbms6ICdlZGl0b3JfbGluaycsXG4gIGVkaXRvck9yZGVyZWRMaXN0OiAnZWRpdG9yX29yZGVyZWRfbGlzdCcsXG4gIGVkaXRvclBvc2l0aW9uQm90dG9tTGVmdDogJ2VkaXRvclBvc2l0aW9uQm90dG9tTGVmdCcsXG4gIGVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHQ6ICdlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0JyxcbiAgZWRpdG9yUG9zaXRpb25Ub3BMZWZ0OiAnZWRpdG9yUG9zaXRpb25Ub3BMZWZ0JyxcbiAgZWRpdG9yUG9zaXRpb25Ub3BSaWdodDogJ2VkaXRvclBvc2l0aW9uVG9wUmlnaHQnLFxuICBlZGl0b3JSZWRvOiAnZWRpdG9yX3JlZG8nLFxuICBlZGl0b3JTdHJpa2U6ICdlZGl0b3Jfc3RyaWtlJyxcbiAgZWRpdG9yVGFibGU6ICdlZGl0b3JfdGFibGUnLFxuICBlZGl0b3JVbmRlcmxpbmU6ICdlZGl0b3JfdW5kZXJsaW5lJyxcbiAgZWRpdG9yVW5kbzogJ2VkaXRvcl91bmRvJyxcbiAgZWRpdG9yVW5vcmRlcmVkTGlzdDogJ2VkaXRvcl91bm9yZGVyZWRfbGlzdCcsXG4gIGVtYWlsOiAnZW1haWwnLFxuICBlbXB0eTogJ2VtcHR5JyxcbiAgZW1zQXBwOiAnYXBwX2VtcycsXG4gIGVxbDogJ2VxbCcsXG4gIGVyYXNlcjogJ2VyYXNlcicsXG4gIGV4aXQ6ICdleGl0JyxcbiAgZXhwYW5kOiAnZXhwYW5kJyxcbiAgZXhwYW5kTWluaTogJ2V4cGFuZE1pbmknLFxuICBleHBvcnRBY3Rpb246ICdleHBvcnQnLFxuICBleWU6ICdleWUnLFxuICBleWVDbG9zZWQ6ICdleWVfY2xvc2VkJyxcbiAgZmFjZUhhcHB5OiAnZmFjZV9oYXBweScsXG4gIGZhY2VOZXV0cmFsOiAnZmFjZV9uZXV0cmFsJyxcbiAgZmFjZVNhZDogJ2ZhY2Vfc2FkJyxcbiAgZmlsZWJlYXRBcHA6ICdhcHBfZmlsZWJlYXQnLFxuICBmaWx0ZXI6ICdmaWx0ZXInLFxuICBmbGFnOiAnZmxhZycsXG4gIGZsZWV0QXBwOiAnYXBwX2FnZW50JyxcbiAgZm9sZDogJ2ZvbGQnLFxuICBmb2xkZXJDaGVjazogJ2ZvbGRlcl9jaGVjaycsXG4gIGZvbGRlckNsb3NlZDogJ2ZvbGRlcl9jbG9zZWQnLFxuICBmb2xkZXJFeGNsYW1hdGlvbjogJ2ZvbGRlcl9leGNsYW1hdGlvbicsXG4gIGZvbGRlck9wZW46ICdmb2xkZXJfb3BlbicsXG4gIGZyYW1lTmV4dDogJ2ZyYW1lTmV4dCcsXG4gIGZyYW1lUHJldmlvdXM6ICdmcmFtZVByZXZpb3VzJyxcbiAgZnVsbFNjcmVlbjogJ2Z1bGxfc2NyZWVuJyxcbiAgZnVsbFNjcmVlbkV4aXQ6ICdmdWxsU2NyZWVuRXhpdCcsXG4gIGZ1bmN0aW9uOiAnZnVuY3Rpb24nLFxuICBnZWFyOiAnZ2VhcicsXG4gIGdpc0FwcDogJ2FwcF9naXMnLFxuICBnbGFzc2VzOiAnZ2xhc3NlcycsXG4gIGdsb2JlOiAnZ2xvYmUnLFxuICBncmFiOiAnZ3JhYicsXG4gIGdyYWJIb3Jpem9udGFsOiAnZ3JhYl9ob3Jpem9udGFsJyxcbiAgZ3JhcGhBcHA6ICdhcHBfZ3JhcGgnLFxuICBncmlkOiAnZ3JpZCcsXG4gIGdyb2tBcHA6ICdhcHBfZ3JvaycsXG4gIGhlYXJ0OiAnaGVhcnQnLFxuICBoZWFydGJlYXRBcHA6ICdhcHBfaGVhcnRiZWF0JyxcbiAgaGVhdG1hcDogJ2hlYXRtYXAnLFxuICBoZWxwOiAnaGVscCcsXG4gIGhvbWU6ICdob21lJyxcbiAgaUluQ2lyY2xlOiAnaUluQ2lyY2xlJyxcbiAgaW1hZ2U6ICdpbWFnZScsXG4gIGltcG9ydEFjdGlvbjogJ2ltcG9ydCcsXG4gIGluZGV4Q2xvc2U6ICdpbmRleF9jbG9zZScsXG4gIGluZGV4RWRpdDogJ2luZGV4X2VkaXQnLFxuICBpbmRleEZsdXNoOiAnaW5kZXhfZmx1c2gnLFxuICBpbmRleE1hbmFnZW1lbnRBcHA6ICdhcHBfaW5kZXhfbWFuYWdlbWVudCcsXG4gIGluZGV4TWFwcGluZzogJ2luZGV4X21hcHBpbmcnLFxuICBpbmRleE9wZW46ICdpbmRleF9vcGVuJyxcbiAgaW5kZXhQYXR0ZXJuQXBwOiAnYXBwX2luZGV4X3BhdHRlcm4nLFxuICBpbmRleFJvbGx1cEFwcDogJ2FwcF9pbmRleF9yb2xsdXAnLFxuICBpbmRleFJ1bnRpbWU6ICdpbmRleF9ydW50aW1lJyxcbiAgaW5kZXhTZXR0aW5nczogJ2luZGV4X3NldHRpbmdzJyxcbiAgaW5wdXRPdXRwdXQ6ICdpbnB1dE91dHB1dCcsXG4gIGluc3BlY3Q6ICdpbnNwZWN0JyxcbiAgaW52ZXJ0OiAnaW52ZXJ0JyxcbiAgaXA6ICdpcCcsXG4gIGtleWJvYXJkOiAna2V5Ym9hcmQnLFxuICBrcWxGaWVsZDogJ2txbF9maWVsZCcsXG4gIGtxbEZ1bmN0aW9uOiAna3FsX2Z1bmN0aW9uJyxcbiAga3FsT3BlcmFuZDogJ2txbF9vcGVyYW5kJyxcbiAga3FsU2VsZWN0b3I6ICdrcWxfc2VsZWN0b3InLFxuICBrcWxWYWx1ZTogJ2txbF92YWx1ZScsXG4gIGt1YmVybmV0ZXNOb2RlOiAna3ViZXJuZXRlc05vZGUnLFxuICBrdWJlcm5ldGVzUG9kOiAna3ViZXJuZXRlc1BvZCcsXG4gIGxheWVyczogJ2xheWVycycsXG4gIGxlbnNBcHA6ICdhcHBfbGVucycsXG4gIGxldHRlcmluZzogJ2xldHRlcmluZycsXG4gIGxpbmVEYXNoZWQ6ICdsaW5lRGFzaGVkJyxcbiAgbGluZURvdHRlZDogJ2xpbmVEb3R0ZWQnLFxuICBsaW5lU29saWQ6ICdsaW5lU29saWQnLFxuICBsaW5rOiAnbGluaycsXG4gIGxpc3Q6ICdsaXN0JyxcbiAgbGlzdEFkZDogJ2xpc3RfYWRkJyxcbiAgbG9jazogJ2xvY2snLFxuICBsb2NrT3BlbjogJ2xvY2tPcGVuJyxcbiAgbG9nb0FXUzogJ2xvZ29fYXdzJyxcbiAgbG9nb0FXU01vbm86ICdsb2dvX2F3c19tb25vJyxcbiAgbG9nb0Flcm9zcGlrZTogJ2xvZ29fYWVyb3NwaWtlJyxcbiAgbG9nb0FwYWNoZTogJ2xvZ29fYXBhY2hlJyxcbiAgbG9nb0FwcFNlYXJjaDogJ2xvZ29fYXBwX3NlYXJjaCcsXG4gIGxvZ29BenVyZTogJ2xvZ29fYXp1cmUnLFxuICBsb2dvQXp1cmVNb25vOiAnbG9nb19henVyZV9tb25vJyxcbiAgbG9nb0JlYXRzOiAnbG9nb19iZWF0cycsXG4gIGxvZ29CdXNpbmVzc0FuYWx5dGljczogJ2xvZ29fYnVzaW5lc3NfYW5hbHl0aWNzJyxcbiAgbG9nb0NlcGg6ICdsb2dvX2NlcGgnLFxuICBsb2dvQ2xvdWQ6ICdsb2dvX2Nsb3VkJyxcbiAgbG9nb0Nsb3VkRW50ZXJwcmlzZTogJ2xvZ29fY2xvdWRfZWNlJyxcbiAgbG9nb0NvZGU6ICdsb2dvX2NvZGUnLFxuICBsb2dvQ29kZXNhbmRib3g6ICdsb2dvX2NvZGVzYW5kYm94JyxcbiAgbG9nb0NvdWNoYmFzZTogJ2xvZ29fY291Y2hiYXNlJyxcbiAgbG9nb0RvY2tlcjogJ2xvZ29fZG9ja2VyJyxcbiAgbG9nb0Ryb3B3aXphcmQ6ICdsb2dvX2Ryb3B3aXphcmQnLFxuICBsb2dvRWxhc3RpYzogJ2xvZ29fZWxhc3RpYycsXG4gIGxvZ29FbGFzdGljU3RhY2s6ICdsb2dvX2VsYXN0aWNfc3RhY2snLFxuICBsb2dvRWxhc3RpY3NlYXJjaDogJ2xvZ29fZWxhc3RpY3NlYXJjaCcsXG4gIGxvZ29FbnRlcnByaXNlU2VhcmNoOiAnbG9nb19lbnRlcnByaXNlX3NlYXJjaCcsXG4gIGxvZ29FdGNkOiAnbG9nb19ldGNkJyxcbiAgbG9nb0dDUDogJ2xvZ29fZ2NwJyxcbiAgbG9nb0dDUE1vbm86ICdsb2dvX2djcF9tb25vJyxcbiAgbG9nb0dpdGh1YjogJ2xvZ29fZ2l0aHViJyxcbiAgbG9nb0dtYWlsOiAnbG9nb19nbWFpbCcsXG4gIGxvZ29Hb2xhbmc6ICdsb2dvX2dvbGFuZycsXG4gIGxvZ29Hb29nbGVHOiAnbG9nb19nb29nbGVfZycsXG4gIGxvZ29IQXByb3h5OiAnbG9nb19oYXByb3h5JyxcbiAgbG9nb0lCTTogJ2xvZ29faWJtJyxcbiAgbG9nb0lCTU1vbm86ICdsb2dvX2libV9tb25vJyxcbiAgbG9nb0thZmthOiAnbG9nb19rYWZrYScsXG4gIGxvZ29LaWJhbmE6ICdsb2dvX2tpYmFuYScsXG4gIGxvZ29LdWJlcm5ldGVzOiAnbG9nb19rdWJlcm5ldGVzJyxcbiAgbG9nb0xvZ2dpbmc6ICdsb2dvX2xvZ2dpbmcnLFxuICBsb2dvTG9nc3Rhc2g6ICdsb2dvX2xvZ3N0YXNoJyxcbiAgbG9nb01hcHM6ICdsb2dvX21hcHMnLFxuICBsb2dvTWVtY2FjaGVkOiAnbG9nb19tZW1jYWNoZWQnLFxuICBsb2dvTWV0cmljczogJ2xvZ29fbWV0cmljcycsXG4gIGxvZ29Nb25nb2RiOiAnbG9nb19tb25nb2RiJyxcbiAgbG9nb015U1FMOiAnbG9nb19teXNxbCcsXG4gIGxvZ29OZ2lueDogJ2xvZ29fbmdpbngnLFxuICBsb2dvT2JzZXJ2YWJpbGl0eTogJ2xvZ29fb2JzZXJ2YWJpbGl0eScsXG4gIGxvZ29Pc3F1ZXJ5OiAnbG9nb19vc3F1ZXJ5JyxcbiAgbG9nb1BocDogJ2xvZ29fcGhwJyxcbiAgbG9nb1Bvc3RncmVzOiAnbG9nb19wb3N0Z3JlcycsXG4gIGxvZ29Qcm9tZXRoZXVzOiAnbG9nb19wcm9tZXRoZXVzJyxcbiAgbG9nb1JhYmJpdG1xOiAnbG9nb19yYWJiaXRtcScsXG4gIGxvZ29SZWRpczogJ2xvZ29fcmVkaXMnLFxuICBsb2dvU2VjdXJpdHk6ICdsb2dvX3NlY3VyaXR5JyxcbiAgbG9nb1NpdGVTZWFyY2g6ICdsb2dvX3NpdGVfc2VhcmNoJyxcbiAgbG9nb1NrZXRjaDogJ2xvZ29fc2tldGNoJyxcbiAgbG9nb1NsYWNrOiAnbG9nb19zbGFjaycsXG4gIGxvZ29VcHRpbWU6ICdsb2dvX3VwdGltZScsXG4gIGxvZ29XZWJob29rOiAnbG9nb193ZWJob29rJyxcbiAgbG9nb1dpbmRvd3M6ICdsb2dvX3dpbmRvd3MnLFxuICBsb2dvV29ya3BsYWNlU2VhcmNoOiAnbG9nb193b3JrcGxhY2Vfc2VhcmNoJyxcbiAgbG9nc0FwcDogJ2FwcF9sb2dzJyxcbiAgbG9nc3Rhc2hGaWx0ZXI6ICdsb2dzdGFzaF9maWx0ZXInLFxuICBsb2dzdGFzaElmOiAnbG9nc3Rhc2hfaWYnLFxuICBsb2dzdGFzaElucHV0OiAnbG9nc3Rhc2hfaW5wdXQnLFxuICBsb2dzdGFzaE91dHB1dDogJ2xvZ3N0YXNoX291dHB1dCcsXG4gIGxvZ3N0YXNoUXVldWU6ICdsb2dzdGFzaF9xdWV1ZScsXG4gIG1hY2hpbmVMZWFybmluZ0FwcDogJ2FwcF9tbCcsXG4gIG1hZ25ldDogJ21hZ25ldCcsXG4gIG1hZ25pZnlXaXRoRXhjbGFtYXRpb246ICdtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uJyxcbiAgbWFnbmlmeVdpdGhNaW51czogJ21hZ25pZnlXaXRoTWludXMnLFxuICBtYWduaWZ5V2l0aFBsdXM6ICdtYWduaWZ5V2l0aFBsdXMnLFxuICBtYW5hZ2VtZW50QXBwOiAnYXBwX21hbmFnZW1lbnQnLFxuICBtYXBNYXJrZXI6ICdtYXBfbWFya2VyJyxcbiAgbWVtb3J5OiAnbWVtb3J5JyxcbiAgbWVudTogJ21lbnUnLFxuICBtZW51RG93bjogJ21lbnVEb3duJyxcbiAgbWVudUxlZnQ6ICdtZW51TGVmdCcsXG4gIG1lbnVSaWdodDogJ21lbnVSaWdodCcsXG4gIG1lbnVVcDogJ21lbnVVcCcsXG4gIG1lcmdlOiAnbWVyZ2UnLFxuICBtZXRyaWNiZWF0QXBwOiAnYXBwX21ldHJpY2JlYXQnLFxuICBtZXRyaWNzQXBwOiAnYXBwX21ldHJpY3MnLFxuICBtaW5pbWl6ZTogJ21pbmltaXplJyxcbiAgbWludXM6ICdtaW51cycsXG4gIG1pbnVzSW5DaXJjbGU6ICdtaW51c19pbl9jaXJjbGUnLFxuICBtaW51c0luQ2lyY2xlRmlsbGVkOiAnbWludXNfaW5fY2lyY2xlX2ZpbGxlZCcsXG4gIG1vYmlsZTogJ21vYmlsZScsXG4gIG1vbml0b3JpbmdBcHA6ICdhcHBfbW9uaXRvcmluZycsXG4gIG1vb246ICdtb29uJyxcbiAgbmFtZXNwYWNlOiAnbmFtZXNwYWNlJyxcbiAgbmVzdGVkOiAnbmVzdGVkJyxcbiAgbm9kZTogJ25vZGUnLFxuICBub3RlYm9va0FwcDogJ2FwcF9ub3RlYm9vaycsXG4gIG51bWJlcjogJ251bWJlcicsXG4gIG9mZmxpbmU6ICdvZmZsaW5lJyxcbiAgb25saW5lOiAnb25saW5lJyxcbiAgb3V0bGllckRldGVjdGlvbkpvYjogJ21sX291dGxpZXJfZGV0ZWN0aW9uX2pvYicsXG4gIHBhY2thZ2U6ICdwYWNrYWdlJyxcbiAgcGFja2V0YmVhdEFwcDogJ2FwcF9wYWNrZXRiZWF0JyxcbiAgcGFnZVNlbGVjdDogJ3BhZ2VTZWxlY3QnLFxuICBwYWdlc1NlbGVjdDogJ3BhZ2VzU2VsZWN0JyxcbiAgcGFwZXJDbGlwOiAncGFwZXJfY2xpcCcsXG4gIHBhcnRpYWw6ICdwYXJ0aWFsJyxcbiAgcGF1c2U6ICdwYXVzZScsXG4gIHBheW1lbnQ6ICdwYXltZW50JyxcbiAgcGVuY2lsOiAncGVuY2lsJyxcbiAgcGVyY2VudDogJ3BlcmNlbnQnLFxuICBwaW46ICdwaW4nLFxuICBwaW5GaWxsZWQ6ICdwaW5fZmlsbGVkJyxcbiAgcGlwZWxpbmVBcHA6ICdhcHBfcGlwZWxpbmUnLFxuICBwbGF5OiAncGxheScsXG4gIHBsYXlGaWxsZWQ6ICdwbGF5RmlsbGVkJyxcbiAgcGx1czogJ3BsdXMnLFxuICBwbHVzSW5DaXJjbGU6ICdwbHVzX2luX2NpcmNsZScsXG4gIHBsdXNJbkNpcmNsZUZpbGxlZDogJ3BsdXNfaW5fY2lyY2xlX2ZpbGxlZCcsXG4gIHBvcG91dDogJ3BvcG91dCcsXG4gIHB1c2g6ICdwdXNoJyxcbiAgcXVlc3Rpb25JbkNpcmNsZTogJ3F1ZXN0aW9uX2luX2NpcmNsZScsXG4gIHF1b3RlOiAncXVvdGUnLFxuICByZWNlbnRseVZpZXdlZEFwcDogJ2FwcF9yZWNlbnRseV92aWV3ZWQnLFxuICByZWZyZXNoOiAncmVmcmVzaCcsXG4gIHJlZ3Jlc3Npb25Kb2I6ICdtbF9yZWdyZXNzaW9uX2pvYicsXG4gIHJlcG9ydGVyOiAncmVwb3J0ZXInLFxuICByZXBvcnRpbmdBcHA6ICdhcHBfcmVwb3J0aW5nJyxcbiAgcmV0dXJuS2V5OiAncmV0dXJuX2tleScsXG4gIHNhdmU6ICdzYXZlJyxcbiAgc2F2ZWRPYmplY3RzQXBwOiAnYXBwX3NhdmVkX29iamVjdHMnLFxuICBzY2FsZTogJ3NjYWxlJyxcbiAgc2VhcmNoOiAnc2VhcmNoJyxcbiAgc2VhcmNoUHJvZmlsZXJBcHA6ICdhcHBfc2VhcmNoX3Byb2ZpbGVyJyxcbiAgc2VjdXJpdHlBbmFseXRpY3NBcHA6ICdhcHBfc2VjdXJpdHlfYW5hbHl0aWNzJyxcbiAgc2VjdXJpdHlBcHA6ICdhcHBfc2VjdXJpdHknLFxuICBzZWN1cml0eVNpZ25hbDogJ3NlY3VyaXR5U2lnbmFsJyxcbiAgc2VjdXJpdHlTaWduYWxEZXRlY3RlZDogJ3NlY3VyaXR5U2lnbmFsRGV0ZWN0ZWQnLFxuICBzZWN1cml0eVNpZ25hbFJlc29sdmVkOiAnc2VjdXJpdHlTaWduYWxSZXNvbHZlZCcsXG4gIHNlc3Npb25WaWV3ZXI6ICdzZXNzaW9uVmlld2VyJyxcbiAgc2hhcmQ6ICdzaGFyZCcsXG4gIHNoYXJlOiAnc2hhcmUnLFxuICBzbm93Zmxha2U6ICdzbm93Zmxha2UnLFxuICBzb3J0RG93bjogJ3NvcnRfZG93bicsXG4gIHNvcnRMZWZ0OiAnc29ydExlZnQnLFxuICBzb3J0UmlnaHQ6ICdzb3J0UmlnaHQnLFxuICBzb3J0VXA6ICdzb3J0X3VwJyxcbiAgc29ydGFibGU6ICdzb3J0YWJsZScsXG4gIHNwYWNlc0FwcDogJ2FwcF9zcGFjZXMnLFxuICBzcWxBcHA6ICdhcHBfc3FsJyxcbiAgc3RhckVtcHR5OiAnc3Rhcl9lbXB0eScsXG4gIHN0YXJFbXB0eVNwYWNlOiAnc3Rhcl9lbXB0eV9zcGFjZScsXG4gIHN0YXJGaWxsZWQ6ICdzdGFyX2ZpbGxlZCcsXG4gIHN0YXJGaWxsZWRTcGFjZTogJ3N0YXJfZmlsbGVkX3NwYWNlJyxcbiAgc3Rhck1pbnVzRW1wdHk6ICdzdGFyX21pbnVzX2VtcHR5JyxcbiAgc3Rhck1pbnVzRmlsbGVkOiAnc3Rhcl9taW51c19maWxsZWQnLFxuICBzdGFyUGx1c0VtcHR5OiAnc3RhclBsdXNFbXB0eScsXG4gIHN0YXJQbHVzRmlsbGVkOiAnc3RhclBsdXNGaWxsZWQnLFxuICBzdGF0czogJ3N0YXRzJyxcbiAgc3RvcDogJ3N0b3AnLFxuICBzdG9wRmlsbGVkOiAnc3RvcF9maWxsZWQnLFxuICBzdG9wU2xhc2g6ICdzdG9wX3NsYXNoJyxcbiAgc3RvcmFnZTogJ3N0b3JhZ2UnLFxuICBzdHJpbmc6ICdzdHJpbmcnLFxuICBzdWJtb2R1bGU6ICdzdWJtb2R1bGUnLFxuICBzdW46ICdzdW4nLFxuICBzd2F0Y2hJbnB1dDogJ3N3YXRjaF9pbnB1dCcsXG4gIC8vIFVuZG9jdW1lbnRlZCBvbiBwdXJwb3NlLiBIYXMgYW4gZXh0cmEgc3Ryb2tlIGZvciBFdWlDb2xvclBpY2tlclxuICBzeW1saW5rOiAnc3ltbGluaycsXG4gIHRhYmxlRGVuc2l0eUNvbXBhY3Q6ICd0YWJsZV9kZW5zaXR5X2NvbXBhY3QnLFxuICB0YWJsZURlbnNpdHlFeHBhbmRlZDogJ3RhYmxlX2RlbnNpdHlfZXhwYW5kZWQnLFxuICB0YWJsZURlbnNpdHlOb3JtYWw6ICd0YWJsZV9kZW5zaXR5X25vcm1hbCcsXG4gIHRhYmxlT2ZDb250ZW50czogJ3RhYmxlT2ZDb250ZW50cycsXG4gIHRhZzogJ3RhZycsXG4gIHRlYXI6ICd0ZWFyJyxcbiAgdGVtcGVyYXR1cmU6ICd0ZW1wZXJhdHVyZScsXG4gIHRpbWVsaW5lOiAndGltZWxpbmUnLFxuICB0aW1lbGlvbkFwcDogJ2FwcF90aW1lbGlvbicsXG4gIHRpbWVSZWZyZXNoOiAndGltZVJlZnJlc2gnLFxuICB0aW1lc2xpZGVyOiAndGltZXNsaWRlcicsXG4gIHRyYWluaW5nOiAndHJhaW5pbmcnLFxuICB0cmFzaDogJ3RyYXNoJyxcbiAgdW5mb2xkOiAndW5mb2xkJyxcbiAgdW5saW5rOiAndW5saW5rJyxcbiAgdXBncmFkZUFzc2lzdGFudEFwcDogJ2FwcF91cGdyYWRlX2Fzc2lzdGFudCcsXG4gIHVwdGltZUFwcDogJ2FwcF91cHRpbWUnLFxuICB1c2VyOiAndXNlcicsXG4gIHVzZXJBdmF0YXI6ICd1c2VyQXZhdGFyJyxcbiAgdXNlcnM6ICd1c2VycycsXG4gIHVzZXJzUm9sZXNBcHA6ICdhcHBfdXNlcnNfcm9sZXMnLFxuICB2ZWN0b3I6ICd2ZWN0b3InLFxuICB2aWRlb1BsYXllcjogJ3ZpZGVvUGxheWVyJyxcbiAgdmlzQXJlYTogJ3Zpc19hcmVhJyxcbiAgdmlzQXJlYVN0YWNrZWQ6ICd2aXNfYXJlYV9zdGFja2VkJyxcbiAgdmlzQmFySG9yaXpvbnRhbDogJ3Zpc19iYXJfaG9yaXpvbnRhbCcsXG4gIHZpc0Jhckhvcml6b250YWxTdGFja2VkOiAndmlzX2Jhcl9ob3Jpem9udGFsX3N0YWNrZWQnLFxuICB2aXNCYXJWZXJ0aWNhbDogJ3Zpc19iYXJfdmVydGljYWwnLFxuICB2aXNCYXJWZXJ0aWNhbFN0YWNrZWQ6ICd2aXNfYmFyX3ZlcnRpY2FsX3N0YWNrZWQnLFxuICB2aXNHYXVnZTogJ3Zpc19nYXVnZScsXG4gIHZpc0dvYWw6ICd2aXNfZ29hbCcsXG4gIHZpc0xpbmU6ICd2aXNfbGluZScsXG4gIHZpc01hcENvb3JkaW5hdGU6ICd2aXNfbWFwX2Nvb3JkaW5hdGUnLFxuICB2aXNNYXBSZWdpb246ICd2aXNfbWFwX3JlZ2lvbicsXG4gIHZpc01ldHJpYzogJ3Zpc19tZXRyaWMnLFxuICB2aXNQaWU6ICd2aXNfcGllJyxcbiAgdmlzVGFibGU6ICd2aXNfdGFibGUnLFxuICB2aXNUYWdDbG91ZDogJ3Zpc190YWdfY2xvdWQnLFxuICB2aXNUZXh0OiAndmlzX3RleHQnLFxuICB2aXNUaW1lbGlvbjogJ3Zpc190aW1lbGlvbicsXG4gIHZpc1ZlZ2E6ICd2aXNfdmVnYScsXG4gIHZpc1Zpc3VhbEJ1aWxkZXI6ICd2aXNfdmlzdWFsX2J1aWxkZXInLFxuICB2aXN1YWxpemVBcHA6ICdhcHBfdmlzdWFsaXplJyxcbiAgd2F0Y2hlc0FwcDogJ2FwcF93YXRjaGVzJyxcbiAgd29yZFdyYXA6ICd3b3JkV3JhcCcsXG4gIHdvcmRXcmFwRGlzYWJsZWQ6ICd3b3JkV3JhcERpc2FibGVkJyxcbiAgd29ya3BsYWNlU2VhcmNoQXBwOiAnYXBwX3dvcmtwbGFjZV9zZWFyY2gnLFxuICB3cmVuY2g6ICd3cmVuY2gnLFxuICAvLyBUb2tlbiBJY29uIEltcG9ydHNcbiAgdG9rZW5BbGlhczogJ3Rva2VuQWxpYXMnLFxuICB0b2tlbkFubm90YXRpb246ICd0b2tlbkFubm90YXRpb24nLFxuICB0b2tlbkFycmF5OiAndG9rZW5BcnJheScsXG4gIHRva2VuQmluYXJ5OiAndG9rZW5CaW5hcnknLFxuICB0b2tlbkJvb2xlYW46ICd0b2tlbkJvb2xlYW4nLFxuICB0b2tlbkNsYXNzOiAndG9rZW5DbGFzcycsXG4gIHRva2VuQ29tcGxldGlvblN1Z2dlc3RlcjogJ3Rva2VuQ29tcGxldGlvblN1Z2dlc3RlcicsXG4gIHRva2VuQ29uc3RhbnQ6ICd0b2tlbkNvbnN0YW50JyxcbiAgdG9rZW5EYXRlOiAndG9rZW5EYXRlJyxcbiAgdG9rZW5EZW5zZVZlY3RvcjogJ3Rva2VuRGVuc2VWZWN0b3InLFxuICB0b2tlbkVsZW1lbnQ6ICd0b2tlbkVsZW1lbnQnLFxuICB0b2tlbkVudW06ICd0b2tlbkVudW0nLFxuICB0b2tlbkVudW1NZW1iZXI6ICd0b2tlbkVudW1NZW1iZXInLFxuICB0b2tlbkV2ZW50OiAndG9rZW5FdmVudCcsXG4gIHRva2VuRXhjZXB0aW9uOiAndG9rZW5FeGNlcHRpb24nLFxuICB0b2tlbkZpZWxkOiAndG9rZW5GaWVsZCcsXG4gIHRva2VuRmlsZTogJ3Rva2VuRmlsZScsXG4gIHRva2VuRmxhdHRlbmVkOiAndG9rZW5GbGF0dGVuZWQnLFxuICB0b2tlbkZ1bmN0aW9uOiAndG9rZW5GdW5jdGlvbicsXG4gIHRva2VuR2VvOiAndG9rZW5HZW8nLFxuICB0b2tlbkhpc3RvZ3JhbTogJ3Rva2VuSGlzdG9ncmFtJyxcbiAgdG9rZW5JbnRlcmZhY2U6ICd0b2tlbkludGVyZmFjZScsXG4gIHRva2VuSVA6ICd0b2tlbklQJyxcbiAgdG9rZW5Kb2luOiAndG9rZW5Kb2luJyxcbiAgdG9rZW5LZXk6ICd0b2tlbktleScsXG4gIHRva2VuS2V5d29yZDogJ3Rva2VuS2V5d29yZCcsXG4gIHRva2VuTWV0aG9kOiAndG9rZW5NZXRob2QnLFxuICB0b2tlbk1ldHJpY0NvdW50ZXI6ICd0b2tlbk1ldHJpY0NvdW50ZXInLFxuICB0b2tlbk1ldHJpY0dhdWdlOiAndG9rZW5NZXRyaWNHYXVnZScsXG4gIHRva2VuTW9kdWxlOiAndG9rZW5Nb2R1bGUnLFxuICB0b2tlbk5hbWVzcGFjZTogJ3Rva2VuTmFtZXNwYWNlJyxcbiAgdG9rZW5OZXN0ZWQ6ICd0b2tlbk5lc3RlZCcsXG4gIHRva2VuTnVsbDogJ3Rva2VuTnVsbCcsXG4gIHRva2VuTnVtYmVyOiAndG9rZW5OdW1iZXInLFxuICB0b2tlbk9iamVjdDogJ3Rva2VuT2JqZWN0JyxcbiAgdG9rZW5PcGVyYXRvcjogJ3Rva2VuT3BlcmF0b3InLFxuICB0b2tlblBhY2thZ2U6ICd0b2tlblBhY2thZ2UnLFxuICB0b2tlblBhcmFtZXRlcjogJ3Rva2VuUGFyYW1ldGVyJyxcbiAgdG9rZW5QZXJjb2xhdG9yOiAndG9rZW5QZXJjb2xhdG9yJyxcbiAgdG9rZW5Qcm9wZXJ0eTogJ3Rva2VuUHJvcGVydHknLFxuICB0b2tlblJhbmdlOiAndG9rZW5SYW5nZScsXG4gIHRva2VuUmFua0ZlYXR1cmU6ICd0b2tlblJhbmtGZWF0dXJlJyxcbiAgdG9rZW5SYW5rRmVhdHVyZXM6ICd0b2tlblJhbmtGZWF0dXJlcycsXG4gIHRva2VuUmVwbzogJ3Rva2VuUmVwbycsXG4gIHRva2VuU2VhcmNoVHlwZTogJ3Rva2VuU2VhcmNoVHlwZScsXG4gIHRva2VuU2hhcGU6ICd0b2tlblNoYXBlJyxcbiAgdG9rZW5TdHJpbmc6ICd0b2tlblN0cmluZycsXG4gIHRva2VuU3RydWN0OiAndG9rZW5TdHJ1Y3QnLFxuICB0b2tlblN5bWJvbDogJ3Rva2VuU3ltYm9sJyxcbiAgdG9rZW5UYWc6ICd0b2tlblRhZycsXG4gIHRva2VuVGV4dDogJ3Rva2VuVGV4dCcsXG4gIHRva2VuVG9rZW5Db3VudDogJ3Rva2VuVG9rZW5Db3VudCcsXG4gIHRva2VuVmFyaWFibGU6ICd0b2tlblZhcmlhYmxlJ1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzIH0gZnJvbSAncmVhY3QtZG9tJztcbnZhciBfcXVldWUgPSBbXTtcblxuZnVuY3Rpb24gcHJvY2Vzc1F1ZXVlKCkge1xuICAvLyB0aGUgcXVldWVkIGZ1bmN0aW9ucyB0cmlnZ2VyIHJlYWN0IHNldFN0YXRlcyB3aGljaCwgaWYgdW5iYXRjaGVkLFxuICAvLyBlYWNoIGNhdXNlIGEgZnVsbCB1cGRhdGUtPnJlbmRlci0+ZG9tIHBhc3MgX3BlciBmdW5jdGlvbl9cbiAgLy8gaW5zdGVhZCwgdGVsbCBSZWFjdCB0byB3YWl0IHVudGlsIGFsbCB1cGRhdGVzIGFyZSBmaW5pc2hlZCBiZWZvcmUgcmUtcmVuZGVyaW5nXG4gIHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzKGZ1bmN0aW9uICgpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IF9xdWV1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgX3F1ZXVlW2ldKCk7XG4gICAgfVxuXG4gICAgX3F1ZXVlLmxlbmd0aCA9IDA7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5xdWV1ZVN0YXRlQ2hhbmdlKGZuKSB7XG4gIGlmIChfcXVldWUubGVuZ3RoID09PSAwKSB7XG4gICAgc2V0VGltZW91dChwcm9jZXNzUXVldWUpO1xuICB9XG5cbiAgX3F1ZXVlLnB1c2goZm4pO1xufSIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuZXhwb3J0IHZhciBDT0xPUlMgPSBbJ2RlZmF1bHQnLCAncHJpbWFyeScsICdzdWNjZXNzJywgJ2FjY2VudCcsICd3YXJuaW5nJywgJ2RhbmdlcicsICd0ZXh0JywgJ3N1YmR1ZWQnLCAnZ2hvc3QnLCAnaW5oZXJpdCddO1xuZXhwb3J0IGZ1bmN0aW9uIGlzTmFtZWRDb2xvcihuYW1lKSB7XG4gIHJldHVybiBDT0xPUlMuaW5jbHVkZXMobmFtZSk7XG59IiwgImZ1bmN0aW9uIF9vYmplY3REZXN0cnVjdHVyaW5nRW1wdHkob2JqKSB7IGlmIChvYmogPT0gbnVsbCkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBkZXN0cnVjdHVyZSB1bmRlZmluZWRcIik7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBHbG9iYWwsIGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGV1aUZvY3VzUmluZywgZXVpU2Nyb2xsQmFyU3R5bGVzIH0gZnJvbSAnLi4vbWl4aW5zJztcbmltcG9ydCB7IHNoYWRlLCB0aW50LCB0cmFuc3BhcmVudGl6ZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NvbG9yJztcbmltcG9ydCB7IHVzZUV1aVRoZW1lIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGhlbWUnO1xuaW1wb3J0IHsgcmVzZXRTdHlsZXMgYXMgcmVzZXQgfSBmcm9tICcuL3Jlc2V0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aUdsb2JhbFN0eWxlcyA9IGZ1bmN0aW9uIEV1aUdsb2JhbFN0eWxlcyhfcmVmKSB7XG4gIF9vYmplY3REZXN0cnVjdHVyaW5nRW1wdHkoX3JlZik7XG5cbiAgdmFyIGV1aVRoZW1lQ29udGV4dCA9IHVzZUV1aVRoZW1lKCk7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZSxcbiAgICAgIGNvbG9yTW9kZSA9IGV1aVRoZW1lQ29udGV4dC5jb2xvck1vZGU7XG4gIHZhciBiYXNlID0gZXVpVGhlbWUuYmFzZSxcbiAgICAgIGNvbG9ycyA9IGV1aVRoZW1lLmNvbG9ycyxcbiAgICAgIGZvbnQgPSBldWlUaGVtZS5mb250O1xuICAvKipcbiAgICogRGVjbGFyaW5nIHRoZSB0b3AgbGV2ZWwgc2Nyb2xsYmFyIGNvbG9ycyB0byBtYXRjaCB0aGUgdGhlbWUgYWxzbyByZXF1aXJlcyBzZXR0aW5nIHRoZSBzaXplcyBvbiBDaHJvbWVcbiAgICogc28gdGhhdCBpdCBrbm93cyB0byB1c2UgY3VzdG9tIHN0eWxlcy4gVGhlcmVmb3JlLCB3ZSBqdXN0IHJldXNlIHRoZSBzYW1lIHNjcm9sbGJhciBtaXhpbiB3aXRoIHRoaWNrIHNpemUuXG4gICAqL1xuXG4gIHZhciBzY3JvbGxiYXJTdHlsZXMgPSBldWlTY3JvbGxCYXJTdHlsZXMoZXVpVGhlbWVDb250ZXh0LCB7XG4gICAgdHJhY2tDb2xvcjogY29sb3JNb2RlID09PSAnTElHSFQnID8gc2hhZGUoY29sb3JzLmJvZHksIDAuMDMpIDogdGludChjb2xvcnMuYm9keSwgMC4wNyksXG4gICAgd2lkdGg6ICdhdXRvJ1xuICB9KTtcbiAgLyoqXG4gICAqIFRoaXMgZm9udCByZXNldCBzZXRzIGFsbCBvdXIgYmFzZSBmb250L3R5cG9ncmFwaHkgcmVsYXRlZCBwcm9wZXJ0aWVzXG4gICAqIHRoYXQgYXJlIG5lZWRlZCB0byBvdmVycmlkZSBicm93c2VyLXNwZWNpZmljIGVsZW1lbnQgc2V0dGluZ3MuXG4gICAqL1xuXG4gIHZhciBmb250UmVzZXQgPSBcIlxcbiAgICBmb250LWZhbWlseTogXCIuY29uY2F0KGZvbnQuZmFtaWx5LCBcIjtcXG4gICAgZm9udC1zaXplOiBcIiwgXCJcIi5jb25jYXQoZm9udC5zY2FsZVtmb250LmJvZHkuc2NhbGVdICogYmFzZSwgXCJweFwiKSwgXCI7XFxuICAgIGxpbmUtaGVpZ2h0OiBcIikuY29uY2F0KGJhc2UgLyAoZm9udC5zY2FsZVtmb250LmJvZHkuc2NhbGVdICogYmFzZSksIFwiO1xcbiAgICBmb250LXdlaWdodDogXCIpLmNvbmNhdChmb250LndlaWdodFtmb250LmJvZHkud2VpZ2h0XSwgXCI7XFxuICBcIik7XG4gIC8qKlxuICAgKiBGaW5hbCBzdHlsZXNcbiAgICovXG5cbiAgdmFyIHN0eWxlcyA9IC8qI19fUFVSRV9fKi9jc3MocmVzZXQsIFwiIGh0bWx7XCIsIHNjcm9sbGJhclN0eWxlcywgXCIgXCIsIGZvbnRSZXNldCwgXCIgdGV4dC1zaXplLWFkanVzdDoxMDAlO2ZvbnQta2VybmluZzpub3JtYWw7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZC1jb2xvcjpcIiwgY29sb3JzLmJvZHksIFwiO2NvbG9yOlwiLCBjb2xvcnMudGV4dCwgXCI7fWNvZGUscHJlLGtiZCxzYW1we2ZvbnQtZmFtaWx5OlwiLCBmb250LmZhbWlseUNvZGUsIFwiO31pbnB1dCx0ZXh0YXJlYSxzZWxlY3R7XCIsIGZvbnRSZXNldCwgXCI7fWJ1dHRvbntmb250LWZhbWlseTpcIiwgZm9udC5mYW1pbHksIFwiO31lbXtmb250LXN0eWxlOml0YWxpYzt9c3Ryb25ne2ZvbnQtd2VpZ2h0OlwiLCBmb250LndlaWdodC5ib2xkLCBcIjt9Kjpmb2N1c3tcIiwgZXVpRm9jdXNSaW5nKGV1aVRoZW1lKSwgXCI7fTo6c2VsZWN0aW9ue2JhY2tncm91bmQ6XCIsIHRyYW5zcGFyZW50aXplKGNvbG9ycy5wcmltYXJ5LCBjb2xvck1vZGUgPT09ICdMSUdIVCcgPyAwLjEgOiAwLjIpLCBcIjt9YXtjb2xvcjpcIiwgY29sb3JzLnByaW1hcnlUZXh0LCBcIjsmLCY6aG92ZXIsJjpmb2N1c3t0ZXh0LWRlY29yYXRpb246bm9uZTt9fS5ldWlCb2R5LWhhc1BvcnRhbENvbnRlbnR7cG9zaXRpb246cmVsYXRpdmU7fTtsYWJlbDpzdHlsZXM7XCIpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChHbG9iYWwsIHtcbiAgICBzdHlsZXM6IHN0eWxlc1xuICB9KTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBzaGFkZSwgdGludCwgdHJhbnNwYXJlbnRpemUsIHVzZUV1aVRoZW1lIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuZXhwb3J0IHZhciBCQUNLR1JPVU5EX0NPTE9SUyA9IFsndHJhbnNwYXJlbnQnLCAncGxhaW4nLCAnc3ViZHVlZCcsICdhY2NlbnQnLCAncHJpbWFyeScsICdzdWNjZXNzJywgJ3dhcm5pbmcnLCAnZGFuZ2VyJ107XG5leHBvcnQgdmFyIGV1aUJhY2tncm91bmRDb2xvciA9IGZ1bmN0aW9uIGV1aUJhY2tncm91bmRDb2xvcihfcmVmLCBjb2xvcikge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmLmV1aVRoZW1lLFxuICAgICAgY29sb3JNb2RlID0gX3JlZi5jb2xvck1vZGU7XG5cbiAgdmFyIF9yZWYyID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiB7fSxcbiAgICAgIG1ldGhvZCA9IF9yZWYyLm1ldGhvZDtcblxuICBpZiAoY29sb3IgPT09ICd0cmFuc3BhcmVudCcpIHJldHVybiAndHJhbnNwYXJlbnQnO1xuXG4gIGlmIChtZXRob2QgPT09ICd0cmFuc3BhcmVudCcpIHtcbiAgICBpZiAoY29sb3IgPT09ICdwbGFpbicpIHtcbiAgICAgIHJldHVybiB0cmFuc3BhcmVudGl6ZShldWlUaGVtZS5jb2xvcnMuZ2hvc3QsIDAuMik7XG4gICAgfSBlbHNlIGlmIChjb2xvciA9PT0gJ3N1YmR1ZWQnKSB7XG4gICAgICByZXR1cm4gdHJhbnNwYXJlbnRpemUoZXVpVGhlbWUuY29sb3JzLmxpZ2h0U2hhZGUsIDAuMik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0cmFuc3BhcmVudGl6ZShldWlUaGVtZS5jb2xvcnNbY29sb3JdLCAwLjEpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgdGludE9yU2hhZGUgPSBmdW5jdGlvbiB0aW50T3JTaGFkZShjb2xvcikge1xuICAgICAgcmV0dXJuIGNvbG9yTW9kZSA9PT0gJ0RBUksnID8gc2hhZGUoY29sb3IsIDAuOCkgOiB0aW50KGNvbG9yLCAwLjkpO1xuICAgIH07XG5cbiAgICBzd2l0Y2ggKGNvbG9yKSB7XG4gICAgICBjYXNlICdwbGFpbic6XG4gICAgICAgIHJldHVybiBldWlUaGVtZS5jb2xvcnMuZW1wdHlTaGFkZTtcblxuICAgICAgY2FzZSAnc3ViZHVlZCc6XG4gICAgICAgIHJldHVybiBldWlUaGVtZS5jb2xvcnMuYm9keTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHRpbnRPclNoYWRlKGV1aVRoZW1lLmNvbG9yc1tjb2xvcl0pO1xuICAgIH1cbiAgfVxufTtcbmV4cG9ydCB2YXIgdXNlRXVpQmFja2dyb3VuZENvbG9yID0gZnVuY3Rpb24gdXNlRXVpQmFja2dyb3VuZENvbG9yKGNvbG9yKSB7XG4gIHZhciBfcmVmMyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge30sXG4gICAgICBtZXRob2QgPSBfcmVmMy5tZXRob2Q7XG5cbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgcmV0dXJuIGV1aUJhY2tncm91bmRDb2xvcihldWlUaGVtZSwgY29sb3IsIHtcbiAgICBtZXRob2Q6IG1ldGhvZFxuICB9KTtcbn07XG5leHBvcnQgdmFyIHVzZUV1aUJhY2tncm91bmRDb2xvckNTUyA9IGZ1bmN0aW9uIHVzZUV1aUJhY2tncm91bmRDb2xvckNTUygpIHtcbiAgcmV0dXJuIHtcbiAgICB0cmFuc3BhcmVudDogLyojX19QVVJFX18qL2NzcyhcImJhY2tncm91bmQtY29sb3I6XCIsIHVzZUV1aUJhY2tncm91bmRDb2xvcigndHJhbnNwYXJlbnQnKSwgXCI7O2xhYmVsOnRyYW5zcGFyZW50O1wiKSxcbiAgICBwbGFpbjogLyojX19QVVJFX18qL2NzcyhcImJhY2tncm91bmQtY29sb3I6XCIsIHVzZUV1aUJhY2tncm91bmRDb2xvcigncGxhaW4nKSwgXCI7O2xhYmVsOnBsYWluO1wiKSxcbiAgICBzdWJkdWVkOiAvKiNfX1BVUkVfXyovY3NzKFwiYmFja2dyb3VuZC1jb2xvcjpcIiwgdXNlRXVpQmFja2dyb3VuZENvbG9yKCdzdWJkdWVkJyksIFwiOztsYWJlbDpzdWJkdWVkO1wiKSxcbiAgICBhY2NlbnQ6IC8qI19fUFVSRV9fKi9jc3MoXCJiYWNrZ3JvdW5kLWNvbG9yOlwiLCB1c2VFdWlCYWNrZ3JvdW5kQ29sb3IoJ2FjY2VudCcpLCBcIjs7bGFiZWw6YWNjZW50O1wiKSxcbiAgICBwcmltYXJ5OiAvKiNfX1BVUkVfXyovY3NzKFwiYmFja2dyb3VuZC1jb2xvcjpcIiwgdXNlRXVpQmFja2dyb3VuZENvbG9yKCdwcmltYXJ5JyksIFwiOztsYWJlbDpwcmltYXJ5O1wiKSxcbiAgICBzdWNjZXNzOiAvKiNfX1BVUkVfXyovY3NzKFwiYmFja2dyb3VuZC1jb2xvcjpcIiwgdXNlRXVpQmFja2dyb3VuZENvbG9yKCdzdWNjZXNzJyksIFwiOztsYWJlbDpzdWNjZXNzO1wiKSxcbiAgICB3YXJuaW5nOiAvKiNfX1BVUkVfXyovY3NzKFwiYmFja2dyb3VuZC1jb2xvcjpcIiwgdXNlRXVpQmFja2dyb3VuZENvbG9yKCd3YXJuaW5nJyksIFwiOztsYWJlbDp3YXJuaW5nO1wiKSxcbiAgICBkYW5nZXI6IC8qI19fUFVSRV9fKi9jc3MoXCJiYWNrZ3JvdW5kLWNvbG9yOlwiLCB1c2VFdWlCYWNrZ3JvdW5kQ29sb3IoJ2RhbmdlcicpLCBcIjs7bGFiZWw6ZGFuZ2VyO1wiKVxuICB9O1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IHVzZUV1aVRoZW1lIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGhlbWUnO1xuaW1wb3J0IHsgdHJhbnNwYXJlbnRpemUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb2xvcic7XG4vKipcbiAqIFNldCBzY3JvbGwgYmFyIGFwcGVhcmFuY2Ugb24gQ2hyb21lIChhbmQgZmlyZWZveCkuXG4gKiBBbGwgcGFyYW1ldGVycyBhcmUgb3B0aW9uYWwgYW5kIGRlZmF1bHQgdG8gc3BlY2lmaWMgZ2xvYmFsIHNldHRpbmdzLlxuICovXG5cbmV4cG9ydCB2YXIgZXVpU2Nyb2xsQmFyU3R5bGVzID0gZnVuY3Rpb24gZXVpU2Nyb2xsQmFyU3R5bGVzKF9yZWYpIHtcbiAgdmFyIF9yZWYkZXVpVGhlbWUgPSBfcmVmLmV1aVRoZW1lLFxuICAgICAgY29sb3JzID0gX3JlZiRldWlUaGVtZS5jb2xvcnMsXG4gICAgICBzaXplID0gX3JlZiRldWlUaGVtZS5zaXplO1xuXG4gIHZhciBfcmVmMiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge30sXG4gICAgICBfdGh1bWJDb2xvciA9IF9yZWYyLnRodW1iQ29sb3IsXG4gICAgICBfcmVmMiR0cmFja0NvbG9yID0gX3JlZjIudHJhY2tDb2xvcixcbiAgICAgIHRyYWNrQ29sb3IgPSBfcmVmMiR0cmFja0NvbG9yID09PSB2b2lkIDAgPyAndHJhbnNwYXJlbnQnIDogX3JlZjIkdHJhY2tDb2xvcixcbiAgICAgIF9yZWYyJHdpZHRoID0gX3JlZjIud2lkdGgsXG4gICAgICB3aWR0aCA9IF9yZWYyJHdpZHRoID09PSB2b2lkIDAgPyAndGhpbicgOiBfcmVmMiR3aWR0aCxcbiAgICAgIF9zaXplID0gX3JlZjIuc2l6ZSxcbiAgICAgIF9jb3JuZXIgPSBfcmVmMi5jb3JuZXI7XG5cbiAgLy8gU2V0IGRlZmF1bHRzIGZyb20gdGhlbWVcbiAgdmFyIHRodW1iQ29sb3IgPSBfdGh1bWJDb2xvciB8fCB0cmFuc3BhcmVudGl6ZShjb2xvcnMuZGFya1NoYWRlLCAwLjUpO1xuXG4gIHZhciBzY3JvbGxCYXJTaXplID0gX3NpemUgfHwgc2l6ZS5iYXNlO1xuICB2YXIgc2Nyb2xsQmFyQ29ybmVyID0gX2Nvcm5lciB8fCB3aWR0aCA9PT0gJ3RoaW4nID8gXCJjYWxjKFwiLmNvbmNhdChzaXplLnMsIFwiICogMC43NSlcIikgOiBzaXplLnhzOyAvLyBGaXJlZm94J3Mgc2Nyb2xsYmFyIGNvbG9yaW5nIGNhc2NhZGVzLCBidXQgdGhlIHNpemluZyBkb2VzIG5vdCxcbiAgLy8gc28gaXQncyBiZWluZyBhZGRlZCB0byB0aGlzIG1peGluIGZvciBhbGxvd2luZyBzdXBwb3J0IHdoZXJldmVyIGN1c3RvbSBzY3JvbGxiYXJzIGFyZVxuXG4gIHZhciBmaXJlZm94U3VwcG9ydCA9IFwic2Nyb2xsYmFyLWNvbG9yOiBcIi5jb25jYXQodGh1bWJDb2xvciwgXCIgXCIpLmNvbmNhdCh0cmFja0NvbG9yLCBcIjtcIik7XG4gIHJldHVybiBcInNjcm9sbGJhci13aWR0aDogXCIuY29uY2F0KHdpZHRoLCBcIjtcXG5cXG4gICAgJjo6LXdlYmtpdC1zY3JvbGxiYXIge1xcbiAgICAgIHdpZHRoOiBcIikuY29uY2F0KHNjcm9sbEJhclNpemUsIFwiO1xcbiAgICAgIGhlaWdodDogXCIpLmNvbmNhdChzY3JvbGxCYXJTaXplLCBcIjtcXG4gICAgfVxcblxcbiAgICAmOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7XFxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogXCIpLmNvbmNhdCh0aHVtYkNvbG9yLCBcIjtcXG4gICAgICBiYWNrZ3JvdW5kLWNsaXA6IGNvbnRlbnQtYm94O1xcbiAgICAgIGJvcmRlci1yYWRpdXM6IFwiKS5jb25jYXQoc2Nyb2xsQmFyU2l6ZSwgXCI7XFxuICAgICAgYm9yZGVyOiBcIikuY29uY2F0KHNjcm9sbEJhckNvcm5lciwgXCIgc29saWQgXCIpLmNvbmNhdCh0cmFja0NvbG9yLCBcIjtcXG4gICAgfVxcblxcbiAgICAmOjotd2Via2l0LXNjcm9sbGJhci1jb3JuZXIsXFxuICAgICY6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHtcXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBcIikuY29uY2F0KHRyYWNrQ29sb3IsIFwiO1xcbiAgICB9XFxuXFxuICAgIFwiKS5jb25jYXQoZmlyZWZveFN1cHBvcnQsIFwiXFxuICBcIik7XG59O1xuZXhwb3J0IHZhciB1c2VFdWlTY3JvbGxCYXIgPSBmdW5jdGlvbiB1c2VFdWlTY3JvbGxCYXIob3B0aW9ucykge1xuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICByZXR1cm4gZXVpU2Nyb2xsQmFyU3R5bGVzKGV1aVRoZW1lLCBvcHRpb25zKTtcbn07XG4vKipcbiAqICpJTlRFUk5BTCpcbiAqIE92ZXJmbG93IHNoYWRvdyBtYXNrcyBmb3IgdXNlIGluIFlTY3JvbGwgYW5kIFhTY3JvbGwgaGVscGVyc1xuICovXG5cbnZhciBldWlPdmVyZmxvd1NoYWRvd1N0eWxlcyA9IGZ1bmN0aW9uIGV1aU92ZXJmbG93U2hhZG93U3R5bGVzKF9yZWYzKSB7XG4gIHZhciBzaXplID0gX3JlZjMuZXVpVGhlbWUuc2l6ZTtcblxuICB2YXIgX3JlZjQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9LFxuICAgICAgX2RpcmVjdGlvbiA9IF9yZWY0LmRpcmVjdGlvbixcbiAgICAgIF9zaWRlID0gX3JlZjQuc2lkZTtcblxuICB2YXIgZGlyZWN0aW9uID0gX2RpcmVjdGlvbiB8fCAneSc7XG4gIHZhciBzaWRlID0gX3NpZGUgfHwgJ2JvdGgnO1xuICB2YXIgaGlkZUhlaWdodCA9IFwiY2FsYyhcIi5jb25jYXQoc2l6ZS5iYXNlLCBcIiAqIDAuNzUgKiAxLjI1KVwiKTtcbiAgdmFyIGdyYWRpZW50U3RhcnQgPSBcIlxcbiAgXCIuY29uY2F0KHRyYW5zcGFyZW50aXplKCdyZWQnLCAwLjEpLCBcIiAwJSxcXG4gIFwiKS5jb25jYXQodHJhbnNwYXJlbnRpemUoJ3JlZCcsIDEpLCBcIiBcIikuY29uY2F0KGhpZGVIZWlnaHQsIFwiXFxuICBcIik7XG4gIHZhciBncmFkaWVudEVuZCA9IFwiXFxuICBcIi5jb25jYXQodHJhbnNwYXJlbnRpemUoJ3JlZCcsIDEpLCBcIiBjYWxjKDEwMCUgLSBcIikuY29uY2F0KGhpZGVIZWlnaHQsIFwiKSxcXG4gIFwiKS5jb25jYXQodHJhbnNwYXJlbnRpemUoJ3JlZCcsIDAuMSksIFwiIDEwMCVcXG4gIFwiKTtcbiAgdmFyIGdyYWRpZW50ID0gJyc7XG5cbiAgaWYgKHNpZGUpIHtcbiAgICBpZiAoc2lkZSA9PT0gJ2JvdGgnKSB7XG4gICAgICBncmFkaWVudCA9IFwiXCIuY29uY2F0KGdyYWRpZW50U3RhcnQsIFwiLCBcIikuY29uY2F0KGdyYWRpZW50RW5kKTtcbiAgICB9IGVsc2UgaWYgKHNpZGUgPT09ICdzdGFydCcpIHtcbiAgICAgIGdyYWRpZW50ID0gXCJcIi5jb25jYXQoZ3JhZGllbnRTdGFydCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdyYWRpZW50ID0gXCJcIi5jb25jYXQoZ3JhZGllbnRFbmQpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChkaXJlY3Rpb24gPT09ICd5Jykge1xuICAgIHJldHVybiBcIm1hc2staW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIFwiLmNvbmNhdChncmFkaWVudCwgXCIpO1wiKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gXCJtYXNrLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIFwiLmNvbmNhdChncmFkaWVudCwgXCIpO1wiKTtcbiAgfVxufTtcbi8qKlxuICogMS4gRm9jdXMgcmluZ3Mgc2hvdWxkbid0IGJlIHZpc2libGUgb24gc2Nyb2xsYWJsZSByZWdpb25zLCBidXQgYTExeSByZXF1aXJlcyB0aGVtIHRvIGJlIGZvY3VzYWJsZS5cbiAqICAgIEJyb3dzZXIncyBzdXBwb3J0aW5nIGA6Zm9jdXMtdmlzaWJsZWAgd2lsbCBzdGlsbCBzaG93IG91dGxpbmUgb24ga2V5Ym9hcmQgZm9jdXMgb25seS5cbiAqICAgIE90aGVycyBsaWtlIFNhZmFyaSwgd29uJ3Qgc2hvdyBhbnl0aGluZyBhdCBhbGwuXG4gKi9cbi8vIFRPRE86IEhvdyBkbyB3ZSB1c2UgRW1vdGlvbiB0byBvdXRwdXQgdGhlIENTUyBjbGFzcyB1dGlsaXRpZXMgaW5zdGVhZD9cblxuXG5leHBvcnQgdmFyIGV1aVlTY3JvbGwgPSBmdW5jdGlvbiBldWlZU2Nyb2xsKGV1aVRoZW1lKSB7XG4gIHJldHVybiBcIlxcbiAgXCIuY29uY2F0KGV1aVNjcm9sbEJhclN0eWxlcyhldWlUaGVtZSksIFwiXFxuICBoZWlnaHQ6IDEwMCU7XFxuICBvdmVyZmxvdy15OiBhdXRvO1xcbiAgb3ZlcmZsb3cteDogaGlkZGVuO1xcbiAgJjpmb2N1cyB7XFxuICAgIG91dGxpbmU6IG5vbmU7IC8qIDEgKi9cXG4gIH1cXG5cIik7XG59O1xuZXhwb3J0IHZhciB1c2VFdWlZU2Nyb2xsID0gZnVuY3Rpb24gdXNlRXVpWVNjcm9sbCgpIHtcbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgcmV0dXJuIGV1aVlTY3JvbGwoZXVpVGhlbWUpO1xufTtcbmV4cG9ydCB2YXIgZXVpWVNjcm9sbFdpdGhTaGFkb3dzID0gZnVuY3Rpb24gZXVpWVNjcm9sbFdpdGhTaGFkb3dzKGV1aVRoZW1lKSB7XG4gIHJldHVybiBcIlxcbiAgXCIuY29uY2F0KGV1aVlTY3JvbGwoZXVpVGhlbWUpLCBcIlxcbiAgXCIpLmNvbmNhdChldWlPdmVyZmxvd1NoYWRvd1N0eWxlcyhldWlUaGVtZSwge1xuICAgIGRpcmVjdGlvbjogJ3knXG4gIH0pLCBcIlxcblwiKTtcbn07XG5leHBvcnQgdmFyIHVzZUV1aVlTY3JvbGxXaXRoU2hhZG93cyA9IGZ1bmN0aW9uIHVzZUV1aVlTY3JvbGxXaXRoU2hhZG93cygpIHtcbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgcmV0dXJuIGV1aVlTY3JvbGxXaXRoU2hhZG93cyhldWlUaGVtZSk7XG59O1xuZXhwb3J0IHZhciBldWlYU2Nyb2xsID0gZnVuY3Rpb24gZXVpWFNjcm9sbChldWlUaGVtZSkge1xuICByZXR1cm4gXCJcXG4gIFwiLmNvbmNhdChldWlTY3JvbGxCYXJTdHlsZXMoZXVpVGhlbWUpLCBcIlxcbiAgb3ZlcmZsb3cteDogYXV0bztcXG4gICY6Zm9jdXMge1xcbiAgICBvdXRsaW5lOiBub25lOyAvKiAxICovXFxuICB9XFxuXCIpO1xufTtcbmV4cG9ydCB2YXIgdXNlRXVpWFNjcm9sbCA9IGZ1bmN0aW9uIHVzZUV1aVhTY3JvbGwoKSB7XG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHJldHVybiBldWlYU2Nyb2xsKGV1aVRoZW1lKTtcbn07XG5leHBvcnQgdmFyIGV1aVhTY3JvbGxXaXRoU2hhZG93cyA9IGZ1bmN0aW9uIGV1aVhTY3JvbGxXaXRoU2hhZG93cyhldWlUaGVtZSkge1xuICByZXR1cm4gXCJcXG4gIFwiLmNvbmNhdChldWlYU2Nyb2xsKGV1aVRoZW1lKSwgXCJcXG4gIFwiKS5jb25jYXQoZXVpT3ZlcmZsb3dTaGFkb3dTdHlsZXMoZXVpVGhlbWUsIHtcbiAgICBkaXJlY3Rpb246ICd4J1xuICB9KSwgXCJcXG5cIik7XG59O1xuZXhwb3J0IHZhciB1c2VFdWlYU2Nyb2xsV2l0aFNoYWRvd3MgPSBmdW5jdGlvbiB1c2VFdWlYU2Nyb2xsV2l0aFNoYWRvd3MoKSB7XG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHJldHVybiBldWlYU2Nyb2xsV2l0aFNoYWRvd3MoZXVpVGhlbWUpO1xufTtcbmV4cG9ydCB2YXIgZXVpT3ZlcmZsb3dTY3JvbGwgPSBmdW5jdGlvbiBldWlPdmVyZmxvd1Njcm9sbChldWlUaGVtZSkge1xuICB2YXIgX3JlZjUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9LFxuICAgICAgZGlyZWN0aW9uID0gX3JlZjUuZGlyZWN0aW9uLFxuICAgICAgX3JlZjUkbWFzayA9IF9yZWY1Lm1hc2ssXG4gICAgICBtYXNrID0gX3JlZjUkbWFzayA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmNSRtYXNrO1xuXG4gIHN3aXRjaCAoZGlyZWN0aW9uKSB7XG4gICAgY2FzZSAneSc6XG4gICAgICByZXR1cm4gbWFzayA/IGV1aVlTY3JvbGxXaXRoU2hhZG93cyhldWlUaGVtZSkgOiBldWlZU2Nyb2xsKGV1aVRoZW1lKTtcblxuICAgIGNhc2UgJ3gnOlxuICAgICAgcmV0dXJuIG1hc2sgPyBldWlYU2Nyb2xsV2l0aFNoYWRvd3MoZXVpVGhlbWUpIDogZXVpWFNjcm9sbChldWlUaGVtZSk7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgY29uc29sZS53YXJuKCdQbGVhc2UgcHJvdmlkZSBhIHZhbGlkIGRpcmVjdGlvbiBvcHRpb24gdG8gdXNlRXVpT3ZlcmZsb3dTY3JvbGwnKTtcbiAgICAgIHJldHVybiAnJztcbiAgfVxufTtcbmV4cG9ydCB2YXIgdXNlRXVpT3ZlcmZsb3dTY3JvbGwgPSBmdW5jdGlvbiB1c2VFdWlPdmVyZmxvd1Njcm9sbChkaXJlY3Rpb24pIHtcbiAgdmFyIG1hc2sgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZhbHNlO1xuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICByZXR1cm4gZXVpT3ZlcmZsb3dTY3JvbGwoZXVpVGhlbWUsIHtcbiAgICBkaXJlY3Rpb246IGRpcmVjdGlvbixcbiAgICBtYXNrOiBtYXNrXG4gIH0pO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IHVzZUV1aVRoZW1lIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGhlbWUnO1xuaW1wb3J0IHsgbG9naWNhbFNpZGUgfSBmcm9tICcuLi9mdW5jdGlvbnMnO1xuZXhwb3J0IHZhciBQQURESU5HX1NJWkVTID0gWydub25lJywgJ3hzJywgJ3MnLCAnbScsICdsJywgJ3hsJ107XG5leHBvcnQgdmFyIGV1aVBhZGRpbmdTaXplID0gZnVuY3Rpb24gZXVpUGFkZGluZ1NpemUoX3JlZiwgc2l6ZSkge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmLmV1aVRoZW1lO1xuXG4gIHN3aXRjaCAoc2l6ZSkge1xuICAgIGNhc2UgJ25vbmUnOlxuICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICBjYXNlICdtJzpcbiAgICAgIHJldHVybiBldWlUaGVtZS5zaXplLmJhc2U7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGV1aVRoZW1lLnNpemVbc2l6ZV07XG4gIH1cbn07XG5leHBvcnQgdmFyIHVzZUV1aVBhZGRpbmdTaXplID0gZnVuY3Rpb24gdXNlRXVpUGFkZGluZ1NpemUoc2l6ZSkge1xuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICByZXR1cm4gZXVpUGFkZGluZ1NpemUoZXVpVGhlbWUsIHNpemUpO1xufTtcbmV4cG9ydCB2YXIgdXNlRXVpUGFkZGluZ0NTUyA9IGZ1bmN0aW9uIHVzZUV1aVBhZGRpbmdDU1Moc2lkZSkge1xuICB2YXIgcHJvcGVydHkgPSBzaWRlID8gXCJwYWRkaW5nLVwiLmNvbmNhdChsb2dpY2FsU2lkZVtzaWRlXSkgOiAncGFkZGluZyc7XG4gIHJldHVybiB7XG4gICAgbm9uZTogbnVsbCxcbiAgICB4czogLyojX19QVVJFX18qL2Nzcyhwcm9wZXJ0eSwgXCI6XCIsIHVzZUV1aVBhZGRpbmdTaXplKCd4cycpLCBcIjs7bGFiZWw6eHM7XCIpLFxuICAgIHM6IC8qI19fUFVSRV9fKi9jc3MocHJvcGVydHksIFwiOlwiLCB1c2VFdWlQYWRkaW5nU2l6ZSgncycpLCBcIjs7bGFiZWw6cztcIiksXG4gICAgbTogLyojX19QVVJFX18qL2Nzcyhwcm9wZXJ0eSwgXCI6XCIsIHVzZUV1aVBhZGRpbmdTaXplKCdtJyksIFwiOztsYWJlbDptO1wiKSxcbiAgICBsOiAvKiNfX1BVUkVfXyovY3NzKHByb3BlcnR5LCBcIjpcIiwgdXNlRXVpUGFkZGluZ1NpemUoJ2wnKSwgXCI7O2xhYmVsOmw7XCIpLFxuICAgIHhsOiAvKiNfX1BVUkVfXyovY3NzKHByb3BlcnR5LCBcIjpcIiwgdXNlRXVpUGFkZGluZ1NpemUoJ3hsJyksIFwiOztsYWJlbDp4bDtcIilcbiAgfTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcblxuLyoqXG4gKiBJdCBpcyBiZXN0IHByYWN0aWNlIHRvIHV0aWxpemUgdGhlIGJyb3dzZXIncyBkZWZhdWx0IGBvdXRsaW5lYCBwcm9wZXJ0eSBmb3IgaGFuZGxpbmcgZm9jdXMgcmluZ3MuXG4gKiBIb3dldmVyLCBzb21lIGNvbXBvbmVudHMgbmVlZCB0byBiZSBmb3JjZWQgdG8gaGF2ZSB0aGUgc2FtZSBiZWhhdmlvciwgb3IgYWRqdXN0IHRoZSBkaXNwbGF5LlxuICogVGhpcyBmdW5jdGlvbiByZS1hcHBsaWVzIHRoZSBzYW1lIGRlZmF1bHQgb3V0bGluZSB3aXRoIGEgY291cGxlIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBldWlUaGVtZSBVc2VFdWlUaGVtZS5ldWlUaGVtZVxuICogQHBhcmFtIG9mZnNldCBBY2NlcHRzIGEgc3BlY2lmaWMgbWVhc3VyZW1lbnQgb3IgJ2luc2V0JywgJ291dHNldCcgb3IgJ2NlbnRlcicgdG8gYWRqdXN0IG91dGxpbmUgcG9zaXRpb25cbiAqIEBwYXJhbSBjb2xvciBBY2NlcHRzIGFueSBDU1MgY29sb3IsICoqTm90ZTogb25seSB3b3JrcyBpbiAtd2Via2l0LSoqXG4gKi9cbmV4cG9ydCB2YXIgZXVpRm9jdXNSaW5nID0gZnVuY3Rpb24gZXVpRm9jdXNSaW5nKGV1aVRoZW1lKSB7XG4gIHZhciBvZmZzZXQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6ICdjZW50ZXInO1xuICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkO1xuICAvLyBXaWR0aCBpcyBlbmZvcmNlZCBhcyBhIGNvbnN0YW50IGF0IHRoZSBnbG9iYWwgdGhlbWUgbGF5ZXJcbiAgdmFyIG91dGxpbmVXaWR0aCA9IGV1aVRoZW1lLmZvY3VzLndpZHRoO1xuICB2YXIgb3V0bGluZUNvbG9yID0gKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5jb2xvcikgfHwgZXVpVGhlbWUuZm9jdXMuY29sb3I7XG4gIHZhciBvdXRsaW5lT2Zmc2V0ID0gb2Zmc2V0O1xuXG4gIGlmIChvZmZzZXQgPT09ICdpbnNldCcpIHtcbiAgICBvdXRsaW5lT2Zmc2V0ID0gXCItXCIuY29uY2F0KG91dGxpbmVXaWR0aCk7XG4gIH0gZWxzZSBpZiAob2Zmc2V0ID09PSAnb3V0c2V0Jykge1xuICAgIG91dGxpbmVPZmZzZXQgPSBcIlwiLmNvbmNhdChvdXRsaW5lV2lkdGgpO1xuICB9IGVsc2UgaWYgKG9mZnNldCA9PT0gJ2NlbnRlcicpIHtcbiAgICBvdXRsaW5lT2Zmc2V0ID0gXCJjYWxjKFwiLmNvbmNhdChvdXRsaW5lV2lkdGgsIFwiIC8gLTIpO1wiKTtcbiAgfSAvLyBUaGlzIGZ1bmN0aW9uIHV0aWxpemVzIGBmb2N1cy12aXNpYmxlYCB0byB0dXJuIG9uIGZvY3VzIG91dGxpbmVzLlxuICAvLyBCdXQgdGhpcyBpcyBicm93c2VyLWRlcGVuZGVuZDpcbiAgLy8gXHVEODNEXHVEQzQ5IFNhZmFyaSBhbmQgRmlyZWZveCBpbm5hdGVseSByZXNwZWN0IG9ubHkgc2hvd2luZyB0aGUgb3V0bGluZSB3aXRoIGtleWJvYXJkIG9ubHlcbiAgLy8gXHVEODNEXHVEQzk0IEJ1dCB0aGV5IGRvbid0IGFsbG93IGNvbG9yaW5nIG9mIHRoZSAnYXV0bycvZGVmYXVsdCBvdXRsaW5lLCBzbyBjb250cmFzdCBpcyBubyBnb29kIGluIGRhcmsgbW9kZS5cbiAgLy8gXHVEODNEXHVEQzQ5IEZvciB0aGVzZSBicm93c2VycyB3ZSB1c2UgdGhlIHNvbGlkIHR5cGUgaW4gb3JkZXIgdG8gbWF0Y2ggd2l0aCBgY3VycmVudENvbG9yLlxuICAvLyBcdUQ4M0RcdURFMjYgV2hpY2ggZG9lcyBtZWFucyB0aGUgb3V0bGluZSB3aWxsIGJlIHNxdWFyZVxuXG5cbiAgcmV0dXJuIFwiXFxuICAgIG91dGxpbmU6IFwiLmNvbmNhdChvdXRsaW5lV2lkdGgsIFwiIHNvbGlkIFwiKS5jb25jYXQob3V0bGluZUNvbG9yLCBcIjtcXG4gICAgb3V0bGluZS1vZmZzZXQ6IFwiKS5jb25jYXQob3V0bGluZU9mZnNldCwgXCI7XFxuXFxuICAgIC8vIFxcdUQ4M0RcXHVEQzQwIENocm9tZSByZXNwZWN0cyA6Zm9jdXMtdmlzaWJsZSBhbmQgYWxsb3dzIGNvbG9yaW5nIHRoZSBgYXV0b2Agc3R5bGVcXG4gICAgJjpmb2N1cy12aXNpYmxlIHtcXG4gICAgICBvdXRsaW5lLXN0eWxlOiBhdXRvO1xcbiAgICB9XFxuXFxuICAgIC8vIFxcdUQ4M0RcXHVERTQ1XFx1MjAwRFxcdTI2NDBcXHVGRTBGIEJ1dCBDaHJvbWUgYWxzbyBuZWVkcyB0byBoYXZlIHRoZSBvdXRsaW5lIGZvcmNlZnVsbHkgcmVtb3ZlZCBmcm9tIHJlZ3VsYXIgYDpmb2N1c2Agc3RhdGVcXG4gICAgJjpub3QoOmZvY3VzLXZpc2libGUpIHtcXG4gICAgICBvdXRsaW5lOiBub25lO1xcbiAgICB9XFxuICBcIik7XG59O1xuZXhwb3J0IHZhciB1c2VFdWlGb2N1c1JpbmcgPSBmdW5jdGlvbiB1c2VFdWlGb2N1c1Jpbmcob2Zmc2V0LCBjb2xvcikge1xuICB2YXIgX3VzZUV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKSxcbiAgICAgIGV1aVRoZW1lID0gX3VzZUV1aVRoZW1lLmV1aVRoZW1lO1xuXG4gIHJldHVybiBldWlGb2N1c1JpbmcoZXVpVGhlbWUsIG9mZnNldCwge1xuICAgIGNvbG9yOiBjb2xvclxuICB9KTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBldWlMaW5lSGVpZ2h0RnJvbUJhc2VsaW5lLCBldWlGb250U2l6ZUZyb21TY2FsZSB9IGZyb20gJy4uL2Z1bmN0aW9ucy90eXBvZ3JhcGh5JztcbmltcG9ydCB7IHVzZUV1aVRoZW1lIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGhlbWUvaG9va3MnO1xuXG4vKipcbiAqIFJldHVybnMgZm9udC1zaXplIGFuZCBsaW5lLWhlaWdodFxuICovXG5leHBvcnQgdmFyIGV1aUZvbnRTaXplID0gZnVuY3Rpb24gZXVpRm9udFNpemUoX3JlZiwgc2NhbGUsIG9wdGlvbnMpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZi5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICBmb250U2l6ZTogZXVpRm9udFNpemVGcm9tU2NhbGUoc2NhbGUsIGV1aVRoZW1lLCBvcHRpb25zKSxcbiAgICBsaW5lSGVpZ2h0OiBldWlMaW5lSGVpZ2h0RnJvbUJhc2VsaW5lKHNjYWxlLCBldWlUaGVtZSwgb3B0aW9ucylcbiAgfTtcbn07XG5leHBvcnQgdmFyIHVzZUV1aUZvbnRTaXplID0gZnVuY3Rpb24gdXNlRXVpRm9udFNpemUoc2NhbGUsIG9wdGlvbnMpIHtcbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgcmV0dXJuIGV1aUZvbnRTaXplKGV1aVRoZW1lLCBzY2FsZSwgb3B0aW9ucyk7XG59O1xuLyoqXG4gKiBGb3JjZSB0ZXh0IHRvIHdyYXAgb24gbmF0dXJhbCB3b3JkIGJyZWFrcyAoZS5nLiBzcGFjZXMgJiBoeXBoZW5zKVxuICogaHR0cHM6Ly9jc3MtdHJpY2tzLmNvbS9zbmlwcGV0cy9jc3MvcHJldmVudC1sb25nLXVybHMtZnJvbS1icmVha2luZy1vdXQtb2YtY29udGFpbmVyL1xuICovXG5cbmV4cG9ydCB2YXIgZXVpVGV4dEJyZWFrV29yZCA9IGZ1bmN0aW9uIGV1aVRleHRCcmVha1dvcmQoKSB7XG4gIHJldHVybiBcIlxcbiAgb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZCAhaW1wb3J0YW50OyAvLyBtYWtlcyBzdXJlIHRoZSBsb25nIHN0cmluZyB3aWxsIHdyYXAgYW5kIG5vdCBidXN0IG91dCBvZiB0aGUgY29udGFpbmVyXFxuICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQgIWltcG9ydGFudDsgLy8gc3BlYyBzYXlzLCB0aGV5IGFyZSBsaXRlcmFsbHkganVzdCBhbHRlcm5hdGUgbmFtZXMgZm9yIGVhY2ggb3RoZXIgYnV0IHNvbWUgYnJvd3NlcnMgc3VwcG9ydCBvbmUgYW5kIG5vdCB0aGUgb3RoZXJcXG4gIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7IC8vIElFIGRvZXNuJ3QgdW5kZXJzdGFuZCBidXQgdGhhdCdzIG9rXFxuXCI7XG59O1xuLyoqXG4gKiBQcmV2ZW50IHRleHQgZnJvbSB3cmFwcGluZyBvbnRvIG11bHRpcGxlIGxpbmVzLCBhbmQgdHJ1bmNhdGUgd2l0aCBhbiBlbGxpcHNpcy5cbiAqL1xuXG5leHBvcnQgdmFyIGV1aVRleHRUcnVuY2F0ZSA9IGZ1bmN0aW9uIGV1aVRleHRUcnVuY2F0ZSgpIHtcbiAgdmFyIG1heFdpZHRoID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiAnMTAwJSc7XG4gIHJldHVybiBcIlxcbiAgbWF4LXdpZHRoOiBcIi5jb25jYXQobWF4V2lkdGgsIFwiOyAvLyBFbnN1cmUgdGhhdCB0aGUgbm9kZSBoYXMgYSBtYXhpbXVtIHdpZHRoIGFmdGVyIHdoaWNoIHRydW5jYXRpb24gY2FuIG9jY3VyXFxuICBvdmVyZmxvdzogaGlkZGVuICFpbXBvcnRhbnQ7XFxuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcyAhaW1wb3J0YW50O1xcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcCAhaW1wb3J0YW50O1xcblwiKTtcbn07XG4vKipcbiAqIEZpeGVkLXdpZHRoIG51bWJlcnMgZm9yIHRhYnVsYXIgZGF0YVxuICovXG5cbmV4cG9ydCB2YXIgZXVpTnVtYmVyRm9ybWF0ID0gZnVuY3Rpb24gZXVpTnVtYmVyRm9ybWF0KF9yZWYyKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYyLmV1aVRoZW1lO1xuICByZXR1cm4gXCJcXG4gIGZvbnQtZmVhdHVyZS1zZXR0aW5nczogXCIuY29uY2F0KGV1aVRoZW1lLmZvbnQuZmVhdHVyZVNldHRpbmdzLCBcIiwgJ3RudW0nIDE7XFxuXCIpO1xufTtcbmV4cG9ydCB2YXIgdXNlRXVpTnVtYmVyRm9ybWF0ID0gZnVuY3Rpb24gdXNlRXVpTnVtYmVyRm9ybWF0KCkge1xuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICByZXR1cm4gZXVpTnVtYmVyRm9ybWF0KGV1aVRoZW1lKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8qKlxuICogQSBjb25zdGFudCBzdG9yaW5nIHRoZSBgcHJlZmVycy1yZWR1Y2VkLW1vdGlvbmAgbWVkaWEgcXVlcnlcbiAqIHNvIHRoYXQgd2hlbiBpdCBpcyB0dXJuZWQgb2ZmLCBhbmltYXRpb25zIGFyZSBub3QgcnVuLlxuICovXG5leHBvcnQgdmFyIGV1aUNhbkFuaW1hdGUgPSAnQG1lZGlhIHNjcmVlbiBhbmQgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IG5vLXByZWZlcmVuY2UpJztcbi8qKlxuICogQSBjb25zdGFudCBzdG9yaW5nIHRoZSBgcHJlZmVycy1yZWR1Y2VkLW1vdGlvbmAgbWVkaWEgcXVlcnkgdGhhdCB3aWxsXG4gKiBvbmx5IGFwcGx5IHRoZSBjb250ZW50IGlmIHRoZSBzZXR0aW5nIGlzIG9mZiAocmVkdWNlKS5cbiAqL1xuXG5leHBvcnQgdmFyIGV1aUNhbnRBbmltYXRlID0gJ0BtZWRpYSBzY3JlZW4gYW5kIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpJztcbi8qKlxuICogU3BlZWRzIC8gRHVyYXRpb25zIC8gRGVsYXlzXG4gKi9cblxuZXhwb3J0IHZhciBFdWlUaGVtZUFuaW1hdGlvblNwZWVkcyA9IFsnZXh0cmFGYXN0JywgJ2Zhc3QnLCAnbm9ybWFsJywgJ3Nsb3cnLCAnZXh0cmFTbG93J107XG5cbi8qKlxuICogRWFzaW5ncyAvIFRpbWluZyBmdW5jdGlvbnNcbiAqL1xuZXhwb3J0IHZhciBFdWlUaGVtZUFuaW1hdGlvbkVhc2luZ3MgPSBbJ2JvdW5jZScsICdyZXNpc3RhbmNlJ107IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5leHBvcnQgdmFyIHJlc2V0U3R5bGVzID0gXCJcXG4vKiAvLyBBZGFwdGVkIGZyb20gRXJpYyBNZXllcidzIHJlc2V0IChodHRwOi8vbWV5ZXJ3ZWIuY29tL2VyaWMvdG9vbHMvY3NzL3Jlc2V0LywgdjIuMCB8IDIwMTEwMTI2KS4gKi9cXG5cXG5cXG4qLCAqOmJlZm9yZSwgKjphZnRlciB7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbn1cXG5cXG5odG1sLCBib2R5LCBkaXYsIHNwYW4sIGFwcGxldCwgb2JqZWN0LCBpZnJhbWUsXFxuaDEsIGgyLCBoMywgaDQsIGg1LCBoNiwgcCwgYmxvY2txdW90ZSwgcHJlLFxcbmEsIGFiYnIsIGFjcm9ueW0sIGFkZHJlc3MsIGJpZywgY2l0ZSwgY29kZSxcXG5kZWwsIGRmbiwgZW0sIGltZywgaW5zLCBrYmQsIHEsIHMsIHNhbXAsXFxuc21hbGwsIHN0cmlrZSwgc3Ryb25nLCBzdWIsIHN1cCwgdHQsIHZhcixcXG5iLCB1LCBpLCBjZW50ZXIsXFxuZGwsIGR0LCBkZCwgb2wsIHVsLCBsaSxcXG5maWVsZHNldCwgZm9ybSwgbGFiZWwsIGxlZ2VuZCxcXG50YWJsZSwgY2FwdGlvbiwgdGJvZHksIHRmb290LCB0aGVhZCwgdHIsIHRoLCB0ZCxcXG5hcnRpY2xlLCBhc2lkZSwgY2FudmFzLCBkZXRhaWxzLCBlbWJlZCxcXG5maWd1cmUsIGZpZ2NhcHRpb24sIGZvb3RlciwgaGVhZGVyLCBoZ3JvdXAsXFxubWVudSwgbmF2LCBvdXRwdXQsIHJ1YnksIHNlY3Rpb24sIHN1bW1hcnksXFxudGltZSwgbWFyaywgYXVkaW8sIHZpZGVvIHtcXG4gIG1hcmdpbjogMDtcXG4gIHBhZGRpbmc6IDA7XFxuICBib3JkZXI6IG5vbmU7XFxuICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7XFxufVxcblxcbmgxLCBoMiwgaDMsIGg0LCBoNSwgaDYsIHAge1xcbiAgZm9udC1mYW1pbHk6IGluaGVyaXQ7XFxuICBmb250LXdlaWdodDogaW5oZXJpdDtcXG4gIGZvbnQtc2l6ZTogaW5oZXJpdDtcXG59XFxuXFxuLyogSFRNTDUgZGlzcGxheS1yb2xlIHJlc2V0IGZvciBvbGRlciBicm93c2VycyAqL1xcbmFydGljbGUsIGFzaWRlLCBkZXRhaWxzLCBmaWdjYXB0aW9uLCBmaWd1cmUsXFxuZm9vdGVyLCBoZWFkZXIsIGhncm91cCwgbWVudSwgbmF2LCBzZWN0aW9uIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbn1cXG5cXG5hW2hyZWZdLFxcbmJ1dHRvbixcXG5bcm9sZT0nYnV0dG9uJ10ge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG5idXR0b24ge1xcbiAgYmFja2dyb3VuZDogbm9uZTtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIHBhZGRpbmc6IDA7XFxuICBtYXJnaW46IDA7XFxuICBjb2xvcjogaW5oZXJpdDtcXG4gIGJvcmRlci1yYWRpdXM6IDA7XFxuICBmb250LXNpemU6IGluaGVyaXQ7XFxufVxcblxcbmlucHV0IHtcXG4gIG1hcmdpbjogMDtcXG4gIHBhZGRpbmc6IDA7XFxufVxcblxcbmlucHV0OmRpc2FibGVkIHtcXG4gIG9wYWNpdHk6IDE7IC8qIHJlcXVpcmVkIG9uIGlPUyAqL1xcbn1cXG5cXG5vbCxcXG51bCB7XFxuICBsaXN0LXN0eWxlOiBub25lO1xcbn1cXG5cXG5ibG9ja3F1b3RlLFxcbnEge1xcbiAgcXVvdGVzOiBub25lO1xcbn1cXG5cXG5ibG9ja3F1b3RlOmJlZm9yZSxcXG5ibG9ja3F1b3RlOmFmdGVyLFxcbnE6YmVmb3JlLFxcbnE6YWZ0ZXIge1xcbiAgY29udGVudDogJyc7XFxufVxcblxcbnRhYmxlIHtcXG4gIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XFxuICBib3JkZXItc3BhY2luZzogMDtcXG59XFxuXFxuaHIge1xcbiAgbWFyZ2luOiAwO1xcbn1cXG5cXG5maWVsZHNldCB7XFxuICBtaW4taW5saW5lLXNpemU6IGF1dG87XFxufVxcblxcbi8qIENocm9tZSBoYXMgYW4gaXNzdWUgYXJvdW5kIFJUTCBsYW5ndWFnZXMgaW4gU1ZHcyB3aGVuIGxldHRlci1zcGFjaW5nIGlzIG5lZ2F0aXZlXFxuICogaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9OTY2NDgwXFxuICovXFxuc3ZnIHRleHQge1xcbiAgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbCAhaW1wb3J0YW50O1xcbn1cIjsiLCAidmFyIF90ZW1wbGF0ZU9iamVjdDtcblxuZnVuY3Rpb24gX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbChzdHJpbmdzLCByYXcpIHsgaWYgKCFyYXcpIHsgcmF3ID0gc3RyaW5ncy5zbGljZSgwKTsgfSByZXR1cm4gT2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydGllcyhzdHJpbmdzLCB7IHJhdzogeyB2YWx1ZTogT2JqZWN0LmZyZWV6ZShyYXcpIH0gfSkpOyB9XG5cbmZ1bmN0aW9uIF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fKCkgeyByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IGNzcywga2V5ZnJhbWVzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgbG9naWNhbENTUywgZXVpQ2FuQW5pbWF0ZSB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcblxudmFyIGljb25TaXplID0gZnVuY3Rpb24gaWNvblNpemUoc2l6ZSkge1xuICByZXR1cm4gXCJcXG4gICAgXCIuY29uY2F0KGxvZ2ljYWxDU1MoJ3dpZHRoJywgc2l6ZSksIFwiO1xcbiAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ2hlaWdodCcsIHNpemUpLCBcIjtcXG4gIFwiKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbkxvYWRpbmdPcGFjaXR5ID0gMC4wNTtcbnZhciBpY29uTG9hZGluZyA9IGtleWZyYW1lcyhfdGVtcGxhdGVPYmplY3QgfHwgKF90ZW1wbGF0ZU9iamVjdCA9IF90YWdnZWRUZW1wbGF0ZUxpdGVyYWwoW1wiXFxuICAwJSB7XFxuICAgIG9wYWNpdHk6IFwiLCBcIjtcXG4gIH1cXG5cXG4gIDEwMCUge1xcbiAgICBvcGFjaXR5OiAxO1xcbiAgfVxcblwiXSkpLCBpY29uTG9hZGluZ09wYWNpdHkpO1xuXG52YXIgX3JlZiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCJuamQ3NDktbG9nb0VsYXN0aWNPdXRsaW5lXCIsXG4gIHN0eWxlczogXCIqW2ZpbGxde2ZpbGw6bm9uZSFpbXBvcnRhbnQ7fS5vdXRsaW5le2ZpbGw6Y3VycmVudENvbG9yIWltcG9ydGFudDt9O2xhYmVsOmxvZ29FbGFzdGljT3V0bGluZTtcIlxufSA6IHtcbiAgbmFtZTogXCJuamQ3NDktbG9nb0VsYXN0aWNPdXRsaW5lXCIsXG4gIHN0eWxlczogXCIqW2ZpbGxde2ZpbGw6bm9uZSFpbXBvcnRhbnQ7fS5vdXRsaW5le2ZpbGw6Y3VycmVudENvbG9yIWltcG9ydGFudDt9O2xhYmVsOmxvZ29FbGFzdGljT3V0bGluZTtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xuXG52YXIgX3JlZjIgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwidWFjamM1LWluaGVyaXRcIixcbiAgc3R5bGVzOiBcImNvbG9yOmluaGVyaXQ7bGFiZWw6aW5oZXJpdDtcIlxufSA6IHtcbiAgbmFtZTogXCJ1YWNqYzUtaW5oZXJpdFwiLFxuICBzdHlsZXM6IFwiY29sb3I6aW5oZXJpdDtsYWJlbDppbmhlcml0O1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5cbmV4cG9ydCB2YXIgZXVpSWNvblN0eWxlcyA9IGZ1bmN0aW9uIGV1aUljb25TdHlsZXMoX3JlZjMpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZjMuZXVpVGhlbWU7XG4gIHJldHVybiB7XG4gICAgLy8gQmFzZVxuICAgIGV1aUljb246IC8qI19fUFVSRV9fKi9jc3MoXCJmbGV4LXNocmluazowO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtmaWxsOmN1cnJlbnRDb2xvcjt0cmFuc2Zvcm06dHJhbnNsYXRlKDAsIDApOy5ldWlJY29uX19maWxsTmVnYXRpdmV7ZmlsbDpcIiwgZXVpVGhlbWUuY29sb3JzLmRhcmtlc3RTaGFkZSwgXCI7fTtsYWJlbDpldWlJY29uO1wiKSxcbiAgICAvLyBDb2xvcnNcbiAgICBhY2NlbnQ6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLmFjY2VudFRleHQsIFwiOztsYWJlbDphY2NlbnQ7XCIpLFxuICAgIGRhbmdlcjogLyojX19QVVJFX18qL2NzcyhcImNvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMuZGFuZ2VyVGV4dCwgXCI7O2xhYmVsOmRhbmdlcjtcIiksXG4gICAgZ2hvc3Q6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLmdob3N0LCBcIjsqW2ZpbGxdLC5ldWlJY29uX19maWxsTmVnYXRpdmV7ZmlsbDpjdXJyZW50Q29sb3IhaW1wb3J0YW50O307bGFiZWw6Z2hvc3Q7XCIpLFxuICAgIHByaW1hcnk6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLnByaW1hcnlUZXh0LCBcIjs7bGFiZWw6cHJpbWFyeTtcIiksXG4gICAgc3VjY2VzczogLyojX19QVVJFX18qL2NzcyhcImNvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMuc3VjY2Vzc1RleHQsIFwiOztsYWJlbDpzdWNjZXNzO1wiKSxcbiAgICBzdWJkdWVkOiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5zdWJkdWVkVGV4dCwgXCI7O2xhYmVsOnN1YmR1ZWQ7XCIpLFxuICAgIHRleHQ6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLnRpdGxlLCBcIjsqW2ZpbGxdLC5ldWlJY29uX19maWxsTmVnYXRpdmV7ZmlsbDpjdXJyZW50Q29sb3IhaW1wb3J0YW50O307bGFiZWw6dGV4dDtcIiksXG4gICAgd2FybmluZzogLyojX19QVVJFX18qL2NzcyhcImNvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMud2FybmluZ1RleHQsIFwiOztsYWJlbDp3YXJuaW5nO1wiKSxcbiAgICBpbmhlcml0OiBfcmVmMixcbiAgICBkZWZhdWx0OiAvKiNfX1BVUkVfXyovY3NzKFwiO2xhYmVsOmRlZmF1bHQ7XCIpLFxuICAgIGN1c3RvbUNvbG9yOiAvKiNfX1BVUkVfXyovY3NzKFwiO2xhYmVsOmN1c3RvbUNvbG9yO1wiKSxcbiAgICBsb2dvRWxhc3RpY091dGxpbmU6IF9yZWYsXG4gICAgLy8gU2l6ZXNcbiAgICBvcmlnaW5hbDogLyojX19QVVJFX18qL2NzcyhcIjtsYWJlbDpvcmlnaW5hbDtcIiksXG4gICAgczogLyojX19QVVJFX18qL2NzcyhpY29uU2l6ZShldWlUaGVtZS5zaXplLm0pLCBcIjtsYWJlbDpzO1wiKSxcbiAgICBtOiAvKiNfX1BVUkVfXyovY3NzKGljb25TaXplKGV1aVRoZW1lLnNpemUuYmFzZSksIFwiO2xhYmVsOm07XCIpLFxuICAgIGw6IC8qI19fUFVSRV9fKi9jc3MoaWNvblNpemUoZXVpVGhlbWUuc2l6ZS5sKSwgXCI7bGFiZWw6bDtcIiksXG4gICAgeGw6IC8qI19fUFVSRV9fKi9jc3MoaWNvblNpemUoZXVpVGhlbWUuc2l6ZS54bCksIFwiO2xhYmVsOnhsO1wiKSxcbiAgICB4eGw6IC8qI19fUFVSRV9fKi9jc3MoaWNvblNpemUoZXVpVGhlbWUuc2l6ZS54eGwpLCBcIjtsYWJlbDp4eGw7XCIpLFxuICAgIC8vIFZhcmlhbnRzXG4gICAgLy8gQXBwIGljb25zIGFyZSB0d28tdG9uZWQuIFRoaXMgcHJvdmlkZXMgdGhlIGJhc2UgY29sb3IuXG4gICAgYXBwOiAvKiNfX1BVUkVfXyovY3NzKFwiZmlsbDpcIiwgZXVpVGhlbWUuY29sb3JzLnRleHQsIFwiOy5ldWlJY29uX19maWxsU2Vjb25kYXJ5e2ZpbGw6XCIsIGV1aVRoZW1lLmNvbG9ycy5zdWNjZXNzVGV4dCwgXCI7fTtsYWJlbDphcHA7XCIpLFxuICAgIGxvZ286IC8qI19fUFVSRV9fKi9jc3MoXCI7bGFiZWw6bG9nbztcIiksXG4gICAgLy8gTG9hZGluZyBzdGF0ZXNcbiAgICBpc0xvYWRpbmc6IC8qI19fUFVSRV9fKi9jc3MoXCJvcGFjaXR5OlwiLCBpY29uTG9hZGluZ09wYWNpdHksIFwiO2JhY2tncm91bmQtY29sb3I6Y3VycmVudENvbG9yO2JvcmRlci1yYWRpdXM6XCIsIGV1aVRoZW1lLmJvcmRlci5yYWRpdXMuc21hbGwsIFwiOztsYWJlbDppc0xvYWRpbmc7XCIpLFxuICAgIGlzTG9hZGVkOiAvKiNfX1BVUkVfXyovY3NzKGV1aUNhbkFuaW1hdGUsIFwie2FuaW1hdGlvbjpcIiwgaWNvbkxvYWRpbmcsIFwiIFwiLCBldWlUaGVtZS5hbmltYXRpb24ubm9ybWFsLCBcIiBlYXNlLWluIDBzIDEgZm9yd2FyZHM7fTtsYWJlbDppc0xvYWRlZDtcIilcbiAgfTtcbn07IiwgImZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7IHZhciBfaSA9IGFyciA9PSBudWxsID8gbnVsbCA6IHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgYXJyW1N5bWJvbC5pdGVyYXRvcl0gfHwgYXJyW1wiQEBpdGVyYXRvclwiXTsgaWYgKF9pID09IG51bGwpIHJldHVybjsgdmFyIF9hcnIgPSBbXTsgdmFyIF9uID0gdHJ1ZTsgdmFyIF9kID0gZmFsc2U7IHZhciBfcywgX2U7IHRyeSB7IGZvciAoX2kgPSBfaS5jYWxsKGFycik7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHsgX2Fyci5wdXNoKF9zLnZhbHVlKTsgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOyB9IH0gY2F0Y2ggKGVycikgeyBfZCA9IHRydWU7IF9lID0gZXJyOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7IH0gZmluYWxseSB7IGlmIChfZCkgdGhyb3cgX2U7IH0gfSByZXR1cm4gX2FycjsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBGcmFnbWVudCwgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEV1aUkxOG5Db25zdW1lciB9IGZyb20gJy4uL2NvbnRleHQnO1xuaW1wb3J0IHsgSTE4bkNvbnRleHQgfSBmcm9tICcuLi9jb250ZXh0L2NvbnRleHQnO1xuaW1wb3J0IHsgcHJvY2Vzc1N0cmluZ1RvQ2hpbGRyZW4gfSBmcm9tICcuL2kxOG5fdXRpbCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG5mdW5jdGlvbiBlcnJvck9uTWlzc2luZ1ZhbHVlcyh0b2tlbikge1xuICB0aHJvdyBuZXcgRXJyb3IoXCJJMThuIG1hcHBpbmcgZm9yIHRva2VuIFxcXCJcIi5jb25jYXQodG9rZW4sIFwiXFxcIiBpcyBhIGZvcm1hdHRpbmcgZnVuY3Rpb24gYnV0IG5vIHZhbHVlcyB3ZXJlIHByb3ZpZGVkLlwiKSk7XG59XG5cbmZ1bmN0aW9uIGxvb2t1cFRva2VuKG9wdGlvbnMpIHtcbiAgdmFyIHRva2VuID0gb3B0aW9ucy50b2tlbixcbiAgICAgIGkxOG5NYXBwaW5nID0gb3B0aW9ucy5pMThuTWFwcGluZyxcbiAgICAgIHZhbHVlRGVmYXVsdCA9IG9wdGlvbnMudmFsdWVEZWZhdWx0LFxuICAgICAgaTE4bk1hcHBpbmdGdW5jID0gb3B0aW9ucy5pMThuTWFwcGluZ0Z1bmMsXG4gICAgICB2YWx1ZXMgPSBvcHRpb25zLnZhbHVlcyxcbiAgICAgIHJlbmRlciA9IG9wdGlvbnMucmVuZGVyO1xuICB2YXIgcmVuZGVyYWJsZSA9IGkxOG5NYXBwaW5nICYmIGkxOG5NYXBwaW5nW3Rva2VuXSB8fCB2YWx1ZURlZmF1bHQ7XG5cbiAgaWYgKHR5cGVvZiByZW5kZXJhYmxlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKHZhbHVlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZXJyb3JPbk1pc3NpbmdWYWx1ZXModG9rZW4pO1xuICAgIH0gLy8gQHRzLWlnbm9yZSBUeXBlU2NyaXB0IGNvbXBsYWlucyB0aGF0IGBERUZBVUxUYCBkb2Vzbid0IGhhdmUgYSBjYWxsIHNpZ25hdHVyZSBidXQgd2UgdmVyaWZpZWQgYHJlbmRlcmFibGVgIGlzIGEgZnVuY3Rpb25cblxuXG4gICAgdmFyIHJlbmRlcmVkID0gcmVuZGVyYWJsZSh2YWx1ZXMpO1xuICAgIHJldHVybiBpMThuTWFwcGluZ0Z1bmMgJiYgdHlwZW9mIHJlbmRlcmVkID09PSAnc3RyaW5nJyA/IGkxOG5NYXBwaW5nRnVuYyhyZW5kZXJlZCkgOiByZW5kZXJlZDtcbiAgfSBlbHNlIGlmICh2YWx1ZXMgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgcmVuZGVyYWJsZSAhPT0gJ3N0cmluZycpIHtcbiAgICBpZiAoaTE4bk1hcHBpbmdGdW5jICYmIHR5cGVvZiB2YWx1ZURlZmF1bHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZW5kZXJhYmxlID0gaTE4bk1hcHBpbmdGdW5jKHZhbHVlRGVmYXVsdCk7XG4gICAgfSAvLyB0aGVyZSdzIGEgaG9sZSBpbiB0aGUgdHlwaW5ncyBoZXJlIGFzIHRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IGkxOG5NYXBwaW5nRnVuY1xuICAgIC8vIHJldHVybmVkIHRoZSBzYW1lIHR5cGUgb2YgdGhlIGRlZmF1bHQgdmFsdWUsIGJ1dCB3ZSBuZWVkIHRvIGtlZXAgdGhhdCBhc3N1bXB0aW9uXG5cblxuICAgIHJldHVybiByZW5kZXJhYmxlO1xuICB9XG5cbiAgdmFyIGNoaWxkcmVuID0gcHJvY2Vzc1N0cmluZ1RvQ2hpbGRyZW4ocmVuZGVyYWJsZSwgdmFsdWVzLCBpMThuTWFwcGluZ0Z1bmMpO1xuXG4gIGlmICh0eXBlb2YgY2hpbGRyZW4gPT09ICdzdHJpbmcnKSB7XG4gICAgLy8gbGlrZXdpc2UsIGBwcm9jZXNzU3RyaW5nVG9DaGlsZHJlbmAgcmV0dXJucyBhIHN0cmluZyBvciBSZWFjdENoaWxkW10gZGVwZW5kaW5nIG9uXG4gICAgLy8gdGhlIHR5cGUgb2YgYHZhbHVlc2AsIHNvIHdlIHdpbGwgbWFrZSB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoZSBkZWZhdWx0IHZhbHVlIGlzIGNvcnJlY3QuXG4gICAgcmV0dXJuIGNoaWxkcmVuO1xuICB9XG5cbiAgdmFyIENvbXBvbmVudCA9IHJlbmRlciA/IHJlbmRlcihjaGlsZHJlbikgOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRnJhZ21lbnQsIG51bGwsIGNoaWxkcmVuKTtcbiAgfTsgLy8gc2FtZSByZWFzb25zIGFzIGFib3ZlLCB3ZSBjYW4ndCBwcm9taXNlIHRoZSB0cmFuc2Zvcm1zIG1hdGNoIHRoZSBkZWZhdWx0J3MgdHlwZVxuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChDb21wb25lbnQsIHZhbHVlcyk7XG59XG5cbmZ1bmN0aW9uIGlzSTE4blRva2Vuc1NoYXBlKHgpIHtcbiAgcmV0dXJuIHgudG9rZW5zICE9IG51bGw7XG59IC8vIE11c3QgdXNlIHRoZSBnZW5lcmljcyA8VCBleHRlbmRzIHt9PlxuLy8gSWYgaW5zdGVhZCB0eXBlZCB3aXRoIFJlYWN0LkZ1bmN0aW9uQ29tcG9uZW50IHRoZXJlIGlzbid0IGZlZWRiYWNrIGdpdmVuIGJhY2sgdG8gdGhlIGRldlxuLy8gd2hlbiB1c2luZyBhIGB2YWx1ZXNgIG9iamVjdCB3aXRoIGEgcmVuZGVyZXIgY2FsbGJhY2suXG5cblxudmFyIEV1aUkxOG4gPSBmdW5jdGlvbiBFdWlJMThuKHByb3BzKSB7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUkxOG5Db25zdW1lciwgbnVsbCwgZnVuY3Rpb24gKGkxOG5Db25maWcpIHtcbiAgICB2YXIgbWFwcGluZyA9IGkxOG5Db25maWcubWFwcGluZyxcbiAgICAgICAgbWFwcGluZ0Z1bmMgPSBpMThuQ29uZmlnLm1hcHBpbmdGdW5jLFxuICAgICAgICByZW5kZXIgPSBpMThuQ29uZmlnLnJlbmRlcjtcblxuICAgIGlmIChpc0kxOG5Ub2tlbnNTaGFwZShwcm9wcykpIHtcbiAgICAgIHJldHVybiBwcm9wcy5jaGlsZHJlbihwcm9wcy50b2tlbnMubWFwKGZ1bmN0aW9uICh0b2tlbiwgaWR4KSB7XG4gICAgICAgIHJldHVybiBsb29rdXBUb2tlbih7XG4gICAgICAgICAgdG9rZW46IHRva2VuLFxuICAgICAgICAgIGkxOG5NYXBwaW5nOiBtYXBwaW5nLFxuICAgICAgICAgIGkxOG5NYXBwaW5nRnVuYzogbWFwcGluZ0Z1bmMsXG4gICAgICAgICAgdmFsdWVEZWZhdWx0OiBwcm9wcy5kZWZhdWx0c1tpZHhdLFxuICAgICAgICAgIHJlbmRlcjogcmVuZGVyXG4gICAgICAgIH0pO1xuICAgICAgfSkpO1xuICAgIH1cblxuICAgIHZhciB0b2tlblZhbHVlID0gbG9va3VwVG9rZW4oe1xuICAgICAgdG9rZW46IHByb3BzLnRva2VuLFxuICAgICAgaTE4bk1hcHBpbmc6IG1hcHBpbmcsXG4gICAgICB2YWx1ZURlZmF1bHQ6IHByb3BzLmRlZmF1bHQsXG4gICAgICBpMThuTWFwcGluZ0Z1bmM6IG1hcHBpbmdGdW5jLFxuICAgICAgdmFsdWVzOiBwcm9wcy52YWx1ZXMsXG4gICAgICByZW5kZXI6IHJlbmRlclxuICAgIH0pO1xuXG4gICAgaWYgKHByb3BzLmNoaWxkcmVuKSB7XG4gICAgICByZXR1cm4gcHJvcHMuY2hpbGRyZW4odG9rZW5WYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0b2tlblZhbHVlO1xuICAgIH1cbiAgfSk7XG59OyAvLyBBIHNpbmdsZSBkZWZhdWx0IGNvdWxkIGJlIGEgc3RyaW5nLCByZWFjdCBjaGlsZCwgb3IgcmVuZGVyIGZ1bmN0aW9uXG5cblxuZnVuY3Rpb24gdXNlRXVpSTE4bigpIHtcbiAgdmFyIGkxOG5Db25maWcgPSB1c2VDb250ZXh0KEkxOG5Db250ZXh0KTtcbiAgdmFyIG1hcHBpbmcgPSBpMThuQ29uZmlnLm1hcHBpbmcsXG4gICAgICBtYXBwaW5nRnVuYyA9IGkxOG5Db25maWcubWFwcGluZ0Z1bmMsXG4gICAgICByZW5kZXIgPSBpMThuQ29uZmlnLnJlbmRlcjtcblxuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgcHJvcHMgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgcHJvcHNbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICBpZiAodHlwZW9mIHByb3BzWzBdID09PSAnc3RyaW5nJykge1xuICAgIHZhciBfdG9rZW4gPSBwcm9wc1swXSxcbiAgICAgICAgX2RlZmF1bHRWYWx1ZSA9IHByb3BzWzFdLFxuICAgICAgICBfdmFsdWVzID0gcHJvcHNbMl07XG4gICAgcmV0dXJuIGxvb2t1cFRva2VuKHtcbiAgICAgIHRva2VuOiBfdG9rZW4sXG4gICAgICBpMThuTWFwcGluZzogbWFwcGluZyxcbiAgICAgIHZhbHVlRGVmYXVsdDogX2RlZmF1bHRWYWx1ZSxcbiAgICAgIGkxOG5NYXBwaW5nRnVuYzogbWFwcGluZ0Z1bmMsXG4gICAgICB2YWx1ZXM6IF92YWx1ZXMsXG4gICAgICByZW5kZXI6IHJlbmRlclxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHZhciBfcmVmID0gcHJvcHMsXG4gICAgICAgIF9yZWYyID0gX3NsaWNlZFRvQXJyYXkoX3JlZiwgMiksXG4gICAgICAgIF90b2tlbnMgPSBfcmVmMlswXSxcbiAgICAgICAgX2RlZmF1bHRWYWx1ZXMgPSBfcmVmMlsxXTtcblxuICAgIHJldHVybiBfdG9rZW5zLm1hcChmdW5jdGlvbiAodG9rZW4sIGlkeCkge1xuICAgICAgcmV0dXJuIGxvb2t1cFRva2VuKHtcbiAgICAgICAgdG9rZW46IHRva2VuLFxuICAgICAgICBpMThuTWFwcGluZzogbWFwcGluZyxcbiAgICAgICAgdmFsdWVEZWZhdWx0OiBfZGVmYXVsdFZhbHVlc1tpZHhdLFxuICAgICAgICBpMThuTWFwcGluZ0Z1bmM6IG1hcHBpbmdGdW5jLFxuICAgICAgICByZW5kZXI6IHJlbmRlclxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IHsgRXVpSTE4biwgdXNlRXVpSTE4biB9OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IGNyZWF0ZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIEkxOG5Db250ZXh0ID0gLyojX19QVVJFX18qL2NyZWF0ZUNvbnRleHQoe30pO1xudmFyIEV1aUkxOG5Qcm92aWRlciA9IEkxOG5Db250ZXh0LlByb3ZpZGVyLFxuICAgIEV1aUkxOG5Db25zdW1lciA9IEkxOG5Db250ZXh0LkNvbnN1bWVyO1xuXG52YXIgRXVpQ29udGV4dCA9IGZ1bmN0aW9uIEV1aUNvbnRleHQoX3JlZikge1xuICB2YXIgX3JlZiRpMThuID0gX3JlZi5pMThuLFxuICAgICAgaTE4biA9IF9yZWYkaTE4biA9PT0gdm9pZCAwID8ge30gOiBfcmVmJGkxOG4sXG4gICAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW47XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUkxOG5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBpMThuXG4gIH0sIGNoaWxkcmVuKTtcbn07XG5cbkV1aUNvbnRleHQucHJvcFR5cGVzID0ge1xuICBpMThuOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIG1hcHBpbmc6IFByb3BUeXBlcy5zaGFwZSh7fSksXG4gICAgbWFwcGluZ0Z1bmM6IFByb3BUeXBlcy5mdW5jLFxuXG4gICAgLyoqXG4gICAgICAgKiBTb21lIGJyb3dzZXJzJyB0cmFuc2xhdGlvbiBmZWF0dXJlcyBkb24ndCB3b3JrIHdpdGggYSByZW5kZXJlZCBgPEZyYWdtZW50PmAgY29tcG9uZW50LlxuICAgICAgICogVGhlIGByZW5kZXJgIGZ1bmN0aW9uIGFsbG93cyB5b3UgdG8gcGFzcyBpbiBhbm90aGVyIGNvbXBvbmVudCBpbnN0ZWFkLCBlLmcuIGA8ZGl2PmBcbiAgICAgICAqL1xuICAgIHJlbmRlcjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgZm9ybWF0TnVtYmVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBmb3JtYXREYXRlVGltZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgbG9jYWxlOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLmlzUmVxdWlyZWQsXG5cbiAgLyoqXG4gICAgICogUmVhY3ROb2RlIHRvIHJlbmRlciBhcyB0aGlzIGNvbXBvbmVudCdzIGNvbnRlbnRcbiAgICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWRcbn07XG5leHBvcnQgeyBFdWlDb250ZXh0LCBFdWlJMThuQ29uc3VtZXIsIEkxOG5Db250ZXh0IH07IiwgImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IGNsb25lRWxlbWVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGlzQm9vbGVhbiwgaXNTdHJpbmcsIGlzTnVtYmVyLCBpc1VuZGVmaW5lZCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3ByZWRpY2F0ZSc7XG5pbXBvcnQgeyBpc0VsZW1lbnQgfSBmcm9tICdyZWFjdC1pcyc7XG5cbmZ1bmN0aW9uIGlzUHJpbWl0aXZlKHZhbHVlKSB7XG4gIHJldHVybiBpc0Jvb2xlYW4odmFsdWUpIHx8IGlzU3RyaW5nKHZhbHVlKSB8fCBpc051bWJlcih2YWx1ZSkgfHwgaXNVbmRlZmluZWQodmFsdWUpO1xufVxuXG5mdW5jdGlvbiBoYXNQcm9wTmFtZShjaGlsZCkge1xuICByZXR1cm4gY2hpbGQgPyBfdHlwZW9mKGNoaWxkKSA9PT0gJ29iamVjdCcgJiYgY2hpbGQuaGFzT3duUHJvcGVydHkoJ3Byb3BOYW1lJykgOiBmYWxzZTtcbn1cbi8qKlxuICogUmVwbGFjZXMgcGxhY2Vob2xkZXIgdmFsdWVzIGluIGBpbnB1dGAgd2l0aCB0aGVpciBtYXRjaGluZyB2YWx1ZSBpbiBgdmFsdWVzYFxuICogZS5nLiBpbnB1dDonSGVsbG8sIHtuYW1lfScgd2lsbCByZXBsYWNlIGB7bmFtZX1gIHdpdGggYHZhbHVlc1tuYW1lXWBcbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dFxuICogQHBhcmFtIHtSZW5kZXJhYmxlVmFsdWVzfSB2YWx1ZXNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGkxOG5NYXBwaW5nRnVuY1xuICogQHJldHVybnMge3N0cmluZyB8IFJlYWN0LlJlYWN0Q2hpbGRbXX1cbiAqL1xuXG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzU3RyaW5nVG9DaGlsZHJlbihpbnB1dCwgdmFsdWVzLCBpMThuTWFwcGluZ0Z1bmMpIHtcbiAgdmFyIGNoaWxkcmVuID0gW107XG4gIHZhciBjaGlsZDtcblxuICBmdW5jdGlvbiBhcHBlbmRDaGFyVG9DaGlsZChjaGFyKSB7XG4gICAgaWYgKGNoaWxkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIHN0YXJ0aW5nIGEgbmV3IHN0cmluZyBsaXRlcmFsXG4gICAgICBjaGlsZCA9IGNoYXI7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgY2hpbGQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBleGlzdGluZyBzdHJpbmcgbGl0ZXJhbFxuICAgICAgY2hpbGQgPSBjaGlsZCArIGNoYXI7XG4gICAgfSBlbHNlIGlmIChoYXNQcm9wTmFtZShjaGlsZCkpIHtcbiAgICAgIC8vIGFkZGluZyB0byB0aGUgcHJvcE5hbWUgb2YgYSB2YWx1ZXMgbG9va3VwXG4gICAgICBjaGlsZC5wcm9wTmFtZSA9IGNoaWxkLnByb3BOYW1lICsgY2hhcjtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBhcHBlbmRWYWx1ZVRvQ2hpbGRyZW4odmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSBpZiAoaXNFbGVtZW50KHZhbHVlKSkge1xuICAgICAgLy8gYW4gYXJyYXkgd2l0aCBhbnkgUmVhY3RFbGVtZW50cyB3aWxsIGJlIGtlcHQgYXMgYW4gYXJyYXlcbiAgICAgIC8vIHNvIHRoZXkgbmVlZCB0byBiZSBhc3NpZ25lZCBhIGtleVxuICAgICAgY2hpbGRyZW4ucHVzaCggLyojX19QVVJFX18qL2Nsb25lRWxlbWVudCh2YWx1ZSwge1xuICAgICAgICBrZXk6IGNoaWxkcmVuLmxlbmd0aFxuICAgICAgfSkpO1xuICAgIH0gZWxzZSBpZiAoaGFzUHJvcE5hbWUodmFsdWUpKSB7Ly8gdGhpcyB3b24ndCBiZSBjYWxsZWQsIHByb3BOYW1lIGNoaWxkcmVuIGFyZSBjb252ZXJ0ZWQgdG8gYSBSZWFjdENoaWxkIGJlZm9yZSBjYWxsaW5nIHRoaXNcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZXZlcnl0aGluZyBlbHNlIGNhbiBnbyBzdHJhaWdodCBpblxuICAgICAgaWYgKGkxOG5NYXBwaW5nRnVuYyAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdmFsdWUgPSBpMThuTWFwcGluZ0Z1bmModmFsdWUpO1xuICAgICAgfVxuXG4gICAgICBjaGlsZHJlbi5wdXNoKHZhbHVlKTtcbiAgICB9XG4gIH0gLy8gaWYgd2UgZG9uJ3QgZW5jb3VudGVyIGEgbm9uLXByaW1pdGl2ZVxuICAvLyB0aGVuIGBjaGlsZHJlbmAgY2FuIGJlIGNvbmNhdGVuYXRlZCB0b2dldGhlciBhdCB0aGUgZW5kXG5cblxuICB2YXIgZW5jb3VudGVyZWROb25QcmltaXRpdmUgPSBmYWxzZTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGNoYXIgPSBpbnB1dFtpXTtcblxuICAgIGlmIChjaGFyID09PSAnXFxcXCcpIHtcbiAgICAgIC8vIHBlZWsgYXQgdGhlIG5leHQgY2hhcmFjdGVyIHRvIGtub3cgaWYgdGhpcyBpcyBhbiBlc2NhcGVcbiAgICAgIHZhciBuZXh0Q2hhciA9IGlucHV0W2kgKyAxXTtcbiAgICAgIHZhciBjaGFyVG9BZGQgPSBjaGFyOyAvLyBpZiB0aGlzIGlzbid0IGFuIGVzY2FwZSBzZXF1ZW5jZSB0aGVuIHdlIHdpbGwgYWRkIHRoZSBiYWNrc2xhc2hcblxuICAgICAgaWYgKG5leHRDaGFyID09PSAneycgfHwgbmV4dENoYXIgPT09ICd9Jykge1xuICAgICAgICAvLyBlc2NhcGluZyBhIGJyYWNlXG4gICAgICAgIGkgKz0gMTsgLy8gYWR2YW5jZSBwYXNzZWQgdGhlIGJyYWNlXG5cbiAgICAgICAgY2hhclRvQWRkID0gaW5wdXRbaV07XG4gICAgICB9XG5cbiAgICAgIGFwcGVuZENoYXJUb0NoaWxkKGNoYXJUb0FkZCk7XG4gICAgfSBlbHNlIGlmIChjaGFyID09PSAneycpIHtcbiAgICAgIGFwcGVuZFZhbHVlVG9DaGlsZHJlbihjaGlsZCk7XG4gICAgICBjaGlsZCA9IHtcbiAgICAgICAgcHJvcE5hbWU6ICcnXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAoY2hhciA9PT0gJ30nKSB7XG4gICAgICB2YXIgcHJvcE5hbWUgPSBjaGlsZC5wcm9wTmFtZTtcblxuICAgICAgaWYgKCF2YWx1ZXMuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIktleSBcXFwiXCIuY29uY2F0KHByb3BOYW1lLCBcIlxcXCIgbm90IGZvdW5kIGluIFwiKS5jb25jYXQoSlNPTi5zdHJpbmdpZnkodmFsdWVzLCBudWxsLCAyKSkpO1xuICAgICAgfVxuXG4gICAgICB2YXIgcHJvcFZhbHVlID0gdmFsdWVzW3Byb3BOYW1lXTtcbiAgICAgIGVuY291bnRlcmVkTm9uUHJpbWl0aXZlID0gZW5jb3VudGVyZWROb25QcmltaXRpdmUgfHwgIWlzUHJpbWl0aXZlKHByb3BWYWx1ZSk7XG4gICAgICBhcHBlbmRWYWx1ZVRvQ2hpbGRyZW4ocHJvcFZhbHVlKTtcbiAgICAgIGNoaWxkID0gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcHBlbmRDaGFyVG9DaGlsZChjaGFyKTtcbiAgICB9XG4gIH0gLy8gaW5jbHVkZSBhbnkgcmVtYWluaW5nIGNoaWxkIHZhbHVlXG5cblxuICBhcHBlbmRWYWx1ZVRvQ2hpbGRyZW4oY2hpbGQpO1xuICByZXR1cm4gZW5jb3VudGVyZWROb25QcmltaXRpdmUgPyBjaGlsZHJlbiA6IGNoaWxkcmVuLmpvaW4oJycpO1xufSIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgdXNlRXVpSTE4biB9IGZyb20gJy4uL2kxOG4nO1xuZXhwb3J0IHZhciB1c2VMb2FkaW5nQXJpYUxhYmVsID0gZnVuY3Rpb24gdXNlTG9hZGluZ0FyaWFMYWJlbCgpIHtcbiAgcmV0dXJuIHVzZUV1aUkxOG4oJ2V1aUxvYWRpbmdTdHJpbmdzLmFyaWFMYWJlbCcsICdMb2FkaW5nJyk7XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wic2l6ZVwiLCBcImNsYXNzTmFtZVwiLCBcImFyaWEtbGFiZWxcIiwgXCJjb2xvclwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUV1aVRoZW1lIH0gZnJvbSAnLi4vLi4vL3NlcnZpY2VzJztcbmltcG9ydCB7IHVzZUxvYWRpbmdBcmlhTGFiZWwgfSBmcm9tICcuL19sb2FkaW5nX3N0cmluZ3MnO1xuaW1wb3J0IHsgZXVpTG9hZGluZ1NwaW5uZXJTdHlsZXMgfSBmcm9tICcuL2xvYWRpbmdfc3Bpbm5lci5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgU0laRVMgPSBbJ3MnLCAnbScsICdsJywgJ3hsJywgJ3h4bCddO1xuZXhwb3J0IHZhciBFdWlMb2FkaW5nU3Bpbm5lciA9IGZ1bmN0aW9uIEV1aUxvYWRpbmdTcGlubmVyKF9yZWYpIHtcbiAgdmFyIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/ICdtJyA6IF9yZWYkc2l6ZSxcbiAgICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgYXJpYUxhYmVsID0gX3JlZlsnYXJpYS1sYWJlbCddLFxuICAgICAgY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHZhciBzdHlsZXMgPSBldWlMb2FkaW5nU3Bpbm5lclN0eWxlcyhldWlUaGVtZSwgY29sb3IpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlMb2FkaW5nU3Bpbm5lciwgc3R5bGVzW3NpemVdXTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlMb2FkaW5nU3Bpbm5lcicsIGNsYXNzTmFtZSk7XG4gIHZhciBkZWZhdWx0TGFiZWwgPSB1c2VMb2FkaW5nQXJpYUxhYmVsKCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3BhblwiLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIGNzczogY3NzU3R5bGVzLFxuICAgIHJvbGU6IFwicHJvZ3Jlc3NiYXJcIixcbiAgICBcImFyaWEtbGFiZWxcIjogYXJpYUxhYmVsIHx8IGRlZmF1bHRMYWJlbFxuICB9LCByZXN0KSk7XG59O1xuRXVpTG9hZGluZ1NwaW5uZXIucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICAgKiBTZXRzIHRoZSBjb2xvciBvZiB0aGUgYm9yZGVyIGFuZCBoaWdobGlnaHQuXG4gICAgICAgKiBFYWNoIGtleSBhY2NlcHRzIGFueSB2YWxpZCBDU1MgY29sb3IgdmFsdWUgYXMgYSBgc3RyaW5nYFxuICAgICAgICogU2VlICNFdWlMb2FkaW5nU3Bpbm5lckNvbG9yXG4gICAgICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgYm9yZGVyOiBQcm9wVHlwZXMuYW55LFxuICAgIGhpZ2hsaWdodDogUHJvcFR5cGVzLmFueVxuICB9KVxufTsiLCAidmFyIF90ZW1wbGF0ZU9iamVjdDtcblxuZnVuY3Rpb24gX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbChzdHJpbmdzLCByYXcpIHsgaWYgKCFyYXcpIHsgcmF3ID0gc3RyaW5ncy5zbGljZSgwKTsgfSByZXR1cm4gT2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydGllcyhzdHJpbmdzLCB7IHJhdzogeyB2YWx1ZTogT2JqZWN0LmZyZWV6ZShyYXcpIH0gfSkpOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBjc3MsIGtleWZyYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGV1aUNhbkFuaW1hdGUgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5cbnZhciBfbG9hZGluZ1NwaW5uZXIgPSBrZXlmcmFtZXMoX3RlbXBsYXRlT2JqZWN0IHx8IChfdGVtcGxhdGVPYmplY3QgPSBfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsKFtcIlxcbiAgZnJvbSB7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xcbiAgfVxcblxcbiAgdG8ge1xcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNTlkZWcpO1xcbiAgfVxcblwiXSkpKTtcblxudmFyIHNwaW5uZXJTaXplcyA9IHtcbiAgczogJ20nLFxuICBtOiAnYmFzZScsXG4gIGw6ICdsJyxcbiAgeGw6ICd4bCcsXG4gIHh4bDogJ3h4bCdcbn07XG5cbnZhciBzcGlubmVyQ29sb3JzQ1NTID0gZnVuY3Rpb24gc3Bpbm5lckNvbG9yc0NTUyhib3JkZXIsIGhpZ2hsaWdodCkge1xuICByZXR1cm4gXCJcXG4gICAgYm9yZGVyLWNvbG9yOiBcIi5jb25jYXQoaGlnaGxpZ2h0LCBcIiBcIikuY29uY2F0KGJvcmRlciwgXCIgXCIpLmNvbmNhdChib3JkZXIsIFwiIFwiKS5jb25jYXQoYm9yZGVyLCBcIjtcXG4gIFwiKTtcbn07XG5cbmV4cG9ydCB2YXIgZXVpTG9hZGluZ1NwaW5uZXJTdHlsZXMgPSBmdW5jdGlvbiBldWlMb2FkaW5nU3Bpbm5lclN0eWxlcyhfcmVmLCBjb2xvcikge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmLmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIGV1aUxvYWRpbmdTcGlubmVyOiAvKiNfX1BVUkVfXyovY3NzKFwiZmxleC1zaHJpbms6MDtkaXNwbGF5OmlubGluZS1ibG9jaztib3JkZXItcmFkaXVzOjUwJTtib3JkZXI6XCIsIGV1aVRoZW1lLmJvcmRlci50aGljaywgXCI7XCIsIHNwaW5uZXJDb2xvcnNDU1MoKGNvbG9yID09PSBudWxsIHx8IGNvbG9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb2xvci5ib3JkZXIpIHx8IGV1aVRoZW1lLmNvbG9ycy5saWdodFNoYWRlLCAoY29sb3IgPT09IG51bGwgfHwgY29sb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbG9yLmhpZ2hsaWdodCkgfHwgZXVpVGhlbWUuY29sb3JzLnByaW1hcnkpLCBcIjtcIiwgZXVpQ2FuQW5pbWF0ZSwgXCJ7YW5pbWF0aW9uOlwiLCBfbG9hZGluZ1NwaW5uZXIsIFwiIDAuNnMgaW5maW5pdGUgbGluZWFyO307bGFiZWw6ZXVpTG9hZGluZ1NwaW5uZXI7XCIpLFxuICAgIC8vIFNpemVzXG4gICAgczogLyojX19QVVJFX18qL2NzcyhcIndpZHRoOlwiLCBldWlUaGVtZS5zaXplW3NwaW5uZXJTaXplcy5zXSwgXCI7aGVpZ2h0OlwiLCBldWlUaGVtZS5zaXplW3NwaW5uZXJTaXplcy5zXSwgXCI7Ym9yZGVyLXdpZHRoOmNhbGMoXCIsIGV1aVRoZW1lLmJvcmRlci53aWR0aC50aGluLCBcIiAqIDEuNSk7O2xhYmVsOnM7XCIpLFxuICAgIG06IC8qI19fUFVSRV9fKi9jc3MoXCJ3aWR0aDpcIiwgZXVpVGhlbWUuc2l6ZVtzcGlubmVyU2l6ZXMubV0sIFwiO2hlaWdodDpcIiwgZXVpVGhlbWUuc2l6ZVtzcGlubmVyU2l6ZXMubV0sIFwiO2JvcmRlci13aWR0aDpjYWxjKFwiLCBldWlUaGVtZS5ib3JkZXIud2lkdGgudGhpbiwgXCIgKiAxLjUpOztsYWJlbDptO1wiKSxcbiAgICBsOiAvKiNfX1BVUkVfXyovY3NzKFwid2lkdGg6XCIsIGV1aVRoZW1lLnNpemVbc3Bpbm5lclNpemVzLmxdLCBcIjtoZWlnaHQ6XCIsIGV1aVRoZW1lLnNpemVbc3Bpbm5lclNpemVzLmxdLCBcIjs7bGFiZWw6bDtcIiksXG4gICAgeGw6IC8qI19fUFVSRV9fKi9jc3MoXCJ3aWR0aDpcIiwgZXVpVGhlbWUuc2l6ZVtzcGlubmVyU2l6ZXMueGxdLCBcIjtoZWlnaHQ6XCIsIGV1aVRoZW1lLnNpemVbc3Bpbm5lclNpemVzLnhsXSwgXCI7O2xhYmVsOnhsO1wiKSxcbiAgICB4eGw6IC8qI19fUFVSRV9fKi9jc3MoXCJ3aWR0aDpcIiwgZXVpVGhlbWUuc2l6ZVtzcGlubmVyU2l6ZXMueHhsXSwgXCI7aGVpZ2h0OlwiLCBldWlUaGVtZS5zaXplW3NwaW5uZXJTaXplcy54eGxdLCBcIjs7bGFiZWw6eHhsO1wiKVxuICB9O1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBVUkwgZnJvbSAndXJsLXBhcnNlJztcbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUhyZWYoaHJlZikge1xuICAvLyBjaGVjayBocmVmIGFuZCB0cmVhdCBpdCBhcyBpbnZhbGlkIGlmIGl0IHVzZXMgdGhlIGphdmFzY3JpcHQ6IHByb3RvY29sXG4gIHZhciBwYXJ0cyA9IG5ldyBVUkwoaHJlZik7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zY3JpcHQtdXJsXG5cbiAgcmV0dXJuIHBhcnRzLnByb3RvY29sICE9PSAnamF2YXNjcmlwdDonO1xufSIsICJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7IHZhciBfaSA9IGFyciA9PSBudWxsID8gbnVsbCA6IHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgYXJyW1N5bWJvbC5pdGVyYXRvcl0gfHwgYXJyW1wiQEBpdGVyYXRvclwiXTsgaWYgKF9pID09IG51bGwpIHJldHVybjsgdmFyIF9hcnIgPSBbXTsgdmFyIF9uID0gdHJ1ZTsgdmFyIF9kID0gZmFsc2U7IHZhciBfcywgX2U7IHRyeSB7IGZvciAoX2kgPSBfaS5jYWxsKGFycik7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHsgX2Fyci5wdXNoKF9zLnZhbHVlKTsgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOyB9IH0gY2F0Y2ggKGVycikgeyBfZCA9IHRydWU7IF9lID0gZXJyOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7IH0gZmluYWxseSB7IGlmIChfZCkgdGhyb3cgX2U7IH0gfSByZXR1cm4gX2FycjsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEV1aU9ic2VydmVyIH0gZnJvbSAnLi4vb2JzZXJ2ZXInO1xuZXhwb3J0IHZhciBoYXNSZXNpemVPYnNlcnZlciA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3aW5kb3cuUmVzaXplT2JzZXJ2ZXIgIT09ICd1bmRlZmluZWQnO1xuZXhwb3J0IHZhciBFdWlSZXNpemVPYnNlcnZlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0V1aU9ic2VydmVyKSB7XG4gIF9pbmhlcml0cyhFdWlSZXNpemVPYnNlcnZlciwgX0V1aU9ic2VydmVyKTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aVJlc2l6ZU9ic2VydmVyKTtcblxuICBmdW5jdGlvbiBFdWlSZXNpemVPYnNlcnZlcigpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpUmVzaXplT2JzZXJ2ZXIpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwuYXBwbHkoX3N1cGVyLCBbdGhpc10uY29uY2F0KGFyZ3MpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJuYW1lXCIsICdFdWlSZXNpemVPYnNlcnZlcicpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInN0YXRlXCIsIHtcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIHdpZHRoOiAwXG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25SZXNpemVcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gYGVudHJ5LmNvbnRlbnRSZWN0YCBwcm92aWRlcyBpbmNvbXBsZXRlIGBoZWlnaHRgIGFuZCBgd2lkdGhgIGRhdGEuXG4gICAgICAvLyBVc2UgYGdldEJvdW5kaW5nQ2xpZW50UmVjdGAgdG8gYWNjb3VudCBmb3IgcGFkZGluZyBhbmQgYm9yZGVyLlxuICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0RPTVJlY3RSZWFkT25seVxuICAgICAgaWYgKCFfdGhpcy5jaGlsZE5vZGUpIHJldHVybjtcblxuICAgICAgdmFyIF90aGlzJGNoaWxkTm9kZSRnZXRCbyA9IF90aGlzLmNoaWxkTm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcbiAgICAgICAgICBoZWlnaHQgPSBfdGhpcyRjaGlsZE5vZGUkZ2V0Qm8uaGVpZ2h0LFxuICAgICAgICAgIHdpZHRoID0gX3RoaXMkY2hpbGROb2RlJGdldEJvLndpZHRoOyAvLyBDaGVjayBmb3IgYWN0dWFsIHJlc2l6ZSBldmVudFxuXG5cbiAgICAgIGlmIChfdGhpcy5zdGF0ZS5oZWlnaHQgPT09IGhlaWdodCAmJiBfdGhpcy5zdGF0ZS53aWR0aCA9PT0gd2lkdGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5wcm9wcy5vblJlc2l6ZSh7XG4gICAgICAgIGhlaWdodDogaGVpZ2h0LFxuICAgICAgICB3aWR0aDogd2lkdGhcbiAgICAgIH0pO1xuXG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGhlaWdodDogaGVpZ2h0LFxuICAgICAgICB3aWR0aDogd2lkdGhcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImJlZ2luT2JzZXJ2ZVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBUaGUgc3VwZXJjbGFzcyBjaGVja3MgdGhhdCBjaGlsZE5vZGUgaXMgbm90IG51bGwgYmVmb3JlIGludm9raW5nXG4gICAgICAvLyBiZWdpbk9ic2VydmUoKVxuICAgICAgdmFyIGNoaWxkTm9kZSA9IF90aGlzLmNoaWxkTm9kZTtcbiAgICAgIF90aGlzLm9ic2VydmVyID0gbWFrZVJlc2l6ZU9ic2VydmVyKGNoaWxkTm9kZSwgX3RoaXMub25SZXNpemUpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgcmV0dXJuIEV1aVJlc2l6ZU9ic2VydmVyO1xufShFdWlPYnNlcnZlcik7XG5cbnZhciBtYWtlUmVzaXplT2JzZXJ2ZXIgPSBmdW5jdGlvbiBtYWtlUmVzaXplT2JzZXJ2ZXIobm9kZSwgY2FsbGJhY2spIHtcbiAgdmFyIG9ic2VydmVyO1xuXG4gIGlmIChoYXNSZXNpemVPYnNlcnZlcikge1xuICAgIG9ic2VydmVyID0gbmV3IHdpbmRvdy5SZXNpemVPYnNlcnZlcihjYWxsYmFjayk7XG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZShub2RlKTtcbiAgfVxuXG4gIHJldHVybiBvYnNlcnZlcjtcbn07XG5cbmV4cG9ydCB2YXIgdXNlUmVzaXplT2JzZXJ2ZXIgPSBmdW5jdGlvbiB1c2VSZXNpemVPYnNlcnZlcihjb250YWluZXIsIGRpbWVuc2lvbikge1xuICB2YXIgX3VzZVN0YXRlID0gdXNlU3RhdGUoe1xuICAgIHdpZHRoOiAwLFxuICAgIGhlaWdodDogMFxuICB9KSxcbiAgICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgICAgc2l6ZSA9IF91c2VTdGF0ZTJbMF0sXG4gICAgICBfc2V0U2l6ZSA9IF91c2VTdGF0ZTJbMV07IC8vIF9jdXJyZW50RGltZW5zaW9ucyBhbmQgX3NldFNpemUgYXJlIHVzZWQgdG8gb25seSBzdG9yZSB0aGVcbiAgLy8gbmV3IHN0YXRlIChhbmQgdHJpZ2dlciBhIHJlLXJlbmRlcikgd2hlbiB0aGUgbmV3IGRpbWVuc2lvbnMgYWN0dWFsbHkgZGlmZmVyXG5cblxuICB2YXIgX2N1cnJlbnREaW1lbnNpb25zID0gdXNlUmVmKHNpemUpO1xuXG4gIHZhciBzZXRTaXplID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKGRpbWVuc2lvbnMpIHtcbiAgICB2YXIgZG9lc1dpZHRoTWF0dGVyID0gZGltZW5zaW9uICE9PSAnaGVpZ2h0JztcbiAgICB2YXIgZG9lc0hlaWdodE1hdHRlciA9IGRpbWVuc2lvbiAhPT0gJ3dpZHRoJztcblxuICAgIGlmIChkb2VzV2lkdGhNYXR0ZXIgJiYgX2N1cnJlbnREaW1lbnNpb25zLmN1cnJlbnQud2lkdGggIT09IGRpbWVuc2lvbnMud2lkdGggfHwgZG9lc0hlaWdodE1hdHRlciAmJiBfY3VycmVudERpbWVuc2lvbnMuY3VycmVudC5oZWlnaHQgIT09IGRpbWVuc2lvbnMuaGVpZ2h0KSB7XG4gICAgICBfY3VycmVudERpbWVuc2lvbnMuY3VycmVudCA9IGRpbWVuc2lvbnM7XG5cbiAgICAgIF9zZXRTaXplKGRpbWVuc2lvbnMpO1xuICAgIH1cbiAgfSwgW2RpbWVuc2lvbl0pO1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmIChjb250YWluZXIgIT0gbnVsbCkge1xuICAgICAgLy8gUmVzaXplT2JzZXJ2ZXIncyBmaXJzdCBjYWxsIHRvIHRoZSBvYnNlcnZhdGlvbiBjYWxsYmFjayBpcyBzY2hlZHVsZWQgaW4gdGhlIGZ1dHVyZVxuICAgICAgLy8gc28gZmluZCB0aGUgY29udGFpbmVyJ3MgaW5pdGlhbCBkaW1lbnNpb25zIG5vd1xuICAgICAgdmFyIGJvdW5kaW5nUmVjdCA9IGNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIHNldFNpemUoe1xuICAgICAgICB3aWR0aDogYm91bmRpbmdSZWN0LndpZHRoLFxuICAgICAgICBoZWlnaHQ6IGJvdW5kaW5nUmVjdC5oZWlnaHRcbiAgICAgIH0pO1xuICAgICAgdmFyIG9ic2VydmVyID0gbWFrZVJlc2l6ZU9ic2VydmVyKGNvbnRhaW5lciwgZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBgZW50cnkuY29udGVudFJlY3RgIHByb3ZpZGVzIGluY29tcGxldGUgYGhlaWdodGAgYW5kIGB3aWR0aGAgZGF0YS5cbiAgICAgICAgLy8gVXNlIGBnZXRCb3VuZGluZ0NsaWVudFJlY3RgIHRvIGFjY291bnQgZm9yIHBhZGRpbmcgYW5kIGJvcmRlci5cbiAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0RPTVJlY3RSZWFkT25seVxuICAgICAgICB2YXIgX2NvbnRhaW5lciRnZXRCb3VuZGluID0gY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFxuICAgICAgICAgICAgaGVpZ2h0ID0gX2NvbnRhaW5lciRnZXRCb3VuZGluLmhlaWdodCxcbiAgICAgICAgICAgIHdpZHRoID0gX2NvbnRhaW5lciRnZXRCb3VuZGluLndpZHRoO1xuXG4gICAgICAgIHNldFNpemUoe1xuICAgICAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgICAgICBoZWlnaHQ6IGhlaWdodFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG9ic2VydmVyICYmIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHNldFNpemUoe1xuICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgaGVpZ2h0OiAwXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIFtjb250YWluZXIsIHNldFNpemVdKTtcbiAgcmV0dXJuIHNpemU7XG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuZXhwb3J0IHZhciBFdWlPYnNlcnZlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoRXVpT2JzZXJ2ZXIsIF9Db21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoRXVpT2JzZXJ2ZXIpO1xuXG4gIGZ1bmN0aW9uIEV1aU9ic2VydmVyKCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlPYnNlcnZlcik7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbC5hcHBseShfc3VwZXIsIFt0aGlzXS5jb25jYXQoYXJncykpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm5hbWVcIiwgJ0V1aU9ic2VydmVyJyk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiY2hpbGROb2RlXCIsIG51bGwpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9ic2VydmVyXCIsIG51bGwpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInVwZGF0ZUNoaWxkTm9kZVwiLCBmdW5jdGlvbiAocmVmKSB7XG4gICAgICBpZiAoX3RoaXMuY2hpbGROb2RlID09PSByZWYpIHJldHVybjsgLy8gbm9kZSBoYXNuJ3QgY2hhbmdlZFxuICAgICAgLy8gaWYgdGhlcmUncyBhbiBleGlzdGluZyBvYnNlcnZlciBkaXNjb25uZWN0IGl0XG5cbiAgICAgIGlmIChfdGhpcy5vYnNlcnZlciAhPSBudWxsKSB7XG4gICAgICAgIF90aGlzLm9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcblxuICAgICAgICBfdGhpcy5vYnNlcnZlciA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIF90aGlzLmNoaWxkTm9kZSA9IHJlZjtcblxuICAgICAgaWYgKF90aGlzLmNoaWxkTm9kZSAhPSBudWxsKSB7XG4gICAgICAgIF90aGlzLmJlZ2luT2JzZXJ2ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImJlZ2luT2JzZXJ2ZVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V1aU9ic2VydmVyIGhhcyBubyBkZWZhdWx0IG9ic2VydmF0aW9uIG1ldGhvZCcpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEV1aU9ic2VydmVyLCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIGlmICh0aGlzLmNoaWxkTm9kZSA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlwiLmNvbmNhdCh0aGlzLm5hbWUsIFwiIGRpZCBub3QgcmVjZWl2ZSBhIHJlZlwiKSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgaWYgKHRoaXMub2JzZXJ2ZXIgIT0gbnVsbCkge1xuICAgICAgICB0aGlzLm9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBwcm9wcyA9IHRoaXMucHJvcHM7XG4gICAgICByZXR1cm4gcHJvcHMuY2hpbGRyZW4odGhpcy51cGRhdGVDaGlsZE5vZGUpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlPYnNlcnZlcjtcbn0oQ29tcG9uZW50KTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInNpemVcIiwgXCJjb2xvclwiLCBcImdyb3dcIiwgXCJ0ZXh0QWxpZ25cIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUV1aVRoZW1lIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgZXVpVGV4dFN0eWxlcyB9IGZyb20gJy4vdGV4dC5zdHlsZXMnO1xuaW1wb3J0IHsgRXVpVGV4dENvbG9yIH0gZnJvbSAnLi90ZXh0X2NvbG9yJztcbmltcG9ydCB7IEV1aVRleHRBbGlnbiB9IGZyb20gJy4vdGV4dF9hbGlnbic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBURVhUX1NJWkVTID0gWyd4cycsICdzJywgJ20nLCAncmVsYXRpdmUnXTtcbmV4cG9ydCB2YXIgRXVpVGV4dCA9IGZ1bmN0aW9uIEV1aVRleHQoX3JlZikge1xuICB2YXIgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gJ20nIDogX3JlZiRzaXplLFxuICAgICAgY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgX3JlZiRncm93ID0gX3JlZi5ncm93LFxuICAgICAgZ3JvdyA9IF9yZWYkZ3JvdyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYkZ3JvdyxcbiAgICAgIHRleHRBbGlnbiA9IF9yZWYudGV4dEFsaWduLFxuICAgICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgdmFyIHN0eWxlcyA9IGV1aVRleHRTdHlsZXMoZXVpVGhlbWUpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlUZXh0LCAhZ3JvdyA/IHN0eWxlcy5jb25zdHJhaW5lZFdpZHRoIDogdW5kZWZpbmVkLCBzdHlsZXNbc2l6ZV1dO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRleHQnLCBjbGFzc05hbWUpO1xuXG4gIHZhciB0ZXh0ID0gX19fRW1vdGlvbkpTWChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gIH0sIHJlc3QpLCBjaGlsZHJlbik7XG5cbiAgaWYgKGNvbG9yKSB7XG4gICAgdGV4dCA9IF9fX0Vtb3Rpb25KU1goRXVpVGV4dENvbG9yLCB7XG4gICAgICBjb2xvcjogY29sb3IsXG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICBjbG9uZUVsZW1lbnQ6IHRydWVcbiAgICB9LCB0ZXh0KTtcbiAgfVxuXG4gIGlmICh0ZXh0QWxpZ24pIHtcbiAgICB0ZXh0ID0gX19fRW1vdGlvbkpTWChFdWlUZXh0QWxpZ24sIHtcbiAgICAgIHRleHRBbGlnbjogdGV4dEFsaWduLFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgY2xvbmVFbGVtZW50OiB0cnVlXG4gICAgfSwgdGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGV4dDtcbn07XG5FdWlUZXh0LnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICB0ZXh0QWxpZ246IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICAgKiBEZXRlcm1pbmVzIHRoZSB0ZXh0IHNpemUuIENob29zZSBgcmVsYXRpdmVgIHRvIGNvbnRyb2wgdGhlIGBmb250LXNpemVgIGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiBhIHBhcmVudCBjb250YWluZXIuXG4gICAgICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgICAqIEFueSBvZiBvdXIgbmFtZWQgY29sb3JzIG9yIGEgYGhleGAsIGByZ2JgIG9yIGByZ2JhYCB2YWx1ZS5cbiAgICAgICAqL1xuICBjb2xvcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWRdKSxcbiAgZ3JvdzogUHJvcFR5cGVzLmJvb2xcbn07IiwgImZ1bmN0aW9uIF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fKCkgeyByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGV1aUZvY3VzUmluZywgbG9naWNhbENTUyB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcblxudmFyIF9jb2xvckNTUyA9IGZ1bmN0aW9uIF9jb2xvckNTUyhjb2xvcikge1xuICByZXR1cm4gXCJcXG4gICAgY29sb3I6IFwiLmNvbmNhdChjb2xvciwgXCI7XFxuXFxuICAgICY6aG92ZXIsXFxuICAgICY6Zm9jdXMsXFxuICAgICY6dGFyZ2V0IHtcXG4gICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcXG4gICAgfVxcblxcbiAgICAmOnRhcmdldCB7XFxuICAgICAgY29sb3I6IGRhcmtlbihcIikuY29uY2F0KGNvbG9yLCBcIiwgMTAlKTtcXG4gICAgfVxcbiAgXCIpO1xufTtcblxuZXhwb3J0IHZhciBldWlMaW5rSG92ZXJDU1MgPSBmdW5jdGlvbiBldWlMaW5rSG92ZXJDU1MoKSB7XG4gIHJldHVybiBcIlxcbiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcXG4gIFwiO1xufTtcbmV4cG9ydCB2YXIgZXVpTGlua0ZvY3VzQ1NTID0gZnVuY3Rpb24gZXVpTGlua0ZvY3VzQ1NTKGV1aVRoZW1lKSB7XG4gIHJldHVybiBcIlxcbiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcXG4gICAgdGV4dC1kZWNvcmF0aW9uLXRoaWNrbmVzczogXCIuY29uY2F0KGV1aVRoZW1lLmJvcmRlci53aWR0aC50aGljaywgXCIgIWltcG9ydGFudDtcXG4gIFwiKTtcbn07XG5leHBvcnQgdmFyIGV1aUxpbmtDU1MgPSBmdW5jdGlvbiBldWlMaW5rQ1NTKGV1aVRoZW1lKSB7XG4gIHJldHVybiBcIlxcbiAgICBmb250LXdlaWdodDogXCIuY29uY2F0KGV1aVRoZW1lLmZvbnQud2VpZ2h0Lm1lZGl1bSwgXCI7XFxuICAgIHRleHQtYWxpZ246IGxlZnQ7XFxuXFxuICAgICY6aG92ZXIge1xcbiAgICAgIFwiKS5jb25jYXQoZXVpTGlua0hvdmVyQ1NTKCksIFwiXFxuICAgIH1cXG5cXG4gICAgJjpmb2N1cyB7XFxuICAgICAgXCIpLmNvbmNhdChldWlGb2N1c1JpbmcoZXVpVGhlbWUsICdvdXRzZXQnKSwgXCJcXG4gICAgICBcIikuY29uY2F0KGV1aUxpbmtGb2N1c0NTUyhldWlUaGVtZSksIFwiXFxuICAgIH1cXG4gIFwiKTtcbn07XG5cbnZhciBfcmVmID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjluamJpNS1kaXNhYmxlZFwiLFxuICBzdHlsZXM6IFwiZm9udC13ZWlnaHQ6aW5oZXJpdDsmOmhvdmVye2N1cnNvcjphdXRvO30mOmhvdmVyLCY6Zm9jdXMsJjp0YXJnZXR7dGV4dC1kZWNvcmF0aW9uOm5vbmU7fTtsYWJlbDpkaXNhYmxlZDtcIlxufSA6IHtcbiAgbmFtZTogXCI5bmpiaTUtZGlzYWJsZWRcIixcbiAgc3R5bGVzOiBcImZvbnQtd2VpZ2h0OmluaGVyaXQ7Jjpob3ZlcntjdXJzb3I6YXV0bzt9Jjpob3ZlciwmOmZvY3VzLCY6dGFyZ2V0e3RleHQtZGVjb3JhdGlvbjpub25lO307bGFiZWw6ZGlzYWJsZWQ7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcblxuZXhwb3J0IHZhciBldWlMaW5rU3R5bGVzID0gZnVuY3Rpb24gZXVpTGlua1N0eWxlcyhfcmVmMikge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmMi5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICBldWlMaW5rOiAvKiNfX1BVUkVfXyovY3NzKGV1aUxpbmtDU1MoZXVpVGhlbWUpLCBcIiB1c2VyLXNlbGVjdDp0ZXh0OyZbdGFyZ2V0PSdfYmxhbmsnXXtwb3NpdGlvbjpyZWxhdGl2ZTt9O2xhYmVsOmV1aUxpbms7XCIpLFxuICAgIGRpc2FibGVkOiBfcmVmLFxuICAgIC8vIENvbG9yIHN0eWxlc1xuICAgIHByaW1hcnk6IC8qI19fUFVSRV9fKi9jc3MoX2NvbG9yQ1NTKGV1aVRoZW1lLmNvbG9ycy5wcmltYXJ5VGV4dCksIFwiO2xhYmVsOnByaW1hcnk7XCIpLFxuICAgIHN1YmR1ZWQ6IC8qI19fUFVSRV9fKi9jc3MoX2NvbG9yQ1NTKGV1aVRoZW1lLmNvbG9ycy5zdWJkdWVkVGV4dCksIFwiO2xhYmVsOnN1YmR1ZWQ7XCIpLFxuICAgIHN1Y2Nlc3M6IC8qI19fUFVSRV9fKi9jc3MoX2NvbG9yQ1NTKGV1aVRoZW1lLmNvbG9ycy5zdWNjZXNzVGV4dCksIFwiO2xhYmVsOnN1Y2Nlc3M7XCIpLFxuICAgIGFjY2VudDogLyojX19QVVJFX18qL2NzcyhfY29sb3JDU1MoZXVpVGhlbWUuY29sb3JzLmFjY2VudFRleHQpLCBcIjtsYWJlbDphY2NlbnQ7XCIpLFxuICAgIGRhbmdlcjogLyojX19QVVJFX18qL2NzcyhfY29sb3JDU1MoZXVpVGhlbWUuY29sb3JzLmRhbmdlclRleHQpLCBcIjtsYWJlbDpkYW5nZXI7XCIpLFxuICAgIHdhcm5pbmc6IC8qI19fUFVSRV9fKi9jc3MoX2NvbG9yQ1NTKGV1aVRoZW1lLmNvbG9ycy53YXJuaW5nVGV4dCksIFwiO2xhYmVsOndhcm5pbmc7XCIpLFxuICAgIGdob3N0OiAvKiNfX1BVUkVfXyovY3NzKF9jb2xvckNTUyhldWlUaGVtZS5jb2xvcnMuZ2hvc3QpLCBcIjtsYWJlbDpnaG9zdDtcIiksXG4gICAgdGV4dDogLyojX19QVVJFX18qL2NzcyhfY29sb3JDU1MoZXVpVGhlbWUuY29sb3JzLnRleHQpLCBcIjtsYWJlbDp0ZXh0O1wiKSxcbiAgICAvLyBDaGlsZHJlblxuICAgIGV1aUxpbmtfX3NjcmVlblJlYWRlclRleHQ6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnbGVmdCcsICcwcHgnKSwgXCI7O2xhYmVsOmV1aUxpbmtfX3NjcmVlblJlYWRlclRleHQ7XCIpLFxuICAgIGV1aUxpbmtfX2V4dGVybmFsSWNvbjogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCdtYXJnaW4tbGVmdCcsIGV1aVRoZW1lLnNpemUueHMpLCBcIjs7bGFiZWw6ZXVpTGlua19fZXh0ZXJuYWxJY29uO1wiKVxuICB9O1xufTsiLCAiZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGV1aVRleHRCcmVha1dvcmQsIGV1aUZvbnRTaXplIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuZXhwb3J0IHZhciBldWlUaXRsZSA9IGZ1bmN0aW9uIGV1aVRpdGxlKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgc2NhbGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6ICdtJztcbiAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZDtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuICB2YXIgdGl0bGVTY2FsZVRvRm9udFNpemVTY2FsZU1hcCA9IHtcbiAgICB4eHhzOiAneHMnLFxuICAgIHh4czogJ3MnLFxuICAgIHhzOiAnbScsXG4gICAgczogJ2wnLFxuICAgIG06ICd4bCcsXG4gICAgbDogJ3h4bCdcbiAgfTtcbiAgcmV0dXJuIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgZXVpRm9udFNpemUoZXVpVGhlbWVDb250ZXh0LCB0aXRsZVNjYWxlVG9Gb250U2l6ZVNjYWxlTWFwW3NjYWxlXSwgb3B0aW9ucykpLCB7fSwge1xuICAgIGZvbnRXZWlnaHQ6IGV1aVRoZW1lLmZvbnQud2VpZ2h0W2V1aVRoZW1lLmZvbnQudGl0bGUud2VpZ2h0XSxcbiAgICBjb2xvcjogZXVpVGhlbWUuY29sb3JzLnRpdGxlXG4gIH0pO1xufTsgLy8gSG9vayB2ZXJzaW9uXG5cbmV4cG9ydCB2YXIgdXNlRXVpVGl0bGUgPSBmdW5jdGlvbiB1c2VFdWlUaXRsZShzY2FsZSwgb3B0aW9ucykge1xuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICByZXR1cm4gZXVpVGl0bGUoZXVpVGhlbWUsIHNjYWxlLCBvcHRpb25zKTtcbn07XG4vKipcbiAqIFN0eWxlc1xuICovXG5cbnZhciBfcmVmID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcIjF4MnFzYjEtdXBwZXJjYXNlXCIsXG4gIHN0eWxlczogXCJ0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7bGFiZWw6dXBwZXJjYXNlO1wiXG59IDoge1xuICBuYW1lOiBcIjF4MnFzYjEtdXBwZXJjYXNlXCIsXG4gIHN0eWxlczogXCJ0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7bGFiZWw6dXBwZXJjYXNlO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5cbmV4cG9ydCB2YXIgZXVpVGl0bGVTdHlsZXMgPSBmdW5jdGlvbiBldWlUaXRsZVN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgcmV0dXJuIHtcbiAgICBldWlUaXRsZTogLyojX19QVVJFX18qL2NzcyhldWlUZXh0QnJlYWtXb3JkKCksIFwiICYrJnttYXJnaW4tdG9wOlwiLCBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWUuc2l6ZS5sLCBcIjt9O2xhYmVsOmV1aVRpdGxlO1wiKSxcbiAgICB1cHBlcmNhc2U6IF9yZWYsXG4gICAgLy8gU2l6ZXNcbiAgICB4eHhzOiAvKiNfX1BVUkVfXyovY3NzKGV1aVRpdGxlKGV1aVRoZW1lQ29udGV4dCwgJ3h4eHMnKSwgXCI7O2xhYmVsOnh4eHM7XCIpLFxuICAgIHh4czogLyojX19QVVJFX18qL2NzcyhldWlUaXRsZShldWlUaGVtZUNvbnRleHQsICd4eHMnKSwgXCI7O2xhYmVsOnh4cztcIiksXG4gICAgeHM6IC8qI19fUFVSRV9fKi9jc3MoZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAneHMnKSwgXCI7O2xhYmVsOnhzO1wiKSxcbiAgICBzOiAvKiNfX1BVUkVfXyovY3NzKGV1aVRpdGxlKGV1aVRoZW1lQ29udGV4dCwgJ3MnKSwgXCI7O2xhYmVsOnM7XCIpLFxuICAgIG06IC8qI19fUFVSRV9fKi9jc3MoZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAnbScpLCBcIjs7bGFiZWw6bTtcIiksXG4gICAgbDogLyojX19QVVJFX18qL2NzcyhldWlUaXRsZShldWlUaGVtZUNvbnRleHQsICdsJyksIFwiOztsYWJlbDpsO1wiKVxuICB9O1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGxvZ2ljYWxDU1MsIGxvZ2ljYWxUZXh0QWxpZ25DU1MsIGV1aUZvbnRTaXplLCBldWlCYWNrZ3JvdW5kQ29sb3IgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5pbXBvcnQgeyBldWlMaW5rQ1NTIH0gZnJvbSAnLi4vbGluay9saW5rLnN0eWxlcyc7XG5pbXBvcnQgeyBldWlUaXRsZSB9IGZyb20gJy4uL3RpdGxlL3RpdGxlLnN0eWxlcyc7XG4vKipcbiAqIFRPRE86IE1ha2UgdGhpcyBhIGdsb2JhbCB2YWx1ZSBzbyBpdCBjYW4gYmUgc2V0IGJ5IHRoZW1lP1xuICovXG5cbmV4cG9ydCB2YXIgZXVpVGV4dENvbnN0cmFpbmVkTWF4V2lkdGggPSAnbWF4KDY0Y2gsIDc1JSknO1xuLyoqXG4gKiBNaXhpbnNcbiAqL1xuXG5leHBvcnQgdmFyIGV1aVRleHQgPSBmdW5jdGlvbiBldWlUZXh0KGV1aVRoZW1lKSB7XG4gIHZhciBpbmhlcml0Q29sb3IgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZhbHNlO1xuICByZXR1cm4ge1xuICAgIGNvbG9yOiBpbmhlcml0Q29sb3IgPyAnaW5oZXJpdCcgOiBldWlUaGVtZS5jb2xvcnMudGV4dCxcbiAgICBmb250V2VpZ2h0OiBldWlUaGVtZS5mb250LndlaWdodC5yZWd1bGFyXG4gIH07XG59OyAvLyBJbnRlcm5hbCB1dGlsaXR5IGZvciBFdWlUZXh0IHNjYWxlcy9zaXplc1xuXG52YXIgZXVpU2NhbGVUZXh0ID0gZnVuY3Rpb24gZXVpU2NhbGVUZXh0KGV1aVRoZW1lQ29udGV4dCwgb3B0aW9ucykge1xuICB2YXIgX2V1aUZvbnRTaXplID0gZXVpRm9udFNpemUoZXVpVGhlbWVDb250ZXh0LCAnbScsIG9wdGlvbnMpLFxuICAgICAgZm9udFNpemUgPSBfZXVpRm9udFNpemUuZm9udFNpemUsXG4gICAgICBsaW5lSGVpZ2h0ID0gX2V1aUZvbnRTaXplLmxpbmVIZWlnaHQ7XG5cbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuICB2YXIgbWVhc3VyZW1lbnQgPSBvcHRpb25zLm1lYXN1cmVtZW50LFxuICAgICAgX2N1c3RvbVNjYWxlID0gb3B0aW9ucy5jdXN0b21TY2FsZTtcbiAgdmFyIGxpbmVIZWlnaHRTaXplID0gbWVhc3VyZW1lbnQgPT09ICdlbScgPyBcIlwiLmNvbmNhdChsaW5lSGVpZ2h0LCBcImVtXCIpIDogbGluZUhlaWdodDtcbiAgdmFyIGhlYWRpbmdzID0ge1xuICAgIGgxOiBldWlUaXRsZShldWlUaGVtZUNvbnRleHQsICdsJywgb3B0aW9ucyksXG4gICAgaDI6IGV1aVRpdGxlKGV1aVRoZW1lQ29udGV4dCwgJ20nLCBvcHRpb25zKSxcbiAgICBoMzogZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAncycsIG9wdGlvbnMpLFxuICAgIGg0OiBldWlUaXRsZShldWlUaGVtZUNvbnRleHQsICd4cycsIG9wdGlvbnMpLFxuICAgIGg1OiBldWlUaXRsZShldWlUaGVtZUNvbnRleHQsICd4eHMnLCBvcHRpb25zKSxcbiAgICBoNjogZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAneHh4cycsIG9wdGlvbnMpXG4gIH07IC8vIEdlbmVyYXRlIG1hcmdpbnMgZm9yIGhlYWRpbmdzIGJhc2VkIG9uIGN1c3RvbVNjYWxlIChub3Qgb24gaGVhZGluZyBsZXZlbClcblxuICB2YXIgY3VzdG9tU2NhbGUgPSBfY3VzdG9tU2NhbGUgPT09ICd4eHhzJyA/ICd4eHMnIDogX2N1c3RvbVNjYWxlIHx8ICdtJztcbiAgdmFyIGhlYWRpbmdNYXJnaW5Ub3AgPSBcIlwiLmNvbmNhdChwYXJzZUZsb2F0KGV1aVRoZW1lLnNpemVbY3VzdG9tU2NhbGVdKSAqIDIsIFwicHhcIik7XG4gIHZhciBoZWFkaW5nTWFyZ2luQm90dG9tID0gZXVpVGhlbWUuc2l6ZVtjdXN0b21TY2FsZV07XG4gIHJldHVybiBcIlxcbiAgICBmb250LXNpemU6IFwiLmNvbmNhdChmb250U2l6ZSwgXCI7XFxuICAgIGxpbmUtaGVpZ2h0OiBcIikuY29uY2F0KGxpbmVIZWlnaHQsIFwiO1xcblxcbiAgICBoMSB7XFxuICAgICAgZm9udC1zaXplOiBcIikuY29uY2F0KGhlYWRpbmdzLmgxLmZvbnRTaXplLCBcIjtcXG4gICAgICBsaW5lLWhlaWdodDogXCIpLmNvbmNhdChoZWFkaW5ncy5oMS5saW5lSGVpZ2h0LCBcIjtcXG4gICAgfVxcbiAgICBoMTpub3QoOmxhc3QtY2hpbGQpIHtcXG4gICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ21hcmdpbi1ib3R0b20nLCBoZWFkaW5nTWFyZ2luQm90dG9tKSwgXCJcXG4gICAgfVxcblxcbiAgICBoMiB7XFxuICAgICAgZm9udC1zaXplOiBcIikuY29uY2F0KGhlYWRpbmdzLmgyLmZvbnRTaXplLCBcIjtcXG4gICAgICBsaW5lLWhlaWdodDogXCIpLmNvbmNhdChoZWFkaW5ncy5oMi5saW5lSGVpZ2h0LCBcIjtcXG5cXG4gICAgICAmOm5vdCg6Zmlyc3QtY2hpbGQpIHtcXG4gICAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnbWFyZ2luLXRvcCcsIGhlYWRpbmdNYXJnaW5Ub3ApLCBcIlxcbiAgICAgIH1cXG5cXG4gICAgICAmOm5vdCg6bGFzdC1jaGlsZCkge1xcbiAgICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdtYXJnaW4tYm90dG9tJywgaGVhZGluZ01hcmdpbkJvdHRvbSksIFwiXFxuICAgICAgfVxcbiAgICB9XFxuXFxuICAgIGgzIHtcXG4gICAgICBmb250LXNpemU6IFwiKS5jb25jYXQoaGVhZGluZ3MuaDMuZm9udFNpemUsIFwiO1xcbiAgICAgIGxpbmUtaGVpZ2h0OiBcIikuY29uY2F0KGhlYWRpbmdzLmgzLmxpbmVIZWlnaHQsIFwiO1xcblxcbiAgICAgICY6bm90KDpmaXJzdC1jaGlsZCkge1xcbiAgICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdtYXJnaW4tdG9wJywgaGVhZGluZ01hcmdpblRvcCksIFwiXFxuICAgICAgfVxcblxcbiAgICAgICY6bm90KDpsYXN0LWNoaWxkKSB7XFxuICAgICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ21hcmdpbi1ib3R0b20nLCBoZWFkaW5nTWFyZ2luQm90dG9tKSwgXCJcXG4gICAgICB9XFxuICAgIH1cXG5cXG4gICAgaDQge1xcbiAgICAgIGZvbnQtc2l6ZTogXCIpLmNvbmNhdChoZWFkaW5ncy5oNC5mb250U2l6ZSwgXCI7XFxuICAgICAgbGluZS1oZWlnaHQ6IFwiKS5jb25jYXQoaGVhZGluZ3MuaDQubGluZUhlaWdodCwgXCI7XFxuXFxuICAgICAgJjpub3QoOmZpcnN0LWNoaWxkKSB7XFxuICAgICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ21hcmdpbi10b3AnLCBoZWFkaW5nTWFyZ2luVG9wKSwgXCJcXG4gICAgICB9XFxuXFxuICAgICAgJjpub3QoOmxhc3QtY2hpbGQpIHtcXG4gICAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnbWFyZ2luLWJvdHRvbScsIGhlYWRpbmdNYXJnaW5Cb3R0b20pLCBcIlxcbiAgICAgIH1cXG4gICAgfVxcblxcbiAgICBoNSB7XFxuICAgICAgZm9udC1zaXplOiBcIikuY29uY2F0KGhlYWRpbmdzLmg1LmZvbnRTaXplLCBcIjtcXG4gICAgICBsaW5lLWhlaWdodDogXCIpLmNvbmNhdChoZWFkaW5ncy5oNS5saW5lSGVpZ2h0LCBcIjtcXG5cXG4gICAgICAmOm5vdCg6Zmlyc3QtY2hpbGQpIHtcXG4gICAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnbWFyZ2luLXRvcCcsIGhlYWRpbmdNYXJnaW5Ub3ApLCBcIlxcbiAgICAgIH1cXG5cXG4gICAgICAmOm5vdCg6bGFzdC1jaGlsZCkge1xcbiAgICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdtYXJnaW4tYm90dG9tJywgaGVhZGluZ01hcmdpbkJvdHRvbSksIFwiXFxuICAgICAgfVxcbiAgICB9XFxuXFxuICAgIGg2IHtcXG4gICAgICBmb250LXNpemU6IFwiKS5jb25jYXQoaGVhZGluZ3MuaDYuZm9udFNpemUsIFwiO1xcbiAgICAgIGxpbmUtaGVpZ2h0OiBcIikuY29uY2F0KGhlYWRpbmdzLmg2LmxpbmVIZWlnaHQsIFwiO1xcblxcbiAgICAgICY6bm90KDpmaXJzdC1jaGlsZCkge1xcbiAgICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdtYXJnaW4tdG9wJywgaGVhZGluZ01hcmdpblRvcCksIFwiXFxuICAgICAgfVxcblxcbiAgICAgICY6bm90KDpsYXN0LWNoaWxkKSB7XFxuICAgICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ21hcmdpbi1ib3R0b20nLCBoZWFkaW5nTWFyZ2luQm90dG9tKSwgXCJcXG4gICAgICB9XFxuICAgIH1cXG5cXG4gICAgcCxcXG4gICAgdWwsXFxuICAgIG9sLFxcbiAgICBkbCxcXG4gICAgYmxvY2txdW90ZSxcXG4gICAgaW1nLFxcbiAgICBwcmUge1xcbiAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnbWFyZ2luLWJvdHRvbScsIGxpbmVIZWlnaHRTaXplKSwgXCJcXG4gICAgfVxcblxcbiAgICB1bCxcXG4gICAgb2wge1xcbiAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnbWFyZ2luLWxlZnQnLCBsaW5lSGVpZ2h0U2l6ZSksIFwiXFxuICAgIH1cXG4gIFxcbiAgICBibG9ja3F1b3RlIHtcXG4gICAgICBmb250LXNpemU6IFwiKS5jb25jYXQoZm9udFNpemUsIFwiO1xcbiAgICAgIHBhZGRpbmc6IFwiKS5jb25jYXQobGluZUhlaWdodFNpemUsIFwiO1xcbiAgICB9XFxuXFxuICAgIGRkICsgZHQge1xcbiAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnbWFyZ2luLXRvcCcsIGZvbnRTaXplKSwgXCJcXG4gICAgfVxcblxcbiAgICBkdCxcXG4gICAgLmV1aS1kZWZpbml0aW9uTGlzdFJldmVyc2UgZGQge1xcbiAgICAgIGZvbnQtc2l6ZTogXCIpLmNvbmNhdChmb250U2l6ZSwgXCI7XFxuICAgICAgbGluZS1oZWlnaHQ6IFwiKS5jb25jYXQobGluZUhlaWdodCwgXCI7XFxuICAgIH1cXG5cXG4gICAgLmV1aS1kZWZpbml0aW9uTGlzdFJldmVyc2UgZHQge1xcbiAgICAgIGZvbnQtc2l6ZTogXCIpLmNvbmNhdChldWlGb250U2l6ZShldWlUaGVtZUNvbnRleHQsICd4cycsIG9wdGlvbnMpLmZvbnRTaXplLCBcIjtcXG4gICAgICBjb2xvcjogXCIpLmNvbmNhdChldWlUaGVtZS5jb2xvcnMudGV4dCwgXCI7XFxuICAgIH1cXG5cXG4gICAgc21hbGwge1xcbiAgICAgIGZvbnQtc2l6ZTogXCIpLmNvbmNhdChldWlGb250U2l6ZShldWlUaGVtZUNvbnRleHQsICdzJywgb3B0aW9ucykuZm9udFNpemUsIFwiO1xcbiAgICB9XFxuXFxuICAgIHByZTpub3QoLmV1aUNvZGVCbG9ja19fcHJlKSB7XFxuICAgICAgcGFkZGluZzogXCIpLmNvbmNhdChsaW5lSGVpZ2h0U2l6ZSwgXCI7XFxuICAgIH1cXG5cXG4gICAgY29kZTpub3QoLmV1aUNvZGUpOm5vdCguZXVpQ29kZUJsb2NrX19jb2RlKSAge1xcbiAgICAgIGZvbnQtc2l6ZTogLjllbTsgLy8gOTAlIG9mIHBhcmVudCBmb250IHNpemVcXG4gICAgfVxcbiAgICBcIikuY29uY2F0KCAvLyB3aGVuIHRleHRTaXplIGlzICdtJywgdGhlICdrYmQnIGVsZW1lbnQgZ2V0cyBhIGxpbmUgYmV0d2VlbiB0aGUgdGV4dCBhbmQgdGhlIGJvcmRlci1ib3R0b21cbiAgX2N1c3RvbVNjYWxlID09PSAnbScgPyBcIlxcbiAgICBrYmQge1xcbiAgICAgIFwiLmNvbmNhdChsb2dpY2FsQ1NTKCdwYWRkaW5nLWJvdHRvbScsIGV1aVRoZW1lLnNpemUueHMpLCBcIlxcbiAgICAgIC8vIGVuc3VyZXMgd2hlbiBvbmx5IG9uZSBjaGFyYWN0ZXIgdGhlIHNoYXBlIGxvb2tzIGxpa2UgYSBzcXVhcmVcXG4gICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ21pbi13aWR0aCcsIGV1aVRoZW1lLnNpemUubCksIFwiXFxuICAgICAgXCIpLmNvbmNhdChsb2dpY2FsVGV4dEFsaWduQ1NTKCdjZW50ZXInKSwgXCJcXG4gICAgfVxcbiAgICBcXG4gICAga2JkOjphZnRlciB7XFxuICAgICAgY29udGVudDogJyc7XFxuICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdib3JkZXItYm90dG9tJywgXCJcIi5jb25jYXQoZXVpVGhlbWUuYm9yZGVyLndpZHRoLnRoaW4sIFwiIHNvbGlkIFwiKS5jb25jYXQoZXVpVGhlbWUuY29sb3JzLnRleHQpKSwgXCJcXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdib3R0b20nLCBldWlUaGVtZS5zaXplLnh4cyksIFwiXFxuICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdsZWZ0JywgMCksIFwiXFxuICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCd3aWR0aCcsICcxMDAlJyksIFwiXFxuICAgIH1cIikgOiAnJywgXCJcXG4gIFwiKTtcbn07XG4vKipcbiAqIFN0eWxlc1xuICovXG5cblxuZXhwb3J0IHZhciBldWlUZXh0U3R5bGVzID0gZnVuY3Rpb24gZXVpVGV4dFN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIGV1aVRleHQ6IC8qI19fUFVSRV9fKi9jc3MoZXVpVGV4dChldWlUaGVtZSwgdHJ1ZSksIFwiO2NsZWFyOmJvdGg7YTpub3QoW2NsYXNzXSl7XCIsIGV1aUxpbmtDU1MoZXVpVGhlbWUpLCBcIjt9aW1ne2Rpc3BsYXk6YmxvY2s7XCIsIGxvZ2ljYWxDU1MoJ21heC13aWR0aCcsICcxMDAlJyksIFwiO311bHtsaXN0LXN0eWxlOmRpc2M7fW9se2xpc3Qtc3R5bGU6ZGVjaW1hbDt9YmxvY2txdW90ZTpub3QoLmV1aU1hcmtkb3duRm9ybWF0X19ibG9ja3F1b3RlKXtwb3NpdGlvbjpyZWxhdGl2ZTtcIiwgbG9naWNhbFRleHRBbGlnbkNTUygnY2VudGVyJyksIFwiIFwiLCBsb2dpY2FsQ1NTKCdtYXJnaW4taG9yaXpvbnRhbCcsICdhdXRvJyksIFwiIGZvbnQtZmFtaWx5OlwiLCBldWlUaGVtZS5mb250LmZhbWlseVNlcmlmLCBcIjtmb250LXN0eWxlOml0YWxpYztsZXR0ZXItc3BhY2luZzpub3JtYWw7cDpsYXN0LWNoaWxke1wiLCBsb2dpY2FsQ1NTKCdtYXJnaW4tYm90dG9tJywgJzAnKSwgXCI7fSY6YmVmb3JlLCY6YWZ0ZXJ7cG9zaXRpb246YWJzb2x1dGU7Y29udGVudDonJztcIiwgbG9naWNhbENTUygnaGVpZ2h0JywgZXVpVGhlbWUuYm9yZGVyLndpZHRoLnRoaWNrKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ3dpZHRoJywgJzUwJScpLCBcIiBcIiwgbG9naWNhbENTUygnbGVmdCcsICcyNSUnKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ3JpZ2h0JywgJzI1JScpLCBcIiBiYWNrZ3JvdW5kOlwiLCBldWlUaGVtZS5jb2xvcnMuZGFya1NoYWRlLCBcIjt9JjpiZWZvcmV7XCIsIGxvZ2ljYWxDU1MoJ3RvcCcsICcwJyksIFwiO30mOmFmdGVye1wiLCBsb2dpY2FsQ1NTKCdib3R0b20nLCAnMCcpLCBcIjt9fWgxe1wiLCBldWlUaXRsZShldWlUaGVtZUNvbnRleHQsICdsJyksIFwiO31oMntcIiwgZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAnbScpLCBcIjt9aDN7XCIsIGV1aVRpdGxlKGV1aVRoZW1lQ29udGV4dCwgJ3MnKSwgXCI7fWg0LGR0e1wiLCBldWlUaXRsZShldWlUaGVtZUNvbnRleHQsICd4cycpLCBcIjt9aDV7XCIsIGV1aVRpdGxlKGV1aVRoZW1lQ29udGV4dCwgJ3h4cycpLCBcIjt9aDZ7XCIsIGV1aVRpdGxlKGV1aVRoZW1lQ29udGV4dCwgJ3h4eHMnKSwgXCIgdGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO31oMSxoMixoMyxoNCxoNSxoNixkdHtjb2xvcjppbmhlcml0O31wcmU6bm90KC5ldWlDb2RlQmxvY2tfX3ByZSl7d2hpdGUtc3BhY2U6cHJlLXdyYXA7YmFja2dyb3VuZDpcIiwgZXVpQmFja2dyb3VuZENvbG9yKGV1aVRoZW1lQ29udGV4dCwgJ3N1YmR1ZWQnKSwgXCI7Y29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy50ZXh0LCBcIjt9cHJlOm5vdCguZXVpQ29kZUJsb2NrX19wcmUpLHByZTpub3QoLmV1aUNvZGVCbG9ja19fcHJlKSBjb2Rle2Rpc3BsYXk6YmxvY2s7fT46bGFzdC1jaGlsZHtcIiwgbG9naWNhbENTUygnbWFyZ2luLWJvdHRvbScsICcwICFpbXBvcnRhbnQnKSwgXCI7fWtiZHtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmlubGluZS1ibG9jaztcIiwgbG9naWNhbENTUygncGFkZGluZy12ZXJ0aWNhbCcsIGV1aVRoZW1lLnNpemUueHhzKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ3BhZGRpbmctaG9yaXpvbnRhbCcsIGV1aVRoZW1lLnNpemUueHMpLCBcIiBsaW5lLWhlaWdodDoxO2JvcmRlcjpcIiwgZXVpVGhlbWUuYm9yZGVyLndpZHRoLnRoaW4sIFwiIHNvbGlkIFwiLCBldWlUaGVtZS5jb2xvcnMudGV4dCwgXCI7Ym9yZGVyLXJhZGl1czpjYWxjKFwiLCBldWlUaGVtZS5ib3JkZXIucmFkaXVzLnNtYWxsLCBcIiAvIDIpO307bGFiZWw6ZXVpVGV4dDtcIiksXG4gICAgY29uc3RyYWluZWRXaWR0aDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCdtYXgtd2lkdGgnLCBldWlUZXh0Q29uc3RyYWluZWRNYXhXaWR0aCksIFwiOztsYWJlbDpjb25zdHJhaW5lZFdpZHRoO1wiKSxcbiAgICAvLyBTaXplc1xuICAgIG06IC8qI19fUFVSRV9fKi9jc3MoZXVpU2NhbGVUZXh0KGV1aVRoZW1lQ29udGV4dCwge1xuICAgICAgbWVhc3VyZW1lbnQ6ICdyZW0nLFxuICAgICAgY3VzdG9tU2NhbGU6ICdtJ1xuICAgIH0pLCBcIjs7bGFiZWw6bTtcIiksXG4gICAgczogLyojX19QVVJFX18qL2NzcyhldWlTY2FsZVRleHQoZXVpVGhlbWVDb250ZXh0LCB7XG4gICAgICBtZWFzdXJlbWVudDogJ3JlbScsXG4gICAgICBjdXN0b21TY2FsZTogJ3MnXG4gICAgfSksIFwiOztsYWJlbDpzO1wiKSxcbiAgICB4czogLyojX19QVVJFX18qL2NzcyhldWlTY2FsZVRleHQoZXVpVGhlbWVDb250ZXh0LCB7XG4gICAgICBtZWFzdXJlbWVudDogJ3JlbScsXG4gICAgICBjdXN0b21TY2FsZTogJ3hzJ1xuICAgIH0pLCBcIjs7bGFiZWw6eHM7XCIpLFxuICAgIHJlbGF0aXZlOiAvKiNfX1BVUkVfXyovY3NzKGV1aVNjYWxlVGV4dChldWlUaGVtZUNvbnRleHQsIHtcbiAgICAgIG1lYXN1cmVtZW50OiAnZW0nXG4gICAgfSksIFwiOztsYWJlbDpyZWxhdGl2ZTtcIilcbiAgfTtcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNvbG9yXCIsIFwiY29tcG9uZW50XCIsIFwiY2xvbmVFbGVtZW50XCIsIFwic3R5bGVcIl07XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBpc1ZhbGlkRWxlbWVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IGNsb25lRWxlbWVudFdpdGhDc3MgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90aGVtZS9jbG9uZV9lbGVtZW50JztcbmltcG9ydCB7IHVzZUV1aVRoZW1lIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgZXVpVGV4dENvbG9yU3R5bGVzIH0gZnJvbSAnLi90ZXh0X2NvbG9yLnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBDT0xPUlMgPSBbJ2RlZmF1bHQnLCAnc3ViZHVlZCcsICdzdWNjZXNzJywgJ2FjY2VudCcsICdkYW5nZXInLCAnd2FybmluZycsICdnaG9zdCcsICdpbmhlcml0J107XG5leHBvcnQgdmFyIEV1aVRleHRDb2xvciA9IGZ1bmN0aW9uIEV1aVRleHRDb2xvcihfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2RlZmF1bHQnIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkY29tcG9uZW50ID0gX3JlZi5jb21wb25lbnQsXG4gICAgICBjb21wb25lbnQgPSBfcmVmJGNvbXBvbmVudCA9PT0gdm9pZCAwID8gJ3NwYW4nIDogX3JlZiRjb21wb25lbnQsXG4gICAgICBfcmVmJGNsb25lRWxlbWVudCA9IF9yZWYuY2xvbmVFbGVtZW50LFxuICAgICAgY2xvbmVFbGVtZW50ID0gX3JlZiRjbG9uZUVsZW1lbnQgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRjbG9uZUVsZW1lbnQsXG4gICAgICBzdHlsZSA9IF9yZWYuc3R5bGUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGlzTmFtZWRDb2xvciA9IENPTE9SUy5pbmNsdWRlcyhjb2xvcik7XG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHZhciBzdHlsZXMgPSBldWlUZXh0Q29sb3JTdHlsZXMoZXVpVGhlbWUpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlUZXh0Q29sb3IsIGlzTmFtZWRDb2xvciA/IHN0eWxlc1tjb2xvcl0gOiBzdHlsZXMuY3VzdG9tQ29sb3JdOyAvLyBXZSdyZSBjaGVja2luZyBpZiBpcyBhIGN1c3RvbSBjb2xvci5cbiAgLy8gSWYgaXQgaXMgYSBjdXN0b20gY29sb3Igd2Ugc2V0IHRoZSBgY29sb3JgIG9mIHRoZSBgLmV1aVRleHRDb2xvcmAgZGl2IHRvIHRoYXQgY3VzdG9tIGNvbG9yLlxuICAvLyBUaGlzIHdheSB0aGUgY2hpbGRyZW4gdGV4dCBlbGVtZW50cyBjYW4gYGluaGVyaXRgIHRoYXQgY29sb3IgYW5kIGJvcmRlciBhbmQgYmFja2dyb3VuZHMgY2FuIGdldCB0aGF0IGBjdXJyZW50Q29sb3JgLlxuXG4gIHZhciBldWlUZXh0U3R5bGUgPSAhaXNOYW1lZENvbG9yID8gX29iamVjdFNwcmVhZCh7XG4gICAgY29sb3I6IGNvbG9yXG4gIH0sIHN0eWxlKSA6IF9vYmplY3RTcHJlYWQoe30sIHN0eWxlKTtcblxuICB2YXIgcHJvcHMgPSBfb2JqZWN0U3ByZWFkKHtcbiAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICBzdHlsZTogZXVpVGV4dFN0eWxlXG4gIH0sIHJlc3QpO1xuXG4gIGlmICggLyojX19QVVJFX18qL2lzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSAmJiBjbG9uZUVsZW1lbnQpIHtcbiAgICB2YXIgY2hpbGRyZW5TdHlsZSA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgY2hpbGRyZW4ucHJvcHMuc3R5bGUpLCBldWlUZXh0U3R5bGUpO1xuXG4gICAgcmV0dXJuIGNsb25lRWxlbWVudFdpdGhDc3MoY2hpbGRyZW4sIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgcHJvcHMpLCB7fSwge1xuICAgICAgc3R5bGU6IGNoaWxkcmVuU3R5bGVcbiAgICB9KSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIENvbXBvbmVudCA9IGNvbXBvbmVudDtcbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChDb21wb25lbnQsIHByb3BzLCBjaGlsZHJlbik7XG4gIH1cbn07XG5FdWlUZXh0Q29sb3IucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICAgKiBBbnkgb2Ygb3VyIG5hbWVkIGNvbG9ycyBvciBhIGBoZXhgLCBgcmdiYCBvciBgcmdiYWAgdmFsdWUuXG4gICAgICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkXSksXG5cbiAgLyoqXG4gICAgICAgKiBEZXRlcm1pbmVzIHRoZSByb290IGVsZW1lbnRcbiAgICAgICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5vbmVPZihbXCJkaXZcIiwgXCJzcGFuXCJdKSxcblxuICAvKipcbiAgICAgICAqIEFwcGxpZXMgdGV4dCBzdHlsaW5nIHRvIHRoZSBjaGlsZCBlbGVtZW50IGluc3RlYWQgb2YgcmVuZGVyaW5nIGEgcGFyZW50IHdyYXBwZXIgYHNwYW5gL2BkaXZgLlxuICAgICAgICogQ2FuIG9ubHkgYmUgdXNlZCB3aGVuIHdyYXBwaW5nIGEgKnNpbmdsZSogY2hpbGQgZWxlbWVudC90YWcsIGFuZCBub3QgcmF3IHRleHQuXG4gICAgICAgKi9cbiAgY2xvbmVFbGVtZW50OiBQcm9wVHlwZXMuYm9vbFxufTsiLCAiZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuXG52YXIgX3JlZiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCJ1YWNqYzUtaW5oZXJpdFwiLFxuICBzdHlsZXM6IFwiY29sb3I6aW5oZXJpdDtsYWJlbDppbmhlcml0O1wiXG59IDoge1xuICBuYW1lOiBcInVhY2pjNS1pbmhlcml0XCIsXG4gIHN0eWxlczogXCJjb2xvcjppbmhlcml0O2xhYmVsOmluaGVyaXQ7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcblxuZXhwb3J0IHZhciBldWlUZXh0Q29sb3JTdHlsZXMgPSBmdW5jdGlvbiBldWlUZXh0Q29sb3JTdHlsZXMoX3JlZjIpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZjIuZXVpVGhlbWU7XG4gIHJldHVybiB7XG4gICAgZXVpVGV4dENvbG9yOiAvKiNfX1BVUkVfXyovY3NzKFwiO2xhYmVsOmV1aVRleHRDb2xvcjtcIiksXG4gICAgZGVmYXVsdDogLyojX19QVVJFX18qL2NzcyhcImNvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMudGV4dCwgXCI7O2xhYmVsOmRlZmF1bHQ7XCIpLFxuICAgIHN1YmR1ZWQ6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLnN1YmR1ZWRUZXh0LCBcIjs7bGFiZWw6c3ViZHVlZDtcIiksXG4gICAgc3VjY2VzczogLyojX19QVVJFX18qL2NzcyhcImNvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMuc3VjY2Vzc1RleHQsIFwiOztsYWJlbDpzdWNjZXNzO1wiKSxcbiAgICBhY2NlbnQ6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLmFjY2VudFRleHQsIFwiOztsYWJlbDphY2NlbnQ7XCIpLFxuICAgIGRhbmdlcjogLyojX19QVVJFX18qL2NzcyhcImNvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMuZGFuZ2VyVGV4dCwgXCI7O2xhYmVsOmRhbmdlcjtcIiksXG4gICAgd2FybmluZzogLyojX19QVVJFX18qL2NzcyhcImNvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMud2FybmluZ1RleHQsIFwiOztsYWJlbDp3YXJuaW5nO1wiKSxcbiAgICBnaG9zdDogLyojX19QVVJFX18qL2NzcyhcImNvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMuZ2hvc3QsIFwiIWltcG9ydGFudDs7bGFiZWw6Z2hvc3Q7XCIpLFxuICAgIGluaGVyaXQ6IF9yZWYsXG4gICAgY3VzdG9tQ29sb3I6IC8qI19fUFVSRV9fKi9jc3MoXCI7bGFiZWw6Y3VzdG9tQ29sb3I7XCIpIC8vIEhhbmRsZWQgYnkgYHN0eWxlYCB0YWcgLSB0aGlzIGlzIGp1c3QgaGVyZSBmb3IgYSBjbGFzc05hbWUgaG9va1xuXG4gIH07XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJ0ZXh0QWxpZ25cIiwgXCJjbG9uZUVsZW1lbnRcIl07XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBpc1ZhbGlkRWxlbWVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IGNsb25lRWxlbWVudFdpdGhDc3MgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90aGVtZS9jbG9uZV9lbGVtZW50JztcbmltcG9ydCB7IGV1aVRleHRBbGlnblN0eWxlcyB9IGZyb20gJy4vdGV4dF9hbGlnbi5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgQUxJR05NRU5UUyA9IFsnbGVmdCcsICdyaWdodCcsICdjZW50ZXInXTtcbmV4cG9ydCB2YXIgRXVpVGV4dEFsaWduID0gZnVuY3Rpb24gRXVpVGV4dEFsaWduKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIF9yZWYkdGV4dEFsaWduID0gX3JlZi50ZXh0QWxpZ24sXG4gICAgICB0ZXh0QWxpZ24gPSBfcmVmJHRleHRBbGlnbiA9PT0gdm9pZCAwID8gJ2xlZnQnIDogX3JlZiR0ZXh0QWxpZ24sXG4gICAgICBfcmVmJGNsb25lRWxlbWVudCA9IF9yZWYuY2xvbmVFbGVtZW50LFxuICAgICAgY2xvbmVFbGVtZW50ID0gX3JlZiRjbG9uZUVsZW1lbnQgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRjbG9uZUVsZW1lbnQsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIHN0eWxlcyA9IGV1aVRleHRBbGlnblN0eWxlcygpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlUZXh0QWxpZ24sIHN0eWxlc1t0ZXh0QWxpZ25dXTtcblxuICB2YXIgcHJvcHMgPSBfb2JqZWN0U3ByZWFkKHtcbiAgICBjc3M6IGNzc1N0eWxlc1xuICB9LCByZXN0KTtcblxuICBpZiAoIC8qI19fUFVSRV9fKi9pc1ZhbGlkRWxlbWVudChjaGlsZHJlbikgJiYgY2xvbmVFbGVtZW50KSB7XG4gICAgcmV0dXJuIGNsb25lRWxlbWVudFdpdGhDc3MoY2hpbGRyZW4sIHByb3BzKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCBwcm9wcywgY2hpbGRyZW4pO1xuICB9XG59O1xuRXVpVGV4dEFsaWduLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICB0ZXh0QWxpZ246IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICAgKiBBcHBsaWVzIHRleHQgc3R5bGluZyB0byB0aGUgY2hpbGQgZWxlbWVudCBpbnN0ZWFkIG9mIHJlbmRlcmluZyBhIHBhcmVudCB3cmFwcGVyIGBkaXZgLlxuICAgICAgICogQ2FuIG9ubHkgYmUgdXNlZCB3aGVuIHdyYXBwaW5nIGEgKnNpbmdsZSogY2hpbGQgZWxlbWVudC90YWcsIGFuZCBub3QgcmF3IHRleHQuXG4gICAgICAgKi9cbiAgY2xvbmVFbGVtZW50OiBQcm9wVHlwZXMuYm9vbFxufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGxvZ2ljYWxUZXh0QWxpZ25DU1MgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5leHBvcnQgdmFyIGV1aVRleHRBbGlnblN0eWxlcyA9IGZ1bmN0aW9uIGV1aVRleHRBbGlnblN0eWxlcygpIHtcbiAgcmV0dXJuIHtcbiAgICBldWlUZXh0QWxpZ246IC8qI19fUFVSRV9fKi9jc3MoXCI7bGFiZWw6ZXVpVGV4dEFsaWduO1wiKSxcbiAgICBsZWZ0OiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxUZXh0QWxpZ25DU1MoJ2xlZnQnKSwgXCI7O2xhYmVsOmxlZnQ7XCIpLFxuICAgIHJpZ2h0OiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxUZXh0QWxpZ25DU1MoJ3JpZ2h0JyksIFwiOztsYWJlbDpyaWdodDtcIiksXG4gICAgY2VudGVyOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxUZXh0QWxpZ25DU1MoJ2NlbnRlcicpLCBcIjs7bGFiZWw6Y2VudGVyO1wiKVxuICB9O1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiaWNvblR5cGVcIiwgXCJpY29uU2lkZVwiLCBcImljb25TaXplXCIsIFwiY29sb3JcIiwgXCJzaXplXCIsIFwiZmx1c2hcIiwgXCJpc0Rpc2FibGVkXCIsIFwiZGlzYWJsZWRcIiwgXCJpc0xvYWRpbmdcIiwgXCJocmVmXCIsIFwidGFyZ2V0XCIsIFwicmVsXCIsIFwidHlwZVwiLCBcImJ1dHRvblJlZlwiLCBcImNvbnRlbnRQcm9wc1wiLCBcInRleHRQcm9wc1wiLCBcImlzU2VsZWN0ZWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGtleXNPZiB9IGZyb20gJy4uLy4uL2NvbW1vbic7XG5pbXBvcnQgeyBnZXRTZWN1cmVSZWxGb3JUYXJnZXQgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFdWlCdXR0b25Db250ZW50RGVwcmVjYXRlZCBhcyBFdWlCdXR0b25Db250ZW50IH0gZnJvbSAnLi4vX2J1dHRvbl9jb250ZW50X2RlcHJlY2F0ZWQnO1xuaW1wb3J0IHsgdmFsaWRhdGVIcmVmIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvc2VjdXJpdHkvaHJlZl92YWxpZGF0b3InO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBjb2xvclRvQ2xhc3NOYW1lTWFwID0ge1xuICBwcmltYXJ5OiAnZXVpQnV0dG9uRW1wdHktLXByaW1hcnknLFxuICBkYW5nZXI6ICdldWlCdXR0b25FbXB0eS0tZGFuZ2VyJyxcbiAgdGV4dDogJ2V1aUJ1dHRvbkVtcHR5LS10ZXh0JyxcbiAgZ2hvc3Q6ICdldWlCdXR0b25FbXB0eS0tZ2hvc3QnLFxuICBzdWNjZXNzOiAnZXVpQnV0dG9uRW1wdHktLXN1Y2Nlc3MnLFxuICB3YXJuaW5nOiAnZXVpQnV0dG9uRW1wdHktLXdhcm5pbmcnXG59O1xuZXhwb3J0IHZhciBDT0xPUlMgPSBrZXlzT2YoY29sb3JUb0NsYXNzTmFtZU1hcCk7XG52YXIgc2l6ZVRvQ2xhc3NOYW1lTWFwID0ge1xuICB4czogJ2V1aUJ1dHRvbkVtcHR5LS14U21hbGwnLFxuICBzOiAnZXVpQnV0dG9uRW1wdHktLXNtYWxsJyxcbiAgbTogbnVsbFxufTtcbmV4cG9ydCB2YXIgU0laRVMgPSBrZXlzT2Yoc2l6ZVRvQ2xhc3NOYW1lTWFwKTtcbnZhciBmbHVzaFR5cGVUb0NsYXNzTmFtZU1hcCA9IHtcbiAgbGVmdDogJ2V1aUJ1dHRvbkVtcHR5LS1mbHVzaExlZnQnLFxuICByaWdodDogJ2V1aUJ1dHRvbkVtcHR5LS1mbHVzaFJpZ2h0JyxcbiAgYm90aDogJ2V1aUJ1dHRvbkVtcHR5LS1mbHVzaEJvdGgnXG59O1xuZXhwb3J0IHZhciBGTFVTSF9UWVBFUyA9IGtleXNPZihmbHVzaFR5cGVUb0NsYXNzTmFtZU1hcCk7XG4vKipcbiAqIEV4dGVuZHMgRXVpQnV0dG9uQ29udGVudFByb3BzIHdoaWNoIHByb3ZpZGVzXG4gKiBgaWNvblR5cGVgLCBgaWNvblNpZGVgLCBhbmQgYHRleHRQcm9wc2BcbiAqL1xuXG5leHBvcnQgdmFyIEV1aUJ1dHRvbkVtcHR5ID0gZnVuY3Rpb24gRXVpQnV0dG9uRW1wdHkoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBpY29uVHlwZSA9IF9yZWYuaWNvblR5cGUsXG4gICAgICBfcmVmJGljb25TaWRlID0gX3JlZi5pY29uU2lkZSxcbiAgICAgIGljb25TaWRlID0gX3JlZiRpY29uU2lkZSA9PT0gdm9pZCAwID8gJ2xlZnQnIDogX3JlZiRpY29uU2lkZSxcbiAgICAgIF9yZWYkaWNvblNpemUgPSBfcmVmLmljb25TaXplLFxuICAgICAgaWNvblNpemUgPSBfcmVmJGljb25TaXplID09PSB2b2lkIDAgPyAnbScgOiBfcmVmJGljb25TaXplLFxuICAgICAgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdwcmltYXJ5JyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAnbScgOiBfcmVmJHNpemUsXG4gICAgICBmbHVzaCA9IF9yZWYuZmx1c2gsXG4gICAgICBfaXNEaXNhYmxlZCA9IF9yZWYuaXNEaXNhYmxlZCxcbiAgICAgIF9kaXNhYmxlZCA9IF9yZWYuZGlzYWJsZWQsXG4gICAgICBpc0xvYWRpbmcgPSBfcmVmLmlzTG9hZGluZyxcbiAgICAgIGhyZWYgPSBfcmVmLmhyZWYsXG4gICAgICB0YXJnZXQgPSBfcmVmLnRhcmdldCxcbiAgICAgIHJlbCA9IF9yZWYucmVsLFxuICAgICAgX3JlZiR0eXBlID0gX3JlZi50eXBlLFxuICAgICAgdHlwZSA9IF9yZWYkdHlwZSA9PT0gdm9pZCAwID8gJ2J1dHRvbicgOiBfcmVmJHR5cGUsXG4gICAgICBidXR0b25SZWYgPSBfcmVmLmJ1dHRvblJlZixcbiAgICAgIGNvbnRlbnRQcm9wcyA9IF9yZWYuY29udGVudFByb3BzLFxuICAgICAgdGV4dFByb3BzID0gX3JlZi50ZXh0UHJvcHMsXG4gICAgICBpc1NlbGVjdGVkID0gX3JlZi5pc1NlbGVjdGVkLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBpc0hyZWZWYWxpZCA9ICFocmVmIHx8IHZhbGlkYXRlSHJlZihocmVmKTtcbiAgdmFyIGRpc2FibGVkID0gX2Rpc2FibGVkIHx8ICFpc0hyZWZWYWxpZDtcbiAgdmFyIGlzRGlzYWJsZWQgPSBfaXNEaXNhYmxlZCB8fCAhaXNIcmVmVmFsaWQ7IC8vIElmIGluIHRoZSBsb2FkaW5nIHN0YXRlLCBmb3JjZSBkaXNhYmxlZCB0byB0cnVlXG5cbiAgdmFyIGJ1dHRvbklzRGlzYWJsZWQgPSBpc0xvYWRpbmcgfHwgaXNEaXNhYmxlZCB8fCBkaXNhYmxlZDtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlCdXR0b25FbXB0eScsIGNvbG9yVG9DbGFzc05hbWVNYXBbY29sb3JdLCBzaXplID8gc2l6ZVRvQ2xhc3NOYW1lTWFwW3NpemVdIDogbnVsbCwgZmx1c2ggPyBmbHVzaFR5cGVUb0NsYXNzTmFtZU1hcFtmbHVzaF0gOiBudWxsLCB7XG4gICAgJ2V1aUJ1dHRvbkVtcHR5LWlzRGlzYWJsZWQnOiBidXR0b25Jc0Rpc2FibGVkXG4gIH0sIGNsYXNzTmFtZSk7XG4gIHZhciBjb250ZW50Q2xhc3NOYW1lcyA9IGNsYXNzTmFtZXMoJ2V1aUJ1dHRvbkVtcHR5X19jb250ZW50JywgY29udGVudFByb3BzICYmIGNvbnRlbnRQcm9wcy5jbGFzc05hbWUpO1xuICB2YXIgdGV4dENsYXNzTmFtZXMgPSBjbGFzc05hbWVzKCdldWlCdXR0b25FbXB0eV9fdGV4dCcsIHRleHRQcm9wcyAmJiB0ZXh0UHJvcHMuY2xhc3NOYW1lKTtcblxuICB2YXIgaW5uZXJOb2RlID0gX19fRW1vdGlvbkpTWChFdWlCdXR0b25Db250ZW50LCBfZXh0ZW5kcyh7XG4gICAgaXNMb2FkaW5nOiBpc0xvYWRpbmcsXG4gICAgaWNvblR5cGU6IGljb25UeXBlLFxuICAgIGljb25TaWRlOiBpY29uU2lkZSxcbiAgICBpY29uU2l6ZTogc2l6ZSA9PT0gJ3hzJyA/ICdzJyA6IGljb25TaXplLFxuICAgIHRleHRQcm9wczogX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCB0ZXh0UHJvcHMpLCB7fSwge1xuICAgICAgY2xhc3NOYW1lOiB0ZXh0Q2xhc3NOYW1lc1xuICAgIH0pXG4gIH0sIGNvbnRlbnRQcm9wcywge1xuICAgIC8vIGNsYXNzTmFtZSBoYXMgdG8gY29tZSBsYXN0IHRvIG92ZXJyaWRlIGNvbnRlbnRQcm9wcy5jbGFzc05hbWVcbiAgICBjbGFzc05hbWU6IGNvbnRlbnRDbGFzc05hbWVzXG4gIH0pLCBjaGlsZHJlbik7IC8vIDxhPiBlbGVtZW50cyBkb24ndCByZXNwZWN0IHRoZSBgZGlzYWJsZWRgIGF0dHJpYnV0ZS4gU28gaWYgd2UncmUgZGlzYWJsZWQsIHdlJ2xsIGp1c3QgcHJldGVuZFxuICAvLyB0aGlzIGlzIGEgYnV0dG9uIGFuZCBwaWdneWJhY2sgb2ZmIGl0cyBkaXNhYmxlZCBzdHlsZXMuXG5cblxuICBpZiAoaHJlZiAmJiAhYnV0dG9uSXNEaXNhYmxlZCkge1xuICAgIHZhciBzZWN1cmVSZWwgPSBnZXRTZWN1cmVSZWxGb3JUYXJnZXQoe1xuICAgICAgaHJlZjogaHJlZixcbiAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgcmVsOiByZWxcbiAgICB9KTtcbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImFcIiwgX2V4dGVuZHMoe1xuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgaHJlZjogaHJlZixcbiAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgcmVsOiBzZWN1cmVSZWwsXG4gICAgICByZWY6IGJ1dHRvblJlZlxuICAgIH0sIHJlc3QpLCBpbm5lck5vZGUpO1xuICB9XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJidXR0b25cIiwgX2V4dGVuZHMoe1xuICAgIGRpc2FibGVkOiBidXR0b25Jc0Rpc2FibGVkLFxuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICB0eXBlOiB0eXBlLFxuICAgIHJlZjogYnV0dG9uUmVmLFxuICAgIFwiYXJpYS1wcmVzc2VkXCI6IGlzU2VsZWN0ZWRcbiAgfSwgcmVzdCksIGlubmVyTm9kZSk7XG59O1xuRXVpQnV0dG9uRW1wdHkucHJvcFR5cGVzID0ge1xuICBocmVmOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICAgKiBBbnkgb2Ygb3VyIG5hbWVkIGNvbG9yc1xuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIEFueSBvZiBvdXIgbmFtZWQgY29sb3JzXG4gICAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMub25lT2YoW1wicHJpbWFyeVwiLCBcImRhbmdlclwiLCBcInRleHRcIiwgXCJnaG9zdFwiLCBcInN1Y2Nlc3NcIiwgXCJ3YXJuaW5nXCJdKSxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mKFtcInhzXCIsIFwic1wiLCBcIm1cIl0pLFxuXG4gIC8qKlxuICAgICAqIEVuc3VyZSB0aGUgdGV4dCBvZiB0aGUgYnV0dG9uIHNpdHMgZmx1c2ggdG8gdGhlIGxlZnQsIHJpZ2h0LCBvciBib3RoIHNpZGVzIG9mIGl0cyBjb250YWluZXJcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBFbnN1cmUgdGhlIHRleHQgb2YgdGhlIGJ1dHRvbiBzaXRzIGZsdXNoIHRvIHRoZSBsZWZ0LCByaWdodCwgb3IgYm90aCBzaWRlcyBvZiBpdHMgY29udGFpbmVyXG4gICAgICovXG4gIGZsdXNoOiBQcm9wVHlwZXMub25lT2YoW1wibGVmdFwiLCBcInJpZ2h0XCIsIFwiYm90aFwiXSksXG5cbiAgLyoqXG4gICAgICogYGRpc2FibGVkYCBpcyBhbHNvIGFsbG93ZWRcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBgZGlzYWJsZWRgIGlzIGFsc28gYWxsb3dlZFxuICAgICAqL1xuICBpc0Rpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBGb3JjZSBkaXNhYmxlcyB0aGUgYnV0dG9uIGFuZCBjaGFuZ2VzIHRoZSBpY29uIHRvIGEgbG9hZGluZyBzcGlubmVyXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogRm9yY2UgZGlzYWJsZXMgdGhlIGJ1dHRvbiBhbmQgY2hhbmdlcyB0aGUgaWNvbiB0byBhIGxvYWRpbmcgc3Bpbm5lclxuICAgICAqL1xuICBpc0xvYWRpbmc6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIEFwcGxpZXMgdGhlIGJvb2xlYW4gc3RhdGUgYXMgdGhlIGBhcmlhLXByZXNzZWRgIHByb3BlcnR5IHRvIGNyZWF0ZSBhIHRvZ2dsZSBidXR0b24uXG4gICAgICogKk9ubHkgdXNlIHdoZW4gdGhlIHJlYWRhYmxlIHRleHQgZG9lcyBub3QgY2hhbmdlIGJldHdlZW4gc3RhdGVzLipcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBBcHBsaWVzIHRoZSBib29sZWFuIHN0YXRlIGFzIHRoZSBgYXJpYS1wcmVzc2VkYCBwcm9wZXJ0eSB0byBjcmVhdGUgYSB0b2dnbGUgYnV0dG9uLlxuICAgICAqICpPbmx5IHVzZSB3aGVuIHRoZSByZWFkYWJsZSB0ZXh0IGRvZXMgbm90IGNoYW5nZSBiZXR3ZWVuIHN0YXRlcy4qXG4gICAgICovXG4gIGlzU2VsZWN0ZWQ6IFByb3BUeXBlcy5ib29sLFxuICB0YXJnZXQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHJlbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgdHlwZTogUHJvcFR5cGVzLm9uZU9mKFtcImJ1dHRvblwiLCBcInN1Ym1pdFwiXSksXG4gIGJ1dHRvblJlZjogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBPYmplY3Qgb2YgcHJvcHMgcGFzc2VkIHRvIHRoZSA8c3Bhbi8+IHdyYXBwaW5nIHRoZSBidXR0b24ncyBjb250ZW50XG4gICAgICovXG4gIGNvbnRlbnRQcm9wczogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBBbnkgYHR5cGVgIGFjY2VwdGVkIGJ5IEV1aUljb25cbiAgICAgKi9cbiAgaWNvblR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhY2Nlc3NpYmlsaXR5XCIsIFwiYWRkRGF0YUFwcFwiLCBcImFkdmFuY2VkU2V0dGluZ3NBcHBcIiwgXCJhZ2VudEFwcFwiLCBcImFnZ3JlZ2F0ZVwiLCBcImFsZXJ0XCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbG9ja1wiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQUNpcmNsZUZpbGxlZFwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRvY3VtZW50XCIsIFwiZG9jdW1lbnRFZGl0XCIsIFwiZG9jdW1lbnRhdGlvblwiLCBcImRvY3VtZW50c1wiLCBcImRvdFwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJleGl0XCIsIFwiZXhwYW5kXCIsIFwiZXhwYW5kTWluaVwiLCBcImV4cG9ydEFjdGlvblwiLCBcImV5ZVwiLCBcImV5ZUNsb3NlZFwiLCBcImZhY2VIYXBweVwiLCBcImZhY2VOZXV0cmFsXCIsIFwiZmFjZVNhZFwiLCBcImZpbGViZWF0QXBwXCIsIFwiZmlsdGVyXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhDbG9zZVwiLCBcImluZGV4RWRpdFwiLCBcImluZGV4Rmx1c2hcIiwgXCJpbmRleE1hbmFnZW1lbnRBcHBcIiwgXCJpbmRleE1hcHBpbmdcIiwgXCJpbmRleE9wZW5cIiwgXCJpbmRleFBhdHRlcm5BcHBcIiwgXCJpbmRleFJvbGx1cEFwcFwiLCBcImluZGV4UnVudGltZVwiLCBcImluZGV4U2V0dGluZ3NcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibmFtZXNwYWNlXCIsIFwibmVzdGVkXCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZWxpbmVBcHBcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzQXBwXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpb25BcHBcIiwgXCJ0aW1lUmVmcmVzaFwiLCBcInRpbWVzbGlkZXJcIiwgXCJ0cmFpbmluZ1wiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZF0pLFxuXG4gIC8qKlxuICAgICAqIENhbiBvbmx5IGJlIG9uZSBzaWRlIGBsZWZ0YCBvciBgcmlnaHRgXG4gICAgICovXG4gIGljb25TaWRlOiBQcm9wVHlwZXMub25lT2YoW1wibGVmdFwiLCBcInJpZ2h0XCJdKSxcblxuICAvKipcbiAgICAgKiBPYmplY3Qgb2YgcHJvcHMgcGFzc2VkIHRvIHRoZSA8c3Bhbi8+IHdyYXBwaW5nIHRoZSBjb250ZW50J3MgdGV4dCAob25seSBpZiB0aGUgY2hpbGRyZW4gaXMgYSBgc3RyaW5nYClcbiAgICAgKiBJdCBkb2Vzbid0IGFwcGx5IHRvIHRoZSBpY29uLlxuICAgICAqL1xuICB0ZXh0UHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICByZWY6IFByb3BUeXBlcy5hbnksXG4gICAgXCJkYXRhLXRleHRcIjogUHJvcFR5cGVzLnN0cmluZ1xuICB9KSxcbiAgaWNvblNpemU6IFByb3BUeXBlcy5vbmVPZihbXCJzXCIsIFwibVwiXSksXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZ1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcImljb25UeXBlXCIsIFwiaWNvblNpemVcIiwgXCJjb2xvclwiLCBcImlzRGlzYWJsZWRcIiwgXCJkaXNhYmxlZFwiLCBcImhyZWZcIiwgXCJ0eXBlXCIsIFwiZGlzcGxheVwiLCBcInRhcmdldFwiLCBcInJlbFwiLCBcInNpemVcIiwgXCJidXR0b25SZWZcIiwgXCJpc1NlbGVjdGVkXCIsIFwiaXNMb2FkaW5nXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgZ2V0U2VjdXJlUmVsRm9yVGFyZ2V0IH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsga2V5c09mIH0gZnJvbSAnLi4vLi4vY29tbW9uJztcbmltcG9ydCB7IEV1aUljb24gfSBmcm9tICcuLi8uLi9pY29uJztcbmltcG9ydCB7IEV1aUxvYWRpbmdTcGlubmVyIH0gZnJvbSAnLi4vLi4vbG9hZGluZyc7XG5pbXBvcnQgeyB2YWxpZGF0ZUhyZWYgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9zZWN1cml0eS9ocmVmX3ZhbGlkYXRvcic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIGRpc3BsYXlUb0NsYXNzTmFtZU1hcCA9IHtcbiAgYmFzZTogbnVsbCxcbiAgZW1wdHk6ICdldWlCdXR0b25JY29uLS1lbXB0eScsXG4gIGZpbGw6ICdldWlCdXR0b25JY29uLS1maWxsJ1xufTtcbmV4cG9ydCB2YXIgRElTUExBWVMgPSBrZXlzT2YoZGlzcGxheVRvQ2xhc3NOYW1lTWFwKTtcbnZhciBjb2xvclRvQ2xhc3NOYW1lTWFwID0ge1xuICBhY2NlbnQ6ICdldWlCdXR0b25JY29uLS1hY2NlbnQnLFxuICBkYW5nZXI6ICdldWlCdXR0b25JY29uLS1kYW5nZXInLFxuICBnaG9zdDogJ2V1aUJ1dHRvbkljb24tLWdob3N0JyxcbiAgcHJpbWFyeTogJ2V1aUJ1dHRvbkljb24tLXByaW1hcnknLFxuICBzdWNjZXNzOiAnZXVpQnV0dG9uSWNvbi0tc3VjY2VzcycsXG4gIHRleHQ6ICdldWlCdXR0b25JY29uLS10ZXh0JyxcbiAgd2FybmluZzogJ2V1aUJ1dHRvbkljb24tLXdhcm5pbmcnXG59O1xuZXhwb3J0IHZhciBDT0xPUlMgPSBrZXlzT2YoY29sb3JUb0NsYXNzTmFtZU1hcCk7XG52YXIgc2l6ZVRvQ2xhc3NOYW1lTWFwID0ge1xuICB4czogJ2V1aUJ1dHRvbkljb24tLXhTbWFsbCcsXG4gIHM6ICdldWlCdXR0b25JY29uLS1zbWFsbCcsXG4gIG06ICdldWlCdXR0b25JY29uLS1tZWRpdW0nXG59O1xuZXhwb3J0IHZhciBTSVpFUyA9IGtleXNPZihzaXplVG9DbGFzc05hbWVNYXApO1xuZXhwb3J0IHZhciBFdWlCdXR0b25JY29uID0gZnVuY3Rpb24gRXVpQnV0dG9uSWNvbihfcmVmKSB7XG4gIHZhciBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIGljb25UeXBlID0gX3JlZi5pY29uVHlwZSxcbiAgICAgIF9yZWYkaWNvblNpemUgPSBfcmVmLmljb25TaXplLFxuICAgICAgaWNvblNpemUgPSBfcmVmJGljb25TaXplID09PSB2b2lkIDAgPyAnbScgOiBfcmVmJGljb25TaXplLFxuICAgICAgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdwcmltYXJ5JyA6IF9yZWYkY29sb3IsXG4gICAgICBfaXNEaXNhYmxlZCA9IF9yZWYuaXNEaXNhYmxlZCxcbiAgICAgIGRpc2FibGVkID0gX3JlZi5kaXNhYmxlZCxcbiAgICAgIGhyZWYgPSBfcmVmLmhyZWYsXG4gICAgICBfcmVmJHR5cGUgPSBfcmVmLnR5cGUsXG4gICAgICB0eXBlID0gX3JlZiR0eXBlID09PSB2b2lkIDAgPyAnYnV0dG9uJyA6IF9yZWYkdHlwZSxcbiAgICAgIF9yZWYkZGlzcGxheSA9IF9yZWYuZGlzcGxheSxcbiAgICAgIGRpc3BsYXkgPSBfcmVmJGRpc3BsYXkgPT09IHZvaWQgMCA/ICdlbXB0eScgOiBfcmVmJGRpc3BsYXksXG4gICAgICB0YXJnZXQgPSBfcmVmLnRhcmdldCxcbiAgICAgIHJlbCA9IF9yZWYucmVsLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gJ3hzJyA6IF9yZWYkc2l6ZSxcbiAgICAgIGJ1dHRvblJlZiA9IF9yZWYuYnV0dG9uUmVmLFxuICAgICAgaXNTZWxlY3RlZCA9IF9yZWYuaXNTZWxlY3RlZCxcbiAgICAgIGlzTG9hZGluZyA9IF9yZWYuaXNMb2FkaW5nLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBpc0hyZWZWYWxpZCA9ICFocmVmIHx8IHZhbGlkYXRlSHJlZihocmVmKTtcbiAgdmFyIGlzRGlzYWJsZWQgPSBfaXNEaXNhYmxlZCB8fCBkaXNhYmxlZCB8fCAhaXNIcmVmVmFsaWQgfHwgaXNMb2FkaW5nO1xuICB2YXIgYXJpYUhpZGRlbiA9IHJlc3RbJ2FyaWEtaGlkZGVuJ107XG4gIHZhciBpc0FyaWFIaWRkZW4gPSBhcmlhSGlkZGVuID09PSAndHJ1ZScgfHwgYXJpYUhpZGRlbiA9PT0gdHJ1ZTtcblxuICBpZiAoIXJlc3RbJ2FyaWEtbGFiZWwnXSAmJiAhcmVzdFsnYXJpYS1sYWJlbGxlZGJ5J10gJiYgIWlzQXJpYUhpZGRlbikge1xuICAgIGNvbnNvbGUud2FybihcIkV1aUJ1dHRvbkljb24gcmVxdWlyZXMgYXJpYS1sYWJlbCBvciBhcmlhLWxhYmVsbGVkYnkgdG8gYmUgc3BlY2lmaWVkIGJlY2F1c2UgaWNvbi1vbmx5XFxuICAgICAgYnV0dG9ucyBhcmUgc2NyZWVuLXJlYWRlci1pbmFjY2Vzc2libGUgd2l0aG91dCB0aGVtLlwiKTtcbiAgfVxuXG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpQnV0dG9uSWNvbicsIHtcbiAgICAnZXVpQnV0dG9uSWNvbi1pc0Rpc2FibGVkJzogaXNEaXNhYmxlZFxuICB9LCBjb2xvclRvQ2xhc3NOYW1lTWFwW2NvbG9yXSwgZGlzcGxheSAmJiBkaXNwbGF5VG9DbGFzc05hbWVNYXBbZGlzcGxheV0sIHNpemUgJiYgc2l6ZVRvQ2xhc3NOYW1lTWFwW3NpemVdLCBjbGFzc05hbWUpOyAvLyBBZGQgYW4gaWNvbiB0byB0aGUgYnV0dG9uIGlmIG9uZSBleGlzdHMuXG5cbiAgdmFyIGJ1dHRvbkljb247XG5cbiAgaWYgKGljb25UeXBlICYmICFpc0xvYWRpbmcpIHtcbiAgICBidXR0b25JY29uID0gX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgICBjbGFzc05hbWU6IFwiZXVpQnV0dG9uSWNvbl9faWNvblwiLFxuICAgICAgdHlwZTogaWNvblR5cGUsXG4gICAgICBzaXplOiBpY29uU2l6ZSxcbiAgICAgIFwiYXJpYS1oaWRkZW5cIjogXCJ0cnVlXCIsXG4gICAgICBjb2xvcjogXCJpbmhlcml0XCIgLy8gZm9yY2VzIHRoZSBpY29uIHRvIGluaGVyaXQgaXRzIHBhcmVudCBjb2xvclxuXG4gICAgfSk7XG4gIH0gLy8gYG9yaWdpbmFsYCBzaXplIGRvZXNuJ3QgZXhpc3QgaW4gYEV1aUxvYWRpbmdTcGlubmVyYFxuICAvLyB3aGVuIHRoZSBgaWNvblNpemVgIGlzIGBvcmlnaW5hbGAgd2UgZG9uJ3QgcGFzcyBhbnkgc2l6ZSB0byB0aGUgYEV1aUxvYWRpbmdTcGlubmVyYFxuICAvLyBzbyBpdCBnZXRzIHRoZSBkZWZhdWx0IHNpemVcblxuXG4gIHZhciBsb2FkaW5nU2l6ZSA9IGljb25TaXplID09PSAnb3JpZ2luYWwnID8gdW5kZWZpbmVkIDogaWNvblNpemU7XG5cbiAgaWYgKGljb25UeXBlICYmIGlzTG9hZGluZykge1xuICAgIGJ1dHRvbkljb24gPSBfX19FbW90aW9uSlNYKEV1aUxvYWRpbmdTcGlubmVyLCB7XG4gICAgICBzaXplOiBsb2FkaW5nU2l6ZVxuICAgIH0pO1xuICB9IC8vIDxhPiBlbGVtZW50cyBkb24ndCByZXNwZWN0IHRoZSBgZGlzYWJsZWRgIGF0dHJpYnV0ZS4gU28gaWYgd2UncmUgZGlzYWJsZWQsIHdlJ2xsIGp1c3QgcHJldGVuZFxuICAvLyB0aGlzIGlzIGEgYnV0dG9uIGFuZCBwaWdneWJhY2sgb2ZmIGl0cyBkaXNhYmxlZCBzdHlsZXMuXG5cblxuICBpZiAoaHJlZiAmJiAhaXNEaXNhYmxlZCkge1xuICAgIHZhciBzZWN1cmVSZWwgPSBnZXRTZWN1cmVSZWxGb3JUYXJnZXQoe1xuICAgICAgaHJlZjogaHJlZixcbiAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgcmVsOiByZWxcbiAgICB9KTtcbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImFcIiwgX2V4dGVuZHMoe1xuICAgICAgdGFiSW5kZXg6IGlzQXJpYUhpZGRlbiA/IC0xIDogdW5kZWZpbmVkLFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgaHJlZjogaHJlZixcbiAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgcmVsOiBzZWN1cmVSZWwsXG4gICAgICByZWY6IGJ1dHRvblJlZlxuICAgIH0sIHJlc3QpLCBidXR0b25JY29uKTtcbiAgfVxuXG4gIHZhciBidXR0b25UeXBlO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcImJ1dHRvblwiLCBfZXh0ZW5kcyh7XG4gICAgdGFiSW5kZXg6IGlzQXJpYUhpZGRlbiA/IC0xIDogdW5kZWZpbmVkLFxuICAgIGRpc2FibGVkOiBpc0Rpc2FibGVkLFxuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBcImFyaWEtcHJlc3NlZFwiOiBpc1NlbGVjdGVkLFxuICAgIHR5cGU6IHR5cGUsXG4gICAgcmVmOiBidXR0b25SZWZcbiAgfSwgcmVzdCksIGJ1dHRvbkljb24pO1xufTtcbkV1aUJ1dHRvbkljb24ucHJvcFR5cGVzID0ge1xuICB0eXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMub25lT2YoW1wic3VibWl0XCIsIFwicmVzZXRcIiwgXCJidXR0b25cIl0pXSksXG4gIGhyZWY6IFByb3BUeXBlcy5zdHJpbmcsXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICBpY29uVHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYWxlcnRcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhc3Rlcmlza1wiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJib2x0XCIsIFwiYm94ZXNIb3Jpem9udGFsXCIsIFwiYm94ZXNWZXJ0aWNhbFwiLCBcImJyYW5jaFwiLCBcImJyYW5jaFVzZXJcIiwgXCJicm9vbVwiLCBcImJydXNoXCIsIFwiYnVnXCIsIFwiYnVsbHNleWVcIiwgXCJjYWxlbmRhclwiLCBcImNhbnZhc0FwcFwiLCBcImNhc2VzQXBwXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsb2NrXCIsIFwiY2xvdWREcml6emxlXCIsIFwiY2xvdWRTdG9ybXlcIiwgXCJjbG91ZFN1bm55XCIsIFwiY2x1c3RlclwiLCBcImNvZGVBcHBcIiwgXCJjb2xvclwiLCBcImNvbXB1dGVcIiwgXCJjb25zb2xlXCIsIFwiY29uc29sZUFwcFwiLCBcImNvbnRhaW5lclwiLCBcImNvbnRpbnVpdHlBYm92ZVwiLCBcImNvbnRpbnVpdHlBYm92ZUJlbG93XCIsIFwiY29udGludWl0eUJlbG93XCIsIFwiY29udGludWl0eVdpdGhpblwiLCBcImNvbnRyb2xzSG9yaXpvbnRhbFwiLCBcImNvbnRyb2xzVmVydGljYWxcIiwgXCJjb3B5XCIsIFwiY29weUNsaXBib2FyZFwiLCBcImNyZWF0ZUFkdmFuY2VkSm9iXCIsIFwiY3JlYXRlTXVsdGlNZXRyaWNKb2JcIiwgXCJjcmVhdGVQb3B1bGF0aW9uSm9iXCIsIFwiY3JlYXRlU2luZ2xlTWV0cmljSm9iXCIsIFwiY3Jvc3NcIiwgXCJjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcFwiLCBcImNyb3NzSW5BQ2lyY2xlRmlsbGVkXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpc2NvdmVyQXBwXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG91YmxlQXJyb3dMZWZ0XCIsIFwiZG91YmxlQXJyb3dSaWdodFwiLCBcImRvd25sb2FkXCIsIFwiZWRpdG9yQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JBbGlnbkxlZnRcIiwgXCJlZGl0b3JBbGlnblJpZ2h0XCIsIFwiZWRpdG9yQm9sZFwiLCBcImVkaXRvckNoZWNrbGlzdFwiLCBcImVkaXRvckNvZGVCbG9ja1wiLCBcImVkaXRvckNvbW1lbnRcIiwgXCJlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbFwiLCBcImVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbFwiLCBcImVkaXRvckhlYWRpbmdcIiwgXCJlZGl0b3JJdGFsaWNcIiwgXCJlZGl0b3JJdGVtQWxpZ25Cb3R0b21cIiwgXCJlZGl0b3JJdGVtQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JJdGVtQWxpZ25MZWZ0XCIsIFwiZWRpdG9ySXRlbUFsaWduTWlkZGxlXCIsIFwiZWRpdG9ySXRlbUFsaWduUmlnaHRcIiwgXCJlZGl0b3JJdGVtQWxpZ25Ub3BcIiwgXCJlZGl0b3JMaW5rXCIsIFwiZWRpdG9yT3JkZXJlZExpc3RcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnRcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BMZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BSaWdodFwiLCBcImVkaXRvclJlZG9cIiwgXCJlZGl0b3JTdHJpa2VcIiwgXCJlZGl0b3JUYWJsZVwiLCBcImVkaXRvclVuZGVybGluZVwiLCBcImVkaXRvclVuZG9cIiwgXCJlZGl0b3JVbm9yZGVyZWRMaXN0XCIsIFwiZW1haWxcIiwgXCJlbXB0eVwiLCBcImVtc0FwcFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibW9iaWxlXCIsIFwibW9uaXRvcmluZ0FwcFwiLCBcIm1vb25cIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFwZXJDbGlwXCIsIFwicGFydGlhbFwiLCBcInBhdXNlXCIsIFwicGF5bWVudFwiLCBcInBlbmNpbFwiLCBcInBlcmNlbnRcIiwgXCJwaW5cIiwgXCJwaW5GaWxsZWRcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBsYXlcIiwgXCJwbGF5RmlsbGVkXCIsIFwicGx1c1wiLCBcInBsdXNJbkNpcmNsZVwiLCBcInBsdXNJbkNpcmNsZUZpbGxlZFwiLCBcInBvcG91dFwiLCBcInB1c2hcIiwgXCJxdWVzdGlvbkluQ2lyY2xlXCIsIFwicXVvdGVcIiwgXCJyZWNlbnRseVZpZXdlZEFwcFwiLCBcInJlZnJlc2hcIiwgXCJyZWdyZXNzaW9uSm9iXCIsIFwicmVwb3J0ZXJcIiwgXCJyZXBvcnRpbmdBcHBcIiwgXCJyZXR1cm5LZXlcIiwgXCJzYXZlXCIsIFwic2F2ZWRPYmplY3RzQXBwXCIsIFwic2NhbGVcIiwgXCJzZWFyY2hcIiwgXCJzZWFyY2hQcm9maWxlckFwcFwiLCBcInNlY3VyaXR5QW5hbHl0aWNzQXBwXCIsIFwic2VjdXJpdHlBcHBcIiwgXCJzZWN1cml0eVNpZ25hbFwiLCBcInNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWRcIiwgXCJzZWN1cml0eVNpZ25hbFJlc29sdmVkXCIsIFwic2Vzc2lvblZpZXdlclwiLCBcInNoYXJkXCIsIFwic2hhcmVcIiwgXCJzbm93Zmxha2VcIiwgXCJzb3J0RG93blwiLCBcInNvcnRMZWZ0XCIsIFwic29ydFJpZ2h0XCIsIFwic29ydFVwXCIsIFwic29ydGFibGVcIiwgXCJzcGFjZXNBcHBcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EZW5zZVZlY3RvclwiLCBcInRva2VuRWxlbWVudFwiLCBcInRva2VuRW51bVwiLCBcInRva2VuRW51bU1lbWJlclwiLCBcInRva2VuRXZlbnRcIiwgXCJ0b2tlbkV4Y2VwdGlvblwiLCBcInRva2VuRmllbGRcIiwgXCJ0b2tlbkZpbGVcIiwgXCJ0b2tlbkZsYXR0ZW5lZFwiLCBcInRva2VuRnVuY3Rpb25cIiwgXCJ0b2tlbkdlb1wiLCBcInRva2VuSGlzdG9ncmFtXCIsIFwidG9rZW5JbnRlcmZhY2VcIiwgXCJ0b2tlbklQXCIsIFwidG9rZW5Kb2luXCIsIFwidG9rZW5LZXlcIiwgXCJ0b2tlbktleXdvcmRcIiwgXCJ0b2tlbk1ldGhvZFwiLCBcInRva2VuTWV0cmljQ291bnRlclwiLCBcInRva2VuTWV0cmljR2F1Z2VcIiwgXCJ0b2tlbk1vZHVsZVwiLCBcInRva2VuTmFtZXNwYWNlXCIsIFwidG9rZW5OZXN0ZWRcIiwgXCJ0b2tlbk51bGxcIiwgXCJ0b2tlbk51bWJlclwiLCBcInRva2VuT2JqZWN0XCIsIFwidG9rZW5PcGVyYXRvclwiLCBcInRva2VuUGFja2FnZVwiLCBcInRva2VuUGFyYW1ldGVyXCIsIFwidG9rZW5QZXJjb2xhdG9yXCIsIFwidG9rZW5Qcm9wZXJ0eVwiLCBcInRva2VuUmFuZ2VcIiwgXCJ0b2tlblJhbmtGZWF0dXJlXCIsIFwidG9rZW5SYW5rRmVhdHVyZXNcIiwgXCJ0b2tlblJlcG9cIiwgXCJ0b2tlblNlYXJjaFR5cGVcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICAgKiBBbnkgb2YgdGhlIG5hbWVkIGNvbG9yIHBhbGV0dGUgb3B0aW9ucy5cbiAgICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcy5vbmVPZihbXCJwcmltYXJ5XCIsIFwiYWNjZW50XCIsIFwic3VjY2Vzc1wiLCBcIndhcm5pbmdcIiwgXCJkYW5nZXJcIiwgXCJnaG9zdFwiLCBcInRleHRcIl0pLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsbGVkYnlcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogT3ZlcmFsbCBzaXplIG9mIGJ1dHRvbi5cbiAgICAgKiBNYXRjaGVzIHRoZSBzaXplcyBvZiBvdGhlciBFdWlCdXR0b25zXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogT3ZlcmFsbCBzaXplIG9mIGJ1dHRvbi5cbiAgICAgKiBNYXRjaGVzIHRoZSBzaXplcyBvZiBvdGhlciBFdWlCdXR0b25zXG4gICAgICovXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZihbXCJ4c1wiLCBcInNcIiwgXCJtXCJdKSxcblxuICAvKipcbiAgICAgKiBTaXplIG9mIHRoZSBpY29uIG9ubHkuXG4gICAgICogVGhpcyB3aWxsIG5vdCBhZmZlY3QgdGhlIG92ZXJhbGwgc2l6ZSBvZiB0aGUgYnV0dG9uXG4gICAgICovXG4gIGljb25TaXplOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIEFwcGxpZXMgdGhlIGJvb2xlYW4gc3RhdGUgYXMgdGhlIGBhcmlhLXByZXNzZWRgIHByb3BlcnR5IHRvIGNyZWF0ZSBhIHRvZ2dsZSBidXR0b24uXG4gICAgICogKk9ubHkgdXNlIHdoZW4gdGhlIHJlYWRhYmxlIHRleHQgZG9lcyBub3QgY2hhbmdlIGJldHdlZW4gc3RhdGVzLipcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBBcHBsaWVzIHRoZSBib29sZWFuIHN0YXRlIGFzIHRoZSBgYXJpYS1wcmVzc2VkYCBwcm9wZXJ0eSB0byBjcmVhdGUgYSB0b2dnbGUgYnV0dG9uLlxuICAgICAqICpPbmx5IHVzZSB3aGVuIHRoZSByZWFkYWJsZSB0ZXh0IGRvZXMgbm90IGNoYW5nZSBiZXR3ZWVuIHN0YXRlcy4qXG4gICAgICovXG4gIGlzU2VsZWN0ZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIFNldHMgdGhlIGRpc3BsYXkgc3R5bGUgZm9yIG1hdGNoaW5nIG90aGVyIEV1aUJ1dHRvbiB0eXBlcy5cbiAgICAgKiBgYmFzZWAgaXMgZXF1aXZhbGVudCB0byBhIHR5cGljYWwgRXVpQnV0dG9uXG4gICAgICogYGZpbGxgIGlzIGVxdWl2YWxlbnQgdG8gYSBmaWxsZWQgRXVpQnV0dG9uXG4gICAgICogYGVtcHR5YCAoZGVmYXVsdCkgaXMgZXF1aXZhbGVudCB0byBhbiBFdWlCdXR0b25FbXB0eVxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIFNldHMgdGhlIGRpc3BsYXkgc3R5bGUgZm9yIG1hdGNoaW5nIG90aGVyIEV1aUJ1dHRvbiB0eXBlcy5cbiAgICAgKiBgYmFzZWAgaXMgZXF1aXZhbGVudCB0byBhIHR5cGljYWwgRXVpQnV0dG9uXG4gICAgICogYGZpbGxgIGlzIGVxdWl2YWxlbnQgdG8gYSBmaWxsZWQgRXVpQnV0dG9uXG4gICAgICogYGVtcHR5YCAoZGVmYXVsdCkgaXMgZXF1aXZhbGVudCB0byBhbiBFdWlCdXR0b25FbXB0eVxuICAgICAqL1xuICBkaXNwbGF5OiBQcm9wVHlwZXMub25lT2YoW1wiYmFzZVwiLCBcImVtcHR5XCIsIFwiZmlsbFwiXSksXG5cbiAgLyoqXG4gICAgICogRGlzYWJsZXMgdGhlIGJ1dHRvbiBhbmQgY2hhbmdlcyB0aGUgaWNvbiB0byBhIGxvYWRpbmcgc3Bpbm5lclxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIERpc2FibGVzIHRoZSBidXR0b24gYW5kIGNoYW5nZXMgdGhlIGljb24gdG8gYSBsb2FkaW5nIHNwaW5uZXJcbiAgICAgKi9cbiAgaXNMb2FkaW5nOiBQcm9wVHlwZXMuYm9vbCxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGJ1dHRvblJlZjogUHJvcFR5cGVzLmFueVxufTsiLCAiZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cblxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgeyB2YXIgX2kgPSBhcnIgPT0gbnVsbCA/IG51bGwgOiB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGFycltTeW1ib2wuaXRlcmF0b3JdIHx8IGFycltcIkBAaXRlcmF0b3JcIl07IGlmIChfaSA9PSBudWxsKSByZXR1cm47IHZhciBfYXJyID0gW107IHZhciBfbiA9IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIgX3MsIF9lOyB0cnkgeyBmb3IgKF9pID0gX2kuY2FsbChhcnIpOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7IF9hcnIucHVzaChfcy52YWx1ZSk7IGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhazsgfSB9IGNhdGNoIChlcnIpIHsgX2QgPSB0cnVlOyBfZSA9IGVycjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSAhPSBudWxsKSBfaVtcInJldHVyblwiXSgpOyB9IGZpbmFsbHkgeyBpZiAoX2QpIHRocm93IF9lOyB9IH0gcmV0dXJuIF9hcnI7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmV4cG9ydCBmdW5jdGlvbiB1c2VJbm5lclRleHQoaW5uZXJUZXh0RmFsbGJhY2spIHtcbiAgdmFyIF91c2VTdGF0ZSA9IHVzZVN0YXRlKG51bGwpLFxuICAgICAgX3VzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZSwgMiksXG4gICAgICByZWYgPSBfdXNlU3RhdGUyWzBdLFxuICAgICAgc2V0UmVmID0gX3VzZVN0YXRlMlsxXTtcblxuICB2YXIgX3VzZVN0YXRlMyA9IHVzZVN0YXRlKGlubmVyVGV4dEZhbGxiYWNrKSxcbiAgICAgIF91c2VTdGF0ZTQgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUzLCAyKSxcbiAgICAgIGlubmVyVGV4dCA9IF91c2VTdGF0ZTRbMF0sXG4gICAgICBzZXRJbm5lclRleHQgPSBfdXNlU3RhdGU0WzFdO1xuXG4gIHZhciB1cGRhdGVJbm5lclRleHQgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAobm9kZSkge1xuICAgIGlmICghbm9kZSkgcmV0dXJuO1xuICAgIHNldElubmVyVGV4dCggLy8gQ2hlY2sgZm9yIGBpbm5lclRleHRgIGltcGxlbWVudGF0aW9uIHJhdGhlciB0aGFuIGEgc2ltcGxlIE9SIGNoZWNrXG4gICAgLy8gYmVjYXVzZSBpbiByZWFsIGNhc2VzIHRoZSByZXN1bHQgb2YgYGlubmVyVGV4dGAgY291bGQgY29ycmVjdGx5IGJlIGBudWxsYFxuICAgIC8vIHdoaWxlIHRoZSByZXN1bHQgb2YgYHRleHRDb250ZW50YCBjb3VsZCBjb3JyZWN0bHkgYmUgbm9uLWBudWxsYCBkdWUgdG9cbiAgICAvLyBkaWZmZXJpbmcgcmVsaWFuY2Ugb24gYnJvd3NlciBsYXlvdXQgY2FsY3VsYXRpb25zLlxuICAgIC8vIFdlIHByZWZlciB0aGUgcmVzdWx0IG9mIGBpbm5lclRleHRgLCBpZiBhdmFpbGFibGUuXG4gICAgJ2lubmVyVGV4dCcgaW4gbm9kZSA/IG5vZGUuaW5uZXJUZXh0IDogbm9kZS50ZXh0Q29udGVudCB8fCBpbm5lclRleHRGYWxsYmFjayk7XG4gIH0sIFtpbm5lclRleHRGYWxsYmFja10pO1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHZhciBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uIChtdXRhdGlvbnNMaXN0KSB7XG4gICAgICBpZiAobXV0YXRpb25zTGlzdC5sZW5ndGgpIHVwZGF0ZUlubmVyVGV4dChyZWYpO1xuICAgIH0pO1xuXG4gICAgaWYgKHJlZikge1xuICAgICAgdXBkYXRlSW5uZXJUZXh0KHJlZik7XG4gICAgICBvYnNlcnZlci5vYnNlcnZlKHJlZiwge1xuICAgICAgICBjaGFyYWN0ZXJEYXRhOiB0cnVlLFxuICAgICAgICBzdWJ0cmVlOiB0cnVlLFxuICAgICAgICBjaGlsZExpc3Q6IHRydWVcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgfTtcbiAgfSwgW3JlZiwgdXBkYXRlSW5uZXJUZXh0XSk7XG4gIHJldHVybiBbc2V0UmVmLCBpbm5lclRleHRdO1xufVxuZXhwb3J0IHZhciBFdWlJbm5lclRleHQgPSBmdW5jdGlvbiBFdWlJbm5lclRleHQoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgZmFsbGJhY2sgPSBfcmVmLmZhbGxiYWNrO1xuXG4gIHZhciBfdXNlSW5uZXJUZXh0ID0gdXNlSW5uZXJUZXh0KGZhbGxiYWNrKSxcbiAgICAgIF91c2VJbm5lclRleHQyID0gX3NsaWNlZFRvQXJyYXkoX3VzZUlubmVyVGV4dCwgMiksXG4gICAgICByZWYgPSBfdXNlSW5uZXJUZXh0MlswXSxcbiAgICAgIGlubmVyVGV4dCA9IF91c2VJbm5lclRleHQyWzFdO1xuXG4gIHJldHVybiBjaGlsZHJlbihyZWYsIGlubmVyVGV4dCk7XG59O1xuRXVpSW5uZXJUZXh0LnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAgICogUmVhY3ROb2RlIHRvIHJlbmRlciBhcyB0aGlzIGNvbXBvbmVudCdzIGNvbnRlbnRcbiAgICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGZhbGxiYWNrOiBQcm9wVHlwZXMuc3RyaW5nXG59OyIsICJpbXBvcnQgeyBDb21wb25lbnQsIGNyZWF0ZUVsZW1lbnQgfSBmcm9tICdyZWFjdCc7XG5cbi8qKlxuICogRGV0ZWN0IEVsZW1lbnQgUmVzaXplLlxuICogaHR0cHM6Ly9naXRodWIuY29tL3NkZWNpbWEvamF2YXNjcmlwdC1kZXRlY3QtZWxlbWVudC1yZXNpemVcbiAqIFNlYmFzdGlhbiBEZWNpbWFcbiAqXG4gKiBGb3JrZWQgZnJvbSB2ZXJzaW9uIDAuNS4zOyBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIG1vZGlmaWNhdGlvbnM6XG4gKiAxKSBHdWFyZCBhZ2FpbnN0IHVuc2FmZSAnd2luZG93JyBhbmQgJ2RvY3VtZW50JyByZWZlcmVuY2VzICh0byBzdXBwb3J0IFNTUikuXG4gKiAyKSBEZWZlciBpbml0aWFsaXphdGlvbiBjb2RlIHZpYSBhIHRvcC1sZXZlbCBmdW5jdGlvbiB3cmFwcGVyICh0byBzdXBwb3J0IFNTUikuXG4gKiAzKSBBdm9pZCB1bm5lY2Vzc2FyeSByZWZsb3dzIGJ5IG5vdCBtZWFzdXJpbmcgc2l6ZSBmb3Igc2Nyb2xsIGV2ZW50cyBidWJibGluZyBmcm9tIGNoaWxkcmVuLlxuICogNCkgQWRkIG5vbmNlIGZvciBzdHlsZSBlbGVtZW50LlxuICogNSkgVXNlICdleHBvcnQnIHN0YXRlbWVudCBvdmVyICdtb2R1bGUuZXhwb3J0cycgYXNzaWdubWVudFxuICoqL1xuXG4vLyBDaGVjayBgZG9jdW1lbnRgIGFuZCBgd2luZG93YCBpbiBjYXNlIG9mIHNlcnZlci1zaWRlIHJlbmRlcmluZ1xubGV0IHdpbmRvd09iamVjdDtcbmlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gIHdpbmRvd09iamVjdCA9IHdpbmRvdztcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1nbG9iYWxzXG59IGVsc2UgaWYgKHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHNcbiAgd2luZG93T2JqZWN0ID0gc2VsZjtcbn0gZWxzZSB7XG4gIHdpbmRvd09iamVjdCA9IGdsb2JhbDtcbn1cbmxldCBjYW5jZWxGcmFtZSA9IG51bGw7XG5sZXQgcmVxdWVzdEZyYW1lID0gbnVsbDtcbmNvbnN0IFRJTUVPVVRfRFVSQVRJT04gPSAyMDtcbmNvbnN0IGNsZWFyVGltZW91dEZuID0gd2luZG93T2JqZWN0LmNsZWFyVGltZW91dDtcbmNvbnN0IHNldFRpbWVvdXRGbiA9IHdpbmRvd09iamVjdC5zZXRUaW1lb3V0O1xuY29uc3QgY2FuY2VsQW5pbWF0aW9uRnJhbWVGbiA9IHdpbmRvd09iamVjdC5jYW5jZWxBbmltYXRpb25GcmFtZSB8fCB3aW5kb3dPYmplY3QubW96Q2FuY2VsQW5pbWF0aW9uRnJhbWUgfHwgd2luZG93T2JqZWN0LndlYmtpdENhbmNlbEFuaW1hdGlvbkZyYW1lO1xuY29uc3QgcmVxdWVzdEFuaW1hdGlvbkZyYW1lRm4gPSB3aW5kb3dPYmplY3QucmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8IHdpbmRvd09iamVjdC5tb3pSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHwgd2luZG93T2JqZWN0LndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZTtcbmlmIChjYW5jZWxBbmltYXRpb25GcmFtZUZuID09IG51bGwgfHwgcmVxdWVzdEFuaW1hdGlvbkZyYW1lRm4gPT0gbnVsbCkge1xuICAvLyBGb3IgZW52aXJvbm1lbnRzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBhbmltYXRpb24gZnJhbWUsXG4gIC8vIGZhbGxiYWNrIHRvIGEgc2V0VGltZW91dCBiYXNlZCBhcHByb2FjaC5cbiAgY2FuY2VsRnJhbWUgPSBjbGVhclRpbWVvdXRGbjtcbiAgcmVxdWVzdEZyYW1lID0gZnVuY3Rpb24gcmVxdWVzdEFuaW1hdGlvbkZyYW1lVmlhU2V0VGltZW91dChjYWxsYmFjaykge1xuICAgIHJldHVybiBzZXRUaW1lb3V0Rm4oY2FsbGJhY2ssIFRJTUVPVVRfRFVSQVRJT04pO1xuICB9O1xufSBlbHNlIHtcbiAgLy8gQ291bnRlciBpbnR1aXRpdmVseSwgZW52aXJvbm1lbnRzIHRoYXQgc3VwcG9ydCBhbmltYXRpb24gZnJhbWVzIGNhbiBiZSB0cmlja2llci5cbiAgLy8gQ2hyb21lJ3MgXCJUaHJvdHRsZSBub24tdmlzaWJsZSBjcm9zcy1vcmlnaW4gaWZyYW1lc1wiIGZsYWcgY2FuIHByZXZlbnQgckFGcyBmcm9tIGJlaW5nIGNhbGxlZC5cbiAgLy8gSW4gdGhpcyBjYXNlLCB3ZSBzaG91bGQgZmFsbGJhY2sgdG8gYSBzZXRUaW1lb3V0KCkgaW1wbGVtZW50YXRpb24uXG4gIGNhbmNlbEZyYW1lID0gZnVuY3Rpb24gY2FuY2VsRnJhbWUoW2FuaW1hdGlvbkZyYW1lSUQsIHRpbWVvdXRJRF0pIHtcbiAgICBjYW5jZWxBbmltYXRpb25GcmFtZUZuKGFuaW1hdGlvbkZyYW1lSUQpO1xuICAgIGNsZWFyVGltZW91dEZuKHRpbWVvdXRJRCk7XG4gIH07XG4gIHJlcXVlc3RGcmFtZSA9IGZ1bmN0aW9uIHJlcXVlc3RBbmltYXRpb25GcmFtZVdpdGhTZXRUaW1lb3V0RmFsbGJhY2soY2FsbGJhY2spIHtcbiAgICBjb25zdCBhbmltYXRpb25GcmFtZUlEID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lRm4oZnVuY3Rpb24gYW5pbWF0aW9uRnJhbWVDYWxsYmFjaygpIHtcbiAgICAgIGNsZWFyVGltZW91dEZuKHRpbWVvdXRJRCk7XG4gICAgICBjYWxsYmFjaygpO1xuICAgIH0pO1xuICAgIGNvbnN0IHRpbWVvdXRJRCA9IHNldFRpbWVvdXRGbihmdW5jdGlvbiB0aW1lb3V0Q2FsbGJhY2soKSB7XG4gICAgICBjYW5jZWxBbmltYXRpb25GcmFtZUZuKGFuaW1hdGlvbkZyYW1lSUQpO1xuICAgICAgY2FsbGJhY2soKTtcbiAgICB9LCBUSU1FT1VUX0RVUkFUSU9OKTtcbiAgICByZXR1cm4gW2FuaW1hdGlvbkZyYW1lSUQsIHRpbWVvdXRJRF07XG4gIH07XG59XG5mdW5jdGlvbiBjcmVhdGVEZXRlY3RFbGVtZW50UmVzaXplKG5vbmNlKSB7XG4gIGxldCBhbmltYXRpb25LZXlmcmFtZXM7XG4gIGxldCBhbmltYXRpb25OYW1lO1xuICBsZXQgYW5pbWF0aW9uU3RhcnRFdmVudDtcbiAgbGV0IGFuaW1hdGlvblN0eWxlO1xuICBsZXQgY2hlY2tUcmlnZ2VycztcbiAgbGV0IHJlc2V0VHJpZ2dlcnM7XG4gIGxldCBzY3JvbGxMaXN0ZW5lcjtcbiAgY29uc3QgYXR0YWNoRXZlbnQgPSB0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgZG9jdW1lbnQuYXR0YWNoRXZlbnQ7XG4gIGlmICghYXR0YWNoRXZlbnQpIHtcbiAgICByZXNldFRyaWdnZXJzID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IHRyaWdnZXJzID0gZWxlbWVudC5fX3Jlc2l6ZVRyaWdnZXJzX18sXG4gICAgICAgIGV4cGFuZCA9IHRyaWdnZXJzLmZpcnN0RWxlbWVudENoaWxkLFxuICAgICAgICBjb250cmFjdCA9IHRyaWdnZXJzLmxhc3RFbGVtZW50Q2hpbGQsXG4gICAgICAgIGV4cGFuZENoaWxkID0gZXhwYW5kLmZpcnN0RWxlbWVudENoaWxkO1xuICAgICAgY29udHJhY3Quc2Nyb2xsTGVmdCA9IGNvbnRyYWN0LnNjcm9sbFdpZHRoO1xuICAgICAgY29udHJhY3Quc2Nyb2xsVG9wID0gY29udHJhY3Quc2Nyb2xsSGVpZ2h0O1xuICAgICAgZXhwYW5kQ2hpbGQuc3R5bGUud2lkdGggPSBleHBhbmQub2Zmc2V0V2lkdGggKyAxICsgXCJweFwiO1xuICAgICAgZXhwYW5kQ2hpbGQuc3R5bGUuaGVpZ2h0ID0gZXhwYW5kLm9mZnNldEhlaWdodCArIDEgKyBcInB4XCI7XG4gICAgICBleHBhbmQuc2Nyb2xsTGVmdCA9IGV4cGFuZC5zY3JvbGxXaWR0aDtcbiAgICAgIGV4cGFuZC5zY3JvbGxUb3AgPSBleHBhbmQuc2Nyb2xsSGVpZ2h0O1xuICAgIH07XG4gICAgY2hlY2tUcmlnZ2VycyA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICByZXR1cm4gZWxlbWVudC5vZmZzZXRXaWR0aCAhPT0gZWxlbWVudC5fX3Jlc2l6ZUxhc3RfXy53aWR0aCB8fCBlbGVtZW50Lm9mZnNldEhlaWdodCAhPT0gZWxlbWVudC5fX3Jlc2l6ZUxhc3RfXy5oZWlnaHQ7XG4gICAgfTtcbiAgICBzY3JvbGxMaXN0ZW5lciA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAvLyBEb24ndCBtZWFzdXJlICh3aGljaCBmb3JjZXMpIHJlZmxvdyBmb3Igc2Nyb2xscyB0aGF0IGhhcHBlbiBpbnNpZGUgb2YgY2hpbGRyZW4hXG4gICAgICBpZiAoZS50YXJnZXQuY2xhc3NOYW1lICYmIHR5cGVvZiBlLnRhcmdldC5jbGFzc05hbWUuaW5kZXhPZiA9PT0gXCJmdW5jdGlvblwiICYmIGUudGFyZ2V0LmNsYXNzTmFtZS5pbmRleE9mKFwiY29udHJhY3QtdHJpZ2dlclwiKSA8IDAgJiYgZS50YXJnZXQuY2xhc3NOYW1lLmluZGV4T2YoXCJleHBhbmQtdHJpZ2dlclwiKSA8IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXM7XG4gICAgICByZXNldFRyaWdnZXJzKHRoaXMpO1xuICAgICAgaWYgKHRoaXMuX19yZXNpemVSQUZfXykge1xuICAgICAgICBjYW5jZWxGcmFtZSh0aGlzLl9fcmVzaXplUkFGX18pO1xuICAgICAgfVxuICAgICAgdGhpcy5fX3Jlc2l6ZVJBRl9fID0gcmVxdWVzdEZyYW1lKGZ1bmN0aW9uIGFuaW1hdGlvbkZyYW1lKCkge1xuICAgICAgICBpZiAoY2hlY2tUcmlnZ2VycyhlbGVtZW50KSkge1xuICAgICAgICAgIGVsZW1lbnQuX19yZXNpemVMYXN0X18ud2lkdGggPSBlbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgICAgICAgIGVsZW1lbnQuX19yZXNpemVMYXN0X18uaGVpZ2h0ID0gZWxlbWVudC5vZmZzZXRIZWlnaHQ7XG4gICAgICAgICAgZWxlbWVudC5fX3Jlc2l6ZUxpc3RlbmVyc19fLmZvckVhY2goZnVuY3Rpb24gZm9yRWFjaFJlc2l6ZUxpc3RlbmVyKGZuKSB7XG4gICAgICAgICAgICBmbi5jYWxsKGVsZW1lbnQsIGUpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgLyogRGV0ZWN0IENTUyBBbmltYXRpb25zIHN1cHBvcnQgdG8gZGV0ZWN0IGVsZW1lbnQgZGlzcGxheS9yZS1hdHRhY2ggKi9cbiAgICBsZXQgYW5pbWF0aW9uID0gZmFsc2U7XG4gICAgbGV0IGtleWZyYW1lcHJlZml4ID0gXCJcIjtcbiAgICBhbmltYXRpb25TdGFydEV2ZW50ID0gXCJhbmltYXRpb25zdGFydFwiO1xuICAgIGNvbnN0IGRvbVByZWZpeGVzID0gXCJXZWJraXQgTW96IE8gbXNcIi5zcGxpdChcIiBcIik7XG4gICAgbGV0IHN0YXJ0RXZlbnRzID0gXCJ3ZWJraXRBbmltYXRpb25TdGFydCBhbmltYXRpb25zdGFydCBvQW5pbWF0aW9uU3RhcnQgTVNBbmltYXRpb25TdGFydFwiLnNwbGl0KFwiIFwiKTtcbiAgICBsZXQgcGZ4ID0gXCJcIjtcbiAgICB7XG4gICAgICBjb25zdCBlbG0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZmFrZWVsZW1lbnRcIik7XG4gICAgICBpZiAoZWxtLnN0eWxlLmFuaW1hdGlvbk5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhbmltYXRpb24gPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKGFuaW1hdGlvbiA9PT0gZmFsc2UpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkb21QcmVmaXhlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmIChlbG0uc3R5bGVbZG9tUHJlZml4ZXNbaV0gKyBcIkFuaW1hdGlvbk5hbWVcIl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcGZ4ID0gZG9tUHJlZml4ZXNbaV07XG4gICAgICAgICAgICBrZXlmcmFtZXByZWZpeCA9IFwiLVwiICsgcGZ4LnRvTG93ZXJDYXNlKCkgKyBcIi1cIjtcbiAgICAgICAgICAgIGFuaW1hdGlvblN0YXJ0RXZlbnQgPSBzdGFydEV2ZW50c1tpXTtcbiAgICAgICAgICAgIGFuaW1hdGlvbiA9IHRydWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgYW5pbWF0aW9uTmFtZSA9IFwicmVzaXplYW5pbVwiO1xuICAgIGFuaW1hdGlvbktleWZyYW1lcyA9IFwiQFwiICsga2V5ZnJhbWVwcmVmaXggKyBcImtleWZyYW1lcyBcIiArIGFuaW1hdGlvbk5hbWUgKyBcIiB7IGZyb20geyBvcGFjaXR5OiAwOyB9IHRvIHsgb3BhY2l0eTogMDsgfSB9IFwiO1xuICAgIGFuaW1hdGlvblN0eWxlID0ga2V5ZnJhbWVwcmVmaXggKyBcImFuaW1hdGlvbjogMW1zIFwiICsgYW5pbWF0aW9uTmFtZSArIFwiOyBcIjtcbiAgfVxuICBjb25zdCBjcmVhdGVTdHlsZXMgPSBmdW5jdGlvbiAoZG9jKSB7XG4gICAgaWYgKCFkb2MuZ2V0RWxlbWVudEJ5SWQoXCJkZXRlY3RFbGVtZW50UmVzaXplXCIpKSB7XG4gICAgICAvL29wYWNpdHk6MCB3b3JrcyBhcm91bmQgYSBjaHJvbWUgYnVnIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0yODYzNjBcbiAgICAgIGNvbnN0IGNzcyA9IChhbmltYXRpb25LZXlmcmFtZXMgPyBhbmltYXRpb25LZXlmcmFtZXMgOiBcIlwiKSArIFwiLnJlc2l6ZS10cmlnZ2VycyB7IFwiICsgKGFuaW1hdGlvblN0eWxlID8gYW5pbWF0aW9uU3R5bGUgOiBcIlwiKSArIFwidmlzaWJpbGl0eTogaGlkZGVuOyBvcGFjaXR5OiAwOyB9IFwiICsgJy5yZXNpemUtdHJpZ2dlcnMsIC5yZXNpemUtdHJpZ2dlcnMgPiBkaXYsIC5jb250cmFjdC10cmlnZ2VyOmJlZm9yZSB7IGNvbnRlbnQ6IFwiIFwiOyBkaXNwbGF5OiBibG9jazsgcG9zaXRpb246IGFic29sdXRlOyB0b3A6IDA7IGxlZnQ6IDA7IGhlaWdodDogMTAwJTsgd2lkdGg6IDEwMCU7IG92ZXJmbG93OiBoaWRkZW47IHotaW5kZXg6IC0xOyB9IC5yZXNpemUtdHJpZ2dlcnMgPiBkaXYgeyBiYWNrZ3JvdW5kOiAjZWVlOyBvdmVyZmxvdzogYXV0bzsgfSAuY29udHJhY3QtdHJpZ2dlcjpiZWZvcmUgeyB3aWR0aDogMjAwJTsgaGVpZ2h0OiAyMDAlOyB9JyxcbiAgICAgICAgaGVhZCA9IGRvYy5oZWFkIHx8IGRvYy5nZXRFbGVtZW50c0J5VGFnTmFtZShcImhlYWRcIilbMF0sXG4gICAgICAgIHN0eWxlID0gZG9jLmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcbiAgICAgIHN0eWxlLmlkID0gXCJkZXRlY3RFbGVtZW50UmVzaXplXCI7XG4gICAgICBzdHlsZS50eXBlID0gXCJ0ZXh0L2Nzc1wiO1xuICAgICAgaWYgKG5vbmNlICE9IG51bGwpIHtcbiAgICAgICAgc3R5bGUuc2V0QXR0cmlidXRlKFwibm9uY2VcIiwgbm9uY2UpO1xuICAgICAgfVxuICAgICAgaWYgKHN0eWxlLnN0eWxlU2hlZXQpIHtcbiAgICAgICAgc3R5bGUuc3R5bGVTaGVldC5jc3NUZXh0ID0gY3NzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3R5bGUuYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZVRleHROb2RlKGNzcykpO1xuICAgICAgfVxuICAgICAgaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XG4gICAgfVxuICB9O1xuICBjb25zdCBhZGRSZXNpemVMaXN0ZW5lciA9IGZ1bmN0aW9uIChlbGVtZW50LCBmbikge1xuICAgIGlmIChhdHRhY2hFdmVudCkge1xuICAgICAgZWxlbWVudC5hdHRhY2hFdmVudChcIm9ucmVzaXplXCIsIGZuKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFlbGVtZW50Ll9fcmVzaXplVHJpZ2dlcnNfXykge1xuICAgICAgICBjb25zdCBkb2MgPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQ7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRTdHlsZSA9IHdpbmRvd09iamVjdC5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuICAgICAgICBpZiAoZWxlbWVudFN0eWxlICYmIGVsZW1lbnRTdHlsZS5wb3NpdGlvbiA9PT0gXCJzdGF0aWNcIikge1xuICAgICAgICAgIGVsZW1lbnQuc3R5bGUucG9zaXRpb24gPSBcInJlbGF0aXZlXCI7XG4gICAgICAgIH1cbiAgICAgICAgY3JlYXRlU3R5bGVzKGRvYyk7XG4gICAgICAgIGVsZW1lbnQuX19yZXNpemVMYXN0X18gPSB7fTtcbiAgICAgICAgZWxlbWVudC5fX3Jlc2l6ZUxpc3RlbmVyc19fID0gW107XG4gICAgICAgIChlbGVtZW50Ll9fcmVzaXplVHJpZ2dlcnNfXyA9IGRvYy5jcmVhdGVFbGVtZW50KFwiZGl2XCIpKS5jbGFzc05hbWUgPSBcInJlc2l6ZS10cmlnZ2Vyc1wiO1xuICAgICAgICBjb25zdCBleHBhbmRUcmlnZ2VyID0gZG9jLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIGV4cGFuZFRyaWdnZXIuY2xhc3NOYW1lID0gXCJleHBhbmQtdHJpZ2dlclwiO1xuICAgICAgICBleHBhbmRUcmlnZ2VyLmFwcGVuZENoaWxkKGRvYy5jcmVhdGVFbGVtZW50KFwiZGl2XCIpKTtcbiAgICAgICAgY29uc3QgY29udHJhY3RUcmlnZ2VyID0gZG9jLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIGNvbnRyYWN0VHJpZ2dlci5jbGFzc05hbWUgPSBcImNvbnRyYWN0LXRyaWdnZXJcIjtcbiAgICAgICAgZWxlbWVudC5fX3Jlc2l6ZVRyaWdnZXJzX18uYXBwZW5kQ2hpbGQoZXhwYW5kVHJpZ2dlcik7XG4gICAgICAgIGVsZW1lbnQuX19yZXNpemVUcmlnZ2Vyc19fLmFwcGVuZENoaWxkKGNvbnRyYWN0VHJpZ2dlcik7XG4gICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoZWxlbWVudC5fX3Jlc2l6ZVRyaWdnZXJzX18pO1xuICAgICAgICByZXNldFRyaWdnZXJzKGVsZW1lbnQpO1xuICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgc2Nyb2xsTGlzdGVuZXIsIHRydWUpO1xuXG4gICAgICAgIC8qIExpc3RlbiBmb3IgYSBjc3MgYW5pbWF0aW9uIHRvIGRldGVjdCBlbGVtZW50IGRpc3BsYXkvcmUtYXR0YWNoICovXG4gICAgICAgIGlmIChhbmltYXRpb25TdGFydEV2ZW50KSB7XG4gICAgICAgICAgZWxlbWVudC5fX3Jlc2l6ZVRyaWdnZXJzX18uX19hbmltYXRpb25MaXN0ZW5lcl9fID0gZnVuY3Rpb24gYW5pbWF0aW9uTGlzdGVuZXIoZSkge1xuICAgICAgICAgICAgaWYgKGUuYW5pbWF0aW9uTmFtZSA9PT0gYW5pbWF0aW9uTmFtZSkge1xuICAgICAgICAgICAgICByZXNldFRyaWdnZXJzKGVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgICAgZWxlbWVudC5fX3Jlc2l6ZVRyaWdnZXJzX18uYWRkRXZlbnRMaXN0ZW5lcihhbmltYXRpb25TdGFydEV2ZW50LCBlbGVtZW50Ll9fcmVzaXplVHJpZ2dlcnNfXy5fX2FuaW1hdGlvbkxpc3RlbmVyX18pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbGVtZW50Ll9fcmVzaXplTGlzdGVuZXJzX18ucHVzaChmbik7XG4gICAgfVxuICB9O1xuICBjb25zdCByZW1vdmVSZXNpemVMaXN0ZW5lciA9IGZ1bmN0aW9uIChlbGVtZW50LCBmbikge1xuICAgIGlmIChhdHRhY2hFdmVudCkge1xuICAgICAgZWxlbWVudC5kZXRhY2hFdmVudChcIm9ucmVzaXplXCIsIGZuKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWxlbWVudC5fX3Jlc2l6ZUxpc3RlbmVyc19fLnNwbGljZShlbGVtZW50Ll9fcmVzaXplTGlzdGVuZXJzX18uaW5kZXhPZihmbiksIDEpO1xuICAgICAgaWYgKCFlbGVtZW50Ll9fcmVzaXplTGlzdGVuZXJzX18ubGVuZ3RoKSB7XG4gICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCBzY3JvbGxMaXN0ZW5lciwgdHJ1ZSk7XG4gICAgICAgIGlmIChlbGVtZW50Ll9fcmVzaXplVHJpZ2dlcnNfXy5fX2FuaW1hdGlvbkxpc3RlbmVyX18pIHtcbiAgICAgICAgICBlbGVtZW50Ll9fcmVzaXplVHJpZ2dlcnNfXy5yZW1vdmVFdmVudExpc3RlbmVyKGFuaW1hdGlvblN0YXJ0RXZlbnQsIGVsZW1lbnQuX19yZXNpemVUcmlnZ2Vyc19fLl9fYW5pbWF0aW9uTGlzdGVuZXJfXyk7XG4gICAgICAgICAgZWxlbWVudC5fX3Jlc2l6ZVRyaWdnZXJzX18uX19hbmltYXRpb25MaXN0ZW5lcl9fID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGVsZW1lbnQuX19yZXNpemVUcmlnZ2Vyc19fID0gIWVsZW1lbnQucmVtb3ZlQ2hpbGQoZWxlbWVudC5fX3Jlc2l6ZVRyaWdnZXJzX18pO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgLy8gUHJlYWN0IGNvbXBhdDsgc2VlIGRldmVsb3BpdC9wcmVhY3QtY29tcGF0L2lzc3Vlcy8yMjhcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBhZGRSZXNpemVMaXN0ZW5lcixcbiAgICByZW1vdmVSZXNpemVMaXN0ZW5lclxuICB9O1xufVxuXG5jbGFzcyBBdXRvU2l6ZXIgZXh0ZW5kcyBDb21wb25lbnQge1xuICBjb25zdHJ1Y3RvciguLi5hcmdzKSB7XG4gICAgc3VwZXIoLi4uYXJncyk7XG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGhlaWdodDogdGhpcy5wcm9wcy5kZWZhdWx0SGVpZ2h0IHx8IDAsXG4gICAgICBzY2FsZWRIZWlnaHQ6IHRoaXMucHJvcHMuZGVmYXVsdEhlaWdodCB8fCAwLFxuICAgICAgc2NhbGVkV2lkdGg6IHRoaXMucHJvcHMuZGVmYXVsdFdpZHRoIHx8IDAsXG4gICAgICB3aWR0aDogdGhpcy5wcm9wcy5kZWZhdWx0V2lkdGggfHwgMFxuICAgIH07XG4gICAgdGhpcy5fYXV0b1NpemVyID0gbnVsbDtcbiAgICB0aGlzLl9kZXRlY3RFbGVtZW50UmVzaXplID0gbnVsbDtcbiAgICB0aGlzLl9wYXJlbnROb2RlID0gbnVsbDtcbiAgICB0aGlzLl9yZXNpemVPYnNlcnZlciA9IG51bGw7XG4gICAgdGhpcy5fdGltZW91dElkID0gbnVsbDtcbiAgICB0aGlzLl9vblJlc2l6ZSA9ICgpID0+IHtcbiAgICAgIHRoaXMuX3RpbWVvdXRJZCA9IG51bGw7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGRpc2FibGVIZWlnaHQsXG4gICAgICAgIGRpc2FibGVXaWR0aCxcbiAgICAgICAgb25SZXNpemVcbiAgICAgIH0gPSB0aGlzLnByb3BzO1xuICAgICAgaWYgKHRoaXMuX3BhcmVudE5vZGUpIHtcbiAgICAgICAgLy8gR3VhcmQgYWdhaW5zdCBBdXRvU2l6ZXIgY29tcG9uZW50IGJlaW5nIHJlbW92ZWQgZnJvbSB0aGUgRE9NIGltbWVkaWF0ZWx5IGFmdGVyIGJlaW5nIGFkZGVkLlxuICAgICAgICAvLyBUaGlzIGNhbiByZXN1bHQgaW4gaW52YWxpZCBzdHlsZSB2YWx1ZXMgd2hpY2ggY2FuIHJlc3VsdCBpbiBOYU4gdmFsdWVzIGlmIHdlIGRvbid0IGhhbmRsZSB0aGVtLlxuICAgICAgICAvLyBTZWUgaXNzdWUgIzE1MCBmb3IgbW9yZSBjb250ZXh0LlxuXG4gICAgICAgIGNvbnN0IHN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5fcGFyZW50Tm9kZSkgfHwge307XG4gICAgICAgIGNvbnN0IHBhZGRpbmdMZWZ0ID0gcGFyc2VGbG9hdChzdHlsZS5wYWRkaW5nTGVmdCB8fCBcIjBcIik7XG4gICAgICAgIGNvbnN0IHBhZGRpbmdSaWdodCA9IHBhcnNlRmxvYXQoc3R5bGUucGFkZGluZ1JpZ2h0IHx8IFwiMFwiKTtcbiAgICAgICAgY29uc3QgcGFkZGluZ1RvcCA9IHBhcnNlRmxvYXQoc3R5bGUucGFkZGluZ1RvcCB8fCBcIjBcIik7XG4gICAgICAgIGNvbnN0IHBhZGRpbmdCb3R0b20gPSBwYXJzZUZsb2F0KHN0eWxlLnBhZGRpbmdCb3R0b20gfHwgXCIwXCIpO1xuICAgICAgICBjb25zdCByZWN0ID0gdGhpcy5fcGFyZW50Tm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3Qgc2NhbGVkSGVpZ2h0ID0gcmVjdC5oZWlnaHQgLSBwYWRkaW5nVG9wIC0gcGFkZGluZ0JvdHRvbTtcbiAgICAgICAgY29uc3Qgc2NhbGVkV2lkdGggPSByZWN0LndpZHRoIC0gcGFkZGluZ0xlZnQgLSBwYWRkaW5nUmlnaHQ7XG4gICAgICAgIGNvbnN0IGhlaWdodCA9IHRoaXMuX3BhcmVudE5vZGUub2Zmc2V0SGVpZ2h0IC0gcGFkZGluZ1RvcCAtIHBhZGRpbmdCb3R0b207XG4gICAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy5fcGFyZW50Tm9kZS5vZmZzZXRXaWR0aCAtIHBhZGRpbmdMZWZ0IC0gcGFkZGluZ1JpZ2h0O1xuICAgICAgICBpZiAoIWRpc2FibGVIZWlnaHQgJiYgKHRoaXMuc3RhdGUuaGVpZ2h0ICE9PSBoZWlnaHQgfHwgdGhpcy5zdGF0ZS5zY2FsZWRIZWlnaHQgIT09IHNjYWxlZEhlaWdodCkgfHwgIWRpc2FibGVXaWR0aCAmJiAodGhpcy5zdGF0ZS53aWR0aCAhPT0gd2lkdGggfHwgdGhpcy5zdGF0ZS5zY2FsZWRXaWR0aCAhPT0gc2NhbGVkV2lkdGgpKSB7XG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgIHNjYWxlZEhlaWdodCxcbiAgICAgICAgICAgIHNjYWxlZFdpZHRoXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKHR5cGVvZiBvblJlc2l6ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICBvblJlc2l6ZSh7XG4gICAgICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICAgICAgc2NhbGVkSGVpZ2h0LFxuICAgICAgICAgICAgICBzY2FsZWRXaWR0aCxcbiAgICAgICAgICAgICAgd2lkdGhcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5fc2V0UmVmID0gYXV0b1NpemVyID0+IHtcbiAgICAgIHRoaXMuX2F1dG9TaXplciA9IGF1dG9TaXplcjtcbiAgICB9O1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIGNvbnN0IHtcbiAgICAgIG5vbmNlXG4gICAgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgcGFyZW50Tm9kZSA9IHRoaXMuX2F1dG9TaXplciA/IHRoaXMuX2F1dG9TaXplci5wYXJlbnROb2RlIDogbnVsbDtcbiAgICBpZiAocGFyZW50Tm9kZSAhPSBudWxsICYmIHBhcmVudE5vZGUub3duZXJEb2N1bWVudCAmJiBwYXJlbnROb2RlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcgJiYgcGFyZW50Tm9kZSBpbnN0YW5jZW9mIHBhcmVudE5vZGUub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5IVE1MRWxlbWVudCkge1xuICAgICAgLy8gRGVsYXkgYWNjZXNzIG9mIHBhcmVudE5vZGUgdW50aWwgbW91bnQuXG4gICAgICAvLyBUaGlzIGhhbmRsZXMgZWRnZS1jYXNlcyB3aGVyZSB0aGUgY29tcG9uZW50IGhhcyBhbHJlYWR5IGJlZW4gdW5tb3VudGVkIGJlZm9yZSBpdHMgcmVmIGhhcyBiZWVuIHNldCxcbiAgICAgIC8vIEFzIHdlbGwgYXMgbGlicmFyaWVzIGxpa2UgcmVhY3QtbGl0ZSB3aGljaCBoYXZlIGEgc2xpZ2h0bHkgZGlmZmVyZW50IGxpZmVjeWNsZS5cbiAgICAgIHRoaXMuX3BhcmVudE5vZGUgPSBwYXJlbnROb2RlO1xuXG4gICAgICAvLyBVc2UgUmVzaXplT2JzZXJ2ZXIgZnJvbSB0aGUgc2FtZSBjb250ZXh0IHdoZXJlIHBhcmVudE5vZGUgKHdoaWNoIHdlIHdpbGwgb2JzZXJ2ZSkgd2FzIGRlZmluZWRcbiAgICAgIC8vIFVzaW5nIGp1c3QgZ2xvYmFsIGNhbiByZXN1bHQgaW50byBvblJlc2l6ZSBldmVudHMgbm90IGJlaW5nIGVtaXR0ZWQgaW4gY2FzZXMgd2l0aCBtdWx0aXBsZSByZWFsbXNcbiAgICAgIGNvbnN0IFJlc2l6ZU9ic2VydmVySW5zdGFuY2UgPSBwYXJlbnROb2RlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuUmVzaXplT2JzZXJ2ZXI7XG4gICAgICBpZiAoUmVzaXplT2JzZXJ2ZXJJbnN0YW5jZSAhPSBudWxsKSB7XG4gICAgICAgIHRoaXMuX3Jlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVySW5zdGFuY2UoKCkgPT4ge1xuICAgICAgICAgIC8vIEd1YXJkIGFnYWluc3QgXCJSZXNpemVPYnNlcnZlciBsb29wIGxpbWl0IGV4Y2VlZGVkXCIgZXJyb3I7XG4gICAgICAgICAgLy8gY291bGQgYmUgdHJpZ2dlcmVkIGlmIHRoZSBzdGF0ZSB1cGRhdGUgY2F1c2VzIHRoZSBSZXNpemVPYnNlcnZlciBoYW5kbGVyIHRvIHJ1biBsb25nLlxuICAgICAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vYnZhdWdobi9yZWFjdC12aXJ0dWFsaXplZC1hdXRvLXNpemVyL2lzc3Vlcy81NVxuICAgICAgICAgIHRoaXMuX3RpbWVvdXRJZCA9IHNldFRpbWVvdXQodGhpcy5fb25SZXNpemUsIDApO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fcmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShwYXJlbnROb2RlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIERlZmVyIHJlcXVpcmluZyByZXNpemUgaGFuZGxlciBpbiBvcmRlciB0byBzdXBwb3J0IHNlcnZlci1zaWRlIHJlbmRlcmluZy5cbiAgICAgICAgLy8gU2VlIGlzc3VlICM0MVxuICAgICAgICB0aGlzLl9kZXRlY3RFbGVtZW50UmVzaXplID0gY3JlYXRlRGV0ZWN0RWxlbWVudFJlc2l6ZShub25jZSk7XG4gICAgICAgIHRoaXMuX2RldGVjdEVsZW1lbnRSZXNpemUuYWRkUmVzaXplTGlzdGVuZXIocGFyZW50Tm9kZSwgdGhpcy5fb25SZXNpemUpO1xuICAgICAgfVxuICAgICAgdGhpcy5fb25SZXNpemUoKTtcbiAgICB9XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgaWYgKHRoaXMuX3BhcmVudE5vZGUpIHtcbiAgICAgIGlmICh0aGlzLl9kZXRlY3RFbGVtZW50UmVzaXplKSB7XG4gICAgICAgIHRoaXMuX2RldGVjdEVsZW1lbnRSZXNpemUucmVtb3ZlUmVzaXplTGlzdGVuZXIodGhpcy5fcGFyZW50Tm9kZSwgdGhpcy5fb25SZXNpemUpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX3RpbWVvdXRJZCAhPT0gbnVsbCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dElkKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9yZXNpemVPYnNlcnZlcikge1xuICAgICAgICB0aGlzLl9yZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICBjaGlsZHJlbixcbiAgICAgIGRlZmF1bHRIZWlnaHQsXG4gICAgICBkZWZhdWx0V2lkdGgsXG4gICAgICBkaXNhYmxlSGVpZ2h0ID0gZmFsc2UsXG4gICAgICBkaXNhYmxlV2lkdGggPSBmYWxzZSxcbiAgICAgIGRvTm90QmFpbE91dE9uRW1wdHlDaGlsZHJlbiA9IGZhbHNlLFxuICAgICAgbm9uY2UsXG4gICAgICBvblJlc2l6ZSxcbiAgICAgIHN0eWxlID0ge30sXG4gICAgICB0YWdOYW1lID0gXCJkaXZcIixcbiAgICAgIC4uLnJlc3RcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7XG4gICAgICBoZWlnaHQsXG4gICAgICBzY2FsZWRIZWlnaHQsXG4gICAgICBzY2FsZWRXaWR0aCxcbiAgICAgIHdpZHRoXG4gICAgfSA9IHRoaXMuc3RhdGU7XG5cbiAgICAvLyBPdXRlciBkaXYgc2hvdWxkIG5vdCBmb3JjZSB3aWR0aC9oZWlnaHQgc2luY2UgdGhhdCBtYXkgcHJldmVudCBjb250YWluZXJzIGZyb20gc2hyaW5raW5nLlxuICAgIC8vIElubmVyIGNvbXBvbmVudCBzaG91bGQgb3ZlcmZsb3cgYW5kIHVzZSBjYWxjdWxhdGVkIHdpZHRoL2hlaWdodC5cbiAgICAvLyBTZWUgaXNzdWUgIzY4IGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAgIGNvbnN0IG91dGVyU3R5bGUgPSB7XG4gICAgICBvdmVyZmxvdzogXCJ2aXNpYmxlXCJcbiAgICB9O1xuICAgIGNvbnN0IGNoaWxkUGFyYW1zID0ge307XG5cbiAgICAvLyBBdm9pZCByZW5kZXJpbmcgY2hpbGRyZW4gYmVmb3JlIHRoZSBpbml0aWFsIG1lYXN1cmVtZW50cyBoYXZlIGJlZW4gY29sbGVjdGVkLlxuICAgIC8vIEF0IGJlc3QgdGhpcyB3b3VsZCBqdXN0IGJlIHdhc3RpbmcgY3ljbGVzLlxuICAgIGxldCBiYWlsb3V0T25DaGlsZHJlbiA9IGZhbHNlO1xuICAgIGlmICghZGlzYWJsZUhlaWdodCkge1xuICAgICAgaWYgKGhlaWdodCA9PT0gMCkge1xuICAgICAgICBiYWlsb3V0T25DaGlsZHJlbiA9IHRydWU7XG4gICAgICB9XG4gICAgICBvdXRlclN0eWxlLmhlaWdodCA9IDA7XG4gICAgICBjaGlsZFBhcmFtcy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICBjaGlsZFBhcmFtcy5zY2FsZWRIZWlnaHQgPSBzY2FsZWRIZWlnaHQ7XG4gICAgfVxuICAgIGlmICghZGlzYWJsZVdpZHRoKSB7XG4gICAgICBpZiAod2lkdGggPT09IDApIHtcbiAgICAgICAgYmFpbG91dE9uQ2hpbGRyZW4gPSB0cnVlO1xuICAgICAgfVxuICAgICAgb3V0ZXJTdHlsZS53aWR0aCA9IDA7XG4gICAgICBjaGlsZFBhcmFtcy53aWR0aCA9IHdpZHRoO1xuICAgICAgY2hpbGRQYXJhbXMuc2NhbGVkV2lkdGggPSBzY2FsZWRXaWR0aDtcbiAgICB9XG4gICAgaWYgKGRvTm90QmFpbE91dE9uRW1wdHlDaGlsZHJlbikge1xuICAgICAgYmFpbG91dE9uQ2hpbGRyZW4gPSBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQodGFnTmFtZSwge1xuICAgICAgcmVmOiB0aGlzLl9zZXRSZWYsXG4gICAgICBzdHlsZToge1xuICAgICAgICAuLi5vdXRlclN0eWxlLFxuICAgICAgICAuLi5zdHlsZVxuICAgICAgfSxcbiAgICAgIC4uLnJlc3RcbiAgICB9LCAhYmFpbG91dE9uQ2hpbGRyZW4gJiYgY2hpbGRyZW4oY2hpbGRQYXJhbXMpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0hlaWdodEFuZFdpZHRoUHJvcHMocHJvcHMpIHtcbiAgcmV0dXJuIHByb3BzICYmIHByb3BzLmRpc2FibGVIZWlnaHQgIT09IHRydWUgJiYgcHJvcHMuZGlzYWJsZVdpZHRoICE9PSB0cnVlO1xufVxuZnVuY3Rpb24gaXNIZWlnaHRPbmx5UHJvcHMocHJvcHMpIHtcbiAgcmV0dXJuIHByb3BzICYmIHByb3BzLmRpc2FibGVIZWlnaHQgIT09IHRydWUgJiYgcHJvcHMuZGlzYWJsZVdpZHRoID09PSB0cnVlO1xufVxuZnVuY3Rpb24gaXNXaWR0aE9ubHlQcm9wcyhwcm9wcykge1xuICByZXR1cm4gcHJvcHMgJiYgcHJvcHMuZGlzYWJsZUhlaWdodCA9PT0gdHJ1ZSAmJiBwcm9wcy5kaXNhYmxlV2lkdGggIT09IHRydWU7XG59XG5cbmV4cG9ydCB7IEF1dG9TaXplciBhcyBkZWZhdWx0LCBpc0hlaWdodEFuZFdpZHRoUHJvcHMsIGlzSGVpZ2h0T25seVByb3BzLCBpc1dpZHRoT25seVByb3BzIH07XG4iLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgQXV0b1NpemVyIGZyb20gJ3JlYWN0LXZpcnR1YWxpemVkLWF1dG8tc2l6ZXInO1xuZXhwb3J0IHZhciBFdWlBdXRvU2l6ZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9BdXRvU2l6ZXIpIHtcbiAgX2luaGVyaXRzKEV1aUF1dG9TaXplciwgX0F1dG9TaXplcik7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihFdWlBdXRvU2l6ZXIpO1xuXG4gIGZ1bmN0aW9uIEV1aUF1dG9TaXplcigpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpQXV0b1NpemVyKTtcblxuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIHJldHVybiBFdWlBdXRvU2l6ZXI7XG59KEF1dG9TaXplcik7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNvbG9yXCIsIFwiaWNvblR5cGVcIiwgXCJpY29uU2lkZVwiLCBcImNsYXNzTmFtZVwiLCBcImlzRGlzYWJsZWRcIiwgXCJvbkNsaWNrXCIsIFwiaWNvbk9uQ2xpY2tcIiwgXCJvbkNsaWNrQXJpYUxhYmVsXCIsIFwiaWNvbk9uQ2xpY2tBcmlhTGFiZWxcIiwgXCJjbG9zZUJ1dHRvblByb3BzXCIsIFwiaHJlZlwiLCBcInJlbFwiLCBcInRhcmdldFwiLCBcInN0eWxlXCJdO1xuXG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7IHJldHVybiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5KGFycikgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFycikgfHwgX25vbkl0ZXJhYmxlU3ByZWFkKCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7IGlmICh0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGl0ZXJbU3ltYm9sLml0ZXJhdG9yXSAhPSBudWxsIHx8IGl0ZXJbXCJAQGl0ZXJhdG9yXCJdICE9IG51bGwpIHJldHVybiBBcnJheS5mcm9tKGl0ZXIpOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KGFycik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBjaHJvbWEgZnJvbSAnY2hyb21hLWpzJztcbmltcG9ydCB7IGtleXNPZiB9IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQgeyBldWlQYWxldHRlQ29sb3JCbGluZEJlaGluZFRleHQsIGdldFNlY3VyZVJlbEZvclRhcmdldCwgaXNDb2xvckRhcmsgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFdWlJbm5lclRleHQgfSBmcm9tICcuLi9pbm5lcl90ZXh0JztcbmltcG9ydCB7IEV1aUljb24gfSBmcm9tICcuLi9pY29uJztcbmltcG9ydCB7IGNocm9tYVZhbGlkLCBwYXJzZUNvbG9yIH0gZnJvbSAnLi4vY29sb3JfcGlja2VyL3V0aWxzJztcbmltcG9ydCB7IHZhbGlkYXRlSHJlZiB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3NlY3VyaXR5L2hyZWZfdmFsaWRhdG9yJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG4vLyBUT0RPIC0gcmVwbGFjZSB3aXRoIHZhcmlhYmxlcyBvbmNlIGh0dHBzOi8vZ2l0aHViLmNvbS9lbGFzdGljL2V1aS9pc3N1ZXMvMjczMSBpcyBjbG9zZWRcbnZhciBjb2xvckluayA9ICcjMDAwJztcbnZhciBjb2xvckdob3N0ID0gJyNmZmYnOyAvLyBUaGUgY29sb3IgYmxpbmQgcGFsZXR0ZSBoYXMgc29tZSBzdHJpY3RlciBhY2Nlc3NpYmlsaXR5IG5lZWRzIHdpdGggcmVnYXJkcyB0b1xuLy8gY2hhcnRzIGFuZCBjb250cmFzdC4gV2UgdXNlIHRoZSBldWlQYWxldHRlQ29sb3JCbGluZEJlaGluZFRleHQgdmFyaWFudCBoZXJlIHNpbmNlIG91clxuLy8gYWNjZXNzaWJpbGl0eSBjb25jZXJucyBwZXJ0YWluIHRvIGZvcmVncm91bmQgKHRleHQpIGFuZCBiYWNrZ3JvdW5kIGNvbnRyYXN0XG5cbnZhciB2aXNDb2xvcnMgPSBldWlQYWxldHRlQ29sb3JCbGluZEJlaGluZFRleHQoKTtcbnZhciBjb2xvclRvSGV4TWFwID0ge1xuICAvLyBUT0RPIC0gcmVwbGFjZSB3aXRoIHZhcmlhYmxlIG9uY2UgaHR0cHM6Ly9naXRodWIuY29tL2VsYXN0aWMvZXVpL2lzc3Vlcy8yNzMxIGlzIGNsb3NlZFxuICBkZWZhdWx0OiAnI2QzZGFlNicsXG4gIHByaW1hcnk6IHZpc0NvbG9yc1sxXSxcbiAgc3VjY2VzczogdmlzQ29sb3JzWzBdLFxuICBhY2NlbnQ6IHZpc0NvbG9yc1syXSxcbiAgd2FybmluZzogdmlzQ29sb3JzWzVdLFxuICBkYW5nZXI6IHZpc0NvbG9yc1s5XVxufTtcbmV4cG9ydCB2YXIgQ09MT1JTID0ga2V5c09mKGNvbG9yVG9IZXhNYXApO1xudmFyIGljb25TaWRlVG9DbGFzc05hbWVNYXAgPSB7XG4gIGxlZnQ6ICdldWlCYWRnZS0taWNvbkxlZnQnLFxuICByaWdodDogJ2V1aUJhZGdlLS1pY29uUmlnaHQnXG59O1xuZXhwb3J0IHZhciBJQ09OX1NJREVTID0ga2V5c09mKGljb25TaWRlVG9DbGFzc05hbWVNYXApO1xuZXhwb3J0IHZhciBFdWlCYWRnZSA9IGZ1bmN0aW9uIEV1aUJhZGdlKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnZGVmYXVsdCcgOiBfcmVmJGNvbG9yLFxuICAgICAgaWNvblR5cGUgPSBfcmVmLmljb25UeXBlLFxuICAgICAgX3JlZiRpY29uU2lkZSA9IF9yZWYuaWNvblNpZGUsXG4gICAgICBpY29uU2lkZSA9IF9yZWYkaWNvblNpZGUgPT09IHZvaWQgMCA/ICdsZWZ0JyA6IF9yZWYkaWNvblNpZGUsXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIF9pc0Rpc2FibGVkID0gX3JlZi5pc0Rpc2FibGVkLFxuICAgICAgb25DbGljayA9IF9yZWYub25DbGljayxcbiAgICAgIGljb25PbkNsaWNrID0gX3JlZi5pY29uT25DbGljayxcbiAgICAgIG9uQ2xpY2tBcmlhTGFiZWwgPSBfcmVmLm9uQ2xpY2tBcmlhTGFiZWwsXG4gICAgICBpY29uT25DbGlja0FyaWFMYWJlbCA9IF9yZWYuaWNvbk9uQ2xpY2tBcmlhTGFiZWwsXG4gICAgICBjbG9zZUJ1dHRvblByb3BzID0gX3JlZi5jbG9zZUJ1dHRvblByb3BzLFxuICAgICAgaHJlZiA9IF9yZWYuaHJlZixcbiAgICAgIHJlbCA9IF9yZWYucmVsLFxuICAgICAgdGFyZ2V0ID0gX3JlZi50YXJnZXQsXG4gICAgICBzdHlsZSA9IF9yZWYuc3R5bGUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGlzSHJlZlZhbGlkID0gIWhyZWYgfHwgdmFsaWRhdGVIcmVmKGhyZWYpO1xuICB2YXIgaXNEaXNhYmxlZCA9IF9pc0Rpc2FibGVkIHx8ICFpc0hyZWZWYWxpZDtcbiAgdmFyIG9wdGlvbmFsQ3VzdG9tU3R5bGVzID0gc3R5bGU7XG4gIHZhciB0ZXh0Q29sb3IgPSBudWxsOyAvLyBUT0RPIC0gcmVwbGFjZSB3aXRoIHZhcmlhYmxlIG9uY2UgaHR0cHM6Ly9naXRodWIuY29tL2VsYXN0aWMvZXVpL2lzc3Vlcy8yNzMxIGlzIGNsb3NlZFxuXG4gIHZhciB3Y2FnQ29udHJhc3RCYXNlID0gNC41OyAvLyBXQ0FHIEFBIGNvbnRyYXN0IGxldmVsXG5cbiAgdmFyIHdjYWdDb250cmFzdCA9IG51bGw7XG4gIHZhciBjb2xvckhleCA9IG51bGw7IC8vIENoZWNrIGlmIGEgdmFsaWQgY29sb3IgbmFtZSB3YXMgcHJvdmlkZWRcblxuICB0cnkge1xuICAgIGlmIChDT0xPUlMuaW5kZXhPZihjb2xvcikgPiAtMSkge1xuICAgICAgLy8gR2V0IHRoZSBoZXggZXF1aXZhbGVudCBmb3IgdGhlIHByb3ZpZGVkIGNvbG9yIG5hbWVcbiAgICAgIGNvbG9ySGV4ID0gY29sb3JUb0hleE1hcFtjb2xvcl07IC8vIFNldCBkYXJrIG9yIGxpZ2h0IHRleHQgY29sb3IgYmFzZWQgdXBvbiBiZXN0IGNvbnRyYXN0XG5cbiAgICAgIHRleHRDb2xvciA9IHNldFRleHRDb2xvcihjb2xvckhleCk7XG4gICAgICBvcHRpb25hbEN1c3RvbVN0eWxlcyA9IF9vYmplY3RTcHJlYWQoe1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9ySGV4LFxuICAgICAgICBjb2xvcjogdGV4dENvbG9yXG4gICAgICB9LCBvcHRpb25hbEN1c3RvbVN0eWxlcyk7XG4gICAgfSBlbHNlIGlmIChjb2xvciAhPT0gJ2hvbGxvdycpIHtcbiAgICAgIC8vIFRoaXMgaXMgYSBjdXN0b20gY29sb3IgdGhhdCBpcyBuZWl0aGVyIGZyb20gdGhlIGJhc2UgcGFsZXR0ZSBub3IgaG9sbG93XG4gICAgICAvLyBMZXQncyBkbyBvdXIgYmVzdCB0byBlbnN1cmUgdGhhdCBpdCBwcm92aWRlcyBzdWZmaWNpZW50IGNvbnRyYXN0XG4gICAgICAvLyBTZXQgZGFyayBvciBsaWdodCB0ZXh0IGNvbG9yIGJhc2VkIHVwb24gYmVzdCBjb250cmFzdFxuICAgICAgdGV4dENvbG9yID0gc2V0VGV4dENvbG9yKGNvbG9yKTsgLy8gQ2hlY2sgdGhlIGNvbnRyYXN0XG5cbiAgICAgIHdjYWdDb250cmFzdCA9IGdldENvbG9yQ29udHJhc3QodGV4dENvbG9yLCBjb2xvcik7XG5cbiAgICAgIGlmICh3Y2FnQ29udHJhc3QgPCB3Y2FnQ29udHJhc3RCYXNlKSB7XG4gICAgICAgIC8vIEl0J3MgbG93IGNvbnRyYXN0LCBzbyBsZXRzIHNob3cgYSB3YXJuaW5nIGluIHRoZSBjb25zb2xlXG4gICAgICAgIGNvbnNvbGUud2FybignV2FybmluZzogJywgY29sb3IsICcgYmFkZ2UgaGFzIGxvdyBjb250cmFzdCBvZiAnLCB3Y2FnQ29udHJhc3QudG9GaXhlZCgyKSwgJy4gU2hvdWxkIGJlIGFib3ZlICcsIHdjYWdDb250cmFzdEJhc2UsICcuJyk7XG4gICAgICB9XG5cbiAgICAgIG9wdGlvbmFsQ3VzdG9tU3R5bGVzID0gX29iamVjdFNwcmVhZCh7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogY29sb3IsXG4gICAgICAgIGNvbG9yOiB0ZXh0Q29sb3JcbiAgICAgIH0sIG9wdGlvbmFsQ3VzdG9tU3R5bGVzKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGhhbmRsZUludmFsaWRDb2xvcihjb2xvcik7XG4gIH1cblxuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUJhZGdlJywge1xuICAgICdldWlCYWRnZS1pc0NsaWNrYWJsZSc6IChvbkNsaWNrIHx8IGhyZWYpICYmICFpY29uT25DbGljayxcbiAgICAnZXVpQmFkZ2UtaXNEaXNhYmxlZCc6IGlzRGlzYWJsZWQsXG4gICAgJ2V1aUJhZGdlLS1ob2xsb3cnOiBjb2xvciA9PT0gJ2hvbGxvdydcbiAgfSwgaWNvblNpZGVUb0NsYXNzTmFtZU1hcFtpY29uU2lkZV0sIGNsYXNzTmFtZSk7XG4gIHZhciBjbG9zZUNsYXNzTmFtZXMgPSBjbGFzc05hbWVzKCdldWlCYWRnZV9faWNvbicsIGNsb3NlQnV0dG9uUHJvcHMgJiYgY2xvc2VCdXR0b25Qcm9wcy5jbGFzc05hbWUpO1xuICB2YXIgRWxlbWVudCA9IGhyZWYgJiYgIWlzRGlzYWJsZWQgPyAnYScgOiAnYnV0dG9uJztcbiAgdmFyIHJlbE9iaiA9IHt9O1xuXG4gIGlmIChocmVmICYmICFpc0Rpc2FibGVkKSB7XG4gICAgcmVsT2JqLmhyZWYgPSBocmVmO1xuICAgIHJlbE9iai50YXJnZXQgPSB0YXJnZXQ7XG4gICAgcmVsT2JqLnJlbCA9IGdldFNlY3VyZVJlbEZvclRhcmdldCh7XG4gICAgICBocmVmOiBocmVmLFxuICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICByZWw6IHJlbFxuICAgIH0pO1xuICB9XG5cbiAgaWYgKG9uQ2xpY2spIHtcbiAgICByZWxPYmoub25DbGljayA9IG9uQ2xpY2s7XG4gIH1cblxuICB2YXIgb3B0aW9uYWxJY29uID0gbnVsbDtcblxuICBpZiAoaWNvblR5cGUpIHtcbiAgICBpZiAoaWNvbk9uQ2xpY2spIHtcbiAgICAgIGlmICghaWNvbk9uQ2xpY2tBcmlhTGFiZWwpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdXaGVuIHBhc3NpbmcgdGhlIGljb25PbkNsaWNrIHByb3BzIHRvIEV1aUJhZGdlLCB5b3UgbXVzdCBhbHNvIHByb3ZpZGUgaWNvbk9uQ2xpY2tBcmlhTGFiZWwnKTtcbiAgICAgIH1cblxuICAgICAgb3B0aW9uYWxJY29uID0gX19fRW1vdGlvbkpTWChcImJ1dHRvblwiLCB7XG4gICAgICAgIHR5cGU6IFwiYnV0dG9uXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJldWlCYWRnZV9faWNvbkJ1dHRvblwiLFxuICAgICAgICBcImFyaWEtbGFiZWxcIjogaWNvbk9uQ2xpY2tBcmlhTGFiZWwsXG4gICAgICAgIGRpc2FibGVkOiBpc0Rpc2FibGVkLFxuICAgICAgICB0aXRsZTogaWNvbk9uQ2xpY2tBcmlhTGFiZWwsXG4gICAgICAgIG9uQ2xpY2s6IGljb25PbkNsaWNrXG4gICAgICB9LCBfX19FbW90aW9uSlNYKEV1aUljb24sIF9leHRlbmRzKHtcbiAgICAgICAgdHlwZTogaWNvblR5cGUsXG4gICAgICAgIHNpemU6IFwic1wiLFxuICAgICAgICBjb2xvcjogXCJpbmhlcml0XCIgLy8gZm9yY2VzIHRoZSBpY29uIHRvIGluaGVyaXQgaXRzIHBhcmVudCBjb2xvclxuXG4gICAgICB9LCBjbG9zZUJ1dHRvblByb3BzLCB7XG4gICAgICAgIGNsYXNzTmFtZTogY2xvc2VDbGFzc05hbWVzXG4gICAgICB9KSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvcHRpb25hbEljb24gPSBfX19FbW90aW9uSlNYKEV1aUljb24sIHtcbiAgICAgICAgdHlwZTogaWNvblR5cGUsXG4gICAgICAgIHNpemU6IGNoaWxkcmVuID8gJ3MnIDogJ20nLFxuICAgICAgICBjbGFzc05hbWU6IFwiZXVpQmFkZ2VfX2ljb25cIixcbiAgICAgICAgY29sb3I6IFwiaW5oZXJpdFwiIC8vIGZvcmNlcyB0aGUgaWNvbiB0byBpbmhlcml0IGl0cyBwYXJlbnQgY29sb3JcblxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKG9uQ2xpY2sgJiYgIW9uQ2xpY2tBcmlhTGFiZWwpIHtcbiAgICBjb25zb2xlLndhcm4oJ1doZW4gcGFzc2luZyBvbkNsaWNrIHRvIEV1aUJhZGdlLCB5b3UgbXVzdCBhbHNvIHByb3ZpZGUgb25DbGlja0FyaWFMYWJlbCcpO1xuICB9XG5cbiAgdmFyIGNvbnRlbnQgPSBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUJhZGdlX19jb250ZW50XCJcbiAgfSwgY2hpbGRyZW4gJiYgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlCYWRnZV9fdGV4dFwiXG4gIH0sIGNoaWxkcmVuKSwgb3B0aW9uYWxJY29uKTtcblxuICBpZiAoaWNvbk9uQ2xpY2spIHtcbiAgICByZXR1cm4gb25DbGljayB8fCBocmVmID8gX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgc3R5bGU6IG9wdGlvbmFsQ3VzdG9tU3R5bGVzXG4gICAgfSwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgICAgY2xhc3NOYW1lOiBcImV1aUJhZGdlX19jb250ZW50XCJcbiAgICB9LCBfX19FbW90aW9uSlNYKEV1aUlubmVyVGV4dCwgbnVsbCwgZnVuY3Rpb24gKHJlZiwgaW5uZXJUZXh0KSB7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFbGVtZW50LCBfZXh0ZW5kcyh7XG4gICAgICAgIGNsYXNzTmFtZTogXCJldWlCYWRnZV9fY2hpbGRCdXR0b25cIixcbiAgICAgICAgZGlzYWJsZWQ6IGlzRGlzYWJsZWQsXG4gICAgICAgIFwiYXJpYS1sYWJlbFwiOiBvbkNsaWNrQXJpYUxhYmVsLFxuICAgICAgICByZWY6IHJlZixcbiAgICAgICAgdGl0bGU6IGlubmVyVGV4dFxuICAgICAgfSwgcmVsT2JqLCByZXN0KSwgY2hpbGRyZW4pO1xuICAgIH0pLCBvcHRpb25hbEljb24pKSA6IF9fX0Vtb3Rpb25KU1goRXVpSW5uZXJUZXh0LCBudWxsLCBmdW5jdGlvbiAocmVmLCBpbm5lclRleHQpIHtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwic3BhblwiLCBfZXh0ZW5kcyh7XG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgc3R5bGU6IG9wdGlvbmFsQ3VzdG9tU3R5bGVzLFxuICAgICAgICByZWY6IHJlZixcbiAgICAgICAgdGl0bGU6IGlubmVyVGV4dFxuICAgICAgfSwgcmVzdCksIGNvbnRlbnQpO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKG9uQ2xpY2sgfHwgaHJlZikge1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUlubmVyVGV4dCwgbnVsbCwgZnVuY3Rpb24gKHJlZiwgaW5uZXJUZXh0KSB7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFbGVtZW50LCBfZXh0ZW5kcyh7XG4gICAgICAgIGRpc2FibGVkOiBpc0Rpc2FibGVkLFxuICAgICAgICBcImFyaWEtbGFiZWxcIjogb25DbGlja0FyaWFMYWJlbCxcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICBzdHlsZTogb3B0aW9uYWxDdXN0b21TdHlsZXMsXG4gICAgICAgIHJlZjogcmVmLFxuICAgICAgICB0aXRsZTogaW5uZXJUZXh0XG4gICAgICB9LCByZWxPYmosIHJlc3QpLCBjb250ZW50KTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlJbm5lclRleHQsIG51bGwsIGZ1bmN0aW9uIChyZWYsIGlubmVyVGV4dCkge1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIF9leHRlbmRzKHtcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICBzdHlsZTogb3B0aW9uYWxDdXN0b21TdHlsZXMsXG4gICAgICAgIHJlZjogcmVmLFxuICAgICAgICB0aXRsZTogaW5uZXJUZXh0XG4gICAgICB9LCByZXN0KSwgY29udGVudCk7XG4gICAgfSk7XG4gIH1cbn07XG5FdWlCYWRnZS5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgICAqIEFjY2VwdHMgYW55IHN0cmluZyBmcm9tIG91ciBpY29uIGxpYnJhcnlcbiAgICAgKi9cbiAgaWNvblR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhY2Nlc3NpYmlsaXR5XCIsIFwiYWRkRGF0YUFwcFwiLCBcImFkdmFuY2VkU2V0dGluZ3NBcHBcIiwgXCJhZ2VudEFwcFwiLCBcImFnZ3JlZ2F0ZVwiLCBcImFsZXJ0XCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbG9ja1wiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQUNpcmNsZUZpbGxlZFwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRvY3VtZW50XCIsIFwiZG9jdW1lbnRFZGl0XCIsIFwiZG9jdW1lbnRhdGlvblwiLCBcImRvY3VtZW50c1wiLCBcImRvdFwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJleGl0XCIsIFwiZXhwYW5kXCIsIFwiZXhwYW5kTWluaVwiLCBcImV4cG9ydEFjdGlvblwiLCBcImV5ZVwiLCBcImV5ZUNsb3NlZFwiLCBcImZhY2VIYXBweVwiLCBcImZhY2VOZXV0cmFsXCIsIFwiZmFjZVNhZFwiLCBcImZpbGViZWF0QXBwXCIsIFwiZmlsdGVyXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhDbG9zZVwiLCBcImluZGV4RWRpdFwiLCBcImluZGV4Rmx1c2hcIiwgXCJpbmRleE1hbmFnZW1lbnRBcHBcIiwgXCJpbmRleE1hcHBpbmdcIiwgXCJpbmRleE9wZW5cIiwgXCJpbmRleFBhdHRlcm5BcHBcIiwgXCJpbmRleFJvbGx1cEFwcFwiLCBcImluZGV4UnVudGltZVwiLCBcImluZGV4U2V0dGluZ3NcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibmFtZXNwYWNlXCIsIFwibmVzdGVkXCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZWxpbmVBcHBcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzQXBwXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpb25BcHBcIiwgXCJ0aW1lUmVmcmVzaFwiLCBcInRpbWVzbGlkZXJcIiwgXCJ0cmFpbmluZ1wiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZF0pLFxuXG4gIC8qKlxuICAgICAqIFRoZSBzaWRlIG9mIHRoZSBiYWRnZSB0aGUgaWNvbiBzaG91bGQgc2l0XG4gICAgICovXG4gIGljb25TaWRlOiBQcm9wVHlwZXMub25lT2YoW1wibGVmdFwiLCBcInJpZ2h0XCJdKSxcblxuICAvKipcbiAgICAgKiBBY2NlcHRzIGVpdGhlciBvdXIgcGFsZXR0ZSBjb2xvcnMgKHByaW1hcnksIHN1Y2Nlc3MgLi5ldGMpIG9yIGEgaGV4IHZhbHVlIGAjRkZGRkZGYCwgYCMwMDBgLlxuICAgICAqL1xuICBjb2xvcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWRdKSxcblxuICAvKipcbiAgICAgKiBXaWxsIG92ZXJyaWRlIGFueSBjb2xvciBwYXNzZWQgdGhyb3VnaCB0aGUgYGNvbG9yYCBwcm9wLlxuICAgICAqL1xuICBpc0Rpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBQcm9wcyBwYXNzZWQgdG8gdGhlIGNsb3NlIGJ1dHRvbi5cbiAgICAgKi9cbiAgY2xvc2VCdXR0b25Qcm9wczogUHJvcFR5cGVzLmFueSxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAqIFdpbGwgYXBwbHkgYW4gb25jbGljayB0byBpY29uIHdpdGhpbiB0aGUgYmFkZ2VcbiAgICAgKi9cbiAgaWNvbk9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgICAqIEFyaWEgbGFiZWwgYXBwbGllZCB0byB0aGUgaWNvbk9uQ2xpY2sgYnV0dG9uXG4gICAgICovXG4gIGljb25PbkNsaWNrQXJpYUxhYmVsOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIFdpbGwgYXBwbHkgYW4gb25jbGljayB0byB0aGUgYmFkZ2UgaXRzZWxmXG4gICAgICovXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgICAqIEFyaWEgbGFiZWwgYXBwbGllZCB0byB0aGUgb25DbGljayBidXR0b25cbiAgICAgKi9cbiAgb25DbGlja0FyaWFMYWJlbDogUHJvcFR5cGVzLmFueSxcbiAgaHJlZjogUHJvcFR5cGVzLnN0cmluZyxcbiAgdGFyZ2V0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICByZWw6IFByb3BUeXBlcy5zdHJpbmdcbn07XG5cbmZ1bmN0aW9uIGdldENvbG9yQ29udHJhc3QodGV4dENvbG9yLCBjb2xvcikge1xuICB2YXIgY29udHJhc3RWYWx1ZSA9IGNocm9tYS5jb250cmFzdCh0ZXh0Q29sb3IsIGNvbG9yKTtcbiAgcmV0dXJuIGNvbnRyYXN0VmFsdWU7XG59XG5cbmZ1bmN0aW9uIHNldFRleHRDb2xvcihiZ0NvbG9yKSB7XG4gIHZhciB0ZXh0Q29sb3IgPSBpc0NvbG9yRGFyay5hcHBseSh2b2lkIDAsIF90b0NvbnN1bWFibGVBcnJheShjaHJvbWEoYmdDb2xvcikucmdiKCkpKSA/IGNvbG9yR2hvc3QgOiBjb2xvckluaztcbiAgcmV0dXJuIHRleHRDb2xvcjtcbn1cblxuZnVuY3Rpb24gaGFuZGxlSW52YWxpZENvbG9yKGNvbG9yKSB7XG4gIHZhciBpc05hbWVkQ29sb3IgPSBjb2xvciAmJiBDT0xPUlMuaW5jbHVkZXMoY29sb3IpIHx8IGNvbG9yID09PSAnaG9sbG93JztcbiAgdmFyIGlzVmFsaWRDb2xvclN0cmluZyA9IGNvbG9yICYmIGNocm9tYVZhbGlkKHBhcnNlQ29sb3IoY29sb3IpIHx8ICcnKTtcblxuICBpZiAoIWlzTmFtZWRDb2xvciAmJiAhaXNWYWxpZENvbG9yU3RyaW5nKSB7XG4gICAgY29uc29sZS53YXJuKCdFdWlCYWRnZSBleHBlY3RzIGEgdmFsaWQgY29sb3IuIFRoaXMgY2FuIGVpdGhlciBiZSBhIHRocmVlIG9yIHNpeCAnICsgXCJjaGFyYWN0ZXIgaGV4IHZhbHVlLCByZ2IoYSkgdmFsdWUsIGhzdiB2YWx1ZSwgaG9sbG93LCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZzogXCIuY29uY2F0KENPTE9SUywgXCIuIFwiKSArIFwiSW5zdGVhZCBnb3QgXCIuY29uY2F0KGNvbG9yLCBcIi5cIikpO1xuICB9XG59IiwgImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBjaHJvbWEgZnJvbSAnY2hyb21hLWpzJztcbmV4cG9ydCB2YXIgZ2V0RXZlbnRQb3NpdGlvbiA9IGZ1bmN0aW9uIGdldEV2ZW50UG9zaXRpb24obG9jYXRpb24sIGNvbnRhaW5lcikge1xuICB2YXIgeCA9IGxvY2F0aW9uLngsXG4gICAgICB5ID0gbG9jYXRpb24ueTtcblxuICB2YXIgX2NvbnRhaW5lciRnZXRCb3VuZGluID0gY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFxuICAgICAgd2lkdGggPSBfY29udGFpbmVyJGdldEJvdW5kaW4ud2lkdGgsXG4gICAgICBoZWlnaHQgPSBfY29udGFpbmVyJGdldEJvdW5kaW4uaGVpZ2h0LFxuICAgICAgbGVmdCA9IF9jb250YWluZXIkZ2V0Qm91bmRpbi5sZWZ0LFxuICAgICAgdG9wID0gX2NvbnRhaW5lciRnZXRCb3VuZGluLnRvcDtcblxuICB2YXIgbGVmdFBvcyA9IHggLSAobGVmdCArIHdpbmRvdy5wYWdlWE9mZnNldCk7XG4gIHZhciB0b3BQb3MgPSB5IC0gKHRvcCArIHdpbmRvdy5wYWdlWU9mZnNldCk7XG5cbiAgaWYgKGxlZnRQb3MgPCAwKSB7XG4gICAgbGVmdFBvcyA9IDA7XG4gIH0gZWxzZSBpZiAobGVmdFBvcyA+IHdpZHRoKSB7XG4gICAgbGVmdFBvcyA9IHdpZHRoO1xuICB9XG5cbiAgaWYgKHRvcFBvcyA8IDApIHtcbiAgICB0b3BQb3MgPSAwO1xuICB9IGVsc2UgaWYgKHRvcFBvcyA+IGhlaWdodCkge1xuICAgIHRvcFBvcyA9IGhlaWdodDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbGVmdDogbGVmdFBvcyxcbiAgICB0b3A6IHRvcFBvcyxcbiAgICB3aWR0aDogd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHRcbiAgfTtcbn07XG5leHBvcnQgdmFyIEhFWF9GQUxMQkFDSyA9ICcnO1xuZXhwb3J0IHZhciBIU1ZfRkFMTEJBQ0sgPSBbMCwgMCwgMF07XG5leHBvcnQgdmFyIFJHQl9GQUxMQkFDSyA9IFtOYU4sIE5hTiwgTmFOLCAxXTtcbmV4cG9ydCB2YXIgUkdCX0pPSU4gPSAnLCAnOyAvLyBHaXZlbiBhIHN0cmluZywgdGhpcyBhdHRlbXB0cyB0byByZXR1cm4gYSBmb3JtYXQgdGhhdCBjYW4gYmUgY29uc3VtZWQgYnkgY2hyb21hLWpzXG5cbmV4cG9ydCB2YXIgcGFyc2VDb2xvciA9IGZ1bmN0aW9uIHBhcnNlQ29sb3IoaW5wdXQpIHtcbiAgdmFyIHBhcnNlZDtcbiAgaWYgKCFpbnB1dCkgcmV0dXJuIG51bGw7XG5cbiAgaWYgKGlucHV0LmluZGV4T2YoJywnKSA+IDApIHtcbiAgICBpZiAoIS9eW1xccywuMC05XSokLy50ZXN0KGlucHV0KSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdmFyIHJnYiA9IGlucHV0LnRyaW0oKS5zcGxpdCgnLCcpLmZpbHRlcihmdW5jdGlvbiAobikge1xuICAgICAgcmV0dXJuIG4gIT09ICcnO1xuICAgIH0pLm1hcChOdW1iZXIpO1xuICAgIHBhcnNlZCA9IHJnYi5sZW5ndGggPiAyICYmIHJnYi5sZW5ndGggPCA1ID8gcmdiIDogSEVYX0ZBTExCQUNLO1xuICB9IGVsc2Uge1xuICAgIHBhcnNlZCA9IGlucHV0O1xuICB9XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn07IC8vIFJldHVybnMgd2hldGhlciB0aGUgZ2l2ZW4gaW5wdXQgd2lsbCByZXR1cm4gYSB2YWxpZCBjaHJvbWEtanMgb2JqZWN0IHdoZW4gZGVzaWduYXRlZCBhcyBvbmUgb2Zcbi8vIHRoZSBhY2NlcHRhYmxlIGZvcm1hdHM6IGhleCwgcmdiLCByZ2JhXG5cbmV4cG9ydCB2YXIgY2hyb21hVmFsaWQgPSBmdW5jdGlvbiBjaHJvbWFWYWxpZChjb2xvcikge1xuICB2YXIgcGFyc2VkID0gY29sb3I7XG5cbiAgaWYgKHR5cGVvZiBjb2xvciA9PT0gJ3N0cmluZycpIHtcbiAgICBwYXJzZWQgPSBwYXJzZUNvbG9yKGNvbG9yKTtcbiAgfVxuXG4gIGlmICghcGFyc2VkKSByZXR1cm4gZmFsc2U7XG5cbiAgaWYgKF90eXBlb2YocGFyc2VkKSA9PT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gY2hyb21hLnZhbGlkKHBhcnNlZCwgJ3JnYicpIHx8IGNocm9tYS52YWxpZChwYXJzZWQsICdyZ2JhJyk7XG4gIH1cblxuICByZXR1cm4gY2hyb21hLnZhbGlkKGNvbG9yLCAnaGV4Jyk7XG59OyAvLyBHaXZlbiBhbiBpbnB1dCBhbmQgb3BhY2l0eSBjb25maWd1cmF0aW9uLCB0aGlzIHJldHVybnMgYSB2YWxpZCBjaHJvbWEtanMgb2JqZWN0XG5cbmV4cG9ydCB2YXIgZ2V0Q2hyb21hQ29sb3IgPSBmdW5jdGlvbiBnZXRDaHJvbWFDb2xvcihpbnB1dCkge1xuICB2YXIgYWxsb3dPcGFjaXR5ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmYWxzZTtcbiAgdmFyIHBhcnNlZCA9IHBhcnNlQ29sb3IoaW5wdXQpO1xuXG4gIGlmIChwYXJzZWQgJiYgY2hyb21hVmFsaWQocGFyc2VkKSkge1xuICAgIC8vIHR5cGUgZ3VhcmQgZm9yIHRoZSBmdW5jdGlvbiBvdmVybG9hZFxuICAgIHZhciBjaHJvbWFDb2xvciA9IF90eXBlb2YocGFyc2VkKSA9PT0gJ29iamVjdCcgPyBjaHJvbWEocGFyc2VkKSA6IGNocm9tYShwYXJzZWQpO1xuXG4gICAgaWYgKCFhbGxvd09wYWNpdHkgJiYgY2hyb21hQ29sb3IuYWxwaGEoKSA8IDEpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBjaHJvbWFDb2xvcjtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufTsgLy8gR2l2ZW4gYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoIGtleSB2YWx1ZSBwYWlycyBzdG9wL2NvbG9yIHJldHVybnMgYSBjc3MgbGluZWFyLWdyYWRpZW50XG4vLyBPciBnaXZlbiBhbiBhcnJheSBvZiBoZXggY29sb3JzIHJldHVybnMgYSBjc3MgbGluZWFyLWdyYWRpZW50XG5cbmV4cG9ydCB2YXIgZ2V0TGluZWFyR3JhZGllbnQgPSBmdW5jdGlvbiBnZXRMaW5lYXJHcmFkaWVudChwYWxldHRlKSB7XG4gIHZhciBsYXN0Q29sb3JTdG9wQXJyYXlQb3NpdGlvbiA9IHBhbGV0dGUubGVuZ3RoIC0gMTtcbiAgdmFyIGxpbmVhckdyYWRpZW50O1xuICB2YXIgcGFsZXR0ZUhhc1N0b3BzID0gcGFsZXR0ZS5zb21lKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgcmV0dXJuIF90eXBlb2YoaXRlbSkgPT09ICdvYmplY3QnO1xuICB9KTtcblxuICBpZiAocGFsZXR0ZUhhc1N0b3BzKSB7XG4gICAgdmFyIHBhbGV0dGVDb2xvclN0b3AgPSBwYWxldHRlO1xuICAgIGxpbmVhckdyYWRpZW50ID0gXCJsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIFwiLmNvbmNhdChwYWxldHRlQ29sb3JTdG9wWzBdLmNvbG9yLCBcIiAwJSxcIik7XG4gICAgdmFyIGxhc3RDb2xvclN0b3BEZWNpbWFsID0gMTAwIC8gcGFsZXR0ZUNvbG9yU3RvcFtsYXN0Q29sb3JTdG9wQXJyYXlQb3NpdGlvbl0uc3RvcDtcblxuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgbGFzdENvbG9yU3RvcEFycmF5UG9zaXRpb247IGkrKykge1xuICAgICAgbGluZWFyR3JhZGllbnQgPSBcIlwiLmNvbmNhdChsaW5lYXJHcmFkaWVudCwgXCIgXCIpLmNvbmNhdChwYWxldHRlQ29sb3JTdG9wW2ldLmNvbG9yLCBcIiBcIikuY29uY2F0KE1hdGguZmxvb3IocGFsZXR0ZUNvbG9yU3RvcFtpXS5zdG9wICogbGFzdENvbG9yU3RvcERlY2ltYWwpLCBcIiUsXCIpO1xuICAgIH1cblxuICAgIHZhciBsaW5lYXJHcmFkaWVudFN0eWxlID0gXCJcIi5jb25jYXQobGluZWFyR3JhZGllbnQsIFwiIFwiKS5jb25jYXQocGFsZXR0ZUNvbG9yU3RvcFtsYXN0Q29sb3JTdG9wQXJyYXlQb3NpdGlvbl0uY29sb3IsIFwiIDEwMCUpXCIpO1xuICAgIHJldHVybiBsaW5lYXJHcmFkaWVudFN0eWxlO1xuICB9IGVsc2Uge1xuICAgIGxpbmVhckdyYWRpZW50ID0gXCJsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIFwiLmNvbmNhdChwYWxldHRlWzBdLCBcIiAwJSxcIik7XG5cbiAgICBmb3IgKHZhciBfaSA9IDE7IF9pIDwgbGFzdENvbG9yU3RvcEFycmF5UG9zaXRpb247IF9pKyspIHtcbiAgICAgIGxpbmVhckdyYWRpZW50ID0gXCJcIi5jb25jYXQobGluZWFyR3JhZGllbnQsIFwiIFwiKS5jb25jYXQocGFsZXR0ZVtfaV0sIFwiIFwiKS5jb25jYXQoTWF0aC5mbG9vcigxMDAgKiBfaSAvIGxhc3RDb2xvclN0b3BBcnJheVBvc2l0aW9uKSwgXCIlLFwiKTtcbiAgICB9XG5cbiAgICB2YXIgX2xpbmVhckdyYWRpZW50U3R5bGUgPSBcIlwiLmNvbmNhdChsaW5lYXJHcmFkaWVudCwgXCIgXCIpLmNvbmNhdChwYWxldHRlW2xhc3RDb2xvclN0b3BBcnJheVBvc2l0aW9uXSwgXCIgMTAwJSlcIik7XG5cbiAgICByZXR1cm4gX2xpbmVhckdyYWRpZW50U3R5bGU7XG4gIH1cbn07IC8vIEdpdmVuIGFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCBrZXkgdmFsdWUgcGFpcnMgc3RvcC9jb2xvciBvciBhbiBhcnJheSBvZiBoZXggY29sb3JzXG4vLyByZXR1cm5zIGFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCBrZXkgdmFsdWUgcGFpcnMgY29sb3Ivd2lkdGhcblxuZXhwb3J0IHZhciBnZXRGaXhlZExpbmVhckdyYWRpZW50ID0gZnVuY3Rpb24gZ2V0Rml4ZWRMaW5lYXJHcmFkaWVudChwYWxldHRlKSB7XG4gIHZhciBwYWxldHRlSGFzU3RvcHMgPSBwYWxldHRlLnNvbWUoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICByZXR1cm4gX3R5cGVvZihpdGVtKSA9PT0gJ29iamVjdCc7XG4gIH0pO1xuXG4gIGlmIChwYWxldHRlSGFzU3RvcHMpIHtcbiAgICB2YXIgcGFsZXR0ZUNvbG9yU3RvcCA9IHBhbGV0dGU7XG4gICAgdmFyIGZpeGVkTGluZWFyR3JhZGllbnRXaXRoU3RvcHMgPSBwYWxldHRlQ29sb3JTdG9wLm1hcChmdW5jdGlvbiAoY29sb3JTdG9wLCBpbmRleCkge1xuICAgICAgdmFyIGxhc3RDb2xvclN0b3BBcnJheVBvc2l0aW9uID0gcGFsZXR0ZS5sZW5ndGggLSAxO1xuICAgICAgdmFyIGxhc3RDb2xvclN0b3BEZWNpbWFsID0gMTAwIC8gcGFsZXR0ZUNvbG9yU3RvcFtsYXN0Q29sb3JTdG9wQXJyYXlQb3NpdGlvbl0uc3RvcDtcbiAgICAgIHZhciBpc0ZpcnN0Q29sb3JTdG9wID0gaW5kZXggPT09IDA7XG4gICAgICB2YXIgcHJldmlvdXNDb2xvclN0b3BXaWR0aDtcblxuICAgICAgaWYgKGlzRmlyc3RDb2xvclN0b3ApIHtcbiAgICAgICAgcHJldmlvdXNDb2xvclN0b3BXaWR0aCA9IDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcmV2aW91c0NvbG9yU3RvcFdpZHRoID0gTWF0aC5mbG9vcihwYWxldHRlQ29sb3JTdG9wW2luZGV4IC0gMV0uc3RvcCAqIGxhc3RDb2xvclN0b3BEZWNpbWFsKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGN1cnJlbnRDb2xvclN0b3BXaWR0aCA9IE1hdGguZmxvb3IoY29sb3JTdG9wLnN0b3AgKiBsYXN0Q29sb3JTdG9wRGVjaW1hbCk7XG4gICAgICB2YXIgY29sb3JTdG9wV2lkdGggPSBjdXJyZW50Q29sb3JTdG9wV2lkdGggLSBwcmV2aW91c0NvbG9yU3RvcFdpZHRoO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29sb3I6IGNvbG9yU3RvcC5jb2xvcixcbiAgICAgICAgd2lkdGg6IFwiXCIuY29uY2F0KGNvbG9yU3RvcFdpZHRoLCBcIiVcIilcbiAgICAgIH07XG4gICAgfSk7XG4gICAgcmV0dXJuIGZpeGVkTGluZWFyR3JhZGllbnRXaXRoU3RvcHM7XG4gIH0gZWxzZSB7XG4gICAgdmFyIF9wYWxldHRlQ29sb3JTdG9wID0gcGFsZXR0ZTtcbiAgICB2YXIgcGFsZXR0ZVdpZHRoID0gMTAwIC8gcGFsZXR0ZS5sZW5ndGg7XG5cbiAgICB2YXIgZml4ZWRMaW5lYXJHcmFkaWVudFdpZHRoQXV0byA9IF9wYWxldHRlQ29sb3JTdG9wLm1hcChmdW5jdGlvbiAoaGV4Q29kZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29sb3I6IGhleENvZGUsXG4gICAgICAgIHdpZHRoOiBcIlwiLmNvbmNhdChwYWxldHRlV2lkdGgsIFwiJVwiKVxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIHJldHVybiBmaXhlZExpbmVhckdyYWRpZW50V2lkdGhBdXRvO1xuICB9XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwibGFiZWxcIiwgXCJjb2xvclwiLCBcInRvb2x0aXBDb250ZW50XCIsIFwidG9vbHRpcFBvc2l0aW9uXCIsIFwidGl0bGVcIiwgXCJpY29uVHlwZVwiLCBcIm9uQ2xpY2tcIiwgXCJvbkNsaWNrQXJpYUxhYmVsXCIsIFwiaHJlZlwiLCBcInJlbFwiLCBcInRhcmdldFwiLCBcInNpemVcIl07XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBGcmFnbWVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsga2V5c09mIH0gZnJvbSAnLi4vLi4vY29tbW9uJztcbmltcG9ydCB7IGdldFNlY3VyZVJlbEZvclRhcmdldCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aVRvb2xUaXAgfSBmcm9tICcuLi8uLi90b29sX3RpcCc7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vLi4vaWNvbic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIGNvbG9yVG9DbGFzc01hcCA9IHtcbiAgYWNjZW50OiAnZXVpQmV0YUJhZGdlLS1hY2NlbnQnLFxuICBzdWJkdWVkOiAnZXVpQmV0YUJhZGdlLS1zdWJkdWVkJyxcbiAgaG9sbG93OiAnZXVpQmV0YUJhZGdlLS1ob2xsb3cnXG59O1xuZXhwb3J0IHZhciBDT0xPUlMgPSBrZXlzT2YoY29sb3JUb0NsYXNzTWFwKTtcbmV4cG9ydCB2YXIgc2l6ZVRvQ2xhc3NNYXAgPSB7XG4gIHM6ICdldWlCZXRhQmFkZ2UtLXNtYWxsJyxcbiAgbTogbnVsbFxufTtcbmV4cG9ydCB2YXIgU0laRVMgPSBrZXlzT2Yoc2l6ZVRvQ2xhc3NNYXApO1xuZXhwb3J0IHZhciBFdWlCZXRhQmFkZ2UgPSBmdW5jdGlvbiBFdWlCZXRhQmFkZ2UoX3JlZikge1xuICB2YXIgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBsYWJlbCA9IF9yZWYubGFiZWwsXG4gICAgICBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2hvbGxvdycgOiBfcmVmJGNvbG9yLFxuICAgICAgdG9vbHRpcENvbnRlbnQgPSBfcmVmLnRvb2x0aXBDb250ZW50LFxuICAgICAgX3JlZiR0b29sdGlwUG9zaXRpb24gPSBfcmVmLnRvb2x0aXBQb3NpdGlvbixcbiAgICAgIHRvb2x0aXBQb3NpdGlvbiA9IF9yZWYkdG9vbHRpcFBvc2l0aW9uID09PSB2b2lkIDAgPyAndG9wJyA6IF9yZWYkdG9vbHRpcFBvc2l0aW9uLFxuICAgICAgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgaWNvblR5cGUgPSBfcmVmLmljb25UeXBlLFxuICAgICAgb25DbGljayA9IF9yZWYub25DbGljayxcbiAgICAgIG9uQ2xpY2tBcmlhTGFiZWwgPSBfcmVmLm9uQ2xpY2tBcmlhTGFiZWwsXG4gICAgICBocmVmID0gX3JlZi5ocmVmLFxuICAgICAgcmVsID0gX3JlZi5yZWwsXG4gICAgICB0YXJnZXQgPSBfcmVmLnRhcmdldCxcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/ICdtJyA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgc2luZ2xlTGV0dGVyID0gZmFsc2U7XG5cbiAgaWYgKHR5cGVvZiBsYWJlbCA9PT0gJ3N0cmluZycgJiYgbGFiZWwubGVuZ3RoID09PSAxKSB7XG4gICAgc2luZ2xlTGV0dGVyID0gdHJ1ZTtcbiAgfVxuXG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpQmV0YUJhZGdlJywge1xuICAgICdldWlCZXRhQmFkZ2UtLWljb25Pbmx5JzogaWNvblR5cGUsXG4gICAgJ2V1aUJldGFCYWRnZS0tc2luZ2xlTGV0dGVyJzogc2luZ2xlTGV0dGVyLFxuICAgICdldWlCZXRhQmFkZ2UtaXNDbGlja2FibGUnOiBvbkNsaWNrIHx8IGhyZWZcbiAgfSwgY29sb3JUb0NsYXNzTWFwW2NvbG9yXSwgc2l6ZVRvQ2xhc3NNYXBbc2l6ZV0sIGNsYXNzTmFtZSk7XG4gIHZhciBpY29uO1xuXG4gIGlmIChpY29uVHlwZSkge1xuICAgIGljb24gPSBfX19FbW90aW9uSlNYKEV1aUljb24sIHtcbiAgICAgIGNsYXNzTmFtZTogXCJldWlCZXRhQmFkZ2VfX2ljb25cIixcbiAgICAgIHR5cGU6IGljb25UeXBlLFxuICAgICAgc2l6ZTogc2l6ZSA9PT0gJ20nID8gJ20nIDogJ3MnLFxuICAgICAgXCJhcmlhLWhpZGRlblwiOiBcInRydWVcIixcbiAgICAgIGNvbG9yOiBcImluaGVyaXRcIiAvLyBmb3JjZXMgdGhlIGljb24gdG8gaW5oZXJpdCBpdHMgcGFyZW50IGNvbG9yXG5cbiAgICB9KTtcbiAgfVxuXG4gIHZhciBFbGVtZW50ID0gaHJlZiA/ICdhJyA6ICdidXR0b24nO1xuICB2YXIgcmVsT2JqID0ge307XG5cbiAgaWYgKGhyZWYpIHtcbiAgICByZWxPYmouaHJlZiA9IGhyZWY7XG4gICAgcmVsT2JqLnRhcmdldCA9IHRhcmdldDtcbiAgICByZWxPYmoucmVsID0gZ2V0U2VjdXJlUmVsRm9yVGFyZ2V0KHtcbiAgICAgIGhyZWY6IGhyZWYsXG4gICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgIHJlbDogcmVsXG4gICAgfSk7XG4gIH1cblxuICBpZiAob25DbGljaykge1xuICAgIHJlbE9iai5vbkNsaWNrID0gb25DbGljaztcbiAgfVxuXG4gIHZhciBjb250ZW50O1xuXG4gIGlmIChvbkNsaWNrIHx8IGhyZWYpIHtcbiAgICBjb250ZW50ID0gX19fRW1vdGlvbkpTWChFbGVtZW50LCBfZXh0ZW5kcyh7XG4gICAgICBcImFyaWEtbGFiZWxcIjogb25DbGlja0FyaWFMYWJlbCxcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgIHRpdGxlOiB0eXBlb2YgbGFiZWwgPT09ICdzdHJpbmcnID8gbGFiZWwgOiB0aXRsZVxuICAgIH0sIHJlbE9iaiwgcmVzdCksIGljb24gfHwgbGFiZWwpO1xuXG4gICAgaWYgKHRvb2x0aXBDb250ZW50KSB7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlUb29sVGlwLCB7XG4gICAgICAgIHBvc2l0aW9uOiB0b29sdGlwUG9zaXRpb24sXG4gICAgICAgIGNvbnRlbnQ6IHRvb2x0aXBDb250ZW50LFxuICAgICAgICB0aXRsZTogdGl0bGUgfHwgbGFiZWxcbiAgICAgIH0sIGNvbnRlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChGcmFnbWVudCwgbnVsbCwgY29udGVudCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmICh0b29sdGlwQ29udGVudCkge1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpVG9vbFRpcCwge1xuICAgICAgICBwb3NpdGlvbjogdG9vbHRpcFBvc2l0aW9uLFxuICAgICAgICBjb250ZW50OiB0b29sdGlwQ29udGVudCxcbiAgICAgICAgdGl0bGU6IHRpdGxlIHx8IGxhYmVsXG4gICAgICB9LCBfX19FbW90aW9uSlNYKFwic3BhblwiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHRhYkluZGV4OiAwLFxuICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgIHJvbGU6IFwiYnV0dG9uXCJcbiAgICAgIH0sIHJlc3QpLCBpY29uIHx8IGxhYmVsKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBzcGFuVGl0bGUgPSB0aXRsZSB8fCBsYWJlbDtcblxuICAgICAgaWYgKHNwYW5UaXRsZSAmJiB0eXBlb2Ygc3BhblRpdGxlICE9PSAnc3RyaW5nJykge1xuICAgICAgICBjb25zb2xlLndhcm4oXCJPbmx5IHN0cmluZyB0aXRsZXMgYXJlIHBlcm1pdHRlZCBvbiBiYWRnZXMgdGhhdCBkbyBub3QgdXNlIHRvb2x0aXBzLiBGb3VuZDogXCIuY29uY2F0KF90eXBlb2Yoc3BhblRpdGxlKSkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcInNwYW5cIiwgX2V4dGVuZHMoe1xuICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgIHRpdGxlOiBzcGFuVGl0bGVcbiAgICAgIH0sIHJlc3QpLCBpY29uIHx8IGxhYmVsKTtcbiAgICB9XG4gIH1cbn07XG5FdWlCZXRhQmFkZ2UucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogV2lsbCBhcHBseSBhbiBvbmNsaWNrIHRvIHRoZSBiYWRnZSBpdHNlbGZcbiAgICAgKi9cbiAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAgICogQXJpYSBsYWJlbCBhcHBsaWVkIHRvIHRoZSBvbkNsaWNrIGJ1dHRvblxuICAgICAqL1xuICBvbkNsaWNrQXJpYUxhYmVsOiBQcm9wVHlwZXMuYW55LFxuICBocmVmOiBQcm9wVHlwZXMuc3RyaW5nLFxuICB0YXJnZXQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHJlbDogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgKiBTdXBwbHkgYW4gaWNvbiB0eXBlIGlmIHRoZSBiYWRnZSBzaG91bGQganVzdCBiZSBhbiBpY29uXG4gICAgICovXG4gIGljb25UeXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbGVydFwiLCBcImFuYWx5emVFdmVudFwiLCBcImFubm90YXRpb25cIiwgXCJhcG1BcHBcIiwgXCJhcG1UcmFjZVwiLCBcImFwcFNlYXJjaEFwcFwiLCBcImFwcHNcIiwgXCJhcnJvd0Rvd25cIiwgXCJhcnJvd0xlZnRcIiwgXCJhcnJvd1JpZ2h0XCIsIFwiYXJyb3dVcFwiLCBcImFycm93U3RhcnRcIiwgXCJhcnJvd0VuZFwiLCBcImFzdGVyaXNrXCIsIFwiYXVkaXRiZWF0QXBwXCIsIFwiYmVha2VyXCIsIFwiYmVsbFwiLCBcImJlbGxTbGFzaFwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGVja1wiLCBcImNoZWNrSW5DaXJjbGVGaWxsZWRcIiwgXCJjaGVlclwiLCBcImNsYXNzaWZpY2F0aW9uSm9iXCIsIFwiY2xvY2tcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkFDaXJjbGVGaWxsZWRcIiwgXCJjcm9zc2hhaXJzXCIsIFwiY3VycmVuY3lcIiwgXCJjdXRcIiwgXCJkYXNoYm9hcmRBcHBcIiwgXCJkYXRhVmlzdWFsaXplclwiLCBcImRhdGFiYXNlXCIsIFwiZGVza3RvcFwiLCBcImRldlRvb2xzQXBwXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZXFsXCIsIFwiZXJhc2VyXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZsYWdcIiwgXCJmbGVldEFwcFwiLCBcImZvbGRcIiwgXCJmb2xkZXJDaGVja1wiLCBcImZvbGRlckNsb3NlZFwiLCBcImZvbGRlckV4Y2xhbWF0aW9uXCIsIFwiZm9sZGVyT3BlblwiLCBcImZyYW1lTmV4dFwiLCBcImZyYW1lUHJldmlvdXNcIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFNjcmVlbkV4aXRcIiwgXCJmdW5jdGlvblwiLCBcImdlYXJcIiwgXCJnaXNBcHBcIiwgXCJnbGFzc2VzXCIsIFwiZ2xvYmVcIiwgXCJncmFiXCIsIFwiZ3JhYkhvcml6b250YWxcIiwgXCJncmFwaEFwcFwiLCBcImdyaWRcIiwgXCJncm9rQXBwXCIsIFwiaGVhcnRcIiwgXCJoZWFydGJlYXRBcHBcIiwgXCJoZWF0bWFwXCIsIFwiaGVscFwiLCBcImhvbWVcIiwgXCJpSW5DaXJjbGVcIiwgXCJpbWFnZVwiLCBcImltcG9ydEFjdGlvblwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5wdXRPdXRwdXRcIiwgXCJpbnNwZWN0XCIsIFwiaW52ZXJ0XCIsIFwiaXBcIiwgXCJrZXlib2FyZFwiLCBcImtxbEZpZWxkXCIsIFwia3FsRnVuY3Rpb25cIiwgXCJrcWxPcGVyYW5kXCIsIFwia3FsU2VsZWN0b3JcIiwgXCJrcWxWYWx1ZVwiLCBcImt1YmVybmV0ZXNOb2RlXCIsIFwia3ViZXJuZXRlc1BvZFwiLCBcImxheWVyc1wiLCBcImxlbnNBcHBcIiwgXCJsZXR0ZXJpbmdcIiwgXCJsaW5lRGFzaGVkXCIsIFwibGluZURvdHRlZFwiLCBcImxpbmVTb2xpZFwiLCBcImxpbmtcIiwgXCJsaXN0XCIsIFwibGlzdEFkZFwiLCBcImxvY2tcIiwgXCJsb2NrT3BlblwiLCBcImxvZ29BV1NcIiwgXCJsb2dvQVdTTW9ub1wiLCBcImxvZ29BZXJvc3Bpa2VcIiwgXCJsb2dvQXBhY2hlXCIsIFwibG9nb0FwcFNlYXJjaFwiLCBcImxvZ29BenVyZVwiLCBcImxvZ29BenVyZU1vbm9cIiwgXCJsb2dvQmVhdHNcIiwgXCJsb2dvQnVzaW5lc3NBbmFseXRpY3NcIiwgXCJsb2dvQ2VwaFwiLCBcImxvZ29DbG91ZFwiLCBcImxvZ29DbG91ZEVudGVycHJpc2VcIiwgXCJsb2dvQ29kZVwiLCBcImxvZ29Db2Rlc2FuZGJveFwiLCBcImxvZ29Db3VjaGJhc2VcIiwgXCJsb2dvRG9ja2VyXCIsIFwibG9nb0Ryb3B3aXphcmRcIiwgXCJsb2dvRWxhc3RpY1wiLCBcImxvZ29FbGFzdGljU3RhY2tcIiwgXCJsb2dvRWxhc3RpY3NlYXJjaFwiLCBcImxvZ29FbnRlcnByaXNlU2VhcmNoXCIsIFwibG9nb0V0Y2RcIiwgXCJsb2dvR0NQXCIsIFwibG9nb0dDUE1vbm9cIiwgXCJsb2dvR2l0aHViXCIsIFwibG9nb0dtYWlsXCIsIFwibG9nb0dvbGFuZ1wiLCBcImxvZ29Hb29nbGVHXCIsIFwibG9nb0hBcHJveHlcIiwgXCJsb2dvSUJNXCIsIFwibG9nb0lCTU1vbm9cIiwgXCJsb2dvS2Fma2FcIiwgXCJsb2dvS2liYW5hXCIsIFwibG9nb0t1YmVybmV0ZXNcIiwgXCJsb2dvTG9nZ2luZ1wiLCBcImxvZ29Mb2dzdGFzaFwiLCBcImxvZ29NYXBzXCIsIFwibG9nb01lbWNhY2hlZFwiLCBcImxvZ29NZXRyaWNzXCIsIFwibG9nb01vbmdvZGJcIiwgXCJsb2dvTXlTUUxcIiwgXCJsb2dvTmdpbnhcIiwgXCJsb2dvT2JzZXJ2YWJpbGl0eVwiLCBcImxvZ29Pc3F1ZXJ5XCIsIFwibG9nb1BocFwiLCBcImxvZ29Qb3N0Z3Jlc1wiLCBcImxvZ29Qcm9tZXRoZXVzXCIsIFwibG9nb1JhYmJpdG1xXCIsIFwibG9nb1JlZGlzXCIsIFwibG9nb1NlY3VyaXR5XCIsIFwibG9nb1NpdGVTZWFyY2hcIiwgXCJsb2dvU2tldGNoXCIsIFwibG9nb1NsYWNrXCIsIFwibG9nb1VwdGltZVwiLCBcImxvZ29XZWJob29rXCIsIFwibG9nb1dpbmRvd3NcIiwgXCJsb2dvV29ya3BsYWNlU2VhcmNoXCIsIFwibG9nc0FwcFwiLCBcImxvZ3N0YXNoRmlsdGVyXCIsIFwibG9nc3Rhc2hJZlwiLCBcImxvZ3N0YXNoSW5wdXRcIiwgXCJsb2dzdGFzaE91dHB1dFwiLCBcImxvZ3N0YXNoUXVldWVcIiwgXCJtYWNoaW5lTGVhcm5pbmdBcHBcIiwgXCJtYWduZXRcIiwgXCJtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uXCIsIFwibWFnbmlmeVdpdGhNaW51c1wiLCBcIm1hZ25pZnlXaXRoUGx1c1wiLCBcIm1hbmFnZW1lbnRBcHBcIiwgXCJtYXBNYXJrZXJcIiwgXCJtZW1vcnlcIiwgXCJtZW51XCIsIFwibWVudURvd25cIiwgXCJtZW51TGVmdFwiLCBcIm1lbnVSaWdodFwiLCBcIm1lbnVVcFwiLCBcIm1lcmdlXCIsIFwibWV0cmljYmVhdEFwcFwiLCBcIm1ldHJpY3NBcHBcIiwgXCJtaW5pbWl6ZVwiLCBcIm1pbnVzXCIsIFwibWludXNJbkNpcmNsZVwiLCBcIm1pbnVzSW5DaXJjbGVGaWxsZWRcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5vZGVcIiwgXCJub3RlYm9va0FwcFwiLCBcIm51bWJlclwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIiwgXCJvdXRsaWVyRGV0ZWN0aW9uSm9iXCIsIFwicGFja2FnZVwiLCBcInBhY2tldGJlYXRBcHBcIiwgXCJwYWdlU2VsZWN0XCIsIFwicGFnZXNTZWxlY3RcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVsaW5lQXBwXCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNub3dmbGFrZVwiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc0FwcFwiLCBcInNxbEFwcFwiLCBcInN0YXJFbXB0eVwiLCBcInN0YXJFbXB0eVNwYWNlXCIsIFwic3RhckZpbGxlZFwiLCBcInN0YXJGaWxsZWRTcGFjZVwiLCBcInN0YXJNaW51c0VtcHR5XCIsIFwic3Rhck1pbnVzRmlsbGVkXCIsIFwic3RhclBsdXNFbXB0eVwiLCBcInN0YXJQbHVzRmlsbGVkXCIsIFwic3RhdHNcIiwgXCJzdG9wXCIsIFwic3RvcEZpbGxlZFwiLCBcInN0b3BTbGFzaFwiLCBcInN0b3JhZ2VcIiwgXCJzdHJpbmdcIiwgXCJzdWJtb2R1bGVcIiwgXCJzdW5cIiwgXCJzd2F0Y2hJbnB1dFwiLCBcInN5bWxpbmtcIiwgXCJ0YWJsZURlbnNpdHlDb21wYWN0XCIsIFwidGFibGVEZW5zaXR5RXhwYW5kZWRcIiwgXCJ0YWJsZURlbnNpdHlOb3JtYWxcIiwgXCJ0YWJsZU9mQ29udGVudHNcIiwgXCJ0YWdcIiwgXCJ0ZWFyXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJ0aW1lbGluZVwiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFzaFwiLCBcInVuZm9sZFwiLCBcInVubGlua1wiLCBcInVwZ3JhZGVBc3Npc3RhbnRBcHBcIiwgXCJ1cHRpbWVBcHBcIiwgXCJ1c2VyXCIsIFwidXNlckF2YXRhclwiLCBcInVzZXJzXCIsIFwidXNlcnNSb2xlc0FwcFwiLCBcInZlY3RvclwiLCBcInZpZGVvUGxheWVyXCIsIFwidmlzQXJlYVwiLCBcInZpc0FyZWFTdGFja2VkXCIsIFwidmlzQmFySG9yaXpvbnRhbFwiLCBcInZpc0Jhckhvcml6b250YWxTdGFja2VkXCIsIFwidmlzQmFyVmVydGljYWxcIiwgXCJ2aXNCYXJWZXJ0aWNhbFN0YWNrZWRcIiwgXCJ2aXNHYXVnZVwiLCBcInZpc0dvYWxcIiwgXCJ2aXNMaW5lXCIsIFwidmlzTWFwQ29vcmRpbmF0ZVwiLCBcInZpc01hcFJlZ2lvblwiLCBcInZpc01ldHJpY1wiLCBcInZpc1BpZVwiLCBcInZpc1RhYmxlXCIsIFwidmlzVGFnQ2xvdWRcIiwgXCJ2aXNUZXh0XCIsIFwidmlzVGltZWxpb25cIiwgXCJ2aXNWZWdhXCIsIFwidmlzVmlzdWFsQnVpbGRlclwiLCBcInZpc3VhbGl6ZUFwcFwiLCBcIndhdGNoZXNBcHBcIiwgXCJ3b3JkV3JhcFwiLCBcIndvcmRXcmFwRGlzYWJsZWRcIiwgXCJ3b3JrcGxhY2VTZWFyY2hBcHBcIiwgXCJ3cmVuY2hcIiwgXCJ0b2tlbkFsaWFzXCIsIFwidG9rZW5Bbm5vdGF0aW9uXCIsIFwidG9rZW5BcnJheVwiLCBcInRva2VuQmluYXJ5XCIsIFwidG9rZW5Cb29sZWFuXCIsIFwidG9rZW5DbGFzc1wiLCBcInRva2VuQ29tcGxldGlvblN1Z2dlc3RlclwiLCBcInRva2VuQ29uc3RhbnRcIiwgXCJ0b2tlbkRhdGVcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2hhcGVcIiwgXCJ0b2tlblN0cmluZ1wiLCBcInRva2VuU3RydWN0XCIsIFwidG9rZW5TeW1ib2xcIiwgXCJ0b2tlblRhZ1wiLCBcInRva2VuVGV4dFwiLCBcInRva2VuVG9rZW5Db3VudFwiLCBcInRva2VuVmFyaWFibGVcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWRdKSxcblxuICAvKipcbiAgICAgKiBPbmUgd29yZCBsYWJlbCBsaWtlIFwiQmV0YVwiIG9yIFwiTGFiXCJcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBPbmUgd29yZCBsYWJlbCBsaWtlIFwiQmV0YVwiIG9yIFwiTGFiXCJcbiAgICAgKi9cbiAgbGFiZWw6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgICAqIENvbnRlbnQgZm9yIHRoZSB0b29sdGlwXG4gICAgICovXG4gIHRvb2x0aXBDb250ZW50OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubm9kZSwgUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm5vZGUsIFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWRdKV0pLFxuXG4gIC8qKlxuICAgICAqIEN1c3RvbSBwb3NpdGlvbiBvZiB0aGUgdG9vbHRpcFxuICAgICAqL1xuICB0b29sdGlwUG9zaXRpb246IFByb3BUeXBlcy5vbmVPZihbXCJ0b3BcIiwgXCJyaWdodFwiLCBcImJvdHRvbVwiLCBcImxlZnRcIl0pLFxuXG4gIC8qKlxuICAgICAqIE9wdGlvbmFsIHRpdGxlIHdpbGwgYmUgc3VwcGxpZWQgYXMgdG9vbHRpcCB0aXRsZSBvciB0aXRsZSBhdHRyaWJ1dGVcbiAgICAgKiBvdGhlcndpc2UgdGhlIGxhYmVsIHdpbGwgYmUgdXNlZFxuICAgICAqL1xuICB0aXRsZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nXSldKSxcblxuICAvKipcbiAgICAgKiBBY2NlcHRzIGFjY2VudCwgc3ViZHVlZCBhbmQgaG9sbG93LlxuICAgICAqL1xuICBjb2xvcjogUHJvcFR5cGVzLm9uZU9mKFtcImFjY2VudFwiLCBcInN1YmR1ZWRcIiwgXCJob2xsb3dcIl0pLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2YoW1wic1wiLCBcIm1cIl0pXG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbnZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImFuY2hvckNsYXNzTmFtZVwiLCBcImNvbnRlbnRcIiwgXCJ0aXRsZVwiLCBcImRlbGF5XCIsIFwiZGlzcGxheVwiXTtcblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQsIGNsb25lRWxlbWVudCwgRnJhZ21lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGtleXNPZiB9IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQgeyBFdWlQb3J0YWwgfSBmcm9tICcuLi9wb3J0YWwnO1xuaW1wb3J0IHsgRXVpVG9vbFRpcFBvcG92ZXIgfSBmcm9tICcuL3Rvb2xfdGlwX3BvcG92ZXInO1xuaW1wb3J0IHsgZW5xdWV1ZVN0YXRlQ2hhbmdlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVhY3QnO1xuaW1wb3J0IHsgZmluZFBvcG92ZXJQb3NpdGlvbiwgaHRtbElkR2VuZXJhdG9yIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpUmVzaXplT2JzZXJ2ZXIgfSBmcm9tICcuLi9vYnNlcnZlci9yZXNpemVfb2JzZXJ2ZXInO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBwb3NpdGlvbnNUb0NsYXNzTmFtZU1hcCA9IHtcbiAgdG9wOiAnZXVpVG9vbFRpcC0tdG9wJyxcbiAgcmlnaHQ6ICdldWlUb29sVGlwLS1yaWdodCcsXG4gIGJvdHRvbTogJ2V1aVRvb2xUaXAtLWJvdHRvbScsXG4gIGxlZnQ6ICdldWlUb29sVGlwLS1sZWZ0J1xufTtcbmV4cG9ydCB2YXIgUE9TSVRJT05TID0ga2V5c09mKHBvc2l0aW9uc1RvQ2xhc3NOYW1lTWFwKTtcbnZhciBkZWxheVRvTXNNYXAgPSB7XG4gIHJlZ3VsYXI6IDI1MCxcbiAgbG9uZzogMjUwICogNVxufTtcbnZhciBkaXNwbGF5VG9DbGFzc05hbWVNYXAgPSB7XG4gIGlubGluZUJsb2NrOiB1bmRlZmluZWQsXG4gIGJsb2NrOiAnZXVpVG9vbFRpcEFuY2hvci0tZGlzcGxheUJsb2NrJ1xufTtcbnZhciBERUZBVUxUX1RPT0xUSVBfU1RZTEVTID0ge1xuICAvLyBwb3NpdGlvbiB0aGUgdG9vbHRpcCBjb250ZW50IG5lYXIgdGhlIHRvcC1sZWZ0XG4gIC8vIGNvcm5lciBvZiB0aGUgd2luZG93IHNvIGl0IGNhbid0IGNyZWF0ZSBzY3JvbGxiYXJzXG4gIC8vIDUwLDUwIGJlY2F1c2Ugd2hvIGtub3dzIHdoYXQgbmVnYXRpdmUgbWFyZ2lucywgcGFkZGluZywgZXRjXG4gIHRvcDogNTAsXG4gIGxlZnQ6IDUwLFxuICAvLyBqdXN0IGluIGNhc2UsIGF2b2lkIGFueSBwb3RlbnRpYWwgZmxpY2tlciBieSBoaWRpbmdcbiAgLy8gdGhlIHRvb2x0aXAgYmVmb3JlIGl0IGlzIHBvc2l0aW9uZWRcbiAgb3BhY2l0eTogMCxcbiAgLy8gcHJldmVudCBhY2NpZGVudGFsIG1vdXNlIGludGVyYWN0aW9uIHdoaWxlIHBvc2l0aW9uaW5nXG4gIHZpc2liaWxpdHk6ICdoaWRkZW4nXG59O1xuZXhwb3J0IHZhciBFdWlUb29sVGlwID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhFdWlUb29sVGlwLCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aVRvb2xUaXApO1xuXG4gIGZ1bmN0aW9uIEV1aVRvb2xUaXAoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aVRvb2xUaXApO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwuYXBwbHkoX3N1cGVyLCBbdGhpc10uY29uY2F0KGFyZ3MpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJfaXNNb3VudGVkXCIsIGZhbHNlKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJhbmNob3JcIiwgbnVsbCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicG9wb3ZlclwiLCBudWxsKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJ0aW1lb3V0SWRcIiwgdm9pZCAwKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzdGF0ZVwiLCB7XG4gICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICAgIGhhc0ZvY3VzOiBmYWxzZSxcbiAgICAgIGNhbGN1bGF0ZWRQb3NpdGlvbjogX3RoaXMucHJvcHMucG9zaXRpb24sXG4gICAgICB0b29sVGlwU3R5bGVzOiBERUZBVUxUX1RPT0xUSVBfU1RZTEVTLFxuICAgICAgYXJyb3dTdHlsZXM6IHVuZGVmaW5lZCxcbiAgICAgIGlkOiBfdGhpcy5wcm9wcy5pZCB8fCBodG1sSWRHZW5lcmF0b3IoKSgpXG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiY2xlYXJBbmltYXRpb25UaW1lb3V0XCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChfdGhpcy50aW1lb3V0SWQpIHtcbiAgICAgICAgX3RoaXMudGltZW91dElkID0gY2xlYXJUaW1lb3V0KF90aGlzLnRpbWVvdXRJZCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwidGVzdEFuY2hvclwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyB3aGVuIHRoZSB0b29sdGlwIGlzIHZpc2libGUsIHRoaXMgY2hlY2tzIGlmIHRoZSBhbmNob3IgaXMgc3RpbGwgcGFydCBvZiBkb2N1bWVudFxuICAgICAgLy8gdGhpcyBmaXhlcyB3aGVuIHRoZSByZWFjdCByb290IGlzIHJlbW92ZWQgZnJvbSB0aGUgZG9tIHdpdGhvdXQgdW5tb3VudGluZ1xuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2VsYXN0aWMvZXVpL2lzc3Vlcy8xMTA1XG4gICAgICBpZiAoZG9jdW1lbnQuYm9keS5jb250YWlucyhfdGhpcy5hbmNob3IpID09PSBmYWxzZSkge1xuICAgICAgICAvLyB0aGUgYW5jaG9yIGlzIG5vIGxvbmdlciBwYXJ0IG9mIGBkb2N1bWVudGBcbiAgICAgICAgX3RoaXMuaGlkZVRvb2xUaXAoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChfdGhpcy5zdGF0ZS52aXNpYmxlKSB7XG4gICAgICAgICAgLy8gaWYgc3RpbGwgdmlzaWJsZSwga2VlcCBjaGVja2luZ1xuICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShfdGhpcy50ZXN0QW5jaG9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInNldFBvcG92ZXJSZWZcIiwgZnVuY3Rpb24gKHJlZikge1xuICAgICAgX3RoaXMucG9wb3ZlciA9IHJlZjsgLy8gaWYgdGhlIHBvcG92ZXIgaGFzIGJlZW4gdW5tb3VudGVkLCBjbGVhclxuICAgICAgLy8gYW55IHByZXZpb3VzIGtub3dsZWRnZSBhYm91dCBpdHMgc2l6ZVxuXG4gICAgICBpZiAocmVmID09IG51bGwpIHtcbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIHRvb2xUaXBTdHlsZXM6IERFRkFVTFRfVE9PTFRJUF9TVFlMRVMsXG4gICAgICAgICAgYXJyb3dTdHlsZXM6IHVuZGVmaW5lZFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzaG93VG9vbFRpcFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoIV90aGlzLnRpbWVvdXRJZCkge1xuICAgICAgICBfdGhpcy50aW1lb3V0SWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBlbnF1ZXVlU3RhdGVDaGFuZ2UoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgdmlzaWJsZTogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sIGRlbGF5VG9Nc01hcFtfdGhpcy5wcm9wcy5kZWxheV0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInBvc2l0aW9uVG9vbFRpcFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgcmVxdWVzdGVkUG9zaXRpb24gPSBfdGhpcy5wcm9wcy5wb3NpdGlvbjtcblxuICAgICAgaWYgKCFfdGhpcy5hbmNob3IgfHwgIV90aGlzLnBvcG92ZXIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgX2ZpbmRQb3BvdmVyUG9zaXRpb24gPSBmaW5kUG9wb3ZlclBvc2l0aW9uKHtcbiAgICAgICAgYW5jaG9yOiBfdGhpcy5hbmNob3IsXG4gICAgICAgIHBvcG92ZXI6IF90aGlzLnBvcG92ZXIsXG4gICAgICAgIHBvc2l0aW9uOiByZXF1ZXN0ZWRQb3NpdGlvbixcbiAgICAgICAgb2Zmc2V0OiAxNixcbiAgICAgICAgLy8gb2Zmc2V0IHBvcG92ZXIgMTZweCBmcm9tIHRoZSBhbmNob3JcbiAgICAgICAgYXJyb3dDb25maWc6IHtcbiAgICAgICAgICBhcnJvd1dpZHRoOiAxMixcbiAgICAgICAgICBhcnJvd0J1ZmZlcjogNFxuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgICAgICBwb3NpdGlvbiA9IF9maW5kUG9wb3ZlclBvc2l0aW9uLnBvc2l0aW9uLFxuICAgICAgICAgIGxlZnQgPSBfZmluZFBvcG92ZXJQb3NpdGlvbi5sZWZ0LFxuICAgICAgICAgIHRvcCA9IF9maW5kUG9wb3ZlclBvc2l0aW9uLnRvcCxcbiAgICAgICAgICBhcnJvdyA9IF9maW5kUG9wb3ZlclBvc2l0aW9uLmFycm93OyAvLyBJZiBlbmNyb2FjaGluZyB0aGUgcmlnaHQgZWRnZSBvZiB0aGUgd2luZG93OlxuICAgICAgLy8gV2hlbiBgcHJvcHMuY29udGVudGAgY2hhbmdlcyBhbmQgaXMgbG9uZ2VyIHRoYW4gYHByZXZQcm9wcy5jb250ZW50YCwgdGhlIHRvb2x0aXAgd2lkdGggcmVtYWlucyBhbmRcbiAgICAgIC8vIHRoZSByZXNpemVPYnNlcnZlciBjYWxsYmFjayB3aWxsIGZpcmUgdHdpY2UgKG9uY2UgZm9yIHZlcnRpY2FsIHJlc2l6ZSBjYXVzZWQgYnkgdGV4dCBsaW5lIHdyYXBwaW5nLFxuICAgICAgLy8gb25jZSBmb3IgYSBzdWJzZXF1ZW50IHBvc2l0aW9uIGNvcnJlY3Rpb24pIGFuZCBjYXVzZSBhIGZsYXNoIHJlcmVuZGVyIGFuZCByZXBvc2l0aW9uLlxuICAgICAgLy8gVG8gcHJldmVudCB0aGlzLCB3ZSBjYW4gb3JpZW50IGZyb20gdGhlIHJpZ2h0IHNvIHRoYXQgdGV4dCBsaW5lIHdyYXBwaW5nIGRvZXMgbm90IG9jY3VyLCBuZWdhdGluZ1xuICAgICAgLy8gdGhlIHNlY29uZCByZXNpemVPYnNlcnZlciBjYWxsYmFjayBjYWxsLlxuXG5cbiAgICAgIHZhciB3aW5kb3dXaWR0aCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCB8fCB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgICAgIHZhciB1c2VSaWdodFZhbHVlID0gd2luZG93V2lkdGggLyAyIDwgbGVmdDtcbiAgICAgIHZhciB0b29sVGlwU3R5bGVzID0ge1xuICAgICAgICB0b3A6IHRvcCxcbiAgICAgICAgbGVmdDogdXNlUmlnaHRWYWx1ZSA/ICdhdXRvJyA6IGxlZnQsXG4gICAgICAgIHJpZ2h0OiB1c2VSaWdodFZhbHVlID8gd2luZG93V2lkdGggLSBsZWZ0IC0gX3RoaXMucG9wb3Zlci5vZmZzZXRXaWR0aCA6ICdhdXRvJ1xuICAgICAgfTtcblxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICB2aXNpYmxlOiB0cnVlLFxuICAgICAgICBjYWxjdWxhdGVkUG9zaXRpb246IHBvc2l0aW9uLFxuICAgICAgICB0b29sVGlwU3R5bGVzOiB0b29sVGlwU3R5bGVzLFxuICAgICAgICBhcnJvd1N0eWxlczogYXJyb3dcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImhpZGVUb29sVGlwXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLmNsZWFyQW5pbWF0aW9uVGltZW91dCgpO1xuXG4gICAgICBlbnF1ZXVlU3RhdGVDaGFuZ2UoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoX3RoaXMuX2lzTW91bnRlZCkge1xuICAgICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIHZpc2libGU6IGZhbHNlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uRm9jdXNcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBoYXNGb2N1czogdHJ1ZVxuICAgICAgfSk7XG5cbiAgICAgIF90aGlzLnNob3dUb29sVGlwKCk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25CbHVyXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgaGFzRm9jdXM6IGZhbHNlXG4gICAgICB9KTtcblxuICAgICAgX3RoaXMuaGlkZVRvb2xUaXAoKTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbk1vdXNlT3V0XCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgLy8gUHJldmVudCBtb3VzaW5nIG92ZXIgY2hpbGRyZW4gZnJvbSBoaWRpbmcgdGhlIHRvb2x0aXAgYnkgdGVzdGluZyBmb3Igd2hldGhlciB0aGUgbW91c2UgaGFzXG4gICAgICAvLyBsZWZ0IHRoZSBhbmNob3IgZm9yIGEgbm9uLWNoaWxkLlxuICAgICAgaWYgKF90aGlzLmFuY2hvciA9PT0gZXZlbnQucmVsYXRlZFRhcmdldCB8fCBfdGhpcy5hbmNob3IgIT0gbnVsbCAmJiAhX3RoaXMuYW5jaG9yLmNvbnRhaW5zKGV2ZW50LnJlbGF0ZWRUYXJnZXQpKSB7XG4gICAgICAgIGlmICghX3RoaXMuc3RhdGUuaGFzRm9jdXMpIHtcbiAgICAgICAgICBfdGhpcy5oaWRlVG9vbFRpcCgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vbk1vdXNlT3V0KSB7XG4gICAgICAgIF90aGlzLnByb3BzLm9uTW91c2VPdXQoZXZlbnQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEV1aVRvb2xUaXAsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdGhpcy5faXNNb3VudGVkID0gdHJ1ZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50V2lsbFVubW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICB0aGlzLmNsZWFyQW5pbWF0aW9uVGltZW91dCgpO1xuICAgICAgdGhpcy5faXNNb3VudGVkID0gZmFsc2U7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudERpZFVwZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUpIHtcbiAgICAgIGlmIChwcmV2U3RhdGUudmlzaWJsZSA9PT0gZmFsc2UgJiYgdGhpcy5zdGF0ZS52aXNpYmxlID09PSB0cnVlKSB7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLnRlc3RBbmNob3IpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wcy5jaGlsZHJlbixcbiAgICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wcy5jbGFzc05hbWUsXG4gICAgICAgICAgYW5jaG9yQ2xhc3NOYW1lID0gX3RoaXMkcHJvcHMuYW5jaG9yQ2xhc3NOYW1lLFxuICAgICAgICAgIGNvbnRlbnQgPSBfdGhpcyRwcm9wcy5jb250ZW50LFxuICAgICAgICAgIHRpdGxlID0gX3RoaXMkcHJvcHMudGl0bGUsXG4gICAgICAgICAgZGVsYXkgPSBfdGhpcyRwcm9wcy5kZWxheSxcbiAgICAgICAgICBkaXNwbGF5ID0gX3RoaXMkcHJvcHMuZGlzcGxheSxcbiAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzLCBfZXhjbHVkZWQpO1xuXG4gICAgICB2YXIgX3RoaXMkc3RhdGUgPSB0aGlzLnN0YXRlLFxuICAgICAgICAgIGFycm93U3R5bGVzID0gX3RoaXMkc3RhdGUuYXJyb3dTdHlsZXMsXG4gICAgICAgICAgaWQgPSBfdGhpcyRzdGF0ZS5pZCxcbiAgICAgICAgICB0b29sVGlwU3R5bGVzID0gX3RoaXMkc3RhdGUudG9vbFRpcFN0eWxlcyxcbiAgICAgICAgICB2aXNpYmxlID0gX3RoaXMkc3RhdGUudmlzaWJsZTtcbiAgICAgIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpVG9vbFRpcCcsIHBvc2l0aW9uc1RvQ2xhc3NOYW1lTWFwW3RoaXMuc3RhdGUuY2FsY3VsYXRlZFBvc2l0aW9uXSwgY2xhc3NOYW1lKTtcbiAgICAgIHZhciBhbmNob3JDbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpVG9vbFRpcEFuY2hvcicsIGRpc3BsYXkgPyBkaXNwbGF5VG9DbGFzc05hbWVNYXBbZGlzcGxheV0gOiBudWxsLCBhbmNob3JDbGFzc05hbWUpO1xuICAgICAgdmFyIHRvb2x0aXA7XG5cbiAgICAgIGlmICh2aXNpYmxlICYmIChjb250ZW50IHx8IHRpdGxlKSkge1xuICAgICAgICB0b29sdGlwID0gX19fRW1vdGlvbkpTWChFdWlQb3J0YWwsIG51bGwsIF9fX0Vtb3Rpb25KU1goRXVpVG9vbFRpcFBvcG92ZXIsIF9leHRlbmRzKHtcbiAgICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgICAgc3R5bGU6IHRvb2xUaXBTdHlsZXMsXG4gICAgICAgICAgcG9zaXRpb25Ub29sVGlwOiB0aGlzLnBvc2l0aW9uVG9vbFRpcCxcbiAgICAgICAgICBwb3BvdmVyUmVmOiB0aGlzLnNldFBvcG92ZXJSZWYsXG4gICAgICAgICAgdGl0bGU6IHRpdGxlLFxuICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICByb2xlOiBcInRvb2x0aXBcIlxuICAgICAgICB9LCByZXN0KSwgX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICAgICAgc3R5bGU6IGFycm93U3R5bGVzLFxuICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlUb29sVGlwX19hcnJvd1wiXG4gICAgICAgIH0pLCBfX19FbW90aW9uSlNYKEV1aVJlc2l6ZU9ic2VydmVyLCB7XG4gICAgICAgICAgb25SZXNpemU6IHRoaXMucG9zaXRpb25Ub29sVGlwXG4gICAgICAgIH0sIGZ1bmN0aW9uIChyZXNpemVSZWYpIHtcbiAgICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICAgICAgICByZWY6IHJlc2l6ZVJlZlxuICAgICAgICAgIH0sIGNvbnRlbnQpO1xuICAgICAgICB9KSkpO1xuICAgICAgfVxuXG4gICAgICB2YXIgYW5jaG9yID0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzeC1hMTF5L21vdXNlLWV2ZW50cy1oYXZlLWtleS1ldmVudHNcbiAgICAgIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgICAgcmVmOiBmdW5jdGlvbiByZWYoYW5jaG9yKSB7XG4gICAgICAgICAgcmV0dXJuIF90aGlzMi5hbmNob3IgPSBhbmNob3I7XG4gICAgICAgIH0sXG4gICAgICAgIGNsYXNzTmFtZTogYW5jaG9yQ2xhc3NlcyxcbiAgICAgICAgb25Nb3VzZU92ZXI6IHRoaXMuc2hvd1Rvb2xUaXAsXG4gICAgICAgIG9uTW91c2VPdXQ6IHRoaXMub25Nb3VzZU91dFxuICAgICAgfSwgLyojX19QVVJFX18qL2Nsb25lRWxlbWVudChjaGlsZHJlbiwgX29iamVjdFNwcmVhZCh7XG4gICAgICAgIG9uRm9jdXM6IGZ1bmN0aW9uIG9uRm9jdXMoZSkge1xuICAgICAgICAgIF90aGlzMi5vbkZvY3VzKCk7XG5cbiAgICAgICAgICBjaGlsZHJlbi5wcm9wcy5vbkZvY3VzICYmIGNoaWxkcmVuLnByb3BzLm9uRm9jdXMoZSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uQmx1cjogZnVuY3Rpb24gb25CbHVyKGUpIHtcbiAgICAgICAgICBfdGhpczIub25CbHVyKCk7XG5cbiAgICAgICAgICBjaGlsZHJlbi5wcm9wcy5vbkJsdXIgJiYgY2hpbGRyZW4ucHJvcHMub25CbHVyKGUpO1xuICAgICAgICB9XG4gICAgICB9LCB2aXNpYmxlICYmIHtcbiAgICAgICAgJ2FyaWEtZGVzY3JpYmVkYnknOiB0aGlzLnN0YXRlLmlkXG4gICAgICB9KSkpO1xuXG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChGcmFnbWVudCwgbnVsbCwgYW5jaG9yLCB0b29sdGlwKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gRXVpVG9vbFRpcDtcbn0oQ29tcG9uZW50KTtcblxuX2RlZmluZVByb3BlcnR5KEV1aVRvb2xUaXAsIFwiZGVmYXVsdFByb3BzXCIsIHtcbiAgcG9zaXRpb246ICd0b3AnLFxuICBkZWxheTogJ3JlZ3VsYXInLFxuICBkaXNwbGF5OiAnaW5saW5lQmxvY2snXG59KTtcblxuRXVpVG9vbFRpcC5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgICAqIFBhc3NlcyBvbnRvIHRoZSB0aGUgdHJpZ2dlci5cbiAgICAgKi9cbiAgYW5jaG9yQ2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAqIFRoZSBpbi12aWV3IHRyaWdnZXIgZm9yIHlvdXIgdG9vbHRpcC5cbiAgICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWQsXG5cbiAgLyoqXG4gICAgICogUGFzc2VzIG9udG8gdGhlIHRvb2x0aXAgaXRzZWxmLCBub3QgdGhlIHRyaWdnZXIuXG4gICAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgKiBUaGUgbWFpbiBjb250ZW50IG9mIHlvdXIgdG9vbHRpcC5cbiAgICAgKi9cbiAgY29udGVudDogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAgICogQ29tbW9uIGRpc3BsYXkgYWx0ZXJuYXRpdmVzIGZvciB0aGUgYW5jaG9yIHdyYXBwZXJcbiAgICAgKi9cbiAgZGlzcGxheTogUHJvcFR5cGVzLm9uZU9mKFtcImlubGluZUJsb2NrXCIsIFwiYmxvY2tcIl0pLFxuXG4gIC8qKlxuICAgICAqIERlbGF5IGJlZm9yZSBzaG93aW5nIHRvb2x0aXAuIEdvb2QgZm9yIHJlcGVhdGFibGUgaXRlbXMuXG4gICAgICovXG4gIGRlbGF5OiBQcm9wVHlwZXMub25lT2YoW1wicmVndWxhclwiLCBcImxvbmdcIl0pLmlzUmVxdWlyZWQsXG5cbiAgLyoqXG4gICAgICogQW4gb3B0aW9uYWwgdGl0bGUgZm9yIHlvdXIgdG9vbHRpcC5cbiAgICAgKi9cbiAgdGl0bGU6IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgICAqIFVubGVzcyB5b3UgcHJvdmlkZSBvbmUsIHRoaXMgd2lsbCBiZSByYW5kb21seSBnZW5lcmF0ZWQuXG4gICAgICovXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAqIFN1Z2dlc3RlZCBwb3NpdGlvbi4gSWYgdGhlcmUgaXMgbm90IGVub3VnaCByb29tIGZvciBpdCB0aGlzIHdpbGwgYmUgY2hhbmdlZC5cbiAgICAgKi9cbiAgcG9zaXRpb246IFByb3BUeXBlcy5vbmVPZihbXCJ0b3BcIiwgXCJyaWdodFwiLCBcImJvdHRvbVwiLCBcImxlZnRcIl0pLmlzUmVxdWlyZWQsXG5cbiAgLyoqXG4gICAgICogSWYgc3VwcGxpZWQsIGNhbGxlZCB3aGVuIG1vdXNlIG1vdmVtZW50IGNhdXNlcyB0aGUgdG9vbCB0aXAgdG8gYmVcbiAgICAgKiBoaWRkZW4uXG4gICAgICovXG4gIG9uTW91c2VPdXQ6IFByb3BUeXBlcy5mdW5jXG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vKipcbiAqIE5PVEU6IFdlIGNhbid0IHRlc3QgdGhpcyBjb21wb25lbnQgYmVjYXVzZSBFbnp5bWUgZG9lc24ndCBzdXBwb3J0IHJlbmRlcmluZ1xuICogaW50byBwb3J0YWxzLlxuICovXG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBjcmVhdGVQb3J0YWwgfSBmcm9tICdyZWFjdC1kb20nO1xuaW1wb3J0IHsga2V5c09mIH0gZnJvbSAnLi4vY29tbW9uJztcbmV4cG9ydCB2YXIgaW5zZXJ0UG9zaXRpb25zID0ge1xuICBhZnRlcjogJ2FmdGVyZW5kJyxcbiAgYmVmb3JlOiAnYmVmb3JlYmVnaW4nXG59O1xuZXhwb3J0IHZhciBJTlNFUlRfUE9TSVRJT05TID0ga2V5c09mKGluc2VydFBvc2l0aW9ucyk7XG5leHBvcnQgdmFyIEV1aVBvcnRhbCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoRXVpUG9ydGFsLCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aVBvcnRhbCk7XG5cbiAgZnVuY3Rpb24gRXVpUG9ydGFsKHByb3BzKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aVBvcnRhbCk7XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHByb3BzKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJwb3J0YWxOb2RlXCIsIG51bGwpO1xuXG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oX3RoaXMpOyAvLyBQcmV2ZW50IFNTUiBlcnJvcnNcblxuICAgIHZhciBpbnNlcnQgPSBfdGhpcy5wcm9wcy5pbnNlcnQ7XG4gICAgX3RoaXMucG9ydGFsTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIF90aGlzLnBvcnRhbE5vZGUuZGF0YXNldC5ldWlwb3J0YWwgPSAndHJ1ZSc7XG5cbiAgICBpZiAoaW5zZXJ0ID09IG51bGwpIHtcbiAgICAgIC8vIG5vIGluc2VydGlvbiBkZWZpbmVkLCBhcHBlbmQgdG8gYm9keVxuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChfdGhpcy5wb3J0YWxOb2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaW5zZXJ0aW5nIGJlZm9yZSBvciBhZnRlciBhbiBlbGVtZW50XG4gICAgICB2YXIgc2libGluZyA9IGluc2VydC5zaWJsaW5nLFxuICAgICAgICAgIHBvc2l0aW9uID0gaW5zZXJ0LnBvc2l0aW9uO1xuICAgICAgc2libGluZy5pbnNlcnRBZGphY2VudEVsZW1lbnQoaW5zZXJ0UG9zaXRpb25zW3Bvc2l0aW9uXSwgX3RoaXMucG9ydGFsTm9kZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEV1aVBvcnRhbCwgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICB0aGlzLnVwZGF0ZVBvcnRhbFJlZih0aGlzLnBvcnRhbE5vZGUpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIHZhciBfdGhpcyRwb3J0YWxOb2RlO1xuXG4gICAgICBpZiAoKF90aGlzJHBvcnRhbE5vZGUgPSB0aGlzLnBvcnRhbE5vZGUpICE9PSBudWxsICYmIF90aGlzJHBvcnRhbE5vZGUgIT09IHZvaWQgMCAmJiBfdGhpcyRwb3J0YWxOb2RlLnBhcmVudE5vZGUpIHtcbiAgICAgICAgdGhpcy5wb3J0YWxOb2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5wb3J0YWxOb2RlKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy51cGRhdGVQb3J0YWxSZWYobnVsbCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInVwZGF0ZVBvcnRhbFJlZlwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB1cGRhdGVQb3J0YWxSZWYocmVmKSB7XG4gICAgICBpZiAodGhpcy5wcm9wcy5wb3J0YWxSZWYpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5wb3J0YWxSZWYocmVmKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiB0aGlzLnBvcnRhbE5vZGUgPyAvKiNfX1BVUkVfXyovY3JlYXRlUG9ydGFsKHRoaXMucHJvcHMuY2hpbGRyZW4sIHRoaXMucG9ydGFsTm9kZSkgOiBudWxsO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlQb3J0YWw7XG59KENvbXBvbmVudCk7XG5FdWlQb3J0YWwucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICAgKiBSZWFjdE5vZGUgdG8gcmVuZGVyIGFzIHRoaXMgY29tcG9uZW50J3MgY29udGVudFxuICAgICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCxcbiAgaW5zZXJ0OiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIHNpYmxpbmc6IFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCxcbiAgICBwb3NpdGlvbjogUHJvcFR5cGVzLm9uZU9mKFtcImJlZm9yZVwiLCBcImFmdGVyXCJdKS5pc1JlcXVpcmVkXG4gIH0pLFxuICBwb3J0YWxSZWY6IFByb3BUeXBlcy5mdW5jXG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbnZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcInRpdGxlXCIsIFwiY2xhc3NOYW1lXCIsIFwicG9zaXRpb25Ub29sVGlwXCIsIFwicG9wb3ZlclJlZlwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlUb29sVGlwUG9wb3ZlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoRXVpVG9vbFRpcFBvcG92ZXIsIF9Db21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoRXVpVG9vbFRpcFBvcG92ZXIpO1xuXG4gIGZ1bmN0aW9uIEV1aVRvb2xUaXBQb3BvdmVyKCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlUb29sVGlwUG9wb3Zlcik7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbC5hcHBseShfc3VwZXIsIFt0aGlzXS5jb25jYXQoYXJncykpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInBvcG92ZXJcIiwgdm9pZCAwKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJ1cGRhdGVEaW1lbnNpb25zXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIEJlY2F1c2Ugb2YgdGhpcyBkZWxheSwgc29tZXRpbWVzIGBwb3NpdGlvblRvb2xUaXBgIGJlY29tZXMgdW5hdmFpbGFibGUuXG4gICAgICAgIGlmIChfdGhpcy5wb3BvdmVyKSB7XG4gICAgICAgICAgX3RoaXMucHJvcHMucG9zaXRpb25Ub29sVGlwKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInNldFBvcG92ZXJSZWZcIiwgZnVuY3Rpb24gKHJlZikge1xuICAgICAgX3RoaXMucG9wb3ZlciA9IHJlZjtcblxuICAgICAgaWYgKF90aGlzLnByb3BzLnBvcG92ZXJSZWYpIHtcbiAgICAgICAgX3RoaXMucHJvcHMucG9wb3ZlclJlZihyZWYpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEV1aVRvb2xUaXBQb3BvdmVyLCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgnZXVpQm9keS1oYXNQb3J0YWxDb250ZW50Jyk7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy51cGRhdGVEaW1lbnNpb25zKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50V2lsbFVubW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoJ2V1aUJvZHktaGFzUG9ydGFsQ29udGVudCcpO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMudXBkYXRlRGltZW5zaW9ucyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgICAgdGl0bGUgPSBfdGhpcyRwcm9wcy50aXRsZSxcbiAgICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wcy5jbGFzc05hbWUsXG4gICAgICAgICAgcG9zaXRpb25Ub29sVGlwID0gX3RoaXMkcHJvcHMucG9zaXRpb25Ub29sVGlwLFxuICAgICAgICAgIHBvcG92ZXJSZWYgPSBfdGhpcyRwcm9wcy5wb3BvdmVyUmVmLFxuICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgICAgIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpVG9vbFRpcFBvcG92ZXInLCBjbGFzc05hbWUpO1xuICAgICAgdmFyIG9wdGlvbmFsVGl0bGU7XG5cbiAgICAgIGlmICh0aXRsZSkge1xuICAgICAgICBvcHRpb25hbFRpdGxlID0gX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICAgICAgY2xhc3NOYW1lOiBcImV1aVRvb2xUaXBfX3RpdGxlXCJcbiAgICAgICAgfSwgdGl0bGUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgcmVmOiB0aGlzLnNldFBvcG92ZXJSZWZcbiAgICAgIH0sIHJlc3QpLCBvcHRpb25hbFRpdGxlLCBjaGlsZHJlbik7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEV1aVRvb2xUaXBQb3BvdmVyO1xufShDb21wb25lbnQpO1xuRXVpVG9vbFRpcFBvcG92ZXIucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHBvc2l0aW9uVG9vbFRpcDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICB0aXRsZTogUHJvcFR5cGVzLm5vZGUsXG4gIHBvcG92ZXJSZWY6IFByb3BUeXBlcy5mdW5jXG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widHlwZVwiLCBcImFyaWEtbGFiZWxcIiwgXCJjb2xvclwiLCBcInNpemVcIiwgXCJpY29uUHJvcHNcIiwgXCJwb3NpdGlvblwiLCBcImRlbGF5XCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IEV1aUljb24gfSBmcm9tICcuLi9pY29uJztcbmltcG9ydCB7IEV1aVRvb2xUaXAgfSBmcm9tICcuL3Rvb2xfdGlwJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aUljb25UaXAgPSBmdW5jdGlvbiBFdWlJY29uVGlwKF9yZWYpIHtcbiAgdmFyIF9yZWYkdHlwZSA9IF9yZWYudHlwZSxcbiAgICAgIHR5cGUgPSBfcmVmJHR5cGUgPT09IHZvaWQgMCA/ICdxdWVzdGlvbkluQ2lyY2xlJyA6IF9yZWYkdHlwZSxcbiAgICAgIF9yZWYkYXJpYUxhYmVsID0gX3JlZlsnYXJpYS1sYWJlbCddLFxuICAgICAgYXJpYUxhYmVsID0gX3JlZiRhcmlhTGFiZWwgPT09IHZvaWQgMCA/ICdJbmZvJyA6IF9yZWYkYXJpYUxhYmVsLFxuICAgICAgY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIGljb25Qcm9wcyA9IF9yZWYuaWNvblByb3BzLFxuICAgICAgX3JlZiRwb3NpdGlvbiA9IF9yZWYucG9zaXRpb24sXG4gICAgICBwb3NpdGlvbiA9IF9yZWYkcG9zaXRpb24gPT09IHZvaWQgMCA/ICd0b3AnIDogX3JlZiRwb3NpdGlvbixcbiAgICAgIF9yZWYkZGVsYXkgPSBfcmVmLmRlbGF5LFxuICAgICAgZGVsYXkgPSBfcmVmJGRlbGF5ID09PSB2b2lkIDAgPyAncmVndWxhcicgOiBfcmVmJGRlbGF5LFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVRvb2xUaXAsIF9leHRlbmRzKHtcbiAgICBwb3NpdGlvbjogcG9zaXRpb24sXG4gICAgZGVsYXk6IGRlbGF5XG4gIH0sIHJlc3QpLCBfX19FbW90aW9uSlNYKEV1aUljb24sIF9leHRlbmRzKHtcbiAgICB0YWJJbmRleDogMCxcbiAgICB0eXBlOiB0eXBlLFxuICAgIGNvbG9yOiBjb2xvcixcbiAgICBzaXplOiBzaXplLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBhcmlhTGFiZWxcbiAgfSwgaWNvblByb3BzKSkpO1xufTtcbkV1aUljb25UaXAucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICAgKiBQYXNzZXMgb250byB0aGUgdGhlIHRyaWdnZXIuXG4gICAgICovXG4gIGFuY2hvckNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgKiBQYXNzZXMgb250byB0aGUgdG9vbHRpcCBpdHNlbGYsIG5vdCB0aGUgdHJpZ2dlci5cbiAgICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAqIFRoZSBtYWluIGNvbnRlbnQgb2YgeW91ciB0b29sdGlwLlxuICAgICAqL1xuICBjb250ZW50OiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICAgKiBDb21tb24gZGlzcGxheSBhbHRlcm5hdGl2ZXMgZm9yIHRoZSBhbmNob3Igd3JhcHBlclxuICAgICAqL1xuICBkaXNwbGF5OiBQcm9wVHlwZXMub25lT2YoW1wiaW5saW5lQmxvY2tcIiwgXCJibG9ja1wiXSksXG5cbiAgLyoqXG4gICAgICogQW4gb3B0aW9uYWwgdGl0bGUgZm9yIHlvdXIgdG9vbHRpcC5cbiAgICAgKi9cbiAgdGl0bGU6IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgICAqIFVubGVzcyB5b3UgcHJvdmlkZSBvbmUsIHRoaXMgd2lsbCBiZSByYW5kb21seSBnZW5lcmF0ZWQuXG4gICAgICovXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAqIElmIHN1cHBsaWVkLCBjYWxsZWQgd2hlbiBtb3VzZSBtb3ZlbWVudCBjYXVzZXMgdGhlIHRvb2wgdGlwIHRvIGJlXG4gICAgICogaGlkZGVuLlxuICAgICAqL1xuICBvbk1vdXNlT3V0OiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICAgKiBUaGUgaWNvbiBjb2xvci5cbiAgICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogVGhlIGljb24gdHlwZS5cbiAgICAgKi9cbiAgdHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYWxlcnRcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhc3Rlcmlza1wiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJib2x0XCIsIFwiYm94ZXNIb3Jpem9udGFsXCIsIFwiYm94ZXNWZXJ0aWNhbFwiLCBcImJyYW5jaFwiLCBcImJyYW5jaFVzZXJcIiwgXCJicm9vbVwiLCBcImJydXNoXCIsIFwiYnVnXCIsIFwiYnVsbHNleWVcIiwgXCJjYWxlbmRhclwiLCBcImNhbnZhc0FwcFwiLCBcImNhc2VzQXBwXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsb2NrXCIsIFwiY2xvdWREcml6emxlXCIsIFwiY2xvdWRTdG9ybXlcIiwgXCJjbG91ZFN1bm55XCIsIFwiY2x1c3RlclwiLCBcImNvZGVBcHBcIiwgXCJjb2xvclwiLCBcImNvbXB1dGVcIiwgXCJjb25zb2xlXCIsIFwiY29uc29sZUFwcFwiLCBcImNvbnRhaW5lclwiLCBcImNvbnRpbnVpdHlBYm92ZVwiLCBcImNvbnRpbnVpdHlBYm92ZUJlbG93XCIsIFwiY29udGludWl0eUJlbG93XCIsIFwiY29udGludWl0eVdpdGhpblwiLCBcImNvbnRyb2xzSG9yaXpvbnRhbFwiLCBcImNvbnRyb2xzVmVydGljYWxcIiwgXCJjb3B5XCIsIFwiY29weUNsaXBib2FyZFwiLCBcImNyZWF0ZUFkdmFuY2VkSm9iXCIsIFwiY3JlYXRlTXVsdGlNZXRyaWNKb2JcIiwgXCJjcmVhdGVQb3B1bGF0aW9uSm9iXCIsIFwiY3JlYXRlU2luZ2xlTWV0cmljSm9iXCIsIFwiY3Jvc3NcIiwgXCJjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcFwiLCBcImNyb3NzSW5BQ2lyY2xlRmlsbGVkXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpc2NvdmVyQXBwXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG91YmxlQXJyb3dMZWZ0XCIsIFwiZG91YmxlQXJyb3dSaWdodFwiLCBcImRvd25sb2FkXCIsIFwiZWRpdG9yQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JBbGlnbkxlZnRcIiwgXCJlZGl0b3JBbGlnblJpZ2h0XCIsIFwiZWRpdG9yQm9sZFwiLCBcImVkaXRvckNoZWNrbGlzdFwiLCBcImVkaXRvckNvZGVCbG9ja1wiLCBcImVkaXRvckNvbW1lbnRcIiwgXCJlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbFwiLCBcImVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbFwiLCBcImVkaXRvckhlYWRpbmdcIiwgXCJlZGl0b3JJdGFsaWNcIiwgXCJlZGl0b3JJdGVtQWxpZ25Cb3R0b21cIiwgXCJlZGl0b3JJdGVtQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JJdGVtQWxpZ25MZWZ0XCIsIFwiZWRpdG9ySXRlbUFsaWduTWlkZGxlXCIsIFwiZWRpdG9ySXRlbUFsaWduUmlnaHRcIiwgXCJlZGl0b3JJdGVtQWxpZ25Ub3BcIiwgXCJlZGl0b3JMaW5rXCIsIFwiZWRpdG9yT3JkZXJlZExpc3RcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnRcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BMZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BSaWdodFwiLCBcImVkaXRvclJlZG9cIiwgXCJlZGl0b3JTdHJpa2VcIiwgXCJlZGl0b3JUYWJsZVwiLCBcImVkaXRvclVuZGVybGluZVwiLCBcImVkaXRvclVuZG9cIiwgXCJlZGl0b3JVbm9yZGVyZWRMaXN0XCIsIFwiZW1haWxcIiwgXCJlbXB0eVwiLCBcImVtc0FwcFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibW9iaWxlXCIsIFwibW9uaXRvcmluZ0FwcFwiLCBcIm1vb25cIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFwZXJDbGlwXCIsIFwicGFydGlhbFwiLCBcInBhdXNlXCIsIFwicGF5bWVudFwiLCBcInBlbmNpbFwiLCBcInBlcmNlbnRcIiwgXCJwaW5cIiwgXCJwaW5GaWxsZWRcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBsYXlcIiwgXCJwbGF5RmlsbGVkXCIsIFwicGx1c1wiLCBcInBsdXNJbkNpcmNsZVwiLCBcInBsdXNJbkNpcmNsZUZpbGxlZFwiLCBcInBvcG91dFwiLCBcInB1c2hcIiwgXCJxdWVzdGlvbkluQ2lyY2xlXCIsIFwicXVvdGVcIiwgXCJyZWNlbnRseVZpZXdlZEFwcFwiLCBcInJlZnJlc2hcIiwgXCJyZWdyZXNzaW9uSm9iXCIsIFwicmVwb3J0ZXJcIiwgXCJyZXBvcnRpbmdBcHBcIiwgXCJyZXR1cm5LZXlcIiwgXCJzYXZlXCIsIFwic2F2ZWRPYmplY3RzQXBwXCIsIFwic2NhbGVcIiwgXCJzZWFyY2hcIiwgXCJzZWFyY2hQcm9maWxlckFwcFwiLCBcInNlY3VyaXR5QW5hbHl0aWNzQXBwXCIsIFwic2VjdXJpdHlBcHBcIiwgXCJzZWN1cml0eVNpZ25hbFwiLCBcInNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWRcIiwgXCJzZWN1cml0eVNpZ25hbFJlc29sdmVkXCIsIFwic2Vzc2lvblZpZXdlclwiLCBcInNoYXJkXCIsIFwic2hhcmVcIiwgXCJzbm93Zmxha2VcIiwgXCJzb3J0RG93blwiLCBcInNvcnRMZWZ0XCIsIFwic29ydFJpZ2h0XCIsIFwic29ydFVwXCIsIFwic29ydGFibGVcIiwgXCJzcGFjZXNBcHBcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EZW5zZVZlY3RvclwiLCBcInRva2VuRWxlbWVudFwiLCBcInRva2VuRW51bVwiLCBcInRva2VuRW51bU1lbWJlclwiLCBcInRva2VuRXZlbnRcIiwgXCJ0b2tlbkV4Y2VwdGlvblwiLCBcInRva2VuRmllbGRcIiwgXCJ0b2tlbkZpbGVcIiwgXCJ0b2tlbkZsYXR0ZW5lZFwiLCBcInRva2VuRnVuY3Rpb25cIiwgXCJ0b2tlbkdlb1wiLCBcInRva2VuSGlzdG9ncmFtXCIsIFwidG9rZW5JbnRlcmZhY2VcIiwgXCJ0b2tlbklQXCIsIFwidG9rZW5Kb2luXCIsIFwidG9rZW5LZXlcIiwgXCJ0b2tlbktleXdvcmRcIiwgXCJ0b2tlbk1ldGhvZFwiLCBcInRva2VuTWV0cmljQ291bnRlclwiLCBcInRva2VuTWV0cmljR2F1Z2VcIiwgXCJ0b2tlbk1vZHVsZVwiLCBcInRva2VuTmFtZXNwYWNlXCIsIFwidG9rZW5OZXN0ZWRcIiwgXCJ0b2tlbk51bGxcIiwgXCJ0b2tlbk51bWJlclwiLCBcInRva2VuT2JqZWN0XCIsIFwidG9rZW5PcGVyYXRvclwiLCBcInRva2VuUGFja2FnZVwiLCBcInRva2VuUGFyYW1ldGVyXCIsIFwidG9rZW5QZXJjb2xhdG9yXCIsIFwidG9rZW5Qcm9wZXJ0eVwiLCBcInRva2VuUmFuZ2VcIiwgXCJ0b2tlblJhbmtGZWF0dXJlXCIsIFwidG9rZW5SYW5rRmVhdHVyZXNcIiwgXCJ0b2tlblJlcG9cIiwgXCJ0b2tlblNlYXJjaFR5cGVcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkXSksXG5cbiAgLyoqXG4gICAgICogVGhlIGljb24gc2l6ZS5cbiAgICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBFeHBsYWluIHdoYXQgdGhpcyBpY29uIG1lYW5zIGZvciBzY3JlZW4gcmVhZGVycy5cbiAgICAgKi9cbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogUGFzcyBjZXJ0YWluIHByb3BzIGRvd24gdG8gYEV1aUljb25gXG4gICAgICovXG4gIC8vIEV1aUljb25UaXAncyBgdHlwZWAgaXMgcGFzc2VkIHRvIEV1aUljb24sIHNvIHdlIHdhbnQgdG8gZXhjbHVkZSBgdHlwZWAgZnJvbVxuICAvLyBpY29uUHJvcHM7IGhvd2V2ZXIsIGR1ZSB0byBUUydzIGJpdmFyaWFudCBmdW5jdGlvbiBhcmd1bWVudHMgYHR5cGVgIGNvdWxkIGJlXG4gIC8vIHBhc3NlZCB3aXRob3V0IGFueSBlcnJvci9mZWVkYmFjayBzbyB3ZSBleHBsaWNpdGx5IHNldCBpdCB0byBgbmV2ZXJgIHR5cGVcbiAgaWNvblByb3BzOiBQcm9wVHlwZXMuYW55LFxuICAvLyBUaGlzIGFyZSBjb3BpZWQgZnJvbSBFdWlUb29sVGlwUHJvcHMsIGJ1dCBtYWRlIG9wdGlvbmFsLiBEZWZhdWx0c1xuICAvLyBhcmUgYXBwbGllZCBiZWxvdy5cbiAgZGVsYXk6IFByb3BUeXBlcy5hbnksXG4gIHBvc2l0aW9uOiBQcm9wVHlwZXMuYW55XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IGNocm9tYSBmcm9tICdjaHJvbWEtanMnO1xuaW1wb3J0IHsgQ09MT1JfTU9ERVNfU1RBTkRBUkQgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy90aGVtZS90eXBlcyc7IC8vIENyZWF0ZSBhIENTUyBjb2xvciB2YWx1ZSB1c2luZyB3aG9zZSBvcGFjaXR5IGlzIGRldGVybWluZWQgYmFzZWRcbi8vIG9uIGVpdGhlciBhIGxpZ2h0IG9yIGRhcmsgdGhlbWUuIFdlIHVzZSBhIG11bHRpcGxpZXJcbi8vIG9mIDEgZm9yIGxpZ2h0IHRoZW1lcyBhbmQgMi41IGZvciBkYXJrIHRoZW1lc1xuXG5leHBvcnQgdmFyIGdldFNoYWRvd0NvbG9yID0gZnVuY3Rpb24gZ2V0U2hhZG93Q29sb3IoY29sb3IsIG9wYWNpdHksIGNvbG9yTW9kZSkge1xuICB2YXIgdGhlbWVPcGFjaXR5ID0gY29sb3JNb2RlID09PSBDT0xPUl9NT0RFU19TVEFOREFSRC5kYXJrID8gb3BhY2l0eSAqIDMuNSA6IG9wYWNpdHkgKiAxO1xuICByZXR1cm4gY2hyb21hKGNvbG9yKS5hbHBoYSh0aGVtZU9wYWNpdHkpLmNzcygpO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IHVzZUV1aVRoZW1lIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvdGhlbWUnO1xuaW1wb3J0IHsgZ2V0U2hhZG93Q29sb3IgfSBmcm9tICcuLi9mdW5jdGlvbnMnO1xuXG4vKipcbiAqIGV1aVNsaWdodFNoYWRvd1xuICovXG5leHBvcnQgdmFyIGV1aVNoYWRvd1hTbWFsbCA9IGZ1bmN0aW9uIGV1aVNoYWRvd1hTbWFsbChfcmVmKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYuZXVpVGhlbWUsXG4gICAgICBjb2xvck1vZGUgPSBfcmVmLmNvbG9yTW9kZTtcblxuICB2YXIgX3JlZjIgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9LFxuICAgICAgX2NvbG9yID0gX3JlZjIuY29sb3I7XG5cbiAgdmFyIGNvbG9yID0gX2NvbG9yIHx8IGV1aVRoZW1lLmNvbG9ycy5zaGFkb3c7XG4gIHJldHVybiBcIlxcbmJveC1zaGFkb3c6XFxuICAwIC44cHggLjhweCBcIi5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDQsIGNvbG9yTW9kZSksIFwiLFxcbiAgMCAyLjNweCAycHggXCIpLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4wMywgY29sb3JNb2RlKSwgXCI7XFxuXCIpO1xufTtcbi8qKlxuICogYm90dG9tU2hhZG93U21hbGxcbiAqL1xuXG5leHBvcnQgdmFyIGV1aVNoYWRvd1NtYWxsID0gZnVuY3Rpb24gZXVpU2hhZG93U21hbGwoX3JlZjMpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZjMuZXVpVGhlbWUsXG4gICAgICBjb2xvck1vZGUgPSBfcmVmMy5jb2xvck1vZGU7XG5cbiAgdmFyIF9yZWY0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcbiAgICAgIF9jb2xvciA9IF9yZWY0LmNvbG9yO1xuXG4gIHZhciBjb2xvciA9IF9jb2xvciB8fCBldWlUaGVtZS5jb2xvcnMuc2hhZG93O1xuICByZXR1cm4gXCJcXG5ib3gtc2hhZG93OlxcbiAgMCAuN3B4IDEuNHB4IFwiLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4wNywgY29sb3JNb2RlKSwgXCIsXFxuICAwIDEuOXB4IDRweCBcIikuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjA1LCBjb2xvck1vZGUpLCBcIixcXG4gIDAgNC41cHggMTBweCBcIikuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjA1LCBjb2xvck1vZGUpLCBcIjtcXG5cIik7XG59O1xuLyoqXG4gKiBib3R0b21TaGFkb3dNZWRpdW1cbiAqL1xuXG5leHBvcnQgdmFyIGV1aVNoYWRvd01lZGl1bSA9IGZ1bmN0aW9uIGV1aVNoYWRvd01lZGl1bShfcmVmNSkge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmNS5ldWlUaGVtZSxcbiAgICAgIGNvbG9yTW9kZSA9IF9yZWY1LmNvbG9yTW9kZTtcblxuICB2YXIgX3JlZjYgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9LFxuICAgICAgX2NvbG9yID0gX3JlZjYuY29sb3IsXG4gICAgICBwcm9wZXJ0eSA9IF9yZWY2LnByb3BlcnR5O1xuXG4gIHZhciBjb2xvciA9IF9jb2xvciB8fCBldWlUaGVtZS5jb2xvcnMuc2hhZG93O1xuICB2YXIgYXJyYXkgPSBbXCIwIC45cHggNHB4IFwiLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4wOCwgY29sb3JNb2RlKSksIFwiMCAyLjZweCA4cHggXCIuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjA2LCBjb2xvck1vZGUpKSwgXCIwIDUuN3B4IDEycHggXCIuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjA1LCBjb2xvck1vZGUpKSwgXCIwIDE1cHggMTVweCBcIi5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDQsIGNvbG9yTW9kZSkpXTtcblxuICBpZiAocHJvcGVydHkgPT09ICdmaWx0ZXInKSB7XG4gICAgcmV0dXJuIFwiZmlsdGVyOiBcIi5jb25jYXQoYXJyYXkucmVkdWNlKGZ1bmN0aW9uICh2LCBpKSB7XG4gICAgICByZXR1cm4gXCJcIi5jb25jYXQodiwgXCIgZHJvcC1zaGFkb3coXCIpLmNvbmNhdChpLCBcIilcIik7XG4gICAgfSwgJycpLCBcIjtcIik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIFwiYm94LXNoYWRvdzogXCIuY29uY2F0KGFycmF5Lm1hcChmdW5jdGlvbiAodikge1xuICAgICAgcmV0dXJuIHY7XG4gICAgfSksIFwiO1wiKTtcbiAgfVxufTtcbi8qKlxuICogYm90dG9tU2hhZG93XG4gKi9cblxuZXhwb3J0IHZhciBldWlTaGFkb3dMYXJnZSA9IGZ1bmN0aW9uIGV1aVNoYWRvd0xhcmdlKF9yZWY3KSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWY3LmV1aVRoZW1lLFxuICAgICAgY29sb3JNb2RlID0gX3JlZjcuY29sb3JNb2RlO1xuXG4gIHZhciBfcmVmOCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge30sXG4gICAgICBfY29sb3IgPSBfcmVmOC5jb2xvcjtcblxuICB2YXIgY29sb3IgPSBfY29sb3IgfHwgZXVpVGhlbWUuY29sb3JzLnNoYWRvdztcbiAgcmV0dXJuIFwiXFxuYm94LXNoYWRvdzpcXG4gIDAgMXB4IDVweCBcIi5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMSwgY29sb3JNb2RlKSwgXCIsXFxuICAwIDMuNnB4IDEzcHggXCIpLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4wNywgY29sb3JNb2RlKSwgXCIsXFxuICAwIDguNHB4IDIzcHggXCIpLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4wNiwgY29sb3JNb2RlKSwgXCIsXFxuICAwIDIzcHggMzVweCBcIikuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjA1LCBjb2xvck1vZGUpLCBcIjtcXG5cIik7XG59O1xuLyoqXG4gKiBib3R0b21TaGFkb3dMYXJnZVxuICovXG5cbmV4cG9ydCB2YXIgZXVpU2hhZG93WExhcmdlID0gZnVuY3Rpb24gZXVpU2hhZG93WExhcmdlKF9yZWY5KSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWY5LmV1aVRoZW1lLFxuICAgICAgY29sb3JNb2RlID0gX3JlZjkuY29sb3JNb2RlO1xuXG4gIHZhciBfcmVmMTAgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9LFxuICAgICAgX2NvbG9yID0gX3JlZjEwLmNvbG9yLFxuICAgICAgcmV2ZXJzZSA9IF9yZWYxMC5yZXZlcnNlO1xuXG4gIHZhciBjb2xvciA9IF9jb2xvciB8fCBldWlUaGVtZS5jb2xvcnMuc2hhZG93O1xuICByZXR1cm4gXCJcXG5ib3gtc2hhZG93OlxcbiAgMCBcIi5jb25jYXQocmV2ZXJzZSA/ICctJyA6ICcnLCBcIjIuN3B4IDlweCBcIikuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjEzLCBjb2xvck1vZGUpLCBcIixcXG4gIDAgXCIpLmNvbmNhdChyZXZlcnNlID8gJy0nIDogJycsIFwiOS40cHggMjRweCBcIikuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjA5LCBjb2xvck1vZGUpLCBcIixcXG4gIDAgXCIpLmNvbmNhdChyZXZlcnNlID8gJy0nIDogJycsIFwiMjEuOHB4IDQzcHggXCIpLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4wOCwgY29sb3JNb2RlKSwgXCI7XFxuXCIpO1xufTtcbi8qKlxuICogc2xpZ2h0U2hhZG93SG92ZXJcbiAqIFRPRE86IEkgdGhpbmsgdGhpcyBpcyBvbmx5IHVzZWQgYnkgcGFuZWxzL2NhcmRzIGluIHRoZSBBbXN0ZXJkYW0gdGhlbWUsIG1vdmUgdGhlcmVcbiAqL1xuXG5leHBvcnQgdmFyIGV1aVNsaWdodFNoYWRvd0hvdmVyID0gZnVuY3Rpb24gZXVpU2xpZ2h0U2hhZG93SG92ZXIoX3JlZjExKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYxMS5ldWlUaGVtZSxcbiAgICAgIGNvbG9yTW9kZSA9IF9yZWYxMS5jb2xvck1vZGU7XG5cbiAgdmFyIF9yZWYxMiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge30sXG4gICAgICBfY29sb3IgPSBfcmVmMTIuY29sb3I7XG5cbiAgdmFyIGNvbG9yID0gX2NvbG9yIHx8IGV1aVRoZW1lLmNvbG9ycy5zaGFkb3c7XG4gIHJldHVybiBcIlxcbmJveC1zaGFkb3c6XFxuICAwIDFweCA1cHggXCIuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjEsIGNvbG9yTW9kZSksIFwiLFxcbiAgMCAzLjZweCAxM3B4IFwiKS5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDcsIGNvbG9yTW9kZSksIFwiLFxcbiAgMCA4LjRweCAyM3B4IFwiKS5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDYsIGNvbG9yTW9kZSksIFwiLFxcbiAgMCAyM3B4IDM1cHggXCIpLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4wNSwgY29sb3JNb2RlKSwgXCI7XFxuXCIpO1xufTtcbmV4cG9ydCB2YXIgdXNlRXVpU2xpZ2h0U2hhZG93SG92ZXIgPSBmdW5jdGlvbiB1c2VFdWlTbGlnaHRTaGFkb3dIb3Zlcihjb2xvcikge1xuICB2YXIgZXVpVGhlbWVDb250ZXh0ID0gdXNlRXVpVGhlbWUoKTtcbiAgcmV0dXJuIGV1aVNsaWdodFNoYWRvd0hvdmVyKGV1aVRoZW1lQ29udGV4dCwge1xuICAgIGNvbG9yOiBjb2xvclxuICB9KTtcbn07XG4vKipcbiAqIGJvdHRvbVNoYWRvd0ZsYXRcbiAqXG4gKiBTaW1pbGFyIHRvIHNoYWRvdyBtZWRpdW0gYnV0IHdpdGhvdXQgdGhlIGJvdHRvbSBkZXB0aC5cbiAqIFVzZWZ1bCBmb3IgcG9wb3ZlcnMgdGhhdCBkcm9wIFVQIHJhdGhlciB0aGFuIERPV04uXG4gKi9cblxuZXhwb3J0IHZhciBldWlTaGFkb3dGbGF0ID0gZnVuY3Rpb24gZXVpU2hhZG93RmxhdChfcmVmMTMpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZjEzLmV1aVRoZW1lLFxuICAgICAgY29sb3JNb2RlID0gX3JlZjEzLmNvbG9yTW9kZTtcblxuICB2YXIgX3JlZjE0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcbiAgICAgIF9jb2xvciA9IF9yZWYxNC5jb2xvcjtcblxuICB2YXIgY29sb3IgPSBfY29sb3IgfHwgZXVpVGhlbWUuY29sb3JzLnNoYWRvdztcbiAgcmV0dXJuIFwiXFxuYm94LXNoYWRvdzpcXG4gIDAgMCAuOHB4IFwiLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4wNiwgY29sb3JNb2RlKSwgXCIsXFxuICAwIDAgMnB4IFwiKS5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDQsIGNvbG9yTW9kZSksIFwiLFxcbiAgMCAwIDVweCBcIikuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjA0LCBjb2xvck1vZGUpLCBcIixcXG4gIDAgMCAxN3B4IFwiKS5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDMsIGNvbG9yTW9kZSksIFwiO1xcblwiKTtcbn07XG5leHBvcnQgdmFyIHVzZUV1aVNoYWRvd0ZsYXQgPSBmdW5jdGlvbiB1c2VFdWlTaGFkb3dGbGF0KGNvbG9yKSB7XG4gIHZhciBldWlUaGVtZUNvbnRleHQgPSB1c2VFdWlUaGVtZSgpO1xuICByZXR1cm4gZXVpU2hhZG93RmxhdChldWlUaGVtZUNvbnRleHQsIHtcbiAgICBjb2xvcjogY29sb3JcbiAgfSk7XG59O1xuZXhwb3J0IHZhciBldWlTaGFkb3cgPSBmdW5jdGlvbiBldWlTaGFkb3coZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBzaXplID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAnbCc7XG5cbiAgdmFyIF9yZWYxNSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDoge30sXG4gICAgICBjb2xvciA9IF9yZWYxNS5jb2xvcjtcblxuICBzd2l0Y2ggKHNpemUpIHtcbiAgICBjYXNlICd4cyc6XG4gICAgICByZXR1cm4gZXVpU2hhZG93WFNtYWxsKGV1aVRoZW1lQ29udGV4dCwge1xuICAgICAgICBjb2xvcjogY29sb3JcbiAgICAgIH0pO1xuXG4gICAgY2FzZSAncyc6XG4gICAgICByZXR1cm4gZXVpU2hhZG93U21hbGwoZXVpVGhlbWVDb250ZXh0LCB7XG4gICAgICAgIGNvbG9yOiBjb2xvclxuICAgICAgfSk7XG5cbiAgICBjYXNlICdtJzpcbiAgICAgIHJldHVybiBldWlTaGFkb3dNZWRpdW0oZXVpVGhlbWVDb250ZXh0LCB7XG4gICAgICAgIGNvbG9yOiBjb2xvclxuICAgICAgfSk7XG5cbiAgICBjYXNlICdsJzpcbiAgICAgIHJldHVybiBldWlTaGFkb3dMYXJnZShldWlUaGVtZUNvbnRleHQsIHtcbiAgICAgICAgY29sb3I6IGNvbG9yXG4gICAgICB9KTtcblxuICAgIGNhc2UgJ3hsJzpcbiAgICAgIHJldHVybiBldWlTaGFkb3dYTGFyZ2UoZXVpVGhlbWVDb250ZXh0LCB7XG4gICAgICAgIGNvbG9yOiBjb2xvclxuICAgICAgfSk7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgY29uc29sZS53YXJuKCdQbGVhc2UgcHJvdmlkZSBhIHZhbGlkIHNpemUgb3B0aW9uIHRvIHVzZUV1aVNoYWRvdycpO1xuICAgICAgcmV0dXJuICcnO1xuICB9XG59O1xuZXhwb3J0IHZhciB1c2VFdWlTaGFkb3cgPSBmdW5jdGlvbiB1c2VFdWlTaGFkb3coKSB7XG4gIHZhciBzaXplID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiAnbCc7XG4gIHZhciBjb2xvciA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICB2YXIgZXVpVGhlbWVDb250ZXh0ID0gdXNlRXVpVGhlbWUoKTtcbiAgcmV0dXJuIGV1aVNoYWRvdyhldWlUaGVtZUNvbnRleHQsIHNpemUsIHtcbiAgICBjb2xvcjogY29sb3JcbiAgfSk7XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjb2xvclwiLCBcImNsYXNzTmFtZVwiLCBcImhyZWZcIiwgXCJleHRlcm5hbFwiLCBcInRhcmdldFwiLCBcInJlbFwiLCBcInR5cGVcIiwgXCJvbkNsaWNrXCIsIFwiZGlzYWJsZWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBnZXRTZWN1cmVSZWxGb3JUYXJnZXQsIHVzZUV1aVRoZW1lIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgZXVpTGlua1N0eWxlcyB9IGZyb20gJy4vbGluay5zdHlsZXMnO1xuaW1wb3J0IHsgRXVpSWNvbiB9IGZyb20gJy4uL2ljb24nO1xuaW1wb3J0IHsgRXVpSTE4biwgdXNlRXVpSTE4biB9IGZyb20gJy4uL2kxOG4nO1xuaW1wb3J0IHsgRXVpU2NyZWVuUmVhZGVyT25seSB9IGZyb20gJy4uL2FjY2Vzc2liaWxpdHknO1xuaW1wb3J0IHsgdmFsaWRhdGVIcmVmIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2VjdXJpdHkvaHJlZl92YWxpZGF0b3InO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgQ09MT1JTID0gWydwcmltYXJ5JywgJ3N1YmR1ZWQnLCAnc3VjY2VzcycsICdhY2NlbnQnLCAnZGFuZ2VyJywgJ3dhcm5pbmcnLCAndGV4dCcsICdnaG9zdCddO1xudmFyIEV1aUxpbmsgPSAvKiNfX1BVUkVfXyovZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ3ByaW1hcnknIDogX3JlZiRjb2xvcixcbiAgICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgaHJlZiA9IF9yZWYuaHJlZixcbiAgICAgIGV4dGVybmFsID0gX3JlZi5leHRlcm5hbCxcbiAgICAgIHRhcmdldCA9IF9yZWYudGFyZ2V0LFxuICAgICAgcmVsID0gX3JlZi5yZWwsXG4gICAgICBfcmVmJHR5cGUgPSBfcmVmLnR5cGUsXG4gICAgICB0eXBlID0gX3JlZiR0eXBlID09PSB2b2lkIDAgPyAnYnV0dG9uJyA6IF9yZWYkdHlwZSxcbiAgICAgIG9uQ2xpY2sgPSBfcmVmLm9uQ2xpY2ssXG4gICAgICBfZGlzYWJsZWQgPSBfcmVmLmRpc2FibGVkLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHZhciBzdHlsZXMgPSBldWlMaW5rU3R5bGVzKGV1aVRoZW1lKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpTGlua107XG4gIHZhciBjc3NTY3JlZW5SZWFkZXJUZXh0U3R5bGVzID0gW3N0eWxlcy5ldWlMaW5rX19zY3JlZW5SZWFkZXJUZXh0XTtcbiAgdmFyIGNzc0V4dGVybmFsTGlua0ljb25TdHlsZXMgPSBbc3R5bGVzLmV1aUxpbmtfX2V4dGVybmFsSWNvbl07XG4gIHZhciBpc0hyZWZWYWxpZCA9ICFocmVmIHx8IHZhbGlkYXRlSHJlZihocmVmKTtcbiAgdmFyIGRpc2FibGVkID0gX2Rpc2FibGVkIHx8ICFpc0hyZWZWYWxpZDtcblxuICB2YXIgbmV3VGFyZ2V0U2NyZWVucmVhZGVyVGV4dCA9IF9fX0Vtb3Rpb25KU1goRXVpU2NyZWVuUmVhZGVyT25seSwge1xuICAgIGNzczogY3NzU2NyZWVuUmVhZGVyVGV4dFN0eWxlc1xuICB9LCBfX19FbW90aW9uSlNYKFwic3BhblwiLCBudWxsLCBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICB0b2tlbjogXCJldWlMaW5rLm5ld1RhcmdldC5zY3JlZW5SZWFkZXJPbmx5VGV4dFwiLFxuICAgIGRlZmF1bHQ6IFwiKG9wZW5zIGluIGEgbmV3IHRhYiBvciB3aW5kb3cpXCJcbiAgfSkpKTtcblxuICB2YXIgZXh0ZXJuYWxMaW5rSWNvbiA9IF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgIFwiYXJpYS1sYWJlbFwiOiB1c2VFdWlJMThuKCdldWlMaW5rLmV4dGVybmFsLmFyaWFMYWJlbCcsICdFeHRlcm5hbCBsaW5rJyksXG4gICAgc2l6ZTogXCJzXCIsXG4gICAgY3NzOiBjc3NFeHRlcm5hbExpbmtJY29uU3R5bGVzLFxuICAgIHR5cGU6IFwicG9wb3V0XCJcbiAgfSk7XG5cbiAgaWYgKGhyZWYgPT09IHVuZGVmaW5lZCB8fCAhaXNIcmVmVmFsaWQpIHtcbiAgICB2YXIgYnV0dG9uUHJvcHMgPSBfb2JqZWN0U3ByZWFkKHtcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lcygnZXVpTGluaycsIGNsYXNzTmFtZSksXG4gICAgICBjc3M6IFtjc3NTdHlsZXMsIGRpc2FibGVkID8gW3N0eWxlcy5kaXNhYmxlZF0gOiBzdHlsZXNbY29sb3JdXSxcbiAgICAgIHR5cGU6IHR5cGUsXG4gICAgICBvbkNsaWNrOiBvbkNsaWNrLFxuICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkXG4gICAgfSwgcmVzdCk7XG5cbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImJ1dHRvblwiLCBfZXh0ZW5kcyh7XG4gICAgICByZWY6IHJlZlxuICAgIH0sIGJ1dHRvblByb3BzKSwgY2hpbGRyZW4pO1xuICB9XG5cbiAgdmFyIHNlY3VyZVJlbCA9IGdldFNlY3VyZVJlbEZvclRhcmdldCh7XG4gICAgaHJlZjogaHJlZixcbiAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICByZWw6IHJlbFxuICB9KTtcblxuICB2YXIgYW5jaG9yUHJvcHMgPSBfb2JqZWN0U3ByZWFkKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ2V1aUxpbmsnLCBjbGFzc05hbWUpLFxuICAgIGNzczogW2Nzc1N0eWxlcywgc3R5bGVzW2NvbG9yXV0sXG4gICAgaHJlZjogaHJlZixcbiAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICByZWw6IHNlY3VyZVJlbCxcbiAgICBvbkNsaWNrOiBvbkNsaWNrXG4gIH0sIHJlc3QpO1xuXG4gIHZhciBzaG93RXh0ZXJuYWxMaW5rSWNvbiA9IHRhcmdldCA9PT0gJ19ibGFuaycgJiYgZXh0ZXJuYWwgIT09IGZhbHNlIHx8IGV4dGVybmFsID09PSB0cnVlO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcImFcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmXG4gIH0sIGFuY2hvclByb3BzKSwgY2hpbGRyZW4sIHNob3dFeHRlcm5hbExpbmtJY29uICYmIGV4dGVybmFsTGlua0ljb24sIHRhcmdldCA9PT0gJ19ibGFuaycgJiYgbmV3VGFyZ2V0U2NyZWVucmVhZGVyVGV4dCk7XG59KTtcbkV1aUxpbmsucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHR5cGU6IFByb3BUeXBlcy5vbmVPZihbXCJidXR0b25cIiwgXCJyZXNldFwiLCBcInN1Ym1pdFwiXSksXG5cbiAgLyoqXG4gICAgICogQW55IG9mIG91ciBuYW1lZCBjb2xvcnMuXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogQW55IG9mIG91ciBuYW1lZCBjb2xvcnMuXG4gICAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMuYW55LFxuICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICAgKiBTZXQgdG8gdHJ1ZSB0byBzaG93IGFuIGljb24gaW5kaWNhdGluZyB0aGF0IGl0IGlzIGFuIGV4dGVybmFsIGxpbms7XG4gICAgICogRGVmYXVsdHMgdG8gdHJ1ZSBpZiBgdGFyZ2V0PVwiX2JsYW5rXCJgXG4gICAgICovXG4gIGV4dGVybmFsOiBQcm9wVHlwZXMuYm9vbFxufTtcbkV1aUxpbmsuZGlzcGxheU5hbWUgPSAnRXVpTGluayc7XG5leHBvcnQgeyBFdWlMaW5rIH07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImRpc2FibGVGb2N1c1RyYXBcIiwgXCJpbnB1dFwiLCBcImZ1bGxXaWR0aFwiLCBcIm9uUGFuZWxSZXNpemVcIiwgXCJpbnB1dFJlZlwiLCBcInBhbmVsUmVmXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgeyB2YXIgX2kgPSBhcnIgPT0gbnVsbCA/IG51bGwgOiB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGFycltTeW1ib2wuaXRlcmF0b3JdIHx8IGFycltcIkBAaXRlcmF0b3JcIl07IGlmIChfaSA9PSBudWxsKSByZXR1cm47IHZhciBfYXJyID0gW107IHZhciBfbiA9IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIgX3MsIF9lOyB0cnkgeyBmb3IgKF9pID0gX2kuY2FsbChhcnIpOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7IF9hcnIucHVzaChfcy52YWx1ZSk7IGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhazsgfSB9IGNhdGNoIChlcnIpIHsgX2QgPSB0cnVlOyBfZSA9IGVycjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSAhPSBudWxsKSBfaVtcInJldHVyblwiXSgpOyB9IGZpbmFsbHkgeyBpZiAoX2QpIHRocm93IF9lOyB9IH0gcmV0dXJuIF9hcnI7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIHVzZUVmZmVjdCwgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NuYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHRhYmJhYmxlIH0gZnJvbSAndGFiYmFibGUnO1xuaW1wb3J0IHsgRXVpRm9jdXNUcmFwIH0gZnJvbSAnLi4vZm9jdXNfdHJhcCc7XG5pbXBvcnQgeyBFdWlQb3BvdmVyIH0gZnJvbSAnLi9wb3BvdmVyJztcbmltcG9ydCB7IEV1aVJlc2l6ZU9ic2VydmVyIH0gZnJvbSAnLi4vb2JzZXJ2ZXIvcmVzaXplX29ic2VydmVyJztcbmltcG9ydCB7IGNhc2NhZGluZ01lbnVLZXlzLCB1c2VDb21iaW5lZFJlZnMsIHVzZUV1aVRoZW1lIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgZXVpRm9ybU1heFdpZHRoIH0gZnJvbSAnLi4vZm9ybS9mb3JtLnN0eWxlcyc7XG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBsb2dpY2FsQ1NTIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpSW5wdXRQb3BvdmVyID0gZnVuY3Rpb24gRXVpSW5wdXRQb3BvdmVyKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgX3JlZiRkaXNhYmxlRm9jdXNUcmFwID0gX3JlZi5kaXNhYmxlRm9jdXNUcmFwLFxuICAgICAgZGlzYWJsZUZvY3VzVHJhcCA9IF9yZWYkZGlzYWJsZUZvY3VzVHJhcCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGRpc2FibGVGb2N1c1RyYXAsXG4gICAgICBpbnB1dCA9IF9yZWYuaW5wdXQsXG4gICAgICBfcmVmJGZ1bGxXaWR0aCA9IF9yZWYuZnVsbFdpZHRoLFxuICAgICAgZnVsbFdpZHRoID0gX3JlZiRmdWxsV2lkdGggPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRmdWxsV2lkdGgsXG4gICAgICBvblBhbmVsUmVzaXplID0gX3JlZi5vblBhbmVsUmVzaXplLFxuICAgICAgX2lucHV0UmVmID0gX3JlZi5pbnB1dFJlZixcbiAgICAgIF9wYW5lbFJlZiA9IF9yZWYucGFuZWxSZWYsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBldWlUaGVtZUNvbnRleHQgPSB1c2VFdWlUaGVtZSgpO1xuXG4gIHZhciBfdXNlU3RhdGUgPSB1c2VTdGF0ZShudWxsKSxcbiAgICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgICAgaW5wdXRFbCA9IF91c2VTdGF0ZTJbMF0sXG4gICAgICBzZXRJbnB1dEVsID0gX3VzZVN0YXRlMlsxXTtcblxuICB2YXIgX3VzZVN0YXRlMyA9IHVzZVN0YXRlKCksXG4gICAgICBfdXNlU3RhdGU0ID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlMywgMiksXG4gICAgICBpbnB1dEVsV2lkdGggPSBfdXNlU3RhdGU0WzBdLFxuICAgICAgc2V0SW5wdXRFbFdpZHRoID0gX3VzZVN0YXRlNFsxXTtcblxuICB2YXIgX3VzZVN0YXRlNSA9IHVzZVN0YXRlKG51bGwpLFxuICAgICAgX3VzZVN0YXRlNiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZTUsIDIpLFxuICAgICAgcGFuZWxFbCA9IF91c2VTdGF0ZTZbMF0sXG4gICAgICBzZXRQYW5lbEVsID0gX3VzZVN0YXRlNlsxXTtcblxuICB2YXIgaW5wdXRSZWYgPSB1c2VDb21iaW5lZFJlZnMoW3NldElucHV0RWwsIF9pbnB1dFJlZl0pO1xuICB2YXIgcGFuZWxSZWYgPSB1c2VDb21iaW5lZFJlZnMoW3NldFBhbmVsRWwsIF9wYW5lbFJlZl0pO1xuICB2YXIgc2V0UGFuZWxXaWR0aCA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uICh3aWR0aCkge1xuICAgIGlmIChwYW5lbEVsICYmICghIWlucHV0RWxXaWR0aCB8fCAhIXdpZHRoKSkge1xuICAgICAgdmFyIG5ld1dpZHRoID0gISF3aWR0aCA/IHdpZHRoIDogaW5wdXRFbFdpZHRoO1xuICAgICAgcGFuZWxFbC5zdHlsZS53aWR0aCA9IFwiXCIuY29uY2F0KG5ld1dpZHRoLCBcInB4XCIpO1xuXG4gICAgICBpZiAob25QYW5lbFJlc2l6ZSkge1xuICAgICAgICBvblBhbmVsUmVzaXplKG5ld1dpZHRoKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtwYW5lbEVsLCBpbnB1dEVsV2lkdGgsIG9uUGFuZWxSZXNpemVdKTtcbiAgdmFyIG9uUmVzaXplID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKCkge1xuICAgIGlmIChpbnB1dEVsKSB7XG4gICAgICB2YXIgX3dpZHRoID0gaW5wdXRFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICAgIHNldElucHV0RWxXaWR0aChfd2lkdGgpO1xuICAgICAgc2V0UGFuZWxXaWR0aChfd2lkdGgpO1xuICAgIH1cbiAgfSwgW2lucHV0RWwsIHNldFBhbmVsV2lkdGhdKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBvblJlc2l6ZSgpO1xuICB9LCBbb25SZXNpemVdKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBzZXRQYW5lbFdpZHRoKCk7XG4gIH0sIFtzZXRQYW5lbFdpZHRoXSk7XG5cbiAgdmFyIG9uS2V5RG93biA9IGZ1bmN0aW9uIG9uS2V5RG93bihldmVudCkge1xuICAgIGlmIChwYW5lbEVsICYmIGV2ZW50LmtleSA9PT0gY2FzY2FkaW5nTWVudUtleXMuVEFCKSB7XG4gICAgICB2YXIgdGFiYmFibGVJdGVtcyA9IHRhYmJhYmxlKHBhbmVsRWwpLmZpbHRlcihmdW5jdGlvbiAoZWwpIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20oZWwuYXR0cmlidXRlcykubWFwKGZ1bmN0aW9uIChlbCkge1xuICAgICAgICAgIHJldHVybiBlbC5uYW1lO1xuICAgICAgICB9KS5pbmRleE9mKCdkYXRhLWZvY3VzLWd1YXJkJykgPCAwO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChkaXNhYmxlRm9jdXNUcmFwIHx8IHRhYmJhYmxlSXRlbXMubGVuZ3RoICYmIHRhYmJhYmxlSXRlbXNbdGFiYmFibGVJdGVtcy5sZW5ndGggLSAxXSA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkge1xuICAgICAgICBwcm9wcy5jbG9zZVBvcG92ZXIoKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgdmFyIGNsYXNzZXMgPSBjbGFzc25hbWVzKCdldWlJbnB1dFBvcG92ZXInLCBjbGFzc05hbWUpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlQb3BvdmVyLCBfZXh0ZW5kcyh7XG4gICAgY3NzOiAvKiNfX1BVUkVfXyovY3NzKGZ1bGxXaWR0aCA/IHVuZGVmaW5lZCA6IGxvZ2ljYWxDU1MoJ21heC13aWR0aCcsIGV1aUZvcm1NYXhXaWR0aChldWlUaGVtZUNvbnRleHQpKSwgXCI7bGFiZWw6RXVpSW5wdXRQb3BvdmVyO1wiKSxcbiAgICBvd25Gb2N1czogZmFsc2UsXG4gICAgYnV0dG9uOiBfX19FbW90aW9uSlNYKEV1aVJlc2l6ZU9ic2VydmVyLCB7XG4gICAgICBvblJlc2l6ZTogb25SZXNpemVcbiAgICB9LCBmdW5jdGlvbiAocmVzaXplUmVmKSB7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICAgIHJlZjogcmVzaXplUmVmXG4gICAgICB9LCBpbnB1dCk7XG4gICAgfSksXG4gICAgYnV0dG9uUmVmOiBpbnB1dFJlZixcbiAgICBwYW5lbFJlZjogcGFuZWxSZWYsXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gIH0sIHByb3BzKSwgX19fRW1vdGlvbkpTWChFdWlGb2N1c1RyYXAsIHtcbiAgICBjbGlja091dHNpZGVEaXNhYmxlczogdHJ1ZSxcbiAgICBkaXNhYmxlZDogZGlzYWJsZUZvY3VzVHJhcFxuICB9LCBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICBvbktleURvd246IG9uS2V5RG93blxuICB9LCBjaGlsZHJlbikpKTtcbn07XG5FdWlJbnB1dFBvcG92ZXIucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGRpc2FibGVGb2N1c1RyYXA6IFByb3BUeXBlcy5ib29sLFxuICBmdWxsV2lkdGg6IFByb3BUeXBlcy5ib29sLFxuICBpbnB1dDogUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLFxuICBpbnB1dFJlZjogUHJvcFR5cGVzLmFueSxcbiAgb25QYW5lbFJlc2l6ZTogUHJvcFR5cGVzLmZ1bmNcbn07XG5FdWlJbnB1dFBvcG92ZXIuZGVmYXVsdFByb3BzID0ge1xuICBhbmNob3JQb3NpdGlvbjogJ2Rvd25MZWZ0JyxcbiAgYXR0YWNoVG9BbmNob3I6IHRydWUsXG4gIGRpc3BsYXk6ICdibG9jaycsXG4gIHBhbmVsUGFkZGluZ1NpemU6ICdzJ1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG52YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGlja091dHNpZGVEaXNhYmxlc1wiLCBcImRpc2FibGVkXCIsIFwicmV0dXJuRm9jdXNcIiwgXCJub0lzb2xhdGlvblwiLCBcInNjcm9sbExvY2tcIl07XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgRm9jdXNPbiB9IGZyb20gJ3JlYWN0LWZvY3VzLW9uJztcbmltcG9ydCB7IGZpbmRFbGVtZW50QnlTZWxlY3Rvck9yUmVmIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpRm9jdXNUcmFwID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhFdWlGb2N1c1RyYXAsIF9Db21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoRXVpRm9jdXNUcmFwKTtcblxuICBmdW5jdGlvbiBFdWlGb2N1c1RyYXAoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aUZvY3VzVHJhcCk7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbC5hcHBseShfc3VwZXIsIFt0aGlzXS5jb25jYXQoYXJncykpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInN0YXRlXCIsIHtcbiAgICAgIGhhc0JlZW5EaXNhYmxlZEJ5Q2xpY2s6IGZhbHNlXG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwibGFzdEludGVyY2VwdGVkRXZlbnRcIiwgbnVsbCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicHJldmVudEZvY3VzRXhpdFwiLCBmYWxzZSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic2V0SW5pdGlhbEZvY3VzXCIsIGZ1bmN0aW9uIChpbml0aWFsRm9jdXMpIHtcbiAgICAgIGlmICghaW5pdGlhbEZvY3VzKSByZXR1cm47XG4gICAgICB2YXIgbm9kZSA9IGZpbmRFbGVtZW50QnlTZWxlY3Rvck9yUmVmKGluaXRpYWxGb2N1cyk7XG4gICAgICBpZiAoIW5vZGUpIHJldHVybjsgLy8gYGRhdGEtYXV0b2ZvY3VzYCBpcyBwYXJ0IG9mIHRoZSAncmVhY3QtZm9jdXMtb24nIEFQSVxuXG4gICAgICBub2RlLnNldEF0dHJpYnV0ZSgnZGF0YS1hdXRvZm9jdXMnLCAndHJ1ZScpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uTW91c2V1cE91dHNpZGVcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIF90aGlzLnJlbW92ZU1vdXNldXBMaXN0ZW5lcigpOyAvLyBUaW1lb3V0IGdpdmVzIHByZWNlZGVuY2UgdG8gdGhlIGNvbnN1bWVyIHRvIGluaXRpYXRlIGNsb3NlIGlmIGl0IGhhcyB0b2dnbGUgYmVoYXZpb3IuXG4gICAgICAvLyBPdGhlcndpc2UgdGhpcyBldmVudCBtYXkgb2NjdXIgZmlyc3QgYW5kIHRoZSBjb25zdW1lciB0b2dnbGUgd2lsbCByZW9wZW4gdGhlIGZseW91dC5cblxuXG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzJHByb3BzJG9uQ2xpY2tPdSwgX3RoaXMkcHJvcHM7XG5cbiAgICAgICAgcmV0dXJuIChfdGhpcyRwcm9wcyRvbkNsaWNrT3UgPSAoX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcykub25DbGlja091dHNpZGUpID09PSBudWxsIHx8IF90aGlzJHByb3BzJG9uQ2xpY2tPdSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkcHJvcHMkb25DbGlja091LmNhbGwoX3RoaXMkcHJvcHMsIGUpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiYWRkTW91c2V1cExpc3RlbmVyXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBfdGhpcy5vbk1vdXNldXBPdXRzaWRlKTtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgX3RoaXMub25Nb3VzZXVwT3V0c2lkZSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicmVtb3ZlTW91c2V1cExpc3RlbmVyXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBfdGhpcy5vbk1vdXNldXBPdXRzaWRlKTtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgX3RoaXMub25Nb3VzZXVwT3V0c2lkZSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFuZGxlT3V0c2lkZUNsaWNrXCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzMiA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIG9uQ2xpY2tPdXRzaWRlID0gX3RoaXMkcHJvcHMyLm9uQ2xpY2tPdXRzaWRlLFxuICAgICAgICAgIGNsaWNrT3V0c2lkZURpc2FibGVzID0gX3RoaXMkcHJvcHMyLmNsaWNrT3V0c2lkZURpc2FibGVzLFxuICAgICAgICAgIGNsb3NlT25Nb3VzZXVwID0gX3RoaXMkcHJvcHMyLmNsb3NlT25Nb3VzZXVwO1xuXG4gICAgICBpZiAoY2xpY2tPdXRzaWRlRGlzYWJsZXMpIHtcbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGhhc0JlZW5EaXNhYmxlZEJ5Q2xpY2s6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvbkNsaWNrT3V0c2lkZSkge1xuICAgICAgICBjbG9zZU9uTW91c2V1cCA/IF90aGlzLmFkZE1vdXNldXBMaXN0ZW5lcigpIDogb25DbGlja091dHNpZGUoZXZlbnQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEV1aUZvY3VzVHJhcCwgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICB0aGlzLnNldEluaXRpYWxGb2N1cyh0aGlzLnByb3BzLmluaXRpYWxGb2N1cyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudERpZFVwZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzKSB7XG4gICAgICBpZiAocHJldlByb3BzLmRpc2FibGVkID09PSB0cnVlICYmIHRoaXMucHJvcHMuZGlzYWJsZWQgPT09IGZhbHNlKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9uby1kaWQtdXBkYXRlLXNldC1zdGF0ZVxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBoYXNCZWVuRGlzYWJsZWRCeUNsaWNrOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50V2lsbFVubW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICB0aGlzLnJlbW92ZU1vdXNldXBMaXN0ZW5lcigpO1xuICAgIH0gLy8gUHJvZ3JhbW1hdGljYWxseSBzZXRzIGZvY3VzIG9uIGEgbmVzdGVkIERPTSBub2RlOyBvcHRpb25hbFxuXG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMzLmNoaWxkcmVuLFxuICAgICAgICAgIGNsaWNrT3V0c2lkZURpc2FibGVzID0gX3RoaXMkcHJvcHMzLmNsaWNrT3V0c2lkZURpc2FibGVzLFxuICAgICAgICAgIGRpc2FibGVkID0gX3RoaXMkcHJvcHMzLmRpc2FibGVkLFxuICAgICAgICAgIHJldHVybkZvY3VzID0gX3RoaXMkcHJvcHMzLnJldHVybkZvY3VzLFxuICAgICAgICAgIG5vSXNvbGF0aW9uID0gX3RoaXMkcHJvcHMzLm5vSXNvbGF0aW9uLFxuICAgICAgICAgIHNjcm9sbExvY2sgPSBfdGhpcyRwcm9wczMuc2Nyb2xsTG9jayxcbiAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzMywgX2V4Y2x1ZGVkKTtcblxuICAgICAgdmFyIGlzRGlzYWJsZWQgPSBkaXNhYmxlZCB8fCB0aGlzLnN0YXRlLmhhc0JlZW5EaXNhYmxlZEJ5Q2xpY2s7XG5cbiAgICAgIHZhciBmb2N1c09uUHJvcHMgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe1xuICAgICAgICByZXR1cm5Gb2N1czogcmV0dXJuRm9jdXMsXG4gICAgICAgIG5vSXNvbGF0aW9uOiBub0lzb2xhdGlvbixcbiAgICAgICAgc2Nyb2xsTG9jazogc2Nyb2xsTG9jayxcbiAgICAgICAgZW5hYmxlZDogIWlzRGlzYWJsZWRcbiAgICAgIH0sIHJlc3QpLCB7fSwge1xuICAgICAgICBvbkNsaWNrT3V0c2lkZTogdGhpcy5oYW5kbGVPdXRzaWRlQ2xpY2tcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChGb2N1c09uLCBmb2N1c09uUHJvcHMsIGNoaWxkcmVuKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gRXVpRm9jdXNUcmFwO1xufShDb21wb25lbnQpO1xuXG5fZGVmaW5lUHJvcGVydHkoRXVpRm9jdXNUcmFwLCBcImRlZmF1bHRQcm9wc1wiLCB7XG4gIGNsaWNrT3V0c2lkZURpc2FibGVzOiBmYWxzZSxcbiAgZGlzYWJsZWQ6IGZhbHNlLFxuICByZXR1cm5Gb2N1czogdHJ1ZSxcbiAgbm9Jc29sYXRpb246IHRydWUsXG4gIHNjcm9sbExvY2s6IGZhbHNlXG59KTtcblxuRXVpRm9jdXNUcmFwLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAqIFdoZXRoZXIgYG9uQ2xpY2tPdXRzaWRlYCBzaG91bGQgYmUgY2FsbGVkIG9uIG1vdXNldXAgaW5zdGVhZCBvZiBtb3VzZWRvd24uXG4gICAgICogVGhpcyBmbGFnIGNhbiBiZSB1c2VkIHRvIHByZXZlbnQgY29uZmxpY3RzIHdpdGggb3V0c2lkZSB0b2dnbGUgYnV0dG9ucyBieSBkZWxheWluZyB0aGUgY2xvc2luZyBjbGljayBjYWxsYmFjay5cbiAgICAgKi9cbiAgY2xvc2VPbk1vdXNldXA6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIENsaWNraW5nIG91dHNpZGUgdGhlIHRyYXAgYXJlYSB3aWxsIGRpc2FibGUgdGhlIHRyYXBcbiAgICAgKi9cbiAgY2xpY2tPdXRzaWRlRGlzYWJsZXM6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIFJlZmVyZW5jZSB0byBlbGVtZW50IHRoYXQgd2lsbCBnZXQgZm9jdXMgd2hlbiB0aGUgdHJhcCBpcyBpbml0aWF0ZWRcbiAgICAgKi9cbiAgaW5pdGlhbEZvY3VzOiBQcm9wVHlwZXMuYW55LFxuICBzdHlsZTogUHJvcFR5cGVzLmFueSxcbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sXG59OyIsICIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cblxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSwgU3VwcHJlc3NlZEVycm9yLCBTeW1ib2wgKi9cblxudmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbihkLCBiKSB7XG4gIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XG4gIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG59XG5cbmV4cG9ydCB2YXIgX19hc3NpZ24gPSBmdW5jdGlvbigpIHtcbiAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uIF9fYXNzaWduKHQpIHtcbiAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0O1xuICB9XG4gIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcbiAgdmFyIHQgPSB7fTtcbiAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXG4gICAgICB0W3BdID0gc1twXTtcbiAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxuICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcbiAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XG4gICAgICB9XG4gIHJldHVybiB0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19wYXJhbShwYXJhbUluZGV4LCBkZWNvcmF0b3IpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkgeyBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpOyB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2VzRGVjb3JhdGUoY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHtcbiAgZnVuY3Rpb24gYWNjZXB0KGYpIHsgaWYgKGYgIT09IHZvaWQgMCAmJiB0eXBlb2YgZiAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRnVuY3Rpb24gZXhwZWN0ZWRcIik7IHJldHVybiBmOyB9XG4gIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleSA9IGtpbmQgPT09IFwiZ2V0dGVyXCIgPyBcImdldFwiIDoga2luZCA9PT0gXCJzZXR0ZXJcIiA/IFwic2V0XCIgOiBcInZhbHVlXCI7XG4gIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bXCJzdGF0aWNcIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsO1xuICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTtcbiAgdmFyIF8sIGRvbmUgPSBmYWxzZTtcbiAgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHZhciBjb250ZXh0ID0ge307XG4gICAgICBmb3IgKHZhciBwIGluIGNvbnRleHRJbikgY29udGV4dFtwXSA9IHAgPT09IFwiYWNjZXNzXCIgPyB7fSA6IGNvbnRleHRJbltwXTtcbiAgICAgIGZvciAodmFyIHAgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dC5hY2Nlc3NbcF0gPSBjb250ZXh0SW4uYWNjZXNzW3BdO1xuICAgICAgY29udGV4dC5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uIChmKSB7IGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkXCIpOyBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmIHx8IG51bGwpKTsgfTtcbiAgICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpXSkoa2luZCA9PT0gXCJhY2Nlc3NvclwiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleV0sIGNvbnRleHQpO1xuICAgICAgaWYgKGtpbmQgPT09IFwiYWNjZXNzb3JcIikge1xuICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSBcIm9iamVjdFwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiT2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF87XG4gICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXztcbiAgICAgICAgICBpZiAoXyA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF8pO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoXyA9IGFjY2VwdChyZXN1bHQpKSB7XG4gICAgICAgICAgaWYgKGtpbmQgPT09IFwiZmllbGRcIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXyk7XG4gICAgICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleV0gPSBfO1xuICAgICAgfVxuICB9XG4gIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTtcbiAgZG9uZSA9IHRydWU7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19ydW5Jbml0aWFsaXplcnModGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZSkge1xuICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhbHVlID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaV0uY2FsbCh0aGlzQXJnLCB2YWx1ZSkgOiBpbml0aWFsaXplcnNbaV0uY2FsbCh0aGlzQXJnKTtcbiAgfVxuICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZSA6IHZvaWQgMDtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3Byb3BLZXkoeCkge1xuICByZXR1cm4gdHlwZW9mIHggPT09IFwic3ltYm9sXCIgPyB4IDogXCJcIi5jb25jYXQoeCk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19zZXRGdW5jdGlvbk5hbWUoZiwgbmFtZSwgcHJlZml4KSB7XG4gIGlmICh0eXBlb2YgbmFtZSA9PT0gXCJzeW1ib2xcIikgbmFtZSA9IG5hbWUuZGVzY3JpcHRpb24gPyBcIltcIi5jb25jYXQobmFtZS5kZXNjcmlwdGlvbiwgXCJdXCIpIDogXCJcIjtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLCBcIm5hbWVcIiwgeyBjb25maWd1cmFibGU6IHRydWUsIHZhbHVlOiBwcmVmaXggPyBcIlwiLmNvbmNhdChwcmVmaXgsIFwiIFwiLCBuYW1lKSA6IG5hbWUgfSk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSkge1xuICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19nZW5lcmF0b3IodGhpc0FyZywgYm9keSkge1xuICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xuICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcbiAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XG4gIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICAgIHdoaWxlIChnICYmIChnID0gMCwgb3BbMF0gJiYgKF8gPSAwKSksIF8pIHRyeSB7XG4gICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcbiAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XG4gICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XG4gICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxuICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XG4gICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgfVxufVxuXG5leHBvcnQgdmFyIF9fY3JlYXRlQmluZGluZyA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgfVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgb1trMl0gPSBtW2tdO1xufSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2V4cG9ydFN0YXIobSwgbykge1xuICBmb3IgKHZhciBwIGluIG0pIGlmIChwICE9PSBcImRlZmF1bHRcIiAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sIHApKSBfX2NyZWF0ZUJpbmRpbmcobywgbSwgcCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XG4gIHZhciBzID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgbSA9IHMgJiYgb1tzXSwgaSA9IDA7XG4gIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xuICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XG4gICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcbiAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XG4gICAgICB9XG4gIH07XG4gIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVhZChvLCBuKSB7XG4gIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcbiAgaWYgKCFtKSByZXR1cm4gbztcbiAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XG4gIHRyeSB7XG4gICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgfVxuICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cbiAgZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xuICAgICAgfVxuICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XG4gIH1cbiAgcmV0dXJuIGFyO1xufVxuXG4vKiogQGRlcHJlY2F0ZWQgKi9cbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZCgpIHtcbiAgZm9yICh2YXIgYXIgPSBbXSwgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspXG4gICAgICBhciA9IGFyLmNvbmNhdChfX3JlYWQoYXJndW1lbnRzW2ldKSk7XG4gIHJldHVybiBhcjtcbn1cblxuLyoqIEBkZXByZWNhdGVkICovXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWRBcnJheXMoKSB7XG4gIGZvciAodmFyIHMgPSAwLCBpID0gMCwgaWwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWw7IGkrKykgcyArPSBhcmd1bWVudHNbaV0ubGVuZ3RoO1xuICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXG4gICAgICBmb3IgKHZhciBhID0gYXJndW1lbnRzW2ldLCBqID0gMCwgamwgPSBhLmxlbmd0aDsgaiA8IGpsOyBqKyssIGsrKylcbiAgICAgICAgICByW2tdID0gYVtqXTtcbiAgcmV0dXJuIHI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5KHRvLCBmcm9tLCBwYWNrKSB7XG4gIGlmIChwYWNrIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIGkgPSAwLCBsID0gZnJvbS5sZW5ndGgsIGFyOyBpIDwgbDsgaSsrKSB7XG4gICAgICBpZiAoYXIgfHwgIShpIGluIGZyb20pKSB7XG4gICAgICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcbiAgICAgICAgICBhcltpXSA9IGZyb21baV07XG4gICAgICB9XG4gIH1cbiAgcmV0dXJuIHRvLmNvbmNhdChhciB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0KHYpIHtcbiAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jR2VuZXJhdG9yKHRoaXNBcmcsIF9hcmd1bWVudHMsIGdlbmVyYXRvcikge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgZyA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSwgaSwgcSA9IFtdO1xuICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XG4gIGZ1bmN0aW9uIHZlcmIobikgeyBpZiAoZ1tuXSkgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgfVxuICBmdW5jdGlvbiByZXN1bWUobiwgdikgeyB0cnkgeyBzdGVwKGdbbl0odikpOyB9IGNhdGNoIChlKSB7IHNldHRsZShxWzBdWzNdLCBlKTsgfSB9XG4gIGZ1bmN0aW9uIHN0ZXAocikgeyByLnZhbHVlIGluc3RhbmNlb2YgX19hd2FpdCA/IFByb21pc2UucmVzb2x2ZShyLnZhbHVlLnYpLnRoZW4oZnVsZmlsbCwgcmVqZWN0KSA6IHNldHRsZShxWzBdWzJdLCByKTsgfVxuICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XG4gIGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkgeyByZXN1bWUoXCJ0aHJvd1wiLCB2YWx1ZSk7IH1cbiAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHsgaWYgKGYodiksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBdWzFdKTsgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0RlbGVnYXRvcihvKSB7XG4gIHZhciBpLCBwO1xuICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIsIGZ1bmN0aW9uIChlKSB7IHRocm93IGU7IH0pLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xuICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaVtuXSA9IG9bbl0gPyBmdW5jdGlvbiAodikgeyByZXR1cm4gKHAgPSAhcCkgPyB7IHZhbHVlOiBfX2F3YWl0KG9bbl0odikpLCBkb25lOiBmYWxzZSB9IDogZiA/IGYodikgOiB2OyB9IDogZjsgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY1ZhbHVlcyhvKSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGk7XG4gIHJldHVybiBtID8gbS5jYWxsKG8pIDogKG8gPSB0eXBlb2YgX192YWx1ZXMgPT09IFwiZnVuY3Rpb25cIiA/IF9fdmFsdWVzKG8pIDogb1tTeW1ib2wuaXRlcmF0b3JdKCksIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpKTtcbiAgZnVuY3Rpb24gdmVyYihuKSB7IGlbbl0gPSBvW25dICYmIGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHYgPSBvW25dKHYpLCBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB2LmRvbmUsIHYudmFsdWUpOyB9KTsgfTsgfVxuICBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBkLCB2KSB7IFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGZ1bmN0aW9uKHYpIHsgcmVzb2x2ZSh7IHZhbHVlOiB2LCBkb25lOiBkIH0pOyB9LCByZWplY3QpOyB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX21ha2VUZW1wbGF0ZU9iamVjdChjb29rZWQsIHJhdykge1xuICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb29rZWQsIFwicmF3XCIsIHsgdmFsdWU6IHJhdyB9KTsgfSBlbHNlIHsgY29va2VkLnJhdyA9IHJhdzsgfVxuICByZXR1cm4gY29va2VkO1xufTtcblxudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgb1tcImRlZmF1bHRcIl0gPSB2O1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0U3Rhcihtb2QpIHtcbiAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgdmFyIHJlc3VsdCA9IHt9O1xuICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydERlZmF1bHQobW9kKSB7XG4gIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgZGVmYXVsdDogbW9kIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHJlY2VpdmVyLCBzdGF0ZSwga2luZCwgZikge1xuICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXJcIik7XG4gIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xuICByZXR1cm4ga2luZCA9PT0gXCJtXCIgPyBmIDoga2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIpIDogZiA/IGYudmFsdWUgOiBzdGF0ZS5nZXQocmVjZWl2ZXIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZFNldChyZWNlaXZlciwgc3RhdGUsIHZhbHVlLCBraW5kLCBmKSB7XG4gIGlmIChraW5kID09PSBcIm1cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZVwiKTtcbiAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgc2V0dGVyXCIpO1xuICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB3cml0ZSBwcml2YXRlIG1lbWJlciB0byBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xuICByZXR1cm4gKGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyLCB2YWx1ZSkgOiBmID8gZi52YWx1ZSA9IHZhbHVlIDogc3RhdGUuc2V0KHJlY2VpdmVyLCB2YWx1ZSkpLCB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRJbihzdGF0ZSwgcmVjZWl2ZXIpIHtcbiAgaWYgKHJlY2VpdmVyID09PSBudWxsIHx8ICh0eXBlb2YgcmVjZWl2ZXIgIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHJlY2VpdmVyICE9PSBcImZ1bmN0aW9uXCIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHVzZSAnaW4nIG9wZXJhdG9yIG9uIG5vbi1vYmplY3RcIik7XG4gIHJldHVybiB0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyID09PSBzdGF0ZSA6IHN0YXRlLmhhcyhyZWNlaXZlcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2FkZERpc3Bvc2FibGVSZXNvdXJjZShlbnYsIHZhbHVlLCBhc3luYykge1xuICBpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHZvaWQgMCkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHZhbHVlICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3QgZXhwZWN0ZWQuXCIpO1xuICAgIHZhciBkaXNwb3NlO1xuICAgIGlmIChhc3luYykge1xuICAgICAgICBpZiAoIVN5bWJvbC5hc3luY0Rpc3Bvc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNEaXNwb3NlIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgICAgICAgZGlzcG9zZSA9IHZhbHVlW1N5bWJvbC5hc3luY0Rpc3Bvc2VdO1xuICAgIH1cbiAgICBpZiAoZGlzcG9zZSA9PT0gdm9pZCAwKSB7XG4gICAgICAgIGlmICghU3ltYm9sLmRpc3Bvc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuZGlzcG9zZSBpcyBub3QgZGVmaW5lZC5cIik7XG4gICAgICAgIGRpc3Bvc2UgPSB2YWx1ZVtTeW1ib2wuZGlzcG9zZV07XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZGlzcG9zZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiT2JqZWN0IG5vdCBkaXNwb3NhYmxlLlwiKTtcbiAgICBlbnYuc3RhY2sucHVzaCh7IHZhbHVlOiB2YWx1ZSwgZGlzcG9zZTogZGlzcG9zZSwgYXN5bmM6IGFzeW5jIH0pO1xuICB9XG4gIGVsc2UgaWYgKGFzeW5jKSB7XG4gICAgZW52LnN0YWNrLnB1c2goeyBhc3luYzogdHJ1ZSB9KTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbnZhciBfU3VwcHJlc3NlZEVycm9yID0gdHlwZW9mIFN1cHByZXNzZWRFcnJvciA9PT0gXCJmdW5jdGlvblwiID8gU3VwcHJlc3NlZEVycm9yIDogZnVuY3Rpb24gKGVycm9yLCBzdXBwcmVzc2VkLCBtZXNzYWdlKSB7XG4gIHZhciBlID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xuICByZXR1cm4gZS5uYW1lID0gXCJTdXBwcmVzc2VkRXJyb3JcIiwgZS5lcnJvciA9IGVycm9yLCBlLnN1cHByZXNzZWQgPSBzdXBwcmVzc2VkLCBlO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fZGlzcG9zZVJlc291cmNlcyhlbnYpIHtcbiAgZnVuY3Rpb24gZmFpbChlKSB7XG4gICAgZW52LmVycm9yID0gZW52Lmhhc0Vycm9yID8gbmV3IF9TdXBwcmVzc2VkRXJyb3IoZSwgZW52LmVycm9yLCBcIkFuIGVycm9yIHdhcyBzdXBwcmVzc2VkIGR1cmluZyBkaXNwb3NhbC5cIikgOiBlO1xuICAgIGVudi5oYXNFcnJvciA9IHRydWU7XG4gIH1cbiAgZnVuY3Rpb24gbmV4dCgpIHtcbiAgICB3aGlsZSAoZW52LnN0YWNrLmxlbmd0aCkge1xuICAgICAgdmFyIHJlYyA9IGVudi5zdGFjay5wb3AoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciByZXN1bHQgPSByZWMuZGlzcG9zZSAmJiByZWMuZGlzcG9zZS5jYWxsKHJlYy52YWx1ZSk7XG4gICAgICAgIGlmIChyZWMuYXN5bmMpIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVzdWx0KS50aGVuKG5leHQsIGZ1bmN0aW9uKGUpIHsgZmFpbChlKTsgcmV0dXJuIG5leHQoKTsgfSk7XG4gICAgICB9XG4gICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgIGZhaWwoZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChlbnYuaGFzRXJyb3IpIHRocm93IGVudi5lcnJvcjtcbiAgfVxuICByZXR1cm4gbmV4dCgpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIF9fZXh0ZW5kcyxcbiAgX19hc3NpZ24sXG4gIF9fcmVzdCxcbiAgX19kZWNvcmF0ZSxcbiAgX19wYXJhbSxcbiAgX19tZXRhZGF0YSxcbiAgX19hd2FpdGVyLFxuICBfX2dlbmVyYXRvcixcbiAgX19jcmVhdGVCaW5kaW5nLFxuICBfX2V4cG9ydFN0YXIsXG4gIF9fdmFsdWVzLFxuICBfX3JlYWQsXG4gIF9fc3ByZWFkLFxuICBfX3NwcmVhZEFycmF5cyxcbiAgX19zcHJlYWRBcnJheSxcbiAgX19hd2FpdCxcbiAgX19hc3luY0dlbmVyYXRvcixcbiAgX19hc3luY0RlbGVnYXRvcixcbiAgX19hc3luY1ZhbHVlcyxcbiAgX19tYWtlVGVtcGxhdGVPYmplY3QsXG4gIF9faW1wb3J0U3RhcixcbiAgX19pbXBvcnREZWZhdWx0LFxuICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0LFxuICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0LFxuICBfX2NsYXNzUHJpdmF0ZUZpZWxkSW4sXG4gIF9fYWRkRGlzcG9zYWJsZVJlc291cmNlLFxuICBfX2Rpc3Bvc2VSZXNvdXJjZXMsXG59O1xuIiwgImltcG9ydCB7IF9fYXNzaWduIH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBGb2N1c09uIGFzIFJlYWN0Rm9jdXNPbiB9IGZyb20gJy4vVUknO1xuaW1wb3J0IFNpZGVDYXIgZnJvbSAnLi9zaWRlY2FyJztcbnZhciBSZXF1aXJlU2lkZUNhciA9IGZ1bmN0aW9uIChwcm9wcykge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFNpZGVDYXIsIF9fYXNzaWduKHt9LCBwcm9wcykpO1xufTtcbmV4cG9ydCB2YXIgRm9jdXNPbiA9IFJlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gKHByb3BzLCByZWYpIHsgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3RGb2N1c09uLCBfX2Fzc2lnbih7fSwgcHJvcHMsIHsgcmVmOiByZWYsIHNpZGVDYXI6IFJlcXVpcmVTaWRlQ2FyIH0pKTsgfSk7XG4iLCAiaW1wb3J0IHsgX19hc3NpZ24sIF9fcmVzdCB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgUmVtb3ZlU2Nyb2xsIH0gZnJvbSAncmVhY3QtcmVtb3ZlLXNjcm9sbC9VSSc7XG5pbXBvcnQgUmVhY3RGb2N1c0xvY2sgZnJvbSAncmVhY3QtZm9jdXMtbG9jay9VSSc7XG5pbXBvcnQgeyBlZmZlY3RDYXIgfSBmcm9tICcuL21lZGl1bSc7XG52YXIgUFJFVkVOVF9TQ1JPTEwgPSB7IHByZXZlbnRTY3JvbGw6IHRydWUgfTtcbmV4cG9ydCB2YXIgRm9jdXNPbiA9IFJlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gKHByb3BzLCBwYXJlbnRSZWYpIHtcbiAgICB2YXIgX2EgPSBSZWFjdC51c2VTdGF0ZShmYWxzZSksIGxvY2tQcm9wcyA9IF9hWzBdLCBzZXRMb2NrUHJvcHMgPSBfYVsxXTtcbiAgICB2YXIgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbiwgYXV0b0ZvY3VzID0gcHJvcHMuYXV0b0ZvY3VzLCBzaGFyZHMgPSBwcm9wcy5zaGFyZHMsIGNyb3NzRnJhbWUgPSBwcm9wcy5jcm9zc0ZyYW1lLCBfYiA9IHByb3BzLmVuYWJsZWQsIGVuYWJsZWQgPSBfYiA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9iLCBfYyA9IHByb3BzLnNjcm9sbExvY2ssIHNjcm9sbExvY2sgPSBfYyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9jLCBfZCA9IHByb3BzLmZvY3VzTG9jaywgZm9jdXNMb2NrID0gX2QgPT09IHZvaWQgMCA/IHRydWUgOiBfZCwgX2UgPSBwcm9wcy5yZXR1cm5Gb2N1cywgcmV0dXJuRm9jdXMgPSBfZSA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9lLCBpbmVydCA9IHByb3BzLmluZXJ0LCBhbGxvd1BpbmNoWm9vbSA9IHByb3BzLmFsbG93UGluY2hab29tLCBzaWRlQ2FyID0gcHJvcHMuc2lkZUNhciwgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lLCBzaG91bGRJZ25vcmUgPSBwcm9wcy5zaG91bGRJZ25vcmUsIHByZXZlbnRTY3JvbGxPbkZvY3VzID0gcHJvcHMucHJldmVudFNjcm9sbE9uRm9jdXMsIHN0eWxlID0gcHJvcHMuc3R5bGUsIGFzID0gcHJvcHMuYXMsIGdhcE1vZGUgPSBwcm9wcy5nYXBNb2RlLCByZXN0ID0gX19yZXN0KHByb3BzLCBbXCJjaGlsZHJlblwiLCBcImF1dG9Gb2N1c1wiLCBcInNoYXJkc1wiLCBcImNyb3NzRnJhbWVcIiwgXCJlbmFibGVkXCIsIFwic2Nyb2xsTG9ja1wiLCBcImZvY3VzTG9ja1wiLCBcInJldHVybkZvY3VzXCIsIFwiaW5lcnRcIiwgXCJhbGxvd1BpbmNoWm9vbVwiLCBcInNpZGVDYXJcIiwgXCJjbGFzc05hbWVcIiwgXCJzaG91bGRJZ25vcmVcIiwgXCJwcmV2ZW50U2Nyb2xsT25Gb2N1c1wiLCBcInN0eWxlXCIsIFwiYXNcIiwgXCJnYXBNb2RlXCJdKTtcbiAgICB2YXIgU2lkZUNhciA9IHNpZGVDYXI7XG4gICAgdmFyIG9uQWN0aXZhdGlvbiA9IGxvY2tQcm9wcy5vbkFjdGl2YXRpb24sIG9uRGVhY3RpdmF0aW9uID0gbG9ja1Byb3BzLm9uRGVhY3RpdmF0aW9uLCByZXN0UHJvcHMgPSBfX3Jlc3QobG9ja1Byb3BzLCBbXCJvbkFjdGl2YXRpb25cIiwgXCJvbkRlYWN0aXZhdGlvblwiXSk7XG4gICAgdmFyIGFwcGxpZWRMb2NrUHJvcHMgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgcmVzdFByb3BzKSwgeyBhczogYXMsXG4gICAgICAgIHN0eWxlOiBzdHlsZSxcbiAgICAgICAgc2lkZUNhcjogc2lkZUNhcixcbiAgICAgICAgc2hhcmRzOiBzaGFyZHMsXG4gICAgICAgIGFsbG93UGluY2hab29tOiBhbGxvd1BpbmNoWm9vbSxcbiAgICAgICAgZ2FwTW9kZTogZ2FwTW9kZSxcbiAgICAgICAgaW5lcnQ6IGluZXJ0LCBlbmFibGVkOiBlbmFibGVkICYmIHNjcm9sbExvY2sgfSk7XG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLFxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0Rm9jdXNMb2NrLCB7IHJlZjogcGFyZW50UmVmLCBzaWRlQ2FyOiBzaWRlQ2FyLCBkaXNhYmxlZDogIShsb2NrUHJvcHMgJiYgZW5hYmxlZCAmJiBmb2N1c0xvY2spLCByZXR1cm5Gb2N1czogcmV0dXJuRm9jdXMsIGF1dG9Gb2N1czogYXV0b0ZvY3VzLCBzaGFyZHM6IHNoYXJkcywgY3Jvc3NGcmFtZTogY3Jvc3NGcmFtZSwgb25BY3RpdmF0aW9uOiBvbkFjdGl2YXRpb24sIG9uRGVhY3RpdmF0aW9uOiBvbkRlYWN0aXZhdGlvbiwgY2xhc3NOYW1lOiBjbGFzc05hbWUsIHdoaXRlTGlzdDogc2hvdWxkSWdub3JlLCBsb2NrUHJvcHM6IGFwcGxpZWRMb2NrUHJvcHMsIGZvY3VzT3B0aW9uczogcHJldmVudFNjcm9sbE9uRm9jdXMgPyBQUkVWRU5UX1NDUk9MTCA6IHVuZGVmaW5lZCwgYXM6IFJlbW92ZVNjcm9sbCB9LCBjaGlsZHJlbiksXG4gICAgICAgIGVuYWJsZWQgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU2lkZUNhciwgX19hc3NpZ24oe30sIHJlc3QsIHsgc2lkZUNhcjogZWZmZWN0Q2FyLCBzZXRMb2NrUHJvcHM6IHNldExvY2tQcm9wcywgc2hhcmRzOiBzaGFyZHMgfSkpKSkpO1xufSk7XG5leHBvcnQgKiBmcm9tICcuL3JlRXhwb3J0cyc7XG4iLCAiaW1wb3J0IHsgX19hc3NpZ24sIF9fcmVzdCB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgZnVsbFdpZHRoQ2xhc3NOYW1lLCB6ZXJvUmlnaHRDbGFzc05hbWUgfSBmcm9tICdyZWFjdC1yZW1vdmUtc2Nyb2xsLWJhci9jb25zdGFudHMnO1xuaW1wb3J0IHsgdXNlTWVyZ2VSZWZzIH0gZnJvbSAndXNlLWNhbGxiYWNrLXJlZic7XG5pbXBvcnQgeyBlZmZlY3RDYXIgfSBmcm9tICcuL21lZGl1bSc7XG52YXIgbm90aGluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm47XG59O1xuLyoqXG4gKiBSZW1vdmVzIHNjcm9sbGJhciBmcm9tIHRoZSBwYWdlIGFuZCBjb250YWluIHRoZSBzY3JvbGwgd2l0aGluIHRoZSBMb2NrXG4gKi9cbnZhciBSZW1vdmVTY3JvbGwgPSBSZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIChwcm9wcywgcGFyZW50UmVmKSB7XG4gICAgdmFyIHJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgICB2YXIgX2EgPSBSZWFjdC51c2VTdGF0ZSh7XG4gICAgICAgIG9uU2Nyb2xsQ2FwdHVyZTogbm90aGluZyxcbiAgICAgICAgb25XaGVlbENhcHR1cmU6IG5vdGhpbmcsXG4gICAgICAgIG9uVG91Y2hNb3ZlQ2FwdHVyZTogbm90aGluZyxcbiAgICB9KSwgY2FsbGJhY2tzID0gX2FbMF0sIHNldENhbGxiYWNrcyA9IF9hWzFdO1xuICAgIHZhciBmb3J3YXJkUHJvcHMgPSBwcm9wcy5mb3J3YXJkUHJvcHMsIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSwgcmVtb3ZlU2Nyb2xsQmFyID0gcHJvcHMucmVtb3ZlU2Nyb2xsQmFyLCBlbmFibGVkID0gcHJvcHMuZW5hYmxlZCwgc2hhcmRzID0gcHJvcHMuc2hhcmRzLCBzaWRlQ2FyID0gcHJvcHMuc2lkZUNhciwgbm9Jc29sYXRpb24gPSBwcm9wcy5ub0lzb2xhdGlvbiwgaW5lcnQgPSBwcm9wcy5pbmVydCwgYWxsb3dQaW5jaFpvb20gPSBwcm9wcy5hbGxvd1BpbmNoWm9vbSwgX2IgPSBwcm9wcy5hcywgQ29udGFpbmVyID0gX2IgPT09IHZvaWQgMCA/ICdkaXYnIDogX2IsIGdhcE1vZGUgPSBwcm9wcy5nYXBNb2RlLCByZXN0ID0gX19yZXN0KHByb3BzLCBbXCJmb3J3YXJkUHJvcHNcIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcInJlbW92ZVNjcm9sbEJhclwiLCBcImVuYWJsZWRcIiwgXCJzaGFyZHNcIiwgXCJzaWRlQ2FyXCIsIFwibm9Jc29sYXRpb25cIiwgXCJpbmVydFwiLCBcImFsbG93UGluY2hab29tXCIsIFwiYXNcIiwgXCJnYXBNb2RlXCJdKTtcbiAgICB2YXIgU2lkZUNhciA9IHNpZGVDYXI7XG4gICAgdmFyIGNvbnRhaW5lclJlZiA9IHVzZU1lcmdlUmVmcyhbcmVmLCBwYXJlbnRSZWZdKTtcbiAgICB2YXIgY29udGFpbmVyUHJvcHMgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgcmVzdCksIGNhbGxiYWNrcyk7XG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLFxuICAgICAgICBlbmFibGVkICYmIChSZWFjdC5jcmVhdGVFbGVtZW50KFNpZGVDYXIsIHsgc2lkZUNhcjogZWZmZWN0Q2FyLCByZW1vdmVTY3JvbGxCYXI6IHJlbW92ZVNjcm9sbEJhciwgc2hhcmRzOiBzaGFyZHMsIG5vSXNvbGF0aW9uOiBub0lzb2xhdGlvbiwgaW5lcnQ6IGluZXJ0LCBzZXRDYWxsYmFja3M6IHNldENhbGxiYWNrcywgYWxsb3dQaW5jaFpvb206ICEhYWxsb3dQaW5jaFpvb20sIGxvY2tSZWY6IHJlZiwgZ2FwTW9kZTogZ2FwTW9kZSB9KSksXG4gICAgICAgIGZvcndhcmRQcm9wcyA/IChSZWFjdC5jbG9uZUVsZW1lbnQoUmVhY3QuQ2hpbGRyZW4ub25seShjaGlsZHJlbiksIF9fYXNzaWduKF9fYXNzaWduKHt9LCBjb250YWluZXJQcm9wcyksIHsgcmVmOiBjb250YWluZXJSZWYgfSkpKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KENvbnRhaW5lciwgX19hc3NpZ24oe30sIGNvbnRhaW5lclByb3BzLCB7IGNsYXNzTmFtZTogY2xhc3NOYW1lLCByZWY6IGNvbnRhaW5lclJlZiB9KSwgY2hpbGRyZW4pKSkpO1xufSk7XG5SZW1vdmVTY3JvbGwuZGVmYXVsdFByb3BzID0ge1xuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgcmVtb3ZlU2Nyb2xsQmFyOiB0cnVlLFxuICAgIGluZXJ0OiBmYWxzZSxcbn07XG5SZW1vdmVTY3JvbGwuY2xhc3NOYW1lcyA9IHtcbiAgICBmdWxsV2lkdGg6IGZ1bGxXaWR0aENsYXNzTmFtZSxcbiAgICB6ZXJvUmlnaHQ6IHplcm9SaWdodENsYXNzTmFtZSxcbn07XG5leHBvcnQgeyBSZW1vdmVTY3JvbGwgfTtcbiIsICJleHBvcnQgdmFyIHplcm9SaWdodENsYXNzTmFtZSA9ICdyaWdodC1zY3JvbGwtYmFyLXBvc2l0aW9uJztcbmV4cG9ydCB2YXIgZnVsbFdpZHRoQ2xhc3NOYW1lID0gJ3dpZHRoLWJlZm9yZS1zY3JvbGwtYmFyJztcbmV4cG9ydCB2YXIgbm9TY3JvbGxiYXJzQ2xhc3NOYW1lID0gJ3dpdGgtc2Nyb2xsLWJhcnMtaGlkZGVuJztcbi8qKlxuICogTmFtZSBvZiBhIENTUyB2YXJpYWJsZSBjb250YWluaW5nIHRoZSBhbW91bnQgb2YgXCJoaWRkZW5cIiBzY3JvbGxiYXJcbiAqICEgbWlnaHQgYmUgdW5kZWZpbmVkICEgdXNlIHdpbGwgZmFsbGJhY2shXG4gKi9cbmV4cG9ydCB2YXIgcmVtb3ZlZEJhclNpemVWYXJpYWJsZSA9ICctLXJlbW92ZWQtYm9keS1zY3JvbGwtYmFyLXNpemUnO1xuIiwgIi8qKlxuICogQXNzaWducyBhIHZhbHVlIGZvciBhIGdpdmVuIHJlZiwgbm8gbWF0dGVyIG9mIHRoZSByZWYgZm9ybWF0XG4gKiBAcGFyYW0ge1JlZk9iamVjdH0gcmVmIC0gYSBjYWxsYmFjayBmdW5jdGlvbiBvciByZWYgb2JqZWN0XG4gKiBAcGFyYW0gdmFsdWUgLSBhIG5ldyB2YWx1ZVxuICpcbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3RoZUthc2hleS91c2UtY2FsbGJhY2stcmVmI2Fzc2lnbnJlZlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IHJlZk9iamVjdCA9IHVzZVJlZigpO1xuICogY29uc3QgcmVmRm4gPSAocmVmKSA9PiB7Li4uLn1cbiAqXG4gKiBhc3NpZ25SZWYocmVmT2JqZWN0LCBcInJlZlZhbHVlXCIpO1xuICogYXNzaWduUmVmKHJlZkZuLCBcInJlZlZhbHVlXCIpO1xuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzaWduUmVmKHJlZiwgdmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZWYodmFsdWUpO1xuICAgIH1cbiAgICBlbHNlIGlmIChyZWYpIHtcbiAgICAgICAgcmVmLmN1cnJlbnQgPSB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlZjtcbn1cbiIsICJpbXBvcnQgeyB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0Jztcbi8qKlxuICogY3JlYXRlcyBhIE11dGFibGVSZWYgd2l0aCByZWYgY2hhbmdlIGNhbGxiYWNrXG4gKiBAcGFyYW0gaW5pdGlhbFZhbHVlIC0gaW5pdGlhbCByZWYgdmFsdWVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIC0gYSBjYWxsYmFjayB0byBydW4gd2hlbiB2YWx1ZSBjaGFuZ2VzXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IHJlZiA9IHVzZUNhbGxiYWNrUmVmKDAsIChuZXdWYWx1ZSwgb2xkVmFsdWUpID0+IGNvbnNvbGUubG9nKG9sZFZhbHVlLCAnLT4nLCBuZXdWYWx1ZSk7XG4gKiByZWYuY3VycmVudCA9IDE7XG4gKiAvLyBwcmludHMgMCAtPiAxXG4gKlxuICogQHNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvaG9va3MtcmVmZXJlbmNlLmh0bWwjdXNlcmVmXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS90aGVLYXNoZXkvdXNlLWNhbGxiYWNrLXJlZiN1c2VjYWxsYmFja3JlZi0tLXRvLXJlcGxhY2UtcmVhY3R1c2VyZWZcbiAqIEByZXR1cm5zIHtNdXRhYmxlUmVmT2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlQ2FsbGJhY2tSZWYoaW5pdGlhbFZhbHVlLCBjYWxsYmFjaykge1xuICAgIHZhciByZWYgPSB1c2VTdGF0ZShmdW5jdGlvbiAoKSB7IHJldHVybiAoe1xuICAgICAgICAvLyB2YWx1ZVxuICAgICAgICB2YWx1ZTogaW5pdGlhbFZhbHVlLFxuICAgICAgICAvLyBsYXN0IGNhbGxiYWNrXG4gICAgICAgIGNhbGxiYWNrOiBjYWxsYmFjayxcbiAgICAgICAgLy8gXCJtZW1vaXplZFwiIHB1YmxpYyBpbnRlcmZhY2VcbiAgICAgICAgZmFjYWRlOiB7XG4gICAgICAgICAgICBnZXQgY3VycmVudCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmLnZhbHVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldCBjdXJyZW50KHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdmFyIGxhc3QgPSByZWYudmFsdWU7XG4gICAgICAgICAgICAgICAgaWYgKGxhc3QgIT09IHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlZi52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICByZWYuY2FsbGJhY2sodmFsdWUsIGxhc3QpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSk7IH0pWzBdO1xuICAgIC8vIHVwZGF0ZSBjYWxsYmFja1xuICAgIHJlZi5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgIHJldHVybiByZWYuZmFjYWRlO1xufVxuIiwgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGFzc2lnblJlZiB9IGZyb20gJy4vYXNzaWduUmVmJztcbmltcG9ydCB7IHVzZUNhbGxiYWNrUmVmIH0gZnJvbSAnLi91c2VSZWYnO1xudmFyIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IFJlYWN0LnVzZUxheW91dEVmZmVjdCA6IFJlYWN0LnVzZUVmZmVjdDtcbnZhciBjdXJyZW50VmFsdWVzID0gbmV3IFdlYWtNYXAoKTtcbi8qKlxuICogTWVyZ2VzIHR3byBvciBtb3JlIHJlZnMgdG9nZXRoZXIgcHJvdmlkaW5nIGEgc2luZ2xlIGludGVyZmFjZSB0byBzZXQgdGhlaXIgdmFsdWVcbiAqIEBwYXJhbSB7UmVmT2JqZWN0fFJlZn0gcmVmc1xuICogQHJldHVybnMge011dGFibGVSZWZPYmplY3R9IC0gYSBuZXcgcmVmLCB3aGljaCB0cmFuc2xhdGVzIGFsbCBjaGFuZ2VzIHRvIHtyZWZzfVxuICpcbiAqIEBzZWUge0BsaW5rIG1lcmdlUmVmc30gYSB2ZXJzaW9uIHdpdGhvdXQgYnVpdC1pbiBtZW1vaXphdGlvblxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vdGhlS2FzaGV5L3VzZS1jYWxsYmFjay1yZWYjdXNlbWVyZ2VyZWZzXG4gKiBAZXhhbXBsZVxuICogY29uc3QgQ29tcG9uZW50ID0gUmVhY3QuZm9yd2FyZFJlZigocHJvcHMsIHJlZikgPT4ge1xuICogICBjb25zdCBvd25SZWYgPSB1c2VSZWYoKTtcbiAqICAgY29uc3QgZG9tUmVmID0gdXNlTWVyZ2VSZWZzKFtyZWYsIG93blJlZl0pOyAvLyBcdUQ4M0RcdURDNDggbWVyZ2UgdG9nZXRoZXJcbiAqICAgcmV0dXJuIDxkaXYgcmVmPXtkb21SZWZ9Pi4uLjwvZGl2PlxuICogfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlTWVyZ2VSZWZzKHJlZnMsIGRlZmF1bHRWYWx1ZSkge1xuICAgIHZhciBjYWxsYmFja1JlZiA9IHVzZUNhbGxiYWNrUmVmKGRlZmF1bHRWYWx1ZSB8fCBudWxsLCBmdW5jdGlvbiAobmV3VmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHJlZnMuZm9yRWFjaChmdW5jdGlvbiAocmVmKSB7IHJldHVybiBhc3NpZ25SZWYocmVmLCBuZXdWYWx1ZSk7IH0pO1xuICAgIH0pO1xuICAgIC8vIGhhbmRsZSByZWZzIGNoYW5nZXMgLSBhZGRlZCBvciByZW1vdmVkXG4gICAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBvbGRWYWx1ZSA9IGN1cnJlbnRWYWx1ZXMuZ2V0KGNhbGxiYWNrUmVmKTtcbiAgICAgICAgaWYgKG9sZFZhbHVlKSB7XG4gICAgICAgICAgICB2YXIgcHJldlJlZnNfMSA9IG5ldyBTZXQob2xkVmFsdWUpO1xuICAgICAgICAgICAgdmFyIG5leHRSZWZzXzEgPSBuZXcgU2V0KHJlZnMpO1xuICAgICAgICAgICAgdmFyIGN1cnJlbnRfMSA9IGNhbGxiYWNrUmVmLmN1cnJlbnQ7XG4gICAgICAgICAgICBwcmV2UmVmc18xLmZvckVhY2goZnVuY3Rpb24gKHJlZikge1xuICAgICAgICAgICAgICAgIGlmICghbmV4dFJlZnNfMS5oYXMocmVmKSkge1xuICAgICAgICAgICAgICAgICAgICBhc3NpZ25SZWYocmVmLCBudWxsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIG5leHRSZWZzXzEuZm9yRWFjaChmdW5jdGlvbiAocmVmKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFwcmV2UmVmc18xLmhhcyhyZWYpKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzc2lnblJlZihyZWYsIGN1cnJlbnRfMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY3VycmVudFZhbHVlcy5zZXQoY2FsbGJhY2tSZWYsIHJlZnMpO1xuICAgIH0sIFtyZWZzXSk7XG4gICAgcmV0dXJuIGNhbGxiYWNrUmVmO1xufVxuIiwgIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlLCBTdXBwcmVzc2VkRXJyb3IsIFN5bWJvbCAqL1xuXG52YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQsIGIpIHtcbiAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcbiAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbn1cblxuZXhwb3J0IHZhciBfX2Fzc2lnbiA9IGZ1bmN0aW9uKCkge1xuICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xuICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHQ7XG4gIH1cbiAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3Jlc3QocywgZSkge1xuICB2YXIgdCA9IHt9O1xuICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcbiAgICAgIHRbcF0gPSBzW3BdO1xuICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxuICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcbiAgICAgIH1cbiAgcmV0dXJuIHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2RlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3BhcmFtKHBhcmFtSW5kZXgsIGRlY29yYXRvcikge1xuICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fZXNEZWNvcmF0ZShjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykge1xuICBmdW5jdGlvbiBhY2NlcHQoZikgeyBpZiAoZiAhPT0gdm9pZCAwICYmIHR5cGVvZiBmICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGdW5jdGlvbiBleHBlY3RlZFwiKTsgcmV0dXJuIGY7IH1cbiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5ID0ga2luZCA9PT0gXCJnZXR0ZXJcIiA/IFwiZ2V0XCIgOiBraW5kID09PSBcInNldHRlclwiID8gXCJzZXRcIiA6IFwidmFsdWVcIjtcbiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJbltcInN0YXRpY1wiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7XG4gIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pO1xuICB2YXIgXywgZG9uZSA9IGZhbHNlO1xuICBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIGNvbnRleHQgPSB7fTtcbiAgICAgIGZvciAodmFyIHAgaW4gY29udGV4dEluKSBjb250ZXh0W3BdID0gcCA9PT0gXCJhY2Nlc3NcIiA/IHt9IDogY29udGV4dEluW3BdO1xuICAgICAgZm9yICh2YXIgcCBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0LmFjY2Vzc1twXSA9IGNvbnRleHRJbi5hY2Nlc3NbcF07XG4gICAgICBjb250ZXh0LmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24gKGYpIHsgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWRcIik7IGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGYgfHwgbnVsbCkpOyB9O1xuICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2ldKShraW5kID09PSBcImFjY2Vzc29yXCIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5XSwgY29udGV4dCk7XG4gICAgICBpZiAoa2luZCA9PT0gXCJhY2Nlc3NvclwiKSB7XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTtcbiAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09IFwib2JqZWN0XCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXztcbiAgICAgICAgICBpZiAoXyA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfO1xuICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXyk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChfID0gYWNjZXB0KHJlc3VsdCkpIHtcbiAgICAgICAgICBpZiAoa2luZCA9PT0gXCJmaWVsZFwiKSBpbml0aWFsaXplcnMudW5zaGlmdChfKTtcbiAgICAgICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5XSA9IF87XG4gICAgICB9XG4gIH1cbiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpO1xuICBkb25lID0gdHJ1ZTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3J1bkluaXRpYWxpemVycyh0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlKSB7XG4gIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFsdWUgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpXS5jYWxsKHRoaXNBcmcsIHZhbHVlKSA6IGluaXRpYWxpemVyc1tpXS5jYWxsKHRoaXNBcmcpO1xuICB9XG4gIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlIDogdm9pZCAwO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fcHJvcEtleSh4KSB7XG4gIHJldHVybiB0eXBlb2YgeCA9PT0gXCJzeW1ib2xcIiA/IHggOiBcIlwiLmNvbmNhdCh4KTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3NldEZ1bmN0aW9uTmFtZShmLCBuYW1lLCBwcmVmaXgpIHtcbiAgaWYgKHR5cGVvZiBuYW1lID09PSBcInN5bWJvbFwiKSBuYW1lID0gbmFtZS5kZXNjcmlwdGlvbiA/IFwiW1wiLmNvbmNhdChuYW1lLmRlc2NyaXB0aW9uLCBcIl1cIikgOiBcIlwiO1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGYsIFwibmFtZVwiLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IHByZWZpeCA/IFwiXCIuY29uY2F0KHByZWZpeCwgXCIgXCIsIG5hbWUpIDogbmFtZSB9KTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX21ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XG4gIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XG4gIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XG4gIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xuICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cbiAgZnVuY3Rpb24gc3RlcChvcCkge1xuICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgICAgd2hpbGUgKGcgJiYgKGcgPSAwLCBvcFswXSAmJiAoXyA9IDApKSwgXykgdHJ5IHtcbiAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XG4gICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xuICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcbiAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XG4gICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XG4gICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cbiAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xuICB9XG59XG5cbmV4cG9ydCB2YXIgX19jcmVhdGVCaW5kaW5nID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xuICB9XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICBvW2syXSA9IG1ba107XG59KTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fZXhwb3J0U3RhcihtLCBvKSB7XG4gIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobywgcCkpIF9fY3JlYXRlQmluZGluZyhvLCBtLCBwKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fdmFsdWVzKG8pIHtcbiAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcbiAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XG4gIGlmIChvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xuICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcbiAgICAgIH1cbiAgfTtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihzID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19yZWFkKG8sIG4pIHtcbiAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIW0pIHJldHVybiBvO1xuICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgdHJ5IHtcbiAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICB9XG4gIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxuICBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XG4gICAgICB9XG4gICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgfVxuICByZXR1cm4gYXI7XG59XG5cbi8qKiBAZGVwcmVjYXRlZCAqL1xuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkKCkge1xuICBmb3IgKHZhciBhciA9IFtdLCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKylcbiAgICAgIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNbaV0pKTtcbiAgcmV0dXJuIGFyO1xufVxuXG4vKiogQGRlcHJlY2F0ZWQgKi9cbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5cygpIHtcbiAgZm9yICh2YXIgcyA9IDAsIGkgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSBzICs9IGFyZ3VtZW50c1tpXS5sZW5ndGg7XG4gIGZvciAodmFyIHIgPSBBcnJheShzKSwgayA9IDAsIGkgPSAwOyBpIDwgaWw7IGkrKylcbiAgICAgIGZvciAodmFyIGEgPSBhcmd1bWVudHNbaV0sIGogPSAwLCBqbCA9IGEubGVuZ3RoOyBqIDwgamw7IGorKywgaysrKVxuICAgICAgICAgIHJba10gPSBhW2pdO1xuICByZXR1cm4gcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXkodG8sIGZyb20sIHBhY2spIHtcbiAgaWYgKHBhY2sgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgaSA9IDAsIGwgPSBmcm9tLmxlbmd0aCwgYXI7IGkgPCBsOyBpKyspIHtcbiAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcbiAgICAgICAgICBpZiAoIWFyKSBhciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20sIDAsIGkpO1xuICAgICAgICAgIGFyW2ldID0gZnJvbVtpXTtcbiAgICAgIH1cbiAgfVxuICByZXR1cm4gdG8uY29uY2F0KGFyIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20pKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXQodikge1xuICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBpLCBxID0gW107XG4gIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcbiAgZnVuY3Rpb24gdmVyYihuKSB7IGlmIChnW25dKSBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChhLCBiKSB7IHEucHVzaChbbiwgdiwgYSwgYl0pID4gMSB8fCByZXN1bWUobiwgdik7IH0pOyB9OyB9XG4gIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cbiAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyB9XG4gIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cbiAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxuICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHtcbiAgdmFyIGksIHA7XG4gIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiwgZnVuY3Rpb24gKGUpIHsgdGhyb3cgZTsgfSksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XG4gIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IGZhbHNlIH0gOiBmID8gZih2KSA6IHY7IH0gOiBmOyB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcbiAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xuICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9XG4gIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fbWFrZVRlbXBsYXRlT2JqZWN0KGNvb2tlZCwgcmF3KSB7XG4gIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvb2tlZCwgXCJyYXdcIiwgeyB2YWx1ZTogcmF3IH0pOyB9IGVsc2UgeyBjb29rZWQucmF3ID0gcmF3OyB9XG4gIHJldHVybiBjb29rZWQ7XG59O1xuXG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnRTdGFyKG1vZCkge1xuICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICB2YXIgcmVzdWx0ID0ge307XG4gIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0RGVmYXVsdChtb2QpIHtcbiAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBkZWZhdWx0OiBtb2QgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRHZXQocmVjZWl2ZXIsIHN0YXRlLCBraW5kLCBmKSB7XG4gIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtcbiAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgcmVhZCBwcml2YXRlIG1lbWJlciBmcm9tIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XG4gIHJldHVybiBraW5kID09PSBcIm1cIiA/IGYgOiBraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlcikgOiBmID8gZi52YWx1ZSA6IHN0YXRlLmdldChyZWNlaXZlcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHJlY2VpdmVyLCBzdGF0ZSwgdmFsdWUsIGtpbmQsIGYpIHtcbiAgaWYgKGtpbmQgPT09IFwibVwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBtZXRob2QgaXMgbm90IHdyaXRhYmxlXCIpO1xuICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXJcIik7XG4gIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XG4gIHJldHVybiAoa2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIsIHZhbHVlKSA6IGYgPyBmLnZhbHVlID0gdmFsdWUgOiBzdGF0ZS5zZXQocmVjZWl2ZXIsIHZhbHVlKSksIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEluKHN0YXRlLCByZWNlaXZlcikge1xuICBpZiAocmVjZWl2ZXIgPT09IG51bGwgfHwgKHR5cGVvZiByZWNlaXZlciAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgcmVjZWl2ZXIgIT09IFwiZnVuY3Rpb25cIikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgdXNlICdpbicgb3BlcmF0b3Igb24gbm9uLW9iamVjdFwiKTtcbiAgcmV0dXJuIHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgPT09IHN0YXRlIDogc3RhdGUuaGFzKHJlY2VpdmVyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYWRkRGlzcG9zYWJsZVJlc291cmNlKGVudiwgdmFsdWUsIGFzeW5jKSB7XG4gIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdm9pZCAwKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBleHBlY3RlZC5cIik7XG4gICAgdmFyIGRpc3Bvc2U7XG4gICAgaWYgKGFzeW5jKSB7XG4gICAgICAgIGlmICghU3ltYm9sLmFzeW5jRGlzcG9zZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0Rpc3Bvc2UgaXMgbm90IGRlZmluZWQuXCIpO1xuICAgICAgICBkaXNwb3NlID0gdmFsdWVbU3ltYm9sLmFzeW5jRGlzcG9zZV07XG4gICAgfVxuICAgIGlmIChkaXNwb3NlID09PSB2b2lkIDApIHtcbiAgICAgICAgaWYgKCFTeW1ib2wuZGlzcG9zZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5kaXNwb3NlIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgICAgICAgZGlzcG9zZSA9IHZhbHVlW1N5bWJvbC5kaXNwb3NlXTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkaXNwb3NlICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3Qgbm90IGRpc3Bvc2FibGUuXCIpO1xuICAgIGVudi5zdGFjay5wdXNoKHsgdmFsdWU6IHZhbHVlLCBkaXNwb3NlOiBkaXNwb3NlLCBhc3luYzogYXN5bmMgfSk7XG4gIH1cbiAgZWxzZSBpZiAoYXN5bmMpIHtcbiAgICBlbnYuc3RhY2sucHVzaCh7IGFzeW5jOiB0cnVlIH0pO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxudmFyIF9TdXBwcmVzc2VkRXJyb3IgPSB0eXBlb2YgU3VwcHJlc3NlZEVycm9yID09PSBcImZ1bmN0aW9uXCIgPyBTdXBwcmVzc2VkRXJyb3IgOiBmdW5jdGlvbiAoZXJyb3IsIHN1cHByZXNzZWQsIG1lc3NhZ2UpIHtcbiAgdmFyIGUgPSBuZXcgRXJyb3IobWVzc2FnZSk7XG4gIHJldHVybiBlLm5hbWUgPSBcIlN1cHByZXNzZWRFcnJvclwiLCBlLmVycm9yID0gZXJyb3IsIGUuc3VwcHJlc3NlZCA9IHN1cHByZXNzZWQsIGU7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19kaXNwb3NlUmVzb3VyY2VzKGVudikge1xuICBmdW5jdGlvbiBmYWlsKGUpIHtcbiAgICBlbnYuZXJyb3IgPSBlbnYuaGFzRXJyb3IgPyBuZXcgX1N1cHByZXNzZWRFcnJvcihlLCBlbnYuZXJyb3IsIFwiQW4gZXJyb3Igd2FzIHN1cHByZXNzZWQgZHVyaW5nIGRpc3Bvc2FsLlwiKSA6IGU7XG4gICAgZW52Lmhhc0Vycm9yID0gdHJ1ZTtcbiAgfVxuICBmdW5jdGlvbiBuZXh0KCkge1xuICAgIHdoaWxlIChlbnYuc3RhY2subGVuZ3RoKSB7XG4gICAgICB2YXIgcmVjID0gZW52LnN0YWNrLnBvcCgpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlYy5kaXNwb3NlICYmIHJlYy5kaXNwb3NlLmNhbGwocmVjLnZhbHVlKTtcbiAgICAgICAgaWYgKHJlYy5hc3luYykgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXN1bHQpLnRoZW4obmV4dCwgZnVuY3Rpb24oZSkgeyBmYWlsKGUpOyByZXR1cm4gbmV4dCgpOyB9KTtcbiAgICAgIH1cbiAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgZmFpbChlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGVudi5oYXNFcnJvcikgdGhyb3cgZW52LmVycm9yO1xuICB9XG4gIHJldHVybiBuZXh0KCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19leHRlbmRzLFxuICBfX2Fzc2lnbixcbiAgX19yZXN0LFxuICBfX2RlY29yYXRlLFxuICBfX3BhcmFtLFxuICBfX21ldGFkYXRhLFxuICBfX2F3YWl0ZXIsXG4gIF9fZ2VuZXJhdG9yLFxuICBfX2NyZWF0ZUJpbmRpbmcsXG4gIF9fZXhwb3J0U3RhcixcbiAgX192YWx1ZXMsXG4gIF9fcmVhZCxcbiAgX19zcHJlYWQsXG4gIF9fc3ByZWFkQXJyYXlzLFxuICBfX3NwcmVhZEFycmF5LFxuICBfX2F3YWl0LFxuICBfX2FzeW5jR2VuZXJhdG9yLFxuICBfX2FzeW5jRGVsZWdhdG9yLFxuICBfX2FzeW5jVmFsdWVzLFxuICBfX21ha2VUZW1wbGF0ZU9iamVjdCxcbiAgX19pbXBvcnRTdGFyLFxuICBfX2ltcG9ydERlZmF1bHQsXG4gIF9fY2xhc3NQcml2YXRlRmllbGRHZXQsXG4gIF9fY2xhc3NQcml2YXRlRmllbGRTZXQsXG4gIF9fY2xhc3NQcml2YXRlRmllbGRJbixcbiAgX19hZGREaXNwb3NhYmxlUmVzb3VyY2UsXG4gIF9fZGlzcG9zZVJlc291cmNlcyxcbn07XG4iLCAiaW1wb3J0IHsgX19hc3NpZ24gfSBmcm9tIFwidHNsaWJcIjtcbmZ1bmN0aW9uIEl0b0koYSkge1xuICAgIHJldHVybiBhO1xufVxuZnVuY3Rpb24gaW5uZXJDcmVhdGVNZWRpdW0oZGVmYXVsdHMsIG1pZGRsZXdhcmUpIHtcbiAgICBpZiAobWlkZGxld2FyZSA9PT0gdm9pZCAwKSB7IG1pZGRsZXdhcmUgPSBJdG9JOyB9XG4gICAgdmFyIGJ1ZmZlciA9IFtdO1xuICAgIHZhciBhc3NpZ25lZCA9IGZhbHNlO1xuICAgIHZhciBtZWRpdW0gPSB7XG4gICAgICAgIHJlYWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChhc3NpZ25lZCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU2lkZWNhcjogY291bGQgbm90IGByZWFkYCBmcm9tIGFuIGBhc3NpZ25lZGAgbWVkaXVtLiBgcmVhZGAgY291bGQgYmUgdXNlZCBvbmx5IHdpdGggYHVzZU1lZGl1bWAuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYnVmZmVyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBidWZmZXJbYnVmZmVyLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRzO1xuICAgICAgICB9LFxuICAgICAgICB1c2VNZWRpdW06IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICB2YXIgaXRlbSA9IG1pZGRsZXdhcmUoZGF0YSwgYXNzaWduZWQpO1xuICAgICAgICAgICAgYnVmZmVyLnB1c2goaXRlbSk7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGJ1ZmZlciA9IGJ1ZmZlci5maWx0ZXIoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHggIT09IGl0ZW07IH0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAgYXNzaWduU3luY01lZGl1bTogZnVuY3Rpb24gKGNiKSB7XG4gICAgICAgICAgICBhc3NpZ25lZCA9IHRydWU7XG4gICAgICAgICAgICB3aGlsZSAoYnVmZmVyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHZhciBjYnMgPSBidWZmZXI7XG4gICAgICAgICAgICAgICAgYnVmZmVyID0gW107XG4gICAgICAgICAgICAgICAgY2JzLmZvckVhY2goY2IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnVmZmVyID0ge1xuICAgICAgICAgICAgICAgIHB1c2g6IGZ1bmN0aW9uICh4KSB7IHJldHVybiBjYih4KTsgfSxcbiAgICAgICAgICAgICAgICBmaWx0ZXI6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGJ1ZmZlcjsgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICAgIGFzc2lnbk1lZGl1bTogZnVuY3Rpb24gKGNiKSB7XG4gICAgICAgICAgICBhc3NpZ25lZCA9IHRydWU7XG4gICAgICAgICAgICB2YXIgcGVuZGluZ1F1ZXVlID0gW107XG4gICAgICAgICAgICBpZiAoYnVmZmVyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHZhciBjYnMgPSBidWZmZXI7XG4gICAgICAgICAgICAgICAgYnVmZmVyID0gW107XG4gICAgICAgICAgICAgICAgY2JzLmZvckVhY2goY2IpO1xuICAgICAgICAgICAgICAgIHBlbmRpbmdRdWV1ZSA9IGJ1ZmZlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBleGVjdXRlUXVldWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNicyA9IHBlbmRpbmdRdWV1ZTtcbiAgICAgICAgICAgICAgICBwZW5kaW5nUXVldWUgPSBbXTtcbiAgICAgICAgICAgICAgICBjYnMuZm9yRWFjaChjYik7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdmFyIGN5Y2xlID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbihleGVjdXRlUXVldWUpOyB9O1xuICAgICAgICAgICAgY3ljbGUoKTtcbiAgICAgICAgICAgIGJ1ZmZlciA9IHtcbiAgICAgICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICBwZW5kaW5nUXVldWUucHVzaCh4KTtcbiAgICAgICAgICAgICAgICAgICAgY3ljbGUoKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGZpbHRlcjogZnVuY3Rpb24gKGZpbHRlcikge1xuICAgICAgICAgICAgICAgICAgICBwZW5kaW5nUXVldWUgPSBwZW5kaW5nUXVldWUuZmlsdGVyKGZpbHRlcik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBidWZmZXI7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgfTtcbiAgICByZXR1cm4gbWVkaXVtO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1lZGl1bShkZWZhdWx0cywgbWlkZGxld2FyZSkge1xuICAgIGlmIChtaWRkbGV3YXJlID09PSB2b2lkIDApIHsgbWlkZGxld2FyZSA9IEl0b0k7IH1cbiAgICByZXR1cm4gaW5uZXJDcmVhdGVNZWRpdW0oZGVmYXVsdHMsIG1pZGRsZXdhcmUpO1xufVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHlwZXNcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTaWRlY2FyTWVkaXVtKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgIHZhciBtZWRpdW0gPSBpbm5lckNyZWF0ZU1lZGl1bShudWxsKTtcbiAgICBtZWRpdW0ub3B0aW9ucyA9IF9fYXNzaWduKHsgYXN5bmM6IHRydWUsIHNzcjogZmFsc2UgfSwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIG1lZGl1bTtcbn1cbiIsICJpbXBvcnQgeyBfX2Fzc2lnbiwgX19yZXN0IH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG52YXIgU2lkZUNhciA9IGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciBzaWRlQ2FyID0gX2Euc2lkZUNhciwgcmVzdCA9IF9fcmVzdChfYSwgW1wic2lkZUNhclwiXSk7XG4gICAgaWYgKCFzaWRlQ2FyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignU2lkZWNhcjogcGxlYXNlIHByb3ZpZGUgYHNpZGVDYXJgIHByb3BlcnR5IHRvIGltcG9ydCB0aGUgcmlnaHQgY2FyJyk7XG4gICAgfVxuICAgIHZhciBUYXJnZXQgPSBzaWRlQ2FyLnJlYWQoKTtcbiAgICBpZiAoIVRhcmdldCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NpZGVjYXIgbWVkaXVtIG5vdCBmb3VuZCcpO1xuICAgIH1cbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUYXJnZXQsIF9fYXNzaWduKHt9LCByZXN0KSk7XG59O1xuU2lkZUNhci5pc1NpZGVDYXJFeHBvcnQgPSB0cnVlO1xuZXhwb3J0IGZ1bmN0aW9uIGV4cG9ydFNpZGVjYXIobWVkaXVtLCBleHBvcnRlZCkge1xuICAgIG1lZGl1bS51c2VNZWRpdW0oZXhwb3J0ZWQpO1xuICAgIHJldHVybiBTaWRlQ2FyO1xufVxuIiwgImltcG9ydCB7IGNyZWF0ZVNpZGVjYXJNZWRpdW0gfSBmcm9tICd1c2Utc2lkZWNhcic7XG5leHBvcnQgdmFyIGVmZmVjdENhciA9IGNyZWF0ZVNpZGVjYXJNZWRpdW0oKTtcbiIsICJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IG5vZGUsIGJvb2wsIHN0cmluZywgYW55LCBhcnJheU9mLCBvbmVPZlR5cGUsIG9iamVjdCwgZnVuYyB9IGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0ICogYXMgY29uc3RhbnRzIGZyb20gJ2ZvY3VzLWxvY2svY29uc3RhbnRzJztcbmltcG9ydCB7IHVzZU1lcmdlUmVmcyB9IGZyb20gJ3VzZS1jYWxsYmFjay1yZWYnO1xuaW1wb3J0IHsgaGlkZGVuR3VhcmQgfSBmcm9tICcuL0ZvY3VzR3VhcmQnO1xuaW1wb3J0IHsgbWVkaXVtRm9jdXMsIG1lZGl1bUJsdXIsIG1lZGl1bVNpZGVjYXIgfSBmcm9tICcuL21lZGl1bSc7XG5pbXBvcnQgeyBmb2N1c1Njb3BlIH0gZnJvbSAnLi9zY29wZSc7XG52YXIgZW1wdHlBcnJheSA9IFtdO1xudmFyIEZvY3VzTG9jayA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIEZvY3VzTG9ja1VJKHByb3BzLCBwYXJlbnRSZWYpIHtcbiAgdmFyIF9leHRlbmRzMjtcbiAgdmFyIF9SZWFjdCR1c2VTdGF0ZSA9IFJlYWN0LnVzZVN0YXRlKCksXG4gICAgcmVhbE9ic2VydmVkID0gX1JlYWN0JHVzZVN0YXRlWzBdLFxuICAgIHNldE9ic2VydmVkID0gX1JlYWN0JHVzZVN0YXRlWzFdO1xuICB2YXIgb2JzZXJ2ZWQgPSBSZWFjdC51c2VSZWYoKTtcbiAgdmFyIGlzQWN0aXZlID0gUmVhY3QudXNlUmVmKGZhbHNlKTtcbiAgdmFyIG9yaWdpbmFsRm9jdXNlZEVsZW1lbnQgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIHZhciBfUmVhY3QkdXNlU3RhdGUyID0gUmVhY3QudXNlU3RhdGUoe30pLFxuICAgIHVwZGF0ZSA9IF9SZWFjdCR1c2VTdGF0ZTJbMV07XG4gIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLFxuICAgIF9wcm9wcyRkaXNhYmxlZCA9IHByb3BzLmRpc2FibGVkLFxuICAgIGRpc2FibGVkID0gX3Byb3BzJGRpc2FibGVkID09PSB2b2lkIDAgPyBmYWxzZSA6IF9wcm9wcyRkaXNhYmxlZCxcbiAgICBfcHJvcHMkbm9Gb2N1c0d1YXJkcyA9IHByb3BzLm5vRm9jdXNHdWFyZHMsXG4gICAgbm9Gb2N1c0d1YXJkcyA9IF9wcm9wcyRub0ZvY3VzR3VhcmRzID09PSB2b2lkIDAgPyBmYWxzZSA6IF9wcm9wcyRub0ZvY3VzR3VhcmRzLFxuICAgIF9wcm9wcyRwZXJzaXN0ZW50Rm9jdSA9IHByb3BzLnBlcnNpc3RlbnRGb2N1cyxcbiAgICBwZXJzaXN0ZW50Rm9jdXMgPSBfcHJvcHMkcGVyc2lzdGVudEZvY3UgPT09IHZvaWQgMCA/IGZhbHNlIDogX3Byb3BzJHBlcnNpc3RlbnRGb2N1LFxuICAgIF9wcm9wcyRjcm9zc0ZyYW1lID0gcHJvcHMuY3Jvc3NGcmFtZSxcbiAgICBjcm9zc0ZyYW1lID0gX3Byb3BzJGNyb3NzRnJhbWUgPT09IHZvaWQgMCA/IHRydWUgOiBfcHJvcHMkY3Jvc3NGcmFtZSxcbiAgICBfcHJvcHMkYXV0b0ZvY3VzID0gcHJvcHMuYXV0b0ZvY3VzLFxuICAgIGF1dG9Gb2N1cyA9IF9wcm9wcyRhdXRvRm9jdXMgPT09IHZvaWQgMCA/IHRydWUgOiBfcHJvcHMkYXV0b0ZvY3VzLFxuICAgIGFsbG93VGV4dFNlbGVjdGlvbiA9IHByb3BzLmFsbG93VGV4dFNlbGVjdGlvbixcbiAgICBncm91cCA9IHByb3BzLmdyb3VwLFxuICAgIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSxcbiAgICB3aGl0ZUxpc3QgPSBwcm9wcy53aGl0ZUxpc3QsXG4gICAgaGFzUG9zaXRpdmVJbmRpY2VzID0gcHJvcHMuaGFzUG9zaXRpdmVJbmRpY2VzLFxuICAgIF9wcm9wcyRzaGFyZHMgPSBwcm9wcy5zaGFyZHMsXG4gICAgc2hhcmRzID0gX3Byb3BzJHNoYXJkcyA9PT0gdm9pZCAwID8gZW1wdHlBcnJheSA6IF9wcm9wcyRzaGFyZHMsXG4gICAgX3Byb3BzJGFzID0gcHJvcHMuYXMsXG4gICAgQ29udGFpbmVyID0gX3Byb3BzJGFzID09PSB2b2lkIDAgPyAnZGl2JyA6IF9wcm9wcyRhcyxcbiAgICBfcHJvcHMkbG9ja1Byb3BzID0gcHJvcHMubG9ja1Byb3BzLFxuICAgIGNvbnRhaW5lclByb3BzID0gX3Byb3BzJGxvY2tQcm9wcyA9PT0gdm9pZCAwID8ge30gOiBfcHJvcHMkbG9ja1Byb3BzLFxuICAgIFNpZGVDYXIgPSBwcm9wcy5zaWRlQ2FyLFxuICAgIF9wcm9wcyRyZXR1cm5Gb2N1cyA9IHByb3BzLnJldHVybkZvY3VzLFxuICAgIHNob3VsZFJldHVybkZvY3VzID0gX3Byb3BzJHJldHVybkZvY3VzID09PSB2b2lkIDAgPyBmYWxzZSA6IF9wcm9wcyRyZXR1cm5Gb2N1cyxcbiAgICBmb2N1c09wdGlvbnMgPSBwcm9wcy5mb2N1c09wdGlvbnMsXG4gICAgb25BY3RpdmF0aW9uQ2FsbGJhY2sgPSBwcm9wcy5vbkFjdGl2YXRpb24sXG4gICAgb25EZWFjdGl2YXRpb25DYWxsYmFjayA9IHByb3BzLm9uRGVhY3RpdmF0aW9uO1xuICB2YXIgX1JlYWN0JHVzZVN0YXRlMyA9IFJlYWN0LnVzZVN0YXRlKHt9KSxcbiAgICBpZCA9IF9SZWFjdCR1c2VTdGF0ZTNbMF07XG4gIHZhciBvbkFjdGl2YXRpb24gPSBSZWFjdC51c2VDYWxsYmFjayhmdW5jdGlvbiAoX3JlZikge1xuICAgIHZhciBjYXB0dXJlRm9jdXNSZXN0b3JlID0gX3JlZi5jYXB0dXJlRm9jdXNSZXN0b3JlO1xuICAgIGlmICghb3JpZ2luYWxGb2N1c2VkRWxlbWVudC5jdXJyZW50KSB7XG4gICAgICB2YXIgX2RvY3VtZW50O1xuICAgICAgdmFyIGFjdGl2ZUVsZW1lbnQgPSAoX2RvY3VtZW50ID0gZG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICAgIG9yaWdpbmFsRm9jdXNlZEVsZW1lbnQuY3VycmVudCA9IGFjdGl2ZUVsZW1lbnQ7XG4gICAgICBpZiAoYWN0aXZlRWxlbWVudCAhPT0gZG9jdW1lbnQuYm9keSkge1xuICAgICAgICBvcmlnaW5hbEZvY3VzZWRFbGVtZW50LmN1cnJlbnQgPSBjYXB0dXJlRm9jdXNSZXN0b3JlKGFjdGl2ZUVsZW1lbnQpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAob2JzZXJ2ZWQuY3VycmVudCAmJiBvbkFjdGl2YXRpb25DYWxsYmFjaykge1xuICAgICAgb25BY3RpdmF0aW9uQ2FsbGJhY2sob2JzZXJ2ZWQuY3VycmVudCk7XG4gICAgfVxuICAgIGlzQWN0aXZlLmN1cnJlbnQgPSB0cnVlO1xuICAgIHVwZGF0ZSgpO1xuICB9LCBbb25BY3RpdmF0aW9uQ2FsbGJhY2tdKTtcbiAgdmFyIG9uRGVhY3RpdmF0aW9uID0gUmVhY3QudXNlQ2FsbGJhY2soZnVuY3Rpb24gKCkge1xuICAgIGlzQWN0aXZlLmN1cnJlbnQgPSBmYWxzZTtcbiAgICBpZiAob25EZWFjdGl2YXRpb25DYWxsYmFjaykge1xuICAgICAgb25EZWFjdGl2YXRpb25DYWxsYmFjayhvYnNlcnZlZC5jdXJyZW50KTtcbiAgICB9XG4gICAgdXBkYXRlKCk7XG4gIH0sIFtvbkRlYWN0aXZhdGlvbkNhbGxiYWNrXSk7XG4gIHZhciByZXR1cm5Gb2N1cyA9IFJlYWN0LnVzZUNhbGxiYWNrKGZ1bmN0aW9uIChhbGxvd0RlZmVyKSB7XG4gICAgdmFyIGZvY3VzUmVzdG9yZSA9IG9yaWdpbmFsRm9jdXNlZEVsZW1lbnQuY3VycmVudDtcbiAgICBpZiAoZm9jdXNSZXN0b3JlKSB7XG4gICAgICB2YXIgcmV0dXJuRm9jdXNUbyA9ICh0eXBlb2YgZm9jdXNSZXN0b3JlID09PSAnZnVuY3Rpb24nID8gZm9jdXNSZXN0b3JlKCkgOiBmb2N1c1Jlc3RvcmUpIHx8IGRvY3VtZW50LmJvZHk7XG4gICAgICB2YXIgaG93VG9SZXR1cm5Gb2N1cyA9IHR5cGVvZiBzaG91bGRSZXR1cm5Gb2N1cyA9PT0gJ2Z1bmN0aW9uJyA/IHNob3VsZFJldHVybkZvY3VzKHJldHVybkZvY3VzVG8pIDogc2hvdWxkUmV0dXJuRm9jdXM7XG4gICAgICBpZiAoaG93VG9SZXR1cm5Gb2N1cykge1xuICAgICAgICB2YXIgcmV0dXJuRm9jdXNPcHRpb25zID0gdHlwZW9mIGhvd1RvUmV0dXJuRm9jdXMgPT09ICdvYmplY3QnID8gaG93VG9SZXR1cm5Gb2N1cyA6IHVuZGVmaW5lZDtcbiAgICAgICAgb3JpZ2luYWxGb2N1c2VkRWxlbWVudC5jdXJyZW50ID0gbnVsbDtcbiAgICAgICAgaWYgKGFsbG93RGVmZXIpIHtcbiAgICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiByZXR1cm5Gb2N1c1RvLmZvY3VzKHJldHVybkZvY3VzT3B0aW9ucyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuRm9jdXNUby5mb2N1cyhyZXR1cm5Gb2N1c09wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LCBbc2hvdWxkUmV0dXJuRm9jdXNdKTtcbiAgdmFyIG9uRm9jdXMgPSBSZWFjdC51c2VDYWxsYmFjayhmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBpZiAoaXNBY3RpdmUuY3VycmVudCkge1xuICAgICAgbWVkaXVtRm9jdXMudXNlTWVkaXVtKGV2ZW50KTtcbiAgICB9XG4gIH0sIFtdKTtcbiAgdmFyIG9uQmx1ciA9IG1lZGl1bUJsdXIudXNlTWVkaXVtO1xuICB2YXIgc2V0T2JzZXJ2ZU5vZGUgPSBSZWFjdC51c2VDYWxsYmFjayhmdW5jdGlvbiAobmV3T2JzZXJ2ZWQpIHtcbiAgICBpZiAob2JzZXJ2ZWQuY3VycmVudCAhPT0gbmV3T2JzZXJ2ZWQpIHtcbiAgICAgIG9ic2VydmVkLmN1cnJlbnQgPSBuZXdPYnNlcnZlZDtcbiAgICAgIHNldE9ic2VydmVkKG5ld09ic2VydmVkKTtcbiAgICB9XG4gIH0sIFtdKTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAodHlwZW9mIGFsbG93VGV4dFNlbGVjdGlvbiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbnNvbGUud2FybignUmVhY3QtRm9jdXMtTG9jazogYWxsb3dUZXh0U2VsZWN0aW9uIGlzIGRlcHJlY2F0ZWQgYW5kIGVuYWJsZWQgYnkgZGVmYXVsdCcpO1xuICAgIH1cbiAgICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKCFvYnNlcnZlZC5jdXJyZW50ICYmIHR5cGVvZiBDb250YWluZXIgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZvY3VzTG9jazogY291bGQgbm90IG9idGFpbiByZWYgdG8gaW50ZXJuYWwgbm9kZScpO1xuICAgICAgfVxuICAgIH0sIFtdKTtcbiAgfVxuICB2YXIgbG9ja1Byb3BzID0gX2V4dGVuZHMoKF9leHRlbmRzMiA9IHt9LCBfZXh0ZW5kczJbY29uc3RhbnRzLkZPQ1VTX0RJU0FCTEVEXSA9IGRpc2FibGVkICYmICdkaXNhYmxlZCcsIF9leHRlbmRzMltjb25zdGFudHMuRk9DVVNfR1JPVVBdID0gZ3JvdXAsIF9leHRlbmRzMiksIGNvbnRhaW5lclByb3BzKTtcbiAgdmFyIGhhc0xlYWRpbmdHdWFyZHMgPSBub0ZvY3VzR3VhcmRzICE9PSB0cnVlO1xuICB2YXIgaGFzVGFpbGluZ0d1YXJkcyA9IGhhc0xlYWRpbmdHdWFyZHMgJiYgbm9Gb2N1c0d1YXJkcyAhPT0gJ3RhaWwnO1xuICB2YXIgbWVyZ2VkUmVmID0gdXNlTWVyZ2VSZWZzKFtwYXJlbnRSZWYsIHNldE9ic2VydmVOb2RlXSk7XG4gIHZhciBmb2N1c1Njb3BlVmFsdWUgPSBSZWFjdC51c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb2JzZXJ2ZWQ6IG9ic2VydmVkLFxuICAgICAgc2hhcmRzOiBzaGFyZHMsXG4gICAgICBlbmFibGVkOiAhZGlzYWJsZWQsXG4gICAgICBhY3RpdmU6IGlzQWN0aXZlLmN1cnJlbnRcbiAgICB9O1xuICB9LCBbZGlzYWJsZWQsIGlzQWN0aXZlLmN1cnJlbnQsIHNoYXJkcywgcmVhbE9ic2VydmVkXSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCwgaGFzTGVhZGluZ0d1YXJkcyAmJiBbXG4gIC8qI19fUFVSRV9fKi9cbiAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAga2V5OiBcImd1YXJkLWZpcnN0XCIsXG4gICAgXCJkYXRhLWZvY3VzLWd1YXJkXCI6IHRydWUsXG4gICAgdGFiSW5kZXg6IGRpc2FibGVkID8gLTEgOiAwLFxuICAgIHN0eWxlOiBoaWRkZW5HdWFyZFxuICB9KSwgaGFzUG9zaXRpdmVJbmRpY2VzID8gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIGtleTogXCJndWFyZC1uZWFyZXN0XCIsXG4gICAgXCJkYXRhLWZvY3VzLWd1YXJkXCI6IHRydWUsXG4gICAgdGFiSW5kZXg6IGRpc2FibGVkID8gLTEgOiAxLFxuICAgIHN0eWxlOiBoaWRkZW5HdWFyZFxuICB9KSA6IG51bGxdLCAhZGlzYWJsZWQgJiYgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoU2lkZUNhciwge1xuICAgIGlkOiBpZCxcbiAgICBzaWRlQ2FyOiBtZWRpdW1TaWRlY2FyLFxuICAgIG9ic2VydmVkOiByZWFsT2JzZXJ2ZWQsXG4gICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgIHBlcnNpc3RlbnRGb2N1czogcGVyc2lzdGVudEZvY3VzLFxuICAgIGNyb3NzRnJhbWU6IGNyb3NzRnJhbWUsXG4gICAgYXV0b0ZvY3VzOiBhdXRvRm9jdXMsXG4gICAgd2hpdGVMaXN0OiB3aGl0ZUxpc3QsXG4gICAgc2hhcmRzOiBzaGFyZHMsXG4gICAgb25BY3RpdmF0aW9uOiBvbkFjdGl2YXRpb24sXG4gICAgb25EZWFjdGl2YXRpb246IG9uRGVhY3RpdmF0aW9uLFxuICAgIHJldHVybkZvY3VzOiByZXR1cm5Gb2N1cyxcbiAgICBmb2N1c09wdGlvbnM6IGZvY3VzT3B0aW9uc1xuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ29udGFpbmVyLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiBtZXJnZWRSZWZcbiAgfSwgbG9ja1Byb3BzLCB7XG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWUsXG4gICAgb25CbHVyOiBvbkJsdXIsXG4gICAgb25Gb2N1czogb25Gb2N1c1xuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoZm9jdXNTY29wZS5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBmb2N1c1Njb3BlVmFsdWVcbiAgfSwgY2hpbGRyZW4pKSwgaGFzVGFpbGluZ0d1YXJkcyAmJiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgXCJkYXRhLWZvY3VzLWd1YXJkXCI6IHRydWUsXG4gICAgdGFiSW5kZXg6IGRpc2FibGVkID8gLTEgOiAwLFxuICAgIHN0eWxlOiBoaWRkZW5HdWFyZFxuICB9KSk7XG59KTtcbkZvY3VzTG9jay5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIGNoaWxkcmVuOiBub2RlLFxuICBkaXNhYmxlZDogYm9vbCxcbiAgcmV0dXJuRm9jdXM6IG9uZU9mVHlwZShbYm9vbCwgb2JqZWN0LCBmdW5jXSksXG4gIGZvY3VzT3B0aW9uczogb2JqZWN0LFxuICBub0ZvY3VzR3VhcmRzOiBib29sLFxuICBoYXNQb3NpdGl2ZUluZGljZXM6IGJvb2wsXG4gIGFsbG93VGV4dFNlbGVjdGlvbjogYm9vbCxcbiAgYXV0b0ZvY3VzOiBib29sLFxuICBwZXJzaXN0ZW50Rm9jdXM6IGJvb2wsXG4gIGNyb3NzRnJhbWU6IGJvb2wsXG4gIGdyb3VwOiBzdHJpbmcsXG4gIGNsYXNzTmFtZTogc3RyaW5nLFxuICB3aGl0ZUxpc3Q6IGZ1bmMsXG4gIHNoYXJkczogYXJyYXlPZihhbnkpLFxuICBhczogb25lT2ZUeXBlKFtzdHJpbmcsIGZ1bmMsIG9iamVjdF0pLFxuICBsb2NrUHJvcHM6IG9iamVjdCxcbiAgb25BY3RpdmF0aW9uOiBmdW5jLFxuICBvbkRlYWN0aXZhdGlvbjogZnVuYyxcbiAgc2lkZUNhcjogYW55LmlzUmVxdWlyZWRcbn0gOiB7fTtcbmV4cG9ydCBkZWZhdWx0IEZvY3VzTG9jazsiLCAiLyoqXG4gKiBkZWZpbmVzIGEgZm9jdXMgZ3JvdXBcbiAqL1xuZXhwb3J0IHZhciBGT0NVU19HUk9VUCA9ICdkYXRhLWZvY3VzLWxvY2snO1xuLyoqXG4gKiBkaXNhYmxlcyBlbGVtZW50IGRpc2NvdmVyeSBpbnNpZGUgYSBncm91cCBtYXJrZWQgYnkga2V5XG4gKi9cbmV4cG9ydCB2YXIgRk9DVVNfRElTQUJMRUQgPSAnZGF0YS1mb2N1cy1sb2NrLWRpc2FibGVkJztcbi8qKlxuICogYWxsb3dzIHVuY29udHJvbGxlZCBmb2N1cyB3aXRoaW4gdGhlIG1hcmtlZCBhcmVhLCBlZmZlY3RpdmVseSBkaXNhYmxpbmcgZm9jdXMgbG9jayBmb3IgaXQncyBjb250ZW50XG4gKi9cbmV4cG9ydCB2YXIgRk9DVVNfQUxMT1cgPSAnZGF0YS1uby1mb2N1cy1sb2NrJztcbi8qKlxuICogaW5zdHJ1Y3RzIGF1dG9mb2N1cyBlbmdpbmUgdG8gcGljayBkZWZhdWx0IGF1dG9mb2N1cyBpbnNpZGUgYSBnaXZlbiBub2RlXG4gKiBjYW4gYmUgc2V0IG9uIHRoZSBlbGVtZW50IG9yIGNvbnRhaW5lclxuICovXG5leHBvcnQgdmFyIEZPQ1VTX0FVVE8gPSAnZGF0YS1hdXRvZm9jdXMtaW5zaWRlJztcbi8qKlxuICogaW5zdHJ1Y3RzIGF1dG9mb2N1cyB0byBpZ25vcmUgZWxlbWVudHMgd2l0aGluIGEgZ2l2ZW4gbm9kZVxuICogY2FuIGJlIHNldCBvbiB0aGUgZWxlbWVudCBvciBjb250YWluZXJcbiAqL1xuZXhwb3J0IHZhciBGT0NVU19OT19BVVRPRk9DVVMgPSAnZGF0YS1uby1hdXRvZm9jdXMnO1xuIiwgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5leHBvcnQgdmFyIGhpZGRlbkd1YXJkID0ge1xuICB3aWR0aDogJzFweCcsXG4gIGhlaWdodDogJzBweCcsXG4gIHBhZGRpbmc6IDAsXG4gIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgcG9zaXRpb246ICdmaXhlZCcsXG4gIHRvcDogJzFweCcsXG4gIGxlZnQ6ICcxcHgnXG59O1xudmFyIEluRm9jdXNHdWFyZCA9IGZ1bmN0aW9uIEluRm9jdXNHdWFyZChfcmVmKSB7XG4gIHZhciBfcmVmJGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICBjaGlsZHJlbiA9IF9yZWYkY2hpbGRyZW4gPT09IHZvaWQgMCA/IG51bGwgOiBfcmVmJGNoaWxkcmVuO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICBrZXk6IFwiZ3VhcmQtZmlyc3RcIixcbiAgICBcImRhdGEtZm9jdXMtZ3VhcmRcIjogdHJ1ZSxcbiAgICBcImRhdGEtZm9jdXMtYXV0by1ndWFyZFwiOiB0cnVlLFxuICAgIHN0eWxlOiBoaWRkZW5HdWFyZFxuICB9KSwgY2hpbGRyZW4sIGNoaWxkcmVuICYmIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICBrZXk6IFwiZ3VhcmQtbGFzdFwiLFxuICAgIFwiZGF0YS1mb2N1cy1ndWFyZFwiOiB0cnVlLFxuICAgIFwiZGF0YS1mb2N1cy1hdXRvLWd1YXJkXCI6IHRydWUsXG4gICAgc3R5bGU6IGhpZGRlbkd1YXJkXG4gIH0pKTtcbn07XG5JbkZvY3VzR3VhcmQucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8ge1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGVcbn0gOiB7fTtcbmV4cG9ydCBkZWZhdWx0IEluRm9jdXNHdWFyZDsiLCAiaW1wb3J0IHsgY3JlYXRlTWVkaXVtLCBjcmVhdGVTaWRlY2FyTWVkaXVtIH0gZnJvbSAndXNlLXNpZGVjYXInO1xuZXhwb3J0IHZhciBtZWRpdW1Gb2N1cyA9IGNyZWF0ZU1lZGl1bSh7fSwgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHRhcmdldCA9IF9yZWYudGFyZ2V0LFxuICAgIGN1cnJlbnRUYXJnZXQgPSBfcmVmLmN1cnJlbnRUYXJnZXQ7XG4gIHJldHVybiB7XG4gICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgY3VycmVudFRhcmdldDogY3VycmVudFRhcmdldFxuICB9O1xufSk7XG5leHBvcnQgdmFyIG1lZGl1bUJsdXIgPSBjcmVhdGVNZWRpdW0oKTtcbmV4cG9ydCB2YXIgbWVkaXVtRWZmZWN0ID0gY3JlYXRlTWVkaXVtKCk7XG5leHBvcnQgdmFyIG1lZGl1bVNpZGVjYXIgPSBjcmVhdGVTaWRlY2FyTWVkaXVtKHtcbiAgYXN5bmM6IHRydWUsXG4gIHNzcjogdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJ1xufSk7IiwgImltcG9ydCB7IGNyZWF0ZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5leHBvcnQgdmFyIGZvY3VzU2NvcGUgPSAvKiNfX1BVUkVfXyovY3JlYXRlQ29udGV4dCh1bmRlZmluZWQpOyIsICJleHBvcnQgZnVuY3Rpb24gZGVmZXJBY3Rpb24oYWN0aW9uKSB7XG4gIHNldFRpbWVvdXQoYWN0aW9uLCAxKTtcbn1cbmV4cG9ydCB2YXIgaW5saW5lUHJvcCA9IGZ1bmN0aW9uIGlubGluZVByb3AobmFtZSwgdmFsdWUpIHtcbiAgdmFyIG9iaiA9IHt9O1xuICBvYmpbbmFtZV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iajtcbn07XG5leHBvcnQgdmFyIGV4dHJhY3RSZWYgPSBmdW5jdGlvbiBleHRyYWN0UmVmKHJlZikge1xuICByZXR1cm4gcmVmICYmICdjdXJyZW50JyBpbiByZWYgPyByZWYuY3VycmVudCA6IHJlZjtcbn07IiwgImltcG9ydCBGb2N1c0xvY2tVSSBmcm9tICcuL0xvY2snO1xuaW1wb3J0IEF1dG9Gb2N1c0luc2lkZSBmcm9tICcuL0F1dG9Gb2N1c0luc2lkZSc7XG5pbXBvcnQgTW92ZUZvY3VzSW5zaWRlLCB7IHVzZUZvY3VzSW5zaWRlIH0gZnJvbSAnLi9Nb3ZlRm9jdXNJbnNpZGUnO1xuaW1wb3J0IEZyZWVGb2N1c0luc2lkZSBmcm9tICcuL0ZyZWVGb2N1c0luc2lkZSc7XG5pbXBvcnQgSW5Gb2N1c0d1YXJkIGZyb20gJy4vRm9jdXNHdWFyZCc7XG5pbXBvcnQgeyB1c2VGb2N1c0NvbnRyb2xsZXIsIHVzZUZvY3VzU2NvcGUgfSBmcm9tICcuL3VzZS1mb2N1cy1zY29wZSc7XG5pbXBvcnQgeyB1c2VGb2N1c1N0YXRlIH0gZnJvbSAnLi91c2UtZm9jdXMtc3RhdGUnO1xuZXhwb3J0IHsgQXV0b0ZvY3VzSW5zaWRlLCBNb3ZlRm9jdXNJbnNpZGUsIEZyZWVGb2N1c0luc2lkZSwgSW5Gb2N1c0d1YXJkLCBGb2N1c0xvY2tVSSwgdXNlRm9jdXNJbnNpZGUsIHVzZUZvY3VzQ29udHJvbGxlciwgdXNlRm9jdXNTY29wZSwgdXNlRm9jdXNTdGF0ZSB9O1xuZXhwb3J0IGRlZmF1bHQgRm9jdXNMb2NrVUk7IiwgImltcG9ydCB7IGNyZWF0ZVNpZGVjYXJNZWRpdW0gfSBmcm9tICd1c2Utc2lkZWNhcic7XG5leHBvcnQgdmFyIGVmZmVjdENhciA9IGNyZWF0ZVNpZGVjYXJNZWRpdW0oKTtcbmV4cG9ydCB2YXIgZm9jdXNIaWRkZW5NYXJrZXIgPSAnZGF0YS1mb2N1cy1vbi1oaWRkZW4nO1xuIiwgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgd2l0aFNpZGVFZmZlY3QgZnJvbSAncmVhY3QtY2xpZW50c2lkZS1lZmZlY3QnO1xuaW1wb3J0IHsgbW92ZUZvY3VzSW5zaWRlLCBmb2N1c0luc2lkZSwgZm9jdXNJc0hpZGRlbiwgZXhwYW5kRm9jdXNhYmxlTm9kZXMsIGZvY3VzTmV4dEVsZW1lbnQsIGZvY3VzUHJldkVsZW1lbnQsIGZvY3VzRmlyc3RFbGVtZW50LCBmb2N1c0xhc3RFbGVtZW50LCBjYXB0dXJlRm9jdXNSZXN0b3JlIH0gZnJvbSAnZm9jdXMtbG9jayc7XG5pbXBvcnQgeyBkZWZlckFjdGlvbiwgZXh0cmFjdFJlZiB9IGZyb20gJy4vdXRpbCc7XG5pbXBvcnQgeyBtZWRpdW1Gb2N1cywgbWVkaXVtQmx1ciwgbWVkaXVtRWZmZWN0IH0gZnJvbSAnLi9tZWRpdW0nO1xudmFyIGZvY3VzT25Cb2R5ID0gZnVuY3Rpb24gZm9jdXNPbkJvZHkoKSB7XG4gIHJldHVybiBkb2N1bWVudCAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBkb2N1bWVudC5ib2R5O1xufTtcbnZhciBpc0ZyZWVGb2N1cyA9IGZ1bmN0aW9uIGlzRnJlZUZvY3VzKCkge1xuICByZXR1cm4gZm9jdXNPbkJvZHkoKSB8fCBmb2N1c0lzSGlkZGVuKCk7XG59O1xudmFyIGxhc3RBY3RpdmVUcmFwID0gbnVsbDtcbnZhciBsYXN0QWN0aXZlRm9jdXMgPSBudWxsO1xudmFyIGxhc3RQb3J0YWxlZEVsZW1lbnQgPSBudWxsO1xudmFyIGZvY3VzV2FzT3V0c2lkZVdpbmRvdyA9IGZhbHNlO1xudmFyIGRlZmF1bHRXaGl0ZWxpc3QgPSBmdW5jdGlvbiBkZWZhdWx0V2hpdGVsaXN0KCkge1xuICByZXR1cm4gdHJ1ZTtcbn07XG52YXIgZm9jdXNXaGl0ZWxpc3RlZCA9IGZ1bmN0aW9uIGZvY3VzV2hpdGVsaXN0ZWQoYWN0aXZlRWxlbWVudCkge1xuICByZXR1cm4gKGxhc3RBY3RpdmVUcmFwLndoaXRlTGlzdCB8fCBkZWZhdWx0V2hpdGVsaXN0KShhY3RpdmVFbGVtZW50KTtcbn07XG52YXIgcmVjb3JkUG9ydGFsID0gZnVuY3Rpb24gcmVjb3JkUG9ydGFsKG9ic2VydmVyTm9kZSwgcG9ydGFsZWRFbGVtZW50KSB7XG4gIGxhc3RQb3J0YWxlZEVsZW1lbnQgPSB7XG4gICAgb2JzZXJ2ZXJOb2RlOiBvYnNlcnZlck5vZGUsXG4gICAgcG9ydGFsZWRFbGVtZW50OiBwb3J0YWxlZEVsZW1lbnRcbiAgfTtcbn07XG52YXIgZm9jdXNJc1BvcnRhbGVkUGFpciA9IGZ1bmN0aW9uIGZvY3VzSXNQb3J0YWxlZFBhaXIoZWxlbWVudCkge1xuICByZXR1cm4gbGFzdFBvcnRhbGVkRWxlbWVudCAmJiBsYXN0UG9ydGFsZWRFbGVtZW50LnBvcnRhbGVkRWxlbWVudCA9PT0gZWxlbWVudDtcbn07XG5mdW5jdGlvbiBhdXRvR3VhcmQoc3RhcnRJbmRleCwgZW5kLCBzdGVwLCBhbGxOb2Rlcykge1xuICB2YXIgbGFzdEd1YXJkID0gbnVsbDtcbiAgdmFyIGkgPSBzdGFydEluZGV4O1xuICBkbyB7XG4gICAgdmFyIGl0ZW0gPSBhbGxOb2Rlc1tpXTtcbiAgICBpZiAoaXRlbS5ndWFyZCkge1xuICAgICAgaWYgKGl0ZW0ubm9kZS5kYXRhc2V0LmZvY3VzQXV0b0d1YXJkKSB7XG4gICAgICAgIGxhc3RHdWFyZCA9IGl0ZW07XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpdGVtLmxvY2tJdGVtKSB7XG4gICAgICBpZiAoaSAhPT0gc3RhcnRJbmRleCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBsYXN0R3VhcmQgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH0gd2hpbGUgKChpICs9IHN0ZXApICE9PSBlbmQpO1xuICBpZiAobGFzdEd1YXJkKSB7XG4gICAgbGFzdEd1YXJkLm5vZGUudGFiSW5kZXggPSAwO1xuICB9XG59XG52YXIgZm9jdXNXYXNPdXRzaWRlID0gZnVuY3Rpb24gZm9jdXNXYXNPdXRzaWRlKGNyb3NzRnJhbWVPcHRpb24pIHtcbiAgaWYgKGNyb3NzRnJhbWVPcHRpb24pIHtcbiAgICByZXR1cm4gQm9vbGVhbihmb2N1c1dhc091dHNpZGVXaW5kb3cpO1xuICB9XG4gIHJldHVybiBmb2N1c1dhc091dHNpZGVXaW5kb3cgPT09ICdtZWFud2hpbGUnO1xufTtcbnZhciBjaGVja0luSG9zdCA9IGZ1bmN0aW9uIGNoZWNrSW5Ib3N0KGNoZWNrLCBlbCwgYm91bmRhcnkpIHtcbiAgcmV0dXJuIGVsICYmIChlbC5ob3N0ID09PSBjaGVjayAmJiAoIWVsLmFjdGl2ZUVsZW1lbnQgfHwgYm91bmRhcnkuY29udGFpbnMoZWwuYWN0aXZlRWxlbWVudCkpIHx8IGVsLnBhcmVudE5vZGUgJiYgY2hlY2tJbkhvc3QoY2hlY2ssIGVsLnBhcmVudE5vZGUsIGJvdW5kYXJ5KSk7XG59O1xudmFyIHdpdGhpbkhvc3QgPSBmdW5jdGlvbiB3aXRoaW5Ib3N0KGFjdGl2ZUVsZW1lbnQsIHdvcmtpbmdBcmVhKSB7XG4gIHJldHVybiB3b3JraW5nQXJlYS5zb21lKGZ1bmN0aW9uIChhcmVhKSB7XG4gICAgcmV0dXJuIGNoZWNrSW5Ib3N0KGFjdGl2ZUVsZW1lbnQsIGFyZWEsIGFyZWEpO1xuICB9KTtcbn07XG52YXIgYWN0aXZhdGVUcmFwID0gZnVuY3Rpb24gYWN0aXZhdGVUcmFwKCkge1xuICB2YXIgcmVzdWx0ID0gZmFsc2U7XG4gIGlmIChsYXN0QWN0aXZlVHJhcCkge1xuICAgIHZhciBfbGFzdEFjdGl2ZVRyYXAgPSBsYXN0QWN0aXZlVHJhcCxcbiAgICAgIG9ic2VydmVkID0gX2xhc3RBY3RpdmVUcmFwLm9ic2VydmVkLFxuICAgICAgcGVyc2lzdGVudEZvY3VzID0gX2xhc3RBY3RpdmVUcmFwLnBlcnNpc3RlbnRGb2N1cyxcbiAgICAgIGF1dG9Gb2N1cyA9IF9sYXN0QWN0aXZlVHJhcC5hdXRvRm9jdXMsXG4gICAgICBzaGFyZHMgPSBfbGFzdEFjdGl2ZVRyYXAuc2hhcmRzLFxuICAgICAgY3Jvc3NGcmFtZSA9IF9sYXN0QWN0aXZlVHJhcC5jcm9zc0ZyYW1lLFxuICAgICAgZm9jdXNPcHRpb25zID0gX2xhc3RBY3RpdmVUcmFwLmZvY3VzT3B0aW9ucztcbiAgICB2YXIgd29ya2luZ05vZGUgPSBvYnNlcnZlZCB8fCBsYXN0UG9ydGFsZWRFbGVtZW50ICYmIGxhc3RQb3J0YWxlZEVsZW1lbnQucG9ydGFsZWRFbGVtZW50O1xuICAgIHZhciBhY3RpdmVFbGVtZW50ID0gZG9jdW1lbnQgJiYgZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICBpZiAod29ya2luZ05vZGUpIHtcbiAgICAgIHZhciB3b3JraW5nQXJlYSA9IFt3b3JraW5nTm9kZV0uY29uY2F0KHNoYXJkcy5tYXAoZXh0cmFjdFJlZikuZmlsdGVyKEJvb2xlYW4pKTtcbiAgICAgIGlmICghYWN0aXZlRWxlbWVudCB8fCBmb2N1c1doaXRlbGlzdGVkKGFjdGl2ZUVsZW1lbnQpKSB7XG4gICAgICAgIGlmIChwZXJzaXN0ZW50Rm9jdXMgfHwgZm9jdXNXYXNPdXRzaWRlKGNyb3NzRnJhbWUpIHx8ICFpc0ZyZWVGb2N1cygpIHx8ICFsYXN0QWN0aXZlRm9jdXMgJiYgYXV0b0ZvY3VzKSB7XG4gICAgICAgICAgaWYgKHdvcmtpbmdOb2RlICYmICEoZm9jdXNJbnNpZGUod29ya2luZ0FyZWEpIHx8IGFjdGl2ZUVsZW1lbnQgJiYgd2l0aGluSG9zdChhY3RpdmVFbGVtZW50LCB3b3JraW5nQXJlYSkgfHwgZm9jdXNJc1BvcnRhbGVkUGFpcihhY3RpdmVFbGVtZW50LCB3b3JraW5nTm9kZSkpKSB7XG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQgJiYgIWxhc3RBY3RpdmVGb2N1cyAmJiBhY3RpdmVFbGVtZW50ICYmICFhdXRvRm9jdXMpIHtcbiAgICAgICAgICAgICAgaWYgKGFjdGl2ZUVsZW1lbnQuYmx1cikge1xuICAgICAgICAgICAgICAgIGFjdGl2ZUVsZW1lbnQuYmx1cigpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuZm9jdXMoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlc3VsdCA9IG1vdmVGb2N1c0luc2lkZSh3b3JraW5nQXJlYSwgbGFzdEFjdGl2ZUZvY3VzLCB7XG4gICAgICAgICAgICAgICAgZm9jdXNPcHRpb25zOiBmb2N1c09wdGlvbnNcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGxhc3RQb3J0YWxlZEVsZW1lbnQgPSB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZm9jdXNXYXNPdXRzaWRlV2luZG93ID0gZmFsc2U7XG4gICAgICAgICAgbGFzdEFjdGl2ZUZvY3VzID0gZG9jdW1lbnQgJiYgZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGRvY3VtZW50ICYmIGFjdGl2ZUVsZW1lbnQgIT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgJiYgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2RhdGEtZm9jdXMtYXV0by1ndWFyZF0nKSkge1xuICAgICAgICB2YXIgbmV3QWN0aXZlRWxlbWVudCA9IGRvY3VtZW50ICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgICAgIHZhciBhbGxOb2RlcyA9IGV4cGFuZEZvY3VzYWJsZU5vZGVzKHdvcmtpbmdBcmVhKTtcbiAgICAgICAgdmFyIGZvY3VzZWRJbmRleCA9IGFsbE5vZGVzLm1hcChmdW5jdGlvbiAoX3JlZikge1xuICAgICAgICAgIHZhciBub2RlID0gX3JlZi5ub2RlO1xuICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICB9KS5pbmRleE9mKG5ld0FjdGl2ZUVsZW1lbnQpO1xuICAgICAgICBpZiAoZm9jdXNlZEluZGV4ID4gLTEpIHtcbiAgICAgICAgICBhbGxOb2Rlcy5maWx0ZXIoZnVuY3Rpb24gKF9yZWYyKSB7XG4gICAgICAgICAgICB2YXIgZ3VhcmQgPSBfcmVmMi5ndWFyZCxcbiAgICAgICAgICAgICAgbm9kZSA9IF9yZWYyLm5vZGU7XG4gICAgICAgICAgICByZXR1cm4gZ3VhcmQgJiYgbm9kZS5kYXRhc2V0LmZvY3VzQXV0b0d1YXJkO1xuICAgICAgICAgIH0pLmZvckVhY2goZnVuY3Rpb24gKF9yZWYzKSB7XG4gICAgICAgICAgICB2YXIgbm9kZSA9IF9yZWYzLm5vZGU7XG4gICAgICAgICAgICByZXR1cm4gbm9kZS5yZW1vdmVBdHRyaWJ1dGUoJ3RhYkluZGV4Jyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYXV0b0d1YXJkKGZvY3VzZWRJbmRleCwgYWxsTm9kZXMubGVuZ3RoLCArMSwgYWxsTm9kZXMpO1xuICAgICAgICAgIGF1dG9HdWFyZChmb2N1c2VkSW5kZXgsIC0xLCAtMSwgYWxsTm9kZXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xudmFyIG9uVHJhcCA9IGZ1bmN0aW9uIG9uVHJhcChldmVudCkge1xuICBpZiAoYWN0aXZhdGVUcmFwKCkgJiYgZXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG59O1xudmFyIG9uQmx1ciA9IGZ1bmN0aW9uIG9uQmx1cigpIHtcbiAgcmV0dXJuIGRlZmVyQWN0aW9uKGFjdGl2YXRlVHJhcCk7XG59O1xudmFyIG9uRm9jdXMgPSBmdW5jdGlvbiBvbkZvY3VzKGV2ZW50KSB7XG4gIHZhciBzb3VyY2UgPSBldmVudC50YXJnZXQ7XG4gIHZhciBjdXJyZW50Tm9kZSA9IGV2ZW50LmN1cnJlbnRUYXJnZXQ7XG4gIGlmICghY3VycmVudE5vZGUuY29udGFpbnMoc291cmNlKSkge1xuICAgIHJlY29yZFBvcnRhbChjdXJyZW50Tm9kZSwgc291cmNlKTtcbiAgfVxufTtcbnZhciBGb2N1c1dhdGNoZXIgPSBmdW5jdGlvbiBGb2N1c1dhdGNoZXIoKSB7XG4gIHJldHVybiBudWxsO1xufTtcbnZhciBGb2N1c1RyYXAgPSBmdW5jdGlvbiBGb2N1c1RyYXAoX3JlZjQpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZjQuY2hpbGRyZW47XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgb25CbHVyOiBvbkJsdXIsXG4gICAgb25Gb2N1czogb25Gb2N1c1xuICB9LCBjaGlsZHJlbik7XG59O1xuRm9jdXNUcmFwLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWRcbn0gOiB7fTtcbnZhciBvbldpbmRvd0JsdXIgPSBmdW5jdGlvbiBvbldpbmRvd0JsdXIoKSB7XG4gIGZvY3VzV2FzT3V0c2lkZVdpbmRvdyA9ICdqdXN0JztcbiAgZGVmZXJBY3Rpb24oZnVuY3Rpb24gKCkge1xuICAgIGZvY3VzV2FzT3V0c2lkZVdpbmRvdyA9ICdtZWFud2hpbGUnO1xuICB9KTtcbn07XG52YXIgYXR0YWNoSGFuZGxlciA9IGZ1bmN0aW9uIGF0dGFjaEhhbmRsZXIoKSB7XG4gIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzaW4nLCBvblRyYXApO1xuICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdmb2N1c291dCcsIG9uQmx1cik7XG4gIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgb25XaW5kb3dCbHVyKTtcbn07XG52YXIgZGV0YWNoSGFuZGxlciA9IGZ1bmN0aW9uIGRldGFjaEhhbmRsZXIoKSB7XG4gIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ZvY3VzaW4nLCBvblRyYXApO1xuICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdmb2N1c291dCcsIG9uQmx1cik7XG4gIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdibHVyJywgb25XaW5kb3dCbHVyKTtcbn07XG5mdW5jdGlvbiByZWR1Y2VQcm9wc1RvU3RhdGUocHJvcHNMaXN0KSB7XG4gIHJldHVybiBwcm9wc0xpc3QuZmlsdGVyKGZ1bmN0aW9uIChfcmVmNSkge1xuICAgIHZhciBkaXNhYmxlZCA9IF9yZWY1LmRpc2FibGVkO1xuICAgIHJldHVybiAhZGlzYWJsZWQ7XG4gIH0pO1xufVxudmFyIGZvY3VzTG9ja0FQSSA9IHtcbiAgbW92ZUZvY3VzSW5zaWRlOiBtb3ZlRm9jdXNJbnNpZGUsXG4gIGZvY3VzSW5zaWRlOiBmb2N1c0luc2lkZSxcbiAgZm9jdXNOZXh0RWxlbWVudDogZm9jdXNOZXh0RWxlbWVudCxcbiAgZm9jdXNQcmV2RWxlbWVudDogZm9jdXNQcmV2RWxlbWVudCxcbiAgZm9jdXNGaXJzdEVsZW1lbnQ6IGZvY3VzRmlyc3RFbGVtZW50LFxuICBmb2N1c0xhc3RFbGVtZW50OiBmb2N1c0xhc3RFbGVtZW50LFxuICBjYXB0dXJlRm9jdXNSZXN0b3JlOiBjYXB0dXJlRm9jdXNSZXN0b3JlXG59O1xuZnVuY3Rpb24gaGFuZGxlU3RhdGVDaGFuZ2VPbkNsaWVudCh0cmFwcykge1xuICB2YXIgdHJhcCA9IHRyYXBzLnNsaWNlKC0xKVswXTtcbiAgaWYgKHRyYXAgJiYgIWxhc3RBY3RpdmVUcmFwKSB7XG4gICAgYXR0YWNoSGFuZGxlcigpO1xuICB9XG4gIHZhciBsYXN0VHJhcCA9IGxhc3RBY3RpdmVUcmFwO1xuICB2YXIgc2FtZVRyYXAgPSBsYXN0VHJhcCAmJiB0cmFwICYmIHRyYXAuaWQgPT09IGxhc3RUcmFwLmlkO1xuICBsYXN0QWN0aXZlVHJhcCA9IHRyYXA7XG4gIGlmIChsYXN0VHJhcCAmJiAhc2FtZVRyYXApIHtcbiAgICBsYXN0VHJhcC5vbkRlYWN0aXZhdGlvbigpO1xuICAgIGlmICghdHJhcHMuZmlsdGVyKGZ1bmN0aW9uIChfcmVmNikge1xuICAgICAgdmFyIGlkID0gX3JlZjYuaWQ7XG4gICAgICByZXR1cm4gaWQgPT09IGxhc3RUcmFwLmlkO1xuICAgIH0pLmxlbmd0aCkge1xuICAgICAgbGFzdFRyYXAucmV0dXJuRm9jdXMoIXRyYXApO1xuICAgIH1cbiAgfVxuICBpZiAodHJhcCkge1xuICAgIGxhc3RBY3RpdmVGb2N1cyA9IG51bGw7XG4gICAgaWYgKCFzYW1lVHJhcCB8fCBsYXN0VHJhcC5vYnNlcnZlZCAhPT0gdHJhcC5vYnNlcnZlZCkge1xuICAgICAgdHJhcC5vbkFjdGl2YXRpb24oZm9jdXNMb2NrQVBJKTtcbiAgICB9XG4gICAgYWN0aXZhdGVUcmFwKHRydWUpO1xuICAgIGRlZmVyQWN0aW9uKGFjdGl2YXRlVHJhcCk7XG4gIH0gZWxzZSB7XG4gICAgZGV0YWNoSGFuZGxlcigpO1xuICAgIGxhc3RBY3RpdmVGb2N1cyA9IG51bGw7XG4gIH1cbn1cbm1lZGl1bUZvY3VzLmFzc2lnblN5bmNNZWRpdW0ob25Gb2N1cyk7XG5tZWRpdW1CbHVyLmFzc2lnbk1lZGl1bShvbkJsdXIpO1xubWVkaXVtRWZmZWN0LmFzc2lnbk1lZGl1bShmdW5jdGlvbiAoY2IpIHtcbiAgcmV0dXJuIGNiKGZvY3VzTG9ja0FQSSk7XG59KTtcbmV4cG9ydCBkZWZhdWx0IHdpdGhTaWRlRWZmZWN0KHJlZHVjZVByb3BzVG9TdGF0ZSwgaGFuZGxlU3RhdGVDaGFuZ2VPbkNsaWVudCkoRm9jdXNXYXRjaGVyKTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgby5fX3Byb3RvX18gPSBwO1xuICAgIHJldHVybiBvO1xuICB9O1xuICByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApO1xufSIsICJpbXBvcnQgc2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vc2V0UHJvdG90eXBlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pbmhlcml0c0xvb3NlKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcy5wcm90b3R5cGUpO1xuICBzdWJDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWJDbGFzcztcbiAgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdHlwZW9mKG8pIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gdHlwZW9mIG87XG4gIH0gOiBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvO1xuICB9LCBfdHlwZW9mKG8pO1xufSIsICJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRvUHJpbWl0aXZlKHQsIHIpIHtcbiAgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7XG4gIHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdO1xuICBpZiAodm9pZCAwICE9PSBlKSB7XG4gICAgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7XG4gICAgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpO1xuICB9XG4gIHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7XG59IiwgImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuaW1wb3J0IHRvUHJpbWl0aXZlIGZyb20gXCIuL3RvUHJpbWl0aXZlLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0b1Byb3BlcnR5S2V5KHQpIHtcbiAgdmFyIGkgPSB0b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTtcbiAgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjtcbn0iLCAiaW1wb3J0IHRvUHJvcGVydHlLZXkgZnJvbSBcIi4vdG9Qcm9wZXJ0eUtleS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBrZXkgPSB0b1Byb3BlcnR5S2V5KGtleSk7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiBvYmo7XG59IiwgImltcG9ydCBfaW5oZXJpdHNMb29zZSBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlJztcbmltcG9ydCBfZGVmaW5lUHJvcGVydHkgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHknO1xuaW1wb3J0IFJlYWN0LCB7IFB1cmVDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5cbmZ1bmN0aW9uIHdpdGhTaWRlRWZmZWN0KHJlZHVjZVByb3BzVG9TdGF0ZSwgaGFuZGxlU3RhdGVDaGFuZ2VPbkNsaWVudCkge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgaWYgKHR5cGVvZiByZWR1Y2VQcm9wc1RvU3RhdGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgcmVkdWNlUHJvcHNUb1N0YXRlIHRvIGJlIGEgZnVuY3Rpb24uJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBoYW5kbGVTdGF0ZUNoYW5nZU9uQ2xpZW50ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIGhhbmRsZVN0YXRlQ2hhbmdlT25DbGllbnQgdG8gYmUgYSBmdW5jdGlvbi4nKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBnZXREaXNwbGF5TmFtZShXcmFwcGVkQ29tcG9uZW50KSB7XG4gICAgcmV0dXJuIFdyYXBwZWRDb21wb25lbnQuZGlzcGxheU5hbWUgfHwgV3JhcHBlZENvbXBvbmVudC5uYW1lIHx8ICdDb21wb25lbnQnO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoV3JhcHBlZENvbXBvbmVudCkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgIGlmICh0eXBlb2YgV3JhcHBlZENvbXBvbmVudCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIFdyYXBwZWRDb21wb25lbnQgdG8gYmUgYSBSZWFjdCBjb21wb25lbnQuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIG1vdW50ZWRJbnN0YW5jZXMgPSBbXTtcbiAgICB2YXIgc3RhdGU7XG5cbiAgICBmdW5jdGlvbiBlbWl0Q2hhbmdlKCkge1xuICAgICAgc3RhdGUgPSByZWR1Y2VQcm9wc1RvU3RhdGUobW91bnRlZEluc3RhbmNlcy5tYXAoZnVuY3Rpb24gKGluc3RhbmNlKSB7XG4gICAgICAgIHJldHVybiBpbnN0YW5jZS5wcm9wcztcbiAgICAgIH0pKTtcbiAgICAgIGhhbmRsZVN0YXRlQ2hhbmdlT25DbGllbnQoc3RhdGUpO1xuICAgIH1cblxuICAgIHZhciBTaWRlRWZmZWN0ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUHVyZUNvbXBvbmVudCkge1xuICAgICAgX2luaGVyaXRzTG9vc2UoU2lkZUVmZmVjdCwgX1B1cmVDb21wb25lbnQpO1xuXG4gICAgICBmdW5jdGlvbiBTaWRlRWZmZWN0KCkge1xuICAgICAgICByZXR1cm4gX1B1cmVDb21wb25lbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgICAgfVxuXG4gICAgICAvLyBUcnkgdG8gdXNlIGRpc3BsYXlOYW1lIG9mIHdyYXBwZWQgY29tcG9uZW50XG4gICAgICBTaWRlRWZmZWN0LnBlZWsgPSBmdW5jdGlvbiBwZWVrKCkge1xuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgICB9O1xuXG4gICAgICB2YXIgX3Byb3RvID0gU2lkZUVmZmVjdC5wcm90b3R5cGU7XG5cbiAgICAgIF9wcm90by5jb21wb25lbnREaWRNb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgICBtb3VudGVkSW5zdGFuY2VzLnB1c2godGhpcyk7XG4gICAgICAgIGVtaXRDaGFuZ2UoKTtcbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5jb21wb25lbnREaWRVcGRhdGUgPSBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUoKSB7XG4gICAgICAgIGVtaXRDaGFuZ2UoKTtcbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5jb21wb25lbnRXaWxsVW5tb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgICB2YXIgaW5kZXggPSBtb3VudGVkSW5zdGFuY2VzLmluZGV4T2YodGhpcyk7XG4gICAgICAgIG1vdW50ZWRJbnN0YW5jZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgZW1pdENoYW5nZSgpO1xuICAgICAgfTtcblxuICAgICAgX3Byb3RvLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFdyYXBwZWRDb21wb25lbnQsIHRoaXMucHJvcHMpO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIFNpZGVFZmZlY3Q7XG4gICAgfShQdXJlQ29tcG9uZW50KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShTaWRlRWZmZWN0LCBcImRpc3BsYXlOYW1lXCIsIFwiU2lkZUVmZmVjdChcIiArIGdldERpc3BsYXlOYW1lKFdyYXBwZWRDb21wb25lbnQpICsgXCIpXCIpO1xuXG4gICAgcmV0dXJuIFNpZGVFZmZlY3Q7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTaWRlRWZmZWN0O1xuIiwgIi8qXG5JRTExIHN1cHBvcnRcbiAqL1xuZXhwb3J0IHZhciB0b0FycmF5ID0gZnVuY3Rpb24gKGEpIHtcbiAgICB2YXIgcmV0ID0gQXJyYXkoYS5sZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYS5sZW5ndGg7ICsraSkge1xuICAgICAgICByZXRbaV0gPSBhW2ldO1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xufTtcbmV4cG9ydCB2YXIgYXNBcnJheSA9IGZ1bmN0aW9uIChhKSB7IHJldHVybiAoQXJyYXkuaXNBcnJheShhKSA/IGEgOiBbYV0pOyB9O1xuZXhwb3J0IHZhciBnZXRGaXJzdCA9IGZ1bmN0aW9uIChhKSB7IHJldHVybiAoQXJyYXkuaXNBcnJheShhKSA/IGFbMF0gOiBhKTsgfTtcbiIsICJpbXBvcnQgeyBGT0NVU19OT19BVVRPRk9DVVMgfSBmcm9tICcuLi9jb25zdGFudHMnO1xudmFyIGlzRWxlbWVudEhpZGRlbiA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgLy8gd2UgY2FuIG1lYXN1cmUgb25seSBcImVsZW1lbnRzXCJcbiAgICAvLyBjb25zaWRlciBvdGhlcnMgYXMgXCJ2aXNpYmxlXCJcbiAgICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB2YXIgY29tcHV0ZWRTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKG5vZGUsIG51bGwpO1xuICAgIGlmICghY29tcHV0ZWRTdHlsZSB8fCAhY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIChjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ2Rpc3BsYXknKSA9PT0gJ25vbmUnIHx8IGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgndmlzaWJpbGl0eScpID09PSAnaGlkZGVuJyk7XG59O1xudmFyIGdldFBhcmVudE5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIC8vIERPQ1VNRU5UX0ZSQUdNRU5UX05PREUgY2FuIGFsc28gcG9pbnQgb24gU2hhZG93Um9vdC4gSW4gdGhpcyBjYXNlIC5ob3N0IHdpbGwgcG9pbnQgb24gdGhlIG5leHQgbm9kZVxuICAgIHJldHVybiBub2RlLnBhcmVudE5vZGUgJiYgbm9kZS5wYXJlbnROb2RlLm5vZGVUeXBlID09PSBOb2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREVcbiAgICAgICAgPyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICAgICAgbm9kZS5wYXJlbnROb2RlLmhvc3RcbiAgICAgICAgOiBub2RlLnBhcmVudE5vZGU7XG59O1xudmFyIGlzVG9wTm9kZSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJldHVybiBub2RlID09PSBkb2N1bWVudCB8fCAobm9kZSAmJiBub2RlLm5vZGVUeXBlID09PSBOb2RlLkRPQ1VNRU5UX05PREUpO1xufTtcbnZhciBpc0luZXJ0ID0gZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIG5vZGUuaGFzQXR0cmlidXRlKCdpbmVydCcpOyB9O1xuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS90ZXN0aW5nLWxpYnJhcnkvamVzdC1kb20vYmxvYi9tYWluL3NyYy90by1iZS12aXNpYmxlLmpzXG4gKi9cbnZhciBpc1Zpc2libGVVbmNhY2hlZCA9IGZ1bmN0aW9uIChub2RlLCBjaGVja1BhcmVudCkge1xuICAgIHJldHVybiAhbm9kZSB8fCBpc1RvcE5vZGUobm9kZSkgfHwgKCFpc0VsZW1lbnRIaWRkZW4obm9kZSkgJiYgIWlzSW5lcnQobm9kZSkgJiYgY2hlY2tQYXJlbnQoZ2V0UGFyZW50Tm9kZShub2RlKSkpO1xufTtcbmV4cG9ydCB2YXIgaXNWaXNpYmxlQ2FjaGVkID0gZnVuY3Rpb24gKHZpc2liaWxpdHlDYWNoZSwgbm9kZSkge1xuICAgIHZhciBjYWNoZWQgPSB2aXNpYmlsaXR5Q2FjaGUuZ2V0KG5vZGUpO1xuICAgIGlmIChjYWNoZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gY2FjaGVkO1xuICAgIH1cbiAgICB2YXIgcmVzdWx0ID0gaXNWaXNpYmxlVW5jYWNoZWQobm9kZSwgaXNWaXNpYmxlQ2FjaGVkLmJpbmQodW5kZWZpbmVkLCB2aXNpYmlsaXR5Q2FjaGUpKTtcbiAgICB2aXNpYmlsaXR5Q2FjaGUuc2V0KG5vZGUsIHJlc3VsdCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgaXNBdXRvRm9jdXNBbGxvd2VkVW5jYWNoZWQgPSBmdW5jdGlvbiAobm9kZSwgY2hlY2tQYXJlbnQpIHtcbiAgICByZXR1cm4gbm9kZSAmJiAhaXNUb3BOb2RlKG5vZGUpID8gKGlzQXV0b0ZvY3VzQWxsb3dlZChub2RlKSA/IGNoZWNrUGFyZW50KGdldFBhcmVudE5vZGUobm9kZSkpIDogZmFsc2UpIDogdHJ1ZTtcbn07XG5leHBvcnQgdmFyIGlzQXV0b0ZvY3VzQWxsb3dlZENhY2hlZCA9IGZ1bmN0aW9uIChjYWNoZSwgbm9kZSkge1xuICAgIHZhciBjYWNoZWQgPSBjYWNoZS5nZXQobm9kZSk7XG4gICAgaWYgKGNhY2hlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBjYWNoZWQ7XG4gICAgfVxuICAgIHZhciByZXN1bHQgPSBpc0F1dG9Gb2N1c0FsbG93ZWRVbmNhY2hlZChub2RlLCBpc0F1dG9Gb2N1c0FsbG93ZWRDYWNoZWQuYmluZCh1bmRlZmluZWQsIGNhY2hlKSk7XG4gICAgY2FjaGUuc2V0KG5vZGUsIHJlc3VsdCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5leHBvcnQgdmFyIGdldERhdGFzZXQgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICByZXR1cm4gbm9kZS5kYXRhc2V0O1xufTtcbmV4cG9ydCB2YXIgaXNIVE1MQnV0dG9uRWxlbWVudCA9IGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiBub2RlLnRhZ05hbWUgPT09ICdCVVRUT04nOyB9O1xuZXhwb3J0IHZhciBpc0hUTUxJbnB1dEVsZW1lbnQgPSBmdW5jdGlvbiAobm9kZSkgeyByZXR1cm4gbm9kZS50YWdOYW1lID09PSAnSU5QVVQnOyB9O1xuZXhwb3J0IHZhciBpc1JhZGlvRWxlbWVudCA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgcmV0dXJuIGlzSFRNTElucHV0RWxlbWVudChub2RlKSAmJiBub2RlLnR5cGUgPT09ICdyYWRpbyc7XG59O1xuZXhwb3J0IHZhciBub3RIaWRkZW5JbnB1dCA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgcmV0dXJuICEoKGlzSFRNTElucHV0RWxlbWVudChub2RlKSB8fCBpc0hUTUxCdXR0b25FbGVtZW50KG5vZGUpKSAmJiAobm9kZS50eXBlID09PSAnaGlkZGVuJyB8fCBub2RlLmRpc2FibGVkKSk7XG59O1xuZXhwb3J0IHZhciBpc0F1dG9Gb2N1c0FsbG93ZWQgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIHZhciBhdHRyaWJ1dGUgPSBub2RlLmdldEF0dHJpYnV0ZShGT0NVU19OT19BVVRPRk9DVVMpO1xuICAgIHJldHVybiAhW3RydWUsICd0cnVlJywgJyddLmluY2x1ZGVzKGF0dHJpYnV0ZSk7XG59O1xuZXhwb3J0IHZhciBpc0d1YXJkID0gZnVuY3Rpb24gKG5vZGUpIHsgdmFyIF9hOyByZXR1cm4gQm9vbGVhbihub2RlICYmICgoX2EgPSBnZXREYXRhc2V0KG5vZGUpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZm9jdXNHdWFyZCkpOyB9O1xuZXhwb3J0IHZhciBpc05vdEFHdWFyZCA9IGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiAhaXNHdWFyZChub2RlKTsgfTtcbmV4cG9ydCB2YXIgaXNEZWZpbmVkID0gZnVuY3Rpb24gKHgpIHsgcmV0dXJuIEJvb2xlYW4oeCk7IH07XG4iLCAiaW1wb3J0IHsgdG9BcnJheSB9IGZyb20gJy4vYXJyYXknO1xuZXhwb3J0IHZhciB0YWJTb3J0ID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICB2YXIgYVRhYiA9IE1hdGgubWF4KDAsIGEudGFiSW5kZXgpO1xuICAgIHZhciBiVGFiID0gTWF0aC5tYXgoMCwgYi50YWJJbmRleCk7XG4gICAgdmFyIHRhYkRpZmYgPSBhVGFiIC0gYlRhYjtcbiAgICB2YXIgaW5kZXhEaWZmID0gYS5pbmRleCAtIGIuaW5kZXg7XG4gICAgaWYgKHRhYkRpZmYpIHtcbiAgICAgICAgaWYgKCFhVGFiKSB7XG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWJUYWIpIHtcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGFiRGlmZiB8fCBpbmRleERpZmY7XG59O1xudmFyIGdldFRhYkluZGV4ID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICBpZiAobm9kZS50YWJJbmRleCA8IDApIHtcbiAgICAgICAgLy8gYWxsIFwiZm9jdXNhYmxlXCIgZWxlbWVudHMgYXJlIGFscmVhZHkgcHJlc2VsZWN0ZWRcbiAgICAgICAgLy8gYnV0IHNvbWUgbWlnaHQgaGF2ZSBpbXBsaWNpdCBuZWdhdGl2ZSB0YWJJbmRleFxuICAgICAgICAvLyByZXR1cm4gMCBmb3IgPGF1ZGlvIHdpdGhvdXQgdGFiSW5kZXggYXR0cmlidXRlIC0gaXQgaXMgXCJ0YWJiYWJsZVwiXG4gICAgICAgIGlmICghbm9kZS5oYXNBdHRyaWJ1dGUoJ3RhYmluZGV4JykpIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBub2RlLnRhYkluZGV4O1xufTtcbmV4cG9ydCB2YXIgb3JkZXJCeVRhYkluZGV4ID0gZnVuY3Rpb24gKG5vZGVzLCBmaWx0ZXJOZWdhdGl2ZSwga2VlcEd1YXJkcykge1xuICAgIHJldHVybiB0b0FycmF5KG5vZGVzKVxuICAgICAgICAubWFwKGZ1bmN0aW9uIChub2RlLCBpbmRleCkge1xuICAgICAgICB2YXIgdGFiSW5kZXggPSBnZXRUYWJJbmRleChub2RlKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5vZGU6IG5vZGUsXG4gICAgICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgICAgICB0YWJJbmRleDoga2VlcEd1YXJkcyAmJiB0YWJJbmRleCA9PT0gLTEgPyAoKG5vZGUuZGF0YXNldCB8fCB7fSkuZm9jdXNHdWFyZCA/IDAgOiAtMSkgOiB0YWJJbmRleCxcbiAgICAgICAgfTtcbiAgICB9KVxuICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChkYXRhKSB7IHJldHVybiAhZmlsdGVyTmVnYXRpdmUgfHwgZGF0YS50YWJJbmRleCA+PSAwOyB9KVxuICAgICAgICAuc29ydCh0YWJTb3J0KTtcbn07XG4iLCAiLyoqXG4gKiBsaXN0IG9mIHRoZSBvYmplY3QgdG8gYmUgY29uc2lkZXJlZCBhcyBmb2N1c2FibGVcbiAqL1xuZXhwb3J0IHZhciB0YWJiYWJsZXMgPSBbXG4gICAgJ2J1dHRvbjplbmFibGVkJyxcbiAgICAnc2VsZWN0OmVuYWJsZWQnLFxuICAgICd0ZXh0YXJlYTplbmFibGVkJyxcbiAgICAnaW5wdXQ6ZW5hYmxlZCcsXG4gICAgLy8gZWxlbWVudHMgd2l0aCBleHBsaWNpdCByb2xlcyB3aWxsIGFsc28gdXNlIGV4cGxpY2l0IHRhYmluZGV4XG4gICAgLy8gJ1tyb2xlPVwiYnV0dG9uXCJdJyxcbiAgICAnYVtocmVmXScsXG4gICAgJ2FyZWFbaHJlZl0nLFxuICAgICdzdW1tYXJ5JyxcbiAgICAnaWZyYW1lJyxcbiAgICAnb2JqZWN0JyxcbiAgICAnZW1iZWQnLFxuICAgICdhdWRpb1tjb250cm9sc10nLFxuICAgICd2aWRlb1tjb250cm9sc10nLFxuICAgICdbdGFiaW5kZXhdJyxcbiAgICAnW2NvbnRlbnRlZGl0YWJsZV0nLFxuICAgICdbYXV0b2ZvY3VzXScsXG5dO1xuIiwgImltcG9ydCB7IEZPQ1VTX0FVVE8gfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgdG9BcnJheSB9IGZyb20gJy4vYXJyYXknO1xuaW1wb3J0IHsgdGFiYmFibGVzIH0gZnJvbSAnLi90YWJiYWJsZXMnO1xudmFyIHF1ZXJ5VGFiYmFibGVzID0gdGFiYmFibGVzLmpvaW4oJywnKTtcbnZhciBxdWVyeUd1YXJkVGFiYmFibGVzID0gXCJcIi5jb25jYXQocXVlcnlUYWJiYWJsZXMsIFwiLCBbZGF0YS1mb2N1cy1ndWFyZF1cIik7XG52YXIgZ2V0Rm9jdXNhYmxlc1dpdGhTaGFkb3dEb20gPSBmdW5jdGlvbiAocGFyZW50LCB3aXRoR3VhcmRzKSB7XG4gICAgcmV0dXJuIHRvQXJyYXkoKHBhcmVudC5zaGFkb3dSb290IHx8IHBhcmVudCkuY2hpbGRyZW4pLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBjaGlsZCkge1xuICAgICAgICByZXR1cm4gYWNjLmNvbmNhdChjaGlsZC5tYXRjaGVzKHdpdGhHdWFyZHMgPyBxdWVyeUd1YXJkVGFiYmFibGVzIDogcXVlcnlUYWJiYWJsZXMpID8gW2NoaWxkXSA6IFtdLCBnZXRGb2N1c2FibGVzV2l0aFNoYWRvd0RvbShjaGlsZCkpO1xuICAgIH0sIFtdKTtcbn07XG52YXIgZ2V0Rm9jdXNhYmxlc1dpdGhJRnJhbWUgPSBmdW5jdGlvbiAocGFyZW50LCB3aXRoR3VhcmRzKSB7XG4gICAgdmFyIF9hO1xuICAgIC8vIGNvbnRlbnREb2N1bWVudCBvZiBpZnJhbWUgd2lsbCBiZSBudWxsIGlmIGN1cnJlbnQgb3JpZ2luIGNhbm5vdCBhY2Nlc3MgaXRcbiAgICBpZiAocGFyZW50IGluc3RhbmNlb2YgSFRNTElGcmFtZUVsZW1lbnQgJiYgKChfYSA9IHBhcmVudC5jb250ZW50RG9jdW1lbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5ib2R5KSkge1xuICAgICAgICByZXR1cm4gZ2V0Rm9jdXNhYmxlcyhbcGFyZW50LmNvbnRlbnREb2N1bWVudC5ib2R5XSwgd2l0aEd1YXJkcyk7XG4gICAgfVxuICAgIHJldHVybiBbcGFyZW50XTtcbn07XG5leHBvcnQgdmFyIGdldEZvY3VzYWJsZXMgPSBmdW5jdGlvbiAocGFyZW50cywgd2l0aEd1YXJkcykge1xuICAgIHJldHVybiBwYXJlbnRzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwYXJlbnQpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB2YXIgZm9jdXNhYmxlV2l0aFNoYWRvd0RvbSA9IGdldEZvY3VzYWJsZXNXaXRoU2hhZG93RG9tKHBhcmVudCwgd2l0aEd1YXJkcyk7XG4gICAgICAgIHZhciBmb2N1c2FibGVXaXRoSWZyYW1lcyA9IChfYSA9IFtdKS5jb25jYXQuYXBwbHkoX2EsIGZvY3VzYWJsZVdpdGhTaGFkb3dEb20ubWFwKGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiBnZXRGb2N1c2FibGVzV2l0aElGcmFtZShub2RlLCB3aXRoR3VhcmRzKTsgfSkpO1xuICAgICAgICByZXR1cm4gYWNjLmNvbmNhdChcbiAgICAgICAgLy8gYWRkIGFsbCB0YWJiYWJsZXMgaW5zaWRlIGFuZCB3aXRoaW4gc2hhZG93IERPTXMgaW4gRE9NIG9yZGVyXG4gICAgICAgIGZvY3VzYWJsZVdpdGhJZnJhbWVzLCBcbiAgICAgICAgLy8gYWRkIGlmIG5vZGUgaXMgdGFiYmFibGUgaXRzZWxmXG4gICAgICAgIHBhcmVudC5wYXJlbnROb2RlXG4gICAgICAgICAgICA/IHRvQXJyYXkocGFyZW50LnBhcmVudE5vZGUucXVlcnlTZWxlY3RvckFsbChxdWVyeVRhYmJhYmxlcykpLmZpbHRlcihmdW5jdGlvbiAobm9kZSkgeyByZXR1cm4gbm9kZSA9PT0gcGFyZW50OyB9KVxuICAgICAgICAgICAgOiBbXSk7XG4gICAgfSwgW10pO1xufTtcbi8qKlxuICogcmV0dXJuIGEgbGlzdCBvZiBmb2N1c2FibGUgbm9kZXMgd2l0aGluIGFuIGFyZWEgbWFya2VkIGFzIFwiYXV0by1mb2N1c2FibGVcIlxuICogQHBhcmFtIHBhcmVudFxuICovXG5leHBvcnQgdmFyIGdldFBhcmVudEF1dG9mb2N1c2FibGVzID0gZnVuY3Rpb24gKHBhcmVudCkge1xuICAgIHZhciBwYXJlbnRGb2N1cyA9IHBhcmVudC5xdWVyeVNlbGVjdG9yQWxsKFwiW1wiLmNvbmNhdChGT0NVU19BVVRPLCBcIl1cIikpO1xuICAgIHJldHVybiB0b0FycmF5KHBhcmVudEZvY3VzKVxuICAgICAgICAubWFwKGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiBnZXRGb2N1c2FibGVzKFtub2RlXSk7IH0pXG4gICAgICAgIC5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgbm9kZXMpIHsgcmV0dXJuIGFjYy5jb25jYXQobm9kZXMpOyB9LCBbXSk7XG59O1xuIiwgImltcG9ydCB7IHRvQXJyYXkgfSBmcm9tICcuL2FycmF5JztcbmltcG9ydCB7IGlzQXV0b0ZvY3VzQWxsb3dlZENhY2hlZCwgaXNWaXNpYmxlQ2FjaGVkLCBub3RIaWRkZW5JbnB1dCB9IGZyb20gJy4vaXMnO1xuaW1wb3J0IHsgb3JkZXJCeVRhYkluZGV4IH0gZnJvbSAnLi90YWJPcmRlcic7XG5pbXBvcnQgeyBnZXRGb2N1c2FibGVzLCBnZXRQYXJlbnRBdXRvZm9jdXNhYmxlcyB9IGZyb20gJy4vdGFiVXRpbHMnO1xuLyoqXG4gKiBnaXZlbiBsaXN0IG9mIGZvY3VzYWJsZSBlbGVtZW50cyBrZWVwcyB0aGUgb25lcyB1c2VyIGNhbiBpbnRlcmFjdCB3aXRoXG4gKiBAcGFyYW0gbm9kZXNcbiAqIEBwYXJhbSB2aXNpYmlsaXR5Q2FjaGVcbiAqL1xuZXhwb3J0IHZhciBmaWx0ZXJGb2N1c2FibGUgPSBmdW5jdGlvbiAobm9kZXMsIHZpc2liaWxpdHlDYWNoZSkge1xuICAgIHJldHVybiB0b0FycmF5KG5vZGVzKVxuICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiBpc1Zpc2libGVDYWNoZWQodmlzaWJpbGl0eUNhY2hlLCBub2RlKTsgfSlcbiAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAobm9kZSkgeyByZXR1cm4gbm90SGlkZGVuSW5wdXQobm9kZSk7IH0pO1xufTtcbmV4cG9ydCB2YXIgZmlsdGVyQXV0b0ZvY3VzYWJsZSA9IGZ1bmN0aW9uIChub2RlcywgY2FjaGUpIHtcbiAgICBpZiAoY2FjaGUgPT09IHZvaWQgMCkgeyBjYWNoZSA9IG5ldyBNYXAoKTsgfVxuICAgIHJldHVybiB0b0FycmF5KG5vZGVzKS5maWx0ZXIoZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIGlzQXV0b0ZvY3VzQWxsb3dlZENhY2hlZChjYWNoZSwgbm9kZSk7IH0pO1xufTtcbi8qKlxuICogIV9fV0FSTklOR19fISBMb3cgbGV2ZWwgQVBJLlxuICogQHJldHVybnMgYWxsIHRhYmJhYmxlIG5vZGVzXG4gKlxuICogQHNlZSB7QGxpbmsgZ2V0Rm9jdXNhYmxlTm9kZXN9IHRvIGdldCBhbnkgZm9jdXNhYmxlIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gdG9wTm9kZXMgLSBhcnJheSBvZiB0b3AgbGV2ZWwgSFRNTEVsZW1lbnRzIHRvIHNlYXJjaCBpbnNpZGVcbiAqIEBwYXJhbSB2aXNpYmlsaXR5Q2FjaGUgLSBhbiBjYWNoZSB0byBzdG9yZSBpbnRlcm1lZGlhdGUgbWVhc3VyZW1lbnRzLiBFeHBlY3RlZCB0byBiZSBhIGZyZXNoIGBuZXcgTWFwYCBvbiBldmVyeSBjYWxsXG4gKi9cbmV4cG9ydCB2YXIgZ2V0VGFiYmFibGVOb2RlcyA9IGZ1bmN0aW9uICh0b3BOb2RlcywgdmlzaWJpbGl0eUNhY2hlLCB3aXRoR3VhcmRzKSB7XG4gICAgcmV0dXJuIG9yZGVyQnlUYWJJbmRleChmaWx0ZXJGb2N1c2FibGUoZ2V0Rm9jdXNhYmxlcyh0b3BOb2Rlcywgd2l0aEd1YXJkcyksIHZpc2liaWxpdHlDYWNoZSksIHRydWUsIHdpdGhHdWFyZHMpO1xufTtcbi8qKlxuICogIV9fV0FSTklOR19fISBMb3cgbGV2ZWwgQVBJLlxuICpcbiAqIEByZXR1cm5zIGFueXRoaW5nIFwiZm9jdXNhYmxlXCIsIG5vdCBvbmx5IHRhYmJhYmxlLiBUaGUgZGlmZmVyZW5jZSBpcyBpbiBgdGFiSW5kZXg9LTFgXG4gKiAod2l0aG91dCBndWFyZHMsIGFzIGxvbmcgYXMgdGhleSBhcmUgbm90IGV4cGVjdGVkIHRvIGJlIGV2ZXIgZm9jdXNlZClcbiAqXG4gKiBAc2VlIHtAbGluayBnZXRUYWJiYWJsZU5vZGVzfSB0byBnZXQgb25seSB0YWJibGUgbm9kZXMgZWxlbWVudFxuICpcbiAqIEBwYXJhbSB0b3BOb2RlcyAtIGFycmF5IG9mIHRvcCBsZXZlbCBIVE1MRWxlbWVudHMgdG8gc2VhcmNoIGluc2lkZVxuICogQHBhcmFtIHZpc2liaWxpdHlDYWNoZSAtIGFuIGNhY2hlIHRvIHN0b3JlIGludGVybWVkaWF0ZSBtZWFzdXJlbWVudHMuIEV4cGVjdGVkIHRvIGJlIGEgZnJlc2ggYG5ldyBNYXBgIG9uIGV2ZXJ5IGNhbGxcbiAqL1xuZXhwb3J0IHZhciBnZXRGb2N1c2FibGVOb2RlcyA9IGZ1bmN0aW9uICh0b3BOb2RlcywgdmlzaWJpbGl0eUNhY2hlKSB7XG4gICAgcmV0dXJuIG9yZGVyQnlUYWJJbmRleChmaWx0ZXJGb2N1c2FibGUoZ2V0Rm9jdXNhYmxlcyh0b3BOb2RlcyksIHZpc2liaWxpdHlDYWNoZSksIGZhbHNlKTtcbn07XG4vKipcbiAqIHJldHVybiBsaXN0IG9mIG5vZGVzIHdoaWNoIGFyZSBleHBlY3RlZCB0byBiZSBhdXRvLWZvY3VzZWRcbiAqIEBwYXJhbSB0b3BOb2RlXG4gKiBAcGFyYW0gdmlzaWJpbGl0eUNhY2hlXG4gKi9cbmV4cG9ydCB2YXIgcGFyZW50QXV0b2ZvY3VzYWJsZXMgPSBmdW5jdGlvbiAodG9wTm9kZSwgdmlzaWJpbGl0eUNhY2hlKSB7XG4gICAgcmV0dXJuIGZpbHRlckZvY3VzYWJsZShnZXRQYXJlbnRBdXRvZm9jdXNhYmxlcyh0b3BOb2RlKSwgdmlzaWJpbGl0eUNhY2hlKTtcbn07XG4vKlxuICogRGV0ZXJtaW5lcyBpZiBlbGVtZW50IGlzIGNvbnRhaW5lZCBpbiBzY29wZSwgaW5jbHVkaW5nIG5lc3RlZCBzaGFkb3cgRE9Nc1xuICovXG5leHBvcnQgdmFyIGNvbnRhaW5zID0gZnVuY3Rpb24gKHNjb3BlLCBlbGVtZW50KSB7XG4gICAgaWYgKHNjb3BlLnNoYWRvd1Jvb3QpIHtcbiAgICAgICAgcmV0dXJuIGNvbnRhaW5zKHNjb3BlLnNoYWRvd1Jvb3QsIGVsZW1lbnQpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKE9iamVjdC5nZXRQcm90b3R5cGVPZihzY29wZSkuY29udGFpbnMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgT2JqZWN0LmdldFByb3RvdHlwZU9mKHNjb3BlKS5jb250YWlucy5jYWxsKHNjb3BlLCBlbGVtZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRvQXJyYXkoc2NvcGUuY2hpbGRyZW4pLnNvbWUoZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBIVE1MSUZyYW1lRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHZhciBpZnJhbWVCb2R5ID0gKF9hID0gY2hpbGQuY29udGVudERvY3VtZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuYm9keTtcbiAgICAgICAgICAgICAgICBpZiAoaWZyYW1lQm9keSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGFpbnMoaWZyYW1lQm9keSwgZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjb250YWlucyhjaGlsZCwgZWxlbWVudCk7XG4gICAgICAgIH0pO1xuICAgIH1cbn07XG4iLCAiaW1wb3J0IHsgRk9DVVNfRElTQUJMRUQsIEZPQ1VTX0dST1VQIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IGFzQXJyYXksIHRvQXJyYXkgfSBmcm9tICcuL2FycmF5Jztcbi8qKlxuICogaW4gY2FzZSBvZiBtdWx0aXBsZSBub2RlcyBuZXN0ZWQgaW5zaWRlIGVhY2ggb3RoZXJcbiAqIGtlZXBzIG9ubHkgdG9wIG9uZXNcbiAqIHRoaXMgaXMgTyhubG9nbilcbiAqIEBwYXJhbSBub2Rlc1xuICogQHJldHVybnMgeyp9XG4gKi9cbnZhciBmaWx0ZXJOZXN0ZWQgPSBmdW5jdGlvbiAobm9kZXMpIHtcbiAgICB2YXIgY29udGFpbmVkID0gbmV3IFNldCgpO1xuICAgIHZhciBsID0gbm9kZXMubGVuZ3RoO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbDsgaSArPSAxKSB7XG4gICAgICAgIGZvciAodmFyIGogPSBpICsgMTsgaiA8IGw7IGogKz0gMSkge1xuICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gbm9kZXNbaV0uY29tcGFyZURvY3VtZW50UG9zaXRpb24obm9kZXNbal0pO1xuICAgICAgICAgICAgLyogZXNsaW50LWRpc2FibGUgbm8tYml0d2lzZSAqL1xuICAgICAgICAgICAgaWYgKChwb3NpdGlvbiAmIE5vZGUuRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTkVEX0JZKSA+IDApIHtcbiAgICAgICAgICAgICAgICBjb250YWluZWQuYWRkKGopO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKChwb3NpdGlvbiAmIE5vZGUuRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTlMpID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lZC5hZGQoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKiBlc2xpbnQtZW5hYmxlICovXG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5vZGVzLmZpbHRlcihmdW5jdGlvbiAoXywgaW5kZXgpIHsgcmV0dXJuICFjb250YWluZWQuaGFzKGluZGV4KTsgfSk7XG59O1xuLyoqXG4gKiBmaW5kcyB0b3AgbW9zdCBwYXJlbnQgZm9yIGEgbm9kZVxuICogQHBhcmFtIG5vZGVcbiAqIEByZXR1cm5zIHsqfVxuICovXG52YXIgZ2V0VG9wUGFyZW50ID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZS5wYXJlbnROb2RlID8gZ2V0VG9wUGFyZW50KG5vZGUucGFyZW50Tm9kZSkgOiBub2RlO1xufTtcbi8qKlxuICogcmV0dXJucyBhbGwgXCJmb2N1cyBjb250YWluZXJzXCIgaW5zaWRlIGEgZ2l2ZW4gbm9kZVxuICogQHBhcmFtIG5vZGUgLSBub2RlIG9yIG5vZGVzIHRvIGxvb2sgaW5zaWRlXG4gKiBAcmV0dXJucyBFbGVtZW50W11cbiAqL1xuZXhwb3J0IHZhciBnZXRBbGxBZmZlY3RlZE5vZGVzID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICB2YXIgbm9kZXMgPSBhc0FycmF5KG5vZGUpO1xuICAgIHJldHVybiBub2Rlcy5maWx0ZXIoQm9vbGVhbikucmVkdWNlKGZ1bmN0aW9uIChhY2MsIGN1cnJlbnROb2RlKSB7XG4gICAgICAgIHZhciBncm91cCA9IGN1cnJlbnROb2RlLmdldEF0dHJpYnV0ZShGT0NVU19HUk9VUCk7XG4gICAgICAgIGFjYy5wdXNoLmFwcGx5KGFjYywgKGdyb3VwXG4gICAgICAgICAgICA/IGZpbHRlck5lc3RlZCh0b0FycmF5KGdldFRvcFBhcmVudChjdXJyZW50Tm9kZSkucXVlcnlTZWxlY3RvckFsbChcIltcIi5jb25jYXQoRk9DVVNfR1JPVVAsIFwiPVxcXCJcIikuY29uY2F0KGdyb3VwLCBcIlxcXCJdOm5vdChbXCIpLmNvbmNhdChGT0NVU19ESVNBQkxFRCwgXCI9XFxcImRpc2FibGVkXFxcIl0pXCIpKSkpXG4gICAgICAgICAgICA6IFtjdXJyZW50Tm9kZV0pKTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBbXSk7XG59O1xuIiwgImV4cG9ydCB2YXIgc2FmZVByb2JlID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGNiKCk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxufTtcbiIsICIvKipcbiAqIHJldHVybnMgYWN0aXZlIGVsZW1lbnQgZnJvbSBkb2N1bWVudCBvciBmcm9tIG5lc3RlZCBzaGFkb3dkb21zXG4gKi9cbmltcG9ydCB7IHNhZmVQcm9iZSB9IGZyb20gJy4vc2FmZSc7XG4vKipcbiAqIHJldHVybnMgY3VycmVudCBhY3RpdmUgZWxlbWVudC4gSWYgdGhlIGFjdGl2ZSBlbGVtZW50IGlzIGEgXCJjb250YWluZXJcIiBpdHNlbGYoc2hhZG93Um9vdCBvciBpZnJhbWUpIHJldHVybnMgYWN0aXZlIGVsZW1lbnQgaW5zaWRlIGl0XG4gKiBAcGFyYW0gW2luRG9jdW1lbnRdXG4gKi9cbmV4cG9ydCB2YXIgZ2V0QWN0aXZlRWxlbWVudCA9IGZ1bmN0aW9uIChpbkRvY3VtZW50KSB7XG4gICAgaWYgKGluRG9jdW1lbnQgPT09IHZvaWQgMCkgeyBpbkRvY3VtZW50ID0gZG9jdW1lbnQ7IH1cbiAgICBpZiAoIWluRG9jdW1lbnQgfHwgIWluRG9jdW1lbnQuYWN0aXZlRWxlbWVudCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB2YXIgYWN0aXZlRWxlbWVudCA9IGluRG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICByZXR1cm4gKGFjdGl2ZUVsZW1lbnQuc2hhZG93Um9vdFxuICAgICAgICA/IGdldEFjdGl2ZUVsZW1lbnQoYWN0aXZlRWxlbWVudC5zaGFkb3dSb290KVxuICAgICAgICA6IGFjdGl2ZUVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MSUZyYW1lRWxlbWVudCAmJiBzYWZlUHJvYmUoZnVuY3Rpb24gKCkgeyByZXR1cm4gYWN0aXZlRWxlbWVudC5jb250ZW50V2luZG93LmRvY3VtZW50OyB9KVxuICAgICAgICAgICAgPyBnZXRBY3RpdmVFbGVtZW50KGFjdGl2ZUVsZW1lbnQuY29udGVudFdpbmRvdy5kb2N1bWVudClcbiAgICAgICAgICAgIDogYWN0aXZlRWxlbWVudCk7XG59O1xuIiwgImltcG9ydCB7IGNvbnRhaW5zIH0gZnJvbSAnLi91dGlscy9ET011dGlscyc7XG5pbXBvcnQgeyBnZXRBbGxBZmZlY3RlZE5vZGVzIH0gZnJvbSAnLi91dGlscy9hbGwtYWZmZWN0ZWQnO1xuaW1wb3J0IHsgZ2V0Rmlyc3QsIHRvQXJyYXkgfSBmcm9tICcuL3V0aWxzL2FycmF5JztcbmltcG9ydCB7IGdldEFjdGl2ZUVsZW1lbnQgfSBmcm9tICcuL3V0aWxzL2dldEFjdGl2ZUVsZW1lbnQnO1xudmFyIGZvY3VzSW5GcmFtZSA9IGZ1bmN0aW9uIChmcmFtZSwgYWN0aXZlRWxlbWVudCkgeyByZXR1cm4gZnJhbWUgPT09IGFjdGl2ZUVsZW1lbnQ7IH07XG52YXIgZm9jdXNJbnNpZGVJZnJhbWUgPSBmdW5jdGlvbiAodG9wTm9kZSwgYWN0aXZlRWxlbWVudCkge1xuICAgIHJldHVybiBCb29sZWFuKHRvQXJyYXkodG9wTm9kZS5xdWVyeVNlbGVjdG9yQWxsKCdpZnJhbWUnKSkuc29tZShmdW5jdGlvbiAobm9kZSkgeyByZXR1cm4gZm9jdXNJbkZyYW1lKG5vZGUsIGFjdGl2ZUVsZW1lbnQpOyB9KSk7XG59O1xuLyoqXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZSwgaWYgdGhlIGN1cnJlbnQgZm9jdXMgaXMgaW5zaWRlIGdpdmVuIG5vZGUgb3Igbm9kZXMuXG4gKiBTdXBwb3J0cyBub2RlcyBoaWRkZW4gaW5zaWRlIHNoYWRvd0RvbVxuICovXG5leHBvcnQgdmFyIGZvY3VzSW5zaWRlID0gZnVuY3Rpb24gKHRvcE5vZGUsIGFjdGl2ZUVsZW1lbnQpIHtcbiAgICAvLyBjb25zdCBhY3RpdmVFbGVtZW50ID0gZG9jdW1lbnQgJiYgZ2V0QWN0aXZlRWxlbWVudCgpO1xuICAgIGlmIChhY3RpdmVFbGVtZW50ID09PSB2b2lkIDApIHsgYWN0aXZlRWxlbWVudCA9IGdldEFjdGl2ZUVsZW1lbnQoZ2V0Rmlyc3QodG9wTm9kZSkub3duZXJEb2N1bWVudCk7IH1cbiAgICBpZiAoIWFjdGl2ZUVsZW1lbnQgfHwgKGFjdGl2ZUVsZW1lbnQuZGF0YXNldCAmJiBhY3RpdmVFbGVtZW50LmRhdGFzZXQuZm9jdXNHdWFyZCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gZ2V0QWxsQWZmZWN0ZWROb2Rlcyh0b3BOb2RlKS5zb21lKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgIHJldHVybiBjb250YWlucyhub2RlLCBhY3RpdmVFbGVtZW50KSB8fCBmb2N1c0luc2lkZUlmcmFtZShub2RlLCBhY3RpdmVFbGVtZW50KTtcbiAgICB9KTtcbn07XG4iLCAiaW1wb3J0IHsgRk9DVVNfQUxMT1cgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBjb250YWlucyB9IGZyb20gJy4vdXRpbHMvRE9NdXRpbHMnO1xuaW1wb3J0IHsgdG9BcnJheSB9IGZyb20gJy4vdXRpbHMvYXJyYXknO1xuaW1wb3J0IHsgZ2V0QWN0aXZlRWxlbWVudCB9IGZyb20gJy4vdXRpbHMvZ2V0QWN0aXZlRWxlbWVudCc7XG4vKipcbiAqIGNoZWNrcyBpZiBmb2N1cyBpcyBoaWRkZW4gRlJPTSB0aGUgZm9jdXMtbG9ja1xuICogaWUgY29udGFpbmVkIGluc2lkZSBhIG5vZGUgZm9jdXMtbG9jayBzaGFsbCBpZ25vcmVcbiAqXG4gKiBUaGlzIGlzIGEgdXRpbGl0eSBmdW5jdGlvbiBjb3VwbGVkIHdpdGgge0BsaW5rIEZPQ1VTX0FMTE9XfSBjb25zdGFudFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBmb2N1cyBpcyBjdXJyZW50bHkgaXMgaW4gXCJhbGxvd1wiIGFyZWFcbiAqL1xuZXhwb3J0IHZhciBmb2N1c0lzSGlkZGVuID0gZnVuY3Rpb24gKGluRG9jdW1lbnQpIHtcbiAgICBpZiAoaW5Eb2N1bWVudCA9PT0gdm9pZCAwKSB7IGluRG9jdW1lbnQgPSBkb2N1bWVudDsgfVxuICAgIHZhciBhY3RpdmVFbGVtZW50ID0gZ2V0QWN0aXZlRWxlbWVudChpbkRvY3VtZW50KTtcbiAgICBpZiAoIWFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyB0aGlzIGRvZXMgbm90IHN1cHBvcnQgc2V0dGluZyBGT0NVU19BTExPVyB3aXRoaW4gc2hhZG93IGRvbVxuICAgIHJldHVybiB0b0FycmF5KGluRG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIltcIi5jb25jYXQoRk9DVVNfQUxMT1csIFwiXVwiKSkpLnNvbWUoZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIGNvbnRhaW5zKG5vZGUsIGFjdGl2ZUVsZW1lbnQpOyB9KTtcbn07XG4iLCAiaW1wb3J0IHsgaXNSYWRpb0VsZW1lbnQgfSBmcm9tICcuL2lzJztcbnZhciBmaW5kU2VsZWN0ZWRSYWRpbyA9IGZ1bmN0aW9uIChub2RlLCBub2Rlcykge1xuICAgIHJldHVybiBub2Rlc1xuICAgICAgICAuZmlsdGVyKGlzUmFkaW9FbGVtZW50KVxuICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChlbCkgeyByZXR1cm4gZWwubmFtZSA9PT0gbm9kZS5uYW1lOyB9KVxuICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChlbCkgeyByZXR1cm4gZWwuY2hlY2tlZDsgfSlbMF0gfHwgbm9kZTtcbn07XG5leHBvcnQgdmFyIGNvcnJlY3ROb2RlID0gZnVuY3Rpb24gKG5vZGUsIG5vZGVzKSB7XG4gICAgaWYgKGlzUmFkaW9FbGVtZW50KG5vZGUpICYmIG5vZGUubmFtZSkge1xuICAgICAgICByZXR1cm4gZmluZFNlbGVjdGVkUmFkaW8obm9kZSwgbm9kZXMpO1xuICAgIH1cbiAgICByZXR1cm4gbm9kZTtcbn07XG4vKipcbiAqIGdpdmluZyBhIHNldCBvZiByYWRpbyBpbnB1dHMga2VlcHMgb25seSBzZWxlY3RlZCAodGFiYmFibGUpIG9uZXNcbiAqIEBwYXJhbSBub2Rlc1xuICovXG5leHBvcnQgdmFyIGNvcnJlY3ROb2RlcyA9IGZ1bmN0aW9uIChub2Rlcykge1xuICAgIC8vIElFMTEgaGFzIG5vIFNldChhcnJheSkgY29uc3RydWN0b3JcbiAgICB2YXIgcmVzdWx0U2V0ID0gbmV3IFNldCgpO1xuICAgIG5vZGVzLmZvckVhY2goZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIHJlc3VsdFNldC5hZGQoY29ycmVjdE5vZGUobm9kZSwgbm9kZXMpKTsgfSk7XG4gICAgLy8gdXNpbmcgZmlsdGVyIHRvIHN1cHBvcnQgSUUxMVxuICAgIHJldHVybiBub2Rlcy5maWx0ZXIoZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIHJlc3VsdFNldC5oYXMobm9kZSk7IH0pO1xufTtcbiIsICJpbXBvcnQgeyBjb3JyZWN0Tm9kZSB9IGZyb20gJy4vY29ycmVjdEZvY3VzJztcbmV4cG9ydCB2YXIgcGlja0ZpcnN0Rm9jdXMgPSBmdW5jdGlvbiAobm9kZXMpIHtcbiAgICBpZiAobm9kZXNbMF0gJiYgbm9kZXMubGVuZ3RoID4gMSkge1xuICAgICAgICByZXR1cm4gY29ycmVjdE5vZGUobm9kZXNbMF0sIG5vZGVzKTtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGVzWzBdO1xufTtcbmV4cG9ydCB2YXIgcGlja0ZvY3VzYWJsZSA9IGZ1bmN0aW9uIChub2Rlcywgbm9kZSkge1xuICAgIHJldHVybiBub2Rlcy5pbmRleE9mKGNvcnJlY3ROb2RlKG5vZGUsIG5vZGVzKSk7XG59O1xuIiwgImltcG9ydCB7IGNvcnJlY3ROb2RlcyB9IGZyb20gJy4vdXRpbHMvY29ycmVjdEZvY3VzJztcbmltcG9ydCB7IHBpY2tGb2N1c2FibGUgfSBmcm9tICcuL3V0aWxzL2ZpcnN0Rm9jdXMnO1xuaW1wb3J0IHsgaXNHdWFyZCB9IGZyb20gJy4vdXRpbHMvaXMnO1xuZXhwb3J0IHZhciBORVdfRk9DVVMgPSAnTkVXX0ZPQ1VTJztcbi8qKlxuICogTWFpbiBzb2x2ZXIgZm9yIHRoZSBcImZpbmQgbmV4dCBmb2N1c1wiIHF1ZXN0aW9uXG4gKiBAcGFyYW0gaW5uZXJOb2RlcyAtIHVzZWQgdG8gY29udHJvbCBcInJldHVybiBmb2N1c1wiXG4gKiBAcGFyYW0gaW5uZXJUYWJiYWJsZXMgLSB1c2VkIHRvIGNvbnRyb2wgXCJhdXRvZm9jdXNcIlxuICogQHBhcmFtIG91dGVyTm9kZXNcbiAqIEBwYXJhbSBhY3RpdmVFbGVtZW50XG4gKiBAcGFyYW0gbGFzdE5vZGVcbiAqIEByZXR1cm5zIHtudW1iZXJ8c3RyaW5nfHVuZGVmaW5lZHwqfVxuICovXG5leHBvcnQgdmFyIG5ld0ZvY3VzID0gZnVuY3Rpb24gKGlubmVyTm9kZXMsIGlubmVyVGFiYmFibGVzLCBvdXRlck5vZGVzLCBhY3RpdmVFbGVtZW50LCBsYXN0Tm9kZSkge1xuICAgIHZhciBjbnQgPSBpbm5lck5vZGVzLmxlbmd0aDtcbiAgICB2YXIgZmlyc3RGb2N1cyA9IGlubmVyTm9kZXNbMF07XG4gICAgdmFyIGxhc3RGb2N1cyA9IGlubmVyTm9kZXNbY250IC0gMV07XG4gICAgdmFyIGlzT25HdWFyZCA9IGlzR3VhcmQoYWN0aXZlRWxlbWVudCk7XG4gICAgLy8gZm9jdXMgaXMgaW5zaWRlXG4gICAgaWYgKGFjdGl2ZUVsZW1lbnQgJiYgaW5uZXJOb2Rlcy5pbmRleE9mKGFjdGl2ZUVsZW1lbnQpID49IDApIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdmFyIGFjdGl2ZUluZGV4ID0gYWN0aXZlRWxlbWVudCAhPT0gdW5kZWZpbmVkID8gb3V0ZXJOb2Rlcy5pbmRleE9mKGFjdGl2ZUVsZW1lbnQpIDogLTE7XG4gICAgdmFyIGxhc3RJbmRleCA9IGxhc3ROb2RlID8gb3V0ZXJOb2Rlcy5pbmRleE9mKGxhc3ROb2RlKSA6IGFjdGl2ZUluZGV4O1xuICAgIHZhciBsYXN0Tm9kZUluc2lkZSA9IGxhc3ROb2RlID8gaW5uZXJOb2Rlcy5pbmRleE9mKGxhc3ROb2RlKSA6IC0xO1xuICAgIC8vIG5vIGFjdGl2ZSBmb2N1cyAob3IgZm9jdXMgaXMgb24gdGhlIGJvZHkpXG4gICAgaWYgKGFjdGl2ZUluZGV4ID09PSAtMSkge1xuICAgICAgICAvLyBrbm93biBmYWxsYmFja1xuICAgICAgICBpZiAobGFzdE5vZGVJbnNpZGUgIT09IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gbGFzdE5vZGVJbnNpZGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE5FV19GT0NVUztcbiAgICB9XG4gICAgLy8gbmV3IGZvY3VzLCBub3RoaW5nIHRvIGNhbGN1bGF0ZVxuICAgIGlmIChsYXN0Tm9kZUluc2lkZSA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIE5FV19GT0NVUztcbiAgICB9XG4gICAgdmFyIGluZGV4RGlmZiA9IGFjdGl2ZUluZGV4IC0gbGFzdEluZGV4O1xuICAgIHZhciBmaXJzdE5vZGVJbmRleCA9IG91dGVyTm9kZXMuaW5kZXhPZihmaXJzdEZvY3VzKTtcbiAgICB2YXIgbGFzdE5vZGVJbmRleCA9IG91dGVyTm9kZXMuaW5kZXhPZihsYXN0Rm9jdXMpO1xuICAgIHZhciBjb3JyZWN0ZWROb2RlcyA9IGNvcnJlY3ROb2RlcyhvdXRlck5vZGVzKTtcbiAgICB2YXIgY29ycmVjdGVkSW5kZXggPSBhY3RpdmVFbGVtZW50ICE9PSB1bmRlZmluZWQgPyBjb3JyZWN0ZWROb2Rlcy5pbmRleE9mKGFjdGl2ZUVsZW1lbnQpIDogLTE7XG4gICAgdmFyIGNvcnJlY3RlZEluZGV4RGlmZiA9IGNvcnJlY3RlZEluZGV4IC0gKGxhc3ROb2RlID8gY29ycmVjdGVkTm9kZXMuaW5kZXhPZihsYXN0Tm9kZSkgOiBhY3RpdmVJbmRleCk7XG4gICAgLy8gb2xkIGZvY3VzXG4gICAgaWYgKCFpbmRleERpZmYgJiYgbGFzdE5vZGVJbnNpZGUgPj0gMCkge1xuICAgICAgICByZXR1cm4gbGFzdE5vZGVJbnNpZGU7XG4gICAgfVxuICAgIC8vIG5vIHRhYmJhYmxlIGVsZW1lbnRzLCBhdXRvZm9jdXMgaXMgbm90IHBvc3NpYmxlXG4gICAgaWYgKGlubmVyVGFiYmFibGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAvLyBhbiBlZGdlIGNhc2Ugd2l0aCBubyB0YWJiYWJsZSBlbGVtZW50c1xuICAgICAgICAvLyByZXR1cm4gdGhlIGxhc3QgZm9jdXNhYmxlIG9uZVxuICAgICAgICAvLyB3aXRoIHNvbWUgcHJvYmFiaWxpdHkgdGhpcyB3aWxsIHByZXZlbnQgZm9jdXMgZnJvbSBjeWNsaW5nIGFjcm9zcyB0aGUgbG9jaywgYnV0IHRoZXJlIGlzIG5vIHRhYmJhbGUgZWxlbWVudHMgdG8gY3ljbGUgdG9cbiAgICAgICAgcmV0dXJuIGxhc3ROb2RlSW5zaWRlO1xuICAgIH1cbiAgICB2YXIgcmV0dXJuRmlyc3ROb2RlID0gcGlja0ZvY3VzYWJsZShpbm5lck5vZGVzLCBpbm5lclRhYmJhYmxlc1swXSk7XG4gICAgdmFyIHJldHVybkxhc3ROb2RlID0gcGlja0ZvY3VzYWJsZShpbm5lck5vZGVzLCBpbm5lclRhYmJhYmxlc1tpbm5lclRhYmJhYmxlcy5sZW5ndGggLSAxXSk7XG4gICAgLy8gZmlyc3QgZWxlbWVudFxuICAgIGlmIChhY3RpdmVJbmRleCA8PSBmaXJzdE5vZGVJbmRleCAmJiBpc09uR3VhcmQgJiYgTWF0aC5hYnMoaW5kZXhEaWZmKSA+IDEpIHtcbiAgICAgICAgcmV0dXJuIHJldHVybkxhc3ROb2RlO1xuICAgIH1cbiAgICAvLyBsYXN0IGVsZW1lbnRcbiAgICBpZiAoYWN0aXZlSW5kZXggPj0gbGFzdE5vZGVJbmRleCAmJiBpc09uR3VhcmQgJiYgTWF0aC5hYnMoaW5kZXhEaWZmKSA+IDEpIHtcbiAgICAgICAgcmV0dXJuIHJldHVybkZpcnN0Tm9kZTtcbiAgICB9XG4gICAgLy8ganVtcCBvdXQsIGJ1dCBub3Qgb24gdGhlIGd1YXJkXG4gICAgaWYgKGluZGV4RGlmZiAmJiBNYXRoLmFicyhjb3JyZWN0ZWRJbmRleERpZmYpID4gMSkge1xuICAgICAgICByZXR1cm4gbGFzdE5vZGVJbnNpZGU7XG4gICAgfVxuICAgIC8vIGZvY3VzIGFib3ZlIGxvY2tcbiAgICBpZiAoYWN0aXZlSW5kZXggPD0gZmlyc3ROb2RlSW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHJldHVybkxhc3ROb2RlO1xuICAgIH1cbiAgICAvLyBmb2N1cyBiZWxvdyBsb2NrXG4gICAgaWYgKGFjdGl2ZUluZGV4ID4gbGFzdE5vZGVJbmRleCkge1xuICAgICAgICByZXR1cm4gcmV0dXJuRmlyc3ROb2RlO1xuICAgIH1cbiAgICAvLyBpbmRleCBpcyBpbnNpZGUgdGFiIG9yZGVyLCBidXQgb3V0c2lkZSBMb2NrXG4gICAgaWYgKGluZGV4RGlmZikge1xuICAgICAgICBpZiAoTWF0aC5hYnMoaW5kZXhEaWZmKSA+IDEpIHtcbiAgICAgICAgICAgIHJldHVybiBsYXN0Tm9kZUluc2lkZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKGNudCArIGxhc3ROb2RlSW5zaWRlICsgaW5kZXhEaWZmKSAlIGNudDtcbiAgICB9XG4gICAgLy8gZG8gbm90aGluZ1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG59O1xuIiwgImltcG9ydCB7IGZpbHRlckF1dG9Gb2N1c2FibGUgfSBmcm9tICcuL0RPTXV0aWxzJztcbmltcG9ydCB7IHBpY2tGaXJzdEZvY3VzIH0gZnJvbSAnLi9maXJzdEZvY3VzJztcbmltcG9ydCB7IGdldERhdGFzZXQgfSBmcm9tICcuL2lzJztcbnZhciBmaW5kQXV0b0ZvY3VzZWQgPSBmdW5jdGlvbiAoYXV0b0ZvY3VzYWJsZXMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB2YXIgYXV0b2ZvY3VzID0gKF9hID0gZ2V0RGF0YXNldChub2RlKSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmF1dG9mb2N1cztcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICBub2RlLmF1dG9mb2N1cyB8fFxuICAgICAgICAgICAgLy9cbiAgICAgICAgICAgIChhdXRvZm9jdXMgIT09IHVuZGVmaW5lZCAmJiBhdXRvZm9jdXMgIT09ICdmYWxzZScpIHx8XG4gICAgICAgICAgICAvL1xuICAgICAgICAgICAgYXV0b0ZvY3VzYWJsZXMuaW5kZXhPZihub2RlKSA+PSAwKTtcbiAgICB9O1xufTtcbmV4cG9ydCB2YXIgcGlja0F1dG9mb2N1cyA9IGZ1bmN0aW9uIChub2Rlc0luZGV4ZXMsIG9yZGVyZWROb2RlcywgZ3JvdXBzKSB7XG4gICAgdmFyIG5vZGVzID0gbm9kZXNJbmRleGVzLm1hcChmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgdmFyIG5vZGUgPSBfYS5ub2RlO1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9KTtcbiAgICB2YXIgYXV0b0ZvY3VzYWJsZSA9IGZpbHRlckF1dG9Gb2N1c2FibGUobm9kZXMuZmlsdGVyKGZpbmRBdXRvRm9jdXNlZChncm91cHMpKSk7XG4gICAgaWYgKGF1dG9Gb2N1c2FibGUgJiYgYXV0b0ZvY3VzYWJsZS5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHBpY2tGaXJzdEZvY3VzKGF1dG9Gb2N1c2FibGUpO1xuICAgIH1cbiAgICByZXR1cm4gcGlja0ZpcnN0Rm9jdXMoZmlsdGVyQXV0b0ZvY3VzYWJsZShvcmRlcmVkTm9kZXMpKTtcbn07XG4iLCAiaW1wb3J0IHsgcGFyZW50QXV0b2ZvY3VzYWJsZXMgfSBmcm9tICcuL0RPTXV0aWxzJztcbmltcG9ydCB7IGNvbnRhaW5zIH0gZnJvbSAnLi9ET011dGlscyc7XG5pbXBvcnQgeyBhc0FycmF5IH0gZnJvbSAnLi9hcnJheSc7XG52YXIgZ2V0UGFyZW50cyA9IGZ1bmN0aW9uIChub2RlLCBwYXJlbnRzKSB7XG4gICAgaWYgKHBhcmVudHMgPT09IHZvaWQgMCkgeyBwYXJlbnRzID0gW107IH1cbiAgICBwYXJlbnRzLnB1c2gobm9kZSk7XG4gICAgaWYgKG5vZGUucGFyZW50Tm9kZSkge1xuICAgICAgICBnZXRQYXJlbnRzKG5vZGUucGFyZW50Tm9kZS5ob3N0IHx8IG5vZGUucGFyZW50Tm9kZSwgcGFyZW50cyk7XG4gICAgfVxuICAgIHJldHVybiBwYXJlbnRzO1xufTtcbi8qKlxuICogZmluZHMgYSBwYXJlbnQgZm9yIGJvdGggbm9kZUEgYW5kIG5vZGVCXG4gKiBAcGFyYW0gbm9kZUFcbiAqIEBwYXJhbSBub2RlQlxuICogQHJldHVybnMge2Jvb2xlYW58Kn1cbiAqL1xuZXhwb3J0IHZhciBnZXRDb21tb25QYXJlbnQgPSBmdW5jdGlvbiAobm9kZUEsIG5vZGVCKSB7XG4gICAgdmFyIHBhcmVudHNBID0gZ2V0UGFyZW50cyhub2RlQSk7XG4gICAgdmFyIHBhcmVudHNCID0gZ2V0UGFyZW50cyhub2RlQik7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnByZWZlci1mb3Itb2ZcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmVudHNBLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIHZhciBjdXJyZW50UGFyZW50ID0gcGFyZW50c0FbaV07XG4gICAgICAgIGlmIChwYXJlbnRzQi5pbmRleE9mKGN1cnJlbnRQYXJlbnQpID49IDApIHtcbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50UGFyZW50O1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5leHBvcnQgdmFyIGdldFRvcENvbW1vblBhcmVudCA9IGZ1bmN0aW9uIChiYXNlQWN0aXZlRWxlbWVudCwgbGVmdEVudHJ5LCByaWdodEVudHJpZXMpIHtcbiAgICB2YXIgYWN0aXZlRWxlbWVudHMgPSBhc0FycmF5KGJhc2VBY3RpdmVFbGVtZW50KTtcbiAgICB2YXIgbGVmdEVudHJpZXMgPSBhc0FycmF5KGxlZnRFbnRyeSk7XG4gICAgdmFyIGFjdGl2ZUVsZW1lbnQgPSBhY3RpdmVFbGVtZW50c1swXTtcbiAgICB2YXIgdG9wQ29tbW9uID0gZmFsc2U7XG4gICAgbGVmdEVudHJpZXMuZmlsdGVyKEJvb2xlYW4pLmZvckVhY2goZnVuY3Rpb24gKGVudHJ5KSB7XG4gICAgICAgIHRvcENvbW1vbiA9IGdldENvbW1vblBhcmVudCh0b3BDb21tb24gfHwgZW50cnksIGVudHJ5KSB8fCB0b3BDb21tb247XG4gICAgICAgIHJpZ2h0RW50cmllcy5maWx0ZXIoQm9vbGVhbikuZm9yRWFjaChmdW5jdGlvbiAoc3ViRW50cnkpIHtcbiAgICAgICAgICAgIHZhciBjb21tb24gPSBnZXRDb21tb25QYXJlbnQoYWN0aXZlRWxlbWVudCwgc3ViRW50cnkpO1xuICAgICAgICAgICAgaWYgKGNvbW1vbikge1xuICAgICAgICAgICAgICAgIGlmICghdG9wQ29tbW9uIHx8IGNvbnRhaW5zKGNvbW1vbiwgdG9wQ29tbW9uKSkge1xuICAgICAgICAgICAgICAgICAgICB0b3BDb21tb24gPSBjb21tb247XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0b3BDb21tb24gPSBnZXRDb21tb25QYXJlbnQoY29tbW9uLCB0b3BDb21tb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgLy8gVE9ETzogYWRkIGFzc2VydCBoZXJlP1xuICAgIHJldHVybiB0b3BDb21tb247XG59O1xuLyoqXG4gKiByZXR1cm4gbGlzdCBvZiBub2RlcyB3aGljaCBhcmUgZXhwZWN0ZWQgdG8gYmUgYXV0b2ZvY3VzZWQgaW5zaWRlIGEgZ2l2ZW4gdG9wIG5vZGVzXG4gKiBAcGFyYW0gZW50cmllc1xuICogQHBhcmFtIHZpc2liaWxpdHlDYWNoZVxuICovXG5leHBvcnQgdmFyIGFsbFBhcmVudEF1dG9mb2N1c2FibGVzID0gZnVuY3Rpb24gKGVudHJpZXMsIHZpc2liaWxpdHlDYWNoZSkge1xuICAgIHJldHVybiBlbnRyaWVzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBub2RlKSB7IHJldHVybiBhY2MuY29uY2F0KHBhcmVudEF1dG9mb2N1c2FibGVzKG5vZGUsIHZpc2liaWxpdHlDYWNoZSkpOyB9LCBbXSk7XG59O1xuIiwgImltcG9ydCB7IE5FV19GT0NVUywgbmV3Rm9jdXMgfSBmcm9tICcuL3NvbHZlcic7XG5pbXBvcnQgeyBnZXRGb2N1c2FibGVOb2RlcyB9IGZyb20gJy4vdXRpbHMvRE9NdXRpbHMnO1xuaW1wb3J0IHsgZ2V0QWxsQWZmZWN0ZWROb2RlcyB9IGZyb20gJy4vdXRpbHMvYWxsLWFmZmVjdGVkJztcbmltcG9ydCB7IGFzQXJyYXksIGdldEZpcnN0IH0gZnJvbSAnLi91dGlscy9hcnJheSc7XG5pbXBvcnQgeyBwaWNrQXV0b2ZvY3VzIH0gZnJvbSAnLi91dGlscy9hdXRvLWZvY3VzJztcbmltcG9ydCB7IGdldEFjdGl2ZUVsZW1lbnQgfSBmcm9tICcuL3V0aWxzL2dldEFjdGl2ZUVsZW1lbnQnO1xuaW1wb3J0IHsgaXNEZWZpbmVkLCBpc05vdEFHdWFyZCB9IGZyb20gJy4vdXRpbHMvaXMnO1xuaW1wb3J0IHsgYWxsUGFyZW50QXV0b2ZvY3VzYWJsZXMsIGdldFRvcENvbW1vblBhcmVudCB9IGZyb20gJy4vdXRpbHMvcGFyZW50aW5nJztcbnZhciByZW9yZGVyTm9kZXMgPSBmdW5jdGlvbiAoc3JjTm9kZXMsIGRzdE5vZGVzKSB7XG4gICAgdmFyIHJlbWFwID0gbmV3IE1hcCgpO1xuICAgIC8vIG5vIFNldChkc3ROb2RlcykgZm9yIElFMTEgOihcbiAgICBkc3ROb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uIChlbnRpdHkpIHsgcmV0dXJuIHJlbWFwLnNldChlbnRpdHkubm9kZSwgZW50aXR5KTsgfSk7XG4gICAgLy8gcmVtYXAgdG8gZHN0Tm9kZXNcbiAgICByZXR1cm4gc3JjTm9kZXMubWFwKGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiByZW1hcC5nZXQobm9kZSk7IH0pLmZpbHRlcihpc0RlZmluZWQpO1xufTtcbi8qKlxuICogY29udGFpbnMgdGhlIG1haW4gbG9naWMgb2YgdGhlIGBmb2N1cy1sb2NrYCBwYWNrYWdlLlxuICpcbiAqICEgeW91IHByb2JhYmx5IGRvbnQgbmVlZCB0aGlzIGZ1bmN0aW9uICFcbiAqXG4gKiBnaXZlbiB0b3Agbm9kZShzKSBhbmQgdGhlIGxhc3QgYWN0aXZlIGVsZW1lbnQgcmV0dXJucyB0aGUgZWxlbWVudCB0byBiZSBmb2N1c2VkIG5leHRcbiAqIEByZXR1cm5zIGVsZW1lbnQgd2hpY2ggc2hvdWxkIGJlIGZvY3VzZWQgdG8gbW92ZSBmb2N1cyBpbnNpZGVcbiAqIEBwYXJhbSB0b3BOb2RlXG4gKiBAcGFyYW0gbGFzdE5vZGVcbiAqL1xuZXhwb3J0IHZhciBmb2N1c1NvbHZlciA9IGZ1bmN0aW9uICh0b3BOb2RlLCBsYXN0Tm9kZSkge1xuICAgIHZhciBhY3RpdmVFbGVtZW50ID0gZ2V0QWN0aXZlRWxlbWVudChhc0FycmF5KHRvcE5vZGUpLmxlbmd0aCA+IDAgPyBkb2N1bWVudCA6IGdldEZpcnN0KHRvcE5vZGUpLm93bmVyRG9jdW1lbnQpO1xuICAgIHZhciBlbnRyaWVzID0gZ2V0QWxsQWZmZWN0ZWROb2Rlcyh0b3BOb2RlKS5maWx0ZXIoaXNOb3RBR3VhcmQpO1xuICAgIHZhciBjb21tb25QYXJlbnQgPSBnZXRUb3BDb21tb25QYXJlbnQoYWN0aXZlRWxlbWVudCB8fCB0b3BOb2RlLCB0b3BOb2RlLCBlbnRyaWVzKTtcbiAgICB2YXIgdmlzaWJpbGl0eUNhY2hlID0gbmV3IE1hcCgpO1xuICAgIHZhciBhbnlGb2N1c2FibGUgPSBnZXRGb2N1c2FibGVOb2RlcyhlbnRyaWVzLCB2aXNpYmlsaXR5Q2FjaGUpO1xuICAgIHZhciBpbm5lckVsZW1lbnRzID0gYW55Rm9jdXNhYmxlLmZpbHRlcihmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgdmFyIG5vZGUgPSBfYS5ub2RlO1xuICAgICAgICByZXR1cm4gaXNOb3RBR3VhcmQobm9kZSk7XG4gICAgfSk7XG4gICAgaWYgKCFpbm5lckVsZW1lbnRzWzBdKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHZhciBvdXRlck5vZGVzID0gZ2V0Rm9jdXNhYmxlTm9kZXMoW2NvbW1vblBhcmVudF0sIHZpc2liaWxpdHlDYWNoZSkubWFwKGZ1bmN0aW9uIChfYSkge1xuICAgICAgICB2YXIgbm9kZSA9IF9hLm5vZGU7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH0pO1xuICAgIHZhciBvcmRlcmVkSW5uZXJFbGVtZW50cyA9IHJlb3JkZXJOb2RlcyhvdXRlck5vZGVzLCBpbm5lckVsZW1lbnRzKTtcbiAgICAvLyBjb2xsZWN0IGlubmVyIGZvY3VzYWJsZSBhbmQgc2VwYXJhdGVseSB0YWJiYWJsZXNcbiAgICB2YXIgaW5uZXJGb2N1c2FibGVzID0gb3JkZXJlZElubmVyRWxlbWVudHMubWFwKGZ1bmN0aW9uIChfYSkge1xuICAgICAgICB2YXIgbm9kZSA9IF9hLm5vZGU7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH0pO1xuICAgIHZhciBpbm5lclRhYmJhYmxlID0gb3JkZXJlZElubmVyRWxlbWVudHMuZmlsdGVyKGZ1bmN0aW9uIChfYSkge1xuICAgICAgICB2YXIgdGFiSW5kZXggPSBfYS50YWJJbmRleDtcbiAgICAgICAgcmV0dXJuIHRhYkluZGV4ID49IDA7XG4gICAgfSkubWFwKGZ1bmN0aW9uIChfYSkge1xuICAgICAgICB2YXIgbm9kZSA9IF9hLm5vZGU7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH0pO1xuICAgIHZhciBuZXdJZCA9IG5ld0ZvY3VzKGlubmVyRm9jdXNhYmxlcywgaW5uZXJUYWJiYWJsZSwgb3V0ZXJOb2RlcywgYWN0aXZlRWxlbWVudCwgbGFzdE5vZGUpO1xuICAgIGlmIChuZXdJZCA9PT0gTkVXX0ZPQ1VTKSB7XG4gICAgICAgIHZhciBmb2N1c05vZGUgPSBcbiAgICAgICAgLy8gZmlyc3QgdHJ5IG9ubHkgdGFiYmFibGUsIGFuZCB0aGUgZmFsbGJhY2sgdG8gYWxsIGZvY3VzYWJsZSwgYXMgbG9uZyBhcyBhdCBsZWFzdCBvbmUgZWxlbWVudCBzaG91bGQgYmUgcGlja2VkIGZvciBmb2N1c1xuICAgICAgICBwaWNrQXV0b2ZvY3VzKGFueUZvY3VzYWJsZSwgaW5uZXJUYWJiYWJsZSwgYWxsUGFyZW50QXV0b2ZvY3VzYWJsZXMoZW50cmllcywgdmlzaWJpbGl0eUNhY2hlKSkgfHxcbiAgICAgICAgICAgIHBpY2tBdXRvZm9jdXMoYW55Rm9jdXNhYmxlLCBpbm5lckZvY3VzYWJsZXMsIGFsbFBhcmVudEF1dG9mb2N1c2FibGVzKGVudHJpZXMsIHZpc2liaWxpdHlDYWNoZSkpO1xuICAgICAgICBpZiAoZm9jdXNOb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4geyBub2RlOiBmb2N1c05vZGUgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignZm9jdXMtbG9jazogY2Fubm90IGZpbmQgYW55IG5vZGUgdG8gbW92ZSBmb2N1cyBpbnRvJyk7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChuZXdJZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBuZXdJZDtcbiAgICB9XG4gICAgcmV0dXJuIG9yZGVyZWRJbm5lckVsZW1lbnRzW25ld0lkXTtcbn07XG4iLCAiaW1wb3J0IHsgZ2V0QWxsQWZmZWN0ZWROb2RlcyB9IGZyb20gJy4vdXRpbHMvYWxsLWFmZmVjdGVkJztcbmltcG9ydCB7IGlzR3VhcmQsIGlzTm90QUd1YXJkIH0gZnJvbSAnLi91dGlscy9pcyc7XG5pbXBvcnQgeyBnZXRUb3BDb21tb25QYXJlbnQgfSBmcm9tICcuL3V0aWxzL3BhcmVudGluZyc7XG5pbXBvcnQgeyBvcmRlckJ5VGFiSW5kZXggfSBmcm9tICcuL3V0aWxzL3RhYk9yZGVyJztcbmltcG9ydCB7IGdldEZvY3VzYWJsZXMgfSBmcm9tICcuL3V0aWxzL3RhYlV0aWxzJztcbi8qKlxuICogdHJhdmVyc2VzIGFsbCByZWxhdGVkIG5vZGVzIChpbmNsdWRpbmcgZ3JvdXBzKSByZXR1cm5pbmcgYSBsaXN0IG9mIGFsbCBub2RlcyhvdXRlciBhbmQgaW50ZXJuYWwpIHdpdGggbWV0YSBpbmZvcm1hdGlvblxuICogVGhpcyBpcyBsb3ctbGV2ZWwgQVBJIVxuICogQHJldHVybnMgbGlzdCBvZiBmb2N1c2FibGUgZWxlbWVudHMgaW5zaWRlIGEgZ2l2ZW4gdG9wKCEpIG5vZGUuXG4gKiBAc2VlIHtAbGluayBnZXRGb2N1c2FibGVOb2Rlc30gcHJvdmlkaW5nIGEgc2ltcGxlciBBUElcbiAqL1xuZXhwb3J0IHZhciBleHBhbmRGb2N1c2FibGVOb2RlcyA9IGZ1bmN0aW9uICh0b3BOb2RlKSB7XG4gICAgdmFyIGVudHJpZXMgPSBnZXRBbGxBZmZlY3RlZE5vZGVzKHRvcE5vZGUpLmZpbHRlcihpc05vdEFHdWFyZCk7XG4gICAgdmFyIGNvbW1vblBhcmVudCA9IGdldFRvcENvbW1vblBhcmVudCh0b3BOb2RlLCB0b3BOb2RlLCBlbnRyaWVzKTtcbiAgICB2YXIgb3V0ZXJOb2RlcyA9IG9yZGVyQnlUYWJJbmRleChnZXRGb2N1c2FibGVzKFtjb21tb25QYXJlbnRdLCB0cnVlKSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgdmFyIGlubmVyRWxlbWVudHMgPSBnZXRGb2N1c2FibGVzKGVudHJpZXMsIGZhbHNlKTtcbiAgICByZXR1cm4gb3V0ZXJOb2Rlcy5tYXAoZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgIHZhciBub2RlID0gX2Eubm9kZSwgaW5kZXggPSBfYS5pbmRleDtcbiAgICAgICAgcmV0dXJuICh7XG4gICAgICAgICAgICBub2RlOiBub2RlLFxuICAgICAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICAgICAgbG9ja0l0ZW06IGlubmVyRWxlbWVudHMuaW5kZXhPZihub2RlKSA+PSAwLFxuICAgICAgICAgICAgZ3VhcmQ6IGlzR3VhcmQobm9kZSksXG4gICAgICAgIH0pO1xuICAgIH0pO1xufTtcbiIsICJleHBvcnQgdmFyIGZvY3VzT24gPSBmdW5jdGlvbiAodGFyZ2V0LCBmb2N1c09wdGlvbnMpIHtcbiAgICBpZiAoIXRhcmdldCkge1xuICAgICAgICAvLyBub3QgY2xlYXIgaG93LCBidXQgaXMgcG9zc2libGUgaHR0cHM6Ly9naXRodWIuY29tL3RoZUthc2hleS9mb2N1cy1sb2NrL2lzc3Vlcy81M1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICgnZm9jdXMnIGluIHRhcmdldCkge1xuICAgICAgICB0YXJnZXQuZm9jdXMoZm9jdXNPcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKCdjb250ZW50V2luZG93JyBpbiB0YXJnZXQgJiYgdGFyZ2V0LmNvbnRlbnRXaW5kb3cpIHtcbiAgICAgICAgdGFyZ2V0LmNvbnRlbnRXaW5kb3cuZm9jdXMoKTtcbiAgICB9XG59O1xuIiwgImltcG9ydCB7IGZvY3VzT24gfSBmcm9tICcuL2NvbW1hbmRzJztcbmltcG9ydCB7IGZvY3VzU29sdmVyIH0gZnJvbSAnLi9mb2N1c1NvbHZlcic7XG52YXIgZ3VhcmRDb3VudCA9IDA7XG52YXIgbG9ja0Rpc2FibGVkID0gZmFsc2U7XG4vKipcbiAqIFRoZSBtYWluIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIGZvY3VzLWxvY2sgcGFja2FnZVxuICpcbiAqIENvbnRhaW5zIGZvY3VzIGF0IGEgZ2l2ZW4gbm9kZS5cbiAqIFRoZSBsYXN0IGZvY3VzZWQgZWxlbWVudCB3aWxsIGhlbHAgdG8gZGV0ZXJtaW5lIHdoaWNoIGVsZW1lbnQoZmlyc3Qgb3IgbGFzdCkgc2hvdWxkIGJlIGZvY3VzZWQuXG4gKiBUaGUgZm91bmQgZWxlbWVudCB3aWxsIGJlIGZvY3VzZWQuXG4gKlxuICogVGhpcyBpcyBvbmUgdGltZSBhY3Rpb24gKG1vdmUpLCBub3QgYSBwZXJzaXN0ZW50IGZvY3VzLWxvY2tcbiAqXG4gKiBIVE1MIG1hcmtlcnMgKHNlZSB7QGxpbmsgaW1wb3J0KCcuL2NvbnN0YW50cycpLkZPQ1VTX0FVVE99IGNvbnN0YW50cykgY2FuIGNvbnRyb2wgYXV0b2ZvY3VzXG4gKiBAc2VlIHtAbGluayBmb2N1c1NvbHZlcn0gZm9yIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHkgd2l0aG91dCBhdXRvZm9jdXNcbiAqL1xuZXhwb3J0IHZhciBtb3ZlRm9jdXNJbnNpZGUgPSBmdW5jdGlvbiAodG9wTm9kZSwgbGFzdE5vZGUsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgIHZhciBmb2N1c2FibGUgPSBmb2N1c1NvbHZlcih0b3BOb2RlLCBsYXN0Tm9kZSk7XG4gICAgLy8gZ2xvYmFsIGxvY2FsIHNpZGUgZWZmZWN0IHRvIGNvdW50YWluIHJlY3Vyc2l2ZSBsb2NrIGFjdGl2YXRpb24gYW5kIHJlc29sdmUgZm9jdXMtZmlnaHRpbmdcbiAgICBpZiAobG9ja0Rpc2FibGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGZvY3VzYWJsZSkge1xuICAgICAgICAvKiogK0ZPQ1VTLUZJR0hUSU5HIHByZXZlbnRpb24gKiovXG4gICAgICAgIGlmIChndWFyZENvdW50ID4gMikge1xuICAgICAgICAgICAgLy8gd2UgaGF2ZSByZWN1cnNpdmUgZW50ZXJlZCBiYWNrIHRoZSBsb2NrIGFjdGl2YXRpb25cbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZvY3VzTG9jazogZm9jdXMtZmlnaHRpbmcgZGV0ZWN0ZWQuIE9ubHkgb25lIGZvY3VzIG1hbmFnZW1lbnQgc3lzdGVtIGNvdWxkIGJlIGFjdGl2ZS4gJyArXG4gICAgICAgICAgICAgICAgJ1NlZSBodHRwczovL2dpdGh1Yi5jb20vdGhlS2FzaGV5L2ZvY3VzLWxvY2svI2ZvY3VzLWZpZ2h0aW5nJyk7XG4gICAgICAgICAgICBsb2NrRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbG9ja0Rpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9LCAxKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBndWFyZENvdW50Kys7XG4gICAgICAgIGZvY3VzT24oZm9jdXNhYmxlLm5vZGUsIG9wdGlvbnMuZm9jdXNPcHRpb25zKTtcbiAgICAgICAgZ3VhcmRDb3VudC0tO1xuICAgIH1cbn07XG4iLCAiaW1wb3J0IHsgZ2V0VGFiYmFibGVOb2RlcyB9IGZyb20gJy4vdXRpbHMvRE9NdXRpbHMnO1xuZnVuY3Rpb24gd2Vha1JlZih2YWx1ZSkge1xuICAgIGlmICghdmFsdWUpXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIC8vICM2OCBTYWZhcmkgMTQuMSBkb250IGhhdmUgaXQgeWV0XG4gICAgLy8gRklYTUU6IHJlbW92ZSBpbiAyMDI1XG4gICAgaWYgKHR5cGVvZiBXZWFrUmVmID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gdmFsdWUgfHwgbnVsbDsgfTtcbiAgICB9XG4gICAgdmFyIHcgPSB2YWx1ZSA/IG5ldyBXZWFrUmVmKHZhbHVlKSA6IG51bGw7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuICh3ID09PSBudWxsIHx8IHcgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHcuZGVyZWYoKSkgfHwgbnVsbDsgfTtcbn1cbmV4cG9ydCB2YXIgcmVjb3JkRWxlbWVudExvY2F0aW9uID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHZhciBzdGFjayA9IFtdO1xuICAgIHZhciBjdXJyZW50RWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgd2hpbGUgKGN1cnJlbnRFbGVtZW50ICYmIGN1cnJlbnRFbGVtZW50ICE9PSBkb2N1bWVudC5ib2R5KSB7XG4gICAgICAgIHN0YWNrLnB1c2goe1xuICAgICAgICAgICAgY3VycmVudDogd2Vha1JlZihjdXJyZW50RWxlbWVudCksXG4gICAgICAgICAgICBwYXJlbnQ6IHdlYWtSZWYoY3VycmVudEVsZW1lbnQucGFyZW50RWxlbWVudCksXG4gICAgICAgICAgICBsZWZ0OiB3ZWFrUmVmKGN1cnJlbnRFbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmcpLFxuICAgICAgICAgICAgcmlnaHQ6IHdlYWtSZWYoY3VycmVudEVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nKSxcbiAgICAgICAgfSk7XG4gICAgICAgIGN1cnJlbnRFbGVtZW50ID0gY3VycmVudEVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZWxlbWVudDogd2Vha1JlZihlbGVtZW50KSxcbiAgICAgICAgc3RhY2s6IHN0YWNrLFxuICAgICAgICBvd25lckRvY3VtZW50OiBlbGVtZW50Lm93bmVyRG9jdW1lbnQsXG4gICAgfTtcbn07XG52YXIgcmVzdG9yZUZvY3VzVG8gPSBmdW5jdGlvbiAobG9jYXRpb24pIHtcbiAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lO1xuICAgIGlmICghbG9jYXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdmFyIHN0YWNrID0gbG9jYXRpb24uc3RhY2ssIG93bmVyRG9jdW1lbnQgPSBsb2NhdGlvbi5vd25lckRvY3VtZW50O1xuICAgIHZhciB2aXNpYmlsaXR5Q2FjaGUgPSBuZXcgTWFwKCk7XG4gICAgZm9yICh2YXIgX2kgPSAwLCBzdGFja18xID0gc3RhY2s7IF9pIDwgc3RhY2tfMS5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgdmFyIGxpbmUgPSBzdGFja18xW19pXTtcbiAgICAgICAgdmFyIHBhcmVudF8xID0gKF9hID0gbGluZS5wYXJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKGxpbmUpO1xuICAgICAgICAvLyBpcyBpdCBzdGlsbCBoZXJlP1xuICAgICAgICBpZiAocGFyZW50XzEgJiYgb3duZXJEb2N1bWVudC5jb250YWlucyhwYXJlbnRfMSkpIHtcbiAgICAgICAgICAgIHZhciBsZWZ0ID0gKF9iID0gbGluZS5sZWZ0KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChsaW5lKTtcbiAgICAgICAgICAgIHZhciBzYXZlZEN1cnJlbnQgPSBsaW5lLmN1cnJlbnQoKTtcbiAgICAgICAgICAgIHZhciBjdXJyZW50ID0gcGFyZW50XzEuY29udGFpbnMoc2F2ZWRDdXJyZW50KSA/IHNhdmVkQ3VycmVudCA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHZhciByaWdodCA9IChfYyA9IGxpbmUucmlnaHQpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5jYWxsKGxpbmUpO1xuICAgICAgICAgICAgdmFyIGZvY3VzYWJsZXMgPSBnZXRUYWJiYWJsZU5vZGVzKFtwYXJlbnRfMV0sIHZpc2liaWxpdHlDYWNoZSk7XG4gICAgICAgICAgICB2YXIgYWltID0gXG4gICAgICAgICAgICAvLyB0aGF0IGlzIGVsZW1lbnQgaXRzZWxmXG4gICAgICAgICAgICAoX2UgPSAoX2QgPSBjdXJyZW50ICE9PSBudWxsICYmIGN1cnJlbnQgIT09IHZvaWQgMCA/IGN1cnJlbnQgOiBcbiAgICAgICAgICAgIC8vIG9yIHNvbWV0aGluZyBpbiBpdCdzIHBsYWNlXG4gICAgICAgICAgICBsZWZ0ID09PSBudWxsIHx8IGxlZnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGxlZnQubmV4dEVsZW1lbnRTaWJsaW5nKSAhPT0gbnVsbCAmJiBfZCAhPT0gdm9pZCAwID8gX2QgOiBcbiAgICAgICAgICAgIC8vIG9yIHNvbWVib2R5IHRvIHRoZSByaWdodCwgc3RpbGwgY2xvc2UgZW5vdWdoXG4gICAgICAgICAgICByaWdodCkgIT09IG51bGwgJiYgX2UgIT09IHZvaWQgMCA/IF9lIDogXG4gICAgICAgICAgICAvLyBvciBzb21lYm9keSB0byB0aGUgbGVmdCwgc29tZXRoaW5nP1xuICAgICAgICAgICAgbGVmdDtcbiAgICAgICAgICAgIHdoaWxlIChhaW0pIHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBfZiA9IDAsIGZvY3VzYWJsZXNfMSA9IGZvY3VzYWJsZXM7IF9mIDwgZm9jdXNhYmxlc18xLmxlbmd0aDsgX2YrKykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZm9jdXNhYmxlID0gZm9jdXNhYmxlc18xW19mXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFpbSA9PT0gbnVsbCB8fCBhaW0gPT09IHZvaWQgMCA/IHZvaWQgMCA6IGFpbS5jb250YWlucyhmb2N1c2FibGUubm9kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmb2N1c2FibGUubm9kZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhaW0gPSBhaW0ubmV4dEVsZW1lbnRTaWJsaW5nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZvY3VzYWJsZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgLy8gaWYgcGFyZW50IGNvbnRhaW5zIGEgZm9jdXNhYmxlIC0gbW92ZSB0aGVyZVxuICAgICAgICAgICAgICAgIHJldHVybiBmb2N1c2FibGVzWzBdLm5vZGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gbm90aGluZyBtYXRjaGVkXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG4vKipcbiAqIENhcHR1cmVzIHRoZSBjdXJyZW50IGZvY3VzZWQgZWxlbWVudCB0byByZXN0b3JlIGZvY3VzIGFzIGNsb3NlIGFzIHBvc3NpYmxlIGluIHRoZSBmdXR1cmVcbiAqIEhhbmRsZXMgc2l0dWF0aW9ucyB3aGVyZSB0aGUgZm9jdXNlZCBlbGVtZW50IGlzIHJlbW92ZWQgZnJvbSB0aGUgRE9NIG9yIG5vIGxvbmdlciBmb2N1c2FibGVcbiAqIG1vdmluZyBmb2N1cyB0byB0aGUgY2xvc2VzdCBmb2N1c2FibGUgZWxlbWVudFxuICogQHBhcmFtIHRhcmdldEVsZW1lbnQgLSBlbGVtZW50IHdoZXJlIGZvY3VzIHNob3VsZCBiZSByZXN0b3JlZFxuICogQHJldHVybnMgYSBmdW5jdGlvbiByZXR1cm5pbmcgYSBuZXcgZWxlbWVudCB0byBmb2N1c1xuICovXG5leHBvcnQgdmFyIGNhcHR1cmVGb2N1c1Jlc3RvcmUgPSBmdW5jdGlvbiAodGFyZ2V0RWxlbWVudCkge1xuICAgIHZhciBsb2NhdGlvbiA9IHJlY29yZEVsZW1lbnRMb2NhdGlvbih0YXJnZXRFbGVtZW50KTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gcmVzdG9yZUZvY3VzVG8obG9jYXRpb24pO1xuICAgIH07XG59O1xuIiwgImltcG9ydCB7IGZvY3VzT24gfSBmcm9tICcuL2NvbW1hbmRzJztcbmltcG9ydCB7IGdldFRhYmJhYmxlTm9kZXMsIGNvbnRhaW5zLCBnZXRGb2N1c2FibGVOb2RlcyB9IGZyb20gJy4vdXRpbHMvRE9NdXRpbHMnO1xuaW1wb3J0IHsgYXNBcnJheSB9IGZyb20gJy4vdXRpbHMvYXJyYXknO1xuLyoqXG4gKiBmb3IgYSBnaXZlbiBgZWxlbWVudGAgaW4gYSBnaXZlbiBgc2NvcGVgIHJldHVybnMgZm9jdXNhYmxlIHNpYmxpbmdzXG4gKiBAcGFyYW0gZWxlbWVudCAtIGJhc2UgZWxlbWVudFxuICogQHBhcmFtIHNjb3BlIC0gY29tbW9uIHBhcmVudC4gQ2FuIGJlIGRvY3VtZW50LCBidXQgYmV0dGVyIHRvIG5hcnJvdyBpdCBkb3duIGZvciBwZXJmb3JtYW5jZSByZWFzb25zXG4gKiBAcmV0dXJucyB7cHJldixuZXh0fSAtIHJlZmVyZW5jZXMgdG8gYSBmb2N1c2FibGUgZWxlbWVudCBiZWZvcmUgYW5kIGFmdGVyXG4gKiBAcmV0dXJucyB1bmRlZmluZWQgLSBpZiBvcGVyYXRpb24gaXMgbm90IGFwcGxpY2FibGVcbiAqL1xuZXhwb3J0IHZhciBnZXRSZWxhdGl2ZUZvY3VzYWJsZSA9IGZ1bmN0aW9uIChlbGVtZW50LCBzY29wZSwgdXNlVGFiYmFibGVzKSB7XG4gICAgaWYgKCFlbGVtZW50IHx8ICFzY29wZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdubyBlbGVtZW50IG9yIHNjb3BlIGdpdmVuJyk7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgdmFyIHNoYXJkcyA9IGFzQXJyYXkoc2NvcGUpO1xuICAgIGlmIChzaGFyZHMuZXZlcnkoZnVuY3Rpb24gKHNoYXJkKSB7IHJldHVybiAhY29udGFpbnMoc2hhcmQsIGVsZW1lbnQpOyB9KSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdBY3RpdmUgZWxlbWVudCBpcyBub3QgY29udGFpbmVkIGluIHRoZSBzY29wZScpO1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIHZhciBmb2N1c2FibGVzID0gdXNlVGFiYmFibGVzXG4gICAgICAgID8gZ2V0VGFiYmFibGVOb2RlcyhzaGFyZHMsIG5ldyBNYXAoKSlcbiAgICAgICAgOiBnZXRGb2N1c2FibGVOb2RlcyhzaGFyZHMsIG5ldyBNYXAoKSk7XG4gICAgdmFyIGN1cnJlbnQgPSBmb2N1c2FibGVzLmZpbmRJbmRleChmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgdmFyIG5vZGUgPSBfYS5ub2RlO1xuICAgICAgICByZXR1cm4gbm9kZSA9PT0gZWxlbWVudDtcbiAgICB9KTtcbiAgICBpZiAoY3VycmVudCA9PT0gLTEpIHtcbiAgICAgICAgLy8gYW4gZWRnZSBjYXNlLCB3aGVuIGFuY2hvciBlbGVtZW50IGlzIG5vdCBmb3VuZFxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBwcmV2OiBmb2N1c2FibGVzW2N1cnJlbnQgLSAxXSxcbiAgICAgICAgbmV4dDogZm9jdXNhYmxlc1tjdXJyZW50ICsgMV0sXG4gICAgICAgIGZpcnN0OiBmb2N1c2FibGVzWzBdLFxuICAgICAgICBsYXN0OiBmb2N1c2FibGVzW2ZvY3VzYWJsZXMubGVuZ3RoIC0gMV0sXG4gICAgfTtcbn07XG52YXIgZ2V0Qm91bmRhcnkgPSBmdW5jdGlvbiAoc2hhcmRzLCB1c2VUYWJiYWJsZXMpIHtcbiAgICB2YXIgc2V0ID0gdXNlVGFiYmFibGVzXG4gICAgICAgID8gZ2V0VGFiYmFibGVOb2Rlcyhhc0FycmF5KHNoYXJkcyksIG5ldyBNYXAoKSlcbiAgICAgICAgOiBnZXRGb2N1c2FibGVOb2Rlcyhhc0FycmF5KHNoYXJkcyksIG5ldyBNYXAoKSk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZmlyc3Q6IHNldFswXSxcbiAgICAgICAgbGFzdDogc2V0W3NldC5sZW5ndGggLSAxXSxcbiAgICB9O1xufTtcbnZhciBkZWZhdWx0T3B0aW9ucyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe1xuICAgICAgICBzY29wZTogZG9jdW1lbnQuYm9keSxcbiAgICAgICAgY3ljbGU6IHRydWUsXG4gICAgICAgIG9ubHlUYWJiYWJsZTogdHJ1ZSxcbiAgICB9LCBvcHRpb25zKTtcbn07XG52YXIgbW92ZUZvY3VzID0gZnVuY3Rpb24gKGZyb21FbGVtZW50LCBvcHRpb25zLCBjYikge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgdmFyIG5ld09wdGlvbnMgPSBkZWZhdWx0T3B0aW9ucyhvcHRpb25zKTtcbiAgICB2YXIgc29sdXRpb24gPSBnZXRSZWxhdGl2ZUZvY3VzYWJsZShmcm9tRWxlbWVudCwgbmV3T3B0aW9ucy5zY29wZSwgbmV3T3B0aW9ucy5vbmx5VGFiYmFibGUpO1xuICAgIGlmICghc29sdXRpb24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGFyZ2V0ID0gY2Ioc29sdXRpb24sIG5ld09wdGlvbnMuY3ljbGUpO1xuICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgZm9jdXNPbih0YXJnZXQubm9kZSwgbmV3T3B0aW9ucy5mb2N1c09wdGlvbnMpO1xuICAgIH1cbn07XG4vKipcbiAqIGZvY3VzZXMgbmV4dCBlbGVtZW50IGluIHRoZSB0YWItb3JkZXJcbiAqIEBwYXJhbSBmcm9tRWxlbWVudCAtIGNvbW1vbiBwYXJlbnQgdG8gc2NvcGUgYWN0aXZlIGVsZW1lbnQgc2VhcmNoIG9yIHRhYiBjeWNsZSBvcmRlclxuICogQHBhcmFtIHtGb2N1c05leHRPcHRpb25zfSBbb3B0aW9uc10gLSBmb2N1cyBvcHRpb25zXG4gKi9cbmV4cG9ydCB2YXIgZm9jdXNOZXh0RWxlbWVudCA9IGZ1bmN0aW9uIChmcm9tRWxlbWVudCwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgbW92ZUZvY3VzKGZyb21FbGVtZW50LCBvcHRpb25zLCBmdW5jdGlvbiAoX2EsIGN5Y2xlKSB7XG4gICAgICAgIHZhciBuZXh0ID0gX2EubmV4dCwgZmlyc3QgPSBfYS5maXJzdDtcbiAgICAgICAgcmV0dXJuIG5leHQgfHwgKGN5Y2xlICYmIGZpcnN0KTtcbiAgICB9KTtcbn07XG4vKipcbiAqIGZvY3VzZXMgcHJldiBlbGVtZW50IGluIHRoZSB0YWIgb3JkZXJcbiAqIEBwYXJhbSBmcm9tRWxlbWVudCAtIGNvbW1vbiBwYXJlbnQgdG8gc2NvcGUgYWN0aXZlIGVsZW1lbnQgc2VhcmNoIG9yIHRhYiBjeWNsZSBvcmRlclxuICogQHBhcmFtIHtGb2N1c05leHRPcHRpb25zfSBbb3B0aW9uc10gLSBmb2N1cyBvcHRpb25zXG4gKi9cbmV4cG9ydCB2YXIgZm9jdXNQcmV2RWxlbWVudCA9IGZ1bmN0aW9uIChmcm9tRWxlbWVudCwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgbW92ZUZvY3VzKGZyb21FbGVtZW50LCBvcHRpb25zLCBmdW5jdGlvbiAoX2EsIGN5Y2xlKSB7XG4gICAgICAgIHZhciBwcmV2ID0gX2EucHJldiwgbGFzdCA9IF9hLmxhc3Q7XG4gICAgICAgIHJldHVybiBwcmV2IHx8IChjeWNsZSAmJiBsYXN0KTtcbiAgICB9KTtcbn07XG52YXIgcGlja0JvdW5kYXJ5ID0gZnVuY3Rpb24gKHNjb3BlLCBvcHRpb25zLCB3aGF0KSB7XG4gICAgdmFyIF9hO1xuICAgIHZhciBib3VuZGFyeSA9IGdldEJvdW5kYXJ5KHNjb3BlLCAoX2EgPSBvcHRpb25zLm9ubHlUYWJiYWJsZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdHJ1ZSk7XG4gICAgdmFyIG5vZGUgPSBib3VuZGFyeVt3aGF0XTtcbiAgICBpZiAobm9kZSkge1xuICAgICAgICBmb2N1c09uKG5vZGUubm9kZSwgb3B0aW9ucy5mb2N1c09wdGlvbnMpO1xuICAgIH1cbn07XG4vKipcbiAqIGZvY3VzZXMgZmlyc3QgZWxlbWVudCBpbiB0aGUgdGFiLW9yZGVyXG4gKiBAcGFyYW0ge0ZvY3VzTmV4dE9wdGlvbnN9IG9wdGlvbnMgLSBmb2N1cyBvcHRpb25zXG4gKi9cbmV4cG9ydCB2YXIgZm9jdXNGaXJzdEVsZW1lbnQgPSBmdW5jdGlvbiAoc2NvcGUsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgIHBpY2tCb3VuZGFyeShzY29wZSwgb3B0aW9ucywgJ2ZpcnN0Jyk7XG59O1xuLyoqXG4gKiBmb2N1c2VzIGxhc3QgZWxlbWVudCBpbiB0aGUgdGFiIG9yZGVyXG4gKiBAcGFyYW0ge0ZvY3VzTmV4dE9wdGlvbnN9IG9wdGlvbnMgLSBmb2N1cyBvcHRpb25zXG4gKi9cbmV4cG9ydCB2YXIgZm9jdXNMYXN0RWxlbWVudCA9IGZ1bmN0aW9uIChzY29wZSwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgcGlja0JvdW5kYXJ5KHNjb3BlLCBvcHRpb25zLCAnbGFzdCcpO1xufTtcbiIsICJpbXBvcnQgeyBleHBvcnRTaWRlY2FyIH0gZnJvbSAndXNlLXNpZGVjYXInO1xuaW1wb3J0IEZvY3VzVHJhcCBmcm9tICcuL1RyYXAnO1xuaW1wb3J0IHsgbWVkaXVtU2lkZWNhciB9IGZyb20gJy4vbWVkaXVtJztcbmV4cG9ydCBkZWZhdWx0IGV4cG9ydFNpZGVjYXIobWVkaXVtU2lkZWNhciwgRm9jdXNUcmFwKTsiLCAiaW1wb3J0IHsgX19zcHJlYWRBcnJheSB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgUmVtb3ZlU2Nyb2xsQmFyIH0gZnJvbSAncmVhY3QtcmVtb3ZlLXNjcm9sbC1iYXInO1xuaW1wb3J0IHsgc3R5bGVTaW5nbGV0b24gfSBmcm9tICdyZWFjdC1zdHlsZS1zaW5nbGV0b24nO1xuaW1wb3J0IHsgbm9uUGFzc2l2ZSB9IGZyb20gJy4vYWdncmVzaXZlQ2FwdHVyZSc7XG5pbXBvcnQgeyBoYW5kbGVTY3JvbGwsIGxvY2F0aW9uQ291bGRCZVNjcm9sbGVkIH0gZnJvbSAnLi9oYW5kbGVTY3JvbGwnO1xuZXhwb3J0IHZhciBnZXRUb3VjaFhZID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgcmV0dXJuICdjaGFuZ2VkVG91Y2hlcycgaW4gZXZlbnQgPyBbZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0uY2xpZW50WCwgZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0uY2xpZW50WV0gOiBbMCwgMF07XG59O1xuZXhwb3J0IHZhciBnZXREZWx0YVhZID0gZnVuY3Rpb24gKGV2ZW50KSB7IHJldHVybiBbZXZlbnQuZGVsdGFYLCBldmVudC5kZWx0YVldOyB9O1xudmFyIGV4dHJhY3RSZWYgPSBmdW5jdGlvbiAocmVmKSB7XG4gICAgcmV0dXJuIHJlZiAmJiAnY3VycmVudCcgaW4gcmVmID8gcmVmLmN1cnJlbnQgOiByZWY7XG59O1xudmFyIGRlbHRhQ29tcGFyZSA9IGZ1bmN0aW9uICh4LCB5KSB7IHJldHVybiB4WzBdID09PSB5WzBdICYmIHhbMV0gPT09IHlbMV07IH07XG52YXIgZ2VuZXJhdGVTdHlsZSA9IGZ1bmN0aW9uIChpZCkgeyByZXR1cm4gXCJcXG4gIC5ibG9jay1pbnRlcmFjdGl2aXR5LVwiLmNvbmNhdChpZCwgXCIge3BvaW50ZXItZXZlbnRzOiBub25lO31cXG4gIC5hbGxvdy1pbnRlcmFjdGl2aXR5LVwiKS5jb25jYXQoaWQsIFwiIHtwb2ludGVyLWV2ZW50czogYWxsO31cXG5cIik7IH07XG52YXIgaWRDb3VudGVyID0gMDtcbnZhciBsb2NrU3RhY2sgPSBbXTtcbmV4cG9ydCBmdW5jdGlvbiBSZW1vdmVTY3JvbGxTaWRlQ2FyKHByb3BzKSB7XG4gICAgdmFyIHNob3VsZFByZXZlbnRRdWV1ZSA9IFJlYWN0LnVzZVJlZihbXSk7XG4gICAgdmFyIHRvdWNoU3RhcnRSZWYgPSBSZWFjdC51c2VSZWYoWzAsIDBdKTtcbiAgICB2YXIgYWN0aXZlQXhpcyA9IFJlYWN0LnVzZVJlZigpO1xuICAgIHZhciBpZCA9IFJlYWN0LnVzZVN0YXRlKGlkQ291bnRlcisrKVswXTtcbiAgICB2YXIgU3R5bGUgPSBSZWFjdC51c2VTdGF0ZShzdHlsZVNpbmdsZXRvbilbMF07XG4gICAgdmFyIGxhc3RQcm9wcyA9IFJlYWN0LnVzZVJlZihwcm9wcyk7XG4gICAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGFzdFByb3BzLmN1cnJlbnQgPSBwcm9wcztcbiAgICB9LCBbcHJvcHNdKTtcbiAgICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAocHJvcHMuaW5lcnQpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZChcImJsb2NrLWludGVyYWN0aXZpdHktXCIuY29uY2F0KGlkKSk7XG4gICAgICAgICAgICB2YXIgYWxsb3dfMSA9IF9fc3ByZWFkQXJyYXkoW3Byb3BzLmxvY2tSZWYuY3VycmVudF0sIChwcm9wcy5zaGFyZHMgfHwgW10pLm1hcChleHRyYWN0UmVmKSwgdHJ1ZSkuZmlsdGVyKEJvb2xlYW4pO1xuICAgICAgICAgICAgYWxsb3dfMS5mb3JFYWNoKGZ1bmN0aW9uIChlbCkgeyByZXR1cm4gZWwuY2xhc3NMaXN0LmFkZChcImFsbG93LWludGVyYWN0aXZpdHktXCIuY29uY2F0KGlkKSk7IH0pO1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoXCJibG9jay1pbnRlcmFjdGl2aXR5LVwiLmNvbmNhdChpZCkpO1xuICAgICAgICAgICAgICAgIGFsbG93XzEuZm9yRWFjaChmdW5jdGlvbiAoZWwpIHsgcmV0dXJuIGVsLmNsYXNzTGlzdC5yZW1vdmUoXCJhbGxvdy1pbnRlcmFjdGl2aXR5LVwiLmNvbmNhdChpZCkpOyB9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgIH0sIFtwcm9wcy5pbmVydCwgcHJvcHMubG9ja1JlZi5jdXJyZW50LCBwcm9wcy5zaGFyZHNdKTtcbiAgICB2YXIgc2hvdWxkQ2FuY2VsRXZlbnQgPSBSZWFjdC51c2VDYWxsYmFjayhmdW5jdGlvbiAoZXZlbnQsIHBhcmVudCkge1xuICAgICAgICBpZiAoJ3RvdWNoZXMnIGluIGV2ZW50ICYmIGV2ZW50LnRvdWNoZXMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICByZXR1cm4gIWxhc3RQcm9wcy5jdXJyZW50LmFsbG93UGluY2hab29tO1xuICAgICAgICB9XG4gICAgICAgIHZhciB0b3VjaCA9IGdldFRvdWNoWFkoZXZlbnQpO1xuICAgICAgICB2YXIgdG91Y2hTdGFydCA9IHRvdWNoU3RhcnRSZWYuY3VycmVudDtcbiAgICAgICAgdmFyIGRlbHRhWCA9ICdkZWx0YVgnIGluIGV2ZW50ID8gZXZlbnQuZGVsdGFYIDogdG91Y2hTdGFydFswXSAtIHRvdWNoWzBdO1xuICAgICAgICB2YXIgZGVsdGFZID0gJ2RlbHRhWScgaW4gZXZlbnQgPyBldmVudC5kZWx0YVkgOiB0b3VjaFN0YXJ0WzFdIC0gdG91Y2hbMV07XG4gICAgICAgIHZhciBjdXJyZW50QXhpcztcbiAgICAgICAgdmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldDtcbiAgICAgICAgdmFyIG1vdmVEaXJlY3Rpb24gPSBNYXRoLmFicyhkZWx0YVgpID4gTWF0aC5hYnMoZGVsdGFZKSA/ICdoJyA6ICd2JztcbiAgICAgICAgLy8gYWxsb3cgaG9yaXpvbnRhbCB0b3VjaCBtb3ZlIG9uIFJhbmdlIGlucHV0cy4gVGhleSB3aWxsIG5vdCBjYXVzZSBhbnkgc2Nyb2xsXG4gICAgICAgIGlmICgndG91Y2hlcycgaW4gZXZlbnQgJiYgbW92ZURpcmVjdGlvbiA9PT0gJ2gnICYmIHRhcmdldC50eXBlID09PSAncmFuZ2UnKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNhbkJlU2Nyb2xsZWRJbk1haW5EaXJlY3Rpb24gPSBsb2NhdGlvbkNvdWxkQmVTY3JvbGxlZChtb3ZlRGlyZWN0aW9uLCB0YXJnZXQpO1xuICAgICAgICBpZiAoIWNhbkJlU2Nyb2xsZWRJbk1haW5EaXJlY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjYW5CZVNjcm9sbGVkSW5NYWluRGlyZWN0aW9uKSB7XG4gICAgICAgICAgICBjdXJyZW50QXhpcyA9IG1vdmVEaXJlY3Rpb247XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjdXJyZW50QXhpcyA9IG1vdmVEaXJlY3Rpb24gPT09ICd2JyA/ICdoJyA6ICd2JztcbiAgICAgICAgICAgIGNhbkJlU2Nyb2xsZWRJbk1haW5EaXJlY3Rpb24gPSBsb2NhdGlvbkNvdWxkQmVTY3JvbGxlZChtb3ZlRGlyZWN0aW9uLCB0YXJnZXQpO1xuICAgICAgICAgICAgLy8gb3RoZXIgYXhpcyBtaWdodCBiZSBub3Qgc2Nyb2xsYWJsZVxuICAgICAgICB9XG4gICAgICAgIGlmICghY2FuQmVTY3JvbGxlZEluTWFpbkRpcmVjdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghYWN0aXZlQXhpcy5jdXJyZW50ICYmICdjaGFuZ2VkVG91Y2hlcycgaW4gZXZlbnQgJiYgKGRlbHRhWCB8fCBkZWx0YVkpKSB7XG4gICAgICAgICAgICBhY3RpdmVBeGlzLmN1cnJlbnQgPSBjdXJyZW50QXhpcztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWN1cnJlbnRBeGlzKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY2FuY2VsaW5nQXhpcyA9IGFjdGl2ZUF4aXMuY3VycmVudCB8fCBjdXJyZW50QXhpcztcbiAgICAgICAgcmV0dXJuIGhhbmRsZVNjcm9sbChjYW5jZWxpbmdBeGlzLCBwYXJlbnQsIGV2ZW50LCBjYW5jZWxpbmdBeGlzID09PSAnaCcgPyBkZWx0YVggOiBkZWx0YVksIHRydWUpO1xuICAgIH0sIFtdKTtcbiAgICB2YXIgc2hvdWxkUHJldmVudCA9IFJlYWN0LnVzZUNhbGxiYWNrKGZ1bmN0aW9uIChfZXZlbnQpIHtcbiAgICAgICAgdmFyIGV2ZW50ID0gX2V2ZW50O1xuICAgICAgICBpZiAoIWxvY2tTdGFjay5sZW5ndGggfHwgbG9ja1N0YWNrW2xvY2tTdGFjay5sZW5ndGggLSAxXSAhPT0gU3R5bGUpIHtcbiAgICAgICAgICAgIC8vIG5vdCB0aGUgbGFzdCBhY3RpdmVcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZGVsdGEgPSAnZGVsdGFZJyBpbiBldmVudCA/IGdldERlbHRhWFkoZXZlbnQpIDogZ2V0VG91Y2hYWShldmVudCk7XG4gICAgICAgIHZhciBzb3VyY2VFdmVudCA9IHNob3VsZFByZXZlbnRRdWV1ZS5jdXJyZW50LmZpbHRlcihmdW5jdGlvbiAoZSkgeyByZXR1cm4gZS5uYW1lID09PSBldmVudC50eXBlICYmIChlLnRhcmdldCA9PT0gZXZlbnQudGFyZ2V0IHx8IGV2ZW50LnRhcmdldCA9PT0gZS5zaGFkb3dQYXJlbnQpICYmIGRlbHRhQ29tcGFyZShlLmRlbHRhLCBkZWx0YSk7IH0pWzBdO1xuICAgICAgICAvLyBzZWxmIGV2ZW50LCBhbmQgc2hvdWxkIGJlIGNhbmNlbGVkXG4gICAgICAgIGlmIChzb3VyY2VFdmVudCAmJiBzb3VyY2VFdmVudC5zaG91bGQpIHtcbiAgICAgICAgICAgIGlmIChldmVudC5jYW5jZWxhYmxlKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBvdXRzaWRlIG9yIHNoYXJkIGV2ZW50XG4gICAgICAgIGlmICghc291cmNlRXZlbnQpIHtcbiAgICAgICAgICAgIHZhciBzaGFyZE5vZGVzID0gKGxhc3RQcm9wcy5jdXJyZW50LnNoYXJkcyB8fCBbXSlcbiAgICAgICAgICAgICAgICAubWFwKGV4dHJhY3RSZWYpXG4gICAgICAgICAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIG5vZGUuY29udGFpbnMoZXZlbnQudGFyZ2V0KTsgfSk7XG4gICAgICAgICAgICB2YXIgc2hvdWxkU3RvcCA9IHNoYXJkTm9kZXMubGVuZ3RoID4gMCA/IHNob3VsZENhbmNlbEV2ZW50KGV2ZW50LCBzaGFyZE5vZGVzWzBdKSA6ICFsYXN0UHJvcHMuY3VycmVudC5ub0lzb2xhdGlvbjtcbiAgICAgICAgICAgIGlmIChzaG91bGRTdG9wKSB7XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LmNhbmNlbGFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCBbXSk7XG4gICAgdmFyIHNob3VsZENhbmNlbCA9IFJlYWN0LnVzZUNhbGxiYWNrKGZ1bmN0aW9uIChuYW1lLCBkZWx0YSwgdGFyZ2V0LCBzaG91bGQpIHtcbiAgICAgICAgdmFyIGV2ZW50ID0geyBuYW1lOiBuYW1lLCBkZWx0YTogZGVsdGEsIHRhcmdldDogdGFyZ2V0LCBzaG91bGQ6IHNob3VsZCwgc2hhZG93UGFyZW50OiBnZXRPdXRlcm1vc3RTaGFkb3dQYXJlbnQodGFyZ2V0KSB9O1xuICAgICAgICBzaG91bGRQcmV2ZW50UXVldWUuY3VycmVudC5wdXNoKGV2ZW50KTtcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzaG91bGRQcmV2ZW50UXVldWUuY3VycmVudCA9IHNob3VsZFByZXZlbnRRdWV1ZS5jdXJyZW50LmZpbHRlcihmdW5jdGlvbiAoZSkgeyByZXR1cm4gZSAhPT0gZXZlbnQ7IH0pO1xuICAgICAgICB9LCAxKTtcbiAgICB9LCBbXSk7XG4gICAgdmFyIHNjcm9sbFRvdWNoU3RhcnQgPSBSZWFjdC51c2VDYWxsYmFjayhmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgdG91Y2hTdGFydFJlZi5jdXJyZW50ID0gZ2V0VG91Y2hYWShldmVudCk7XG4gICAgICAgIGFjdGl2ZUF4aXMuY3VycmVudCA9IHVuZGVmaW5lZDtcbiAgICB9LCBbXSk7XG4gICAgdmFyIHNjcm9sbFdoZWVsID0gUmVhY3QudXNlQ2FsbGJhY2soZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHNob3VsZENhbmNlbChldmVudC50eXBlLCBnZXREZWx0YVhZKGV2ZW50KSwgZXZlbnQudGFyZ2V0LCBzaG91bGRDYW5jZWxFdmVudChldmVudCwgcHJvcHMubG9ja1JlZi5jdXJyZW50KSk7XG4gICAgfSwgW10pO1xuICAgIHZhciBzY3JvbGxUb3VjaE1vdmUgPSBSZWFjdC51c2VDYWxsYmFjayhmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgc2hvdWxkQ2FuY2VsKGV2ZW50LnR5cGUsIGdldFRvdWNoWFkoZXZlbnQpLCBldmVudC50YXJnZXQsIHNob3VsZENhbmNlbEV2ZW50KGV2ZW50LCBwcm9wcy5sb2NrUmVmLmN1cnJlbnQpKTtcbiAgICB9LCBbXSk7XG4gICAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbG9ja1N0YWNrLnB1c2goU3R5bGUpO1xuICAgICAgICBwcm9wcy5zZXRDYWxsYmFja3Moe1xuICAgICAgICAgICAgb25TY3JvbGxDYXB0dXJlOiBzY3JvbGxXaGVlbCxcbiAgICAgICAgICAgIG9uV2hlZWxDYXB0dXJlOiBzY3JvbGxXaGVlbCxcbiAgICAgICAgICAgIG9uVG91Y2hNb3ZlQ2FwdHVyZTogc2Nyb2xsVG91Y2hNb3ZlLFxuICAgICAgICB9KTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignd2hlZWwnLCBzaG91bGRQcmV2ZW50LCBub25QYXNzaXZlKTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgc2hvdWxkUHJldmVudCwgbm9uUGFzc2l2ZSk7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBzY3JvbGxUb3VjaFN0YXJ0LCBub25QYXNzaXZlKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxvY2tTdGFjayA9IGxvY2tTdGFjay5maWx0ZXIoZnVuY3Rpb24gKGluc3QpIHsgcmV0dXJuIGluc3QgIT09IFN0eWxlOyB9KTtcbiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3doZWVsJywgc2hvdWxkUHJldmVudCwgbm9uUGFzc2l2ZSk7XG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCBzaG91bGRQcmV2ZW50LCBub25QYXNzaXZlKTtcbiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBzY3JvbGxUb3VjaFN0YXJ0LCBub25QYXNzaXZlKTtcbiAgICAgICAgfTtcbiAgICB9LCBbXSk7XG4gICAgdmFyIHJlbW92ZVNjcm9sbEJhciA9IHByb3BzLnJlbW92ZVNjcm9sbEJhciwgaW5lcnQgPSBwcm9wcy5pbmVydDtcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsXG4gICAgICAgIGluZXJ0ID8gUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZSwgeyBzdHlsZXM6IGdlbmVyYXRlU3R5bGUoaWQpIH0pIDogbnVsbCxcbiAgICAgICAgcmVtb3ZlU2Nyb2xsQmFyID8gUmVhY3QuY3JlYXRlRWxlbWVudChSZW1vdmVTY3JvbGxCYXIsIHsgZ2FwTW9kZTogcHJvcHMuZ2FwTW9kZSB9KSA6IG51bGwpKTtcbn1cbmZ1bmN0aW9uIGdldE91dGVybW9zdFNoYWRvd1BhcmVudChub2RlKSB7XG4gICAgdmFyIHNoYWRvd1BhcmVudCA9IG51bGw7XG4gICAgd2hpbGUgKG5vZGUgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBTaGFkb3dSb290KSB7XG4gICAgICAgICAgICBzaGFkb3dQYXJlbnQgPSBub2RlLmhvc3Q7XG4gICAgICAgICAgICBub2RlID0gbm9kZS5ob3N0O1xuICAgICAgICB9XG4gICAgICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGU7XG4gICAgfVxuICAgIHJldHVybiBzaGFkb3dQYXJlbnQ7XG59XG4iLCAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgc3R5bGVTaW5nbGV0b24gfSBmcm9tICdyZWFjdC1zdHlsZS1zaW5nbGV0b24nO1xuaW1wb3J0IHsgZnVsbFdpZHRoQ2xhc3NOYW1lLCB6ZXJvUmlnaHRDbGFzc05hbWUsIG5vU2Nyb2xsYmFyc0NsYXNzTmFtZSwgcmVtb3ZlZEJhclNpemVWYXJpYWJsZSB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IGdldEdhcFdpZHRoIH0gZnJvbSAnLi91dGlscyc7XG52YXIgU3R5bGUgPSBzdHlsZVNpbmdsZXRvbigpO1xuZXhwb3J0IHZhciBsb2NrQXR0cmlidXRlID0gJ2RhdGEtc2Nyb2xsLWxvY2tlZCc7XG4vLyBpbXBvcnRhbnQgdGlwIC0gb25jZSB3ZSBtZWFzdXJlIHNjcm9sbEJhciB3aWR0aCBhbmQgcmVtb3ZlIHRoZW1cbi8vIHdlIGNvdWxkIG5vdCByZXBlYXQgdGhpcyBvcGVyYXRpb25cbi8vIHRodXMgd2UgYXJlIHVzaW5nIHN0eWxlLXNpbmdsZXRvbiAtIG9ubHkgdGhlIGZpcnN0IFwieWV0IGNvcnJlY3RcIiBzdHlsZSB3aWxsIGJlIGFwcGxpZWQuXG52YXIgZ2V0U3R5bGVzID0gZnVuY3Rpb24gKF9hLCBhbGxvd1JlbGF0aXZlLCBnYXBNb2RlLCBpbXBvcnRhbnQpIHtcbiAgICB2YXIgbGVmdCA9IF9hLmxlZnQsIHRvcCA9IF9hLnRvcCwgcmlnaHQgPSBfYS5yaWdodCwgZ2FwID0gX2EuZ2FwO1xuICAgIGlmIChnYXBNb2RlID09PSB2b2lkIDApIHsgZ2FwTW9kZSA9ICdtYXJnaW4nOyB9XG4gICAgcmV0dXJuIFwiXFxuICAuXCIuY29uY2F0KG5vU2Nyb2xsYmFyc0NsYXNzTmFtZSwgXCIge1xcbiAgIG92ZXJmbG93OiBoaWRkZW4gXCIpLmNvbmNhdChpbXBvcnRhbnQsIFwiO1xcbiAgIHBhZGRpbmctcmlnaHQ6IFwiKS5jb25jYXQoZ2FwLCBcInB4IFwiKS5jb25jYXQoaW1wb3J0YW50LCBcIjtcXG4gIH1cXG4gIGJvZHlbXCIpLmNvbmNhdChsb2NrQXR0cmlidXRlLCBcIl0ge1xcbiAgICBvdmVyZmxvdzogaGlkZGVuIFwiKS5jb25jYXQoaW1wb3J0YW50LCBcIjtcXG4gICAgb3ZlcnNjcm9sbC1iZWhhdmlvcjogY29udGFpbjtcXG4gICAgXCIpLmNvbmNhdChbXG4gICAgICAgIGFsbG93UmVsYXRpdmUgJiYgXCJwb3NpdGlvbjogcmVsYXRpdmUgXCIuY29uY2F0KGltcG9ydGFudCwgXCI7XCIpLFxuICAgICAgICBnYXBNb2RlID09PSAnbWFyZ2luJyAmJlxuICAgICAgICAgICAgXCJcXG4gICAgcGFkZGluZy1sZWZ0OiBcIi5jb25jYXQobGVmdCwgXCJweDtcXG4gICAgcGFkZGluZy10b3A6IFwiKS5jb25jYXQodG9wLCBcInB4O1xcbiAgICBwYWRkaW5nLXJpZ2h0OiBcIikuY29uY2F0KHJpZ2h0LCBcInB4O1xcbiAgICBtYXJnaW4tbGVmdDowO1xcbiAgICBtYXJnaW4tdG9wOjA7XFxuICAgIG1hcmdpbi1yaWdodDogXCIpLmNvbmNhdChnYXAsIFwicHggXCIpLmNvbmNhdChpbXBvcnRhbnQsIFwiO1xcbiAgICBcIiksXG4gICAgICAgIGdhcE1vZGUgPT09ICdwYWRkaW5nJyAmJiBcInBhZGRpbmctcmlnaHQ6IFwiLmNvbmNhdChnYXAsIFwicHggXCIpLmNvbmNhdChpbXBvcnRhbnQsIFwiO1wiKSxcbiAgICBdXG4gICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgLmpvaW4oJycpLCBcIlxcbiAgfVxcbiAgXFxuICAuXCIpLmNvbmNhdCh6ZXJvUmlnaHRDbGFzc05hbWUsIFwiIHtcXG4gICAgcmlnaHQ6IFwiKS5jb25jYXQoZ2FwLCBcInB4IFwiKS5jb25jYXQoaW1wb3J0YW50LCBcIjtcXG4gIH1cXG4gIFxcbiAgLlwiKS5jb25jYXQoZnVsbFdpZHRoQ2xhc3NOYW1lLCBcIiB7XFxuICAgIG1hcmdpbi1yaWdodDogXCIpLmNvbmNhdChnYXAsIFwicHggXCIpLmNvbmNhdChpbXBvcnRhbnQsIFwiO1xcbiAgfVxcbiAgXFxuICAuXCIpLmNvbmNhdCh6ZXJvUmlnaHRDbGFzc05hbWUsIFwiIC5cIikuY29uY2F0KHplcm9SaWdodENsYXNzTmFtZSwgXCIge1xcbiAgICByaWdodDogMCBcIikuY29uY2F0KGltcG9ydGFudCwgXCI7XFxuICB9XFxuICBcXG4gIC5cIikuY29uY2F0KGZ1bGxXaWR0aENsYXNzTmFtZSwgXCIgLlwiKS5jb25jYXQoZnVsbFdpZHRoQ2xhc3NOYW1lLCBcIiB7XFxuICAgIG1hcmdpbi1yaWdodDogMCBcIikuY29uY2F0KGltcG9ydGFudCwgXCI7XFxuICB9XFxuICBcXG4gIGJvZHlbXCIpLmNvbmNhdChsb2NrQXR0cmlidXRlLCBcIl0ge1xcbiAgICBcIikuY29uY2F0KHJlbW92ZWRCYXJTaXplVmFyaWFibGUsIFwiOiBcIikuY29uY2F0KGdhcCwgXCJweDtcXG4gIH1cXG5cIik7XG59O1xudmFyIGdldEN1cnJlbnRVc2VDb3VudGVyID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBjb3VudGVyID0gcGFyc2VJbnQoZG9jdW1lbnQuYm9keS5nZXRBdHRyaWJ1dGUobG9ja0F0dHJpYnV0ZSkgfHwgJzAnLCAxMCk7XG4gICAgcmV0dXJuIGlzRmluaXRlKGNvdW50ZXIpID8gY291bnRlciA6IDA7XG59O1xuZXhwb3J0IHZhciB1c2VMb2NrQXR0cmlidXRlID0gZnVuY3Rpb24gKCkge1xuICAgIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuc2V0QXR0cmlidXRlKGxvY2tBdHRyaWJ1dGUsIChnZXRDdXJyZW50VXNlQ291bnRlcigpICsgMSkudG9TdHJpbmcoKSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgbmV3Q291bnRlciA9IGdldEN1cnJlbnRVc2VDb3VudGVyKCkgLSAxO1xuICAgICAgICAgICAgaWYgKG5ld0NvdW50ZXIgPD0gMCkge1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQXR0cmlidXRlKGxvY2tBdHRyaWJ1dGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5zZXRBdHRyaWJ1dGUobG9ja0F0dHJpYnV0ZSwgbmV3Q291bnRlci50b1N0cmluZygpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9LCBbXSk7XG59O1xuLyoqXG4gKiBSZW1vdmVzIHBhZ2Ugc2Nyb2xsYmFyIGFuZCBibG9ja3MgcGFnZSBzY3JvbGwgd2hlbiBtb3VudGVkXG4gKi9cbmV4cG9ydCB2YXIgUmVtb3ZlU2Nyb2xsQmFyID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIG5vUmVsYXRpdmUgPSBfYS5ub1JlbGF0aXZlLCBub0ltcG9ydGFudCA9IF9hLm5vSW1wb3J0YW50LCBfYiA9IF9hLmdhcE1vZGUsIGdhcE1vZGUgPSBfYiA9PT0gdm9pZCAwID8gJ21hcmdpbicgOiBfYjtcbiAgICB1c2VMb2NrQXR0cmlidXRlKCk7XG4gICAgLypcbiAgICAgZ2FwIHdpbGwgYmUgbWVhc3VyZWQgb24gZXZlcnkgY29tcG9uZW50IG1vdW50XG4gICAgIGhvd2V2ZXIgaXQgd2lsbCBiZSB1c2VkIG9ubHkgYnkgdGhlIFwiZmlyc3RcIiBpbnZvY2F0aW9uXG4gICAgIGR1ZSB0byBzaW5nbGV0b24gbmF0dXJlIG9mIDxTdHlsZVxuICAgICAqL1xuICAgIHZhciBnYXAgPSBSZWFjdC51c2VNZW1vKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdldEdhcFdpZHRoKGdhcE1vZGUpOyB9LCBbZ2FwTW9kZV0pO1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN0eWxlLCB7IHN0eWxlczogZ2V0U3R5bGVzKGdhcCwgIW5vUmVsYXRpdmUsIGdhcE1vZGUsICFub0ltcG9ydGFudCA/ICchaW1wb3J0YW50JyA6ICcnKSB9KTtcbn07XG4iLCAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgc3R5bGVzaGVldFNpbmdsZXRvbiB9IGZyb20gJy4vc2luZ2xldG9uJztcbi8qKlxuICogY3JlYXRlcyBhIGhvb2sgdG8gY29udHJvbCBzdHlsZSBzaW5nbGV0b25cbiAqIEBzZWUge0BsaW5rIHN0eWxlU2luZ2xldG9ufSBmb3IgYSBzYWZlciBjb21wb25lbnQgdmVyc2lvblxuICogQGV4YW1wbGVcbiAqIGBgYHRzeFxuICogY29uc3QgdXNlU3R5bGUgPSBzdHlsZUhvb2tTaW5nbGV0b24oKTtcbiAqIC8vL1xuICogdXNlU3R5bGUoJ2JvZHkgeyBvdmVyZmxvdzogaGlkZGVufScpO1xuICovXG5leHBvcnQgdmFyIHN0eWxlSG9va1NpbmdsZXRvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc2hlZXQgPSBzdHlsZXNoZWV0U2luZ2xldG9uKCk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzdHlsZXMsIGlzRHluYW1pYykge1xuICAgICAgICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2hlZXQuYWRkKHN0eWxlcyk7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHNoZWV0LnJlbW92ZSgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSwgW3N0eWxlcyAmJiBpc0R5bmFtaWNdKTtcbiAgICB9O1xufTtcbiIsICJ2YXIgY3VycmVudE5vbmNlO1xuZXhwb3J0IHZhciBzZXROb25jZSA9IGZ1bmN0aW9uIChub25jZSkge1xuICAgIGN1cnJlbnROb25jZSA9IG5vbmNlO1xufTtcbmV4cG9ydCB2YXIgZ2V0Tm9uY2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGN1cnJlbnROb25jZSkge1xuICAgICAgICByZXR1cm4gY3VycmVudE5vbmNlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIF9fd2VicGFja19ub25jZV9fICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gX193ZWJwYWNrX25vbmNlX187XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59O1xuIiwgImltcG9ydCB7IGdldE5vbmNlIH0gZnJvbSAnZ2V0LW5vbmNlJztcbmZ1bmN0aW9uIG1ha2VTdHlsZVRhZygpIHtcbiAgICBpZiAoIWRvY3VtZW50KVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB2YXIgdGFnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgICB0YWcudHlwZSA9ICd0ZXh0L2Nzcyc7XG4gICAgdmFyIG5vbmNlID0gZ2V0Tm9uY2UoKTtcbiAgICBpZiAobm9uY2UpIHtcbiAgICAgICAgdGFnLnNldEF0dHJpYnV0ZSgnbm9uY2UnLCBub25jZSk7XG4gICAgfVxuICAgIHJldHVybiB0YWc7XG59XG5mdW5jdGlvbiBpbmplY3RTdHlsZXModGFnLCBjc3MpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgaWYgKHRhZy5zdHlsZVNoZWV0KSB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgdGFnLnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzcztcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRhZy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpKTtcbiAgICB9XG59XG5mdW5jdGlvbiBpbnNlcnRTdHlsZVRhZyh0YWcpIHtcbiAgICB2YXIgaGVhZCA9IGRvY3VtZW50LmhlYWQgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXTtcbiAgICBoZWFkLmFwcGVuZENoaWxkKHRhZyk7XG59XG5leHBvcnQgdmFyIHN0eWxlc2hlZXRTaW5nbGV0b24gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGNvdW50ZXIgPSAwO1xuICAgIHZhciBzdHlsZXNoZWV0ID0gbnVsbDtcbiAgICByZXR1cm4ge1xuICAgICAgICBhZGQ6IGZ1bmN0aW9uIChzdHlsZSkge1xuICAgICAgICAgICAgaWYgKGNvdW50ZXIgPT0gMCkge1xuICAgICAgICAgICAgICAgIGlmICgoc3R5bGVzaGVldCA9IG1ha2VTdHlsZVRhZygpKSkge1xuICAgICAgICAgICAgICAgICAgICBpbmplY3RTdHlsZXMoc3R5bGVzaGVldCwgc3R5bGUpO1xuICAgICAgICAgICAgICAgICAgICBpbnNlcnRTdHlsZVRhZyhzdHlsZXNoZWV0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb3VudGVyKys7XG4gICAgICAgIH0sXG4gICAgICAgIHJlbW92ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY291bnRlci0tO1xuICAgICAgICAgICAgaWYgKCFjb3VudGVyICYmIHN0eWxlc2hlZXQpIHtcbiAgICAgICAgICAgICAgICBzdHlsZXNoZWV0LnBhcmVudE5vZGUgJiYgc3R5bGVzaGVldC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHN0eWxlc2hlZXQpO1xuICAgICAgICAgICAgICAgIHN0eWxlc2hlZXQgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgIH07XG59O1xuIiwgImltcG9ydCB7IHN0eWxlSG9va1NpbmdsZXRvbiB9IGZyb20gJy4vaG9vayc7XG4vKipcbiAqIGNyZWF0ZSBhIENvbXBvbmVudCB0byBhZGQgc3R5bGVzIG9uIGRlbWFuZFxuICogLSBzdHlsZXMgYXJlIGFkZGVkIHdoZW4gZmlyc3QgaW5zdGFuY2UgaXMgbW91bnRlZFxuICogLSBzdHlsZXMgYXJlIHJlbW92ZWQgd2hlbiB0aGUgbGFzdCBpbnN0YW5jZSBpcyB1bm1vdW50ZWRcbiAqIC0gY2hhbmdpbmcgc3R5bGVzIGluIHJ1bnRpbWUgZG9lcyBub3RoaW5nIHVubGVzcyBkeW5hbWljIGlzIHNldC4gQnV0IHdpdGggbXVsdGlwbGUgY29tcG9uZW50cyB0aGF0IGNhbiBsZWFkIHRvIHRoZSB1bmRlZmluZWQgYmVoYXZpb3JcbiAqL1xuZXhwb3J0IHZhciBzdHlsZVNpbmdsZXRvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdXNlU3R5bGUgPSBzdHlsZUhvb2tTaW5nbGV0b24oKTtcbiAgICB2YXIgU2hlZXQgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgdmFyIHN0eWxlcyA9IF9hLnN0eWxlcywgZHluYW1pYyA9IF9hLmR5bmFtaWM7XG4gICAgICAgIHVzZVN0eWxlKHN0eWxlcywgZHluYW1pYyk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gICAgcmV0dXJuIFNoZWV0O1xufTtcbiIsICJleHBvcnQgdmFyIHplcm9HYXAgPSB7XG4gICAgbGVmdDogMCxcbiAgICB0b3A6IDAsXG4gICAgcmlnaHQ6IDAsXG4gICAgZ2FwOiAwLFxufTtcbnZhciBwYXJzZSA9IGZ1bmN0aW9uICh4KSB7IHJldHVybiBwYXJzZUludCh4IHx8ICcnLCAxMCkgfHwgMDsgfTtcbnZhciBnZXRPZmZzZXQgPSBmdW5jdGlvbiAoZ2FwTW9kZSkge1xuICAgIHZhciBjcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpO1xuICAgIHZhciBsZWZ0ID0gY3NbZ2FwTW9kZSA9PT0gJ3BhZGRpbmcnID8gJ3BhZGRpbmdMZWZ0JyA6ICdtYXJnaW5MZWZ0J107XG4gICAgdmFyIHRvcCA9IGNzW2dhcE1vZGUgPT09ICdwYWRkaW5nJyA/ICdwYWRkaW5nVG9wJyA6ICdtYXJnaW5Ub3AnXTtcbiAgICB2YXIgcmlnaHQgPSBjc1tnYXBNb2RlID09PSAncGFkZGluZycgPyAncGFkZGluZ1JpZ2h0JyA6ICdtYXJnaW5SaWdodCddO1xuICAgIHJldHVybiBbcGFyc2UobGVmdCksIHBhcnNlKHRvcCksIHBhcnNlKHJpZ2h0KV07XG59O1xuZXhwb3J0IHZhciBnZXRHYXBXaWR0aCA9IGZ1bmN0aW9uIChnYXBNb2RlKSB7XG4gICAgaWYgKGdhcE1vZGUgPT09IHZvaWQgMCkgeyBnYXBNb2RlID0gJ21hcmdpbic7IH1cbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIHplcm9HYXA7XG4gICAgfVxuICAgIHZhciBvZmZzZXRzID0gZ2V0T2Zmc2V0KGdhcE1vZGUpO1xuICAgIHZhciBkb2N1bWVudFdpZHRoID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoO1xuICAgIHZhciB3aW5kb3dXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xuICAgIHJldHVybiB7XG4gICAgICAgIGxlZnQ6IG9mZnNldHNbMF0sXG4gICAgICAgIHRvcDogb2Zmc2V0c1sxXSxcbiAgICAgICAgcmlnaHQ6IG9mZnNldHNbMl0sXG4gICAgICAgIGdhcDogTWF0aC5tYXgoMCwgd2luZG93V2lkdGggLSBkb2N1bWVudFdpZHRoICsgb2Zmc2V0c1syXSAtIG9mZnNldHNbMF0pLFxuICAgIH07XG59O1xuIiwgInZhciBwYXNzaXZlU3VwcG9ydGVkID0gZmFsc2U7XG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICB0cnkge1xuICAgICAgICB2YXIgb3B0aW9ucyA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ3Bhc3NpdmUnLCB7XG4gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBwYXNzaXZlU3VwcG9ydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd0ZXN0Jywgb3B0aW9ucywgb3B0aW9ucyk7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Rlc3QnLCBvcHRpb25zLCBvcHRpb25zKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICBwYXNzaXZlU3VwcG9ydGVkID0gZmFsc2U7XG4gICAgfVxufVxuZXhwb3J0IHZhciBub25QYXNzaXZlID0gcGFzc2l2ZVN1cHBvcnRlZCA/IHsgcGFzc2l2ZTogZmFsc2UgfSA6IGZhbHNlO1xuIiwgInZhciBhbHdheXNDb250YWluc1Njcm9sbCA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgLy8gdGV4dGFyZWEgd2lsbCBhbHdheXMgX2NvbnRhaW5fIHNjcm9sbCBpbnNpZGUgc2VsZi4gSXQgb25seSBjYW4gYmUgaGlkZGVuXG4gICAgcmV0dXJuIG5vZGUudGFnTmFtZSA9PT0gJ1RFWFRBUkVBJztcbn07XG52YXIgZWxlbWVudENhbkJlU2Nyb2xsZWQgPSBmdW5jdGlvbiAobm9kZSwgb3ZlcmZsb3cpIHtcbiAgICB2YXIgc3R5bGVzID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUobm9kZSk7XG4gICAgcmV0dXJuIChcbiAgICAvLyBub3Qtbm90LXNjcm9sbGFibGVcbiAgICBzdHlsZXNbb3ZlcmZsb3ddICE9PSAnaGlkZGVuJyAmJlxuICAgICAgICAvLyBjb250YWlucyBzY3JvbGwgaW5zaWRlIHNlbGZcbiAgICAgICAgIShzdHlsZXMub3ZlcmZsb3dZID09PSBzdHlsZXMub3ZlcmZsb3dYICYmICFhbHdheXNDb250YWluc1Njcm9sbChub2RlKSAmJiBzdHlsZXNbb3ZlcmZsb3ddID09PSAndmlzaWJsZScpKTtcbn07XG52YXIgZWxlbWVudENvdWxkQmVWU2Nyb2xsZWQgPSBmdW5jdGlvbiAobm9kZSkgeyByZXR1cm4gZWxlbWVudENhbkJlU2Nyb2xsZWQobm9kZSwgJ292ZXJmbG93WScpOyB9O1xudmFyIGVsZW1lbnRDb3VsZEJlSFNjcm9sbGVkID0gZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIGVsZW1lbnRDYW5CZVNjcm9sbGVkKG5vZGUsICdvdmVyZmxvd1gnKTsgfTtcbmV4cG9ydCB2YXIgbG9jYXRpb25Db3VsZEJlU2Nyb2xsZWQgPSBmdW5jdGlvbiAoYXhpcywgbm9kZSkge1xuICAgIHZhciBvd25lckRvY3VtZW50ID0gbm9kZS5vd25lckRvY3VtZW50O1xuICAgIHZhciBjdXJyZW50ID0gbm9kZTtcbiAgICBkbyB7XG4gICAgICAgIC8vIFNraXAgb3ZlciBzaGFkb3cgcm9vdFxuICAgICAgICBpZiAodHlwZW9mIFNoYWRvd1Jvb3QgIT09ICd1bmRlZmluZWQnICYmIGN1cnJlbnQgaW5zdGFuY2VvZiBTaGFkb3dSb290KSB7XG4gICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC5ob3N0O1xuICAgICAgICB9XG4gICAgICAgIHZhciBpc1Njcm9sbGFibGUgPSBlbGVtZW50Q291bGRCZVNjcm9sbGVkKGF4aXMsIGN1cnJlbnQpO1xuICAgICAgICBpZiAoaXNTY3JvbGxhYmxlKSB7XG4gICAgICAgICAgICB2YXIgX2EgPSBnZXRTY3JvbGxWYXJpYWJsZXMoYXhpcywgY3VycmVudCksIHMgPSBfYVsxXSwgZCA9IF9hWzJdO1xuICAgICAgICAgICAgaWYgKHMgPiBkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY3VycmVudCA9IGN1cnJlbnQucGFyZW50Tm9kZTtcbiAgICB9IHdoaWxlIChjdXJyZW50ICYmIGN1cnJlbnQgIT09IG93bmVyRG9jdW1lbnQuYm9keSk7XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcbnZhciBnZXRWU2Nyb2xsVmFyaWFibGVzID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIHNjcm9sbFRvcCA9IF9hLnNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0ID0gX2Euc2Nyb2xsSGVpZ2h0LCBjbGllbnRIZWlnaHQgPSBfYS5jbGllbnRIZWlnaHQ7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgc2Nyb2xsVG9wLFxuICAgICAgICBzY3JvbGxIZWlnaHQsXG4gICAgICAgIGNsaWVudEhlaWdodCxcbiAgICBdO1xufTtcbnZhciBnZXRIU2Nyb2xsVmFyaWFibGVzID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIHNjcm9sbExlZnQgPSBfYS5zY3JvbGxMZWZ0LCBzY3JvbGxXaWR0aCA9IF9hLnNjcm9sbFdpZHRoLCBjbGllbnRXaWR0aCA9IF9hLmNsaWVudFdpZHRoO1xuICAgIHJldHVybiBbXG4gICAgICAgIHNjcm9sbExlZnQsXG4gICAgICAgIHNjcm9sbFdpZHRoLFxuICAgICAgICBjbGllbnRXaWR0aCxcbiAgICBdO1xufTtcbnZhciBlbGVtZW50Q291bGRCZVNjcm9sbGVkID0gZnVuY3Rpb24gKGF4aXMsIG5vZGUpIHtcbiAgICByZXR1cm4gYXhpcyA9PT0gJ3YnID8gZWxlbWVudENvdWxkQmVWU2Nyb2xsZWQobm9kZSkgOiBlbGVtZW50Q291bGRCZUhTY3JvbGxlZChub2RlKTtcbn07XG52YXIgZ2V0U2Nyb2xsVmFyaWFibGVzID0gZnVuY3Rpb24gKGF4aXMsIG5vZGUpIHtcbiAgICByZXR1cm4gYXhpcyA9PT0gJ3YnID8gZ2V0VlNjcm9sbFZhcmlhYmxlcyhub2RlKSA6IGdldEhTY3JvbGxWYXJpYWJsZXMobm9kZSk7XG59O1xudmFyIGdldERpcmVjdGlvbkZhY3RvciA9IGZ1bmN0aW9uIChheGlzLCBkaXJlY3Rpb24pIHtcbiAgICAvKipcbiAgICAgKiBJZiB0aGUgZWxlbWVudCdzIGRpcmVjdGlvbiBpcyBydGwgKHJpZ2h0LXRvLWxlZnQpLCB0aGVuIHNjcm9sbExlZnQgaXMgMCB3aGVuIHRoZSBzY3JvbGxiYXIgaXMgYXQgaXRzIHJpZ2h0bW9zdCBwb3NpdGlvbixcbiAgICAgKiBhbmQgdGhlbiBpbmNyZWFzaW5nbHkgbmVnYXRpdmUgYXMgeW91IHNjcm9sbCB0b3dhcmRzIHRoZSBlbmQgb2YgdGhlIGNvbnRlbnQuXG4gICAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudC9zY3JvbGxMZWZ0XG4gICAgICovXG4gICAgcmV0dXJuIGF4aXMgPT09ICdoJyAmJiBkaXJlY3Rpb24gPT09ICdydGwnID8gLTEgOiAxO1xufTtcbmV4cG9ydCB2YXIgaGFuZGxlU2Nyb2xsID0gZnVuY3Rpb24gKGF4aXMsIGVuZFRhcmdldCwgZXZlbnQsIHNvdXJjZURlbHRhLCBub092ZXJzY3JvbGwpIHtcbiAgICB2YXIgZGlyZWN0aW9uRmFjdG9yID0gZ2V0RGlyZWN0aW9uRmFjdG9yKGF4aXMsIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVuZFRhcmdldCkuZGlyZWN0aW9uKTtcbiAgICB2YXIgZGVsdGEgPSBkaXJlY3Rpb25GYWN0b3IgKiBzb3VyY2VEZWx0YTtcbiAgICAvLyBmaW5kIHNjcm9sbGFibGUgdGFyZ2V0XG4gICAgdmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldDtcbiAgICB2YXIgdGFyZ2V0SW5Mb2NrID0gZW5kVGFyZ2V0LmNvbnRhaW5zKHRhcmdldCk7XG4gICAgdmFyIHNob3VsZENhbmNlbFNjcm9sbCA9IGZhbHNlO1xuICAgIHZhciBpc0RlbHRhUG9zaXRpdmUgPSBkZWx0YSA+IDA7XG4gICAgdmFyIGF2YWlsYWJsZVNjcm9sbCA9IDA7XG4gICAgdmFyIGF2YWlsYWJsZVNjcm9sbFRvcCA9IDA7XG4gICAgZG8ge1xuICAgICAgICB2YXIgX2EgPSBnZXRTY3JvbGxWYXJpYWJsZXMoYXhpcywgdGFyZ2V0KSwgcG9zaXRpb24gPSBfYVswXSwgc2Nyb2xsXzEgPSBfYVsxXSwgY2FwYWNpdHkgPSBfYVsyXTtcbiAgICAgICAgdmFyIGVsZW1lbnRTY3JvbGwgPSBzY3JvbGxfMSAtIGNhcGFjaXR5IC0gZGlyZWN0aW9uRmFjdG9yICogcG9zaXRpb247XG4gICAgICAgIGlmIChwb3NpdGlvbiB8fCBlbGVtZW50U2Nyb2xsKSB7XG4gICAgICAgICAgICBpZiAoZWxlbWVudENvdWxkQmVTY3JvbGxlZChheGlzLCB0YXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgYXZhaWxhYmxlU2Nyb2xsICs9IGVsZW1lbnRTY3JvbGw7XG4gICAgICAgICAgICAgICAgYXZhaWxhYmxlU2Nyb2xsVG9wICs9IHBvc2l0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBTaGFkb3dSb290KSB7XG4gICAgICAgICAgICB0YXJnZXQgPSB0YXJnZXQuaG9zdDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldC5wYXJlbnROb2RlO1xuICAgICAgICB9XG4gICAgfSB3aGlsZSAoXG4gICAgLy8gcG9ydGFsZWQgY29udGVudFxuICAgICghdGFyZ2V0SW5Mb2NrICYmIHRhcmdldCAhPT0gZG9jdW1lbnQuYm9keSkgfHxcbiAgICAgICAgLy8gc2VsZiBjb250ZW50XG4gICAgICAgICh0YXJnZXRJbkxvY2sgJiYgKGVuZFRhcmdldC5jb250YWlucyh0YXJnZXQpIHx8IGVuZFRhcmdldCA9PT0gdGFyZ2V0KSkpO1xuICAgIC8vIGhhbmRsZSBlcHNpbG9uIGFyb3VuZCAwIChub24gc3RhbmRhcmQgem9vbSBsZXZlbHMpXG4gICAgaWYgKGlzRGVsdGFQb3NpdGl2ZSAmJlxuICAgICAgICAoKG5vT3ZlcnNjcm9sbCAmJiBNYXRoLmFicyhhdmFpbGFibGVTY3JvbGwpIDwgMSkgfHwgKCFub092ZXJzY3JvbGwgJiYgZGVsdGEgPiBhdmFpbGFibGVTY3JvbGwpKSkge1xuICAgICAgICBzaG91bGRDYW5jZWxTY3JvbGwgPSB0cnVlO1xuICAgIH1cbiAgICBlbHNlIGlmICghaXNEZWx0YVBvc2l0aXZlICYmXG4gICAgICAgICgobm9PdmVyc2Nyb2xsICYmIE1hdGguYWJzKGF2YWlsYWJsZVNjcm9sbFRvcCkgPCAxKSB8fCAoIW5vT3ZlcnNjcm9sbCAmJiAtZGVsdGEgPiBhdmFpbGFibGVTY3JvbGxUb3ApKSkge1xuICAgICAgICBzaG91bGRDYW5jZWxTY3JvbGwgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gc2hvdWxkQ2FuY2VsU2Nyb2xsO1xufTtcbiIsICJpbXBvcnQgeyBleHBvcnRTaWRlY2FyIH0gZnJvbSAndXNlLXNpZGVjYXInO1xuaW1wb3J0IHsgUmVtb3ZlU2Nyb2xsU2lkZUNhciB9IGZyb20gJy4vU2lkZUVmZmVjdCc7XG5pbXBvcnQgeyBlZmZlY3RDYXIgfSBmcm9tICcuL21lZGl1bSc7XG5leHBvcnQgZGVmYXVsdCBleHBvcnRTaWRlY2FyKGVmZmVjdENhciwgUmVtb3ZlU2Nyb2xsU2lkZUNhcik7XG4iLCAiaW1wb3J0IHsgX19zcHJlYWRBcnJheXMgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGhpZGVPdGhlcnMgfSBmcm9tICdhcmlhLWhpZGRlbic7XG5pbXBvcnQgeyBJbnRlcmFjdGl2aXR5RGlzYWJsZXIgfSBmcm9tICcuL0ludGVyYWN0aXZpdHlEaXNhYmxlcic7XG5pbXBvcnQgeyBmb2N1c0hpZGRlbk1hcmtlciB9IGZyb20gJy4vbWVkaXVtJztcbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbnZhciBleHRyYWN0UmVmID0gZnVuY3Rpb24gKHJlZikge1xuICAgIHJldHVybiAnY3VycmVudCcgaW4gcmVmID8gcmVmLmN1cnJlbnQgOiByZWY7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEVmZmVjdChfYSkge1xuICAgIHZhciBzZXRMb2NrUHJvcHMgPSBfYS5zZXRMb2NrUHJvcHMsIG9uRXNjYXBlS2V5ID0gX2Eub25Fc2NhcGVLZXksIG9uQ2xpY2tPdXRzaWRlID0gX2Eub25DbGlja091dHNpZGUsIHNoYXJkcyA9IF9hLnNoYXJkcywgb25BY3RpdmF0aW9uID0gX2Eub25BY3RpdmF0aW9uLCBvbkRlYWN0aXZhdGlvbiA9IF9hLm9uRGVhY3RpdmF0aW9uLCBub0lzb2xhdGlvbiA9IF9hLm5vSXNvbGF0aW9uO1xuICAgIHZhciBfYiA9IHVzZVN0YXRlKHVuZGVmaW5lZCksIGFjdGl2ZU5vZGUgPSBfYlswXSwgc2V0QWN0aXZlTm9kZSA9IF9iWzFdO1xuICAgIHZhciBsYXN0RXZlbnRUYXJnZXQgPSB1c2VSZWYobnVsbCk7XG4gICAgdmFyIG1vdXNlVG91Y2hlcyA9IHVzZVJlZigwKTtcbiAgICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgb25LZXlEb3duID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICBpZiAoIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoKGV2ZW50LmNvZGUgPT09ICdFc2NhcGUnIHx8XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LmtleSA9PT0gJ0VzY2FwZScgfHxcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQua2V5Q29kZSA9PT0gMjcpICYmXG4gICAgICAgICAgICAgICAgICAgIG9uRXNjYXBlS2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIG9uRXNjYXBlS2V5KGV2ZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHZhciBvbk1vdXNlRG93biA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgfHxcbiAgICAgICAgICAgICAgICBldmVudC50YXJnZXQgPT09IGxhc3RFdmVudFRhcmdldC5jdXJyZW50IHx8XG4gICAgICAgICAgICAgICAgKGV2ZW50IGluc3RhbmNlb2YgTW91c2VFdmVudCAmJiBldmVudC5idXR0b24gIT09IDApKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNoYXJkcyAmJlxuICAgICAgICAgICAgICAgIHNoYXJkc1xuICAgICAgICAgICAgICAgICAgICAubWFwKGV4dHJhY3RSZWYpXG4gICAgICAgICAgICAgICAgICAgIC5zb21lKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAobm9kZSAmJiBub2RlLmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlID09PSBldmVudC50YXJnZXQ7XG4gICAgICAgICAgICAgICAgfSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob25DbGlja091dHNpZGUpIHtcbiAgICAgICAgICAgICAgICBvbkNsaWNrT3V0c2lkZShldmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHZhciBvblRvdWNoU3RhcnQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIG9uTW91c2VEb3duKGV2ZW50KTtcbiAgICAgICAgICAgIG1vdXNlVG91Y2hlcy5jdXJyZW50ID0gZXZlbnQudG91Y2hlcy5sZW5ndGg7XG4gICAgICAgIH07XG4gICAgICAgIHZhciBvblRvdWNoRW5kID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICBtb3VzZVRvdWNoZXMuY3VycmVudCA9IGV2ZW50LnRvdWNoZXMubGVuZ3RoO1xuICAgICAgICB9O1xuICAgICAgICBpZiAoYWN0aXZlTm9kZSkge1xuICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIG9uS2V5RG93bik7XG4gICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBvbk1vdXNlRG93bik7XG4gICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0Jywgb25Ub3VjaFN0YXJ0KTtcbiAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgb25Ub3VjaEVuZCk7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBvbktleURvd24pO1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIG9uTW91c2VEb3duKTtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0Jywgb25Ub3VjaFN0YXJ0KTtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIG9uVG91Y2hFbmQpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH0sIFthY3RpdmVOb2RlLCBvbkNsaWNrT3V0c2lkZSwgb25Fc2NhcGVLZXldKTtcbiAgICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoYWN0aXZlTm9kZSkge1xuICAgICAgICAgICAgaWYgKG9uQWN0aXZhdGlvbikge1xuICAgICAgICAgICAgICAgIG9uQWN0aXZhdGlvbihhY3RpdmVOb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9uRGVhY3RpdmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIG9uRGVhY3RpdmF0aW9uKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH0sIFshIWFjdGl2ZU5vZGVdKTtcbiAgICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3VuZG8gPSBmdW5jdGlvbiAoKSB7IHJldHVybiBudWxsOyB9O1xuICAgICAgICB2YXIgdW5tb3VudGVkID0gZmFsc2U7XG4gICAgICAgIHZhciBvbk5vZGVBY3RpdmF0aW9uID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgICAgIGlmICghbm9Jc29sYXRpb24pIHtcbiAgICAgICAgICAgICAgICBfdW5kbyA9IGhpZGVPdGhlcnMoX19zcHJlYWRBcnJheXMoW25vZGVdLCAoc2hhcmRzIHx8IFtdKS5tYXAoZXh0cmFjdFJlZikpLCBkb2N1bWVudC5ib2R5LCBmb2N1c0hpZGRlbk1hcmtlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXRBY3RpdmVOb2RlKGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5vZGU7IH0pO1xuICAgICAgICB9O1xuICAgICAgICB2YXIgb25Ob2RlRGVhY3RpdmF0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3VuZG8oKTtcbiAgICAgICAgICAgIGlmICghdW5tb3VudGVkKSB7XG4gICAgICAgICAgICAgICAgc2V0QWN0aXZlTm9kZShudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgc2V0TG9ja1Byb3BzKHtcbiAgICAgICAgICAgIG9uTW91c2VEb3duOiBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgIGxhc3RFdmVudFRhcmdldC5jdXJyZW50ID0gZS50YXJnZXQ7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25Ub3VjaFN0YXJ0OiBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgIGxhc3RFdmVudFRhcmdldC5jdXJyZW50ID0gZS50YXJnZXQ7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25BY3RpdmF0aW9uOiBvbk5vZGVBY3RpdmF0aW9uLFxuICAgICAgICAgICAgb25EZWFjdGl2YXRpb246IG9uTm9kZURlYWN0aXZhdGlvblxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHVubW91bnRlZCA9IHRydWU7XG4gICAgICAgICAgICBzZXRMb2NrUHJvcHMoZmFsc2UpO1xuICAgICAgICB9O1xuICAgIH0sIFtdKTtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChJbnRlcmFjdGl2aXR5RGlzYWJsZXIsIG51bGwpO1xufVxuIiwgInZhciBnZXREZWZhdWx0UGFyZW50ID0gZnVuY3Rpb24gKG9yaWdpbmFsVGFyZ2V0KSB7XG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHZhciBzYW1wbGVUYXJnZXQgPSBBcnJheS5pc0FycmF5KG9yaWdpbmFsVGFyZ2V0KSA/IG9yaWdpbmFsVGFyZ2V0WzBdIDogb3JpZ2luYWxUYXJnZXQ7XG4gICAgcmV0dXJuIHNhbXBsZVRhcmdldC5vd25lckRvY3VtZW50LmJvZHk7XG59O1xudmFyIGNvdW50ZXJNYXAgPSBuZXcgV2Vha01hcCgpO1xudmFyIHVuY29udHJvbGxlZE5vZGVzID0gbmV3IFdlYWtNYXAoKTtcbnZhciBtYXJrZXJNYXAgPSB7fTtcbnZhciBsb2NrQ291bnQgPSAwO1xudmFyIHVud3JhcEhvc3QgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIHJldHVybiBub2RlICYmIChub2RlLmhvc3QgfHwgdW53cmFwSG9zdChub2RlLnBhcmVudE5vZGUpKTtcbn07XG52YXIgY29ycmVjdFRhcmdldHMgPSBmdW5jdGlvbiAocGFyZW50LCB0YXJnZXRzKSB7XG4gICAgcmV0dXJuIHRhcmdldHNcbiAgICAgICAgLm1hcChmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgICAgIGlmIChwYXJlbnQuY29udGFpbnModGFyZ2V0KSkge1xuICAgICAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY29ycmVjdGVkVGFyZ2V0ID0gdW53cmFwSG9zdCh0YXJnZXQpO1xuICAgICAgICBpZiAoY29ycmVjdGVkVGFyZ2V0ICYmIHBhcmVudC5jb250YWlucyhjb3JyZWN0ZWRUYXJnZXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gY29ycmVjdGVkVGFyZ2V0O1xuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2FyaWEtaGlkZGVuJywgdGFyZ2V0LCAnaW4gbm90IGNvbnRhaW5lZCBpbnNpZGUnLCBwYXJlbnQsICcuIERvaW5nIG5vdGhpbmcnKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSlcbiAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAoeCkgeyByZXR1cm4gQm9vbGVhbih4KTsgfSk7XG59O1xuLyoqXG4gKiBNYXJrcyBldmVyeXRoaW5nIGV4Y2VwdCBnaXZlbiBub2RlKG9yIG5vZGVzKSBhcyBhcmlhLWhpZGRlblxuICogQHBhcmFtIHtFbGVtZW50IHwgRWxlbWVudFtdfSBvcmlnaW5hbFRhcmdldCAtIGVsZW1lbnRzIHRvIGtlZXAgb24gdGhlIHBhZ2VcbiAqIEBwYXJhbSBbcGFyZW50Tm9kZV0gLSB0b3AgZWxlbWVudCwgZGVmYXVsdHMgdG8gZG9jdW1lbnQuYm9keVxuICogQHBhcmFtIHtTdHJpbmd9IFttYXJrZXJOYW1lXSAtIGEgc3BlY2lhbCBhdHRyaWJ1dGUgdG8gbWFyayBldmVyeSBub2RlXG4gKiBAcGFyYW0ge1N0cmluZ30gW2NvbnRyb2xBdHRyaWJ1dGVdIC0gaHRtbCBBdHRyaWJ1dGUgdG8gY29udHJvbFxuICogQHJldHVybiB7VW5kb30gdW5kbyBjb21tYW5kXG4gKi9cbnZhciBhcHBseUF0dHJpYnV0ZVRvT3RoZXJzID0gZnVuY3Rpb24gKG9yaWdpbmFsVGFyZ2V0LCBwYXJlbnROb2RlLCBtYXJrZXJOYW1lLCBjb250cm9sQXR0cmlidXRlKSB7XG4gICAgdmFyIHRhcmdldHMgPSBjb3JyZWN0VGFyZ2V0cyhwYXJlbnROb2RlLCBBcnJheS5pc0FycmF5KG9yaWdpbmFsVGFyZ2V0KSA/IG9yaWdpbmFsVGFyZ2V0IDogW29yaWdpbmFsVGFyZ2V0XSk7XG4gICAgaWYgKCFtYXJrZXJNYXBbbWFya2VyTmFtZV0pIHtcbiAgICAgICAgbWFya2VyTWFwW21hcmtlck5hbWVdID0gbmV3IFdlYWtNYXAoKTtcbiAgICB9XG4gICAgdmFyIG1hcmtlckNvdW50ZXIgPSBtYXJrZXJNYXBbbWFya2VyTmFtZV07XG4gICAgdmFyIGhpZGRlbk5vZGVzID0gW107XG4gICAgdmFyIGVsZW1lbnRzVG9LZWVwID0gbmV3IFNldCgpO1xuICAgIHZhciBlbGVtZW50c1RvU3RvcCA9IG5ldyBTZXQodGFyZ2V0cyk7XG4gICAgdmFyIGtlZXAgPSBmdW5jdGlvbiAoZWwpIHtcbiAgICAgICAgaWYgKCFlbCB8fCBlbGVtZW50c1RvS2VlcC5oYXMoZWwpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZWxlbWVudHNUb0tlZXAuYWRkKGVsKTtcbiAgICAgICAga2VlcChlbC5wYXJlbnROb2RlKTtcbiAgICB9O1xuICAgIHRhcmdldHMuZm9yRWFjaChrZWVwKTtcbiAgICB2YXIgZGVlcCA9IGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICAgICAgaWYgKCFwYXJlbnQgfHwgZWxlbWVudHNUb1N0b3AuaGFzKHBhcmVudCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKHBhcmVudC5jaGlsZHJlbiwgZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgICAgIGlmIChlbGVtZW50c1RvS2VlcC5oYXMobm9kZSkpIHtcbiAgICAgICAgICAgICAgICBkZWVwKG5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGF0dHIgPSBub2RlLmdldEF0dHJpYnV0ZShjb250cm9sQXR0cmlidXRlKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFscmVhZHlIaWRkZW4gPSBhdHRyICE9PSBudWxsICYmIGF0dHIgIT09ICdmYWxzZSc7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjb3VudGVyVmFsdWUgPSAoY291bnRlck1hcC5nZXQobm9kZSkgfHwgMCkgKyAxO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbWFya2VyVmFsdWUgPSAobWFya2VyQ291bnRlci5nZXQobm9kZSkgfHwgMCkgKyAxO1xuICAgICAgICAgICAgICAgICAgICBjb3VudGVyTWFwLnNldChub2RlLCBjb3VudGVyVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb3VudGVyLnNldChub2RlLCBtYXJrZXJWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGhpZGRlbk5vZGVzLnB1c2gobm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb3VudGVyVmFsdWUgPT09IDEgJiYgYWxyZWFkeUhpZGRlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdW5jb250cm9sbGVkTm9kZXMuc2V0KG5vZGUsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXJrZXJWYWx1ZSA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUobWFya2VyTmFtZSwgJ3RydWUnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoIWFscmVhZHlIaWRkZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKGNvbnRyb2xBdHRyaWJ1dGUsICd0cnVlJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignYXJpYS1oaWRkZW46IGNhbm5vdCBvcGVyYXRlIG9uICcsIG5vZGUsIGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBkZWVwKHBhcmVudE5vZGUpO1xuICAgIGVsZW1lbnRzVG9LZWVwLmNsZWFyKCk7XG4gICAgbG9ja0NvdW50Kys7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaGlkZGVuTm9kZXMuZm9yRWFjaChmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICAgICAgdmFyIGNvdW50ZXJWYWx1ZSA9IGNvdW50ZXJNYXAuZ2V0KG5vZGUpIC0gMTtcbiAgICAgICAgICAgIHZhciBtYXJrZXJWYWx1ZSA9IG1hcmtlckNvdW50ZXIuZ2V0KG5vZGUpIC0gMTtcbiAgICAgICAgICAgIGNvdW50ZXJNYXAuc2V0KG5vZGUsIGNvdW50ZXJWYWx1ZSk7XG4gICAgICAgICAgICBtYXJrZXJDb3VudGVyLnNldChub2RlLCBtYXJrZXJWYWx1ZSk7XG4gICAgICAgICAgICBpZiAoIWNvdW50ZXJWYWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmICghdW5jb250cm9sbGVkTm9kZXMuaGFzKG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKGNvbnRyb2xBdHRyaWJ1dGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB1bmNvbnRyb2xsZWROb2Rlcy5kZWxldGUobm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIW1hcmtlclZhbHVlKSB7XG4gICAgICAgICAgICAgICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUobWFya2VyTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBsb2NrQ291bnQtLTtcbiAgICAgICAgaWYgKCFsb2NrQ291bnQpIHtcbiAgICAgICAgICAgIC8vIGNsZWFyXG4gICAgICAgICAgICBjb3VudGVyTWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICAgICAgICAgIGNvdW50ZXJNYXAgPSBuZXcgV2Vha01hcCgpO1xuICAgICAgICAgICAgdW5jb250cm9sbGVkTm9kZXMgPSBuZXcgV2Vha01hcCgpO1xuICAgICAgICAgICAgbWFya2VyTWFwID0ge307XG4gICAgICAgIH1cbiAgICB9O1xufTtcbi8qKlxuICogTWFya3MgZXZlcnl0aGluZyBleGNlcHQgZ2l2ZW4gbm9kZShvciBub2RlcykgYXMgYXJpYS1oaWRkZW5cbiAqIEBwYXJhbSB7RWxlbWVudCB8IEVsZW1lbnRbXX0gb3JpZ2luYWxUYXJnZXQgLSBlbGVtZW50cyB0byBrZWVwIG9uIHRoZSBwYWdlXG4gKiBAcGFyYW0gW3BhcmVudE5vZGVdIC0gdG9wIGVsZW1lbnQsIGRlZmF1bHRzIHRvIGRvY3VtZW50LmJvZHlcbiAqIEBwYXJhbSB7U3RyaW5nfSBbbWFya2VyTmFtZV0gLSBhIHNwZWNpYWwgYXR0cmlidXRlIHRvIG1hcmsgZXZlcnkgbm9kZVxuICogQHJldHVybiB7VW5kb30gdW5kbyBjb21tYW5kXG4gKi9cbmV4cG9ydCB2YXIgaGlkZU90aGVycyA9IGZ1bmN0aW9uIChvcmlnaW5hbFRhcmdldCwgcGFyZW50Tm9kZSwgbWFya2VyTmFtZSkge1xuICAgIGlmIChtYXJrZXJOYW1lID09PSB2b2lkIDApIHsgbWFya2VyTmFtZSA9ICdkYXRhLWFyaWEtaGlkZGVuJzsgfVxuICAgIHZhciB0YXJnZXRzID0gQXJyYXkuZnJvbShBcnJheS5pc0FycmF5KG9yaWdpbmFsVGFyZ2V0KSA/IG9yaWdpbmFsVGFyZ2V0IDogW29yaWdpbmFsVGFyZ2V0XSk7XG4gICAgdmFyIGFjdGl2ZVBhcmVudE5vZGUgPSBwYXJlbnROb2RlIHx8IGdldERlZmF1bHRQYXJlbnQob3JpZ2luYWxUYXJnZXQpO1xuICAgIGlmICghYWN0aXZlUGFyZW50Tm9kZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gbnVsbDsgfTtcbiAgICB9XG4gICAgLy8gd2Ugc2hvdWxkIG5vdCBoaWRlIGFyaWFMaXZlIGVsZW1lbnRzIC0gaHR0cHM6Ly9naXRodWIuY29tL3RoZUthc2hleS9hcmlhLWhpZGRlbi9pc3N1ZXMvMTBcbiAgICB0YXJnZXRzLnB1c2guYXBwbHkodGFyZ2V0cywgQXJyYXkuZnJvbShhY3RpdmVQYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoJ1thcmlhLWxpdmVdJykpKTtcbiAgICByZXR1cm4gYXBwbHlBdHRyaWJ1dGVUb090aGVycyh0YXJnZXRzLCBhY3RpdmVQYXJlbnROb2RlLCBtYXJrZXJOYW1lLCAnYXJpYS1oaWRkZW4nKTtcbn07XG4vKipcbiAqIE1hcmtzIGV2ZXJ5dGhpbmcgZXhjZXB0IGdpdmVuIG5vZGUob3Igbm9kZXMpIGFzIGluZXJ0XG4gKiBAcGFyYW0ge0VsZW1lbnQgfCBFbGVtZW50W119IG9yaWdpbmFsVGFyZ2V0IC0gZWxlbWVudHMgdG8ga2VlcCBvbiB0aGUgcGFnZVxuICogQHBhcmFtIFtwYXJlbnROb2RlXSAtIHRvcCBlbGVtZW50LCBkZWZhdWx0cyB0byBkb2N1bWVudC5ib2R5XG4gKiBAcGFyYW0ge1N0cmluZ30gW21hcmtlck5hbWVdIC0gYSBzcGVjaWFsIGF0dHJpYnV0ZSB0byBtYXJrIGV2ZXJ5IG5vZGVcbiAqIEByZXR1cm4ge1VuZG99IHVuZG8gY29tbWFuZFxuICovXG5leHBvcnQgdmFyIGluZXJ0T3RoZXJzID0gZnVuY3Rpb24gKG9yaWdpbmFsVGFyZ2V0LCBwYXJlbnROb2RlLCBtYXJrZXJOYW1lKSB7XG4gICAgaWYgKG1hcmtlck5hbWUgPT09IHZvaWQgMCkgeyBtYXJrZXJOYW1lID0gJ2RhdGEtaW5lcnQtZWQnOyB9XG4gICAgdmFyIGFjdGl2ZVBhcmVudE5vZGUgPSBwYXJlbnROb2RlIHx8IGdldERlZmF1bHRQYXJlbnQob3JpZ2luYWxUYXJnZXQpO1xuICAgIGlmICghYWN0aXZlUGFyZW50Tm9kZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gbnVsbDsgfTtcbiAgICB9XG4gICAgcmV0dXJuIGFwcGx5QXR0cmlidXRlVG9PdGhlcnMob3JpZ2luYWxUYXJnZXQsIGFjdGl2ZVBhcmVudE5vZGUsIG1hcmtlck5hbWUsICdpbmVydCcpO1xufTtcbi8qKlxuICogQHJldHVybnMgaWYgY3VycmVudCBicm93c2VyIHN1cHBvcnRzIGluZXJ0XG4gKi9cbmV4cG9ydCB2YXIgc3VwcG9ydHNJbmVydCA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdHlwZW9mIEhUTUxFbGVtZW50ICE9PSAndW5kZWZpbmVkJyAmJiBIVE1MRWxlbWVudC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkoJ2luZXJ0Jyk7XG59O1xuLyoqXG4gKiBBdXRvbWF0aWMgZnVuY3Rpb24gdG8gXCJzdXBwcmVzc1wiIERPTSBlbGVtZW50cyAtIF9oaWRlXyBvciBfaW5lcnRfIGluIHRoZSBiZXN0IHBvc3NpYmxlIHdheVxuICogQHBhcmFtIHtFbGVtZW50IHwgRWxlbWVudFtdfSBvcmlnaW5hbFRhcmdldCAtIGVsZW1lbnRzIHRvIGtlZXAgb24gdGhlIHBhZ2VcbiAqIEBwYXJhbSBbcGFyZW50Tm9kZV0gLSB0b3AgZWxlbWVudCwgZGVmYXVsdHMgdG8gZG9jdW1lbnQuYm9keVxuICogQHBhcmFtIHtTdHJpbmd9IFttYXJrZXJOYW1lXSAtIGEgc3BlY2lhbCBhdHRyaWJ1dGUgdG8gbWFyayBldmVyeSBub2RlXG4gKiBAcmV0dXJuIHtVbmRvfSB1bmRvIGNvbW1hbmRcbiAqL1xuZXhwb3J0IHZhciBzdXBwcmVzc090aGVycyA9IGZ1bmN0aW9uIChvcmlnaW5hbFRhcmdldCwgcGFyZW50Tm9kZSwgbWFya2VyTmFtZSkge1xuICAgIGlmIChtYXJrZXJOYW1lID09PSB2b2lkIDApIHsgbWFya2VyTmFtZSA9ICdkYXRhLXN1cHByZXNzZWQnOyB9XG4gICAgcmV0dXJuIChzdXBwb3J0c0luZXJ0KCkgPyBpbmVydE90aGVycyA6IGhpZGVPdGhlcnMpKG9yaWdpbmFsVGFyZ2V0LCBwYXJlbnROb2RlLCBtYXJrZXJOYW1lKTtcbn07XG4iLCAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgc3R5bGVTaW5nbGV0b24gfSBmcm9tICdyZWFjdC1zdHlsZS1zaW5nbGV0b24nO1xuaW1wb3J0IHsgZm9jdXNIaWRkZW5NYXJrZXIgfSBmcm9tICcuL21lZGl1bSc7XG52YXIgU3R5bGUgPSBzdHlsZVNpbmdsZXRvbigpO1xudmFyIHN0eWxlcyA9IFwiXFxuIFtcIiArIGZvY3VzSGlkZGVuTWFya2VyICsgXCJdIHtcXG4gICBwb2ludGVyLWV2ZW50czogbm9uZSAhaW1wb3J0YW50O1xcbiB9XFxuXCI7XG5leHBvcnQgdmFyIEludGVyYWN0aXZpdHlEaXNhYmxlciA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGUsIHsgc3R5bGVzOiBzdHlsZXMgfSk7IH07XG4iLCAiaW1wb3J0IHsgZXhwb3J0U2lkZWNhciB9IGZyb20gJ3VzZS1zaWRlY2FyJztcbmltcG9ydCAncmVhY3QtZm9jdXMtbG9jay9zaWRlY2FyJztcbmltcG9ydCAncmVhY3QtcmVtb3ZlLXNjcm9sbC9zaWRlY2FyJztcbmltcG9ydCB7IEVmZmVjdCB9IGZyb20gJy4vRWZmZWN0JztcbmltcG9ydCB7IGVmZmVjdENhciB9IGZyb20gJy4vbWVkaXVtJztcbmV4cG9ydCBkZWZhdWx0IGV4cG9ydFNpZGVjYXIoZWZmZWN0Q2FyLCBFZmZlY3QpO1xuIiwgImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuaW1wb3J0IHsgY3NzIGFzIF9jc3MgfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBfZXhjbHVkZWQgPSBbXCJhbmNob3JDbGFzc05hbWVcIiwgXCJhbmNob3JQb3NpdGlvblwiLCBcImJ1dHRvblwiLCBcImJ1dHRvblJlZlwiLCBcImluc2VydFwiLCBcImlzT3BlblwiLCBcIm93bkZvY3VzXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJjbG9zZVBvcG92ZXJcIiwgXCJwYW5lbENsYXNzTmFtZVwiLCBcInBhbmVsUGFkZGluZ1NpemVcIiwgXCJwYW5lbFByb3BzXCIsIFwicGFuZWxSZWZcIiwgXCJwYW5lbFN0eWxlXCIsIFwicG9wb3ZlclNjcmVlblJlYWRlclRleHRcIiwgXCJwb3BvdmVyUmVmXCIsIFwiaGFzQXJyb3dcIiwgXCJhcnJvd0NoaWxkcmVuXCIsIFwicmVwb3NpdGlvbk9uU2Nyb2xsXCIsIFwiekluZGV4XCIsIFwiYXR0YWNoVG9BbmNob3JcIiwgXCJkaXNwbGF5XCIsIFwib2Zmc2V0XCIsIFwib25UcmFwRGVhY3RpdmF0aW9uXCIsIFwiYnVmZmVyXCIsIFwiYXJpYS1sYWJlbFwiLCBcImFyaWEtbGFiZWxsZWRieVwiLCBcImNvbnRhaW5lclwiLCBcImZvY3VzVHJhcFByb3BzXCIsIFwiaW5pdGlhbEZvY3VzXCIsIFwidGFiSW5kZXhcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikgeyByZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF9ub25JdGVyYWJsZVNwcmVhZCgpOyB9XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7IGlmICh0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGl0ZXJbU3ltYm9sLml0ZXJhdG9yXSAhPSBudWxsIHx8IGl0ZXJbXCJAQGl0ZXJhdG9yXCJdICE9IG51bGwpIHJldHVybiBBcnJheS5mcm9tKGl0ZXIpOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KGFycik7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5cbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHsgdmFyIF9pID0gYXJyID09IG51bGwgPyBudWxsIDogdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBhcnJbU3ltYm9sLml0ZXJhdG9yXSB8fCBhcnJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAoX2kgPT0gbnVsbCkgcmV0dXJuOyB2YXIgX2FyciA9IFtdOyB2YXIgX24gPSB0cnVlOyB2YXIgX2QgPSBmYWxzZTsgdmFyIF9zLCBfZTsgdHJ5IHsgZm9yIChfaSA9IF9pLmNhbGwoYXJyKTsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkgeyBfYXJyLnB1c2goX3MudmFsdWUpOyBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7IH0gfSBjYXRjaCAoZXJyKSB7IF9kID0gdHJ1ZTsgX2UgPSBlcnI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTsgfSBmaW5hbGx5IHsgaWYgKF9kKSB0aHJvdyBfZTsgfSB9IHJldHVybiBfYXJyOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgZm9jdXNhYmxlIH0gZnJvbSAndGFiYmFibGUnO1xuaW1wb3J0IHsgRXVpRm9jdXNUcmFwIH0gZnJvbSAnLi4vZm9jdXNfdHJhcCc7XG5pbXBvcnQgeyBjYXNjYWRpbmdNZW51S2V5cywgZ2V0VHJhbnNpdGlvblRpbWluZ3MsIGdldFdhaXREdXJhdGlvbiwgcGVyZm9ybU9uRnJhbWUsIGh0bWxJZEdlbmVyYXRvciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aVNjcmVlblJlYWRlck9ubHkgfSBmcm9tICcuLi9hY2Nlc3NpYmlsaXR5JztcbmltcG9ydCB7IEV1aVBvcnRhbCB9IGZyb20gJy4uL3BvcnRhbCc7XG5pbXBvcnQgeyBFdWlNdXRhdGlvbk9ic2VydmVyIH0gZnJvbSAnLi4vb2JzZXJ2ZXIvbXV0YXRpb25fb2JzZXJ2ZXInO1xuaW1wb3J0IHsgZmluZFBvcG92ZXJQb3NpdGlvbiwgZ2V0RWxlbWVudFpJbmRleCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3BvcG92ZXInO1xuaW1wb3J0IHsgRXVpSTE4biB9IGZyb20gJy4uL2kxOG4nO1xuaW1wb3J0IHsgRXVpT3V0c2lkZUNsaWNrRGV0ZWN0b3IgfSBmcm9tICcuLi9vdXRzaWRlX2NsaWNrX2RldGVjdG9yJztcbmltcG9ydCB7IEV1aVBvcG92ZXJBcnJvdyB9IGZyb20gJy4vcG9wb3Zlcl9hcnJvdyc7XG5pbXBvcnQgeyBldWlQb3BvdmVyU3R5bGVzIH0gZnJvbSAnLi9wb3BvdmVyLnN0eWxlcyc7XG5pbXBvcnQgeyBFdWlQb3BvdmVyUGFuZWwgfSBmcm9tICcuL3BvcG92ZXJfcGFuZWwnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgcG9wb3ZlckFuY2hvclBvc2l0aW9uID0gWyd1cENlbnRlcicsICd1cExlZnQnLCAndXBSaWdodCcsICdkb3duQ2VudGVyJywgJ2Rvd25MZWZ0JywgJ2Rvd25SaWdodCcsICdsZWZ0Q2VudGVyJywgJ2xlZnRVcCcsICdsZWZ0RG93bicsICdyaWdodENlbnRlcicsICdyaWdodFVwJywgJ3JpZ2h0RG93biddO1xudmFyIGFuY2hvclBvc2l0aW9uVG9Qb3BvdmVyUG9zaXRpb25NYXAgPSB7XG4gIHVwOiAndG9wJyxcbiAgcmlnaHQ6ICdyaWdodCcsXG4gIGRvd246ICdib3R0b20nLFxuICBsZWZ0OiAnbGVmdCdcbn07XG5leHBvcnQgZnVuY3Rpb24gZ2V0UG9wb3ZlclBvc2l0aW9uRnJvbUFuY2hvclBvc2l0aW9uKGFuY2hvclBvc2l0aW9uKSB7XG4gIC8vIG1hcHMgdGhlIGFuY2hvciBwb3NpdGlvbiB0byB0aGUgbWF0Y2hpbmcgcG9wb3ZlciBwb3NpdGlvblxuICAvLyBlLmcuIFwidXBMZWZ0XCIgLT4gXCJ0b3BcIiwgXCJkb3duUmlnaHRcIiAtPiBcImJvdHRvbVwiXG4gIC8vIGV4dHJhY3QgdGhlIGZpcnN0IHBvc2l0aW9uYWwgd29yZCBmcm9tIGFuY2hvclBvc2l0aW9uOlxuICAvLyBzdGFydHMgYXQgdGhlIGJlZ2lubmluZyAoXCIgXiBcIikgb2YgYW5jaG9yUG9zaXRpb24gYW5kXG4gIC8vIGNhcHR1cmVzIGFsbCBvZiB0aGUgY2hhcmFjdGVycyAoXCIgKC4qPykgXCIpIHVudGlsIHRoZVxuICAvLyBmaXJzdCBjYXBpdGFsIGxldHRlciAoXCIgW0EtWl0gXCIpIGlzIGVuY291bnRlcmVkXG4gIHZhciBfcmVmID0gYW5jaG9yUG9zaXRpb24ubWF0Y2goL14oLio/KVtBLVpdLyksXG4gICAgICBfcmVmMiA9IF9zbGljZWRUb0FycmF5KF9yZWYsIDIpLFxuICAgICAgcHJpbWFyeVBvc2l0aW9uID0gX3JlZjJbMV07XG5cbiAgcmV0dXJuIGFuY2hvclBvc2l0aW9uVG9Qb3BvdmVyUG9zaXRpb25NYXBbcHJpbWFyeVBvc2l0aW9uXTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRQb3BvdmVyQWxpZ25Gcm9tQW5jaG9yUG9zaXRpb24oYW5jaG9yUG9zaXRpb24pIHtcbiAgLy8gbWFwcyB0aGUgZ3Jhdml0eSB0byB0aGUgbWF0Y2hpbmcgcG9wb3ZlciBwb3NpdGlvblxuICAvLyBlLmcuIFwidXBMZWZ0XCIgLT4gXCJsZWZ0XCIsIFwicmlnaHREb3duXCIgLT4gXCJib3R0b21cIlxuICAvLyBleHRyYWN0IHRoZSBzZWNvbmQgcG9zaXRpb25hbCB3b3JkIGZyb20gYW5jaG9yUG9zaXRpb246XG4gIC8vIHN0YXJ0cyBhIGNhcHR1cmUgZ3JvdXAgYXQgdGhlIGZpcnN0IGNhcGl0YWwgbGV0dGVyXG4gIC8vIGFuZCBpbmNsdWRlcyBldmVyeXRoaW5nIGFmdGVyIGl0XG4gIHZhciBfcmVmMyA9IGFuY2hvclBvc2l0aW9uLm1hdGNoKC8oW0EtWl0uKikvKSxcbiAgICAgIF9yZWY0ID0gX3NsaWNlZFRvQXJyYXkoX3JlZjMsIDIpLFxuICAgICAgYWxpZ24gPSBfcmVmNFsxXTsgLy8gdGhpcyBwZXJmb3JtcyB0d28gdGFza3M6XG4gIC8vIDEuIG5vcm1hbGl6ZXMgdGhlIGFsaWduIHBvc2l0aW9uIGJ5IGxvd2VyY2FzaW5nIGl0XG4gIC8vIDIuIGBjZW50ZXJgIGRvZXNuJ3QgZXhpc3QgaW4gdGhlIGxvb2t1cCBtYXAgd2hpY2ggY29udmVydHMgaXQgdG8gYHVuZGVmaW5lZGAgbWVhbmluZyBubyBhbGlnblxuXG5cbiAgcmV0dXJuIGFuY2hvclBvc2l0aW9uVG9Qb3BvdmVyUG9zaXRpb25NYXBbYWxpZ24udG9Mb3dlckNhc2UoKV07XG59XG52YXIgREVGQVVMVF9QT1BPVkVSX1NUWUxFUyA9IHtcbiAgdG9wOiA1MCxcbiAgbGVmdDogNTBcbn07XG52YXIgcmV0dXJuRm9jdXNDb25maWcgPSB7XG4gIHByZXZlbnRTY3JvbGw6IHRydWVcbn07XG52YXIgY2xvc2luZ1RyYW5zaXRpb25UaW1lID0gMjUwOyAvLyBUT0RPOiBEUlkgb3V0IHZhciB3aGVuIGNvbnZlcnRpbmcgdG8gQ1NTLWluLUpTXG5cbmV4cG9ydCB2YXIgRXVpUG9wb3ZlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoRXVpUG9wb3ZlciwgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihFdWlQb3BvdmVyKTtcblxuICBmdW5jdGlvbiBFdWlQb3BvdmVyKHByb3BzKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aVBvcG92ZXIpO1xuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBwcm9wcyk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicmVzcG9zaXRpb25UaW1lb3V0XCIsIHZvaWQgMCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic3RyYW5kZWRGb2N1c1RpbWVvdXRcIiwgdm9pZCAwKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJjbG9zaW5nVHJhbnNpdGlvblRpbWVvdXRcIiwgdm9pZCAwKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJjbG9zaW5nVHJhbnNpdGlvbkFuaW1hdGlvbkZyYW1lXCIsIHZvaWQgMCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiYnV0dG9uXCIsIG51bGwpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInBhbmVsXCIsIG51bGwpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImRlc2NyaXB0aW9uSWRcIiwgaHRtbElkR2VuZXJhdG9yKCkoKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiY2xvc2VQb3BvdmVyXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChfdGhpcy5wcm9wcy5pc09wZW4pIHtcbiAgICAgICAgX3RoaXMucHJvcHMuY2xvc2VQb3BvdmVyKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25Fc2NhcGVLZXlcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAoX3RoaXMucHJvcHMuaXNPcGVuKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIF90aGlzLmNsb3NlUG9wb3ZlcigpO1xuXG4gICAgICAgIF90aGlzLmhhbmRsZVN0cmFuZGVkRm9jdXMoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJoYW5kbGVTdHJhbmRlZEZvY3VzXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLnN0cmFuZGVkRm9jdXNUaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBJZiBgcmV0dXJuRm9jdXNgIGZhaWxlZCBhbmQgZm9jdXMgd2FzIHN0cmFuZGVkIG9uIHRoZSBib2R5LFxuICAgICAgICAvLyBhdHRlbXB0IHRvIG1hbnVhbGx5IHJlc3RvcmUgZm9jdXMgdG8gdGhlIHRvZ2dsZSBidXR0b25cbiAgICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGRvY3VtZW50LmJvZHkpIHtcbiAgICAgICAgICBpZiAoIV90aGlzLmJ1dHRvbikgcmV0dXJuO1xuICAgICAgICAgIHZhciBmb2N1c2FibGVJdGVtcyA9IGZvY3VzYWJsZShfdGhpcy5idXR0b24pO1xuICAgICAgICAgIGlmICghZm9jdXNhYmxlSXRlbXMubGVuZ3RoKSByZXR1cm47XG4gICAgICAgICAgdmFyIHRvZ2dsZUJ1dHRvbiA9IGZvY3VzYWJsZUl0ZW1zWzBdO1xuICAgICAgICAgIHRvZ2dsZUJ1dHRvbi5mb2N1cyhyZXR1cm5Gb2N1c0NvbmZpZyk7XG4gICAgICAgIH1cbiAgICAgIH0sIGNsb3NpbmdUcmFuc2l0aW9uVGltZSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25LZXlEb3duXCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gY2FzY2FkaW5nTWVudUtleXMuRVNDQVBFKSB7XG4gICAgICAgIF90aGlzLm9uRXNjYXBlS2V5KGV2ZW50KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkNsaWNrT3V0c2lkZVwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIC8vIG9ubHkgY2xvc2UgdGhlIHBvcG92ZXIgaWYgdGhlIGV2ZW50IHNvdXJjZSBpc24ndCB0aGUgYW5jaG9yIGJ1dHRvblxuICAgICAgLy8gb3RoZXJ3aXNlLCBpdCBpcyB1cCB0byB0aGUgYW5jaG9yIHRvIHRvZ2dsZSB0aGUgcG9wb3ZlcidzIG9wZW4gc3RhdHVzXG4gICAgICBpZiAoX3RoaXMuYnV0dG9uICYmIF90aGlzLmJ1dHRvbi5jb250YWlucyhldmVudC50YXJnZXQpID09PSBmYWxzZSkge1xuICAgICAgICBfdGhpcy5jbG9zZVBvcG92ZXIoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbk9wZW5Qb3BvdmVyXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNsZWFyVGltZW91dChfdGhpcy5zdHJhbmRlZEZvY3VzVGltZW91dCk7XG4gICAgICBjbGVhclRpbWVvdXQoX3RoaXMuY2xvc2luZ1RyYW5zaXRpb25UaW1lb3V0KTtcblxuICAgICAgaWYgKF90aGlzLmNsb3NpbmdUcmFuc2l0aW9uQW5pbWF0aW9uRnJhbWUpIHtcbiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUoX3RoaXMuY2xvc2luZ1RyYW5zaXRpb25BbmltYXRpb25GcmFtZSk7XG4gICAgICB9IC8vIFdlIG5lZWQgdG8gc2V0IHRoaXMgc3RhdGUgYSBiZWF0IGFmdGVyIHRoZSByZW5kZXIgdGFrZXMgcGxhY2UsIHNvIHRoYXQgdGhlIENTU1xuICAgICAgLy8gdHJhbnNpdGlvbiBjYW4gdGFrZSBlZmZlY3QuXG5cblxuICAgICAgX3RoaXMuY2xvc2luZ1RyYW5zaXRpb25BbmltYXRpb25GcmFtZSA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgaXNPcGVuaW5nOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfSk7IC8vIGZvciBlYWNoIGNoaWxkIGVsZW1lbnQgb2YgYHRoaXMucGFuZWxgLCBmaW5kIGFueSB0cmFuc2l0aW9uIGR1cmF0aW9uIHdlIHNob3VsZCB3YWl0IGZvciBiZWZvcmUgc3RhYmlsaXppbmdcblxuICAgICAgdmFyIF9BcnJheSRwcm90b3R5cGUkc2xpYyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKF90aGlzLnBhbmVsID8gW190aGlzLnBhbmVsXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KEFycmF5LmZyb20oX3RoaXMucGFuZWwuY2hpbGRyZW4pKSkgOiBbXSkucmVkdWNlKGZ1bmN0aW9uIChfcmVmNSwgZWxlbWVudCkge1xuICAgICAgICB2YXIgZHVyYXRpb25NYXRjaCA9IF9yZWY1LmR1cmF0aW9uTWF0Y2gsXG4gICAgICAgICAgICBkZWxheU1hdGNoID0gX3JlZjUuZGVsYXlNYXRjaDtcbiAgICAgICAgdmFyIHRyYW5zaXRpb25UaW1pbmdzID0gZ2V0VHJhbnNpdGlvblRpbWluZ3MoZWxlbWVudCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZHVyYXRpb25NYXRjaDogTWF0aC5tYXgoZHVyYXRpb25NYXRjaCwgdHJhbnNpdGlvblRpbWluZ3MuZHVyYXRpb25NYXRjaCksXG4gICAgICAgICAgZGVsYXlNYXRjaDogTWF0aC5tYXgoZGVsYXlNYXRjaCwgdHJhbnNpdGlvblRpbWluZ3MuZGVsYXlNYXRjaClcbiAgICAgICAgfTtcbiAgICAgIH0sIHtcbiAgICAgICAgZHVyYXRpb25NYXRjaDogMCxcbiAgICAgICAgZGVsYXlNYXRjaDogMFxuICAgICAgfSksXG4gICAgICAgICAgZHVyYXRpb25NYXRjaCA9IF9BcnJheSRwcm90b3R5cGUkc2xpYy5kdXJhdGlvbk1hdGNoLFxuICAgICAgICAgIGRlbGF5TWF0Y2ggPSBfQXJyYXkkcHJvdG90eXBlJHNsaWMuZGVsYXlNYXRjaDtcblxuICAgICAgY2xlYXJUaW1lb3V0KF90aGlzLnJlc3Bvc2l0aW9uVGltZW91dCk7XG4gICAgICBfdGhpcy5yZXNwb3NpdGlvblRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBpc09wZW5TdGFibGU6IHRydWVcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF90aGlzLnBvc2l0aW9uUG9wb3ZlckZpeGVkKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSwgZHVyYXRpb25NYXRjaCArIGRlbGF5TWF0Y2gpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uTXV0YXRpb25cIiwgZnVuY3Rpb24gKHJlY29yZHMpIHtcbiAgICAgIHZhciB3YWl0RHVyYXRpb24gPSBnZXRXYWl0RHVyYXRpb24ocmVjb3Jkcyk7XG5cbiAgICAgIF90aGlzLnBvc2l0aW9uUG9wb3ZlckZpeGVkKCk7XG5cbiAgICAgIHBlcmZvcm1PbkZyYW1lKHdhaXREdXJhdGlvbiwgX3RoaXMucG9zaXRpb25Qb3BvdmVyRml4ZWQpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInBvc2l0aW9uUG9wb3ZlclwiLCBmdW5jdGlvbiAoYWxsb3dFbmZvcmNlUG9zaXRpb24pIHtcbiAgICAgIGlmIChfdGhpcy5idXR0b24gPT0gbnVsbCB8fCBfdGhpcy5wYW5lbCA9PSBudWxsKSByZXR1cm47XG4gICAgICB2YXIgX3JlZjYgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBhbmNob3JQb3NpdGlvbiA9IF9yZWY2LmFuY2hvclBvc2l0aW9uO1xuICAgICAgdmFyIHBvc2l0aW9uID0gZ2V0UG9wb3ZlclBvc2l0aW9uRnJvbUFuY2hvclBvc2l0aW9uKGFuY2hvclBvc2l0aW9uKTtcbiAgICAgIHZhciBmb3JjZVBvc2l0aW9uID0gdW5kZWZpbmVkO1xuXG4gICAgICBpZiAoYWxsb3dFbmZvcmNlUG9zaXRpb24gJiYgX3RoaXMuc3RhdGUuaXNPcGVuU3RhYmxlICYmIF90aGlzLnN0YXRlLm9wZW5Qb3NpdGlvbiAhPSBudWxsKSB7XG4gICAgICAgIHBvc2l0aW9uID0gX3RoaXMuc3RhdGUub3BlblBvc2l0aW9uO1xuICAgICAgICBmb3JjZVBvc2l0aW9uID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIF9maW5kUG9wb3ZlclBvc2l0aW9uID0gZmluZFBvcG92ZXJQb3NpdGlvbih7XG4gICAgICAgIGNvbnRhaW5lcjogX3RoaXMucHJvcHMuY29udGFpbmVyLFxuICAgICAgICBwb3NpdGlvbjogcG9zaXRpb24sXG4gICAgICAgIGZvcmNlUG9zaXRpb246IGZvcmNlUG9zaXRpb24sXG4gICAgICAgIGFsaWduOiBnZXRQb3BvdmVyQWxpZ25Gcm9tQW5jaG9yUG9zaXRpb24oYW5jaG9yUG9zaXRpb24pLFxuICAgICAgICBhbmNob3I6IF90aGlzLmJ1dHRvbixcbiAgICAgICAgcG9wb3ZlcjogX3RoaXMucGFuZWwsXG4gICAgICAgIG9mZnNldDogIV90aGlzLnByb3BzLmF0dGFjaFRvQW5jaG9yICYmIF90aGlzLnByb3BzLmhhc0Fycm93ID8gMTYgKyAoX3RoaXMucHJvcHMub2Zmc2V0IHx8IDApIDogOCArIChfdGhpcy5wcm9wcy5vZmZzZXQgfHwgMCksXG4gICAgICAgIGFycm93Q29uZmlnOiB7XG4gICAgICAgICAgYXJyb3dXaWR0aDogMjQsXG4gICAgICAgICAgYXJyb3dCdWZmZXI6IDEwXG4gICAgICAgIH0sXG4gICAgICAgIHJldHVybkJvdW5kaW5nQm94OiBfdGhpcy5wcm9wcy5hdHRhY2hUb0FuY2hvcixcbiAgICAgICAgYnVmZmVyOiBfdGhpcy5wcm9wcy5idWZmZXJcbiAgICAgIH0pLFxuICAgICAgICAgIHRvcCA9IF9maW5kUG9wb3ZlclBvc2l0aW9uLnRvcCxcbiAgICAgICAgICBsZWZ0ID0gX2ZpbmRQb3BvdmVyUG9zaXRpb24ubGVmdCxcbiAgICAgICAgICBmb3VuZFBvc2l0aW9uID0gX2ZpbmRQb3BvdmVyUG9zaXRpb24ucG9zaXRpb24sXG4gICAgICAgICAgYXJyb3cgPSBfZmluZFBvcG92ZXJQb3NpdGlvbi5hcnJvdyxcbiAgICAgICAgICBhbmNob3JCb3VuZGluZ0JveCA9IF9maW5kUG9wb3ZlclBvc2l0aW9uLmFuY2hvckJvdW5kaW5nQm94OyAvLyB0aGUgcG9wb3ZlcidzIHotaW5kZXggbXVzdCBpbmhlcml0IGZyb20gdGhlIGJ1dHRvblxuICAgICAgLy8gdGhpcyBrZWVwcyBhIGJ1dHRvbidzIHBvcG92ZXIgdW5kZXIgYSBmbHlvdXQgdGhhdCB3b3VsZCBjb3ZlciB0aGUgYnV0dG9uXG4gICAgICAvLyBidXQgYSBwb3BvdmVyIHRyaWdnZXJlZCBpbnNpZGUgYSBmbHlvdXQgd2lsbCBhcHBlYXIgb3ZlciB0aGF0IGZseW91dFxuXG5cbiAgICAgIHZhciB6SW5kZXhQcm9wID0gX3RoaXMucHJvcHMuekluZGV4O1xuICAgICAgdmFyIHpJbmRleCA9IHpJbmRleFByb3AgPT0gbnVsbCA/IGdldEVsZW1lbnRaSW5kZXgoX3RoaXMuYnV0dG9uLCBfdGhpcy5wYW5lbCkgKyAyMDAwIDogekluZGV4UHJvcDtcblxuICAgICAgdmFyIHBvcG92ZXJTdHlsZXMgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIF90aGlzLnByb3BzLnBhbmVsU3R5bGUpLCB7fSwge1xuICAgICAgICB0b3A6IHRvcCxcbiAgICAgICAgbGVmdDogX3RoaXMucHJvcHMuYXR0YWNoVG9BbmNob3IgJiYgYW5jaG9yQm91bmRpbmdCb3ggPyBhbmNob3JCb3VuZGluZ0JveC5sZWZ0IDogbGVmdCxcbiAgICAgICAgekluZGV4OiB6SW5kZXhcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgd2lsbFJlbmRlckFycm93ID0gIV90aGlzLnByb3BzLmF0dGFjaFRvQW5jaG9yICYmIF90aGlzLnByb3BzLmhhc0Fycm93O1xuICAgICAgdmFyIGFycm93U3R5bGVzID0gd2lsbFJlbmRlckFycm93ID8gYXJyb3cgOiB1bmRlZmluZWQ7XG4gICAgICB2YXIgYXJyb3dQb3NpdGlvbiA9IGZvdW5kUG9zaXRpb247XG5cbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgcG9wb3ZlclN0eWxlczogcG9wb3ZlclN0eWxlcyxcbiAgICAgICAgYXJyb3dTdHlsZXM6IGFycm93U3R5bGVzLFxuICAgICAgICBhcnJvd1Bvc2l0aW9uOiBhcnJvd1Bvc2l0aW9uLFxuICAgICAgICBvcGVuUG9zaXRpb246IGZvdW5kUG9zaXRpb25cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInBvc2l0aW9uUG9wb3ZlckZpeGVkXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLnBvc2l0aW9uUG9wb3Zlcih0cnVlKTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJwb3NpdGlvblBvcG92ZXJGbHVpZFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5wb3NpdGlvblBvcG92ZXIoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInBhbmVsUmVmXCIsIGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICBfdGhpcy5wYW5lbCA9IG5vZGU7XG4gICAgICBfdGhpcy5wcm9wcy5wYW5lbFJlZiAmJiBfdGhpcy5wcm9wcy5wYW5lbFJlZihub2RlKTtcblxuICAgICAgaWYgKG5vZGUgPT0gbnVsbCkge1xuICAgICAgICAvLyBwYW5lbCBoYXMgdW5tb3VudGVkLCByZXN0b3JlIHRoZSBzdGF0ZSBkZWZhdWx0c1xuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgcG9wb3ZlclN0eWxlczogREVGQVVMVF9QT1BPVkVSX1NUWUxFUyxcbiAgICAgICAgICBhcnJvd1N0eWxlczoge30sXG4gICAgICAgICAgYXJyb3dQb3NpdGlvbjogbnVsbCxcbiAgICAgICAgICBvcGVuUG9zaXRpb246IG51bGwsXG4gICAgICAgICAgaXNPcGVuU3RhYmxlOiBmYWxzZVxuICAgICAgICB9KTtcblxuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgX3RoaXMucG9zaXRpb25Qb3BvdmVyRmx1aWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gcGFuZWwgaXMgY29taW5nIGludG8gZXhpc3RlbmNlXG4gICAgICAgIF90aGlzLnBvc2l0aW9uUG9wb3ZlckZsdWlkKCk7XG5cbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIF90aGlzLnBvc2l0aW9uUG9wb3ZlckZsdWlkKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJidXR0b25SZWZcIiwgZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIF90aGlzLmJ1dHRvbiA9IG5vZGU7XG4gICAgICBfdGhpcy5wcm9wcy5idXR0b25SZWYgJiYgX3RoaXMucHJvcHMuYnV0dG9uUmVmKG5vZGUpO1xuICAgIH0pO1xuXG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBwcmV2UHJvcHM6IHtcbiAgICAgICAgaXNPcGVuOiBwcm9wcy5pc09wZW5cbiAgICAgIH0sXG4gICAgICBzdXBwcmVzc2luZ1BvcG92ZXI6IHByb3BzLmlzT3BlbixcbiAgICAgIC8vIG9ubHkgc3VwcHJlc3MgaWYgY3JlYXRlZCB3aXRoIGlzT3Blbj10cnVlXG4gICAgICBpc0Nsb3Npbmc6IGZhbHNlLFxuICAgICAgaXNPcGVuaW5nOiBmYWxzZSxcbiAgICAgIHBvcG92ZXJTdHlsZXM6IERFRkFVTFRfUE9QT1ZFUl9TVFlMRVMsXG4gICAgICBhcnJvd1N0eWxlczoge30sXG4gICAgICBhcnJvd1Bvc2l0aW9uOiBudWxsLFxuICAgICAgb3BlblBvc2l0aW9uOiBudWxsLFxuICAgICAgLy8gb25jZSBhIHN0YWJsZSBwb3NpdGlvbiBoYXMgYmVlbiBmb3VuZCwga2VlcCB0aGUgY29udGVudHMgb24gdGhhdCBzaWRlXG4gICAgICBpc09wZW5TdGFibGU6IGZhbHNlIC8vIHdhaXQgZm9yIGFueSBpbml0aWFsIG9wZW5pbmcgdHJhbnNpdGlvbnMgdG8gZmluaXNoIGJlZm9yZSBtYXJraW5nIGFzIHN0YWJsZVxuXG4gICAgfTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoRXVpUG9wb3ZlciwgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgaWYgKHRoaXMuc3RhdGUuc3VwcHJlc3NpbmdQb3BvdmVyKSB7XG4gICAgICAgIC8vIGNvbXBvbmVudCB3YXMgY3JlYXRlZCB3aXRoIGlzT3Blbj10cnVlOyBub3cgdGhhdCBpdCdzIG1vdW50ZWRcbiAgICAgICAgLy8gc3RvcCBzdXBwcmVzc2luZyBhbmQgc3RhcnQgb3BlbmluZ1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3Qvbm8tZGlkLW1vdW50LXNldC1zdGF0ZVxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBzdXBwcmVzc2luZ1BvcG92ZXI6IGZhbHNlLFxuICAgICAgICAgIGlzT3BlbmluZzogdHJ1ZVxuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgX3RoaXMyLm9uT3BlblBvcG92ZXIoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnByb3BzLnJlcG9zaXRpb25PblNjcm9sbCkge1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5wb3NpdGlvblBvcG92ZXJGaXhlZCwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudERpZFVwZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzKSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgLy8gVGhlIHBvcG92ZXIgaXMgYmVpbmcgb3BlbmVkLlxuICAgICAgaWYgKCFwcmV2UHJvcHMuaXNPcGVuICYmIHRoaXMucHJvcHMuaXNPcGVuKSB7XG4gICAgICAgIHRoaXMub25PcGVuUG9wb3ZlcigpO1xuICAgICAgfSAvLyB1cGRhdGUgc2Nyb2xsIGxpc3RlbmVyXG5cblxuICAgICAgaWYgKHByZXZQcm9wcy5yZXBvc2l0aW9uT25TY3JvbGwgIT09IHRoaXMucHJvcHMucmVwb3NpdGlvbk9uU2Nyb2xsKSB7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLnJlcG9zaXRpb25PblNjcm9sbCkge1xuICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLnBvc2l0aW9uUG9wb3ZlckZpeGVkLCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5wb3NpdGlvblBvcG92ZXJGaXhlZCwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gVGhlIHBvcG92ZXIgaXMgYmVpbmcgY2xvc2VkLlxuXG5cbiAgICAgIGlmIChwcmV2UHJvcHMuaXNPcGVuICYmICF0aGlzLnByb3BzLmlzT3Blbikge1xuICAgICAgICAvLyBJZiB0aGUgdXNlciBoYXMganVzdCBjbG9zZWQgdGhlIHBvcG92ZXIsIHF1ZXVlIHVwIHRoZSByZW1vdmFsIG9mIHRoZSBjb250ZW50IGFmdGVyIHRoZVxuICAgICAgICAvLyB0cmFuc2l0aW9uIGlzIGNvbXBsZXRlLlxuICAgICAgICB0aGlzLmNsb3NpbmdUcmFuc2l0aW9uVGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpczMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgaXNDbG9zaW5nOiBmYWxzZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9LCBjbG9zaW5nVHJhbnNpdGlvblRpbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLnBvc2l0aW9uUG9wb3ZlckZpeGVkLCB0cnVlKTtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnJlc3Bvc2l0aW9uVGltZW91dCk7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5zdHJhbmRlZEZvY3VzVGltZW91dCk7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5jbG9zaW5nVHJhbnNpdGlvblRpbWVvdXQpO1xuICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5jbG9zaW5nVHJhbnNpdGlvbkFuaW1hdGlvbkZyYW1lKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGFuY2hvckNsYXNzTmFtZSA9IF90aGlzJHByb3BzLmFuY2hvckNsYXNzTmFtZSxcbiAgICAgICAgICBhbmNob3JQb3NpdGlvbiA9IF90aGlzJHByb3BzLmFuY2hvclBvc2l0aW9uLFxuICAgICAgICAgIGJ1dHRvbiA9IF90aGlzJHByb3BzLmJ1dHRvbixcbiAgICAgICAgICBidXR0b25SZWYgPSBfdGhpcyRwcm9wcy5idXR0b25SZWYsXG4gICAgICAgICAgaW5zZXJ0ID0gX3RoaXMkcHJvcHMuaW5zZXJ0LFxuICAgICAgICAgIGlzT3BlbiA9IF90aGlzJHByb3BzLmlzT3BlbixcbiAgICAgICAgICBvd25Gb2N1cyA9IF90aGlzJHByb3BzLm93bkZvY3VzLFxuICAgICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMuY2xhc3NOYW1lLFxuICAgICAgICAgIGNsb3NlUG9wb3ZlciA9IF90aGlzJHByb3BzLmNsb3NlUG9wb3ZlcixcbiAgICAgICAgICBwYW5lbENsYXNzTmFtZSA9IF90aGlzJHByb3BzLnBhbmVsQ2xhc3NOYW1lLFxuICAgICAgICAgIHBhbmVsUGFkZGluZ1NpemUgPSBfdGhpcyRwcm9wcy5wYW5lbFBhZGRpbmdTaXplLFxuICAgICAgICAgIHBhbmVsUHJvcHMgPSBfdGhpcyRwcm9wcy5wYW5lbFByb3BzLFxuICAgICAgICAgIHBhbmVsUmVmID0gX3RoaXMkcHJvcHMucGFuZWxSZWYsXG4gICAgICAgICAgcGFuZWxTdHlsZSA9IF90aGlzJHByb3BzLnBhbmVsU3R5bGUsXG4gICAgICAgICAgcG9wb3ZlclNjcmVlblJlYWRlclRleHQgPSBfdGhpcyRwcm9wcy5wb3BvdmVyU2NyZWVuUmVhZGVyVGV4dCxcbiAgICAgICAgICBwb3BvdmVyUmVmID0gX3RoaXMkcHJvcHMucG9wb3ZlclJlZixcbiAgICAgICAgICBoYXNBcnJvdyA9IF90aGlzJHByb3BzLmhhc0Fycm93LFxuICAgICAgICAgIGFycm93Q2hpbGRyZW4gPSBfdGhpcyRwcm9wcy5hcnJvd0NoaWxkcmVuLFxuICAgICAgICAgIHJlcG9zaXRpb25PblNjcm9sbCA9IF90aGlzJHByb3BzLnJlcG9zaXRpb25PblNjcm9sbCxcbiAgICAgICAgICB6SW5kZXggPSBfdGhpcyRwcm9wcy56SW5kZXgsXG4gICAgICAgICAgYXR0YWNoVG9BbmNob3IgPSBfdGhpcyRwcm9wcy5hdHRhY2hUb0FuY2hvcixcbiAgICAgICAgICBkaXNwbGF5ID0gX3RoaXMkcHJvcHMuZGlzcGxheSxcbiAgICAgICAgICBvZmZzZXQgPSBfdGhpcyRwcm9wcy5vZmZzZXQsXG4gICAgICAgICAgb25UcmFwRGVhY3RpdmF0aW9uID0gX3RoaXMkcHJvcHMub25UcmFwRGVhY3RpdmF0aW9uLFxuICAgICAgICAgIGJ1ZmZlciA9IF90aGlzJHByb3BzLmJ1ZmZlcixcbiAgICAgICAgICBhcmlhTGFiZWwgPSBfdGhpcyRwcm9wc1snYXJpYS1sYWJlbCddLFxuICAgICAgICAgIGFyaWFMYWJlbGxlZEJ5ID0gX3RoaXMkcHJvcHNbJ2FyaWEtbGFiZWxsZWRieSddLFxuICAgICAgICAgIGNvbnRhaW5lciA9IF90aGlzJHByb3BzLmNvbnRhaW5lcixcbiAgICAgICAgICBmb2N1c1RyYXBQcm9wcyA9IF90aGlzJHByb3BzLmZvY3VzVHJhcFByb3BzLFxuICAgICAgICAgIGluaXRpYWxGb2N1c1Byb3AgPSBfdGhpcyRwcm9wcy5pbml0aWFsRm9jdXMsXG4gICAgICAgICAgdGFiSW5kZXhQcm9wID0gX3RoaXMkcHJvcHMudGFiSW5kZXgsXG4gICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wcywgX2V4Y2x1ZGVkKTtcblxuICAgICAgdmFyIHN0eWxlcyA9IGV1aVBvcG92ZXJTdHlsZXMoKTtcbiAgICAgIHZhciBwb3BvdmVyU3R5bGVzID0gW3N0eWxlcy5ldWlQb3BvdmVyLCB7XG4gICAgICAgIGRpc3BsYXk6IGRpc3BsYXlcbiAgICAgIH1dO1xuICAgICAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlQb3BvdmVyJywge1xuICAgICAgICAnZXVpUG9wb3Zlci1pc09wZW4nOiB0aGlzLnN0YXRlLmlzT3BlbmluZ1xuICAgICAgfSwgY2xhc3NOYW1lKTtcbiAgICAgIHZhciBhbmNob3JDbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpUG9wb3Zlcl9fYW5jaG9yJywgYW5jaG9yQ2xhc3NOYW1lKTtcbiAgICAgIHZhciBzaG93QXJyb3cgPSBoYXNBcnJvdyAmJiAhYXR0YWNoVG9BbmNob3I7XG4gICAgICB2YXIgcGFuZWw7XG5cbiAgICAgIGlmICghdGhpcy5zdGF0ZS5zdXBwcmVzc2luZ1BvcG92ZXIgJiYgKGlzT3BlbiB8fCB0aGlzLnN0YXRlLmlzQ2xvc2luZykpIHtcbiAgICAgICAgdmFyIHRhYkluZGV4ID0gdGFiSW5kZXhQcm9wO1xuICAgICAgICB2YXIgaW5pdGlhbEZvY3VzID0gaW5pdGlhbEZvY3VzUHJvcDtcbiAgICAgICAgdmFyIGFyaWFEZXNjcmliZWRieTtcbiAgICAgICAgdmFyIGFyaWFMaXZlO1xuICAgICAgICB2YXIgcGFuZWxBcmlhTW9kYWwgPSBwYW5lbFByb3BzICE9PSBudWxsICYmIHBhbmVsUHJvcHMgIT09IHZvaWQgMCAmJiBwYW5lbFByb3BzLmhhc093blByb3BlcnR5KCdhcmlhLW1vZGFsJykgPyBwYW5lbFByb3BzWydhcmlhLW1vZGFsJ10gOiAndHJ1ZSc7XG4gICAgICAgIHZhciBwYW5lbFJvbGUgPSBwYW5lbFByb3BzICE9PSBudWxsICYmIHBhbmVsUHJvcHMgIT09IHZvaWQgMCAmJiBwYW5lbFByb3BzLmhhc093blByb3BlcnR5KCdyb2xlJykgPyBwYW5lbFByb3BzLnJvbGUgOiAnZGlhbG9nJztcblxuICAgICAgICBpZiAob3duRm9jdXMgfHwgcGFuZWxBcmlhTW9kYWwgIT09ICd0cnVlJykge1xuICAgICAgICAgIHRhYkluZGV4ID0gdGFiSW5kZXhQcm9wICE9PSBudWxsICYmIHRhYkluZGV4UHJvcCAhPT0gdm9pZCAwID8gdGFiSW5kZXhQcm9wIDogMDtcbiAgICAgICAgICBhcmlhTGl2ZSA9ICdvZmYnO1xuXG4gICAgICAgICAgaWYgKCFpbml0aWFsRm9jdXMpIHtcbiAgICAgICAgICAgIGluaXRpYWxGb2N1cyA9IGZ1bmN0aW9uIGluaXRpYWxGb2N1cygpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIF90aGlzNC5wYW5lbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFyaWFMaXZlID0gJ2Fzc2VydGl2ZSc7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZm9jdXNUcmFwU2NyZWVuUmVhZGVyVGV4dDtcblxuICAgICAgICBpZiAob3duRm9jdXMgfHwgcG9wb3ZlclNjcmVlblJlYWRlclRleHQpIHtcbiAgICAgICAgICBhcmlhRGVzY3JpYmVkYnkgPSB0aGlzLmRlc2NyaXB0aW9uSWQ7XG4gICAgICAgICAgZm9jdXNUcmFwU2NyZWVuUmVhZGVyVGV4dCA9IF9fX0Vtb3Rpb25KU1goRXVpU2NyZWVuUmVhZGVyT25seSwgbnVsbCwgX19fRW1vdGlvbkpTWChcInBcIiwge1xuICAgICAgICAgICAgaWQ6IHRoaXMuZGVzY3JpcHRpb25JZFxuICAgICAgICAgIH0sIG93bkZvY3VzICYmIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgICAgdG9rZW46IFwiZXVpUG9wb3Zlci5zY3JlZW5SZWFkZXJBbm5vdW5jZW1lbnRcIixcbiAgICAgICAgICAgIGRlZmF1bHQ6IFwiWW91IGFyZSBpbiBhIGRpYWxvZy4gVG8gY2xvc2UgdGhpcyBkaWFsb2csIGhpdCBlc2NhcGUuXCJcbiAgICAgICAgICB9KSwgcG9wb3ZlclNjcmVlblJlYWRlclRleHQpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByZXR1cm5Gb2N1cyA9IHRoaXMuc3RhdGUuaXNPcGVuU3RhYmxlID8gcmV0dXJuRm9jdXNDb25maWcgOiBmYWxzZTtcbiAgICAgICAgcGFuZWwgPSBfX19FbW90aW9uSlNYKEV1aVBvcnRhbCwge1xuICAgICAgICAgIGluc2VydDogaW5zZXJ0XG4gICAgICAgIH0sIF9fX0Vtb3Rpb25KU1goRXVpRm9jdXNUcmFwLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgY2xpY2tPdXRzaWRlRGlzYWJsZXM6IHRydWVcbiAgICAgICAgfSwgZm9jdXNUcmFwUHJvcHMsIHtcbiAgICAgICAgICByZXR1cm5Gb2N1czogcmV0dXJuRm9jdXMgLy8gSWdub3JlIHRlbXBvcmFyeSBzdGF0ZSBvZiBpbmRlY2lzaXZlIGZvY3VzXG4gICAgICAgICAgLFxuICAgICAgICAgIGluaXRpYWxGb2N1czogaW5pdGlhbEZvY3VzLFxuICAgICAgICAgIG9uRGVhY3RpdmF0aW9uOiBvblRyYXBEZWFjdGl2YXRpb24sXG4gICAgICAgICAgb25DbGlja091dHNpZGU6IHRoaXMub25DbGlja091dHNpZGUsXG4gICAgICAgICAgb25Fc2NhcGVLZXk6IHRoaXMub25Fc2NhcGVLZXksXG4gICAgICAgICAgZGlzYWJsZWQ6ICFvd25Gb2N1cyB8fCAhdGhpcy5zdGF0ZS5pc09wZW5TdGFibGUgfHwgdGhpcy5zdGF0ZS5pc0Nsb3NpbmdcbiAgICAgICAgfSksIF9fX0Vtb3Rpb25KU1goRXVpUG9wb3ZlclBhbmVsLCBfZXh0ZW5kcyh7fSwgcGFuZWxQcm9wcywge1xuICAgICAgICAgIHBhbmVsUmVmOiB0aGlzLnBhbmVsUmVmLFxuICAgICAgICAgIGlzT3BlbjogdGhpcy5zdGF0ZS5pc09wZW5pbmcsXG4gICAgICAgICAgcG9zaXRpb246IHRoaXMuc3RhdGUuYXJyb3dQb3NpdGlvbixcbiAgICAgICAgICBpc0F0dGFjaGVkOiBhdHRhY2hUb0FuY2hvcixcbiAgICAgICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMocGFuZWxDbGFzc05hbWUsIHBhbmVsUHJvcHMgPT09IG51bGwgfHwgcGFuZWxQcm9wcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFuZWxQcm9wcy5jbGFzc05hbWUpLFxuICAgICAgICAgIGhhc1NoYWRvdzogZmFsc2UsXG4gICAgICAgICAgcGFkZGluZ1NpemU6IHBhbmVsUGFkZGluZ1NpemUsXG4gICAgICAgICAgdGFiSW5kZXg6IHRhYkluZGV4LFxuICAgICAgICAgIFwiYXJpYS1saXZlXCI6IGFyaWFMaXZlLFxuICAgICAgICAgIHJvbGU6IHBhbmVsUm9sZSxcbiAgICAgICAgICBcImFyaWEtbGFiZWxcIjogYXJpYUxhYmVsLFxuICAgICAgICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IGFyaWFMYWJlbGxlZEJ5LFxuICAgICAgICAgIFwiYXJpYS1tb2RhbFwiOiBwYW5lbEFyaWFNb2RhbCxcbiAgICAgICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjogYXJpYURlc2NyaWJlZGJ5LFxuICAgICAgICAgIHN0eWxlOiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHRoaXMuc3RhdGUucG9wb3ZlclN0eWxlcyksIHt9LCB7XG4gICAgICAgICAgICAvLyBBZGRpbmcgYHdpbGwtY2hhbmdlYCB0byByZWR1Y2UgcmlzayBvZiBhIGJsdXJyeSBhbmltYXRpb24gaW4gQ2hyb21lIDg2K1xuICAgICAgICAgICAgd2lsbENoYW5nZTogIXRoaXMuc3RhdGUuaXNPcGVuU3RhYmxlID8gJ3RyYW5zZm9ybSwgb3BhY2l0eScgOiB1bmRlZmluZWRcbiAgICAgICAgICB9KVxuICAgICAgICB9KSwgc2hvd0Fycm93ICYmIHRoaXMuc3RhdGUuYXJyb3dQb3NpdGlvbiAmJiBfX19FbW90aW9uSlNYKEV1aVBvcG92ZXJBcnJvdywge1xuICAgICAgICAgIHBvc2l0aW9uOiB0aGlzLnN0YXRlLmFycm93UG9zaXRpb24sXG4gICAgICAgICAgc3R5bGU6IHRoaXMuc3RhdGUuYXJyb3dTdHlsZXNcbiAgICAgICAgfSwgYXJyb3dDaGlsZHJlbiksIGZvY3VzVHJhcFNjcmVlblJlYWRlclRleHQsIF9fX0Vtb3Rpb25KU1goRXVpTXV0YXRpb25PYnNlcnZlciwge1xuICAgICAgICAgIG9ic2VydmVyT3B0aW9uczoge1xuICAgICAgICAgICAgYXR0cmlidXRlczogdHJ1ZSxcbiAgICAgICAgICAgIC8vIGVsZW1lbnQgYXR0cmlidXRlIGNoYW5nZXNcbiAgICAgICAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgICAgICAgICAgIC8vIGFkZGVkL3JlbW92ZWQgZWxlbWVudHNcbiAgICAgICAgICAgIGNoYXJhY3RlckRhdGE6IHRydWUsXG4gICAgICAgICAgICAvLyB0ZXh0IGNoYW5nZXNcbiAgICAgICAgICAgIHN1YnRyZWU6IHRydWUgLy8gd2F0Y2ggYWxsIGNoaWxkIGVsZW1lbnRzXG5cbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uTXV0YXRpb246IHRoaXMub25NdXRhdGlvblxuICAgICAgICB9LCBmdW5jdGlvbiAobXV0YXRpb25SZWYpIHtcbiAgICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICAgICAgICByZWY6IG11dGF0aW9uUmVmXG4gICAgICAgICAgfSwgY2hpbGRyZW4pO1xuICAgICAgICB9KSkpKTtcbiAgICAgIH0gLy8gcmVhY3QtZm9jdXMtb24gYW5kIHJlbGF0ZWQgZG8gbm90IHJlZ2lzdGVyIG91dHNpZGUgY2xpY2sgZGV0ZWN0aW9uXG4gICAgICAvLyB3aGVuIGRpc2FibGVkLCBzbyB3ZSBzdGlsbCBuZWVkIHRvIGNvbmRpdGlvbmFsbHkgY2hlY2sgZm9yIHRoYXQgb3Vyc2VsdmVzXG5cblxuICAgICAgaWYgKG93bkZvY3VzKSB7XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICAgICAgICBjc3M6IHBvcG92ZXJTdHlsZXMsXG4gICAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICAgIHJlZjogcG9wb3ZlclJlZlxuICAgICAgICB9LCByZXN0KSwgX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICAgICAgY3NzOiAvKiNfX1BVUkVfXyovX2Nzcyh7XG4gICAgICAgICAgICBkaXNwbGF5OiBkaXNwbGF5XG4gICAgICAgICAgfSwgXCI7bGFiZWw6cmVuZGVyO1wiKSxcbiAgICAgICAgICBjbGFzc05hbWU6IGFuY2hvckNsYXNzZXMsXG4gICAgICAgICAgcmVmOiB0aGlzLmJ1dHRvblJlZlxuICAgICAgICB9LCBidXR0b24gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCA/IG51bGwgOiBidXR0b24pLCBwYW5lbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlPdXRzaWRlQ2xpY2tEZXRlY3Rvciwge1xuICAgICAgICAgIG9uT3V0c2lkZUNsaWNrOiB0aGlzLmNsb3NlUG9wb3ZlclxuICAgICAgICB9LCBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICAgICAgICBjc3M6IHBvcG92ZXJTdHlsZXMsXG4gICAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICAgIHJlZjogcG9wb3ZlclJlZixcbiAgICAgICAgICBvbktleURvd246IHRoaXMub25LZXlEb3duXG4gICAgICAgIH0sIHJlc3QpLCBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgICAgICBjc3M6IC8qI19fUFVSRV9fKi9fY3NzKHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGRpc3BsYXlcbiAgICAgICAgICB9LCBcIjtsYWJlbDpyZW5kZXI7XCIpLFxuICAgICAgICAgIGNsYXNzTmFtZTogYW5jaG9yQ2xhc3NlcyxcbiAgICAgICAgICByZWY6IHRoaXMuYnV0dG9uUmVmXG4gICAgICAgIH0sIGJ1dHRvbiBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ID8gbnVsbCA6IGJ1dHRvbiksIHBhbmVsKSk7XG4gICAgICB9XG4gICAgfVxuICB9XSwgW3tcbiAgICBrZXk6IFwiZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhuZXh0UHJvcHMsIHByZXZTdGF0ZSkge1xuICAgICAgaWYgKHByZXZTdGF0ZS5wcmV2UHJvcHMuaXNPcGVuICYmICFuZXh0UHJvcHMuaXNPcGVuKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcHJldlByb3BzOiB7XG4gICAgICAgICAgICBpc09wZW46IG5leHRQcm9wcy5pc09wZW5cbiAgICAgICAgICB9LFxuICAgICAgICAgIGlzQ2xvc2luZzogdHJ1ZSxcbiAgICAgICAgICBpc09wZW5pbmc6IGZhbHNlXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGlmIChwcmV2U3RhdGUucHJldlByb3BzLmlzT3BlbiAhPT0gbmV4dFByb3BzLmlzT3Blbikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHByZXZQcm9wczoge1xuICAgICAgICAgICAgaXNPcGVuOiBuZXh0UHJvcHMuaXNPcGVuXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gRXVpUG9wb3Zlcjtcbn0oQ29tcG9uZW50KTtcblxuX2RlZmluZVByb3BlcnR5KEV1aVBvcG92ZXIsIFwiZGVmYXVsdFByb3BzXCIsIHtcbiAgaXNPcGVuOiBmYWxzZSxcbiAgb3duRm9jdXM6IHRydWUsXG4gIGFuY2hvclBvc2l0aW9uOiAnZG93bkNlbnRlcicsXG4gIHBhbmVsUGFkZGluZ1NpemU6ICdtJyxcbiAgaGFzQXJyb3c6IHRydWUsXG4gIGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snXG59KTtcblxuRXVpUG9wb3Zlci5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgICAqIENsYXNzIG5hbWUgcGFzc2VkIHRvIHRoZSBkaXJlY3QgcGFyZW50IG9mIHRoZSBidXR0b25cbiAgICAgKi9cbiAgYW5jaG9yQ2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAqIEFsaWdubWVudCBvZiB0aGUgcG9wb3ZlciBhbmQgYXJyb3cgcmVsYXRpdmUgdG8gdGhlIGJ1dHRvblxuICAgICAqL1xuICBhbmNob3JQb3NpdGlvbjogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBTdHlsZSBhbmQgcG9zaXRpb24gYWx0ZXJhdGlvbiBmb3IgYXJyb3ctbGVzcywgbGVmdC1hbGlnbmVkXG4gICAgICogYXR0YWNobWVudC4gSW50ZW5kZWQgZm9yIHVzZSB3aXRoIGlucHV0cyBhcyBhbmNob3JzLCBlLmcuXG4gICAgICogRXVpSW5wdXRQb3BvdmVyXG4gICAgICovXG4gIGF0dGFjaFRvQW5jaG9yOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBUcmlnZ2VyaW5nIGVsZW1lbnQgZm9yIHdoaWNoIHRvIGFsaWduIHRoZSBwb3BvdmVyIHRvXG4gICAgICovXG4gIGJ1dHRvbjogUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLFxuICBidXR0b25SZWY6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogQ2FsbGJhY2sgdG8gaGFuZGxlIGhpZGluZyBvZiB0aGUgcG9wb3ZlclxuICAgICAqL1xuICBjbG9zZVBvcG92ZXI6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG5cbiAgLyoqXG4gICAgICogUmVzdHJpY3QgdGhlIHBvcG92ZXIncyBwb3NpdGlvbiB3aXRoaW4gdGhpcyBlbGVtZW50XG4gICAgICovXG4gIGNvbnRhaW5lcjogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBDU1MgZGlzcGxheSB0eXBlIGZvciBib3RoIHRoZSBwb3BvdmVyIGFuZCBhbmNob3JcbiAgICAgKi9cbiAgZGlzcGxheTogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBPYmplY3Qgb2YgcHJvcHMgcGFzc2VkIHRvIEV1aUZvY3VzVHJhcFxuICAgICAqL1xuICBmb2N1c1RyYXBQcm9wczogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBTaG93IGFycm93IGluZGljYXRpbmcgdG8gb3JpZ2luYXRpbmcgYnV0dG9uXG4gICAgICovXG4gIGhhc0Fycm93OiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBTcGVjaWZpZXMgd2hhdCBlbGVtZW50IHNob3VsZCBpbml0aWFsbHkgaGF2ZSBmb2N1czsgQ2FuIGJlIGEgRE9NXG4gICAgICogbm9kZSwgb3IgYSBzZWxlY3RvciBzdHJpbmcgKHdoaWNoIHdpbGwgYmUgcGFzc2VkIHRvXG4gICAgICogZG9jdW1lbnQucXVlcnlTZWxlY3RvcigpIHRvIGZpbmQgdGhlIERPTSBub2RlKSwgb3IgYSBmdW5jdGlvbiB0aGF0XG4gICAgICogcmV0dXJucyBhIERPTSBub2RlLlxuICAgICAqXG4gICAgICogSWYgbm90IHBhc3NlZCwgaW5pdGlhbCBmb2N1cyBkZWZhdWx0cyB0byB0aGUgcG9wb3ZlciBwYW5lbC5cbiAgICAgKi9cbiAgaW5pdGlhbEZvY3VzOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIFBhc3NlZCBkaXJlY3RseSB0byBFdWlQb3J0YWwgZm9yIERPTSBwb3NpdGlvbmluZy4gQm90aCBwcm9wZXJ0aWVzIGFyZVxuICAgICAqIHJlcXVpcmVkIGlmIHByb3AgaXMgc3BlY2lmaWVkXG4gICAgICovXG4gIGluc2VydDogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBzaWJsaW5nOiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsXG4gICAgcG9zaXRpb246IFByb3BUeXBlcy5vbmVPZihbXCJiZWZvcmVcIiwgXCJhZnRlclwiXSkuaXNSZXF1aXJlZFxuICB9KSxcblxuICAvKipcbiAgICAgKiBWaXNpYmlsaXR5IHN0YXRlIG9mIHRoZSBwb3BvdmVyXG4gICAgICovXG4gIGlzT3BlbjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogVHJhcHMgdGFiIGZvY3VzIHdpdGhpbiB0aGUgcG9wb3ZlciBjb250ZW50c1xuICAgICAqL1xuICBvd25Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogQ3VzdG9tIGNsYXNzIGFkZGVkIHRvIHRoZSBFdWlQYW5lbCBjb250YWluaW5nIHRoZSBwb3BvdmVyIGNvbnRlbnRzXG4gICAgICovXG4gIHBhbmVsQ2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAqIEV1aVBhbmVsIHBhZGRpbmcgb24gYWxsIHNpZGVzXG4gICAgICovXG4gIHBhbmVsUGFkZGluZ1NpemU6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogU3RhbmRhcmQgRE9NIGBzdHlsZWAgYXR0cmlidXRlLiBQYXNzZWQgdG8gdGhlIEV1aVBhbmVsXG4gICAgICovXG4gIHBhbmVsU3R5bGU6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogT2JqZWN0IG9mIHByb3BzIHBhc3NlZCB0byBFdWlQYW5lbC4gU2VlICNFdWlQb3BvdmVyUGFuZWxQcm9wc1xuICAgICAqL1xuICBwYW5lbFByb3BzOiBQcm9wVHlwZXMuYW55LFxuICBwYW5lbFJlZjogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBPcHRpb25hbCBzY3JlZW4gcmVhZGVyIGluc3RydWN0aW9ucyB0byBhbm5vdW5jZSB1cG9uIHBvcG92ZXIgb3BlbixcbiAgICAgKiBpbiBhZGRpdGlvbiB0byBFVUkncyBkZWZhdWx0IHBvcG92ZXIgaW5zdHJ1Y3Rpb25zIGZvciBFc2NhcGUgb24gY2xvc2UuXG4gICAgICogVXNlZnVsIGZvciBwb3BvdmVycyB0aGF0IG1heSBoYXZlIGFkZGl0aW9uYWwga2V5Ym9hcmQgY2FwYWJpbGl0aWVzIHN1Y2ggYXNcbiAgICAgKiBhcnJvdyBuYXZpZ2F0aW9uLlxuICAgICAqL1xuICBwb3BvdmVyU2NyZWVuUmVhZGVyVGV4dDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkXSksXG4gIHBvcG92ZXJSZWY6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogV2hlbiBgdHJ1ZWAsIHRoZSBwb3BvdmVyJ3MgcG9zaXRpb24gaXMgcmUtY2FsY3VsYXRlZCB3aGVuIHRoZSB1c2VyXG4gICAgICogc2Nyb2xscywgdGhpcyBzdXBwb3J0cyBoYXZpbmcgZml4ZWQtcG9zaXRpb24gcG9wb3ZlciBhbmNob3JzLiBXaGVuIG5lc3RpbmdcbiAgICAgKiBhbiBgRXVpUG9wb3ZlcmAgaW4gYSBzY3JvbGxhYmxlIGNvbnRhaW5lciwgYHJlcG9zaXRpb25PblNjcm9sbGAgc2hvdWxkIGJlIGB0cnVlYFxuICAgICAqL1xuICByZXBvc2l0aW9uT25TY3JvbGw6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIEJ5IGRlZmF1bHQsIHBvcG92ZXIgY29udGVudCBpbmhlcml0cyB0aGUgei1pbmRleCBvZiB0aGUgYW5jaG9yXG4gICAgICogY29tcG9uZW50OyBwYXNzIGB6SW5kZXhgIHRvIG92ZXJyaWRlXG4gICAgICovXG4gIHpJbmRleDogUHJvcFR5cGVzLm51bWJlcixcblxuICAvKipcbiAgICAgKiBGdW5jdGlvbiBjYWxsYmFjayBmb3Igd2hlbiB0aGUgZm9jdXMgdHJhcCBpcyBkZWFjdGl2YXRlZFxuICAgICAqL1xuICBvblRyYXBEZWFjdGl2YXRpb246IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogRGlzdGFuY2UgYXdheSBmcm9tIHRoZSBhbmNob3IgdGhhdCB0aGUgcG9wb3ZlciB3aWxsIHJlbmRlclxuICAgICAqL1xuICBvZmZzZXQ6IFByb3BUeXBlcy5udW1iZXIsXG5cbiAgLyoqXG4gICAgICogTWluaW11bSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBwb3BvdmVyIGFuZCB0aGUgYm91bmRpbmcgY29udGFpbmVyO1xuICAgICAqIFBhc3MgYW4gYXJyYXkgb2YgNCB2YWx1ZXMgdG8gYWRqdXN0IGVhY2ggc2lkZSBkaWZmZXJlbnRseTogYFt0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnRdYFxuICAgICAqIERlZmF1bHQgaXMgMTZcbiAgICAgKi9cbiAgYnVmZmVyOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZF0pLFxuXG4gIC8qKlxuICAgICAqIEVsZW1lbnQgdG8gcGFzcyBhcyB0aGUgY2hpbGQgZWxlbWVudCBvZiB0aGUgYXJyb3c7XG4gICAgICogVXNlIGNhc2UgaXMgdHlwaWNhbGx5IGxpbWl0ZWQgdG8gYW4gYWNjb21wYW55aW5nIGBFdWlCZWFjb25gXG4gICAgICovXG4gIGFycm93Q2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgICAqIFByb3ZpZGUgYSBuYW1lIHRvIHRoZSBwb3BvdmVyIHBhbmVsXG4gICAgICovXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAqIEFsdGVybmF0aXZlIG9wdGlvbiB0byBgYXJpYS1sYWJlbGAgdGhhdCB0YWtlcyBhbiBgaWRgLlxuICAgICAqIFVzdWFsbHkgdGFrZXMgdGhlIGBpZGAgb2YgdGhlIHBvcG92ZXIgdGl0bGVcbiAgICAgKi9cbiAgXCJhcmlhLWxhYmVsbGVkYnlcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbn07IiwgImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBFdWlPYnNlcnZlciB9IGZyb20gJy4uL29ic2VydmVyJztcbmV4cG9ydCB2YXIgRXVpTXV0YXRpb25PYnNlcnZlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0V1aU9ic2VydmVyKSB7XG4gIF9pbmhlcml0cyhFdWlNdXRhdGlvbk9ic2VydmVyLCBfRXVpT2JzZXJ2ZXIpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoRXVpTXV0YXRpb25PYnNlcnZlcik7XG5cbiAgZnVuY3Rpb24gRXVpTXV0YXRpb25PYnNlcnZlcigpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpTXV0YXRpb25PYnNlcnZlcik7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbC5hcHBseShfc3VwZXIsIFt0aGlzXS5jb25jYXQoYXJncykpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm5hbWVcIiwgJ0V1aU11dGF0aW9uT2JzZXJ2ZXInKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbk11dGF0aW9uXCIsIGZ1bmN0aW9uIChyZWNvcmRzLCBvYnNlcnZlcikge1xuICAgICAgX3RoaXMucHJvcHMub25NdXRhdGlvbihyZWNvcmRzLCBvYnNlcnZlcik7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiYmVnaW5PYnNlcnZlXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBjaGlsZE5vZGUgPSBfdGhpcy5jaGlsZE5vZGU7XG4gICAgICBfdGhpcy5vYnNlcnZlciA9IG1ha2VNdXRhdGlvbk9ic2VydmVyKGNoaWxkTm9kZSwgX3RoaXMucHJvcHMub2JzZXJ2ZXJPcHRpb25zLCBfdGhpcy5vbk11dGF0aW9uKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHJldHVybiBFdWlNdXRhdGlvbk9ic2VydmVyO1xufShFdWlPYnNlcnZlcik7XG5cbnZhciBtYWtlTXV0YXRpb25PYnNlcnZlciA9IGZ1bmN0aW9uIG1ha2VNdXRhdGlvbk9ic2VydmVyKG5vZGUsIF9vYnNlcnZlck9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gIC8vIElFMTEgYW5kIHRoZSBNdXRhdGlvbk9ic2VydmVyIHBvbHlmaWxsIHVzZWQgaW4gS2liYW5hIChmb3IgSmVzdCkgaW1wbGVtZW50XG4gIC8vIGFuIG9sZGVyIHNwZWMgaW4gd2hpY2ggc3BlY2lmeWluZyBgYXR0cmlidXRlT2xkVmFsdWVgIG9yIGBhdHRyaWJ1dGVGaWx0ZXJgXG4gIC8vIHdpdGhvdXQgc3BlY2lmeWluZyBgYXR0cmlidXRlc2AgcmVzdWx0cyBpbiBhIGBTeW50YXhFcnJvcmAuXG4gIC8vIFRoZSBmb2xsb3dpbmcgbG9naWMgcGF0Y2hlcyB0aGUgbmV3ZXIgc3BlYyBpbiB3aGljaCBgYXR0cmlidXRlczogdHJ1ZWAgY2FuIGJlXG4gIC8vIGltcGxpZWQgd2hlbiBhcHByb3ByaWF0ZSAoYGF0dHJpYnV0ZU9sZFZhbHVlYCBvciBgYXR0cmlidXRlRmlsdGVyYCBpcyBzcGVjaWZpZWQpLlxuICB2YXIgb2JzZXJ2ZXJPcHRpb25zID0gX29iamVjdFNwcmVhZCh7fSwgX29ic2VydmVyT3B0aW9ucyk7XG5cbiAgdmFyIG5lZWRzQXR0cmlidXRlcyA9IG9ic2VydmVyT3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnYXR0cmlidXRlT2xkVmFsdWUnKSB8fCBvYnNlcnZlck9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2F0dHJpYnV0ZUZpbHRlcicpO1xuXG4gIGlmIChuZWVkc0F0dHJpYnV0ZXMgJiYgIW9ic2VydmVyT3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnYXR0cmlidXRlcycpKSB7XG4gICAgb2JzZXJ2ZXJPcHRpb25zLmF0dHJpYnV0ZXMgPSB0cnVlO1xuICB9XG5cbiAgdmFyIG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoY2FsbGJhY2spO1xuICBvYnNlcnZlci5vYnNlcnZlKG5vZGUsIG9ic2VydmVyT3B0aW9ucyk7XG4gIHJldHVybiBvYnNlcnZlcjtcbn07XG5cbmV4cG9ydCB2YXIgdXNlTXV0YXRpb25PYnNlcnZlciA9IGZ1bmN0aW9uIHVzZU11dGF0aW9uT2JzZXJ2ZXIoY29udGFpbmVyLCBjYWxsYmFjaywgb2JzZXJ2ZXJPcHRpb25zKSB7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGNvbnRhaW5lciAhPSBudWxsKSB7XG4gICAgICB2YXIgb2JzZXJ2ZXIgPSBtYWtlTXV0YXRpb25PYnNlcnZlcihjb250YWluZXIsIG9ic2VydmVyT3B0aW9ucywgY2FsbGJhY2spO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgIH07XG4gICAgfVxuICB9LCAvLyBpZ25vcmUgY2hhbmdpbmcgb2JzZXJ2ZXJPcHRpb25zXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICBbY29udGFpbmVyLCBjYWxsYmFja10pO1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgQ2hpbGRyZW4sIGNsb25lRWxlbWVudCwgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgaHRtbElkR2VuZXJhdG9yIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYWNjZXNzaWJpbGl0eSc7XG5leHBvcnQgdmFyIEV1aU91dHNpZGVDbGlja0RldGVjdG9yID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhFdWlPdXRzaWRlQ2xpY2tEZXRlY3RvciwgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihFdWlPdXRzaWRlQ2xpY2tEZXRlY3Rvcik7XG5cbiAgLy8gV2UgYXJlIHdvcmtpbmcgd2l0aCB0aGUgYXNzdW1wdGlvbiB0aGF0IGEgY2xpY2sgZXZlbnQgaXNcbiAgLy8gZXF1aXZhbGVudCB0byBhIHNlcXVlbnRpYWwsIGNvbXBvdW5kIHByZXNzIGFuZCByZWxlYXNlIG9mXG4gIC8vIHRoZSBwb2ludGluZyBkZXZpY2UgKG1vdXNlLCBmaW5nZXIsIHN0eWx1cywgZXRjLikuXG4gIC8vIEEgY2xpY2sgZXZlbnQncyB0YXJnZXQgY2FuIGJlIGltcHJlY2lzZSwgYXMgdGhlIHZhbHVlIHdpbGwgYmVcbiAgLy8gdGhlIGNsb3Nlc3QgY29tbW9uIGFuY2VzdG9yIG9mIHRoZSBwcmVzcyAobW91c2Vkb3duLCB0b3VjaHN0YXJ0KVxuICAvLyBhbmQgcmVsZWFzZSAobW91c2V1cCwgdG91Y2hlbmQpIGV2ZW50cyAob2Z0ZW4gPGJvZHkgLz4pIGlmXG4gIC8vIHRoZSB0aGUgdGFyZ2V0IG9mIGVhY2ggZXZlbnQgZGlmZmVycy5cbiAgLy8gV2UgbmVlZCB0aGUgYWN0dWFsIGV2ZW50IHRhcmdldHMgdG8gbWFrZSB0aGUgY29ycmVjdCBkZWNpc2lvbnNcbiAgLy8gYWJvdXQgdXNlciBpbnRlbnRpb24uIFNvLCBjb25zaWRlciB0aGUgZG93bi9zdGFydCBhbmQgdXAvZW5kXG4gIC8vIGl0ZW1zIGJlbG93IGFzIHRoZSBkZWNvbnN0cnVjdGlvbiBvZiBhIGNsaWNrIGV2ZW50LlxuICBmdW5jdGlvbiBFdWlPdXRzaWRlQ2xpY2tEZXRlY3Rvcihwcm9wcykge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlPdXRzaWRlQ2xpY2tEZXRlY3Rvcik7XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHByb3BzKTsgLy8gdGhlIGlkIGlzIHVzZWQgdG8gaWRlbnRpZnkgd2hpY2ggRXVpT3V0c2lkZUNsaWNrRGV0ZWN0b3JcbiAgICAvLyBpcyB0aGUgc291cmNlIG9mIGEgY2xpY2sgZXZlbnQ7IGFzIHRoZSBjbGljayBldmVudCBidWJibGVzXG4gICAgLy8gdXAgYW5kIHJlYWNoZXMgdGhlIGNsaWNrIGRldGVjdG9yJ3MgY2hpbGQgY29tcG9uZW50IHRoZVxuICAgIC8vIGlkIHZhbHVlIGlzIHN0YW1wZWQgb24gdGhlIGV2ZW50LiBUaGlzIGlkIGlzIGluc3BlY3RlZFxuICAgIC8vIGluIHRoZSBkb2N1bWVudCdzIGNsaWNrIGhhbmRsZXIsIGFuZCBpZiB0aGUgaWQgZG9lc24ndFxuICAgIC8vIGV4aXN0IG9yIGRvZXNuJ3QgbWF0Y2ggdGhpcyBkZXRlY3RvcidzIGlkLCB0aGVuIHRyaWdnZXJcbiAgICAvLyB0aGUgb3V0c2lkZUNsaWNrIGNhbGxiYWNrLlxuICAgIC8vXG4gICAgLy8gVGFraW5nIHRoaXMgYXBwcm9hY2ggaW5zdGVhZCBvZiBjaGVja2luZyBpZiB0aGUgZXZlbnQnc1xuICAgIC8vIHRhcmdldCBlbGVtZW50IGV4aXN0cyBpbiB0aGlzIGNvbXBvbmVudCdzIERPTSBzdWItdHJlZSBpc1xuICAgIC8vIG5lY2Vzc2FyeSBmb3IgaGFuZGxpbmcgY2xpY2tzIG9yaWdpbmF0aW5nIGZyb20gY2hpbGRyZW5cbiAgICAvLyByZW5kZXJlZCB0aHJvdWdoIFJlYWN0J3MgcG9ydGFscyAoRXVpUG9ydGFsKS4gVGhlIGlkIHRyYWNraW5nXG4gICAgLy8gd29ya3MgYmVjYXVzZSBSZWFjdCBndWFyYW50ZWVzIHRoZSBldmVudCBidWJibGVzIHRocm91Z2ggdGhlXG4gICAgLy8gdmlydHVhbCBET00gYW5kIGV4ZWN1dGVzIEV1aUNsaWNrRGV0ZWN0b3IncyBvbkNsaWNrIGhhbmRsZXIsXG4gICAgLy8gc3RhbXBpbmcgdGhlIGlkIGV2ZW4gdGhvdWdoIHRoZSBldmVudCBvcmlnaW5hdGVzIG91dHNpZGVcbiAgICAvLyB0aGlzIGNvbXBvbmVudCdzIHJlaWZpZWQgRE9NIHRyZWUuXG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaWRcIiwgdm9pZCAwKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJjYXB0dXJlZERvd25JZHNcIiwgdm9pZCAwKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkNsaWNrT3V0c2lkZVwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgaXNEaXNhYmxlZCA9IF90aGlzJHByb3BzLmlzRGlzYWJsZWQsXG4gICAgICAgICAgb25PdXRzaWRlQ2xpY2sgPSBfdGhpcyRwcm9wcy5vbk91dHNpZGVDbGljaztcblxuICAgICAgaWYgKGlzRGlzYWJsZWQpIHtcbiAgICAgICAgX3RoaXMuY2FwdHVyZWREb3duSWRzID0gW107XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIGV2ZW50ID0gZTtcblxuICAgICAgaWYgKGV2ZW50LmV1aUdlbmVyYXRlZEJ5ICYmIGV2ZW50LmV1aUdlbmVyYXRlZEJ5LmluY2x1ZGVzKF90aGlzLmlkKSB8fCBfdGhpcy5jYXB0dXJlZERvd25JZHMuaW5jbHVkZXMoX3RoaXMuaWQpKSB7XG4gICAgICAgIF90aGlzLmNhcHR1cmVkRG93bklkcyA9IFtdO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIF90aGlzLmNhcHR1cmVkRG93bklkcyA9IFtdO1xuICAgICAgcmV0dXJuIG9uT3V0c2lkZUNsaWNrKGV2ZW50KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkNoaWxkQ2xpY2tcIiwgZnVuY3Rpb24gKGV2ZW50LCBjYikge1xuICAgICAgLy8gdG8gc3VwcG9ydCBuZXN0ZWQgY2xpY2sgZGV0ZWN0b3JzLCBidWlsZCBhbiBhcnJheVxuICAgICAgLy8gb2YgZGV0ZWN0b3IgaWRzIHRoYXQgaGF2ZSBiZWVuIGVuY291bnRlcmVkO1xuICAgICAgaWYgKGV2ZW50Lm5hdGl2ZUV2ZW50Lmhhc093blByb3BlcnR5KCdldWlHZW5lcmF0ZWRCeScpKSB7XG4gICAgICAgIGV2ZW50Lm5hdGl2ZUV2ZW50LmV1aUdlbmVyYXRlZEJ5LnB1c2goX3RoaXMuaWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXZlbnQubmF0aXZlRXZlbnQuZXVpR2VuZXJhdGVkQnkgPSBbX3RoaXMuaWRdO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2IpIGNiKGV2ZW50KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkNoaWxkTW91c2VEb3duXCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgX3RoaXMub25DaGlsZENsaWNrKGV2ZW50LCBmdW5jdGlvbiAoZSkge1xuICAgICAgICB2YXIgbmF0aXZlRXZlbnQgPSBlLm5hdGl2ZUV2ZW50O1xuICAgICAgICBfdGhpcy5jYXB0dXJlZERvd25JZHMgPSBuYXRpdmVFdmVudC5ldWlHZW5lcmF0ZWRCeTtcbiAgICAgICAgaWYgKF90aGlzLnByb3BzLm9uTW91c2VEb3duKSBfdGhpcy5wcm9wcy5vbk1vdXNlRG93bihlKTtcbiAgICAgICAgaWYgKF90aGlzLnByb3BzLm9uVG91Y2hTdGFydCkgX3RoaXMucHJvcHMub25Ub3VjaFN0YXJ0KGUpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25DaGlsZE1vdXNlVXBcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBfdGhpcy5vbkNoaWxkQ2xpY2soZXZlbnQsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIGlmIChfdGhpcy5wcm9wcy5vbk1vdXNlVXApIF90aGlzLnByb3BzLm9uTW91c2VVcChlKTtcbiAgICAgICAgaWYgKF90aGlzLnByb3BzLm9uVG91Y2hFbmQpIF90aGlzLnByb3BzLm9uVG91Y2hFbmQoZSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF90aGlzLmlkID0gaHRtbElkR2VuZXJhdG9yKCkoKTtcbiAgICBfdGhpcy5jYXB0dXJlZERvd25JZHMgPSBbXTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoRXVpT3V0c2lkZUNsaWNrRGV0ZWN0b3IsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMub25DbGlja091dHNpZGUpO1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCB0aGlzLm9uQ2xpY2tPdXRzaWRlKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50V2lsbFVubW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5vbkNsaWNrT3V0c2lkZSk7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIHRoaXMub25DbGlja091dHNpZGUpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIHByb3BzID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCB0aGlzLnByb3BzLmNoaWxkcmVuLnByb3BzKSwge1xuICAgICAgICBvbk1vdXNlRG93bjogdGhpcy5vbkNoaWxkTW91c2VEb3duLFxuICAgICAgICBvblRvdWNoU3RhcnQ6IHRoaXMub25DaGlsZE1vdXNlRG93bixcbiAgICAgICAgb25Nb3VzZVVwOiB0aGlzLm9uQ2hpbGRNb3VzZVVwLFxuICAgICAgICBvblRvdWNoRW5kOiB0aGlzLm9uQ2hpbGRNb3VzZVVwXG4gICAgICB9KTtcblxuICAgICAgdmFyIGNoaWxkID0gQ2hpbGRyZW4ub25seSh0aGlzLnByb3BzLmNoaWxkcmVuKTtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovY2xvbmVFbGVtZW50KGNoaWxkLCBwcm9wcyk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEV1aU91dHNpZGVDbGlja0RldGVjdG9yO1xufShDb21wb25lbnQpO1xuRXVpT3V0c2lkZUNsaWNrRGV0ZWN0b3IucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICAgKiBSZWFjdE5vZGUgdG8gcmVuZGVyIGFzIHRoaXMgY29tcG9uZW50J3MgY29udGVudFxuICAgICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZCxcbiAgb25PdXRzaWRlQ2xpY2s6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGlzRGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICBvbk1vdXNlRG93bjogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uTW91c2VVcDogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uVG91Y2hTdGFydDogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uVG91Y2hFbmQ6IFByb3BUeXBlcy5mdW5jXG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJwb3NpdGlvblwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBldWlQb3BvdmVyQXJyb3dTdHlsZXMgfSBmcm9tICcuL19wb3BvdmVyX2Fycm93LnN0eWxlcyc7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIFBPU0lUSU9OUyA9IFsndG9wJywgJ2xlZnQnLCAncmlnaHQnLCAnYm90dG9tJ107XG5leHBvcnQgdmFyIEV1aVBvcG92ZXJBcnJvdyA9IGZ1bmN0aW9uIEV1aVBvcG92ZXJBcnJvdyhfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBwb3NpdGlvbiA9IF9yZWYucG9zaXRpb24sXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgdmFyIHN0eWxlcyA9IGV1aVBvcG92ZXJBcnJvd1N0eWxlcyhldWlUaGVtZSk7XG4gIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aVBvcG92ZXJBcnJvdywgc3R5bGVzW3Bvc2l0aW9uXV07XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICBcImRhdGEtcG9wb3Zlci1hcnJvd1wiOiBwb3NpdGlvbixcbiAgICBjc3M6IGNzc1N0eWxlc1xuICB9LCByZXN0KSwgY2hpbGRyZW4pO1xufTtcbkV1aVBvcG92ZXJBcnJvdy5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgcG9zaXRpb246IFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZFxufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGV1aUJhY2tncm91bmRDb2xvciwgbG9naWNhbHMsIGxvZ2ljYWxTaXplQ1NTIH0gZnJvbSAnLi4vLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuZXhwb3J0IHZhciBwb3BvdmVyQXJyb3dTaXplID0gJ20nO1xuZXhwb3J0IHZhciBldWlQb3BvdmVyQXJyb3dTdHlsZXMgPSBmdW5jdGlvbiBldWlQb3BvdmVyQXJyb3dTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTsgLy8gTWF0Y2ggdGhlIGJhY2tncm91bmQgY29sb3Igb2YgcGFuZWxzXG5cbiAgdmFyIGJvcmRlckNvbG9yID0gZXVpQmFja2dyb3VuZENvbG9yKGV1aVRoZW1lQ29udGV4dCwgJ3BsYWluJyk7XG4gIHZhciBhcnJvd1NpemUgPSBldWlUaGVtZS5zaXplW3BvcG92ZXJBcnJvd1NpemVdO1xuICByZXR1cm4ge1xuICAgIC8vIEJhc2VcbiAgICBldWlQb3BvdmVyQXJyb3c6IC8qI19fUFVSRV9fKi9jc3MoXCJwb3NpdGlvbjphYnNvbHV0ZTtcIiwgbG9naWNhbFNpemVDU1MoMCwgMCksIFwiJjpiZWZvcmV7Y29udGVudDonJztwb3NpdGlvbjphYnNvbHV0ZTtcIiwgbG9naWNhbFNpemVDU1MoMCwgMCksIFwiO307bGFiZWw6ZXVpUG9wb3ZlckFycm93O1wiKSxcbiAgICAvLyBQT1NJVElPTlNcbiAgICB0b3A6IC8qI19fUFVSRV9fKi9jc3MoXCImOmJlZm9yZXtcIiwgbG9naWNhbHMuYm90dG9tLCBcIjotXCIsIGFycm93U2l6ZSwgXCI7XCIsIGxvZ2ljYWxzWydib3JkZXItbGVmdCddLCBcIjpcIiwgYXJyb3dTaXplLCBcIiBzb2xpZCB0cmFuc3BhcmVudDtcIiwgbG9naWNhbHNbJ2JvcmRlci1yaWdodCddLCBcIjpcIiwgYXJyb3dTaXplLCBcIiBzb2xpZCB0cmFuc3BhcmVudDtcIiwgbG9naWNhbHNbJ2JvcmRlci10b3AnXSwgXCI6XCIsIGFycm93U2l6ZSwgXCIgc29saWQgXCIsIGJvcmRlckNvbG9yLCBcIjt9O2xhYmVsOnRvcDtcIiksXG4gICAgYm90dG9tOiAvKiNfX1BVUkVfXyovY3NzKFwiJjpiZWZvcmV7XCIsIGxvZ2ljYWxzLnRvcCwgXCI6LVwiLCBhcnJvd1NpemUsIFwiO1wiLCBsb2dpY2Fsc1snYm9yZGVyLWxlZnQnXSwgXCI6XCIsIGFycm93U2l6ZSwgXCIgc29saWQgdHJhbnNwYXJlbnQ7XCIsIGxvZ2ljYWxzWydib3JkZXItcmlnaHQnXSwgXCI6XCIsIGFycm93U2l6ZSwgXCIgc29saWQgdHJhbnNwYXJlbnQ7XCIsIGxvZ2ljYWxzWydib3JkZXItYm90dG9tJ10sIFwiOlwiLCBhcnJvd1NpemUsIFwiIHNvbGlkIFwiLCBib3JkZXJDb2xvciwgXCI7fTtsYWJlbDpib3R0b207XCIpLFxuICAgIGxlZnQ6IC8qI19fUFVSRV9fKi9jc3MoXCImOmJlZm9yZXtcIiwgbG9naWNhbHMudG9wLCBcIjo1MCU7XCIsIGxvZ2ljYWxzLnJpZ2h0LCBcIjotXCIsIGFycm93U2l6ZSwgXCI7XCIsIGxvZ2ljYWxzWydib3JkZXItdG9wJ10sIFwiOlwiLCBhcnJvd1NpemUsIFwiIHNvbGlkIHRyYW5zcGFyZW50O1wiLCBsb2dpY2Fsc1snYm9yZGVyLWJvdHRvbSddLCBcIjpcIiwgYXJyb3dTaXplLCBcIiBzb2xpZCB0cmFuc3BhcmVudDtcIiwgbG9naWNhbHNbJ2JvcmRlci1sZWZ0J10sIFwiOlwiLCBhcnJvd1NpemUsIFwiIHNvbGlkIFwiLCBib3JkZXJDb2xvciwgXCI7fTtsYWJlbDpsZWZ0O1wiKSxcbiAgICByaWdodDogLyojX19QVVJFX18qL2NzcyhcIiY6YmVmb3Jle1wiLCBsb2dpY2Fscy50b3AsIFwiOjUwJTtcIiwgbG9naWNhbHMubGVmdCwgXCI6LVwiLCBhcnJvd1NpemUsIFwiO1wiLCBsb2dpY2Fsc1snYm9yZGVyLXRvcCddLCBcIjpcIiwgYXJyb3dTaXplLCBcIiBzb2xpZCB0cmFuc3BhcmVudDtcIiwgbG9naWNhbHNbJ2JvcmRlci1ib3R0b20nXSwgXCI6XCIsIGFycm93U2l6ZSwgXCIgc29saWQgdHJhbnNwYXJlbnQ7XCIsIGxvZ2ljYWxzWydib3JkZXItcmlnaHQnXSwgXCI6XCIsIGFycm93U2l6ZSwgXCIgc29saWQgXCIsIGJvcmRlckNvbG9yLCBcIjt9O2xhYmVsOnJpZ2h0O1wiKVxuICB9O1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGxvZ2ljYWxDU1MgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5leHBvcnQgdmFyIGV1aVBvcG92ZXJTdHlsZXMgPSBmdW5jdGlvbiBldWlQb3BvdmVyU3R5bGVzKCkge1xuICByZXR1cm4ge1xuICAgIC8vIEJhc2UgYW5jaG9yIHdyYXBwZXJcbiAgICBldWlQb3BvdmVyOiAvKiNfX1BVUkVfXyovY3NzKFwicG9zaXRpb246cmVsYXRpdmU7dmVydGljYWwtYWxpZ246bWlkZGxlO1wiLCBsb2dpY2FsQ1NTKCdtYXgtd2lkdGgnLCAnMTAwJScpLCBcIjs7bGFiZWw6ZXVpUG9wb3ZlcjtcIilcbiAgfTtcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImlzT3BlblwiLCBcImlzQXR0YWNoZWRcIiwgXCJwb3NpdGlvblwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikgeyByZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF9ub25JdGVyYWJsZVNwcmVhZCgpOyB9XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkoaXRlcikgeyBpZiAodHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBpdGVyW1N5bWJvbC5pdGVyYXRvcl0gIT0gbnVsbCB8fCBpdGVyW1wiQEBpdGVyYXRvclwiXSAhPSBudWxsKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShhcnIpOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUV1aVRoZW1lIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpUGFuZWwgfSBmcm9tICcuLi8uLi9wYW5lbC9wYW5lbCc7XG5pbXBvcnQgeyBldWlQb3BvdmVyUGFuZWxTdHlsZXMgfSBmcm9tICcuL19wb3BvdmVyX3BhbmVsLnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlQb3BvdmVyUGFuZWxDb250ZXh0ID0gLyojX19QVVJFX18qL2NyZWF0ZUNvbnRleHQoe1xuICBwYWRkaW5nU2l6ZTogJ2wnXG59KTtcblxuLyoqXG4gKiAqSU5URVJOQUwgT05MWSpcbiAqIFB1cmVseSBmb3IgcmUtdXNlIG9mIHN0eWxpbmdcbiAqL1xuZXhwb3J0IHZhciBFdWlQb3BvdmVyUGFuZWwgPSBmdW5jdGlvbiBFdWlQb3BvdmVyUGFuZWwoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBpc09wZW4gPSBfcmVmLmlzT3BlbixcbiAgICAgIGlzQXR0YWNoZWQgPSBfcmVmLmlzQXR0YWNoZWQsXG4gICAgICBwb3NpdGlvbiA9IF9yZWYucG9zaXRpb24sXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIHBhbmVsQ29udGV4dCA9IHVzZUNvbnRleHQoRXVpUG9wb3ZlclBhbmVsQ29udGV4dCk7XG4gIGlmIChyZXN0LnBhZGRpbmdTaXplKSBwYW5lbENvbnRleHQucGFkZGluZ1NpemUgPSByZXN0LnBhZGRpbmdTaXplO1xuICB2YXIgZXVpVGhlbWVDb250ZXh0ID0gdXNlRXVpVGhlbWUoKTsgLy8gVXNpbmcgQkVNIGNoaWxkIGNsYXNzIGZvciBCV0NcblxuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVBvcG92ZXJfX3BhbmVsJywgY2xhc3NOYW1lKTtcbiAgdmFyIHN0eWxlcyA9IGV1aVBvcG92ZXJQYW5lbFN0eWxlcyhldWlUaGVtZUNvbnRleHQpO1xuICB2YXIgcGFuZWxDU1MgPSBbc3R5bGVzLmV1aVBvcG92ZXJfX3BhbmVsLCBpc09wZW4gJiYgc3R5bGVzLmlzT3BlbiwgaXNPcGVuICYmIHBvc2l0aW9uICYmIHN0eWxlc1twb3NpdGlvbl1dO1xuXG4gIGlmIChpc0F0dGFjaGVkKSB7XG4gICAgcGFuZWxDU1MgPSBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KHBhbmVsQ1NTKSwgW2lzT3BlbiAmJiBzdHlsZXMuYXR0YWNoZWQuaXNPcGVuLCBwb3NpdGlvbiAmJiBzdHlsZXMuYXR0YWNoZWRbcG9zaXRpb25dXSk7XG4gIH1cblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlQb3BvdmVyUGFuZWxDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IHBhbmVsQ29udGV4dFxuICB9LCBfX19FbW90aW9uSlNYKEV1aVBhbmVsLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIGNzczogcGFuZWxDU1MsXG4gICAgXCJkYXRhLXBvcG92ZXItcGFuZWxcIjogdHJ1ZSxcbiAgICBcImRhdGEtcG9wb3Zlci1vcGVuXCI6IGlzT3BlbiB8fCB1bmRlZmluZWRcbiAgfSwgcmVzdCksIGNoaWxkcmVuKSk7XG59O1xuRXVpUG9wb3ZlclBhbmVsLnByb3BUeXBlcyA9IHtcbiAgZWxlbWVudDogUHJvcFR5cGVzLm9uZU9mKFtcImRpdlwiXSksXG5cbiAgLyoqXG4gICAgICogQWRkcyBhIG1lZGl1bSBzaGFkb3cgdG8gdGhlIHBhbmVsO1xuICAgICAqIE9ubHkgd29ya3Mgd2hlbiBgY29sb3I9XCJwbGFpblwiYFxuICAgICAqL1xuICBoYXNTaGFkb3c6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIEFkZHMgYSBzbGlnaHQgMXB4IGJvcmRlciBvbiBhbGwgZWRnZXMuXG4gICAgICogT25seSB3b3JrcyB3aGVuIGBjb2xvcj1cInBsYWluIHwgdHJhbnNwYXJlbnRcImBcbiAgICAgKi9cbiAgaGFzQm9yZGVyOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBQYWRkaW5nIGZvciBhbGwgZm91ciBzaWRlc1xuICAgICAqL1xuICBwYWRkaW5nU2l6ZTogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBDb3JuZXIgYm9yZGVyIHJhZGl1c1xuICAgICAqL1xuICBib3JkZXJSYWRpdXM6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogV2hlbiB0cnVlIHRoZSBwYW5lbCB3aWxsIGdyb3cgaW4gaGVpZ2h0IHRvIG1hdGNoIGBFdWlGbGV4SXRlbWBcbiAgICAgKi9cbiAgZ3JvdzogUHJvcFR5cGVzLmJvb2wsXG4gIHBhbmVsUmVmOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIEJhY2tncm91bmQgY29sb3Igb2YgdGhlIHBhbmVsO1xuICAgICAqIFVzdWFsbHkgYSBsaWdodGVuZWQgZm9ybSBvZiB0aGUgYnJhbmQgY29sb3JzXG4gICAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMuYW55LFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGlzT3BlbjogUHJvcFR5cGVzLmJvb2wsXG4gIGlzQXR0YWNoZWQ6IFByb3BUeXBlcy5ib29sLFxuICBwb3NpdGlvbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2YoW251bGxdKV0pXG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJwYWRkaW5nU2l6ZVwiLCBcImJvcmRlclJhZGl1c1wiLCBcImNvbG9yXCIsIFwiaGFzU2hhZG93XCIsIFwiaGFzQm9yZGVyXCIsIFwiZ3Jvd1wiLCBcInBhbmVsUmVmXCIsIFwiZWxlbWVudFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUV1aVRoZW1lIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgdXNlRXVpQmFja2dyb3VuZENvbG9yQ1NTLCB1c2VFdWlQYWRkaW5nQ1NTLCBCQUNLR1JPVU5EX0NPTE9SUywgUEFERElOR19TSVpFUyB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmltcG9ydCB7IGtleXNPZiB9IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQgeyBldWlQYW5lbFN0eWxlcyB9IGZyb20gJy4vcGFuZWwuc3R5bGUnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgU0laRVMgPSBQQURESU5HX1NJWkVTOyAvLyBFeHBvcnRlZCBwYWRkaW5nIHNpemVzIGFuZCBjbGFzcyBuYW1lcyBuZWNlc3NhcnkgZm9yIEV1aVBvcG92ZXIgYW5kIEV1aUNhcmQuXG4vLyBXaGljaCBjdXJyZW50bHkgd2lsbCBvbmx5IG1haW50YWluIHN1cHBvcnQgZm9yIHRoZSBvcmlnaW5hbCB2YWx1ZXMgdW50aWwgY29udmVyc2lvbi5cblxudmFyIHBhZGRpbmdTaXplVG9DbGFzc05hbWVNYXAgPSB7XG4gIG5vbmU6IG51bGwsXG4gIHM6ICdwYWRkaW5nU21hbGwnLFxuICBtOiAncGFkZGluZ01lZGl1bScsXG4gIGw6ICdwYWRkaW5nTGFyZ2UnXG59O1xuXG52YXIgX1NJWkVTID0ga2V5c09mKHBhZGRpbmdTaXplVG9DbGFzc05hbWVNYXApO1xuXG5leHBvcnQgdmFyIEJPUkRFUl9SQURJSSA9IFsnbm9uZScsICdtJ107XG5leHBvcnQgdmFyIENPTE9SUyA9IEJBQ0tHUk9VTkRfQ09MT1JTO1xuZXhwb3J0IHZhciBFdWlQYW5lbCA9IGZ1bmN0aW9uIEV1aVBhbmVsKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgX3JlZiRwYWRkaW5nU2l6ZSA9IF9yZWYucGFkZGluZ1NpemUsXG4gICAgICBwYWRkaW5nU2l6ZSA9IF9yZWYkcGFkZGluZ1NpemUgPT09IHZvaWQgMCA/ICdtJyA6IF9yZWYkcGFkZGluZ1NpemUsXG4gICAgICBfcmVmJGJvcmRlclJhZGl1cyA9IF9yZWYuYm9yZGVyUmFkaXVzLFxuICAgICAgYm9yZGVyUmFkaXVzID0gX3JlZiRib3JkZXJSYWRpdXMgPT09IHZvaWQgMCA/ICdtJyA6IF9yZWYkYm9yZGVyUmFkaXVzLFxuICAgICAgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdwbGFpbicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRoYXNTaGFkb3cgPSBfcmVmLmhhc1NoYWRvdyxcbiAgICAgIGhhc1NoYWRvdyA9IF9yZWYkaGFzU2hhZG93ID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRoYXNTaGFkb3csXG4gICAgICBfcmVmJGhhc0JvcmRlciA9IF9yZWYuaGFzQm9yZGVyLFxuICAgICAgaGFzQm9yZGVyID0gX3JlZiRoYXNCb3JkZXIgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRoYXNCb3JkZXIsXG4gICAgICBfcmVmJGdyb3cgPSBfcmVmLmdyb3csXG4gICAgICBncm93ID0gX3JlZiRncm93ID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRncm93LFxuICAgICAgcGFuZWxSZWYgPSBfcmVmLnBhbmVsUmVmLFxuICAgICAgZWxlbWVudCA9IF9yZWYuZWxlbWVudCxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpOyAvLyBTaGFkb3dzIGFyZSBvbmx5IGFsbG93ZWQgd2hlbiB0aGVyZSdzIGEgd2hpdGUgYmFja2dyb3VuZCAocGxhaW4pXG5cbiAgdmFyIGNhbkhhdmVTaGFkb3cgPSAhaGFzQm9yZGVyICYmIGNvbG9yID09PSAncGxhaW4nO1xuICB2YXIgY2FuSGF2ZUJvcmRlciA9IGNvbG9yID09PSAncGxhaW4nIHx8IGNvbG9yID09PSAndHJhbnNwYXJlbnQnO1xuICB2YXIgc3R5bGVzID0gZXVpUGFuZWxTdHlsZXMoZXVpVGhlbWUpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlQYW5lbCwgZ3JvdyAmJiBzdHlsZXMuZ3Jvdywgc3R5bGVzLnJhZGl1c1tib3JkZXJSYWRpdXNdLCB1c2VFdWlQYWRkaW5nQ1NTKClbcGFkZGluZ1NpemVdLCB1c2VFdWlCYWNrZ3JvdW5kQ29sb3JDU1MoKVtjb2xvcl0sIGNhbkhhdmVTaGFkb3cgJiYgaGFzU2hhZG93ID09PSB0cnVlICYmIHN0eWxlcy5oYXNTaGFkb3csIGNhbkhhdmVCb3JkZXIgJiYgaGFzQm9yZGVyID09PSB0cnVlICYmIHN0eWxlcy5oYXNCb3JkZXIsIHJlc3Qub25DbGljayAmJiBzdHlsZXMuaXNDbGlja2FibGVdO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVBhbmVsJywgXCJldWlQYW5lbC0tXCIuY29uY2F0KGNvbG9yKSwgX2RlZmluZVByb3BlcnR5KHt9LCBcImV1aVBhbmVsLS1cIi5jb25jYXQocGFkZGluZ1NpemVUb0NsYXNzTmFtZU1hcFtwYWRkaW5nU2l6ZV0pLCBwYWRkaW5nU2l6ZVRvQ2xhc3NOYW1lTWFwW3BhZGRpbmdTaXplXSksIGNsYXNzTmFtZSk7XG5cbiAgaWYgKHJlc3Qub25DbGljayAmJiBlbGVtZW50ICE9PSAnZGl2Jykge1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwiYnV0dG9uXCIsIF9leHRlbmRzKHtcbiAgICAgIHJlZjogcGFuZWxSZWYsXG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICBjc3M6IGNzc1N0eWxlc1xuICAgIH0sIHJlc3QpLCBjaGlsZHJlbik7XG4gIH1cblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiBwYW5lbFJlZixcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgY3NzOiBjc3NTdHlsZXNcbiAgfSwgcmVzdCksIGNoaWxkcmVuKTtcbn07XG5FdWlQYW5lbC5wcm9wVHlwZXMgPSB7XG4gIGVsZW1lbnQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJidXR0b25cIl0pLCBQcm9wVHlwZXMub25lT2YoW1wiZGl2XCJdKV0pLFxuXG4gIC8qKlxuICAgICAqIEFkZHMgYSBtZWRpdW0gc2hhZG93IHRvIHRoZSBwYW5lbDtcbiAgICAgKiBPbmx5IHdvcmtzIHdoZW4gYGNvbG9yPVwicGxhaW5cImBcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBBZGRzIGEgbWVkaXVtIHNoYWRvdyB0byB0aGUgcGFuZWw7XG4gICAgICogT25seSB3b3JrcyB3aGVuIGBjb2xvcj1cInBsYWluXCJgXG4gICAgICovXG4gIGhhc1NoYWRvdzogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogQWRkcyBhIHNsaWdodCAxcHggYm9yZGVyIG9uIGFsbCBlZGdlcy5cbiAgICAgKiBPbmx5IHdvcmtzIHdoZW4gYGNvbG9yPVwicGxhaW4gfCB0cmFuc3BhcmVudFwiYFxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIEFkZHMgYSBzbGlnaHQgMXB4IGJvcmRlciBvbiBhbGwgZWRnZXMuXG4gICAgICogT25seSB3b3JrcyB3aGVuIGBjb2xvcj1cInBsYWluIHwgdHJhbnNwYXJlbnRcImBcbiAgICAgKi9cbiAgaGFzQm9yZGVyOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBQYWRkaW5nIGZvciBhbGwgZm91ciBzaWRlc1xuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIFBhZGRpbmcgZm9yIGFsbCBmb3VyIHNpZGVzXG4gICAgICovXG4gIHBhZGRpbmdTaXplOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIENvcm5lciBib3JkZXIgcmFkaXVzXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogQ29ybmVyIGJvcmRlciByYWRpdXNcbiAgICAgKi9cbiAgYm9yZGVyUmFkaXVzOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIFdoZW4gdHJ1ZSB0aGUgcGFuZWwgd2lsbCBncm93IGluIGhlaWdodCB0byBtYXRjaCBgRXVpRmxleEl0ZW1gXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogV2hlbiB0cnVlIHRoZSBwYW5lbCB3aWxsIGdyb3cgaW4gaGVpZ2h0IHRvIG1hdGNoIGBFdWlGbGV4SXRlbWBcbiAgICAgKi9cbiAgZ3JvdzogUHJvcFR5cGVzLmJvb2wsXG4gIHBhbmVsUmVmOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIEJhY2tncm91bmQgY29sb3Igb2YgdGhlIHBhbmVsO1xuICAgICAqIFVzdWFsbHkgYSBsaWdodGVuZWQgZm9ybSBvZiB0aGUgYnJhbmQgY29sb3JzXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogQmFja2dyb3VuZCBjb2xvciBvZiB0aGUgcGFuZWw7XG4gICAgICogVXN1YWxseSBhIGxpZ2h0ZW5lZCBmb3JtIG9mIHRoZSBicmFuZCBjb2xvcnNcbiAgICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcy5hbnksXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZ1xufTsiLCAiZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgZXVpU2hhZG93IH0gZnJvbSAnLi4vLi4vdGhlbWVzL2Ftc3RlcmRhbS9nbG9iYWxfc3R5bGluZy9taXhpbnMnO1xuaW1wb3J0IHsgZXVpQ2FuQW5pbWF0ZSwgbG9naWNhbFRleHRBbGlnbkNTUyB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcblxudmFyIF9yZWYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMTIybHcwZS1ncm93XCIsXG4gIHN0eWxlczogXCJmbGV4LWdyb3c6MTtsYWJlbDpncm93O1wiXG59IDoge1xuICBuYW1lOiBcIjEyMmx3MGUtZ3Jvd1wiLFxuICBzdHlsZXM6IFwiZmxleC1ncm93OjE7bGFiZWw6Z3JvdztcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xuXG52YXIgX3JlZjIgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMWtrN29kaS1ldWlQYW5lbFwiLFxuICBzdHlsZXM6IFwiZmxleC1ncm93OjA7bGFiZWw6ZXVpUGFuZWw7XCJcbn0gOiB7XG4gIG5hbWU6IFwiMWtrN29kaS1ldWlQYW5lbFwiLFxuICBzdHlsZXM6IFwiZmxleC1ncm93OjA7bGFiZWw6ZXVpUGFuZWw7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcblxuZXhwb3J0IHZhciBldWlQYW5lbFN0eWxlcyA9IGZ1bmN0aW9uIGV1aVBhbmVsU3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHJldHVybiB7XG4gICAgLy8gQmFzZVxuICAgIGV1aVBhbmVsOiBfcmVmMixcbiAgICBncm93OiBfcmVmLFxuICAgIGhhc1NoYWRvdzogLyojX19QVVJFX18qL2NzcyhldWlTaGFkb3coZXVpVGhlbWVDb250ZXh0LCAnbScpLCBcIjs7bGFiZWw6aGFzU2hhZG93O1wiKSxcbiAgICBoYXNCb3JkZXI6IC8qI19fUFVSRV9fKi9jc3MoXCJib3JkZXI6XCIsIGV1aVRoZW1lLmJvcmRlci50aGluLCBcIjs7bGFiZWw6aGFzQm9yZGVyO1wiKSxcbiAgICByYWRpdXM6IHtcbiAgICAgIG5vbmU6IC8qI19fUFVSRV9fKi9jc3MoXCI7bGFiZWw6bm9uZTtcIiksXG4gICAgICBtOiAvKiNfX1BVUkVfXyovY3NzKFwiYm9yZGVyLXJhZGl1czpcIiwgZXVpVGhlbWUuYm9yZGVyLnJhZGl1cy5tZWRpdW0sIFwiOztsYWJlbDptO1wiKVxuICAgIH0sXG4gICAgLy8gU2V0dXAgaW50ZXJhY3RpdmUgYmVoYXZpb3JcbiAgICBpc0NsaWNrYWJsZTogLyojX19QVVJFX18qL2NzcyhldWlDYW5BbmltYXRlLCBcInt0cmFuc2l0aW9uOmJveC1zaGFkb3cgXCIsIGV1aVRoZW1lLmFuaW1hdGlvbi5mYXN0LCBcIiBcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLnJlc2lzdGFuY2UsIFwiLHRyYW5zZm9ybSBcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLmZhc3QsIFwiIFwiLCBldWlUaGVtZS5hbmltYXRpb24ucmVzaXN0YW5jZSwgXCI7fSY6ZW5hYmxlZHtkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7XCIsIGxvZ2ljYWxUZXh0QWxpZ25DU1MoJ2xlZnQnKSwgXCI7fSY6aG92ZXIsJjpmb2N1c3tcIiwgZXVpU2hhZG93KGV1aVRoZW1lQ29udGV4dCwgJ2wnKSwgXCI7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTJweCk7Y3Vyc29yOnBvaW50ZXI7fTtsYWJlbDppc0NsaWNrYWJsZTtcIilcbiAgfTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBldWlTaGFkb3csIGV1aVNoYWRvd0ZsYXQsIGV1aVNoYWRvd01lZGl1bSB9IGZyb20gJy4uLy4uLy4uL3RoZW1lcy9hbXN0ZXJkYW0vZ2xvYmFsX3N0eWxpbmcvbWl4aW5zJztcbmltcG9ydCB7IGV1aUNhbkFuaW1hdGUsIGxvZ2ljYWxDU1MgfSBmcm9tICcuLi8uLi8uLi9nbG9iYWxfc3R5bGluZyc7XG52YXIgdHJhbnNsYXRlRGlzdGFuY2UgPSAncyc7XG4vKipcbiAqIDEuIENhbiBleHBhbmQgZnVydGhlciwgYnV0IGl0IGxvb2tzIHdlaXJkIGlmIGl0J3Mgc21hbGxlciB0aGFuIHRoZSBvcmlnaW5hdGluZyBidXR0b24uXG4gKiAyLiBBbmltYXRpb24gaGFwcGVucyBvbiB0aGUgcGFuZWwuIEJ1dCBkb24ndCBhbmltYXRlIHBvc2l0aW9uIHdoZW4gdXNpbmcgdGhlIGF0dGFjaGVkIG1vZGUgbGlrZSBmb3IgaW5wdXRzXG4gKiAzLiBNYWtlIHN1cmUgdGhlIHBhbmVsIHN0YXlzIHdpdGhpbiB0aGUgd2luZG93LlxuICovXG5cbmV4cG9ydCB2YXIgZXVpUG9wb3ZlclBhbmVsU3R5bGVzID0gZnVuY3Rpb24gZXVpUG9wb3ZlclBhbmVsU3R5bGVzKGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWU7XG4gIHJldHVybiB7XG4gICAgLy8gQmFzZVxuICAgIGV1aVBvcG92ZXJfX3BhbmVsOiAvKiNfX1BVUkVfXyovY3NzKFwicG9zaXRpb246YWJzb2x1dGU7XCIsIGxvZ2ljYWxDU1MoJ21pbi13aWR0aCcsIFwiXCIuY29uY2F0KGV1aVRoZW1lLmJhc2UgKiA3LCBcInB4XCIpKSwgXCI7XCIsIGxvZ2ljYWxDU1MoJ21heC13aWR0aCcsIFwiY2FsYygxMDB2dyAtIFwiLmNvbmNhdChldWlUaGVtZS5zaXplLnhsLCBcIilcIikpLCBcIjtiYWNrZmFjZS12aXNpYmlsaXR5OmhpZGRlbjtwb2ludGVyLWV2ZW50czpub25lO29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgwKSB0cmFuc2xhdGVYKDApIHRyYW5zbGF0ZVooMCk7XCIsIGV1aVNoYWRvd01lZGl1bShldWlUaGVtZUNvbnRleHQsIHtcbiAgICAgIHByb3BlcnR5OiAnZmlsdGVyJ1xuICAgIH0pLCBcIiAmOmZvY3Vze291dGxpbmUtb2Zmc2V0OjA7fTtsYWJlbDpldWlQb3BvdmVyX19wYW5lbDtcIiksXG4gICAgLy8gSXMgdmlzaWJsZSAvIG9wZW5cbiAgICBpc09wZW46IC8qI19fUFVSRV9fKi9jc3MoXCJvcGFjaXR5OjE7cG9pbnRlci1ldmVudHM6YXV0bztcIiwgZXVpQ2FuQW5pbWF0ZSwgXCJ7dHJhbnNpdGlvbjpvcGFjaXR5IFwiLCBldWlUaGVtZS5hbmltYXRpb24uYm91bmNlLCBcIiBcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLnNsb3csIFwiLHRyYW5zZm9ybSBcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLmJvdW5jZSwgXCIgY2FsYyhcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLnNsb3csIFwiICsgMTAwbXMpO307bGFiZWw6aXNPcGVuO1wiKSxcbiAgICAvLyBQb3NpdGlvbnNcbiAgICB0b3A6IC8qI19fUFVSRV9fKi9jc3MoXCJ0cmFuc2Zvcm06dHJhbnNsYXRlWShcIiwgZXVpVGhlbWUuc2l6ZVt0cmFuc2xhdGVEaXN0YW5jZV0sIFwiKSB0cmFuc2xhdGVaKDApOztsYWJlbDp0b3A7XCIpLFxuICAgIGJvdHRvbTogLyojX19QVVJFX18qL2NzcyhcInRyYW5zZm9ybTp0cmFuc2xhdGVZKC1cIiwgZXVpVGhlbWUuc2l6ZVt0cmFuc2xhdGVEaXN0YW5jZV0sIFwiKSB0cmFuc2xhdGVaKDApOztsYWJlbDpib3R0b207XCIpLFxuICAgIGxlZnQ6IC8qI19fUFVSRV9fKi9jc3MoXCJ0cmFuc2Zvcm06dHJhbnNsYXRlWChcIiwgZXVpVGhlbWUuc2l6ZVt0cmFuc2xhdGVEaXN0YW5jZV0sIFwiKSB0cmFuc2xhdGVaKDApOztsYWJlbDpsZWZ0O1wiKSxcbiAgICByaWdodDogLyojX19QVVJFX18qL2NzcyhcInRyYW5zZm9ybTp0cmFuc2xhdGVYKC1cIiwgZXVpVGhlbWUuc2l6ZVt0cmFuc2xhdGVEaXN0YW5jZV0sIFwiKSB0cmFuc2xhdGVaKDApOztsYWJlbDpyaWdodDtcIiksXG4gICAgLy8gQXR0YWNoZWQgdmVyc2lvbiBvdmVycmlkZXNcbiAgICBhdHRhY2hlZDoge1xuICAgICAgaXNPcGVuOiAvKiNfX1BVUkVfXyovY3NzKFwiZmlsdGVyOm5vbmU7XCIsIGV1aUNhbkFuaW1hdGUsIFwie3RyYW5zaXRpb246b3BhY2l0eSBcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLmJvdW5jZSwgXCIgXCIsIGV1aVRoZW1lLmFuaW1hdGlvbi5zbG93LCBcIjt9O2xhYmVsOmlzT3BlbjtcIiksXG4gICAgICB0b3A6IC8qI19fUFVSRV9fKi9jc3MoZXVpU2hhZG93RmxhdChldWlUaGVtZUNvbnRleHQpLCBcIjs7bGFiZWw6dG9wO1wiKSxcbiAgICAgIGJvdHRvbTogLyojX19QVVJFX18qL2NzcyhldWlTaGFkb3coZXVpVGhlbWVDb250ZXh0LCAnbScpLCBcIjs7bGFiZWw6Ym90dG9tO1wiKSxcbiAgICAgIC8vIFNhdGlzZmllcyBUU1xuICAgICAgbGVmdDogLyojX19QVVJFX18qL2NzcyhcIjtsYWJlbDpsZWZ0O1wiKSxcbiAgICAgIHJpZ2h0OiAvKiNfX1BVUkVfXyovY3NzKFwiO2xhYmVsOnJpZ2h0O1wiKVxuICAgIH1cbiAgfTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5leHBvcnQgdmFyIGV1aUZvcm1NYXhXaWR0aCA9IGZ1bmN0aW9uIGV1aUZvcm1NYXhXaWR0aChfcmVmKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYuZXVpVGhlbWU7XG4gIHJldHVybiBcIlwiLmNvbmNhdChldWlUaGVtZS5iYXNlICogMjUsIFwicHhcIik7XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wic2l6ZVwiLCBcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwidGV4dFRyYW5zZm9ybVwiXTtcblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGNsb25lRWxlbWVudFdpdGhDc3MgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90aGVtZS9jbG9uZV9lbGVtZW50JztcbmltcG9ydCB7IGV1aVRpdGxlU3R5bGVzIH0gZnJvbSAnLi90aXRsZS5zdHlsZXMnO1xuZXhwb3J0IHZhciBUSVRMRV9TSVpFUyA9IFsneHh4cycsICd4eHMnLCAneHMnLCAncycsICdtJywgJ2wnXTtcbmV4cG9ydCB2YXIgVEVYVF9UUkFOU0ZPUk0gPSBbJ3VwcGVyY2FzZSddO1xuZXhwb3J0IHZhciBFdWlUaXRsZSA9IGZ1bmN0aW9uIEV1aVRpdGxlKF9yZWYpIHtcbiAgdmFyIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/ICdtJyA6IF9yZWYkc2l6ZSxcbiAgICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgdGV4dFRyYW5zZm9ybSA9IF9yZWYudGV4dFRyYW5zZm9ybSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICB2YXIgc3R5bGVzID0gZXVpVGl0bGVTdHlsZXMoZXVpVGhlbWUpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlUaXRsZSwgdGV4dFRyYW5zZm9ybSA/IHN0eWxlc1t0ZXh0VHJhbnNmb3JtXSA6IHVuZGVmaW5lZCwgc3R5bGVzW3NpemVdXTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUaXRsZScsIGNsYXNzTmFtZSwgY2hpbGRyZW4ucHJvcHMuY2xhc3NOYW1lKTtcblxuICB2YXIgcHJvcHMgPSBfb2JqZWN0U3ByZWFkKHtcbiAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgfSwgcmVzdCk7XG5cbiAgcmV0dXJuIGNsb25lRWxlbWVudFdpdGhDc3MoY2hpbGRyZW4sIHByb3BzKTtcbn07XG5FdWlUaXRsZS5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgKiBSZWFjdEVsZW1lbnQgdG8gcmVuZGVyIGFzIHRoaXMgY29tcG9uZW50J3MgY29udGVudFxuICAgICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZCxcbiAgc2l6ZTogUHJvcFR5cGVzLmFueSxcbiAgdGV4dFRyYW5zZm9ybTogUHJvcFR5cGVzLmFueSxcbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmdcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJkZXNjcmlwdGlvblwiLCBcImlzRGlzYWJsZWRcIiwgXCJ0aXRsZVwiLCBcInRpdGxlRWxlbWVudFwiLCBcInRpdGxlU2l6ZVwiLCBcImljb25cIiwgXCJpbWFnZVwiLCBcImNoaWxkcmVuXCIsIFwiZm9vdGVyXCIsIFwib25DbGlja1wiLCBcImhyZWZcIiwgXCJyZWxcIiwgXCJ0YXJnZXRcIiwgXCJ0ZXh0QWxpZ25cIiwgXCJiZXRhQmFkZ2VQcm9wc1wiLCBcImxheW91dFwiLCBcInNlbGVjdGFibGVcIiwgXCJkaXNwbGF5XCIsIFwicGFkZGluZ1NpemVcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgaXNWYWxpZEVsZW1lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGtleXNPZiB9IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQgeyBnZXRTZWN1cmVSZWxGb3JUYXJnZXQgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFdWlUZXh0IH0gZnJvbSAnLi4vdGV4dCc7XG5pbXBvcnQgeyBFdWlUaXRsZSB9IGZyb20gJy4uL3RpdGxlJztcbmltcG9ydCB7IEV1aUJldGFCYWRnZSB9IGZyb20gJy4uL2JhZGdlL2JldGFfYmFkZ2UnO1xuaW1wb3J0IHsgRXVpQ2FyZFNlbGVjdCwgZXVpQ2FyZFNlbGVjdGFibGVDb2xvciB9IGZyb20gJy4vY2FyZF9zZWxlY3QnO1xuaW1wb3J0IHsgdXNlR2VuZXJhdGVkSHRtbElkIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYWNjZXNzaWJpbGl0eSc7XG5pbXBvcnQgeyB2YWxpZGF0ZUhyZWYgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zZWN1cml0eS9ocmVmX3ZhbGlkYXRvcic7XG5pbXBvcnQgeyBFdWlQYW5lbCB9IGZyb20gJy4uL3BhbmVsJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgdGV4dEFsaWduVG9DbGFzc05hbWVNYXAgPSB7XG4gIGxlZnQ6ICdldWlDYXJkLS1sZWZ0QWxpZ25lZCcsXG4gIGNlbnRlcjogJ2V1aUNhcmQtLWNlbnRlckFsaWduZWQnLFxuICByaWdodDogJ2V1aUNhcmQtLXJpZ2h0QWxpZ25lZCdcbn07XG5leHBvcnQgdmFyIEFMSUdOTUVOVFMgPSBrZXlzT2YodGV4dEFsaWduVG9DbGFzc05hbWVNYXApO1xudmFyIGxheW91dFRvQ2xhc3NOYW1lTWFwID0ge1xuICB2ZXJ0aWNhbDogJycsXG4gIGhvcml6b250YWw6ICdldWlDYXJkLS1ob3Jpem9udGFsJ1xufTtcbmV4cG9ydCB2YXIgTEFZT1VUX0FMSUdOTUVOVFMgPSBrZXlzT2YobGF5b3V0VG9DbGFzc05hbWVNYXApO1xuLyoqXG4gKiBDZXJ0YWluIHByb3BzIGFyZSBvbmx5IGFsbG93ZWQgd2hlbiB0aGUgbGF5b3V0IGlzIHZlcnRpY2FsXG4gKi9cblxuZXhwb3J0IHZhciBFdWlDYXJkID0gZnVuY3Rpb24gRXVpQ2FyZChfcmVmKSB7XG4gIHZhciBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uID0gX3JlZi5kZXNjcmlwdGlvbixcbiAgICAgIF9pc0Rpc2FibGVkID0gX3JlZi5pc0Rpc2FibGVkLFxuICAgICAgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgX3JlZiR0aXRsZUVsZW1lbnQgPSBfcmVmLnRpdGxlRWxlbWVudCxcbiAgICAgIHRpdGxlRWxlbWVudCA9IF9yZWYkdGl0bGVFbGVtZW50ID09PSB2b2lkIDAgPyAnc3BhbicgOiBfcmVmJHRpdGxlRWxlbWVudCxcbiAgICAgIF9yZWYkdGl0bGVTaXplID0gX3JlZi50aXRsZVNpemUsXG4gICAgICB0aXRsZVNpemUgPSBfcmVmJHRpdGxlU2l6ZSA9PT0gdm9pZCAwID8gJ3MnIDogX3JlZiR0aXRsZVNpemUsXG4gICAgICBpY29uID0gX3JlZi5pY29uLFxuICAgICAgaW1hZ2UgPSBfcmVmLmltYWdlLFxuICAgICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgZm9vdGVyID0gX3JlZi5mb290ZXIsXG4gICAgICBvbkNsaWNrID0gX3JlZi5vbkNsaWNrLFxuICAgICAgaHJlZiA9IF9yZWYuaHJlZixcbiAgICAgIHJlbCA9IF9yZWYucmVsLFxuICAgICAgdGFyZ2V0ID0gX3JlZi50YXJnZXQsXG4gICAgICBfcmVmJHRleHRBbGlnbiA9IF9yZWYudGV4dEFsaWduLFxuICAgICAgdGV4dEFsaWduID0gX3JlZiR0ZXh0QWxpZ24gPT09IHZvaWQgMCA/ICdjZW50ZXInIDogX3JlZiR0ZXh0QWxpZ24sXG4gICAgICBiZXRhQmFkZ2VQcm9wcyA9IF9yZWYuYmV0YUJhZGdlUHJvcHMsXG4gICAgICBfcmVmJGxheW91dCA9IF9yZWYubGF5b3V0LFxuICAgICAgbGF5b3V0ID0gX3JlZiRsYXlvdXQgPT09IHZvaWQgMCA/ICd2ZXJ0aWNhbCcgOiBfcmVmJGxheW91dCxcbiAgICAgIHNlbGVjdGFibGUgPSBfcmVmLnNlbGVjdGFibGUsXG4gICAgICBkaXNwbGF5ID0gX3JlZi5kaXNwbGF5LFxuICAgICAgcGFkZGluZ1NpemUgPSBfcmVmLnBhZGRpbmdTaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBpc0hyZWZWYWxpZCA9ICFocmVmIHx8IHZhbGlkYXRlSHJlZihocmVmKTtcbiAgdmFyIGlzRGlzYWJsZWQgPSBfaXNEaXNhYmxlZCB8fCAhaXNIcmVmVmFsaWQ7XG4gIHZhciBpc0NsaWNrYWJsZSA9ICFpc0Rpc2FibGVkICYmIChvbkNsaWNrIHx8IGhyZWYgfHwgc2VsZWN0YWJsZSAmJiAhc2VsZWN0YWJsZS5pc0Rpc2FibGVkKTtcbiAgLyoqXG4gICAqIEZvciBhMTF5LCB3ZSBzaW11bGF0ZSB0aGUgc2FtZSBjbGljayB0aGF0J3MgcHJvdmlkZWQgb24gdGhlIHRpdGxlIHdoZW4gY2xpY2tpbmcgdGhlIHdob2xlIGNhcmRcbiAgICogd2l0aG91dCBoYXZpbmcgdG8gbWFrZSB0aGUgd2hvbGUgY2FyZCBhIGJ1dHRvbiBvciBhbmNob3IgdGFnLlxuICAgKiAqQ2FyZCBBY2Nlc3NpYmlsaXR5OiBUaGUgcmVkdW5kYW50IGNsaWNrIGV2ZW50IGh0dHBzOi8vaW5jbHVzaXZlLWNvbXBvbmVudHMuZGVzaWduL2NhcmRzLypcbiAgICovXG5cbiAgdmFyIGxpbmsgPSBudWxsO1xuXG4gIHZhciBvdXRlck9uQ2xpY2sgPSBmdW5jdGlvbiBvdXRlck9uQ2xpY2soZSkge1xuICAgIGlmIChsaW5rICYmIGxpbmsgIT09IGUudGFyZ2V0KSB7XG4gICAgICBsaW5rLmNsaWNrKCk7XG4gICAgfVxuICB9O1xuXG4gIGlmIChsYXlvdXQgPT09ICdob3Jpem9udGFsJykge1xuICAgIGlmIChpbWFnZSB8fCBmb290ZXIgfHwgdGV4dEFsaWduICE9PSAnY2VudGVyJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFdWlDYXJkOiBgbGF5b3V0PVwiaG9yaXpvbnRhbFwiYCBjYW5ub3QgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGBpbWFnZWAsIGBmb290ZXJgLCBvciBgdGV4dEFsaWduYC4nKTtcbiAgICB9XG4gIH1cblxuICB2YXIgc2VsZWN0YWJsZUNvbG9yQ2xhc3MgPSBzZWxlY3RhYmxlID8gXCJldWlDYXJkLS1pc1NlbGVjdGFibGUtLVwiLmNvbmNhdChldWlDYXJkU2VsZWN0YWJsZUNvbG9yKHNlbGVjdGFibGUuY29sb3IsIHNlbGVjdGFibGUuaXNTZWxlY3RlZCkpIDogdW5kZWZpbmVkO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUNhcmQnLCB0ZXh0QWxpZ25Ub0NsYXNzTmFtZU1hcFt0ZXh0QWxpZ25dLCBsYXlvdXRUb0NsYXNzTmFtZU1hcFtsYXlvdXRdLCB7XG4gICAgJ2V1aUNhcmQtLWlzQ2xpY2thYmxlJzogaXNDbGlja2FibGUsXG4gICAgJ2V1aUNhcmQtLWhhc0JldGFCYWRnZSc6IGJldGFCYWRnZVByb3BzID09PSBudWxsIHx8IGJldGFCYWRnZVByb3BzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBiZXRhQmFkZ2VQcm9wcy5sYWJlbCxcbiAgICAnZXVpQ2FyZC0taGFzSWNvbic6IGljb24sXG4gICAgJ2V1aUNhcmQtLWlzU2VsZWN0YWJsZSc6IHNlbGVjdGFibGUsXG4gICAgJ2V1aUNhcmQtaXNTZWxlY3RlZCc6IHNlbGVjdGFibGUgPT09IG51bGwgfHwgc2VsZWN0YWJsZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VsZWN0YWJsZS5pc1NlbGVjdGVkLFxuICAgICdldWlDYXJkLWlzRGlzYWJsZWQnOiBpc0Rpc2FibGVkXG4gIH0sIHNlbGVjdGFibGVDb2xvckNsYXNzLCBjbGFzc05hbWUpO1xuICB2YXIgYXJpYUlkID0gdXNlR2VuZXJhdGVkSHRtbElkKCk7XG4gIHZhciBhcmlhRGVzYyA9IGRlc2NyaXB0aW9uID8gXCJcIi5jb25jYXQoYXJpYUlkLCBcIkRlc2NyaXB0aW9uXCIpIDogJyc7XG4gIC8qKlxuICAgKiBUb3AgYXJlYSBjb250YWluaW5nIGltYWdlLCBpY29uIG9yIGJvdGhcbiAgICovXG5cbiAgdmFyIGltYWdlTm9kZTtcblxuICBpZiAoaW1hZ2UgJiYgbGF5b3V0ID09PSAndmVydGljYWwnKSB7XG4gICAgaWYgKCAvKiNfX1BVUkVfXyovaXNWYWxpZEVsZW1lbnQoaW1hZ2UpIHx8IHR5cGVvZiBpbWFnZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGltYWdlTm9kZSA9IF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICBjbGFzc05hbWU6IFwiZXVpQ2FyZF9faW1hZ2VcIlxuICAgICAgfSwgLyojX19QVVJFX18qL2lzVmFsaWRFbGVtZW50KGltYWdlKSA/IGltYWdlIDogX19fRW1vdGlvbkpTWChcImltZ1wiLCB7XG4gICAgICAgIHNyYzogaW1hZ2UsXG4gICAgICAgIGFsdDogXCJcIlxuICAgICAgfSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbWFnZU5vZGUgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHZhciBpY29uTm9kZTtcblxuICBpZiAoaWNvbikge1xuICAgIGljb25Ob2RlID0gLyojX19QVVJFX18qL1JlYWN0LmNsb25lRWxlbWVudChpY29uLCB7XG4gICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMoaWNvbi5wcm9wcy5jbGFzc05hbWUsICdldWlDYXJkX19pY29uJylcbiAgICB9KTtcbiAgfVxuXG4gIHZhciBvcHRpb25hbENhcmRUb3A7XG5cbiAgaWYgKGltYWdlTm9kZSB8fCBpY29uTm9kZSkge1xuICAgIG9wdGlvbmFsQ2FyZFRvcCA9IF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgY2xhc3NOYW1lOiBcImV1aUNhcmRfX3RvcFwiXG4gICAgfSwgaW1hZ2VOb2RlLCBpY29uTm9kZSk7XG4gIH1cbiAgLyoqXG4gICAqIE9wdGlvbmFsIEV1aUJldGFCYWRnZVxuICAgKi9cblxuXG4gIHZhciBvcHRpb25hbEJldGFCYWRnZTtcbiAgdmFyIG9wdGlvbmFsQmV0YUJhZGdlSUQgPSAnJztcblxuICBpZiAoYmV0YUJhZGdlUHJvcHMgIT09IG51bGwgJiYgYmV0YUJhZGdlUHJvcHMgIT09IHZvaWQgMCAmJiBiZXRhQmFkZ2VQcm9wcy5sYWJlbCkge1xuICAgIG9wdGlvbmFsQmV0YUJhZGdlSUQgPSBcIlwiLmNvbmNhdChhcmlhSWQsIFwiQmV0YUJhZGdlXCIpO1xuICAgIG9wdGlvbmFsQmV0YUJhZGdlID0gX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgICAgY2xhc3NOYW1lOiBcImV1aUNhcmRfX2JldGFCYWRnZVdyYXBwZXJcIlxuICAgIH0sIF9fX0Vtb3Rpb25KU1goRXVpQmV0YUJhZGdlLCBfZXh0ZW5kcyh7XG4gICAgICBpZDogb3B0aW9uYWxCZXRhQmFkZ2VJRFxuICAgIH0sIGJldGFCYWRnZVByb3BzLCB7XG4gICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ2V1aUNhcmRfX2JldGFCYWRnZScsIGJldGFCYWRnZVByb3BzID09PSBudWxsIHx8IGJldGFCYWRnZVByb3BzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBiZXRhQmFkZ2VQcm9wcy5jbGFzc05hbWUpXG4gICAgfSkpKTsgLy8gSW5jcmVhc2UgcGFkZGluZyBzaXplIHdoZW4gdGhlcmUgaXMgYSBiZXRhIGJhZGdlIHVubGVzcyBpdCdzIGFscmVhZHkgZGV0ZXJtaW5lZFxuXG4gICAgcGFkZGluZ1NpemUgPSBwYWRkaW5nU2l6ZSB8fCAnbCc7XG4gIH1cbiAgLyoqXG4gICAqIE9wdGlvbmFsIHNlbGVjdGFibGUgYnV0dG9uXG4gICAqL1xuXG5cbiAgaWYgKHNlbGVjdGFibGUgJiYgaXNEaXNhYmxlZCAmJiBzZWxlY3RhYmxlLmlzRGlzYWJsZWQgPT09IHVuZGVmaW5lZCkge1xuICAgIHNlbGVjdGFibGUuaXNEaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cblxuICB2YXIgb3B0aW9uYWxTZWxlY3RCdXR0b247XG5cbiAgaWYgKHNlbGVjdGFibGUpIHtcbiAgICBvcHRpb25hbFNlbGVjdEJ1dHRvbiA9IF9fX0Vtb3Rpb25KU1goRXVpQ2FyZFNlbGVjdCwgX2V4dGVuZHMoe1xuICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6IFwiXCIuY29uY2F0KGFyaWFJZCwgXCJUaXRsZSBcIikuY29uY2F0KGFyaWFEZXNjKVxuICAgIH0sIHNlbGVjdGFibGUsIHtcbiAgICAgIGJ1dHRvblJlZjogZnVuY3Rpb24gYnV0dG9uUmVmKG5vZGUpIHtcbiAgICAgICAgbGluayA9IG5vZGU7XG4gICAgICB9XG4gICAgfSkpO1xuICB9XG4gIC8qKlxuICAgKiBXcmFwcyB0aGUgdGl0bGUgd2l0aCB0aGUgbGluayAoPGE+KSBvciBidXR0b24uXG4gICAqIFRoaXMgbWFrZXMgdGhlIHRpdGxlIGVsZW1lbnQgYTExeSBmcmllbmRseSBhbmQgZ2V0cyBkZXNjcmliZWQgYnkgaXRzIGNvbnRlbnQgaWYgaXRzIGludGVyYWN0YWJsZS5cbiAgICovXG5cblxuICB2YXIgdGhlVGl0bGU7XG5cbiAgaWYgKCFpc0Rpc2FibGVkICYmIGhyZWYpIHtcbiAgICB0aGVUaXRsZSA9IF9fX0Vtb3Rpb25KU1goXCJhXCIsIHtcbiAgICAgIGNsYXNzTmFtZTogXCJldWlDYXJkX190aXRsZUFuY2hvclwiLFxuICAgICAgb25DbGljazogb25DbGljayxcbiAgICAgIGhyZWY6IGhyZWYsXG4gICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiBhcmlhRGVzYyxcbiAgICAgIHJlbDogZ2V0U2VjdXJlUmVsRm9yVGFyZ2V0KHtcbiAgICAgICAgaHJlZjogaHJlZixcbiAgICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICAgIHJlbDogcmVsXG4gICAgICB9KSxcbiAgICAgIHJlZjogZnVuY3Rpb24gcmVmKG5vZGUpIHtcbiAgICAgICAgbGluayA9IG5vZGU7XG4gICAgICB9XG4gICAgfSwgdGl0bGUpO1xuICB9IGVsc2UgaWYgKGlzRGlzYWJsZWQgfHwgb25DbGljaykge1xuICAgIHRoZVRpdGxlID0gX19fRW1vdGlvbkpTWChcImJ1dHRvblwiLCB7XG4gICAgICBjbGFzc05hbWU6IFwiZXVpQ2FyZF9fdGl0bGVCdXR0b25cIixcbiAgICAgIG9uQ2xpY2s6IG9uQ2xpY2ssXG4gICAgICBkaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiBcIlwiLmNvbmNhdChvcHRpb25hbEJldGFCYWRnZUlELCBcIiBcIikuY29uY2F0KGFyaWFEZXNjKSxcbiAgICAgIHJlZjogZnVuY3Rpb24gcmVmKG5vZGUpIHtcbiAgICAgICAgbGluayA9IG5vZGU7XG4gICAgICB9XG4gICAgfSwgdGl0bGUpO1xuICB9IGVsc2Uge1xuICAgIHRoZVRpdGxlID0gdGl0bGU7XG4gIH1cbiAgLyoqXG4gICAqIENvbnZlcnQgdGl0bGVFbGVtZW50IHRvIGEgY2FwaXRhbCBUaXRsZUVsZW1lbnRcbiAgICovXG5cblxuICB2YXIgVGl0bGVFbGVtZW50ID0gdGl0bGVFbGVtZW50O1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlQYW5lbCwgX2V4dGVuZHMoe1xuICAgIGVsZW1lbnQ6IFwiZGl2XCIsXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIG9uQ2xpY2s6IGlzQ2xpY2thYmxlID8gb3V0ZXJPbkNsaWNrIDogdW5kZWZpbmVkLFxuICAgIGNvbG9yOiBpc0Rpc2FibGVkID8gJ3N1YmR1ZWQnIDogZGlzcGxheSxcbiAgICBoYXNTaGFkb3c6IGlzRGlzYWJsZWQgfHwgZGlzcGxheSA/IGZhbHNlIDogdHJ1ZSxcbiAgICBoYXNCb3JkZXI6IGRpc3BsYXkgPyBmYWxzZSA6IHVuZGVmaW5lZCxcbiAgICBwYWRkaW5nU2l6ZTogcGFkZGluZ1NpemVcbiAgfSwgcmVzdCksIG9wdGlvbmFsQ2FyZFRvcCwgX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUNhcmRfX2NvbnRlbnRcIlxuICB9LCBfX19FbW90aW9uSlNYKEV1aVRpdGxlLCB7XG4gICAgaWQ6IFwiXCIuY29uY2F0KGFyaWFJZCwgXCJUaXRsZVwiKSxcbiAgICBjbGFzc05hbWU6IFwiZXVpQ2FyZF9fdGl0bGVcIixcbiAgICBzaXplOiB0aXRsZVNpemVcbiAgfSwgX19fRW1vdGlvbkpTWChUaXRsZUVsZW1lbnQsIG51bGwsIHRoZVRpdGxlKSksIGRlc2NyaXB0aW9uICYmIF9fX0Vtb3Rpb25KU1goRXVpVGV4dCwge1xuICAgIGlkOiBhcmlhRGVzYyxcbiAgICBzaXplOiBcInNcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpQ2FyZF9fZGVzY3JpcHRpb25cIlxuICB9LCBfX19FbW90aW9uSlNYKFwicFwiLCBudWxsLCBkZXNjcmlwdGlvbikpLCBjaGlsZHJlbiAmJiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpQ2FyZF9fY2hpbGRyZW5cIlxuICB9LCBjaGlsZHJlbikpLCBvcHRpb25hbEJldGFCYWRnZSwgbGF5b3V0ID09PSAndmVydGljYWwnICYmIGZvb3RlciAmJiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpQ2FyZF9fZm9vdGVyXCJcbiAgfSwgZm9vdGVyKSwgb3B0aW9uYWxTZWxlY3RCdXR0b24pO1xufTtcbkV1aUNhcmQucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICAgICAqIENoYW5nZSB0byBcImhvcml6b250YWxcIiBpZiB5b3UgbmVlZCB0aGUgaWNvbiB0byBiZSBsZWZ0IG9mIHRoZSBjb250ZW50LlxuICAgICAgICogSG9yaXpvbnRhbCBsYXlvdXRzIGNhbm5vdCBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYGltYWdlYCwgYGZvb3RlcmAsIG9yIGB0ZXh0QWxpZ25gLlxuICAgICAgICovXG4gIGxheW91dDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcInZlcnRpY2FsXCJdKSwgUHJvcFR5cGVzLm9uZU9mKFtcImhvcml6b250YWxcIl0pLmlzUmVxdWlyZWRdKSxcblxuICAvKipcbiAgICAgICAqIENoYW5nZXMgYWxpZ25tZW50IG9mIHRoZSB0aXRsZSBhbmQgZGVzY3JpcHRpb25cbiAgICAgICAqL1xuICB0ZXh0QWxpZ246IFByb3BUeXBlcy5vbmVPZihbXCJsZWZ0XCIsIFwiY2VudGVyXCIsIFwicmlnaHRcIl0pLFxuXG4gIC8qKlxuICAgICAgICogQWNjZXB0cyBhbnkgY29tYmluYXRpb24gb2YgZWxlbWVudHNcbiAgICAgICAqL1xuICBmb290ZXI6IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgICAgICogQWNjZXB0cyBhIHVybCBpbiBzdHJpbmcgZm9ybSBvciBSZWFjdEVsZW1lbnQgZm9yIGEgY3VzdG9tIGltYWdlIGNvbXBvbmVudFxuICAgICAgICovXG4gIGltYWdlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWRdKSxcblxuICAvKipcbiAgICAgICAqIENhcmRzIGFyZSByZXF1aXJlZCB0byBoYXZlIGF0IGxlYXN0IGEgdGl0bGUgYW5kIGEgZGVzY3JpcHRpb24gYW5kL29yIGNoaWxkcmVuXG4gICAgICAgKi9cbiAgdGl0bGU6IFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICAgICAqIERldGVybWluZXMgdGhlIHRpdGxlJ3MgaGVhZGluZyBlbGVtZW50XG4gICAgICAgKi9cbiAgdGl0bGVFbGVtZW50OiBQcm9wVHlwZXMub25lT2YoW1wiaDJcIiwgXCJoM1wiLCBcImg0XCIsIFwiaDVcIiwgXCJoNlwiLCBcInNwYW5cIl0pLFxuXG4gIC8qKlxuICAgICAgICogRGV0ZXJtaW5lcyB0aGUgdGl0bGUncyBzaXplLCBtYXRjaGluZyB0aGF0IG9mIEV1aVRpdGxlLlxuICAgICAgICogVGhvdWdoLCBjYXJkIHRpdGxlcyBjYW4ndCBiZSB0b28gbGFyZ2Ugb3Igc21hbGwgcmVsYXRpdmUgdG8gdGhlIGRlc2NyaXB0aW9uIHRleHQuXG4gICAgICAgKi9cbiAgdGl0bGVTaXplOiBQcm9wVHlwZXMub25lT2YoW1wic1wiLCBcInhzXCJdKSxcbiAgLy8gZGVzY3JpcHRpb24gaXMgcmVxdWlyZWQgaWYgY2hpbGRyZW4gaXMgb21pdHRlZFxuICAvLyBkZXNjcmlwdGlvbiBiZWNvbWVzIG9wdGlvbmFsIHdoZW4gY2hpbGRyZW4gaXMgcHJlc2VudFxuXG4gIC8qKlxuICAgICAgICogUGxhY2VkIHdpdGhpbiBhIHNtYWxsIEV1aVRleHQgYDxwPmAgdGFnXG4gICAgICAgKi9cbiAgZGVzY3JpcHRpb246IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICAgKiBBY2NlcHRzIGFuIGA8RXVpSWNvbj5gIG5vZGUgb3IgYG51bGxgXG4gICAgICAgKi9cbiAgaWNvbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm9uZU9mKFtudWxsXSldKSxcblxuICAvKipcbiAgICAgICAqIEN1c3RvbSBjaGlsZHJlblxuICAgICAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICAgICAqIFVzZSBvbmx5IGlmIHlvdSB3YW50IHRvIGZvcmVnbyBhIGJ1dHRvbiBpbiB0aGUgZm9vdGVyIGFuZCBtYWtlIHRoZSB3aG9sZSBjYXJkIGNsaWNrYWJsZVxuICAgICAgICovXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRdKSxcbiAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGhyZWY6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHRhcmdldDogUHJvcFR5cGVzLnN0cmluZyxcbiAgcmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAgICogQWRkcyBhIGJhZGdlIHRvIHRvcCBvZiB0aGUgY2FyZCB0byBsYWJlbCBpdCBhcyBcIkJldGFcIiBvciBvdGhlciBub24tR0Egc3RhdGUuXG4gICAgICAgKiBBY2NlcHRzIGFsbCB0aGUgcHJvcHMgb2YgW0V1aUJldGFCYWRnZV0oIy9kaXNwbGF5L2JhZGdlI2JldGEtYmFkZ2UtdHlwZSksIHdoZXJlIGBsYWJlbGAgaXMgcmVxdWlyZWQuXG4gICAgICAgKi9cbiAgYmV0YUJhZGdlUHJvcHM6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICAgKiBNYXRjaGVzIHRvIHRoZSBjb2xvciBwcm9wZXJ0eSBvZiBFdWlQYW5lbC4gSWYgZGVmaW5lZCwgcmVtb3ZlcyBhbnkgYm9yZGVyICYgc2hhZG93LlxuICAgICAgICogTGVhdmUgYXMgYHVuZGVmaW5lZGAgdG8gZGlzcGxheSBhcyBhIGRlZmF1bHQgcGFuZWwuXG4gICAgICAgKiBTZWxlY3RhYmxlIGNhcmRzIHdpbGwgYWx3YXlzIGRpc3BsYXkgYXMgYSBkZWZhdWx0IHBhbmVsLlxuICAgICAgICovXG4gIGRpc3BsYXk6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICAgKiBQYWRkaW5nIGFwcGxpZWQgYXJvdW5kIHRoZSBjb250ZW50IG9mIHRoZSBjYXJkXG4gICAgICAgKi9cbiAgcGFkZGluZ1NpemU6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICAgKiBBZGRzIGEgYnV0dG9uIHRvIHRoZSBib3R0b20gb2YgdGhlIGNhcmQgdG8gYWxsb3cgZm9yIGluLXBsYWNlIHNlbGVjdGlvblxuICAgICAgICovXG4gIHNlbGVjdGFibGU6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaHJlZjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcblxuICAgIC8qKlxuICAgICAgICogQW55IG9mIG91ciBuYW1lZCBjb2xvcnNcbiAgICAgICAqL1xuXG4gICAgLyoqXG4gICAgICAgKiBBbnkgb2Ygb3VyIG5hbWVkIGNvbG9yc1xuICAgICAgICovXG4gICAgY29sb3I6IFByb3BUeXBlcy5vbmVPZihbXCJwcmltYXJ5XCIsIFwiZGFuZ2VyXCIsIFwidGV4dFwiLCBcImdob3N0XCIsIFwic3VjY2Vzc1wiLCBcIndhcm5pbmdcIl0pLFxuICAgIHNpemU6IFByb3BUeXBlcy5vbmVPZihbXCJ4c1wiLCBcInNcIiwgXCJtXCJdKSxcblxuICAgIC8qKlxuICAgICAgICogRW5zdXJlIHRoZSB0ZXh0IG9mIHRoZSBidXR0b24gc2l0cyBmbHVzaCB0byB0aGUgbGVmdCwgcmlnaHQsIG9yIGJvdGggc2lkZXMgb2YgaXRzIGNvbnRhaW5lclxuICAgICAgICovXG5cbiAgICAvKipcbiAgICAgICAqIEVuc3VyZSB0aGUgdGV4dCBvZiB0aGUgYnV0dG9uIHNpdHMgZmx1c2ggdG8gdGhlIGxlZnQsIHJpZ2h0LCBvciBib3RoIHNpZGVzIG9mIGl0cyBjb250YWluZXJcbiAgICAgICAqL1xuICAgIGZsdXNoOiBQcm9wVHlwZXMub25lT2YoW1wibGVmdFwiLCBcInJpZ2h0XCIsIFwiYm90aFwiXSksXG5cbiAgICAvKipcbiAgICAgICAqIGBkaXNhYmxlZGAgaXMgYWxzbyBhbGxvd2VkXG4gICAgICAgKi9cblxuICAgIC8qKlxuICAgICAgICogYGRpc2FibGVkYCBpcyBhbHNvIGFsbG93ZWRcbiAgICAgICAqL1xuICAgIGlzRGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gICAgLyoqXG4gICAgICAgKiBGb3JjZSBkaXNhYmxlcyB0aGUgYnV0dG9uIGFuZCBjaGFuZ2VzIHRoZSBpY29uIHRvIGEgbG9hZGluZyBzcGlubmVyXG4gICAgICAgKi9cblxuICAgIC8qKlxuICAgICAgICogRm9yY2UgZGlzYWJsZXMgdGhlIGJ1dHRvbiBhbmQgY2hhbmdlcyB0aGUgaWNvbiB0byBhIGxvYWRpbmcgc3Bpbm5lclxuICAgICAgICovXG4gICAgaXNMb2FkaW5nOiBQcm9wVHlwZXMuYm9vbCxcblxuICAgIC8qKlxuICAgICAgICogSXMgaW4gdGhlIHNlbGVjdGVkIHN0YXRlXG4gICAgICAgKi9cblxuICAgIC8qKlxuICAgICAgICogQXBwbGllcyB0aGUgYm9vbGVhbiBzdGF0ZSBhcyB0aGUgYGFyaWEtcHJlc3NlZGAgcHJvcGVydHkgdG8gY3JlYXRlIGEgdG9nZ2xlIGJ1dHRvbi5cbiAgICAgICAqICpPbmx5IHVzZSB3aGVuIHRoZSByZWFkYWJsZSB0ZXh0IGRvZXMgbm90IGNoYW5nZSBiZXR3ZWVuIHN0YXRlcy4qXG4gICAgICAgKi9cblxuICAgIC8qKlxuICAgICAgICogQXBwbGllcyB0aGUgYm9vbGVhbiBzdGF0ZSBhcyB0aGUgYGFyaWEtcHJlc3NlZGAgcHJvcGVydHkgdG8gY3JlYXRlIGEgdG9nZ2xlIGJ1dHRvbi5cbiAgICAgICAqICpPbmx5IHVzZSB3aGVuIHRoZSByZWFkYWJsZSB0ZXh0IGRvZXMgbm90IGNoYW5nZSBiZXR3ZWVuIHN0YXRlcy4qXG4gICAgICAgKi9cbiAgICBpc1NlbGVjdGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICB0YXJnZXQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgcmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHR5cGU6IFByb3BUeXBlcy5vbmVPZihbXCJidXR0b25cIiwgXCJzdWJtaXRcIl0pLFxuICAgIGJ1dHRvblJlZjogUHJvcFR5cGVzLmFueSxcblxuICAgIC8qKlxuICAgICAgICogT2JqZWN0IG9mIHByb3BzIHBhc3NlZCB0byB0aGUgPHNwYW4vPiB3cmFwcGluZyB0aGUgYnV0dG9uJ3MgY29udGVudFxuICAgICAgICovXG4gICAgY29udGVudFByb3BzOiBQcm9wVHlwZXMuYW55LFxuXG4gICAgLyoqXG4gICAgICAgKiBBbnkgYHR5cGVgIGFjY2VwdGVkIGJ5IEV1aUljb25cbiAgICAgICAqL1xuICAgIGljb25UeXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbGVydFwiLCBcImFuYWx5emVFdmVudFwiLCBcImFubm90YXRpb25cIiwgXCJhcG1BcHBcIiwgXCJhcG1UcmFjZVwiLCBcImFwcFNlYXJjaEFwcFwiLCBcImFwcHNcIiwgXCJhcnJvd0Rvd25cIiwgXCJhcnJvd0xlZnRcIiwgXCJhcnJvd1JpZ2h0XCIsIFwiYXJyb3dVcFwiLCBcImFycm93U3RhcnRcIiwgXCJhcnJvd0VuZFwiLCBcImFzdGVyaXNrXCIsIFwiYXVkaXRiZWF0QXBwXCIsIFwiYmVha2VyXCIsIFwiYmVsbFwiLCBcImJlbGxTbGFzaFwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGVja1wiLCBcImNoZWNrSW5DaXJjbGVGaWxsZWRcIiwgXCJjaGVlclwiLCBcImNsYXNzaWZpY2F0aW9uSm9iXCIsIFwiY2xvY2tcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkFDaXJjbGVGaWxsZWRcIiwgXCJjcm9zc2hhaXJzXCIsIFwiY3VycmVuY3lcIiwgXCJjdXRcIiwgXCJkYXNoYm9hcmRBcHBcIiwgXCJkYXRhVmlzdWFsaXplclwiLCBcImRhdGFiYXNlXCIsIFwiZGVza3RvcFwiLCBcImRldlRvb2xzQXBwXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZXFsXCIsIFwiZXJhc2VyXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZsYWdcIiwgXCJmbGVldEFwcFwiLCBcImZvbGRcIiwgXCJmb2xkZXJDaGVja1wiLCBcImZvbGRlckNsb3NlZFwiLCBcImZvbGRlckV4Y2xhbWF0aW9uXCIsIFwiZm9sZGVyT3BlblwiLCBcImZyYW1lTmV4dFwiLCBcImZyYW1lUHJldmlvdXNcIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFNjcmVlbkV4aXRcIiwgXCJmdW5jdGlvblwiLCBcImdlYXJcIiwgXCJnaXNBcHBcIiwgXCJnbGFzc2VzXCIsIFwiZ2xvYmVcIiwgXCJncmFiXCIsIFwiZ3JhYkhvcml6b250YWxcIiwgXCJncmFwaEFwcFwiLCBcImdyaWRcIiwgXCJncm9rQXBwXCIsIFwiaGVhcnRcIiwgXCJoZWFydGJlYXRBcHBcIiwgXCJoZWF0bWFwXCIsIFwiaGVscFwiLCBcImhvbWVcIiwgXCJpSW5DaXJjbGVcIiwgXCJpbWFnZVwiLCBcImltcG9ydEFjdGlvblwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5wdXRPdXRwdXRcIiwgXCJpbnNwZWN0XCIsIFwiaW52ZXJ0XCIsIFwiaXBcIiwgXCJrZXlib2FyZFwiLCBcImtxbEZpZWxkXCIsIFwia3FsRnVuY3Rpb25cIiwgXCJrcWxPcGVyYW5kXCIsIFwia3FsU2VsZWN0b3JcIiwgXCJrcWxWYWx1ZVwiLCBcImt1YmVybmV0ZXNOb2RlXCIsIFwia3ViZXJuZXRlc1BvZFwiLCBcImxheWVyc1wiLCBcImxlbnNBcHBcIiwgXCJsZXR0ZXJpbmdcIiwgXCJsaW5lRGFzaGVkXCIsIFwibGluZURvdHRlZFwiLCBcImxpbmVTb2xpZFwiLCBcImxpbmtcIiwgXCJsaXN0XCIsIFwibGlzdEFkZFwiLCBcImxvY2tcIiwgXCJsb2NrT3BlblwiLCBcImxvZ29BV1NcIiwgXCJsb2dvQVdTTW9ub1wiLCBcImxvZ29BZXJvc3Bpa2VcIiwgXCJsb2dvQXBhY2hlXCIsIFwibG9nb0FwcFNlYXJjaFwiLCBcImxvZ29BenVyZVwiLCBcImxvZ29BenVyZU1vbm9cIiwgXCJsb2dvQmVhdHNcIiwgXCJsb2dvQnVzaW5lc3NBbmFseXRpY3NcIiwgXCJsb2dvQ2VwaFwiLCBcImxvZ29DbG91ZFwiLCBcImxvZ29DbG91ZEVudGVycHJpc2VcIiwgXCJsb2dvQ29kZVwiLCBcImxvZ29Db2Rlc2FuZGJveFwiLCBcImxvZ29Db3VjaGJhc2VcIiwgXCJsb2dvRG9ja2VyXCIsIFwibG9nb0Ryb3B3aXphcmRcIiwgXCJsb2dvRWxhc3RpY1wiLCBcImxvZ29FbGFzdGljU3RhY2tcIiwgXCJsb2dvRWxhc3RpY3NlYXJjaFwiLCBcImxvZ29FbnRlcnByaXNlU2VhcmNoXCIsIFwibG9nb0V0Y2RcIiwgXCJsb2dvR0NQXCIsIFwibG9nb0dDUE1vbm9cIiwgXCJsb2dvR2l0aHViXCIsIFwibG9nb0dtYWlsXCIsIFwibG9nb0dvbGFuZ1wiLCBcImxvZ29Hb29nbGVHXCIsIFwibG9nb0hBcHJveHlcIiwgXCJsb2dvSUJNXCIsIFwibG9nb0lCTU1vbm9cIiwgXCJsb2dvS2Fma2FcIiwgXCJsb2dvS2liYW5hXCIsIFwibG9nb0t1YmVybmV0ZXNcIiwgXCJsb2dvTG9nZ2luZ1wiLCBcImxvZ29Mb2dzdGFzaFwiLCBcImxvZ29NYXBzXCIsIFwibG9nb01lbWNhY2hlZFwiLCBcImxvZ29NZXRyaWNzXCIsIFwibG9nb01vbmdvZGJcIiwgXCJsb2dvTXlTUUxcIiwgXCJsb2dvTmdpbnhcIiwgXCJsb2dvT2JzZXJ2YWJpbGl0eVwiLCBcImxvZ29Pc3F1ZXJ5XCIsIFwibG9nb1BocFwiLCBcImxvZ29Qb3N0Z3Jlc1wiLCBcImxvZ29Qcm9tZXRoZXVzXCIsIFwibG9nb1JhYmJpdG1xXCIsIFwibG9nb1JlZGlzXCIsIFwibG9nb1NlY3VyaXR5XCIsIFwibG9nb1NpdGVTZWFyY2hcIiwgXCJsb2dvU2tldGNoXCIsIFwibG9nb1NsYWNrXCIsIFwibG9nb1VwdGltZVwiLCBcImxvZ29XZWJob29rXCIsIFwibG9nb1dpbmRvd3NcIiwgXCJsb2dvV29ya3BsYWNlU2VhcmNoXCIsIFwibG9nc0FwcFwiLCBcImxvZ3N0YXNoRmlsdGVyXCIsIFwibG9nc3Rhc2hJZlwiLCBcImxvZ3N0YXNoSW5wdXRcIiwgXCJsb2dzdGFzaE91dHB1dFwiLCBcImxvZ3N0YXNoUXVldWVcIiwgXCJtYWNoaW5lTGVhcm5pbmdBcHBcIiwgXCJtYWduZXRcIiwgXCJtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uXCIsIFwibWFnbmlmeVdpdGhNaW51c1wiLCBcIm1hZ25pZnlXaXRoUGx1c1wiLCBcIm1hbmFnZW1lbnRBcHBcIiwgXCJtYXBNYXJrZXJcIiwgXCJtZW1vcnlcIiwgXCJtZW51XCIsIFwibWVudURvd25cIiwgXCJtZW51TGVmdFwiLCBcIm1lbnVSaWdodFwiLCBcIm1lbnVVcFwiLCBcIm1lcmdlXCIsIFwibWV0cmljYmVhdEFwcFwiLCBcIm1ldHJpY3NBcHBcIiwgXCJtaW5pbWl6ZVwiLCBcIm1pbnVzXCIsIFwibWludXNJbkNpcmNsZVwiLCBcIm1pbnVzSW5DaXJjbGVGaWxsZWRcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5vZGVcIiwgXCJub3RlYm9va0FwcFwiLCBcIm51bWJlclwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIiwgXCJvdXRsaWVyRGV0ZWN0aW9uSm9iXCIsIFwicGFja2FnZVwiLCBcInBhY2tldGJlYXRBcHBcIiwgXCJwYWdlU2VsZWN0XCIsIFwicGFnZXNTZWxlY3RcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVsaW5lQXBwXCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNub3dmbGFrZVwiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc0FwcFwiLCBcInNxbEFwcFwiLCBcInN0YXJFbXB0eVwiLCBcInN0YXJFbXB0eVNwYWNlXCIsIFwic3RhckZpbGxlZFwiLCBcInN0YXJGaWxsZWRTcGFjZVwiLCBcInN0YXJNaW51c0VtcHR5XCIsIFwic3Rhck1pbnVzRmlsbGVkXCIsIFwic3RhclBsdXNFbXB0eVwiLCBcInN0YXJQbHVzRmlsbGVkXCIsIFwic3RhdHNcIiwgXCJzdG9wXCIsIFwic3RvcEZpbGxlZFwiLCBcInN0b3BTbGFzaFwiLCBcInN0b3JhZ2VcIiwgXCJzdHJpbmdcIiwgXCJzdWJtb2R1bGVcIiwgXCJzdW5cIiwgXCJzd2F0Y2hJbnB1dFwiLCBcInN5bWxpbmtcIiwgXCJ0YWJsZURlbnNpdHlDb21wYWN0XCIsIFwidGFibGVEZW5zaXR5RXhwYW5kZWRcIiwgXCJ0YWJsZURlbnNpdHlOb3JtYWxcIiwgXCJ0YWJsZU9mQ29udGVudHNcIiwgXCJ0YWdcIiwgXCJ0ZWFyXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJ0aW1lbGluZVwiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFzaFwiLCBcInVuZm9sZFwiLCBcInVubGlua1wiLCBcInVwZ3JhZGVBc3Npc3RhbnRBcHBcIiwgXCJ1cHRpbWVBcHBcIiwgXCJ1c2VyXCIsIFwidXNlckF2YXRhclwiLCBcInVzZXJzXCIsIFwidXNlcnNSb2xlc0FwcFwiLCBcInZlY3RvclwiLCBcInZpZGVvUGxheWVyXCIsIFwidmlzQXJlYVwiLCBcInZpc0FyZWFTdGFja2VkXCIsIFwidmlzQmFySG9yaXpvbnRhbFwiLCBcInZpc0Jhckhvcml6b250YWxTdGFja2VkXCIsIFwidmlzQmFyVmVydGljYWxcIiwgXCJ2aXNCYXJWZXJ0aWNhbFN0YWNrZWRcIiwgXCJ2aXNHYXVnZVwiLCBcInZpc0dvYWxcIiwgXCJ2aXNMaW5lXCIsIFwidmlzTWFwQ29vcmRpbmF0ZVwiLCBcInZpc01hcFJlZ2lvblwiLCBcInZpc01ldHJpY1wiLCBcInZpc1BpZVwiLCBcInZpc1RhYmxlXCIsIFwidmlzVGFnQ2xvdWRcIiwgXCJ2aXNUZXh0XCIsIFwidmlzVGltZWxpb25cIiwgXCJ2aXNWZWdhXCIsIFwidmlzVmlzdWFsQnVpbGRlclwiLCBcInZpc3VhbGl6ZUFwcFwiLCBcIndhdGNoZXNBcHBcIiwgXCJ3b3JkV3JhcFwiLCBcIndvcmRXcmFwRGlzYWJsZWRcIiwgXCJ3b3JrcGxhY2VTZWFyY2hBcHBcIiwgXCJ3cmVuY2hcIiwgXCJ0b2tlbkFsaWFzXCIsIFwidG9rZW5Bbm5vdGF0aW9uXCIsIFwidG9rZW5BcnJheVwiLCBcInRva2VuQmluYXJ5XCIsIFwidG9rZW5Cb29sZWFuXCIsIFwidG9rZW5DbGFzc1wiLCBcInRva2VuQ29tcGxldGlvblN1Z2dlc3RlclwiLCBcInRva2VuQ29uc3RhbnRcIiwgXCJ0b2tlbkRhdGVcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2hhcGVcIiwgXCJ0b2tlblN0cmluZ1wiLCBcInRva2VuU3RydWN0XCIsIFwidG9rZW5TeW1ib2xcIiwgXCJ0b2tlblRhZ1wiLCBcInRva2VuVGV4dFwiLCBcInRva2VuVG9rZW5Db3VudFwiLCBcInRva2VuVmFyaWFibGVcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWRdKSxcblxuICAgIC8qKlxuICAgICAgICogQ2FuIG9ubHkgYmUgb25lIHNpZGUgYGxlZnRgIG9yIGByaWdodGBcbiAgICAgICAqL1xuICAgIGljb25TaWRlOiBQcm9wVHlwZXMub25lT2YoW1wibGVmdFwiLCBcInJpZ2h0XCJdKSxcblxuICAgIC8qKlxuICAgICAgICogT2JqZWN0IG9mIHByb3BzIHBhc3NlZCB0byB0aGUgPHNwYW4vPiB3cmFwcGluZyB0aGUgY29udGVudCdzIHRleHQgKG9ubHkgaWYgdGhlIGNoaWxkcmVuIGlzIGEgYHN0cmluZ2ApXG4gICAgICAgKiBJdCBkb2Vzbid0IGFwcGx5IHRvIHRoZSBpY29uLlxuICAgICAgICovXG4gICAgdGV4dFByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICByZWY6IFByb3BUeXBlcy5hbnksXG4gICAgICBcImRhdGEtdGV4dFwiOiBQcm9wVHlwZXMuc3RyaW5nXG4gICAgfSksXG4gICAgaWNvblNpemU6IFByb3BUeXBlcy5vbmVPZihbXCJzXCIsIFwibVwiXSksXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZ1xuICB9KSxcblxuICAvKipcbiAgICAgICAqIFVzZSBhIGJvcmRlciBzdHlsZSBvZiBjYXJkIGluc3RlYWQgb2Ygc2hhZG93XG4gICAgICAgKi9cbiAgaGFzQm9yZGVyOiBQcm9wVHlwZXMuYm9vbFxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcImlzU2VsZWN0ZWRcIiwgXCJpc0Rpc2FibGVkXCIsIFwiY29sb3JcIiwgXCJjaGlsZHJlblwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IEV1aUJ1dHRvbkVtcHR5IH0gZnJvbSAnLi4vYnV0dG9uL2J1dHRvbl9lbXB0eSc7XG5pbXBvcnQgeyBFdWlJMThuIH0gZnJvbSAnLi4vaTE4bic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlDYXJkU2VsZWN0ID0gZnVuY3Rpb24gRXVpQ2FyZFNlbGVjdChfcmVmKSB7XG4gIHZhciBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIF9yZWYkaXNTZWxlY3RlZCA9IF9yZWYuaXNTZWxlY3RlZCxcbiAgICAgIGlzU2VsZWN0ZWQgPSBfcmVmJGlzU2VsZWN0ZWQgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRpc1NlbGVjdGVkLFxuICAgICAgaXNEaXNhYmxlZCA9IF9yZWYuaXNEaXNhYmxlZCxcbiAgICAgIGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgY2hpbGQgPSBldWlDYXJkU2VsZWN0YWJsZVRleHQoaXNTZWxlY3RlZCwgaXNEaXNhYmxlZCwgY2hpbGRyZW4pO1xuICB2YXIgc2VsZWN0Q2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUNhcmRTZWxlY3QnLCBcImV1aUNhcmRTZWxlY3QtLVwiLmNvbmNhdChldWlDYXJkU2VsZWN0YWJsZUNvbG9yKGNvbG9yLCBpc1NlbGVjdGVkKSksIGNsYXNzTmFtZSk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUJ1dHRvbkVtcHR5LCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBzZWxlY3RDbGFzc2VzLFxuICAgIGNvbG9yOiBjb2xvciB8fCAndGV4dCcsXG4gICAgc2l6ZTogXCJ4c1wiLFxuICAgIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsXG4gICAgaWNvblR5cGU6IGlzU2VsZWN0ZWQgPyAnY2hlY2snIDogdW5kZWZpbmVkLFxuICAgIHJvbGU6IFwic3dpdGNoXCIsXG4gICAgXCJhcmlhLWNoZWNrZWRcIjogaXNTZWxlY3RlZFxuICB9LCByZXN0KSwgY2hpbGQpO1xufTtcbkV1aUNhcmRTZWxlY3QucHJvcFR5cGVzID0ge1xuICBocmVmOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICAgKiBBbnkgb2Ygb3VyIG5hbWVkIGNvbG9yc1xuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIEFueSBvZiBvdXIgbmFtZWQgY29sb3JzXG4gICAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMub25lT2YoW1wicHJpbWFyeVwiLCBcImRhbmdlclwiLCBcInRleHRcIiwgXCJnaG9zdFwiLCBcInN1Y2Nlc3NcIiwgXCJ3YXJuaW5nXCJdKSxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mKFtcInhzXCIsIFwic1wiLCBcIm1cIl0pLFxuXG4gIC8qKlxuICAgICAqIEVuc3VyZSB0aGUgdGV4dCBvZiB0aGUgYnV0dG9uIHNpdHMgZmx1c2ggdG8gdGhlIGxlZnQsIHJpZ2h0LCBvciBib3RoIHNpZGVzIG9mIGl0cyBjb250YWluZXJcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBFbnN1cmUgdGhlIHRleHQgb2YgdGhlIGJ1dHRvbiBzaXRzIGZsdXNoIHRvIHRoZSBsZWZ0LCByaWdodCwgb3IgYm90aCBzaWRlcyBvZiBpdHMgY29udGFpbmVyXG4gICAgICovXG4gIGZsdXNoOiBQcm9wVHlwZXMub25lT2YoW1wibGVmdFwiLCBcInJpZ2h0XCIsIFwiYm90aFwiXSksXG5cbiAgLyoqXG4gICAgICogYGRpc2FibGVkYCBpcyBhbHNvIGFsbG93ZWRcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBgZGlzYWJsZWRgIGlzIGFsc28gYWxsb3dlZFxuICAgICAqL1xuICBpc0Rpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBGb3JjZSBkaXNhYmxlcyB0aGUgYnV0dG9uIGFuZCBjaGFuZ2VzIHRoZSBpY29uIHRvIGEgbG9hZGluZyBzcGlubmVyXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogRm9yY2UgZGlzYWJsZXMgdGhlIGJ1dHRvbiBhbmQgY2hhbmdlcyB0aGUgaWNvbiB0byBhIGxvYWRpbmcgc3Bpbm5lclxuICAgICAqL1xuICBpc0xvYWRpbmc6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIElzIGluIHRoZSBzZWxlY3RlZCBzdGF0ZVxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIEFwcGxpZXMgdGhlIGJvb2xlYW4gc3RhdGUgYXMgdGhlIGBhcmlhLXByZXNzZWRgIHByb3BlcnR5IHRvIGNyZWF0ZSBhIHRvZ2dsZSBidXR0b24uXG4gICAgICogKk9ubHkgdXNlIHdoZW4gdGhlIHJlYWRhYmxlIHRleHQgZG9lcyBub3QgY2hhbmdlIGJldHdlZW4gc3RhdGVzLipcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBBcHBsaWVzIHRoZSBib29sZWFuIHN0YXRlIGFzIHRoZSBgYXJpYS1wcmVzc2VkYCBwcm9wZXJ0eSB0byBjcmVhdGUgYSB0b2dnbGUgYnV0dG9uLlxuICAgICAqICpPbmx5IHVzZSB3aGVuIHRoZSByZWFkYWJsZSB0ZXh0IGRvZXMgbm90IGNoYW5nZSBiZXR3ZWVuIHN0YXRlcy4qXG4gICAgICovXG4gIGlzU2VsZWN0ZWQ6IFByb3BUeXBlcy5ib29sLFxuICB0YXJnZXQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHJlbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgdHlwZTogUHJvcFR5cGVzLm9uZU9mKFtcImJ1dHRvblwiLCBcInN1Ym1pdFwiXSksXG4gIGJ1dHRvblJlZjogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBPYmplY3Qgb2YgcHJvcHMgcGFzc2VkIHRvIHRoZSA8c3Bhbi8+IHdyYXBwaW5nIHRoZSBidXR0b24ncyBjb250ZW50XG4gICAgICovXG4gIGNvbnRlbnRQcm9wczogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBBbnkgYHR5cGVgIGFjY2VwdGVkIGJ5IEV1aUljb25cbiAgICAgKi9cbiAgaWNvblR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhY2Nlc3NpYmlsaXR5XCIsIFwiYWRkRGF0YUFwcFwiLCBcImFkdmFuY2VkU2V0dGluZ3NBcHBcIiwgXCJhZ2VudEFwcFwiLCBcImFnZ3JlZ2F0ZVwiLCBcImFsZXJ0XCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbG9ja1wiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQUNpcmNsZUZpbGxlZFwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRvY3VtZW50XCIsIFwiZG9jdW1lbnRFZGl0XCIsIFwiZG9jdW1lbnRhdGlvblwiLCBcImRvY3VtZW50c1wiLCBcImRvdFwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJleGl0XCIsIFwiZXhwYW5kXCIsIFwiZXhwYW5kTWluaVwiLCBcImV4cG9ydEFjdGlvblwiLCBcImV5ZVwiLCBcImV5ZUNsb3NlZFwiLCBcImZhY2VIYXBweVwiLCBcImZhY2VOZXV0cmFsXCIsIFwiZmFjZVNhZFwiLCBcImZpbGViZWF0QXBwXCIsIFwiZmlsdGVyXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhDbG9zZVwiLCBcImluZGV4RWRpdFwiLCBcImluZGV4Rmx1c2hcIiwgXCJpbmRleE1hbmFnZW1lbnRBcHBcIiwgXCJpbmRleE1hcHBpbmdcIiwgXCJpbmRleE9wZW5cIiwgXCJpbmRleFBhdHRlcm5BcHBcIiwgXCJpbmRleFJvbGx1cEFwcFwiLCBcImluZGV4UnVudGltZVwiLCBcImluZGV4U2V0dGluZ3NcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibmFtZXNwYWNlXCIsIFwibmVzdGVkXCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZWxpbmVBcHBcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzQXBwXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpb25BcHBcIiwgXCJ0aW1lUmVmcmVzaFwiLCBcInRpbWVzbGlkZXJcIiwgXCJ0cmFpbmluZ1wiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZF0pLFxuXG4gIC8qKlxuICAgICAqIENhbiBvbmx5IGJlIG9uZSBzaWRlIGBsZWZ0YCBvciBgcmlnaHRgXG4gICAgICovXG4gIGljb25TaWRlOiBQcm9wVHlwZXMub25lT2YoW1wibGVmdFwiLCBcInJpZ2h0XCJdKSxcblxuICAvKipcbiAgICAgKiBPYmplY3Qgb2YgcHJvcHMgcGFzc2VkIHRvIHRoZSA8c3Bhbi8+IHdyYXBwaW5nIHRoZSBjb250ZW50J3MgdGV4dCAob25seSBpZiB0aGUgY2hpbGRyZW4gaXMgYSBgc3RyaW5nYClcbiAgICAgKiBJdCBkb2Vzbid0IGFwcGx5IHRvIHRoZSBpY29uLlxuICAgICAqL1xuICB0ZXh0UHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICByZWY6IFByb3BUeXBlcy5hbnksXG4gICAgXCJkYXRhLXRleHRcIjogUHJvcFR5cGVzLnN0cmluZ1xuICB9KSxcbiAgaWNvblNpemU6IFByb3BUeXBlcy5vbmVPZihbXCJzXCIsIFwibVwiXSksXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZ1xufTtcblxuZnVuY3Rpb24gZXVpQ2FyZFNlbGVjdGFibGVUZXh0KGlzU2VsZWN0ZWQsIGlzRGlzYWJsZWQsIGNoaWxkcmVuKSB7XG4gIGlmIChjaGlsZHJlbikge1xuICAgIHJldHVybiBjaGlsZHJlbjtcbiAgfVxuXG4gIHZhciB0ZXh0O1xuXG4gIGlmIChpc1NlbGVjdGVkKSB7XG4gICAgdGV4dCA9IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgdG9rZW46IFwiZXVpQ2FyZFNlbGVjdC5zZWxlY3RlZFwiLFxuICAgICAgZGVmYXVsdDogXCJTZWxlY3RlZFwiXG4gICAgfSk7XG4gIH0gZWxzZSBpZiAoaXNEaXNhYmxlZCkge1xuICAgIHRleHQgPSBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgIHRva2VuOiBcImV1aUNhcmRTZWxlY3QudW5hdmFpbGFibGVcIixcbiAgICAgIGRlZmF1bHQ6IFwiVW5hdmFpbGFibGVcIlxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHRleHQgPSBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgIHRva2VuOiBcImV1aUNhcmRTZWxlY3Quc2VsZWN0XCIsXG4gICAgICBkZWZhdWx0OiBcIlNlbGVjdFwiXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gdGV4dDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV1aUNhcmRTZWxlY3RhYmxlQ29sb3IoY29sb3IsIGlzU2VsZWN0ZWQpIHtcbiAgdmFyIGNhbGN1bGF0ZWRDb2xvcjtcblxuICBpZiAoY29sb3IpIHtcbiAgICBjYWxjdWxhdGVkQ29sb3IgPSBjb2xvcjtcbiAgfSBlbHNlIGlmIChpc1NlbGVjdGVkKSB7XG4gICAgY2FsY3VsYXRlZENvbG9yID0gJ3N1Y2Nlc3MnO1xuICB9IGVsc2Uge1xuICAgIGNhbGN1bGF0ZWRDb2xvciA9ICd0ZXh0JztcbiAgfVxuXG4gIHJldHVybiBjYWxjdWxhdGVkQ29sb3I7XG59IiwgImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxudmFyIF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcImlkXCIsIFwiY2hlY2tlZFwiLCBcImxhYmVsXCIsIFwib25DaGFuZ2VcIiwgXCJ0eXBlXCIsIFwiZGlzYWJsZWRcIiwgXCJjb21wcmVzc2VkXCIsIFwiaW5kZXRlcm1pbmF0ZVwiLCBcImlucHV0UmVmXCIsIFwibGFiZWxQcm9wc1wiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBrZXlzT2YgfSBmcm9tICcuLi8uLi9jb21tb24nO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciB0eXBlVG9DbGFzc05hbWVNYXAgPSB7XG4gIGluTGlzdDogJ2V1aUNoZWNrYm94LS1pbkxpc3QnXG59O1xuZXhwb3J0IHZhciBUWVBFUyA9IGtleXNPZih0eXBlVG9DbGFzc05hbWVNYXApO1xuZXhwb3J0IHZhciBFdWlDaGVja2JveCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoRXVpQ2hlY2tib3gsIF9Db21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoRXVpQ2hlY2tib3gpO1xuXG4gIGZ1bmN0aW9uIEV1aUNoZWNrYm94KCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlDaGVja2JveCk7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbC5hcHBseShfc3VwZXIsIFt0aGlzXS5jb25jYXQoYXJncykpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImlucHV0UmVmXCIsIHVuZGVmaW5lZCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic2V0SW5wdXRSZWZcIiwgZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICBfdGhpcy5pbnB1dFJlZiA9IGlucHV0O1xuXG4gICAgICBpZiAoX3RoaXMucHJvcHMuaW5wdXRSZWYpIHtcbiAgICAgICAgX3RoaXMucHJvcHMuaW5wdXRSZWYoaW5wdXQpO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5pbnZhbGlkYXRlSW5kZXRlcm1pbmF0ZSgpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEV1aUNoZWNrYm94LCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHRoaXMuaW52YWxpZGF0ZUluZGV0ZXJtaW5hdGUoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkVXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcbiAgICAgIHRoaXMuaW52YWxpZGF0ZUluZGV0ZXJtaW5hdGUoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMuY2xhc3NOYW1lLFxuICAgICAgICAgIGlkID0gX3RoaXMkcHJvcHMuaWQsXG4gICAgICAgICAgY2hlY2tlZCA9IF90aGlzJHByb3BzLmNoZWNrZWQsXG4gICAgICAgICAgbGFiZWwgPSBfdGhpcyRwcm9wcy5sYWJlbCxcbiAgICAgICAgICBvbkNoYW5nZSA9IF90aGlzJHByb3BzLm9uQ2hhbmdlLFxuICAgICAgICAgIHR5cGUgPSBfdGhpcyRwcm9wcy50eXBlLFxuICAgICAgICAgIGRpc2FibGVkID0gX3RoaXMkcHJvcHMuZGlzYWJsZWQsXG4gICAgICAgICAgY29tcHJlc3NlZCA9IF90aGlzJHByb3BzLmNvbXByZXNzZWQsXG4gICAgICAgICAgaW5kZXRlcm1pbmF0ZSA9IF90aGlzJHByb3BzLmluZGV0ZXJtaW5hdGUsXG4gICAgICAgICAgaW5wdXRSZWYgPSBfdGhpcyRwcm9wcy5pbnB1dFJlZixcbiAgICAgICAgICBsYWJlbFByb3BzID0gX3RoaXMkcHJvcHMubGFiZWxQcm9wcyxcbiAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzLCBfZXhjbHVkZWQpO1xuXG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUNoZWNrYm94JywgdHlwZSAmJiB0eXBlVG9DbGFzc05hbWVNYXBbdHlwZV0sIHtcbiAgICAgICAgJ2V1aUNoZWNrYm94LS1ub0xhYmVsJzogIWxhYmVsLFxuICAgICAgICAnZXVpQ2hlY2tib3gtLWNvbXByZXNzZWQnOiBjb21wcmVzc2VkXG4gICAgICB9LCBjbGFzc05hbWUpO1xuICAgICAgdmFyIGxhYmVsQ2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUNoZWNrYm94X19sYWJlbCcsIGxhYmVsUHJvcHMgPT09IG51bGwgfHwgbGFiZWxQcm9wcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogbGFiZWxQcm9wcy5jbGFzc05hbWUpO1xuICAgICAgdmFyIG9wdGlvbmFsTGFiZWw7XG5cbiAgICAgIGlmIChsYWJlbCkge1xuICAgICAgICBvcHRpb25hbExhYmVsID0gX19fRW1vdGlvbkpTWChcImxhYmVsXCIsIF9leHRlbmRzKHt9LCBsYWJlbFByb3BzLCB7XG4gICAgICAgICAgY2xhc3NOYW1lOiBsYWJlbENsYXNzZXMsXG4gICAgICAgICAgaHRtbEZvcjogaWRcbiAgICAgICAgfSksIGxhYmVsKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgICAgIH0sIF9fX0Vtb3Rpb25KU1goXCJpbnB1dFwiLCBfZXh0ZW5kcyh7XG4gICAgICAgIGNsYXNzTmFtZTogXCJldWlDaGVja2JveF9faW5wdXRcIixcbiAgICAgICAgdHlwZTogXCJjaGVja2JveFwiLFxuICAgICAgICBpZDogaWQsXG4gICAgICAgIGNoZWNrZWQ6IGNoZWNrZWQsXG4gICAgICAgIG9uQ2hhbmdlOiBvbkNoYW5nZSxcbiAgICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgICAgICByZWY6IHRoaXMuc2V0SW5wdXRSZWZcbiAgICAgIH0sIHJlc3QpKSwgX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJldWlDaGVja2JveF9fc3F1YXJlXCJcbiAgICAgIH0pLCBvcHRpb25hbExhYmVsKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaW52YWxpZGF0ZUluZGV0ZXJtaW5hdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaW52YWxpZGF0ZUluZGV0ZXJtaW5hdGUoKSB7XG4gICAgICBpZiAodGhpcy5pbnB1dFJlZikge1xuICAgICAgICB0aGlzLmlucHV0UmVmLmluZGV0ZXJtaW5hdGUgPSB0aGlzLnByb3BzLmluZGV0ZXJtaW5hdGU7XG4gICAgICB9XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEV1aUNoZWNrYm94O1xufShDb21wb25lbnQpO1xuXG5fZGVmaW5lUHJvcGVydHkoRXVpQ2hlY2tib3gsIFwiZGVmYXVsdFByb3BzXCIsIHtcbiAgY2hlY2tlZDogZmFsc2UsXG4gIGRpc2FibGVkOiBmYWxzZSxcbiAgaW5kZXRlcm1pbmF0ZTogZmFsc2UsXG4gIGNvbXByZXNzZWQ6IGZhbHNlXG59KTtcblxuRXVpQ2hlY2tib3gucHJvcFR5cGVzID0ge1xuICBpZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBjaGVja2VkOiBQcm9wVHlwZXMuYm9vbCxcbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCxcbiAgLy8gb3ZlcnJpZGluZyB0byBtYWtlIGl0IHJlcXVpcmVkXG4gIGlucHV0UmVmOiBQcm9wVHlwZXMuZnVuYyxcbiAgbGFiZWw6IFByb3BUeXBlcy5ub2RlLFxuICB0eXBlOiBQcm9wVHlwZXMub25lT2YoW1wiaW5MaXN0XCJdKSxcbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIHdoZW4gYHRydWVgIGNyZWF0ZXMgYSBzaG9ydGVyIGhlaWdodCBjaGVja2JveCByb3dcbiAgICAgKi9cbiAgY29tcHJlc3NlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGluZGV0ZXJtaW5hdGU6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIE9iamVjdCBvZiBwcm9wcyBwYXNzZWQgdG8gdGhlIDxsYWJlbC8+XG4gICAgICovXG4gIGxhYmVsUHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZ1xuICB9KSxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nXG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJndXR0ZXJTaXplXCIsIFwiYWxpZ25JdGVtc1wiLCBcInJlc3BvbnNpdmVcIiwgXCJqdXN0aWZ5Q29udGVudFwiLCBcImRpcmVjdGlvblwiLCBcIndyYXBcIiwgXCJjb21wb25lbnRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsga2V5c09mIH0gZnJvbSAnLi4vY29tbW9uJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgZ3V0dGVyU2l6ZVRvQ2xhc3NOYW1lTWFwID0ge1xuICBub25lOiBudWxsLFxuICB4czogJ2V1aUZsZXhHcm91cC0tZ3V0dGVyRXh0cmFTbWFsbCcsXG4gIHM6ICdldWlGbGV4R3JvdXAtLWd1dHRlclNtYWxsJyxcbiAgbTogJ2V1aUZsZXhHcm91cC0tZ3V0dGVyTWVkaXVtJyxcbiAgbDogJ2V1aUZsZXhHcm91cC0tZ3V0dGVyTGFyZ2UnLFxuICB4bDogJ2V1aUZsZXhHcm91cC0tZ3V0dGVyRXh0cmFMYXJnZSdcbn07XG5leHBvcnQgdmFyIEdVVFRFUl9TSVpFUyA9IGtleXNPZihndXR0ZXJTaXplVG9DbGFzc05hbWVNYXApO1xudmFyIGFsaWduSXRlbXNUb0NsYXNzTmFtZU1hcCA9IHtcbiAgc3RyZXRjaDogbnVsbCxcbiAgZmxleFN0YXJ0OiAnZXVpRmxleEdyb3VwLS1hbGlnbkl0ZW1zRmxleFN0YXJ0JyxcbiAgZmxleEVuZDogJ2V1aUZsZXhHcm91cC0tYWxpZ25JdGVtc0ZsZXhFbmQnLFxuICBjZW50ZXI6ICdldWlGbGV4R3JvdXAtLWFsaWduSXRlbXNDZW50ZXInLFxuICBiYXNlbGluZTogJ2V1aUZsZXhHcm91cC0tYWxpZ25JdGVtc0Jhc2VsaW5lJ1xufTtcbmV4cG9ydCB2YXIgQUxJR05fSVRFTVMgPSBrZXlzT2YoYWxpZ25JdGVtc1RvQ2xhc3NOYW1lTWFwKTtcbnZhciBqdXN0aWZ5Q29udGVudFRvQ2xhc3NOYW1lTWFwID0ge1xuICBmbGV4U3RhcnQ6IG51bGwsXG4gIGZsZXhFbmQ6ICdldWlGbGV4R3JvdXAtLWp1c3RpZnlDb250ZW50RmxleEVuZCcsXG4gIGNlbnRlcjogJ2V1aUZsZXhHcm91cC0tanVzdGlmeUNvbnRlbnRDZW50ZXInLFxuICBzcGFjZUJldHdlZW46ICdldWlGbGV4R3JvdXAtLWp1c3RpZnlDb250ZW50U3BhY2VCZXR3ZWVuJyxcbiAgc3BhY2VBcm91bmQ6ICdldWlGbGV4R3JvdXAtLWp1c3RpZnlDb250ZW50U3BhY2VBcm91bmQnLFxuICBzcGFjZUV2ZW5seTogJ2V1aUZsZXhHcm91cC0tanVzdGlmeUNvbnRlbnRTcGFjZUV2ZW5seSdcbn07XG5leHBvcnQgdmFyIEpVU1RJRllfQ09OVEVOVFMgPSBrZXlzT2YoanVzdGlmeUNvbnRlbnRUb0NsYXNzTmFtZU1hcCk7XG52YXIgZGlyZWN0aW9uVG9DbGFzc05hbWVNYXAgPSB7XG4gIHJvdzogJ2V1aUZsZXhHcm91cC0tZGlyZWN0aW9uUm93JyxcbiAgcm93UmV2ZXJzZTogJ2V1aUZsZXhHcm91cC0tZGlyZWN0aW9uUm93UmV2ZXJzZScsXG4gIGNvbHVtbjogJ2V1aUZsZXhHcm91cC0tZGlyZWN0aW9uQ29sdW1uJyxcbiAgY29sdW1uUmV2ZXJzZTogJ2V1aUZsZXhHcm91cC0tZGlyZWN0aW9uQ29sdW1uUmV2ZXJzZSdcbn07XG5leHBvcnQgdmFyIERJUkVDVElPTlMgPSBrZXlzT2YoZGlyZWN0aW9uVG9DbGFzc05hbWVNYXApO1xuXG52YXIgaXNWYWxpZEVsZW1lbnQgPSBmdW5jdGlvbiBpc1ZhbGlkRWxlbWVudChjb21wb25lbnQpIHtcbiAgcmV0dXJuIFsnZGl2JywgJ3NwYW4nXS5pbmNsdWRlcyhjb21wb25lbnQpO1xufTtcblxuZXhwb3J0IHZhciBFdWlGbGV4R3JvdXAgPSAvKiNfX1BVUkVfXyovZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIF9yZWYkZ3V0dGVyU2l6ZSA9IF9yZWYuZ3V0dGVyU2l6ZSxcbiAgICAgIGd1dHRlclNpemUgPSBfcmVmJGd1dHRlclNpemUgPT09IHZvaWQgMCA/ICdsJyA6IF9yZWYkZ3V0dGVyU2l6ZSxcbiAgICAgIF9yZWYkYWxpZ25JdGVtcyA9IF9yZWYuYWxpZ25JdGVtcyxcbiAgICAgIGFsaWduSXRlbXMgPSBfcmVmJGFsaWduSXRlbXMgPT09IHZvaWQgMCA/ICdzdHJldGNoJyA6IF9yZWYkYWxpZ25JdGVtcyxcbiAgICAgIF9yZWYkcmVzcG9uc2l2ZSA9IF9yZWYucmVzcG9uc2l2ZSxcbiAgICAgIHJlc3BvbnNpdmUgPSBfcmVmJHJlc3BvbnNpdmUgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJHJlc3BvbnNpdmUsXG4gICAgICBfcmVmJGp1c3RpZnlDb250ZW50ID0gX3JlZi5qdXN0aWZ5Q29udGVudCxcbiAgICAgIGp1c3RpZnlDb250ZW50ID0gX3JlZiRqdXN0aWZ5Q29udGVudCA9PT0gdm9pZCAwID8gJ2ZsZXhTdGFydCcgOiBfcmVmJGp1c3RpZnlDb250ZW50LFxuICAgICAgX3JlZiRkaXJlY3Rpb24gPSBfcmVmLmRpcmVjdGlvbixcbiAgICAgIGRpcmVjdGlvbiA9IF9yZWYkZGlyZWN0aW9uID09PSB2b2lkIDAgPyAncm93JyA6IF9yZWYkZGlyZWN0aW9uLFxuICAgICAgX3JlZiR3cmFwID0gX3JlZi53cmFwLFxuICAgICAgd3JhcCA9IF9yZWYkd3JhcCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJHdyYXAsXG4gICAgICBfcmVmJGNvbXBvbmVudCA9IF9yZWYuY29tcG9uZW50LFxuICAgICAgY29tcG9uZW50ID0gX3JlZiRjb21wb25lbnQgPT09IHZvaWQgMCA/ICdkaXYnIDogX3JlZiRjb21wb25lbnQsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlGbGV4R3JvdXAnLCBndXR0ZXJTaXplVG9DbGFzc05hbWVNYXBbZ3V0dGVyU2l6ZV0sIGFsaWduSXRlbXNUb0NsYXNzTmFtZU1hcFthbGlnbkl0ZW1zXSwganVzdGlmeUNvbnRlbnRUb0NsYXNzTmFtZU1hcFtqdXN0aWZ5Q29udGVudF0sIGRpcmVjdGlvblRvQ2xhc3NOYW1lTWFwW2RpcmVjdGlvbl0sIHtcbiAgICAnZXVpRmxleEdyb3VwLS1yZXNwb25zaXZlJzogcmVzcG9uc2l2ZSxcbiAgICAnZXVpRmxleEdyb3VwLS13cmFwJzogd3JhcFxuICB9LCBjbGFzc05hbWUpO1xuXG4gIGlmICghaXNWYWxpZEVsZW1lbnQoY29tcG9uZW50KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIlwiLmNvbmNhdChjb21wb25lbnQsIFwiIGlzIG5vdCBhIHZhbGlkIGVsZW1lbnQgdHlwZS4gVXNlIGBkaXZgIG9yIGBzcGFuYC5cIikpO1xuICB9XG5cbiAgcmV0dXJuIGNvbXBvbmVudCA9PT0gJ3NwYW4nID8gX19fRW1vdGlvbkpTWChcInNwYW5cIiwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICByZWY6IHJlZlxuICB9LCByZXN0KSwgY2hpbGRyZW4pIDogX19fRW1vdGlvbkpTWChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIHJlZjogcmVmXG4gIH0sIHJlc3QpLCBjaGlsZHJlbik7XG59KTtcbkV1aUZsZXhHcm91cC5wcm9wVHlwZXMgPSB7XG4gIGFsaWduSXRlbXM6IFByb3BUeXBlcy5vbmVPZihbXCJzdHJldGNoXCIsIFwiZmxleFN0YXJ0XCIsIFwiZmxleEVuZFwiLCBcImNlbnRlclwiLCBcImJhc2VsaW5lXCJdKSxcbiAgY29tcG9uZW50OiBQcm9wVHlwZXMub25lT2YoW1wiZGl2XCIsIFwic3BhblwiXSksXG4gIGRpcmVjdGlvbjogUHJvcFR5cGVzLm9uZU9mKFtcInJvd1wiLCBcInJvd1JldmVyc2VcIiwgXCJjb2x1bW5cIiwgXCJjb2x1bW5SZXZlcnNlXCJdKSxcbiAgZ3V0dGVyU2l6ZTogUHJvcFR5cGVzLm9uZU9mKFtcIm5vbmVcIiwgXCJ4c1wiLCBcInNcIiwgXCJtXCIsIFwibFwiLCBcInhsXCJdKSxcbiAganVzdGlmeUNvbnRlbnQ6IFByb3BUeXBlcy5vbmVPZihbXCJmbGV4U3RhcnRcIiwgXCJmbGV4RW5kXCIsIFwiY2VudGVyXCIsIFwic3BhY2VCZXR3ZWVuXCIsIFwic3BhY2VBcm91bmRcIiwgXCJzcGFjZUV2ZW5seVwiXSksXG4gIHJlc3BvbnNpdmU6IFByb3BUeXBlcy5ib29sLFxuICB3cmFwOiBQcm9wVHlwZXMuYm9vbCxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nXG59O1xuRXVpRmxleEdyb3VwLmRpc3BsYXlOYW1lID0gJ0V1aUZsZXhHcm91cCc7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImdyb3dcIiwgXCJjb21wb25lbnRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBHUk9XX1NJWkVTID0gWzEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwXTtcbmV4cG9ydCB2YXIgRXVpRmxleEl0ZW0gPSBmdW5jdGlvbiBFdWlGbGV4SXRlbShfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIF9yZWYkZ3JvdyA9IF9yZWYuZ3JvdyxcbiAgICAgIGdyb3cgPSBfcmVmJGdyb3cgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJGdyb3csXG4gICAgICBfcmVmJGNvbXBvbmVudCA9IF9yZWYuY29tcG9uZW50LFxuICAgICAgQ29tcG9uZW50ID0gX3JlZiRjb21wb25lbnQgPT09IHZvaWQgMCA/ICdkaXYnIDogX3JlZiRjb21wb25lbnQsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFsaWRhdGVHcm93VmFsdWUoZ3Jvdyk7XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpRmxleEl0ZW0nLCBfZGVmaW5lUHJvcGVydHkoe1xuICAgICdldWlGbGV4SXRlbS0tZmxleEdyb3daZXJvJzogIWdyb3dcbiAgfSwgXCJldWlGbGV4SXRlbS0tZmxleEdyb3dcIi5jb25jYXQoZ3JvdyksIHR5cGVvZiBncm93ID09PSAnbnVtYmVyJyA/IEdST1dfU0laRVMuaW5kZXhPZihncm93KSA+PSAwIDogdW5kZWZpbmVkKSwgY2xhc3NOYW1lKTtcbiAgcmV0dXJuICgvLyBAdHMtaWdub3JlIGRpZmZpY3VsdCB0byB2ZXJpZnkgYHJlc3RgIGFwcGxpZXMgdG8gYENvbXBvbmVudGBcbiAgICBfX19FbW90aW9uSlNYKENvbXBvbmVudCwgX2V4dGVuZHMoe1xuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gICAgfSwgcmVzdCksIGNoaWxkcmVuKVxuICApO1xufTtcbkV1aUZsZXhJdGVtLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBncm93OiBQcm9wVHlwZXMub25lT2YoWzEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCB0cnVlLCBmYWxzZSwgbnVsbF0pLFxuICBjb21wb25lbnQ6IFByb3BUeXBlcy5hbnlcbn07XG5cbmZ1bmN0aW9uIHZhbGlkYXRlR3Jvd1ZhbHVlKHZhbHVlKSB7XG4gIHZhciB2YWxpZFZhbHVlcyA9IFtudWxsLCB1bmRlZmluZWQsIHRydWUsIGZhbHNlXS5jb25jYXQoR1JPV19TSVpFUyk7XG5cbiAgaWYgKHZhbGlkVmFsdWVzLmluZGV4T2YodmFsdWUpID09PSAtMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIlByb3AgYGdyb3dgIHBhc3NlZCB0byBgRXVpRmxleEl0ZW1gIG11c3QgYmUgYSBib29sZWFuIG9yIGFuIGludGVnZXIgYmV0d2VlbiAxIGFuZCAxMCwgcmVjZWl2ZWQgYFwiLmNvbmNhdCh2YWx1ZSwgXCJgXCIpKTtcbiAgfVxufSIsICJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbnZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImljb25cIiwgXCJjbGVhclwiLCBcImZ1bGxXaWR0aFwiLCBcImlzTG9hZGluZ1wiLCBcImlzRGlzYWJsZWRcIiwgXCJjb21wcmVzc2VkXCIsIFwiY2xhc3NOYW1lXCIsIFwicHJlcGVuZFwiLCBcImFwcGVuZFwiLCBcInJlYWRPbmx5XCIsIFwiaXNJbnZhbGlkXCIsIFwiaXNEcm9wZG93blwiLCBcImlucHV0SWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IGNsb25lRWxlbWVudCwgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBFdWlGb3JtQ29udHJvbExheW91dEljb25zIH0gZnJvbSAnLi9mb3JtX2NvbnRyb2xfbGF5b3V0X2ljb25zJztcbmltcG9ydCB7IEV1aUZvcm1MYWJlbCB9IGZyb20gJy4uL2Zvcm1fbGFiZWwnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB7IElDT05fU0lERVMgfSBmcm9tICcuL2Zvcm1fY29udHJvbF9sYXlvdXRfaWNvbnMnO1xuZXhwb3J0IHZhciBFdWlGb3JtQ29udHJvbExheW91dCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoRXVpRm9ybUNvbnRyb2xMYXlvdXQsIF9Db21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoRXVpRm9ybUNvbnRyb2xMYXlvdXQpO1xuXG4gIGZ1bmN0aW9uIEV1aUZvcm1Db250cm9sTGF5b3V0KCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlGb3JtQ29udHJvbExheW91dCk7XG5cbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoRXVpRm9ybUNvbnRyb2xMYXlvdXQsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgICAgaWNvbiA9IF90aGlzJHByb3BzLmljb24sXG4gICAgICAgICAgY2xlYXIgPSBfdGhpcyRwcm9wcy5jbGVhcixcbiAgICAgICAgICBmdWxsV2lkdGggPSBfdGhpcyRwcm9wcy5mdWxsV2lkdGgsXG4gICAgICAgICAgaXNMb2FkaW5nID0gX3RoaXMkcHJvcHMuaXNMb2FkaW5nLFxuICAgICAgICAgIGlzRGlzYWJsZWQgPSBfdGhpcyRwcm9wcy5pc0Rpc2FibGVkLFxuICAgICAgICAgIGNvbXByZXNzZWQgPSBfdGhpcyRwcm9wcy5jb21wcmVzc2VkLFxuICAgICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzLmNsYXNzTmFtZSxcbiAgICAgICAgICBwcmVwZW5kID0gX3RoaXMkcHJvcHMucHJlcGVuZCxcbiAgICAgICAgICBhcHBlbmQgPSBfdGhpcyRwcm9wcy5hcHBlbmQsXG4gICAgICAgICAgcmVhZE9ubHkgPSBfdGhpcyRwcm9wcy5yZWFkT25seSxcbiAgICAgICAgICBpbnZhbGlkID0gX3RoaXMkcHJvcHMuaXNJbnZhbGlkLFxuICAgICAgICAgIGlzRHJvcGRvd24gPSBfdGhpcyRwcm9wcy5pc0Ryb3Bkb3duLFxuICAgICAgICAgIGlucHV0SWQgPSBfdGhpcyRwcm9wcy5pbnB1dElkLFxuICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgICAgIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpRm9ybUNvbnRyb2xMYXlvdXQnLCB7XG4gICAgICAgICdldWlGb3JtQ29udHJvbExheW91dC0tZnVsbFdpZHRoJzogZnVsbFdpZHRoLFxuICAgICAgICAnZXVpRm9ybUNvbnRyb2xMYXlvdXQtLWNvbXByZXNzZWQnOiBjb21wcmVzc2VkLFxuICAgICAgICAnZXVpRm9ybUNvbnRyb2xMYXlvdXQtLXJlYWRPbmx5JzogcmVhZE9ubHksXG4gICAgICAgICdldWlGb3JtQ29udHJvbExheW91dC0tZ3JvdXAnOiBwcmVwZW5kIHx8IGFwcGVuZCxcbiAgICAgICAgJ2V1aUZvcm1Db250cm9sTGF5b3V0LWlzRGlzYWJsZWQnOiBpc0Rpc2FibGVkXG4gICAgICB9LCBjbGFzc05hbWUpO1xuICAgICAgdmFyIHByZXBlbmROb2RlcyA9IHRoaXMucmVuZGVyU2lkZU5vZGUoJ3ByZXBlbmQnLCBwcmVwZW5kLCBpbnB1dElkKTtcbiAgICAgIHZhciBhcHBlbmROb2RlcyA9IHRoaXMucmVuZGVyU2lkZU5vZGUoJ2FwcGVuZCcsIGFwcGVuZCwgaW5wdXRJZCk7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICAgICAgfSwgcmVzdCksIHByZXBlbmROb2RlcywgX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJldWlGb3JtQ29udHJvbExheW91dF9fY2hpbGRyZW5XcmFwcGVyXCJcbiAgICAgIH0sIGNoaWxkcmVuLCBfX19FbW90aW9uSlNYKEV1aUZvcm1Db250cm9sTGF5b3V0SWNvbnMsIHtcbiAgICAgICAgaWNvbjogaWNvbixcbiAgICAgICAgY2xlYXI6IGNsZWFyLFxuICAgICAgICBjb21wcmVzc2VkOiBjb21wcmVzc2VkLFxuICAgICAgICBpc0xvYWRpbmc6IGlzTG9hZGluZyxcbiAgICAgICAgaXNJbnZhbGlkOiBpbnZhbGlkLFxuICAgICAgICBpc0Ryb3Bkb3duOiAhcmVhZE9ubHkgJiYgIWlzRGlzYWJsZWQgJiYgaXNEcm9wZG93blxuICAgICAgfSkpLCBhcHBlbmROb2Rlcyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclNpZGVOb2RlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlclNpZGVOb2RlKHNpZGUsIG5vZGVzLCBpbnB1dElkKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICBpZiAoIW5vZGVzKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBub2RlcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlRm9ybUxhYmVsKHNpZGUsIG5vZGVzLCBpbnB1dElkKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGFwcGVuZE5vZGVzID0gUmVhY3QuQ2hpbGRyZW4ubWFwKG5vZGVzLCBmdW5jdGlvbiAoaXRlbSwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBpdGVtID09PSAnc3RyaW5nJyA/IF90aGlzLmNyZWF0ZUZvcm1MYWJlbChzaWRlLCBpdGVtLCBpbnB1dElkKSA6IF90aGlzLmNyZWF0ZVNpZGVOb2RlKHNpZGUsIGl0ZW0sIGluZGV4KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGFwcGVuZE5vZGVzO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjcmVhdGVGb3JtTGFiZWxcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY3JlYXRlRm9ybUxhYmVsKHNpZGUsIHN0cmluZywgaW5wdXRJZCkge1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpRm9ybUxhYmVsLCB7XG4gICAgICAgIGh0bWxGb3I6IGlucHV0SWQsXG4gICAgICAgIGNsYXNzTmFtZTogXCJldWlGb3JtQ29udHJvbExheW91dF9fXCIuY29uY2F0KHNpZGUpXG4gICAgICB9LCBzdHJpbmcpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjcmVhdGVTaWRlTm9kZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjcmVhdGVTaWRlTm9kZShzaWRlLCBub2RlLCBrZXkpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovY2xvbmVFbGVtZW50KG5vZGUsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWVzKFwiZXVpRm9ybUNvbnRyb2xMYXlvdXRfX1wiLmNvbmNhdChzaWRlKSwgbm9kZS5wcm9wcy5jbGFzc05hbWUpLFxuICAgICAgICBrZXk6IGtleVxuICAgICAgfSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEV1aUZvcm1Db250cm9sTGF5b3V0O1xufShDb21wb25lbnQpO1xuRXVpRm9ybUNvbnRyb2xMYXlvdXQucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICAgKiBDcmVhdGVzIGFuIGlucHV0IGdyb3VwIHdpdGggZWxlbWVudChzKSBjb21pbmcgYmVmb3JlIGNoaWxkcmVuLlxuICAgICAgICogYHN0cmluZ2AgfCBgUmVhY3RFbGVtZW50YCBvciBhbiBhcnJheSBvZiB0aGVzZVxuICAgICAgICovXG4gIHByZXBlbmQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQpLmlzUmVxdWlyZWRdKSxcblxuICAvKipcbiAgICAgICAqIENyZWF0ZXMgYW4gaW5wdXQgZ3JvdXAgd2l0aCBlbGVtZW50KHMpIGNvbWluZyBhZnRlciBjaGlsZHJlbi5cbiAgICAgICAqIGBzdHJpbmdgIHwgYFJlYWN0RWxlbWVudGAgb3IgYW4gYXJyYXkgb2YgdGhlc2VcbiAgICAgICAqL1xuICBhcHBlbmQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQpLmlzUmVxdWlyZWRdKSxcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICBpY29uOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbGVydFwiLCBcImFuYWx5emVFdmVudFwiLCBcImFubm90YXRpb25cIiwgXCJhcG1BcHBcIiwgXCJhcG1UcmFjZVwiLCBcImFwcFNlYXJjaEFwcFwiLCBcImFwcHNcIiwgXCJhcnJvd0Rvd25cIiwgXCJhcnJvd0xlZnRcIiwgXCJhcnJvd1JpZ2h0XCIsIFwiYXJyb3dVcFwiLCBcImFycm93U3RhcnRcIiwgXCJhcnJvd0VuZFwiLCBcImFzdGVyaXNrXCIsIFwiYXVkaXRiZWF0QXBwXCIsIFwiYmVha2VyXCIsIFwiYmVsbFwiLCBcImJlbGxTbGFzaFwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGVja1wiLCBcImNoZWNrSW5DaXJjbGVGaWxsZWRcIiwgXCJjaGVlclwiLCBcImNsYXNzaWZpY2F0aW9uSm9iXCIsIFwiY2xvY2tcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkFDaXJjbGVGaWxsZWRcIiwgXCJjcm9zc2hhaXJzXCIsIFwiY3VycmVuY3lcIiwgXCJjdXRcIiwgXCJkYXNoYm9hcmRBcHBcIiwgXCJkYXRhVmlzdWFsaXplclwiLCBcImRhdGFiYXNlXCIsIFwiZGVza3RvcFwiLCBcImRldlRvb2xzQXBwXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZXFsXCIsIFwiZXJhc2VyXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZsYWdcIiwgXCJmbGVldEFwcFwiLCBcImZvbGRcIiwgXCJmb2xkZXJDaGVja1wiLCBcImZvbGRlckNsb3NlZFwiLCBcImZvbGRlckV4Y2xhbWF0aW9uXCIsIFwiZm9sZGVyT3BlblwiLCBcImZyYW1lTmV4dFwiLCBcImZyYW1lUHJldmlvdXNcIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFNjcmVlbkV4aXRcIiwgXCJmdW5jdGlvblwiLCBcImdlYXJcIiwgXCJnaXNBcHBcIiwgXCJnbGFzc2VzXCIsIFwiZ2xvYmVcIiwgXCJncmFiXCIsIFwiZ3JhYkhvcml6b250YWxcIiwgXCJncmFwaEFwcFwiLCBcImdyaWRcIiwgXCJncm9rQXBwXCIsIFwiaGVhcnRcIiwgXCJoZWFydGJlYXRBcHBcIiwgXCJoZWF0bWFwXCIsIFwiaGVscFwiLCBcImhvbWVcIiwgXCJpSW5DaXJjbGVcIiwgXCJpbWFnZVwiLCBcImltcG9ydEFjdGlvblwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5wdXRPdXRwdXRcIiwgXCJpbnNwZWN0XCIsIFwiaW52ZXJ0XCIsIFwiaXBcIiwgXCJrZXlib2FyZFwiLCBcImtxbEZpZWxkXCIsIFwia3FsRnVuY3Rpb25cIiwgXCJrcWxPcGVyYW5kXCIsIFwia3FsU2VsZWN0b3JcIiwgXCJrcWxWYWx1ZVwiLCBcImt1YmVybmV0ZXNOb2RlXCIsIFwia3ViZXJuZXRlc1BvZFwiLCBcImxheWVyc1wiLCBcImxlbnNBcHBcIiwgXCJsZXR0ZXJpbmdcIiwgXCJsaW5lRGFzaGVkXCIsIFwibGluZURvdHRlZFwiLCBcImxpbmVTb2xpZFwiLCBcImxpbmtcIiwgXCJsaXN0XCIsIFwibGlzdEFkZFwiLCBcImxvY2tcIiwgXCJsb2NrT3BlblwiLCBcImxvZ29BV1NcIiwgXCJsb2dvQVdTTW9ub1wiLCBcImxvZ29BZXJvc3Bpa2VcIiwgXCJsb2dvQXBhY2hlXCIsIFwibG9nb0FwcFNlYXJjaFwiLCBcImxvZ29BenVyZVwiLCBcImxvZ29BenVyZU1vbm9cIiwgXCJsb2dvQmVhdHNcIiwgXCJsb2dvQnVzaW5lc3NBbmFseXRpY3NcIiwgXCJsb2dvQ2VwaFwiLCBcImxvZ29DbG91ZFwiLCBcImxvZ29DbG91ZEVudGVycHJpc2VcIiwgXCJsb2dvQ29kZVwiLCBcImxvZ29Db2Rlc2FuZGJveFwiLCBcImxvZ29Db3VjaGJhc2VcIiwgXCJsb2dvRG9ja2VyXCIsIFwibG9nb0Ryb3B3aXphcmRcIiwgXCJsb2dvRWxhc3RpY1wiLCBcImxvZ29FbGFzdGljU3RhY2tcIiwgXCJsb2dvRWxhc3RpY3NlYXJjaFwiLCBcImxvZ29FbnRlcnByaXNlU2VhcmNoXCIsIFwibG9nb0V0Y2RcIiwgXCJsb2dvR0NQXCIsIFwibG9nb0dDUE1vbm9cIiwgXCJsb2dvR2l0aHViXCIsIFwibG9nb0dtYWlsXCIsIFwibG9nb0dvbGFuZ1wiLCBcImxvZ29Hb29nbGVHXCIsIFwibG9nb0hBcHJveHlcIiwgXCJsb2dvSUJNXCIsIFwibG9nb0lCTU1vbm9cIiwgXCJsb2dvS2Fma2FcIiwgXCJsb2dvS2liYW5hXCIsIFwibG9nb0t1YmVybmV0ZXNcIiwgXCJsb2dvTG9nZ2luZ1wiLCBcImxvZ29Mb2dzdGFzaFwiLCBcImxvZ29NYXBzXCIsIFwibG9nb01lbWNhY2hlZFwiLCBcImxvZ29NZXRyaWNzXCIsIFwibG9nb01vbmdvZGJcIiwgXCJsb2dvTXlTUUxcIiwgXCJsb2dvTmdpbnhcIiwgXCJsb2dvT2JzZXJ2YWJpbGl0eVwiLCBcImxvZ29Pc3F1ZXJ5XCIsIFwibG9nb1BocFwiLCBcImxvZ29Qb3N0Z3Jlc1wiLCBcImxvZ29Qcm9tZXRoZXVzXCIsIFwibG9nb1JhYmJpdG1xXCIsIFwibG9nb1JlZGlzXCIsIFwibG9nb1NlY3VyaXR5XCIsIFwibG9nb1NpdGVTZWFyY2hcIiwgXCJsb2dvU2tldGNoXCIsIFwibG9nb1NsYWNrXCIsIFwibG9nb1VwdGltZVwiLCBcImxvZ29XZWJob29rXCIsIFwibG9nb1dpbmRvd3NcIiwgXCJsb2dvV29ya3BsYWNlU2VhcmNoXCIsIFwibG9nc0FwcFwiLCBcImxvZ3N0YXNoRmlsdGVyXCIsIFwibG9nc3Rhc2hJZlwiLCBcImxvZ3N0YXNoSW5wdXRcIiwgXCJsb2dzdGFzaE91dHB1dFwiLCBcImxvZ3N0YXNoUXVldWVcIiwgXCJtYWNoaW5lTGVhcm5pbmdBcHBcIiwgXCJtYWduZXRcIiwgXCJtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uXCIsIFwibWFnbmlmeVdpdGhNaW51c1wiLCBcIm1hZ25pZnlXaXRoUGx1c1wiLCBcIm1hbmFnZW1lbnRBcHBcIiwgXCJtYXBNYXJrZXJcIiwgXCJtZW1vcnlcIiwgXCJtZW51XCIsIFwibWVudURvd25cIiwgXCJtZW51TGVmdFwiLCBcIm1lbnVSaWdodFwiLCBcIm1lbnVVcFwiLCBcIm1lcmdlXCIsIFwibWV0cmljYmVhdEFwcFwiLCBcIm1ldHJpY3NBcHBcIiwgXCJtaW5pbWl6ZVwiLCBcIm1pbnVzXCIsIFwibWludXNJbkNpcmNsZVwiLCBcIm1pbnVzSW5DaXJjbGVGaWxsZWRcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5vZGVcIiwgXCJub3RlYm9va0FwcFwiLCBcIm51bWJlclwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIiwgXCJvdXRsaWVyRGV0ZWN0aW9uSm9iXCIsIFwicGFja2FnZVwiLCBcInBhY2tldGJlYXRBcHBcIiwgXCJwYWdlU2VsZWN0XCIsIFwicGFnZXNTZWxlY3RcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVsaW5lQXBwXCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNub3dmbGFrZVwiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc0FwcFwiLCBcInNxbEFwcFwiLCBcInN0YXJFbXB0eVwiLCBcInN0YXJFbXB0eVNwYWNlXCIsIFwic3RhckZpbGxlZFwiLCBcInN0YXJGaWxsZWRTcGFjZVwiLCBcInN0YXJNaW51c0VtcHR5XCIsIFwic3Rhck1pbnVzRmlsbGVkXCIsIFwic3RhclBsdXNFbXB0eVwiLCBcInN0YXJQbHVzRmlsbGVkXCIsIFwic3RhdHNcIiwgXCJzdG9wXCIsIFwic3RvcEZpbGxlZFwiLCBcInN0b3BTbGFzaFwiLCBcInN0b3JhZ2VcIiwgXCJzdHJpbmdcIiwgXCJzdWJtb2R1bGVcIiwgXCJzdW5cIiwgXCJzd2F0Y2hJbnB1dFwiLCBcInN5bWxpbmtcIiwgXCJ0YWJsZURlbnNpdHlDb21wYWN0XCIsIFwidGFibGVEZW5zaXR5RXhwYW5kZWRcIiwgXCJ0YWJsZURlbnNpdHlOb3JtYWxcIiwgXCJ0YWJsZU9mQ29udGVudHNcIiwgXCJ0YWdcIiwgXCJ0ZWFyXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJ0aW1lbGluZVwiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFzaFwiLCBcInVuZm9sZFwiLCBcInVubGlua1wiLCBcInVwZ3JhZGVBc3Npc3RhbnRBcHBcIiwgXCJ1cHRpbWVBcHBcIiwgXCJ1c2VyXCIsIFwidXNlckF2YXRhclwiLCBcInVzZXJzXCIsIFwidXNlcnNSb2xlc0FwcFwiLCBcInZlY3RvclwiLCBcInZpZGVvUGxheWVyXCIsIFwidmlzQXJlYVwiLCBcInZpc0FyZWFTdGFja2VkXCIsIFwidmlzQmFySG9yaXpvbnRhbFwiLCBcInZpc0Jhckhvcml6b250YWxTdGFja2VkXCIsIFwidmlzQmFyVmVydGljYWxcIiwgXCJ2aXNCYXJWZXJ0aWNhbFN0YWNrZWRcIiwgXCJ2aXNHYXVnZVwiLCBcInZpc0dvYWxcIiwgXCJ2aXNMaW5lXCIsIFwidmlzTWFwQ29vcmRpbmF0ZVwiLCBcInZpc01hcFJlZ2lvblwiLCBcInZpc01ldHJpY1wiLCBcInZpc1BpZVwiLCBcInZpc1RhYmxlXCIsIFwidmlzVGFnQ2xvdWRcIiwgXCJ2aXNUZXh0XCIsIFwidmlzVGltZWxpb25cIiwgXCJ2aXNWZWdhXCIsIFwidmlzVmlzdWFsQnVpbGRlclwiLCBcInZpc3VhbGl6ZUFwcFwiLCBcIndhdGNoZXNBcHBcIiwgXCJ3b3JkV3JhcFwiLCBcIndvcmRXcmFwRGlzYWJsZWRcIiwgXCJ3b3JrcGxhY2VTZWFyY2hBcHBcIiwgXCJ3cmVuY2hcIiwgXCJ0b2tlbkFsaWFzXCIsIFwidG9rZW5Bbm5vdGF0aW9uXCIsIFwidG9rZW5BcnJheVwiLCBcInRva2VuQmluYXJ5XCIsIFwidG9rZW5Cb29sZWFuXCIsIFwidG9rZW5DbGFzc1wiLCBcInRva2VuQ29tcGxldGlvblN1Z2dlc3RlclwiLCBcInRva2VuQ29uc3RhbnRcIiwgXCJ0b2tlbkRhdGVcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2hhcGVcIiwgXCJ0b2tlblN0cmluZ1wiLCBcInRva2VuU3RydWN0XCIsIFwidG9rZW5TeW1ib2xcIiwgXCJ0b2tlblRhZ1wiLCBcInRva2VuVGV4dFwiLCBcInRva2VuVG9rZW5Db3VudFwiLCBcInRva2VuVmFyaWFibGVcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIHR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhY2Nlc3NpYmlsaXR5XCIsIFwiYWRkRGF0YUFwcFwiLCBcImFkdmFuY2VkU2V0dGluZ3NBcHBcIiwgXCJhZ2VudEFwcFwiLCBcImFnZ3JlZ2F0ZVwiLCBcImFsZXJ0XCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbG9ja1wiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQUNpcmNsZUZpbGxlZFwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRvY3VtZW50XCIsIFwiZG9jdW1lbnRFZGl0XCIsIFwiZG9jdW1lbnRhdGlvblwiLCBcImRvY3VtZW50c1wiLCBcImRvdFwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJleGl0XCIsIFwiZXhwYW5kXCIsIFwiZXhwYW5kTWluaVwiLCBcImV4cG9ydEFjdGlvblwiLCBcImV5ZVwiLCBcImV5ZUNsb3NlZFwiLCBcImZhY2VIYXBweVwiLCBcImZhY2VOZXV0cmFsXCIsIFwiZmFjZVNhZFwiLCBcImZpbGViZWF0QXBwXCIsIFwiZmlsdGVyXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhDbG9zZVwiLCBcImluZGV4RWRpdFwiLCBcImluZGV4Rmx1c2hcIiwgXCJpbmRleE1hbmFnZW1lbnRBcHBcIiwgXCJpbmRleE1hcHBpbmdcIiwgXCJpbmRleE9wZW5cIiwgXCJpbmRleFBhdHRlcm5BcHBcIiwgXCJpbmRleFJvbGx1cEFwcFwiLCBcImluZGV4UnVudGltZVwiLCBcImluZGV4U2V0dGluZ3NcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibmFtZXNwYWNlXCIsIFwibmVzdGVkXCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZWxpbmVBcHBcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzQXBwXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpb25BcHBcIiwgXCJ0aW1lUmVmcmVzaFwiLCBcInRpbWVzbGlkZXJcIiwgXCJ0cmFpbmluZ1wiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsXG4gICAgc2lkZTogUHJvcFR5cGVzLmFueSxcbiAgICBjb2xvcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWRdKSxcbiAgICByZWY6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZF0pXG4gIH0pLmlzUmVxdWlyZWRdKSxcbiAgY2xlYXI6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBzaXplOiBQcm9wVHlwZXMuYW55XG4gIH0pLFxuICBmdWxsV2lkdGg6IFByb3BUeXBlcy5ib29sLFxuICBpc0xvYWRpbmc6IFByb3BUeXBlcy5ib29sLFxuICBpc0Rpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgY29tcHJlc3NlZDogUHJvcFR5cGVzLmJvb2wsXG4gIHJlYWRPbmx5OiBQcm9wVHlwZXMuYm9vbCxcbiAgaXNJbnZhbGlkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgICAqIENvbnRyb2xzIHRoZSBhZGRpbmcgb2YgYW5kIHZpc2liaWxpdHkgb2YgYSBkb3duIGFycm93IGljb25cbiAgICAgICAqL1xuICBpc0Ryb3Bkb3duOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgICAqIENvbm5lY3RzIHRoZSBwcmVwZW5kIGFuZCBhcHBlbmQgbGFiZWxzIHRvIHRoZSBpbnB1dFxuICAgICAgICovXG4gIGlucHV0SWQ6IFByb3BUeXBlcy5zdHJpbmdcbn07IiwgImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxudmFyIF9leGNsdWRlZCA9IFtcInJlZlwiLCBcInNpZGVcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IEZyYWdtZW50LCBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBFdWlMb2FkaW5nU3Bpbm5lciB9IGZyb20gJy4uLy4uL2xvYWRpbmcnO1xuaW1wb3J0IHsgRXVpRm9ybUNvbnRyb2xMYXlvdXRDbGVhckJ1dHRvbiB9IGZyb20gJy4vZm9ybV9jb250cm9sX2xheW91dF9jbGVhcl9idXR0b24nO1xuaW1wb3J0IHsgRXVpRm9ybUNvbnRyb2xMYXlvdXRDdXN0b21JY29uIH0gZnJvbSAnLi9mb3JtX2NvbnRyb2xfbGF5b3V0X2N1c3RvbV9pY29uJztcbmltcG9ydCB7IEV1aUljb24gfSBmcm9tICcuLi8uLi9pY29uJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIElDT05fU0lERVMgPSBbJ2xlZnQnLCAncmlnaHQnXTtcblxuZnVuY3Rpb24gaXNJY29uU2hhcGUoaWNvbikge1xuICByZXR1cm4gISFpY29uICYmIGljb24uaGFzT3duUHJvcGVydHkoJ3R5cGUnKTtcbn1cblxuZXhwb3J0IHZhciBFdWlGb3JtQ29udHJvbExheW91dEljb25zID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhFdWlGb3JtQ29udHJvbExheW91dEljb25zLCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aUZvcm1Db250cm9sTGF5b3V0SWNvbnMpO1xuXG4gIGZ1bmN0aW9uIEV1aUZvcm1Db250cm9sTGF5b3V0SWNvbnMoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aUZvcm1Db250cm9sTGF5b3V0SWNvbnMpO1xuXG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEV1aUZvcm1Db250cm9sTGF5b3V0SWNvbnMsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGljb24gPSBfdGhpcyRwcm9wcy5pY29uLFxuICAgICAgICAgIGlzSW52YWxpZCA9IF90aGlzJHByb3BzLmlzSW52YWxpZCxcbiAgICAgICAgICBpc0Ryb3Bkb3duID0gX3RoaXMkcHJvcHMuaXNEcm9wZG93bjtcbiAgICAgIHZhciBpY29uU2lkZSA9IGlzSWNvblNoYXBlKGljb24pICYmIGljb24uc2lkZSA/IGljb24uc2lkZSA6ICdsZWZ0JztcbiAgICAgIHZhciBjdXN0b21JY29uID0gdGhpcy5yZW5kZXJDdXN0b21JY29uKCk7XG4gICAgICB2YXIgbG9hZGluZ1NwaW5uZXIgPSB0aGlzLnJlbmRlckxvYWRpbmdTcGlubmVyKCk7XG4gICAgICB2YXIgY2xlYXJCdXR0b24gPSB0aGlzLnJlbmRlckNsZWFyQnV0dG9uKCk7XG4gICAgICB2YXIgaW52YWxpZEljb24gPSB0aGlzLnJlbmRlckludmFsaWRJY29uKCk7XG4gICAgICB2YXIgZHJvcGRvd25JY29uID0gdGhpcy5yZW5kZXJEcm9wZG93bkljb24oKTtcbiAgICAgIHZhciBsZWZ0SWNvbnM7XG5cbiAgICAgIGlmIChjdXN0b21JY29uICYmIGljb25TaWRlID09PSAnbGVmdCcpIHtcbiAgICAgICAgbGVmdEljb25zID0gX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICAgICAgY2xhc3NOYW1lOiBcImV1aUZvcm1Db250cm9sTGF5b3V0SWNvbnNcIlxuICAgICAgICB9LCBjdXN0b21JY29uKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHJpZ2h0SWNvbnM7IC8vIElmIHRoZSBpY29uIGlzIG9uIHRoZSByaWdodCwgaXQgc2hvdWxkIGJlIHBsYWNlZCBhZnRlciB0aGUgY2xlYXIgYnV0dG9uIGluIHRoZSBET00uXG5cbiAgICAgIGlmIChjbGVhckJ1dHRvbiB8fCBsb2FkaW5nU3Bpbm5lciB8fCBpc0ludmFsaWQgfHwgaXNEcm9wZG93biB8fCBjdXN0b21JY29uICYmIGljb25TaWRlID09PSAncmlnaHQnKSB7XG4gICAgICAgIHJpZ2h0SWNvbnMgPSBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpRm9ybUNvbnRyb2xMYXlvdXRJY29ucyBldWlGb3JtQ29udHJvbExheW91dEljb25zLS1yaWdodFwiXG4gICAgICAgIH0sIGNsZWFyQnV0dG9uLCBsb2FkaW5nU3Bpbm5lciwgaW52YWxpZEljb24sIGljb25TaWRlID09PSAncmlnaHQnID8gY3VzdG9tSWNvbiA6IHVuZGVmaW5lZCwgZHJvcGRvd25JY29uKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRnJhZ21lbnQsIG51bGwsIGxlZnRJY29ucywgcmlnaHRJY29ucyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlckN1c3RvbUljb25cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyQ3VzdG9tSWNvbigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGljb24gPSBfdGhpcyRwcm9wczIuaWNvbixcbiAgICAgICAgICBjb21wcmVzc2VkID0gX3RoaXMkcHJvcHMyLmNvbXByZXNzZWQ7XG5cbiAgICAgIGlmICghaWNvbikge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0gLy8gTm9ybWFsaXplIHRoZSBpY29uIHRvIGFuIG9iamVjdCBpZiBpdCdzIGEgc3RyaW5nLlxuXG5cbiAgICAgIHZhciBpY29uUHJvcHMgPSBpc0ljb25TaGFwZShpY29uKSA/IGljb24gOiB7XG4gICAgICAgIHR5cGU6IGljb25cbiAgICAgIH07XG5cbiAgICAgIHZhciBpY29uUmVmID0gaWNvblByb3BzLnJlZixcbiAgICAgICAgICBzaWRlID0gaWNvblByb3BzLnNpZGUsXG4gICAgICAgICAgaWNvblJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoaWNvblByb3BzLCBfZXhjbHVkZWQpO1xuXG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlGb3JtQ29udHJvbExheW91dEN1c3RvbUljb24sIF9leHRlbmRzKHtcbiAgICAgICAgc2l6ZTogY29tcHJlc3NlZCA/ICdzJyA6ICdtJyxcbiAgICAgICAgaWNvblJlZjogaWNvblJlZlxuICAgICAgfSwgaWNvblJlc3QpKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyRHJvcGRvd25JY29uXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlckRyb3Bkb3duSWNvbigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGlzRHJvcGRvd24gPSBfdGhpcyRwcm9wczMuaXNEcm9wZG93bixcbiAgICAgICAgICBjb21wcmVzc2VkID0gX3RoaXMkcHJvcHMzLmNvbXByZXNzZWQ7XG5cbiAgICAgIGlmICghaXNEcm9wZG93bikge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpRm9ybUNvbnRyb2xMYXlvdXRDdXN0b21JY29uLCB7XG4gICAgICAgIHNpemU6IGNvbXByZXNzZWQgPyAncycgOiAnbScsXG4gICAgICAgIHR5cGU6IFwiYXJyb3dEb3duXCJcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJMb2FkaW5nU3Bpbm5lclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJMb2FkaW5nU3Bpbm5lcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczQgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGlzTG9hZGluZyA9IF90aGlzJHByb3BzNC5pc0xvYWRpbmcsXG4gICAgICAgICAgY29tcHJlc3NlZCA9IF90aGlzJHByb3BzNC5jb21wcmVzc2VkO1xuXG4gICAgICBpZiAoIWlzTG9hZGluZykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpTG9hZGluZ1NwaW5uZXIsIHtcbiAgICAgICAgc2l6ZTogY29tcHJlc3NlZCA/ICdzJyA6ICdtJ1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlckNsZWFyQnV0dG9uXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlckNsZWFyQnV0dG9uKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNSA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY2xlYXIgPSBfdGhpcyRwcm9wczUuY2xlYXIsXG4gICAgICAgICAgY29tcHJlc3NlZCA9IF90aGlzJHByb3BzNS5jb21wcmVzc2VkO1xuXG4gICAgICBpZiAoIWNsZWFyKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlGb3JtQ29udHJvbExheW91dENsZWFyQnV0dG9uLCBfZXh0ZW5kcyh7XG4gICAgICAgIHNpemU6IGNvbXByZXNzZWQgPyAncycgOiAnbSdcbiAgICAgIH0sIGNsZWFyKSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlckludmFsaWRJY29uXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlckludmFsaWRJY29uKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNiA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgaXNJbnZhbGlkID0gX3RoaXMkcHJvcHM2LmlzSW52YWxpZCxcbiAgICAgICAgICBjb21wcmVzc2VkID0gX3RoaXMkcHJvcHM2LmNvbXByZXNzZWQ7XG5cbiAgICAgIGlmICghaXNJbnZhbGlkKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgICAgIHNpemU6IGNvbXByZXNzZWQgPyAncycgOiAnbScsXG4gICAgICAgIGNvbG9yOiBcImRhbmdlclwiLFxuICAgICAgICB0eXBlOiBcImFsZXJ0XCJcbiAgICAgIH0pO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlGb3JtQ29udHJvbExheW91dEljb25zO1xufShDb21wb25lbnQpO1xuRXVpRm9ybUNvbnRyb2xMYXlvdXRJY29ucy5wcm9wVHlwZXMgPSB7XG4gIGljb246IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhY2Nlc3NpYmlsaXR5XCIsIFwiYWRkRGF0YUFwcFwiLCBcImFkdmFuY2VkU2V0dGluZ3NBcHBcIiwgXCJhZ2VudEFwcFwiLCBcImFnZ3JlZ2F0ZVwiLCBcImFsZXJ0XCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbG9ja1wiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQUNpcmNsZUZpbGxlZFwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRvY3VtZW50XCIsIFwiZG9jdW1lbnRFZGl0XCIsIFwiZG9jdW1lbnRhdGlvblwiLCBcImRvY3VtZW50c1wiLCBcImRvdFwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJleGl0XCIsIFwiZXhwYW5kXCIsIFwiZXhwYW5kTWluaVwiLCBcImV4cG9ydEFjdGlvblwiLCBcImV5ZVwiLCBcImV5ZUNsb3NlZFwiLCBcImZhY2VIYXBweVwiLCBcImZhY2VOZXV0cmFsXCIsIFwiZmFjZVNhZFwiLCBcImZpbGViZWF0QXBwXCIsIFwiZmlsdGVyXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhDbG9zZVwiLCBcImluZGV4RWRpdFwiLCBcImluZGV4Rmx1c2hcIiwgXCJpbmRleE1hbmFnZW1lbnRBcHBcIiwgXCJpbmRleE1hcHBpbmdcIiwgXCJpbmRleE9wZW5cIiwgXCJpbmRleFBhdHRlcm5BcHBcIiwgXCJpbmRleFJvbGx1cEFwcFwiLCBcImluZGV4UnVudGltZVwiLCBcImluZGV4U2V0dGluZ3NcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibmFtZXNwYWNlXCIsIFwibmVzdGVkXCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZWxpbmVBcHBcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzQXBwXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpb25BcHBcIiwgXCJ0aW1lUmVmcmVzaFwiLCBcInRpbWVzbGlkZXJcIiwgXCJ0cmFpbmluZ1wiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgdHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYWxlcnRcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhc3Rlcmlza1wiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJib2x0XCIsIFwiYm94ZXNIb3Jpem9udGFsXCIsIFwiYm94ZXNWZXJ0aWNhbFwiLCBcImJyYW5jaFwiLCBcImJyYW5jaFVzZXJcIiwgXCJicm9vbVwiLCBcImJydXNoXCIsIFwiYnVnXCIsIFwiYnVsbHNleWVcIiwgXCJjYWxlbmRhclwiLCBcImNhbnZhc0FwcFwiLCBcImNhc2VzQXBwXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsb2NrXCIsIFwiY2xvdWREcml6emxlXCIsIFwiY2xvdWRTdG9ybXlcIiwgXCJjbG91ZFN1bm55XCIsIFwiY2x1c3RlclwiLCBcImNvZGVBcHBcIiwgXCJjb2xvclwiLCBcImNvbXB1dGVcIiwgXCJjb25zb2xlXCIsIFwiY29uc29sZUFwcFwiLCBcImNvbnRhaW5lclwiLCBcImNvbnRpbnVpdHlBYm92ZVwiLCBcImNvbnRpbnVpdHlBYm92ZUJlbG93XCIsIFwiY29udGludWl0eUJlbG93XCIsIFwiY29udGludWl0eVdpdGhpblwiLCBcImNvbnRyb2xzSG9yaXpvbnRhbFwiLCBcImNvbnRyb2xzVmVydGljYWxcIiwgXCJjb3B5XCIsIFwiY29weUNsaXBib2FyZFwiLCBcImNyZWF0ZUFkdmFuY2VkSm9iXCIsIFwiY3JlYXRlTXVsdGlNZXRyaWNKb2JcIiwgXCJjcmVhdGVQb3B1bGF0aW9uSm9iXCIsIFwiY3JlYXRlU2luZ2xlTWV0cmljSm9iXCIsIFwiY3Jvc3NcIiwgXCJjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcFwiLCBcImNyb3NzSW5BQ2lyY2xlRmlsbGVkXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpc2NvdmVyQXBwXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG91YmxlQXJyb3dMZWZ0XCIsIFwiZG91YmxlQXJyb3dSaWdodFwiLCBcImRvd25sb2FkXCIsIFwiZWRpdG9yQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JBbGlnbkxlZnRcIiwgXCJlZGl0b3JBbGlnblJpZ2h0XCIsIFwiZWRpdG9yQm9sZFwiLCBcImVkaXRvckNoZWNrbGlzdFwiLCBcImVkaXRvckNvZGVCbG9ja1wiLCBcImVkaXRvckNvbW1lbnRcIiwgXCJlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbFwiLCBcImVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbFwiLCBcImVkaXRvckhlYWRpbmdcIiwgXCJlZGl0b3JJdGFsaWNcIiwgXCJlZGl0b3JJdGVtQWxpZ25Cb3R0b21cIiwgXCJlZGl0b3JJdGVtQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JJdGVtQWxpZ25MZWZ0XCIsIFwiZWRpdG9ySXRlbUFsaWduTWlkZGxlXCIsIFwiZWRpdG9ySXRlbUFsaWduUmlnaHRcIiwgXCJlZGl0b3JJdGVtQWxpZ25Ub3BcIiwgXCJlZGl0b3JMaW5rXCIsIFwiZWRpdG9yT3JkZXJlZExpc3RcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnRcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BMZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BSaWdodFwiLCBcImVkaXRvclJlZG9cIiwgXCJlZGl0b3JTdHJpa2VcIiwgXCJlZGl0b3JUYWJsZVwiLCBcImVkaXRvclVuZGVybGluZVwiLCBcImVkaXRvclVuZG9cIiwgXCJlZGl0b3JVbm9yZGVyZWRMaXN0XCIsIFwiZW1haWxcIiwgXCJlbXB0eVwiLCBcImVtc0FwcFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibW9iaWxlXCIsIFwibW9uaXRvcmluZ0FwcFwiLCBcIm1vb25cIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFwZXJDbGlwXCIsIFwicGFydGlhbFwiLCBcInBhdXNlXCIsIFwicGF5bWVudFwiLCBcInBlbmNpbFwiLCBcInBlcmNlbnRcIiwgXCJwaW5cIiwgXCJwaW5GaWxsZWRcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBsYXlcIiwgXCJwbGF5RmlsbGVkXCIsIFwicGx1c1wiLCBcInBsdXNJbkNpcmNsZVwiLCBcInBsdXNJbkNpcmNsZUZpbGxlZFwiLCBcInBvcG91dFwiLCBcInB1c2hcIiwgXCJxdWVzdGlvbkluQ2lyY2xlXCIsIFwicXVvdGVcIiwgXCJyZWNlbnRseVZpZXdlZEFwcFwiLCBcInJlZnJlc2hcIiwgXCJyZWdyZXNzaW9uSm9iXCIsIFwicmVwb3J0ZXJcIiwgXCJyZXBvcnRpbmdBcHBcIiwgXCJyZXR1cm5LZXlcIiwgXCJzYXZlXCIsIFwic2F2ZWRPYmplY3RzQXBwXCIsIFwic2NhbGVcIiwgXCJzZWFyY2hcIiwgXCJzZWFyY2hQcm9maWxlckFwcFwiLCBcInNlY3VyaXR5QW5hbHl0aWNzQXBwXCIsIFwic2VjdXJpdHlBcHBcIiwgXCJzZWN1cml0eVNpZ25hbFwiLCBcInNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWRcIiwgXCJzZWN1cml0eVNpZ25hbFJlc29sdmVkXCIsIFwic2Vzc2lvblZpZXdlclwiLCBcInNoYXJkXCIsIFwic2hhcmVcIiwgXCJzbm93Zmxha2VcIiwgXCJzb3J0RG93blwiLCBcInNvcnRMZWZ0XCIsIFwic29ydFJpZ2h0XCIsIFwic29ydFVwXCIsIFwic29ydGFibGVcIiwgXCJzcGFjZXNBcHBcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EZW5zZVZlY3RvclwiLCBcInRva2VuRWxlbWVudFwiLCBcInRva2VuRW51bVwiLCBcInRva2VuRW51bU1lbWJlclwiLCBcInRva2VuRXZlbnRcIiwgXCJ0b2tlbkV4Y2VwdGlvblwiLCBcInRva2VuRmllbGRcIiwgXCJ0b2tlbkZpbGVcIiwgXCJ0b2tlbkZsYXR0ZW5lZFwiLCBcInRva2VuRnVuY3Rpb25cIiwgXCJ0b2tlbkdlb1wiLCBcInRva2VuSGlzdG9ncmFtXCIsIFwidG9rZW5JbnRlcmZhY2VcIiwgXCJ0b2tlbklQXCIsIFwidG9rZW5Kb2luXCIsIFwidG9rZW5LZXlcIiwgXCJ0b2tlbktleXdvcmRcIiwgXCJ0b2tlbk1ldGhvZFwiLCBcInRva2VuTWV0cmljQ291bnRlclwiLCBcInRva2VuTWV0cmljR2F1Z2VcIiwgXCJ0b2tlbk1vZHVsZVwiLCBcInRva2VuTmFtZXNwYWNlXCIsIFwidG9rZW5OZXN0ZWRcIiwgXCJ0b2tlbk51bGxcIiwgXCJ0b2tlbk51bWJlclwiLCBcInRva2VuT2JqZWN0XCIsIFwidG9rZW5PcGVyYXRvclwiLCBcInRva2VuUGFja2FnZVwiLCBcInRva2VuUGFyYW1ldGVyXCIsIFwidG9rZW5QZXJjb2xhdG9yXCIsIFwidG9rZW5Qcm9wZXJ0eVwiLCBcInRva2VuUmFuZ2VcIiwgXCJ0b2tlblJhbmtGZWF0dXJlXCIsIFwidG9rZW5SYW5rRmVhdHVyZXNcIiwgXCJ0b2tlblJlcG9cIiwgXCJ0b2tlblNlYXJjaFR5cGVcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCxcbiAgICBzaWRlOiBQcm9wVHlwZXMuYW55LFxuICAgIGNvbG9yOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZF0pLFxuICAgIHJlZjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXSlcbiAgfSkuaXNSZXF1aXJlZF0pLFxuICBjbGVhcjogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHNpemU6IFByb3BUeXBlcy5hbnlcbiAgfSksXG4gIGlzTG9hZGluZzogUHJvcFR5cGVzLmJvb2wsXG4gIGlzSW52YWxpZDogUHJvcFR5cGVzLmJvb2wsXG4gIGlzRHJvcGRvd246IFByb3BUeXBlcy5ib29sLFxuICBjb21wcmVzc2VkOiBQcm9wVHlwZXMuYm9vbFxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcIm9uQ2xpY2tcIiwgXCJzaXplXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsga2V5c09mIH0gZnJvbSAnLi4vLi4vY29tbW9uJztcbmltcG9ydCB7IEV1aUljb24gfSBmcm9tICcuLi8uLi9pY29uJztcbmltcG9ydCB7IEV1aUkxOG4gfSBmcm9tICcuLi8uLi9pMThuJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgc2l6ZVRvQ2xhc3NOYW1lTWFwID0ge1xuICBzOiAnZXVpRm9ybUNvbnRyb2xMYXlvdXRDbGVhckJ1dHRvbi0tc21hbGwnLFxuICBtOiBudWxsXG59O1xuZXhwb3J0IHZhciBTSVpFUyA9IGtleXNPZihzaXplVG9DbGFzc05hbWVNYXApO1xuZXhwb3J0IHZhciBFdWlGb3JtQ29udHJvbExheW91dENsZWFyQnV0dG9uID0gZnVuY3Rpb24gRXVpRm9ybUNvbnRyb2xMYXlvdXRDbGVhckJ1dHRvbihfcmVmKSB7XG4gIHZhciBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIG9uQ2xpY2sgPSBfcmVmLm9uQ2xpY2ssXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAnbScgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlGb3JtQ29udHJvbExheW91dENsZWFyQnV0dG9uJywgc2l6ZVRvQ2xhc3NOYW1lTWFwW3NpemVdLCBjbGFzc05hbWUpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgdG9rZW46IFwiZXVpRm9ybUNvbnRyb2xMYXlvdXRDbGVhckJ1dHRvbi5sYWJlbFwiLFxuICAgIGRlZmF1bHQ6IFwiQ2xlYXIgaW5wdXRcIlxuICB9LCBmdW5jdGlvbiAobGFiZWwpIHtcbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImJ1dHRvblwiLCBfZXh0ZW5kcyh7XG4gICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgb25DbGljazogb25DbGljayxcbiAgICAgIFwiYXJpYS1sYWJlbFwiOiBsYWJlbFxuICAgIH0sIHJlc3QpLCBfX19FbW90aW9uSlNYKEV1aUljb24sIHtcbiAgICAgIGNsYXNzTmFtZTogXCJldWlGb3JtQ29udHJvbExheW91dENsZWFyQnV0dG9uX19pY29uXCIsXG4gICAgICB0eXBlOiBcImNyb3NzXCJcbiAgICB9KSk7XG4gIH0pO1xufTtcbkV1aUZvcm1Db250cm9sTGF5b3V0Q2xlYXJCdXR0b24ucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5hbnlcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJvbkNsaWNrXCIsIFwidHlwZVwiLCBcImljb25SZWZcIiwgXCJzaXplXCIsIFwiY29sb3JcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vLi4vaWNvbic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlGb3JtQ29udHJvbExheW91dEN1c3RvbUljb24gPSBmdW5jdGlvbiBFdWlGb3JtQ29udHJvbExheW91dEN1c3RvbUljb24oX3JlZikge1xuICB2YXIgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBvbkNsaWNrID0gX3JlZi5vbkNsaWNrLFxuICAgICAgdHlwZSA9IF9yZWYudHlwZSxcbiAgICAgIGljb25SZWYgPSBfcmVmLmljb25SZWYsXG4gICAgICBzaXplID0gX3JlZi5zaXplLFxuICAgICAgY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpRm9ybUNvbnRyb2xMYXlvdXRDdXN0b21JY29uJywgY2xhc3NOYW1lLCB7XG4gICAgJ2V1aUZvcm1Db250cm9sTGF5b3V0Q3VzdG9tSWNvbi0tY2xpY2thYmxlJzogb25DbGlja1xuICB9KTtcblxuICBpZiAob25DbGljaykge1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwiYnV0dG9uXCIsIF9leHRlbmRzKHtcbiAgICAgIHR5cGU6IFwiYnV0dG9uXCIsXG4gICAgICBvbkNsaWNrOiBvbkNsaWNrLFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgcmVmOiBpY29uUmVmXG4gICAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgICAgY2xhc3NOYW1lOiBcImV1aUZvcm1Db250cm9sTGF5b3V0Q3VzdG9tSWNvbl9faWNvblwiLFxuICAgICAgXCJhcmlhLWhpZGRlblwiOiBcInRydWVcIixcbiAgICAgIHNpemU6IHNpemUsXG4gICAgICB0eXBlOiB0eXBlLFxuICAgICAgY29sb3I6IGNvbG9yXG4gICAgfSkpO1xuICB9XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgcmVmOiBpY29uUmVmXG4gIH0sIHJlc3QpLCBfX19FbW90aW9uSlNYKEV1aUljb24sIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpRm9ybUNvbnRyb2xMYXlvdXRDdXN0b21JY29uX19pY29uXCIsXG4gICAgXCJhcmlhLWhpZGRlblwiOiBcInRydWVcIixcbiAgICBzaXplOiBzaXplLFxuICAgIHR5cGU6IHR5cGUsXG4gICAgY29sb3I6IGNvbG9yXG4gIH0pKTtcbn07XG5FdWlGb3JtQ29udHJvbExheW91dEN1c3RvbUljb24ucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhY2Nlc3NpYmlsaXR5XCIsIFwiYWRkRGF0YUFwcFwiLCBcImFkdmFuY2VkU2V0dGluZ3NBcHBcIiwgXCJhZ2VudEFwcFwiLCBcImFnZ3JlZ2F0ZVwiLCBcImFsZXJ0XCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbG9ja1wiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQUNpcmNsZUZpbGxlZFwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRvY3VtZW50XCIsIFwiZG9jdW1lbnRFZGl0XCIsIFwiZG9jdW1lbnRhdGlvblwiLCBcImRvY3VtZW50c1wiLCBcImRvdFwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJleGl0XCIsIFwiZXhwYW5kXCIsIFwiZXhwYW5kTWluaVwiLCBcImV4cG9ydEFjdGlvblwiLCBcImV5ZVwiLCBcImV5ZUNsb3NlZFwiLCBcImZhY2VIYXBweVwiLCBcImZhY2VOZXV0cmFsXCIsIFwiZmFjZVNhZFwiLCBcImZpbGViZWF0QXBwXCIsIFwiZmlsdGVyXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhDbG9zZVwiLCBcImluZGV4RWRpdFwiLCBcImluZGV4Rmx1c2hcIiwgXCJpbmRleE1hbmFnZW1lbnRBcHBcIiwgXCJpbmRleE1hcHBpbmdcIiwgXCJpbmRleE9wZW5cIiwgXCJpbmRleFBhdHRlcm5BcHBcIiwgXCJpbmRleFJvbGx1cEFwcFwiLCBcImluZGV4UnVudGltZVwiLCBcImluZGV4U2V0dGluZ3NcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibmFtZXNwYWNlXCIsIFwibmVzdGVkXCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZWxpbmVBcHBcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzQXBwXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpb25BcHBcIiwgXCJ0aW1lUmVmcmVzaFwiLCBcInRpbWVzbGlkZXJcIiwgXCJ0cmFpbmluZ1wiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsXG4gIHNpemU6IFByb3BUeXBlcy5hbnksXG4gIGljb25SZWY6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZF0pXG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widHlwZVwiLCBcImlzRm9jdXNlZFwiLCBcImlzSW52YWxpZFwiLCBcImlzRGlzYWJsZWRcIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aUZvcm1MYWJlbCA9IGZ1bmN0aW9uIEV1aUZvcm1MYWJlbChfcmVmKSB7XG4gIHZhciBfcmVmJHR5cGUgPSBfcmVmLnR5cGUsXG4gICAgICB0eXBlID0gX3JlZiR0eXBlID09PSB2b2lkIDAgPyAnbGFiZWwnIDogX3JlZiR0eXBlLFxuICAgICAgaXNGb2N1c2VkID0gX3JlZi5pc0ZvY3VzZWQsXG4gICAgICBpc0ludmFsaWQgPSBfcmVmLmlzSW52YWxpZCxcbiAgICAgIGlzRGlzYWJsZWQgPSBfcmVmLmlzRGlzYWJsZWQsXG4gICAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUZvcm1MYWJlbCcsIGNsYXNzTmFtZSwge1xuICAgICdldWlGb3JtTGFiZWwtaXNGb2N1c2VkJzogaXNGb2N1c2VkLFxuICAgICdldWlGb3JtTGFiZWwtaXNJbnZhbGlkJzogaXNJbnZhbGlkLFxuICAgICdldWlGb3JtTGFiZWwtaXNEaXNhYmxlZCc6IGlzRGlzYWJsZWRcbiAgfSk7XG5cbiAgaWYgKHR5cGUgPT09ICdsZWdlbmQnKSB7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJsZWdlbmRcIiwgX2V4dGVuZHMoe1xuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gICAgfSwgcmVzdCksIGNoaWxkcmVuKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImxhYmVsXCIsIF9leHRlbmRzKHtcbiAgICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICAgIH0sIHJlc3QpLCBjaGlsZHJlbik7XG4gIH1cbn07XG5FdWlGb3JtTGFiZWwucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICAgKiBEZWZhdWx0IHR5cGUgaXMgYSBgbGFiZWxgIGJ1dCBjYW4gYmUgY2hhbmdlZCB0byBhIGBsZWdlbmRgXG4gICAgICogaWYgdXNpbmcgaW5zaWRlIGEgYGZpZWxkc2V0YC5cbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBEZWZhdWx0IHR5cGUgaXMgYSBgbGFiZWxgIGJ1dCBjYW4gYmUgY2hhbmdlZCB0byBhIGBsZWdlbmRgXG4gICAgICogaWYgdXNpbmcgaW5zaWRlIGEgYGZpZWxkc2V0YC5cbiAgICAgKi9cbiAgdHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImxhYmVsXCJdKSwgUHJvcFR5cGVzLm9uZU9mKFtcImxhYmVsXCIsIFwibGVnZW5kXCJdKV0pLCBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wibGVnZW5kXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2YoW1wibGFiZWxcIiwgXCJsZWdlbmRcIl0pXSldKSxcbiAgaXNGb2N1c2VkOiBQcm9wVHlwZXMuYm9vbCxcbiAgaXNJbnZhbGlkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBDaGFuZ2VzIGBjdXJzb3JgIHRvIGBkZWZhdWx0YC5cbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBDaGFuZ2VzIGBjdXJzb3JgIHRvIGBkZWZhdWx0YC5cbiAgICAgKi9cbiAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZ1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IENoaWxkcmVuLCBjbG9uZUVsZW1lbnQsIHVzZVJlZiwgdXNlRWZmZWN0LCB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcblxuZnVuY3Rpb24gaXNNdXRhYmxlUmVmKHJlZikge1xuICByZXR1cm4gcmVmICE9IG51bGwgJiYgcmVmLmhhc093blByb3BlcnR5KCdjdXJyZW50Jyk7XG59XG5cbmV4cG9ydCB2YXIgRXVpVmFsaWRhdGFibGVDb250cm9sID0gZnVuY3Rpb24gRXVpVmFsaWRhdGFibGVDb250cm9sKF9yZWYpIHtcbiAgdmFyIGlzSW52YWxpZCA9IF9yZWYuaXNJbnZhbGlkLFxuICAgICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuO1xuICB2YXIgY29udHJvbCA9IHVzZVJlZihudWxsKTtcbiAgdmFyIGNoaWxkID0gQ2hpbGRyZW4ub25seShjaGlsZHJlbik7XG4gIHZhciBjaGlsZFJlZiA9IGNoaWxkLnJlZjtcbiAgdmFyIHJlcGxhY2VkUmVmID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICBjb250cm9sLmN1cnJlbnQgPSBlbGVtZW50OyAvLyBDYWxsIHRoZSBvcmlnaW5hbCByZWYsIGlmIGFueVxuXG4gICAgaWYgKHR5cGVvZiBjaGlsZFJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY2hpbGRSZWYoZWxlbWVudCk7XG4gICAgfSBlbHNlIGlmIChpc011dGFibGVSZWYoY2hpbGRSZWYpKSB7XG4gICAgICBjaGlsZFJlZi5jdXJyZW50ID0gZWxlbWVudDtcbiAgICB9XG4gIH0sIFtjaGlsZFJlZl0pO1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmIChjb250cm9sLmN1cnJlbnQgPT09IG51bGwgfHwgdHlwZW9mIGNvbnRyb2wuY3VycmVudC5zZXRDdXN0b21WYWxpZGl0eSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuOyAvLyBqc2RvbSBkb2Vzbid0IHBvbHlmaWxsIHRoaXMgZm9yIHRoZSBzZXJ2ZXItc2lkZVxuICAgIH1cblxuICAgIGlmIChpc0ludmFsaWQpIHtcbiAgICAgIGNvbnRyb2wuY3VycmVudC5zZXRDdXN0b21WYWxpZGl0eSgnSW52YWxpZCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250cm9sLmN1cnJlbnQuc2V0Q3VzdG9tVmFsaWRpdHkoJycpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovY2xvbmVFbGVtZW50KGNoaWxkLCB7XG4gICAgcmVmOiByZXBsYWNlZFJlZixcbiAgICAnYXJpYS1pbnZhbGlkJzogaXNJbnZhbGlkXG4gIH0pO1xufTtcbkV1aVZhbGlkYXRhYmxlQ29udHJvbC5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgaXNJbnZhbGlkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBSZWFjdE5vZGUgdG8gcmVuZGVyIGFzIHRoaXMgY29tcG9uZW50J3MgY29udGVudFxuICAgICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICByZWY6IFByb3BUeXBlcy5hbnlcbiAgfSkuaXNSZXF1aXJlZFxufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLyoqXG4gKiBUaGUgYGdldEZvcm1Db250cm9sQ2xhc3NOYW1lRm9ySWNvbkNvdW50YCBmdW5jdGlvbiBoZWxwcyBzZXR1cCB0aGUgY2xhc3NOYW1lIGFwcGVuZHVtXG4gKiBkZXBlbmRpbmcgb24gdGhlIGZvcm0gY29udHJvbCdzIGN1cnJlbnQgc2V0dGluZ3Mvc3RhdGUuXG4gKlxuICogQHBhcmFtIGljb24ge2Jvb2xlYW59IERvZXMgaXQgY29udGFpbiBhIHN0YXRpYyBpY29uIGxpa2UgYXJyb3dEb3duXG4gKiBAcGFyYW0gY2xlYXIge2Jvb2xlYW59IElzIGl0IGN1cnJlbnRseSBjbGVhcmFibGVcbiAqIEBwYXJhbSBpc0xvYWRpbmcge2Jvb2xlYW59IElzIGlzIGN1cnJlbnRseSBsb2FkaW5nXG4gKiBAcGFyYW0gaXNJbnZhbGlkIHtib29sZWFufSBJdCBpcyBjdXJyZW50bHkgaW52YWxpZFxuICogQHBhcmFtIGlzRHJvcGRvd24ge2Jvb2xlYW59IEl0IGlzIGFzIGRyb3Bkb3duXG4gKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfSBSZXR1cm5zIHRoZSBzdHJpbmcgdG8gYXBwZW5kIHRvIHRoZSBiYXNlIGNsYXNzTmFtZSBvZiB0aGUgZm9ybSBjb250cm9sOyBvciBgdW5kZWZpbmVkYCBpZiBhbGwgZXZhbHVhdGUgdG8gZmFsc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1Db250cm9sQ2xhc3NOYW1lRm9ySWNvbkNvdW50KF9yZWYpIHtcbiAgdmFyIGljb24gPSBfcmVmLmljb24sXG4gICAgICBjbGVhciA9IF9yZWYuY2xlYXIsXG4gICAgICBpc0xvYWRpbmcgPSBfcmVmLmlzTG9hZGluZyxcbiAgICAgIGlzSW52YWxpZCA9IF9yZWYuaXNJbnZhbGlkLFxuICAgICAgaXNEcm9wZG93biA9IF9yZWYuaXNEcm9wZG93bjtcbiAgdmFyIG51bUljb25zID0gW2ljb24sIGNsZWFyLCBpc0ludmFsaWQsIGlzTG9hZGluZywgaXNEcm9wZG93bl0uZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgcmV0dXJuIGl0ZW0gPT09IHRydWU7XG4gIH0pLmxlbmd0aDsgLy8gVGhpcyBjbGFzc05hbWUgaXMgYWxzbyBzcGVjaWZpY2FsbHkgdXNlZCBpbiBgc3JjL2dsb2JhbF9zdHlsaW5nL21peGlucy9fZm9ybS5zY3NzYFxuXG4gIHJldHVybiBudW1JY29ucyA+IDAgPyBcImV1aUZvcm1Db250cm9sTGF5b3V0LS1cIi5jb25jYXQobnVtSWNvbnMsIFwiaWNvbnNcIikgOiB1bmRlZmluZWQ7XG59IiwgImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxudmFyIF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcImlkXCIsIFwibmFtZVwiLCBcInBsYWNlaG9sZGVyXCIsIFwiaXNJbnZhbGlkXCIsIFwiZnVsbFdpZHRoXCIsIFwiaXNMb2FkaW5nXCIsIFwiaW5wdXRSZWZcIiwgXCJpbmNyZW1lbnRhbFwiLCBcImNvbXByZXNzZWRcIiwgXCJvblNlYXJjaFwiLCBcImlzQ2xlYXJhYmxlXCIsIFwiYXBwZW5kXCIsIFwicHJlcGVuZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBCcm93c2VyIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYnJvd3Nlcic7XG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpRm9ybUNvbnRyb2xMYXlvdXQgfSBmcm9tICcuLi9mb3JtX2NvbnRyb2xfbGF5b3V0JztcbmltcG9ydCB7IEV1aVZhbGlkYXRhYmxlQ29udHJvbCB9IGZyb20gJy4uL3ZhbGlkYXRhYmxlX2NvbnRyb2wnO1xuaW1wb3J0IHsgZ2V0Rm9ybUNvbnRyb2xDbGFzc05hbWVGb3JJY29uQ291bnQgfSBmcm9tICcuLi9mb3JtX2NvbnRyb2xfbGF5b3V0L19udW1faWNvbnMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBpc1NlYXJjaFN1cHBvcnRlZCA9IGZhbHNlO1xuZXhwb3J0IHZhciBFdWlGaWVsZFNlYXJjaCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoRXVpRmllbGRTZWFyY2gsIF9Db21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoRXVpRmllbGRTZWFyY2gpO1xuXG4gIGZ1bmN0aW9uIEV1aUZpZWxkU2VhcmNoKCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlGaWVsZFNlYXJjaCk7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbC5hcHBseShfc3VwZXIsIFt0aGlzXS5jb25jYXQoYXJncykpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInN0YXRlXCIsIHtcbiAgICAgIHZhbHVlOiBfdGhpcy5wcm9wcy52YWx1ZSB8fCBTdHJpbmcoX3RoaXMucHJvcHMuZGVmYXVsdFZhbHVlIHx8ICcnKVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImlucHV0RWxlbWVudFwiLCBudWxsKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJjbGVhbnVwc1wiLCBbXSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25DbGVhclwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBjbGVhciB0aGUgZmllbGQncyB2YWx1ZVxuICAgICAgLy8gMS4gUmVhY3QgZG9lc24ndCBsaXN0ZW4gZm9yIGBjaGFuZ2VgIGV2ZW50cywgaW5zdGVhZCBpdCBtYXBzIGBpbnB1dGAgZXZlbnRzIHRvIGBjaGFuZ2VgXG4gICAgICAvLyAyLiBSZWFjdCBvbmx5IGZpcmVzIHRoZSBtYXBwZWQgYGNoYW5nZWAgZXZlbnQgaWYgdGhlIGVsZW1lbnQncyB2YWx1ZSBoYXMgY2hhbmdlZFxuICAgICAgLy8gMy4gQW4gaW5wdXQncyB2YWx1ZSBpcywgaW4gYWRkaXRpb24gdG8gb3RoZXIgbWV0aG9kcywgdHJhY2tlZCBieSBpbnRlcmNlcHRpbmcgZWxlbWVudC52YWx1ZSA9ICcuLi4nXG4gICAgICAvL1xuICAgICAgLy8gU28gd2UgaGF2ZSB0byBnbyBiZWxvdyB0aGUgZWxlbWVudCdzIHZhbHVlIHNldHRlciB0byBhdm9pZCBSZWFjdCBpbnRlcmNlcHRpbmcgaXQsXG4gICAgICAvLyBvbmx5IHRoZW4gd2lsbCBSZWFjdCB0cmVhdCB0aGUgdmFsdWUgYXMgZGlmZmVyZW50IGFuZCBmaXJlIGl0cyBgY2hhbmdlYCBldmVudFxuICAgICAgLy9cbiAgICAgIC8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzIzODkyNTQ3L3doYXQtaXMtdGhlLWJlc3Qtd2F5LXRvLXRyaWdnZXItb25jaGFuZ2UtZXZlbnQtaW4tcmVhY3QtanNcbiAgICAgIHZhciBuYXRpdmVJbnB1dFZhbHVlID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihIVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZSwgJ3ZhbHVlJyk7XG4gICAgICB2YXIgbmF0aXZlSW5wdXRWYWx1ZVNldHRlciA9IG5hdGl2ZUlucHV0VmFsdWUgPyBuYXRpdmVJbnB1dFZhbHVlLnNldCA6IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKG5hdGl2ZUlucHV0VmFsdWVTZXR0ZXIpIHtcbiAgICAgICAgbmF0aXZlSW5wdXRWYWx1ZVNldHRlci5jYWxsKF90aGlzLmlucHV0RWxlbWVudCwgJycpO1xuICAgICAgfSAvLyBkaXNwYXRjaCBpbnB1dCBldmVudCwgd2l0aCBJRTExIHN1cHBvcnQvZmFsbGJhY2tcblxuXG4gICAgICB2YXIgZXZlbnQ7XG5cbiAgICAgIGlmICgnRXZlbnQnIGluIHdpbmRvdyAmJiB0eXBlb2YgRXZlbnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZXZlbnQgPSBuZXcgRXZlbnQoJ2lucHV0Jywge1xuICAgICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgICAgY2FuY2VsYWJsZTogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBJRTExXG4gICAgICAgIGV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0V2ZW50Jyk7XG4gICAgICAgIGV2ZW50LmluaXRFdmVudCgnaW5wdXQnLCB0cnVlLCBmYWxzZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChfdGhpcy5pbnB1dEVsZW1lbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgICAgX3RoaXMuaW5wdXRFbGVtZW50LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuICAgICAgICB9IC8vIHNldCBmb2N1cyBvbiB0aGUgc2VhcmNoIGZpZWxkXG5cblxuICAgICAgICBfdGhpcy5pbnB1dEVsZW1lbnQuZm9jdXMoKTtcblxuICAgICAgICBfdGhpcy5pbnB1dEVsZW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2NoYW5nZScpKTtcbiAgICAgIH1cblxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBpbmNyZW1lbnRhbCA9IF90aGlzJHByb3BzLmluY3JlbWVudGFsLFxuICAgICAgICAgIG9uU2VhcmNoID0gX3RoaXMkcHJvcHMub25TZWFyY2g7XG5cbiAgICAgIGlmIChvblNlYXJjaCAmJiBpbmNyZW1lbnRhbCkge1xuICAgICAgICBvblNlYXJjaCgnJyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic2V0UmVmXCIsIGZ1bmN0aW9uIChpbnB1dEVsZW1lbnQpIHtcbiAgICAgIF90aGlzLmlucHV0RWxlbWVudCA9IGlucHV0RWxlbWVudDtcblxuICAgICAgaWYgKF90aGlzLnByb3BzLmlucHV0UmVmKSB7XG4gICAgICAgIF90aGlzLnByb3BzLmlucHV0UmVmKGlucHV0RWxlbWVudCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25LZXlVcFwiLCBmdW5jdGlvbiAoZXZlbnQsIGluY3JlbWVudGFsLCBvblNlYXJjaCkge1xuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICB2YWx1ZTogZXZlbnQudGFyZ2V0LnZhbHVlXG4gICAgICB9KTtcblxuICAgICAgaWYgKF90aGlzLnByb3BzLm9uS2V5VXApIHtcbiAgICAgICAgX3RoaXMucHJvcHMub25LZXlVcChldmVudCk7XG5cbiAgICAgICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG9uU2VhcmNoICYmIChldmVudC5rZXkgIT09IGtleXMuRU5URVIgJiYgaW5jcmVtZW50YWwgfHwgZXZlbnQua2V5ID09PSBrZXlzLkVOVEVSICYmICFpc1NlYXJjaFN1cHBvcnRlZCkpIHtcbiAgICAgICAgb25TZWFyY2goZXZlbnQudGFyZ2V0LnZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdWlGaWVsZFNlYXJjaCwgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgaWYgKCF0aGlzLmlucHV0RWxlbWVudCkgcmV0dXJuO1xuICAgICAgaXNTZWFyY2hTdXBwb3J0ZWQgPSBCcm93c2VyLmlzRXZlbnRTdXBwb3J0ZWQoJ3NlYXJjaCcsIHRoaXMuaW5wdXRFbGVtZW50KTtcblxuICAgICAgaWYgKGlzU2VhcmNoU3VwcG9ydGVkKSB7XG4gICAgICAgIHZhciBvblNlYXJjaCA9IGZ1bmN0aW9uIG9uU2VhcmNoKGV2ZW50KSB7XG4gICAgICAgICAgaWYgKF90aGlzMi5wcm9wcy5vblNlYXJjaCkge1xuICAgICAgICAgICAgaWYgKCFldmVudCB8fCAhZXZlbnQudGFyZ2V0IHx8IGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHJldHVybjtcblxuICAgICAgICAgICAgX3RoaXMyLnByb3BzLm9uU2VhcmNoKGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuaW5wdXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3NlYXJjaCcsIG9uU2VhcmNoKTtcbiAgICAgICAgdGhpcy5jbGVhbnVwcy5wdXNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoIV90aGlzMi5pbnB1dEVsZW1lbnQpIHJldHVybjtcblxuICAgICAgICAgIF90aGlzMi5pbnB1dEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2VhcmNoJywgb25TZWFyY2gpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdmFyIG9uQ2hhbmdlID0gZnVuY3Rpb24gb25DaGFuZ2UoZXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50LnRhcmdldCAmJiBldmVudC50YXJnZXQudmFsdWUgIT09IF90aGlzMi5zdGF0ZS52YWx1ZSkge1xuICAgICAgICAgIF90aGlzMi5zZXRTdGF0ZSh7XG4gICAgICAgICAgICB2YWx1ZTogZXZlbnQudGFyZ2V0LnZhbHVlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpZiAoX3RoaXMyLnByb3BzLm9uU2VhcmNoKSB7XG4gICAgICAgICAgICBfdGhpczIucHJvcHMub25TZWFyY2goZXZlbnQudGFyZ2V0LnZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHRoaXMuaW5wdXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIG9uQ2hhbmdlKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50V2lsbFVubW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICB0aGlzLmNsZWFudXBzLmZvckVhY2goZnVuY3Rpb24gKGNsZWFudXApIHtcbiAgICAgICAgcmV0dXJuIGNsZWFudXAoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzMi5jbGFzc05hbWUsXG4gICAgICAgICAgaWQgPSBfdGhpcyRwcm9wczIuaWQsXG4gICAgICAgICAgbmFtZSA9IF90aGlzJHByb3BzMi5uYW1lLFxuICAgICAgICAgIHBsYWNlaG9sZGVyID0gX3RoaXMkcHJvcHMyLnBsYWNlaG9sZGVyLFxuICAgICAgICAgIGlzSW52YWxpZCA9IF90aGlzJHByb3BzMi5pc0ludmFsaWQsXG4gICAgICAgICAgZnVsbFdpZHRoID0gX3RoaXMkcHJvcHMyLmZ1bGxXaWR0aCxcbiAgICAgICAgICBpc0xvYWRpbmcgPSBfdGhpcyRwcm9wczIuaXNMb2FkaW5nLFxuICAgICAgICAgIGlucHV0UmVmID0gX3RoaXMkcHJvcHMyLmlucHV0UmVmLFxuICAgICAgICAgIGluY3JlbWVudGFsID0gX3RoaXMkcHJvcHMyLmluY3JlbWVudGFsLFxuICAgICAgICAgIGNvbXByZXNzZWQgPSBfdGhpcyRwcm9wczIuY29tcHJlc3NlZCxcbiAgICAgICAgICBvblNlYXJjaCA9IF90aGlzJHByb3BzMi5vblNlYXJjaCxcbiAgICAgICAgICBfaXNDbGVhcmFibGUgPSBfdGhpcyRwcm9wczIuaXNDbGVhcmFibGUsXG4gICAgICAgICAgYXBwZW5kID0gX3RoaXMkcHJvcHMyLmFwcGVuZCxcbiAgICAgICAgICBwcmVwZW5kID0gX3RoaXMkcHJvcHMyLnByZXBlbmQsXG4gICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wczIsIF9leGNsdWRlZCk7XG5cbiAgICAgIHZhciB2YWx1ZSA9IHRoaXMucHJvcHMudmFsdWU7XG4gICAgICBpZiAodHlwZW9mIHRoaXMucHJvcHMudmFsdWUgIT09ICdzdHJpbmcnKSB2YWx1ZSA9IHRoaXMuc3RhdGUudmFsdWU7IC8vIFNldCBhY3R1YWwgdmFsdWUgb2YgaXNDbGVhcmFibGUgaWYgdmFsdWUgZXhpc3RzIGFzIHdlbGxcblxuICAgICAgdmFyIGlzQ2xlYXJhYmxlID0gQm9vbGVhbihfaXNDbGVhcmFibGUgJiYgdmFsdWUgJiYgIXJlc3QucmVhZE9ubHkgJiYgIXJlc3QuZGlzYWJsZWQpO1xuICAgICAgdmFyIG51bUljb25zQ2xhc3MgPSBnZXRGb3JtQ29udHJvbENsYXNzTmFtZUZvckljb25Db3VudCh7XG4gICAgICAgIGNsZWFyOiBpc0NsZWFyYWJsZSxcbiAgICAgICAgaXNJbnZhbGlkOiBpc0ludmFsaWQsXG4gICAgICAgIGlzTG9hZGluZzogaXNMb2FkaW5nXG4gICAgICB9KTtcbiAgICAgIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpRmllbGRTZWFyY2gnLCBudW1JY29uc0NsYXNzLCB7XG4gICAgICAgICdldWlGaWVsZFNlYXJjaC0tZnVsbFdpZHRoJzogZnVsbFdpZHRoLFxuICAgICAgICAnZXVpRmllbGRTZWFyY2gtLWNvbXByZXNzZWQnOiBjb21wcmVzc2VkLFxuICAgICAgICAnZXVpRmllbGRTZWFyY2gtLWluR3JvdXAnOiBwcmVwZW5kIHx8IGFwcGVuZCxcbiAgICAgICAgJ2V1aUZpZWxkU2VhcmNoLWlzTG9hZGluZyc6IGlzTG9hZGluZyxcbiAgICAgICAgJ2V1aUZpZWxkU2VhcmNoLWlzQ2xlYXJhYmxlJzogaXNDbGVhcmFibGUsXG4gICAgICAgICdldWlGaWVsZFNlYXJjaC1pc0ludmFsaWQnOiBpc0ludmFsaWRcbiAgICAgIH0sIGNsYXNzTmFtZSk7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlGb3JtQ29udHJvbExheW91dCwge1xuICAgICAgICBpY29uOiBcInNlYXJjaFwiLFxuICAgICAgICBmdWxsV2lkdGg6IGZ1bGxXaWR0aCxcbiAgICAgICAgaXNMb2FkaW5nOiBpc0xvYWRpbmcsXG4gICAgICAgIGlzSW52YWxpZDogaXNJbnZhbGlkLFxuICAgICAgICBjbGVhcjogaXNDbGVhcmFibGUgPyB7XG4gICAgICAgICAgb25DbGljazogdGhpcy5vbkNsZWFyLFxuICAgICAgICAgICdkYXRhLXRlc3Qtc3Viaic6ICdjbGVhclNlYXJjaEJ1dHRvbidcbiAgICAgICAgfSA6IHVuZGVmaW5lZCxcbiAgICAgICAgY29tcHJlc3NlZDogY29tcHJlc3NlZCxcbiAgICAgICAgYXBwZW5kOiBhcHBlbmQsXG4gICAgICAgIHByZXBlbmQ6IHByZXBlbmRcbiAgICAgIH0sIF9fX0Vtb3Rpb25KU1goRXVpVmFsaWRhdGFibGVDb250cm9sLCB7XG4gICAgICAgIGlzSW52YWxpZDogaXNJbnZhbGlkXG4gICAgICB9LCBfX19FbW90aW9uSlNYKFwiaW5wdXRcIiwgX2V4dGVuZHMoe1xuICAgICAgICB0eXBlOiBcInNlYXJjaFwiLFxuICAgICAgICBpZDogaWQsXG4gICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgIHBsYWNlaG9sZGVyOiBwbGFjZWhvbGRlcixcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICBvbktleVVwOiBmdW5jdGlvbiBvbktleVVwKGUpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXMzLm9uS2V5VXAoZSwgaW5jcmVtZW50YWwsIG9uU2VhcmNoKTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVmOiB0aGlzLnNldFJlZlxuICAgICAgfSwgcmVzdCkpKSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEV1aUZpZWxkU2VhcmNoO1xufShDb21wb25lbnQpO1xuXG5fZGVmaW5lUHJvcGVydHkoRXVpRmllbGRTZWFyY2gsIFwiZGVmYXVsdFByb3BzXCIsIHtcbiAgZnVsbFdpZHRoOiBmYWxzZSxcbiAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgaW5jcmVtZW50YWw6IGZhbHNlLFxuICBjb21wcmVzc2VkOiBmYWxzZSxcbiAgaXNDbGVhcmFibGU6IHRydWVcbn0pO1xuXG5FdWlGaWVsZFNlYXJjaC5wcm9wVHlwZXMgPSB7XG4gIG5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgdmFsdWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGlzSW52YWxpZDogUHJvcFR5cGVzLmJvb2wsXG4gIGZ1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wsXG4gIGlzTG9hZGluZzogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogQ2FsbGVkIHdoZW4gdGhlIHVzZXIgcHJlc3NlcyBbRW50ZXJdIE9SIG9uIGNoYW5nZSBpZiB0aGUgaW5jcmVtZW50YWwgcHJvcCBpcyBgdHJ1ZWAuXG4gICAgICogSWYgeW91IGRvbid0IG5lZWQgdGhlIG9uW0VudGVyXSBmdW5jdGlvbmFsaXR5LCBwcmVmZXIgdXNpbmcgb25DaGFuZ2VcbiAgICAgKi9cbiAgb25TZWFyY2g6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgICAqIFdoZW4gYHRydWVgIHRoZSBzZWFyY2ggd2lsbCBiZSBleGVjdXRlZCAodGhhdCBpcywgdGhlIGBvblNlYXJjaGAgd2lsbCBiZSBjYWxsZWQpIGFzIHRoZVxuICAgICAqIHVzZXIgdHlwZXMuXG4gICAgICovXG4gIGluY3JlbWVudGFsOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiB3aGVuIGB0cnVlYCBjcmVhdGVzIGEgc2hvcnRlciBoZWlnaHQgaW5wdXRcbiAgICAgKi9cbiAgY29tcHJlc3NlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGlucHV0UmVmOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICAgKiBTaG93cyBhIGJ1dHRvbiB0aGF0IHF1aWNrbHkgY2xlYXJzIGFueSBpbnB1dFxuICAgICAqL1xuICBpc0NsZWFyYWJsZTogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnB1dCBncm91cCB3aXRoIGVsZW1lbnQocykgY29taW5nIGJlZm9yZSBpbnB1dFxuICAgICAqIGBzdHJpbmdgIHwgYFJlYWN0RWxlbWVudGAgb3IgYW4gYXJyYXkgb2YgdGhlc2VcbiAgICAgKi9cbiAgcHJlcGVuZDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCkuaXNSZXF1aXJlZF0pLFxuXG4gIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5wdXQgZ3JvdXAgd2l0aCBlbGVtZW50KHMpIGNvbWluZyBhZnRlciBpbnB1dC5cbiAgICAgKiBgc3RyaW5nYCB8IGBSZWFjdEVsZW1lbnRgIG9yIGFuIGFycmF5IG9mIHRoZXNlXG4gICAgICovXG4gIGFwcGVuZDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCkuaXNSZXF1aXJlZF0pLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBXZSBkb24ndCBub3JtYWxseSB1c2UgJ0knIHByZWZpeGVzLCB0aGlzIGZpbGUgaXMgYW4gZXhjZXB0aW9uXG52YXIgQnJvd3NlckltcGwgPSB7XG4gIGlzRXZlbnRTdXBwb3J0ZWQ6IGZ1bmN0aW9uIGlzRXZlbnRTdXBwb3J0ZWQobmFtZSwgZWxlbWVudCkge1xuICAgIHJldHVybiBcIm9uXCIuY29uY2F0KG5hbWUpIGluIGVsZW1lbnQ7XG4gIH1cbn07XG5leHBvcnQgdmFyIEJyb3dzZXIgPSBPYmplY3QuZnJlZXplKEJyb3dzZXJJbXBsKTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpRm9ybUVycm9yVGV4dCA9IGZ1bmN0aW9uIEV1aUZvcm1FcnJvclRleHQoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlGb3JtRXJyb3JUZXh0JywgY2xhc3NOYW1lKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBcImFyaWEtbGl2ZVwiOiBcInBvbGl0ZVwiXG4gIH0sIHJlc3QpLCBjaGlsZHJlbik7XG59O1xuRXVpRm9ybUVycm9yVGV4dC5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZ1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpRm9ybUhlbHBUZXh0ID0gZnVuY3Rpb24gRXVpRm9ybUhlbHBUZXh0KF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpRm9ybUhlbHBUZXh0JywgY2xhc3NOYW1lKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICB9LCByZXN0KSwgY2hpbGRyZW4pO1xufTtcbkV1aUZvcm1IZWxwVGV4dC5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZ1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG52YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJoZWxwVGV4dFwiLCBcImlzSW52YWxpZFwiLCBcImVycm9yXCIsIFwibGFiZWxcIiwgXCJsYWJlbFR5cGVcIiwgXCJsYWJlbEFwcGVuZFwiLCBcImhhc0VtcHR5TGFiZWxTcGFjZVwiLCBcImZ1bGxXaWR0aFwiLCBcImNsYXNzTmFtZVwiLCBcImRlc2NyaWJlZEJ5SWRzXCIsIFwiZGlzcGxheVwiLCBcImhhc0NoaWxkTGFiZWxcIiwgXCJpZFwiLCBcImlzRGlzYWJsZWRcIl07XG5cbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHsgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHsgaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgaXRlcltTeW1ib2wuaXRlcmF0b3JdICE9IG51bGwgfHwgaXRlcltcIkBAaXRlcmF0b3JcIl0gIT0gbnVsbCkgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkoYXJyKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBjbG9uZUVsZW1lbnQsIENvbXBvbmVudCwgQ2hpbGRyZW4gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGtleXNPZiB9IGZyb20gJy4uLy4uL2NvbW1vbic7XG5pbXBvcnQgeyBnZXQgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9vYmplY3RzJztcbmltcG9ydCB7IEV1aUZvcm1IZWxwVGV4dCB9IGZyb20gJy4uL2Zvcm1faGVscF90ZXh0JztcbmltcG9ydCB7IEV1aUZvcm1FcnJvclRleHQgfSBmcm9tICcuLi9mb3JtX2Vycm9yX3RleHQnO1xuaW1wb3J0IHsgRXVpRm9ybUxhYmVsIH0gZnJvbSAnLi4vZm9ybV9sYWJlbCc7XG5pbXBvcnQgeyBodG1sSWRHZW5lcmF0b3IgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hY2Nlc3NpYmlsaXR5JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgZGlzcGxheVRvQ2xhc3NOYW1lTWFwID0ge1xuICByb3c6IG51bGwsXG4gIHJvd0NvbXByZXNzZWQ6ICdldWlGb3JtUm93LS1jb21wcmVzc2VkJyxcbiAgY29sdW1uQ29tcHJlc3NlZDogJ2V1aUZvcm1Sb3ctLWNvbXByZXNzZWQgZXVpRm9ybVJvdy0taG9yaXpvbnRhbCcsXG4gIGNlbnRlcjogbnVsbCxcbiAgY2VudGVyQ29tcHJlc3NlZDogJ2V1aUZvcm1Sb3ctLWNvbXByZXNzZWQnLFxuICBjb2x1bW5Db21wcmVzc2VkU3dpdGNoOiAnZXVpRm9ybVJvdy0tY29tcHJlc3NlZCBldWlGb3JtUm93LS1ob3Jpem9udGFsIGV1aUZvcm1Sb3ctLWhhc1N3aXRjaCdcbn07XG5leHBvcnQgdmFyIERJU1BMQVlTID0ga2V5c09mKGRpc3BsYXlUb0NsYXNzTmFtZU1hcCk7XG5leHBvcnQgdmFyIEV1aUZvcm1Sb3cgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEV1aUZvcm1Sb3csIF9Db21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoRXVpRm9ybVJvdyk7XG5cbiAgZnVuY3Rpb24gRXVpRm9ybVJvdygpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpRm9ybVJvdyk7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgX2FyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBfYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsLmFwcGx5KF9zdXBlciwgW3RoaXNdLmNvbmNhdChfYXJncykpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInN0YXRlXCIsIHtcbiAgICAgIGlzRm9jdXNlZDogZmFsc2UsXG4gICAgICBpZDogX3RoaXMucHJvcHMuaWQgfHwgaHRtbElkR2VuZXJhdG9yKCkoKVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uRm9jdXNcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gRG9pbmcgdGhpcyB0byBhbGxvdyBvbkZvY3VzIHRvIGJlIGNhbGxlZCBjb3JyZWN0bHkgZnJvbSB0aGUgY2hpbGQgaW5wdXQgZWxlbWVudCBhcyB0aGlzIGNvbXBvbmVudCBvdmVycmlkZXMgaXRcbiAgICAgIHZhciBvbkNoaWxkRm9jdXMgPSBnZXQoX3RoaXMucHJvcHMsICdjaGlsZHJlbi5wcm9wcy5vbkZvY3VzJyk7XG5cbiAgICAgIGlmIChvbkNoaWxkRm9jdXMpIHtcbiAgICAgICAgb25DaGlsZEZvY3VzLmFwcGx5KHZvaWQgMCwgYXJndW1lbnRzKTtcbiAgICAgIH1cblxuICAgICAgX3RoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgICAgdmFyIGlzRm9jdXNlZCA9IF9yZWYuaXNGb2N1c2VkO1xuXG4gICAgICAgIGlmICghaXNGb2N1c2VkKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlzRm9jdXNlZDogdHJ1ZVxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uQmx1clwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBEb2luZyB0aGlzIHRvIGFsbG93IG9uQmx1ciB0byBiZSBjYWxsZWQgY29ycmVjdGx5IGZyb20gdGhlIGNoaWxkIGlucHV0IGVsZW1lbnQgYXMgdGhpcyBjb21wb25lbnQgb3ZlcnJpZGVzIGl0XG4gICAgICB2YXIgb25DaGlsZEJsdXIgPSBnZXQoX3RoaXMucHJvcHMsICdjaGlsZHJlbi5wcm9wcy5vbkJsdXInKTtcblxuICAgICAgaWYgKG9uQ2hpbGRCbHVyKSB7XG4gICAgICAgIG9uQ2hpbGRCbHVyLmFwcGx5KHZvaWQgMCwgYXJndW1lbnRzKTtcbiAgICAgIH1cblxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBpc0ZvY3VzZWQ6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdWlGb3JtUm93LCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF9yZWYyLCBfY2hpbGQkcHJvcHMkZGlzYWJsZWQ7XG5cbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wcy5jaGlsZHJlbixcbiAgICAgICAgICBoZWxwVGV4dCA9IF90aGlzJHByb3BzLmhlbHBUZXh0LFxuICAgICAgICAgIGlzSW52YWxpZCA9IF90aGlzJHByb3BzLmlzSW52YWxpZCxcbiAgICAgICAgICBlcnJvciA9IF90aGlzJHByb3BzLmVycm9yLFxuICAgICAgICAgIGxhYmVsID0gX3RoaXMkcHJvcHMubGFiZWwsXG4gICAgICAgICAgbGFiZWxUeXBlID0gX3RoaXMkcHJvcHMubGFiZWxUeXBlLFxuICAgICAgICAgIGxhYmVsQXBwZW5kID0gX3RoaXMkcHJvcHMubGFiZWxBcHBlbmQsXG4gICAgICAgICAgaGFzRW1wdHlMYWJlbFNwYWNlID0gX3RoaXMkcHJvcHMuaGFzRW1wdHlMYWJlbFNwYWNlLFxuICAgICAgICAgIGZ1bGxXaWR0aCA9IF90aGlzJHByb3BzLmZ1bGxXaWR0aCxcbiAgICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wcy5jbGFzc05hbWUsXG4gICAgICAgICAgZGVzY3JpYmVkQnlJZHMgPSBfdGhpcyRwcm9wcy5kZXNjcmliZWRCeUlkcyxcbiAgICAgICAgICBkaXNwbGF5ID0gX3RoaXMkcHJvcHMuZGlzcGxheSxcbiAgICAgICAgICBoYXNDaGlsZExhYmVsID0gX3RoaXMkcHJvcHMuaGFzQ2hpbGRMYWJlbCxcbiAgICAgICAgICBwcm9wc0lkID0gX3RoaXMkcHJvcHMuaWQsXG4gICAgICAgICAgaXNEaXNhYmxlZCA9IF90aGlzJHByb3BzLmlzRGlzYWJsZWQsXG4gICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wcywgX2V4Y2x1ZGVkKTtcblxuICAgICAgdmFyIGlkID0gdGhpcy5zdGF0ZS5pZDtcbiAgICAgIHZhciBoYXNMYWJlbCA9IGxhYmVsIHx8IGxhYmVsQXBwZW5kO1xuICAgICAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlGb3JtUm93Jywge1xuICAgICAgICAnZXVpRm9ybVJvdy0taGFzRW1wdHlMYWJlbFNwYWNlJzogaGFzRW1wdHlMYWJlbFNwYWNlLFxuICAgICAgICAnZXVpRm9ybVJvdy0tZnVsbFdpZHRoJzogZnVsbFdpZHRoLFxuICAgICAgICAnZXVpRm9ybVJvdy0taGFzTGFiZWwnOiBoYXNMYWJlbFxuICAgICAgfSwgZGlzcGxheVRvQ2xhc3NOYW1lTWFwW2Rpc3BsYXldLCAvLyBTYWZlIHVzZSBvZiAhIGFzIGRlZmF1bHQgcHJvcCBpcyAncm93J1xuICAgICAgY2xhc3NOYW1lKTtcbiAgICAgIHZhciBvcHRpb25hbEhlbHBUZXh0cztcblxuICAgICAgaWYgKGhlbHBUZXh0KSB7XG4gICAgICAgIHZhciBoZWxwVGV4dHMgPSBBcnJheS5pc0FycmF5KGhlbHBUZXh0KSA/IGhlbHBUZXh0IDogW2hlbHBUZXh0XTtcbiAgICAgICAgb3B0aW9uYWxIZWxwVGV4dHMgPSBoZWxwVGV4dHMubWFwKGZ1bmN0aW9uIChoZWxwVGV4dCwgaSkge1xuICAgICAgICAgIHZhciBrZXkgPSB0eXBlb2YgaGVscFRleHQgPT09ICdzdHJpbmcnID8gaGVscFRleHQgOiBpO1xuICAgICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUZvcm1IZWxwVGV4dCwge1xuICAgICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgICBpZDogXCJcIi5jb25jYXQoaWQsIFwiLWhlbHAtXCIpLmNvbmNhdChpKSxcbiAgICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlGb3JtUm93X190ZXh0XCJcbiAgICAgICAgICB9LCBoZWxwVGV4dCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB2YXIgb3B0aW9uYWxFcnJvcnM7XG5cbiAgICAgIGlmIChlcnJvciAmJiBpc0ludmFsaWQpIHtcbiAgICAgICAgdmFyIGVycm9yVGV4dHMgPSBBcnJheS5pc0FycmF5KGVycm9yKSA/IGVycm9yIDogW2Vycm9yXTtcbiAgICAgICAgb3B0aW9uYWxFcnJvcnMgPSBlcnJvclRleHRzLm1hcChmdW5jdGlvbiAoZXJyb3IsIGkpIHtcbiAgICAgICAgICB2YXIga2V5ID0gdHlwZW9mIGVycm9yID09PSAnc3RyaW5nJyA/IGVycm9yIDogaTtcbiAgICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlGb3JtRXJyb3JUZXh0LCB7XG4gICAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICAgIGlkOiBcIlwiLmNvbmNhdChpZCwgXCItZXJyb3ItXCIpLmNvbmNhdChpKSxcbiAgICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlGb3JtUm93X190ZXh0XCJcbiAgICAgICAgICB9LCBlcnJvcik7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB2YXIgb3B0aW9uYWxMYWJlbDtcbiAgICAgIHZhciBpc0xlZ2VuZCA9IGxhYmVsICYmIGxhYmVsVHlwZSA9PT0gJ2xlZ2VuZCcgPyB0cnVlIDogZmFsc2U7XG4gICAgICB2YXIgbGFiZWxJZCA9IFwiXCIuY29uY2F0KGlkLCBcIi1sYWJlbFwiKTtcblxuICAgICAgaWYgKGhhc0xhYmVsKSB7XG4gICAgICAgIHZhciBsYWJlbFByb3BzID0ge307XG5cbiAgICAgICAgaWYgKGlzTGVnZW5kKSB7XG4gICAgICAgICAgbGFiZWxQcm9wcyA9IHtcbiAgICAgICAgICAgIHR5cGU6IGxhYmVsVHlwZVxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGFiZWxQcm9wcyA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7XG4gICAgICAgICAgICBodG1sRm9yOiBoYXNDaGlsZExhYmVsID8gaWQgOiB1bmRlZmluZWRcbiAgICAgICAgICB9LCAhaXNEaXNhYmxlZCAmJiB7XG4gICAgICAgICAgICBpc0ZvY3VzZWQ6IHRoaXMuc3RhdGUuaXNGb2N1c2VkXG4gICAgICAgICAgfSksIHt9LCB7XG4gICAgICAgICAgICAvLyBJZiB0aGUgcm93IGlzIGRpc2FibGVkLCBkb24ndCBwYXNzIHRoZSBpc0ZvY3VzZWQgc3RhdGUuXG4gICAgICAgICAgICB0eXBlOiBsYWJlbFR5cGVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIG9wdGlvbmFsTGFiZWwgPSBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpRm9ybVJvd19fbGFiZWxXcmFwcGVyXCJcbiAgICAgICAgfSwgX19fRW1vdGlvbkpTWChFdWlGb3JtTGFiZWwsIF9leHRlbmRzKHtcbiAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpRm9ybVJvd19fbGFiZWxcIixcbiAgICAgICAgICBpc0ludmFsaWQ6IGlzSW52YWxpZCxcbiAgICAgICAgICBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLFxuICAgICAgICAgIFwiYXJpYS1pbnZhbGlkXCI6IGlzSW52YWxpZCxcbiAgICAgICAgICBpZDogbGFiZWxJZFxuICAgICAgICB9LCBsYWJlbFByb3BzKSwgbGFiZWwpLCBsYWJlbEFwcGVuZCAmJiAnICcsIGxhYmVsQXBwZW5kKTtcbiAgICAgIH1cblxuICAgICAgdmFyIG9wdGlvbmFsUHJvcHMgPSB7fTtcbiAgICAgIC8qKlxuICAgICAgICogU2FmZSB1c2Ugb2YgISBhcyBkZWZhdWx0IHByb3AgaXMgW11cbiAgICAgICAqL1xuXG4gICAgICB2YXIgZGVzY3JpYmluZ0lkcyA9IF90b0NvbnN1bWFibGVBcnJheShkZXNjcmliZWRCeUlkcyk7XG5cbiAgICAgIGlmIChvcHRpb25hbEhlbHBUZXh0cykge1xuICAgICAgICBvcHRpb25hbEhlbHBUZXh0cy5mb3JFYWNoKGZ1bmN0aW9uIChvcHRpb25hbEhlbHBUZXh0KSB7XG4gICAgICAgICAgcmV0dXJuIGRlc2NyaWJpbmdJZHMucHVzaChvcHRpb25hbEhlbHBUZXh0LnByb3BzLmlkKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25hbEVycm9ycykge1xuICAgICAgICBvcHRpb25hbEVycm9ycy5mb3JFYWNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBkZXNjcmliaW5nSWRzLnB1c2goZXJyb3IucHJvcHMuaWQpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRlc2NyaWJpbmdJZHMubGVuZ3RoID4gMCkge1xuICAgICAgICBvcHRpb25hbFByb3BzWydhcmlhLWRlc2NyaWJlZGJ5J10gPSBkZXNjcmliaW5nSWRzLmpvaW4oJyAnKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGNoaWxkID0gQ2hpbGRyZW4ub25seShjaGlsZHJlbik7XG4gICAgICB2YXIgZmllbGQgPSAvKiNfX1BVUkVfXyovY2xvbmVFbGVtZW50KGNoaWxkLCBfb2JqZWN0U3ByZWFkKHtcbiAgICAgICAgaWQ6IGlkLFxuICAgICAgICAvLyBBbGxvdyB0aGUgY2hpbGQncyBkaXNhYmxlZCBvciBpc0Rpc2FibGVkIHByb3AgdG8gc3VwZXJjZWRlIHRoZSBgaXNEaXNhYmxlZGBcbiAgICAgICAgZGlzYWJsZWQ6IChfcmVmMiA9IChfY2hpbGQkcHJvcHMkZGlzYWJsZWQgPSBjaGlsZC5wcm9wcy5kaXNhYmxlZCkgIT09IG51bGwgJiYgX2NoaWxkJHByb3BzJGRpc2FibGVkICE9PSB2b2lkIDAgPyBfY2hpbGQkcHJvcHMkZGlzYWJsZWQgOiBjaGlsZC5wcm9wcy5pc0Rpc2FibGVkKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiBpc0Rpc2FibGVkLFxuICAgICAgICBvbkZvY3VzOiB0aGlzLm9uRm9jdXMsXG4gICAgICAgIG9uQmx1cjogdGhpcy5vbkJsdXJcbiAgICAgIH0sIG9wdGlvbmFsUHJvcHMpKTtcbiAgICAgIHZhciBmaWVsZFdyYXBwZXJDbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpRm9ybVJvd19fZmllbGRXcmFwcGVyJywge1xuICAgICAgICBldWlGb3JtUm93X19maWVsZFdyYXBwZXJEaXNwbGF5T25seTpcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNhZmUgdXNlIG9mICEgYXMgZGVmYXVsdCBwcm9wIGlzICdyb3cnXG4gICAgICAgICAqL1xuICAgICAgICBkaXNwbGF5LnN0YXJ0c1dpdGgoJ2NlbnRlcicpXG4gICAgICB9KTtcbiAgICAgIHZhciBzaGFyZWRQcm9wcyA9IHtcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICBpZDogXCJcIi5jb25jYXQoaWQsIFwiLXJvd1wiKVxuICAgICAgfTtcblxuICAgICAgdmFyIGNvbnRlbnRzID0gX19fRW1vdGlvbkpTWChSZWFjdC5GcmFnbWVudCwgbnVsbCwgb3B0aW9uYWxMYWJlbCwgX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogZmllbGRXcmFwcGVyQ2xhc3Nlc1xuICAgICAgfSwgZmllbGQsIG9wdGlvbmFsRXJyb3JzLCBvcHRpb25hbEhlbHBUZXh0cykpO1xuXG4gICAgICByZXR1cm4gbGFiZWxUeXBlID09PSAnbGVnZW5kJyA/IF9fX0Vtb3Rpb25KU1goXCJmaWVsZHNldFwiLCBfZXh0ZW5kcyh7fSwgc2hhcmVkUHJvcHMsIHJlc3QpLCBjb250ZW50cykgOiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHt9LCBzaGFyZWRQcm9wcywgcmVzdCksIGNvbnRlbnRzKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gRXVpRm9ybVJvdztcbn0oQ29tcG9uZW50KTtcblxuX2RlZmluZVByb3BlcnR5KEV1aUZvcm1Sb3csIFwiZGVmYXVsdFByb3BzXCIsIHtcbiAgZGlzcGxheTogJ3JvdycsXG4gIGhhc0VtcHR5TGFiZWxTcGFjZTogZmFsc2UsXG4gIGZ1bGxXaWR0aDogZmFsc2UsXG4gIGRlc2NyaWJlZEJ5SWRzOiBbXSxcbiAgbGFiZWxUeXBlOiAnbGFiZWwnLFxuICBoYXNDaGlsZExhYmVsOiB0cnVlXG59KTtcblxuRXVpRm9ybVJvdy5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgICAqIERlZmF1bHRzIHRvIHJlbmRlcmluZyBhIGA8bGFiZWw+YCBidXQgaWYgcGFzc2VkIGAnbGVnZW5kJ2AgZm9yIGxhYmVsVHlwZSxcbiAgICAgKiB3aWxsIHJlbmRlciBib3RoIGEgYDxsZWdlbmQ+YCBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvbnRhaW5lciBhcyBhIGA8ZmllbGRzZXQ+YFxuICAgICAqL1xuICBsYWJlbFR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJsYWJlbFwiXSksIFByb3BUeXBlcy5vbmVPZihbXCJsZWdlbmRcIl0pXSksXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgKiBXaGVuIGByb3dDb21wcmVzc2VkYCwganVzdCB0aWdodGVucyB1cCB0aGUgc3BhY2luZztcbiAgICAgKiBTZXQgdG8gYGNvbHVtbkNvbXByZXNzZWRgIGlmIGNvbXByZXNzZWRcbiAgICAgKiBhbmQgaG9yaXpvbnRhbCBsYXlvdXQgaXMgbmVlZGVkLlxuICAgICAqIFNldCB0byBgY2VudGVyYCBvciBgY2VudGVyQ29tcHJlc3NlZGAgdG8gYWxpZ24gbm9uLWlucHV0XG4gICAgICogY29udGVudCBiZXR0ZXIgd2l0aCBpbmxpbmUgcm93cy5cbiAgICAgKiBTZXQgdG8gYGNvbHVtbkNvbXByZXNzZWRTd2l0Y2hgIGlmIHRoZSBmb3JtIGNvbnRyb2wgYmVpbmcgcGFzc2VkXG4gICAgICogYXMgdGhlIGNoaWxkIGlzIGEgc3dpdGNoLlxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIFdoZW4gYHJvd0NvbXByZXNzZWRgLCBqdXN0IHRpZ2h0ZW5zIHVwIHRoZSBzcGFjaW5nO1xuICAgICAqIFNldCB0byBgY29sdW1uQ29tcHJlc3NlZGAgaWYgY29tcHJlc3NlZFxuICAgICAqIGFuZCBob3Jpem9udGFsIGxheW91dCBpcyBuZWVkZWQuXG4gICAgICogU2V0IHRvIGBjZW50ZXJgIG9yIGBjZW50ZXJDb21wcmVzc2VkYCB0byBhbGlnbiBub24taW5wdXRcbiAgICAgKiBjb250ZW50IGJldHRlciB3aXRoIGlubGluZSByb3dzLlxuICAgICAqIFNldCB0byBgY29sdW1uQ29tcHJlc3NlZFN3aXRjaGAgaWYgdGhlIGZvcm0gY29udHJvbCBiZWluZyBwYXNzZWRcbiAgICAgKiBhcyB0aGUgY2hpbGQgaXMgYSBzd2l0Y2guXG4gICAgICovXG4gIGRpc3BsYXk6IFByb3BUeXBlcy5vbmVPZihbXCJyb3dcIiwgXCJyb3dDb21wcmVzc2VkXCIsIFwiY29sdW1uQ29tcHJlc3NlZFwiLCBcImNlbnRlclwiLCBcImNlbnRlckNvbXByZXNzZWRcIiwgXCJjb2x1bW5Db21wcmVzc2VkU3dpdGNoXCJdKSxcbiAgaGFzRW1wdHlMYWJlbFNwYWNlOiBQcm9wVHlwZXMuYm9vbCxcbiAgZnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBJRHMgb2YgYWRkaXRpb25hbCBlbGVtZW50cyB0aGF0IHNob3VsZCBiZSBwYXJ0IG9mIGNoaWxkcmVuJ3MgYGFyaWEtZGVzY3JpYmVkYnlgXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogSURzIG9mIGFkZGl0aW9uYWwgZWxlbWVudHMgdGhhdCBzaG91bGQgYmUgcGFydCBvZiBjaGlsZHJlbidzIGBhcmlhLWRlc2NyaWJlZGJ5YFxuICAgICAqL1xuICBkZXNjcmliZWRCeUlkczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkKSxcblxuICAvKipcbiAgICAgKiBFc2NhcGUgaGF0Y2ggdG8gbm90IHJlbmRlciBkdXBsaWNhdGUgbGFiZWxzIGlmIHRoZSBjaGlsZCBhbHNvIHJlbmRlcnMgYSBsYWJlbFxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIEVzY2FwZSBoYXRjaCB0byBub3QgcmVuZGVyIGR1cGxpY2F0ZSBsYWJlbHMgaWYgdGhlIGNoaWxkIGFsc28gcmVuZGVycyBhIGxhYmVsXG4gICAgICovXG4gIGhhc0NoaWxkTGFiZWw6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIFJlYWN0RWxlbWVudCB0byByZW5kZXIgYXMgdGhpcyBjb21wb25lbnQncyBjb250ZW50XG4gICAgICovXG5cbiAgLyoqXG4gICAgICogUmVhY3RFbGVtZW50IHRvIHJlbmRlciBhcyB0aGlzIGNvbXBvbmVudCdzIGNvbnRlbnRcbiAgICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWQsXG4gIGxhYmVsOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICAgKiBBZGRzIGFuIGV4dHJhIG5vZGUgdG8gdGhlIHJpZ2h0IG9mIHRoZSBmb3JtIGxhYmVsIHdpdGhvdXRcbiAgICAgKiBiZWluZyBjb250YWluZWQgaW5zaWRlIHRoZSBmb3JtIGxhYmVsLiBHb29kIGZvciB0aGluZ3NcbiAgICAgKiBsaWtlIGRvY3VtZW50YXRpb24gbGlua3MuXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogQWRkcyBhbiBleHRyYSBub2RlIHRvIHRoZSByaWdodCBvZiB0aGUgZm9ybSBsYWJlbCB3aXRob3V0XG4gICAgICogYmVpbmcgY29udGFpbmVkIGluc2lkZSB0aGUgZm9ybSBsYWJlbC4gR29vZCBmb3IgdGhpbmdzXG4gICAgICogbGlrZSBkb2N1bWVudGF0aW9uIGxpbmtzLlxuICAgICAqL1xuICBsYWJlbEFwcGVuZDogUHJvcFR5cGVzLmFueSxcbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGlzSW52YWxpZDogUHJvcFR5cGVzLmJvb2wsXG4gIGVycm9yOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkKS5pc1JlcXVpcmVkXSksXG5cbiAgLyoqXG4gICAgICogIEFkZHMgYSBzaW5nbGUgbm9kZS9zdHJpbmcgb3IgYW4gYXJyYXkgb2Ygbm9kZXMvc3RyaW5ncyBiZWxvdyB0aGUgaW5wdXRcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiAgQWRkcyBhIHNpbmdsZSBub2RlL3N0cmluZyBvciBhbiBhcnJheSBvZiBub2Rlcy9zdHJpbmdzIGJlbG93IHRoZSBpbnB1dFxuICAgICAqL1xuICBoZWxwVGV4dDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCkuaXNSZXF1aXJlZF0pLFxuXG4gIC8qKlxuICAgICAqICBQYXNzZWQgYWxvbmcgdG8gdGhlIGxhYmVsIGVsZW1lbnQ7IGFuZCB0byB0aGUgY2hpbGQgZmllbGQgZWxlbWVudCB3aGVuIGBkaXNhYmxlZGAgZG9lc24ndCBhbHJlYWR5IGV4aXN0IG9uIHRoZSBjaGlsZCBmaWVsZCBlbGVtZW50LlxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqICBQYXNzZWQgYWxvbmcgdG8gdGhlIGxhYmVsIGVsZW1lbnQ7IGFuZCB0byB0aGUgY2hpbGQgZmllbGQgZWxlbWVudCB3aGVuIGBkaXNhYmxlZGAgZG9lc24ndCBhbHJlYWR5IGV4aXN0IG9uIHRoZSBjaGlsZCBmaWVsZCBlbGVtZW50LlxuICAgICAqL1xuICBpc0Rpc2FibGVkOiBQcm9wVHlwZXMuYm9vbFxufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG52YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJvbkNsb3NlXCIsIFwidGl0bGVcIiwgXCJvbkhlaWdodENoYW5nZVwiLCBcInRyYW5zaXRpb25UeXBlXCIsIFwidHJhbnNpdGlvbkRpcmVjdGlvblwiLCBcIm9uVHJhbnNpdGlvbkNvbXBsZXRlXCIsIFwib25Vc2VLZXlib2FyZFRvTmF2aWdhdGVcIiwgXCJpdGVtc1wiLCBcImluaXRpYWxGb2N1c2VkSXRlbUluZGV4XCIsIFwic2hvd05leHRQYW5lbFwiLCBcInNob3dQcmV2aW91c1BhbmVsXCIsIFwic2l6ZVwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgY2xvbmVFbGVtZW50LCBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHRhYmJhYmxlIH0gZnJvbSAndGFiYmFibGUnO1xuaW1wb3J0IHsga2V5c09mIH0gZnJvbSAnLi4vY29tbW9uJztcbmltcG9ydCB7IEV1aUljb24gfSBmcm9tICcuLi9pY29uJztcbmltcG9ydCB7IEV1aVJlc2l6ZU9ic2VydmVyIH0gZnJvbSAnLi4vb2JzZXJ2ZXIvcmVzaXplX29ic2VydmVyJztcbmltcG9ydCB7IGNhc2NhZGluZ01lbnVLZXlzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpQ29udGV4dE1lbnVJdGVtIH0gZnJvbSAnLi9jb250ZXh0X21lbnVfaXRlbSc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIHRpdGxlU2l6ZVRvQ2xhc3NOYW1lTWFwID0ge1xuICBzOiAnZXVpQ29udGV4dE1lbnVQYW5lbFRpdGxlLS1zbWFsbCcsXG4gIG06IG51bGxcbn07XG5leHBvcnQgdmFyIFNJWkVTID0ga2V5c09mKHRpdGxlU2l6ZVRvQ2xhc3NOYW1lTWFwKTtcbnZhciB0cmFuc2l0aW9uRGlyZWN0aW9uQW5kVHlwZVRvQ2xhc3NOYW1lTWFwID0ge1xuICBuZXh0OiB7XG4gICAgaW46ICdldWlDb250ZXh0TWVudVBhbmVsLXR4SW5MZWZ0JyxcbiAgICBvdXQ6ICdldWlDb250ZXh0TWVudVBhbmVsLXR4T3V0TGVmdCdcbiAgfSxcbiAgcHJldmlvdXM6IHtcbiAgICBpbjogJ2V1aUNvbnRleHRNZW51UGFuZWwtdHhJblJpZ2h0JyxcbiAgICBvdXQ6ICdldWlDb250ZXh0TWVudVBhbmVsLXR4T3V0UmlnaHQnXG4gIH1cbn07XG5leHBvcnQgdmFyIEV1aUNvbnRleHRNZW51UGFuZWwgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEV1aUNvbnRleHRNZW51UGFuZWwsIF9Db21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoRXVpQ29udGV4dE1lbnVQYW5lbCk7XG5cbiAgZnVuY3Rpb24gRXVpQ29udGV4dE1lbnVQYW5lbChwcm9wcykge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlDb250ZXh0TWVudVBhbmVsKTtcblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgcHJvcHMpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIl9pc01vdW50ZWRcIiwgZmFsc2UpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImJhY2tCdXR0b25cIiwgbnVsbCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicGFuZWxcIiwgbnVsbCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaW5pdGlhbFBvcG92ZXJQYXJlbnRcIiwgbnVsbCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiZmluZE1lbnVJdGVtc1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMkaXRlbXM7XG5cbiAgICAgIGlmICghX3RoaXMucGFuZWwpIHJldHVybjtcbiAgICAgIGlmICghKChfdGhpcyRwcm9wcyRpdGVtcyA9IF90aGlzLnByb3BzLml0ZW1zKSAhPT0gbnVsbCAmJiBfdGhpcyRwcm9wcyRpdGVtcyAhPT0gdm9pZCAwICYmIF90aGlzJHByb3BzJGl0ZW1zLmxlbmd0aCkpIHJldHVybjsgLy8gV2Ugb25seSBuZWVkIG1lbnUgaXRlbXMvYXJyb3cga2V5IG5hdmlnYXRpb24gZm9yIHRoZSBgaXRlbXNgIEFQSVxuXG4gICAgICBpZiAoX3RoaXMuc3RhdGUubWVudUl0ZW1zLmxlbmd0aCkgcmV0dXJuOyAvLyBJZiB3ZSBhbHJlYWR5IGhhdmUgbWVudSBpdGVtcywgbm8gbmVlZCB0byBjb250aW51ZVxuXG4gICAgICB2YXIgdGFiYmFibGVJdGVtcyA9IHRhYmJhYmxlKF90aGlzLnBhbmVsKTtcblxuICAgICAgaWYgKHRhYmJhYmxlSXRlbXMubGVuZ3RoKSB7XG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBtZW51SXRlbXM6IHRhYmJhYmxlSXRlbXNcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiZm9jdXNNZW51SXRlbVwiLCBmdW5jdGlvbiAoZGlyZWN0aW9uKSB7XG4gICAgICB2YXIgX3RoaXMkc3RhdGUkbWVudUl0ZW1zO1xuXG4gICAgICB2YXIgaW5kZXhPZmZzZXQgPSBkaXJlY3Rpb24gPT09ICd1cCcgPyAtMSA6IDE7XG4gICAgICB2YXIgbmV4dEZvY3VzZWRJdGVtSW5kZXg7XG5cbiAgICAgIGlmIChfdGhpcy5zdGF0ZS5mb2N1c2VkSXRlbUluZGV4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gSWYgdGhpcyBpcyB0aGUgYmVnaW5uaW5nIG9mIHRoZSB1c2VyJ3Mga2V5Ym9hcmQgbmF2aWdhdGlvbiBvZiB0aGUgbWVudSwgdGhlbiB3ZSdsbCBmb2N1c1xuICAgICAgICAvLyBlaXRoZXIgdGhlIGZpcnN0IG9yIGxhc3QgaXRlbS5cbiAgICAgICAgbmV4dEZvY3VzZWRJdGVtSW5kZXggPSBkaXJlY3Rpb24gPT09ICd1cCcgPyBfdGhpcy5zdGF0ZS5tZW51SXRlbXMubGVuZ3RoIC0gMSA6IDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXh0Rm9jdXNlZEl0ZW1JbmRleCA9IF90aGlzLnN0YXRlLmZvY3VzZWRJdGVtSW5kZXggKyBpbmRleE9mZnNldDtcblxuICAgICAgICBpZiAobmV4dEZvY3VzZWRJdGVtSW5kZXggPCAwKSB7XG4gICAgICAgICAgbmV4dEZvY3VzZWRJdGVtSW5kZXggPSBfdGhpcy5zdGF0ZS5tZW51SXRlbXMubGVuZ3RoIC0gMTtcbiAgICAgICAgfSBlbHNlIGlmIChuZXh0Rm9jdXNlZEl0ZW1JbmRleCA9PT0gX3RoaXMuc3RhdGUubWVudUl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgIG5leHRGb2N1c2VkSXRlbUluZGV4ID0gMDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGZvY3VzZWRJdGVtSW5kZXg6IG5leHRGb2N1c2VkSXRlbUluZGV4XG4gICAgICB9KTtcblxuICAgICAgKF90aGlzJHN0YXRlJG1lbnVJdGVtcyA9IF90aGlzLnN0YXRlLm1lbnVJdGVtc1tuZXh0Rm9jdXNlZEl0ZW1JbmRleF0pID09PSBudWxsIHx8IF90aGlzJHN0YXRlJG1lbnVJdGVtcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkc3RhdGUkbWVudUl0ZW1zLmZvY3VzKCk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25LZXlEb3duXCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgLy8gSWYgdGhpcyBwYW5lbCBjb250YWlucyBpdGVtcyB5b3UgY2FuIHVzZSB0aGUgbGVmdCBhcnJvdyBrZXkgdG8gZ28gYmFjayBhdCBhbnkgdGltZS5cbiAgICAgIC8vIEJ1dCBpZiBpdCBkb2Vzbid0IGNvbnRhaW4gaXRlbXMsIHRoZW4geW91IGhhdmUgdG8gZm9jdXMgb24gdGhlIGJhY2sgYnV0dG9uIHNwZWNpZmljYWxseSxcbiAgICAgIC8vIHNpbmNlIHRoZXJlIGNvdWxkIGJlIGNvbnRlbnQgaW5zaWRlIHRoZSBwYW5lbCB3aGljaCByZXF1aXJlcyB1c2Ugb2YgdGhlIGxlZnQgYXJyb3cga2V5LFxuICAgICAgLy8gZS5nLiB0ZXh0IGlucHV0cy5cbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIGl0ZW1zID0gX3RoaXMkcHJvcHMuaXRlbXMsXG4gICAgICAgICAgb25DbG9zZSA9IF90aGlzJHByb3BzLm9uQ2xvc2UsXG4gICAgICAgICAgc2hvd1ByZXZpb3VzUGFuZWwgPSBfdGhpcyRwcm9wcy5zaG93UHJldmlvdXNQYW5lbDtcblxuICAgICAgaWYgKG9uQ2xvc2UgJiYgKGl0ZW1zICE9PSBudWxsICYmIGl0ZW1zICE9PSB2b2lkIDAgJiYgaXRlbXMubGVuZ3RoIHx8IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IF90aGlzLmJhY2tCdXR0b24gfHwgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gX3RoaXMucGFuZWwpKSB7XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09IGNhc2NhZGluZ01lbnVLZXlzLkFSUk9XX0xFRlQpIHtcbiAgICAgICAgICBpZiAoc2hvd1ByZXZpb3VzUGFuZWwpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIHNob3dQcmV2aW91c1BhbmVsKCk7XG5cbiAgICAgICAgICAgIGlmIChfdGhpcy5wcm9wcy5vblVzZUtleWJvYXJkVG9OYXZpZ2F0ZSkge1xuICAgICAgICAgICAgICBfdGhpcy5wcm9wcy5vblVzZUtleWJvYXJkVG9OYXZpZ2F0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaXRlbXMgIT09IG51bGwgJiYgaXRlbXMgIT09IHZvaWQgMCAmJiBpdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgICAgICBjYXNlIGNhc2NhZGluZ01lbnVLZXlzLlRBQjpcbiAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIC8vIE5PVEU6IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgaXMgc3RhbGUgaWYgbm90IHdyYXBwZWQgaW4gcmVxdWVzdEFuaW1hdGlvbkZyYW1lXG4gICAgICAgICAgICAgIHZhciBmb2N1c2VkSXRlbUluZGV4ID0gX3RoaXMuc3RhdGUubWVudUl0ZW1zLmluZGV4T2YoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCk7IC8vIFdlIG5lZWQgdG8gc3luYyBvdXIgaW50ZXJuYWwgc3RhdGUgd2l0aCB0aGUgdXNlciB0YWJiaW5nIHRocm91Z2ggaXRlbXNcblxuXG4gICAgICAgICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgICBmb2N1c2VkSXRlbUluZGV4OiBmb2N1c2VkSXRlbUluZGV4ID49IDAgJiYgZm9jdXNlZEl0ZW1JbmRleCA8IF90aGlzLnN0YXRlLm1lbnVJdGVtcy5sZW5ndGggPyBmb2N1c2VkSXRlbUluZGV4IDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgY2FzY2FkaW5nTWVudUtleXMuQVJST1dfVVA6XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICBfdGhpcy5mb2N1c01lbnVJdGVtKCd1cCcpO1xuXG4gICAgICAgICAgICBpZiAoX3RoaXMucHJvcHMub25Vc2VLZXlib2FyZFRvTmF2aWdhdGUpIHtcbiAgICAgICAgICAgICAgX3RoaXMucHJvcHMub25Vc2VLZXlib2FyZFRvTmF2aWdhdGUoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIGNhc2NhZGluZ01lbnVLZXlzLkFSUk9XX0RPV046XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICBfdGhpcy5mb2N1c01lbnVJdGVtKCdkb3duJyk7XG5cbiAgICAgICAgICAgIGlmIChfdGhpcy5wcm9wcy5vblVzZUtleWJvYXJkVG9OYXZpZ2F0ZSkge1xuICAgICAgICAgICAgICBfdGhpcy5wcm9wcy5vblVzZUtleWJvYXJkVG9OYXZpZ2F0ZSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgY2FzY2FkaW5nTWVudUtleXMuQVJST1dfUklHSFQ6XG4gICAgICAgICAgICBpZiAoX3RoaXMucHJvcHMuc2hvd05leHRQYW5lbCkge1xuICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICAgIF90aGlzLnByb3BzLnNob3dOZXh0UGFuZWwob25DbG9zZSAmJiBfdGhpcy5zdGF0ZS5mb2N1c2VkSXRlbUluZGV4ID8gX3RoaXMuc3RhdGUuZm9jdXNlZEl0ZW1JbmRleCAtIDEgLy8gQWNjb3VudCBmb3IgcGFuZWwgdGl0bGUgYmFjayBidXR0b25cbiAgICAgICAgICAgICAgOiBfdGhpcy5zdGF0ZS5mb2N1c2VkSXRlbUluZGV4KTtcblxuICAgICAgICAgICAgICBpZiAoX3RoaXMucHJvcHMub25Vc2VLZXlib2FyZFRvTmF2aWdhdGUpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5wcm9wcy5vblVzZUtleWJvYXJkVG9OYXZpZ2F0ZSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicmVjbGFpbVBvcG92ZXJGb2N1c1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHdhaXRpbmdGb3JJbml0aWFsUG9wb3ZlcjogZmFsc2VcbiAgICAgIH0pO1xuXG4gICAgICBfdGhpcy50YWtlSW5pdGlhbEZvY3VzKCk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25UcmFuc2l0aW9uQ29tcGxldGVcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKF90aGlzLnByb3BzLm9uVHJhbnNpdGlvbkNvbXBsZXRlKSB7XG4gICAgICAgIF90aGlzLnByb3BzLm9uVHJhbnNpdGlvbkNvbXBsZXRlKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicGFuZWxSZWZcIiwgZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIF90aGlzLnBhbmVsID0gbm9kZTtcblxuICAgICAgX3RoaXMudXBkYXRlSGVpZ2h0KCk7XG5cbiAgICAgIF90aGlzLmdldEluaXRpYWxQb3BvdmVyUGFyZW50KCk7XG5cbiAgICAgIF90aGlzLmZpbmRNZW51SXRlbXMoKTtcbiAgICB9KTtcblxuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgcHJldlByb3BzOiB7XG4gICAgICAgIGl0ZW1zOiBfdGhpcy5wcm9wcy5pdGVtc1xuICAgICAgfSxcbiAgICAgIG1lbnVJdGVtczogW10sXG4gICAgICBmb2N1c2VkSXRlbUluZGV4OiBwcm9wcy5vbkNsb3NlICYmIHByb3BzLmluaXRpYWxGb2N1c2VkSXRlbUluZGV4ICE9IG51bGwgPyBwcm9wcy5pbml0aWFsRm9jdXNlZEl0ZW1JbmRleCArIDEgLy8gQWNjb3VudCBmb3IgcGFuZWwgdGl0bGUgYmFjayBidXR0b25cbiAgICAgIDogcHJvcHMuaW5pdGlhbEZvY3VzZWRJdGVtSW5kZXgsXG4gICAgICBjdXJyZW50SGVpZ2h0OiB1bmRlZmluZWQsXG4gICAgICB3YWl0aW5nRm9ySW5pdGlhbFBvcG92ZXI6IGZhbHNlLFxuICAgICAgdG9va0luaXRpYWxGb2N1czogZmFsc2VcbiAgICB9O1xuICAgIHJldHVybiBfdGhpcztcbiAgfSAvLyBGaW5kIGFsbCB0YWJiYWJsZSBtZW51IGl0ZW1zIG9uIGJvdGggcGFuZWwgaW5pdCBhbmRcbiAgLy8gd2hlbmV2ZXIgYG1lbnVJdGVtc2AgcmVzZXRzIHdoZW4gYHByb3BzLml0ZW1zYCBjaGFuZ2VzXG5cblxuICBfY3JlYXRlQ2xhc3MoRXVpQ29udGV4dE1lbnVQYW5lbCwgW3tcbiAgICBrZXk6IFwidGFrZUluaXRpYWxGb2N1c1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB0YWtlSW5pdGlhbEZvY3VzKCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIC8vIEdpdmUgcG9zaXRpb25pbmcgdGltZSB0byByZW5kZXIgYmVmb3JlIGZvY3VzIGlzIGFwcGxpZWQuIE90aGVyd2lzZSBwYWdlIGp1bXBzLlxuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFfdGhpczIuX2lzTW91bnRlZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyBEb24ndCB0YWtlIGZvY3VzIHlldCBpZiBFdWlDb250ZXh0TWVudSBpcyBpbiBhIHBvcG92ZXJcbiAgICAgICAgLy8gYW5kIHRoZSBwb3BvdmVyIGlzIGluaXRpYWxseSBvcGVuaW5nL3RyYW5zaXRpb25pbmcgaW5cblxuXG4gICAgICAgIGlmIChfdGhpczIuaW5pdGlhbFBvcG92ZXJQYXJlbnQgJiYgX3RoaXMyLnN0YXRlLndhaXRpbmdGb3JJbml0aWFsUG9wb3Zlcikge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyBTZXR0aW5nIGZvY3VzIHdoaWxlIHRyYW5zaXRpb25pbmcgY2F1c2VzIHRoZSBhbmltYXRpb24gdG8gZ2xpdGNoLCBzbyB3ZSBoYXZlIHRvIHdhaXRcbiAgICAgICAgLy8gdW50aWwgaXQncyBmaW5pc2hlZCBiZWZvcmUgd2UgZm9jdXMgYW55dGhpbmcuXG5cblxuICAgICAgICBpZiAoX3RoaXMyLnByb3BzLnRyYW5zaXRpb25UeXBlKSB7XG4gICAgICAgICAgdmFyIF90aGlzMiRwYW5lbDtcblxuICAgICAgICAgIC8vIElmIHRoZSBwYW5lbCBpcyB0cmFuc2l0aW9uaW5nLCBzZXQgZm9jdXMgdG8gdGhlIHBhbmVsIHNvIHRoYXQgdXNlcnMgdXNpbmdcbiAgICAgICAgICAvLyBhcnJvdyBrZXlzIHRoYXQgYXJlIGZhc3QgY2xpY2tlcnMgZG9uJ3QgYWNjaWRlbnRhbGx5IGdldCBzdHJhbmRlZCBmb2N1c1xuICAgICAgICAgIC8vIG9yIHRyaWdnZXIga2V5c3Ryb2tlcyB3aGVuIGl0IHNob3VsZG4ndFxuICAgICAgICAgIChfdGhpczIkcGFuZWwgPSBfdGhpczIucGFuZWwpID09PSBudWxsIHx8IF90aGlzMiRwYW5lbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMyJHBhbmVsLmZvY3VzKHtcbiAgICAgICAgICAgIHByZXZlbnRTY3JvbGw6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gLy8gSW5pdGlhbCBmb2N1cyBoYXMgYWxyZWFkeSBiZWVuIGhhbmRsZWQsIG5vIG5lZWQgdG8gY29udGludWUgYW5kIHBvdGVudGlhbGx5IGhpamFjay9mb2N1cyBmaWdodFxuXG5cbiAgICAgICAgaWYgKF90aGlzMi5zdGF0ZS50b29rSW5pdGlhbEZvY3VzKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IC8vIElmIGFuIGl0ZW0gc2hvdWxkIGJlIGZvY3VzZWQsIGZvY3VzIGl0IChpZiBpdCBleGlzdHMpXG5cblxuICAgICAgICBpZiAoX3RoaXMyLnN0YXRlLmZvY3VzZWRJdGVtSW5kZXggIT0gbnVsbCAmJiBfdGhpczIuc3RhdGUubWVudUl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgIHZhciBmb2N1c2VkSXRlbSA9IF90aGlzMi5zdGF0ZS5tZW51SXRlbXNbX3RoaXMyLnN0YXRlLmZvY3VzZWRJdGVtSW5kZXhdO1xuXG4gICAgICAgICAgaWYgKGZvY3VzZWRJdGVtKSB7XG4gICAgICAgICAgICBmb2N1c2VkSXRlbS5mb2N1cygpO1xuICAgICAgICAgICAgcmV0dXJuIF90aGlzMi5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgIHRvb2tJbml0aWFsRm9jdXM6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBPdGhlcndpc2UsIGlmIHRoZSBiYWNrIGJ1dHRvbiBwYW5lbCB0aXRsZSBpcyBwcmVzZW50LCBmb2N1cyBpdFxuXG5cbiAgICAgICAgaWYgKF90aGlzMi5iYWNrQnV0dG9uKSB7XG4gICAgICAgICAgLy8gRm9jdXMgdGhlIGJhY2sgYnV0dG9uIGZvciBib3RoIGBpdGVtc2AgYW5kIGBjaGlsZHJlbmAgQVBJc1xuICAgICAgICAgIF90aGlzMi5iYWNrQnV0dG9uLmZvY3VzKCk7IC8vIElmIGBpdGVtc2AsIGVuc3VyZSBvdXIgZm9jdXNlZCBpdGVtIGluZGV4IGlzIGNvcnJlY3RcblxuXG4gICAgICAgICAgaWYgKF90aGlzMi5zdGF0ZS5tZW51SXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBfdGhpczIuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICBmb2N1c2VkSXRlbUluZGV4OiAwXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gX3RoaXMyLnNldFN0YXRlKHtcbiAgICAgICAgICAgIHRvb2tJbml0aWFsRm9jdXM6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSAvLyBGb2N1cyBvbiB0aGUgcGFuZWwgYXMgYSBsYXN0IHJlc29ydC5cblxuXG4gICAgICAgIGlmIChfdGhpczIucGFuZWwgJiYgIV90aGlzMi5wYW5lbC5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KSkge1xuICAgICAgICAgIF90aGlzMi5wYW5lbC5mb2N1cygpO1xuXG4gICAgICAgICAgX3RoaXMyLnNldFN0YXRlKHtcbiAgICAgICAgICAgIHRvb2tJbml0aWFsRm9jdXM6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudERpZFVwZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUoXywgcHJldlN0YXRlKSB7XG4gICAgICBpZiAocHJldlN0YXRlLm1lbnVJdGVtcyAhPT0gdGhpcy5zdGF0ZS5tZW51SXRlbXMpIHtcbiAgICAgICAgdGhpcy5maW5kTWVudUl0ZW1zKCk7XG4gICAgICB9IC8vIEZvY3VzIGlzbid0IGFsd2F5cyByZWFkeSB0byBiZSB0YWtlbiBvbiBtb3VudCwgc28gd2UgbmVlZCB0byBjYWxsIGl0XG4gICAgICAvLyBvbiB1cGRhdGUgYXMgd2VsbCBqdXN0IGluIGNhc2VcblxuXG4gICAgICB0aGlzLnRha2VJbml0aWFsRm9jdXMoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICAvLyBJZiBFdWlDb250ZXh0TWVudSBpcyB1c2VkIHdpdGhpbiBhbiBFdWlQb3BvdmVyLCB3ZSBuZWVkIHRvIHdhaXQgZm9yIEV1aVBvcG92ZXIgdG86XG4gICAgICAvLyAxLiBDb3JyZWN0bHkgc2V0IGl0cyBgcmV0dXJuRm9jdXNgIHRvIHRoZSB0b2dnbGluZyBidXR0b24sXG4gICAgICAvLyAgICBzbyBmb2N1cyBpcyBjb3JyZWN0bHkgcmVzdG9yZWQgdG8gdGhlIHBvcG92ZXIgdG9nZ2xlIG9uIGNsb3NlXG4gICAgICAvLyAyLiBGaW5pc2ggaXRzIHJlYWN0LWZvY3VzLW9uIGBhdXRvRm9jdXNgIGJlaGF2aW9yIGFmdGVyIHRyYW5zaXRpb25pbmcgaW4sXG4gICAgICAvLyAgICBzbyB0aGUgcGFuZWwgY2FuIGhhbmRsZSBpdHMgb3duIGZvY3VzIHdpdGhvdXQgZm9jdXMgZmlnaHRpbmdcbiAgICAgIGlmICh0aGlzLmluaXRpYWxQb3BvdmVyUGFyZW50KSB7XG4gICAgICAgIHRoaXMuaW5pdGlhbFBvcG92ZXJQYXJlbnQuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCB0aGlzLnJlY2xhaW1Qb3BvdmVyRm9jdXMsIHtcbiAgICAgICAgICBvbmNlOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy50YWtlSW5pdGlhbEZvY3VzKCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2lzTW91bnRlZCA9IHRydWU7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgdmFyIF90aGlzJGluaXRpYWxQb3BvdmVyUDtcblxuICAgICAgKF90aGlzJGluaXRpYWxQb3BvdmVyUCA9IHRoaXMuaW5pdGlhbFBvcG92ZXJQYXJlbnQpID09PSBudWxsIHx8IF90aGlzJGluaXRpYWxQb3BvdmVyUCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkaW5pdGlhbFBvcG92ZXJQLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5yZWNsYWltUG9wb3ZlckZvY3VzKTtcbiAgICAgIHRoaXMuX2lzTW91bnRlZCA9IGZhbHNlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ1cGRhdGVIZWlnaHRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdXBkYXRlSGVpZ2h0KCkge1xuICAgICAgdmFyIGN1cnJlbnRIZWlnaHQgPSB0aGlzLnBhbmVsID8gdGhpcy5wYW5lbC5jbGllbnRIZWlnaHQgOiAwO1xuXG4gICAgICBpZiAodGhpcy5zdGF0ZS5oZWlnaHQgIT09IGN1cnJlbnRIZWlnaHQpIHtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMub25IZWlnaHRDaGFuZ2UpIHtcbiAgICAgICAgICB0aGlzLnByb3BzLm9uSGVpZ2h0Q2hhbmdlKGN1cnJlbnRIZWlnaHQpO1xuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgaGVpZ2h0OiBjdXJyZW50SGVpZ2h0XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0SW5pdGlhbFBvcG92ZXJQYXJlbnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0SW5pdGlhbFBvcG92ZXJQYXJlbnQoKSB7XG4gICAgICB2YXIgX3BhcmVudCRwYXJlbnROb2RlO1xuXG4gICAgICAvLyBJZiBgdHJhbnNpdGlvblR5cGVgIGV4aXN0cywgdGhhdCBtZWFucyB3ZSdyZSBuYXZpZ2F0aW5nIGJldHdlZW4gcGFuZWxzXG4gICAgICAvLyBhbmQgdGhlIGluaXRpYWwgcG9wb3ZlciBoYXMgYWxyZWFkeSBsb2FkZWQsIHNvIHdlIHNob3VsZG4ndCBuZWVkIHRoaXMgbG9naWNcbiAgICAgIGlmICh0aGlzLnByb3BzLnRyYW5zaXRpb25UeXBlKSByZXR1cm47XG4gICAgICBpZiAoIXRoaXMucGFuZWwpIHJldHVybjtcbiAgICAgIHZhciBwYXJlbnQgPSB0aGlzLnBhbmVsLnBhcmVudE5vZGU7XG4gICAgICBpZiAoIXBhcmVudCkgcmV0dXJuO1xuICAgICAgdmFyIGhhc0V1aUNvbnRleHRNZW51UGFyZW50ID0gcGFyZW50LmNsYXNzTGlzdC5jb250YWlucygnZXVpQ29udGV4dE1lbnUnKTsgLy8gSXQncyBwb3NzaWJsZSB0byB1c2UgYW4gRXVpQ29udGV4dE1lbnVQYW5lbCBkaXJlY3RseSBpbiBhIHBvcG92ZXIgd2l0aG91dFxuICAgICAgLy8gYW4gRXVpQ29udGV4dE1lbnUsIHNvIHdlIG5lZWQgdG8gYWNjb3VudCBmb3IgdGhhdCB3aGVuIHNlYXJjaGluZyBwYXJlbnQgbm9kZXNcblxuICAgICAgdmFyIHBvcG92ZXJQYXJlbnQgPSBoYXNFdWlDb250ZXh0TWVudVBhcmVudCA/IHBhcmVudCA9PT0gbnVsbCB8fCBwYXJlbnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfcGFyZW50JHBhcmVudE5vZGUgPSBwYXJlbnQucGFyZW50Tm9kZSkgPT09IG51bGwgfHwgX3BhcmVudCRwYXJlbnROb2RlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfcGFyZW50JHBhcmVudE5vZGUucGFyZW50Tm9kZSA6IHBhcmVudCA9PT0gbnVsbCB8fCBwYXJlbnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhcmVudC5wYXJlbnROb2RlO1xuICAgICAgaWYgKCFwb3BvdmVyUGFyZW50KSByZXR1cm47XG4gICAgICB2YXIgaGFzUG9wb3ZlclBhcmVudCA9ICEhcG9wb3ZlclBhcmVudC5kYXRhc2V0LnBvcG92ZXJQYW5lbDtcbiAgICAgIGlmICghaGFzUG9wb3ZlclBhcmVudCkgcmV0dXJuO1xuICAgICAgdGhpcy5pbml0aWFsUG9wb3ZlclBhcmVudCA9IHBvcG92ZXJQYXJlbnQ7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgd2FpdGluZ0ZvckluaXRpYWxQb3BvdmVyOiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzMi5jaGlsZHJlbixcbiAgICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wczIuY2xhc3NOYW1lLFxuICAgICAgICAgIG9uQ2xvc2UgPSBfdGhpcyRwcm9wczIub25DbG9zZSxcbiAgICAgICAgICB0aXRsZSA9IF90aGlzJHByb3BzMi50aXRsZSxcbiAgICAgICAgICBvbkhlaWdodENoYW5nZSA9IF90aGlzJHByb3BzMi5vbkhlaWdodENoYW5nZSxcbiAgICAgICAgICB0cmFuc2l0aW9uVHlwZSA9IF90aGlzJHByb3BzMi50cmFuc2l0aW9uVHlwZSxcbiAgICAgICAgICB0cmFuc2l0aW9uRGlyZWN0aW9uID0gX3RoaXMkcHJvcHMyLnRyYW5zaXRpb25EaXJlY3Rpb24sXG4gICAgICAgICAgb25UcmFuc2l0aW9uQ29tcGxldGUgPSBfdGhpcyRwcm9wczIub25UcmFuc2l0aW9uQ29tcGxldGUsXG4gICAgICAgICAgb25Vc2VLZXlib2FyZFRvTmF2aWdhdGUgPSBfdGhpcyRwcm9wczIub25Vc2VLZXlib2FyZFRvTmF2aWdhdGUsXG4gICAgICAgICAgaXRlbXMgPSBfdGhpcyRwcm9wczIuaXRlbXMsXG4gICAgICAgICAgaW5pdGlhbEZvY3VzZWRJdGVtSW5kZXggPSBfdGhpcyRwcm9wczIuaW5pdGlhbEZvY3VzZWRJdGVtSW5kZXgsXG4gICAgICAgICAgc2hvd05leHRQYW5lbCA9IF90aGlzJHByb3BzMi5zaG93TmV4dFBhbmVsLFxuICAgICAgICAgIHNob3dQcmV2aW91c1BhbmVsID0gX3RoaXMkcHJvcHMyLnNob3dQcmV2aW91c1BhbmVsLFxuICAgICAgICAgIHNpemUgPSBfdGhpcyRwcm9wczIuc2l6ZSxcbiAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzMiwgX2V4Y2x1ZGVkKTtcblxuICAgICAgdmFyIHBhbmVsVGl0bGU7XG5cbiAgICAgIGlmICh0aXRsZSkge1xuICAgICAgICB2YXIgdGl0bGVDbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpQ29udGV4dE1lbnVQYW5lbFRpdGxlJywgc2l6ZSAmJiB0aXRsZVNpemVUb0NsYXNzTmFtZU1hcFtzaXplXSk7XG5cbiAgICAgICAgaWYgKEJvb2xlYW4ob25DbG9zZSkpIHtcbiAgICAgICAgICBwYW5lbFRpdGxlID0gX19fRW1vdGlvbkpTWChcImJ1dHRvblwiLCB7XG4gICAgICAgICAgICBjbGFzc05hbWU6IHRpdGxlQ2xhc3NlcyxcbiAgICAgICAgICAgIHR5cGU6IFwiYnV0dG9uXCIsXG4gICAgICAgICAgICBvbkNsaWNrOiBvbkNsb3NlLFxuICAgICAgICAgICAgcmVmOiBmdW5jdGlvbiByZWYobm9kZSkge1xuICAgICAgICAgICAgICBfdGhpczMuYmFja0J1dHRvbiA9IG5vZGU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcImNvbnRleHRNZW51UGFuZWxUaXRsZUJ1dHRvblwiXG4gICAgICAgICAgfSwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiBcImV1aUNvbnRleHRNZW51X19pdGVtTGF5b3V0XCJcbiAgICAgICAgICB9LCBfX19FbW90aW9uSlNYKEV1aUljb24sIHtcbiAgICAgICAgICAgIHR5cGU6IFwiYXJyb3dMZWZ0XCIsXG4gICAgICAgICAgICBzaXplOiBcIm1cIixcbiAgICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlDb250ZXh0TWVudV9faWNvblwiXG4gICAgICAgICAgfSksIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlDb250ZXh0TWVudV9fdGV4dFwiXG4gICAgICAgICAgfSwgdGl0bGUpKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGFuZWxUaXRsZSA9IF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiB0aXRsZUNsYXNzZXNcbiAgICAgICAgICB9LCBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpQ29udGV4dE1lbnVfX2l0ZW1MYXlvdXRcIlxuICAgICAgICAgIH0sIHRpdGxlKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlDb250ZXh0TWVudVBhbmVsJywgY2xhc3NOYW1lLCB0cmFuc2l0aW9uRGlyZWN0aW9uICYmIHRyYW5zaXRpb25UeXBlICYmIHRyYW5zaXRpb25EaXJlY3Rpb25BbmRUeXBlVG9DbGFzc05hbWVNYXBbdHJhbnNpdGlvbkRpcmVjdGlvbl0gPyB0cmFuc2l0aW9uRGlyZWN0aW9uQW5kVHlwZVRvQ2xhc3NOYW1lTWFwW3RyYW5zaXRpb25EaXJlY3Rpb25dW3RyYW5zaXRpb25UeXBlXSA6IHVuZGVmaW5lZCk7XG4gICAgICB2YXIgY29udGVudCA9IGl0ZW1zICYmIGl0ZW1zLmxlbmd0aCA/IGl0ZW1zLm1hcChmdW5jdGlvbiAoTWVudUl0ZW0pIHtcbiAgICAgICAgdmFyIGNsb25lUHJvcHMgPSB7fTtcblxuICAgICAgICBpZiAoc2l6ZSkge1xuICAgICAgICAgIGNsb25lUHJvcHMuc2l6ZSA9IHNpemU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gTWVudUl0ZW0udHlwZSA9PT0gRXVpQ29udGV4dE1lbnVJdGVtID8gLyojX19QVVJFX18qL2Nsb25lRWxlbWVudChNZW51SXRlbSwgY2xvbmVQcm9wcykgOiBNZW51SXRlbTtcbiAgICAgIH0pIDogY2hpbGRyZW47XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHJlZjogdGhpcy5wYW5lbFJlZixcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICBvbktleURvd246IHRoaXMub25LZXlEb3duLFxuICAgICAgICB0YWJJbmRleDogLTEsXG4gICAgICAgIG9uQW5pbWF0aW9uRW5kOiB0aGlzLm9uVHJhbnNpdGlvbkNvbXBsZXRlXG4gICAgICB9LCByZXN0KSwgcGFuZWxUaXRsZSwgX19fRW1vdGlvbkpTWChFdWlSZXNpemVPYnNlcnZlciwge1xuICAgICAgICBvblJlc2l6ZTogZnVuY3Rpb24gb25SZXNpemUoKSB7XG4gICAgICAgICAgcmV0dXJuIF90aGlzMy51cGRhdGVIZWlnaHQoKTtcbiAgICAgICAgfVxuICAgICAgfSwgZnVuY3Rpb24gKHJlc2l6ZVJlZikge1xuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICAgICAgcmVmOiByZXNpemVSZWZcbiAgICAgICAgfSwgY29udGVudCk7XG4gICAgICB9KSk7XG4gICAgfVxuICB9XSwgW3tcbiAgICBrZXk6IFwiZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhuZXh0UHJvcHMsIHByZXZTdGF0ZSkge1xuICAgICAgdmFyIG5lZWRzVXBkYXRlID0gZmFsc2U7XG4gICAgICB2YXIgbmV4dFN0YXRlID0ge307IC8vIENsZWFyIHJlZnMgdG8gbWVudUl0ZW1zIGlmIHdlJ3JlIGdldHRpbmcgbmV3IG9uZXMuXG5cbiAgICAgIGlmIChuZXh0UHJvcHMuaXRlbXMgIT09IHByZXZTdGF0ZS5wcmV2UHJvcHMuaXRlbXMpIHtcbiAgICAgICAgbmVlZHNVcGRhdGUgPSB0cnVlO1xuICAgICAgICBuZXh0U3RhdGUubWVudUl0ZW1zID0gW107XG4gICAgICAgIG5leHRTdGF0ZS5wcmV2UHJvcHMgPSB7XG4gICAgICAgICAgaXRlbXM6IG5leHRQcm9wcy5pdGVtc1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBpZiAobmVlZHNVcGRhdGUpIHtcbiAgICAgICAgcmV0dXJuIG5leHRTdGF0ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEV1aUNvbnRleHRNZW51UGFuZWw7XG59KENvbXBvbmVudCk7XG5cbl9kZWZpbmVQcm9wZXJ0eShFdWlDb250ZXh0TWVudVBhbmVsLCBcImRlZmF1bHRQcm9wc1wiLCB7XG4gIGl0ZW1zOiBbXVxufSk7XG5cbkV1aUNvbnRleHRNZW51UGFuZWwucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGluaXRpYWxGb2N1c2VkSXRlbUluZGV4OiBQcm9wVHlwZXMubnVtYmVyLFxuICBpdGVtczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZCksXG4gIG9uQ2xvc2U6IFByb3BUeXBlcy5mdW5jLFxuICBvbkhlaWdodENoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uVHJhbnNpdGlvbkNvbXBsZXRlOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25Vc2VLZXlib2FyZFRvTmF2aWdhdGU6IFByb3BUeXBlcy5mdW5jLFxuICBzaG93TmV4dFBhbmVsOiBQcm9wVHlwZXMuZnVuYyxcbiAgc2hvd1ByZXZpb3VzUGFuZWw6IFByb3BUeXBlcy5mdW5jLFxuICB0aXRsZTogUHJvcFR5cGVzLm5vZGUsXG4gIHRyYW5zaXRpb25EaXJlY3Rpb246IFByb3BUeXBlcy5vbmVPZihbXCJuZXh0XCIsIFwicHJldmlvdXNcIl0pLFxuICB0cmFuc2l0aW9uVHlwZTogUHJvcFR5cGVzLm9uZU9mKFtcImluXCIsIFwib3V0XCJdKSxcblxuICAvKipcbiAgICAgKiBBbHRlcnMgdGhlIHNpemUgb2YgdGhlIGl0ZW1zIGFuZCB0aGUgdGl0bGVcbiAgICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzLmFueVxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiaGFzUGFuZWxcIiwgXCJpY29uXCIsIFwiYnV0dG9uUmVmXCIsIFwiZGlzYWJsZWRcIiwgXCJsYXlvdXRBbGlnblwiLCBcInRvb2xUaXBUaXRsZVwiLCBcInRvb2xUaXBDb250ZW50XCIsIFwidG9vbFRpcFBvc2l0aW9uXCIsIFwiaHJlZlwiLCBcInRhcmdldFwiLCBcInJlbFwiLCBcInNpemVcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgY2xvbmVFbGVtZW50LCBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGtleXNPZiB9IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vaWNvbic7XG5pbXBvcnQgeyBFdWlUb29sVGlwIH0gZnJvbSAnLi4vdG9vbF90aXAnO1xuaW1wb3J0IHsgZ2V0U2VjdXJlUmVsRm9yVGFyZ2V0IH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgdmFsaWRhdGVIcmVmIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2VjdXJpdHkvaHJlZl92YWxpZGF0b3InO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBzaXplVG9DbGFzc05hbWVNYXAgPSB7XG4gIHM6ICdldWlDb250ZXh0TWVudUl0ZW0tLXNtYWxsJyxcbiAgbTogbnVsbFxufTtcbmV4cG9ydCB2YXIgU0laRVMgPSBrZXlzT2Yoc2l6ZVRvQ2xhc3NOYW1lTWFwKTtcbnZhciBsYXlvdXRBbGlnblRvQ2xhc3NOYW1lcyA9IHtcbiAgY2VudGVyOiBudWxsLFxuICB0b3A6ICdldWlDb250ZXh0TWVudV9faXRlbUxheW91dC0tdG9wJyxcbiAgYm90dG9tOiAnZXVpQ29udGV4dE1lbnVfX2l0ZW1MYXlvdXQtLWJvdHRvbSdcbn07XG5leHBvcnQgdmFyIExBWU9VVF9BTElHTiA9IGtleXNPZihsYXlvdXRBbGlnblRvQ2xhc3NOYW1lcyk7XG5leHBvcnQgdmFyIEV1aUNvbnRleHRNZW51SXRlbSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoRXVpQ29udGV4dE1lbnVJdGVtLCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aUNvbnRleHRNZW51SXRlbSk7XG5cbiAgZnVuY3Rpb24gRXVpQ29udGV4dE1lbnVJdGVtKCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlDb250ZXh0TWVudUl0ZW0pO1xuXG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEV1aUNvbnRleHRNZW51SXRlbSwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wcy5jaGlsZHJlbixcbiAgICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wcy5jbGFzc05hbWUsXG4gICAgICAgICAgaGFzUGFuZWwgPSBfdGhpcyRwcm9wcy5oYXNQYW5lbCxcbiAgICAgICAgICBpY29uID0gX3RoaXMkcHJvcHMuaWNvbixcbiAgICAgICAgICBidXR0b25SZWYgPSBfdGhpcyRwcm9wcy5idXR0b25SZWYsXG4gICAgICAgICAgX2Rpc2FibGVkID0gX3RoaXMkcHJvcHMuZGlzYWJsZWQsXG4gICAgICAgICAgX3RoaXMkcHJvcHMkbGF5b3V0QWxpID0gX3RoaXMkcHJvcHMubGF5b3V0QWxpZ24sXG4gICAgICAgICAgbGF5b3V0QWxpZ24gPSBfdGhpcyRwcm9wcyRsYXlvdXRBbGkgPT09IHZvaWQgMCA/ICdjZW50ZXInIDogX3RoaXMkcHJvcHMkbGF5b3V0QWxpLFxuICAgICAgICAgIHRvb2xUaXBUaXRsZSA9IF90aGlzJHByb3BzLnRvb2xUaXBUaXRsZSxcbiAgICAgICAgICB0b29sVGlwQ29udGVudCA9IF90aGlzJHByb3BzLnRvb2xUaXBDb250ZW50LFxuICAgICAgICAgIF90aGlzJHByb3BzJHRvb2xUaXBQbyA9IF90aGlzJHByb3BzLnRvb2xUaXBQb3NpdGlvbixcbiAgICAgICAgICB0b29sVGlwUG9zaXRpb24gPSBfdGhpcyRwcm9wcyR0b29sVGlwUG8gPT09IHZvaWQgMCA/ICdyaWdodCcgOiBfdGhpcyRwcm9wcyR0b29sVGlwUG8sXG4gICAgICAgICAgaHJlZiA9IF90aGlzJHByb3BzLmhyZWYsXG4gICAgICAgICAgdGFyZ2V0ID0gX3RoaXMkcHJvcHMudGFyZ2V0LFxuICAgICAgICAgIHJlbCA9IF90aGlzJHByb3BzLnJlbCxcbiAgICAgICAgICBzaXplID0gX3RoaXMkcHJvcHMuc2l6ZSxcbiAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzLCBfZXhjbHVkZWQpO1xuXG4gICAgICB2YXIgaWNvbkluc3RhbmNlO1xuICAgICAgdmFyIGlzSHJlZlZhbGlkID0gIWhyZWYgfHwgdmFsaWRhdGVIcmVmKGhyZWYpO1xuICAgICAgdmFyIGRpc2FibGVkID0gX2Rpc2FibGVkIHx8ICFpc0hyZWZWYWxpZDtcblxuICAgICAgaWYgKGljb24pIHtcbiAgICAgICAgc3dpdGNoIChfdHlwZW9mKGljb24pKSB7XG4gICAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICAgIGljb25JbnN0YW5jZSA9IF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgICAgICAgICAgICB0eXBlOiBpY29uLFxuICAgICAgICAgICAgICBzaXplOiBcIm1cIixcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcImV1aUNvbnRleHRNZW51X19pY29uXCIsXG4gICAgICAgICAgICAgIGNvbG9yOiBcImluaGVyaXRcIiAvLyBmb3JjZXMgdGhlIGljb24gdG8gaW5oZXJpdCBpdHMgcGFyZW50IGNvbG9yXG5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgLy8gQXNzdW1lIGl0J3MgYWxyZWFkeSBhbiBpbnN0YW5jZSBvZiBhbiBpY29uLlxuICAgICAgICAgICAgaWNvbkluc3RhbmNlID0gLyojX19QVVJFX18qL2Nsb25lRWxlbWVudChpY29uLCB7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2V1aUNvbnRleHRNZW51X19pY29uJ1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGFycm93O1xuXG4gICAgICBpZiAoaGFzUGFuZWwpIHtcbiAgICAgICAgYXJyb3cgPSBfX19FbW90aW9uSlNYKEV1aUljb24sIHtcbiAgICAgICAgICB0eXBlOiBcImFycm93UmlnaHRcIixcbiAgICAgICAgICBzaXplOiBcIm1cIixcbiAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpQ29udGV4dE1lbnVfX2Fycm93XCJcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpQ29udGV4dE1lbnVJdGVtJywgc2l6ZSAmJiBzaXplVG9DbGFzc05hbWVNYXBbc2l6ZV0sIGNsYXNzTmFtZSwge1xuICAgICAgICAnZXVpQ29udGV4dE1lbnVJdGVtLWlzRGlzYWJsZWQnOiBkaXNhYmxlZFxuICAgICAgfSk7XG4gICAgICB2YXIgbGF5b3V0Q2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUNvbnRleHRNZW51X19pdGVtTGF5b3V0JywgbGF5b3V0QWxpZ25Ub0NsYXNzTmFtZXNbbGF5b3V0QWxpZ25dKTtcblxuICAgICAgdmFyIGJ1dHRvbklubmVyID0gX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgICAgICBjbGFzc05hbWU6IGxheW91dENsYXNzZXNcbiAgICAgIH0sIGljb25JbnN0YW5jZSwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgICAgICBjbGFzc05hbWU6IFwiZXVpQ29udGV4dE1lbnVJdGVtX190ZXh0XCJcbiAgICAgIH0sIGNoaWxkcmVuKSwgYXJyb3cpO1xuXG4gICAgICB2YXIgYnV0dG9uOyAvLyA8YT4gZWxlbWVudHMgZG9uJ3QgcmVzcGVjdCB0aGUgYGRpc2FibGVkYCBhdHRyaWJ1dGUuIFNvIGlmIHdlJ3JlIGRpc2FibGVkLCB3ZSdsbCBqdXN0IHByZXRlbmRcbiAgICAgIC8vIHRoaXMgaXMgYSBidXR0b24gYW5kIHBpZ2d5YmFjayBvZmYgaXRzIGRpc2FibGVkIHN0eWxlcy5cblxuICAgICAgaWYgKGhyZWYgJiYgIWRpc2FibGVkKSB7XG4gICAgICAgIHZhciBzZWN1cmVSZWwgPSBnZXRTZWN1cmVSZWxGb3JUYXJnZXQoe1xuICAgICAgICAgIGhyZWY6IGhyZWYsXG4gICAgICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICAgICAgcmVsOiByZWxcbiAgICAgICAgfSk7XG4gICAgICAgIGJ1dHRvbiA9IF9fX0Vtb3Rpb25KU1goXCJhXCIsIF9leHRlbmRzKHtcbiAgICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgICAgaHJlZjogaHJlZixcbiAgICAgICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgICAgICByZWw6IHNlY3VyZVJlbCxcbiAgICAgICAgICByZWY6IGJ1dHRvblJlZlxuICAgICAgICB9LCByZXN0KSwgYnV0dG9uSW5uZXIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnV0dG9uID0gX19fRW1vdGlvbkpTWChcImJ1dHRvblwiLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgICAgIHJlZjogYnV0dG9uUmVmXG4gICAgICAgIH0sIHJlc3QpLCBidXR0b25Jbm5lcik7XG4gICAgICB9XG5cbiAgICAgIGlmICh0b29sVGlwQ29udGVudCkge1xuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlUb29sVGlwLCB7XG4gICAgICAgICAgdGl0bGU6IHRvb2xUaXBUaXRsZSA/IHRvb2xUaXBUaXRsZSA6IG51bGwsXG4gICAgICAgICAgY29udGVudDogdG9vbFRpcENvbnRlbnQsXG4gICAgICAgICAgYW5jaG9yQ2xhc3NOYW1lOiBcImV1aS1kaXNwbGF5QmxvY2tcIixcbiAgICAgICAgICBwb3NpdGlvbjogdG9vbFRpcFBvc2l0aW9uXG4gICAgICAgIH0sIGJ1dHRvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYnV0dG9uO1xuICAgICAgfVxuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlDb250ZXh0TWVudUl0ZW07XG59KENvbXBvbmVudCk7XG5FdWlDb250ZXh0TWVudUl0ZW0ucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGljb246IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkXSksXG4gIGhhc1BhbmVsOiBQcm9wVHlwZXMuYm9vbCxcbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgYnV0dG9uUmVmOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIFJlcXVpcmVkIGlmIHVzaW5nIGEgdG9vbHRpcC4gQWRkIGFuIG9wdGlvbmFsIHRvb2x0aXAgb24gaG92ZXJcbiAgICAgKi9cbiAgdG9vbFRpcENvbnRlbnQ6IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgICAqIE9wdGlvbmFsIHRpdGxlIGZvciB0aGUgdG9vbHRpcFxuICAgICAqL1xuICB0b29sVGlwVGl0bGU6IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgICAqIERpY3RhdGVzIHRoZSBwb3NpdGlvbiBvZiB0aGUgdG9vbHRpcC5cbiAgICAgKi9cbiAgdG9vbFRpcFBvc2l0aW9uOiBQcm9wVHlwZXMub25lT2YoW1widG9wXCIsIFwicmlnaHRcIiwgXCJib3R0b21cIiwgXCJsZWZ0XCJdKSxcbiAgaHJlZjogUHJvcFR5cGVzLnN0cmluZyxcbiAgdGFyZ2V0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICByZWw6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogSG93IHRvIGFsaWduIGljb24gd2l0aCBjb250ZW50IG9mIGJ1dHRvblxuICAgICAqL1xuICBsYXlvdXRBbGlnbjogUHJvcFR5cGVzLm9uZU9mKFtcImNlbnRlclwiLCBcInRvcFwiLCBcImJvdHRvbVwiXSksXG5cbiAgLyoqXG4gICAgICogUmVkdWNlIHRoZSBzaXplIHRvIGBzYCB3aGVuIGluIG5lZWQgb2YgYSBtb3JlIGNvbXByZXNzZWQgbWVudVxuICAgICAqL1xuICBzaXplOiBQcm9wVHlwZXMub25lT2YoW1wic1wiLCBcIm1cIl0pXG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwic2l6ZVwiLCBcIm1hcmdpblwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUV1aVRoZW1lIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgZXVpSG9yaXpvbnRhbFJ1bGVTdHlsZXMgfSBmcm9tICcuL2hvcml6b250YWxfcnVsZS5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgU0laRVMgPSBbJ2Z1bGwnLCAnaGFsZicsICdxdWFydGVyJ107XG5leHBvcnQgdmFyIE1BUkdJTlMgPSBbJ25vbmUnLCAneHMnLCAncycsICdtJywgJ2wnLCAneGwnLCAneHhsJ107XG52YXIgbWFyZ2luVG9DbGFzc05hbWVNYXAgPSB7XG4gIG5vbmU6IG51bGwsXG4gIHhzOiAnbWFyZ2luWFNtYWxsJyxcbiAgczogJ21hcmdpblNtYWxsJyxcbiAgbTogJ21hcmdpbk1lZGl1bScsXG4gIGw6ICdtYXJnaW5MYXJnZScsXG4gIHhsOiAnbWFyZ2luWExhcmdlJyxcbiAgeHhsOiAnbWFyZ2luWFhMYXJnZSdcbn07XG5leHBvcnQgdmFyIEV1aUhvcml6b250YWxSdWxlID0gZnVuY3Rpb24gRXVpSG9yaXpvbnRhbFJ1bGUoX3JlZikge1xuICB2YXIgX2NsYXNzTmFtZXM7XG5cbiAgdmFyIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gJ2Z1bGwnIDogX3JlZiRzaXplLFxuICAgICAgX3JlZiRtYXJnaW4gPSBfcmVmLm1hcmdpbixcbiAgICAgIG1hcmdpbiA9IF9yZWYkbWFyZ2luID09PSB2b2lkIDAgPyAnbCcgOiBfcmVmJG1hcmdpbixcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICB2YXIgc3R5bGVzID0gZXVpSG9yaXpvbnRhbFJ1bGVTdHlsZXMoZXVpVGhlbWUpO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUhvcml6b250YWxSdWxlJywgKF9jbGFzc05hbWVzID0ge30sIF9kZWZpbmVQcm9wZXJ0eShfY2xhc3NOYW1lcywgXCJldWlIb3Jpem9udGFsUnVsZS0tXCIuY29uY2F0KHNpemUpLCBzaXplKSwgX2RlZmluZVByb3BlcnR5KF9jbGFzc05hbWVzLCBcImV1aUhvcml6b250YWxSdWxlLS1cIi5jb25jYXQobWFyZ2luVG9DbGFzc05hbWVNYXBbbWFyZ2luXSksIG1hcmdpbiAmJiBtYXJnaW4gIT09ICdub25lJyksIF9jbGFzc05hbWVzKSwgY2xhc3NOYW1lKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpSG9yaXpvbnRhbFJ1bGUsIHN0eWxlc1tzaXplXSwgc3R5bGVzW21hcmdpbl1dO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcImhyXCIsIF9leHRlbmRzKHtcbiAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgfSwgcmVzdCkpO1xufTtcbkV1aUhvcml6b250YWxSdWxlLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAgICogRGVmaW5lcyB0aGUgd2lkdGggb2YgdGhlIEhSLlxuICAgICAqL1xuICBzaXplOiBQcm9wVHlwZXMuYW55LFxuICBtYXJnaW46IFByb3BUeXBlcy5hbnksXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZ1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGxvZ2ljYWxDU1MgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5leHBvcnQgdmFyIGV1aUhvcml6b250YWxSdWxlU3R5bGVzID0gZnVuY3Rpb24gZXVpSG9yaXpvbnRhbFJ1bGVTdHlsZXMoX3JlZikge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmLmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIGV1aUhvcml6b250YWxSdWxlOiAvKiNfX1BVUkVfXyovY3NzKFwiYm9yZGVyOm5vbmU7XCIsIGxvZ2ljYWxDU1MoJ2hlaWdodCcsIGV1aVRoZW1lLmJvcmRlci53aWR0aC50aGluKSwgXCIgYmFja2dyb3VuZC1jb2xvcjpcIiwgZXVpVGhlbWUuYm9yZGVyLmNvbG9yLCBcIjtmbGV4LXNocmluazowO2ZsZXgtZ3JvdzowOztsYWJlbDpldWlIb3Jpem9udGFsUnVsZTtcIiksXG4gICAgLy8gU2l6ZXNcbiAgICBmdWxsOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ3dpZHRoJywgJzEwMCUnKSwgXCI7O2xhYmVsOmZ1bGw7XCIpLFxuICAgIGhhbGY6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnd2lkdGgnLCAnNTAlJyksIFwiIFwiLCBsb2dpY2FsQ1NTKCdtYXJnaW4taG9yaXpvbnRhbCcsICdhdXRvJyksIFwiOztsYWJlbDpoYWxmO1wiKSxcbiAgICBxdWFydGVyOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ3dpZHRoJywgJzI1JScpLCBcIiBcIiwgbG9naWNhbENTUygnbWFyZ2luLWhvcml6b250YWwnLCAnYXV0bycpLCBcIjs7bGFiZWw6cXVhcnRlcjtcIiksXG4gICAgLy8gTWFyZ2luc1xuICAgIG5vbmU6ICcnLFxuICAgIHhzOiAvKiNfX1BVUkVfXyovY3NzKFwibWFyZ2luLWJsb2NrOlwiLCBldWlUaGVtZS5zaXplLnMsIFwiOztsYWJlbDp4cztcIiksXG4gICAgczogLyojX19QVVJFX18qL2NzcyhcIm1hcmdpbi1ibG9jazpcIiwgZXVpVGhlbWUuc2l6ZS5tLCBcIjs7bGFiZWw6cztcIiksXG4gICAgbTogLyojX19QVVJFX18qL2NzcyhcIm1hcmdpbi1ibG9jazpcIiwgZXVpVGhlbWUuc2l6ZS5iYXNlLCBcIjs7bGFiZWw6bTtcIiksXG4gICAgbDogLyojX19QVVJFX18qL2NzcyhcIm1hcmdpbi1ibG9jazpcIiwgZXVpVGhlbWUuc2l6ZS5sLCBcIjs7bGFiZWw6bDtcIiksXG4gICAgeGw6IC8qI19fUFVSRV9fKi9jc3MoXCJtYXJnaW4tYmxvY2s6XCIsIGV1aVRoZW1lLnNpemUueGwsIFwiOztsYWJlbDp4bDtcIiksXG4gICAgeHhsOiAvKiNfX1BVUkVfXyovY3NzKFwibWFyZ2luLWJsb2NrOlwiLCBldWlUaGVtZS5zaXplLnh4bCwgXCI7O2xhYmVsOnh4bDtcIilcbiAgfTtcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJsYWJlbFwiLCBcImlkXCIsIFwiY2hlY2tlZFwiLCBcImRpc2FibGVkXCIsIFwiY29tcHJlc3NlZFwiLCBcIm9uQ2hhbmdlXCIsIFwiY2xhc3NOYW1lXCIsIFwic2hvd0xhYmVsXCIsIFwidHlwZVwiLCBcImxhYmVsUHJvcHNcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUdlbmVyYXRlZEh0bWxJZCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2FjY2Vzc2liaWxpdHknO1xuaW1wb3J0IHsgRXVpSWNvbiB9IGZyb20gJy4uLy4uL2ljb24nO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpU3dpdGNoID0gZnVuY3Rpb24gRXVpU3dpdGNoKF9yZWYpIHtcbiAgdmFyIGxhYmVsID0gX3JlZi5sYWJlbCxcbiAgICAgIGlkID0gX3JlZi5pZCxcbiAgICAgIGNoZWNrZWQgPSBfcmVmLmNoZWNrZWQsXG4gICAgICBkaXNhYmxlZCA9IF9yZWYuZGlzYWJsZWQsXG4gICAgICBjb21wcmVzc2VkID0gX3JlZi5jb21wcmVzc2VkLFxuICAgICAgb25DaGFuZ2UgPSBfcmVmLm9uQ2hhbmdlLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBfcmVmJHNob3dMYWJlbCA9IF9yZWYuc2hvd0xhYmVsLFxuICAgICAgc2hvd0xhYmVsID0gX3JlZiRzaG93TGFiZWwgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJHNob3dMYWJlbCxcbiAgICAgIF9yZWYkdHlwZSA9IF9yZWYudHlwZSxcbiAgICAgIHR5cGUgPSBfcmVmJHR5cGUgPT09IHZvaWQgMCA/ICdidXR0b24nIDogX3JlZiR0eXBlLFxuICAgICAgbGFiZWxQcm9wcyA9IF9yZWYubGFiZWxQcm9wcyxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgc3dpdGNoSWQgPSB1c2VHZW5lcmF0ZWRIdG1sSWQoe1xuICAgIGNvbmRpdGlvbmFsSWQ6IGlkXG4gIH0pO1xuICB2YXIgbGFiZWxJZCA9IHVzZUdlbmVyYXRlZEh0bWxJZCh7XG4gICAgY29uZGl0aW9uYWxJZDogbGFiZWxQcm9wcyA9PT0gbnVsbCB8fCBsYWJlbFByb3BzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBsYWJlbFByb3BzLmlkXG4gIH0pO1xuICB2YXIgb25DbGljayA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKGRpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGV2ZW50ID0gZTtcbiAgICBldmVudC50YXJnZXQuY2hlY2tlZCA9ICFjaGVja2VkO1xuICAgIG9uQ2hhbmdlKGV2ZW50KTtcbiAgfSwgW2NoZWNrZWQsIGRpc2FibGVkLCBvbkNoYW5nZV0pO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVN3aXRjaCcsIHtcbiAgICAnZXVpU3dpdGNoLS1jb21wcmVzc2VkJzogY29tcHJlc3NlZFxuICB9LCBjbGFzc05hbWUpO1xuICB2YXIgbGFiZWxDbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpU3dpdGNoX19sYWJlbCcsIGxhYmVsUHJvcHMgPT09IG51bGwgfHwgbGFiZWxQcm9wcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogbGFiZWxQcm9wcy5jbGFzc05hbWUpO1xuXG4gIGlmIChzaG93TGFiZWwgPT09IGZhbHNlICYmIHR5cGVvZiBsYWJlbCAhPT0gJ3N0cmluZycpIHtcbiAgICBjb25zb2xlLndhcm4oJ0V1aVN3aXRjaCBgbGFiZWxgIG11c3QgYmUgYSBzdHJpbmcgd2hlbiBgc2hvd0xhYmVsYCBpcyBmYWxzZS4nKTtcbiAgfVxuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgfSwgX19fRW1vdGlvbkpTWChcImJ1dHRvblwiLCBfZXh0ZW5kcyh7XG4gICAgaWQ6IHN3aXRjaElkLFxuICAgIFwiYXJpYS1jaGVja2VkXCI6IGNoZWNrZWQgfHwgZmFsc2UsXG4gICAgY2xhc3NOYW1lOiBcImV1aVN3aXRjaF9fYnV0dG9uXCIsXG4gICAgcm9sZTogXCJzd2l0Y2hcIixcbiAgICB0eXBlOiB0eXBlLFxuICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICBvbkNsaWNrOiBvbkNsaWNrLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBzaG93TGFiZWwgPyB1bmRlZmluZWQgOiBsYWJlbCxcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiBzaG93TGFiZWwgPyBsYWJlbElkIDogdW5kZWZpbmVkXG4gIH0sIHJlc3QpLCBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aVN3aXRjaF9fYm9keVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpU3dpdGNoX190aHVtYlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aVN3aXRjaF9fdHJhY2tcIlxuICB9LCAhY29tcHJlc3NlZCAmJiBfX19FbW90aW9uSlNYKFJlYWN0LkZyYWdtZW50LCBudWxsLCBfX19FbW90aW9uSlNYKEV1aUljb24sIHtcbiAgICB0eXBlOiBcImNyb3NzXCIsXG4gICAgc2l6ZTogXCJtXCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aVN3aXRjaF9faWNvblwiXG4gIH0pLCBfX19FbW90aW9uSlNYKEV1aUljb24sIHtcbiAgICB0eXBlOiBcImNoZWNrXCIsXG4gICAgc2l6ZTogXCJtXCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aVN3aXRjaF9faWNvbiBldWlTd2l0Y2hfX2ljb24tLWNoZWNrZWRcIlxuICB9KSkpKSksIHNob3dMYWJlbCAmJiAvLyA8YnV0dG9uPiArIDxsYWJlbD4gaGFzIHBvb3Igc2NyZWVuIHJlYWRlciBzdXBwb3J0LlxuICAvLyBDbGljayBoYW5kbGVyIGFkZGVkIHRvIHNpbXVsYXRlIG5hdHVyYWwsIHNlY29uZGFyeSA8bGFiZWw+IGludGVyYWN0aXZpdHkuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc3gtYTExeS9uby1ub25pbnRlcmFjdGl2ZS1lbGVtZW50LWludGVyYWN0aW9uc1xuICBfX19FbW90aW9uSlNYKFwic3BhblwiLCBfZXh0ZW5kcyh7fSwgbGFiZWxQcm9wcywge1xuICAgIGNsYXNzTmFtZTogbGFiZWxDbGFzc2VzLFxuICAgIGlkOiBsYWJlbElkLFxuICAgIG9uQ2xpY2s6IG9uQ2xpY2tcbiAgfSksIGxhYmVsKSk7XG59O1xuRXVpU3dpdGNoLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAgICogV2hldGhlciB0byByZW5kZXIgdGhlIHJlbmRlciB0aGUgdGV4dCBsYWJlbFxuICAgICAgICovXG4gIHNob3dMYWJlbDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICAgKiBNdXN0IGJlIGEgc3RyaW5nIGlmIGBzaG93TGFiZWxgIHByb3AgaXMgZmFsc2VcbiAgICAgICAqL1xuICBsYWJlbDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCxcbiAgY2hlY2tlZDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgY29tcHJlc3NlZDogUHJvcFR5cGVzLmJvb2wsXG4gIHR5cGU6IFByb3BUeXBlcy5vbmVPZihbXCJzdWJtaXRcIiwgXCJyZXNldFwiLCBcImJ1dHRvblwiXSksXG5cbiAgLyoqXG4gICAgICAgKiBPYmplY3Qgb2YgcHJvcHMgcGFzc2VkIHRvIHRoZSBsYWJlbCdzIDxzcGFuLz5cbiAgICAgICAqL1xuICBsYWJlbFByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbiAgfSlcbn07IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG4gIHJldHVybiBzZWxmO1xufSIsICJ2YXIgc2FmZUlzTmFOID0gTnVtYmVyLmlzTmFOIHx8XG4gICAgZnVuY3Rpb24gcG9ueWZpbGwodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgIT09IHZhbHVlO1xuICAgIH07XG5mdW5jdGlvbiBpc0VxdWFsKGZpcnN0LCBzZWNvbmQpIHtcbiAgICBpZiAoZmlyc3QgPT09IHNlY29uZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHNhZmVJc05hTihmaXJzdCkgJiYgc2FmZUlzTmFOKHNlY29uZCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGFyZUlucHV0c0VxdWFsKG5ld0lucHV0cywgbGFzdElucHV0cykge1xuICAgIGlmIChuZXdJbnB1dHMubGVuZ3RoICE9PSBsYXN0SW5wdXRzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmV3SW5wdXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICghaXNFcXVhbChuZXdJbnB1dHNbaV0sIGxhc3RJbnB1dHNbaV0pKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIG1lbW9pemVPbmUocmVzdWx0Rm4sIGlzRXF1YWwpIHtcbiAgICBpZiAoaXNFcXVhbCA9PT0gdm9pZCAwKSB7IGlzRXF1YWwgPSBhcmVJbnB1dHNFcXVhbDsgfVxuICAgIHZhciBsYXN0VGhpcztcbiAgICB2YXIgbGFzdEFyZ3MgPSBbXTtcbiAgICB2YXIgbGFzdFJlc3VsdDtcbiAgICB2YXIgY2FsbGVkT25jZSA9IGZhbHNlO1xuICAgIGZ1bmN0aW9uIG1lbW9pemVkKCkge1xuICAgICAgICB2YXIgbmV3QXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgbmV3QXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjYWxsZWRPbmNlICYmIGxhc3RUaGlzID09PSB0aGlzICYmIGlzRXF1YWwobmV3QXJncywgbGFzdEFyZ3MpKSB7XG4gICAgICAgICAgICByZXR1cm4gbGFzdFJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICBsYXN0UmVzdWx0ID0gcmVzdWx0Rm4uYXBwbHkodGhpcywgbmV3QXJncyk7XG4gICAgICAgIGNhbGxlZE9uY2UgPSB0cnVlO1xuICAgICAgICBsYXN0VGhpcyA9IHRoaXM7XG4gICAgICAgIGxhc3RBcmdzID0gbmV3QXJncztcbiAgICAgICAgcmV0dXJuIGxhc3RSZXN1bHQ7XG4gICAgfVxuICAgIHJldHVybiBtZW1vaXplZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbWVtb2l6ZU9uZTtcbiIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7XG4gIGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9O1xuICB2YXIgdGFyZ2V0ID0ge307XG4gIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTtcbiAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgfVxuICB9XG4gIHJldHVybiB0YXJnZXQ7XG59IiwgIi8vIEBmbG93XG5cbi8vIEFuaW1hdGlvbiBmcmFtZSBiYXNlZCBpbXBsZW1lbnRhdGlvbiBvZiBzZXRUaW1lb3V0LlxuLy8gSW5zcGlyZWQgYnkgSm9lIExhbWJlcnQsIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2pvZWxhbWJlcnQvMTAwMjExNiNmaWxlLXJlcXVlc3R0aW1lb3V0LWpzXG5cbmNvbnN0IGhhc05hdGl2ZVBlcmZvcm1hbmNlTm93ID1cbiAgdHlwZW9mIHBlcmZvcm1hbmNlID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgcGVyZm9ybWFuY2Uubm93ID09PSAnZnVuY3Rpb24nO1xuXG5jb25zdCBub3cgPSBoYXNOYXRpdmVQZXJmb3JtYW5jZU5vd1xuICA/ICgpID0+IHBlcmZvcm1hbmNlLm5vdygpXG4gIDogKCkgPT4gRGF0ZS5ub3coKTtcblxuZXhwb3J0IHR5cGUgVGltZW91dElEID0ge3xcbiAgaWQ6IEFuaW1hdGlvbkZyYW1lSUQsXG58fTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNhbmNlbFRpbWVvdXQodGltZW91dElEOiBUaW1lb3V0SUQpIHtcbiAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGltZW91dElELmlkKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcXVlc3RUaW1lb3V0KGNhbGxiYWNrOiBGdW5jdGlvbiwgZGVsYXk6IG51bWJlcik6IFRpbWVvdXRJRCB7XG4gIGNvbnN0IHN0YXJ0ID0gbm93KCk7XG5cbiAgZnVuY3Rpb24gdGljaygpIHtcbiAgICBpZiAobm93KCkgLSBzdGFydCA+PSBkZWxheSkge1xuICAgICAgY2FsbGJhY2suY2FsbChudWxsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGltZW91dElELmlkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHRpbWVvdXRJRDogVGltZW91dElEID0ge1xuICAgIGlkOiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayksXG4gIH07XG5cbiAgcmV0dXJuIHRpbWVvdXRJRDtcbn1cbiIsICIvLyBAZmxvd1xuXG5sZXQgc2l6ZTogbnVtYmVyID0gLTE7XG5cbi8vIFRoaXMgdXRpbGl0eSBjb3BpZWQgZnJvbSBcImRvbS1oZWxwZXJzXCIgcGFja2FnZS5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTY3JvbGxiYXJTaXplKHJlY2FsY3VsYXRlPzogYm9vbGVhbiA9IGZhbHNlKTogbnVtYmVyIHtcbiAgaWYgKHNpemUgPT09IC0xIHx8IHJlY2FsY3VsYXRlKSB7XG4gICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgY29uc3Qgc3R5bGUgPSBkaXYuc3R5bGU7XG4gICAgc3R5bGUud2lkdGggPSAnNTBweCc7XG4gICAgc3R5bGUuaGVpZ2h0ID0gJzUwcHgnO1xuICAgIHN0eWxlLm92ZXJmbG93ID0gJ3Njcm9sbCc7XG5cbiAgICAoKGRvY3VtZW50LmJvZHk6IGFueSk6IEhUTUxCb2R5RWxlbWVudCkuYXBwZW5kQ2hpbGQoZGl2KTtcblxuICAgIHNpemUgPSBkaXYub2Zmc2V0V2lkdGggLSBkaXYuY2xpZW50V2lkdGg7XG5cbiAgICAoKGRvY3VtZW50LmJvZHk6IGFueSk6IEhUTUxCb2R5RWxlbWVudCkucmVtb3ZlQ2hpbGQoZGl2KTtcbiAgfVxuXG4gIHJldHVybiBzaXplO1xufVxuXG5leHBvcnQgdHlwZSBSVExPZmZzZXRUeXBlID1cbiAgfCAnbmVnYXRpdmUnXG4gIHwgJ3Bvc2l0aXZlLWRlc2NlbmRpbmcnXG4gIHwgJ3Bvc2l0aXZlLWFzY2VuZGluZyc7XG5cbmxldCBjYWNoZWRSVExSZXN1bHQ6IFJUTE9mZnNldFR5cGUgfCBudWxsID0gbnVsbDtcblxuLy8gVFJJQ0tZIEFjY29yZGluZyB0byB0aGUgc3BlYywgc2Nyb2xsTGVmdCBzaG91bGQgYmUgbmVnYXRpdmUgZm9yIFJUTCBhbGlnbmVkIGVsZW1lbnRzLlxuLy8gQ2hyb21lIGRvZXMgbm90IHNlZW0gdG8gYWRoZXJlOyBpdHMgc2Nyb2xsTGVmdCB2YWx1ZXMgYXJlIHBvc2l0aXZlIChtZWFzdXJlZCByZWxhdGl2ZSB0byB0aGUgbGVmdCkuXG4vLyBTYWZhcmkncyBlbGFzdGljIGJvdW5jZSBtYWtlcyBkZXRlY3RpbmcgdGhpcyBldmVuIG1vcmUgY29tcGxpY2F0ZWQgd3J0IHBvdGVudGlhbCBmYWxzZSBwb3NpdGl2ZXMuXG4vLyBUaGUgc2FmZXN0IHdheSB0byBjaGVjayB0aGlzIGlzIHRvIGludGVudGlvbmFsbHkgc2V0IGEgbmVnYXRpdmUgb2Zmc2V0LFxuLy8gYW5kIHRoZW4gdmVyaWZ5IHRoYXQgdGhlIHN1YnNlcXVlbnQgXCJzY3JvbGxcIiBldmVudCBtYXRjaGVzIHRoZSBuZWdhdGl2ZSBvZmZzZXQuXG4vLyBJZiBpdCBkb2VzIG5vdCBtYXRjaCwgdGhlbiB3ZSBjYW4gYXNzdW1lIGEgbm9uLXN0YW5kYXJkIFJUTCBzY3JvbGwgaW1wbGVtZW50YXRpb24uXG5leHBvcnQgZnVuY3Rpb24gZ2V0UlRMT2Zmc2V0VHlwZShyZWNhbGN1bGF0ZT86IGJvb2xlYW4gPSBmYWxzZSk6IFJUTE9mZnNldFR5cGUge1xuICBpZiAoY2FjaGVkUlRMUmVzdWx0ID09PSBudWxsIHx8IHJlY2FsY3VsYXRlKSB7XG4gICAgY29uc3Qgb3V0ZXJEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBjb25zdCBvdXRlclN0eWxlID0gb3V0ZXJEaXYuc3R5bGU7XG4gICAgb3V0ZXJTdHlsZS53aWR0aCA9ICc1MHB4JztcbiAgICBvdXRlclN0eWxlLmhlaWdodCA9ICc1MHB4JztcbiAgICBvdXRlclN0eWxlLm92ZXJmbG93ID0gJ3Njcm9sbCc7XG4gICAgb3V0ZXJTdHlsZS5kaXJlY3Rpb24gPSAncnRsJztcblxuICAgIGNvbnN0IGlubmVyRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgY29uc3QgaW5uZXJTdHlsZSA9IGlubmVyRGl2LnN0eWxlO1xuICAgIGlubmVyU3R5bGUud2lkdGggPSAnMTAwcHgnO1xuICAgIGlubmVyU3R5bGUuaGVpZ2h0ID0gJzEwMHB4JztcblxuICAgIG91dGVyRGl2LmFwcGVuZENoaWxkKGlubmVyRGl2KTtcblxuICAgICgoZG9jdW1lbnQuYm9keTogYW55KTogSFRNTEJvZHlFbGVtZW50KS5hcHBlbmRDaGlsZChvdXRlckRpdik7XG5cbiAgICBpZiAob3V0ZXJEaXYuc2Nyb2xsTGVmdCA+IDApIHtcbiAgICAgIGNhY2hlZFJUTFJlc3VsdCA9ICdwb3NpdGl2ZS1kZXNjZW5kaW5nJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ZXJEaXYuc2Nyb2xsTGVmdCA9IDE7XG4gICAgICBpZiAob3V0ZXJEaXYuc2Nyb2xsTGVmdCA9PT0gMCkge1xuICAgICAgICBjYWNoZWRSVExSZXN1bHQgPSAnbmVnYXRpdmUnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FjaGVkUlRMUmVzdWx0ID0gJ3Bvc2l0aXZlLWFzY2VuZGluZyc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgKChkb2N1bWVudC5ib2R5OiBhbnkpOiBIVE1MQm9keUVsZW1lbnQpLnJlbW92ZUNoaWxkKG91dGVyRGl2KTtcblxuICAgIHJldHVybiBjYWNoZWRSVExSZXN1bHQ7XG4gIH1cblxuICByZXR1cm4gY2FjaGVkUlRMUmVzdWx0O1xufVxuIiwgIi8vIEBmbG93XG5cbmltcG9ydCBtZW1vaXplT25lIGZyb20gJ21lbW9pemUtb25lJztcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnQsIFB1cmVDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjYW5jZWxUaW1lb3V0LCByZXF1ZXN0VGltZW91dCB9IGZyb20gJy4vdGltZXInO1xuaW1wb3J0IHsgZ2V0U2Nyb2xsYmFyU2l6ZSwgZ2V0UlRMT2Zmc2V0VHlwZSB9IGZyb20gJy4vZG9tSGVscGVycyc7XG5cbmltcG9ydCB0eXBlIHsgVGltZW91dElEIH0gZnJvbSAnLi90aW1lcic7XG5cbnR5cGUgRGlyZWN0aW9uID0gJ2x0cicgfCAncnRsJztcbmV4cG9ydCB0eXBlIFNjcm9sbFRvQWxpZ24gPSAnYXV0bycgfCAnc21hcnQnIHwgJ2NlbnRlcicgfCAnc3RhcnQnIHwgJ2VuZCc7XG5cbnR5cGUgaXRlbVNpemUgPSBudW1iZXIgfCAoKGluZGV4OiBudW1iZXIpID0+IG51bWJlcik7XG5cbnR5cGUgUmVuZGVyQ29tcG9uZW50UHJvcHM8VD4gPSB7fFxuICBjb2x1bW5JbmRleDogbnVtYmVyLFxuICBkYXRhOiBULFxuICBpc1Njcm9sbGluZz86IGJvb2xlYW4sXG4gIHJvd0luZGV4OiBudW1iZXIsXG4gIHN0eWxlOiBPYmplY3QsXG58fTtcbmV4cG9ydCB0eXBlIFJlbmRlckNvbXBvbmVudDxUPiA9IFJlYWN0JENvbXBvbmVudFR5cGU8XG4gICRTaGFwZTxSZW5kZXJDb21wb25lbnRQcm9wczxUPj5cbj47XG5cbnR5cGUgU2Nyb2xsRGlyZWN0aW9uID0gJ2ZvcndhcmQnIHwgJ2JhY2t3YXJkJztcblxudHlwZSBPbkl0ZW1zUmVuZGVyZWRDYWxsYmFjayA9ICh7XG4gIG92ZXJzY2FuQ29sdW1uU3RhcnRJbmRleDogbnVtYmVyLFxuICBvdmVyc2NhbkNvbHVtblN0b3BJbmRleDogbnVtYmVyLFxuICBvdmVyc2NhblJvd1N0YXJ0SW5kZXg6IG51bWJlcixcbiAgb3ZlcnNjYW5Sb3dTdG9wSW5kZXg6IG51bWJlcixcbiAgdmlzaWJsZUNvbHVtblN0YXJ0SW5kZXg6IG51bWJlcixcbiAgdmlzaWJsZUNvbHVtblN0b3BJbmRleDogbnVtYmVyLFxuICB2aXNpYmxlUm93U3RhcnRJbmRleDogbnVtYmVyLFxuICB2aXNpYmxlUm93U3RvcEluZGV4OiBudW1iZXIsXG59KSA9PiB2b2lkO1xudHlwZSBPblNjcm9sbENhbGxiYWNrID0gKHtcbiAgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbjogU2Nyb2xsRGlyZWN0aW9uLFxuICBzY3JvbGxMZWZ0OiBudW1iZXIsXG4gIHNjcm9sbFRvcDogbnVtYmVyLFxuICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IGJvb2xlYW4sXG4gIHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uOiBTY3JvbGxEaXJlY3Rpb24sXG59KSA9PiB2b2lkO1xuXG50eXBlIFNjcm9sbEV2ZW50ID0gU3ludGhldGljRXZlbnQ8SFRNTERpdkVsZW1lbnQ+O1xudHlwZSBJdGVtU3R5bGVDYWNoZSA9IHsgW2tleTogc3RyaW5nXTogT2JqZWN0IH07XG5cbnR5cGUgT3V0ZXJQcm9wcyA9IHt8XG4gIGNoaWxkcmVuOiBSZWFjdCROb2RlLFxuICBjbGFzc05hbWU6IHN0cmluZyB8IHZvaWQsXG4gIG9uU2Nyb2xsOiBTY3JvbGxFdmVudCA9PiB2b2lkLFxuICBzdHlsZToge1xuICAgIFtzdHJpbmddOiBtaXhlZCxcbiAgfSxcbnx9O1xuXG50eXBlIElubmVyUHJvcHMgPSB7fFxuICBjaGlsZHJlbjogUmVhY3QkTm9kZSxcbiAgc3R5bGU6IHtcbiAgICBbc3RyaW5nXTogbWl4ZWQsXG4gIH0sXG58fTtcblxuZXhwb3J0IHR5cGUgUHJvcHM8VD4gPSB7fFxuICBjaGlsZHJlbjogUmVuZGVyQ29tcG9uZW50PFQ+LFxuICBjbGFzc05hbWU/OiBzdHJpbmcsXG4gIGNvbHVtbkNvdW50OiBudW1iZXIsXG4gIGNvbHVtbldpZHRoOiBpdGVtU2l6ZSxcbiAgZGlyZWN0aW9uOiBEaXJlY3Rpb24sXG4gIGhlaWdodDogbnVtYmVyLFxuICBpbml0aWFsU2Nyb2xsTGVmdD86IG51bWJlcixcbiAgaW5pdGlhbFNjcm9sbFRvcD86IG51bWJlcixcbiAgaW5uZXJSZWY/OiBhbnksXG4gIGlubmVyRWxlbWVudFR5cGU/OiBzdHJpbmcgfCBSZWFjdCRBYnN0cmFjdENvbXBvbmVudDxJbm5lclByb3BzLCBhbnk+LFxuICBpbm5lclRhZ05hbWU/OiBzdHJpbmcsIC8vIGRlcHJlY2F0ZWRcbiAgaXRlbURhdGE6IFQsXG4gIGl0ZW1LZXk/OiAocGFyYW1zOiB7fFxuICAgIGNvbHVtbkluZGV4OiBudW1iZXIsXG4gICAgZGF0YTogVCxcbiAgICByb3dJbmRleDogbnVtYmVyLFxuICB8fSkgPT4gYW55LFxuICBvbkl0ZW1zUmVuZGVyZWQ/OiBPbkl0ZW1zUmVuZGVyZWRDYWxsYmFjayxcbiAgb25TY3JvbGw/OiBPblNjcm9sbENhbGxiYWNrLFxuICBvdXRlclJlZj86IGFueSxcbiAgb3V0ZXJFbGVtZW50VHlwZT86IHN0cmluZyB8IFJlYWN0JEFic3RyYWN0Q29tcG9uZW50PE91dGVyUHJvcHMsIGFueT4sXG4gIG91dGVyVGFnTmFtZT86IHN0cmluZywgLy8gZGVwcmVjYXRlZFxuICBvdmVyc2NhbkNvbHVtbkNvdW50PzogbnVtYmVyLFxuICBvdmVyc2NhbkNvbHVtbnNDb3VudD86IG51bWJlciwgLy8gZGVwcmVjYXRlZFxuICBvdmVyc2NhbkNvdW50PzogbnVtYmVyLCAvLyBkZXByZWNhdGVkXG4gIG92ZXJzY2FuUm93Q291bnQ/OiBudW1iZXIsXG4gIG92ZXJzY2FuUm93c0NvdW50PzogbnVtYmVyLCAvLyBkZXByZWNhdGVkXG4gIHJvd0NvdW50OiBudW1iZXIsXG4gIHJvd0hlaWdodDogaXRlbVNpemUsXG4gIHN0eWxlPzogT2JqZWN0LFxuICB1c2VJc1Njcm9sbGluZzogYm9vbGVhbixcbiAgd2lkdGg6IG51bWJlcixcbnx9O1xuXG50eXBlIFN0YXRlID0ge3xcbiAgaW5zdGFuY2U6IGFueSxcbiAgaXNTY3JvbGxpbmc6IGJvb2xlYW4sXG4gIGhvcml6b250YWxTY3JvbGxEaXJlY3Rpb246IFNjcm9sbERpcmVjdGlvbixcbiAgc2Nyb2xsTGVmdDogbnVtYmVyLFxuICBzY3JvbGxUb3A6IG51bWJlcixcbiAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBib29sZWFuLFxuICB2ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbjogU2Nyb2xsRGlyZWN0aW9uLFxufH07XG5cbnR5cGUgZ2V0SXRlbU9mZnNldCA9IChcbiAgcHJvcHM6IFByb3BzPGFueT4sXG4gIGluZGV4OiBudW1iZXIsXG4gIGluc3RhbmNlUHJvcHM6IGFueVxuKSA9PiBudW1iZXI7XG50eXBlIGdldEl0ZW1TaXplID0gKFxuICBwcm9wczogUHJvcHM8YW55PixcbiAgaW5kZXg6IG51bWJlcixcbiAgaW5zdGFuY2VQcm9wczogYW55XG4pID0+IG51bWJlcjtcbnR5cGUgZ2V0RXN0aW1hdGVkVG90YWxTaXplID0gKHByb3BzOiBQcm9wczxhbnk+LCBpbnN0YW5jZVByb3BzOiBhbnkpID0+IG51bWJlcjtcbnR5cGUgR2V0T2Zmc2V0Rm9ySXRlbUFuZEFsaWdubWVudCA9IChcbiAgcHJvcHM6IFByb3BzPGFueT4sXG4gIGluZGV4OiBudW1iZXIsXG4gIGFsaWduOiBTY3JvbGxUb0FsaWduLFxuICBzY3JvbGxPZmZzZXQ6IG51bWJlcixcbiAgaW5zdGFuY2VQcm9wczogYW55LFxuICBzY3JvbGxiYXJTaXplOiBudW1iZXJcbikgPT4gbnVtYmVyO1xudHlwZSBHZXRTdGFydEluZGV4Rm9yT2Zmc2V0ID0gKFxuICBwcm9wczogUHJvcHM8YW55PixcbiAgb2Zmc2V0OiBudW1iZXIsXG4gIGluc3RhbmNlUHJvcHM6IGFueVxuKSA9PiBudW1iZXI7XG50eXBlIEdldFN0b3BJbmRleEZvclN0YXJ0SW5kZXggPSAoXG4gIHByb3BzOiBQcm9wczxhbnk+LFxuICBzdGFydEluZGV4OiBudW1iZXIsXG4gIHNjcm9sbE9mZnNldDogbnVtYmVyLFxuICBpbnN0YW5jZVByb3BzOiBhbnlcbikgPT4gbnVtYmVyO1xudHlwZSBJbml0SW5zdGFuY2VQcm9wcyA9IChwcm9wczogUHJvcHM8YW55PiwgaW5zdGFuY2U6IGFueSkgPT4gYW55O1xudHlwZSBWYWxpZGF0ZVByb3BzID0gKHByb3BzOiBQcm9wczxhbnk+KSA9PiB2b2lkO1xuXG5jb25zdCBJU19TQ1JPTExJTkdfREVCT1VOQ0VfSU5URVJWQUwgPSAxNTA7XG5cbmNvbnN0IGRlZmF1bHRJdGVtS2V5ID0gKHsgY29sdW1uSW5kZXgsIGRhdGEsIHJvd0luZGV4IH0pID0+XG4gIGAke3Jvd0luZGV4fToke2NvbHVtbkluZGV4fWA7XG5cbi8vIEluIERFViBtb2RlLCB0aGlzIFNldCBoZWxwcyB1cyBvbmx5IGxvZyBhIHdhcm5pbmcgb25jZSBwZXIgY29tcG9uZW50IGluc3RhbmNlLlxuLy8gVGhpcyBhdm9pZHMgc3BhbW1pbmcgdGhlIGNvbnNvbGUgZXZlcnkgdGltZSBhIHJlbmRlciBoYXBwZW5zLlxubGV0IGRldldhcm5pbmdzT3ZlcnNjYW5Db3VudCA9IG51bGw7XG5sZXQgZGV2V2FybmluZ3NPdmVyc2NhblJvd3NDb2x1bW5zQ291bnQgPSBudWxsO1xubGV0IGRldldhcm5pbmdzVGFnTmFtZSA9IG51bGw7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdy5XZWFrU2V0ICE9PSAndW5kZWZpbmVkJykge1xuICAgIGRldldhcm5pbmdzT3ZlcnNjYW5Db3VudCA9IG5ldyBXZWFrU2V0KCk7XG4gICAgZGV2V2FybmluZ3NPdmVyc2NhblJvd3NDb2x1bW5zQ291bnQgPSBuZXcgV2Vha1NldCgpO1xuICAgIGRldldhcm5pbmdzVGFnTmFtZSA9IG5ldyBXZWFrU2V0KCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlR3JpZENvbXBvbmVudCh7XG4gIGdldENvbHVtbk9mZnNldCxcbiAgZ2V0Q29sdW1uU3RhcnRJbmRleEZvck9mZnNldCxcbiAgZ2V0Q29sdW1uU3RvcEluZGV4Rm9yU3RhcnRJbmRleCxcbiAgZ2V0Q29sdW1uV2lkdGgsXG4gIGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0LFxuICBnZXRFc3RpbWF0ZWRUb3RhbFdpZHRoLFxuICBnZXRPZmZzZXRGb3JDb2x1bW5BbmRBbGlnbm1lbnQsXG4gIGdldE9mZnNldEZvclJvd0FuZEFsaWdubWVudCxcbiAgZ2V0Um93SGVpZ2h0LFxuICBnZXRSb3dPZmZzZXQsXG4gIGdldFJvd1N0YXJ0SW5kZXhGb3JPZmZzZXQsXG4gIGdldFJvd1N0b3BJbmRleEZvclN0YXJ0SW5kZXgsXG4gIGluaXRJbnN0YW5jZVByb3BzLFxuICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlLFxuICB2YWxpZGF0ZVByb3BzLFxufToge3xcbiAgZ2V0Q29sdW1uT2Zmc2V0OiBnZXRJdGVtT2Zmc2V0LFxuICBnZXRDb2x1bW5TdGFydEluZGV4Rm9yT2Zmc2V0OiBHZXRTdGFydEluZGV4Rm9yT2Zmc2V0LFxuICBnZXRDb2x1bW5TdG9wSW5kZXhGb3JTdGFydEluZGV4OiBHZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4LFxuICBnZXRDb2x1bW5XaWR0aDogZ2V0SXRlbVNpemUsXG4gIGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0OiBnZXRFc3RpbWF0ZWRUb3RhbFNpemUsXG4gIGdldEVzdGltYXRlZFRvdGFsV2lkdGg6IGdldEVzdGltYXRlZFRvdGFsU2l6ZSxcbiAgZ2V0T2Zmc2V0Rm9yQ29sdW1uQW5kQWxpZ25tZW50OiBHZXRPZmZzZXRGb3JJdGVtQW5kQWxpZ25tZW50LFxuICBnZXRPZmZzZXRGb3JSb3dBbmRBbGlnbm1lbnQ6IEdldE9mZnNldEZvckl0ZW1BbmRBbGlnbm1lbnQsXG4gIGdldFJvd09mZnNldDogZ2V0SXRlbU9mZnNldCxcbiAgZ2V0Um93SGVpZ2h0OiBnZXRJdGVtU2l6ZSxcbiAgZ2V0Um93U3RhcnRJbmRleEZvck9mZnNldDogR2V0U3RhcnRJbmRleEZvck9mZnNldCxcbiAgZ2V0Um93U3RvcEluZGV4Rm9yU3RhcnRJbmRleDogR2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleCxcbiAgaW5pdEluc3RhbmNlUHJvcHM6IEluaXRJbnN0YW5jZVByb3BzLFxuICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlOiBib29sZWFuLFxuICB2YWxpZGF0ZVByb3BzOiBWYWxpZGF0ZVByb3BzLFxufH0pIHtcbiAgcmV0dXJuIGNsYXNzIEdyaWQ8VD4gZXh0ZW5kcyBQdXJlQ29tcG9uZW50PFByb3BzPFQ+LCBTdGF0ZT4ge1xuICAgIF9pbnN0YW5jZVByb3BzOiBhbnkgPSBpbml0SW5zdGFuY2VQcm9wcyh0aGlzLnByb3BzLCB0aGlzKTtcbiAgICBfcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZDogVGltZW91dElEIHwgbnVsbCA9IG51bGw7XG4gICAgX291dGVyUmVmOiA/SFRNTERpdkVsZW1lbnQ7XG5cbiAgICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgICAgZGlyZWN0aW9uOiAnbHRyJyxcbiAgICAgIGl0ZW1EYXRhOiB1bmRlZmluZWQsXG4gICAgICB1c2VJc1Njcm9sbGluZzogZmFsc2UsXG4gICAgfTtcblxuICAgIHN0YXRlOiBTdGF0ZSA9IHtcbiAgICAgIGluc3RhbmNlOiB0aGlzLFxuICAgICAgaXNTY3JvbGxpbmc6IGZhbHNlLFxuICAgICAgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbjogJ2ZvcndhcmQnLFxuICAgICAgc2Nyb2xsTGVmdDpcbiAgICAgICAgdHlwZW9mIHRoaXMucHJvcHMuaW5pdGlhbFNjcm9sbExlZnQgPT09ICdudW1iZXInXG4gICAgICAgICAgPyB0aGlzLnByb3BzLmluaXRpYWxTY3JvbGxMZWZ0XG4gICAgICAgICAgOiAwLFxuICAgICAgc2Nyb2xsVG9wOlxuICAgICAgICB0eXBlb2YgdGhpcy5wcm9wcy5pbml0aWFsU2Nyb2xsVG9wID09PSAnbnVtYmVyJ1xuICAgICAgICAgID8gdGhpcy5wcm9wcy5pbml0aWFsU2Nyb2xsVG9wXG4gICAgICAgICAgOiAwLFxuICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBmYWxzZSxcbiAgICAgIHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uOiAnZm9yd2FyZCcsXG4gICAgfTtcblxuICAgIC8vIEFsd2F5cyB1c2UgZXhwbGljaXQgY29uc3RydWN0b3IgZm9yIFJlYWN0IGNvbXBvbmVudHMuXG4gICAgLy8gSXQgcHJvZHVjZXMgbGVzcyBjb2RlIGFmdGVyIHRyYW5zcGlsYXRpb24uICgjMjYpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY29uc3RydWN0b3JcbiAgICBjb25zdHJ1Y3Rvcihwcm9wczogUHJvcHM8VD4pIHtcbiAgICAgIHN1cGVyKHByb3BzKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKFxuICAgICAgbmV4dFByb3BzOiBQcm9wczxUPixcbiAgICAgIHByZXZTdGF0ZTogU3RhdGVcbiAgICApOiAkU2hhcGU8U3RhdGU+IHwgbnVsbCB7XG4gICAgICB2YWxpZGF0ZVNoYXJlZFByb3BzKG5leHRQcm9wcywgcHJldlN0YXRlKTtcbiAgICAgIHZhbGlkYXRlUHJvcHMobmV4dFByb3BzKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHNjcm9sbFRvKHtcbiAgICAgIHNjcm9sbExlZnQsXG4gICAgICBzY3JvbGxUb3AsXG4gICAgfToge1xuICAgICAgc2Nyb2xsTGVmdDogbnVtYmVyLFxuICAgICAgc2Nyb2xsVG9wOiBudW1iZXIsXG4gICAgfSk6IHZvaWQge1xuICAgICAgaWYgKHNjcm9sbExlZnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzY3JvbGxMZWZ0ID0gTWF0aC5tYXgoMCwgc2Nyb2xsTGVmdCk7XG4gICAgICB9XG4gICAgICBpZiAoc2Nyb2xsVG9wICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc2Nyb2xsVG9wID0gTWF0aC5tYXgoMCwgc2Nyb2xsVG9wKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zZXRTdGF0ZShwcmV2U3RhdGUgPT4ge1xuICAgICAgICBpZiAoc2Nyb2xsTGVmdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc2Nyb2xsTGVmdCA9IHByZXZTdGF0ZS5zY3JvbGxMZWZ0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChzY3JvbGxUb3AgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHNjcm9sbFRvcCA9IHByZXZTdGF0ZS5zY3JvbGxUb3A7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgcHJldlN0YXRlLnNjcm9sbExlZnQgPT09IHNjcm9sbExlZnQgJiZcbiAgICAgICAgICBwcmV2U3RhdGUuc2Nyb2xsVG9wID09PSBzY3JvbGxUb3BcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGhvcml6b250YWxTY3JvbGxEaXJlY3Rpb246XG4gICAgICAgICAgICBwcmV2U3RhdGUuc2Nyb2xsTGVmdCA8IHNjcm9sbExlZnQgPyAnZm9yd2FyZCcgOiAnYmFja3dhcmQnLFxuICAgICAgICAgIHNjcm9sbExlZnQ6IHNjcm9sbExlZnQsXG4gICAgICAgICAgc2Nyb2xsVG9wOiBzY3JvbGxUb3AsXG4gICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiB0cnVlLFxuICAgICAgICAgIHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uOlxuICAgICAgICAgICAgcHJldlN0YXRlLnNjcm9sbFRvcCA8IHNjcm9sbFRvcCA/ICdmb3J3YXJkJyA6ICdiYWNrd2FyZCcsXG4gICAgICAgIH07XG4gICAgICB9LCB0aGlzLl9yZXNldElzU2Nyb2xsaW5nRGVib3VuY2VkKTtcbiAgICB9XG5cbiAgICBzY3JvbGxUb0l0ZW0oe1xuICAgICAgYWxpZ24gPSAnYXV0bycsXG4gICAgICBjb2x1bW5JbmRleCxcbiAgICAgIHJvd0luZGV4LFxuICAgIH06IHtcbiAgICAgIGFsaWduOiBTY3JvbGxUb0FsaWduLFxuICAgICAgY29sdW1uSW5kZXg/OiBudW1iZXIsXG4gICAgICByb3dJbmRleD86IG51bWJlcixcbiAgICB9KTogdm9pZCB7XG4gICAgICBjb25zdCB7IGNvbHVtbkNvdW50LCBoZWlnaHQsIHJvd0NvdW50LCB3aWR0aCB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IHsgc2Nyb2xsTGVmdCwgc2Nyb2xsVG9wIH0gPSB0aGlzLnN0YXRlO1xuICAgICAgY29uc3Qgc2Nyb2xsYmFyU2l6ZSA9IGdldFNjcm9sbGJhclNpemUoKTtcblxuICAgICAgaWYgKGNvbHVtbkluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29sdW1uSW5kZXggPSBNYXRoLm1heCgwLCBNYXRoLm1pbihjb2x1bW5JbmRleCwgY29sdW1uQ291bnQgLSAxKSk7XG4gICAgICB9XG4gICAgICBpZiAocm93SW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByb3dJbmRleCA9IE1hdGgubWF4KDAsIE1hdGgubWluKHJvd0luZGV4LCByb3dDb3VudCAtIDEpKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZXN0aW1hdGVkVG90YWxIZWlnaHQgPSBnZXRFc3RpbWF0ZWRUb3RhbEhlaWdodChcbiAgICAgICAgdGhpcy5wcm9wcyxcbiAgICAgICAgdGhpcy5faW5zdGFuY2VQcm9wc1xuICAgICAgKTtcbiAgICAgIGNvbnN0IGVzdGltYXRlZFRvdGFsV2lkdGggPSBnZXRFc3RpbWF0ZWRUb3RhbFdpZHRoKFxuICAgICAgICB0aGlzLnByb3BzLFxuICAgICAgICB0aGlzLl9pbnN0YW5jZVByb3BzXG4gICAgICApO1xuXG4gICAgICAvLyBUaGUgc2Nyb2xsYmFyIHNpemUgc2hvdWxkIGJlIGNvbnNpZGVyZWQgd2hlbiBzY3JvbGxpbmcgYW4gaXRlbSBpbnRvIHZpZXcsXG4gICAgICAvLyB0byBlbnN1cmUgaXQncyBmdWxseSB2aXNpYmxlLlxuICAgICAgLy8gQnV0IHdlIG9ubHkgbmVlZCB0byBhY2NvdW50IGZvciBpdHMgc2l6ZSB3aGVuIGl0J3MgYWN0dWFsbHkgdmlzaWJsZS5cbiAgICAgIGNvbnN0IGhvcml6b250YWxTY3JvbGxiYXJTaXplID1cbiAgICAgICAgZXN0aW1hdGVkVG90YWxXaWR0aCA+IHdpZHRoID8gc2Nyb2xsYmFyU2l6ZSA6IDA7XG4gICAgICBjb25zdCB2ZXJ0aWNhbFNjcm9sbGJhclNpemUgPVxuICAgICAgICBlc3RpbWF0ZWRUb3RhbEhlaWdodCA+IGhlaWdodCA/IHNjcm9sbGJhclNpemUgOiAwO1xuXG4gICAgICB0aGlzLnNjcm9sbFRvKHtcbiAgICAgICAgc2Nyb2xsTGVmdDpcbiAgICAgICAgICBjb2x1bW5JbmRleCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IGdldE9mZnNldEZvckNvbHVtbkFuZEFsaWdubWVudChcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLFxuICAgICAgICAgICAgICAgIGNvbHVtbkluZGV4LFxuICAgICAgICAgICAgICAgIGFsaWduLFxuICAgICAgICAgICAgICAgIHNjcm9sbExlZnQsXG4gICAgICAgICAgICAgICAgdGhpcy5faW5zdGFuY2VQcm9wcyxcbiAgICAgICAgICAgICAgICB2ZXJ0aWNhbFNjcm9sbGJhclNpemVcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBzY3JvbGxMZWZ0LFxuICAgICAgICBzY3JvbGxUb3A6XG4gICAgICAgICAgcm93SW5kZXggIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBnZXRPZmZzZXRGb3JSb3dBbmRBbGlnbm1lbnQoXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcyxcbiAgICAgICAgICAgICAgICByb3dJbmRleCxcbiAgICAgICAgICAgICAgICBhbGlnbixcbiAgICAgICAgICAgICAgICBzY3JvbGxUb3AsXG4gICAgICAgICAgICAgICAgdGhpcy5faW5zdGFuY2VQcm9wcyxcbiAgICAgICAgICAgICAgICBob3Jpem9udGFsU2Nyb2xsYmFyU2l6ZVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IHNjcm9sbFRvcCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgY29uc3QgeyBpbml0aWFsU2Nyb2xsTGVmdCwgaW5pdGlhbFNjcm9sbFRvcCB9ID0gdGhpcy5wcm9wcztcblxuICAgICAgaWYgKHRoaXMuX291dGVyUmVmICE9IG51bGwpIHtcbiAgICAgICAgY29uc3Qgb3V0ZXJSZWYgPSAoKHRoaXMuX291dGVyUmVmOiBhbnkpOiBIVE1MRWxlbWVudCk7XG4gICAgICAgIGlmICh0eXBlb2YgaW5pdGlhbFNjcm9sbExlZnQgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IGluaXRpYWxTY3JvbGxMZWZ0O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgaW5pdGlhbFNjcm9sbFRvcCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBvdXRlclJlZi5zY3JvbGxUb3AgPSBpbml0aWFsU2Nyb2xsVG9wO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NhbGxQcm9wc0NhbGxiYWNrcygpO1xuICAgIH1cblxuICAgIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcbiAgICAgIGNvbnN0IHsgZGlyZWN0aW9uIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgeyBzY3JvbGxMZWZ0LCBzY3JvbGxUb3AsIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCB9ID0gdGhpcy5zdGF0ZTtcblxuICAgICAgaWYgKHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCAmJiB0aGlzLl9vdXRlclJlZiAhPSBudWxsKSB7XG4gICAgICAgIC8vIFRSSUNLWSBBY2NvcmRpbmcgdG8gdGhlIHNwZWMsIHNjcm9sbExlZnQgc2hvdWxkIGJlIG5lZ2F0aXZlIGZvciBSVEwgYWxpZ25lZCBlbGVtZW50cy5cbiAgICAgICAgLy8gVGhpcyBpcyBub3QgdGhlIGNhc2UgZm9yIGFsbCBicm93c2VycyB0aG91Z2ggKGUuZy4gQ2hyb21lIHJlcG9ydHMgdmFsdWVzIGFzIHBvc2l0aXZlLCBtZWFzdXJlZCByZWxhdGl2ZSB0byB0aGUgbGVmdCkuXG4gICAgICAgIC8vIFNvIHdlIG5lZWQgdG8gZGV0ZXJtaW5lIHdoaWNoIGJyb3dzZXIgYmVoYXZpb3Igd2UncmUgZGVhbGluZyB3aXRoLCBhbmQgbWltaWMgaXQuXG4gICAgICAgIGNvbnN0IG91dGVyUmVmID0gKCh0aGlzLl9vdXRlclJlZjogYW55KTogSFRNTEVsZW1lbnQpO1xuICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAncnRsJykge1xuICAgICAgICAgIHN3aXRjaCAoZ2V0UlRMT2Zmc2V0VHlwZSgpKSB7XG4gICAgICAgICAgICBjYXNlICduZWdhdGl2ZSc6XG4gICAgICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSAtc2Nyb2xsTGVmdDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdwb3NpdGl2ZS1hc2NlbmRpbmcnOlxuICAgICAgICAgICAgICBvdXRlclJlZi5zY3JvbGxMZWZ0ID0gc2Nyb2xsTGVmdDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICBjb25zdCB7IGNsaWVudFdpZHRoLCBzY3JvbGxXaWR0aCB9ID0gb3V0ZXJSZWY7XG4gICAgICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSBzY3JvbGxXaWR0aCAtIGNsaWVudFdpZHRoIC0gc2Nyb2xsTGVmdDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSBNYXRoLm1heCgwLCBzY3JvbGxMZWZ0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIG91dGVyUmVmLnNjcm9sbFRvcCA9IE1hdGgubWF4KDAsIHNjcm9sbFRvcCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NhbGxQcm9wc0NhbGxiYWNrcygpO1xuICAgIH1cblxuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgaWYgKHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgIT09IG51bGwpIHtcbiAgICAgICAgY2FuY2VsVGltZW91dCh0aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGNoaWxkcmVuLFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgIGNvbHVtbkNvdW50LFxuICAgICAgICBkaXJlY3Rpb24sXG4gICAgICAgIGhlaWdodCxcbiAgICAgICAgaW5uZXJSZWYsXG4gICAgICAgIGlubmVyRWxlbWVudFR5cGUsXG4gICAgICAgIGlubmVyVGFnTmFtZSxcbiAgICAgICAgaXRlbURhdGEsXG4gICAgICAgIGl0ZW1LZXkgPSBkZWZhdWx0SXRlbUtleSxcbiAgICAgICAgb3V0ZXJFbGVtZW50VHlwZSxcbiAgICAgICAgb3V0ZXJUYWdOYW1lLFxuICAgICAgICByb3dDb3VudCxcbiAgICAgICAgc3R5bGUsXG4gICAgICAgIHVzZUlzU2Nyb2xsaW5nLFxuICAgICAgICB3aWR0aCxcbiAgICAgIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgeyBpc1Njcm9sbGluZyB9ID0gdGhpcy5zdGF0ZTtcblxuICAgICAgY29uc3QgW1xuICAgICAgICBjb2x1bW5TdGFydEluZGV4LFxuICAgICAgICBjb2x1bW5TdG9wSW5kZXgsXG4gICAgICBdID0gdGhpcy5fZ2V0SG9yaXpvbnRhbFJhbmdlVG9SZW5kZXIoKTtcbiAgICAgIGNvbnN0IFtyb3dTdGFydEluZGV4LCByb3dTdG9wSW5kZXhdID0gdGhpcy5fZ2V0VmVydGljYWxSYW5nZVRvUmVuZGVyKCk7XG5cbiAgICAgIGNvbnN0IGl0ZW1zID0gW107XG4gICAgICBpZiAoY29sdW1uQ291bnQgPiAwICYmIHJvd0NvdW50KSB7XG4gICAgICAgIGZvciAoXG4gICAgICAgICAgbGV0IHJvd0luZGV4ID0gcm93U3RhcnRJbmRleDtcbiAgICAgICAgICByb3dJbmRleCA8PSByb3dTdG9wSW5kZXg7XG4gICAgICAgICAgcm93SW5kZXgrK1xuICAgICAgICApIHtcbiAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgbGV0IGNvbHVtbkluZGV4ID0gY29sdW1uU3RhcnRJbmRleDtcbiAgICAgICAgICAgIGNvbHVtbkluZGV4IDw9IGNvbHVtblN0b3BJbmRleDtcbiAgICAgICAgICAgIGNvbHVtbkluZGV4KytcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goXG4gICAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoY2hpbGRyZW4sIHtcbiAgICAgICAgICAgICAgICBjb2x1bW5JbmRleCxcbiAgICAgICAgICAgICAgICBkYXRhOiBpdGVtRGF0YSxcbiAgICAgICAgICAgICAgICBpc1Njcm9sbGluZzogdXNlSXNTY3JvbGxpbmcgPyBpc1Njcm9sbGluZyA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBrZXk6IGl0ZW1LZXkoeyBjb2x1bW5JbmRleCwgZGF0YTogaXRlbURhdGEsIHJvd0luZGV4IH0pLFxuICAgICAgICAgICAgICAgIHJvd0luZGV4LFxuICAgICAgICAgICAgICAgIHN0eWxlOiB0aGlzLl9nZXRJdGVtU3R5bGUocm93SW5kZXgsIGNvbHVtbkluZGV4KSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFJlYWQgdGhpcyB2YWx1ZSBBRlRFUiBpdGVtcyBoYXZlIGJlZW4gY3JlYXRlZCxcbiAgICAgIC8vIFNvIHRoZWlyIGFjdHVhbCBzaXplcyAoaWYgdmFyaWFibGUpIGFyZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24uXG4gICAgICBjb25zdCBlc3RpbWF0ZWRUb3RhbEhlaWdodCA9IGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0KFxuICAgICAgICB0aGlzLnByb3BzLFxuICAgICAgICB0aGlzLl9pbnN0YW5jZVByb3BzXG4gICAgICApO1xuICAgICAgY29uc3QgZXN0aW1hdGVkVG90YWxXaWR0aCA9IGdldEVzdGltYXRlZFRvdGFsV2lkdGgoXG4gICAgICAgIHRoaXMucHJvcHMsXG4gICAgICAgIHRoaXMuX2luc3RhbmNlUHJvcHNcbiAgICAgICk7XG5cbiAgICAgIHJldHVybiBjcmVhdGVFbGVtZW50KFxuICAgICAgICBvdXRlckVsZW1lbnRUeXBlIHx8IG91dGVyVGFnTmFtZSB8fCAnZGl2JyxcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgICBvblNjcm9sbDogdGhpcy5fb25TY3JvbGwsXG4gICAgICAgICAgcmVmOiB0aGlzLl9vdXRlclJlZlNldHRlcixcbiAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgIG92ZXJmbG93OiAnYXV0bycsXG4gICAgICAgICAgICBXZWJraXRPdmVyZmxvd1Njcm9sbGluZzogJ3RvdWNoJyxcbiAgICAgICAgICAgIHdpbGxDaGFuZ2U6ICd0cmFuc2Zvcm0nLFxuICAgICAgICAgICAgZGlyZWN0aW9uLFxuICAgICAgICAgICAgLi4uc3R5bGUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgY3JlYXRlRWxlbWVudChpbm5lckVsZW1lbnRUeXBlIHx8IGlubmVyVGFnTmFtZSB8fCAnZGl2Jywge1xuICAgICAgICAgIGNoaWxkcmVuOiBpdGVtcyxcbiAgICAgICAgICByZWY6IGlubmVyUmVmLFxuICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICBoZWlnaHQ6IGVzdGltYXRlZFRvdGFsSGVpZ2h0LFxuICAgICAgICAgICAgcG9pbnRlckV2ZW50czogaXNTY3JvbGxpbmcgPyAnbm9uZScgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB3aWR0aDogZXN0aW1hdGVkVG90YWxXaWR0aCxcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBfY2FsbE9uSXRlbXNSZW5kZXJlZDogKFxuICAgICAgb3ZlcnNjYW5Db2x1bW5TdGFydEluZGV4OiBudW1iZXIsXG4gICAgICBvdmVyc2NhbkNvbHVtblN0b3BJbmRleDogbnVtYmVyLFxuICAgICAgb3ZlcnNjYW5Sb3dTdGFydEluZGV4OiBudW1iZXIsXG4gICAgICBvdmVyc2NhblJvd1N0b3BJbmRleDogbnVtYmVyLFxuICAgICAgdmlzaWJsZUNvbHVtblN0YXJ0SW5kZXg6IG51bWJlcixcbiAgICAgIHZpc2libGVDb2x1bW5TdG9wSW5kZXg6IG51bWJlcixcbiAgICAgIHZpc2libGVSb3dTdGFydEluZGV4OiBudW1iZXIsXG4gICAgICB2aXNpYmxlUm93U3RvcEluZGV4OiBudW1iZXJcbiAgICApID0+IHZvaWQ7XG4gICAgX2NhbGxPbkl0ZW1zUmVuZGVyZWQgPSBtZW1vaXplT25lKFxuICAgICAgKFxuICAgICAgICBvdmVyc2NhbkNvbHVtblN0YXJ0SW5kZXg6IG51bWJlcixcbiAgICAgICAgb3ZlcnNjYW5Db2x1bW5TdG9wSW5kZXg6IG51bWJlcixcbiAgICAgICAgb3ZlcnNjYW5Sb3dTdGFydEluZGV4OiBudW1iZXIsXG4gICAgICAgIG92ZXJzY2FuUm93U3RvcEluZGV4OiBudW1iZXIsXG4gICAgICAgIHZpc2libGVDb2x1bW5TdGFydEluZGV4OiBudW1iZXIsXG4gICAgICAgIHZpc2libGVDb2x1bW5TdG9wSW5kZXg6IG51bWJlcixcbiAgICAgICAgdmlzaWJsZVJvd1N0YXJ0SW5kZXg6IG51bWJlcixcbiAgICAgICAgdmlzaWJsZVJvd1N0b3BJbmRleDogbnVtYmVyXG4gICAgICApID0+XG4gICAgICAgICgodGhpcy5wcm9wcy5vbkl0ZW1zUmVuZGVyZWQ6IGFueSk6IE9uSXRlbXNSZW5kZXJlZENhbGxiYWNrKSh7XG4gICAgICAgICAgb3ZlcnNjYW5Db2x1bW5TdGFydEluZGV4LFxuICAgICAgICAgIG92ZXJzY2FuQ29sdW1uU3RvcEluZGV4LFxuICAgICAgICAgIG92ZXJzY2FuUm93U3RhcnRJbmRleCxcbiAgICAgICAgICBvdmVyc2NhblJvd1N0b3BJbmRleCxcbiAgICAgICAgICB2aXNpYmxlQ29sdW1uU3RhcnRJbmRleCxcbiAgICAgICAgICB2aXNpYmxlQ29sdW1uU3RvcEluZGV4LFxuICAgICAgICAgIHZpc2libGVSb3dTdGFydEluZGV4LFxuICAgICAgICAgIHZpc2libGVSb3dTdG9wSW5kZXgsXG4gICAgICAgIH0pXG4gICAgKTtcblxuICAgIF9jYWxsT25TY3JvbGw6IChcbiAgICAgIHNjcm9sbExlZnQ6IG51bWJlcixcbiAgICAgIHNjcm9sbFRvcDogbnVtYmVyLFxuICAgICAgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbjogU2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgdmVydGljYWxTY3JvbGxEaXJlY3Rpb246IFNjcm9sbERpcmVjdGlvbixcbiAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogYm9vbGVhblxuICAgICkgPT4gdm9pZDtcbiAgICBfY2FsbE9uU2Nyb2xsID0gbWVtb2l6ZU9uZShcbiAgICAgIChcbiAgICAgICAgc2Nyb2xsTGVmdDogbnVtYmVyLFxuICAgICAgICBzY3JvbGxUb3A6IG51bWJlcixcbiAgICAgICAgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbjogU2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICB2ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbjogU2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IGJvb2xlYW5cbiAgICAgICkgPT5cbiAgICAgICAgKCh0aGlzLnByb3BzLm9uU2Nyb2xsOiBhbnkpOiBPblNjcm9sbENhbGxiYWNrKSh7XG4gICAgICAgICAgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgICBzY3JvbGxMZWZ0LFxuICAgICAgICAgIHNjcm9sbFRvcCxcbiAgICAgICAgICB2ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQsXG4gICAgICAgIH0pXG4gICAgKTtcblxuICAgIF9jYWxsUHJvcHNDYWxsYmFja3MoKSB7XG4gICAgICBjb25zdCB7IGNvbHVtbkNvdW50LCBvbkl0ZW1zUmVuZGVyZWQsIG9uU2Nyb2xsLCByb3dDb3VudCB9ID0gdGhpcy5wcm9wcztcblxuICAgICAgaWYgKHR5cGVvZiBvbkl0ZW1zUmVuZGVyZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaWYgKGNvbHVtbkNvdW50ID4gMCAmJiByb3dDb3VudCA+IDApIHtcbiAgICAgICAgICBjb25zdCBbXG4gICAgICAgICAgICBvdmVyc2NhbkNvbHVtblN0YXJ0SW5kZXgsXG4gICAgICAgICAgICBvdmVyc2NhbkNvbHVtblN0b3BJbmRleCxcbiAgICAgICAgICAgIHZpc2libGVDb2x1bW5TdGFydEluZGV4LFxuICAgICAgICAgICAgdmlzaWJsZUNvbHVtblN0b3BJbmRleCxcbiAgICAgICAgICBdID0gdGhpcy5fZ2V0SG9yaXpvbnRhbFJhbmdlVG9SZW5kZXIoKTtcbiAgICAgICAgICBjb25zdCBbXG4gICAgICAgICAgICBvdmVyc2NhblJvd1N0YXJ0SW5kZXgsXG4gICAgICAgICAgICBvdmVyc2NhblJvd1N0b3BJbmRleCxcbiAgICAgICAgICAgIHZpc2libGVSb3dTdGFydEluZGV4LFxuICAgICAgICAgICAgdmlzaWJsZVJvd1N0b3BJbmRleCxcbiAgICAgICAgICBdID0gdGhpcy5fZ2V0VmVydGljYWxSYW5nZVRvUmVuZGVyKCk7XG4gICAgICAgICAgdGhpcy5fY2FsbE9uSXRlbXNSZW5kZXJlZChcbiAgICAgICAgICAgIG92ZXJzY2FuQ29sdW1uU3RhcnRJbmRleCxcbiAgICAgICAgICAgIG92ZXJzY2FuQ29sdW1uU3RvcEluZGV4LFxuICAgICAgICAgICAgb3ZlcnNjYW5Sb3dTdGFydEluZGV4LFxuICAgICAgICAgICAgb3ZlcnNjYW5Sb3dTdG9wSW5kZXgsXG4gICAgICAgICAgICB2aXNpYmxlQ29sdW1uU3RhcnRJbmRleCxcbiAgICAgICAgICAgIHZpc2libGVDb2x1bW5TdG9wSW5kZXgsXG4gICAgICAgICAgICB2aXNpYmxlUm93U3RhcnRJbmRleCxcbiAgICAgICAgICAgIHZpc2libGVSb3dTdG9wSW5kZXhcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygb25TY3JvbGwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIGhvcml6b250YWxTY3JvbGxEaXJlY3Rpb24sXG4gICAgICAgICAgc2Nyb2xsTGVmdCxcbiAgICAgICAgICBzY3JvbGxUb3AsXG4gICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkLFxuICAgICAgICAgIHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICB9ID0gdGhpcy5zdGF0ZTtcbiAgICAgICAgdGhpcy5fY2FsbE9uU2Nyb2xsKFxuICAgICAgICAgIHNjcm9sbExlZnQsXG4gICAgICAgICAgc2Nyb2xsVG9wLFxuICAgICAgICAgIGhvcml6b250YWxTY3JvbGxEaXJlY3Rpb24sXG4gICAgICAgICAgdmVydGljYWxTY3JvbGxEaXJlY3Rpb24sXG4gICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTGF6aWx5IGNyZWF0ZSBhbmQgY2FjaGUgaXRlbSBzdHlsZXMgd2hpbGUgc2Nyb2xsaW5nLFxuICAgIC8vIFNvIHRoYXQgcHVyZSBjb21wb25lbnQgc0NVIHdpbGwgcHJldmVudCByZS1yZW5kZXJzLlxuICAgIC8vIFdlIG1haW50YWluIHRoaXMgY2FjaGUsIGFuZCBwYXNzIGEgc3R5bGUgcHJvcCByYXRoZXIgdGhhbiBpbmRleCxcbiAgICAvLyBTbyB0aGF0IExpc3QgY2FuIGNsZWFyIGNhY2hlZCBzdHlsZXMgYW5kIGZvcmNlIGl0ZW0gcmUtcmVuZGVyIGlmIG5lY2Vzc2FyeS5cbiAgICBfZ2V0SXRlbVN0eWxlOiAocm93SW5kZXg6IG51bWJlciwgY29sdW1uSW5kZXg6IG51bWJlcikgPT4gT2JqZWN0O1xuICAgIF9nZXRJdGVtU3R5bGUgPSAocm93SW5kZXg6IG51bWJlciwgY29sdW1uSW5kZXg6IG51bWJlcik6IE9iamVjdCA9PiB7XG4gICAgICBjb25zdCB7IGNvbHVtbldpZHRoLCBkaXJlY3Rpb24sIHJvd0hlaWdodCB9ID0gdGhpcy5wcm9wcztcblxuICAgICAgY29uc3QgaXRlbVN0eWxlQ2FjaGUgPSB0aGlzLl9nZXRJdGVtU3R5bGVDYWNoZShcbiAgICAgICAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSAmJiBjb2x1bW5XaWR0aCxcbiAgICAgICAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSAmJiBkaXJlY3Rpb24sXG4gICAgICAgIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UgJiYgcm93SGVpZ2h0XG4gICAgICApO1xuXG4gICAgICBjb25zdCBrZXkgPSBgJHtyb3dJbmRleH06JHtjb2x1bW5JbmRleH1gO1xuXG4gICAgICBsZXQgc3R5bGU7XG4gICAgICBpZiAoaXRlbVN0eWxlQ2FjaGUuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICBzdHlsZSA9IGl0ZW1TdHlsZUNhY2hlW2tleV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBnZXRDb2x1bW5PZmZzZXQoXG4gICAgICAgICAgdGhpcy5wcm9wcyxcbiAgICAgICAgICBjb2x1bW5JbmRleCxcbiAgICAgICAgICB0aGlzLl9pbnN0YW5jZVByb3BzXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGlzUnRsID0gZGlyZWN0aW9uID09PSAncnRsJztcbiAgICAgICAgaXRlbVN0eWxlQ2FjaGVba2V5XSA9IHN0eWxlID0ge1xuICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgIGxlZnQ6IGlzUnRsID8gdW5kZWZpbmVkIDogb2Zmc2V0LFxuICAgICAgICAgIHJpZ2h0OiBpc1J0bCA/IG9mZnNldCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB0b3A6IGdldFJvd09mZnNldCh0aGlzLnByb3BzLCByb3dJbmRleCwgdGhpcy5faW5zdGFuY2VQcm9wcyksXG4gICAgICAgICAgaGVpZ2h0OiBnZXRSb3dIZWlnaHQodGhpcy5wcm9wcywgcm93SW5kZXgsIHRoaXMuX2luc3RhbmNlUHJvcHMpLFxuICAgICAgICAgIHdpZHRoOiBnZXRDb2x1bW5XaWR0aCh0aGlzLnByb3BzLCBjb2x1bW5JbmRleCwgdGhpcy5faW5zdGFuY2VQcm9wcyksXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzdHlsZTtcbiAgICB9O1xuXG4gICAgX2dldEl0ZW1TdHlsZUNhY2hlOiAoXzogYW55LCBfXzogYW55LCBfX186IGFueSkgPT4gSXRlbVN0eWxlQ2FjaGU7XG4gICAgX2dldEl0ZW1TdHlsZUNhY2hlID0gbWVtb2l6ZU9uZSgoXzogYW55LCBfXzogYW55LCBfX186IGFueSkgPT4gKHt9KSk7XG5cbiAgICBfZ2V0SG9yaXpvbnRhbFJhbmdlVG9SZW5kZXIoKTogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0ge1xuICAgICAgY29uc3Qge1xuICAgICAgICBjb2x1bW5Db3VudCxcbiAgICAgICAgb3ZlcnNjYW5Db2x1bW5Db3VudCxcbiAgICAgICAgb3ZlcnNjYW5Db2x1bW5zQ291bnQsXG4gICAgICAgIG92ZXJzY2FuQ291bnQsXG4gICAgICAgIHJvd0NvdW50LFxuICAgICAgfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCB7IGhvcml6b250YWxTY3JvbGxEaXJlY3Rpb24sIGlzU2Nyb2xsaW5nLCBzY3JvbGxMZWZ0IH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgICBjb25zdCBvdmVyc2NhbkNvdW50UmVzb2x2ZWQ6IG51bWJlciA9XG4gICAgICAgIG92ZXJzY2FuQ29sdW1uQ291bnQgfHwgb3ZlcnNjYW5Db2x1bW5zQ291bnQgfHwgb3ZlcnNjYW5Db3VudCB8fCAxO1xuXG4gICAgICBpZiAoY29sdW1uQ291bnQgPT09IDAgfHwgcm93Q291bnQgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIFswLCAwLCAwLCAwXTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3RhcnRJbmRleCA9IGdldENvbHVtblN0YXJ0SW5kZXhGb3JPZmZzZXQoXG4gICAgICAgIHRoaXMucHJvcHMsXG4gICAgICAgIHNjcm9sbExlZnQsXG4gICAgICAgIHRoaXMuX2luc3RhbmNlUHJvcHNcbiAgICAgICk7XG4gICAgICBjb25zdCBzdG9wSW5kZXggPSBnZXRDb2x1bW5TdG9wSW5kZXhGb3JTdGFydEluZGV4KFxuICAgICAgICB0aGlzLnByb3BzLFxuICAgICAgICBzdGFydEluZGV4LFxuICAgICAgICBzY3JvbGxMZWZ0LFxuICAgICAgICB0aGlzLl9pbnN0YW5jZVByb3BzXG4gICAgICApO1xuXG4gICAgICAvLyBPdmVyc2NhbiBieSBvbmUgaXRlbSBpbiBlYWNoIGRpcmVjdGlvbiBzbyB0aGF0IHRhYi9mb2N1cyB3b3Jrcy5cbiAgICAgIC8vIElmIHRoZXJlIGlzbid0IGF0IGxlYXN0IG9uZSBleHRyYSBpdGVtLCB0YWIgbG9vcHMgYmFjayBhcm91bmQuXG4gICAgICBjb25zdCBvdmVyc2NhbkJhY2t3YXJkID1cbiAgICAgICAgIWlzU2Nyb2xsaW5nIHx8IGhvcml6b250YWxTY3JvbGxEaXJlY3Rpb24gPT09ICdiYWNrd2FyZCdcbiAgICAgICAgICA/IE1hdGgubWF4KDEsIG92ZXJzY2FuQ291bnRSZXNvbHZlZClcbiAgICAgICAgICA6IDE7XG4gICAgICBjb25zdCBvdmVyc2NhbkZvcndhcmQgPVxuICAgICAgICAhaXNTY3JvbGxpbmcgfHwgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbiA9PT0gJ2ZvcndhcmQnXG4gICAgICAgICAgPyBNYXRoLm1heCgxLCBvdmVyc2NhbkNvdW50UmVzb2x2ZWQpXG4gICAgICAgICAgOiAxO1xuXG4gICAgICByZXR1cm4gW1xuICAgICAgICBNYXRoLm1heCgwLCBzdGFydEluZGV4IC0gb3ZlcnNjYW5CYWNrd2FyZCksXG4gICAgICAgIE1hdGgubWF4KDAsIE1hdGgubWluKGNvbHVtbkNvdW50IC0gMSwgc3RvcEluZGV4ICsgb3ZlcnNjYW5Gb3J3YXJkKSksXG4gICAgICAgIHN0YXJ0SW5kZXgsXG4gICAgICAgIHN0b3BJbmRleCxcbiAgICAgIF07XG4gICAgfVxuXG4gICAgX2dldFZlcnRpY2FsUmFuZ2VUb1JlbmRlcigpOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGNvbHVtbkNvdW50LFxuICAgICAgICBvdmVyc2NhbkNvdW50LFxuICAgICAgICBvdmVyc2NhblJvd0NvdW50LFxuICAgICAgICBvdmVyc2NhblJvd3NDb3VudCxcbiAgICAgICAgcm93Q291bnQsXG4gICAgICB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IHsgaXNTY3JvbGxpbmcsIHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uLCBzY3JvbGxUb3AgfSA9IHRoaXMuc3RhdGU7XG5cbiAgICAgIGNvbnN0IG92ZXJzY2FuQ291bnRSZXNvbHZlZDogbnVtYmVyID1cbiAgICAgICAgb3ZlcnNjYW5Sb3dDb3VudCB8fCBvdmVyc2NhblJvd3NDb3VudCB8fCBvdmVyc2NhbkNvdW50IHx8IDE7XG5cbiAgICAgIGlmIChjb2x1bW5Db3VudCA9PT0gMCB8fCByb3dDb3VudCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gWzAsIDAsIDAsIDBdO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzdGFydEluZGV4ID0gZ2V0Um93U3RhcnRJbmRleEZvck9mZnNldChcbiAgICAgICAgdGhpcy5wcm9wcyxcbiAgICAgICAgc2Nyb2xsVG9wLFxuICAgICAgICB0aGlzLl9pbnN0YW5jZVByb3BzXG4gICAgICApO1xuICAgICAgY29uc3Qgc3RvcEluZGV4ID0gZ2V0Um93U3RvcEluZGV4Rm9yU3RhcnRJbmRleChcbiAgICAgICAgdGhpcy5wcm9wcyxcbiAgICAgICAgc3RhcnRJbmRleCxcbiAgICAgICAgc2Nyb2xsVG9wLFxuICAgICAgICB0aGlzLl9pbnN0YW5jZVByb3BzXG4gICAgICApO1xuXG4gICAgICAvLyBPdmVyc2NhbiBieSBvbmUgaXRlbSBpbiBlYWNoIGRpcmVjdGlvbiBzbyB0aGF0IHRhYi9mb2N1cyB3b3Jrcy5cbiAgICAgIC8vIElmIHRoZXJlIGlzbid0IGF0IGxlYXN0IG9uZSBleHRyYSBpdGVtLCB0YWIgbG9vcHMgYmFjayBhcm91bmQuXG4gICAgICBjb25zdCBvdmVyc2NhbkJhY2t3YXJkID1cbiAgICAgICAgIWlzU2Nyb2xsaW5nIHx8IHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uID09PSAnYmFja3dhcmQnXG4gICAgICAgICAgPyBNYXRoLm1heCgxLCBvdmVyc2NhbkNvdW50UmVzb2x2ZWQpXG4gICAgICAgICAgOiAxO1xuICAgICAgY29uc3Qgb3ZlcnNjYW5Gb3J3YXJkID1cbiAgICAgICAgIWlzU2Nyb2xsaW5nIHx8IHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uID09PSAnZm9yd2FyZCdcbiAgICAgICAgICA/IE1hdGgubWF4KDEsIG92ZXJzY2FuQ291bnRSZXNvbHZlZClcbiAgICAgICAgICA6IDE7XG5cbiAgICAgIHJldHVybiBbXG4gICAgICAgIE1hdGgubWF4KDAsIHN0YXJ0SW5kZXggLSBvdmVyc2NhbkJhY2t3YXJkKSxcbiAgICAgICAgTWF0aC5tYXgoMCwgTWF0aC5taW4ocm93Q291bnQgLSAxLCBzdG9wSW5kZXggKyBvdmVyc2NhbkZvcndhcmQpKSxcbiAgICAgICAgc3RhcnRJbmRleCxcbiAgICAgICAgc3RvcEluZGV4LFxuICAgICAgXTtcbiAgICB9XG5cbiAgICBfb25TY3JvbGwgPSAoZXZlbnQ6IFNjcm9sbEV2ZW50KTogdm9pZCA9PiB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGNsaWVudEhlaWdodCxcbiAgICAgICAgY2xpZW50V2lkdGgsXG4gICAgICAgIHNjcm9sbExlZnQsXG4gICAgICAgIHNjcm9sbFRvcCxcbiAgICAgICAgc2Nyb2xsSGVpZ2h0LFxuICAgICAgICBzY3JvbGxXaWR0aCxcbiAgICAgIH0gPSBldmVudC5jdXJyZW50VGFyZ2V0O1xuICAgICAgdGhpcy5zZXRTdGF0ZShwcmV2U3RhdGUgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgcHJldlN0YXRlLnNjcm9sbExlZnQgPT09IHNjcm9sbExlZnQgJiZcbiAgICAgICAgICBwcmV2U3RhdGUuc2Nyb2xsVG9wID09PSBzY3JvbGxUb3BcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gU2Nyb2xsIHBvc2l0aW9uIG1heSBoYXZlIGJlZW4gdXBkYXRlZCBieSBjRE0vY0RVLFxuICAgICAgICAgIC8vIEluIHdoaWNoIGNhc2Ugd2UgZG9uJ3QgbmVlZCB0byB0cmlnZ2VyIGFub3RoZXIgcmVuZGVyLFxuICAgICAgICAgIC8vIEFuZCB3ZSBkb24ndCB3YW50IHRvIHVwZGF0ZSBzdGF0ZS5pc1Njcm9sbGluZy5cbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgZGlyZWN0aW9uIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICAgIC8vIFRSSUNLWSBBY2NvcmRpbmcgdG8gdGhlIHNwZWMsIHNjcm9sbExlZnQgc2hvdWxkIGJlIG5lZ2F0aXZlIGZvciBSVEwgYWxpZ25lZCBlbGVtZW50cy5cbiAgICAgICAgLy8gVGhpcyBpcyBub3QgdGhlIGNhc2UgZm9yIGFsbCBicm93c2VycyB0aG91Z2ggKGUuZy4gQ2hyb21lIHJlcG9ydHMgdmFsdWVzIGFzIHBvc2l0aXZlLCBtZWFzdXJlZCByZWxhdGl2ZSB0byB0aGUgbGVmdCkuXG4gICAgICAgIC8vIEl0J3MgYWxzbyBlYXNpZXIgZm9yIHRoaXMgY29tcG9uZW50IGlmIHdlIGNvbnZlcnQgb2Zmc2V0cyB0byB0aGUgc2FtZSBmb3JtYXQgYXMgdGhleSB3b3VsZCBiZSBpbiBmb3IgbHRyLlxuICAgICAgICAvLyBTbyB0aGUgc2ltcGxlc3Qgc29sdXRpb24gaXMgdG8gZGV0ZXJtaW5lIHdoaWNoIGJyb3dzZXIgYmVoYXZpb3Igd2UncmUgZGVhbGluZyB3aXRoLCBhbmQgY29udmVydCBiYXNlZCBvbiBpdC5cbiAgICAgICAgbGV0IGNhbGN1bGF0ZWRTY3JvbGxMZWZ0ID0gc2Nyb2xsTGVmdDtcbiAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ3J0bCcpIHtcbiAgICAgICAgICBzd2l0Y2ggKGdldFJUTE9mZnNldFR5cGUoKSkge1xuICAgICAgICAgICAgY2FzZSAnbmVnYXRpdmUnOlxuICAgICAgICAgICAgICBjYWxjdWxhdGVkU2Nyb2xsTGVmdCA9IC1zY3JvbGxMZWZ0O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3Bvc2l0aXZlLWRlc2NlbmRpbmcnOlxuICAgICAgICAgICAgICBjYWxjdWxhdGVkU2Nyb2xsTGVmdCA9IHNjcm9sbFdpZHRoIC0gY2xpZW50V2lkdGggLSBzY3JvbGxMZWZ0O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcmV2ZW50IFNhZmFyaSdzIGVsYXN0aWMgc2Nyb2xsaW5nIGZyb20gY2F1c2luZyB2aXN1YWwgc2hha2luZyB3aGVuIHNjcm9sbGluZyBwYXN0IGJvdW5kcy5cbiAgICAgICAgY2FsY3VsYXRlZFNjcm9sbExlZnQgPSBNYXRoLm1heChcbiAgICAgICAgICAwLFxuICAgICAgICAgIE1hdGgubWluKGNhbGN1bGF0ZWRTY3JvbGxMZWZ0LCBzY3JvbGxXaWR0aCAtIGNsaWVudFdpZHRoKVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBjYWxjdWxhdGVkU2Nyb2xsVG9wID0gTWF0aC5tYXgoXG4gICAgICAgICAgMCxcbiAgICAgICAgICBNYXRoLm1pbihzY3JvbGxUb3AsIHNjcm9sbEhlaWdodCAtIGNsaWVudEhlaWdodClcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGlzU2Nyb2xsaW5nOiB0cnVlLFxuICAgICAgICAgIGhvcml6b250YWxTY3JvbGxEaXJlY3Rpb246XG4gICAgICAgICAgICBwcmV2U3RhdGUuc2Nyb2xsTGVmdCA8IHNjcm9sbExlZnQgPyAnZm9yd2FyZCcgOiAnYmFja3dhcmQnLFxuICAgICAgICAgIHNjcm9sbExlZnQ6IGNhbGN1bGF0ZWRTY3JvbGxMZWZ0LFxuICAgICAgICAgIHNjcm9sbFRvcDogY2FsY3VsYXRlZFNjcm9sbFRvcCxcbiAgICAgICAgICB2ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbjpcbiAgICAgICAgICAgIHByZXZTdGF0ZS5zY3JvbGxUb3AgPCBzY3JvbGxUb3AgPyAnZm9yd2FyZCcgOiAnYmFja3dhcmQnLFxuICAgICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogZmFsc2UsXG4gICAgICAgIH07XG4gICAgICB9LCB0aGlzLl9yZXNldElzU2Nyb2xsaW5nRGVib3VuY2VkKTtcbiAgICB9O1xuXG4gICAgX291dGVyUmVmU2V0dGVyID0gKHJlZjogYW55KTogdm9pZCA9PiB7XG4gICAgICBjb25zdCB7IG91dGVyUmVmIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICB0aGlzLl9vdXRlclJlZiA9ICgocmVmOiBhbnkpOiBIVE1MRGl2RWxlbWVudCk7XG5cbiAgICAgIGlmICh0eXBlb2Ygb3V0ZXJSZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgb3V0ZXJSZWYocmVmKTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIG91dGVyUmVmICE9IG51bGwgJiZcbiAgICAgICAgdHlwZW9mIG91dGVyUmVmID09PSAnb2JqZWN0JyAmJlxuICAgICAgICBvdXRlclJlZi5oYXNPd25Qcm9wZXJ0eSgnY3VycmVudCcpXG4gICAgICApIHtcbiAgICAgICAgb3V0ZXJSZWYuY3VycmVudCA9IHJlZjtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQgPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCAhPT0gbnVsbCkge1xuICAgICAgICBjYW5jZWxUaW1lb3V0KHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkID0gcmVxdWVzdFRpbWVvdXQoXG4gICAgICAgIHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmcsXG4gICAgICAgIElTX1NDUk9MTElOR19ERUJPVU5DRV9JTlRFUlZBTFxuICAgICAgKTtcbiAgICB9O1xuXG4gICAgX3Jlc2V0SXNTY3JvbGxpbmcgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkID0gbnVsbDtcblxuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGlzU2Nyb2xsaW5nOiBmYWxzZSB9LCAoKSA9PiB7XG4gICAgICAgIC8vIENsZWFyIHN0eWxlIGNhY2hlIGFmdGVyIHN0YXRlIHVwZGF0ZSBoYXMgYmVlbiBjb21taXR0ZWQuXG4gICAgICAgIC8vIFRoaXMgd2F5IHdlIGRvbid0IGJyZWFrIHB1cmUgc0NVIGZvciBpdGVtcyB0aGF0IGRvbid0IHVzZSBpc1Njcm9sbGluZyBwYXJhbS5cbiAgICAgICAgdGhpcy5fZ2V0SXRlbVN0eWxlQ2FjaGUoLTEpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgfTtcbn1cblxuY29uc3QgdmFsaWRhdGVTaGFyZWRQcm9wcyA9IChcbiAge1xuICAgIGNoaWxkcmVuLFxuICAgIGRpcmVjdGlvbixcbiAgICBoZWlnaHQsXG4gICAgaW5uZXJUYWdOYW1lLFxuICAgIG91dGVyVGFnTmFtZSxcbiAgICBvdmVyc2NhbkNvbHVtbnNDb3VudCxcbiAgICBvdmVyc2NhbkNvdW50LFxuICAgIG92ZXJzY2FuUm93c0NvdW50LFxuICAgIHdpZHRoLFxuICB9OiBQcm9wczxhbnk+LFxuICB7IGluc3RhbmNlIH06IFN0YXRlXG4pOiB2b2lkID0+IHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAodHlwZW9mIG92ZXJzY2FuQ291bnQgPT09ICdudW1iZXInKSB7XG4gICAgICBpZiAoZGV2V2FybmluZ3NPdmVyc2NhbkNvdW50ICYmICFkZXZXYXJuaW5nc092ZXJzY2FuQ291bnQuaGFzKGluc3RhbmNlKSkge1xuICAgICAgICBkZXZXYXJuaW5nc092ZXJzY2FuQ291bnQuYWRkKGluc3RhbmNlKTtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICdUaGUgb3ZlcnNjYW5Db3VudCBwcm9wIGhhcyBiZWVuIGRlcHJlY2F0ZWQuICcgK1xuICAgICAgICAgICAgJ1BsZWFzZSB1c2UgdGhlIG92ZXJzY2FuQ29sdW1uQ291bnQgYW5kIG92ZXJzY2FuUm93Q291bnQgcHJvcHMgaW5zdGVhZC4nXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdHlwZW9mIG92ZXJzY2FuQ29sdW1uc0NvdW50ID09PSAnbnVtYmVyJyB8fFxuICAgICAgdHlwZW9mIG92ZXJzY2FuUm93c0NvdW50ID09PSAnbnVtYmVyJ1xuICAgICkge1xuICAgICAgaWYgKFxuICAgICAgICBkZXZXYXJuaW5nc092ZXJzY2FuUm93c0NvbHVtbnNDb3VudCAmJlxuICAgICAgICAhZGV2V2FybmluZ3NPdmVyc2NhblJvd3NDb2x1bW5zQ291bnQuaGFzKGluc3RhbmNlKVxuICAgICAgKSB7XG4gICAgICAgIGRldldhcm5pbmdzT3ZlcnNjYW5Sb3dzQ29sdW1uc0NvdW50LmFkZChpbnN0YW5jZSk7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAnVGhlIG92ZXJzY2FuQ29sdW1uc0NvdW50IGFuZCBvdmVyc2NhblJvd3NDb3VudCBwcm9wcyBoYXZlIGJlZW4gZGVwcmVjYXRlZC4gJyArXG4gICAgICAgICAgICAnUGxlYXNlIHVzZSB0aGUgb3ZlcnNjYW5Db2x1bW5Db3VudCBhbmQgb3ZlcnNjYW5Sb3dDb3VudCBwcm9wcyBpbnN0ZWFkLidcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaW5uZXJUYWdOYW1lICE9IG51bGwgfHwgb3V0ZXJUYWdOYW1lICE9IG51bGwpIHtcbiAgICAgIGlmIChkZXZXYXJuaW5nc1RhZ05hbWUgJiYgIWRldldhcm5pbmdzVGFnTmFtZS5oYXMoaW5zdGFuY2UpKSB7XG4gICAgICAgIGRldldhcm5pbmdzVGFnTmFtZS5hZGQoaW5zdGFuY2UpO1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgJ1RoZSBpbm5lclRhZ05hbWUgYW5kIG91dGVyVGFnTmFtZSBwcm9wcyBoYXZlIGJlZW4gZGVwcmVjYXRlZC4gJyArXG4gICAgICAgICAgICAnUGxlYXNlIHVzZSB0aGUgaW5uZXJFbGVtZW50VHlwZSBhbmQgb3V0ZXJFbGVtZW50VHlwZSBwcm9wcyBpbnN0ZWFkLidcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2hpbGRyZW4gPT0gbnVsbCkge1xuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICdBbiBpbnZhbGlkIFwiY2hpbGRyZW5cIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArXG4gICAgICAgICAgJ1ZhbHVlIHNob3VsZCBiZSBhIFJlYWN0IGNvbXBvbmVudC4gJyArXG4gICAgICAgICAgYFwiJHtjaGlsZHJlbiA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiBjaGlsZHJlbn1cIiB3YXMgc3BlY2lmaWVkLmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgc3dpdGNoIChkaXJlY3Rpb24pIHtcbiAgICAgIGNhc2UgJ2x0cic6XG4gICAgICBjYXNlICdydGwnOlxuICAgICAgICAvLyBWYWxpZCB2YWx1ZXNcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAnQW4gaW52YWxpZCBcImRpcmVjdGlvblwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICtcbiAgICAgICAgICAgICdWYWx1ZSBzaG91bGQgYmUgZWl0aGVyIFwibHRyXCIgb3IgXCJydGxcIi4gJyArXG4gICAgICAgICAgICBgXCIke2RpcmVjdGlvbn1cIiB3YXMgc3BlY2lmaWVkLmBcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHdpZHRoICE9PSAnbnVtYmVyJykge1xuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICdBbiBpbnZhbGlkIFwid2lkdGhcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArXG4gICAgICAgICAgJ0dyaWRzIG11c3Qgc3BlY2lmeSBhIG51bWJlciBmb3Igd2lkdGguICcgK1xuICAgICAgICAgIGBcIiR7d2lkdGggPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2Ygd2lkdGh9XCIgd2FzIHNwZWNpZmllZC5gXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaGVpZ2h0ICE9PSAnbnVtYmVyJykge1xuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICdBbiBpbnZhbGlkIFwiaGVpZ2h0XCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgK1xuICAgICAgICAgICdHcmlkcyBtdXN0IHNwZWNpZnkgYSBudW1iZXIgZm9yIGhlaWdodC4gJyArXG4gICAgICAgICAgYFwiJHtoZWlnaHQgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgaGVpZ2h0fVwiIHdhcyBzcGVjaWZpZWQuYFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn07XG4iLCAiLy8gQGZsb3dcblxuaW1wb3J0IGNyZWF0ZUdyaWRDb21wb25lbnQgZnJvbSAnLi9jcmVhdGVHcmlkQ29tcG9uZW50JztcblxuaW1wb3J0IHR5cGUgeyBQcm9wcywgU2Nyb2xsVG9BbGlnbiB9IGZyb20gJy4vY3JlYXRlR3JpZENvbXBvbmVudCc7XG5cbmNvbnN0IERFRkFVTFRfRVNUSU1BVEVEX0lURU1fU0laRSA9IDUwO1xuXG50eXBlIFZhcmlhYmxlU2l6ZVByb3BzID0ge3xcbiAgZXN0aW1hdGVkQ29sdW1uV2lkdGg6IG51bWJlcixcbiAgZXN0aW1hdGVkUm93SGVpZ2h0OiBudW1iZXIsXG4gIC4uLlByb3BzPGFueT4sXG58fTtcblxudHlwZSBpdGVtU2l6ZUdldHRlciA9IChpbmRleDogbnVtYmVyKSA9PiBudW1iZXI7XG50eXBlIEl0ZW1UeXBlID0gJ2NvbHVtbicgfCAncm93JztcblxudHlwZSBJdGVtTWV0YWRhdGEgPSB7fFxuICBvZmZzZXQ6IG51bWJlcixcbiAgc2l6ZTogbnVtYmVyLFxufH07XG50eXBlIEl0ZW1NZXRhZGF0YU1hcCA9IHsgW2luZGV4OiBudW1iZXJdOiBJdGVtTWV0YWRhdGEgfTtcbnR5cGUgSW5zdGFuY2VQcm9wcyA9IHt8XG4gIGNvbHVtbk1ldGFkYXRhTWFwOiBJdGVtTWV0YWRhdGFNYXAsXG4gIGVzdGltYXRlZENvbHVtbldpZHRoOiBudW1iZXIsXG4gIGVzdGltYXRlZFJvd0hlaWdodDogbnVtYmVyLFxuICBsYXN0TWVhc3VyZWRDb2x1bW5JbmRleDogbnVtYmVyLFxuICBsYXN0TWVhc3VyZWRSb3dJbmRleDogbnVtYmVyLFxuICByb3dNZXRhZGF0YU1hcDogSXRlbU1ldGFkYXRhTWFwLFxufH07XG5cbmNvbnN0IGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0ID0gKFxuICB7IHJvd0NvdW50IH06IFByb3BzPGFueT4sXG4gIHsgcm93TWV0YWRhdGFNYXAsIGVzdGltYXRlZFJvd0hlaWdodCwgbGFzdE1lYXN1cmVkUm93SW5kZXggfTogSW5zdGFuY2VQcm9wc1xuKSA9PiB7XG4gIGxldCB0b3RhbFNpemVPZk1lYXN1cmVkUm93cyA9IDA7XG5cbiAgLy8gRWRnZSBjYXNlIGNoZWNrIGZvciB3aGVuIHRoZSBudW1iZXIgb2YgaXRlbXMgZGVjcmVhc2VzIHdoaWxlIGEgc2Nyb2xsIGlzIGluIHByb2dyZXNzLlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vYnZhdWdobi9yZWFjdC13aW5kb3cvcHVsbC8xMzhcbiAgaWYgKGxhc3RNZWFzdXJlZFJvd0luZGV4ID49IHJvd0NvdW50KSB7XG4gICAgbGFzdE1lYXN1cmVkUm93SW5kZXggPSByb3dDb3VudCAtIDE7XG4gIH1cblxuICBpZiAobGFzdE1lYXN1cmVkUm93SW5kZXggPj0gMCkge1xuICAgIGNvbnN0IGl0ZW1NZXRhZGF0YSA9IHJvd01ldGFkYXRhTWFwW2xhc3RNZWFzdXJlZFJvd0luZGV4XTtcbiAgICB0b3RhbFNpemVPZk1lYXN1cmVkUm93cyA9IGl0ZW1NZXRhZGF0YS5vZmZzZXQgKyBpdGVtTWV0YWRhdGEuc2l6ZTtcbiAgfVxuXG4gIGNvbnN0IG51bVVubWVhc3VyZWRJdGVtcyA9IHJvd0NvdW50IC0gbGFzdE1lYXN1cmVkUm93SW5kZXggLSAxO1xuICBjb25zdCB0b3RhbFNpemVPZlVubWVhc3VyZWRJdGVtcyA9IG51bVVubWVhc3VyZWRJdGVtcyAqIGVzdGltYXRlZFJvd0hlaWdodDtcblxuICByZXR1cm4gdG90YWxTaXplT2ZNZWFzdXJlZFJvd3MgKyB0b3RhbFNpemVPZlVubWVhc3VyZWRJdGVtcztcbn07XG5cbmNvbnN0IGdldEVzdGltYXRlZFRvdGFsV2lkdGggPSAoXG4gIHsgY29sdW1uQ291bnQgfTogUHJvcHM8YW55PixcbiAge1xuICAgIGNvbHVtbk1ldGFkYXRhTWFwLFxuICAgIGVzdGltYXRlZENvbHVtbldpZHRoLFxuICAgIGxhc3RNZWFzdXJlZENvbHVtbkluZGV4LFxuICB9OiBJbnN0YW5jZVByb3BzXG4pID0+IHtcbiAgbGV0IHRvdGFsU2l6ZU9mTWVhc3VyZWRSb3dzID0gMDtcblxuICAvLyBFZGdlIGNhc2UgY2hlY2sgZm9yIHdoZW4gdGhlIG51bWJlciBvZiBpdGVtcyBkZWNyZWFzZXMgd2hpbGUgYSBzY3JvbGwgaXMgaW4gcHJvZ3Jlc3MuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9idmF1Z2huL3JlYWN0LXdpbmRvdy9wdWxsLzEzOFxuICBpZiAobGFzdE1lYXN1cmVkQ29sdW1uSW5kZXggPj0gY29sdW1uQ291bnQpIHtcbiAgICBsYXN0TWVhc3VyZWRDb2x1bW5JbmRleCA9IGNvbHVtbkNvdW50IC0gMTtcbiAgfVxuXG4gIGlmIChsYXN0TWVhc3VyZWRDb2x1bW5JbmRleCA+PSAwKSB7XG4gICAgY29uc3QgaXRlbU1ldGFkYXRhID0gY29sdW1uTWV0YWRhdGFNYXBbbGFzdE1lYXN1cmVkQ29sdW1uSW5kZXhdO1xuICAgIHRvdGFsU2l6ZU9mTWVhc3VyZWRSb3dzID0gaXRlbU1ldGFkYXRhLm9mZnNldCArIGl0ZW1NZXRhZGF0YS5zaXplO1xuICB9XG5cbiAgY29uc3QgbnVtVW5tZWFzdXJlZEl0ZW1zID0gY29sdW1uQ291bnQgLSBsYXN0TWVhc3VyZWRDb2x1bW5JbmRleCAtIDE7XG4gIGNvbnN0IHRvdGFsU2l6ZU9mVW5tZWFzdXJlZEl0ZW1zID0gbnVtVW5tZWFzdXJlZEl0ZW1zICogZXN0aW1hdGVkQ29sdW1uV2lkdGg7XG5cbiAgcmV0dXJuIHRvdGFsU2l6ZU9mTWVhc3VyZWRSb3dzICsgdG90YWxTaXplT2ZVbm1lYXN1cmVkSXRlbXM7XG59O1xuXG5jb25zdCBnZXRJdGVtTWV0YWRhdGEgPSAoXG4gIGl0ZW1UeXBlOiBJdGVtVHlwZSxcbiAgcHJvcHM6IFByb3BzPGFueT4sXG4gIGluZGV4OiBudW1iZXIsXG4gIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHNcbik6IEl0ZW1NZXRhZGF0YSA9PiB7XG4gIGxldCBpdGVtTWV0YWRhdGFNYXAsIGl0ZW1TaXplLCBsYXN0TWVhc3VyZWRJbmRleDtcbiAgaWYgKGl0ZW1UeXBlID09PSAnY29sdW1uJykge1xuICAgIGl0ZW1NZXRhZGF0YU1hcCA9IGluc3RhbmNlUHJvcHMuY29sdW1uTWV0YWRhdGFNYXA7XG4gICAgaXRlbVNpemUgPSAoKHByb3BzLmNvbHVtbldpZHRoOiBhbnkpOiBpdGVtU2l6ZUdldHRlcik7XG4gICAgbGFzdE1lYXN1cmVkSW5kZXggPSBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZENvbHVtbkluZGV4O1xuICB9IGVsc2Uge1xuICAgIGl0ZW1NZXRhZGF0YU1hcCA9IGluc3RhbmNlUHJvcHMucm93TWV0YWRhdGFNYXA7XG4gICAgaXRlbVNpemUgPSAoKHByb3BzLnJvd0hlaWdodDogYW55KTogaXRlbVNpemVHZXR0ZXIpO1xuICAgIGxhc3RNZWFzdXJlZEluZGV4ID0gaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRSb3dJbmRleDtcbiAgfVxuXG4gIGlmIChpbmRleCA+IGxhc3RNZWFzdXJlZEluZGV4KSB7XG4gICAgbGV0IG9mZnNldCA9IDA7XG4gICAgaWYgKGxhc3RNZWFzdXJlZEluZGV4ID49IDApIHtcbiAgICAgIGNvbnN0IGl0ZW1NZXRhZGF0YSA9IGl0ZW1NZXRhZGF0YU1hcFtsYXN0TWVhc3VyZWRJbmRleF07XG4gICAgICBvZmZzZXQgPSBpdGVtTWV0YWRhdGEub2Zmc2V0ICsgaXRlbU1ldGFkYXRhLnNpemU7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IGxhc3RNZWFzdXJlZEluZGV4ICsgMTsgaSA8PSBpbmRleDsgaSsrKSB7XG4gICAgICBsZXQgc2l6ZSA9IGl0ZW1TaXplKGkpO1xuXG4gICAgICBpdGVtTWV0YWRhdGFNYXBbaV0gPSB7XG4gICAgICAgIG9mZnNldCxcbiAgICAgICAgc2l6ZSxcbiAgICAgIH07XG5cbiAgICAgIG9mZnNldCArPSBzaXplO1xuICAgIH1cblxuICAgIGlmIChpdGVtVHlwZSA9PT0gJ2NvbHVtbicpIHtcbiAgICAgIGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkQ29sdW1uSW5kZXggPSBpbmRleDtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRSb3dJbmRleCA9IGluZGV4O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpdGVtTWV0YWRhdGFNYXBbaW5kZXhdO1xufTtcblxuY29uc3QgZmluZE5lYXJlc3RJdGVtID0gKFxuICBpdGVtVHlwZTogSXRlbVR5cGUsXG4gIHByb3BzOiBQcm9wczxhbnk+LFxuICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzLFxuICBvZmZzZXQ6IG51bWJlclxuKSA9PiB7XG4gIGxldCBpdGVtTWV0YWRhdGFNYXAsIGxhc3RNZWFzdXJlZEluZGV4O1xuICBpZiAoaXRlbVR5cGUgPT09ICdjb2x1bW4nKSB7XG4gICAgaXRlbU1ldGFkYXRhTWFwID0gaW5zdGFuY2VQcm9wcy5jb2x1bW5NZXRhZGF0YU1hcDtcbiAgICBsYXN0TWVhc3VyZWRJbmRleCA9IGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkQ29sdW1uSW5kZXg7XG4gIH0gZWxzZSB7XG4gICAgaXRlbU1ldGFkYXRhTWFwID0gaW5zdGFuY2VQcm9wcy5yb3dNZXRhZGF0YU1hcDtcbiAgICBsYXN0TWVhc3VyZWRJbmRleCA9IGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkUm93SW5kZXg7XG4gIH1cblxuICBjb25zdCBsYXN0TWVhc3VyZWRJdGVtT2Zmc2V0ID1cbiAgICBsYXN0TWVhc3VyZWRJbmRleCA+IDAgPyBpdGVtTWV0YWRhdGFNYXBbbGFzdE1lYXN1cmVkSW5kZXhdLm9mZnNldCA6IDA7XG5cbiAgaWYgKGxhc3RNZWFzdXJlZEl0ZW1PZmZzZXQgPj0gb2Zmc2V0KSB7XG4gICAgLy8gSWYgd2UndmUgYWxyZWFkeSBtZWFzdXJlZCBpdGVtcyB3aXRoaW4gdGhpcyByYW5nZSBqdXN0IHVzZSBhIGJpbmFyeSBzZWFyY2ggYXMgaXQncyBmYXN0ZXIuXG4gICAgcmV0dXJuIGZpbmROZWFyZXN0SXRlbUJpbmFyeVNlYXJjaChcbiAgICAgIGl0ZW1UeXBlLFxuICAgICAgcHJvcHMsXG4gICAgICBpbnN0YW5jZVByb3BzLFxuICAgICAgbGFzdE1lYXN1cmVkSW5kZXgsXG4gICAgICAwLFxuICAgICAgb2Zmc2V0XG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBJZiB3ZSBoYXZlbid0IHlldCBtZWFzdXJlZCB0aGlzIGhpZ2gsIGZhbGxiYWNrIHRvIGFuIGV4cG9uZW50aWFsIHNlYXJjaCB3aXRoIGFuIGlubmVyIGJpbmFyeSBzZWFyY2guXG4gICAgLy8gVGhlIGV4cG9uZW50aWFsIHNlYXJjaCBhdm9pZHMgcHJlLWNvbXB1dGluZyBzaXplcyBmb3IgdGhlIGZ1bGwgc2V0IG9mIGl0ZW1zIGFzIGEgYmluYXJ5IHNlYXJjaCB3b3VsZC5cbiAgICAvLyBUaGUgb3ZlcmFsbCBjb21wbGV4aXR5IGZvciB0aGlzIGFwcHJvYWNoIGlzIE8obG9nIG4pLlxuICAgIHJldHVybiBmaW5kTmVhcmVzdEl0ZW1FeHBvbmVudGlhbFNlYXJjaChcbiAgICAgIGl0ZW1UeXBlLFxuICAgICAgcHJvcHMsXG4gICAgICBpbnN0YW5jZVByb3BzLFxuICAgICAgTWF0aC5tYXgoMCwgbGFzdE1lYXN1cmVkSW5kZXgpLFxuICAgICAgb2Zmc2V0XG4gICAgKTtcbiAgfVxufTtcblxuY29uc3QgZmluZE5lYXJlc3RJdGVtQmluYXJ5U2VhcmNoID0gKFxuICBpdGVtVHlwZTogSXRlbVR5cGUsXG4gIHByb3BzOiBQcm9wczxhbnk+LFxuICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzLFxuICBoaWdoOiBudW1iZXIsXG4gIGxvdzogbnVtYmVyLFxuICBvZmZzZXQ6IG51bWJlclxuKTogbnVtYmVyID0+IHtcbiAgd2hpbGUgKGxvdyA8PSBoaWdoKSB7XG4gICAgY29uc3QgbWlkZGxlID0gbG93ICsgTWF0aC5mbG9vcigoaGlnaCAtIGxvdykgLyAyKTtcbiAgICBjb25zdCBjdXJyZW50T2Zmc2V0ID0gZ2V0SXRlbU1ldGFkYXRhKFxuICAgICAgaXRlbVR5cGUsXG4gICAgICBwcm9wcyxcbiAgICAgIG1pZGRsZSxcbiAgICAgIGluc3RhbmNlUHJvcHNcbiAgICApLm9mZnNldDtcblxuICAgIGlmIChjdXJyZW50T2Zmc2V0ID09PSBvZmZzZXQpIHtcbiAgICAgIHJldHVybiBtaWRkbGU7XG4gICAgfSBlbHNlIGlmIChjdXJyZW50T2Zmc2V0IDwgb2Zmc2V0KSB7XG4gICAgICBsb3cgPSBtaWRkbGUgKyAxO1xuICAgIH0gZWxzZSBpZiAoY3VycmVudE9mZnNldCA+IG9mZnNldCkge1xuICAgICAgaGlnaCA9IG1pZGRsZSAtIDE7XG4gICAgfVxuICB9XG5cbiAgaWYgKGxvdyA+IDApIHtcbiAgICByZXR1cm4gbG93IC0gMTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gMDtcbiAgfVxufTtcblxuY29uc3QgZmluZE5lYXJlc3RJdGVtRXhwb25lbnRpYWxTZWFyY2ggPSAoXG4gIGl0ZW1UeXBlOiBJdGVtVHlwZSxcbiAgcHJvcHM6IFByb3BzPGFueT4sXG4gIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHMsXG4gIGluZGV4OiBudW1iZXIsXG4gIG9mZnNldDogbnVtYmVyXG4pOiBudW1iZXIgPT4ge1xuICBjb25zdCBpdGVtQ291bnQgPSBpdGVtVHlwZSA9PT0gJ2NvbHVtbicgPyBwcm9wcy5jb2x1bW5Db3VudCA6IHByb3BzLnJvd0NvdW50O1xuICBsZXQgaW50ZXJ2YWwgPSAxO1xuXG4gIHdoaWxlIChcbiAgICBpbmRleCA8IGl0ZW1Db3VudCAmJlxuICAgIGdldEl0ZW1NZXRhZGF0YShpdGVtVHlwZSwgcHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKS5vZmZzZXQgPCBvZmZzZXRcbiAgKSB7XG4gICAgaW5kZXggKz0gaW50ZXJ2YWw7XG4gICAgaW50ZXJ2YWwgKj0gMjtcbiAgfVxuXG4gIHJldHVybiBmaW5kTmVhcmVzdEl0ZW1CaW5hcnlTZWFyY2goXG4gICAgaXRlbVR5cGUsXG4gICAgcHJvcHMsXG4gICAgaW5zdGFuY2VQcm9wcyxcbiAgICBNYXRoLm1pbihpbmRleCwgaXRlbUNvdW50IC0gMSksXG4gICAgTWF0aC5mbG9vcihpbmRleCAvIDIpLFxuICAgIG9mZnNldFxuICApO1xufTtcblxuY29uc3QgZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQgPSAoXG4gIGl0ZW1UeXBlOiBJdGVtVHlwZSxcbiAgcHJvcHM6IFByb3BzPGFueT4sXG4gIGluZGV4OiBudW1iZXIsXG4gIGFsaWduOiBTY3JvbGxUb0FsaWduLFxuICBzY3JvbGxPZmZzZXQ6IG51bWJlcixcbiAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wcyxcbiAgc2Nyb2xsYmFyU2l6ZTogbnVtYmVyXG4pOiBudW1iZXIgPT4ge1xuICBjb25zdCBzaXplID0gaXRlbVR5cGUgPT09ICdjb2x1bW4nID8gcHJvcHMud2lkdGggOiBwcm9wcy5oZWlnaHQ7XG4gIGNvbnN0IGl0ZW1NZXRhZGF0YSA9IGdldEl0ZW1NZXRhZGF0YShpdGVtVHlwZSwgcHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKTtcblxuICAvLyBHZXQgZXN0aW1hdGVkIHRvdGFsIHNpemUgYWZ0ZXIgSXRlbU1ldGFkYXRhIGlzIGNvbXB1dGVkLFxuICAvLyBUbyBlbnN1cmUgaXQgcmVmbGVjdHMgYWN0dWFsIG1lYXN1cmVtZW50cyBpbnN0ZWFkIG9mIGp1c3QgZXN0aW1hdGVzLlxuICBjb25zdCBlc3RpbWF0ZWRUb3RhbFNpemUgPVxuICAgIGl0ZW1UeXBlID09PSAnY29sdW1uJ1xuICAgICAgPyBnZXRFc3RpbWF0ZWRUb3RhbFdpZHRoKHByb3BzLCBpbnN0YW5jZVByb3BzKVxuICAgICAgOiBnZXRFc3RpbWF0ZWRUb3RhbEhlaWdodChwcm9wcywgaW5zdGFuY2VQcm9wcyk7XG5cbiAgY29uc3QgbWF4T2Zmc2V0ID0gTWF0aC5tYXgoXG4gICAgMCxcbiAgICBNYXRoLm1pbihlc3RpbWF0ZWRUb3RhbFNpemUgLSBzaXplLCBpdGVtTWV0YWRhdGEub2Zmc2V0KVxuICApO1xuICBjb25zdCBtaW5PZmZzZXQgPSBNYXRoLm1heChcbiAgICAwLFxuICAgIGl0ZW1NZXRhZGF0YS5vZmZzZXQgLSBzaXplICsgc2Nyb2xsYmFyU2l6ZSArIGl0ZW1NZXRhZGF0YS5zaXplXG4gICk7XG5cbiAgaWYgKGFsaWduID09PSAnc21hcnQnKSB7XG4gICAgaWYgKHNjcm9sbE9mZnNldCA+PSBtaW5PZmZzZXQgLSBzaXplICYmIHNjcm9sbE9mZnNldCA8PSBtYXhPZmZzZXQgKyBzaXplKSB7XG4gICAgICBhbGlnbiA9ICdhdXRvJztcbiAgICB9IGVsc2Uge1xuICAgICAgYWxpZ24gPSAnY2VudGVyJztcbiAgICB9XG4gIH1cblxuICBzd2l0Y2ggKGFsaWduKSB7XG4gICAgY2FzZSAnc3RhcnQnOlxuICAgICAgcmV0dXJuIG1heE9mZnNldDtcbiAgICBjYXNlICdlbmQnOlxuICAgICAgcmV0dXJuIG1pbk9mZnNldDtcbiAgICBjYXNlICdjZW50ZXInOlxuICAgICAgcmV0dXJuIE1hdGgucm91bmQobWluT2Zmc2V0ICsgKG1heE9mZnNldCAtIG1pbk9mZnNldCkgLyAyKTtcbiAgICBjYXNlICdhdXRvJzpcbiAgICBkZWZhdWx0OlxuICAgICAgaWYgKHNjcm9sbE9mZnNldCA+PSBtaW5PZmZzZXQgJiYgc2Nyb2xsT2Zmc2V0IDw9IG1heE9mZnNldCkge1xuICAgICAgICByZXR1cm4gc2Nyb2xsT2Zmc2V0O1xuICAgICAgfSBlbHNlIGlmIChtaW5PZmZzZXQgPiBtYXhPZmZzZXQpIHtcbiAgICAgICAgLy8gQmVjYXVzZSB3ZSBvbmx5IHRha2UgaW50byBhY2NvdW50IHRoZSBzY3JvbGxiYXIgc2l6ZSB3aGVuIGNhbGN1bGF0aW5nIG1pbk9mZnNldFxuICAgICAgICAvLyB0aGlzIHZhbHVlIGNhbiBiZSBsYXJnZXIgdGhhbiBtYXhPZmZzZXQgd2hlbiBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0XG4gICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICB9IGVsc2UgaWYgKHNjcm9sbE9mZnNldCA8IG1pbk9mZnNldCkge1xuICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcbiAgICAgIH1cbiAgfVxufTtcblxuY29uc3QgVmFyaWFibGVTaXplR3JpZCA9IGNyZWF0ZUdyaWRDb21wb25lbnQoe1xuICBnZXRDb2x1bW5PZmZzZXQ6IChcbiAgICBwcm9wczogUHJvcHM8YW55PixcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHNcbiAgKTogbnVtYmVyID0+IGdldEl0ZW1NZXRhZGF0YSgnY29sdW1uJywgcHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKS5vZmZzZXQsXG5cbiAgZ2V0Q29sdW1uU3RhcnRJbmRleEZvck9mZnNldDogKFxuICAgIHByb3BzOiBQcm9wczxhbnk+LFxuICAgIHNjcm9sbExlZnQ6IG51bWJlcixcbiAgICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzXG4gICk6IG51bWJlciA9PiBmaW5kTmVhcmVzdEl0ZW0oJ2NvbHVtbicsIHByb3BzLCBpbnN0YW5jZVByb3BzLCBzY3JvbGxMZWZ0KSxcblxuICBnZXRDb2x1bW5TdG9wSW5kZXhGb3JTdGFydEluZGV4OiAoXG4gICAgcHJvcHM6IFByb3BzPGFueT4sXG4gICAgc3RhcnRJbmRleDogbnVtYmVyLFxuICAgIHNjcm9sbExlZnQ6IG51bWJlcixcbiAgICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzXG4gICk6IG51bWJlciA9PiB7XG4gICAgY29uc3QgeyBjb2x1bW5Db3VudCwgd2lkdGggfSA9IHByb3BzO1xuXG4gICAgY29uc3QgaXRlbU1ldGFkYXRhID0gZ2V0SXRlbU1ldGFkYXRhKFxuICAgICAgJ2NvbHVtbicsXG4gICAgICBwcm9wcyxcbiAgICAgIHN0YXJ0SW5kZXgsXG4gICAgICBpbnN0YW5jZVByb3BzXG4gICAgKTtcbiAgICBjb25zdCBtYXhPZmZzZXQgPSBzY3JvbGxMZWZ0ICsgd2lkdGg7XG5cbiAgICBsZXQgb2Zmc2V0ID0gaXRlbU1ldGFkYXRhLm9mZnNldCArIGl0ZW1NZXRhZGF0YS5zaXplO1xuICAgIGxldCBzdG9wSW5kZXggPSBzdGFydEluZGV4O1xuXG4gICAgd2hpbGUgKHN0b3BJbmRleCA8IGNvbHVtbkNvdW50IC0gMSAmJiBvZmZzZXQgPCBtYXhPZmZzZXQpIHtcbiAgICAgIHN0b3BJbmRleCsrO1xuICAgICAgb2Zmc2V0ICs9IGdldEl0ZW1NZXRhZGF0YSgnY29sdW1uJywgcHJvcHMsIHN0b3BJbmRleCwgaW5zdGFuY2VQcm9wcykuc2l6ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RvcEluZGV4O1xuICB9LFxuXG4gIGdldENvbHVtbldpZHRoOiAoXG4gICAgcHJvcHM6IFByb3BzPGFueT4sXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzXG4gICk6IG51bWJlciA9PiBpbnN0YW5jZVByb3BzLmNvbHVtbk1ldGFkYXRhTWFwW2luZGV4XS5zaXplLFxuXG4gIGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0LFxuICBnZXRFc3RpbWF0ZWRUb3RhbFdpZHRoLFxuXG4gIGdldE9mZnNldEZvckNvbHVtbkFuZEFsaWdubWVudDogKFxuICAgIHByb3BzOiBQcm9wczxhbnk+LFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgYWxpZ246IFNjcm9sbFRvQWxpZ24sXG4gICAgc2Nyb2xsT2Zmc2V0OiBudW1iZXIsXG4gICAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wcyxcbiAgICBzY3JvbGxiYXJTaXplOiBudW1iZXJcbiAgKTogbnVtYmVyID0+XG4gICAgZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQoXG4gICAgICAnY29sdW1uJyxcbiAgICAgIHByb3BzLFxuICAgICAgaW5kZXgsXG4gICAgICBhbGlnbixcbiAgICAgIHNjcm9sbE9mZnNldCxcbiAgICAgIGluc3RhbmNlUHJvcHMsXG4gICAgICBzY3JvbGxiYXJTaXplXG4gICAgKSxcblxuICBnZXRPZmZzZXRGb3JSb3dBbmRBbGlnbm1lbnQ6IChcbiAgICBwcm9wczogUHJvcHM8YW55PixcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGFsaWduOiBTY3JvbGxUb0FsaWduLFxuICAgIHNjcm9sbE9mZnNldDogbnVtYmVyLFxuICAgIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHMsXG4gICAgc2Nyb2xsYmFyU2l6ZTogbnVtYmVyXG4gICk6IG51bWJlciA9PlxuICAgIGdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50KFxuICAgICAgJ3JvdycsXG4gICAgICBwcm9wcyxcbiAgICAgIGluZGV4LFxuICAgICAgYWxpZ24sXG4gICAgICBzY3JvbGxPZmZzZXQsXG4gICAgICBpbnN0YW5jZVByb3BzLFxuICAgICAgc2Nyb2xsYmFyU2l6ZVxuICAgICksXG5cbiAgZ2V0Um93T2Zmc2V0OiAoXG4gICAgcHJvcHM6IFByb3BzPGFueT4sXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzXG4gICk6IG51bWJlciA9PiBnZXRJdGVtTWV0YWRhdGEoJ3JvdycsIHByb3BzLCBpbmRleCwgaW5zdGFuY2VQcm9wcykub2Zmc2V0LFxuXG4gIGdldFJvd0hlaWdodDogKFxuICAgIHByb3BzOiBQcm9wczxhbnk+LFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wc1xuICApOiBudW1iZXIgPT4gaW5zdGFuY2VQcm9wcy5yb3dNZXRhZGF0YU1hcFtpbmRleF0uc2l6ZSxcblxuICBnZXRSb3dTdGFydEluZGV4Rm9yT2Zmc2V0OiAoXG4gICAgcHJvcHM6IFByb3BzPGFueT4sXG4gICAgc2Nyb2xsVG9wOiBudW1iZXIsXG4gICAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wc1xuICApOiBudW1iZXIgPT4gZmluZE5lYXJlc3RJdGVtKCdyb3cnLCBwcm9wcywgaW5zdGFuY2VQcm9wcywgc2Nyb2xsVG9wKSxcblxuICBnZXRSb3dTdG9wSW5kZXhGb3JTdGFydEluZGV4OiAoXG4gICAgcHJvcHM6IFByb3BzPGFueT4sXG4gICAgc3RhcnRJbmRleDogbnVtYmVyLFxuICAgIHNjcm9sbFRvcDogbnVtYmVyLFxuICAgIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHNcbiAgKTogbnVtYmVyID0+IHtcbiAgICBjb25zdCB7IHJvd0NvdW50LCBoZWlnaHQgfSA9IHByb3BzO1xuXG4gICAgY29uc3QgaXRlbU1ldGFkYXRhID0gZ2V0SXRlbU1ldGFkYXRhKFxuICAgICAgJ3JvdycsXG4gICAgICBwcm9wcyxcbiAgICAgIHN0YXJ0SW5kZXgsXG4gICAgICBpbnN0YW5jZVByb3BzXG4gICAgKTtcbiAgICBjb25zdCBtYXhPZmZzZXQgPSBzY3JvbGxUb3AgKyBoZWlnaHQ7XG5cbiAgICBsZXQgb2Zmc2V0ID0gaXRlbU1ldGFkYXRhLm9mZnNldCArIGl0ZW1NZXRhZGF0YS5zaXplO1xuICAgIGxldCBzdG9wSW5kZXggPSBzdGFydEluZGV4O1xuXG4gICAgd2hpbGUgKHN0b3BJbmRleCA8IHJvd0NvdW50IC0gMSAmJiBvZmZzZXQgPCBtYXhPZmZzZXQpIHtcbiAgICAgIHN0b3BJbmRleCsrO1xuICAgICAgb2Zmc2V0ICs9IGdldEl0ZW1NZXRhZGF0YSgncm93JywgcHJvcHMsIHN0b3BJbmRleCwgaW5zdGFuY2VQcm9wcykuc2l6ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RvcEluZGV4O1xuICB9LFxuXG4gIGluaXRJbnN0YW5jZVByb3BzKHByb3BzOiBQcm9wczxhbnk+LCBpbnN0YW5jZTogYW55KTogSW5zdGFuY2VQcm9wcyB7XG4gICAgY29uc3Qge1xuICAgICAgZXN0aW1hdGVkQ29sdW1uV2lkdGgsXG4gICAgICBlc3RpbWF0ZWRSb3dIZWlnaHQsXG4gICAgfSA9ICgocHJvcHM6IGFueSk6IFZhcmlhYmxlU2l6ZVByb3BzKTtcblxuICAgIGNvbnN0IGluc3RhbmNlUHJvcHMgPSB7XG4gICAgICBjb2x1bW5NZXRhZGF0YU1hcDoge30sXG4gICAgICBlc3RpbWF0ZWRDb2x1bW5XaWR0aDogZXN0aW1hdGVkQ29sdW1uV2lkdGggfHwgREVGQVVMVF9FU1RJTUFURURfSVRFTV9TSVpFLFxuICAgICAgZXN0aW1hdGVkUm93SGVpZ2h0OiBlc3RpbWF0ZWRSb3dIZWlnaHQgfHwgREVGQVVMVF9FU1RJTUFURURfSVRFTV9TSVpFLFxuICAgICAgbGFzdE1lYXN1cmVkQ29sdW1uSW5kZXg6IC0xLFxuICAgICAgbGFzdE1lYXN1cmVkUm93SW5kZXg6IC0xLFxuICAgICAgcm93TWV0YWRhdGFNYXA6IHt9LFxuICAgIH07XG5cbiAgICBpbnN0YW5jZS5yZXNldEFmdGVyQ29sdW1uSW5kZXggPSAoXG4gICAgICBjb2x1bW5JbmRleDogbnVtYmVyLFxuICAgICAgc2hvdWxkRm9yY2VVcGRhdGU/OiBib29sZWFuID0gdHJ1ZVxuICAgICkgPT4ge1xuICAgICAgaW5zdGFuY2UucmVzZXRBZnRlckluZGljZXMoeyBjb2x1bW5JbmRleCwgc2hvdWxkRm9yY2VVcGRhdGUgfSk7XG4gICAgfTtcblxuICAgIGluc3RhbmNlLnJlc2V0QWZ0ZXJSb3dJbmRleCA9IChcbiAgICAgIHJvd0luZGV4OiBudW1iZXIsXG4gICAgICBzaG91bGRGb3JjZVVwZGF0ZT86IGJvb2xlYW4gPSB0cnVlXG4gICAgKSA9PiB7XG4gICAgICBpbnN0YW5jZS5yZXNldEFmdGVySW5kaWNlcyh7IHJvd0luZGV4LCBzaG91bGRGb3JjZVVwZGF0ZSB9KTtcbiAgICB9O1xuXG4gICAgaW5zdGFuY2UucmVzZXRBZnRlckluZGljZXMgPSAoe1xuICAgICAgY29sdW1uSW5kZXgsXG4gICAgICByb3dJbmRleCxcbiAgICAgIHNob3VsZEZvcmNlVXBkYXRlID0gdHJ1ZSxcbiAgICB9OiB7XG4gICAgICBjb2x1bW5JbmRleD86IG51bWJlcixcbiAgICAgIHJvd0luZGV4PzogbnVtYmVyLFxuICAgICAgc2hvdWxkRm9yY2VVcGRhdGU6IGJvb2xlYW4sXG4gICAgfSkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBjb2x1bW5JbmRleCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRDb2x1bW5JbmRleCA9IE1hdGgubWluKFxuICAgICAgICAgIGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkQ29sdW1uSW5kZXgsXG4gICAgICAgICAgY29sdW1uSW5kZXggLSAxXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHJvd0luZGV4ID09PSAnbnVtYmVyJykge1xuICAgICAgICBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZFJvd0luZGV4ID0gTWF0aC5taW4oXG4gICAgICAgICAgaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRSb3dJbmRleCxcbiAgICAgICAgICByb3dJbmRleCAtIDFcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gV2UgY291bGQgcG90ZW50aWFsbHkgb3B0aW1pemUgZnVydGhlciBieSBvbmx5IGV2aWN0aW5nIHN0eWxlcyBhZnRlciB0aGlzIGluZGV4LFxuICAgICAgLy8gQnV0IHNpbmNlIHN0eWxlcyBhcmUgb25seSBjYWNoZWQgd2hpbGUgc2Nyb2xsaW5nIGlzIGluIHByb2dyZXNzLVxuICAgICAgLy8gSXQgc2VlbXMgYW4gdW5uZWNlc3Nhcnkgb3B0aW1pemF0aW9uLlxuICAgICAgLy8gSXQncyB1bmxpa2VseSB0aGF0IHJlc2V0QWZ0ZXJJbmRleCgpIHdpbGwgYmUgY2FsbGVkIHdoaWxlIGEgdXNlciBpcyBzY3JvbGxpbmcuXG4gICAgICBpbnN0YW5jZS5fZ2V0SXRlbVN0eWxlQ2FjaGUoLTEpO1xuXG4gICAgICBpZiAoc2hvdWxkRm9yY2VVcGRhdGUpIHtcbiAgICAgICAgaW5zdGFuY2UuZm9yY2VVcGRhdGUoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIGluc3RhbmNlUHJvcHM7XG4gIH0sXG5cbiAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZTogZmFsc2UsXG5cbiAgdmFsaWRhdGVQcm9wczogKHsgY29sdW1uV2lkdGgsIHJvd0hlaWdodCB9OiBQcm9wczxhbnk+KTogdm9pZCA9PiB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmICh0eXBlb2YgY29sdW1uV2lkdGggIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgJ0FuIGludmFsaWQgXCJjb2x1bW5XaWR0aFwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICtcbiAgICAgICAgICAgICdWYWx1ZSBzaG91bGQgYmUgYSBmdW5jdGlvbi4gJyArXG4gICAgICAgICAgICBgXCIke1xuICAgICAgICAgICAgICBjb2x1bW5XaWR0aCA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiBjb2x1bW5XaWR0aFxuICAgICAgICAgICAgfVwiIHdhcyBzcGVjaWZpZWQuYFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygcm93SGVpZ2h0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICdBbiBpbnZhbGlkIFwicm93SGVpZ2h0XCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgK1xuICAgICAgICAgICAgJ1ZhbHVlIHNob3VsZCBiZSBhIGZ1bmN0aW9uLiAnICtcbiAgICAgICAgICAgIGBcIiR7cm93SGVpZ2h0ID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIHJvd0hlaWdodH1cIiB3YXMgc3BlY2lmaWVkLmBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgVmFyaWFibGVTaXplR3JpZDtcbiIsICIvLyBAZmxvd1xuXG5pbXBvcnQgbWVtb2l6ZU9uZSBmcm9tICdtZW1vaXplLW9uZSc7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50LCBQdXJlQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgY2FuY2VsVGltZW91dCwgcmVxdWVzdFRpbWVvdXQgfSBmcm9tICcuL3RpbWVyJztcbmltcG9ydCB7IGdldFNjcm9sbGJhclNpemUsIGdldFJUTE9mZnNldFR5cGUgfSBmcm9tICcuL2RvbUhlbHBlcnMnO1xuXG5pbXBvcnQgdHlwZSB7IFRpbWVvdXRJRCB9IGZyb20gJy4vdGltZXInO1xuXG5leHBvcnQgdHlwZSBTY3JvbGxUb0FsaWduID0gJ2F1dG8nIHwgJ3NtYXJ0JyB8ICdjZW50ZXInIHwgJ3N0YXJ0JyB8ICdlbmQnO1xuXG50eXBlIGl0ZW1TaXplID0gbnVtYmVyIHwgKChpbmRleDogbnVtYmVyKSA9PiBudW1iZXIpO1xuLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9ucyBcImhvcml6b250YWxcIiBhbmQgXCJ2ZXJ0aWNhbFwiXG50eXBlIERpcmVjdGlvbiA9ICdsdHInIHwgJ3J0bCcgfCAnaG9yaXpvbnRhbCcgfCAndmVydGljYWwnO1xudHlwZSBMYXlvdXQgPSAnaG9yaXpvbnRhbCcgfCAndmVydGljYWwnO1xuXG50eXBlIFJlbmRlckNvbXBvbmVudFByb3BzPFQ+ID0ge3xcbiAgZGF0YTogVCxcbiAgaW5kZXg6IG51bWJlcixcbiAgaXNTY3JvbGxpbmc/OiBib29sZWFuLFxuICBzdHlsZTogT2JqZWN0LFxufH07XG50eXBlIFJlbmRlckNvbXBvbmVudDxUPiA9IFJlYWN0JENvbXBvbmVudFR5cGU8JFNoYXBlPFJlbmRlckNvbXBvbmVudFByb3BzPFQ+Pj47XG5cbnR5cGUgU2Nyb2xsRGlyZWN0aW9uID0gJ2ZvcndhcmQnIHwgJ2JhY2t3YXJkJztcblxudHlwZSBvbkl0ZW1zUmVuZGVyZWRDYWxsYmFjayA9ICh7XG4gIG92ZXJzY2FuU3RhcnRJbmRleDogbnVtYmVyLFxuICBvdmVyc2NhblN0b3BJbmRleDogbnVtYmVyLFxuICB2aXNpYmxlU3RhcnRJbmRleDogbnVtYmVyLFxuICB2aXNpYmxlU3RvcEluZGV4OiBudW1iZXIsXG59KSA9PiB2b2lkO1xudHlwZSBvblNjcm9sbENhbGxiYWNrID0gKHtcbiAgc2Nyb2xsRGlyZWN0aW9uOiBTY3JvbGxEaXJlY3Rpb24sXG4gIHNjcm9sbE9mZnNldDogbnVtYmVyLFxuICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IGJvb2xlYW4sXG59KSA9PiB2b2lkO1xuXG50eXBlIFNjcm9sbEV2ZW50ID0gU3ludGhldGljRXZlbnQ8SFRNTERpdkVsZW1lbnQ+O1xudHlwZSBJdGVtU3R5bGVDYWNoZSA9IHsgW2luZGV4OiBudW1iZXJdOiBPYmplY3QgfTtcblxudHlwZSBPdXRlclByb3BzID0ge3xcbiAgY2hpbGRyZW46IFJlYWN0JE5vZGUsXG4gIGNsYXNzTmFtZTogc3RyaW5nIHwgdm9pZCxcbiAgb25TY3JvbGw6IFNjcm9sbEV2ZW50ID0+IHZvaWQsXG4gIHN0eWxlOiB7XG4gICAgW3N0cmluZ106IG1peGVkLFxuICB9LFxufH07XG5cbnR5cGUgSW5uZXJQcm9wcyA9IHt8XG4gIGNoaWxkcmVuOiBSZWFjdCROb2RlLFxuICBzdHlsZToge1xuICAgIFtzdHJpbmddOiBtaXhlZCxcbiAgfSxcbnx9O1xuXG5leHBvcnQgdHlwZSBQcm9wczxUPiA9IHt8XG4gIGNoaWxkcmVuOiBSZW5kZXJDb21wb25lbnQ8VD4sXG4gIGNsYXNzTmFtZT86IHN0cmluZyxcbiAgZGlyZWN0aW9uOiBEaXJlY3Rpb24sXG4gIGhlaWdodDogbnVtYmVyIHwgc3RyaW5nLFxuICBpbml0aWFsU2Nyb2xsT2Zmc2V0PzogbnVtYmVyLFxuICBpbm5lclJlZj86IGFueSxcbiAgaW5uZXJFbGVtZW50VHlwZT86IHN0cmluZyB8IFJlYWN0JEFic3RyYWN0Q29tcG9uZW50PElubmVyUHJvcHMsIGFueT4sXG4gIGlubmVyVGFnTmFtZT86IHN0cmluZywgLy8gZGVwcmVjYXRlZFxuICBpdGVtQ291bnQ6IG51bWJlcixcbiAgaXRlbURhdGE6IFQsXG4gIGl0ZW1LZXk/OiAoaW5kZXg6IG51bWJlciwgZGF0YTogVCkgPT4gYW55LFxuICBpdGVtU2l6ZTogaXRlbVNpemUsXG4gIGxheW91dDogTGF5b3V0LFxuICBvbkl0ZW1zUmVuZGVyZWQ/OiBvbkl0ZW1zUmVuZGVyZWRDYWxsYmFjayxcbiAgb25TY3JvbGw/OiBvblNjcm9sbENhbGxiYWNrLFxuICBvdXRlclJlZj86IGFueSxcbiAgb3V0ZXJFbGVtZW50VHlwZT86IHN0cmluZyB8IFJlYWN0JEFic3RyYWN0Q29tcG9uZW50PE91dGVyUHJvcHMsIGFueT4sXG4gIG91dGVyVGFnTmFtZT86IHN0cmluZywgLy8gZGVwcmVjYXRlZFxuICBvdmVyc2NhbkNvdW50OiBudW1iZXIsXG4gIHN0eWxlPzogT2JqZWN0LFxuICB1c2VJc1Njcm9sbGluZzogYm9vbGVhbixcbiAgd2lkdGg6IG51bWJlciB8IHN0cmluZyxcbnx9O1xuXG50eXBlIFN0YXRlID0ge3xcbiAgaW5zdGFuY2U6IGFueSxcbiAgaXNTY3JvbGxpbmc6IGJvb2xlYW4sXG4gIHNjcm9sbERpcmVjdGlvbjogU2Nyb2xsRGlyZWN0aW9uLFxuICBzY3JvbGxPZmZzZXQ6IG51bWJlcixcbiAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBib29sZWFuLFxufH07XG5cbnR5cGUgR2V0SXRlbU9mZnNldCA9IChcbiAgcHJvcHM6IFByb3BzPGFueT4sXG4gIGluZGV4OiBudW1iZXIsXG4gIGluc3RhbmNlUHJvcHM6IGFueVxuKSA9PiBudW1iZXI7XG50eXBlIEdldEl0ZW1TaXplID0gKFxuICBwcm9wczogUHJvcHM8YW55PixcbiAgaW5kZXg6IG51bWJlcixcbiAgaW5zdGFuY2VQcm9wczogYW55XG4pID0+IG51bWJlcjtcbnR5cGUgR2V0RXN0aW1hdGVkVG90YWxTaXplID0gKHByb3BzOiBQcm9wczxhbnk+LCBpbnN0YW5jZVByb3BzOiBhbnkpID0+IG51bWJlcjtcbnR5cGUgR2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQgPSAoXG4gIHByb3BzOiBQcm9wczxhbnk+LFxuICBpbmRleDogbnVtYmVyLFxuICBhbGlnbjogU2Nyb2xsVG9BbGlnbixcbiAgc2Nyb2xsT2Zmc2V0OiBudW1iZXIsXG4gIGluc3RhbmNlUHJvcHM6IGFueVxuKSA9PiBudW1iZXI7XG50eXBlIEdldFN0YXJ0SW5kZXhGb3JPZmZzZXQgPSAoXG4gIHByb3BzOiBQcm9wczxhbnk+LFxuICBvZmZzZXQ6IG51bWJlcixcbiAgaW5zdGFuY2VQcm9wczogYW55XG4pID0+IG51bWJlcjtcbnR5cGUgR2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleCA9IChcbiAgcHJvcHM6IFByb3BzPGFueT4sXG4gIHN0YXJ0SW5kZXg6IG51bWJlcixcbiAgc2Nyb2xsT2Zmc2V0OiBudW1iZXIsXG4gIGluc3RhbmNlUHJvcHM6IGFueVxuKSA9PiBudW1iZXI7XG50eXBlIEluaXRJbnN0YW5jZVByb3BzID0gKHByb3BzOiBQcm9wczxhbnk+LCBpbnN0YW5jZTogYW55KSA9PiBhbnk7XG50eXBlIFZhbGlkYXRlUHJvcHMgPSAocHJvcHM6IFByb3BzPGFueT4pID0+IHZvaWQ7XG5cbmNvbnN0IElTX1NDUk9MTElOR19ERUJPVU5DRV9JTlRFUlZBTCA9IDE1MDtcblxuY29uc3QgZGVmYXVsdEl0ZW1LZXkgPSAoaW5kZXg6IG51bWJlciwgZGF0YTogYW55KSA9PiBpbmRleDtcblxuLy8gSW4gREVWIG1vZGUsIHRoaXMgU2V0IGhlbHBzIHVzIG9ubHkgbG9nIGEgd2FybmluZyBvbmNlIHBlciBjb21wb25lbnQgaW5zdGFuY2UuXG4vLyBUaGlzIGF2b2lkcyBzcGFtbWluZyB0aGUgY29uc29sZSBldmVyeSB0aW1lIGEgcmVuZGVyIGhhcHBlbnMuXG5sZXQgZGV2V2FybmluZ3NEaXJlY3Rpb24gPSBudWxsO1xubGV0IGRldldhcm5pbmdzVGFnTmFtZSA9IG51bGw7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdy5XZWFrU2V0ICE9PSAndW5kZWZpbmVkJykge1xuICAgIGRldldhcm5pbmdzRGlyZWN0aW9uID0gbmV3IFdlYWtTZXQoKTtcbiAgICBkZXZXYXJuaW5nc1RhZ05hbWUgPSBuZXcgV2Vha1NldCgpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZUxpc3RDb21wb25lbnQoe1xuICBnZXRJdGVtT2Zmc2V0LFxuICBnZXRFc3RpbWF0ZWRUb3RhbFNpemUsXG4gIGdldEl0ZW1TaXplLFxuICBnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudCxcbiAgZ2V0U3RhcnRJbmRleEZvck9mZnNldCxcbiAgZ2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleCxcbiAgaW5pdEluc3RhbmNlUHJvcHMsXG4gIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UsXG4gIHZhbGlkYXRlUHJvcHMsXG59OiB7fFxuICBnZXRJdGVtT2Zmc2V0OiBHZXRJdGVtT2Zmc2V0LFxuICBnZXRFc3RpbWF0ZWRUb3RhbFNpemU6IEdldEVzdGltYXRlZFRvdGFsU2l6ZSxcbiAgZ2V0SXRlbVNpemU6IEdldEl0ZW1TaXplLFxuICBnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudDogR2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQsXG4gIGdldFN0YXJ0SW5kZXhGb3JPZmZzZXQ6IEdldFN0YXJ0SW5kZXhGb3JPZmZzZXQsXG4gIGdldFN0b3BJbmRleEZvclN0YXJ0SW5kZXg6IEdldFN0b3BJbmRleEZvclN0YXJ0SW5kZXgsXG4gIGluaXRJbnN0YW5jZVByb3BzOiBJbml0SW5zdGFuY2VQcm9wcyxcbiAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZTogYm9vbGVhbixcbiAgdmFsaWRhdGVQcm9wczogVmFsaWRhdGVQcm9wcyxcbnx9KSB7XG4gIHJldHVybiBjbGFzcyBMaXN0PFQ+IGV4dGVuZHMgUHVyZUNvbXBvbmVudDxQcm9wczxUPiwgU3RhdGU+IHtcbiAgICBfaW5zdGFuY2VQcm9wczogYW55ID0gaW5pdEluc3RhbmNlUHJvcHModGhpcy5wcm9wcywgdGhpcyk7XG4gICAgX291dGVyUmVmOiA/SFRNTERpdkVsZW1lbnQ7XG4gICAgX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQ6IFRpbWVvdXRJRCB8IG51bGwgPSBudWxsO1xuXG4gICAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICAgIGRpcmVjdGlvbjogJ2x0cicsXG4gICAgICBpdGVtRGF0YTogdW5kZWZpbmVkLFxuICAgICAgbGF5b3V0OiAndmVydGljYWwnLFxuICAgICAgb3ZlcnNjYW5Db3VudDogMixcbiAgICAgIHVzZUlzU2Nyb2xsaW5nOiBmYWxzZSxcbiAgICB9O1xuXG4gICAgc3RhdGU6IFN0YXRlID0ge1xuICAgICAgaW5zdGFuY2U6IHRoaXMsXG4gICAgICBpc1Njcm9sbGluZzogZmFsc2UsXG4gICAgICBzY3JvbGxEaXJlY3Rpb246ICdmb3J3YXJkJyxcbiAgICAgIHNjcm9sbE9mZnNldDpcbiAgICAgICAgdHlwZW9mIHRoaXMucHJvcHMuaW5pdGlhbFNjcm9sbE9mZnNldCA9PT0gJ251bWJlcidcbiAgICAgICAgICA/IHRoaXMucHJvcHMuaW5pdGlhbFNjcm9sbE9mZnNldFxuICAgICAgICAgIDogMCxcbiAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogZmFsc2UsXG4gICAgfTtcblxuICAgIC8vIEFsd2F5cyB1c2UgZXhwbGljaXQgY29uc3RydWN0b3IgZm9yIFJlYWN0IGNvbXBvbmVudHMuXG4gICAgLy8gSXQgcHJvZHVjZXMgbGVzcyBjb2RlIGFmdGVyIHRyYW5zcGlsYXRpb24uICgjMjYpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY29uc3RydWN0b3JcbiAgICBjb25zdHJ1Y3Rvcihwcm9wczogUHJvcHM8VD4pIHtcbiAgICAgIHN1cGVyKHByb3BzKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKFxuICAgICAgbmV4dFByb3BzOiBQcm9wczxUPixcbiAgICAgIHByZXZTdGF0ZTogU3RhdGVcbiAgICApOiAkU2hhcGU8U3RhdGU+IHwgbnVsbCB7XG4gICAgICB2YWxpZGF0ZVNoYXJlZFByb3BzKG5leHRQcm9wcywgcHJldlN0YXRlKTtcbiAgICAgIHZhbGlkYXRlUHJvcHMobmV4dFByb3BzKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHNjcm9sbFRvKHNjcm9sbE9mZnNldDogbnVtYmVyKTogdm9pZCB7XG4gICAgICBzY3JvbGxPZmZzZXQgPSBNYXRoLm1heCgwLCBzY3JvbGxPZmZzZXQpO1xuXG4gICAgICB0aGlzLnNldFN0YXRlKHByZXZTdGF0ZSA9PiB7XG4gICAgICAgIGlmIChwcmV2U3RhdGUuc2Nyb2xsT2Zmc2V0ID09PSBzY3JvbGxPZmZzZXQpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHNjcm9sbERpcmVjdGlvbjpcbiAgICAgICAgICAgIHByZXZTdGF0ZS5zY3JvbGxPZmZzZXQgPCBzY3JvbGxPZmZzZXQgPyAnZm9yd2FyZCcgOiAnYmFja3dhcmQnLFxuICAgICAgICAgIHNjcm9sbE9mZnNldDogc2Nyb2xsT2Zmc2V0LFxuICAgICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogdHJ1ZSxcbiAgICAgICAgfTtcbiAgICAgIH0sIHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQpO1xuICAgIH1cblxuICAgIHNjcm9sbFRvSXRlbShpbmRleDogbnVtYmVyLCBhbGlnbjogU2Nyb2xsVG9BbGlnbiA9ICdhdXRvJyk6IHZvaWQge1xuICAgICAgY29uc3QgeyBpdGVtQ291bnQsIGxheW91dCB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IHsgc2Nyb2xsT2Zmc2V0IH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgICBpbmRleCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGluZGV4LCBpdGVtQ291bnQgLSAxKSk7XG5cbiAgICAgIC8vIFRoZSBzY3JvbGxiYXIgc2l6ZSBzaG91bGQgYmUgY29uc2lkZXJlZCB3aGVuIHNjcm9sbGluZyBhbiBpdGVtIGludG8gdmlldywgdG8gZW5zdXJlIGl0J3MgZnVsbHkgdmlzaWJsZS5cbiAgICAgIC8vIEJ1dCB3ZSBvbmx5IG5lZWQgdG8gYWNjb3VudCBmb3IgaXRzIHNpemUgd2hlbiBpdCdzIGFjdHVhbGx5IHZpc2libGUuXG4gICAgICAvLyBUaGlzIGlzIGFuIGVkZ2UgY2FzZSBmb3IgbGlzdHM7IG5vcm1hbGx5IHRoZXkgb25seSBzY3JvbGwgaW4gdGhlIGRvbWluYW50IGRpcmVjdGlvbi5cbiAgICAgIGxldCBzY3JvbGxiYXJTaXplID0gMDtcbiAgICAgIGlmICh0aGlzLl9vdXRlclJlZikge1xuICAgICAgICBjb25zdCBvdXRlclJlZiA9ICgodGhpcy5fb3V0ZXJSZWY6IGFueSk6IEhUTUxFbGVtZW50KTtcbiAgICAgICAgaWYgKGxheW91dCA9PT0gJ3ZlcnRpY2FsJykge1xuICAgICAgICAgIHNjcm9sbGJhclNpemUgPVxuICAgICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsV2lkdGggPiBvdXRlclJlZi5jbGllbnRXaWR0aFxuICAgICAgICAgICAgICA/IGdldFNjcm9sbGJhclNpemUoKVxuICAgICAgICAgICAgICA6IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2Nyb2xsYmFyU2l6ZSA9XG4gICAgICAgICAgICBvdXRlclJlZi5zY3JvbGxIZWlnaHQgPiBvdXRlclJlZi5jbGllbnRIZWlnaHRcbiAgICAgICAgICAgICAgPyBnZXRTY3JvbGxiYXJTaXplKClcbiAgICAgICAgICAgICAgOiAwO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2Nyb2xsVG8oXG4gICAgICAgIGdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50KFxuICAgICAgICAgIHRoaXMucHJvcHMsXG4gICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgYWxpZ24sXG4gICAgICAgICAgc2Nyb2xsT2Zmc2V0LFxuICAgICAgICAgIHRoaXMuX2luc3RhbmNlUHJvcHMsXG4gICAgICAgICAgc2Nyb2xsYmFyU2l6ZVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgY29uc3QgeyBkaXJlY3Rpb24sIGluaXRpYWxTY3JvbGxPZmZzZXQsIGxheW91dCB9ID0gdGhpcy5wcm9wcztcblxuICAgICAgaWYgKHR5cGVvZiBpbml0aWFsU2Nyb2xsT2Zmc2V0ID09PSAnbnVtYmVyJyAmJiB0aGlzLl9vdXRlclJlZiAhPSBudWxsKSB7XG4gICAgICAgIGNvbnN0IG91dGVyUmVmID0gKCh0aGlzLl9vdXRlclJlZjogYW55KTogSFRNTEVsZW1lbnQpO1xuICAgICAgICAvLyBUT0RPIERlcHJlY2F0ZSBkaXJlY3Rpb24gXCJob3Jpem9udGFsXCJcbiAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnIHx8IGxheW91dCA9PT0gJ2hvcml6b250YWwnKSB7XG4gICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IGluaXRpYWxTY3JvbGxPZmZzZXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsVG9wID0gaW5pdGlhbFNjcm9sbE9mZnNldDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLl9jYWxsUHJvcHNDYWxsYmFja3MoKTtcbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRVcGRhdGUoKSB7XG4gICAgICBjb25zdCB7IGRpcmVjdGlvbiwgbGF5b3V0IH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgeyBzY3JvbGxPZmZzZXQsIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCB9ID0gdGhpcy5zdGF0ZTtcblxuICAgICAgaWYgKHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCAmJiB0aGlzLl9vdXRlclJlZiAhPSBudWxsKSB7XG4gICAgICAgIGNvbnN0IG91dGVyUmVmID0gKCh0aGlzLl9vdXRlclJlZjogYW55KTogSFRNTEVsZW1lbnQpO1xuXG4gICAgICAgIC8vIFRPRE8gRGVwcmVjYXRlIGRpcmVjdGlvbiBcImhvcml6b250YWxcIlxuICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgbGF5b3V0ID09PSAnaG9yaXpvbnRhbCcpIHtcbiAgICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAncnRsJykge1xuICAgICAgICAgICAgLy8gVFJJQ0tZIEFjY29yZGluZyB0byB0aGUgc3BlYywgc2Nyb2xsTGVmdCBzaG91bGQgYmUgbmVnYXRpdmUgZm9yIFJUTCBhbGlnbmVkIGVsZW1lbnRzLlxuICAgICAgICAgICAgLy8gVGhpcyBpcyBub3QgdGhlIGNhc2UgZm9yIGFsbCBicm93c2VycyB0aG91Z2ggKGUuZy4gQ2hyb21lIHJlcG9ydHMgdmFsdWVzIGFzIHBvc2l0aXZlLCBtZWFzdXJlZCByZWxhdGl2ZSB0byB0aGUgbGVmdCkuXG4gICAgICAgICAgICAvLyBTbyB3ZSBuZWVkIHRvIGRldGVybWluZSB3aGljaCBicm93c2VyIGJlaGF2aW9yIHdlJ3JlIGRlYWxpbmcgd2l0aCwgYW5kIG1pbWljIGl0LlxuICAgICAgICAgICAgc3dpdGNoIChnZXRSVExPZmZzZXRUeXBlKCkpIHtcbiAgICAgICAgICAgICAgY2FzZSAnbmVnYXRpdmUnOlxuICAgICAgICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSAtc2Nyb2xsT2Zmc2V0O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlICdwb3NpdGl2ZS1hc2NlbmRpbmcnOlxuICAgICAgICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSBzY3JvbGxPZmZzZXQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgY29uc3QgeyBjbGllbnRXaWR0aCwgc2Nyb2xsV2lkdGggfSA9IG91dGVyUmVmO1xuICAgICAgICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSBzY3JvbGxXaWR0aCAtIGNsaWVudFdpZHRoIC0gc2Nyb2xsT2Zmc2V0O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvdXRlclJlZi5zY3JvbGxMZWZ0ID0gc2Nyb2xsT2Zmc2V0O1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXRlclJlZi5zY3JvbGxUb3AgPSBzY3JvbGxPZmZzZXQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5fY2FsbFByb3BzQ2FsbGJhY2tzKCk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICBpZiAodGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCAhPT0gbnVsbCkge1xuICAgICAgICBjYW5jZWxUaW1lb3V0KHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY2hpbGRyZW4sXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgZGlyZWN0aW9uLFxuICAgICAgICBoZWlnaHQsXG4gICAgICAgIGlubmVyUmVmLFxuICAgICAgICBpbm5lckVsZW1lbnRUeXBlLFxuICAgICAgICBpbm5lclRhZ05hbWUsXG4gICAgICAgIGl0ZW1Db3VudCxcbiAgICAgICAgaXRlbURhdGEsXG4gICAgICAgIGl0ZW1LZXkgPSBkZWZhdWx0SXRlbUtleSxcbiAgICAgICAgbGF5b3V0LFxuICAgICAgICBvdXRlckVsZW1lbnRUeXBlLFxuICAgICAgICBvdXRlclRhZ05hbWUsXG4gICAgICAgIHN0eWxlLFxuICAgICAgICB1c2VJc1Njcm9sbGluZyxcbiAgICAgICAgd2lkdGgsXG4gICAgICB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IHsgaXNTY3JvbGxpbmcgfSA9IHRoaXMuc3RhdGU7XG5cbiAgICAgIC8vIFRPRE8gRGVwcmVjYXRlIGRpcmVjdGlvbiBcImhvcml6b250YWxcIlxuICAgICAgY29uc3QgaXNIb3Jpem9udGFsID1cbiAgICAgICAgZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgbGF5b3V0ID09PSAnaG9yaXpvbnRhbCc7XG5cbiAgICAgIGNvbnN0IG9uU2Nyb2xsID0gaXNIb3Jpem9udGFsXG4gICAgICAgID8gdGhpcy5fb25TY3JvbGxIb3Jpem9udGFsXG4gICAgICAgIDogdGhpcy5fb25TY3JvbGxWZXJ0aWNhbDtcblxuICAgICAgY29uc3QgW3N0YXJ0SW5kZXgsIHN0b3BJbmRleF0gPSB0aGlzLl9nZXRSYW5nZVRvUmVuZGVyKCk7XG5cbiAgICAgIGNvbnN0IGl0ZW1zID0gW107XG4gICAgICBpZiAoaXRlbUNvdW50ID4gMCkge1xuICAgICAgICBmb3IgKGxldCBpbmRleCA9IHN0YXJ0SW5kZXg7IGluZGV4IDw9IHN0b3BJbmRleDsgaW5kZXgrKykge1xuICAgICAgICAgIGl0ZW1zLnB1c2goXG4gICAgICAgICAgICBjcmVhdGVFbGVtZW50KGNoaWxkcmVuLCB7XG4gICAgICAgICAgICAgIGRhdGE6IGl0ZW1EYXRhLFxuICAgICAgICAgICAgICBrZXk6IGl0ZW1LZXkoaW5kZXgsIGl0ZW1EYXRhKSxcbiAgICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICAgIGlzU2Nyb2xsaW5nOiB1c2VJc1Njcm9sbGluZyA/IGlzU2Nyb2xsaW5nIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICBzdHlsZTogdGhpcy5fZ2V0SXRlbVN0eWxlKGluZGV4KSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBSZWFkIHRoaXMgdmFsdWUgQUZURVIgaXRlbXMgaGF2ZSBiZWVuIGNyZWF0ZWQsXG4gICAgICAvLyBTbyB0aGVpciBhY3R1YWwgc2l6ZXMgKGlmIHZhcmlhYmxlKSBhcmUgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uLlxuICAgICAgY29uc3QgZXN0aW1hdGVkVG90YWxTaXplID0gZ2V0RXN0aW1hdGVkVG90YWxTaXplKFxuICAgICAgICB0aGlzLnByb3BzLFxuICAgICAgICB0aGlzLl9pbnN0YW5jZVByb3BzXG4gICAgICApO1xuXG4gICAgICByZXR1cm4gY3JlYXRlRWxlbWVudChcbiAgICAgICAgb3V0ZXJFbGVtZW50VHlwZSB8fCBvdXRlclRhZ05hbWUgfHwgJ2RpdicsXG4gICAgICAgIHtcbiAgICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgICAgb25TY3JvbGwsXG4gICAgICAgICAgcmVmOiB0aGlzLl9vdXRlclJlZlNldHRlcixcbiAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgIG92ZXJmbG93OiAnYXV0bycsXG4gICAgICAgICAgICBXZWJraXRPdmVyZmxvd1Njcm9sbGluZzogJ3RvdWNoJyxcbiAgICAgICAgICAgIHdpbGxDaGFuZ2U6ICd0cmFuc2Zvcm0nLFxuICAgICAgICAgICAgZGlyZWN0aW9uLFxuICAgICAgICAgICAgLi4uc3R5bGUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgY3JlYXRlRWxlbWVudChpbm5lckVsZW1lbnRUeXBlIHx8IGlubmVyVGFnTmFtZSB8fCAnZGl2Jywge1xuICAgICAgICAgIGNoaWxkcmVuOiBpdGVtcyxcbiAgICAgICAgICByZWY6IGlubmVyUmVmLFxuICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICBoZWlnaHQ6IGlzSG9yaXpvbnRhbCA/ICcxMDAlJyA6IGVzdGltYXRlZFRvdGFsU2l6ZSxcbiAgICAgICAgICAgIHBvaW50ZXJFdmVudHM6IGlzU2Nyb2xsaW5nID8gJ25vbmUnIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgd2lkdGg6IGlzSG9yaXpvbnRhbCA/IGVzdGltYXRlZFRvdGFsU2l6ZSA6ICcxMDAlJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBfY2FsbE9uSXRlbXNSZW5kZXJlZDogKFxuICAgICAgb3ZlcnNjYW5TdGFydEluZGV4OiBudW1iZXIsXG4gICAgICBvdmVyc2NhblN0b3BJbmRleDogbnVtYmVyLFxuICAgICAgdmlzaWJsZVN0YXJ0SW5kZXg6IG51bWJlcixcbiAgICAgIHZpc2libGVTdG9wSW5kZXg6IG51bWJlclxuICAgICkgPT4gdm9pZDtcbiAgICBfY2FsbE9uSXRlbXNSZW5kZXJlZCA9IG1lbW9pemVPbmUoXG4gICAgICAoXG4gICAgICAgIG92ZXJzY2FuU3RhcnRJbmRleDogbnVtYmVyLFxuICAgICAgICBvdmVyc2NhblN0b3BJbmRleDogbnVtYmVyLFxuICAgICAgICB2aXNpYmxlU3RhcnRJbmRleDogbnVtYmVyLFxuICAgICAgICB2aXNpYmxlU3RvcEluZGV4OiBudW1iZXJcbiAgICAgICkgPT5cbiAgICAgICAgKCh0aGlzLnByb3BzLm9uSXRlbXNSZW5kZXJlZDogYW55KTogb25JdGVtc1JlbmRlcmVkQ2FsbGJhY2spKHtcbiAgICAgICAgICBvdmVyc2NhblN0YXJ0SW5kZXgsXG4gICAgICAgICAgb3ZlcnNjYW5TdG9wSW5kZXgsXG4gICAgICAgICAgdmlzaWJsZVN0YXJ0SW5kZXgsXG4gICAgICAgICAgdmlzaWJsZVN0b3BJbmRleCxcbiAgICAgICAgfSlcbiAgICApO1xuXG4gICAgX2NhbGxPblNjcm9sbDogKFxuICAgICAgc2Nyb2xsRGlyZWN0aW9uOiBTY3JvbGxEaXJlY3Rpb24sXG4gICAgICBzY3JvbGxPZmZzZXQ6IG51bWJlcixcbiAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogYm9vbGVhblxuICAgICkgPT4gdm9pZDtcbiAgICBfY2FsbE9uU2Nyb2xsID0gbWVtb2l6ZU9uZShcbiAgICAgIChcbiAgICAgICAgc2Nyb2xsRGlyZWN0aW9uOiBTY3JvbGxEaXJlY3Rpb24sXG4gICAgICAgIHNjcm9sbE9mZnNldDogbnVtYmVyLFxuICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IGJvb2xlYW5cbiAgICAgICkgPT5cbiAgICAgICAgKCh0aGlzLnByb3BzLm9uU2Nyb2xsOiBhbnkpOiBvblNjcm9sbENhbGxiYWNrKSh7XG4gICAgICAgICAgc2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICAgIHNjcm9sbE9mZnNldCxcbiAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQsXG4gICAgICAgIH0pXG4gICAgKTtcblxuICAgIF9jYWxsUHJvcHNDYWxsYmFja3MoKSB7XG4gICAgICBpZiAodHlwZW9mIHRoaXMucHJvcHMub25JdGVtc1JlbmRlcmVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNvbnN0IHsgaXRlbUNvdW50IH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBpZiAoaXRlbUNvdW50ID4gMCkge1xuICAgICAgICAgIGNvbnN0IFtcbiAgICAgICAgICAgIG92ZXJzY2FuU3RhcnRJbmRleCxcbiAgICAgICAgICAgIG92ZXJzY2FuU3RvcEluZGV4LFxuICAgICAgICAgICAgdmlzaWJsZVN0YXJ0SW5kZXgsXG4gICAgICAgICAgICB2aXNpYmxlU3RvcEluZGV4LFxuICAgICAgICAgIF0gPSB0aGlzLl9nZXRSYW5nZVRvUmVuZGVyKCk7XG4gICAgICAgICAgdGhpcy5fY2FsbE9uSXRlbXNSZW5kZXJlZChcbiAgICAgICAgICAgIG92ZXJzY2FuU3RhcnRJbmRleCxcbiAgICAgICAgICAgIG92ZXJzY2FuU3RvcEluZGV4LFxuICAgICAgICAgICAgdmlzaWJsZVN0YXJ0SW5kZXgsXG4gICAgICAgICAgICB2aXNpYmxlU3RvcEluZGV4XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHRoaXMucHJvcHMub25TY3JvbGwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIHNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgICBzY3JvbGxPZmZzZXQsXG4gICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkLFxuICAgICAgICB9ID0gdGhpcy5zdGF0ZTtcbiAgICAgICAgdGhpcy5fY2FsbE9uU2Nyb2xsKFxuICAgICAgICAgIHNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgICBzY3JvbGxPZmZzZXQsXG4gICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTGF6aWx5IGNyZWF0ZSBhbmQgY2FjaGUgaXRlbSBzdHlsZXMgd2hpbGUgc2Nyb2xsaW5nLFxuICAgIC8vIFNvIHRoYXQgcHVyZSBjb21wb25lbnQgc0NVIHdpbGwgcHJldmVudCByZS1yZW5kZXJzLlxuICAgIC8vIFdlIG1haW50YWluIHRoaXMgY2FjaGUsIGFuZCBwYXNzIGEgc3R5bGUgcHJvcCByYXRoZXIgdGhhbiBpbmRleCxcbiAgICAvLyBTbyB0aGF0IExpc3QgY2FuIGNsZWFyIGNhY2hlZCBzdHlsZXMgYW5kIGZvcmNlIGl0ZW0gcmUtcmVuZGVyIGlmIG5lY2Vzc2FyeS5cbiAgICBfZ2V0SXRlbVN0eWxlOiAoaW5kZXg6IG51bWJlcikgPT4gT2JqZWN0O1xuICAgIF9nZXRJdGVtU3R5bGUgPSAoaW5kZXg6IG51bWJlcik6IE9iamVjdCA9PiB7XG4gICAgICBjb25zdCB7IGRpcmVjdGlvbiwgaXRlbVNpemUsIGxheW91dCB9ID0gdGhpcy5wcm9wcztcblxuICAgICAgY29uc3QgaXRlbVN0eWxlQ2FjaGUgPSB0aGlzLl9nZXRJdGVtU3R5bGVDYWNoZShcbiAgICAgICAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSAmJiBpdGVtU2l6ZSxcbiAgICAgICAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSAmJiBsYXlvdXQsXG4gICAgICAgIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UgJiYgZGlyZWN0aW9uXG4gICAgICApO1xuXG4gICAgICBsZXQgc3R5bGU7XG4gICAgICBpZiAoaXRlbVN0eWxlQ2FjaGUuaGFzT3duUHJvcGVydHkoaW5kZXgpKSB7XG4gICAgICAgIHN0eWxlID0gaXRlbVN0eWxlQ2FjaGVbaW5kZXhdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gZ2V0SXRlbU9mZnNldCh0aGlzLnByb3BzLCBpbmRleCwgdGhpcy5faW5zdGFuY2VQcm9wcyk7XG4gICAgICAgIGNvbnN0IHNpemUgPSBnZXRJdGVtU2l6ZSh0aGlzLnByb3BzLCBpbmRleCwgdGhpcy5faW5zdGFuY2VQcm9wcyk7XG5cbiAgICAgICAgLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9uIFwiaG9yaXpvbnRhbFwiXG4gICAgICAgIGNvbnN0IGlzSG9yaXpvbnRhbCA9XG4gICAgICAgICAgZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgbGF5b3V0ID09PSAnaG9yaXpvbnRhbCc7XG5cbiAgICAgICAgY29uc3QgaXNSdGwgPSBkaXJlY3Rpb24gPT09ICdydGwnO1xuICAgICAgICBjb25zdCBvZmZzZXRIb3Jpem9udGFsID0gaXNIb3Jpem9udGFsID8gb2Zmc2V0IDogMDtcbiAgICAgICAgaXRlbVN0eWxlQ2FjaGVbaW5kZXhdID0gc3R5bGUgPSB7XG4gICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgbGVmdDogaXNSdGwgPyB1bmRlZmluZWQgOiBvZmZzZXRIb3Jpem9udGFsLFxuICAgICAgICAgIHJpZ2h0OiBpc1J0bCA/IG9mZnNldEhvcml6b250YWwgOiB1bmRlZmluZWQsXG4gICAgICAgICAgdG9wOiAhaXNIb3Jpem9udGFsID8gb2Zmc2V0IDogMCxcbiAgICAgICAgICBoZWlnaHQ6ICFpc0hvcml6b250YWwgPyBzaXplIDogJzEwMCUnLFxuICAgICAgICAgIHdpZHRoOiBpc0hvcml6b250YWwgPyBzaXplIDogJzEwMCUnLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3R5bGU7XG4gICAgfTtcblxuICAgIF9nZXRJdGVtU3R5bGVDYWNoZTogKF86IGFueSwgX186IGFueSwgX19fOiBhbnkpID0+IEl0ZW1TdHlsZUNhY2hlO1xuICAgIF9nZXRJdGVtU3R5bGVDYWNoZSA9IG1lbW9pemVPbmUoKF86IGFueSwgX186IGFueSwgX19fOiBhbnkpID0+ICh7fSkpO1xuXG4gICAgX2dldFJhbmdlVG9SZW5kZXIoKTogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0ge1xuICAgICAgY29uc3QgeyBpdGVtQ291bnQsIG92ZXJzY2FuQ291bnQgfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCB7IGlzU2Nyb2xsaW5nLCBzY3JvbGxEaXJlY3Rpb24sIHNjcm9sbE9mZnNldCB9ID0gdGhpcy5zdGF0ZTtcblxuICAgICAgaWYgKGl0ZW1Db3VudCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gWzAsIDAsIDAsIDBdO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzdGFydEluZGV4ID0gZ2V0U3RhcnRJbmRleEZvck9mZnNldChcbiAgICAgICAgdGhpcy5wcm9wcyxcbiAgICAgICAgc2Nyb2xsT2Zmc2V0LFxuICAgICAgICB0aGlzLl9pbnN0YW5jZVByb3BzXG4gICAgICApO1xuICAgICAgY29uc3Qgc3RvcEluZGV4ID0gZ2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleChcbiAgICAgICAgdGhpcy5wcm9wcyxcbiAgICAgICAgc3RhcnRJbmRleCxcbiAgICAgICAgc2Nyb2xsT2Zmc2V0LFxuICAgICAgICB0aGlzLl9pbnN0YW5jZVByb3BzXG4gICAgICApO1xuXG4gICAgICAvLyBPdmVyc2NhbiBieSBvbmUgaXRlbSBpbiBlYWNoIGRpcmVjdGlvbiBzbyB0aGF0IHRhYi9mb2N1cyB3b3Jrcy5cbiAgICAgIC8vIElmIHRoZXJlIGlzbid0IGF0IGxlYXN0IG9uZSBleHRyYSBpdGVtLCB0YWIgbG9vcHMgYmFjayBhcm91bmQuXG4gICAgICBjb25zdCBvdmVyc2NhbkJhY2t3YXJkID1cbiAgICAgICAgIWlzU2Nyb2xsaW5nIHx8IHNjcm9sbERpcmVjdGlvbiA9PT0gJ2JhY2t3YXJkJ1xuICAgICAgICAgID8gTWF0aC5tYXgoMSwgb3ZlcnNjYW5Db3VudClcbiAgICAgICAgICA6IDE7XG4gICAgICBjb25zdCBvdmVyc2NhbkZvcndhcmQgPVxuICAgICAgICAhaXNTY3JvbGxpbmcgfHwgc2Nyb2xsRGlyZWN0aW9uID09PSAnZm9yd2FyZCdcbiAgICAgICAgICA/IE1hdGgubWF4KDEsIG92ZXJzY2FuQ291bnQpXG4gICAgICAgICAgOiAxO1xuXG4gICAgICByZXR1cm4gW1xuICAgICAgICBNYXRoLm1heCgwLCBzdGFydEluZGV4IC0gb3ZlcnNjYW5CYWNrd2FyZCksXG4gICAgICAgIE1hdGgubWF4KDAsIE1hdGgubWluKGl0ZW1Db3VudCAtIDEsIHN0b3BJbmRleCArIG92ZXJzY2FuRm9yd2FyZCkpLFxuICAgICAgICBzdGFydEluZGV4LFxuICAgICAgICBzdG9wSW5kZXgsXG4gICAgICBdO1xuICAgIH1cblxuICAgIF9vblNjcm9sbEhvcml6b250YWwgPSAoZXZlbnQ6IFNjcm9sbEV2ZW50KTogdm9pZCA9PiB7XG4gICAgICBjb25zdCB7IGNsaWVudFdpZHRoLCBzY3JvbGxMZWZ0LCBzY3JvbGxXaWR0aCB9ID0gZXZlbnQuY3VycmVudFRhcmdldDtcbiAgICAgIHRoaXMuc2V0U3RhdGUocHJldlN0YXRlID0+IHtcbiAgICAgICAgaWYgKHByZXZTdGF0ZS5zY3JvbGxPZmZzZXQgPT09IHNjcm9sbExlZnQpIHtcbiAgICAgICAgICAvLyBTY3JvbGwgcG9zaXRpb24gbWF5IGhhdmUgYmVlbiB1cGRhdGVkIGJ5IGNETS9jRFUsXG4gICAgICAgICAgLy8gSW4gd2hpY2ggY2FzZSB3ZSBkb24ndCBuZWVkIHRvIHRyaWdnZXIgYW5vdGhlciByZW5kZXIsXG4gICAgICAgICAgLy8gQW5kIHdlIGRvbid0IHdhbnQgdG8gdXBkYXRlIHN0YXRlLmlzU2Nyb2xsaW5nLlxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeyBkaXJlY3Rpb24gfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgICAgbGV0IHNjcm9sbE9mZnNldCA9IHNjcm9sbExlZnQ7XG4gICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICdydGwnKSB7XG4gICAgICAgICAgLy8gVFJJQ0tZIEFjY29yZGluZyB0byB0aGUgc3BlYywgc2Nyb2xsTGVmdCBzaG91bGQgYmUgbmVnYXRpdmUgZm9yIFJUTCBhbGlnbmVkIGVsZW1lbnRzLlxuICAgICAgICAgIC8vIFRoaXMgaXMgbm90IHRoZSBjYXNlIGZvciBhbGwgYnJvd3NlcnMgdGhvdWdoIChlLmcuIENocm9tZSByZXBvcnRzIHZhbHVlcyBhcyBwb3NpdGl2ZSwgbWVhc3VyZWQgcmVsYXRpdmUgdG8gdGhlIGxlZnQpLlxuICAgICAgICAgIC8vIEl0J3MgYWxzbyBlYXNpZXIgZm9yIHRoaXMgY29tcG9uZW50IGlmIHdlIGNvbnZlcnQgb2Zmc2V0cyB0byB0aGUgc2FtZSBmb3JtYXQgYXMgdGhleSB3b3VsZCBiZSBpbiBmb3IgbHRyLlxuICAgICAgICAgIC8vIFNvIHRoZSBzaW1wbGVzdCBzb2x1dGlvbiBpcyB0byBkZXRlcm1pbmUgd2hpY2ggYnJvd3NlciBiZWhhdmlvciB3ZSdyZSBkZWFsaW5nIHdpdGgsIGFuZCBjb252ZXJ0IGJhc2VkIG9uIGl0LlxuICAgICAgICAgIHN3aXRjaCAoZ2V0UlRMT2Zmc2V0VHlwZSgpKSB7XG4gICAgICAgICAgICBjYXNlICduZWdhdGl2ZSc6XG4gICAgICAgICAgICAgIHNjcm9sbE9mZnNldCA9IC1zY3JvbGxMZWZ0O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3Bvc2l0aXZlLWRlc2NlbmRpbmcnOlxuICAgICAgICAgICAgICBzY3JvbGxPZmZzZXQgPSBzY3JvbGxXaWR0aCAtIGNsaWVudFdpZHRoIC0gc2Nyb2xsTGVmdDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHJldmVudCBTYWZhcmkncyBlbGFzdGljIHNjcm9sbGluZyBmcm9tIGNhdXNpbmcgdmlzdWFsIHNoYWtpbmcgd2hlbiBzY3JvbGxpbmcgcGFzdCBib3VuZHMuXG4gICAgICAgIHNjcm9sbE9mZnNldCA9IE1hdGgubWF4KFxuICAgICAgICAgIDAsXG4gICAgICAgICAgTWF0aC5taW4oc2Nyb2xsT2Zmc2V0LCBzY3JvbGxXaWR0aCAtIGNsaWVudFdpZHRoKVxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaXNTY3JvbGxpbmc6IHRydWUsXG4gICAgICAgICAgc2Nyb2xsRGlyZWN0aW9uOlxuICAgICAgICAgICAgcHJldlN0YXRlLnNjcm9sbE9mZnNldCA8IHNjcm9sbE9mZnNldCA/ICdmb3J3YXJkJyA6ICdiYWNrd2FyZCcsXG4gICAgICAgICAgc2Nyb2xsT2Zmc2V0LFxuICAgICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogZmFsc2UsXG4gICAgICAgIH07XG4gICAgICB9LCB0aGlzLl9yZXNldElzU2Nyb2xsaW5nRGVib3VuY2VkKTtcbiAgICB9O1xuXG4gICAgX29uU2Nyb2xsVmVydGljYWwgPSAoZXZlbnQ6IFNjcm9sbEV2ZW50KTogdm9pZCA9PiB7XG4gICAgICBjb25zdCB7IGNsaWVudEhlaWdodCwgc2Nyb2xsSGVpZ2h0LCBzY3JvbGxUb3AgfSA9IGV2ZW50LmN1cnJlbnRUYXJnZXQ7XG4gICAgICB0aGlzLnNldFN0YXRlKHByZXZTdGF0ZSA9PiB7XG4gICAgICAgIGlmIChwcmV2U3RhdGUuc2Nyb2xsT2Zmc2V0ID09PSBzY3JvbGxUb3ApIHtcbiAgICAgICAgICAvLyBTY3JvbGwgcG9zaXRpb24gbWF5IGhhdmUgYmVlbiB1cGRhdGVkIGJ5IGNETS9jRFUsXG4gICAgICAgICAgLy8gSW4gd2hpY2ggY2FzZSB3ZSBkb24ndCBuZWVkIHRvIHRyaWdnZXIgYW5vdGhlciByZW5kZXIsXG4gICAgICAgICAgLy8gQW5kIHdlIGRvbid0IHdhbnQgdG8gdXBkYXRlIHN0YXRlLmlzU2Nyb2xsaW5nLlxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHJldmVudCBTYWZhcmkncyBlbGFzdGljIHNjcm9sbGluZyBmcm9tIGNhdXNpbmcgdmlzdWFsIHNoYWtpbmcgd2hlbiBzY3JvbGxpbmcgcGFzdCBib3VuZHMuXG4gICAgICAgIGNvbnN0IHNjcm9sbE9mZnNldCA9IE1hdGgubWF4KFxuICAgICAgICAgIDAsXG4gICAgICAgICAgTWF0aC5taW4oc2Nyb2xsVG9wLCBzY3JvbGxIZWlnaHQgLSBjbGllbnRIZWlnaHQpXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpc1Njcm9sbGluZzogdHJ1ZSxcbiAgICAgICAgICBzY3JvbGxEaXJlY3Rpb246XG4gICAgICAgICAgICBwcmV2U3RhdGUuc2Nyb2xsT2Zmc2V0IDwgc2Nyb2xsT2Zmc2V0ID8gJ2ZvcndhcmQnIDogJ2JhY2t3YXJkJyxcbiAgICAgICAgICBzY3JvbGxPZmZzZXQsXG4gICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICAgIH0sIHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQpO1xuICAgIH07XG5cbiAgICBfb3V0ZXJSZWZTZXR0ZXIgPSAocmVmOiBhbnkpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IHsgb3V0ZXJSZWYgfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgIHRoaXMuX291dGVyUmVmID0gKChyZWY6IGFueSk6IEhUTUxEaXZFbGVtZW50KTtcblxuICAgICAgaWYgKHR5cGVvZiBvdXRlclJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBvdXRlclJlZihyZWYpO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgb3V0ZXJSZWYgIT0gbnVsbCAmJlxuICAgICAgICB0eXBlb2Ygb3V0ZXJSZWYgPT09ICdvYmplY3QnICYmXG4gICAgICAgIG91dGVyUmVmLmhhc093blByb3BlcnR5KCdjdXJyZW50JylcbiAgICAgICkge1xuICAgICAgICBvdXRlclJlZi5jdXJyZW50ID0gcmVmO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfcmVzZXRJc1Njcm9sbGluZ0RlYm91bmNlZCA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkICE9PSBudWxsKSB7XG4gICAgICAgIGNhbmNlbFRpbWVvdXQodGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgPSByZXF1ZXN0VGltZW91dChcbiAgICAgICAgdGhpcy5fcmVzZXRJc1Njcm9sbGluZyxcbiAgICAgICAgSVNfU0NST0xMSU5HX0RFQk9VTkNFX0lOVEVSVkFMXG4gICAgICApO1xuICAgIH07XG5cbiAgICBfcmVzZXRJc1Njcm9sbGluZyA9ICgpID0+IHtcbiAgICAgIHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgPSBudWxsO1xuXG4gICAgICB0aGlzLnNldFN0YXRlKHsgaXNTY3JvbGxpbmc6IGZhbHNlIH0sICgpID0+IHtcbiAgICAgICAgLy8gQ2xlYXIgc3R5bGUgY2FjaGUgYWZ0ZXIgc3RhdGUgdXBkYXRlIGhhcyBiZWVuIGNvbW1pdHRlZC5cbiAgICAgICAgLy8gVGhpcyB3YXkgd2UgZG9uJ3QgYnJlYWsgcHVyZSBzQ1UgZm9yIGl0ZW1zIHRoYXQgZG9uJ3QgdXNlIGlzU2Nyb2xsaW5nIHBhcmFtLlxuICAgICAgICB0aGlzLl9nZXRJdGVtU3R5bGVDYWNoZSgtMSwgbnVsbCk7XG4gICAgICB9KTtcbiAgICB9O1xuICB9O1xufVxuXG4vLyBOT1RFOiBJIGNvbnNpZGVyZWQgZnVydGhlciB3cmFwcGluZyBpbmRpdmlkdWFsIGl0ZW1zIHdpdGggYSBwdXJlIExpc3RJdGVtIGNvbXBvbmVudC5cbi8vIFRoaXMgd291bGQgYXZvaWQgZXZlciBjYWxsaW5nIHRoZSByZW5kZXIgZnVuY3Rpb24gZm9yIHRoZSBzYW1lIGluZGV4IG1vcmUgdGhhbiBvbmNlLFxuLy8gQnV0IGl0IHdvdWxkIGFsc28gYWRkIHRoZSBvdmVyaGVhZCBvZiBhIGxvdCBvZiBjb21wb25lbnRzL2ZpYmVycy5cbi8vIEkgYXNzdW1lIHBlb3BsZSBhbHJlYWR5IGRvIHRoaXMgKHJlbmRlciBmdW5jdGlvbiByZXR1cm5pbmcgYSBjbGFzcyBjb21wb25lbnQpLFxuLy8gU28gbXkgZG9pbmcgaXQgd291bGQganVzdCB1bm5lY2Vzc2FyaWx5IGRvdWJsZSB0aGUgd3JhcHBlcnMuXG5cbmNvbnN0IHZhbGlkYXRlU2hhcmVkUHJvcHMgPSAoXG4gIHtcbiAgICBjaGlsZHJlbixcbiAgICBkaXJlY3Rpb24sXG4gICAgaGVpZ2h0LFxuICAgIGxheW91dCxcbiAgICBpbm5lclRhZ05hbWUsXG4gICAgb3V0ZXJUYWdOYW1lLFxuICAgIHdpZHRoLFxuICB9OiBQcm9wczxhbnk+LFxuICB7IGluc3RhbmNlIH06IFN0YXRlXG4pOiB2b2lkID0+IHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAoaW5uZXJUYWdOYW1lICE9IG51bGwgfHwgb3V0ZXJUYWdOYW1lICE9IG51bGwpIHtcbiAgICAgIGlmIChkZXZXYXJuaW5nc1RhZ05hbWUgJiYgIWRldldhcm5pbmdzVGFnTmFtZS5oYXMoaW5zdGFuY2UpKSB7XG4gICAgICAgIGRldldhcm5pbmdzVGFnTmFtZS5hZGQoaW5zdGFuY2UpO1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgJ1RoZSBpbm5lclRhZ05hbWUgYW5kIG91dGVyVGFnTmFtZSBwcm9wcyBoYXZlIGJlZW4gZGVwcmVjYXRlZC4gJyArXG4gICAgICAgICAgICAnUGxlYXNlIHVzZSB0aGUgaW5uZXJFbGVtZW50VHlwZSBhbmQgb3V0ZXJFbGVtZW50VHlwZSBwcm9wcyBpbnN0ZWFkLidcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUT0RPIERlcHJlY2F0ZSBkaXJlY3Rpb24gXCJob3Jpem9udGFsXCJcbiAgICBjb25zdCBpc0hvcml6b250YWwgPSBkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJztcblxuICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7XG4gICAgICBjYXNlICdob3Jpem9udGFsJzpcbiAgICAgIGNhc2UgJ3ZlcnRpY2FsJzpcbiAgICAgICAgaWYgKGRldldhcm5pbmdzRGlyZWN0aW9uICYmICFkZXZXYXJuaW5nc0RpcmVjdGlvbi5oYXMoaW5zdGFuY2UpKSB7XG4gICAgICAgICAgZGV2V2FybmluZ3NEaXJlY3Rpb24uYWRkKGluc3RhbmNlKTtcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAnVGhlIGRpcmVjdGlvbiBwcm9wIHNob3VsZCBiZSBlaXRoZXIgXCJsdHJcIiAoZGVmYXVsdCkgb3IgXCJydGxcIi4gJyArXG4gICAgICAgICAgICAgICdQbGVhc2UgdXNlIHRoZSBsYXlvdXQgcHJvcCB0byBzcGVjaWZ5IFwidmVydGljYWxcIiAoZGVmYXVsdCkgb3IgXCJob3Jpem9udGFsXCIgb3JpZW50YXRpb24uJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdsdHInOlxuICAgICAgY2FzZSAncnRsJzpcbiAgICAgICAgLy8gVmFsaWQgdmFsdWVzXG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgJ0FuIGludmFsaWQgXCJkaXJlY3Rpb25cIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArXG4gICAgICAgICAgICAnVmFsdWUgc2hvdWxkIGJlIGVpdGhlciBcImx0clwiIG9yIFwicnRsXCIuICcgK1xuICAgICAgICAgICAgYFwiJHtkaXJlY3Rpb259XCIgd2FzIHNwZWNpZmllZC5gXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgc3dpdGNoIChsYXlvdXQpIHtcbiAgICAgIGNhc2UgJ2hvcml6b250YWwnOlxuICAgICAgY2FzZSAndmVydGljYWwnOlxuICAgICAgICAvLyBWYWxpZCB2YWx1ZXNcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAnQW4gaW52YWxpZCBcImxheW91dFwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICtcbiAgICAgICAgICAgICdWYWx1ZSBzaG91bGQgYmUgZWl0aGVyIFwiaG9yaXpvbnRhbFwiIG9yIFwidmVydGljYWxcIi4gJyArXG4gICAgICAgICAgICBgXCIke2xheW91dH1cIiB3YXMgc3BlY2lmaWVkLmBcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoY2hpbGRyZW4gPT0gbnVsbCkge1xuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICdBbiBpbnZhbGlkIFwiY2hpbGRyZW5cIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArXG4gICAgICAgICAgJ1ZhbHVlIHNob3VsZCBiZSBhIFJlYWN0IGNvbXBvbmVudC4gJyArXG4gICAgICAgICAgYFwiJHtjaGlsZHJlbiA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiBjaGlsZHJlbn1cIiB3YXMgc3BlY2lmaWVkLmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGlzSG9yaXpvbnRhbCAmJiB0eXBlb2Ygd2lkdGggIT09ICdudW1iZXInKSB7XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgJ0FuIGludmFsaWQgXCJ3aWR0aFwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICtcbiAgICAgICAgICAnSG9yaXpvbnRhbCBsaXN0cyBtdXN0IHNwZWNpZnkgYSBudW1iZXIgZm9yIHdpZHRoLiAnICtcbiAgICAgICAgICBgXCIke3dpZHRoID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIHdpZHRofVwiIHdhcyBzcGVjaWZpZWQuYFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKCFpc0hvcml6b250YWwgJiYgdHlwZW9mIGhlaWdodCAhPT0gJ251bWJlcicpIHtcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAnQW4gaW52YWxpZCBcImhlaWdodFwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICtcbiAgICAgICAgICAnVmVydGljYWwgbGlzdHMgbXVzdCBzcGVjaWZ5IGEgbnVtYmVyIGZvciBoZWlnaHQuICcgK1xuICAgICAgICAgIGBcIiR7aGVpZ2h0ID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGhlaWdodH1cIiB3YXMgc3BlY2lmaWVkLmBcbiAgICAgICk7XG4gICAgfVxuICB9XG59O1xuIiwgIi8vIEBmbG93XG5cbmltcG9ydCBjcmVhdGVMaXN0Q29tcG9uZW50IGZyb20gJy4vY3JlYXRlTGlzdENvbXBvbmVudCc7XG5cbmltcG9ydCB0eXBlIHsgUHJvcHMsIFNjcm9sbFRvQWxpZ24gfSBmcm9tICcuL2NyZWF0ZUxpc3RDb21wb25lbnQnO1xuXG5jb25zdCBERUZBVUxUX0VTVElNQVRFRF9JVEVNX1NJWkUgPSA1MDtcblxudHlwZSBWYXJpYWJsZVNpemVQcm9wcyA9IHt8XG4gIGVzdGltYXRlZEl0ZW1TaXplOiBudW1iZXIsXG4gIC4uLlByb3BzPGFueT4sXG58fTtcblxudHlwZSBpdGVtU2l6ZUdldHRlciA9IChpbmRleDogbnVtYmVyKSA9PiBudW1iZXI7XG5cbnR5cGUgSXRlbU1ldGFkYXRhID0ge3xcbiAgb2Zmc2V0OiBudW1iZXIsXG4gIHNpemU6IG51bWJlcixcbnx9O1xudHlwZSBJbnN0YW5jZVByb3BzID0ge3xcbiAgaXRlbU1ldGFkYXRhTWFwOiB7IFtpbmRleDogbnVtYmVyXTogSXRlbU1ldGFkYXRhIH0sXG4gIGVzdGltYXRlZEl0ZW1TaXplOiBudW1iZXIsXG4gIGxhc3RNZWFzdXJlZEluZGV4OiBudW1iZXIsXG58fTtcblxuY29uc3QgZ2V0SXRlbU1ldGFkYXRhID0gKFxuICBwcm9wczogUHJvcHM8YW55PixcbiAgaW5kZXg6IG51bWJlcixcbiAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wc1xuKTogSXRlbU1ldGFkYXRhID0+IHtcbiAgY29uc3QgeyBpdGVtU2l6ZSB9ID0gKChwcm9wczogYW55KTogVmFyaWFibGVTaXplUHJvcHMpO1xuICBjb25zdCB7IGl0ZW1NZXRhZGF0YU1hcCwgbGFzdE1lYXN1cmVkSW5kZXggfSA9IGluc3RhbmNlUHJvcHM7XG5cbiAgaWYgKGluZGV4ID4gbGFzdE1lYXN1cmVkSW5kZXgpIHtcbiAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICBpZiAobGFzdE1lYXN1cmVkSW5kZXggPj0gMCkge1xuICAgICAgY29uc3QgaXRlbU1ldGFkYXRhID0gaXRlbU1ldGFkYXRhTWFwW2xhc3RNZWFzdXJlZEluZGV4XTtcbiAgICAgIG9mZnNldCA9IGl0ZW1NZXRhZGF0YS5vZmZzZXQgKyBpdGVtTWV0YWRhdGEuc2l6ZTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gbGFzdE1lYXN1cmVkSW5kZXggKyAxOyBpIDw9IGluZGV4OyBpKyspIHtcbiAgICAgIGxldCBzaXplID0gKChpdGVtU2l6ZTogYW55KTogaXRlbVNpemVHZXR0ZXIpKGkpO1xuXG4gICAgICBpdGVtTWV0YWRhdGFNYXBbaV0gPSB7XG4gICAgICAgIG9mZnNldCxcbiAgICAgICAgc2l6ZSxcbiAgICAgIH07XG5cbiAgICAgIG9mZnNldCArPSBzaXplO1xuICAgIH1cblxuICAgIGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkSW5kZXggPSBpbmRleDtcbiAgfVxuXG4gIHJldHVybiBpdGVtTWV0YWRhdGFNYXBbaW5kZXhdO1xufTtcblxuY29uc3QgZmluZE5lYXJlc3RJdGVtID0gKFxuICBwcm9wczogUHJvcHM8YW55PixcbiAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wcyxcbiAgb2Zmc2V0OiBudW1iZXJcbikgPT4ge1xuICBjb25zdCB7IGl0ZW1NZXRhZGF0YU1hcCwgbGFzdE1lYXN1cmVkSW5kZXggfSA9IGluc3RhbmNlUHJvcHM7XG5cbiAgY29uc3QgbGFzdE1lYXN1cmVkSXRlbU9mZnNldCA9XG4gICAgbGFzdE1lYXN1cmVkSW5kZXggPiAwID8gaXRlbU1ldGFkYXRhTWFwW2xhc3RNZWFzdXJlZEluZGV4XS5vZmZzZXQgOiAwO1xuXG4gIGlmIChsYXN0TWVhc3VyZWRJdGVtT2Zmc2V0ID49IG9mZnNldCkge1xuICAgIC8vIElmIHdlJ3ZlIGFscmVhZHkgbWVhc3VyZWQgaXRlbXMgd2l0aGluIHRoaXMgcmFuZ2UganVzdCB1c2UgYSBiaW5hcnkgc2VhcmNoIGFzIGl0J3MgZmFzdGVyLlxuICAgIHJldHVybiBmaW5kTmVhcmVzdEl0ZW1CaW5hcnlTZWFyY2goXG4gICAgICBwcm9wcyxcbiAgICAgIGluc3RhbmNlUHJvcHMsXG4gICAgICBsYXN0TWVhc3VyZWRJbmRleCxcbiAgICAgIDAsXG4gICAgICBvZmZzZXRcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIC8vIElmIHdlIGhhdmVuJ3QgeWV0IG1lYXN1cmVkIHRoaXMgaGlnaCwgZmFsbGJhY2sgdG8gYW4gZXhwb25lbnRpYWwgc2VhcmNoIHdpdGggYW4gaW5uZXIgYmluYXJ5IHNlYXJjaC5cbiAgICAvLyBUaGUgZXhwb25lbnRpYWwgc2VhcmNoIGF2b2lkcyBwcmUtY29tcHV0aW5nIHNpemVzIGZvciB0aGUgZnVsbCBzZXQgb2YgaXRlbXMgYXMgYSBiaW5hcnkgc2VhcmNoIHdvdWxkLlxuICAgIC8vIFRoZSBvdmVyYWxsIGNvbXBsZXhpdHkgZm9yIHRoaXMgYXBwcm9hY2ggaXMgTyhsb2cgbikuXG4gICAgcmV0dXJuIGZpbmROZWFyZXN0SXRlbUV4cG9uZW50aWFsU2VhcmNoKFxuICAgICAgcHJvcHMsXG4gICAgICBpbnN0YW5jZVByb3BzLFxuICAgICAgTWF0aC5tYXgoMCwgbGFzdE1lYXN1cmVkSW5kZXgpLFxuICAgICAgb2Zmc2V0XG4gICAgKTtcbiAgfVxufTtcblxuY29uc3QgZmluZE5lYXJlc3RJdGVtQmluYXJ5U2VhcmNoID0gKFxuICBwcm9wczogUHJvcHM8YW55PixcbiAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wcyxcbiAgaGlnaDogbnVtYmVyLFxuICBsb3c6IG51bWJlcixcbiAgb2Zmc2V0OiBudW1iZXJcbik6IG51bWJlciA9PiB7XG4gIHdoaWxlIChsb3cgPD0gaGlnaCkge1xuICAgIGNvbnN0IG1pZGRsZSA9IGxvdyArIE1hdGguZmxvb3IoKGhpZ2ggLSBsb3cpIC8gMik7XG4gICAgY29uc3QgY3VycmVudE9mZnNldCA9IGdldEl0ZW1NZXRhZGF0YShwcm9wcywgbWlkZGxlLCBpbnN0YW5jZVByb3BzKS5vZmZzZXQ7XG5cbiAgICBpZiAoY3VycmVudE9mZnNldCA9PT0gb2Zmc2V0KSB7XG4gICAgICByZXR1cm4gbWlkZGxlO1xuICAgIH0gZWxzZSBpZiAoY3VycmVudE9mZnNldCA8IG9mZnNldCkge1xuICAgICAgbG93ID0gbWlkZGxlICsgMTtcbiAgICB9IGVsc2UgaWYgKGN1cnJlbnRPZmZzZXQgPiBvZmZzZXQpIHtcbiAgICAgIGhpZ2ggPSBtaWRkbGUgLSAxO1xuICAgIH1cbiAgfVxuXG4gIGlmIChsb3cgPiAwKSB7XG4gICAgcmV0dXJuIGxvdyAtIDE7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbn07XG5cbmNvbnN0IGZpbmROZWFyZXN0SXRlbUV4cG9uZW50aWFsU2VhcmNoID0gKFxuICBwcm9wczogUHJvcHM8YW55PixcbiAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wcyxcbiAgaW5kZXg6IG51bWJlcixcbiAgb2Zmc2V0OiBudW1iZXJcbik6IG51bWJlciA9PiB7XG4gIGNvbnN0IHsgaXRlbUNvdW50IH0gPSBwcm9wcztcbiAgbGV0IGludGVydmFsID0gMTtcblxuICB3aGlsZSAoXG4gICAgaW5kZXggPCBpdGVtQ291bnQgJiZcbiAgICBnZXRJdGVtTWV0YWRhdGEocHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKS5vZmZzZXQgPCBvZmZzZXRcbiAgKSB7XG4gICAgaW5kZXggKz0gaW50ZXJ2YWw7XG4gICAgaW50ZXJ2YWwgKj0gMjtcbiAgfVxuXG4gIHJldHVybiBmaW5kTmVhcmVzdEl0ZW1CaW5hcnlTZWFyY2goXG4gICAgcHJvcHMsXG4gICAgaW5zdGFuY2VQcm9wcyxcbiAgICBNYXRoLm1pbihpbmRleCwgaXRlbUNvdW50IC0gMSksXG4gICAgTWF0aC5mbG9vcihpbmRleCAvIDIpLFxuICAgIG9mZnNldFxuICApO1xufTtcblxuY29uc3QgZ2V0RXN0aW1hdGVkVG90YWxTaXplID0gKFxuICB7IGl0ZW1Db3VudCB9OiBQcm9wczxhbnk+LFxuICB7IGl0ZW1NZXRhZGF0YU1hcCwgZXN0aW1hdGVkSXRlbVNpemUsIGxhc3RNZWFzdXJlZEluZGV4IH06IEluc3RhbmNlUHJvcHNcbikgPT4ge1xuICBsZXQgdG90YWxTaXplT2ZNZWFzdXJlZEl0ZW1zID0gMDtcblxuICAvLyBFZGdlIGNhc2UgY2hlY2sgZm9yIHdoZW4gdGhlIG51bWJlciBvZiBpdGVtcyBkZWNyZWFzZXMgd2hpbGUgYSBzY3JvbGwgaXMgaW4gcHJvZ3Jlc3MuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9idmF1Z2huL3JlYWN0LXdpbmRvdy9wdWxsLzEzOFxuICBpZiAobGFzdE1lYXN1cmVkSW5kZXggPj0gaXRlbUNvdW50KSB7XG4gICAgbGFzdE1lYXN1cmVkSW5kZXggPSBpdGVtQ291bnQgLSAxO1xuICB9XG5cbiAgaWYgKGxhc3RNZWFzdXJlZEluZGV4ID49IDApIHtcbiAgICBjb25zdCBpdGVtTWV0YWRhdGEgPSBpdGVtTWV0YWRhdGFNYXBbbGFzdE1lYXN1cmVkSW5kZXhdO1xuICAgIHRvdGFsU2l6ZU9mTWVhc3VyZWRJdGVtcyA9IGl0ZW1NZXRhZGF0YS5vZmZzZXQgKyBpdGVtTWV0YWRhdGEuc2l6ZTtcbiAgfVxuXG4gIGNvbnN0IG51bVVubWVhc3VyZWRJdGVtcyA9IGl0ZW1Db3VudCAtIGxhc3RNZWFzdXJlZEluZGV4IC0gMTtcbiAgY29uc3QgdG90YWxTaXplT2ZVbm1lYXN1cmVkSXRlbXMgPSBudW1Vbm1lYXN1cmVkSXRlbXMgKiBlc3RpbWF0ZWRJdGVtU2l6ZTtcblxuICByZXR1cm4gdG90YWxTaXplT2ZNZWFzdXJlZEl0ZW1zICsgdG90YWxTaXplT2ZVbm1lYXN1cmVkSXRlbXM7XG59O1xuXG5jb25zdCBWYXJpYWJsZVNpemVMaXN0ID0gY3JlYXRlTGlzdENvbXBvbmVudCh7XG4gIGdldEl0ZW1PZmZzZXQ6IChcbiAgICBwcm9wczogUHJvcHM8YW55PixcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHNcbiAgKTogbnVtYmVyID0+IGdldEl0ZW1NZXRhZGF0YShwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpLm9mZnNldCxcblxuICBnZXRJdGVtU2l6ZTogKFxuICAgIHByb3BzOiBQcm9wczxhbnk+LFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wc1xuICApOiBudW1iZXIgPT4gaW5zdGFuY2VQcm9wcy5pdGVtTWV0YWRhdGFNYXBbaW5kZXhdLnNpemUsXG5cbiAgZ2V0RXN0aW1hdGVkVG90YWxTaXplLFxuXG4gIGdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50OiAoXG4gICAgcHJvcHM6IFByb3BzPGFueT4sXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBhbGlnbjogU2Nyb2xsVG9BbGlnbixcbiAgICBzY3JvbGxPZmZzZXQ6IG51bWJlcixcbiAgICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzLFxuICAgIHNjcm9sbGJhclNpemU6IG51bWJlclxuICApOiBudW1iZXIgPT4ge1xuICAgIGNvbnN0IHsgZGlyZWN0aW9uLCBoZWlnaHQsIGxheW91dCwgd2lkdGggfSA9IHByb3BzO1xuXG4gICAgLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9uIFwiaG9yaXpvbnRhbFwiXG4gICAgY29uc3QgaXNIb3Jpem9udGFsID0gZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgbGF5b3V0ID09PSAnaG9yaXpvbnRhbCc7XG4gICAgY29uc3Qgc2l6ZSA9ICgoKGlzSG9yaXpvbnRhbCA/IHdpZHRoIDogaGVpZ2h0KTogYW55KTogbnVtYmVyKTtcbiAgICBjb25zdCBpdGVtTWV0YWRhdGEgPSBnZXRJdGVtTWV0YWRhdGEocHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKTtcblxuICAgIC8vIEdldCBlc3RpbWF0ZWQgdG90YWwgc2l6ZSBhZnRlciBJdGVtTWV0YWRhdGEgaXMgY29tcHV0ZWQsXG4gICAgLy8gVG8gZW5zdXJlIGl0IHJlZmxlY3RzIGFjdHVhbCBtZWFzdXJlbWVudHMgaW5zdGVhZCBvZiBqdXN0IGVzdGltYXRlcy5cbiAgICBjb25zdCBlc3RpbWF0ZWRUb3RhbFNpemUgPSBnZXRFc3RpbWF0ZWRUb3RhbFNpemUocHJvcHMsIGluc3RhbmNlUHJvcHMpO1xuXG4gICAgY29uc3QgbWF4T2Zmc2V0ID0gTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgTWF0aC5taW4oZXN0aW1hdGVkVG90YWxTaXplIC0gc2l6ZSwgaXRlbU1ldGFkYXRhLm9mZnNldClcbiAgICApO1xuICAgIGNvbnN0IG1pbk9mZnNldCA9IE1hdGgubWF4KFxuICAgICAgMCxcbiAgICAgIGl0ZW1NZXRhZGF0YS5vZmZzZXQgLSBzaXplICsgaXRlbU1ldGFkYXRhLnNpemUgKyBzY3JvbGxiYXJTaXplXG4gICAgKTtcblxuICAgIGlmIChhbGlnbiA9PT0gJ3NtYXJ0Jykge1xuICAgICAgaWYgKFxuICAgICAgICBzY3JvbGxPZmZzZXQgPj0gbWluT2Zmc2V0IC0gc2l6ZSAmJlxuICAgICAgICBzY3JvbGxPZmZzZXQgPD0gbWF4T2Zmc2V0ICsgc2l6ZVxuICAgICAgKSB7XG4gICAgICAgIGFsaWduID0gJ2F1dG8nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWxpZ24gPSAnY2VudGVyJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzd2l0Y2ggKGFsaWduKSB7XG4gICAgICBjYXNlICdzdGFydCc6XG4gICAgICAgIHJldHVybiBtYXhPZmZzZXQ7XG4gICAgICBjYXNlICdlbmQnOlxuICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuICAgICAgY2FzZSAnY2VudGVyJzpcbiAgICAgICAgcmV0dXJuIE1hdGgucm91bmQobWluT2Zmc2V0ICsgKG1heE9mZnNldCAtIG1pbk9mZnNldCkgLyAyKTtcbiAgICAgIGNhc2UgJ2F1dG8nOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKHNjcm9sbE9mZnNldCA+PSBtaW5PZmZzZXQgJiYgc2Nyb2xsT2Zmc2V0IDw9IG1heE9mZnNldCkge1xuICAgICAgICAgIHJldHVybiBzY3JvbGxPZmZzZXQ7XG4gICAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsT2Zmc2V0IDwgbWluT2Zmc2V0KSB7XG4gICAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuICAgICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGdldFN0YXJ0SW5kZXhGb3JPZmZzZXQ6IChcbiAgICBwcm9wczogUHJvcHM8YW55PixcbiAgICBvZmZzZXQ6IG51bWJlcixcbiAgICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzXG4gICk6IG51bWJlciA9PiBmaW5kTmVhcmVzdEl0ZW0ocHJvcHMsIGluc3RhbmNlUHJvcHMsIG9mZnNldCksXG5cbiAgZ2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleDogKFxuICAgIHByb3BzOiBQcm9wczxhbnk+LFxuICAgIHN0YXJ0SW5kZXg6IG51bWJlcixcbiAgICBzY3JvbGxPZmZzZXQ6IG51bWJlcixcbiAgICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzXG4gICk6IG51bWJlciA9PiB7XG4gICAgY29uc3QgeyBkaXJlY3Rpb24sIGhlaWdodCwgaXRlbUNvdW50LCBsYXlvdXQsIHdpZHRoIH0gPSBwcm9wcztcblxuICAgIC8vIFRPRE8gRGVwcmVjYXRlIGRpcmVjdGlvbiBcImhvcml6b250YWxcIlxuICAgIGNvbnN0IGlzSG9yaXpvbnRhbCA9IGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnIHx8IGxheW91dCA9PT0gJ2hvcml6b250YWwnO1xuICAgIGNvbnN0IHNpemUgPSAoKChpc0hvcml6b250YWwgPyB3aWR0aCA6IGhlaWdodCk6IGFueSk6IG51bWJlcik7XG4gICAgY29uc3QgaXRlbU1ldGFkYXRhID0gZ2V0SXRlbU1ldGFkYXRhKHByb3BzLCBzdGFydEluZGV4LCBpbnN0YW5jZVByb3BzKTtcbiAgICBjb25zdCBtYXhPZmZzZXQgPSBzY3JvbGxPZmZzZXQgKyBzaXplO1xuXG4gICAgbGV0IG9mZnNldCA9IGl0ZW1NZXRhZGF0YS5vZmZzZXQgKyBpdGVtTWV0YWRhdGEuc2l6ZTtcbiAgICBsZXQgc3RvcEluZGV4ID0gc3RhcnRJbmRleDtcblxuICAgIHdoaWxlIChzdG9wSW5kZXggPCBpdGVtQ291bnQgLSAxICYmIG9mZnNldCA8IG1heE9mZnNldCkge1xuICAgICAgc3RvcEluZGV4Kys7XG4gICAgICBvZmZzZXQgKz0gZ2V0SXRlbU1ldGFkYXRhKHByb3BzLCBzdG9wSW5kZXgsIGluc3RhbmNlUHJvcHMpLnNpemU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0b3BJbmRleDtcbiAgfSxcblxuICBpbml0SW5zdGFuY2VQcm9wcyhwcm9wczogUHJvcHM8YW55PiwgaW5zdGFuY2U6IGFueSk6IEluc3RhbmNlUHJvcHMge1xuICAgIGNvbnN0IHsgZXN0aW1hdGVkSXRlbVNpemUgfSA9ICgocHJvcHM6IGFueSk6IFZhcmlhYmxlU2l6ZVByb3BzKTtcblxuICAgIGNvbnN0IGluc3RhbmNlUHJvcHMgPSB7XG4gICAgICBpdGVtTWV0YWRhdGFNYXA6IHt9LFxuICAgICAgZXN0aW1hdGVkSXRlbVNpemU6IGVzdGltYXRlZEl0ZW1TaXplIHx8IERFRkFVTFRfRVNUSU1BVEVEX0lURU1fU0laRSxcbiAgICAgIGxhc3RNZWFzdXJlZEluZGV4OiAtMSxcbiAgICB9O1xuXG4gICAgaW5zdGFuY2UucmVzZXRBZnRlckluZGV4ID0gKFxuICAgICAgaW5kZXg6IG51bWJlcixcbiAgICAgIHNob3VsZEZvcmNlVXBkYXRlPzogYm9vbGVhbiA9IHRydWVcbiAgICApID0+IHtcbiAgICAgIGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkSW5kZXggPSBNYXRoLm1pbihcbiAgICAgICAgaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRJbmRleCxcbiAgICAgICAgaW5kZXggLSAxXG4gICAgICApO1xuXG4gICAgICAvLyBXZSBjb3VsZCBwb3RlbnRpYWxseSBvcHRpbWl6ZSBmdXJ0aGVyIGJ5IG9ubHkgZXZpY3Rpbmcgc3R5bGVzIGFmdGVyIHRoaXMgaW5kZXgsXG4gICAgICAvLyBCdXQgc2luY2Ugc3R5bGVzIGFyZSBvbmx5IGNhY2hlZCB3aGlsZSBzY3JvbGxpbmcgaXMgaW4gcHJvZ3Jlc3MtXG4gICAgICAvLyBJdCBzZWVtcyBhbiB1bm5lY2Vzc2FyeSBvcHRpbWl6YXRpb24uXG4gICAgICAvLyBJdCdzIHVubGlrZWx5IHRoYXQgcmVzZXRBZnRlckluZGV4KCkgd2lsbCBiZSBjYWxsZWQgd2hpbGUgYSB1c2VyIGlzIHNjcm9sbGluZy5cbiAgICAgIGluc3RhbmNlLl9nZXRJdGVtU3R5bGVDYWNoZSgtMSk7XG5cbiAgICAgIGlmIChzaG91bGRGb3JjZVVwZGF0ZSkge1xuICAgICAgICBpbnN0YW5jZS5mb3JjZVVwZGF0ZSgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gaW5zdGFuY2VQcm9wcztcbiAgfSxcblxuICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlOiBmYWxzZSxcblxuICB2YWxpZGF0ZVByb3BzOiAoeyBpdGVtU2l6ZSB9OiBQcm9wczxhbnk+KTogdm9pZCA9PiB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmICh0eXBlb2YgaXRlbVNpemUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgJ0FuIGludmFsaWQgXCJpdGVtU2l6ZVwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICtcbiAgICAgICAgICAgICdWYWx1ZSBzaG91bGQgYmUgYSBmdW5jdGlvbi4gJyArXG4gICAgICAgICAgICBgXCIke2l0ZW1TaXplID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGl0ZW1TaXplfVwiIHdhcyBzcGVjaWZpZWQuYFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBWYXJpYWJsZVNpemVMaXN0O1xuIiwgIi8vIEBmbG93XG5cbmltcG9ydCBjcmVhdGVHcmlkQ29tcG9uZW50IGZyb20gJy4vY3JlYXRlR3JpZENvbXBvbmVudCc7XG5cbmltcG9ydCB0eXBlIHsgUHJvcHMsIFNjcm9sbFRvQWxpZ24gfSBmcm9tICcuL2NyZWF0ZUdyaWRDb21wb25lbnQnO1xuXG5jb25zdCBGaXhlZFNpemVHcmlkID0gY3JlYXRlR3JpZENvbXBvbmVudCh7XG4gIGdldENvbHVtbk9mZnNldDogKHsgY29sdW1uV2lkdGggfTogUHJvcHM8YW55PiwgaW5kZXg6IG51bWJlcik6IG51bWJlciA9PlxuICAgIGluZGV4ICogKChjb2x1bW5XaWR0aDogYW55KTogbnVtYmVyKSxcblxuICBnZXRDb2x1bW5XaWR0aDogKHsgY29sdW1uV2lkdGggfTogUHJvcHM8YW55PiwgaW5kZXg6IG51bWJlcik6IG51bWJlciA9PlxuICAgICgoY29sdW1uV2lkdGg6IGFueSk6IG51bWJlciksXG5cbiAgZ2V0Um93T2Zmc2V0OiAoeyByb3dIZWlnaHQgfTogUHJvcHM8YW55PiwgaW5kZXg6IG51bWJlcik6IG51bWJlciA9PlxuICAgIGluZGV4ICogKChyb3dIZWlnaHQ6IGFueSk6IG51bWJlciksXG5cbiAgZ2V0Um93SGVpZ2h0OiAoeyByb3dIZWlnaHQgfTogUHJvcHM8YW55PiwgaW5kZXg6IG51bWJlcik6IG51bWJlciA9PlxuICAgICgocm93SGVpZ2h0OiBhbnkpOiBudW1iZXIpLFxuXG4gIGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0OiAoeyByb3dDb3VudCwgcm93SGVpZ2h0IH06IFByb3BzPGFueT4pID0+XG4gICAgKChyb3dIZWlnaHQ6IGFueSk6IG51bWJlcikgKiByb3dDb3VudCxcblxuICBnZXRFc3RpbWF0ZWRUb3RhbFdpZHRoOiAoeyBjb2x1bW5Db3VudCwgY29sdW1uV2lkdGggfTogUHJvcHM8YW55PikgPT5cbiAgICAoKGNvbHVtbldpZHRoOiBhbnkpOiBudW1iZXIpICogY29sdW1uQ291bnQsXG5cbiAgZ2V0T2Zmc2V0Rm9yQ29sdW1uQW5kQWxpZ25tZW50OiAoXG4gICAgeyBjb2x1bW5Db3VudCwgY29sdW1uV2lkdGgsIHdpZHRoIH06IFByb3BzPGFueT4sXG4gICAgY29sdW1uSW5kZXg6IG51bWJlcixcbiAgICBhbGlnbjogU2Nyb2xsVG9BbGlnbixcbiAgICBzY3JvbGxMZWZ0OiBudW1iZXIsXG4gICAgaW5zdGFuY2VQcm9wczogdHlwZW9mIHVuZGVmaW5lZCxcbiAgICBzY3JvbGxiYXJTaXplOiBudW1iZXJcbiAgKTogbnVtYmVyID0+IHtcbiAgICBjb25zdCBsYXN0Q29sdW1uT2Zmc2V0ID0gTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgY29sdW1uQ291bnQgKiAoKGNvbHVtbldpZHRoOiBhbnkpOiBudW1iZXIpIC0gd2lkdGhcbiAgICApO1xuICAgIGNvbnN0IG1heE9mZnNldCA9IE1hdGgubWluKFxuICAgICAgbGFzdENvbHVtbk9mZnNldCxcbiAgICAgIGNvbHVtbkluZGV4ICogKChjb2x1bW5XaWR0aDogYW55KTogbnVtYmVyKVxuICAgICk7XG4gICAgY29uc3QgbWluT2Zmc2V0ID0gTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgY29sdW1uSW5kZXggKiAoKGNvbHVtbldpZHRoOiBhbnkpOiBudW1iZXIpIC1cbiAgICAgICAgd2lkdGggK1xuICAgICAgICBzY3JvbGxiYXJTaXplICtcbiAgICAgICAgKChjb2x1bW5XaWR0aDogYW55KTogbnVtYmVyKVxuICAgICk7XG5cbiAgICBpZiAoYWxpZ24gPT09ICdzbWFydCcpIHtcbiAgICAgIGlmIChzY3JvbGxMZWZ0ID49IG1pbk9mZnNldCAtIHdpZHRoICYmIHNjcm9sbExlZnQgPD0gbWF4T2Zmc2V0ICsgd2lkdGgpIHtcbiAgICAgICAgYWxpZ24gPSAnYXV0byc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhbGlnbiA9ICdjZW50ZXInO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN3aXRjaCAoYWxpZ24pIHtcbiAgICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcbiAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICBjYXNlICdjZW50ZXInOlxuICAgICAgICAvLyBcIkNlbnRlcmVkXCIgb2Zmc2V0IGlzIHVzdWFsbHkgdGhlIGF2ZXJhZ2Ugb2YgdGhlIG1pbiBhbmQgbWF4LlxuICAgICAgICAvLyBCdXQgbmVhciB0aGUgZWRnZXMgb2YgdGhlIGxpc3QsIHRoaXMgZG9lc24ndCBob2xkIHRydWUuXG4gICAgICAgIGNvbnN0IG1pZGRsZU9mZnNldCA9IE1hdGgucm91bmQoXG4gICAgICAgICAgbWluT2Zmc2V0ICsgKG1heE9mZnNldCAtIG1pbk9mZnNldCkgLyAyXG4gICAgICAgICk7XG4gICAgICAgIGlmIChtaWRkbGVPZmZzZXQgPCBNYXRoLmNlaWwod2lkdGggLyAyKSkge1xuICAgICAgICAgIHJldHVybiAwOyAvLyBuZWFyIHRoZSBiZWdpbm5pbmdcbiAgICAgICAgfSBlbHNlIGlmIChtaWRkbGVPZmZzZXQgPiBsYXN0Q29sdW1uT2Zmc2V0ICsgTWF0aC5mbG9vcih3aWR0aCAvIDIpKSB7XG4gICAgICAgICAgcmV0dXJuIGxhc3RDb2x1bW5PZmZzZXQ7IC8vIG5lYXIgdGhlIGVuZFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBtaWRkbGVPZmZzZXQ7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgJ2F1dG8nOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKHNjcm9sbExlZnQgPj0gbWluT2Zmc2V0ICYmIHNjcm9sbExlZnQgPD0gbWF4T2Zmc2V0KSB7XG4gICAgICAgICAgcmV0dXJuIHNjcm9sbExlZnQ7XG4gICAgICAgIH0gZWxzZSBpZiAobWluT2Zmc2V0ID4gbWF4T2Zmc2V0KSB7XG4gICAgICAgICAgLy8gQmVjYXVzZSB3ZSBvbmx5IHRha2UgaW50byBhY2NvdW50IHRoZSBzY3JvbGxiYXIgc2l6ZSB3aGVuIGNhbGN1bGF0aW5nIG1pbk9mZnNldFxuICAgICAgICAgIC8vIHRoaXMgdmFsdWUgY2FuIGJlIGxhcmdlciB0aGFuIG1heE9mZnNldCB3aGVuIGF0IHRoZSBlbmQgb2YgdGhlIGxpc3RcbiAgICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuICAgICAgICB9IGVsc2UgaWYgKHNjcm9sbExlZnQgPCBtaW5PZmZzZXQpIHtcbiAgICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBtYXhPZmZzZXQ7XG4gICAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgZ2V0T2Zmc2V0Rm9yUm93QW5kQWxpZ25tZW50OiAoXG4gICAgeyByb3dIZWlnaHQsIGhlaWdodCwgcm93Q291bnQgfTogUHJvcHM8YW55PixcbiAgICByb3dJbmRleDogbnVtYmVyLFxuICAgIGFsaWduOiBTY3JvbGxUb0FsaWduLFxuICAgIHNjcm9sbFRvcDogbnVtYmVyLFxuICAgIGluc3RhbmNlUHJvcHM6IHR5cGVvZiB1bmRlZmluZWQsXG4gICAgc2Nyb2xsYmFyU2l6ZTogbnVtYmVyXG4gICk6IG51bWJlciA9PiB7XG4gICAgY29uc3QgbGFzdFJvd09mZnNldCA9IE1hdGgubWF4KFxuICAgICAgMCxcbiAgICAgIHJvd0NvdW50ICogKChyb3dIZWlnaHQ6IGFueSk6IG51bWJlcikgLSBoZWlnaHRcbiAgICApO1xuICAgIGNvbnN0IG1heE9mZnNldCA9IE1hdGgubWluKFxuICAgICAgbGFzdFJvd09mZnNldCxcbiAgICAgIHJvd0luZGV4ICogKChyb3dIZWlnaHQ6IGFueSk6IG51bWJlcilcbiAgICApO1xuICAgIGNvbnN0IG1pbk9mZnNldCA9IE1hdGgubWF4KFxuICAgICAgMCxcbiAgICAgIHJvd0luZGV4ICogKChyb3dIZWlnaHQ6IGFueSk6IG51bWJlcikgLVxuICAgICAgICBoZWlnaHQgK1xuICAgICAgICBzY3JvbGxiYXJTaXplICtcbiAgICAgICAgKChyb3dIZWlnaHQ6IGFueSk6IG51bWJlcilcbiAgICApO1xuXG4gICAgaWYgKGFsaWduID09PSAnc21hcnQnKSB7XG4gICAgICBpZiAoc2Nyb2xsVG9wID49IG1pbk9mZnNldCAtIGhlaWdodCAmJiBzY3JvbGxUb3AgPD0gbWF4T2Zmc2V0ICsgaGVpZ2h0KSB7XG4gICAgICAgIGFsaWduID0gJ2F1dG8nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWxpZ24gPSAnY2VudGVyJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzd2l0Y2ggKGFsaWduKSB7XG4gICAgICBjYXNlICdzdGFydCc6XG4gICAgICAgIHJldHVybiBtYXhPZmZzZXQ7XG4gICAgICBjYXNlICdlbmQnOlxuICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuICAgICAgY2FzZSAnY2VudGVyJzpcbiAgICAgICAgLy8gXCJDZW50ZXJlZFwiIG9mZnNldCBpcyB1c3VhbGx5IHRoZSBhdmVyYWdlIG9mIHRoZSBtaW4gYW5kIG1heC5cbiAgICAgICAgLy8gQnV0IG5lYXIgdGhlIGVkZ2VzIG9mIHRoZSBsaXN0LCB0aGlzIGRvZXNuJ3QgaG9sZCB0cnVlLlxuICAgICAgICBjb25zdCBtaWRkbGVPZmZzZXQgPSBNYXRoLnJvdW5kKFxuICAgICAgICAgIG1pbk9mZnNldCArIChtYXhPZmZzZXQgLSBtaW5PZmZzZXQpIC8gMlxuICAgICAgICApO1xuICAgICAgICBpZiAobWlkZGxlT2Zmc2V0IDwgTWF0aC5jZWlsKGhlaWdodCAvIDIpKSB7XG4gICAgICAgICAgcmV0dXJuIDA7IC8vIG5lYXIgdGhlIGJlZ2lubmluZ1xuICAgICAgICB9IGVsc2UgaWYgKG1pZGRsZU9mZnNldCA+IGxhc3RSb3dPZmZzZXQgKyBNYXRoLmZsb29yKGhlaWdodCAvIDIpKSB7XG4gICAgICAgICAgcmV0dXJuIGxhc3RSb3dPZmZzZXQ7IC8vIG5lYXIgdGhlIGVuZFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBtaWRkbGVPZmZzZXQ7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgJ2F1dG8nOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKHNjcm9sbFRvcCA+PSBtaW5PZmZzZXQgJiYgc2Nyb2xsVG9wIDw9IG1heE9mZnNldCkge1xuICAgICAgICAgIHJldHVybiBzY3JvbGxUb3A7XG4gICAgICAgIH0gZWxzZSBpZiAobWluT2Zmc2V0ID4gbWF4T2Zmc2V0KSB7XG4gICAgICAgICAgLy8gQmVjYXVzZSB3ZSBvbmx5IHRha2UgaW50byBhY2NvdW50IHRoZSBzY3JvbGxiYXIgc2l6ZSB3aGVuIGNhbGN1bGF0aW5nIG1pbk9mZnNldFxuICAgICAgICAgIC8vIHRoaXMgdmFsdWUgY2FuIGJlIGxhcmdlciB0aGFuIG1heE9mZnNldCB3aGVuIGF0IHRoZSBlbmQgb2YgdGhlIGxpc3RcbiAgICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuICAgICAgICB9IGVsc2UgaWYgKHNjcm9sbFRvcCA8IG1pbk9mZnNldCkge1xuICAgICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcbiAgICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBnZXRDb2x1bW5TdGFydEluZGV4Rm9yT2Zmc2V0OiAoXG4gICAgeyBjb2x1bW5XaWR0aCwgY29sdW1uQ291bnQgfTogUHJvcHM8YW55PixcbiAgICBzY3JvbGxMZWZ0OiBudW1iZXJcbiAgKTogbnVtYmVyID0+XG4gICAgTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgTWF0aC5taW4oXG4gICAgICAgIGNvbHVtbkNvdW50IC0gMSxcbiAgICAgICAgTWF0aC5mbG9vcihzY3JvbGxMZWZ0IC8gKChjb2x1bW5XaWR0aDogYW55KTogbnVtYmVyKSlcbiAgICAgIClcbiAgICApLFxuXG4gIGdldENvbHVtblN0b3BJbmRleEZvclN0YXJ0SW5kZXg6IChcbiAgICB7IGNvbHVtbldpZHRoLCBjb2x1bW5Db3VudCwgd2lkdGggfTogUHJvcHM8YW55PixcbiAgICBzdGFydEluZGV4OiBudW1iZXIsXG4gICAgc2Nyb2xsTGVmdDogbnVtYmVyXG4gICk6IG51bWJlciA9PiB7XG4gICAgY29uc3QgbGVmdCA9IHN0YXJ0SW5kZXggKiAoKGNvbHVtbldpZHRoOiBhbnkpOiBudW1iZXIpO1xuICAgIGNvbnN0IG51bVZpc2libGVDb2x1bW5zID0gTWF0aC5jZWlsKFxuICAgICAgKHdpZHRoICsgc2Nyb2xsTGVmdCAtIGxlZnQpIC8gKChjb2x1bW5XaWR0aDogYW55KTogbnVtYmVyKVxuICAgICk7XG4gICAgcmV0dXJuIE1hdGgubWF4KFxuICAgICAgMCxcbiAgICAgIE1hdGgubWluKFxuICAgICAgICBjb2x1bW5Db3VudCAtIDEsXG4gICAgICAgIHN0YXJ0SW5kZXggKyBudW1WaXNpYmxlQ29sdW1ucyAtIDEgLy8gLTEgaXMgYmVjYXVzZSBzdG9wIGluZGV4IGlzIGluY2x1c2l2ZVxuICAgICAgKVxuICAgICk7XG4gIH0sXG5cbiAgZ2V0Um93U3RhcnRJbmRleEZvck9mZnNldDogKFxuICAgIHsgcm93SGVpZ2h0LCByb3dDb3VudCB9OiBQcm9wczxhbnk+LFxuICAgIHNjcm9sbFRvcDogbnVtYmVyXG4gICk6IG51bWJlciA9PlxuICAgIE1hdGgubWF4KFxuICAgICAgMCxcbiAgICAgIE1hdGgubWluKHJvd0NvdW50IC0gMSwgTWF0aC5mbG9vcihzY3JvbGxUb3AgLyAoKHJvd0hlaWdodDogYW55KTogbnVtYmVyKSkpXG4gICAgKSxcblxuICBnZXRSb3dTdG9wSW5kZXhGb3JTdGFydEluZGV4OiAoXG4gICAgeyByb3dIZWlnaHQsIHJvd0NvdW50LCBoZWlnaHQgfTogUHJvcHM8YW55PixcbiAgICBzdGFydEluZGV4OiBudW1iZXIsXG4gICAgc2Nyb2xsVG9wOiBudW1iZXJcbiAgKTogbnVtYmVyID0+IHtcbiAgICBjb25zdCB0b3AgPSBzdGFydEluZGV4ICogKChyb3dIZWlnaHQ6IGFueSk6IG51bWJlcik7XG4gICAgY29uc3QgbnVtVmlzaWJsZVJvd3MgPSBNYXRoLmNlaWwoXG4gICAgICAoaGVpZ2h0ICsgc2Nyb2xsVG9wIC0gdG9wKSAvICgocm93SGVpZ2h0OiBhbnkpOiBudW1iZXIpXG4gICAgKTtcbiAgICByZXR1cm4gTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgTWF0aC5taW4oXG4gICAgICAgIHJvd0NvdW50IC0gMSxcbiAgICAgICAgc3RhcnRJbmRleCArIG51bVZpc2libGVSb3dzIC0gMSAvLyAtMSBpcyBiZWNhdXNlIHN0b3AgaW5kZXggaXMgaW5jbHVzaXZlXG4gICAgICApXG4gICAgKTtcbiAgfSxcblxuICBpbml0SW5zdGFuY2VQcm9wcyhwcm9wczogUHJvcHM8YW55Pik6IGFueSB7XG4gICAgLy8gTm9vcFxuICB9LFxuXG4gIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2U6IHRydWUsXG5cbiAgdmFsaWRhdGVQcm9wczogKHsgY29sdW1uV2lkdGgsIHJvd0hlaWdodCB9OiBQcm9wczxhbnk+KTogdm9pZCA9PiB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmICh0eXBlb2YgY29sdW1uV2lkdGggIT09ICdudW1iZXInKSB7XG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICdBbiBpbnZhbGlkIFwiY29sdW1uV2lkdGhcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArXG4gICAgICAgICAgICAnVmFsdWUgc2hvdWxkIGJlIGEgbnVtYmVyLiAnICtcbiAgICAgICAgICAgIGBcIiR7XG4gICAgICAgICAgICAgIGNvbHVtbldpZHRoID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGNvbHVtbldpZHRoXG4gICAgICAgICAgICB9XCIgd2FzIHNwZWNpZmllZC5gXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygcm93SGVpZ2h0ICE9PSAnbnVtYmVyJykge1xuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAnQW4gaW52YWxpZCBcInJvd0hlaWdodFwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICtcbiAgICAgICAgICAgICdWYWx1ZSBzaG91bGQgYmUgYSBudW1iZXIuICcgK1xuICAgICAgICAgICAgYFwiJHtyb3dIZWlnaHQgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2Ygcm93SGVpZ2h0fVwiIHdhcyBzcGVjaWZpZWQuYFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBGaXhlZFNpemVHcmlkO1xuIiwgIi8vIEBmbG93XG5cbmltcG9ydCBjcmVhdGVMaXN0Q29tcG9uZW50IGZyb20gJy4vY3JlYXRlTGlzdENvbXBvbmVudCc7XG5cbmltcG9ydCB0eXBlIHsgUHJvcHMsIFNjcm9sbFRvQWxpZ24gfSBmcm9tICcuL2NyZWF0ZUxpc3RDb21wb25lbnQnO1xuXG50eXBlIEluc3RhbmNlUHJvcHMgPSBhbnk7XG5cbmNvbnN0IEZpeGVkU2l6ZUxpc3QgPSBjcmVhdGVMaXN0Q29tcG9uZW50KHtcbiAgZ2V0SXRlbU9mZnNldDogKHsgaXRlbVNpemUgfTogUHJvcHM8YW55PiwgaW5kZXg6IG51bWJlcik6IG51bWJlciA9PlxuICAgIGluZGV4ICogKChpdGVtU2l6ZTogYW55KTogbnVtYmVyKSxcblxuICBnZXRJdGVtU2l6ZTogKHsgaXRlbVNpemUgfTogUHJvcHM8YW55PiwgaW5kZXg6IG51bWJlcik6IG51bWJlciA9PlxuICAgICgoaXRlbVNpemU6IGFueSk6IG51bWJlciksXG5cbiAgZ2V0RXN0aW1hdGVkVG90YWxTaXplOiAoeyBpdGVtQ291bnQsIGl0ZW1TaXplIH06IFByb3BzPGFueT4pID0+XG4gICAgKChpdGVtU2l6ZTogYW55KTogbnVtYmVyKSAqIGl0ZW1Db3VudCxcblxuICBnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudDogKFxuICAgIHsgZGlyZWN0aW9uLCBoZWlnaHQsIGl0ZW1Db3VudCwgaXRlbVNpemUsIGxheW91dCwgd2lkdGggfTogUHJvcHM8YW55PixcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGFsaWduOiBTY3JvbGxUb0FsaWduLFxuICAgIHNjcm9sbE9mZnNldDogbnVtYmVyLFxuICAgIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHMsXG4gICAgc2Nyb2xsYmFyU2l6ZTogbnVtYmVyXG4gICk6IG51bWJlciA9PiB7XG4gICAgLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9uIFwiaG9yaXpvbnRhbFwiXG4gICAgY29uc3QgaXNIb3Jpem9udGFsID0gZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgbGF5b3V0ID09PSAnaG9yaXpvbnRhbCc7XG4gICAgY29uc3Qgc2l6ZSA9ICgoKGlzSG9yaXpvbnRhbCA/IHdpZHRoIDogaGVpZ2h0KTogYW55KTogbnVtYmVyKTtcbiAgICBjb25zdCBsYXN0SXRlbU9mZnNldCA9IE1hdGgubWF4KFxuICAgICAgMCxcbiAgICAgIGl0ZW1Db3VudCAqICgoaXRlbVNpemU6IGFueSk6IG51bWJlcikgLSBzaXplXG4gICAgKTtcbiAgICBjb25zdCBtYXhPZmZzZXQgPSBNYXRoLm1pbihcbiAgICAgIGxhc3RJdGVtT2Zmc2V0LFxuICAgICAgaW5kZXggKiAoKGl0ZW1TaXplOiBhbnkpOiBudW1iZXIpXG4gICAgKTtcbiAgICBjb25zdCBtaW5PZmZzZXQgPSBNYXRoLm1heChcbiAgICAgIDAsXG4gICAgICBpbmRleCAqICgoaXRlbVNpemU6IGFueSk6IG51bWJlcikgLVxuICAgICAgICBzaXplICtcbiAgICAgICAgKChpdGVtU2l6ZTogYW55KTogbnVtYmVyKSArXG4gICAgICAgIHNjcm9sbGJhclNpemVcbiAgICApO1xuXG4gICAgaWYgKGFsaWduID09PSAnc21hcnQnKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHNjcm9sbE9mZnNldCA+PSBtaW5PZmZzZXQgLSBzaXplICYmXG4gICAgICAgIHNjcm9sbE9mZnNldCA8PSBtYXhPZmZzZXQgKyBzaXplXG4gICAgICApIHtcbiAgICAgICAgYWxpZ24gPSAnYXV0byc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhbGlnbiA9ICdjZW50ZXInO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN3aXRjaCAoYWxpZ24pIHtcbiAgICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcbiAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICBjYXNlICdjZW50ZXInOiB7XG4gICAgICAgIC8vIFwiQ2VudGVyZWRcIiBvZmZzZXQgaXMgdXN1YWxseSB0aGUgYXZlcmFnZSBvZiB0aGUgbWluIGFuZCBtYXguXG4gICAgICAgIC8vIEJ1dCBuZWFyIHRoZSBlZGdlcyBvZiB0aGUgbGlzdCwgdGhpcyBkb2Vzbid0IGhvbGQgdHJ1ZS5cbiAgICAgICAgY29uc3QgbWlkZGxlT2Zmc2V0ID0gTWF0aC5yb3VuZChcbiAgICAgICAgICBtaW5PZmZzZXQgKyAobWF4T2Zmc2V0IC0gbWluT2Zmc2V0KSAvIDJcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKG1pZGRsZU9mZnNldCA8IE1hdGguY2VpbChzaXplIC8gMikpIHtcbiAgICAgICAgICByZXR1cm4gMDsgLy8gbmVhciB0aGUgYmVnaW5uaW5nXG4gICAgICAgIH0gZWxzZSBpZiAobWlkZGxlT2Zmc2V0ID4gbGFzdEl0ZW1PZmZzZXQgKyBNYXRoLmZsb29yKHNpemUgLyAyKSkge1xuICAgICAgICAgIHJldHVybiBsYXN0SXRlbU9mZnNldDsgLy8gbmVhciB0aGUgZW5kXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG1pZGRsZU9mZnNldDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY2FzZSAnYXV0byc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAoc2Nyb2xsT2Zmc2V0ID49IG1pbk9mZnNldCAmJiBzY3JvbGxPZmZzZXQgPD0gbWF4T2Zmc2V0KSB7XG4gICAgICAgICAgcmV0dXJuIHNjcm9sbE9mZnNldDtcbiAgICAgICAgfSBlbHNlIGlmIChzY3JvbGxPZmZzZXQgPCBtaW5PZmZzZXQpIHtcbiAgICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBtYXhPZmZzZXQ7XG4gICAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgZ2V0U3RhcnRJbmRleEZvck9mZnNldDogKFxuICAgIHsgaXRlbUNvdW50LCBpdGVtU2l6ZSB9OiBQcm9wczxhbnk+LFxuICAgIG9mZnNldDogbnVtYmVyXG4gICk6IG51bWJlciA9PlxuICAgIE1hdGgubWF4KFxuICAgICAgMCxcbiAgICAgIE1hdGgubWluKGl0ZW1Db3VudCAtIDEsIE1hdGguZmxvb3Iob2Zmc2V0IC8gKChpdGVtU2l6ZTogYW55KTogbnVtYmVyKSkpXG4gICAgKSxcblxuICBnZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4OiAoXG4gICAgeyBkaXJlY3Rpb24sIGhlaWdodCwgaXRlbUNvdW50LCBpdGVtU2l6ZSwgbGF5b3V0LCB3aWR0aCB9OiBQcm9wczxhbnk+LFxuICAgIHN0YXJ0SW5kZXg6IG51bWJlcixcbiAgICBzY3JvbGxPZmZzZXQ6IG51bWJlclxuICApOiBudW1iZXIgPT4ge1xuICAgIC8vIFRPRE8gRGVwcmVjYXRlIGRpcmVjdGlvbiBcImhvcml6b250YWxcIlxuICAgIGNvbnN0IGlzSG9yaXpvbnRhbCA9IGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnIHx8IGxheW91dCA9PT0gJ2hvcml6b250YWwnO1xuICAgIGNvbnN0IG9mZnNldCA9IHN0YXJ0SW5kZXggKiAoKGl0ZW1TaXplOiBhbnkpOiBudW1iZXIpO1xuICAgIGNvbnN0IHNpemUgPSAoKChpc0hvcml6b250YWwgPyB3aWR0aCA6IGhlaWdodCk6IGFueSk6IG51bWJlcik7XG4gICAgY29uc3QgbnVtVmlzaWJsZUl0ZW1zID0gTWF0aC5jZWlsKFxuICAgICAgKHNpemUgKyBzY3JvbGxPZmZzZXQgLSBvZmZzZXQpIC8gKChpdGVtU2l6ZTogYW55KTogbnVtYmVyKVxuICAgICk7XG4gICAgcmV0dXJuIE1hdGgubWF4KFxuICAgICAgMCxcbiAgICAgIE1hdGgubWluKFxuICAgICAgICBpdGVtQ291bnQgLSAxLFxuICAgICAgICBzdGFydEluZGV4ICsgbnVtVmlzaWJsZUl0ZW1zIC0gMSAvLyAtMSBpcyBiZWNhdXNlIHN0b3AgaW5kZXggaXMgaW5jbHVzaXZlXG4gICAgICApXG4gICAgKTtcbiAgfSxcblxuICBpbml0SW5zdGFuY2VQcm9wcyhwcm9wczogUHJvcHM8YW55Pik6IGFueSB7XG4gICAgLy8gTm9vcFxuICB9LFxuXG4gIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2U6IHRydWUsXG5cbiAgdmFsaWRhdGVQcm9wczogKHsgaXRlbVNpemUgfTogUHJvcHM8YW55Pik6IHZvaWQgPT4ge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAodHlwZW9mIGl0ZW1TaXplICE9PSAnbnVtYmVyJykge1xuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAnQW4gaW52YWxpZCBcIml0ZW1TaXplXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgK1xuICAgICAgICAgICAgJ1ZhbHVlIHNob3VsZCBiZSBhIG51bWJlci4gJyArXG4gICAgICAgICAgICBgXCIke2l0ZW1TaXplID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGl0ZW1TaXplfVwiIHdhcyBzcGVjaWZpZWQuYFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBGaXhlZFNpemVMaXN0O1xuIiwgIi8vIEBmbG93XG5cbi8vIFB1bGxlZCBmcm9tIHJlYWN0LWNvbXBhdFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2RldmVsb3BpdC9wcmVhY3QtY29tcGF0L2Jsb2IvN2M1ZGUwMGU3Yzg1ZTJmZmQwMTFiZjNhZjAyODk5YjYzZjY5OWQzYS9zcmMvaW5kZXguanMjTDM0OVxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2hhbGxvd0RpZmZlcnMocHJldjogT2JqZWN0LCBuZXh0OiBPYmplY3QpOiBib29sZWFuIHtcbiAgZm9yIChsZXQgYXR0cmlidXRlIGluIHByZXYpIHtcbiAgICBpZiAoIShhdHRyaWJ1dGUgaW4gbmV4dCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICBmb3IgKGxldCBhdHRyaWJ1dGUgaW4gbmV4dCkge1xuICAgIGlmIChwcmV2W2F0dHJpYnV0ZV0gIT09IG5leHRbYXR0cmlidXRlXSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cbiIsICIvLyBAZmxvd1xuXG5pbXBvcnQgc2hhbGxvd0RpZmZlcnMgZnJvbSAnLi9zaGFsbG93RGlmZmVycyc7XG5cbi8vIEN1c3RvbSBjb21wYXJpc29uIGZ1bmN0aW9uIGZvciBSZWFjdC5tZW1vKCkuXG4vLyBJdCBrbm93cyB0byBjb21wYXJlIGluZGl2aWR1YWwgc3R5bGUgcHJvcHMgYW5kIGlnbm9yZSB0aGUgd3JhcHBlciBvYmplY3QuXG4vLyBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI3JlYWN0bWVtb1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYXJlRXF1YWwoXG4gIHByZXZQcm9wczogT2JqZWN0LFxuICBuZXh0UHJvcHM6IE9iamVjdFxuKTogYm9vbGVhbiB7XG4gIGNvbnN0IHsgc3R5bGU6IHByZXZTdHlsZSwgLi4ucHJldlJlc3QgfSA9IHByZXZQcm9wcztcbiAgY29uc3QgeyBzdHlsZTogbmV4dFN0eWxlLCAuLi5uZXh0UmVzdCB9ID0gbmV4dFByb3BzO1xuXG4gIHJldHVybiAoXG4gICAgIXNoYWxsb3dEaWZmZXJzKHByZXZTdHlsZSwgbmV4dFN0eWxlKSAmJiAhc2hhbGxvd0RpZmZlcnMocHJldlJlc3QsIG5leHRSZXN0KVxuICApO1xufVxuIiwgIi8vIEBmbG93XG5cbmltcG9ydCBhcmVFcXVhbCBmcm9tICcuL2FyZUVxdWFsJztcbmltcG9ydCBzaGFsbG93RGlmZmVycyBmcm9tICcuL3NoYWxsb3dEaWZmZXJzJztcblxuLy8gQ3VzdG9tIHNob3VsZENvbXBvbmVudFVwZGF0ZSBmb3IgY2xhc3MgY29tcG9uZW50cy5cbi8vIEl0IGtub3dzIHRvIGNvbXBhcmUgaW5kaXZpZHVhbCBzdHlsZSBwcm9wcyBhbmQgaWdub3JlIHRoZSB3cmFwcGVyIG9iamVjdC5cbi8vIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtY29tcG9uZW50Lmh0bWwjc2hvdWxkY29tcG9uZW50dXBkYXRlXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzaG91bGRDb21wb25lbnRVcGRhdGUoXG4gIG5leHRQcm9wczogT2JqZWN0LFxuICBuZXh0U3RhdGU6IE9iamVjdFxuKTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgIWFyZUVxdWFsKHRoaXMucHJvcHMsIG5leHRQcm9wcykgfHwgc2hhbGxvd0RpZmZlcnModGhpcy5zdGF0ZSwgbmV4dFN0YXRlKVxuICApO1xufVxuIiwgInZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJzaXplXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBldWlTcGFjZXJTdHlsZXMgfSBmcm9tICcuL3NwYWNlci5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgU0laRVMgPSBbJ3hzJywgJ3MnLCAnbScsICdsJywgJ3hsJywgJ3h4bCddO1xuZXhwb3J0IHZhciBFdWlTcGFjZXIgPSBmdW5jdGlvbiBFdWlTcGFjZXIoX3JlZikge1xuICB2YXIgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAnbCcgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgdmFyIHN0eWxlcyA9IGV1aVNwYWNlclN0eWxlcyhldWlUaGVtZSk7XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpU3BhY2VyJywgX2RlZmluZVByb3BlcnR5KHt9LCBcImV1aVNwYWNlci0tXCIuY29uY2F0KHNpemUpLCBzaXplKSwgY2xhc3NOYW1lKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpU3BhY2VyLCBzdHlsZXNbc2l6ZV1dO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIGNzczogY3NzU3R5bGVzXG4gIH0sIHJlc3QpKTtcbn07XG5FdWlTcGFjZXIucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5hbnlcbn07IiwgImZ1bmN0aW9uIF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fKCkgeyByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGxvZ2ljYWxzIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuXG52YXIgX3JlZiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxOTF4aTFuLWV1aVNwYWNlclwiLFxuICBzdHlsZXM6IFwiZmxleC1zaHJpbms6MDtsYWJlbDpldWlTcGFjZXI7XCJcbn0gOiB7XG4gIG5hbWU6IFwiMTkxeGkxbi1ldWlTcGFjZXJcIixcbiAgc3R5bGVzOiBcImZsZXgtc2hyaW5rOjA7bGFiZWw6ZXVpU3BhY2VyO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5cbmV4cG9ydCB2YXIgZXVpU3BhY2VyU3R5bGVzID0gZnVuY3Rpb24gZXVpU3BhY2VyU3R5bGVzKF9yZWYyKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYyLmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIGV1aVNwYWNlcjogX3JlZixcbiAgICAvLyBTaXplc1xuICAgIHhzOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxzLmhlaWdodCwgXCI6XCIsIGV1aVRoZW1lLnNpemUueHMsIFwiOztsYWJlbDp4cztcIiksXG4gICAgczogLyojX19QVVJFX18qL2Nzcyhsb2dpY2Fscy5oZWlnaHQsIFwiOlwiLCBldWlUaGVtZS5zaXplLnMsIFwiOztsYWJlbDpzO1wiKSxcbiAgICBtOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxzLmhlaWdodCwgXCI6XCIsIGV1aVRoZW1lLnNpemUuYmFzZSwgXCI7O2xhYmVsOm07XCIpLFxuICAgIGw6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbHMuaGVpZ2h0LCBcIjpcIiwgZXVpVGhlbWUuc2l6ZS5sLCBcIjs7bGFiZWw6bDtcIiksXG4gICAgeGw6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbHMuaGVpZ2h0LCBcIjpcIiwgZXVpVGhlbWUuc2l6ZS54bCwgXCI7O2xhYmVsOnhsO1wiKSxcbiAgICB4eGw6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbHMuaGVpZ2h0LCBcIjpcIiwgZXVpVGhlbWUuc2l6ZS54eGwsIFwiOztsYWJlbDp4eGw7XCIpXG4gIH07XG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbnZhciBfZXhjbHVkZWQgPSBbXCJkYXRhLXRlc3Qtc3VialwiLCBcImFzeW5jXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29tcHJlc3NlZFwiLCBcImN1c3RvbU9wdGlvblRleHRcIiwgXCJmdWxsV2lkdGhcIiwgXCJpZFwiLCBcImlucHV0UmVmXCIsIFwiaXNDbGVhcmFibGVcIiwgXCJpc0Rpc2FibGVkXCIsIFwiaXNJbnZhbGlkXCIsIFwiaXNMb2FkaW5nXCIsIFwibm9TdWdnZXN0aW9uc1wiLCBcIm9uQmx1clwiLCBcIm9uQ2hhbmdlXCIsIFwib25DcmVhdGVPcHRpb25cIiwgXCJvblNlYXJjaENoYW5nZVwiLCBcIm9wdGlvbnNcIiwgXCJwbGFjZWhvbGRlclwiLCBcInJlbmRlck9wdGlvblwiLCBcInJvd0hlaWdodFwiLCBcInNlbGVjdGVkT3B0aW9uc1wiLCBcInNpbmdsZVNlbGVjdGlvblwiLCBcInByZXBlbmRcIiwgXCJzb3J0TWF0Y2hlc0J5XCIsIFwiZGVsaW1pdGVyXCIsIFwiYXBwZW5kXCIsIFwiYXV0b0ZvY3VzXCIsIFwiYXJpYS1sYWJlbFwiLCBcImFyaWEtbGFiZWxsZWRieVwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLyoqXG4gKiBFbGVtZW50cyB3aXRoaW4gRXVpQ29tYm9Cb3ggd2hpY2ggd291bGQgbm9ybWFsbHkgYmUgdGFiYmFibGUgKGlucHV0cywgYnV0dG9ucykgaGF2ZSBiZWVuIHJlbW92ZWRcbiAqIGZyb20gdGhlIHRhYiBvcmRlciB3aXRoIHRhYmluZGV4PXstMX0gc28gdGhhdCB3ZSBjYW4gY29udHJvbCB0aGUga2V5Ym9hcmQgbmF2aWdhdGlvbiBpbnRlcmZhY2UuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGZpbmRQb3BvdmVyUG9zaXRpb24sIGh0bWxJZEdlbmVyYXRvciwga2V5cyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aVBvcnRhbCB9IGZyb20gJy4uL3BvcnRhbCc7XG5pbXBvcnQgeyBFdWlJMThuIH0gZnJvbSAnLi4vaTE4bic7XG5pbXBvcnQgeyBFdWlDb21ib0JveE9wdGlvbnNMaXN0IH0gZnJvbSAnLi9jb21ib19ib3hfb3B0aW9uc19saXN0JztcbmltcG9ydCB7IGdldE1hdGNoaW5nT3B0aW9ucywgZmxhdHRlbk9wdGlvbkdyb3VwcywgZ2V0U2VsZWN0ZWRPcHRpb25Gb3JTZWFyY2hWYWx1ZSB9IGZyb20gJy4vbWF0Y2hpbmdfb3B0aW9ucyc7XG5pbXBvcnQgeyBFdWlDb21ib0JveElucHV0IH0gZnJvbSAnLi9jb21ib19ib3hfaW5wdXQvY29tYm9fYm94X2lucHV0JztcbmltcG9ydCB7IGdldEVsZW1lbnRaSW5kZXggfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wb3BvdmVyJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgaW5pdGlhbFNlYXJjaFZhbHVlID0gJyc7XG5leHBvcnQgdmFyIEV1aUNvbWJvQm94ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhFdWlDb21ib0JveCwgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihFdWlDb21ib0JveCk7XG5cbiAgZnVuY3Rpb24gRXVpQ29tYm9Cb3goKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aUNvbWJvQm94KTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsLmFwcGx5KF9zdXBlciwgW3RoaXNdLmNvbmNhdChhcmdzKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic3RhdGVcIiwge1xuICAgICAgYWN0aXZlT3B0aW9uSW5kZXg6IC0xLFxuICAgICAgaGFzRm9jdXM6IGZhbHNlLFxuICAgICAgaXNMaXN0T3BlbjogZmFsc2UsXG4gICAgICBsaXN0RWxlbWVudDogbnVsbCxcbiAgICAgIGxpc3RQb3NpdGlvbjogJ2JvdHRvbScsXG4gICAgICBsaXN0WkluZGV4OiB1bmRlZmluZWQsXG4gICAgICBtYXRjaGluZ09wdGlvbnM6IGdldE1hdGNoaW5nT3B0aW9ucyhfdGhpcy5wcm9wcy5vcHRpb25zLCBfdGhpcy5wcm9wcy5zZWxlY3RlZE9wdGlvbnMsIGluaXRpYWxTZWFyY2hWYWx1ZSwgX3RoaXMucHJvcHMuYXN5bmMsIEJvb2xlYW4oX3RoaXMucHJvcHMuc2luZ2xlU2VsZWN0aW9uKSwgX3RoaXMucHJvcHMuc29ydE1hdGNoZXNCeSksXG4gICAgICBzZWFyY2hWYWx1ZTogaW5pdGlhbFNlYXJjaFZhbHVlLFxuICAgICAgd2lkdGg6IDBcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJfaXNNb3VudGVkXCIsIGZhbHNlKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJyb290SWRcIiwgaHRtbElkR2VuZXJhdG9yKCkpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImNvbWJvQm94UmVmSW5zdGFuY2VcIiwgbnVsbCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiY29tYm9Cb3hSZWZDYWxsYmFja1wiLCBmdW5jdGlvbiAocmVmKSB7XG4gICAgICAvLyBJRTExIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgYHJlbGF0ZWRUYXJnZXRgIGV2ZW50IHByb3BlcnR5IGZvciBibHVyIGV2ZW50c1xuICAgICAgLy8gYnV0IGRvZXMgYWRkIGl0IGZvciBmb2N1c291dC4gUmVhY3QgZG9lc24ndCBzdXBwb3J0IGBvbkZvY3VzT3V0YCBzbyBoZXJlIHdlIGFyZS5cbiAgICAgIGlmIChfdGhpcy5jb21ib0JveFJlZkluc3RhbmNlKSB7XG4gICAgICAgIF90aGlzLmNvbWJvQm94UmVmSW5zdGFuY2UucmVtb3ZlRXZlbnRMaXN0ZW5lcignZm9jdXNvdXQnLCBfdGhpcy5vbkNvbnRhaW5lckJsdXIpO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5jb21ib0JveFJlZkluc3RhbmNlID0gcmVmO1xuXG4gICAgICBpZiAoX3RoaXMuY29tYm9Cb3hSZWZJbnN0YW5jZSkge1xuICAgICAgICBfdGhpcy5jb21ib0JveFJlZkluc3RhbmNlLmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3Vzb3V0JywgX3RoaXMub25Db250YWluZXJCbHVyKTtcblxuICAgICAgICB2YXIgY29tYm9Cb3hCb3VuZHMgPSBfdGhpcy5jb21ib0JveFJlZkluc3RhbmNlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICB3aWR0aDogY29tYm9Cb3hCb3VuZHMud2lkdGhcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiYXV0b1NpemVJbnB1dFJlZkluc3RhbmNlXCIsIG51bGwpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImF1dG9TaXplSW5wdXRSZWZDYWxsYmFja1wiLCBmdW5jdGlvbiAocmVmKSB7XG4gICAgICBfdGhpcy5hdXRvU2l6ZUlucHV0UmVmSW5zdGFuY2UgPSByZWY7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic2VhcmNoSW5wdXRSZWZJbnN0YW5jZVwiLCBudWxsKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzZWFyY2hJbnB1dFJlZkNhbGxiYWNrXCIsIGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgIF90aGlzLnNlYXJjaElucHV0UmVmSW5zdGFuY2UgPSByZWY7XG4gICAgICBpZiAoX3RoaXMucHJvcHMuaW5wdXRSZWYpIF90aGlzLnByb3BzLmlucHV0UmVmKHJlZik7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwibGlzdFJlZkluc3RhbmNlXCIsIG51bGwpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImxpc3RSZWZDYWxsYmFja1wiLCBmdW5jdGlvbiAocmVmKSB7XG4gICAgICBpZiAoX3RoaXMuY29tYm9Cb3hSZWZJbnN0YW5jZSkge1xuICAgICAgICAvLyBmaW5kIHRoZSB6SW5kZXggb2YgdGhlIGNvbWJvYm94IHJlbGF0aXZlIHRvIHRoZSBwYWdlIGJvZHlcbiAgICAgICAgLy8gYW5kIHVzZSB0aGF0IHRvIGRlcHRoLXBvc2l0aW9uIHRoZSBsaXN0IGJveFxuICAgICAgICAvLyBhZGRzIGFuIGV4dHJhIGAxMDBgIHRvIHByb3ZpZGUgc29tZSBkZWZlbnNlIGFyb3VuZCBuZWlnaGJvcmluZyBlbGVtZW50cycgcG9zaXRpb25pbmdcbiAgICAgICAgdmFyIGxpc3RaSW5kZXggPSBnZXRFbGVtZW50WkluZGV4KF90aGlzLmNvbWJvQm94UmVmSW5zdGFuY2UsIGRvY3VtZW50LmJvZHkpICsgMTAwO1xuXG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBsaXN0WkluZGV4OiBsaXN0WkluZGV4XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5saXN0UmVmSW5zdGFuY2UgPSByZWY7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwidG9nZ2xlQnV0dG9uUmVmSW5zdGFuY2VcIiwgbnVsbCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwidG9nZ2xlQnV0dG9uUmVmQ2FsbGJhY2tcIiwgZnVuY3Rpb24gKHJlZikge1xuICAgICAgX3RoaXMudG9nZ2xlQnV0dG9uUmVmSW5zdGFuY2UgPSByZWY7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib3B0aW9uc1JlZkluc3RhbmNlc1wiLCBbXSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib3B0aW9uUmVmQ2FsbGJhY2tcIiwgZnVuY3Rpb24gKGluZGV4LCByZWYpIHtcbiAgICAgIF90aGlzLm9wdGlvbnNSZWZJbnN0YW5jZXNbaW5kZXhdID0gcmVmO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9wZW5MaXN0XCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgaXNMaXN0T3BlbjogdHJ1ZVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiY2xvc2VMaXN0XCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKGV2ZW50ICYmIGV2ZW50LnRhcmdldCA9PT0gX3RoaXMuc2VhcmNoSW5wdXRSZWZJbnN0YW5jZSkge1xuICAgICAgICAvLyByZWFsbHkgbG9uZyBzZWFyY2ggdmFsdWVzIC8gY3VzdG9tIGVudHJpZXMgdHJpZ2dlcnMgYSBzY3JvbGwgZXZlbnQgb24gdGhlIGlucHV0XG4gICAgICAgIC8vIHdoaWNoIHRoZSBFdWlDb21ib0JveE9wdGlvbnNMaXN0IHBhc3NlcyB0aHJvdWdoIGhlcmVcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5jbGVhckFjdGl2ZU9wdGlvbigpO1xuXG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGxpc3RaSW5kZXg6IHVuZGVmaW5lZCxcbiAgICAgICAgaXNMaXN0T3BlbjogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInVwZGF0ZVBvc2l0aW9uXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBsaXN0RWxlbWVudCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogX3RoaXMuc3RhdGUubGlzdEVsZW1lbnQ7XG5cbiAgICAgIGlmICghX3RoaXMuX2lzTW91bnRlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghX3RoaXMuc3RhdGUuaXNMaXN0T3Blbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghbGlzdEVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSAvLyBpdCdzIHBvc3NpYmxlIHRoYXQgdXBkYXRlTGlzdFBvc2l0aW9uIGlzIGNhbGxlZCB3aGVuIGxpc3RFbGVtZW50IGlzIGJlY29taW5nIHZpc2libGUsIGJ1dCBpc24ndCB5ZXRcblxuXG4gICAgICB2YXIgbGlzdEVsZW1lbnRCb3VuZHMgPSBsaXN0RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgaWYgKGxpc3RFbGVtZW50Qm91bmRzLndpZHRoID09PSAwIHx8IGxpc3RFbGVtZW50Qm91bmRzLmhlaWdodCA9PT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghX3RoaXMuY29tYm9Cb3hSZWZJbnN0YW5jZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBjb21ib0JveEJvdW5kcyA9IF90aGlzLmNvbWJvQm94UmVmSW5zdGFuY2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgIHZhciBfcmVmID0gZmluZFBvcG92ZXJQb3NpdGlvbih7XG4gICAgICAgIGFsbG93Q3Jvc3NBeGlzOiBmYWxzZSxcbiAgICAgICAgYW5jaG9yOiBfdGhpcy5jb21ib0JveFJlZkluc3RhbmNlLFxuICAgICAgICBwb3BvdmVyOiBsaXN0RWxlbWVudCxcbiAgICAgICAgcG9zaXRpb246ICdib3R0b20nXG4gICAgICB9KSxcbiAgICAgICAgICBwb3NpdGlvbiA9IF9yZWYucG9zaXRpb24sXG4gICAgICAgICAgdG9wID0gX3JlZi50b3A7XG5cbiAgICAgIGlmIChfdGhpcy5saXN0UmVmSW5zdGFuY2UpIHtcbiAgICAgICAgX3RoaXMubGlzdFJlZkluc3RhbmNlLnN0eWxlLnRvcCA9IFwiXCIuY29uY2F0KHRvcCwgXCJweFwiKTsgLy8gbGlzdEVsZW1lbnQgZG9lc24ndCBoYXZlIGl0cyB3aWR0aCBzZXQgdW50aWwgYWZ0ZXIgdXBkYXRpbmcgdGhlIHBvc2l0aW9uXG4gICAgICAgIC8vIHdoaWNoIG1lYW5zIHRoZSBwb3BvdmVyIHNlcnZpY2Ugd29uJ3Qga25vdyBhYm91dCB0aGUgY29ycmVjdCB3aWR0aFxuICAgICAgICAvLyBob3dldmVyLCB3ZSBhbHJlYWR5IGtub3cgd2hlcmUgdG8gcG9zaXRpb24gdGhlIGVsZW1lbnRcblxuICAgICAgICBfdGhpcy5saXN0UmVmSW5zdGFuY2Uuc3R5bGUubGVmdCA9IFwiXCIuY29uY2F0KGNvbWJvQm94Qm91bmRzLmxlZnQgKyB3aW5kb3cucGFnZVhPZmZzZXQsIFwicHhcIik7XG4gICAgICAgIF90aGlzLmxpc3RSZWZJbnN0YW5jZS5zdHlsZS53aWR0aCA9IFwiXCIuY29uY2F0KGNvbWJvQm94Qm91bmRzLndpZHRoLCBcInB4XCIpO1xuICAgICAgfSAvLyBDYWNoZSBmb3IgZnV0dXJlIGNhbGxzLlxuXG5cbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgbGlzdEVsZW1lbnQ6IGxpc3RFbGVtZW50LFxuICAgICAgICBsaXN0UG9zaXRpb246IHBvc2l0aW9uLFxuICAgICAgICB3aWR0aDogY29tYm9Cb3hCb3VuZHMud2lkdGhcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImluY3JlbWVudEFjdGl2ZU9wdGlvbkluZGV4XCIsIGZ1bmN0aW9uIChhbW91bnQpIHtcbiAgICAgIC8vIElmIHRoZXJlIGFyZSBubyBvcHRpb25zIGF2YWlsYWJsZSwgZG8gbm90aGluZy5cbiAgICAgIGlmICghX3RoaXMuc3RhdGUubWF0Y2hpbmdPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIF90aGlzLnNldFN0YXRlKGZ1bmN0aW9uIChfcmVmMikge1xuICAgICAgICB2YXIgYWN0aXZlT3B0aW9uSW5kZXggPSBfcmVmMi5hY3RpdmVPcHRpb25JbmRleCxcbiAgICAgICAgICAgIG1hdGNoaW5nT3B0aW9ucyA9IF9yZWYyLm1hdGNoaW5nT3B0aW9ucztcbiAgICAgICAgdmFyIG5leHRBY3RpdmVPcHRpb25JbmRleDtcblxuICAgICAgICBpZiAoYWN0aXZlT3B0aW9uSW5kZXggPCAwKSB7XG4gICAgICAgICAgLy8gSWYgdGhpcyBpcyB0aGUgYmVnaW5uaW5nIG9mIHRoZSB1c2VyJ3Mga2V5Ym9hcmQgbmF2aWdhdGlvbiBvZiB0aGUgbWVudSwgdGhlbiB3ZSdsbCBmb2N1c1xuICAgICAgICAgIC8vIGVpdGhlciB0aGUgZmlyc3Qgb3IgbGFzdCBpdGVtLlxuICAgICAgICAgIG5leHRBY3RpdmVPcHRpb25JbmRleCA9IGFtb3VudCA8IDAgPyBtYXRjaGluZ09wdGlvbnMubGVuZ3RoIC0gMSA6IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV4dEFjdGl2ZU9wdGlvbkluZGV4ID0gYWN0aXZlT3B0aW9uSW5kZXggKyBhbW91bnQ7XG5cbiAgICAgICAgICBpZiAobmV4dEFjdGl2ZU9wdGlvbkluZGV4IDwgMCkge1xuICAgICAgICAgICAgbmV4dEFjdGl2ZU9wdGlvbkluZGV4ID0gbWF0Y2hpbmdPcHRpb25zLmxlbmd0aCAtIDE7XG4gICAgICAgICAgfSBlbHNlIGlmIChuZXh0QWN0aXZlT3B0aW9uSW5kZXggPT09IG1hdGNoaW5nT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIG5leHRBY3RpdmVPcHRpb25JbmRleCA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIEdyb3VwIHRpdGxlcyBhcmUgaW5jbHVkZWQgaW4gb3B0aW9uIGxpc3QgYnV0IGFyZSBub3Qgc2VsZWN0YWJsZVxuICAgICAgICAvLyBTa2lwIGdyb3VwIHRpdGxlIG9wdGlvbnNcblxuXG4gICAgICAgIHZhciBkaXJlY3Rpb24gPSBhbW91bnQgPiAwID8gMSA6IC0xO1xuXG4gICAgICAgIHdoaWxlIChtYXRjaGluZ09wdGlvbnNbbmV4dEFjdGl2ZU9wdGlvbkluZGV4XS5pc0dyb3VwTGFiZWxPcHRpb24pIHtcbiAgICAgICAgICBuZXh0QWN0aXZlT3B0aW9uSW5kZXggPSBuZXh0QWN0aXZlT3B0aW9uSW5kZXggKyBkaXJlY3Rpb247XG5cbiAgICAgICAgICBpZiAobmV4dEFjdGl2ZU9wdGlvbkluZGV4IDwgMCkge1xuICAgICAgICAgICAgbmV4dEFjdGl2ZU9wdGlvbkluZGV4ID0gbWF0Y2hpbmdPcHRpb25zLmxlbmd0aCAtIDE7XG4gICAgICAgICAgfSBlbHNlIGlmIChuZXh0QWN0aXZlT3B0aW9uSW5kZXggPT09IG1hdGNoaW5nT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIG5leHRBY3RpdmVPcHRpb25JbmRleCA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBhY3RpdmVPcHRpb25JbmRleDogbmV4dEFjdGl2ZU9wdGlvbkluZGV4XG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJoYXNBY3RpdmVPcHRpb25cIiwgZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzLnN0YXRlLmFjdGl2ZU9wdGlvbkluZGV4ID4gLTEgJiYgX3RoaXMuc3RhdGUuYWN0aXZlT3B0aW9uSW5kZXggPCBfdGhpcy5zdGF0ZS5tYXRjaGluZ09wdGlvbnMubGVuZ3RoO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImNsZWFyQWN0aXZlT3B0aW9uXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXg6IC0xXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJjbGVhclNlYXJjaFZhbHVlXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLm9uU2VhcmNoQ2hhbmdlKCcnKTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJyZW1vdmVMYXN0T3B0aW9uXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICghX3RoaXMucHJvcHMuc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9IC8vIEJhY2tzcGFjZSB3aWxsIGJlIHVzZWQgdG8gZGVsZXRlIHRoZSBpbnB1dCwgbm90IGEgcGlsbC5cblxuXG4gICAgICBpZiAoX3RoaXMuc3RhdGUuc2VhcmNoVmFsdWUubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gLy8gRGVsZXRlIGxhc3QgcGlsbC5cblxuXG4gICAgICBfdGhpcy5vblJlbW92ZU9wdGlvbihfdGhpcy5wcm9wcy5zZWxlY3RlZE9wdGlvbnNbX3RoaXMucHJvcHMuc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCAtIDFdKTtcblxuICAgICAgaWYgKEJvb2xlYW4oX3RoaXMucHJvcHMuc2luZ2xlU2VsZWN0aW9uKSAmJiAhX3RoaXMuc3RhdGUuaXNMaXN0T3Blbikge1xuICAgICAgICBfdGhpcy5vcGVuTGlzdCgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImFkZEN1c3RvbU9wdGlvblwiLCBmdW5jdGlvbiAoaXNDb250YWluZXJCbHVyLCBzZWFyY2hWYWx1ZSkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgb25DcmVhdGVPcHRpb24gPSBfdGhpcyRwcm9wcy5vbkNyZWF0ZU9wdGlvbixcbiAgICAgICAgICBvcHRpb25zID0gX3RoaXMkcHJvcHMub3B0aW9ucyxcbiAgICAgICAgICBzZWxlY3RlZE9wdGlvbnMgPSBfdGhpcyRwcm9wcy5zZWxlY3RlZE9wdGlvbnMsXG4gICAgICAgICAgc2luZ2xlU2VsZWN0aW9uID0gX3RoaXMkcHJvcHMuc2luZ2xlU2VsZWN0aW9uO1xuICAgICAgdmFyIG1hdGNoaW5nT3B0aW9ucyA9IF90aGlzLnN0YXRlLm1hdGNoaW5nT3B0aW9ucztcblxuICAgICAgaWYgKF90aGlzLmRvZXNTZWFyY2hNYXRjaE9ubHlPcHRpb24oKSkge1xuICAgICAgICBfdGhpcy5vbkFkZE9wdGlvbihtYXRjaGluZ09wdGlvbnNbMF0sIGlzQ29udGFpbmVyQmx1cik7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIW9uQ3JlYXRlT3B0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gLy8gRG9uJ3QgYm90aGVyIHRyeWluZyB0byBjcmVhdGUgYW4gb3B0aW9uIGlmIHRoZSB1c2VyIGhhc24ndCB0eXBlZCBhbnl0aGluZy5cblxuXG4gICAgICBpZiAoIXNlYXJjaFZhbHVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gLy8gRG9uJ3QgY3JlYXRlIHRoZSB2YWx1ZSBpZiBpdCdzIGFscmVhZHkgYmVlbiBzZWxlY3RlZC5cblxuXG4gICAgICBpZiAoZ2V0U2VsZWN0ZWRPcHRpb25Gb3JTZWFyY2hWYWx1ZShzZWFyY2hWYWx1ZSwgc2VsZWN0ZWRPcHRpb25zKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9IC8vIEFkZCBuZXcgY3VzdG9tIHBpbGwgaWYgdGhpcyBpcyBjdXN0b20gaW5wdXQsIGV2ZW4gaWYgaXQgcGFydGlhbGx5IG1hdGNoZXMgYW4gb3B0aW9uLlxuXG5cbiAgICAgIHZhciBpc09wdGlvbkNyZWF0ZWQgPSBvbkNyZWF0ZU9wdGlvbihzZWFyY2hWYWx1ZSwgZmxhdHRlbk9wdGlvbkdyb3VwcyhvcHRpb25zKSk7IC8vIEV4cGVjdCB0aGUgY29uc3VtZXIgdG8gYmUgZXhwbGljaXQgaW4gcmVqZWN0aW5nIGEgY3VzdG9tIG9wdGlvbi5cblxuICAgICAgaWYgKGlzT3B0aW9uQ3JlYXRlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5jbGVhclNlYXJjaFZhbHVlKCk7XG5cbiAgICAgIGlmIChCb29sZWFuKHNpbmdsZVNlbGVjdGlvbikpIHtcbiAgICAgICAgLy8gQWRkaW5nIGEgY3VzdG9tIG9wdGlvbiB0byBhIHNpbmdsZSBzZWxlY3QgdGhhdCBkb2VzIG5vdCBhcHBlYXIgaW4gdGhlIGxpc3Qgb2Ygb3B0aW9uc1xuICAgICAgICBfdGhpcy5jbG9zZUxpc3QoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJkb2VzU2VhcmNoTWF0Y2hPbmx5T3B0aW9uXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBzZWFyY2hWYWx1ZSA9IF90aGlzLnN0YXRlLnNlYXJjaFZhbHVlO1xuXG4gICAgICBpZiAoX3RoaXMuc3RhdGUubWF0Y2hpbmdPcHRpb25zLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfdGhpcy5zdGF0ZS5tYXRjaGluZ09wdGlvbnNbMF0ubGFiZWwudG9Mb3dlckNhc2UoKSA9PT0gc2VhcmNoVmFsdWUudG9Mb3dlckNhc2UoKTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJhcmVBbGxPcHRpb25zU2VsZWN0ZWRcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzMiA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIG9wdGlvbnMgPSBfdGhpcyRwcm9wczIub3B0aW9ucyxcbiAgICAgICAgICBzZWxlY3RlZE9wdGlvbnMgPSBfdGhpcyRwcm9wczIuc2VsZWN0ZWRPcHRpb25zLFxuICAgICAgICAgIGFzeW5jID0gX3RoaXMkcHJvcHMyLmFzeW5jOyAvLyBBc3N1bWUgaWYgdGhpcyBpcyBhc3luYyB0aGVuIHRoZXJlIGNvdWxkIGJlIGluZmluaXRlIG9wdGlvbnMuXG5cbiAgICAgIGlmIChhc3luYykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHZhciBmbGF0dGVuT3B0aW9ucyA9IGZsYXR0ZW5PcHRpb25Hcm91cHMob3B0aW9ucykubWFwKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgb3B0aW9uKSwge30sIHtcbiAgICAgICAgICBsYWJlbDogb3B0aW9uLmxhYmVsLnRyaW0oKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICB2YXIgbnVtYmVyT2ZTZWxlY3RlZE9wdGlvbnMgPSAwO1xuICAgICAgc2VsZWN0ZWRPcHRpb25zLmZvckVhY2goZnVuY3Rpb24gKF9yZWYzKSB7XG4gICAgICAgIHZhciBsYWJlbCA9IF9yZWYzLmxhYmVsO1xuICAgICAgICB2YXIgdHJpbW1lZExhYmVsID0gbGFiZWwudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmIChmbGF0dGVuT3B0aW9ucy5maW5kSW5kZXgoZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgICAgIHJldHVybiBvcHRpb24ubGFiZWwgPT09IHRyaW1tZWRMYWJlbDtcbiAgICAgICAgfSkgIT09IC0xKSBudW1iZXJPZlNlbGVjdGVkT3B0aW9ucyArPSAxO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gZmxhdHRlbk9wdGlvbnMubGVuZ3RoID09PSBudW1iZXJPZlNlbGVjdGVkT3B0aW9ucztcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkNvbWJvQm94Rm9jdXNcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAoX3RoaXMucHJvcHMub25Gb2N1cykge1xuICAgICAgICBfdGhpcy5wcm9wcy5vbkZvY3VzKGV2ZW50KTtcbiAgICAgIH1cblxuICAgICAgX3RoaXMub3Blbkxpc3QoKTtcblxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBoYXNGb2N1czogdHJ1ZVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic2V0Q3VzdG9tT3B0aW9uc1wiLCBmdW5jdGlvbiAoaXNDb250YWluZXJCbHVyKSB7XG4gICAgICB2YXIgc2VhcmNoVmFsdWUgPSBfdGhpcy5zdGF0ZS5zZWFyY2hWYWx1ZTtcbiAgICAgIHZhciBkZWxpbWl0ZXIgPSBfdGhpcy5wcm9wcy5kZWxpbWl0ZXI7XG5cbiAgICAgIGlmIChkZWxpbWl0ZXIpIHtcbiAgICAgICAgc2VhcmNoVmFsdWUuc3BsaXQoZGVsaW1pdGVyKS5mb3JFYWNoKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgICBpZiAob3B0aW9uLmxlbmd0aCA+IDApIF90aGlzLmFkZEN1c3RvbU9wdGlvbihpc0NvbnRhaW5lckJsdXIsIG9wdGlvbik7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgX3RoaXMuYWRkQ3VzdG9tT3B0aW9uKGlzQ29udGFpbmVyQmx1ciwgc2VhcmNoVmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uQ29udGFpbmVyQmx1clwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIC8vIGNsb3NlIHRoZSBvcHRpb25zIGxpc3QsIHVubGVzcyB0aGUgdXNlciBjbGlja2VkIG9uIGFuIG9wdGlvblxuXG4gICAgICAvKipcbiAgICAgICAqIEZpcmVGb3ggcmV0dXJucyBgcmVsYXRlZFRhcmdldGAgYXMgYG51bGxgIGZvciBzZWN1cml0eSByZWFzb25zLCBidXQgcHJvdmlkZXMgYSBwcm9wcmlldGFyeSBgZXhwbGljaXRPcmlnaW5hbFRhcmdldGAuXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FdmVudC9leHBsaWNpdE9yaWdpbmFsVGFyZ2V0XG4gICAgICAgKi9cbiAgICAgIHZhciBmb2N1c0V2ZW50ID0gZXZlbnQ7XG4gICAgICB2YXIgcmVsYXRlZFRhcmdldCA9IGZvY3VzRXZlbnQucmVsYXRlZFRhcmdldCB8fCBmb2N1c0V2ZW50LmV4cGxpY2l0T3JpZ2luYWxUYXJnZXQ7XG5cbiAgICAgIHZhciBmb2N1c2VkSW5PcHRpb25zTGlzdCA9IHJlbGF0ZWRUYXJnZXQgJiYgX3RoaXMubGlzdFJlZkluc3RhbmNlICYmIF90aGlzLmxpc3RSZWZJbnN0YW5jZS5jb250YWlucyhyZWxhdGVkVGFyZ2V0KTtcblxuICAgICAgdmFyIGZvY3VzZWRJbklucHV0ID0gcmVsYXRlZFRhcmdldCAmJiBfdGhpcy5jb21ib0JveFJlZkluc3RhbmNlICYmIF90aGlzLmNvbWJvQm94UmVmSW5zdGFuY2UuY29udGFpbnMocmVsYXRlZFRhcmdldCk7XG5cbiAgICAgIGlmICghZm9jdXNlZEluT3B0aW9uc0xpc3QgJiYgIWZvY3VzZWRJbklucHV0KSB7XG4gICAgICAgIF90aGlzLmNsb3NlTGlzdCgpO1xuXG4gICAgICAgIGlmIChfdGhpcy5wcm9wcy5vbkJsdXIpIHtcbiAgICAgICAgICBfdGhpcy5wcm9wcy5vbkJsdXIoZXZlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGhhc0ZvY3VzOiBmYWxzZVxuICAgICAgICB9KTsgLy8gSWYgdGhlIHVzZXIgdGFicyBhd2F5IG9yIGNoYW5nZXMgZm9jdXMgdG8gYW5vdGhlciBlbGVtZW50LCB0YWtlIHdoYXRldmVyIGlucHV0IHRoZXkndmVcbiAgICAgICAgLy8gdHlwZWQgYW5kIGNvbnZlcnQgaXQgaW50byBhIHBpbGwsIHRvIHByZXZlbnQgdGhlIGNvbWJvIGJveCBmcm9tIGxvb2tpbmcgbGlrZSBhIHRleHQgaW5wdXQuXG5cblxuICAgICAgICBpZiAoIV90aGlzLmhhc0FjdGl2ZU9wdGlvbigpKSB7XG4gICAgICAgICAgX3RoaXMuc2V0Q3VzdG9tT3B0aW9ucyh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChmb2N1c2VkSW5PcHRpb25zTGlzdCkge1xuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZWxhc3RpYy9ldWkvaXNzdWVzLzUxNzlcbiAgICAgICAgLy8gbmVlZCB0byByZXN0b3JlIGZvY3VzIHRvIHRoZSBpbnB1dCBib3ggd2hlbiBjbGlja2luZyBub24taW50ZXJhY3RpdmUgZWxlbWVudHNcbiAgICAgICAgLy8gZmlyZWZveCBkb2Vzbid0IHN1cHBvcnQgY2FsbGluZyAuZm9jdXMoKSBkdXJpbmcgYSBibHVyIGV2ZW50XG4gICAgICAgIC8vIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTUzNTc5XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdmFyIF90aGlzJHNlYXJjaElucHV0UmVmSTtcblxuICAgICAgICAgIChfdGhpcyRzZWFyY2hJbnB1dFJlZkkgPSBfdGhpcy5zZWFyY2hJbnB1dFJlZkluc3RhbmNlKSA9PT0gbnVsbCB8fCBfdGhpcyRzZWFyY2hJbnB1dFJlZkkgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJHNlYXJjaElucHV0UmVmSS5mb2N1cygpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbktleURvd25cIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAoX3RoaXMucHJvcHMuaXNEaXNhYmxlZCkgcmV0dXJuO1xuXG4gICAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgICBjYXNlIGtleXMuQVJST1dfVVA6XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICAgIGlmIChfdGhpcy5zdGF0ZS5pc0xpc3RPcGVuKSB7XG4gICAgICAgICAgICBfdGhpcy5pbmNyZW1lbnRBY3RpdmVPcHRpb25JbmRleCgtMSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIF90aGlzLm9wZW5MaXN0KCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBrZXlzLkFSUk9XX0RPV046XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICAgIGlmIChfdGhpcy5zdGF0ZS5pc0xpc3RPcGVuKSB7XG4gICAgICAgICAgICBfdGhpcy5pbmNyZW1lbnRBY3RpdmVPcHRpb25JbmRleCgxKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgX3RoaXMub3Blbkxpc3QoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIGtleXMuQkFDS1NQQUNFOlxuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgICAgX3RoaXMucmVtb3ZlTGFzdE9wdGlvbigpO1xuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBrZXlzLkVTQ0FQRTpcbiAgICAgICAgICBpZiAoX3RoaXMuc3RhdGUuaXNMaXN0T3Blbikge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgICAgICBfdGhpcy5jbG9zZUxpc3QoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIGtleXMuRU5URVI6XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICAgIGlmIChfdGhpcy5oYXNBY3RpdmVPcHRpb24oKSkge1xuICAgICAgICAgICAgX3RoaXMub25BZGRPcHRpb24oX3RoaXMuc3RhdGUubWF0Y2hpbmdPcHRpb25zW190aGlzLnN0YXRlLmFjdGl2ZU9wdGlvbkluZGV4XSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIF90aGlzLnNldEN1c3RvbU9wdGlvbnMoZmFsc2UpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2Uga2V5cy5UQUI6XG4gICAgICAgICAgLy8gRGlzYWxsb3cgdGFiYmluZyB3aGVuIHRoZSB1c2VyIGlzIG5hdmlnYXRpbmcgdGhlIG9wdGlvbnMuXG4gICAgICAgICAgaWYgKF90aGlzLmhhc0FjdGl2ZU9wdGlvbigpICYmIF90aGlzLnN0YXRlLmlzTGlzdE9wZW4pIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmIChfdGhpcy5wcm9wcy5vbktleURvd24pIHtcbiAgICAgICAgICAgIF90aGlzLnByb3BzLm9uS2V5RG93bihldmVudCk7XG4gICAgICAgICAgfVxuXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25PcHRpb25FbnRlcktleVwiLCBmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICBfdGhpcy5vbkFkZE9wdGlvbihvcHRpb24pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uT3B0aW9uQ2xpY2tcIiwgZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgX3RoaXMub25BZGRPcHRpb24ob3B0aW9uKTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkFkZE9wdGlvblwiLCBmdW5jdGlvbiAoYWRkZWRPcHRpb24sIGlzQ29udGFpbmVyQmx1cikge1xuICAgICAgaWYgKGFkZGVkT3B0aW9uLmRpc2FibGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIF90aGlzJHByb3BzMyA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIG9uQ2hhbmdlID0gX3RoaXMkcHJvcHMzLm9uQ2hhbmdlLFxuICAgICAgICAgIHNlbGVjdGVkT3B0aW9ucyA9IF90aGlzJHByb3BzMy5zZWxlY3RlZE9wdGlvbnMsXG4gICAgICAgICAgc2luZ2xlU2VsZWN0aW9uUHJvcCA9IF90aGlzJHByb3BzMy5zaW5nbGVTZWxlY3Rpb247XG4gICAgICB2YXIgc2luZ2xlU2VsZWN0aW9uID0gQm9vbGVhbihzaW5nbGVTZWxlY3Rpb25Qcm9wKTtcbiAgICAgIHZhciBjaGFuZ2VPcHRpb25zID0gc2luZ2xlU2VsZWN0aW9uID8gW2FkZGVkT3B0aW9uXSA6IHNlbGVjdGVkT3B0aW9ucy5jb25jYXQoYWRkZWRPcHRpb24pO1xuXG4gICAgICBpZiAob25DaGFuZ2UpIHtcbiAgICAgICAgb25DaGFuZ2UoY2hhbmdlT3B0aW9ucyk7XG4gICAgICB9XG5cbiAgICAgIF90aGlzLmNsZWFyU2VhcmNoVmFsdWUoKTtcblxuICAgICAgX3RoaXMuY2xlYXJBY3RpdmVPcHRpb24oKTtcblxuICAgICAgaWYgKCFpc0NvbnRhaW5lckJsdXIpIHtcbiAgICAgICAgaWYgKF90aGlzLnNlYXJjaElucHV0UmVmSW5zdGFuY2UpIHtcbiAgICAgICAgICBfdGhpcy5zZWFyY2hJbnB1dFJlZkluc3RhbmNlLmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHNpbmdsZVNlbGVjdGlvbikge1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBfdGhpcy5jbG9zZUxpc3QoKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXg6IF90aGlzLnN0YXRlLm1hdGNoaW5nT3B0aW9ucy5pbmRleE9mKGFkZGVkT3B0aW9uKVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvblJlbW92ZU9wdGlvblwiLCBmdW5jdGlvbiAocmVtb3ZlZE9wdGlvbikge1xuICAgICAgdmFyIF90aGlzJHByb3BzNCA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIG9uQ2hhbmdlID0gX3RoaXMkcHJvcHM0Lm9uQ2hhbmdlLFxuICAgICAgICAgIHNlbGVjdGVkT3B0aW9ucyA9IF90aGlzJHByb3BzNC5zZWxlY3RlZE9wdGlvbnM7XG5cbiAgICAgIGlmIChvbkNoYW5nZSkge1xuICAgICAgICBvbkNoYW5nZShzZWxlY3RlZE9wdGlvbnMuZmlsdGVyKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgICByZXR1cm4gb3B0aW9uICE9PSByZW1vdmVkT3B0aW9uO1xuICAgICAgICB9KSk7XG4gICAgICB9XG5cbiAgICAgIF90aGlzLmNsZWFyQWN0aXZlT3B0aW9uKCk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiY2xlYXJTZWxlY3RlZE9wdGlvbnNcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIG9uQ2hhbmdlID0gX3RoaXMucHJvcHMub25DaGFuZ2U7XG5cbiAgICAgIGlmIChvbkNoYW5nZSkge1xuICAgICAgICBvbkNoYW5nZShbXSk7XG4gICAgICB9IC8vIENsaWNraW5nIHRoZSBjbGVhciBidXR0b24gd2lsbCBhbHNvIGNhdXNlIGl0IHRvIGRpc2FwcGVhci4gVGhpcyB3b3VsZCByZXN1bHQgaW4gZm9jdXNcbiAgICAgIC8vIHNoaWZ0aW5nIHVuZXhwZWN0ZWRseSB0byB0aGUgYm9keSBlbGVtZW50IHNvIHdlIHNldCBpdCB0byB0aGUgaW5wdXQgd2hpY2ggaXMgbW9yZSByZWFzb25hYmxlLFxuXG5cbiAgICAgIGlmIChfdGhpcy5zZWFyY2hJbnB1dFJlZkluc3RhbmNlKSB7XG4gICAgICAgIF90aGlzLnNlYXJjaElucHV0UmVmSW5zdGFuY2UuZm9jdXMoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFfdGhpcy5zdGF0ZS5pc0xpc3RPcGVuKSB7XG4gICAgICAgIF90aGlzLm9wZW5MaXN0KCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25Db21ib0JveENsaWNrXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFdoZW4gdGhlIHVzZXIgY2xpY2tzIGFueXdoZXJlIG9uIHRoZSBib3gsIGVudGVyIHRoZSBpbnRlcmFjdGlvbiBzdGF0ZS5cbiAgICAgIGlmIChfdGhpcy5zZWFyY2hJbnB1dFJlZkluc3RhbmNlKSB7XG4gICAgICAgIF90aGlzLnNlYXJjaElucHV0UmVmSW5zdGFuY2UuZm9jdXMoKTtcbiAgICAgIH0gLy8gSWYgdGhlIHVzZXIgZG9lcyB0aGlzIGZyb20gYSBzdGF0ZSBpbiB3aGljaCBhbiBvcHRpb24gaGFzIGZvY3VzLCB0aGVuIHdlIG5lZWQgdG8gcmVzZXQgaXQgb3IgY2xlYXIgaXQuXG5cblxuICAgICAgaWYgKEJvb2xlYW4oX3RoaXMucHJvcHMuc2luZ2xlU2VsZWN0aW9uKSAmJiBfdGhpcy5wcm9wcy5zZWxlY3RlZE9wdGlvbnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHZhciBzZWxlY3RlZE9wdGlvbkluZGV4ID0gX3RoaXMuc3RhdGUubWF0Y2hpbmdPcHRpb25zLmZpbmRJbmRleChmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIG9wdGlvbi5sYWJlbCA9PT0gX3RoaXMucHJvcHMuc2VsZWN0ZWRPcHRpb25zWzBdLmxhYmVsICYmIG9wdGlvbi5rZXkgPT09IF90aGlzLnByb3BzLnNlbGVjdGVkT3B0aW9uc1swXS5rZXk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBhY3RpdmVPcHRpb25JbmRleDogc2VsZWN0ZWRPcHRpb25JbmRleFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIF90aGlzLmNsZWFyQWN0aXZlT3B0aW9uKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25PcGVuTGlzdENsaWNrXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChfdGhpcy5zZWFyY2hJbnB1dFJlZkluc3RhbmNlKSB7XG4gICAgICAgIF90aGlzLnNlYXJjaElucHV0UmVmSW5zdGFuY2UuZm9jdXMoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFfdGhpcy5zdGF0ZS5pc0xpc3RPcGVuKSB7XG4gICAgICAgIF90aGlzLm9wZW5MaXN0KCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25PcHRpb25MaXN0U2Nyb2xsXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChfdGhpcy5zZWFyY2hJbnB1dFJlZkluc3RhbmNlKSB7XG4gICAgICAgIF90aGlzLnNlYXJjaElucHV0UmVmSW5zdGFuY2UuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkNsb3NlTGlzdENsaWNrXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLmNsb3NlTGlzdCgpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uU2VhcmNoQ2hhbmdlXCIsIGZ1bmN0aW9uIChzZWFyY2hWYWx1ZSkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNSA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIG9uU2VhcmNoQ2hhbmdlID0gX3RoaXMkcHJvcHM1Lm9uU2VhcmNoQ2hhbmdlLFxuICAgICAgICAgIGRlbGltaXRlciA9IF90aGlzJHByb3BzNS5kZWxpbWl0ZXI7XG5cbiAgICAgIGlmIChvblNlYXJjaENoYW5nZSkge1xuICAgICAgICB2YXIgX2hhc01hdGNoaW5nT3B0aW9ucyA9IF90aGlzLnN0YXRlLm1hdGNoaW5nT3B0aW9ucy5sZW5ndGggPiAwO1xuXG4gICAgICAgIG9uU2VhcmNoQ2hhbmdlKHNlYXJjaFZhbHVlLCBfaGFzTWF0Y2hpbmdPcHRpb25zKTtcbiAgICAgIH1cblxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBzZWFyY2hWYWx1ZTogc2VhcmNoVmFsdWVcbiAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHNlYXJjaFZhbHVlICYmIF90aGlzLnN0YXRlLmlzTGlzdE9wZW4gPT09IGZhbHNlKSBfdGhpcy5vcGVuTGlzdCgpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChkZWxpbWl0ZXIgJiYgc2VhcmNoVmFsdWUuZW5kc1dpdGgoZGVsaW1pdGVyKSkge1xuICAgICAgICBfdGhpcy5zZXRDdXN0b21PcHRpb25zKGZhbHNlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJ1cGRhdGVNYXRjaGluZ09wdGlvbnNJZkRpZmZlcmVudFwiLCBmdW5jdGlvbiAobmV3TWF0Y2hpbmdPcHRpb25zKSB7XG4gICAgICB2YXIgX3RoaXMkc3RhdGUgPSBfdGhpcy5zdGF0ZSxcbiAgICAgICAgICBtYXRjaGluZ09wdGlvbnMgPSBfdGhpcyRzdGF0ZS5tYXRjaGluZ09wdGlvbnMsXG4gICAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXggPSBfdGhpcyRzdGF0ZS5hY3RpdmVPcHRpb25JbmRleDtcbiAgICAgIHZhciBfdGhpcyRwcm9wczYgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBzaW5nbGVTZWxlY3Rpb24gPSBfdGhpcyRwcm9wczYuc2luZ2xlU2VsZWN0aW9uLFxuICAgICAgICAgIHNlbGVjdGVkT3B0aW9ucyA9IF90aGlzJHByb3BzNi5zZWxlY3RlZE9wdGlvbnM7XG4gICAgICB2YXIgYXJlT3B0aW9uc0RpZmZlcmVudCA9IGZhbHNlO1xuXG4gICAgICBpZiAobWF0Y2hpbmdPcHRpb25zLmxlbmd0aCAhPT0gbmV3TWF0Y2hpbmdPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICBhcmVPcHRpb25zRGlmZmVyZW50ID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWF0Y2hpbmdPcHRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKG1hdGNoaW5nT3B0aW9uc1tpXS5sYWJlbCAhPT0gbmV3TWF0Y2hpbmdPcHRpb25zW2ldLmxhYmVsKSB7XG4gICAgICAgICAgICBhcmVPcHRpb25zRGlmZmVyZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoYXJlT3B0aW9uc0RpZmZlcmVudCkge1xuICAgICAgICBfdGhpcy5vcHRpb25zUmVmSW5zdGFuY2VzID0gW107XG4gICAgICAgIHZhciBuZXh0QWN0aXZlT3B0aW9uSW5kZXggPSBhY3RpdmVPcHRpb25JbmRleDsgLy8gZW5zdXJlIHRoYXQgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBzaW5nbGUgb3B0aW9uIGlzIGFjdGl2ZSBpZiBpdCBpcyBpbiB0aGUgbWF0Y2hpbmdPcHRpb25zXG5cbiAgICAgICAgaWYgKEJvb2xlYW4oc2luZ2xlU2VsZWN0aW9uKSAmJiBzZWxlY3RlZE9wdGlvbnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgaWYgKG5ld01hdGNoaW5nT3B0aW9ucy5pbmNsdWRlcyhzZWxlY3RlZE9wdGlvbnNbMF0pKSB7XG4gICAgICAgICAgICBuZXh0QWN0aXZlT3B0aW9uSW5kZXggPSBuZXdNYXRjaGluZ09wdGlvbnMuaW5kZXhPZihzZWxlY3RlZE9wdGlvbnNbMF0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBtYXRjaGluZ09wdGlvbnM6IG5ld01hdGNoaW5nT3B0aW9ucyxcbiAgICAgICAgICBhY3RpdmVPcHRpb25JbmRleDogbmV4dEFjdGl2ZU9wdGlvbkluZGV4XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghbmV3TWF0Y2hpbmdPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICAgIC8vIFByZXZlbnQgZW5kbGVzcyBzZXRTdGF0ZSAtPiBjb21wb25lbnRXaWxsVXBkYXRlIC0+IHNldFN0YXRlIGxvb3AuXG4gICAgICAgICAgaWYgKF90aGlzLmhhc0FjdGl2ZU9wdGlvbigpKSB7XG4gICAgICAgICAgICBfdGhpcy5jbGVhckFjdGl2ZU9wdGlvbigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEV1aUNvbWJvQm94LCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB0aGlzLl9pc01vdW50ZWQgPSB0cnVlOyAvLyBUT0RPOiBUaGlzIHdpbGwgbmVlZCB0byBiZSBjYWxsZWQgb25jZSB0aGUgYWN0dWFsIHN0eWxlc2hlZXQgbG9hZHMuXG5cbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoX3RoaXMyLmF1dG9TaXplSW5wdXRSZWZJbnN0YW5jZSkge1xuICAgICAgICAgIF90aGlzMi5hdXRvU2l6ZUlucHV0UmVmSW5zdGFuY2UuY29weUlucHV0U3R5bGVzKCk7XG4gICAgICAgIH1cbiAgICAgIH0sIDEwMCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudERpZFVwZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM3ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBvcHRpb25zID0gX3RoaXMkcHJvcHM3Lm9wdGlvbnMsXG4gICAgICAgICAgc2VsZWN0ZWRPcHRpb25zID0gX3RoaXMkcHJvcHM3LnNlbGVjdGVkT3B0aW9ucyxcbiAgICAgICAgICBzaW5nbGVTZWxlY3Rpb24gPSBfdGhpcyRwcm9wczcuc2luZ2xlU2VsZWN0aW9uLFxuICAgICAgICAgIHNvcnRNYXRjaGVzQnkgPSBfdGhpcyRwcm9wczcuc29ydE1hdGNoZXNCeTtcbiAgICAgIHZhciBzZWFyY2hWYWx1ZSA9IHRoaXMuc3RhdGUuc2VhcmNoVmFsdWU7IC8vIFJlYWN0IDE2LjMgaGFzIGEgYnVnIChmaXhlZCBpbiAxNi40KSB3aGVyZSBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHNcbiAgICAgIC8vIGlzbid0IGNhbGxlZCBhZnRlciBhIHN0YXRlIGNoYW5nZSwgYW5kIHdlIHRyYWNrIGBzZWFyY2hWYWx1ZWAgaW4gc3RhdGVcbiAgICAgIC8vIGluc3RlYWQgd2UgbmVlZCB0byByZWFjdCB0byBhIGNoYW5nZSBpbiBzZWFyY2hWYWx1ZSBoZXJlXG5cbiAgICAgIHRoaXMudXBkYXRlTWF0Y2hpbmdPcHRpb25zSWZEaWZmZXJlbnQoZ2V0TWF0Y2hpbmdPcHRpb25zKG9wdGlvbnMsIHNlbGVjdGVkT3B0aW9ucywgc2VhcmNoVmFsdWUsIHRoaXMucHJvcHMuYXN5bmMsIEJvb2xlYW4oc2luZ2xlU2VsZWN0aW9uKSwgc29ydE1hdGNoZXNCeSkpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIHRoaXMuX2lzTW91bnRlZCA9IGZhbHNlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIHZhciBfdGhpcyRwcm9wczggPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGRhdGFUZXN0U3ViaiA9IF90aGlzJHByb3BzOFsnZGF0YS10ZXN0LXN1YmonXSxcbiAgICAgICAgICBhc3luYyA9IF90aGlzJHByb3BzOC5hc3luYyxcbiAgICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wczguY2xhc3NOYW1lLFxuICAgICAgICAgIGNvbXByZXNzZWQgPSBfdGhpcyRwcm9wczguY29tcHJlc3NlZCxcbiAgICAgICAgICBjdXN0b21PcHRpb25UZXh0ID0gX3RoaXMkcHJvcHM4LmN1c3RvbU9wdGlvblRleHQsXG4gICAgICAgICAgZnVsbFdpZHRoID0gX3RoaXMkcHJvcHM4LmZ1bGxXaWR0aCxcbiAgICAgICAgICBpZCA9IF90aGlzJHByb3BzOC5pZCxcbiAgICAgICAgICBpbnB1dFJlZiA9IF90aGlzJHByb3BzOC5pbnB1dFJlZixcbiAgICAgICAgICBpc0NsZWFyYWJsZSA9IF90aGlzJHByb3BzOC5pc0NsZWFyYWJsZSxcbiAgICAgICAgICBpc0Rpc2FibGVkID0gX3RoaXMkcHJvcHM4LmlzRGlzYWJsZWQsXG4gICAgICAgICAgaXNJbnZhbGlkID0gX3RoaXMkcHJvcHM4LmlzSW52YWxpZCxcbiAgICAgICAgICBpc0xvYWRpbmcgPSBfdGhpcyRwcm9wczguaXNMb2FkaW5nLFxuICAgICAgICAgIG5vU3VnZ2VzdGlvbnMgPSBfdGhpcyRwcm9wczgubm9TdWdnZXN0aW9ucyxcbiAgICAgICAgICBvbkJsdXIgPSBfdGhpcyRwcm9wczgub25CbHVyLFxuICAgICAgICAgIG9uQ2hhbmdlID0gX3RoaXMkcHJvcHM4Lm9uQ2hhbmdlLFxuICAgICAgICAgIG9uQ3JlYXRlT3B0aW9uID0gX3RoaXMkcHJvcHM4Lm9uQ3JlYXRlT3B0aW9uLFxuICAgICAgICAgIG9uU2VhcmNoQ2hhbmdlID0gX3RoaXMkcHJvcHM4Lm9uU2VhcmNoQ2hhbmdlLFxuICAgICAgICAgIG9wdGlvbnMgPSBfdGhpcyRwcm9wczgub3B0aW9ucyxcbiAgICAgICAgICBwbGFjZWhvbGRlciA9IF90aGlzJHByb3BzOC5wbGFjZWhvbGRlcixcbiAgICAgICAgICByZW5kZXJPcHRpb24gPSBfdGhpcyRwcm9wczgucmVuZGVyT3B0aW9uLFxuICAgICAgICAgIHJvd0hlaWdodCA9IF90aGlzJHByb3BzOC5yb3dIZWlnaHQsXG4gICAgICAgICAgc2VsZWN0ZWRPcHRpb25zID0gX3RoaXMkcHJvcHM4LnNlbGVjdGVkT3B0aW9ucyxcbiAgICAgICAgICBzaW5nbGVTZWxlY3Rpb24gPSBfdGhpcyRwcm9wczguc2luZ2xlU2VsZWN0aW9uLFxuICAgICAgICAgIHByZXBlbmQgPSBfdGhpcyRwcm9wczgucHJlcGVuZCxcbiAgICAgICAgICBzb3J0TWF0Y2hlc0J5ID0gX3RoaXMkcHJvcHM4LnNvcnRNYXRjaGVzQnksXG4gICAgICAgICAgZGVsaW1pdGVyID0gX3RoaXMkcHJvcHM4LmRlbGltaXRlcixcbiAgICAgICAgICBhcHBlbmQgPSBfdGhpcyRwcm9wczguYXBwZW5kLFxuICAgICAgICAgIGF1dG9Gb2N1cyA9IF90aGlzJHByb3BzOC5hdXRvRm9jdXMsXG4gICAgICAgICAgYXJpYUxhYmVsID0gX3RoaXMkcHJvcHM4WydhcmlhLWxhYmVsJ10sXG4gICAgICAgICAgYXJpYUxhYmVsbGVkYnkgPSBfdGhpcyRwcm9wczhbJ2FyaWEtbGFiZWxsZWRieSddLFxuICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHM4LCBfZXhjbHVkZWQpO1xuXG4gICAgICB2YXIgX3RoaXMkc3RhdGUyID0gdGhpcy5zdGF0ZSxcbiAgICAgICAgICBhY3RpdmVPcHRpb25JbmRleCA9IF90aGlzJHN0YXRlMi5hY3RpdmVPcHRpb25JbmRleCxcbiAgICAgICAgICBoYXNGb2N1cyA9IF90aGlzJHN0YXRlMi5oYXNGb2N1cyxcbiAgICAgICAgICBpc0xpc3RPcGVuID0gX3RoaXMkc3RhdGUyLmlzTGlzdE9wZW4sXG4gICAgICAgICAgbGlzdFBvc2l0aW9uID0gX3RoaXMkc3RhdGUyLmxpc3RQb3NpdGlvbixcbiAgICAgICAgICBzZWFyY2hWYWx1ZSA9IF90aGlzJHN0YXRlMi5zZWFyY2hWYWx1ZSxcbiAgICAgICAgICB3aWR0aCA9IF90aGlzJHN0YXRlMi53aWR0aCxcbiAgICAgICAgICBtYXRjaGluZ09wdGlvbnMgPSBfdGhpcyRzdGF0ZTIubWF0Y2hpbmdPcHRpb25zOyAvLyBNYWtlIHN1cmUgd2UgaGF2ZSBhIHZhbGlkIElEIGlmIHVzZXJzIGRvbid0IHBhc3Mgb25lIGFzIGEgcHJvcFxuXG4gICAgICB2YXIgaW5wdXRJZCA9IGlkICE9PSBudWxsICYmIGlkICE9PSB2b2lkIDAgPyBpZCA6IHRoaXMucm9vdElkKCdfZXVpLWNvbWJvYm94LWlkJyk7IC8vIFZpc3VhbGx5IGluZGljYXRlIHRoZSBjb21ib2JveCBpcyBpbiBhbiBpbnZhbGlkIHN0YXRlIGlmIGl0IGhhcyBsb3N0IGZvY3VzIGJ1dCB0aGVyZSBpcyB0ZXh0IGVudGVyZWQgaW4gdGhlIGlucHV0LlxuICAgICAgLy8gV2hlbiBjdXN0b20gb3B0aW9ucyBhcmUgZGlzYWJsZWQgYW5kIHRoZSB1c2VyIGxlYXZlcyB0aGUgY29tYm8gYm94IGFmdGVyIGVudGVyaW5nIHRleHQgdGhhdCBkb2VzIG5vdCBtYXRjaCBhbnlcbiAgICAgIC8vIG9wdGlvbnMsIHRoaXMgdGVsbHMgdGhlIHVzZXIgdGhhdCB0aGV5J3ZlIGVudGVyZWQgaW52YWxpZCBpbnB1dC5cblxuICAgICAgdmFyIG1hcmtBc0ludmFsaWQgPSBpc0ludmFsaWQgfHwgKGhhc0ZvY3VzID09PSBmYWxzZSB8fCBpc0xpc3RPcGVuID09PSBmYWxzZSkgJiYgc2VhcmNoVmFsdWU7XG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUNvbWJvQm94JywgY2xhc3NOYW1lLCB7XG4gICAgICAgICdldWlDb21ib0JveC0tY29tcHJlc3NlZCc6IGNvbXByZXNzZWQsXG4gICAgICAgICdldWlDb21ib0JveC0tZnVsbFdpZHRoJzogZnVsbFdpZHRoLFxuICAgICAgICAnZXVpQ29tYm9Cb3gtLXByZXBlbmRlZCc6IHByZXBlbmQsXG4gICAgICAgICdldWlDb21ib0JveC0tYXBwZW5kZWQnOiBhcHBlbmQsXG4gICAgICAgICdldWlDb21ib0JveC1pc0Rpc2FibGVkJzogaXNEaXNhYmxlZCxcbiAgICAgICAgJ2V1aUNvbWJvQm94LWlzSW52YWxpZCc6IG1hcmtBc0ludmFsaWQsXG4gICAgICAgICdldWlDb21ib0JveC1pc09wZW4nOiBpc0xpc3RPcGVuXG4gICAgICB9KTtcbiAgICAgIHZhciB2YWx1ZSA9IHNlbGVjdGVkT3B0aW9ucy5tYXAoZnVuY3Rpb24gKHNlbGVjdGVkT3B0aW9uKSB7XG4gICAgICAgIHJldHVybiBzZWxlY3RlZE9wdGlvbi5sYWJlbDtcbiAgICAgIH0pLmpvaW4oJywgJyk7XG4gICAgICB2YXIgb3B0aW9uc0xpc3Q7XG5cbiAgICAgIGlmICghbm9TdWdnZXN0aW9ucyAmJiBpc0xpc3RPcGVuKSB7XG4gICAgICAgIHZhciBvcHRpb25zTGlzdERhdGFUZXN0U3ViaiA9IGRhdGFUZXN0U3ViaiA/IFwiXCIuY29uY2F0KGRhdGFUZXN0U3ViaiwgXCItb3B0aW9uc0xpc3RcIikgOiB1bmRlZmluZWQ7XG4gICAgICAgIG9wdGlvbnNMaXN0ID0gX19fRW1vdGlvbkpTWChFdWlQb3J0YWwsIG51bGwsIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgIHRva2VuOiBcImV1aUNvbWJvQm94Lmxpc3Rib3hBcmlhTGFiZWxcIixcbiAgICAgICAgICBkZWZhdWx0OiBcIkNob29zZSBmcm9tIHRoZSBmb2xsb3dpbmcgb3B0aW9uc1wiXG4gICAgICAgIH0sIGZ1bmN0aW9uIChsaXN0Ym94QXJpYUxhYmVsKSB7XG4gICAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpQ29tYm9Cb3hPcHRpb25zTGlzdCwge1xuICAgICAgICAgICAgekluZGV4OiBfdGhpczMuc3RhdGUubGlzdFpJbmRleCxcbiAgICAgICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4OiBfdGhpczMuc3RhdGUuYWN0aXZlT3B0aW9uSW5kZXgsXG4gICAgICAgICAgICBhcmVBbGxPcHRpb25zU2VsZWN0ZWQ6IF90aGlzMy5hcmVBbGxPcHRpb25zU2VsZWN0ZWQoKSxcbiAgICAgICAgICAgIGN1c3RvbU9wdGlvblRleHQ6IGN1c3RvbU9wdGlvblRleHQsXG4gICAgICAgICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IG9wdGlvbnNMaXN0RGF0YVRlc3RTdWJqLFxuICAgICAgICAgICAgZnVsbFdpZHRoOiBmdWxsV2lkdGgsXG4gICAgICAgICAgICBpc0xvYWRpbmc6IGlzTG9hZGluZyxcbiAgICAgICAgICAgIGxpc3RSZWY6IF90aGlzMy5saXN0UmVmQ2FsbGJhY2ssXG4gICAgICAgICAgICBtYXRjaGluZ09wdGlvbnM6IG1hdGNoaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIG9uQ2xvc2VMaXN0OiBfdGhpczMuY2xvc2VMaXN0LFxuICAgICAgICAgICAgb25DcmVhdGVPcHRpb246IG9uQ3JlYXRlT3B0aW9uLFxuICAgICAgICAgICAgb25PcHRpb25DbGljazogX3RoaXMzLm9uT3B0aW9uQ2xpY2ssXG4gICAgICAgICAgICBvbk9wdGlvbkVudGVyS2V5OiBfdGhpczMub25PcHRpb25FbnRlcktleSxcbiAgICAgICAgICAgIG9uU2Nyb2xsOiBfdGhpczMub25PcHRpb25MaXN0U2Nyb2xsLFxuICAgICAgICAgICAgb3B0aW9uUmVmOiBfdGhpczMub3B0aW9uUmVmQ2FsbGJhY2ssXG4gICAgICAgICAgICBvcHRpb25zOiBvcHRpb25zLFxuICAgICAgICAgICAgcG9zaXRpb246IGxpc3RQb3NpdGlvbixcbiAgICAgICAgICAgIHNpbmdsZVNlbGVjdGlvbjogc2luZ2xlU2VsZWN0aW9uLFxuICAgICAgICAgICAgcmVuZGVyT3B0aW9uOiByZW5kZXJPcHRpb24sXG4gICAgICAgICAgICByb290SWQ6IF90aGlzMy5yb290SWQsXG4gICAgICAgICAgICByb3dIZWlnaHQ6IHJvd0hlaWdodCxcbiAgICAgICAgICAgIHNjcm9sbFRvSW5kZXg6IGFjdGl2ZU9wdGlvbkluZGV4LFxuICAgICAgICAgICAgc2VhcmNoVmFsdWU6IHNlYXJjaFZhbHVlLFxuICAgICAgICAgICAgc2VsZWN0ZWRPcHRpb25zOiBzZWxlY3RlZE9wdGlvbnMsXG4gICAgICAgICAgICB1cGRhdGVQb3NpdGlvbjogX3RoaXMzLnVwZGF0ZVBvc2l0aW9uLFxuICAgICAgICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgICAgICAgZGVsaW1pdGVyOiBkZWxpbWl0ZXIsXG4gICAgICAgICAgICBnZXRTZWxlY3RlZE9wdGlvbkZvclNlYXJjaFZhbHVlOiBnZXRTZWxlY3RlZE9wdGlvbkZvclNlYXJjaFZhbHVlLFxuICAgICAgICAgICAgbGlzdGJveEFyaWFMYWJlbDogbGlzdGJveEFyaWFMYWJlbFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBFdWlDb21ib0JveCBmb2xsb3dzIHRoZSBXQUktQVJJQSAxLjIgc3BlYyBmb3IgZWRpdGFibGUgY29tYm9ib3hlc1xuICAgICAgICAgKiB3aXRoIGxpc3QgYXV0b2NvbXBsZXRlLiBUaGlzIHBhdHRlcm4gaXMgYW4gaW1wcm92ZW1lbnQgb24gdGhlIHVzZXJcbiAgICAgICAgICogZXhwZXJpZW5jZSBmb3Igc2NyZWVuIHJlYWRlcnMgb3ZlciB0aGUgV0FJLUFSSUEgMS4xIHBhdHRlcm4uXG4gICAgICAgICAqXG4gICAgICAgICAqIGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS1wcmFjdGljZXMtMS4yL2V4YW1wbGVzL2NvbWJvYm94L2NvbWJvYm94LWF1dG9jb21wbGV0ZS1saXN0Lmh0bWxcbiAgICAgICAgICovXG4gICAgICAgIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe30sIHJlc3QsIHtcbiAgICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBkYXRhVGVzdFN1YmosXG4gICAgICAgICAgb25LZXlEb3duOiB0aGlzLm9uS2V5RG93bixcbiAgICAgICAgICByZWY6IHRoaXMuY29tYm9Cb3hSZWZDYWxsYmFja1xuICAgICAgICB9KSwgX19fRW1vdGlvbkpTWChFdWlDb21ib0JveElucHV0LCB7XG4gICAgICAgICAgYXV0b1NpemVJbnB1dFJlZjogdGhpcy5hdXRvU2l6ZUlucHV0UmVmQ2FsbGJhY2ssXG4gICAgICAgICAgY29tcHJlc3NlZDogY29tcHJlc3NlZCxcbiAgICAgICAgICBmb2N1c2VkT3B0aW9uSWQ6IHRoaXMuaGFzQWN0aXZlT3B0aW9uKCkgPyB0aGlzLnJvb3RJZChcIl9vcHRpb24tXCIuY29uY2F0KHRoaXMuc3RhdGUuYWN0aXZlT3B0aW9uSW5kZXgpKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBmdWxsV2lkdGg6IGZ1bGxXaWR0aCxcbiAgICAgICAgICBoYXNTZWxlY3RlZE9wdGlvbnM6IHNlbGVjdGVkT3B0aW9ucy5sZW5ndGggPiAwLFxuICAgICAgICAgIGlkOiBpbnB1dElkLFxuICAgICAgICAgIGlucHV0UmVmOiB0aGlzLnNlYXJjaElucHV0UmVmQ2FsbGJhY2ssXG4gICAgICAgICAgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgICBpc0xpc3RPcGVuOiBpc0xpc3RPcGVuLFxuICAgICAgICAgIG5vSWNvbjogISFub1N1Z2dlc3Rpb25zLFxuICAgICAgICAgIG9uQ2hhbmdlOiB0aGlzLm9uU2VhcmNoQ2hhbmdlLFxuICAgICAgICAgIG9uQ2xlYXI6IGlzQ2xlYXJhYmxlICYmICFpc0Rpc2FibGVkID8gdGhpcy5jbGVhclNlbGVjdGVkT3B0aW9ucyA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBvbkNsaWNrOiB0aGlzLm9uQ29tYm9Cb3hDbGljayxcbiAgICAgICAgICBvbkNsb3NlTGlzdENsaWNrOiB0aGlzLm9uQ2xvc2VMaXN0Q2xpY2ssXG4gICAgICAgICAgb25Gb2N1czogdGhpcy5vbkNvbWJvQm94Rm9jdXMsXG4gICAgICAgICAgb25PcGVuTGlzdENsaWNrOiB0aGlzLm9uT3Blbkxpc3RDbGljayxcbiAgICAgICAgICBvblJlbW92ZU9wdGlvbjogdGhpcy5vblJlbW92ZU9wdGlvbixcbiAgICAgICAgICBwbGFjZWhvbGRlcjogcGxhY2Vob2xkZXIsXG4gICAgICAgICAgcm9vdElkOiB0aGlzLnJvb3RJZCxcbiAgICAgICAgICBzZWFyY2hWYWx1ZTogc2VhcmNoVmFsdWUsXG4gICAgICAgICAgc2VsZWN0ZWRPcHRpb25zOiBzZWxlY3RlZE9wdGlvbnMsXG4gICAgICAgICAgc2luZ2xlU2VsZWN0aW9uOiBzaW5nbGVTZWxlY3Rpb24sXG4gICAgICAgICAgdG9nZ2xlQnV0dG9uUmVmOiB0aGlzLnRvZ2dsZUJ1dHRvblJlZkNhbGxiYWNrLFxuICAgICAgICAgIHVwZGF0ZVBvc2l0aW9uOiB0aGlzLnVwZGF0ZVBvc2l0aW9uLFxuICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICBhcHBlbmQ6IHNpbmdsZVNlbGVjdGlvbiA/IGFwcGVuZCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBwcmVwZW5kOiBzaW5nbGVTZWxlY3Rpb24gPyBwcmVwZW5kIDogdW5kZWZpbmVkLFxuICAgICAgICAgIGlzTG9hZGluZzogaXNMb2FkaW5nLFxuICAgICAgICAgIGF1dG9Gb2N1czogYXV0b0ZvY3VzLFxuICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBhcmlhTGFiZWwsXG4gICAgICAgICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogYXJpYUxhYmVsbGVkYnlcbiAgICAgICAgfSksIG9wdGlvbnNMaXN0KVxuICAgICAgKTtcbiAgICB9XG4gIH1dLCBbe1xuICAgIGtleTogXCJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKG5leHRQcm9wcywgcHJldlN0YXRlKSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IG5leHRQcm9wcy5vcHRpb25zLFxuICAgICAgICAgIHNlbGVjdGVkT3B0aW9ucyA9IG5leHRQcm9wcy5zZWxlY3RlZE9wdGlvbnMsXG4gICAgICAgICAgc2luZ2xlU2VsZWN0aW9uID0gbmV4dFByb3BzLnNpbmdsZVNlbGVjdGlvbixcbiAgICAgICAgICBzb3J0TWF0Y2hlc0J5ID0gbmV4dFByb3BzLnNvcnRNYXRjaGVzQnk7XG4gICAgICB2YXIgYWN0aXZlT3B0aW9uSW5kZXggPSBwcmV2U3RhdGUuYWN0aXZlT3B0aW9uSW5kZXgsXG4gICAgICAgICAgc2VhcmNoVmFsdWUgPSBwcmV2U3RhdGUuc2VhcmNoVmFsdWU7IC8vIENhbGN1bGF0ZSBhbmQgY2FjaGUgdGhlIG9wdGlvbnMgd2hpY2ggbWF0Y2ggdGhlIHNlYXJjaFZhbHVlLCBiZWNhdXNlIHdlIHVzZSB0aGlzIGluZm9ybWF0aW9uXG4gICAgICAvLyBpbiBtdWx0aXBsZSBwbGFjZXMgYW5kIGl0IHdvdWxkIGJlIGV4cGVuc2l2ZSB0byBjYWxjdWxhdGUgcmVwZWF0ZWRseS5cblxuICAgICAgdmFyIG1hdGNoaW5nT3B0aW9ucyA9IGdldE1hdGNoaW5nT3B0aW9ucyhvcHRpb25zLCBzZWxlY3RlZE9wdGlvbnMsIHNlYXJjaFZhbHVlLCBuZXh0UHJvcHMuYXN5bmMsIEJvb2xlYW4oc2luZ2xlU2VsZWN0aW9uKSwgc29ydE1hdGNoZXNCeSk7XG4gICAgICB2YXIgc3RhdGVVcGRhdGUgPSB7XG4gICAgICAgIG1hdGNoaW5nT3B0aW9uczogbWF0Y2hpbmdPcHRpb25zXG4gICAgICB9O1xuXG4gICAgICBpZiAoYWN0aXZlT3B0aW9uSW5kZXggPj0gbWF0Y2hpbmdPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICBzdGF0ZVVwZGF0ZS5hY3RpdmVPcHRpb25JbmRleCA9IC0xO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3RhdGVVcGRhdGU7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEV1aUNvbWJvQm94O1xufShDb21wb25lbnQpO1xuXG5fZGVmaW5lUHJvcGVydHkoRXVpQ29tYm9Cb3gsIFwiZGVmYXVsdFByb3BzXCIsIHtcbiAgYXN5bmM6IGZhbHNlLFxuICBjb21wcmVzc2VkOiBmYWxzZSxcbiAgZnVsbFdpZHRoOiBmYWxzZSxcbiAgaXNDbGVhcmFibGU6IHRydWUsXG4gIG9wdGlvbnM6IFtdLFxuICBzZWxlY3RlZE9wdGlvbnM6IFtdLFxuICBzaW5nbGVTZWxlY3Rpb246IGZhbHNlLFxuICBwcmVwZW5kOiB1bmRlZmluZWQsXG4gIGFwcGVuZDogdW5kZWZpbmVkLFxuICBzb3J0TWF0Y2hlc0J5OiAnbm9uZSdcbn0pO1xuXG5FdWlDb21ib0JveC5wcm9wVHlwZXMgPSB7XG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgKiBVcGRhdGVzIHRoZSBsaXN0IG9mIG9wdGlvbnMgYXN5bmNocm9ub3VzbHlcbiAgICAgKi9cbiAgYXN5bmM6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgKiBXaGVuIGB0cnVlYCBjcmVhdGVzIGEgc2hvcnRlciBoZWlnaHQgaW5wdXRcbiAgICAgKi9cbiAgY29tcHJlc3NlZDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICAgKiBXaGVuIGB0cnVlYCBleHBhbmRzIHRvIHRoZSBlbnRpcmUgd2lkdGggYXZhaWxhYmxlXG4gICAgICovXG4gIGZ1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGlucHV0UmVmOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIFNob3dzIGEgYnV0dG9uIHRoYXQgcXVpY2tseSBjbGVhcnMgYW55IGlucHV0XG4gICAgICovXG4gIGlzQ2xlYXJhYmxlOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgICAqIERpc2FibGVzIHRoZSBpbnB1dFxuICAgICAqL1xuICBpc0Rpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgaXNJbnZhbGlkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBTd2FwcyB0aGUgZHJvcGRvd24gb3B0aW9ucyBmb3IgYSBsb2FkaW5nIHNwaW5uZXJcbiAgICAgKi9cbiAgaXNMb2FkaW5nOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBEb2Vzbid0IHNob3cgdGhlIHN1Z2dlc3Rpb25zIGxpc3QvZHJvcGRvd25cbiAgICAgKi9cbiAgbm9TdWdnZXN0aW9uczogUHJvcFR5cGVzLmJvb2wsXG4gIG9uQmx1cjogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBDYWxsZWQgZXZlcnkgdGltZSB0aGUgcXVlcnkgaW4gdGhlIGNvbWJvIGJveCBpcyBwYXJzZWRcbiAgICAgKi9cbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICBvbkZvY3VzOiBQcm9wVHlwZXMuYW55LFxuICBvbktleURvd246IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogQ2FsbGVkIGV2ZXJ5IHRpbWUgdGhlIHRleHQgcXVlcnkgaW4gdGhlIHNlYXJjaCBib3ggaXMgcGFyc2VkXG4gICAgICovXG4gIG9uU2VhcmNoQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICAgKiBTZXRzIHRoZSBwbGFjZWhvbGRlciBvZiB0aGUgaW5wdXRcbiAgICAgKi9cbiAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogRXZlcnkgb3B0aW9uIG11c3QgYmUgdGhlIHNhbWUgaGVpZ2h0IGFuZCBtdXN0IGJlIGV4cGxpY2l0bHkgc2V0IGlmIHVzaW5nIGEgY3VzdG9tIHJlbmRlclxuICAgICAqL1xuICByb3dIZWlnaHQ6IFByb3BUeXBlcy5udW1iZXIsXG5cbiAgLyoqXG4gICAgICogV2hlbiBgdHJ1ZWAgb25seSBhbGxvd3MgdGhlIHVzZXIgdG8gc2VsZWN0IGEgc2luZ2xlIG9wdGlvbi4gU2V0IHRvIGB7IGFzUGxhaW5UZXh0OiB0cnVlIH1gIHRvIG5vdCByZW5kZXIgaW5wdXQgc2VsZWN0aW9uIGFzIHBpbGxzXG4gICAgICovXG4gIHNpbmdsZVNlbGVjdGlvbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBhc1BsYWluVGV4dDogUHJvcFR5cGVzLmJvb2xcbiAgfSkuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsXG5cbiAgLyoqXG4gICAgICogRGlzcGxheSBtYXRjaGluZyBvcHRpb25zIGJ5OlxuICAgICAqIGBzdGFydHNXaXRoYDogbW92ZXMgaXRlbXMgdGhhdCBzdGFydCB3aXRoIHNlYXJjaCB2YWx1ZSB0byB0b3Agb2YgdGhlIGxpc3Q7XG4gICAgICogYG5vbmVgOiBkb24ndCBjaGFuZ2UgdGhlIHNvcnQgb3JkZXIgb2YgaW5pdGlhbCBvYmplY3RcbiAgICAgKi9cbiAgc29ydE1hdGNoZXNCeTogUHJvcFR5cGVzLm9uZU9mKFtcIm5vbmVcIiwgXCJzdGFydHNXaXRoXCJdKS5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5wdXQgZ3JvdXAgd2l0aCBlbGVtZW50KHMpIGNvbWluZyBiZWZvcmUgaW5wdXQuIEl0IHdvbid0IHNob3cgaWYgYHNpbmdsZVNlbGVjdGlvbmAgaXMgc2V0IHRvIGBmYWxzZWAuXG4gICAgICogYHN0cmluZ2AgfCBgUmVhY3RFbGVtZW50YCBvciBhbiBhcnJheSBvZiB0aGVzZVxuICAgICAqL1xuICBwcmVwZW5kOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5wdXQgZ3JvdXAgd2l0aCBlbGVtZW50KHMpIGNvbWluZyBhZnRlciBpbnB1dC4gSXQgd29uJ3Qgc2hvdyBpZiBgc2luZ2xlU2VsZWN0aW9uYCBpcyBzZXQgdG8gYGZhbHNlYC5cbiAgICAgKiBgc3RyaW5nYCB8IGBSZWFjdEVsZW1lbnRgIG9yIGFuIGFycmF5IG9mIHRoZXNlXG4gICAgICovXG4gIGFwcGVuZDogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBBIHNwZWNpYWwgY2hhcmFjdGVyIHRvIHVzZSBhcyBhIHZhbHVlIHNlcGFyYXRvci4gVHlwaWNhbGx5IGEgY29tbWEgYCxgXG4gICAgICovXG4gIGRlbGltaXRlcjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgKiBTcGVjaWZpZXMgdGhhdCB0aGUgaW5wdXQgc2hvdWxkIGhhdmUgZm9jdXMgd2hlbiB0aGUgY29tcG9uZW50IGxvYWRzXG4gICAgICovXG4gIGF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogUmVxdWlyZWQgd2hlbiByZW5kZXJpbmcgd2l0aG91dCBhIHZpc2libGUgbGFiZWwgZnJvbSBbRXVpRm9ybVJvd10oLyMvZm9ybXMvZm9ybS1sYXlvdXRzKS5cbiAgICAgKi9cbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogUmVmZXJlbmNlIElEIG9mIGEgdGV4dCBlbGVtZW50IGNvbnRhaW5pbmcgdGhlIHZpc2libGUgbGFiZWwgZm9yIHRoZSBjb21ibyBib3ggd2hlbiBub3RcbiAgICAgKiBzdXBwbGllZCBieSBgYXJpYS1sYWJlbGAgb3IgZnJvbSBbRXVpRm9ybVJvd10oLyMvZm9ybXMvZm9ybS1sYXlvdXRzKS5cbiAgICAgKi9cbiAgXCJhcmlhLWxhYmVsbGVkYnlcIjogUHJvcFR5cGVzLnN0cmluZ1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG52YXIgX2V4Y2x1ZGVkID0gW1wia2V5XCIsIFwiaXNHcm91cExhYmVsT3B0aW9uXCIsIFwibGFiZWxcIiwgXCJ2YWx1ZVwiXSxcbiAgICBfZXhjbHVkZWQyID0gW1wiZGF0YS10ZXN0LXN1YmpcIiwgXCJhY3RpdmVPcHRpb25JbmRleFwiLCBcImFyZUFsbE9wdGlvbnNTZWxlY3RlZFwiLCBcImN1c3RvbU9wdGlvblRleHRcIiwgXCJmdWxsV2lkdGhcIiwgXCJnZXRTZWxlY3RlZE9wdGlvbkZvclNlYXJjaFZhbHVlXCIsIFwiaXNMb2FkaW5nXCIsIFwibGlzdFJlZlwiLCBcIm1hdGNoaW5nT3B0aW9uc1wiLCBcIm9uQ2xvc2VMaXN0XCIsIFwib25DcmVhdGVPcHRpb25cIiwgXCJvbk9wdGlvbkNsaWNrXCIsIFwib25PcHRpb25FbnRlcktleVwiLCBcIm9uU2Nyb2xsXCIsIFwib3B0aW9uUmVmXCIsIFwib3B0aW9uc1wiLCBcInBvc2l0aW9uXCIsIFwicmVuZGVyT3B0aW9uXCIsIFwicm9vdElkXCIsIFwicm93SGVpZ2h0XCIsIFwic2Nyb2xsVG9JbmRleFwiLCBcInNlYXJjaFZhbHVlXCIsIFwic2VsZWN0ZWRPcHRpb25zXCIsIFwic2luZ2xlU2VsZWN0aW9uXCIsIFwidXBkYXRlUG9zaXRpb25cIiwgXCJ3aWR0aFwiLCBcImRlbGltaXRlclwiLCBcInpJbmRleFwiLCBcInN0eWxlXCIsIFwibGlzdGJveEFyaWFMYWJlbFwiXTtcblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IEZpeGVkU2l6ZUxpc3QgfSBmcm9tICdyZWFjdC13aW5kb3cnO1xuaW1wb3J0IHsgRXVpRmxleEdyb3VwLCBFdWlGbGV4SXRlbSB9IGZyb20gJy4uLy4uL2ZsZXgnO1xuaW1wb3J0IHsgRXVpSGlnaGxpZ2h0IH0gZnJvbSAnLi4vLi4vaGlnaGxpZ2h0JztcbmltcG9ydCB7IEV1aVRleHQgfSBmcm9tICcuLi8uLi90ZXh0JztcbmltcG9ydCB7IEV1aUxvYWRpbmdTcGlubmVyIH0gZnJvbSAnLi4vLi4vbG9hZGluZyc7XG5pbXBvcnQgeyBFdWlDb21ib0JveFRpdGxlIH0gZnJvbSAnLi9jb21ib19ib3hfdGl0bGUnO1xuaW1wb3J0IHsgRXVpSTE4biB9IGZyb20gJy4uLy4uL2kxOG4nO1xuaW1wb3J0IHsgRXVpRmlsdGVyU2VsZWN0SXRlbSB9IGZyb20gJy4uLy4uL2ZpbHRlcl9ncm91cC9maWx0ZXJfc2VsZWN0X2l0ZW0nO1xuaW1wb3J0IHsgRXVpQmFkZ2UgfSBmcm9tICcuLi8uLi9iYWRnZS8nO1xuaW1wb3J0IHsgRXVpUG9wb3ZlclBhbmVsIH0gZnJvbSAnLi4vLi4vcG9wb3Zlci9wb3BvdmVyX3BhbmVsJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgT1BUSU9OX0NPTlRFTlRfQ0xBU1NOQU1FID0gJ2V1aUNvbWJvQm94T3B0aW9uX19jb250ZW50JztcblxudmFyIGhpdEVudGVyQmFkZ2UgPSBfX19FbW90aW9uSlNYKEV1aUJhZGdlLCB7XG4gIGNsYXNzTmFtZTogXCJldWlDb21ib0JveE9wdGlvbl9fZW50ZXJCYWRnZVwiLFxuICBjb2xvcjogXCJob2xsb3dcIixcbiAgaWNvblR5cGU6IFwicmV0dXJuS2V5XCIsXG4gIFwiYXJpYS1oaWRkZW5cIjogXCJ0cnVlXCJcbn0pO1xuXG5leHBvcnQgdmFyIEV1aUNvbWJvQm94T3B0aW9uc0xpc3QgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEV1aUNvbWJvQm94T3B0aW9uc0xpc3QsIF9Db21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoRXVpQ29tYm9Cb3hPcHRpb25zTGlzdCk7XG5cbiAgZnVuY3Rpb24gRXVpQ29tYm9Cb3hPcHRpb25zTGlzdCgpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpQ29tYm9Cb3hPcHRpb25zTGlzdCk7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbC5hcHBseShfc3VwZXIsIFt0aGlzXS5jb25jYXQoYXJncykpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImxpc3RSZWZJbnN0YW5jZVwiLCBudWxsKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJsaXN0UmVmXCIsIG51bGwpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImxpc3RCb3hSZWZcIiwgbnVsbCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwidXBkYXRlUG9zaXRpb25cIiwgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gV2FpdCBhIGJlYXQgZm9yIHRoZSBET00gdG8gdXBkYXRlLCBzaW5jZSB3ZSBkZXBlbmQgb24gRE9NIGVsZW1lbnRzJyBib3VuZHMuXG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpcy5wcm9wcy51cGRhdGVQb3NpdGlvbihfdGhpcy5saXN0UmVmSW5zdGFuY2UpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiY2xvc2VMaXN0T25TY3JvbGxcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAvLyBDbG9zZSB0aGUgbGlzdCB3aGVuIGEgc2Nyb2xsIGV2ZW50IGhhcHBlbnMsIGJ1dCBub3QgaWYgdGhlIHNjcm9sbCBoYXBwZW5lZCBpbiB0aGUgb3B0aW9ucyBsaXN0LlxuICAgICAgLy8gVGhpcyBtaXJyb3JzIEZpcmVmb3gncyBhcHByb2FjaCBvZiBhdXRvLWNsb3NpbmcgYHNlbGVjdGAgZWxlbWVudHMgb25zY3JvbGwuXG4gICAgICBpZiAoX3RoaXMubGlzdFJlZkluc3RhbmNlICYmIGV2ZW50LnRhcmdldCAmJiBfdGhpcy5saXN0UmVmSW5zdGFuY2UuY29udGFpbnMoZXZlbnQudGFyZ2V0KSA9PT0gZmFsc2UpIHtcbiAgICAgICAgX3RoaXMucHJvcHMub25DbG9zZUxpc3QoZXZlbnQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImxpc3RSZWZDYWxsYmFja1wiLCBmdW5jdGlvbiAocmVmKSB7XG4gICAgICBfdGhpcy5wcm9wcy5saXN0UmVmKHJlZik7XG5cbiAgICAgIF90aGlzLmxpc3RSZWZJbnN0YW5jZSA9IHJlZjtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzZXRMaXN0UmVmXCIsIGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgIF90aGlzLmxpc3RSZWYgPSByZWY7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic2V0TGlzdEJveFJlZlwiLCBmdW5jdGlvbiAocmVmKSB7XG4gICAgICBfdGhpcy5saXN0Qm94UmVmID0gcmVmO1xuXG4gICAgICBpZiAocmVmKSB7XG4gICAgICAgIHJlZi5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCBfdGhpcy5wcm9wcy5saXN0Ym94QXJpYUxhYmVsKTtcbiAgICAgICAgcmVmLnNldEF0dHJpYnV0ZSgnaWQnLCBfdGhpcy5wcm9wcy5yb290SWQoJ2xpc3Rib3gnKSk7XG4gICAgICAgIHJlZi5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAnbGlzdGJveCcpO1xuICAgICAgICByZWYuc2V0QXR0cmlidXRlKCd0YWJJbmRleCcsICcwJyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiTGlzdFJvd1wiLCBmdW5jdGlvbiAoX3JlZikge1xuICAgICAgdmFyIF9vcHRpb24ka2V5O1xuXG4gICAgICB2YXIgZGF0YSA9IF9yZWYuZGF0YSxcbiAgICAgICAgICBpbmRleCA9IF9yZWYuaW5kZXgsXG4gICAgICAgICAgc3R5bGUgPSBfcmVmLnN0eWxlO1xuICAgICAgdmFyIG9wdGlvbiA9IGRhdGFbaW5kZXhdO1xuXG4gICAgICB2YXIga2V5ID0gb3B0aW9uLmtleSxcbiAgICAgICAgICBpc0dyb3VwTGFiZWxPcHRpb24gPSBvcHRpb24uaXNHcm91cExhYmVsT3B0aW9uLFxuICAgICAgICAgIGxhYmVsID0gb3B0aW9uLmxhYmVsLFxuICAgICAgICAgIHZhbHVlID0gb3B0aW9uLnZhbHVlLFxuICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob3B0aW9uLCBfZXhjbHVkZWQpO1xuXG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBzaW5nbGVTZWxlY3Rpb24gPSBfdGhpcyRwcm9wcy5zaW5nbGVTZWxlY3Rpb24sXG4gICAgICAgICAgc2VsZWN0ZWRPcHRpb25zID0gX3RoaXMkcHJvcHMuc2VsZWN0ZWRPcHRpb25zLFxuICAgICAgICAgIG9uT3B0aW9uQ2xpY2sgPSBfdGhpcyRwcm9wcy5vbk9wdGlvbkNsaWNrLFxuICAgICAgICAgIG9wdGlvblJlZiA9IF90aGlzJHByb3BzLm9wdGlvblJlZixcbiAgICAgICAgICBhY3RpdmVPcHRpb25JbmRleCA9IF90aGlzJHByb3BzLmFjdGl2ZU9wdGlvbkluZGV4LFxuICAgICAgICAgIHJlbmRlck9wdGlvbiA9IF90aGlzJHByb3BzLnJlbmRlck9wdGlvbixcbiAgICAgICAgICBzZWFyY2hWYWx1ZSA9IF90aGlzJHByb3BzLnNlYXJjaFZhbHVlLFxuICAgICAgICAgIHJvb3RJZCA9IF90aGlzJHByb3BzLnJvb3RJZDtcblxuICAgICAgaWYgKGlzR3JvdXBMYWJlbE9wdGlvbikge1xuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICAgICAga2V5OiBrZXkgIT09IG51bGwgJiYga2V5ICE9PSB2b2lkIDAgPyBrZXkgOiBsYWJlbC50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgIHN0eWxlOiBzdHlsZVxuICAgICAgICB9LCBfX19FbW90aW9uSlNYKEV1aUNvbWJvQm94VGl0bGUsIG51bGwsIGxhYmVsKSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBjaGVja2VkID0gdW5kZWZpbmVkO1xuXG4gICAgICBpZiAoc2luZ2xlU2VsZWN0aW9uICYmIHNlbGVjdGVkT3B0aW9ucy5sZW5ndGggJiYgc2VsZWN0ZWRPcHRpb25zWzBdLmxhYmVsID09PSBsYWJlbCAmJiBzZWxlY3RlZE9wdGlvbnNbMF0ua2V5ID09PSBrZXkpIHtcbiAgICAgICAgY2hlY2tlZCA9ICdvbic7XG4gICAgICB9XG5cbiAgICAgIHZhciBvcHRpb25Jc0ZvY3VzZWQgPSBhY3RpdmVPcHRpb25JbmRleCA9PT0gaW5kZXg7XG4gICAgICB2YXIgb3B0aW9uSXNEaXNhYmxlZCA9IG9wdGlvbi5oYXNPd25Qcm9wZXJ0eSgnZGlzYWJsZWQnKSAmJiBvcHRpb24uZGlzYWJsZWQgPT09IHRydWU7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlGaWx0ZXJTZWxlY3RJdGVtLCBfZXh0ZW5kcyh7XG4gICAgICAgIHN0eWxlOiBzdHlsZSxcbiAgICAgICAga2V5OiAoX29wdGlvbiRrZXkgPSBvcHRpb24ua2V5KSAhPT0gbnVsbCAmJiBfb3B0aW9uJGtleSAhPT0gdm9pZCAwID8gX29wdGlvbiRrZXkgOiBvcHRpb24ubGFiZWwudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgb25DbGljazogZnVuY3Rpb24gb25DbGljaygpIHtcbiAgICAgICAgICBpZiAob25PcHRpb25DbGljaykge1xuICAgICAgICAgICAgb25PcHRpb25DbGljayhvcHRpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcmVmOiBvcHRpb25SZWYuYmluZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgaW5kZXgpLFxuICAgICAgICBpc0ZvY3VzZWQ6IG9wdGlvbklzRm9jdXNlZCxcbiAgICAgICAgY2hlY2tlZDogY2hlY2tlZCxcbiAgICAgICAgc2hvd0ljb25zOiBzaW5nbGVTZWxlY3Rpb24gPyB0cnVlIDogZmFsc2UsXG4gICAgICAgIGlkOiByb290SWQoXCJfb3B0aW9uLVwiLmNvbmNhdChpbmRleCkpLFxuICAgICAgICB0aXRsZTogbGFiZWxcbiAgICAgIH0sIHJlc3QpLCBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJldWlDb21ib0JveE9wdGlvbl9fY29udGVudFdyYXBwZXJcIlxuICAgICAgfSwgcmVuZGVyT3B0aW9uID8gX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgICAgICBjbGFzc05hbWU6IE9QVElPTl9DT05URU5UX0NMQVNTTkFNRVxuICAgICAgfSwgcmVuZGVyT3B0aW9uKG9wdGlvbiwgc2VhcmNoVmFsdWUsICdldWlDb21ib0JveE9wdGlvbl9fcmVuZGVyT3B0aW9uJykpIDogX19fRW1vdGlvbkpTWChFdWlIaWdobGlnaHQsIHtcbiAgICAgICAgc2VhcmNoOiBzZWFyY2hWYWx1ZSxcbiAgICAgICAgY2xhc3NOYW1lOiBPUFRJT05fQ09OVEVOVF9DTEFTU05BTUVcbiAgICAgIH0sIGxhYmVsKSwgb3B0aW9uSXNGb2N1c2VkICYmICFvcHRpb25Jc0Rpc2FibGVkID8gaGl0RW50ZXJCYWRnZSA6IG51bGwpKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdWlDb21ib0JveE9wdGlvbnNMaXN0LCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICAvLyBXYWl0IGEgZnJhbWUsIG90aGVyd2lzZSBtb3ZpbmcgZm9jdXMgZnJvbSBvbmUgY29tYm8gYm94IHRvIGFub3RoZXIgd2lsbCByZXN1bHQgaW4gdGhlIGNsYXNzXG4gICAgICAvLyBiZWluZyByZW1vdmVkIGZyb20gdGhlIGJvZHkuXG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ2V1aUJvZHktaGFzUG9ydGFsQ29udGVudCcpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnVwZGF0ZVBvc2l0aW9uKCk7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy51cGRhdGVQb3NpdGlvbik7IC8vIEZpcmVmb3ggd2lsbCB0cmlnZ2VyIGEgc2Nyb2xsIGV2ZW50IGluIG1hbnkgY29tbW9uIHNpdHVhdGlvbnMgd2hlbiB0aGUgb3B0aW9ucyBsaXN0IGRpdiBpcyBhcHBlbmRlZFxuICAgICAgLy8gdG8gdGhlIERPTTsgaW4gdGVzdGluZyBpdCB3YXMgYWx3YXlzIHdpdGhpbiAxMDBtcywgYnV0IHNldHRpbmcgYSB0aW1lb3V0IGhlcmUgZm9yIDUwMG1zIHRvIGJlIHNhZmVcblxuICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBfdGhpczIuY2xvc2VMaXN0T25TY3JvbGwsIHtcbiAgICAgICAgICBwYXNzaXZlOiB0cnVlLFxuICAgICAgICAgIC8vIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UgYXMgd2Ugd29uJ3QgY2FsbCBwcmV2ZW50RGVmYXVsdFxuICAgICAgICAgIGNhcHR1cmU6IHRydWUgLy8gc2Nyb2xsIGV2ZW50cyBkb24ndCBidWJibGUsIHRoZXkgbXVzdCBiZSBjYXB0dXJlZCBpbnN0ZWFkXG5cbiAgICAgICAgfSk7XG4gICAgICB9LCA1MDApO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnREaWRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcykge1xuICAgICAgdmFyIG9wdGlvbnMgPSBwcmV2UHJvcHMub3B0aW9ucyxcbiAgICAgICAgICBzZWxlY3RlZE9wdGlvbnMgPSBwcmV2UHJvcHMuc2VsZWN0ZWRPcHRpb25zLFxuICAgICAgICAgIHNlYXJjaFZhbHVlID0gcHJldlByb3BzLnNlYXJjaFZhbHVlOyAvLyBXZSBkb24ndCBjb21wYXJlIG1hdGNoaW5nT3B0aW9ucyBiZWNhdXNlIHRoYXQgd2lsbCByZXN1bHQgaW4gYSBsb29wLlxuXG4gICAgICBpZiAoc2VhcmNoVmFsdWUgIT09IHRoaXMucHJvcHMuc2VhcmNoVmFsdWUgfHwgb3B0aW9ucyAhPT0gdGhpcy5wcm9wcy5vcHRpb25zIHx8IHNlbGVjdGVkT3B0aW9ucyAhPT0gdGhpcy5wcm9wcy5zZWxlY3RlZE9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy51cGRhdGVQb3NpdGlvbigpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5saXN0UmVmICYmIHR5cGVvZiB0aGlzLnByb3BzLmFjdGl2ZU9wdGlvbkluZGV4ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnByb3BzLmFjdGl2ZU9wdGlvbkluZGV4ICE9PSBwcmV2UHJvcHMuYWN0aXZlT3B0aW9uSW5kZXgpIHtcbiAgICAgICAgdGhpcy5saXN0UmVmLnNjcm9sbFRvSXRlbSh0aGlzLnByb3BzLmFjdGl2ZU9wdGlvbkluZGV4LCAnYXV0bycpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSgnZXVpQm9keS1oYXNQb3J0YWxDb250ZW50Jyk7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy51cGRhdGVQb3NpdGlvbik7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5jbG9zZUxpc3RPblNjcm9sbCwge1xuICAgICAgICBjYXB0dXJlOiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGRhdGFUZXN0U3ViaiA9IF90aGlzJHByb3BzMlsnZGF0YS10ZXN0LXN1YmonXSxcbiAgICAgICAgICBhY3RpdmVPcHRpb25JbmRleCA9IF90aGlzJHByb3BzMi5hY3RpdmVPcHRpb25JbmRleCxcbiAgICAgICAgICBhcmVBbGxPcHRpb25zU2VsZWN0ZWQgPSBfdGhpcyRwcm9wczIuYXJlQWxsT3B0aW9uc1NlbGVjdGVkLFxuICAgICAgICAgIGN1c3RvbU9wdGlvblRleHQgPSBfdGhpcyRwcm9wczIuY3VzdG9tT3B0aW9uVGV4dCxcbiAgICAgICAgICBmdWxsV2lkdGggPSBfdGhpcyRwcm9wczIuZnVsbFdpZHRoLFxuICAgICAgICAgIGdldFNlbGVjdGVkT3B0aW9uRm9yU2VhcmNoVmFsdWUgPSBfdGhpcyRwcm9wczIuZ2V0U2VsZWN0ZWRPcHRpb25Gb3JTZWFyY2hWYWx1ZSxcbiAgICAgICAgICBpc0xvYWRpbmcgPSBfdGhpcyRwcm9wczIuaXNMb2FkaW5nLFxuICAgICAgICAgIGxpc3RSZWYgPSBfdGhpcyRwcm9wczIubGlzdFJlZixcbiAgICAgICAgICBtYXRjaGluZ09wdGlvbnMgPSBfdGhpcyRwcm9wczIubWF0Y2hpbmdPcHRpb25zLFxuICAgICAgICAgIG9uQ2xvc2VMaXN0ID0gX3RoaXMkcHJvcHMyLm9uQ2xvc2VMaXN0LFxuICAgICAgICAgIG9uQ3JlYXRlT3B0aW9uID0gX3RoaXMkcHJvcHMyLm9uQ3JlYXRlT3B0aW9uLFxuICAgICAgICAgIG9uT3B0aW9uQ2xpY2sgPSBfdGhpcyRwcm9wczIub25PcHRpb25DbGljayxcbiAgICAgICAgICBvbk9wdGlvbkVudGVyS2V5ID0gX3RoaXMkcHJvcHMyLm9uT3B0aW9uRW50ZXJLZXksXG4gICAgICAgICAgb25TY3JvbGwgPSBfdGhpcyRwcm9wczIub25TY3JvbGwsXG4gICAgICAgICAgb3B0aW9uUmVmID0gX3RoaXMkcHJvcHMyLm9wdGlvblJlZixcbiAgICAgICAgICBvcHRpb25zID0gX3RoaXMkcHJvcHMyLm9wdGlvbnMsXG4gICAgICAgICAgX3RoaXMkcHJvcHMyJHBvc2l0aW9uID0gX3RoaXMkcHJvcHMyLnBvc2l0aW9uLFxuICAgICAgICAgIHBvc2l0aW9uID0gX3RoaXMkcHJvcHMyJHBvc2l0aW9uID09PSB2b2lkIDAgPyAnYm90dG9tJyA6IF90aGlzJHByb3BzMiRwb3NpdGlvbixcbiAgICAgICAgICByZW5kZXJPcHRpb24gPSBfdGhpcyRwcm9wczIucmVuZGVyT3B0aW9uLFxuICAgICAgICAgIHJvb3RJZCA9IF90aGlzJHByb3BzMi5yb290SWQsXG4gICAgICAgICAgcm93SGVpZ2h0ID0gX3RoaXMkcHJvcHMyLnJvd0hlaWdodCxcbiAgICAgICAgICBzY3JvbGxUb0luZGV4ID0gX3RoaXMkcHJvcHMyLnNjcm9sbFRvSW5kZXgsXG4gICAgICAgICAgc2VhcmNoVmFsdWUgPSBfdGhpcyRwcm9wczIuc2VhcmNoVmFsdWUsXG4gICAgICAgICAgc2VsZWN0ZWRPcHRpb25zID0gX3RoaXMkcHJvcHMyLnNlbGVjdGVkT3B0aW9ucyxcbiAgICAgICAgICBzaW5nbGVTZWxlY3Rpb24gPSBfdGhpcyRwcm9wczIuc2luZ2xlU2VsZWN0aW9uLFxuICAgICAgICAgIHVwZGF0ZVBvc2l0aW9uID0gX3RoaXMkcHJvcHMyLnVwZGF0ZVBvc2l0aW9uLFxuICAgICAgICAgIHdpZHRoID0gX3RoaXMkcHJvcHMyLndpZHRoLFxuICAgICAgICAgIGRlbGltaXRlciA9IF90aGlzJHByb3BzMi5kZWxpbWl0ZXIsXG4gICAgICAgICAgekluZGV4ID0gX3RoaXMkcHJvcHMyLnpJbmRleCxcbiAgICAgICAgICBzdHlsZSA9IF90aGlzJHByb3BzMi5zdHlsZSxcbiAgICAgICAgICBsaXN0Ym94QXJpYUxhYmVsID0gX3RoaXMkcHJvcHMyLmxpc3Rib3hBcmlhTGFiZWwsXG4gICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wczIsIF9leGNsdWRlZDIpO1xuXG4gICAgICB2YXIgZW1wdHlTdGF0ZUNvbnRlbnQ7XG5cbiAgICAgIGlmIChpc0xvYWRpbmcpIHtcbiAgICAgICAgZW1wdHlTdGF0ZUNvbnRlbnQgPSBfX19FbW90aW9uSlNYKEV1aUZsZXhHcm91cCwge1xuICAgICAgICAgIGd1dHRlclNpemU6IFwic1wiLFxuICAgICAgICAgIGp1c3RpZnlDb250ZW50OiBcImNlbnRlclwiXG4gICAgICAgIH0sIF9fX0Vtb3Rpb25KU1goRXVpRmxleEl0ZW0sIHtcbiAgICAgICAgICBncm93OiBmYWxzZVxuICAgICAgICB9LCBfX19FbW90aW9uSlNYKEV1aUxvYWRpbmdTcGlubmVyLCB7XG4gICAgICAgICAgc2l6ZTogXCJtXCJcbiAgICAgICAgfSkpLCBfX19FbW90aW9uSlNYKEV1aUZsZXhJdGVtLCB7XG4gICAgICAgICAgZ3JvdzogZmFsc2VcbiAgICAgICAgfSwgX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgdG9rZW46IFwiZXVpQ29tYm9Cb3hPcHRpb25zTGlzdC5sb2FkaW5nT3B0aW9uc1wiLFxuICAgICAgICAgIGRlZmF1bHQ6IFwiTG9hZGluZyBvcHRpb25zXCJcbiAgICAgICAgfSkpKTtcbiAgICAgIH0gZWxzZSBpZiAoc2VhcmNoVmFsdWUgJiYgbWF0Y2hpbmdPcHRpb25zICYmIG1hdGNoaW5nT3B0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgaWYgKG9uQ3JlYXRlT3B0aW9uICYmIGdldFNlbGVjdGVkT3B0aW9uRm9yU2VhcmNoVmFsdWUpIHtcbiAgICAgICAgICBpZiAoZGVsaW1pdGVyICYmIHNlYXJjaFZhbHVlLmluY2x1ZGVzKGRlbGltaXRlcikpIHtcbiAgICAgICAgICAgIGVtcHR5U3RhdGVDb250ZW50ID0gX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlDb21ib0JveE9wdGlvbl9fY29udGVudFdyYXBwZXJcIlxuICAgICAgICAgICAgfSwgX19fRW1vdGlvbkpTWChcInBcIiwge1xuICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpQ29tYm9Cb3hPcHRpb25fX2VtcHR5U3RhdGVUZXh0XCJcbiAgICAgICAgICAgIH0sIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgICAgICB0b2tlbjogXCJldWlDb21ib0JveE9wdGlvbnNMaXN0LmRlbGltaXRlck1lc3NhZ2VcIixcbiAgICAgICAgICAgICAgZGVmYXVsdDogXCJBZGQgZWFjaCBpdGVtIHNlcGFyYXRlZCBieSB7ZGVsaW1pdGVyfVwiLFxuICAgICAgICAgICAgICB2YWx1ZXM6IHtcbiAgICAgICAgICAgICAgICBkZWxpbWl0ZXI6IF9fX0Vtb3Rpb25KU1goXCJzdHJvbmdcIiwgbnVsbCwgZGVsaW1pdGVyKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSksIGhpdEVudGVyQmFkZ2UpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgc2VsZWN0ZWRPcHRpb25Gb3JWYWx1ZSA9IGdldFNlbGVjdGVkT3B0aW9uRm9yU2VhcmNoVmFsdWUoc2VhcmNoVmFsdWUsIHNlbGVjdGVkT3B0aW9ucyk7XG5cbiAgICAgICAgICAgIGlmIChzZWxlY3RlZE9wdGlvbkZvclZhbHVlKSB7XG4gICAgICAgICAgICAgIC8vIERpc2FsbG93IGR1cGxpY2F0ZSBjdXN0b20gb3B0aW9ucy5cbiAgICAgICAgICAgICAgZW1wdHlTdGF0ZUNvbnRlbnQgPSBfX19FbW90aW9uSlNYKFwicFwiLCBudWxsLCBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICAgICAgICB0b2tlbjogXCJldWlDb21ib0JveE9wdGlvbnNMaXN0LmFscmVhZHlBZGRlZFwiLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFwie2xhYmVsfSBoYXMgYWxyZWFkeSBiZWVuIGFkZGVkXCIsXG4gICAgICAgICAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgICAgICAgICBsYWJlbDogX19fRW1vdGlvbkpTWChcInN0cm9uZ1wiLCBudWxsLCBzZWxlY3RlZE9wdGlvbkZvclZhbHVlLmxhYmVsKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdmFyIGhpZ2hsaWdodFNlYXJjaFZhbHVlID0gZnVuY3Rpb24gaGlnaGxpZ2h0U2VhcmNoVmFsdWUodGV4dCwgc2VhcmNoVmFsdWUpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVnID0gbmV3IFJlZ0V4cCgvKFxce3NlYXJjaFZhbHVlfSkvLCAnZ2knKTtcbiAgICAgICAgICAgICAgICB2YXIgcGFydHMgPSB0ZXh0LnNwbGl0KHJlZyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJwXCIsIHtcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlDb21ib0JveE9wdGlvbl9fZW1wdHlTdGF0ZVRleHRcIlxuICAgICAgICAgICAgICAgIH0sIHBhcnRzLm1hcChmdW5jdGlvbiAocGFydCwgaWR4KSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gcGFydC5tYXRjaChyZWcpID8gX19fRW1vdGlvbkpTWChcInN0cm9uZ1wiLCB7XG4gICAgICAgICAgICAgICAgICAgIGtleTogaWR4XG4gICAgICAgICAgICAgICAgICB9LCBzZWFyY2hWYWx1ZSkgOiBwYXJ0O1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBlbXB0eVN0YXRlQ29udGVudCA9IF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlDb21ib0JveE9wdGlvbl9fY29udGVudFdyYXBwZXJcIlxuICAgICAgICAgICAgICB9LCBjdXN0b21PcHRpb25UZXh0ID8gaGlnaGxpZ2h0U2VhcmNoVmFsdWUoY3VzdG9tT3B0aW9uVGV4dCwgc2VhcmNoVmFsdWUpIDogX19fRW1vdGlvbkpTWChcInBcIiwge1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlDb21ib0JveE9wdGlvbl9fZW1wdHlTdGF0ZVRleHRcIlxuICAgICAgICAgICAgICB9LCBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICAgICAgICB0b2tlbjogXCJldWlDb21ib0JveE9wdGlvbnNMaXN0LmNyZWF0ZUN1c3RvbU9wdGlvblwiLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFwiQWRkIHtzZWFyY2hWYWx1ZX0gYXMgYSBjdXN0b20gb3B0aW9uXCIsXG4gICAgICAgICAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgICAgICAgICBzZWFyY2hWYWx1ZTogX19fRW1vdGlvbkpTWChcInN0cm9uZ1wiLCBudWxsLCBzZWFyY2hWYWx1ZSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pKSwgaGl0RW50ZXJCYWRnZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVtcHR5U3RhdGVDb250ZW50ID0gX19fRW1vdGlvbkpTWChcInBcIiwgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgICB0b2tlbjogXCJldWlDb21ib0JveE9wdGlvbnNMaXN0Lm5vTWF0Y2hpbmdPcHRpb25zXCIsXG4gICAgICAgICAgICBkZWZhdWx0OiBcIntzZWFyY2hWYWx1ZX0gZG9lc24ndCBtYXRjaCBhbnkgb3B0aW9uc1wiLFxuICAgICAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgICAgIHNlYXJjaFZhbHVlOiBfX19FbW90aW9uSlNYKFwic3Ryb25nXCIsIG51bGwsIHNlYXJjaFZhbHVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghb3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgZW1wdHlTdGF0ZUNvbnRlbnQgPSBfX19FbW90aW9uSlNYKFwicFwiLCBudWxsLCBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICB0b2tlbjogXCJldWlDb21ib0JveE9wdGlvbnNMaXN0Lm5vQXZhaWxhYmxlT3B0aW9uc1wiLFxuICAgICAgICAgIGRlZmF1bHQ6IFwiVGhlcmUgYXJlbid0IGFueSBvcHRpb25zIGF2YWlsYWJsZVwiXG4gICAgICAgIH0pKTtcbiAgICAgIH0gZWxzZSBpZiAoYXJlQWxsT3B0aW9uc1NlbGVjdGVkKSB7XG4gICAgICAgIGVtcHR5U3RhdGVDb250ZW50ID0gX19fRW1vdGlvbkpTWChcInBcIiwgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgdG9rZW46IFwiZXVpQ29tYm9Cb3hPcHRpb25zTGlzdC5hbGxPcHRpb25zU2VsZWN0ZWRcIixcbiAgICAgICAgICBkZWZhdWx0OiBcIllvdSd2ZSBzZWxlY3RlZCBhbGwgYXZhaWxhYmxlIG9wdGlvbnNcIlxuICAgICAgICB9KSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBlbXB0eVN0YXRlID0gZW1wdHlTdGF0ZUNvbnRlbnQgPyBfX19FbW90aW9uSlNYKEV1aVRleHQsIHtcbiAgICAgICAgc2l6ZTogXCJ4c1wiLFxuICAgICAgICBjbGFzc05hbWU6IFwiZXVpQ29tYm9Cb3hPcHRpb25zTGlzdF9fZW1wdHlcIlxuICAgICAgfSwgZW1wdHlTdGF0ZUNvbnRlbnQpIDogdW5kZWZpbmVkO1xuICAgICAgdmFyIG51bVZpc2libGVPcHRpb25zID0gbWF0Y2hpbmdPcHRpb25zLmxlbmd0aCA8IDcgPyBtYXRjaGluZ09wdGlvbnMubGVuZ3RoIDogNztcbiAgICAgIHZhciBoZWlnaHQgPSBudW1WaXNpYmxlT3B0aW9ucyAqIChyb3dIZWlnaHQgKyAxKTsgLy8gQWRkIG9uZSBmb3IgdGhlIGJvcmRlclxuICAgICAgLy8gYm91bmRlZCBieSBtYXgtaGVpZ2h0IG9mIGV1aUNvbWJvQm94T3B0aW9uc0xpc3RfX3Jvd1dyYXBcblxuICAgICAgdmFyIGJvdW5kZWRIZWlnaHQgPSBoZWlnaHQgPiAyMDAgPyAyMDAgOiBoZWlnaHQ7XG5cbiAgICAgIHZhciBvcHRpb25zTGlzdCA9IF9fX0Vtb3Rpb25KU1goRml4ZWRTaXplTGlzdCwge1xuICAgICAgICBoZWlnaHQ6IGJvdW5kZWRIZWlnaHQsXG4gICAgICAgIG9uU2Nyb2xsOiBvblNjcm9sbCxcbiAgICAgICAgaXRlbUNvdW50OiBtYXRjaGluZ09wdGlvbnMubGVuZ3RoLFxuICAgICAgICBpdGVtU2l6ZTogcm93SGVpZ2h0LFxuICAgICAgICBpdGVtRGF0YTogbWF0Y2hpbmdPcHRpb25zLFxuICAgICAgICByZWY6IHRoaXMuc2V0TGlzdFJlZixcbiAgICAgICAgaW5uZXJSZWY6IHRoaXMuc2V0TGlzdEJveFJlZixcbiAgICAgICAgd2lkdGg6IHdpZHRoXG4gICAgICB9LCB0aGlzLkxpc3RSb3cpO1xuICAgICAgLyoqXG4gICAgICAgKiBSZXVzaW5nIHRoZSBFdWlQb3BvdmVyX19wYW5lbCBjbGFzc2VzIHRvIGhlbHAgd2l0aCBjb25zaXN0ZW5jeS9tYWludGVuYW5jZS5cbiAgICAgICAqIEJ1dCB0aGlzIHNob3VsZCByZWFsbHkgYmUgY29udmVydGVkIHRvIHVzZXIgdGhlIHBvcG92ZXIgY29tcG9uZW50LlxuICAgICAgICovXG5cblxuICAgICAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlDb21ib0JveE9wdGlvbnNMaXN0Jyk7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlQb3BvdmVyUGFuZWwsIF9leHRlbmRzKHtcbiAgICAgICAgcGFkZGluZ1NpemU6IFwibm9uZVwiLFxuICAgICAgICBoYXNTaGFkb3c6IGZhbHNlLFxuICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgIHBhbmVsUmVmOiB0aGlzLmxpc3RSZWZDYWxsYmFjayxcbiAgICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcImNvbWJvQm94T3B0aW9uc0xpc3QgXCIuY29uY2F0KGRhdGFUZXN0U3ViaiksXG4gICAgICAgIHN0eWxlOiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHN0eWxlKSwge30sIHtcbiAgICAgICAgICB6SW5kZXg6IHpJbmRleFxuICAgICAgICB9KSxcbiAgICAgICAgaXNPcGVuOiB0cnVlLFxuICAgICAgICBpc0F0dGFjaGVkOiB0cnVlLFxuICAgICAgICBwb3NpdGlvbjogcG9zaXRpb25cbiAgICAgIH0sIHJlc3QpLCBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcImV1aUNvbWJvQm94T3B0aW9uc0xpc3RfX3Jvd1dyYXBcIlxuICAgICAgfSwgZW1wdHlTdGF0ZSB8fCBvcHRpb25zTGlzdCkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlDb21ib0JveE9wdGlvbnNMaXN0O1xufShDb21wb25lbnQpO1xuXG5fZGVmaW5lUHJvcGVydHkoRXVpQ29tYm9Cb3hPcHRpb25zTGlzdCwgXCJkZWZhdWx0UHJvcHNcIiwge1xuICAnZGF0YS10ZXN0LXN1YmonOiAnJyxcbiAgcm93SGVpZ2h0OiAyOSAvLyByb3cgaGVpZ2h0IG9mIGRlZmF1bHQgb3B0aW9uIHJlbmRlcmVyXG5cbn0pO1xuXG5FdWlDb21ib0JveE9wdGlvbnNMaXN0LnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWRdKSxcbiAgYWN0aXZlT3B0aW9uSW5kZXg6IFByb3BUeXBlcy5udW1iZXIsXG4gIGFyZUFsbE9wdGlvbnNTZWxlY3RlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGxpc3Rib3hBcmlhTGFiZWw6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICAgICAqIENyZWF0ZXMgYSBjdXN0b20gdGV4dCBvcHRpb24uIFlvdSBjYW4gdXNlIGB7c2VhcmNoVmFsdWV9YCBpbnNpZGUgeW91ciBzdHJpbmcgdG8gYmV0dGVyIGN1c3RvbWl6ZSB5b3VyIHRleHQuXG4gICAgICAgKiBJdCB3b24ndCBzaG93IGlmIHRoZXJlJ3Mgbm8gb25DcmVhdGVPcHRpb24uXG4gICAgICAgKi9cbiAgY3VzdG9tT3B0aW9uVGV4dDogUHJvcFR5cGVzLnN0cmluZyxcbiAgZnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbCxcbiAgZ2V0U2VsZWN0ZWRPcHRpb25Gb3JTZWFyY2hWYWx1ZTogUHJvcFR5cGVzLmZ1bmMsXG4gIGlzTG9hZGluZzogUHJvcFR5cGVzLmJvb2wsXG4gIGxpc3RSZWY6IFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCxcbiAgbWF0Y2hpbmdPcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGlzR3JvdXBMYWJlbE9wdGlvbjogUHJvcFR5cGVzLmJvb2wsXG4gICAgbGFiZWw6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBrZXk6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgb3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIGlzR3JvdXBMYWJlbE9wdGlvbjogUHJvcFR5cGVzLmJvb2wsXG4gICAgICBsYWJlbDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgICAga2V5OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgb3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkKSxcbiAgICAgIHZhbHVlOiBQcm9wVHlwZXMuYW55LFxuICAgICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbiAgICB9KS5pc1JlcXVpcmVkKSxcbiAgICB2YWx1ZTogUHJvcFR5cGVzLmFueSxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLmlzUmVxdWlyZWQpLmlzUmVxdWlyZWQsXG4gIG9uQ2xvc2VMaXN0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBvbkNyZWF0ZU9wdGlvbjogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uT3B0aW9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICBvbk9wdGlvbkVudGVyS2V5OiBQcm9wVHlwZXMuZnVuYyxcbiAgb25TY3JvbGw6IFByb3BUeXBlcy5hbnksXG4gIG9wdGlvblJlZjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICAgICAqIEFycmF5IG9mIEV1aUNvbWJvQm94T3B0aW9uT3B0aW9uIG9iamVjdHMuIFNlZSAjRXVpQ29tYm9Cb3hPcHRpb25PcHRpb25cbiAgICAgICAqL1xuICBvcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGlzR3JvdXBMYWJlbE9wdGlvbjogUHJvcFR5cGVzLmJvb2wsXG4gICAgbGFiZWw6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBrZXk6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgb3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIGlzR3JvdXBMYWJlbE9wdGlvbjogUHJvcFR5cGVzLmJvb2wsXG4gICAgICBsYWJlbDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgICAga2V5OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgb3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkKSxcbiAgICAgIHZhbHVlOiBQcm9wVHlwZXMuYW55LFxuICAgICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbiAgICB9KS5pc1JlcXVpcmVkKSxcbiAgICB2YWx1ZTogUHJvcFR5cGVzLmFueSxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLmlzUmVxdWlyZWQpLmlzUmVxdWlyZWQsXG4gIHBvc2l0aW9uOiBQcm9wVHlwZXMub25lT2YoW1widG9wXCIsIFwiYm90dG9tXCJdKSxcbiAgcmVuZGVyT3B0aW9uOiBQcm9wVHlwZXMuZnVuYyxcbiAgcm9vdElkOiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsXG4gIHJvd0hlaWdodDogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuICBzY3JvbGxUb0luZGV4OiBQcm9wVHlwZXMubnVtYmVyLFxuICBzZWFyY2hWYWx1ZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBzZWxlY3RlZE9wdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaXNHcm91cExhYmVsT3B0aW9uOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBsYWJlbDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIGtleTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBvcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgaXNHcm91cExhYmVsT3B0aW9uOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgIGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgICBrZXk6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBvcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQpLFxuICAgICAgdmFsdWU6IFByb3BUeXBlcy5hbnksXG4gICAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZ1xuICAgIH0pLmlzUmVxdWlyZWQpLFxuICAgIHZhbHVlOiBQcm9wVHlwZXMuYW55LFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbiAgfSkuaXNSZXF1aXJlZCkuaXNSZXF1aXJlZCxcbiAgdXBkYXRlUG9zaXRpb246IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIHdpZHRoOiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gIHNpbmdsZVNlbGVjdGlvbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBhc1BsYWluVGV4dDogUHJvcFR5cGVzLmJvb2xcbiAgfSkuaXNSZXF1aXJlZF0pLFxuICBkZWxpbWl0ZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHpJbmRleDogUHJvcFR5cGVzLm51bWJlclxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwic2VhcmNoXCIsIFwic3RyaWN0XCIsIFwiaGlnaGxpZ2h0QWxsXCIsIFwiaGFzU2NyZWVuUmVhZGVySGVscFRleHRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgRnJhZ21lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBFdWlNYXJrIH0gZnJvbSAnLi4vbWFyayc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgaGlnaGxpZ2h0ID0gZnVuY3Rpb24gaGlnaGxpZ2h0KHNlYXJjaFN1YmplY3QsIHNlYXJjaFZhbHVlLCBpc1N0cmljdCwgaGlnaGxpZ2h0QWxsLCBoYXNTY3JlZW5SZWFkZXJIZWxwVGV4dCkge1xuICBpZiAoIXNlYXJjaFZhbHVlKSB7XG4gICAgcmV0dXJuIHNlYXJjaFN1YmplY3Q7XG4gIH1cblxuICBpZiAoIXNlYXJjaFN1YmplY3QpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChoaWdobGlnaHRBbGwpIHtcbiAgICB2YXIgY2h1bmtzID0gZ2V0SGlnaHRsaWdodFdvcmRzKHNlYXJjaFN1YmplY3QsIHNlYXJjaFZhbHVlLCBpc1N0cmljdCk7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRnJhZ21lbnQsIG51bGwsIGNodW5rcy5tYXAoZnVuY3Rpb24gKGNodW5rKSB7XG4gICAgICB2YXIgZW5kID0gY2h1bmsuZW5kLFxuICAgICAgICAgIGhpZ2hsaWdodCA9IGNodW5rLmhpZ2hsaWdodCxcbiAgICAgICAgICBzdGFydCA9IGNodW5rLnN0YXJ0O1xuICAgICAgdmFyIHZhbHVlID0gc2VhcmNoU3ViamVjdC5zdWJzdHIoc3RhcnQsIGVuZCAtIHN0YXJ0KTtcblxuICAgICAgaWYgKGhpZ2hsaWdodCkge1xuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlNYXJrLCB7XG4gICAgICAgICAga2V5OiBzdGFydCxcbiAgICAgICAgICBoYXNTY3JlZW5SZWFkZXJIZWxwVGV4dDogaGFzU2NyZWVuUmVhZGVySGVscFRleHRcbiAgICAgICAgfSwgdmFsdWUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSkpO1xuICB9XG5cbiAgdmFyIG5vcm1hbGl6ZWRTZWFyY2hTdWJqZWN0ID0gaXNTdHJpY3QgPyBzZWFyY2hTdWJqZWN0IDogc2VhcmNoU3ViamVjdC50b0xvd2VyQ2FzZSgpO1xuICB2YXIgbm9ybWFsaXplZFNlYXJjaFZhbHVlID0gaXNTdHJpY3QgPyBzZWFyY2hWYWx1ZSA6IHNlYXJjaFZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gIHZhciBpbmRleE9mTWF0Y2ggPSBub3JtYWxpemVkU2VhcmNoU3ViamVjdC5pbmRleE9mKG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSk7XG5cbiAgaWYgKGluZGV4T2ZNYXRjaCA9PT0gLTEpIHtcbiAgICByZXR1cm4gc2VhcmNoU3ViamVjdDtcbiAgfVxuXG4gIHZhciBwcmVNYXRjaCA9IHNlYXJjaFN1YmplY3Quc3Vic3RyKDAsIGluZGV4T2ZNYXRjaCk7XG4gIHZhciBtYXRjaCA9IHNlYXJjaFN1YmplY3Quc3Vic3RyKGluZGV4T2ZNYXRjaCwgc2VhcmNoVmFsdWUubGVuZ3RoKTtcbiAgdmFyIHBvc3RNYXRjaCA9IHNlYXJjaFN1YmplY3Quc3Vic3RyKGluZGV4T2ZNYXRjaCArIHNlYXJjaFZhbHVlLmxlbmd0aCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEZyYWdtZW50LCBudWxsLCBwcmVNYXRjaCwgX19fRW1vdGlvbkpTWChFdWlNYXJrLCB7XG4gICAgaGFzU2NyZWVuUmVhZGVySGVscFRleHQ6IGhhc1NjcmVlblJlYWRlckhlbHBUZXh0XG4gIH0sIG1hdGNoKSwgcG9zdE1hdGNoKTtcbn07XG5cbnZhciBnZXRIaWdodGxpZ2h0V29yZHMgPSBmdW5jdGlvbiBnZXRIaWdodGxpZ2h0V29yZHMoc2VhcmNoU3ViamVjdCwgc2VhcmNoVmFsdWUsIGlzU3RyaWN0KSB7XG4gIHZhciByZWdleCA9IG5ldyBSZWdFeHAoc2VhcmNoVmFsdWUsIGlzU3RyaWN0ID8gJ2cnIDogJ2dpJyk7XG4gIHZhciBtYXRjaGVzID0gW107XG4gIHZhciBtYXRjaDtcblxuICB3aGlsZSAoKG1hdGNoID0gcmVnZXguZXhlYyhzZWFyY2hTdWJqZWN0KSkgIT09IG51bGwpIHtcbiAgICBtYXRjaGVzLnB1c2goe1xuICAgICAgc3RhcnQ6IG1hdGNoLmluZGV4LFxuICAgICAgZW5kOiAobWF0Y2guaW5kZXggfHwgMCkgKyBtYXRjaFswXS5sZW5ndGhcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBmaWxsSW5DaHVua3MobWF0Y2hlcywgc2VhcmNoU3ViamVjdC5sZW5ndGgpO1xufTtcblxudmFyIGZpbGxJbkNodW5rcyA9IGZ1bmN0aW9uIGZpbGxJbkNodW5rcyhjaHVua3NUb0hpZ2hsaWdodCwgdG90YWxMZW5ndGgpIHtcbiAgdmFyIGFsbENodW5rcyA9IFtdO1xuXG4gIHZhciBhcHBlbmQgPSBmdW5jdGlvbiBhcHBlbmQoc3RhcnQsIGVuZCwgaGlnaGxpZ2h0KSB7XG4gICAgaWYgKGVuZCAtIHN0YXJ0ID4gMCkge1xuICAgICAgYWxsQ2h1bmtzLnB1c2goe1xuICAgICAgICBzdGFydDogc3RhcnQsXG4gICAgICAgIGVuZDogZW5kLFxuICAgICAgICBoaWdobGlnaHQ6IGhpZ2hsaWdodFxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIGlmIChjaHVua3NUb0hpZ2hsaWdodC5sZW5ndGggPT09IDApIHtcbiAgICBhcHBlbmQoMCwgdG90YWxMZW5ndGgsIGZhbHNlKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbGFzdEluZGV4ID0gMDtcbiAgICBjaHVua3NUb0hpZ2hsaWdodC5mb3JFYWNoKGZ1bmN0aW9uIChjaHVuaykge1xuICAgICAgYXBwZW5kKGxhc3RJbmRleCwgY2h1bmsuc3RhcnQsIGZhbHNlKTtcbiAgICAgIGFwcGVuZChjaHVuay5zdGFydCwgY2h1bmsuZW5kLCB0cnVlKTtcbiAgICAgIGxhc3RJbmRleCA9IGNodW5rLmVuZDtcbiAgICB9KTtcbiAgICBhcHBlbmQobGFzdEluZGV4LCB0b3RhbExlbmd0aCwgZmFsc2UpO1xuICB9XG5cbiAgcmV0dXJuIGFsbENodW5rcztcbn07XG5cbmV4cG9ydCB2YXIgRXVpSGlnaGxpZ2h0ID0gZnVuY3Rpb24gRXVpSGlnaGxpZ2h0KF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgc2VhcmNoID0gX3JlZi5zZWFyY2gsXG4gICAgICBfcmVmJHN0cmljdCA9IF9yZWYuc3RyaWN0LFxuICAgICAgc3RyaWN0ID0gX3JlZiRzdHJpY3QgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRzdHJpY3QsXG4gICAgICBfcmVmJGhpZ2hsaWdodEFsbCA9IF9yZWYuaGlnaGxpZ2h0QWxsLFxuICAgICAgaGlnaGxpZ2h0QWxsID0gX3JlZiRoaWdobGlnaHRBbGwgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRoaWdobGlnaHRBbGwsXG4gICAgICBfcmVmJGhhc1NjcmVlblJlYWRlckggPSBfcmVmLmhhc1NjcmVlblJlYWRlckhlbHBUZXh0LFxuICAgICAgaGFzU2NyZWVuUmVhZGVySGVscFRleHQgPSBfcmVmJGhhc1NjcmVlblJlYWRlckggPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJGhhc1NjcmVlblJlYWRlckgsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZVxuICB9LCByZXN0KSwgaGlnaGxpZ2h0KGNoaWxkcmVuLCBzZWFyY2gsIHN0cmljdCwgaGlnaGxpZ2h0QWxsLCBoYXNTY3JlZW5SZWFkZXJIZWxwVGV4dCkpO1xufTtcbkV1aUhpZ2hsaWdodC5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgICAqIHN0cmluZyB0byBoaWdobGlnaHQgYXMgdGhpcyBjb21wb25lbnQncyBjb250ZW50XG4gICAgICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICAgICAqIFdoYXQgdG8gc2VhcmNoIGZvclxuICAgICAgICovXG4gIHNlYXJjaDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgICAgICogU2hvdWxkIHRoZSBzZWFyY2ggYmUgc3RyaWN0IG9yIG5vdFxuICAgICAgICovXG4gIHN0cmljdDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICAgKiBTaG91bGQgaGlnaGxpZ2h0IGFsbCBtYXRjaGVzXG4gICAgICAgKi9cbiAgaGlnaGxpZ2h0QWxsOiBQcm9wVHlwZXMuYm9vbFxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiaGFzU2NyZWVuUmVhZGVySGVscFRleHRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VFdWlJMThuIH0gZnJvbSAnLi4vaTE4bic7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGV1aU1hcmtTdHlsZXMgfSBmcm9tICcuL21hcmsuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aU1hcmsgPSBmdW5jdGlvbiBFdWlNYXJrKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgX3JlZiRoYXNTY3JlZW5SZWFkZXJIID0gX3JlZi5oYXNTY3JlZW5SZWFkZXJIZWxwVGV4dCxcbiAgICAgIGhhc1NjcmVlblJlYWRlckhlbHBUZXh0ID0gX3JlZiRoYXNTY3JlZW5SZWFkZXJIID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRoYXNTY3JlZW5SZWFkZXJILFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciB1c2VUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHZhciBoaWdobGlnaHRTdGFydCA9IHVzZUV1aUkxOG4oJ2V1aU1hcmsuaGlnaGxpZ2h0U3RhcnQnLCAnaGlnaGxpZ2h0IHN0YXJ0Jyk7XG4gIHZhciBoaWdobGlnaHRFbmQgPSB1c2VFdWlJMThuKCdldWlNYXJrLmhpZ2hsaWdodEVuZCcsICdoaWdobGlnaHQgZW5kJyk7XG4gIHZhciBzdHlsZXMgPSBldWlNYXJrU3R5bGVzKHVzZVRoZW1lLCB7XG4gICAgaGFzU2NyZWVuUmVhZGVySGVscFRleHQ6IGhhc1NjcmVlblJlYWRlckhlbHBUZXh0LFxuICAgIGhpZ2hsaWdodFN0YXJ0OiBoaWdobGlnaHRTdGFydCxcbiAgICBoaWdobGlnaHRFbmQ6IGhpZ2hsaWdodEVuZFxuICB9KTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlNYXJrJywgY2xhc3NOYW1lKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJtYXJrXCIsIF9leHRlbmRzKHtcbiAgICBjc3M6IFtzdHlsZXMsIFwiO2xhYmVsOkV1aU1hcms7XCJdLFxuICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICB9LCByZXN0KSwgY2hpbGRyZW4pO1xufTtcbkV1aU1hcmsucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICAgKiBTZXQgdG8gYGZhbHNlYCB0byByZW1vdmUgdGhlIENTUyA6YmVmb3JlIGFuZCA6YWZ0ZXJcbiAgICAgICAqIHNjcmVlbiByZWFkZXIgaGVscGVyIHRleHRcbiAgICAgICAqL1xuICBoYXNTY3JlZW5SZWFkZXJIZWxwVGV4dDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICAgKiBSZWFjdE5vZGUgdG8gcmVuZGVyIGFzIHRoaXMgY29tcG9uZW50J3MgY29udGVudFxuICAgICAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkXG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgdHJhbnNwYXJlbnRpemUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBldWlTY3JlZW5SZWFkZXJPbmx5IH0gZnJvbSAnLi4vYWNjZXNzaWJpbGl0eSc7XG5leHBvcnQgdmFyIGV1aU1hcmtTdHlsZXMgPSBmdW5jdGlvbiBldWlNYXJrU3R5bGVzKF9yZWYsIF9yZWYyKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYuZXVpVGhlbWUsXG4gICAgICBjb2xvck1vZGUgPSBfcmVmLmNvbG9yTW9kZTtcbiAgdmFyIGhhc1NjcmVlblJlYWRlckhlbHBUZXh0ID0gX3JlZjIuaGFzU2NyZWVuUmVhZGVySGVscFRleHQsXG4gICAgICBoaWdobGlnaHRTdGFydCA9IF9yZWYyLmhpZ2hsaWdodFN0YXJ0LFxuICAgICAgaGlnaGxpZ2h0RW5kID0gX3JlZjIuaGlnaGxpZ2h0RW5kO1xuICAvLyBUT0RPOiBXYXMgJGV1aUZvY3VzQmFja2dyb3VuZENvbG9yXG4gIHZhciB0cmFuc3BhcmVuY3kgPSB7XG4gICAgTElHSFQ6IDAuMSxcbiAgICBEQVJLOiAwLjNcbiAgfTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9jc3MoXCJiYWNrZ3JvdW5kLWNvbG9yOlwiLCB0cmFuc3BhcmVudGl6ZShldWlUaGVtZS5jb2xvcnMucHJpbWFyeSwgdHJhbnNwYXJlbmN5W2NvbG9yTW9kZV0pLCBcIjtmb250LXdlaWdodDpcIiwgZXVpVGhlbWUuZm9udC53ZWlnaHQuYm9sZCwgXCI7Y29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy50ZXh0LCBcIjtcIiwgaGFzU2NyZWVuUmVhZGVySGVscFRleHQgPT09IHRydWUgJiYgXCJcXG4gICAgICAmOmJlZm9yZSxcXG4gICAgICAmOmFmdGVyIHtcXG4gICAgICAgIFwiLmNvbmNhdChldWlTY3JlZW5SZWFkZXJPbmx5KCksIFwiXFxuICAgICAgfVxcblxcbiAgICAgICY6YmVmb3JlIHtcXG4gICAgICAgIGNvbnRlbnQ6ICcgW1wiKS5jb25jYXQoaGlnaGxpZ2h0U3RhcnQsIFwiXSAnO1xcbiAgICAgIH1cXG5cXG4gICAgICAmOmFmdGVyIHtcXG4gICAgICAgIGNvbnRlbnQ6ICcgW1wiKS5jb25jYXQoaGlnaGxpZ2h0RW5kLCBcIl0gJztcXG4gICAgICB9XFxuICAgIFwiKSwgXCI7O2xhYmVsOmV1aU1hcmtTdHlsZXM7XCIpO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlDb21ib0JveFRpdGxlID0gZnVuY3Rpb24gRXVpQ29tYm9Cb3hUaXRsZShfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW47XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpQ29tYm9Cb3hUaXRsZVwiXG4gIH0sIGNoaWxkcmVuKTtcbn07XG5FdWlDb21ib0JveFRpdGxlLnByb3BUeXBlcyA9IHt9OyIsICJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbnZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImRpc2FibGVkXCIsIFwiY2hlY2tlZFwiLCBcImlzRm9jdXNlZFwiLCBcInNob3dJY29uc1wiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBFdWlGbGV4R3JvdXAsIEV1aUZsZXhJdGVtIH0gZnJvbSAnLi4vZmxleCc7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vaWNvbic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgcmVzb2x2ZUljb25BbmRDb2xvciA9IGZ1bmN0aW9uIHJlc29sdmVJY29uQW5kQ29sb3IoY2hlY2tlZCkge1xuICBpZiAoIWNoZWNrZWQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWNvbjogJ2VtcHR5J1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gY2hlY2tlZCA9PT0gJ29uJyA/IHtcbiAgICBpY29uOiAnY2hlY2snLFxuICAgIGNvbG9yOiAndGV4dCdcbiAgfSA6IHtcbiAgICBpY29uOiAnY3Jvc3MnLFxuICAgIGNvbG9yOiAndGV4dCdcbiAgfTtcbn07XG5cbmV4cG9ydCB2YXIgRXVpRmlsdGVyU2VsZWN0SXRlbSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoRXVpRmlsdGVyU2VsZWN0SXRlbSwgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihFdWlGaWx0ZXJTZWxlY3RJdGVtKTtcblxuICBmdW5jdGlvbiBFdWlGaWx0ZXJTZWxlY3RJdGVtKCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlGaWx0ZXJTZWxlY3RJdGVtKTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsLmFwcGx5KF9zdXBlciwgW3RoaXNdLmNvbmNhdChhcmdzKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiYnV0dG9uUmVmXCIsIG51bGwpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInN0YXRlXCIsIHtcbiAgICAgIGhhc0ZvY3VzOiBmYWxzZVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImZvY3VzXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChfdGhpcy5idXR0b25SZWYpIHtcbiAgICAgICAgX3RoaXMuYnV0dG9uUmVmLmZvY3VzKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFzRm9jdXNcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzLnN0YXRlLmhhc0ZvY3VzO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEV1aUZpbHRlclNlbGVjdEl0ZW0sIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzLmNoaWxkcmVuLFxuICAgICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzLmNsYXNzTmFtZSxcbiAgICAgICAgICBkaXNhYmxlZCA9IF90aGlzJHByb3BzLmRpc2FibGVkLFxuICAgICAgICAgIGNoZWNrZWQgPSBfdGhpcyRwcm9wcy5jaGVja2VkLFxuICAgICAgICAgIGlzRm9jdXNlZCA9IF90aGlzJHByb3BzLmlzRm9jdXNlZCxcbiAgICAgICAgICBzaG93SWNvbnMgPSBfdGhpcyRwcm9wcy5zaG93SWNvbnMsXG4gICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wcywgX2V4Y2x1ZGVkKTtcblxuICAgICAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlGaWx0ZXJTZWxlY3RJdGVtJywge1xuICAgICAgICAnZXVpRmlsdGVyU2VsZWN0SXRlbS1pc0ZvY3VzZWQnOiBpc0ZvY3VzZWRcbiAgICAgIH0sIGNsYXNzTmFtZSk7XG4gICAgICB2YXIgaWNvbk5vZGU7XG5cbiAgICAgIGlmIChzaG93SWNvbnMpIHtcbiAgICAgICAgdmFyIF9yZXNvbHZlSWNvbkFuZENvbG9yID0gcmVzb2x2ZUljb25BbmRDb2xvcihjaGVja2VkKSxcbiAgICAgICAgICAgIGljb24gPSBfcmVzb2x2ZUljb25BbmRDb2xvci5pY29uLFxuICAgICAgICAgICAgY29sb3IgPSBfcmVzb2x2ZUljb25BbmRDb2xvci5jb2xvcjtcblxuICAgICAgICBpY29uTm9kZSA9IF9fX0Vtb3Rpb25KU1goRXVpRmxleEl0ZW0sIHtcbiAgICAgICAgICBncm93OiBmYWxzZVxuICAgICAgICB9LCBfX19FbW90aW9uSlNYKEV1aUljb24sIHtcbiAgICAgICAgICBjb2xvcjogY29sb3IsXG4gICAgICAgICAgdHlwZTogaWNvblxuICAgICAgICB9KSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwiYnV0dG9uXCIsIF9leHRlbmRzKHtcbiAgICAgICAgcmVmOiBmdW5jdGlvbiByZWYoX3JlZikge1xuICAgICAgICAgIHJldHVybiBfdGhpczIuYnV0dG9uUmVmID0gX3JlZjtcbiAgICAgICAgfSxcbiAgICAgICAgcm9sZTogXCJvcHRpb25cIixcbiAgICAgICAgdHlwZTogXCJidXR0b25cIixcbiAgICAgICAgXCJhcmlhLXNlbGVjdGVkXCI6IGlzRm9jdXNlZCxcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgICAgIFwiYXJpYS1kaXNhYmxlZFwiOiBkaXNhYmxlZFxuICAgICAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goRXVpRmxleEdyb3VwLCB7XG4gICAgICAgIGFsaWduSXRlbXM6IFwiY2VudGVyXCIsXG4gICAgICAgIGd1dHRlclNpemU6IFwic1wiLFxuICAgICAgICBjb21wb25lbnQ6IFwic3BhblwiLFxuICAgICAgICByZXNwb25zaXZlOiBmYWxzZVxuICAgICAgfSwgaWNvbk5vZGUsIF9fX0Vtb3Rpb25KU1goRXVpRmxleEl0ZW0sIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcImV1aUZpbHRlclNlbGVjdEl0ZW1fX2NvbnRlbnRcIixcbiAgICAgICAgY29tcG9uZW50OiBcInNwYW5cIlxuICAgICAgfSwgY2hpbGRyZW4pKSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEV1aUZpbHRlclNlbGVjdEl0ZW07XG59KENvbXBvbmVudCk7XG5cbl9kZWZpbmVQcm9wZXJ0eShFdWlGaWx0ZXJTZWxlY3RJdGVtLCBcImRlZmF1bHRQcm9wc1wiLCB7XG4gIHNob3dJY29uczogdHJ1ZVxufSk7XG5cbkV1aUZpbHRlclNlbGVjdEl0ZW0ucHJvcFR5cGVzID0ge1xuICBjaGVja2VkOiBQcm9wVHlwZXMub25lT2YoW1wib25cIiwgXCJvZmZcIl0pLFxuICBzaG93SWNvbnM6IFByb3BUeXBlcy5ib29sLFxuICBpc0ZvY3VzZWQ6IFByb3BUeXBlcy5ib29sLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbn07IiwgImZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHsgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHsgaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgaXRlcltTeW1ib2wuaXRlcmF0b3JdICE9IG51bGwgfHwgaXRlcltcIkBAaXRlcmF0b3JcIl0gIT0gbnVsbCkgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkoYXJyKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmV4cG9ydCB2YXIgZmxhdHRlbk9wdGlvbkdyb3VwcyA9IGZ1bmN0aW9uIGZsYXR0ZW5PcHRpb25Hcm91cHMob3B0aW9uc09yR3JvdXBzKSB7XG4gIHJldHVybiBvcHRpb25zT3JHcm91cHMucmVkdWNlKGZ1bmN0aW9uIChvcHRpb25zLCBvcHRpb25Pckdyb3VwKSB7XG4gICAgaWYgKG9wdGlvbk9yR3JvdXAub3B0aW9ucykge1xuICAgICAgb3B0aW9ucyA9IG9wdGlvbnMuY29uY2F0KG9wdGlvbk9yR3JvdXAub3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbnMucHVzaChvcHRpb25Pckdyb3VwKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3B0aW9ucztcbiAgfSwgW10pO1xufTtcbmV4cG9ydCB2YXIgZ2V0U2VsZWN0ZWRPcHRpb25Gb3JTZWFyY2hWYWx1ZSA9IGZ1bmN0aW9uIGdldFNlbGVjdGVkT3B0aW9uRm9yU2VhcmNoVmFsdWUoc2VhcmNoVmFsdWUsIHNlbGVjdGVkT3B0aW9ucywgb3B0aW9uS2V5KSB7XG4gIHZhciBub3JtYWxpemVkU2VhcmNoVmFsdWUgPSBzZWFyY2hWYWx1ZS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gc2VsZWN0ZWRPcHRpb25zLmZpbmQoZnVuY3Rpb24gKG9wdGlvbikge1xuICAgIHJldHVybiBvcHRpb24ubGFiZWwudG9Mb3dlckNhc2UoKSA9PT0gbm9ybWFsaXplZFNlYXJjaFZhbHVlICYmICghb3B0aW9uS2V5IHx8IG9wdGlvbi5rZXkgPT09IG9wdGlvbktleSk7XG4gIH0pO1xufTtcblxudmFyIGNvbGxlY3RNYXRjaGluZ09wdGlvbiA9IGZ1bmN0aW9uIGNvbGxlY3RNYXRjaGluZ09wdGlvbihhY2N1bXVsYXRvciwgb3B0aW9uLCBzZWxlY3RlZE9wdGlvbnMsIG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSwgaXNQcmVGaWx0ZXJlZCwgc2hvd1ByZXZTZWxlY3RlZCkge1xuICAvLyBPbmx5IHNob3cgb3B0aW9ucyB3aGljaCBoYXZlbid0IHlldCBiZWVuIHNlbGVjdGVkIHVubGVzcyByZXF1ZXN0ZWQuXG4gIHZhciBzZWxlY3RlZE9wdGlvbiA9IGdldFNlbGVjdGVkT3B0aW9uRm9yU2VhcmNoVmFsdWUob3B0aW9uLmxhYmVsLCBzZWxlY3RlZE9wdGlvbnMsIG9wdGlvbi5rZXkpO1xuXG4gIGlmIChzZWxlY3RlZE9wdGlvbiAmJiAhc2hvd1ByZXZTZWxlY3RlZCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSAvLyBJZiB0aGUgb3B0aW9ucyBoYXZlIGFscmVhZHkgYmVlbiBwcmUtZmlsdGVyZWQgdGhlbiB3ZSBjYW4gc2tpcCBmaWx0ZXJpbmcgYWdhaW5zdCB0aGUgc2VhcmNoIHZhbHVlLlxuXG5cbiAgaWYgKGlzUHJlRmlsdGVyZWQpIHtcbiAgICBhY2N1bXVsYXRvci5wdXNoKG9wdGlvbik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKCFub3JtYWxpemVkU2VhcmNoVmFsdWUpIHtcbiAgICBhY2N1bXVsYXRvci5wdXNoKG9wdGlvbik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIG5vcm1hbGl6ZWRPcHRpb24gPSBvcHRpb24ubGFiZWwudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG5cbiAgaWYgKG5vcm1hbGl6ZWRPcHRpb24uaW5jbHVkZXMobm9ybWFsaXplZFNlYXJjaFZhbHVlKSkge1xuICAgIGFjY3VtdWxhdG9yLnB1c2gob3B0aW9uKTtcbiAgfVxufTtcblxuZXhwb3J0IHZhciBnZXRNYXRjaGluZ09wdGlvbnMgPSBmdW5jdGlvbiBnZXRNYXRjaGluZ09wdGlvbnMob3B0aW9ucywgc2VsZWN0ZWRPcHRpb25zLCBzZWFyY2hWYWx1ZSwgaXNQcmVGaWx0ZXJlZCwgc2hvd1ByZXZTZWxlY3RlZCwgc29ydE1hdGNoZXNCeSkge1xuICB2YXIgbm9ybWFsaXplZFNlYXJjaFZhbHVlID0gc2VhcmNoVmFsdWUudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gIHZhciBtYXRjaGluZ09wdGlvbnMgPSBbXTtcbiAgb3B0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICBpZiAob3B0aW9uLm9wdGlvbnMpIHtcbiAgICAgIHZhciBtYXRjaGluZ09wdGlvbnNGb3JHcm91cCA9IFtdO1xuICAgICAgb3B0aW9uLm9wdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoZ3JvdXBPcHRpb24pIHtcbiAgICAgICAgY29sbGVjdE1hdGNoaW5nT3B0aW9uKG1hdGNoaW5nT3B0aW9uc0Zvckdyb3VwLCBncm91cE9wdGlvbiwgc2VsZWN0ZWRPcHRpb25zLCBub3JtYWxpemVkU2VhcmNoVmFsdWUsIGlzUHJlRmlsdGVyZWQsIHNob3dQcmV2U2VsZWN0ZWQpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChtYXRjaGluZ09wdGlvbnNGb3JHcm91cC5sZW5ndGggPiAwKSB7XG4gICAgICAgIC8vIEFkZCBvcHRpb24gZm9yIGdyb3VwIGxhYmVsXG4gICAgICAgIG1hdGNoaW5nT3B0aW9ucy5wdXNoKHtcbiAgICAgICAgICBrZXk6IG9wdGlvbi5rZXksXG4gICAgICAgICAgbGFiZWw6IG9wdGlvbi5sYWJlbCxcbiAgICAgICAgICBpc0dyb3VwTGFiZWxPcHRpb246IHRydWVcbiAgICAgICAgfSk7IC8vIEFkZCBtYXRjaGluZyBvcHRpb25zIGZvciBncm91cFxuICAgICAgICAvLyB1c2UgY29uY2F0IG92ZXIgc3ByZWFkaW5nIHRvIHN1cHBvcnQgbGFyZ2UgYXJyYXlzIC0gaHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL2RlbW8vamF2YXNjcmlwdC1hcmd1bWVudC1jb3VudFxuXG4gICAgICAgIG1hdGNoaW5nT3B0aW9ucyA9IG1hdGNoaW5nT3B0aW9ucy5jb25jYXQobWF0Y2hpbmdPcHRpb25zRm9yR3JvdXApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb2xsZWN0TWF0Y2hpbmdPcHRpb24obWF0Y2hpbmdPcHRpb25zLCBvcHRpb24sIHNlbGVjdGVkT3B0aW9ucywgbm9ybWFsaXplZFNlYXJjaFZhbHVlLCBpc1ByZUZpbHRlcmVkLCBzaG93UHJldlNlbGVjdGVkKTtcbiAgICB9XG4gIH0pO1xuXG4gIGlmIChzb3J0TWF0Y2hlc0J5ID09PSAnc3RhcnRzV2l0aCcpIHtcbiAgICB2YXIgcmVmT2JqID0ge1xuICAgICAgc3RhcnRXaXRoOiBbXSxcbiAgICAgIG90aGVyczogW11cbiAgICB9O1xuICAgIG1hdGNoaW5nT3B0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChvYmplY3QpIHtcbiAgICAgIGlmIChvYmplY3QubGFiZWwudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSkpIHtcbiAgICAgICAgcmVmT2JqLnN0YXJ0V2l0aC5wdXNoKG9iamVjdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWZPYmoub3RoZXJzLnB1c2gob2JqZWN0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShyZWZPYmouc3RhcnRXaXRoKSwgX3RvQ29uc3VtYWJsZUFycmF5KHJlZk9iai5vdGhlcnMpKTtcbiAgfVxuXG4gIHJldHVybiBtYXRjaGluZ09wdGlvbnM7XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wia2V5XCIsIFwibGFiZWxcIiwgXCJjb2xvclwiLCBcIm9uQ2xpY2tcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgQXV0b3NpemVJbnB1dCBmcm9tICdyZWFjdC1pbnB1dC1hdXRvc2l6ZSc7XG5pbXBvcnQgeyBFdWlTY3JlZW5SZWFkZXJPbmx5IH0gZnJvbSAnLi4vLi4vYWNjZXNzaWJpbGl0eSc7XG5pbXBvcnQgeyBFdWlGb3JtQ29udHJvbExheW91dCB9IGZyb20gJy4uLy4uL2Zvcm0vZm9ybV9jb250cm9sX2xheW91dCc7XG5pbXBvcnQgeyBFdWlDb21ib0JveFBpbGwgfSBmcm9tICcuL2NvbWJvX2JveF9waWxsJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aUNvbWJvQm94SW5wdXQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEV1aUNvbWJvQm94SW5wdXQsIF9Db21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoRXVpQ29tYm9Cb3hJbnB1dCk7XG5cbiAgZnVuY3Rpb24gRXVpQ29tYm9Cb3hJbnB1dCgpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpQ29tYm9Cb3hJbnB1dCk7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbC5hcHBseShfc3VwZXIsIFt0aGlzXS5jb25jYXQoYXJncykpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInN0YXRlXCIsIHtcbiAgICAgIGhhc0ZvY3VzOiBmYWxzZVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInVwZGF0ZVBvc2l0aW9uXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFdhaXQgYSBiZWF0IGZvciB0aGUgRE9NIHRvIHVwZGF0ZSwgc2luY2Ugd2UgZGVwZW5kIG9uIERPTSBlbGVtZW50cycgYm91bmRzLlxuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMucHJvcHMudXBkYXRlUG9zaXRpb24oKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uRm9jdXNcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBfdGhpcy5wcm9wcy5vbkZvY3VzKGV2ZW50KTtcblxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBoYXNGb2N1czogdHJ1ZVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25CbHVyXCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKF90aGlzLnByb3BzLm9uQmx1cikge1xuICAgICAgICBfdGhpcy5wcm9wcy5vbkJsdXIoZXZlbnQpO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGhhc0ZvY3VzOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaW5wdXRPbkNoYW5nZVwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIG9uQ2hhbmdlID0gX3RoaXMkcHJvcHMub25DaGFuZ2UsXG4gICAgICAgICAgc2VhcmNoVmFsdWUgPSBfdGhpcyRwcm9wcy5zZWFyY2hWYWx1ZTtcblxuICAgICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICAgIG9uQ2hhbmdlKGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaW5wdXRSZWZDYWxsYmFja1wiLCBmdW5jdGlvbiAocmVmKSB7XG4gICAgICB2YXIgYXV0b1NpemVJbnB1dFJlZiA9IF90aGlzLnByb3BzLmF1dG9TaXplSW5wdXRSZWY7XG5cbiAgICAgIGlmIChhdXRvU2l6ZUlucHV0UmVmKSB7XG4gICAgICAgIGF1dG9TaXplSW5wdXRSZWYocmVmKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdWlDb21ib0JveElucHV0LCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcykge1xuICAgICAgdmFyIHNlYXJjaFZhbHVlID0gcHJldlByb3BzLnNlYXJjaFZhbHVlOyAvLyBXZSBuZWVkIHRvIHVwZGF0ZSB0aGUgcG9zaXRpb24gb2YgZXZlcnl0aGluZyBpZiB0aGUgdXNlciBlbnRlcnMgZW5vdWdoIGlucHV0IHRvIGNoYW5nZVxuICAgICAgLy8gdGhlIHNpemUgb2YgdGhlIGlucHV0LlxuXG4gICAgICBpZiAoc2VhcmNoVmFsdWUgIT09IHRoaXMucHJvcHMuc2VhcmNoVmFsdWUpIHtcbiAgICAgICAgdGhpcy51cGRhdGVQb3NpdGlvbigpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzMiA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY29tcHJlc3NlZCA9IF90aGlzJHByb3BzMi5jb21wcmVzc2VkLFxuICAgICAgICAgIGZvY3VzZWRPcHRpb25JZCA9IF90aGlzJHByb3BzMi5mb2N1c2VkT3B0aW9uSWQsXG4gICAgICAgICAgZnVsbFdpZHRoID0gX3RoaXMkcHJvcHMyLmZ1bGxXaWR0aCxcbiAgICAgICAgICBoYXNTZWxlY3RlZE9wdGlvbnMgPSBfdGhpcyRwcm9wczIuaGFzU2VsZWN0ZWRPcHRpb25zLFxuICAgICAgICAgIGlkID0gX3RoaXMkcHJvcHMyLmlkLFxuICAgICAgICAgIGlucHV0UmVmID0gX3RoaXMkcHJvcHMyLmlucHV0UmVmLFxuICAgICAgICAgIGlzRGlzYWJsZWQgPSBfdGhpcyRwcm9wczIuaXNEaXNhYmxlZCxcbiAgICAgICAgICBpc0xpc3RPcGVuID0gX3RoaXMkcHJvcHMyLmlzTGlzdE9wZW4sXG4gICAgICAgICAgbm9JY29uID0gX3RoaXMkcHJvcHMyLm5vSWNvbixcbiAgICAgICAgICBvbkNsZWFyID0gX3RoaXMkcHJvcHMyLm9uQ2xlYXIsXG4gICAgICAgICAgb25DbGljayA9IF90aGlzJHByb3BzMi5vbkNsaWNrLFxuICAgICAgICAgIG9uQ2xvc2VMaXN0Q2xpY2sgPSBfdGhpcyRwcm9wczIub25DbG9zZUxpc3RDbGljayxcbiAgICAgICAgICBvbk9wZW5MaXN0Q2xpY2sgPSBfdGhpcyRwcm9wczIub25PcGVuTGlzdENsaWNrLFxuICAgICAgICAgIG9uUmVtb3ZlT3B0aW9uID0gX3RoaXMkcHJvcHMyLm9uUmVtb3ZlT3B0aW9uLFxuICAgICAgICAgIHBsYWNlaG9sZGVyID0gX3RoaXMkcHJvcHMyLnBsYWNlaG9sZGVyLFxuICAgICAgICAgIHJvb3RJZCA9IF90aGlzJHByb3BzMi5yb290SWQsXG4gICAgICAgICAgc2VhcmNoVmFsdWUgPSBfdGhpcyRwcm9wczIuc2VhcmNoVmFsdWUsXG4gICAgICAgICAgc2VsZWN0ZWRPcHRpb25zID0gX3RoaXMkcHJvcHMyLnNlbGVjdGVkT3B0aW9ucyxcbiAgICAgICAgICBzaW5nbGVTZWxlY3Rpb25Qcm9wID0gX3RoaXMkcHJvcHMyLnNpbmdsZVNlbGVjdGlvbixcbiAgICAgICAgICB0b2dnbGVCdXR0b25SZWYgPSBfdGhpcyRwcm9wczIudG9nZ2xlQnV0dG9uUmVmLFxuICAgICAgICAgIHZhbHVlID0gX3RoaXMkcHJvcHMyLnZhbHVlLFxuICAgICAgICAgIHByZXBlbmQgPSBfdGhpcyRwcm9wczIucHJlcGVuZCxcbiAgICAgICAgICBhcHBlbmQgPSBfdGhpcyRwcm9wczIuYXBwZW5kLFxuICAgICAgICAgIGlzTG9hZGluZyA9IF90aGlzJHByb3BzMi5pc0xvYWRpbmcsXG4gICAgICAgICAgYXV0b0ZvY3VzID0gX3RoaXMkcHJvcHMyLmF1dG9Gb2N1cyxcbiAgICAgICAgICBhcmlhTGFiZWwgPSBfdGhpcyRwcm9wczJbJ2FyaWEtbGFiZWwnXSxcbiAgICAgICAgICBhcmlhTGFiZWxsZWRieSA9IF90aGlzJHByb3BzMlsnYXJpYS1sYWJlbGxlZGJ5J107XG4gICAgICB2YXIgc2luZ2xlU2VsZWN0aW9uID0gQm9vbGVhbihzaW5nbGVTZWxlY3Rpb25Qcm9wKTtcbiAgICAgIHZhciBhc1BsYWluVGV4dCA9IHNpbmdsZVNlbGVjdGlvblByb3AgJiYgX3R5cGVvZihzaW5nbGVTZWxlY3Rpb25Qcm9wKSA9PT0gJ29iamVjdCcgJiYgc2luZ2xlU2VsZWN0aW9uUHJvcC5hc1BsYWluVGV4dCB8fCBmYWxzZTtcbiAgICAgIHZhciBwaWxscyA9IHNlbGVjdGVkT3B0aW9ucyA/IHNlbGVjdGVkT3B0aW9ucy5tYXAoZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgICB2YXIga2V5ID0gb3B0aW9uLmtleSxcbiAgICAgICAgICAgIGxhYmVsID0gb3B0aW9uLmxhYmVsLFxuICAgICAgICAgICAgY29sb3IgPSBvcHRpb24uY29sb3IsXG4gICAgICAgICAgICBvbkNsaWNrID0gb3B0aW9uLm9uQ2xpY2ssXG4gICAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9wdGlvbiwgX2V4Y2x1ZGVkKTtcblxuICAgICAgICB2YXIgcGlsbE9uQ2xvc2UgPSBpc0Rpc2FibGVkIHx8IHNpbmdsZVNlbGVjdGlvbiB8fCBvbkNsaWNrID8gdW5kZWZpbmVkIDogb25SZW1vdmVPcHRpb247XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUNvbWJvQm94UGlsbCwgX2V4dGVuZHMoe1xuICAgICAgICAgIG9wdGlvbjogb3B0aW9uLFxuICAgICAgICAgIG9uQ2xvc2U6IHBpbGxPbkNsb3NlLFxuICAgICAgICAgIGtleToga2V5ICE9PSBudWxsICYmIGtleSAhPT0gdm9pZCAwID8ga2V5IDogbGFiZWwudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICBjb2xvcjogY29sb3IsXG4gICAgICAgICAgb25DbGljazogb25DbGljayxcbiAgICAgICAgICBvbkNsaWNrQXJpYUxhYmVsOiBvbkNsaWNrID8gJ0NoYW5nZScgOiB1bmRlZmluZWQsXG4gICAgICAgICAgYXNQbGFpblRleHQ6IGFzUGxhaW5UZXh0XG4gICAgICAgIH0sIHJlc3QpLCBsYWJlbCk7XG4gICAgICB9KSA6IG51bGw7XG4gICAgICB2YXIgcmVtb3ZlT3B0aW9uTWVzc2FnZTtcbiAgICAgIHZhciByZW1vdmVPcHRpb25NZXNzYWdlSWQ7XG5cbiAgICAgIGlmICh0aGlzLnN0YXRlLmhhc0ZvY3VzKSB7XG4gICAgICAgIHZhciByZWFkUGxhY2Vob2xkZXIgPSBwbGFjZWhvbGRlciA/IFwiXCIuY29uY2F0KHBsYWNlaG9sZGVyLCBcIi5cIikgOiAnJztcbiAgICAgICAgdmFyIHJlbW92ZU9wdGlvbk1lc3NhZ2VDb250ZW50ID0gXCJDb21ibyBib3guIFNlbGVjdGVkLiBcIi5jb25jYXQoc2VhcmNoVmFsdWUgPyBcIlwiLmNvbmNhdChzZWFyY2hWYWx1ZSwgXCIuIFNlbGVjdGVkLiBcIikgOiAnJykuY29uY2F0KHNlbGVjdGVkT3B0aW9ucyAmJiBzZWxlY3RlZE9wdGlvbnMubGVuZ3RoID4gMCA/IFwiXCIuY29uY2F0KHZhbHVlLCBcIi4gUHJlc3MgQmFja3NwYWNlIHRvIGRlbGV0ZSBcIikuY29uY2F0KHNlbGVjdGVkT3B0aW9uc1tzZWxlY3RlZE9wdGlvbnMubGVuZ3RoIC0gMV0ubGFiZWwsIFwiLiBcIikgOiAnJywgXCJDb21ibyBib3ggaW5wdXQuIFwiKS5jb25jYXQocmVhZFBsYWNlaG9sZGVyLCBcIiBUeXBlIHNvbWUgdGV4dCBvciwgdG8gZGlzcGxheSBhIGxpc3Qgb2YgY2hvaWNlcywgcHJlc3MgRG93biBBcnJvdy4gXCIpICsgJ1RvIGV4aXQgdGhlIGxpc3Qgb2YgY2hvaWNlcywgcHJlc3MgRXNjYXBlLic7XG4gICAgICAgIHJlbW92ZU9wdGlvbk1lc3NhZ2VJZCA9IHJvb3RJZCgncmVtb3ZlT3B0aW9uTWVzc2FnZScpOyAvLyBhcmlhLWxpdmU9XCJhc3NlcnRpdmVcIiB3aWxsIHJlYWQgdGhpcyBtZXNzYWdlIGFsb3VkIGltbWVkaWF0ZWx5IG9uY2UgaXQgZW50ZXJzIHRoZSBET00uXG4gICAgICAgIC8vIFdlJ2xsIHJlbmRlciB0byB0aGUgRE9NIHdoZW4gdGhlIGlucHV0IGdhaW5zIGZvY3VzIGFuZCByZW1vdmUgaXQgd2hlbiB0aGUgaW5wdXQgbG9zZXMgZm9jdXMuXG4gICAgICAgIC8vIFdlJ2xsIHVzZSBhcmlhLWhpZGRlbiB0byBwcmV2ZW50IGRlZmF1bHQgYXJpYSBpbmZvcm1hdGlvbiBmcm9tIGJlaW5nIHJlYWQgYnkgdGhlIHNjcmVlblxuICAgICAgICAvLyByZWFkZXIuXG5cbiAgICAgICAgcmVtb3ZlT3B0aW9uTWVzc2FnZSA9IF9fX0Vtb3Rpb25KU1goRXVpU2NyZWVuUmVhZGVyT25seSwgbnVsbCwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgICAgICAgIFwiYXJpYS1saXZlXCI6IFwicG9saXRlXCIsXG4gICAgICAgICAgaWQ6IHJlbW92ZU9wdGlvbk1lc3NhZ2VJZFxuICAgICAgICB9LCByZW1vdmVPcHRpb25NZXNzYWdlQ29udGVudCkpO1xuICAgICAgfVxuXG4gICAgICB2YXIgcGxhY2Vob2xkZXJNZXNzYWdlO1xuXG4gICAgICBpZiAocGxhY2Vob2xkZXIgJiYgc2VsZWN0ZWRPcHRpb25zICYmICFzZWxlY3RlZE9wdGlvbnMubGVuZ3RoICYmICFzZWFyY2hWYWx1ZSkge1xuICAgICAgICBwbGFjZWhvbGRlck1lc3NhZ2UgPSBfX19FbW90aW9uSlNYKFwicFwiLCB7XG4gICAgICAgICAgY2xhc3NOYW1lOiBcImV1aUNvbWJvQm94UGxhY2Vob2xkZXJcIlxuICAgICAgICB9LCBwbGFjZWhvbGRlcik7XG4gICAgICB9XG5cbiAgICAgIHZhciBjbGlja1Byb3BzID0ge307XG5cbiAgICAgIGlmICghaXNEaXNhYmxlZCAmJiBvbkNsZWFyICYmIGhhc1NlbGVjdGVkT3B0aW9ucykge1xuICAgICAgICBjbGlja1Byb3BzLmNsZWFyID0ge1xuICAgICAgICAgICdkYXRhLXRlc3Qtc3Viaic6ICdjb21ib0JveENsZWFyQnV0dG9uJyxcbiAgICAgICAgICBvbkNsaWNrOiBvbkNsZWFyXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHZhciBpY29uO1xuXG4gICAgICBpZiAoIW5vSWNvbikge1xuICAgICAgICBpY29uID0ge1xuICAgICAgICAgICdhcmlhLWxhYmVsJzogaXNMaXN0T3BlbiA/ICdDbG9zZSBsaXN0IG9mIG9wdGlvbnMnIDogJ09wZW4gbGlzdCBvZiBvcHRpb25zJyxcbiAgICAgICAgICAnZGF0YS10ZXN0LXN1YmonOiAnY29tYm9Cb3hUb2dnbGVMaXN0QnV0dG9uJyxcbiAgICAgICAgICBkaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgICBvbkNsaWNrOiBpc0xpc3RPcGVuICYmICFpc0Rpc2FibGVkID8gb25DbG9zZUxpc3RDbGljayA6IG9uT3Blbkxpc3RDbGljayxcbiAgICAgICAgICByZWY6IHRvZ2dsZUJ1dHRvblJlZixcbiAgICAgICAgICBzaWRlOiAncmlnaHQnLFxuICAgICAgICAgIHRhYkluZGV4OiAtMSxcbiAgICAgICAgICB0eXBlOiAnYXJyb3dEb3duJ1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICB2YXIgd3JhcENsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlDb21ib0JveF9faW5wdXRXcmFwJywge1xuICAgICAgICAnZXVpQ29tYm9Cb3hfX2lucHV0V3JhcC0tY29tcHJlc3NlZCc6IGNvbXByZXNzZWQsXG4gICAgICAgICdldWlDb21ib0JveF9faW5wdXRXcmFwLS1mdWxsV2lkdGgnOiBmdWxsV2lkdGgsXG4gICAgICAgICdldWlDb21ib0JveF9faW5wdXRXcmFwLS1ub1dyYXAnOiBzaW5nbGVTZWxlY3Rpb24sXG4gICAgICAgICdldWlDb21ib0JveF9faW5wdXRXcmFwLWlzTG9hZGluZyc6IGlzTG9hZGluZyxcbiAgICAgICAgJ2V1aUNvbWJvQm94X19pbnB1dFdyYXAtaXNDbGVhcmFibGUnOiBvbkNsZWFyLFxuICAgICAgICAnZXVpQ29tYm9Cb3hfX2lucHV0V3JhcC0taW5Hcm91cCc6IHByZXBlbmQgfHwgYXBwZW5kXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUZvcm1Db250cm9sTGF5b3V0LCBfZXh0ZW5kcyh7XG4gICAgICAgIGljb246IGljb25cbiAgICAgIH0sIGNsaWNrUHJvcHMsIHtcbiAgICAgICAgaW5wdXRJZDogaWQsXG4gICAgICAgIGlzTG9hZGluZzogaXNMb2FkaW5nLFxuICAgICAgICBjb21wcmVzc2VkOiBjb21wcmVzc2VkLFxuICAgICAgICBmdWxsV2lkdGg6IGZ1bGxXaWR0aCxcbiAgICAgICAgcHJlcGVuZDogcHJlcGVuZCxcbiAgICAgICAgYXBwZW5kOiBhcHBlbmRcbiAgICAgIH0pLCBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiB3cmFwQ2xhc3NlcyxcbiAgICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcImNvbWJvQm94SW5wdXRcIixcbiAgICAgICAgb25DbGljazogb25DbGljayxcbiAgICAgICAgdGFiSW5kZXg6IC0xIC8vIGJlY29tZXMgb25CbHVyIGV2ZW50J3MgcmVsYXRlZFRhcmdldCwgb3RoZXJ3aXNlIHJlbGF0ZWRUYXJnZXQgaXMgbnVsbCB3aGVuIGNsaWNraW5nIG9uIHRoaXMgZGl2XG5cbiAgICAgIH0sICFzaW5nbGVTZWxlY3Rpb24gfHwgIXNlYXJjaFZhbHVlID8gcGlsbHMgOiBudWxsLCBwbGFjZWhvbGRlck1lc3NhZ2UsIF9fX0Vtb3Rpb25KU1goQXV0b3NpemVJbnB1dCwge1xuICAgICAgICBcImFyaWEtYWN0aXZlZGVzY2VuZGFudFwiOiBmb2N1c2VkT3B0aW9uSWQsXG4gICAgICAgIFwiYXJpYS1hdXRvY29tcGxldGVcIjogXCJsaXN0XCIsXG4gICAgICAgIFwiYXJpYS1jb250cm9sc1wiOiBpc0xpc3RPcGVuID8gcm9vdElkKCdsaXN0Ym94JykgOiAnJyxcbiAgICAgICAgXCJhcmlhLWV4cGFuZGVkXCI6IGlzTGlzdE9wZW4sXG4gICAgICAgIFwiYXJpYS1sYWJlbFwiOiBhcmlhTGFiZWwsXG4gICAgICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IGFyaWFMYWJlbGxlZGJ5LFxuICAgICAgICBjbGFzc05hbWU6IFwiZXVpQ29tYm9Cb3hfX2lucHV0XCIsXG4gICAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogXCJjb21ib0JveFNlYXJjaElucHV0XCIsXG4gICAgICAgIGRpc2FibGVkOiBpc0Rpc2FibGVkLFxuICAgICAgICBpZDogaWQsXG4gICAgICAgIGlucHV0UmVmOiBpbnB1dFJlZixcbiAgICAgICAgb25CbHVyOiB0aGlzLm9uQmx1cixcbiAgICAgICAgb25DaGFuZ2U6IHRoaXMuaW5wdXRPbkNoYW5nZSxcbiAgICAgICAgb25Gb2N1czogdGhpcy5vbkZvY3VzLFxuICAgICAgICByZWY6IHRoaXMuaW5wdXRSZWZDYWxsYmFjayxcbiAgICAgICAgcm9sZTogXCJjb21ib2JveFwiLFxuICAgICAgICBzdHlsZToge1xuICAgICAgICAgIGZvbnRTaXplOiAxNFxuICAgICAgICB9LFxuICAgICAgICB2YWx1ZTogc2VhcmNoVmFsdWUsXG4gICAgICAgIGF1dG9Gb2N1czogYXV0b0ZvY3VzXG4gICAgICB9KSwgcmVtb3ZlT3B0aW9uTWVzc2FnZSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlDb21ib0JveElucHV0O1xufShDb21wb25lbnQpO1xuRXVpQ29tYm9Cb3hJbnB1dC5wcm9wVHlwZXMgPSB7XG4gIGF1dG9TaXplSW5wdXRSZWY6IFByb3BUeXBlcy5hbnksXG4gIGNvbXByZXNzZWQ6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIGZvY3VzZWRPcHRpb25JZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgZnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbCxcbiAgaGFzU2VsZWN0ZWRPcHRpb25zOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgaW5wdXRSZWY6IFByb3BUeXBlcy5hbnksXG4gIGlzRGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICBpc0xpc3RPcGVuOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICBub0ljb246IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIG9uQmx1cjogUHJvcFR5cGVzLmFueSxcbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICBvbkNsZWFyOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uQ2xvc2VMaXN0Q2xpY2s6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIG9uRm9jdXM6IFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCxcbiAgb25PcGVuTGlzdENsaWNrOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBvblJlbW92ZU9wdGlvbjogUHJvcFR5cGVzLmZ1bmMsXG4gIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICByb290SWQ6IFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCxcbiAgc2VhcmNoVmFsdWU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgc2VsZWN0ZWRPcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGlzR3JvdXBMYWJlbE9wdGlvbjogUHJvcFR5cGVzLmJvb2wsXG4gICAgbGFiZWw6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBrZXk6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgb3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIGlzR3JvdXBMYWJlbE9wdGlvbjogUHJvcFR5cGVzLmJvb2wsXG4gICAgICBsYWJlbDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgICAga2V5OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgb3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkKSxcbiAgICAgIHZhbHVlOiBQcm9wVHlwZXMuYW55LFxuICAgICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbiAgICB9KS5pc1JlcXVpcmVkKSxcbiAgICB2YWx1ZTogUHJvcFR5cGVzLmFueSxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLmlzUmVxdWlyZWQpLFxuICBzaW5nbGVTZWxlY3Rpb246IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgYXNQbGFpblRleHQ6IFByb3BUeXBlcy5ib29sXG4gIH0pLmlzUmVxdWlyZWRdKSxcbiAgdG9nZ2xlQnV0dG9uUmVmOiBQcm9wVHlwZXMuYW55LFxuICB1cGRhdGVQb3NpdGlvbjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgdmFsdWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHByZXBlbmQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQpLmlzUmVxdWlyZWRdKSxcbiAgYXBwZW5kOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkKS5pc1JlcXVpcmVkXSksXG4gIGlzTG9hZGluZzogUHJvcFR5cGVzLmJvb2wsXG4gIGF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxsZWRieVwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZ1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG52YXIgX2V4Y2x1ZGVkID0gW1wiYXNQbGFpblRleHRcIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImNvbG9yXCIsIFwib25DbGlja1wiLCBcIm9uQ2xpY2tBcmlhTGFiZWxcIiwgXCJvbkNsb3NlXCIsIFwib3B0aW9uXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IEV1aUJhZGdlIH0gZnJvbSAnLi4vLi4vYmFkZ2UnO1xuaW1wb3J0IHsgRXVpSTE4biB9IGZyb20gJy4uLy4uL2kxOG4nO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpQ29tYm9Cb3hQaWxsID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhFdWlDb21ib0JveFBpbGwsIF9Db21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoRXVpQ29tYm9Cb3hQaWxsKTtcblxuICBmdW5jdGlvbiBFdWlDb21ib0JveFBpbGwoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aUNvbWJvQm94UGlsbCk7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbC5hcHBseShfc3VwZXIsIFt0aGlzXS5jb25jYXQoYXJncykpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uQ2xvc2VCdXR0b25DbGlja1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBvbkNsb3NlID0gX3RoaXMkcHJvcHMub25DbG9zZSxcbiAgICAgICAgICBvcHRpb24gPSBfdGhpcyRwcm9wcy5vcHRpb247XG5cbiAgICAgIGlmIChvbkNsb3NlKSB7XG4gICAgICAgIG9uQ2xvc2Uob3B0aW9uKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdWlDb21ib0JveFBpbGwsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdmFyIF90aGlzJHByb3BzMiA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgYXNQbGFpblRleHQgPSBfdGhpcyRwcm9wczIuYXNQbGFpblRleHQsXG4gICAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wczIuY2hpbGRyZW4sXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMyLmNsYXNzTmFtZSxcbiAgICAgICAgICBjb2xvciA9IF90aGlzJHByb3BzMi5jb2xvcixcbiAgICAgICAgICBvbkNsaWNrID0gX3RoaXMkcHJvcHMyLm9uQ2xpY2ssXG4gICAgICAgICAgb25DbGlja0FyaWFMYWJlbCA9IF90aGlzJHByb3BzMi5vbkNsaWNrQXJpYUxhYmVsLFxuICAgICAgICAgIG9uQ2xvc2UgPSBfdGhpcyRwcm9wczIub25DbG9zZSxcbiAgICAgICAgICBvcHRpb24gPSBfdGhpcyRwcm9wczIub3B0aW9uLFxuICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMyLCBfZXhjbHVkZWQpO1xuXG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUNvbWJvQm94UGlsbCcsIHtcbiAgICAgICAgJ2V1aUNvbWJvQm94UGlsbC0tcGxhaW5UZXh0JzogYXNQbGFpblRleHRcbiAgICAgIH0sIGNsYXNzTmFtZSk7XG4gICAgICB2YXIgb25DbGlja1Byb3BzID0gb25DbGljayAmJiBvbkNsaWNrQXJpYUxhYmVsID8ge1xuICAgICAgICBvbkNsaWNrOiBvbkNsaWNrLFxuICAgICAgICBvbkNsaWNrQXJpYUxhYmVsOiBvbkNsaWNrQXJpYUxhYmVsXG4gICAgICB9IDoge307XG5cbiAgICAgIGlmIChvbkNsb3NlKSB7XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICB0b2tlbjogXCJldWlDb21ib0JveFBpbGwucmVtb3ZlU2VsZWN0aW9uXCIsXG4gICAgICAgICAgZGVmYXVsdDogXCJSZW1vdmUge2NoaWxkcmVufSBmcm9tIHNlbGVjdGlvbiBpbiB0aGlzIGdyb3VwXCIsXG4gICAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICAgICAgICB9XG4gICAgICAgIH0sIGZ1bmN0aW9uIChyZW1vdmVTZWxlY3Rpb24pIHtcbiAgICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlCYWRnZSwgX2V4dGVuZHMoe1xuICAgICAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICAgICAgY29sb3I6IGNvbG9yLFxuICAgICAgICAgICAgaWNvbk9uQ2xpY2s6IF90aGlzMi5vbkNsb3NlQnV0dG9uQ2xpY2ssXG4gICAgICAgICAgICBpY29uT25DbGlja0FyaWFMYWJlbDogcmVtb3ZlU2VsZWN0aW9uLFxuICAgICAgICAgICAgaWNvblNpZGU6IFwicmlnaHRcIixcbiAgICAgICAgICAgIGljb25UeXBlOiBcImNyb3NzXCIsXG4gICAgICAgICAgICB0aXRsZTogY2hpbGRyZW5cbiAgICAgICAgICB9LCBvbkNsaWNrUHJvcHMsIHJlc3QpLCBjaGlsZHJlbik7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoYXNQbGFpblRleHQpIHtcbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIF9leHRlbmRzKHtcbiAgICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgICAgICAgfSwgcmVzdCksIGNoaWxkcmVuKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpQmFkZ2UsIF9leHRlbmRzKHtcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICBjb2xvcjogY29sb3IsXG4gICAgICAgIHRpdGxlOiBjaGlsZHJlblxuICAgICAgfSwgcmVzdCwgb25DbGlja1Byb3BzKSwgY2hpbGRyZW4pO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlDb21ib0JveFBpbGw7XG59KENvbXBvbmVudCk7XG5cbl9kZWZpbmVQcm9wZXJ0eShFdWlDb21ib0JveFBpbGwsIFwiZGVmYXVsdFByb3BzXCIsIHtcbiAgY29sb3I6ICdob2xsb3cnXG59KTtcblxuRXVpQ29tYm9Cb3hQaWxsLnByb3BUeXBlcyA9IHtcbiAgYXNQbGFpblRleHQ6IFByb3BUeXBlcy5ib29sLFxuICBjaGlsZHJlbjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uQ2xpY2tBcmlhTGFiZWw6IFByb3BUeXBlcy5hbnksXG4gIG9uQ2xvc2U6IFByb3BUeXBlcy5mdW5jLFxuICBvcHRpb246IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaXNHcm91cExhYmVsT3B0aW9uOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBsYWJlbDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIGtleTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBvcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgaXNHcm91cExhYmVsT3B0aW9uOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgIGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgICBrZXk6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBvcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQpLFxuICAgICAgdmFsdWU6IFByb3BUeXBlcy5hbnksXG4gICAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZ1xuICAgIH0pLmlzUmVxdWlyZWQpLFxuICAgIHZhbHVlOiBQcm9wVHlwZXMuYW55LFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbiAgfSkuaXNSZXF1aXJlZCxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZ1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImFjdGl2ZVBhZ2VcIiwgXCJpdGVtc1BlclBhZ2VcIiwgXCJpdGVtc1BlclBhZ2VPcHRpb25zXCIsIFwic2hvd1BlclBhZ2VPcHRpb25zXCIsIFwib25DaGFuZ2VJdGVtc1BlclBhZ2VcIiwgXCJvbkNoYW5nZVBhZ2VcIiwgXCJwYWdlQ291bnRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7IHZhciBfaSA9IGFyciA9PSBudWxsID8gbnVsbCA6IHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgYXJyW1N5bWJvbC5pdGVyYXRvcl0gfHwgYXJyW1wiQEBpdGVyYXRvclwiXTsgaWYgKF9pID09IG51bGwpIHJldHVybjsgdmFyIF9hcnIgPSBbXTsgdmFyIF9uID0gdHJ1ZTsgdmFyIF9kID0gZmFsc2U7IHZhciBfcywgX2U7IHRyeSB7IGZvciAoX2kgPSBfaS5jYWxsKGFycik7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHsgX2Fyci5wdXNoKF9zLnZhbHVlKTsgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOyB9IH0gY2F0Y2ggKGVycikgeyBfZCA9IHRydWU7IF9lID0gZXJyOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7IH0gZmluYWxseSB7IGlmIChfZCkgdGhyb3cgX2U7IH0gfSByZXR1cm4gX2FycjsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSwgdXNlTWVtbywgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBFdWlCdXR0b25FbXB0eSB9IGZyb20gJy4uLy4uL2J1dHRvbic7XG5pbXBvcnQgeyBFdWlDb250ZXh0TWVudUl0ZW0sIEV1aUNvbnRleHRNZW51UGFuZWwgfSBmcm9tICcuLi8uLi9jb250ZXh0X21lbnUnO1xuaW1wb3J0IHsgRXVpRmxleEdyb3VwLCBFdWlGbGV4SXRlbSB9IGZyb20gJy4uLy4uL2ZsZXgnO1xuaW1wb3J0IHsgRXVpUGFnaW5hdGlvbiB9IGZyb20gJy4uLy4uL3BhZ2luYXRpb24nO1xuaW1wb3J0IHsgRXVpUG9wb3ZlciB9IGZyb20gJy4uLy4uL3BvcG92ZXInO1xuaW1wb3J0IHsgRXVpSTE4biB9IGZyb20gJy4uLy4uL2kxOG4nO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpVGFibGVQYWdpbmF0aW9uID0gZnVuY3Rpb24gRXVpVGFibGVQYWdpbmF0aW9uKF9yZWYpIHtcbiAgdmFyIGFjdGl2ZVBhZ2UgPSBfcmVmLmFjdGl2ZVBhZ2UsXG4gICAgICBfcmVmJGl0ZW1zUGVyUGFnZSA9IF9yZWYuaXRlbXNQZXJQYWdlLFxuICAgICAgaXRlbXNQZXJQYWdlID0gX3JlZiRpdGVtc1BlclBhZ2UgPT09IHZvaWQgMCA/IDUwIDogX3JlZiRpdGVtc1BlclBhZ2UsXG4gICAgICBfcmVmJGl0ZW1zUGVyUGFnZU9wdGkgPSBfcmVmLml0ZW1zUGVyUGFnZU9wdGlvbnMsXG4gICAgICBpdGVtc1BlclBhZ2VPcHRpb25zID0gX3JlZiRpdGVtc1BlclBhZ2VPcHRpID09PSB2b2lkIDAgPyBbMTAsIDIwLCA1MCwgMTAwXSA6IF9yZWYkaXRlbXNQZXJQYWdlT3B0aSxcbiAgICAgIF9yZWYkc2hvd1BlclBhZ2VPcHRpbyA9IF9yZWYuc2hvd1BlclBhZ2VPcHRpb25zLFxuICAgICAgc2hvd1BlclBhZ2VPcHRpb25zID0gX3JlZiRzaG93UGVyUGFnZU9wdGlvID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRzaG93UGVyUGFnZU9wdGlvLFxuICAgICAgX3JlZiRvbkNoYW5nZUl0ZW1zUGVyID0gX3JlZi5vbkNoYW5nZUl0ZW1zUGVyUGFnZSxcbiAgICAgIG9uQ2hhbmdlSXRlbXNQZXJQYWdlID0gX3JlZiRvbkNoYW5nZUl0ZW1zUGVyID09PSB2b2lkIDAgPyBmdW5jdGlvbiAoKSB7fSA6IF9yZWYkb25DaGFuZ2VJdGVtc1BlcixcbiAgICAgIG9uQ2hhbmdlUGFnZSA9IF9yZWYub25DaGFuZ2VQYWdlLFxuICAgICAgcGFnZUNvdW50ID0gX3JlZi5wYWdlQ291bnQsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIF91c2VTdGF0ZSA9IHVzZVN0YXRlKGZhbHNlKSxcbiAgICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgICAgaXNQb3BvdmVyT3BlbiA9IF91c2VTdGF0ZTJbMF0sXG4gICAgICBzZXRJc1BvcG92ZXJPcGVuID0gX3VzZVN0YXRlMlsxXTtcblxuICB2YXIgdG9nZ2xlUG9wb3ZlciA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uICgpIHtcbiAgICBzZXRJc1BvcG92ZXJPcGVuKGZ1bmN0aW9uIChpc09wZW4pIHtcbiAgICAgIHJldHVybiAhaXNPcGVuO1xuICAgIH0pO1xuICB9LCBbXSk7XG4gIHZhciBjbG9zZVBvcG92ZXIgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgc2V0SXNQb3BvdmVyT3BlbihmYWxzZSk7XG4gIH0sIFtdKTtcblxuICB2YXIgYnV0dG9uID0gX19fRW1vdGlvbkpTWChFdWlCdXR0b25FbXB0eSwge1xuICAgIHNpemU6IFwieHNcIixcbiAgICBjb2xvcjogXCJ0ZXh0XCIsXG4gICAgaWNvblR5cGU6IFwiYXJyb3dEb3duXCIsXG4gICAgaWNvblNpZGU6IFwicmlnaHRcIixcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFwidGFibGVQYWdpbmF0aW9uUG9wb3ZlckJ1dHRvblwiLFxuICAgIG9uQ2xpY2s6IHRvZ2dsZVBvcG92ZXJcbiAgfSwgaXRlbXNQZXJQYWdlID09PSAwID8gX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgdG9rZW46IFwiZXVpVGFibGVQYWdpbmF0aW9uLmFsbFJvd3NcIixcbiAgICBkZWZhdWx0OiBcIlNob3dpbmcgYWxsIHJvd3NcIlxuICB9KSA6IF9fX0Vtb3Rpb25KU1goUmVhY3QuRnJhZ21lbnQsIG51bGwsIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgIHRva2VuOiBcImV1aVRhYmxlUGFnaW5hdGlvbi5yb3dzUGVyUGFnZVwiLFxuICAgIGRlZmF1bHQ6IFwiUm93cyBwZXIgcGFnZVwiXG4gIH0pLCBcIjogXCIsIGl0ZW1zUGVyUGFnZSkpO1xuXG4gIHZhciBpdGVtcyA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBpdGVtc1BlclBhZ2VPcHRpb25zLm1hcChmdW5jdGlvbiAoaXRlbXNQZXJQYWdlT3B0aW9uKSB7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlDb250ZXh0TWVudUl0ZW0sIHtcbiAgICAgICAga2V5OiBpdGVtc1BlclBhZ2VPcHRpb24sXG4gICAgICAgIGljb246IGl0ZW1zUGVyUGFnZU9wdGlvbiA9PT0gaXRlbXNQZXJQYWdlID8gJ2NoZWNrJyA6ICdlbXB0eScsXG4gICAgICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soKSB7XG4gICAgICAgICAgY2xvc2VQb3BvdmVyKCk7XG4gICAgICAgICAgb25DaGFuZ2VJdGVtc1BlclBhZ2UoaXRlbXNQZXJQYWdlT3B0aW9uKTtcbiAgICAgICAgfSxcbiAgICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcInRhYmxlUGFnaW5hdGlvbi1cIi5jb25jYXQoaXRlbXNQZXJQYWdlT3B0aW9uLCBcIi1yb3dzXCIpXG4gICAgICB9LCBpdGVtc1BlclBhZ2VPcHRpb24gPT09IDAgPyBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgdG9rZW46IFwiZXVpVGFibGVQYWdpbmF0aW9uLnJvd3NQZXJQYWdlT3B0aW9uU2hvd0FsbFJvd3NcIixcbiAgICAgICAgZGVmYXVsdDogXCJTaG93IGFsbCByb3dzXCJcbiAgICAgIH0pIDogX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgIHRva2VuOiBcImV1aVRhYmxlUGFnaW5hdGlvbi5yb3dzUGVyUGFnZU9wdGlvblwiLFxuICAgICAgICB2YWx1ZXM6IHtcbiAgICAgICAgICByb3dzUGVyUGFnZTogaXRlbXNQZXJQYWdlT3B0aW9uXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IFwie3Jvd3NQZXJQYWdlfSByb3dzXCJcbiAgICAgIH0pKTtcbiAgICB9KTtcbiAgfSwgW2l0ZW1zUGVyUGFnZU9wdGlvbnMsIGl0ZW1zUGVyUGFnZSwgb25DaGFuZ2VJdGVtc1BlclBhZ2UsIGNsb3NlUG9wb3Zlcl0pO1xuXG4gIHZhciBpdGVtc1BlclBhZ2VQb3BvdmVyID0gX19fRW1vdGlvbkpTWChFdWlQb3BvdmVyLCB7XG4gICAgYnV0dG9uOiBidXR0b24sXG4gICAgaXNPcGVuOiBpc1BvcG92ZXJPcGVuLFxuICAgIGNsb3NlUG9wb3ZlcjogY2xvc2VQb3BvdmVyLFxuICAgIHBhbmVsUGFkZGluZ1NpemU6IFwibm9uZVwiLFxuICAgIGFuY2hvclBvc2l0aW9uOiBcInVwUmlnaHRcIlxuICB9LCBfX19FbW90aW9uSlNYKEV1aUNvbnRleHRNZW51UGFuZWwsIHtcbiAgICBpdGVtczogaXRlbXNcbiAgfSkpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUZsZXhHcm91cCwge1xuICAgIGp1c3RpZnlDb250ZW50OiBcInNwYWNlQmV0d2VlblwiLFxuICAgIGFsaWduSXRlbXM6IFwiY2VudGVyXCIsXG4gICAgcmVzcG9uc2l2ZTogZmFsc2UsXG4gICAgd3JhcDogdHJ1ZSxcbiAgICBndXR0ZXJTaXplOiBcInNcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpLXhTY3JvbGxcIlxuICB9LCBfX19FbW90aW9uSlNYKEV1aUZsZXhJdGVtLCB7XG4gICAgZ3JvdzogZmFsc2VcbiAgfSwgc2hvd1BlclBhZ2VPcHRpb25zICYmIGl0ZW1zUGVyUGFnZVBvcG92ZXIpLCBfX19FbW90aW9uSlNYKEV1aUZsZXhJdGVtLCB7XG4gICAgZ3JvdzogZmFsc2VcbiAgfSwgaXRlbXNQZXJQYWdlID4gMCAmJiBfX19FbW90aW9uSlNYKEV1aVBhZ2luYXRpb24sIF9leHRlbmRzKHtcbiAgICBwYWdlQ291bnQ6IHBhZ2VDb3VudCxcbiAgICBhY3RpdmVQYWdlOiBhY3RpdmVQYWdlLFxuICAgIG9uUGFnZUNsaWNrOiBvbkNoYW5nZVBhZ2VcbiAgfSwgcmVzdCkpKSk7XG59O1xuRXVpVGFibGVQYWdpbmF0aW9uLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAgICogT3B0aW9uIHRvIGNvbXBsZXRlbHkgaGlkZSB0aGUgXCJSb3dzIHBlciBwYWdlXCIgc2VsZWN0b3IuXG4gICAgICovXG4gIHNob3dQZXJQYWdlT3B0aW9uczogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogQ3VycmVudCBzZWxlY3Rpb24gZm9yIFwiUm93cyBwZXIgcGFnZVwiLlxuICAgICAqIFBhc3MgYDBgIHRvIGRpc3BsYXkgdGhlIHNlbGVjdGVkIFwiU2hvdyBhbGxcIiBvcHRpb24gYW5kIGhpZGUgdGhlIHBhZ2luYXRpb24uXG4gICAgICovXG4gIGl0ZW1zUGVyUGFnZTogUHJvcFR5cGVzLm51bWJlcixcblxuICAvKipcbiAgICAgKiBDdXN0b20gYXJyYXkgb2Ygb3B0aW9ucyBmb3IgXCJSb3dzIHBlciBwYWdlXCIuXG4gICAgICogUGFzcyBgMGAgYXMgb25lIG9mIHRoZSBvcHRpb25zIHRvIGNyZWF0ZSBhIFwiU2hvdyBhbGxcIiBvcHRpb24uXG4gICAgICovXG4gIGl0ZW1zUGVyUGFnZU9wdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCksXG5cbiAgLyoqXG4gICAgICogQ2xpY2sgaGFuZGxlciB0aGF0IHBhc3NlcyBiYWNrIHNlbGVjdGVkIGBwYWdlU2l6ZWAgbnVtYmVyXG4gICAgICovXG4gIG9uQ2hhbmdlSXRlbXNQZXJQYWdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25DaGFuZ2VQYWdlOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICAgKiBSZXF1aXJlcyB0aGUgYGlkYCBvZiB0aGUgdGFibGUgYmVpbmcgY29udHJvbGxlZFxuICAgICAqL1xuICBcImFyaWEtY29udHJvbHNcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmdcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJwYWdlQ291bnRcIiwgXCJhY3RpdmVQYWdlXCIsIFwib25QYWdlQ2xpY2tcIiwgXCJjb21wcmVzc2VkXCIsIFwiYXJpYS1jb250cm9sc1wiLCBcInJlc3BvbnNpdmVcIl07XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IEV1aVBhZ2luYXRpb25CdXR0b24gfSBmcm9tICcuL3BhZ2luYXRpb25fYnV0dG9uJztcbmltcG9ydCB7IEV1aUkxOG4sIHVzZUV1aUkxOG4gfSBmcm9tICcuLi9pMThuJztcbmltcG9ydCB7IEV1aVRleHQgfSBmcm9tICcuLi90ZXh0JztcbmltcG9ydCB7IEV1aVBhZ2luYXRpb25CdXR0b25BcnJvdyB9IGZyb20gJy4vcGFnaW5hdGlvbl9idXR0b25fYXJyb3cnO1xuaW1wb3J0IHsgdXNlSXNXaXRoaW5CcmVha3BvaW50cyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aVNjcmVlblJlYWRlck9ubHkgfSBmcm9tICcuLi9hY2Nlc3NpYmlsaXR5JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgTUFYX1ZJU0lCTEVfUEFHRVMgPSA1O1xudmFyIE5VTUJFUl9TVVJST1VORElOR19QQUdFUyA9IE1hdGguZmxvb3IoTUFYX1ZJU0lCTEVfUEFHRVMgKiAwLjUpO1xuZXhwb3J0IHZhciBFdWlQYWdpbmF0aW9uID0gZnVuY3Rpb24gRXVpUGFnaW5hdGlvbihfcmVmKSB7XG4gIHZhciBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIF9yZWYkcGFnZUNvdW50ID0gX3JlZi5wYWdlQ291bnQsXG4gICAgICBwYWdlQ291bnQgPSBfcmVmJHBhZ2VDb3VudCA9PT0gdm9pZCAwID8gMSA6IF9yZWYkcGFnZUNvdW50LFxuICAgICAgX3JlZiRhY3RpdmVQYWdlID0gX3JlZi5hY3RpdmVQYWdlLFxuICAgICAgYWN0aXZlUGFnZSA9IF9yZWYkYWN0aXZlUGFnZSA9PT0gdm9pZCAwID8gMCA6IF9yZWYkYWN0aXZlUGFnZSxcbiAgICAgIF9yZWYkb25QYWdlQ2xpY2sgPSBfcmVmLm9uUGFnZUNsaWNrLFxuICAgICAgb25QYWdlQ2xpY2sgPSBfcmVmJG9uUGFnZUNsaWNrID09PSB2b2lkIDAgPyBmdW5jdGlvbiAoKSB7fSA6IF9yZWYkb25QYWdlQ2xpY2ssXG4gICAgICBfY29tcHJlc3NlZCA9IF9yZWYuY29tcHJlc3NlZCxcbiAgICAgIGFyaWFDb250cm9scyA9IF9yZWZbJ2FyaWEtY29udHJvbHMnXSxcbiAgICAgIF9yZWYkcmVzcG9uc2l2ZSA9IF9yZWYucmVzcG9uc2l2ZSxcbiAgICAgIHJlc3BvbnNpdmUgPSBfcmVmJHJlc3BvbnNpdmUgPT09IHZvaWQgMCA/IFsneHMnLCAncyddIDogX3JlZiRyZXNwb25zaXZlLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBpc1Jlc3BvbnNpdmUgPSB1c2VJc1dpdGhpbkJyZWFrcG9pbnRzKHJlc3BvbnNpdmUsICEhcmVzcG9uc2l2ZSk7IC8vIEZvcmNlIHRvIGBjb21wcmVzc2VkYCB2ZXJzaW9uIGlmIHNwZWNpZmllZCBvciB3aXRoaW4gdGhlIHJlc3BvbnNpdmUgYnJlYWtwb2ludHNcblxuICB2YXIgY29tcHJlc3NlZCA9IF9jb21wcmVzc2VkIHx8IGlzUmVzcG9uc2l2ZTtcblxuICB2YXIgc2FmZUNsaWNrID0gZnVuY3Rpb24gc2FmZUNsaWNrKGUsIHBhZ2VJbmRleCkge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgIGlmIChhcmlhQ29udHJvbHMpIHtcbiAgICAgIHZhciBjb250cm9sbGVkRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGFyaWFDb250cm9scyk7XG5cbiAgICAgIGlmIChjb250cm9sbGVkRWxlbWVudCkge1xuICAgICAgICBjb250cm9sbGVkRWxlbWVudC5mb2N1cygpO1xuICAgICAgfVxuICAgIH1cblxuICAgIG9uUGFnZUNsaWNrKHBhZ2VJbmRleCk7XG4gIH07XG5cbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlQYWdpbmF0aW9uJywgY2xhc3NOYW1lKTtcblxuICB2YXIgZmlyc3RCdXR0b24gPSAocGFnZUNvdW50IDwgMSB8fCBjb21wcmVzc2VkKSAmJiBfX19FbW90aW9uSlNYKEV1aVBhZ2luYXRpb25CdXR0b25BcnJvdywge1xuICAgIHR5cGU6IFwiZmlyc3RcIixcbiAgICBhcmlhQ29udHJvbHM6IGFyaWFDb250cm9scyxcbiAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKGUpIHtcbiAgICAgIHJldHVybiBzYWZlQ2xpY2soZSwgMCk7XG4gICAgfSxcbiAgICBkaXNhYmxlZDogYWN0aXZlUGFnZSA9PT0gMFxuICB9KTtcblxuICB2YXIgcHJldmlvdXNCdXR0b24gPSBfX19FbW90aW9uSlNYKEV1aVBhZ2luYXRpb25CdXR0b25BcnJvdywge1xuICAgIHR5cGU6IFwicHJldmlvdXNcIixcbiAgICBhcmlhQ29udHJvbHM6IGFyaWFDb250cm9scyxcbiAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKGUpIHtcbiAgICAgIHJldHVybiBzYWZlQ2xpY2soZSwgYWN0aXZlUGFnZSAtIDEpO1xuICAgIH0sXG4gICAgZGlzYWJsZWQ6IGFjdGl2ZVBhZ2UgPT09IDBcbiAgfSk7XG5cbiAgdmFyIG5leHRCdXR0b24gPSBfX19FbW90aW9uSlNYKEV1aVBhZ2luYXRpb25CdXR0b25BcnJvdywge1xuICAgIHR5cGU6IFwibmV4dFwiLFxuICAgIGFyaWFDb250cm9sczogYXJpYUNvbnRyb2xzLFxuICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soZSkge1xuICAgICAgcmV0dXJuIHNhZmVDbGljayhlLCBhY3RpdmVQYWdlICsgMSk7XG4gICAgfSxcbiAgICBkaXNhYmxlZDogYWN0aXZlUGFnZSA9PT0gLTEgfHwgYWN0aXZlUGFnZSA9PT0gcGFnZUNvdW50IC0gMVxuICB9KTtcblxuICB2YXIgbGFzdEJ1dHRvbiA9IChwYWdlQ291bnQgPCAxIHx8IGNvbXByZXNzZWQpICYmIF9fX0Vtb3Rpb25KU1goRXVpUGFnaW5hdGlvbkJ1dHRvbkFycm93LCB7XG4gICAgdHlwZTogXCJsYXN0XCIsXG4gICAgYXJpYUNvbnRyb2xzOiBhcmlhQ29udHJvbHMsXG4gICAgb25DbGljazogZnVuY3Rpb24gb25DbGljayhlKSB7XG4gICAgICByZXR1cm4gc2FmZUNsaWNrKGUsIHBhZ2VDb3VudCA/IHBhZ2VDb3VudCAtIDEgOiAtMSk7XG4gICAgfSxcbiAgICBkaXNhYmxlZDogYWN0aXZlUGFnZSA9PT0gLTEgfHwgYWN0aXZlUGFnZSA9PT0gcGFnZUNvdW50IC0gMVxuICB9KTtcblxuICB2YXIgY2VudGVyUGFnZUNvdW50O1xuXG4gIGlmIChwYWdlQ291bnQpIHtcbiAgICB2YXIgc2hhcmVkQnV0dG9uUHJvcHMgPSB7XG4gICAgICBhY3RpdmVQYWdlOiBhY3RpdmVQYWdlLFxuICAgICAgYXJpYUNvbnRyb2xzOiBhcmlhQ29udHJvbHMsXG4gICAgICBzYWZlQ2xpY2s6IHNhZmVDbGljayxcbiAgICAgIHBhZ2VDb3VudDogcGFnZUNvdW50XG4gICAgfTtcblxuICAgIGlmIChjb21wcmVzc2VkKSB7XG4gICAgICBjZW50ZXJQYWdlQ291bnQgPSBfX19FbW90aW9uSlNYKEV1aVRleHQsIHtcbiAgICAgICAgc2l6ZTogXCJzXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJldWlQYWdpbmF0aW9uX19jb21wcmVzc2VkVGV4dFwiXG4gICAgICB9LCBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgdG9rZW46IFwiZXVpUGFnaW5hdGlvbi5wYWdlT2ZUb3RhbENvbXByZXNzZWRcIixcbiAgICAgICAgZGVmYXVsdDogXCJ7cGFnZX0gb2Yge3RvdGFsfVwiLFxuICAgICAgICB2YWx1ZXM6IHtcbiAgICAgICAgICBwYWdlOiBfX19FbW90aW9uSlNYKFwic3BhblwiLCBudWxsLCBhY3RpdmVQYWdlICsgMSksXG4gICAgICAgICAgdG90YWw6IF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIG51bGwsIHBhZ2VDb3VudClcbiAgICAgICAgfVxuICAgICAgfSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgcGFnZXMgPSBbXTtcbiAgICAgIHZhciBmaXJzdFBhZ2VJblJhbmdlID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oYWN0aXZlUGFnZSAtIE5VTUJFUl9TVVJST1VORElOR19QQUdFUywgcGFnZUNvdW50IC0gTUFYX1ZJU0lCTEVfUEFHRVMpKTtcbiAgICAgIHZhciBsYXN0UGFnZUluUmFuZ2UgPSBNYXRoLm1pbihwYWdlQ291bnQsIGZpcnN0UGFnZUluUmFuZ2UgKyBNQVhfVklTSUJMRV9QQUdFUyk7XG5cbiAgICAgIGZvciAodmFyIGkgPSBmaXJzdFBhZ2VJblJhbmdlLCBpbmRleCA9IDA7IGkgPCBsYXN0UGFnZUluUmFuZ2U7IGkrKywgaW5kZXgrKykge1xuICAgICAgICBwYWdlcy5wdXNoKF9fX0Vtb3Rpb25KU1goUGFnaW5hdGlvbkJ1dHRvbldyYXBwZXIsIF9leHRlbmRzKHtcbiAgICAgICAgICBwYWdlSW5kZXg6IGksXG4gICAgICAgICAga2V5OiBpXG4gICAgICAgIH0sIHNoYXJlZEJ1dHRvblByb3BzKSkpO1xuICAgICAgfVxuXG4gICAgICB2YXIgZmlyc3RQYWdlQnV0dG9ucyA9IFtdO1xuXG4gICAgICBpZiAoZmlyc3RQYWdlSW5SYW5nZSA+IDApIHtcbiAgICAgICAgZmlyc3RQYWdlQnV0dG9ucy5wdXNoKF9fX0Vtb3Rpb25KU1goUGFnaW5hdGlvbkJ1dHRvbldyYXBwZXIsIF9leHRlbmRzKHtcbiAgICAgICAgICBwYWdlSW5kZXg6IDAsXG4gICAgICAgICAga2V5OiAwXG4gICAgICAgIH0sIHNoYXJlZEJ1dHRvblByb3BzKSkpO1xuXG4gICAgICAgIGlmIChmaXJzdFBhZ2VJblJhbmdlID4gMSAmJiBmaXJzdFBhZ2VJblJhbmdlICE9PSAyKSB7XG4gICAgICAgICAgZmlyc3RQYWdlQnV0dG9ucy5wdXNoKF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgICAga2V5OiBcInN0YXJ0aW5nRWxsaXBzZXNcIixcbiAgICAgICAgICAgIHRva2VuOiBcImV1aVBhZ2luYXRpb24uZmlyc3RSYW5nZUFyaWFMYWJlbFwiLFxuICAgICAgICAgICAgZGVmYXVsdDogXCJTa2lwcGluZyBwYWdlcyAyIHRvIHtsYXN0UGFnZX1cIixcbiAgICAgICAgICAgIHZhbHVlczoge1xuICAgICAgICAgICAgICBsYXN0UGFnZTogZmlyc3RQYWdlSW5SYW5nZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIGZ1bmN0aW9uIChmaXJzdFJhbmdlQXJpYUxhYmVsKSB7XG4gICAgICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImxpXCIsIHtcbiAgICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IGZpcnN0UmFuZ2VBcmlhTGFiZWwsXG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlQYWdpbmF0aW9uQnV0dG9uLWlzUGxhY2Vob2xkZXIgZXVpUGFnaW5hdGlvbl9faXRlbVwiXG4gICAgICAgICAgICB9LCBcIlxcdTIwMjZcIik7XG4gICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKGZpcnN0UGFnZUluUmFuZ2UgPT09IDIpIHtcbiAgICAgICAgICBmaXJzdFBhZ2VCdXR0b25zLnB1c2goX19fRW1vdGlvbkpTWChQYWdpbmF0aW9uQnV0dG9uV3JhcHBlciwgX2V4dGVuZHMoe1xuICAgICAgICAgICAgcGFnZUluZGV4OiAxLFxuICAgICAgICAgICAga2V5OiAxXG4gICAgICAgICAgfSwgc2hhcmVkQnV0dG9uUHJvcHMpKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGxhc3RQYWdlQnV0dG9ucyA9IFtdO1xuXG4gICAgICBpZiAobGFzdFBhZ2VJblJhbmdlIDwgcGFnZUNvdW50KSB7XG4gICAgICAgIGlmIChsYXN0UGFnZUluUmFuZ2UgKyAxID09PSBwYWdlQ291bnQgLSAxKSB7XG4gICAgICAgICAgbGFzdFBhZ2VCdXR0b25zLnB1c2goX19fRW1vdGlvbkpTWChQYWdpbmF0aW9uQnV0dG9uV3JhcHBlciwgX2V4dGVuZHMoe1xuICAgICAgICAgICAgcGFnZUluZGV4OiBsYXN0UGFnZUluUmFuZ2UsXG4gICAgICAgICAgICBrZXk6IGxhc3RQYWdlSW5SYW5nZVxuICAgICAgICAgIH0sIHNoYXJlZEJ1dHRvblByb3BzKSkpO1xuICAgICAgICB9IGVsc2UgaWYgKGxhc3RQYWdlSW5SYW5nZSA8IHBhZ2VDb3VudCAtIDEpIHtcbiAgICAgICAgICBsYXN0UGFnZUJ1dHRvbnMucHVzaChfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICAgIGtleTogXCJlbmRpbmdFbGxpcHNlc1wiLFxuICAgICAgICAgICAgdG9rZW46IFwiZXVpUGFnaW5hdGlvbi5sYXN0UmFuZ2VBcmlhTGFiZWxcIixcbiAgICAgICAgICAgIGRlZmF1bHQ6IFwiU2tpcHBpbmcgcGFnZXMge2ZpcnN0UGFnZX0gdG8ge2xhc3RQYWdlfVwiLFxuICAgICAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgICAgIGZpcnN0UGFnZTogbGFzdFBhZ2VJblJhbmdlICsgMSxcbiAgICAgICAgICAgICAgbGFzdFBhZ2U6IHBhZ2VDb3VudCAtIDFcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCBmdW5jdGlvbiAobGFzdFJhbmdlQXJpYUxhYmVsKSB7XG4gICAgICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImxpXCIsIHtcbiAgICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IGxhc3RSYW5nZUFyaWFMYWJlbCxcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcImV1aVBhZ2luYXRpb25CdXR0b24taXNQbGFjZWhvbGRlciBldWlQYWdpbmF0aW9uX19pdGVtXCJcbiAgICAgICAgICAgIH0sIFwiXFx1MjAyNlwiKTtcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0UGFnZUJ1dHRvbnMucHVzaChfX19FbW90aW9uSlNYKFBhZ2luYXRpb25CdXR0b25XcmFwcGVyLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgcGFnZUluZGV4OiBwYWdlQ291bnQgLSAxLFxuICAgICAgICAgIGtleTogcGFnZUNvdW50IC0gMVxuICAgICAgICB9LCBzaGFyZWRCdXR0b25Qcm9wcykpKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHNlbGVjdGFibGVQYWdlcyA9IHBhZ2VzO1xuXG4gICAgICB2YXIgYWNjZXNzaWJsZU5hbWUgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHJlc3RbJ2FyaWEtbGFiZWwnXSAmJiB7XG4gICAgICAgICdhcmlhLWxhYmVsJzogcmVzdFsnYXJpYS1sYWJlbCddXG4gICAgICB9KSwgcmVzdFsnYXJpYS1sYWJlbGxlZGJ5J10gJiYge1xuICAgICAgICAnYXJpYS1sYWJlbGxlZGJ5JzogcmVzdFsnYXJpYS1sYWJlbGxlZGJ5J11cbiAgICAgIH0pO1xuXG4gICAgICBjZW50ZXJQYWdlQ291bnQgPSBfX19FbW90aW9uSlNYKFwidWxcIiwgX2V4dGVuZHMoe30sIGFjY2Vzc2libGVOYW1lLCB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJldWlQYWdpbmF0aW9uX19saXN0XCJcbiAgICAgIH0pLCBmaXJzdFBhZ2VCdXR0b25zLCBzZWxlY3RhYmxlUGFnZXMsIGxhc3RQYWdlQnV0dG9ucyk7XG4gICAgfVxuICB9IC8vIEFsbCB0aGUgaTE4biBzdHJpbmdzIHVzZWQgdG8gYnVpbGQgdGhlIHdob2xlIFNSLW9ubHkgdGV4dFxuXG5cbiAgdmFyIGxhc3RMYWJlbCA9IHVzZUV1aUkxOG4oJ2V1aVBhZ2luYXRpb24ubGFzdCcsICdMYXN0Jyk7XG4gIHZhciBwYWdlTGFiZWwgPSB1c2VFdWlJMThuKCdldWlQYWdpbmF0aW9uLnBhZ2UnLCAnUGFnZScpO1xuICB2YXIgb2ZMYWJlbCA9IHVzZUV1aUkxOG4oJ2V1aVBhZ2luYXRpb24ub2YnLCAnb2YnKTtcbiAgdmFyIGNvbGxlY3Rpb25MYWJlbCA9IHVzZUV1aUkxOG4oJ2V1aVBhZ2luYXRpb24uY29sbGVjdGlvbicsICdjb2xsZWN0aW9uJyk7XG4gIHZhciBmcm9tRW5kTGFiZWwgPSB1c2VFdWlJMThuKCdldWlQYWdpbmF0aW9uLmZyb21FbmRMYWJlbCcsICdmcm9tIGVuZCcpOyAvLyBCYXNlZCBvbiB0aGUgYGFjdGl2ZVBhZ2VgIGNvdW50LCBidWlsZCB0aGUgZnJvbnQgb2YgdGhlIFNSLW9ubHkgdGV4dFxuICAvLyBpLmUuIGBQYWdlIDFgLCBgUGFnZSAyIGZyb20gZW5kYCwgYExhc3QgUGFnZWBcblxuICB2YXIgYWNjZXNzaWJsZVBhZ2VTdHJpbmcgPSBmdW5jdGlvbiBhY2Nlc3NpYmxlUGFnZVN0cmluZygpIHtcbiAgICBpZiAoYWN0aXZlUGFnZSA8IC0xKSByZXR1cm4gXCJcIi5jb25jYXQocGFnZUxhYmVsLCBcIiBcIikuY29uY2F0KE1hdGguYWJzKGFjdGl2ZVBhZ2UpLCBcIiBcIikuY29uY2F0KGZyb21FbmRMYWJlbCk7XG4gICAgaWYgKGFjdGl2ZVBhZ2UgPT09IC0xKSByZXR1cm4gXCJcIi5jb25jYXQobGFzdExhYmVsLCBcIiBcIikuY29uY2F0KHBhZ2VMYWJlbCk7XG4gICAgcmV0dXJuIFwiXCIuY29uY2F0KHBhZ2VMYWJlbCwgXCIgXCIpLmNvbmNhdChhY3RpdmVQYWdlICsgMSk7XG4gIH07IC8vIElmIGBwYWdlQ291bnRgIGlzIHVua25vd24gY2FsbCBpdCBgY29sbGVjdGlvbmBcblxuXG4gIHZhciBhY2Nlc3NpYmxlQ29sbGVjdGlvblN0cmluZyA9IHBhZ2VDb3VudCA9PT0gMCA/IGNvbGxlY3Rpb25MYWJlbCA6IHBhZ2VDb3VudC50b1N0cmluZygpOyAvLyBDcmVhdGUgdGhlIHdob2xlIHN0cmluZyB3aXRoIHRvdGFsIHBhZ2VDb3VudCBvciBgY29sbGVjdGlvbmBcblxuICB2YXIgYWNjZXNzaWJsZVBhZ2VDb3VudCA9IFwiXCIuY29uY2F0KGFjY2Vzc2libGVQYWdlU3RyaW5nKCksIFwiIFwiKS5jb25jYXQob2ZMYWJlbCwgXCIgXCIpLmNvbmNhdChhY2Nlc3NpYmxlQ29sbGVjdGlvblN0cmluZyk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwibmF2XCIsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goRXVpU2NyZWVuUmVhZGVyT25seSwgbnVsbCwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgIFwiYXJpYS1hdG9taWNcIjogXCJ0cnVlXCIsXG4gICAgXCJhcmlhLXJlbGV2YW50XCI6IFwiYWRkaXRpb25zIHRleHRcIixcbiAgICByb2xlOiBcInN0YXR1c1wiXG4gIH0sIGFjY2Vzc2libGVQYWdlQ291bnQpKSwgZmlyc3RCdXR0b24sIHByZXZpb3VzQnV0dG9uLCBjZW50ZXJQYWdlQ291bnQsIG5leHRCdXR0b24sIGxhc3RCdXR0b24pO1xufTtcbkV1aVBhZ2luYXRpb24ucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogVGhlIHRvdGFsIG51bWJlciBvZiBwYWdlcy5cbiAgICAgKiBQYXNzIGAwYCBpZiB0b3RhbCBjb3VudCBpcyB1bmtub3duLlxuICAgICAqL1xuICBwYWdlQ291bnQ6IFByb3BUeXBlcy5udW1iZXIsXG5cbiAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgcGFnZSB1c2luZyBhIHplcm8gYmFzZWQgaW5kZXguXG4gICAgICogU28gaWYgeW91IHNldCB0aGUgYWN0aXZlUGFnZSB0byAxLCBpdCB3aWxsIGFjdGl2YXRlIHRoZSBzZWNvbmQgcGFnZS5cbiAgICAgKiBQYXNzIGAtMWAgZm9yIGZvcmNpbmcgdG8gbGFzdCBwYWdlLlxuICAgICAqL1xuICBhY3RpdmVQYWdlOiBQcm9wVHlwZXMubnVtYmVyLFxuXG4gIC8qKlxuICAgICAqIENsaWNrIGhhbmRsZXIgdGhhdCBwYXNzZXMgYmFjayB0aGUgaW50ZXJuYWxseSBjYWxjdWxhdGVkIGBhY3RpdmVQYWdlYCBpbmRleFxuICAgICAqL1xuICBvblBhZ2VDbGljazogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAgICogSWYgdHJ1ZSwgd2lsbCBvbmx5IHNob3cgbmV4dC9wcmV2IGFycm93cyBhbmQgc2ltcGxpZmllZCBudW1iZXIgc2V0LlxuICAgICAqL1xuICBjb21wcmVzc2VkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBJZiBwYXNzZWQgaW4sIHBhc3NlcyB2YWx1ZSB0aHJvdWdoIHRvIGVhY2ggYnV0dG9uIHRvIHNldCBhcmlhLWNvbnRyb2xzLlxuICAgICAqL1xuICBcImFyaWEtY29udHJvbHNcIjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgKiBBdXRvbWF0aWNhbGx5IHJlZHVjZXMgdG8gdGhlIGBjb21wcmVzc2VkYCB2ZXJzaW9uIG9uIHNtYWxsZXIgc2NyZWVucy5cbiAgICAgKiBSZW1vdmUgY29tcGxldGVseSB3aXRoIGBmYWxzZWAgb3IgcHJvdmlkZSB5b3VyIG93biBsaXN0IG9mIHJlc3BvbnNpdmUgYnJlYWtwb2ludHMuXG4gICAgICovXG4gIHJlc3BvbnNpdmU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbZmFsc2VdKSwgUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkKS5pc1JlcXVpcmVkXSlcbn07XG5cbnZhciBQYWdpbmF0aW9uQnV0dG9uV3JhcHBlciA9IGZ1bmN0aW9uIFBhZ2luYXRpb25CdXR0b25XcmFwcGVyKF9yZWYyKSB7XG4gIHZhciBwYWdlSW5kZXggPSBfcmVmMi5wYWdlSW5kZXgsXG4gICAgICBfcmVmMiRpbkxpc3QgPSBfcmVmMi5pbkxpc3QsXG4gICAgICBpbkxpc3QgPSBfcmVmMiRpbkxpc3QgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmMiRpbkxpc3QsXG4gICAgICBhY3RpdmVQYWdlID0gX3JlZjIuYWN0aXZlUGFnZSxcbiAgICAgIHBhZ2VDb3VudCA9IF9yZWYyLnBhZ2VDb3VudCxcbiAgICAgIGFyaWFDb250cm9scyA9IF9yZWYyLmFyaWFDb250cm9scyxcbiAgICAgIHNhZmVDbGljayA9IF9yZWYyLnNhZmVDbGljayxcbiAgICAgIGRpc2FibGVkID0gX3JlZjIuZGlzYWJsZWQ7XG5cbiAgdmFyIGJ1dHRvbiA9IF9fX0Vtb3Rpb25KU1goRXVpUGFnaW5hdGlvbkJ1dHRvbiwge1xuICAgIGlzQWN0aXZlOiBwYWdlSW5kZXggPT09IGFjdGl2ZVBhZ2UsXG4gICAgdG90YWxQYWdlczogcGFnZUNvdW50LFxuICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soZSkge1xuICAgICAgcmV0dXJuIHNhZmVDbGljayhlLCBwYWdlSW5kZXgpO1xuICAgIH0sXG4gICAgcGFnZUluZGV4OiBwYWdlSW5kZXgsXG4gICAgXCJhcmlhLWNvbnRyb2xzXCI6IGFyaWFDb250cm9scyxcbiAgICBkaXNhYmxlZDogZGlzYWJsZWRcbiAgfSk7XG5cbiAgaWYgKGluTGlzdCkge1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwibGlcIiwge1xuICAgICAgY2xhc3NOYW1lOiBcImV1aVBhZ2luYXRpb25fX2l0ZW1cIlxuICAgIH0sIGJ1dHRvbik7XG4gIH1cblxuICByZXR1cm4gYnV0dG9uO1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcImlzQWN0aXZlXCIsIFwiaXNQbGFjZWhvbGRlclwiLCBcInBhZ2VJbmRleFwiLCBcInRvdGFsUGFnZXNcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IEV1aUJ1dHRvbkVtcHR5IH0gZnJvbSAnLi4vYnV0dG9uJztcbmltcG9ydCB7IEV1aUkxOG4gfSBmcm9tICcuLi9pMThuJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVBhZ2luYXRpb25CdXR0b24gPSBmdW5jdGlvbiBFdWlQYWdpbmF0aW9uQnV0dG9uKF9yZWYpIHtcbiAgdmFyIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgaXNBY3RpdmUgPSBfcmVmLmlzQWN0aXZlLFxuICAgICAgaXNQbGFjZWhvbGRlciA9IF9yZWYuaXNQbGFjZWhvbGRlcixcbiAgICAgIHBhZ2VJbmRleCA9IF9yZWYucGFnZUluZGV4LFxuICAgICAgdG90YWxQYWdlcyA9IF9yZWYudG90YWxQYWdlcyxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVBhZ2luYXRpb25CdXR0b24nLCBjbGFzc05hbWUsIHtcbiAgICAnZXVpUGFnaW5hdGlvbkJ1dHRvbi1pc0FjdGl2ZSc6IGlzQWN0aXZlLFxuICAgICdldWlQYWdpbmF0aW9uQnV0dG9uLWlzUGxhY2Vob2xkZXInOiBpc1BsYWNlaG9sZGVyXG4gIH0pO1xuXG4gIHZhciBwcm9wcyA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgc2l6ZTogJ3MnLFxuICAgIGNvbG9yOiAndGV4dCcsXG4gICAgJ2RhdGEtdGVzdC1zdWJqJzogXCJwYWdpbmF0aW9uLWJ1dHRvbi1cIi5jb25jYXQocGFnZUluZGV4KSxcbiAgICBpc0Rpc2FibGVkOiBpc1BsYWNlaG9sZGVyIHx8IGlzQWN0aXZlXG4gIH0sIGlzQWN0aXZlICYmIHtcbiAgICAnYXJpYS1jdXJyZW50JzogdHJ1ZVxuICB9KSwgcmVzdFsnYXJpYS1jb250cm9scyddICYmIHtcbiAgICBocmVmOiBcIiNcIi5jb25jYXQocmVzdFsnYXJpYS1jb250cm9scyddKVxuICB9KSwgcmVzdCk7XG5cbiAgdmFyIHBhZ2VOdW1iZXIgPSBwYWdlSW5kZXggKyAxO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgdG9rZW46IFwiZXVpUGFnaW5hdGlvbkJ1dHRvbi5sb25nUGFnZVN0cmluZ1wiLFxuICAgIGRlZmF1bHQ6IFwiUGFnZSB7cGFnZX0gb2Yge3RvdGFsUGFnZXN9XCIsXG4gICAgdmFsdWVzOiB7XG4gICAgICBwYWdlOiBwYWdlTnVtYmVyLFxuICAgICAgdG90YWxQYWdlczogdG90YWxQYWdlc1xuICAgIH1cbiAgfSwgZnVuY3Rpb24gKGxvbmdQYWdlU3RyaW5nKSB7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgdG9rZW46IFwiZXVpUGFnaW5hdGlvbkJ1dHRvbi5zaG9ydFBhZ2VTdHJpbmdcIixcbiAgICAgIGRlZmF1bHQ6IFwiUGFnZSB7cGFnZX1cIixcbiAgICAgIHZhbHVlczoge1xuICAgICAgICBwYWdlOiBwYWdlTnVtYmVyXG4gICAgICB9XG4gICAgfSwgZnVuY3Rpb24gKHNob3J0UGFnZVN0cmluZykge1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpQnV0dG9uRW1wdHksIF9leHRlbmRzKHtcbiAgICAgICAgXCJhcmlhLWxhYmVsXCI6IHRvdGFsUGFnZXMgPyBsb25nUGFnZVN0cmluZyA6IHNob3J0UGFnZVN0cmluZ1xuICAgICAgfSwgcHJvcHMpLCBwYWdlTnVtYmVyKTtcbiAgICB9KTtcbiAgfSk7XG59O1xuRXVpUGFnaW5hdGlvbkJ1dHRvbi5wcm9wVHlwZXMgPSB7XG4gIGhyZWY6IFByb3BUeXBlcy5zdHJpbmcsXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgICAqIEFueSBvZiBvdXIgbmFtZWQgY29sb3JzXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogQW55IG9mIG91ciBuYW1lZCBjb2xvcnNcbiAgICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcy5vbmVPZihbXCJwcmltYXJ5XCIsIFwiZGFuZ2VyXCIsIFwidGV4dFwiLCBcImdob3N0XCIsIFwic3VjY2Vzc1wiLCBcIndhcm5pbmdcIl0pLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2YoW1wieHNcIiwgXCJzXCIsIFwibVwiXSksXG5cbiAgLyoqXG4gICAgICogRW5zdXJlIHRoZSB0ZXh0IG9mIHRoZSBidXR0b24gc2l0cyBmbHVzaCB0byB0aGUgbGVmdCwgcmlnaHQsIG9yIGJvdGggc2lkZXMgb2YgaXRzIGNvbnRhaW5lclxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIEVuc3VyZSB0aGUgdGV4dCBvZiB0aGUgYnV0dG9uIHNpdHMgZmx1c2ggdG8gdGhlIGxlZnQsIHJpZ2h0LCBvciBib3RoIHNpZGVzIG9mIGl0cyBjb250YWluZXJcbiAgICAgKi9cbiAgZmx1c2g6IFByb3BUeXBlcy5vbmVPZihbXCJsZWZ0XCIsIFwicmlnaHRcIiwgXCJib3RoXCJdKSxcblxuICAvKipcbiAgICAgKiBgZGlzYWJsZWRgIGlzIGFsc28gYWxsb3dlZFxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIGBkaXNhYmxlZGAgaXMgYWxzbyBhbGxvd2VkXG4gICAgICovXG4gIGlzRGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIEZvcmNlIGRpc2FibGVzIHRoZSBidXR0b24gYW5kIGNoYW5nZXMgdGhlIGljb24gdG8gYSBsb2FkaW5nIHNwaW5uZXJcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBGb3JjZSBkaXNhYmxlcyB0aGUgYnV0dG9uIGFuZCBjaGFuZ2VzIHRoZSBpY29uIHRvIGEgbG9hZGluZyBzcGlubmVyXG4gICAgICovXG4gIGlzTG9hZGluZzogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogQXBwbGllcyB0aGUgYm9vbGVhbiBzdGF0ZSBhcyB0aGUgYGFyaWEtcHJlc3NlZGAgcHJvcGVydHkgdG8gY3JlYXRlIGEgdG9nZ2xlIGJ1dHRvbi5cbiAgICAgKiAqT25seSB1c2Ugd2hlbiB0aGUgcmVhZGFibGUgdGV4dCBkb2VzIG5vdCBjaGFuZ2UgYmV0d2VlbiBzdGF0ZXMuKlxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIEFwcGxpZXMgdGhlIGJvb2xlYW4gc3RhdGUgYXMgdGhlIGBhcmlhLXByZXNzZWRgIHByb3BlcnR5IHRvIGNyZWF0ZSBhIHRvZ2dsZSBidXR0b24uXG4gICAgICogKk9ubHkgdXNlIHdoZW4gdGhlIHJlYWRhYmxlIHRleHQgZG9lcyBub3QgY2hhbmdlIGJldHdlZW4gc3RhdGVzLipcbiAgICAgKi9cbiAgaXNTZWxlY3RlZDogUHJvcFR5cGVzLmJvb2wsXG4gIHRhcmdldDogUHJvcFR5cGVzLnN0cmluZyxcbiAgcmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICB0eXBlOiBQcm9wVHlwZXMub25lT2YoW1wiYnV0dG9uXCIsIFwic3VibWl0XCJdKSxcbiAgYnV0dG9uUmVmOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIE9iamVjdCBvZiBwcm9wcyBwYXNzZWQgdG8gdGhlIDxzcGFuLz4gd3JhcHBpbmcgdGhlIGJ1dHRvbidzIGNvbnRlbnRcbiAgICAgKi9cbiAgY29udGVudFByb3BzOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIEFueSBgdHlwZWAgYWNjZXB0ZWQgYnkgRXVpSWNvblxuICAgICAqL1xuICBpY29uVHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYWxlcnRcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhc3Rlcmlza1wiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJib2x0XCIsIFwiYm94ZXNIb3Jpem9udGFsXCIsIFwiYm94ZXNWZXJ0aWNhbFwiLCBcImJyYW5jaFwiLCBcImJyYW5jaFVzZXJcIiwgXCJicm9vbVwiLCBcImJydXNoXCIsIFwiYnVnXCIsIFwiYnVsbHNleWVcIiwgXCJjYWxlbmRhclwiLCBcImNhbnZhc0FwcFwiLCBcImNhc2VzQXBwXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsb2NrXCIsIFwiY2xvdWREcml6emxlXCIsIFwiY2xvdWRTdG9ybXlcIiwgXCJjbG91ZFN1bm55XCIsIFwiY2x1c3RlclwiLCBcImNvZGVBcHBcIiwgXCJjb2xvclwiLCBcImNvbXB1dGVcIiwgXCJjb25zb2xlXCIsIFwiY29uc29sZUFwcFwiLCBcImNvbnRhaW5lclwiLCBcImNvbnRpbnVpdHlBYm92ZVwiLCBcImNvbnRpbnVpdHlBYm92ZUJlbG93XCIsIFwiY29udGludWl0eUJlbG93XCIsIFwiY29udGludWl0eVdpdGhpblwiLCBcImNvbnRyb2xzSG9yaXpvbnRhbFwiLCBcImNvbnRyb2xzVmVydGljYWxcIiwgXCJjb3B5XCIsIFwiY29weUNsaXBib2FyZFwiLCBcImNyZWF0ZUFkdmFuY2VkSm9iXCIsIFwiY3JlYXRlTXVsdGlNZXRyaWNKb2JcIiwgXCJjcmVhdGVQb3B1bGF0aW9uSm9iXCIsIFwiY3JlYXRlU2luZ2xlTWV0cmljSm9iXCIsIFwiY3Jvc3NcIiwgXCJjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcFwiLCBcImNyb3NzSW5BQ2lyY2xlRmlsbGVkXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpc2NvdmVyQXBwXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG91YmxlQXJyb3dMZWZ0XCIsIFwiZG91YmxlQXJyb3dSaWdodFwiLCBcImRvd25sb2FkXCIsIFwiZWRpdG9yQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JBbGlnbkxlZnRcIiwgXCJlZGl0b3JBbGlnblJpZ2h0XCIsIFwiZWRpdG9yQm9sZFwiLCBcImVkaXRvckNoZWNrbGlzdFwiLCBcImVkaXRvckNvZGVCbG9ja1wiLCBcImVkaXRvckNvbW1lbnRcIiwgXCJlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbFwiLCBcImVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbFwiLCBcImVkaXRvckhlYWRpbmdcIiwgXCJlZGl0b3JJdGFsaWNcIiwgXCJlZGl0b3JJdGVtQWxpZ25Cb3R0b21cIiwgXCJlZGl0b3JJdGVtQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JJdGVtQWxpZ25MZWZ0XCIsIFwiZWRpdG9ySXRlbUFsaWduTWlkZGxlXCIsIFwiZWRpdG9ySXRlbUFsaWduUmlnaHRcIiwgXCJlZGl0b3JJdGVtQWxpZ25Ub3BcIiwgXCJlZGl0b3JMaW5rXCIsIFwiZWRpdG9yT3JkZXJlZExpc3RcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnRcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BMZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BSaWdodFwiLCBcImVkaXRvclJlZG9cIiwgXCJlZGl0b3JTdHJpa2VcIiwgXCJlZGl0b3JUYWJsZVwiLCBcImVkaXRvclVuZGVybGluZVwiLCBcImVkaXRvclVuZG9cIiwgXCJlZGl0b3JVbm9yZGVyZWRMaXN0XCIsIFwiZW1haWxcIiwgXCJlbXB0eVwiLCBcImVtc0FwcFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibW9iaWxlXCIsIFwibW9uaXRvcmluZ0FwcFwiLCBcIm1vb25cIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFwZXJDbGlwXCIsIFwicGFydGlhbFwiLCBcInBhdXNlXCIsIFwicGF5bWVudFwiLCBcInBlbmNpbFwiLCBcInBlcmNlbnRcIiwgXCJwaW5cIiwgXCJwaW5GaWxsZWRcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBsYXlcIiwgXCJwbGF5RmlsbGVkXCIsIFwicGx1c1wiLCBcInBsdXNJbkNpcmNsZVwiLCBcInBsdXNJbkNpcmNsZUZpbGxlZFwiLCBcInBvcG91dFwiLCBcInB1c2hcIiwgXCJxdWVzdGlvbkluQ2lyY2xlXCIsIFwicXVvdGVcIiwgXCJyZWNlbnRseVZpZXdlZEFwcFwiLCBcInJlZnJlc2hcIiwgXCJyZWdyZXNzaW9uSm9iXCIsIFwicmVwb3J0ZXJcIiwgXCJyZXBvcnRpbmdBcHBcIiwgXCJyZXR1cm5LZXlcIiwgXCJzYXZlXCIsIFwic2F2ZWRPYmplY3RzQXBwXCIsIFwic2NhbGVcIiwgXCJzZWFyY2hcIiwgXCJzZWFyY2hQcm9maWxlckFwcFwiLCBcInNlY3VyaXR5QW5hbHl0aWNzQXBwXCIsIFwic2VjdXJpdHlBcHBcIiwgXCJzZWN1cml0eVNpZ25hbFwiLCBcInNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWRcIiwgXCJzZWN1cml0eVNpZ25hbFJlc29sdmVkXCIsIFwic2Vzc2lvblZpZXdlclwiLCBcInNoYXJkXCIsIFwic2hhcmVcIiwgXCJzbm93Zmxha2VcIiwgXCJzb3J0RG93blwiLCBcInNvcnRMZWZ0XCIsIFwic29ydFJpZ2h0XCIsIFwic29ydFVwXCIsIFwic29ydGFibGVcIiwgXCJzcGFjZXNBcHBcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EZW5zZVZlY3RvclwiLCBcInRva2VuRWxlbWVudFwiLCBcInRva2VuRW51bVwiLCBcInRva2VuRW51bU1lbWJlclwiLCBcInRva2VuRXZlbnRcIiwgXCJ0b2tlbkV4Y2VwdGlvblwiLCBcInRva2VuRmllbGRcIiwgXCJ0b2tlbkZpbGVcIiwgXCJ0b2tlbkZsYXR0ZW5lZFwiLCBcInRva2VuRnVuY3Rpb25cIiwgXCJ0b2tlbkdlb1wiLCBcInRva2VuSGlzdG9ncmFtXCIsIFwidG9rZW5JbnRlcmZhY2VcIiwgXCJ0b2tlbklQXCIsIFwidG9rZW5Kb2luXCIsIFwidG9rZW5LZXlcIiwgXCJ0b2tlbktleXdvcmRcIiwgXCJ0b2tlbk1ldGhvZFwiLCBcInRva2VuTWV0cmljQ291bnRlclwiLCBcInRva2VuTWV0cmljR2F1Z2VcIiwgXCJ0b2tlbk1vZHVsZVwiLCBcInRva2VuTmFtZXNwYWNlXCIsIFwidG9rZW5OZXN0ZWRcIiwgXCJ0b2tlbk51bGxcIiwgXCJ0b2tlbk51bWJlclwiLCBcInRva2VuT2JqZWN0XCIsIFwidG9rZW5PcGVyYXRvclwiLCBcInRva2VuUGFja2FnZVwiLCBcInRva2VuUGFyYW1ldGVyXCIsIFwidG9rZW5QZXJjb2xhdG9yXCIsIFwidG9rZW5Qcm9wZXJ0eVwiLCBcInRva2VuUmFuZ2VcIiwgXCJ0b2tlblJhbmtGZWF0dXJlXCIsIFwidG9rZW5SYW5rRmVhdHVyZXNcIiwgXCJ0b2tlblJlcG9cIiwgXCJ0b2tlblNlYXJjaFR5cGVcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkXSksXG5cbiAgLyoqXG4gICAgICogQ2FuIG9ubHkgYmUgb25lIHNpZGUgYGxlZnRgIG9yIGByaWdodGBcbiAgICAgKi9cbiAgaWNvblNpZGU6IFByb3BUeXBlcy5vbmVPZihbXCJsZWZ0XCIsIFwicmlnaHRcIl0pLFxuXG4gIC8qKlxuICAgICAqIE9iamVjdCBvZiBwcm9wcyBwYXNzZWQgdG8gdGhlIDxzcGFuLz4gd3JhcHBpbmcgdGhlIGNvbnRlbnQncyB0ZXh0IChvbmx5IGlmIHRoZSBjaGlsZHJlbiBpcyBhIGBzdHJpbmdgKVxuICAgICAqIEl0IGRvZXNuJ3QgYXBwbHkgdG8gdGhlIGljb24uXG4gICAgICovXG4gIHRleHRQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHJlZjogUHJvcFR5cGVzLmFueSxcbiAgICBcImRhdGEtdGV4dFwiOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLFxuICBpY29uU2l6ZTogUHJvcFR5cGVzLm9uZU9mKFtcInNcIiwgXCJtXCJdKSxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBpc0FjdGl2ZTogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogRm9yIGVsbGlwc2lzIG9yIG90aGVyIG5vbi1jbGlja2FibGUgYnV0dG9ucy5cbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBGb3IgZWxsaXBzaXMgb3Igb3RoZXIgbm9uLWNsaWNrYWJsZSBidXR0b25zLlxuICAgICAqL1xuICBpc1BsYWNlaG9sZGVyOiBQcm9wVHlwZXMuYm9vbCxcbiAgcGFnZUluZGV4OiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gIHRvdGFsUGFnZXM6IFByb3BUeXBlcy5udW1iZXJcbn07IiwgImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBFdWlCdXR0b25JY29uIH0gZnJvbSAnLi4vYnV0dG9uL2J1dHRvbl9pY29uJztcbmltcG9ydCB7IGtleXNPZiB9IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQgeyB1c2VFdWlJMThuIH0gZnJvbSAnLi4vaTE4bic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIHR5cGVUb0ljb25UeXBlTWFwID0ge1xuICBmaXJzdDogJ2Fycm93U3RhcnQnLFxuICBwcmV2aW91czogJ2Fycm93TGVmdCcsXG4gIG5leHQ6ICdhcnJvd1JpZ2h0JyxcbiAgbGFzdDogJ2Fycm93RW5kJ1xufTtcbmV4cG9ydCB2YXIgVFlQRVMgPSBrZXlzT2YodHlwZVRvSWNvblR5cGVNYXApO1xuZXhwb3J0IHZhciBFdWlQYWdpbmF0aW9uQnV0dG9uQXJyb3cgPSBmdW5jdGlvbiBFdWlQYWdpbmF0aW9uQnV0dG9uQXJyb3coX3JlZikge1xuICB2YXIgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICB0eXBlID0gX3JlZi50eXBlLFxuICAgICAgZGlzYWJsZWQgPSBfcmVmLmRpc2FibGVkLFxuICAgICAgYXJpYUNvbnRyb2xzID0gX3JlZi5hcmlhQ29udHJvbHMsXG4gICAgICBvbkNsaWNrID0gX3JlZi5vbkNsaWNrO1xuICB2YXIgbGFiZWxzID0ge1xuICAgIGZpcnN0OiB1c2VFdWlJMThuKCdldWlQYWdpbmF0aW9uQnV0dG9uQXJyb3cuZmlyc3RQYWdlJywgJ0ZpcnN0IHBhZ2UnKSxcbiAgICBwcmV2aW91czogdXNlRXVpSTE4bignZXVpUGFnaW5hdGlvbkJ1dHRvbkFycm93LnByZXZpb3VzUGFnZScsICdQcmV2aW91cyBwYWdlJyksXG4gICAgbmV4dDogdXNlRXVpSTE4bignZXVpUGFnaW5hdGlvbkJ1dHRvbkFycm93Lm5leHRQYWdlJywgJ05leHQgcGFnZScpLFxuICAgIGxhc3Q6IHVzZUV1aUkxOG4oJ2V1aVBhZ2luYXRpb25CdXR0b25BcnJvdy5sYXN0UGFnZScsICdMYXN0IHBhZ2UnKVxuICB9O1xuICB2YXIgYnV0dG9uUHJvcHMgPSB7fTtcblxuICBpZiAoYXJpYUNvbnRyb2xzICYmICFkaXNhYmxlZCkge1xuICAgIGJ1dHRvblByb3BzLmhyZWYgPSBcIiNcIi5jb25jYXQoYXJpYUNvbnRyb2xzKTtcbiAgICBidXR0b25Qcm9wc1snYXJpYS1jb250cm9scyddID0gYXJpYUNvbnRyb2xzO1xuICB9XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpQnV0dG9uSWNvbiwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lcygnZXVpUGFnaW5hdGlvbkFycm93QnV0dG9uJywgY2xhc3NOYW1lKSxcbiAgICBjb2xvcjogXCJ0ZXh0XCIsXG4gICAgXCJhcmlhLWxhYmVsXCI6IGxhYmVsc1t0eXBlXSxcbiAgICB0aXRsZTogZGlzYWJsZWQgPyB1bmRlZmluZWQgOiBsYWJlbHNbdHlwZV0sXG4gICAgaXNEaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgb25DbGljazogb25DbGljayxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFwicGFnaW5hdGlvbi1idXR0b24tXCIuY29uY2F0KHR5cGUpLFxuICAgIGljb25UeXBlOiB0eXBlVG9JY29uVHlwZU1hcFt0eXBlXVxuICB9LCBidXR0b25Qcm9wcykpO1xufTtcbkV1aVBhZ2luYXRpb25CdXR0b25BcnJvdy5wcm9wVHlwZXMgPSB7XG4gIHR5cGU6IFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCxcbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICBhcmlhQ29udHJvbHM6IFByb3BUeXBlcy5zdHJpbmdcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJpc1NlbGVjdGVkXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJkaXNhYmxlZFwiLCBcImhyZWZcIiwgXCJ0YXJnZXRcIiwgXCJyZWxcIiwgXCJwcmVwZW5kXCIsIFwiYXBwZW5kXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgZ2V0U2VjdXJlUmVsRm9yVGFyZ2V0IH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgdmFsaWRhdGVIcmVmIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2VjdXJpdHkvaHJlZl92YWxpZGF0b3InO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpVGFiID0gZnVuY3Rpb24gRXVpVGFiKF9yZWYpIHtcbiAgdmFyIGlzU2VsZWN0ZWQgPSBfcmVmLmlzU2VsZWN0ZWQsXG4gICAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIF9kaXNhYmxlZCA9IF9yZWYuZGlzYWJsZWQsXG4gICAgICBocmVmID0gX3JlZi5ocmVmLFxuICAgICAgdGFyZ2V0ID0gX3JlZi50YXJnZXQsXG4gICAgICByZWwgPSBfcmVmLnJlbCxcbiAgICAgIHByZXBlbmQgPSBfcmVmLnByZXBlbmQsXG4gICAgICBhcHBlbmQgPSBfcmVmLmFwcGVuZCxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgaXNIcmVmVmFsaWQgPSAhaHJlZiB8fCB2YWxpZGF0ZUhyZWYoaHJlZik7XG4gIHZhciBkaXNhYmxlZCA9IF9kaXNhYmxlZCB8fCAhaXNIcmVmVmFsaWQ7XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpVGFiJywgY2xhc3NOYW1lLCB7XG4gICAgJ2V1aVRhYi1pc1NlbGVjdGVkJzogaXNTZWxlY3RlZCxcbiAgICAnZXVpVGFiLWlzRGlzYWJsZWQnOiBkaXNhYmxlZFxuICB9KTtcblxuICB2YXIgcHJlcGVuZE5vZGUgPSBwcmVwZW5kICYmIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpVGFiX19wcmVwZW5kXCJcbiAgfSwgcHJlcGVuZCk7XG5cbiAgdmFyIGFwcGVuZE5vZGUgPSBhcHBlbmQgJiYgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlUYWJfX2FwcGVuZFwiXG4gIH0sIGFwcGVuZCk7IC8vICA8YT4gZWxlbWVudHMgZG9uJ3QgcmVzcGVjdCB0aGUgYGRpc2FibGVkYCBhdHRyaWJ1dGUuIFNvIGlmIHdlJ3JlIGRpc2FibGVkLCB3ZSdsbCBqdXN0IHByZXRlbmRcbiAgLy8gIHRoaXMgaXMgYSBidXR0b24gYW5kIHBpZ2d5YmFjayBvZmYgaXRzIGRpc2FibGVkIHN0eWxlcy5cblxuXG4gIGlmIChocmVmICYmICFkaXNhYmxlZCkge1xuICAgIHZhciBzZWN1cmVSZWwgPSBnZXRTZWN1cmVSZWxGb3JUYXJnZXQoe1xuICAgICAgaHJlZjogaHJlZixcbiAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgcmVsOiByZWxcbiAgICB9KTtcbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImFcIiwgX2V4dGVuZHMoe1xuICAgICAgcm9sZTogXCJ0YWJcIixcbiAgICAgIFwiYXJpYS1zZWxlY3RlZFwiOiAhIWlzU2VsZWN0ZWQsXG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICBocmVmOiBocmVmLFxuICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICByZWw6IHNlY3VyZVJlbFxuICAgIH0sIHJlc3QpLCBwcmVwZW5kTm9kZSwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgICAgY2xhc3NOYW1lOiBcImV1aVRhYl9fY29udGVudFwiXG4gICAgfSwgY2hpbGRyZW4pLCBhcHBlbmROb2RlKTtcbiAgfVxuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiYnV0dG9uXCIsIF9leHRlbmRzKHtcbiAgICByb2xlOiBcInRhYlwiLFxuICAgIFwiYXJpYS1zZWxlY3RlZFwiOiAhIWlzU2VsZWN0ZWQsXG4gICAgdHlwZTogXCJidXR0b25cIixcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgZGlzYWJsZWQ6IGRpc2FibGVkXG4gIH0sIHJlc3QpLCBwcmVwZW5kTm9kZSwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlUYWJfX2NvbnRlbnRcIlxuICB9LCBjaGlsZHJlbiksIGFwcGVuZE5vZGUpO1xufTtcbkV1aVRhYi5wcm9wVHlwZXMgPSB7XG4gIGlzU2VsZWN0ZWQ6IFByb3BUeXBlcy5ib29sLFxuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogUGxhY2VzIGNvbnRlbnQgYmVmb3JlIHRoZSB0YWIgY29udGVudC9jaGlsZHJlbi5cbiAgICAgKiBXaWxsIGJlIGV4Y2x1ZGVkIGZyb20gaW50ZXJhY3RpdmUgZWZmZWN0cy5cbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBQbGFjZXMgY29udGVudCBiZWZvcmUgdGhlIHRhYiBjb250ZW50L2NoaWxkcmVuLlxuICAgICAqIFdpbGwgYmUgZXhjbHVkZWQgZnJvbSBpbnRlcmFjdGl2ZSBlZmZlY3RzLlxuICAgICAqL1xuICBwcmVwZW5kOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICAgKiBQbGFjZXMgY29udGVudCBhZnRlciB0aGUgdGFiIGNvbnRlbnQvY2hpbGRyZW4uXG4gICAgICogV2lsbCBiZSBleGNsdWRlZCBmcm9tIGludGVyYWN0aXZlIGVmZmVjdHMuXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogUGxhY2VzIGNvbnRlbnQgYWZ0ZXIgdGhlIHRhYiBjb250ZW50L2NoaWxkcmVuLlxuICAgICAqIFdpbGwgYmUgZXhjbHVkZWQgZnJvbSBpbnRlcmFjdGl2ZSBlZmZlY3RzLlxuICAgICAqL1xuICBhcHBlbmQ6IFByb3BUeXBlcy5ub2RlLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGhyZWY6IFByb3BUeXBlcy5zdHJpbmcsXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jXG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJib3R0b21Cb3JkZXJcIiwgXCJleHBhbmRcIiwgXCJzaXplXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGtleXNPZiB9IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIHNpemVUb0NsYXNzTmFtZU1hcCA9IHtcbiAgczogJ2V1aVRhYnMtLXNtYWxsJyxcbiAgbTogbnVsbCxcbiAgbDogJ2V1aVRhYnMtLWxhcmdlJyxcbiAgeGw6ICdldWlUYWJzLS14bGFyZ2UnXG59O1xuZXhwb3J0IHZhciBTSVpFUyA9IGtleXNPZihzaXplVG9DbGFzc05hbWVNYXApO1xuZXhwb3J0IHZhciBFdWlUYWJzID0gLyojX19QVVJFX18qL2ZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBfcmVmJGJvdHRvbUJvcmRlciA9IF9yZWYuYm90dG9tQm9yZGVyLFxuICAgICAgYm90dG9tQm9yZGVyID0gX3JlZiRib3R0b21Cb3JkZXIgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJGJvdHRvbUJvcmRlcixcbiAgICAgIF9yZWYkZXhwYW5kID0gX3JlZi5leHBhbmQsXG4gICAgICBleHBhbmQgPSBfcmVmJGV4cGFuZCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGV4cGFuZCxcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/ICdtJyA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRhYnMnLCBzaXplVG9DbGFzc05hbWVNYXBbc2l6ZV0sIHtcbiAgICAnZXVpVGFicy0tZXhwYW5kJzogZXhwYW5kLFxuICAgICdldWlUYWJzLS1ib3R0b21Cb3JkZXInOiBib3R0b21Cb3JkZXJcbiAgfSwgY2xhc3NOYW1lKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICB9LCBjaGlsZHJlbiAmJiB7XG4gICAgcm9sZTogJ3RhYmxpc3QnXG4gIH0sIHJlc3QpLCBjaGlsZHJlbik7XG59KTtcbkV1aVRhYnMuZGlzcGxheU5hbWUgPSAnRXVpVGFicyc7IiwgImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxudmFyIF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcImV4cGFuZFwiLCBcImluaXRpYWxTZWxlY3RlZFRhYlwiLCBcIm9uVGFiQ2xpY2tcIiwgXCJzZWxlY3RlZFRhYlwiLCBcInNpemVcIiwgXCJ0YWJzXCIsIFwiYXV0b0ZvY3VzXCJdLFxuICAgIF9leGNsdWRlZDIgPSBbXCJpZFwiLCBcIm5hbWVcIiwgXCJjb250ZW50XCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCwgY3JlYXRlUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgaHRtbElkR2VuZXJhdG9yIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpVGFicyB9IGZyb20gJy4uL3RhYnMnO1xuaW1wb3J0IHsgRXVpVGFiIH0gZnJvbSAnLi4vdGFiJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbi8qKlxuICogTWFya2VkIGFzIGNvbnN0IHNvIHR5cGUgaXMgYFsnaW5pdGlhbCcsICdzZWxlY3RlZCddYCBpbnN0ZWFkIG9mIGBzdHJpbmdbXWBcbiAqL1xuZXhwb3J0IHZhciBBVVRPRk9DVVMgPSBbJ2luaXRpYWwnLCAnc2VsZWN0ZWQnXTtcbmV4cG9ydCB2YXIgRXVpVGFiYmVkQ29udGVudCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoRXVpVGFiYmVkQ29udGVudCwgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihFdWlUYWJiZWRDb250ZW50KTtcblxuICBmdW5jdGlvbiBFdWlUYWJiZWRDb250ZW50KHByb3BzKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aVRhYmJlZENvbnRlbnQpO1xuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBwcm9wcyk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicm9vdElkXCIsIGh0bWxJZEdlbmVyYXRvcigpKCkpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInRhYnNSZWZcIiwgLyojX19QVVJFX18qL2NyZWF0ZVJlZigpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJmb2N1c1RhYlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgdGFyZ2V0VGFiID0gX3RoaXMudGFic1JlZi5jdXJyZW50LnF1ZXJ5U2VsZWN0b3IoXCIjXCIuY29uY2F0KF90aGlzLnN0YXRlLnNlbGVjdGVkVGFiSWQpKTtcblxuICAgICAgdGFyZ2V0VGFiLmZvY3VzKCk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaW5pdGlhbGl6ZUZvY3VzXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICghX3RoaXMuc3RhdGUuaW5Gb2N1cyAmJiBfdGhpcy5wcm9wcy5hdXRvRm9jdXMgPT09ICdzZWxlY3RlZCcpIHtcbiAgICAgICAgLy8gTXVzdCB3YWl0IGZvciBzZXRTdGF0ZSB0byBmaW5pc2ggYmVmb3JlIGNhbGxpbmcgYC5mb2N1cygpYFxuICAgICAgICAvLyBhcyB0aGUgZm9jdXMgY2FsbCB0cmlnZ2VycyBhIGJsdXIgb24gdGhlIGZpcnN0IHRhYlxuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgaW5Gb2N1czogdHJ1ZVxuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgX3RoaXMuZm9jdXNUYWIoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicmVtb3ZlRm9jdXNcIiwgZnVuY3Rpb24gKGJsdXJFdmVudCkge1xuICAgICAgLy8gb25seSBzZXQgaW5Gb2N1cyB0byBmYWxzZSBpZiB0aGUgd3JhcHBpbmcgZGl2IGRvZXNuJ3QgY29udGFpbiB0aGUgbm93LWZvY3VzaW5nIGVsZW1lbnRcbiAgICAgIHZhciBjdXJyZW50VGFyZ2V0ID0gYmx1ckV2ZW50LmN1cnJlbnRUYXJnZXQ7XG4gICAgICB2YXIgcmVsYXRlZFRhcmdldCA9IGJsdXJFdmVudC5yZWxhdGVkVGFyZ2V0O1xuXG4gICAgICBpZiAoY3VycmVudFRhcmdldC5jb250YWlucyhyZWxhdGVkVGFyZ2V0KSA9PT0gZmFsc2UpIHtcbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGluRm9jdXM6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uVGFiQ2xpY2tcIiwgZnVuY3Rpb24gKHNlbGVjdGVkVGFiKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBvblRhYkNsaWNrID0gX3RoaXMkcHJvcHMub25UYWJDbGljayxcbiAgICAgICAgICBleHRlcm5hbFNlbGVjdGVkVGFiID0gX3RoaXMkcHJvcHMuc2VsZWN0ZWRUYWI7XG5cbiAgICAgIGlmIChvblRhYkNsaWNrKSB7XG4gICAgICAgIG9uVGFiQ2xpY2soc2VsZWN0ZWRUYWIpO1xuICAgICAgfSAvLyBPbmx5IHRyYWNrIHNlbGVjdGlvbiBzdGF0ZSBpZiBpdCdzIG5vdCBjb250cm9sbGVkIGV4dGVybmFsbHkuXG5cblxuICAgICAgaWYgKCFleHRlcm5hbFNlbGVjdGVkVGFiKSB7XG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBzZWxlY3RlZFRhYklkOiBzZWxlY3RlZFRhYi5pZFxuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgX3RoaXMuZm9jdXNUYWIoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB2YXIgaW5pdGlhbFNlbGVjdGVkVGFiID0gcHJvcHMuaW5pdGlhbFNlbGVjdGVkVGFiLFxuICAgICAgICBfc2VsZWN0ZWRUYWIgPSBwcm9wcy5zZWxlY3RlZFRhYixcbiAgICAgICAgdGFicyA9IHByb3BzLnRhYnM7IC8vIE9ubHkgdHJhY2sgc2VsZWN0aW9uIHN0YXRlIGlmIGl0J3Mgbm90IGNvbnRyb2xsZWQgZXh0ZXJuYWxseS5cblxuICAgIHZhciBzZWxlY3RlZFRhYklkO1xuXG4gICAgaWYgKCFfc2VsZWN0ZWRUYWIpIHtcbiAgICAgIHNlbGVjdGVkVGFiSWQgPSBpbml0aWFsU2VsZWN0ZWRUYWIgJiYgaW5pdGlhbFNlbGVjdGVkVGFiLmlkIHx8IHRhYnNbMF0uaWQ7XG4gICAgfVxuXG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBzZWxlY3RlZFRhYklkOiBzZWxlY3RlZFRhYklkLFxuICAgICAgaW5Gb2N1czogZmFsc2VcbiAgICB9O1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdWlUYWJiZWRDb250ZW50LCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIC8vIElFMTEgZG9lc24ndCBzdXBwb3J0IHRoZSBgcmVsYXRlZFRhcmdldGAgZXZlbnQgcHJvcGVydHkgZm9yIGJsdXIgZXZlbnRzXG4gICAgICAvLyBidXQgZG9lcyBhZGQgaXQgZm9yIGZvY3Vzb3V0LiBSZWFjdCBkb2Vzbid0IHN1cHBvcnQgYG9uRm9jdXNPdXRgIHNvIGhlcmUgd2UgYXJlLlxuICAgICAgaWYgKHRoaXMudGFic1JlZi5jdXJyZW50KSB7XG4gICAgICAgIC8vIEN1cnJlbnQgc2hvcnQtdGVybSBzb2x1dGlvbiBmb3IgZXZlbnQgbGlzdGVuZXIgKHNlZSBodHRwczovL2dpdGh1Yi5jb20vZWxhc3RpYy9ldWkvcHVsbC8yNzE3KVxuICAgICAgICB0aGlzLnRhYnNSZWYuY3VycmVudC5hZGRFdmVudExpc3RlbmVyKCdmb2N1c291dCcsIHRoaXMucmVtb3ZlRm9jdXMpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIGlmICh0aGlzLnRhYnNSZWYuY3VycmVudCkge1xuICAgICAgICAvLyBDdXJyZW50IHNob3J0LXRlcm0gc29sdXRpb24gZm9yIGV2ZW50IGxpc3RlbmVyIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL2VsYXN0aWMvZXVpL3B1bGwvMjcxNylcbiAgICAgICAgdGhpcy50YWJzUmVmLmN1cnJlbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignZm9jdXNvdXQnLCB0aGlzLnJlbW92ZUZvY3VzKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wczIuY2xhc3NOYW1lLFxuICAgICAgICAgIGV4cGFuZCA9IF90aGlzJHByb3BzMi5leHBhbmQsXG4gICAgICAgICAgaW5pdGlhbFNlbGVjdGVkVGFiID0gX3RoaXMkcHJvcHMyLmluaXRpYWxTZWxlY3RlZFRhYixcbiAgICAgICAgICBvblRhYkNsaWNrID0gX3RoaXMkcHJvcHMyLm9uVGFiQ2xpY2ssXG4gICAgICAgICAgZXh0ZXJuYWxTZWxlY3RlZFRhYiA9IF90aGlzJHByb3BzMi5zZWxlY3RlZFRhYixcbiAgICAgICAgICBzaXplID0gX3RoaXMkcHJvcHMyLnNpemUsXG4gICAgICAgICAgdGFicyA9IF90aGlzJHByb3BzMi50YWJzLFxuICAgICAgICAgIGF1dG9Gb2N1cyA9IF90aGlzJHByb3BzMi5hdXRvRm9jdXMsXG4gICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wczIsIF9leGNsdWRlZCk7IC8vIEFsbG93IHRoZSBjb25zdW1lciB0byBjb250cm9sIHRhYiBzZWxlY3Rpb24uXG5cblxuICAgICAgdmFyIHNlbGVjdGVkVGFiID0gZXh0ZXJuYWxTZWxlY3RlZFRhYiB8fCB0YWJzLmZpbmQoZnVuY3Rpb24gKHRhYikge1xuICAgICAgICByZXR1cm4gdGFiLmlkID09PSBfdGhpczIuc3RhdGUuc2VsZWN0ZWRUYWJJZDtcbiAgICAgIH0pO1xuICAgICAgdmFyIF9yZWYgPSBzZWxlY3RlZFRhYixcbiAgICAgICAgICBzZWxlY3RlZFRhYkNvbnRlbnQgPSBfcmVmLmNvbnRlbnQsXG4gICAgICAgICAgc2VsZWN0ZWRUYWJJZCA9IF9yZWYuaWQ7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lXG4gICAgICB9LCByZXN0KSwgX19fRW1vdGlvbkpTWChFdWlUYWJzLCB7XG4gICAgICAgIHJlZjogdGhpcy50YWJzUmVmLFxuICAgICAgICBleHBhbmQ6IGV4cGFuZCxcbiAgICAgICAgc2l6ZTogc2l6ZSxcbiAgICAgICAgb25Gb2N1czogdGhpcy5pbml0aWFsaXplRm9jdXNcbiAgICAgIH0sIHRhYnMubWFwKGZ1bmN0aW9uICh0YWIpIHtcbiAgICAgICAgdmFyIGlkID0gdGFiLmlkLFxuICAgICAgICAgICAgbmFtZSA9IHRhYi5uYW1lLFxuICAgICAgICAgICAgY29udGVudCA9IHRhYi5jb250ZW50LFxuICAgICAgICAgICAgdGFiUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXModGFiLCBfZXhjbHVkZWQyKTtcblxuICAgICAgICB2YXIgcHJvcHMgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe1xuICAgICAgICAgIGtleTogaWQsXG4gICAgICAgICAgaWQ6IGlkXG4gICAgICAgIH0sIHRhYlByb3BzKSwge30sIHtcbiAgICAgICAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKCkge1xuICAgICAgICAgICAgcmV0dXJuIF90aGlzMi5vblRhYkNsaWNrKHRhYik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBpc1NlbGVjdGVkOiB0YWIgPT09IHNlbGVjdGVkVGFiLFxuICAgICAgICAgICdhcmlhLWNvbnRyb2xzJzogXCJcIi5jb25jYXQoX3RoaXMyLnJvb3RJZClcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpVGFiLCBwcm9wcywgbmFtZSk7XG4gICAgICB9KSksIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICByb2xlOiBcInRhYnBhbmVsXCIsXG4gICAgICAgIGlkOiBcIlwiLmNvbmNhdCh0aGlzLnJvb3RJZCksXG4gICAgICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHNlbGVjdGVkVGFiSWRcbiAgICAgIH0sIHNlbGVjdGVkVGFiQ29udGVudCkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlUYWJiZWRDb250ZW50O1xufShDb21wb25lbnQpO1xuXG5fZGVmaW5lUHJvcGVydHkoRXVpVGFiYmVkQ29udGVudCwgXCJkZWZhdWx0UHJvcHNcIiwge1xuICBhdXRvRm9jdXM6ICdpbml0aWFsJ1xufSk7XG5cbkV1aVRhYmJlZENvbnRlbnQucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICAgKiBXaGVuIHRhYmJpbmcgaW50byB0aGUgdGFicywgc2V0IHRoZSBmb2N1cyBvbiBgaW5pdGlhbGAgZm9yIHRoZSBmaXJzdCB0YWIsXG4gICAgICAgKiBvciBgc2VsZWN0ZWRgIGZvciB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHRhYi4gQmVzdCB1c2UgY2FzZSBpcyBmb3IgaW5zaWRlIG9mXG4gICAgICAgKiBvdmVybGF5IGNvbnRlbnQgbGlrZSBwb3BvdmVycyBvciBmbHlvdXRzLlxuICAgICAgICovXG4gIGF1dG9Gb2N1czogUHJvcFR5cGVzLm9uZU9mKFtcImluaXRpYWxcIiwgXCJzZWxlY3RlZFwiXSksXG5cbiAgLyoqXG4gICAgICAgKiBFdmVubHkgc3RyZXRjaGVzIGVhY2ggdGFiIHRvIGZpbGwgdGhlIGhvcml6b250YWwgc3BhY2VcbiAgICAgICAqL1xuICBleHBhbmQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAgICogVXNlIHRoaXMgcHJvcCB0byBzZXQgdGhlIGluaXRpYWxseSBzZWxlY3RlZCB0YWIgd2hpbGUgbGV0dGluZyB0aGUgdGFiYmVkIGNvbnRlbnQgY29tcG9uZW50XG4gICAgICAgKiBjb250cm9sIHNlbGVjdGlvbiBzdGF0ZSBpbnRlcm5hbGx5XG4gICAgICAgKi9cbiAgaW5pdGlhbFNlbGVjdGVkVGFiOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGlkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgbmFtZTogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCxcbiAgICBjb250ZW50OiBQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLFxuICAgIGlzU2VsZWN0ZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAgIC8qKlxuICAgICAgICogUGxhY2VzIGNvbnRlbnQgYmVmb3JlIHRoZSB0YWIgY29udGVudC9jaGlsZHJlbi5cbiAgICAgICAqIFdpbGwgYmUgZXhjbHVkZWQgZnJvbSBpbnRlcmFjdGl2ZSBlZmZlY3RzLlxuICAgICAgICovXG4gICAgcHJlcGVuZDogUHJvcFR5cGVzLm5vZGUsXG5cbiAgICAvKipcbiAgICAgICAqIFBsYWNlcyBjb250ZW50IGFmdGVyIHRoZSB0YWIgY29udGVudC9jaGlsZHJlbi5cbiAgICAgICAqIFdpbGwgYmUgZXhjbHVkZWQgZnJvbSBpbnRlcmFjdGl2ZSBlZmZlY3RzLlxuICAgICAgICovXG4gICAgYXBwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLFxuICBvblRhYkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICAgICAqIFVzZSB0aGlzIHByb3AgaWYgeW91IHdhbnQgdG8gY29udHJvbCBzZWxlY3Rpb24gc3RhdGUgd2l0aGluIHRoZSBvd25lciBjb21wb25lbnRcbiAgICAgICAqL1xuICBzZWxlY3RlZFRhYjogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBpZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIG5hbWU6IFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsXG4gICAgY29udGVudDogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCxcbiAgICBpc1NlbGVjdGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgcHJlcGVuZDogUHJvcFR5cGVzLm5vZGUsXG4gICAgYXBwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2YoW1wic1wiLCBcIm1cIiwgXCJsXCIsIFwieGxcIl0pLFxuXG4gIC8qKlxuICAgICAgICogRWFjaCB0YWIgbmVlZHMgaWQgYW5kIGNvbnRlbnQgcHJvcGVydGllcywgc28gd2UgY2FuIGFzc29jaWF0ZSBpdCB3aXRoIGl0cyBwYW5lbCBmb3IgYWNjZXNzaWJpbGl0eS5cbiAgICAgICAqIFRoZSBuYW1lIHByb3BlcnR5IChhIG5vZGUpIGlzIGFsc28gcmVxdWlyZWQgdG8gZGlzcGxheSB0byB0aGUgdXNlci5cbiAgICAgICAqL1xuICB0YWJzOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGlkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgbmFtZTogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCxcbiAgICBjb250ZW50OiBQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLFxuICAgIGlzU2VsZWN0ZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBwcmVwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgICBhcHBlbmQ6IFByb3BUeXBlcy5ub2RlLFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbiAgfSkuaXNSZXF1aXJlZCkuaXNSZXF1aXJlZFxufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmV4cG9ydCB2YXIgRXVpRGVsYXlSZW5kZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEV1aURlbGF5UmVuZGVyLCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aURlbGF5UmVuZGVyKTtcblxuICBmdW5jdGlvbiBFdWlEZWxheVJlbmRlcihwcm9wcykge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlEZWxheVJlbmRlcik7XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHByb3BzKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJkZWxheUlEXCIsIHZvaWQgMCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwidG9CZURlbGF5ZWRcIiwgdHJ1ZSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic3RhcnREZWxheWluZ1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KF90aGlzLmRlbGF5SUQpO1xuICAgICAgX3RoaXMudG9CZURlbGF5ZWQgPSB0cnVlO1xuICAgICAgX3RoaXMuZGVsYXlJRCA9IHdpbmRvdy5zZXRUaW1lb3V0KF90aGlzLnN0b3BEZWxheWluZywgX3RoaXMucHJvcHMuZGVsYXkpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInN0b3BEZWxheWluZ1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KF90aGlzLmRlbGF5SUQpO1xuICAgICAgX3RoaXMudG9CZURlbGF5ZWQgPSBmYWxzZTtcblxuICAgICAgX3RoaXMuc2hvdWxkVXBkYXRlKCk7XG4gICAgfSk7XG5cbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIHRvZ2dsZTogZmFsc2VcbiAgICB9O1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdWlEZWxheVJlbmRlciwgW3tcbiAgICBrZXk6IFwic2hvdWxkVXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNob3VsZFVwZGF0ZSgpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgICAgdmFyIHRvZ2dsZSA9IF9yZWYudG9nZ2xlO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHRvZ2dsZTogIXRvZ2dsZVxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdGhpcy5zdGFydERlbGF5aW5nKCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNob3VsZENvbXBvbmVudFVwZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzaG91bGRDb21wb25lbnRVcGRhdGUoKSB7XG4gICAgICBpZiAodGhpcy50b0JlRGVsYXllZCkge1xuICAgICAgICB0aGlzLnN0YXJ0RGVsYXlpbmcoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgdGhpcy5zdG9wRGVsYXlpbmcoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkVXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcbiAgICAgIHRoaXMudG9CZURlbGF5ZWQgPSB0cnVlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuICF0aGlzLnRvQmVEZWxheWVkID8gdGhpcy5wcm9wcy5jaGlsZHJlbiA6IG51bGw7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEV1aURlbGF5UmVuZGVyO1xufShDb21wb25lbnQpO1xuXG5fZGVmaW5lUHJvcGVydHkoRXVpRGVsYXlSZW5kZXIsIFwiZGVmYXVsdFByb3BzXCIsIHtcbiAgZGVsYXk6IDUwMFxufSk7XG5cbkV1aURlbGF5UmVuZGVyLnByb3BUeXBlcyA9IHtcbiAgZGVsYXk6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZFxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29sb3JcIiwgXCJ0ZXh0U2l6ZVwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUV1aVRoZW1lIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgZXVpSGVhbHRoU3R5bGVzIH0gZnJvbSAnLi9oZWFsdGguc3R5bGVzJztcbmltcG9ydCB7IEV1aUljb24gfSBmcm9tICcuLi9pY29uJztcbmltcG9ydCB7IEV1aUZsZXhHcm91cCwgRXVpRmxleEl0ZW0gfSBmcm9tICcuLi9mbGV4JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIFRFWFRfU0laRVMgPSBbJ3hzJywgJ3MnLCAnbScsICdpbmhlcml0J107XG5leHBvcnQgdmFyIEV1aUhlYWx0aCA9IGZ1bmN0aW9uIEV1aUhlYWx0aChfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIF9yZWYkdGV4dFNpemUgPSBfcmVmLnRleHRTaXplLFxuICAgICAgdGV4dFNpemUgPSBfcmVmJHRleHRTaXplID09PSB2b2lkIDAgPyAncycgOiBfcmVmJHRleHRTaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHZhciBzdHlsZXMgPSBldWlIZWFsdGhTdHlsZXMoZXVpVGhlbWUpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlIZWFsdGgsIHN0eWxlc1t0ZXh0U2l6ZV1dO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUhlYWx0aCcsIGNsYXNzTmFtZSk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goRXVpRmxleEdyb3VwLCB7XG4gICAgZ3V0dGVyU2l6ZTogXCJ4c1wiLFxuICAgIGFsaWduSXRlbXM6IFwiY2VudGVyXCIsXG4gICAgcmVzcG9uc2l2ZTogZmFsc2VcbiAgfSwgX19fRW1vdGlvbkpTWChFdWlGbGV4SXRlbSwge1xuICAgIGdyb3c6IGZhbHNlXG4gIH0sIF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgIHR5cGU6IFwiZG90XCIsXG4gICAgY29sb3I6IGNvbG9yXG4gIH0pKSwgX19fRW1vdGlvbkpTWChFdWlGbGV4SXRlbSwge1xuICAgIGdyb3c6IGZhbHNlXG4gIH0sIGNoaWxkcmVuKSkpO1xufTtcbkV1aUhlYWx0aC5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgICAqIFNldHMgdGhlIGNvbG9yIG9mIHRoZSBkb3QgaWNvbi5cbiAgICAgICAqIEl0IGFjY2VwdHMgYW55IGBJY29uQ29sb3JgOiBgZGVmYXVsdGAsIGBwcmltYXJ5YCwgYHN1Y2Nlc3NgLCBgYWNjZW50YCwgYHdhcm5pbmdgLCBgZGFuZ2VyYCwgYHRleHRgLFxuICAgICAgICogYHN1YmR1ZWRgIG9yIGBnaG9zdGA7IG9yIGFueSB2YWxpZCBDU1MgY29sb3IgdmFsdWUgYXMgYSBgc3RyaW5nYFxuICAgICAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZF0pLFxuXG4gIC8qKlxuICAgICAgICogTWF0Y2hlcyB0aGUgdGV4dCBzY2FsZXMgb2YgRXVpVGV4dC5cbiAgICAgICAqIFRoZSBgaW5oZXJpdGAgc3R5bGUgd2lsbCBnZXQgaXRzIGZvbnQgc2l6ZSBmcm9tIHRoZSBwYXJlbnQgZWxlbWVudFxuICAgICAgICovXG4gIHRleHRTaXplOiBQcm9wVHlwZXMuYW55XG59OyIsICJmdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBldWlGb250U2l6ZSB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcblxudmFyIF9yZWYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMXFob2pyaS1pbmhlcml0XCIsXG4gIHN0eWxlczogXCJmb250LXNpemU6aW5oZXJpdDtsYWJlbDppbmhlcml0O1wiXG59IDoge1xuICBuYW1lOiBcIjFxaG9qcmktaW5oZXJpdFwiLFxuICBzdHlsZXM6IFwiZm9udC1zaXplOmluaGVyaXQ7bGFiZWw6aW5oZXJpdDtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xuXG52YXIgX3JlZjIgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiajh1aGNrLWV1aUhlYWx0aFwiLFxuICBzdHlsZXM6IFwiZGlzcGxheTppbmxpbmUtYmxvY2s7bGFiZWw6ZXVpSGVhbHRoO1wiXG59IDoge1xuICBuYW1lOiBcImo4dWhjay1ldWlIZWFsdGhcIixcbiAgc3R5bGVzOiBcImRpc3BsYXk6aW5saW5lLWJsb2NrO2xhYmVsOmV1aUhlYWx0aDtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xuXG5leHBvcnQgdmFyIGV1aUhlYWx0aFN0eWxlcyA9IGZ1bmN0aW9uIGV1aUhlYWx0aFN0eWxlcyhldWlUaGVtZSkge1xuICByZXR1cm4ge1xuICAgIGV1aUhlYWx0aDogX3JlZjIsXG4gICAgLy8gVGV4dCBzaXplc1xuICAgIHhzOiAvKiNfX1BVUkVfXyovY3NzKGV1aUZvbnRTaXplKGV1aVRoZW1lLCAneHMnKSwgXCI7O2xhYmVsOnhzO1wiKSxcbiAgICBzOiAvKiNfX1BVUkVfXyovY3NzKGV1aUZvbnRTaXplKGV1aVRoZW1lLCAncycpLCBcIjs7bGFiZWw6cztcIiksXG4gICAgbTogLyojX19QVVJFX18qL2NzcyhldWlGb250U2l6ZShldWlUaGVtZSwgJ20nKSwgXCI7O2xhYmVsOm07XCIpLFxuICAgIGluaGVyaXQ6IF9yZWZcbiAgfTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgRXVpR2xvYmFsU3R5bGVzIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcvcmVzZXQvZ2xvYmFsX3N0eWxlcyc7XG5pbXBvcnQgeyBFdWlVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nL3V0aWxpdHkvdXRpbGl0eSc7XG5pbXBvcnQgeyBFdWlUaGVtZVByb3ZpZGVyLCBDdXJyZW50RXVpQnJlYWtwb2ludFByb3ZpZGVyIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpVGhlbWVBbXN0ZXJkYW0gfSBmcm9tICcuLi8uLi90aGVtZXMnO1xuaW1wb3J0IHsgRXVpQ2FjaGVQcm92aWRlciB9IGZyb20gJy4vY2FjaGUnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIGlzRW1vdGlvbkNhY2hlT2JqZWN0ID0gZnVuY3Rpb24gaXNFbW90aW9uQ2FjaGVPYmplY3Qob2JqKSB7XG4gIHJldHVybiBvYmouaGFzT3duUHJvcGVydHkoJ2tleScpO1xufTtcblxuZXhwb3J0IHZhciBFdWlQcm92aWRlciA9IGZ1bmN0aW9uIEV1aVByb3ZpZGVyKF9yZWYpIHtcbiAgdmFyIGNhY2hlID0gX3JlZi5jYWNoZSxcbiAgICAgIF9yZWYkdGhlbWUgPSBfcmVmLnRoZW1lLFxuICAgICAgdGhlbWUgPSBfcmVmJHRoZW1lID09PSB2b2lkIDAgPyBFdWlUaGVtZUFtc3RlcmRhbSA6IF9yZWYkdGhlbWUsXG4gICAgICBfcmVmJGdsb2JhbFN0eWxlcyA9IF9yZWYuZ2xvYmFsU3R5bGVzLFxuICAgICAgR2xvYmFscyA9IF9yZWYkZ2xvYmFsU3R5bGVzID09PSB2b2lkIDAgPyBFdWlHbG9iYWxTdHlsZXMgOiBfcmVmJGdsb2JhbFN0eWxlcyxcbiAgICAgIF9yZWYkdXRpbGl0eUNsYXNzZXMgPSBfcmVmLnV0aWxpdHlDbGFzc2VzLFxuICAgICAgVXRpbGl0aWVzID0gX3JlZiR1dGlsaXR5Q2xhc3NlcyA9PT0gdm9pZCAwID8gRXVpVXRpbGl0eUNsYXNzZXMgOiBfcmVmJHV0aWxpdHlDbGFzc2VzLFxuICAgICAgY29sb3JNb2RlID0gX3JlZi5jb2xvck1vZGUsXG4gICAgICBtb2RpZnkgPSBfcmVmLm1vZGlmeSxcbiAgICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbjtcbiAgdmFyIGRlZmF1bHRDYWNoZTtcbiAgdmFyIGdsb2JhbENhY2hlO1xuICB2YXIgdXRpbGl0eUNhY2hlO1xuXG4gIGlmIChjYWNoZSkge1xuICAgIGlmIChpc0Vtb3Rpb25DYWNoZU9iamVjdChjYWNoZSkpIHtcbiAgICAgIGRlZmF1bHRDYWNoZSA9IGNhY2hlO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWZhdWx0Q2FjaGUgPSBjYWNoZS5kZWZhdWx0O1xuICAgICAgZ2xvYmFsQ2FjaGUgPSBjYWNoZS5nbG9iYWw7XG4gICAgICB1dGlsaXR5Q2FjaGUgPSBjYWNoZS51dGlsaXR5O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUNhY2hlUHJvdmlkZXIsIHtcbiAgICBjYWNoZTogZGVmYXVsdENhY2hlXG4gIH0sIF9fX0Vtb3Rpb25KU1goRXVpVGhlbWVQcm92aWRlciwge1xuICAgIHRoZW1lOiB0aGVtZSAhPT0gbnVsbCAmJiB0aGVtZSAhPT0gdm9pZCAwID8gdGhlbWUgOiB1bmRlZmluZWQsXG4gICAgY29sb3JNb2RlOiBjb2xvck1vZGUsXG4gICAgbW9kaWZ5OiBtb2RpZnlcbiAgfSwgdGhlbWUgJiYgX19fRW1vdGlvbkpTWChSZWFjdC5GcmFnbWVudCwgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlDYWNoZVByb3ZpZGVyLCB7XG4gICAgY2FjaGU6IGdsb2JhbENhY2hlLFxuICAgIGNoaWxkcmVuOiBHbG9iYWxzICYmIF9fX0Vtb3Rpb25KU1goR2xvYmFscywgbnVsbClcbiAgfSksIF9fX0Vtb3Rpb25KU1goRXVpQ2FjaGVQcm92aWRlciwge1xuICAgIGNhY2hlOiB1dGlsaXR5Q2FjaGUsXG4gICAgY2hpbGRyZW46IFV0aWxpdGllcyAmJiBfX19FbW90aW9uSlNYKFV0aWxpdGllcywgbnVsbClcbiAgfSkpLCBfX19FbW90aW9uSlNYKEN1cnJlbnRFdWlCcmVha3BvaW50UHJvdmlkZXIsIG51bGwsIGNoaWxkcmVuKSkpO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBHbG9iYWwsIGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGV1aVNjcmVlblJlYWRlck9ubHkgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2FjY2Vzc2liaWxpdHkvc2NyZWVuX3JlYWRlcl9vbmx5L3NjcmVlbl9yZWFkZXJfb25seS5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBnbG9iYWxTdHlsZXMgPSAvKiNfX1BVUkVfXyovY3NzKFwiLmV1aVNjcmVlblJlYWRlck9ubHl7XCIsIGV1aVNjcmVlblJlYWRlck9ubHkoKSwgXCI7fTtsYWJlbDpnbG9iYWxTdHlsZXM7XCIpO1xuZXhwb3J0IHZhciBFdWlVdGlsaXR5Q2xhc3NlcyA9IGZ1bmN0aW9uIEV1aVV0aWxpdHlDbGFzc2VzKCkge1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChHbG9iYWwsIHtcbiAgICBzdHlsZXM6IGdsb2JhbFN0eWxlc1xuICB9KTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQ2FjaGVQcm92aWRlciB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aUNhY2hlUHJvdmlkZXIgPSBmdW5jdGlvbiBFdWlDYWNoZVByb3ZpZGVyKF9yZWYpIHtcbiAgdmFyIGNhY2hlID0gX3JlZi5jYWNoZSxcbiAgICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbjtcbiAgcmV0dXJuIGNoaWxkcmVuICYmIGNhY2hlID8gX19fRW1vdGlvbkpTWChDYWNoZVByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IGNhY2hlXG4gIH0sIGNoaWxkcmVuKSA6IF9fX0Vtb3Rpb25KU1goUmVhY3QuRnJhZ21lbnQsIG51bGwsIGNoaWxkcmVuKTtcbn07IiwgImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxudmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiaXRlbXNcIiwgXCJkaXNwbGF5XCIsIFwiZXhwYW5kQnlEZWZhdWx0XCIsIFwic2hvd0V4cGFuc2lvbkFycm93c1wiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikgeyByZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF9ub25JdGVyYWJsZVNwcmVhZCgpOyB9XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkoaXRlcikgeyBpZiAodHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBpdGVyW1N5bWJvbC5pdGVyYXRvcl0gIT0gbnVsbCB8fCBpdGVyW1wiQEBpdGVyYXRvclwiXSAhPSBudWxsKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShhcnIpOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQsIGNyZWF0ZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IEV1aUkxOG4gfSBmcm9tICcuLi9pMThuJztcbmltcG9ydCB7IEV1aUljb24gfSBmcm9tICcuLi9pY29uJztcbmltcG9ydCB7IEV1aVNjcmVlblJlYWRlck9ubHkgfSBmcm9tICcuLi9hY2Nlc3NpYmlsaXR5JztcbmltcG9ydCB7IEV1aVRleHQgfSBmcm9tICcuLi90ZXh0JztcbmltcG9ydCB7IGtleXMsIGh0bWxJZEdlbmVyYXRvciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aUlubmVyVGV4dCB9IGZyb20gJy4uL2lubmVyX3RleHQnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBFdWlUcmVlVmlld0NvbnRleHQgPSAvKiNfX1BVUkVfXyovY3JlYXRlQ29udGV4dCgnJyk7XG5cbmZ1bmN0aW9uIGhhc0FyaWFMYWJlbCh4KSB7XG4gIHJldHVybiB4Lmhhc093blByb3BlcnR5KCdhcmlhLWxhYmVsJyk7XG59XG5cbmZ1bmN0aW9uIGdldFRyZWVJZChwcm9wSWQsIGNvbnRleHRJZCwgaWRHZW5lcmF0b3IpIHtcbiAgcmV0dXJuIHByb3BJZCAhPT0gbnVsbCAmJiBwcm9wSWQgIT09IHZvaWQgMCA/IHByb3BJZCA6IGNvbnRleHRJZCA9PT0gJycgPyBpZEdlbmVyYXRvcigpIDogY29udGV4dElkO1xufVxuXG52YXIgZGlzcGxheVRvQ2xhc3NOYW1lTWFwID0ge1xuICBkZWZhdWx0OiBudWxsLFxuICBjb21wcmVzc2VkOiAnZXVpVHJlZVZpZXctLWNvbXByZXNzZWQnXG59O1xuZXhwb3J0IHZhciBFdWlUcmVlVmlldyA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoRXVpVHJlZVZpZXcsIF9Db21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoRXVpVHJlZVZpZXcpO1xuXG4gIGZ1bmN0aW9uIEV1aVRyZWVWaWV3KCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlUcmVlVmlldyk7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbC5hcHBseShfc3VwZXIsIFt0aGlzXS5jb25jYXQoYXJncykpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInRyZWVJZEdlbmVyYXRvclwiLCBodG1sSWRHZW5lcmF0b3IoJ2V1aVRyZWVWaWV3JykpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImlzTmVzdGVkXCIsICEhX3RoaXMuY29udGV4dCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic3RhdGVcIiwge1xuICAgICAgb3Blbkl0ZW1zOiBfdGhpcy5wcm9wcy5leHBhbmRCeURlZmF1bHQgPyBfdGhpcy5wcm9wcy5pdGVtcy5tYXAoZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgICAgdmFyIGlkID0gX3JlZi5pZCxcbiAgICAgICAgICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbjtcbiAgICAgICAgcmV0dXJuIGNoaWxkcmVuID8gaWQgOiBudWxsO1xuICAgICAgfSkuZmlsdGVyKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHJldHVybiB4ICE9IG51bGw7XG4gICAgICB9KSA6IF90aGlzLnByb3BzLml0ZW1zLm1hcChmdW5jdGlvbiAoX3JlZjIpIHtcbiAgICAgICAgdmFyIGlkID0gX3JlZjIuaWQsXG4gICAgICAgICAgICBjaGlsZHJlbiA9IF9yZWYyLmNoaWxkcmVuLFxuICAgICAgICAgICAgaXNFeHBhbmRlZCA9IF9yZWYyLmlzRXhwYW5kZWQ7XG4gICAgICAgIHJldHVybiBjaGlsZHJlbiAmJiBpc0V4cGFuZGVkID8gaWQgOiBudWxsO1xuICAgICAgfSkuZmlsdGVyKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHJldHVybiB4ICE9IG51bGw7XG4gICAgICB9KSxcbiAgICAgIGFjdGl2ZUl0ZW06ICcnLFxuICAgICAgdHJlZUlEOiBnZXRUcmVlSWQoX3RoaXMucHJvcHMuaWQsIF90aGlzLmNvbnRleHQsIF90aGlzLnRyZWVJZEdlbmVyYXRvciksXG4gICAgICBleHBhbmRDaGlsZE5vZGVzOiBfdGhpcy5wcm9wcy5leHBhbmRCeURlZmF1bHQgfHwgZmFsc2VcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJidXR0b25SZWZcIiwgW10pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInNldEJ1dHRvblJlZlwiLCBmdW5jdGlvbiAocmVmLCBpbmRleCkge1xuICAgICAgX3RoaXMuYnV0dG9uUmVmW2luZGV4XSA9IHJlZjtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJoYW5kbGVOb2RlQ2xpY2tcIiwgZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIHZhciBpZ25vcmVDYWxsYmFjayA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZmFsc2U7XG5cbiAgICAgIHZhciBpbmRleCA9IF90aGlzLnN0YXRlLm9wZW5JdGVtcy5pbmRleE9mKG5vZGUuaWQpO1xuXG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGV4cGFuZENoaWxkTm9kZXM6IGZhbHNlXG4gICAgICB9KTtcblxuICAgICAgbm9kZS5pc0V4cGFuZGVkID0gIW5vZGUuaXNFeHBhbmRlZDtcblxuICAgICAgaWYgKCFpZ25vcmVDYWxsYmFjayAmJiBub2RlLmNhbGxiYWNrICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbm9kZS5jYWxsYmFjaygpO1xuICAgICAgfVxuXG4gICAgICBpZiAoX3RoaXMuaXNOb2RlT3Blbihub2RlKSkge1xuICAgICAgICAvLyBpZiB0aGUgbm9kZSBpcyBwYXJ0IG9mIG9wZW5JdGVtc1tdIHRoZW4gcmVtb3ZlIGl0XG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBvcGVuSXRlbXM6IF90aGlzLnN0YXRlLm9wZW5JdGVtcy5maWx0ZXIoZnVuY3Rpb24gKF8sIGkpIHtcbiAgICAgICAgICAgIHJldHVybiBpICE9PSBpbmRleDtcbiAgICAgICAgICB9KVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGlmIHRoZSBub2RlIGlzbid0IHBhcnQgb2Ygb3Blbkl0ZW1zW10gdGhlbiBhZGQgaXRcbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKHByZXZTdGF0ZSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBvcGVuSXRlbXM6IFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkocHJldlN0YXRlLm9wZW5JdGVtcyksIFtub2RlLmlkXSksXG4gICAgICAgICAgICBhY3RpdmVJdGVtOiBub2RlLmlkXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaXNOb2RlT3BlblwiLCBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgcmV0dXJuIF90aGlzLnN0YXRlLm9wZW5JdGVtcy5pbmNsdWRlcyhub2RlLmlkKTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbktleURvd25cIiwgZnVuY3Rpb24gKGV2ZW50LCBub2RlKSB7XG4gICAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgICBjYXNlIGtleXMuQVJST1dfRE9XTjpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgbm9kZUJ1dHRvbnMgPSBBcnJheS5mcm9tKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS10ZXN0LXN1Ymo9XFxcImV1aVRyZWVWaWV3QnV0dG9uLVwiLmNvbmNhdChfdGhpcy5zdGF0ZS50cmVlSUQsIFwiXFxcIl1cIikpKTtcbiAgICAgICAgICAgIHZhciBjdXJyZW50SW5kZXggPSBub2RlQnV0dG9ucy5pbmRleE9mKGV2ZW50LmN1cnJlbnRUYXJnZXQpO1xuXG4gICAgICAgICAgICBpZiAoY3VycmVudEluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgdmFyIG5leHRCdXR0b24gPSBub2RlQnV0dG9uc1tjdXJyZW50SW5kZXggKyAxXTtcblxuICAgICAgICAgICAgICBpZiAobmV4dEJ1dHRvbikge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgbmV4dEJ1dHRvbi5mb2N1cygpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlIGtleXMuQVJST1dfVVA6XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIF9ub2RlQnV0dG9ucyA9IEFycmF5LmZyb20oZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIltkYXRhLXRlc3Qtc3Viaj1cXFwiZXVpVHJlZVZpZXdCdXR0b24tXCIuY29uY2F0KF90aGlzLnN0YXRlLnRyZWVJRCwgXCJcXFwiXVwiKSkpO1xuXG4gICAgICAgICAgICB2YXIgX2N1cnJlbnRJbmRleCA9IF9ub2RlQnV0dG9ucy5pbmRleE9mKGV2ZW50LmN1cnJlbnRUYXJnZXQpO1xuXG4gICAgICAgICAgICBpZiAoX2N1cnJlbnRJbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAgIHZhciBwcmV2QnV0dG9uID0gX25vZGVCdXR0b25zW19jdXJyZW50SW5kZXggKyAtMV07XG5cbiAgICAgICAgICAgICAgaWYgKHByZXZCdXR0b24pIHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIHByZXZCdXR0b24uZm9jdXMoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBrZXlzLkFSUk9XX1JJR0hUOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmICghX3RoaXMuaXNOb2RlT3Blbihub2RlKSkge1xuICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICAgICAgICBfdGhpcy5oYW5kbGVOb2RlQ2xpY2sobm9kZSwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlIGtleXMuQVJST1dfTEVGVDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAoX3RoaXMuaXNOb2RlT3Blbihub2RlKSkge1xuICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICAgICAgICBfdGhpcy5oYW5kbGVOb2RlQ2xpY2sobm9kZSwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25DaGlsZHJlbktleWRvd25cIiwgZnVuY3Rpb24gKGV2ZW50LCBpbmRleCkge1xuICAgICAgaWYgKGV2ZW50LmtleSA9PT0ga2V5cy5BUlJPV19MRUZUKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIF90aGlzLmJ1dHRvblJlZltpbmRleF0uZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdWlUcmVlVmlldywgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkVXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgICAgIGlmICh0aGlzLnByb3BzLmlkICE9PSBwcmV2UHJvcHMuaWQpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L25vLWRpZC11cGRhdGUtc2V0LXN0YXRlXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIHRyZWVJRDogZ2V0VHJlZUlkKHRoaXMucHJvcHMuaWQsIHRoaXMuY29udGV4dCwgdGhpcy50cmVlSWRHZW5lcmF0b3IpXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wcy5jaGlsZHJlbixcbiAgICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wcy5jbGFzc05hbWUsXG4gICAgICAgICAgaXRlbXMgPSBfdGhpcyRwcm9wcy5pdGVtcyxcbiAgICAgICAgICBfdGhpcyRwcm9wcyRkaXNwbGF5ID0gX3RoaXMkcHJvcHMuZGlzcGxheSxcbiAgICAgICAgICBkaXNwbGF5ID0gX3RoaXMkcHJvcHMkZGlzcGxheSA9PT0gdm9pZCAwID8gJ2RlZmF1bHQnIDogX3RoaXMkcHJvcHMkZGlzcGxheSxcbiAgICAgICAgICBleHBhbmRCeURlZmF1bHQgPSBfdGhpcyRwcm9wcy5leHBhbmRCeURlZmF1bHQsXG4gICAgICAgICAgc2hvd0V4cGFuc2lvbkFycm93cyA9IF90aGlzJHByb3BzLnNob3dFeHBhbnNpb25BcnJvd3MsXG4gICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wcywgX2V4Y2x1ZGVkKTsgLy8gQ29tcHV0ZWQgY2xhc3NOYW1lc1xuXG5cbiAgICAgIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpVHJlZVZpZXcnLCBkaXNwbGF5ID8gZGlzcGxheVRvQ2xhc3NOYW1lTWFwW2Rpc3BsYXldIDogbnVsbCwge1xuICAgICAgICAnZXVpVHJlZVZpZXctLXdpdGhBcnJvd3MnOiBzaG93RXhwYW5zaW9uQXJyb3dzXG4gICAgICB9LCBjbGFzc05hbWUpO1xuICAgICAgdmFyIGluc3RydWN0aW9uc0lkID0gXCJcIi5jb25jYXQodGhpcy5zdGF0ZS50cmVlSUQsIFwiLS1pbnN0cnVjdGlvblwiKTtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVRyZWVWaWV3Q29udGV4dC5Qcm92aWRlciwge1xuICAgICAgICB2YWx1ZTogdGhpcy5zdGF0ZS50cmVlSURcbiAgICAgIH0sIF9fX0Vtb3Rpb25KU1goRXVpVGV4dCwge1xuICAgICAgICBzaXplOiBkaXNwbGF5ID09PSAnY29tcHJlc3NlZCcgPyAncycgOiAnbScsXG4gICAgICAgIGNsYXNzTmFtZTogXCJldWlUcmVlVmlld19fd3JhcHBlclwiXG4gICAgICB9LCAhdGhpcy5pc05lc3RlZCAmJiBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgdG9rZW46IFwiZXVpVHJlZVZpZXcubGlzdE5hdmlnYXRpb25JbnN0cnVjdGlvbnNcIixcbiAgICAgICAgZGVmYXVsdDogXCJZb3UgY2FuIHF1aWNrbHkgbmF2aWdhdGUgdGhpcyBsaXN0IHVzaW5nIGFycm93IGtleXMuXCJcbiAgICAgIH0sIGZ1bmN0aW9uIChsaXN0TmF2aWdhdGlvbkluc3RydWN0aW9ucykge1xuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlTY3JlZW5SZWFkZXJPbmx5LCBudWxsLCBfX19FbW90aW9uSlNYKFwicFwiLCB7XG4gICAgICAgICAgaWQ6IGluc3RydWN0aW9uc0lkXG4gICAgICAgIH0sIGxpc3ROYXZpZ2F0aW9uSW5zdHJ1Y3Rpb25zKSk7XG4gICAgICB9KSwgX19fRW1vdGlvbkpTWChcInVsXCIsIF9leHRlbmRzKHtcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICBpZDogIXRoaXMuaXNOZXN0ZWQgPyB0aGlzLnN0YXRlLnRyZWVJRCA6IHVuZGVmaW5lZCxcbiAgICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6ICF0aGlzLmlzTmVzdGVkID8gaW5zdHJ1Y3Rpb25zSWQgOiB1bmRlZmluZWRcbiAgICAgIH0sIHJlc3QpLCBpdGVtcy5tYXAoZnVuY3Rpb24gKG5vZGUsIGluZGV4KSB7XG4gICAgICAgIHZhciBidXR0b25JZCA9IG5vZGUuaWQ7XG5cbiAgICAgICAgdmFyIHdyYXBwaW5nSWQgPSBfdGhpczIudHJlZUlkR2VuZXJhdG9yKGJ1dHRvbklkKTtcblxuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlJbm5lclRleHQsIHtcbiAgICAgICAgICBrZXk6IG5vZGUuaWQgKyBpbmRleCxcbiAgICAgICAgICBmYWxsYmFjazogdHlwZW9mIG5vZGUubGFiZWwgPT09ICdzdHJpbmcnID8gbm9kZS5sYWJlbCA6ICcnXG4gICAgICAgIH0sIGZ1bmN0aW9uIChyZWYsIGlubmVyVGV4dCkge1xuICAgICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICAgIGtleTogbm9kZS5pZCArIGluZGV4LFxuICAgICAgICAgICAgdG9rZW46IFwiZXVpVHJlZVZpZXcuYXJpYUxhYmVsXCIsXG4gICAgICAgICAgICBkZWZhdWx0OiBcIntub2RlTGFiZWx9IGNoaWxkIG9mIHthcmlhTGFiZWx9XCIsXG4gICAgICAgICAgICB2YWx1ZXM6IHtcbiAgICAgICAgICAgICAgbm9kZUxhYmVsOiBpbm5lclRleHQsXG4gICAgICAgICAgICAgIGFyaWFMYWJlbDogaGFzQXJpYUxhYmVsKHJlc3QpID8gcmVzdFsnYXJpYS1sYWJlbCddIDogJydcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCBmdW5jdGlvbiAoYXJpYUxhYmVsKSB7XG4gICAgICAgICAgICB2YXIgbGFiZWwgPSBoYXNBcmlhTGFiZWwocmVzdCkgPyB7XG4gICAgICAgICAgICAgICdhcmlhLWxhYmVsJzogYXJpYUxhYmVsXG4gICAgICAgICAgICB9IDoge1xuICAgICAgICAgICAgICAnYXJpYS1sYWJlbGxlZGJ5JzogXCJcIi5jb25jYXQoYnV0dG9uSWQsIFwiIFwiKS5jb25jYXQocmVzdFsnYXJpYS1sYWJlbGxlZGJ5J10pXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdmFyIG5vZGVDbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpVHJlZVZpZXdfX25vZGUnLCBkaXNwbGF5ID8gZGlzcGxheVRvQ2xhc3NOYW1lTWFwW2Rpc3BsYXldIDogbnVsbCwge1xuICAgICAgICAgICAgICAnZXVpVHJlZVZpZXdfX25vZGUtLWV4cGFuZGVkJzogX3RoaXMyLmlzTm9kZU9wZW4obm9kZSlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIG5vZGVCdXR0b25DbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpVHJlZVZpZXdfX25vZGVJbm5lcicsIHNob3dFeHBhbnNpb25BcnJvd3MgJiYgbm9kZS5jaGlsZHJlbiA/ICdldWlUcmVlVmlld19fbm9kZUlubmVyLS13aXRoQXJyb3dzJyA6IG51bGwsIF90aGlzMi5zdGF0ZS5hY3RpdmVJdGVtID09PSBub2RlLmlkID8gJ2V1aVRyZWVWaWV3X19ub2RlLS1hY3RpdmUnIDogbnVsbCwgbm9kZS5jbGFzc05hbWUgPyBub2RlLmNsYXNzTmFtZSA6IG51bGwpO1xuICAgICAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goUmVhY3QuRnJhZ21lbnQsIG51bGwsIF9fX0Vtb3Rpb25KU1goXCJsaVwiLCB7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogbm9kZUNsYXNzZXNcbiAgICAgICAgICAgIH0sIF9fX0Vtb3Rpb25KU1goXCJidXR0b25cIiwge1xuICAgICAgICAgICAgICBpZDogYnV0dG9uSWQsXG4gICAgICAgICAgICAgIFwiYXJpYS1jb250cm9sc1wiOiB3cmFwcGluZ0lkLFxuICAgICAgICAgICAgICBcImFyaWEtZXhwYW5kZWRcIjogX3RoaXMyLmlzTm9kZU9wZW4obm9kZSksXG4gICAgICAgICAgICAgIHJlZjogZnVuY3Rpb24gcmVmKF9yZWYzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMi5zZXRCdXR0b25SZWYoX3JlZjMsIGluZGV4KTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcImV1aVRyZWVWaWV3QnV0dG9uLVwiLmNvbmNhdChfdGhpczIuc3RhdGUudHJlZUlEKSxcbiAgICAgICAgICAgICAgb25LZXlEb3duOiBmdW5jdGlvbiBvbktleURvd24oZXZlbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMyLm9uS2V5RG93bihldmVudCwgbm9kZSk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMi5oYW5kbGVOb2RlQ2xpY2sobm9kZSk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogbm9kZUJ1dHRvbkNsYXNzZXNcbiAgICAgICAgICAgIH0sIHNob3dFeHBhbnNpb25BcnJvd3MgJiYgbm9kZS5jaGlsZHJlbiA/IF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpVHJlZVZpZXdfX2V4cGFuc2lvbkFycm93XCIsXG4gICAgICAgICAgICAgIHNpemU6IGRpc3BsYXkgPT09ICdjb21wcmVzc2VkJyA/ICdzJyA6ICdtJyxcbiAgICAgICAgICAgICAgdHlwZTogX3RoaXMyLmlzTm9kZU9wZW4obm9kZSkgPyAnYXJyb3dEb3duJyA6ICdhcnJvd1JpZ2h0J1xuICAgICAgICAgICAgfSkgOiBudWxsLCBub2RlLmljb24gJiYgIW5vZGUudXNlRW1wdHlJY29uID8gX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpVHJlZVZpZXdfX2ljb25XcmFwcGVyXCJcbiAgICAgICAgICAgIH0sIF90aGlzMi5pc05vZGVPcGVuKG5vZGUpICYmIG5vZGUuaWNvbldoZW5FeHBhbmRlZCA/IG5vZGUuaWNvbldoZW5FeHBhbmRlZCA6IG5vZGUuaWNvbikgOiBudWxsLCBub2RlLnVzZUVtcHR5SWNvbiAmJiAhbm9kZS5pY29uID8gX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpVHJlZVZpZXdfX2ljb25QbGFjZWhvbGRlclwiXG4gICAgICAgICAgICB9KSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgICAgICAgICAgcmVmOiByZWYsXG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlUcmVlVmlld19fbm9kZUxhYmVsXCJcbiAgICAgICAgICAgIH0sIG5vZGUubGFiZWwpKSwgX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICAgICAgICAgIGlkOiB3cmFwcGluZ0lkLFxuICAgICAgICAgICAgICBvbktleURvd246IGZ1bmN0aW9uIG9uS2V5RG93bihldmVudCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfdGhpczIub25DaGlsZHJlbktleWRvd24oZXZlbnQsIGluZGV4KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgbm9kZS5jaGlsZHJlbiAmJiBfdGhpczIuaXNOb2RlT3Blbihub2RlKSA/IF9fX0Vtb3Rpb25KU1goRXVpVHJlZVZpZXcsIF9leHRlbmRzKHtcbiAgICAgICAgICAgICAgaXRlbXM6IG5vZGUuY2hpbGRyZW4sXG4gICAgICAgICAgICAgIGRpc3BsYXk6IGRpc3BsYXksXG4gICAgICAgICAgICAgIHNob3dFeHBhbnNpb25BcnJvd3M6IHNob3dFeHBhbnNpb25BcnJvd3MsXG4gICAgICAgICAgICAgIGV4cGFuZEJ5RGVmYXVsdDogX3RoaXMyLnN0YXRlLmV4cGFuZENoaWxkTm9kZXNcbiAgICAgICAgICAgIH0sIGxhYmVsKSkgOiBudWxsKSkpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pKSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlUcmVlVmlldztcbn0oQ29tcG9uZW50KTtcblxuX2RlZmluZVByb3BlcnR5KEV1aVRyZWVWaWV3LCBcImNvbnRleHRUeXBlXCIsIEV1aVRyZWVWaWV3Q29udGV4dCk7XG5cbkV1aVRyZWVWaWV3LnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqIEFuIGFycmF5IG9mIEV1aVRyZWVWaWV3Tm9kZXNcbiAgICAgICAqL1xuICBpdGVtczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAvKiogQW4gYXJyYXkgb2YgRXVpVHJlZVZpZXdOb2RlcyB0byByZW5kZXIgYXMgY2hpbGRyZW5cbiAgICAgICAqL1xuICAgIGNoaWxkcmVuOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQpLFxuXG4gICAgLyoqIFRoZSByZWFkYWJsZSBsYWJlbCBmb3IgdGhlIGl0ZW1cbiAgICAgICAqL1xuICAgIGxhYmVsOiBQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLFxuXG4gICAgLyoqIEEgdW5pcXVlIElEXG4gICAgICAgKi9cbiAgICBpZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuXG4gICAgLyoqIEFuIGljb24gdG8gdXNlIG9uIHRoZSBsZWZ0IG9mIHRoZSBsYWJlbFxuICAgICAgICovXG4gICAgaWNvbjogUHJvcFR5cGVzLmVsZW1lbnQsXG5cbiAgICAvKiogRGlzcGxheSBhIGRpZmZlcmVudCBpY29uIHdoZW4gdGhlIGl0ZW0gaXMgZXhwYW5kZWQuXG4gICAgICBGb3IgaW5zdGFuY2UsIGFuIG9wZW4gZm9sZGVyIG9yIGEgZG93biBhcnJvd1xuICAgICAgKi9cbiAgICBpY29uV2hlbkV4cGFuZGVkOiBQcm9wVHlwZXMuZWxlbWVudCxcblxuICAgIC8qKiBVc2UgYW4gZW1wdHkgaWNvbiB0byBrZWVwIGl0ZW1zIHdpdGhvdXQgYW4gaWNvblxuICAgICAgbGluZWQgdXAgd2l0aCB0aGVpciBzaWJsaW5nc1xuICAgICAgKi9cbiAgICB1c2VFbXB0eUljb246IFByb3BUeXBlcy5ib29sLFxuXG4gICAgLyoqIFdoZXRoZXIgb3Igbm90IHRoZSBpdGVtIGlzIGV4cGFuZGVkLlxuICAgICAgICovXG4gICAgaXNFeHBhbmRlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgICAvKiogT3B0aW9uYWwgY2xhc3MgdG8gdGhyb3cgb24gdGhlIG5vZGVcbiAgICAgICAqL1xuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAgIC8qKiBGdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIGl0ZW0gaXMgY2xpY2tlZC5cbiAgICAgICBUaGUgb3BlbiBzdGF0ZSBvZiB0aGUgaXRlbSB3aWxsIGFsd2F5cyBiZSB0b2dnbGVkLlxuICAgICAgICovXG4gICAgY2FsbGJhY2s6IFByb3BUeXBlcy5mdW5jXG4gIH0pLmlzUmVxdWlyZWQpLmlzUmVxdWlyZWQsXG5cbiAgLyoqIE9wdGlvbmFsbHkgdXNlIGEgdmFyaWF0aW9uIHdpdGggc21hbGxlciB0ZXh0IGFuZCBpY29uIHNpemVzXG4gICAgICAgKi9cbiAgZGlzcGxheTogUHJvcFR5cGVzLm9uZU9mKFtcImRlZmF1bHRcIiwgXCJjb21wcmVzc2VkXCJdKSxcblxuICAvKiogU2V0IGFsbCBpdGVtcyB0byBvcGVuIG9uIGluaXRpYWwgbG9hZFxuICAgICAgICovXG4gIGV4cGFuZEJ5RGVmYXVsdDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqIERpc3BsYXkgZXhwYW5zaW9uIGFycm93cyBuZXh0IHRvIGFsbCBpdGVtc1xuICAgICAgICogdGhhdCBjb250YWluIGNoaWxkcmVuXG4gICAgICAgKi9cbiAgc2hvd0V4cGFuc2lvbkFycm93czogUHJvcFR5cGVzLmJvb2wsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxsZWRieVwiOiBQcm9wVHlwZXMuc3RyaW5nXG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbnZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcIm9wdGlvbnNcIiwgXCJvbkNoYW5nZVwiLCBcIm9uQWN0aXZlT3B0aW9uQ2hhbmdlXCIsIFwic2VhcmNoYWJsZVwiLCBcInNlYXJjaFByb3BzXCIsIFwic2luZ2xlU2VsZWN0aW9uXCIsIFwiaXNMb2FkaW5nXCIsIFwibGlzdFByb3BzXCIsIFwicmVuZGVyT3B0aW9uXCIsIFwiaGVpZ2h0XCIsIFwiYWxsb3dFeGNsdXNpb25zXCIsIFwiYXJpYS1sYWJlbFwiLCBcImFyaWEtZGVzY3JpYmVkYnlcIiwgXCJsb2FkaW5nTWVzc2FnZVwiLCBcIm5vTWF0Y2hlc01lc3NhZ2VcIiwgXCJlbXB0eU1lc3NhZ2VcIiwgXCJlcnJvck1lc3NhZ2VcIiwgXCJpc1ByZUZpbHRlcmVkXCJdLFxuICAgIF9leGNsdWRlZDIgPSBbXCJhcmlhLWxhYmVsXCIsIFwiYXJpYS1kZXNjcmliZWRieVwiLCBcIm9uQ2hhbmdlXCIsIFwiZGVmYXVsdFZhbHVlXCIsIFwiaW5wdXRSZWZcIl0sXG4gICAgX2V4Y2x1ZGVkMyA9IFtcImFyaWEtbGFiZWxcIiwgXCJhcmlhLWRlc2NyaWJlZGJ5XCIsIFwiaXNWaXJ0dWFsaXplZFwiLCBcInJvd0hlaWdodFwiXTtcblxuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHsgdmFyIF9pID0gYXJyID09IG51bGwgPyBudWxsIDogdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBhcnJbU3ltYm9sLml0ZXJhdG9yXSB8fCBhcnJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAoX2kgPT0gbnVsbCkgcmV0dXJuOyB2YXIgX2FyciA9IFtdOyB2YXIgX24gPSB0cnVlOyB2YXIgX2QgPSBmYWxzZTsgdmFyIF9zLCBfZTsgdHJ5IHsgZm9yIChfaSA9IF9pLmNhbGwoYXJyKTsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkgeyBfYXJyLnB1c2goX3MudmFsdWUpOyBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7IH0gfSBjYXRjaCAoZXJyKSB7IF9kID0gdHJ1ZTsgX2UgPSBlcnI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTsgfSBmaW5hbGx5IHsgaWYgKF9kKSB0aHJvdyBfZTsgfSB9IHJldHVybiBfYXJyOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjsgfVxuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCwgY3JlYXRlUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBFdWlTZWxlY3RhYmxlU2VhcmNoIH0gZnJvbSAnLi9zZWxlY3RhYmxlX3NlYXJjaCc7XG5pbXBvcnQgeyBFdWlTZWxlY3RhYmxlTWVzc2FnZSB9IGZyb20gJy4vc2VsZWN0YWJsZV9tZXNzYWdlJztcbmltcG9ydCB7IEV1aVNlbGVjdGFibGVMaXN0IH0gZnJvbSAnLi9zZWxlY3RhYmxlX2xpc3QnO1xuaW1wb3J0IHsgRXVpTG9hZGluZ1NwaW5uZXIgfSBmcm9tICcuLi9sb2FkaW5nJztcbmltcG9ydCB7IEV1aVNwYWNlciB9IGZyb20gJy4uL3NwYWNlcic7XG5pbXBvcnQgeyBnZXRNYXRjaGluZ09wdGlvbnMgfSBmcm9tICcuL21hdGNoaW5nX29wdGlvbnMnO1xuaW1wb3J0IHsga2V5cywgaHRtbElkR2VuZXJhdG9yIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpU2NyZWVuUmVhZGVyTGl2ZSwgRXVpU2NyZWVuUmVhZGVyT25seSB9IGZyb20gJy4uL2FjY2Vzc2liaWxpdHknO1xuaW1wb3J0IHsgRXVpSTE4biB9IGZyb20gJy4uL2kxOG4nO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpU2VsZWN0YWJsZSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoRXVpU2VsZWN0YWJsZSwgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihFdWlTZWxlY3RhYmxlKTtcblxuICBmdW5jdGlvbiBFdWlTZWxlY3RhYmxlKHByb3BzKSB7XG4gICAgdmFyIF9zZWFyY2hQcm9wcyRvbkNoYW5nZTtcblxuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlTZWxlY3RhYmxlKTtcblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgcHJvcHMpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImlucHV0UmVmXCIsIG51bGwpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImNvbnRhaW5lclJlZlwiLCAvKiNfX1BVUkVfXyovY3JlYXRlUmVmKCkpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9wdGlvbnNMaXN0UmVmXCIsIC8qI19fUFVSRV9fKi9jcmVhdGVSZWYoKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicHJldmVudE9uRm9jdXNcIiwgZmFsc2UpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInJvb3RJZFwiLCB2b2lkIDApO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm1lc3NhZ2VDb250ZW50SWRcIiwgdm9pZCAwKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJsaXN0SWRcIiwgdm9pZCAwKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbk1vdXNlRG93blwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBCeXBhc3Mgb25Gb2N1cyB3aGVuIGEgY2xpY2sgZXZlbnQgb3JpZ2luYXRlcyBmcm9tIHRoaXMuY29udGFpbmVyUmVmLlxuICAgICAgLy8gUHJldmVudHMgb25Gb2N1cyBmcm9tIHNjcm9sbGluZyBhd2F5IGZyb20gYSBjbGlja2VkIG9wdGlvbiBhbmQgbmVnYXRpbmcgdGhlIHNlbGVjdGlvbiBldmVudC5cbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9lbGFzdGljL2V1aS9pc3N1ZXMvNDE0N1xuICAgICAgX3RoaXMucHJldmVudE9uRm9jdXMgPSB0cnVlO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uRm9jdXNcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKF90aGlzLnByZXZlbnRPbkZvY3VzKSB7XG4gICAgICAgIF90aGlzLnByZXZlbnRPbkZvY3VzID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFfdGhpcy5zdGF0ZS52aXNpYmxlT3B0aW9ucy5sZW5ndGggfHwgX3RoaXMuc3RhdGUuYWN0aXZlT3B0aW9uSW5kZXggIT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBmaXJzdFNlbGVjdGVkID0gX3RoaXMuc3RhdGUudmlzaWJsZU9wdGlvbnMuZmluZEluZGV4KGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbi5jaGVja2VkICYmICFvcHRpb24uZGlzYWJsZWQgJiYgIW9wdGlvbi5pc0dyb3VwTGFiZWw7XG4gICAgICB9KTtcblxuICAgICAgaWYgKGZpcnN0U2VsZWN0ZWQgPiAtMSkge1xuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXg6IGZpcnN0U2VsZWN0ZWQsXG4gICAgICAgICAgaXNGb2N1c2VkOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4OiBfdGhpcy5zdGF0ZS52aXNpYmxlT3B0aW9ucy5maW5kSW5kZXgoZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuICFvcHRpb24uZGlzYWJsZWQgJiYgIW9wdGlvbi5pc0dyb3VwTGFiZWw7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgaXNGb2N1c2VkOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uS2V5RG93blwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIHZhciBvcHRpb25zTGlzdCA9IF90aGlzLm9wdGlvbnNMaXN0UmVmLmN1cnJlbnQ7XG5cbiAgICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICAgIGNhc2Uga2V5cy5BUlJPV19VUDpcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgICAgX3RoaXMuaW5jcmVtZW50QWN0aXZlT3B0aW9uSW5kZXgoLTEpO1xuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBrZXlzLkFSUk9XX0RPV046XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICAgIF90aGlzLmluY3JlbWVudEFjdGl2ZU9wdGlvbkluZGV4KDEpO1xuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIC8vIEZvciBub24tc2VhcmNoYWJsZSBpbnN0YW5jZXMsIFNQQUNFIGludGVyYWN0aW9uIHNob3VsZCBhbGlnbiB3aXRoXG4gICAgICAgIC8vIHRoZSB1c2VyIGV4cGVjdGF0aW9uIG9mIHNlbGVjdGlvbiB0b2dnbGluZyAoZS5nLiwgaW5wdXRbdHlwZT1jaGVja2JveF0pLlxuICAgICAgICAvLyBFTlRFUiBpcyBhbHNvIGEgdmFsaWQgc2VsZWN0aW9uIG1lY2hhbmlzbSBpbiB0aGlzIGNhc2UuXG5cbiAgICAgICAgY2FzZSBrZXlzLkVOVEVSOlxuICAgICAgICBjYXNlIGtleXMuU1BBQ0U6XG4gICAgICAgICAgaWYgKF90aGlzLnByb3BzLnNlYXJjaGFibGUpIHtcbiAgICAgICAgICAgIHZhciBfdGhpcyRvcHRpb25zTGlzdFJlZiQsIF90aGlzJG9wdGlvbnNMaXN0UmVmJDI7XG5cbiAgICAgICAgICAgIC8vIEZvciBzZWFyY2hhYmxlIGluc3RhbmNlcywgU1BBQ0UgaXMgcmVzZXJ2ZWQgYXMgYSBjaGFyYWN0ZXIgZm9yIGZpbHRlcmluZ1xuICAgICAgICAgICAgLy8gdmlhIHRoZSBpbnB1dCBib3gsIGFuZCBhcyBzdWNoIG9ubHkgRU5URVIgd2lsbCB0b2dnbGUgc2VsZWN0aW9uLlxuICAgICAgICAgICAgaWYgKGV2ZW50LnRhcmdldCA9PT0gX3RoaXMuaW5wdXRSZWYgJiYgZXZlbnQua2V5ID09PSBrZXlzLlNQQUNFKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH0gLy8gQ2hlY2sgaWYgdGhlIHVzZXIgaXMgaW50ZXJhY3Rpbmcgd2l0aCBzb21ldGhpbmcgb3RoZXIgdGhhbiB0aGVcbiAgICAgICAgICAgIC8vIHNlYXJjaGJveCBvciBzZWxlY3Rpb24gbGlzdC4gSWYgbm90LCB0aGUgdXNlciBpcyBhdHRlbXB0aW5nIHRvXG4gICAgICAgICAgICAvLyBpbnRlcmFjdCB3aXRoIGFuIGludGVybmFsIGJ1dHRvbiBzdWNoIGFzIHRoZSBjbGVhciBidXR0b24sXG4gICAgICAgICAgICAvLyBhbmQgdGhlIGV2ZW50IHNob3VsZCBub3QgYmUgYWx0ZXJlZC5cblxuXG4gICAgICAgICAgICBpZiAoIShldmVudC50YXJnZXQgPT09IF90aGlzLmlucHV0UmVmIHx8IGV2ZW50LnRhcmdldCA9PT0gKChfdGhpcyRvcHRpb25zTGlzdFJlZiQgPSBfdGhpcy5vcHRpb25zTGlzdFJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfdGhpcyRvcHRpb25zTGlzdFJlZiQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfdGhpcyRvcHRpb25zTGlzdFJlZiQyID0gX3RoaXMkb3B0aW9uc0xpc3RSZWYkLmxpc3RCb3hSZWYpID09PSBudWxsIHx8IF90aGlzJG9wdGlvbnNMaXN0UmVmJDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJG9wdGlvbnNMaXN0UmVmJDIucGFyZW50RWxlbWVudCkpKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgICAgaWYgKF90aGlzLnN0YXRlLmFjdGl2ZU9wdGlvbkluZGV4ICE9IG51bGwgJiYgb3B0aW9uc0xpc3QpIHtcbiAgICAgICAgICAgIGV2ZW50LnBlcnNpc3QoKTsgLy8gTk9URTogVGhpcyBpcyBuZWVkZWQgZm9yIFJlYWN0IHYxNiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuXG4gICAgICAgICAgICBvcHRpb25zTGlzdC5vbkFkZE9yUmVtb3ZlT3B0aW9uKF90aGlzLnN0YXRlLnZpc2libGVPcHRpb25zW190aGlzLnN0YXRlLmFjdGl2ZU9wdGlvbkluZGV4XSwgZXZlbnQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2Uga2V5cy5BTFQ6XG4gICAgICAgIGNhc2Uga2V5cy5TSElGVDpcbiAgICAgICAgY2FzZSBrZXlzLkNUUkw6XG4gICAgICAgIGNhc2Uga2V5cy5NRVRBOlxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXg6IHVuZGVmaW5lZFxuICAgICAgICAgIH0sIF90aGlzLm9uRm9jdXMpO1xuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaW5jcmVtZW50QWN0aXZlT3B0aW9uSW5kZXhcIiwgZnVuY3Rpb24gKGFtb3VudCkge1xuICAgICAgLy8gSWYgdGhlcmUgYXJlIG5vIG9wdGlvbnMgYXZhaWxhYmxlLCBkbyBub3RoaW5nLlxuICAgICAgaWYgKCFfdGhpcy5zdGF0ZS52aXNpYmxlT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAoX3JlZikge1xuICAgICAgICB2YXIgYWN0aXZlT3B0aW9uSW5kZXggPSBfcmVmLmFjdGl2ZU9wdGlvbkluZGV4LFxuICAgICAgICAgICAgdmlzaWJsZU9wdGlvbnMgPSBfcmVmLnZpc2libGVPcHRpb25zO1xuICAgICAgICB2YXIgbmV4dEFjdGl2ZU9wdGlvbkluZGV4O1xuXG4gICAgICAgIGlmIChhY3RpdmVPcHRpb25JbmRleCA9PSBudWxsKSB7XG4gICAgICAgICAgLy8gSWYgdGhpcyBpcyB0aGUgYmVnaW5uaW5nIG9mIHRoZSB1c2VyJ3Mga2V5Ym9hcmQgbmF2aWdhdGlvbiBvZiB0aGUgbWVudSwgdGhlbiB3ZSdsbCBmb2N1c1xuICAgICAgICAgIC8vIGVpdGhlciB0aGUgZmlyc3Qgb3IgbGFzdCBpdGVtLlxuICAgICAgICAgIG5leHRBY3RpdmVPcHRpb25JbmRleCA9IGFtb3VudCA8IDAgPyB2aXNpYmxlT3B0aW9ucy5sZW5ndGggLSAxIDogMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZXh0QWN0aXZlT3B0aW9uSW5kZXggPSBhY3RpdmVPcHRpb25JbmRleCArIGFtb3VudDtcblxuICAgICAgICAgIGlmIChuZXh0QWN0aXZlT3B0aW9uSW5kZXggPCAwKSB7XG4gICAgICAgICAgICBuZXh0QWN0aXZlT3B0aW9uSW5kZXggPSB2aXNpYmxlT3B0aW9ucy5sZW5ndGggLSAxO1xuICAgICAgICAgIH0gZWxzZSBpZiAobmV4dEFjdGl2ZU9wdGlvbkluZGV4ID09PSB2aXNpYmxlT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIG5leHRBY3RpdmVPcHRpb25JbmRleCA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIEdyb3VwIHRpdGxlcyBhbmQgZGlzYWJsZWQgb3B0aW9ucyBhcmUgaW5jbHVkZWQgaW4gb3B0aW9uIGxpc3QgYnV0IGFyZSBub3Qgc2VsZWN0YWJsZVxuXG5cbiAgICAgICAgdmFyIGRpcmVjdGlvbiA9IGFtb3VudCA+IDAgPyAxIDogLTE7XG5cbiAgICAgICAgd2hpbGUgKHZpc2libGVPcHRpb25zW25leHRBY3RpdmVPcHRpb25JbmRleF0uaXNHcm91cExhYmVsIHx8IHZpc2libGVPcHRpb25zW25leHRBY3RpdmVPcHRpb25JbmRleF0uZGlzYWJsZWQpIHtcbiAgICAgICAgICBuZXh0QWN0aXZlT3B0aW9uSW5kZXggPSBuZXh0QWN0aXZlT3B0aW9uSW5kZXggKyBkaXJlY3Rpb247XG5cbiAgICAgICAgICBpZiAobmV4dEFjdGl2ZU9wdGlvbkluZGV4IDwgMCkge1xuICAgICAgICAgICAgbmV4dEFjdGl2ZU9wdGlvbkluZGV4ID0gdmlzaWJsZU9wdGlvbnMubGVuZ3RoIC0gMTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG5leHRBY3RpdmVPcHRpb25JbmRleCA9PT0gdmlzaWJsZU9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBuZXh0QWN0aXZlT3B0aW9uSW5kZXggPSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXg6IG5leHRBY3RpdmVPcHRpb25JbmRleFxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25TZWFyY2hDaGFuZ2VcIiwgZnVuY3Rpb24gKHNlYXJjaFZhbHVlLCB2aXNpYmxlT3B0aW9ucykge1xuICAgICAgdmFyIF90aGlzJHByb3BzJHNlYXJjaFBybywgX3RoaXMkcHJvcHMkc2VhcmNoUHJvMjtcblxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBzZWFyY2hWYWx1ZTogc2VhcmNoVmFsdWUsXG4gICAgICAgIHZpc2libGVPcHRpb25zOiB2aXNpYmxlT3B0aW9ucyxcbiAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXg6IHVuZGVmaW5lZFxuICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoX3RoaXMuc3RhdGUuaXNGb2N1c2VkKSB7XG4gICAgICAgICAgX3RoaXMub25Gb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgKF90aGlzJHByb3BzJHNlYXJjaFBybyA9IF90aGlzLnByb3BzLnNlYXJjaFByb3BzKSA9PT0gbnVsbCB8fCBfdGhpcyRwcm9wcyRzZWFyY2hQcm8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfdGhpcyRwcm9wcyRzZWFyY2hQcm8yID0gX3RoaXMkcHJvcHMkc2VhcmNoUHJvLm9uQ2hhbmdlKSA9PT0gbnVsbCB8fCBfdGhpcyRwcm9wcyRzZWFyY2hQcm8yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRwcm9wcyRzZWFyY2hQcm8yLmNhbGwoX3RoaXMkcHJvcHMkc2VhcmNoUHJvLCBzZWFyY2hWYWx1ZSwgdmlzaWJsZU9wdGlvbnMpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uQ29udGFpbmVyQmx1clwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgdmFyIF9lJHJlbGF0ZWRUYXJnZXQsIF9lJHJlbGF0ZWRUYXJnZXQkZmlycztcblxuICAgICAgLy8gSWdub3JlIGJsdXIgZXZlbnRzIHdoZW4gbW92aW5nIGZyb20gc2VhcmNoIHRvIG9wdGlvbiB0byBhdm9pZCBhY3RpdmVPcHRpb25JbmRleCBjb25mbGljdHNcbiAgICAgIGlmICgoKF9lJHJlbGF0ZWRUYXJnZXQgPSBlLnJlbGF0ZWRUYXJnZXQpID09PSBudWxsIHx8IF9lJHJlbGF0ZWRUYXJnZXQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZSRyZWxhdGVkVGFyZ2V0JGZpcnMgPSBfZSRyZWxhdGVkVGFyZ2V0LmZpcnN0Q2hpbGQpID09PSBudWxsIHx8IF9lJHJlbGF0ZWRUYXJnZXQkZmlycyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2UkcmVsYXRlZFRhcmdldCRmaXJzLmlkKSA9PT0gX3RoaXMubGlzdElkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBhY3RpdmVPcHRpb25JbmRleDogdW5kZWZpbmVkLFxuICAgICAgICBpc0ZvY3VzZWQ6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbk9wdGlvbkNsaWNrXCIsIGZ1bmN0aW9uIChvcHRpb25zLCBldmVudCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgaXNQcmVGaWx0ZXJlZCA9IF90aGlzJHByb3BzLmlzUHJlRmlsdGVyZWQsXG4gICAgICAgICAgb25DaGFuZ2UgPSBfdGhpcyRwcm9wcy5vbkNoYW5nZTtcbiAgICAgIHZhciBzZWFyY2hWYWx1ZSA9IF90aGlzLnN0YXRlLnNlYXJjaFZhbHVlO1xuICAgICAgdmFyIHZpc2libGVPcHRpb25zID0gZ2V0TWF0Y2hpbmdPcHRpb25zKG9wdGlvbnMsIHNlYXJjaFZhbHVlLCBpc1ByZUZpbHRlcmVkKTtcblxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICB2aXNpYmxlT3B0aW9uczogdmlzaWJsZU9wdGlvbnNcbiAgICAgIH0pO1xuXG4gICAgICBpZiAob25DaGFuZ2UpIHtcbiAgICAgICAgb25DaGFuZ2Uob3B0aW9ucywgZXZlbnQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInNjcm9sbFRvSXRlbVwiLCBmdW5jdGlvbiAoaW5kZXgsIGFsaWduKSB7XG4gICAgICB2YXIgX3RoaXMkb3B0aW9uc0xpc3RSZWYkMywgX3RoaXMkb3B0aW9uc0xpc3RSZWYkNDtcblxuICAgICAgKF90aGlzJG9wdGlvbnNMaXN0UmVmJDMgPSBfdGhpcy5vcHRpb25zTGlzdFJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfdGhpcyRvcHRpb25zTGlzdFJlZiQzID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX3RoaXMkb3B0aW9uc0xpc3RSZWYkNCA9IF90aGlzJG9wdGlvbnNMaXN0UmVmJDMubGlzdFJlZikgPT09IG51bGwgfHwgX3RoaXMkb3B0aW9uc0xpc3RSZWYkNCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkb3B0aW9uc0xpc3RSZWYkNC5zY3JvbGxUb0l0ZW0oaW5kZXgsIGFsaWduKTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJtYWtlT3B0aW9uSWRcIiwgZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICByZXR1cm4gaW5kZXggIT0gbnVsbCA/IFwiXCIuY29uY2F0KF90aGlzLmxpc3RJZCwgXCJfb3B0aW9uLVwiKS5jb25jYXQoaW5kZXgpIDogJyc7XG4gICAgfSk7XG5cbiAgICBfdGhpcy5yb290SWQgPSBwcm9wcy5pZCA/IGZ1bmN0aW9uIChzdWZmaXgpIHtcbiAgICAgIHJldHVybiBcIlwiLmNvbmNhdChwcm9wcy5pZCkuY29uY2F0KHN1ZmZpeCA/IFwiX1wiLmNvbmNhdChzdWZmaXgpIDogJycpO1xuICAgIH0gOiBodG1sSWRHZW5lcmF0b3IoKTtcbiAgICBfdGhpcy5saXN0SWQgPSBfdGhpcy5yb290SWQoJ2xpc3Rib3gnKTtcbiAgICBfdGhpcy5tZXNzYWdlQ29udGVudElkID0gX3RoaXMucm9vdElkKCdtZXNzYWdlQ29udGVudCcpO1xuICAgIHZhciBfb3B0aW9ucyA9IHByb3BzLm9wdGlvbnMsXG4gICAgICAgIHNpbmdsZVNlbGVjdGlvbiA9IHByb3BzLnNpbmdsZVNlbGVjdGlvbixcbiAgICAgICAgX2lzUHJlRmlsdGVyZWQgPSBwcm9wcy5pc1ByZUZpbHRlcmVkLFxuICAgICAgICBzZWFyY2hQcm9wcyA9IHByb3BzLnNlYXJjaFByb3BzO1xuICAgIHZhciBpbml0aWFsU2VhcmNoVmFsdWUgPSAoc2VhcmNoUHJvcHMgPT09IG51bGwgfHwgc2VhcmNoUHJvcHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlYXJjaFByb3BzLnZhbHVlKSB8fCBTdHJpbmcoKHNlYXJjaFByb3BzID09PSBudWxsIHx8IHNlYXJjaFByb3BzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWFyY2hQcm9wcy5kZWZhdWx0VmFsdWUpIHx8ICcnKTtcblxuICAgIHZhciBfdmlzaWJsZU9wdGlvbnMgPSBnZXRNYXRjaGluZ09wdGlvbnMoX29wdGlvbnMsIGluaXRpYWxTZWFyY2hWYWx1ZSwgX2lzUHJlRmlsdGVyZWQpO1xuXG4gICAgc2VhcmNoUHJvcHMgPT09IG51bGwgfHwgc2VhcmNoUHJvcHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfc2VhcmNoUHJvcHMkb25DaGFuZ2UgPSBzZWFyY2hQcm9wcy5vbkNoYW5nZSkgPT09IG51bGwgfHwgX3NlYXJjaFByb3BzJG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfc2VhcmNoUHJvcHMkb25DaGFuZ2UuY2FsbChzZWFyY2hQcm9wcywgaW5pdGlhbFNlYXJjaFZhbHVlLCBfdmlzaWJsZU9wdGlvbnMpOyAvLyBlbnN1cmUgdGhhdCB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHNpbmdsZSBvcHRpb24gaXMgYWN0aXZlIGlmIGl0IGlzIGluIHRoZSB2aXNpYmxlT3B0aW9uc1xuXG4gICAgdmFyIHNlbGVjdGVkT3B0aW9ucyA9IF9vcHRpb25zLmZpbHRlcihmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICByZXR1cm4gb3B0aW9uLmNoZWNrZWQ7XG4gICAgfSk7XG5cbiAgICB2YXIgX2FjdGl2ZU9wdGlvbkluZGV4O1xuXG4gICAgaWYgKHNpbmdsZVNlbGVjdGlvbiAmJiBzZWxlY3RlZE9wdGlvbnMubGVuZ3RoID09PSAxKSB7XG4gICAgICBpZiAoX3Zpc2libGVPcHRpb25zLmluY2x1ZGVzKHNlbGVjdGVkT3B0aW9uc1swXSkpIHtcbiAgICAgICAgX2FjdGl2ZU9wdGlvbkluZGV4ID0gX3Zpc2libGVPcHRpb25zLmluZGV4T2Yoc2VsZWN0ZWRPcHRpb25zWzBdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGFjdGl2ZU9wdGlvbkluZGV4OiBfYWN0aXZlT3B0aW9uSW5kZXgsXG4gICAgICBzZWFyY2hWYWx1ZTogaW5pdGlhbFNlYXJjaFZhbHVlLFxuICAgICAgdmlzaWJsZU9wdGlvbnM6IF92aXNpYmxlT3B0aW9ucyxcbiAgICAgIGlzRm9jdXNlZDogZmFsc2VcbiAgICB9O1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdWlTZWxlY3RhYmxlLCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKSB7XG4gICAgICBpZiAocHJldlN0YXRlLmFjdGl2ZU9wdGlvbkluZGV4ICE9PSB0aGlzLnN0YXRlLmFjdGl2ZU9wdGlvbkluZGV4KSB7XG4gICAgICAgIHZhciBfdGhpcyRwcm9wcyRvbkFjdGl2ZU8sIF90aGlzJHByb3BzMjtcblxuICAgICAgICB2YXIgYWN0aXZlT3B0aW9uID0gdGhpcy5zdGF0ZS5hY3RpdmVPcHRpb25JbmRleCAhPSBudWxsID8gdGhpcy5zdGF0ZS52aXNpYmxlT3B0aW9uc1t0aGlzLnN0YXRlLmFjdGl2ZU9wdGlvbkluZGV4XSA6IG51bGw7XG4gICAgICAgIChfdGhpcyRwcm9wcyRvbkFjdGl2ZU8gPSAoX3RoaXMkcHJvcHMyID0gdGhpcy5wcm9wcykub25BY3RpdmVPcHRpb25DaGFuZ2UpID09PSBudWxsIHx8IF90aGlzJHByb3BzJG9uQWN0aXZlTyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkcHJvcHMkb25BY3RpdmVPLmNhbGwoX3RoaXMkcHJvcHMyLCBhY3RpdmVPcHRpb24pO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHZhciBfdGhpcyRwcm9wczMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMzLmNoaWxkcmVuLFxuICAgICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzMy5jbGFzc05hbWUsXG4gICAgICAgICAgb3B0aW9ucyA9IF90aGlzJHByb3BzMy5vcHRpb25zLFxuICAgICAgICAgIG9uQ2hhbmdlID0gX3RoaXMkcHJvcHMzLm9uQ2hhbmdlLFxuICAgICAgICAgIG9uQWN0aXZlT3B0aW9uQ2hhbmdlID0gX3RoaXMkcHJvcHMzLm9uQWN0aXZlT3B0aW9uQ2hhbmdlLFxuICAgICAgICAgIHNlYXJjaGFibGUgPSBfdGhpcyRwcm9wczMuc2VhcmNoYWJsZSxcbiAgICAgICAgICBzZWFyY2hQcm9wcyA9IF90aGlzJHByb3BzMy5zZWFyY2hQcm9wcyxcbiAgICAgICAgICBzaW5nbGVTZWxlY3Rpb24gPSBfdGhpcyRwcm9wczMuc2luZ2xlU2VsZWN0aW9uLFxuICAgICAgICAgIGlzTG9hZGluZyA9IF90aGlzJHByb3BzMy5pc0xvYWRpbmcsXG4gICAgICAgICAgbGlzdFByb3BzID0gX3RoaXMkcHJvcHMzLmxpc3RQcm9wcyxcbiAgICAgICAgICByZW5kZXJPcHRpb24gPSBfdGhpcyRwcm9wczMucmVuZGVyT3B0aW9uLFxuICAgICAgICAgIGhlaWdodCA9IF90aGlzJHByb3BzMy5oZWlnaHQsXG4gICAgICAgICAgYWxsb3dFeGNsdXNpb25zID0gX3RoaXMkcHJvcHMzLmFsbG93RXhjbHVzaW9ucyxcbiAgICAgICAgICBhcmlhTGFiZWwgPSBfdGhpcyRwcm9wczNbJ2FyaWEtbGFiZWwnXSxcbiAgICAgICAgICBhcmlhRGVzY3JpYmVkYnkgPSBfdGhpcyRwcm9wczNbJ2FyaWEtZGVzY3JpYmVkYnknXSxcbiAgICAgICAgICBsb2FkaW5nTWVzc2FnZSA9IF90aGlzJHByb3BzMy5sb2FkaW5nTWVzc2FnZSxcbiAgICAgICAgICBub01hdGNoZXNNZXNzYWdlID0gX3RoaXMkcHJvcHMzLm5vTWF0Y2hlc01lc3NhZ2UsXG4gICAgICAgICAgZW1wdHlNZXNzYWdlID0gX3RoaXMkcHJvcHMzLmVtcHR5TWVzc2FnZSxcbiAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBfdGhpcyRwcm9wczMuZXJyb3JNZXNzYWdlLFxuICAgICAgICAgIGlzUHJlRmlsdGVyZWQgPSBfdGhpcyRwcm9wczMuaXNQcmVGaWx0ZXJlZCxcbiAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzMywgX2V4Y2x1ZGVkKTtcblxuICAgICAgdmFyIF90aGlzJHN0YXRlID0gdGhpcy5zdGF0ZSxcbiAgICAgICAgICBzZWFyY2hWYWx1ZSA9IF90aGlzJHN0YXRlLnNlYXJjaFZhbHVlLFxuICAgICAgICAgIHZpc2libGVPcHRpb25zID0gX3RoaXMkc3RhdGUudmlzaWJsZU9wdGlvbnMsXG4gICAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXggPSBfdGhpcyRzdGF0ZS5hY3RpdmVPcHRpb25JbmRleDsgLy8gU29tZSBtZXNzeSBkZXN0cnVjdHVyaW5nIGhlcmUgdG8gcmVtb3ZlIGFyaWEtbGFiZWwvZGVzY3JpYmVkYnkgZnJvbSBzZWFyY2hQcm9wcyBhbmQgbGlzdFByb3BzXG4gICAgICAvLyBNYWRlIG1lc3NpZXIgYnkgc29tZSBUUyByZXF1aXJlbWVudHNcbiAgICAgIC8vIFRoZSBhcmlhIGF0dHJpYnV0ZXMgYXJlIHRoZW4gdXNlZCBpbiBnZXRBY2Nlc3NpYmxlTmFtZSgpIHRvIHBsYWNlIHRoZW0gd2hlcmUgdGhleSBuZWVkIHRvIGdvXG5cbiAgICAgIHZhciB1bmtub3duQWNjZXNzaWJsZU5hbWUgPSB7XG4gICAgICAgICdhcmlhLWxhYmVsJzogdW5kZWZpbmVkLFxuICAgICAgICAnYXJpYS1kZXNjcmliZWRieSc6IHVuZGVmaW5lZFxuICAgICAgfTtcblxuICAgICAgdmFyIF9yZWYyID0gc2VhcmNoUHJvcHMgfHwgdW5rbm93bkFjY2Vzc2libGVOYW1lLFxuICAgICAgICAgIHNlYXJjaEFyaWFMYWJlbCA9IF9yZWYyWydhcmlhLWxhYmVsJ10sXG4gICAgICAgICAgc2VhcmNoQXJpYURlc2NyaWJlZGJ5ID0gX3JlZjJbJ2FyaWEtZGVzY3JpYmVkYnknXSxcbiAgICAgICAgICBwcm9wc09uQ2hhbmdlID0gX3JlZjIub25DaGFuZ2UsXG4gICAgICAgICAgZGVmYXVsdFZhbHVlID0gX3JlZjIuZGVmYXVsdFZhbHVlLFxuICAgICAgICAgIGlucHV0UmVmID0gX3JlZjIuaW5wdXRSZWYsXG4gICAgICAgICAgY2xlYW5lZFNlYXJjaFByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYyLCBfZXhjbHVkZWQyKTtcblxuICAgICAgdmFyIF9yZWYzID0gbGlzdFByb3BzIHx8IHVua25vd25BY2Nlc3NpYmxlTmFtZSxcbiAgICAgICAgICBsaXN0QXJpYUxhYmVsID0gX3JlZjNbJ2FyaWEtbGFiZWwnXSxcbiAgICAgICAgICBsaXN0QXJpYURlc2NyaWJlZGJ5ID0gX3JlZjNbJ2FyaWEtZGVzY3JpYmVkYnknXSxcbiAgICAgICAgICBpc1ZpcnR1YWxpemVkID0gX3JlZjMuaXNWaXJ0dWFsaXplZCxcbiAgICAgICAgICByb3dIZWlnaHQgPSBfcmVmMy5yb3dIZWlnaHQsXG4gICAgICAgICAgY2xlYW5lZExpc3RQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmMywgX2V4Y2x1ZGVkMyk7XG5cbiAgICAgIHZhciB2aXJ0dWFsaXplZFByb3BzO1xuXG4gICAgICBpZiAoaXNWaXJ0dWFsaXplZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgdmlydHVhbGl6ZWRQcm9wcyA9IHtcbiAgICAgICAgICBpc1ZpcnR1YWxpemVkOiBpc1ZpcnR1YWxpemVkXG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKHJvd0hlaWdodCAhPSBudWxsKSB7XG4gICAgICAgIHZpcnR1YWxpemVkUHJvcHMgPSB7XG4gICAgICAgICAgcm93SGVpZ2h0OiByb3dIZWlnaHRcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlTZWxlY3RhYmxlJywge1xuICAgICAgICAnZXVpU2VsZWN0YWJsZS1mdWxsSGVpZ2h0JzogaGVpZ2h0ID09PSAnZnVsbCdcbiAgICAgIH0sIGNsYXNzTmFtZSk7XG4gICAgICAvKiogQ3JlYXRlIG1lc3NhZ2UgY29udGVudCB0aGF0IHJlcGxhY2VzIHRoZSBsaXN0IGlmIG5vIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSAoeWV0KSAqL1xuXG4gICAgICB2YXIgbWVzc2FnZUNvbnRlbnQ7XG5cbiAgICAgIGlmIChlcnJvck1lc3NhZ2UgIT0gbnVsbCkge1xuICAgICAgICBtZXNzYWdlQ29udGVudCA9IHR5cGVvZiBlcnJvck1lc3NhZ2UgPT09ICdzdHJpbmcnID8gX19fRW1vdGlvbkpTWChcInBcIiwgbnVsbCwgZXJyb3JNZXNzYWdlKSA6IGVycm9yTWVzc2FnZTtcbiAgICAgIH0gZWxzZSBpZiAoaXNMb2FkaW5nKSB7XG4gICAgICAgIGlmIChsb2FkaW5nTWVzc2FnZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiBsb2FkaW5nTWVzc2FnZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBtZXNzYWdlQ29udGVudCA9IF9fX0Vtb3Rpb25KU1goUmVhY3QuRnJhZ21lbnQsIG51bGwsIF9fX0Vtb3Rpb25KU1goRXVpTG9hZGluZ1NwaW5uZXIsIHtcbiAgICAgICAgICAgIHNpemU6IFwibVwiXG4gICAgICAgICAgfSksIF9fX0Vtb3Rpb25KU1goRXVpU3BhY2VyLCB7XG4gICAgICAgICAgICBzaXplOiBcInhzXCJcbiAgICAgICAgICB9KSwgX19fRW1vdGlvbkpTWChcInBcIiwgbnVsbCwgbG9hZGluZ01lc3NhZ2UgfHwgX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgICB0b2tlbjogXCJldWlTZWxlY3RhYmxlLmxvYWRpbmdPcHRpb25zXCIsXG4gICAgICAgICAgICBkZWZhdWx0OiBcIkxvYWRpbmcgb3B0aW9uc1wiXG4gICAgICAgICAgfSkpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBtZXNzYWdlQ29udGVudCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQobG9hZGluZ01lc3NhZ2UsIF9vYmplY3RTcHJlYWQoe1xuICAgICAgICAgICAgaWQ6IHRoaXMubWVzc2FnZUNvbnRlbnRJZFxuICAgICAgICAgIH0sIGxvYWRpbmdNZXNzYWdlLnByb3BzKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoc2VhcmNoVmFsdWUgJiYgdmlzaWJsZU9wdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGlmIChub01hdGNoZXNNZXNzYWdlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIG5vTWF0Y2hlc01lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgbWVzc2FnZUNvbnRlbnQgPSBfX19FbW90aW9uSlNYKFwicFwiLCBudWxsLCBub01hdGNoZXNNZXNzYWdlIHx8IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgICAgdG9rZW46IFwiZXVpU2VsZWN0YWJsZS5ub01hdGNoaW5nT3B0aW9uc1wiLFxuICAgICAgICAgICAgZGVmYXVsdDogXCJ7c2VhcmNoVmFsdWV9IGRvZXNuJ3QgbWF0Y2ggYW55IG9wdGlvbnNcIixcbiAgICAgICAgICAgIHZhbHVlczoge1xuICAgICAgICAgICAgICBzZWFyY2hWYWx1ZTogX19fRW1vdGlvbkpTWChcInN0cm9uZ1wiLCBudWxsLCBzZWFyY2hWYWx1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbWVzc2FnZUNvbnRlbnQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY2xvbmVFbGVtZW50KG5vTWF0Y2hlc01lc3NhZ2UsIF9vYmplY3RTcHJlYWQoe1xuICAgICAgICAgICAgaWQ6IHRoaXMubWVzc2FnZUNvbnRlbnRJZFxuICAgICAgICAgIH0sIG5vTWF0Y2hlc01lc3NhZ2UucHJvcHMpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghb3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgaWYgKGVtcHR5TWVzc2FnZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiBlbXB0eU1lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgbWVzc2FnZUNvbnRlbnQgPSBfX19FbW90aW9uSlNYKFwicFwiLCBudWxsLCBlbXB0eU1lc3NhZ2UgfHwgX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgICB0b2tlbjogXCJldWlTZWxlY3RhYmxlLm5vQXZhaWxhYmxlT3B0aW9uc1wiLFxuICAgICAgICAgICAgZGVmYXVsdDogXCJObyBvcHRpb25zIGF2YWlsYWJsZVwiXG4gICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG1lc3NhZ2VDb250ZW50ID0gLyojX19QVVJFX18qL1JlYWN0LmNsb25lRWxlbWVudChlbXB0eU1lc3NhZ2UsIF9vYmplY3RTcHJlYWQoe1xuICAgICAgICAgICAgaWQ6IHRoaXMubWVzc2FnZUNvbnRlbnRJZFxuICAgICAgICAgIH0sIGVtcHR5TWVzc2FnZS5wcm9wcykpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvKipcbiAgICAgICAqIFRoZXJlIGFyZSBsb3RzIG9mIHdheXMgdG8gYWRkIGFuIGFjY2Vzc2libGUgbmFtZVxuICAgICAgICogVXN1YWxseSB3ZSB3YW50IHRoZSBzYW1lIG5hbWUgZm9yIHRoZSBpbnB1dCBhbmQgdGhlIGxpc3Rib3ggKHdoaWNoIGlzIGFkZGVkIGJ5IGFyaWEtbGFiZWwvZGVzY3JpYmVkYnkpXG4gICAgICAgKiBCdXQgeW91IGNhbiBhbHdheXMgb3ZlcnJpZGUgaXQgdXNpbmcgc2VhcmNoUHJvcHMgb3IgbGlzdFByb3BzXG4gICAgICAgKiBUaGlzIGZpbmRzIHRoZSBjb3JyZWN0IG5hbWUgdG8gdXNlXG4gICAgICAgKlxuICAgICAgICogVE9ETzogVGhpcyBkb2Vzbid0IGhhbmRsZSBiZWluZyBsYWJlbGxlZCAoPGxhYmVsIGZvcj1cImlkT2ZJbnB1dFwiPilcbiAgICAgICAqL1xuXG5cbiAgICAgIHZhciBnZXRBY2Nlc3NpYmxlTmFtZSA9IGZ1bmN0aW9uIGdldEFjY2Vzc2libGVOYW1lKHByb3BzLCBtZXNzYWdlQ29udGVudElkKSB7XG4gICAgICAgIGlmIChwcm9wcyAmJiBwcm9wc1snYXJpYS1sYWJlbCddKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdhcmlhLWxhYmVsJzogcHJvcHNbJ2FyaWEtbGFiZWwnXVxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbWVzc2FnZUNvbnRlbnRJZFN0cmluZyA9IG1lc3NhZ2VDb250ZW50SWQgPyBcIiBcIi5jb25jYXQobWVzc2FnZUNvbnRlbnRJZCkgOiAnJztcblxuICAgICAgICBpZiAocHJvcHMgJiYgcHJvcHNbJ2FyaWEtZGVzY3JpYmVkYnknXSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnYXJpYS1kZXNjcmliZWRieSc6IFwiXCIuY29uY2F0KHByb3BzWydhcmlhLWRlc2NyaWJlZGJ5J10pLmNvbmNhdChtZXNzYWdlQ29udGVudElkU3RyaW5nKVxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXJpYUxhYmVsKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdhcmlhLWxhYmVsJzogYXJpYUxhYmVsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhcmlhRGVzY3JpYmVkYnkpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2FyaWEtZGVzY3JpYmVkYnknOiBcIlwiLmNvbmNhdChhcmlhRGVzY3JpYmVkYnkpLmNvbmNhdChtZXNzYWdlQ29udGVudElkU3RyaW5nKVxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge307XG4gICAgICB9O1xuXG4gICAgICB2YXIgc2VhcmNoQWNjZXNzaWJsZU5hbWUgPSBnZXRBY2Nlc3NpYmxlTmFtZShzZWFyY2hQcm9wcywgdGhpcy5tZXNzYWdlQ29udGVudElkKTtcbiAgICAgIHZhciBzZWFyY2hIYXNBY2Nlc3NpYmxlTmFtZSA9IEJvb2xlYW4oT2JqZWN0LmtleXMoc2VhcmNoQWNjZXNzaWJsZU5hbWUpLmxlbmd0aCk7XG4gICAgICB2YXIgc2VhcmNoID0gc2VhcmNoYWJsZSA/IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICB0b2tlbjogXCJldWlTZWxlY3RhYmxlLnBsYWNlaG9sZGVyTmFtZVwiLFxuICAgICAgICBkZWZhdWx0OiBcIkZpbHRlciBvcHRpb25zXCJcbiAgICAgIH0sIGZ1bmN0aW9uIChwbGFjZWhvbGRlck5hbWUpIHtcbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpU2VsZWN0YWJsZVNlYXJjaCwgX2V4dGVuZHMoe1xuICAgICAgICAgIGtleTogXCJsaXN0U2VhcmNoXCIsXG4gICAgICAgICAgb3B0aW9uczogb3B0aW9ucyxcbiAgICAgICAgICB2YWx1ZTogc2VhcmNoVmFsdWUsXG4gICAgICAgICAgb25DaGFuZ2U6IF90aGlzMi5vblNlYXJjaENoYW5nZSxcbiAgICAgICAgICBsaXN0SWQ6IF90aGlzMi5vcHRpb25zTGlzdFJlZi5jdXJyZW50ID8gX3RoaXMyLmxpc3RJZCA6IHVuZGVmaW5lZCAvLyBPbmx5IHBhc3MgdGhlIGxpc3RJZCBpZiBpdCBleGlzdHMgb24gdGhlIHBhZ2VcbiAgICAgICAgICAsXG4gICAgICAgICAgXCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnRcIjogX3RoaXMyLm1ha2VPcHRpb25JZChhY3RpdmVPcHRpb25JbmRleCkgLy8gdGhlIGN1cnJlbnQgZmF1eC1mb2N1c2VkIG9wdGlvblxuICAgICAgICAgICxcbiAgICAgICAgICBwbGFjZWhvbGRlcjogcGxhY2Vob2xkZXJOYW1lLFxuICAgICAgICAgIGlzUHJlRmlsdGVyZWQ6IGlzUHJlRmlsdGVyZWQgIT09IG51bGwgJiYgaXNQcmVGaWx0ZXJlZCAhPT0gdm9pZCAwID8gaXNQcmVGaWx0ZXJlZCA6IGZhbHNlLFxuICAgICAgICAgIGlucHV0UmVmOiBmdW5jdGlvbiBpbnB1dFJlZihub2RlKSB7XG4gICAgICAgICAgICB2YXIgX3NlYXJjaFByb3BzJGlucHV0UmVmO1xuXG4gICAgICAgICAgICBfdGhpczIuaW5wdXRSZWYgPSBub2RlO1xuICAgICAgICAgICAgc2VhcmNoUHJvcHMgPT09IG51bGwgfHwgc2VhcmNoUHJvcHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfc2VhcmNoUHJvcHMkaW5wdXRSZWYgPSBzZWFyY2hQcm9wcy5pbnB1dFJlZikgPT09IG51bGwgfHwgX3NlYXJjaFByb3BzJGlucHV0UmVmID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfc2VhcmNoUHJvcHMkaW5wdXRSZWYuY2FsbChzZWFyY2hQcm9wcywgbm9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCBzZWFyY2hIYXNBY2Nlc3NpYmxlTmFtZSA/IHNlYXJjaEFjY2Vzc2libGVOYW1lIDoge1xuICAgICAgICAgICdhcmlhLWxhYmVsJzogcGxhY2Vob2xkZXJOYW1lXG4gICAgICAgIH0sIGNsZWFuZWRTZWFyY2hQcm9wcykpO1xuICAgICAgfSkgOiB1bmRlZmluZWQ7XG4gICAgICB2YXIgcmVzdWx0c0xlbmd0aCA9IHZpc2libGVPcHRpb25zLmZpbHRlcihmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAgIHJldHVybiAhb3B0aW9uLmRpc2FibGVkO1xuICAgICAgfSkubGVuZ3RoO1xuXG4gICAgICB2YXIgbGlzdFNjcmVlblJlYWRlclN0YXR1cyA9IHNlYXJjaGFibGUgJiYgX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgIHRva2VuOiBcImV1aVNlbGVjdGFibGUuc2VhcmNoUmVzdWx0c1wiLFxuICAgICAgICBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdChfcmVmNCkge1xuICAgICAgICAgIHZhciByZXN1bHRzTGVuZ3RoID0gX3JlZjQucmVzdWx0c0xlbmd0aDtcbiAgICAgICAgICByZXR1cm4gXCJcIi5jb25jYXQocmVzdWx0c0xlbmd0aCwgXCIgcmVzdWx0XCIpLmNvbmNhdChyZXN1bHRzTGVuZ3RoID09PSAxID8gJycgOiAncycsIFwiIGF2YWlsYWJsZVwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgcmVzdWx0c0xlbmd0aDogcmVzdWx0c0xlbmd0aFxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdmFyIGxpc3RBcmlhRGVzY3JpYmVkYnlJZCA9IHRoaXMucm9vdElkKCdpbnN0cnVjdGlvbnMnKTtcbiAgICAgIHZhciBsaXN0QWNjZXNzaWJsZU5hbWUgPSBnZXRBY2Nlc3NpYmxlTmFtZShsaXN0UHJvcHMsIGxpc3RBcmlhRGVzY3JpYmVkYnlJZCk7XG4gICAgICB2YXIgbGlzdEhhc0FjY2Vzc2libGVOYW1lID0gQm9vbGVhbihPYmplY3Qua2V5cyhsaXN0QWNjZXNzaWJsZU5hbWUpLmxlbmd0aCk7XG5cbiAgICAgIHZhciBsaXN0ID0gX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgIHRva2VuczogWydldWlTZWxlY3RhYmxlLnNjcmVlblJlYWRlckluc3RydWN0aW9ucycsICdldWlTZWxlY3RhYmxlLnBsYWNlaG9sZGVyTmFtZSddLFxuICAgICAgICBkZWZhdWx0czogWydVc2UgdXAgYW5kIGRvd24gYXJyb3dzIHRvIG1vdmUgZm9jdXMgb3ZlciBvcHRpb25zLiBFbnRlciB0byBzZWxlY3QuIEVzY2FwZSB0byBjb2xsYXBzZSBvcHRpb25zLicsICdGaWx0ZXIgb3B0aW9ucyddXG4gICAgICB9LCBmdW5jdGlvbiAoX3JlZjUpIHtcbiAgICAgICAgdmFyIF9yZWY2ID0gX3NsaWNlZFRvQXJyYXkoX3JlZjUsIDIpLFxuICAgICAgICAgICAgcGxhY2Vob2xkZXJOYW1lID0gX3JlZjZbMF0sXG4gICAgICAgICAgICBzY3JlZW5SZWFkZXJJbnN0cnVjdGlvbnMgPSBfcmVmNlsxXTtcblxuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChSZWFjdC5GcmFnbWVudCwgbnVsbCwgc2VhcmNoYWJsZSAmJiBfX19FbW90aW9uSlNYKEV1aVNjcmVlblJlYWRlckxpdmUsIHtcbiAgICAgICAgICBpc0FjdGl2ZTogbWVzc2FnZUNvbnRlbnQgIT0gbnVsbCB8fCBhY3RpdmVPcHRpb25JbmRleCAhPSBudWxsXG4gICAgICAgIH0sIG1lc3NhZ2VDb250ZW50IHx8IGxpc3RTY3JlZW5SZWFkZXJTdGF0dXMpLCBfX19FbW90aW9uSlNYKEV1aVNjcmVlblJlYWRlck9ubHksIG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwXCIsIHtcbiAgICAgICAgICBpZDogbGlzdEFyaWFEZXNjcmliZWRieUlkXG4gICAgICAgIH0sIHNjcmVlblJlYWRlckluc3RydWN0aW9ucykpLCBtZXNzYWdlQ29udGVudCA/IF9fX0Vtb3Rpb25KU1goRXVpU2VsZWN0YWJsZU1lc3NhZ2UsIHtcbiAgICAgICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFwiZXVpU2VsZWN0YWJsZU1lc3NhZ2VcIixcbiAgICAgICAgICBpZDogX3RoaXMyLm1lc3NhZ2VDb250ZW50SWQsXG4gICAgICAgICAgYm9yZGVyZWQ6IGxpc3RQcm9wcyAmJiBsaXN0UHJvcHMuYm9yZGVyZWRcbiAgICAgICAgfSwgbWVzc2FnZUNvbnRlbnQpIDogX19fRW1vdGlvbkpTWChFdWlTZWxlY3RhYmxlTGlzdCwgX2V4dGVuZHMoe1xuICAgICAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogXCJldWlTZWxlY3RhYmxlTGlzdFwiLFxuICAgICAgICAgIGtleTogXCJsaXN0XCIsXG4gICAgICAgICAgb3B0aW9uczogb3B0aW9ucyxcbiAgICAgICAgICB2aXNpYmxlT3B0aW9uczogdmlzaWJsZU9wdGlvbnMsXG4gICAgICAgICAgc2VhcmNoVmFsdWU6IHNlYXJjaFZhbHVlLFxuICAgICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4OiBhY3RpdmVPcHRpb25JbmRleCxcbiAgICAgICAgICBzZXRBY3RpdmVPcHRpb25JbmRleDogZnVuY3Rpb24gc2V0QWN0aXZlT3B0aW9uSW5kZXgoaW5kZXgsIGNiKSB7XG4gICAgICAgICAgICBfdGhpczIuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICBhY3RpdmVPcHRpb25JbmRleDogaW5kZXhcbiAgICAgICAgICAgIH0sIGNiKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uT3B0aW9uQ2xpY2s6IF90aGlzMi5vbk9wdGlvbkNsaWNrLFxuICAgICAgICAgIHNpbmdsZVNlbGVjdGlvbjogc2luZ2xlU2VsZWN0aW9uLFxuICAgICAgICAgIHJlZjogX3RoaXMyLm9wdGlvbnNMaXN0UmVmLFxuICAgICAgICAgIHJlbmRlck9wdGlvbjogcmVuZGVyT3B0aW9uLFxuICAgICAgICAgIGhlaWdodDogaGVpZ2h0LFxuICAgICAgICAgIGFsbG93RXhjbHVzaW9uczogYWxsb3dFeGNsdXNpb25zLFxuICAgICAgICAgIHNlYXJjaGFibGU6IHNlYXJjaGFibGUsXG4gICAgICAgICAgbWFrZU9wdGlvbklkOiBfdGhpczIubWFrZU9wdGlvbklkLFxuICAgICAgICAgIGxpc3RJZDogX3RoaXMyLmxpc3RJZFxuICAgICAgICB9LCBsaXN0SGFzQWNjZXNzaWJsZU5hbWUgPyBsaXN0QWNjZXNzaWJsZU5hbWUgOiBzZWFyY2hhYmxlICYmIHtcbiAgICAgICAgICAnYXJpYS1sYWJlbCc6IHBsYWNlaG9sZGVyTmFtZVxuICAgICAgICB9LCBjbGVhbmVkTGlzdFByb3BzLCB2aXJ0dWFsaXplZFByb3BzKSkpO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICAgICAgcmVmOiB0aGlzLmNvbnRhaW5lclJlZixcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICBvbktleURvd246IHRoaXMub25LZXlEb3duLFxuICAgICAgICBvbkJsdXI6IHRoaXMub25Db250YWluZXJCbHVyLFxuICAgICAgICBvbkZvY3VzOiB0aGlzLm9uRm9jdXMsXG4gICAgICAgIG9uTW91c2VEb3duOiB0aGlzLm9uTW91c2VEb3duXG4gICAgICB9LCByZXN0KSwgY2hpbGRyZW4gJiYgY2hpbGRyZW4obGlzdCwgc2VhcmNoKSk7XG4gICAgfVxuICB9XSwgW3tcbiAgICBrZXk6IFwiZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhuZXh0UHJvcHMsIHByZXZTdGF0ZSkge1xuICAgICAgdmFyIG9wdGlvbnMgPSBuZXh0UHJvcHMub3B0aW9ucyxcbiAgICAgICAgICBpc1ByZUZpbHRlcmVkID0gbmV4dFByb3BzLmlzUHJlRmlsdGVyZWQsXG4gICAgICAgICAgc2VhcmNoUHJvcHMgPSBuZXh0UHJvcHMuc2VhcmNoUHJvcHM7XG4gICAgICB2YXIgYWN0aXZlT3B0aW9uSW5kZXggPSBwcmV2U3RhdGUuYWN0aXZlT3B0aW9uSW5kZXgsXG4gICAgICAgICAgc2VhcmNoVmFsdWUgPSBwcmV2U3RhdGUuc2VhcmNoVmFsdWU7XG4gICAgICB2YXIgbWF0Y2hpbmdPcHRpb25zID0gZ2V0TWF0Y2hpbmdPcHRpb25zKG9wdGlvbnMsIHNlYXJjaFZhbHVlLCBpc1ByZUZpbHRlcmVkKTtcbiAgICAgIHZhciBzdGF0ZVVwZGF0ZSA9IHtcbiAgICAgICAgdmlzaWJsZU9wdGlvbnM6IG1hdGNoaW5nT3B0aW9ucyxcbiAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXg6IGFjdGl2ZU9wdGlvbkluZGV4XG4gICAgICB9O1xuXG4gICAgICBpZiAoYWN0aXZlT3B0aW9uSW5kZXggIT0gbnVsbCAmJiBhY3RpdmVPcHRpb25JbmRleCA+PSBtYXRjaGluZ09wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIHN0YXRlVXBkYXRlLmFjdGl2ZU9wdGlvbkluZGV4ID0gLTE7XG4gICAgICB9XG5cbiAgICAgIGlmICgoc2VhcmNoUHJvcHMgPT09IG51bGwgfHwgc2VhcmNoUHJvcHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlYXJjaFByb3BzLnZhbHVlKSAhPSBudWxsICYmIHNlYXJjaFByb3BzLnZhbHVlICE9PSBzZWFyY2hWYWx1ZSkge1xuICAgICAgICBzdGF0ZVVwZGF0ZS5zZWFyY2hWYWx1ZSA9IHNlYXJjaFByb3BzLnZhbHVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3RhdGVVcGRhdGU7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEV1aVNlbGVjdGFibGU7XG59KENvbXBvbmVudCk7XG5cbl9kZWZpbmVQcm9wZXJ0eShFdWlTZWxlY3RhYmxlLCBcImRlZmF1bHRQcm9wc1wiLCB7XG4gIG9wdGlvbnM6IFtdLFxuICBzaW5nbGVTZWxlY3Rpb246IGZhbHNlLFxuICBzZWFyY2hhYmxlOiBmYWxzZSxcbiAgaXNQcmVGaWx0ZXJlZDogZmFsc2Vcbn0pO1xuXG5FdWlTZWxlY3RhYmxlLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAgICogSG9va3MgdXAgYSBzZWFyY2ggYm94IHRvIGZpbHRlciB0aGUgbGlzdCAoYm9vbGVhbilcbiAgICAgICAqL1xuICBzZWFyY2hhYmxlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW2ZhbHNlXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm9uZU9mKFt0cnVlXSkuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsXG5cbiAgLyoqXG4gICAgICAgKiBQYXNzZXMgcHJvcHMgZG93biB0byB0aGUgYEV1aUZpZWxkU2VhcmNoYC5cbiAgICAgICAqIFNlZSAjRXVpU2VsZWN0YWJsZVNlYXJjaFByb3BzXG4gICAgICAgKi9cbiAgc2VhcmNoUHJvcHM6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICAgKiBGdW5jdGlvbiB0aGF0IHRha2VzIHRoZSBgbGlzdGAgbm9kZSBhbmQgdGhlblxuICAgICAgICogdGhlIGBzZWFyY2hgIG5vZGUgKGlmIGBzZWFyY2hhYmxlYCBpcyBhcHBsaWVkKVxuICAgICAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICAgICAqIEFycmF5IG9mIEV1aVNlbGVjdGFibGVPcHRpb24gb2JqZWN0cy4gU2VlICNFdWlTZWxlY3RhYmxlT3B0aW9uUHJvcHNcbiAgICAgICAqL1xuICBvcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuICAgIC8qKlxuICAgICAgICogT3B0aW9uYWwgYGJvb2xlYW5gLlxuICAgICAgICogU2V0IHRvIGB0cnVlYCB0byBpbmRpY2F0ZSBvYmplY3QgaXMganVzdCBhIGdyb3VwaW5nIGxhYmVsLCBub3QgYSBzZWxlY3RhYmxlIGl0ZW1cbiAgICAgICAqL1xuICAgIGlzR3JvdXBMYWJlbDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFt0cnVlXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm9uZU9mKFtmYWxzZV0pXSksXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAgIC8qKlxuICAgICAgICogVmlzaWJsZSBsYWJlbCBvZiBvcHRpb24uXG4gICAgICAgKiBNdXN0IGJlIHVuaXF1ZSBhY3Jvc3MgaXRlbXMgaWYgYGtleWAgaXMgbm90IHN1cHBsaWVkXG4gICAgICAgKi9cbiAgICBsYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcblxuICAgIC8qKlxuICAgICAgICogT3B0aW9uYWxseSBjaGFuZ2UgdGhlIHNlYXJjaGFibGUgdGVybSBieSBwYXNzaW5nIGEgZGlmZmVyZW50IHN0cmluZyBvdGhlciB0aGFuIHRoZSBgbGFiZWxgLlxuICAgICAgICogQmVzdCB1c2VkIHdoZW4gY3JlYXRpbmcgYSBjdXN0b20gYG9wdGlvblJlbmRlcmAgdG8gc2VwYXJhdGUgdGhlIGxhYmVsIGZyb20gbWV0YWRhdGEgYnV0IGFsbG93aW5nIHRvIHNlYXJjaCBvbiBib3RoXG4gICAgICAgKi9cbiAgICBzZWFyY2hhYmxlTGFiZWw6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgICAvKipcbiAgICAgICAqIE11c3QgYmUgdW5pcXVlIGFjcm9zcyBpdGVtcy5cbiAgICAgICAqIFdpbGwgYmUgdXNlZCB0byBtYXRjaCBvcHRpb25zIGluc3RlYWQgb2YgYGxhYmVsYFxuICAgICAgICovXG4gICAga2V5OiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gICAgLyoqXG4gICAgICAgKiBMZWF2ZSBgdW5kZWZpbmVkYCB0byBpbmRpY2F0ZSBub3Qgc2VsZWN0ZWQsXG4gICAgICAgKiAnb24nIHRvIGluZGljYXRlIGluY2x1c2lvbiBhbmRcbiAgICAgICAqICdvZmYnIHRvIGluZGljYXRlIGV4Y2x1c2lvblxuICAgICAgICovXG4gICAgY2hlY2tlZDogUHJvcFR5cGVzLm9uZU9mKFtcIm9uXCIsIFwib2ZmXCIsIHVuZGVmaW5lZF0pLFxuICAgIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAgIC8qKlxuICAgICAgICogTm9kZSB0byBhZGQgYmV0d2VlbiB0aGUgc2VsZWN0aW9uIGljb24gYW5kIHRoZSBsYWJlbFxuICAgICAgICovXG4gICAgcHJlcGVuZDogUHJvcFR5cGVzLm5vZGUsXG5cbiAgICAvKipcbiAgICAgICAqIE5vZGUgdG8gYWRkIHRvIHRoZSBmYXIgcmlnaHQgb2YgdGhlIGl0ZW1cbiAgICAgICAqL1xuICAgIGFwcGVuZDogUHJvcFR5cGVzLm5vZGUsXG4gICAgcmVmOiBQcm9wVHlwZXMuZnVuYyxcblxuICAgIC8qKlxuICAgICAgICogT3B0aW9uIGRhdGEgdG8gcGFzcyB0aHJvdWdoIHRvIHRoZSBgcmVuZGVyT3B0aW9uc2AgZWxlbWVudC5cbiAgICAgICAqIEJ5cGFzcyBgRXVpU2VsZWN0YWJsZUl0ZW1gIGFuZCBhdm9pZCBET00gYXR0cmlidXRlIHdhcm5pbmdzLlxuICAgICAgICovXG4gICAgZGF0YTogUHJvcFR5cGVzLnNoYXBlKHt9KVxuICB9KS5pc1JlcXVpcmVkKS5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgICAgICogUGFzc2VzIGJhY2sgdGhlIGFsdGVyZWQgYG9wdGlvbnNgIGFycmF5IHdpdGggc2VsZWN0ZWQgb3B0aW9ucyBoYXZpbmcgYGNoZWNrZWQ6ICdvbidgLlxuICAgICAgICogQWxzbyBwYXNzZXMgYmFjayB0aGUgUmVhY3QgY2xpY2sva2V5Ym9hcmQgZXZlbnQgYXMgYSBzZWNvbmQgYXJndW1lbnQuXG4gICAgICAgKi9cbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgICAgICogUGFzc2VzIGJhY2sgdGhlIGN1cnJlbnQgYWN0aXZlIG9wdGlvbiB3aGVuZXZlciB0aGUgdXNlciBjaGFuZ2VzIHRoZSBjdXJyZW50bHlcbiAgICAgICAqIGhpZ2hsaWdodGVkIG9wdGlvbiB2aWEga2V5Ym9hcmQgbmF2aWdhdGlvbiBvciBzZWFyY2hpbmcuXG4gICAgICAgKi9cbiAgb25BY3RpdmVPcHRpb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgICAgICogU2V0cyB0aGUgc2luZ2xlIHNlbGVjdGlvbiBwb2xpY3kgb2ZcbiAgICAgICAqIGBmYWxzZWA6IGFsbG93cyBtdWx0aXBsZSBzZWxlY3Rpb25cbiAgICAgICAqIGB0cnVlYDogb25seSBhbGxvd3Mgb25lIHNlbGVjdGlvblxuICAgICAgICogYGFsd2F5c2A6IGNhbiBhbmQgbXVzdCBoYXZlIG9ubHkgb25lIHNlbGVjdGlvblxuICAgICAgICovXG4gIHNpbmdsZVNlbGVjdGlvbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFsd2F5c1wiXSksIFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWRdKSxcblxuICAvKipcbiAgICAgICAqIEFsbG93cyBtYXJraW5nIG9wdGlvbnMgYXMgYGNoZWNrZWQ9J29mZidgIGFzIHdlbGwgYXMgYCdvbidgXG4gICAgICAgKi9cbiAgYWxsb3dFeGNsdXNpb25zOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgICAqIFNob3cgYW4gbG9hZGluZyBpbmRpY2F0b3Igd2hpbGUgeW91IGxvYWQgYW5kIGhvb2sgdXAgeW91ciBkYXRhXG4gICAgICAgKi9cbiAgaXNMb2FkaW5nOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgICAqIFNldHMgdGhlIG1heCBoZWlnaHQgaW4gcGl4ZWxzIG9yIHBhc3MgYGZ1bGxgIHRvIGFsbG93XG4gICAgICAgKiB0aGUgd2hvbGUgZ3JvdXAgdG8gZmlsbCB0aGUgaGVpZ2h0IG9mIGl0cyBjb250YWluZXIgYW5kXG4gICAgICAgKiBhbGxvd3MgdGhlIGxpc3QgZ3JvdyBhcyB3ZWxsXG4gICAgICAgKi9cbiAgaGVpZ2h0OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5vbmVPZihbXCJmdWxsXCJdKV0pLFxuXG4gIC8qKlxuICAgICAgICogU2VlICNFdWlTZWxlY3RhYmxlT3B0aW9uc0xpc3RcbiAgICAgICAqL1xuICBsaXN0UHJvcHM6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICAgKiBDdXN0b20gcmVuZGVyIGZ1bmN0aW9uIGZvciBlYWNoIG9wdGlvbi5cbiAgICAgICAqIFJldHVybnMgYChvcHRpb24sIHNlYXJjaFZhbHVlKWBcbiAgICAgICAqL1xuICByZW5kZXJPcHRpb246IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgICAgICogQ3VzdG9taXplIHRoZSBsb2FkaW5nIG1lc3NhZ2UuIFBhc3MgYSBzdHJpbmcgdG8gc2ltcGx5IGNoYW5nZSB0aGUgdGV4dCxcbiAgICAgICAqIG9yIGEgbm9kZSB0byByZXBsYWNlIHRoZSB3aG9sZSBjb250ZW50LlxuICAgICAgICovXG4gIGxvYWRpbmdNZXNzYWdlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWRdKSxcblxuICAvKipcbiAgICAgICAqIEN1c3RvbWl6ZSB0aGUgbm8gbWF0Y2hlcyBtZXNzYWdlLiBQYXNzIGEgc3RyaW5nIHRvIHNpbXBseSBjaGFuZ2UgdGhlIHRleHQsXG4gICAgICAgKiBvciBhIG5vZGUgdG8gcmVwbGFjZSB0aGUgd2hvbGUgY29udGVudC5cbiAgICAgICAqL1xuICBub01hdGNoZXNNZXNzYWdlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWRdKSxcblxuICAvKipcbiAgICAgICAqIEN1c3RvbWl6ZSB0aGUgZW1wdHkgbWVzc2FnZS4gUGFzcyBhIHN0cmluZyB0byBzaW1wbHkgY2hhbmdlIHRoZSB0ZXh0LFxuICAgICAgICogb3IgYSBub2RlIHRvIHJlcGxhY2UgdGhlIHdob2xlIGNvbnRlbnQuXG4gICAgICAgKi9cbiAgZW1wdHlNZXNzYWdlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWRdKSxcblxuICAvKipcbiAgICAgICAqIEFkZCBhbiBlcnJvciBtZXNzYWdlLlxuICAgICAgICogVGhlIG1lc3NhZ2Ugd2lsbCBiZSBzaG93biB3aGVuIHRoZSB2YWx1ZSBpcyBub3QgYG51bGxgIG9yIGB1bmRlZmluZWRgLlxuICAgICAgICogUGFzcyBhIHN0cmluZyB0byBzaW1wbHkgY2hhbmdlIHRoZSB0ZXh0LCBvciBhIG5vZGUgdG8gcmVwbGFjZSB0aGUgd2hvbGUgY29udGVudC5cbiAgICAgICAqXG4gICAgICAgKiBgZXJyb3JNZXNzYWdlPXtoYXNFcnJvcnMgPyAnTXkgZXJyb3IgbWVzc2FnZScgOiBudWxsfWBcbiAgICAgICAqL1xuICBlcnJvck1lc3NhZ2U6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm9uZU9mKFtudWxsXSldKSxcblxuICAvKipcbiAgICAgICAqIENvbnRyb2wgd2hldGhlciBvciBub3Qgb3B0aW9ucyBnZXQgZmlsdGVyZWQgaW50ZXJuYWxseSBvciBpZiBjb25zdW1lciB3aWxsIGZpbHRlclxuICAgICAgICogRGVmYXVsdDogZmFsc2VcbiAgICAgICAqL1xuICBpc1ByZUZpbHRlcmVkOiBQcm9wVHlwZXMuYm9vbFxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcIm9uQ2hhbmdlXCIsIFwib3B0aW9uc1wiLCBcInZhbHVlXCIsIFwicGxhY2Vob2xkZXJcIiwgXCJpc1ByZUZpbHRlcmVkXCIsIFwibGlzdElkXCIsIFwiY2xhc3NOYW1lXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBFdWlGaWVsZFNlYXJjaCB9IGZyb20gJy4uLy4uL2Zvcm0nO1xuaW1wb3J0IHsgZ2V0TWF0Y2hpbmdPcHRpb25zIH0gZnJvbSAnLi4vbWF0Y2hpbmdfb3B0aW9ucyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlTZWxlY3RhYmxlU2VhcmNoID0gZnVuY3Rpb24gRXVpU2VsZWN0YWJsZVNlYXJjaChfcmVmKSB7XG4gIHZhciBvbkNoYW5nZUNhbGxiYWNrID0gX3JlZi5vbkNoYW5nZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnMsXG4gICAgICB2YWx1ZSA9IF9yZWYudmFsdWUsXG4gICAgICBwbGFjZWhvbGRlciA9IF9yZWYucGxhY2Vob2xkZXIsXG4gICAgICBpc1ByZUZpbHRlcmVkID0gX3JlZi5pc1ByZUZpbHRlcmVkLFxuICAgICAgbGlzdElkID0gX3JlZi5saXN0SWQsXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgb25DaGFuZ2UgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoZSkge1xuICAgIHZhciBzZWFyY2hWYWx1ZSA9IGUudGFyZ2V0LnZhbHVlO1xuICAgIHZhciBtYXRjaGluZ09wdGlvbnMgPSBnZXRNYXRjaGluZ09wdGlvbnMob3B0aW9ucywgc2VhcmNoVmFsdWUsIGlzUHJlRmlsdGVyZWQpO1xuICAgIG9uQ2hhbmdlQ2FsbGJhY2soc2VhcmNoVmFsdWUsIG1hdGNoaW5nT3B0aW9ucyk7XG4gIH0sIFtvcHRpb25zLCBpc1ByZUZpbHRlcmVkLCBvbkNoYW5nZUNhbGxiYWNrXSk7XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpU2VsZWN0YWJsZVNlYXJjaCcsIGNsYXNzTmFtZSk7XG4gIHZhciBhcmlhUHJvcHNJZkxpc3RJc1ByZXNlbnQgPSBsaXN0SWQgPyB7XG4gICAgcm9sZTogJ2NvbWJvYm94JyxcbiAgICAnYXJpYS1hdXRvY29tcGxldGUnOiAnbGlzdCcsXG4gICAgJ2FyaWEtZXhwYW5kZWQnOiB0cnVlLFxuICAgICdhcmlhLWNvbnRyb2xzJzogbGlzdElkLFxuICAgICdhcmlhLW93bnMnOiBsaXN0SWQgLy8gbGVnYWN5IGF0dHJpYnV0ZSBidXQgc2hpbXMgc3VwcG9ydCBmb3IgbmVhcmx5IGV2ZXJ5dGhpbmcgYXRtXG5cbiAgfSA6IHVuZGVmaW5lZDtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpRmllbGRTZWFyY2gsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgcGxhY2Vob2xkZXI6IHBsYWNlaG9sZGVyLFxuICAgIHZhbHVlOiB2YWx1ZSxcbiAgICBvbkNoYW5nZTogb25DaGFuZ2UsXG4gICAgaW5jcmVtZW50YWw6IHRydWUsXG4gICAgZnVsbFdpZHRoOiB0cnVlLFxuICAgIGF1dG9Db21wbGV0ZTogXCJvZmZcIixcbiAgICBcImFyaWEtaGFzcG9wdXBcIjogXCJsaXN0Ym94XCJcbiAgfSwgYXJpYVByb3BzSWZMaXN0SXNQcmVzZW50LCByZXN0KSk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xudmFyIGdldFNlYXJjaGFibGVMYWJlbCA9IGZ1bmN0aW9uIGdldFNlYXJjaGFibGVMYWJlbChvcHRpb24pIHtcbiAgdmFyIG5vcm1hbGl6ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogdHJ1ZTtcbiAgdmFyIHNlYXJjaGFibGVMYWJlbCA9IG9wdGlvbi5zZWFyY2hhYmxlTGFiZWwgfHwgb3B0aW9uLmxhYmVsO1xuICByZXR1cm4gbm9ybWFsaXplID8gc2VhcmNoYWJsZUxhYmVsLnRyaW0oKS50b0xvd2VyQ2FzZSgpIDogc2VhcmNoYWJsZUxhYmVsO1xufTtcblxudmFyIGdldFNlbGVjdGVkT3B0aW9uRm9yU2VhcmNoVmFsdWUgPSBmdW5jdGlvbiBnZXRTZWxlY3RlZE9wdGlvbkZvclNlYXJjaFZhbHVlKHNlYXJjaFZhbHVlLCBzZWxlY3RlZE9wdGlvbnMpIHtcbiAgdmFyIG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSA9IHNlYXJjaFZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiBzZWxlY3RlZE9wdGlvbnMuZmluZChmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgcmV0dXJuIGdldFNlYXJjaGFibGVMYWJlbChvcHRpb24pID09PSBub3JtYWxpemVkU2VhcmNoVmFsdWU7XG4gIH0pO1xufTtcblxudmFyIGNvbGxlY3RNYXRjaGluZ09wdGlvbiA9IGZ1bmN0aW9uIGNvbGxlY3RNYXRjaGluZ09wdGlvbihhY2N1bXVsYXRvciwgb3B0aW9uLCBub3JtYWxpemVkU2VhcmNoVmFsdWUsIGlzUHJlRmlsdGVyZWQsIHNlbGVjdGVkT3B0aW9ucykge1xuICAvLyBEb24ndCBzaG93IG9wdGlvbnMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiByZXF1ZXN0ZWQgaWZcbiAgLy8gdGhlIHNlbGVjdGVkT3B0aW9ucyBsaXN0IGV4aXN0c1xuICBpZiAoc2VsZWN0ZWRPcHRpb25zKSB7XG4gICAgdmFyIHNlbGVjdGVkT3B0aW9uID0gZ2V0U2VsZWN0ZWRPcHRpb25Gb3JTZWFyY2hWYWx1ZShnZXRTZWFyY2hhYmxlTGFiZWwob3B0aW9uLCBmYWxzZSksIHNlbGVjdGVkT3B0aW9ucyk7XG5cbiAgICBpZiAoc2VsZWN0ZWRPcHRpb24pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0gLy8gSWYgdGhlIG9wdGlvbnMgaGF2ZSBhbHJlYWR5IGJlZW4gcHJlZmlsdGVyZWQgdGhlbiB3ZSBjYW4gc2tpcCBmaWx0ZXJpbmcgYWdhaW5zdCB0aGUgc2VhcmNoIHZhbHVlLlxuICAvLyBUT0RPOiBJIHN0aWxsIGRvbid0IHF1aXRlIHVuZGVyc3RhbmQgaG93IHRoaXMgd29ya3Mgd2hlbiBob29rZWQgdXAgdG8gYXN5bmNcblxuXG4gIGlmIChpc1ByZUZpbHRlcmVkKSB7XG4gICAgYWNjdW11bGF0b3IucHVzaChvcHRpb24pO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICghbm9ybWFsaXplZFNlYXJjaFZhbHVlKSB7XG4gICAgYWNjdW11bGF0b3IucHVzaChvcHRpb24pO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBub3JtYWxpemVkT3B0aW9uID0gZ2V0U2VhcmNoYWJsZUxhYmVsKG9wdGlvbik7XG5cbiAgaWYgKG5vcm1hbGl6ZWRPcHRpb24uaW5jbHVkZXMobm9ybWFsaXplZFNlYXJjaFZhbHVlKSkge1xuICAgIGFjY3VtdWxhdG9yLnB1c2gob3B0aW9uKTtcbiAgfVxufTtcblxuZXhwb3J0IHZhciBnZXRNYXRjaGluZ09wdGlvbnMgPSBmdW5jdGlvbiBnZXRNYXRjaGluZ09wdGlvbnMob3B0aW9ucywgc2VhcmNoVmFsdWUsIGlzUHJlRmlsdGVyZWQsIHNlbGVjdGVkT3B0aW9ucykge1xuICB2YXIgbm9ybWFsaXplZFNlYXJjaFZhbHVlID0gc2VhcmNoVmFsdWUudG9Mb3dlckNhc2UoKTtcbiAgdmFyIG1hdGNoaW5nT3B0aW9ucyA9IFtdO1xuICBvcHRpb25zLmZvckVhY2goZnVuY3Rpb24gKG9wdGlvbikge1xuICAgIGNvbGxlY3RNYXRjaGluZ09wdGlvbihtYXRjaGluZ09wdGlvbnMsIG9wdGlvbiwgbm9ybWFsaXplZFNlYXJjaFZhbHVlLCBpc1ByZUZpbHRlcmVkLCBzZWxlY3RlZE9wdGlvbnMpO1xuICB9KTtcbiAgcmV0dXJuIG1hdGNoaW5nT3B0aW9ucztcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImJvcmRlcmVkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgRXVpVGV4dCB9IGZyb20gJy4uLy4uL3RleHQnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpU2VsZWN0YWJsZU1lc3NhZ2UgPSBmdW5jdGlvbiBFdWlTZWxlY3RhYmxlTWVzc2FnZShfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIF9yZWYkYm9yZGVyZWQgPSBfcmVmLmJvcmRlcmVkLFxuICAgICAgYm9yZGVyZWQgPSBfcmVmJGJvcmRlcmVkID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkYm9yZGVyZWQsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlTZWxlY3RhYmxlTWVzc2FnZScsIHtcbiAgICAnZXVpU2VsZWN0YWJsZU1lc3NhZ2UtLWJvcmRlcmVkJzogYm9yZGVyZWRcbiAgfSwgY2xhc3NOYW1lKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpVGV4dCwgX2V4dGVuZHMoe1xuICAgIGNvbG9yOiBcInN1YmR1ZWRcIixcbiAgICBzaXplOiBcInhzXCIsXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gIH0sIHJlc3QpLCBjaGlsZHJlbik7XG59O1xuRXVpU2VsZWN0YWJsZU1lc3NhZ2UucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICAgKiBNYXRjaCB0aGlzIHRvIHRoZSBgbGlzdFByb3BzLmJvcmRlcmVkYCBwcm9wZXJ0eSBvZiB5b3VyIGBFdWlTZWxlY3RhYmxlYCBpbnN0YW5jZVxuICAgICAgICovXG4gIGJvcmRlcmVkOiBQcm9wVHlwZXMuYm9vbFxufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG52YXIgX2V4Y2x1ZGVkID0gW1wiZGF0YVwiXSxcbiAgICBfZXhjbHVkZWQyID0gW1wibGFiZWxcIiwgXCJpc0dyb3VwTGFiZWxcIiwgXCJjaGVja2VkXCIsIFwiZGlzYWJsZWRcIiwgXCJwcmVwZW5kXCIsIFwiYXBwZW5kXCIsIFwicmVmXCIsIFwia2V5XCIsIFwic2VhcmNoYWJsZUxhYmVsXCIsIFwiZGF0YVwiXSxcbiAgICBfZXhjbHVkZWQzID0gW1wiY2xhc3NOYW1lXCIsIFwib3B0aW9uc1wiLCBcInNlYXJjaFZhbHVlXCIsIFwib25PcHRpb25DbGlja1wiLCBcInJlbmRlck9wdGlvblwiLCBcImhlaWdodFwiLCBcIndpbmRvd1Byb3BzXCIsIFwicm93SGVpZ2h0XCIsIFwiYWN0aXZlT3B0aW9uSW5kZXhcIiwgXCJtYWtlT3B0aW9uSWRcIiwgXCJzaG93SWNvbnNcIiwgXCJzaW5nbGVTZWxlY3Rpb25cIiwgXCJ2aXNpYmxlT3B0aW9uc1wiLCBcImFsbG93RXhjbHVzaW9uc1wiLCBcImJvcmRlcmVkXCIsIFwicGFkZGluZ1NpemVcIiwgXCJzZWFyY2hhYmxlXCIsIFwib25Gb2N1c0JhZGdlXCIsIFwibGlzdElkXCIsIFwic2V0QWN0aXZlT3B0aW9uSW5kZXhcIiwgXCJhcmlhLWxhYmVsXCIsIFwiYXJpYS1sYWJlbGxlZGJ5XCIsIFwiYXJpYS1kZXNjcmliZWRieVwiLCBcInJvbGVcIiwgXCJpc1ZpcnR1YWxpemVkXCIsIFwidGV4dFdyYXBcIl07XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBtZW1vIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBGaXhlZFNpemVMaXN0LCBhcmVFcXVhbCB9IGZyb20gJ3JlYWN0LXdpbmRvdyc7XG5pbXBvcnQgeyBFdWlBdXRvU2l6ZXIgfSBmcm9tICcuLi8uLi9hdXRvX3NpemVyJztcbmltcG9ydCB7IEV1aUhpZ2hsaWdodCB9IGZyb20gJy4uLy4uL2hpZ2hsaWdodCc7XG5pbXBvcnQgeyBFdWlTZWxlY3RhYmxlTGlzdEl0ZW0gfSBmcm9tICcuL3NlbGVjdGFibGVfbGlzdF9pdGVtJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVNlbGVjdGFibGVMaXN0ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhFdWlTZWxlY3RhYmxlTGlzdCwgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihFdWlTZWxlY3RhYmxlTGlzdCk7XG5cbiAgZnVuY3Rpb24gRXVpU2VsZWN0YWJsZUxpc3QocHJvcHMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpU2VsZWN0YWJsZUxpc3QpO1xuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBwcm9wcyk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwibGlzdFJlZlwiLCBudWxsKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJsaXN0Qm94UmVmXCIsIG51bGwpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInNldExpc3RSZWZcIiwgZnVuY3Rpb24gKHJlZikge1xuICAgICAgX3RoaXMubGlzdFJlZiA9IHJlZjtcblxuICAgICAgaWYgKHJlZiAmJiBfdGhpcy5wcm9wcy5hY3RpdmVPcHRpb25JbmRleCkge1xuICAgICAgICByZWYuc2Nyb2xsVG9JdGVtKF90aGlzLnByb3BzLmFjdGl2ZU9wdGlvbkluZGV4LCAnYXV0bycpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInJlbW92ZVNjcm9sbGFibGVUYWJTdG9wXCIsIGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgIC8vIEZpcmVmb3ggYWRkcyBhIHRhYiBzdG9wIGZvciBzY3JvbGxhYmxlIGNvbnRhaW5lcnNcbiAgICAgIC8vIFdlIGhhbmRsZSB0aGlzIGluc2lkZSBzbyBuZWVkIHRvIHN0b3AgZmlyZWZveCBmcm9tIGRvaW5nIGl0cyB0aGluZ1xuICAgICAgaWYgKHJlZikge1xuICAgICAgICByZWYuc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsICctMScpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInNldExpc3RCb3hSZWZcIiwgZnVuY3Rpb24gKHJlZikge1xuICAgICAgX3RoaXMubGlzdEJveFJlZiA9IHJlZjtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIGxpc3RJZCA9IF90aGlzJHByb3BzLmxpc3RJZCxcbiAgICAgICAgICBzZWFyY2hhYmxlID0gX3RoaXMkcHJvcHMuc2VhcmNoYWJsZSxcbiAgICAgICAgICBzaW5nbGVTZWxlY3Rpb24gPSBfdGhpcyRwcm9wcy5zaW5nbGVTZWxlY3Rpb24sXG4gICAgICAgICAgYXJpYUxhYmVsID0gX3RoaXMkcHJvcHNbJ2FyaWEtbGFiZWwnXSxcbiAgICAgICAgICBhcmlhTGFiZWxsZWRieSA9IF90aGlzJHByb3BzWydhcmlhLWxhYmVsbGVkYnknXSxcbiAgICAgICAgICBhcmlhRGVzY3JpYmVkYnkgPSBfdGhpcyRwcm9wc1snYXJpYS1kZXNjcmliZWRieSddO1xuXG4gICAgICBpZiAocmVmKSB7XG4gICAgICAgIHJlZi5zZXRBdHRyaWJ1dGUoJ2lkJywgbGlzdElkKTtcbiAgICAgICAgcmVmLnNldEF0dHJpYnV0ZSgncm9sZScsICdsaXN0Ym94Jyk7XG5cbiAgICAgICAgaWYgKHNlYXJjaGFibGUgIT09IHRydWUpIHtcbiAgICAgICAgICByZWYuc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsICcwJyk7XG5cbiAgICAgICAgICBpZiAoc2luZ2xlU2VsZWN0aW9uICE9PSAnYWx3YXlzJyAmJiBzaW5nbGVTZWxlY3Rpb24gIT09IHRydWUpIHtcbiAgICAgICAgICAgIHJlZi5zZXRBdHRyaWJ1dGUoJ2FyaWEtbXVsdGlzZWxlY3RhYmxlJywgJ3RydWUnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGFyaWFMYWJlbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICByZWYuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgYXJpYUxhYmVsKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYXJpYUxhYmVsbGVkYnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgcmVmLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbGxlZGJ5JywgYXJpYUxhYmVsbGVkYnkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBhcmlhRGVzY3JpYmVkYnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgcmVmLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbGxlZGJ5JywgYXJpYURlc2NyaWJlZGJ5KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIkxpc3RSb3dcIiwgLyojX19QVVJFX18qL21lbW8oZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgIHZhciBkYXRhID0gX3JlZi5kYXRhLFxuICAgICAgICAgIGluZGV4ID0gX3JlZi5pbmRleCxcbiAgICAgICAgICBzdHlsZSA9IF9yZWYuc3R5bGU7XG4gICAgICB2YXIgb3B0aW9uID0gZGF0YVtpbmRleF07XG5cbiAgICAgIHZhciBvcHRpb25EYXRhID0gb3B0aW9uLmRhdGEsXG4gICAgICAgICAgX29wdGlvbiA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhvcHRpb24sIF9leGNsdWRlZCk7XG5cbiAgICAgIHZhciBsYWJlbCA9IG9wdGlvbi5sYWJlbCxcbiAgICAgICAgICBpc0dyb3VwTGFiZWwgPSBvcHRpb24uaXNHcm91cExhYmVsLFxuICAgICAgICAgIGNoZWNrZWQgPSBvcHRpb24uY2hlY2tlZCxcbiAgICAgICAgICBkaXNhYmxlZCA9IG9wdGlvbi5kaXNhYmxlZCxcbiAgICAgICAgICBwcmVwZW5kID0gb3B0aW9uLnByZXBlbmQsXG4gICAgICAgICAgYXBwZW5kID0gb3B0aW9uLmFwcGVuZCxcbiAgICAgICAgICByZWYgPSBvcHRpb24ucmVmLFxuICAgICAgICAgIGtleSA9IG9wdGlvbi5rZXksXG4gICAgICAgICAgc2VhcmNoYWJsZUxhYmVsID0gb3B0aW9uLnNlYXJjaGFibGVMYWJlbCxcbiAgICAgICAgICBfZGF0YSA9IG9wdGlvbi5kYXRhLFxuICAgICAgICAgIG9wdGlvblJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob3B0aW9uLCBfZXhjbHVkZWQyKTtcblxuICAgICAgdmFyIF90aGlzJHByb3BzMiA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4ID0gX3RoaXMkcHJvcHMyLmFjdGl2ZU9wdGlvbkluZGV4LFxuICAgICAgICAgIGFsbG93RXhjbHVzaW9ucyA9IF90aGlzJHByb3BzMi5hbGxvd0V4Y2x1c2lvbnMsXG4gICAgICAgICAgb25Gb2N1c0JhZGdlID0gX3RoaXMkcHJvcHMyLm9uRm9jdXNCYWRnZSxcbiAgICAgICAgICBwYWRkaW5nU2l6ZSA9IF90aGlzJHByb3BzMi5wYWRkaW5nU2l6ZSxcbiAgICAgICAgICBzZWFyY2hWYWx1ZSA9IF90aGlzJHByb3BzMi5zZWFyY2hWYWx1ZSxcbiAgICAgICAgICBzaG93SWNvbnMgPSBfdGhpcyRwcm9wczIuc2hvd0ljb25zLFxuICAgICAgICAgIG1ha2VPcHRpb25JZCA9IF90aGlzJHByb3BzMi5tYWtlT3B0aW9uSWQsXG4gICAgICAgICAgcmVuZGVyT3B0aW9uID0gX3RoaXMkcHJvcHMyLnJlbmRlck9wdGlvbixcbiAgICAgICAgICBzZXRBY3RpdmVPcHRpb25JbmRleCA9IF90aGlzJHByb3BzMi5zZXRBY3RpdmVPcHRpb25JbmRleCxcbiAgICAgICAgICBzZWFyY2hhYmxlID0gX3RoaXMkcHJvcHMyLnNlYXJjaGFibGUsXG4gICAgICAgICAgdGV4dFdyYXAgPSBfdGhpcyRwcm9wczIudGV4dFdyYXA7XG5cbiAgICAgIGlmIChpc0dyb3VwTGFiZWwpIHtcbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJsaVwiLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgcm9sZTogXCJwcmVzZW50YXRpb25cIixcbiAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpU2VsZWN0YWJsZUxpc3RfX2dyb3VwTGFiZWxcIixcbiAgICAgICAgICBzdHlsZTogc3R5bGUgLy8gQHRzLWlnbm9yZSBjb21wbGV4XG5cbiAgICAgICAgfSwgb3B0aW9uUmVzdCksIHByZXBlbmQsIGxhYmVsLCBhcHBlbmQpO1xuICAgICAgfVxuXG4gICAgICB2YXIgbGFiZWxDb3VudCA9IGRhdGEuZmlsdGVyKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbi5pc0dyb3VwTGFiZWw7XG4gICAgICB9KS5sZW5ndGg7XG4gICAgICB2YXIgaWQgPSBtYWtlT3B0aW9uSWQoaW5kZXgpO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpU2VsZWN0YWJsZUxpc3RJdGVtLCBfZXh0ZW5kcyh7XG4gICAgICAgIGtleTogaWQsXG4gICAgICAgIGlkOiBpZCxcbiAgICAgICAgc3R5bGU6IHN0eWxlLFxuICAgICAgICBvbk1vdXNlRG93bjogZnVuY3Rpb24gb25Nb3VzZURvd24oKSB7XG4gICAgICAgICAgc2V0QWN0aXZlT3B0aW9uSW5kZXgoaW5kZXgpO1xuICAgICAgICB9LFxuICAgICAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKGV2ZW50KSB7XG4gICAgICAgICAgZXZlbnQucGVyc2lzdCgpOyAvLyBOT1RFOiBUaGlzIGlzIG5lZWRlZCBmb3IgUmVhY3QgdjE2IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG5cbiAgICAgICAgICBfdGhpcy5vbkFkZE9yUmVtb3ZlT3B0aW9uKG9wdGlvbiwgZXZlbnQpO1xuICAgICAgICB9LFxuICAgICAgICByZWY6IHJlZiA/IHJlZi5iaW5kKG51bGwsIGluZGV4KSA6IHVuZGVmaW5lZCxcbiAgICAgICAgaXNGb2N1c2VkOiBhY3RpdmVPcHRpb25JbmRleCA9PT0gaW5kZXgsXG4gICAgICAgIHRpdGxlOiBzZWFyY2hhYmxlTGFiZWwgfHwgbGFiZWwsXG4gICAgICAgIGNoZWNrZWQ6IGNoZWNrZWQsXG4gICAgICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICAgICAgcHJlcGVuZDogcHJlcGVuZCxcbiAgICAgICAgYXBwZW5kOiBhcHBlbmQsXG4gICAgICAgIFwiYXJpYS1wb3NpbnNldFwiOiBpbmRleCArIDEgLSBsYWJlbENvdW50LFxuICAgICAgICBcImFyaWEtc2V0c2l6ZVwiOiBkYXRhLmxlbmd0aCAtIGxhYmVsQ291bnQsXG4gICAgICAgIG9uRm9jdXNCYWRnZTogb25Gb2N1c0JhZGdlLFxuICAgICAgICBhbGxvd0V4Y2x1c2lvbnM6IGFsbG93RXhjbHVzaW9ucyxcbiAgICAgICAgc2hvd0ljb25zOiBzaG93SWNvbnMsXG4gICAgICAgIHBhZGRpbmdTaXplOiBwYWRkaW5nU2l6ZSxcbiAgICAgICAgc2VhcmNoYWJsZTogc2VhcmNoYWJsZSxcbiAgICAgICAgdGV4dFdyYXA6IHRleHRXcmFwXG4gICAgICB9LCBvcHRpb25SZXN0KSwgcmVuZGVyT3B0aW9uID8gcmVuZGVyT3B0aW9uKCAvLyBAdHMtaWdub3JlIGNvbXBsZXhcbiAgICAgIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgX29wdGlvbiksIG9wdGlvbkRhdGEpLCBfdGhpcy5wcm9wcy5zZWFyY2hWYWx1ZSkgOiBfX19FbW90aW9uSlNYKEV1aUhpZ2hsaWdodCwge1xuICAgICAgICBzZWFyY2g6IHNlYXJjaFZhbHVlXG4gICAgICB9LCBsYWJlbCkpO1xuICAgIH0sIGFyZUVxdWFsKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25BZGRPclJlbW92ZU9wdGlvblwiLCBmdW5jdGlvbiAob3B0aW9uLCBldmVudCkge1xuICAgICAgaWYgKG9wdGlvbi5kaXNhYmxlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBfdGhpcyRwcm9wczMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBhbGxvd0V4Y2x1c2lvbnMgPSBfdGhpcyRwcm9wczMuYWxsb3dFeGNsdXNpb25zLFxuICAgICAgICAgIG9wdGlvbnMgPSBfdGhpcyRwcm9wczMub3B0aW9ucyxcbiAgICAgICAgICBfdGhpcyRwcm9wczMkdmlzaWJsZU8gPSBfdGhpcyRwcm9wczMudmlzaWJsZU9wdGlvbnMsXG4gICAgICAgICAgdmlzaWJsZU9wdGlvbnMgPSBfdGhpcyRwcm9wczMkdmlzaWJsZU8gPT09IHZvaWQgMCA/IG9wdGlvbnMgOiBfdGhpcyRwcm9wczMkdmlzaWJsZU87XG5cbiAgICAgIF90aGlzLnByb3BzLnNldEFjdGl2ZU9wdGlvbkluZGV4KHZpc2libGVPcHRpb25zLmZpbmRJbmRleChmdW5jdGlvbiAoX3JlZjIpIHtcbiAgICAgICAgdmFyIGxhYmVsID0gX3JlZjIubGFiZWw7XG4gICAgICAgIHJldHVybiBsYWJlbCA9PT0gb3B0aW9uLmxhYmVsO1xuICAgICAgfSksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKG9wdGlvbi5jaGVja2VkID09PSAnb24nICYmIGFsbG93RXhjbHVzaW9ucykge1xuICAgICAgICAgIF90aGlzLm9uRXhjbHVkZU9wdGlvbihvcHRpb24sIGV2ZW50KTtcbiAgICAgICAgfSBlbHNlIGlmIChvcHRpb24uY2hlY2tlZCA9PT0gJ29uJyB8fCBvcHRpb24uY2hlY2tlZCA9PT0gJ29mZicpIHtcbiAgICAgICAgICBfdGhpcy5vblJlbW92ZU9wdGlvbihvcHRpb24sIGV2ZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBfdGhpcy5vbkFkZE9wdGlvbihvcHRpb24sIGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25BZGRPcHRpb25cIiwgZnVuY3Rpb24gKGFkZGVkT3B0aW9uLCBldmVudCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNCA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIG9uT3B0aW9uQ2xpY2sgPSBfdGhpcyRwcm9wczQub25PcHRpb25DbGljayxcbiAgICAgICAgICBvcHRpb25zID0gX3RoaXMkcHJvcHM0Lm9wdGlvbnMsXG4gICAgICAgICAgc2luZ2xlU2VsZWN0aW9uID0gX3RoaXMkcHJvcHM0LnNpbmdsZVNlbGVjdGlvbjtcbiAgICAgIHZhciB1cGRhdGVkT3B0aW9ucyA9IG9wdGlvbnMubWFwKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgLy8gaWYgc2luZ2xlU2VsZWN0aW9uIGlzIGVuYWJsZWQsIHVuY2hlY2sgYW55IHNlbGVjdGVkIG9wdGlvbihzKVxuICAgICAgICB2YXIgdXBkYXRlZE9wdGlvbiA9IF9vYmplY3RTcHJlYWQoe30sIG9wdGlvbik7XG5cbiAgICAgICAgaWYgKHNpbmdsZVNlbGVjdGlvbikge1xuICAgICAgICAgIGRlbGV0ZSB1cGRhdGVkT3B0aW9uLmNoZWNrZWQ7XG4gICAgICAgIH0gLy8gaWYgdGhpcyBpcyB0aGUgbm93LXNlbGVjdGVkIG9wdGlvbiwgY2hlY2sgaXRcblxuXG4gICAgICAgIGlmIChvcHRpb24gPT09IGFkZGVkT3B0aW9uKSB7XG4gICAgICAgICAgdXBkYXRlZE9wdGlvbi5jaGVja2VkID0gJ29uJztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1cGRhdGVkT3B0aW9uO1xuICAgICAgfSk7XG4gICAgICBvbk9wdGlvbkNsaWNrKHVwZGF0ZWRPcHRpb25zLCBldmVudCk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25SZW1vdmVPcHRpb25cIiwgZnVuY3Rpb24gKHJlbW92ZWRPcHRpb24sIGV2ZW50KSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM1ID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgb25PcHRpb25DbGljayA9IF90aGlzJHByb3BzNS5vbk9wdGlvbkNsaWNrLFxuICAgICAgICAgIHNpbmdsZVNlbGVjdGlvbiA9IF90aGlzJHByb3BzNS5zaW5nbGVTZWxlY3Rpb24sXG4gICAgICAgICAgb3B0aW9ucyA9IF90aGlzJHByb3BzNS5vcHRpb25zO1xuICAgICAgdmFyIHVwZGF0ZWRPcHRpb25zID0gb3B0aW9ucy5tYXAoZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgICB2YXIgdXBkYXRlZE9wdGlvbiA9IF9vYmplY3RTcHJlYWQoe30sIG9wdGlvbik7XG5cbiAgICAgICAgaWYgKG9wdGlvbiA9PT0gcmVtb3ZlZE9wdGlvbiAmJiBzaW5nbGVTZWxlY3Rpb24gIT09ICdhbHdheXMnKSB7XG4gICAgICAgICAgZGVsZXRlIHVwZGF0ZWRPcHRpb24uY2hlY2tlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1cGRhdGVkT3B0aW9uO1xuICAgICAgfSk7XG4gICAgICBvbk9wdGlvbkNsaWNrKHVwZGF0ZWRPcHRpb25zLCBldmVudCk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25FeGNsdWRlT3B0aW9uXCIsIGZ1bmN0aW9uIChleGNsdWRlZE9wdGlvbiwgZXZlbnQpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczYgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBvbk9wdGlvbkNsaWNrID0gX3RoaXMkcHJvcHM2Lm9uT3B0aW9uQ2xpY2ssXG4gICAgICAgICAgb3B0aW9ucyA9IF90aGlzJHByb3BzNi5vcHRpb25zO1xuICAgICAgZXhjbHVkZWRPcHRpb24uY2hlY2tlZCA9ICdvZmYnO1xuICAgICAgdmFyIHVwZGF0ZWRPcHRpb25zID0gb3B0aW9ucy5tYXAoZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgICB2YXIgdXBkYXRlZE9wdGlvbiA9IF9vYmplY3RTcHJlYWQoe30sIG9wdGlvbik7XG5cbiAgICAgICAgaWYgKG9wdGlvbiA9PT0gZXhjbHVkZWRPcHRpb24pIHtcbiAgICAgICAgICB1cGRhdGVkT3B0aW9uLmNoZWNrZWQgPSAnb2ZmJztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1cGRhdGVkT3B0aW9uO1xuICAgICAgfSk7XG4gICAgICBvbk9wdGlvbkNsaWNrKHVwZGF0ZWRPcHRpb25zLCBldmVudCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoRXVpU2VsZWN0YWJsZUxpc3QsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZFVwZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUoKSB7XG4gICAgICB2YXIgYWN0aXZlT3B0aW9uSW5kZXggPSB0aGlzLnByb3BzLmFjdGl2ZU9wdGlvbkluZGV4O1xuXG4gICAgICBpZiAodGhpcy5saXN0Qm94UmVmICYmIHRoaXMucHJvcHMuc2VhcmNoYWJsZSAhPT0gdHJ1ZSkge1xuICAgICAgICB0aGlzLmxpc3RCb3hSZWYuc2V0QXR0cmlidXRlKCdhcmlhLWFjdGl2ZWRlc2NlbmRhbnQnLCBcIlwiLmNvbmNhdCh0aGlzLnByb3BzLm1ha2VPcHRpb25JZChhY3RpdmVPcHRpb25JbmRleCkpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMubGlzdFJlZiAmJiB0eXBlb2YgdGhpcy5wcm9wcy5hY3RpdmVPcHRpb25JbmRleCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdGhpcy5saXN0UmVmLnNjcm9sbFRvSXRlbSh0aGlzLnByb3BzLmFjdGl2ZU9wdGlvbkluZGV4LCAnYXV0bycpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHZhciBfdGhpcyRwcm9wczcgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzNy5jbGFzc05hbWUsXG4gICAgICAgICAgb3B0aW9ucyA9IF90aGlzJHByb3BzNy5vcHRpb25zLFxuICAgICAgICAgIHNlYXJjaFZhbHVlID0gX3RoaXMkcHJvcHM3LnNlYXJjaFZhbHVlLFxuICAgICAgICAgIG9uT3B0aW9uQ2xpY2sgPSBfdGhpcyRwcm9wczcub25PcHRpb25DbGljayxcbiAgICAgICAgICByZW5kZXJPcHRpb24gPSBfdGhpcyRwcm9wczcucmVuZGVyT3B0aW9uLFxuICAgICAgICAgIGZvcmNlZEhlaWdodCA9IF90aGlzJHByb3BzNy5oZWlnaHQsXG4gICAgICAgICAgd2luZG93UHJvcHMgPSBfdGhpcyRwcm9wczcud2luZG93UHJvcHMsXG4gICAgICAgICAgcm93SGVpZ2h0ID0gX3RoaXMkcHJvcHM3LnJvd0hlaWdodCxcbiAgICAgICAgICBhY3RpdmVPcHRpb25JbmRleCA9IF90aGlzJHByb3BzNy5hY3RpdmVPcHRpb25JbmRleCxcbiAgICAgICAgICBtYWtlT3B0aW9uSWQgPSBfdGhpcyRwcm9wczcubWFrZU9wdGlvbklkLFxuICAgICAgICAgIHNob3dJY29ucyA9IF90aGlzJHByb3BzNy5zaG93SWNvbnMsXG4gICAgICAgICAgc2luZ2xlU2VsZWN0aW9uID0gX3RoaXMkcHJvcHM3LnNpbmdsZVNlbGVjdGlvbixcbiAgICAgICAgICB2aXNpYmxlT3B0aW9ucyA9IF90aGlzJHByb3BzNy52aXNpYmxlT3B0aW9ucyxcbiAgICAgICAgICBhbGxvd0V4Y2x1c2lvbnMgPSBfdGhpcyRwcm9wczcuYWxsb3dFeGNsdXNpb25zLFxuICAgICAgICAgIGJvcmRlcmVkID0gX3RoaXMkcHJvcHM3LmJvcmRlcmVkLFxuICAgICAgICAgIHBhZGRpbmdTaXplID0gX3RoaXMkcHJvcHM3LnBhZGRpbmdTaXplLFxuICAgICAgICAgIHNlYXJjaGFibGUgPSBfdGhpcyRwcm9wczcuc2VhcmNoYWJsZSxcbiAgICAgICAgICBvbkZvY3VzQmFkZ2UgPSBfdGhpcyRwcm9wczcub25Gb2N1c0JhZGdlLFxuICAgICAgICAgIGxpc3RJZCA9IF90aGlzJHByb3BzNy5saXN0SWQsXG4gICAgICAgICAgc2V0QWN0aXZlT3B0aW9uSW5kZXggPSBfdGhpcyRwcm9wczcuc2V0QWN0aXZlT3B0aW9uSW5kZXgsXG4gICAgICAgICAgYXJpYUxhYmVsID0gX3RoaXMkcHJvcHM3WydhcmlhLWxhYmVsJ10sXG4gICAgICAgICAgYXJpYUxhYmVsbGVkYnkgPSBfdGhpcyRwcm9wczdbJ2FyaWEtbGFiZWxsZWRieSddLFxuICAgICAgICAgIGFyaWFEZXNjcmliZWRieSA9IF90aGlzJHByb3BzN1snYXJpYS1kZXNjcmliZWRieSddLFxuICAgICAgICAgIHJvbGUgPSBfdGhpcyRwcm9wczcucm9sZSxcbiAgICAgICAgICBpc1ZpcnR1YWxpemVkID0gX3RoaXMkcHJvcHM3LmlzVmlydHVhbGl6ZWQsXG4gICAgICAgICAgdGV4dFdyYXAgPSBfdGhpcyRwcm9wczcudGV4dFdyYXAsXG4gICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wczcsIF9leGNsdWRlZDMpO1xuXG4gICAgICB2YXIgb3B0aW9uQXJyYXkgPSB2aXNpYmxlT3B0aW9ucyB8fCBvcHRpb25zO1xuICAgICAgdmFyIGhlaWdodElzRnVsbCA9IGZvcmNlZEhlaWdodCA9PT0gJ2Z1bGwnO1xuICAgICAgdmFyIGNhbGN1bGF0ZWRIZWlnaHQgPSBoZWlnaHRJc0Z1bGwgPyBmYWxzZSA6IGZvcmNlZEhlaWdodDsgLy8gSWYgY2FsY3VsYXRlZEhlaWdodCBpcyBzdGlsbCB1bmRlZmluZWQsIHRoZW4gY2FsY3VsYXRlIGl0XG5cbiAgICAgIGlmIChjYWxjdWxhdGVkSGVpZ2h0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdmFyIG1heFZpc2libGVPcHRpb25zID0gNztcbiAgICAgICAgdmFyIG51bVZpc2libGVPcHRpb25zID0gb3B0aW9uQXJyYXkubGVuZ3RoO1xuICAgICAgICB2YXIgbnVtVmlzaWJsZU1vcmVUaGFuTWF4ID0gb3B0aW9uQXJyYXkubGVuZ3RoID4gbWF4VmlzaWJsZU9wdGlvbnM7XG5cbiAgICAgICAgaWYgKG51bVZpc2libGVNb3JlVGhhbk1heCkge1xuICAgICAgICAgIC8vIFNob3cgb25seSBoYWxmIG9mIHRoZSBsYXN0IG9uZSB0byBpbmRpY2F0ZSB0aGVyZSdzIG1vcmUgdG8gc2Nyb2xsIHRvXG4gICAgICAgICAgY2FsY3VsYXRlZEhlaWdodCA9IChtYXhWaXNpYmxlT3B0aW9ucyAtIDAuNSkgKiByb3dIZWlnaHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FsY3VsYXRlZEhlaWdodCA9IG51bVZpc2libGVPcHRpb25zICogcm93SGVpZ2h0O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpU2VsZWN0YWJsZUxpc3QnLCB7XG4gICAgICAgICdldWlTZWxlY3RhYmxlTGlzdC1mdWxsSGVpZ2h0JzogaGVpZ2h0SXNGdWxsLFxuICAgICAgICAnZXVpU2VsZWN0YWJsZUxpc3QtYm9yZGVyZWQnOiBib3JkZXJlZFxuICAgICAgfSwgY2xhc3NOYW1lKTtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gICAgICB9LCByZXN0KSwgaXNWaXJ0dWFsaXplZCA/IF9fX0Vtb3Rpb25KU1goRXVpQXV0b1NpemVyLCB7XG4gICAgICAgIGRpc2FibGVIZWlnaHQ6ICFoZWlnaHRJc0Z1bGxcbiAgICAgIH0sIGZ1bmN0aW9uIChfcmVmMykge1xuICAgICAgICB2YXIgd2lkdGggPSBfcmVmMy53aWR0aCxcbiAgICAgICAgICAgIGhlaWdodCA9IF9yZWYzLmhlaWdodDtcbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRml4ZWRTaXplTGlzdCwgX2V4dGVuZHMoe1xuICAgICAgICAgIHJlZjogX3RoaXMyLnNldExpc3RSZWYsXG4gICAgICAgICAgb3V0ZXJSZWY6IF90aGlzMi5yZW1vdmVTY3JvbGxhYmxlVGFiU3RvcCxcbiAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpU2VsZWN0YWJsZUxpc3RfX2xpc3RcIixcbiAgICAgICAgICBcImRhdGEtc2tpcC1heGVcIjogXCJzY3JvbGxhYmxlLXJlZ2lvbi1mb2N1c2FibGVcIixcbiAgICAgICAgICB3aWR0aDogd2lkdGgsXG4gICAgICAgICAgaGVpZ2h0OiBjYWxjdWxhdGVkSGVpZ2h0IHx8IGhlaWdodCxcbiAgICAgICAgICBpdGVtQ291bnQ6IG9wdGlvbkFycmF5Lmxlbmd0aCxcbiAgICAgICAgICBpdGVtRGF0YTogb3B0aW9uQXJyYXksXG4gICAgICAgICAgaXRlbVNpemU6IHJvd0hlaWdodCxcbiAgICAgICAgICBpbm5lckVsZW1lbnRUeXBlOiBcInVsXCIsXG4gICAgICAgICAgaW5uZXJSZWY6IF90aGlzMi5zZXRMaXN0Qm94UmVmXG4gICAgICAgIH0sIHdpbmRvd1Byb3BzKSwgX3RoaXMyLkxpc3RSb3cpO1xuICAgICAgfSkgOiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcImV1aVNlbGVjdGFibGVMaXN0X19saXN0XCIsXG4gICAgICAgIHJlZjogdGhpcy5yZW1vdmVTY3JvbGxhYmxlVGFiU3RvcFxuICAgICAgfSwgX19fRW1vdGlvbkpTWChcInVsXCIsIHtcbiAgICAgICAgcmVmOiB0aGlzLnNldExpc3RCb3hSZWZcbiAgICAgIH0sIG9wdGlvbkFycmF5Lm1hcChmdW5jdGlvbiAoXywgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KF90aGlzMi5MaXN0Um93LCB7XG4gICAgICAgICAga2V5OiBpbmRleCxcbiAgICAgICAgICBkYXRhOiBvcHRpb25BcnJheSxcbiAgICAgICAgICBpbmRleDogaW5kZXhcbiAgICAgICAgfSwgbnVsbCk7XG4gICAgICB9KSkpKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gRXVpU2VsZWN0YWJsZUxpc3Q7XG59KENvbXBvbmVudCk7XG5cbl9kZWZpbmVQcm9wZXJ0eShFdWlTZWxlY3RhYmxlTGlzdCwgXCJkZWZhdWx0UHJvcHNcIiwge1xuICByb3dIZWlnaHQ6IDMyLFxuICBzZWFyY2hWYWx1ZTogJycsXG4gIGlzVmlydHVhbGl6ZWQ6IHRydWVcbn0pO1xuXG5FdWlTZWxlY3RhYmxlTGlzdC5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgICAqIFRoZSBpbmRleCBvZiB0aGUgb3B0aW9uIHRvIGJlIGhpZ2hsaWdodGVkIGFzIHBzZXVkby1mb2N1c2VkO1xuICAgICAgICogR29vZCBmb3IgdXNlIHdoZW4gb25seSBvbmUgc2VsZWN0aW9uIGlzIGFsbG93ZWQgYW5kIG5lZWRpbmcgdG8gb3BlblxuICAgICAgICogZGlyZWN0bHkgdG8gdGhhdCBvcHRpb25cbiAgICAgICAqL1xuICBhY3RpdmVPcHRpb25JbmRleDogUHJvcFR5cGVzLm51bWJlcixcblxuICAvKipcbiAgICAgICAqIFNob3cgdGhlIGNoZWNrL2Nyb3NzIHNlbGVjdGlvbiBpbmRpY2F0b3IgaWNvbnNcbiAgICAgICAqL1xuICBzaG93SWNvbnM6IFByb3BUeXBlcy5ib29sLFxuICBzaW5nbGVTZWxlY3Rpb246IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhbHdheXNcIl0pLCBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkXSksXG5cbiAgLyoqXG4gICAgICAgKiBBbnkgcHJvcHMgdG8gc2VuZCBzcGVjaWZpY2FsbHkgdG8gdGhlIHJlYWN0LXdpbmRvdyBgRml4ZWRTaXplTGlzdGBcbiAgICAgICAqL1xuICB3aW5kb3dQcm9wczogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgICAqIEFkZHMgYSBib3JkZXIgYXJvdW5kIHRoZSBsaXN0IHRvIGluZGljYXRlIHRoZSBib3VuZHM7XG4gICAgICAgKiBVc2VmdWwgd2hlbiB0aGUgbGlzdCBzY3JvbGxzLCBvdGhlcndpc2UgdXNlIHlvdXIgb3duIGNvbnRhaW5lclxuICAgICAgICovXG4gIGJvcmRlcmVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgICAqIFdoZW4gZW5hYmxlZCBieSBzZXR0aW5nIHRvIGVpdGhlciBgdHJ1ZWAgb3IgcGFzc2luZyBjdXN0b20gdGV4dCxcbiAgICAgICAqIHNob3dzIGEgaG9sbG93IGJhZGdlIGFzIGFuIGFwcGVuZCAoZmFyIHJpZ2h0KSB3aGVuIHRoZSBpdGVtIGlzIGZvY3VzZWQuXG4gICAgICAgKiBUaGUgZGVmYXVsdCBjb250ZW50IHdoZW4gYHRydWVgIGlzIGBcdTIxQTkgdG8gc2VsZWN0L2Rlc2VsZWN0L2luY2x1ZGUvZXhjbHVkZWBcbiAgICAgICAqL1xuICBvbkZvY3VzQmFkZ2U6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgLyoqXG4gICAgICAgKiBBY2NlcHRzIGFueSBzdHJpbmcgZnJvbSBvdXIgaWNvbiBsaWJyYXJ5XG4gICAgICAgKi9cbiAgICBpY29uVHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYWxlcnRcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhc3Rlcmlza1wiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJib2x0XCIsIFwiYm94ZXNIb3Jpem9udGFsXCIsIFwiYm94ZXNWZXJ0aWNhbFwiLCBcImJyYW5jaFwiLCBcImJyYW5jaFVzZXJcIiwgXCJicm9vbVwiLCBcImJydXNoXCIsIFwiYnVnXCIsIFwiYnVsbHNleWVcIiwgXCJjYWxlbmRhclwiLCBcImNhbnZhc0FwcFwiLCBcImNhc2VzQXBwXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsb2NrXCIsIFwiY2xvdWREcml6emxlXCIsIFwiY2xvdWRTdG9ybXlcIiwgXCJjbG91ZFN1bm55XCIsIFwiY2x1c3RlclwiLCBcImNvZGVBcHBcIiwgXCJjb2xvclwiLCBcImNvbXB1dGVcIiwgXCJjb25zb2xlXCIsIFwiY29uc29sZUFwcFwiLCBcImNvbnRhaW5lclwiLCBcImNvbnRpbnVpdHlBYm92ZVwiLCBcImNvbnRpbnVpdHlBYm92ZUJlbG93XCIsIFwiY29udGludWl0eUJlbG93XCIsIFwiY29udGludWl0eVdpdGhpblwiLCBcImNvbnRyb2xzSG9yaXpvbnRhbFwiLCBcImNvbnRyb2xzVmVydGljYWxcIiwgXCJjb3B5XCIsIFwiY29weUNsaXBib2FyZFwiLCBcImNyZWF0ZUFkdmFuY2VkSm9iXCIsIFwiY3JlYXRlTXVsdGlNZXRyaWNKb2JcIiwgXCJjcmVhdGVQb3B1bGF0aW9uSm9iXCIsIFwiY3JlYXRlU2luZ2xlTWV0cmljSm9iXCIsIFwiY3Jvc3NcIiwgXCJjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcFwiLCBcImNyb3NzSW5BQ2lyY2xlRmlsbGVkXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpc2NvdmVyQXBwXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG91YmxlQXJyb3dMZWZ0XCIsIFwiZG91YmxlQXJyb3dSaWdodFwiLCBcImRvd25sb2FkXCIsIFwiZWRpdG9yQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JBbGlnbkxlZnRcIiwgXCJlZGl0b3JBbGlnblJpZ2h0XCIsIFwiZWRpdG9yQm9sZFwiLCBcImVkaXRvckNoZWNrbGlzdFwiLCBcImVkaXRvckNvZGVCbG9ja1wiLCBcImVkaXRvckNvbW1lbnRcIiwgXCJlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbFwiLCBcImVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbFwiLCBcImVkaXRvckhlYWRpbmdcIiwgXCJlZGl0b3JJdGFsaWNcIiwgXCJlZGl0b3JJdGVtQWxpZ25Cb3R0b21cIiwgXCJlZGl0b3JJdGVtQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JJdGVtQWxpZ25MZWZ0XCIsIFwiZWRpdG9ySXRlbUFsaWduTWlkZGxlXCIsIFwiZWRpdG9ySXRlbUFsaWduUmlnaHRcIiwgXCJlZGl0b3JJdGVtQWxpZ25Ub3BcIiwgXCJlZGl0b3JMaW5rXCIsIFwiZWRpdG9yT3JkZXJlZExpc3RcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnRcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BMZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BSaWdodFwiLCBcImVkaXRvclJlZG9cIiwgXCJlZGl0b3JTdHJpa2VcIiwgXCJlZGl0b3JUYWJsZVwiLCBcImVkaXRvclVuZGVybGluZVwiLCBcImVkaXRvclVuZG9cIiwgXCJlZGl0b3JVbm9yZGVyZWRMaXN0XCIsIFwiZW1haWxcIiwgXCJlbXB0eVwiLCBcImVtc0FwcFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibW9iaWxlXCIsIFwibW9uaXRvcmluZ0FwcFwiLCBcIm1vb25cIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFwZXJDbGlwXCIsIFwicGFydGlhbFwiLCBcInBhdXNlXCIsIFwicGF5bWVudFwiLCBcInBlbmNpbFwiLCBcInBlcmNlbnRcIiwgXCJwaW5cIiwgXCJwaW5GaWxsZWRcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBsYXlcIiwgXCJwbGF5RmlsbGVkXCIsIFwicGx1c1wiLCBcInBsdXNJbkNpcmNsZVwiLCBcInBsdXNJbkNpcmNsZUZpbGxlZFwiLCBcInBvcG91dFwiLCBcInB1c2hcIiwgXCJxdWVzdGlvbkluQ2lyY2xlXCIsIFwicXVvdGVcIiwgXCJyZWNlbnRseVZpZXdlZEFwcFwiLCBcInJlZnJlc2hcIiwgXCJyZWdyZXNzaW9uSm9iXCIsIFwicmVwb3J0ZXJcIiwgXCJyZXBvcnRpbmdBcHBcIiwgXCJyZXR1cm5LZXlcIiwgXCJzYXZlXCIsIFwic2F2ZWRPYmplY3RzQXBwXCIsIFwic2NhbGVcIiwgXCJzZWFyY2hcIiwgXCJzZWFyY2hQcm9maWxlckFwcFwiLCBcInNlY3VyaXR5QW5hbHl0aWNzQXBwXCIsIFwic2VjdXJpdHlBcHBcIiwgXCJzZWN1cml0eVNpZ25hbFwiLCBcInNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWRcIiwgXCJzZWN1cml0eVNpZ25hbFJlc29sdmVkXCIsIFwic2Vzc2lvblZpZXdlclwiLCBcInNoYXJkXCIsIFwic2hhcmVcIiwgXCJzbm93Zmxha2VcIiwgXCJzb3J0RG93blwiLCBcInNvcnRMZWZ0XCIsIFwic29ydFJpZ2h0XCIsIFwic29ydFVwXCIsIFwic29ydGFibGVcIiwgXCJzcGFjZXNBcHBcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EZW5zZVZlY3RvclwiLCBcInRva2VuRWxlbWVudFwiLCBcInRva2VuRW51bVwiLCBcInRva2VuRW51bU1lbWJlclwiLCBcInRva2VuRXZlbnRcIiwgXCJ0b2tlbkV4Y2VwdGlvblwiLCBcInRva2VuRmllbGRcIiwgXCJ0b2tlbkZpbGVcIiwgXCJ0b2tlbkZsYXR0ZW5lZFwiLCBcInRva2VuRnVuY3Rpb25cIiwgXCJ0b2tlbkdlb1wiLCBcInRva2VuSGlzdG9ncmFtXCIsIFwidG9rZW5JbnRlcmZhY2VcIiwgXCJ0b2tlbklQXCIsIFwidG9rZW5Kb2luXCIsIFwidG9rZW5LZXlcIiwgXCJ0b2tlbktleXdvcmRcIiwgXCJ0b2tlbk1ldGhvZFwiLCBcInRva2VuTWV0cmljQ291bnRlclwiLCBcInRva2VuTWV0cmljR2F1Z2VcIiwgXCJ0b2tlbk1vZHVsZVwiLCBcInRva2VuTmFtZXNwYWNlXCIsIFwidG9rZW5OZXN0ZWRcIiwgXCJ0b2tlbk51bGxcIiwgXCJ0b2tlbk51bWJlclwiLCBcInRva2VuT2JqZWN0XCIsIFwidG9rZW5PcGVyYXRvclwiLCBcInRva2VuUGFja2FnZVwiLCBcInRva2VuUGFyYW1ldGVyXCIsIFwidG9rZW5QZXJjb2xhdG9yXCIsIFwidG9rZW5Qcm9wZXJ0eVwiLCBcInRva2VuUmFuZ2VcIiwgXCJ0b2tlblJhbmtGZWF0dXJlXCIsIFwidG9rZW5SYW5rRmVhdHVyZXNcIiwgXCJ0b2tlblJlcG9cIiwgXCJ0b2tlblNlYXJjaFR5cGVcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkXSksXG5cbiAgICAvKipcbiAgICAgICAqIFRoZSBzaWRlIG9mIHRoZSBiYWRnZSB0aGUgaWNvbiBzaG91bGQgc2l0XG4gICAgICAgKi9cbiAgICBpY29uU2lkZTogUHJvcFR5cGVzLm9uZU9mKFtcImxlZnRcIiwgXCJyaWdodFwiXSksXG5cbiAgICAvKipcbiAgICAgICAqIEFjY2VwdHMgZWl0aGVyIG91ciBwYWxldHRlIGNvbG9ycyAocHJpbWFyeSwgc3VjY2VzcyAuLmV0Yykgb3IgYSBoZXggdmFsdWUgYCNGRkZGRkZgLCBgIzAwMGAuXG4gICAgICAgKi9cbiAgICBjb2xvcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWRdKSxcblxuICAgIC8qKlxuICAgICAgICogV2lsbCBvdmVycmlkZSBhbnkgY29sb3IgcGFzc2VkIHRocm91Z2ggdGhlIGBjb2xvcmAgcHJvcC5cbiAgICAgICAqL1xuICAgIGlzRGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gICAgLyoqXG4gICAgICAgKiBQcm9wcyBwYXNzZWQgdG8gdGhlIGNsb3NlIGJ1dHRvbi5cbiAgICAgICAqL1xuICAgIGNsb3NlQnV0dG9uUHJvcHM6IFByb3BUeXBlcy5hbnksXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAgIC8qKlxuICAgICAgICogV2lsbCBhcHBseSBhbiBvbmNsaWNrIHRvIGljb24gd2l0aGluIHRoZSBiYWRnZVxuICAgICAgICovXG4gICAgaWNvbk9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuXG4gICAgLyoqXG4gICAgICAgKiBBcmlhIGxhYmVsIGFwcGxpZWQgdG8gdGhlIGljb25PbkNsaWNrIGJ1dHRvblxuICAgICAgICovXG4gICAgaWNvbk9uQ2xpY2tBcmlhTGFiZWw6IFByb3BUeXBlcy5hbnksXG5cbiAgICAvKipcbiAgICAgICAqIFdpbGwgYXBwbHkgYW4gb25jbGljayB0byB0aGUgYmFkZ2UgaXRzZWxmXG4gICAgICAgKi9cbiAgICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcblxuICAgIC8qKlxuICAgICAgICogQXJpYSBsYWJlbCBhcHBsaWVkIHRvIHRoZSBvbkNsaWNrIGJ1dHRvblxuICAgICAgICovXG4gICAgb25DbGlja0FyaWFMYWJlbDogUHJvcFR5cGVzLmFueSxcbiAgICBocmVmOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHRhcmdldDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICByZWw6IFByb3BUeXBlcy5zdHJpbmdcbiAgfSkuaXNSZXF1aXJlZF0pLFxuXG4gIC8qKlxuICAgICAgICogUGFkZGluZyBmb3IgdGhlIGxpc3QgaXRlbXMuXG4gICAgICAgKi9cbiAgcGFkZGluZ1NpemU6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICAgKiBIb3cgdG8gaGFuZGxlIGxvbmcgdGV4dCB3aXRoaW4gdGhlIGl0ZW0uXG4gICAgICAgKiBXcmFwcGluZyBvbmx5IHdvcmtzIGlmIHZpcnR1YWxpemF0aW9uIGlzIG9mZi5cbiAgICAgICAqL1xuICB0ZXh0V3JhcDogUHJvcFR5cGVzLm9uZU9mKFtcInRydW5jYXRlXCIsIFwid3JhcFwiXSksXG5cbiAgLyoqXG4gICAgICAgKiBVc2UgdmlydHVhbGl6ZWQgcmVuZGVyaW5nIGZvciBsaXN0IGl0ZW1zIHdpdGggYHJlYWN0LXdpbmRvd2AuXG4gICAgICAgKiBTZXRzIGVhY2ggcm93J3MgaGVpZ2h0IHRvIHRoZSB2YWx1ZSBvZiBgcm93SGVpZ2h0YC5cbiAgICAgICAqL1xuICBpc1ZpcnR1YWxpemVkOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW3RydWVdKSwgUHJvcFR5cGVzLm9uZU9mKFtmYWxzZV0pLmlzUmVxdWlyZWRdKSxcblxuICAvKipcbiAgICAgICAqICBUaGUgaGVpZ2h0IG9mIGVhY2ggb3B0aW9uIGluIHBpeGVscy4gRGVmYXVsdHMgdG8gYDMyYC5cbiAgICAgICAqICBIYXMgbm8gZWZmZWN0IGlmIGBpc1ZpcnR1YWxpemVkPWZhbHNlYC5cbiAgICAgICAqL1xuICByb3dIZWlnaHQ6IFByb3BUeXBlcy5udW1iZXIsXG5cbiAgLyoqXG4gICAgICogQWxsIHBvc3NpYmxlIG9wdGlvbnNcbiAgICAgKi9cbiAgb3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAvKipcbiAgICAgICAqIE9wdGlvbmFsIGBib29sZWFuYC5cbiAgICAgICAqIFNldCB0byBgdHJ1ZWAgdG8gaW5kaWNhdGUgb2JqZWN0IGlzIGp1c3QgYSBncm91cGluZyBsYWJlbCwgbm90IGEgc2VsZWN0YWJsZSBpdGVtXG4gICAgICAgKi9cbiAgICBpc0dyb3VwTGFiZWw6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbdHJ1ZV0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5vbmVPZihbZmFsc2VdKV0pLFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgICAvKipcbiAgICAgICAqIFZpc2libGUgbGFiZWwgb2Ygb3B0aW9uLlxuICAgICAgICogTXVzdCBiZSB1bmlxdWUgYWNyb3NzIGl0ZW1zIGlmIGBrZXlgIGlzIG5vdCBzdXBwbGllZFxuICAgICAgICovXG4gICAgbGFiZWw6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgICAvKipcbiAgICAgICAqIE9wdGlvbmFsbHkgY2hhbmdlIHRoZSBzZWFyY2hhYmxlIHRlcm0gYnkgcGFzc2luZyBhIGRpZmZlcmVudCBzdHJpbmcgb3RoZXIgdGhhbiB0aGUgYGxhYmVsYC5cbiAgICAgICAqIEJlc3QgdXNlZCB3aGVuIGNyZWF0aW5nIGEgY3VzdG9tIGBvcHRpb25SZW5kZXJgIHRvIHNlcGFyYXRlIHRoZSBsYWJlbCBmcm9tIG1ldGFkYXRhIGJ1dCBhbGxvd2luZyB0byBzZWFyY2ggb24gYm90aFxuICAgICAgICovXG4gICAgc2VhcmNoYWJsZUxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gICAgLyoqXG4gICAgICAgKiBNdXN0IGJlIHVuaXF1ZSBhY3Jvc3MgaXRlbXMuXG4gICAgICAgKiBXaWxsIGJlIHVzZWQgdG8gbWF0Y2ggb3B0aW9ucyBpbnN0ZWFkIG9mIGBsYWJlbGBcbiAgICAgICAqL1xuICAgIGtleTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAgIC8qKlxuICAgICAgICogTGVhdmUgYHVuZGVmaW5lZGAgdG8gaW5kaWNhdGUgbm90IHNlbGVjdGVkLFxuICAgICAgICogJ29uJyB0byBpbmRpY2F0ZSBpbmNsdXNpb24gYW5kXG4gICAgICAgKiAnb2ZmJyB0byBpbmRpY2F0ZSBleGNsdXNpb25cbiAgICAgICAqL1xuICAgIGNoZWNrZWQ6IFByb3BUeXBlcy5vbmVPZihbXCJvblwiLCBcIm9mZlwiLCB1bmRlZmluZWRdKSxcbiAgICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgICAvKipcbiAgICAgICAqIE5vZGUgdG8gYWRkIGJldHdlZW4gdGhlIHNlbGVjdGlvbiBpY29uIGFuZCB0aGUgbGFiZWxcbiAgICAgICAqL1xuICAgIHByZXBlbmQ6IFByb3BUeXBlcy5ub2RlLFxuXG4gICAgLyoqXG4gICAgICAgKiBOb2RlIHRvIGFkZCB0byB0aGUgZmFyIHJpZ2h0IG9mIHRoZSBpdGVtXG4gICAgICAgKi9cbiAgICBhcHBlbmQ6IFByb3BUeXBlcy5ub2RlLFxuICAgIHJlZjogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgICAvKipcbiAgICAgICAqIE9wdGlvbiBkYXRhIHRvIHBhc3MgdGhyb3VnaCB0byB0aGUgYHJlbmRlck9wdGlvbnNgIGVsZW1lbnQuXG4gICAgICAgKiBCeXBhc3MgYEV1aVNlbGVjdGFibGVJdGVtYCBhbmQgYXZvaWQgRE9NIGF0dHJpYnV0ZSB3YXJuaW5ncy5cbiAgICAgICAqL1xuICAgIGRhdGE6IFByb3BUeXBlcy5zaGFwZSh7fSlcbiAgfSkuaXNSZXF1aXJlZCkuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICAgKiBGaWx0ZXJlZCBvcHRpb25zIGxpc3QgKGlmIGFwcGxpY2FibGUpXG4gICAgICovXG4gIHZpc2libGVPcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGlzR3JvdXBMYWJlbDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFt0cnVlXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm9uZU9mKFtmYWxzZV0pXSksXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBsYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBzZWFyY2hhYmxlTGFiZWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAga2V5OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNoZWNrZWQ6IFByb3BUeXBlcy5vbmVPZihbXCJvblwiLCBcIm9mZlwiLCB1bmRlZmluZWRdKSxcbiAgICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgcHJlcGVuZDogUHJvcFR5cGVzLm5vZGUsXG4gICAgYXBwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgICByZWY6IFByb3BUeXBlcy5mdW5jLFxuICAgIGRhdGE6IFByb3BUeXBlcy5zaGFwZSh7fSlcbiAgfSkuaXNSZXF1aXJlZCksXG5cbiAgLyoqXG4gICAgICogU2VhcmNoIHZhbHVlIHRvIGhpZ2hsaWdodCBvbiB0aGUgb3B0aW9uIHJlbmRlclxuICAgICAqL1xuICBzZWFyY2hWYWx1ZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGFycmF5IG9mIG9wdGlvbnMgd2l0aCBhbHRlcmVkIGNoZWNrZWQgc3RhdGVcbiAgICAgKi9cbiAgb25PcHRpb25DbGljazogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICAgKiBDdXN0b20gcmVuZGVyIGZvciB0aGUgbGFiZWwgcG9ydGlvbiBvZiB0aGUgb3B0aW9uO1xuICAgICAqIFRha2VzIChvcHRpb24sIHNlYXJjaFZhbHVlKSwgcmV0dXJucyBSZWFjdE5vZGVcbiAgICAgKi9cbiAgcmVuZGVyT3B0aW9uOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICAgKiBTZXRzIHRoZSBtYXggaGVpZ2h0IGluIHBpeGVscyBvciBwYXNzIGBmdWxsYCB0byBhbGxvd1xuICAgICAqIHRoZSB3aG9sZSBncm91cCB0byBmaWxsIHRoZSBoZWlnaHQgb2YgaXRzIGNvbnRhaW5lciBhbmRcbiAgICAgKiBhbGxvd3MgdGhlIGxpc3QgZ3JvdyBhcyB3ZWxsXG4gICAgICovXG4gIGhlaWdodDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2YoW1wiZnVsbFwiXSldKSxcblxuICAvKipcbiAgICAgKiBBbGxvdyBjeWNsaW5nIHRocm91Z2ggdGhlIG9uLCBvZmYgYW5kIHVuZGVmaW5lZCBzdGF0ZSBvZiBvcHRpb24uY2hlY2tlZFxuICAgICAqIGFuZCBub3QganVzdCBvbiBhbmQgdW5kZWZpbmVkXG4gICAgICovXG4gIGFsbG93RXhjbHVzaW9uczogUHJvcFR5cGVzLmJvb2wsXG4gIHNlYXJjaGFibGU6IFByb3BUeXBlcy5ib29sLFxuICBtYWtlT3B0aW9uSWQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGxpc3RJZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBzZXRBY3RpdmVPcHRpb25JbmRleDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZFxufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG52YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJkaXNhYmxlZFwiLCBcImNoZWNrZWRcIiwgXCJpc0ZvY3VzZWRcIiwgXCJzaG93SWNvbnNcIiwgXCJwcmVwZW5kXCIsIFwiYXBwZW5kXCIsIFwiYWxsb3dFeGNsdXNpb25zXCIsIFwib25Gb2N1c0JhZGdlXCIsIFwicGFkZGluZ1NpemVcIiwgXCJyb2xlXCIsIFwic2VhcmNoYWJsZVwiLCBcInRleHRXcmFwXCJdLFxuICAgIF9leGNsdWRlZDIgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBrZXlzT2YgfSBmcm9tICcuLi8uLi9jb21tb24nO1xuaW1wb3J0IHsgRXVpSTE4biB9IGZyb20gJy4uLy4uL2kxOG4nO1xuaW1wb3J0IHsgRXVpSWNvbiB9IGZyb20gJy4uLy4uL2ljb24nO1xuaW1wb3J0IHsgRXVpU2NyZWVuUmVhZGVyT25seSB9IGZyb20gJy4uLy4uL2FjY2Vzc2liaWxpdHknO1xuaW1wb3J0IHsgRXVpQmFkZ2UgfSBmcm9tICcuLi8uLi9iYWRnZSc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG5mdW5jdGlvbiByZXNvbHZlSWNvbkFuZENvbG9yKGNoZWNrZWQpIHtcbiAgaWYgKCFjaGVja2VkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGljb246ICdlbXB0eSdcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIGNoZWNrZWQgPT09ICdvbicgPyB7XG4gICAgaWNvbjogJ2NoZWNrJyxcbiAgICBjb2xvcjogJ3RleHQnXG4gIH0gOiB7XG4gICAgaWNvbjogJ2Nyb3NzJyxcbiAgICBjb2xvcjogJ3RleHQnXG4gIH07XG59XG5cbnZhciBwYWRkaW5nU2l6ZVRvQ2xhc3NOYW1lTWFwID0ge1xuICBub25lOiBudWxsLFxuICBzOiAnZXVpU2VsZWN0YWJsZUxpc3RJdGVtLS1wYWRkaW5nU21hbGwnXG59O1xuZXhwb3J0IHZhciBQQURESU5HX1NJWkVTID0ga2V5c09mKHBhZGRpbmdTaXplVG9DbGFzc05hbWVNYXApO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L3ByZWZlci1zdGF0ZWxlc3MtZnVuY3Rpb25cbmV4cG9ydCB2YXIgRXVpU2VsZWN0YWJsZUxpc3RJdGVtID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhFdWlTZWxlY3RhYmxlTGlzdEl0ZW0sIF9Db21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoRXVpU2VsZWN0YWJsZUxpc3RJdGVtKTtcblxuICBmdW5jdGlvbiBFdWlTZWxlY3RhYmxlTGlzdEl0ZW0ocHJvcHMpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpU2VsZWN0YWJsZUxpc3RJdGVtKTtcblxuICAgIHJldHVybiBfc3VwZXIuY2FsbCh0aGlzLCBwcm9wcyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoRXVpU2VsZWN0YWJsZUxpc3RJdGVtLCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzLmNoaWxkcmVuLFxuICAgICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzLmNsYXNzTmFtZSxcbiAgICAgICAgICBkaXNhYmxlZCA9IF90aGlzJHByb3BzLmRpc2FibGVkLFxuICAgICAgICAgIGNoZWNrZWQgPSBfdGhpcyRwcm9wcy5jaGVja2VkLFxuICAgICAgICAgIGlzRm9jdXNlZCA9IF90aGlzJHByb3BzLmlzRm9jdXNlZCxcbiAgICAgICAgICBzaG93SWNvbnMgPSBfdGhpcyRwcm9wcy5zaG93SWNvbnMsXG4gICAgICAgICAgcHJlcGVuZCA9IF90aGlzJHByb3BzLnByZXBlbmQsXG4gICAgICAgICAgYXBwZW5kID0gX3RoaXMkcHJvcHMuYXBwZW5kLFxuICAgICAgICAgIGFsbG93RXhjbHVzaW9ucyA9IF90aGlzJHByb3BzLmFsbG93RXhjbHVzaW9ucyxcbiAgICAgICAgICBvbkZvY3VzQmFkZ2UgPSBfdGhpcyRwcm9wcy5vbkZvY3VzQmFkZ2UsXG4gICAgICAgICAgX3RoaXMkcHJvcHMkcGFkZGluZ1NpID0gX3RoaXMkcHJvcHMucGFkZGluZ1NpemUsXG4gICAgICAgICAgcGFkZGluZ1NpemUgPSBfdGhpcyRwcm9wcyRwYWRkaW5nU2kgPT09IHZvaWQgMCA/ICdzJyA6IF90aGlzJHByb3BzJHBhZGRpbmdTaSxcbiAgICAgICAgICBfdGhpcyRwcm9wcyRyb2xlID0gX3RoaXMkcHJvcHMucm9sZSxcbiAgICAgICAgICByb2xlID0gX3RoaXMkcHJvcHMkcm9sZSA9PT0gdm9pZCAwID8gJ29wdGlvbicgOiBfdGhpcyRwcm9wcyRyb2xlLFxuICAgICAgICAgIHNlYXJjaGFibGUgPSBfdGhpcyRwcm9wcy5zZWFyY2hhYmxlLFxuICAgICAgICAgIHRleHRXcmFwID0gX3RoaXMkcHJvcHMudGV4dFdyYXAsXG4gICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wcywgX2V4Y2x1ZGVkKTtcblxuICAgICAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlTZWxlY3RhYmxlTGlzdEl0ZW0nLCB7XG4gICAgICAgICdldWlTZWxlY3RhYmxlTGlzdEl0ZW0taXNGb2N1c2VkJzogaXNGb2N1c2VkXG4gICAgICB9LCBwYWRkaW5nU2l6ZVRvQ2xhc3NOYW1lTWFwW3BhZGRpbmdTaXplXSwgY2xhc3NOYW1lKTtcbiAgICAgIHZhciB0ZXh0Q2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVNlbGVjdGFibGVMaXN0SXRlbV9fdGV4dCcsIF9kZWZpbmVQcm9wZXJ0eSh7fSwgXCJldWlTZWxlY3RhYmxlTGlzdEl0ZW1fX3RleHQtLVwiLmNvbmNhdCh0ZXh0V3JhcCksIHRleHRXcmFwKSk7XG4gICAgICB2YXIgb3B0aW9uSWNvbjtcblxuICAgICAgaWYgKHNob3dJY29ucykge1xuICAgICAgICB2YXIgX3Jlc29sdmVJY29uQW5kQ29sb3IgPSByZXNvbHZlSWNvbkFuZENvbG9yKGNoZWNrZWQpLFxuICAgICAgICAgICAgaWNvbiA9IF9yZXNvbHZlSWNvbkFuZENvbG9yLmljb24sXG4gICAgICAgICAgICBjb2xvciA9IF9yZXNvbHZlSWNvbkFuZENvbG9yLmNvbG9yO1xuXG4gICAgICAgIG9wdGlvbkljb24gPSBfX19FbW90aW9uSlNYKEV1aUljb24sIHtcbiAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpU2VsZWN0YWJsZUxpc3RJdGVtX19pY29uXCIsXG4gICAgICAgICAgY29sb3I6IGNvbG9yLFxuICAgICAgICAgIHR5cGU6IGljb25cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBzdGF0ZTtcbiAgICAgIHZhciBpbnN0cnVjdGlvbjtcblxuICAgICAgaWYgKGFsbG93RXhjbHVzaW9ucyAmJiBjaGVja2VkID09PSAnb24nKSB7XG4gICAgICAgIHN0YXRlID0gX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgdG9rZW46IFwiZXVpU2VsZWN0YWJsZUxpc3RJdGVtLmluY2x1ZGVkT3B0aW9uXCIsXG4gICAgICAgICAgZGVmYXVsdDogXCJTZWxlY3RlZCBvcHRpb24uXCJcbiAgICAgICAgfSk7XG4gICAgICAgIGluc3RydWN0aW9uID0gX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgdG9rZW46IFwiZXVpU2VsZWN0YWJsZUxpc3RJdGVtLmluY2x1ZGVkT3B0aW9uSW5zdHJ1Y3Rpb25zXCIsXG4gICAgICAgICAgZGVmYXVsdDogXCJUbyBleGNsdWRlIHRoaXMgb3B0aW9uLCBwcmVzcyBlbnRlci5cIlxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoYWxsb3dFeGNsdXNpb25zICYmIGNoZWNrZWQgPT09ICdvZmYnKSB7XG4gICAgICAgIHN0YXRlID0gX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgdG9rZW46IFwiZXVpU2VsZWN0YWJsZUxpc3RJdGVtLmV4Y2x1ZGVkT3B0aW9uXCIsXG4gICAgICAgICAgZGVmYXVsdDogXCJFeGNsdWRlZCBvcHRpb24uXCJcbiAgICAgICAgfSk7XG4gICAgICAgIGluc3RydWN0aW9uID0gX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgdG9rZW46IFwiZXVpU2VsZWN0YWJsZUxpc3RJdGVtLmV4Y2x1ZGVkT3B0aW9uSW5zdHJ1Y3Rpb25zXCIsXG4gICAgICAgICAgZGVmYXVsdDogXCJUbyB1bmNoZWNrIHRoaXMgb3B0aW9uLCBwcmVzcyBlbnRlci5cIlxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoYWxsb3dFeGNsdXNpb25zICYmICFjaGVja2VkKSB7XG4gICAgICAgIGluc3RydWN0aW9uID0gX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgdG9rZW46IFwiZXVpU2VsZWN0YWJsZUxpc3RJdGVtLnVuY2tlY2tlZE9wdGlvbkluc3RydWN0aW9uc1wiLFxuICAgICAgICAgIGRlZmF1bHQ6IFwiVG8gc2VsZWN0IHRoaXMgb3B0aW9uLCBwcmVzcyBlbnRlci5cIlxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdmFyIGlzQ2hlY2tlZCA9ICFkaXNhYmxlZCAmJiB0eXBlb2YgY2hlY2tlZCA9PT0gJ3N0cmluZyc7XG5cbiAgICAgIGlmICghYWxsb3dFeGNsdXNpb25zICYmIGlzQ2hlY2tlZCkge1xuICAgICAgICBzdGF0ZSA9IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgIHRva2VuOiBcImV1aVNlbGVjdGFibGVMaXN0SXRlbS5jaGVja2VkT3B0aW9uXCIsXG4gICAgICAgICAgZGVmYXVsdDogXCJDaGVja2VkIG9wdGlvbi5cIlxuICAgICAgICB9KTtcbiAgICAgICAgaW5zdHJ1Y3Rpb24gPSBzZWFyY2hhYmxlID8gX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgdG9rZW46IFwiZXVpU2VsZWN0YWJsZUxpc3RJdGVtLmNoZWNrZWRPcHRpb25JbnN0cnVjdGlvbnNcIixcbiAgICAgICAgICBkZWZhdWx0OiBcIlRvIHVuY2hlY2sgdGhpcyBvcHRpb24sIHByZXNzIGVudGVyLlwiXG4gICAgICAgIH0pIDogdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICB2YXIgcHJlcGVuZE5vZGU7XG5cbiAgICAgIGlmIChwcmVwZW5kKSB7XG4gICAgICAgIHByZXBlbmROb2RlID0gX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlTZWxlY3RhYmxlTGlzdEl0ZW1fX3ByZXBlbmRcIlxuICAgICAgICB9LCBwcmVwZW5kKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGFwcGVuZE5vZGU7XG5cbiAgICAgIGlmIChhcHBlbmQgfHwgISFvbkZvY3VzQmFkZ2UpIHtcbiAgICAgICAgdmFyIG9uRm9jdXNCYWRnZU5vZGU7XG4gICAgICAgIHZhciBkZWZhdWx0T25Gb2N1c0JhZGdlUHJvcHMgPSB7XG4gICAgICAgICAgJ2FyaWEtaGlkZGVuJzogdHJ1ZSxcbiAgICAgICAgICBpY29uVHlwZTogJ3JldHVybktleScsXG4gICAgICAgICAgaWNvblNpZGU6ICdsZWZ0JyxcbiAgICAgICAgICBjb2xvcjogJ2hvbGxvdydcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAob25Gb2N1c0JhZGdlID09PSB0cnVlKSB7XG4gICAgICAgICAgb25Gb2N1c0JhZGdlTm9kZSA9IF9fX0Vtb3Rpb25KU1goRXVpQmFkZ2UsIF9leHRlbmRzKHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlTZWxlY3RhYmxlTGlzdEl0ZW1fX29uRm9jdXNCYWRnZVwiXG4gICAgICAgICAgfSwgZGVmYXVsdE9uRm9jdXNCYWRnZVByb3BzKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoISFvbkZvY3VzQmFkZ2UgJiYgb25Gb2N1c0JhZGdlICE9PSBmYWxzZSkge1xuICAgICAgICAgIHZhciBfY2hpbGRyZW4gPSBvbkZvY3VzQmFkZ2UuY2hpbGRyZW4sXG4gICAgICAgICAgICAgIF9jbGFzc05hbWUgPSBvbkZvY3VzQmFkZ2UuY2xhc3NOYW1lLFxuICAgICAgICAgICAgICByZXN0QmFkZ2VQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhvbkZvY3VzQmFkZ2UsIF9leGNsdWRlZDIpO1xuXG4gICAgICAgICAgb25Gb2N1c0JhZGdlTm9kZSA9IF9fX0Vtb3Rpb25KU1goRXVpQmFkZ2UsIF9leHRlbmRzKHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lcygnZXVpU2VsZWN0YWJsZUxpc3RJdGVtX19vbkZvY3VzQmFkZ2UnLCBfY2xhc3NOYW1lKVxuICAgICAgICAgIH0sIGRlZmF1bHRPbkZvY3VzQmFkZ2VQcm9wcywgcmVzdEJhZGdlUHJvcHMpLCBfY2hpbGRyZW4pO1xuICAgICAgICB9IC8vIE9ubHkgZGlzcGxheSB0aGUgYXBwZW5kIHdyYXBwZXIgaWYgYXBwZW5kIGV4aXN0cyBvciBpc0ZvY3VzZWRcblxuXG4gICAgICAgIGlmIChhcHBlbmQgfHwgaXNGb2N1c2VkICYmICFkaXNhYmxlZCkge1xuICAgICAgICAgIGFwcGVuZE5vZGUgPSBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpU2VsZWN0YWJsZUxpc3RJdGVtX19hcHBlbmRcIlxuICAgICAgICAgIH0sIGFwcGVuZCwgXCIgXCIsIGlzRm9jdXNlZCAmJiAhZGlzYWJsZWQgPyBvbkZvY3VzQmFkZ2VOb2RlIDogbnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGluc3RydWN0aW9ucyA9IChpbnN0cnVjdGlvbiB8fCBzdGF0ZSkgJiYgX19fRW1vdGlvbkpTWChFdWlTY3JlZW5SZWFkZXJPbmx5LCBudWxsLCBfX19FbW90aW9uSlNYKFwiZGl2XCIsIG51bGwsIHN0YXRlIHx8IGluc3RydWN0aW9uID8gJyAtICcgOiBudWxsLCBzdGF0ZSwgc3RhdGUgJiYgaW5zdHJ1Y3Rpb24gPyAnICcgOiBudWxsLCBpbnN0cnVjdGlvbikpO1xuXG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImxpXCIsIF9leHRlbmRzKHtcbiAgICAgICAgcm9sZTogcm9sZSxcbiAgICAgICAgXCJkYXRhLXRlc3Qtc2VsZWN0ZWRcIjogaXNDaGVja2VkIC8vIFdoZXRoZXIgdGhlIGl0ZW0gaXMgY2hlY2tlZC9zZWxlY3RlZFxuICAgICAgICAsXG4gICAgICAgIFwiYXJpYS1jaGVja2VkXCI6IHJvbGUgPT09ICdvcHRpb24nID8gaXNDaGVja2VkIDogdW5kZWZpbmVkIC8vIFdoZXRoZXIgdGhlIGl0ZW0gaXMgXCJjaGVja2VkXCJcbiAgICAgICAgLFxuICAgICAgICBcImFyaWEtc2VsZWN0ZWRcIjogIWRpc2FibGVkICYmIGlzRm9jdXNlZCAvLyBXaGV0aGVyIHRoZSBpdGVtIGhhcyBrZXlib2FyZCBmb2N1cyBwZXIgVzMgc3BlY1xuICAgICAgICAsXG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgXCJhcmlhLWRpc2FibGVkXCI6IGRpc2FibGVkXG4gICAgICB9LCByZXN0KSwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgICAgICBjbGFzc05hbWU6IFwiZXVpU2VsZWN0YWJsZUxpc3RJdGVtX19jb250ZW50XCJcbiAgICAgIH0sIG9wdGlvbkljb24sIHByZXBlbmROb2RlLCBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogdGV4dENsYXNzZXNcbiAgICAgIH0sIGNoaWxkcmVuLCBpbnN0cnVjdGlvbnMpLCBhcHBlbmROb2RlKSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEV1aVNlbGVjdGFibGVMaXN0SXRlbTtcbn0oQ29tcG9uZW50KTtcblxuX2RlZmluZVByb3BlcnR5KEV1aVNlbGVjdGFibGVMaXN0SXRlbSwgXCJkZWZhdWx0UHJvcHNcIiwge1xuICBzaG93SWNvbnM6IHRydWUsXG4gIG9uRm9jdXNCYWRnZTogdHJ1ZSxcbiAgdGV4dFdyYXA6ICd0cnVuY2F0ZSdcbn0pO1xuXG5FdWlTZWxlY3RhYmxlTGlzdEl0ZW0ucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICAgICAqIEFwcGxpZXMgYW4gaWNvbiBhbmQgdmlzdWFsIHN0eWxpbmcgdG8gYWN0aXZhdGVkIGl0ZW1zXG4gICAgICAgKi9cbiAgY2hlY2tlZDogUHJvcFR5cGVzLm9uZU9mKFtcIm9uXCIsIFwib2ZmXCIsIHVuZGVmaW5lZF0pLFxuXG4gIC8qKlxuICAgICAgICogU2hvd3MgaWNvbnMgYmFzZWQgb24gYGNoZWNrZWRgIHR5cGVcbiAgICAgICAqL1xuICBzaG93SWNvbnM6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAgICogSGlnaGxpZ2h0cyB0aGUgaXRlbSBmb3IgcHNldWRvIGZvY3VzXG4gICAgICAgKi9cbiAgaXNGb2N1c2VkOiBQcm9wVHlwZXMuYm9vbCxcbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICBwcmVwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgYXBwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgYWxsb3dFeGNsdXNpb25zOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgICAqIFdoZW4gZW5hYmxlZCBieSBzZXR0aW5nIHRvIGVpdGhlciBgdHJ1ZWAgb3IgcGFzc2luZyBjdXN0b20gYSBjdXN0b20gYmFkZ2UsXG4gICAgICAgKiBzaG93cyBhIGhvbGxvdyBiYWRnZSBhcyBhbiBhcHBlbmQgKGZhciByaWdodCkgd2hlbiB0aGUgaXRlbSBpcyBmb2N1c2VkLlxuICAgICAgICogVGhlIGRlZmF1bHQgY29udGVudCB3aGVuIGB0cnVlYCBpcyBgXHUyMUE5IHRvIHNlbGVjdC9kZXNlbGVjdC9pbmNsdWRlL2V4Y2x1ZGVgXG4gICAgICAgKi9cbiAgb25Gb2N1c0JhZGdlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIC8qKlxuICAgICAgICogQWNjZXB0cyBhbnkgc3RyaW5nIGZyb20gb3VyIGljb24gbGlicmFyeVxuICAgICAgICovXG4gICAgaWNvblR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhY2Nlc3NpYmlsaXR5XCIsIFwiYWRkRGF0YUFwcFwiLCBcImFkdmFuY2VkU2V0dGluZ3NBcHBcIiwgXCJhZ2VudEFwcFwiLCBcImFnZ3JlZ2F0ZVwiLCBcImFsZXJ0XCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbG9ja1wiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQUNpcmNsZUZpbGxlZFwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRvY3VtZW50XCIsIFwiZG9jdW1lbnRFZGl0XCIsIFwiZG9jdW1lbnRhdGlvblwiLCBcImRvY3VtZW50c1wiLCBcImRvdFwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJleGl0XCIsIFwiZXhwYW5kXCIsIFwiZXhwYW5kTWluaVwiLCBcImV4cG9ydEFjdGlvblwiLCBcImV5ZVwiLCBcImV5ZUNsb3NlZFwiLCBcImZhY2VIYXBweVwiLCBcImZhY2VOZXV0cmFsXCIsIFwiZmFjZVNhZFwiLCBcImZpbGViZWF0QXBwXCIsIFwiZmlsdGVyXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhDbG9zZVwiLCBcImluZGV4RWRpdFwiLCBcImluZGV4Rmx1c2hcIiwgXCJpbmRleE1hbmFnZW1lbnRBcHBcIiwgXCJpbmRleE1hcHBpbmdcIiwgXCJpbmRleE9wZW5cIiwgXCJpbmRleFBhdHRlcm5BcHBcIiwgXCJpbmRleFJvbGx1cEFwcFwiLCBcImluZGV4UnVudGltZVwiLCBcImluZGV4U2V0dGluZ3NcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibmFtZXNwYWNlXCIsIFwibmVzdGVkXCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZWxpbmVBcHBcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzQXBwXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpb25BcHBcIiwgXCJ0aW1lUmVmcmVzaFwiLCBcInRpbWVzbGlkZXJcIiwgXCJ0cmFpbmluZ1wiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZF0pLFxuXG4gICAgLyoqXG4gICAgICAgKiBUaGUgc2lkZSBvZiB0aGUgYmFkZ2UgdGhlIGljb24gc2hvdWxkIHNpdFxuICAgICAgICovXG4gICAgaWNvblNpZGU6IFByb3BUeXBlcy5vbmVPZihbXCJsZWZ0XCIsIFwicmlnaHRcIl0pLFxuXG4gICAgLyoqXG4gICAgICAgKiBBY2NlcHRzIGVpdGhlciBvdXIgcGFsZXR0ZSBjb2xvcnMgKHByaW1hcnksIHN1Y2Nlc3MgLi5ldGMpIG9yIGEgaGV4IHZhbHVlIGAjRkZGRkZGYCwgYCMwMDBgLlxuICAgICAgICovXG4gICAgY29sb3I6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkXSksXG5cbiAgICAvKipcbiAgICAgICAqIFdpbGwgb3ZlcnJpZGUgYW55IGNvbG9yIHBhc3NlZCB0aHJvdWdoIHRoZSBgY29sb3JgIHByb3AuXG4gICAgICAgKi9cbiAgICBpc0Rpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAgIC8qKlxuICAgICAgICogUHJvcHMgcGFzc2VkIHRvIHRoZSBjbG9zZSBidXR0b24uXG4gICAgICAgKi9cbiAgICBjbG9zZUJ1dHRvblByb3BzOiBQcm9wVHlwZXMuYW55LFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgICAvKipcbiAgICAgICAqIFdpbGwgYXBwbHkgYW4gb25jbGljayB0byBpY29uIHdpdGhpbiB0aGUgYmFkZ2VcbiAgICAgICAqL1xuICAgIGljb25PbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcblxuICAgIC8qKlxuICAgICAgICogQXJpYSBsYWJlbCBhcHBsaWVkIHRvIHRoZSBpY29uT25DbGljayBidXR0b25cbiAgICAgICAqL1xuICAgIGljb25PbkNsaWNrQXJpYUxhYmVsOiBQcm9wVHlwZXMuYW55LFxuXG4gICAgLyoqXG4gICAgICAgKiBXaWxsIGFwcGx5IGFuIG9uY2xpY2sgdG8gdGhlIGJhZGdlIGl0c2VsZlxuICAgICAgICovXG4gICAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgICAvKipcbiAgICAgICAqIEFyaWEgbGFiZWwgYXBwbGllZCB0byB0aGUgb25DbGljayBidXR0b25cbiAgICAgICAqL1xuICAgIG9uQ2xpY2tBcmlhTGFiZWw6IFByb3BUeXBlcy5hbnksXG4gICAgaHJlZjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICB0YXJnZXQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgcmVsOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLmlzUmVxdWlyZWRdKSxcblxuICAvKipcbiAgICAgICAqIFBhZGRpbmcgZm9yIHRoZSBsaXN0IGl0ZW1zLlxuICAgICAgICovXG4gIHBhZGRpbmdTaXplOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAgICogV2hldGhlciB0aGUgYEV1aVNlbGVjdGFibGVgIGluc3RhbmNlIGlzIHNlYXJjaGFibGUuXG4gICAgICAgKiBXaGVuIHRydWUsIHRoZSBTcGFjZSBrZXkgd2lsbCBub3QgdG9nZ2xlIHNlbGVjdGlvbiwgYXMgaXQgd2lsbCB0eXBlIGludG8gdGhlIHNlYXJjaCBib3ggaW5zdGVhZC4gU2NyZWVuIHJlYWRlciBpbnN0cnVjdGlvbnMgd2lsbCBiZSBhZGRlZCBpbnN0cnVjdGluZyB1c2VycyB0byB1c2UgdGhlIEVudGVyIGtleSB0byBzZWxlY3QgaXRlbXMuXG4gICAgICAgKiBXaGVuIGZhbHNlLCB0aGUgU3BhY2Uga2V5IHdpbGwgdG9nZ2xlIGl0ZW0gc2VsZWN0aW9uLiBObyBleHRyYSBzY3JlZW4gcmVhZGVyIGluc3RydWN0aW9ucyB3aWxsIGJlIGFkZGVkLCBhcyBTcGFjZSB0byB0b2dnbGUgaXMgYSBnZW5lcmFsbHkgc3RhbmRhcmQgZm9yIG1vc3Qgc2VsZWN0L2NoZWNrZWQgZWxlbWVudHMuXG4gICAgICAgKi9cbiAgc2VhcmNoYWJsZTogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICAgKiBBdHRyaWJ1dGUgYXBwbGllZCB0aGUgb3B0aW9uIGA8bGk+YC5cbiAgICAgICAqIElmIGNvbmZpZ3VyZWQgdG8gc29tZXRoaW5nIGJlc2lkZXMgdGhlIGRlZmF1bHQgdmFsdWUgb2YgYG9wdGlvbmAsXG4gICAgICAgKiBvdGhlciBBUklBIGF0dHJpYnV0ZXMgc3VjaCBhcyBgYXJpYS1jaGVja2VkYCB3aWxsIG5vdCBiZSBhdXRvbWF0aWNhbGx5IGNvbmZpZ3VyZWQuXG4gICAgICAgKi9cbiAgcm9sZTogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgICAqIEhvdyB0byBoYW5kbGUgbG9uZyB0ZXh0IHdpdGhpbiB0aGUgaXRlbS5cbiAgICAgICAqIFdyYXBwaW5nIG9ubHkgd29ya3MgaWYgdmlydHVhbGl6YXRpb24gaXMgb2ZmLlxuICAgICAgICovXG4gIHRleHRXcmFwOiBQcm9wVHlwZXMub25lT2YoW1widHJ1bmNhdGVcIiwgXCJ3cmFwXCJdKVxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcImxhYmVsXCIsIFwidHlwZVwiLCBcImxhYmVsV2lkdGhcIiwgXCJkZXNjcmlwdGlvblwiLCBcInRydW5jYXRlXCIsIFwib25DbGlja1wiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBrZXlzT2YgfSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vaWNvbic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIGNvbG9yVG9DbGFzc05hbWVNYXAgPSB7XG4gIHRpbnQwOiAnZXVpU3VnZ2VzdEl0ZW1fX3R5cGUtLXRpbnQwJyxcbiAgdGludDE6ICdldWlTdWdnZXN0SXRlbV9fdHlwZS0tdGludDEnLFxuICB0aW50MjogJ2V1aVN1Z2dlc3RJdGVtX190eXBlLS10aW50MicsXG4gIHRpbnQzOiAnZXVpU3VnZ2VzdEl0ZW1fX3R5cGUtLXRpbnQzJyxcbiAgdGludDQ6ICdldWlTdWdnZXN0SXRlbV9fdHlwZS0tdGludDQnLFxuICB0aW50NTogJ2V1aVN1Z2dlc3RJdGVtX190eXBlLS10aW50NScsXG4gIHRpbnQ2OiAnZXVpU3VnZ2VzdEl0ZW1fX3R5cGUtLXRpbnQ2JyxcbiAgdGludDc6ICdldWlTdWdnZXN0SXRlbV9fdHlwZS0tdGludDcnLFxuICB0aW50ODogJ2V1aVN1Z2dlc3RJdGVtX190eXBlLS10aW50OCcsXG4gIHRpbnQ5OiAnZXVpU3VnZ2VzdEl0ZW1fX3R5cGUtLXRpbnQ5JyxcbiAgdGludDEwOiAnZXVpU3VnZ2VzdEl0ZW1fX3R5cGUtLXRpbnQxMCdcbn07XG5leHBvcnQgdmFyIENPTE9SUyA9IGtleXNPZihjb2xvclRvQ2xhc3NOYW1lTWFwKTtcbmV4cG9ydCB2YXIgRXVpU3VnZ2VzdEl0ZW0gPSBmdW5jdGlvbiBFdWlTdWdnZXN0SXRlbShfcmVmKSB7XG4gIHZhciBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIGxhYmVsID0gX3JlZi5sYWJlbCxcbiAgICAgIHR5cGUgPSBfcmVmLnR5cGUsXG4gICAgICBfcmVmJGxhYmVsV2lkdGggPSBfcmVmLmxhYmVsV2lkdGgsXG4gICAgICBsYWJlbFdpZHRoID0gX3JlZiRsYWJlbFdpZHRoID09PSB2b2lkIDAgPyAnNTAnIDogX3JlZiRsYWJlbFdpZHRoLFxuICAgICAgZGVzY3JpcHRpb24gPSBfcmVmLmRlc2NyaXB0aW9uLFxuICAgICAgX3JlZiR0cnVuY2F0ZSA9IF9yZWYudHJ1bmNhdGUsXG4gICAgICB0cnVuY2F0ZSA9IF9yZWYkdHJ1bmNhdGUgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJHRydW5jYXRlLFxuICAgICAgb25DbGljayA9IF9yZWYub25DbGljayxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVN1Z2dlc3RJdGVtJywge1xuICAgICdldWlTdWdnZXN0SXRlbS0tdHJ1bmNhdGUnOiB0cnVuY2F0ZVxuICB9LCBjbGFzc05hbWUpO1xuICB2YXIgbGFiZWxDbGFzc05hbWVzID0gY2xhc3NOYW1lcygnZXVpU3VnZ2VzdEl0ZW1fX2xhYmVsJywgXCJldWlTdWdnZXN0SXRlbV9fbGFiZWwtLXdpZHRoXCIuY29uY2F0KGxhYmVsV2lkdGgpKTtcbiAgdmFyIGRlc2NyaXB0aW9uQ2xhc3NOYW1lcyA9IGNsYXNzTmFtZXMoJ2V1aVN1Z2dlc3RJdGVtX19kZXNjcmlwdGlvbicsIHtcbiAgICAnZXVpU3VnZ2VzdEl0ZW1fX2Rlc2NyaXB0aW9uLS13cmFwJzogIXRydW5jYXRlXG4gIH0pO1xuICB2YXIgdHlwZUNvbG9yQ2xhc3MgPSAnJztcblxuICBpZiAodHlwZSAmJiB0eXBlLmNvbG9yKSB7XG4gICAgaWYgKENPTE9SUy5pbmRleE9mKHR5cGUuY29sb3IpID4gLTEpIHtcbiAgICAgIHR5cGVDb2xvckNsYXNzID0gY29sb3JUb0NsYXNzTmFtZU1hcFt0eXBlLmNvbG9yXTtcbiAgICB9XG4gIH1cblxuICB2YXIgaW5uZXJDb250ZW50ID0gX19fRW1vdGlvbkpTWChSZWFjdC5GcmFnbWVudCwgbnVsbCwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlTdWdnZXN0SXRlbV9fdHlwZSBcIi5jb25jYXQodHlwZUNvbG9yQ2xhc3MpXG4gIH0sIF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgIHR5cGU6IHR5cGUuaWNvblR5cGUsXG4gICAgY29sb3I6IFwiaW5oZXJpdFwiIC8vIGZvcmNlcyB0aGUgaWNvbiB0byBpbmhlcml0IGl0cyBwYXJlbnQgY29sb3JcblxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICBjbGFzc05hbWU6IGxhYmVsQ2xhc3NOYW1lcyxcbiAgICB0aXRsZTogbGFiZWxcbiAgfSwgbGFiZWwpLCBkZXNjcmlwdGlvbiAmJiBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgY2xhc3NOYW1lOiBkZXNjcmlwdGlvbkNsYXNzTmFtZXMsXG4gICAgdGl0bGU6IGRlc2NyaXB0aW9uXG4gIH0sIGRlc2NyaXB0aW9uKSk7XG5cbiAgaWYgKG9uQ2xpY2spIHtcbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImJ1dHRvblwiLCBfZXh0ZW5kcyh7XG4gICAgICBvbkNsaWNrOiBvbkNsaWNrLFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gICAgfSwgcmVzdCksIGlubmVyQ29udGVudCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIF9leHRlbmRzKHtcbiAgICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICAgIH0sIHJlc3QpLCBpbm5lckNvbnRlbnQpO1xuICB9XG59O1xuRXVpU3VnZ2VzdEl0ZW0ucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogVGFrZXMgYGljb25UeXBlYCBmb3IgRXVpSWNvbiBhbmQgJ2NvbG9yJy4gJ2NvbG9yJyBjYW4gYmUgdGludDEgdGhyb3VnaCB0aW50OS5cbiAgICAgKi9cbiAgdHlwZTogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBpY29uVHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYWxlcnRcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhc3Rlcmlza1wiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJib2x0XCIsIFwiYm94ZXNIb3Jpem9udGFsXCIsIFwiYm94ZXNWZXJ0aWNhbFwiLCBcImJyYW5jaFwiLCBcImJyYW5jaFVzZXJcIiwgXCJicm9vbVwiLCBcImJydXNoXCIsIFwiYnVnXCIsIFwiYnVsbHNleWVcIiwgXCJjYWxlbmRhclwiLCBcImNhbnZhc0FwcFwiLCBcImNhc2VzQXBwXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsb2NrXCIsIFwiY2xvdWREcml6emxlXCIsIFwiY2xvdWRTdG9ybXlcIiwgXCJjbG91ZFN1bm55XCIsIFwiY2x1c3RlclwiLCBcImNvZGVBcHBcIiwgXCJjb2xvclwiLCBcImNvbXB1dGVcIiwgXCJjb25zb2xlXCIsIFwiY29uc29sZUFwcFwiLCBcImNvbnRhaW5lclwiLCBcImNvbnRpbnVpdHlBYm92ZVwiLCBcImNvbnRpbnVpdHlBYm92ZUJlbG93XCIsIFwiY29udGludWl0eUJlbG93XCIsIFwiY29udGludWl0eVdpdGhpblwiLCBcImNvbnRyb2xzSG9yaXpvbnRhbFwiLCBcImNvbnRyb2xzVmVydGljYWxcIiwgXCJjb3B5XCIsIFwiY29weUNsaXBib2FyZFwiLCBcImNyZWF0ZUFkdmFuY2VkSm9iXCIsIFwiY3JlYXRlTXVsdGlNZXRyaWNKb2JcIiwgXCJjcmVhdGVQb3B1bGF0aW9uSm9iXCIsIFwiY3JlYXRlU2luZ2xlTWV0cmljSm9iXCIsIFwiY3Jvc3NcIiwgXCJjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcFwiLCBcImNyb3NzSW5BQ2lyY2xlRmlsbGVkXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpc2NvdmVyQXBwXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG91YmxlQXJyb3dMZWZ0XCIsIFwiZG91YmxlQXJyb3dSaWdodFwiLCBcImRvd25sb2FkXCIsIFwiZWRpdG9yQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JBbGlnbkxlZnRcIiwgXCJlZGl0b3JBbGlnblJpZ2h0XCIsIFwiZWRpdG9yQm9sZFwiLCBcImVkaXRvckNoZWNrbGlzdFwiLCBcImVkaXRvckNvZGVCbG9ja1wiLCBcImVkaXRvckNvbW1lbnRcIiwgXCJlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbFwiLCBcImVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbFwiLCBcImVkaXRvckhlYWRpbmdcIiwgXCJlZGl0b3JJdGFsaWNcIiwgXCJlZGl0b3JJdGVtQWxpZ25Cb3R0b21cIiwgXCJlZGl0b3JJdGVtQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JJdGVtQWxpZ25MZWZ0XCIsIFwiZWRpdG9ySXRlbUFsaWduTWlkZGxlXCIsIFwiZWRpdG9ySXRlbUFsaWduUmlnaHRcIiwgXCJlZGl0b3JJdGVtQWxpZ25Ub3BcIiwgXCJlZGl0b3JMaW5rXCIsIFwiZWRpdG9yT3JkZXJlZExpc3RcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnRcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BMZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BSaWdodFwiLCBcImVkaXRvclJlZG9cIiwgXCJlZGl0b3JTdHJpa2VcIiwgXCJlZGl0b3JUYWJsZVwiLCBcImVkaXRvclVuZGVybGluZVwiLCBcImVkaXRvclVuZG9cIiwgXCJlZGl0b3JVbm9yZGVyZWRMaXN0XCIsIFwiZW1haWxcIiwgXCJlbXB0eVwiLCBcImVtc0FwcFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibW9iaWxlXCIsIFwibW9uaXRvcmluZ0FwcFwiLCBcIm1vb25cIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFwZXJDbGlwXCIsIFwicGFydGlhbFwiLCBcInBhdXNlXCIsIFwicGF5bWVudFwiLCBcInBlbmNpbFwiLCBcInBlcmNlbnRcIiwgXCJwaW5cIiwgXCJwaW5GaWxsZWRcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBsYXlcIiwgXCJwbGF5RmlsbGVkXCIsIFwicGx1c1wiLCBcInBsdXNJbkNpcmNsZVwiLCBcInBsdXNJbkNpcmNsZUZpbGxlZFwiLCBcInBvcG91dFwiLCBcInB1c2hcIiwgXCJxdWVzdGlvbkluQ2lyY2xlXCIsIFwicXVvdGVcIiwgXCJyZWNlbnRseVZpZXdlZEFwcFwiLCBcInJlZnJlc2hcIiwgXCJyZWdyZXNzaW9uSm9iXCIsIFwicmVwb3J0ZXJcIiwgXCJyZXBvcnRpbmdBcHBcIiwgXCJyZXR1cm5LZXlcIiwgXCJzYXZlXCIsIFwic2F2ZWRPYmplY3RzQXBwXCIsIFwic2NhbGVcIiwgXCJzZWFyY2hcIiwgXCJzZWFyY2hQcm9maWxlckFwcFwiLCBcInNlY3VyaXR5QW5hbHl0aWNzQXBwXCIsIFwic2VjdXJpdHlBcHBcIiwgXCJzZWN1cml0eVNpZ25hbFwiLCBcInNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWRcIiwgXCJzZWN1cml0eVNpZ25hbFJlc29sdmVkXCIsIFwic2Vzc2lvblZpZXdlclwiLCBcInNoYXJkXCIsIFwic2hhcmVcIiwgXCJzbm93Zmxha2VcIiwgXCJzb3J0RG93blwiLCBcInNvcnRMZWZ0XCIsIFwic29ydFJpZ2h0XCIsIFwic29ydFVwXCIsIFwic29ydGFibGVcIiwgXCJzcGFjZXNBcHBcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EZW5zZVZlY3RvclwiLCBcInRva2VuRWxlbWVudFwiLCBcInRva2VuRW51bVwiLCBcInRva2VuRW51bU1lbWJlclwiLCBcInRva2VuRXZlbnRcIiwgXCJ0b2tlbkV4Y2VwdGlvblwiLCBcInRva2VuRmllbGRcIiwgXCJ0b2tlbkZpbGVcIiwgXCJ0b2tlbkZsYXR0ZW5lZFwiLCBcInRva2VuRnVuY3Rpb25cIiwgXCJ0b2tlbkdlb1wiLCBcInRva2VuSGlzdG9ncmFtXCIsIFwidG9rZW5JbnRlcmZhY2VcIiwgXCJ0b2tlbklQXCIsIFwidG9rZW5Kb2luXCIsIFwidG9rZW5LZXlcIiwgXCJ0b2tlbktleXdvcmRcIiwgXCJ0b2tlbk1ldGhvZFwiLCBcInRva2VuTWV0cmljQ291bnRlclwiLCBcInRva2VuTWV0cmljR2F1Z2VcIiwgXCJ0b2tlbk1vZHVsZVwiLCBcInRva2VuTmFtZXNwYWNlXCIsIFwidG9rZW5OZXN0ZWRcIiwgXCJ0b2tlbk51bGxcIiwgXCJ0b2tlbk51bWJlclwiLCBcInRva2VuT2JqZWN0XCIsIFwidG9rZW5PcGVyYXRvclwiLCBcInRva2VuUGFja2FnZVwiLCBcInRva2VuUGFyYW1ldGVyXCIsIFwidG9rZW5QZXJjb2xhdG9yXCIsIFwidG9rZW5Qcm9wZXJ0eVwiLCBcInRva2VuUmFuZ2VcIiwgXCJ0b2tlblJhbmtGZWF0dXJlXCIsIFwidG9rZW5SYW5rRmVhdHVyZXNcIiwgXCJ0b2tlblJlcG9cIiwgXCJ0b2tlblNlYXJjaFR5cGVcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCxcbiAgICBjb2xvcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2YoW1widGludDBcIiwgXCJ0aW50MVwiLCBcInRpbnQyXCIsIFwidGludDNcIiwgXCJ0aW50NFwiLCBcInRpbnQ1XCIsIFwidGludDZcIiwgXCJ0aW50N1wiLCBcInRpbnQ4XCIsIFwidGludDlcIiwgXCJ0aW50MTBcIl0pLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkXG4gIH0pLmlzUmVxdWlyZWQsXG5cbiAgLyoqXG4gICAgICogTGFiZWwgb3IgcHJpbWFyeSB0ZXh0LlxuICAgICAqL1xuICBsYWJlbDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgICAqIERlc2NyaXB0aW9uIG9yIHNlY29uZGFyeSB0ZXh0IChvcHRpb25hbCkuXG4gICAgICovXG4gIGRlc2NyaXB0aW9uOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAqIFBlcmNlbnRhZ2Ugd2lkdGggb2YgYGxhYmVsYC5cbiAgICAgKiBBY2NlcHRzIG11bHRpcGxlcyBvZiBgMTBgLCBmcm9tIGAyMGAgdG8gYDkwYC5cbiAgICAgKiBMYWJlbCB3aWxsIGV4cGFuZCB0byAxMDAlIGlmIGBkZXNjcmlwdGlvbmAgaXMgbm90IHByb3ZpZGVkLlxuICAgICAqL1xuICBsYWJlbFdpZHRoOiBQcm9wVHlwZXMub25lT2YoW1wiMjBcIiwgXCIzMFwiLCBcIjQwXCIsIFwiNTBcIiwgXCI2MFwiLCBcIjcwXCIsIFwiODBcIiwgXCI5MFwiLCAyMCwgMzAsIDQwLCA1MCwgNjAsIDcwLCA4MCwgOTBdKSxcblxuICAvKipcbiAgICAgKiBUcnVuY2F0ZXMgYm90aCBsYWJlbCBhbmQgZGVzY3JpcHRpb24uXG4gICAgICovXG4gIHRydW5jYXRlOiBQcm9wVHlwZXMuYm9vbCxcbiAgb25DbGljazogUHJvcFR5cGVzLmZ1bmNcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJvbkl0ZW1DbGlja1wiLCBcIm9uQmx1clwiLCBcIm9uRm9jdXNcIiwgXCJvbklucHV0XCIsIFwib25TZWFyY2hcIiwgXCJzdGF0dXNcIiwgXCJhcHBlbmRcIiwgXCJ0b29sdGlwQ29udGVudFwiLCBcInN1Z2dlc3Rpb25zXCIsIFwiaWRcIiwgXCJhcmlhLWxhYmVsXCIsIFwiYXJpYS1sYWJlbGxlZGJ5XCIsIFwiaXNWaXJ0dWFsaXplZFwiLCBcImZ1bGxXaWR0aFwiLCBcIm1heEhlaWdodFwiXTtcblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgeyB2YXIgX2kgPSBhcnIgPT0gbnVsbCA/IG51bGwgOiB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGFycltTeW1ib2wuaXRlcmF0b3JdIHx8IGFycltcIkBAaXRlcmF0b3JcIl07IGlmIChfaSA9PSBudWxsKSByZXR1cm47IHZhciBfYXJyID0gW107IHZhciBfbiA9IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIgX3MsIF9lOyB0cnkgeyBmb3IgKF9pID0gX2kuY2FsbChhcnIpOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7IF9hcnIucHVzaChfcy52YWx1ZSk7IGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhazsgfSB9IGNhdGNoIChlcnIpIHsgX2QgPSB0cnVlOyBfZSA9IGVycjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSAhPSBudWxsKSBfaVtcInJldHVyblwiXSgpOyB9IGZpbmFsbHkgeyBpZiAoX2QpIHRocm93IF9lOyB9IH0gcmV0dXJuIF9hcnI7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VHZW5lcmF0ZWRIdG1sSWQgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFdWlTY3JlZW5SZWFkZXJPbmx5IH0gZnJvbSAnLi4vYWNjZXNzaWJpbGl0eSc7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vaWNvbic7XG5pbXBvcnQgeyB1c2VFdWlJMThuIH0gZnJvbSAnLi4vaTE4bic7XG5pbXBvcnQgeyBFdWlJbnB1dFBvcG92ZXIgfSBmcm9tICcuLi9wb3BvdmVyJztcbmltcG9ydCB7IEV1aVNlbGVjdGFibGUgfSBmcm9tICcuLi9zZWxlY3RhYmxlJztcbmltcG9ydCB7IEV1aVRvb2xUaXAgfSBmcm9tICcuLi90b29sX3RpcCc7XG5pbXBvcnQgeyBFdWlTdWdnZXN0SXRlbSB9IGZyb20gJy4vc3VnZ2VzdF9pdGVtJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgc3RhdHVzTWFwID0ge1xuICB1bnNhdmVkOiB7XG4gICAgaWNvbjogJ2RvdCcsXG4gICAgY29sb3I6ICdhY2NlbnQnXG4gIH0sXG4gIHNhdmVkOiB7XG4gICAgaWNvbjogJ2NoZWNrSW5DaXJjbGVGaWxsZWQnLFxuICAgIGNvbG9yOiAnc3VjY2VzcydcbiAgfSxcbiAgdW5jaGFuZ2VkOiB7XG4gICAgaWNvbjogJycsXG4gICAgY29sb3I6ICdzdWNjZXNzJ1xuICB9LFxuICBsb2FkaW5nOiB7fVxufTsgLy8ga2V5cyBvZiBfRXVpU3VnZ2VzdEl0ZW1Qcm9wc0Jhc2VcblxudmFyIHN1Z2dlc3RJdGVtUHJvcHNLZXlzID0gWydsYWJlbCcsICd0eXBlJywgJ2Rlc2NyaXB0aW9uJywgJ2xhYmVsRGlzcGxheScsICdsYWJlbFdpZHRoJywgJ2Rlc2NyaXB0aW9uRGlzcGxheSddO1xuZXhwb3J0IHZhciBFdWlTdWdnZXN0ID0gZnVuY3Rpb24gRXVpU3VnZ2VzdChfcmVmKSB7XG4gIHZhciBvbkl0ZW1DbGljayA9IF9yZWYub25JdGVtQ2xpY2ssXG4gICAgICBvbkJsdXIgPSBfcmVmLm9uQmx1cixcbiAgICAgIG9uRm9jdXMgPSBfcmVmLm9uRm9jdXMsXG4gICAgICBvbklucHV0ID0gX3JlZi5vbklucHV0LFxuICAgICAgb25TZWFyY2ggPSBfcmVmLm9uU2VhcmNoLFxuICAgICAgX3JlZiRzdGF0dXMgPSBfcmVmLnN0YXR1cyxcbiAgICAgIHN0YXR1cyA9IF9yZWYkc3RhdHVzID09PSB2b2lkIDAgPyAndW5jaGFuZ2VkJyA6IF9yZWYkc3RhdHVzLFxuICAgICAgYXBwZW5kID0gX3JlZi5hcHBlbmQsXG4gICAgICB0b29sdGlwQ29udGVudCA9IF9yZWYudG9vbHRpcENvbnRlbnQsXG4gICAgICBzdWdnZXN0aW9ucyA9IF9yZWYuc3VnZ2VzdGlvbnMsXG4gICAgICBpZCA9IF9yZWYuaWQsXG4gICAgICBhcmlhTGFiZWwgPSBfcmVmWydhcmlhLWxhYmVsJ10sXG4gICAgICBsYWJlbElkID0gX3JlZlsnYXJpYS1sYWJlbGxlZGJ5J10sXG4gICAgICBfcmVmJGlzVmlydHVhbGl6ZWQgPSBfcmVmLmlzVmlydHVhbGl6ZWQsXG4gICAgICBpc1ZpcnR1YWxpemVkID0gX3JlZiRpc1ZpcnR1YWxpemVkID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkaXNWaXJ0dWFsaXplZCxcbiAgICAgIF9yZWYkZnVsbFdpZHRoID0gX3JlZi5mdWxsV2lkdGgsXG4gICAgICBmdWxsV2lkdGggPSBfcmVmJGZ1bGxXaWR0aCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYkZnVsbFdpZHRoLFxuICAgICAgX3JlZiRtYXhIZWlnaHQgPSBfcmVmLm1heEhlaWdodCxcbiAgICAgIG1heEhlaWdodCA9IF9yZWYkbWF4SGVpZ2h0ID09PSB2b2lkIDAgPyAnNjB2aCcgOiBfcmVmJG1heEhlaWdodCxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICAvKipcbiAgICogUG9wb3ZlciBoZWxwZXJzXG4gICAqL1xuICB2YXIgX3VzZVN0YXRlID0gdXNlU3RhdGUobnVsbCksXG4gICAgICBfdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlLCAyKSxcbiAgICAgIHBvcG92ZXJSZWYgPSBfdXNlU3RhdGUyWzBdLFxuICAgICAgc2V0UG9wb3ZlclJlZiA9IF91c2VTdGF0ZTJbMV07XG5cbiAgdmFyIF91c2VTdGF0ZTMgPSB1c2VTdGF0ZShmYWxzZSksXG4gICAgICBfdXNlU3RhdGU0ID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlMywgMiksXG4gICAgICBpc1BvcG92ZXJPcGVuID0gX3VzZVN0YXRlNFswXSxcbiAgICAgIHNldElzUG9wb3Zlck9wZW4gPSBfdXNlU3RhdGU0WzFdO1xuXG4gIHZhciBvcGVuUG9wb3ZlciA9IGZ1bmN0aW9uIG9wZW5Qb3BvdmVyKCkge1xuICAgIHJldHVybiBzZXRJc1BvcG92ZXJPcGVuKHRydWUpO1xuICB9O1xuXG4gIHZhciBjbG9zZVBvcG92ZXIgPSBmdW5jdGlvbiBjbG9zZVBvcG92ZXIoKSB7XG4gICAgcmV0dXJuIHNldElzUG9wb3Zlck9wZW4oZmFsc2UpO1xuICB9O1xuICAvKipcbiAgICogU2VhcmNoIGhlbHBlcnNcbiAgICovXG5cblxuICB2YXIgc2VhcmNoT25Gb2N1cyA9IGZ1bmN0aW9uIHNlYXJjaE9uRm9jdXMoZSkge1xuICAgIG9uRm9jdXMgPT09IG51bGwgfHwgb25Gb2N1cyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25Gb2N1cyhlKTtcbiAgICBvcGVuUG9wb3ZlcigpO1xuICB9O1xuXG4gIHZhciBzZWFyY2hPbkJsdXIgPSBmdW5jdGlvbiBzZWFyY2hPbkJsdXIoZSkge1xuICAgIG9uQmx1ciA9PT0gbnVsbCB8fCBvbkJsdXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQmx1cihlKTtcblxuICAgIGlmICghKHBvcG92ZXJSZWYgIT09IG51bGwgJiYgcG9wb3ZlclJlZiAhPT0gdm9pZCAwICYmIHBvcG92ZXJSZWYuY29udGFpbnMoZS5yZWxhdGVkVGFyZ2V0KSkpIHtcbiAgICAgIGNsb3NlUG9wb3ZlcigpO1xuICAgIH1cbiAgfTtcblxuICB2YXIgc2VhcmNoT25JbnB1dCA9IGZ1bmN0aW9uIHNlYXJjaE9uSW5wdXQoZSkge1xuICAgIG9uSW5wdXQgPT09IG51bGwgfHwgb25JbnB1dCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25JbnB1dChlLnRhcmdldCk7XG4gICAgb3BlblBvcG92ZXIoKTtcbiAgfTtcblxuICB2YXIgc2VhcmNoT25DaGFuZ2UgPSBmdW5jdGlvbiBzZWFyY2hPbkNoYW5nZSh2YWx1ZSkge1xuICAgIG9uU2VhcmNoID09PSBudWxsIHx8IG9uU2VhcmNoID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvblNlYXJjaCh2YWx1ZSk7XG4gIH07XG5cbiAgdmFyIGlucHV0RGVzY3JpYmVkYnlJZCA9IHVzZUdlbmVyYXRlZEh0bWxJZCh7XG4gICAgcHJlZml4OiBpZFxuICB9KTtcbiAgLyoqXG4gICAqIFN0YXR1c1xuICAgKi9cblxuICB2YXIgaWNvbiA9ICcnO1xuICB2YXIgY29sb3IgPSAnJztcblxuICBpZiAoc3RhdHVzTWFwW3N0YXR1c10pIHtcbiAgICBpY29uID0gc3RhdHVzTWFwW3N0YXR1c10uaWNvbiB8fCAnJztcbiAgICBjb2xvciA9IHN0YXR1c01hcFtzdGF0dXNdLmNvbG9yIHx8ICcnO1xuICB9IC8vIEV1aUZpZWxkVGV4dCdzIGFwcGVuZCBhY2NlcHRzIGFuIGFycmF5IG9mIGVsZW1lbnRzIHNvIHN0YXJ0IGJ5IGNyZWF0aW5nIGFuIGVtcHR5IGFycmF5XG5cblxuICB2YXIgYXBwZW5kQXJyYXkgPSBbXTtcblxuICB2YXIgX3VzZUV1aUkxOG4gPSB1c2VFdWlJMThuKFsnZXVpU3VnZ2VzdC5zdGF0ZVNhdmVkVG9vbHRpcCcsICdldWlTdWdnZXN0LnN0YXRlVW5zYXZlZFRvb2x0aXAnXSwgWydTYXZlZC4nLCAnQ2hhbmdlcyBoYXZlIG5vdCBiZWVuIHNhdmVkLiddKSxcbiAgICAgIF91c2VFdWlJMThuMiA9IF9zbGljZWRUb0FycmF5KF91c2VFdWlJMThuLCAyKSxcbiAgICAgIHN0YXR1c1NhdmVkID0gX3VzZUV1aUkxOG4yWzBdLFxuICAgICAgc3RhdHVzVW5zYXZlZCA9IF91c2VFdWlJMThuMlsxXTtcblxuICBzdGF0dXNNYXAuc2F2ZWQudG9vbHRpcCA9IHN0YXR1c1NhdmVkO1xuICBzdGF0dXNNYXAudW5zYXZlZC50b29sdGlwID0gc3RhdHVzVW5zYXZlZDtcblxuICB2YXIgc3RhdHVzRWxlbWVudCA9IChzdGF0dXMgPT09ICdzYXZlZCcgfHwgc3RhdHVzID09PSAndW5zYXZlZCcpICYmIF9fX0Vtb3Rpb25KU1goRXVpVG9vbFRpcCwge1xuICAgIHBvc2l0aW9uOiBcImxlZnRcIixcbiAgICBjb250ZW50OiB0b29sdGlwQ29udGVudCB8fCBzdGF0dXNNYXBbc3RhdHVzXS50b29sdGlwXG4gIH0sIF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlTdWdnZXN0SW5wdXRfX3N0YXR1c0ljb25cIixcbiAgICBjb2xvcjogY29sb3IsXG4gICAgdHlwZTogaWNvblxuICB9KSk7IC8vIFB1c2ggdGhlIHN0YXR1cyBlbGVtZW50IHRvIHRoZSBhcnJheSBpZiBpdCBpcyBub3QgdW5kZWZpbmVkXG5cblxuICBpZiAoc3RhdHVzRWxlbWVudCkgYXBwZW5kQXJyYXkucHVzaChzdGF0dXNFbGVtZW50KTsgLy8gQ2hlY2sgdG8gc2VlIGlmIGNvbnN1bWVyIHBhc3NlZCBhbiBhcHBlbmQgaXRlbSBhbmQgaWYgc28sIGFkZCBpdCB0byB0aGUgYXJyYXlcblxuICBpZiAoYXBwZW5kKSBhcHBlbmRBcnJheS5wdXNoKGFwcGVuZCk7XG5cbiAgdmFyIF91c2VFdWlJMThuMyA9IHVzZUV1aUkxOG4oWydldWlTdWdnZXN0LnN0YXRlTG9hZGluZycsICdldWlTdWdnZXN0LnN0YXRlU2F2ZWQnLCAnZXVpU3VnZ2VzdC5zdGF0ZVVuc2F2ZWQnLCAnZXVpU3VnZ2VzdC5zdGF0ZVVuY2hhbmdlZCddLCBbJ1N0YXRlOiBsb2FkaW5nLicsICdTdGF0ZTogc2F2ZWQuJywgJ1N0YXRlOiB1bnNhdmVkLicsICdTdGF0ZTogdW5jaGFuZ2VkLiddKSxcbiAgICAgIF91c2VFdWlJMThuNCA9IF9zbGljZWRUb0FycmF5KF91c2VFdWlJMThuMywgNCksXG4gICAgICBzdGF0ZUxvYWRpbmcgPSBfdXNlRXVpSTE4bjRbMF0sXG4gICAgICBzdGF0ZVNhdmVkID0gX3VzZUV1aUkxOG40WzFdLFxuICAgICAgc3RhdGVVbnNhdmVkID0gX3VzZUV1aUkxOG40WzJdLFxuICAgICAgc3RhdGVVbmNoYW5nZWQgPSBfdXNlRXVpSTE4bjRbM107XG5cbiAgdmFyIHN0YXRlTWVzc2FnZU1hcCA9IHtcbiAgICBsb2FkaW5nOiBzdGF0ZUxvYWRpbmcsXG4gICAgc2F2ZWQ6IHN0YXRlU2F2ZWQsXG4gICAgdW5zYXZlZDogc3RhdGVVbnNhdmVkLFxuICAgIHVuY2hhbmdlZDogc3RhdGVVbmNoYW5nZWRcbiAgfTtcbiAgdmFyIHN0YXRlTWVzc2FnZSA9IHN0YXRlTWVzc2FnZU1hcFtzdGF0dXNdO1xuICAvKipcbiAgICogT3B0aW9ucyBsaXN0XG4gICAqL1xuXG4gIHZhciBzdWdnZXN0aW9uTGlzdCA9IHN1Z2dlc3Rpb25zLm1hcChmdW5jdGlvbiAocHJvcHMpIHtcbiAgICAvLyBPbWl0IHByb3BzIGRlc3RpbmVkIGZvciB0aGUgRXVpU3VnZ2VzdEl0ZW0gc28gdGhhdCB0aGV5IGRvbid0XG4gICAgLy8gY2F1c2Ugd2FybmluZ3Mgb3IgcmVuZGVyIGluIHRoZSBET00gb2YgdGhlIEV1aVNlbGVjdGFibGVJdGVtXG4gICAgdmFyIGRhdGEgPSB7fTtcbiAgICB2YXIgbGlQcm9wcyA9IHtcbiAgICAgIGxhYmVsOiBwcm9wcy5sYWJlbFxuICAgIH07XG4gICAgT2JqZWN0LmtleXMocHJvcHMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgaWYgKHN1Z2dlc3RJdGVtUHJvcHNLZXlzLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZSBzdHJpbmcgaW5kZXggdHlwZVxuICAgICAgICBkYXRhW2tleV0gPSBwcm9wc1trZXldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZSBzdHJpbmcgaW5kZXggdHlwZVxuICAgICAgICBsaVByb3BzW2tleV0gPSBwcm9wc1trZXldO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGxpUHJvcHMpLCB7fSwge1xuICAgICAgZGF0YTogZGF0YSxcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lcyhwcm9wcy5jbGFzc05hbWUsICdldWlTdWdnZXN0SXRlbU9wdGlvbicpLFxuICAgICAgLy8gRm9yY2UgdHJ1bmNhdGlvbiBpZiBgaXNWaXJ0dWFsaXplZGAgaXMgdHJ1ZVxuICAgICAgdHJ1bmNhdGU6IGlzVmlydHVhbGl6ZWQgPyB0cnVlIDogcHJvcHMudHJ1bmNhdGVcbiAgICB9KTtcbiAgfSk7XG4gIHZhciByZW5kZXJPcHRpb24gPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAocHJvcHMpIHtcbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlTdWdnZXN0SXRlbSwgcHJvcHMpO1xuICB9LCBbXSk7XG4gIHZhciBvbkl0ZW1TZWxlY3QgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIGlmIChvbkl0ZW1DbGljaykge1xuICAgICAgdmFyIHNlbGVjdGVkSW5kZXggPSBvcHRpb25zLmZpbmRJbmRleChmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAgIHJldHVybiBvcHRpb24uY2hlY2tlZCA9PT0gJ29uJztcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoc2VsZWN0ZWRJbmRleCA+PSAwKSB7XG4gICAgICAgIHZhciBzZWxlY3RlZFN1Z2dlc3Rpb24gPSBzdWdnZXN0aW9uc1tzZWxlY3RlZEluZGV4XTtcbiAgICAgICAgb25JdGVtQ2xpY2soc2VsZWN0ZWRTdWdnZXN0aW9uKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtvbkl0ZW1DbGljaywgc3VnZ2VzdGlvbnNdKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goUmVhY3QuRnJhZ21lbnQsIG51bGwsIF9fX0Vtb3Rpb25KU1goRXVpU2VsZWN0YWJsZSwge1xuICAgIHNpbmdsZVNlbGVjdGlvbjogdHJ1ZSxcbiAgICBoZWlnaHQ6IGlzVmlydHVhbGl6ZWQgPyB1bmRlZmluZWQgOiAnZnVsbCcsXG4gICAgb3B0aW9uczogc3VnZ2VzdGlvbkxpc3QsXG4gICAgcmVuZGVyT3B0aW9uOiByZW5kZXJPcHRpb24sXG4gICAgb25DaGFuZ2U6IG9uSXRlbVNlbGVjdCxcbiAgICBsaXN0UHJvcHM6IHtcbiAgICAgIGJvcmRlcmVkOiBmYWxzZSxcbiAgICAgIHNob3dJY29uczogZmFsc2UsXG4gICAgICBvbkZvY3VzQmFkZ2U6IGZhbHNlLFxuICAgICAgcGFkZGluZ1NpemU6ICdub25lJyxcbiAgICAgIHRleHRXcmFwOiBpc1ZpcnR1YWxpemVkID8gJ3RydW5jYXRlJyA6ICd3cmFwJyxcbiAgICAgIGlzVmlydHVhbGl6ZWQ6IGlzVmlydHVhbGl6ZWRcbiAgICB9LFxuICAgIHNlYXJjaGFibGU6IHRydWUsXG4gICAgc2VhcmNoUHJvcHM6IF9vYmplY3RTcHJlYWQoe1xuICAgICAgaWQ6IGlkLFxuICAgICAgYXBwZW5kOiBhcHBlbmRBcnJheS5sZW5ndGggPyBhcHBlbmRBcnJheSA6IHVuZGVmaW5lZCxcbiAgICAgIGZ1bGxXaWR0aDogZnVsbFdpZHRoLFxuICAgICAgaXNMb2FkaW5nOiBzdGF0dXMgPT09ICdsb2FkaW5nJyA/IHRydWUgOiBmYWxzZSxcbiAgICAgIG9uRm9jdXM6IHNlYXJjaE9uRm9jdXMsXG4gICAgICBvbkJsdXI6IHNlYXJjaE9uQmx1cixcbiAgICAgIG9uSW5wdXQ6IHNlYXJjaE9uSW5wdXQsXG4gICAgICBvbkNoYW5nZTogc2VhcmNoT25DaGFuZ2UsXG4gICAgICAnYXJpYS1kZXNjcmliZWRieSc6IGlucHV0RGVzY3JpYmVkYnlJZCxcbiAgICAgICdhcmlhLWxhYmVsJzogYXJpYUxhYmVsLFxuICAgICAgJ2FyaWEtbGFiZWxsZWRieSc6IGxhYmVsSWRcbiAgICB9LCByZXN0KVxuICB9LCBmdW5jdGlvbiAobGlzdCwgc2VhcmNoKSB7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpSW5wdXRQb3BvdmVyLCB7XG4gICAgICBkaXNhYmxlRm9jdXNUcmFwOiB0cnVlLFxuICAgICAgaW5wdXQ6IF9fX0Vtb3Rpb25KU1goUmVhY3QuRnJhZ21lbnQsIG51bGwsIHNlYXJjaCksXG4gICAgICBpc09wZW46IGlzUG9wb3Zlck9wZW4sXG4gICAgICBwYW5lbFBhZGRpbmdTaXplOiBcIm5vbmVcIixcbiAgICAgIGZ1bGxXaWR0aDogZnVsbFdpZHRoLFxuICAgICAgY2xvc2VQb3BvdmVyOiBjbG9zZVBvcG92ZXIsXG4gICAgICBwYW5lbFJlZjogc2V0UG9wb3ZlclJlZixcbiAgICAgIHBhbmVsUHJvcHM6IHtcbiAgICAgICAgJ2FyaWEtbGl2ZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgJ2FyaWEtbW9kYWwnOiBmYWxzZSxcbiAgICAgICAgcm9sZTogdW5kZWZpbmVkXG4gICAgICB9XG4gICAgfSwgX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICBzdHlsZToge1xuICAgICAgICBtYXhIZWlnaHQ6IG1heEhlaWdodFxuICAgICAgfSxcbiAgICAgIGNsYXNzTmFtZTogXCJldWkteVNjcm9sbFwiXG4gICAgfSwgbGlzdCkpO1xuICB9KSwgX19fRW1vdGlvbkpTWChFdWlTY3JlZW5SZWFkZXJPbmx5LCBudWxsLCBfX19FbW90aW9uSlNYKFwicFwiLCB7XG4gICAgaWQ6IGlucHV0RGVzY3JpYmVkYnlJZFxuICB9LCBzdGF0ZU1lc3NhZ2UpKSk7XG59O1xuRXVpU3VnZ2VzdC5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZ10pXSksXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgICAqIExpc3Qgb2Ygc3VnZ2VzdGlvbnMgdG8gZGlzcGxheSB1c2luZyBFdWlTdWdnZXN0SXRlbS5cbiAgICAgICAqIEFjY2VwdHMgcHJvcHMgZnJvbSAjRXVpU3VnZ2VzdEl0ZW1Qcm9wc1xuICAgICAgICovXG4gIHN1Z2dlc3Rpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgICAvKipcbiAgICAgICAqIFRha2VzIGBpY29uVHlwZWAgZm9yIEV1aUljb24gYW5kICdjb2xvcicuICdjb2xvcicgY2FuIGJlIHRpbnQxIHRocm91Z2ggdGludDkuXG4gICAgICAgKi9cbiAgICB0eXBlOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgaWNvblR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhY2Nlc3NpYmlsaXR5XCIsIFwiYWRkRGF0YUFwcFwiLCBcImFkdmFuY2VkU2V0dGluZ3NBcHBcIiwgXCJhZ2VudEFwcFwiLCBcImFnZ3JlZ2F0ZVwiLCBcImFsZXJ0XCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbG9ja1wiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQUNpcmNsZUZpbGxlZFwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRvY3VtZW50XCIsIFwiZG9jdW1lbnRFZGl0XCIsIFwiZG9jdW1lbnRhdGlvblwiLCBcImRvY3VtZW50c1wiLCBcImRvdFwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJleGl0XCIsIFwiZXhwYW5kXCIsIFwiZXhwYW5kTWluaVwiLCBcImV4cG9ydEFjdGlvblwiLCBcImV5ZVwiLCBcImV5ZUNsb3NlZFwiLCBcImZhY2VIYXBweVwiLCBcImZhY2VOZXV0cmFsXCIsIFwiZmFjZVNhZFwiLCBcImZpbGViZWF0QXBwXCIsIFwiZmlsdGVyXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhDbG9zZVwiLCBcImluZGV4RWRpdFwiLCBcImluZGV4Rmx1c2hcIiwgXCJpbmRleE1hbmFnZW1lbnRBcHBcIiwgXCJpbmRleE1hcHBpbmdcIiwgXCJpbmRleE9wZW5cIiwgXCJpbmRleFBhdHRlcm5BcHBcIiwgXCJpbmRleFJvbGx1cEFwcFwiLCBcImluZGV4UnVudGltZVwiLCBcImluZGV4U2V0dGluZ3NcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibmFtZXNwYWNlXCIsIFwibmVzdGVkXCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZWxpbmVBcHBcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzQXBwXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpb25BcHBcIiwgXCJ0aW1lUmVmcmVzaFwiLCBcInRpbWVzbGlkZXJcIiwgXCJ0cmFpbmluZ1wiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsXG4gICAgICBjb2xvcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2YoW1widGludDBcIiwgXCJ0aW50MVwiLCBcInRpbnQyXCIsIFwidGludDNcIiwgXCJ0aW50NFwiLCBcInRpbnQ1XCIsIFwidGludDZcIiwgXCJ0aW50N1wiLCBcInRpbnQ4XCIsIFwidGludDlcIiwgXCJ0aW50MTBcIl0pLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkXG4gICAgfSkuaXNSZXF1aXJlZCxcblxuICAgIC8qKlxuICAgICAgICogTGFiZWwgb3IgcHJpbWFyeSB0ZXh0LlxuICAgICAgICovXG4gICAgbGFiZWw6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcblxuICAgIC8qKlxuICAgICAgICogRGVzY3JpcHRpb24gb3Igc2Vjb25kYXJ5IHRleHQgKG9wdGlvbmFsKS5cbiAgICAgICAqL1xuICAgIGRlc2NyaXB0aW9uOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gICAgLyoqXG4gICAgICAgKiBQZXJjZW50YWdlIHdpZHRoIG9mIGBsYWJlbGAuXG4gICAgICAgKiBBY2NlcHRzIG11bHRpcGxlcyBvZiBgMTBgLCBmcm9tIGAyMGAgdG8gYDkwYC5cbiAgICAgICAqIExhYmVsIHdpbGwgZXhwYW5kIHRvIDEwMCUgaWYgYGRlc2NyaXB0aW9uYCBpcyBub3QgcHJvdmlkZWQuXG4gICAgICAgKi9cbiAgICBsYWJlbFdpZHRoOiBQcm9wVHlwZXMub25lT2YoW1wiMjBcIiwgXCIzMFwiLCBcIjQwXCIsIFwiNTBcIiwgXCI2MFwiLCBcIjcwXCIsIFwiODBcIiwgXCI5MFwiLCAyMCwgMzAsIDQwLCA1MCwgNjAsIDcwLCA4MCwgOTBdKSxcblxuICAgIC8qKlxuICAgICAgICogVHJ1bmNhdGVzIGJvdGggbGFiZWwgYW5kIGRlc2NyaXB0aW9uLlxuICAgICAgICovXG4gICAgdHJ1bmNhdGU6IFByb3BUeXBlcy5ib29sXG4gIH0pLmlzUmVxdWlyZWQpLmlzUmVxdWlyZWQsXG5cbiAgLyoqXG4gICAgICAgKiBDaGFuZ2VzIHRoZSBjb250ZW50IG9mIHRoZSB0b29sdGlwIHRoYXQgd3JhcHMgdGhlIHN0YXR1cyBpY29uXG4gICAgICAgKi9cbiAgdG9vbHRpcENvbnRlbnQ6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICAgKiBTdGF0dXMgb2YgdGhlIGN1cnJlbnQgcXVlcnkgJ3Vuc2F2ZWQnLCAnc2F2ZWQnLCAndW5jaGFuZ2VkJyBvciAnbG9hZGluZycuXG4gICAgICAgKi9cbiAgc3RhdHVzOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAgICogRWxlbWVudCB0byBiZSBhcHBlbmRlZCB0byB0aGUgaW5wdXQgYmFyLlxuICAgICAgICovXG4gIGFwcGVuZDogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgICAqIEhhbmRsZXIgZm9yIGNsaWNrIG9uIGFuIEV1aVN1Z2dlc3RJdGVtLlxuICAgICAgICovXG4gIG9uSXRlbUNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICAgICAqIENhbGxiYWNrIGZ1bmN0aW9uIGNhbGxlZCB3aGVuIHRoZSBpbnB1dCBjaGFuZ2VzLlxuICAgICAgICovXG4gIG9uSW5wdXQ6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgICAgICogQ2FsbGJhY2sgZnVuY3Rpb24gY2FsbGVkIHdoZW4gdGhlIHNlYXJjaCBjaGFuZ2VzLlxuICAgICAgICovXG4gIG9uU2VhcmNoOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICAgICAqIFVzZSB2aXJ0dWFsaXplZCByZW5kZXJpbmcgZm9yIGxpc3QgaXRlbXMgd2l0aCBgcmVhY3Qtd2luZG93YC5cbiAgICAgICAqIEJlc3QgdXNlZCB3aGVuIHRoZXJlIGFyZSBhIGxvdCBvZiBpdGVtcy5cbiAgICAgICAqL1xuICBpc1ZpcnR1YWxpemVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgICAqIE1heGltdW0gaGVpZ2h0IHRvIHNldCBmb3IgdGhlIGxpc3QuXG4gICAgICAgKiBEZWZhdWx0IGlzIGA2MHZoYFxuICAgICAgICovXG4gIG1heEhlaWdodDogUHJvcFR5cGVzLmFueSxcbiAgXCJhcmlhLWxhYmVsbGVkYnlcIjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkXSlcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImNvbXByZXNzZWRcIiwgXCJ0YWJsZUxheW91dFwiLCBcInJlc3BvbnNpdmVcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIHRhYmxlTGF5b3V0VG9DbGFzc01hcCA9IHtcbiAgZml4ZWQ6IG51bGwsXG4gIGF1dG86ICdldWlUYWJsZS0tYXV0bydcbn07XG5leHBvcnQgdmFyIEV1aVRhYmxlID0gZnVuY3Rpb24gRXVpVGFibGUoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBjb21wcmVzc2VkID0gX3JlZi5jb21wcmVzc2VkLFxuICAgICAgX3JlZiR0YWJsZUxheW91dCA9IF9yZWYudGFibGVMYXlvdXQsXG4gICAgICB0YWJsZUxheW91dCA9IF9yZWYkdGFibGVMYXlvdXQgPT09IHZvaWQgMCA/ICdmaXhlZCcgOiBfcmVmJHRhYmxlTGF5b3V0LFxuICAgICAgX3JlZiRyZXNwb25zaXZlID0gX3JlZi5yZXNwb25zaXZlLFxuICAgICAgcmVzcG9uc2l2ZSA9IF9yZWYkcmVzcG9uc2l2ZSA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYkcmVzcG9uc2l2ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRhYmxlJywgY2xhc3NOYW1lLCB7XG4gICAgJ2V1aVRhYmxlLS1jb21wcmVzc2VkJzogY29tcHJlc3NlZCxcbiAgICAnZXVpVGFibGUtLXJlc3BvbnNpdmUnOiByZXNwb25zaXZlXG4gIH0sIHRhYmxlTGF5b3V0VG9DbGFzc01hcFt0YWJsZUxheW91dF0pO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInRhYmxlXCIsIF9leHRlbmRzKHtcbiAgICB0YWJJbmRleDogLTEsXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gIH0sIHJlc3QpLCBjaGlsZHJlbik7XG59O1xuRXVpVGFibGUucHJvcFR5cGVzID0ge1xuICBjb21wcmVzc2VkOiBQcm9wVHlwZXMuYm9vbCxcbiAgcmVzcG9uc2l2ZTogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogU2V0cyB0aGUgdGFibGUtbGF5b3V0IENTUyBwcm9wZXJ0eVxuICAgICAqL1xuICB0YWJsZUxheW91dDogUHJvcFR5cGVzLm9uZU9mKFtcImZpeGVkXCIsIFwiYXV0b1wiXSksXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZ1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiYm9keVJlZlwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlUYWJsZUJvZHkgPSBmdW5jdGlvbiBFdWlUYWJsZUJvZHkoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBib2R5UmVmID0gX3JlZi5ib2R5UmVmLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwidGJvZHlcIiwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lLFxuICAgIHJlZjogYm9keVJlZlxuICB9LCByZXN0KSwgY2hpbGRyZW4pO1xufTtcbkV1aVRhYmxlQm9keS5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgYm9keVJlZjogUHJvcFR5cGVzLmFueVxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVRhYmxlRm9vdGVyID0gZnVuY3Rpb24gRXVpVGFibGVGb290ZXIoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJ0Zm9vdFwiLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWVcbiAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goXCJ0clwiLCBudWxsLCBjaGlsZHJlbikpO1xufTtcbkV1aVRhYmxlRm9vdGVyLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nXG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJhbGlnblwiLCBcImNsYXNzTmFtZVwiLCBcIndpZHRoXCIsIFwic3R5bGVcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBMRUZUX0FMSUdOTUVOVCwgUklHSFRfQUxJR05NRU5ULCBDRU5URVJfQUxJR05NRU5UIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgcmVzb2x2ZVdpZHRoQXNTdHlsZSB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpVGFibGVGb290ZXJDZWxsID0gZnVuY3Rpb24gRXVpVGFibGVGb290ZXJDZWxsKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIF9yZWYkYWxpZ24gPSBfcmVmLmFsaWduLFxuICAgICAgYWxpZ24gPSBfcmVmJGFsaWduID09PSB2b2lkIDAgPyBMRUZUX0FMSUdOTUVOVCA6IF9yZWYkYWxpZ24sXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIHdpZHRoID0gX3JlZi53aWR0aCxcbiAgICAgIHN0eWxlID0gX3JlZi5zdHlsZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRhYmxlRm9vdGVyQ2VsbCcsIGNsYXNzTmFtZSk7XG4gIHZhciBjb250ZW50Q2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRhYmxlQ2VsbENvbnRlbnQnLCBjbGFzc05hbWUsIHtcbiAgICAnZXVpVGFibGVDZWxsQ29udGVudC0tYWxpZ25SaWdodCc6IGFsaWduID09PSBSSUdIVF9BTElHTk1FTlQsXG4gICAgJ2V1aVRhYmxlQ2VsbENvbnRlbnQtLWFsaWduQ2VudGVyJzogYWxpZ24gPT09IENFTlRFUl9BTElHTk1FTlRcbiAgfSk7XG4gIHZhciBzdHlsZU9iaiA9IHJlc29sdmVXaWR0aEFzU3R5bGUoc3R5bGUsIHdpZHRoKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJ0ZFwiLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIHN0eWxlOiBzdHlsZU9ialxuICB9LCByZXN0KSwgX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBjb250ZW50Q2xhc3Nlc1xuICB9LCBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aVRhYmxlQ2VsbENvbnRlbnRfX3RleHRcIlxuICB9LCBjaGlsZHJlbikpKTtcbn07XG5FdWlUYWJsZUZvb3RlckNlbGwucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGFsaWduOiBQcm9wVHlwZXMub25lT2YoW1wibGVmdFwiLCBcInJpZ2h0XCIsIFwiY2VudGVyXCJdKSxcbiAgd2lkdGg6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkXSlcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ3aWR0aFwiXTtcblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuZXhwb3J0IHZhciBXQVJOSU5HX01FU1NBR0UgPSAnVHdvIGB3aWR0aGAgcHJvcGVydGllcyB3ZXJlIHByb3ZpZGVkLiBQcm92aWRlIG9ubHkgb25lIG9mIGBzdHlsZS53aWR0aGAgb3IgYHdpZHRoYCB0byBhdm9pZCBjb25mbGljdHMuJztcbmV4cG9ydCB2YXIgcmVzb2x2ZVdpZHRoQXNTdHlsZSA9IGZ1bmN0aW9uIHJlc29sdmVXaWR0aEFzU3R5bGUoKSB7XG4gIHZhciBzdHlsZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gIHZhciB3aWR0aCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuXG4gIHZhciBzdHlsZVdpZHRoID0gc3R5bGUud2lkdGgsXG4gICAgICBzdHlsZVJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc3R5bGUsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGF0dHJXaWR0aCA9IHdpZHRoO1xuXG4gIGlmIChhdHRyV2lkdGggIT0gbnVsbCAmJiAodHlwZW9mIGF0dHJXaWR0aCA9PT0gJ251bWJlcicgfHwgIWlzTmFOKE51bWJlcihhdHRyV2lkdGgpKSkgLy8gdHJhbnNmb3JtIHtudW1iZXJ9IG9yIHVuaXRsZXNzICdudW1iZXInIHRvIHB4IHN0cmluZ1xuICApIHtcbiAgICBhdHRyV2lkdGggPSBcIlwiLmNvbmNhdChhdHRyV2lkdGgsIFwicHhcIik7XG4gIH1cblxuICBpZiAoc3R5bGVXaWR0aCAmJiBhdHRyV2lkdGgpIHtcbiAgICBjb25zb2xlLndhcm4oV0FSTklOR19NRVNTQUdFKTtcbiAgfVxuXG4gIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHN0eWxlUmVzdCksIHt9LCB7XG4gICAgd2lkdGg6IGF0dHJXaWR0aCB8fCBzdHlsZVdpZHRoXG4gIH0pO1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwid3JhcFdpdGhUYWJsZVJvd1wiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlUYWJsZUhlYWRlciA9IGZ1bmN0aW9uIEV1aVRhYmxlSGVhZGVyKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgX3JlZiR3cmFwV2l0aFRhYmxlUm93ID0gX3JlZi53cmFwV2l0aFRhYmxlUm93LFxuICAgICAgd3JhcFdpdGhUYWJsZVJvdyA9IF9yZWYkd3JhcFdpdGhUYWJsZVJvdyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYkd3JhcFdpdGhUYWJsZVJvdyxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInRoZWFkXCIsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZVxuICB9LCByZXN0KSwgd3JhcFdpdGhUYWJsZVJvdyA/IF9fX0Vtb3Rpb25KU1goXCJ0clwiLCBudWxsLCBjaGlsZHJlbikgOiBjaGlsZHJlbik7XG59O1xuRXVpVGFibGVIZWFkZXIucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICAgKiBDaGlsZHJlbiBtdXN0IGJlIHZhbGlkIERPTSBzdHJ1Y3R1cmUgcmVzaWRpbmcgd2l0aGluIGA8dGhlYWQ+YC5cbiAgICAgICAqIFVzZSBgPHRkPiB8IDx0aD5gIGJ5IGRlZmF1bHQsIG9yIGA8dHI+PHRoLz48L3RyPmAgd2hlbiBgd3JhcFdpdGhUYWJsZVJvdz1mYWxzZWBcbiAgICAgICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAgICAgKiBBdXRvbWF0aWNhbGx5IGFkZHMgYSB3cmFwcGluZyBgPHRyPmAgZWxlbWVudCBhcm91bmQgdGhlIGNoaWxkcmVuXG4gICAgICAgKi9cbiAgd3JhcFdpdGhUYWJsZVJvdzogUHJvcFR5cGVzLmJvb2xcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImFsaWduXCIsIFwib25Tb3J0XCIsIFwiaXNTb3J0ZWRcIiwgXCJpc1NvcnRBc2NlbmRpbmdcIiwgXCJjbGFzc05hbWVcIiwgXCJzY29wZVwiLCBcIm1vYmlsZU9wdGlvbnNcIiwgXCJ3aWR0aFwiLCBcInN0eWxlXCIsIFwicmVhZE9ubHlcIiwgXCJkZXNjcmlwdGlvblwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IEV1aVNjcmVlblJlYWRlck9ubHkgfSBmcm9tICcuLi9hY2Nlc3NpYmlsaXR5JztcbmltcG9ydCB7IEV1aUljb24gfSBmcm9tICcuLi9pY29uJztcbmltcG9ydCB7IHJlc29sdmVXaWR0aEFzU3R5bGUgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IEV1aUlubmVyVGV4dCB9IGZyb20gJy4uL2lubmVyX3RleHQnO1xuaW1wb3J0IHsgTEVGVF9BTElHTk1FTlQsIFJJR0hUX0FMSUdOTUVOVCwgQ0VOVEVSX0FMSUdOTUVOVCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aUkxOG4gfSBmcm9tICcuLi9pMThuJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBDZWxsQ29udGVudHMgPSBmdW5jdGlvbiBDZWxsQ29udGVudHMoX3JlZikge1xuICB2YXIgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBkZXNjcmlwdGlvbiA9IF9yZWYuZGVzY3JpcHRpb24sXG4gICAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBpc1NvcnRlZCA9IF9yZWYuaXNTb3J0ZWQsXG4gICAgICBpc1NvcnRBc2NlbmRpbmcgPSBfcmVmLmlzU29ydEFzY2VuZGluZyxcbiAgICAgIHNob3dTb3J0TXNnID0gX3JlZi5zaG93U29ydE1zZztcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZVxuICB9LCBfX19FbW90aW9uSlNYKEV1aUlubmVyVGV4dCwgbnVsbCwgZnVuY3Rpb24gKHJlZiwgaW5uZXJUZXh0KSB7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgdG9rZW46IFwiZXVpVGFibGVIZWFkZXJDZWxsLnRpdGxlVGV4dFdpdGhEZXNjXCIsXG4gICAgICBkZWZhdWx0OiBcIntpbm5lclRleHR9OyB7ZGVzY3JpcHRpb259XCIsXG4gICAgICB2YWx1ZXM6IHtcbiAgICAgICAgaW5uZXJUZXh0OiBpbm5lclRleHQsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvblxuICAgICAgfVxuICAgIH0sIGZ1bmN0aW9uICh0aXRsZVRleHRXaXRoRGVzYykge1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgICAgdGl0bGU6IGRlc2NyaXB0aW9uID8gdGl0bGVUZXh0V2l0aERlc2MgOiBpbm5lclRleHQsXG4gICAgICAgIHJlZjogcmVmLFxuICAgICAgICBjbGFzc05hbWU6IFwiZXVpVGFibGVDZWxsQ29udGVudF9fdGV4dFwiXG4gICAgICB9LCBjaGlsZHJlbik7XG4gICAgfSk7XG4gIH0pLCBkZXNjcmlwdGlvbiAmJiBfX19FbW90aW9uSlNYKEV1aVNjcmVlblJlYWRlck9ubHksIG51bGwsIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIG51bGwsIGRlc2NyaXB0aW9uKSksIHNob3dTb3J0TXNnICYmIGlzU29ydGVkICYmIF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlUYWJsZVNvcnRJY29uXCIsXG4gICAgdHlwZTogaXNTb3J0QXNjZW5kaW5nID8gJ3NvcnRVcCcgOiAnc29ydERvd24nLFxuICAgIHNpemU6IFwibVwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgRXVpVGFibGVIZWFkZXJDZWxsID0gZnVuY3Rpb24gRXVpVGFibGVIZWFkZXJDZWxsKF9yZWYyKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYyLmNoaWxkcmVuLFxuICAgICAgX3JlZjIkYWxpZ24gPSBfcmVmMi5hbGlnbixcbiAgICAgIGFsaWduID0gX3JlZjIkYWxpZ24gPT09IHZvaWQgMCA/IExFRlRfQUxJR05NRU5UIDogX3JlZjIkYWxpZ24sXG4gICAgICBvblNvcnQgPSBfcmVmMi5vblNvcnQsXG4gICAgICBpc1NvcnRlZCA9IF9yZWYyLmlzU29ydGVkLFxuICAgICAgaXNTb3J0QXNjZW5kaW5nID0gX3JlZjIuaXNTb3J0QXNjZW5kaW5nLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZjIuY2xhc3NOYW1lLFxuICAgICAgc2NvcGUgPSBfcmVmMi5zY29wZSxcbiAgICAgIF9yZWYyJG1vYmlsZU9wdGlvbnMgPSBfcmVmMi5tb2JpbGVPcHRpb25zLFxuICAgICAgbW9iaWxlT3B0aW9ucyA9IF9yZWYyJG1vYmlsZU9wdGlvbnMgPT09IHZvaWQgMCA/IHtcbiAgICBzaG93OiB0cnVlXG4gIH0gOiBfcmVmMiRtb2JpbGVPcHRpb25zLFxuICAgICAgd2lkdGggPSBfcmVmMi53aWR0aCxcbiAgICAgIHN0eWxlID0gX3JlZjIuc3R5bGUsXG4gICAgICByZWFkT25seSA9IF9yZWYyLnJlYWRPbmx5LFxuICAgICAgZGVzY3JpcHRpb24gPSBfcmVmMi5kZXNjcmlwdGlvbixcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZjIsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUYWJsZUhlYWRlckNlbGwnLCBjbGFzc05hbWUsIHtcbiAgICAnZXVpVGFibGVIZWFkZXJDZWxsLS1oaWRlRm9yRGVza3RvcCc6IG1vYmlsZU9wdGlvbnMub25seSxcbiAgICAnZXVpVGFibGVIZWFkZXJDZWxsLS1oaWRlRm9yTW9iaWxlJzogIW1vYmlsZU9wdGlvbnMuc2hvd1xuICB9KTtcbiAgdmFyIGNvbnRlbnRDbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpVGFibGVDZWxsQ29udGVudCcsIGNsYXNzTmFtZSwge1xuICAgICdldWlUYWJsZUNlbGxDb250ZW50LS1hbGlnblJpZ2h0JzogYWxpZ24gPT09IFJJR0hUX0FMSUdOTUVOVCxcbiAgICAnZXVpVGFibGVDZWxsQ29udGVudC0tYWxpZ25DZW50ZXInOiBhbGlnbiA9PT0gQ0VOVEVSX0FMSUdOTUVOVFxuICB9KTtcbiAgdmFyIHN0eWxlT2JqID0gcmVzb2x2ZVdpZHRoQXNTdHlsZShzdHlsZSwgd2lkdGgpO1xuICB2YXIgQ2VsbENvbXBvbmVudCA9IGNoaWxkcmVuID8gJ3RoJyA6ICd0ZCc7XG4gIHZhciBjZWxsU2NvcGUgPSBDZWxsQ29tcG9uZW50ID09PSAndGgnID8gc2NvcGUgIT09IG51bGwgJiYgc2NvcGUgIT09IHZvaWQgMCA/IHNjb3BlIDogJ2NvbCcgOiB1bmRlZmluZWQ7IC8vIGBzY29wZWAgaXMgb25seSB2YWxpZCBvbiBgdGhgIGVsZW1lbnRzXG5cbiAgaWYgKG9uU29ydCB8fCBpc1NvcnRlZCkge1xuICAgIHZhciBidXR0b25DbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpVGFibGVIZWFkZXJCdXR0b24nLCB7XG4gICAgICAnZXVpVGFibGVIZWFkZXJCdXR0b24taXNTb3J0ZWQnOiBpc1NvcnRlZFxuICAgIH0pO1xuICAgIHZhciBhcmlhU29ydFZhbHVlID0gJ25vbmUnO1xuXG4gICAgaWYgKGlzU29ydGVkKSB7XG4gICAgICBhcmlhU29ydFZhbHVlID0gaXNTb3J0QXNjZW5kaW5nID8gJ2FzY2VuZGluZycgOiAnZGVzY2VuZGluZyc7XG4gICAgfVxuXG4gICAgdmFyIGNlbGxDb250ZW50cyA9IF9fX0Vtb3Rpb25KU1goQ2VsbENvbnRlbnRzLCB7XG4gICAgICBjbGFzc05hbWU6IGNvbnRlbnRDbGFzc2VzLFxuICAgICAgZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uLFxuICAgICAgc2hvd1NvcnRNc2c6IHRydWUsXG4gICAgICBjaGlsZHJlbjogY2hpbGRyZW4sXG4gICAgICBpc1NvcnRlZDogaXNTb3J0ZWQsXG4gICAgICBpc1NvcnRBc2NlbmRpbmc6IGlzU29ydEFzY2VuZGluZ1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goQ2VsbENvbXBvbmVudCwgX2V4dGVuZHMoe1xuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgc2NvcGU6IGNlbGxTY29wZSxcbiAgICAgIHJvbGU6IFwiY29sdW1uaGVhZGVyXCIsXG4gICAgICBcImFyaWEtc29ydFwiOiBhcmlhU29ydFZhbHVlLFxuICAgICAgXCJhcmlhLWxpdmVcIjogXCJwb2xpdGVcIixcbiAgICAgIHN0eWxlOiBzdHlsZU9ialxuICAgIH0sIHJlc3QpLCBvblNvcnQgJiYgIXJlYWRPbmx5ID8gX19fRW1vdGlvbkpTWChcImJ1dHRvblwiLCB7XG4gICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgY2xhc3NOYW1lOiBidXR0b25DbGFzc2VzLFxuICAgICAgb25DbGljazogb25Tb3J0LFxuICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcInRhYmxlSGVhZGVyU29ydEJ1dHRvblwiXG4gICAgfSwgY2VsbENvbnRlbnRzKSA6IGNlbGxDb250ZW50cyk7XG4gIH1cblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChDZWxsQ29tcG9uZW50LCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIHNjb3BlOiBjZWxsU2NvcGUsXG4gICAgcm9sZTogXCJjb2x1bW5oZWFkZXJcIixcbiAgICBzdHlsZTogc3R5bGVPYmpcbiAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goQ2VsbENvbnRlbnRzLCB7XG4gICAgY2xhc3NOYW1lOiBjb250ZW50Q2xhc3NlcyxcbiAgICBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb24sXG4gICAgc2hvd1NvcnRNc2c6IGZhbHNlLFxuICAgIGNoaWxkcmVuOiBjaGlsZHJlbixcbiAgICBpc1NvcnRlZDogaXNTb3J0ZWQsXG4gICAgaXNTb3J0QXNjZW5kaW5nOiBpc1NvcnRBc2NlbmRpbmdcbiAgfSkpO1xufTtcbkV1aVRhYmxlSGVhZGVyQ2VsbC5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgYWxpZ246IFByb3BUeXBlcy5vbmVPZihbXCJsZWZ0XCIsIFwicmlnaHRcIiwgXCJjZW50ZXJcIl0pLFxuICBpc1NvcnRBc2NlbmRpbmc6IFByb3BUeXBlcy5ib29sLFxuICBpc1NvcnRlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICAgKiBNb2JpbGUgb3B0aW9ucyBmb3IgZGlzcGxheWluZyBkaWZmZXJlbnRseSBhdCBzbWFsbCBzY3JlZW5zXG4gICAgICAgKi9cbiAgbW9iaWxlT3B0aW9uczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAvKipcbiAgICAgICAgICAgKiBJZiBmYWxzZSwgd2lsbCBub3QgcmVuZGVyIHRoZSBjb2x1bW4gYXQgYWxsIGZvciBtb2JpbGVcbiAgICAgICAgICAgKi9cbiAgICBzaG93OiBQcm9wVHlwZXMuYm9vbCxcblxuICAgIC8qKlxuICAgICAgICAgICAqIE9ubHkgc2hvdyBmb3IgbW9iaWxlPyBJZiB0cnVlLCB3aWxsIG5vdCByZW5kZXIgdGhlIGNvbHVtbiBhdCBhbGxcbiAgICAgICAgICAgKiBmb3IgZGVza3RvcFxuICAgICAgICAgICAqL1xuICAgIG9ubHk6IFByb3BUeXBlcy5ib29sXG4gIH0pLFxuICBvblNvcnQ6IFByb3BUeXBlcy5mdW5jLFxuICBzY29wZTogUHJvcFR5cGVzLm9uZU9mKFtcImNvbFwiLCBcInJvd1wiLCBcImNvbGdyb3VwXCIsIFwicm93Z3JvdXBcIl0pLFxuICB3aWR0aDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWRdKSxcbiAgZGVzY3JpcHRpb246IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICAgKiBTaG93cyB0aGUgc29ydCBpbmRpY2F0b3IgYnV0IHJlbW92ZXMgdGhlIGJ1dHRvblxuICAgICAgICovXG4gIHJlYWRPbmx5OiBQcm9wVHlwZXMuYm9vbFxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwic2NvcGVcIiwgXCJzdHlsZVwiLCBcIndpZHRoXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgcmVzb2x2ZVdpZHRoQXNTdHlsZSB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpVGFibGVIZWFkZXJDZWxsQ2hlY2tib3ggPSBmdW5jdGlvbiBFdWlUYWJsZUhlYWRlckNlbGxDaGVja2JveChfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIF9yZWYkc2NvcGUgPSBfcmVmLnNjb3BlLFxuICAgICAgc2NvcGUgPSBfcmVmJHNjb3BlID09PSB2b2lkIDAgPyAnY29sJyA6IF9yZWYkc2NvcGUsXG4gICAgICBzdHlsZSA9IF9yZWYuc3R5bGUsXG4gICAgICB3aWR0aCA9IF9yZWYud2lkdGgsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUYWJsZUhlYWRlckNlbGxDaGVja2JveCcsIGNsYXNzTmFtZSk7XG4gIHZhciBzdHlsZU9iaiA9IHJlc29sdmVXaWR0aEFzU3R5bGUoc3R5bGUsIHdpZHRoKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJ0aFwiLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIHNjb3BlOiBzY29wZSxcbiAgICBzdHlsZTogc3R5bGVPYmpcbiAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlUYWJsZUNlbGxDb250ZW50XCJcbiAgfSwgY2hpbGRyZW4pKTtcbn07XG5FdWlUYWJsZUhlYWRlckNlbGxDaGVja2JveC5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgd2lkdGg6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkXSksXG4gIHNjb3BlOiBQcm9wVHlwZXMub25lT2YoW1wiY29sXCIsIFwicm93XCIsIFwiY29sZ3JvdXBcIiwgXCJyb3dncm91cFwiXSlcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVRhYmxlSGVhZGVyTW9iaWxlID0gZnVuY3Rpb24gRXVpVGFibGVIZWFkZXJNb2JpbGUoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUYWJsZUhlYWRlck1vYmlsZScsIGNsYXNzTmFtZSk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgfSwgcmVzdCksIGNoaWxkcmVuKTtcbn07XG5FdWlUYWJsZUhlYWRlck1vYmlsZS5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZ1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG52YXIgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwiYW5jaG9yUG9zaXRpb25cIiwgXCJpdGVtc1wiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBFdWlCdXR0b25FbXB0eSB9IGZyb20gJy4uLy4uL2J1dHRvbi9idXR0b25fZW1wdHknO1xuaW1wb3J0IHsgRXVpUG9wb3ZlciB9IGZyb20gJy4uLy4uL3BvcG92ZXInO1xuaW1wb3J0IHsgRXVpQ29udGV4dE1lbnVQYW5lbCB9IGZyb20gJy4uLy4uL2NvbnRleHRfbWVudSc7XG5pbXBvcnQgeyBFdWlJMThuIH0gZnJvbSAnLi4vLi4vaTE4bic7XG5pbXBvcnQgeyBFdWlUYWJsZVNvcnRNb2JpbGVJdGVtIH0gZnJvbSAnLi90YWJsZV9zb3J0X21vYmlsZV9pdGVtJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVRhYmxlU29ydE1vYmlsZSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoRXVpVGFibGVTb3J0TW9iaWxlLCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aVRhYmxlU29ydE1vYmlsZSk7XG5cbiAgZnVuY3Rpb24gRXVpVGFibGVTb3J0TW9iaWxlKCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlUYWJsZVNvcnRNb2JpbGUpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwuYXBwbHkoX3N1cGVyLCBbdGhpc10uY29uY2F0KGFyZ3MpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzdGF0ZVwiLCB7XG4gICAgICBpc1BvcG92ZXJPcGVuOiBmYWxzZVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uQnV0dG9uQ2xpY2tcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBpc1BvcG92ZXJPcGVuOiAhX3RoaXMuc3RhdGUuaXNQb3BvdmVyT3BlblxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiY2xvc2VQb3BvdmVyXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgaXNQb3BvdmVyT3BlbjogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEV1aVRhYmxlU29ydE1vYmlsZSwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMuY2xhc3NOYW1lLFxuICAgICAgICAgIGFuY2hvclBvc2l0aW9uID0gX3RoaXMkcHJvcHMuYW5jaG9yUG9zaXRpb24sXG4gICAgICAgICAgaXRlbXMgPSBfdGhpcyRwcm9wcy5pdGVtcyxcbiAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzLCBfZXhjbHVkZWQpO1xuXG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRhYmxlU29ydE1vYmlsZScsIGNsYXNzTmFtZSk7XG5cbiAgICAgIHZhciBtb2JpbGVTb3J0QnV0dG9uID0gX19fRW1vdGlvbkpTWChFdWlCdXR0b25FbXB0eSwge1xuICAgICAgICBpY29uVHlwZTogXCJhcnJvd0Rvd25cIixcbiAgICAgICAgaWNvblNpZGU6IFwicmlnaHRcIixcbiAgICAgICAgb25DbGljazogdGhpcy5vbkJ1dHRvbkNsaWNrLmJpbmQodGhpcyksXG4gICAgICAgIGZsdXNoOiBcInJpZ2h0XCIsXG4gICAgICAgIHNpemU6IFwieHNcIlxuICAgICAgfSwgX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgIHRva2VuOiBcImV1aVRhYmxlU29ydE1vYmlsZS5zb3J0aW5nXCIsXG4gICAgICAgIGRlZmF1bHQ6IFwiU29ydGluZ1wiXG4gICAgICB9KSk7XG5cbiAgICAgIHZhciBtb2JpbGVTb3J0UG9wb3ZlciA9IF9fX0Vtb3Rpb25KU1goRXVpUG9wb3ZlciwgX2V4dGVuZHMoe1xuICAgICAgICBidXR0b246IG1vYmlsZVNvcnRCdXR0b24sXG4gICAgICAgIGlzT3BlbjogdGhpcy5zdGF0ZS5pc1BvcG92ZXJPcGVuLFxuICAgICAgICBjbG9zZVBvcG92ZXI6IHRoaXMuY2xvc2VQb3BvdmVyLFxuICAgICAgICBhbmNob3JQb3NpdGlvbjogYW5jaG9yUG9zaXRpb24gfHwgJ2Rvd25SaWdodCcsXG4gICAgICAgIHBhbmVsUGFkZGluZ1NpemU6IFwibm9uZVwiXG4gICAgICB9LCByZXN0KSwgX19fRW1vdGlvbkpTWChFdWlDb250ZXh0TWVudVBhbmVsLCB7XG4gICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgbWluV2lkdGg6IDIwMFxuICAgICAgICB9LFxuICAgICAgICBpdGVtczogaXRlbXMgJiYgaXRlbXMubGVuZ3RoID8gaXRlbXMubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpVGFibGVTb3J0TW9iaWxlSXRlbSwge1xuICAgICAgICAgICAga2V5OiBpdGVtLmtleSxcbiAgICAgICAgICAgIG9uU29ydDogaXRlbS5vblNvcnQsXG4gICAgICAgICAgICBpc1NvcnRlZDogaXRlbS5pc1NvcnRlZCxcbiAgICAgICAgICAgIGlzU29ydEFzY2VuZGluZzogaXRlbS5pc1NvcnRBc2NlbmRpbmdcbiAgICAgICAgICB9LCBpdGVtLm5hbWUpO1xuICAgICAgICB9KSA6IHVuZGVmaW5lZFxuICAgICAgfSkpO1xuXG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICAgICAgfSwgbW9iaWxlU29ydFBvcG92ZXIpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlUYWJsZVNvcnRNb2JpbGU7XG59KENvbXBvbmVudCk7XG5FdWlUYWJsZVNvcnRNb2JpbGUucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGFuY2hvclBvc2l0aW9uOiBQcm9wVHlwZXMuYW55LFxuICBpdGVtczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBuYW1lOiBQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLFxuICAgIGtleTogUHJvcFR5cGVzLmFueSxcbiAgICBvblNvcnQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIGlzU29ydGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBpc1NvcnRBc2NlbmRpbmc6IFByb3BUeXBlcy5ib29sXG4gIH0pLmlzUmVxdWlyZWQpXG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJvblNvcnRcIiwgXCJpc1NvcnRlZFwiLCBcImlzU29ydEFzY2VuZGluZ1wiLCBcImNsYXNzTmFtZVwiLCBcImFyaWFMYWJlbFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IEV1aUNvbnRleHRNZW51SXRlbSB9IGZyb20gJy4uLy4uL2NvbnRleHRfbWVudSc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlUYWJsZVNvcnRNb2JpbGVJdGVtID0gZnVuY3Rpb24gRXVpVGFibGVTb3J0TW9iaWxlSXRlbShfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBvblNvcnQgPSBfcmVmLm9uU29ydCxcbiAgICAgIGlzU29ydGVkID0gX3JlZi5pc1NvcnRlZCxcbiAgICAgIGlzU29ydEFzY2VuZGluZyA9IF9yZWYuaXNTb3J0QXNjZW5kaW5nLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBhcmlhTGFiZWwgPSBfcmVmLmFyaWFMYWJlbCxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgc29ydEljb24gPSAnZW1wdHknO1xuXG4gIGlmIChpc1NvcnRlZCkge1xuICAgIHNvcnRJY29uID0gaXNTb3J0QXNjZW5kaW5nID8gJ3NvcnRVcCcgOiAnc29ydERvd24nO1xuICB9XG5cbiAgdmFyIGJ1dHRvbkNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUYWJsZVNvcnRNb2JpbGVJdGVtJywgY2xhc3NOYW1lLCB7XG4gICAgJ2V1aVRhYmxlU29ydE1vYmlsZUl0ZW0taXNTb3J0ZWQnOiBpc1NvcnRlZFxuICB9KTtcbiAgdmFyIGNvbHVtblRpdGxlID0gYXJpYUxhYmVsID8gYXJpYUxhYmVsIDogY2hpbGRyZW47XG4gIHZhciBzdGF0ZWZ1bEFyaWFMYWJlbCA9IFwiU29ydCBcIi5jb25jYXQoY29sdW1uVGl0bGUsIFwiIFwiKS5jb25jYXQoaXNTb3J0QXNjZW5kaW5nID8gJ2Rlc2NlbmRpbmcnIDogJ2FzY2VuZGluZycpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlDb250ZXh0TWVudUl0ZW0sIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGJ1dHRvbkNsYXNzZXMsXG4gICAgaWNvbjogc29ydEljb24sXG4gICAgb25DbGljazogb25Tb3J0LFxuICAgIFwiYXJpYS1sYWJlbFwiOiBzdGF0ZWZ1bEFyaWFMYWJlbFxuICB9LCByZXN0KSwgY2hpbGRyZW4pO1xufTtcbkV1aVRhYmxlU29ydE1vYmlsZUl0ZW0ucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICAgKiBDYWxsYmFjayB0byBrbm93IHdoZW4gYW4gaXRlbSBoYXMgYmVlbiBjbGlja2VkXG4gICAgICovXG4gIG9uU29ydDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAgICogSW5kaWNhdGVzIGN1cnJlbnQgb3B0aW9uIGlzIHRoZSBzb3J0ZWQgb24gY29sdW1uXG4gICAgICovXG4gIGlzU29ydGVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgd2hpY2ggZGlyZWN0aW9uIHRoZSBjdXJyZW50IGNvbHVtbiBpcyBzb3J0ZWQgb25cbiAgICAgKi9cbiAgaXNTb3J0QXNjZW5kaW5nOiBQcm9wVHlwZXMuYm9vbCxcbiAgYXJpYUxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImlzU2VsZWN0ZWRcIiwgXCJpc1NlbGVjdGFibGVcIiwgXCJoYXNBY3Rpb25zXCIsIFwiaXNFeHBhbmRlZFJvd1wiLCBcImlzRXhwYW5kYWJsZVwiLCBcIm9uQ2xpY2tcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpVGFibGVSb3cgPSBmdW5jdGlvbiBFdWlUYWJsZVJvdyhfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIGlzU2VsZWN0ZWQgPSBfcmVmLmlzU2VsZWN0ZWQsXG4gICAgICBpc1NlbGVjdGFibGUgPSBfcmVmLmlzU2VsZWN0YWJsZSxcbiAgICAgIGhhc0FjdGlvbnMgPSBfcmVmLmhhc0FjdGlvbnMsXG4gICAgICBpc0V4cGFuZGVkUm93ID0gX3JlZi5pc0V4cGFuZGVkUm93LFxuICAgICAgaXNFeHBhbmRhYmxlID0gX3JlZi5pc0V4cGFuZGFibGUsXG4gICAgICBvbkNsaWNrID0gX3JlZi5vbkNsaWNrLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpVGFibGVSb3cnLCBjbGFzc05hbWUsIHtcbiAgICAnZXVpVGFibGVSb3ctaXNTZWxlY3RhYmxlJzogaXNTZWxlY3RhYmxlLFxuICAgICdldWlUYWJsZVJvdy1pc1NlbGVjdGVkJzogaXNTZWxlY3RlZCxcbiAgICAnZXVpVGFibGVSb3ctaGFzQWN0aW9ucyc6IGhhc0FjdGlvbnMsXG4gICAgJ2V1aVRhYmxlUm93LWlzRXhwYW5kZWRSb3cnOiBpc0V4cGFuZGVkUm93LFxuICAgICdldWlUYWJsZVJvdy1pc0V4cGFuZGFibGUnOiBpc0V4cGFuZGFibGUsXG4gICAgJ2V1aVRhYmxlUm93LWlzQ2xpY2thYmxlJzogb25DbGlja1xuICB9KTtcblxuICBpZiAoIW9uQ2xpY2spIHtcbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcInRyXCIsIF9leHRlbmRzKHtcbiAgICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICAgIH0sIHJlc3QpLCBjaGlsZHJlbik7XG4gIH1cblxuICB2YXIgb25LZXlEb3duID0gZnVuY3Rpb24gb25LZXlEb3duKGV2ZW50KSB7XG4gICAgLy8gUHJldmVudCBhIHNjcm9sbCBmcm9tIG9jY3VycmluZyBpZiB0aGUgdXNlciBoYXMgaGl0IHNwYWNlLlxuICAgIGlmIChldmVudC5rZXkgPT09IGtleXMuU1BBQ0UpIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH07XG5cbiAgdmFyIG9uS2V5VXAgPSBmdW5jdGlvbiBvbktleVVwKGV2ZW50KSB7XG4gICAgLy8gU3VwcG9ydCBrZXlib2FyZCBhY2Nlc3NpYmlsaXR5IGJ5IGVtdWxhdGluZyBtb3VzZSBjbGljayBvbiBFTlRFUiBvciBTUEFDRSBrZXlwcmVzcy5cbiAgICBpZiAoZXZlbnQua2V5ID09PSBrZXlzLkVOVEVSIHx8IGV2ZW50LmtleSA9PT0ga2V5cy5TUEFDRSkge1xuICAgICAgb25DbGljayhldmVudCk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwidHJcIiwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBvbkNsaWNrOiBvbkNsaWNrLFxuICAgIG9uS2V5RG93bjogb25LZXlEb3duLFxuICAgIG9uS2V5VXA6IG9uS2V5VXAsXG4gICAgdGFiSW5kZXg6IDBcbiAgfSwgcmVzdCksIGNoaWxkcmVuKTtcbn07XG5FdWlUYWJsZVJvdy5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIHRhYmxlIGhhcyBhIHNpbmdsZSBjb2x1bW4gb2YgY2hlY2tib3hlcyBmb3Igc2VsZWN0aW5nXG4gICAgICogcm93cyAoYWZmZWN0cyBtb2JpbGUgb25seSlcbiAgICAgKi9cbiAgaXNTZWxlY3RhYmxlOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgdGhlIGN1cnJlbnQgcm93IGhhcyBiZWVuIHNlbGVjdGVkXG4gICAgICovXG4gIGlzU2VsZWN0ZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIEluZGljYXRlcyBpZiB0aGUgdGFibGUgaGFzIGEgZGVkaWNhdGVkIGNvbHVtbiBmb3IgaWNvbi1vbmx5IGFjdGlvbnNcbiAgICAgKiAoYWZmZWN0cyBtb2JpbGUgb25seSlcbiAgICAgKi9cbiAgaGFzQWN0aW9uczogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZSByb3cgd2lsbCBoYXZlIGFuIGV4cGFuZGVkIHJvd1xuICAgICAqL1xuICBpc0V4cGFuZGFibGU6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIEluZGljYXRlcyBpZiB0aGUgcm93IHdpbGwgYmUgdGhlIGV4cGFuZGVkIHJvd1xuICAgICAqL1xuICBpc0V4cGFuZGVkUm93OiBQcm9wVHlwZXMuYm9vbCxcbiAgb25DbGljazogUHJvcFR5cGVzLmFueVxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImFsaWduXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJ0cnVuY2F0ZVRleHRcIiwgXCJzZXRTY29wZVJvd1wiLCBcInNob3dPbkhvdmVyXCIsIFwidGV4dE9ubHlcIiwgXCJoYXNBY3Rpb25zXCIsIFwiaXNFeHBhbmRlclwiLCBcInN0eWxlXCIsIFwid2lkdGhcIiwgXCJ2YWxpZ25cIiwgXCJtb2JpbGVPcHRpb25zXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgRnJhZ21lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IExFRlRfQUxJR05NRU5ULCBSSUdIVF9BTElHTk1FTlQsIENFTlRFUl9BTElHTk1FTlQsIHVzZUlzV2l0aGluQnJlYWtwb2ludHMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyByZXNvbHZlV2lkdGhBc1N0eWxlIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlUYWJsZVJvd0NlbGwgPSBmdW5jdGlvbiBFdWlUYWJsZVJvd0NlbGwoX3JlZikge1xuICB2YXIgX21vYmlsZU9wdGlvbnMkc2hvd09uLCBfbW9iaWxlT3B0aW9ucyR0cnVuY2E7XG5cbiAgdmFyIF9yZWYkYWxpZ24gPSBfcmVmLmFsaWduLFxuICAgICAgYWxpZ24gPSBfcmVmJGFsaWduID09PSB2b2lkIDAgPyBMRUZUX0FMSUdOTUVOVCA6IF9yZWYkYWxpZ24sXG4gICAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIHRydW5jYXRlVGV4dCA9IF9yZWYudHJ1bmNhdGVUZXh0LFxuICAgICAgc2V0U2NvcGVSb3cgPSBfcmVmLnNldFNjb3BlUm93LFxuICAgICAgc2hvd09uSG92ZXIgPSBfcmVmLnNob3dPbkhvdmVyLFxuICAgICAgX3JlZiR0ZXh0T25seSA9IF9yZWYudGV4dE9ubHksXG4gICAgICB0ZXh0T25seSA9IF9yZWYkdGV4dE9ubHkgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJHRleHRPbmx5LFxuICAgICAgaGFzQWN0aW9ucyA9IF9yZWYuaGFzQWN0aW9ucyxcbiAgICAgIGlzRXhwYW5kZXIgPSBfcmVmLmlzRXhwYW5kZXIsXG4gICAgICBzdHlsZSA9IF9yZWYuc3R5bGUsXG4gICAgICB3aWR0aCA9IF9yZWYud2lkdGgsXG4gICAgICBfcmVmJHZhbGlnbiA9IF9yZWYudmFsaWduLFxuICAgICAgdmFsaWduID0gX3JlZiR2YWxpZ24gPT09IHZvaWQgMCA/ICdtaWRkbGUnIDogX3JlZiR2YWxpZ24sXG4gICAgICBfcmVmJG1vYmlsZU9wdGlvbnMgPSBfcmVmLm1vYmlsZU9wdGlvbnMsXG4gICAgICBtb2JpbGVPcHRpb25zID0gX3JlZiRtb2JpbGVPcHRpb25zID09PSB2b2lkIDAgPyB7XG4gICAgc2hvdzogdHJ1ZVxuICB9IDogX3JlZiRtb2JpbGVPcHRpb25zLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBjZWxsQ2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRhYmxlUm93Q2VsbCcsIF9kZWZpbmVQcm9wZXJ0eSh7XG4gICAgJ2V1aVRhYmxlUm93Q2VsbC0taGFzQWN0aW9ucyc6IGhhc0FjdGlvbnMsXG4gICAgJ2V1aVRhYmxlUm93Q2VsbC0taXNFeHBhbmRlcic6IGlzRXhwYW5kZXIsXG4gICAgJ2V1aVRhYmxlUm93Q2VsbC0taGlkZUZvckRlc2t0b3AnOiBtb2JpbGVPcHRpb25zLm9ubHksXG4gICAgJ2V1aVRhYmxlUm93Q2VsbC0tZW5sYXJnZUZvck1vYmlsZSc6IG1vYmlsZU9wdGlvbnMuZW5sYXJnZVxuICB9LCBcImV1aVRhYmxlUm93Q2VsbC0tXCIuY29uY2F0KHZhbGlnbiksIHZhbGlnbikpO1xuICB2YXIgY29udGVudENsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUYWJsZUNlbGxDb250ZW50JywgY2xhc3NOYW1lLCB7XG4gICAgJ2V1aVRhYmxlQ2VsbENvbnRlbnQtLWFsaWduUmlnaHQnOiBhbGlnbiA9PT0gUklHSFRfQUxJR05NRU5ULFxuICAgICdldWlUYWJsZUNlbGxDb250ZW50LS1hbGlnbkNlbnRlcic6IGFsaWduID09PSBDRU5URVJfQUxJR05NRU5ULFxuICAgICdldWlUYWJsZUNlbGxDb250ZW50LS1zaG93T25Ib3Zlcic6IHNob3dPbkhvdmVyLFxuICAgICdldWlUYWJsZUNlbGxDb250ZW50LS10cnVuY2F0ZVRleHQnOiB0cnVuY2F0ZVRleHQsXG4gICAgLy8gV2UncmUgZG9pbmcgdGhpcyByaWdhbWFyb2xlIGluc3RlYWQgb2YgY3JlYXRpbmcgYGV1aVRhYmxlQ2VsbENvbnRlbnQtLXRleHRPbmx5YCBmb3IgQldDXG4gICAgLy8gcHVycG9zZXMgZm9yIHRoZSB0aW1lLWJlaW5nLlxuICAgICdldWlUYWJsZUNlbGxDb250ZW50LS1vdmVyZmxvd2luZ0NvbnRlbnQnOiB0ZXh0T25seSAhPT0gdHJ1ZVxuICB9KTtcbiAgdmFyIG1vYmlsZUNvbnRlbnRDbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpVGFibGVDZWxsQ29udGVudCcsIGNsYXNzTmFtZSwge1xuICAgICdldWlUYWJsZUNlbGxDb250ZW50LS1hbGlnblJpZ2h0JzogbW9iaWxlT3B0aW9ucy5hbGlnbiA9PT0gUklHSFRfQUxJR05NRU5UIHx8IGFsaWduID09PSBSSUdIVF9BTElHTk1FTlQsXG4gICAgJ2V1aVRhYmxlQ2VsbENvbnRlbnQtLWFsaWduQ2VudGVyJzogbW9iaWxlT3B0aW9ucy5hbGlnbiA9PT0gQ0VOVEVSX0FMSUdOTUVOVCB8fCBhbGlnbiA9PT0gQ0VOVEVSX0FMSUdOTUVOVCxcbiAgICAnZXVpVGFibGVDZWxsQ29udGVudC0tc2hvd09uSG92ZXInOiAoX21vYmlsZU9wdGlvbnMkc2hvd09uID0gbW9iaWxlT3B0aW9ucy5zaG93T25Ib3ZlcikgIT09IG51bGwgJiYgX21vYmlsZU9wdGlvbnMkc2hvd09uICE9PSB2b2lkIDAgPyBfbW9iaWxlT3B0aW9ucyRzaG93T24gOiBzaG93T25Ib3ZlcixcbiAgICAnZXVpVGFibGVDZWxsQ29udGVudC0tdHJ1bmNhdGVUZXh0JzogKF9tb2JpbGVPcHRpb25zJHRydW5jYSA9IG1vYmlsZU9wdGlvbnMudHJ1bmNhdGVUZXh0KSAhPT0gbnVsbCAmJiBfbW9iaWxlT3B0aW9ucyR0cnVuY2EgIT09IHZvaWQgMCA/IF9tb2JpbGVPcHRpb25zJHRydW5jYSA6IHRydW5jYXRlVGV4dCxcbiAgICAvLyBXZSdyZSBkb2luZyB0aGlzIHJpZ2FtYXJvbGUgaW5zdGVhZCBvZiBjcmVhdGluZyBgZXVpVGFibGVDZWxsQ29udGVudC0tdGV4dE9ubHlgIGZvciBCV0NcbiAgICAvLyBwdXJwb3NlcyBmb3IgdGhlIHRpbWUtYmVpbmcuXG4gICAgJ2V1aVRhYmxlQ2VsbENvbnRlbnQtLW92ZXJmbG93aW5nQ29udGVudCc6IG1vYmlsZU9wdGlvbnMudGV4dE9ubHkgIT09IHRydWUgfHwgdGV4dE9ubHkgIT09IHRydWVcbiAgfSk7XG4gIHZhciBjaGlsZENsYXNzZXMgPSBjbGFzc05hbWVzKHtcbiAgICBldWlUYWJsZUNlbGxDb250ZW50X190ZXh0OiB0ZXh0T25seSA9PT0gdHJ1ZSxcbiAgICBldWlUYWJsZUNlbGxDb250ZW50X19ob3Zlckl0ZW06IHNob3dPbkhvdmVyXG4gIH0pO1xuICB2YXIgd2lkdGhWYWx1ZSA9IHVzZUlzV2l0aGluQnJlYWtwb2ludHMoWyd4cycsICdzJ10pICYmIG1vYmlsZU9wdGlvbnMud2lkdGggPyBtb2JpbGVPcHRpb25zLndpZHRoIDogd2lkdGg7XG4gIHZhciBzdHlsZU9iaiA9IHJlc29sdmVXaWR0aEFzU3R5bGUoc3R5bGUsIHdpZHRoVmFsdWUpO1xuXG4gIGZ1bmN0aW9uIG1vZGlmeUNoaWxkcmVuKGNoaWxkcmVuKSB7XG4gICAgdmFyIG1vZGlmaWVkQ2hpbGRyZW4gPSBjaGlsZHJlbjtcblxuICAgIGlmICh0ZXh0T25seSA9PT0gdHJ1ZSkge1xuICAgICAgbW9kaWZpZWRDaGlsZHJlbiA9IF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBjaGlsZENsYXNzZXNcbiAgICAgIH0sIGNoaWxkcmVuKTtcbiAgICB9IGVsc2UgaWYgKCAvKiNfX1BVUkVfXyovUmVhY3QuaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pKSB7XG4gICAgICBtb2RpZmllZENoaWxkcmVuID0gUmVhY3QuQ2hpbGRyZW4ubWFwKGNoaWxkcmVuLCBmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGQsIHtcbiAgICAgICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMoY2hpbGQucHJvcHMuY2xhc3NOYW1lLCBjaGlsZENsYXNzZXMpXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1vZGlmaWVkQ2hpbGRyZW47XG4gIH1cblxuICB2YXIgY2hpbGRyZW5Ob2RlID0gbW9kaWZ5Q2hpbGRyZW4oY2hpbGRyZW4pO1xuICB2YXIgaGlkZUZvck1vYmlsZUNsYXNzZXMgPSAnZXVpVGFibGVSb3dDZWxsLS1oaWRlRm9yTW9iaWxlJztcbiAgdmFyIHNob3dGb3JNb2JpbGVDbGFzc2VzID0gJ2V1aVRhYmxlUm93Q2VsbC0taGlkZUZvckRlc2t0b3AnO1xuICB2YXIgRWxlbWVudCA9IHNldFNjb3BlUm93ID8gJ3RoJyA6ICd0ZCc7XG5cbiAgdmFyIHNoYXJlZFByb3BzID0gX29iamVjdFNwcmVhZCh7XG4gICAgc2NvcGU6IHNldFNjb3BlUm93ID8gJ3JvdycgOiB1bmRlZmluZWQsXG4gICAgc3R5bGU6IHN0eWxlT2JqXG4gIH0sIHJlc3QpO1xuXG4gIGlmIChtb2JpbGVPcHRpb25zLnNob3cgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRWxlbWVudCwgX2V4dGVuZHMoe1xuICAgICAgY2xhc3NOYW1lOiBcIlwiLmNvbmNhdChjZWxsQ2xhc3NlcywgXCIgXCIpLmNvbmNhdChoaWRlRm9yTW9iaWxlQ2xhc3NlcylcbiAgICB9LCBzaGFyZWRQcm9wcyksIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgY2xhc3NOYW1lOiBjb250ZW50Q2xhc3Nlc1xuICAgIH0sIGNoaWxkcmVuTm9kZSkpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKEVsZW1lbnQsIF9leHRlbmRzKHtcbiAgICAgIGNsYXNzTmFtZTogY2VsbENsYXNzZXNcbiAgICB9LCBzaGFyZWRQcm9wcyksIG1vYmlsZU9wdGlvbnMuaGVhZGVyICYmIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgY2xhc3NOYW1lOiBcImV1aVRhYmxlUm93Q2VsbF9fbW9iaWxlSGVhZGVyIFwiLmNvbmNhdChzaG93Rm9yTW9iaWxlQ2xhc3NlcylcbiAgICB9LCBtb2JpbGVPcHRpb25zLmhlYWRlciksIG1vYmlsZU9wdGlvbnMucmVuZGVyID8gX19fRW1vdGlvbkpTWChGcmFnbWVudCwgbnVsbCwgX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICBjbGFzc05hbWU6IFwiXCIuY29uY2F0KG1vYmlsZUNvbnRlbnRDbGFzc2VzLCBcIiBcIikuY29uY2F0KHNob3dGb3JNb2JpbGVDbGFzc2VzKVxuICAgIH0sIG1vZGlmeUNoaWxkcmVuKG1vYmlsZU9wdGlvbnMucmVuZGVyKSksIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgY2xhc3NOYW1lOiBcIlwiLmNvbmNhdChjb250ZW50Q2xhc3NlcywgXCIgXCIpLmNvbmNhdChoaWRlRm9yTW9iaWxlQ2xhc3NlcylcbiAgICB9LCBjaGlsZHJlbk5vZGUpKSA6IF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgY2xhc3NOYW1lOiBjb250ZW50Q2xhc3Nlc1xuICAgIH0sIGNoaWxkcmVuTm9kZSkpO1xuICB9XG59O1xuRXVpVGFibGVSb3dDZWxsLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAqIFZlcnRpY2FsIGFsaWdubWVudCBvZiB0aGUgY29udGVudCBpbiB0aGUgY2VsbFxuICAgICAqL1xuICB2YWxpZ246IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGNlbGwgc2hvdWxkIGJlIG1hcmtlZCBhcyB0aGUgaGVhZGluZyBmb3IgaXRzIHJvd1xuICAgICAqL1xuICBzZXRTY29wZVJvdzogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZSBjb2x1bW4gaXMgZGVkaWNhdGVkIHRvIGljb24tb25seSBhY3Rpb25zIChjdXJyZW50bHlcbiAgICAgKiBhZmZlY3RzIG1vYmlsZSBvbmx5KVxuICAgICAqL1xuICBoYXNBY3Rpb25zOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIGNvbHVtbiBpcyBkZWRpY2F0ZWQgYXMgdGhlIGV4cGFuZGFibGUgcm93IHRvZ2dsZVxuICAgICAqL1xuICBpc0V4cGFuZGVyOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBNb2JpbGUgb3B0aW9ucyBmb3IgZGlzcGxheWluZyBkaWZmZXJlbnRseSBhdCBzbWFsbCBzY3JlZW5zO1xuICAgICAqIFNlZSAjRXVpVGFibGVSb3dDZWxsTW9iaWxlT3B0aW9uc1NoYXBlXG4gICAgICovXG4gIG1vYmlsZU9wdGlvbnM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgLyoqXG4gICAgICAgKiBJZiBmYWxzZSwgd2lsbCBub3QgcmVuZGVyIHRoZSBjZWxsIGF0IGFsbCBmb3IgbW9iaWxlXG4gICAgICAgKi9cbiAgICBzaG93OiBQcm9wVHlwZXMuYm9vbCxcblxuICAgIC8qKlxuICAgICAgICogT25seSBzaG93IGZvciBtb2JpbGU/IElmIHRydWUsIHdpbGwgbm90IHJlbmRlciB0aGUgY29sdW1uIGF0IGFsbCBmb3IgZGVza3RvcFxuICAgICAgICovXG4gICAgb25seTogUHJvcFR5cGVzLmJvb2wsXG5cbiAgICAvKipcbiAgICAgICAqIEN1c3RvbSByZW5kZXIvY2hpbGRyZW4gaWYgZGlmZmVyZW50IGZyb20gZGVza3RvcFxuICAgICAgICovXG4gICAgcmVuZGVyOiBQcm9wVHlwZXMubm9kZSxcblxuICAgIC8qKlxuICAgICAgICogVGhlIGNvbHVtbidzIGhlYWRlciBmb3IgdXNlIGluIG1vYmlsZSB2aWV3IChhdXRvbWF0aWNhbGx5IHBhc3NlZCBkb3duXG4gICAgICAgKiB3aGVuIHVzaW5nIGBFdWlCYXNpY1RhYmxlYCkuXG4gICAgICAgKiBPciBwYXNzIGBmYWxzZWAgdG8gbm90IHNob3cgYSBoZWFkZXIgYXQgYWxsLlxuICAgICAgICovXG4gICAgaGVhZGVyOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkXSksXG5cbiAgICAvKipcbiAgICAgICAqIEluY3JlYXNlIHRleHQgc2l6ZSBjb21wYXJlZCB0byByZXN0IG9mIGNlbGxzXG4gICAgICAgKi9cbiAgICBlbmxhcmdlOiBQcm9wVHlwZXMuYm9vbCxcblxuICAgIC8qKlxuICAgICAgICogQXBwbGllcyB0aGUgdmFsdWUgdG8gdGhlIHdpZHRoIG9mIHRoZSBjZWxsIGluIG1vYmlsZSB2aWV3ICh0eXBpY2FsbHkgNTAlKVxuICAgICAgICovXG4gICAgd2lkdGg6IFByb3BUeXBlcy5hbnksXG5cbiAgICAvKipcbiAgICAgICAqIEhvcml6b250YWwgYWxpZ25tZW50IG9mIHRoZSB0ZXh0IGluIHRoZSBjZWxsXG4gICAgICAgKi9cbiAgICBhbGlnbjogUHJvcFR5cGVzLm9uZU9mKFtcImxlZnRcIiwgXCJyaWdodFwiLCBcImNlbnRlclwiXSksXG5cbiAgICAvKipcbiAgICAgICAqIF9TaG91bGQgb25seSBiZSB1c2VkIGZvciBhY3Rpb24gY2VsbHNfXG4gICAgICAgKi9cbiAgICBzaG93T25Ib3ZlcjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgICAvKipcbiAgICAgICAqIFNldHRpbmcgYHRleHRPbmx5YCB0byBgZmFsc2VgIHdpbGwgYnJlYWsgd29yZHMgdW5uZWNlc3NhcmlseSBvbiBGRiBhbmRcbiAgICAgICAqIElFLiAgVG8gY29tYmF0IHRoaXMgcHJvYmxlbSBvbiBGRiwgd3JhcCBjb250ZW50cyB3aXRoIHRoZSBjc3MgdXRpbGl0eVxuICAgICAgICogYC5ldWktdGV4dEJyZWFrV29yZGAuXG4gICAgICAgKi9cbiAgICB0ZXh0T25seTogUHJvcFR5cGVzLmJvb2wsXG5cbiAgICAvKipcbiAgICAgICAqIERvbid0IGFsbG93IGxpbmUgYnJlYWtzIHdpdGhpbiBjZWxsc1xuICAgICAgICovXG4gICAgdHJ1bmNhdGVUZXh0OiBQcm9wVHlwZXMuYm9vbFxuICB9KSxcblxuICAvKipcbiAgICAgKiBIb3Jpem9udGFsIGFsaWdubWVudCBvZiB0aGUgdGV4dCBpbiB0aGUgY2VsbFxuICAgICAqL1xuICBhbGlnbjogUHJvcFR5cGVzLm9uZU9mKFtcImxlZnRcIiwgXCJyaWdodFwiLCBcImNlbnRlclwiXSksXG5cbiAgLyoqXG4gICAgICogX1Nob3VsZCBvbmx5IGJlIHVzZWQgZm9yIGFjdGlvbiBjZWxsc19cbiAgICAgKi9cbiAgc2hvd09uSG92ZXI6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIFNldHRpbmcgYHRleHRPbmx5YCB0byBgZmFsc2VgIHdpbGwgYnJlYWsgd29yZHMgdW5uZWNlc3NhcmlseSBvbiBGRiBhbmRcbiAgICAgKiBJRS4gIFRvIGNvbWJhdCB0aGlzIHByb2JsZW0gb24gRkYsIHdyYXAgY29udGVudHMgd2l0aCB0aGUgY3NzIHV0aWxpdHlcbiAgICAgKiBgLmV1aS10ZXh0QnJlYWtXb3JkYC5cbiAgICAgKi9cbiAgdGV4dE9ubHk6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIERvbid0IGFsbG93IGxpbmUgYnJlYWtzIHdpdGhpbiBjZWxsc1xuICAgICAqL1xuICB0cnVuY2F0ZVRleHQ6IFByb3BUeXBlcy5ib29sLFxuICB3aWR0aDogUHJvcFR5cGVzLmFueVxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpVGFibGVSb3dDZWxsQ2hlY2tib3ggPSBmdW5jdGlvbiBFdWlUYWJsZVJvd0NlbGxDaGVja2JveChfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRhYmxlUm93Q2VsbENoZWNrYm94JywgY2xhc3NOYW1lKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJ0ZFwiLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gIH0sIHJlc3QpLCBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpVGFibGVDZWxsQ29udGVudFwiXG4gIH0sIGNoaWxkcmVuKSk7XG59O1xuRXVpVGFibGVSb3dDZWxsQ2hlY2tib3gucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbn07IiwgImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxudmFyIF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcImxvYWRpbmdcIiwgXCJpdGVtc1wiLCBcIml0ZW1JZFwiLCBcImNvbHVtbnNcIiwgXCJwYWdpbmF0aW9uXCIsIFwic29ydGluZ1wiLCBcInNlbGVjdGlvblwiLCBcIm9uQ2hhbmdlXCIsIFwiZXJyb3JcIiwgXCJub0l0ZW1zTWVzc2FnZVwiLCBcImNvbXByZXNzZWRcIiwgXCJpdGVtSWRUb0V4cGFuZGVkUm93TWFwXCIsIFwicmVzcG9uc2l2ZVwiLCBcImlzU2VsZWN0YWJsZVwiLCBcImlzRXhwYW5kYWJsZVwiLCBcImhhc0FjdGlvbnNcIiwgXCJyb3dQcm9wc1wiLCBcImNlbGxQcm9wc1wiLCBcInRhYmxlQ2FwdGlvblwiLCBcInJvd0hlYWRlclwiLCBcInRhYmxlTGF5b3V0XCJdLFxuICAgIF9leGNsdWRlZDIgPSBbXCJhbGlnblwiLCBcInJlbmRlclwiLCBcImRhdGFUeXBlXCIsIFwiaXNFeHBhbmRlclwiLCBcInRleHRPbmx5XCIsIFwibmFtZVwiLCBcImZpZWxkXCIsIFwiZGVzY3JpcHRpb25cIiwgXCJzb3J0YWJsZVwiLCBcImZvb3RlclwiLCBcIm1vYmlsZU9wdGlvbnNcIl07XG5cbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHsgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHsgaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgaXRlcltTeW1ib2wuaXRlcmF0b3JdICE9IG51bGwgfHwgaXRlcltcIkBAaXRlcmF0b3JcIl0gIT0gbnVsbCkgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkoYXJyKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQsIEZyYWdtZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBmb3JtYXRBdXRvLCBmb3JtYXRCb29sZWFuLCBmb3JtYXREYXRlLCBmb3JtYXROdW1iZXIsIGZvcm1hdFRleHQsIExFRlRfQUxJR05NRU5ULCBSSUdIVF9BTElHTk1FTlQsIFNvcnREaXJlY3Rpb24gfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcHJlZGljYXRlJztcbmltcG9ydCB7IGdldCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL29iamVjdHMnO1xuaW1wb3J0IHsgRXVpRmxleEdyb3VwLCBFdWlGbGV4SXRlbSB9IGZyb20gJy4uL2ZsZXgnO1xuaW1wb3J0IHsgRXVpQ2hlY2tib3ggfSBmcm9tICcuLi9mb3JtJztcbmltcG9ydCB7IEV1aVRhYmxlLCBFdWlUYWJsZUJvZHksIEV1aVRhYmxlRm9vdGVyLCBFdWlUYWJsZUZvb3RlckNlbGwsIEV1aVRhYmxlSGVhZGVyLCBFdWlUYWJsZUhlYWRlckNlbGwsIEV1aVRhYmxlSGVhZGVyQ2VsbENoZWNrYm94LCBFdWlUYWJsZUhlYWRlck1vYmlsZSwgRXVpVGFibGVSb3csIEV1aVRhYmxlUm93Q2VsbCwgRXVpVGFibGVSb3dDZWxsQ2hlY2tib3gsIEV1aVRhYmxlU29ydE1vYmlsZSB9IGZyb20gJy4uL3RhYmxlJztcbmltcG9ydCB7IENvbGxhcHNlZEl0ZW1BY3Rpb25zIH0gZnJvbSAnLi9jb2xsYXBzZWRfaXRlbV9hY3Rpb25zJztcbmltcG9ydCB7IEV4cGFuZGVkSXRlbUFjdGlvbnMgfSBmcm9tICcuL2V4cGFuZGVkX2l0ZW1fYWN0aW9ucyc7XG5pbXBvcnQgeyBQYWdpbmF0aW9uQmFyIH0gZnJvbSAnLi9wYWdpbmF0aW9uX2Jhcic7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vaWNvbic7XG5pbXBvcnQgeyBFdWlTY3JlZW5SZWFkZXJPbmx5IH0gZnJvbSAnLi4vYWNjZXNzaWJpbGl0eSc7XG5pbXBvcnQgeyBFdWlJMThuIH0gZnJvbSAnLi4vaTE4bic7XG5pbXBvcnQgeyBFdWlEZWxheVJlbmRlciB9IGZyb20gJy4uL2RlbGF5X3JlbmRlcic7XG5pbXBvcnQgeyBodG1sSWRHZW5lcmF0b3IgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hY2Nlc3NpYmlsaXR5JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgZGF0YVR5cGVzUHJvZmlsZXMgPSB7XG4gIGF1dG86IHtcbiAgICBhbGlnbjogTEVGVF9BTElHTk1FTlQsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIodmFsdWUpIHtcbiAgICAgIHJldHVybiBmb3JtYXRBdXRvKHZhbHVlKTtcbiAgICB9XG4gIH0sXG4gIHN0cmluZzoge1xuICAgIGFsaWduOiBMRUZUX0FMSUdOTUVOVCxcbiAgICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcih2YWx1ZSkge1xuICAgICAgcmV0dXJuIGZvcm1hdFRleHQodmFsdWUpO1xuICAgIH1cbiAgfSxcbiAgbnVtYmVyOiB7XG4gICAgYWxpZ246IFJJR0hUX0FMSUdOTUVOVCxcbiAgICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcih2YWx1ZSkge1xuICAgICAgcmV0dXJuIGZvcm1hdE51bWJlcih2YWx1ZSk7XG4gICAgfVxuICB9LFxuICBib29sZWFuOiB7XG4gICAgYWxpZ246IExFRlRfQUxJR05NRU5ULFxuICAgIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKHZhbHVlKSB7XG4gICAgICByZXR1cm4gZm9ybWF0Qm9vbGVhbih2YWx1ZSk7XG4gICAgfVxuICB9LFxuICBkYXRlOiB7XG4gICAgYWxpZ246IExFRlRfQUxJR05NRU5ULFxuICAgIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKHZhbHVlKSB7XG4gICAgICByZXR1cm4gZm9ybWF0RGF0ZSh2YWx1ZSk7XG4gICAgfVxuICB9XG59O1xudmFyIERBVEFfVFlQRVMgPSBPYmplY3Qua2V5cyhkYXRhVHlwZXNQcm9maWxlcyk7XG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbUlkKGl0ZW0sIGl0ZW1JZCkge1xuICBpZiAoaXRlbUlkKSB7XG4gICAgaWYgKGlzRnVuY3Rpb24oaXRlbUlkKSkge1xuICAgICAgcmV0dXJuIGl0ZW1JZChpdGVtKTtcbiAgICB9IC8vIEB0cy1pZ25vcmUgbmV2ZXIgbWluZCBhYm91dCB0aGUgaW5kZXggc2lnbmF0dXJlXG5cblxuICAgIHJldHVybiBpdGVtW2l0ZW1JZF07XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0Um93UHJvcHMoaXRlbSwgcm93UHJvcHMpIHtcbiAgaWYgKHJvd1Byb3BzKSB7XG4gICAgaWYgKGlzRnVuY3Rpb24ocm93UHJvcHMpKSB7XG4gICAgICByZXR1cm4gcm93UHJvcHMoaXRlbSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJvd1Byb3BzO1xuICB9XG5cbiAgcmV0dXJuIHt9O1xufVxuXG5mdW5jdGlvbiBnZXRDZWxsUHJvcHMoaXRlbSwgY29sdW1uLCBjZWxsUHJvcHMpIHtcbiAgaWYgKGNlbGxQcm9wcykge1xuICAgIGlmIChpc0Z1bmN0aW9uKGNlbGxQcm9wcykpIHtcbiAgICAgIHJldHVybiBjZWxsUHJvcHMoaXRlbSwgY29sdW1uKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2VsbFByb3BzO1xuICB9XG5cbiAgcmV0dXJuIHt9O1xufVxuXG5mdW5jdGlvbiBnZXRDb2x1bW5Gb290ZXIoY29sdW1uLCBfcmVmKSB7XG4gIHZhciBpdGVtcyA9IF9yZWYuaXRlbXMsXG4gICAgICBwYWdpbmF0aW9uID0gX3JlZi5wYWdpbmF0aW9uO1xuICB2YXIgX3JlZjIgPSBjb2x1bW4sXG4gICAgICBmb290ZXIgPSBfcmVmMi5mb290ZXI7XG5cbiAgaWYgKGZvb3Rlcikge1xuICAgIGlmIChpc0Z1bmN0aW9uKGZvb3RlcikpIHtcbiAgICAgIHJldHVybiBmb290ZXIoe1xuICAgICAgICBpdGVtczogaXRlbXMsXG4gICAgICAgIHBhZ2luYXRpb246IHBhZ2luYXRpb25cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBmb290ZXI7XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBoYXNQYWdpbmF0aW9uKHgpIHtcbiAgcmV0dXJuIHguaGFzT3duUHJvcGVydHkoJ3BhZ2luYXRpb24nKSAmJiAhIXgucGFnaW5hdGlvbjtcbn1cblxuZXhwb3J0IHZhciBFdWlCYXNpY1RhYmxlID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhFdWlCYXNpY1RhYmxlLCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aUJhc2ljVGFibGUpO1xuXG4gIGZ1bmN0aW9uIEV1aUJhc2ljVGFibGUocHJvcHMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpQmFzaWNUYWJsZSk7XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHByb3BzKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJjbGVhbnVwc1wiLCBbXSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwidGJvZHlcIiwgbnVsbCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic2V0VGJvZHlcIiwgZnVuY3Rpb24gKHRib2R5KSB7XG4gICAgICAvLyByZW1vdmUgbGlzdGVuZXJzIGZyb20gYW4gZXhpc3RpbmcgZWxlbWVudFxuICAgICAgX3RoaXMucmVtb3ZlTG9hZGluZ0xpc3RlbmVycygpOyAvLyB1cGRhdGUgdGhlIHJlZlxuXG5cbiAgICAgIF90aGlzLnRib2R5ID0gdGJvZHk7IC8vIGlmIGxvYWRpbmcsIGFkZCBsaXN0ZW5lcnNcblxuICAgICAgaWYgKF90aGlzLnByb3BzLmxvYWRpbmcgPT09IHRydWUgJiYgdGJvZHkpIHtcbiAgICAgICAgX3RoaXMuYWRkTG9hZGluZ0xpc3RlbmVycyh0Ym9keSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiYWRkTG9hZGluZ0xpc3RlbmVyc1wiLCBmdW5jdGlvbiAodGJvZHkpIHtcbiAgICAgIHZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uIGxpc3RlbmVyKGV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfTtcblxuICAgICAgWydtb3VzZWRvd24nLCAnbW91c2V1cCcsICdtb3VzZW92ZXInLCAnbW91c2VvdXQnLCAnbW91c2VlbnRlcicsICdtb3VzZWxlYXZlJywgJ2NsaWNrJywgJ2RibGNsaWNrJywgJ2tleWRvd24nLCAna2V5dXAnLCAna2V5cHJlc3MnXS5mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICB0Ym9keS5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBsaXN0ZW5lciwgdHJ1ZSk7XG5cbiAgICAgICAgX3RoaXMuY2xlYW51cHMucHVzaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdGJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgbGlzdGVuZXIsIHRydWUpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInJlbW92ZUxvYWRpbmdMaXN0ZW5lcnNcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuY2xlYW51cHMuZm9yRWFjaChmdW5jdGlvbiAoY2xlYW51cCkge1xuICAgICAgICByZXR1cm4gY2xlYW51cCgpO1xuICAgICAgfSk7XG5cbiAgICAgIF90aGlzLmNsZWFudXBzLmxlbmd0aCA9IDA7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwidGFibGVJZFwiLCBodG1sSWRHZW5lcmF0b3IoJ19fdGFibGUnKSgpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzZWxlY3RBbGxJZEdlbmVyYXRvclwiLCBodG1sSWRHZW5lcmF0b3IoJ19zZWxlY3Rpb25fY29sdW1uLWNoZWNrYm94JykpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInJlbmRlclNlbGVjdEFsbFwiLCBmdW5jdGlvbiAoaXNNb2JpbGUpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIGl0ZW1zID0gX3RoaXMkcHJvcHMuaXRlbXMsXG4gICAgICAgICAgc2VsZWN0aW9uID0gX3RoaXMkcHJvcHMuc2VsZWN0aW9uO1xuXG4gICAgICBpZiAoIXNlbGVjdGlvbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBzZWxlY3RhYmxlSXRlbXMgPSBpdGVtcy5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuICFzZWxlY3Rpb24uc2VsZWN0YWJsZSB8fCBzZWxlY3Rpb24uc2VsZWN0YWJsZShpdGVtKTtcbiAgICAgIH0pO1xuICAgICAgdmFyIGNoZWNrZWQgPSBfdGhpcy5zdGF0ZS5zZWxlY3Rpb24gJiYgc2VsZWN0YWJsZUl0ZW1zLmxlbmd0aCA+IDAgJiYgX3RoaXMuc3RhdGUuc2VsZWN0aW9uLmxlbmd0aCA9PT0gc2VsZWN0YWJsZUl0ZW1zLmxlbmd0aDtcbiAgICAgIHZhciBkaXNhYmxlZCA9IHNlbGVjdGFibGVJdGVtcy5sZW5ndGggPT09IDA7XG5cbiAgICAgIHZhciBvbkNoYW5nZSA9IGZ1bmN0aW9uIG9uQ2hhbmdlKGV2ZW50KSB7XG4gICAgICAgIGlmIChldmVudC50YXJnZXQuY2hlY2tlZCkge1xuICAgICAgICAgIF90aGlzLmNoYW5nZVNlbGVjdGlvbihzZWxlY3RhYmxlSXRlbXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIF90aGlzLmNoYW5nZVNlbGVjdGlvbihbXSk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgdG9rZW46IFwiZXVpQmFzaWNUYWJsZS5zZWxlY3RBbGxSb3dzXCIsXG4gICAgICAgIGRlZmF1bHQ6IFwiU2VsZWN0IGFsbCByb3dzXCJcbiAgICAgIH0sIGZ1bmN0aW9uIChzZWxlY3RBbGxSb3dzKSB7XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUNoZWNrYm94LCB7XG4gICAgICAgICAgaWQ6IF90aGlzLnNlbGVjdEFsbElkR2VuZXJhdG9yKGlzTW9iaWxlID8gJ21vYmlsZScgOiAnZGVza3RvcCcpLFxuICAgICAgICAgIHR5cGU6IGlzTW9iaWxlID8gdW5kZWZpbmVkIDogJ2luTGlzdCcsXG4gICAgICAgICAgY2hlY2tlZDogY2hlY2tlZCxcbiAgICAgICAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgICAgICAgb25DaGFuZ2U6IG9uQ2hhbmdlIC8vIE9ubHkgYWRkIGRhdGEtdGVzdC1zdWJqIHRvIG9uZSBvZiB0aGUgY2hlY2tib3hlc1xuICAgICAgICAgICxcbiAgICAgICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IGlzTW9iaWxlID8gdW5kZWZpbmVkIDogJ2NoZWNrYm94U2VsZWN0QWxsJyxcbiAgICAgICAgICBcImFyaWEtbGFiZWxcIjogc2VsZWN0QWxsUm93cyxcbiAgICAgICAgICBsYWJlbDogaXNNb2JpbGUgPyBzZWxlY3RBbGxSb3dzIDogbnVsbFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInJlc29sdmVDb2x1bW5Tb3J0RGlyZWN0aW9uXCIsIGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgICAgIHZhciBzb3J0aW5nID0gX3RoaXMucHJvcHMuc29ydGluZztcbiAgICAgIHZhciBfcmVmMyA9IGNvbHVtbixcbiAgICAgICAgICBzb3J0YWJsZSA9IF9yZWYzLnNvcnRhYmxlLFxuICAgICAgICAgIGZpZWxkID0gX3JlZjMuZmllbGQsXG4gICAgICAgICAgbmFtZSA9IF9yZWYzLm5hbWU7XG5cbiAgICAgIGlmICghc29ydGluZyB8fCAhc29ydGluZy5zb3J0IHx8ICFzb3J0YWJsZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChzb3J0aW5nLnNvcnQuZmllbGQgPT09IGZpZWxkIHx8IHNvcnRpbmcuc29ydC5maWVsZCA9PT0gbmFtZSkge1xuICAgICAgICByZXR1cm4gc29ydGluZy5zb3J0LmRpcmVjdGlvbjtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJyZXNvbHZlQ29sdW1uT25Tb3J0XCIsIGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgICAgIHZhciBzb3J0aW5nID0gX3RoaXMucHJvcHMuc29ydGluZztcbiAgICAgIHZhciBfcmVmNCA9IGNvbHVtbixcbiAgICAgICAgICBzb3J0YWJsZSA9IF9yZWY0LnNvcnRhYmxlLFxuICAgICAgICAgIG5hbWUgPSBfcmVmNC5uYW1lO1xuXG4gICAgICBpZiAoIXNvcnRpbmcgfHwgIXNvcnRhYmxlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFfdGhpcy5wcm9wcy5vbkNoYW5nZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCYXNpY1RhYmxlIGlzIGNvbmZpZ3VyZWQgdG8gYmUgc29ydGFibGUgb24gY29sdW1uIFtcIi5jb25jYXQobmFtZSwgXCJdIGJ1dFxcbiAgICAgICAgICBbb25DaGFuZ2VdIGlzIG5vdCBjb25maWd1cmVkLiBUaGlzIGNhbGxiYWNrIG11c3QgYmUgaW1wbGVtZW50ZWQgdG8gaGFuZGxlIHRoZSBzb3J0IHJlcXVlc3RzXCIpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLm9uQ29sdW1uU29ydENoYW5nZShjb2x1bW4pO1xuICAgICAgfTtcbiAgICB9KTtcblxuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgLy8gdXNlZCBmb3IgY2hlY2tpbmcgaWYgIGluaXRpYWwgc2VsZWN0aW9uIGlzIHJlbmRlcmVkXG4gICAgICBpbml0aWFsU2VsZWN0aW9uUmVuZGVyZWQ6IGZhbHNlLFxuICAgICAgc2VsZWN0aW9uOiBbXVxuICAgIH07XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEV1aUJhc2ljVGFibGUsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgaWYgKHRoaXMucHJvcHMubG9hZGluZyAmJiB0aGlzLnRib2R5KSB0aGlzLmFkZExvYWRpbmdMaXN0ZW5lcnModGhpcy50Ym9keSk7XG4gICAgICB0aGlzLmdldEluaXRpYWxTZWxlY3Rpb24oKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkVXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgICAgIGlmIChwcmV2UHJvcHMubG9hZGluZyAhPT0gdGhpcy5wcm9wcy5sb2FkaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLmxvYWRpbmcgJiYgdGhpcy50Ym9keSkge1xuICAgICAgICAgIHRoaXMuYWRkTG9hZGluZ0xpc3RlbmVycyh0aGlzLnRib2R5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnJlbW92ZUxvYWRpbmdMaXN0ZW5lcnMoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLmdldEluaXRpYWxTZWxlY3Rpb24oKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50V2lsbFVubW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICB0aGlzLnJlbW92ZUxvYWRpbmdMaXN0ZW5lcnMoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0SW5pdGlhbFNlbGVjdGlvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRJbml0aWFsU2VsZWN0aW9uKCkge1xuICAgICAgaWYgKHRoaXMucHJvcHMuc2VsZWN0aW9uICYmIHRoaXMucHJvcHMuc2VsZWN0aW9uLmluaXRpYWxTZWxlY3RlZCAmJiAhdGhpcy5zdGF0ZS5pbml0aWFsU2VsZWN0aW9uUmVuZGVyZWQgJiYgdGhpcy5wcm9wcy5pdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIHNlbGVjdGlvbjogdGhpcy5wcm9wcy5zZWxlY3Rpb24uaW5pdGlhbFNlbGVjdGVkXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBpbml0aWFsU2VsZWN0aW9uUmVuZGVyZWQ6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNldFNlbGVjdGlvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uKSB7XG4gICAgICB0aGlzLmNoYW5nZVNlbGVjdGlvbihuZXdTZWxlY3Rpb24pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJidWlsZENyaXRlcmlhXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGJ1aWxkQ3JpdGVyaWEocHJvcHMpIHtcbiAgICAgIHZhciBjcml0ZXJpYSA9IHt9O1xuXG4gICAgICBpZiAoaGFzUGFnaW5hdGlvbihwcm9wcykpIHtcbiAgICAgICAgY3JpdGVyaWEucGFnZSA9IHtcbiAgICAgICAgICBpbmRleDogcHJvcHMucGFnaW5hdGlvbi5wYWdlSW5kZXgsXG4gICAgICAgICAgc2l6ZTogcHJvcHMucGFnaW5hdGlvbi5wYWdlU2l6ZVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvcHMuc29ydGluZykge1xuICAgICAgICBjcml0ZXJpYS5zb3J0ID0gcHJvcHMuc29ydGluZy5zb3J0O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY3JpdGVyaWE7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNoYW5nZVNlbGVjdGlvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjaGFuZ2VTZWxlY3Rpb24oc2VsZWN0aW9uKSB7XG4gICAgICBpZiAoIXRoaXMucHJvcHMuc2VsZWN0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHNlbGVjdGlvbjogc2VsZWN0aW9uXG4gICAgICB9KTtcblxuICAgICAgaWYgKHRoaXMucHJvcHMuc2VsZWN0aW9uLm9uU2VsZWN0aW9uQ2hhbmdlKSB7XG4gICAgICAgIHRoaXMucHJvcHMuc2VsZWN0aW9uLm9uU2VsZWN0aW9uQ2hhbmdlKHNlbGVjdGlvbik7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNsZWFyU2VsZWN0aW9uXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNsZWFyU2VsZWN0aW9uKCkge1xuICAgICAgdGhpcy5jaGFuZ2VTZWxlY3Rpb24oW10pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJvblBhZ2VTaXplQ2hhbmdlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uUGFnZVNpemVDaGFuZ2Uoc2l6ZSkge1xuICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpO1xuICAgICAgdmFyIGN1cnJlbnRDcml0ZXJpYSA9IHRoaXMuYnVpbGRDcml0ZXJpYSh0aGlzLnByb3BzKTtcblxuICAgICAgdmFyIGNyaXRlcmlhID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBjdXJyZW50Q3JpdGVyaWEpLCB7fSwge1xuICAgICAgICBwYWdlOiB7XG4gICAgICAgICAgaW5kZXg6IDAsXG4gICAgICAgICAgLy8gd2hlbiBwYWdlIHNpemUgY2hhbmdlcywgd2UgdGFrZSB0aGUgdXNlciBiYWNrIHRvIHRoZSBmaXJzdCBwYWdlXG4gICAgICAgICAgc2l6ZTogc2l6ZVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKHRoaXMucHJvcHMub25DaGFuZ2UpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShjcml0ZXJpYSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIm9uUGFnZUNoYW5nZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvblBhZ2VDaGFuZ2UoaW5kZXgpIHtcbiAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgIHZhciBjdXJyZW50Q3JpdGVyaWEgPSB0aGlzLmJ1aWxkQ3JpdGVyaWEodGhpcy5wcm9wcyk7XG5cbiAgICAgIHZhciBjcml0ZXJpYSA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgY3VycmVudENyaXRlcmlhKSwge30sIHtcbiAgICAgICAgcGFnZTogX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBjdXJyZW50Q3JpdGVyaWEucGFnZSksIHt9LCB7XG4gICAgICAgICAgaW5kZXg6IGluZGV4XG4gICAgICAgIH0pXG4gICAgICB9KTtcblxuICAgICAgaWYgKHRoaXMucHJvcHMub25DaGFuZ2UpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShjcml0ZXJpYSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIm9uQ29sdW1uU29ydENoYW5nZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvbkNvbHVtblNvcnRDaGFuZ2UoY29sdW1uKSB7XG4gICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICB2YXIgY3VycmVudENyaXRlcmlhID0gdGhpcy5idWlsZENyaXRlcmlhKHRoaXMucHJvcHMpO1xuICAgICAgdmFyIGRpcmVjdGlvbiA9IFNvcnREaXJlY3Rpb24uQVNDO1xuXG4gICAgICBpZiAoY3VycmVudENyaXRlcmlhICYmIGN1cnJlbnRDcml0ZXJpYS5zb3J0ICYmIChjdXJyZW50Q3JpdGVyaWEuc29ydC5maWVsZCA9PT0gY29sdW1uLmZpZWxkIHx8IGN1cnJlbnRDcml0ZXJpYS5zb3J0LmZpZWxkID09PSBjb2x1bW4ubmFtZSkpIHtcbiAgICAgICAgZGlyZWN0aW9uID0gU29ydERpcmVjdGlvbi5yZXZlcnNlKGN1cnJlbnRDcml0ZXJpYS5zb3J0LmRpcmVjdGlvbik7XG4gICAgICB9XG5cbiAgICAgIHZhciBjcml0ZXJpYSA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgY3VycmVudENyaXRlcmlhKSwge30sIHtcbiAgICAgICAgLy8gcmVzZXR0aW5nIHRoZSBwYWdlIGlmIHRoZSBjcml0ZXJpYSBoYXMgb25lXG4gICAgICAgIHBhZ2U6ICFjdXJyZW50Q3JpdGVyaWEucGFnZSA/IHVuZGVmaW5lZCA6IHtcbiAgICAgICAgICBpbmRleDogMCxcbiAgICAgICAgICBzaXplOiBjdXJyZW50Q3JpdGVyaWEucGFnZS5zaXplXG4gICAgICAgIH0sXG4gICAgICAgIHNvcnQ6IHtcbiAgICAgICAgICBmaWVsZDogY29sdW1uLmZpZWxkIHx8IGNvbHVtbi5uYW1lLFxuICAgICAgICAgIGRpcmVjdGlvbjogZGlyZWN0aW9uXG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAodGhpcy5wcm9wcy5vbkNoYW5nZSkge1xuICAgICAgICAvLyBAdHMtaWdub3JlIGNvbXBsZXggcmVsYXRpb25zaGlwIGJldHdlZW4gcGFnaW5hdGlvbidzIGV4aXN0ZW5jZSBhbmQgY3JpdGVyaWEsIHRoZSBjb2RlIGxvZ2ljIGVuc3VyZXMgdGhpcyBpcyBjb3JyZWN0bHkgbWFpbnRhaW5lZFxuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGNyaXRlcmlhKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzMi5jbGFzc05hbWUsXG4gICAgICAgICAgbG9hZGluZyA9IF90aGlzJHByb3BzMi5sb2FkaW5nLFxuICAgICAgICAgIGl0ZW1zID0gX3RoaXMkcHJvcHMyLml0ZW1zLFxuICAgICAgICAgIGl0ZW1JZCA9IF90aGlzJHByb3BzMi5pdGVtSWQsXG4gICAgICAgICAgY29sdW1ucyA9IF90aGlzJHByb3BzMi5jb2x1bW5zLFxuICAgICAgICAgIHBhZ2luYXRpb24gPSBfdGhpcyRwcm9wczIucGFnaW5hdGlvbixcbiAgICAgICAgICBzb3J0aW5nID0gX3RoaXMkcHJvcHMyLnNvcnRpbmcsXG4gICAgICAgICAgc2VsZWN0aW9uID0gX3RoaXMkcHJvcHMyLnNlbGVjdGlvbixcbiAgICAgICAgICBvbkNoYW5nZSA9IF90aGlzJHByb3BzMi5vbkNoYW5nZSxcbiAgICAgICAgICBlcnJvciA9IF90aGlzJHByb3BzMi5lcnJvcixcbiAgICAgICAgICBub0l0ZW1zTWVzc2FnZSA9IF90aGlzJHByb3BzMi5ub0l0ZW1zTWVzc2FnZSxcbiAgICAgICAgICBjb21wcmVzc2VkID0gX3RoaXMkcHJvcHMyLmNvbXByZXNzZWQsXG4gICAgICAgICAgaXRlbUlkVG9FeHBhbmRlZFJvd01hcCA9IF90aGlzJHByb3BzMi5pdGVtSWRUb0V4cGFuZGVkUm93TWFwLFxuICAgICAgICAgIHJlc3BvbnNpdmUgPSBfdGhpcyRwcm9wczIucmVzcG9uc2l2ZSxcbiAgICAgICAgICBpc1NlbGVjdGFibGUgPSBfdGhpcyRwcm9wczIuaXNTZWxlY3RhYmxlLFxuICAgICAgICAgIGlzRXhwYW5kYWJsZSA9IF90aGlzJHByb3BzMi5pc0V4cGFuZGFibGUsXG4gICAgICAgICAgaGFzQWN0aW9ucyA9IF90aGlzJHByb3BzMi5oYXNBY3Rpb25zLFxuICAgICAgICAgIHJvd1Byb3BzID0gX3RoaXMkcHJvcHMyLnJvd1Byb3BzLFxuICAgICAgICAgIGNlbGxQcm9wcyA9IF90aGlzJHByb3BzMi5jZWxsUHJvcHMsXG4gICAgICAgICAgdGFibGVDYXB0aW9uID0gX3RoaXMkcHJvcHMyLnRhYmxlQ2FwdGlvbixcbiAgICAgICAgICByb3dIZWFkZXIgPSBfdGhpcyRwcm9wczIucm93SGVhZGVyLFxuICAgICAgICAgIHRhYmxlTGF5b3V0ID0gX3RoaXMkcHJvcHMyLnRhYmxlTGF5b3V0LFxuICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMyLCBfZXhjbHVkZWQpO1xuXG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUJhc2ljVGFibGUnLCB7XG4gICAgICAgICdldWlCYXNpY1RhYmxlLWxvYWRpbmcnOiBsb2FkaW5nXG4gICAgICB9LCBjbGFzc05hbWUpO1xuICAgICAgdmFyIHRhYmxlID0gdGhpcy5yZW5kZXJUYWJsZSgpO1xuICAgICAgdmFyIHBhZ2luYXRpb25CYXIgPSB0aGlzLnJlbmRlclBhZ2luYXRpb25CYXIoKTtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gICAgICB9LCByZXN0KSwgdGFibGUsIHBhZ2luYXRpb25CYXIpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJUYWJsZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJUYWJsZSgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNvbXByZXNzZWQgPSBfdGhpcyRwcm9wczMuY29tcHJlc3NlZCxcbiAgICAgICAgICByZXNwb25zaXZlID0gX3RoaXMkcHJvcHMzLnJlc3BvbnNpdmUsXG4gICAgICAgICAgdGFibGVMYXlvdXQgPSBfdGhpcyRwcm9wczMudGFibGVMYXlvdXQ7XG4gICAgICB2YXIgbW9iaWxlSGVhZGVyID0gcmVzcG9uc2l2ZSA/IF9fX0Vtb3Rpb25KU1goRXVpVGFibGVIZWFkZXJNb2JpbGUsIG51bGwsIF9fX0Vtb3Rpb25KU1goRXVpRmxleEdyb3VwLCB7XG4gICAgICAgIHJlc3BvbnNpdmU6IGZhbHNlLFxuICAgICAgICBqdXN0aWZ5Q29udGVudDogXCJzcGFjZUJldHdlZW5cIixcbiAgICAgICAgYWxpZ25JdGVtczogXCJiYXNlbGluZVwiXG4gICAgICB9LCBfX19FbW90aW9uSlNYKEV1aUZsZXhJdGVtLCB7XG4gICAgICAgIGdyb3c6IGZhbHNlXG4gICAgICB9LCB0aGlzLnJlbmRlclNlbGVjdEFsbCh0cnVlKSksIF9fX0Vtb3Rpb25KU1goRXVpRmxleEl0ZW0sIHtcbiAgICAgICAgZ3JvdzogZmFsc2VcbiAgICAgIH0sIHRoaXMucmVuZGVyVGFibGVNb2JpbGVTb3J0KCkpKSkgOiB1bmRlZmluZWQ7XG4gICAgICB2YXIgY2FwdGlvbiA9IHRoaXMucmVuZGVyVGFibGVDYXB0aW9uKCk7XG4gICAgICB2YXIgaGVhZCA9IHRoaXMucmVuZGVyVGFibGVIZWFkKCk7XG4gICAgICB2YXIgYm9keSA9IHRoaXMucmVuZGVyVGFibGVCb2R5KCk7XG4gICAgICB2YXIgZm9vdGVyID0gdGhpcy5yZW5kZXJUYWJsZUZvb3RlcigpO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgbnVsbCwgbW9iaWxlSGVhZGVyLCBfX19FbW90aW9uSlNYKEV1aVRhYmxlLCB7XG4gICAgICAgIGlkOiB0aGlzLnRhYmxlSWQsXG4gICAgICAgIHRhYmxlTGF5b3V0OiB0YWJsZUxheW91dCxcbiAgICAgICAgcmVzcG9uc2l2ZTogcmVzcG9uc2l2ZSxcbiAgICAgICAgY29tcHJlc3NlZDogY29tcHJlc3NlZFxuICAgICAgfSwgY2FwdGlvbiwgaGVhZCwgYm9keSwgZm9vdGVyKSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclRhYmxlTW9iaWxlU29ydFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJUYWJsZU1vYmlsZVNvcnQoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdmFyIF90aGlzJHByb3BzNCA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY29sdW1ucyA9IF90aGlzJHByb3BzNC5jb2x1bW5zLFxuICAgICAgICAgIHNvcnRpbmcgPSBfdGhpcyRwcm9wczQuc29ydGluZztcbiAgICAgIHZhciBpdGVtcyA9IFtdO1xuXG4gICAgICBpZiAoIXNvcnRpbmcpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGNvbHVtbnMuZm9yRWFjaChmdW5jdGlvbiAoY29sdW1uLCBpbmRleCkge1xuICAgICAgICB2YXIgX2NvbHVtbiwgX2NvbHVtbiRtb2JpbGVPcHRpb25zO1xuXG4gICAgICAgIGlmIChjb2x1bW4uZmllbGQgJiYgc29ydGluZy5zb3J0ICYmICEhc29ydGluZy5lbmFibGVBbGxDb2x1bW5zICYmIGNvbHVtbi5zb3J0YWJsZSA9PSBudWxsKSB7XG4gICAgICAgICAgY29sdW1uID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBjb2x1bW4pLCB7fSwge1xuICAgICAgICAgICAgc29ydGFibGU6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY29sdW1uLnNvcnRhYmxlIHx8ICgoX2NvbHVtbiA9IGNvbHVtbikgPT09IG51bGwgfHwgX2NvbHVtbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9jb2x1bW4kbW9iaWxlT3B0aW9ucyA9IF9jb2x1bW4ubW9iaWxlT3B0aW9ucykgPT09IG51bGwgfHwgX2NvbHVtbiRtb2JpbGVPcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfY29sdW1uJG1vYmlsZU9wdGlvbnMuc2hvdykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNvcnREaXJlY3Rpb24gPSBfdGhpczIucmVzb2x2ZUNvbHVtblNvcnREaXJlY3Rpb24oY29sdW1uKTtcblxuICAgICAgICBpdGVtcy5wdXNoKHtcbiAgICAgICAgICBuYW1lOiBjb2x1bW4ubmFtZSxcbiAgICAgICAgICBrZXk6IFwiX2RhdGFfc19cIi5jb25jYXQoY29sdW1uLmZpZWxkLCBcIl9cIikuY29uY2F0KGluZGV4KSxcbiAgICAgICAgICBvblNvcnQ6IF90aGlzMi5yZXNvbHZlQ29sdW1uT25Tb3J0KGNvbHVtbiksXG4gICAgICAgICAgaXNTb3J0ZWQ6ICEhc29ydERpcmVjdGlvbixcbiAgICAgICAgICBpc1NvcnRBc2NlbmRpbmc6IHNvcnREaXJlY3Rpb24gPyBTb3J0RGlyZWN0aW9uLmlzQXNjKHNvcnREaXJlY3Rpb24pIDogdW5kZWZpbmVkXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gaXRlbXMubGVuZ3RoID8gX19fRW1vdGlvbkpTWChFdWlUYWJsZVNvcnRNb2JpbGUsIHtcbiAgICAgICAgaXRlbXM6IGl0ZW1zXG4gICAgICB9KSA6IG51bGw7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclRhYmxlQ2FwdGlvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJUYWJsZUNhcHRpb24oKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM1ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBpdGVtcyA9IF90aGlzJHByb3BzNS5pdGVtcyxcbiAgICAgICAgICBwYWdpbmF0aW9uID0gX3RoaXMkcHJvcHM1LnBhZ2luYXRpb24sXG4gICAgICAgICAgdGFibGVDYXB0aW9uID0gX3RoaXMkcHJvcHM1LnRhYmxlQ2FwdGlvbjtcbiAgICAgIHZhciBpdGVtQ291bnQgPSBpdGVtcy5sZW5ndGg7XG4gICAgICB2YXIgdG90YWxJdGVtQ291bnQgPSBwYWdpbmF0aW9uID8gcGFnaW5hdGlvbi50b3RhbEl0ZW1Db3VudCA6IGl0ZW1Db3VudDtcbiAgICAgIHZhciBwYWdlID0gcGFnaW5hdGlvbiA/IHBhZ2luYXRpb24ucGFnZUluZGV4ICsgMSA6IDE7XG4gICAgICB2YXIgcGFnZUNvdW50ID0gcGFnaW5hdGlvbiAhPT0gbnVsbCAmJiBwYWdpbmF0aW9uICE9PSB2b2lkIDAgJiYgcGFnaW5hdGlvbi5wYWdlU2l6ZSA/IE1hdGguY2VpbChwYWdpbmF0aW9uLnRvdGFsSXRlbUNvdW50IC8gcGFnaW5hdGlvbi5wYWdlU2l6ZSkgOiAxO1xuICAgICAgdmFyIGNhcHRpb25FbGVtZW50O1xuXG4gICAgICBpZiAodGFibGVDYXB0aW9uKSB7XG4gICAgICAgIGlmIChwYWdpbmF0aW9uKSB7XG4gICAgICAgICAgY2FwdGlvbkVsZW1lbnQgPSBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICAgIHRva2VuOiBcImV1aUJhc2ljVGFibGUudGFibGVDYXB0aW9uV2l0aFBhZ2luYXRpb25cIixcbiAgICAgICAgICAgIGRlZmF1bHQ6IFwie3RhYmxlQ2FwdGlvbn07IFBhZ2Uge3BhZ2V9IG9mIHtwYWdlQ291bnR9LlwiLFxuICAgICAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgICAgIHRhYmxlQ2FwdGlvbjogdGFibGVDYXB0aW9uLFxuICAgICAgICAgICAgICBwYWdlOiBwYWdlLFxuICAgICAgICAgICAgICBwYWdlQ291bnQ6IHBhZ2VDb3VudFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhcHRpb25FbGVtZW50ID0gdGFibGVDYXB0aW9uO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocGFnaW5hdGlvbikge1xuICAgICAgICAgIGlmIChwYWdpbmF0aW9uLnRvdGFsSXRlbUNvdW50ID4gMCkge1xuICAgICAgICAgICAgY2FwdGlvbkVsZW1lbnQgPSBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICAgICAgdG9rZW46IFwiZXVpQmFzaWNUYWJsZS50YWJsZUF1dG9DYXB0aW9uV2l0aFBhZ2luYXRpb25cIixcbiAgICAgICAgICAgICAgZGVmYXVsdDogXCJUaGlzIHRhYmxlIGNvbnRhaW5zIHtpdGVtQ291bnR9IHJvd3Mgb3V0IG9mIHt0b3RhbEl0ZW1Db3VudH0gcm93czsgUGFnZSB7cGFnZX0gb2Yge3BhZ2VDb3VudH0uXCIsXG4gICAgICAgICAgICAgIHZhbHVlczoge1xuICAgICAgICAgICAgICAgIHRvdGFsSXRlbUNvdW50OiB0b3RhbEl0ZW1Db3VudCxcbiAgICAgICAgICAgICAgICBpdGVtQ291bnQ6IGl0ZW1Db3VudCxcbiAgICAgICAgICAgICAgICBwYWdlOiBwYWdlLFxuICAgICAgICAgICAgICAgIHBhZ2VDb3VudDogcGFnZUNvdW50XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYXB0aW9uRWxlbWVudCA9IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgICAgICB0b2tlbjogXCJldWlCYXNpY1RhYmxlLnRhYmxlU2ltcGxlQXV0b0NhcHRpb25XaXRoUGFnaW5hdGlvblwiLFxuICAgICAgICAgICAgICBkZWZhdWx0OiBcIlRoaXMgdGFibGUgY29udGFpbnMge2l0ZW1Db3VudH0gcm93czsgUGFnZSB7cGFnZX0gb2Yge3BhZ2VDb3VudH0uXCIsXG4gICAgICAgICAgICAgIHZhbHVlczoge1xuICAgICAgICAgICAgICAgIGl0ZW1Db3VudDogaXRlbUNvdW50LFxuICAgICAgICAgICAgICAgIHBhZ2U6IHBhZ2UsXG4gICAgICAgICAgICAgICAgcGFnZUNvdW50OiBwYWdlQ291bnRcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhcHRpb25FbGVtZW50ID0gX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgICB0b2tlbjogXCJldWlCYXNpY1RhYmxlLnRhYmxlQXV0b0NhcHRpb25XaXRob3V0UGFnaW5hdGlvblwiLFxuICAgICAgICAgICAgZGVmYXVsdDogXCJUaGlzIHRhYmxlIGNvbnRhaW5zIHtpdGVtQ291bnR9IHJvd3MuXCIsXG4gICAgICAgICAgICB2YWx1ZXM6IHtcbiAgICAgICAgICAgICAgaXRlbUNvdW50OiBpdGVtQ291bnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlTY3JlZW5SZWFkZXJPbmx5LCBudWxsLCBfX19FbW90aW9uSlNYKFwiY2FwdGlvblwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJldWlUYWJsZUNhcHRpb25cIlxuICAgICAgfSwgX19fRW1vdGlvbkpTWChFdWlEZWxheVJlbmRlciwgbnVsbCwgY2FwdGlvbkVsZW1lbnQpKSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclRhYmxlSGVhZFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJUYWJsZUhlYWQoKSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgdmFyIF90aGlzJHByb3BzNiA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY29sdW1ucyA9IF90aGlzJHByb3BzNi5jb2x1bW5zLFxuICAgICAgICAgIHNlbGVjdGlvbiA9IF90aGlzJHByb3BzNi5zZWxlY3Rpb247XG4gICAgICB2YXIgaGVhZGVycyA9IFtdO1xuXG4gICAgICBpZiAoc2VsZWN0aW9uKSB7XG4gICAgICAgIGhlYWRlcnMucHVzaChfX19FbW90aW9uSlNYKEV1aVRhYmxlSGVhZGVyQ2VsbENoZWNrYm94LCB7XG4gICAgICAgICAga2V5OiBcIl9zZWxlY3Rpb25fY29sdW1uX2hcIlxuICAgICAgICB9LCB0aGlzLnJlbmRlclNlbGVjdEFsbChmYWxzZSkpKTtcbiAgICAgIH1cblxuICAgICAgY29sdW1ucy5mb3JFYWNoKGZ1bmN0aW9uIChjb2x1bW4sIGluZGV4KSB7XG4gICAgICAgIHZhciBfcmVmNSA9IGNvbHVtbixcbiAgICAgICAgICAgIGZpZWxkID0gX3JlZjUuZmllbGQsXG4gICAgICAgICAgICB3aWR0aCA9IF9yZWY1LndpZHRoLFxuICAgICAgICAgICAgbmFtZSA9IF9yZWY1Lm5hbWUsXG4gICAgICAgICAgICBhbGlnbiA9IF9yZWY1LmFsaWduLFxuICAgICAgICAgICAgZGF0YVR5cGUgPSBfcmVmNS5kYXRhVHlwZSxcbiAgICAgICAgICAgIHNvcnRhYmxlID0gX3JlZjUuc29ydGFibGUsXG4gICAgICAgICAgICBtb2JpbGVPcHRpb25zID0gX3JlZjUubW9iaWxlT3B0aW9ucyxcbiAgICAgICAgICAgIHJlYWRPbmx5ID0gX3JlZjUucmVhZE9ubHksXG4gICAgICAgICAgICBkZXNjcmlwdGlvbiA9IF9yZWY1LmRlc2NyaXB0aW9uO1xuXG4gICAgICAgIHZhciBjb2x1bW5BbGlnbiA9IGFsaWduIHx8IF90aGlzMy5nZXRBbGlnbkZvckRhdGFUeXBlKGRhdGFUeXBlKTsgLy8gYWN0aW9ucyBjb2x1bW5cblxuXG4gICAgICAgIGlmIChjb2x1bW4uYWN0aW9ucykge1xuICAgICAgICAgIGhlYWRlcnMucHVzaChfX19FbW90aW9uSlNYKEV1aVRhYmxlSGVhZGVyQ2VsbCwge1xuICAgICAgICAgICAga2V5OiBcIl9hY3Rpb25zX2hfXCIuY29uY2F0KGluZGV4KSxcbiAgICAgICAgICAgIGFsaWduOiBcInJpZ2h0XCIsXG4gICAgICAgICAgICB3aWR0aDogd2lkdGgsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb24sXG4gICAgICAgICAgICBtb2JpbGVPcHRpb25zOiBtb2JpbGVPcHRpb25zXG4gICAgICAgICAgfSwgbmFtZSkpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyBjb21wdXRlZCBjb2x1bW5cblxuXG4gICAgICAgIGlmICghY29sdW1uLmZpZWxkKSB7XG4gICAgICAgICAgdmFyIF9zb3J0aW5nID0ge307IC8vIGNvbXB1dGVkIGNvbHVtbnMgYXJlIG9ubHkgc29ydGFibGUgaWYgdGhlaXIgYHNvcnRhYmxlYCBpcyBhIGZ1bmN0aW9uXG5cbiAgICAgICAgICBpZiAoX3RoaXMzLnByb3BzLnNvcnRpbmcgJiYgdHlwZW9mIHNvcnRhYmxlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB2YXIgc29ydERpcmVjdGlvbiA9IF90aGlzMy5yZXNvbHZlQ29sdW1uU29ydERpcmVjdGlvbihjb2x1bW4pO1xuXG4gICAgICAgICAgICBfc29ydGluZy5pc1NvcnRlZCA9ICEhc29ydERpcmVjdGlvbjtcbiAgICAgICAgICAgIF9zb3J0aW5nLmlzU29ydEFzY2VuZGluZyA9IHNvcnREaXJlY3Rpb24gPyBTb3J0RGlyZWN0aW9uLmlzQXNjKHNvcnREaXJlY3Rpb24pIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgX3NvcnRpbmcub25Tb3J0ID0gX3RoaXMzLnJlc29sdmVDb2x1bW5PblNvcnQoY29sdW1uKTtcbiAgICAgICAgICAgIF9zb3J0aW5nLnJlYWRPbmx5ID0gX3RoaXMzLnByb3BzLnNvcnRpbmcucmVhZE9ubHkgfHwgcmVhZE9ubHk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaGVhZGVycy5wdXNoKF9fX0Vtb3Rpb25KU1goRXVpVGFibGVIZWFkZXJDZWxsLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgICBrZXk6IFwiX2NvbXB1dGVkX2NvbHVtbl9oX1wiLmNvbmNhdChpbmRleCksXG4gICAgICAgICAgICBhbGlnbjogY29sdW1uQWxpZ24sXG4gICAgICAgICAgICB3aWR0aDogd2lkdGgsXG4gICAgICAgICAgICBtb2JpbGVPcHRpb25zOiBtb2JpbGVPcHRpb25zLFxuICAgICAgICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcInRhYmxlSGVhZGVyQ2VsbF9cIi5jb25jYXQodHlwZW9mIG5hbWUgPT09ICdzdHJpbmcnID8gbmFtZSA6ICcnLCBcIl9cIikuY29uY2F0KGluZGV4KSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvblxuICAgICAgICAgIH0sIF9zb3J0aW5nKSwgbmFtZSkpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyBmaWVsZCBkYXRhIGNvbHVtblxuXG5cbiAgICAgICAgdmFyIHNvcnRpbmcgPSB7fTtcblxuICAgICAgICBpZiAoX3RoaXMzLnByb3BzLnNvcnRpbmcpIHtcbiAgICAgICAgICBpZiAoX3RoaXMzLnByb3BzLnNvcnRpbmcuc29ydCAmJiAhIV90aGlzMy5wcm9wcy5zb3J0aW5nLmVuYWJsZUFsbENvbHVtbnMgJiYgY29sdW1uLnNvcnRhYmxlID09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbHVtbiA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgY29sdW1uKSwge30sIHtcbiAgICAgICAgICAgICAgc29ydGFibGU6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBfcmVmNiA9IGNvbHVtbixcbiAgICAgICAgICAgICAgX3NvcnRhYmxlID0gX3JlZjYuc29ydGFibGU7XG5cbiAgICAgICAgICBpZiAoX3NvcnRhYmxlKSB7XG4gICAgICAgICAgICB2YXIgX3NvcnREaXJlY3Rpb24gPSBfdGhpczMucmVzb2x2ZUNvbHVtblNvcnREaXJlY3Rpb24oY29sdW1uKTtcblxuICAgICAgICAgICAgc29ydGluZy5pc1NvcnRlZCA9ICEhX3NvcnREaXJlY3Rpb247XG4gICAgICAgICAgICBzb3J0aW5nLmlzU29ydEFzY2VuZGluZyA9IF9zb3J0RGlyZWN0aW9uID8gU29ydERpcmVjdGlvbi5pc0FzYyhfc29ydERpcmVjdGlvbikgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBzb3J0aW5nLm9uU29ydCA9IF90aGlzMy5yZXNvbHZlQ29sdW1uT25Tb3J0KGNvbHVtbik7XG4gICAgICAgICAgICBzb3J0aW5nLnJlYWRPbmx5ID0gX3RoaXMzLnByb3BzLnNvcnRpbmcucmVhZE9ubHkgfHwgcmVhZE9ubHk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaGVhZGVycy5wdXNoKF9fX0Vtb3Rpb25KU1goRXVpVGFibGVIZWFkZXJDZWxsLCBfZXh0ZW5kcyh7XG4gICAgICAgICAga2V5OiBcIl9kYXRhX2hfXCIuY29uY2F0KGZpZWxkLCBcIl9cIikuY29uY2F0KGluZGV4KSxcbiAgICAgICAgICBhbGlnbjogY29sdW1uQWxpZ24sXG4gICAgICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgICAgIG1vYmlsZU9wdGlvbnM6IG1vYmlsZU9wdGlvbnMsXG4gICAgICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcInRhYmxlSGVhZGVyQ2VsbF9cIi5jb25jYXQoZmllbGQsIFwiX1wiKS5jb25jYXQoaW5kZXgpLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvblxuICAgICAgICB9LCBzb3J0aW5nKSwgbmFtZSkpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlUYWJsZUhlYWRlciwgbnVsbCwgaGVhZGVycyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclRhYmxlRm9vdGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlclRhYmxlRm9vdGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgaXRlbXMgPSBfdGhpcyRwcm9wczcuaXRlbXMsXG4gICAgICAgICAgY29sdW1ucyA9IF90aGlzJHByb3BzNy5jb2x1bW5zLFxuICAgICAgICAgIHBhZ2luYXRpb24gPSBfdGhpcyRwcm9wczcucGFnaW5hdGlvbixcbiAgICAgICAgICBzZWxlY3Rpb24gPSBfdGhpcyRwcm9wczcuc2VsZWN0aW9uO1xuICAgICAgdmFyIGZvb3RlcnMgPSBbXTtcbiAgICAgIHZhciBoYXNEZWZpbmVkRm9vdGVyID0gZmFsc2U7XG5cbiAgICAgIGlmIChzZWxlY3Rpb24pIHtcbiAgICAgICAgLy8gQ3JlYXRlIGFuIGVtcHR5IGNlbGwgdG8gY29tcGVuc2F0ZSBmb3IgYWRkaXRpb25hbCBzZWxlY3Rpb24gY29sdW1uXG4gICAgICAgIGZvb3RlcnMucHVzaChfX19FbW90aW9uSlNYKEV1aVRhYmxlRm9vdGVyQ2VsbCwge1xuICAgICAgICAgIGtleTogXCJfc2VsZWN0aW9uX2NvbHVtbl9mXCJcbiAgICAgICAgfSwgdW5kZWZpbmVkKSk7XG4gICAgICB9XG5cbiAgICAgIGNvbHVtbnMuZm9yRWFjaChmdW5jdGlvbiAoY29sdW1uKSB7XG4gICAgICAgIHZhciBmb290ZXIgPSBnZXRDb2x1bW5Gb290ZXIoY29sdW1uLCB7XG4gICAgICAgICAgaXRlbXM6IGl0ZW1zLFxuICAgICAgICAgIHBhZ2luYXRpb246IHBhZ2luYXRpb25cbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBfcmVmNyA9IGNvbHVtbixcbiAgICAgICAgICAgIG1vYmlsZU9wdGlvbnMgPSBfcmVmNy5tb2JpbGVPcHRpb25zLFxuICAgICAgICAgICAgZmllbGQgPSBfcmVmNy5maWVsZCxcbiAgICAgICAgICAgIGFsaWduID0gX3JlZjcuYWxpZ247XG5cbiAgICAgICAgaWYgKG1vYmlsZU9wdGlvbnMgIT09IG51bGwgJiYgbW9iaWxlT3B0aW9ucyAhPT0gdm9pZCAwICYmIG1vYmlsZU9wdGlvbnMub25seSkge1xuICAgICAgICAgIHJldHVybjsgLy8gZXhjbHVkZSBjb2x1bW5zIHRoYXQgb25seSBleGlzdCBmb3IgbW9iaWxlIGhlYWRlcnNcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmb290ZXIpIHtcbiAgICAgICAgICBmb290ZXJzLnB1c2goX19fRW1vdGlvbkpTWChFdWlUYWJsZUZvb3RlckNlbGwsIHtcbiAgICAgICAgICAgIGtleTogXCJmb290ZXJfXCIuY29uY2F0KGZpZWxkLCBcIl9cIikuY29uY2F0KGZvb3RlcnMubGVuZ3RoIC0gMSksXG4gICAgICAgICAgICBhbGlnbjogYWxpZ25cbiAgICAgICAgICB9LCBmb290ZXIpKTtcbiAgICAgICAgICBoYXNEZWZpbmVkRm9vdGVyID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBGb290ZXIgaXMgdW5kZWZpbmVkLCBzbyBjcmVhdGUgYW4gZW1wdHkgY2VsbCB0byBwcmVzZXJ2ZSBsYXlvdXRcbiAgICAgICAgICBmb290ZXJzLnB1c2goX19fRW1vdGlvbkpTWChFdWlUYWJsZUZvb3RlckNlbGwsIHtcbiAgICAgICAgICAgIGtleTogXCJmb290ZXJfZW1wdHlfXCIuY29uY2F0KGZvb3RlcnMubGVuZ3RoIC0gMSksXG4gICAgICAgICAgICBhbGlnbjogYWxpZ25cbiAgICAgICAgICB9LCB1bmRlZmluZWQpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZm9vdGVycy5sZW5ndGggJiYgaGFzRGVmaW5lZEZvb3RlciA/IF9fX0Vtb3Rpb25KU1goRXVpVGFibGVGb290ZXIsIG51bGwsIGZvb3RlcnMpIDogbnVsbDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyVGFibGVCb2R5XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlclRhYmxlQm9keSgpIHtcbiAgICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgICBpZiAodGhpcy5wcm9wcy5lcnJvcikge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJFcnJvckJvZHkodGhpcy5wcm9wcy5lcnJvcik7XG4gICAgICB9XG5cbiAgICAgIHZhciBpdGVtcyA9IHRoaXMucHJvcHMuaXRlbXM7XG5cbiAgICAgIGlmIChpdGVtcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyRW1wdHlCb2R5KCk7XG4gICAgICB9XG5cbiAgICAgIHZhciByb3dzID0gaXRlbXMubWFwKGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xuICAgICAgICAvLyBpZiB0aGVyZSdzIHBhZ2luYXRpb24gdGhlIGl0ZW0ncyBpbmRleCBtdXN0IGJlIGFkanVzdGVkIHRvIHRoZSB3aGVyZSBpdCBpcyBpbiB0aGUgd2hvbGUgZGF0YXNldFxuICAgICAgICB2YXIgdGFibGVJdGVtSW5kZXggPSBoYXNQYWdpbmF0aW9uKF90aGlzNC5wcm9wcykgJiYgX3RoaXM0LnByb3BzLnBhZ2luYXRpb24ucGFnZVNpemUgPiAwID8gX3RoaXM0LnByb3BzLnBhZ2luYXRpb24ucGFnZUluZGV4ICogX3RoaXM0LnByb3BzLnBhZ2luYXRpb24ucGFnZVNpemUgKyBpbmRleCA6IGluZGV4O1xuICAgICAgICByZXR1cm4gX3RoaXM0LnJlbmRlckl0ZW1Sb3coaXRlbSwgdGFibGVJdGVtSW5kZXgpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlUYWJsZUJvZHksIHtcbiAgICAgICAgYm9keVJlZjogdGhpcy5zZXRUYm9keVxuICAgICAgfSwgcm93cyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlckVycm9yQm9keVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJFcnJvckJvZHkoZXJyb3IpIHtcbiAgICAgIHZhciBjb2xTcGFuID0gdGhpcy5wcm9wcy5jb2x1bW5zLmxlbmd0aCArICh0aGlzLnByb3BzLnNlbGVjdGlvbiA/IDEgOiAwKTtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVRhYmxlQm9keSwgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlUYWJsZVJvdywgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlUYWJsZVJvd0NlbGwsIHtcbiAgICAgICAgYWxpZ246IFwiY2VudGVyXCIsXG4gICAgICAgIGNvbFNwYW46IGNvbFNwYW4sXG4gICAgICAgIG1vYmlsZU9wdGlvbnM6IHtcbiAgICAgICAgICB3aWR0aDogJzEwMCUnXG4gICAgICAgIH1cbiAgICAgIH0sIF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgICAgICB0eXBlOiBcIm1pbnVzSW5DaXJjbGVcIixcbiAgICAgICAgY29sb3I6IFwiZGFuZ2VyXCJcbiAgICAgIH0pLCBcIiBcIiwgZXJyb3IpKSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlckVtcHR5Qm9keVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJFbXB0eUJvZHkoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM4ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjb2x1bW5zID0gX3RoaXMkcHJvcHM4LmNvbHVtbnMsXG4gICAgICAgICAgc2VsZWN0aW9uID0gX3RoaXMkcHJvcHM4LnNlbGVjdGlvbixcbiAgICAgICAgICBub0l0ZW1zTWVzc2FnZSA9IF90aGlzJHByb3BzOC5ub0l0ZW1zTWVzc2FnZTtcbiAgICAgIHZhciBjb2xTcGFuID0gY29sdW1ucy5sZW5ndGggKyAoc2VsZWN0aW9uID8gMSA6IDApO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpVGFibGVCb2R5LCBudWxsLCBfX19FbW90aW9uSlNYKEV1aVRhYmxlUm93LCBudWxsLCBfX19FbW90aW9uSlNYKEV1aVRhYmxlUm93Q2VsbCwge1xuICAgICAgICBhbGlnbjogXCJjZW50ZXJcIixcbiAgICAgICAgY29sU3BhbjogY29sU3BhbixcbiAgICAgICAgbW9iaWxlT3B0aW9uczoge1xuICAgICAgICAgIHdpZHRoOiAnMTAwJSdcbiAgICAgICAgfVxuICAgICAgfSwgbm9JdGVtc01lc3NhZ2UpKSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlckl0ZW1Sb3dcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVySXRlbVJvdyhpdGVtLCByb3dJbmRleCkge1xuICAgICAgdmFyIF90aGlzNSA9IHRoaXM7XG5cbiAgICAgIHZhciBfdGhpcyRwcm9wczkgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNvbHVtbnMgPSBfdGhpcyRwcm9wczkuY29sdW1ucyxcbiAgICAgICAgICBzZWxlY3Rpb24gPSBfdGhpcyRwcm9wczkuc2VsZWN0aW9uLFxuICAgICAgICAgIGlzU2VsZWN0YWJsZSA9IF90aGlzJHByb3BzOS5pc1NlbGVjdGFibGUsXG4gICAgICAgICAgaGFzQWN0aW9ucyA9IF90aGlzJHByb3BzOS5oYXNBY3Rpb25zLFxuICAgICAgICAgIHJvd0hlYWRlciA9IF90aGlzJHByb3BzOS5yb3dIZWFkZXIsXG4gICAgICAgICAgX3RoaXMkcHJvcHM5JGl0ZW1JZFRvID0gX3RoaXMkcHJvcHM5Lml0ZW1JZFRvRXhwYW5kZWRSb3dNYXAsXG4gICAgICAgICAgaXRlbUlkVG9FeHBhbmRlZFJvd01hcCA9IF90aGlzJHByb3BzOSRpdGVtSWRUbyA9PT0gdm9pZCAwID8ge30gOiBfdGhpcyRwcm9wczkkaXRlbUlkVG8sXG4gICAgICAgICAgaXNFeHBhbmRhYmxlID0gX3RoaXMkcHJvcHM5LmlzRXhwYW5kYWJsZTtcbiAgICAgIHZhciBjZWxscyA9IFtdO1xuICAgICAgdmFyIGl0ZW1JZENhbGxiYWNrID0gdGhpcy5wcm9wcy5pdGVtSWQ7XG4gICAgICB2YXIgaXRlbUlkID0gZ2V0SXRlbUlkKGl0ZW0sIGl0ZW1JZENhbGxiYWNrKSAhPSBudWxsID8gZ2V0SXRlbUlkKGl0ZW0sIGl0ZW1JZENhbGxiYWNrKSA6IHJvd0luZGV4O1xuICAgICAgdmFyIHNlbGVjdGVkID0gIXNlbGVjdGlvbiA/IGZhbHNlIDogdGhpcy5zdGF0ZS5zZWxlY3Rpb24gJiYgISF0aGlzLnN0YXRlLnNlbGVjdGlvbi5maW5kKGZ1bmN0aW9uIChzZWxlY3RlZEl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGdldEl0ZW1JZChzZWxlY3RlZEl0ZW0sIGl0ZW1JZENhbGxiYWNrKSA9PT0gaXRlbUlkO1xuICAgICAgfSk7XG4gICAgICB2YXIgY2FsY3VsYXRlZEhhc1NlbGVjdGlvbjtcblxuICAgICAgaWYgKHNlbGVjdGlvbikge1xuICAgICAgICBjZWxscy5wdXNoKHRoaXMucmVuZGVySXRlbVNlbGVjdGlvbkNlbGwoaXRlbUlkLCBpdGVtLCBzZWxlY3RlZCkpO1xuICAgICAgICBjYWxjdWxhdGVkSGFzU2VsZWN0aW9uID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIGNhbGN1bGF0ZWRIYXNBY3Rpb25zO1xuICAgICAgY29sdW1ucy5mb3JFYWNoKGZ1bmN0aW9uIChjb2x1bW4sIGNvbHVtbkluZGV4KSB7XG4gICAgICAgIGlmIChjb2x1bW4uYWN0aW9ucykge1xuICAgICAgICAgIGNlbGxzLnB1c2goX3RoaXM1LnJlbmRlckl0ZW1BY3Rpb25zQ2VsbChpdGVtSWQsIGl0ZW0sIGNvbHVtbiwgY29sdW1uSW5kZXgpKTtcbiAgICAgICAgICBjYWxjdWxhdGVkSGFzQWN0aW9ucyA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLmZpZWxkKSB7XG4gICAgICAgICAgdmFyIGZpZWxkRGF0YUNvbHVtbiA9IGNvbHVtbjtcbiAgICAgICAgICBjZWxscy5wdXNoKF90aGlzNS5yZW5kZXJJdGVtRmllbGREYXRhQ2VsbChpdGVtSWQsIGl0ZW0sIGNvbHVtbiwgY29sdW1uSW5kZXgsIGZpZWxkRGF0YUNvbHVtbi5maWVsZCA9PT0gcm93SGVhZGVyKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2VsbHMucHVzaChfdGhpczUucmVuZGVySXRlbUNvbXB1dGVkQ2VsbChpdGVtSWQsIGl0ZW0sIGNvbHVtbiwgY29sdW1uSW5kZXgpKTtcbiAgICAgICAgfVxuICAgICAgfSk7IC8vIE9jY3VweSBmdWxsIHdpZHRoIG9mIHRhYmxlLCB0YWtpbmcgY2hlY2tib3ggJiBtb2JpbGUgb25seSBjb2x1bW5zIGludG8gYWNjb3VudC5cblxuICAgICAgdmFyIGV4cGFuZGVkUm93Q29sU3BhbiA9IHNlbGVjdGlvbiA/IGNvbHVtbnMubGVuZ3RoICsgMSA6IGNvbHVtbnMubGVuZ3RoO1xuICAgICAgdmFyIG1vYmlsZU9ubHlDb2xzID0gY29sdW1ucy5yZWR1Y2UoZnVuY3Rpb24gKG51bSwgY29sdW1uKSB7XG4gICAgICAgIHZhciBfbW9iaWxlT3B0aW9ucztcblxuICAgICAgICByZXR1cm4gY29sdW1uICE9PSBudWxsICYmIGNvbHVtbiAhPT0gdm9pZCAwICYmIChfbW9iaWxlT3B0aW9ucyA9IGNvbHVtbi5tb2JpbGVPcHRpb25zKSAhPT0gbnVsbCAmJiBfbW9iaWxlT3B0aW9ucyAhPT0gdm9pZCAwICYmIF9tb2JpbGVPcHRpb25zLm9ubHkgPyBudW0gKyAxIDogbnVtICsgMDsgLy8gQldDIG9ubHlcbiAgICAgIH0sIDApO1xuICAgICAgZXhwYW5kZWRSb3dDb2xTcGFuID0gZXhwYW5kZWRSb3dDb2xTcGFuIC0gbW9iaWxlT25seUNvbHM7IC8vIFdlJ2xsIHVzZSB0aGUgSUQgdG8gYXNzb2NpYXRlIHRoZSBleHBhbmRlZCByb3cgd2l0aCB0aGUgb3JpZ2luYWwuXG5cbiAgICAgIHZhciBoYXNFeHBhbmRlZFJvdyA9IGl0ZW1JZFRvRXhwYW5kZWRSb3dNYXAuaGFzT3duUHJvcGVydHkoaXRlbUlkKTtcbiAgICAgIHZhciBleHBhbmRlZFJvd0lkID0gaGFzRXhwYW5kZWRSb3cgPyBcInJvd19cIi5jb25jYXQoaXRlbUlkLCBcIl9leHBhbnNpb25cIikgOiB1bmRlZmluZWQ7XG4gICAgICB2YXIgZXhwYW5kZWRSb3cgPSBoYXNFeHBhbmRlZFJvdyA/IF9fX0Vtb3Rpb25KU1goRXVpVGFibGVSb3csIHtcbiAgICAgICAgaWQ6IGV4cGFuZGVkUm93SWQsXG4gICAgICAgIGlzRXhwYW5kZWRSb3c6IHRydWUsXG4gICAgICAgIGlzU2VsZWN0YWJsZTogaXNTZWxlY3RhYmxlXG4gICAgICB9LCBfX19FbW90aW9uSlNYKEV1aVRhYmxlUm93Q2VsbCwge1xuICAgICAgICBjb2xTcGFuOiBleHBhbmRlZFJvd0NvbFNwYW4sXG4gICAgICAgIHRleHRPbmx5OiBmYWxzZVxuICAgICAgfSwgaXRlbUlkVG9FeHBhbmRlZFJvd01hcFtpdGVtSWRdKSkgOiB1bmRlZmluZWQ7XG4gICAgICB2YXIgcm93UHJvcHNDYWxsYmFjayA9IHRoaXMucHJvcHMucm93UHJvcHM7XG4gICAgICB2YXIgcm93UHJvcHMgPSBnZXRSb3dQcm9wcyhpdGVtLCByb3dQcm9wc0NhbGxiYWNrKTtcblxuICAgICAgdmFyIHJvdyA9IF9fX0Vtb3Rpb25KU1goRXVpVGFibGVSb3csIF9leHRlbmRzKHtcbiAgICAgICAgXCJhcmlhLW93bnNcIjogZXhwYW5kZWRSb3dJZCxcbiAgICAgICAgaXNTZWxlY3RhYmxlOiBpc1NlbGVjdGFibGUgPT0gbnVsbCA/IGNhbGN1bGF0ZWRIYXNTZWxlY3Rpb24gOiBpc1NlbGVjdGFibGUsXG4gICAgICAgIGlzU2VsZWN0ZWQ6IHNlbGVjdGVkLFxuICAgICAgICBoYXNBY3Rpb25zOiBoYXNBY3Rpb25zID09IG51bGwgPyBjYWxjdWxhdGVkSGFzQWN0aW9ucyA6IGhhc0FjdGlvbnMsXG4gICAgICAgIGlzRXhwYW5kYWJsZTogaXNFeHBhbmRhYmxlXG4gICAgICB9LCByb3dQcm9wcyksIGNlbGxzKTtcblxuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRnJhZ21lbnQsIHtcbiAgICAgICAga2V5OiBcInJvd19cIi5jb25jYXQoaXRlbUlkKVxuICAgICAgfSwgcm93LCBleHBhbmRlZFJvdyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlckl0ZW1TZWxlY3Rpb25DZWxsXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlckl0ZW1TZWxlY3Rpb25DZWxsKGl0ZW1JZCwgaXRlbSwgc2VsZWN0ZWQpIHtcbiAgICAgIHZhciBfdGhpczYgPSB0aGlzO1xuXG4gICAgICB2YXIgc2VsZWN0aW9uID0gdGhpcy5wcm9wcy5zZWxlY3Rpb247XG4gICAgICB2YXIga2V5ID0gXCJfc2VsZWN0aW9uX2NvbHVtbl9cIi5jb25jYXQoaXRlbUlkKTtcbiAgICAgIHZhciBjaGVja2VkID0gc2VsZWN0ZWQ7XG4gICAgICB2YXIgZGlzYWJsZWQgPSBzZWxlY3Rpb24uc2VsZWN0YWJsZSAmJiAhc2VsZWN0aW9uLnNlbGVjdGFibGUoaXRlbSk7XG4gICAgICB2YXIgdGl0bGUgPSBzZWxlY3Rpb24uc2VsZWN0YWJsZU1lc3NhZ2UgJiYgc2VsZWN0aW9uLnNlbGVjdGFibGVNZXNzYWdlKCFkaXNhYmxlZCwgaXRlbSk7XG5cbiAgICAgIHZhciBvbkNoYW5nZSA9IGZ1bmN0aW9uIG9uQ2hhbmdlKGV2ZW50KSB7XG4gICAgICAgIGlmIChldmVudC50YXJnZXQuY2hlY2tlZCkge1xuICAgICAgICAgIF90aGlzNi5jaGFuZ2VTZWxlY3Rpb24oW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShfdGhpczYuc3RhdGUuc2VsZWN0aW9uKSwgW2l0ZW1dKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIGl0ZW1JZENhbGxiYWNrID0gX3RoaXM2LnByb3BzLml0ZW1JZDtcblxuICAgICAgICAgIF90aGlzNi5jaGFuZ2VTZWxlY3Rpb24oX3RoaXM2LnN0YXRlLnNlbGVjdGlvbi5yZWR1Y2UoZnVuY3Rpb24gKHNlbGVjdGlvbiwgc2VsZWN0ZWRJdGVtKSB7XG4gICAgICAgICAgICBpZiAoZ2V0SXRlbUlkKHNlbGVjdGVkSXRlbSwgaXRlbUlkQ2FsbGJhY2spICE9PSBpdGVtSWQpIHtcbiAgICAgICAgICAgICAgc2VsZWN0aW9uLnB1c2goc2VsZWN0ZWRJdGVtKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHNlbGVjdGlvbjtcbiAgICAgICAgICB9LCBbXSkpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlUYWJsZVJvd0NlbGxDaGVja2JveCwge1xuICAgICAgICBrZXk6IGtleVxuICAgICAgfSwgX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgIHRva2VuOiBcImV1aUJhc2ljVGFibGUuc2VsZWN0VGhpc1Jvd1wiLFxuICAgICAgICBkZWZhdWx0OiBcIlNlbGVjdCB0aGlzIHJvd1wiXG4gICAgICB9LCBmdW5jdGlvbiAoc2VsZWN0VGhpc1Jvdykge1xuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlDaGVja2JveCwge1xuICAgICAgICAgIGlkOiBcIlwiLmNvbmNhdChfdGhpczYudGFibGVJZCkuY29uY2F0KGtleSwgXCItY2hlY2tib3hcIiksXG4gICAgICAgICAgdHlwZTogXCJpbkxpc3RcIixcbiAgICAgICAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgICAgICAgY2hlY2tlZDogY2hlY2tlZCxcbiAgICAgICAgICBvbkNoYW5nZTogb25DaGFuZ2UsXG4gICAgICAgICAgdGl0bGU6IHRpdGxlIHx8IHNlbGVjdFRoaXNSb3csXG4gICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IHRpdGxlIHx8IHNlbGVjdFRoaXNSb3csXG4gICAgICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcImNoZWNrYm94U2VsZWN0Um93LVwiLmNvbmNhdChpdGVtSWQpXG4gICAgICAgIH0pO1xuICAgICAgfSkpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJJdGVtQWN0aW9uc0NlbGxcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVySXRlbUFjdGlvbnNDZWxsKGl0ZW1JZCwgaXRlbSwgY29sdW1uLCBjb2x1bW5JbmRleCkge1xuICAgICAgdmFyIF90aGlzNyA9IHRoaXM7XG5cbiAgICAgIHZhciBhY3Rpb25FbmFibGVkID0gZnVuY3Rpb24gYWN0aW9uRW5hYmxlZChhY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIF90aGlzNy5zdGF0ZS5zZWxlY3Rpb24ubGVuZ3RoID09PSAwICYmICghYWN0aW9uLmVuYWJsZWQgfHwgYWN0aW9uLmVuYWJsZWQoaXRlbSkpO1xuICAgICAgfTtcblxuICAgICAgdmFyIGFjdHVhbEFjdGlvbnMgPSBjb2x1bW4uYWN0aW9ucy5maWx0ZXIoZnVuY3Rpb24gKGFjdGlvbikge1xuICAgICAgICByZXR1cm4gIWFjdGlvbi5hdmFpbGFibGUgfHwgYWN0aW9uLmF2YWlsYWJsZShpdGVtKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoYWN0dWFsQWN0aW9ucy5sZW5ndGggPiAyKSB7XG4gICAgICAgIC8vIGlmIGFueSBvZiB0aGUgYWN0aW9ucyBgaXNQcmltYXJ5YCwgYWRkIHRoZW0gaW5saW5lIGFzIHdlbGwsIGJ1dCBvbmx5IHRoZSBmaXJzdCAyXG4gICAgICAgIHZhciBwcmltYXJ5QWN0aW9ucyA9IGFjdHVhbEFjdGlvbnMuZmlsdGVyKGZ1bmN0aW9uIChvKSB7XG4gICAgICAgICAgcmV0dXJuIG8uaXNQcmltYXJ5O1xuICAgICAgICB9KTtcbiAgICAgICAgYWN0dWFsQWN0aW9ucyA9IHByaW1hcnlBY3Rpb25zLnNsaWNlKDAsIDIpOyAvLyBpZiB3ZSBoYXZlIG1vcmUgdGhhbiAxIGFjdGlvbiwgd2UgZG9uJ3Qgc2hvdyB0aGVtIGFsbCBpbiB0aGUgY2VsbCwgaW5zdGVhZCB3ZVxuICAgICAgICAvLyBwdXQgdGhlbSBhbGwgaW4gYSBwb3BvdmVyIHRvb2wuIFRoaXMgZWZmZWN0aXZlbHkgbWVhbnMgd2UgY2FuIG9ubHkgaGF2ZSBhIG1heGltdW1cbiAgICAgICAgLy8gb2Ygb25lIHRvb2wgcGVyIHJvdyAoaXQncyBlaXRoZXIgYW5kIG5vcm1hbCBhY3Rpb24sIG9yIGl0J3MgYSBwb3BvdmVyIHRoYXQgc2hvd3MgbXVsdGlwbGUgYWN0aW9ucylcbiAgICAgICAgLy9cbiAgICAgICAgLy8gaGVyZSB3ZSBjcmVhdGUgYSBzaW5nbGUgY3VzdG9tIGFjdGlvbiB0aGF0IHRyaWdnZXJzIHRoZSBwb3BvdmVyIHdpdGggYWxsIHRoZSBjb25maWd1cmVkIGFjdGlvbnNcblxuICAgICAgICBhY3R1YWxBY3Rpb25zLnB1c2goe1xuICAgICAgICAgIG5hbWU6ICdBbGwgYWN0aW9ucycsXG4gICAgICAgICAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoaXRlbSkge1xuICAgICAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goQ29sbGFwc2VkSXRlbUFjdGlvbnMsIHtcbiAgICAgICAgICAgICAgYWN0aW9uczogY29sdW1uLmFjdGlvbnMsXG4gICAgICAgICAgICAgIGl0ZW1JZDogaXRlbUlkLFxuICAgICAgICAgICAgICBpdGVtOiBpdGVtLFxuICAgICAgICAgICAgICBhY3Rpb25FbmFibGVkOiBhY3Rpb25FbmFibGVkXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB2YXIgdG9vbHMgPSBfX19FbW90aW9uSlNYKEV4cGFuZGVkSXRlbUFjdGlvbnMsIHtcbiAgICAgICAgYWN0aW9uczogYWN0dWFsQWN0aW9ucyxcbiAgICAgICAgaXRlbUlkOiBpdGVtSWQsXG4gICAgICAgIGl0ZW06IGl0ZW0sXG4gICAgICAgIGFjdGlvbkVuYWJsZWQ6IGFjdGlvbkVuYWJsZWRcbiAgICAgIH0pO1xuXG4gICAgICB2YXIga2V5ID0gXCJyZWNvcmRfYWN0aW9uc19cIi5jb25jYXQoaXRlbUlkLCBcIl9cIikuY29uY2F0KGNvbHVtbkluZGV4KTtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVRhYmxlUm93Q2VsbCwge1xuICAgICAgICBzaG93T25Ib3ZlcjogdHJ1ZSxcbiAgICAgICAga2V5OiBrZXksXG4gICAgICAgIGFsaWduOiBcInJpZ2h0XCIsXG4gICAgICAgIHRleHRPbmx5OiBmYWxzZSxcbiAgICAgICAgaGFzQWN0aW9uczogdHJ1ZVxuICAgICAgfSwgdG9vbHMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJJdGVtRmllbGREYXRhQ2VsbFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJJdGVtRmllbGREYXRhQ2VsbChpdGVtSWQsIGl0ZW0sIGNvbHVtbiwgY29sdW1uSW5kZXgsIHNldFNjb3BlUm93KSB7XG4gICAgICB2YXIgZmllbGQgPSBjb2x1bW4uZmllbGQsXG4gICAgICAgICAgcmVuZGVyID0gY29sdW1uLnJlbmRlcixcbiAgICAgICAgICBkYXRhVHlwZSA9IGNvbHVtbi5kYXRhVHlwZTtcbiAgICAgIHZhciBrZXkgPSBcIl9kYXRhX2NvbHVtbl9cIi5jb25jYXQoZmllbGQsIFwiX1wiKS5jb25jYXQoaXRlbUlkLCBcIl9cIikuY29uY2F0KGNvbHVtbkluZGV4KTtcbiAgICAgIHZhciBjb250ZW50UmVuZGVyZXIgPSByZW5kZXIgfHwgdGhpcy5nZXRSZW5kZXJlckZvckRhdGFUeXBlKGRhdGFUeXBlKTtcbiAgICAgIHZhciB2YWx1ZSA9IGdldChpdGVtLCBmaWVsZCk7XG4gICAgICB2YXIgY29udGVudCA9IGNvbnRlbnRSZW5kZXJlcih2YWx1ZSwgaXRlbSk7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJJdGVtQ2VsbChpdGVtLCBjb2x1bW4sIGtleSwgY29udGVudCwgc2V0U2NvcGVSb3cpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJJdGVtQ29tcHV0ZWRDZWxsXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlckl0ZW1Db21wdXRlZENlbGwoaXRlbUlkLCBpdGVtLCBjb2x1bW4sIGNvbHVtbkluZGV4KSB7XG4gICAgICB2YXIgcmVuZGVyID0gY29sdW1uLnJlbmRlcjtcbiAgICAgIHZhciBrZXkgPSBcIl9jb21wdXRlZF9jb2x1bW5fXCIuY29uY2F0KGl0ZW1JZCwgXCJfXCIpLmNvbmNhdChjb2x1bW5JbmRleCk7XG4gICAgICB2YXIgY29udGVudFJlbmRlcmVyID0gcmVuZGVyIHx8IHRoaXMuZ2V0UmVuZGVyZXJGb3JEYXRhVHlwZSgpO1xuICAgICAgdmFyIGNvbnRlbnQgPSBjb250ZW50UmVuZGVyZXIoaXRlbSk7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJJdGVtQ2VsbChpdGVtLCBjb2x1bW4sIGtleSwgY29udGVudCwgZmFsc2UpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJJdGVtQ2VsbFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJJdGVtQ2VsbChpdGVtLCBjb2x1bW4sIGtleSwgY29udGVudCwgc2V0U2NvcGVSb3cpIHtcbiAgICAgIHZhciBfcmVmOCA9IGNvbHVtbixcbiAgICAgICAgICBhbGlnbiA9IF9yZWY4LmFsaWduLFxuICAgICAgICAgIHJlbmRlciA9IF9yZWY4LnJlbmRlcixcbiAgICAgICAgICBkYXRhVHlwZSA9IF9yZWY4LmRhdGFUeXBlLFxuICAgICAgICAgIGlzRXhwYW5kZXIgPSBfcmVmOC5pc0V4cGFuZGVyLFxuICAgICAgICAgIHRleHRPbmx5ID0gX3JlZjgudGV4dE9ubHksXG4gICAgICAgICAgbmFtZSA9IF9yZWY4Lm5hbWUsXG4gICAgICAgICAgZmllbGQgPSBfcmVmOC5maWVsZCxcbiAgICAgICAgICBkZXNjcmlwdGlvbiA9IF9yZWY4LmRlc2NyaXB0aW9uLFxuICAgICAgICAgIHNvcnRhYmxlID0gX3JlZjguc29ydGFibGUsXG4gICAgICAgICAgZm9vdGVyID0gX3JlZjguZm9vdGVyLFxuICAgICAgICAgIG1vYmlsZU9wdGlvbnMgPSBfcmVmOC5tb2JpbGVPcHRpb25zLFxuICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZjgsIF9leGNsdWRlZDIpO1xuXG4gICAgICB2YXIgY29sdW1uQWxpZ24gPSBhbGlnbiB8fCB0aGlzLmdldEFsaWduRm9yRGF0YVR5cGUoZGF0YVR5cGUpO1xuICAgICAgdmFyIGNlbGxQcm9wc0NhbGxiYWNrID0gdGhpcy5wcm9wcy5jZWxsUHJvcHM7XG4gICAgICB2YXIgY2VsbFByb3BzID0gZ2V0Q2VsbFByb3BzKGl0ZW0sIGNvbHVtbiwgY2VsbFByb3BzQ2FsbGJhY2spO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpVGFibGVSb3dDZWxsLCBfZXh0ZW5kcyh7XG4gICAgICAgIGtleToga2V5LFxuICAgICAgICBhbGlnbjogY29sdW1uQWxpZ24sXG4gICAgICAgIGlzRXhwYW5kZXI6IGlzRXhwYW5kZXIsXG4gICAgICAgIHRleHRPbmx5OiB0ZXh0T25seSB8fCAhcmVuZGVyLFxuICAgICAgICBzZXRTY29wZVJvdzogc2V0U2NvcGVSb3csXG4gICAgICAgIG1vYmlsZU9wdGlvbnM6IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgbW9iaWxlT3B0aW9ucyksIHt9LCB7XG4gICAgICAgICAgcmVuZGVyOiBtb2JpbGVPcHRpb25zICYmIG1vYmlsZU9wdGlvbnMucmVuZGVyICYmIG1vYmlsZU9wdGlvbnMucmVuZGVyKGl0ZW0pLFxuICAgICAgICAgIGhlYWRlcjogbW9iaWxlT3B0aW9ucyAmJiBtb2JpbGVPcHRpb25zLmhlYWRlciA9PT0gZmFsc2UgPyBmYWxzZSA6IG5hbWVcbiAgICAgICAgfSlcbiAgICAgIH0sIGNlbGxQcm9wcywgcmVzdCksIGNvbnRlbnQpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRSZW5kZXJlckZvckRhdGFUeXBlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFJlbmRlcmVyRm9yRGF0YVR5cGUoKSB7XG4gICAgICB2YXIgZGF0YVR5cGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6ICdhdXRvJztcbiAgICAgIHZhciBwcm9maWxlID0gZGF0YVR5cGVzUHJvZmlsZXNbZGF0YVR5cGVdO1xuXG4gICAgICBpZiAoIXByb2ZpbGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBkYXRhVHlwZSBbXCIuY29uY2F0KGRhdGFUeXBlLCBcIl0uIFRoZSBzdXBwb3J0ZWQgZGF0YSB0eXBlcyBhcmUgW1wiKS5jb25jYXQoREFUQV9UWVBFUy5qb2luKCcsICcpLCBcIl1cIikpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJvZmlsZS5yZW5kZXI7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldEFsaWduRm9yRGF0YVR5cGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0QWxpZ25Gb3JEYXRhVHlwZSgpIHtcbiAgICAgIHZhciBkYXRhVHlwZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogJ2F1dG8nO1xuICAgICAgdmFyIHByb2ZpbGUgPSBkYXRhVHlwZXNQcm9maWxlc1tkYXRhVHlwZV07XG5cbiAgICAgIGlmICghcHJvZmlsZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIGRhdGFUeXBlIFtcIi5jb25jYXQoZGF0YVR5cGUsIFwiXS4gVGhlIHN1cHBvcnRlZCBkYXRhIHR5cGVzIGFyZSBbXCIpLmNvbmNhdChEQVRBX1RZUEVTLmpvaW4oJywgJyksIFwiXVwiKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwcm9maWxlLmFsaWduO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJQYWdpbmF0aW9uQmFyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlclBhZ2luYXRpb25CYXIoKSB7XG4gICAgICB2YXIgX3RoaXM4ID0gdGhpcztcblxuICAgICAgdmFyIF90aGlzJHByb3BzMTAgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGVycm9yID0gX3RoaXMkcHJvcHMxMC5lcnJvcixcbiAgICAgICAgICBwYWdpbmF0aW9uID0gX3RoaXMkcHJvcHMxMC5wYWdpbmF0aW9uLFxuICAgICAgICAgIHRhYmxlQ2FwdGlvbiA9IF90aGlzJHByb3BzMTAudGFibGVDYXB0aW9uLFxuICAgICAgICAgIG9uQ2hhbmdlID0gX3RoaXMkcHJvcHMxMC5vbkNoYW5nZTtcblxuICAgICAgaWYgKCFlcnJvciAmJiBwYWdpbmF0aW9uICYmIHBhZ2luYXRpb24udG90YWxJdGVtQ291bnQgPiAwKSB7XG4gICAgICAgIGlmICghb25DaGFuZ2UpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgQmFzaWMgVGFibGUgaXMgY29uZmlndXJlZCB3aXRoIHBhZ2luYXRpb24gYnV0IFtvbkNoYW5nZV0gaXNcXG4gICAgICAgIG5vdCBjb25maWd1cmVkLiBUaGlzIGNhbGxiYWNrIG11c3QgYmUgaW1wbGVtZW50ZWQgdG8gaGFuZGxlIHBhZ2luYXRpb24gY2hhbmdlc1wiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICB0b2tlbjogXCJldWlCYXNpY1RhYmxlLnRhYmxlUGFnaW5hdGlvblwiLFxuICAgICAgICAgIGRlZmF1bHQ6IFwiUGFnaW5hdGlvbiBmb3IgdGFibGU6IHt0YWJsZUNhcHRpb259XCIsXG4gICAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgICB0YWJsZUNhcHRpb246IHRhYmxlQ2FwdGlvblxuICAgICAgICAgIH1cbiAgICAgICAgfSwgZnVuY3Rpb24gKHRhYmxlUGFnaW5hdGlvbikge1xuICAgICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFBhZ2luYXRpb25CYXIsIHtcbiAgICAgICAgICAgIHBhZ2luYXRpb246IHBhZ2luYXRpb24sXG4gICAgICAgICAgICBvblBhZ2VTaXplQ2hhbmdlOiBfdGhpczgub25QYWdlU2l6ZUNoYW5nZS5iaW5kKF90aGlzOCksXG4gICAgICAgICAgICBvblBhZ2VDaGFuZ2U6IF90aGlzOC5vblBhZ2VDaGFuZ2UuYmluZChfdGhpczgpLFxuICAgICAgICAgICAgXCJhcmlhLWNvbnRyb2xzXCI6IF90aGlzOC50YWJsZUlkLFxuICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IHRhYmxlUGFnaW5hdGlvblxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1dLCBbe1xuICAgIGtleTogXCJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKG5leHRQcm9wcywgcHJldlN0YXRlKSB7XG4gICAgICBpZiAoIW5leHRQcm9wcy5zZWxlY3Rpb24pIHtcbiAgICAgICAgLy8gbmV4dCBwcm9wcyBkb2Vzbid0IGhhdmUgYSBzZWxlY3Rpb24sIHJlc2V0IG91ciBzdGF0ZVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHNlbGVjdGlvbjogW11cbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgdmFyIGl0ZW1JZCA9IG5leHRQcm9wcy5pdGVtSWQ7XG4gICAgICB2YXIgc2VsZWN0aW9uID0gcHJldlN0YXRlLnNlbGVjdGlvbi5maWx0ZXIoZnVuY3Rpb24gKHNlbGVjdGVkSXRlbSkge1xuICAgICAgICByZXR1cm4gbmV4dFByb3BzLml0ZW1zLmZpbmRJbmRleChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgIHJldHVybiBnZXRJdGVtSWQoaXRlbSwgaXRlbUlkKSA9PT0gZ2V0SXRlbUlkKHNlbGVjdGVkSXRlbSwgaXRlbUlkKTtcbiAgICAgICAgfSkgIT09IC0xO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChzZWxlY3Rpb24ubGVuZ3RoICE9PSBwcmV2U3RhdGUuc2VsZWN0aW9uLmxlbmd0aCkge1xuICAgICAgICBpZiAobmV4dFByb3BzLnNlbGVjdGlvbi5vblNlbGVjdGlvbkNoYW5nZSkge1xuICAgICAgICAgIG5leHRQcm9wcy5zZWxlY3Rpb24ub25TZWxlY3Rpb25DaGFuZ2Uoc2VsZWN0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc2VsZWN0aW9uOiBzZWxlY3Rpb25cbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSAvLyB1c2VkIGZvciBtb3ZpbmcgaW4gJiBvdXQgb2YgYGxvYWRpbmdgIHN0YXRlXG5cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlCYXNpY1RhYmxlO1xufShDb21wb25lbnQpO1xuXG5fZGVmaW5lUHJvcGVydHkoRXVpQmFzaWNUYWJsZSwgXCJkZWZhdWx0UHJvcHNcIiwge1xuICByZXNwb25zaXZlOiB0cnVlLFxuICB0YWJsZUxheW91dDogJ2ZpeGVkJyxcbiAgbm9JdGVtc01lc3NhZ2U6IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgIHRva2VuOiBcImV1aUJhc2ljVGFibGUubm9JdGVtc01lc3NhZ2VcIixcbiAgICBkZWZhdWx0OiBcIk5vIGl0ZW1zIGZvdW5kXCJcbiAgfSlcbn0pO1xuXG5FdWlCYXNpY1RhYmxlLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAqIERlc2NyaWJlcyBob3cgdG8gZXh0cmFjdCBhIHVuaXF1ZSBJRCBmcm9tIGVhY2ggaXRlbSwgdXNlZCBmb3Igc2VsZWN0aW9ucyAmIGV4cGFuZGVkIHJvd3NcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBEZXNjcmliZXMgaG93IHRvIGV4dHJhY3QgYSB1bmlxdWUgSUQgZnJvbSBlYWNoIGl0ZW0sIHVzZWQgZm9yIHNlbGVjdGlvbnMgJiBleHBhbmRlZCByb3dzXG4gICAgICovXG4gIGl0ZW1JZDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRdKSxcblxuICAvKipcbiAgICAgKiBSb3cgZXhwYW5zaW9uIHVzZXMgdGhlIGl0ZW1JZCBwcm9wIHRvIGlkZW50aWZ5IGVhY2ggcm93XG4gICAgICovXG5cbiAgLyoqXG4gICAgICogUm93IGV4cGFuc2lvbiB1c2VzIHRoZSBpdGVtSWQgcHJvcCB0byBpZGVudGlmeSBlYWNoIHJvd1xuICAgICAqL1xuICBpdGVtSWRUb0V4cGFuZGVkUm93TWFwOiBQcm9wVHlwZXMuc2hhcGUoe30pLFxuXG4gIC8qKlxuICAgICAqIEEgbGlzdCBvZiBvYmplY3RzIHRvIGFwcGVhciBpbiB0aGUgdGFibGUgLSBhbiBpdGVtIHBlciByb3dcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBBIGxpc3Qgb2Ygb2JqZWN0cyB0byBhcHBlYXIgaW4gdGhlIHRhYmxlIC0gYW4gaXRlbSBwZXIgcm93XG4gICAgICovXG4gIGl0ZW1zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQpLFxuXG4gIC8qKlxuICAgICAqIEFwcGxpZWQgdG8gYEV1aVRhYmxlUm93Q2VsbGBcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBBcHBsaWVkIHRvIGBFdWlUYWJsZVJvd0NlbGxgXG4gICAgICovXG4gIGNlbGxQcm9wczogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXSksXG5cbiAgLyoqXG4gICAgICogQW4gYXJyYXkgb2Ygb25lIG9mIHRoZSBvYmplY3RzOiAjRXVpVGFibGVGaWVsZERhdGFDb2x1bW5UeXBlLCAjRXVpVGFibGVDb21wdXRlZENvbHVtblR5cGUgb3IgI0V1aVRhYmxlQWN0aW9uc0NvbHVtblR5cGUuXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogQW4gYXJyYXkgb2Ygb25lIG9mIHRoZSBvYmplY3RzOiAjRXVpVGFibGVGaWVsZERhdGFDb2x1bW5UeXBlLCAjRXVpVGFibGVDb21wdXRlZENvbHVtblR5cGUgb3IgI0V1aVRhYmxlQWN0aW9uc0NvbHVtblR5cGUuXG4gICAgICovXG4gIGNvbHVtbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zaGFwZSh7XG4gICAgLyoqXG4gICAgICAgKiBBIGZpZWxkIG9mIHRoZSBpdGVtIChtYXkgYmUgYSBuZXN0ZWQgZmllbGQpXG4gICAgICAgKi9cbiAgICAvLyB0eXBlIGhhY2sgdXNlZCBmb3IgYmV0dGVyIGF1dG9jb21wbGV0ZSBzdXBwb3J0XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy8yOTcyOVxuICAgIGZpZWxkOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsXG4gICAgLy8gc3VwcG9ydHMgb3V0ZXIuaW5uZXIga2V5IHBhdGhzXG5cbiAgICAvKipcbiAgICAgICAqIFRoZSBkaXNwbGF5IG5hbWUgb2YgdGhlIGNvbHVtblxuICAgICAgICovXG4gICAgbmFtZTogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCxcblxuICAgIC8qKlxuICAgICAgICogQSBkZXNjcmlwdGlvbiBvZiB0aGUgY29sdW1uICh3aWxsIGJlIHByZXNlbnRlZCBhcyBhIHRpdGxlIG92ZXIgdGhlIGNvbHVtbiBoZWFkZXIpXG4gICAgICAgKi9cbiAgICBkZXNjcmlwdGlvbjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAgIC8qKlxuICAgICAgICogRGVzY3JpYmVzIHRoZSBkYXRhIHR5cGVzIG9mIHRoZSBkaXNwbGF5ZWQgdmFsdWUgKHNlcnZlcyBhcyBhIHJlbmRlcmluZyBoaW50IGZvciB0aGUgdGFibGUpXG4gICAgICAgKi9cbiAgICBkYXRhVHlwZTogUHJvcFR5cGVzLm9uZU9mKFtcImF1dG9cIiwgXCJzdHJpbmdcIiwgXCJudW1iZXJcIiwgXCJib29sZWFuXCIsIFwiZGF0ZVwiXSksXG5cbiAgICAvKipcbiAgICAgICAqIEEgQ1NTIHdpZHRoIHByb3BlcnR5LiBIaW50cyBmb3IgdGhlIHJlcXVpcmVkIHdpZHRoIG9mIHRoZSBjb2x1bW4gKGUuZy4gXCIzMCVcIiwgXCIxMDBweFwiLCBldGMuLilcbiAgICAgICAqL1xuICAgIHdpZHRoOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gICAgLyoqXG4gICAgICAgKiBEZWZpbmVzIHdoZXRoZXIgdGhlIHVzZXIgY2FuIHNvcnQgb24gdGhpcyBjb2x1bW4uIElmIGEgZnVuY3Rpb24gaXMgcHJvdmlkZWQsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgdmFsdWUgdG8gc29ydCBhZ2FpbnN0XG4gICAgICAgKi9cbiAgICBzb3J0YWJsZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZF0pLFxuICAgIGlzRXhwYW5kZXI6IFByb3BUeXBlcy5ib29sLFxuICAgIHRleHRPbmx5OiBQcm9wVHlwZXMuYm9vbCxcblxuICAgIC8qKlxuICAgICAgICogRGVmaW5lcyB0aGUgaG9yaXpvbnRhbCBhbGlnbm1lbnQgb2YgdGhlIGNvbHVtblxuICAgICAgICovXG4gICAgYWxpZ246IFByb3BUeXBlcy5vbmVPZihbXCJsZWZ0XCIsIFwicmlnaHRcIiwgXCJjZW50ZXJcIl0pLFxuXG4gICAgLyoqXG4gICAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGlzIGNvbHVtbiBzaG91bGQgdHJ1bmNhdGUgaXRzIGNvbnRlbnQgd2hlbiBpdCBkb2Vzbid0IGZpdFxuICAgICAgICovXG4gICAgdHJ1bmNhdGVUZXh0OiBQcm9wVHlwZXMuYm9vbCxcbiAgICBtb2JpbGVPcHRpb25zOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgcmVuZGVyOiBQcm9wVHlwZXMuZnVuY1xuICAgIH0pLFxuXG4gICAgLyoqXG4gICAgICAgKiBEZXNjcmliZSBhIGN1c3RvbSByZW5kZXJlciBmdW5jdGlvbiBmb3IgdGhlIGNvbnRlbnRcbiAgICAgICAqL1xuICAgIHJlbmRlcjogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgICAvKipcbiAgICAgICAqIENvbnRlbnQgdG8gZGlzcGxheSBpbiB0aGUgZm9vdGVyIGJlbmVhdGggdGhpcyBjb2x1bW5cbiAgICAgICAqL1xuICAgIGZvb3RlcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXSksXG5cbiAgICAvKipcbiAgICAgICAqIERpc2FibGVzIHRoZSB1c2VyJ3MgYWJpbGl0eSB0byBjaGFuZ2UgdGhlIHNvcnQgYnV0IHN0aWxsIHNob3dzIHRoZSBjdXJyZW50IGRpcmVjdGlvblxuICAgICAgICovXG4gICAgcmVhZE9ubHk6IFByb3BUeXBlcy5ib29sLFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbiAgfSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAvKipcbiAgICAgICAqIEEgZnVuY3Rpb24gdGhhdCBjb21wdXRlcyB0aGUgdmFsdWUgZm9yIGVhY2ggaXRlbSBhbmQgcmVuZGVycyBpdFxuICAgICAgICovXG4gICAgcmVuZGVyOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuXG4gICAgLyoqXG4gICAgICAgKiBUaGUgZGlzcGxheSBuYW1lIG9mIHRoZSBjb2x1bW5cbiAgICAgICAqL1xuICAgIG5hbWU6IFByb3BUeXBlcy5ub2RlLFxuXG4gICAgLyoqXG4gICAgICAgKiBBIGRlc2NyaXB0aW9uIG9mIHRoZSBjb2x1bW4gKHdpbGwgYmUgcHJlc2VudGVkIGFzIGEgdGl0bGUgb3ZlciB0aGUgY29sdW1uIGhlYWRlclxuICAgICAgICovXG4gICAgZGVzY3JpcHRpb246IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgICAvKipcbiAgICAgICAqIElmIHByb3ZpZGVkLCBhbGxvd3MgdGhpcyBjb2x1bW4gdG8gYmUgc29ydGVkIG9uLiBNdXN0IHJldHVybiB0aGUgdmFsdWUgdG8gc29ydCBhZ2FpbnN0LlxuICAgICAgICovXG4gICAgc29ydGFibGU6IFByb3BUeXBlcy5mdW5jLFxuXG4gICAgLyoqXG4gICAgICAgKiBBIENTUyB3aWR0aCBwcm9wZXJ0eS4gSGludHMgZm9yIHRoZSByZXF1aXJlZCB3aWR0aCBvZiB0aGUgY29sdW1uXG4gICAgICAgKi9cbiAgICB3aWR0aDogUHJvcFR5cGVzLnN0cmluZyxcblxuICAgIC8qKlxuICAgICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhpcyBjb2x1bW4gc2hvdWxkIHRydW5jYXRlIGl0cyBjb250ZW50IHdoZW4gaXQgZG9lc24ndCBmaXRcbiAgICAgICAqL1xuICAgIHRydW5jYXRlVGV4dDogUHJvcFR5cGVzLmJvb2wsXG4gICAgaXNFeHBhbmRlcjogUHJvcFR5cGVzLmJvb2wsXG4gICAgYWxpZ246IFByb3BUeXBlcy5vbmVPZihbXCJsZWZ0XCIsIFwicmlnaHRcIiwgXCJjZW50ZXJcIl0pLFxuXG4gICAgLyoqXG4gICAgICAgKiBEaXNhYmxlcyB0aGUgdXNlcidzIGFiaWxpdHkgdG8gY2hhbmdlIHRoZSBzb3J0IGJ1dCBzdGlsbCBzaG93cyB0aGUgY3VycmVudCBkaXJlY3Rpb25cbiAgICAgICAqL1xuICAgIHJlYWRPbmx5OiBQcm9wVHlwZXMuYm9vbCxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgLyoqXG4gICAgICAgKiBBbiBhcnJheSBvZiBvbmUgb2YgdGhlIG9iamVjdHM6ICNEZWZhdWx0SXRlbUFjdGlvbiBvciAjQ3VzdG9tSXRlbUFjdGlvblxuICAgICAgICovXG4gICAgYWN0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgdHlwZSBvZiBhY3Rpb25cbiAgICAgICAgICovXG4gICAgICB0eXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYnV0dG9uXCJdKSwgUHJvcFR5cGVzLm9uZU9mKFtcImljb25cIl0pLmlzUmVxdWlyZWRdKSxcblxuICAgICAgLyoqXG4gICAgICAgICAqIERlZmluZXMgdGhlIGNvbG9yIG9mIHRoZSBidXR0b25cbiAgICAgICAgICovXG4gICAgICBjb2xvcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcInByaW1hcnlcIiwgXCJkYW5nZXJcIiwgXCJ0ZXh0XCIsIFwiZ2hvc3RcIiwgXCJzdWNjZXNzXCIsIFwid2FybmluZ1wiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZF0pLCBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wicHJpbWFyeVwiLCBcImFjY2VudFwiLCBcInN1Y2Nlc3NcIiwgXCJ3YXJuaW5nXCIsIFwiZGFuZ2VyXCIsIFwiZ2hvc3RcIiwgXCJ0ZXh0XCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXSldKSxcblxuICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBkaXNwbGF5IG5hbWUgb2YgdGhlIGFjdGlvbiAod2lsbCBiZSB0aGUgYnV0dG9uIGNhcHRpb24pXG4gICAgICAgICAqL1xuXG4gICAgICAvKipcbiAgICAgICAgICogVGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgYWN0aW9uICh3aWxsIGJlIHRoZSBidXR0b24gY2FwdGlvbilcbiAgICAgICAgICovXG4gICAgICBuYW1lOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCxcblxuICAgICAgLyoqXG4gICAgICAgICAqIERlc2NyaWJlcyB0aGUgYWN0aW9uICh3aWxsIGJlIHRoZSBidXR0b24gdGl0bGUpXG4gICAgICAgICAqL1xuXG4gICAgICAvKipcbiAgICAgICAgICogRGVzY3JpYmVzIHRoZSBhY3Rpb24gKHdpbGwgYmUgdGhlIGJ1dHRvbiB0aXRsZSlcbiAgICAgICAgICovXG4gICAgICBkZXNjcmlwdGlvbjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuXG4gICAgICAvKipcbiAgICAgICAgICogQSBoYW5kbGVyIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgdGhlIGFjdGlvblxuICAgICAgICAgKi9cblxuICAgICAgLyoqXG4gICAgICAgICAqIEEgaGFuZGxlciBmdW5jdGlvbiB0byBleGVjdXRlIHRoZSBhY3Rpb25cbiAgICAgICAgICovXG4gICAgICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAgIGhyZWY6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICB0YXJnZXQ6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgICAgIC8qKlxuICAgICAgICAgKiBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBhY3Rpb24gaXMgYXZhaWxhYmxlXG4gICAgICAgICAqL1xuXG4gICAgICAvKipcbiAgICAgICAgICogQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGRldGVybWluZXMgd2hldGhlciB0aGUgYWN0aW9uIGlzIGF2YWlsYWJsZVxuICAgICAgICAgKi9cbiAgICAgIGF2YWlsYWJsZTogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgICAgIC8qKlxuICAgICAgICAgKiBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBhY3Rpb24gaXMgZW5hYmxlZFxuICAgICAgICAgKi9cblxuICAgICAgLyoqXG4gICAgICAgICAqIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGFjdGlvbiBpcyBlbmFibGVkXG4gICAgICAgICAqL1xuICAgICAgZW5hYmxlZDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgICBpc1ByaW1hcnk6IFByb3BUeXBlcy5ib29sLFxuICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gICAgICAvKipcbiAgICAgICAgICogQXNzb2NpYXRlcyBhbiBpY29uIHdpdGggdGhlIGJ1dHRvblxuICAgICAgICAgKi9cbiAgICAgIGljb246IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhY2Nlc3NpYmlsaXR5XCIsIFwiYWRkRGF0YUFwcFwiLCBcImFkdmFuY2VkU2V0dGluZ3NBcHBcIiwgXCJhZ2VudEFwcFwiLCBcImFnZ3JlZ2F0ZVwiLCBcImFsZXJ0XCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbG9ja1wiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQUNpcmNsZUZpbGxlZFwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRvY3VtZW50XCIsIFwiZG9jdW1lbnRFZGl0XCIsIFwiZG9jdW1lbnRhdGlvblwiLCBcImRvY3VtZW50c1wiLCBcImRvdFwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJleGl0XCIsIFwiZXhwYW5kXCIsIFwiZXhwYW5kTWluaVwiLCBcImV4cG9ydEFjdGlvblwiLCBcImV5ZVwiLCBcImV5ZUNsb3NlZFwiLCBcImZhY2VIYXBweVwiLCBcImZhY2VOZXV0cmFsXCIsIFwiZmFjZVNhZFwiLCBcImZpbGViZWF0QXBwXCIsIFwiZmlsdGVyXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhDbG9zZVwiLCBcImluZGV4RWRpdFwiLCBcImluZGV4Rmx1c2hcIiwgXCJpbmRleE1hbmFnZW1lbnRBcHBcIiwgXCJpbmRleE1hcHBpbmdcIiwgXCJpbmRleE9wZW5cIiwgXCJpbmRleFBhdHRlcm5BcHBcIiwgXCJpbmRleFJvbGx1cEFwcFwiLCBcImluZGV4UnVudGltZVwiLCBcImluZGV4U2V0dGluZ3NcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibmFtZXNwYWNlXCIsIFwibmVzdGVkXCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZWxpbmVBcHBcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzQXBwXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpb25BcHBcIiwgXCJ0aW1lUmVmcmVzaFwiLCBcInRpbWVzbGlkZXJcIiwgXCJ0cmFpbmluZ1wiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZF0pXG4gICAgfSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgZnVuY3Rpb24gdGhhdCByZW5kZXJzIHRoZSBhY3Rpb24uIE5vdGUgdGhhdCB0aGUgcmV0dXJuZWQgbm9kZSBpcyBleHBlY3RlZCB0byBoYXZlIGBvbkZvY3VzYCBhbmQgYG9uQmx1cmAgZnVuY3Rpb25zXG4gICAgICAgICAqL1xuICAgICAgcmVuZGVyOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuXG4gICAgICAvKipcbiAgICAgICAgICogQSBjYWxsYmFjayB0aGF0IGRlZmluZXMgd2hldGhlciB0aGUgYWN0aW9uIGlzIGF2YWlsYWJsZVxuICAgICAgICAgKi9cbiAgICAgIGF2YWlsYWJsZTogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgICAgIC8qKlxuICAgICAgICAgKiBBIGNhbGxiYWNrIHRoYXQgZGVmaW5lcyB3aGV0aGVyIHRoZSBhY3Rpb24gaXMgZW5hYmxlZFxuICAgICAgICAgKi9cbiAgICAgIGVuYWJsZWQ6IFByb3BUeXBlcy5mdW5jLFxuICAgICAgaXNQcmltYXJ5OiBQcm9wVHlwZXMuYm9vbFxuICAgIH0pLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkKS5pc1JlcXVpcmVkLFxuXG4gICAgLyoqXG4gICAgICAgKiBUaGUgZGlzcGxheSBuYW1lIG9mIHRoZSBjb2x1bW5cbiAgICAgICAqL1xuICAgIG5hbWU6IFByb3BUeXBlcy5ub2RlLFxuXG4gICAgLyoqXG4gICAgICAgKiBBIGRlc2NyaXB0aW9uIG9mIHRoZSBjb2x1bW4gKHdpbGwgYmUgcHJlc2VudGVkIGFzIGEgdGl0bGUgb3ZlciB0aGUgY29sdW1uIGhlYWRlclxuICAgICAgICovXG4gICAgZGVzY3JpcHRpb246IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgICAvKipcbiAgICAgICAqIEEgQ1NTIHdpZHRoIHByb3BlcnR5LiBIaW50cyBmb3IgdGhlIHJlcXVpcmVkIHdpZHRoIG9mIHRoZSBjb2x1bW5cbiAgICAgICAqL1xuICAgIHdpZHRoOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkKSxcblxuICAvKipcbiAgICAgKiBFcnJvciBtZXNzYWdlIHRvIGRpc3BsYXlcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBFcnJvciBtZXNzYWdlIHRvIGRpc3BsYXlcbiAgICAgKi9cbiAgZXJyb3I6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogRGVzY3JpYmVzIHRoZSBjb250ZW50IG9mIHRoZSB0YWJsZS4gSWYgbm90IHNwZWNpZmllZCwgdGhlIGNhcHRpb24gd2lsbCBiZSBcIlRoaXMgdGFibGUgY29udGFpbnMge2l0ZW1Db3VudH0gcm93cy5cIlxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIERlc2NyaWJlcyB0aGUgY29udGVudCBvZiB0aGUgdGFibGUuIElmIG5vdCBzcGVjaWZpZWQsIHRoZSBjYXB0aW9uIHdpbGwgYmUgXCJUaGlzIHRhYmxlIGNvbnRhaW5zIHtpdGVtQ291bnR9IHJvd3MuXCJcbiAgICAgKi9cbiAgdGFibGVDYXB0aW9uOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAqIEluZGljYXRlcyB3aGljaCBjb2x1bW4gc2hvdWxkIGJlIHVzZWQgYXMgdGhlIGlkZW50aWZ5aW5nIGNlbGwgaW4gZWFjaCByb3cuIFNob3VsZCBtYXRjaCBhIFwiZmllbGRcIiBwcm9wIGluIEZpZWxkRGF0YUNvbHVtblxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIEluZGljYXRlcyB3aGljaCBjb2x1bW4gc2hvdWxkIGJlIHVzZWQgYXMgdGhlIGlkZW50aWZ5aW5nIGNlbGwgaW4gZWFjaCByb3cuIFNob3VsZCBtYXRjaCBhIFwiZmllbGRcIiBwcm9wIGluIEZpZWxkRGF0YUNvbHVtblxuICAgICAqL1xuICByb3dIZWFkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGhhc0FjdGlvbnM6IFByb3BUeXBlcy5ib29sLFxuICBpc0V4cGFuZGFibGU6IFByb3BUeXBlcy5ib29sLFxuICBpc1NlbGVjdGFibGU6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIFByb3ZpZGVzIGFuIGluZmluaXRlIGxvYWRpbmcgaW5kaWNhdG9yXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogUHJvdmlkZXMgYW4gaW5maW5pdGUgbG9hZGluZyBpbmRpY2F0b3JcbiAgICAgKi9cbiAgbG9hZGluZzogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogTWVzc2FnZSB0byBkaXNwbGF5IGlmIHRhYmxlIGlzIGVtcHR5XG4gICAgICovXG5cbiAgLyoqXG4gICAgICogTWVzc2FnZSB0byBkaXNwbGF5IGlmIHRhYmxlIGlzIGVtcHR5XG4gICAgICovXG4gIG5vSXRlbXNNZXNzYWdlOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICAgKiBDYWxsZWQgd2hlbmV2ZXIgcGFnaW5hdGlvbiBvciBzb3J0aW5nIGNoYW5nZXMgKHRoaXMgcHJvcGVydHkgaXMgcmVxdWlyZWQgd2hlbiBlaXRoZXIgcGFnaW5hdGlvbiBvciBzb3J0aW5nIGlzIGNvbmZpZ3VyZWQpLiBTZWUgI0NyaXRlcmlhIG9yICNDcml0ZXJpYVdpdGhQYWdpbmF0aW9uXG4gICAgICovXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICAgKiBDb25maWd1cmVzICNQYWdpbmF0aW9uXG4gICAgICovXG4gIHBhZ2luYXRpb246IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbdW5kZWZpbmVkXSksIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgLyoqXG4gICAgICAgKiBUaGUgY3VycmVudCBwYWdlICh6ZXJvLWJhc2VkKSBpbmRleFxuICAgICAgICovXG4gICAgcGFnZUluZGV4OiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG5cbiAgICAvKipcbiAgICAgICAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBpdGVtcyB0aGF0IGNhbiBiZSBzaG93biBpbiBhIHNpbmdsZSBwYWdlLlxuICAgICAgICogUGFzcyBgMGAgdG8gZGlzcGxheSB0aGUgc2VsZWN0ZWQgXCJTaG93IGFsbFwiIG9wdGlvbiBhbmQgaGlkZSB0aGUgcGFnaW5hdGlvbi5cbiAgICAgICAqL1xuICAgIHBhZ2VTaXplOiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG5cbiAgICAvKipcbiAgICAgICAqIFRoZSB0b3RhbCBudW1iZXIgb2YgaXRlbXMgdGhlIHBhZ2UgaXMgXCJzbGljZWRcIiBvZlxuICAgICAgICovXG4gICAgdG90YWxJdGVtQ291bnQ6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcblxuICAgIC8qKlxuICAgICAgICogQ29uZmlndXJlcyB0aGUgcGFnZSBzaXplIGRyb3Bkb3duIG9wdGlvbnMuXG4gICAgICAgKiBQYXNzIGAwYCBhcyBvbmUgb2YgdGhlIG9wdGlvbnMgdG8gY3JlYXRlIGEgXCJTaG93IGFsbFwiIG9wdGlvbi5cbiAgICAgICAqL1xuICAgIHBhZ2VTaXplT3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkKSxcblxuICAgIC8qKlxuICAgICAgICogSGlkZXMgdGhlIHBhZ2Ugc2l6ZSBkcm9wZG93blxuICAgICAgICovXG4gICAgc2hvd1BlclBhZ2VPcHRpb25zOiBQcm9wVHlwZXMuYm9vbFxuICB9KV0pLFxuXG4gIC8qKlxuICAgICAqIElmIHRydWUsIHdpbGwgY29udmVydCB0YWJsZSB0byBjYXJkcyBpbiBtb2JpbGUgdmlld1xuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIElmIHRydWUsIHdpbGwgY29udmVydCB0YWJsZSB0byBjYXJkcyBpbiBtb2JpbGUgdmlld1xuICAgICAqL1xuICByZXNwb25zaXZlOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBBcHBsaWVkIHRvIGBFdWlUYWJsZVJvd2BcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBBcHBsaWVkIHRvIGBFdWlUYWJsZVJvd2BcbiAgICAgKi9cbiAgcm93UHJvcHM6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZF0pLFxuXG4gIC8qKlxuICAgICAqIENvbmZpZ3VyZXMgI0V1aVRhYmxlU2VsZWN0aW9uVHlwZVxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIENvbmZpZ3VyZXMgI0V1aVRhYmxlU2VsZWN0aW9uVHlwZVxuICAgICAqL1xuICBzZWxlY3Rpb246IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgLyoqXG4gICAgICAgKiBBIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2hlbmV2ZXIgdGhlIGl0ZW0gc2VsZWN0aW9uIGNoYW5nZXNcbiAgICAgICAqL1xuICAgIG9uU2VsZWN0aW9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcblxuICAgIC8qKlxuICAgICAgICogQSBjYWxsYmFjayB0aGF0IGlzIGNhbGxlZCBwZXIgaXRlbSB0byBpbmRpY2F0ZSB3aGV0aGVyIGl0IGlzIHNlbGVjdGFibGVcbiAgICAgICAqL1xuICAgIHNlbGVjdGFibGU6IFByb3BUeXBlcy5mdW5jLFxuXG4gICAgLyoqXG4gICAgICAgKiBBIGNhbGxiYWNrIHRoYXQgaXMgY2FsbGVkIHBlciBpdGVtIHRvIHJldHJpZXZlIGEgbWVzc2FnZSBmb3IgaXRzIHNlbGVjdGFibGUgc3RhdGUuV2UgZGlzcGxheSB0aGVzZSBtZXNzYWdlcyBhcyBhIHRvb2x0aXAgb24gYW4gdW5zZWxlY3RhYmxlIGNoZWNrYm94XG4gICAgICAgKi9cbiAgICBzZWxlY3RhYmxlTWVzc2FnZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgaW5pdGlhbFNlbGVjdGVkOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQpXG4gIH0pLFxuXG4gIC8qKlxuICAgICAqIENvbmZpZ3VyZXMgI0V1aVRhYmxlU29ydGluZ1R5cGVcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBDb25maWd1cmVzICNFdWlUYWJsZVNvcnRpbmdUeXBlXG4gICAgICovXG4gIHNvcnRpbmc6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgLyoqXG4gICAgICAgKiBJbmRpY2F0ZXMgdGhlIHByb3BlcnR5L2ZpZWxkIHRvIHNvcnQgb25cbiAgICAgICAqL1xuICAgIHNvcnQ6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBmaWVsZDogUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLFxuICAgICAgZGlyZWN0aW9uOiBQcm9wVHlwZXMub25lT2YoW1wiYXNjXCIsIFwiZGVzY1wiXSkuaXNSZXF1aXJlZFxuICAgIH0pLFxuXG4gICAgLyoqXG4gICAgICAgKiBFbmFibGVzL2Rpc2FibGVzIHVuc29ydGluZyBvZiB0YWJsZSBjb2x1bW5zLiBTdXBwb3J0ZWQgYnkgRXVpSW5NZW1vcnlUYWJsZS5cbiAgICAgICAqL1xuICAgIGFsbG93TmV1dHJhbFNvcnQ6IFByb3BUeXBlcy5ib29sLFxuXG4gICAgLyoqXG4gICAgICAgKiBFbmFibGVzIHRoZSBkZWZhdWx0IHNvcnRpbmcgYWJpbGl0eSBmb3IgZWFjaCBjb2x1bW4uXG4gICAgICAgKi9cbiAgICBlbmFibGVBbGxDb2x1bW5zOiBQcm9wVHlwZXMuYm9vbCxcblxuICAgIC8qKlxuICAgICAgICogRGlzYWJsZXMgdGhlIHVzZXIncyBhYmlsaXR5IHRvIGNoYW5nZSB0aGUgc29ydCBidXQgc3RpbGwgc2hvd3MgdGhlIGN1cnJlbnQgZGlyZWN0aW9uXG4gICAgICAgKi9cbiAgICByZWFkT25seTogUHJvcFR5cGVzLmJvb2xcbiAgfSksXG5cbiAgLyoqXG4gICAgICogU2V0cyB0aGUgdGFibGUtbGF5b3V0IENTUyBwcm9wZXJ0eS4gTm90ZSB0aGF0IGF1dG8gdGFibGVMYXlvdXQgcHJldmVudHMgdHJ1bmNhdGVUZXh0IGZyb20gd29ya2luZyBwcm9wZXJseS5cbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBTZXRzIHRoZSB0YWJsZS1sYXlvdXQgQ1NTIHByb3BlcnR5LiBOb3RlIHRoYXQgYXV0byB0YWJsZUxheW91dCBwcmV2ZW50cyB0cnVuY2F0ZVRleHQgZnJvbSB3b3JraW5nIHByb3Blcmx5LlxuICAgICAqL1xuICB0YWJsZUxheW91dDogUHJvcFR5cGVzLm9uZU9mKFtcImZpeGVkXCIsIFwiYXV0b1wiXSksXG5cbiAgLyoqXG4gICAgICogQXBwbGllZCB0byB0YWJsZSBjZWxscyA9PiBBbnkgY2VsbCB1c2luZyByZW5kZXIgZnVuY3Rpb24gd2lsbCBzZXQgdGhpcyB0byBiZSBmYWxzZSwgbGVhZGluZyB0byB1bm5lY2Vzc2FyeSB3b3JkIGJyZWFrcy4gQXBwbHkgdGV4dE9ubHk6IHRydWUgaW4gb3JkZXIgdG8gZW5zdXJlIGl0IGJyZWFrcyBwcm9wZXJseVxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIEFwcGxpZWQgdG8gdGFibGUgY2VsbHMgPT4gQW55IGNlbGwgdXNpbmcgcmVuZGVyIGZ1bmN0aW9uIHdpbGwgc2V0IHRoaXMgdG8gYmUgZmFsc2UsIGxlYWRpbmcgdG8gdW5uZWNlc3Nhcnkgd29yZCBicmVha3MuIEFwcGx5IHRleHRPbmx5OiB0cnVlIGluIG9yZGVyIHRvIGVuc3VyZSBpdCBicmVha3MgcHJvcGVybHlcbiAgICAgKi9cbiAgdGV4dE9ubHk6IFByb3BUeXBlcy5ib29sXG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcHJlZGljYXRlJztcbmltcG9ydCB7IEV1aUNvbnRleHRNZW51SXRlbSwgRXVpQ29udGV4dE1lbnVQYW5lbCB9IGZyb20gJy4uL2NvbnRleHRfbWVudSc7XG5pbXBvcnQgeyBFdWlQb3BvdmVyIH0gZnJvbSAnLi4vcG9wb3Zlcic7XG5pbXBvcnQgeyBFdWlCdXR0b25JY29uIH0gZnJvbSAnLi4vYnV0dG9uJztcbmltcG9ydCB7IEV1aVRvb2xUaXAgfSBmcm9tICcuLi90b29sX3RpcCc7XG5pbXBvcnQgeyBFdWlJMThuIH0gZnJvbSAnLi4vaTE4bic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG5mdW5jdGlvbiBhY3Rpb25Jc0N1c3RvbUl0ZW1BY3Rpb24oYWN0aW9uKSB7XG4gIHJldHVybiBhY3Rpb24uaGFzT3duUHJvcGVydHkoJ3JlbmRlcicpO1xufVxuXG5leHBvcnQgdmFyIENvbGxhcHNlZEl0ZW1BY3Rpb25zID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhDb2xsYXBzZWRJdGVtQWN0aW9ucywgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihDb2xsYXBzZWRJdGVtQWN0aW9ucyk7XG5cbiAgZnVuY3Rpb24gQ29sbGFwc2VkSXRlbUFjdGlvbnMoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIENvbGxhcHNlZEl0ZW1BY3Rpb25zKTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsLmFwcGx5KF9zdXBlciwgW3RoaXNdLmNvbmNhdChhcmdzKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicG9wb3ZlckRpdlwiLCBudWxsKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzdGF0ZVwiLCB7XG4gICAgICBwb3BvdmVyT3BlbjogZmFsc2VcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJ0b2dnbGVQb3BvdmVyXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLnNldFN0YXRlKGZ1bmN0aW9uIChwcmV2U3RhdGUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwb3BvdmVyT3BlbjogIXByZXZTdGF0ZS5wb3BvdmVyT3BlblxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiY2xvc2VQb3BvdmVyXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgcG9wb3Zlck9wZW46IGZhbHNlXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvblBvcG92ZXJCbHVyXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIHlvdSBtdXN0IGJlIGFza2luZy4uLiBXVEY/IEkga25vdy4uLiBidXQgdGhpcyB0aW1lb3V0IGlzXG4gICAgICAvLyByZXF1aXJlZCB0byBtYWtlIHN1cmUgd2UgcHJvY2VzcyB0aGUgb25CbHVyIGV2ZW50cyBhZnRlciB0aGUgaW5pdGlhbFxuICAgICAgLy8gZXZlbnQgY3ljbGUuIFJlZmVyZW5jZTpcbiAgICAgIC8vIGh0dHBzOi8vbWVkaXVtLmNvbS9AamVzc2ViZWFjaC9kZWFsaW5nLXdpdGgtZm9jdXMtYW5kLWJsdXItaW4tYS1jb21wb3NpdGUtd2lkZ2V0LWluLXJlYWN0LTkwZDNjM2I0OWE5YlxuICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghX3RoaXMucG9wb3ZlckRpdi5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KSAmJiBfdGhpcy5wcm9wcy5vbkJsdXIpIHtcbiAgICAgICAgICBfdGhpcy5wcm9wcy5vbkJsdXIoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicmVnaXN0ZXJQb3BvdmVyRGl2XCIsIGZ1bmN0aW9uIChwb3BvdmVyRGl2KSB7XG4gICAgICBpZiAoIV90aGlzLnBvcG92ZXJEaXYpIHtcbiAgICAgICAgX3RoaXMucG9wb3ZlckRpdiA9IHBvcG92ZXJEaXY7XG4gICAgICAgIF90aGlzLnBvcG92ZXJEaXYgJiYgX3RoaXMucG9wb3ZlckRpdi5hZGRFdmVudExpc3RlbmVyKCdmb2N1c291dCcsIF90aGlzLm9uUG9wb3ZlckJsdXIpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uQ2xpY2tJdGVtXCIsIGZ1bmN0aW9uIChvbkNsaWNrQWN0aW9uKSB7XG4gICAgICBfdGhpcy5jbG9zZVBvcG92ZXIoKTtcblxuICAgICAgaWYgKG9uQ2xpY2tBY3Rpb24pIHtcbiAgICAgICAgb25DbGlja0FjdGlvbigpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKENvbGxhcHNlZEl0ZW1BY3Rpb25zLCBbe1xuICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIGlmICh0aGlzLnBvcG92ZXJEaXYpIHtcbiAgICAgICAgdGhpcy5wb3BvdmVyRGl2LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ZvY3Vzb3V0JywgdGhpcy5vblBvcG92ZXJCbHVyKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGFjdGlvbnMgPSBfdGhpcyRwcm9wcy5hY3Rpb25zLFxuICAgICAgICAgIGl0ZW1JZCA9IF90aGlzJHByb3BzLml0ZW1JZCxcbiAgICAgICAgICBpdGVtID0gX3RoaXMkcHJvcHMuaXRlbSxcbiAgICAgICAgICBhY3Rpb25FbmFibGVkID0gX3RoaXMkcHJvcHMuYWN0aW9uRW5hYmxlZCxcbiAgICAgICAgICBvbkZvY3VzID0gX3RoaXMkcHJvcHMub25Gb2N1cyxcbiAgICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wcy5jbGFzc05hbWU7XG4gICAgICB2YXIgaXNPcGVuID0gdGhpcy5zdGF0ZS5wb3BvdmVyT3BlbjtcbiAgICAgIHZhciBhbGxEaXNhYmxlZCA9IHRydWU7XG4gICAgICB2YXIgY29udHJvbHMgPSBhY3Rpb25zLnJlZHVjZShmdW5jdGlvbiAoY29udHJvbHMsIGFjdGlvbiwgaW5kZXgpIHtcbiAgICAgICAgdmFyIGtleSA9IFwiYWN0aW9uX1wiLmNvbmNhdChpdGVtSWQsIFwiX1wiKS5jb25jYXQoaW5kZXgpO1xuICAgICAgICB2YXIgYXZhaWxhYmxlID0gYWN0aW9uLmF2YWlsYWJsZSA/IGFjdGlvbi5hdmFpbGFibGUoaXRlbSkgOiB0cnVlO1xuXG4gICAgICAgIGlmICghYXZhaWxhYmxlKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbnRyb2xzO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGVuYWJsZWQgPSBhY3Rpb25FbmFibGVkKGFjdGlvbik7XG4gICAgICAgIGFsbERpc2FibGVkID0gYWxsRGlzYWJsZWQgJiYgIWVuYWJsZWQ7XG5cbiAgICAgICAgaWYgKGFjdGlvbklzQ3VzdG9tSXRlbUFjdGlvbihhY3Rpb24pKSB7XG4gICAgICAgICAgdmFyIGN1c3RvbUFjdGlvbiA9IGFjdGlvbjtcbiAgICAgICAgICB2YXIgYWN0aW9uQ29udHJvbCA9IGN1c3RvbUFjdGlvbi5yZW5kZXIoaXRlbSwgZW5hYmxlZCk7XG4gICAgICAgICAgdmFyIGFjdGlvbkNvbnRyb2xPbkNsaWNrID0gYWN0aW9uQ29udHJvbCAmJiBhY3Rpb25Db250cm9sLnByb3BzICYmIGFjdGlvbkNvbnRyb2wucHJvcHMub25DbGljaztcbiAgICAgICAgICBjb250cm9scy5wdXNoKF9fX0Vtb3Rpb25KU1goRXVpQ29udGV4dE1lbnVJdGVtLCB7XG4gICAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soKSB7XG4gICAgICAgICAgICAgIHJldHVybiBfdGhpczIub25DbGlja0l0ZW0oYWN0aW9uQ29udHJvbE9uQ2xpY2sgPyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjdGlvbkNvbnRyb2xPbkNsaWNrKGl0ZW0pO1xuICAgICAgICAgICAgICB9IDogdW5kZWZpbmVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCBhY3Rpb25Db250cm9sKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIF9vbkNsaWNrID0gYWN0aW9uLm9uQ2xpY2ssXG4gICAgICAgICAgICAgIG5hbWUgPSBhY3Rpb24ubmFtZSxcbiAgICAgICAgICAgICAgaHJlZiA9IGFjdGlvbi5ocmVmLFxuICAgICAgICAgICAgICB0YXJnZXQgPSBhY3Rpb24udGFyZ2V0LFxuICAgICAgICAgICAgICBkYXRhVGVzdFN1YmogPSBhY3Rpb25bJ2RhdGEtdGVzdC1zdWJqJ107XG4gICAgICAgICAgdmFyIGJ1dHRvbkljb24gPSBhY3Rpb24uaWNvbjtcbiAgICAgICAgICB2YXIgaWNvbjtcblxuICAgICAgICAgIGlmIChidXR0b25JY29uKSB7XG4gICAgICAgICAgICBpY29uID0gaXNTdHJpbmcoYnV0dG9uSWNvbikgPyBidXR0b25JY29uIDogYnV0dG9uSWNvbihpdGVtKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgYnV0dG9uQ29udGVudCA9IHR5cGVvZiBuYW1lID09PSAnZnVuY3Rpb24nID8gbmFtZShpdGVtKSA6IG5hbWU7XG4gICAgICAgICAgY29udHJvbHMucHVzaChfX19FbW90aW9uSlNYKEV1aUNvbnRleHRNZW51SXRlbSwge1xuICAgICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgICBkaXNhYmxlZDogIWVuYWJsZWQsXG4gICAgICAgICAgICBocmVmOiBocmVmLFxuICAgICAgICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICAgICAgICBpY29uOiBpY29uLFxuICAgICAgICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBkYXRhVGVzdFN1YmosXG4gICAgICAgICAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKCkge1xuICAgICAgICAgICAgICByZXR1cm4gX3RoaXMyLm9uQ2xpY2tJdGVtKF9vbkNsaWNrID8gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfb25DbGljayhpdGVtKTtcbiAgICAgICAgICAgICAgfSA6IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSwgYnV0dG9uQ29udGVudCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRyb2xzO1xuICAgICAgfSwgW10pO1xuXG4gICAgICB2YXIgcG9wb3ZlckJ1dHRvbiA9IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICB0b2tlbjogXCJldWlDb2xsYXBzZWRJdGVtQWN0aW9ucy5hbGxBY3Rpb25zXCIsXG4gICAgICAgIGRlZmF1bHQ6IFwiQWxsIGFjdGlvbnNcIlxuICAgICAgfSwgZnVuY3Rpb24gKGFsbEFjdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpQnV0dG9uSWNvbiwge1xuICAgICAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lLFxuICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBhbGxBY3Rpb25zLFxuICAgICAgICAgIGljb25UeXBlOiBcImJveGVzSG9yaXpvbnRhbFwiLFxuICAgICAgICAgIGNvbG9yOiBcInRleHRcIixcbiAgICAgICAgICBpc0Rpc2FibGVkOiBhbGxEaXNhYmxlZCxcbiAgICAgICAgICBvbkNsaWNrOiBfdGhpczIudG9nZ2xlUG9wb3Zlci5iaW5kKF90aGlzMiksXG4gICAgICAgICAgb25Gb2N1czogb25Gb2N1cyxcbiAgICAgICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFwiZXVpQ29sbGFwc2VkSXRlbUFjdGlvbnNCdXR0b25cIlxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgd2l0aFRvb2x0aXAgPSAhYWxsRGlzYWJsZWQgJiYgX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgIHRva2VuOiBcImV1aUNvbGxhcHNlZEl0ZW1BY3Rpb25zLmFsbEFjdGlvbnNcIixcbiAgICAgICAgZGVmYXVsdDogXCJBbGwgYWN0aW9uc1wiXG4gICAgICB9LCBmdW5jdGlvbiAoYWxsQWN0aW9ucykge1xuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlUb29sVGlwLCB7XG4gICAgICAgICAgY29udGVudDogYWxsQWN0aW9ucyxcbiAgICAgICAgICBkZWxheTogXCJsb25nXCJcbiAgICAgICAgfSwgcG9wb3ZlckJ1dHRvbik7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpUG9wb3Zlciwge1xuICAgICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZSxcbiAgICAgICAgcG9wb3ZlclJlZjogdGhpcy5yZWdpc3RlclBvcG92ZXJEaXYsXG4gICAgICAgIGlkOiBcIlwiLmNvbmNhdChpdGVtSWQsIFwiLWFjdGlvbnNcIiksXG4gICAgICAgIGlzT3BlbjogaXNPcGVuLFxuICAgICAgICBidXR0b246IHdpdGhUb29sdGlwIHx8IHBvcG92ZXJCdXR0b24sXG4gICAgICAgIGNsb3NlUG9wb3ZlcjogdGhpcy5jbG9zZVBvcG92ZXIsXG4gICAgICAgIHBhbmVsUGFkZGluZ1NpemU6IFwibm9uZVwiLFxuICAgICAgICBhbmNob3JQb3NpdGlvbjogXCJsZWZ0Q2VudGVyXCJcbiAgICAgIH0sIF9fX0Vtb3Rpb25KU1goRXVpQ29udGV4dE1lbnVQYW5lbCwge1xuICAgICAgICBpdGVtczogY29udHJvbHNcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gQ29sbGFwc2VkSXRlbUFjdGlvbnM7XG59KENvbXBvbmVudCk7XG5Db2xsYXBzZWRJdGVtQWN0aW9ucy5wcm9wVHlwZXMgPSB7XG4gIGFjdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zaGFwZSh7XG4gICAgLyoqXG4gICAgICAgKiBUaGUgdHlwZSBvZiBhY3Rpb25cbiAgICAgICAqL1xuICAgIHR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJidXR0b25cIl0pLCBQcm9wVHlwZXMub25lT2YoW1wiaWNvblwiXSkuaXNSZXF1aXJlZF0pLFxuXG4gICAgLyoqXG4gICAgICAgKiBEZWZpbmVzIHRoZSBjb2xvciBvZiB0aGUgYnV0dG9uXG4gICAgICAgKi9cbiAgICBjb2xvcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcInByaW1hcnlcIiwgXCJkYW5nZXJcIiwgXCJ0ZXh0XCIsIFwiZ2hvc3RcIiwgXCJzdWNjZXNzXCIsIFwid2FybmluZ1wiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZF0pLCBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wicHJpbWFyeVwiLCBcImFjY2VudFwiLCBcInN1Y2Nlc3NcIiwgXCJ3YXJuaW5nXCIsIFwiZGFuZ2VyXCIsIFwiZ2hvc3RcIiwgXCJ0ZXh0XCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXSldKSxcblxuICAgIC8qKlxuICAgICAgICogVGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgYWN0aW9uICh3aWxsIGJlIHRoZSBidXR0b24gY2FwdGlvbilcbiAgICAgICAqL1xuXG4gICAgLyoqXG4gICAgICAgKiBUaGUgZGlzcGxheSBuYW1lIG9mIHRoZSBhY3Rpb24gKHdpbGwgYmUgdGhlIGJ1dHRvbiBjYXB0aW9uKVxuICAgICAgICovXG4gICAgbmFtZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsXG5cbiAgICAvKipcbiAgICAgICAqIERlc2NyaWJlcyB0aGUgYWN0aW9uICh3aWxsIGJlIHRoZSBidXR0b24gdGl0bGUpXG4gICAgICAgKi9cblxuICAgIC8qKlxuICAgICAgICogRGVzY3JpYmVzIHRoZSBhY3Rpb24gKHdpbGwgYmUgdGhlIGJ1dHRvbiB0aXRsZSlcbiAgICAgICAqL1xuICAgIGRlc2NyaXB0aW9uOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG5cbiAgICAvKipcbiAgICAgICAqIEEgaGFuZGxlciBmdW5jdGlvbiB0byBleGVjdXRlIHRoZSBhY3Rpb25cbiAgICAgICAqL1xuXG4gICAgLyoqXG4gICAgICAgKiBBIGhhbmRsZXIgZnVuY3Rpb24gdG8gZXhlY3V0ZSB0aGUgYWN0aW9uXG4gICAgICAgKi9cbiAgICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBocmVmOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHRhcmdldDogUHJvcFR5cGVzLnN0cmluZyxcblxuICAgIC8qKlxuICAgICAgICogQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGRldGVybWluZXMgd2hldGhlciB0aGUgYWN0aW9uIGlzIGF2YWlsYWJsZVxuICAgICAgICovXG5cbiAgICAvKipcbiAgICAgICAqIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGFjdGlvbiBpcyBhdmFpbGFibGVcbiAgICAgICAqL1xuICAgIGF2YWlsYWJsZTogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgICAvKipcbiAgICAgICAqIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGFjdGlvbiBpcyBlbmFibGVkXG4gICAgICAgKi9cblxuICAgIC8qKlxuICAgICAgICogQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGRldGVybWluZXMgd2hldGhlciB0aGUgYWN0aW9uIGlzIGVuYWJsZWRcbiAgICAgICAqL1xuICAgIGVuYWJsZWQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIGlzUHJpbWFyeTogUHJvcFR5cGVzLmJvb2wsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gICAgLyoqXG4gICAgICAgKiBBc3NvY2lhdGVzIGFuIGljb24gd2l0aCB0aGUgYnV0dG9uXG4gICAgICAgKi9cbiAgICBpY29uOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbGVydFwiLCBcImFuYWx5emVFdmVudFwiLCBcImFubm90YXRpb25cIiwgXCJhcG1BcHBcIiwgXCJhcG1UcmFjZVwiLCBcImFwcFNlYXJjaEFwcFwiLCBcImFwcHNcIiwgXCJhcnJvd0Rvd25cIiwgXCJhcnJvd0xlZnRcIiwgXCJhcnJvd1JpZ2h0XCIsIFwiYXJyb3dVcFwiLCBcImFycm93U3RhcnRcIiwgXCJhcnJvd0VuZFwiLCBcImFzdGVyaXNrXCIsIFwiYXVkaXRiZWF0QXBwXCIsIFwiYmVha2VyXCIsIFwiYmVsbFwiLCBcImJlbGxTbGFzaFwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGVja1wiLCBcImNoZWNrSW5DaXJjbGVGaWxsZWRcIiwgXCJjaGVlclwiLCBcImNsYXNzaWZpY2F0aW9uSm9iXCIsIFwiY2xvY2tcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkFDaXJjbGVGaWxsZWRcIiwgXCJjcm9zc2hhaXJzXCIsIFwiY3VycmVuY3lcIiwgXCJjdXRcIiwgXCJkYXNoYm9hcmRBcHBcIiwgXCJkYXRhVmlzdWFsaXplclwiLCBcImRhdGFiYXNlXCIsIFwiZGVza3RvcFwiLCBcImRldlRvb2xzQXBwXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZXFsXCIsIFwiZXJhc2VyXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZsYWdcIiwgXCJmbGVldEFwcFwiLCBcImZvbGRcIiwgXCJmb2xkZXJDaGVja1wiLCBcImZvbGRlckNsb3NlZFwiLCBcImZvbGRlckV4Y2xhbWF0aW9uXCIsIFwiZm9sZGVyT3BlblwiLCBcImZyYW1lTmV4dFwiLCBcImZyYW1lUHJldmlvdXNcIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFNjcmVlbkV4aXRcIiwgXCJmdW5jdGlvblwiLCBcImdlYXJcIiwgXCJnaXNBcHBcIiwgXCJnbGFzc2VzXCIsIFwiZ2xvYmVcIiwgXCJncmFiXCIsIFwiZ3JhYkhvcml6b250YWxcIiwgXCJncmFwaEFwcFwiLCBcImdyaWRcIiwgXCJncm9rQXBwXCIsIFwiaGVhcnRcIiwgXCJoZWFydGJlYXRBcHBcIiwgXCJoZWF0bWFwXCIsIFwiaGVscFwiLCBcImhvbWVcIiwgXCJpSW5DaXJjbGVcIiwgXCJpbWFnZVwiLCBcImltcG9ydEFjdGlvblwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5wdXRPdXRwdXRcIiwgXCJpbnNwZWN0XCIsIFwiaW52ZXJ0XCIsIFwiaXBcIiwgXCJrZXlib2FyZFwiLCBcImtxbEZpZWxkXCIsIFwia3FsRnVuY3Rpb25cIiwgXCJrcWxPcGVyYW5kXCIsIFwia3FsU2VsZWN0b3JcIiwgXCJrcWxWYWx1ZVwiLCBcImt1YmVybmV0ZXNOb2RlXCIsIFwia3ViZXJuZXRlc1BvZFwiLCBcImxheWVyc1wiLCBcImxlbnNBcHBcIiwgXCJsZXR0ZXJpbmdcIiwgXCJsaW5lRGFzaGVkXCIsIFwibGluZURvdHRlZFwiLCBcImxpbmVTb2xpZFwiLCBcImxpbmtcIiwgXCJsaXN0XCIsIFwibGlzdEFkZFwiLCBcImxvY2tcIiwgXCJsb2NrT3BlblwiLCBcImxvZ29BV1NcIiwgXCJsb2dvQVdTTW9ub1wiLCBcImxvZ29BZXJvc3Bpa2VcIiwgXCJsb2dvQXBhY2hlXCIsIFwibG9nb0FwcFNlYXJjaFwiLCBcImxvZ29BenVyZVwiLCBcImxvZ29BenVyZU1vbm9cIiwgXCJsb2dvQmVhdHNcIiwgXCJsb2dvQnVzaW5lc3NBbmFseXRpY3NcIiwgXCJsb2dvQ2VwaFwiLCBcImxvZ29DbG91ZFwiLCBcImxvZ29DbG91ZEVudGVycHJpc2VcIiwgXCJsb2dvQ29kZVwiLCBcImxvZ29Db2Rlc2FuZGJveFwiLCBcImxvZ29Db3VjaGJhc2VcIiwgXCJsb2dvRG9ja2VyXCIsIFwibG9nb0Ryb3B3aXphcmRcIiwgXCJsb2dvRWxhc3RpY1wiLCBcImxvZ29FbGFzdGljU3RhY2tcIiwgXCJsb2dvRWxhc3RpY3NlYXJjaFwiLCBcImxvZ29FbnRlcnByaXNlU2VhcmNoXCIsIFwibG9nb0V0Y2RcIiwgXCJsb2dvR0NQXCIsIFwibG9nb0dDUE1vbm9cIiwgXCJsb2dvR2l0aHViXCIsIFwibG9nb0dtYWlsXCIsIFwibG9nb0dvbGFuZ1wiLCBcImxvZ29Hb29nbGVHXCIsIFwibG9nb0hBcHJveHlcIiwgXCJsb2dvSUJNXCIsIFwibG9nb0lCTU1vbm9cIiwgXCJsb2dvS2Fma2FcIiwgXCJsb2dvS2liYW5hXCIsIFwibG9nb0t1YmVybmV0ZXNcIiwgXCJsb2dvTG9nZ2luZ1wiLCBcImxvZ29Mb2dzdGFzaFwiLCBcImxvZ29NYXBzXCIsIFwibG9nb01lbWNhY2hlZFwiLCBcImxvZ29NZXRyaWNzXCIsIFwibG9nb01vbmdvZGJcIiwgXCJsb2dvTXlTUUxcIiwgXCJsb2dvTmdpbnhcIiwgXCJsb2dvT2JzZXJ2YWJpbGl0eVwiLCBcImxvZ29Pc3F1ZXJ5XCIsIFwibG9nb1BocFwiLCBcImxvZ29Qb3N0Z3Jlc1wiLCBcImxvZ29Qcm9tZXRoZXVzXCIsIFwibG9nb1JhYmJpdG1xXCIsIFwibG9nb1JlZGlzXCIsIFwibG9nb1NlY3VyaXR5XCIsIFwibG9nb1NpdGVTZWFyY2hcIiwgXCJsb2dvU2tldGNoXCIsIFwibG9nb1NsYWNrXCIsIFwibG9nb1VwdGltZVwiLCBcImxvZ29XZWJob29rXCIsIFwibG9nb1dpbmRvd3NcIiwgXCJsb2dvV29ya3BsYWNlU2VhcmNoXCIsIFwibG9nc0FwcFwiLCBcImxvZ3N0YXNoRmlsdGVyXCIsIFwibG9nc3Rhc2hJZlwiLCBcImxvZ3N0YXNoSW5wdXRcIiwgXCJsb2dzdGFzaE91dHB1dFwiLCBcImxvZ3N0YXNoUXVldWVcIiwgXCJtYWNoaW5lTGVhcm5pbmdBcHBcIiwgXCJtYWduZXRcIiwgXCJtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uXCIsIFwibWFnbmlmeVdpdGhNaW51c1wiLCBcIm1hZ25pZnlXaXRoUGx1c1wiLCBcIm1hbmFnZW1lbnRBcHBcIiwgXCJtYXBNYXJrZXJcIiwgXCJtZW1vcnlcIiwgXCJtZW51XCIsIFwibWVudURvd25cIiwgXCJtZW51TGVmdFwiLCBcIm1lbnVSaWdodFwiLCBcIm1lbnVVcFwiLCBcIm1lcmdlXCIsIFwibWV0cmljYmVhdEFwcFwiLCBcIm1ldHJpY3NBcHBcIiwgXCJtaW5pbWl6ZVwiLCBcIm1pbnVzXCIsIFwibWludXNJbkNpcmNsZVwiLCBcIm1pbnVzSW5DaXJjbGVGaWxsZWRcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5vZGVcIiwgXCJub3RlYm9va0FwcFwiLCBcIm51bWJlclwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIiwgXCJvdXRsaWVyRGV0ZWN0aW9uSm9iXCIsIFwicGFja2FnZVwiLCBcInBhY2tldGJlYXRBcHBcIiwgXCJwYWdlU2VsZWN0XCIsIFwicGFnZXNTZWxlY3RcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVsaW5lQXBwXCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNub3dmbGFrZVwiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc0FwcFwiLCBcInNxbEFwcFwiLCBcInN0YXJFbXB0eVwiLCBcInN0YXJFbXB0eVNwYWNlXCIsIFwic3RhckZpbGxlZFwiLCBcInN0YXJGaWxsZWRTcGFjZVwiLCBcInN0YXJNaW51c0VtcHR5XCIsIFwic3Rhck1pbnVzRmlsbGVkXCIsIFwic3RhclBsdXNFbXB0eVwiLCBcInN0YXJQbHVzRmlsbGVkXCIsIFwic3RhdHNcIiwgXCJzdG9wXCIsIFwic3RvcEZpbGxlZFwiLCBcInN0b3BTbGFzaFwiLCBcInN0b3JhZ2VcIiwgXCJzdHJpbmdcIiwgXCJzdWJtb2R1bGVcIiwgXCJzdW5cIiwgXCJzd2F0Y2hJbnB1dFwiLCBcInN5bWxpbmtcIiwgXCJ0YWJsZURlbnNpdHlDb21wYWN0XCIsIFwidGFibGVEZW5zaXR5RXhwYW5kZWRcIiwgXCJ0YWJsZURlbnNpdHlOb3JtYWxcIiwgXCJ0YWJsZU9mQ29udGVudHNcIiwgXCJ0YWdcIiwgXCJ0ZWFyXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJ0aW1lbGluZVwiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFzaFwiLCBcInVuZm9sZFwiLCBcInVubGlua1wiLCBcInVwZ3JhZGVBc3Npc3RhbnRBcHBcIiwgXCJ1cHRpbWVBcHBcIiwgXCJ1c2VyXCIsIFwidXNlckF2YXRhclwiLCBcInVzZXJzXCIsIFwidXNlcnNSb2xlc0FwcFwiLCBcInZlY3RvclwiLCBcInZpZGVvUGxheWVyXCIsIFwidmlzQXJlYVwiLCBcInZpc0FyZWFTdGFja2VkXCIsIFwidmlzQmFySG9yaXpvbnRhbFwiLCBcInZpc0Jhckhvcml6b250YWxTdGFja2VkXCIsIFwidmlzQmFyVmVydGljYWxcIiwgXCJ2aXNCYXJWZXJ0aWNhbFN0YWNrZWRcIiwgXCJ2aXNHYXVnZVwiLCBcInZpc0dvYWxcIiwgXCJ2aXNMaW5lXCIsIFwidmlzTWFwQ29vcmRpbmF0ZVwiLCBcInZpc01hcFJlZ2lvblwiLCBcInZpc01ldHJpY1wiLCBcInZpc1BpZVwiLCBcInZpc1RhYmxlXCIsIFwidmlzVGFnQ2xvdWRcIiwgXCJ2aXNUZXh0XCIsIFwidmlzVGltZWxpb25cIiwgXCJ2aXNWZWdhXCIsIFwidmlzVmlzdWFsQnVpbGRlclwiLCBcInZpc3VhbGl6ZUFwcFwiLCBcIndhdGNoZXNBcHBcIiwgXCJ3b3JkV3JhcFwiLCBcIndvcmRXcmFwRGlzYWJsZWRcIiwgXCJ3b3JrcGxhY2VTZWFyY2hBcHBcIiwgXCJ3cmVuY2hcIiwgXCJ0b2tlbkFsaWFzXCIsIFwidG9rZW5Bbm5vdGF0aW9uXCIsIFwidG9rZW5BcnJheVwiLCBcInRva2VuQmluYXJ5XCIsIFwidG9rZW5Cb29sZWFuXCIsIFwidG9rZW5DbGFzc1wiLCBcInRva2VuQ29tcGxldGlvblN1Z2dlc3RlclwiLCBcInRva2VuQ29uc3RhbnRcIiwgXCJ0b2tlbkRhdGVcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2hhcGVcIiwgXCJ0b2tlblN0cmluZ1wiLCBcInRva2VuU3RydWN0XCIsIFwidG9rZW5TeW1ib2xcIiwgXCJ0b2tlblRhZ1wiLCBcInRva2VuVGV4dFwiLCBcInRva2VuVG9rZW5Db3VudFwiLCBcInRva2VuVmFyaWFibGVcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRdKVxuICB9KS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIC8qKlxuICAgICAgICogVGhlIGZ1bmN0aW9uIHRoYXQgcmVuZGVycyB0aGUgYWN0aW9uLiBOb3RlIHRoYXQgdGhlIHJldHVybmVkIG5vZGUgaXMgZXhwZWN0ZWQgdG8gaGF2ZSBgb25Gb2N1c2AgYW5kIGBvbkJsdXJgIGZ1bmN0aW9uc1xuICAgICAgICovXG4gICAgcmVuZGVyOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuXG4gICAgLyoqXG4gICAgICAgKiBBIGNhbGxiYWNrIHRoYXQgZGVmaW5lcyB3aGV0aGVyIHRoZSBhY3Rpb24gaXMgYXZhaWxhYmxlXG4gICAgICAgKi9cbiAgICBhdmFpbGFibGU6IFByb3BUeXBlcy5mdW5jLFxuXG4gICAgLyoqXG4gICAgICAgKiBBIGNhbGxiYWNrIHRoYXQgZGVmaW5lcyB3aGV0aGVyIHRoZSBhY3Rpb24gaXMgZW5hYmxlZFxuICAgICAgICovXG4gICAgZW5hYmxlZDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgaXNQcmltYXJ5OiBQcm9wVHlwZXMuYm9vbFxuICB9KS5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCkuaXNSZXF1aXJlZCxcbiAgaXRlbTogUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLFxuICBpdGVtSWQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCxcbiAgYWN0aW9uRW5hYmxlZDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBvbkZvY3VzOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25CbHVyOiBQcm9wVHlwZXMuZnVuY1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IERlZmF1bHRJdGVtQWN0aW9uIH0gZnJvbSAnLi9kZWZhdWx0X2l0ZW1fYWN0aW9uJztcbmltcG9ydCB7IEN1c3RvbUl0ZW1BY3Rpb24gfSBmcm9tICcuL2N1c3RvbV9pdGVtX2FjdGlvbic7XG5pbXBvcnQgeyBpc0N1c3RvbUl0ZW1BY3Rpb24gfSBmcm9tICcuL2FjdGlvbl90eXBlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFeHBhbmRlZEl0ZW1BY3Rpb25zID0gZnVuY3Rpb24gRXhwYW5kZWRJdGVtQWN0aW9ucyhfcmVmKSB7XG4gIHZhciBhY3Rpb25zID0gX3JlZi5hY3Rpb25zLFxuICAgICAgaXRlbUlkID0gX3JlZi5pdGVtSWQsXG4gICAgICBpdGVtID0gX3JlZi5pdGVtLFxuICAgICAgYWN0aW9uRW5hYmxlZCA9IF9yZWYuYWN0aW9uRW5hYmxlZCxcbiAgICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lO1xuICB2YXIgbW9yZVRoYW5UaHJlZSA9IGFjdGlvbnMubGVuZ3RoID4gMjtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goUmVhY3QuRnJhZ21lbnQsIG51bGwsIGFjdGlvbnMucmVkdWNlKGZ1bmN0aW9uICh0b29scywgYWN0aW9uLCBpbmRleCkge1xuICAgIHZhciBhdmFpbGFibGUgPSBhY3Rpb24uYXZhaWxhYmxlID8gYWN0aW9uLmF2YWlsYWJsZShpdGVtKSA6IHRydWU7XG5cbiAgICBpZiAoIWF2YWlsYWJsZSkge1xuICAgICAgcmV0dXJuIHRvb2xzO1xuICAgIH1cblxuICAgIHZhciBlbmFibGVkID0gYWN0aW9uRW5hYmxlZChhY3Rpb24pO1xuICAgIHZhciBrZXkgPSBcIml0ZW1fYWN0aW9uX1wiLmNvbmNhdChpdGVtSWQsIFwiX1wiKS5jb25jYXQoaW5kZXgpO1xuICAgIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcyhjbGFzc05hbWUsIHtcbiAgICAgIGV4cGFuZGVkSXRlbUFjdGlvbnNfX2NvbXBsZXRlbHlIaWRlOiBtb3JlVGhhblRocmVlICYmIGluZGV4IDwgMlxuICAgIH0pO1xuXG4gICAgaWYgKGlzQ3VzdG9tSXRlbUFjdGlvbihhY3Rpb24pKSB7XG4gICAgICAvLyBjdXN0b20gYWN0aW9uIGhhcyBhIHJlbmRlciBmdW5jdGlvblxuICAgICAgdG9vbHMucHVzaChfX19FbW90aW9uSlNYKEN1c3RvbUl0ZW1BY3Rpb24sIHtcbiAgICAgICAga2V5OiBrZXksXG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICBhY3Rpb246IGFjdGlvbixcbiAgICAgICAgZW5hYmxlZDogZW5hYmxlZCxcbiAgICAgICAgaXRlbTogaXRlbVxuICAgICAgfSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0b29scy5wdXNoKF9fX0Vtb3Rpb25KU1goRGVmYXVsdEl0ZW1BY3Rpb24sIHtcbiAgICAgICAga2V5OiBrZXksXG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgYWN0aW9uOiBhY3Rpb24sXG4gICAgICAgIGVuYWJsZWQ6IGVuYWJsZWQsXG4gICAgICAgIGl0ZW06IGl0ZW1cbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdG9vbHM7XG4gIH0sIFtdKSk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcHJlZGljYXRlJztcbmltcG9ydCB7IEV1aUJ1dHRvbkVtcHR5LCBFdWlCdXR0b25JY29uIH0gZnJvbSAnLi4vYnV0dG9uJztcbmltcG9ydCB7IEV1aVRvb2xUaXAgfSBmcm9tICcuLi90b29sX3RpcCc7XG5pbXBvcnQgeyB1c2VHZW5lcmF0ZWRIdG1sSWQgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hY2Nlc3NpYmlsaXR5JztcbmltcG9ydCB7IEV1aVNjcmVlblJlYWRlck9ubHkgfSBmcm9tICcuLi9hY2Nlc3NpYmlsaXR5JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG4vLyBJbiBvcmRlciB0byB1c2UgZ2VuZXJpY3Mgd2l0aCBhbiBhcnJvdyBmdW5jdGlvbiBpbnNpZGUgYSAudHN4IGZpbGUsIGl0J3MgbmVjZXNzYXJ5IHRvIHVzZVxuLy8gdGhpcyBgZXh0ZW5kc2AgaGFjayBhbmQgZGVjbGFyZSB0aGUgdHlwZXMgYXMgc2hvd24sIGluc3RlYWQgb2YgZGVjbGFyaW5nIHRoZSBjb25zdCBhcyBhXG4vLyBGdW5jdGlvbkNvbXBvbmVudFxuZXhwb3J0IHZhciBEZWZhdWx0SXRlbUFjdGlvbiA9IGZ1bmN0aW9uIERlZmF1bHRJdGVtQWN0aW9uKF9yZWYpIHtcbiAgdmFyIGFjdGlvbiA9IF9yZWYuYWN0aW9uLFxuICAgICAgZW5hYmxlZCA9IF9yZWYuZW5hYmxlZCxcbiAgICAgIGl0ZW0gPSBfcmVmLml0ZW0sXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZTtcblxuICBpZiAoIWFjdGlvbi5vbkNsaWNrICYmICFhY3Rpb24uaHJlZikge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCByZW5kZXIgaXRlbSBhY3Rpb24gW1wiLmNvbmNhdChhY3Rpb24ubmFtZSwgXCJdLiBNaXNzaW5nIHJlcXVpcmVkICdvbkNsaWNrJyBjYWxsYmFja1xcbiAgICAgIG9yICdocmVmJyBzdHJpbmcuIElmIHlvdSB3YW50IHRvIHByb3ZpZGUgYSBjdXN0b20gYWN0aW9uIGNvbnRyb2wsIG1ha2Ugc3VyZSB0byBkZWZpbmUgdGhlICdyZW5kZXInIGNhbGxiYWNrXCIpKTtcbiAgfVxuXG4gIHZhciBvbkNsaWNrID0gYWN0aW9uLm9uQ2xpY2sgPyBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGFjdGlvbi5vbkNsaWNrKGl0ZW0pO1xuICB9IDogdW5kZWZpbmVkO1xuICB2YXIgYnV0dG9uQ29sb3IgPSBhY3Rpb24uY29sb3I7XG4gIHZhciBjb2xvciA9ICdwcmltYXJ5JztcblxuICBpZiAoYnV0dG9uQ29sb3IpIHtcbiAgICBjb2xvciA9IGlzU3RyaW5nKGJ1dHRvbkNvbG9yKSA/IGJ1dHRvbkNvbG9yIDogYnV0dG9uQ29sb3IoaXRlbSk7XG4gIH1cblxuICB2YXIgYnV0dG9uSWNvbiA9IGFjdGlvbi5pY29uO1xuICB2YXIgaWNvbjtcblxuICBpZiAoYnV0dG9uSWNvbikge1xuICAgIGljb24gPSBpc1N0cmluZyhidXR0b25JY29uKSA/IGJ1dHRvbkljb24gOiBidXR0b25JY29uKGl0ZW0pO1xuICB9XG5cbiAgdmFyIGJ1dHRvbjtcbiAgdmFyIGFjdGlvbkNvbnRlbnQgPSB0eXBlb2YgYWN0aW9uLm5hbWUgPT09ICdmdW5jdGlvbicgPyBhY3Rpb24ubmFtZShpdGVtKSA6IGFjdGlvbi5uYW1lO1xuICB2YXIgYXJpYUxhYmVsSWQgPSB1c2VHZW5lcmF0ZWRIdG1sSWQoKTtcblxuICBpZiAoYWN0aW9uLnR5cGUgPT09ICdpY29uJykge1xuICAgIGlmICghaWNvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IHJlbmRlciBpdGVtIGFjdGlvbiBbXCIuY29uY2F0KGFjdGlvbi5uYW1lLCBcIl0uIEl0IGlzIGNvbmZpZ3VyZWQgdG8gcmVuZGVyIGFzIGFuIGljb24gYnV0IG5vXFxuICAgICAgaWNvbiBpcyBwcm92aWRlZC4gTWFrZSBzdXJlIHRvIHNldCB0aGUgJ2ljb24nIHByb3BlcnR5IG9mIHRoZSBhY3Rpb25cIikpO1xuICAgIH1cblxuICAgIGJ1dHRvbiA9IF9fX0Vtb3Rpb25KU1goUmVhY3QuRnJhZ21lbnQsIG51bGwsIF9fX0Vtb3Rpb25KU1goRXVpQnV0dG9uSWNvbiwge1xuICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWUsXG4gICAgICBcImFyaWEtbGFiZWxsZWRieVwiOiBhcmlhTGFiZWxJZCxcbiAgICAgIGlzRGlzYWJsZWQ6ICFlbmFibGVkLFxuICAgICAgY29sb3I6IGNvbG9yLFxuICAgICAgaWNvblR5cGU6IGljb24sXG4gICAgICBvbkNsaWNrOiBvbkNsaWNrLFxuICAgICAgaHJlZjogYWN0aW9uLmhyZWYsXG4gICAgICB0YXJnZXQ6IGFjdGlvbi50YXJnZXQsXG4gICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IGFjdGlvblsnZGF0YS10ZXN0LXN1YmonXVxuICAgIH0pLCBfX19FbW90aW9uSlNYKEV1aVNjcmVlblJlYWRlck9ubHksIG51bGwsIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgIGlkOiBhcmlhTGFiZWxJZFxuICAgIH0sIGFjdGlvbkNvbnRlbnQpKSk7XG4gIH0gZWxzZSB7XG4gICAgYnV0dG9uID0gX19fRW1vdGlvbkpTWChFdWlCdXR0b25FbXB0eSwge1xuICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWUsXG4gICAgICBzaXplOiBcInNcIixcbiAgICAgIGlzRGlzYWJsZWQ6ICFlbmFibGVkLFxuICAgICAgY29sb3I6IGNvbG9yLFxuICAgICAgaWNvblR5cGU6IGljb24sXG4gICAgICBvbkNsaWNrOiBvbkNsaWNrLFxuICAgICAgaHJlZjogYWN0aW9uLmhyZWYsXG4gICAgICB0YXJnZXQ6IGFjdGlvbi50YXJnZXQsXG4gICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IGFjdGlvblsnZGF0YS10ZXN0LXN1YmonXSxcbiAgICAgIGZsdXNoOiBcInJpZ2h0XCJcbiAgICB9LCBhY3Rpb25Db250ZW50KTtcbiAgfVxuXG4gIHJldHVybiBlbmFibGVkICYmIGFjdGlvbi5kZXNjcmlwdGlvbiA/IF9fX0Vtb3Rpb25KU1goRXVpVG9vbFRpcCwge1xuICAgIGNvbnRlbnQ6IGFjdGlvbi5kZXNjcmlwdGlvbixcbiAgICBkZWxheTogXCJsb25nXCJcbiAgfSwgYnV0dG9uKSA6IGJ1dHRvbjtcbn07IiwgImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBjbG9uZUVsZW1lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBDdXN0b21JdGVtQWN0aW9uID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhDdXN0b21JdGVtQWN0aW9uLCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEN1c3RvbUl0ZW1BY3Rpb24pO1xuXG4gIGZ1bmN0aW9uIEN1c3RvbUl0ZW1BY3Rpb24ocHJvcHMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ3VzdG9tSXRlbUFjdGlvbik7XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHByb3BzKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJtb3VudGVkXCIsIHZvaWQgMCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25Gb2N1c1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoX3RoaXMubW91bnRlZCkge1xuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgaGFzRm9jdXM6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25CbHVyXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChfdGhpcy5tb3VudGVkKSB7XG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBoYXNGb2N1czogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFzRm9jdXNcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzLnN0YXRlLmhhc0ZvY3VzO1xuICAgIH0pO1xuXG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBoYXNGb2N1czogZmFsc2VcbiAgICB9OyAvLyB3aGlsZSBnZW5lcmFsbHkgY29uc2lkZXJlZCBhbiBhbnRpLXBhdHRlcm4sIGhlcmUgd2UgcmVxdWlyZVxuICAgIC8vIHRvIGRvIHRoYXQgYXMgdGhlIG9uRm9jdXMvb25CbHVyIGV2ZW50cyBvZiB0aGUgYWN0aW9uIGNvbnRyb2xzXG4gICAgLy8gbWF5IHRyaWdnZXIgd2hpbGUgdGhpcyBjb21wb25lbnQgaXMgdW5tb3VudGVkLiBBbiBhbHRlcm5hdGl2ZVxuICAgIC8vIChhdCBsZWFzdCB0aGUgd29ya2Fyb3VuZHMgc3VnZ2VzdGVkIGJ5IHJlYWN0IGlzIHRvIHVucmVnaXN0ZXJcbiAgICAvLyB0aGUgb25Gb2N1cy9vbkJsdXIgbGlzdGVuZXJzIGZyb20gdGhlIGFjdGlvbiBjb250cm9scy4uLiB0aGlzXG4gICAgLy8gdW5mb3J0dW5hdGVseSB3aWxsIGxlYWQgdG8gdW5uZWNlc3NhcmlseSBjb21wbGV4IGNvZGUuLi4gc28gd2UnbGxcbiAgICAvLyBzdGljayB0byB0aGlzIGFwcHJvYWNoIGZvciBub3cpXG5cbiAgICBfdGhpcy5tb3VudGVkID0gZmFsc2U7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEN1c3RvbUl0ZW1BY3Rpb24sIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdGhpcy5tb3VudGVkID0gdHJ1ZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50V2lsbFVubW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICB0aGlzLm1vdW50ZWQgPSBmYWxzZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgYWN0aW9uID0gX3RoaXMkcHJvcHMuYWN0aW9uLFxuICAgICAgICAgIGVuYWJsZWQgPSBfdGhpcyRwcm9wcy5lbmFibGVkLFxuICAgICAgICAgIGl0ZW0gPSBfdGhpcyRwcm9wcy5pdGVtLFxuICAgICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzLmNsYXNzTmFtZTtcbiAgICAgIHZhciB0b29sID0gYWN0aW9uLnJlbmRlcihpdGVtLCBlbmFibGVkKTtcbiAgICAgIHZhciBjbG9uZWRUb29sID0gLyojX19QVVJFX18qL2Nsb25lRWxlbWVudCh0b29sLCB7XG4gICAgICAgIG9uRm9jdXM6IHRoaXMub25Gb2N1cyxcbiAgICAgICAgb25CbHVyOiB0aGlzLm9uQmx1clxuICAgICAgfSk7XG4gICAgICB2YXIgc3R5bGUgPSB0aGlzLmhhc0ZvY3VzKCkgPyB7XG4gICAgICAgIG9wYWNpdHk6IDFcbiAgICAgIH0gOiB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICAgIHN0eWxlOiBzdHlsZSxcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWVcbiAgICAgIH0sIGNsb25lZFRvb2wpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBDdXN0b21JdGVtQWN0aW9uO1xufShDb21wb25lbnQpO1xuQ3VzdG9tSXRlbUFjdGlvbi5wcm9wVHlwZXMgPSB7XG4gIGFjdGlvbjogUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLFxuICBlbmFibGVkOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICBpdGVtOiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBpbmRleDogUHJvcFR5cGVzLm51bWJlclxufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmV4cG9ydCB2YXIgaXNDdXN0b21JdGVtQWN0aW9uID0gZnVuY3Rpb24gaXNDdXN0b21JdGVtQWN0aW9uKGFjdGlvbikge1xuICByZXR1cm4gYWN0aW9uLmhhc093blByb3BlcnR5KCdyZW5kZXInKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgRXVpU3BhY2VyIH0gZnJvbSAnLi4vc3BhY2VyJztcbmltcG9ydCB7IEV1aVRhYmxlUGFnaW5hdGlvbiB9IGZyb20gJy4uL3RhYmxlJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIGRlZmF1bHRzID0ge1xuICBwYWdlU2l6ZU9wdGlvbnM6IFsxMCwgMjUsIDUwXVxufTtcbmV4cG9ydCB2YXIgUGFnaW5hdGlvbkJhciA9IGZ1bmN0aW9uIFBhZ2luYXRpb25CYXIoX3JlZikge1xuICB2YXIgcGFnaW5hdGlvbiA9IF9yZWYucGFnaW5hdGlvbixcbiAgICAgIG9uUGFnZVNpemVDaGFuZ2UgPSBfcmVmLm9uUGFnZVNpemVDaGFuZ2UsXG4gICAgICBvblBhZ2VDaGFuZ2UgPSBfcmVmLm9uUGFnZUNoYW5nZSxcbiAgICAgIGFyaWFDb250cm9scyA9IF9yZWZbJ2FyaWEtY29udHJvbHMnXSxcbiAgICAgIGFyaWFMYWJlbCA9IF9yZWZbJ2FyaWEtbGFiZWwnXTtcbiAgdmFyIHBhZ2VTaXplT3B0aW9ucyA9IHBhZ2luYXRpb24ucGFnZVNpemVPcHRpb25zID8gcGFnaW5hdGlvbi5wYWdlU2l6ZU9wdGlvbnMgOiBkZWZhdWx0cy5wYWdlU2l6ZU9wdGlvbnM7XG4gIHZhciBwYWdlQ291bnQgPSBwYWdpbmF0aW9uLnBhZ2VTaXplID8gTWF0aC5jZWlsKHBhZ2luYXRpb24udG90YWxJdGVtQ291bnQgLyBwYWdpbmF0aW9uLnBhZ2VTaXplKSA6IDE7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHBhZ2VDb3VudCA8IHBhZ2luYXRpb24ucGFnZUluZGV4ICsgMSkge1xuICAgICAgb25QYWdlQ2hhbmdlID09PSBudWxsIHx8IG9uUGFnZUNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25QYWdlQ2hhbmdlKHBhZ2VDb3VudCAtIDEpO1xuICAgIH1cbiAgfSwgW3BhZ2VDb3VudCwgb25QYWdlQ2hhbmdlLCBwYWdpbmF0aW9uXSk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIG51bGwsIF9fX0Vtb3Rpb25KU1goRXVpU3BhY2VyLCB7XG4gICAgc2l6ZTogXCJtXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goRXVpVGFibGVQYWdpbmF0aW9uLCB7XG4gICAgYWN0aXZlUGFnZTogcGFnaW5hdGlvbi5wYWdlSW5kZXgsXG4gICAgc2hvd1BlclBhZ2VPcHRpb25zOiBwYWdpbmF0aW9uLnNob3dQZXJQYWdlT3B0aW9ucyxcbiAgICBpdGVtc1BlclBhZ2U6IHBhZ2luYXRpb24ucGFnZVNpemUsXG4gICAgaXRlbXNQZXJQYWdlT3B0aW9uczogcGFnZVNpemVPcHRpb25zLFxuICAgIHBhZ2VDb3VudDogcGFnZUNvdW50LFxuICAgIG9uQ2hhbmdlSXRlbXNQZXJQYWdlOiBvblBhZ2VTaXplQ2hhbmdlLFxuICAgIG9uQ2hhbmdlUGFnZTogb25QYWdlQ2hhbmdlLFxuICAgIFwiYXJpYS1jb250cm9sc1wiOiBhcmlhQ29udHJvbHMsXG4gICAgXCJhcmlhLWxhYmVsXCI6IGFyaWFMYWJlbFxuICB9KSk7XG59OyIsICJleHBvcnQgdmFyIFN1YnNjcmliYWJsZSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFN1YnNjcmliYWJsZSgpIHtcbiAgICB0aGlzLmxpc3RlbmVycyA9IFtdO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFN1YnNjcmliYWJsZS5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLnN1YnNjcmliZSA9IGZ1bmN0aW9uIHN1YnNjcmliZShsaXN0ZW5lcikge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB2YXIgY2FsbGJhY2sgPSBsaXN0ZW5lciB8fCBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH07XG5cbiAgICB0aGlzLmxpc3RlbmVycy5wdXNoKGNhbGxiYWNrKTtcbiAgICB0aGlzLm9uU3Vic2NyaWJlKCk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLmxpc3RlbmVycyA9IF90aGlzLmxpc3RlbmVycy5maWx0ZXIoZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgcmV0dXJuIHggIT09IGNhbGxiYWNrO1xuICAgICAgfSk7XG5cbiAgICAgIF90aGlzLm9uVW5zdWJzY3JpYmUoKTtcbiAgICB9O1xuICB9O1xuXG4gIF9wcm90by5oYXNMaXN0ZW5lcnMgPSBmdW5jdGlvbiBoYXNMaXN0ZW5lcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMubGlzdGVuZXJzLmxlbmd0aCA+IDA7XG4gIH07XG5cbiAgX3Byb3RvLm9uU3Vic2NyaWJlID0gZnVuY3Rpb24gb25TdWJzY3JpYmUoKSB7Ly8gRG8gbm90aGluZ1xuICB9O1xuXG4gIF9wcm90by5vblVuc3Vic2NyaWJlID0gZnVuY3Rpb24gb25VbnN1YnNjcmliZSgpIHsvLyBEbyBub3RoaW5nXG4gIH07XG5cbiAgcmV0dXJuIFN1YnNjcmliYWJsZTtcbn0oKTsiLCAiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG4vLyBUWVBFU1xuLy8gVVRJTFNcbmV4cG9ydCB2YXIgaXNTZXJ2ZXIgPSB0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJztcbmV4cG9ydCBmdW5jdGlvbiBub29wKCkge1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGZ1bmN0aW9uYWxVcGRhdGUodXBkYXRlciwgaW5wdXQpIHtcbiAgcmV0dXJuIHR5cGVvZiB1cGRhdGVyID09PSAnZnVuY3Rpb24nID8gdXBkYXRlcihpbnB1dCkgOiB1cGRhdGVyO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRUaW1lb3V0KHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIHZhbHVlID49IDAgJiYgdmFsdWUgIT09IEluZmluaXR5O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZVF1ZXJ5S2V5QXJyYXkodmFsdWUpIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGRpZmZlcmVuY2UoYXJyYXkxLCBhcnJheTIpIHtcbiAgcmV0dXJuIGFycmF5MS5maWx0ZXIoZnVuY3Rpb24gKHgpIHtcbiAgICByZXR1cm4gYXJyYXkyLmluZGV4T2YoeCkgPT09IC0xO1xuICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlQXQoYXJyYXksIGluZGV4LCB2YWx1ZSkge1xuICB2YXIgY29weSA9IGFycmF5LnNsaWNlKDApO1xuICBjb3B5W2luZGV4XSA9IHZhbHVlO1xuICByZXR1cm4gY29weTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0aW1lVW50aWxTdGFsZSh1cGRhdGVkQXQsIHN0YWxlVGltZSkge1xuICByZXR1cm4gTWF0aC5tYXgodXBkYXRlZEF0ICsgKHN0YWxlVGltZSB8fCAwKSAtIERhdGUubm93KCksIDApO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUXVlcnlBcmdzKGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgaWYgKCFpc1F1ZXJ5S2V5KGFyZzEpKSB7XG4gICAgcmV0dXJuIGFyZzE7XG4gIH1cblxuICBpZiAodHlwZW9mIGFyZzIgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gX2V4dGVuZHMoe30sIGFyZzMsIHtcbiAgICAgIHF1ZXJ5S2V5OiBhcmcxLFxuICAgICAgcXVlcnlGbjogYXJnMlxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBhcmcyLCB7XG4gICAgcXVlcnlLZXk6IGFyZzFcbiAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VNdXRhdGlvbkFyZ3MoYXJnMSwgYXJnMiwgYXJnMykge1xuICBpZiAoaXNRdWVyeUtleShhcmcxKSkge1xuICAgIGlmICh0eXBlb2YgYXJnMiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBhcmczLCB7XG4gICAgICAgIG11dGF0aW9uS2V5OiBhcmcxLFxuICAgICAgICBtdXRhdGlvbkZuOiBhcmcyXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gX2V4dGVuZHMoe30sIGFyZzIsIHtcbiAgICAgIG11dGF0aW9uS2V5OiBhcmcxXG4gICAgfSk7XG4gIH1cblxuICBpZiAodHlwZW9mIGFyZzEgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gX2V4dGVuZHMoe30sIGFyZzIsIHtcbiAgICAgIG11dGF0aW9uRm46IGFyZzFcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgYXJnMSk7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VGaWx0ZXJBcmdzKGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgcmV0dXJuIGlzUXVlcnlLZXkoYXJnMSkgPyBbX2V4dGVuZHMoe30sIGFyZzIsIHtcbiAgICBxdWVyeUtleTogYXJnMVxuICB9KSwgYXJnM10gOiBbYXJnMSB8fCB7fSwgYXJnMl07XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VNdXRhdGlvbkZpbHRlckFyZ3MoYXJnMSwgYXJnMikge1xuICByZXR1cm4gaXNRdWVyeUtleShhcmcxKSA/IF9leHRlbmRzKHt9LCBhcmcyLCB7XG4gICAgbXV0YXRpb25LZXk6IGFyZzFcbiAgfSkgOiBhcmcxO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG1hcFF1ZXJ5U3RhdHVzRmlsdGVyKGFjdGl2ZSwgaW5hY3RpdmUpIHtcbiAgaWYgKGFjdGl2ZSA9PT0gdHJ1ZSAmJiBpbmFjdGl2ZSA9PT0gdHJ1ZSB8fCBhY3RpdmUgPT0gbnVsbCAmJiBpbmFjdGl2ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuICdhbGwnO1xuICB9IGVsc2UgaWYgKGFjdGl2ZSA9PT0gZmFsc2UgJiYgaW5hY3RpdmUgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuICdub25lJztcbiAgfSBlbHNlIHtcbiAgICAvLyBBdCB0aGlzIHBvaW50LCBhY3RpdmV8aW5hY3RpdmUgY2FuIG9ubHkgYmUgdHJ1ZXxmYWxzZSBvciBmYWxzZXx0cnVlXG4gICAgLy8gc28sIHdoZW4gb25seSBvbmUgdmFsdWUgaXMgcHJvdmlkZWQsIHRoZSBtaXNzaW5nIG9uZSBoYXMgdG8gYmUgdGhlIG5lZ2F0ZWQgdmFsdWVcbiAgICB2YXIgaXNBY3RpdmUgPSBhY3RpdmUgIT0gbnVsbCA/IGFjdGl2ZSA6ICFpbmFjdGl2ZTtcbiAgICByZXR1cm4gaXNBY3RpdmUgPyAnYWN0aXZlJyA6ICdpbmFjdGl2ZSc7XG4gIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBtYXRjaFF1ZXJ5KGZpbHRlcnMsIHF1ZXJ5KSB7XG4gIHZhciBhY3RpdmUgPSBmaWx0ZXJzLmFjdGl2ZSxcbiAgICAgIGV4YWN0ID0gZmlsdGVycy5leGFjdCxcbiAgICAgIGZldGNoaW5nID0gZmlsdGVycy5mZXRjaGluZyxcbiAgICAgIGluYWN0aXZlID0gZmlsdGVycy5pbmFjdGl2ZSxcbiAgICAgIHByZWRpY2F0ZSA9IGZpbHRlcnMucHJlZGljYXRlLFxuICAgICAgcXVlcnlLZXkgPSBmaWx0ZXJzLnF1ZXJ5S2V5LFxuICAgICAgc3RhbGUgPSBmaWx0ZXJzLnN0YWxlO1xuXG4gIGlmIChpc1F1ZXJ5S2V5KHF1ZXJ5S2V5KSkge1xuICAgIGlmIChleGFjdCkge1xuICAgICAgaWYgKHF1ZXJ5LnF1ZXJ5SGFzaCAhPT0gaGFzaFF1ZXJ5S2V5QnlPcHRpb25zKHF1ZXJ5S2V5LCBxdWVyeS5vcHRpb25zKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghcGFydGlhbE1hdGNoS2V5KHF1ZXJ5LnF1ZXJ5S2V5LCBxdWVyeUtleSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICB2YXIgcXVlcnlTdGF0dXNGaWx0ZXIgPSBtYXBRdWVyeVN0YXR1c0ZpbHRlcihhY3RpdmUsIGluYWN0aXZlKTtcblxuICBpZiAocXVlcnlTdGF0dXNGaWx0ZXIgPT09ICdub25lJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSBlbHNlIGlmIChxdWVyeVN0YXR1c0ZpbHRlciAhPT0gJ2FsbCcpIHtcbiAgICB2YXIgaXNBY3RpdmUgPSBxdWVyeS5pc0FjdGl2ZSgpO1xuXG4gICAgaWYgKHF1ZXJ5U3RhdHVzRmlsdGVyID09PSAnYWN0aXZlJyAmJiAhaXNBY3RpdmUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAocXVlcnlTdGF0dXNGaWx0ZXIgPT09ICdpbmFjdGl2ZScgJiYgaXNBY3RpdmUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIHN0YWxlID09PSAnYm9vbGVhbicgJiYgcXVlcnkuaXNTdGFsZSgpICE9PSBzdGFsZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgZmV0Y2hpbmcgPT09ICdib29sZWFuJyAmJiBxdWVyeS5pc0ZldGNoaW5nKCkgIT09IGZldGNoaW5nKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHByZWRpY2F0ZSAmJiAhcHJlZGljYXRlKHF1ZXJ5KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoTXV0YXRpb24oZmlsdGVycywgbXV0YXRpb24pIHtcbiAgdmFyIGV4YWN0ID0gZmlsdGVycy5leGFjdCxcbiAgICAgIGZldGNoaW5nID0gZmlsdGVycy5mZXRjaGluZyxcbiAgICAgIHByZWRpY2F0ZSA9IGZpbHRlcnMucHJlZGljYXRlLFxuICAgICAgbXV0YXRpb25LZXkgPSBmaWx0ZXJzLm11dGF0aW9uS2V5O1xuXG4gIGlmIChpc1F1ZXJ5S2V5KG11dGF0aW9uS2V5KSkge1xuICAgIGlmICghbXV0YXRpb24ub3B0aW9ucy5tdXRhdGlvbktleSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChleGFjdCkge1xuICAgICAgaWYgKGhhc2hRdWVyeUtleShtdXRhdGlvbi5vcHRpb25zLm11dGF0aW9uS2V5KSAhPT0gaGFzaFF1ZXJ5S2V5KG11dGF0aW9uS2V5KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghcGFydGlhbE1hdGNoS2V5KG11dGF0aW9uLm9wdGlvbnMubXV0YXRpb25LZXksIG11dGF0aW9uS2V5KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2YgZmV0Y2hpbmcgPT09ICdib29sZWFuJyAmJiBtdXRhdGlvbi5zdGF0ZS5zdGF0dXMgPT09ICdsb2FkaW5nJyAhPT0gZmV0Y2hpbmcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAocHJlZGljYXRlICYmICFwcmVkaWNhdGUobXV0YXRpb24pKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5leHBvcnQgZnVuY3Rpb24gaGFzaFF1ZXJ5S2V5QnlPcHRpb25zKHF1ZXJ5S2V5LCBvcHRpb25zKSB7XG4gIHZhciBoYXNoRm4gPSAob3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5xdWVyeUtleUhhc2hGbikgfHwgaGFzaFF1ZXJ5S2V5O1xuICByZXR1cm4gaGFzaEZuKHF1ZXJ5S2V5KTtcbn1cbi8qKlxuICogRGVmYXVsdCBxdWVyeSBrZXlzIGhhc2ggZnVuY3Rpb24uXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc2hRdWVyeUtleShxdWVyeUtleSkge1xuICB2YXIgYXNBcnJheSA9IGVuc3VyZVF1ZXJ5S2V5QXJyYXkocXVlcnlLZXkpO1xuICByZXR1cm4gc3RhYmxlVmFsdWVIYXNoKGFzQXJyYXkpO1xufVxuLyoqXG4gKiBIYXNoZXMgdGhlIHZhbHVlIGludG8gYSBzdGFibGUgaGFzaC5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc3RhYmxlVmFsdWVIYXNoKHZhbHVlKSB7XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSwgZnVuY3Rpb24gKF8sIHZhbCkge1xuICAgIHJldHVybiBpc1BsYWluT2JqZWN0KHZhbCkgPyBPYmplY3Qua2V5cyh2YWwpLnNvcnQoKS5yZWR1Y2UoZnVuY3Rpb24gKHJlc3VsdCwga2V5KSB7XG4gICAgICByZXN1bHRba2V5XSA9IHZhbFtrZXldO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LCB7fSkgOiB2YWw7XG4gIH0pO1xufVxuLyoqXG4gKiBDaGVja3MgaWYga2V5IGBiYCBwYXJ0aWFsbHkgbWF0Y2hlcyB3aXRoIGtleSBgYWAuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnRpYWxNYXRjaEtleShhLCBiKSB7XG4gIHJldHVybiBwYXJ0aWFsRGVlcEVxdWFsKGVuc3VyZVF1ZXJ5S2V5QXJyYXkoYSksIGVuc3VyZVF1ZXJ5S2V5QXJyYXkoYikpO1xufVxuLyoqXG4gKiBDaGVja3MgaWYgYGJgIHBhcnRpYWxseSBtYXRjaGVzIHdpdGggYGFgLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJ0aWFsRGVlcEVxdWFsKGEsIGIpIHtcbiAgaWYgKGEgPT09IGIpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgYSAhPT0gdHlwZW9mIGIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoYSAmJiBiICYmIHR5cGVvZiBhID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgYiA9PT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gIU9iamVjdC5rZXlzKGIpLnNvbWUoZnVuY3Rpb24gKGtleSkge1xuICAgICAgcmV0dXJuICFwYXJ0aWFsRGVlcEVxdWFsKGFba2V5XSwgYltrZXldKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbi8qKlxuICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGBhYCBpZiBgYmAgaXMgZGVlcGx5IGVxdWFsLlxuICogSWYgbm90LCBpdCB3aWxsIHJlcGxhY2UgYW55IGRlZXBseSBlcXVhbCBjaGlsZHJlbiBvZiBgYmAgd2l0aCB0aG9zZSBvZiBgYWAuXG4gKiBUaGlzIGNhbiBiZSB1c2VkIGZvciBzdHJ1Y3R1cmFsIHNoYXJpbmcgYmV0d2VlbiBKU09OIHZhbHVlcyBmb3IgZXhhbXBsZS5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZUVxdWFsRGVlcChhLCBiKSB7XG4gIGlmIChhID09PSBiKSB7XG4gICAgcmV0dXJuIGE7XG4gIH1cblxuICB2YXIgYXJyYXkgPSBBcnJheS5pc0FycmF5KGEpICYmIEFycmF5LmlzQXJyYXkoYik7XG5cbiAgaWYgKGFycmF5IHx8IGlzUGxhaW5PYmplY3QoYSkgJiYgaXNQbGFpbk9iamVjdChiKSkge1xuICAgIHZhciBhU2l6ZSA9IGFycmF5ID8gYS5sZW5ndGggOiBPYmplY3Qua2V5cyhhKS5sZW5ndGg7XG4gICAgdmFyIGJJdGVtcyA9IGFycmF5ID8gYiA6IE9iamVjdC5rZXlzKGIpO1xuICAgIHZhciBiU2l6ZSA9IGJJdGVtcy5sZW5ndGg7XG4gICAgdmFyIGNvcHkgPSBhcnJheSA/IFtdIDoge307XG4gICAgdmFyIGVxdWFsSXRlbXMgPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiU2l6ZTsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0gYXJyYXkgPyBpIDogYkl0ZW1zW2ldO1xuICAgICAgY29weVtrZXldID0gcmVwbGFjZUVxdWFsRGVlcChhW2tleV0sIGJba2V5XSk7XG5cbiAgICAgIGlmIChjb3B5W2tleV0gPT09IGFba2V5XSkge1xuICAgICAgICBlcXVhbEl0ZW1zKys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFTaXplID09PSBiU2l6ZSAmJiBlcXVhbEl0ZW1zID09PSBhU2l6ZSA/IGEgOiBjb3B5O1xuICB9XG5cbiAgcmV0dXJuIGI7XG59XG4vKipcbiAqIFNoYWxsb3cgY29tcGFyZSBvYmplY3RzLiBPbmx5IHdvcmtzIHdpdGggb2JqZWN0cyB0aGF0IGFsd2F5cyBoYXZlIHRoZSBzYW1lIHByb3BlcnRpZXMuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNoYWxsb3dFcXVhbE9iamVjdHMoYSwgYikge1xuICBpZiAoYSAmJiAhYiB8fCBiICYmICFhKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZm9yICh2YXIga2V5IGluIGEpIHtcbiAgICBpZiAoYVtrZXldICE9PSBiW2tleV0pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn0gLy8gQ29waWVkIGZyb206IGh0dHBzOi8vZ2l0aHViLmNvbS9qb25zY2hsaW5rZXJ0L2lzLXBsYWluLW9iamVjdFxuXG5leHBvcnQgZnVuY3Rpb24gaXNQbGFpbk9iamVjdChvKSB7XG4gIGlmICghaGFzT2JqZWN0UHJvdG90eXBlKG8pKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IC8vIElmIGhhcyBtb2RpZmllZCBjb25zdHJ1Y3RvclxuXG5cbiAgdmFyIGN0b3IgPSBvLmNvbnN0cnVjdG9yO1xuXG4gIGlmICh0eXBlb2YgY3RvciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSAvLyBJZiBoYXMgbW9kaWZpZWQgcHJvdG90eXBlXG5cblxuICB2YXIgcHJvdCA9IGN0b3IucHJvdG90eXBlO1xuXG4gIGlmICghaGFzT2JqZWN0UHJvdG90eXBlKHByb3QpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IC8vIElmIGNvbnN0cnVjdG9yIGRvZXMgbm90IGhhdmUgYW4gT2JqZWN0LXNwZWNpZmljIG1ldGhvZFxuXG5cbiAgaWYgKCFwcm90Lmhhc093blByb3BlcnR5KCdpc1Byb3RvdHlwZU9mJykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gLy8gTW9zdCBsaWtlbHkgYSBwbGFpbiBPYmplY3RcblxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBoYXNPYmplY3RQcm90b3R5cGUobykge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pID09PSAnW29iamVjdCBPYmplY3RdJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUXVlcnlLZXkodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNFcnJvcih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBFcnJvcjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBzbGVlcCh0aW1lb3V0KSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgIHNldFRpbWVvdXQocmVzb2x2ZSwgdGltZW91dCk7XG4gIH0pO1xufVxuLyoqXG4gKiBTY2hlZHVsZXMgYSBtaWNyb3Rhc2suXG4gKiBUaGlzIGNhbiBiZSB1c2VmdWwgdG8gc2NoZWR1bGUgc3RhdGUgdXBkYXRlcyBhZnRlciByZW5kZXJpbmcuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNjaGVkdWxlTWljcm90YXNrKGNhbGxiYWNrKSB7XG4gIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oY2FsbGJhY2spLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0pO1xuICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRBYm9ydENvbnRyb2xsZXIoKSB7XG4gIGlmICh0eXBlb2YgQWJvcnRDb250cm9sbGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgfVxufSIsICJpbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2VcIjtcbmltcG9ydCB7IFN1YnNjcmliYWJsZSB9IGZyb20gJy4vc3Vic2NyaWJhYmxlJztcbmltcG9ydCB7IGlzU2VydmVyIH0gZnJvbSAnLi91dGlscyc7XG5leHBvcnQgdmFyIEZvY3VzTWFuYWdlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1N1YnNjcmliYWJsZSkge1xuICBfaW5oZXJpdHNMb29zZShGb2N1c01hbmFnZXIsIF9TdWJzY3JpYmFibGUpO1xuXG4gIGZ1bmN0aW9uIEZvY3VzTWFuYWdlcigpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfdGhpcyA9IF9TdWJzY3JpYmFibGUuY2FsbCh0aGlzKSB8fCB0aGlzO1xuXG4gICAgX3RoaXMuc2V0dXAgPSBmdW5jdGlvbiAob25Gb2N1cykge1xuICAgICAgdmFyIF93aW5kb3c7XG5cbiAgICAgIGlmICghaXNTZXJ2ZXIgJiYgKChfd2luZG93ID0gd2luZG93KSA9PSBudWxsID8gdm9pZCAwIDogX3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKSkge1xuICAgICAgICB2YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiBsaXN0ZW5lcigpIHtcbiAgICAgICAgICByZXR1cm4gb25Gb2N1cygpO1xuICAgICAgICB9OyAvLyBMaXN0ZW4gdG8gdmlzaWJpbGxpdHljaGFuZ2UgYW5kIGZvY3VzXG5cblxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIGxpc3RlbmVyLCBmYWxzZSk7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIGxpc3RlbmVyLCBmYWxzZSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLy8gQmUgc3VyZSB0byB1bnN1YnNjcmliZSBpZiBhIG5ldyBoYW5kbGVyIGlzIHNldFxuICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgbGlzdGVuZXIpO1xuICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdmb2N1cycsIGxpc3RlbmVyKTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IEZvY3VzTWFuYWdlci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLm9uU3Vic2NyaWJlID0gZnVuY3Rpb24gb25TdWJzY3JpYmUoKSB7XG4gICAgaWYgKCF0aGlzLmNsZWFudXApIHtcbiAgICAgIHRoaXMuc2V0RXZlbnRMaXN0ZW5lcih0aGlzLnNldHVwKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLm9uVW5zdWJzY3JpYmUgPSBmdW5jdGlvbiBvblVuc3Vic2NyaWJlKCkge1xuICAgIGlmICghdGhpcy5oYXNMaXN0ZW5lcnMoKSkge1xuICAgICAgdmFyIF90aGlzJGNsZWFudXA7XG5cbiAgICAgIChfdGhpcyRjbGVhbnVwID0gdGhpcy5jbGVhbnVwKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkY2xlYW51cC5jYWxsKHRoaXMpO1xuICAgICAgdGhpcy5jbGVhbnVwID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uc2V0RXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uIHNldEV2ZW50TGlzdGVuZXIoc2V0dXApIHtcbiAgICB2YXIgX3RoaXMkY2xlYW51cDIsXG4gICAgICAgIF90aGlzMiA9IHRoaXM7XG5cbiAgICB0aGlzLnNldHVwID0gc2V0dXA7XG4gICAgKF90aGlzJGNsZWFudXAyID0gdGhpcy5jbGVhbnVwKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkY2xlYW51cDIuY2FsbCh0aGlzKTtcbiAgICB0aGlzLmNsZWFudXAgPSBzZXR1cChmdW5jdGlvbiAoZm9jdXNlZCkge1xuICAgICAgaWYgKHR5cGVvZiBmb2N1c2VkID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgX3RoaXMyLnNldEZvY3VzZWQoZm9jdXNlZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfdGhpczIub25Gb2N1cygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5zZXRGb2N1c2VkID0gZnVuY3Rpb24gc2V0Rm9jdXNlZChmb2N1c2VkKSB7XG4gICAgdGhpcy5mb2N1c2VkID0gZm9jdXNlZDtcblxuICAgIGlmIChmb2N1c2VkKSB7XG4gICAgICB0aGlzLm9uRm9jdXMoKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLm9uRm9jdXMgPSBmdW5jdGlvbiBvbkZvY3VzKCkge1xuICAgIHRoaXMubGlzdGVuZXJzLmZvckVhY2goZnVuY3Rpb24gKGxpc3RlbmVyKSB7XG4gICAgICBsaXN0ZW5lcigpO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5pc0ZvY3VzZWQgPSBmdW5jdGlvbiBpc0ZvY3VzZWQoKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLmZvY3VzZWQgPT09ICdib29sZWFuJykge1xuICAgICAgcmV0dXJuIHRoaXMuZm9jdXNlZDtcbiAgICB9IC8vIGRvY3VtZW50IGdsb2JhbCBjYW4gYmUgdW5hdmFpbGFibGUgaW4gcmVhY3QgbmF0aXZlXG5cblxuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gW3VuZGVmaW5lZCwgJ3Zpc2libGUnLCAncHJlcmVuZGVyJ10uaW5jbHVkZXMoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlKTtcbiAgfTtcblxuICByZXR1cm4gRm9jdXNNYW5hZ2VyO1xufShTdWJzY3JpYmFibGUpO1xuZXhwb3J0IHZhciBmb2N1c01hbmFnZXIgPSBuZXcgRm9jdXNNYW5hZ2VyKCk7IiwgImltcG9ydCBfaW5oZXJpdHNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZVwiO1xuaW1wb3J0IHsgU3Vic2NyaWJhYmxlIH0gZnJvbSAnLi9zdWJzY3JpYmFibGUnO1xuaW1wb3J0IHsgaXNTZXJ2ZXIgfSBmcm9tICcuL3V0aWxzJztcbmV4cG9ydCB2YXIgT25saW5lTWFuYWdlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1N1YnNjcmliYWJsZSkge1xuICBfaW5oZXJpdHNMb29zZShPbmxpbmVNYW5hZ2VyLCBfU3Vic2NyaWJhYmxlKTtcblxuICBmdW5jdGlvbiBPbmxpbmVNYW5hZ2VyKCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF90aGlzID0gX1N1YnNjcmliYWJsZS5jYWxsKHRoaXMpIHx8IHRoaXM7XG5cbiAgICBfdGhpcy5zZXR1cCA9IGZ1bmN0aW9uIChvbk9ubGluZSkge1xuICAgICAgdmFyIF93aW5kb3c7XG5cbiAgICAgIGlmICghaXNTZXJ2ZXIgJiYgKChfd2luZG93ID0gd2luZG93KSA9PSBudWxsID8gdm9pZCAwIDogX3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKSkge1xuICAgICAgICB2YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiBsaXN0ZW5lcigpIHtcbiAgICAgICAgICByZXR1cm4gb25PbmxpbmUoKTtcbiAgICAgICAgfTsgLy8gTGlzdGVuIHRvIG9ubGluZVxuXG5cbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ29ubGluZScsIGxpc3RlbmVyLCBmYWxzZSk7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdvZmZsaW5lJywgbGlzdGVuZXIsIGZhbHNlKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAvLyBCZSBzdXJlIHRvIHVuc3Vic2NyaWJlIGlmIGEgbmV3IGhhbmRsZXIgaXMgc2V0XG4gICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ29ubGluZScsIGxpc3RlbmVyKTtcbiAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignb2ZmbGluZScsIGxpc3RlbmVyKTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IE9ubGluZU1hbmFnZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5vblN1YnNjcmliZSA9IGZ1bmN0aW9uIG9uU3Vic2NyaWJlKCkge1xuICAgIGlmICghdGhpcy5jbGVhbnVwKSB7XG4gICAgICB0aGlzLnNldEV2ZW50TGlzdGVuZXIodGhpcy5zZXR1cCk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5vblVuc3Vic2NyaWJlID0gZnVuY3Rpb24gb25VbnN1YnNjcmliZSgpIHtcbiAgICBpZiAoIXRoaXMuaGFzTGlzdGVuZXJzKCkpIHtcbiAgICAgIHZhciBfdGhpcyRjbGVhbnVwO1xuXG4gICAgICAoX3RoaXMkY2xlYW51cCA9IHRoaXMuY2xlYW51cCkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJGNsZWFudXAuY2FsbCh0aGlzKTtcbiAgICAgIHRoaXMuY2xlYW51cCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnNldEV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbiBzZXRFdmVudExpc3RlbmVyKHNldHVwKSB7XG4gICAgdmFyIF90aGlzJGNsZWFudXAyLFxuICAgICAgICBfdGhpczIgPSB0aGlzO1xuXG4gICAgdGhpcy5zZXR1cCA9IHNldHVwO1xuICAgIChfdGhpcyRjbGVhbnVwMiA9IHRoaXMuY2xlYW51cCkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJGNsZWFudXAyLmNhbGwodGhpcyk7XG4gICAgdGhpcy5jbGVhbnVwID0gc2V0dXAoZnVuY3Rpb24gKG9ubGluZSkge1xuICAgICAgaWYgKHR5cGVvZiBvbmxpbmUgPT09ICdib29sZWFuJykge1xuICAgICAgICBfdGhpczIuc2V0T25saW5lKG9ubGluZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfdGhpczIub25PbmxpbmUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uc2V0T25saW5lID0gZnVuY3Rpb24gc2V0T25saW5lKG9ubGluZSkge1xuICAgIHRoaXMub25saW5lID0gb25saW5lO1xuXG4gICAgaWYgKG9ubGluZSkge1xuICAgICAgdGhpcy5vbk9ubGluZSgpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ub25PbmxpbmUgPSBmdW5jdGlvbiBvbk9ubGluZSgpIHtcbiAgICB0aGlzLmxpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uIChsaXN0ZW5lcikge1xuICAgICAgbGlzdGVuZXIoKTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uaXNPbmxpbmUgPSBmdW5jdGlvbiBpc09ubGluZSgpIHtcbiAgICBpZiAodHlwZW9mIHRoaXMub25saW5lID09PSAnYm9vbGVhbicpIHtcbiAgICAgIHJldHVybiB0aGlzLm9ubGluZTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG5hdmlnYXRvciA9PT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mIG5hdmlnYXRvci5vbkxpbmUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmF2aWdhdG9yLm9uTGluZTtcbiAgfTtcblxuICByZXR1cm4gT25saW5lTWFuYWdlcjtcbn0oU3Vic2NyaWJhYmxlKTtcbmV4cG9ydCB2YXIgb25saW5lTWFuYWdlciA9IG5ldyBPbmxpbmVNYW5hZ2VyKCk7IiwgImltcG9ydCB7IGZvY3VzTWFuYWdlciB9IGZyb20gJy4vZm9jdXNNYW5hZ2VyJztcbmltcG9ydCB7IG9ubGluZU1hbmFnZXIgfSBmcm9tICcuL29ubGluZU1hbmFnZXInO1xuaW1wb3J0IHsgc2xlZXAgfSBmcm9tICcuL3V0aWxzJztcblxuZnVuY3Rpb24gZGVmYXVsdFJldHJ5RGVsYXkoZmFpbHVyZUNvdW50KSB7XG4gIHJldHVybiBNYXRoLm1pbigxMDAwICogTWF0aC5wb3coMiwgZmFpbHVyZUNvdW50KSwgMzAwMDApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDYW5jZWxhYmxlKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgKHZhbHVlID09IG51bGwgPyB2b2lkIDAgOiB2YWx1ZS5jYW5jZWwpID09PSAnZnVuY3Rpb24nO1xufVxuZXhwb3J0IHZhciBDYW5jZWxsZWRFcnJvciA9IGZ1bmN0aW9uIENhbmNlbGxlZEVycm9yKG9wdGlvbnMpIHtcbiAgdGhpcy5yZXZlcnQgPSBvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLnJldmVydDtcbiAgdGhpcy5zaWxlbnQgPSBvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLnNpbGVudDtcbn07XG5leHBvcnQgZnVuY3Rpb24gaXNDYW5jZWxsZWRFcnJvcih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBDYW5jZWxsZWRFcnJvcjtcbn0gLy8gQ0xBU1NcblxuZXhwb3J0IHZhciBSZXRyeWVyID0gZnVuY3Rpb24gUmV0cnllcihjb25maWcpIHtcbiAgdmFyIF90aGlzID0gdGhpcztcblxuICB2YXIgY2FuY2VsUmV0cnkgPSBmYWxzZTtcbiAgdmFyIGNhbmNlbEZuO1xuICB2YXIgY29udGludWVGbjtcbiAgdmFyIHByb21pc2VSZXNvbHZlO1xuICB2YXIgcHJvbWlzZVJlamVjdDtcbiAgdGhpcy5hYm9ydCA9IGNvbmZpZy5hYm9ydDtcblxuICB0aGlzLmNhbmNlbCA9IGZ1bmN0aW9uIChjYW5jZWxPcHRpb25zKSB7XG4gICAgcmV0dXJuIGNhbmNlbEZuID09IG51bGwgPyB2b2lkIDAgOiBjYW5jZWxGbihjYW5jZWxPcHRpb25zKTtcbiAgfTtcblxuICB0aGlzLmNhbmNlbFJldHJ5ID0gZnVuY3Rpb24gKCkge1xuICAgIGNhbmNlbFJldHJ5ID0gdHJ1ZTtcbiAgfTtcblxuICB0aGlzLmNvbnRpbnVlUmV0cnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgY2FuY2VsUmV0cnkgPSBmYWxzZTtcbiAgfTtcblxuICB0aGlzLmNvbnRpbnVlID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBjb250aW51ZUZuID09IG51bGwgPyB2b2lkIDAgOiBjb250aW51ZUZuKCk7XG4gIH07XG5cbiAgdGhpcy5mYWlsdXJlQ291bnQgPSAwO1xuICB0aGlzLmlzUGF1c2VkID0gZmFsc2U7XG4gIHRoaXMuaXNSZXNvbHZlZCA9IGZhbHNlO1xuICB0aGlzLmlzVHJhbnNwb3J0Q2FuY2VsYWJsZSA9IGZhbHNlO1xuICB0aGlzLnByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAob3V0ZXJSZXNvbHZlLCBvdXRlclJlamVjdCkge1xuICAgIHByb21pc2VSZXNvbHZlID0gb3V0ZXJSZXNvbHZlO1xuICAgIHByb21pc2VSZWplY3QgPSBvdXRlclJlamVjdDtcbiAgfSk7XG5cbiAgdmFyIHJlc29sdmUgPSBmdW5jdGlvbiByZXNvbHZlKHZhbHVlKSB7XG4gICAgaWYgKCFfdGhpcy5pc1Jlc29sdmVkKSB7XG4gICAgICBfdGhpcy5pc1Jlc29sdmVkID0gdHJ1ZTtcbiAgICAgIGNvbmZpZy5vblN1Y2Nlc3MgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbmZpZy5vblN1Y2Nlc3ModmFsdWUpO1xuICAgICAgY29udGludWVGbiA9PSBudWxsID8gdm9pZCAwIDogY29udGludWVGbigpO1xuICAgICAgcHJvbWlzZVJlc29sdmUodmFsdWUpO1xuICAgIH1cbiAgfTtcblxuICB2YXIgcmVqZWN0ID0gZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7XG4gICAgaWYgKCFfdGhpcy5pc1Jlc29sdmVkKSB7XG4gICAgICBfdGhpcy5pc1Jlc29sdmVkID0gdHJ1ZTtcbiAgICAgIGNvbmZpZy5vbkVycm9yID09IG51bGwgPyB2b2lkIDAgOiBjb25maWcub25FcnJvcih2YWx1ZSk7XG4gICAgICBjb250aW51ZUZuID09IG51bGwgPyB2b2lkIDAgOiBjb250aW51ZUZuKCk7XG4gICAgICBwcm9taXNlUmVqZWN0KHZhbHVlKTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIHBhdXNlID0gZnVuY3Rpb24gcGF1c2UoKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChjb250aW51ZVJlc29sdmUpIHtcbiAgICAgIGNvbnRpbnVlRm4gPSBjb250aW51ZVJlc29sdmU7XG4gICAgICBfdGhpcy5pc1BhdXNlZCA9IHRydWU7XG4gICAgICBjb25maWcub25QYXVzZSA9PSBudWxsID8gdm9pZCAwIDogY29uZmlnLm9uUGF1c2UoKTtcbiAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnRpbnVlRm4gPSB1bmRlZmluZWQ7XG4gICAgICBfdGhpcy5pc1BhdXNlZCA9IGZhbHNlO1xuICAgICAgY29uZmlnLm9uQ29udGludWUgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbmZpZy5vbkNvbnRpbnVlKCk7XG4gICAgfSk7XG4gIH07IC8vIENyZWF0ZSBsb29wIGZ1bmN0aW9uXG5cblxuICB2YXIgcnVuID0gZnVuY3Rpb24gcnVuKCkge1xuICAgIC8vIERvIG5vdGhpbmcgaWYgYWxyZWFkeSByZXNvbHZlZFxuICAgIGlmIChfdGhpcy5pc1Jlc29sdmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHByb21pc2VPclZhbHVlOyAvLyBFeGVjdXRlIHF1ZXJ5XG5cbiAgICB0cnkge1xuICAgICAgcHJvbWlzZU9yVmFsdWUgPSBjb25maWcuZm4oKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcHJvbWlzZU9yVmFsdWUgPSBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgfSAvLyBDcmVhdGUgY2FsbGJhY2sgdG8gY2FuY2VsIHRoaXMgZmV0Y2hcblxuXG4gICAgY2FuY2VsRm4gPSBmdW5jdGlvbiBjYW5jZWxGbihjYW5jZWxPcHRpb25zKSB7XG4gICAgICBpZiAoIV90aGlzLmlzUmVzb2x2ZWQpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBDYW5jZWxsZWRFcnJvcihjYW5jZWxPcHRpb25zKSk7XG4gICAgICAgIF90aGlzLmFib3J0ID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcy5hYm9ydCgpOyAvLyBDYW5jZWwgdHJhbnNwb3J0IGlmIHN1cHBvcnRlZFxuXG4gICAgICAgIGlmIChpc0NhbmNlbGFibGUocHJvbWlzZU9yVmFsdWUpKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHByb21pc2VPclZhbHVlLmNhbmNlbCgpO1xuICAgICAgICAgIH0gY2F0Y2ggKF91bnVzZWQpIHt9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9OyAvLyBDaGVjayBpZiB0aGUgdHJhbnNwb3J0IGxheWVyIHN1cHBvcnQgY2FuY2VsbGF0aW9uXG5cblxuICAgIF90aGlzLmlzVHJhbnNwb3J0Q2FuY2VsYWJsZSA9IGlzQ2FuY2VsYWJsZShwcm9taXNlT3JWYWx1ZSk7XG4gICAgUHJvbWlzZS5yZXNvbHZlKHByb21pc2VPclZhbHVlKS50aGVuKHJlc29sdmUpLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgdmFyIF9jb25maWckcmV0cnksIF9jb25maWckcmV0cnlEZWxheTtcblxuICAgICAgLy8gU3RvcCBpZiB0aGUgZmV0Y2ggaXMgYWxyZWFkeSByZXNvbHZlZFxuICAgICAgaWYgKF90aGlzLmlzUmVzb2x2ZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSAvLyBEbyB3ZSBuZWVkIHRvIHJldHJ5IHRoZSByZXF1ZXN0P1xuXG5cbiAgICAgIHZhciByZXRyeSA9IChfY29uZmlnJHJldHJ5ID0gY29uZmlnLnJldHJ5KSAhPSBudWxsID8gX2NvbmZpZyRyZXRyeSA6IDM7XG4gICAgICB2YXIgcmV0cnlEZWxheSA9IChfY29uZmlnJHJldHJ5RGVsYXkgPSBjb25maWcucmV0cnlEZWxheSkgIT0gbnVsbCA/IF9jb25maWckcmV0cnlEZWxheSA6IGRlZmF1bHRSZXRyeURlbGF5O1xuICAgICAgdmFyIGRlbGF5ID0gdHlwZW9mIHJldHJ5RGVsYXkgPT09ICdmdW5jdGlvbicgPyByZXRyeURlbGF5KF90aGlzLmZhaWx1cmVDb3VudCwgZXJyb3IpIDogcmV0cnlEZWxheTtcbiAgICAgIHZhciBzaG91bGRSZXRyeSA9IHJldHJ5ID09PSB0cnVlIHx8IHR5cGVvZiByZXRyeSA9PT0gJ251bWJlcicgJiYgX3RoaXMuZmFpbHVyZUNvdW50IDwgcmV0cnkgfHwgdHlwZW9mIHJldHJ5ID09PSAnZnVuY3Rpb24nICYmIHJldHJ5KF90aGlzLmZhaWx1cmVDb3VudCwgZXJyb3IpO1xuXG4gICAgICBpZiAoY2FuY2VsUmV0cnkgfHwgIXNob3VsZFJldHJ5KSB7XG4gICAgICAgIC8vIFdlIGFyZSBkb25lIGlmIHRoZSBxdWVyeSBkb2VzIG5vdCBuZWVkIHRvIGJlIHJldHJpZWRcbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5mYWlsdXJlQ291bnQrKzsgLy8gTm90aWZ5IG9uIGZhaWxcblxuICAgICAgY29uZmlnLm9uRmFpbCA9PSBudWxsID8gdm9pZCAwIDogY29uZmlnLm9uRmFpbChfdGhpcy5mYWlsdXJlQ291bnQsIGVycm9yKTsgLy8gRGVsYXlcblxuICAgICAgc2xlZXAoZGVsYXkpIC8vIFBhdXNlIGlmIHRoZSBkb2N1bWVudCBpcyBub3QgdmlzaWJsZSBvciB3aGVuIHRoZSBkZXZpY2UgaXMgb2ZmbGluZVxuICAgICAgLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIWZvY3VzTWFuYWdlci5pc0ZvY3VzZWQoKSB8fCAhb25saW5lTWFuYWdlci5pc09ubGluZSgpKSB7XG4gICAgICAgICAgcmV0dXJuIHBhdXNlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoY2FuY2VsUmV0cnkpIHtcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJ1bigpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTsgLy8gU3RhcnQgbG9vcFxuXG5cbiAgcnVuKCk7XG59OyIsICJpbXBvcnQgeyBzY2hlZHVsZU1pY3JvdGFzayB9IGZyb20gJy4vdXRpbHMnOyAvLyBUWVBFU1xuXG4vLyBDTEFTU1xuZXhwb3J0IHZhciBOb3RpZnlNYW5hZ2VyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gTm90aWZ5TWFuYWdlcigpIHtcbiAgICB0aGlzLnF1ZXVlID0gW107XG4gICAgdGhpcy50cmFuc2FjdGlvbnMgPSAwO1xuXG4gICAgdGhpcy5ub3RpZnlGbiA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgY2FsbGJhY2soKTtcbiAgICB9O1xuXG4gICAgdGhpcy5iYXRjaE5vdGlmeUZuID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICBjYWxsYmFjaygpO1xuICAgIH07XG4gIH1cblxuICB2YXIgX3Byb3RvID0gTm90aWZ5TWFuYWdlci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmJhdGNoID0gZnVuY3Rpb24gYmF0Y2goY2FsbGJhY2spIHtcbiAgICB2YXIgcmVzdWx0O1xuICAgIHRoaXMudHJhbnNhY3Rpb25zKys7XG5cbiAgICB0cnkge1xuICAgICAgcmVzdWx0ID0gY2FsbGJhY2soKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy50cmFuc2FjdGlvbnMtLTtcblxuICAgICAgaWYgKCF0aGlzLnRyYW5zYWN0aW9ucykge1xuICAgICAgICB0aGlzLmZsdXNoKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICBfcHJvdG8uc2NoZWR1bGUgPSBmdW5jdGlvbiBzY2hlZHVsZShjYWxsYmFjaykge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICBpZiAodGhpcy50cmFuc2FjdGlvbnMpIHtcbiAgICAgIHRoaXMucXVldWUucHVzaChjYWxsYmFjayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNjaGVkdWxlTWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMubm90aWZ5Rm4oY2FsbGJhY2spO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBBbGwgY2FsbHMgdG8gdGhlIHdyYXBwZWQgZnVuY3Rpb24gd2lsbCBiZSBiYXRjaGVkLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5iYXRjaENhbGxzID0gZnVuY3Rpb24gYmF0Y2hDYWxscyhjYWxsYmFjaykge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgfVxuXG4gICAgICBfdGhpczIuc2NoZWR1bGUoZnVuY3Rpb24gKCkge1xuICAgICAgICBjYWxsYmFjay5hcHBseSh2b2lkIDAsIGFyZ3MpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgfTtcblxuICBfcHJvdG8uZmx1c2ggPSBmdW5jdGlvbiBmbHVzaCgpIHtcbiAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgIHZhciBxdWV1ZSA9IHRoaXMucXVldWU7XG4gICAgdGhpcy5xdWV1ZSA9IFtdO1xuXG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgc2NoZWR1bGVNaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpczMuYmF0Y2hOb3RpZnlGbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcXVldWUuZm9yRWFjaChmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgIF90aGlzMy5ub3RpZnlGbihjYWxsYmFjayk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBtZXRob2QgdG8gc2V0IGEgY3VzdG9tIG5vdGlmeSBmdW5jdGlvbi5cbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBmb3IgZXhhbXBsZSB3cmFwIG5vdGlmaWNhdGlvbnMgd2l0aCBgUmVhY3QuYWN0YCB3aGlsZSBydW5uaW5nIHRlc3RzLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5zZXROb3RpZnlGdW5jdGlvbiA9IGZ1bmN0aW9uIHNldE5vdGlmeUZ1bmN0aW9uKGZuKSB7XG4gICAgdGhpcy5ub3RpZnlGbiA9IGZuO1xuICB9XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBtZXRob2QgdG8gc2V0IGEgY3VzdG9tIGZ1bmN0aW9uIHRvIGJhdGNoIG5vdGlmaWNhdGlvbnMgdG9nZXRoZXIgaW50byBhIHNpbmdsZSB0aWNrLlxuICAgKiBCeSBkZWZhdWx0IFJlYWN0IFF1ZXJ5IHdpbGwgdXNlIHRoZSBiYXRjaCBmdW5jdGlvbiBwcm92aWRlZCBieSBSZWFjdERPTSBvciBSZWFjdCBOYXRpdmUuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnNldEJhdGNoTm90aWZ5RnVuY3Rpb24gPSBmdW5jdGlvbiBzZXRCYXRjaE5vdGlmeUZ1bmN0aW9uKGZuKSB7XG4gICAgdGhpcy5iYXRjaE5vdGlmeUZuID0gZm47XG4gIH07XG5cbiAgcmV0dXJuIE5vdGlmeU1hbmFnZXI7XG59KCk7IC8vIFNJTkdMRVRPTlxuXG5leHBvcnQgdmFyIG5vdGlmeU1hbmFnZXIgPSBuZXcgTm90aWZ5TWFuYWdlcigpOyIsICIvLyBUWVBFU1xuLy8gRlVOQ1RJT05TXG52YXIgbG9nZ2VyID0gY29uc29sZTtcbmV4cG9ydCBmdW5jdGlvbiBnZXRMb2dnZXIoKSB7XG4gIHJldHVybiBsb2dnZXI7XG59XG5leHBvcnQgZnVuY3Rpb24gc2V0TG9nZ2VyKG5ld0xvZ2dlcikge1xuICBsb2dnZXIgPSBuZXdMb2dnZXI7XG59IiwgImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IHsgZ2V0QWJvcnRDb250cm9sbGVyLCBmdW5jdGlvbmFsVXBkYXRlLCBpc1ZhbGlkVGltZW91dCwgbm9vcCwgcmVwbGFjZUVxdWFsRGVlcCwgdGltZVVudGlsU3RhbGUsIGVuc3VyZVF1ZXJ5S2V5QXJyYXkgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IG5vdGlmeU1hbmFnZXIgfSBmcm9tICcuL25vdGlmeU1hbmFnZXInO1xuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHsgUmV0cnllciwgaXNDYW5jZWxsZWRFcnJvciB9IGZyb20gJy4vcmV0cnllcic7IC8vIFRZUEVTXG5cbi8vIENMQVNTXG5leHBvcnQgdmFyIFF1ZXJ5ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gUXVlcnkoY29uZmlnKSB7XG4gICAgdGhpcy5hYm9ydFNpZ25hbENvbnN1bWVkID0gZmFsc2U7XG4gICAgdGhpcy5oYWRPYnNlcnZlcnMgPSBmYWxzZTtcbiAgICB0aGlzLmRlZmF1bHRPcHRpb25zID0gY29uZmlnLmRlZmF1bHRPcHRpb25zO1xuICAgIHRoaXMuc2V0T3B0aW9ucyhjb25maWcub3B0aW9ucyk7XG4gICAgdGhpcy5vYnNlcnZlcnMgPSBbXTtcbiAgICB0aGlzLmNhY2hlID0gY29uZmlnLmNhY2hlO1xuICAgIHRoaXMucXVlcnlLZXkgPSBjb25maWcucXVlcnlLZXk7XG4gICAgdGhpcy5xdWVyeUhhc2ggPSBjb25maWcucXVlcnlIYXNoO1xuICAgIHRoaXMuaW5pdGlhbFN0YXRlID0gY29uZmlnLnN0YXRlIHx8IHRoaXMuZ2V0RGVmYXVsdFN0YXRlKHRoaXMub3B0aW9ucyk7XG4gICAgdGhpcy5zdGF0ZSA9IHRoaXMuaW5pdGlhbFN0YXRlO1xuICAgIHRoaXMubWV0YSA9IGNvbmZpZy5tZXRhO1xuICAgIHRoaXMuc2NoZWR1bGVHYygpO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFF1ZXJ5LnByb3RvdHlwZTtcblxuICBfcHJvdG8uc2V0T3B0aW9ucyA9IGZ1bmN0aW9uIHNldE9wdGlvbnMob3B0aW9ucykge1xuICAgIHZhciBfdGhpcyRvcHRpb25zJGNhY2hlVGk7XG5cbiAgICB0aGlzLm9wdGlvbnMgPSBfZXh0ZW5kcyh7fSwgdGhpcy5kZWZhdWx0T3B0aW9ucywgb3B0aW9ucyk7XG4gICAgdGhpcy5tZXRhID0gb3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5tZXRhOyAvLyBEZWZhdWx0IHRvIDUgbWludXRlcyBpZiBub3QgY2FjaGUgdGltZSBpcyBzZXRcblxuICAgIHRoaXMuY2FjaGVUaW1lID0gTWF0aC5tYXgodGhpcy5jYWNoZVRpbWUgfHwgMCwgKF90aGlzJG9wdGlvbnMkY2FjaGVUaSA9IHRoaXMub3B0aW9ucy5jYWNoZVRpbWUpICE9IG51bGwgPyBfdGhpcyRvcHRpb25zJGNhY2hlVGkgOiA1ICogNjAgKiAxMDAwKTtcbiAgfTtcblxuICBfcHJvdG8uc2V0RGVmYXVsdE9wdGlvbnMgPSBmdW5jdGlvbiBzZXREZWZhdWx0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgdGhpcy5kZWZhdWx0T3B0aW9ucyA9IG9wdGlvbnM7XG4gIH07XG5cbiAgX3Byb3RvLnNjaGVkdWxlR2MgPSBmdW5jdGlvbiBzY2hlZHVsZUdjKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB0aGlzLmNsZWFyR2NUaW1lb3V0KCk7XG5cbiAgICBpZiAoaXNWYWxpZFRpbWVvdXQodGhpcy5jYWNoZVRpbWUpKSB7XG4gICAgICB0aGlzLmdjVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpcy5vcHRpb25hbFJlbW92ZSgpO1xuICAgICAgfSwgdGhpcy5jYWNoZVRpbWUpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uY2xlYXJHY1RpbWVvdXQgPSBmdW5jdGlvbiBjbGVhckdjVGltZW91dCgpIHtcbiAgICBpZiAodGhpcy5nY1RpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLmdjVGltZW91dCk7XG4gICAgICB0aGlzLmdjVGltZW91dCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLm9wdGlvbmFsUmVtb3ZlID0gZnVuY3Rpb24gb3B0aW9uYWxSZW1vdmUoKSB7XG4gICAgaWYgKCF0aGlzLm9ic2VydmVycy5sZW5ndGgpIHtcbiAgICAgIGlmICh0aGlzLnN0YXRlLmlzRmV0Y2hpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFkT2JzZXJ2ZXJzKSB7XG4gICAgICAgICAgdGhpcy5zY2hlZHVsZUdjKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY2FjaGUucmVtb3ZlKHRoaXMpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uc2V0RGF0YSA9IGZ1bmN0aW9uIHNldERhdGEodXBkYXRlciwgb3B0aW9ucykge1xuICAgIHZhciBfdGhpcyRvcHRpb25zJGlzRGF0YUUsIF90aGlzJG9wdGlvbnM7XG5cbiAgICB2YXIgcHJldkRhdGEgPSB0aGlzLnN0YXRlLmRhdGE7IC8vIEdldCB0aGUgbmV3IGRhdGFcblxuICAgIHZhciBkYXRhID0gZnVuY3Rpb25hbFVwZGF0ZSh1cGRhdGVyLCBwcmV2RGF0YSk7IC8vIFVzZSBwcmV2IGRhdGEgaWYgYW4gaXNEYXRhRXF1YWwgZnVuY3Rpb24gaXMgZGVmaW5lZCBhbmQgcmV0dXJucyBgdHJ1ZWBcblxuICAgIGlmICgoX3RoaXMkb3B0aW9ucyRpc0RhdGFFID0gKF90aGlzJG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMpLmlzRGF0YUVxdWFsKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkb3B0aW9ucyRpc0RhdGFFLmNhbGwoX3RoaXMkb3B0aW9ucywgcHJldkRhdGEsIGRhdGEpKSB7XG4gICAgICBkYXRhID0gcHJldkRhdGE7XG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMuc3RydWN0dXJhbFNoYXJpbmcgIT09IGZhbHNlKSB7XG4gICAgICAvLyBTdHJ1Y3R1cmFsbHkgc2hhcmUgZGF0YSBiZXR3ZWVuIHByZXYgYW5kIG5ldyBkYXRhIGlmIG5lZWRlZFxuICAgICAgZGF0YSA9IHJlcGxhY2VFcXVhbERlZXAocHJldkRhdGEsIGRhdGEpO1xuICAgIH0gLy8gU2V0IGRhdGEgYW5kIG1hcmsgaXQgYXMgY2FjaGVkXG5cblxuICAgIHRoaXMuZGlzcGF0Y2goe1xuICAgICAgZGF0YTogZGF0YSxcbiAgICAgIHR5cGU6ICdzdWNjZXNzJyxcbiAgICAgIGRhdGFVcGRhdGVkQXQ6IG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMudXBkYXRlZEF0XG4gICAgfSk7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH07XG5cbiAgX3Byb3RvLnNldFN0YXRlID0gZnVuY3Rpb24gc2V0U3RhdGUoc3RhdGUsIHNldFN0YXRlT3B0aW9ucykge1xuICAgIHRoaXMuZGlzcGF0Y2goe1xuICAgICAgdHlwZTogJ3NldFN0YXRlJyxcbiAgICAgIHN0YXRlOiBzdGF0ZSxcbiAgICAgIHNldFN0YXRlT3B0aW9uczogc2V0U3RhdGVPcHRpb25zXG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmNhbmNlbCA9IGZ1bmN0aW9uIGNhbmNlbChvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzJHJldHJ5ZXI7XG5cbiAgICB2YXIgcHJvbWlzZSA9IHRoaXMucHJvbWlzZTtcbiAgICAoX3RoaXMkcmV0cnllciA9IHRoaXMucmV0cnllcikgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJHJldHJ5ZXIuY2FuY2VsKG9wdGlvbnMpO1xuICAgIHJldHVybiBwcm9taXNlID8gcHJvbWlzZS50aGVuKG5vb3ApLmNhdGNoKG5vb3ApIDogUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH07XG5cbiAgX3Byb3RvLmRlc3Ryb3kgPSBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgIHRoaXMuY2xlYXJHY1RpbWVvdXQoKTtcbiAgICB0aGlzLmNhbmNlbCh7XG4gICAgICBzaWxlbnQ6IHRydWVcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8ucmVzZXQgPSBmdW5jdGlvbiByZXNldCgpIHtcbiAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICB0aGlzLnNldFN0YXRlKHRoaXMuaW5pdGlhbFN0YXRlKTtcbiAgfTtcblxuICBfcHJvdG8uaXNBY3RpdmUgPSBmdW5jdGlvbiBpc0FjdGl2ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5vYnNlcnZlcnMuc29tZShmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgIHJldHVybiBvYnNlcnZlci5vcHRpb25zLmVuYWJsZWQgIT09IGZhbHNlO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5pc0ZldGNoaW5nID0gZnVuY3Rpb24gaXNGZXRjaGluZygpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5pc0ZldGNoaW5nO1xuICB9O1xuXG4gIF9wcm90by5pc1N0YWxlID0gZnVuY3Rpb24gaXNTdGFsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5pc0ludmFsaWRhdGVkIHx8ICF0aGlzLnN0YXRlLmRhdGFVcGRhdGVkQXQgfHwgdGhpcy5vYnNlcnZlcnMuc29tZShmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgIHJldHVybiBvYnNlcnZlci5nZXRDdXJyZW50UmVzdWx0KCkuaXNTdGFsZTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uaXNTdGFsZUJ5VGltZSA9IGZ1bmN0aW9uIGlzU3RhbGVCeVRpbWUoc3RhbGVUaW1lKSB7XG4gICAgaWYgKHN0YWxlVGltZSA9PT0gdm9pZCAwKSB7XG4gICAgICBzdGFsZVRpbWUgPSAwO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnN0YXRlLmlzSW52YWxpZGF0ZWQgfHwgIXRoaXMuc3RhdGUuZGF0YVVwZGF0ZWRBdCB8fCAhdGltZVVudGlsU3RhbGUodGhpcy5zdGF0ZS5kYXRhVXBkYXRlZEF0LCBzdGFsZVRpbWUpO1xuICB9O1xuXG4gIF9wcm90by5vbkZvY3VzID0gZnVuY3Rpb24gb25Gb2N1cygpIHtcbiAgICB2YXIgX3RoaXMkcmV0cnllcjI7XG5cbiAgICB2YXIgb2JzZXJ2ZXIgPSB0aGlzLm9ic2VydmVycy5maW5kKGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4geC5zaG91bGRGZXRjaE9uV2luZG93Rm9jdXMoKTtcbiAgICB9KTtcblxuICAgIGlmIChvYnNlcnZlcikge1xuICAgICAgb2JzZXJ2ZXIucmVmZXRjaCgpO1xuICAgIH0gLy8gQ29udGludWUgZmV0Y2ggaWYgY3VycmVudGx5IHBhdXNlZFxuXG5cbiAgICAoX3RoaXMkcmV0cnllcjIgPSB0aGlzLnJldHJ5ZXIpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRyZXRyeWVyMi5jb250aW51ZSgpO1xuICB9O1xuXG4gIF9wcm90by5vbk9ubGluZSA9IGZ1bmN0aW9uIG9uT25saW5lKCkge1xuICAgIHZhciBfdGhpcyRyZXRyeWVyMztcblxuICAgIHZhciBvYnNlcnZlciA9IHRoaXMub2JzZXJ2ZXJzLmZpbmQoZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiB4LnNob3VsZEZldGNoT25SZWNvbm5lY3QoKTtcbiAgICB9KTtcblxuICAgIGlmIChvYnNlcnZlcikge1xuICAgICAgb2JzZXJ2ZXIucmVmZXRjaCgpO1xuICAgIH0gLy8gQ29udGludWUgZmV0Y2ggaWYgY3VycmVudGx5IHBhdXNlZFxuXG5cbiAgICAoX3RoaXMkcmV0cnllcjMgPSB0aGlzLnJldHJ5ZXIpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRyZXRyeWVyMy5jb250aW51ZSgpO1xuICB9O1xuXG4gIF9wcm90by5hZGRPYnNlcnZlciA9IGZ1bmN0aW9uIGFkZE9ic2VydmVyKG9ic2VydmVyKSB7XG4gICAgaWYgKHRoaXMub2JzZXJ2ZXJzLmluZGV4T2Yob2JzZXJ2ZXIpID09PSAtMSkge1xuICAgICAgdGhpcy5vYnNlcnZlcnMucHVzaChvYnNlcnZlcik7XG4gICAgICB0aGlzLmhhZE9ic2VydmVycyA9IHRydWU7IC8vIFN0b3AgdGhlIHF1ZXJ5IGZyb20gYmVpbmcgZ2FyYmFnZSBjb2xsZWN0ZWRcblxuICAgICAgdGhpcy5jbGVhckdjVGltZW91dCgpO1xuICAgICAgdGhpcy5jYWNoZS5ub3RpZnkoe1xuICAgICAgICB0eXBlOiAnb2JzZXJ2ZXJBZGRlZCcsXG4gICAgICAgIHF1ZXJ5OiB0aGlzLFxuICAgICAgICBvYnNlcnZlcjogb2JzZXJ2ZXJcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ucmVtb3ZlT2JzZXJ2ZXIgPSBmdW5jdGlvbiByZW1vdmVPYnNlcnZlcihvYnNlcnZlcikge1xuICAgIGlmICh0aGlzLm9ic2VydmVycy5pbmRleE9mKG9ic2VydmVyKSAhPT0gLTEpIHtcbiAgICAgIHRoaXMub2JzZXJ2ZXJzID0gdGhpcy5vYnNlcnZlcnMuZmlsdGVyKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHJldHVybiB4ICE9PSBvYnNlcnZlcjtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIXRoaXMub2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgICAvLyBJZiB0aGUgdHJhbnNwb3J0IGxheWVyIGRvZXMgbm90IHN1cHBvcnQgY2FuY2VsbGF0aW9uXG4gICAgICAgIC8vIHdlJ2xsIGxldCB0aGUgcXVlcnkgY29udGludWUgc28gdGhlIHJlc3VsdCBjYW4gYmUgY2FjaGVkXG4gICAgICAgIGlmICh0aGlzLnJldHJ5ZXIpIHtcbiAgICAgICAgICBpZiAodGhpcy5yZXRyeWVyLmlzVHJhbnNwb3J0Q2FuY2VsYWJsZSB8fCB0aGlzLmFib3J0U2lnbmFsQ29uc3VtZWQpIHtcbiAgICAgICAgICAgIHRoaXMucmV0cnllci5jYW5jZWwoe1xuICAgICAgICAgICAgICByZXZlcnQ6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJldHJ5ZXIuY2FuY2VsUmV0cnkoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jYWNoZVRpbWUpIHtcbiAgICAgICAgICB0aGlzLnNjaGVkdWxlR2MoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmNhY2hlLnJlbW92ZSh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLmNhY2hlLm5vdGlmeSh7XG4gICAgICAgIHR5cGU6ICdvYnNlcnZlclJlbW92ZWQnLFxuICAgICAgICBxdWVyeTogdGhpcyxcbiAgICAgICAgb2JzZXJ2ZXI6IG9ic2VydmVyXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLmdldE9ic2VydmVyc0NvdW50ID0gZnVuY3Rpb24gZ2V0T2JzZXJ2ZXJzQ291bnQoKSB7XG4gICAgcmV0dXJuIHRoaXMub2JzZXJ2ZXJzLmxlbmd0aDtcbiAgfTtcblxuICBfcHJvdG8uaW52YWxpZGF0ZSA9IGZ1bmN0aW9uIGludmFsaWRhdGUoKSB7XG4gICAgaWYgKCF0aGlzLnN0YXRlLmlzSW52YWxpZGF0ZWQpIHtcbiAgICAgIHRoaXMuZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiAnaW52YWxpZGF0ZSdcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uZmV0Y2ggPSBmdW5jdGlvbiBmZXRjaChvcHRpb25zLCBmZXRjaE9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcyxcbiAgICAgICAgX3RoaXMkb3B0aW9ucyRiZWhhdmlvLFxuICAgICAgICBfY29udGV4dCRmZXRjaE9wdGlvbnMsXG4gICAgICAgIF9hYm9ydENvbnRyb2xsZXIkYWJvcjtcblxuICAgIGlmICh0aGlzLnN0YXRlLmlzRmV0Y2hpbmcpIHtcbiAgICAgIGlmICh0aGlzLnN0YXRlLmRhdGFVcGRhdGVkQXQgJiYgKGZldGNoT3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogZmV0Y2hPcHRpb25zLmNhbmNlbFJlZmV0Y2gpKSB7XG4gICAgICAgIC8vIFNpbGVudGx5IGNhbmNlbCBjdXJyZW50IGZldGNoIGlmIHRoZSB1c2VyIHdhbnRzIHRvIGNhbmNlbCByZWZldGNoZXNcbiAgICAgICAgdGhpcy5jYW5jZWwoe1xuICAgICAgICAgIHNpbGVudDogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5wcm9taXNlKSB7XG4gICAgICAgIHZhciBfdGhpcyRyZXRyeWVyNDtcblxuICAgICAgICAvLyBtYWtlIHN1cmUgdGhhdCByZXRyaWVzIHRoYXQgd2VyZSBwb3RlbnRpYWxseSBjYW5jZWxsZWQgZHVlIHRvIHVubW91bnRzIGNhbiBjb250aW51ZVxuICAgICAgICAoX3RoaXMkcmV0cnllcjQgPSB0aGlzLnJldHJ5ZXIpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRyZXRyeWVyNC5jb250aW51ZVJldHJ5KCk7IC8vIFJldHVybiBjdXJyZW50IHByb21pc2UgaWYgd2UgYXJlIGFscmVhZHkgZmV0Y2hpbmdcblxuICAgICAgICByZXR1cm4gdGhpcy5wcm9taXNlO1xuICAgICAgfVxuICAgIH0gLy8gVXBkYXRlIGNvbmZpZyBpZiBwYXNzZWQsIG90aGVyd2lzZSB0aGUgY29uZmlnIGZyb20gdGhlIGxhc3QgZXhlY3V0aW9uIGlzIHVzZWRcblxuXG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgIHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcbiAgICB9IC8vIFVzZSB0aGUgb3B0aW9ucyBmcm9tIHRoZSBmaXJzdCBvYnNlcnZlciB3aXRoIGEgcXVlcnkgZnVuY3Rpb24gaWYgbm8gZnVuY3Rpb24gaXMgZm91bmQuXG4gICAgLy8gVGhpcyBjYW4gaGFwcGVuIHdoZW4gdGhlIHF1ZXJ5IGlzIGh5ZHJhdGVkIG9yIGNyZWF0ZWQgd2l0aCBzZXRRdWVyeURhdGEuXG5cblxuICAgIGlmICghdGhpcy5vcHRpb25zLnF1ZXJ5Rm4pIHtcbiAgICAgIHZhciBvYnNlcnZlciA9IHRoaXMub2JzZXJ2ZXJzLmZpbmQoZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgcmV0dXJuIHgub3B0aW9ucy5xdWVyeUZuO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChvYnNlcnZlcikge1xuICAgICAgICB0aGlzLnNldE9wdGlvbnMob2JzZXJ2ZXIub3B0aW9ucyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHF1ZXJ5S2V5ID0gZW5zdXJlUXVlcnlLZXlBcnJheSh0aGlzLnF1ZXJ5S2V5KTtcbiAgICB2YXIgYWJvcnRDb250cm9sbGVyID0gZ2V0QWJvcnRDb250cm9sbGVyKCk7IC8vIENyZWF0ZSBxdWVyeSBmdW5jdGlvbiBjb250ZXh0XG5cbiAgICB2YXIgcXVlcnlGbkNvbnRleHQgPSB7XG4gICAgICBxdWVyeUtleTogcXVlcnlLZXksXG4gICAgICBwYWdlUGFyYW06IHVuZGVmaW5lZCxcbiAgICAgIG1ldGE6IHRoaXMubWV0YVxuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHF1ZXJ5Rm5Db250ZXh0LCAnc2lnbmFsJywge1xuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICBpZiAoYWJvcnRDb250cm9sbGVyKSB7XG4gICAgICAgICAgX3RoaXMyLmFib3J0U2lnbmFsQ29uc3VtZWQgPSB0cnVlO1xuICAgICAgICAgIHJldHVybiBhYm9ydENvbnRyb2xsZXIuc2lnbmFsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9KTsgLy8gQ3JlYXRlIGZldGNoIGZ1bmN0aW9uXG5cbiAgICB2YXIgZmV0Y2hGbiA9IGZ1bmN0aW9uIGZldGNoRm4oKSB7XG4gICAgICBpZiAoIV90aGlzMi5vcHRpb25zLnF1ZXJ5Rm4pIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCdNaXNzaW5nIHF1ZXJ5Rm4nKTtcbiAgICAgIH1cblxuICAgICAgX3RoaXMyLmFib3J0U2lnbmFsQ29uc3VtZWQgPSBmYWxzZTtcbiAgICAgIHJldHVybiBfdGhpczIub3B0aW9ucy5xdWVyeUZuKHF1ZXJ5Rm5Db250ZXh0KTtcbiAgICB9OyAvLyBUcmlnZ2VyIGJlaGF2aW9yIGhvb2tcblxuXG4gICAgdmFyIGNvbnRleHQgPSB7XG4gICAgICBmZXRjaE9wdGlvbnM6IGZldGNoT3B0aW9ucyxcbiAgICAgIG9wdGlvbnM6IHRoaXMub3B0aW9ucyxcbiAgICAgIHF1ZXJ5S2V5OiBxdWVyeUtleSxcbiAgICAgIHN0YXRlOiB0aGlzLnN0YXRlLFxuICAgICAgZmV0Y2hGbjogZmV0Y2hGbixcbiAgICAgIG1ldGE6IHRoaXMubWV0YVxuICAgIH07XG5cbiAgICBpZiAoKF90aGlzJG9wdGlvbnMkYmVoYXZpbyA9IHRoaXMub3B0aW9ucy5iZWhhdmlvcikgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJG9wdGlvbnMkYmVoYXZpby5vbkZldGNoKSB7XG4gICAgICB2YXIgX3RoaXMkb3B0aW9ucyRiZWhhdmlvMjtcblxuICAgICAgKF90aGlzJG9wdGlvbnMkYmVoYXZpbzIgPSB0aGlzLm9wdGlvbnMuYmVoYXZpb3IpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRvcHRpb25zJGJlaGF2aW8yLm9uRmV0Y2goY29udGV4dCk7XG4gICAgfSAvLyBTdG9yZSBzdGF0ZSBpbiBjYXNlIHRoZSBjdXJyZW50IGZldGNoIG5lZWRzIHRvIGJlIHJldmVydGVkXG5cblxuICAgIHRoaXMucmV2ZXJ0U3RhdGUgPSB0aGlzLnN0YXRlOyAvLyBTZXQgdG8gZmV0Y2hpbmcgc3RhdGUgaWYgbm90IGFscmVhZHkgaW4gaXRcblxuICAgIGlmICghdGhpcy5zdGF0ZS5pc0ZldGNoaW5nIHx8IHRoaXMuc3RhdGUuZmV0Y2hNZXRhICE9PSAoKF9jb250ZXh0JGZldGNoT3B0aW9ucyA9IGNvbnRleHQuZmV0Y2hPcHRpb25zKSA9PSBudWxsID8gdm9pZCAwIDogX2NvbnRleHQkZmV0Y2hPcHRpb25zLm1ldGEpKSB7XG4gICAgICB2YXIgX2NvbnRleHQkZmV0Y2hPcHRpb25zMjtcblxuICAgICAgdGhpcy5kaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6ICdmZXRjaCcsXG4gICAgICAgIG1ldGE6IChfY29udGV4dCRmZXRjaE9wdGlvbnMyID0gY29udGV4dC5mZXRjaE9wdGlvbnMpID09IG51bGwgPyB2b2lkIDAgOiBfY29udGV4dCRmZXRjaE9wdGlvbnMyLm1ldGFcbiAgICAgIH0pO1xuICAgIH0gLy8gVHJ5IHRvIGZldGNoIHRoZSBkYXRhXG5cblxuICAgIHRoaXMucmV0cnllciA9IG5ldyBSZXRyeWVyKHtcbiAgICAgIGZuOiBjb250ZXh0LmZldGNoRm4sXG4gICAgICBhYm9ydDogYWJvcnRDb250cm9sbGVyID09IG51bGwgPyB2b2lkIDAgOiAoX2Fib3J0Q29udHJvbGxlciRhYm9yID0gYWJvcnRDb250cm9sbGVyLmFib3J0KSA9PSBudWxsID8gdm9pZCAwIDogX2Fib3J0Q29udHJvbGxlciRhYm9yLmJpbmQoYWJvcnRDb250cm9sbGVyKSxcbiAgICAgIG9uU3VjY2VzczogZnVuY3Rpb24gb25TdWNjZXNzKGRhdGEpIHtcbiAgICAgICAgX3RoaXMyLnNldERhdGEoZGF0YSk7IC8vIE5vdGlmeSBjYWNoZSBjYWxsYmFja1xuXG5cbiAgICAgICAgX3RoaXMyLmNhY2hlLmNvbmZpZy5vblN1Y2Nlc3MgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzMi5jYWNoZS5jb25maWcub25TdWNjZXNzKGRhdGEsIF90aGlzMik7IC8vIFJlbW92ZSBxdWVyeSBhZnRlciBmZXRjaGluZyBpZiBjYWNoZSB0aW1lIGlzIDBcblxuICAgICAgICBpZiAoX3RoaXMyLmNhY2hlVGltZSA9PT0gMCkge1xuICAgICAgICAgIF90aGlzMi5vcHRpb25hbFJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgb25FcnJvcjogZnVuY3Rpb24gb25FcnJvcihlcnJvcikge1xuICAgICAgICAvLyBPcHRpbWlzdGljYWxseSB1cGRhdGUgc3RhdGUgaWYgbmVlZGVkXG4gICAgICAgIGlmICghKGlzQ2FuY2VsbGVkRXJyb3IoZXJyb3IpICYmIGVycm9yLnNpbGVudCkpIHtcbiAgICAgICAgICBfdGhpczIuZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgIGVycm9yOiBlcnJvclxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc0NhbmNlbGxlZEVycm9yKGVycm9yKSkge1xuICAgICAgICAgIC8vIE5vdGlmeSBjYWNoZSBjYWxsYmFja1xuICAgICAgICAgIF90aGlzMi5jYWNoZS5jb25maWcub25FcnJvciA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMyLmNhY2hlLmNvbmZpZy5vbkVycm9yKGVycm9yLCBfdGhpczIpOyAvLyBMb2cgZXJyb3JcblxuICAgICAgICAgIGdldExvZ2dlcigpLmVycm9yKGVycm9yKTtcbiAgICAgICAgfSAvLyBSZW1vdmUgcXVlcnkgYWZ0ZXIgZmV0Y2hpbmcgaWYgY2FjaGUgdGltZSBpcyAwXG5cblxuICAgICAgICBpZiAoX3RoaXMyLmNhY2hlVGltZSA9PT0gMCkge1xuICAgICAgICAgIF90aGlzMi5vcHRpb25hbFJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgb25GYWlsOiBmdW5jdGlvbiBvbkZhaWwoKSB7XG4gICAgICAgIF90aGlzMi5kaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogJ2ZhaWxlZCdcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgb25QYXVzZTogZnVuY3Rpb24gb25QYXVzZSgpIHtcbiAgICAgICAgX3RoaXMyLmRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiAncGF1c2UnXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIG9uQ29udGludWU6IGZ1bmN0aW9uIG9uQ29udGludWUoKSB7XG4gICAgICAgIF90aGlzMi5kaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogJ2NvbnRpbnVlJ1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICByZXRyeTogY29udGV4dC5vcHRpb25zLnJldHJ5LFxuICAgICAgcmV0cnlEZWxheTogY29udGV4dC5vcHRpb25zLnJldHJ5RGVsYXlcbiAgICB9KTtcbiAgICB0aGlzLnByb21pc2UgPSB0aGlzLnJldHJ5ZXIucHJvbWlzZTtcbiAgICByZXR1cm4gdGhpcy5wcm9taXNlO1xuICB9O1xuXG4gIF9wcm90by5kaXNwYXRjaCA9IGZ1bmN0aW9uIGRpc3BhdGNoKGFjdGlvbikge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHRoaXMucmVkdWNlcih0aGlzLnN0YXRlLCBhY3Rpb24pO1xuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMzLm9ic2VydmVycy5mb3JFYWNoKGZ1bmN0aW9uIChvYnNlcnZlcikge1xuICAgICAgICBvYnNlcnZlci5vblF1ZXJ5VXBkYXRlKGFjdGlvbik7XG4gICAgICB9KTtcblxuICAgICAgX3RoaXMzLmNhY2hlLm5vdGlmeSh7XG4gICAgICAgIHF1ZXJ5OiBfdGhpczMsXG4gICAgICAgIHR5cGU6ICdxdWVyeVVwZGF0ZWQnLFxuICAgICAgICBhY3Rpb246IGFjdGlvblxuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmdldERlZmF1bHRTdGF0ZSA9IGZ1bmN0aW9uIGdldERlZmF1bHRTdGF0ZShvcHRpb25zKSB7XG4gICAgdmFyIGRhdGEgPSB0eXBlb2Ygb3B0aW9ucy5pbml0aWFsRGF0YSA9PT0gJ2Z1bmN0aW9uJyA/IG9wdGlvbnMuaW5pdGlhbERhdGEoKSA6IG9wdGlvbnMuaW5pdGlhbERhdGE7XG4gICAgdmFyIGhhc0luaXRpYWxEYXRhID0gdHlwZW9mIG9wdGlvbnMuaW5pdGlhbERhdGEgIT09ICd1bmRlZmluZWQnO1xuICAgIHZhciBpbml0aWFsRGF0YVVwZGF0ZWRBdCA9IGhhc0luaXRpYWxEYXRhID8gdHlwZW9mIG9wdGlvbnMuaW5pdGlhbERhdGFVcGRhdGVkQXQgPT09ICdmdW5jdGlvbicgPyBvcHRpb25zLmluaXRpYWxEYXRhVXBkYXRlZEF0KCkgOiBvcHRpb25zLmluaXRpYWxEYXRhVXBkYXRlZEF0IDogMDtcbiAgICB2YXIgaGFzRGF0YSA9IHR5cGVvZiBkYXRhICE9PSAndW5kZWZpbmVkJztcbiAgICByZXR1cm4ge1xuICAgICAgZGF0YTogZGF0YSxcbiAgICAgIGRhdGFVcGRhdGVDb3VudDogMCxcbiAgICAgIGRhdGFVcGRhdGVkQXQ6IGhhc0RhdGEgPyBpbml0aWFsRGF0YVVwZGF0ZWRBdCAhPSBudWxsID8gaW5pdGlhbERhdGFVcGRhdGVkQXQgOiBEYXRlLm5vdygpIDogMCxcbiAgICAgIGVycm9yOiBudWxsLFxuICAgICAgZXJyb3JVcGRhdGVDb3VudDogMCxcbiAgICAgIGVycm9yVXBkYXRlZEF0OiAwLFxuICAgICAgZmV0Y2hGYWlsdXJlQ291bnQ6IDAsXG4gICAgICBmZXRjaE1ldGE6IG51bGwsXG4gICAgICBpc0ZldGNoaW5nOiBmYWxzZSxcbiAgICAgIGlzSW52YWxpZGF0ZWQ6IGZhbHNlLFxuICAgICAgaXNQYXVzZWQ6IGZhbHNlLFxuICAgICAgc3RhdHVzOiBoYXNEYXRhID8gJ3N1Y2Nlc3MnIDogJ2lkbGUnXG4gICAgfTtcbiAgfTtcblxuICBfcHJvdG8ucmVkdWNlciA9IGZ1bmN0aW9uIHJlZHVjZXIoc3RhdGUsIGFjdGlvbikge1xuICAgIHZhciBfYWN0aW9uJG1ldGEsIF9hY3Rpb24kZGF0YVVwZGF0ZWRBdDtcblxuICAgIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICAgIGNhc2UgJ2ZhaWxlZCc6XG4gICAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgICBmZXRjaEZhaWx1cmVDb3VudDogc3RhdGUuZmV0Y2hGYWlsdXJlQ291bnQgKyAxXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdwYXVzZSc6XG4gICAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgICBpc1BhdXNlZDogdHJ1ZVxuICAgICAgICB9KTtcblxuICAgICAgY2FzZSAnY29udGludWUnOlxuICAgICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCB7XG4gICAgICAgICAgaXNQYXVzZWQ6IGZhbHNlXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdmZXRjaCc6XG4gICAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgICBmZXRjaEZhaWx1cmVDb3VudDogMCxcbiAgICAgICAgICBmZXRjaE1ldGE6IChfYWN0aW9uJG1ldGEgPSBhY3Rpb24ubWV0YSkgIT0gbnVsbCA/IF9hY3Rpb24kbWV0YSA6IG51bGwsXG4gICAgICAgICAgaXNGZXRjaGluZzogdHJ1ZSxcbiAgICAgICAgICBpc1BhdXNlZDogZmFsc2VcbiAgICAgICAgfSwgIXN0YXRlLmRhdGFVcGRhdGVkQXQgJiYge1xuICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgIHN0YXR1czogJ2xvYWRpbmcnXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdzdWNjZXNzJzpcbiAgICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwge1xuICAgICAgICAgIGRhdGE6IGFjdGlvbi5kYXRhLFxuICAgICAgICAgIGRhdGFVcGRhdGVDb3VudDogc3RhdGUuZGF0YVVwZGF0ZUNvdW50ICsgMSxcbiAgICAgICAgICBkYXRhVXBkYXRlZEF0OiAoX2FjdGlvbiRkYXRhVXBkYXRlZEF0ID0gYWN0aW9uLmRhdGFVcGRhdGVkQXQpICE9IG51bGwgPyBfYWN0aW9uJGRhdGFVcGRhdGVkQXQgOiBEYXRlLm5vdygpLFxuICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgIGZldGNoRmFpbHVyZUNvdW50OiAwLFxuICAgICAgICAgIGlzRmV0Y2hpbmc6IGZhbHNlLFxuICAgICAgICAgIGlzSW52YWxpZGF0ZWQ6IGZhbHNlLFxuICAgICAgICAgIGlzUGF1c2VkOiBmYWxzZSxcbiAgICAgICAgICBzdGF0dXM6ICdzdWNjZXNzJ1xuICAgICAgICB9KTtcblxuICAgICAgY2FzZSAnZXJyb3InOlxuICAgICAgICB2YXIgZXJyb3IgPSBhY3Rpb24uZXJyb3I7XG5cbiAgICAgICAgaWYgKGlzQ2FuY2VsbGVkRXJyb3IoZXJyb3IpICYmIGVycm9yLnJldmVydCAmJiB0aGlzLnJldmVydFN0YXRlKSB7XG4gICAgICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCB0aGlzLnJldmVydFN0YXRlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgICBlcnJvcjogZXJyb3IsXG4gICAgICAgICAgZXJyb3JVcGRhdGVDb3VudDogc3RhdGUuZXJyb3JVcGRhdGVDb3VudCArIDEsXG4gICAgICAgICAgZXJyb3JVcGRhdGVkQXQ6IERhdGUubm93KCksXG4gICAgICAgICAgZmV0Y2hGYWlsdXJlQ291bnQ6IHN0YXRlLmZldGNoRmFpbHVyZUNvdW50ICsgMSxcbiAgICAgICAgICBpc0ZldGNoaW5nOiBmYWxzZSxcbiAgICAgICAgICBpc1BhdXNlZDogZmFsc2UsXG4gICAgICAgICAgc3RhdHVzOiAnZXJyb3InXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdpbnZhbGlkYXRlJzpcbiAgICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwge1xuICAgICAgICAgIGlzSW52YWxpZGF0ZWQ6IHRydWVcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ3NldFN0YXRlJzpcbiAgICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwgYWN0aW9uLnN0YXRlKTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gUXVlcnk7XG59KCk7IiwgImltcG9ydCBfaW5oZXJpdHNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZVwiO1xuaW1wb3J0IHsgaGFzaFF1ZXJ5S2V5QnlPcHRpb25zLCBtYXRjaFF1ZXJ5LCBwYXJzZUZpbHRlckFyZ3MgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IFF1ZXJ5IH0gZnJvbSAnLi9xdWVyeSc7XG5pbXBvcnQgeyBub3RpZnlNYW5hZ2VyIH0gZnJvbSAnLi9ub3RpZnlNYW5hZ2VyJztcbmltcG9ydCB7IFN1YnNjcmliYWJsZSB9IGZyb20gJy4vc3Vic2NyaWJhYmxlJztcbi8vIENMQVNTXG5leHBvcnQgdmFyIFF1ZXJ5Q2FjaGUgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9TdWJzY3JpYmFibGUpIHtcbiAgX2luaGVyaXRzTG9vc2UoUXVlcnlDYWNoZSwgX1N1YnNjcmliYWJsZSk7XG5cbiAgZnVuY3Rpb24gUXVlcnlDYWNoZShjb25maWcpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfdGhpcyA9IF9TdWJzY3JpYmFibGUuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIF90aGlzLmNvbmZpZyA9IGNvbmZpZyB8fCB7fTtcbiAgICBfdGhpcy5xdWVyaWVzID0gW107XG4gICAgX3RoaXMucXVlcmllc01hcCA9IHt9O1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBRdWVyeUNhY2hlLnByb3RvdHlwZTtcblxuICBfcHJvdG8uYnVpbGQgPSBmdW5jdGlvbiBidWlsZChjbGllbnQsIG9wdGlvbnMsIHN0YXRlKSB7XG4gICAgdmFyIF9vcHRpb25zJHF1ZXJ5SGFzaDtcblxuICAgIHZhciBxdWVyeUtleSA9IG9wdGlvbnMucXVlcnlLZXk7XG4gICAgdmFyIHF1ZXJ5SGFzaCA9IChfb3B0aW9ucyRxdWVyeUhhc2ggPSBvcHRpb25zLnF1ZXJ5SGFzaCkgIT0gbnVsbCA/IF9vcHRpb25zJHF1ZXJ5SGFzaCA6IGhhc2hRdWVyeUtleUJ5T3B0aW9ucyhxdWVyeUtleSwgb3B0aW9ucyk7XG4gICAgdmFyIHF1ZXJ5ID0gdGhpcy5nZXQocXVlcnlIYXNoKTtcblxuICAgIGlmICghcXVlcnkpIHtcbiAgICAgIHF1ZXJ5ID0gbmV3IFF1ZXJ5KHtcbiAgICAgICAgY2FjaGU6IHRoaXMsXG4gICAgICAgIHF1ZXJ5S2V5OiBxdWVyeUtleSxcbiAgICAgICAgcXVlcnlIYXNoOiBxdWVyeUhhc2gsXG4gICAgICAgIG9wdGlvbnM6IGNsaWVudC5kZWZhdWx0UXVlcnlPcHRpb25zKG9wdGlvbnMpLFxuICAgICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICAgIGRlZmF1bHRPcHRpb25zOiBjbGllbnQuZ2V0UXVlcnlEZWZhdWx0cyhxdWVyeUtleSksXG4gICAgICAgIG1ldGE6IG9wdGlvbnMubWV0YVxuICAgICAgfSk7XG4gICAgICB0aGlzLmFkZChxdWVyeSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHF1ZXJ5O1xuICB9O1xuXG4gIF9wcm90by5hZGQgPSBmdW5jdGlvbiBhZGQocXVlcnkpIHtcbiAgICBpZiAoIXRoaXMucXVlcmllc01hcFtxdWVyeS5xdWVyeUhhc2hdKSB7XG4gICAgICB0aGlzLnF1ZXJpZXNNYXBbcXVlcnkucXVlcnlIYXNoXSA9IHF1ZXJ5O1xuICAgICAgdGhpcy5xdWVyaWVzLnB1c2gocXVlcnkpO1xuICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICB0eXBlOiAncXVlcnlBZGRlZCcsXG4gICAgICAgIHF1ZXJ5OiBxdWVyeVxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5yZW1vdmUgPSBmdW5jdGlvbiByZW1vdmUocXVlcnkpIHtcbiAgICB2YXIgcXVlcnlJbk1hcCA9IHRoaXMucXVlcmllc01hcFtxdWVyeS5xdWVyeUhhc2hdO1xuXG4gICAgaWYgKHF1ZXJ5SW5NYXApIHtcbiAgICAgIHF1ZXJ5LmRlc3Ryb3koKTtcbiAgICAgIHRoaXMucXVlcmllcyA9IHRoaXMucXVlcmllcy5maWx0ZXIoZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgcmV0dXJuIHggIT09IHF1ZXJ5O1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChxdWVyeUluTWFwID09PSBxdWVyeSkge1xuICAgICAgICBkZWxldGUgdGhpcy5xdWVyaWVzTWFwW3F1ZXJ5LnF1ZXJ5SGFzaF07XG4gICAgICB9XG5cbiAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgdHlwZTogJ3F1ZXJ5UmVtb3ZlZCcsXG4gICAgICAgIHF1ZXJ5OiBxdWVyeVxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5jbGVhciA9IGZ1bmN0aW9uIGNsZWFyKCkge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczIucXVlcmllcy5mb3JFYWNoKGZ1bmN0aW9uIChxdWVyeSkge1xuICAgICAgICBfdGhpczIucmVtb3ZlKHF1ZXJ5KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5nZXQgPSBmdW5jdGlvbiBnZXQocXVlcnlIYXNoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcmllc01hcFtxdWVyeUhhc2hdO1xuICB9O1xuXG4gIF9wcm90by5nZXRBbGwgPSBmdW5jdGlvbiBnZXRBbGwoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcmllcztcbiAgfTtcblxuICBfcHJvdG8uZmluZCA9IGZ1bmN0aW9uIGZpbmQoYXJnMSwgYXJnMikge1xuICAgIHZhciBfcGFyc2VGaWx0ZXJBcmdzID0gcGFyc2VGaWx0ZXJBcmdzKGFyZzEsIGFyZzIpLFxuICAgICAgICBmaWx0ZXJzID0gX3BhcnNlRmlsdGVyQXJnc1swXTtcblxuICAgIGlmICh0eXBlb2YgZmlsdGVycy5leGFjdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGZpbHRlcnMuZXhhY3QgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnF1ZXJpZXMuZmluZChmdW5jdGlvbiAocXVlcnkpIHtcbiAgICAgIHJldHVybiBtYXRjaFF1ZXJ5KGZpbHRlcnMsIHF1ZXJ5KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uZmluZEFsbCA9IGZ1bmN0aW9uIGZpbmRBbGwoYXJnMSwgYXJnMikge1xuICAgIHZhciBfcGFyc2VGaWx0ZXJBcmdzMiA9IHBhcnNlRmlsdGVyQXJncyhhcmcxLCBhcmcyKSxcbiAgICAgICAgZmlsdGVycyA9IF9wYXJzZUZpbHRlckFyZ3MyWzBdO1xuXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGZpbHRlcnMpLmxlbmd0aCA+IDAgPyB0aGlzLnF1ZXJpZXMuZmlsdGVyKGZ1bmN0aW9uIChxdWVyeSkge1xuICAgICAgcmV0dXJuIG1hdGNoUXVlcnkoZmlsdGVycywgcXVlcnkpO1xuICAgIH0pIDogdGhpcy5xdWVyaWVzO1xuICB9O1xuXG4gIF9wcm90by5ub3RpZnkgPSBmdW5jdGlvbiBub3RpZnkoZXZlbnQpIHtcbiAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMzLmxpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uIChsaXN0ZW5lcikge1xuICAgICAgICBsaXN0ZW5lcihldmVudCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8ub25Gb2N1cyA9IGZ1bmN0aW9uIG9uRm9jdXMoKSB7XG4gICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzNC5xdWVyaWVzLmZvckVhY2goZnVuY3Rpb24gKHF1ZXJ5KSB7XG4gICAgICAgIHF1ZXJ5Lm9uRm9jdXMoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5vbk9ubGluZSA9IGZ1bmN0aW9uIG9uT25saW5lKCkge1xuICAgIHZhciBfdGhpczUgPSB0aGlzO1xuXG4gICAgbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczUucXVlcmllcy5mb3JFYWNoKGZ1bmN0aW9uIChxdWVyeSkge1xuICAgICAgICBxdWVyeS5vbk9ubGluZSgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIFF1ZXJ5Q2FjaGU7XG59KFN1YnNjcmliYWJsZSk7IiwgImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHsgbm90aWZ5TWFuYWdlciB9IGZyb20gJy4vbm90aWZ5TWFuYWdlcic7XG5pbXBvcnQgeyBSZXRyeWVyIH0gZnJvbSAnLi9yZXRyeWVyJztcbmltcG9ydCB7IG5vb3AgfSBmcm9tICcuL3V0aWxzJzsgLy8gVFlQRVNcblxuLy8gQ0xBU1NcbmV4cG9ydCB2YXIgTXV0YXRpb24gPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBNdXRhdGlvbihjb25maWcpIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBfZXh0ZW5kcyh7fSwgY29uZmlnLmRlZmF1bHRPcHRpb25zLCBjb25maWcub3B0aW9ucyk7XG4gICAgdGhpcy5tdXRhdGlvbklkID0gY29uZmlnLm11dGF0aW9uSWQ7XG4gICAgdGhpcy5tdXRhdGlvbkNhY2hlID0gY29uZmlnLm11dGF0aW9uQ2FjaGU7XG4gICAgdGhpcy5vYnNlcnZlcnMgPSBbXTtcbiAgICB0aGlzLnN0YXRlID0gY29uZmlnLnN0YXRlIHx8IGdldERlZmF1bHRTdGF0ZSgpO1xuICAgIHRoaXMubWV0YSA9IGNvbmZpZy5tZXRhO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IE11dGF0aW9uLnByb3RvdHlwZTtcblxuICBfcHJvdG8uc2V0U3RhdGUgPSBmdW5jdGlvbiBzZXRTdGF0ZShzdGF0ZSkge1xuICAgIHRoaXMuZGlzcGF0Y2goe1xuICAgICAgdHlwZTogJ3NldFN0YXRlJyxcbiAgICAgIHN0YXRlOiBzdGF0ZVxuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5hZGRPYnNlcnZlciA9IGZ1bmN0aW9uIGFkZE9ic2VydmVyKG9ic2VydmVyKSB7XG4gICAgaWYgKHRoaXMub2JzZXJ2ZXJzLmluZGV4T2Yob2JzZXJ2ZXIpID09PSAtMSkge1xuICAgICAgdGhpcy5vYnNlcnZlcnMucHVzaChvYnNlcnZlcik7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5yZW1vdmVPYnNlcnZlciA9IGZ1bmN0aW9uIHJlbW92ZU9ic2VydmVyKG9ic2VydmVyKSB7XG4gICAgdGhpcy5vYnNlcnZlcnMgPSB0aGlzLm9ic2VydmVycy5maWx0ZXIoZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiB4ICE9PSBvYnNlcnZlcjtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uY2FuY2VsID0gZnVuY3Rpb24gY2FuY2VsKCkge1xuICAgIGlmICh0aGlzLnJldHJ5ZXIpIHtcbiAgICAgIHRoaXMucmV0cnllci5jYW5jZWwoKTtcbiAgICAgIHJldHVybiB0aGlzLnJldHJ5ZXIucHJvbWlzZS50aGVuKG5vb3ApLmNhdGNoKG5vb3ApO1xuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfTtcblxuICBfcHJvdG8uY29udGludWUgPSBmdW5jdGlvbiBfY29udGludWUoKSB7XG4gICAgaWYgKHRoaXMucmV0cnllcikge1xuICAgICAgdGhpcy5yZXRyeWVyLmNvbnRpbnVlKCk7XG4gICAgICByZXR1cm4gdGhpcy5yZXRyeWVyLnByb21pc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZSgpO1xuICB9O1xuXG4gIF9wcm90by5leGVjdXRlID0gZnVuY3Rpb24gZXhlY3V0ZSgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdmFyIGRhdGE7XG4gICAgdmFyIHJlc3RvcmVkID0gdGhpcy5zdGF0ZS5zdGF0dXMgPT09ICdsb2FkaW5nJztcbiAgICB2YXIgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSgpO1xuXG4gICAgaWYgKCFyZXN0b3JlZCkge1xuICAgICAgdGhpcy5kaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6ICdsb2FkaW5nJyxcbiAgICAgICAgdmFyaWFibGVzOiB0aGlzLm9wdGlvbnMudmFyaWFibGVzXG4gICAgICB9KTtcbiAgICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBOb3RpZnkgY2FjaGUgY2FsbGJhY2tcbiAgICAgICAgX3RoaXMubXV0YXRpb25DYWNoZS5jb25maWcub25NdXRhdGUgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzLm11dGF0aW9uQ2FjaGUuY29uZmlnLm9uTXV0YXRlKF90aGlzLnN0YXRlLnZhcmlhYmxlcywgX3RoaXMpO1xuICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5vcHRpb25zLm9uTXV0YXRlID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcy5vcHRpb25zLm9uTXV0YXRlKF90aGlzLnN0YXRlLnZhcmlhYmxlcyk7XG4gICAgICB9KS50aGVuKGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICAgIGlmIChjb250ZXh0ICE9PSBfdGhpcy5zdGF0ZS5jb250ZXh0KSB7XG4gICAgICAgICAgX3RoaXMuZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogJ2xvYWRpbmcnLFxuICAgICAgICAgICAgY29udGV4dDogY29udGV4dCxcbiAgICAgICAgICAgIHZhcmlhYmxlczogX3RoaXMuc3RhdGUudmFyaWFibGVzXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzLmV4ZWN1dGVNdXRhdGlvbigpO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgZGF0YSA9IHJlc3VsdDsgLy8gTm90aWZ5IGNhY2hlIGNhbGxiYWNrXG5cbiAgICAgIF90aGlzLm11dGF0aW9uQ2FjaGUuY29uZmlnLm9uU3VjY2VzcyA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMubXV0YXRpb25DYWNoZS5jb25maWcub25TdWNjZXNzKGRhdGEsIF90aGlzLnN0YXRlLnZhcmlhYmxlcywgX3RoaXMuc3RhdGUuY29udGV4dCwgX3RoaXMpO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzLm9wdGlvbnMub25TdWNjZXNzID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcy5vcHRpb25zLm9uU3VjY2VzcyhkYXRhLCBfdGhpcy5zdGF0ZS52YXJpYWJsZXMsIF90aGlzLnN0YXRlLmNvbnRleHQpO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzLm9wdGlvbnMub25TZXR0bGVkID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcy5vcHRpb25zLm9uU2V0dGxlZChkYXRhLCBudWxsLCBfdGhpcy5zdGF0ZS52YXJpYWJsZXMsIF90aGlzLnN0YXRlLmNvbnRleHQpO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiAnc3VjY2VzcycsXG4gICAgICAgIGRhdGE6IGRhdGFcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgIC8vIE5vdGlmeSBjYWNoZSBjYWxsYmFja1xuICAgICAgX3RoaXMubXV0YXRpb25DYWNoZS5jb25maWcub25FcnJvciA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMubXV0YXRpb25DYWNoZS5jb25maWcub25FcnJvcihlcnJvciwgX3RoaXMuc3RhdGUudmFyaWFibGVzLCBfdGhpcy5zdGF0ZS5jb250ZXh0LCBfdGhpcyk7IC8vIExvZyBlcnJvclxuXG4gICAgICBnZXRMb2dnZXIoKS5lcnJvcihlcnJvcik7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5vcHRpb25zLm9uRXJyb3IgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzLm9wdGlvbnMub25FcnJvcihlcnJvciwgX3RoaXMuc3RhdGUudmFyaWFibGVzLCBfdGhpcy5zdGF0ZS5jb250ZXh0KTtcbiAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX3RoaXMub3B0aW9ucy5vblNldHRsZWQgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzLm9wdGlvbnMub25TZXR0bGVkKHVuZGVmaW5lZCwgZXJyb3IsIF90aGlzLnN0YXRlLnZhcmlhYmxlcywgX3RoaXMuc3RhdGUuY29udGV4dCk7XG4gICAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMuZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgZXJyb3I6IGVycm9yXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmV4ZWN1dGVNdXRhdGlvbiA9IGZ1bmN0aW9uIGV4ZWN1dGVNdXRhdGlvbigpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcyxcbiAgICAgICAgX3RoaXMkb3B0aW9ucyRyZXRyeTtcblxuICAgIHRoaXMucmV0cnllciA9IG5ldyBSZXRyeWVyKHtcbiAgICAgIGZuOiBmdW5jdGlvbiBmbigpIHtcbiAgICAgICAgaWYgKCFfdGhpczIub3B0aW9ucy5tdXRhdGlvbkZuKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCdObyBtdXRhdGlvbkZuIGZvdW5kJyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gX3RoaXMyLm9wdGlvbnMubXV0YXRpb25GbihfdGhpczIuc3RhdGUudmFyaWFibGVzKTtcbiAgICAgIH0sXG4gICAgICBvbkZhaWw6IGZ1bmN0aW9uIG9uRmFpbCgpIHtcbiAgICAgICAgX3RoaXMyLmRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiAnZmFpbGVkJ1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBvblBhdXNlOiBmdW5jdGlvbiBvblBhdXNlKCkge1xuICAgICAgICBfdGhpczIuZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6ICdwYXVzZSdcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgb25Db250aW51ZTogZnVuY3Rpb24gb25Db250aW51ZSgpIHtcbiAgICAgICAgX3RoaXMyLmRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiAnY29udGludWUnXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIHJldHJ5OiAoX3RoaXMkb3B0aW9ucyRyZXRyeSA9IHRoaXMub3B0aW9ucy5yZXRyeSkgIT0gbnVsbCA/IF90aGlzJG9wdGlvbnMkcmV0cnkgOiAwLFxuICAgICAgcmV0cnlEZWxheTogdGhpcy5vcHRpb25zLnJldHJ5RGVsYXlcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5yZXRyeWVyLnByb21pc2U7XG4gIH07XG5cbiAgX3Byb3RvLmRpc3BhdGNoID0gZnVuY3Rpb24gZGlzcGF0Y2goYWN0aW9uKSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICB0aGlzLnN0YXRlID0gcmVkdWNlcih0aGlzLnN0YXRlLCBhY3Rpb24pO1xuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMzLm9ic2VydmVycy5mb3JFYWNoKGZ1bmN0aW9uIChvYnNlcnZlcikge1xuICAgICAgICBvYnNlcnZlci5vbk11dGF0aW9uVXBkYXRlKGFjdGlvbik7XG4gICAgICB9KTtcblxuICAgICAgX3RoaXMzLm11dGF0aW9uQ2FjaGUubm90aWZ5KF90aGlzMyk7XG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIE11dGF0aW9uO1xufSgpO1xuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRTdGF0ZSgpIHtcbiAgcmV0dXJuIHtcbiAgICBjb250ZXh0OiB1bmRlZmluZWQsXG4gICAgZGF0YTogdW5kZWZpbmVkLFxuICAgIGVycm9yOiBudWxsLFxuICAgIGZhaWx1cmVDb3VudDogMCxcbiAgICBpc1BhdXNlZDogZmFsc2UsXG4gICAgc3RhdHVzOiAnaWRsZScsXG4gICAgdmFyaWFibGVzOiB1bmRlZmluZWRcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVkdWNlcihzdGF0ZSwgYWN0aW9uKSB7XG4gIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICBjYXNlICdmYWlsZWQnOlxuICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwge1xuICAgICAgICBmYWlsdXJlQ291bnQ6IHN0YXRlLmZhaWx1cmVDb3VudCArIDFcbiAgICAgIH0pO1xuXG4gICAgY2FzZSAncGF1c2UnOlxuICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwge1xuICAgICAgICBpc1BhdXNlZDogdHJ1ZVxuICAgICAgfSk7XG5cbiAgICBjYXNlICdjb250aW51ZSc6XG4gICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCB7XG4gICAgICAgIGlzUGF1c2VkOiBmYWxzZVxuICAgICAgfSk7XG5cbiAgICBjYXNlICdsb2FkaW5nJzpcbiAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgY29udGV4dDogYWN0aW9uLmNvbnRleHQsXG4gICAgICAgIGRhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgIGlzUGF1c2VkOiBmYWxzZSxcbiAgICAgICAgc3RhdHVzOiAnbG9hZGluZycsXG4gICAgICAgIHZhcmlhYmxlczogYWN0aW9uLnZhcmlhYmxlc1xuICAgICAgfSk7XG5cbiAgICBjYXNlICdzdWNjZXNzJzpcbiAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgZGF0YTogYWN0aW9uLmRhdGEsXG4gICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICBzdGF0dXM6ICdzdWNjZXNzJyxcbiAgICAgICAgaXNQYXVzZWQ6IGZhbHNlXG4gICAgICB9KTtcblxuICAgIGNhc2UgJ2Vycm9yJzpcbiAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgZGF0YTogdW5kZWZpbmVkLFxuICAgICAgICBlcnJvcjogYWN0aW9uLmVycm9yLFxuICAgICAgICBmYWlsdXJlQ291bnQ6IHN0YXRlLmZhaWx1cmVDb3VudCArIDEsXG4gICAgICAgIGlzUGF1c2VkOiBmYWxzZSxcbiAgICAgICAgc3RhdHVzOiAnZXJyb3InXG4gICAgICB9KTtcblxuICAgIGNhc2UgJ3NldFN0YXRlJzpcbiAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIGFjdGlvbi5zdGF0ZSk7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHN0YXRlO1xuICB9XG59IiwgImltcG9ydCBfaW5oZXJpdHNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZVwiO1xuaW1wb3J0IHsgbm90aWZ5TWFuYWdlciB9IGZyb20gJy4vbm90aWZ5TWFuYWdlcic7XG5pbXBvcnQgeyBNdXRhdGlvbiB9IGZyb20gJy4vbXV0YXRpb24nO1xuaW1wb3J0IHsgbWF0Y2hNdXRhdGlvbiwgbm9vcCB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgU3Vic2NyaWJhYmxlIH0gZnJvbSAnLi9zdWJzY3JpYmFibGUnOyAvLyBUWVBFU1xuXG4vLyBDTEFTU1xuZXhwb3J0IHZhciBNdXRhdGlvbkNhY2hlID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfU3Vic2NyaWJhYmxlKSB7XG4gIF9pbmhlcml0c0xvb3NlKE11dGF0aW9uQ2FjaGUsIF9TdWJzY3JpYmFibGUpO1xuXG4gIGZ1bmN0aW9uIE11dGF0aW9uQ2FjaGUoY29uZmlnKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX3RoaXMgPSBfU3Vic2NyaWJhYmxlLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICBfdGhpcy5jb25maWcgPSBjb25maWcgfHwge307XG4gICAgX3RoaXMubXV0YXRpb25zID0gW107XG4gICAgX3RoaXMubXV0YXRpb25JZCA9IDA7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IE11dGF0aW9uQ2FjaGUucHJvdG90eXBlO1xuXG4gIF9wcm90by5idWlsZCA9IGZ1bmN0aW9uIGJ1aWxkKGNsaWVudCwgb3B0aW9ucywgc3RhdGUpIHtcbiAgICB2YXIgbXV0YXRpb24gPSBuZXcgTXV0YXRpb24oe1xuICAgICAgbXV0YXRpb25DYWNoZTogdGhpcyxcbiAgICAgIG11dGF0aW9uSWQ6ICsrdGhpcy5tdXRhdGlvbklkLFxuICAgICAgb3B0aW9uczogY2xpZW50LmRlZmF1bHRNdXRhdGlvbk9wdGlvbnMob3B0aW9ucyksXG4gICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICBkZWZhdWx0T3B0aW9uczogb3B0aW9ucy5tdXRhdGlvbktleSA/IGNsaWVudC5nZXRNdXRhdGlvbkRlZmF1bHRzKG9wdGlvbnMubXV0YXRpb25LZXkpIDogdW5kZWZpbmVkLFxuICAgICAgbWV0YTogb3B0aW9ucy5tZXRhXG4gICAgfSk7XG4gICAgdGhpcy5hZGQobXV0YXRpb24pO1xuICAgIHJldHVybiBtdXRhdGlvbjtcbiAgfTtcblxuICBfcHJvdG8uYWRkID0gZnVuY3Rpb24gYWRkKG11dGF0aW9uKSB7XG4gICAgdGhpcy5tdXRhdGlvbnMucHVzaChtdXRhdGlvbik7XG4gICAgdGhpcy5ub3RpZnkobXV0YXRpb24pO1xuICB9O1xuXG4gIF9wcm90by5yZW1vdmUgPSBmdW5jdGlvbiByZW1vdmUobXV0YXRpb24pIHtcbiAgICB0aGlzLm11dGF0aW9ucyA9IHRoaXMubXV0YXRpb25zLmZpbHRlcihmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHggIT09IG11dGF0aW9uO1xuICAgIH0pO1xuICAgIG11dGF0aW9uLmNhbmNlbCgpO1xuICAgIHRoaXMubm90aWZ5KG11dGF0aW9uKTtcbiAgfTtcblxuICBfcHJvdG8uY2xlYXIgPSBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMyLm11dGF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChtdXRhdGlvbikge1xuICAgICAgICBfdGhpczIucmVtb3ZlKG11dGF0aW9uKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5nZXRBbGwgPSBmdW5jdGlvbiBnZXRBbGwoKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRpb25zO1xuICB9O1xuXG4gIF9wcm90by5maW5kID0gZnVuY3Rpb24gZmluZChmaWx0ZXJzKSB7XG4gICAgaWYgKHR5cGVvZiBmaWx0ZXJzLmV4YWN0ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgZmlsdGVycy5leGFjdCA9IHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMubXV0YXRpb25zLmZpbmQoZnVuY3Rpb24gKG11dGF0aW9uKSB7XG4gICAgICByZXR1cm4gbWF0Y2hNdXRhdGlvbihmaWx0ZXJzLCBtdXRhdGlvbik7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmZpbmRBbGwgPSBmdW5jdGlvbiBmaW5kQWxsKGZpbHRlcnMpIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGlvbnMuZmlsdGVyKGZ1bmN0aW9uIChtdXRhdGlvbikge1xuICAgICAgcmV0dXJuIG1hdGNoTXV0YXRpb24oZmlsdGVycywgbXV0YXRpb24pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5ub3RpZnkgPSBmdW5jdGlvbiBub3RpZnkobXV0YXRpb24pIHtcbiAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMzLmxpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uIChsaXN0ZW5lcikge1xuICAgICAgICBsaXN0ZW5lcihtdXRhdGlvbik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8ub25Gb2N1cyA9IGZ1bmN0aW9uIG9uRm9jdXMoKSB7XG4gICAgdGhpcy5yZXN1bWVQYXVzZWRNdXRhdGlvbnMoKTtcbiAgfTtcblxuICBfcHJvdG8ub25PbmxpbmUgPSBmdW5jdGlvbiBvbk9ubGluZSgpIHtcbiAgICB0aGlzLnJlc3VtZVBhdXNlZE11dGF0aW9ucygpO1xuICB9O1xuXG4gIF9wcm90by5yZXN1bWVQYXVzZWRNdXRhdGlvbnMgPSBmdW5jdGlvbiByZXN1bWVQYXVzZWRNdXRhdGlvbnMoKSB7XG4gICAgdmFyIHBhdXNlZE11dGF0aW9ucyA9IHRoaXMubXV0YXRpb25zLmZpbHRlcihmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHguc3RhdGUuaXNQYXVzZWQ7XG4gICAgfSk7XG4gICAgcmV0dXJuIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHBhdXNlZE11dGF0aW9ucy5yZWR1Y2UoZnVuY3Rpb24gKHByb21pc2UsIG11dGF0aW9uKSB7XG4gICAgICAgIHJldHVybiBwcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBtdXRhdGlvbi5jb250aW51ZSgpLmNhdGNoKG5vb3ApO1xuICAgICAgICB9KTtcbiAgICAgIH0sIFByb21pc2UucmVzb2x2ZSgpKTtcbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4gTXV0YXRpb25DYWNoZTtcbn0oU3Vic2NyaWJhYmxlKTsiLCAiaW1wb3J0IHsgaXNDYW5jZWxhYmxlIH0gZnJvbSAnLi9yZXRyeWVyJztcbmltcG9ydCB7IGdldEFib3J0Q29udHJvbGxlciB9IGZyb20gJy4vdXRpbHMnO1xuZXhwb3J0IGZ1bmN0aW9uIGluZmluaXRlUXVlcnlCZWhhdmlvcigpIHtcbiAgcmV0dXJuIHtcbiAgICBvbkZldGNoOiBmdW5jdGlvbiBvbkZldGNoKGNvbnRleHQpIHtcbiAgICAgIGNvbnRleHQuZmV0Y2hGbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9jb250ZXh0JGZldGNoT3B0aW9ucywgX2NvbnRleHQkZmV0Y2hPcHRpb25zMiwgX2NvbnRleHQkZmV0Y2hPcHRpb25zMywgX2NvbnRleHQkZmV0Y2hPcHRpb25zNCwgX2NvbnRleHQkc3RhdGUkZGF0YSwgX2NvbnRleHQkc3RhdGUkZGF0YTI7XG5cbiAgICAgICAgdmFyIHJlZmV0Y2hQYWdlID0gKF9jb250ZXh0JGZldGNoT3B0aW9ucyA9IGNvbnRleHQuZmV0Y2hPcHRpb25zKSA9PSBudWxsID8gdm9pZCAwIDogKF9jb250ZXh0JGZldGNoT3B0aW9uczIgPSBfY29udGV4dCRmZXRjaE9wdGlvbnMubWV0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9jb250ZXh0JGZldGNoT3B0aW9uczIucmVmZXRjaFBhZ2U7XG4gICAgICAgIHZhciBmZXRjaE1vcmUgPSAoX2NvbnRleHQkZmV0Y2hPcHRpb25zMyA9IGNvbnRleHQuZmV0Y2hPcHRpb25zKSA9PSBudWxsID8gdm9pZCAwIDogKF9jb250ZXh0JGZldGNoT3B0aW9uczQgPSBfY29udGV4dCRmZXRjaE9wdGlvbnMzLm1ldGEpID09IG51bGwgPyB2b2lkIDAgOiBfY29udGV4dCRmZXRjaE9wdGlvbnM0LmZldGNoTW9yZTtcbiAgICAgICAgdmFyIHBhZ2VQYXJhbSA9IGZldGNoTW9yZSA9PSBudWxsID8gdm9pZCAwIDogZmV0Y2hNb3JlLnBhZ2VQYXJhbTtcbiAgICAgICAgdmFyIGlzRmV0Y2hpbmdOZXh0UGFnZSA9IChmZXRjaE1vcmUgPT0gbnVsbCA/IHZvaWQgMCA6IGZldGNoTW9yZS5kaXJlY3Rpb24pID09PSAnZm9yd2FyZCc7XG4gICAgICAgIHZhciBpc0ZldGNoaW5nUHJldmlvdXNQYWdlID0gKGZldGNoTW9yZSA9PSBudWxsID8gdm9pZCAwIDogZmV0Y2hNb3JlLmRpcmVjdGlvbikgPT09ICdiYWNrd2FyZCc7XG4gICAgICAgIHZhciBvbGRQYWdlcyA9ICgoX2NvbnRleHQkc3RhdGUkZGF0YSA9IGNvbnRleHQuc3RhdGUuZGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9jb250ZXh0JHN0YXRlJGRhdGEucGFnZXMpIHx8IFtdO1xuICAgICAgICB2YXIgb2xkUGFnZVBhcmFtcyA9ICgoX2NvbnRleHQkc3RhdGUkZGF0YTIgPSBjb250ZXh0LnN0YXRlLmRhdGEpID09IG51bGwgPyB2b2lkIDAgOiBfY29udGV4dCRzdGF0ZSRkYXRhMi5wYWdlUGFyYW1zKSB8fCBbXTtcbiAgICAgICAgdmFyIGFib3J0Q29udHJvbGxlciA9IGdldEFib3J0Q29udHJvbGxlcigpO1xuICAgICAgICB2YXIgYWJvcnRTaWduYWwgPSBhYm9ydENvbnRyb2xsZXIgPT0gbnVsbCA/IHZvaWQgMCA6IGFib3J0Q29udHJvbGxlci5zaWduYWw7XG4gICAgICAgIHZhciBuZXdQYWdlUGFyYW1zID0gb2xkUGFnZVBhcmFtcztcbiAgICAgICAgdmFyIGNhbmNlbGxlZCA9IGZhbHNlOyAvLyBHZXQgcXVlcnkgZnVuY3Rpb25cblxuICAgICAgICB2YXIgcXVlcnlGbiA9IGNvbnRleHQub3B0aW9ucy5xdWVyeUZuIHx8IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoJ01pc3NpbmcgcXVlcnlGbicpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHZhciBidWlsZE5ld1BhZ2VzID0gZnVuY3Rpb24gYnVpbGROZXdQYWdlcyhwYWdlcywgcGFyYW0sIHBhZ2UsIHByZXZpb3VzKSB7XG4gICAgICAgICAgbmV3UGFnZVBhcmFtcyA9IHByZXZpb3VzID8gW3BhcmFtXS5jb25jYXQobmV3UGFnZVBhcmFtcykgOiBbXS5jb25jYXQobmV3UGFnZVBhcmFtcywgW3BhcmFtXSk7XG4gICAgICAgICAgcmV0dXJuIHByZXZpb3VzID8gW3BhZ2VdLmNvbmNhdChwYWdlcykgOiBbXS5jb25jYXQocGFnZXMsIFtwYWdlXSk7XG4gICAgICAgIH07IC8vIENyZWF0ZSBmdW5jdGlvbiB0byBmZXRjaCBhIHBhZ2VcblxuXG4gICAgICAgIHZhciBmZXRjaFBhZ2UgPSBmdW5jdGlvbiBmZXRjaFBhZ2UocGFnZXMsIG1hbnVhbCwgcGFyYW0sIHByZXZpb3VzKSB7XG4gICAgICAgICAgaWYgKGNhbmNlbGxlZCkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCdDYW5jZWxsZWQnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodHlwZW9mIHBhcmFtID09PSAndW5kZWZpbmVkJyAmJiAhbWFudWFsICYmIHBhZ2VzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShwYWdlcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIHF1ZXJ5Rm5Db250ZXh0ID0ge1xuICAgICAgICAgICAgcXVlcnlLZXk6IGNvbnRleHQucXVlcnlLZXksXG4gICAgICAgICAgICBzaWduYWw6IGFib3J0U2lnbmFsLFxuICAgICAgICAgICAgcGFnZVBhcmFtOiBwYXJhbSxcbiAgICAgICAgICAgIG1ldGE6IGNvbnRleHQubWV0YVxuICAgICAgICAgIH07XG4gICAgICAgICAgdmFyIHF1ZXJ5Rm5SZXN1bHQgPSBxdWVyeUZuKHF1ZXJ5Rm5Db250ZXh0KTtcbiAgICAgICAgICB2YXIgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShxdWVyeUZuUmVzdWx0KS50aGVuKGZ1bmN0aW9uIChwYWdlKSB7XG4gICAgICAgICAgICByZXR1cm4gYnVpbGROZXdQYWdlcyhwYWdlcywgcGFyYW0sIHBhZ2UsIHByZXZpb3VzKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlmIChpc0NhbmNlbGFibGUocXVlcnlGblJlc3VsdCkpIHtcbiAgICAgICAgICAgIHZhciBwcm9taXNlQXNBbnkgPSBwcm9taXNlO1xuICAgICAgICAgICAgcHJvbWlzZUFzQW55LmNhbmNlbCA9IHF1ZXJ5Rm5SZXN1bHQuY2FuY2VsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBwcm9taXNlO1xuICAgICAgICB9O1xuXG4gICAgICAgIHZhciBwcm9taXNlOyAvLyBGZXRjaCBmaXJzdCBwYWdlP1xuXG4gICAgICAgIGlmICghb2xkUGFnZXMubGVuZ3RoKSB7XG4gICAgICAgICAgcHJvbWlzZSA9IGZldGNoUGFnZShbXSk7XG4gICAgICAgIH0gLy8gRmV0Y2ggbmV4dCBwYWdlP1xuICAgICAgICBlbHNlIGlmIChpc0ZldGNoaW5nTmV4dFBhZ2UpIHtcbiAgICAgICAgICAgIHZhciBtYW51YWwgPSB0eXBlb2YgcGFnZVBhcmFtICE9PSAndW5kZWZpbmVkJztcbiAgICAgICAgICAgIHZhciBwYXJhbSA9IG1hbnVhbCA/IHBhZ2VQYXJhbSA6IGdldE5leHRQYWdlUGFyYW0oY29udGV4dC5vcHRpb25zLCBvbGRQYWdlcyk7XG4gICAgICAgICAgICBwcm9taXNlID0gZmV0Y2hQYWdlKG9sZFBhZ2VzLCBtYW51YWwsIHBhcmFtKTtcbiAgICAgICAgICB9IC8vIEZldGNoIHByZXZpb3VzIHBhZ2U/XG4gICAgICAgICAgZWxzZSBpZiAoaXNGZXRjaGluZ1ByZXZpb3VzUGFnZSkge1xuICAgICAgICAgICAgICB2YXIgX21hbnVhbCA9IHR5cGVvZiBwYWdlUGFyYW0gIT09ICd1bmRlZmluZWQnO1xuXG4gICAgICAgICAgICAgIHZhciBfcGFyYW0gPSBfbWFudWFsID8gcGFnZVBhcmFtIDogZ2V0UHJldmlvdXNQYWdlUGFyYW0oY29udGV4dC5vcHRpb25zLCBvbGRQYWdlcyk7XG5cbiAgICAgICAgICAgICAgcHJvbWlzZSA9IGZldGNoUGFnZShvbGRQYWdlcywgX21hbnVhbCwgX3BhcmFtLCB0cnVlKTtcbiAgICAgICAgICAgIH0gLy8gUmVmZXRjaCBwYWdlc1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgIG5ld1BhZ2VQYXJhbXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgIHZhciBtYW51YWwgPSB0eXBlb2YgY29udGV4dC5vcHRpb25zLmdldE5leHRQYWdlUGFyYW0gPT09ICd1bmRlZmluZWQnO1xuICAgICAgICAgICAgICAgICAgdmFyIHNob3VsZEZldGNoRmlyc3RQYWdlID0gcmVmZXRjaFBhZ2UgJiYgb2xkUGFnZXNbMF0gPyByZWZldGNoUGFnZShvbGRQYWdlc1swXSwgMCwgb2xkUGFnZXMpIDogdHJ1ZTsgLy8gRmV0Y2ggZmlyc3QgcGFnZVxuXG4gICAgICAgICAgICAgICAgICBwcm9taXNlID0gc2hvdWxkRmV0Y2hGaXJzdFBhZ2UgPyBmZXRjaFBhZ2UoW10sIG1hbnVhbCwgb2xkUGFnZVBhcmFtc1swXSkgOiBQcm9taXNlLnJlc29sdmUoYnVpbGROZXdQYWdlcyhbXSwgb2xkUGFnZVBhcmFtc1swXSwgb2xkUGFnZXNbMF0pKTsgLy8gRmV0Y2ggcmVtYWluaW5nIHBhZ2VzXG5cbiAgICAgICAgICAgICAgICAgIHZhciBfbG9vcCA9IGZ1bmN0aW9uIF9sb29wKGkpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihmdW5jdGlvbiAocGFnZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgc2hvdWxkRmV0Y2hOZXh0UGFnZSA9IHJlZmV0Y2hQYWdlICYmIG9sZFBhZ2VzW2ldID8gcmVmZXRjaFBhZ2Uob2xkUGFnZXNbaV0sIGksIG9sZFBhZ2VzKSA6IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkRmV0Y2hOZXh0UGFnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9wYXJhbTIgPSBtYW51YWwgPyBvbGRQYWdlUGFyYW1zW2ldIDogZ2V0TmV4dFBhZ2VQYXJhbShjb250ZXh0Lm9wdGlvbnMsIHBhZ2VzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZldGNoUGFnZShwYWdlcywgbWFudWFsLCBfcGFyYW0yKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGJ1aWxkTmV3UGFnZXMocGFnZXMsIG9sZFBhZ2VQYXJhbXNbaV0sIG9sZFBhZ2VzW2ldKSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBvbGRQYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBfbG9vcChpKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgdmFyIGZpbmFsUHJvbWlzZSA9IHByb21pc2UudGhlbihmdW5jdGlvbiAocGFnZXMpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcGFnZXM6IHBhZ2VzLFxuICAgICAgICAgICAgcGFnZVBhcmFtczogbmV3UGFnZVBhcmFtc1xuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgZmluYWxQcm9taXNlQXNBbnkgPSBmaW5hbFByb21pc2U7XG5cbiAgICAgICAgZmluYWxQcm9taXNlQXNBbnkuY2FuY2VsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNhbmNlbGxlZCA9IHRydWU7XG4gICAgICAgICAgYWJvcnRDb250cm9sbGVyID09IG51bGwgPyB2b2lkIDAgOiBhYm9ydENvbnRyb2xsZXIuYWJvcnQoKTtcblxuICAgICAgICAgIGlmIChpc0NhbmNlbGFibGUocHJvbWlzZSkpIHtcbiAgICAgICAgICAgIHByb21pc2UuY2FuY2VsKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBmaW5hbFByb21pc2U7XG4gICAgICB9O1xuICAgIH1cbiAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXROZXh0UGFnZVBhcmFtKG9wdGlvbnMsIHBhZ2VzKSB7XG4gIHJldHVybiBvcHRpb25zLmdldE5leHRQYWdlUGFyYW0gPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMuZ2V0TmV4dFBhZ2VQYXJhbShwYWdlc1twYWdlcy5sZW5ndGggLSAxXSwgcGFnZXMpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFByZXZpb3VzUGFnZVBhcmFtKG9wdGlvbnMsIHBhZ2VzKSB7XG4gIHJldHVybiBvcHRpb25zLmdldFByZXZpb3VzUGFnZVBhcmFtID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLmdldFByZXZpb3VzUGFnZVBhcmFtKHBhZ2VzWzBdLCBwYWdlcyk7XG59XG4vKipcbiAqIENoZWNrcyBpZiB0aGVyZSBpcyBhIG5leHQgcGFnZS5cbiAqIFJldHVybnMgYHVuZGVmaW5lZGAgaWYgaXQgY2Fubm90IGJlIGRldGVybWluZWQuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc05leHRQYWdlKG9wdGlvbnMsIHBhZ2VzKSB7XG4gIGlmIChvcHRpb25zLmdldE5leHRQYWdlUGFyYW0gJiYgQXJyYXkuaXNBcnJheShwYWdlcykpIHtcbiAgICB2YXIgbmV4dFBhZ2VQYXJhbSA9IGdldE5leHRQYWdlUGFyYW0ob3B0aW9ucywgcGFnZXMpO1xuICAgIHJldHVybiB0eXBlb2YgbmV4dFBhZ2VQYXJhbSAhPT0gJ3VuZGVmaW5lZCcgJiYgbmV4dFBhZ2VQYXJhbSAhPT0gbnVsbCAmJiBuZXh0UGFnZVBhcmFtICE9PSBmYWxzZTtcbiAgfVxufVxuLyoqXG4gKiBDaGVja3MgaWYgdGhlcmUgaXMgYSBwcmV2aW91cyBwYWdlLlxuICogUmV0dXJucyBgdW5kZWZpbmVkYCBpZiBpdCBjYW5ub3QgYmUgZGV0ZXJtaW5lZC5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaGFzUHJldmlvdXNQYWdlKG9wdGlvbnMsIHBhZ2VzKSB7XG4gIGlmIChvcHRpb25zLmdldFByZXZpb3VzUGFnZVBhcmFtICYmIEFycmF5LmlzQXJyYXkocGFnZXMpKSB7XG4gICAgdmFyIHByZXZpb3VzUGFnZVBhcmFtID0gZ2V0UHJldmlvdXNQYWdlUGFyYW0ob3B0aW9ucywgcGFnZXMpO1xuICAgIHJldHVybiB0eXBlb2YgcHJldmlvdXNQYWdlUGFyYW0gIT09ICd1bmRlZmluZWQnICYmIHByZXZpb3VzUGFnZVBhcmFtICE9PSBudWxsICYmIHByZXZpb3VzUGFnZVBhcmFtICE9PSBmYWxzZTtcbiAgfVxufSIsICJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCB7IGhhc2hRdWVyeUtleSwgbm9vcCwgcGFyc2VGaWx0ZXJBcmdzLCBwYXJzZVF1ZXJ5QXJncywgcGFydGlhbE1hdGNoS2V5LCBoYXNoUXVlcnlLZXlCeU9wdGlvbnMgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IFF1ZXJ5Q2FjaGUgfSBmcm9tICcuL3F1ZXJ5Q2FjaGUnO1xuaW1wb3J0IHsgTXV0YXRpb25DYWNoZSB9IGZyb20gJy4vbXV0YXRpb25DYWNoZSc7XG5pbXBvcnQgeyBmb2N1c01hbmFnZXIgfSBmcm9tICcuL2ZvY3VzTWFuYWdlcic7XG5pbXBvcnQgeyBvbmxpbmVNYW5hZ2VyIH0gZnJvbSAnLi9vbmxpbmVNYW5hZ2VyJztcbmltcG9ydCB7IG5vdGlmeU1hbmFnZXIgfSBmcm9tICcuL25vdGlmeU1hbmFnZXInO1xuaW1wb3J0IHsgaW5maW5pdGVRdWVyeUJlaGF2aW9yIH0gZnJvbSAnLi9pbmZpbml0ZVF1ZXJ5QmVoYXZpb3InO1xuLy8gQ0xBU1NcbmV4cG9ydCB2YXIgUXVlcnlDbGllbnQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBRdWVyeUNsaWVudChjb25maWcpIHtcbiAgICBpZiAoY29uZmlnID09PSB2b2lkIDApIHtcbiAgICAgIGNvbmZpZyA9IHt9O1xuICAgIH1cblxuICAgIHRoaXMucXVlcnlDYWNoZSA9IGNvbmZpZy5xdWVyeUNhY2hlIHx8IG5ldyBRdWVyeUNhY2hlKCk7XG4gICAgdGhpcy5tdXRhdGlvbkNhY2hlID0gY29uZmlnLm11dGF0aW9uQ2FjaGUgfHwgbmV3IE11dGF0aW9uQ2FjaGUoKTtcbiAgICB0aGlzLmRlZmF1bHRPcHRpb25zID0gY29uZmlnLmRlZmF1bHRPcHRpb25zIHx8IHt9O1xuICAgIHRoaXMucXVlcnlEZWZhdWx0cyA9IFtdO1xuICAgIHRoaXMubXV0YXRpb25EZWZhdWx0cyA9IFtdO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFF1ZXJ5Q2xpZW50LnByb3RvdHlwZTtcblxuICBfcHJvdG8ubW91bnQgPSBmdW5jdGlvbiBtb3VudCgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdGhpcy51bnN1YnNjcmliZUZvY3VzID0gZm9jdXNNYW5hZ2VyLnN1YnNjcmliZShmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoZm9jdXNNYW5hZ2VyLmlzRm9jdXNlZCgpICYmIG9ubGluZU1hbmFnZXIuaXNPbmxpbmUoKSkge1xuICAgICAgICBfdGhpcy5tdXRhdGlvbkNhY2hlLm9uRm9jdXMoKTtcblxuICAgICAgICBfdGhpcy5xdWVyeUNhY2hlLm9uRm9jdXMoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnVuc3Vic2NyaWJlT25saW5lID0gb25saW5lTWFuYWdlci5zdWJzY3JpYmUoZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKGZvY3VzTWFuYWdlci5pc0ZvY3VzZWQoKSAmJiBvbmxpbmVNYW5hZ2VyLmlzT25saW5lKCkpIHtcbiAgICAgICAgX3RoaXMubXV0YXRpb25DYWNoZS5vbk9ubGluZSgpO1xuXG4gICAgICAgIF90aGlzLnF1ZXJ5Q2FjaGUub25PbmxpbmUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8udW5tb3VudCA9IGZ1bmN0aW9uIHVubW91bnQoKSB7XG4gICAgdmFyIF90aGlzJHVuc3Vic2NyaWJlRm9jdSwgX3RoaXMkdW5zdWJzY3JpYmVPbmxpO1xuXG4gICAgKF90aGlzJHVuc3Vic2NyaWJlRm9jdSA9IHRoaXMudW5zdWJzY3JpYmVGb2N1cykgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJHVuc3Vic2NyaWJlRm9jdS5jYWxsKHRoaXMpO1xuICAgIChfdGhpcyR1bnN1YnNjcmliZU9ubGkgPSB0aGlzLnVuc3Vic2NyaWJlT25saW5lKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkdW5zdWJzY3JpYmVPbmxpLmNhbGwodGhpcyk7XG4gIH07XG5cbiAgX3Byb3RvLmlzRmV0Y2hpbmcgPSBmdW5jdGlvbiBpc0ZldGNoaW5nKGFyZzEsIGFyZzIpIHtcbiAgICB2YXIgX3BhcnNlRmlsdGVyQXJncyA9IHBhcnNlRmlsdGVyQXJncyhhcmcxLCBhcmcyKSxcbiAgICAgICAgZmlsdGVycyA9IF9wYXJzZUZpbHRlckFyZ3NbMF07XG5cbiAgICBmaWx0ZXJzLmZldGNoaW5nID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcy5xdWVyeUNhY2hlLmZpbmRBbGwoZmlsdGVycykubGVuZ3RoO1xuICB9O1xuXG4gIF9wcm90by5pc011dGF0aW5nID0gZnVuY3Rpb24gaXNNdXRhdGluZyhmaWx0ZXJzKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRpb25DYWNoZS5maW5kQWxsKF9leHRlbmRzKHt9LCBmaWx0ZXJzLCB7XG4gICAgICBmZXRjaGluZzogdHJ1ZVxuICAgIH0pKS5sZW5ndGg7XG4gIH07XG5cbiAgX3Byb3RvLmdldFF1ZXJ5RGF0YSA9IGZ1bmN0aW9uIGdldFF1ZXJ5RGF0YShxdWVyeUtleSwgZmlsdGVycykge1xuICAgIHZhciBfdGhpcyRxdWVyeUNhY2hlJGZpbmQ7XG5cbiAgICByZXR1cm4gKF90aGlzJHF1ZXJ5Q2FjaGUkZmluZCA9IHRoaXMucXVlcnlDYWNoZS5maW5kKHF1ZXJ5S2V5LCBmaWx0ZXJzKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJHF1ZXJ5Q2FjaGUkZmluZC5zdGF0ZS5kYXRhO1xuICB9O1xuXG4gIF9wcm90by5nZXRRdWVyaWVzRGF0YSA9IGZ1bmN0aW9uIGdldFF1ZXJpZXNEYXRhKHF1ZXJ5S2V5T3JGaWx0ZXJzKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UXVlcnlDYWNoZSgpLmZpbmRBbGwocXVlcnlLZXlPckZpbHRlcnMpLm1hcChmdW5jdGlvbiAoX3JlZikge1xuICAgICAgdmFyIHF1ZXJ5S2V5ID0gX3JlZi5xdWVyeUtleSxcbiAgICAgICAgICBzdGF0ZSA9IF9yZWYuc3RhdGU7XG4gICAgICB2YXIgZGF0YSA9IHN0YXRlLmRhdGE7XG4gICAgICByZXR1cm4gW3F1ZXJ5S2V5LCBkYXRhXTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uc2V0UXVlcnlEYXRhID0gZnVuY3Rpb24gc2V0UXVlcnlEYXRhKHF1ZXJ5S2V5LCB1cGRhdGVyLCBvcHRpb25zKSB7XG4gICAgdmFyIHBhcnNlZE9wdGlvbnMgPSBwYXJzZVF1ZXJ5QXJncyhxdWVyeUtleSk7XG4gICAgdmFyIGRlZmF1bHRlZE9wdGlvbnMgPSB0aGlzLmRlZmF1bHRRdWVyeU9wdGlvbnMocGFyc2VkT3B0aW9ucyk7XG4gICAgcmV0dXJuIHRoaXMucXVlcnlDYWNoZS5idWlsZCh0aGlzLCBkZWZhdWx0ZWRPcHRpb25zKS5zZXREYXRhKHVwZGF0ZXIsIG9wdGlvbnMpO1xuICB9O1xuXG4gIF9wcm90by5zZXRRdWVyaWVzRGF0YSA9IGZ1bmN0aW9uIHNldFF1ZXJpZXNEYXRhKHF1ZXJ5S2V5T3JGaWx0ZXJzLCB1cGRhdGVyLCBvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICByZXR1cm4gbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3RoaXMyLmdldFF1ZXJ5Q2FjaGUoKS5maW5kQWxsKHF1ZXJ5S2V5T3JGaWx0ZXJzKS5tYXAoZnVuY3Rpb24gKF9yZWYyKSB7XG4gICAgICAgIHZhciBxdWVyeUtleSA9IF9yZWYyLnF1ZXJ5S2V5O1xuICAgICAgICByZXR1cm4gW3F1ZXJ5S2V5LCBfdGhpczIuc2V0UXVlcnlEYXRhKHF1ZXJ5S2V5LCB1cGRhdGVyLCBvcHRpb25zKV07XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0UXVlcnlTdGF0ZSA9IGZ1bmN0aW9uIGdldFF1ZXJ5U3RhdGUocXVlcnlLZXksIGZpbHRlcnMpIHtcbiAgICB2YXIgX3RoaXMkcXVlcnlDYWNoZSRmaW5kMjtcblxuICAgIHJldHVybiAoX3RoaXMkcXVlcnlDYWNoZSRmaW5kMiA9IHRoaXMucXVlcnlDYWNoZS5maW5kKHF1ZXJ5S2V5LCBmaWx0ZXJzKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJHF1ZXJ5Q2FjaGUkZmluZDIuc3RhdGU7XG4gIH07XG5cbiAgX3Byb3RvLnJlbW92ZVF1ZXJpZXMgPSBmdW5jdGlvbiByZW1vdmVRdWVyaWVzKGFyZzEsIGFyZzIpIHtcbiAgICB2YXIgX3BhcnNlRmlsdGVyQXJnczIgPSBwYXJzZUZpbHRlckFyZ3MoYXJnMSwgYXJnMiksXG4gICAgICAgIGZpbHRlcnMgPSBfcGFyc2VGaWx0ZXJBcmdzMlswXTtcblxuICAgIHZhciBxdWVyeUNhY2hlID0gdGhpcy5xdWVyeUNhY2hlO1xuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgcXVlcnlDYWNoZS5maW5kQWxsKGZpbHRlcnMpLmZvckVhY2goZnVuY3Rpb24gKHF1ZXJ5KSB7XG4gICAgICAgIHF1ZXJ5Q2FjaGUucmVtb3ZlKHF1ZXJ5KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5yZXNldFF1ZXJpZXMgPSBmdW5jdGlvbiByZXNldFF1ZXJpZXMoYXJnMSwgYXJnMiwgYXJnMykge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgdmFyIF9wYXJzZUZpbHRlckFyZ3MzID0gcGFyc2VGaWx0ZXJBcmdzKGFyZzEsIGFyZzIsIGFyZzMpLFxuICAgICAgICBmaWx0ZXJzID0gX3BhcnNlRmlsdGVyQXJnczNbMF0sXG4gICAgICAgIG9wdGlvbnMgPSBfcGFyc2VGaWx0ZXJBcmdzM1sxXTtcblxuICAgIHZhciBxdWVyeUNhY2hlID0gdGhpcy5xdWVyeUNhY2hlO1xuXG4gICAgdmFyIHJlZmV0Y2hGaWx0ZXJzID0gX2V4dGVuZHMoe30sIGZpbHRlcnMsIHtcbiAgICAgIGFjdGl2ZTogdHJ1ZVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgcXVlcnlDYWNoZS5maW5kQWxsKGZpbHRlcnMpLmZvckVhY2goZnVuY3Rpb24gKHF1ZXJ5KSB7XG4gICAgICAgIHF1ZXJ5LnJlc2V0KCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBfdGhpczMucmVmZXRjaFF1ZXJpZXMocmVmZXRjaEZpbHRlcnMsIG9wdGlvbnMpO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5jYW5jZWxRdWVyaWVzID0gZnVuY3Rpb24gY2FuY2VsUXVlcmllcyhhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICB2YXIgX3BhcnNlRmlsdGVyQXJnczQgPSBwYXJzZUZpbHRlckFyZ3MoYXJnMSwgYXJnMiwgYXJnMyksXG4gICAgICAgIGZpbHRlcnMgPSBfcGFyc2VGaWx0ZXJBcmdzNFswXSxcbiAgICAgICAgX3BhcnNlRmlsdGVyQXJnczQkID0gX3BhcnNlRmlsdGVyQXJnczRbMV0sXG4gICAgICAgIGNhbmNlbE9wdGlvbnMgPSBfcGFyc2VGaWx0ZXJBcmdzNCQgPT09IHZvaWQgMCA/IHt9IDogX3BhcnNlRmlsdGVyQXJnczQkO1xuXG4gICAgaWYgKHR5cGVvZiBjYW5jZWxPcHRpb25zLnJldmVydCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNhbmNlbE9wdGlvbnMucmV2ZXJ0ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgcHJvbWlzZXMgPSBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpczQucXVlcnlDYWNoZS5maW5kQWxsKGZpbHRlcnMpLm1hcChmdW5jdGlvbiAocXVlcnkpIHtcbiAgICAgICAgcmV0dXJuIHF1ZXJ5LmNhbmNlbChjYW5jZWxPcHRpb25zKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbihub29wKS5jYXRjaChub29wKTtcbiAgfTtcblxuICBfcHJvdG8uaW52YWxpZGF0ZVF1ZXJpZXMgPSBmdW5jdGlvbiBpbnZhbGlkYXRlUXVlcmllcyhhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgdmFyIF9yZWYzLFxuICAgICAgICBfZmlsdGVycyRyZWZldGNoQWN0aXYsXG4gICAgICAgIF9maWx0ZXJzJHJlZmV0Y2hJbmFjdCxcbiAgICAgICAgX3RoaXM1ID0gdGhpcztcblxuICAgIHZhciBfcGFyc2VGaWx0ZXJBcmdzNSA9IHBhcnNlRmlsdGVyQXJncyhhcmcxLCBhcmcyLCBhcmczKSxcbiAgICAgICAgZmlsdGVycyA9IF9wYXJzZUZpbHRlckFyZ3M1WzBdLFxuICAgICAgICBvcHRpb25zID0gX3BhcnNlRmlsdGVyQXJnczVbMV07XG5cbiAgICB2YXIgcmVmZXRjaEZpbHRlcnMgPSBfZXh0ZW5kcyh7fSwgZmlsdGVycywge1xuICAgICAgLy8gaWYgZmlsdGVycy5yZWZldGNoQWN0aXZlIGlzIG5vdCBwcm92aWRlZCBhbmQgZmlsdGVycy5hY3RpdmUgaXMgZXhwbGljaXRseSBmYWxzZSxcbiAgICAgIC8vIGUuZy4gaW52YWxpZGF0ZVF1ZXJpZXMoeyBhY3RpdmU6IGZhbHNlIH0pLCB3ZSBkb24ndCB3YW50IHRvIHJlZmV0Y2ggYWN0aXZlIHF1ZXJpZXNcbiAgICAgIGFjdGl2ZTogKF9yZWYzID0gKF9maWx0ZXJzJHJlZmV0Y2hBY3RpdiA9IGZpbHRlcnMucmVmZXRjaEFjdGl2ZSkgIT0gbnVsbCA/IF9maWx0ZXJzJHJlZmV0Y2hBY3RpdiA6IGZpbHRlcnMuYWN0aXZlKSAhPSBudWxsID8gX3JlZjMgOiB0cnVlLFxuICAgICAgaW5hY3RpdmU6IChfZmlsdGVycyRyZWZldGNoSW5hY3QgPSBmaWx0ZXJzLnJlZmV0Y2hJbmFjdGl2ZSkgIT0gbnVsbCA/IF9maWx0ZXJzJHJlZmV0Y2hJbmFjdCA6IGZhbHNlXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczUucXVlcnlDYWNoZS5maW5kQWxsKGZpbHRlcnMpLmZvckVhY2goZnVuY3Rpb24gKHF1ZXJ5KSB7XG4gICAgICAgIHF1ZXJ5LmludmFsaWRhdGUoKTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gX3RoaXM1LnJlZmV0Y2hRdWVyaWVzKHJlZmV0Y2hGaWx0ZXJzLCBvcHRpb25zKTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8ucmVmZXRjaFF1ZXJpZXMgPSBmdW5jdGlvbiByZWZldGNoUXVlcmllcyhhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgdmFyIF90aGlzNiA9IHRoaXM7XG5cbiAgICB2YXIgX3BhcnNlRmlsdGVyQXJnczYgPSBwYXJzZUZpbHRlckFyZ3MoYXJnMSwgYXJnMiwgYXJnMyksXG4gICAgICAgIGZpbHRlcnMgPSBfcGFyc2VGaWx0ZXJBcmdzNlswXSxcbiAgICAgICAgb3B0aW9ucyA9IF9wYXJzZUZpbHRlckFyZ3M2WzFdO1xuXG4gICAgdmFyIHByb21pc2VzID0gbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3RoaXM2LnF1ZXJ5Q2FjaGUuZmluZEFsbChmaWx0ZXJzKS5tYXAoZnVuY3Rpb24gKHF1ZXJ5KSB7XG4gICAgICAgIHJldHVybiBxdWVyeS5mZXRjaCh1bmRlZmluZWQsIF9leHRlbmRzKHt9LCBvcHRpb25zLCB7XG4gICAgICAgICAgbWV0YToge1xuICAgICAgICAgICAgcmVmZXRjaFBhZ2U6IGZpbHRlcnMgPT0gbnVsbCA/IHZvaWQgMCA6IGZpbHRlcnMucmVmZXRjaFBhZ2VcbiAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHZhciBwcm9taXNlID0gUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4obm9vcCk7XG5cbiAgICBpZiAoIShvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLnRocm93T25FcnJvcikpIHtcbiAgICAgIHByb21pc2UgPSBwcm9taXNlLmNhdGNoKG5vb3ApO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9taXNlO1xuICB9O1xuXG4gIF9wcm90by5mZXRjaFF1ZXJ5ID0gZnVuY3Rpb24gZmV0Y2hRdWVyeShhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgdmFyIHBhcnNlZE9wdGlvbnMgPSBwYXJzZVF1ZXJ5QXJncyhhcmcxLCBhcmcyLCBhcmczKTtcbiAgICB2YXIgZGVmYXVsdGVkT3B0aW9ucyA9IHRoaXMuZGVmYXVsdFF1ZXJ5T3B0aW9ucyhwYXJzZWRPcHRpb25zKTsgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Rhbm5lcmxpbnNsZXkvcmVhY3QtcXVlcnkvaXNzdWVzLzY1MlxuXG4gICAgaWYgKHR5cGVvZiBkZWZhdWx0ZWRPcHRpb25zLnJldHJ5ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgZGVmYXVsdGVkT3B0aW9ucy5yZXRyeSA9IGZhbHNlO1xuICAgIH1cblxuICAgIHZhciBxdWVyeSA9IHRoaXMucXVlcnlDYWNoZS5idWlsZCh0aGlzLCBkZWZhdWx0ZWRPcHRpb25zKTtcbiAgICByZXR1cm4gcXVlcnkuaXNTdGFsZUJ5VGltZShkZWZhdWx0ZWRPcHRpb25zLnN0YWxlVGltZSkgPyBxdWVyeS5mZXRjaChkZWZhdWx0ZWRPcHRpb25zKSA6IFByb21pc2UucmVzb2x2ZShxdWVyeS5zdGF0ZS5kYXRhKTtcbiAgfTtcblxuICBfcHJvdG8ucHJlZmV0Y2hRdWVyeSA9IGZ1bmN0aW9uIHByZWZldGNoUXVlcnkoYXJnMSwgYXJnMiwgYXJnMykge1xuICAgIHJldHVybiB0aGlzLmZldGNoUXVlcnkoYXJnMSwgYXJnMiwgYXJnMykudGhlbihub29wKS5jYXRjaChub29wKTtcbiAgfTtcblxuICBfcHJvdG8uZmV0Y2hJbmZpbml0ZVF1ZXJ5ID0gZnVuY3Rpb24gZmV0Y2hJbmZpbml0ZVF1ZXJ5KGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgICB2YXIgcGFyc2VkT3B0aW9ucyA9IHBhcnNlUXVlcnlBcmdzKGFyZzEsIGFyZzIsIGFyZzMpO1xuICAgIHBhcnNlZE9wdGlvbnMuYmVoYXZpb3IgPSBpbmZpbml0ZVF1ZXJ5QmVoYXZpb3IoKTtcbiAgICByZXR1cm4gdGhpcy5mZXRjaFF1ZXJ5KHBhcnNlZE9wdGlvbnMpO1xuICB9O1xuXG4gIF9wcm90by5wcmVmZXRjaEluZmluaXRlUXVlcnkgPSBmdW5jdGlvbiBwcmVmZXRjaEluZmluaXRlUXVlcnkoYXJnMSwgYXJnMiwgYXJnMykge1xuICAgIHJldHVybiB0aGlzLmZldGNoSW5maW5pdGVRdWVyeShhcmcxLCBhcmcyLCBhcmczKS50aGVuKG5vb3ApLmNhdGNoKG5vb3ApO1xuICB9O1xuXG4gIF9wcm90by5jYW5jZWxNdXRhdGlvbnMgPSBmdW5jdGlvbiBjYW5jZWxNdXRhdGlvbnMoKSB7XG4gICAgdmFyIF90aGlzNyA9IHRoaXM7XG5cbiAgICB2YXIgcHJvbWlzZXMgPSBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpczcubXV0YXRpb25DYWNoZS5nZXRBbGwoKS5tYXAoZnVuY3Rpb24gKG11dGF0aW9uKSB7XG4gICAgICAgIHJldHVybiBtdXRhdGlvbi5jYW5jZWwoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbihub29wKS5jYXRjaChub29wKTtcbiAgfTtcblxuICBfcHJvdG8ucmVzdW1lUGF1c2VkTXV0YXRpb25zID0gZnVuY3Rpb24gcmVzdW1lUGF1c2VkTXV0YXRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmdldE11dGF0aW9uQ2FjaGUoKS5yZXN1bWVQYXVzZWRNdXRhdGlvbnMoKTtcbiAgfTtcblxuICBfcHJvdG8uZXhlY3V0ZU11dGF0aW9uID0gZnVuY3Rpb24gZXhlY3V0ZU11dGF0aW9uKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGlvbkNhY2hlLmJ1aWxkKHRoaXMsIG9wdGlvbnMpLmV4ZWN1dGUoKTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0UXVlcnlDYWNoZSA9IGZ1bmN0aW9uIGdldFF1ZXJ5Q2FjaGUoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcnlDYWNoZTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0TXV0YXRpb25DYWNoZSA9IGZ1bmN0aW9uIGdldE11dGF0aW9uQ2FjaGUoKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRpb25DYWNoZTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0RGVmYXVsdE9wdGlvbnMgPSBmdW5jdGlvbiBnZXREZWZhdWx0T3B0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5kZWZhdWx0T3B0aW9ucztcbiAgfTtcblxuICBfcHJvdG8uc2V0RGVmYXVsdE9wdGlvbnMgPSBmdW5jdGlvbiBzZXREZWZhdWx0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgdGhpcy5kZWZhdWx0T3B0aW9ucyA9IG9wdGlvbnM7XG4gIH07XG5cbiAgX3Byb3RvLnNldFF1ZXJ5RGVmYXVsdHMgPSBmdW5jdGlvbiBzZXRRdWVyeURlZmF1bHRzKHF1ZXJ5S2V5LCBvcHRpb25zKSB7XG4gICAgdmFyIHJlc3VsdCA9IHRoaXMucXVlcnlEZWZhdWx0cy5maW5kKGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4gaGFzaFF1ZXJ5S2V5KHF1ZXJ5S2V5KSA9PT0gaGFzaFF1ZXJ5S2V5KHgucXVlcnlLZXkpO1xuICAgIH0pO1xuXG4gICAgaWYgKHJlc3VsdCkge1xuICAgICAgcmVzdWx0LmRlZmF1bHRPcHRpb25zID0gb3B0aW9ucztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5xdWVyeURlZmF1bHRzLnB1c2goe1xuICAgICAgICBxdWVyeUtleTogcXVlcnlLZXksXG4gICAgICAgIGRlZmF1bHRPcHRpb25zOiBvcHRpb25zXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLmdldFF1ZXJ5RGVmYXVsdHMgPSBmdW5jdGlvbiBnZXRRdWVyeURlZmF1bHRzKHF1ZXJ5S2V5KSB7XG4gICAgdmFyIF90aGlzJHF1ZXJ5RGVmYXVsdHMkZjtcblxuICAgIHJldHVybiBxdWVyeUtleSA/IChfdGhpcyRxdWVyeURlZmF1bHRzJGYgPSB0aGlzLnF1ZXJ5RGVmYXVsdHMuZmluZChmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHBhcnRpYWxNYXRjaEtleShxdWVyeUtleSwgeC5xdWVyeUtleSk7XG4gICAgfSkpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRxdWVyeURlZmF1bHRzJGYuZGVmYXVsdE9wdGlvbnMgOiB1bmRlZmluZWQ7XG4gIH07XG5cbiAgX3Byb3RvLnNldE11dGF0aW9uRGVmYXVsdHMgPSBmdW5jdGlvbiBzZXRNdXRhdGlvbkRlZmF1bHRzKG11dGF0aW9uS2V5LCBvcHRpb25zKSB7XG4gICAgdmFyIHJlc3VsdCA9IHRoaXMubXV0YXRpb25EZWZhdWx0cy5maW5kKGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4gaGFzaFF1ZXJ5S2V5KG11dGF0aW9uS2V5KSA9PT0gaGFzaFF1ZXJ5S2V5KHgubXV0YXRpb25LZXkpO1xuICAgIH0pO1xuXG4gICAgaWYgKHJlc3VsdCkge1xuICAgICAgcmVzdWx0LmRlZmF1bHRPcHRpb25zID0gb3B0aW9ucztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tdXRhdGlvbkRlZmF1bHRzLnB1c2goe1xuICAgICAgICBtdXRhdGlvbktleTogbXV0YXRpb25LZXksXG4gICAgICAgIGRlZmF1bHRPcHRpb25zOiBvcHRpb25zXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLmdldE11dGF0aW9uRGVmYXVsdHMgPSBmdW5jdGlvbiBnZXRNdXRhdGlvbkRlZmF1bHRzKG11dGF0aW9uS2V5KSB7XG4gICAgdmFyIF90aGlzJG11dGF0aW9uRGVmYXVsdDtcblxuICAgIHJldHVybiBtdXRhdGlvbktleSA/IChfdGhpcyRtdXRhdGlvbkRlZmF1bHQgPSB0aGlzLm11dGF0aW9uRGVmYXVsdHMuZmluZChmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHBhcnRpYWxNYXRjaEtleShtdXRhdGlvbktleSwgeC5tdXRhdGlvbktleSk7XG4gICAgfSkpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRtdXRhdGlvbkRlZmF1bHQuZGVmYXVsdE9wdGlvbnMgOiB1bmRlZmluZWQ7XG4gIH07XG5cbiAgX3Byb3RvLmRlZmF1bHRRdWVyeU9wdGlvbnMgPSBmdW5jdGlvbiBkZWZhdWx0UXVlcnlPcHRpb25zKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5fZGVmYXVsdGVkKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdGVkT3B0aW9ucyA9IF9leHRlbmRzKHt9LCB0aGlzLmRlZmF1bHRPcHRpb25zLnF1ZXJpZXMsIHRoaXMuZ2V0UXVlcnlEZWZhdWx0cyhvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLnF1ZXJ5S2V5KSwgb3B0aW9ucywge1xuICAgICAgX2RlZmF1bHRlZDogdHJ1ZVxuICAgIH0pO1xuXG4gICAgaWYgKCFkZWZhdWx0ZWRPcHRpb25zLnF1ZXJ5SGFzaCAmJiBkZWZhdWx0ZWRPcHRpb25zLnF1ZXJ5S2V5KSB7XG4gICAgICBkZWZhdWx0ZWRPcHRpb25zLnF1ZXJ5SGFzaCA9IGhhc2hRdWVyeUtleUJ5T3B0aW9ucyhkZWZhdWx0ZWRPcHRpb25zLnF1ZXJ5S2V5LCBkZWZhdWx0ZWRPcHRpb25zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGVmYXVsdGVkT3B0aW9ucztcbiAgfTtcblxuICBfcHJvdG8uZGVmYXVsdFF1ZXJ5T2JzZXJ2ZXJPcHRpb25zID0gZnVuY3Rpb24gZGVmYXVsdFF1ZXJ5T2JzZXJ2ZXJPcHRpb25zKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5kZWZhdWx0UXVlcnlPcHRpb25zKG9wdGlvbnMpO1xuICB9O1xuXG4gIF9wcm90by5kZWZhdWx0TXV0YXRpb25PcHRpb25zID0gZnVuY3Rpb24gZGVmYXVsdE11dGF0aW9uT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMuX2RlZmF1bHRlZCkge1xuICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgfVxuXG4gICAgcmV0dXJuIF9leHRlbmRzKHt9LCB0aGlzLmRlZmF1bHRPcHRpb25zLm11dGF0aW9ucywgdGhpcy5nZXRNdXRhdGlvbkRlZmF1bHRzKG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMubXV0YXRpb25LZXkpLCBvcHRpb25zLCB7XG4gICAgICBfZGVmYXVsdGVkOiB0cnVlXG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmNsZWFyID0gZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgdGhpcy5xdWVyeUNhY2hlLmNsZWFyKCk7XG4gICAgdGhpcy5tdXRhdGlvbkNhY2hlLmNsZWFyKCk7XG4gIH07XG5cbiAgcmV0dXJuIFF1ZXJ5Q2xpZW50O1xufSgpOyIsICJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfaW5oZXJpdHNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZVwiO1xuaW1wb3J0IHsgaXNTZXJ2ZXIsIGlzVmFsaWRUaW1lb3V0LCBub29wLCByZXBsYWNlRXF1YWxEZWVwLCBzaGFsbG93RXF1YWxPYmplY3RzLCB0aW1lVW50aWxTdGFsZSB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgbm90aWZ5TWFuYWdlciB9IGZyb20gJy4vbm90aWZ5TWFuYWdlcic7XG5pbXBvcnQgeyBmb2N1c01hbmFnZXIgfSBmcm9tICcuL2ZvY3VzTWFuYWdlcic7XG5pbXBvcnQgeyBTdWJzY3JpYmFibGUgfSBmcm9tICcuL3N1YnNjcmliYWJsZSc7XG5pbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyBpc0NhbmNlbGxlZEVycm9yIH0gZnJvbSAnLi9yZXRyeWVyJztcbmV4cG9ydCB2YXIgUXVlcnlPYnNlcnZlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1N1YnNjcmliYWJsZSkge1xuICBfaW5oZXJpdHNMb29zZShRdWVyeU9ic2VydmVyLCBfU3Vic2NyaWJhYmxlKTtcblxuICBmdW5jdGlvbiBRdWVyeU9ic2VydmVyKGNsaWVudCwgb3B0aW9ucykge1xuICAgIHZhciBfdGhpcztcblxuICAgIF90aGlzID0gX1N1YnNjcmliYWJsZS5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgX3RoaXMuY2xpZW50ID0gY2xpZW50O1xuICAgIF90aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIF90aGlzLnRyYWNrZWRQcm9wcyA9IFtdO1xuICAgIF90aGlzLnNlbGVjdEVycm9yID0gbnVsbDtcblxuICAgIF90aGlzLmJpbmRNZXRob2RzKCk7XG5cbiAgICBfdGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFF1ZXJ5T2JzZXJ2ZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5iaW5kTWV0aG9kcyA9IGZ1bmN0aW9uIGJpbmRNZXRob2RzKCkge1xuICAgIHRoaXMucmVtb3ZlID0gdGhpcy5yZW1vdmUuYmluZCh0aGlzKTtcbiAgICB0aGlzLnJlZmV0Y2ggPSB0aGlzLnJlZmV0Y2guYmluZCh0aGlzKTtcbiAgfTtcblxuICBfcHJvdG8ub25TdWJzY3JpYmUgPSBmdW5jdGlvbiBvblN1YnNjcmliZSgpIHtcbiAgICBpZiAodGhpcy5saXN0ZW5lcnMubGVuZ3RoID09PSAxKSB7XG4gICAgICB0aGlzLmN1cnJlbnRRdWVyeS5hZGRPYnNlcnZlcih0aGlzKTtcblxuICAgICAgaWYgKHNob3VsZEZldGNoT25Nb3VudCh0aGlzLmN1cnJlbnRRdWVyeSwgdGhpcy5vcHRpb25zKSkge1xuICAgICAgICB0aGlzLmV4ZWN1dGVGZXRjaCgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnVwZGF0ZVRpbWVycygpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ub25VbnN1YnNjcmliZSA9IGZ1bmN0aW9uIG9uVW5zdWJzY3JpYmUoKSB7XG4gICAgaWYgKCF0aGlzLmxpc3RlbmVycy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uc2hvdWxkRmV0Y2hPblJlY29ubmVjdCA9IGZ1bmN0aW9uIHNob3VsZEZldGNoT25SZWNvbm5lY3QoKSB7XG4gICAgcmV0dXJuIHNob3VsZEZldGNoT24odGhpcy5jdXJyZW50UXVlcnksIHRoaXMub3B0aW9ucywgdGhpcy5vcHRpb25zLnJlZmV0Y2hPblJlY29ubmVjdCk7XG4gIH07XG5cbiAgX3Byb3RvLnNob3VsZEZldGNoT25XaW5kb3dGb2N1cyA9IGZ1bmN0aW9uIHNob3VsZEZldGNoT25XaW5kb3dGb2N1cygpIHtcbiAgICByZXR1cm4gc2hvdWxkRmV0Y2hPbih0aGlzLmN1cnJlbnRRdWVyeSwgdGhpcy5vcHRpb25zLCB0aGlzLm9wdGlvbnMucmVmZXRjaE9uV2luZG93Rm9jdXMpO1xuICB9O1xuXG4gIF9wcm90by5kZXN0cm95ID0gZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICB0aGlzLmxpc3RlbmVycyA9IFtdO1xuICAgIHRoaXMuY2xlYXJUaW1lcnMoKTtcbiAgICB0aGlzLmN1cnJlbnRRdWVyeS5yZW1vdmVPYnNlcnZlcih0aGlzKTtcbiAgfTtcblxuICBfcHJvdG8uc2V0T3B0aW9ucyA9IGZ1bmN0aW9uIHNldE9wdGlvbnMob3B0aW9ucywgbm90aWZ5T3B0aW9ucykge1xuICAgIHZhciBwcmV2T3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICB2YXIgcHJldlF1ZXJ5ID0gdGhpcy5jdXJyZW50UXVlcnk7XG4gICAgdGhpcy5vcHRpb25zID0gdGhpcy5jbGllbnQuZGVmYXVsdFF1ZXJ5T2JzZXJ2ZXJPcHRpb25zKG9wdGlvbnMpO1xuXG4gICAgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMuZW5hYmxlZCAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHRoaXMub3B0aW9ucy5lbmFibGVkICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgZW5hYmxlZCB0byBiZSBhIGJvb2xlYW4nKTtcbiAgICB9IC8vIEtlZXAgcHJldmlvdXMgcXVlcnkga2V5IGlmIHRoZSB1c2VyIGRvZXMgbm90IHN1cHBseSBvbmVcblxuXG4gICAgaWYgKCF0aGlzLm9wdGlvbnMucXVlcnlLZXkpIHtcbiAgICAgIHRoaXMub3B0aW9ucy5xdWVyeUtleSA9IHByZXZPcHRpb25zLnF1ZXJ5S2V5O1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlUXVlcnkoKTtcbiAgICB2YXIgbW91bnRlZCA9IHRoaXMuaGFzTGlzdGVuZXJzKCk7IC8vIEZldGNoIGlmIHRoZXJlIGFyZSBzdWJzY3JpYmVyc1xuXG4gICAgaWYgKG1vdW50ZWQgJiYgc2hvdWxkRmV0Y2hPcHRpb25hbGx5KHRoaXMuY3VycmVudFF1ZXJ5LCBwcmV2UXVlcnksIHRoaXMub3B0aW9ucywgcHJldk9wdGlvbnMpKSB7XG4gICAgICB0aGlzLmV4ZWN1dGVGZXRjaCgpO1xuICAgIH0gLy8gVXBkYXRlIHJlc3VsdFxuXG5cbiAgICB0aGlzLnVwZGF0ZVJlc3VsdChub3RpZnlPcHRpb25zKTsgLy8gVXBkYXRlIHN0YWxlIGludGVydmFsIGlmIG5lZWRlZFxuXG4gICAgaWYgKG1vdW50ZWQgJiYgKHRoaXMuY3VycmVudFF1ZXJ5ICE9PSBwcmV2UXVlcnkgfHwgdGhpcy5vcHRpb25zLmVuYWJsZWQgIT09IHByZXZPcHRpb25zLmVuYWJsZWQgfHwgdGhpcy5vcHRpb25zLnN0YWxlVGltZSAhPT0gcHJldk9wdGlvbnMuc3RhbGVUaW1lKSkge1xuICAgICAgdGhpcy51cGRhdGVTdGFsZVRpbWVvdXQoKTtcbiAgICB9XG5cbiAgICB2YXIgbmV4dFJlZmV0Y2hJbnRlcnZhbCA9IHRoaXMuY29tcHV0ZVJlZmV0Y2hJbnRlcnZhbCgpOyAvLyBVcGRhdGUgcmVmZXRjaCBpbnRlcnZhbCBpZiBuZWVkZWRcblxuICAgIGlmIChtb3VudGVkICYmICh0aGlzLmN1cnJlbnRRdWVyeSAhPT0gcHJldlF1ZXJ5IHx8IHRoaXMub3B0aW9ucy5lbmFibGVkICE9PSBwcmV2T3B0aW9ucy5lbmFibGVkIHx8IG5leHRSZWZldGNoSW50ZXJ2YWwgIT09IHRoaXMuY3VycmVudFJlZmV0Y2hJbnRlcnZhbCkpIHtcbiAgICAgIHRoaXMudXBkYXRlUmVmZXRjaEludGVydmFsKG5leHRSZWZldGNoSW50ZXJ2YWwpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uZ2V0T3B0aW1pc3RpY1Jlc3VsdCA9IGZ1bmN0aW9uIGdldE9wdGltaXN0aWNSZXN1bHQob3B0aW9ucykge1xuICAgIHZhciBkZWZhdWx0ZWRPcHRpb25zID0gdGhpcy5jbGllbnQuZGVmYXVsdFF1ZXJ5T2JzZXJ2ZXJPcHRpb25zKG9wdGlvbnMpO1xuICAgIHZhciBxdWVyeSA9IHRoaXMuY2xpZW50LmdldFF1ZXJ5Q2FjaGUoKS5idWlsZCh0aGlzLmNsaWVudCwgZGVmYXVsdGVkT3B0aW9ucyk7XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlUmVzdWx0KHF1ZXJ5LCBkZWZhdWx0ZWRPcHRpb25zKTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0Q3VycmVudFJlc3VsdCA9IGZ1bmN0aW9uIGdldEN1cnJlbnRSZXN1bHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFJlc3VsdDtcbiAgfTtcblxuICBfcHJvdG8udHJhY2tSZXN1bHQgPSBmdW5jdGlvbiB0cmFja1Jlc3VsdChyZXN1bHQsIGRlZmF1bHRlZE9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIHZhciB0cmFja2VkUmVzdWx0ID0ge307XG5cbiAgICB2YXIgdHJhY2tQcm9wID0gZnVuY3Rpb24gdHJhY2tQcm9wKGtleSkge1xuICAgICAgaWYgKCFfdGhpczIudHJhY2tlZFByb3BzLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgX3RoaXMyLnRyYWNrZWRQcm9wcy5wdXNoKGtleSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIE9iamVjdC5rZXlzKHJlc3VsdCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodHJhY2tlZFJlc3VsdCwga2V5LCB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgIHRyYWNrUHJvcChrZXkpO1xuICAgICAgICAgIHJldHVybiByZXN1bHRba2V5XTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpZiAoZGVmYXVsdGVkT3B0aW9ucy51c2VFcnJvckJvdW5kYXJ5IHx8IGRlZmF1bHRlZE9wdGlvbnMuc3VzcGVuc2UpIHtcbiAgICAgIHRyYWNrUHJvcCgnZXJyb3InKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJhY2tlZFJlc3VsdDtcbiAgfTtcblxuICBfcHJvdG8uZ2V0TmV4dFJlc3VsdCA9IGZ1bmN0aW9uIGdldE5leHRSZXN1bHQob3B0aW9ucykge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciB1bnN1YnNjcmliZSA9IF90aGlzMy5zdWJzY3JpYmUoZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICBpZiAoIXJlc3VsdC5pc0ZldGNoaW5nKSB7XG4gICAgICAgICAgdW5zdWJzY3JpYmUoKTtcblxuICAgICAgICAgIGlmIChyZXN1bHQuaXNFcnJvciAmJiAob3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy50aHJvd09uRXJyb3IpKSB7XG4gICAgICAgICAgICByZWplY3QocmVzdWx0LmVycm9yKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmdldEN1cnJlbnRRdWVyeSA9IGZ1bmN0aW9uIGdldEN1cnJlbnRRdWVyeSgpIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50UXVlcnk7XG4gIH07XG5cbiAgX3Byb3RvLnJlbW92ZSA9IGZ1bmN0aW9uIHJlbW92ZSgpIHtcbiAgICB0aGlzLmNsaWVudC5nZXRRdWVyeUNhY2hlKCkucmVtb3ZlKHRoaXMuY3VycmVudFF1ZXJ5KTtcbiAgfTtcblxuICBfcHJvdG8ucmVmZXRjaCA9IGZ1bmN0aW9uIHJlZmV0Y2gob3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLmZldGNoKF9leHRlbmRzKHt9LCBvcHRpb25zLCB7XG4gICAgICBtZXRhOiB7XG4gICAgICAgIHJlZmV0Y2hQYWdlOiBvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLnJlZmV0Y2hQYWdlXG4gICAgICB9XG4gICAgfSkpO1xuICB9O1xuXG4gIF9wcm90by5mZXRjaE9wdGltaXN0aWMgPSBmdW5jdGlvbiBmZXRjaE9wdGltaXN0aWMob3B0aW9ucykge1xuICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgdmFyIGRlZmF1bHRlZE9wdGlvbnMgPSB0aGlzLmNsaWVudC5kZWZhdWx0UXVlcnlPYnNlcnZlck9wdGlvbnMob3B0aW9ucyk7XG4gICAgdmFyIHF1ZXJ5ID0gdGhpcy5jbGllbnQuZ2V0UXVlcnlDYWNoZSgpLmJ1aWxkKHRoaXMuY2xpZW50LCBkZWZhdWx0ZWRPcHRpb25zKTtcbiAgICByZXR1cm4gcXVlcnkuZmV0Y2goKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpczQuY3JlYXRlUmVzdWx0KHF1ZXJ5LCBkZWZhdWx0ZWRPcHRpb25zKTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uZmV0Y2ggPSBmdW5jdGlvbiBmZXRjaChmZXRjaE9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXM1ID0gdGhpcztcblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGVGZXRjaChmZXRjaE9wdGlvbnMpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXM1LnVwZGF0ZVJlc3VsdCgpO1xuXG4gICAgICByZXR1cm4gX3RoaXM1LmN1cnJlbnRSZXN1bHQ7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmV4ZWN1dGVGZXRjaCA9IGZ1bmN0aW9uIGV4ZWN1dGVGZXRjaChmZXRjaE9wdGlvbnMpIHtcbiAgICAvLyBNYWtlIHN1cmUgd2UgcmVmZXJlbmNlIHRoZSBsYXRlc3QgcXVlcnkgYXMgdGhlIGN1cnJlbnQgb25lIG1pZ2h0IGhhdmUgYmVlbiByZW1vdmVkXG4gICAgdGhpcy51cGRhdGVRdWVyeSgpOyAvLyBGZXRjaFxuXG4gICAgdmFyIHByb21pc2UgPSB0aGlzLmN1cnJlbnRRdWVyeS5mZXRjaCh0aGlzLm9wdGlvbnMsIGZldGNoT3B0aW9ucyk7XG5cbiAgICBpZiAoIShmZXRjaE9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IGZldGNoT3B0aW9ucy50aHJvd09uRXJyb3IpKSB7XG4gICAgICBwcm9taXNlID0gcHJvbWlzZS5jYXRjaChub29wKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfTtcblxuICBfcHJvdG8udXBkYXRlU3RhbGVUaW1lb3V0ID0gZnVuY3Rpb24gdXBkYXRlU3RhbGVUaW1lb3V0KCkge1xuICAgIHZhciBfdGhpczYgPSB0aGlzO1xuXG4gICAgdGhpcy5jbGVhclN0YWxlVGltZW91dCgpO1xuXG4gICAgaWYgKGlzU2VydmVyIHx8IHRoaXMuY3VycmVudFJlc3VsdC5pc1N0YWxlIHx8ICFpc1ZhbGlkVGltZW91dCh0aGlzLm9wdGlvbnMuc3RhbGVUaW1lKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB0aW1lID0gdGltZVVudGlsU3RhbGUodGhpcy5jdXJyZW50UmVzdWx0LmRhdGFVcGRhdGVkQXQsIHRoaXMub3B0aW9ucy5zdGFsZVRpbWUpOyAvLyBUaGUgdGltZW91dCBpcyBzb21ldGltZXMgdHJpZ2dlcmVkIDEgbXMgYmVmb3JlIHRoZSBzdGFsZSB0aW1lIGV4cGlyYXRpb24uXG4gICAgLy8gVG8gbWl0aWdhdGUgdGhpcyBpc3N1ZSB3ZSBhbHdheXMgYWRkIDEgbXMgdG8gdGhlIHRpbWVvdXQuXG5cbiAgICB2YXIgdGltZW91dCA9IHRpbWUgKyAxO1xuICAgIHRoaXMuc3RhbGVUaW1lb3V0SWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICghX3RoaXM2LmN1cnJlbnRSZXN1bHQuaXNTdGFsZSkge1xuICAgICAgICBfdGhpczYudXBkYXRlUmVzdWx0KCk7XG4gICAgICB9XG4gICAgfSwgdGltZW91dCk7XG4gIH07XG5cbiAgX3Byb3RvLmNvbXB1dGVSZWZldGNoSW50ZXJ2YWwgPSBmdW5jdGlvbiBjb21wdXRlUmVmZXRjaEludGVydmFsKCkge1xuICAgIHZhciBfdGhpcyRvcHRpb25zJHJlZmV0Y2g7XG5cbiAgICByZXR1cm4gdHlwZW9mIHRoaXMub3B0aW9ucy5yZWZldGNoSW50ZXJ2YWwgPT09ICdmdW5jdGlvbicgPyB0aGlzLm9wdGlvbnMucmVmZXRjaEludGVydmFsKHRoaXMuY3VycmVudFJlc3VsdC5kYXRhLCB0aGlzLmN1cnJlbnRRdWVyeSkgOiAoX3RoaXMkb3B0aW9ucyRyZWZldGNoID0gdGhpcy5vcHRpb25zLnJlZmV0Y2hJbnRlcnZhbCkgIT0gbnVsbCA/IF90aGlzJG9wdGlvbnMkcmVmZXRjaCA6IGZhbHNlO1xuICB9O1xuXG4gIF9wcm90by51cGRhdGVSZWZldGNoSW50ZXJ2YWwgPSBmdW5jdGlvbiB1cGRhdGVSZWZldGNoSW50ZXJ2YWwobmV4dEludGVydmFsKSB7XG4gICAgdmFyIF90aGlzNyA9IHRoaXM7XG5cbiAgICB0aGlzLmNsZWFyUmVmZXRjaEludGVydmFsKCk7XG4gICAgdGhpcy5jdXJyZW50UmVmZXRjaEludGVydmFsID0gbmV4dEludGVydmFsO1xuXG4gICAgaWYgKGlzU2VydmVyIHx8IHRoaXMub3B0aW9ucy5lbmFibGVkID09PSBmYWxzZSB8fCAhaXNWYWxpZFRpbWVvdXQodGhpcy5jdXJyZW50UmVmZXRjaEludGVydmFsKSB8fCB0aGlzLmN1cnJlbnRSZWZldGNoSW50ZXJ2YWwgPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnJlZmV0Y2hJbnRlcnZhbElkID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKF90aGlzNy5vcHRpb25zLnJlZmV0Y2hJbnRlcnZhbEluQmFja2dyb3VuZCB8fCBmb2N1c01hbmFnZXIuaXNGb2N1c2VkKCkpIHtcbiAgICAgICAgX3RoaXM3LmV4ZWN1dGVGZXRjaCgpO1xuICAgICAgfVxuICAgIH0sIHRoaXMuY3VycmVudFJlZmV0Y2hJbnRlcnZhbCk7XG4gIH07XG5cbiAgX3Byb3RvLnVwZGF0ZVRpbWVycyA9IGZ1bmN0aW9uIHVwZGF0ZVRpbWVycygpIHtcbiAgICB0aGlzLnVwZGF0ZVN0YWxlVGltZW91dCgpO1xuICAgIHRoaXMudXBkYXRlUmVmZXRjaEludGVydmFsKHRoaXMuY29tcHV0ZVJlZmV0Y2hJbnRlcnZhbCgpKTtcbiAgfTtcblxuICBfcHJvdG8uY2xlYXJUaW1lcnMgPSBmdW5jdGlvbiBjbGVhclRpbWVycygpIHtcbiAgICB0aGlzLmNsZWFyU3RhbGVUaW1lb3V0KCk7XG4gICAgdGhpcy5jbGVhclJlZmV0Y2hJbnRlcnZhbCgpO1xuICB9O1xuXG4gIF9wcm90by5jbGVhclN0YWxlVGltZW91dCA9IGZ1bmN0aW9uIGNsZWFyU3RhbGVUaW1lb3V0KCkge1xuICAgIGlmICh0aGlzLnN0YWxlVGltZW91dElkKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5zdGFsZVRpbWVvdXRJZCk7XG4gICAgICB0aGlzLnN0YWxlVGltZW91dElkID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uY2xlYXJSZWZldGNoSW50ZXJ2YWwgPSBmdW5jdGlvbiBjbGVhclJlZmV0Y2hJbnRlcnZhbCgpIHtcbiAgICBpZiAodGhpcy5yZWZldGNoSW50ZXJ2YWxJZCkge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnJlZmV0Y2hJbnRlcnZhbElkKTtcbiAgICAgIHRoaXMucmVmZXRjaEludGVydmFsSWQgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5jcmVhdGVSZXN1bHQgPSBmdW5jdGlvbiBjcmVhdGVSZXN1bHQocXVlcnksIG9wdGlvbnMpIHtcbiAgICB2YXIgcHJldlF1ZXJ5ID0gdGhpcy5jdXJyZW50UXVlcnk7XG4gICAgdmFyIHByZXZPcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgIHZhciBwcmV2UmVzdWx0ID0gdGhpcy5jdXJyZW50UmVzdWx0O1xuICAgIHZhciBwcmV2UmVzdWx0U3RhdGUgPSB0aGlzLmN1cnJlbnRSZXN1bHRTdGF0ZTtcbiAgICB2YXIgcHJldlJlc3VsdE9wdGlvbnMgPSB0aGlzLmN1cnJlbnRSZXN1bHRPcHRpb25zO1xuICAgIHZhciBxdWVyeUNoYW5nZSA9IHF1ZXJ5ICE9PSBwcmV2UXVlcnk7XG4gICAgdmFyIHF1ZXJ5SW5pdGlhbFN0YXRlID0gcXVlcnlDaGFuZ2UgPyBxdWVyeS5zdGF0ZSA6IHRoaXMuY3VycmVudFF1ZXJ5SW5pdGlhbFN0YXRlO1xuICAgIHZhciBwcmV2UXVlcnlSZXN1bHQgPSBxdWVyeUNoYW5nZSA/IHRoaXMuY3VycmVudFJlc3VsdCA6IHRoaXMucHJldmlvdXNRdWVyeVJlc3VsdDtcbiAgICB2YXIgc3RhdGUgPSBxdWVyeS5zdGF0ZTtcbiAgICB2YXIgZGF0YVVwZGF0ZWRBdCA9IHN0YXRlLmRhdGFVcGRhdGVkQXQsXG4gICAgICAgIGVycm9yID0gc3RhdGUuZXJyb3IsXG4gICAgICAgIGVycm9yVXBkYXRlZEF0ID0gc3RhdGUuZXJyb3JVcGRhdGVkQXQsXG4gICAgICAgIGlzRmV0Y2hpbmcgPSBzdGF0ZS5pc0ZldGNoaW5nLFxuICAgICAgICBzdGF0dXMgPSBzdGF0ZS5zdGF0dXM7XG4gICAgdmFyIGlzUHJldmlvdXNEYXRhID0gZmFsc2U7XG4gICAgdmFyIGlzUGxhY2Vob2xkZXJEYXRhID0gZmFsc2U7XG4gICAgdmFyIGRhdGE7IC8vIE9wdGltaXN0aWNhbGx5IHNldCByZXN1bHQgaW4gZmV0Y2hpbmcgc3RhdGUgaWYgbmVlZGVkXG5cbiAgICBpZiAob3B0aW9ucy5vcHRpbWlzdGljUmVzdWx0cykge1xuICAgICAgdmFyIG1vdW50ZWQgPSB0aGlzLmhhc0xpc3RlbmVycygpO1xuICAgICAgdmFyIGZldGNoT25Nb3VudCA9ICFtb3VudGVkICYmIHNob3VsZEZldGNoT25Nb3VudChxdWVyeSwgb3B0aW9ucyk7XG4gICAgICB2YXIgZmV0Y2hPcHRpb25hbGx5ID0gbW91bnRlZCAmJiBzaG91bGRGZXRjaE9wdGlvbmFsbHkocXVlcnksIHByZXZRdWVyeSwgb3B0aW9ucywgcHJldk9wdGlvbnMpO1xuXG4gICAgICBpZiAoZmV0Y2hPbk1vdW50IHx8IGZldGNoT3B0aW9uYWxseSkge1xuICAgICAgICBpc0ZldGNoaW5nID0gdHJ1ZTtcblxuICAgICAgICBpZiAoIWRhdGFVcGRhdGVkQXQpIHtcbiAgICAgICAgICBzdGF0dXMgPSAnbG9hZGluZyc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIEtlZXAgcHJldmlvdXMgZGF0YSBpZiBuZWVkZWRcblxuXG4gICAgaWYgKG9wdGlvbnMua2VlcFByZXZpb3VzRGF0YSAmJiAhc3RhdGUuZGF0YVVwZGF0ZUNvdW50ICYmIChwcmV2UXVlcnlSZXN1bHQgPT0gbnVsbCA/IHZvaWQgMCA6IHByZXZRdWVyeVJlc3VsdC5pc1N1Y2Nlc3MpICYmIHN0YXR1cyAhPT0gJ2Vycm9yJykge1xuICAgICAgZGF0YSA9IHByZXZRdWVyeVJlc3VsdC5kYXRhO1xuICAgICAgZGF0YVVwZGF0ZWRBdCA9IHByZXZRdWVyeVJlc3VsdC5kYXRhVXBkYXRlZEF0O1xuICAgICAgc3RhdHVzID0gcHJldlF1ZXJ5UmVzdWx0LnN0YXR1cztcbiAgICAgIGlzUHJldmlvdXNEYXRhID0gdHJ1ZTtcbiAgICB9IC8vIFNlbGVjdCBkYXRhIGlmIG5lZWRlZFxuICAgIGVsc2UgaWYgKG9wdGlvbnMuc2VsZWN0ICYmIHR5cGVvZiBzdGF0ZS5kYXRhICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAvLyBNZW1vaXplIHNlbGVjdCByZXN1bHRcbiAgICAgICAgaWYgKHByZXZSZXN1bHQgJiYgc3RhdGUuZGF0YSA9PT0gKHByZXZSZXN1bHRTdGF0ZSA9PSBudWxsID8gdm9pZCAwIDogcHJldlJlc3VsdFN0YXRlLmRhdGEpICYmIG9wdGlvbnMuc2VsZWN0ID09PSB0aGlzLnNlbGVjdEZuKSB7XG4gICAgICAgICAgZGF0YSA9IHRoaXMuc2VsZWN0UmVzdWx0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdEZuID0gb3B0aW9ucy5zZWxlY3Q7XG4gICAgICAgICAgICBkYXRhID0gb3B0aW9ucy5zZWxlY3Qoc3RhdGUuZGF0YSk7XG5cbiAgICAgICAgICAgIGlmIChvcHRpb25zLnN0cnVjdHVyYWxTaGFyaW5nICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICBkYXRhID0gcmVwbGFjZUVxdWFsRGVlcChwcmV2UmVzdWx0ID09IG51bGwgPyB2b2lkIDAgOiBwcmV2UmVzdWx0LmRhdGEsIGRhdGEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnNlbGVjdFJlc3VsdCA9IGRhdGE7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdEVycm9yID0gbnVsbDtcbiAgICAgICAgICB9IGNhdGNoIChzZWxlY3RFcnJvcikge1xuICAgICAgICAgICAgZ2V0TG9nZ2VyKCkuZXJyb3Ioc2VsZWN0RXJyb3IpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RFcnJvciA9IHNlbGVjdEVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSAvLyBVc2UgcXVlcnkgZGF0YVxuICAgICAgZWxzZSB7XG4gICAgICAgICAgZGF0YSA9IHN0YXRlLmRhdGE7XG4gICAgICAgIH0gLy8gU2hvdyBwbGFjZWhvbGRlciBkYXRhIGlmIG5lZWRlZFxuXG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMucGxhY2Vob2xkZXJEYXRhICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZGF0YSA9PT0gJ3VuZGVmaW5lZCcgJiYgKHN0YXR1cyA9PT0gJ2xvYWRpbmcnIHx8IHN0YXR1cyA9PT0gJ2lkbGUnKSkge1xuICAgICAgdmFyIHBsYWNlaG9sZGVyRGF0YTsgLy8gTWVtb2l6ZSBwbGFjZWhvbGRlciBkYXRhXG5cbiAgICAgIGlmICgocHJldlJlc3VsdCA9PSBudWxsID8gdm9pZCAwIDogcHJldlJlc3VsdC5pc1BsYWNlaG9sZGVyRGF0YSkgJiYgb3B0aW9ucy5wbGFjZWhvbGRlckRhdGEgPT09IChwcmV2UmVzdWx0T3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogcHJldlJlc3VsdE9wdGlvbnMucGxhY2Vob2xkZXJEYXRhKSkge1xuICAgICAgICBwbGFjZWhvbGRlckRhdGEgPSBwcmV2UmVzdWx0LmRhdGE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwbGFjZWhvbGRlckRhdGEgPSB0eXBlb2Ygb3B0aW9ucy5wbGFjZWhvbGRlckRhdGEgPT09ICdmdW5jdGlvbicgPyBvcHRpb25zLnBsYWNlaG9sZGVyRGF0YSgpIDogb3B0aW9ucy5wbGFjZWhvbGRlckRhdGE7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuc2VsZWN0ICYmIHR5cGVvZiBwbGFjZWhvbGRlckRhdGEgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyRGF0YSA9IG9wdGlvbnMuc2VsZWN0KHBsYWNlaG9sZGVyRGF0YSk7XG5cbiAgICAgICAgICAgIGlmIChvcHRpb25zLnN0cnVjdHVyYWxTaGFyaW5nICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICBwbGFjZWhvbGRlckRhdGEgPSByZXBsYWNlRXF1YWxEZWVwKHByZXZSZXN1bHQgPT0gbnVsbCA/IHZvaWQgMCA6IHByZXZSZXN1bHQuZGF0YSwgcGxhY2Vob2xkZXJEYXRhKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zZWxlY3RFcnJvciA9IG51bGw7XG4gICAgICAgICAgfSBjYXRjaCAoc2VsZWN0RXJyb3IpIHtcbiAgICAgICAgICAgIGdldExvZ2dlcigpLmVycm9yKHNlbGVjdEVycm9yKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0RXJyb3IgPSBzZWxlY3RFcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBwbGFjZWhvbGRlckRhdGEgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHN0YXR1cyA9ICdzdWNjZXNzJztcbiAgICAgICAgZGF0YSA9IHBsYWNlaG9sZGVyRGF0YTtcbiAgICAgICAgaXNQbGFjZWhvbGRlckRhdGEgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLnNlbGVjdEVycm9yKSB7XG4gICAgICBlcnJvciA9IHRoaXMuc2VsZWN0RXJyb3I7XG4gICAgICBkYXRhID0gdGhpcy5zZWxlY3RSZXN1bHQ7XG4gICAgICBlcnJvclVwZGF0ZWRBdCA9IERhdGUubm93KCk7XG4gICAgICBzdGF0dXMgPSAnZXJyb3InO1xuICAgIH1cblxuICAgIHZhciByZXN1bHQgPSB7XG4gICAgICBzdGF0dXM6IHN0YXR1cyxcbiAgICAgIGlzTG9hZGluZzogc3RhdHVzID09PSAnbG9hZGluZycsXG4gICAgICBpc1N1Y2Nlc3M6IHN0YXR1cyA9PT0gJ3N1Y2Nlc3MnLFxuICAgICAgaXNFcnJvcjogc3RhdHVzID09PSAnZXJyb3InLFxuICAgICAgaXNJZGxlOiBzdGF0dXMgPT09ICdpZGxlJyxcbiAgICAgIGRhdGE6IGRhdGEsXG4gICAgICBkYXRhVXBkYXRlZEF0OiBkYXRhVXBkYXRlZEF0LFxuICAgICAgZXJyb3I6IGVycm9yLFxuICAgICAgZXJyb3JVcGRhdGVkQXQ6IGVycm9yVXBkYXRlZEF0LFxuICAgICAgZmFpbHVyZUNvdW50OiBzdGF0ZS5mZXRjaEZhaWx1cmVDb3VudCxcbiAgICAgIGVycm9yVXBkYXRlQ291bnQ6IHN0YXRlLmVycm9yVXBkYXRlQ291bnQsXG4gICAgICBpc0ZldGNoZWQ6IHN0YXRlLmRhdGFVcGRhdGVDb3VudCA+IDAgfHwgc3RhdGUuZXJyb3JVcGRhdGVDb3VudCA+IDAsXG4gICAgICBpc0ZldGNoZWRBZnRlck1vdW50OiBzdGF0ZS5kYXRhVXBkYXRlQ291bnQgPiBxdWVyeUluaXRpYWxTdGF0ZS5kYXRhVXBkYXRlQ291bnQgfHwgc3RhdGUuZXJyb3JVcGRhdGVDb3VudCA+IHF1ZXJ5SW5pdGlhbFN0YXRlLmVycm9yVXBkYXRlQ291bnQsXG4gICAgICBpc0ZldGNoaW5nOiBpc0ZldGNoaW5nLFxuICAgICAgaXNSZWZldGNoaW5nOiBpc0ZldGNoaW5nICYmIHN0YXR1cyAhPT0gJ2xvYWRpbmcnLFxuICAgICAgaXNMb2FkaW5nRXJyb3I6IHN0YXR1cyA9PT0gJ2Vycm9yJyAmJiBzdGF0ZS5kYXRhVXBkYXRlZEF0ID09PSAwLFxuICAgICAgaXNQbGFjZWhvbGRlckRhdGE6IGlzUGxhY2Vob2xkZXJEYXRhLFxuICAgICAgaXNQcmV2aW91c0RhdGE6IGlzUHJldmlvdXNEYXRhLFxuICAgICAgaXNSZWZldGNoRXJyb3I6IHN0YXR1cyA9PT0gJ2Vycm9yJyAmJiBzdGF0ZS5kYXRhVXBkYXRlZEF0ICE9PSAwLFxuICAgICAgaXNTdGFsZTogaXNTdGFsZShxdWVyeSwgb3B0aW9ucyksXG4gICAgICByZWZldGNoOiB0aGlzLnJlZmV0Y2gsXG4gICAgICByZW1vdmU6IHRoaXMucmVtb3ZlXG4gICAgfTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIF9wcm90by5zaG91bGROb3RpZnlMaXN0ZW5lcnMgPSBmdW5jdGlvbiBzaG91bGROb3RpZnlMaXN0ZW5lcnMocmVzdWx0LCBwcmV2UmVzdWx0KSB7XG4gICAgaWYgKCFwcmV2UmVzdWx0KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgX3RoaXMkb3B0aW9ucyA9IHRoaXMub3B0aW9ucyxcbiAgICAgICAgbm90aWZ5T25DaGFuZ2VQcm9wcyA9IF90aGlzJG9wdGlvbnMubm90aWZ5T25DaGFuZ2VQcm9wcyxcbiAgICAgICAgbm90aWZ5T25DaGFuZ2VQcm9wc0V4Y2x1c2lvbnMgPSBfdGhpcyRvcHRpb25zLm5vdGlmeU9uQ2hhbmdlUHJvcHNFeGNsdXNpb25zO1xuXG4gICAgaWYgKCFub3RpZnlPbkNoYW5nZVByb3BzICYmICFub3RpZnlPbkNoYW5nZVByb3BzRXhjbHVzaW9ucykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKG5vdGlmeU9uQ2hhbmdlUHJvcHMgPT09ICd0cmFja2VkJyAmJiAhdGhpcy50cmFja2VkUHJvcHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgaW5jbHVkZWRQcm9wcyA9IG5vdGlmeU9uQ2hhbmdlUHJvcHMgPT09ICd0cmFja2VkJyA/IHRoaXMudHJhY2tlZFByb3BzIDogbm90aWZ5T25DaGFuZ2VQcm9wcztcbiAgICByZXR1cm4gT2JqZWN0LmtleXMocmVzdWx0KS5zb21lKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHZhciB0eXBlZEtleSA9IGtleTtcbiAgICAgIHZhciBjaGFuZ2VkID0gcmVzdWx0W3R5cGVkS2V5XSAhPT0gcHJldlJlc3VsdFt0eXBlZEtleV07XG4gICAgICB2YXIgaXNJbmNsdWRlZCA9IGluY2x1ZGVkUHJvcHMgPT0gbnVsbCA/IHZvaWQgMCA6IGluY2x1ZGVkUHJvcHMuc29tZShmdW5jdGlvbiAoeCkge1xuICAgICAgICByZXR1cm4geCA9PT0ga2V5O1xuICAgICAgfSk7XG4gICAgICB2YXIgaXNFeGNsdWRlZCA9IG5vdGlmeU9uQ2hhbmdlUHJvcHNFeGNsdXNpb25zID09IG51bGwgPyB2b2lkIDAgOiBub3RpZnlPbkNoYW5nZVByb3BzRXhjbHVzaW9ucy5zb21lKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHJldHVybiB4ID09PSBrZXk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBjaGFuZ2VkICYmICFpc0V4Y2x1ZGVkICYmICghaW5jbHVkZWRQcm9wcyB8fCBpc0luY2x1ZGVkKTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8udXBkYXRlUmVzdWx0ID0gZnVuY3Rpb24gdXBkYXRlUmVzdWx0KG5vdGlmeU9wdGlvbnMpIHtcbiAgICB2YXIgcHJldlJlc3VsdCA9IHRoaXMuY3VycmVudFJlc3VsdDtcbiAgICB0aGlzLmN1cnJlbnRSZXN1bHQgPSB0aGlzLmNyZWF0ZVJlc3VsdCh0aGlzLmN1cnJlbnRRdWVyeSwgdGhpcy5vcHRpb25zKTtcbiAgICB0aGlzLmN1cnJlbnRSZXN1bHRTdGF0ZSA9IHRoaXMuY3VycmVudFF1ZXJ5LnN0YXRlO1xuICAgIHRoaXMuY3VycmVudFJlc3VsdE9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7IC8vIE9ubHkgbm90aWZ5IGlmIHNvbWV0aGluZyBoYXMgY2hhbmdlZFxuXG4gICAgaWYgKHNoYWxsb3dFcXVhbE9iamVjdHModGhpcy5jdXJyZW50UmVzdWx0LCBwcmV2UmVzdWx0KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gRGV0ZXJtaW5lIHdoaWNoIGNhbGxiYWNrcyB0byB0cmlnZ2VyXG5cblxuICAgIHZhciBkZWZhdWx0Tm90aWZ5T3B0aW9ucyA9IHtcbiAgICAgIGNhY2hlOiB0cnVlXG4gICAgfTtcblxuICAgIGlmICgobm90aWZ5T3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogbm90aWZ5T3B0aW9ucy5saXN0ZW5lcnMpICE9PSBmYWxzZSAmJiB0aGlzLnNob3VsZE5vdGlmeUxpc3RlbmVycyh0aGlzLmN1cnJlbnRSZXN1bHQsIHByZXZSZXN1bHQpKSB7XG4gICAgICBkZWZhdWx0Tm90aWZ5T3B0aW9ucy5saXN0ZW5lcnMgPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMubm90aWZ5KF9leHRlbmRzKHt9LCBkZWZhdWx0Tm90aWZ5T3B0aW9ucywgbm90aWZ5T3B0aW9ucykpO1xuICB9O1xuXG4gIF9wcm90by51cGRhdGVRdWVyeSA9IGZ1bmN0aW9uIHVwZGF0ZVF1ZXJ5KCkge1xuICAgIHZhciBxdWVyeSA9IHRoaXMuY2xpZW50LmdldFF1ZXJ5Q2FjaGUoKS5idWlsZCh0aGlzLmNsaWVudCwgdGhpcy5vcHRpb25zKTtcblxuICAgIGlmIChxdWVyeSA9PT0gdGhpcy5jdXJyZW50UXVlcnkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgcHJldlF1ZXJ5ID0gdGhpcy5jdXJyZW50UXVlcnk7XG4gICAgdGhpcy5jdXJyZW50UXVlcnkgPSBxdWVyeTtcbiAgICB0aGlzLmN1cnJlbnRRdWVyeUluaXRpYWxTdGF0ZSA9IHF1ZXJ5LnN0YXRlO1xuICAgIHRoaXMucHJldmlvdXNRdWVyeVJlc3VsdCA9IHRoaXMuY3VycmVudFJlc3VsdDtcblxuICAgIGlmICh0aGlzLmhhc0xpc3RlbmVycygpKSB7XG4gICAgICBwcmV2UXVlcnkgPT0gbnVsbCA/IHZvaWQgMCA6IHByZXZRdWVyeS5yZW1vdmVPYnNlcnZlcih0aGlzKTtcbiAgICAgIHF1ZXJ5LmFkZE9ic2VydmVyKHRoaXMpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ub25RdWVyeVVwZGF0ZSA9IGZ1bmN0aW9uIG9uUXVlcnlVcGRhdGUoYWN0aW9uKSB7XG4gICAgdmFyIG5vdGlmeU9wdGlvbnMgPSB7fTtcblxuICAgIGlmIChhY3Rpb24udHlwZSA9PT0gJ3N1Y2Nlc3MnKSB7XG4gICAgICBub3RpZnlPcHRpb25zLm9uU3VjY2VzcyA9IHRydWU7XG4gICAgfSBlbHNlIGlmIChhY3Rpb24udHlwZSA9PT0gJ2Vycm9yJyAmJiAhaXNDYW5jZWxsZWRFcnJvcihhY3Rpb24uZXJyb3IpKSB7XG4gICAgICBub3RpZnlPcHRpb25zLm9uRXJyb3IgPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlUmVzdWx0KG5vdGlmeU9wdGlvbnMpO1xuXG4gICAgaWYgKHRoaXMuaGFzTGlzdGVuZXJzKCkpIHtcbiAgICAgIHRoaXMudXBkYXRlVGltZXJzKCk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5ub3RpZnkgPSBmdW5jdGlvbiBub3RpZnkobm90aWZ5T3B0aW9ucykge1xuICAgIHZhciBfdGhpczggPSB0aGlzO1xuXG4gICAgbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBGaXJzdCB0cmlnZ2VyIHRoZSBjb25maWd1cmF0aW9uIGNhbGxiYWNrc1xuICAgICAgaWYgKG5vdGlmeU9wdGlvbnMub25TdWNjZXNzKSB7XG4gICAgICAgIF90aGlzOC5vcHRpb25zLm9uU3VjY2VzcyA9PSBudWxsID8gdm9pZCAwIDogX3RoaXM4Lm9wdGlvbnMub25TdWNjZXNzKF90aGlzOC5jdXJyZW50UmVzdWx0LmRhdGEpO1xuICAgICAgICBfdGhpczgub3B0aW9ucy5vblNldHRsZWQgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzOC5vcHRpb25zLm9uU2V0dGxlZChfdGhpczguY3VycmVudFJlc3VsdC5kYXRhLCBudWxsKTtcbiAgICAgIH0gZWxzZSBpZiAobm90aWZ5T3B0aW9ucy5vbkVycm9yKSB7XG4gICAgICAgIF90aGlzOC5vcHRpb25zLm9uRXJyb3IgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzOC5vcHRpb25zLm9uRXJyb3IoX3RoaXM4LmN1cnJlbnRSZXN1bHQuZXJyb3IpO1xuICAgICAgICBfdGhpczgub3B0aW9ucy5vblNldHRsZWQgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzOC5vcHRpb25zLm9uU2V0dGxlZCh1bmRlZmluZWQsIF90aGlzOC5jdXJyZW50UmVzdWx0LmVycm9yKTtcbiAgICAgIH0gLy8gVGhlbiB0cmlnZ2VyIHRoZSBsaXN0ZW5lcnNcblxuXG4gICAgICBpZiAobm90aWZ5T3B0aW9ucy5saXN0ZW5lcnMpIHtcbiAgICAgICAgX3RoaXM4Lmxpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uIChsaXN0ZW5lcikge1xuICAgICAgICAgIGxpc3RlbmVyKF90aGlzOC5jdXJyZW50UmVzdWx0KTtcbiAgICAgICAgfSk7XG4gICAgICB9IC8vIFRoZW4gdGhlIGNhY2hlIGxpc3RlbmVyc1xuXG5cbiAgICAgIGlmIChub3RpZnlPcHRpb25zLmNhY2hlKSB7XG4gICAgICAgIF90aGlzOC5jbGllbnQuZ2V0UXVlcnlDYWNoZSgpLm5vdGlmeSh7XG4gICAgICAgICAgcXVlcnk6IF90aGlzOC5jdXJyZW50UXVlcnksXG4gICAgICAgICAgdHlwZTogJ29ic2VydmVyUmVzdWx0c1VwZGF0ZWQnXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiBRdWVyeU9ic2VydmVyO1xufShTdWJzY3JpYmFibGUpO1xuXG5mdW5jdGlvbiBzaG91bGRMb2FkT25Nb3VudChxdWVyeSwgb3B0aW9ucykge1xuICByZXR1cm4gb3B0aW9ucy5lbmFibGVkICE9PSBmYWxzZSAmJiAhcXVlcnkuc3RhdGUuZGF0YVVwZGF0ZWRBdCAmJiAhKHF1ZXJ5LnN0YXRlLnN0YXR1cyA9PT0gJ2Vycm9yJyAmJiBvcHRpb25zLnJldHJ5T25Nb3VudCA9PT0gZmFsc2UpO1xufVxuXG5mdW5jdGlvbiBzaG91bGRGZXRjaE9uTW91bnQocXVlcnksIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHNob3VsZExvYWRPbk1vdW50KHF1ZXJ5LCBvcHRpb25zKSB8fCBxdWVyeS5zdGF0ZS5kYXRhVXBkYXRlZEF0ID4gMCAmJiBzaG91bGRGZXRjaE9uKHF1ZXJ5LCBvcHRpb25zLCBvcHRpb25zLnJlZmV0Y2hPbk1vdW50KTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkRmV0Y2hPbihxdWVyeSwgb3B0aW9ucywgZmllbGQpIHtcbiAgaWYgKG9wdGlvbnMuZW5hYmxlZCAhPT0gZmFsc2UpIHtcbiAgICB2YXIgdmFsdWUgPSB0eXBlb2YgZmllbGQgPT09ICdmdW5jdGlvbicgPyBmaWVsZChxdWVyeSkgOiBmaWVsZDtcbiAgICByZXR1cm4gdmFsdWUgPT09ICdhbHdheXMnIHx8IHZhbHVlICE9PSBmYWxzZSAmJiBpc1N0YWxlKHF1ZXJ5LCBvcHRpb25zKTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkRmV0Y2hPcHRpb25hbGx5KHF1ZXJ5LCBwcmV2UXVlcnksIG9wdGlvbnMsIHByZXZPcHRpb25zKSB7XG4gIHJldHVybiBvcHRpb25zLmVuYWJsZWQgIT09IGZhbHNlICYmIChxdWVyeSAhPT0gcHJldlF1ZXJ5IHx8IHByZXZPcHRpb25zLmVuYWJsZWQgPT09IGZhbHNlKSAmJiAoIW9wdGlvbnMuc3VzcGVuc2UgfHwgcXVlcnkuc3RhdGUuc3RhdHVzICE9PSAnZXJyb3InKSAmJiBpc1N0YWxlKHF1ZXJ5LCBvcHRpb25zKTtcbn1cblxuZnVuY3Rpb24gaXNTdGFsZShxdWVyeSwgb3B0aW9ucykge1xuICByZXR1cm4gcXVlcnkuaXNTdGFsZUJ5VGltZShvcHRpb25zLnN0YWxlVGltZSk7XG59IiwgImltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nO1xuZXhwb3J0IHZhciB1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyA9IFJlYWN0RE9NLnVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzOyIsICJpbXBvcnQgeyBub3RpZnlNYW5hZ2VyIH0gZnJvbSAnLi4vY29yZSc7XG5pbXBvcnQgeyB1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyB9IGZyb20gJy4vcmVhY3RCYXRjaGVkVXBkYXRlcyc7XG5ub3RpZnlNYW5hZ2VyLnNldEJhdGNoTm90aWZ5RnVuY3Rpb24odW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMpOyIsICJleHBvcnQgdmFyIGxvZ2dlciA9IGNvbnNvbGU7IiwgImltcG9ydCB7IHNldExvZ2dlciB9IGZyb20gJy4uL2NvcmUnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXInO1xuc2V0TG9nZ2VyKGxvZ2dlcik7IiwgImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG52YXIgZGVmYXVsdENvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dCh1bmRlZmluZWQpO1xudmFyIFF1ZXJ5Q2xpZW50U2hhcmluZ0NvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dChmYWxzZSk7IC8vIGlmIGNvbnRleHRTaGFyaW5nIGlzIG9uLCB3ZSBzaGFyZSB0aGUgZmlyc3QgYW5kIGF0IGxlYXN0IG9uZVxuLy8gaW5zdGFuY2Ugb2YgdGhlIGNvbnRleHQgYWNyb3NzIHRoZSB3aW5kb3dcbi8vIHRvIGVuc3VyZSB0aGF0IGlmIFJlYWN0IFF1ZXJ5IGlzIHVzZWQgYWNyb3NzXG4vLyBkaWZmZXJlbnQgYnVuZGxlcyBvciBtaWNyb2Zyb250ZW5kcyB0aGV5IHdpbGxcbi8vIGFsbCB1c2UgdGhlIHNhbWUgKippbnN0YW5jZSoqIG9mIGNvbnRleHQsIHJlZ2FyZGxlc3Ncbi8vIG9mIG1vZHVsZSBzY29waW5nLlxuXG5mdW5jdGlvbiBnZXRRdWVyeUNsaWVudENvbnRleHQoY29udGV4dFNoYXJpbmcpIHtcbiAgaWYgKGNvbnRleHRTaGFyaW5nICYmIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgaWYgKCF3aW5kb3cuUmVhY3RRdWVyeUNsaWVudENvbnRleHQpIHtcbiAgICAgIHdpbmRvdy5SZWFjdFF1ZXJ5Q2xpZW50Q29udGV4dCA9IGRlZmF1bHRDb250ZXh0O1xuICAgIH1cblxuICAgIHJldHVybiB3aW5kb3cuUmVhY3RRdWVyeUNsaWVudENvbnRleHQ7XG4gIH1cblxuICByZXR1cm4gZGVmYXVsdENvbnRleHQ7XG59XG5cbmV4cG9ydCB2YXIgdXNlUXVlcnlDbGllbnQgPSBmdW5jdGlvbiB1c2VRdWVyeUNsaWVudCgpIHtcbiAgdmFyIHF1ZXJ5Q2xpZW50ID0gUmVhY3QudXNlQ29udGV4dChnZXRRdWVyeUNsaWVudENvbnRleHQoUmVhY3QudXNlQ29udGV4dChRdWVyeUNsaWVudFNoYXJpbmdDb250ZXh0KSkpO1xuXG4gIGlmICghcXVlcnlDbGllbnQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFF1ZXJ5Q2xpZW50IHNldCwgdXNlIFF1ZXJ5Q2xpZW50UHJvdmlkZXIgdG8gc2V0IG9uZScpO1xuICB9XG5cbiAgcmV0dXJuIHF1ZXJ5Q2xpZW50O1xufTtcbmV4cG9ydCB2YXIgUXVlcnlDbGllbnRQcm92aWRlciA9IGZ1bmN0aW9uIFF1ZXJ5Q2xpZW50UHJvdmlkZXIoX3JlZikge1xuICB2YXIgY2xpZW50ID0gX3JlZi5jbGllbnQsXG4gICAgICBfcmVmJGNvbnRleHRTaGFyaW5nID0gX3JlZi5jb250ZXh0U2hhcmluZyxcbiAgICAgIGNvbnRleHRTaGFyaW5nID0gX3JlZiRjb250ZXh0U2hhcmluZyA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGNvbnRleHRTaGFyaW5nLFxuICAgICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuO1xuICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGNsaWVudC5tb3VudCgpO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBjbGllbnQudW5tb3VudCgpO1xuICAgIH07XG4gIH0sIFtjbGllbnRdKTtcbiAgdmFyIENvbnRleHQgPSBnZXRRdWVyeUNsaWVudENvbnRleHQoY29udGV4dFNoYXJpbmcpO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUXVlcnlDbGllbnRTaGFyaW5nQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBjb250ZXh0U2hhcmluZ1xuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IGNsaWVudFxuICB9LCBjaGlsZHJlbikpO1xufTsiLCAiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JzsgLy8gQ09OVEVYVFxuXG5mdW5jdGlvbiBjcmVhdGVWYWx1ZSgpIHtcbiAgdmFyIF9pc1Jlc2V0ID0gZmFsc2U7XG4gIHJldHVybiB7XG4gICAgY2xlYXJSZXNldDogZnVuY3Rpb24gY2xlYXJSZXNldCgpIHtcbiAgICAgIF9pc1Jlc2V0ID0gZmFsc2U7XG4gICAgfSxcbiAgICByZXNldDogZnVuY3Rpb24gcmVzZXQoKSB7XG4gICAgICBfaXNSZXNldCA9IHRydWU7XG4gICAgfSxcbiAgICBpc1Jlc2V0OiBmdW5jdGlvbiBpc1Jlc2V0KCkge1xuICAgICAgcmV0dXJuIF9pc1Jlc2V0O1xuICAgIH1cbiAgfTtcbn1cblxudmFyIFF1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5Q29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KGNyZWF0ZVZhbHVlKCkpOyAvLyBIT09LXG5cbmV4cG9ydCB2YXIgdXNlUXVlcnlFcnJvclJlc2V0Qm91bmRhcnkgPSBmdW5jdGlvbiB1c2VRdWVyeUVycm9yUmVzZXRCb3VuZGFyeSgpIHtcbiAgcmV0dXJuIFJlYWN0LnVzZUNvbnRleHQoUXVlcnlFcnJvclJlc2V0Qm91bmRhcnlDb250ZXh0KTtcbn07IC8vIENPTVBPTkVOVFxuXG5leHBvcnQgdmFyIFF1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5ID0gZnVuY3Rpb24gUXVlcnlFcnJvclJlc2V0Qm91bmRhcnkoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuO1xuICB2YXIgdmFsdWUgPSBSZWFjdC51c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY3JlYXRlVmFsdWUoKTtcbiAgfSwgW10pO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUXVlcnlFcnJvclJlc2V0Qm91bmRhcnlDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IHZhbHVlXG4gIH0sIHR5cGVvZiBjaGlsZHJlbiA9PT0gJ2Z1bmN0aW9uJyA/IGNoaWxkcmVuKHZhbHVlKSA6IGNoaWxkcmVuKTtcbn07IiwgImV4cG9ydCBmdW5jdGlvbiBzaG91bGRUaHJvd0Vycm9yKHN1c3BlbnNlLCBfdXNlRXJyb3JCb3VuZGFyeSwgcGFyYW1zKSB7XG4gIC8vIEFsbG93IHVzZUVycm9yQm91bmRhcnkgZnVuY3Rpb24gdG8gb3ZlcnJpZGUgdGhyb3dpbmcgYmVoYXZpb3Igb24gYSBwZXItZXJyb3IgYmFzaXNcbiAgaWYgKHR5cGVvZiBfdXNlRXJyb3JCb3VuZGFyeSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBfdXNlRXJyb3JCb3VuZGFyeS5hcHBseSh2b2lkIDAsIHBhcmFtcyk7XG4gIH0gLy8gQWxsb3cgdXNlRXJyb3JCb3VuZGFyeSB0byBvdmVycmlkZSBzdXNwZW5zZSdzIHRocm93aW5nIGJlaGF2aW9yXG5cblxuICBpZiAodHlwZW9mIF91c2VFcnJvckJvdW5kYXJ5ID09PSAnYm9vbGVhbicpIHJldHVybiBfdXNlRXJyb3JCb3VuZGFyeTsgLy8gSWYgc3VzcGVuc2UgaXMgZW5hYmxlZCBkZWZhdWx0IHRvIHRocm93aW5nIGVycm9yc1xuXG4gIHJldHVybiAhIXN1c3BlbnNlO1xufSIsICJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgbm90aWZ5TWFuYWdlciB9IGZyb20gJy4uL2NvcmUvbm90aWZ5TWFuYWdlcic7XG5pbXBvcnQgeyB1c2VRdWVyeUVycm9yUmVzZXRCb3VuZGFyeSB9IGZyb20gJy4vUXVlcnlFcnJvclJlc2V0Qm91bmRhcnknO1xuaW1wb3J0IHsgdXNlUXVlcnlDbGllbnQgfSBmcm9tICcuL1F1ZXJ5Q2xpZW50UHJvdmlkZXInO1xuaW1wb3J0IHsgc2hvdWxkVGhyb3dFcnJvciB9IGZyb20gJy4vdXRpbHMnO1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUJhc2VRdWVyeShvcHRpb25zLCBPYnNlcnZlcikge1xuICB2YXIgbW91bnRlZFJlZiA9IFJlYWN0LnVzZVJlZihmYWxzZSk7XG5cbiAgdmFyIF9SZWFjdCR1c2VTdGF0ZSA9IFJlYWN0LnVzZVN0YXRlKDApLFxuICAgICAgZm9yY2VVcGRhdGUgPSBfUmVhY3QkdXNlU3RhdGVbMV07XG5cbiAgdmFyIHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcbiAgdmFyIGVycm9yUmVzZXRCb3VuZGFyeSA9IHVzZVF1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5KCk7XG4gIHZhciBkZWZhdWx0ZWRPcHRpb25zID0gcXVlcnlDbGllbnQuZGVmYXVsdFF1ZXJ5T2JzZXJ2ZXJPcHRpb25zKG9wdGlvbnMpOyAvLyBNYWtlIHN1cmUgcmVzdWx0cyBhcmUgb3B0aW1pc3RpY2FsbHkgc2V0IGluIGZldGNoaW5nIHN0YXRlIGJlZm9yZSBzdWJzY3JpYmluZyBvciB1cGRhdGluZyBvcHRpb25zXG5cbiAgZGVmYXVsdGVkT3B0aW9ucy5vcHRpbWlzdGljUmVzdWx0cyA9IHRydWU7IC8vIEluY2x1ZGUgY2FsbGJhY2tzIGluIGJhdGNoIHJlbmRlcnNcblxuICBpZiAoZGVmYXVsdGVkT3B0aW9ucy5vbkVycm9yKSB7XG4gICAgZGVmYXVsdGVkT3B0aW9ucy5vbkVycm9yID0gbm90aWZ5TWFuYWdlci5iYXRjaENhbGxzKGRlZmF1bHRlZE9wdGlvbnMub25FcnJvcik7XG4gIH1cblxuICBpZiAoZGVmYXVsdGVkT3B0aW9ucy5vblN1Y2Nlc3MpIHtcbiAgICBkZWZhdWx0ZWRPcHRpb25zLm9uU3VjY2VzcyA9IG5vdGlmeU1hbmFnZXIuYmF0Y2hDYWxscyhkZWZhdWx0ZWRPcHRpb25zLm9uU3VjY2Vzcyk7XG4gIH1cblxuICBpZiAoZGVmYXVsdGVkT3B0aW9ucy5vblNldHRsZWQpIHtcbiAgICBkZWZhdWx0ZWRPcHRpb25zLm9uU2V0dGxlZCA9IG5vdGlmeU1hbmFnZXIuYmF0Y2hDYWxscyhkZWZhdWx0ZWRPcHRpb25zLm9uU2V0dGxlZCk7XG4gIH1cblxuICBpZiAoZGVmYXVsdGVkT3B0aW9ucy5zdXNwZW5zZSkge1xuICAgIC8vIEFsd2F5cyBzZXQgc3RhbGUgdGltZSB3aGVuIHVzaW5nIHN1c3BlbnNlIHRvIHByZXZlbnRcbiAgICAvLyBmZXRjaGluZyBhZ2FpbiB3aGVuIGRpcmVjdGx5IG1vdW50aW5nIGFmdGVyIHN1c3BlbmRpbmdcbiAgICBpZiAodHlwZW9mIGRlZmF1bHRlZE9wdGlvbnMuc3RhbGVUaW1lICE9PSAnbnVtYmVyJykge1xuICAgICAgZGVmYXVsdGVkT3B0aW9ucy5zdGFsZVRpbWUgPSAxMDAwO1xuICAgIH0gLy8gU2V0IGNhY2hlIHRpbWUgdG8gMSBpZiB0aGUgb3B0aW9uIGhhcyBiZWVuIHNldCB0byAwXG4gICAgLy8gd2hlbiB1c2luZyBzdXNwZW5zZSB0byBwcmV2ZW50IGluZmluaXRlIGxvb3Agb2YgZmV0Y2hlc1xuXG5cbiAgICBpZiAoZGVmYXVsdGVkT3B0aW9ucy5jYWNoZVRpbWUgPT09IDApIHtcbiAgICAgIGRlZmF1bHRlZE9wdGlvbnMuY2FjaGVUaW1lID0gMTtcbiAgICB9XG4gIH1cblxuICBpZiAoZGVmYXVsdGVkT3B0aW9ucy5zdXNwZW5zZSB8fCBkZWZhdWx0ZWRPcHRpb25zLnVzZUVycm9yQm91bmRhcnkpIHtcbiAgICAvLyBQcmV2ZW50IHJldHJ5aW5nIGZhaWxlZCBxdWVyeSBpZiB0aGUgZXJyb3IgYm91bmRhcnkgaGFzIG5vdCBiZWVuIHJlc2V0IHlldFxuICAgIGlmICghZXJyb3JSZXNldEJvdW5kYXJ5LmlzUmVzZXQoKSkge1xuICAgICAgZGVmYXVsdGVkT3B0aW9ucy5yZXRyeU9uTW91bnQgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICB2YXIgX1JlYWN0JHVzZVN0YXRlMiA9IFJlYWN0LnVzZVN0YXRlKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmVyKHF1ZXJ5Q2xpZW50LCBkZWZhdWx0ZWRPcHRpb25zKTtcbiAgfSksXG4gICAgICBvYnNlcnZlciA9IF9SZWFjdCR1c2VTdGF0ZTJbMF07XG5cbiAgdmFyIHJlc3VsdCA9IG9ic2VydmVyLmdldE9wdGltaXN0aWNSZXN1bHQoZGVmYXVsdGVkT3B0aW9ucyk7XG4gIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgbW91bnRlZFJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICBlcnJvclJlc2V0Qm91bmRhcnkuY2xlYXJSZXNldCgpO1xuICAgIHZhciB1bnN1YnNjcmliZSA9IG9ic2VydmVyLnN1YnNjcmliZShub3RpZnlNYW5hZ2VyLmJhdGNoQ2FsbHMoZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKG1vdW50ZWRSZWYuY3VycmVudCkge1xuICAgICAgICBmb3JjZVVwZGF0ZShmdW5jdGlvbiAoeCkge1xuICAgICAgICAgIHJldHVybiB4ICsgMTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSkpOyAvLyBVcGRhdGUgcmVzdWx0IHRvIG1ha2Ugc3VyZSB3ZSBkaWQgbm90IG1pc3MgYW55IHF1ZXJ5IHVwZGF0ZXNcbiAgICAvLyBiZXR3ZWVuIGNyZWF0aW5nIHRoZSBvYnNlcnZlciBhbmQgc3Vic2NyaWJpbmcgdG8gaXQuXG5cbiAgICBvYnNlcnZlci51cGRhdGVSZXN1bHQoKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgbW91bnRlZFJlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICB1bnN1YnNjcmliZSgpO1xuICAgIH07XG4gIH0sIFtlcnJvclJlc2V0Qm91bmRhcnksIG9ic2VydmVyXSk7XG4gIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgLy8gRG8gbm90IG5vdGlmeSBvbiB1cGRhdGVzIGJlY2F1c2Ugb2YgY2hhbmdlcyBpbiB0aGUgb3B0aW9ucyBiZWNhdXNlXG4gICAgLy8gdGhlc2UgY2hhbmdlcyBzaG91bGQgYWxyZWFkeSBiZSByZWZsZWN0ZWQgaW4gdGhlIG9wdGltaXN0aWMgcmVzdWx0LlxuICAgIG9ic2VydmVyLnNldE9wdGlvbnMoZGVmYXVsdGVkT3B0aW9ucywge1xuICAgICAgbGlzdGVuZXJzOiBmYWxzZVxuICAgIH0pO1xuICB9LCBbZGVmYXVsdGVkT3B0aW9ucywgb2JzZXJ2ZXJdKTsgLy8gSGFuZGxlIHN1c3BlbnNlXG5cbiAgaWYgKGRlZmF1bHRlZE9wdGlvbnMuc3VzcGVuc2UgJiYgcmVzdWx0LmlzTG9hZGluZykge1xuICAgIHRocm93IG9ic2VydmVyLmZldGNoT3B0aW1pc3RpYyhkZWZhdWx0ZWRPcHRpb25zKS50aGVuKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICB2YXIgZGF0YSA9IF9yZWYuZGF0YTtcbiAgICAgIGRlZmF1bHRlZE9wdGlvbnMub25TdWNjZXNzID09IG51bGwgPyB2b2lkIDAgOiBkZWZhdWx0ZWRPcHRpb25zLm9uU3VjY2VzcyhkYXRhKTtcbiAgICAgIGRlZmF1bHRlZE9wdGlvbnMub25TZXR0bGVkID09IG51bGwgPyB2b2lkIDAgOiBkZWZhdWx0ZWRPcHRpb25zLm9uU2V0dGxlZChkYXRhLCBudWxsKTtcbiAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgIGVycm9yUmVzZXRCb3VuZGFyeS5jbGVhclJlc2V0KCk7XG4gICAgICBkZWZhdWx0ZWRPcHRpb25zLm9uRXJyb3IgPT0gbnVsbCA/IHZvaWQgMCA6IGRlZmF1bHRlZE9wdGlvbnMub25FcnJvcihlcnJvcik7XG4gICAgICBkZWZhdWx0ZWRPcHRpb25zLm9uU2V0dGxlZCA9PSBudWxsID8gdm9pZCAwIDogZGVmYXVsdGVkT3B0aW9ucy5vblNldHRsZWQodW5kZWZpbmVkLCBlcnJvcik7XG4gICAgfSk7XG4gIH0gLy8gSGFuZGxlIGVycm9yIGJvdW5kYXJ5XG5cblxuICBpZiAocmVzdWx0LmlzRXJyb3IgJiYgIWVycm9yUmVzZXRCb3VuZGFyeS5pc1Jlc2V0KCkgJiYgIXJlc3VsdC5pc0ZldGNoaW5nICYmIHNob3VsZFRocm93RXJyb3IoZGVmYXVsdGVkT3B0aW9ucy5zdXNwZW5zZSwgZGVmYXVsdGVkT3B0aW9ucy51c2VFcnJvckJvdW5kYXJ5LCBbcmVzdWx0LmVycm9yLCBvYnNlcnZlci5nZXRDdXJyZW50UXVlcnkoKV0pKSB7XG4gICAgdGhyb3cgcmVzdWx0LmVycm9yO1xuICB9IC8vIEhhbmRsZSByZXN1bHQgcHJvcGVydHkgdXNhZ2UgdHJhY2tpbmdcblxuXG4gIGlmIChkZWZhdWx0ZWRPcHRpb25zLm5vdGlmeU9uQ2hhbmdlUHJvcHMgPT09ICd0cmFja2VkJykge1xuICAgIHJlc3VsdCA9IG9ic2VydmVyLnRyYWNrUmVzdWx0KHJlc3VsdCwgZGVmYXVsdGVkT3B0aW9ucyk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufSIsICJpbXBvcnQgeyBRdWVyeU9ic2VydmVyIH0gZnJvbSAnLi4vY29yZSc7XG5pbXBvcnQgeyBwYXJzZVF1ZXJ5QXJncyB9IGZyb20gJy4uL2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgdXNlQmFzZVF1ZXJ5IH0gZnJvbSAnLi91c2VCYXNlUXVlcnknOyAvLyBIT09LXG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VRdWVyeShhcmcxLCBhcmcyLCBhcmczKSB7XG4gIHZhciBwYXJzZWRPcHRpb25zID0gcGFyc2VRdWVyeUFyZ3MoYXJnMSwgYXJnMiwgYXJnMyk7XG4gIHJldHVybiB1c2VCYXNlUXVlcnkocGFyc2VkT3B0aW9ucywgUXVlcnlPYnNlcnZlcik7XG59IiwgImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7UXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIsIHVzZVF1ZXJ5fSBmcm9tIFwicmVhY3QtcXVlcnlcIjtcbmltcG9ydCB7RXVpTG9hZGluZ1NwaW5uZXIsIEV1aVByb3ZpZGVyLCBFdWlUZXh0fSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQgeyBPbHNBcGkgfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBpL09sc0FwaVwiO1xuaW1wb3J0IHsgZ2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5IH0gZnJvbSBcIi4uLy4uLy4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQge0Rlc2NyaXB0aW9uV2lkZ2V0UHJvcHN9IGZyb20gXCIuLi8uLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCB7IFRoaW5nIH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVsL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7IERlc2NyaXB0aW9uUHJlc2VudGF0aW9uIH0gZnJvbSBcIi4vRGVzY3JpcHRpb25QcmVzZW50YXRpb25cIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5cbmNvbnN0IE5PX0RFU0NSSVBUSU9OID0gXCJObyBkZXNjcmlwdGlvbiBhdmFpbGFibGUuXCI7XG5cbmZ1bmN0aW9uIERlc2NyaXB0aW9uV2lkZ2V0KHByb3BzOiBEZXNjcmlwdGlvbldpZGdldFByb3BzKSB7XG4gIGNvbnN0IHsgYXBpLCBvbnRvbG9neUlkLCBpcmksIGRlc2NUZXh0LCB0aGluZ1R5cGUsIHBhcmFtZXRlciwgdXNlTGVnYWN5LCAuLi5yZXN0IH0gPSBwcm9wcztcbiAgY29uc3Qgb2xzQXBpID0gbmV3IE9sc0FwaShhcGkpO1xuXG4gIGNvbnN0IHtcbiAgICBkYXRhLFxuICAgIGlzTG9hZGluZyxcbiAgICBpc1N1Y2Nlc3MsXG4gICAgaXNFcnJvcixcbiAgICBlcnJvclxuICB9ID0gdXNlUXVlcnk8VGhpbmc+KFxuICAgIFtcIm1ldGFkYXRhXCIsIGFwaSwgcGFyYW1ldGVyLCB0aGluZ1R5cGUsIGlyaSwgb250b2xvZ3lJZCwgdXNlTGVnYWN5XSxcbiAgICBhc3luYyAoKSA9PiB7XG4gICAgICByZXR1cm4gb2xzQXBpLmdldFRoaW5nT2JqZWN0KGlyaSwgdGhpbmdUeXBlLCBvbnRvbG9neUlkLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSk7XG4gICAgfVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHtpc0xvYWRpbmcgJiYgPEV1aUxvYWRpbmdTcGlubmVyIHNpemU9XCJzXCIgLz59XG4gICAgICB7aXNTdWNjZXNzICYmIGRhdGEgJiZcbiAgICAgICAgPERlc2NyaXB0aW9uUHJlc2VudGF0aW9uIGRlc2NyaXB0aW9uPXtkYXRhLmdldERlc2NyaXB0aW9uKCkgfHwgTk9fREVTQ1JJUFRJT059IGRlc2NUZXh0PXtkZXNjVGV4dH0gey4uLnJlc3R9Lz5cbiAgICAgIH1cbiAgICAgIHtpc0Vycm9yICYmIDxFdWlUZXh0PntnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkoZXJyb3IsIFwiZGVzY3JpcHRpb25cIil9PC9FdWlUZXh0Pn1cbiAgICA8Lz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRGVzY3JpcHRpb24ocHJvcHM6IERlc2NyaXB0aW9uV2lkZ2V0UHJvcHMsIGNvbnRhaW5lcjogRWxlbWVudCwgY2FsbGJhY2s/OigpPT52b2lkKSB7XG4gIFJlYWN0RE9NLnJlbmRlcihXcmFwcGVkRGVzY3JpcHRpb25XaWRnZXQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZERlc2NyaXB0aW9uV2lkZ2V0KHByb3BzOiBEZXNjcmlwdGlvbldpZGdldFByb3BzKSB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7XG4gIHJldHVybiAoXG4gICAgICA8RXVpUHJvdmlkZXIgY29sb3JNb2RlPVwibGlnaHRcIj5cbiAgICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgICAgPERlc2NyaXB0aW9uV2lkZ2V0XG4gICAgICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgICAgICBvbnRvbG9neUlkPXtwcm9wcy5vbnRvbG9neUlkfVxuICAgICAgICAgICAgICBpcmk9e3Byb3BzLmlyaX1cbiAgICAgICAgICAgICAgZGVzY1RleHQ9e3Byb3BzLmRlc2NUZXh0fVxuICAgICAgICAgICAgICB0aGluZ1R5cGU9e3Byb3BzLnRoaW5nVHlwZX1cbiAgICAgICAgICAgICAgcGFyYW1ldGVyPXtwcm9wcy5wYXJhbWV0ZXJ9XG4gICAgICAgICAgICAgIGNvbG9yPXtwcm9wcy5jb2xvcn1cbiAgICAgICAgICAgICAgdXNlTGVnYWN5PXtwcm9wcy51c2VMZWdhY3l9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICAgICAgPC9FdWlQcm92aWRlcj5cbiAgKVxufVxuXG5leHBvcnQgeyBEZXNjcmlwdGlvbldpZGdldCwgY3JlYXRlRGVzY3JpcHRpb24gfTtcbiIsICJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBFdWlUZXh0IH0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHtEZXNjcmlwdGlvblByZXNlbnRhdGlvblByb3BzfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5cbmZ1bmN0aW9uIERlc2NyaXB0aW9uUHJlc2VudGF0aW9uKHByb3BzOiBEZXNjcmlwdGlvblByZXNlbnRhdGlvblByb3BzKSB7XG4gIGNvbnN0IHtkZXNjVGV4dCwgZGVzY3JpcHRpb24sIC4uLnJlc3R9ID0gcHJvcHM7XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPEV1aVRleHQgey4uLnJlc3R9PntkZXNjVGV4dCB8fCBkZXNjcmlwdGlvbn08L0V1aVRleHQ+XG4gICAgPC8+XG4gICk7XG59XG5cbmV4cG9ydCB7IERlc2NyaXB0aW9uUHJlc2VudGF0aW9uIH07XG4iLCAiaW1wb3J0IFJlYWN0LCB7dXNlU3RhdGV9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtFdWlGbGV4SXRlbSwgRXVpTGluaywgRXVpUHJvdmlkZXIsIEV1aUJ1dHRvbkljb259IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7SXJpV2lkZ2V0UHJvcHN9IGZyb20gXCIuLi8uLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCB7aXNFdWlMaW5rQ29sb3IsIGlzSGV4Q29sb3IsIGlzUmdiQ29sb3J9IGZyb20gXCIuLi8uLi8uLi8uLi9hcHAvdXRpbFwiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcbmltcG9ydCB7UXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXJ9IGZyb20gXCJyZWFjdC1xdWVyeVwiO1xuXG5mdW5jdGlvbiBJcmlXaWRnZXQocHJvcHM6IElyaVdpZGdldFByb3BzKSB7ICAgICAgIFxuICBjb25zdCB7IGlyaSwgaXJpVGV4dCwgY29sb3IsIGV4dGVybmFsSWNvbiwgdXJsUHJlZml4LCBjb3B5QnV0dG9uIH0gPSBwcm9wcztcblxuICBjb25zdCBbY29waWVkLCBzZXRDb3BpZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuXG4gIGNvbnN0IHVybFByZWZpeEV4aXN0ID0gdHlwZW9mKHVybFByZWZpeCkgIT09IFwidW5kZWZpbmVkXCIgJiYgdXJsUHJlZml4ICE9PSBcIlwiID8gdHJ1ZSA6IGZhbHNlO1xuICBjb25zdCBpcmlVcmwgPSB1cmxQcmVmaXhFeGlzdCA/IHVybFByZWZpeCArIGVuY29kZVVSSUNvbXBvbmVudChpcmkpIDogaXJpO1xuXG4gIGNvbnN0IENvcHlMaW5rQnV0dG9uID0gKCkgPT4ge1xuICAgIGlmICghY29waWVkKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8RXVpQnV0dG9uSWNvbiBcbiAgICAgICAgICAgIGRpc3BsYXk9XCJiYXNlXCJcbiAgICAgICAgICAgIGljb25UeXBlPVwiY29weVwiICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIGtleT17XCJjb3B5LWJ0blwifVxuICAgICAgICAgICAgc3R5bGU9e3ttYXJnaW5MZWZ0OiBcIjVweFwiLCBjb2xvcjogY29sb3IgJiYgKGlzSGV4Q29sb3IoY29sb3IpIHx8IGlzUmdiQ29sb3IoY29sb3IpKSA/IGNvbG9yIDogXCJcIn19IFxuICAgICAgICAgICAgY29sb3I9e2NvbG9yICYmIGlzRXVpTGlua0NvbG9yKGNvbG9yKSA/IGNvbG9yIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4geyAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGlyaVVybCk7XG4gICAgICAgICAgICAgICAgc2V0Q29waWVkKHRydWUpO1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge3NldENvcGllZChmYWxzZSk7fSwgMjAwMCk7ICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID4gICAgICAgICAgICBcbiAgICAgICAgPC9FdWlCdXR0b25JY29uPlxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuICg8RXVpQnV0dG9uSWNvbiBcbiAgICAgICAgICAgICAgICBzdHlsZT17e21hcmdpbkxlZnQ6IFwiNXB4XCIsIGNvbG9yOiBjb2xvciAmJiAoaXNIZXhDb2xvcihjb2xvcikgfHwgaXNSZ2JDb2xvcihjb2xvcikpID8gY29sb3IgOiBcIlwifX0gICBcbiAgICAgICAgICAgICAgICBkaXNwbGF5PVwiYmFzZVwiIFxuICAgICAgICAgICAgICAgIGljb25UeXBlPVwiY2hlY2tcIiBcbiAgICAgICAgICAgICAgICBrZXk9e1wiY29weS1idG5cIn1cbiAgICAgICAgICAgICAgICBjb2xvcj17Y29sb3IgJiYgaXNFdWlMaW5rQ29sb3IoY29sb3IpID8gY29sb3IgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9FdWlCdXR0b25JY29uPlxuICAgICAgICAgICk7ICAgIFxuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPEV1aUZsZXhJdGVtIGdyb3c9e2ZhbHNlfT5cbiAgICAgIDxkaXY+XG4gICAgICAgIDxFdWlMaW5rIFxuICAgICAgICAgIGhyZWY9e2lyaVVybH0gXG4gICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCIgXG4gICAgICAgICAgc3R5bGU9e3tjb2xvcjogY29sb3IgJiYgKGlzSGV4Q29sb3IoY29sb3IpIHx8IGlzUmdiQ29sb3IoY29sb3IpKSA/IGNvbG9yIDogXCJcIn19IFxuICAgICAgICAgIGNvbG9yPXtjb2xvciAmJiBpc0V1aUxpbmtDb2xvcihjb2xvcikgPyBjb2xvciA6IHVuZGVmaW5lZH1cbiAgICAgICAgICBleHRlcm5hbD17ZXh0ZXJuYWxJY29ufVxuICAgICAgICAgID5cbiAgICAgICAgICB7aXJpVGV4dCA/IGlyaVRleHQgOiBpcml9ICAgICAgICAgIFxuICAgICAgICA8L0V1aUxpbms+XG4gICAgICAgIHtjb3B5QnV0dG9uICYmIDxDb3B5TGlua0J1dHRvbiAvPn1cbiAgICAgIDwvZGl2PlxuICAgIDwvRXVpRmxleEl0ZW0+XG4gICk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUlyaShwcm9wczogSXJpV2lkZ2V0UHJvcHMsIGNvbnRhaW5lcjogRWxlbWVudCwgY2FsbGJhY2s/OiAoKT0+dm9pZCkgeyAgICAgICBcbiAgICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZElyaVdpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkSXJpV2lkZ2V0KHByb3BzOiBJcmlXaWRnZXRQcm9wcykge1xuICAgIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7ICAgIFxuICAgIHJldHVybiAoXG4gICAgICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgICAgICAgICAgPElyaVdpZGdldFxuICAgICAgICAgICAgICAgICAgICBpcmk9e3Byb3BzLmlyaX1cbiAgICAgICAgICAgICAgICAgICAgaXJpVGV4dD17cHJvcHMuaXJpVGV4dH1cbiAgICAgICAgICAgICAgICAgICAgY29sb3I9e3Byb3BzLmNvbG9yfVxuICAgICAgICAgICAgICAgICAgICBleHRlcm5hbEljb249e3Byb3BzLmV4dGVybmFsSWNvbn1cbiAgICAgICAgICAgICAgICAgICAgdXJsUHJlZml4PXtwcm9wcy51cmxQcmVmaXh9XG4gICAgICAgICAgICAgICAgICAgIGNvcHlCdXR0b249e3Byb3BzLmNvcHlCdXR0b259XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICAgICAgPC9FdWlQcm92aWRlcj5cbiAgICApXG59XG5cbmV4cG9ydCB7IElyaVdpZGdldCwgY3JlYXRlSXJpIH07XG4iLCAiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtFdWlCYWRnZSwgRXVpTG9hZGluZ1NwaW5uZXIsIEV1aVByb3ZpZGVyfSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQge09sc0FwaX0gZnJvbSBcIi4uLy4uLy4uLy4uL2FwaS9PbHNBcGlcIjtcbmltcG9ydCB7IGdldEVycm9yTWVzc2FnZVRvRGlzcGxheSB9IGZyb20gXCIuLi8uLi8uLi8uLi9hcHAvdXRpbFwiO1xuaW1wb3J0IHtCcmVhZGNydW1iV2lkZ2V0UHJvcHN9IGZyb20gXCIuLi8uLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCB7IGlzRW50aXR5IH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVsL01vZGVsVHlwZUNoZWNrXCI7XG5pbXBvcnQgeyBCcmVhZGNydW1iUHJlc2VudGF0aW9uIH0gZnJvbSBcIi4vQnJlYWRjcnVtYlByZXNlbnRhdGlvblwiO1xuaW1wb3J0IHtRdWVyeUNsaWVudCwgUXVlcnlDbGllbnRQcm92aWRlciwgdXNlUXVlcnl9IGZyb20gXCJyZWFjdC1xdWVyeVwiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcblxuZnVuY3Rpb24gQnJlYWRjcnVtYldpZGdldChwcm9wczogQnJlYWRjcnVtYldpZGdldFByb3BzKSB7XG4gIGNvbnN0IHsgYXBpLCBvbnRvbG9neUlkLCBpcmksIGVudGl0eVR5cGUsIGNvbG9yRmlyc3QsIGNvbG9yU2Vjb25kLCBwYXJhbWV0ZXIgLCB1c2VMZWdhY3l9ID0gcHJvcHM7XG4gIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICBjb25zdCB7XG4gICAgZGF0YSxcbiAgICBpc0xvYWRpbmcsXG4gICAgaXNTdWNjZXNzLFxuICAgIGlzRXJyb3IsXG4gICAgZXJyb3JcbiAgfSA9IHVzZVF1ZXJ5KFxuICAgIFtcIm1ldGFkYXRhXCIsIGFwaSwgcGFyYW1ldGVyLCBlbnRpdHlUeXBlLCBpcmksIG9udG9sb2d5SWQsIHVzZUxlZ2FjeV0sXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgcmV0dXJuIG9sc0FwaS5nZXRFbnRpdHlPYmplY3QoaXJpLCBlbnRpdHlUeXBlLCBvbnRvbG9neUlkLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSk7XG4gICAgfVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHtpc0xvYWRpbmcgJiZcbiAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICA8RXVpQmFkZ2UgY29sb3I9e2NvbG9yRmlyc3QgfHwgKChwcm9wcy5vbnRvbG9neUlkKSA/IFwicHJpbWFyeVwiIDogXCJ3YXJuaW5nXCIpfT57cHJvcHMub250b2xvZ3lJZD8udG9VcHBlckNhc2UoKSB8fCA8RXVpTG9hZGluZ1NwaW5uZXIgc2l6ZT17XCJzXCJ9Lz59PC9FdWlCYWRnZT5cbiAgICAgICAgICAgIHtcIiA+IFwifVxuICAgICAgICAgICAgPEV1aUJhZGdlIGNvbG9yPXtjb2xvclNlY29uZCB8fCBcIndhcm5pbmdcIn0+ezxFdWlMb2FkaW5nU3Bpbm5lciBzaXplPXtcInNcIn0vPn08L0V1aUJhZGdlPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgIH1cbiAgICAgIHtpc1N1Y2Nlc3MgJiYgZGF0YSAmJiBpc0VudGl0eShkYXRhKSAmJlxuICAgICAgICA8QnJlYWRjcnVtYlByZXNlbnRhdGlvblxuICAgICAgICAgIGlzRGVmaW5pbmdPbnRvbG9neT17ZGF0YS5nZXRJc0RlZmluaW5nT250b2xvZ3koKX1cbiAgICAgICAgICBvbnRvbG9neU5hbWU9e2RhdGEuZ2V0T250b2xvZ3lJZCgpfVxuICAgICAgICAgIHNob3J0Rm9ybT17ZGF0YS5nZXRTaG9ydEZvcm0oKX1cbiAgICAgICAgICBvbnRvbG9neUlkPXtvbnRvbG9neUlkfVxuICAgICAgICAvPlxuICAgICAgfVxuICAgICAge2lzRXJyb3IgJiZcbiAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICA8RXVpQmFkZ2UgY29sb3I9e2NvbG9yRmlyc3QgfHwgKChwcm9wcy5vbnRvbG9neUlkIHx8IChkYXRhICYmIGRhdGEuZ2V0T250b2xvZ3lJZCgpKSkgPyBcInByaW1hcnlcIiA6IFwiZGFuZ2VyXCIpfT57cHJvcHMub250b2xvZ3lJZD8udG9VcHBlckNhc2UoKSB8fCAoZGF0YSAmJiBkYXRhLmdldE9udG9sb2d5SWQoKS50b1VwcGVyQ2FzZSgpKSB8fCBnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkoZXJyb3IsIFwib250b2xvZ3lcIil9PC9FdWlCYWRnZT5cbiAgICAgICAgICAgIHtcIiA+IFwifVxuICAgICAgICAgICAgPEV1aUJhZGdlIGNvbG9yPXtjb2xvclNlY29uZCB8fCAoKGRhdGEgJiYgZGF0YS5nZXRTaG9ydEZvcm0oKSkgPyBcInN1Y2Nlc3NcIiA6IFwiZGFuZ2VyXCIpfT57KGRhdGEgJiYgZGF0YS5nZXRTaG9ydEZvcm0oKSkgPyBkYXRhLmdldFNob3J0Rm9ybSgpLnRvVXBwZXJDYXNlKCkgOiBnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkoZXJyb3IsIFwic2hvcnQgZm9ybVwiKX08L0V1aUJhZGdlPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgfVxuICAgICAgPC8+XG4gICk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJyZWFkY3J1bWIocHJvcHM6IEJyZWFkY3J1bWJXaWRnZXRQcm9wcywgY29udGFpbmVyOiBFbGVtZW50LCBjYWxsYmFjaz86KCk9PnZvaWQpIHtcbiAgUmVhY3RET00ucmVuZGVyKFdyYXBwZWRCcmVhZGNydW1iV2lkZ2V0KHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIFdyYXBwZWRCcmVhZGNydW1iV2lkZ2V0KHByb3BzOiBCcmVhZGNydW1iV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTtcbiAgcmV0dXJuIChcbiAgICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgICA8QnJlYWRjcnVtYldpZGdldFxuICAgICAgICAgICAgICBhcGk9e3Byb3BzLmFwaX1cbiAgICAgICAgICAgICAgZW50aXR5VHlwZT17cHJvcHMuZW50aXR5VHlwZX1cbiAgICAgICAgICAgICAgaXJpPXtwcm9wcy5pcml9XG4gICAgICAgICAgICAgIG9udG9sb2d5SWQ9e3Byb3BzLm9udG9sb2d5SWR9XG4gICAgICAgICAgICAgIGNvbG9yRmlyc3Q9e3Byb3BzLmNvbG9yRmlyc3R9XG4gICAgICAgICAgICAgIGNvbG9yU2Vjb25kPXtwcm9wcy5jb2xvclNlY29uZH1cbiAgICAgICAgICAgICAgcGFyYW1ldGVyPXtwcm9wcy5wYXJhbWV0ZXJ9XG4gICAgICAgICAgICAgIHVzZUxlZ2FjeT17cHJvcHMudXNlTGVnYWN5fVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICAgIDwvRXVpUHJvdmlkZXI+XG4gIClcbn1cblxuZXhwb3J0IHsgQnJlYWRjcnVtYldpZGdldCwgY3JlYXRlQnJlYWRjcnVtYiB9O1xuIiwgImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7RXVpQmFkZ2V9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7QnJlYWRjcnVtYlByZXNlbnRhdGlvblByb3BzfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5cbmZ1bmN0aW9uIEJyZWFkY3J1bWJQcmVzZW50YXRpb24ocHJvcHM6IEJyZWFkY3J1bWJQcmVzZW50YXRpb25Qcm9wcykge1xuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICAgIDxzcGFuPlxuICAgICAgICAgIDxFdWlCYWRnZSBjb2xvcj17cHJvcHMuY29sb3JGaXJzdCB8fCBcInByaW1hcnlcIn0+XG4gICAgICAgICAgICB7cHJvcHMub250b2xvZ3lOYW1lLnRvVXBwZXJDYXNlKCl9XG4gICAgICAgICAgPC9FdWlCYWRnZT5cbiAgICAgICAgICB7XCIgPiBcIn1cbiAgICAgICAgICA8RXVpQmFkZ2UgY29sb3I9e3Byb3BzLmNvbG9yU2Vjb25kIHx8IFwic3VjY2Vzc1wifT5cbiAgICAgICAgICAgIHtwcm9wcy5zaG9ydEZvcm0gPyBwcm9wcy5zaG9ydEZvcm0udG9VcHBlckNhc2UoKSA6IFwiTm8gc2hvcnQgZm9ybSBhdmFpbGFibGVcIn1cbiAgICAgICAgICA8L0V1aUJhZGdlPlxuICAgICAgICA8L3NwYW4+XG4gICAgPC8+XG4gICk7XG59XG5cbmV4cG9ydCB7IEJyZWFkY3J1bWJQcmVzZW50YXRpb24gfTtcbiIsICJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge0V1aUxvYWRpbmdTcGlubmVyLCBFdWlQcm92aWRlciwgRXVpVGV4dH0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHsgT2xzQXBpIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vYXBpL09sc0FwaSdcbmltcG9ydCB7UXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIsIHVzZVF1ZXJ5fSBmcm9tICdyZWFjdC1xdWVyeSdcbmltcG9ydCB7IGdldEVycm9yTWVzc2FnZVRvRGlzcGxheSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9hcHAvdXRpbFwiO1xuaW1wb3J0IHtBbHRlcm5hdGl2ZU5hbWVUYWJXaWRnZXRQcm9wc30gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IHsgVGhpbmcgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vbW9kZWwvaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgaXNFbnRpdHkgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vbW9kZWwvTW9kZWxUeXBlQ2hlY2tcIjtcbmltcG9ydCB7IEFsdGVybmF0aXZlTmFtZVRhYlByZXNlbnRhdGlvbiB9IGZyb20gXCIuL0FsdGVybmF0aXZlTmFtZVRhYlByZXNlbnRhdGlvblwiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcblxuZnVuY3Rpb24gQWx0ZXJuYXRpdmVOYW1lVGFiV2lkZ2V0KHByb3BzOiBBbHRlcm5hdGl2ZU5hbWVUYWJXaWRnZXRQcm9wcykge1xuICBjb25zdCB7IGlyaSwgYXBpLCBwYXJhbWV0ZXIsIGVudGl0eVR5cGUsIG9udG9sb2d5SWQsIHVzZUxlZ2FjeSB9ID0gcHJvcHM7XG4gIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICBjb25zdCB7XG4gICAgZGF0YSxcbiAgICBpc0xvYWRpbmcsXG4gICAgaXNTdWNjZXNzLFxuICAgIGlzRXJyb3IsXG4gICAgZXJyb3JcbiAgfSA9IHVzZVF1ZXJ5PFRoaW5nPihcbiAgICBbXCJtZXRhZGF0YVwiLCBhcGksIHBhcmFtZXRlciwgZW50aXR5VHlwZSwgaXJpLCBvbnRvbG9neUlkLCB1c2VMZWdhY3ldLFxuICAgIGFzeW5jICgpID0+IHtcbiAgICAgIHJldHVybiBvbHNBcGkuZ2V0RW50aXR5T2JqZWN0KGlyaSwgZW50aXR5VHlwZSwgb250b2xvZ3lJZCwgcGFyYW1ldGVyLCB1c2VMZWdhY3kpO1xuICAgIH1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICB7aXNTdWNjZXNzICYmIGRhdGEgJiYgaXNFbnRpdHkoZGF0YSkgJiZcbiAgICAgICAgPEFsdGVybmF0aXZlTmFtZVRhYlByZXNlbnRhdGlvbiBzeW5vbnltcz17ZGF0YS5nZXRTeW5vbnltcygpLm1hcChzeW5vbnltID0+IHN5bm9ueW0udmFsdWUpfSAvPn1cbiAgICAgIHtpc0xvYWRpbmcgJiYgPEV1aUxvYWRpbmdTcGlubmVyIC8+fVxuICAgICAge2lzRXJyb3IgJiYgPEV1aVRleHQ+e2dldEVycm9yTWVzc2FnZVRvRGlzcGxheShlcnJvciwgXCJhbHRlcm5hdGl2ZSBuYW1lc1wiKX08L0V1aVRleHQ+fVxuICAgIDwvPlxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVBbHRlcm5hdGl2ZU5hbWVUYWIocHJvcHM6IEFsdGVybmF0aXZlTmFtZVRhYldpZGdldFByb3BzLCBjb250YWluZXI6IEVsZW1lbnQsIGNhbGxiYWNrPzogKCk9PnZvaWQpIHtcbiAgICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZEFsdGVybmF0aXZlTmFtZVRhYldpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkQWx0ZXJuYXRpdmVOYW1lVGFiV2lkZ2V0KHByb3BzOiBBbHRlcm5hdGl2ZU5hbWVUYWJXaWRnZXRQcm9wcykge1xuICAgIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCI+XG4gICAgICAgICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgICAgICAgICA8QWx0ZXJuYXRpdmVOYW1lVGFiV2lkZ2V0XG4gICAgICAgICAgICAgICAgICAgIGlyaT17cHJvcHMuaXJpfVxuICAgICAgICAgICAgICAgICAgICBhcGk9e3Byb3BzLmFwaX1cbiAgICAgICAgICAgICAgICAgICAgb250b2xvZ3lJZD17cHJvcHMub250b2xvZ3lJZH1cbiAgICAgICAgICAgICAgICAgICAgZW50aXR5VHlwZT17cHJvcHMuZW50aXR5VHlwZX1cbiAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyPXtwcm9wcy5wYXJhbWV0ZXJ9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICAgICAgPC9FdWlQcm92aWRlcj5cbiAgICApXG59XG5cbmV4cG9ydCB7IEFsdGVybmF0aXZlTmFtZVRhYldpZGdldCwgY3JlYXRlQWx0ZXJuYXRpdmVOYW1lVGFiIH07XG4iLCAiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgRXVpRmxleEdyb3VwLCBFdWlGbGV4SXRlbSwgRXVpUGFuZWwsIEV1aVRleHQgfSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQge0FsdGVybmF0aXZlTmFtZVRhYldpZGdldFByZXNlbnRhdGlvblByb3BzfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5cbmZ1bmN0aW9uIEFsdGVybmF0aXZlTmFtZVRhYlByZXNlbnRhdGlvbihwcm9wczogQWx0ZXJuYXRpdmVOYW1lVGFiV2lkZ2V0UHJlc2VudGF0aW9uUHJvcHMpIHtcblxuICBmdW5jdGlvbiByZW5kZXJBbHRMYWJlbCgpIHtcbiAgICBpZiAocHJvcHMuc3lub255bXMgJiYgcHJvcHMuc3lub255bXMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHByb3BzLnN5bm9ueW1zLm1hcCgodmFsdWU6IHN0cmluZywgaW5kZXg6IG51bWJlcikgPT4gKFxuICAgICAgICA8RXVpRmxleEl0ZW0ga2V5PXt2YWx1ZSArIGluZGV4fT57dmFsdWV9PC9FdWlGbGV4SXRlbT5cbiAgICAgICkpO1xuICAgIH1cbiAgICByZXR1cm4gPEV1aVRleHQ+Tm8gYWx0ZXJuYXRpdmUgbmFtZXMgZXhpc3QuPC9FdWlUZXh0PjtcbiAgfVxuXG4gIC8vIFVzaW5nIHJlaWZpY2F0aW9uL3Bhc3NpbmcgdGhlIEVudGl0eSBjbGFzcyBjb3VsZCBwcm92aWRlIG1vcmUgaW5mb3JtYXRpb25cbiAgLy8gZnVuY3Rpb24gcmVuZGVyQWx0TGFiZWwoZW50aXR5OiBFbnRpdHkpIHtcbiAgLy8gICBpZiAoZW50aXR5LmdldFN5bm9ueW1zKCkubGVuZ3RoID4gMCkge1xuICAvLyAgICAgcmV0dXJuIGVudGl0eS5nZXRTeW5vbnltcygpLm1hcCgocmY6IFJlaWZpZWQ8YW55PiwgaW5kZXg6IG51bWJlcikgPT4gKFxuICAvLyAgICAgICA8cCBrZXk9e3JmLnZhbHVlICsgaW5kZXh9PntnZXRSZWlmaWVkSlNYKGVudGl0eSwgcmYsIGFwaSl9PC9wPlxuICAvLyAgICAgKSk7XG4gIC8vICAgfVxuICAvLyAgIHJldHVybiA8RXVpVGV4dD5ObyBhbHRlcm5hdGl2ZSBuYW1lcyBleGlzdC48L0V1aVRleHQ+O1xuICAvLyB9XG5cbiAgcmV0dXJuIChcbiAgICA8RXVpUGFuZWw+XG4gICAgICA8RXVpRmxleEdyb3VwIHN0eWxlPXt7IHBhZGRpbmc6IDEwIH19IGRpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICB7cmVuZGVyQWx0TGFiZWwoKX1cbiAgICAgIDwvRXVpRmxleEdyb3VwPlxuICAgIDwvRXVpUGFuZWw+XG4gICk7XG59XG5cbmV4cG9ydCB7IEFsdGVybmF0aXZlTmFtZVRhYlByZXNlbnRhdGlvbiB9O1xuIiwgImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7RXVpTG9hZGluZ1NwaW5uZXIsIEV1aVByb3ZpZGVyLCBFdWlUZXh0fSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQgeyBPbHNBcGkgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vYXBpL09sc0FwaVwiO1xuaW1wb3J0IHtRdWVyeUNsaWVudCwgUXVlcnlDbGllbnRQcm92aWRlciwgdXNlUXVlcnl9IGZyb20gXCJyZWFjdC1xdWVyeVwiO1xuaW1wb3J0IHsgZ2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5IH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQgeyBDcm9zc1JlZldpZGdldFByb3BzIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IHsgVGhpbmcgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vbW9kZWwvaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgaXNFbnRpdHkgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vbW9kZWwvTW9kZWxUeXBlQ2hlY2tcIjtcbmltcG9ydCB7IENyb3NzUmVmVGFiUHJlc2VudGF0aW9uIH0gZnJvbSBcIi4vQ3Jvc3NSZWZUYWJQcmVzZW50YXRpb25cIjtcbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuLi8uLi8uLi8uLi8uLi9tb2RlbC9SZWlmaWVkXCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuXG5mdW5jdGlvbiBDcm9zc1JlZlRhYldpZGdldChwcm9wczogQ3Jvc3NSZWZXaWRnZXRQcm9wcykge1xuICBjb25zdCB7IGlyaSwgYXBpLCBwYXJhbWV0ZXIsIGVudGl0eVR5cGUsIG9udG9sb2d5SWQsIHVzZUxlZ2FjeSB9ID0gcHJvcHM7XG4gIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICBjb25zdCB7XG4gICAgZGF0YSxcbiAgICBpc0xvYWRpbmcsXG4gICAgaXNTdWNjZXNzLFxuICAgIGlzRXJyb3IsXG4gICAgZXJyb3JcbiAgfSA9IHVzZVF1ZXJ5PFRoaW5nPihcbiAgICBbXCJtZXRhZGF0YVwiLCBhcGksIHBhcmFtZXRlciwgZW50aXR5VHlwZSwgaXJpLCBvbnRvbG9neUlkLCB1c2VMZWdhY3ldLFxuICAgIGFzeW5jICgpID0+IHtcbiAgICAgIHJldHVybiBvbHNBcGkuZ2V0RW50aXR5T2JqZWN0KGlyaSwgZW50aXR5VHlwZSwgb250b2xvZ3lJZCwgcGFyYW1ldGVyLCB1c2VMZWdhY3kpO1xuICAgIH1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICB7aXNTdWNjZXNzICYmIGRhdGEgJiYgaXNFbnRpdHkoZGF0YSkgJiZcbiAgICAgICAgPENyb3NzUmVmVGFiUHJlc2VudGF0aW9uIGNyb3NzcmVmcz17UmVpZmllZC5mcm9tSnNvbihkYXRhLmdldENyb3NzUmVmZXJlbmNlcygpKS5tYXAoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlLnZhbHVlO1xuICAgICAgICB9KX0gLz59XG4gICAgICB7aXNMb2FkaW5nICYmIDxFdWlMb2FkaW5nU3Bpbm5lciAvPn1cbiAgICAgIHtpc0Vycm9yICYmIDxFdWlUZXh0PntnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkoZXJyb3IsIFwiY3Jvc3MgcmVmZXJlbmNlc1wiKX08L0V1aVRleHQ+fVxuICAgIDwvPlxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVDcm9zc1JlZlRhYihwcm9wczogQ3Jvc3NSZWZXaWRnZXRQcm9wcywgY29udGFpbmVyOiBFbGVtZW50LCBjYWxsYmFjaz86ICgpPT52b2lkKSB7XG4gICAgUmVhY3RET00ucmVuZGVyKFdyYXBwZWRDcm9zc1JlZlRhYldpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkQ3Jvc3NSZWZUYWJXaWRnZXQocHJvcHM6IENyb3NzUmVmV2lkZ2V0UHJvcHMpIHtcbiAgICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICAgIHJldHVybiAoXG4gICAgICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgICAgICAgICAgPENyb3NzUmVmVGFiV2lkZ2V0XG4gICAgICAgICAgICAgICAgICAgIGlyaT17cHJvcHMuaXJpfVxuICAgICAgICAgICAgICAgICAgICBhcGk9e3Byb3BzLmFwaX1cbiAgICAgICAgICAgICAgICAgICAgb250b2xvZ3lJZD17cHJvcHMub250b2xvZ3lJZH1cbiAgICAgICAgICAgICAgICAgICAgZW50aXR5VHlwZT17cHJvcHMuZW50aXR5VHlwZX1cbiAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyPXtwcm9wcy5wYXJhbWV0ZXJ9XG4gICAgICAgICAgICAgICAgICAgIHVzZUxlZ2FjeT17cHJvcHMudXNlTGVnYWN5fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgICAgIDwvRXVpUHJvdmlkZXI+XG4gICAgKVxufVxuXG5leHBvcnQgeyBDcm9zc1JlZlRhYldpZGdldCwgY3JlYXRlQ3Jvc3NSZWZUYWIgfTtcbiIsICJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBFdWlGbGV4R3JvdXAsIEV1aUZsZXhJdGVtLCBFdWlQYW5lbCwgRXVpVGV4dCB9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7Q3Jvc3NSZWZQcmVzZW50YXRpb25Qcm9wc30gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL2FwcC90eXBlc1wiO1xuXG5mdW5jdGlvbiBDcm9zc1JlZlRhYlByZXNlbnRhdGlvbihwcm9wczogQ3Jvc3NSZWZQcmVzZW50YXRpb25Qcm9wcykge1xuXG4gIGZ1bmN0aW9uIHJlbmRlckNyb3NzUmVmcyhjcm9zc3JlZnM6IGFueSkge1xuICAgIGlmIChjcm9zc3JlZnMgJiYgY3Jvc3NyZWZzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBjcm9zc3JlZnM/Lm1hcCgoaXRlbTogYW55LCBpbmRleDogYW55KSA9PiAoXG4gICAgICAgIDxFdWlGbGV4SXRlbSBrZXk9e2luZGV4fT5cbiAgICAgICAgICB7aXRlbX1cbiAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICkpO1xuICAgIH1cbiAgICByZXR1cm4gPEV1aVRleHQ+Tm8gY3Jvc3MgcmVmZXJlbmNlcyBleGlzdC48L0V1aVRleHQ+O1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8RXVpUGFuZWw+XG4gICAgICA8PlxuICAgICAgICA8RXVpRmxleEdyb3VwIHN0eWxlPXt7IHBhZGRpbmc6IDcgfX0gZGlyZWN0aW9uPVwiY29sdW1uXCI+XG4gICAgICAgICAge3JlbmRlckNyb3NzUmVmcyhwcm9wcy5jcm9zc3JlZnMpfVxuICAgICAgICA8L0V1aUZsZXhHcm91cD5cbiAgICAgIDwvPlxuICAgIDwvRXVpUGFuZWw+XG4gICk7XG59XG5cbmV4cG9ydCB7IENyb3NzUmVmVGFiUHJlc2VudGF0aW9uIH07XG4iLCAiaW1wb3J0IHtFdWlQYW5lbCwgRXVpUHJvdmlkZXJ9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBcIkB6Ym1lZC9vbHMtdHJlZXZpZXdcIlxuaW1wb3J0IFwiLi4vLi4vLi4vLi4vLi4vc3R5bGUvdHJlZXN0eWxlcy5jc3NcIjtcbmltcG9ydCB7SGllcmFyY2h5V2lkZ2V0UHJvcHN9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCB7cGx1cmFsaXplVHlwZX0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQge1F1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyfSBmcm9tIFwicmVhY3QtcXVlcnlcIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5cbmNvbnN0IEhpZXJhcmNoeVdpZGdldCA9IChwcm9wczogSGllcmFyY2h5V2lkZ2V0UHJvcHMpID0+IHtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHRyZWVDb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjdHJlZV9jb250YWluZXInKTtcbiAgICAod2luZG93IGFzIGFueSlbXCJPTFNXaWRnZXRzXCJdLmNyZWF0ZUVudGl0eVRyZWUoe1xuICAgICAgaXJpOiBwcm9wcy5pcmksXG4gICAgICBvbnRvbG9neUlkOiBwcm9wcy5vbnRvbG9neUlkLFxuICAgICAgYXBpVXJsOiBwcm9wcy5hcGkuc3Vic3RyaW5nKDAsIHByb3BzLmFwaS5sYXN0SW5kZXhPZihcImFwaVwiKSksXG4gICAgICBlbnRpdHlUeXBlOiAocHJvcHMuZW50aXR5VHlwZSA/IHBsdXJhbGl6ZVR5cGUocHJvcHMuZW50aXR5VHlwZSwgZmFsc2UpIDogdW5kZWZpbmVkKSB8fCBcImVudGl0aWVzXCIsXG4gICAgICBvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSA/IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSA6IChvbnRvbG9neUlkOiBzdHJpbmcsIGVudGl0eVR5cGU6IHN0cmluZywgaXJpOiBzdHJpbmcpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coYG5hdmlnYXRlIHRvIGVudGl0eSB3aXRoIG9udG9sb2d5SWQ6ICR7b250b2xvZ3lJZH0sIGVudGl0eVR5cGU6ICR7ZW50aXR5VHlwZX0sIGlyaTogJHtpcml9YCwpO1xuICAgICAgfSxcbiAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSA/IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5IDogKG9udG9sb2d5SWQ6IHN0cmluZywgZW50aXR5VHlwZTogc3RyaW5nLCBpcmk6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhgbmF2aWdhdGUgdG8gb250b2xvZ3kgd2l0aCBvbnRvbG9neUlkOiAke29udG9sb2d5SWR9LCBlbnRpdHlUeXBlOiAke2VudGl0eVR5cGV9LCBpcmk6ICR7aXJpfWAsKTtcbiAgICAgIH1cbiAgICB9LCB0cmVlQ29udGFpbmVyKTtcbiAgfSwgW3Byb3BzLmFwaSwgcHJvcHMuaXJpLCBwcm9wcy5vbnRvbG9neUlkLCBwcm9wcy5lbnRpdHlUeXBlLCBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHksIHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LCBcImhpZXJhcmNoeVdpZGdldFwiXSk7XG5cbiAgcmV0dXJuIChcbiAgICAvL21pbldpZHRoIHJlcXVpcmVkIHdvcmthcm91bmQgdW50aWwgb3ZlcmxhcHBpbmcgY2hlY2tib3hlcyBhcmUgZml4ZWQgaW4gb2xzNC13aWRnZXRzXG4gICAgPEV1aVBhbmVsIHN0eWxlPXt7bWluV2lkdGg6IFwiNjAwcHhcIn19PlxuICAgICAgPGRpdiBpZD1cInRyZWVfY29udGFpbmVyXCIvPlxuICAgIDwvRXVpUGFuZWw+XG4gICk7XG59O1xuXG5mdW5jdGlvbiBjcmVhdGVIaWVyYXJjaHkocHJvcHM6IEhpZXJhcmNoeVdpZGdldFByb3BzLCBjb250YWluZXI6IEVsZW1lbnQsIGNhbGxiYWNrPzogKCk9PnZvaWQpIHtcbiAgUmVhY3RET00ucmVuZGVyKFdyYXBwZWRIaWVyYXJjaHlXaWRnZXQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZEhpZXJhcmNoeVdpZGdldChwcm9wczogSGllcmFyY2h5V2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTtcbiAgcmV0dXJuIChcbiAgICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgICA8SGllcmFyY2h5V2lkZ2V0XG4gICAgICAgICAgICAgIG9udG9sb2d5SWQ9e3Byb3BzLm9udG9sb2d5SWR9XG4gICAgICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgICAgICBpcmk9e3Byb3BzLmlyaX1cbiAgICAgICAgICAgICAgZW50aXR5VHlwZT17cHJvcHMuZW50aXR5VHlwZX1cbiAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvRW50aXR5PXtwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHl9XG4gICAgICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5PXtwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgICA8L0V1aVByb3ZpZGVyPlxuICApXG59XG5cbmV4cG9ydCB7IEhpZXJhcmNoeVdpZGdldCwgY3JlYXRlSGllcmFyY2h5IH07XG4iLCAiLypcbm9iamVjdC1hc3NpZ25cbihjKSBTaW5kcmUgU29yaHVzXG5AbGljZW5zZSBNSVRcbiovXG5cbid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgcHJvcElzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbmZ1bmN0aW9uIHRvT2JqZWN0KHZhbCkge1xuXHRpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignT2JqZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWQnKTtcblx0fVxuXG5cdHJldHVybiBPYmplY3QodmFsKTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkVXNlTmF0aXZlKCkge1xuXHR0cnkge1xuXHRcdGlmICghT2JqZWN0LmFzc2lnbikge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIERldGVjdCBidWdneSBwcm9wZXJ0eSBlbnVtZXJhdGlvbiBvcmRlciBpbiBvbGRlciBWOCB2ZXJzaW9ucy5cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTQxMThcblx0XHR2YXIgdGVzdDEgPSBuZXcgU3RyaW5nKCdhYmMnKTsgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3LXdyYXBwZXJzXG5cdFx0dGVzdDFbNV0gPSAnZGUnO1xuXHRcdGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MSlbMF0gPT09ICc1Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMwNTZcblx0XHR2YXIgdGVzdDIgPSB7fTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IDEwOyBpKyspIHtcblx0XHRcdHRlc3QyWydfJyArIFN0cmluZy5mcm9tQ2hhckNvZGUoaSldID0gaTtcblx0XHR9XG5cdFx0dmFyIG9yZGVyMiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QyKS5tYXAoZnVuY3Rpb24gKG4pIHtcblx0XHRcdHJldHVybiB0ZXN0MltuXTtcblx0XHR9KTtcblx0XHRpZiAob3JkZXIyLmpvaW4oJycpICE9PSAnMDEyMzQ1Njc4OScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XG5cdFx0dmFyIHRlc3QzID0ge307XG5cdFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jy5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAobGV0dGVyKSB7XG5cdFx0XHR0ZXN0M1tsZXR0ZXJdID0gbGV0dGVyO1xuXHRcdH0pO1xuXHRcdGlmIChPYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LCB0ZXN0MykpLmpvaW4oJycpICE9PVxuXHRcdFx0XHQnYWJjZGVmZ2hpamtsbW5vcHFyc3QnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGVycikge1xuXHRcdC8vIFdlIGRvbid0IGV4cGVjdCBhbnkgb2YgdGhlIGFib3ZlIHRvIHRocm93LCBidXQgYmV0dGVyIHRvIGJlIHNhZmUuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2hvdWxkVXNlTmF0aXZlKCkgPyBPYmplY3QuYXNzaWduIDogZnVuY3Rpb24gKHRhcmdldCwgc291cmNlKSB7XG5cdHZhciBmcm9tO1xuXHR2YXIgdG8gPSB0b09iamVjdCh0YXJnZXQpO1xuXHR2YXIgc3ltYm9scztcblxuXHRmb3IgKHZhciBzID0gMTsgcyA8IGFyZ3VtZW50cy5sZW5ndGg7IHMrKykge1xuXHRcdGZyb20gPSBPYmplY3QoYXJndW1lbnRzW3NdKTtcblxuXHRcdGZvciAodmFyIGtleSBpbiBmcm9tKSB7XG5cdFx0XHRpZiAoaGFzT3duUHJvcGVydHkuY2FsbChmcm9tLCBrZXkpKSB7XG5cdFx0XHRcdHRvW2tleV0gPSBmcm9tW2tleV07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGdldE93blByb3BlcnR5U3ltYm9scykge1xuXHRcdFx0c3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9scyhmcm9tKTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9scy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAocHJvcElzRW51bWVyYWJsZS5jYWxsKGZyb20sIHN5bWJvbHNbaV0pKSB7XG5cdFx0XHRcdFx0dG9bc3ltYm9sc1tpXV0gPSBmcm9tW3N5bWJvbHNbaV1dO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRvO1xufTtcbiIsICIvKiogQGxpY2Vuc2UgUmVhY3QgdjE3LjAuMlxuICogcmVhY3QucHJvZHVjdGlvbi5taW4uanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuJ3VzZSBzdHJpY3QnO3ZhciBsPXJlcXVpcmUoXCJvYmplY3QtYXNzaWduXCIpLG49NjAxMDMscD02MDEwNjtleHBvcnRzLkZyYWdtZW50PTYwMTA3O2V4cG9ydHMuU3RyaWN0TW9kZT02MDEwODtleHBvcnRzLlByb2ZpbGVyPTYwMTE0O3ZhciBxPTYwMTA5LHI9NjAxMTAsdD02MDExMjtleHBvcnRzLlN1c3BlbnNlPTYwMTEzO3ZhciB1PTYwMTE1LHY9NjAxMTY7XG5pZihcImZ1bmN0aW9uXCI9PT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yKXt2YXIgdz1TeW1ib2wuZm9yO249dyhcInJlYWN0LmVsZW1lbnRcIik7cD13KFwicmVhY3QucG9ydGFsXCIpO2V4cG9ydHMuRnJhZ21lbnQ9dyhcInJlYWN0LmZyYWdtZW50XCIpO2V4cG9ydHMuU3RyaWN0TW9kZT13KFwicmVhY3Quc3RyaWN0X21vZGVcIik7ZXhwb3J0cy5Qcm9maWxlcj13KFwicmVhY3QucHJvZmlsZXJcIik7cT13KFwicmVhY3QucHJvdmlkZXJcIik7cj13KFwicmVhY3QuY29udGV4dFwiKTt0PXcoXCJyZWFjdC5mb3J3YXJkX3JlZlwiKTtleHBvcnRzLlN1c3BlbnNlPXcoXCJyZWFjdC5zdXNwZW5zZVwiKTt1PXcoXCJyZWFjdC5tZW1vXCIpO3Y9dyhcInJlYWN0LmxhenlcIil9dmFyIHg9XCJmdW5jdGlvblwiPT09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yO1xuZnVuY3Rpb24geShhKXtpZihudWxsPT09YXx8XCJvYmplY3RcIiE9PXR5cGVvZiBhKXJldHVybiBudWxsO2E9eCYmYVt4XXx8YVtcIkBAaXRlcmF0b3JcIl07cmV0dXJuXCJmdW5jdGlvblwiPT09dHlwZW9mIGE/YTpudWxsfWZ1bmN0aW9uIHooYSl7Zm9yKHZhciBiPVwiaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL2Vycm9yLWRlY29kZXIuaHRtbD9pbnZhcmlhbnQ9XCIrYSxjPTE7Yzxhcmd1bWVudHMubGVuZ3RoO2MrKyliKz1cIiZhcmdzW109XCIrZW5jb2RlVVJJQ29tcG9uZW50KGFyZ3VtZW50c1tjXSk7cmV0dXJuXCJNaW5pZmllZCBSZWFjdCBlcnJvciAjXCIrYStcIjsgdmlzaXQgXCIrYitcIiBmb3IgdGhlIGZ1bGwgbWVzc2FnZSBvciB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgZm9yIGZ1bGwgZXJyb3JzIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuXCJ9XG52YXIgQT17aXNNb3VudGVkOmZ1bmN0aW9uKCl7cmV0dXJuITF9LGVucXVldWVGb3JjZVVwZGF0ZTpmdW5jdGlvbigpe30sZW5xdWV1ZVJlcGxhY2VTdGF0ZTpmdW5jdGlvbigpe30sZW5xdWV1ZVNldFN0YXRlOmZ1bmN0aW9uKCl7fX0sQj17fTtmdW5jdGlvbiBDKGEsYixjKXt0aGlzLnByb3BzPWE7dGhpcy5jb250ZXh0PWI7dGhpcy5yZWZzPUI7dGhpcy51cGRhdGVyPWN8fEF9Qy5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD17fTtDLnByb3RvdHlwZS5zZXRTdGF0ZT1mdW5jdGlvbihhLGIpe2lmKFwib2JqZWN0XCIhPT10eXBlb2YgYSYmXCJmdW5jdGlvblwiIT09dHlwZW9mIGEmJm51bGwhPWEpdGhyb3cgRXJyb3Ioeig4NSkpO3RoaXMudXBkYXRlci5lbnF1ZXVlU2V0U3RhdGUodGhpcyxhLGIsXCJzZXRTdGF0ZVwiKX07Qy5wcm90b3R5cGUuZm9yY2VVcGRhdGU9ZnVuY3Rpb24oYSl7dGhpcy51cGRhdGVyLmVucXVldWVGb3JjZVVwZGF0ZSh0aGlzLGEsXCJmb3JjZVVwZGF0ZVwiKX07XG5mdW5jdGlvbiBEKCl7fUQucHJvdG90eXBlPUMucHJvdG90eXBlO2Z1bmN0aW9uIEUoYSxiLGMpe3RoaXMucHJvcHM9YTt0aGlzLmNvbnRleHQ9Yjt0aGlzLnJlZnM9Qjt0aGlzLnVwZGF0ZXI9Y3x8QX12YXIgRj1FLnByb3RvdHlwZT1uZXcgRDtGLmNvbnN0cnVjdG9yPUU7bChGLEMucHJvdG90eXBlKTtGLmlzUHVyZVJlYWN0Q29tcG9uZW50PSEwO3ZhciBHPXtjdXJyZW50Om51bGx9LEg9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxJPXtrZXk6ITAscmVmOiEwLF9fc2VsZjohMCxfX3NvdXJjZTohMH07XG5mdW5jdGlvbiBKKGEsYixjKXt2YXIgZSxkPXt9LGs9bnVsbCxoPW51bGw7aWYobnVsbCE9Yilmb3IoZSBpbiB2b2lkIDAhPT1iLnJlZiYmKGg9Yi5yZWYpLHZvaWQgMCE9PWIua2V5JiYoaz1cIlwiK2Iua2V5KSxiKUguY2FsbChiLGUpJiYhSS5oYXNPd25Qcm9wZXJ0eShlKSYmKGRbZV09YltlXSk7dmFyIGc9YXJndW1lbnRzLmxlbmd0aC0yO2lmKDE9PT1nKWQuY2hpbGRyZW49YztlbHNlIGlmKDE8Zyl7Zm9yKHZhciBmPUFycmF5KGcpLG09MDttPGc7bSsrKWZbbV09YXJndW1lbnRzW20rMl07ZC5jaGlsZHJlbj1mfWlmKGEmJmEuZGVmYXVsdFByb3BzKWZvcihlIGluIGc9YS5kZWZhdWx0UHJvcHMsZyl2b2lkIDA9PT1kW2VdJiYoZFtlXT1nW2VdKTtyZXR1cm57JCR0eXBlb2Y6bix0eXBlOmEsa2V5OmsscmVmOmgscHJvcHM6ZCxfb3duZXI6Ry5jdXJyZW50fX1cbmZ1bmN0aW9uIEsoYSxiKXtyZXR1cm57JCR0eXBlb2Y6bix0eXBlOmEudHlwZSxrZXk6YixyZWY6YS5yZWYscHJvcHM6YS5wcm9wcyxfb3duZXI6YS5fb3duZXJ9fWZ1bmN0aW9uIEwoYSl7cmV0dXJuXCJvYmplY3RcIj09PXR5cGVvZiBhJiZudWxsIT09YSYmYS4kJHR5cGVvZj09PW59ZnVuY3Rpb24gZXNjYXBlKGEpe3ZhciBiPXtcIj1cIjpcIj0wXCIsXCI6XCI6XCI9MlwifTtyZXR1cm5cIiRcIithLnJlcGxhY2UoL1s9Ol0vZyxmdW5jdGlvbihhKXtyZXR1cm4gYlthXX0pfXZhciBNPS9cXC8rL2c7ZnVuY3Rpb24gTihhLGIpe3JldHVyblwib2JqZWN0XCI9PT10eXBlb2YgYSYmbnVsbCE9PWEmJm51bGwhPWEua2V5P2VzY2FwZShcIlwiK2Eua2V5KTpiLnRvU3RyaW5nKDM2KX1cbmZ1bmN0aW9uIE8oYSxiLGMsZSxkKXt2YXIgaz10eXBlb2YgYTtpZihcInVuZGVmaW5lZFwiPT09a3x8XCJib29sZWFuXCI9PT1rKWE9bnVsbDt2YXIgaD0hMTtpZihudWxsPT09YSloPSEwO2Vsc2Ugc3dpdGNoKGspe2Nhc2UgXCJzdHJpbmdcIjpjYXNlIFwibnVtYmVyXCI6aD0hMDticmVhaztjYXNlIFwib2JqZWN0XCI6c3dpdGNoKGEuJCR0eXBlb2Ype2Nhc2UgbjpjYXNlIHA6aD0hMH19aWYoaClyZXR1cm4gaD1hLGQ9ZChoKSxhPVwiXCI9PT1lP1wiLlwiK04oaCwwKTplLEFycmF5LmlzQXJyYXkoZCk/KGM9XCJcIixudWxsIT1hJiYoYz1hLnJlcGxhY2UoTSxcIiQmL1wiKStcIi9cIiksTyhkLGIsYyxcIlwiLGZ1bmN0aW9uKGEpe3JldHVybiBhfSkpOm51bGwhPWQmJihMKGQpJiYoZD1LKGQsYysoIWQua2V5fHxoJiZoLmtleT09PWQua2V5P1wiXCI6KFwiXCIrZC5rZXkpLnJlcGxhY2UoTSxcIiQmL1wiKStcIi9cIikrYSkpLGIucHVzaChkKSksMTtoPTA7ZT1cIlwiPT09ZT9cIi5cIjplK1wiOlwiO2lmKEFycmF5LmlzQXJyYXkoYSkpZm9yKHZhciBnPVxuMDtnPGEubGVuZ3RoO2crKyl7az1hW2ddO3ZhciBmPWUrTihrLGcpO2grPU8oayxiLGMsZixkKX1lbHNlIGlmKGY9eShhKSxcImZ1bmN0aW9uXCI9PT10eXBlb2YgZilmb3IoYT1mLmNhbGwoYSksZz0wOyEoaz1hLm5leHQoKSkuZG9uZTspaz1rLnZhbHVlLGY9ZStOKGssZysrKSxoKz1PKGssYixjLGYsZCk7ZWxzZSBpZihcIm9iamVjdFwiPT09ayl0aHJvdyBiPVwiXCIrYSxFcnJvcih6KDMxLFwiW29iamVjdCBPYmplY3RdXCI9PT1iP1wib2JqZWN0IHdpdGgga2V5cyB7XCIrT2JqZWN0LmtleXMoYSkuam9pbihcIiwgXCIpK1wifVwiOmIpKTtyZXR1cm4gaH1mdW5jdGlvbiBQKGEsYixjKXtpZihudWxsPT1hKXJldHVybiBhO3ZhciBlPVtdLGQ9MDtPKGEsZSxcIlwiLFwiXCIsZnVuY3Rpb24oYSl7cmV0dXJuIGIuY2FsbChjLGEsZCsrKX0pO3JldHVybiBlfVxuZnVuY3Rpb24gUShhKXtpZigtMT09PWEuX3N0YXR1cyl7dmFyIGI9YS5fcmVzdWx0O2I9YigpO2EuX3N0YXR1cz0wO2EuX3Jlc3VsdD1iO2IudGhlbihmdW5jdGlvbihiKXswPT09YS5fc3RhdHVzJiYoYj1iLmRlZmF1bHQsYS5fc3RhdHVzPTEsYS5fcmVzdWx0PWIpfSxmdW5jdGlvbihiKXswPT09YS5fc3RhdHVzJiYoYS5fc3RhdHVzPTIsYS5fcmVzdWx0PWIpfSl9aWYoMT09PWEuX3N0YXR1cylyZXR1cm4gYS5fcmVzdWx0O3Rocm93IGEuX3Jlc3VsdDt9dmFyIFI9e2N1cnJlbnQ6bnVsbH07ZnVuY3Rpb24gUygpe3ZhciBhPVIuY3VycmVudDtpZihudWxsPT09YSl0aHJvdyBFcnJvcih6KDMyMSkpO3JldHVybiBhfXZhciBUPXtSZWFjdEN1cnJlbnREaXNwYXRjaGVyOlIsUmVhY3RDdXJyZW50QmF0Y2hDb25maWc6e3RyYW5zaXRpb246MH0sUmVhY3RDdXJyZW50T3duZXI6RyxJc1NvbWVSZW5kZXJlckFjdGluZzp7Y3VycmVudDohMX0sYXNzaWduOmx9O1xuZXhwb3J0cy5DaGlsZHJlbj17bWFwOlAsZm9yRWFjaDpmdW5jdGlvbihhLGIsYyl7UChhLGZ1bmN0aW9uKCl7Yi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGMpfSxjb3VudDpmdW5jdGlvbihhKXt2YXIgYj0wO1AoYSxmdW5jdGlvbigpe2IrK30pO3JldHVybiBifSx0b0FycmF5OmZ1bmN0aW9uKGEpe3JldHVybiBQKGEsZnVuY3Rpb24oYSl7cmV0dXJuIGF9KXx8W119LG9ubHk6ZnVuY3Rpb24oYSl7aWYoIUwoYSkpdGhyb3cgRXJyb3IoeigxNDMpKTtyZXR1cm4gYX19O2V4cG9ydHMuQ29tcG9uZW50PUM7ZXhwb3J0cy5QdXJlQ29tcG9uZW50PUU7ZXhwb3J0cy5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRD1UO1xuZXhwb3J0cy5jbG9uZUVsZW1lbnQ9ZnVuY3Rpb24oYSxiLGMpe2lmKG51bGw9PT1hfHx2b2lkIDA9PT1hKXRocm93IEVycm9yKHooMjY3LGEpKTt2YXIgZT1sKHt9LGEucHJvcHMpLGQ9YS5rZXksaz1hLnJlZixoPWEuX293bmVyO2lmKG51bGwhPWIpe3ZvaWQgMCE9PWIucmVmJiYoaz1iLnJlZixoPUcuY3VycmVudCk7dm9pZCAwIT09Yi5rZXkmJihkPVwiXCIrYi5rZXkpO2lmKGEudHlwZSYmYS50eXBlLmRlZmF1bHRQcm9wcyl2YXIgZz1hLnR5cGUuZGVmYXVsdFByb3BzO2ZvcihmIGluIGIpSC5jYWxsKGIsZikmJiFJLmhhc093blByb3BlcnR5KGYpJiYoZVtmXT12b2lkIDA9PT1iW2ZdJiZ2b2lkIDAhPT1nP2dbZl06YltmXSl9dmFyIGY9YXJndW1lbnRzLmxlbmd0aC0yO2lmKDE9PT1mKWUuY2hpbGRyZW49YztlbHNlIGlmKDE8Zil7Zz1BcnJheShmKTtmb3IodmFyIG09MDttPGY7bSsrKWdbbV09YXJndW1lbnRzW20rMl07ZS5jaGlsZHJlbj1nfXJldHVybnskJHR5cGVvZjpuLHR5cGU6YS50eXBlLFxua2V5OmQscmVmOmsscHJvcHM6ZSxfb3duZXI6aH19O2V4cG9ydHMuY3JlYXRlQ29udGV4dD1mdW5jdGlvbihhLGIpe3ZvaWQgMD09PWImJihiPW51bGwpO2E9eyQkdHlwZW9mOnIsX2NhbGN1bGF0ZUNoYW5nZWRCaXRzOmIsX2N1cnJlbnRWYWx1ZTphLF9jdXJyZW50VmFsdWUyOmEsX3RocmVhZENvdW50OjAsUHJvdmlkZXI6bnVsbCxDb25zdW1lcjpudWxsfTthLlByb3ZpZGVyPXskJHR5cGVvZjpxLF9jb250ZXh0OmF9O3JldHVybiBhLkNvbnN1bWVyPWF9O2V4cG9ydHMuY3JlYXRlRWxlbWVudD1KO2V4cG9ydHMuY3JlYXRlRmFjdG9yeT1mdW5jdGlvbihhKXt2YXIgYj1KLmJpbmQobnVsbCxhKTtiLnR5cGU9YTtyZXR1cm4gYn07ZXhwb3J0cy5jcmVhdGVSZWY9ZnVuY3Rpb24oKXtyZXR1cm57Y3VycmVudDpudWxsfX07ZXhwb3J0cy5mb3J3YXJkUmVmPWZ1bmN0aW9uKGEpe3JldHVybnskJHR5cGVvZjp0LHJlbmRlcjphfX07ZXhwb3J0cy5pc1ZhbGlkRWxlbWVudD1MO1xuZXhwb3J0cy5sYXp5PWZ1bmN0aW9uKGEpe3JldHVybnskJHR5cGVvZjp2LF9wYXlsb2FkOntfc3RhdHVzOi0xLF9yZXN1bHQ6YX0sX2luaXQ6UX19O2V4cG9ydHMubWVtbz1mdW5jdGlvbihhLGIpe3JldHVybnskJHR5cGVvZjp1LHR5cGU6YSxjb21wYXJlOnZvaWQgMD09PWI/bnVsbDpifX07ZXhwb3J0cy51c2VDYWxsYmFjaz1mdW5jdGlvbihhLGIpe3JldHVybiBTKCkudXNlQ2FsbGJhY2soYSxiKX07ZXhwb3J0cy51c2VDb250ZXh0PWZ1bmN0aW9uKGEsYil7cmV0dXJuIFMoKS51c2VDb250ZXh0KGEsYil9O2V4cG9ydHMudXNlRGVidWdWYWx1ZT1mdW5jdGlvbigpe307ZXhwb3J0cy51c2VFZmZlY3Q9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gUygpLnVzZUVmZmVjdChhLGIpfTtleHBvcnRzLnVzZUltcGVyYXRpdmVIYW5kbGU9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBTKCkudXNlSW1wZXJhdGl2ZUhhbmRsZShhLGIsYyl9O1xuZXhwb3J0cy51c2VMYXlvdXRFZmZlY3Q9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gUygpLnVzZUxheW91dEVmZmVjdChhLGIpfTtleHBvcnRzLnVzZU1lbW89ZnVuY3Rpb24oYSxiKXtyZXR1cm4gUygpLnVzZU1lbW8oYSxiKX07ZXhwb3J0cy51c2VSZWR1Y2VyPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gUygpLnVzZVJlZHVjZXIoYSxiLGMpfTtleHBvcnRzLnVzZVJlZj1mdW5jdGlvbihhKXtyZXR1cm4gUygpLnVzZVJlZihhKX07ZXhwb3J0cy51c2VTdGF0ZT1mdW5jdGlvbihhKXtyZXR1cm4gUygpLnVzZVN0YXRlKGEpfTtleHBvcnRzLnZlcnNpb249XCIxNy4wLjJcIjtcbiIsICIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsICIvKiogQGxpY2Vuc2UgUmVhY3QgdjAuMjAuMlxuICogc2NoZWR1bGVyLnByb2R1Y3Rpb24ubWluLmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cbid1c2Ugc3RyaWN0Jzt2YXIgZixnLGgsaztpZihcIm9iamVjdFwiPT09dHlwZW9mIHBlcmZvcm1hbmNlJiZcImZ1bmN0aW9uXCI9PT10eXBlb2YgcGVyZm9ybWFuY2Uubm93KXt2YXIgbD1wZXJmb3JtYW5jZTtleHBvcnRzLnVuc3RhYmxlX25vdz1mdW5jdGlvbigpe3JldHVybiBsLm5vdygpfX1lbHNle3ZhciBwPURhdGUscT1wLm5vdygpO2V4cG9ydHMudW5zdGFibGVfbm93PWZ1bmN0aW9uKCl7cmV0dXJuIHAubm93KCktcX19XG5pZihcInVuZGVmaW5lZFwiPT09dHlwZW9mIHdpbmRvd3x8XCJmdW5jdGlvblwiIT09dHlwZW9mIE1lc3NhZ2VDaGFubmVsKXt2YXIgdD1udWxsLHU9bnVsbCx3PWZ1bmN0aW9uKCl7aWYobnVsbCE9PXQpdHJ5e3ZhciBhPWV4cG9ydHMudW5zdGFibGVfbm93KCk7dCghMCxhKTt0PW51bGx9Y2F0Y2goYil7dGhyb3cgc2V0VGltZW91dCh3LDApLGI7fX07Zj1mdW5jdGlvbihhKXtudWxsIT09dD9zZXRUaW1lb3V0KGYsMCxhKToodD1hLHNldFRpbWVvdXQodywwKSl9O2c9ZnVuY3Rpb24oYSxiKXt1PXNldFRpbWVvdXQoYSxiKX07aD1mdW5jdGlvbigpe2NsZWFyVGltZW91dCh1KX07ZXhwb3J0cy51bnN0YWJsZV9zaG91bGRZaWVsZD1mdW5jdGlvbigpe3JldHVybiExfTtrPWV4cG9ydHMudW5zdGFibGVfZm9yY2VGcmFtZVJhdGU9ZnVuY3Rpb24oKXt9fWVsc2V7dmFyIHg9d2luZG93LnNldFRpbWVvdXQseT13aW5kb3cuY2xlYXJUaW1lb3V0O2lmKFwidW5kZWZpbmVkXCIhPT10eXBlb2YgY29uc29sZSl7dmFyIHo9XG53aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWU7XCJmdW5jdGlvblwiIT09dHlwZW9mIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUmJmNvbnNvbGUuZXJyb3IoXCJUaGlzIGJyb3dzZXIgZG9lc24ndCBzdXBwb3J0IHJlcXVlc3RBbmltYXRpb25GcmFtZS4gTWFrZSBzdXJlIHRoYXQgeW91IGxvYWQgYSBwb2x5ZmlsbCBpbiBvbGRlciBicm93c2Vycy4gaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3JlYWN0LXBvbHlmaWxsc1wiKTtcImZ1bmN0aW9uXCIhPT10eXBlb2YgeiYmY29uc29sZS5lcnJvcihcIlRoaXMgYnJvd3NlciBkb2Vzbid0IHN1cHBvcnQgY2FuY2VsQW5pbWF0aW9uRnJhbWUuIE1ha2Ugc3VyZSB0aGF0IHlvdSBsb2FkIGEgcG9seWZpbGwgaW4gb2xkZXIgYnJvd3NlcnMuIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9yZWFjdC1wb2x5ZmlsbHNcIil9dmFyIEE9ITEsQj1udWxsLEM9LTEsRD01LEU9MDtleHBvcnRzLnVuc3RhYmxlX3Nob3VsZFlpZWxkPWZ1bmN0aW9uKCl7cmV0dXJuIGV4cG9ydHMudW5zdGFibGVfbm93KCk+PVxuRX07az1mdW5jdGlvbigpe307ZXhwb3J0cy51bnN0YWJsZV9mb3JjZUZyYW1lUmF0ZT1mdW5jdGlvbihhKXswPmF8fDEyNTxhP2NvbnNvbGUuZXJyb3IoXCJmb3JjZUZyYW1lUmF0ZSB0YWtlcyBhIHBvc2l0aXZlIGludCBiZXR3ZWVuIDAgYW5kIDEyNSwgZm9yY2luZyBmcmFtZSByYXRlcyBoaWdoZXIgdGhhbiAxMjUgZnBzIGlzIG5vdCBzdXBwb3J0ZWRcIik6RD0wPGE/TWF0aC5mbG9vcigxRTMvYSk6NX07dmFyIEY9bmV3IE1lc3NhZ2VDaGFubmVsLEc9Ri5wb3J0MjtGLnBvcnQxLm9ubWVzc2FnZT1mdW5jdGlvbigpe2lmKG51bGwhPT1CKXt2YXIgYT1leHBvcnRzLnVuc3RhYmxlX25vdygpO0U9YStEO3RyeXtCKCEwLGEpP0cucG9zdE1lc3NhZ2UobnVsbCk6KEE9ITEsQj1udWxsKX1jYXRjaChiKXt0aHJvdyBHLnBvc3RNZXNzYWdlKG51bGwpLGI7fX1lbHNlIEE9ITF9O2Y9ZnVuY3Rpb24oYSl7Qj1hO0F8fChBPSEwLEcucG9zdE1lc3NhZ2UobnVsbCkpfTtnPWZ1bmN0aW9uKGEsYil7Qz1cbngoZnVuY3Rpb24oKXthKGV4cG9ydHMudW5zdGFibGVfbm93KCkpfSxiKX07aD1mdW5jdGlvbigpe3koQyk7Qz0tMX19ZnVuY3Rpb24gSChhLGIpe3ZhciBjPWEubGVuZ3RoO2EucHVzaChiKTthOmZvcig7Oyl7dmFyIGQ9Yy0xPj4+MSxlPWFbZF07aWYodm9pZCAwIT09ZSYmMDxJKGUsYikpYVtkXT1iLGFbY109ZSxjPWQ7ZWxzZSBicmVhayBhfX1mdW5jdGlvbiBKKGEpe2E9YVswXTtyZXR1cm4gdm9pZCAwPT09YT9udWxsOmF9XG5mdW5jdGlvbiBLKGEpe3ZhciBiPWFbMF07aWYodm9pZCAwIT09Yil7dmFyIGM9YS5wb3AoKTtpZihjIT09Yil7YVswXT1jO2E6Zm9yKHZhciBkPTAsZT1hLmxlbmd0aDtkPGU7KXt2YXIgbT0yKihkKzEpLTEsbj1hW21dLHY9bSsxLHI9YVt2XTtpZih2b2lkIDAhPT1uJiYwPkkobixjKSl2b2lkIDAhPT1yJiYwPkkocixuKT8oYVtkXT1yLGFbdl09YyxkPXYpOihhW2RdPW4sYVttXT1jLGQ9bSk7ZWxzZSBpZih2b2lkIDAhPT1yJiYwPkkocixjKSlhW2RdPXIsYVt2XT1jLGQ9djtlbHNlIGJyZWFrIGF9fXJldHVybiBifXJldHVybiBudWxsfWZ1bmN0aW9uIEkoYSxiKXt2YXIgYz1hLnNvcnRJbmRleC1iLnNvcnRJbmRleDtyZXR1cm4gMCE9PWM/YzphLmlkLWIuaWR9dmFyIEw9W10sTT1bXSxOPTEsTz1udWxsLFA9MyxRPSExLFI9ITEsUz0hMTtcbmZ1bmN0aW9uIFQoYSl7Zm9yKHZhciBiPUooTSk7bnVsbCE9PWI7KXtpZihudWxsPT09Yi5jYWxsYmFjaylLKE0pO2Vsc2UgaWYoYi5zdGFydFRpbWU8PWEpSyhNKSxiLnNvcnRJbmRleD1iLmV4cGlyYXRpb25UaW1lLEgoTCxiKTtlbHNlIGJyZWFrO2I9SihNKX19ZnVuY3Rpb24gVShhKXtTPSExO1QoYSk7aWYoIVIpaWYobnVsbCE9PUooTCkpUj0hMCxmKFYpO2Vsc2V7dmFyIGI9SihNKTtudWxsIT09YiYmZyhVLGIuc3RhcnRUaW1lLWEpfX1cbmZ1bmN0aW9uIFYoYSxiKXtSPSExO1MmJihTPSExLGgoKSk7UT0hMDt2YXIgYz1QO3RyeXtUKGIpO2ZvcihPPUooTCk7bnVsbCE9PU8mJighKE8uZXhwaXJhdGlvblRpbWU+Yil8fGEmJiFleHBvcnRzLnVuc3RhYmxlX3Nob3VsZFlpZWxkKCkpOyl7dmFyIGQ9Ty5jYWxsYmFjaztpZihcImZ1bmN0aW9uXCI9PT10eXBlb2YgZCl7Ty5jYWxsYmFjaz1udWxsO1A9Ty5wcmlvcml0eUxldmVsO3ZhciBlPWQoTy5leHBpcmF0aW9uVGltZTw9Yik7Yj1leHBvcnRzLnVuc3RhYmxlX25vdygpO1wiZnVuY3Rpb25cIj09PXR5cGVvZiBlP08uY2FsbGJhY2s9ZTpPPT09SihMKSYmSyhMKTtUKGIpfWVsc2UgSyhMKTtPPUooTCl9aWYobnVsbCE9PU8pdmFyIG09ITA7ZWxzZXt2YXIgbj1KKE0pO251bGwhPT1uJiZnKFUsbi5zdGFydFRpbWUtYik7bT0hMX1yZXR1cm4gbX1maW5hbGx5e089bnVsbCxQPWMsUT0hMX19dmFyIFc9aztleHBvcnRzLnVuc3RhYmxlX0lkbGVQcmlvcml0eT01O1xuZXhwb3J0cy51bnN0YWJsZV9JbW1lZGlhdGVQcmlvcml0eT0xO2V4cG9ydHMudW5zdGFibGVfTG93UHJpb3JpdHk9NDtleHBvcnRzLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5PTM7ZXhwb3J0cy51bnN0YWJsZV9Qcm9maWxpbmc9bnVsbDtleHBvcnRzLnVuc3RhYmxlX1VzZXJCbG9ja2luZ1ByaW9yaXR5PTI7ZXhwb3J0cy51bnN0YWJsZV9jYW5jZWxDYWxsYmFjaz1mdW5jdGlvbihhKXthLmNhbGxiYWNrPW51bGx9O2V4cG9ydHMudW5zdGFibGVfY29udGludWVFeGVjdXRpb249ZnVuY3Rpb24oKXtSfHxRfHwoUj0hMCxmKFYpKX07ZXhwb3J0cy51bnN0YWJsZV9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbD1mdW5jdGlvbigpe3JldHVybiBQfTtleHBvcnRzLnVuc3RhYmxlX2dldEZpcnN0Q2FsbGJhY2tOb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIEooTCl9O1xuZXhwb3J0cy51bnN0YWJsZV9uZXh0PWZ1bmN0aW9uKGEpe3N3aXRjaChQKXtjYXNlIDE6Y2FzZSAyOmNhc2UgMzp2YXIgYj0zO2JyZWFrO2RlZmF1bHQ6Yj1QfXZhciBjPVA7UD1iO3RyeXtyZXR1cm4gYSgpfWZpbmFsbHl7UD1jfX07ZXhwb3J0cy51bnN0YWJsZV9wYXVzZUV4ZWN1dGlvbj1mdW5jdGlvbigpe307ZXhwb3J0cy51bnN0YWJsZV9yZXF1ZXN0UGFpbnQ9VztleHBvcnRzLnVuc3RhYmxlX3J1bldpdGhQcmlvcml0eT1mdW5jdGlvbihhLGIpe3N3aXRjaChhKXtjYXNlIDE6Y2FzZSAyOmNhc2UgMzpjYXNlIDQ6Y2FzZSA1OmJyZWFrO2RlZmF1bHQ6YT0zfXZhciBjPVA7UD1hO3RyeXtyZXR1cm4gYigpfWZpbmFsbHl7UD1jfX07XG5leHBvcnRzLnVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2s9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWV4cG9ydHMudW5zdGFibGVfbm93KCk7XCJvYmplY3RcIj09PXR5cGVvZiBjJiZudWxsIT09Yz8oYz1jLmRlbGF5LGM9XCJudW1iZXJcIj09PXR5cGVvZiBjJiYwPGM/ZCtjOmQpOmM9ZDtzd2l0Y2goYSl7Y2FzZSAxOnZhciBlPS0xO2JyZWFrO2Nhc2UgMjplPTI1MDticmVhaztjYXNlIDU6ZT0xMDczNzQxODIzO2JyZWFrO2Nhc2UgNDplPTFFNDticmVhaztkZWZhdWx0OmU9NUUzfWU9YytlO2E9e2lkOk4rKyxjYWxsYmFjazpiLHByaW9yaXR5TGV2ZWw6YSxzdGFydFRpbWU6YyxleHBpcmF0aW9uVGltZTplLHNvcnRJbmRleDotMX07Yz5kPyhhLnNvcnRJbmRleD1jLEgoTSxhKSxudWxsPT09SihMKSYmYT09PUooTSkmJihTP2goKTpTPSEwLGcoVSxjLWQpKSk6KGEuc29ydEluZGV4PWUsSChMLGEpLFJ8fFF8fChSPSEwLGYoVikpKTtyZXR1cm4gYX07XG5leHBvcnRzLnVuc3RhYmxlX3dyYXBDYWxsYmFjaz1mdW5jdGlvbihhKXt2YXIgYj1QO3JldHVybiBmdW5jdGlvbigpe3ZhciBjPVA7UD1iO3RyeXtyZXR1cm4gYS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZmluYWxseXtQPWN9fX07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3NjaGVkdWxlci5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9zY2hlZHVsZXIuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsICIvKiogQGxpY2Vuc2UgUmVhY3QgdjE3LjAuMlxuICogcmVhY3QtZG9tLnByb2R1Y3Rpb24ubWluLmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cbi8qXG4gTW9kZXJuaXpyIDMuMC4wcHJlIChDdXN0b20gQnVpbGQpIHwgTUlUXG4qL1xuJ3VzZSBzdHJpY3QnO3ZhciBhYT1yZXF1aXJlKFwicmVhY3RcIiksbT1yZXF1aXJlKFwib2JqZWN0LWFzc2lnblwiKSxyPXJlcXVpcmUoXCJzY2hlZHVsZXJcIik7ZnVuY3Rpb24geShhKXtmb3IodmFyIGI9XCJodHRwczovL3JlYWN0anMub3JnL2RvY3MvZXJyb3ItZGVjb2Rlci5odG1sP2ludmFyaWFudD1cIithLGM9MTtjPGFyZ3VtZW50cy5sZW5ndGg7YysrKWIrPVwiJmFyZ3NbXT1cIitlbmNvZGVVUklDb21wb25lbnQoYXJndW1lbnRzW2NdKTtyZXR1cm5cIk1pbmlmaWVkIFJlYWN0IGVycm9yICNcIithK1wiOyB2aXNpdCBcIitiK1wiIGZvciB0aGUgZnVsbCBtZXNzYWdlIG9yIHVzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCBmb3IgZnVsbCBlcnJvcnMgYW5kIGFkZGl0aW9uYWwgaGVscGZ1bCB3YXJuaW5ncy5cIn1pZighYWEpdGhyb3cgRXJyb3IoeSgyMjcpKTt2YXIgYmE9bmV3IFNldCxjYT17fTtmdW5jdGlvbiBkYShhLGIpe2VhKGEsYik7ZWEoYStcIkNhcHR1cmVcIixiKX1cbmZ1bmN0aW9uIGVhKGEsYil7Y2FbYV09Yjtmb3IoYT0wO2E8Yi5sZW5ndGg7YSsrKWJhLmFkZChiW2FdKX1cbnZhciBmYT0hKFwidW5kZWZpbmVkXCI9PT10eXBlb2Ygd2luZG93fHxcInVuZGVmaW5lZFwiPT09dHlwZW9mIHdpbmRvdy5kb2N1bWVudHx8XCJ1bmRlZmluZWRcIj09PXR5cGVvZiB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCksaGE9L15bOkEtWl9hLXpcXHUwMEMwLVxcdTAwRDZcXHUwMEQ4LVxcdTAwRjZcXHUwMEY4LVxcdTAyRkZcXHUwMzcwLVxcdTAzN0RcXHUwMzdGLVxcdTFGRkZcXHUyMDBDLVxcdTIwMERcXHUyMDcwLVxcdTIxOEZcXHUyQzAwLVxcdTJGRUZcXHUzMDAxLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRkRdWzpBLVpfYS16XFx1MDBDMC1cXHUwMEQ2XFx1MDBEOC1cXHUwMEY2XFx1MDBGOC1cXHUwMkZGXFx1MDM3MC1cXHUwMzdEXFx1MDM3Ri1cXHUxRkZGXFx1MjAwQy1cXHUyMDBEXFx1MjA3MC1cXHUyMThGXFx1MkMwMC1cXHUyRkVGXFx1MzAwMS1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkZEXFwtLjAtOVxcdTAwQjdcXHUwMzAwLVxcdTAzNkZcXHUyMDNGLVxcdTIwNDBdKiQvLGlhPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksXG5qYT17fSxrYT17fTtmdW5jdGlvbiBsYShhKXtpZihpYS5jYWxsKGthLGEpKXJldHVybiEwO2lmKGlhLmNhbGwoamEsYSkpcmV0dXJuITE7aWYoaGEudGVzdChhKSlyZXR1cm4ga2FbYV09ITA7amFbYV09ITA7cmV0dXJuITF9ZnVuY3Rpb24gbWEoYSxiLGMsZCl7aWYobnVsbCE9PWMmJjA9PT1jLnR5cGUpcmV0dXJuITE7c3dpdGNoKHR5cGVvZiBiKXtjYXNlIFwiZnVuY3Rpb25cIjpjYXNlIFwic3ltYm9sXCI6cmV0dXJuITA7Y2FzZSBcImJvb2xlYW5cIjppZihkKXJldHVybiExO2lmKG51bGwhPT1jKXJldHVybiFjLmFjY2VwdHNCb29sZWFuczthPWEudG9Mb3dlckNhc2UoKS5zbGljZSgwLDUpO3JldHVyblwiZGF0YS1cIiE9PWEmJlwiYXJpYS1cIiE9PWE7ZGVmYXVsdDpyZXR1cm4hMX19XG5mdW5jdGlvbiBuYShhLGIsYyxkKXtpZihudWxsPT09Ynx8XCJ1bmRlZmluZWRcIj09PXR5cGVvZiBifHxtYShhLGIsYyxkKSlyZXR1cm4hMDtpZihkKXJldHVybiExO2lmKG51bGwhPT1jKXN3aXRjaChjLnR5cGUpe2Nhc2UgMzpyZXR1cm4hYjtjYXNlIDQ6cmV0dXJuITE9PT1iO2Nhc2UgNTpyZXR1cm4gaXNOYU4oYik7Y2FzZSA2OnJldHVybiBpc05hTihiKXx8MT5ifXJldHVybiExfWZ1bmN0aW9uIEIoYSxiLGMsZCxlLGYsZyl7dGhpcy5hY2NlcHRzQm9vbGVhbnM9Mj09PWJ8fDM9PT1ifHw0PT09Yjt0aGlzLmF0dHJpYnV0ZU5hbWU9ZDt0aGlzLmF0dHJpYnV0ZU5hbWVzcGFjZT1lO3RoaXMubXVzdFVzZVByb3BlcnR5PWM7dGhpcy5wcm9wZXJ0eU5hbWU9YTt0aGlzLnR5cGU9Yjt0aGlzLnNhbml0aXplVVJMPWY7dGhpcy5yZW1vdmVFbXB0eVN0cmluZz1nfXZhciBEPXt9O1xuXCJjaGlsZHJlbiBkYW5nZXJvdXNseVNldElubmVySFRNTCBkZWZhdWx0VmFsdWUgZGVmYXVsdENoZWNrZWQgaW5uZXJIVE1MIHN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZyBzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmcgc3R5bGVcIi5zcGxpdChcIiBcIikuZm9yRWFjaChmdW5jdGlvbihhKXtEW2FdPW5ldyBCKGEsMCwhMSxhLG51bGwsITEsITEpfSk7W1tcImFjY2VwdENoYXJzZXRcIixcImFjY2VwdC1jaGFyc2V0XCJdLFtcImNsYXNzTmFtZVwiLFwiY2xhc3NcIl0sW1wiaHRtbEZvclwiLFwiZm9yXCJdLFtcImh0dHBFcXVpdlwiLFwiaHR0cC1lcXVpdlwiXV0uZm9yRWFjaChmdW5jdGlvbihhKXt2YXIgYj1hWzBdO0RbYl09bmV3IEIoYiwxLCExLGFbMV0sbnVsbCwhMSwhMSl9KTtbXCJjb250ZW50RWRpdGFibGVcIixcImRyYWdnYWJsZVwiLFwic3BlbGxDaGVja1wiLFwidmFsdWVcIl0uZm9yRWFjaChmdW5jdGlvbihhKXtEW2FdPW5ldyBCKGEsMiwhMSxhLnRvTG93ZXJDYXNlKCksbnVsbCwhMSwhMSl9KTtcbltcImF1dG9SZXZlcnNlXCIsXCJleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkXCIsXCJmb2N1c2FibGVcIixcInByZXNlcnZlQWxwaGFcIl0uZm9yRWFjaChmdW5jdGlvbihhKXtEW2FdPW5ldyBCKGEsMiwhMSxhLG51bGwsITEsITEpfSk7XCJhbGxvd0Z1bGxTY3JlZW4gYXN5bmMgYXV0b0ZvY3VzIGF1dG9QbGF5IGNvbnRyb2xzIGRlZmF1bHQgZGVmZXIgZGlzYWJsZWQgZGlzYWJsZVBpY3R1cmVJblBpY3R1cmUgZGlzYWJsZVJlbW90ZVBsYXliYWNrIGZvcm1Ob1ZhbGlkYXRlIGhpZGRlbiBsb29wIG5vTW9kdWxlIG5vVmFsaWRhdGUgb3BlbiBwbGF5c0lubGluZSByZWFkT25seSByZXF1aXJlZCByZXZlcnNlZCBzY29wZWQgc2VhbWxlc3MgaXRlbVNjb3BlXCIuc3BsaXQoXCIgXCIpLmZvckVhY2goZnVuY3Rpb24oYSl7RFthXT1uZXcgQihhLDMsITEsYS50b0xvd2VyQ2FzZSgpLG51bGwsITEsITEpfSk7XG5bXCJjaGVja2VkXCIsXCJtdWx0aXBsZVwiLFwibXV0ZWRcIixcInNlbGVjdGVkXCJdLmZvckVhY2goZnVuY3Rpb24oYSl7RFthXT1uZXcgQihhLDMsITAsYSxudWxsLCExLCExKX0pO1tcImNhcHR1cmVcIixcImRvd25sb2FkXCJdLmZvckVhY2goZnVuY3Rpb24oYSl7RFthXT1uZXcgQihhLDQsITEsYSxudWxsLCExLCExKX0pO1tcImNvbHNcIixcInJvd3NcIixcInNpemVcIixcInNwYW5cIl0uZm9yRWFjaChmdW5jdGlvbihhKXtEW2FdPW5ldyBCKGEsNiwhMSxhLG51bGwsITEsITEpfSk7W1wicm93U3BhblwiLFwic3RhcnRcIl0uZm9yRWFjaChmdW5jdGlvbihhKXtEW2FdPW5ldyBCKGEsNSwhMSxhLnRvTG93ZXJDYXNlKCksbnVsbCwhMSwhMSl9KTt2YXIgb2E9L1tcXC06XShbYS16XSkvZztmdW5jdGlvbiBwYShhKXtyZXR1cm4gYVsxXS50b1VwcGVyQ2FzZSgpfVxuXCJhY2NlbnQtaGVpZ2h0IGFsaWdubWVudC1iYXNlbGluZSBhcmFiaWMtZm9ybSBiYXNlbGluZS1zaGlmdCBjYXAtaGVpZ2h0IGNsaXAtcGF0aCBjbGlwLXJ1bGUgY29sb3ItaW50ZXJwb2xhdGlvbiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnMgY29sb3ItcHJvZmlsZSBjb2xvci1yZW5kZXJpbmcgZG9taW5hbnQtYmFzZWxpbmUgZW5hYmxlLWJhY2tncm91bmQgZmlsbC1vcGFjaXR5IGZpbGwtcnVsZSBmbG9vZC1jb2xvciBmbG9vZC1vcGFjaXR5IGZvbnQtZmFtaWx5IGZvbnQtc2l6ZSBmb250LXNpemUtYWRqdXN0IGZvbnQtc3RyZXRjaCBmb250LXN0eWxlIGZvbnQtdmFyaWFudCBmb250LXdlaWdodCBnbHlwaC1uYW1lIGdseXBoLW9yaWVudGF0aW9uLWhvcml6b250YWwgZ2x5cGgtb3JpZW50YXRpb24tdmVydGljYWwgaG9yaXotYWR2LXggaG9yaXotb3JpZ2luLXggaW1hZ2UtcmVuZGVyaW5nIGxldHRlci1zcGFjaW5nIGxpZ2h0aW5nLWNvbG9yIG1hcmtlci1lbmQgbWFya2VyLW1pZCBtYXJrZXItc3RhcnQgb3ZlcmxpbmUtcG9zaXRpb24gb3ZlcmxpbmUtdGhpY2tuZXNzIHBhaW50LW9yZGVyIHBhbm9zZS0xIHBvaW50ZXItZXZlbnRzIHJlbmRlcmluZy1pbnRlbnQgc2hhcGUtcmVuZGVyaW5nIHN0b3AtY29sb3Igc3RvcC1vcGFjaXR5IHN0cmlrZXRocm91Z2gtcG9zaXRpb24gc3RyaWtldGhyb3VnaC10aGlja25lc3Mgc3Ryb2tlLWRhc2hhcnJheSBzdHJva2UtZGFzaG9mZnNldCBzdHJva2UtbGluZWNhcCBzdHJva2UtbGluZWpvaW4gc3Ryb2tlLW1pdGVybGltaXQgc3Ryb2tlLW9wYWNpdHkgc3Ryb2tlLXdpZHRoIHRleHQtYW5jaG9yIHRleHQtZGVjb3JhdGlvbiB0ZXh0LXJlbmRlcmluZyB1bmRlcmxpbmUtcG9zaXRpb24gdW5kZXJsaW5lLXRoaWNrbmVzcyB1bmljb2RlLWJpZGkgdW5pY29kZS1yYW5nZSB1bml0cy1wZXItZW0gdi1hbHBoYWJldGljIHYtaGFuZ2luZyB2LWlkZW9ncmFwaGljIHYtbWF0aGVtYXRpY2FsIHZlY3Rvci1lZmZlY3QgdmVydC1hZHYteSB2ZXJ0LW9yaWdpbi14IHZlcnQtb3JpZ2luLXkgd29yZC1zcGFjaW5nIHdyaXRpbmctbW9kZSB4bWxuczp4bGluayB4LWhlaWdodFwiLnNwbGl0KFwiIFwiKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBiPWEucmVwbGFjZShvYSxcbnBhKTtEW2JdPW5ldyBCKGIsMSwhMSxhLG51bGwsITEsITEpfSk7XCJ4bGluazphY3R1YXRlIHhsaW5rOmFyY3JvbGUgeGxpbms6cm9sZSB4bGluazpzaG93IHhsaW5rOnRpdGxlIHhsaW5rOnR5cGVcIi5zcGxpdChcIiBcIikuZm9yRWFjaChmdW5jdGlvbihhKXt2YXIgYj1hLnJlcGxhY2Uob2EscGEpO0RbYl09bmV3IEIoYiwxLCExLGEsXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsITEsITEpfSk7W1wieG1sOmJhc2VcIixcInhtbDpsYW5nXCIsXCJ4bWw6c3BhY2VcIl0uZm9yRWFjaChmdW5jdGlvbihhKXt2YXIgYj1hLnJlcGxhY2Uob2EscGEpO0RbYl09bmV3IEIoYiwxLCExLGEsXCJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2VcIiwhMSwhMSl9KTtbXCJ0YWJJbmRleFwiLFwiY3Jvc3NPcmlnaW5cIl0uZm9yRWFjaChmdW5jdGlvbihhKXtEW2FdPW5ldyBCKGEsMSwhMSxhLnRvTG93ZXJDYXNlKCksbnVsbCwhMSwhMSl9KTtcbkQueGxpbmtIcmVmPW5ldyBCKFwieGxpbmtIcmVmXCIsMSwhMSxcInhsaW5rOmhyZWZcIixcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIiwhMCwhMSk7W1wic3JjXCIsXCJocmVmXCIsXCJhY3Rpb25cIixcImZvcm1BY3Rpb25cIl0uZm9yRWFjaChmdW5jdGlvbihhKXtEW2FdPW5ldyBCKGEsMSwhMSxhLnRvTG93ZXJDYXNlKCksbnVsbCwhMCwhMCl9KTtcbmZ1bmN0aW9uIHFhKGEsYixjLGQpe3ZhciBlPUQuaGFzT3duUHJvcGVydHkoYik/RFtiXTpudWxsO3ZhciBmPW51bGwhPT1lPzA9PT1lLnR5cGU6ZD8hMTohKDI8Yi5sZW5ndGgpfHxcIm9cIiE9PWJbMF0mJlwiT1wiIT09YlswXXx8XCJuXCIhPT1iWzFdJiZcIk5cIiE9PWJbMV0/ITE6ITA7Znx8KG5hKGIsYyxlLGQpJiYoYz1udWxsKSxkfHxudWxsPT09ZT9sYShiKSYmKG51bGw9PT1jP2EucmVtb3ZlQXR0cmlidXRlKGIpOmEuc2V0QXR0cmlidXRlKGIsXCJcIitjKSk6ZS5tdXN0VXNlUHJvcGVydHk/YVtlLnByb3BlcnR5TmFtZV09bnVsbD09PWM/Mz09PWUudHlwZT8hMTpcIlwiOmM6KGI9ZS5hdHRyaWJ1dGVOYW1lLGQ9ZS5hdHRyaWJ1dGVOYW1lc3BhY2UsbnVsbD09PWM/YS5yZW1vdmVBdHRyaWJ1dGUoYik6KGU9ZS50eXBlLGM9Mz09PWV8fDQ9PT1lJiYhMD09PWM/XCJcIjpcIlwiK2MsZD9hLnNldEF0dHJpYnV0ZU5TKGQsYixjKTphLnNldEF0dHJpYnV0ZShiLGMpKSkpfVxudmFyIHJhPWFhLl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVELHNhPTYwMTAzLHRhPTYwMTA2LHVhPTYwMTA3LHdhPTYwMTA4LHhhPTYwMTE0LHlhPTYwMTA5LHphPTYwMTEwLEFhPTYwMTEyLEJhPTYwMTEzLENhPTYwMTIwLERhPTYwMTE1LEVhPTYwMTE2LEZhPTYwMTIxLEdhPTYwMTI4LEhhPTYwMTI5LElhPTYwMTMwLEphPTYwMTMxO1xuaWYoXCJmdW5jdGlvblwiPT09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLmZvcil7dmFyIEU9U3ltYm9sLmZvcjtzYT1FKFwicmVhY3QuZWxlbWVudFwiKTt0YT1FKFwicmVhY3QucG9ydGFsXCIpO3VhPUUoXCJyZWFjdC5mcmFnbWVudFwiKTt3YT1FKFwicmVhY3Quc3RyaWN0X21vZGVcIik7eGE9RShcInJlYWN0LnByb2ZpbGVyXCIpO3lhPUUoXCJyZWFjdC5wcm92aWRlclwiKTt6YT1FKFwicmVhY3QuY29udGV4dFwiKTtBYT1FKFwicmVhY3QuZm9yd2FyZF9yZWZcIik7QmE9RShcInJlYWN0LnN1c3BlbnNlXCIpO0NhPUUoXCJyZWFjdC5zdXNwZW5zZV9saXN0XCIpO0RhPUUoXCJyZWFjdC5tZW1vXCIpO0VhPUUoXCJyZWFjdC5sYXp5XCIpO0ZhPUUoXCJyZWFjdC5ibG9ja1wiKTtFKFwicmVhY3Quc2NvcGVcIik7R2E9RShcInJlYWN0Lm9wYXF1ZS5pZFwiKTtIYT1FKFwicmVhY3QuZGVidWdfdHJhY2VfbW9kZVwiKTtJYT1FKFwicmVhY3Qub2Zmc2NyZWVuXCIpO0phPUUoXCJyZWFjdC5sZWdhY3lfaGlkZGVuXCIpfVxudmFyIEthPVwiZnVuY3Rpb25cIj09PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvcjtmdW5jdGlvbiBMYShhKXtpZihudWxsPT09YXx8XCJvYmplY3RcIiE9PXR5cGVvZiBhKXJldHVybiBudWxsO2E9S2EmJmFbS2FdfHxhW1wiQEBpdGVyYXRvclwiXTtyZXR1cm5cImZ1bmN0aW9uXCI9PT10eXBlb2YgYT9hOm51bGx9dmFyIE1hO2Z1bmN0aW9uIE5hKGEpe2lmKHZvaWQgMD09PU1hKXRyeXt0aHJvdyBFcnJvcigpO31jYXRjaChjKXt2YXIgYj1jLnN0YWNrLnRyaW0oKS5tYXRjaCgvXFxuKCAqKGF0ICk/KS8pO01hPWImJmJbMV18fFwiXCJ9cmV0dXJuXCJcXG5cIitNYSthfXZhciBPYT0hMTtcbmZ1bmN0aW9uIFBhKGEsYil7aWYoIWF8fE9hKXJldHVyblwiXCI7T2E9ITA7dmFyIGM9RXJyb3IucHJlcGFyZVN0YWNrVHJhY2U7RXJyb3IucHJlcGFyZVN0YWNrVHJhY2U9dm9pZCAwO3RyeXtpZihiKWlmKGI9ZnVuY3Rpb24oKXt0aHJvdyBFcnJvcigpO30sT2JqZWN0LmRlZmluZVByb3BlcnR5KGIucHJvdG90eXBlLFwicHJvcHNcIix7c2V0OmZ1bmN0aW9uKCl7dGhyb3cgRXJyb3IoKTt9fSksXCJvYmplY3RcIj09PXR5cGVvZiBSZWZsZWN0JiZSZWZsZWN0LmNvbnN0cnVjdCl7dHJ5e1JlZmxlY3QuY29uc3RydWN0KGIsW10pfWNhdGNoKGspe3ZhciBkPWt9UmVmbGVjdC5jb25zdHJ1Y3QoYSxbXSxiKX1lbHNle3RyeXtiLmNhbGwoKX1jYXRjaChrKXtkPWt9YS5jYWxsKGIucHJvdG90eXBlKX1lbHNle3RyeXt0aHJvdyBFcnJvcigpO31jYXRjaChrKXtkPWt9YSgpfX1jYXRjaChrKXtpZihrJiZkJiZcInN0cmluZ1wiPT09dHlwZW9mIGsuc3RhY2spe2Zvcih2YXIgZT1rLnN0YWNrLnNwbGl0KFwiXFxuXCIpLFxuZj1kLnN0YWNrLnNwbGl0KFwiXFxuXCIpLGc9ZS5sZW5ndGgtMSxoPWYubGVuZ3RoLTE7MTw9ZyYmMDw9aCYmZVtnXSE9PWZbaF07KWgtLTtmb3IoOzE8PWcmJjA8PWg7Zy0tLGgtLSlpZihlW2ddIT09ZltoXSl7aWYoMSE9PWd8fDEhPT1oKXtkbyBpZihnLS0saC0tLDA+aHx8ZVtnXSE9PWZbaF0pcmV0dXJuXCJcXG5cIitlW2ddLnJlcGxhY2UoXCIgYXQgbmV3IFwiLFwiIGF0IFwiKTt3aGlsZSgxPD1nJiYwPD1oKX1icmVha319fWZpbmFsbHl7T2E9ITEsRXJyb3IucHJlcGFyZVN0YWNrVHJhY2U9Y31yZXR1cm4oYT1hP2EuZGlzcGxheU5hbWV8fGEubmFtZTpcIlwiKT9OYShhKTpcIlwifVxuZnVuY3Rpb24gUWEoYSl7c3dpdGNoKGEudGFnKXtjYXNlIDU6cmV0dXJuIE5hKGEudHlwZSk7Y2FzZSAxNjpyZXR1cm4gTmEoXCJMYXp5XCIpO2Nhc2UgMTM6cmV0dXJuIE5hKFwiU3VzcGVuc2VcIik7Y2FzZSAxOTpyZXR1cm4gTmEoXCJTdXNwZW5zZUxpc3RcIik7Y2FzZSAwOmNhc2UgMjpjYXNlIDE1OnJldHVybiBhPVBhKGEudHlwZSwhMSksYTtjYXNlIDExOnJldHVybiBhPVBhKGEudHlwZS5yZW5kZXIsITEpLGE7Y2FzZSAyMjpyZXR1cm4gYT1QYShhLnR5cGUuX3JlbmRlciwhMSksYTtjYXNlIDE6cmV0dXJuIGE9UGEoYS50eXBlLCEwKSxhO2RlZmF1bHQ6cmV0dXJuXCJcIn19XG5mdW5jdGlvbiBSYShhKXtpZihudWxsPT1hKXJldHVybiBudWxsO2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBhKXJldHVybiBhLmRpc3BsYXlOYW1lfHxhLm5hbWV8fG51bGw7aWYoXCJzdHJpbmdcIj09PXR5cGVvZiBhKXJldHVybiBhO3N3aXRjaChhKXtjYXNlIHVhOnJldHVyblwiRnJhZ21lbnRcIjtjYXNlIHRhOnJldHVyblwiUG9ydGFsXCI7Y2FzZSB4YTpyZXR1cm5cIlByb2ZpbGVyXCI7Y2FzZSB3YTpyZXR1cm5cIlN0cmljdE1vZGVcIjtjYXNlIEJhOnJldHVyblwiU3VzcGVuc2VcIjtjYXNlIENhOnJldHVyblwiU3VzcGVuc2VMaXN0XCJ9aWYoXCJvYmplY3RcIj09PXR5cGVvZiBhKXN3aXRjaChhLiQkdHlwZW9mKXtjYXNlIHphOnJldHVybihhLmRpc3BsYXlOYW1lfHxcIkNvbnRleHRcIikrXCIuQ29uc3VtZXJcIjtjYXNlIHlhOnJldHVybihhLl9jb250ZXh0LmRpc3BsYXlOYW1lfHxcIkNvbnRleHRcIikrXCIuUHJvdmlkZXJcIjtjYXNlIEFhOnZhciBiPWEucmVuZGVyO2I9Yi5kaXNwbGF5TmFtZXx8Yi5uYW1lfHxcIlwiO1xucmV0dXJuIGEuZGlzcGxheU5hbWV8fChcIlwiIT09Yj9cIkZvcndhcmRSZWYoXCIrYitcIilcIjpcIkZvcndhcmRSZWZcIik7Y2FzZSBEYTpyZXR1cm4gUmEoYS50eXBlKTtjYXNlIEZhOnJldHVybiBSYShhLl9yZW5kZXIpO2Nhc2UgRWE6Yj1hLl9wYXlsb2FkO2E9YS5faW5pdDt0cnl7cmV0dXJuIFJhKGEoYikpfWNhdGNoKGMpe319cmV0dXJuIG51bGx9ZnVuY3Rpb24gU2EoYSl7c3dpdGNoKHR5cGVvZiBhKXtjYXNlIFwiYm9vbGVhblwiOmNhc2UgXCJudW1iZXJcIjpjYXNlIFwib2JqZWN0XCI6Y2FzZSBcInN0cmluZ1wiOmNhc2UgXCJ1bmRlZmluZWRcIjpyZXR1cm4gYTtkZWZhdWx0OnJldHVyblwiXCJ9fWZ1bmN0aW9uIFRhKGEpe3ZhciBiPWEudHlwZTtyZXR1cm4oYT1hLm5vZGVOYW1lKSYmXCJpbnB1dFwiPT09YS50b0xvd2VyQ2FzZSgpJiYoXCJjaGVja2JveFwiPT09Ynx8XCJyYWRpb1wiPT09Yil9XG5mdW5jdGlvbiBVYShhKXt2YXIgYj1UYShhKT9cImNoZWNrZWRcIjpcInZhbHVlXCIsYz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGEuY29uc3RydWN0b3IucHJvdG90eXBlLGIpLGQ9XCJcIithW2JdO2lmKCFhLmhhc093blByb3BlcnR5KGIpJiZcInVuZGVmaW5lZFwiIT09dHlwZW9mIGMmJlwiZnVuY3Rpb25cIj09PXR5cGVvZiBjLmdldCYmXCJmdW5jdGlvblwiPT09dHlwZW9mIGMuc2V0KXt2YXIgZT1jLmdldCxmPWMuc2V0O09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLGIse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS5jYWxsKHRoaXMpfSxzZXQ6ZnVuY3Rpb24oYSl7ZD1cIlwiK2E7Zi5jYWxsKHRoaXMsYSl9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGEsYix7ZW51bWVyYWJsZTpjLmVudW1lcmFibGV9KTtyZXR1cm57Z2V0VmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gZH0sc2V0VmFsdWU6ZnVuY3Rpb24oYSl7ZD1cIlwiK2F9LHN0b3BUcmFja2luZzpmdW5jdGlvbigpe2EuX3ZhbHVlVHJhY2tlcj1cbm51bGw7ZGVsZXRlIGFbYl19fX19ZnVuY3Rpb24gVmEoYSl7YS5fdmFsdWVUcmFja2VyfHwoYS5fdmFsdWVUcmFja2VyPVVhKGEpKX1mdW5jdGlvbiBXYShhKXtpZighYSlyZXR1cm4hMTt2YXIgYj1hLl92YWx1ZVRyYWNrZXI7aWYoIWIpcmV0dXJuITA7dmFyIGM9Yi5nZXRWYWx1ZSgpO3ZhciBkPVwiXCI7YSYmKGQ9VGEoYSk/YS5jaGVja2VkP1widHJ1ZVwiOlwiZmFsc2VcIjphLnZhbHVlKTthPWQ7cmV0dXJuIGEhPT1jPyhiLnNldFZhbHVlKGEpLCEwKTohMX1mdW5jdGlvbiBYYShhKXthPWF8fChcInVuZGVmaW5lZFwiIT09dHlwZW9mIGRvY3VtZW50P2RvY3VtZW50OnZvaWQgMCk7aWYoXCJ1bmRlZmluZWRcIj09PXR5cGVvZiBhKXJldHVybiBudWxsO3RyeXtyZXR1cm4gYS5hY3RpdmVFbGVtZW50fHxhLmJvZHl9Y2F0Y2goYil7cmV0dXJuIGEuYm9keX19XG5mdW5jdGlvbiBZYShhLGIpe3ZhciBjPWIuY2hlY2tlZDtyZXR1cm4gbSh7fSxiLHtkZWZhdWx0Q2hlY2tlZDp2b2lkIDAsZGVmYXVsdFZhbHVlOnZvaWQgMCx2YWx1ZTp2b2lkIDAsY2hlY2tlZDpudWxsIT1jP2M6YS5fd3JhcHBlclN0YXRlLmluaXRpYWxDaGVja2VkfSl9ZnVuY3Rpb24gWmEoYSxiKXt2YXIgYz1udWxsPT1iLmRlZmF1bHRWYWx1ZT9cIlwiOmIuZGVmYXVsdFZhbHVlLGQ9bnVsbCE9Yi5jaGVja2VkP2IuY2hlY2tlZDpiLmRlZmF1bHRDaGVja2VkO2M9U2EobnVsbCE9Yi52YWx1ZT9iLnZhbHVlOmMpO2EuX3dyYXBwZXJTdGF0ZT17aW5pdGlhbENoZWNrZWQ6ZCxpbml0aWFsVmFsdWU6Yyxjb250cm9sbGVkOlwiY2hlY2tib3hcIj09PWIudHlwZXx8XCJyYWRpb1wiPT09Yi50eXBlP251bGwhPWIuY2hlY2tlZDpudWxsIT1iLnZhbHVlfX1mdW5jdGlvbiAkYShhLGIpe2I9Yi5jaGVja2VkO251bGwhPWImJnFhKGEsXCJjaGVja2VkXCIsYiwhMSl9XG5mdW5jdGlvbiBhYihhLGIpeyRhKGEsYik7dmFyIGM9U2EoYi52YWx1ZSksZD1iLnR5cGU7aWYobnVsbCE9YylpZihcIm51bWJlclwiPT09ZCl7aWYoMD09PWMmJlwiXCI9PT1hLnZhbHVlfHxhLnZhbHVlIT1jKWEudmFsdWU9XCJcIitjfWVsc2UgYS52YWx1ZSE9PVwiXCIrYyYmKGEudmFsdWU9XCJcIitjKTtlbHNlIGlmKFwic3VibWl0XCI9PT1kfHxcInJlc2V0XCI9PT1kKXthLnJlbW92ZUF0dHJpYnV0ZShcInZhbHVlXCIpO3JldHVybn1iLmhhc093blByb3BlcnR5KFwidmFsdWVcIik/YmIoYSxiLnR5cGUsYyk6Yi5oYXNPd25Qcm9wZXJ0eShcImRlZmF1bHRWYWx1ZVwiKSYmYmIoYSxiLnR5cGUsU2EoYi5kZWZhdWx0VmFsdWUpKTtudWxsPT1iLmNoZWNrZWQmJm51bGwhPWIuZGVmYXVsdENoZWNrZWQmJihhLmRlZmF1bHRDaGVja2VkPSEhYi5kZWZhdWx0Q2hlY2tlZCl9XG5mdW5jdGlvbiBjYihhLGIsYyl7aWYoYi5oYXNPd25Qcm9wZXJ0eShcInZhbHVlXCIpfHxiLmhhc093blByb3BlcnR5KFwiZGVmYXVsdFZhbHVlXCIpKXt2YXIgZD1iLnR5cGU7aWYoIShcInN1Ym1pdFwiIT09ZCYmXCJyZXNldFwiIT09ZHx8dm9pZCAwIT09Yi52YWx1ZSYmbnVsbCE9PWIudmFsdWUpKXJldHVybjtiPVwiXCIrYS5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZTtjfHxiPT09YS52YWx1ZXx8KGEudmFsdWU9Yik7YS5kZWZhdWx0VmFsdWU9Yn1jPWEubmFtZTtcIlwiIT09YyYmKGEubmFtZT1cIlwiKTthLmRlZmF1bHRDaGVja2VkPSEhYS5fd3JhcHBlclN0YXRlLmluaXRpYWxDaGVja2VkO1wiXCIhPT1jJiYoYS5uYW1lPWMpfVxuZnVuY3Rpb24gYmIoYSxiLGMpe2lmKFwibnVtYmVyXCIhPT1ifHxYYShhLm93bmVyRG9jdW1lbnQpIT09YSludWxsPT1jP2EuZGVmYXVsdFZhbHVlPVwiXCIrYS5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZTphLmRlZmF1bHRWYWx1ZSE9PVwiXCIrYyYmKGEuZGVmYXVsdFZhbHVlPVwiXCIrYyl9ZnVuY3Rpb24gZGIoYSl7dmFyIGI9XCJcIjthYS5DaGlsZHJlbi5mb3JFYWNoKGEsZnVuY3Rpb24oYSl7bnVsbCE9YSYmKGIrPWEpfSk7cmV0dXJuIGJ9ZnVuY3Rpb24gZWIoYSxiKXthPW0oe2NoaWxkcmVuOnZvaWQgMH0sYik7aWYoYj1kYihiLmNoaWxkcmVuKSlhLmNoaWxkcmVuPWI7cmV0dXJuIGF9XG5mdW5jdGlvbiBmYihhLGIsYyxkKXthPWEub3B0aW9ucztpZihiKXtiPXt9O2Zvcih2YXIgZT0wO2U8Yy5sZW5ndGg7ZSsrKWJbXCIkXCIrY1tlXV09ITA7Zm9yKGM9MDtjPGEubGVuZ3RoO2MrKyllPWIuaGFzT3duUHJvcGVydHkoXCIkXCIrYVtjXS52YWx1ZSksYVtjXS5zZWxlY3RlZCE9PWUmJihhW2NdLnNlbGVjdGVkPWUpLGUmJmQmJihhW2NdLmRlZmF1bHRTZWxlY3RlZD0hMCl9ZWxzZXtjPVwiXCIrU2EoYyk7Yj1udWxsO2ZvcihlPTA7ZTxhLmxlbmd0aDtlKyspe2lmKGFbZV0udmFsdWU9PT1jKXthW2VdLnNlbGVjdGVkPSEwO2QmJihhW2VdLmRlZmF1bHRTZWxlY3RlZD0hMCk7cmV0dXJufW51bGwhPT1ifHxhW2VdLmRpc2FibGVkfHwoYj1hW2VdKX1udWxsIT09YiYmKGIuc2VsZWN0ZWQ9ITApfX1cbmZ1bmN0aW9uIGdiKGEsYil7aWYobnVsbCE9Yi5kYW5nZXJvdXNseVNldElubmVySFRNTCl0aHJvdyBFcnJvcih5KDkxKSk7cmV0dXJuIG0oe30sYix7dmFsdWU6dm9pZCAwLGRlZmF1bHRWYWx1ZTp2b2lkIDAsY2hpbGRyZW46XCJcIithLl93cmFwcGVyU3RhdGUuaW5pdGlhbFZhbHVlfSl9ZnVuY3Rpb24gaGIoYSxiKXt2YXIgYz1iLnZhbHVlO2lmKG51bGw9PWMpe2M9Yi5jaGlsZHJlbjtiPWIuZGVmYXVsdFZhbHVlO2lmKG51bGwhPWMpe2lmKG51bGwhPWIpdGhyb3cgRXJyb3IoeSg5MikpO2lmKEFycmF5LmlzQXJyYXkoYykpe2lmKCEoMT49Yy5sZW5ndGgpKXRocm93IEVycm9yKHkoOTMpKTtjPWNbMF19Yj1jfW51bGw9PWImJihiPVwiXCIpO2M9Yn1hLl93cmFwcGVyU3RhdGU9e2luaXRpYWxWYWx1ZTpTYShjKX19XG5mdW5jdGlvbiBpYihhLGIpe3ZhciBjPVNhKGIudmFsdWUpLGQ9U2EoYi5kZWZhdWx0VmFsdWUpO251bGwhPWMmJihjPVwiXCIrYyxjIT09YS52YWx1ZSYmKGEudmFsdWU9YyksbnVsbD09Yi5kZWZhdWx0VmFsdWUmJmEuZGVmYXVsdFZhbHVlIT09YyYmKGEuZGVmYXVsdFZhbHVlPWMpKTtudWxsIT1kJiYoYS5kZWZhdWx0VmFsdWU9XCJcIitkKX1mdW5jdGlvbiBqYihhKXt2YXIgYj1hLnRleHRDb250ZW50O2I9PT1hLl93cmFwcGVyU3RhdGUuaW5pdGlhbFZhbHVlJiZcIlwiIT09YiYmbnVsbCE9PWImJihhLnZhbHVlPWIpfXZhciBrYj17aHRtbDpcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIixtYXRobWw6XCJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MXCIsc3ZnOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn07XG5mdW5jdGlvbiBsYihhKXtzd2l0Y2goYSl7Y2FzZSBcInN2Z1wiOnJldHVyblwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIjtjYXNlIFwibWF0aFwiOnJldHVyblwiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTFwiO2RlZmF1bHQ6cmV0dXJuXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCJ9fWZ1bmN0aW9uIG1iKGEsYil7cmV0dXJuIG51bGw9PWF8fFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiPT09YT9sYihiKTpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI9PT1hJiZcImZvcmVpZ25PYmplY3RcIj09PWI/XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCI6YX1cbnZhciBuYixvYj1mdW5jdGlvbihhKXtyZXR1cm5cInVuZGVmaW5lZFwiIT09dHlwZW9mIE1TQXBwJiZNU0FwcC5leGVjVW5zYWZlTG9jYWxGdW5jdGlvbj9mdW5jdGlvbihiLGMsZCxlKXtNU0FwcC5leGVjVW5zYWZlTG9jYWxGdW5jdGlvbihmdW5jdGlvbigpe3JldHVybiBhKGIsYyxkLGUpfSl9OmF9KGZ1bmN0aW9uKGEsYil7aWYoYS5uYW1lc3BhY2VVUkkhPT1rYi5zdmd8fFwiaW5uZXJIVE1MXCJpbiBhKWEuaW5uZXJIVE1MPWI7ZWxzZXtuYj1uYnx8ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtuYi5pbm5lckhUTUw9XCI8c3ZnPlwiK2IudmFsdWVPZigpLnRvU3RyaW5nKCkrXCI8L3N2Zz5cIjtmb3IoYj1uYi5maXJzdENoaWxkO2EuZmlyc3RDaGlsZDspYS5yZW1vdmVDaGlsZChhLmZpcnN0Q2hpbGQpO2Zvcig7Yi5maXJzdENoaWxkOylhLmFwcGVuZENoaWxkKGIuZmlyc3RDaGlsZCl9fSk7XG5mdW5jdGlvbiBwYihhLGIpe2lmKGIpe3ZhciBjPWEuZmlyc3RDaGlsZDtpZihjJiZjPT09YS5sYXN0Q2hpbGQmJjM9PT1jLm5vZGVUeXBlKXtjLm5vZGVWYWx1ZT1iO3JldHVybn19YS50ZXh0Q29udGVudD1ifVxudmFyIHFiPXthbmltYXRpb25JdGVyYXRpb25Db3VudDohMCxib3JkZXJJbWFnZU91dHNldDohMCxib3JkZXJJbWFnZVNsaWNlOiEwLGJvcmRlckltYWdlV2lkdGg6ITAsYm94RmxleDohMCxib3hGbGV4R3JvdXA6ITAsYm94T3JkaW5hbEdyb3VwOiEwLGNvbHVtbkNvdW50OiEwLGNvbHVtbnM6ITAsZmxleDohMCxmbGV4R3JvdzohMCxmbGV4UG9zaXRpdmU6ITAsZmxleFNocmluazohMCxmbGV4TmVnYXRpdmU6ITAsZmxleE9yZGVyOiEwLGdyaWRBcmVhOiEwLGdyaWRSb3c6ITAsZ3JpZFJvd0VuZDohMCxncmlkUm93U3BhbjohMCxncmlkUm93U3RhcnQ6ITAsZ3JpZENvbHVtbjohMCxncmlkQ29sdW1uRW5kOiEwLGdyaWRDb2x1bW5TcGFuOiEwLGdyaWRDb2x1bW5TdGFydDohMCxmb250V2VpZ2h0OiEwLGxpbmVDbGFtcDohMCxsaW5lSGVpZ2h0OiEwLG9wYWNpdHk6ITAsb3JkZXI6ITAsb3JwaGFuczohMCx0YWJTaXplOiEwLHdpZG93czohMCx6SW5kZXg6ITAsem9vbTohMCxmaWxsT3BhY2l0eTohMCxcbmZsb29kT3BhY2l0eTohMCxzdG9wT3BhY2l0eTohMCxzdHJva2VEYXNoYXJyYXk6ITAsc3Ryb2tlRGFzaG9mZnNldDohMCxzdHJva2VNaXRlcmxpbWl0OiEwLHN0cm9rZU9wYWNpdHk6ITAsc3Ryb2tlV2lkdGg6ITB9LHJiPVtcIldlYmtpdFwiLFwibXNcIixcIk1velwiLFwiT1wiXTtPYmplY3Qua2V5cyhxYikuZm9yRWFjaChmdW5jdGlvbihhKXtyYi5mb3JFYWNoKGZ1bmN0aW9uKGIpe2I9YithLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2Euc3Vic3RyaW5nKDEpO3FiW2JdPXFiW2FdfSl9KTtmdW5jdGlvbiBzYihhLGIsYyl7cmV0dXJuIG51bGw9PWJ8fFwiYm9vbGVhblwiPT09dHlwZW9mIGJ8fFwiXCI9PT1iP1wiXCI6Y3x8XCJudW1iZXJcIiE9PXR5cGVvZiBifHwwPT09Ynx8cWIuaGFzT3duUHJvcGVydHkoYSkmJnFiW2FdPyhcIlwiK2IpLnRyaW0oKTpiK1wicHhcIn1cbmZ1bmN0aW9uIHRiKGEsYil7YT1hLnN0eWxlO2Zvcih2YXIgYyBpbiBiKWlmKGIuaGFzT3duUHJvcGVydHkoYykpe3ZhciBkPTA9PT1jLmluZGV4T2YoXCItLVwiKSxlPXNiKGMsYltjXSxkKTtcImZsb2F0XCI9PT1jJiYoYz1cImNzc0Zsb2F0XCIpO2Q/YS5zZXRQcm9wZXJ0eShjLGUpOmFbY109ZX19dmFyIHViPW0oe21lbnVpdGVtOiEwfSx7YXJlYTohMCxiYXNlOiEwLGJyOiEwLGNvbDohMCxlbWJlZDohMCxocjohMCxpbWc6ITAsaW5wdXQ6ITAsa2V5Z2VuOiEwLGxpbms6ITAsbWV0YTohMCxwYXJhbTohMCxzb3VyY2U6ITAsdHJhY2s6ITAsd2JyOiEwfSk7XG5mdW5jdGlvbiB2YihhLGIpe2lmKGIpe2lmKHViW2FdJiYobnVsbCE9Yi5jaGlsZHJlbnx8bnVsbCE9Yi5kYW5nZXJvdXNseVNldElubmVySFRNTCkpdGhyb3cgRXJyb3IoeSgxMzcsYSkpO2lmKG51bGwhPWIuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwpe2lmKG51bGwhPWIuY2hpbGRyZW4pdGhyb3cgRXJyb3IoeSg2MCkpO2lmKCEoXCJvYmplY3RcIj09PXR5cGVvZiBiLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MJiZcIl9faHRtbFwiaW4gYi5kYW5nZXJvdXNseVNldElubmVySFRNTCkpdGhyb3cgRXJyb3IoeSg2MSkpO31pZihudWxsIT1iLnN0eWxlJiZcIm9iamVjdFwiIT09dHlwZW9mIGIuc3R5bGUpdGhyb3cgRXJyb3IoeSg2MikpO319XG5mdW5jdGlvbiB3YihhLGIpe2lmKC0xPT09YS5pbmRleE9mKFwiLVwiKSlyZXR1cm5cInN0cmluZ1wiPT09dHlwZW9mIGIuaXM7c3dpdGNoKGEpe2Nhc2UgXCJhbm5vdGF0aW9uLXhtbFwiOmNhc2UgXCJjb2xvci1wcm9maWxlXCI6Y2FzZSBcImZvbnQtZmFjZVwiOmNhc2UgXCJmb250LWZhY2Utc3JjXCI6Y2FzZSBcImZvbnQtZmFjZS11cmlcIjpjYXNlIFwiZm9udC1mYWNlLWZvcm1hdFwiOmNhc2UgXCJmb250LWZhY2UtbmFtZVwiOmNhc2UgXCJtaXNzaW5nLWdseXBoXCI6cmV0dXJuITE7ZGVmYXVsdDpyZXR1cm4hMH19ZnVuY3Rpb24geGIoYSl7YT1hLnRhcmdldHx8YS5zcmNFbGVtZW50fHx3aW5kb3c7YS5jb3JyZXNwb25kaW5nVXNlRWxlbWVudCYmKGE9YS5jb3JyZXNwb25kaW5nVXNlRWxlbWVudCk7cmV0dXJuIDM9PT1hLm5vZGVUeXBlP2EucGFyZW50Tm9kZTphfXZhciB5Yj1udWxsLHpiPW51bGwsQWI9bnVsbDtcbmZ1bmN0aW9uIEJiKGEpe2lmKGE9Q2IoYSkpe2lmKFwiZnVuY3Rpb25cIiE9PXR5cGVvZiB5Yil0aHJvdyBFcnJvcih5KDI4MCkpO3ZhciBiPWEuc3RhdGVOb2RlO2ImJihiPURiKGIpLHliKGEuc3RhdGVOb2RlLGEudHlwZSxiKSl9fWZ1bmN0aW9uIEViKGEpe3piP0FiP0FiLnB1c2goYSk6QWI9W2FdOnpiPWF9ZnVuY3Rpb24gRmIoKXtpZih6Yil7dmFyIGE9emIsYj1BYjtBYj16Yj1udWxsO0JiKGEpO2lmKGIpZm9yKGE9MDthPGIubGVuZ3RoO2ErKylCYihiW2FdKX19ZnVuY3Rpb24gR2IoYSxiKXtyZXR1cm4gYShiKX1mdW5jdGlvbiBIYihhLGIsYyxkLGUpe3JldHVybiBhKGIsYyxkLGUpfWZ1bmN0aW9uIEliKCl7fXZhciBKYj1HYixLYj0hMSxMYj0hMTtmdW5jdGlvbiBNYigpe2lmKG51bGwhPT16Ynx8bnVsbCE9PUFiKUliKCksRmIoKX1cbmZ1bmN0aW9uIE5iKGEsYixjKXtpZihMYilyZXR1cm4gYShiLGMpO0xiPSEwO3RyeXtyZXR1cm4gSmIoYSxiLGMpfWZpbmFsbHl7TGI9ITEsTWIoKX19XG5mdW5jdGlvbiBPYihhLGIpe3ZhciBjPWEuc3RhdGVOb2RlO2lmKG51bGw9PT1jKXJldHVybiBudWxsO3ZhciBkPURiKGMpO2lmKG51bGw9PT1kKXJldHVybiBudWxsO2M9ZFtiXTthOnN3aXRjaChiKXtjYXNlIFwib25DbGlja1wiOmNhc2UgXCJvbkNsaWNrQ2FwdHVyZVwiOmNhc2UgXCJvbkRvdWJsZUNsaWNrXCI6Y2FzZSBcIm9uRG91YmxlQ2xpY2tDYXB0dXJlXCI6Y2FzZSBcIm9uTW91c2VEb3duXCI6Y2FzZSBcIm9uTW91c2VEb3duQ2FwdHVyZVwiOmNhc2UgXCJvbk1vdXNlTW92ZVwiOmNhc2UgXCJvbk1vdXNlTW92ZUNhcHR1cmVcIjpjYXNlIFwib25Nb3VzZVVwXCI6Y2FzZSBcIm9uTW91c2VVcENhcHR1cmVcIjpjYXNlIFwib25Nb3VzZUVudGVyXCI6KGQ9IWQuZGlzYWJsZWQpfHwoYT1hLnR5cGUsZD0hKFwiYnV0dG9uXCI9PT1hfHxcImlucHV0XCI9PT1hfHxcInNlbGVjdFwiPT09YXx8XCJ0ZXh0YXJlYVwiPT09YSkpO2E9IWQ7YnJlYWsgYTtkZWZhdWx0OmE9ITF9aWYoYSlyZXR1cm4gbnVsbDtpZihjJiZcImZ1bmN0aW9uXCIhPT1cbnR5cGVvZiBjKXRocm93IEVycm9yKHkoMjMxLGIsdHlwZW9mIGMpKTtyZXR1cm4gY312YXIgUGI9ITE7aWYoZmEpdHJ5e3ZhciBRYj17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoUWIsXCJwYXNzaXZlXCIse2dldDpmdW5jdGlvbigpe1BiPSEwfX0pO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwidGVzdFwiLFFiLFFiKTt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRlc3RcIixRYixRYil9Y2F0Y2goYSl7UGI9ITF9ZnVuY3Rpb24gUmIoYSxiLGMsZCxlLGYsZyxoLGspe3ZhciBsPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywzKTt0cnl7Yi5hcHBseShjLGwpfWNhdGNoKG4pe3RoaXMub25FcnJvcihuKX19dmFyIFNiPSExLFRiPW51bGwsVWI9ITEsVmI9bnVsbCxXYj17b25FcnJvcjpmdW5jdGlvbihhKXtTYj0hMDtUYj1hfX07ZnVuY3Rpb24gWGIoYSxiLGMsZCxlLGYsZyxoLGspe1NiPSExO1RiPW51bGw7UmIuYXBwbHkoV2IsYXJndW1lbnRzKX1cbmZ1bmN0aW9uIFliKGEsYixjLGQsZSxmLGcsaCxrKXtYYi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYoU2Ipe2lmKFNiKXt2YXIgbD1UYjtTYj0hMTtUYj1udWxsfWVsc2UgdGhyb3cgRXJyb3IoeSgxOTgpKTtVYnx8KFViPSEwLFZiPWwpfX1mdW5jdGlvbiBaYihhKXt2YXIgYj1hLGM9YTtpZihhLmFsdGVybmF0ZSlmb3IoO2IucmV0dXJuOyliPWIucmV0dXJuO2Vsc2V7YT1iO2RvIGI9YSwwIT09KGIuZmxhZ3MmMTAyNikmJihjPWIucmV0dXJuKSxhPWIucmV0dXJuO3doaWxlKGEpfXJldHVybiAzPT09Yi50YWc/YzpudWxsfWZ1bmN0aW9uICRiKGEpe2lmKDEzPT09YS50YWcpe3ZhciBiPWEubWVtb2l6ZWRTdGF0ZTtudWxsPT09YiYmKGE9YS5hbHRlcm5hdGUsbnVsbCE9PWEmJihiPWEubWVtb2l6ZWRTdGF0ZSkpO2lmKG51bGwhPT1iKXJldHVybiBiLmRlaHlkcmF0ZWR9cmV0dXJuIG51bGx9ZnVuY3Rpb24gYWMoYSl7aWYoWmIoYSkhPT1hKXRocm93IEVycm9yKHkoMTg4KSk7fVxuZnVuY3Rpb24gYmMoYSl7dmFyIGI9YS5hbHRlcm5hdGU7aWYoIWIpe2I9WmIoYSk7aWYobnVsbD09PWIpdGhyb3cgRXJyb3IoeSgxODgpKTtyZXR1cm4gYiE9PWE/bnVsbDphfWZvcih2YXIgYz1hLGQ9Yjs7KXt2YXIgZT1jLnJldHVybjtpZihudWxsPT09ZSlicmVhazt2YXIgZj1lLmFsdGVybmF0ZTtpZihudWxsPT09Zil7ZD1lLnJldHVybjtpZihudWxsIT09ZCl7Yz1kO2NvbnRpbnVlfWJyZWFrfWlmKGUuY2hpbGQ9PT1mLmNoaWxkKXtmb3IoZj1lLmNoaWxkO2Y7KXtpZihmPT09YylyZXR1cm4gYWMoZSksYTtpZihmPT09ZClyZXR1cm4gYWMoZSksYjtmPWYuc2libGluZ310aHJvdyBFcnJvcih5KDE4OCkpO31pZihjLnJldHVybiE9PWQucmV0dXJuKWM9ZSxkPWY7ZWxzZXtmb3IodmFyIGc9ITEsaD1lLmNoaWxkO2g7KXtpZihoPT09Yyl7Zz0hMDtjPWU7ZD1mO2JyZWFrfWlmKGg9PT1kKXtnPSEwO2Q9ZTtjPWY7YnJlYWt9aD1oLnNpYmxpbmd9aWYoIWcpe2ZvcihoPWYuY2hpbGQ7aDspe2lmKGg9PT1cbmMpe2c9ITA7Yz1mO2Q9ZTticmVha31pZihoPT09ZCl7Zz0hMDtkPWY7Yz1lO2JyZWFrfWg9aC5zaWJsaW5nfWlmKCFnKXRocm93IEVycm9yKHkoMTg5KSk7fX1pZihjLmFsdGVybmF0ZSE9PWQpdGhyb3cgRXJyb3IoeSgxOTApKTt9aWYoMyE9PWMudGFnKXRocm93IEVycm9yKHkoMTg4KSk7cmV0dXJuIGMuc3RhdGVOb2RlLmN1cnJlbnQ9PT1jP2E6Yn1mdW5jdGlvbiBjYyhhKXthPWJjKGEpO2lmKCFhKXJldHVybiBudWxsO2Zvcih2YXIgYj1hOzspe2lmKDU9PT1iLnRhZ3x8Nj09PWIudGFnKXJldHVybiBiO2lmKGIuY2hpbGQpYi5jaGlsZC5yZXR1cm49YixiPWIuY2hpbGQ7ZWxzZXtpZihiPT09YSlicmVhaztmb3IoOyFiLnNpYmxpbmc7KXtpZighYi5yZXR1cm58fGIucmV0dXJuPT09YSlyZXR1cm4gbnVsbDtiPWIucmV0dXJufWIuc2libGluZy5yZXR1cm49Yi5yZXR1cm47Yj1iLnNpYmxpbmd9fXJldHVybiBudWxsfVxuZnVuY3Rpb24gZGMoYSxiKXtmb3IodmFyIGM9YS5hbHRlcm5hdGU7bnVsbCE9PWI7KXtpZihiPT09YXx8Yj09PWMpcmV0dXJuITA7Yj1iLnJldHVybn1yZXR1cm4hMX12YXIgZWMsZmMsZ2MsaGMsaWM9ITEsamM9W10sa2M9bnVsbCxsYz1udWxsLG1jPW51bGwsbmM9bmV3IE1hcCxvYz1uZXcgTWFwLHBjPVtdLHFjPVwibW91c2Vkb3duIG1vdXNldXAgdG91Y2hjYW5jZWwgdG91Y2hlbmQgdG91Y2hzdGFydCBhdXhjbGljayBkYmxjbGljayBwb2ludGVyY2FuY2VsIHBvaW50ZXJkb3duIHBvaW50ZXJ1cCBkcmFnZW5kIGRyYWdzdGFydCBkcm9wIGNvbXBvc2l0aW9uZW5kIGNvbXBvc2l0aW9uc3RhcnQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBpbnB1dCB0ZXh0SW5wdXQgY29weSBjdXQgcGFzdGUgY2xpY2sgY2hhbmdlIGNvbnRleHRtZW51IHJlc2V0IHN1Ym1pdFwiLnNwbGl0KFwiIFwiKTtcbmZ1bmN0aW9uIHJjKGEsYixjLGQsZSl7cmV0dXJue2Jsb2NrZWRPbjphLGRvbUV2ZW50TmFtZTpiLGV2ZW50U3lzdGVtRmxhZ3M6Y3wxNixuYXRpdmVFdmVudDplLHRhcmdldENvbnRhaW5lcnM6W2RdfX1mdW5jdGlvbiBzYyhhLGIpe3N3aXRjaChhKXtjYXNlIFwiZm9jdXNpblwiOmNhc2UgXCJmb2N1c291dFwiOmtjPW51bGw7YnJlYWs7Y2FzZSBcImRyYWdlbnRlclwiOmNhc2UgXCJkcmFnbGVhdmVcIjpsYz1udWxsO2JyZWFrO2Nhc2UgXCJtb3VzZW92ZXJcIjpjYXNlIFwibW91c2VvdXRcIjptYz1udWxsO2JyZWFrO2Nhc2UgXCJwb2ludGVyb3ZlclwiOmNhc2UgXCJwb2ludGVyb3V0XCI6bmMuZGVsZXRlKGIucG9pbnRlcklkKTticmVhaztjYXNlIFwiZ290cG9pbnRlcmNhcHR1cmVcIjpjYXNlIFwibG9zdHBvaW50ZXJjYXB0dXJlXCI6b2MuZGVsZXRlKGIucG9pbnRlcklkKX19XG5mdW5jdGlvbiB0YyhhLGIsYyxkLGUsZil7aWYobnVsbD09PWF8fGEubmF0aXZlRXZlbnQhPT1mKXJldHVybiBhPXJjKGIsYyxkLGUsZiksbnVsbCE9PWImJihiPUNiKGIpLG51bGwhPT1iJiZmYyhiKSksYTthLmV2ZW50U3lzdGVtRmxhZ3N8PWQ7Yj1hLnRhcmdldENvbnRhaW5lcnM7bnVsbCE9PWUmJi0xPT09Yi5pbmRleE9mKGUpJiZiLnB1c2goZSk7cmV0dXJuIGF9XG5mdW5jdGlvbiB1YyhhLGIsYyxkLGUpe3N3aXRjaChiKXtjYXNlIFwiZm9jdXNpblwiOnJldHVybiBrYz10YyhrYyxhLGIsYyxkLGUpLCEwO2Nhc2UgXCJkcmFnZW50ZXJcIjpyZXR1cm4gbGM9dGMobGMsYSxiLGMsZCxlKSwhMDtjYXNlIFwibW91c2VvdmVyXCI6cmV0dXJuIG1jPXRjKG1jLGEsYixjLGQsZSksITA7Y2FzZSBcInBvaW50ZXJvdmVyXCI6dmFyIGY9ZS5wb2ludGVySWQ7bmMuc2V0KGYsdGMobmMuZ2V0KGYpfHxudWxsLGEsYixjLGQsZSkpO3JldHVybiEwO2Nhc2UgXCJnb3Rwb2ludGVyY2FwdHVyZVwiOnJldHVybiBmPWUucG9pbnRlcklkLG9jLnNldChmLHRjKG9jLmdldChmKXx8bnVsbCxhLGIsYyxkLGUpKSwhMH1yZXR1cm4hMX1cbmZ1bmN0aW9uIHZjKGEpe3ZhciBiPXdjKGEudGFyZ2V0KTtpZihudWxsIT09Yil7dmFyIGM9WmIoYik7aWYobnVsbCE9PWMpaWYoYj1jLnRhZywxMz09PWIpe2lmKGI9JGIoYyksbnVsbCE9PWIpe2EuYmxvY2tlZE9uPWI7aGMoYS5sYW5lUHJpb3JpdHksZnVuY3Rpb24oKXtyLnVuc3RhYmxlX3J1bldpdGhQcmlvcml0eShhLnByaW9yaXR5LGZ1bmN0aW9uKCl7Z2MoYyl9KX0pO3JldHVybn19ZWxzZSBpZigzPT09YiYmYy5zdGF0ZU5vZGUuaHlkcmF0ZSl7YS5ibG9ja2VkT249Mz09PWMudGFnP2Muc3RhdGVOb2RlLmNvbnRhaW5lckluZm86bnVsbDtyZXR1cm59fWEuYmxvY2tlZE9uPW51bGx9XG5mdW5jdGlvbiB4YyhhKXtpZihudWxsIT09YS5ibG9ja2VkT24pcmV0dXJuITE7Zm9yKHZhciBiPWEudGFyZ2V0Q29udGFpbmVyczswPGIubGVuZ3RoOyl7dmFyIGM9eWMoYS5kb21FdmVudE5hbWUsYS5ldmVudFN5c3RlbUZsYWdzLGJbMF0sYS5uYXRpdmVFdmVudCk7aWYobnVsbCE9PWMpcmV0dXJuIGI9Q2IoYyksbnVsbCE9PWImJmZjKGIpLGEuYmxvY2tlZE9uPWMsITE7Yi5zaGlmdCgpfXJldHVybiEwfWZ1bmN0aW9uIHpjKGEsYixjKXt4YyhhKSYmYy5kZWxldGUoYil9XG5mdW5jdGlvbiBBYygpe2ZvcihpYz0hMTswPGpjLmxlbmd0aDspe3ZhciBhPWpjWzBdO2lmKG51bGwhPT1hLmJsb2NrZWRPbil7YT1DYihhLmJsb2NrZWRPbik7bnVsbCE9PWEmJmVjKGEpO2JyZWFrfWZvcih2YXIgYj1hLnRhcmdldENvbnRhaW5lcnM7MDxiLmxlbmd0aDspe3ZhciBjPXljKGEuZG9tRXZlbnROYW1lLGEuZXZlbnRTeXN0ZW1GbGFncyxiWzBdLGEubmF0aXZlRXZlbnQpO2lmKG51bGwhPT1jKXthLmJsb2NrZWRPbj1jO2JyZWFrfWIuc2hpZnQoKX1udWxsPT09YS5ibG9ja2VkT24mJmpjLnNoaWZ0KCl9bnVsbCE9PWtjJiZ4YyhrYykmJihrYz1udWxsKTtudWxsIT09bGMmJnhjKGxjKSYmKGxjPW51bGwpO251bGwhPT1tYyYmeGMobWMpJiYobWM9bnVsbCk7bmMuZm9yRWFjaCh6Yyk7b2MuZm9yRWFjaCh6Yyl9XG5mdW5jdGlvbiBCYyhhLGIpe2EuYmxvY2tlZE9uPT09YiYmKGEuYmxvY2tlZE9uPW51bGwsaWN8fChpYz0hMCxyLnVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2soci51bnN0YWJsZV9Ob3JtYWxQcmlvcml0eSxBYykpKX1cbmZ1bmN0aW9uIENjKGEpe2Z1bmN0aW9uIGIoYil7cmV0dXJuIEJjKGIsYSl9aWYoMDxqYy5sZW5ndGgpe0JjKGpjWzBdLGEpO2Zvcih2YXIgYz0xO2M8amMubGVuZ3RoO2MrKyl7dmFyIGQ9amNbY107ZC5ibG9ja2VkT249PT1hJiYoZC5ibG9ja2VkT249bnVsbCl9fW51bGwhPT1rYyYmQmMoa2MsYSk7bnVsbCE9PWxjJiZCYyhsYyxhKTtudWxsIT09bWMmJkJjKG1jLGEpO25jLmZvckVhY2goYik7b2MuZm9yRWFjaChiKTtmb3IoYz0wO2M8cGMubGVuZ3RoO2MrKylkPXBjW2NdLGQuYmxvY2tlZE9uPT09YSYmKGQuYmxvY2tlZE9uPW51bGwpO2Zvcig7MDxwYy5sZW5ndGgmJihjPXBjWzBdLG51bGw9PT1jLmJsb2NrZWRPbik7KXZjKGMpLG51bGw9PT1jLmJsb2NrZWRPbiYmcGMuc2hpZnQoKX1cbmZ1bmN0aW9uIERjKGEsYil7dmFyIGM9e307Y1thLnRvTG93ZXJDYXNlKCldPWIudG9Mb3dlckNhc2UoKTtjW1wiV2Via2l0XCIrYV09XCJ3ZWJraXRcIitiO2NbXCJNb3pcIithXT1cIm1velwiK2I7cmV0dXJuIGN9dmFyIEVjPXthbmltYXRpb25lbmQ6RGMoXCJBbmltYXRpb25cIixcIkFuaW1hdGlvbkVuZFwiKSxhbmltYXRpb25pdGVyYXRpb246RGMoXCJBbmltYXRpb25cIixcIkFuaW1hdGlvbkl0ZXJhdGlvblwiKSxhbmltYXRpb25zdGFydDpEYyhcIkFuaW1hdGlvblwiLFwiQW5pbWF0aW9uU3RhcnRcIiksdHJhbnNpdGlvbmVuZDpEYyhcIlRyYW5zaXRpb25cIixcIlRyYW5zaXRpb25FbmRcIil9LEZjPXt9LEdjPXt9O1xuZmEmJihHYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLnN0eWxlLFwiQW5pbWF0aW9uRXZlbnRcImluIHdpbmRvd3x8KGRlbGV0ZSBFYy5hbmltYXRpb25lbmQuYW5pbWF0aW9uLGRlbGV0ZSBFYy5hbmltYXRpb25pdGVyYXRpb24uYW5pbWF0aW9uLGRlbGV0ZSBFYy5hbmltYXRpb25zdGFydC5hbmltYXRpb24pLFwiVHJhbnNpdGlvbkV2ZW50XCJpbiB3aW5kb3d8fGRlbGV0ZSBFYy50cmFuc2l0aW9uZW5kLnRyYW5zaXRpb24pO2Z1bmN0aW9uIEhjKGEpe2lmKEZjW2FdKXJldHVybiBGY1thXTtpZighRWNbYV0pcmV0dXJuIGE7dmFyIGI9RWNbYV0sYztmb3IoYyBpbiBiKWlmKGIuaGFzT3duUHJvcGVydHkoYykmJmMgaW4gR2MpcmV0dXJuIEZjW2FdPWJbY107cmV0dXJuIGF9XG52YXIgSWM9SGMoXCJhbmltYXRpb25lbmRcIiksSmM9SGMoXCJhbmltYXRpb25pdGVyYXRpb25cIiksS2M9SGMoXCJhbmltYXRpb25zdGFydFwiKSxMYz1IYyhcInRyYW5zaXRpb25lbmRcIiksTWM9bmV3IE1hcCxOYz1uZXcgTWFwLE9jPVtcImFib3J0XCIsXCJhYm9ydFwiLEljLFwiYW5pbWF0aW9uRW5kXCIsSmMsXCJhbmltYXRpb25JdGVyYXRpb25cIixLYyxcImFuaW1hdGlvblN0YXJ0XCIsXCJjYW5wbGF5XCIsXCJjYW5QbGF5XCIsXCJjYW5wbGF5dGhyb3VnaFwiLFwiY2FuUGxheVRocm91Z2hcIixcImR1cmF0aW9uY2hhbmdlXCIsXCJkdXJhdGlvbkNoYW5nZVwiLFwiZW1wdGllZFwiLFwiZW1wdGllZFwiLFwiZW5jcnlwdGVkXCIsXCJlbmNyeXB0ZWRcIixcImVuZGVkXCIsXCJlbmRlZFwiLFwiZXJyb3JcIixcImVycm9yXCIsXCJnb3Rwb2ludGVyY2FwdHVyZVwiLFwiZ290UG9pbnRlckNhcHR1cmVcIixcImxvYWRcIixcImxvYWRcIixcImxvYWRlZGRhdGFcIixcImxvYWRlZERhdGFcIixcImxvYWRlZG1ldGFkYXRhXCIsXCJsb2FkZWRNZXRhZGF0YVwiLFwibG9hZHN0YXJ0XCIsXCJsb2FkU3RhcnRcIixcblwibG9zdHBvaW50ZXJjYXB0dXJlXCIsXCJsb3N0UG9pbnRlckNhcHR1cmVcIixcInBsYXlpbmdcIixcInBsYXlpbmdcIixcInByb2dyZXNzXCIsXCJwcm9ncmVzc1wiLFwic2Vla2luZ1wiLFwic2Vla2luZ1wiLFwic3RhbGxlZFwiLFwic3RhbGxlZFwiLFwic3VzcGVuZFwiLFwic3VzcGVuZFwiLFwidGltZXVwZGF0ZVwiLFwidGltZVVwZGF0ZVwiLExjLFwidHJhbnNpdGlvbkVuZFwiLFwid2FpdGluZ1wiLFwid2FpdGluZ1wiXTtmdW5jdGlvbiBQYyhhLGIpe2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7Yys9Mil7dmFyIGQ9YVtjXSxlPWFbYysxXTtlPVwib25cIisoZVswXS50b1VwcGVyQ2FzZSgpK2Uuc2xpY2UoMSkpO05jLnNldChkLGIpO01jLnNldChkLGUpO2RhKGUsW2RdKX19dmFyIFFjPXIudW5zdGFibGVfbm93O1FjKCk7dmFyIEY9ODtcbmZ1bmN0aW9uIFJjKGEpe2lmKDAhPT0oMSZhKSlyZXR1cm4gRj0xNSwxO2lmKDAhPT0oMiZhKSlyZXR1cm4gRj0xNCwyO2lmKDAhPT0oNCZhKSlyZXR1cm4gRj0xMyw0O3ZhciBiPTI0JmE7aWYoMCE9PWIpcmV0dXJuIEY9MTIsYjtpZigwIT09KGEmMzIpKXJldHVybiBGPTExLDMyO2I9MTkyJmE7aWYoMCE9PWIpcmV0dXJuIEY9MTAsYjtpZigwIT09KGEmMjU2KSlyZXR1cm4gRj05LDI1NjtiPTM1ODQmYTtpZigwIT09YilyZXR1cm4gRj04LGI7aWYoMCE9PShhJjQwOTYpKXJldHVybiBGPTcsNDA5NjtiPTQxODYxMTImYTtpZigwIT09YilyZXR1cm4gRj02LGI7Yj02MjkxNDU2MCZhO2lmKDAhPT1iKXJldHVybiBGPTUsYjtpZihhJjY3MTA4ODY0KXJldHVybiBGPTQsNjcxMDg4NjQ7aWYoMCE9PShhJjEzNDIxNzcyOCkpcmV0dXJuIEY9MywxMzQyMTc3Mjg7Yj04MDUzMDYzNjgmYTtpZigwIT09YilyZXR1cm4gRj0yLGI7aWYoMCE9PSgxMDczNzQxODI0JmEpKXJldHVybiBGPTEsMTA3Mzc0MTgyNDtcbkY9ODtyZXR1cm4gYX1mdW5jdGlvbiBTYyhhKXtzd2l0Y2goYSl7Y2FzZSA5OTpyZXR1cm4gMTU7Y2FzZSA5ODpyZXR1cm4gMTA7Y2FzZSA5NzpjYXNlIDk2OnJldHVybiA4O2Nhc2UgOTU6cmV0dXJuIDI7ZGVmYXVsdDpyZXR1cm4gMH19ZnVuY3Rpb24gVGMoYSl7c3dpdGNoKGEpe2Nhc2UgMTU6Y2FzZSAxNDpyZXR1cm4gOTk7Y2FzZSAxMzpjYXNlIDEyOmNhc2UgMTE6Y2FzZSAxMDpyZXR1cm4gOTg7Y2FzZSA5OmNhc2UgODpjYXNlIDc6Y2FzZSA2OmNhc2UgNDpjYXNlIDU6cmV0dXJuIDk3O2Nhc2UgMzpjYXNlIDI6Y2FzZSAxOnJldHVybiA5NTtjYXNlIDA6cmV0dXJuIDkwO2RlZmF1bHQ6dGhyb3cgRXJyb3IoeSgzNTgsYSkpO319XG5mdW5jdGlvbiBVYyhhLGIpe3ZhciBjPWEucGVuZGluZ0xhbmVzO2lmKDA9PT1jKXJldHVybiBGPTA7dmFyIGQ9MCxlPTAsZj1hLmV4cGlyZWRMYW5lcyxnPWEuc3VzcGVuZGVkTGFuZXMsaD1hLnBpbmdlZExhbmVzO2lmKDAhPT1mKWQ9ZixlPUY9MTU7ZWxzZSBpZihmPWMmMTM0MjE3NzI3LDAhPT1mKXt2YXIgaz1mJn5nOzAhPT1rPyhkPVJjKGspLGU9Rik6KGgmPWYsMCE9PWgmJihkPVJjKGgpLGU9RikpfWVsc2UgZj1jJn5nLDAhPT1mPyhkPVJjKGYpLGU9Rik6MCE9PWgmJihkPVJjKGgpLGU9Rik7aWYoMD09PWQpcmV0dXJuIDA7ZD0zMS1WYyhkKTtkPWMmKCgwPmQ/MDoxPDxkKTw8MSktMTtpZigwIT09YiYmYiE9PWQmJjA9PT0oYiZnKSl7UmMoYik7aWYoZTw9RilyZXR1cm4gYjtGPWV9Yj1hLmVudGFuZ2xlZExhbmVzO2lmKDAhPT1iKWZvcihhPWEuZW50YW5nbGVtZW50cyxiJj1kOzA8YjspYz0zMS1WYyhiKSxlPTE8PGMsZHw9YVtjXSxiJj1+ZTtyZXR1cm4gZH1cbmZ1bmN0aW9uIFdjKGEpe2E9YS5wZW5kaW5nTGFuZXMmLTEwNzM3NDE4MjU7cmV0dXJuIDAhPT1hP2E6YSYxMDczNzQxODI0PzEwNzM3NDE4MjQ6MH1mdW5jdGlvbiBYYyhhLGIpe3N3aXRjaChhKXtjYXNlIDE1OnJldHVybiAxO2Nhc2UgMTQ6cmV0dXJuIDI7Y2FzZSAxMjpyZXR1cm4gYT1ZYygyNCZ+YiksMD09PWE/WGMoMTAsYik6YTtjYXNlIDEwOnJldHVybiBhPVljKDE5MiZ+YiksMD09PWE/WGMoOCxiKTphO2Nhc2UgODpyZXR1cm4gYT1ZYygzNTg0Jn5iKSwwPT09YSYmKGE9WWMoNDE4NjExMiZ+YiksMD09PWEmJihhPTUxMikpLGE7Y2FzZSAyOnJldHVybiBiPVljKDgwNTMwNjM2OCZ+YiksMD09PWImJihiPTI2ODQzNTQ1NiksYn10aHJvdyBFcnJvcih5KDM1OCxhKSk7fWZ1bmN0aW9uIFljKGEpe3JldHVybiBhJi1hfWZ1bmN0aW9uIFpjKGEpe2Zvcih2YXIgYj1bXSxjPTA7MzE+YztjKyspYi5wdXNoKGEpO3JldHVybiBifVxuZnVuY3Rpb24gJGMoYSxiLGMpe2EucGVuZGluZ0xhbmVzfD1iO3ZhciBkPWItMTthLnN1c3BlbmRlZExhbmVzJj1kO2EucGluZ2VkTGFuZXMmPWQ7YT1hLmV2ZW50VGltZXM7Yj0zMS1WYyhiKTthW2JdPWN9dmFyIFZjPU1hdGguY2x6MzI/TWF0aC5jbHozMjphZCxiZD1NYXRoLmxvZyxjZD1NYXRoLkxOMjtmdW5jdGlvbiBhZChhKXtyZXR1cm4gMD09PWE/MzI6MzEtKGJkKGEpL2NkfDApfDB9dmFyIGRkPXIudW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHksZWQ9ci51bnN0YWJsZV9ydW5XaXRoUHJpb3JpdHksZmQ9ITA7ZnVuY3Rpb24gZ2QoYSxiLGMsZCl7S2J8fEliKCk7dmFyIGU9aGQsZj1LYjtLYj0hMDt0cnl7SGIoZSxhLGIsYyxkKX1maW5hbGx5eyhLYj1mKXx8TWIoKX19ZnVuY3Rpb24gaWQoYSxiLGMsZCl7ZWQoZGQsaGQuYmluZChudWxsLGEsYixjLGQpKX1cbmZ1bmN0aW9uIGhkKGEsYixjLGQpe2lmKGZkKXt2YXIgZTtpZigoZT0wPT09KGImNCkpJiYwPGpjLmxlbmd0aCYmLTE8cWMuaW5kZXhPZihhKSlhPXJjKG51bGwsYSxiLGMsZCksamMucHVzaChhKTtlbHNle3ZhciBmPXljKGEsYixjLGQpO2lmKG51bGw9PT1mKWUmJnNjKGEsZCk7ZWxzZXtpZihlKXtpZigtMTxxYy5pbmRleE9mKGEpKXthPXJjKGYsYSxiLGMsZCk7amMucHVzaChhKTtyZXR1cm59aWYodWMoZixhLGIsYyxkKSlyZXR1cm47c2MoYSxkKX1qZChhLGIsZCxudWxsLGMpfX19fVxuZnVuY3Rpb24geWMoYSxiLGMsZCl7dmFyIGU9eGIoZCk7ZT13YyhlKTtpZihudWxsIT09ZSl7dmFyIGY9WmIoZSk7aWYobnVsbD09PWYpZT1udWxsO2Vsc2V7dmFyIGc9Zi50YWc7aWYoMTM9PT1nKXtlPSRiKGYpO2lmKG51bGwhPT1lKXJldHVybiBlO2U9bnVsbH1lbHNlIGlmKDM9PT1nKXtpZihmLnN0YXRlTm9kZS5oeWRyYXRlKXJldHVybiAzPT09Zi50YWc/Zi5zdGF0ZU5vZGUuY29udGFpbmVySW5mbzpudWxsO2U9bnVsbH1lbHNlIGYhPT1lJiYoZT1udWxsKX19amQoYSxiLGQsZSxjKTtyZXR1cm4gbnVsbH12YXIga2Q9bnVsbCxsZD1udWxsLG1kPW51bGw7XG5mdW5jdGlvbiBuZCgpe2lmKG1kKXJldHVybiBtZDt2YXIgYSxiPWxkLGM9Yi5sZW5ndGgsZCxlPVwidmFsdWVcImluIGtkP2tkLnZhbHVlOmtkLnRleHRDb250ZW50LGY9ZS5sZW5ndGg7Zm9yKGE9MDthPGMmJmJbYV09PT1lW2FdO2ErKyk7dmFyIGc9Yy1hO2ZvcihkPTE7ZDw9ZyYmYltjLWRdPT09ZVtmLWRdO2QrKyk7cmV0dXJuIG1kPWUuc2xpY2UoYSwxPGQ/MS1kOnZvaWQgMCl9ZnVuY3Rpb24gb2QoYSl7dmFyIGI9YS5rZXlDb2RlO1wiY2hhckNvZGVcImluIGE/KGE9YS5jaGFyQ29kZSwwPT09YSYmMTM9PT1iJiYoYT0xMykpOmE9YjsxMD09PWEmJihhPTEzKTtyZXR1cm4gMzI8PWF8fDEzPT09YT9hOjB9ZnVuY3Rpb24gcGQoKXtyZXR1cm4hMH1mdW5jdGlvbiBxZCgpe3JldHVybiExfVxuZnVuY3Rpb24gcmQoYSl7ZnVuY3Rpb24gYihiLGQsZSxmLGcpe3RoaXMuX3JlYWN0TmFtZT1iO3RoaXMuX3RhcmdldEluc3Q9ZTt0aGlzLnR5cGU9ZDt0aGlzLm5hdGl2ZUV2ZW50PWY7dGhpcy50YXJnZXQ9Zzt0aGlzLmN1cnJlbnRUYXJnZXQ9bnVsbDtmb3IodmFyIGMgaW4gYSlhLmhhc093blByb3BlcnR5KGMpJiYoYj1hW2NdLHRoaXNbY109Yj9iKGYpOmZbY10pO3RoaXMuaXNEZWZhdWx0UHJldmVudGVkPShudWxsIT1mLmRlZmF1bHRQcmV2ZW50ZWQ/Zi5kZWZhdWx0UHJldmVudGVkOiExPT09Zi5yZXR1cm5WYWx1ZSk/cGQ6cWQ7dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1xZDtyZXR1cm4gdGhpc31tKGIucHJvdG90eXBlLHtwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3RoaXMuZGVmYXVsdFByZXZlbnRlZD0hMDt2YXIgYT10aGlzLm5hdGl2ZUV2ZW50O2EmJihhLnByZXZlbnREZWZhdWx0P2EucHJldmVudERlZmF1bHQoKTpcInVua25vd25cIiE9PXR5cGVvZiBhLnJldHVyblZhbHVlJiZcbihhLnJldHVyblZhbHVlPSExKSx0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1wZCl9LHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3ZhciBhPXRoaXMubmF0aXZlRXZlbnQ7YSYmKGEuc3RvcFByb3BhZ2F0aW9uP2Euc3RvcFByb3BhZ2F0aW9uKCk6XCJ1bmtub3duXCIhPT10eXBlb2YgYS5jYW5jZWxCdWJibGUmJihhLmNhbmNlbEJ1YmJsZT0hMCksdGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1wZCl9LHBlcnNpc3Q6ZnVuY3Rpb24oKXt9LGlzUGVyc2lzdGVudDpwZH0pO3JldHVybiBifVxudmFyIHNkPXtldmVudFBoYXNlOjAsYnViYmxlczowLGNhbmNlbGFibGU6MCx0aW1lU3RhbXA6ZnVuY3Rpb24oYSl7cmV0dXJuIGEudGltZVN0YW1wfHxEYXRlLm5vdygpfSxkZWZhdWx0UHJldmVudGVkOjAsaXNUcnVzdGVkOjB9LHRkPXJkKHNkKSx1ZD1tKHt9LHNkLHt2aWV3OjAsZGV0YWlsOjB9KSx2ZD1yZCh1ZCksd2QseGQseWQsQWQ9bSh7fSx1ZCx7c2NyZWVuWDowLHNjcmVlblk6MCxjbGllbnRYOjAsY2xpZW50WTowLHBhZ2VYOjAscGFnZVk6MCxjdHJsS2V5OjAsc2hpZnRLZXk6MCxhbHRLZXk6MCxtZXRhS2V5OjAsZ2V0TW9kaWZpZXJTdGF0ZTp6ZCxidXR0b246MCxidXR0b25zOjAscmVsYXRlZFRhcmdldDpmdW5jdGlvbihhKXtyZXR1cm4gdm9pZCAwPT09YS5yZWxhdGVkVGFyZ2V0P2EuZnJvbUVsZW1lbnQ9PT1hLnNyY0VsZW1lbnQ/YS50b0VsZW1lbnQ6YS5mcm9tRWxlbWVudDphLnJlbGF0ZWRUYXJnZXR9LG1vdmVtZW50WDpmdW5jdGlvbihhKXtpZihcIm1vdmVtZW50WFwiaW5cbmEpcmV0dXJuIGEubW92ZW1lbnRYO2EhPT15ZCYmKHlkJiZcIm1vdXNlbW92ZVwiPT09YS50eXBlPyh3ZD1hLnNjcmVlblgteWQuc2NyZWVuWCx4ZD1hLnNjcmVlblkteWQuc2NyZWVuWSk6eGQ9d2Q9MCx5ZD1hKTtyZXR1cm4gd2R9LG1vdmVtZW50WTpmdW5jdGlvbihhKXtyZXR1cm5cIm1vdmVtZW50WVwiaW4gYT9hLm1vdmVtZW50WTp4ZH19KSxCZD1yZChBZCksQ2Q9bSh7fSxBZCx7ZGF0YVRyYW5zZmVyOjB9KSxEZD1yZChDZCksRWQ9bSh7fSx1ZCx7cmVsYXRlZFRhcmdldDowfSksRmQ9cmQoRWQpLEdkPW0oe30sc2Qse2FuaW1hdGlvbk5hbWU6MCxlbGFwc2VkVGltZTowLHBzZXVkb0VsZW1lbnQ6MH0pLEhkPXJkKEdkKSxJZD1tKHt9LHNkLHtjbGlwYm9hcmREYXRhOmZ1bmN0aW9uKGEpe3JldHVyblwiY2xpcGJvYXJkRGF0YVwiaW4gYT9hLmNsaXBib2FyZERhdGE6d2luZG93LmNsaXBib2FyZERhdGF9fSksSmQ9cmQoSWQpLEtkPW0oe30sc2Qse2RhdGE6MH0pLExkPXJkKEtkKSxNZD17RXNjOlwiRXNjYXBlXCIsXG5TcGFjZWJhcjpcIiBcIixMZWZ0OlwiQXJyb3dMZWZ0XCIsVXA6XCJBcnJvd1VwXCIsUmlnaHQ6XCJBcnJvd1JpZ2h0XCIsRG93bjpcIkFycm93RG93blwiLERlbDpcIkRlbGV0ZVwiLFdpbjpcIk9TXCIsTWVudTpcIkNvbnRleHRNZW51XCIsQXBwczpcIkNvbnRleHRNZW51XCIsU2Nyb2xsOlwiU2Nyb2xsTG9ja1wiLE1velByaW50YWJsZUtleTpcIlVuaWRlbnRpZmllZFwifSxOZD17ODpcIkJhY2tzcGFjZVwiLDk6XCJUYWJcIiwxMjpcIkNsZWFyXCIsMTM6XCJFbnRlclwiLDE2OlwiU2hpZnRcIiwxNzpcIkNvbnRyb2xcIiwxODpcIkFsdFwiLDE5OlwiUGF1c2VcIiwyMDpcIkNhcHNMb2NrXCIsMjc6XCJFc2NhcGVcIiwzMjpcIiBcIiwzMzpcIlBhZ2VVcFwiLDM0OlwiUGFnZURvd25cIiwzNTpcIkVuZFwiLDM2OlwiSG9tZVwiLDM3OlwiQXJyb3dMZWZ0XCIsMzg6XCJBcnJvd1VwXCIsMzk6XCJBcnJvd1JpZ2h0XCIsNDA6XCJBcnJvd0Rvd25cIiw0NTpcIkluc2VydFwiLDQ2OlwiRGVsZXRlXCIsMTEyOlwiRjFcIiwxMTM6XCJGMlwiLDExNDpcIkYzXCIsMTE1OlwiRjRcIiwxMTY6XCJGNVwiLDExNzpcIkY2XCIsMTE4OlwiRjdcIixcbjExOTpcIkY4XCIsMTIwOlwiRjlcIiwxMjE6XCJGMTBcIiwxMjI6XCJGMTFcIiwxMjM6XCJGMTJcIiwxNDQ6XCJOdW1Mb2NrXCIsMTQ1OlwiU2Nyb2xsTG9ja1wiLDIyNDpcIk1ldGFcIn0sT2Q9e0FsdDpcImFsdEtleVwiLENvbnRyb2w6XCJjdHJsS2V5XCIsTWV0YTpcIm1ldGFLZXlcIixTaGlmdDpcInNoaWZ0S2V5XCJ9O2Z1bmN0aW9uIFBkKGEpe3ZhciBiPXRoaXMubmF0aXZlRXZlbnQ7cmV0dXJuIGIuZ2V0TW9kaWZpZXJTdGF0ZT9iLmdldE1vZGlmaWVyU3RhdGUoYSk6KGE9T2RbYV0pPyEhYlthXTohMX1mdW5jdGlvbiB6ZCgpe3JldHVybiBQZH1cbnZhciBRZD1tKHt9LHVkLHtrZXk6ZnVuY3Rpb24oYSl7aWYoYS5rZXkpe3ZhciBiPU1kW2Eua2V5XXx8YS5rZXk7aWYoXCJVbmlkZW50aWZpZWRcIiE9PWIpcmV0dXJuIGJ9cmV0dXJuXCJrZXlwcmVzc1wiPT09YS50eXBlPyhhPW9kKGEpLDEzPT09YT9cIkVudGVyXCI6U3RyaW5nLmZyb21DaGFyQ29kZShhKSk6XCJrZXlkb3duXCI9PT1hLnR5cGV8fFwia2V5dXBcIj09PWEudHlwZT9OZFthLmtleUNvZGVdfHxcIlVuaWRlbnRpZmllZFwiOlwiXCJ9LGNvZGU6MCxsb2NhdGlvbjowLGN0cmxLZXk6MCxzaGlmdEtleTowLGFsdEtleTowLG1ldGFLZXk6MCxyZXBlYXQ6MCxsb2NhbGU6MCxnZXRNb2RpZmllclN0YXRlOnpkLGNoYXJDb2RlOmZ1bmN0aW9uKGEpe3JldHVyblwia2V5cHJlc3NcIj09PWEudHlwZT9vZChhKTowfSxrZXlDb2RlOmZ1bmN0aW9uKGEpe3JldHVyblwia2V5ZG93blwiPT09YS50eXBlfHxcImtleXVwXCI9PT1hLnR5cGU/YS5rZXlDb2RlOjB9LHdoaWNoOmZ1bmN0aW9uKGEpe3JldHVyblwia2V5cHJlc3NcIj09PVxuYS50eXBlP29kKGEpOlwia2V5ZG93blwiPT09YS50eXBlfHxcImtleXVwXCI9PT1hLnR5cGU/YS5rZXlDb2RlOjB9fSksUmQ9cmQoUWQpLFNkPW0oe30sQWQse3BvaW50ZXJJZDowLHdpZHRoOjAsaGVpZ2h0OjAscHJlc3N1cmU6MCx0YW5nZW50aWFsUHJlc3N1cmU6MCx0aWx0WDowLHRpbHRZOjAsdHdpc3Q6MCxwb2ludGVyVHlwZTowLGlzUHJpbWFyeTowfSksVGQ9cmQoU2QpLFVkPW0oe30sdWQse3RvdWNoZXM6MCx0YXJnZXRUb3VjaGVzOjAsY2hhbmdlZFRvdWNoZXM6MCxhbHRLZXk6MCxtZXRhS2V5OjAsY3RybEtleTowLHNoaWZ0S2V5OjAsZ2V0TW9kaWZpZXJTdGF0ZTp6ZH0pLFZkPXJkKFVkKSxXZD1tKHt9LHNkLHtwcm9wZXJ0eU5hbWU6MCxlbGFwc2VkVGltZTowLHBzZXVkb0VsZW1lbnQ6MH0pLFhkPXJkKFdkKSxZZD1tKHt9LEFkLHtkZWx0YVg6ZnVuY3Rpb24oYSl7cmV0dXJuXCJkZWx0YVhcImluIGE/YS5kZWx0YVg6XCJ3aGVlbERlbHRhWFwiaW4gYT8tYS53aGVlbERlbHRhWDowfSxcbmRlbHRhWTpmdW5jdGlvbihhKXtyZXR1cm5cImRlbHRhWVwiaW4gYT9hLmRlbHRhWTpcIndoZWVsRGVsdGFZXCJpbiBhPy1hLndoZWVsRGVsdGFZOlwid2hlZWxEZWx0YVwiaW4gYT8tYS53aGVlbERlbHRhOjB9LGRlbHRhWjowLGRlbHRhTW9kZTowfSksWmQ9cmQoWWQpLCRkPVs5LDEzLDI3LDMyXSxhZT1mYSYmXCJDb21wb3NpdGlvbkV2ZW50XCJpbiB3aW5kb3csYmU9bnVsbDtmYSYmXCJkb2N1bWVudE1vZGVcImluIGRvY3VtZW50JiYoYmU9ZG9jdW1lbnQuZG9jdW1lbnRNb2RlKTt2YXIgY2U9ZmEmJlwiVGV4dEV2ZW50XCJpbiB3aW5kb3cmJiFiZSxkZT1mYSYmKCFhZXx8YmUmJjg8YmUmJjExPj1iZSksZWU9U3RyaW5nLmZyb21DaGFyQ29kZSgzMiksZmU9ITE7XG5mdW5jdGlvbiBnZShhLGIpe3N3aXRjaChhKXtjYXNlIFwia2V5dXBcIjpyZXR1cm4tMSE9PSRkLmluZGV4T2YoYi5rZXlDb2RlKTtjYXNlIFwia2V5ZG93blwiOnJldHVybiAyMjkhPT1iLmtleUNvZGU7Y2FzZSBcImtleXByZXNzXCI6Y2FzZSBcIm1vdXNlZG93blwiOmNhc2UgXCJmb2N1c291dFwiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fWZ1bmN0aW9uIGhlKGEpe2E9YS5kZXRhaWw7cmV0dXJuXCJvYmplY3RcIj09PXR5cGVvZiBhJiZcImRhdGFcImluIGE/YS5kYXRhOm51bGx9dmFyIGllPSExO2Z1bmN0aW9uIGplKGEsYil7c3dpdGNoKGEpe2Nhc2UgXCJjb21wb3NpdGlvbmVuZFwiOnJldHVybiBoZShiKTtjYXNlIFwia2V5cHJlc3NcIjppZigzMiE9PWIud2hpY2gpcmV0dXJuIG51bGw7ZmU9ITA7cmV0dXJuIGVlO2Nhc2UgXCJ0ZXh0SW5wdXRcIjpyZXR1cm4gYT1iLmRhdGEsYT09PWVlJiZmZT9udWxsOmE7ZGVmYXVsdDpyZXR1cm4gbnVsbH19XG5mdW5jdGlvbiBrZShhLGIpe2lmKGllKXJldHVyblwiY29tcG9zaXRpb25lbmRcIj09PWF8fCFhZSYmZ2UoYSxiKT8oYT1uZCgpLG1kPWxkPWtkPW51bGwsaWU9ITEsYSk6bnVsbDtzd2l0Y2goYSl7Y2FzZSBcInBhc3RlXCI6cmV0dXJuIG51bGw7Y2FzZSBcImtleXByZXNzXCI6aWYoIShiLmN0cmxLZXl8fGIuYWx0S2V5fHxiLm1ldGFLZXkpfHxiLmN0cmxLZXkmJmIuYWx0S2V5KXtpZihiLmNoYXImJjE8Yi5jaGFyLmxlbmd0aClyZXR1cm4gYi5jaGFyO2lmKGIud2hpY2gpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoYi53aGljaCl9cmV0dXJuIG51bGw7Y2FzZSBcImNvbXBvc2l0aW9uZW5kXCI6cmV0dXJuIGRlJiZcImtvXCIhPT1iLmxvY2FsZT9udWxsOmIuZGF0YTtkZWZhdWx0OnJldHVybiBudWxsfX1cbnZhciBsZT17Y29sb3I6ITAsZGF0ZTohMCxkYXRldGltZTohMCxcImRhdGV0aW1lLWxvY2FsXCI6ITAsZW1haWw6ITAsbW9udGg6ITAsbnVtYmVyOiEwLHBhc3N3b3JkOiEwLHJhbmdlOiEwLHNlYXJjaDohMCx0ZWw6ITAsdGV4dDohMCx0aW1lOiEwLHVybDohMCx3ZWVrOiEwfTtmdW5jdGlvbiBtZShhKXt2YXIgYj1hJiZhLm5vZGVOYW1lJiZhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuXCJpbnB1dFwiPT09Yj8hIWxlW2EudHlwZV06XCJ0ZXh0YXJlYVwiPT09Yj8hMDohMX1mdW5jdGlvbiBuZShhLGIsYyxkKXtFYihkKTtiPW9lKGIsXCJvbkNoYW5nZVwiKTswPGIubGVuZ3RoJiYoYz1uZXcgdGQoXCJvbkNoYW5nZVwiLFwiY2hhbmdlXCIsbnVsbCxjLGQpLGEucHVzaCh7ZXZlbnQ6YyxsaXN0ZW5lcnM6Yn0pKX12YXIgcGU9bnVsbCxxZT1udWxsO2Z1bmN0aW9uIHJlKGEpe3NlKGEsMCl9ZnVuY3Rpb24gdGUoYSl7dmFyIGI9dWUoYSk7aWYoV2EoYikpcmV0dXJuIGF9XG5mdW5jdGlvbiB2ZShhLGIpe2lmKFwiY2hhbmdlXCI9PT1hKXJldHVybiBifXZhciB3ZT0hMTtpZihmYSl7dmFyIHhlO2lmKGZhKXt2YXIgeWU9XCJvbmlucHV0XCJpbiBkb2N1bWVudDtpZigheWUpe3ZhciB6ZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO3plLnNldEF0dHJpYnV0ZShcIm9uaW5wdXRcIixcInJldHVybjtcIik7eWU9XCJmdW5jdGlvblwiPT09dHlwZW9mIHplLm9uaW5wdXR9eGU9eWV9ZWxzZSB4ZT0hMTt3ZT14ZSYmKCFkb2N1bWVudC5kb2N1bWVudE1vZGV8fDk8ZG9jdW1lbnQuZG9jdW1lbnRNb2RlKX1mdW5jdGlvbiBBZSgpe3BlJiYocGUuZGV0YWNoRXZlbnQoXCJvbnByb3BlcnR5Y2hhbmdlXCIsQmUpLHFlPXBlPW51bGwpfWZ1bmN0aW9uIEJlKGEpe2lmKFwidmFsdWVcIj09PWEucHJvcGVydHlOYW1lJiZ0ZShxZSkpe3ZhciBiPVtdO25lKGIscWUsYSx4YihhKSk7YT1yZTtpZihLYilhKGIpO2Vsc2V7S2I9ITA7dHJ5e0diKGEsYil9ZmluYWxseXtLYj0hMSxNYigpfX19fVxuZnVuY3Rpb24gQ2UoYSxiLGMpe1wiZm9jdXNpblwiPT09YT8oQWUoKSxwZT1iLHFlPWMscGUuYXR0YWNoRXZlbnQoXCJvbnByb3BlcnR5Y2hhbmdlXCIsQmUpKTpcImZvY3Vzb3V0XCI9PT1hJiZBZSgpfWZ1bmN0aW9uIERlKGEpe2lmKFwic2VsZWN0aW9uY2hhbmdlXCI9PT1hfHxcImtleXVwXCI9PT1hfHxcImtleWRvd25cIj09PWEpcmV0dXJuIHRlKHFlKX1mdW5jdGlvbiBFZShhLGIpe2lmKFwiY2xpY2tcIj09PWEpcmV0dXJuIHRlKGIpfWZ1bmN0aW9uIEZlKGEsYil7aWYoXCJpbnB1dFwiPT09YXx8XCJjaGFuZ2VcIj09PWEpcmV0dXJuIHRlKGIpfWZ1bmN0aW9uIEdlKGEsYil7cmV0dXJuIGE9PT1iJiYoMCE9PWF8fDEvYT09PTEvYil8fGEhPT1hJiZiIT09Yn12YXIgSGU9XCJmdW5jdGlvblwiPT09dHlwZW9mIE9iamVjdC5pcz9PYmplY3QuaXM6R2UsSWU9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbmZ1bmN0aW9uIEplKGEsYil7aWYoSGUoYSxiKSlyZXR1cm4hMDtpZihcIm9iamVjdFwiIT09dHlwZW9mIGF8fG51bGw9PT1hfHxcIm9iamVjdFwiIT09dHlwZW9mIGJ8fG51bGw9PT1iKXJldHVybiExO3ZhciBjPU9iamVjdC5rZXlzKGEpLGQ9T2JqZWN0LmtleXMoYik7aWYoYy5sZW5ndGghPT1kLmxlbmd0aClyZXR1cm4hMTtmb3IoZD0wO2Q8Yy5sZW5ndGg7ZCsrKWlmKCFJZS5jYWxsKGIsY1tkXSl8fCFIZShhW2NbZF1dLGJbY1tkXV0pKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIEtlKGEpe2Zvcig7YSYmYS5maXJzdENoaWxkOylhPWEuZmlyc3RDaGlsZDtyZXR1cm4gYX1cbmZ1bmN0aW9uIExlKGEsYil7dmFyIGM9S2UoYSk7YT0wO2Zvcih2YXIgZDtjOyl7aWYoMz09PWMubm9kZVR5cGUpe2Q9YStjLnRleHRDb250ZW50Lmxlbmd0aDtpZihhPD1iJiZkPj1iKXJldHVybntub2RlOmMsb2Zmc2V0OmItYX07YT1kfWE6e2Zvcig7Yzspe2lmKGMubmV4dFNpYmxpbmcpe2M9Yy5uZXh0U2libGluZzticmVhayBhfWM9Yy5wYXJlbnROb2RlfWM9dm9pZCAwfWM9S2UoYyl9fWZ1bmN0aW9uIE1lKGEsYil7cmV0dXJuIGEmJmI/YT09PWI/ITA6YSYmMz09PWEubm9kZVR5cGU/ITE6YiYmMz09PWIubm9kZVR5cGU/TWUoYSxiLnBhcmVudE5vZGUpOlwiY29udGFpbnNcImluIGE/YS5jb250YWlucyhiKTphLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uPyEhKGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYikmMTYpOiExOiExfVxuZnVuY3Rpb24gTmUoKXtmb3IodmFyIGE9d2luZG93LGI9WGEoKTtiIGluc3RhbmNlb2YgYS5IVE1MSUZyYW1lRWxlbWVudDspe3RyeXt2YXIgYz1cInN0cmluZ1wiPT09dHlwZW9mIGIuY29udGVudFdpbmRvdy5sb2NhdGlvbi5ocmVmfWNhdGNoKGQpe2M9ITF9aWYoYylhPWIuY29udGVudFdpbmRvdztlbHNlIGJyZWFrO2I9WGEoYS5kb2N1bWVudCl9cmV0dXJuIGJ9ZnVuY3Rpb24gT2UoYSl7dmFyIGI9YSYmYS5ub2RlTmFtZSYmYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiBiJiYoXCJpbnB1dFwiPT09YiYmKFwidGV4dFwiPT09YS50eXBlfHxcInNlYXJjaFwiPT09YS50eXBlfHxcInRlbFwiPT09YS50eXBlfHxcInVybFwiPT09YS50eXBlfHxcInBhc3N3b3JkXCI9PT1hLnR5cGUpfHxcInRleHRhcmVhXCI9PT1ifHxcInRydWVcIj09PWEuY29udGVudEVkaXRhYmxlKX1cbnZhciBQZT1mYSYmXCJkb2N1bWVudE1vZGVcImluIGRvY3VtZW50JiYxMT49ZG9jdW1lbnQuZG9jdW1lbnRNb2RlLFFlPW51bGwsUmU9bnVsbCxTZT1udWxsLFRlPSExO1xuZnVuY3Rpb24gVWUoYSxiLGMpe3ZhciBkPWMud2luZG93PT09Yz9jLmRvY3VtZW50Ojk9PT1jLm5vZGVUeXBlP2M6Yy5vd25lckRvY3VtZW50O1RlfHxudWxsPT1RZXx8UWUhPT1YYShkKXx8KGQ9UWUsXCJzZWxlY3Rpb25TdGFydFwiaW4gZCYmT2UoZCk/ZD17c3RhcnQ6ZC5zZWxlY3Rpb25TdGFydCxlbmQ6ZC5zZWxlY3Rpb25FbmR9OihkPShkLm93bmVyRG9jdW1lbnQmJmQub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8d2luZG93KS5nZXRTZWxlY3Rpb24oKSxkPXthbmNob3JOb2RlOmQuYW5jaG9yTm9kZSxhbmNob3JPZmZzZXQ6ZC5hbmNob3JPZmZzZXQsZm9jdXNOb2RlOmQuZm9jdXNOb2RlLGZvY3VzT2Zmc2V0OmQuZm9jdXNPZmZzZXR9KSxTZSYmSmUoU2UsZCl8fChTZT1kLGQ9b2UoUmUsXCJvblNlbGVjdFwiKSwwPGQubGVuZ3RoJiYoYj1uZXcgdGQoXCJvblNlbGVjdFwiLFwic2VsZWN0XCIsbnVsbCxiLGMpLGEucHVzaCh7ZXZlbnQ6YixsaXN0ZW5lcnM6ZH0pLGIudGFyZ2V0PVFlKSkpfVxuUGMoXCJjYW5jZWwgY2FuY2VsIGNsaWNrIGNsaWNrIGNsb3NlIGNsb3NlIGNvbnRleHRtZW51IGNvbnRleHRNZW51IGNvcHkgY29weSBjdXQgY3V0IGF1eGNsaWNrIGF1eENsaWNrIGRibGNsaWNrIGRvdWJsZUNsaWNrIGRyYWdlbmQgZHJhZ0VuZCBkcmFnc3RhcnQgZHJhZ1N0YXJ0IGRyb3AgZHJvcCBmb2N1c2luIGZvY3VzIGZvY3Vzb3V0IGJsdXIgaW5wdXQgaW5wdXQgaW52YWxpZCBpbnZhbGlkIGtleWRvd24ga2V5RG93biBrZXlwcmVzcyBrZXlQcmVzcyBrZXl1cCBrZXlVcCBtb3VzZWRvd24gbW91c2VEb3duIG1vdXNldXAgbW91c2VVcCBwYXN0ZSBwYXN0ZSBwYXVzZSBwYXVzZSBwbGF5IHBsYXkgcG9pbnRlcmNhbmNlbCBwb2ludGVyQ2FuY2VsIHBvaW50ZXJkb3duIHBvaW50ZXJEb3duIHBvaW50ZXJ1cCBwb2ludGVyVXAgcmF0ZWNoYW5nZSByYXRlQ2hhbmdlIHJlc2V0IHJlc2V0IHNlZWtlZCBzZWVrZWQgc3VibWl0IHN1Ym1pdCB0b3VjaGNhbmNlbCB0b3VjaENhbmNlbCB0b3VjaGVuZCB0b3VjaEVuZCB0b3VjaHN0YXJ0IHRvdWNoU3RhcnQgdm9sdW1lY2hhbmdlIHZvbHVtZUNoYW5nZVwiLnNwbGl0KFwiIFwiKSxcbjApO1BjKFwiZHJhZyBkcmFnIGRyYWdlbnRlciBkcmFnRW50ZXIgZHJhZ2V4aXQgZHJhZ0V4aXQgZHJhZ2xlYXZlIGRyYWdMZWF2ZSBkcmFnb3ZlciBkcmFnT3ZlciBtb3VzZW1vdmUgbW91c2VNb3ZlIG1vdXNlb3V0IG1vdXNlT3V0IG1vdXNlb3ZlciBtb3VzZU92ZXIgcG9pbnRlcm1vdmUgcG9pbnRlck1vdmUgcG9pbnRlcm91dCBwb2ludGVyT3V0IHBvaW50ZXJvdmVyIHBvaW50ZXJPdmVyIHNjcm9sbCBzY3JvbGwgdG9nZ2xlIHRvZ2dsZSB0b3VjaG1vdmUgdG91Y2hNb3ZlIHdoZWVsIHdoZWVsXCIuc3BsaXQoXCIgXCIpLDEpO1BjKE9jLDIpO2Zvcih2YXIgVmU9XCJjaGFuZ2Ugc2VsZWN0aW9uY2hhbmdlIHRleHRJbnB1dCBjb21wb3NpdGlvbnN0YXJ0IGNvbXBvc2l0aW9uZW5kIGNvbXBvc2l0aW9udXBkYXRlXCIuc3BsaXQoXCIgXCIpLFdlPTA7V2U8VmUubGVuZ3RoO1dlKyspTmMuc2V0KFZlW1dlXSwwKTtlYShcIm9uTW91c2VFbnRlclwiLFtcIm1vdXNlb3V0XCIsXCJtb3VzZW92ZXJcIl0pO1xuZWEoXCJvbk1vdXNlTGVhdmVcIixbXCJtb3VzZW91dFwiLFwibW91c2VvdmVyXCJdKTtlYShcIm9uUG9pbnRlckVudGVyXCIsW1wicG9pbnRlcm91dFwiLFwicG9pbnRlcm92ZXJcIl0pO2VhKFwib25Qb2ludGVyTGVhdmVcIixbXCJwb2ludGVyb3V0XCIsXCJwb2ludGVyb3ZlclwiXSk7ZGEoXCJvbkNoYW5nZVwiLFwiY2hhbmdlIGNsaWNrIGZvY3VzaW4gZm9jdXNvdXQgaW5wdXQga2V5ZG93biBrZXl1cCBzZWxlY3Rpb25jaGFuZ2VcIi5zcGxpdChcIiBcIikpO2RhKFwib25TZWxlY3RcIixcImZvY3Vzb3V0IGNvbnRleHRtZW51IGRyYWdlbmQgZm9jdXNpbiBrZXlkb3duIGtleXVwIG1vdXNlZG93biBtb3VzZXVwIHNlbGVjdGlvbmNoYW5nZVwiLnNwbGl0KFwiIFwiKSk7ZGEoXCJvbkJlZm9yZUlucHV0XCIsW1wiY29tcG9zaXRpb25lbmRcIixcImtleXByZXNzXCIsXCJ0ZXh0SW5wdXRcIixcInBhc3RlXCJdKTtkYShcIm9uQ29tcG9zaXRpb25FbmRcIixcImNvbXBvc2l0aW9uZW5kIGZvY3Vzb3V0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgbW91c2Vkb3duXCIuc3BsaXQoXCIgXCIpKTtcbmRhKFwib25Db21wb3NpdGlvblN0YXJ0XCIsXCJjb21wb3NpdGlvbnN0YXJ0IGZvY3Vzb3V0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgbW91c2Vkb3duXCIuc3BsaXQoXCIgXCIpKTtkYShcIm9uQ29tcG9zaXRpb25VcGRhdGVcIixcImNvbXBvc2l0aW9udXBkYXRlIGZvY3Vzb3V0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgbW91c2Vkb3duXCIuc3BsaXQoXCIgXCIpKTt2YXIgWGU9XCJhYm9ydCBjYW5wbGF5IGNhbnBsYXl0aHJvdWdoIGR1cmF0aW9uY2hhbmdlIGVtcHRpZWQgZW5jcnlwdGVkIGVuZGVkIGVycm9yIGxvYWRlZGRhdGEgbG9hZGVkbWV0YWRhdGEgbG9hZHN0YXJ0IHBhdXNlIHBsYXkgcGxheWluZyBwcm9ncmVzcyByYXRlY2hhbmdlIHNlZWtlZCBzZWVraW5nIHN0YWxsZWQgc3VzcGVuZCB0aW1ldXBkYXRlIHZvbHVtZWNoYW5nZSB3YWl0aW5nXCIuc3BsaXQoXCIgXCIpLFllPW5ldyBTZXQoXCJjYW5jZWwgY2xvc2UgaW52YWxpZCBsb2FkIHNjcm9sbCB0b2dnbGVcIi5zcGxpdChcIiBcIikuY29uY2F0KFhlKSk7XG5mdW5jdGlvbiBaZShhLGIsYyl7dmFyIGQ9YS50eXBlfHxcInVua25vd24tZXZlbnRcIjthLmN1cnJlbnRUYXJnZXQ9YztZYihkLGIsdm9pZCAwLGEpO2EuY3VycmVudFRhcmdldD1udWxsfVxuZnVuY3Rpb24gc2UoYSxiKXtiPTAhPT0oYiY0KTtmb3IodmFyIGM9MDtjPGEubGVuZ3RoO2MrKyl7dmFyIGQ9YVtjXSxlPWQuZXZlbnQ7ZD1kLmxpc3RlbmVyczthOnt2YXIgZj12b2lkIDA7aWYoYilmb3IodmFyIGc9ZC5sZW5ndGgtMTswPD1nO2ctLSl7dmFyIGg9ZFtnXSxrPWguaW5zdGFuY2UsbD1oLmN1cnJlbnRUYXJnZXQ7aD1oLmxpc3RlbmVyO2lmKGshPT1mJiZlLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpYnJlYWsgYTtaZShlLGgsbCk7Zj1rfWVsc2UgZm9yKGc9MDtnPGQubGVuZ3RoO2crKyl7aD1kW2ddO2s9aC5pbnN0YW5jZTtsPWguY3VycmVudFRhcmdldDtoPWgubGlzdGVuZXI7aWYoayE9PWYmJmUuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSlicmVhayBhO1plKGUsaCxsKTtmPWt9fX1pZihVYil0aHJvdyBhPVZiLFViPSExLFZiPW51bGwsYTt9XG5mdW5jdGlvbiBHKGEsYil7dmFyIGM9JGUoYiksZD1hK1wiX19idWJibGVcIjtjLmhhcyhkKXx8KGFmKGIsYSwyLCExKSxjLmFkZChkKSl9dmFyIGJmPVwiX3JlYWN0TGlzdGVuaW5nXCIrTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMik7ZnVuY3Rpb24gY2YoYSl7YVtiZl18fChhW2JmXT0hMCxiYS5mb3JFYWNoKGZ1bmN0aW9uKGIpe1llLmhhcyhiKXx8ZGYoYiwhMSxhLG51bGwpO2RmKGIsITAsYSxudWxsKX0pKX1cbmZ1bmN0aW9uIGRmKGEsYixjLGQpe3ZhciBlPTQ8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzRdP2FyZ3VtZW50c1s0XTowLGY9YztcInNlbGVjdGlvbmNoYW5nZVwiPT09YSYmOSE9PWMubm9kZVR5cGUmJihmPWMub3duZXJEb2N1bWVudCk7aWYobnVsbCE9PWQmJiFiJiZZZS5oYXMoYSkpe2lmKFwic2Nyb2xsXCIhPT1hKXJldHVybjtlfD0yO2Y9ZH12YXIgZz0kZShmKSxoPWErXCJfX1wiKyhiP1wiY2FwdHVyZVwiOlwiYnViYmxlXCIpO2cuaGFzKGgpfHwoYiYmKGV8PTQpLGFmKGYsYSxlLGIpLGcuYWRkKGgpKX1cbmZ1bmN0aW9uIGFmKGEsYixjLGQpe3ZhciBlPU5jLmdldChiKTtzd2l0Y2godm9pZCAwPT09ZT8yOmUpe2Nhc2UgMDplPWdkO2JyZWFrO2Nhc2UgMTplPWlkO2JyZWFrO2RlZmF1bHQ6ZT1oZH1jPWUuYmluZChudWxsLGIsYyxhKTtlPXZvaWQgMDshUGJ8fFwidG91Y2hzdGFydFwiIT09YiYmXCJ0b3VjaG1vdmVcIiE9PWImJlwid2hlZWxcIiE9PWJ8fChlPSEwKTtkP3ZvaWQgMCE9PWU/YS5hZGRFdmVudExpc3RlbmVyKGIsYyx7Y2FwdHVyZTohMCxwYXNzaXZlOmV9KTphLmFkZEV2ZW50TGlzdGVuZXIoYixjLCEwKTp2b2lkIDAhPT1lP2EuYWRkRXZlbnRMaXN0ZW5lcihiLGMse3Bhc3NpdmU6ZX0pOmEuYWRkRXZlbnRMaXN0ZW5lcihiLGMsITEpfVxuZnVuY3Rpb24gamQoYSxiLGMsZCxlKXt2YXIgZj1kO2lmKDA9PT0oYiYxKSYmMD09PShiJjIpJiZudWxsIT09ZClhOmZvcig7Oyl7aWYobnVsbD09PWQpcmV0dXJuO3ZhciBnPWQudGFnO2lmKDM9PT1nfHw0PT09Zyl7dmFyIGg9ZC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztpZihoPT09ZXx8OD09PWgubm9kZVR5cGUmJmgucGFyZW50Tm9kZT09PWUpYnJlYWs7aWYoND09PWcpZm9yKGc9ZC5yZXR1cm47bnVsbCE9PWc7KXt2YXIgaz1nLnRhZztpZigzPT09a3x8ND09PWspaWYoaz1nLnN0YXRlTm9kZS5jb250YWluZXJJbmZvLGs9PT1lfHw4PT09ay5ub2RlVHlwZSYmay5wYXJlbnROb2RlPT09ZSlyZXR1cm47Zz1nLnJldHVybn1mb3IoO251bGwhPT1oOyl7Zz13YyhoKTtpZihudWxsPT09ZylyZXR1cm47az1nLnRhZztpZig1PT09a3x8Nj09PWspe2Q9Zj1nO2NvbnRpbnVlIGF9aD1oLnBhcmVudE5vZGV9fWQ9ZC5yZXR1cm59TmIoZnVuY3Rpb24oKXt2YXIgZD1mLGU9eGIoYyksZz1bXTtcbmE6e3ZhciBoPU1jLmdldChhKTtpZih2b2lkIDAhPT1oKXt2YXIgaz10ZCx4PWE7c3dpdGNoKGEpe2Nhc2UgXCJrZXlwcmVzc1wiOmlmKDA9PT1vZChjKSlicmVhayBhO2Nhc2UgXCJrZXlkb3duXCI6Y2FzZSBcImtleXVwXCI6az1SZDticmVhaztjYXNlIFwiZm9jdXNpblwiOng9XCJmb2N1c1wiO2s9RmQ7YnJlYWs7Y2FzZSBcImZvY3Vzb3V0XCI6eD1cImJsdXJcIjtrPUZkO2JyZWFrO2Nhc2UgXCJiZWZvcmVibHVyXCI6Y2FzZSBcImFmdGVyYmx1clwiOms9RmQ7YnJlYWs7Y2FzZSBcImNsaWNrXCI6aWYoMj09PWMuYnV0dG9uKWJyZWFrIGE7Y2FzZSBcImF1eGNsaWNrXCI6Y2FzZSBcImRibGNsaWNrXCI6Y2FzZSBcIm1vdXNlZG93blwiOmNhc2UgXCJtb3VzZW1vdmVcIjpjYXNlIFwibW91c2V1cFwiOmNhc2UgXCJtb3VzZW91dFwiOmNhc2UgXCJtb3VzZW92ZXJcIjpjYXNlIFwiY29udGV4dG1lbnVcIjprPUJkO2JyZWFrO2Nhc2UgXCJkcmFnXCI6Y2FzZSBcImRyYWdlbmRcIjpjYXNlIFwiZHJhZ2VudGVyXCI6Y2FzZSBcImRyYWdleGl0XCI6Y2FzZSBcImRyYWdsZWF2ZVwiOmNhc2UgXCJkcmFnb3ZlclwiOmNhc2UgXCJkcmFnc3RhcnRcIjpjYXNlIFwiZHJvcFwiOms9XG5EZDticmVhaztjYXNlIFwidG91Y2hjYW5jZWxcIjpjYXNlIFwidG91Y2hlbmRcIjpjYXNlIFwidG91Y2htb3ZlXCI6Y2FzZSBcInRvdWNoc3RhcnRcIjprPVZkO2JyZWFrO2Nhc2UgSWM6Y2FzZSBKYzpjYXNlIEtjOms9SGQ7YnJlYWs7Y2FzZSBMYzprPVhkO2JyZWFrO2Nhc2UgXCJzY3JvbGxcIjprPXZkO2JyZWFrO2Nhc2UgXCJ3aGVlbFwiOms9WmQ7YnJlYWs7Y2FzZSBcImNvcHlcIjpjYXNlIFwiY3V0XCI6Y2FzZSBcInBhc3RlXCI6az1KZDticmVhaztjYXNlIFwiZ290cG9pbnRlcmNhcHR1cmVcIjpjYXNlIFwibG9zdHBvaW50ZXJjYXB0dXJlXCI6Y2FzZSBcInBvaW50ZXJjYW5jZWxcIjpjYXNlIFwicG9pbnRlcmRvd25cIjpjYXNlIFwicG9pbnRlcm1vdmVcIjpjYXNlIFwicG9pbnRlcm91dFwiOmNhc2UgXCJwb2ludGVyb3ZlclwiOmNhc2UgXCJwb2ludGVydXBcIjprPVRkfXZhciB3PTAhPT0oYiY0KSx6PSF3JiZcInNjcm9sbFwiPT09YSx1PXc/bnVsbCE9PWg/aCtcIkNhcHR1cmVcIjpudWxsOmg7dz1bXTtmb3IodmFyIHQ9ZCxxO251bGwhPT1cbnQ7KXtxPXQ7dmFyIHY9cS5zdGF0ZU5vZGU7NT09PXEudGFnJiZudWxsIT09diYmKHE9dixudWxsIT09dSYmKHY9T2IodCx1KSxudWxsIT12JiZ3LnB1c2goZWYodCx2LHEpKSkpO2lmKHopYnJlYWs7dD10LnJldHVybn0wPHcubGVuZ3RoJiYoaD1uZXcgayhoLHgsbnVsbCxjLGUpLGcucHVzaCh7ZXZlbnQ6aCxsaXN0ZW5lcnM6d30pKX19aWYoMD09PShiJjcpKXthOntoPVwibW91c2VvdmVyXCI9PT1hfHxcInBvaW50ZXJvdmVyXCI9PT1hO2s9XCJtb3VzZW91dFwiPT09YXx8XCJwb2ludGVyb3V0XCI9PT1hO2lmKGgmJjA9PT0oYiYxNikmJih4PWMucmVsYXRlZFRhcmdldHx8Yy5mcm9tRWxlbWVudCkmJih3Yyh4KXx8eFtmZl0pKWJyZWFrIGE7aWYoa3x8aCl7aD1lLndpbmRvdz09PWU/ZTooaD1lLm93bmVyRG9jdW1lbnQpP2guZGVmYXVsdFZpZXd8fGgucGFyZW50V2luZG93OndpbmRvdztpZihrKXtpZih4PWMucmVsYXRlZFRhcmdldHx8Yy50b0VsZW1lbnQsaz1kLHg9eD93Yyh4KTpudWxsLG51bGwhPT1cbngmJih6PVpiKHgpLHghPT16fHw1IT09eC50YWcmJjYhPT14LnRhZykpeD1udWxsfWVsc2Ugaz1udWxsLHg9ZDtpZihrIT09eCl7dz1CZDt2PVwib25Nb3VzZUxlYXZlXCI7dT1cIm9uTW91c2VFbnRlclwiO3Q9XCJtb3VzZVwiO2lmKFwicG9pbnRlcm91dFwiPT09YXx8XCJwb2ludGVyb3ZlclwiPT09YSl3PVRkLHY9XCJvblBvaW50ZXJMZWF2ZVwiLHU9XCJvblBvaW50ZXJFbnRlclwiLHQ9XCJwb2ludGVyXCI7ej1udWxsPT1rP2g6dWUoayk7cT1udWxsPT14P2g6dWUoeCk7aD1uZXcgdyh2LHQrXCJsZWF2ZVwiLGssYyxlKTtoLnRhcmdldD16O2gucmVsYXRlZFRhcmdldD1xO3Y9bnVsbDt3YyhlKT09PWQmJih3PW5ldyB3KHUsdCtcImVudGVyXCIseCxjLGUpLHcudGFyZ2V0PXEsdy5yZWxhdGVkVGFyZ2V0PXosdj13KTt6PXY7aWYoayYmeCliOnt3PWs7dT14O3Q9MDtmb3IocT13O3E7cT1nZihxKSl0Kys7cT0wO2Zvcih2PXU7djt2PWdmKHYpKXErKztmb3IoOzA8dC1xOyl3PWdmKHcpLHQtLTtmb3IoOzA8cS10Oyl1PVxuZ2YodSkscS0tO2Zvcig7dC0tOyl7aWYodz09PXV8fG51bGwhPT11JiZ3PT09dS5hbHRlcm5hdGUpYnJlYWsgYjt3PWdmKHcpO3U9Z2YodSl9dz1udWxsfWVsc2Ugdz1udWxsO251bGwhPT1rJiZoZihnLGgsayx3LCExKTtudWxsIT09eCYmbnVsbCE9PXomJmhmKGcseix4LHcsITApfX19YTp7aD1kP3VlKGQpOndpbmRvdztrPWgubm9kZU5hbWUmJmgubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtpZihcInNlbGVjdFwiPT09a3x8XCJpbnB1dFwiPT09ayYmXCJmaWxlXCI9PT1oLnR5cGUpdmFyIEo9dmU7ZWxzZSBpZihtZShoKSlpZih3ZSlKPUZlO2Vsc2V7Sj1EZTt2YXIgSz1DZX1lbHNlKGs9aC5ub2RlTmFtZSkmJlwiaW5wdXRcIj09PWsudG9Mb3dlckNhc2UoKSYmKFwiY2hlY2tib3hcIj09PWgudHlwZXx8XCJyYWRpb1wiPT09aC50eXBlKSYmKEo9RWUpO2lmKEomJihKPUooYSxkKSkpe25lKGcsSixjLGUpO2JyZWFrIGF9SyYmSyhhLGgsZCk7XCJmb2N1c291dFwiPT09YSYmKEs9aC5fd3JhcHBlclN0YXRlKSYmXG5LLmNvbnRyb2xsZWQmJlwibnVtYmVyXCI9PT1oLnR5cGUmJmJiKGgsXCJudW1iZXJcIixoLnZhbHVlKX1LPWQ/dWUoZCk6d2luZG93O3N3aXRjaChhKXtjYXNlIFwiZm9jdXNpblwiOmlmKG1lKEspfHxcInRydWVcIj09PUsuY29udGVudEVkaXRhYmxlKVFlPUssUmU9ZCxTZT1udWxsO2JyZWFrO2Nhc2UgXCJmb2N1c291dFwiOlNlPVJlPVFlPW51bGw7YnJlYWs7Y2FzZSBcIm1vdXNlZG93blwiOlRlPSEwO2JyZWFrO2Nhc2UgXCJjb250ZXh0bWVudVwiOmNhc2UgXCJtb3VzZXVwXCI6Y2FzZSBcImRyYWdlbmRcIjpUZT0hMTtVZShnLGMsZSk7YnJlYWs7Y2FzZSBcInNlbGVjdGlvbmNoYW5nZVwiOmlmKFBlKWJyZWFrO2Nhc2UgXCJrZXlkb3duXCI6Y2FzZSBcImtleXVwXCI6VWUoZyxjLGUpfXZhciBRO2lmKGFlKWI6e3N3aXRjaChhKXtjYXNlIFwiY29tcG9zaXRpb25zdGFydFwiOnZhciBMPVwib25Db21wb3NpdGlvblN0YXJ0XCI7YnJlYWsgYjtjYXNlIFwiY29tcG9zaXRpb25lbmRcIjpMPVwib25Db21wb3NpdGlvbkVuZFwiO2JyZWFrIGI7XG5jYXNlIFwiY29tcG9zaXRpb251cGRhdGVcIjpMPVwib25Db21wb3NpdGlvblVwZGF0ZVwiO2JyZWFrIGJ9TD12b2lkIDB9ZWxzZSBpZT9nZShhLGMpJiYoTD1cIm9uQ29tcG9zaXRpb25FbmRcIik6XCJrZXlkb3duXCI9PT1hJiYyMjk9PT1jLmtleUNvZGUmJihMPVwib25Db21wb3NpdGlvblN0YXJ0XCIpO0wmJihkZSYmXCJrb1wiIT09Yy5sb2NhbGUmJihpZXx8XCJvbkNvbXBvc2l0aW9uU3RhcnRcIiE9PUw/XCJvbkNvbXBvc2l0aW9uRW5kXCI9PT1MJiZpZSYmKFE9bmQoKSk6KGtkPWUsbGQ9XCJ2YWx1ZVwiaW4ga2Q/a2QudmFsdWU6a2QudGV4dENvbnRlbnQsaWU9ITApKSxLPW9lKGQsTCksMDxLLmxlbmd0aCYmKEw9bmV3IExkKEwsYSxudWxsLGMsZSksZy5wdXNoKHtldmVudDpMLGxpc3RlbmVyczpLfSksUT9MLmRhdGE9UTooUT1oZShjKSxudWxsIT09USYmKEwuZGF0YT1RKSkpKTtpZihRPWNlP2plKGEsYyk6a2UoYSxjKSlkPW9lKGQsXCJvbkJlZm9yZUlucHV0XCIpLDA8ZC5sZW5ndGgmJihlPW5ldyBMZChcIm9uQmVmb3JlSW5wdXRcIixcblwiYmVmb3JlaW5wdXRcIixudWxsLGMsZSksZy5wdXNoKHtldmVudDplLGxpc3RlbmVyczpkfSksZS5kYXRhPVEpfXNlKGcsYil9KX1mdW5jdGlvbiBlZihhLGIsYyl7cmV0dXJue2luc3RhbmNlOmEsbGlzdGVuZXI6YixjdXJyZW50VGFyZ2V0OmN9fWZ1bmN0aW9uIG9lKGEsYil7Zm9yKHZhciBjPWIrXCJDYXB0dXJlXCIsZD1bXTtudWxsIT09YTspe3ZhciBlPWEsZj1lLnN0YXRlTm9kZTs1PT09ZS50YWcmJm51bGwhPT1mJiYoZT1mLGY9T2IoYSxjKSxudWxsIT1mJiZkLnVuc2hpZnQoZWYoYSxmLGUpKSxmPU9iKGEsYiksbnVsbCE9ZiYmZC5wdXNoKGVmKGEsZixlKSkpO2E9YS5yZXR1cm59cmV0dXJuIGR9ZnVuY3Rpb24gZ2YoYSl7aWYobnVsbD09PWEpcmV0dXJuIG51bGw7ZG8gYT1hLnJldHVybjt3aGlsZShhJiY1IT09YS50YWcpO3JldHVybiBhP2E6bnVsbH1cbmZ1bmN0aW9uIGhmKGEsYixjLGQsZSl7Zm9yKHZhciBmPWIuX3JlYWN0TmFtZSxnPVtdO251bGwhPT1jJiZjIT09ZDspe3ZhciBoPWMsaz1oLmFsdGVybmF0ZSxsPWguc3RhdGVOb2RlO2lmKG51bGwhPT1rJiZrPT09ZClicmVhazs1PT09aC50YWcmJm51bGwhPT1sJiYoaD1sLGU/KGs9T2IoYyxmKSxudWxsIT1rJiZnLnVuc2hpZnQoZWYoYyxrLGgpKSk6ZXx8KGs9T2IoYyxmKSxudWxsIT1rJiZnLnB1c2goZWYoYyxrLGgpKSkpO2M9Yy5yZXR1cm59MCE9PWcubGVuZ3RoJiZhLnB1c2goe2V2ZW50OmIsbGlzdGVuZXJzOmd9KX1mdW5jdGlvbiBqZigpe312YXIga2Y9bnVsbCxsZj1udWxsO2Z1bmN0aW9uIG1mKGEsYil7c3dpdGNoKGEpe2Nhc2UgXCJidXR0b25cIjpjYXNlIFwiaW5wdXRcIjpjYXNlIFwic2VsZWN0XCI6Y2FzZSBcInRleHRhcmVhXCI6cmV0dXJuISFiLmF1dG9Gb2N1c31yZXR1cm4hMX1cbmZ1bmN0aW9uIG5mKGEsYil7cmV0dXJuXCJ0ZXh0YXJlYVwiPT09YXx8XCJvcHRpb25cIj09PWF8fFwibm9zY3JpcHRcIj09PWF8fFwic3RyaW5nXCI9PT10eXBlb2YgYi5jaGlsZHJlbnx8XCJudW1iZXJcIj09PXR5cGVvZiBiLmNoaWxkcmVufHxcIm9iamVjdFwiPT09dHlwZW9mIGIuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwmJm51bGwhPT1iLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MJiZudWxsIT1iLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MLl9faHRtbH12YXIgb2Y9XCJmdW5jdGlvblwiPT09dHlwZW9mIHNldFRpbWVvdXQ/c2V0VGltZW91dDp2b2lkIDAscGY9XCJmdW5jdGlvblwiPT09dHlwZW9mIGNsZWFyVGltZW91dD9jbGVhclRpbWVvdXQ6dm9pZCAwO2Z1bmN0aW9uIHFmKGEpezE9PT1hLm5vZGVUeXBlP2EudGV4dENvbnRlbnQ9XCJcIjo5PT09YS5ub2RlVHlwZSYmKGE9YS5ib2R5LG51bGwhPWEmJihhLnRleHRDb250ZW50PVwiXCIpKX1cbmZ1bmN0aW9uIHJmKGEpe2Zvcig7bnVsbCE9YTthPWEubmV4dFNpYmxpbmcpe3ZhciBiPWEubm9kZVR5cGU7aWYoMT09PWJ8fDM9PT1iKWJyZWFrfXJldHVybiBhfWZ1bmN0aW9uIHNmKGEpe2E9YS5wcmV2aW91c1NpYmxpbmc7Zm9yKHZhciBiPTA7YTspe2lmKDg9PT1hLm5vZGVUeXBlKXt2YXIgYz1hLmRhdGE7aWYoXCIkXCI9PT1jfHxcIiQhXCI9PT1jfHxcIiQ/XCI9PT1jKXtpZigwPT09YilyZXR1cm4gYTtiLS19ZWxzZVwiLyRcIj09PWMmJmIrK31hPWEucHJldmlvdXNTaWJsaW5nfXJldHVybiBudWxsfXZhciB0Zj0wO2Z1bmN0aW9uIHVmKGEpe3JldHVybnskJHR5cGVvZjpHYSx0b1N0cmluZzphLHZhbHVlT2Y6YX19dmFyIHZmPU1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIpLHdmPVwiX19yZWFjdEZpYmVyJFwiK3ZmLHhmPVwiX19yZWFjdFByb3BzJFwiK3ZmLGZmPVwiX19yZWFjdENvbnRhaW5lciRcIit2Zix5Zj1cIl9fcmVhY3RFdmVudHMkXCIrdmY7XG5mdW5jdGlvbiB3YyhhKXt2YXIgYj1hW3dmXTtpZihiKXJldHVybiBiO2Zvcih2YXIgYz1hLnBhcmVudE5vZGU7Yzspe2lmKGI9Y1tmZl18fGNbd2ZdKXtjPWIuYWx0ZXJuYXRlO2lmKG51bGwhPT1iLmNoaWxkfHxudWxsIT09YyYmbnVsbCE9PWMuY2hpbGQpZm9yKGE9c2YoYSk7bnVsbCE9PWE7KXtpZihjPWFbd2ZdKXJldHVybiBjO2E9c2YoYSl9cmV0dXJuIGJ9YT1jO2M9YS5wYXJlbnROb2RlfXJldHVybiBudWxsfWZ1bmN0aW9uIENiKGEpe2E9YVt3Zl18fGFbZmZdO3JldHVybiFhfHw1IT09YS50YWcmJjYhPT1hLnRhZyYmMTMhPT1hLnRhZyYmMyE9PWEudGFnP251bGw6YX1mdW5jdGlvbiB1ZShhKXtpZig1PT09YS50YWd8fDY9PT1hLnRhZylyZXR1cm4gYS5zdGF0ZU5vZGU7dGhyb3cgRXJyb3IoeSgzMykpO31mdW5jdGlvbiBEYihhKXtyZXR1cm4gYVt4Zl18fG51bGx9XG5mdW5jdGlvbiAkZShhKXt2YXIgYj1hW3lmXTt2b2lkIDA9PT1iJiYoYj1hW3lmXT1uZXcgU2V0KTtyZXR1cm4gYn12YXIgemY9W10sQWY9LTE7ZnVuY3Rpb24gQmYoYSl7cmV0dXJue2N1cnJlbnQ6YX19ZnVuY3Rpb24gSChhKXswPkFmfHwoYS5jdXJyZW50PXpmW0FmXSx6ZltBZl09bnVsbCxBZi0tKX1mdW5jdGlvbiBJKGEsYil7QWYrKzt6ZltBZl09YS5jdXJyZW50O2EuY3VycmVudD1ifXZhciBDZj17fSxNPUJmKENmKSxOPUJmKCExKSxEZj1DZjtcbmZ1bmN0aW9uIEVmKGEsYil7dmFyIGM9YS50eXBlLmNvbnRleHRUeXBlcztpZighYylyZXR1cm4gQ2Y7dmFyIGQ9YS5zdGF0ZU5vZGU7aWYoZCYmZC5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZFVubWFza2VkQ2hpbGRDb250ZXh0PT09YilyZXR1cm4gZC5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1hc2tlZENoaWxkQ29udGV4dDt2YXIgZT17fSxmO2ZvcihmIGluIGMpZVtmXT1iW2ZdO2QmJihhPWEuc3RhdGVOb2RlLGEuX19yZWFjdEludGVybmFsTWVtb2l6ZWRVbm1hc2tlZENoaWxkQ29udGV4dD1iLGEuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNYXNrZWRDaGlsZENvbnRleHQ9ZSk7cmV0dXJuIGV9ZnVuY3Rpb24gRmYoYSl7YT1hLmNoaWxkQ29udGV4dFR5cGVzO3JldHVybiBudWxsIT09YSYmdm9pZCAwIT09YX1mdW5jdGlvbiBHZigpe0goTik7SChNKX1mdW5jdGlvbiBIZihhLGIsYyl7aWYoTS5jdXJyZW50IT09Q2YpdGhyb3cgRXJyb3IoeSgxNjgpKTtJKE0sYik7SShOLGMpfVxuZnVuY3Rpb24gSWYoYSxiLGMpe3ZhciBkPWEuc3RhdGVOb2RlO2E9Yi5jaGlsZENvbnRleHRUeXBlcztpZihcImZ1bmN0aW9uXCIhPT10eXBlb2YgZC5nZXRDaGlsZENvbnRleHQpcmV0dXJuIGM7ZD1kLmdldENoaWxkQ29udGV4dCgpO2Zvcih2YXIgZSBpbiBkKWlmKCEoZSBpbiBhKSl0aHJvdyBFcnJvcih5KDEwOCxSYShiKXx8XCJVbmtub3duXCIsZSkpO3JldHVybiBtKHt9LGMsZCl9ZnVuY3Rpb24gSmYoYSl7YT0oYT1hLnN0YXRlTm9kZSkmJmEuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNZXJnZWRDaGlsZENvbnRleHR8fENmO0RmPU0uY3VycmVudDtJKE0sYSk7SShOLE4uY3VycmVudCk7cmV0dXJuITB9ZnVuY3Rpb24gS2YoYSxiLGMpe3ZhciBkPWEuc3RhdGVOb2RlO2lmKCFkKXRocm93IEVycm9yKHkoMTY5KSk7Yz8oYT1JZihhLGIsRGYpLGQuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNZXJnZWRDaGlsZENvbnRleHQ9YSxIKE4pLEgoTSksSShNLGEpKTpIKE4pO0koTixjKX1cbnZhciBMZj1udWxsLE1mPW51bGwsTmY9ci51bnN0YWJsZV9ydW5XaXRoUHJpb3JpdHksT2Y9ci51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrLFBmPXIudW5zdGFibGVfY2FuY2VsQ2FsbGJhY2ssUWY9ci51bnN0YWJsZV9zaG91bGRZaWVsZCxSZj1yLnVuc3RhYmxlX3JlcXVlc3RQYWludCxTZj1yLnVuc3RhYmxlX25vdyxUZj1yLnVuc3RhYmxlX2dldEN1cnJlbnRQcmlvcml0eUxldmVsLFVmPXIudW5zdGFibGVfSW1tZWRpYXRlUHJpb3JpdHksVmY9ci51bnN0YWJsZV9Vc2VyQmxvY2tpbmdQcmlvcml0eSxXZj1yLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5LFhmPXIudW5zdGFibGVfTG93UHJpb3JpdHksWWY9ci51bnN0YWJsZV9JZGxlUHJpb3JpdHksWmY9e30sJGY9dm9pZCAwIT09UmY/UmY6ZnVuY3Rpb24oKXt9LGFnPW51bGwsYmc9bnVsbCxjZz0hMSxkZz1TZigpLE89MUU0PmRnP1NmOmZ1bmN0aW9uKCl7cmV0dXJuIFNmKCktZGd9O1xuZnVuY3Rpb24gZWcoKXtzd2l0Y2goVGYoKSl7Y2FzZSBVZjpyZXR1cm4gOTk7Y2FzZSBWZjpyZXR1cm4gOTg7Y2FzZSBXZjpyZXR1cm4gOTc7Y2FzZSBYZjpyZXR1cm4gOTY7Y2FzZSBZZjpyZXR1cm4gOTU7ZGVmYXVsdDp0aHJvdyBFcnJvcih5KDMzMikpO319ZnVuY3Rpb24gZmcoYSl7c3dpdGNoKGEpe2Nhc2UgOTk6cmV0dXJuIFVmO2Nhc2UgOTg6cmV0dXJuIFZmO2Nhc2UgOTc6cmV0dXJuIFdmO2Nhc2UgOTY6cmV0dXJuIFhmO2Nhc2UgOTU6cmV0dXJuIFlmO2RlZmF1bHQ6dGhyb3cgRXJyb3IoeSgzMzIpKTt9fWZ1bmN0aW9uIGdnKGEsYil7YT1mZyhhKTtyZXR1cm4gTmYoYSxiKX1mdW5jdGlvbiBoZyhhLGIsYyl7YT1mZyhhKTtyZXR1cm4gT2YoYSxiLGMpfWZ1bmN0aW9uIGlnKCl7aWYobnVsbCE9PWJnKXt2YXIgYT1iZztiZz1udWxsO1BmKGEpfWpnKCl9XG5mdW5jdGlvbiBqZygpe2lmKCFjZyYmbnVsbCE9PWFnKXtjZz0hMDt2YXIgYT0wO3RyeXt2YXIgYj1hZztnZyg5OSxmdW5jdGlvbigpe2Zvcig7YTxiLmxlbmd0aDthKyspe3ZhciBjPWJbYV07ZG8gYz1jKCEwKTt3aGlsZShudWxsIT09Yyl9fSk7YWc9bnVsbH1jYXRjaChjKXt0aHJvdyBudWxsIT09YWcmJihhZz1hZy5zbGljZShhKzEpKSxPZihVZixpZyksYzt9ZmluYWxseXtjZz0hMX19fXZhciBrZz1yYS5SZWFjdEN1cnJlbnRCYXRjaENvbmZpZztmdW5jdGlvbiBsZyhhLGIpe2lmKGEmJmEuZGVmYXVsdFByb3BzKXtiPW0oe30sYik7YT1hLmRlZmF1bHRQcm9wcztmb3IodmFyIGMgaW4gYSl2b2lkIDA9PT1iW2NdJiYoYltjXT1hW2NdKTtyZXR1cm4gYn1yZXR1cm4gYn12YXIgbWc9QmYobnVsbCksbmc9bnVsbCxvZz1udWxsLHBnPW51bGw7ZnVuY3Rpb24gcWcoKXtwZz1vZz1uZz1udWxsfVxuZnVuY3Rpb24gcmcoYSl7dmFyIGI9bWcuY3VycmVudDtIKG1nKTthLnR5cGUuX2NvbnRleHQuX2N1cnJlbnRWYWx1ZT1ifWZ1bmN0aW9uIHNnKGEsYil7Zm9yKDtudWxsIT09YTspe3ZhciBjPWEuYWx0ZXJuYXRlO2lmKChhLmNoaWxkTGFuZXMmYik9PT1iKWlmKG51bGw9PT1jfHwoYy5jaGlsZExhbmVzJmIpPT09YilicmVhaztlbHNlIGMuY2hpbGRMYW5lc3w9YjtlbHNlIGEuY2hpbGRMYW5lc3w9YixudWxsIT09YyYmKGMuY2hpbGRMYW5lc3w9Yik7YT1hLnJldHVybn19ZnVuY3Rpb24gdGcoYSxiKXtuZz1hO3BnPW9nPW51bGw7YT1hLmRlcGVuZGVuY2llcztudWxsIT09YSYmbnVsbCE9PWEuZmlyc3RDb250ZXh0JiYoMCE9PShhLmxhbmVzJmIpJiYodWc9ITApLGEuZmlyc3RDb250ZXh0PW51bGwpfVxuZnVuY3Rpb24gdmcoYSxiKXtpZihwZyE9PWEmJiExIT09YiYmMCE9PWIpe2lmKFwibnVtYmVyXCIhPT10eXBlb2YgYnx8MTA3Mzc0MTgyMz09PWIpcGc9YSxiPTEwNzM3NDE4MjM7Yj17Y29udGV4dDphLG9ic2VydmVkQml0czpiLG5leHQ6bnVsbH07aWYobnVsbD09PW9nKXtpZihudWxsPT09bmcpdGhyb3cgRXJyb3IoeSgzMDgpKTtvZz1iO25nLmRlcGVuZGVuY2llcz17bGFuZXM6MCxmaXJzdENvbnRleHQ6YixyZXNwb25kZXJzOm51bGx9fWVsc2Ugb2c9b2cubmV4dD1ifXJldHVybiBhLl9jdXJyZW50VmFsdWV9dmFyIHdnPSExO2Z1bmN0aW9uIHhnKGEpe2EudXBkYXRlUXVldWU9e2Jhc2VTdGF0ZTphLm1lbW9pemVkU3RhdGUsZmlyc3RCYXNlVXBkYXRlOm51bGwsbGFzdEJhc2VVcGRhdGU6bnVsbCxzaGFyZWQ6e3BlbmRpbmc6bnVsbH0sZWZmZWN0czpudWxsfX1cbmZ1bmN0aW9uIHlnKGEsYil7YT1hLnVwZGF0ZVF1ZXVlO2IudXBkYXRlUXVldWU9PT1hJiYoYi51cGRhdGVRdWV1ZT17YmFzZVN0YXRlOmEuYmFzZVN0YXRlLGZpcnN0QmFzZVVwZGF0ZTphLmZpcnN0QmFzZVVwZGF0ZSxsYXN0QmFzZVVwZGF0ZTphLmxhc3RCYXNlVXBkYXRlLHNoYXJlZDphLnNoYXJlZCxlZmZlY3RzOmEuZWZmZWN0c30pfWZ1bmN0aW9uIHpnKGEsYil7cmV0dXJue2V2ZW50VGltZTphLGxhbmU6Yix0YWc6MCxwYXlsb2FkOm51bGwsY2FsbGJhY2s6bnVsbCxuZXh0Om51bGx9fWZ1bmN0aW9uIEFnKGEsYil7YT1hLnVwZGF0ZVF1ZXVlO2lmKG51bGwhPT1hKXthPWEuc2hhcmVkO3ZhciBjPWEucGVuZGluZztudWxsPT09Yz9iLm5leHQ9YjooYi5uZXh0PWMubmV4dCxjLm5leHQ9Yik7YS5wZW5kaW5nPWJ9fVxuZnVuY3Rpb24gQmcoYSxiKXt2YXIgYz1hLnVwZGF0ZVF1ZXVlLGQ9YS5hbHRlcm5hdGU7aWYobnVsbCE9PWQmJihkPWQudXBkYXRlUXVldWUsYz09PWQpKXt2YXIgZT1udWxsLGY9bnVsbDtjPWMuZmlyc3RCYXNlVXBkYXRlO2lmKG51bGwhPT1jKXtkb3t2YXIgZz17ZXZlbnRUaW1lOmMuZXZlbnRUaW1lLGxhbmU6Yy5sYW5lLHRhZzpjLnRhZyxwYXlsb2FkOmMucGF5bG9hZCxjYWxsYmFjazpjLmNhbGxiYWNrLG5leHQ6bnVsbH07bnVsbD09PWY/ZT1mPWc6Zj1mLm5leHQ9ZztjPWMubmV4dH13aGlsZShudWxsIT09Yyk7bnVsbD09PWY/ZT1mPWI6Zj1mLm5leHQ9Yn1lbHNlIGU9Zj1iO2M9e2Jhc2VTdGF0ZTpkLmJhc2VTdGF0ZSxmaXJzdEJhc2VVcGRhdGU6ZSxsYXN0QmFzZVVwZGF0ZTpmLHNoYXJlZDpkLnNoYXJlZCxlZmZlY3RzOmQuZWZmZWN0c307YS51cGRhdGVRdWV1ZT1jO3JldHVybn1hPWMubGFzdEJhc2VVcGRhdGU7bnVsbD09PWE/Yy5maXJzdEJhc2VVcGRhdGU9YjphLm5leHQ9XG5iO2MubGFzdEJhc2VVcGRhdGU9Yn1cbmZ1bmN0aW9uIENnKGEsYixjLGQpe3ZhciBlPWEudXBkYXRlUXVldWU7d2c9ITE7dmFyIGY9ZS5maXJzdEJhc2VVcGRhdGUsZz1lLmxhc3RCYXNlVXBkYXRlLGg9ZS5zaGFyZWQucGVuZGluZztpZihudWxsIT09aCl7ZS5zaGFyZWQucGVuZGluZz1udWxsO3ZhciBrPWgsbD1rLm5leHQ7ay5uZXh0PW51bGw7bnVsbD09PWc/Zj1sOmcubmV4dD1sO2c9azt2YXIgbj1hLmFsdGVybmF0ZTtpZihudWxsIT09bil7bj1uLnVwZGF0ZVF1ZXVlO3ZhciBBPW4ubGFzdEJhc2VVcGRhdGU7QSE9PWcmJihudWxsPT09QT9uLmZpcnN0QmFzZVVwZGF0ZT1sOkEubmV4dD1sLG4ubGFzdEJhc2VVcGRhdGU9ayl9fWlmKG51bGwhPT1mKXtBPWUuYmFzZVN0YXRlO2c9MDtuPWw9az1udWxsO2Rve2g9Zi5sYW5lO3ZhciBwPWYuZXZlbnRUaW1lO2lmKChkJmgpPT09aCl7bnVsbCE9PW4mJihuPW4ubmV4dD17ZXZlbnRUaW1lOnAsbGFuZTowLHRhZzpmLnRhZyxwYXlsb2FkOmYucGF5bG9hZCxjYWxsYmFjazpmLmNhbGxiYWNrLFxubmV4dDpudWxsfSk7YTp7dmFyIEM9YSx4PWY7aD1iO3A9Yztzd2l0Y2goeC50YWcpe2Nhc2UgMTpDPXgucGF5bG9hZDtpZihcImZ1bmN0aW9uXCI9PT10eXBlb2YgQyl7QT1DLmNhbGwocCxBLGgpO2JyZWFrIGF9QT1DO2JyZWFrIGE7Y2FzZSAzOkMuZmxhZ3M9Qy5mbGFncyYtNDA5N3w2NDtjYXNlIDA6Qz14LnBheWxvYWQ7aD1cImZ1bmN0aW9uXCI9PT10eXBlb2YgQz9DLmNhbGwocCxBLGgpOkM7aWYobnVsbD09PWh8fHZvaWQgMD09PWgpYnJlYWsgYTtBPW0oe30sQSxoKTticmVhayBhO2Nhc2UgMjp3Zz0hMH19bnVsbCE9PWYuY2FsbGJhY2smJihhLmZsYWdzfD0zMixoPWUuZWZmZWN0cyxudWxsPT09aD9lLmVmZmVjdHM9W2ZdOmgucHVzaChmKSl9ZWxzZSBwPXtldmVudFRpbWU6cCxsYW5lOmgsdGFnOmYudGFnLHBheWxvYWQ6Zi5wYXlsb2FkLGNhbGxiYWNrOmYuY2FsbGJhY2ssbmV4dDpudWxsfSxudWxsPT09bj8obD1uPXAsaz1BKTpuPW4ubmV4dD1wLGd8PWg7Zj1mLm5leHQ7aWYobnVsbD09PVxuZilpZihoPWUuc2hhcmVkLnBlbmRpbmcsbnVsbD09PWgpYnJlYWs7ZWxzZSBmPWgubmV4dCxoLm5leHQ9bnVsbCxlLmxhc3RCYXNlVXBkYXRlPWgsZS5zaGFyZWQucGVuZGluZz1udWxsfXdoaWxlKDEpO251bGw9PT1uJiYoaz1BKTtlLmJhc2VTdGF0ZT1rO2UuZmlyc3RCYXNlVXBkYXRlPWw7ZS5sYXN0QmFzZVVwZGF0ZT1uO0RnfD1nO2EubGFuZXM9ZzthLm1lbW9pemVkU3RhdGU9QX19ZnVuY3Rpb24gRWcoYSxiLGMpe2E9Yi5lZmZlY3RzO2IuZWZmZWN0cz1udWxsO2lmKG51bGwhPT1hKWZvcihiPTA7YjxhLmxlbmd0aDtiKyspe3ZhciBkPWFbYl0sZT1kLmNhbGxiYWNrO2lmKG51bGwhPT1lKXtkLmNhbGxiYWNrPW51bGw7ZD1jO2lmKFwiZnVuY3Rpb25cIiE9PXR5cGVvZiBlKXRocm93IEVycm9yKHkoMTkxLGUpKTtlLmNhbGwoZCl9fX12YXIgRmc9KG5ldyBhYS5Db21wb25lbnQpLnJlZnM7XG5mdW5jdGlvbiBHZyhhLGIsYyxkKXtiPWEubWVtb2l6ZWRTdGF0ZTtjPWMoZCxiKTtjPW51bGw9PT1jfHx2b2lkIDA9PT1jP2I6bSh7fSxiLGMpO2EubWVtb2l6ZWRTdGF0ZT1jOzA9PT1hLmxhbmVzJiYoYS51cGRhdGVRdWV1ZS5iYXNlU3RhdGU9Yyl9XG52YXIgS2c9e2lzTW91bnRlZDpmdW5jdGlvbihhKXtyZXR1cm4oYT1hLl9yZWFjdEludGVybmFscyk/WmIoYSk9PT1hOiExfSxlbnF1ZXVlU2V0U3RhdGU6ZnVuY3Rpb24oYSxiLGMpe2E9YS5fcmVhY3RJbnRlcm5hbHM7dmFyIGQ9SGcoKSxlPUlnKGEpLGY9emcoZCxlKTtmLnBheWxvYWQ9Yjt2b2lkIDAhPT1jJiZudWxsIT09YyYmKGYuY2FsbGJhY2s9Yyk7QWcoYSxmKTtKZyhhLGUsZCl9LGVucXVldWVSZXBsYWNlU3RhdGU6ZnVuY3Rpb24oYSxiLGMpe2E9YS5fcmVhY3RJbnRlcm5hbHM7dmFyIGQ9SGcoKSxlPUlnKGEpLGY9emcoZCxlKTtmLnRhZz0xO2YucGF5bG9hZD1iO3ZvaWQgMCE9PWMmJm51bGwhPT1jJiYoZi5jYWxsYmFjaz1jKTtBZyhhLGYpO0pnKGEsZSxkKX0sZW5xdWV1ZUZvcmNlVXBkYXRlOmZ1bmN0aW9uKGEsYil7YT1hLl9yZWFjdEludGVybmFsczt2YXIgYz1IZygpLGQ9SWcoYSksZT16ZyhjLGQpO2UudGFnPTI7dm9pZCAwIT09YiYmbnVsbCE9PWImJihlLmNhbGxiYWNrPVxuYik7QWcoYSxlKTtKZyhhLGQsYyl9fTtmdW5jdGlvbiBMZyhhLGIsYyxkLGUsZixnKXthPWEuc3RhdGVOb2RlO3JldHVyblwiZnVuY3Rpb25cIj09PXR5cGVvZiBhLnNob3VsZENvbXBvbmVudFVwZGF0ZT9hLnNob3VsZENvbXBvbmVudFVwZGF0ZShkLGYsZyk6Yi5wcm90b3R5cGUmJmIucHJvdG90eXBlLmlzUHVyZVJlYWN0Q29tcG9uZW50PyFKZShjLGQpfHwhSmUoZSxmKTohMH1cbmZ1bmN0aW9uIE1nKGEsYixjKXt2YXIgZD0hMSxlPUNmO3ZhciBmPWIuY29udGV4dFR5cGU7XCJvYmplY3RcIj09PXR5cGVvZiBmJiZudWxsIT09Zj9mPXZnKGYpOihlPUZmKGIpP0RmOk0uY3VycmVudCxkPWIuY29udGV4dFR5cGVzLGY9KGQ9bnVsbCE9PWQmJnZvaWQgMCE9PWQpP0VmKGEsZSk6Q2YpO2I9bmV3IGIoYyxmKTthLm1lbW9pemVkU3RhdGU9bnVsbCE9PWIuc3RhdGUmJnZvaWQgMCE9PWIuc3RhdGU/Yi5zdGF0ZTpudWxsO2IudXBkYXRlcj1LZzthLnN0YXRlTm9kZT1iO2IuX3JlYWN0SW50ZXJuYWxzPWE7ZCYmKGE9YS5zdGF0ZU5vZGUsYS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZFVubWFza2VkQ2hpbGRDb250ZXh0PWUsYS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1hc2tlZENoaWxkQ29udGV4dD1mKTtyZXR1cm4gYn1cbmZ1bmN0aW9uIE5nKGEsYixjLGQpe2E9Yi5zdGF0ZTtcImZ1bmN0aW9uXCI9PT10eXBlb2YgYi5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJiZiLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoYyxkKTtcImZ1bmN0aW9uXCI9PT10eXBlb2YgYi5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyYmYi5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhjLGQpO2Iuc3RhdGUhPT1hJiZLZy5lbnF1ZXVlUmVwbGFjZVN0YXRlKGIsYi5zdGF0ZSxudWxsKX1cbmZ1bmN0aW9uIE9nKGEsYixjLGQpe3ZhciBlPWEuc3RhdGVOb2RlO2UucHJvcHM9YztlLnN0YXRlPWEubWVtb2l6ZWRTdGF0ZTtlLnJlZnM9Rmc7eGcoYSk7dmFyIGY9Yi5jb250ZXh0VHlwZTtcIm9iamVjdFwiPT09dHlwZW9mIGYmJm51bGwhPT1mP2UuY29udGV4dD12ZyhmKTooZj1GZihiKT9EZjpNLmN1cnJlbnQsZS5jb250ZXh0PUVmKGEsZikpO0NnKGEsYyxlLGQpO2Uuc3RhdGU9YS5tZW1vaXplZFN0YXRlO2Y9Yi5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM7XCJmdW5jdGlvblwiPT09dHlwZW9mIGYmJihHZyhhLGIsZixjKSxlLnN0YXRlPWEubWVtb2l6ZWRTdGF0ZSk7XCJmdW5jdGlvblwiPT09dHlwZW9mIGIuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzfHxcImZ1bmN0aW9uXCI9PT10eXBlb2YgZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZXx8XCJmdW5jdGlvblwiIT09dHlwZW9mIGUuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCYmXCJmdW5jdGlvblwiIT09dHlwZW9mIGUuY29tcG9uZW50V2lsbE1vdW50fHxcbihiPWUuc3RhdGUsXCJmdW5jdGlvblwiPT09dHlwZW9mIGUuY29tcG9uZW50V2lsbE1vdW50JiZlLmNvbXBvbmVudFdpbGxNb3VudCgpLFwiZnVuY3Rpb25cIj09PXR5cGVvZiBlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQmJmUuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCgpLGIhPT1lLnN0YXRlJiZLZy5lbnF1ZXVlUmVwbGFjZVN0YXRlKGUsZS5zdGF0ZSxudWxsKSxDZyhhLGMsZSxkKSxlLnN0YXRlPWEubWVtb2l6ZWRTdGF0ZSk7XCJmdW5jdGlvblwiPT09dHlwZW9mIGUuY29tcG9uZW50RGlkTW91bnQmJihhLmZsYWdzfD00KX12YXIgUGc9QXJyYXkuaXNBcnJheTtcbmZ1bmN0aW9uIFFnKGEsYixjKXthPWMucmVmO2lmKG51bGwhPT1hJiZcImZ1bmN0aW9uXCIhPT10eXBlb2YgYSYmXCJvYmplY3RcIiE9PXR5cGVvZiBhKXtpZihjLl9vd25lcil7Yz1jLl9vd25lcjtpZihjKXtpZigxIT09Yy50YWcpdGhyb3cgRXJyb3IoeSgzMDkpKTt2YXIgZD1jLnN0YXRlTm9kZX1pZighZCl0aHJvdyBFcnJvcih5KDE0NyxhKSk7dmFyIGU9XCJcIithO2lmKG51bGwhPT1iJiZudWxsIT09Yi5yZWYmJlwiZnVuY3Rpb25cIj09PXR5cGVvZiBiLnJlZiYmYi5yZWYuX3N0cmluZ1JlZj09PWUpcmV0dXJuIGIucmVmO2I9ZnVuY3Rpb24oYSl7dmFyIGI9ZC5yZWZzO2I9PT1GZyYmKGI9ZC5yZWZzPXt9KTtudWxsPT09YT9kZWxldGUgYltlXTpiW2VdPWF9O2IuX3N0cmluZ1JlZj1lO3JldHVybiBifWlmKFwic3RyaW5nXCIhPT10eXBlb2YgYSl0aHJvdyBFcnJvcih5KDI4NCkpO2lmKCFjLl9vd25lcil0aHJvdyBFcnJvcih5KDI5MCxhKSk7fXJldHVybiBhfVxuZnVuY3Rpb24gUmcoYSxiKXtpZihcInRleHRhcmVhXCIhPT1hLnR5cGUpdGhyb3cgRXJyb3IoeSgzMSxcIltvYmplY3QgT2JqZWN0XVwiPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGIpP1wib2JqZWN0IHdpdGgga2V5cyB7XCIrT2JqZWN0LmtleXMoYikuam9pbihcIiwgXCIpK1wifVwiOmIpKTt9XG5mdW5jdGlvbiBTZyhhKXtmdW5jdGlvbiBiKGIsYyl7aWYoYSl7dmFyIGQ9Yi5sYXN0RWZmZWN0O251bGwhPT1kPyhkLm5leHRFZmZlY3Q9YyxiLmxhc3RFZmZlY3Q9Yyk6Yi5maXJzdEVmZmVjdD1iLmxhc3RFZmZlY3Q9YztjLm5leHRFZmZlY3Q9bnVsbDtjLmZsYWdzPTh9fWZ1bmN0aW9uIGMoYyxkKXtpZighYSlyZXR1cm4gbnVsbDtmb3IoO251bGwhPT1kOyliKGMsZCksZD1kLnNpYmxpbmc7cmV0dXJuIG51bGx9ZnVuY3Rpb24gZChhLGIpe2ZvcihhPW5ldyBNYXA7bnVsbCE9PWI7KW51bGwhPT1iLmtleT9hLnNldChiLmtleSxiKTphLnNldChiLmluZGV4LGIpLGI9Yi5zaWJsaW5nO3JldHVybiBhfWZ1bmN0aW9uIGUoYSxiKXthPVRnKGEsYik7YS5pbmRleD0wO2Euc2libGluZz1udWxsO3JldHVybiBhfWZ1bmN0aW9uIGYoYixjLGQpe2IuaW5kZXg9ZDtpZighYSlyZXR1cm4gYztkPWIuYWx0ZXJuYXRlO2lmKG51bGwhPT1kKXJldHVybiBkPWQuaW5kZXgsZDxjPyhiLmZsYWdzPTIsXG5jKTpkO2IuZmxhZ3M9MjtyZXR1cm4gY31mdW5jdGlvbiBnKGIpe2EmJm51bGw9PT1iLmFsdGVybmF0ZSYmKGIuZmxhZ3M9Mik7cmV0dXJuIGJ9ZnVuY3Rpb24gaChhLGIsYyxkKXtpZihudWxsPT09Ynx8NiE9PWIudGFnKXJldHVybiBiPVVnKGMsYS5tb2RlLGQpLGIucmV0dXJuPWEsYjtiPWUoYixjKTtiLnJldHVybj1hO3JldHVybiBifWZ1bmN0aW9uIGsoYSxiLGMsZCl7aWYobnVsbCE9PWImJmIuZWxlbWVudFR5cGU9PT1jLnR5cGUpcmV0dXJuIGQ9ZShiLGMucHJvcHMpLGQucmVmPVFnKGEsYixjKSxkLnJldHVybj1hLGQ7ZD1WZyhjLnR5cGUsYy5rZXksYy5wcm9wcyxudWxsLGEubW9kZSxkKTtkLnJlZj1RZyhhLGIsYyk7ZC5yZXR1cm49YTtyZXR1cm4gZH1mdW5jdGlvbiBsKGEsYixjLGQpe2lmKG51bGw9PT1ifHw0IT09Yi50YWd8fGIuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8hPT1jLmNvbnRhaW5lckluZm98fGIuc3RhdGVOb2RlLmltcGxlbWVudGF0aW9uIT09Yy5pbXBsZW1lbnRhdGlvbilyZXR1cm4gYj1cbldnKGMsYS5tb2RlLGQpLGIucmV0dXJuPWEsYjtiPWUoYixjLmNoaWxkcmVufHxbXSk7Yi5yZXR1cm49YTtyZXR1cm4gYn1mdW5jdGlvbiBuKGEsYixjLGQsZil7aWYobnVsbD09PWJ8fDchPT1iLnRhZylyZXR1cm4gYj1YZyhjLGEubW9kZSxkLGYpLGIucmV0dXJuPWEsYjtiPWUoYixjKTtiLnJldHVybj1hO3JldHVybiBifWZ1bmN0aW9uIEEoYSxiLGMpe2lmKFwic3RyaW5nXCI9PT10eXBlb2YgYnx8XCJudW1iZXJcIj09PXR5cGVvZiBiKXJldHVybiBiPVVnKFwiXCIrYixhLm1vZGUsYyksYi5yZXR1cm49YSxiO2lmKFwib2JqZWN0XCI9PT10eXBlb2YgYiYmbnVsbCE9PWIpe3N3aXRjaChiLiQkdHlwZW9mKXtjYXNlIHNhOnJldHVybiBjPVZnKGIudHlwZSxiLmtleSxiLnByb3BzLG51bGwsYS5tb2RlLGMpLGMucmVmPVFnKGEsbnVsbCxiKSxjLnJldHVybj1hLGM7Y2FzZSB0YTpyZXR1cm4gYj1XZyhiLGEubW9kZSxjKSxiLnJldHVybj1hLGJ9aWYoUGcoYil8fExhKGIpKXJldHVybiBiPVhnKGIsXG5hLm1vZGUsYyxudWxsKSxiLnJldHVybj1hLGI7UmcoYSxiKX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBwKGEsYixjLGQpe3ZhciBlPW51bGwhPT1iP2Iua2V5Om51bGw7aWYoXCJzdHJpbmdcIj09PXR5cGVvZiBjfHxcIm51bWJlclwiPT09dHlwZW9mIGMpcmV0dXJuIG51bGwhPT1lP251bGw6aChhLGIsXCJcIitjLGQpO2lmKFwib2JqZWN0XCI9PT10eXBlb2YgYyYmbnVsbCE9PWMpe3N3aXRjaChjLiQkdHlwZW9mKXtjYXNlIHNhOnJldHVybiBjLmtleT09PWU/Yy50eXBlPT09dWE/bihhLGIsYy5wcm9wcy5jaGlsZHJlbixkLGUpOmsoYSxiLGMsZCk6bnVsbDtjYXNlIHRhOnJldHVybiBjLmtleT09PWU/bChhLGIsYyxkKTpudWxsfWlmKFBnKGMpfHxMYShjKSlyZXR1cm4gbnVsbCE9PWU/bnVsbDpuKGEsYixjLGQsbnVsbCk7UmcoYSxjKX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBDKGEsYixjLGQsZSl7aWYoXCJzdHJpbmdcIj09PXR5cGVvZiBkfHxcIm51bWJlclwiPT09dHlwZW9mIGQpcmV0dXJuIGE9YS5nZXQoYyl8fFxubnVsbCxoKGIsYSxcIlwiK2QsZSk7aWYoXCJvYmplY3RcIj09PXR5cGVvZiBkJiZudWxsIT09ZCl7c3dpdGNoKGQuJCR0eXBlb2Ype2Nhc2Ugc2E6cmV0dXJuIGE9YS5nZXQobnVsbD09PWQua2V5P2M6ZC5rZXkpfHxudWxsLGQudHlwZT09PXVhP24oYixhLGQucHJvcHMuY2hpbGRyZW4sZSxkLmtleSk6ayhiLGEsZCxlKTtjYXNlIHRhOnJldHVybiBhPWEuZ2V0KG51bGw9PT1kLmtleT9jOmQua2V5KXx8bnVsbCxsKGIsYSxkLGUpfWlmKFBnKGQpfHxMYShkKSlyZXR1cm4gYT1hLmdldChjKXx8bnVsbCxuKGIsYSxkLGUsbnVsbCk7UmcoYixkKX1yZXR1cm4gbnVsbH1mdW5jdGlvbiB4KGUsZyxoLGspe2Zvcih2YXIgbD1udWxsLHQ9bnVsbCx1PWcsej1nPTAscT1udWxsO251bGwhPT11JiZ6PGgubGVuZ3RoO3orKyl7dS5pbmRleD56PyhxPXUsdT1udWxsKTpxPXUuc2libGluZzt2YXIgbj1wKGUsdSxoW3pdLGspO2lmKG51bGw9PT1uKXtudWxsPT09dSYmKHU9cSk7YnJlYWt9YSYmdSYmbnVsbD09PVxubi5hbHRlcm5hdGUmJmIoZSx1KTtnPWYobixnLHopO251bGw9PT10P2w9bjp0LnNpYmxpbmc9bjt0PW47dT1xfWlmKHo9PT1oLmxlbmd0aClyZXR1cm4gYyhlLHUpLGw7aWYobnVsbD09PXUpe2Zvcig7ejxoLmxlbmd0aDt6KyspdT1BKGUsaFt6XSxrKSxudWxsIT09dSYmKGc9Zih1LGcseiksbnVsbD09PXQ/bD11OnQuc2libGluZz11LHQ9dSk7cmV0dXJuIGx9Zm9yKHU9ZChlLHUpO3o8aC5sZW5ndGg7eisrKXE9Qyh1LGUseixoW3pdLGspLG51bGwhPT1xJiYoYSYmbnVsbCE9PXEuYWx0ZXJuYXRlJiZ1LmRlbGV0ZShudWxsPT09cS5rZXk/ejpxLmtleSksZz1mKHEsZyx6KSxudWxsPT09dD9sPXE6dC5zaWJsaW5nPXEsdD1xKTthJiZ1LmZvckVhY2goZnVuY3Rpb24oYSl7cmV0dXJuIGIoZSxhKX0pO3JldHVybiBsfWZ1bmN0aW9uIHcoZSxnLGgsayl7dmFyIGw9TGEoaCk7aWYoXCJmdW5jdGlvblwiIT09dHlwZW9mIGwpdGhyb3cgRXJyb3IoeSgxNTApKTtoPWwuY2FsbChoKTtpZihudWxsPT1cbmgpdGhyb3cgRXJyb3IoeSgxNTEpKTtmb3IodmFyIHQ9bD1udWxsLHU9Zyx6PWc9MCxxPW51bGwsbj1oLm5leHQoKTtudWxsIT09dSYmIW4uZG9uZTt6Kyssbj1oLm5leHQoKSl7dS5pbmRleD56PyhxPXUsdT1udWxsKTpxPXUuc2libGluZzt2YXIgdz1wKGUsdSxuLnZhbHVlLGspO2lmKG51bGw9PT13KXtudWxsPT09dSYmKHU9cSk7YnJlYWt9YSYmdSYmbnVsbD09PXcuYWx0ZXJuYXRlJiZiKGUsdSk7Zz1mKHcsZyx6KTtudWxsPT09dD9sPXc6dC5zaWJsaW5nPXc7dD13O3U9cX1pZihuLmRvbmUpcmV0dXJuIGMoZSx1KSxsO2lmKG51bGw9PT11KXtmb3IoOyFuLmRvbmU7eisrLG49aC5uZXh0KCkpbj1BKGUsbi52YWx1ZSxrKSxudWxsIT09biYmKGc9ZihuLGcseiksbnVsbD09PXQ/bD1uOnQuc2libGluZz1uLHQ9bik7cmV0dXJuIGx9Zm9yKHU9ZChlLHUpOyFuLmRvbmU7eisrLG49aC5uZXh0KCkpbj1DKHUsZSx6LG4udmFsdWUsayksbnVsbCE9PW4mJihhJiZudWxsIT09bi5hbHRlcm5hdGUmJlxudS5kZWxldGUobnVsbD09PW4ua2V5P3o6bi5rZXkpLGc9ZihuLGcseiksbnVsbD09PXQ/bD1uOnQuc2libGluZz1uLHQ9bik7YSYmdS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3JldHVybiBiKGUsYSl9KTtyZXR1cm4gbH1yZXR1cm4gZnVuY3Rpb24oYSxkLGYsaCl7dmFyIGs9XCJvYmplY3RcIj09PXR5cGVvZiBmJiZudWxsIT09ZiYmZi50eXBlPT09dWEmJm51bGw9PT1mLmtleTtrJiYoZj1mLnByb3BzLmNoaWxkcmVuKTt2YXIgbD1cIm9iamVjdFwiPT09dHlwZW9mIGYmJm51bGwhPT1mO2lmKGwpc3dpdGNoKGYuJCR0eXBlb2Ype2Nhc2Ugc2E6YTp7bD1mLmtleTtmb3Ioaz1kO251bGwhPT1rOyl7aWYoay5rZXk9PT1sKXtzd2l0Y2goay50YWcpe2Nhc2UgNzppZihmLnR5cGU9PT11YSl7YyhhLGsuc2libGluZyk7ZD1lKGssZi5wcm9wcy5jaGlsZHJlbik7ZC5yZXR1cm49YTthPWQ7YnJlYWsgYX1icmVhaztkZWZhdWx0OmlmKGsuZWxlbWVudFR5cGU9PT1mLnR5cGUpe2MoYSxrLnNpYmxpbmcpO1xuZD1lKGssZi5wcm9wcyk7ZC5yZWY9UWcoYSxrLGYpO2QucmV0dXJuPWE7YT1kO2JyZWFrIGF9fWMoYSxrKTticmVha31lbHNlIGIoYSxrKTtrPWsuc2libGluZ31mLnR5cGU9PT11YT8oZD1YZyhmLnByb3BzLmNoaWxkcmVuLGEubW9kZSxoLGYua2V5KSxkLnJldHVybj1hLGE9ZCk6KGg9VmcoZi50eXBlLGYua2V5LGYucHJvcHMsbnVsbCxhLm1vZGUsaCksaC5yZWY9UWcoYSxkLGYpLGgucmV0dXJuPWEsYT1oKX1yZXR1cm4gZyhhKTtjYXNlIHRhOmE6e2ZvcihrPWYua2V5O251bGwhPT1kOyl7aWYoZC5rZXk9PT1rKWlmKDQ9PT1kLnRhZyYmZC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbz09PWYuY29udGFpbmVySW5mbyYmZC5zdGF0ZU5vZGUuaW1wbGVtZW50YXRpb249PT1mLmltcGxlbWVudGF0aW9uKXtjKGEsZC5zaWJsaW5nKTtkPWUoZCxmLmNoaWxkcmVufHxbXSk7ZC5yZXR1cm49YTthPWQ7YnJlYWsgYX1lbHNle2MoYSxkKTticmVha31lbHNlIGIoYSxkKTtkPWQuc2libGluZ31kPVxuV2coZixhLm1vZGUsaCk7ZC5yZXR1cm49YTthPWR9cmV0dXJuIGcoYSl9aWYoXCJzdHJpbmdcIj09PXR5cGVvZiBmfHxcIm51bWJlclwiPT09dHlwZW9mIGYpcmV0dXJuIGY9XCJcIitmLG51bGwhPT1kJiY2PT09ZC50YWc/KGMoYSxkLnNpYmxpbmcpLGQ9ZShkLGYpLGQucmV0dXJuPWEsYT1kKTooYyhhLGQpLGQ9VWcoZixhLm1vZGUsaCksZC5yZXR1cm49YSxhPWQpLGcoYSk7aWYoUGcoZikpcmV0dXJuIHgoYSxkLGYsaCk7aWYoTGEoZikpcmV0dXJuIHcoYSxkLGYsaCk7bCYmUmcoYSxmKTtpZihcInVuZGVmaW5lZFwiPT09dHlwZW9mIGYmJiFrKXN3aXRjaChhLnRhZyl7Y2FzZSAxOmNhc2UgMjI6Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNTp0aHJvdyBFcnJvcih5KDE1MixSYShhLnR5cGUpfHxcIkNvbXBvbmVudFwiKSk7fXJldHVybiBjKGEsZCl9fXZhciBZZz1TZyghMCksWmc9U2coITEpLCRnPXt9LGFoPUJmKCRnKSxiaD1CZigkZyksY2g9QmYoJGcpO1xuZnVuY3Rpb24gZGgoYSl7aWYoYT09PSRnKXRocm93IEVycm9yKHkoMTc0KSk7cmV0dXJuIGF9ZnVuY3Rpb24gZWgoYSxiKXtJKGNoLGIpO0koYmgsYSk7SShhaCwkZyk7YT1iLm5vZGVUeXBlO3N3aXRjaChhKXtjYXNlIDk6Y2FzZSAxMTpiPShiPWIuZG9jdW1lbnRFbGVtZW50KT9iLm5hbWVzcGFjZVVSSTptYihudWxsLFwiXCIpO2JyZWFrO2RlZmF1bHQ6YT04PT09YT9iLnBhcmVudE5vZGU6YixiPWEubmFtZXNwYWNlVVJJfHxudWxsLGE9YS50YWdOYW1lLGI9bWIoYixhKX1IKGFoKTtJKGFoLGIpfWZ1bmN0aW9uIGZoKCl7SChhaCk7SChiaCk7SChjaCl9ZnVuY3Rpb24gZ2goYSl7ZGgoY2guY3VycmVudCk7dmFyIGI9ZGgoYWguY3VycmVudCk7dmFyIGM9bWIoYixhLnR5cGUpO2IhPT1jJiYoSShiaCxhKSxJKGFoLGMpKX1mdW5jdGlvbiBoaChhKXtiaC5jdXJyZW50PT09YSYmKEgoYWgpLEgoYmgpKX12YXIgUD1CZigwKTtcbmZ1bmN0aW9uIGloKGEpe2Zvcih2YXIgYj1hO251bGwhPT1iOyl7aWYoMTM9PT1iLnRhZyl7dmFyIGM9Yi5tZW1vaXplZFN0YXRlO2lmKG51bGwhPT1jJiYoYz1jLmRlaHlkcmF0ZWQsbnVsbD09PWN8fFwiJD9cIj09PWMuZGF0YXx8XCIkIVwiPT09Yy5kYXRhKSlyZXR1cm4gYn1lbHNlIGlmKDE5PT09Yi50YWcmJnZvaWQgMCE9PWIubWVtb2l6ZWRQcm9wcy5yZXZlYWxPcmRlcil7aWYoMCE9PShiLmZsYWdzJjY0KSlyZXR1cm4gYn1lbHNlIGlmKG51bGwhPT1iLmNoaWxkKXtiLmNoaWxkLnJldHVybj1iO2I9Yi5jaGlsZDtjb250aW51ZX1pZihiPT09YSlicmVhaztmb3IoO251bGw9PT1iLnNpYmxpbmc7KXtpZihudWxsPT09Yi5yZXR1cm58fGIucmV0dXJuPT09YSlyZXR1cm4gbnVsbDtiPWIucmV0dXJufWIuc2libGluZy5yZXR1cm49Yi5yZXR1cm47Yj1iLnNpYmxpbmd9cmV0dXJuIG51bGx9dmFyIGpoPW51bGwsa2g9bnVsbCxsaD0hMTtcbmZ1bmN0aW9uIG1oKGEsYil7dmFyIGM9bmgoNSxudWxsLG51bGwsMCk7Yy5lbGVtZW50VHlwZT1cIkRFTEVURURcIjtjLnR5cGU9XCJERUxFVEVEXCI7Yy5zdGF0ZU5vZGU9YjtjLnJldHVybj1hO2MuZmxhZ3M9ODtudWxsIT09YS5sYXN0RWZmZWN0PyhhLmxhc3RFZmZlY3QubmV4dEVmZmVjdD1jLGEubGFzdEVmZmVjdD1jKTphLmZpcnN0RWZmZWN0PWEubGFzdEVmZmVjdD1jfWZ1bmN0aW9uIG9oKGEsYil7c3dpdGNoKGEudGFnKXtjYXNlIDU6dmFyIGM9YS50eXBlO2I9MSE9PWIubm9kZVR5cGV8fGMudG9Mb3dlckNhc2UoKSE9PWIubm9kZU5hbWUudG9Mb3dlckNhc2UoKT9udWxsOmI7cmV0dXJuIG51bGwhPT1iPyhhLnN0YXRlTm9kZT1iLCEwKTohMTtjYXNlIDY6cmV0dXJuIGI9XCJcIj09PWEucGVuZGluZ1Byb3BzfHwzIT09Yi5ub2RlVHlwZT9udWxsOmIsbnVsbCE9PWI/KGEuc3RhdGVOb2RlPWIsITApOiExO2Nhc2UgMTM6cmV0dXJuITE7ZGVmYXVsdDpyZXR1cm4hMX19XG5mdW5jdGlvbiBwaChhKXtpZihsaCl7dmFyIGI9a2g7aWYoYil7dmFyIGM9YjtpZighb2goYSxiKSl7Yj1yZihjLm5leHRTaWJsaW5nKTtpZighYnx8IW9oKGEsYikpe2EuZmxhZ3M9YS5mbGFncyYtMTAyNXwyO2xoPSExO2poPWE7cmV0dXJufW1oKGpoLGMpfWpoPWE7a2g9cmYoYi5maXJzdENoaWxkKX1lbHNlIGEuZmxhZ3M9YS5mbGFncyYtMTAyNXwyLGxoPSExLGpoPWF9fWZ1bmN0aW9uIHFoKGEpe2ZvcihhPWEucmV0dXJuO251bGwhPT1hJiY1IT09YS50YWcmJjMhPT1hLnRhZyYmMTMhPT1hLnRhZzspYT1hLnJldHVybjtqaD1hfVxuZnVuY3Rpb24gcmgoYSl7aWYoYSE9PWpoKXJldHVybiExO2lmKCFsaClyZXR1cm4gcWgoYSksbGg9ITAsITE7dmFyIGI9YS50eXBlO2lmKDUhPT1hLnRhZ3x8XCJoZWFkXCIhPT1iJiZcImJvZHlcIiE9PWImJiFuZihiLGEubWVtb2l6ZWRQcm9wcykpZm9yKGI9a2g7YjspbWgoYSxiKSxiPXJmKGIubmV4dFNpYmxpbmcpO3FoKGEpO2lmKDEzPT09YS50YWcpe2E9YS5tZW1vaXplZFN0YXRlO2E9bnVsbCE9PWE/YS5kZWh5ZHJhdGVkOm51bGw7aWYoIWEpdGhyb3cgRXJyb3IoeSgzMTcpKTthOnthPWEubmV4dFNpYmxpbmc7Zm9yKGI9MDthOyl7aWYoOD09PWEubm9kZVR5cGUpe3ZhciBjPWEuZGF0YTtpZihcIi8kXCI9PT1jKXtpZigwPT09Yil7a2g9cmYoYS5uZXh0U2libGluZyk7YnJlYWsgYX1iLS19ZWxzZVwiJFwiIT09YyYmXCIkIVwiIT09YyYmXCIkP1wiIT09Y3x8YisrfWE9YS5uZXh0U2libGluZ31raD1udWxsfX1lbHNlIGtoPWpoP3JmKGEuc3RhdGVOb2RlLm5leHRTaWJsaW5nKTpudWxsO3JldHVybiEwfVxuZnVuY3Rpb24gc2goKXtraD1qaD1udWxsO2xoPSExfXZhciB0aD1bXTtmdW5jdGlvbiB1aCgpe2Zvcih2YXIgYT0wO2E8dGgubGVuZ3RoO2ErKyl0aFthXS5fd29ya0luUHJvZ3Jlc3NWZXJzaW9uUHJpbWFyeT1udWxsO3RoLmxlbmd0aD0wfXZhciB2aD1yYS5SZWFjdEN1cnJlbnREaXNwYXRjaGVyLHdoPXJhLlJlYWN0Q3VycmVudEJhdGNoQ29uZmlnLHhoPTAsUj1udWxsLFM9bnVsbCxUPW51bGwseWg9ITEsemg9ITE7ZnVuY3Rpb24gQWgoKXt0aHJvdyBFcnJvcih5KDMyMSkpO31mdW5jdGlvbiBCaChhLGIpe2lmKG51bGw9PT1iKXJldHVybiExO2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGgmJmM8YS5sZW5ndGg7YysrKWlmKCFIZShhW2NdLGJbY10pKXJldHVybiExO3JldHVybiEwfVxuZnVuY3Rpb24gQ2goYSxiLGMsZCxlLGYpe3hoPWY7Uj1iO2IubWVtb2l6ZWRTdGF0ZT1udWxsO2IudXBkYXRlUXVldWU9bnVsbDtiLmxhbmVzPTA7dmguY3VycmVudD1udWxsPT09YXx8bnVsbD09PWEubWVtb2l6ZWRTdGF0ZT9EaDpFaDthPWMoZCxlKTtpZih6aCl7Zj0wO2Rve3poPSExO2lmKCEoMjU+ZikpdGhyb3cgRXJyb3IoeSgzMDEpKTtmKz0xO1Q9Uz1udWxsO2IudXBkYXRlUXVldWU9bnVsbDt2aC5jdXJyZW50PUZoO2E9YyhkLGUpfXdoaWxlKHpoKX12aC5jdXJyZW50PUdoO2I9bnVsbCE9PVMmJm51bGwhPT1TLm5leHQ7eGg9MDtUPVM9Uj1udWxsO3loPSExO2lmKGIpdGhyb3cgRXJyb3IoeSgzMDApKTtyZXR1cm4gYX1mdW5jdGlvbiBIaCgpe3ZhciBhPXttZW1vaXplZFN0YXRlOm51bGwsYmFzZVN0YXRlOm51bGwsYmFzZVF1ZXVlOm51bGwscXVldWU6bnVsbCxuZXh0Om51bGx9O251bGw9PT1UP1IubWVtb2l6ZWRTdGF0ZT1UPWE6VD1ULm5leHQ9YTtyZXR1cm4gVH1cbmZ1bmN0aW9uIEloKCl7aWYobnVsbD09PVMpe3ZhciBhPVIuYWx0ZXJuYXRlO2E9bnVsbCE9PWE/YS5tZW1vaXplZFN0YXRlOm51bGx9ZWxzZSBhPVMubmV4dDt2YXIgYj1udWxsPT09VD9SLm1lbW9pemVkU3RhdGU6VC5uZXh0O2lmKG51bGwhPT1iKVQ9YixTPWE7ZWxzZXtpZihudWxsPT09YSl0aHJvdyBFcnJvcih5KDMxMCkpO1M9YTthPXttZW1vaXplZFN0YXRlOlMubWVtb2l6ZWRTdGF0ZSxiYXNlU3RhdGU6Uy5iYXNlU3RhdGUsYmFzZVF1ZXVlOlMuYmFzZVF1ZXVlLHF1ZXVlOlMucXVldWUsbmV4dDpudWxsfTtudWxsPT09VD9SLm1lbW9pemVkU3RhdGU9VD1hOlQ9VC5uZXh0PWF9cmV0dXJuIFR9ZnVuY3Rpb24gSmgoYSxiKXtyZXR1cm5cImZ1bmN0aW9uXCI9PT10eXBlb2YgYj9iKGEpOmJ9XG5mdW5jdGlvbiBLaChhKXt2YXIgYj1JaCgpLGM9Yi5xdWV1ZTtpZihudWxsPT09Yyl0aHJvdyBFcnJvcih5KDMxMSkpO2MubGFzdFJlbmRlcmVkUmVkdWNlcj1hO3ZhciBkPVMsZT1kLmJhc2VRdWV1ZSxmPWMucGVuZGluZztpZihudWxsIT09Zil7aWYobnVsbCE9PWUpe3ZhciBnPWUubmV4dDtlLm5leHQ9Zi5uZXh0O2YubmV4dD1nfWQuYmFzZVF1ZXVlPWU9ZjtjLnBlbmRpbmc9bnVsbH1pZihudWxsIT09ZSl7ZT1lLm5leHQ7ZD1kLmJhc2VTdGF0ZTt2YXIgaD1nPWY9bnVsbCxrPWU7ZG97dmFyIGw9ay5sYW5lO2lmKCh4aCZsKT09PWwpbnVsbCE9PWgmJihoPWgubmV4dD17bGFuZTowLGFjdGlvbjprLmFjdGlvbixlYWdlclJlZHVjZXI6ay5lYWdlclJlZHVjZXIsZWFnZXJTdGF0ZTprLmVhZ2VyU3RhdGUsbmV4dDpudWxsfSksZD1rLmVhZ2VyUmVkdWNlcj09PWE/ay5lYWdlclN0YXRlOmEoZCxrLmFjdGlvbik7ZWxzZXt2YXIgbj17bGFuZTpsLGFjdGlvbjprLmFjdGlvbixlYWdlclJlZHVjZXI6ay5lYWdlclJlZHVjZXIsXG5lYWdlclN0YXRlOmsuZWFnZXJTdGF0ZSxuZXh0Om51bGx9O251bGw9PT1oPyhnPWg9bixmPWQpOmg9aC5uZXh0PW47Ui5sYW5lc3w9bDtEZ3w9bH1rPWsubmV4dH13aGlsZShudWxsIT09ayYmayE9PWUpO251bGw9PT1oP2Y9ZDpoLm5leHQ9ZztIZShkLGIubWVtb2l6ZWRTdGF0ZSl8fCh1Zz0hMCk7Yi5tZW1vaXplZFN0YXRlPWQ7Yi5iYXNlU3RhdGU9ZjtiLmJhc2VRdWV1ZT1oO2MubGFzdFJlbmRlcmVkU3RhdGU9ZH1yZXR1cm5bYi5tZW1vaXplZFN0YXRlLGMuZGlzcGF0Y2hdfVxuZnVuY3Rpb24gTGgoYSl7dmFyIGI9SWgoKSxjPWIucXVldWU7aWYobnVsbD09PWMpdGhyb3cgRXJyb3IoeSgzMTEpKTtjLmxhc3RSZW5kZXJlZFJlZHVjZXI9YTt2YXIgZD1jLmRpc3BhdGNoLGU9Yy5wZW5kaW5nLGY9Yi5tZW1vaXplZFN0YXRlO2lmKG51bGwhPT1lKXtjLnBlbmRpbmc9bnVsbDt2YXIgZz1lPWUubmV4dDtkbyBmPWEoZixnLmFjdGlvbiksZz1nLm5leHQ7d2hpbGUoZyE9PWUpO0hlKGYsYi5tZW1vaXplZFN0YXRlKXx8KHVnPSEwKTtiLm1lbW9pemVkU3RhdGU9ZjtudWxsPT09Yi5iYXNlUXVldWUmJihiLmJhc2VTdGF0ZT1mKTtjLmxhc3RSZW5kZXJlZFN0YXRlPWZ9cmV0dXJuW2YsZF19XG5mdW5jdGlvbiBNaChhLGIsYyl7dmFyIGQ9Yi5fZ2V0VmVyc2lvbjtkPWQoYi5fc291cmNlKTt2YXIgZT1iLl93b3JrSW5Qcm9ncmVzc1ZlcnNpb25QcmltYXJ5O2lmKG51bGwhPT1lKWE9ZT09PWQ7ZWxzZSBpZihhPWEubXV0YWJsZVJlYWRMYW5lcyxhPSh4aCZhKT09PWEpYi5fd29ya0luUHJvZ3Jlc3NWZXJzaW9uUHJpbWFyeT1kLHRoLnB1c2goYik7aWYoYSlyZXR1cm4gYyhiLl9zb3VyY2UpO3RoLnB1c2goYik7dGhyb3cgRXJyb3IoeSgzNTApKTt9XG5mdW5jdGlvbiBOaChhLGIsYyxkKXt2YXIgZT1VO2lmKG51bGw9PT1lKXRocm93IEVycm9yKHkoMzQ5KSk7dmFyIGY9Yi5fZ2V0VmVyc2lvbixnPWYoYi5fc291cmNlKSxoPXZoLmN1cnJlbnQsaz1oLnVzZVN0YXRlKGZ1bmN0aW9uKCl7cmV0dXJuIE1oKGUsYixjKX0pLGw9a1sxXSxuPWtbMF07az1UO3ZhciBBPWEubWVtb2l6ZWRTdGF0ZSxwPUEucmVmcyxDPXAuZ2V0U25hcHNob3QseD1BLnNvdXJjZTtBPUEuc3Vic2NyaWJlO3ZhciB3PVI7YS5tZW1vaXplZFN0YXRlPXtyZWZzOnAsc291cmNlOmIsc3Vic2NyaWJlOmR9O2gudXNlRWZmZWN0KGZ1bmN0aW9uKCl7cC5nZXRTbmFwc2hvdD1jO3Auc2V0U25hcHNob3Q9bDt2YXIgYT1mKGIuX3NvdXJjZSk7aWYoIUhlKGcsYSkpe2E9YyhiLl9zb3VyY2UpO0hlKG4sYSl8fChsKGEpLGE9SWcodyksZS5tdXRhYmxlUmVhZExhbmVzfD1hJmUucGVuZGluZ0xhbmVzKTthPWUubXV0YWJsZVJlYWRMYW5lcztlLmVudGFuZ2xlZExhbmVzfD1hO2Zvcih2YXIgZD1cbmUuZW50YW5nbGVtZW50cyxoPWE7MDxoOyl7dmFyIGs9MzEtVmMoaCksdj0xPDxrO2Rba118PWE7aCY9fnZ9fX0sW2MsYixkXSk7aC51c2VFZmZlY3QoZnVuY3Rpb24oKXtyZXR1cm4gZChiLl9zb3VyY2UsZnVuY3Rpb24oKXt2YXIgYT1wLmdldFNuYXBzaG90LGM9cC5zZXRTbmFwc2hvdDt0cnl7YyhhKGIuX3NvdXJjZSkpO3ZhciBkPUlnKHcpO2UubXV0YWJsZVJlYWRMYW5lc3w9ZCZlLnBlbmRpbmdMYW5lc31jYXRjaChxKXtjKGZ1bmN0aW9uKCl7dGhyb3cgcTt9KX19KX0sW2IsZF0pO0hlKEMsYykmJkhlKHgsYikmJkhlKEEsZCl8fChhPXtwZW5kaW5nOm51bGwsZGlzcGF0Y2g6bnVsbCxsYXN0UmVuZGVyZWRSZWR1Y2VyOkpoLGxhc3RSZW5kZXJlZFN0YXRlOm59LGEuZGlzcGF0Y2g9bD1PaC5iaW5kKG51bGwsUixhKSxrLnF1ZXVlPWEsay5iYXNlUXVldWU9bnVsbCxuPU1oKGUsYixjKSxrLm1lbW9pemVkU3RhdGU9ay5iYXNlU3RhdGU9bik7cmV0dXJuIG59XG5mdW5jdGlvbiBQaChhLGIsYyl7dmFyIGQ9SWgoKTtyZXR1cm4gTmgoZCxhLGIsYyl9ZnVuY3Rpb24gUWgoYSl7dmFyIGI9SGgoKTtcImZ1bmN0aW9uXCI9PT10eXBlb2YgYSYmKGE9YSgpKTtiLm1lbW9pemVkU3RhdGU9Yi5iYXNlU3RhdGU9YTthPWIucXVldWU9e3BlbmRpbmc6bnVsbCxkaXNwYXRjaDpudWxsLGxhc3RSZW5kZXJlZFJlZHVjZXI6SmgsbGFzdFJlbmRlcmVkU3RhdGU6YX07YT1hLmRpc3BhdGNoPU9oLmJpbmQobnVsbCxSLGEpO3JldHVybltiLm1lbW9pemVkU3RhdGUsYV19XG5mdW5jdGlvbiBSaChhLGIsYyxkKXthPXt0YWc6YSxjcmVhdGU6YixkZXN0cm95OmMsZGVwczpkLG5leHQ6bnVsbH07Yj1SLnVwZGF0ZVF1ZXVlO251bGw9PT1iPyhiPXtsYXN0RWZmZWN0Om51bGx9LFIudXBkYXRlUXVldWU9YixiLmxhc3RFZmZlY3Q9YS5uZXh0PWEpOihjPWIubGFzdEVmZmVjdCxudWxsPT09Yz9iLmxhc3RFZmZlY3Q9YS5uZXh0PWE6KGQ9Yy5uZXh0LGMubmV4dD1hLGEubmV4dD1kLGIubGFzdEVmZmVjdD1hKSk7cmV0dXJuIGF9ZnVuY3Rpb24gU2goYSl7dmFyIGI9SGgoKTthPXtjdXJyZW50OmF9O3JldHVybiBiLm1lbW9pemVkU3RhdGU9YX1mdW5jdGlvbiBUaCgpe3JldHVybiBJaCgpLm1lbW9pemVkU3RhdGV9ZnVuY3Rpb24gVWgoYSxiLGMsZCl7dmFyIGU9SGgoKTtSLmZsYWdzfD1hO2UubWVtb2l6ZWRTdGF0ZT1SaCgxfGIsYyx2b2lkIDAsdm9pZCAwPT09ZD9udWxsOmQpfVxuZnVuY3Rpb24gVmgoYSxiLGMsZCl7dmFyIGU9SWgoKTtkPXZvaWQgMD09PWQ/bnVsbDpkO3ZhciBmPXZvaWQgMDtpZihudWxsIT09Uyl7dmFyIGc9Uy5tZW1vaXplZFN0YXRlO2Y9Zy5kZXN0cm95O2lmKG51bGwhPT1kJiZCaChkLGcuZGVwcykpe1JoKGIsYyxmLGQpO3JldHVybn19Ui5mbGFnc3w9YTtlLm1lbW9pemVkU3RhdGU9UmgoMXxiLGMsZixkKX1mdW5jdGlvbiBXaChhLGIpe3JldHVybiBVaCg1MTYsNCxhLGIpfWZ1bmN0aW9uIFhoKGEsYil7cmV0dXJuIFZoKDUxNiw0LGEsYil9ZnVuY3Rpb24gWWgoYSxiKXtyZXR1cm4gVmgoNCwyLGEsYil9ZnVuY3Rpb24gWmgoYSxiKXtpZihcImZ1bmN0aW9uXCI9PT10eXBlb2YgYilyZXR1cm4gYT1hKCksYihhKSxmdW5jdGlvbigpe2IobnVsbCl9O2lmKG51bGwhPT1iJiZ2b2lkIDAhPT1iKXJldHVybiBhPWEoKSxiLmN1cnJlbnQ9YSxmdW5jdGlvbigpe2IuY3VycmVudD1udWxsfX1cbmZ1bmN0aW9uICRoKGEsYixjKXtjPW51bGwhPT1jJiZ2b2lkIDAhPT1jP2MuY29uY2F0KFthXSk6bnVsbDtyZXR1cm4gVmgoNCwyLFpoLmJpbmQobnVsbCxiLGEpLGMpfWZ1bmN0aW9uIGFpKCl7fWZ1bmN0aW9uIGJpKGEsYil7dmFyIGM9SWgoKTtiPXZvaWQgMD09PWI/bnVsbDpiO3ZhciBkPWMubWVtb2l6ZWRTdGF0ZTtpZihudWxsIT09ZCYmbnVsbCE9PWImJkJoKGIsZFsxXSkpcmV0dXJuIGRbMF07Yy5tZW1vaXplZFN0YXRlPVthLGJdO3JldHVybiBhfWZ1bmN0aW9uIGNpKGEsYil7dmFyIGM9SWgoKTtiPXZvaWQgMD09PWI/bnVsbDpiO3ZhciBkPWMubWVtb2l6ZWRTdGF0ZTtpZihudWxsIT09ZCYmbnVsbCE9PWImJkJoKGIsZFsxXSkpcmV0dXJuIGRbMF07YT1hKCk7Yy5tZW1vaXplZFN0YXRlPVthLGJdO3JldHVybiBhfVxuZnVuY3Rpb24gZGkoYSxiKXt2YXIgYz1lZygpO2dnKDk4PmM/OTg6YyxmdW5jdGlvbigpe2EoITApfSk7Z2coOTc8Yz85NzpjLGZ1bmN0aW9uKCl7dmFyIGM9d2gudHJhbnNpdGlvbjt3aC50cmFuc2l0aW9uPTE7dHJ5e2EoITEpLGIoKX1maW5hbGx5e3doLnRyYW5zaXRpb249Y319KX1cbmZ1bmN0aW9uIE9oKGEsYixjKXt2YXIgZD1IZygpLGU9SWcoYSksZj17bGFuZTplLGFjdGlvbjpjLGVhZ2VyUmVkdWNlcjpudWxsLGVhZ2VyU3RhdGU6bnVsbCxuZXh0Om51bGx9LGc9Yi5wZW5kaW5nO251bGw9PT1nP2YubmV4dD1mOihmLm5leHQ9Zy5uZXh0LGcubmV4dD1mKTtiLnBlbmRpbmc9ZjtnPWEuYWx0ZXJuYXRlO2lmKGE9PT1SfHxudWxsIT09ZyYmZz09PVIpemg9eWg9ITA7ZWxzZXtpZigwPT09YS5sYW5lcyYmKG51bGw9PT1nfHwwPT09Zy5sYW5lcykmJihnPWIubGFzdFJlbmRlcmVkUmVkdWNlcixudWxsIT09ZykpdHJ5e3ZhciBoPWIubGFzdFJlbmRlcmVkU3RhdGUsaz1nKGgsYyk7Zi5lYWdlclJlZHVjZXI9ZztmLmVhZ2VyU3RhdGU9aztpZihIZShrLGgpKXJldHVybn1jYXRjaChsKXt9ZmluYWxseXt9SmcoYSxlLGQpfX1cbnZhciBHaD17cmVhZENvbnRleHQ6dmcsdXNlQ2FsbGJhY2s6QWgsdXNlQ29udGV4dDpBaCx1c2VFZmZlY3Q6QWgsdXNlSW1wZXJhdGl2ZUhhbmRsZTpBaCx1c2VMYXlvdXRFZmZlY3Q6QWgsdXNlTWVtbzpBaCx1c2VSZWR1Y2VyOkFoLHVzZVJlZjpBaCx1c2VTdGF0ZTpBaCx1c2VEZWJ1Z1ZhbHVlOkFoLHVzZURlZmVycmVkVmFsdWU6QWgsdXNlVHJhbnNpdGlvbjpBaCx1c2VNdXRhYmxlU291cmNlOkFoLHVzZU9wYXF1ZUlkZW50aWZpZXI6QWgsdW5zdGFibGVfaXNOZXdSZWNvbmNpbGVyOiExfSxEaD17cmVhZENvbnRleHQ6dmcsdXNlQ2FsbGJhY2s6ZnVuY3Rpb24oYSxiKXtIaCgpLm1lbW9pemVkU3RhdGU9W2Esdm9pZCAwPT09Yj9udWxsOmJdO3JldHVybiBhfSx1c2VDb250ZXh0OnZnLHVzZUVmZmVjdDpXaCx1c2VJbXBlcmF0aXZlSGFuZGxlOmZ1bmN0aW9uKGEsYixjKXtjPW51bGwhPT1jJiZ2b2lkIDAhPT1jP2MuY29uY2F0KFthXSk6bnVsbDtyZXR1cm4gVWgoNCwyLFpoLmJpbmQobnVsbCxcbmIsYSksYyl9LHVzZUxheW91dEVmZmVjdDpmdW5jdGlvbihhLGIpe3JldHVybiBVaCg0LDIsYSxiKX0sdXNlTWVtbzpmdW5jdGlvbihhLGIpe3ZhciBjPUhoKCk7Yj12b2lkIDA9PT1iP251bGw6YjthPWEoKTtjLm1lbW9pemVkU3RhdGU9W2EsYl07cmV0dXJuIGF9LHVzZVJlZHVjZXI6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPUhoKCk7Yj12b2lkIDAhPT1jP2MoYik6YjtkLm1lbW9pemVkU3RhdGU9ZC5iYXNlU3RhdGU9YjthPWQucXVldWU9e3BlbmRpbmc6bnVsbCxkaXNwYXRjaDpudWxsLGxhc3RSZW5kZXJlZFJlZHVjZXI6YSxsYXN0UmVuZGVyZWRTdGF0ZTpifTthPWEuZGlzcGF0Y2g9T2guYmluZChudWxsLFIsYSk7cmV0dXJuW2QubWVtb2l6ZWRTdGF0ZSxhXX0sdXNlUmVmOlNoLHVzZVN0YXRlOlFoLHVzZURlYnVnVmFsdWU6YWksdXNlRGVmZXJyZWRWYWx1ZTpmdW5jdGlvbihhKXt2YXIgYj1RaChhKSxjPWJbMF0sZD1iWzFdO1doKGZ1bmN0aW9uKCl7dmFyIGI9d2gudHJhbnNpdGlvbjtcbndoLnRyYW5zaXRpb249MTt0cnl7ZChhKX1maW5hbGx5e3doLnRyYW5zaXRpb249Yn19LFthXSk7cmV0dXJuIGN9LHVzZVRyYW5zaXRpb246ZnVuY3Rpb24oKXt2YXIgYT1RaCghMSksYj1hWzBdO2E9ZGkuYmluZChudWxsLGFbMV0pO1NoKGEpO3JldHVyblthLGJdfSx1c2VNdXRhYmxlU291cmNlOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1IaCgpO2QubWVtb2l6ZWRTdGF0ZT17cmVmczp7Z2V0U25hcHNob3Q6YixzZXRTbmFwc2hvdDpudWxsfSxzb3VyY2U6YSxzdWJzY3JpYmU6Y307cmV0dXJuIE5oKGQsYSxiLGMpfSx1c2VPcGFxdWVJZGVudGlmaWVyOmZ1bmN0aW9uKCl7aWYobGgpe3ZhciBhPSExLGI9dWYoZnVuY3Rpb24oKXthfHwoYT0hMCxjKFwicjpcIisodGYrKykudG9TdHJpbmcoMzYpKSk7dGhyb3cgRXJyb3IoeSgzNTUpKTt9KSxjPVFoKGIpWzFdOzA9PT0oUi5tb2RlJjIpJiYoUi5mbGFnc3w9NTE2LFJoKDUsZnVuY3Rpb24oKXtjKFwicjpcIisodGYrKykudG9TdHJpbmcoMzYpKX0sXG52b2lkIDAsbnVsbCkpO3JldHVybiBifWI9XCJyOlwiKyh0ZisrKS50b1N0cmluZygzNik7UWgoYik7cmV0dXJuIGJ9LHVuc3RhYmxlX2lzTmV3UmVjb25jaWxlcjohMX0sRWg9e3JlYWRDb250ZXh0OnZnLHVzZUNhbGxiYWNrOmJpLHVzZUNvbnRleHQ6dmcsdXNlRWZmZWN0OlhoLHVzZUltcGVyYXRpdmVIYW5kbGU6JGgsdXNlTGF5b3V0RWZmZWN0OlloLHVzZU1lbW86Y2ksdXNlUmVkdWNlcjpLaCx1c2VSZWY6VGgsdXNlU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gS2goSmgpfSx1c2VEZWJ1Z1ZhbHVlOmFpLHVzZURlZmVycmVkVmFsdWU6ZnVuY3Rpb24oYSl7dmFyIGI9S2goSmgpLGM9YlswXSxkPWJbMV07WGgoZnVuY3Rpb24oKXt2YXIgYj13aC50cmFuc2l0aW9uO3doLnRyYW5zaXRpb249MTt0cnl7ZChhKX1maW5hbGx5e3doLnRyYW5zaXRpb249Yn19LFthXSk7cmV0dXJuIGN9LHVzZVRyYW5zaXRpb246ZnVuY3Rpb24oKXt2YXIgYT1LaChKaClbMF07cmV0dXJuW1RoKCkuY3VycmVudCxcbmFdfSx1c2VNdXRhYmxlU291cmNlOlBoLHVzZU9wYXF1ZUlkZW50aWZpZXI6ZnVuY3Rpb24oKXtyZXR1cm4gS2goSmgpWzBdfSx1bnN0YWJsZV9pc05ld1JlY29uY2lsZXI6ITF9LEZoPXtyZWFkQ29udGV4dDp2Zyx1c2VDYWxsYmFjazpiaSx1c2VDb250ZXh0OnZnLHVzZUVmZmVjdDpYaCx1c2VJbXBlcmF0aXZlSGFuZGxlOiRoLHVzZUxheW91dEVmZmVjdDpZaCx1c2VNZW1vOmNpLHVzZVJlZHVjZXI6TGgsdXNlUmVmOlRoLHVzZVN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIExoKEpoKX0sdXNlRGVidWdWYWx1ZTphaSx1c2VEZWZlcnJlZFZhbHVlOmZ1bmN0aW9uKGEpe3ZhciBiPUxoKEpoKSxjPWJbMF0sZD1iWzFdO1hoKGZ1bmN0aW9uKCl7dmFyIGI9d2gudHJhbnNpdGlvbjt3aC50cmFuc2l0aW9uPTE7dHJ5e2QoYSl9ZmluYWxseXt3aC50cmFuc2l0aW9uPWJ9fSxbYV0pO3JldHVybiBjfSx1c2VUcmFuc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGE9TGgoSmgpWzBdO3JldHVybltUaCgpLmN1cnJlbnQsXG5hXX0sdXNlTXV0YWJsZVNvdXJjZTpQaCx1c2VPcGFxdWVJZGVudGlmaWVyOmZ1bmN0aW9uKCl7cmV0dXJuIExoKEpoKVswXX0sdW5zdGFibGVfaXNOZXdSZWNvbmNpbGVyOiExfSxlaT1yYS5SZWFjdEN1cnJlbnRPd25lcix1Zz0hMTtmdW5jdGlvbiBmaShhLGIsYyxkKXtiLmNoaWxkPW51bGw9PT1hP1pnKGIsbnVsbCxjLGQpOllnKGIsYS5jaGlsZCxjLGQpfWZ1bmN0aW9uIGdpKGEsYixjLGQsZSl7Yz1jLnJlbmRlcjt2YXIgZj1iLnJlZjt0ZyhiLGUpO2Q9Q2goYSxiLGMsZCxmLGUpO2lmKG51bGwhPT1hJiYhdWcpcmV0dXJuIGIudXBkYXRlUXVldWU9YS51cGRhdGVRdWV1ZSxiLmZsYWdzJj0tNTE3LGEubGFuZXMmPX5lLGhpKGEsYixlKTtiLmZsYWdzfD0xO2ZpKGEsYixkLGUpO3JldHVybiBiLmNoaWxkfVxuZnVuY3Rpb24gaWkoYSxiLGMsZCxlLGYpe2lmKG51bGw9PT1hKXt2YXIgZz1jLnR5cGU7aWYoXCJmdW5jdGlvblwiPT09dHlwZW9mIGcmJiFqaShnKSYmdm9pZCAwPT09Zy5kZWZhdWx0UHJvcHMmJm51bGw9PT1jLmNvbXBhcmUmJnZvaWQgMD09PWMuZGVmYXVsdFByb3BzKXJldHVybiBiLnRhZz0xNSxiLnR5cGU9ZyxraShhLGIsZyxkLGUsZik7YT1WZyhjLnR5cGUsbnVsbCxkLGIsYi5tb2RlLGYpO2EucmVmPWIucmVmO2EucmV0dXJuPWI7cmV0dXJuIGIuY2hpbGQ9YX1nPWEuY2hpbGQ7aWYoMD09PShlJmYpJiYoZT1nLm1lbW9pemVkUHJvcHMsYz1jLmNvbXBhcmUsYz1udWxsIT09Yz9jOkplLGMoZSxkKSYmYS5yZWY9PT1iLnJlZikpcmV0dXJuIGhpKGEsYixmKTtiLmZsYWdzfD0xO2E9VGcoZyxkKTthLnJlZj1iLnJlZjthLnJldHVybj1iO3JldHVybiBiLmNoaWxkPWF9XG5mdW5jdGlvbiBraShhLGIsYyxkLGUsZil7aWYobnVsbCE9PWEmJkplKGEubWVtb2l6ZWRQcm9wcyxkKSYmYS5yZWY9PT1iLnJlZilpZih1Zz0hMSwwIT09KGYmZSkpMCE9PShhLmZsYWdzJjE2Mzg0KSYmKHVnPSEwKTtlbHNlIHJldHVybiBiLmxhbmVzPWEubGFuZXMsaGkoYSxiLGYpO3JldHVybiBsaShhLGIsYyxkLGYpfVxuZnVuY3Rpb24gbWkoYSxiLGMpe3ZhciBkPWIucGVuZGluZ1Byb3BzLGU9ZC5jaGlsZHJlbixmPW51bGwhPT1hP2EubWVtb2l6ZWRTdGF0ZTpudWxsO2lmKFwiaGlkZGVuXCI9PT1kLm1vZGV8fFwidW5zdGFibGUtZGVmZXItd2l0aG91dC1oaWRpbmdcIj09PWQubW9kZSlpZigwPT09KGIubW9kZSY0KSliLm1lbW9pemVkU3RhdGU9e2Jhc2VMYW5lczowfSxuaShiLGMpO2Vsc2UgaWYoMCE9PShjJjEwNzM3NDE4MjQpKWIubWVtb2l6ZWRTdGF0ZT17YmFzZUxhbmVzOjB9LG5pKGIsbnVsbCE9PWY/Zi5iYXNlTGFuZXM6Yyk7ZWxzZSByZXR1cm4gYT1udWxsIT09Zj9mLmJhc2VMYW5lc3xjOmMsYi5sYW5lcz1iLmNoaWxkTGFuZXM9MTA3Mzc0MTgyNCxiLm1lbW9pemVkU3RhdGU9e2Jhc2VMYW5lczphfSxuaShiLGEpLG51bGw7ZWxzZSBudWxsIT09Zj8oZD1mLmJhc2VMYW5lc3xjLGIubWVtb2l6ZWRTdGF0ZT1udWxsKTpkPWMsbmkoYixkKTtmaShhLGIsZSxjKTtyZXR1cm4gYi5jaGlsZH1cbmZ1bmN0aW9uIG9pKGEsYil7dmFyIGM9Yi5yZWY7aWYobnVsbD09PWEmJm51bGwhPT1jfHxudWxsIT09YSYmYS5yZWYhPT1jKWIuZmxhZ3N8PTEyOH1mdW5jdGlvbiBsaShhLGIsYyxkLGUpe3ZhciBmPUZmKGMpP0RmOk0uY3VycmVudDtmPUVmKGIsZik7dGcoYixlKTtjPUNoKGEsYixjLGQsZixlKTtpZihudWxsIT09YSYmIXVnKXJldHVybiBiLnVwZGF0ZVF1ZXVlPWEudXBkYXRlUXVldWUsYi5mbGFncyY9LTUxNyxhLmxhbmVzJj1+ZSxoaShhLGIsZSk7Yi5mbGFnc3w9MTtmaShhLGIsYyxlKTtyZXR1cm4gYi5jaGlsZH1cbmZ1bmN0aW9uIHBpKGEsYixjLGQsZSl7aWYoRmYoYykpe3ZhciBmPSEwO0pmKGIpfWVsc2UgZj0hMTt0ZyhiLGUpO2lmKG51bGw9PT1iLnN0YXRlTm9kZSludWxsIT09YSYmKGEuYWx0ZXJuYXRlPW51bGwsYi5hbHRlcm5hdGU9bnVsbCxiLmZsYWdzfD0yKSxNZyhiLGMsZCksT2coYixjLGQsZSksZD0hMDtlbHNlIGlmKG51bGw9PT1hKXt2YXIgZz1iLnN0YXRlTm9kZSxoPWIubWVtb2l6ZWRQcm9wcztnLnByb3BzPWg7dmFyIGs9Zy5jb250ZXh0LGw9Yy5jb250ZXh0VHlwZTtcIm9iamVjdFwiPT09dHlwZW9mIGwmJm51bGwhPT1sP2w9dmcobCk6KGw9RmYoYyk/RGY6TS5jdXJyZW50LGw9RWYoYixsKSk7dmFyIG49Yy5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMsQT1cImZ1bmN0aW9uXCI9PT10eXBlb2Ygbnx8XCJmdW5jdGlvblwiPT09dHlwZW9mIGcuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGU7QXx8XCJmdW5jdGlvblwiIT09dHlwZW9mIGcuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMmJlxuXCJmdW5jdGlvblwiIT09dHlwZW9mIGcuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc3x8KGghPT1kfHxrIT09bCkmJk5nKGIsZyxkLGwpO3dnPSExO3ZhciBwPWIubWVtb2l6ZWRTdGF0ZTtnLnN0YXRlPXA7Q2coYixkLGcsZSk7az1iLm1lbW9pemVkU3RhdGU7aCE9PWR8fHAhPT1rfHxOLmN1cnJlbnR8fHdnPyhcImZ1bmN0aW9uXCI9PT10eXBlb2YgbiYmKEdnKGIsYyxuLGQpLGs9Yi5tZW1vaXplZFN0YXRlKSwoaD13Z3x8TGcoYixjLGgsZCxwLGssbCkpPyhBfHxcImZ1bmN0aW9uXCIhPT10eXBlb2YgZy5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50JiZcImZ1bmN0aW9uXCIhPT10eXBlb2YgZy5jb21wb25lbnRXaWxsTW91bnR8fChcImZ1bmN0aW9uXCI9PT10eXBlb2YgZy5jb21wb25lbnRXaWxsTW91bnQmJmcuY29tcG9uZW50V2lsbE1vdW50KCksXCJmdW5jdGlvblwiPT09dHlwZW9mIGcuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCYmZy5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50KCkpLFwiZnVuY3Rpb25cIj09PVxudHlwZW9mIGcuY29tcG9uZW50RGlkTW91bnQmJihiLmZsYWdzfD00KSk6KFwiZnVuY3Rpb25cIj09PXR5cGVvZiBnLmNvbXBvbmVudERpZE1vdW50JiYoYi5mbGFnc3w9NCksYi5tZW1vaXplZFByb3BzPWQsYi5tZW1vaXplZFN0YXRlPWspLGcucHJvcHM9ZCxnLnN0YXRlPWssZy5jb250ZXh0PWwsZD1oKTooXCJmdW5jdGlvblwiPT09dHlwZW9mIGcuY29tcG9uZW50RGlkTW91bnQmJihiLmZsYWdzfD00KSxkPSExKX1lbHNle2c9Yi5zdGF0ZU5vZGU7eWcoYSxiKTtoPWIubWVtb2l6ZWRQcm9wcztsPWIudHlwZT09PWIuZWxlbWVudFR5cGU/aDpsZyhiLnR5cGUsaCk7Zy5wcm9wcz1sO0E9Yi5wZW5kaW5nUHJvcHM7cD1nLmNvbnRleHQ7az1jLmNvbnRleHRUeXBlO1wib2JqZWN0XCI9PT10eXBlb2YgayYmbnVsbCE9PWs/az12ZyhrKTooaz1GZihjKT9EZjpNLmN1cnJlbnQsaz1FZihiLGspKTt2YXIgQz1jLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wczsobj1cImZ1bmN0aW9uXCI9PT10eXBlb2YgQ3x8XG5cImZ1bmN0aW9uXCI9PT10eXBlb2YgZy5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSl8fFwiZnVuY3Rpb25cIiE9PXR5cGVvZiBnLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJiZcImZ1bmN0aW9uXCIhPT10eXBlb2YgZy5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzfHwoaCE9PUF8fHAhPT1rKSYmTmcoYixnLGQsayk7d2c9ITE7cD1iLm1lbW9pemVkU3RhdGU7Zy5zdGF0ZT1wO0NnKGIsZCxnLGUpO3ZhciB4PWIubWVtb2l6ZWRTdGF0ZTtoIT09QXx8cCE9PXh8fE4uY3VycmVudHx8d2c/KFwiZnVuY3Rpb25cIj09PXR5cGVvZiBDJiYoR2coYixjLEMsZCkseD1iLm1lbW9pemVkU3RhdGUpLChsPXdnfHxMZyhiLGMsbCxkLHAseCxrKSk/KG58fFwiZnVuY3Rpb25cIiE9PXR5cGVvZiBnLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlJiZcImZ1bmN0aW9uXCIhPT10eXBlb2YgZy5jb21wb25lbnRXaWxsVXBkYXRlfHwoXCJmdW5jdGlvblwiPT09dHlwZW9mIGcuY29tcG9uZW50V2lsbFVwZGF0ZSYmZy5jb21wb25lbnRXaWxsVXBkYXRlKGQsXG54LGspLFwiZnVuY3Rpb25cIj09PXR5cGVvZiBnLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlJiZnLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlKGQseCxrKSksXCJmdW5jdGlvblwiPT09dHlwZW9mIGcuY29tcG9uZW50RGlkVXBkYXRlJiYoYi5mbGFnc3w9NCksXCJmdW5jdGlvblwiPT09dHlwZW9mIGcuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUmJihiLmZsYWdzfD0yNTYpKTooXCJmdW5jdGlvblwiIT09dHlwZW9mIGcuY29tcG9uZW50RGlkVXBkYXRlfHxoPT09YS5tZW1vaXplZFByb3BzJiZwPT09YS5tZW1vaXplZFN0YXRlfHwoYi5mbGFnc3w9NCksXCJmdW5jdGlvblwiIT09dHlwZW9mIGcuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGV8fGg9PT1hLm1lbW9pemVkUHJvcHMmJnA9PT1hLm1lbW9pemVkU3RhdGV8fChiLmZsYWdzfD0yNTYpLGIubWVtb2l6ZWRQcm9wcz1kLGIubWVtb2l6ZWRTdGF0ZT14KSxnLnByb3BzPWQsZy5zdGF0ZT14LGcuY29udGV4dD1rLGQ9bCk6KFwiZnVuY3Rpb25cIiE9PXR5cGVvZiBnLmNvbXBvbmVudERpZFVwZGF0ZXx8XG5oPT09YS5tZW1vaXplZFByb3BzJiZwPT09YS5tZW1vaXplZFN0YXRlfHwoYi5mbGFnc3w9NCksXCJmdW5jdGlvblwiIT09dHlwZW9mIGcuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGV8fGg9PT1hLm1lbW9pemVkUHJvcHMmJnA9PT1hLm1lbW9pemVkU3RhdGV8fChiLmZsYWdzfD0yNTYpLGQ9ITEpfXJldHVybiBxaShhLGIsYyxkLGYsZSl9XG5mdW5jdGlvbiBxaShhLGIsYyxkLGUsZil7b2koYSxiKTt2YXIgZz0wIT09KGIuZmxhZ3MmNjQpO2lmKCFkJiYhZylyZXR1cm4gZSYmS2YoYixjLCExKSxoaShhLGIsZik7ZD1iLnN0YXRlTm9kZTtlaS5jdXJyZW50PWI7dmFyIGg9ZyYmXCJmdW5jdGlvblwiIT09dHlwZW9mIGMuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yP251bGw6ZC5yZW5kZXIoKTtiLmZsYWdzfD0xO251bGwhPT1hJiZnPyhiLmNoaWxkPVlnKGIsYS5jaGlsZCxudWxsLGYpLGIuY2hpbGQ9WWcoYixudWxsLGgsZikpOmZpKGEsYixoLGYpO2IubWVtb2l6ZWRTdGF0ZT1kLnN0YXRlO2UmJktmKGIsYywhMCk7cmV0dXJuIGIuY2hpbGR9ZnVuY3Rpb24gcmkoYSl7dmFyIGI9YS5zdGF0ZU5vZGU7Yi5wZW5kaW5nQ29udGV4dD9IZihhLGIucGVuZGluZ0NvbnRleHQsYi5wZW5kaW5nQ29udGV4dCE9PWIuY29udGV4dCk6Yi5jb250ZXh0JiZIZihhLGIuY29udGV4dCwhMSk7ZWgoYSxiLmNvbnRhaW5lckluZm8pfVxudmFyIHNpPXtkZWh5ZHJhdGVkOm51bGwscmV0cnlMYW5lOjB9O1xuZnVuY3Rpb24gdGkoYSxiLGMpe3ZhciBkPWIucGVuZGluZ1Byb3BzLGU9UC5jdXJyZW50LGY9ITEsZzsoZz0wIT09KGIuZmxhZ3MmNjQpKXx8KGc9bnVsbCE9PWEmJm51bGw9PT1hLm1lbW9pemVkU3RhdGU/ITE6MCE9PShlJjIpKTtnPyhmPSEwLGIuZmxhZ3MmPS02NSk6bnVsbCE9PWEmJm51bGw9PT1hLm1lbW9pemVkU3RhdGV8fHZvaWQgMD09PWQuZmFsbGJhY2t8fCEwPT09ZC51bnN0YWJsZV9hdm9pZFRoaXNGYWxsYmFja3x8KGV8PTEpO0koUCxlJjEpO2lmKG51bGw9PT1hKXt2b2lkIDAhPT1kLmZhbGxiYWNrJiZwaChiKTthPWQuY2hpbGRyZW47ZT1kLmZhbGxiYWNrO2lmKGYpcmV0dXJuIGE9dWkoYixhLGUsYyksYi5jaGlsZC5tZW1vaXplZFN0YXRlPXtiYXNlTGFuZXM6Y30sYi5tZW1vaXplZFN0YXRlPXNpLGE7aWYoXCJudW1iZXJcIj09PXR5cGVvZiBkLnVuc3RhYmxlX2V4cGVjdGVkTG9hZFRpbWUpcmV0dXJuIGE9dWkoYixhLGUsYyksYi5jaGlsZC5tZW1vaXplZFN0YXRlPXtiYXNlTGFuZXM6Y30sXG5iLm1lbW9pemVkU3RhdGU9c2ksYi5sYW5lcz0zMzU1NDQzMixhO2M9dmkoe21vZGU6XCJ2aXNpYmxlXCIsY2hpbGRyZW46YX0sYi5tb2RlLGMsbnVsbCk7Yy5yZXR1cm49YjtyZXR1cm4gYi5jaGlsZD1jfWlmKG51bGwhPT1hLm1lbW9pemVkU3RhdGUpe2lmKGYpcmV0dXJuIGQ9d2koYSxiLGQuY2hpbGRyZW4sZC5mYWxsYmFjayxjKSxmPWIuY2hpbGQsZT1hLmNoaWxkLm1lbW9pemVkU3RhdGUsZi5tZW1vaXplZFN0YXRlPW51bGw9PT1lP3tiYXNlTGFuZXM6Y306e2Jhc2VMYW5lczplLmJhc2VMYW5lc3xjfSxmLmNoaWxkTGFuZXM9YS5jaGlsZExhbmVzJn5jLGIubWVtb2l6ZWRTdGF0ZT1zaSxkO2M9eGkoYSxiLGQuY2hpbGRyZW4sYyk7Yi5tZW1vaXplZFN0YXRlPW51bGw7cmV0dXJuIGN9aWYoZilyZXR1cm4gZD13aShhLGIsZC5jaGlsZHJlbixkLmZhbGxiYWNrLGMpLGY9Yi5jaGlsZCxlPWEuY2hpbGQubWVtb2l6ZWRTdGF0ZSxmLm1lbW9pemVkU3RhdGU9bnVsbD09PWU/e2Jhc2VMYW5lczpjfTpcbntiYXNlTGFuZXM6ZS5iYXNlTGFuZXN8Y30sZi5jaGlsZExhbmVzPWEuY2hpbGRMYW5lcyZ+YyxiLm1lbW9pemVkU3RhdGU9c2ksZDtjPXhpKGEsYixkLmNoaWxkcmVuLGMpO2IubWVtb2l6ZWRTdGF0ZT1udWxsO3JldHVybiBjfWZ1bmN0aW9uIHVpKGEsYixjLGQpe3ZhciBlPWEubW9kZSxmPWEuY2hpbGQ7Yj17bW9kZTpcImhpZGRlblwiLGNoaWxkcmVuOmJ9OzA9PT0oZSYyKSYmbnVsbCE9PWY/KGYuY2hpbGRMYW5lcz0wLGYucGVuZGluZ1Byb3BzPWIpOmY9dmkoYixlLDAsbnVsbCk7Yz1YZyhjLGUsZCxudWxsKTtmLnJldHVybj1hO2MucmV0dXJuPWE7Zi5zaWJsaW5nPWM7YS5jaGlsZD1mO3JldHVybiBjfVxuZnVuY3Rpb24geGkoYSxiLGMsZCl7dmFyIGU9YS5jaGlsZDthPWUuc2libGluZztjPVRnKGUse21vZGU6XCJ2aXNpYmxlXCIsY2hpbGRyZW46Y30pOzA9PT0oYi5tb2RlJjIpJiYoYy5sYW5lcz1kKTtjLnJldHVybj1iO2Muc2libGluZz1udWxsO251bGwhPT1hJiYoYS5uZXh0RWZmZWN0PW51bGwsYS5mbGFncz04LGIuZmlyc3RFZmZlY3Q9Yi5sYXN0RWZmZWN0PWEpO3JldHVybiBiLmNoaWxkPWN9XG5mdW5jdGlvbiB3aShhLGIsYyxkLGUpe3ZhciBmPWIubW9kZSxnPWEuY2hpbGQ7YT1nLnNpYmxpbmc7dmFyIGg9e21vZGU6XCJoaWRkZW5cIixjaGlsZHJlbjpjfTswPT09KGYmMikmJmIuY2hpbGQhPT1nPyhjPWIuY2hpbGQsYy5jaGlsZExhbmVzPTAsYy5wZW5kaW5nUHJvcHM9aCxnPWMubGFzdEVmZmVjdCxudWxsIT09Zz8oYi5maXJzdEVmZmVjdD1jLmZpcnN0RWZmZWN0LGIubGFzdEVmZmVjdD1nLGcubmV4dEVmZmVjdD1udWxsKTpiLmZpcnN0RWZmZWN0PWIubGFzdEVmZmVjdD1udWxsKTpjPVRnKGcsaCk7bnVsbCE9PWE/ZD1UZyhhLGQpOihkPVhnKGQsZixlLG51bGwpLGQuZmxhZ3N8PTIpO2QucmV0dXJuPWI7Yy5yZXR1cm49YjtjLnNpYmxpbmc9ZDtiLmNoaWxkPWM7cmV0dXJuIGR9ZnVuY3Rpb24geWkoYSxiKXthLmxhbmVzfD1iO3ZhciBjPWEuYWx0ZXJuYXRlO251bGwhPT1jJiYoYy5sYW5lc3w9Yik7c2coYS5yZXR1cm4sYil9XG5mdW5jdGlvbiB6aShhLGIsYyxkLGUsZil7dmFyIGc9YS5tZW1vaXplZFN0YXRlO251bGw9PT1nP2EubWVtb2l6ZWRTdGF0ZT17aXNCYWNrd2FyZHM6YixyZW5kZXJpbmc6bnVsbCxyZW5kZXJpbmdTdGFydFRpbWU6MCxsYXN0OmQsdGFpbDpjLHRhaWxNb2RlOmUsbGFzdEVmZmVjdDpmfTooZy5pc0JhY2t3YXJkcz1iLGcucmVuZGVyaW5nPW51bGwsZy5yZW5kZXJpbmdTdGFydFRpbWU9MCxnLmxhc3Q9ZCxnLnRhaWw9YyxnLnRhaWxNb2RlPWUsZy5sYXN0RWZmZWN0PWYpfVxuZnVuY3Rpb24gQWkoYSxiLGMpe3ZhciBkPWIucGVuZGluZ1Byb3BzLGU9ZC5yZXZlYWxPcmRlcixmPWQudGFpbDtmaShhLGIsZC5jaGlsZHJlbixjKTtkPVAuY3VycmVudDtpZigwIT09KGQmMikpZD1kJjF8MixiLmZsYWdzfD02NDtlbHNle2lmKG51bGwhPT1hJiYwIT09KGEuZmxhZ3MmNjQpKWE6Zm9yKGE9Yi5jaGlsZDtudWxsIT09YTspe2lmKDEzPT09YS50YWcpbnVsbCE9PWEubWVtb2l6ZWRTdGF0ZSYmeWkoYSxjKTtlbHNlIGlmKDE5PT09YS50YWcpeWkoYSxjKTtlbHNlIGlmKG51bGwhPT1hLmNoaWxkKXthLmNoaWxkLnJldHVybj1hO2E9YS5jaGlsZDtjb250aW51ZX1pZihhPT09YilicmVhayBhO2Zvcig7bnVsbD09PWEuc2libGluZzspe2lmKG51bGw9PT1hLnJldHVybnx8YS5yZXR1cm49PT1iKWJyZWFrIGE7YT1hLnJldHVybn1hLnNpYmxpbmcucmV0dXJuPWEucmV0dXJuO2E9YS5zaWJsaW5nfWQmPTF9SShQLGQpO2lmKDA9PT0oYi5tb2RlJjIpKWIubWVtb2l6ZWRTdGF0ZT1cbm51bGw7ZWxzZSBzd2l0Y2goZSl7Y2FzZSBcImZvcndhcmRzXCI6Yz1iLmNoaWxkO2ZvcihlPW51bGw7bnVsbCE9PWM7KWE9Yy5hbHRlcm5hdGUsbnVsbCE9PWEmJm51bGw9PT1paChhKSYmKGU9YyksYz1jLnNpYmxpbmc7Yz1lO251bGw9PT1jPyhlPWIuY2hpbGQsYi5jaGlsZD1udWxsKTooZT1jLnNpYmxpbmcsYy5zaWJsaW5nPW51bGwpO3ppKGIsITEsZSxjLGYsYi5sYXN0RWZmZWN0KTticmVhaztjYXNlIFwiYmFja3dhcmRzXCI6Yz1udWxsO2U9Yi5jaGlsZDtmb3IoYi5jaGlsZD1udWxsO251bGwhPT1lOyl7YT1lLmFsdGVybmF0ZTtpZihudWxsIT09YSYmbnVsbD09PWloKGEpKXtiLmNoaWxkPWU7YnJlYWt9YT1lLnNpYmxpbmc7ZS5zaWJsaW5nPWM7Yz1lO2U9YX16aShiLCEwLGMsbnVsbCxmLGIubGFzdEVmZmVjdCk7YnJlYWs7Y2FzZSBcInRvZ2V0aGVyXCI6emkoYiwhMSxudWxsLG51bGwsdm9pZCAwLGIubGFzdEVmZmVjdCk7YnJlYWs7ZGVmYXVsdDpiLm1lbW9pemVkU3RhdGU9bnVsbH1yZXR1cm4gYi5jaGlsZH1cbmZ1bmN0aW9uIGhpKGEsYixjKXtudWxsIT09YSYmKGIuZGVwZW5kZW5jaWVzPWEuZGVwZW5kZW5jaWVzKTtEZ3w9Yi5sYW5lcztpZigwIT09KGMmYi5jaGlsZExhbmVzKSl7aWYobnVsbCE9PWEmJmIuY2hpbGQhPT1hLmNoaWxkKXRocm93IEVycm9yKHkoMTUzKSk7aWYobnVsbCE9PWIuY2hpbGQpe2E9Yi5jaGlsZDtjPVRnKGEsYS5wZW5kaW5nUHJvcHMpO2IuY2hpbGQ9Yztmb3IoYy5yZXR1cm49YjtudWxsIT09YS5zaWJsaW5nOylhPWEuc2libGluZyxjPWMuc2libGluZz1UZyhhLGEucGVuZGluZ1Byb3BzKSxjLnJldHVybj1iO2Muc2libGluZz1udWxsfXJldHVybiBiLmNoaWxkfXJldHVybiBudWxsfXZhciBCaSxDaSxEaSxFaTtcbkJpPWZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPWIuY2hpbGQ7bnVsbCE9PWM7KXtpZig1PT09Yy50YWd8fDY9PT1jLnRhZylhLmFwcGVuZENoaWxkKGMuc3RhdGVOb2RlKTtlbHNlIGlmKDQhPT1jLnRhZyYmbnVsbCE9PWMuY2hpbGQpe2MuY2hpbGQucmV0dXJuPWM7Yz1jLmNoaWxkO2NvbnRpbnVlfWlmKGM9PT1iKWJyZWFrO2Zvcig7bnVsbD09PWMuc2libGluZzspe2lmKG51bGw9PT1jLnJldHVybnx8Yy5yZXR1cm49PT1iKXJldHVybjtjPWMucmV0dXJufWMuc2libGluZy5yZXR1cm49Yy5yZXR1cm47Yz1jLnNpYmxpbmd9fTtDaT1mdW5jdGlvbigpe307XG5EaT1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1hLm1lbW9pemVkUHJvcHM7aWYoZSE9PWQpe2E9Yi5zdGF0ZU5vZGU7ZGgoYWguY3VycmVudCk7dmFyIGY9bnVsbDtzd2l0Y2goYyl7Y2FzZSBcImlucHV0XCI6ZT1ZYShhLGUpO2Q9WWEoYSxkKTtmPVtdO2JyZWFrO2Nhc2UgXCJvcHRpb25cIjplPWViKGEsZSk7ZD1lYihhLGQpO2Y9W107YnJlYWs7Y2FzZSBcInNlbGVjdFwiOmU9bSh7fSxlLHt2YWx1ZTp2b2lkIDB9KTtkPW0oe30sZCx7dmFsdWU6dm9pZCAwfSk7Zj1bXTticmVhaztjYXNlIFwidGV4dGFyZWFcIjplPWdiKGEsZSk7ZD1nYihhLGQpO2Y9W107YnJlYWs7ZGVmYXVsdDpcImZ1bmN0aW9uXCIhPT10eXBlb2YgZS5vbkNsaWNrJiZcImZ1bmN0aW9uXCI9PT10eXBlb2YgZC5vbkNsaWNrJiYoYS5vbmNsaWNrPWpmKX12YihjLGQpO3ZhciBnO2M9bnVsbDtmb3IobCBpbiBlKWlmKCFkLmhhc093blByb3BlcnR5KGwpJiZlLmhhc093blByb3BlcnR5KGwpJiZudWxsIT1lW2xdKWlmKFwic3R5bGVcIj09PVxubCl7dmFyIGg9ZVtsXTtmb3IoZyBpbiBoKWguaGFzT3duUHJvcGVydHkoZykmJihjfHwoYz17fSksY1tnXT1cIlwiKX1lbHNlXCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiIT09bCYmXCJjaGlsZHJlblwiIT09bCYmXCJzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmdcIiE9PWwmJlwic3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nXCIhPT1sJiZcImF1dG9Gb2N1c1wiIT09bCYmKGNhLmhhc093blByb3BlcnR5KGwpP2Z8fChmPVtdKTooZj1mfHxbXSkucHVzaChsLG51bGwpKTtmb3IobCBpbiBkKXt2YXIgaz1kW2xdO2g9bnVsbCE9ZT9lW2xdOnZvaWQgMDtpZihkLmhhc093blByb3BlcnR5KGwpJiZrIT09aCYmKG51bGwhPWt8fG51bGwhPWgpKWlmKFwic3R5bGVcIj09PWwpaWYoaCl7Zm9yKGcgaW4gaCkhaC5oYXNPd25Qcm9wZXJ0eShnKXx8ayYmay5oYXNPd25Qcm9wZXJ0eShnKXx8KGN8fChjPXt9KSxjW2ddPVwiXCIpO2ZvcihnIGluIGspay5oYXNPd25Qcm9wZXJ0eShnKSYmaFtnXSE9PWtbZ10mJihjfHxcbihjPXt9KSxjW2ddPWtbZ10pfWVsc2UgY3x8KGZ8fChmPVtdKSxmLnB1c2gobCxjKSksYz1rO2Vsc2VcImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MXCI9PT1sPyhrPWs/ay5fX2h0bWw6dm9pZCAwLGg9aD9oLl9faHRtbDp2b2lkIDAsbnVsbCE9ayYmaCE9PWsmJihmPWZ8fFtdKS5wdXNoKGwsaykpOlwiY2hpbGRyZW5cIj09PWw/XCJzdHJpbmdcIiE9PXR5cGVvZiBrJiZcIm51bWJlclwiIT09dHlwZW9mIGt8fChmPWZ8fFtdKS5wdXNoKGwsXCJcIitrKTpcInN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZ1wiIT09bCYmXCJzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmdcIiE9PWwmJihjYS5oYXNPd25Qcm9wZXJ0eShsKT8obnVsbCE9ayYmXCJvblNjcm9sbFwiPT09bCYmRyhcInNjcm9sbFwiLGEpLGZ8fGg9PT1rfHwoZj1bXSkpOlwib2JqZWN0XCI9PT10eXBlb2YgayYmbnVsbCE9PWsmJmsuJCR0eXBlb2Y9PT1HYT9rLnRvU3RyaW5nKCk6KGY9Znx8W10pLnB1c2gobCxrKSl9YyYmKGY9Znx8W10pLnB1c2goXCJzdHlsZVwiLFxuYyk7dmFyIGw9ZjtpZihiLnVwZGF0ZVF1ZXVlPWwpYi5mbGFnc3w9NH19O0VpPWZ1bmN0aW9uKGEsYixjLGQpe2MhPT1kJiYoYi5mbGFnc3w9NCl9O2Z1bmN0aW9uIEZpKGEsYil7aWYoIWxoKXN3aXRjaChhLnRhaWxNb2RlKXtjYXNlIFwiaGlkZGVuXCI6Yj1hLnRhaWw7Zm9yKHZhciBjPW51bGw7bnVsbCE9PWI7KW51bGwhPT1iLmFsdGVybmF0ZSYmKGM9YiksYj1iLnNpYmxpbmc7bnVsbD09PWM/YS50YWlsPW51bGw6Yy5zaWJsaW5nPW51bGw7YnJlYWs7Y2FzZSBcImNvbGxhcHNlZFwiOmM9YS50YWlsO2Zvcih2YXIgZD1udWxsO251bGwhPT1jOyludWxsIT09Yy5hbHRlcm5hdGUmJihkPWMpLGM9Yy5zaWJsaW5nO251bGw9PT1kP2J8fG51bGw9PT1hLnRhaWw/YS50YWlsPW51bGw6YS50YWlsLnNpYmxpbmc9bnVsbDpkLnNpYmxpbmc9bnVsbH19XG5mdW5jdGlvbiBHaShhLGIsYyl7dmFyIGQ9Yi5wZW5kaW5nUHJvcHM7c3dpdGNoKGIudGFnKXtjYXNlIDI6Y2FzZSAxNjpjYXNlIDE1OmNhc2UgMDpjYXNlIDExOmNhc2UgNzpjYXNlIDg6Y2FzZSAxMjpjYXNlIDk6Y2FzZSAxNDpyZXR1cm4gbnVsbDtjYXNlIDE6cmV0dXJuIEZmKGIudHlwZSkmJkdmKCksbnVsbDtjYXNlIDM6ZmgoKTtIKE4pO0goTSk7dWgoKTtkPWIuc3RhdGVOb2RlO2QucGVuZGluZ0NvbnRleHQmJihkLmNvbnRleHQ9ZC5wZW5kaW5nQ29udGV4dCxkLnBlbmRpbmdDb250ZXh0PW51bGwpO2lmKG51bGw9PT1hfHxudWxsPT09YS5jaGlsZClyaChiKT9iLmZsYWdzfD00OmQuaHlkcmF0ZXx8KGIuZmxhZ3N8PTI1Nik7Q2koYik7cmV0dXJuIG51bGw7Y2FzZSA1OmhoKGIpO3ZhciBlPWRoKGNoLmN1cnJlbnQpO2M9Yi50eXBlO2lmKG51bGwhPT1hJiZudWxsIT1iLnN0YXRlTm9kZSlEaShhLGIsYyxkLGUpLGEucmVmIT09Yi5yZWYmJihiLmZsYWdzfD0xMjgpO2Vsc2V7aWYoIWQpe2lmKG51bGw9PT1cbmIuc3RhdGVOb2RlKXRocm93IEVycm9yKHkoMTY2KSk7cmV0dXJuIG51bGx9YT1kaChhaC5jdXJyZW50KTtpZihyaChiKSl7ZD1iLnN0YXRlTm9kZTtjPWIudHlwZTt2YXIgZj1iLm1lbW9pemVkUHJvcHM7ZFt3Zl09YjtkW3hmXT1mO3N3aXRjaChjKXtjYXNlIFwiZGlhbG9nXCI6RyhcImNhbmNlbFwiLGQpO0coXCJjbG9zZVwiLGQpO2JyZWFrO2Nhc2UgXCJpZnJhbWVcIjpjYXNlIFwib2JqZWN0XCI6Y2FzZSBcImVtYmVkXCI6RyhcImxvYWRcIixkKTticmVhaztjYXNlIFwidmlkZW9cIjpjYXNlIFwiYXVkaW9cIjpmb3IoYT0wO2E8WGUubGVuZ3RoO2ErKylHKFhlW2FdLGQpO2JyZWFrO2Nhc2UgXCJzb3VyY2VcIjpHKFwiZXJyb3JcIixkKTticmVhaztjYXNlIFwiaW1nXCI6Y2FzZSBcImltYWdlXCI6Y2FzZSBcImxpbmtcIjpHKFwiZXJyb3JcIixkKTtHKFwibG9hZFwiLGQpO2JyZWFrO2Nhc2UgXCJkZXRhaWxzXCI6RyhcInRvZ2dsZVwiLGQpO2JyZWFrO2Nhc2UgXCJpbnB1dFwiOlphKGQsZik7RyhcImludmFsaWRcIixkKTticmVhaztjYXNlIFwic2VsZWN0XCI6ZC5fd3JhcHBlclN0YXRlPVxue3dhc011bHRpcGxlOiEhZi5tdWx0aXBsZX07RyhcImludmFsaWRcIixkKTticmVhaztjYXNlIFwidGV4dGFyZWFcIjpoYihkLGYpLEcoXCJpbnZhbGlkXCIsZCl9dmIoYyxmKTthPW51bGw7Zm9yKHZhciBnIGluIGYpZi5oYXNPd25Qcm9wZXJ0eShnKSYmKGU9ZltnXSxcImNoaWxkcmVuXCI9PT1nP1wic3RyaW5nXCI9PT10eXBlb2YgZT9kLnRleHRDb250ZW50IT09ZSYmKGE9W1wiY2hpbGRyZW5cIixlXSk6XCJudW1iZXJcIj09PXR5cGVvZiBlJiZkLnRleHRDb250ZW50IT09XCJcIitlJiYoYT1bXCJjaGlsZHJlblwiLFwiXCIrZV0pOmNhLmhhc093blByb3BlcnR5KGcpJiZudWxsIT1lJiZcIm9uU2Nyb2xsXCI9PT1nJiZHKFwic2Nyb2xsXCIsZCkpO3N3aXRjaChjKXtjYXNlIFwiaW5wdXRcIjpWYShkKTtjYihkLGYsITApO2JyZWFrO2Nhc2UgXCJ0ZXh0YXJlYVwiOlZhKGQpO2piKGQpO2JyZWFrO2Nhc2UgXCJzZWxlY3RcIjpjYXNlIFwib3B0aW9uXCI6YnJlYWs7ZGVmYXVsdDpcImZ1bmN0aW9uXCI9PT10eXBlb2YgZi5vbkNsaWNrJiYoZC5vbmNsaWNrPVxuamYpfWQ9YTtiLnVwZGF0ZVF1ZXVlPWQ7bnVsbCE9PWQmJihiLmZsYWdzfD00KX1lbHNle2c9OT09PWUubm9kZVR5cGU/ZTplLm93bmVyRG9jdW1lbnQ7YT09PWtiLmh0bWwmJihhPWxiKGMpKTthPT09a2IuaHRtbD9cInNjcmlwdFwiPT09Yz8oYT1nLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksYS5pbm5lckhUTUw9XCI8c2NyaXB0PlxceDNjL3NjcmlwdD5cIixhPWEucmVtb3ZlQ2hpbGQoYS5maXJzdENoaWxkKSk6XCJzdHJpbmdcIj09PXR5cGVvZiBkLmlzP2E9Zy5jcmVhdGVFbGVtZW50KGMse2lzOmQuaXN9KTooYT1nLmNyZWF0ZUVsZW1lbnQoYyksXCJzZWxlY3RcIj09PWMmJihnPWEsZC5tdWx0aXBsZT9nLm11bHRpcGxlPSEwOmQuc2l6ZSYmKGcuc2l6ZT1kLnNpemUpKSk6YT1nLmNyZWF0ZUVsZW1lbnROUyhhLGMpO2Fbd2ZdPWI7YVt4Zl09ZDtCaShhLGIsITEsITEpO2Iuc3RhdGVOb2RlPWE7Zz13YihjLGQpO3N3aXRjaChjKXtjYXNlIFwiZGlhbG9nXCI6RyhcImNhbmNlbFwiLGEpO0coXCJjbG9zZVwiLGEpO1xuZT1kO2JyZWFrO2Nhc2UgXCJpZnJhbWVcIjpjYXNlIFwib2JqZWN0XCI6Y2FzZSBcImVtYmVkXCI6RyhcImxvYWRcIixhKTtlPWQ7YnJlYWs7Y2FzZSBcInZpZGVvXCI6Y2FzZSBcImF1ZGlvXCI6Zm9yKGU9MDtlPFhlLmxlbmd0aDtlKyspRyhYZVtlXSxhKTtlPWQ7YnJlYWs7Y2FzZSBcInNvdXJjZVwiOkcoXCJlcnJvclwiLGEpO2U9ZDticmVhaztjYXNlIFwiaW1nXCI6Y2FzZSBcImltYWdlXCI6Y2FzZSBcImxpbmtcIjpHKFwiZXJyb3JcIixhKTtHKFwibG9hZFwiLGEpO2U9ZDticmVhaztjYXNlIFwiZGV0YWlsc1wiOkcoXCJ0b2dnbGVcIixhKTtlPWQ7YnJlYWs7Y2FzZSBcImlucHV0XCI6WmEoYSxkKTtlPVlhKGEsZCk7RyhcImludmFsaWRcIixhKTticmVhaztjYXNlIFwib3B0aW9uXCI6ZT1lYihhLGQpO2JyZWFrO2Nhc2UgXCJzZWxlY3RcIjphLl93cmFwcGVyU3RhdGU9e3dhc011bHRpcGxlOiEhZC5tdWx0aXBsZX07ZT1tKHt9LGQse3ZhbHVlOnZvaWQgMH0pO0coXCJpbnZhbGlkXCIsYSk7YnJlYWs7Y2FzZSBcInRleHRhcmVhXCI6aGIoYSxkKTtlPVxuZ2IoYSxkKTtHKFwiaW52YWxpZFwiLGEpO2JyZWFrO2RlZmF1bHQ6ZT1kfXZiKGMsZSk7dmFyIGg9ZTtmb3IoZiBpbiBoKWlmKGguaGFzT3duUHJvcGVydHkoZikpe3ZhciBrPWhbZl07XCJzdHlsZVwiPT09Zj90YihhLGspOlwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxcIj09PWY/KGs9az9rLl9faHRtbDp2b2lkIDAsbnVsbCE9ayYmb2IoYSxrKSk6XCJjaGlsZHJlblwiPT09Zj9cInN0cmluZ1wiPT09dHlwZW9mIGs/KFwidGV4dGFyZWFcIiE9PWN8fFwiXCIhPT1rKSYmcGIoYSxrKTpcIm51bWJlclwiPT09dHlwZW9mIGsmJnBiKGEsXCJcIitrKTpcInN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZ1wiIT09ZiYmXCJzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmdcIiE9PWYmJlwiYXV0b0ZvY3VzXCIhPT1mJiYoY2EuaGFzT3duUHJvcGVydHkoZik/bnVsbCE9ayYmXCJvblNjcm9sbFwiPT09ZiYmRyhcInNjcm9sbFwiLGEpOm51bGwhPWsmJnFhKGEsZixrLGcpKX1zd2l0Y2goYyl7Y2FzZSBcImlucHV0XCI6VmEoYSk7Y2IoYSxkLCExKTtcbmJyZWFrO2Nhc2UgXCJ0ZXh0YXJlYVwiOlZhKGEpO2piKGEpO2JyZWFrO2Nhc2UgXCJvcHRpb25cIjpudWxsIT1kLnZhbHVlJiZhLnNldEF0dHJpYnV0ZShcInZhbHVlXCIsXCJcIitTYShkLnZhbHVlKSk7YnJlYWs7Y2FzZSBcInNlbGVjdFwiOmEubXVsdGlwbGU9ISFkLm11bHRpcGxlO2Y9ZC52YWx1ZTtudWxsIT1mP2ZiKGEsISFkLm11bHRpcGxlLGYsITEpOm51bGwhPWQuZGVmYXVsdFZhbHVlJiZmYihhLCEhZC5tdWx0aXBsZSxkLmRlZmF1bHRWYWx1ZSwhMCk7YnJlYWs7ZGVmYXVsdDpcImZ1bmN0aW9uXCI9PT10eXBlb2YgZS5vbkNsaWNrJiYoYS5vbmNsaWNrPWpmKX1tZihjLGQpJiYoYi5mbGFnc3w9NCl9bnVsbCE9PWIucmVmJiYoYi5mbGFnc3w9MTI4KX1yZXR1cm4gbnVsbDtjYXNlIDY6aWYoYSYmbnVsbCE9Yi5zdGF0ZU5vZGUpRWkoYSxiLGEubWVtb2l6ZWRQcm9wcyxkKTtlbHNle2lmKFwic3RyaW5nXCIhPT10eXBlb2YgZCYmbnVsbD09PWIuc3RhdGVOb2RlKXRocm93IEVycm9yKHkoMTY2KSk7XG5jPWRoKGNoLmN1cnJlbnQpO2RoKGFoLmN1cnJlbnQpO3JoKGIpPyhkPWIuc3RhdGVOb2RlLGM9Yi5tZW1vaXplZFByb3BzLGRbd2ZdPWIsZC5ub2RlVmFsdWUhPT1jJiYoYi5mbGFnc3w9NCkpOihkPSg5PT09Yy5ub2RlVHlwZT9jOmMub3duZXJEb2N1bWVudCkuY3JlYXRlVGV4dE5vZGUoZCksZFt3Zl09YixiLnN0YXRlTm9kZT1kKX1yZXR1cm4gbnVsbDtjYXNlIDEzOkgoUCk7ZD1iLm1lbW9pemVkU3RhdGU7aWYoMCE9PShiLmZsYWdzJjY0KSlyZXR1cm4gYi5sYW5lcz1jLGI7ZD1udWxsIT09ZDtjPSExO251bGw9PT1hP3ZvaWQgMCE9PWIubWVtb2l6ZWRQcm9wcy5mYWxsYmFjayYmcmgoYik6Yz1udWxsIT09YS5tZW1vaXplZFN0YXRlO2lmKGQmJiFjJiYwIT09KGIubW9kZSYyKSlpZihudWxsPT09YSYmITAhPT1iLm1lbW9pemVkUHJvcHMudW5zdGFibGVfYXZvaWRUaGlzRmFsbGJhY2t8fDAhPT0oUC5jdXJyZW50JjEpKTA9PT1WJiYoVj0zKTtlbHNle2lmKDA9PT1WfHwzPT09VilWPVxuNDtudWxsPT09VXx8MD09PShEZyYxMzQyMTc3MjcpJiYwPT09KEhpJjEzNDIxNzcyNyl8fElpKFUsVyl9aWYoZHx8YyliLmZsYWdzfD00O3JldHVybiBudWxsO2Nhc2UgNDpyZXR1cm4gZmgoKSxDaShiKSxudWxsPT09YSYmY2YoYi5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyksbnVsbDtjYXNlIDEwOnJldHVybiByZyhiKSxudWxsO2Nhc2UgMTc6cmV0dXJuIEZmKGIudHlwZSkmJkdmKCksbnVsbDtjYXNlIDE5OkgoUCk7ZD1iLm1lbW9pemVkU3RhdGU7aWYobnVsbD09PWQpcmV0dXJuIG51bGw7Zj0wIT09KGIuZmxhZ3MmNjQpO2c9ZC5yZW5kZXJpbmc7aWYobnVsbD09PWcpaWYoZilGaShkLCExKTtlbHNle2lmKDAhPT1WfHxudWxsIT09YSYmMCE9PShhLmZsYWdzJjY0KSlmb3IoYT1iLmNoaWxkO251bGwhPT1hOyl7Zz1paChhKTtpZihudWxsIT09Zyl7Yi5mbGFnc3w9NjQ7RmkoZCwhMSk7Zj1nLnVwZGF0ZVF1ZXVlO251bGwhPT1mJiYoYi51cGRhdGVRdWV1ZT1mLGIuZmxhZ3N8PTQpO1xubnVsbD09PWQubGFzdEVmZmVjdCYmKGIuZmlyc3RFZmZlY3Q9bnVsbCk7Yi5sYXN0RWZmZWN0PWQubGFzdEVmZmVjdDtkPWM7Zm9yKGM9Yi5jaGlsZDtudWxsIT09YzspZj1jLGE9ZCxmLmZsYWdzJj0yLGYubmV4dEVmZmVjdD1udWxsLGYuZmlyc3RFZmZlY3Q9bnVsbCxmLmxhc3RFZmZlY3Q9bnVsbCxnPWYuYWx0ZXJuYXRlLG51bGw9PT1nPyhmLmNoaWxkTGFuZXM9MCxmLmxhbmVzPWEsZi5jaGlsZD1udWxsLGYubWVtb2l6ZWRQcm9wcz1udWxsLGYubWVtb2l6ZWRTdGF0ZT1udWxsLGYudXBkYXRlUXVldWU9bnVsbCxmLmRlcGVuZGVuY2llcz1udWxsLGYuc3RhdGVOb2RlPW51bGwpOihmLmNoaWxkTGFuZXM9Zy5jaGlsZExhbmVzLGYubGFuZXM9Zy5sYW5lcyxmLmNoaWxkPWcuY2hpbGQsZi5tZW1vaXplZFByb3BzPWcubWVtb2l6ZWRQcm9wcyxmLm1lbW9pemVkU3RhdGU9Zy5tZW1vaXplZFN0YXRlLGYudXBkYXRlUXVldWU9Zy51cGRhdGVRdWV1ZSxmLnR5cGU9Zy50eXBlLGE9Zy5kZXBlbmRlbmNpZXMsXG5mLmRlcGVuZGVuY2llcz1udWxsPT09YT9udWxsOntsYW5lczphLmxhbmVzLGZpcnN0Q29udGV4dDphLmZpcnN0Q29udGV4dH0pLGM9Yy5zaWJsaW5nO0koUCxQLmN1cnJlbnQmMXwyKTtyZXR1cm4gYi5jaGlsZH1hPWEuc2libGluZ31udWxsIT09ZC50YWlsJiZPKCk+SmkmJihiLmZsYWdzfD02NCxmPSEwLEZpKGQsITEpLGIubGFuZXM9MzM1NTQ0MzIpfWVsc2V7aWYoIWYpaWYoYT1paChnKSxudWxsIT09YSl7aWYoYi5mbGFnc3w9NjQsZj0hMCxjPWEudXBkYXRlUXVldWUsbnVsbCE9PWMmJihiLnVwZGF0ZVF1ZXVlPWMsYi5mbGFnc3w9NCksRmkoZCwhMCksbnVsbD09PWQudGFpbCYmXCJoaWRkZW5cIj09PWQudGFpbE1vZGUmJiFnLmFsdGVybmF0ZSYmIWxoKXJldHVybiBiPWIubGFzdEVmZmVjdD1kLmxhc3RFZmZlY3QsbnVsbCE9PWImJihiLm5leHRFZmZlY3Q9bnVsbCksbnVsbH1lbHNlIDIqTygpLWQucmVuZGVyaW5nU3RhcnRUaW1lPkppJiYxMDczNzQxODI0IT09YyYmKGIuZmxhZ3N8PVxuNjQsZj0hMCxGaShkLCExKSxiLmxhbmVzPTMzNTU0NDMyKTtkLmlzQmFja3dhcmRzPyhnLnNpYmxpbmc9Yi5jaGlsZCxiLmNoaWxkPWcpOihjPWQubGFzdCxudWxsIT09Yz9jLnNpYmxpbmc9ZzpiLmNoaWxkPWcsZC5sYXN0PWcpfXJldHVybiBudWxsIT09ZC50YWlsPyhjPWQudGFpbCxkLnJlbmRlcmluZz1jLGQudGFpbD1jLnNpYmxpbmcsZC5sYXN0RWZmZWN0PWIubGFzdEVmZmVjdCxkLnJlbmRlcmluZ1N0YXJ0VGltZT1PKCksYy5zaWJsaW5nPW51bGwsYj1QLmN1cnJlbnQsSShQLGY/YiYxfDI6YiYxKSxjKTpudWxsO2Nhc2UgMjM6Y2FzZSAyNDpyZXR1cm4gS2koKSxudWxsIT09YSYmbnVsbCE9PWEubWVtb2l6ZWRTdGF0ZSE9PShudWxsIT09Yi5tZW1vaXplZFN0YXRlKSYmXCJ1bnN0YWJsZS1kZWZlci13aXRob3V0LWhpZGluZ1wiIT09ZC5tb2RlJiYoYi5mbGFnc3w9NCksbnVsbH10aHJvdyBFcnJvcih5KDE1NixiLnRhZykpO31cbmZ1bmN0aW9uIExpKGEpe3N3aXRjaChhLnRhZyl7Y2FzZSAxOkZmKGEudHlwZSkmJkdmKCk7dmFyIGI9YS5mbGFncztyZXR1cm4gYiY0MDk2PyhhLmZsYWdzPWImLTQwOTd8NjQsYSk6bnVsbDtjYXNlIDM6ZmgoKTtIKE4pO0goTSk7dWgoKTtiPWEuZmxhZ3M7aWYoMCE9PShiJjY0KSl0aHJvdyBFcnJvcih5KDI4NSkpO2EuZmxhZ3M9YiYtNDA5N3w2NDtyZXR1cm4gYTtjYXNlIDU6cmV0dXJuIGhoKGEpLG51bGw7Y2FzZSAxMzpyZXR1cm4gSChQKSxiPWEuZmxhZ3MsYiY0MDk2PyhhLmZsYWdzPWImLTQwOTd8NjQsYSk6bnVsbDtjYXNlIDE5OnJldHVybiBIKFApLG51bGw7Y2FzZSA0OnJldHVybiBmaCgpLG51bGw7Y2FzZSAxMDpyZXR1cm4gcmcoYSksbnVsbDtjYXNlIDIzOmNhc2UgMjQ6cmV0dXJuIEtpKCksbnVsbDtkZWZhdWx0OnJldHVybiBudWxsfX1cbmZ1bmN0aW9uIE1pKGEsYil7dHJ5e3ZhciBjPVwiXCIsZD1iO2RvIGMrPVFhKGQpLGQ9ZC5yZXR1cm47d2hpbGUoZCk7dmFyIGU9Y31jYXRjaChmKXtlPVwiXFxuRXJyb3IgZ2VuZXJhdGluZyBzdGFjazogXCIrZi5tZXNzYWdlK1wiXFxuXCIrZi5zdGFja31yZXR1cm57dmFsdWU6YSxzb3VyY2U6YixzdGFjazplfX1mdW5jdGlvbiBOaShhLGIpe3RyeXtjb25zb2xlLmVycm9yKGIudmFsdWUpfWNhdGNoKGMpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXt0aHJvdyBjO30pfX12YXIgT2k9XCJmdW5jdGlvblwiPT09dHlwZW9mIFdlYWtNYXA/V2Vha01hcDpNYXA7ZnVuY3Rpb24gUGkoYSxiLGMpe2M9emcoLTEsYyk7Yy50YWc9MztjLnBheWxvYWQ9e2VsZW1lbnQ6bnVsbH07dmFyIGQ9Yi52YWx1ZTtjLmNhbGxiYWNrPWZ1bmN0aW9uKCl7UWl8fChRaT0hMCxSaT1kKTtOaShhLGIpfTtyZXR1cm4gY31cbmZ1bmN0aW9uIFNpKGEsYixjKXtjPXpnKC0xLGMpO2MudGFnPTM7dmFyIGQ9YS50eXBlLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcjtpZihcImZ1bmN0aW9uXCI9PT10eXBlb2YgZCl7dmFyIGU9Yi52YWx1ZTtjLnBheWxvYWQ9ZnVuY3Rpb24oKXtOaShhLGIpO3JldHVybiBkKGUpfX12YXIgZj1hLnN0YXRlTm9kZTtudWxsIT09ZiYmXCJmdW5jdGlvblwiPT09dHlwZW9mIGYuY29tcG9uZW50RGlkQ2F0Y2gmJihjLmNhbGxiYWNrPWZ1bmN0aW9uKCl7XCJmdW5jdGlvblwiIT09dHlwZW9mIGQmJihudWxsPT09VGk/VGk9bmV3IFNldChbdGhpc10pOlRpLmFkZCh0aGlzKSxOaShhLGIpKTt2YXIgYz1iLnN0YWNrO3RoaXMuY29tcG9uZW50RGlkQ2F0Y2goYi52YWx1ZSx7Y29tcG9uZW50U3RhY2s6bnVsbCE9PWM/YzpcIlwifSl9KTtyZXR1cm4gY312YXIgVWk9XCJmdW5jdGlvblwiPT09dHlwZW9mIFdlYWtTZXQ/V2Vha1NldDpTZXQ7XG5mdW5jdGlvbiBWaShhKXt2YXIgYj1hLnJlZjtpZihudWxsIT09YilpZihcImZ1bmN0aW9uXCI9PT10eXBlb2YgYil0cnl7YihudWxsKX1jYXRjaChjKXtXaShhLGMpfWVsc2UgYi5jdXJyZW50PW51bGx9ZnVuY3Rpb24gWGkoYSxiKXtzd2l0Y2goYi50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTU6Y2FzZSAyMjpyZXR1cm47Y2FzZSAxOmlmKGIuZmxhZ3MmMjU2JiZudWxsIT09YSl7dmFyIGM9YS5tZW1vaXplZFByb3BzLGQ9YS5tZW1vaXplZFN0YXRlO2E9Yi5zdGF0ZU5vZGU7Yj1hLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlKGIuZWxlbWVudFR5cGU9PT1iLnR5cGU/YzpsZyhiLnR5cGUsYyksZCk7YS5fX3JlYWN0SW50ZXJuYWxTbmFwc2hvdEJlZm9yZVVwZGF0ZT1ifXJldHVybjtjYXNlIDM6Yi5mbGFncyYyNTYmJnFmKGIuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pO3JldHVybjtjYXNlIDU6Y2FzZSA2OmNhc2UgNDpjYXNlIDE3OnJldHVybn10aHJvdyBFcnJvcih5KDE2MykpO31cbmZ1bmN0aW9uIFlpKGEsYixjKXtzd2l0Y2goYy50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTU6Y2FzZSAyMjpiPWMudXBkYXRlUXVldWU7Yj1udWxsIT09Yj9iLmxhc3RFZmZlY3Q6bnVsbDtpZihudWxsIT09Yil7YT1iPWIubmV4dDtkb3tpZigzPT09KGEudGFnJjMpKXt2YXIgZD1hLmNyZWF0ZTthLmRlc3Ryb3k9ZCgpfWE9YS5uZXh0fXdoaWxlKGEhPT1iKX1iPWMudXBkYXRlUXVldWU7Yj1udWxsIT09Yj9iLmxhc3RFZmZlY3Q6bnVsbDtpZihudWxsIT09Yil7YT1iPWIubmV4dDtkb3t2YXIgZT1hO2Q9ZS5uZXh0O2U9ZS50YWc7MCE9PShlJjQpJiYwIT09KGUmMSkmJihaaShjLGEpLCRpKGMsYSkpO2E9ZH13aGlsZShhIT09Yil9cmV0dXJuO2Nhc2UgMTphPWMuc3RhdGVOb2RlO2MuZmxhZ3MmNCYmKG51bGw9PT1iP2EuY29tcG9uZW50RGlkTW91bnQoKTooZD1jLmVsZW1lbnRUeXBlPT09Yy50eXBlP2IubWVtb2l6ZWRQcm9wczpsZyhjLnR5cGUsYi5tZW1vaXplZFByb3BzKSxhLmNvbXBvbmVudERpZFVwZGF0ZShkLFxuYi5tZW1vaXplZFN0YXRlLGEuX19yZWFjdEludGVybmFsU25hcHNob3RCZWZvcmVVcGRhdGUpKSk7Yj1jLnVwZGF0ZVF1ZXVlO251bGwhPT1iJiZFZyhjLGIsYSk7cmV0dXJuO2Nhc2UgMzpiPWMudXBkYXRlUXVldWU7aWYobnVsbCE9PWIpe2E9bnVsbDtpZihudWxsIT09Yy5jaGlsZClzd2l0Y2goYy5jaGlsZC50YWcpe2Nhc2UgNTphPWMuY2hpbGQuc3RhdGVOb2RlO2JyZWFrO2Nhc2UgMTphPWMuY2hpbGQuc3RhdGVOb2RlfUVnKGMsYixhKX1yZXR1cm47Y2FzZSA1OmE9Yy5zdGF0ZU5vZGU7bnVsbD09PWImJmMuZmxhZ3MmNCYmbWYoYy50eXBlLGMubWVtb2l6ZWRQcm9wcykmJmEuZm9jdXMoKTtyZXR1cm47Y2FzZSA2OnJldHVybjtjYXNlIDQ6cmV0dXJuO2Nhc2UgMTI6cmV0dXJuO2Nhc2UgMTM6bnVsbD09PWMubWVtb2l6ZWRTdGF0ZSYmKGM9Yy5hbHRlcm5hdGUsbnVsbCE9PWMmJihjPWMubWVtb2l6ZWRTdGF0ZSxudWxsIT09YyYmKGM9Yy5kZWh5ZHJhdGVkLG51bGwhPT1jJiZDYyhjKSkpKTtcbnJldHVybjtjYXNlIDE5OmNhc2UgMTc6Y2FzZSAyMDpjYXNlIDIxOmNhc2UgMjM6Y2FzZSAyNDpyZXR1cm59dGhyb3cgRXJyb3IoeSgxNjMpKTt9XG5mdW5jdGlvbiBhaihhLGIpe2Zvcih2YXIgYz1hOzspe2lmKDU9PT1jLnRhZyl7dmFyIGQ9Yy5zdGF0ZU5vZGU7aWYoYilkPWQuc3R5bGUsXCJmdW5jdGlvblwiPT09dHlwZW9mIGQuc2V0UHJvcGVydHk/ZC5zZXRQcm9wZXJ0eShcImRpc3BsYXlcIixcIm5vbmVcIixcImltcG9ydGFudFwiKTpkLmRpc3BsYXk9XCJub25lXCI7ZWxzZXtkPWMuc3RhdGVOb2RlO3ZhciBlPWMubWVtb2l6ZWRQcm9wcy5zdHlsZTtlPXZvaWQgMCE9PWUmJm51bGwhPT1lJiZlLmhhc093blByb3BlcnR5KFwiZGlzcGxheVwiKT9lLmRpc3BsYXk6bnVsbDtkLnN0eWxlLmRpc3BsYXk9c2IoXCJkaXNwbGF5XCIsZSl9fWVsc2UgaWYoNj09PWMudGFnKWMuc3RhdGVOb2RlLm5vZGVWYWx1ZT1iP1wiXCI6Yy5tZW1vaXplZFByb3BzO2Vsc2UgaWYoKDIzIT09Yy50YWcmJjI0IT09Yy50YWd8fG51bGw9PT1jLm1lbW9pemVkU3RhdGV8fGM9PT1hKSYmbnVsbCE9PWMuY2hpbGQpe2MuY2hpbGQucmV0dXJuPWM7Yz1jLmNoaWxkO2NvbnRpbnVlfWlmKGM9PT1cbmEpYnJlYWs7Zm9yKDtudWxsPT09Yy5zaWJsaW5nOyl7aWYobnVsbD09PWMucmV0dXJufHxjLnJldHVybj09PWEpcmV0dXJuO2M9Yy5yZXR1cm59Yy5zaWJsaW5nLnJldHVybj1jLnJldHVybjtjPWMuc2libGluZ319XG5mdW5jdGlvbiBiaihhLGIpe2lmKE1mJiZcImZ1bmN0aW9uXCI9PT10eXBlb2YgTWYub25Db21taXRGaWJlclVubW91bnQpdHJ5e01mLm9uQ29tbWl0RmliZXJVbm1vdW50KExmLGIpfWNhdGNoKGYpe31zd2l0Y2goYi50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTQ6Y2FzZSAxNTpjYXNlIDIyOmE9Yi51cGRhdGVRdWV1ZTtpZihudWxsIT09YSYmKGE9YS5sYXN0RWZmZWN0LG51bGwhPT1hKSl7dmFyIGM9YT1hLm5leHQ7ZG97dmFyIGQ9YyxlPWQuZGVzdHJveTtkPWQudGFnO2lmKHZvaWQgMCE9PWUpaWYoMCE9PShkJjQpKVppKGIsYyk7ZWxzZXtkPWI7dHJ5e2UoKX1jYXRjaChmKXtXaShkLGYpfX1jPWMubmV4dH13aGlsZShjIT09YSl9YnJlYWs7Y2FzZSAxOlZpKGIpO2E9Yi5zdGF0ZU5vZGU7aWYoXCJmdW5jdGlvblwiPT09dHlwZW9mIGEuY29tcG9uZW50V2lsbFVubW91bnQpdHJ5e2EucHJvcHM9Yi5tZW1vaXplZFByb3BzLGEuc3RhdGU9Yi5tZW1vaXplZFN0YXRlLGEuY29tcG9uZW50V2lsbFVubW91bnQoKX1jYXRjaChmKXtXaShiLFxuZil9YnJlYWs7Y2FzZSA1OlZpKGIpO2JyZWFrO2Nhc2UgNDpjaihhLGIpfX1mdW5jdGlvbiBkaihhKXthLmFsdGVybmF0ZT1udWxsO2EuY2hpbGQ9bnVsbDthLmRlcGVuZGVuY2llcz1udWxsO2EuZmlyc3RFZmZlY3Q9bnVsbDthLmxhc3RFZmZlY3Q9bnVsbDthLm1lbW9pemVkUHJvcHM9bnVsbDthLm1lbW9pemVkU3RhdGU9bnVsbDthLnBlbmRpbmdQcm9wcz1udWxsO2EucmV0dXJuPW51bGw7YS51cGRhdGVRdWV1ZT1udWxsfWZ1bmN0aW9uIGVqKGEpe3JldHVybiA1PT09YS50YWd8fDM9PT1hLnRhZ3x8ND09PWEudGFnfVxuZnVuY3Rpb24gZmooYSl7YTp7Zm9yKHZhciBiPWEucmV0dXJuO251bGwhPT1iOyl7aWYoZWooYikpYnJlYWsgYTtiPWIucmV0dXJufXRocm93IEVycm9yKHkoMTYwKSk7fXZhciBjPWI7Yj1jLnN0YXRlTm9kZTtzd2l0Y2goYy50YWcpe2Nhc2UgNTp2YXIgZD0hMTticmVhaztjYXNlIDM6Yj1iLmNvbnRhaW5lckluZm87ZD0hMDticmVhaztjYXNlIDQ6Yj1iLmNvbnRhaW5lckluZm87ZD0hMDticmVhaztkZWZhdWx0OnRocm93IEVycm9yKHkoMTYxKSk7fWMuZmxhZ3MmMTYmJihwYihiLFwiXCIpLGMuZmxhZ3MmPS0xNyk7YTpiOmZvcihjPWE7Oyl7Zm9yKDtudWxsPT09Yy5zaWJsaW5nOyl7aWYobnVsbD09PWMucmV0dXJufHxlaihjLnJldHVybikpe2M9bnVsbDticmVhayBhfWM9Yy5yZXR1cm59Yy5zaWJsaW5nLnJldHVybj1jLnJldHVybjtmb3IoYz1jLnNpYmxpbmc7NSE9PWMudGFnJiY2IT09Yy50YWcmJjE4IT09Yy50YWc7KXtpZihjLmZsYWdzJjIpY29udGludWUgYjtpZihudWxsPT09XG5jLmNoaWxkfHw0PT09Yy50YWcpY29udGludWUgYjtlbHNlIGMuY2hpbGQucmV0dXJuPWMsYz1jLmNoaWxkfWlmKCEoYy5mbGFncyYyKSl7Yz1jLnN0YXRlTm9kZTticmVhayBhfX1kP2dqKGEsYyxiKTpoaihhLGMsYil9XG5mdW5jdGlvbiBnaihhLGIsYyl7dmFyIGQ9YS50YWcsZT01PT09ZHx8Nj09PWQ7aWYoZSlhPWU/YS5zdGF0ZU5vZGU6YS5zdGF0ZU5vZGUuaW5zdGFuY2UsYj84PT09Yy5ub2RlVHlwZT9jLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsYik6Yy5pbnNlcnRCZWZvcmUoYSxiKTooOD09PWMubm9kZVR5cGU/KGI9Yy5wYXJlbnROb2RlLGIuaW5zZXJ0QmVmb3JlKGEsYykpOihiPWMsYi5hcHBlbmRDaGlsZChhKSksYz1jLl9yZWFjdFJvb3RDb250YWluZXIsbnVsbCE9PWMmJnZvaWQgMCE9PWN8fG51bGwhPT1iLm9uY2xpY2t8fChiLm9uY2xpY2s9amYpKTtlbHNlIGlmKDQhPT1kJiYoYT1hLmNoaWxkLG51bGwhPT1hKSlmb3IoZ2ooYSxiLGMpLGE9YS5zaWJsaW5nO251bGwhPT1hOylnaihhLGIsYyksYT1hLnNpYmxpbmd9XG5mdW5jdGlvbiBoaihhLGIsYyl7dmFyIGQ9YS50YWcsZT01PT09ZHx8Nj09PWQ7aWYoZSlhPWU/YS5zdGF0ZU5vZGU6YS5zdGF0ZU5vZGUuaW5zdGFuY2UsYj9jLmluc2VydEJlZm9yZShhLGIpOmMuYXBwZW5kQ2hpbGQoYSk7ZWxzZSBpZig0IT09ZCYmKGE9YS5jaGlsZCxudWxsIT09YSkpZm9yKGhqKGEsYixjKSxhPWEuc2libGluZztudWxsIT09YTspaGooYSxiLGMpLGE9YS5zaWJsaW5nfVxuZnVuY3Rpb24gY2ooYSxiKXtmb3IodmFyIGM9YixkPSExLGUsZjs7KXtpZighZCl7ZD1jLnJldHVybjthOmZvcig7Oyl7aWYobnVsbD09PWQpdGhyb3cgRXJyb3IoeSgxNjApKTtlPWQuc3RhdGVOb2RlO3N3aXRjaChkLnRhZyl7Y2FzZSA1OmY9ITE7YnJlYWsgYTtjYXNlIDM6ZT1lLmNvbnRhaW5lckluZm87Zj0hMDticmVhayBhO2Nhc2UgNDplPWUuY29udGFpbmVySW5mbztmPSEwO2JyZWFrIGF9ZD1kLnJldHVybn1kPSEwfWlmKDU9PT1jLnRhZ3x8Nj09PWMudGFnKXthOmZvcih2YXIgZz1hLGg9YyxrPWg7OylpZihiaihnLGspLG51bGwhPT1rLmNoaWxkJiY0IT09ay50YWcpay5jaGlsZC5yZXR1cm49ayxrPWsuY2hpbGQ7ZWxzZXtpZihrPT09aClicmVhayBhO2Zvcig7bnVsbD09PWsuc2libGluZzspe2lmKG51bGw9PT1rLnJldHVybnx8ay5yZXR1cm49PT1oKWJyZWFrIGE7az1rLnJldHVybn1rLnNpYmxpbmcucmV0dXJuPWsucmV0dXJuO2s9ay5zaWJsaW5nfWY/KGc9ZSxoPWMuc3RhdGVOb2RlLFxuOD09PWcubm9kZVR5cGU/Zy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGgpOmcucmVtb3ZlQ2hpbGQoaCkpOmUucmVtb3ZlQ2hpbGQoYy5zdGF0ZU5vZGUpfWVsc2UgaWYoND09PWMudGFnKXtpZihudWxsIT09Yy5jaGlsZCl7ZT1jLnN0YXRlTm9kZS5jb250YWluZXJJbmZvO2Y9ITA7Yy5jaGlsZC5yZXR1cm49YztjPWMuY2hpbGQ7Y29udGludWV9fWVsc2UgaWYoYmooYSxjKSxudWxsIT09Yy5jaGlsZCl7Yy5jaGlsZC5yZXR1cm49YztjPWMuY2hpbGQ7Y29udGludWV9aWYoYz09PWIpYnJlYWs7Zm9yKDtudWxsPT09Yy5zaWJsaW5nOyl7aWYobnVsbD09PWMucmV0dXJufHxjLnJldHVybj09PWIpcmV0dXJuO2M9Yy5yZXR1cm47ND09PWMudGFnJiYoZD0hMSl9Yy5zaWJsaW5nLnJldHVybj1jLnJldHVybjtjPWMuc2libGluZ319XG5mdW5jdGlvbiBpaihhLGIpe3N3aXRjaChiLnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNDpjYXNlIDE1OmNhc2UgMjI6dmFyIGM9Yi51cGRhdGVRdWV1ZTtjPW51bGwhPT1jP2MubGFzdEVmZmVjdDpudWxsO2lmKG51bGwhPT1jKXt2YXIgZD1jPWMubmV4dDtkbyAzPT09KGQudGFnJjMpJiYoYT1kLmRlc3Ryb3ksZC5kZXN0cm95PXZvaWQgMCx2b2lkIDAhPT1hJiZhKCkpLGQ9ZC5uZXh0O3doaWxlKGQhPT1jKX1yZXR1cm47Y2FzZSAxOnJldHVybjtjYXNlIDU6Yz1iLnN0YXRlTm9kZTtpZihudWxsIT1jKXtkPWIubWVtb2l6ZWRQcm9wczt2YXIgZT1udWxsIT09YT9hLm1lbW9pemVkUHJvcHM6ZDthPWIudHlwZTt2YXIgZj1iLnVwZGF0ZVF1ZXVlO2IudXBkYXRlUXVldWU9bnVsbDtpZihudWxsIT09Zil7Y1t4Zl09ZDtcImlucHV0XCI9PT1hJiZcInJhZGlvXCI9PT1kLnR5cGUmJm51bGwhPWQubmFtZSYmJGEoYyxkKTt3YihhLGUpO2I9d2IoYSxkKTtmb3IoZT0wO2U8Zi5sZW5ndGg7ZSs9XG4yKXt2YXIgZz1mW2VdLGg9ZltlKzFdO1wic3R5bGVcIj09PWc/dGIoYyxoKTpcImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MXCI9PT1nP29iKGMsaCk6XCJjaGlsZHJlblwiPT09Zz9wYihjLGgpOnFhKGMsZyxoLGIpfXN3aXRjaChhKXtjYXNlIFwiaW5wdXRcIjphYihjLGQpO2JyZWFrO2Nhc2UgXCJ0ZXh0YXJlYVwiOmliKGMsZCk7YnJlYWs7Y2FzZSBcInNlbGVjdFwiOmE9Yy5fd3JhcHBlclN0YXRlLndhc011bHRpcGxlLGMuX3dyYXBwZXJTdGF0ZS53YXNNdWx0aXBsZT0hIWQubXVsdGlwbGUsZj1kLnZhbHVlLG51bGwhPWY/ZmIoYywhIWQubXVsdGlwbGUsZiwhMSk6YSE9PSEhZC5tdWx0aXBsZSYmKG51bGwhPWQuZGVmYXVsdFZhbHVlP2ZiKGMsISFkLm11bHRpcGxlLGQuZGVmYXVsdFZhbHVlLCEwKTpmYihjLCEhZC5tdWx0aXBsZSxkLm11bHRpcGxlP1tdOlwiXCIsITEpKX19fXJldHVybjtjYXNlIDY6aWYobnVsbD09PWIuc3RhdGVOb2RlKXRocm93IEVycm9yKHkoMTYyKSk7Yi5zdGF0ZU5vZGUubm9kZVZhbHVlPVxuYi5tZW1vaXplZFByb3BzO3JldHVybjtjYXNlIDM6Yz1iLnN0YXRlTm9kZTtjLmh5ZHJhdGUmJihjLmh5ZHJhdGU9ITEsQ2MoYy5jb250YWluZXJJbmZvKSk7cmV0dXJuO2Nhc2UgMTI6cmV0dXJuO2Nhc2UgMTM6bnVsbCE9PWIubWVtb2l6ZWRTdGF0ZSYmKGpqPU8oKSxhaihiLmNoaWxkLCEwKSk7a2ooYik7cmV0dXJuO2Nhc2UgMTk6a2ooYik7cmV0dXJuO2Nhc2UgMTc6cmV0dXJuO2Nhc2UgMjM6Y2FzZSAyNDphaihiLG51bGwhPT1iLm1lbW9pemVkU3RhdGUpO3JldHVybn10aHJvdyBFcnJvcih5KDE2MykpO31mdW5jdGlvbiBraihhKXt2YXIgYj1hLnVwZGF0ZVF1ZXVlO2lmKG51bGwhPT1iKXthLnVwZGF0ZVF1ZXVlPW51bGw7dmFyIGM9YS5zdGF0ZU5vZGU7bnVsbD09PWMmJihjPWEuc3RhdGVOb2RlPW5ldyBVaSk7Yi5mb3JFYWNoKGZ1bmN0aW9uKGIpe3ZhciBkPWxqLmJpbmQobnVsbCxhLGIpO2MuaGFzKGIpfHwoYy5hZGQoYiksYi50aGVuKGQsZCkpfSl9fVxuZnVuY3Rpb24gbWooYSxiKXtyZXR1cm4gbnVsbCE9PWEmJihhPWEubWVtb2l6ZWRTdGF0ZSxudWxsPT09YXx8bnVsbCE9PWEuZGVoeWRyYXRlZCk/KGI9Yi5tZW1vaXplZFN0YXRlLG51bGwhPT1iJiZudWxsPT09Yi5kZWh5ZHJhdGVkKTohMX12YXIgbmo9TWF0aC5jZWlsLG9qPXJhLlJlYWN0Q3VycmVudERpc3BhdGNoZXIscGo9cmEuUmVhY3RDdXJyZW50T3duZXIsWD0wLFU9bnVsbCxZPW51bGwsVz0wLHFqPTAscmo9QmYoMCksVj0wLHNqPW51bGwsdGo9MCxEZz0wLEhpPTAsdWo9MCx2aj1udWxsLGpqPTAsSmk9SW5maW5pdHk7ZnVuY3Rpb24gd2ooKXtKaT1PKCkrNTAwfXZhciBaPW51bGwsUWk9ITEsUmk9bnVsbCxUaT1udWxsLHhqPSExLHlqPW51bGwsemo9OTAsQWo9W10sQmo9W10sQ2o9bnVsbCxEaj0wLEVqPW51bGwsRmo9LTEsR2o9MCxIaj0wLElqPW51bGwsSmo9ITE7ZnVuY3Rpb24gSGcoKXtyZXR1cm4gMCE9PShYJjQ4KT9PKCk6LTEhPT1Gaj9GajpGaj1PKCl9XG5mdW5jdGlvbiBJZyhhKXthPWEubW9kZTtpZigwPT09KGEmMikpcmV0dXJuIDE7aWYoMD09PShhJjQpKXJldHVybiA5OT09PWVnKCk/MToyOzA9PT1HaiYmKEdqPXRqKTtpZigwIT09a2cudHJhbnNpdGlvbil7MCE9PUhqJiYoSGo9bnVsbCE9PXZqP3ZqLnBlbmRpbmdMYW5lczowKTthPUdqO3ZhciBiPTQxODYxMTImfkhqO2ImPS1iOzA9PT1iJiYoYT00MTg2MTEyJn5hLGI9YSYtYSwwPT09YiYmKGI9ODE5MikpO3JldHVybiBifWE9ZWcoKTswIT09KFgmNCkmJjk4PT09YT9hPVhjKDEyLEdqKTooYT1TYyhhKSxhPVhjKGEsR2opKTtyZXR1cm4gYX1cbmZ1bmN0aW9uIEpnKGEsYixjKXtpZig1MDxEail0aHJvdyBEaj0wLEVqPW51bGwsRXJyb3IoeSgxODUpKTthPUtqKGEsYik7aWYobnVsbD09PWEpcmV0dXJuIG51bGw7JGMoYSxiLGMpO2E9PT1VJiYoSGl8PWIsND09PVYmJklpKGEsVykpO3ZhciBkPWVnKCk7MT09PWI/MCE9PShYJjgpJiYwPT09KFgmNDgpP0xqKGEpOihNaihhLGMpLDA9PT1YJiYod2ooKSxpZygpKSk6KDA9PT0oWCY0KXx8OTghPT1kJiY5OSE9PWR8fChudWxsPT09Q2o/Q2o9bmV3IFNldChbYV0pOkNqLmFkZChhKSksTWooYSxjKSk7dmo9YX1mdW5jdGlvbiBLaihhLGIpe2EubGFuZXN8PWI7dmFyIGM9YS5hbHRlcm5hdGU7bnVsbCE9PWMmJihjLmxhbmVzfD1iKTtjPWE7Zm9yKGE9YS5yZXR1cm47bnVsbCE9PWE7KWEuY2hpbGRMYW5lc3w9YixjPWEuYWx0ZXJuYXRlLG51bGwhPT1jJiYoYy5jaGlsZExhbmVzfD1iKSxjPWEsYT1hLnJldHVybjtyZXR1cm4gMz09PWMudGFnP2Muc3RhdGVOb2RlOm51bGx9XG5mdW5jdGlvbiBNaihhLGIpe2Zvcih2YXIgYz1hLmNhbGxiYWNrTm9kZSxkPWEuc3VzcGVuZGVkTGFuZXMsZT1hLnBpbmdlZExhbmVzLGY9YS5leHBpcmF0aW9uVGltZXMsZz1hLnBlbmRpbmdMYW5lczswPGc7KXt2YXIgaD0zMS1WYyhnKSxrPTE8PGgsbD1mW2hdO2lmKC0xPT09bCl7aWYoMD09PShrJmQpfHwwIT09KGsmZSkpe2w9YjtSYyhrKTt2YXIgbj1GO2ZbaF09MTA8PW4/bCsyNTA6Njw9bj9sKzVFMzotMX19ZWxzZSBsPD1iJiYoYS5leHBpcmVkTGFuZXN8PWspO2cmPX5rfWQ9VWMoYSxhPT09VT9XOjApO2I9RjtpZigwPT09ZCludWxsIT09YyYmKGMhPT1aZiYmUGYoYyksYS5jYWxsYmFja05vZGU9bnVsbCxhLmNhbGxiYWNrUHJpb3JpdHk9MCk7ZWxzZXtpZihudWxsIT09Yyl7aWYoYS5jYWxsYmFja1ByaW9yaXR5PT09YilyZXR1cm47YyE9PVpmJiZQZihjKX0xNT09PWI/KGM9TGouYmluZChudWxsLGEpLG51bGw9PT1hZz8oYWc9W2NdLGJnPU9mKFVmLGpnKSk6YWcucHVzaChjKSxcbmM9WmYpOjE0PT09Yj9jPWhnKDk5LExqLmJpbmQobnVsbCxhKSk6KGM9VGMoYiksYz1oZyhjLE5qLmJpbmQobnVsbCxhKSkpO2EuY2FsbGJhY2tQcmlvcml0eT1iO2EuY2FsbGJhY2tOb2RlPWN9fVxuZnVuY3Rpb24gTmooYSl7Rmo9LTE7SGo9R2o9MDtpZigwIT09KFgmNDgpKXRocm93IEVycm9yKHkoMzI3KSk7dmFyIGI9YS5jYWxsYmFja05vZGU7aWYoT2ooKSYmYS5jYWxsYmFja05vZGUhPT1iKXJldHVybiBudWxsO3ZhciBjPVVjKGEsYT09PVU/VzowKTtpZigwPT09YylyZXR1cm4gbnVsbDt2YXIgZD1jO3ZhciBlPVg7WHw9MTY7dmFyIGY9UGooKTtpZihVIT09YXx8VyE9PWQpd2ooKSxRaihhLGQpO2RvIHRyeXtSaigpO2JyZWFrfWNhdGNoKGgpe1NqKGEsaCl9d2hpbGUoMSk7cWcoKTtvai5jdXJyZW50PWY7WD1lO251bGwhPT1ZP2Q9MDooVT1udWxsLFc9MCxkPVYpO2lmKDAhPT0odGomSGkpKVFqKGEsMCk7ZWxzZSBpZigwIT09ZCl7Mj09PWQmJihYfD02NCxhLmh5ZHJhdGUmJihhLmh5ZHJhdGU9ITEscWYoYS5jb250YWluZXJJbmZvKSksYz1XYyhhKSwwIT09YyYmKGQ9VGooYSxjKSkpO2lmKDE9PT1kKXRocm93IGI9c2osUWooYSwwKSxJaShhLGMpLE1qKGEsTygpKSxiO2EuZmluaXNoZWRXb3JrPVxuYS5jdXJyZW50LmFsdGVybmF0ZTthLmZpbmlzaGVkTGFuZXM9Yztzd2l0Y2goZCl7Y2FzZSAwOmNhc2UgMTp0aHJvdyBFcnJvcih5KDM0NSkpO2Nhc2UgMjpVaihhKTticmVhaztjYXNlIDM6SWkoYSxjKTtpZigoYyY2MjkxNDU2MCk9PT1jJiYoZD1qais1MDAtTygpLDEwPGQpKXtpZigwIT09VWMoYSwwKSlicmVhaztlPWEuc3VzcGVuZGVkTGFuZXM7aWYoKGUmYykhPT1jKXtIZygpO2EucGluZ2VkTGFuZXN8PWEuc3VzcGVuZGVkTGFuZXMmZTticmVha31hLnRpbWVvdXRIYW5kbGU9b2YoVWouYmluZChudWxsLGEpLGQpO2JyZWFrfVVqKGEpO2JyZWFrO2Nhc2UgNDpJaShhLGMpO2lmKChjJjQxODYxMTIpPT09YylicmVhaztkPWEuZXZlbnRUaW1lcztmb3IoZT0tMTswPGM7KXt2YXIgZz0zMS1WYyhjKTtmPTE8PGc7Zz1kW2ddO2c+ZSYmKGU9Zyk7YyY9fmZ9Yz1lO2M9TygpLWM7Yz0oMTIwPmM/MTIwOjQ4MD5jPzQ4MDoxMDgwPmM/MTA4MDoxOTIwPmM/MTkyMDozRTM+Yz8zRTM6NDMyMD5cbmM/NDMyMDoxOTYwKm5qKGMvMTk2MCkpLWM7aWYoMTA8Yyl7YS50aW1lb3V0SGFuZGxlPW9mKFVqLmJpbmQobnVsbCxhKSxjKTticmVha31VaihhKTticmVhaztjYXNlIDU6VWooYSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcih5KDMyOSkpO319TWooYSxPKCkpO3JldHVybiBhLmNhbGxiYWNrTm9kZT09PWI/TmouYmluZChudWxsLGEpOm51bGx9ZnVuY3Rpb24gSWkoYSxiKXtiJj1+dWo7YiY9fkhpO2Euc3VzcGVuZGVkTGFuZXN8PWI7YS5waW5nZWRMYW5lcyY9fmI7Zm9yKGE9YS5leHBpcmF0aW9uVGltZXM7MDxiOyl7dmFyIGM9MzEtVmMoYiksZD0xPDxjO2FbY109LTE7YiY9fmR9fVxuZnVuY3Rpb24gTGooYSl7aWYoMCE9PShYJjQ4KSl0aHJvdyBFcnJvcih5KDMyNykpO09qKCk7aWYoYT09PVUmJjAhPT0oYS5leHBpcmVkTGFuZXMmVykpe3ZhciBiPVc7dmFyIGM9VGooYSxiKTswIT09KHRqJkhpKSYmKGI9VWMoYSxiKSxjPVRqKGEsYikpfWVsc2UgYj1VYyhhLDApLGM9VGooYSxiKTswIT09YS50YWcmJjI9PT1jJiYoWHw9NjQsYS5oeWRyYXRlJiYoYS5oeWRyYXRlPSExLHFmKGEuY29udGFpbmVySW5mbykpLGI9V2MoYSksMCE9PWImJihjPVRqKGEsYikpKTtpZigxPT09Yyl0aHJvdyBjPXNqLFFqKGEsMCksSWkoYSxiKSxNaihhLE8oKSksYzthLmZpbmlzaGVkV29yaz1hLmN1cnJlbnQuYWx0ZXJuYXRlO2EuZmluaXNoZWRMYW5lcz1iO1VqKGEpO01qKGEsTygpKTtyZXR1cm4gbnVsbH1cbmZ1bmN0aW9uIFZqKCl7aWYobnVsbCE9PUNqKXt2YXIgYT1DajtDaj1udWxsO2EuZm9yRWFjaChmdW5jdGlvbihhKXthLmV4cGlyZWRMYW5lc3w9MjQmYS5wZW5kaW5nTGFuZXM7TWooYSxPKCkpfSl9aWcoKX1mdW5jdGlvbiBXaihhLGIpe3ZhciBjPVg7WHw9MTt0cnl7cmV0dXJuIGEoYil9ZmluYWxseXtYPWMsMD09PVgmJih3aigpLGlnKCkpfX1mdW5jdGlvbiBYaihhLGIpe3ZhciBjPVg7WCY9LTI7WHw9ODt0cnl7cmV0dXJuIGEoYil9ZmluYWxseXtYPWMsMD09PVgmJih3aigpLGlnKCkpfX1mdW5jdGlvbiBuaShhLGIpe0kocmoscWopO3FqfD1iO3RqfD1ifWZ1bmN0aW9uIEtpKCl7cWo9cmouY3VycmVudDtIKHJqKX1cbmZ1bmN0aW9uIFFqKGEsYil7YS5maW5pc2hlZFdvcms9bnVsbDthLmZpbmlzaGVkTGFuZXM9MDt2YXIgYz1hLnRpbWVvdXRIYW5kbGU7LTEhPT1jJiYoYS50aW1lb3V0SGFuZGxlPS0xLHBmKGMpKTtpZihudWxsIT09WSlmb3IoYz1ZLnJldHVybjtudWxsIT09Yzspe3ZhciBkPWM7c3dpdGNoKGQudGFnKXtjYXNlIDE6ZD1kLnR5cGUuY2hpbGRDb250ZXh0VHlwZXM7bnVsbCE9PWQmJnZvaWQgMCE9PWQmJkdmKCk7YnJlYWs7Y2FzZSAzOmZoKCk7SChOKTtIKE0pO3VoKCk7YnJlYWs7Y2FzZSA1OmhoKGQpO2JyZWFrO2Nhc2UgNDpmaCgpO2JyZWFrO2Nhc2UgMTM6SChQKTticmVhaztjYXNlIDE5OkgoUCk7YnJlYWs7Y2FzZSAxMDpyZyhkKTticmVhaztjYXNlIDIzOmNhc2UgMjQ6S2koKX1jPWMucmV0dXJufVU9YTtZPVRnKGEuY3VycmVudCxudWxsKTtXPXFqPXRqPWI7Vj0wO3NqPW51bGw7dWo9SGk9RGc9MH1cbmZ1bmN0aW9uIFNqKGEsYil7ZG97dmFyIGM9WTt0cnl7cWcoKTt2aC5jdXJyZW50PUdoO2lmKHloKXtmb3IodmFyIGQ9Ui5tZW1vaXplZFN0YXRlO251bGwhPT1kOyl7dmFyIGU9ZC5xdWV1ZTtudWxsIT09ZSYmKGUucGVuZGluZz1udWxsKTtkPWQubmV4dH15aD0hMX14aD0wO1Q9Uz1SPW51bGw7emg9ITE7cGouY3VycmVudD1udWxsO2lmKG51bGw9PT1jfHxudWxsPT09Yy5yZXR1cm4pe1Y9MTtzaj1iO1k9bnVsbDticmVha31hOnt2YXIgZj1hLGc9Yy5yZXR1cm4saD1jLGs9YjtiPVc7aC5mbGFnc3w9MjA0ODtoLmZpcnN0RWZmZWN0PWgubGFzdEVmZmVjdD1udWxsO2lmKG51bGwhPT1rJiZcIm9iamVjdFwiPT09dHlwZW9mIGsmJlwiZnVuY3Rpb25cIj09PXR5cGVvZiBrLnRoZW4pe3ZhciBsPWs7aWYoMD09PShoLm1vZGUmMikpe3ZhciBuPWguYWx0ZXJuYXRlO24/KGgudXBkYXRlUXVldWU9bi51cGRhdGVRdWV1ZSxoLm1lbW9pemVkU3RhdGU9bi5tZW1vaXplZFN0YXRlLGgubGFuZXM9bi5sYW5lcyk6XG4oaC51cGRhdGVRdWV1ZT1udWxsLGgubWVtb2l6ZWRTdGF0ZT1udWxsKX12YXIgQT0wIT09KFAuY3VycmVudCYxKSxwPWc7ZG97dmFyIEM7aWYoQz0xMz09PXAudGFnKXt2YXIgeD1wLm1lbW9pemVkU3RhdGU7aWYobnVsbCE9PXgpQz1udWxsIT09eC5kZWh5ZHJhdGVkPyEwOiExO2Vsc2V7dmFyIHc9cC5tZW1vaXplZFByb3BzO0M9dm9pZCAwPT09dy5mYWxsYmFjaz8hMTohMCE9PXcudW5zdGFibGVfYXZvaWRUaGlzRmFsbGJhY2s/ITA6QT8hMTohMH19aWYoQyl7dmFyIHo9cC51cGRhdGVRdWV1ZTtpZihudWxsPT09eil7dmFyIHU9bmV3IFNldDt1LmFkZChsKTtwLnVwZGF0ZVF1ZXVlPXV9ZWxzZSB6LmFkZChsKTtpZigwPT09KHAubW9kZSYyKSl7cC5mbGFnc3w9NjQ7aC5mbGFnc3w9MTYzODQ7aC5mbGFncyY9LTI5ODE7aWYoMT09PWgudGFnKWlmKG51bGw9PT1oLmFsdGVybmF0ZSloLnRhZz0xNztlbHNle3ZhciB0PXpnKC0xLDEpO3QudGFnPTI7QWcoaCx0KX1oLmxhbmVzfD0xO2JyZWFrIGF9az1cbnZvaWQgMDtoPWI7dmFyIHE9Zi5waW5nQ2FjaGU7bnVsbD09PXE/KHE9Zi5waW5nQ2FjaGU9bmV3IE9pLGs9bmV3IFNldCxxLnNldChsLGspKTooaz1xLmdldChsKSx2b2lkIDA9PT1rJiYoaz1uZXcgU2V0LHEuc2V0KGwsaykpKTtpZighay5oYXMoaCkpe2suYWRkKGgpO3ZhciB2PVlqLmJpbmQobnVsbCxmLGwsaCk7bC50aGVuKHYsdil9cC5mbGFnc3w9NDA5NjtwLmxhbmVzPWI7YnJlYWsgYX1wPXAucmV0dXJufXdoaWxlKG51bGwhPT1wKTtrPUVycm9yKChSYShoLnR5cGUpfHxcIkEgUmVhY3QgY29tcG9uZW50XCIpK1wiIHN1c3BlbmRlZCB3aGlsZSByZW5kZXJpbmcsIGJ1dCBubyBmYWxsYmFjayBVSSB3YXMgc3BlY2lmaWVkLlxcblxcbkFkZCBhIDxTdXNwZW5zZSBmYWxsYmFjaz0uLi4+IGNvbXBvbmVudCBoaWdoZXIgaW4gdGhlIHRyZWUgdG8gcHJvdmlkZSBhIGxvYWRpbmcgaW5kaWNhdG9yIG9yIHBsYWNlaG9sZGVyIHRvIGRpc3BsYXkuXCIpfTUhPT1WJiYoVj0yKTtrPU1pKGssaCk7cD1cbmc7ZG97c3dpdGNoKHAudGFnKXtjYXNlIDM6Zj1rO3AuZmxhZ3N8PTQwOTY7YiY9LWI7cC5sYW5lc3w9Yjt2YXIgSj1QaShwLGYsYik7QmcocCxKKTticmVhayBhO2Nhc2UgMTpmPWs7dmFyIEs9cC50eXBlLFE9cC5zdGF0ZU5vZGU7aWYoMD09PShwLmZsYWdzJjY0KSYmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBLLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcnx8bnVsbCE9PVEmJlwiZnVuY3Rpb25cIj09PXR5cGVvZiBRLmNvbXBvbmVudERpZENhdGNoJiYobnVsbD09PVRpfHwhVGkuaGFzKFEpKSkpe3AuZmxhZ3N8PTQwOTY7YiY9LWI7cC5sYW5lc3w9Yjt2YXIgTD1TaShwLGYsYik7QmcocCxMKTticmVhayBhfX1wPXAucmV0dXJufXdoaWxlKG51bGwhPT1wKX1aaihjKX1jYXRjaCh2YSl7Yj12YTtZPT09YyYmbnVsbCE9PWMmJihZPWM9Yy5yZXR1cm4pO2NvbnRpbnVlfWJyZWFrfXdoaWxlKDEpfVxuZnVuY3Rpb24gUGooKXt2YXIgYT1vai5jdXJyZW50O29qLmN1cnJlbnQ9R2g7cmV0dXJuIG51bGw9PT1hP0doOmF9ZnVuY3Rpb24gVGooYSxiKXt2YXIgYz1YO1h8PTE2O3ZhciBkPVBqKCk7VT09PWEmJlc9PT1ifHxRaihhLGIpO2RvIHRyeXthaygpO2JyZWFrfWNhdGNoKGUpe1NqKGEsZSl9d2hpbGUoMSk7cWcoKTtYPWM7b2ouY3VycmVudD1kO2lmKG51bGwhPT1ZKXRocm93IEVycm9yKHkoMjYxKSk7VT1udWxsO1c9MDtyZXR1cm4gVn1mdW5jdGlvbiBhaygpe2Zvcig7bnVsbCE9PVk7KWJrKFkpfWZ1bmN0aW9uIFJqKCl7Zm9yKDtudWxsIT09WSYmIVFmKCk7KWJrKFkpfWZ1bmN0aW9uIGJrKGEpe3ZhciBiPWNrKGEuYWx0ZXJuYXRlLGEscWopO2EubWVtb2l6ZWRQcm9wcz1hLnBlbmRpbmdQcm9wcztudWxsPT09Yj9aaihhKTpZPWI7cGouY3VycmVudD1udWxsfVxuZnVuY3Rpb24gWmooYSl7dmFyIGI9YTtkb3t2YXIgYz1iLmFsdGVybmF0ZTthPWIucmV0dXJuO2lmKDA9PT0oYi5mbGFncyYyMDQ4KSl7Yz1HaShjLGIscWopO2lmKG51bGwhPT1jKXtZPWM7cmV0dXJufWM9YjtpZigyNCE9PWMudGFnJiYyMyE9PWMudGFnfHxudWxsPT09Yy5tZW1vaXplZFN0YXRlfHwwIT09KHFqJjEwNzM3NDE4MjQpfHwwPT09KGMubW9kZSY0KSl7Zm9yKHZhciBkPTAsZT1jLmNoaWxkO251bGwhPT1lOylkfD1lLmxhbmVzfGUuY2hpbGRMYW5lcyxlPWUuc2libGluZztjLmNoaWxkTGFuZXM9ZH1udWxsIT09YSYmMD09PShhLmZsYWdzJjIwNDgpJiYobnVsbD09PWEuZmlyc3RFZmZlY3QmJihhLmZpcnN0RWZmZWN0PWIuZmlyc3RFZmZlY3QpLG51bGwhPT1iLmxhc3RFZmZlY3QmJihudWxsIT09YS5sYXN0RWZmZWN0JiYoYS5sYXN0RWZmZWN0Lm5leHRFZmZlY3Q9Yi5maXJzdEVmZmVjdCksYS5sYXN0RWZmZWN0PWIubGFzdEVmZmVjdCksMTxiLmZsYWdzJiYobnVsbCE9PVxuYS5sYXN0RWZmZWN0P2EubGFzdEVmZmVjdC5uZXh0RWZmZWN0PWI6YS5maXJzdEVmZmVjdD1iLGEubGFzdEVmZmVjdD1iKSl9ZWxzZXtjPUxpKGIpO2lmKG51bGwhPT1jKXtjLmZsYWdzJj0yMDQ3O1k9YztyZXR1cm59bnVsbCE9PWEmJihhLmZpcnN0RWZmZWN0PWEubGFzdEVmZmVjdD1udWxsLGEuZmxhZ3N8PTIwNDgpfWI9Yi5zaWJsaW5nO2lmKG51bGwhPT1iKXtZPWI7cmV0dXJufVk9Yj1hfXdoaWxlKG51bGwhPT1iKTswPT09ViYmKFY9NSl9ZnVuY3Rpb24gVWooYSl7dmFyIGI9ZWcoKTtnZyg5OSxkay5iaW5kKG51bGwsYSxiKSk7cmV0dXJuIG51bGx9XG5mdW5jdGlvbiBkayhhLGIpe2RvIE9qKCk7d2hpbGUobnVsbCE9PXlqKTtpZigwIT09KFgmNDgpKXRocm93IEVycm9yKHkoMzI3KSk7dmFyIGM9YS5maW5pc2hlZFdvcms7aWYobnVsbD09PWMpcmV0dXJuIG51bGw7YS5maW5pc2hlZFdvcms9bnVsbDthLmZpbmlzaGVkTGFuZXM9MDtpZihjPT09YS5jdXJyZW50KXRocm93IEVycm9yKHkoMTc3KSk7YS5jYWxsYmFja05vZGU9bnVsbDt2YXIgZD1jLmxhbmVzfGMuY2hpbGRMYW5lcyxlPWQsZj1hLnBlbmRpbmdMYW5lcyZ+ZTthLnBlbmRpbmdMYW5lcz1lO2Euc3VzcGVuZGVkTGFuZXM9MDthLnBpbmdlZExhbmVzPTA7YS5leHBpcmVkTGFuZXMmPWU7YS5tdXRhYmxlUmVhZExhbmVzJj1lO2EuZW50YW5nbGVkTGFuZXMmPWU7ZT1hLmVudGFuZ2xlbWVudHM7Zm9yKHZhciBnPWEuZXZlbnRUaW1lcyxoPWEuZXhwaXJhdGlvblRpbWVzOzA8Zjspe3ZhciBrPTMxLVZjKGYpLGw9MTw8aztlW2tdPTA7Z1trXT0tMTtoW2tdPS0xO2YmPX5sfW51bGwhPT1cbkNqJiYwPT09KGQmMjQpJiZDai5oYXMoYSkmJkNqLmRlbGV0ZShhKTthPT09VSYmKFk9VT1udWxsLFc9MCk7MTxjLmZsYWdzP251bGwhPT1jLmxhc3RFZmZlY3Q/KGMubGFzdEVmZmVjdC5uZXh0RWZmZWN0PWMsZD1jLmZpcnN0RWZmZWN0KTpkPWM6ZD1jLmZpcnN0RWZmZWN0O2lmKG51bGwhPT1kKXtlPVg7WHw9MzI7cGouY3VycmVudD1udWxsO2tmPWZkO2c9TmUoKTtpZihPZShnKSl7aWYoXCJzZWxlY3Rpb25TdGFydFwiaW4gZyloPXtzdGFydDpnLnNlbGVjdGlvblN0YXJ0LGVuZDpnLnNlbGVjdGlvbkVuZH07ZWxzZSBhOmlmKGg9KGg9Zy5vd25lckRvY3VtZW50KSYmaC5kZWZhdWx0Vmlld3x8d2luZG93LChsPWguZ2V0U2VsZWN0aW9uJiZoLmdldFNlbGVjdGlvbigpKSYmMCE9PWwucmFuZ2VDb3VudCl7aD1sLmFuY2hvck5vZGU7Zj1sLmFuY2hvck9mZnNldDtrPWwuZm9jdXNOb2RlO2w9bC5mb2N1c09mZnNldDt0cnl7aC5ub2RlVHlwZSxrLm5vZGVUeXBlfWNhdGNoKHZhKXtoPW51bGw7XG5icmVhayBhfXZhciBuPTAsQT0tMSxwPS0xLEM9MCx4PTAsdz1nLHo9bnVsbDtiOmZvcig7Oyl7Zm9yKHZhciB1Ozspe3chPT1ofHwwIT09ZiYmMyE9PXcubm9kZVR5cGV8fChBPW4rZik7dyE9PWt8fDAhPT1sJiYzIT09dy5ub2RlVHlwZXx8KHA9bitsKTszPT09dy5ub2RlVHlwZSYmKG4rPXcubm9kZVZhbHVlLmxlbmd0aCk7aWYobnVsbD09PSh1PXcuZmlyc3RDaGlsZCkpYnJlYWs7ej13O3c9dX1mb3IoOzspe2lmKHc9PT1nKWJyZWFrIGI7ej09PWgmJisrQz09PWYmJihBPW4pO3o9PT1rJiYrK3g9PT1sJiYocD1uKTtpZihudWxsIT09KHU9dy5uZXh0U2libGluZykpYnJlYWs7dz16O3o9dy5wYXJlbnROb2RlfXc9dX1oPS0xPT09QXx8LTE9PT1wP251bGw6e3N0YXJ0OkEsZW5kOnB9fWVsc2UgaD1udWxsO2g9aHx8e3N0YXJ0OjAsZW5kOjB9fWVsc2UgaD1udWxsO2xmPXtmb2N1c2VkRWxlbTpnLHNlbGVjdGlvblJhbmdlOmh9O2ZkPSExO0lqPW51bGw7Smo9ITE7Wj1kO2RvIHRyeXtlaygpfWNhdGNoKHZhKXtpZihudWxsPT09XG5aKXRocm93IEVycm9yKHkoMzMwKSk7V2koWix2YSk7Wj1aLm5leHRFZmZlY3R9d2hpbGUobnVsbCE9PVopO0lqPW51bGw7Wj1kO2RvIHRyeXtmb3IoZz1hO251bGwhPT1aOyl7dmFyIHQ9Wi5mbGFnczt0JjE2JiZwYihaLnN0YXRlTm9kZSxcIlwiKTtpZih0JjEyOCl7dmFyIHE9Wi5hbHRlcm5hdGU7aWYobnVsbCE9PXEpe3ZhciB2PXEucmVmO251bGwhPT12JiYoXCJmdW5jdGlvblwiPT09dHlwZW9mIHY/dihudWxsKTp2LmN1cnJlbnQ9bnVsbCl9fXN3aXRjaCh0JjEwMzgpe2Nhc2UgMjpmaihaKTtaLmZsYWdzJj0tMzticmVhaztjYXNlIDY6ZmooWik7Wi5mbGFncyY9LTM7aWooWi5hbHRlcm5hdGUsWik7YnJlYWs7Y2FzZSAxMDI0OlouZmxhZ3MmPS0xMDI1O2JyZWFrO2Nhc2UgMTAyODpaLmZsYWdzJj0tMTAyNTtpaihaLmFsdGVybmF0ZSxaKTticmVhaztjYXNlIDQ6aWooWi5hbHRlcm5hdGUsWik7YnJlYWs7Y2FzZSA4Omg9WjtjaihnLGgpO3ZhciBKPWguYWx0ZXJuYXRlO2RqKGgpO251bGwhPT1cbkomJmRqKEopfVo9Wi5uZXh0RWZmZWN0fX1jYXRjaCh2YSl7aWYobnVsbD09PVopdGhyb3cgRXJyb3IoeSgzMzApKTtXaShaLHZhKTtaPVoubmV4dEVmZmVjdH13aGlsZShudWxsIT09Wik7dj1sZjtxPU5lKCk7dD12LmZvY3VzZWRFbGVtO2c9di5zZWxlY3Rpb25SYW5nZTtpZihxIT09dCYmdCYmdC5vd25lckRvY3VtZW50JiZNZSh0Lm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHQpKXtudWxsIT09ZyYmT2UodCkmJihxPWcuc3RhcnQsdj1nLmVuZCx2b2lkIDA9PT12JiYodj1xKSxcInNlbGVjdGlvblN0YXJ0XCJpbiB0Pyh0LnNlbGVjdGlvblN0YXJ0PXEsdC5zZWxlY3Rpb25FbmQ9TWF0aC5taW4odix0LnZhbHVlLmxlbmd0aCkpOih2PShxPXQub3duZXJEb2N1bWVudHx8ZG9jdW1lbnQpJiZxLmRlZmF1bHRWaWV3fHx3aW5kb3csdi5nZXRTZWxlY3Rpb24mJih2PXYuZ2V0U2VsZWN0aW9uKCksaD10LnRleHRDb250ZW50Lmxlbmd0aCxKPU1hdGgubWluKGcuc3RhcnQsaCksZz12b2lkIDA9PT1cbmcuZW5kP0o6TWF0aC5taW4oZy5lbmQsaCksIXYuZXh0ZW5kJiZKPmcmJihoPWcsZz1KLEo9aCksaD1MZSh0LEopLGY9TGUodCxnKSxoJiZmJiYoMSE9PXYucmFuZ2VDb3VudHx8di5hbmNob3JOb2RlIT09aC5ub2RlfHx2LmFuY2hvck9mZnNldCE9PWgub2Zmc2V0fHx2LmZvY3VzTm9kZSE9PWYubm9kZXx8di5mb2N1c09mZnNldCE9PWYub2Zmc2V0KSYmKHE9cS5jcmVhdGVSYW5nZSgpLHEuc2V0U3RhcnQoaC5ub2RlLGgub2Zmc2V0KSx2LnJlbW92ZUFsbFJhbmdlcygpLEo+Zz8odi5hZGRSYW5nZShxKSx2LmV4dGVuZChmLm5vZGUsZi5vZmZzZXQpKToocS5zZXRFbmQoZi5ub2RlLGYub2Zmc2V0KSx2LmFkZFJhbmdlKHEpKSkpKSk7cT1bXTtmb3Iodj10O3Y9di5wYXJlbnROb2RlOykxPT09di5ub2RlVHlwZSYmcS5wdXNoKHtlbGVtZW50OnYsbGVmdDp2LnNjcm9sbExlZnQsdG9wOnYuc2Nyb2xsVG9wfSk7XCJmdW5jdGlvblwiPT09dHlwZW9mIHQuZm9jdXMmJnQuZm9jdXMoKTtmb3IodD1cbjA7dDxxLmxlbmd0aDt0Kyspdj1xW3RdLHYuZWxlbWVudC5zY3JvbGxMZWZ0PXYubGVmdCx2LmVsZW1lbnQuc2Nyb2xsVG9wPXYudG9wfWZkPSEha2Y7bGY9a2Y9bnVsbDthLmN1cnJlbnQ9YztaPWQ7ZG8gdHJ5e2Zvcih0PWE7bnVsbCE9PVo7KXt2YXIgSz1aLmZsYWdzO0smMzYmJllpKHQsWi5hbHRlcm5hdGUsWik7aWYoSyYxMjgpe3E9dm9pZCAwO3ZhciBRPVoucmVmO2lmKG51bGwhPT1RKXt2YXIgTD1aLnN0YXRlTm9kZTtzd2l0Y2goWi50YWcpe2Nhc2UgNTpxPUw7YnJlYWs7ZGVmYXVsdDpxPUx9XCJmdW5jdGlvblwiPT09dHlwZW9mIFE/UShxKTpRLmN1cnJlbnQ9cX19Wj1aLm5leHRFZmZlY3R9fWNhdGNoKHZhKXtpZihudWxsPT09Wil0aHJvdyBFcnJvcih5KDMzMCkpO1dpKFosdmEpO1o9Wi5uZXh0RWZmZWN0fXdoaWxlKG51bGwhPT1aKTtaPW51bGw7JGYoKTtYPWV9ZWxzZSBhLmN1cnJlbnQ9YztpZih4ail4aj0hMSx5aj1hLHpqPWI7ZWxzZSBmb3IoWj1kO251bGwhPT1aOyliPVxuWi5uZXh0RWZmZWN0LFoubmV4dEVmZmVjdD1udWxsLFouZmxhZ3MmOCYmKEs9WixLLnNpYmxpbmc9bnVsbCxLLnN0YXRlTm9kZT1udWxsKSxaPWI7ZD1hLnBlbmRpbmdMYW5lczswPT09ZCYmKFRpPW51bGwpOzE9PT1kP2E9PT1Faj9EaisrOihEaj0wLEVqPWEpOkRqPTA7Yz1jLnN0YXRlTm9kZTtpZihNZiYmXCJmdW5jdGlvblwiPT09dHlwZW9mIE1mLm9uQ29tbWl0RmliZXJSb290KXRyeXtNZi5vbkNvbW1pdEZpYmVyUm9vdChMZixjLHZvaWQgMCw2ND09PShjLmN1cnJlbnQuZmxhZ3MmNjQpKX1jYXRjaCh2YSl7fU1qKGEsTygpKTtpZihRaSl0aHJvdyBRaT0hMSxhPVJpLFJpPW51bGwsYTtpZigwIT09KFgmOCkpcmV0dXJuIG51bGw7aWcoKTtyZXR1cm4gbnVsbH1cbmZ1bmN0aW9uIGVrKCl7Zm9yKDtudWxsIT09Wjspe3ZhciBhPVouYWx0ZXJuYXRlO0pqfHxudWxsPT09SWp8fCgwIT09KFouZmxhZ3MmOCk/ZGMoWixJaikmJihKaj0hMCk6MTM9PT1aLnRhZyYmbWooYSxaKSYmZGMoWixJaikmJihKaj0hMCkpO3ZhciBiPVouZmxhZ3M7MCE9PShiJjI1NikmJlhpKGEsWik7MD09PShiJjUxMil8fHhqfHwoeGo9ITAsaGcoOTcsZnVuY3Rpb24oKXtPaigpO3JldHVybiBudWxsfSkpO1o9Wi5uZXh0RWZmZWN0fX1mdW5jdGlvbiBPaigpe2lmKDkwIT09emope3ZhciBhPTk3PHpqPzk3OnpqO3pqPTkwO3JldHVybiBnZyhhLGZrKX1yZXR1cm4hMX1mdW5jdGlvbiAkaShhLGIpe0FqLnB1c2goYixhKTt4anx8KHhqPSEwLGhnKDk3LGZ1bmN0aW9uKCl7T2ooKTtyZXR1cm4gbnVsbH0pKX1mdW5jdGlvbiBaaShhLGIpe0JqLnB1c2goYixhKTt4anx8KHhqPSEwLGhnKDk3LGZ1bmN0aW9uKCl7T2ooKTtyZXR1cm4gbnVsbH0pKX1cbmZ1bmN0aW9uIGZrKCl7aWYobnVsbD09PXlqKXJldHVybiExO3ZhciBhPXlqO3lqPW51bGw7aWYoMCE9PShYJjQ4KSl0aHJvdyBFcnJvcih5KDMzMSkpO3ZhciBiPVg7WHw9MzI7dmFyIGM9Qmo7Qmo9W107Zm9yKHZhciBkPTA7ZDxjLmxlbmd0aDtkKz0yKXt2YXIgZT1jW2RdLGY9Y1tkKzFdLGc9ZS5kZXN0cm95O2UuZGVzdHJveT12b2lkIDA7aWYoXCJmdW5jdGlvblwiPT09dHlwZW9mIGcpdHJ5e2coKX1jYXRjaChrKXtpZihudWxsPT09Zil0aHJvdyBFcnJvcih5KDMzMCkpO1dpKGYsayl9fWM9QWo7QWo9W107Zm9yKGQ9MDtkPGMubGVuZ3RoO2QrPTIpe2U9Y1tkXTtmPWNbZCsxXTt0cnl7dmFyIGg9ZS5jcmVhdGU7ZS5kZXN0cm95PWgoKX1jYXRjaChrKXtpZihudWxsPT09Zil0aHJvdyBFcnJvcih5KDMzMCkpO1dpKGYsayl9fWZvcihoPWEuY3VycmVudC5maXJzdEVmZmVjdDtudWxsIT09aDspYT1oLm5leHRFZmZlY3QsaC5uZXh0RWZmZWN0PW51bGwsaC5mbGFncyY4JiYoaC5zaWJsaW5nPVxubnVsbCxoLnN0YXRlTm9kZT1udWxsKSxoPWE7WD1iO2lnKCk7cmV0dXJuITB9ZnVuY3Rpb24gZ2soYSxiLGMpe2I9TWkoYyxiKTtiPVBpKGEsYiwxKTtBZyhhLGIpO2I9SGcoKTthPUtqKGEsMSk7bnVsbCE9PWEmJigkYyhhLDEsYiksTWooYSxiKSl9XG5mdW5jdGlvbiBXaShhLGIpe2lmKDM9PT1hLnRhZylnayhhLGEsYik7ZWxzZSBmb3IodmFyIGM9YS5yZXR1cm47bnVsbCE9PWM7KXtpZigzPT09Yy50YWcpe2drKGMsYSxiKTticmVha31lbHNlIGlmKDE9PT1jLnRhZyl7dmFyIGQ9Yy5zdGF0ZU5vZGU7aWYoXCJmdW5jdGlvblwiPT09dHlwZW9mIGMudHlwZS5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3J8fFwiZnVuY3Rpb25cIj09PXR5cGVvZiBkLmNvbXBvbmVudERpZENhdGNoJiYobnVsbD09PVRpfHwhVGkuaGFzKGQpKSl7YT1NaShiLGEpO3ZhciBlPVNpKGMsYSwxKTtBZyhjLGUpO2U9SGcoKTtjPUtqKGMsMSk7aWYobnVsbCE9PWMpJGMoYywxLGUpLE1qKGMsZSk7ZWxzZSBpZihcImZ1bmN0aW9uXCI9PT10eXBlb2YgZC5jb21wb25lbnREaWRDYXRjaCYmKG51bGw9PT1UaXx8IVRpLmhhcyhkKSkpdHJ5e2QuY29tcG9uZW50RGlkQ2F0Y2goYixhKX1jYXRjaChmKXt9YnJlYWt9fWM9Yy5yZXR1cm59fVxuZnVuY3Rpb24gWWooYSxiLGMpe3ZhciBkPWEucGluZ0NhY2hlO251bGwhPT1kJiZkLmRlbGV0ZShiKTtiPUhnKCk7YS5waW5nZWRMYW5lc3w9YS5zdXNwZW5kZWRMYW5lcyZjO1U9PT1hJiYoVyZjKT09PWMmJig0PT09Vnx8Mz09PVYmJihXJjYyOTE0NTYwKT09PVcmJjUwMD5PKCktamo/UWooYSwwKTp1anw9Yyk7TWooYSxiKX1mdW5jdGlvbiBsaihhLGIpe3ZhciBjPWEuc3RhdGVOb2RlO251bGwhPT1jJiZjLmRlbGV0ZShiKTtiPTA7MD09PWImJihiPWEubW9kZSwwPT09KGImMik/Yj0xOjA9PT0oYiY0KT9iPTk5PT09ZWcoKT8xOjI6KDA9PT1HaiYmKEdqPXRqKSxiPVljKDYyOTE0NTYwJn5HaiksMD09PWImJihiPTQxOTQzMDQpKSk7Yz1IZygpO2E9S2ooYSxiKTtudWxsIT09YSYmKCRjKGEsYixjKSxNaihhLGMpKX12YXIgY2s7XG5jaz1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9Yi5sYW5lcztpZihudWxsIT09YSlpZihhLm1lbW9pemVkUHJvcHMhPT1iLnBlbmRpbmdQcm9wc3x8Ti5jdXJyZW50KXVnPSEwO2Vsc2UgaWYoMCE9PShjJmQpKXVnPTAhPT0oYS5mbGFncyYxNjM4NCk/ITA6ITE7ZWxzZXt1Zz0hMTtzd2l0Y2goYi50YWcpe2Nhc2UgMzpyaShiKTtzaCgpO2JyZWFrO2Nhc2UgNTpnaChiKTticmVhaztjYXNlIDE6RmYoYi50eXBlKSYmSmYoYik7YnJlYWs7Y2FzZSA0OmVoKGIsYi5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyk7YnJlYWs7Y2FzZSAxMDpkPWIubWVtb2l6ZWRQcm9wcy52YWx1ZTt2YXIgZT1iLnR5cGUuX2NvbnRleHQ7SShtZyxlLl9jdXJyZW50VmFsdWUpO2UuX2N1cnJlbnRWYWx1ZT1kO2JyZWFrO2Nhc2UgMTM6aWYobnVsbCE9PWIubWVtb2l6ZWRTdGF0ZSl7aWYoMCE9PShjJmIuY2hpbGQuY2hpbGRMYW5lcykpcmV0dXJuIHRpKGEsYixjKTtJKFAsUC5jdXJyZW50JjEpO2I9aGkoYSxiLGMpO3JldHVybiBudWxsIT09XG5iP2Iuc2libGluZzpudWxsfUkoUCxQLmN1cnJlbnQmMSk7YnJlYWs7Y2FzZSAxOTpkPTAhPT0oYyZiLmNoaWxkTGFuZXMpO2lmKDAhPT0oYS5mbGFncyY2NCkpe2lmKGQpcmV0dXJuIEFpKGEsYixjKTtiLmZsYWdzfD02NH1lPWIubWVtb2l6ZWRTdGF0ZTtudWxsIT09ZSYmKGUucmVuZGVyaW5nPW51bGwsZS50YWlsPW51bGwsZS5sYXN0RWZmZWN0PW51bGwpO0koUCxQLmN1cnJlbnQpO2lmKGQpYnJlYWs7ZWxzZSByZXR1cm4gbnVsbDtjYXNlIDIzOmNhc2UgMjQ6cmV0dXJuIGIubGFuZXM9MCxtaShhLGIsYyl9cmV0dXJuIGhpKGEsYixjKX1lbHNlIHVnPSExO2IubGFuZXM9MDtzd2l0Y2goYi50YWcpe2Nhc2UgMjpkPWIudHlwZTtudWxsIT09YSYmKGEuYWx0ZXJuYXRlPW51bGwsYi5hbHRlcm5hdGU9bnVsbCxiLmZsYWdzfD0yKTthPWIucGVuZGluZ1Byb3BzO2U9RWYoYixNLmN1cnJlbnQpO3RnKGIsYyk7ZT1DaChudWxsLGIsZCxhLGUsYyk7Yi5mbGFnc3w9MTtpZihcIm9iamVjdFwiPT09XG50eXBlb2YgZSYmbnVsbCE9PWUmJlwiZnVuY3Rpb25cIj09PXR5cGVvZiBlLnJlbmRlciYmdm9pZCAwPT09ZS4kJHR5cGVvZil7Yi50YWc9MTtiLm1lbW9pemVkU3RhdGU9bnVsbDtiLnVwZGF0ZVF1ZXVlPW51bGw7aWYoRmYoZCkpe3ZhciBmPSEwO0pmKGIpfWVsc2UgZj0hMTtiLm1lbW9pemVkU3RhdGU9bnVsbCE9PWUuc3RhdGUmJnZvaWQgMCE9PWUuc3RhdGU/ZS5zdGF0ZTpudWxsO3hnKGIpO3ZhciBnPWQuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzO1wiZnVuY3Rpb25cIj09PXR5cGVvZiBnJiZHZyhiLGQsZyxhKTtlLnVwZGF0ZXI9S2c7Yi5zdGF0ZU5vZGU9ZTtlLl9yZWFjdEludGVybmFscz1iO09nKGIsZCxhLGMpO2I9cWkobnVsbCxiLGQsITAsZixjKX1lbHNlIGIudGFnPTAsZmkobnVsbCxiLGUsYyksYj1iLmNoaWxkO3JldHVybiBiO2Nhc2UgMTY6ZT1iLmVsZW1lbnRUeXBlO2E6e251bGwhPT1hJiYoYS5hbHRlcm5hdGU9bnVsbCxiLmFsdGVybmF0ZT1udWxsLGIuZmxhZ3N8PTIpO1xuYT1iLnBlbmRpbmdQcm9wcztmPWUuX2luaXQ7ZT1mKGUuX3BheWxvYWQpO2IudHlwZT1lO2Y9Yi50YWc9aGsoZSk7YT1sZyhlLGEpO3N3aXRjaChmKXtjYXNlIDA6Yj1saShudWxsLGIsZSxhLGMpO2JyZWFrIGE7Y2FzZSAxOmI9cGkobnVsbCxiLGUsYSxjKTticmVhayBhO2Nhc2UgMTE6Yj1naShudWxsLGIsZSxhLGMpO2JyZWFrIGE7Y2FzZSAxNDpiPWlpKG51bGwsYixlLGxnKGUudHlwZSxhKSxkLGMpO2JyZWFrIGF9dGhyb3cgRXJyb3IoeSgzMDYsZSxcIlwiKSk7fXJldHVybiBiO2Nhc2UgMDpyZXR1cm4gZD1iLnR5cGUsZT1iLnBlbmRpbmdQcm9wcyxlPWIuZWxlbWVudFR5cGU9PT1kP2U6bGcoZCxlKSxsaShhLGIsZCxlLGMpO2Nhc2UgMTpyZXR1cm4gZD1iLnR5cGUsZT1iLnBlbmRpbmdQcm9wcyxlPWIuZWxlbWVudFR5cGU9PT1kP2U6bGcoZCxlKSxwaShhLGIsZCxlLGMpO2Nhc2UgMzpyaShiKTtkPWIudXBkYXRlUXVldWU7aWYobnVsbD09PWF8fG51bGw9PT1kKXRocm93IEVycm9yKHkoMjgyKSk7XG5kPWIucGVuZGluZ1Byb3BzO2U9Yi5tZW1vaXplZFN0YXRlO2U9bnVsbCE9PWU/ZS5lbGVtZW50Om51bGw7eWcoYSxiKTtDZyhiLGQsbnVsbCxjKTtkPWIubWVtb2l6ZWRTdGF0ZS5lbGVtZW50O2lmKGQ9PT1lKXNoKCksYj1oaShhLGIsYyk7ZWxzZXtlPWIuc3RhdGVOb2RlO2lmKGY9ZS5oeWRyYXRlKWtoPXJmKGIuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8uZmlyc3RDaGlsZCksamg9YixmPWxoPSEwO2lmKGYpe2E9ZS5tdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhO2lmKG51bGwhPWEpZm9yKGU9MDtlPGEubGVuZ3RoO2UrPTIpZj1hW2VdLGYuX3dvcmtJblByb2dyZXNzVmVyc2lvblByaW1hcnk9YVtlKzFdLHRoLnB1c2goZik7Yz1aZyhiLG51bGwsZCxjKTtmb3IoYi5jaGlsZD1jO2M7KWMuZmxhZ3M9Yy5mbGFncyYtM3wxMDI0LGM9Yy5zaWJsaW5nfWVsc2UgZmkoYSxiLGQsYyksc2goKTtiPWIuY2hpbGR9cmV0dXJuIGI7Y2FzZSA1OnJldHVybiBnaChiKSxudWxsPT09YSYmXG5waChiKSxkPWIudHlwZSxlPWIucGVuZGluZ1Byb3BzLGY9bnVsbCE9PWE/YS5tZW1vaXplZFByb3BzOm51bGwsZz1lLmNoaWxkcmVuLG5mKGQsZSk/Zz1udWxsOm51bGwhPT1mJiZuZihkLGYpJiYoYi5mbGFnc3w9MTYpLG9pKGEsYiksZmkoYSxiLGcsYyksYi5jaGlsZDtjYXNlIDY6cmV0dXJuIG51bGw9PT1hJiZwaChiKSxudWxsO2Nhc2UgMTM6cmV0dXJuIHRpKGEsYixjKTtjYXNlIDQ6cmV0dXJuIGVoKGIsYi5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyksZD1iLnBlbmRpbmdQcm9wcyxudWxsPT09YT9iLmNoaWxkPVlnKGIsbnVsbCxkLGMpOmZpKGEsYixkLGMpLGIuY2hpbGQ7Y2FzZSAxMTpyZXR1cm4gZD1iLnR5cGUsZT1iLnBlbmRpbmdQcm9wcyxlPWIuZWxlbWVudFR5cGU9PT1kP2U6bGcoZCxlKSxnaShhLGIsZCxlLGMpO2Nhc2UgNzpyZXR1cm4gZmkoYSxiLGIucGVuZGluZ1Byb3BzLGMpLGIuY2hpbGQ7Y2FzZSA4OnJldHVybiBmaShhLGIsYi5wZW5kaW5nUHJvcHMuY2hpbGRyZW4sXG5jKSxiLmNoaWxkO2Nhc2UgMTI6cmV0dXJuIGZpKGEsYixiLnBlbmRpbmdQcm9wcy5jaGlsZHJlbixjKSxiLmNoaWxkO2Nhc2UgMTA6YTp7ZD1iLnR5cGUuX2NvbnRleHQ7ZT1iLnBlbmRpbmdQcm9wcztnPWIubWVtb2l6ZWRQcm9wcztmPWUudmFsdWU7dmFyIGg9Yi50eXBlLl9jb250ZXh0O0kobWcsaC5fY3VycmVudFZhbHVlKTtoLl9jdXJyZW50VmFsdWU9ZjtpZihudWxsIT09ZylpZihoPWcudmFsdWUsZj1IZShoLGYpPzA6KFwiZnVuY3Rpb25cIj09PXR5cGVvZiBkLl9jYWxjdWxhdGVDaGFuZ2VkQml0cz9kLl9jYWxjdWxhdGVDaGFuZ2VkQml0cyhoLGYpOjEwNzM3NDE4MjMpfDAsMD09PWYpe2lmKGcuY2hpbGRyZW49PT1lLmNoaWxkcmVuJiYhTi5jdXJyZW50KXtiPWhpKGEsYixjKTticmVhayBhfX1lbHNlIGZvcihoPWIuY2hpbGQsbnVsbCE9PWgmJihoLnJldHVybj1iKTtudWxsIT09aDspe3ZhciBrPWguZGVwZW5kZW5jaWVzO2lmKG51bGwhPT1rKXtnPWguY2hpbGQ7Zm9yKHZhciBsPVxuay5maXJzdENvbnRleHQ7bnVsbCE9PWw7KXtpZihsLmNvbnRleHQ9PT1kJiYwIT09KGwub2JzZXJ2ZWRCaXRzJmYpKXsxPT09aC50YWcmJihsPXpnKC0xLGMmLWMpLGwudGFnPTIsQWcoaCxsKSk7aC5sYW5lc3w9YztsPWguYWx0ZXJuYXRlO251bGwhPT1sJiYobC5sYW5lc3w9Yyk7c2coaC5yZXR1cm4sYyk7ay5sYW5lc3w9YzticmVha31sPWwubmV4dH19ZWxzZSBnPTEwPT09aC50YWc/aC50eXBlPT09Yi50eXBlP251bGw6aC5jaGlsZDpoLmNoaWxkO2lmKG51bGwhPT1nKWcucmV0dXJuPWg7ZWxzZSBmb3IoZz1oO251bGwhPT1nOyl7aWYoZz09PWIpe2c9bnVsbDticmVha31oPWcuc2libGluZztpZihudWxsIT09aCl7aC5yZXR1cm49Zy5yZXR1cm47Zz1oO2JyZWFrfWc9Zy5yZXR1cm59aD1nfWZpKGEsYixlLmNoaWxkcmVuLGMpO2I9Yi5jaGlsZH1yZXR1cm4gYjtjYXNlIDk6cmV0dXJuIGU9Yi50eXBlLGY9Yi5wZW5kaW5nUHJvcHMsZD1mLmNoaWxkcmVuLHRnKGIsYyksZT12ZyhlLFxuZi51bnN0YWJsZV9vYnNlcnZlZEJpdHMpLGQ9ZChlKSxiLmZsYWdzfD0xLGZpKGEsYixkLGMpLGIuY2hpbGQ7Y2FzZSAxNDpyZXR1cm4gZT1iLnR5cGUsZj1sZyhlLGIucGVuZGluZ1Byb3BzKSxmPWxnKGUudHlwZSxmKSxpaShhLGIsZSxmLGQsYyk7Y2FzZSAxNTpyZXR1cm4ga2koYSxiLGIudHlwZSxiLnBlbmRpbmdQcm9wcyxkLGMpO2Nhc2UgMTc6cmV0dXJuIGQ9Yi50eXBlLGU9Yi5wZW5kaW5nUHJvcHMsZT1iLmVsZW1lbnRUeXBlPT09ZD9lOmxnKGQsZSksbnVsbCE9PWEmJihhLmFsdGVybmF0ZT1udWxsLGIuYWx0ZXJuYXRlPW51bGwsYi5mbGFnc3w9MiksYi50YWc9MSxGZihkKT8oYT0hMCxKZihiKSk6YT0hMSx0ZyhiLGMpLE1nKGIsZCxlKSxPZyhiLGQsZSxjKSxxaShudWxsLGIsZCwhMCxhLGMpO2Nhc2UgMTk6cmV0dXJuIEFpKGEsYixjKTtjYXNlIDIzOnJldHVybiBtaShhLGIsYyk7Y2FzZSAyNDpyZXR1cm4gbWkoYSxiLGMpfXRocm93IEVycm9yKHkoMTU2LGIudGFnKSk7XG59O2Z1bmN0aW9uIGlrKGEsYixjLGQpe3RoaXMudGFnPWE7dGhpcy5rZXk9Yzt0aGlzLnNpYmxpbmc9dGhpcy5jaGlsZD10aGlzLnJldHVybj10aGlzLnN0YXRlTm9kZT10aGlzLnR5cGU9dGhpcy5lbGVtZW50VHlwZT1udWxsO3RoaXMuaW5kZXg9MDt0aGlzLnJlZj1udWxsO3RoaXMucGVuZGluZ1Byb3BzPWI7dGhpcy5kZXBlbmRlbmNpZXM9dGhpcy5tZW1vaXplZFN0YXRlPXRoaXMudXBkYXRlUXVldWU9dGhpcy5tZW1vaXplZFByb3BzPW51bGw7dGhpcy5tb2RlPWQ7dGhpcy5mbGFncz0wO3RoaXMubGFzdEVmZmVjdD10aGlzLmZpcnN0RWZmZWN0PXRoaXMubmV4dEVmZmVjdD1udWxsO3RoaXMuY2hpbGRMYW5lcz10aGlzLmxhbmVzPTA7dGhpcy5hbHRlcm5hdGU9bnVsbH1mdW5jdGlvbiBuaChhLGIsYyxkKXtyZXR1cm4gbmV3IGlrKGEsYixjLGQpfWZ1bmN0aW9uIGppKGEpe2E9YS5wcm90b3R5cGU7cmV0dXJuISghYXx8IWEuaXNSZWFjdENvbXBvbmVudCl9XG5mdW5jdGlvbiBoayhhKXtpZihcImZ1bmN0aW9uXCI9PT10eXBlb2YgYSlyZXR1cm4gamkoYSk/MTowO2lmKHZvaWQgMCE9PWEmJm51bGwhPT1hKXthPWEuJCR0eXBlb2Y7aWYoYT09PUFhKXJldHVybiAxMTtpZihhPT09RGEpcmV0dXJuIDE0fXJldHVybiAyfVxuZnVuY3Rpb24gVGcoYSxiKXt2YXIgYz1hLmFsdGVybmF0ZTtudWxsPT09Yz8oYz1uaChhLnRhZyxiLGEua2V5LGEubW9kZSksYy5lbGVtZW50VHlwZT1hLmVsZW1lbnRUeXBlLGMudHlwZT1hLnR5cGUsYy5zdGF0ZU5vZGU9YS5zdGF0ZU5vZGUsYy5hbHRlcm5hdGU9YSxhLmFsdGVybmF0ZT1jKTooYy5wZW5kaW5nUHJvcHM9YixjLnR5cGU9YS50eXBlLGMuZmxhZ3M9MCxjLm5leHRFZmZlY3Q9bnVsbCxjLmZpcnN0RWZmZWN0PW51bGwsYy5sYXN0RWZmZWN0PW51bGwpO2MuY2hpbGRMYW5lcz1hLmNoaWxkTGFuZXM7Yy5sYW5lcz1hLmxhbmVzO2MuY2hpbGQ9YS5jaGlsZDtjLm1lbW9pemVkUHJvcHM9YS5tZW1vaXplZFByb3BzO2MubWVtb2l6ZWRTdGF0ZT1hLm1lbW9pemVkU3RhdGU7Yy51cGRhdGVRdWV1ZT1hLnVwZGF0ZVF1ZXVlO2I9YS5kZXBlbmRlbmNpZXM7Yy5kZXBlbmRlbmNpZXM9bnVsbD09PWI/bnVsbDp7bGFuZXM6Yi5sYW5lcyxmaXJzdENvbnRleHQ6Yi5maXJzdENvbnRleHR9O1xuYy5zaWJsaW5nPWEuc2libGluZztjLmluZGV4PWEuaW5kZXg7Yy5yZWY9YS5yZWY7cmV0dXJuIGN9XG5mdW5jdGlvbiBWZyhhLGIsYyxkLGUsZil7dmFyIGc9MjtkPWE7aWYoXCJmdW5jdGlvblwiPT09dHlwZW9mIGEpamkoYSkmJihnPTEpO2Vsc2UgaWYoXCJzdHJpbmdcIj09PXR5cGVvZiBhKWc9NTtlbHNlIGE6c3dpdGNoKGEpe2Nhc2UgdWE6cmV0dXJuIFhnKGMuY2hpbGRyZW4sZSxmLGIpO2Nhc2UgSGE6Zz04O2V8PTE2O2JyZWFrO2Nhc2Ugd2E6Zz04O2V8PTE7YnJlYWs7Y2FzZSB4YTpyZXR1cm4gYT1uaCgxMixjLGIsZXw4KSxhLmVsZW1lbnRUeXBlPXhhLGEudHlwZT14YSxhLmxhbmVzPWYsYTtjYXNlIEJhOnJldHVybiBhPW5oKDEzLGMsYixlKSxhLnR5cGU9QmEsYS5lbGVtZW50VHlwZT1CYSxhLmxhbmVzPWYsYTtjYXNlIENhOnJldHVybiBhPW5oKDE5LGMsYixlKSxhLmVsZW1lbnRUeXBlPUNhLGEubGFuZXM9ZixhO2Nhc2UgSWE6cmV0dXJuIHZpKGMsZSxmLGIpO2Nhc2UgSmE6cmV0dXJuIGE9bmgoMjQsYyxiLGUpLGEuZWxlbWVudFR5cGU9SmEsYS5sYW5lcz1mLGE7ZGVmYXVsdDppZihcIm9iamVjdFwiPT09XG50eXBlb2YgYSYmbnVsbCE9PWEpc3dpdGNoKGEuJCR0eXBlb2Ype2Nhc2UgeWE6Zz0xMDticmVhayBhO2Nhc2UgemE6Zz05O2JyZWFrIGE7Y2FzZSBBYTpnPTExO2JyZWFrIGE7Y2FzZSBEYTpnPTE0O2JyZWFrIGE7Y2FzZSBFYTpnPTE2O2Q9bnVsbDticmVhayBhO2Nhc2UgRmE6Zz0yMjticmVhayBhfXRocm93IEVycm9yKHkoMTMwLG51bGw9PWE/YTp0eXBlb2YgYSxcIlwiKSk7fWI9bmgoZyxjLGIsZSk7Yi5lbGVtZW50VHlwZT1hO2IudHlwZT1kO2IubGFuZXM9ZjtyZXR1cm4gYn1mdW5jdGlvbiBYZyhhLGIsYyxkKXthPW5oKDcsYSxkLGIpO2EubGFuZXM9YztyZXR1cm4gYX1mdW5jdGlvbiB2aShhLGIsYyxkKXthPW5oKDIzLGEsZCxiKTthLmVsZW1lbnRUeXBlPUlhO2EubGFuZXM9YztyZXR1cm4gYX1mdW5jdGlvbiBVZyhhLGIsYyl7YT1uaCg2LGEsbnVsbCxiKTthLmxhbmVzPWM7cmV0dXJuIGF9XG5mdW5jdGlvbiBXZyhhLGIsYyl7Yj1uaCg0LG51bGwhPT1hLmNoaWxkcmVuP2EuY2hpbGRyZW46W10sYS5rZXksYik7Yi5sYW5lcz1jO2Iuc3RhdGVOb2RlPXtjb250YWluZXJJbmZvOmEuY29udGFpbmVySW5mbyxwZW5kaW5nQ2hpbGRyZW46bnVsbCxpbXBsZW1lbnRhdGlvbjphLmltcGxlbWVudGF0aW9ufTtyZXR1cm4gYn1cbmZ1bmN0aW9uIGprKGEsYixjKXt0aGlzLnRhZz1iO3RoaXMuY29udGFpbmVySW5mbz1hO3RoaXMuZmluaXNoZWRXb3JrPXRoaXMucGluZ0NhY2hlPXRoaXMuY3VycmVudD10aGlzLnBlbmRpbmdDaGlsZHJlbj1udWxsO3RoaXMudGltZW91dEhhbmRsZT0tMTt0aGlzLnBlbmRpbmdDb250ZXh0PXRoaXMuY29udGV4dD1udWxsO3RoaXMuaHlkcmF0ZT1jO3RoaXMuY2FsbGJhY2tOb2RlPW51bGw7dGhpcy5jYWxsYmFja1ByaW9yaXR5PTA7dGhpcy5ldmVudFRpbWVzPVpjKDApO3RoaXMuZXhwaXJhdGlvblRpbWVzPVpjKC0xKTt0aGlzLmVudGFuZ2xlZExhbmVzPXRoaXMuZmluaXNoZWRMYW5lcz10aGlzLm11dGFibGVSZWFkTGFuZXM9dGhpcy5leHBpcmVkTGFuZXM9dGhpcy5waW5nZWRMYW5lcz10aGlzLnN1c3BlbmRlZExhbmVzPXRoaXMucGVuZGluZ0xhbmVzPTA7dGhpcy5lbnRhbmdsZW1lbnRzPVpjKDApO3RoaXMubXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YT1udWxsfVxuZnVuY3Rpb24ga2soYSxiLGMpe3ZhciBkPTM8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTpudWxsO3JldHVybnskJHR5cGVvZjp0YSxrZXk6bnVsbD09ZD9udWxsOlwiXCIrZCxjaGlsZHJlbjphLGNvbnRhaW5lckluZm86YixpbXBsZW1lbnRhdGlvbjpjfX1cbmZ1bmN0aW9uIGxrKGEsYixjLGQpe3ZhciBlPWIuY3VycmVudCxmPUhnKCksZz1JZyhlKTthOmlmKGMpe2M9Yy5fcmVhY3RJbnRlcm5hbHM7Yjp7aWYoWmIoYykhPT1jfHwxIT09Yy50YWcpdGhyb3cgRXJyb3IoeSgxNzApKTt2YXIgaD1jO2Rve3N3aXRjaChoLnRhZyl7Y2FzZSAzOmg9aC5zdGF0ZU5vZGUuY29udGV4dDticmVhayBiO2Nhc2UgMTppZihGZihoLnR5cGUpKXtoPWguc3RhdGVOb2RlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0O2JyZWFrIGJ9fWg9aC5yZXR1cm59d2hpbGUobnVsbCE9PWgpO3Rocm93IEVycm9yKHkoMTcxKSk7fWlmKDE9PT1jLnRhZyl7dmFyIGs9Yy50eXBlO2lmKEZmKGspKXtjPUlmKGMsayxoKTticmVhayBhfX1jPWh9ZWxzZSBjPUNmO251bGw9PT1iLmNvbnRleHQ/Yi5jb250ZXh0PWM6Yi5wZW5kaW5nQ29udGV4dD1jO2I9emcoZixnKTtiLnBheWxvYWQ9e2VsZW1lbnQ6YX07ZD12b2lkIDA9PT1kP251bGw6ZDtudWxsIT09XG5kJiYoYi5jYWxsYmFjaz1kKTtBZyhlLGIpO0pnKGUsZyxmKTtyZXR1cm4gZ31mdW5jdGlvbiBtayhhKXthPWEuY3VycmVudDtpZighYS5jaGlsZClyZXR1cm4gbnVsbDtzd2l0Y2goYS5jaGlsZC50YWcpe2Nhc2UgNTpyZXR1cm4gYS5jaGlsZC5zdGF0ZU5vZGU7ZGVmYXVsdDpyZXR1cm4gYS5jaGlsZC5zdGF0ZU5vZGV9fWZ1bmN0aW9uIG5rKGEsYil7YT1hLm1lbW9pemVkU3RhdGU7aWYobnVsbCE9PWEmJm51bGwhPT1hLmRlaHlkcmF0ZWQpe3ZhciBjPWEucmV0cnlMYW5lO2EucmV0cnlMYW5lPTAhPT1jJiZjPGI/YzpifX1mdW5jdGlvbiBvayhhLGIpe25rKGEsYik7KGE9YS5hbHRlcm5hdGUpJiZuayhhLGIpfWZ1bmN0aW9uIHBrKCl7cmV0dXJuIG51bGx9XG5mdW5jdGlvbiBxayhhLGIsYyl7dmFyIGQ9bnVsbCE9YyYmbnVsbCE9Yy5oeWRyYXRpb25PcHRpb25zJiZjLmh5ZHJhdGlvbk9wdGlvbnMubXV0YWJsZVNvdXJjZXN8fG51bGw7Yz1uZXcgamsoYSxiLG51bGwhPWMmJiEwPT09Yy5oeWRyYXRlKTtiPW5oKDMsbnVsbCxudWxsLDI9PT1iPzc6MT09PWI/MzowKTtjLmN1cnJlbnQ9YjtiLnN0YXRlTm9kZT1jO3hnKGIpO2FbZmZdPWMuY3VycmVudDtjZig4PT09YS5ub2RlVHlwZT9hLnBhcmVudE5vZGU6YSk7aWYoZClmb3IoYT0wO2E8ZC5sZW5ndGg7YSsrKXtiPWRbYV07dmFyIGU9Yi5fZ2V0VmVyc2lvbjtlPWUoYi5fc291cmNlKTtudWxsPT1jLm11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGE/Yy5tdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhPVtiLGVdOmMubXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YS5wdXNoKGIsZSl9dGhpcy5faW50ZXJuYWxSb290PWN9XG5xay5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKGEpe2xrKGEsdGhpcy5faW50ZXJuYWxSb290LG51bGwsbnVsbCl9O3FrLnByb3RvdHlwZS51bm1vdW50PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5faW50ZXJuYWxSb290LGI9YS5jb250YWluZXJJbmZvO2xrKG51bGwsYSxudWxsLGZ1bmN0aW9uKCl7YltmZl09bnVsbH0pfTtmdW5jdGlvbiByayhhKXtyZXR1cm4hKCFhfHwxIT09YS5ub2RlVHlwZSYmOSE9PWEubm9kZVR5cGUmJjExIT09YS5ub2RlVHlwZSYmKDghPT1hLm5vZGVUeXBlfHxcIiByZWFjdC1tb3VudC1wb2ludC11bnN0YWJsZSBcIiE9PWEubm9kZVZhbHVlKSl9XG5mdW5jdGlvbiBzayhhLGIpe2J8fChiPWE/OT09PWEubm9kZVR5cGU/YS5kb2N1bWVudEVsZW1lbnQ6YS5maXJzdENoaWxkOm51bGwsYj0hKCFifHwxIT09Yi5ub2RlVHlwZXx8IWIuaGFzQXR0cmlidXRlKFwiZGF0YS1yZWFjdHJvb3RcIikpKTtpZighYilmb3IodmFyIGM7Yz1hLmxhc3RDaGlsZDspYS5yZW1vdmVDaGlsZChjKTtyZXR1cm4gbmV3IHFrKGEsMCxiP3toeWRyYXRlOiEwfTp2b2lkIDApfVxuZnVuY3Rpb24gdGsoYSxiLGMsZCxlKXt2YXIgZj1jLl9yZWFjdFJvb3RDb250YWluZXI7aWYoZil7dmFyIGc9Zi5faW50ZXJuYWxSb290O2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBlKXt2YXIgaD1lO2U9ZnVuY3Rpb24oKXt2YXIgYT1tayhnKTtoLmNhbGwoYSl9fWxrKGIsZyxhLGUpfWVsc2V7Zj1jLl9yZWFjdFJvb3RDb250YWluZXI9c2soYyxkKTtnPWYuX2ludGVybmFsUm9vdDtpZihcImZ1bmN0aW9uXCI9PT10eXBlb2YgZSl7dmFyIGs9ZTtlPWZ1bmN0aW9uKCl7dmFyIGE9bWsoZyk7ay5jYWxsKGEpfX1YaihmdW5jdGlvbigpe2xrKGIsZyxhLGUpfSl9cmV0dXJuIG1rKGcpfWVjPWZ1bmN0aW9uKGEpe2lmKDEzPT09YS50YWcpe3ZhciBiPUhnKCk7SmcoYSw0LGIpO29rKGEsNCl9fTtmYz1mdW5jdGlvbihhKXtpZigxMz09PWEudGFnKXt2YXIgYj1IZygpO0pnKGEsNjcxMDg4NjQsYik7b2soYSw2NzEwODg2NCl9fTtcbmdjPWZ1bmN0aW9uKGEpe2lmKDEzPT09YS50YWcpe3ZhciBiPUhnKCksYz1JZyhhKTtKZyhhLGMsYik7b2soYSxjKX19O2hjPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGIoKX07XG55Yj1mdW5jdGlvbihhLGIsYyl7c3dpdGNoKGIpe2Nhc2UgXCJpbnB1dFwiOmFiKGEsYyk7Yj1jLm5hbWU7aWYoXCJyYWRpb1wiPT09Yy50eXBlJiZudWxsIT1iKXtmb3IoYz1hO2MucGFyZW50Tm9kZTspYz1jLnBhcmVudE5vZGU7Yz1jLnF1ZXJ5U2VsZWN0b3JBbGwoXCJpbnB1dFtuYW1lPVwiK0pTT04uc3RyaW5naWZ5KFwiXCIrYikrJ11bdHlwZT1cInJhZGlvXCJdJyk7Zm9yKGI9MDtiPGMubGVuZ3RoO2IrKyl7dmFyIGQ9Y1tiXTtpZihkIT09YSYmZC5mb3JtPT09YS5mb3JtKXt2YXIgZT1EYihkKTtpZighZSl0aHJvdyBFcnJvcih5KDkwKSk7V2EoZCk7YWIoZCxlKX19fWJyZWFrO2Nhc2UgXCJ0ZXh0YXJlYVwiOmliKGEsYyk7YnJlYWs7Y2FzZSBcInNlbGVjdFwiOmI9Yy52YWx1ZSxudWxsIT1iJiZmYihhLCEhYy5tdWx0aXBsZSxiLCExKX19O0diPVdqO1xuSGI9ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZj1YO1h8PTQ7dHJ5e3JldHVybiBnZyg5OCxhLmJpbmQobnVsbCxiLGMsZCxlKSl9ZmluYWxseXtYPWYsMD09PVgmJih3aigpLGlnKCkpfX07SWI9ZnVuY3Rpb24oKXswPT09KFgmNDkpJiYoVmooKSxPaigpKX07SmI9ZnVuY3Rpb24oYSxiKXt2YXIgYz1YO1h8PTI7dHJ5e3JldHVybiBhKGIpfWZpbmFsbHl7WD1jLDA9PT1YJiYod2ooKSxpZygpKX19O2Z1bmN0aW9uIHVrKGEsYil7dmFyIGM9Mjxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOm51bGw7aWYoIXJrKGIpKXRocm93IEVycm9yKHkoMjAwKSk7cmV0dXJuIGtrKGEsYixudWxsLGMpfXZhciB2az17RXZlbnRzOltDYix1ZSxEYixFYixGYixPaix7Y3VycmVudDohMX1dfSx3az17ZmluZEZpYmVyQnlIb3N0SW5zdGFuY2U6d2MsYnVuZGxlVHlwZTowLHZlcnNpb246XCIxNy4wLjJcIixyZW5kZXJlclBhY2thZ2VOYW1lOlwicmVhY3QtZG9tXCJ9O1xudmFyIHhrPXtidW5kbGVUeXBlOndrLmJ1bmRsZVR5cGUsdmVyc2lvbjp3ay52ZXJzaW9uLHJlbmRlcmVyUGFja2FnZU5hbWU6d2sucmVuZGVyZXJQYWNrYWdlTmFtZSxyZW5kZXJlckNvbmZpZzp3ay5yZW5kZXJlckNvbmZpZyxvdmVycmlkZUhvb2tTdGF0ZTpudWxsLG92ZXJyaWRlSG9va1N0YXRlRGVsZXRlUGF0aDpudWxsLG92ZXJyaWRlSG9va1N0YXRlUmVuYW1lUGF0aDpudWxsLG92ZXJyaWRlUHJvcHM6bnVsbCxvdmVycmlkZVByb3BzRGVsZXRlUGF0aDpudWxsLG92ZXJyaWRlUHJvcHNSZW5hbWVQYXRoOm51bGwsc2V0U3VzcGVuc2VIYW5kbGVyOm51bGwsc2NoZWR1bGVVcGRhdGU6bnVsbCxjdXJyZW50RGlzcGF0Y2hlclJlZjpyYS5SZWFjdEN1cnJlbnREaXNwYXRjaGVyLGZpbmRIb3N0SW5zdGFuY2VCeUZpYmVyOmZ1bmN0aW9uKGEpe2E9Y2MoYSk7cmV0dXJuIG51bGw9PT1hP251bGw6YS5zdGF0ZU5vZGV9LGZpbmRGaWJlckJ5SG9zdEluc3RhbmNlOndrLmZpbmRGaWJlckJ5SG9zdEluc3RhbmNlfHxcbnBrLGZpbmRIb3N0SW5zdGFuY2VzRm9yUmVmcmVzaDpudWxsLHNjaGVkdWxlUmVmcmVzaDpudWxsLHNjaGVkdWxlUm9vdDpudWxsLHNldFJlZnJlc2hIYW5kbGVyOm51bGwsZ2V0Q3VycmVudEZpYmVyOm51bGx9O2lmKFwidW5kZWZpbmVkXCIhPT10eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fKXt2YXIgeWs9X19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fO2lmKCF5ay5pc0Rpc2FibGVkJiZ5ay5zdXBwb3J0c0ZpYmVyKXRyeXtMZj15ay5pbmplY3QoeGspLE1mPXlrfWNhdGNoKGEpe319ZXhwb3J0cy5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRD12aztleHBvcnRzLmNyZWF0ZVBvcnRhbD11aztcbmV4cG9ydHMuZmluZERPTU5vZGU9ZnVuY3Rpb24oYSl7aWYobnVsbD09YSlyZXR1cm4gbnVsbDtpZigxPT09YS5ub2RlVHlwZSlyZXR1cm4gYTt2YXIgYj1hLl9yZWFjdEludGVybmFscztpZih2b2lkIDA9PT1iKXtpZihcImZ1bmN0aW9uXCI9PT10eXBlb2YgYS5yZW5kZXIpdGhyb3cgRXJyb3IoeSgxODgpKTt0aHJvdyBFcnJvcih5KDI2OCxPYmplY3Qua2V5cyhhKSkpO31hPWNjKGIpO2E9bnVsbD09PWE/bnVsbDphLnN0YXRlTm9kZTtyZXR1cm4gYX07ZXhwb3J0cy5mbHVzaFN5bmM9ZnVuY3Rpb24oYSxiKXt2YXIgYz1YO2lmKDAhPT0oYyY0OCkpcmV0dXJuIGEoYik7WHw9MTt0cnl7aWYoYSlyZXR1cm4gZ2coOTksYS5iaW5kKG51bGwsYikpfWZpbmFsbHl7WD1jLGlnKCl9fTtleHBvcnRzLmh5ZHJhdGU9ZnVuY3Rpb24oYSxiLGMpe2lmKCFyayhiKSl0aHJvdyBFcnJvcih5KDIwMCkpO3JldHVybiB0ayhudWxsLGEsYiwhMCxjKX07XG5leHBvcnRzLnJlbmRlcj1mdW5jdGlvbihhLGIsYyl7aWYoIXJrKGIpKXRocm93IEVycm9yKHkoMjAwKSk7cmV0dXJuIHRrKG51bGwsYSxiLCExLGMpfTtleHBvcnRzLnVubW91bnRDb21wb25lbnRBdE5vZGU9ZnVuY3Rpb24oYSl7aWYoIXJrKGEpKXRocm93IEVycm9yKHkoNDApKTtyZXR1cm4gYS5fcmVhY3RSb290Q29udGFpbmVyPyhYaihmdW5jdGlvbigpe3RrKG51bGwsbnVsbCxhLCExLGZ1bmN0aW9uKCl7YS5fcmVhY3RSb290Q29udGFpbmVyPW51bGw7YVtmZl09bnVsbH0pfSksITApOiExfTtleHBvcnRzLnVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzPVdqO2V4cG9ydHMudW5zdGFibGVfY3JlYXRlUG9ydGFsPWZ1bmN0aW9uKGEsYil7cmV0dXJuIHVrKGEsYiwyPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bnVsbCl9O1xuZXhwb3J0cy51bnN0YWJsZV9yZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcj1mdW5jdGlvbihhLGIsYyxkKXtpZighcmsoYykpdGhyb3cgRXJyb3IoeSgyMDApKTtpZihudWxsPT1hfHx2b2lkIDA9PT1hLl9yZWFjdEludGVybmFscyl0aHJvdyBFcnJvcih5KDM4KSk7cmV0dXJuIHRrKGEsYixjLCExLGQpfTtleHBvcnRzLnZlcnNpb249XCIxNy4wLjJcIjtcbiIsICIndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIGNoZWNrRENFKCkge1xuICAvKiBnbG9iYWwgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fICovXG4gIGlmIChcbiAgICB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fID09PSAndW5kZWZpbmVkJyB8fFxuICAgIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18uY2hlY2tEQ0UgIT09ICdmdW5jdGlvbidcbiAgKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gVGhpcyBicmFuY2ggaXMgdW5yZWFjaGFibGUgYmVjYXVzZSB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkXG4gICAgLy8gaW4gcHJvZHVjdGlvbiwgYnV0IHRoZSBjb25kaXRpb24gaXMgdHJ1ZSBvbmx5IGluIGRldmVsb3BtZW50LlxuICAgIC8vIFRoZXJlZm9yZSBpZiB0aGUgYnJhbmNoIGlzIHN0aWxsIGhlcmUsIGRlYWQgY29kZSBlbGltaW5hdGlvbiB3YXNuJ3RcbiAgICAvLyBwcm9wZXJseSBhcHBsaWVkLlxuICAgIC8vIERvbid0IGNoYW5nZSB0aGUgbWVzc2FnZS4gUmVhY3QgRGV2VG9vbHMgcmVsaWVzIG9uIGl0LiBBbHNvIG1ha2Ugc3VyZVxuICAgIC8vIHRoaXMgbWVzc2FnZSBkb2Vzbid0IG9jY3VyIGVsc2V3aGVyZSBpbiB0aGlzIGZ1bmN0aW9uLCBvciBpdCB3aWxsIGNhdXNlXG4gICAgLy8gYSBmYWxzZSBwb3NpdGl2ZS5cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ15fXicpO1xuICB9XG4gIHRyeSB7XG4gICAgLy8gVmVyaWZ5IHRoYXQgdGhlIGNvZGUgYWJvdmUgaGFzIGJlZW4gZGVhZCBjb2RlIGVsaW1pbmF0ZWQgKERDRSdkKS5cbiAgICBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18uY2hlY2tEQ0UoY2hlY2tEQ0UpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBEZXZUb29scyBzaG91bGRuJ3QgY3Jhc2ggUmVhY3QsIG5vIG1hdHRlciB3aGF0LlxuICAgIC8vIFdlIHNob3VsZCBzdGlsbCByZXBvcnQgaW4gY2FzZSB3ZSBicmVhayB0aGlzIGNvZGUuXG4gICAgY29uc29sZS5lcnJvcihlcnIpO1xuICB9XG59XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIC8vIERDRSBjaGVjayBzaG91bGQgaGFwcGVuIGJlZm9yZSBSZWFjdERPTSBidW5kbGUgZXhlY3V0ZXMgc28gdGhhdFxuICAvLyBEZXZUb29scyBjYW4gcmVwb3J0IGJhZCBtaW5pZmljYXRpb24gZHVyaW5nIGluamVjdGlvbi5cbiAgY2hlY2tEQ0UoKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1kb20ucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtZG9tLmRldmVsb3BtZW50LmpzJyk7XG59XG4iLCAiLyoqXG4gKiBAbGljZW5zZSBSZWFjdFxuICogdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUtc2hpbS5wcm9kdWN0aW9uLm1pbi5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG4ndXNlIHN0cmljdCc7dmFyIGU9cmVxdWlyZShcInJlYWN0XCIpO2Z1bmN0aW9uIGgoYSxiKXtyZXR1cm4gYT09PWImJigwIT09YXx8MS9hPT09MS9iKXx8YSE9PWEmJmIhPT1ifXZhciBrPVwiZnVuY3Rpb25cIj09PXR5cGVvZiBPYmplY3QuaXM/T2JqZWN0LmlzOmgsbD1lLnVzZVN0YXRlLG09ZS51c2VFZmZlY3Qsbj1lLnVzZUxheW91dEVmZmVjdCxwPWUudXNlRGVidWdWYWx1ZTtmdW5jdGlvbiBxKGEsYil7dmFyIGQ9YigpLGY9bCh7aW5zdDp7dmFsdWU6ZCxnZXRTbmFwc2hvdDpifX0pLGM9ZlswXS5pbnN0LGc9ZlsxXTtuKGZ1bmN0aW9uKCl7Yy52YWx1ZT1kO2MuZ2V0U25hcHNob3Q9YjtyKGMpJiZnKHtpbnN0OmN9KX0sW2EsZCxiXSk7bShmdW5jdGlvbigpe3IoYykmJmcoe2luc3Q6Y30pO3JldHVybiBhKGZ1bmN0aW9uKCl7cihjKSYmZyh7aW5zdDpjfSl9KX0sW2FdKTtwKGQpO3JldHVybiBkfVxuZnVuY3Rpb24gcihhKXt2YXIgYj1hLmdldFNuYXBzaG90O2E9YS52YWx1ZTt0cnl7dmFyIGQ9YigpO3JldHVybiFrKGEsZCl9Y2F0Y2goZil7cmV0dXJuITB9fWZ1bmN0aW9uIHQoYSxiKXtyZXR1cm4gYigpfXZhciB1PVwidW5kZWZpbmVkXCI9PT10eXBlb2Ygd2luZG93fHxcInVuZGVmaW5lZFwiPT09dHlwZW9mIHdpbmRvdy5kb2N1bWVudHx8XCJ1bmRlZmluZWRcIj09PXR5cGVvZiB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudD90OnE7ZXhwb3J0cy51c2VTeW5jRXh0ZXJuYWxTdG9yZT12b2lkIDAhPT1lLnVzZVN5bmNFeHRlcm5hbFN0b3JlP2UudXNlU3luY0V4dGVybmFsU3RvcmU6dTtcbiIsICIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vY2pzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlLXNoaW0ucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vY2pzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlLXNoaW0uZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsICIvKipcbiAqIEBsaWNlbnNlIFJlYWN0XG4gKiB1c2Utc3luYy1leHRlcm5hbC1zdG9yZS1zaGltL3dpdGgtc2VsZWN0b3IucHJvZHVjdGlvbi5taW4uanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuJ3VzZSBzdHJpY3QnO3ZhciBoPXJlcXVpcmUoXCJyZWFjdFwiKSxuPXJlcXVpcmUoXCJ1c2Utc3luYy1leHRlcm5hbC1zdG9yZS9zaGltXCIpO2Z1bmN0aW9uIHAoYSxiKXtyZXR1cm4gYT09PWImJigwIT09YXx8MS9hPT09MS9iKXx8YSE9PWEmJmIhPT1ifXZhciBxPVwiZnVuY3Rpb25cIj09PXR5cGVvZiBPYmplY3QuaXM/T2JqZWN0LmlzOnAscj1uLnVzZVN5bmNFeHRlcm5hbFN0b3JlLHQ9aC51c2VSZWYsdT1oLnVzZUVmZmVjdCx2PWgudXNlTWVtbyx3PWgudXNlRGVidWdWYWx1ZTtcbmV4cG9ydHMudXNlU3luY0V4dGVybmFsU3RvcmVXaXRoU2VsZWN0b3I9ZnVuY3Rpb24oYSxiLGUsbCxnKXt2YXIgYz10KG51bGwpO2lmKG51bGw9PT1jLmN1cnJlbnQpe3ZhciBmPXtoYXNWYWx1ZTohMSx2YWx1ZTpudWxsfTtjLmN1cnJlbnQ9Zn1lbHNlIGY9Yy5jdXJyZW50O2M9dihmdW5jdGlvbigpe2Z1bmN0aW9uIGEoYSl7aWYoIWMpe2M9ITA7ZD1hO2E9bChhKTtpZih2b2lkIDAhPT1nJiZmLmhhc1ZhbHVlKXt2YXIgYj1mLnZhbHVlO2lmKGcoYixhKSlyZXR1cm4gaz1ifXJldHVybiBrPWF9Yj1rO2lmKHEoZCxhKSlyZXR1cm4gYjt2YXIgZT1sKGEpO2lmKHZvaWQgMCE9PWcmJmcoYixlKSlyZXR1cm4gYjtkPWE7cmV0dXJuIGs9ZX12YXIgYz0hMSxkLGssbT12b2lkIDA9PT1lP251bGw6ZTtyZXR1cm5bZnVuY3Rpb24oKXtyZXR1cm4gYShiKCkpfSxudWxsPT09bT92b2lkIDA6ZnVuY3Rpb24oKXtyZXR1cm4gYShtKCkpfV19LFtiLGUsbCxnXSk7dmFyIGQ9cihhLGNbMF0sY1sxXSk7XG51KGZ1bmN0aW9uKCl7Zi5oYXNWYWx1ZT0hMDtmLnZhbHVlPWR9LFtkXSk7dyhkKTtyZXR1cm4gZH07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uL2Nqcy91c2Utc3luYy1leHRlcm5hbC1zdG9yZS1zaGltL3dpdGgtc2VsZWN0b3IucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vY2pzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlLXNoaW0vd2l0aC1zZWxlY3Rvci5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9leHRlbmRzKCkge1xuICBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcbiAgICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH07XG4gIHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufSIsICIvKiogQGxpY2Vuc2UgUmVhY3QgdjE2LjEzLjFcbiAqIHJlYWN0LWlzLnByb2R1Y3Rpb24ubWluLmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO3ZhciBiPVwiZnVuY3Rpb25cIj09PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5mb3IsYz1iP1N5bWJvbC5mb3IoXCJyZWFjdC5lbGVtZW50XCIpOjYwMTAzLGQ9Yj9TeW1ib2wuZm9yKFwicmVhY3QucG9ydGFsXCIpOjYwMTA2LGU9Yj9TeW1ib2wuZm9yKFwicmVhY3QuZnJhZ21lbnRcIik6NjAxMDcsZj1iP1N5bWJvbC5mb3IoXCJyZWFjdC5zdHJpY3RfbW9kZVwiKTo2MDEwOCxnPWI/U3ltYm9sLmZvcihcInJlYWN0LnByb2ZpbGVyXCIpOjYwMTE0LGg9Yj9TeW1ib2wuZm9yKFwicmVhY3QucHJvdmlkZXJcIik6NjAxMDksaz1iP1N5bWJvbC5mb3IoXCJyZWFjdC5jb250ZXh0XCIpOjYwMTEwLGw9Yj9TeW1ib2wuZm9yKFwicmVhY3QuYXN5bmNfbW9kZVwiKTo2MDExMSxtPWI/U3ltYm9sLmZvcihcInJlYWN0LmNvbmN1cnJlbnRfbW9kZVwiKTo2MDExMSxuPWI/U3ltYm9sLmZvcihcInJlYWN0LmZvcndhcmRfcmVmXCIpOjYwMTEyLHA9Yj9TeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VcIik6NjAxMTMscT1iP1xuU3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlX2xpc3RcIik6NjAxMjAscj1iP1N5bWJvbC5mb3IoXCJyZWFjdC5tZW1vXCIpOjYwMTE1LHQ9Yj9TeW1ib2wuZm9yKFwicmVhY3QubGF6eVwiKTo2MDExNix2PWI/U3ltYm9sLmZvcihcInJlYWN0LmJsb2NrXCIpOjYwMTIxLHc9Yj9TeW1ib2wuZm9yKFwicmVhY3QuZnVuZGFtZW50YWxcIik6NjAxMTcseD1iP1N5bWJvbC5mb3IoXCJyZWFjdC5yZXNwb25kZXJcIik6NjAxMTgseT1iP1N5bWJvbC5mb3IoXCJyZWFjdC5zY29wZVwiKTo2MDExOTtcbmZ1bmN0aW9uIHooYSl7aWYoXCJvYmplY3RcIj09PXR5cGVvZiBhJiZudWxsIT09YSl7dmFyIHU9YS4kJHR5cGVvZjtzd2l0Y2godSl7Y2FzZSBjOnN3aXRjaChhPWEudHlwZSxhKXtjYXNlIGw6Y2FzZSBtOmNhc2UgZTpjYXNlIGc6Y2FzZSBmOmNhc2UgcDpyZXR1cm4gYTtkZWZhdWx0OnN3aXRjaChhPWEmJmEuJCR0eXBlb2YsYSl7Y2FzZSBrOmNhc2UgbjpjYXNlIHQ6Y2FzZSByOmNhc2UgaDpyZXR1cm4gYTtkZWZhdWx0OnJldHVybiB1fX1jYXNlIGQ6cmV0dXJuIHV9fX1mdW5jdGlvbiBBKGEpe3JldHVybiB6KGEpPT09bX1leHBvcnRzLkFzeW5jTW9kZT1sO2V4cG9ydHMuQ29uY3VycmVudE1vZGU9bTtleHBvcnRzLkNvbnRleHRDb25zdW1lcj1rO2V4cG9ydHMuQ29udGV4dFByb3ZpZGVyPWg7ZXhwb3J0cy5FbGVtZW50PWM7ZXhwb3J0cy5Gb3J3YXJkUmVmPW47ZXhwb3J0cy5GcmFnbWVudD1lO2V4cG9ydHMuTGF6eT10O2V4cG9ydHMuTWVtbz1yO2V4cG9ydHMuUG9ydGFsPWQ7XG5leHBvcnRzLlByb2ZpbGVyPWc7ZXhwb3J0cy5TdHJpY3RNb2RlPWY7ZXhwb3J0cy5TdXNwZW5zZT1wO2V4cG9ydHMuaXNBc3luY01vZGU9ZnVuY3Rpb24oYSl7cmV0dXJuIEEoYSl8fHooYSk9PT1sfTtleHBvcnRzLmlzQ29uY3VycmVudE1vZGU9QTtleHBvcnRzLmlzQ29udGV4dENvbnN1bWVyPWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09a307ZXhwb3J0cy5pc0NvbnRleHRQcm92aWRlcj1mdW5jdGlvbihhKXtyZXR1cm4geihhKT09PWh9O2V4cG9ydHMuaXNFbGVtZW50PWZ1bmN0aW9uKGEpe3JldHVyblwib2JqZWN0XCI9PT10eXBlb2YgYSYmbnVsbCE9PWEmJmEuJCR0eXBlb2Y9PT1jfTtleHBvcnRzLmlzRm9yd2FyZFJlZj1mdW5jdGlvbihhKXtyZXR1cm4geihhKT09PW59O2V4cG9ydHMuaXNGcmFnbWVudD1mdW5jdGlvbihhKXtyZXR1cm4geihhKT09PWV9O2V4cG9ydHMuaXNMYXp5PWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09dH07XG5leHBvcnRzLmlzTWVtbz1mdW5jdGlvbihhKXtyZXR1cm4geihhKT09PXJ9O2V4cG9ydHMuaXNQb3J0YWw9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1kfTtleHBvcnRzLmlzUHJvZmlsZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1nfTtleHBvcnRzLmlzU3RyaWN0TW9kZT1mdW5jdGlvbihhKXtyZXR1cm4geihhKT09PWZ9O2V4cG9ydHMuaXNTdXNwZW5zZT1mdW5jdGlvbihhKXtyZXR1cm4geihhKT09PXB9O1xuZXhwb3J0cy5pc1ZhbGlkRWxlbWVudFR5cGU9ZnVuY3Rpb24oYSl7cmV0dXJuXCJzdHJpbmdcIj09PXR5cGVvZiBhfHxcImZ1bmN0aW9uXCI9PT10eXBlb2YgYXx8YT09PWV8fGE9PT1tfHxhPT09Z3x8YT09PWZ8fGE9PT1wfHxhPT09cXx8XCJvYmplY3RcIj09PXR5cGVvZiBhJiZudWxsIT09YSYmKGEuJCR0eXBlb2Y9PT10fHxhLiQkdHlwZW9mPT09cnx8YS4kJHR5cGVvZj09PWh8fGEuJCR0eXBlb2Y9PT1rfHxhLiQkdHlwZW9mPT09bnx8YS4kJHR5cGVvZj09PXd8fGEuJCR0eXBlb2Y9PT14fHxhLiQkdHlwZW9mPT09eXx8YS4kJHR5cGVvZj09PXYpfTtleHBvcnRzLnR5cGVPZj16O1xuIiwgIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxudmFyIHJlYWN0SXMgPSByZXF1aXJlKCdyZWFjdC1pcycpO1xuXG4vKipcbiAqIENvcHlyaWdodCAyMDE1LCBZYWhvbyEgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG52YXIgUkVBQ1RfU1RBVElDUyA9IHtcbiAgY2hpbGRDb250ZXh0VHlwZXM6IHRydWUsXG4gIGNvbnRleHRUeXBlOiB0cnVlLFxuICBjb250ZXh0VHlwZXM6IHRydWUsXG4gIGRlZmF1bHRQcm9wczogdHJ1ZSxcbiAgZGlzcGxheU5hbWU6IHRydWUsXG4gIGdldERlZmF1bHRQcm9wczogdHJ1ZSxcbiAgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yOiB0cnVlLFxuICBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM6IHRydWUsXG4gIG1peGluczogdHJ1ZSxcbiAgcHJvcFR5cGVzOiB0cnVlLFxuICB0eXBlOiB0cnVlXG59O1xudmFyIEtOT1dOX1NUQVRJQ1MgPSB7XG4gIG5hbWU6IHRydWUsXG4gIGxlbmd0aDogdHJ1ZSxcbiAgcHJvdG90eXBlOiB0cnVlLFxuICBjYWxsZXI6IHRydWUsXG4gIGNhbGxlZTogdHJ1ZSxcbiAgYXJndW1lbnRzOiB0cnVlLFxuICBhcml0eTogdHJ1ZVxufTtcbnZhciBGT1JXQVJEX1JFRl9TVEFUSUNTID0ge1xuICAnJCR0eXBlb2YnOiB0cnVlLFxuICByZW5kZXI6IHRydWUsXG4gIGRlZmF1bHRQcm9wczogdHJ1ZSxcbiAgZGlzcGxheU5hbWU6IHRydWUsXG4gIHByb3BUeXBlczogdHJ1ZVxufTtcbnZhciBNRU1PX1NUQVRJQ1MgPSB7XG4gICckJHR5cGVvZic6IHRydWUsXG4gIGNvbXBhcmU6IHRydWUsXG4gIGRlZmF1bHRQcm9wczogdHJ1ZSxcbiAgZGlzcGxheU5hbWU6IHRydWUsXG4gIHByb3BUeXBlczogdHJ1ZSxcbiAgdHlwZTogdHJ1ZVxufTtcbnZhciBUWVBFX1NUQVRJQ1MgPSB7fTtcblRZUEVfU1RBVElDU1tyZWFjdElzLkZvcndhcmRSZWZdID0gRk9SV0FSRF9SRUZfU1RBVElDUztcblRZUEVfU1RBVElDU1tyZWFjdElzLk1lbW9dID0gTUVNT19TVEFUSUNTO1xuXG5mdW5jdGlvbiBnZXRTdGF0aWNzKGNvbXBvbmVudCkge1xuICAvLyBSZWFjdCB2MTYuMTEgYW5kIGJlbG93XG4gIGlmIChyZWFjdElzLmlzTWVtbyhjb21wb25lbnQpKSB7XG4gICAgcmV0dXJuIE1FTU9fU1RBVElDUztcbiAgfSAvLyBSZWFjdCB2MTYuMTIgYW5kIGFib3ZlXG5cblxuICByZXR1cm4gVFlQRV9TVEFUSUNTW2NvbXBvbmVudFsnJCR0eXBlb2YnXV0gfHwgUkVBQ1RfU1RBVElDUztcbn1cblxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIGdldE93blByb3BlcnR5TmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcztcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG52YXIgb2JqZWN0UHJvdG90eXBlID0gT2JqZWN0LnByb3RvdHlwZTtcbmZ1bmN0aW9uIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKHRhcmdldENvbXBvbmVudCwgc291cmNlQ29tcG9uZW50LCBibGFja2xpc3QpIHtcbiAgaWYgKHR5cGVvZiBzb3VyY2VDb21wb25lbnQgIT09ICdzdHJpbmcnKSB7XG4gICAgLy8gZG9uJ3QgaG9pc3Qgb3ZlciBzdHJpbmcgKGh0bWwpIGNvbXBvbmVudHNcbiAgICBpZiAob2JqZWN0UHJvdG90eXBlKSB7XG4gICAgICB2YXIgaW5oZXJpdGVkQ29tcG9uZW50ID0gZ2V0UHJvdG90eXBlT2Yoc291cmNlQ29tcG9uZW50KTtcblxuICAgICAgaWYgKGluaGVyaXRlZENvbXBvbmVudCAmJiBpbmhlcml0ZWRDb21wb25lbnQgIT09IG9iamVjdFByb3RvdHlwZSkge1xuICAgICAgICBob2lzdE5vblJlYWN0U3RhdGljcyh0YXJnZXRDb21wb25lbnQsIGluaGVyaXRlZENvbXBvbmVudCwgYmxhY2tsaXN0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIga2V5cyA9IGdldE93blByb3BlcnR5TmFtZXMoc291cmNlQ29tcG9uZW50KTtcblxuICAgIGlmIChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICAgIGtleXMgPSBrZXlzLmNvbmNhdChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlQ29tcG9uZW50KSk7XG4gICAgfVxuXG4gICAgdmFyIHRhcmdldFN0YXRpY3MgPSBnZXRTdGF0aWNzKHRhcmdldENvbXBvbmVudCk7XG4gICAgdmFyIHNvdXJjZVN0YXRpY3MgPSBnZXRTdGF0aWNzKHNvdXJjZUNvbXBvbmVudCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuXG4gICAgICBpZiAoIUtOT1dOX1NUQVRJQ1Nba2V5XSAmJiAhKGJsYWNrbGlzdCAmJiBibGFja2xpc3Rba2V5XSkgJiYgIShzb3VyY2VTdGF0aWNzICYmIHNvdXJjZVN0YXRpY3Nba2V5XSkgJiYgISh0YXJnZXRTdGF0aWNzICYmIHRhcmdldFN0YXRpY3Nba2V5XSkpIHtcbiAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlQ29tcG9uZW50LCBrZXkpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gQXZvaWQgZmFpbHVyZXMgZnJvbSByZWFkLW9ubHkgcHJvcGVydGllc1xuICAgICAgICAgIGRlZmluZVByb3BlcnR5KHRhcmdldENvbXBvbmVudCwga2V5LCBkZXNjcmlwdG9yKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0Q29tcG9uZW50O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhvaXN0Tm9uUmVhY3RTdGF0aWNzO1xuIiwgIi8qKlxuICogQGxpY2Vuc2UgUmVhY3RcbiAqIHJlYWN0LWlzLnByb2R1Y3Rpb24ubWluLmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cbid1c2Ugc3RyaWN0Jzt2YXIgYj1TeW1ib2wuZm9yKFwicmVhY3QuZWxlbWVudFwiKSxjPVN5bWJvbC5mb3IoXCJyZWFjdC5wb3J0YWxcIiksZD1TeW1ib2wuZm9yKFwicmVhY3QuZnJhZ21lbnRcIiksZT1TeW1ib2wuZm9yKFwicmVhY3Quc3RyaWN0X21vZGVcIiksZj1TeW1ib2wuZm9yKFwicmVhY3QucHJvZmlsZXJcIiksZz1TeW1ib2wuZm9yKFwicmVhY3QucHJvdmlkZXJcIiksaD1TeW1ib2wuZm9yKFwicmVhY3QuY29udGV4dFwiKSxrPVN5bWJvbC5mb3IoXCJyZWFjdC5zZXJ2ZXJfY29udGV4dFwiKSxsPVN5bWJvbC5mb3IoXCJyZWFjdC5mb3J3YXJkX3JlZlwiKSxtPVN5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZVwiKSxuPVN5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZV9saXN0XCIpLHA9U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9cIikscT1TeW1ib2wuZm9yKFwicmVhY3QubGF6eVwiKSx0PVN5bWJvbC5mb3IoXCJyZWFjdC5vZmZzY3JlZW5cIiksdTt1PVN5bWJvbC5mb3IoXCJyZWFjdC5tb2R1bGUucmVmZXJlbmNlXCIpO1xuZnVuY3Rpb24gdihhKXtpZihcIm9iamVjdFwiPT09dHlwZW9mIGEmJm51bGwhPT1hKXt2YXIgcj1hLiQkdHlwZW9mO3N3aXRjaChyKXtjYXNlIGI6c3dpdGNoKGE9YS50eXBlLGEpe2Nhc2UgZDpjYXNlIGY6Y2FzZSBlOmNhc2UgbTpjYXNlIG46cmV0dXJuIGE7ZGVmYXVsdDpzd2l0Y2goYT1hJiZhLiQkdHlwZW9mLGEpe2Nhc2UgazpjYXNlIGg6Y2FzZSBsOmNhc2UgcTpjYXNlIHA6Y2FzZSBnOnJldHVybiBhO2RlZmF1bHQ6cmV0dXJuIHJ9fWNhc2UgYzpyZXR1cm4gcn19fWV4cG9ydHMuQ29udGV4dENvbnN1bWVyPWg7ZXhwb3J0cy5Db250ZXh0UHJvdmlkZXI9ZztleHBvcnRzLkVsZW1lbnQ9YjtleHBvcnRzLkZvcndhcmRSZWY9bDtleHBvcnRzLkZyYWdtZW50PWQ7ZXhwb3J0cy5MYXp5PXE7ZXhwb3J0cy5NZW1vPXA7ZXhwb3J0cy5Qb3J0YWw9YztleHBvcnRzLlByb2ZpbGVyPWY7ZXhwb3J0cy5TdHJpY3RNb2RlPWU7ZXhwb3J0cy5TdXNwZW5zZT1tO1xuZXhwb3J0cy5TdXNwZW5zZUxpc3Q9bjtleHBvcnRzLmlzQXN5bmNNb2RlPWZ1bmN0aW9uKCl7cmV0dXJuITF9O2V4cG9ydHMuaXNDb25jdXJyZW50TW9kZT1mdW5jdGlvbigpe3JldHVybiExfTtleHBvcnRzLmlzQ29udGV4dENvbnN1bWVyPWZ1bmN0aW9uKGEpe3JldHVybiB2KGEpPT09aH07ZXhwb3J0cy5pc0NvbnRleHRQcm92aWRlcj1mdW5jdGlvbihhKXtyZXR1cm4gdihhKT09PWd9O2V4cG9ydHMuaXNFbGVtZW50PWZ1bmN0aW9uKGEpe3JldHVyblwib2JqZWN0XCI9PT10eXBlb2YgYSYmbnVsbCE9PWEmJmEuJCR0eXBlb2Y9PT1ifTtleHBvcnRzLmlzRm9yd2FyZFJlZj1mdW5jdGlvbihhKXtyZXR1cm4gdihhKT09PWx9O2V4cG9ydHMuaXNGcmFnbWVudD1mdW5jdGlvbihhKXtyZXR1cm4gdihhKT09PWR9O2V4cG9ydHMuaXNMYXp5PWZ1bmN0aW9uKGEpe3JldHVybiB2KGEpPT09cX07ZXhwb3J0cy5pc01lbW89ZnVuY3Rpb24oYSl7cmV0dXJuIHYoYSk9PT1wfTtcbmV4cG9ydHMuaXNQb3J0YWw9ZnVuY3Rpb24oYSl7cmV0dXJuIHYoYSk9PT1jfTtleHBvcnRzLmlzUHJvZmlsZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIHYoYSk9PT1mfTtleHBvcnRzLmlzU3RyaWN0TW9kZT1mdW5jdGlvbihhKXtyZXR1cm4gdihhKT09PWV9O2V4cG9ydHMuaXNTdXNwZW5zZT1mdW5jdGlvbihhKXtyZXR1cm4gdihhKT09PW19O2V4cG9ydHMuaXNTdXNwZW5zZUxpc3Q9ZnVuY3Rpb24oYSl7cmV0dXJuIHYoYSk9PT1ufTtcbmV4cG9ydHMuaXNWYWxpZEVsZW1lbnRUeXBlPWZ1bmN0aW9uKGEpe3JldHVyblwic3RyaW5nXCI9PT10eXBlb2YgYXx8XCJmdW5jdGlvblwiPT09dHlwZW9mIGF8fGE9PT1kfHxhPT09Znx8YT09PWV8fGE9PT1tfHxhPT09bnx8YT09PXR8fFwib2JqZWN0XCI9PT10eXBlb2YgYSYmbnVsbCE9PWEmJihhLiQkdHlwZW9mPT09cXx8YS4kJHR5cGVvZj09PXB8fGEuJCR0eXBlb2Y9PT1nfHxhLiQkdHlwZW9mPT09aHx8YS4kJHR5cGVvZj09PWx8fGEuJCR0eXBlb2Y9PT11fHx2b2lkIDAhPT1hLmdldE1vZHVsZUlkKT8hMDohMX07ZXhwb3J0cy50eXBlT2Y9djtcbiIsICIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuLyogZ2xvYmFsIG1vZHVsZSwgZGVmaW5lICovXG5cbmZ1bmN0aW9uIG1hcEVhY2gobWFwLCBvcGVyYXRpb24pe1xuICB2YXIga2V5cyA9IG1hcC5rZXlzKCk7XG4gIHZhciBuZXh0O1xuICB3aGlsZSghKG5leHQgPSBrZXlzLm5leHQoKSkuZG9uZSkge1xuICAgIG9wZXJhdGlvbihtYXAuZ2V0KG5leHQudmFsdWUpLCBuZXh0LnZhbHVlLCBtYXApO1xuICB9XG59XG5cbnZhciBNdWx0aW1hcCA9IChmdW5jdGlvbigpIHtcbiAgdmFyIG1hcEN0b3I7XG4gIGlmICh0eXBlb2YgTWFwICE9PSAndW5kZWZpbmVkJykge1xuICAgIG1hcEN0b3IgPSBNYXA7XG5cbiAgICBpZiAoIU1hcC5wcm90b3R5cGUua2V5cykge1xuICAgICAgTWFwLnByb3RvdHlwZS5rZXlzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBrZXlzID0gW107XG4gICAgICAgIHRoaXMuZm9yRWFjaChmdW5jdGlvbihpdGVtLCBrZXkpIHtcbiAgICAgICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBrZXlzO1xuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBNdWx0aW1hcChpdGVyYWJsZSkge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHNlbGYuX21hcCA9IG1hcEN0b3I7XG5cbiAgICBpZiAoTXVsdGltYXAuTWFwKSB7XG4gICAgICBzZWxmLl9tYXAgPSBNdWx0aW1hcC5NYXA7XG4gICAgfVxuXG4gICAgc2VsZi5fID0gc2VsZi5fbWFwID8gbmV3IHNlbGYuX21hcCgpIDoge307XG5cbiAgICBpZiAoaXRlcmFibGUpIHtcbiAgICAgIGl0ZXJhYmxlLmZvckVhY2goZnVuY3Rpb24oaSkge1xuICAgICAgICBzZWxmLnNldChpWzBdLCBpWzFdKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge09iamVjdH0ga2V5XG4gICAqIEByZXR1cm4ge0FycmF5fSBBbiBhcnJheSBvZiB2YWx1ZXMsIHVuZGVmaW5lZCBpZiBubyBzdWNoIGEga2V5O1xuICAgKi9cbiAgTXVsdGltYXAucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uKGtleSkge1xuICAgIHJldHVybiB0aGlzLl9tYXAgPyB0aGlzLl8uZ2V0KGtleSkgOiB0aGlzLl9ba2V5XTtcbiAgfTtcblxuICAvKipcbiAgICogQHBhcmFtIHtPYmplY3R9IGtleVxuICAgKiBAcGFyYW0ge09iamVjdH0gdmFsLi4uXG4gICAqL1xuICBNdWx0aW1hcC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24oa2V5LCB2YWwpIHtcbiAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG5cbiAgICBrZXkgPSBhcmdzLnNoaWZ0KCk7XG5cbiAgICB2YXIgZW50cnkgPSB0aGlzLmdldChrZXkpO1xuICAgIGlmICghZW50cnkpIHtcbiAgICAgIGVudHJ5ID0gW107XG4gICAgICBpZiAodGhpcy5fbWFwKVxuICAgICAgICB0aGlzLl8uc2V0KGtleSwgZW50cnkpO1xuICAgICAgZWxzZVxuICAgICAgICB0aGlzLl9ba2V5XSA9IGVudHJ5O1xuICAgIH1cblxuICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGVudHJ5LCBhcmdzKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICAvKipcbiAgICogQHBhcmFtIHtPYmplY3R9IGtleVxuICAgKiBAcGFyYW0ge09iamVjdD19IHZhbFxuICAgKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIGFueSB0aGluZyBjaGFuZ2VkXG4gICAqL1xuICBNdWx0aW1hcC5wcm90b3R5cGUuZGVsZXRlID0gZnVuY3Rpb24oa2V5LCB2YWwpIHtcbiAgICBpZiAoIXRoaXMuaGFzKGtleSkpXG4gICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7XG4gICAgICB0aGlzLl9tYXAgPyAodGhpcy5fLmRlbGV0ZShrZXkpKSA6IChkZWxldGUgdGhpcy5fW2tleV0pO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBlbnRyeSA9IHRoaXMuZ2V0KGtleSk7XG4gICAgICB2YXIgaWR4ID0gZW50cnkuaW5kZXhPZih2YWwpO1xuICAgICAgaWYgKGlkeCAhPSAtMSkge1xuICAgICAgICBlbnRyeS5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge09iamVjdH0ga2V5XG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gdmFsXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IHdoZXRoZXIgdGhlIG1hcCBjb250YWlucyAna2V5JyBvciAna2V5PT52YWwnIHBhaXJcbiAgICovXG4gIE11bHRpbWFwLnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbihrZXksIHZhbCkge1xuICAgIHZhciBoYXNLZXkgPSB0aGlzLl9tYXAgPyB0aGlzLl8uaGFzKGtleSkgOiB0aGlzLl8uaGFzT3duUHJvcGVydHkoa2V5KTtcblxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEgfHwgIWhhc0tleSlcbiAgICAgIHJldHVybiBoYXNLZXk7XG5cbiAgICB2YXIgZW50cnkgPSB0aGlzLmdldChrZXkpIHx8IFtdO1xuICAgIHJldHVybiBlbnRyeS5pbmRleE9mKHZhbCkgIT0gLTE7XG4gIH07XG5cblxuICAvKipcbiAgICogQHJldHVybiB7QXJyYXl9IGFsbCB0aGUga2V5cyBpbiB0aGUgbWFwXG4gICAqL1xuICBNdWx0aW1hcC5wcm90b3R5cGUua2V5cyA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLl9tYXApXG4gICAgICByZXR1cm4gbWFrZUl0ZXJhdG9yKHRoaXMuXy5rZXlzKCkpO1xuXG4gICAgcmV0dXJuIG1ha2VJdGVyYXRvcihPYmplY3Qua2V5cyh0aGlzLl8pKTtcbiAgfTtcblxuICAvKipcbiAgICogQHJldHVybiB7QXJyYXl9IGFsbCB0aGUgdmFsdWVzIGluIHRoZSBtYXBcbiAgICovXG4gIE11bHRpbWFwLnByb3RvdHlwZS52YWx1ZXMgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgdmFscyA9IFtdO1xuICAgIHRoaXMuZm9yRWFjaEVudHJ5KGZ1bmN0aW9uKGVudHJ5KSB7XG4gICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseSh2YWxzLCBlbnRyeSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbWFrZUl0ZXJhdG9yKHZhbHMpO1xuICB9O1xuXG4gIC8qKlxuICAgKlxuICAgKi9cbiAgTXVsdGltYXAucHJvdG90eXBlLmZvckVhY2hFbnRyeSA9IGZ1bmN0aW9uKGl0ZXIpIHtcbiAgICBtYXBFYWNoKHRoaXMsIGl0ZXIpO1xuICB9O1xuXG4gIE11bHRpbWFwLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24oaXRlcikge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICBzZWxmLmZvckVhY2hFbnRyeShmdW5jdGlvbihlbnRyeSwga2V5KSB7XG4gICAgICBlbnRyeS5mb3JFYWNoKGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgICAgaXRlcihpdGVtLCBrZXksIHNlbGYpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cblxuICBNdWx0aW1hcC5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5fbWFwKSB7XG4gICAgICB0aGlzLl8uY2xlYXIoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fID0ge307XG4gICAgfVxuICB9O1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShcbiAgICBNdWx0aW1hcC5wcm90b3R5cGUsXG4gICAgXCJzaXplXCIsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHRvdGFsID0gMDtcblxuICAgICAgICBtYXBFYWNoKHRoaXMsIGZ1bmN0aW9uKHZhbHVlKXtcbiAgICAgICAgICB0b3RhbCArPSB2YWx1ZS5sZW5ndGg7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0b3RhbDtcbiAgICAgIH1cbiAgICB9KTtcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoXG4gICAgTXVsdGltYXAucHJvdG90eXBlLFxuICAgIFwiY291bnRcIiwge1xuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fLnNpemU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgdmFyIHNhZmFyaU5leHQ7XG5cbiAgdHJ5e1xuICAgIHNhZmFyaU5leHQgPSBuZXcgRnVuY3Rpb24oJ2l0ZXJhdG9yJywgJ21ha2VJdGVyYXRvcicsICd2YXIga2V5c0FycmF5ID0gW107IGZvcih2YXIga2V5IG9mIGl0ZXJhdG9yKXtrZXlzQXJyYXkucHVzaChrZXkpO30gcmV0dXJuIG1ha2VJdGVyYXRvcihrZXlzQXJyYXkpLm5leHQ7Jyk7XG4gIH1jYXRjaChlcnJvcil7XG4gICAgLy8gZm9yIG9mIG5vdCBpbXBsZW1lbnRlZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIG1ha2VJdGVyYXRvcihpdGVyYXRvcil7XG4gICAgaWYoQXJyYXkuaXNBcnJheShpdGVyYXRvcikpe1xuICAgICAgdmFyIG5leHRJbmRleCA9IDA7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uKCl7XG4gICAgICAgICAgcmV0dXJuIG5leHRJbmRleCA8IGl0ZXJhdG9yLmxlbmd0aCA/XG4gICAgICAgICAgICB7dmFsdWU6IGl0ZXJhdG9yW25leHRJbmRleCsrXSwgZG9uZTogZmFsc2V9IDpcbiAgICAgICAgICB7ZG9uZTogdHJ1ZX07XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gT25seSBhbiBpc3N1ZSBpbiBzYWZhcmlcbiAgICBpZighaXRlcmF0b3IubmV4dCAmJiBzYWZhcmlOZXh0KXtcbiAgICAgIGl0ZXJhdG9yLm5leHQgPSBzYWZhcmlOZXh0KGl0ZXJhdG9yLCBtYWtlSXRlcmF0b3IpO1xuICAgIH1cblxuICAgIHJldHVybiBpdGVyYXRvcjtcbiAgfVxuXG4gIHJldHVybiBNdWx0aW1hcDtcbn0pKCk7XG5cblxuaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIG1vZHVsZSAmJiBtb2R1bGUuZXhwb3J0cylcbiAgbW9kdWxlLmV4cG9ydHMgPSBNdWx0aW1hcDtcbmVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuICBkZWZpbmUoZnVuY3Rpb24oKSB7IHJldHVybiBNdWx0aW1hcDsgfSk7XG4iLCAiLypcblxuQmFzZWQgb2ZmIGdsYW1vcidzIFN0eWxlU2hlZXQsIHRoYW5rcyBTdW5pbCBcdTI3NjRcdUZFMEZcblxuaGlnaCBwZXJmb3JtYW5jZSBTdHlsZVNoZWV0IGZvciBjc3MtaW4tanMgc3lzdGVtc1xuXG4tIHVzZXMgbXVsdGlwbGUgc3R5bGUgdGFncyBiZWhpbmQgdGhlIHNjZW5lcyBmb3IgbWlsbGlvbnMgb2YgcnVsZXNcbi0gdXNlcyBgaW5zZXJ0UnVsZWAgZm9yIGFwcGVuZGluZyBpbiBwcm9kdWN0aW9uIGZvciAqbXVjaCogZmFzdGVyIHBlcmZvcm1hbmNlXG5cbi8vIHVzYWdlXG5cbmltcG9ydCB7IFN0eWxlU2hlZXQgfSBmcm9tICdAZW1vdGlvbi9zaGVldCdcblxubGV0IHN0eWxlU2hlZXQgPSBuZXcgU3R5bGVTaGVldCh7IGtleTogJycsIGNvbnRhaW5lcjogZG9jdW1lbnQuaGVhZCB9KVxuXG5zdHlsZVNoZWV0Lmluc2VydCgnI2JveCB7IGJvcmRlcjogMXB4IHNvbGlkIHJlZDsgfScpXG4tIGFwcGVuZHMgYSBjc3MgcnVsZSBpbnRvIHRoZSBzdHlsZXNoZWV0XG5cbnN0eWxlU2hlZXQuZmx1c2goKVxuLSBlbXB0aWVzIHRoZSBzdHlsZXNoZWV0IG9mIGFsbCBpdHMgY29udGVudHNcblxuKi9cbi8vICRGbG93Rml4TWVcbmZ1bmN0aW9uIHNoZWV0Rm9yVGFnKHRhZykge1xuICBpZiAodGFnLnNoZWV0KSB7XG4gICAgLy8gJEZsb3dGaXhNZVxuICAgIHJldHVybiB0YWcuc2hlZXQ7XG4gIH0gLy8gdGhpcyB3ZWlyZG5lc3MgYnJvdWdodCB0byB5b3UgYnkgZmlyZWZveFxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGRvY3VtZW50LnN0eWxlU2hlZXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGRvY3VtZW50LnN0eWxlU2hlZXRzW2ldLm93bmVyTm9kZSA9PT0gdGFnKSB7XG4gICAgICAvLyAkRmxvd0ZpeE1lXG4gICAgICByZXR1cm4gZG9jdW1lbnQuc3R5bGVTaGVldHNbaV07XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVN0eWxlRWxlbWVudChvcHRpb25zKSB7XG4gIHZhciB0YWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICB0YWcuc2V0QXR0cmlidXRlKCdkYXRhLWVtb3Rpb24nLCBvcHRpb25zLmtleSk7XG5cbiAgaWYgKG9wdGlvbnMubm9uY2UgIT09IHVuZGVmaW5lZCkge1xuICAgIHRhZy5zZXRBdHRyaWJ1dGUoJ25vbmNlJywgb3B0aW9ucy5ub25jZSk7XG4gIH1cblxuICB0YWcuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpKTtcbiAgdGFnLnNldEF0dHJpYnV0ZSgnZGF0YS1zJywgJycpO1xuICByZXR1cm4gdGFnO1xufVxuXG52YXIgU3R5bGVTaGVldCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIC8vIFVzaW5nIE5vZGUgaW5zdGVhZCBvZiBIVE1MRWxlbWVudCBzaW5jZSBjb250YWluZXIgbWF5IGJlIGEgU2hhZG93Um9vdFxuICBmdW5jdGlvbiBTdHlsZVNoZWV0KG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdGhpcy5faW5zZXJ0VGFnID0gZnVuY3Rpb24gKHRhZykge1xuICAgICAgdmFyIGJlZm9yZTtcblxuICAgICAgaWYgKF90aGlzLnRhZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGlmIChfdGhpcy5pbnNlcnRpb25Qb2ludCkge1xuICAgICAgICAgIGJlZm9yZSA9IF90aGlzLmluc2VydGlvblBvaW50Lm5leHRTaWJsaW5nO1xuICAgICAgICB9IGVsc2UgaWYgKF90aGlzLnByZXBlbmQpIHtcbiAgICAgICAgICBiZWZvcmUgPSBfdGhpcy5jb250YWluZXIuZmlyc3RDaGlsZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBiZWZvcmUgPSBfdGhpcy5iZWZvcmU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJlZm9yZSA9IF90aGlzLnRhZ3NbX3RoaXMudGFncy5sZW5ndGggLSAxXS5uZXh0U2libGluZztcbiAgICAgIH1cblxuICAgICAgX3RoaXMuY29udGFpbmVyLmluc2VydEJlZm9yZSh0YWcsIGJlZm9yZSk7XG5cbiAgICAgIF90aGlzLnRhZ3MucHVzaCh0YWcpO1xuICAgIH07XG5cbiAgICB0aGlzLmlzU3BlZWR5ID0gb3B0aW9ucy5zcGVlZHkgPT09IHVuZGVmaW5lZCA/IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicgOiBvcHRpb25zLnNwZWVkeTtcbiAgICB0aGlzLnRhZ3MgPSBbXTtcbiAgICB0aGlzLmN0ciA9IDA7XG4gICAgdGhpcy5ub25jZSA9IG9wdGlvbnMubm9uY2U7IC8vIGtleSBpcyB0aGUgdmFsdWUgb2YgdGhlIGRhdGEtZW1vdGlvbiBhdHRyaWJ1dGUsIGl0J3MgdXNlZCB0byBpZGVudGlmeSBkaWZmZXJlbnQgc2hlZXRzXG5cbiAgICB0aGlzLmtleSA9IG9wdGlvbnMua2V5O1xuICAgIHRoaXMuY29udGFpbmVyID0gb3B0aW9ucy5jb250YWluZXI7XG4gICAgdGhpcy5wcmVwZW5kID0gb3B0aW9ucy5wcmVwZW5kO1xuICAgIHRoaXMuaW5zZXJ0aW9uUG9pbnQgPSBvcHRpb25zLmluc2VydGlvblBvaW50O1xuICAgIHRoaXMuYmVmb3JlID0gbnVsbDtcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBTdHlsZVNoZWV0LnByb3RvdHlwZTtcblxuICBfcHJvdG8uaHlkcmF0ZSA9IGZ1bmN0aW9uIGh5ZHJhdGUobm9kZXMpIHtcbiAgICBub2Rlcy5mb3JFYWNoKHRoaXMuX2luc2VydFRhZyk7XG4gIH07XG5cbiAgX3Byb3RvLmluc2VydCA9IGZ1bmN0aW9uIGluc2VydChydWxlKSB7XG4gICAgLy8gdGhlIG1heCBsZW5ndGggaXMgaG93IG1hbnkgcnVsZXMgd2UgaGF2ZSBwZXIgc3R5bGUgdGFnLCBpdCdzIDY1MDAwIGluIHNwZWVkeSBtb2RlXG4gICAgLy8gaXQncyAxIGluIGRldiBiZWNhdXNlIHdlIGluc2VydCBzb3VyY2UgbWFwcyB0aGF0IG1hcCBhIHNpbmdsZSBydWxlIHRvIGEgbG9jYXRpb25cbiAgICAvLyBhbmQgeW91IGNhbiBvbmx5IGhhdmUgb25lIHNvdXJjZSBtYXAgcGVyIHN0eWxlIHRhZ1xuICAgIGlmICh0aGlzLmN0ciAlICh0aGlzLmlzU3BlZWR5ID8gNjUwMDAgOiAxKSA9PT0gMCkge1xuICAgICAgdGhpcy5faW5zZXJ0VGFnKGNyZWF0ZVN0eWxlRWxlbWVudCh0aGlzKSk7XG4gICAgfVxuXG4gICAgdmFyIHRhZyA9IHRoaXMudGFnc1t0aGlzLnRhZ3MubGVuZ3RoIC0gMV07XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgdmFyIGlzSW1wb3J0UnVsZSA9IHJ1bGUuY2hhckNvZGVBdCgwKSA9PT0gNjQgJiYgcnVsZS5jaGFyQ29kZUF0KDEpID09PSAxMDU7XG5cbiAgICAgIGlmIChpc0ltcG9ydFJ1bGUgJiYgdGhpcy5fYWxyZWFkeUluc2VydGVkT3JkZXJJbnNlbnNpdGl2ZVJ1bGUpIHtcbiAgICAgICAgLy8gdGhpcyB3b3VsZCBvbmx5IGNhdXNlIHByb2JsZW0gaW4gc3BlZWR5IG1vZGVcbiAgICAgICAgLy8gYnV0IHdlIGRvbid0IHdhbnQgZW5hYmxpbmcgc3BlZWR5IHRvIGFmZmVjdCB0aGUgb2JzZXJ2YWJsZSBiZWhhdmlvclxuICAgICAgICAvLyBzbyB3ZSByZXBvcnQgdGhpcyBlcnJvciBhdCBhbGwgdGltZXNcbiAgICAgICAgY29uc29sZS5lcnJvcihcIllvdSdyZSBhdHRlbXB0aW5nIHRvIGluc2VydCB0aGUgZm9sbG93aW5nIHJ1bGU6XFxuXCIgKyBydWxlICsgJ1xcblxcbmBAaW1wb3J0YCBydWxlcyBtdXN0IGJlIGJlZm9yZSBhbGwgb3RoZXIgdHlwZXMgb2YgcnVsZXMgaW4gYSBzdHlsZXNoZWV0IGJ1dCBvdGhlciBydWxlcyBoYXZlIGFscmVhZHkgYmVlbiBpbnNlcnRlZC4gUGxlYXNlIGVuc3VyZSB0aGF0IGBAaW1wb3J0YCBydWxlcyBhcmUgYmVmb3JlIGFsbCBvdGhlciBydWxlcy4nKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2FscmVhZHlJbnNlcnRlZE9yZGVySW5zZW5zaXRpdmVSdWxlID0gdGhpcy5fYWxyZWFkeUluc2VydGVkT3JkZXJJbnNlbnNpdGl2ZVJ1bGUgfHwgIWlzSW1wb3J0UnVsZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1NwZWVkeSkge1xuICAgICAgdmFyIHNoZWV0ID0gc2hlZXRGb3JUYWcodGFnKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gdGhpcyBpcyB0aGUgdWx0cmFmYXN0IHZlcnNpb24sIHdvcmtzIGFjcm9zcyBicm93c2Vyc1xuICAgICAgICAvLyB0aGUgYmlnIGRyYXdiYWNrIGlzIHRoYXQgdGhlIGNzcyB3b24ndCBiZSBlZGl0YWJsZSBpbiBkZXZ0b29sc1xuICAgICAgICBzaGVldC5pbnNlcnRSdWxlKHJ1bGUsIHNoZWV0LmNzc1J1bGVzLmxlbmd0aCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICEvOigtbW96LXBsYWNlaG9sZGVyfC1tb3otZm9jdXMtaW5uZXJ8LW1vei1mb2N1c3Jpbmd8LW1zLWlucHV0LXBsYWNlaG9sZGVyfC1tb3otcmVhZC13cml0ZXwtbW96LXJlYWQtb25seXwtbXMtY2xlYXJ8LW1zLWV4cGFuZHwtbXMtcmV2ZWFsKXsvLnRlc3QocnVsZSkpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFwiVGhlcmUgd2FzIGEgcHJvYmxlbSBpbnNlcnRpbmcgdGhlIGZvbGxvd2luZyBydWxlOiBcXFwiXCIgKyBydWxlICsgXCJcXFwiXCIsIGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhZy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShydWxlKSk7XG4gICAgfVxuXG4gICAgdGhpcy5jdHIrKztcbiAgfTtcblxuICBfcHJvdG8uZmx1c2ggPSBmdW5jdGlvbiBmbHVzaCgpIHtcbiAgICAvLyAkRmxvd0ZpeE1lXG4gICAgdGhpcy50YWdzLmZvckVhY2goZnVuY3Rpb24gKHRhZykge1xuICAgICAgcmV0dXJuIHRhZy5wYXJlbnROb2RlICYmIHRhZy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRhZyk7XG4gICAgfSk7XG4gICAgdGhpcy50YWdzID0gW107XG4gICAgdGhpcy5jdHIgPSAwO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHRoaXMuX2FscmVhZHlJbnNlcnRlZE9yZGVySW5zZW5zaXRpdmVSdWxlID0gZmFsc2U7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBTdHlsZVNoZWV0O1xufSgpO1xuXG5leHBvcnQgeyBTdHlsZVNoZWV0IH07XG4iLCAiZXhwb3J0IHZhciBNUyA9ICctbXMtJ1xuZXhwb3J0IHZhciBNT1ogPSAnLW1vei0nXG5leHBvcnQgdmFyIFdFQktJVCA9ICctd2Via2l0LSdcblxuZXhwb3J0IHZhciBDT01NRU5UID0gJ2NvbW0nXG5leHBvcnQgdmFyIFJVTEVTRVQgPSAncnVsZSdcbmV4cG9ydCB2YXIgREVDTEFSQVRJT04gPSAnZGVjbCdcblxuZXhwb3J0IHZhciBQQUdFID0gJ0BwYWdlJ1xuZXhwb3J0IHZhciBNRURJQSA9ICdAbWVkaWEnXG5leHBvcnQgdmFyIElNUE9SVCA9ICdAaW1wb3J0J1xuZXhwb3J0IHZhciBDSEFSU0VUID0gJ0BjaGFyc2V0J1xuZXhwb3J0IHZhciBWSUVXUE9SVCA9ICdAdmlld3BvcnQnXG5leHBvcnQgdmFyIFNVUFBPUlRTID0gJ0BzdXBwb3J0cydcbmV4cG9ydCB2YXIgRE9DVU1FTlQgPSAnQGRvY3VtZW50J1xuZXhwb3J0IHZhciBOQU1FU1BBQ0UgPSAnQG5hbWVzcGFjZSdcbmV4cG9ydCB2YXIgS0VZRlJBTUVTID0gJ0BrZXlmcmFtZXMnXG5leHBvcnQgdmFyIEZPTlRfRkFDRSA9ICdAZm9udC1mYWNlJ1xuZXhwb3J0IHZhciBDT1VOVEVSX1NUWUxFID0gJ0Bjb3VudGVyLXN0eWxlJ1xuZXhwb3J0IHZhciBGT05UX0ZFQVRVUkVfVkFMVUVTID0gJ0Bmb250LWZlYXR1cmUtdmFsdWVzJ1xuZXhwb3J0IHZhciBMQVlFUiA9ICdAbGF5ZXInXG4iLCAiLyoqXG4gKiBAcGFyYW0ge251bWJlcn1cbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IHZhciBhYnMgPSBNYXRoLmFic1xuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgdmFyIGZyb20gPSBTdHJpbmcuZnJvbUNoYXJDb2RlXG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9XG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmV4cG9ydCB2YXIgYXNzaWduID0gT2JqZWN0LmFzc2lnblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aFxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzaCAodmFsdWUsIGxlbmd0aCkge1xuXHRyZXR1cm4gY2hhcmF0KHZhbHVlLCAwKSBeIDQ1ID8gKCgoKCgoKGxlbmd0aCA8PCAyKSBeIGNoYXJhdCh2YWx1ZSwgMCkpIDw8IDIpIF4gY2hhcmF0KHZhbHVlLCAxKSkgPDwgMikgXiBjaGFyYXQodmFsdWUsIDIpKSA8PCAyKSBeIGNoYXJhdCh2YWx1ZSwgMykgOiAwXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmltICh2YWx1ZSkge1xuXHRyZXR1cm4gdmFsdWUudHJpbSgpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge1JlZ0V4cH0gcGF0dGVyblxuICogQHJldHVybiB7c3RyaW5nP31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoICh2YWx1ZSwgcGF0dGVybikge1xuXHRyZXR1cm4gKHZhbHVlID0gcGF0dGVybi5leGVjKHZhbHVlKSkgPyB2YWx1ZVswXSA6IHZhbHVlXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0geyhzdHJpbmd8UmVnRXhwKX0gcGF0dGVyblxuICogQHBhcmFtIHtzdHJpbmd9IHJlcGxhY2VtZW50XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlICh2YWx1ZSwgcGF0dGVybiwgcmVwbGFjZW1lbnQpIHtcblx0cmV0dXJuIHZhbHVlLnJlcGxhY2UocGF0dGVybiwgcmVwbGFjZW1lbnQpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gc2VhcmNoXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmRleG9mICh2YWx1ZSwgc2VhcmNoKSB7XG5cdHJldHVybiB2YWx1ZS5pbmRleE9mKHNlYXJjaClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hhcmF0ICh2YWx1ZSwgaW5kZXgpIHtcblx0cmV0dXJuIHZhbHVlLmNoYXJDb2RlQXQoaW5kZXgpIHwgMFxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXJ9IGJlZ2luXG4gKiBAcGFyYW0ge251bWJlcn0gZW5kXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdWJzdHIgKHZhbHVlLCBiZWdpbiwgZW5kKSB7XG5cdHJldHVybiB2YWx1ZS5zbGljZShiZWdpbiwgZW5kKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RybGVuICh2YWx1ZSkge1xuXHRyZXR1cm4gdmFsdWUubGVuZ3RoXG59XG5cbi8qKlxuICogQHBhcmFtIHthbnlbXX0gdmFsdWVcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNpemVvZiAodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlLmxlbmd0aFxufVxuXG4vKipcbiAqIEBwYXJhbSB7YW55fSB2YWx1ZVxuICogQHBhcmFtIHthbnlbXX0gYXJyYXlcbiAqIEByZXR1cm4ge2FueX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGVuZCAodmFsdWUsIGFycmF5KSB7XG5cdHJldHVybiBhcnJheS5wdXNoKHZhbHVlKSwgdmFsdWVcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBhcnJheVxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmUgKGFycmF5LCBjYWxsYmFjaykge1xuXHRyZXR1cm4gYXJyYXkubWFwKGNhbGxiYWNrKS5qb2luKCcnKVxufVxuIiwgImltcG9ydCB7ZnJvbSwgdHJpbSwgY2hhcmF0LCBzdHJsZW4sIHN1YnN0ciwgYXBwZW5kLCBhc3NpZ259IGZyb20gJy4vVXRpbGl0eS5qcydcblxuZXhwb3J0IHZhciBsaW5lID0gMVxuZXhwb3J0IHZhciBjb2x1bW4gPSAxXG5leHBvcnQgdmFyIGxlbmd0aCA9IDBcbmV4cG9ydCB2YXIgcG9zaXRpb24gPSAwXG5leHBvcnQgdmFyIGNoYXJhY3RlciA9IDBcbmV4cG9ydCB2YXIgY2hhcmFjdGVycyA9ICcnXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge29iamVjdCB8IG51bGx9IHJvb3RcbiAqIEBwYXJhbSB7b2JqZWN0IHwgbnVsbH0gcGFyZW50XG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtzdHJpbmdbXSB8IHN0cmluZ30gcHJvcHNcbiAqIEBwYXJhbSB7b2JqZWN0W10gfCBzdHJpbmd9IGNoaWxkcmVuXG4gKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub2RlICh2YWx1ZSwgcm9vdCwgcGFyZW50LCB0eXBlLCBwcm9wcywgY2hpbGRyZW4sIGxlbmd0aCkge1xuXHRyZXR1cm4ge3ZhbHVlOiB2YWx1ZSwgcm9vdDogcm9vdCwgcGFyZW50OiBwYXJlbnQsIHR5cGU6IHR5cGUsIHByb3BzOiBwcm9wcywgY2hpbGRyZW46IGNoaWxkcmVuLCBsaW5lOiBsaW5lLCBjb2x1bW46IGNvbHVtbiwgbGVuZ3RoOiBsZW5ndGgsIHJldHVybjogJyd9XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IHJvb3RcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wc1xuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29weSAocm9vdCwgcHJvcHMpIHtcblx0cmV0dXJuIGFzc2lnbihub2RlKCcnLCBudWxsLCBudWxsLCAnJywgbnVsbCwgbnVsbCwgMCksIHJvb3QsIHtsZW5ndGg6IC1yb290Lmxlbmd0aH0sIHByb3BzKVxufVxuXG4vKipcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoYXIgKCkge1xuXHRyZXR1cm4gY2hhcmFjdGVyXG59XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJldiAoKSB7XG5cdGNoYXJhY3RlciA9IHBvc2l0aW9uID4gMCA/IGNoYXJhdChjaGFyYWN0ZXJzLCAtLXBvc2l0aW9uKSA6IDBcblxuXHRpZiAoY29sdW1uLS0sIGNoYXJhY3RlciA9PT0gMTApXG5cdFx0Y29sdW1uID0gMSwgbGluZS0tXG5cblx0cmV0dXJuIGNoYXJhY3RlclxufVxuXG4vKipcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5leHQgKCkge1xuXHRjaGFyYWN0ZXIgPSBwb3NpdGlvbiA8IGxlbmd0aCA/IGNoYXJhdChjaGFyYWN0ZXJzLCBwb3NpdGlvbisrKSA6IDBcblxuXHRpZiAoY29sdW1uKyssIGNoYXJhY3RlciA9PT0gMTApXG5cdFx0Y29sdW1uID0gMSwgbGluZSsrXG5cblx0cmV0dXJuIGNoYXJhY3RlclxufVxuXG4vKipcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBlZWsgKCkge1xuXHRyZXR1cm4gY2hhcmF0KGNoYXJhY3RlcnMsIHBvc2l0aW9uKVxufVxuXG4vKipcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhcmV0ICgpIHtcblx0cmV0dXJuIHBvc2l0aW9uXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IGJlZ2luXG4gKiBAcGFyYW0ge251bWJlcn0gZW5kXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzbGljZSAoYmVnaW4sIGVuZCkge1xuXHRyZXR1cm4gc3Vic3RyKGNoYXJhY3RlcnMsIGJlZ2luLCBlbmQpXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHR5cGVcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRva2VuICh0eXBlKSB7XG5cdHN3aXRjaCAodHlwZSkge1xuXHRcdC8vIFxcMCBcXHQgXFxuIFxcciBcXHMgd2hpdGVzcGFjZSB0b2tlblxuXHRcdGNhc2UgMDogY2FzZSA5OiBjYXNlIDEwOiBjYXNlIDEzOiBjYXNlIDMyOlxuXHRcdFx0cmV0dXJuIDVcblx0XHQvLyAhICsgLCAvID4gQCB+IGlzb2xhdGUgdG9rZW5cblx0XHRjYXNlIDMzOiBjYXNlIDQzOiBjYXNlIDQ0OiBjYXNlIDQ3OiBjYXNlIDYyOiBjYXNlIDY0OiBjYXNlIDEyNjpcblx0XHQvLyA7IHsgfSBicmVha3BvaW50IHRva2VuXG5cdFx0Y2FzZSA1OTogY2FzZSAxMjM6IGNhc2UgMTI1OlxuXHRcdFx0cmV0dXJuIDRcblx0XHQvLyA6IGFjY29tcGFuaWVkIHRva2VuXG5cdFx0Y2FzZSA1ODpcblx0XHRcdHJldHVybiAzXG5cdFx0Ly8gXCIgJyAoIFsgb3BlbmluZyBkZWxpbWl0IHRva2VuXG5cdFx0Y2FzZSAzNDogY2FzZSAzOTogY2FzZSA0MDogY2FzZSA5MTpcblx0XHRcdHJldHVybiAyXG5cdFx0Ly8gKSBdIGNsb3NpbmcgZGVsaW1pdCB0b2tlblxuXHRcdGNhc2UgNDE6IGNhc2UgOTM6XG5cdFx0XHRyZXR1cm4gMVxuXHR9XG5cblx0cmV0dXJuIDBcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge2FueVtdfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYWxsb2MgKHZhbHVlKSB7XG5cdHJldHVybiBsaW5lID0gY29sdW1uID0gMSwgbGVuZ3RoID0gc3RybGVuKGNoYXJhY3RlcnMgPSB2YWx1ZSksIHBvc2l0aW9uID0gMCwgW11cbn1cblxuLyoqXG4gKiBAcGFyYW0ge2FueX0gdmFsdWVcbiAqIEByZXR1cm4ge2FueX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlYWxsb2MgKHZhbHVlKSB7XG5cdHJldHVybiBjaGFyYWN0ZXJzID0gJycsIHZhbHVlXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHR5cGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlbGltaXQgKHR5cGUpIHtcblx0cmV0dXJuIHRyaW0oc2xpY2UocG9zaXRpb24gLSAxLCBkZWxpbWl0ZXIodHlwZSA9PT0gOTEgPyB0eXBlICsgMiA6IHR5cGUgPT09IDQwID8gdHlwZSArIDEgOiB0eXBlKSkpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHtzdHJpbmdbXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRva2VuaXplICh2YWx1ZSkge1xuXHRyZXR1cm4gZGVhbGxvYyh0b2tlbml6ZXIoYWxsb2ModmFsdWUpKSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gd2hpdGVzcGFjZSAodHlwZSkge1xuXHR3aGlsZSAoY2hhcmFjdGVyID0gcGVlaygpKVxuXHRcdGlmIChjaGFyYWN0ZXIgPCAzMylcblx0XHRcdG5leHQoKVxuXHRcdGVsc2Vcblx0XHRcdGJyZWFrXG5cblx0cmV0dXJuIHRva2VuKHR5cGUpID4gMiB8fCB0b2tlbihjaGFyYWN0ZXIpID4gMyA/ICcnIDogJyAnXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmdbXX0gY2hpbGRyZW5cbiAqIEByZXR1cm4ge3N0cmluZ1tdfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9rZW5pemVyIChjaGlsZHJlbikge1xuXHR3aGlsZSAobmV4dCgpKVxuXHRcdHN3aXRjaCAodG9rZW4oY2hhcmFjdGVyKSkge1xuXHRcdFx0Y2FzZSAwOiBhcHBlbmQoaWRlbnRpZmllcihwb3NpdGlvbiAtIDEpLCBjaGlsZHJlbilcblx0XHRcdFx0YnJlYWtcblx0XHRcdGNhc2UgMjogYXBwZW5kKGRlbGltaXQoY2hhcmFjdGVyKSwgY2hpbGRyZW4pXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHRkZWZhdWx0OiBhcHBlbmQoZnJvbShjaGFyYWN0ZXIpLCBjaGlsZHJlbilcblx0XHR9XG5cblx0cmV0dXJuIGNoaWxkcmVuXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcGFyYW0ge251bWJlcn0gY291bnRcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwaW5nIChpbmRleCwgY291bnQpIHtcblx0d2hpbGUgKC0tY291bnQgJiYgbmV4dCgpKVxuXHRcdC8vIG5vdCAwLTkgQS1GIGEtZlxuXHRcdGlmIChjaGFyYWN0ZXIgPCA0OCB8fCBjaGFyYWN0ZXIgPiAxMDIgfHwgKGNoYXJhY3RlciA+IDU3ICYmIGNoYXJhY3RlciA8IDY1KSB8fCAoY2hhcmFjdGVyID4gNzAgJiYgY2hhcmFjdGVyIDwgOTcpKVxuXHRcdFx0YnJlYWtcblxuXHRyZXR1cm4gc2xpY2UoaW5kZXgsIGNhcmV0KCkgKyAoY291bnQgPCA2ICYmIHBlZWsoKSA9PSAzMiAmJiBuZXh0KCkgPT0gMzIpKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWxpbWl0ZXIgKHR5cGUpIHtcblx0d2hpbGUgKG5leHQoKSlcblx0XHRzd2l0Y2ggKGNoYXJhY3Rlcikge1xuXHRcdFx0Ly8gXSApIFwiICdcblx0XHRcdGNhc2UgdHlwZTpcblx0XHRcdFx0cmV0dXJuIHBvc2l0aW9uXG5cdFx0XHQvLyBcIiAnXG5cdFx0XHRjYXNlIDM0OiBjYXNlIDM5OlxuXHRcdFx0XHRpZiAodHlwZSAhPT0gMzQgJiYgdHlwZSAhPT0gMzkpXG5cdFx0XHRcdFx0ZGVsaW1pdGVyKGNoYXJhY3Rlcilcblx0XHRcdFx0YnJlYWtcblx0XHRcdC8vIChcblx0XHRcdGNhc2UgNDA6XG5cdFx0XHRcdGlmICh0eXBlID09PSA0MSlcblx0XHRcdFx0XHRkZWxpbWl0ZXIodHlwZSlcblx0XHRcdFx0YnJlYWtcblx0XHRcdC8vIFxcXG5cdFx0XHRjYXNlIDkyOlxuXHRcdFx0XHRuZXh0KClcblx0XHRcdFx0YnJlYWtcblx0XHR9XG5cblx0cmV0dXJuIHBvc2l0aW9uXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHR5cGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tbWVudGVyICh0eXBlLCBpbmRleCkge1xuXHR3aGlsZSAobmV4dCgpKVxuXHRcdC8vIC8vXG5cdFx0aWYgKHR5cGUgKyBjaGFyYWN0ZXIgPT09IDQ3ICsgMTApXG5cdFx0XHRicmVha1xuXHRcdC8vIC8qXG5cdFx0ZWxzZSBpZiAodHlwZSArIGNoYXJhY3RlciA9PT0gNDIgKyA0MiAmJiBwZWVrKCkgPT09IDQ3KVxuXHRcdFx0YnJlYWtcblxuXHRyZXR1cm4gJy8qJyArIHNsaWNlKGluZGV4LCBwb3NpdGlvbiAtIDEpICsgJyonICsgZnJvbSh0eXBlID09PSA0NyA/IHR5cGUgOiBuZXh0KCkpXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGlmaWVyIChpbmRleCkge1xuXHR3aGlsZSAoIXRva2VuKHBlZWsoKSkpXG5cdFx0bmV4dCgpXG5cblx0cmV0dXJuIHNsaWNlKGluZGV4LCBwb3NpdGlvbilcbn1cbiIsICJpbXBvcnQge0NPTU1FTlQsIFJVTEVTRVQsIERFQ0xBUkFUSU9OfSBmcm9tICcuL0VudW0uanMnXG5pbXBvcnQge2FicywgY2hhcmF0LCB0cmltLCBmcm9tLCBzaXplb2YsIHN0cmxlbiwgc3Vic3RyLCBhcHBlbmQsIHJlcGxhY2UsIGluZGV4b2Z9IGZyb20gJy4vVXRpbGl0eS5qcydcbmltcG9ydCB7bm9kZSwgY2hhciwgcHJldiwgbmV4dCwgcGVlaywgY2FyZXQsIGFsbG9jLCBkZWFsbG9jLCBkZWxpbWl0LCB3aGl0ZXNwYWNlLCBlc2NhcGluZywgaWRlbnRpZmllciwgY29tbWVudGVyfSBmcm9tICcuL1Rva2VuaXplci5qcydcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge29iamVjdFtdfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcGlsZSAodmFsdWUpIHtcblx0cmV0dXJuIGRlYWxsb2MocGFyc2UoJycsIG51bGwsIG51bGwsIG51bGwsIFsnJ10sIHZhbHVlID0gYWxsb2ModmFsdWUpLCAwLCBbMF0sIHZhbHVlKSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7b2JqZWN0fSByb290XG4gKiBAcGFyYW0ge29iamVjdD99IHBhcmVudFxuICogQHBhcmFtIHtzdHJpbmdbXX0gcnVsZVxuICogQHBhcmFtIHtzdHJpbmdbXX0gcnVsZXNcbiAqIEBwYXJhbSB7c3RyaW5nW119IHJ1bGVzZXRzXG4gKiBAcGFyYW0ge251bWJlcltdfSBwc2V1ZG9cbiAqIEBwYXJhbSB7bnVtYmVyW119IHBvaW50c1xuICogQHBhcmFtIHtzdHJpbmdbXX0gZGVjbGFyYXRpb25zXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZSAodmFsdWUsIHJvb3QsIHBhcmVudCwgcnVsZSwgcnVsZXMsIHJ1bGVzZXRzLCBwc2V1ZG8sIHBvaW50cywgZGVjbGFyYXRpb25zKSB7XG5cdHZhciBpbmRleCA9IDBcblx0dmFyIG9mZnNldCA9IDBcblx0dmFyIGxlbmd0aCA9IHBzZXVkb1xuXHR2YXIgYXRydWxlID0gMFxuXHR2YXIgcHJvcGVydHkgPSAwXG5cdHZhciBwcmV2aW91cyA9IDBcblx0dmFyIHZhcmlhYmxlID0gMVxuXHR2YXIgc2Nhbm5pbmcgPSAxXG5cdHZhciBhbXBlcnNhbmQgPSAxXG5cdHZhciBjaGFyYWN0ZXIgPSAwXG5cdHZhciB0eXBlID0gJydcblx0dmFyIHByb3BzID0gcnVsZXNcblx0dmFyIGNoaWxkcmVuID0gcnVsZXNldHNcblx0dmFyIHJlZmVyZW5jZSA9IHJ1bGVcblx0dmFyIGNoYXJhY3RlcnMgPSB0eXBlXG5cblx0d2hpbGUgKHNjYW5uaW5nKVxuXHRcdHN3aXRjaCAocHJldmlvdXMgPSBjaGFyYWN0ZXIsIGNoYXJhY3RlciA9IG5leHQoKSkge1xuXHRcdFx0Ly8gKFxuXHRcdFx0Y2FzZSA0MDpcblx0XHRcdFx0aWYgKHByZXZpb3VzICE9IDEwOCAmJiBjaGFyYXQoY2hhcmFjdGVycywgbGVuZ3RoIC0gMSkgPT0gNTgpIHtcblx0XHRcdFx0XHRpZiAoaW5kZXhvZihjaGFyYWN0ZXJzICs9IHJlcGxhY2UoZGVsaW1pdChjaGFyYWN0ZXIpLCAnJicsICcmXFxmJyksICcmXFxmJykgIT0gLTEpXG5cdFx0XHRcdFx0XHRhbXBlcnNhbmQgPSAtMVxuXHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdH1cblx0XHRcdC8vIFwiICcgW1xuXHRcdFx0Y2FzZSAzNDogY2FzZSAzOTogY2FzZSA5MTpcblx0XHRcdFx0Y2hhcmFjdGVycyArPSBkZWxpbWl0KGNoYXJhY3Rlcilcblx0XHRcdFx0YnJlYWtcblx0XHRcdC8vIFxcdCBcXG4gXFxyIFxcc1xuXHRcdFx0Y2FzZSA5OiBjYXNlIDEwOiBjYXNlIDEzOiBjYXNlIDMyOlxuXHRcdFx0XHRjaGFyYWN0ZXJzICs9IHdoaXRlc3BhY2UocHJldmlvdXMpXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHQvLyBcXFxuXHRcdFx0Y2FzZSA5Mjpcblx0XHRcdFx0Y2hhcmFjdGVycyArPSBlc2NhcGluZyhjYXJldCgpIC0gMSwgNylcblx0XHRcdFx0Y29udGludWVcblx0XHRcdC8vIC9cblx0XHRcdGNhc2UgNDc6XG5cdFx0XHRcdHN3aXRjaCAocGVlaygpKSB7XG5cdFx0XHRcdFx0Y2FzZSA0MjogY2FzZSA0Nzpcblx0XHRcdFx0XHRcdGFwcGVuZChjb21tZW50KGNvbW1lbnRlcihuZXh0KCksIGNhcmV0KCkpLCByb290LCBwYXJlbnQpLCBkZWNsYXJhdGlvbnMpXG5cdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRjaGFyYWN0ZXJzICs9ICcvJ1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrXG5cdFx0XHQvLyB7XG5cdFx0XHRjYXNlIDEyMyAqIHZhcmlhYmxlOlxuXHRcdFx0XHRwb2ludHNbaW5kZXgrK10gPSBzdHJsZW4oY2hhcmFjdGVycykgKiBhbXBlcnNhbmRcblx0XHRcdC8vIH0gOyBcXDBcblx0XHRcdGNhc2UgMTI1ICogdmFyaWFibGU6IGNhc2UgNTk6IGNhc2UgMDpcblx0XHRcdFx0c3dpdGNoIChjaGFyYWN0ZXIpIHtcblx0XHRcdFx0XHQvLyBcXDAgfVxuXHRcdFx0XHRcdGNhc2UgMDogY2FzZSAxMjU6IHNjYW5uaW5nID0gMFxuXHRcdFx0XHRcdC8vIDtcblx0XHRcdFx0XHRjYXNlIDU5ICsgb2Zmc2V0OiBpZiAoYW1wZXJzYW5kID09IC0xKSBjaGFyYWN0ZXJzID0gcmVwbGFjZShjaGFyYWN0ZXJzLCAvXFxmL2csICcnKVxuXHRcdFx0XHRcdFx0aWYgKHByb3BlcnR5ID4gMCAmJiAoc3RybGVuKGNoYXJhY3RlcnMpIC0gbGVuZ3RoKSlcblx0XHRcdFx0XHRcdFx0YXBwZW5kKHByb3BlcnR5ID4gMzIgPyBkZWNsYXJhdGlvbihjaGFyYWN0ZXJzICsgJzsnLCBydWxlLCBwYXJlbnQsIGxlbmd0aCAtIDEpIDogZGVjbGFyYXRpb24ocmVwbGFjZShjaGFyYWN0ZXJzLCAnICcsICcnKSArICc7JywgcnVsZSwgcGFyZW50LCBsZW5ndGggLSAyKSwgZGVjbGFyYXRpb25zKVxuXHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHQvLyBAIDtcblx0XHRcdFx0XHRjYXNlIDU5OiBjaGFyYWN0ZXJzICs9ICc7J1xuXHRcdFx0XHRcdC8vIHsgcnVsZS9hdC1ydWxlXG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdGFwcGVuZChyZWZlcmVuY2UgPSBydWxlc2V0KGNoYXJhY3RlcnMsIHJvb3QsIHBhcmVudCwgaW5kZXgsIG9mZnNldCwgcnVsZXMsIHBvaW50cywgdHlwZSwgcHJvcHMgPSBbXSwgY2hpbGRyZW4gPSBbXSwgbGVuZ3RoKSwgcnVsZXNldHMpXG5cblx0XHRcdFx0XHRcdGlmIChjaGFyYWN0ZXIgPT09IDEyMylcblx0XHRcdFx0XHRcdFx0aWYgKG9mZnNldCA9PT0gMClcblx0XHRcdFx0XHRcdFx0XHRwYXJzZShjaGFyYWN0ZXJzLCByb290LCByZWZlcmVuY2UsIHJlZmVyZW5jZSwgcHJvcHMsIHJ1bGVzZXRzLCBsZW5ndGgsIHBvaW50cywgY2hpbGRyZW4pXG5cdFx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdFx0XHRzd2l0Y2ggKGF0cnVsZSA9PT0gOTkgJiYgY2hhcmF0KGNoYXJhY3RlcnMsIDMpID09PSAxMTAgPyAxMDAgOiBhdHJ1bGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGQgbCBtIHNcblx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgMTAwOiBjYXNlIDEwODogY2FzZSAxMDk6IGNhc2UgMTE1OlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRwYXJzZSh2YWx1ZSwgcmVmZXJlbmNlLCByZWZlcmVuY2UsIHJ1bGUgJiYgYXBwZW5kKHJ1bGVzZXQodmFsdWUsIHJlZmVyZW5jZSwgcmVmZXJlbmNlLCAwLCAwLCBydWxlcywgcG9pbnRzLCB0eXBlLCBydWxlcywgcHJvcHMgPSBbXSwgbGVuZ3RoKSwgY2hpbGRyZW4pLCBydWxlcywgY2hpbGRyZW4sIGxlbmd0aCwgcG9pbnRzLCBydWxlID8gcHJvcHMgOiBjaGlsZHJlbilcblx0XHRcdFx0XHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHBhcnNlKGNoYXJhY3RlcnMsIHJlZmVyZW5jZSwgcmVmZXJlbmNlLCByZWZlcmVuY2UsIFsnJ10sIGNoaWxkcmVuLCAwLCBwb2ludHMsIGNoaWxkcmVuKVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGluZGV4ID0gb2Zmc2V0ID0gcHJvcGVydHkgPSAwLCB2YXJpYWJsZSA9IGFtcGVyc2FuZCA9IDEsIHR5cGUgPSBjaGFyYWN0ZXJzID0gJycsIGxlbmd0aCA9IHBzZXVkb1xuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8gOlxuXHRcdFx0Y2FzZSA1ODpcblx0XHRcdFx0bGVuZ3RoID0gMSArIHN0cmxlbihjaGFyYWN0ZXJzKSwgcHJvcGVydHkgPSBwcmV2aW91c1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0aWYgKHZhcmlhYmxlIDwgMSlcblx0XHRcdFx0XHRpZiAoY2hhcmFjdGVyID09IDEyMylcblx0XHRcdFx0XHRcdC0tdmFyaWFibGVcblx0XHRcdFx0XHRlbHNlIGlmIChjaGFyYWN0ZXIgPT0gMTI1ICYmIHZhcmlhYmxlKysgPT0gMCAmJiBwcmV2KCkgPT0gMTI1KVxuXHRcdFx0XHRcdFx0Y29udGludWVcblxuXHRcdFx0XHRzd2l0Y2ggKGNoYXJhY3RlcnMgKz0gZnJvbShjaGFyYWN0ZXIpLCBjaGFyYWN0ZXIgKiB2YXJpYWJsZSkge1xuXHRcdFx0XHRcdC8vICZcblx0XHRcdFx0XHRjYXNlIDM4OlxuXHRcdFx0XHRcdFx0YW1wZXJzYW5kID0gb2Zmc2V0ID4gMCA/IDEgOiAoY2hhcmFjdGVycyArPSAnXFxmJywgLTEpXG5cdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdC8vICxcblx0XHRcdFx0XHRjYXNlIDQ0OlxuXHRcdFx0XHRcdFx0cG9pbnRzW2luZGV4KytdID0gKHN0cmxlbihjaGFyYWN0ZXJzKSAtIDEpICogYW1wZXJzYW5kLCBhbXBlcnNhbmQgPSAxXG5cdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdC8vIEBcblx0XHRcdFx0XHRjYXNlIDY0OlxuXHRcdFx0XHRcdFx0Ly8gLVxuXHRcdFx0XHRcdFx0aWYgKHBlZWsoKSA9PT0gNDUpXG5cdFx0XHRcdFx0XHRcdGNoYXJhY3RlcnMgKz0gZGVsaW1pdChuZXh0KCkpXG5cblx0XHRcdFx0XHRcdGF0cnVsZSA9IHBlZWsoKSwgb2Zmc2V0ID0gbGVuZ3RoID0gc3RybGVuKHR5cGUgPSBjaGFyYWN0ZXJzICs9IGlkZW50aWZpZXIoY2FyZXQoKSkpLCBjaGFyYWN0ZXIrK1xuXHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHQvLyAtXG5cdFx0XHRcdFx0Y2FzZSA0NTpcblx0XHRcdFx0XHRcdGlmIChwcmV2aW91cyA9PT0gNDUgJiYgc3RybGVuKGNoYXJhY3RlcnMpID09IDIpXG5cdFx0XHRcdFx0XHRcdHZhcmlhYmxlID0gMFxuXHRcdFx0XHR9XG5cdFx0fVxuXG5cdHJldHVybiBydWxlc2V0c1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtvYmplY3R9IHJvb3RcbiAqIEBwYXJhbSB7b2JqZWN0P30gcGFyZW50XG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXRcbiAqIEBwYXJhbSB7c3RyaW5nW119IHJ1bGVzXG4gKiBAcGFyYW0ge251bWJlcltdfSBwb2ludHNcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBwcm9wc1xuICogQHBhcmFtIHtzdHJpbmdbXX0gY2hpbGRyZW5cbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGhcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1bGVzZXQgKHZhbHVlLCByb290LCBwYXJlbnQsIGluZGV4LCBvZmZzZXQsIHJ1bGVzLCBwb2ludHMsIHR5cGUsIHByb3BzLCBjaGlsZHJlbiwgbGVuZ3RoKSB7XG5cdHZhciBwb3N0ID0gb2Zmc2V0IC0gMVxuXHR2YXIgcnVsZSA9IG9mZnNldCA9PT0gMCA/IHJ1bGVzIDogWycnXVxuXHR2YXIgc2l6ZSA9IHNpemVvZihydWxlKVxuXG5cdGZvciAodmFyIGkgPSAwLCBqID0gMCwgayA9IDA7IGkgPCBpbmRleDsgKytpKVxuXHRcdGZvciAodmFyIHggPSAwLCB5ID0gc3Vic3RyKHZhbHVlLCBwb3N0ICsgMSwgcG9zdCA9IGFicyhqID0gcG9pbnRzW2ldKSksIHogPSB2YWx1ZTsgeCA8IHNpemU7ICsreClcblx0XHRcdGlmICh6ID0gdHJpbShqID4gMCA/IHJ1bGVbeF0gKyAnICcgKyB5IDogcmVwbGFjZSh5LCAvJlxcZi9nLCBydWxlW3hdKSkpXG5cdFx0XHRcdHByb3BzW2srK10gPSB6XG5cblx0cmV0dXJuIG5vZGUodmFsdWUsIHJvb3QsIHBhcmVudCwgb2Zmc2V0ID09PSAwID8gUlVMRVNFVCA6IHR5cGUsIHByb3BzLCBjaGlsZHJlbiwgbGVuZ3RoKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHBhcmFtIHtvYmplY3R9IHJvb3RcbiAqIEBwYXJhbSB7b2JqZWN0P30gcGFyZW50XG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21tZW50ICh2YWx1ZSwgcm9vdCwgcGFyZW50KSB7XG5cdHJldHVybiBub2RlKHZhbHVlLCByb290LCBwYXJlbnQsIENPTU1FTlQsIGZyb20oY2hhcigpKSwgc3Vic3RyKHZhbHVlLCAyLCAtMiksIDApXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge29iamVjdH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3Q/fSBwYXJlbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGhcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY2xhcmF0aW9uICh2YWx1ZSwgcm9vdCwgcGFyZW50LCBsZW5ndGgpIHtcblx0cmV0dXJuIG5vZGUodmFsdWUsIHJvb3QsIHBhcmVudCwgREVDTEFSQVRJT04sIHN1YnN0cih2YWx1ZSwgMCwgbGVuZ3RoKSwgc3Vic3RyKHZhbHVlLCBsZW5ndGggKyAxLCAtMSksIGxlbmd0aClcbn1cbiIsICJpbXBvcnQge01TLCBNT1osIFdFQktJVH0gZnJvbSAnLi9FbnVtLmpzJ1xuaW1wb3J0IHtoYXNoLCBjaGFyYXQsIHN0cmxlbiwgaW5kZXhvZiwgcmVwbGFjZSwgc3Vic3RyLCBtYXRjaH0gZnJvbSAnLi9VdGlsaXR5LmpzJ1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aFxuICogQHBhcmFtIHtvYmplY3RbXX0gY2hpbGRyZW5cbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZWZpeCAodmFsdWUsIGxlbmd0aCwgY2hpbGRyZW4pIHtcblx0c3dpdGNoIChoYXNoKHZhbHVlLCBsZW5ndGgpKSB7XG5cdFx0Ly8gY29sb3ItYWRqdXN0XG5cdFx0Y2FzZSA1MTAzOlxuXHRcdFx0cmV0dXJuIFdFQktJVCArICdwcmludC0nICsgdmFsdWUgKyB2YWx1ZVxuXHRcdC8vIGFuaW1hdGlvbiwgYW5pbWF0aW9uLShkZWxheXxkaXJlY3Rpb258ZHVyYXRpb258ZmlsbC1tb2RlfGl0ZXJhdGlvbi1jb3VudHxuYW1lfHBsYXktc3RhdGV8dGltaW5nLWZ1bmN0aW9uKVxuXHRcdGNhc2UgNTczNzogY2FzZSA0MjAxOiBjYXNlIDMxNzc6IGNhc2UgMzQzMzogY2FzZSAxNjQxOiBjYXNlIDQ0NTc6IGNhc2UgMjkyMTpcblx0XHQvLyB0ZXh0LWRlY29yYXRpb24sIGZpbHRlciwgY2xpcC1wYXRoLCBiYWNrZmFjZS12aXNpYmlsaXR5LCBjb2x1bW4sIGJveC1kZWNvcmF0aW9uLWJyZWFrXG5cdFx0Y2FzZSA1NTcyOiBjYXNlIDYzNTY6IGNhc2UgNTg0NDogY2FzZSAzMTkxOiBjYXNlIDY2NDU6IGNhc2UgMzAwNTpcblx0XHQvLyBtYXNrLCBtYXNrLWltYWdlLCBtYXNrLShtb2RlfGNsaXB8c2l6ZSksIG1hc2stKHJlcGVhdHxvcmlnaW4pLCBtYXNrLXBvc2l0aW9uLCBtYXNrLWNvbXBvc2l0ZSxcblx0XHRjYXNlIDYzOTE6IGNhc2UgNTg3OTogY2FzZSA1NjIzOiBjYXNlIDYxMzU6IGNhc2UgNDU5OTogY2FzZSA0ODU1OlxuXHRcdC8vIGJhY2tncm91bmQtY2xpcCwgY29sdW1ucywgY29sdW1uLShjb3VudHxmaWxsfGdhcHxydWxlfHJ1bGUtY29sb3J8cnVsZS1zdHlsZXxydWxlLXdpZHRofHNwYW58d2lkdGgpXG5cdFx0Y2FzZSA0MjE1OiBjYXNlIDYzODk6IGNhc2UgNTEwOTogY2FzZSA1MzY1OiBjYXNlIDU2MjE6IGNhc2UgMzgyOTpcblx0XHRcdHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIHZhbHVlXG5cdFx0Ly8gdGFiLXNpemVcblx0XHRjYXNlIDQ3ODk6XG5cdFx0XHRyZXR1cm4gTU9aICsgdmFsdWUgKyB2YWx1ZVxuXHRcdC8vIGFwcGVhcmFuY2UsIHVzZXItc2VsZWN0LCB0cmFuc2Zvcm0sIGh5cGhlbnMsIHRleHQtc2l6ZS1hZGp1c3Rcblx0XHRjYXNlIDUzNDk6IGNhc2UgNDI0NjogY2FzZSA0ODEwOiBjYXNlIDY5Njg6IGNhc2UgMjc1Njpcblx0XHRcdHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1PWiArIHZhbHVlICsgTVMgKyB2YWx1ZSArIHZhbHVlXG5cdFx0Ly8gd3JpdGluZy1tb2RlXG5cdFx0Y2FzZSA1OTM2OlxuXHRcdFx0c3dpdGNoIChjaGFyYXQodmFsdWUsIGxlbmd0aCArIDExKSkge1xuXHRcdFx0XHQvLyB2ZXJ0aWNhbC1sKHIpXG5cdFx0XHRcdGNhc2UgMTE0OlxuXHRcdFx0XHRcdHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgL1tzdmhdXFx3Ky1bdGJscl17Mn0vLCAndGInKSArIHZhbHVlXG5cdFx0XHRcdC8vIHZlcnRpY2FsLXIobClcblx0XHRcdFx0Y2FzZSAxMDg6XG5cdFx0XHRcdFx0cmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAvW3N2aF1cXHcrLVt0YmxyXXsyfS8sICd0Yi1ybCcpICsgdmFsdWVcblx0XHRcdFx0Ly8gaG9yaXpvbnRhbCgtKXRiXG5cdFx0XHRcdGNhc2UgNDU6XG5cdFx0XHRcdFx0cmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAvW3N2aF1cXHcrLVt0YmxyXXsyfS8sICdscicpICsgdmFsdWVcblx0XHRcdFx0Ly8gZGVmYXVsdDogZmFsbHRocm91Z2ggdG8gYmVsb3dcblx0XHRcdH1cblx0XHQvLyBmbGV4LCBmbGV4LWRpcmVjdGlvbiwgc2Nyb2xsLXNuYXAtdHlwZSwgd3JpdGluZy1tb2RlXG5cdFx0Y2FzZSA2ODI4OiBjYXNlIDQyNjg6IGNhc2UgMjkwMzpcblx0XHRcdHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgdmFsdWUgKyB2YWx1ZVxuXHRcdC8vIG9yZGVyXG5cdFx0Y2FzZSA2MTY1OlxuXHRcdFx0cmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyAnZmxleC0nICsgdmFsdWUgKyB2YWx1ZVxuXHRcdC8vIGFsaWduLWl0ZW1zXG5cdFx0Y2FzZSA1MTg3OlxuXHRcdFx0cmV0dXJuIFdFQktJVCArIHZhbHVlICsgcmVwbGFjZSh2YWx1ZSwgLyhcXHcrKS4rKDpbXl0rKS8sIFdFQktJVCArICdib3gtJDEkMicgKyBNUyArICdmbGV4LSQxJDInKSArIHZhbHVlXG5cdFx0Ly8gYWxpZ24tc2VsZlxuXHRcdGNhc2UgNTQ0Mzpcblx0XHRcdHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgJ2ZsZXgtaXRlbS0nICsgcmVwbGFjZSh2YWx1ZSwgL2ZsZXgtfC1zZWxmL2csICcnKSArICghbWF0Y2godmFsdWUsIC9mbGV4LXxiYXNlbGluZS8pID8gTVMgKyAnZ3JpZC1yb3ctJyArIHJlcGxhY2UodmFsdWUsIC9mbGV4LXwtc2VsZi9nLCAnJykgOiAnJykgKyB2YWx1ZVxuXHRcdC8vIGFsaWduLWNvbnRlbnRcblx0XHRjYXNlIDQ2NzU6XG5cdFx0XHRyZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArICdmbGV4LWxpbmUtcGFjaycgKyByZXBsYWNlKHZhbHVlLCAvYWxpZ24tY29udGVudHxmbGV4LXwtc2VsZi9nLCAnJykgKyB2YWx1ZVxuXHRcdC8vIGZsZXgtc2hyaW5rXG5cdFx0Y2FzZSA1NTQ4OlxuXHRcdFx0cmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAnc2hyaW5rJywgJ25lZ2F0aXZlJykgKyB2YWx1ZVxuXHRcdC8vIGZsZXgtYmFzaXNcblx0XHRjYXNlIDUyOTI6XG5cdFx0XHRyZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsICdiYXNpcycsICdwcmVmZXJyZWQtc2l6ZScpICsgdmFsdWVcblx0XHQvLyBmbGV4LWdyb3dcblx0XHRjYXNlIDYwNjA6XG5cdFx0XHRyZXR1cm4gV0VCS0lUICsgJ2JveC0nICsgcmVwbGFjZSh2YWx1ZSwgJy1ncm93JywgJycpICsgV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsICdncm93JywgJ3Bvc2l0aXZlJykgKyB2YWx1ZVxuXHRcdC8vIHRyYW5zaXRpb25cblx0XHRjYXNlIDQ1NTQ6XG5cdFx0XHRyZXR1cm4gV0VCS0lUICsgcmVwbGFjZSh2YWx1ZSwgLyhbXi1dKSh0cmFuc2Zvcm0pL2csICckMScgKyBXRUJLSVQgKyAnJDInKSArIHZhbHVlXG5cdFx0Ly8gY3Vyc29yXG5cdFx0Y2FzZSA2MTg3OlxuXHRcdFx0cmV0dXJuIHJlcGxhY2UocmVwbGFjZShyZXBsYWNlKHZhbHVlLCAvKHpvb20tfGdyYWIpLywgV0VCS0lUICsgJyQxJyksIC8oaW1hZ2Utc2V0KS8sIFdFQktJVCArICckMScpLCB2YWx1ZSwgJycpICsgdmFsdWVcblx0XHQvLyBiYWNrZ3JvdW5kLCBiYWNrZ3JvdW5kLWltYWdlXG5cdFx0Y2FzZSA1NDk1OiBjYXNlIDM5NTk6XG5cdFx0XHRyZXR1cm4gcmVwbGFjZSh2YWx1ZSwgLyhpbWFnZS1zZXRcXChbXl0qKS8sIFdFQktJVCArICckMScgKyAnJGAkMScpXG5cdFx0Ly8ganVzdGlmeS1jb250ZW50XG5cdFx0Y2FzZSA0OTY4OlxuXHRcdFx0cmV0dXJuIHJlcGxhY2UocmVwbGFjZSh2YWx1ZSwgLyguKzopKGZsZXgtKT8oLiopLywgV0VCS0lUICsgJ2JveC1wYWNrOiQzJyArIE1TICsgJ2ZsZXgtcGFjazokMycpLCAvcy4rLWJbXjtdKy8sICdqdXN0aWZ5JykgKyBXRUJLSVQgKyB2YWx1ZSArIHZhbHVlXG5cdFx0Ly8ganVzdGlmeS1zZWxmXG5cdFx0Y2FzZSA0MjAwOlxuXHRcdFx0aWYgKCFtYXRjaCh2YWx1ZSwgL2ZsZXgtfGJhc2VsaW5lLykpIHJldHVybiBNUyArICdncmlkLWNvbHVtbi1hbGlnbicgKyBzdWJzdHIodmFsdWUsIGxlbmd0aCkgKyB2YWx1ZVxuXHRcdFx0YnJlYWtcblx0XHQvLyBncmlkLXRlbXBsYXRlLShjb2x1bW5zfHJvd3MpXG5cdFx0Y2FzZSAyNTkyOiBjYXNlIDMzNjA6XG5cdFx0XHRyZXR1cm4gTVMgKyByZXBsYWNlKHZhbHVlLCAndGVtcGxhdGUtJywgJycpICsgdmFsdWVcblx0XHQvLyBncmlkLShyb3d8Y29sdW1uKS1zdGFydFxuXHRcdGNhc2UgNDM4NDogY2FzZSAzNjE2OlxuXHRcdFx0aWYgKGNoaWxkcmVuICYmIGNoaWxkcmVuLnNvbWUoZnVuY3Rpb24gKGVsZW1lbnQsIGluZGV4KSB7IHJldHVybiBsZW5ndGggPSBpbmRleCwgbWF0Y2goZWxlbWVudC5wcm9wcywgL2dyaWQtXFx3Ky1lbmQvKSB9KSkge1xuXHRcdFx0XHRyZXR1cm4gfmluZGV4b2YodmFsdWUgKyAoY2hpbGRyZW4gPSBjaGlsZHJlbltsZW5ndGhdLnZhbHVlKSwgJ3NwYW4nKSA/IHZhbHVlIDogKE1TICsgcmVwbGFjZSh2YWx1ZSwgJy1zdGFydCcsICcnKSArIHZhbHVlICsgTVMgKyAnZ3JpZC1yb3ctc3BhbjonICsgKH5pbmRleG9mKGNoaWxkcmVuLCAnc3BhbicpID8gbWF0Y2goY2hpbGRyZW4sIC9cXGQrLykgOiArbWF0Y2goY2hpbGRyZW4sIC9cXGQrLykgLSArbWF0Y2godmFsdWUsIC9cXGQrLykpICsgJzsnKVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIE1TICsgcmVwbGFjZSh2YWx1ZSwgJy1zdGFydCcsICcnKSArIHZhbHVlXG5cdFx0Ly8gZ3JpZC0ocm93fGNvbHVtbiktZW5kXG5cdFx0Y2FzZSA0ODk2OiBjYXNlIDQxMjg6XG5cdFx0XHRyZXR1cm4gKGNoaWxkcmVuICYmIGNoaWxkcmVuLnNvbWUoZnVuY3Rpb24gKGVsZW1lbnQpIHsgcmV0dXJuIG1hdGNoKGVsZW1lbnQucHJvcHMsIC9ncmlkLVxcdystc3RhcnQvKSB9KSkgPyB2YWx1ZSA6IE1TICsgcmVwbGFjZShyZXBsYWNlKHZhbHVlLCAnLWVuZCcsICctc3BhbicpLCAnc3BhbiAnLCAnJykgKyB2YWx1ZVxuXHRcdC8vIChtYXJnaW58cGFkZGluZyktaW5saW5lLShzdGFydHxlbmQpXG5cdFx0Y2FzZSA0MDk1OiBjYXNlIDM1ODM6IGNhc2UgNDA2ODogY2FzZSAyNTMyOlxuXHRcdFx0cmV0dXJuIHJlcGxhY2UodmFsdWUsIC8oLispLWlubGluZSguKykvLCBXRUJLSVQgKyAnJDEkMicpICsgdmFsdWVcblx0XHQvLyAobWlufG1heCk/KHdpZHRofGhlaWdodHxpbmxpbmUtc2l6ZXxibG9jay1zaXplKVxuXHRcdGNhc2UgODExNjogY2FzZSA3MDU5OiBjYXNlIDU3NTM6IGNhc2UgNTUzNTpcblx0XHRjYXNlIDU0NDU6IGNhc2UgNTcwMTogY2FzZSA0OTMzOiBjYXNlIDQ2Nzc6XG5cdFx0Y2FzZSA1NTMzOiBjYXNlIDU3ODk6IGNhc2UgNTAyMTogY2FzZSA0NzY1OlxuXHRcdFx0Ly8gc3RyZXRjaCwgbWF4LWNvbnRlbnQsIG1pbi1jb250ZW50LCBmaWxsLWF2YWlsYWJsZVxuXHRcdFx0aWYgKHN0cmxlbih2YWx1ZSkgLSAxIC0gbGVuZ3RoID4gNilcblx0XHRcdFx0c3dpdGNoIChjaGFyYXQodmFsdWUsIGxlbmd0aCArIDEpKSB7XG5cdFx0XHRcdFx0Ly8gKG0pYXgtY29udGVudCwgKG0paW4tY29udGVudFxuXHRcdFx0XHRcdGNhc2UgMTA5OlxuXHRcdFx0XHRcdFx0Ly8gLVxuXHRcdFx0XHRcdFx0aWYgKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgNCkgIT09IDQ1KVxuXHRcdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdC8vIChmKWlsbC1hdmFpbGFibGUsIChmKWl0LWNvbnRlbnRcblx0XHRcdFx0XHRjYXNlIDEwMjpcblx0XHRcdFx0XHRcdHJldHVybiByZXBsYWNlKHZhbHVlLCAvKC4rOikoLispLShbXl0rKS8sICckMScgKyBXRUJLSVQgKyAnJDItJDMnICsgJyQxJyArIE1PWiArIChjaGFyYXQodmFsdWUsIGxlbmd0aCArIDMpID09IDEwOCA/ICckMycgOiAnJDItJDMnKSkgKyB2YWx1ZVxuXHRcdFx0XHRcdC8vIChzKXRyZXRjaFxuXHRcdFx0XHRcdGNhc2UgMTE1OlxuXHRcdFx0XHRcdFx0cmV0dXJuIH5pbmRleG9mKHZhbHVlLCAnc3RyZXRjaCcpID8gcHJlZml4KHJlcGxhY2UodmFsdWUsICdzdHJldGNoJywgJ2ZpbGwtYXZhaWxhYmxlJyksIGxlbmd0aCwgY2hpbGRyZW4pICsgdmFsdWUgOiB2YWx1ZVxuXHRcdFx0XHR9XG5cdFx0XHRicmVha1xuXHRcdC8vIGdyaWQtKGNvbHVtbnxyb3cpXG5cdFx0Y2FzZSA1MTUyOiBjYXNlIDU5MjA6XG5cdFx0XHRyZXR1cm4gcmVwbGFjZSh2YWx1ZSwgLyguKz8pOihcXGQrKShcXHMqXFwvXFxzKihzcGFuKT9cXHMqKFxcZCspKT8oLiopLywgZnVuY3Rpb24gKF8sIGEsIGIsIGMsIGQsIGUsIGYpIHsgcmV0dXJuIChNUyArIGEgKyAnOicgKyBiICsgZikgKyAoYyA/IChNUyArIGEgKyAnLXNwYW46JyArIChkID8gZSA6ICtlIC0gK2IpKSArIGYgOiAnJykgKyB2YWx1ZSB9KVxuXHRcdC8vIHBvc2l0aW9uOiBzdGlja3lcblx0XHRjYXNlIDQ5NDk6XG5cdFx0XHQvLyBzdGljayh5KT9cblx0XHRcdGlmIChjaGFyYXQodmFsdWUsIGxlbmd0aCArIDYpID09PSAxMjEpXG5cdFx0XHRcdHJldHVybiByZXBsYWNlKHZhbHVlLCAnOicsICc6JyArIFdFQktJVCkgKyB2YWx1ZVxuXHRcdFx0YnJlYWtcblx0XHQvLyBkaXNwbGF5OiAoZmxleHxpbmxpbmUtZmxleHxncmlkfGlubGluZS1ncmlkKVxuXHRcdGNhc2UgNjQ0NDpcblx0XHRcdHN3aXRjaCAoY2hhcmF0KHZhbHVlLCBjaGFyYXQodmFsdWUsIDE0KSA9PT0gNDUgPyAxOCA6IDExKSkge1xuXHRcdFx0XHQvLyAoaW5saW5lLSk/ZmxlKHgpXG5cdFx0XHRcdGNhc2UgMTIwOlxuXHRcdFx0XHRcdHJldHVybiByZXBsYWNlKHZhbHVlLCAvKC4rOikoW147XFxzIV0rKSg7fChcXHMrKT8hLispPy8sICckMScgKyBXRUJLSVQgKyAoY2hhcmF0KHZhbHVlLCAxNCkgPT09IDQ1ID8gJ2lubGluZS0nIDogJycpICsgJ2JveCQzJyArICckMScgKyBXRUJLSVQgKyAnJDIkMycgKyAnJDEnICsgTVMgKyAnJDJib3gkMycpICsgdmFsdWVcblx0XHRcdFx0Ly8gKGlubGluZS0pP2dyaShkKVxuXHRcdFx0XHRjYXNlIDEwMDpcblx0XHRcdFx0XHRyZXR1cm4gcmVwbGFjZSh2YWx1ZSwgJzonLCAnOicgKyBNUykgKyB2YWx1ZVxuXHRcdFx0fVxuXHRcdFx0YnJlYWtcblx0XHQvLyBzY3JvbGwtbWFyZ2luLCBzY3JvbGwtbWFyZ2luLSh0b3B8cmlnaHR8Ym90dG9tfGxlZnQpXG5cdFx0Y2FzZSA1NzE5OiBjYXNlIDI2NDc6IGNhc2UgMjEzNTogY2FzZSAzOTI3OiBjYXNlIDIzOTE6XG5cdFx0XHRyZXR1cm4gcmVwbGFjZSh2YWx1ZSwgJ3Njcm9sbC0nLCAnc2Nyb2xsLXNuYXAtJykgKyB2YWx1ZVxuXHR9XG5cblx0cmV0dXJuIHZhbHVlXG59XG4iLCAiaW1wb3J0IHtJTVBPUlQsIExBWUVSLCBDT01NRU5ULCBSVUxFU0VULCBERUNMQVJBVElPTiwgS0VZRlJBTUVTfSBmcm9tICcuL0VudW0uanMnXG5pbXBvcnQge3N0cmxlbiwgc2l6ZW9mfSBmcm9tICcuL1V0aWxpdHkuanMnXG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3RbXX0gY2hpbGRyZW5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemUgKGNoaWxkcmVuLCBjYWxsYmFjaykge1xuXHR2YXIgb3V0cHV0ID0gJydcblx0dmFyIGxlbmd0aCA9IHNpemVvZihjaGlsZHJlbilcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKVxuXHRcdG91dHB1dCArPSBjYWxsYmFjayhjaGlsZHJlbltpXSwgaSwgY2hpbGRyZW4sIGNhbGxiYWNrKSB8fCAnJ1xuXG5cdHJldHVybiBvdXRwdXRcbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZWxlbWVudFxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcGFyYW0ge29iamVjdFtdfSBjaGlsZHJlblxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ2lmeSAoZWxlbWVudCwgaW5kZXgsIGNoaWxkcmVuLCBjYWxsYmFjaykge1xuXHRzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xuXHRcdGNhc2UgTEFZRVI6IGlmIChlbGVtZW50LmNoaWxkcmVuLmxlbmd0aCkgYnJlYWtcblx0XHRjYXNlIElNUE9SVDogY2FzZSBERUNMQVJBVElPTjogcmV0dXJuIGVsZW1lbnQucmV0dXJuID0gZWxlbWVudC5yZXR1cm4gfHwgZWxlbWVudC52YWx1ZVxuXHRcdGNhc2UgQ09NTUVOVDogcmV0dXJuICcnXG5cdFx0Y2FzZSBLRVlGUkFNRVM6IHJldHVybiBlbGVtZW50LnJldHVybiA9IGVsZW1lbnQudmFsdWUgKyAneycgKyBzZXJpYWxpemUoZWxlbWVudC5jaGlsZHJlbiwgY2FsbGJhY2spICsgJ30nXG5cdFx0Y2FzZSBSVUxFU0VUOiBlbGVtZW50LnZhbHVlID0gZWxlbWVudC5wcm9wcy5qb2luKCcsJylcblx0fVxuXG5cdHJldHVybiBzdHJsZW4oY2hpbGRyZW4gPSBzZXJpYWxpemUoZWxlbWVudC5jaGlsZHJlbiwgY2FsbGJhY2spKSA/IGVsZW1lbnQucmV0dXJuID0gZWxlbWVudC52YWx1ZSArICd7JyArIGNoaWxkcmVuICsgJ30nIDogJydcbn1cbiIsICJpbXBvcnQge01TLCBNT1osIFdFQktJVCwgUlVMRVNFVCwgS0VZRlJBTUVTLCBERUNMQVJBVElPTn0gZnJvbSAnLi9FbnVtLmpzJ1xuaW1wb3J0IHttYXRjaCwgY2hhcmF0LCBzdWJzdHIsIHN0cmxlbiwgc2l6ZW9mLCByZXBsYWNlLCBjb21iaW5lfSBmcm9tICcuL1V0aWxpdHkuanMnXG5pbXBvcnQge2NvcHksIHRva2VuaXplfSBmcm9tICcuL1Rva2VuaXplci5qcydcbmltcG9ydCB7c2VyaWFsaXplfSBmcm9tICcuL1NlcmlhbGl6ZXIuanMnXG5pbXBvcnQge3ByZWZpeH0gZnJvbSAnLi9QcmVmaXhlci5qcydcblxuLyoqXG4gKiBAcGFyYW0ge2Z1bmN0aW9uW119IGNvbGxlY3Rpb25cbiAqIEByZXR1cm4ge2Z1bmN0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWlkZGxld2FyZSAoY29sbGVjdGlvbikge1xuXHR2YXIgbGVuZ3RoID0gc2l6ZW9mKGNvbGxlY3Rpb24pXG5cblx0cmV0dXJuIGZ1bmN0aW9uIChlbGVtZW50LCBpbmRleCwgY2hpbGRyZW4sIGNhbGxiYWNrKSB7XG5cdFx0dmFyIG91dHB1dCA9ICcnXG5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKVxuXHRcdFx0b3V0cHV0ICs9IGNvbGxlY3Rpb25baV0oZWxlbWVudCwgaW5kZXgsIGNoaWxkcmVuLCBjYWxsYmFjaykgfHwgJydcblxuXHRcdHJldHVybiBvdXRwdXRcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtmdW5jdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1bGVzaGVldCAoY2FsbGJhY2spIHtcblx0cmV0dXJuIGZ1bmN0aW9uIChlbGVtZW50KSB7XG5cdFx0aWYgKCFlbGVtZW50LnJvb3QpXG5cdFx0XHRpZiAoZWxlbWVudCA9IGVsZW1lbnQucmV0dXJuKVxuXHRcdFx0XHRjYWxsYmFjayhlbGVtZW50KVxuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGVsZW1lbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHBhcmFtIHtvYmplY3RbXX0gY2hpbGRyZW5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmVmaXhlciAoZWxlbWVudCwgaW5kZXgsIGNoaWxkcmVuLCBjYWxsYmFjaykge1xuXHRpZiAoZWxlbWVudC5sZW5ndGggPiAtMSlcblx0XHRpZiAoIWVsZW1lbnQucmV0dXJuKVxuXHRcdFx0c3dpdGNoIChlbGVtZW50LnR5cGUpIHtcblx0XHRcdFx0Y2FzZSBERUNMQVJBVElPTjogZWxlbWVudC5yZXR1cm4gPSBwcmVmaXgoZWxlbWVudC52YWx1ZSwgZWxlbWVudC5sZW5ndGgsIGNoaWxkcmVuKVxuXHRcdFx0XHRcdHJldHVyblxuXHRcdFx0XHRjYXNlIEtFWUZSQU1FUzpcblx0XHRcdFx0XHRyZXR1cm4gc2VyaWFsaXplKFtjb3B5KGVsZW1lbnQsIHt2YWx1ZTogcmVwbGFjZShlbGVtZW50LnZhbHVlLCAnQCcsICdAJyArIFdFQktJVCl9KV0sIGNhbGxiYWNrKVxuXHRcdFx0XHRjYXNlIFJVTEVTRVQ6XG5cdFx0XHRcdFx0aWYgKGVsZW1lbnQubGVuZ3RoKVxuXHRcdFx0XHRcdFx0cmV0dXJuIGNvbWJpbmUoZWxlbWVudC5wcm9wcywgZnVuY3Rpb24gKHZhbHVlKSB7XG5cdFx0XHRcdFx0XHRcdHN3aXRjaCAobWF0Y2godmFsdWUsIC8oOjpwbGFjXFx3K3w6cmVhZC1cXHcrKS8pKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gOnJlYWQtKG9ubHl8d3JpdGUpXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSAnOnJlYWQtb25seSc6IGNhc2UgJzpyZWFkLXdyaXRlJzpcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBzZXJpYWxpemUoW2NvcHkoZWxlbWVudCwge3Byb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocmVhZC1cXHcrKS8sICc6JyArIE1PWiArICckMScpXX0pXSwgY2FsbGJhY2spXG5cdFx0XHRcdFx0XHRcdFx0Ly8gOnBsYWNlaG9sZGVyXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSAnOjpwbGFjZWhvbGRlcic6XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gc2VyaWFsaXplKFtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29weShlbGVtZW50LCB7cHJvcHM6IFtyZXBsYWNlKHZhbHVlLCAvOihwbGFjXFx3KykvLCAnOicgKyBXRUJLSVQgKyAnaW5wdXQtJDEnKV19KSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29weShlbGVtZW50LCB7cHJvcHM6IFtyZXBsYWNlKHZhbHVlLCAvOihwbGFjXFx3KykvLCAnOicgKyBNT1ogKyAnJDEnKV19KSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29weShlbGVtZW50LCB7cHJvcHM6IFtyZXBsYWNlKHZhbHVlLCAvOihwbGFjXFx3KykvLCBNUyArICdpbnB1dC0kMScpXX0pXG5cdFx0XHRcdFx0XHRcdFx0XHRdLCBjYWxsYmFjaylcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdHJldHVybiAnJ1xuXHRcdFx0XHRcdFx0fSlcblx0XHRcdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZWxlbWVudFxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcGFyYW0ge29iamVjdFtdfSBjaGlsZHJlblxuICovXG5leHBvcnQgZnVuY3Rpb24gbmFtZXNwYWNlIChlbGVtZW50KSB7XG5cdHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XG5cdFx0Y2FzZSBSVUxFU0VUOlxuXHRcdFx0ZWxlbWVudC5wcm9wcyA9IGVsZW1lbnQucHJvcHMubWFwKGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRcdFx0XHRyZXR1cm4gY29tYmluZSh0b2tlbml6ZSh2YWx1ZSksIGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGNoaWxkcmVuKSB7XG5cdFx0XHRcdFx0c3dpdGNoIChjaGFyYXQodmFsdWUsIDApKSB7XG5cdFx0XHRcdFx0XHQvLyBcXGZcblx0XHRcdFx0XHRcdGNhc2UgMTI6XG5cdFx0XHRcdFx0XHRcdHJldHVybiBzdWJzdHIodmFsdWUsIDEsIHN0cmxlbih2YWx1ZSkpXG5cdFx0XHRcdFx0XHQvLyBcXDAgKCArID4gflxuXHRcdFx0XHRcdFx0Y2FzZSAwOiBjYXNlIDQwOiBjYXNlIDQzOiBjYXNlIDYyOiBjYXNlIDEyNjpcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHZhbHVlXG5cdFx0XHRcdFx0XHQvLyA6XG5cdFx0XHRcdFx0XHRjYXNlIDU4OlxuXHRcdFx0XHRcdFx0XHRpZiAoY2hpbGRyZW5bKytpbmRleF0gPT09ICdnbG9iYWwnKVxuXHRcdFx0XHRcdFx0XHRcdGNoaWxkcmVuW2luZGV4XSA9ICcnLCBjaGlsZHJlblsrK2luZGV4XSA9ICdcXGYnICsgc3Vic3RyKGNoaWxkcmVuW2luZGV4XSwgaW5kZXggPSAxLCAtMSlcblx0XHRcdFx0XHRcdC8vIFxcc1xuXHRcdFx0XHRcdFx0Y2FzZSAzMjpcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGluZGV4ID09PSAxID8gJycgOiB2YWx1ZVxuXHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0c3dpdGNoIChpbmRleCkge1xuXHRcdFx0XHRcdFx0XHRcdGNhc2UgMDogZWxlbWVudCA9IHZhbHVlXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gc2l6ZW9mKGNoaWxkcmVuKSA+IDEgPyAnJyA6IHZhbHVlXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBpbmRleCA9IHNpemVvZihjaGlsZHJlbikgLSAxOiBjYXNlIDI6XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gaW5kZXggPT09IDIgPyB2YWx1ZSArIGVsZW1lbnQgKyBlbGVtZW50IDogdmFsdWUgKyBlbGVtZW50XG5cdFx0XHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0fSlcblx0fVxufVxuIiwgImV4cG9ydCAqIGZyb20gJy4vc3JjL0VudW0uanMnXG5leHBvcnQgKiBmcm9tICcuL3NyYy9VdGlsaXR5LmpzJ1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvUGFyc2VyLmpzJ1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvUHJlZml4ZXIuanMnXG5leHBvcnQgKiBmcm9tICcuL3NyYy9Ub2tlbml6ZXIuanMnXG5leHBvcnQgKiBmcm9tICcuL3NyYy9TZXJpYWxpemVyLmpzJ1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvTWlkZGxld2FyZS5qcydcbiIsICJ2YXIgd2Vha01lbW9pemUgPSBmdW5jdGlvbiB3ZWFrTWVtb2l6ZShmdW5jKSB7XG4gIC8vICRGbG93Rml4TWUgZmxvdyBkb2Vzbid0IGluY2x1ZGUgYWxsIG5vbi1wcmltaXRpdmUgdHlwZXMgYXMgYWxsb3dlZCBmb3Igd2Vha21hcHNcbiAgdmFyIGNhY2hlID0gbmV3IFdlYWtNYXAoKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChhcmcpIHtcbiAgICBpZiAoY2FjaGUuaGFzKGFyZykpIHtcbiAgICAgIC8vICRGbG93Rml4TWVcbiAgICAgIHJldHVybiBjYWNoZS5nZXQoYXJnKTtcbiAgICB9XG5cbiAgICB2YXIgcmV0ID0gZnVuYyhhcmcpO1xuICAgIGNhY2hlLnNldChhcmcsIHJldCk7XG4gICAgcmV0dXJuIHJldDtcbiAgfTtcbn07XG5cbmV4cG9ydCB7IHdlYWtNZW1vaXplIGFzIGRlZmF1bHQgfTtcbiIsICJmdW5jdGlvbiBtZW1vaXplKGZuKSB7XG4gIHZhciBjYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHJldHVybiBmdW5jdGlvbiAoYXJnKSB7XG4gICAgaWYgKGNhY2hlW2FyZ10gPT09IHVuZGVmaW5lZCkgY2FjaGVbYXJnXSA9IGZuKGFyZyk7XG4gICAgcmV0dXJuIGNhY2hlW2FyZ107XG4gIH07XG59XG5cbmV4cG9ydCB7IG1lbW9pemUgYXMgZGVmYXVsdCB9O1xuIiwgImltcG9ydCB7IFN0eWxlU2hlZXQgfSBmcm9tICdAZW1vdGlvbi9zaGVldCc7XG5pbXBvcnQgeyBkZWFsbG9jLCBhbGxvYywgbmV4dCwgdG9rZW4sIGZyb20sIHBlZWssIGRlbGltaXQsIHNsaWNlLCBwb3NpdGlvbiwgUlVMRVNFVCwgY29tYmluZSwgbWF0Y2gsIHNlcmlhbGl6ZSwgY29weSwgcmVwbGFjZSwgV0VCS0lULCBNT1osIE1TLCBLRVlGUkFNRVMsIERFQ0xBUkFUSU9OLCBoYXNoLCBjaGFyYXQsIHN0cmxlbiwgaW5kZXhvZiwgc3RyaW5naWZ5LCBDT01NRU5ULCBydWxlc2hlZXQsIG1pZGRsZXdhcmUsIGNvbXBpbGUgfSBmcm9tICdzdHlsaXMnO1xuaW1wb3J0ICdAZW1vdGlvbi93ZWFrLW1lbW9pemUnO1xuaW1wb3J0ICdAZW1vdGlvbi9tZW1vaXplJztcblxudmFyIGlkZW50aWZpZXJXaXRoUG9pbnRUcmFja2luZyA9IGZ1bmN0aW9uIGlkZW50aWZpZXJXaXRoUG9pbnRUcmFja2luZyhiZWdpbiwgcG9pbnRzLCBpbmRleCkge1xuICB2YXIgcHJldmlvdXMgPSAwO1xuICB2YXIgY2hhcmFjdGVyID0gMDtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIHByZXZpb3VzID0gY2hhcmFjdGVyO1xuICAgIGNoYXJhY3RlciA9IHBlZWsoKTsgLy8gJlxcZlxuXG4gICAgaWYgKHByZXZpb3VzID09PSAzOCAmJiBjaGFyYWN0ZXIgPT09IDEyKSB7XG4gICAgICBwb2ludHNbaW5kZXhdID0gMTtcbiAgICB9XG5cbiAgICBpZiAodG9rZW4oY2hhcmFjdGVyKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgbmV4dCgpO1xuICB9XG5cbiAgcmV0dXJuIHNsaWNlKGJlZ2luLCBwb3NpdGlvbik7XG59O1xuXG52YXIgdG9SdWxlcyA9IGZ1bmN0aW9uIHRvUnVsZXMocGFyc2VkLCBwb2ludHMpIHtcbiAgLy8gcHJldGVuZCB3ZSd2ZSBzdGFydGVkIHdpdGggYSBjb21tYVxuICB2YXIgaW5kZXggPSAtMTtcbiAgdmFyIGNoYXJhY3RlciA9IDQ0O1xuXG4gIGRvIHtcbiAgICBzd2l0Y2ggKHRva2VuKGNoYXJhY3RlcikpIHtcbiAgICAgIGNhc2UgMDpcbiAgICAgICAgLy8gJlxcZlxuICAgICAgICBpZiAoY2hhcmFjdGVyID09PSAzOCAmJiBwZWVrKCkgPT09IDEyKSB7XG4gICAgICAgICAgLy8gdGhpcyBpcyBub3QgMTAwJSBjb3JyZWN0LCB3ZSBkb24ndCBhY2NvdW50IGZvciBsaXRlcmFsIHNlcXVlbmNlcyBoZXJlIC0gbGlrZSBmb3IgZXhhbXBsZSBxdW90ZWQgc3RyaW5nc1xuICAgICAgICAgIC8vIHN0eWxpcyBpbnNlcnRzIFxcZiBhZnRlciAmIHRvIGtub3cgd2hlbiAmIHdoZXJlIGl0IHNob3VsZCByZXBsYWNlIHRoaXMgc2VxdWVuY2Ugd2l0aCB0aGUgY29udGV4dCBzZWxlY3RvclxuICAgICAgICAgIC8vIGFuZCB3aGVuIGl0IHNob3VsZCBqdXN0IGNvbmNhdGVuYXRlIHRoZSBvdXRlciBhbmQgaW5uZXIgc2VsZWN0b3JzXG4gICAgICAgICAgLy8gaXQncyB2ZXJ5IHVubGlrZWx5IGZvciB0aGlzIHNlcXVlbmNlIHRvIGFjdHVhbGx5IGFwcGVhciBpbiBhIGRpZmZlcmVudCBjb250ZXh0LCBzbyB3ZSBqdXN0IGxldmVyYWdlIHRoaXMgZmFjdCBoZXJlXG4gICAgICAgICAgcG9pbnRzW2luZGV4XSA9IDE7XG4gICAgICAgIH1cblxuICAgICAgICBwYXJzZWRbaW5kZXhdICs9IGlkZW50aWZpZXJXaXRoUG9pbnRUcmFja2luZyhwb3NpdGlvbiAtIDEsIHBvaW50cywgaW5kZXgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAyOlxuICAgICAgICBwYXJzZWRbaW5kZXhdICs9IGRlbGltaXQoY2hhcmFjdGVyKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgNDpcbiAgICAgICAgLy8gY29tbWFcbiAgICAgICAgaWYgKGNoYXJhY3RlciA9PT0gNDQpIHtcbiAgICAgICAgICAvLyBjb2xvblxuICAgICAgICAgIHBhcnNlZFsrK2luZGV4XSA9IHBlZWsoKSA9PT0gNTggPyAnJlxcZicgOiAnJztcbiAgICAgICAgICBwb2ludHNbaW5kZXhdID0gcGFyc2VkW2luZGV4XS5sZW5ndGg7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgLy8gZmFsbHRocm91Z2hcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcGFyc2VkW2luZGV4XSArPSBmcm9tKGNoYXJhY3Rlcik7XG4gICAgfVxuICB9IHdoaWxlIChjaGFyYWN0ZXIgPSBuZXh0KCkpO1xuXG4gIHJldHVybiBwYXJzZWQ7XG59O1xuXG52YXIgZ2V0UnVsZXMgPSBmdW5jdGlvbiBnZXRSdWxlcyh2YWx1ZSwgcG9pbnRzKSB7XG4gIHJldHVybiBkZWFsbG9jKHRvUnVsZXMoYWxsb2ModmFsdWUpLCBwb2ludHMpKTtcbn07IC8vIFdlYWtTZXQgd291bGQgYmUgbW9yZSBhcHByb3ByaWF0ZSwgYnV0IG9ubHkgV2Vha01hcCBpcyBzdXBwb3J0ZWQgaW4gSUUxMVxuXG5cbnZhciBmaXhlZEVsZW1lbnRzID0gLyogI19fUFVSRV9fICovbmV3IFdlYWtNYXAoKTtcbnZhciBjb21wYXQgPSBmdW5jdGlvbiBjb21wYXQoZWxlbWVudCkge1xuICBpZiAoZWxlbWVudC50eXBlICE9PSAncnVsZScgfHwgIWVsZW1lbnQucGFyZW50IHx8IC8vIHBvc2l0aXZlIC5sZW5ndGggaW5kaWNhdGVzIHRoYXQgdGhpcyBydWxlIGNvbnRhaW5zIHBzZXVkb1xuICAvLyBuZWdhdGl2ZSAubGVuZ3RoIGluZGljYXRlcyB0aGF0IHRoaXMgcnVsZSBoYXMgYmVlbiBhbHJlYWR5IHByZWZpeGVkXG4gIGVsZW1lbnQubGVuZ3RoIDwgMSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciB2YWx1ZSA9IGVsZW1lbnQudmFsdWUsXG4gICAgICBwYXJlbnQgPSBlbGVtZW50LnBhcmVudDtcbiAgdmFyIGlzSW1wbGljaXRSdWxlID0gZWxlbWVudC5jb2x1bW4gPT09IHBhcmVudC5jb2x1bW4gJiYgZWxlbWVudC5saW5lID09PSBwYXJlbnQubGluZTtcblxuICB3aGlsZSAocGFyZW50LnR5cGUgIT09ICdydWxlJykge1xuICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnQ7XG4gICAgaWYgKCFwYXJlbnQpIHJldHVybjtcbiAgfSAvLyBzaG9ydC1jaXJjdWl0IGZvciB0aGUgc2ltcGxlc3QgY2FzZVxuXG5cbiAgaWYgKGVsZW1lbnQucHJvcHMubGVuZ3RoID09PSAxICYmIHZhbHVlLmNoYXJDb2RlQXQoMCkgIT09IDU4XG4gIC8qIGNvbG9uICovXG4gICYmICFmaXhlZEVsZW1lbnRzLmdldChwYXJlbnQpKSB7XG4gICAgcmV0dXJuO1xuICB9IC8vIGlmIHRoaXMgaXMgYW4gaW1wbGljaXRseSBpbnNlcnRlZCBydWxlICh0aGUgb25lIGVhZ2VybHkgaW5zZXJ0ZWQgYXQgdGhlIGVhY2ggbmV3IG5lc3RlZCBsZXZlbClcbiAgLy8gdGhlbiB0aGUgcHJvcHMgaGFzIGFscmVhZHkgYmVlbiBtYW5pcHVsYXRlZCBiZWZvcmVoYW5kIGFzIHRoZXkgdGhhdCBhcnJheSBpcyBzaGFyZWQgYmV0d2VlbiBpdCBhbmQgaXRzIFwicnVsZSBwYXJlbnRcIlxuXG5cbiAgaWYgKGlzSW1wbGljaXRSdWxlKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZml4ZWRFbGVtZW50cy5zZXQoZWxlbWVudCwgdHJ1ZSk7XG4gIHZhciBwb2ludHMgPSBbXTtcbiAgdmFyIHJ1bGVzID0gZ2V0UnVsZXModmFsdWUsIHBvaW50cyk7XG4gIHZhciBwYXJlbnRSdWxlcyA9IHBhcmVudC5wcm9wcztcblxuICBmb3IgKHZhciBpID0gMCwgayA9IDA7IGkgPCBydWxlcy5sZW5ndGg7IGkrKykge1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwgcGFyZW50UnVsZXMubGVuZ3RoOyBqKyssIGsrKykge1xuICAgICAgZWxlbWVudC5wcm9wc1trXSA9IHBvaW50c1tpXSA/IHJ1bGVzW2ldLnJlcGxhY2UoLyZcXGYvZywgcGFyZW50UnVsZXNbal0pIDogcGFyZW50UnVsZXNbal0gKyBcIiBcIiArIHJ1bGVzW2ldO1xuICAgIH1cbiAgfVxufTtcbnZhciByZW1vdmVMYWJlbCA9IGZ1bmN0aW9uIHJlbW92ZUxhYmVsKGVsZW1lbnQpIHtcbiAgaWYgKGVsZW1lbnQudHlwZSA9PT0gJ2RlY2wnKSB7XG4gICAgdmFyIHZhbHVlID0gZWxlbWVudC52YWx1ZTtcblxuICAgIGlmICggLy8gY2hhcmNvZGUgZm9yIGxcbiAgICB2YWx1ZS5jaGFyQ29kZUF0KDApID09PSAxMDggJiYgLy8gY2hhcmNvZGUgZm9yIGJcbiAgICB2YWx1ZS5jaGFyQ29kZUF0KDIpID09PSA5OCkge1xuICAgICAgLy8gdGhpcyBpZ25vcmVzIGxhYmVsXG4gICAgICBlbGVtZW50W1wicmV0dXJuXCJdID0gJyc7XG4gICAgICBlbGVtZW50LnZhbHVlID0gJyc7XG4gICAgfVxuICB9XG59O1xudmFyIGlnbm9yZUZsYWcgPSAnZW1vdGlvbi1kaXNhYmxlLXNlcnZlci1yZW5kZXJpbmctdW5zYWZlLXNlbGVjdG9yLXdhcm5pbmctcGxlYXNlLWRvLW5vdC11c2UtdGhpcy10aGUtd2FybmluZy1leGlzdHMtZm9yLWEtcmVhc29uJztcblxudmFyIGlzSWdub3JpbmdDb21tZW50ID0gZnVuY3Rpb24gaXNJZ25vcmluZ0NvbW1lbnQoZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudC50eXBlID09PSAnY29tbScgJiYgZWxlbWVudC5jaGlsZHJlbi5pbmRleE9mKGlnbm9yZUZsYWcpID4gLTE7XG59O1xuXG52YXIgY3JlYXRlVW5zYWZlU2VsZWN0b3JzQWxhcm0gPSBmdW5jdGlvbiBjcmVhdGVVbnNhZmVTZWxlY3RvcnNBbGFybShjYWNoZSkge1xuICByZXR1cm4gZnVuY3Rpb24gKGVsZW1lbnQsIGluZGV4LCBjaGlsZHJlbikge1xuICAgIGlmIChlbGVtZW50LnR5cGUgIT09ICdydWxlJyB8fCBjYWNoZS5jb21wYXQpIHJldHVybjtcbiAgICB2YXIgdW5zYWZlUHNldWRvQ2xhc3NlcyA9IGVsZW1lbnQudmFsdWUubWF0Y2goLyg6Zmlyc3R8Om50aHw6bnRoLWxhc3QpLWNoaWxkL2cpO1xuXG4gICAgaWYgKHVuc2FmZVBzZXVkb0NsYXNzZXMpIHtcbiAgICAgIHZhciBpc05lc3RlZCA9ICEhZWxlbWVudC5wYXJlbnQ7IC8vIGluIG5lc3RlZCBydWxlcyBjb21tZW50cyBiZWNvbWUgY2hpbGRyZW4gb2YgdGhlIFwiYXV0by1pbnNlcnRlZFwiIHJ1bGUgYW5kIHRoYXQncyBhbHdheXMgdGhlIGBlbGVtZW50LnBhcmVudGBcbiAgICAgIC8vXG4gICAgICAvLyBjb25zaWRlcmluZyB0aGlzIGlucHV0OlxuICAgICAgLy8gLmEge1xuICAgICAgLy8gICAuYiAvKiBjb21tICovIHt9XG4gICAgICAvLyAgIGNvbG9yOiBob3RwaW5rO1xuICAgICAgLy8gfVxuICAgICAgLy8gd2UgZ2V0IG91dHB1dCBjb3JyZXNwb25kaW5nIHRvIHRoaXM6XG4gICAgICAvLyAuYSB7XG4gICAgICAvLyAgICYge1xuICAgICAgLy8gICAgIC8qIGNvbW0gKi9cbiAgICAgIC8vICAgICBjb2xvcjogaG90cGluaztcbiAgICAgIC8vICAgfVxuICAgICAgLy8gICAuYiB7fVxuICAgICAgLy8gfVxuXG4gICAgICB2YXIgY29tbWVudENvbnRhaW5lciA9IGlzTmVzdGVkID8gZWxlbWVudC5wYXJlbnQuY2hpbGRyZW4gOiAvLyBnbG9iYWwgcnVsZSBhdCB0aGUgcm9vdCBsZXZlbFxuICAgICAgY2hpbGRyZW47XG5cbiAgICAgIGZvciAodmFyIGkgPSBjb21tZW50Q29udGFpbmVyLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIHZhciBub2RlID0gY29tbWVudENvbnRhaW5lcltpXTtcblxuICAgICAgICBpZiAobm9kZS5saW5lIDwgZWxlbWVudC5saW5lKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gLy8gaXQgaXMgcXVpdGUgd2VpcmQgYnV0IGNvbW1lbnRzIGFyZSAqdXN1YWxseSogcHV0IGF0IGBjb2x1bW46IGVsZW1lbnQuY29sdW1uIC0gMWBcbiAgICAgICAgLy8gc28gd2Ugc2VlayAqZnJvbSB0aGUgZW5kKiBmb3IgdGhlIG5vZGUgdGhhdCBpcyBlYXJsaWVyIHRoYW4gdGhlIHJ1bGUncyBgZWxlbWVudGAgYW5kIGNoZWNrIHRoYXRcbiAgICAgICAgLy8gdGhpcyB3aWxsIGFsc28gbWF0Y2ggaW5wdXRzIGxpa2UgdGhpczpcbiAgICAgICAgLy8gLmEge1xuICAgICAgICAvLyAgIC8qIGNvbW0gKi9cbiAgICAgICAgLy8gICAuYiB7fVxuICAgICAgICAvLyB9XG4gICAgICAgIC8vXG4gICAgICAgIC8vIGJ1dCB0aGF0IGlzIGZpbmVcbiAgICAgICAgLy9cbiAgICAgICAgLy8gaXQgd291bGQgYmUgdGhlIGVhc2llc3QgdG8gY2hhbmdlIHRoZSBwbGFjZW1lbnQgb2YgdGhlIGNvbW1lbnQgdG8gYmUgdGhlIGZpcnN0IGNoaWxkIG9mIHRoZSBydWxlOlxuICAgICAgICAvLyAuYSB7XG4gICAgICAgIC8vICAgLmIgeyAvKiBjb21tICovIH1cbiAgICAgICAgLy8gfVxuICAgICAgICAvLyB3aXRoIHN1Y2ggaW5wdXRzIHdlIHdvdWxkbid0IGhhdmUgdG8gc2VhcmNoIGZvciB0aGUgY29tbWVudCBhdCBhbGxcbiAgICAgICAgLy8gVE9ETzogY29uc2lkZXIgY2hhbmdpbmcgdGhpcyBjb21tZW50IHBsYWNlbWVudCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uXG5cblxuICAgICAgICBpZiAobm9kZS5jb2x1bW4gPCBlbGVtZW50LmNvbHVtbikge1xuICAgICAgICAgIGlmIChpc0lnbm9yaW5nQ29tbWVudChub2RlKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHVuc2FmZVBzZXVkb0NsYXNzZXMuZm9yRWFjaChmdW5jdGlvbiAodW5zYWZlUHNldWRvQ2xhc3MpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIlRoZSBwc2V1ZG8gY2xhc3MgXFxcIlwiICsgdW5zYWZlUHNldWRvQ2xhc3MgKyBcIlxcXCIgaXMgcG90ZW50aWFsbHkgdW5zYWZlIHdoZW4gZG9pbmcgc2VydmVyLXNpZGUgcmVuZGVyaW5nLiBUcnkgY2hhbmdpbmcgaXQgdG8gXFxcIlwiICsgdW5zYWZlUHNldWRvQ2xhc3Muc3BsaXQoJy1jaGlsZCcpWzBdICsgXCItb2YtdHlwZVxcXCIuXCIpO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xufTtcblxudmFyIGlzSW1wb3J0UnVsZSA9IGZ1bmN0aW9uIGlzSW1wb3J0UnVsZShlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50LnR5cGUuY2hhckNvZGVBdCgxKSA9PT0gMTA1ICYmIGVsZW1lbnQudHlwZS5jaGFyQ29kZUF0KDApID09PSA2NDtcbn07XG5cbnZhciBpc1ByZXBlbmRlZFdpdGhSZWd1bGFyUnVsZXMgPSBmdW5jdGlvbiBpc1ByZXBlbmRlZFdpdGhSZWd1bGFyUnVsZXMoaW5kZXgsIGNoaWxkcmVuKSB7XG4gIGZvciAodmFyIGkgPSBpbmRleCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgaWYgKCFpc0ltcG9ydFJ1bGUoY2hpbGRyZW5baV0pKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59OyAvLyB1c2UgdGhpcyB0byByZW1vdmUgaW5jb3JyZWN0IGVsZW1lbnRzIGZyb20gZnVydGhlciBwcm9jZXNzaW5nXG4vLyBzbyB0aGV5IGRvbid0IGdldCBoYW5kZWQgdG8gdGhlIGBzaGVldGAgKG9yIGFueXRoaW5nIGVsc2UpXG4vLyBhcyB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IGxlYWQgdG8gYWRkaXRpb25hbCBsb2dzIHdoaWNoIGluIHR1cm4gY291bGQgYmUgb3ZlcmhlbG1pbmcgdG8gdGhlIHVzZXJcblxuXG52YXIgbnVsbGlmeUVsZW1lbnQgPSBmdW5jdGlvbiBudWxsaWZ5RWxlbWVudChlbGVtZW50KSB7XG4gIGVsZW1lbnQudHlwZSA9ICcnO1xuICBlbGVtZW50LnZhbHVlID0gJyc7XG4gIGVsZW1lbnRbXCJyZXR1cm5cIl0gPSAnJztcbiAgZWxlbWVudC5jaGlsZHJlbiA9ICcnO1xuICBlbGVtZW50LnByb3BzID0gJyc7XG59O1xuXG52YXIgaW5jb3JyZWN0SW1wb3J0QWxhcm0gPSBmdW5jdGlvbiBpbmNvcnJlY3RJbXBvcnRBbGFybShlbGVtZW50LCBpbmRleCwgY2hpbGRyZW4pIHtcbiAgaWYgKCFpc0ltcG9ydFJ1bGUoZWxlbWVudCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoZWxlbWVudC5wYXJlbnQpIHtcbiAgICBjb25zb2xlLmVycm9yKFwiYEBpbXBvcnRgIHJ1bGVzIGNhbid0IGJlIG5lc3RlZCBpbnNpZGUgb3RoZXIgcnVsZXMuIFBsZWFzZSBtb3ZlIGl0IHRvIHRoZSB0b3AgbGV2ZWwgYW5kIHB1dCBpdCBiZWZvcmUgcmVndWxhciBydWxlcy4gS2VlcCBpbiBtaW5kIHRoYXQgdGhleSBjYW4gb25seSBiZSB1c2VkIHdpdGhpbiBnbG9iYWwgc3R5bGVzLlwiKTtcbiAgICBudWxsaWZ5RWxlbWVudChlbGVtZW50KTtcbiAgfSBlbHNlIGlmIChpc1ByZXBlbmRlZFdpdGhSZWd1bGFyUnVsZXMoaW5kZXgsIGNoaWxkcmVuKSkge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJgQGltcG9ydGAgcnVsZXMgY2FuJ3QgYmUgYWZ0ZXIgb3RoZXIgcnVsZXMuIFBsZWFzZSBwdXQgeW91ciBgQGltcG9ydGAgcnVsZXMgYmVmb3JlIHlvdXIgb3RoZXIgcnVsZXMuXCIpO1xuICAgIG51bGxpZnlFbGVtZW50KGVsZW1lbnQpO1xuICB9XG59O1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1mYWxsdGhyb3VnaCAqL1xuXG5mdW5jdGlvbiBwcmVmaXgodmFsdWUsIGxlbmd0aCkge1xuICBzd2l0Y2ggKGhhc2godmFsdWUsIGxlbmd0aCkpIHtcbiAgICAvLyBjb2xvci1hZGp1c3RcbiAgICBjYXNlIDUxMDM6XG4gICAgICByZXR1cm4gV0VCS0lUICsgJ3ByaW50LScgKyB2YWx1ZSArIHZhbHVlO1xuICAgIC8vIGFuaW1hdGlvbiwgYW5pbWF0aW9uLShkZWxheXxkaXJlY3Rpb258ZHVyYXRpb258ZmlsbC1tb2RlfGl0ZXJhdGlvbi1jb3VudHxuYW1lfHBsYXktc3RhdGV8dGltaW5nLWZ1bmN0aW9uKVxuXG4gICAgY2FzZSA1NzM3OlxuICAgIGNhc2UgNDIwMTpcbiAgICBjYXNlIDMxNzc6XG4gICAgY2FzZSAzNDMzOlxuICAgIGNhc2UgMTY0MTpcbiAgICBjYXNlIDQ0NTc6XG4gICAgY2FzZSAyOTIxOiAvLyB0ZXh0LWRlY29yYXRpb24sIGZpbHRlciwgY2xpcC1wYXRoLCBiYWNrZmFjZS12aXNpYmlsaXR5LCBjb2x1bW4sIGJveC1kZWNvcmF0aW9uLWJyZWFrXG5cbiAgICBjYXNlIDU1NzI6XG4gICAgY2FzZSA2MzU2OlxuICAgIGNhc2UgNTg0NDpcbiAgICBjYXNlIDMxOTE6XG4gICAgY2FzZSA2NjQ1OlxuICAgIGNhc2UgMzAwNTogLy8gbWFzaywgbWFzay1pbWFnZSwgbWFzay0obW9kZXxjbGlwfHNpemUpLCBtYXNrLShyZXBlYXR8b3JpZ2luKSwgbWFzay1wb3NpdGlvbiwgbWFzay1jb21wb3NpdGUsXG5cbiAgICBjYXNlIDYzOTE6XG4gICAgY2FzZSA1ODc5OlxuICAgIGNhc2UgNTYyMzpcbiAgICBjYXNlIDYxMzU6XG4gICAgY2FzZSA0NTk5OlxuICAgIGNhc2UgNDg1NTogLy8gYmFja2dyb3VuZC1jbGlwLCBjb2x1bW5zLCBjb2x1bW4tKGNvdW50fGZpbGx8Z2FwfHJ1bGV8cnVsZS1jb2xvcnxydWxlLXN0eWxlfHJ1bGUtd2lkdGh8c3Bhbnx3aWR0aClcblxuICAgIGNhc2UgNDIxNTpcbiAgICBjYXNlIDYzODk6XG4gICAgY2FzZSA1MTA5OlxuICAgIGNhc2UgNTM2NTpcbiAgICBjYXNlIDU2MjE6XG4gICAgY2FzZSAzODI5OlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgdmFsdWU7XG4gICAgLy8gYXBwZWFyYW5jZSwgdXNlci1zZWxlY3QsIHRyYW5zZm9ybSwgaHlwaGVucywgdGV4dC1zaXplLWFkanVzdFxuXG4gICAgY2FzZSA1MzQ5OlxuICAgIGNhc2UgNDI0NjpcbiAgICBjYXNlIDQ4MTA6XG4gICAgY2FzZSA2OTY4OlxuICAgIGNhc2UgMjc1NjpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1PWiArIHZhbHVlICsgTVMgKyB2YWx1ZSArIHZhbHVlO1xuICAgIC8vIGZsZXgsIGZsZXgtZGlyZWN0aW9uXG5cbiAgICBjYXNlIDY4Mjg6XG4gICAgY2FzZSA0MjY4OlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyB2YWx1ZSArIHZhbHVlO1xuICAgIC8vIG9yZGVyXG5cbiAgICBjYXNlIDYxNjU6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArICdmbGV4LScgKyB2YWx1ZSArIHZhbHVlO1xuICAgIC8vIGFsaWduLWl0ZW1zXG5cbiAgICBjYXNlIDUxODc6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyByZXBsYWNlKHZhbHVlLCAvKFxcdyspLisoOlteXSspLywgV0VCS0lUICsgJ2JveC0kMSQyJyArIE1TICsgJ2ZsZXgtJDEkMicpICsgdmFsdWU7XG4gICAgLy8gYWxpZ24tc2VsZlxuXG4gICAgY2FzZSA1NDQzOlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyAnZmxleC1pdGVtLScgKyByZXBsYWNlKHZhbHVlLCAvZmxleC18LXNlbGYvLCAnJykgKyB2YWx1ZTtcbiAgICAvLyBhbGlnbi1jb250ZW50XG5cbiAgICBjYXNlIDQ2NzU6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArICdmbGV4LWxpbmUtcGFjaycgKyByZXBsYWNlKHZhbHVlLCAvYWxpZ24tY29udGVudHxmbGV4LXwtc2VsZi8sICcnKSArIHZhbHVlO1xuICAgIC8vIGZsZXgtc2hyaW5rXG5cbiAgICBjYXNlIDU1NDg6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsICdzaHJpbmsnLCAnbmVnYXRpdmUnKSArIHZhbHVlO1xuICAgIC8vIGZsZXgtYmFzaXNcblxuICAgIGNhc2UgNTI5MjpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgJ2Jhc2lzJywgJ3ByZWZlcnJlZC1zaXplJykgKyB2YWx1ZTtcbiAgICAvLyBmbGV4LWdyb3dcblxuICAgIGNhc2UgNjA2MDpcbiAgICAgIHJldHVybiBXRUJLSVQgKyAnYm94LScgKyByZXBsYWNlKHZhbHVlLCAnLWdyb3cnLCAnJykgKyBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgJ2dyb3cnLCAncG9zaXRpdmUnKSArIHZhbHVlO1xuICAgIC8vIHRyYW5zaXRpb25cblxuICAgIGNhc2UgNDU1NDpcbiAgICAgIHJldHVybiBXRUJLSVQgKyByZXBsYWNlKHZhbHVlLCAvKFteLV0pKHRyYW5zZm9ybSkvZywgJyQxJyArIFdFQktJVCArICckMicpICsgdmFsdWU7XG4gICAgLy8gY3Vyc29yXG5cbiAgICBjYXNlIDYxODc6XG4gICAgICByZXR1cm4gcmVwbGFjZShyZXBsYWNlKHJlcGxhY2UodmFsdWUsIC8oem9vbS18Z3JhYikvLCBXRUJLSVQgKyAnJDEnKSwgLyhpbWFnZS1zZXQpLywgV0VCS0lUICsgJyQxJyksIHZhbHVlLCAnJykgKyB2YWx1ZTtcbiAgICAvLyBiYWNrZ3JvdW5kLCBiYWNrZ3JvdW5kLWltYWdlXG5cbiAgICBjYXNlIDU0OTU6XG4gICAgY2FzZSAzOTU5OlxuICAgICAgcmV0dXJuIHJlcGxhY2UodmFsdWUsIC8oaW1hZ2Utc2V0XFwoW15dKikvLCBXRUJLSVQgKyAnJDEnICsgJyRgJDEnKTtcbiAgICAvLyBqdXN0aWZ5LWNvbnRlbnRcblxuICAgIGNhc2UgNDk2ODpcbiAgICAgIHJldHVybiByZXBsYWNlKHJlcGxhY2UodmFsdWUsIC8oLis6KShmbGV4LSk/KC4qKS8sIFdFQktJVCArICdib3gtcGFjazokMycgKyBNUyArICdmbGV4LXBhY2s6JDMnKSwgL3MuKy1iW147XSsvLCAnanVzdGlmeScpICsgV0VCS0lUICsgdmFsdWUgKyB2YWx1ZTtcbiAgICAvLyAobWFyZ2lufHBhZGRpbmcpLWlubGluZS0oc3RhcnR8ZW5kKVxuXG4gICAgY2FzZSA0MDk1OlxuICAgIGNhc2UgMzU4MzpcbiAgICBjYXNlIDQwNjg6XG4gICAgY2FzZSAyNTMyOlxuICAgICAgcmV0dXJuIHJlcGxhY2UodmFsdWUsIC8oLispLWlubGluZSguKykvLCBXRUJLSVQgKyAnJDEkMicpICsgdmFsdWU7XG4gICAgLy8gKG1pbnxtYXgpPyh3aWR0aHxoZWlnaHR8aW5saW5lLXNpemV8YmxvY2stc2l6ZSlcblxuICAgIGNhc2UgODExNjpcbiAgICBjYXNlIDcwNTk6XG4gICAgY2FzZSA1NzUzOlxuICAgIGNhc2UgNTUzNTpcbiAgICBjYXNlIDU0NDU6XG4gICAgY2FzZSA1NzAxOlxuICAgIGNhc2UgNDkzMzpcbiAgICBjYXNlIDQ2Nzc6XG4gICAgY2FzZSA1NTMzOlxuICAgIGNhc2UgNTc4OTpcbiAgICBjYXNlIDUwMjE6XG4gICAgY2FzZSA0NzY1OlxuICAgICAgLy8gc3RyZXRjaCwgbWF4LWNvbnRlbnQsIG1pbi1jb250ZW50LCBmaWxsLWF2YWlsYWJsZVxuICAgICAgaWYgKHN0cmxlbih2YWx1ZSkgLSAxIC0gbGVuZ3RoID4gNikgc3dpdGNoIChjaGFyYXQodmFsdWUsIGxlbmd0aCArIDEpKSB7XG4gICAgICAgIC8vIChtKWF4LWNvbnRlbnQsIChtKWluLWNvbnRlbnRcbiAgICAgICAgY2FzZSAxMDk6XG4gICAgICAgICAgLy8gLVxuICAgICAgICAgIGlmIChjaGFyYXQodmFsdWUsIGxlbmd0aCArIDQpICE9PSA0NSkgYnJlYWs7XG4gICAgICAgIC8vIChmKWlsbC1hdmFpbGFibGUsIChmKWl0LWNvbnRlbnRcblxuICAgICAgICBjYXNlIDEwMjpcbiAgICAgICAgICByZXR1cm4gcmVwbGFjZSh2YWx1ZSwgLyguKzopKC4rKS0oW15dKykvLCAnJDEnICsgV0VCS0lUICsgJyQyLSQzJyArICckMScgKyBNT1ogKyAoY2hhcmF0KHZhbHVlLCBsZW5ndGggKyAzKSA9PSAxMDggPyAnJDMnIDogJyQyLSQzJykpICsgdmFsdWU7XG4gICAgICAgIC8vIChzKXRyZXRjaFxuXG4gICAgICAgIGNhc2UgMTE1OlxuICAgICAgICAgIHJldHVybiB+aW5kZXhvZih2YWx1ZSwgJ3N0cmV0Y2gnKSA/IHByZWZpeChyZXBsYWNlKHZhbHVlLCAnc3RyZXRjaCcsICdmaWxsLWF2YWlsYWJsZScpLCBsZW5ndGgpICsgdmFsdWUgOiB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIC8vIHBvc2l0aW9uOiBzdGlja3lcblxuICAgIGNhc2UgNDk0OTpcbiAgICAgIC8vIChzKXRpY2t5P1xuICAgICAgaWYgKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgMSkgIT09IDExNSkgYnJlYWs7XG4gICAgLy8gZGlzcGxheTogKGZsZXh8aW5saW5lLWZsZXgpXG5cbiAgICBjYXNlIDY0NDQ6XG4gICAgICBzd2l0Y2ggKGNoYXJhdCh2YWx1ZSwgc3RybGVuKHZhbHVlKSAtIDMgLSAofmluZGV4b2YodmFsdWUsICchaW1wb3J0YW50JykgJiYgMTApKSkge1xuICAgICAgICAvLyBzdGljKGspeVxuICAgICAgICBjYXNlIDEwNzpcbiAgICAgICAgICByZXR1cm4gcmVwbGFjZSh2YWx1ZSwgJzonLCAnOicgKyBXRUJLSVQpICsgdmFsdWU7XG4gICAgICAgIC8vIChpbmxpbmUtKT9mbChlKXhcblxuICAgICAgICBjYXNlIDEwMTpcbiAgICAgICAgICByZXR1cm4gcmVwbGFjZSh2YWx1ZSwgLyguKzopKFteOyFdKykoO3whLispPy8sICckMScgKyBXRUJLSVQgKyAoY2hhcmF0KHZhbHVlLCAxNCkgPT09IDQ1ID8gJ2lubGluZS0nIDogJycpICsgJ2JveCQzJyArICckMScgKyBXRUJLSVQgKyAnJDIkMycgKyAnJDEnICsgTVMgKyAnJDJib3gkMycpICsgdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuICAgIC8vIHdyaXRpbmctbW9kZVxuXG4gICAgY2FzZSA1OTM2OlxuICAgICAgc3dpdGNoIChjaGFyYXQodmFsdWUsIGxlbmd0aCArIDExKSkge1xuICAgICAgICAvLyB2ZXJ0aWNhbC1sKHIpXG4gICAgICAgIGNhc2UgMTE0OlxuICAgICAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgL1tzdmhdXFx3Ky1bdGJscl17Mn0vLCAndGInKSArIHZhbHVlO1xuICAgICAgICAvLyB2ZXJ0aWNhbC1yKGwpXG5cbiAgICAgICAgY2FzZSAxMDg6XG4gICAgICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAvW3N2aF1cXHcrLVt0YmxyXXsyfS8sICd0Yi1ybCcpICsgdmFsdWU7XG4gICAgICAgIC8vIGhvcml6b250YWwoLSl0YlxuXG4gICAgICAgIGNhc2UgNDU6XG4gICAgICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAvW3N2aF1cXHcrLVt0YmxyXXsyfS8sICdscicpICsgdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgdmFsdWUgKyB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxudmFyIHByZWZpeGVyID0gZnVuY3Rpb24gcHJlZml4ZXIoZWxlbWVudCwgaW5kZXgsIGNoaWxkcmVuLCBjYWxsYmFjaykge1xuICBpZiAoZWxlbWVudC5sZW5ndGggPiAtMSkgaWYgKCFlbGVtZW50W1wicmV0dXJuXCJdKSBzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xuICAgIGNhc2UgREVDTEFSQVRJT046XG4gICAgICBlbGVtZW50W1wicmV0dXJuXCJdID0gcHJlZml4KGVsZW1lbnQudmFsdWUsIGVsZW1lbnQubGVuZ3RoKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBLRVlGUkFNRVM6XG4gICAgICByZXR1cm4gc2VyaWFsaXplKFtjb3B5KGVsZW1lbnQsIHtcbiAgICAgICAgdmFsdWU6IHJlcGxhY2UoZWxlbWVudC52YWx1ZSwgJ0AnLCAnQCcgKyBXRUJLSVQpXG4gICAgICB9KV0sIGNhbGxiYWNrKTtcblxuICAgIGNhc2UgUlVMRVNFVDpcbiAgICAgIGlmIChlbGVtZW50Lmxlbmd0aCkgcmV0dXJuIGNvbWJpbmUoZWxlbWVudC5wcm9wcywgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHN3aXRjaCAobWF0Y2godmFsdWUsIC8oOjpwbGFjXFx3K3w6cmVhZC1cXHcrKS8pKSB7XG4gICAgICAgICAgLy8gOnJlYWQtKG9ubHl8d3JpdGUpXG4gICAgICAgICAgY2FzZSAnOnJlYWQtb25seSc6XG4gICAgICAgICAgY2FzZSAnOnJlYWQtd3JpdGUnOlxuICAgICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZShbY29weShlbGVtZW50LCB7XG4gICAgICAgICAgICAgIHByb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocmVhZC1cXHcrKS8sICc6JyArIE1PWiArICckMScpXVxuICAgICAgICAgICAgfSldLCBjYWxsYmFjayk7XG4gICAgICAgICAgLy8gOnBsYWNlaG9sZGVyXG5cbiAgICAgICAgICBjYXNlICc6OnBsYWNlaG9sZGVyJzpcbiAgICAgICAgICAgIHJldHVybiBzZXJpYWxpemUoW2NvcHkoZWxlbWVudCwge1xuICAgICAgICAgICAgICBwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHBsYWNcXHcrKS8sICc6JyArIFdFQktJVCArICdpbnB1dC0kMScpXVxuICAgICAgICAgICAgfSksIGNvcHkoZWxlbWVudCwge1xuICAgICAgICAgICAgICBwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHBsYWNcXHcrKS8sICc6JyArIE1PWiArICckMScpXVxuICAgICAgICAgICAgfSksIGNvcHkoZWxlbWVudCwge1xuICAgICAgICAgICAgICBwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHBsYWNcXHcrKS8sIE1TICsgJ2lucHV0LSQxJyldXG4gICAgICAgICAgICB9KV0sIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH0pO1xuICB9XG59O1xuXG52YXIgZGVmYXVsdFN0eWxpc1BsdWdpbnMgPSBbcHJlZml4ZXJdO1xuXG52YXIgY3JlYXRlQ2FjaGUgPSBmdW5jdGlvbiBjcmVhdGVDYWNoZShvcHRpb25zKSB7XG4gIHZhciBrZXkgPSBvcHRpb25zLmtleTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAha2V5KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiWW91IGhhdmUgdG8gY29uZmlndXJlIGBrZXlgIGZvciB5b3VyIGNhY2hlLiBQbGVhc2UgbWFrZSBzdXJlIGl0J3MgdW5pcXVlIChhbmQgbm90IGVxdWFsIHRvICdjc3MnKSBhcyBpdCdzIHVzZWQgZm9yIGxpbmtpbmcgc3R5bGVzIHRvIHlvdXIgY2FjaGUuXFxuXCIgKyBcIklmIG11bHRpcGxlIGNhY2hlcyBzaGFyZSB0aGUgc2FtZSBrZXkgdGhleSBtaWdodCBcXFwiZmlnaHRcXFwiIGZvciBlYWNoIG90aGVyJ3Mgc3R5bGUgZWxlbWVudHMuXCIpO1xuICB9XG5cbiAgaWYgKGtleSA9PT0gJ2NzcycpIHtcbiAgICB2YXIgc3NyU3R5bGVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcInN0eWxlW2RhdGEtZW1vdGlvbl06bm90KFtkYXRhLXNdKVwiKTsgLy8gZ2V0IFNTUmVkIHN0eWxlcyBvdXQgb2YgdGhlIHdheSBvZiBSZWFjdCdzIGh5ZHJhdGlvblxuICAgIC8vIGRvY3VtZW50LmhlYWQgaXMgYSBzYWZlIHBsYWNlIHRvIG1vdmUgdGhlbSB0byh0aG91Z2ggbm90ZSBkb2N1bWVudC5oZWFkIGlzIG5vdCBuZWNlc3NhcmlseSB0aGUgbGFzdCBwbGFjZSB0aGV5IHdpbGwgYmUpXG4gICAgLy8gbm90ZSB0aGlzIHZlcnkgdmVyeSBpbnRlbnRpb25hbGx5IHRhcmdldHMgYWxsIHN0eWxlIGVsZW1lbnRzIHJlZ2FyZGxlc3Mgb2YgdGhlIGtleSB0byBlbnN1cmVcbiAgICAvLyB0aGF0IGNyZWF0aW5nIGEgY2FjaGUgd29ya3MgaW5zaWRlIG9mIHJlbmRlciBvZiBhIFJlYWN0IGNvbXBvbmVudFxuXG4gICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChzc3JTdHlsZXMsIGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAvLyB3ZSB3YW50IHRvIG9ubHkgbW92ZSBlbGVtZW50cyB3aGljaCBoYXZlIGEgc3BhY2UgaW4gdGhlIGRhdGEtZW1vdGlvbiBhdHRyaWJ1dGUgdmFsdWVcbiAgICAgIC8vIGJlY2F1c2UgdGhhdCBpbmRpY2F0ZXMgdGhhdCBpdCBpcyBhbiBFbW90aW9uIDExIHNlcnZlci1zaWRlIHJlbmRlcmVkIHN0eWxlIGVsZW1lbnRzXG4gICAgICAvLyB3aGlsZSB3ZSB3aWxsIGFscmVhZHkgaWdub3JlIEVtb3Rpb24gMTEgY2xpZW50LXNpZGUgaW5zZXJ0ZWQgc3R5bGVzIGJlY2F1c2Ugb2YgdGhlIDpub3QoW2RhdGEtc10pIHBhcnQgaW4gdGhlIHNlbGVjdG9yXG4gICAgICAvLyBFbW90aW9uIDEwIGNsaWVudC1zaWRlIGluc2VydGVkIHN0eWxlcyBkaWQgbm90IGhhdmUgZGF0YS1zIChidXQgaW1wb3J0YW50bHkgZGlkIG5vdCBoYXZlIGEgc3BhY2UgaW4gdGhlaXIgZGF0YS1lbW90aW9uIGF0dHJpYnV0ZXMpXG4gICAgICAvLyBzbyBjaGVja2luZyBmb3IgdGhlIHNwYWNlIGVuc3VyZXMgdGhhdCBsb2FkaW5nIEVtb3Rpb24gMTEgYWZ0ZXIgRW1vdGlvbiAxMCBoYXMgaW5zZXJ0ZWQgc29tZSBzdHlsZXNcbiAgICAgIC8vIHdpbGwgbm90IHJlc3VsdCBpbiB0aGUgRW1vdGlvbiAxMCBzdHlsZXMgYmVpbmcgZGVzdHJveWVkXG4gICAgICB2YXIgZGF0YUVtb3Rpb25BdHRyaWJ1dGUgPSBub2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1lbW90aW9uJyk7XG5cbiAgICAgIGlmIChkYXRhRW1vdGlvbkF0dHJpYnV0ZS5pbmRleE9mKCcgJykgPT09IC0xKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQobm9kZSk7XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZSgnZGF0YS1zJywgJycpO1xuICAgIH0pO1xuICB9XG5cbiAgdmFyIHN0eWxpc1BsdWdpbnMgPSBvcHRpb25zLnN0eWxpc1BsdWdpbnMgfHwgZGVmYXVsdFN0eWxpc1BsdWdpbnM7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyAkRmxvd0ZpeE1lXG4gICAgaWYgKC9bXmEtei1dLy50ZXN0KGtleSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkVtb3Rpb24ga2V5IG11c3Qgb25seSBjb250YWluIGxvd2VyIGNhc2UgYWxwaGFiZXRpY2FsIGNoYXJhY3RlcnMgYW5kIC0gYnV0IFxcXCJcIiArIGtleSArIFwiXFxcIiB3YXMgcGFzc2VkXCIpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBpbnNlcnRlZCA9IHt9O1xuICB2YXIgY29udGFpbmVyO1xuICB2YXIgbm9kZXNUb0h5ZHJhdGUgPSBbXTtcblxuICB7XG4gICAgY29udGFpbmVyID0gb3B0aW9ucy5jb250YWluZXIgfHwgZG9jdW1lbnQuaGVhZDtcbiAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKCAvLyB0aGlzIG1lYW5zIHdlIHdpbGwgaWdub3JlIGVsZW1lbnRzIHdoaWNoIGRvbid0IGhhdmUgYSBzcGFjZSBpbiB0aGVtIHdoaWNoXG4gICAgLy8gbWVhbnMgdGhhdCB0aGUgc3R5bGUgZWxlbWVudHMgd2UncmUgbG9va2luZyBhdCBhcmUgb25seSBFbW90aW9uIDExIHNlcnZlci1yZW5kZXJlZCBzdHlsZSBlbGVtZW50c1xuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJzdHlsZVtkYXRhLWVtb3Rpb25ePVxcXCJcIiArIGtleSArIFwiIFxcXCJdXCIpLCBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgdmFyIGF0dHJpYiA9IG5vZGUuZ2V0QXR0cmlidXRlKFwiZGF0YS1lbW90aW9uXCIpLnNwbGl0KCcgJyk7IC8vICRGbG93Rml4TWVcblxuICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhdHRyaWIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaW5zZXJ0ZWRbYXR0cmliW2ldXSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIG5vZGVzVG9IeWRyYXRlLnB1c2gobm9kZSk7XG4gICAgfSk7XG4gIH1cblxuICB2YXIgX2luc2VydDtcblxuICB2YXIgb21uaXByZXNlbnRQbHVnaW5zID0gW2NvbXBhdCwgcmVtb3ZlTGFiZWxdO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgb21uaXByZXNlbnRQbHVnaW5zLnB1c2goY3JlYXRlVW5zYWZlU2VsZWN0b3JzQWxhcm0oe1xuICAgICAgZ2V0IGNvbXBhdCgpIHtcbiAgICAgICAgcmV0dXJuIGNhY2hlLmNvbXBhdDtcbiAgICAgIH1cblxuICAgIH0pLCBpbmNvcnJlY3RJbXBvcnRBbGFybSk7XG4gIH1cblxuICB7XG4gICAgdmFyIGN1cnJlbnRTaGVldDtcbiAgICB2YXIgZmluYWxpemluZ1BsdWdpbnMgPSBbc3RyaW5naWZ5LCBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICAgIGlmICghZWxlbWVudC5yb290KSB7XG4gICAgICAgIGlmIChlbGVtZW50W1wicmV0dXJuXCJdKSB7XG4gICAgICAgICAgY3VycmVudFNoZWV0Lmluc2VydChlbGVtZW50W1wicmV0dXJuXCJdKTtcbiAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50LnZhbHVlICYmIGVsZW1lbnQudHlwZSAhPT0gQ09NTUVOVCkge1xuICAgICAgICAgIC8vIGluc2VydCBlbXB0eSBydWxlIGluIG5vbi1wcm9kdWN0aW9uIGVudmlyb25tZW50c1xuICAgICAgICAgIC8vIHNvIEBlbW90aW9uL2plc3QgY2FuIGdyYWIgYGtleWAgZnJvbSB0aGUgKEpTKURPTSBmb3IgY2FjaGVzIHdpdGhvdXQgYW55IHJ1bGVzIGluc2VydGVkIHlldFxuICAgICAgICAgIGN1cnJlbnRTaGVldC5pbnNlcnQoZWxlbWVudC52YWx1ZSArIFwie31cIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IDogcnVsZXNoZWV0KGZ1bmN0aW9uIChydWxlKSB7XG4gICAgICBjdXJyZW50U2hlZXQuaW5zZXJ0KHJ1bGUpO1xuICAgIH0pXTtcbiAgICB2YXIgc2VyaWFsaXplciA9IG1pZGRsZXdhcmUob21uaXByZXNlbnRQbHVnaW5zLmNvbmNhdChzdHlsaXNQbHVnaW5zLCBmaW5hbGl6aW5nUGx1Z2lucykpO1xuXG4gICAgdmFyIHN0eWxpcyA9IGZ1bmN0aW9uIHN0eWxpcyhzdHlsZXMpIHtcbiAgICAgIHJldHVybiBzZXJpYWxpemUoY29tcGlsZShzdHlsZXMpLCBzZXJpYWxpemVyKTtcbiAgICB9O1xuXG4gICAgX2luc2VydCA9IGZ1bmN0aW9uIGluc2VydChzZWxlY3Rvciwgc2VyaWFsaXplZCwgc2hlZXQsIHNob3VsZENhY2hlKSB7XG4gICAgICBjdXJyZW50U2hlZXQgPSBzaGVldDtcblxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgc2VyaWFsaXplZC5tYXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjdXJyZW50U2hlZXQgPSB7XG4gICAgICAgICAgaW5zZXJ0OiBmdW5jdGlvbiBpbnNlcnQocnVsZSkge1xuICAgICAgICAgICAgc2hlZXQuaW5zZXJ0KHJ1bGUgKyBzZXJpYWxpemVkLm1hcCk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBzdHlsaXMoc2VsZWN0b3IgPyBzZWxlY3RvciArIFwie1wiICsgc2VyaWFsaXplZC5zdHlsZXMgKyBcIn1cIiA6IHNlcmlhbGl6ZWQuc3R5bGVzKTtcblxuICAgICAgaWYgKHNob3VsZENhY2hlKSB7XG4gICAgICAgIGNhY2hlLmluc2VydGVkW3NlcmlhbGl6ZWQubmFtZV0gPSB0cnVlO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICB2YXIgY2FjaGUgPSB7XG4gICAga2V5OiBrZXksXG4gICAgc2hlZXQ6IG5ldyBTdHlsZVNoZWV0KHtcbiAgICAgIGtleToga2V5LFxuICAgICAgY29udGFpbmVyOiBjb250YWluZXIsXG4gICAgICBub25jZTogb3B0aW9ucy5ub25jZSxcbiAgICAgIHNwZWVkeTogb3B0aW9ucy5zcGVlZHksXG4gICAgICBwcmVwZW5kOiBvcHRpb25zLnByZXBlbmQsXG4gICAgICBpbnNlcnRpb25Qb2ludDogb3B0aW9ucy5pbnNlcnRpb25Qb2ludFxuICAgIH0pLFxuICAgIG5vbmNlOiBvcHRpb25zLm5vbmNlLFxuICAgIGluc2VydGVkOiBpbnNlcnRlZCxcbiAgICByZWdpc3RlcmVkOiB7fSxcbiAgICBpbnNlcnQ6IF9pbnNlcnRcbiAgfTtcbiAgY2FjaGUuc2hlZXQuaHlkcmF0ZShub2Rlc1RvSHlkcmF0ZSk7XG4gIHJldHVybiBjYWNoZTtcbn07XG5cbmV4cG9ydCB7IGNyZWF0ZUNhY2hlIGFzIGRlZmF1bHQgfTtcbiIsICJpbXBvcnQgaG9pc3ROb25SZWFjdFN0YXRpY3MkMSBmcm9tICdob2lzdC1ub24tcmVhY3Qtc3RhdGljcyc7XG5cbi8vIHRoaXMgZmlsZSBpc29sYXRlcyB0aGlzIHBhY2thZ2UgdGhhdCBpcyBub3QgdHJlZS1zaGFrZWFibGVcbi8vIGFuZCBpZiB0aGlzIG1vZHVsZSBkb2Vzbid0IGFjdHVhbGx5IGNvbnRhaW4gYW55IGxvZ2ljIG9mIGl0cyBvd25cbi8vIHRoZW4gUm9sbHVwIGp1c3QgdXNlICdob2lzdC1ub24tcmVhY3Qtc3RhdGljcycgZGlyZWN0bHkgaW4gb3RoZXIgY2h1bmtzXG5cbnZhciBob2lzdE5vblJlYWN0U3RhdGljcyA9IChmdW5jdGlvbiAodGFyZ2V0Q29tcG9uZW50LCBzb3VyY2VDb21wb25lbnQpIHtcbiAgcmV0dXJuIGhvaXN0Tm9uUmVhY3RTdGF0aWNzJDEodGFyZ2V0Q29tcG9uZW50LCBzb3VyY2VDb21wb25lbnQpO1xufSk7XG5cbmV4cG9ydCB7IGhvaXN0Tm9uUmVhY3RTdGF0aWNzIGFzIGRlZmF1bHQgfTtcbiIsICJ2YXIgaXNCcm93c2VyID0gXCJvYmplY3RcIiAhPT0gJ3VuZGVmaW5lZCc7XG5mdW5jdGlvbiBnZXRSZWdpc3RlcmVkU3R5bGVzKHJlZ2lzdGVyZWQsIHJlZ2lzdGVyZWRTdHlsZXMsIGNsYXNzTmFtZXMpIHtcbiAgdmFyIHJhd0NsYXNzTmFtZSA9ICcnO1xuICBjbGFzc05hbWVzLnNwbGl0KCcgJykuZm9yRWFjaChmdW5jdGlvbiAoY2xhc3NOYW1lKSB7XG4gICAgaWYgKHJlZ2lzdGVyZWRbY2xhc3NOYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZWdpc3RlcmVkU3R5bGVzLnB1c2gocmVnaXN0ZXJlZFtjbGFzc05hbWVdICsgXCI7XCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICByYXdDbGFzc05hbWUgKz0gY2xhc3NOYW1lICsgXCIgXCI7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJhd0NsYXNzTmFtZTtcbn1cbnZhciByZWdpc3RlclN0eWxlcyA9IGZ1bmN0aW9uIHJlZ2lzdGVyU3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLCBpc1N0cmluZ1RhZykge1xuICB2YXIgY2xhc3NOYW1lID0gY2FjaGUua2V5ICsgXCItXCIgKyBzZXJpYWxpemVkLm5hbWU7XG5cbiAgaWYgKCAvLyB3ZSBvbmx5IG5lZWQgdG8gYWRkIHRoZSBzdHlsZXMgdG8gdGhlIHJlZ2lzdGVyZWQgY2FjaGUgaWYgdGhlXG4gIC8vIGNsYXNzIG5hbWUgY291bGQgYmUgdXNlZCBmdXJ0aGVyIGRvd25cbiAgLy8gdGhlIHRyZWUgYnV0IGlmIGl0J3MgYSBzdHJpbmcgdGFnLCB3ZSBrbm93IGl0IHdvbid0XG4gIC8vIHNvIHdlIGRvbid0IGhhdmUgdG8gYWRkIGl0IHRvIHJlZ2lzdGVyZWQgY2FjaGUuXG4gIC8vIHRoaXMgaW1wcm92ZXMgbWVtb3J5IHVzYWdlIHNpbmNlIHdlIGNhbiBhdm9pZCBzdG9yaW5nIHRoZSB3aG9sZSBzdHlsZSBzdHJpbmdcbiAgKGlzU3RyaW5nVGFnID09PSBmYWxzZSB8fCAvLyB3ZSBuZWVkIHRvIGFsd2F5cyBzdG9yZSBpdCBpZiB3ZSdyZSBpbiBjb21wYXQgbW9kZSBhbmRcbiAgLy8gaW4gbm9kZSBzaW5jZSBlbW90aW9uLXNlcnZlciByZWxpZXMgb24gd2hldGhlciBhIHN0eWxlIGlzIGluXG4gIC8vIHRoZSByZWdpc3RlcmVkIGNhY2hlIHRvIGtub3cgd2hldGhlciBhIHN0eWxlIGlzIGdsb2JhbCBvciBub3RcbiAgLy8gYWxzbywgbm90ZSB0aGF0IHRoaXMgY2hlY2sgd2lsbCBiZSBkZWFkIGNvZGUgZWxpbWluYXRlZCBpbiB0aGUgYnJvd3NlclxuICBpc0Jyb3dzZXIgPT09IGZhbHNlICkgJiYgY2FjaGUucmVnaXN0ZXJlZFtjbGFzc05hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICBjYWNoZS5yZWdpc3RlcmVkW2NsYXNzTmFtZV0gPSBzZXJpYWxpemVkLnN0eWxlcztcbiAgfVxufTtcbnZhciBpbnNlcnRTdHlsZXMgPSBmdW5jdGlvbiBpbnNlcnRTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQsIGlzU3RyaW5nVGFnKSB7XG4gIHJlZ2lzdGVyU3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLCBpc1N0cmluZ1RhZyk7XG4gIHZhciBjbGFzc05hbWUgPSBjYWNoZS5rZXkgKyBcIi1cIiArIHNlcmlhbGl6ZWQubmFtZTtcblxuICBpZiAoY2FjaGUuaW5zZXJ0ZWRbc2VyaWFsaXplZC5uYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdmFyIGN1cnJlbnQgPSBzZXJpYWxpemVkO1xuXG4gICAgZG8ge1xuICAgICAgY2FjaGUuaW5zZXJ0KHNlcmlhbGl6ZWQgPT09IGN1cnJlbnQgPyBcIi5cIiArIGNsYXNzTmFtZSA6ICcnLCBjdXJyZW50LCBjYWNoZS5zaGVldCwgdHJ1ZSk7XG5cbiAgICAgIGN1cnJlbnQgPSBjdXJyZW50Lm5leHQ7XG4gICAgfSB3aGlsZSAoY3VycmVudCAhPT0gdW5kZWZpbmVkKTtcbiAgfVxufTtcblxuZXhwb3J0IHsgZ2V0UmVnaXN0ZXJlZFN0eWxlcywgaW5zZXJ0U3R5bGVzLCByZWdpc3RlclN0eWxlcyB9O1xuIiwgIi8qIGVzbGludC1kaXNhYmxlICovXG4vLyBJbnNwaXJlZCBieSBodHRwczovL2dpdGh1Yi5jb20vZ2FyeWNvdXJ0L211cm11cmhhc2gtanNcbi8vIFBvcnRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9hYXBwbGVieS9zbWhhc2hlci9ibG9iLzYxYTA1MzBmMjgyNzdmMmU4NTBiZmMzOTYwMGNlNjFkMDJiNTE4ZGUvc3JjL011cm11ckhhc2gyLmNwcCNMMzctTDg2XG5mdW5jdGlvbiBtdXJtdXIyKHN0cikge1xuICAvLyAnbScgYW5kICdyJyBhcmUgbWl4aW5nIGNvbnN0YW50cyBnZW5lcmF0ZWQgb2ZmbGluZS5cbiAgLy8gVGhleSdyZSBub3QgcmVhbGx5ICdtYWdpYycsIHRoZXkganVzdCBoYXBwZW4gdG8gd29yayB3ZWxsLlxuICAvLyBjb25zdCBtID0gMHg1YmQxZTk5NTtcbiAgLy8gY29uc3QgciA9IDI0O1xuICAvLyBJbml0aWFsaXplIHRoZSBoYXNoXG4gIHZhciBoID0gMDsgLy8gTWl4IDQgYnl0ZXMgYXQgYSB0aW1lIGludG8gdGhlIGhhc2hcblxuICB2YXIgayxcbiAgICAgIGkgPSAwLFxuICAgICAgbGVuID0gc3RyLmxlbmd0aDtcblxuICBmb3IgKDsgbGVuID49IDQ7ICsraSwgbGVuIC09IDQpIHtcbiAgICBrID0gc3RyLmNoYXJDb2RlQXQoaSkgJiAweGZmIHwgKHN0ci5jaGFyQ29kZUF0KCsraSkgJiAweGZmKSA8PCA4IHwgKHN0ci5jaGFyQ29kZUF0KCsraSkgJiAweGZmKSA8PCAxNiB8IChzdHIuY2hhckNvZGVBdCgrK2kpICYgMHhmZikgPDwgMjQ7XG4gICAgayA9XG4gICAgLyogTWF0aC5pbXVsKGssIG0pOiAqL1xuICAgIChrICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUgKyAoKGsgPj4+IDE2KSAqIDB4ZTk5NSA8PCAxNik7XG4gICAgayBePVxuICAgIC8qIGsgPj4+IHI6ICovXG4gICAgayA+Pj4gMjQ7XG4gICAgaCA9XG4gICAgLyogTWF0aC5pbXVsKGssIG0pOiAqL1xuICAgIChrICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUgKyAoKGsgPj4+IDE2KSAqIDB4ZTk5NSA8PCAxNikgXlxuICAgIC8qIE1hdGguaW11bChoLCBtKTogKi9cbiAgICAoaCAmIDB4ZmZmZikgKiAweDViZDFlOTk1ICsgKChoID4+PiAxNikgKiAweGU5OTUgPDwgMTYpO1xuICB9IC8vIEhhbmRsZSB0aGUgbGFzdCBmZXcgYnl0ZXMgb2YgdGhlIGlucHV0IGFycmF5XG5cblxuICBzd2l0Y2ggKGxlbikge1xuICAgIGNhc2UgMzpcbiAgICAgIGggXj0gKHN0ci5jaGFyQ29kZUF0KGkgKyAyKSAmIDB4ZmYpIDw8IDE2O1xuXG4gICAgY2FzZSAyOlxuICAgICAgaCBePSAoc3RyLmNoYXJDb2RlQXQoaSArIDEpICYgMHhmZikgPDwgODtcblxuICAgIGNhc2UgMTpcbiAgICAgIGggXj0gc3RyLmNoYXJDb2RlQXQoaSkgJiAweGZmO1xuICAgICAgaCA9XG4gICAgICAvKiBNYXRoLmltdWwoaCwgbSk6ICovXG4gICAgICAoaCAmIDB4ZmZmZikgKiAweDViZDFlOTk1ICsgKChoID4+PiAxNikgKiAweGU5OTUgPDwgMTYpO1xuICB9IC8vIERvIGEgZmV3IGZpbmFsIG1peGVzIG9mIHRoZSBoYXNoIHRvIGVuc3VyZSB0aGUgbGFzdCBmZXdcbiAgLy8gYnl0ZXMgYXJlIHdlbGwtaW5jb3Jwb3JhdGVkLlxuXG5cbiAgaCBePSBoID4+PiAxMztcbiAgaCA9XG4gIC8qIE1hdGguaW11bChoLCBtKTogKi9cbiAgKGggJiAweGZmZmYpICogMHg1YmQxZTk5NSArICgoaCA+Pj4gMTYpICogMHhlOTk1IDw8IDE2KTtcbiAgcmV0dXJuICgoaCBeIGggPj4+IDE1KSA+Pj4gMCkudG9TdHJpbmcoMzYpO1xufVxuXG5leHBvcnQgeyBtdXJtdXIyIGFzIGRlZmF1bHQgfTtcbiIsICJ2YXIgdW5pdGxlc3NLZXlzID0ge1xuICBhbmltYXRpb25JdGVyYXRpb25Db3VudDogMSxcbiAgYXNwZWN0UmF0aW86IDEsXG4gIGJvcmRlckltYWdlT3V0c2V0OiAxLFxuICBib3JkZXJJbWFnZVNsaWNlOiAxLFxuICBib3JkZXJJbWFnZVdpZHRoOiAxLFxuICBib3hGbGV4OiAxLFxuICBib3hGbGV4R3JvdXA6IDEsXG4gIGJveE9yZGluYWxHcm91cDogMSxcbiAgY29sdW1uQ291bnQ6IDEsXG4gIGNvbHVtbnM6IDEsXG4gIGZsZXg6IDEsXG4gIGZsZXhHcm93OiAxLFxuICBmbGV4UG9zaXRpdmU6IDEsXG4gIGZsZXhTaHJpbms6IDEsXG4gIGZsZXhOZWdhdGl2ZTogMSxcbiAgZmxleE9yZGVyOiAxLFxuICBncmlkUm93OiAxLFxuICBncmlkUm93RW5kOiAxLFxuICBncmlkUm93U3BhbjogMSxcbiAgZ3JpZFJvd1N0YXJ0OiAxLFxuICBncmlkQ29sdW1uOiAxLFxuICBncmlkQ29sdW1uRW5kOiAxLFxuICBncmlkQ29sdW1uU3BhbjogMSxcbiAgZ3JpZENvbHVtblN0YXJ0OiAxLFxuICBtc0dyaWRSb3c6IDEsXG4gIG1zR3JpZFJvd1NwYW46IDEsXG4gIG1zR3JpZENvbHVtbjogMSxcbiAgbXNHcmlkQ29sdW1uU3BhbjogMSxcbiAgZm9udFdlaWdodDogMSxcbiAgbGluZUhlaWdodDogMSxcbiAgb3BhY2l0eTogMSxcbiAgb3JkZXI6IDEsXG4gIG9ycGhhbnM6IDEsXG4gIHRhYlNpemU6IDEsXG4gIHdpZG93czogMSxcbiAgekluZGV4OiAxLFxuICB6b29tOiAxLFxuICBXZWJraXRMaW5lQ2xhbXA6IDEsXG4gIC8vIFNWRy1yZWxhdGVkIHByb3BlcnRpZXNcbiAgZmlsbE9wYWNpdHk6IDEsXG4gIGZsb29kT3BhY2l0eTogMSxcbiAgc3RvcE9wYWNpdHk6IDEsXG4gIHN0cm9rZURhc2hhcnJheTogMSxcbiAgc3Ryb2tlRGFzaG9mZnNldDogMSxcbiAgc3Ryb2tlTWl0ZXJsaW1pdDogMSxcbiAgc3Ryb2tlT3BhY2l0eTogMSxcbiAgc3Ryb2tlV2lkdGg6IDFcbn07XG5cbmV4cG9ydCB7IHVuaXRsZXNzS2V5cyBhcyBkZWZhdWx0IH07XG4iLCAiaW1wb3J0IGhhc2hTdHJpbmcgZnJvbSAnQGVtb3Rpb24vaGFzaCc7XG5pbXBvcnQgdW5pdGxlc3MgZnJvbSAnQGVtb3Rpb24vdW5pdGxlc3MnO1xuaW1wb3J0IG1lbW9pemUgZnJvbSAnQGVtb3Rpb24vbWVtb2l6ZSc7XG5cbnZhciBJTExFR0FMX0VTQ0FQRV9TRVFVRU5DRV9FUlJPUiA9IFwiWW91IGhhdmUgaWxsZWdhbCBlc2NhcGUgc2VxdWVuY2UgaW4geW91ciB0ZW1wbGF0ZSBsaXRlcmFsLCBtb3N0IGxpa2VseSBpbnNpZGUgY29udGVudCdzIHByb3BlcnR5IHZhbHVlLlxcbkJlY2F1c2UgeW91IHdyaXRlIHlvdXIgQ1NTIGluc2lkZSBhIEphdmFTY3JpcHQgc3RyaW5nIHlvdSBhY3R1YWxseSBoYXZlIHRvIGRvIGRvdWJsZSBlc2NhcGluZywgc28gZm9yIGV4YW1wbGUgXFxcImNvbnRlbnQ6ICdcXFxcMDBkNyc7XFxcIiBzaG91bGQgYmVjb21lIFxcXCJjb250ZW50OiAnXFxcXFxcXFwwMGQ3JztcXFwiLlxcbllvdSBjYW4gcmVhZCBtb3JlIGFib3V0IHRoaXMgaGVyZTpcXG5odHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9UZW1wbGF0ZV9saXRlcmFscyNFUzIwMThfcmV2aXNpb25fb2ZfaWxsZWdhbF9lc2NhcGVfc2VxdWVuY2VzXCI7XG52YXIgVU5ERUZJTkVEX0FTX09CSkVDVF9LRVlfRVJST1IgPSBcIllvdSBoYXZlIHBhc3NlZCBpbiBmYWxzeSB2YWx1ZSBhcyBzdHlsZSBvYmplY3QncyBrZXkgKGNhbiBoYXBwZW4gd2hlbiBpbiBleGFtcGxlIHlvdSBwYXNzIHVuZXhwb3J0ZWQgY29tcG9uZW50IGFzIGNvbXB1dGVkIGtleSkuXCI7XG52YXIgaHlwaGVuYXRlUmVnZXggPSAvW0EtWl18Xm1zL2c7XG52YXIgYW5pbWF0aW9uUmVnZXggPSAvX0VNT18oW15fXSs/KV8oW15dKj8pX0VNT18vZztcblxudmFyIGlzQ3VzdG9tUHJvcGVydHkgPSBmdW5jdGlvbiBpc0N1c3RvbVByb3BlcnR5KHByb3BlcnR5KSB7XG4gIHJldHVybiBwcm9wZXJ0eS5jaGFyQ29kZUF0KDEpID09PSA0NTtcbn07XG5cbnZhciBpc1Byb2Nlc3NhYmxlVmFsdWUgPSBmdW5jdGlvbiBpc1Byb2Nlc3NhYmxlVmFsdWUodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlICE9PSAnYm9vbGVhbic7XG59O1xuXG52YXIgcHJvY2Vzc1N0eWxlTmFtZSA9IC8qICNfX1BVUkVfXyAqL21lbW9pemUoZnVuY3Rpb24gKHN0eWxlTmFtZSkge1xuICByZXR1cm4gaXNDdXN0b21Qcm9wZXJ0eShzdHlsZU5hbWUpID8gc3R5bGVOYW1lIDogc3R5bGVOYW1lLnJlcGxhY2UoaHlwaGVuYXRlUmVnZXgsICctJCYnKS50b0xvd2VyQ2FzZSgpO1xufSk7XG5cbnZhciBwcm9jZXNzU3R5bGVWYWx1ZSA9IGZ1bmN0aW9uIHByb2Nlc3NTdHlsZVZhbHVlKGtleSwgdmFsdWUpIHtcbiAgc3dpdGNoIChrZXkpIHtcbiAgICBjYXNlICdhbmltYXRpb24nOlxuICAgIGNhc2UgJ2FuaW1hdGlvbk5hbWUnOlxuICAgICAge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKGFuaW1hdGlvblJlZ2V4LCBmdW5jdGlvbiAobWF0Y2gsIHAxLCBwMikge1xuICAgICAgICAgICAgY3Vyc29yID0ge1xuICAgICAgICAgICAgICBuYW1lOiBwMSxcbiAgICAgICAgICAgICAgc3R5bGVzOiBwMixcbiAgICAgICAgICAgICAgbmV4dDogY3Vyc29yXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIHAxO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gIH1cblxuICBpZiAodW5pdGxlc3Nba2V5XSAhPT0gMSAmJiAhaXNDdXN0b21Qcm9wZXJ0eShrZXkpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgIT09IDApIHtcbiAgICByZXR1cm4gdmFsdWUgKyAncHgnO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFyIGNvbnRlbnRWYWx1ZVBhdHRlcm4gPSAvKHZhcnxhdHRyfGNvdW50ZXJzP3x1cmx8ZWxlbWVudHwoKChyZXBlYXRpbmctKT8obGluZWFyfHJhZGlhbCkpfGNvbmljKS1ncmFkaWVudClcXCh8KG5vLSk/KG9wZW58Y2xvc2UpLXF1b3RlLztcbiAgdmFyIGNvbnRlbnRWYWx1ZXMgPSBbJ25vcm1hbCcsICdub25lJywgJ2luaXRpYWwnLCAnaW5oZXJpdCcsICd1bnNldCddO1xuICB2YXIgb2xkUHJvY2Vzc1N0eWxlVmFsdWUgPSBwcm9jZXNzU3R5bGVWYWx1ZTtcbiAgdmFyIG1zUGF0dGVybiA9IC9eLW1zLS87XG4gIHZhciBoeXBoZW5QYXR0ZXJuID0gLy0oLikvZztcbiAgdmFyIGh5cGhlbmF0ZWRDYWNoZSA9IHt9O1xuXG4gIHByb2Nlc3NTdHlsZVZhbHVlID0gZnVuY3Rpb24gcHJvY2Vzc1N0eWxlVmFsdWUoa2V5LCB2YWx1ZSkge1xuICAgIGlmIChrZXkgPT09ICdjb250ZW50Jykge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycgfHwgY29udGVudFZhbHVlcy5pbmRleE9mKHZhbHVlKSA9PT0gLTEgJiYgIWNvbnRlbnRWYWx1ZVBhdHRlcm4udGVzdCh2YWx1ZSkgJiYgKHZhbHVlLmNoYXJBdCgwKSAhPT0gdmFsdWUuY2hhckF0KHZhbHVlLmxlbmd0aCAtIDEpIHx8IHZhbHVlLmNoYXJBdCgwKSAhPT0gJ1wiJyAmJiB2YWx1ZS5jaGFyQXQoMCkgIT09IFwiJ1wiKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJZb3Ugc2VlbSB0byBiZSB1c2luZyBhIHZhbHVlIGZvciAnY29udGVudCcgd2l0aG91dCBxdW90ZXMsIHRyeSByZXBsYWNpbmcgaXQgd2l0aCBgY29udGVudDogJ1xcXCJcIiArIHZhbHVlICsgXCJcXFwiJ2BcIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHByb2Nlc3NlZCA9IG9sZFByb2Nlc3NTdHlsZVZhbHVlKGtleSwgdmFsdWUpO1xuXG4gICAgaWYgKHByb2Nlc3NlZCAhPT0gJycgJiYgIWlzQ3VzdG9tUHJvcGVydHkoa2V5KSAmJiBrZXkuaW5kZXhPZignLScpICE9PSAtMSAmJiBoeXBoZW5hdGVkQ2FjaGVba2V5XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBoeXBoZW5hdGVkQ2FjaGVba2V5XSA9IHRydWU7XG4gICAgICBjb25zb2xlLmVycm9yKFwiVXNpbmcga2ViYWItY2FzZSBmb3IgY3NzIHByb3BlcnRpZXMgaW4gb2JqZWN0cyBpcyBub3Qgc3VwcG9ydGVkLiBEaWQgeW91IG1lYW4gXCIgKyBrZXkucmVwbGFjZShtc1BhdHRlcm4sICdtcy0nKS5yZXBsYWNlKGh5cGhlblBhdHRlcm4sIGZ1bmN0aW9uIChzdHIsIF9jaGFyKSB7XG4gICAgICAgIHJldHVybiBfY2hhci50b1VwcGVyQ2FzZSgpO1xuICAgICAgfSkgKyBcIj9cIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb2Nlc3NlZDtcbiAgfTtcbn1cblxudmFyIG5vQ29tcG9uZW50U2VsZWN0b3JNZXNzYWdlID0gJ0NvbXBvbmVudCBzZWxlY3RvcnMgY2FuIG9ubHkgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoICcgKyAnQGVtb3Rpb24vYmFiZWwtcGx1Z2luLCB0aGUgc3djIEVtb3Rpb24gcGx1Z2luLCBvciBhbm90aGVyIEVtb3Rpb24tYXdhcmUgJyArICdjb21waWxlciB0cmFuc2Zvcm0uJztcblxuZnVuY3Rpb24gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgaW50ZXJwb2xhdGlvbikge1xuICBpZiAoaW50ZXJwb2xhdGlvbiA9PSBudWxsKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgaWYgKGludGVycG9sYXRpb24uX19lbW90aW9uX3N0eWxlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgaW50ZXJwb2xhdGlvbi50b1N0cmluZygpID09PSAnTk9fQ09NUE9ORU5UX1NFTEVDVE9SJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKG5vQ29tcG9uZW50U2VsZWN0b3JNZXNzYWdlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW50ZXJwb2xhdGlvbjtcbiAgfVxuXG4gIHN3aXRjaCAodHlwZW9mIGludGVycG9sYXRpb24pIHtcbiAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuXG4gICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgIHtcbiAgICAgICAgaWYgKGludGVycG9sYXRpb24uYW5pbSA9PT0gMSkge1xuICAgICAgICAgIGN1cnNvciA9IHtcbiAgICAgICAgICAgIG5hbWU6IGludGVycG9sYXRpb24ubmFtZSxcbiAgICAgICAgICAgIHN0eWxlczogaW50ZXJwb2xhdGlvbi5zdHlsZXMsXG4gICAgICAgICAgICBuZXh0OiBjdXJzb3JcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiBpbnRlcnBvbGF0aW9uLm5hbWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW50ZXJwb2xhdGlvbi5zdHlsZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHZhciBuZXh0ID0gaW50ZXJwb2xhdGlvbi5uZXh0O1xuXG4gICAgICAgICAgaWYgKG5leHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gbm90IHRoZSBtb3N0IGVmZmljaWVudCB0aGluZyBldmVyIGJ1dCB0aGlzIGlzIGEgcHJldHR5IHJhcmUgY2FzZVxuICAgICAgICAgICAgLy8gYW5kIHRoZXJlIHdpbGwgYmUgdmVyeSBmZXcgaXRlcmF0aW9ucyBvZiB0aGlzIGdlbmVyYWxseVxuICAgICAgICAgICAgd2hpbGUgKG5leHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBjdXJzb3IgPSB7XG4gICAgICAgICAgICAgICAgbmFtZTogbmV4dC5uYW1lLFxuICAgICAgICAgICAgICAgIHN0eWxlczogbmV4dC5zdHlsZXMsXG4gICAgICAgICAgICAgICAgbmV4dDogY3Vyc29yXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIG5leHQgPSBuZXh0Lm5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIHN0eWxlcyA9IGludGVycG9sYXRpb24uc3R5bGVzICsgXCI7XCI7XG5cbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBpbnRlcnBvbGF0aW9uLm1hcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzdHlsZXMgKz0gaW50ZXJwb2xhdGlvbi5tYXA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHN0eWxlcztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjcmVhdGVTdHJpbmdGcm9tT2JqZWN0KG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCBpbnRlcnBvbGF0aW9uKTtcbiAgICAgIH1cblxuICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgIHtcbiAgICAgICAgaWYgKG1lcmdlZFByb3BzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB2YXIgcHJldmlvdXNDdXJzb3IgPSBjdXJzb3I7XG4gICAgICAgICAgdmFyIHJlc3VsdCA9IGludGVycG9sYXRpb24obWVyZ2VkUHJvcHMpO1xuICAgICAgICAgIGN1cnNvciA9IHByZXZpb3VzQ3Vyc29yO1xuICAgICAgICAgIHJldHVybiBoYW5kbGVJbnRlcnBvbGF0aW9uKG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCByZXN1bHQpO1xuICAgICAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdGdW5jdGlvbnMgdGhhdCBhcmUgaW50ZXJwb2xhdGVkIGluIGNzcyBjYWxscyB3aWxsIGJlIHN0cmluZ2lmaWVkLlxcbicgKyAnSWYgeW91IHdhbnQgdG8gaGF2ZSBhIGNzcyBjYWxsIGJhc2VkIG9uIHByb3BzLCBjcmVhdGUgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBjc3MgY2FsbCBsaWtlIHRoaXNcXG4nICsgJ2xldCBkeW5hbWljU3R5bGUgPSAocHJvcHMpID0+IGNzc2Bjb2xvcjogJHtwcm9wcy5jb2xvcn1gXFxuJyArICdJdCBjYW4gYmUgY2FsbGVkIGRpcmVjdGx5IHdpdGggcHJvcHMgb3IgaW50ZXJwb2xhdGVkIGluIGEgc3R5bGVkIGNhbGwgbGlrZSB0aGlzXFxuJyArIFwibGV0IFNvbWVDb21wb25lbnQgPSBzdHlsZWQoJ2RpdicpYCR7ZHluYW1pY1N0eWxlfWBcIik7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICB2YXIgbWF0Y2hlZCA9IFtdO1xuICAgICAgICB2YXIgcmVwbGFjZWQgPSBpbnRlcnBvbGF0aW9uLnJlcGxhY2UoYW5pbWF0aW9uUmVnZXgsIGZ1bmN0aW9uIChtYXRjaCwgcDEsIHAyKSB7XG4gICAgICAgICAgdmFyIGZha2VWYXJOYW1lID0gXCJhbmltYXRpb25cIiArIG1hdGNoZWQubGVuZ3RoO1xuICAgICAgICAgIG1hdGNoZWQucHVzaChcImNvbnN0IFwiICsgZmFrZVZhck5hbWUgKyBcIiA9IGtleWZyYW1lc2BcIiArIHAyLnJlcGxhY2UoL15Aa2V5ZnJhbWVzIGFuaW1hdGlvbi1cXHcrLywgJycpICsgXCJgXCIpO1xuICAgICAgICAgIHJldHVybiBcIiR7XCIgKyBmYWtlVmFyTmFtZSArIFwifVwiO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAobWF0Y2hlZC5sZW5ndGgpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdga2V5ZnJhbWVzYCBvdXRwdXQgZ290IGludGVycG9sYXRlZCBpbnRvIHBsYWluIHN0cmluZywgcGxlYXNlIHdyYXAgaXQgd2l0aCBgY3NzYC5cXG5cXG4nICsgJ0luc3RlYWQgb2YgZG9pbmcgdGhpczpcXG5cXG4nICsgW10uY29uY2F0KG1hdGNoZWQsIFtcImBcIiArIHJlcGxhY2VkICsgXCJgXCJdKS5qb2luKCdcXG4nKSArICdcXG5cXG5Zb3Ugc2hvdWxkIHdyYXAgaXQgd2l0aCBgY3NzYCBsaWtlIHRoaXM6XFxuXFxuJyArIChcImNzc2BcIiArIHJlcGxhY2VkICsgXCJgXCIpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBicmVhaztcbiAgfSAvLyBmaW5hbGl6ZSBzdHJpbmcgdmFsdWVzIChyZWd1bGFyIHN0cmluZ3MgYW5kIGZ1bmN0aW9ucyBpbnRlcnBvbGF0ZWQgaW50byBjc3MgY2FsbHMpXG5cblxuICBpZiAocmVnaXN0ZXJlZCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGludGVycG9sYXRpb247XG4gIH1cblxuICB2YXIgY2FjaGVkID0gcmVnaXN0ZXJlZFtpbnRlcnBvbGF0aW9uXTtcbiAgcmV0dXJuIGNhY2hlZCAhPT0gdW5kZWZpbmVkID8gY2FjaGVkIDogaW50ZXJwb2xhdGlvbjtcbn1cblxuZnVuY3Rpb24gY3JlYXRlU3RyaW5nRnJvbU9iamVjdChtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgb2JqKSB7XG4gIHZhciBzdHJpbmcgPSAnJztcblxuICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmoubGVuZ3RoOyBpKyspIHtcbiAgICAgIHN0cmluZyArPSBoYW5kbGVJbnRlcnBvbGF0aW9uKG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCBvYmpbaV0pICsgXCI7XCI7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIF9rZXkgaW4gb2JqKSB7XG4gICAgICB2YXIgdmFsdWUgPSBvYmpbX2tleV07XG5cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIGlmIChyZWdpc3RlcmVkICE9IG51bGwgJiYgcmVnaXN0ZXJlZFt2YWx1ZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHN0cmluZyArPSBfa2V5ICsgXCJ7XCIgKyByZWdpc3RlcmVkW3ZhbHVlXSArIFwifVwiO1xuICAgICAgICB9IGVsc2UgaWYgKGlzUHJvY2Vzc2FibGVWYWx1ZSh2YWx1ZSkpIHtcbiAgICAgICAgICBzdHJpbmcgKz0gcHJvY2Vzc1N0eWxlTmFtZShfa2V5KSArIFwiOlwiICsgcHJvY2Vzc1N0eWxlVmFsdWUoX2tleSwgdmFsdWUpICsgXCI7XCI7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChfa2V5ID09PSAnTk9fQ09NUE9ORU5UX1NFTEVDVE9SJyAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG5vQ29tcG9uZW50U2VsZWN0b3JNZXNzYWdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB0eXBlb2YgdmFsdWVbMF0gPT09ICdzdHJpbmcnICYmIChyZWdpc3RlcmVkID09IG51bGwgfHwgcmVnaXN0ZXJlZFt2YWx1ZVswXV0gPT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgdmFsdWUubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBpZiAoaXNQcm9jZXNzYWJsZVZhbHVlKHZhbHVlW19pXSkpIHtcbiAgICAgICAgICAgICAgc3RyaW5nICs9IHByb2Nlc3NTdHlsZU5hbWUoX2tleSkgKyBcIjpcIiArIHByb2Nlc3NTdHlsZVZhbHVlKF9rZXksIHZhbHVlW19pXSkgKyBcIjtcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIGludGVycG9sYXRlZCA9IGhhbmRsZUludGVycG9sYXRpb24obWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIHZhbHVlKTtcblxuICAgICAgICAgIHN3aXRjaCAoX2tleSkge1xuICAgICAgICAgICAgY2FzZSAnYW5pbWF0aW9uJzpcbiAgICAgICAgICAgIGNhc2UgJ2FuaW1hdGlvbk5hbWUnOlxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3RyaW5nICs9IHByb2Nlc3NTdHlsZU5hbWUoX2tleSkgKyBcIjpcIiArIGludGVycG9sYXRlZCArIFwiO1wiO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBfa2V5ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihVTkRFRklORURfQVNfT0JKRUNUX0tFWV9FUlJPUik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgc3RyaW5nICs9IF9rZXkgKyBcIntcIiArIGludGVycG9sYXRlZCArIFwifVwiO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0cmluZztcbn1cblxudmFyIGxhYmVsUGF0dGVybiA9IC9sYWJlbDpcXHMqKFteXFxzO1xcbntdKylcXHMqKDt8JCkvZztcbnZhciBzb3VyY2VNYXBQYXR0ZXJuO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBzb3VyY2VNYXBQYXR0ZXJuID0gL1xcL1xcKiNcXHNzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb25cXC9qc29uO1xcUytcXHMrXFwqXFwvL2c7XG59IC8vIHRoaXMgaXMgdGhlIGN1cnNvciBmb3Iga2V5ZnJhbWVzXG4vLyBrZXlmcmFtZXMgYXJlIHN0b3JlZCBvbiB0aGUgU2VyaWFsaXplZFN0eWxlcyBvYmplY3QgYXMgYSBsaW5rZWQgbGlzdFxuXG5cbnZhciBjdXJzb3I7XG52YXIgc2VyaWFsaXplU3R5bGVzID0gZnVuY3Rpb24gc2VyaWFsaXplU3R5bGVzKGFyZ3MsIHJlZ2lzdGVyZWQsIG1lcmdlZFByb3BzKSB7XG4gIGlmIChhcmdzLmxlbmd0aCA9PT0gMSAmJiB0eXBlb2YgYXJnc1swXSA9PT0gJ29iamVjdCcgJiYgYXJnc1swXSAhPT0gbnVsbCAmJiBhcmdzWzBdLnN0eWxlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGFyZ3NbMF07XG4gIH1cblxuICB2YXIgc3RyaW5nTW9kZSA9IHRydWU7XG4gIHZhciBzdHlsZXMgPSAnJztcbiAgY3Vyc29yID0gdW5kZWZpbmVkO1xuICB2YXIgc3RyaW5ncyA9IGFyZ3NbMF07XG5cbiAgaWYgKHN0cmluZ3MgPT0gbnVsbCB8fCBzdHJpbmdzLnJhdyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgc3RyaW5nTW9kZSA9IGZhbHNlO1xuICAgIHN0eWxlcyArPSBoYW5kbGVJbnRlcnBvbGF0aW9uKG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCBzdHJpbmdzKTtcbiAgfSBlbHNlIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBzdHJpbmdzWzBdID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoSUxMRUdBTF9FU0NBUEVfU0VRVUVOQ0VfRVJST1IpO1xuICAgIH1cblxuICAgIHN0eWxlcyArPSBzdHJpbmdzWzBdO1xuICB9IC8vIHdlIHN0YXJ0IGF0IDEgc2luY2Ugd2UndmUgYWxyZWFkeSBoYW5kbGVkIHRoZSBmaXJzdCBhcmdcblxuXG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgIHN0eWxlcyArPSBoYW5kbGVJbnRlcnBvbGF0aW9uKG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCBhcmdzW2ldKTtcblxuICAgIGlmIChzdHJpbmdNb2RlKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBzdHJpbmdzW2ldID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihJTExFR0FMX0VTQ0FQRV9TRVFVRU5DRV9FUlJPUik7XG4gICAgICB9XG5cbiAgICAgIHN0eWxlcyArPSBzdHJpbmdzW2ldO1xuICAgIH1cbiAgfVxuXG4gIHZhciBzb3VyY2VNYXA7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBzdHlsZXMgPSBzdHlsZXMucmVwbGFjZShzb3VyY2VNYXBQYXR0ZXJuLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgIHNvdXJjZU1hcCA9IG1hdGNoO1xuICAgICAgcmV0dXJuICcnO1xuICAgIH0pO1xuICB9IC8vIHVzaW5nIGEgZ2xvYmFsIHJlZ2V4IHdpdGggLmV4ZWMgaXMgc3RhdGVmdWwgc28gbGFzdEluZGV4IGhhcyB0byBiZSByZXNldCBlYWNoIHRpbWVcblxuXG4gIGxhYmVsUGF0dGVybi5sYXN0SW5kZXggPSAwO1xuICB2YXIgaWRlbnRpZmllck5hbWUgPSAnJztcbiAgdmFyIG1hdGNoOyAvLyBodHRwczovL2VzYmVuY2guY29tL2JlbmNoLzViODA5YzJjZjI5NDk4MDBhMGY2MWZiNVxuXG4gIHdoaWxlICgobWF0Y2ggPSBsYWJlbFBhdHRlcm4uZXhlYyhzdHlsZXMpKSAhPT0gbnVsbCkge1xuICAgIGlkZW50aWZpZXJOYW1lICs9ICctJyArIC8vICRGbG93Rml4TWUgd2Uga25vdyBpdCdzIG5vdCBudWxsXG4gICAgbWF0Y2hbMV07XG4gIH1cblxuICB2YXIgbmFtZSA9IGhhc2hTdHJpbmcoc3R5bGVzKSArIGlkZW50aWZpZXJOYW1lO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gJEZsb3dGaXhNZSBTZXJpYWxpemVkU3R5bGVzIHR5cGUgZG9lc24ndCBoYXZlIHRvU3RyaW5nIHByb3BlcnR5IChhbmQgd2UgZG9uJ3Qgd2FudCB0byBhZGQgaXQpXG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IG5hbWUsXG4gICAgICBzdHlsZXM6IHN0eWxlcyxcbiAgICAgIG1hcDogc291cmNlTWFwLFxuICAgICAgbmV4dDogY3Vyc29yLFxuICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbmFtZTogbmFtZSxcbiAgICBzdHlsZXM6IHN0eWxlcyxcbiAgICBuZXh0OiBjdXJzb3JcbiAgfTtcbn07XG5cbmV4cG9ydCB7IHNlcmlhbGl6ZVN0eWxlcyB9O1xuIiwgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcblxudmFyIHN5bmNGYWxsYmFjayA9IGZ1bmN0aW9uIHN5bmNGYWxsYmFjayhjcmVhdGUpIHtcbiAgcmV0dXJuIGNyZWF0ZSgpO1xufTtcblxudmFyIHVzZUluc2VydGlvbkVmZmVjdCA9IFJlYWN0Wyd1c2VJbnNlcnRpb24nICsgJ0VmZmVjdCddID8gUmVhY3RbJ3VzZUluc2VydGlvbicgKyAnRWZmZWN0J10gOiBmYWxzZTtcbnZhciB1c2VJbnNlcnRpb25FZmZlY3RBbHdheXNXaXRoU3luY0ZhbGxiYWNrID0gdXNlSW5zZXJ0aW9uRWZmZWN0IHx8IHN5bmNGYWxsYmFjaztcbnZhciB1c2VJbnNlcnRpb25FZmZlY3RXaXRoTGF5b3V0RmFsbGJhY2sgPSB1c2VJbnNlcnRpb25FZmZlY3QgfHwgUmVhY3QudXNlTGF5b3V0RWZmZWN0O1xuXG5leHBvcnQgeyB1c2VJbnNlcnRpb25FZmZlY3RBbHdheXNXaXRoU3luY0ZhbGxiYWNrLCB1c2VJbnNlcnRpb25FZmZlY3RXaXRoTGF5b3V0RmFsbGJhY2sgfTtcbiIsICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VDb250ZXh0LCBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNyZWF0ZUNhY2hlIGZyb20gJ0BlbW90aW9uL2NhY2hlJztcbmltcG9ydCBfZXh0ZW5kcyBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzJztcbmltcG9ydCB3ZWFrTWVtb2l6ZSBmcm9tICdAZW1vdGlvbi93ZWFrLW1lbW9pemUnO1xuaW1wb3J0IGhvaXN0Tm9uUmVhY3RTdGF0aWNzIGZyb20gJy4uL19pc29sYXRlZC1obnJzL2Rpc3QvZW1vdGlvbi1yZWFjdC1faXNvbGF0ZWQtaG5ycy5icm93c2VyLmVzbS5qcyc7XG5pbXBvcnQgeyBnZXRSZWdpc3RlcmVkU3R5bGVzLCByZWdpc3RlclN0eWxlcywgaW5zZXJ0U3R5bGVzIH0gZnJvbSAnQGVtb3Rpb24vdXRpbHMnO1xuaW1wb3J0IHsgc2VyaWFsaXplU3R5bGVzIH0gZnJvbSAnQGVtb3Rpb24vc2VyaWFsaXplJztcbmltcG9ydCB7IHVzZUluc2VydGlvbkVmZmVjdEFsd2F5c1dpdGhTeW5jRmFsbGJhY2sgfSBmcm9tICdAZW1vdGlvbi91c2UtaW5zZXJ0aW9uLWVmZmVjdC13aXRoLWZhbGxiYWNrcyc7XG5cbnZhciBpc0Jyb3dzZXIgPSBcIm9iamVjdFwiICE9PSAndW5kZWZpbmVkJztcbnZhciBoYXNPd24gPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxudmFyIEVtb3Rpb25DYWNoZUNvbnRleHQgPSAvKiAjX19QVVJFX18gKi9SZWFjdC5jcmVhdGVDb250ZXh0KCAvLyB3ZSdyZSBkb2luZyB0aGlzIHRvIGF2b2lkIHByZWNvbnN0cnVjdCdzIGRlYWQgY29kZSBlbGltaW5hdGlvbiBpbiB0aGlzIG9uZSBjYXNlXG4vLyBiZWNhdXNlIHRoaXMgbW9kdWxlIGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3IgdGhlIGJyb3dzZXIgYW5kIG5vZGVcbi8vIGJ1dCBpdCdzIGFsc28gcmVxdWlyZWQgaW4gcmVhY3QgbmF0aXZlIGFuZCBzaW1pbGFyIGVudmlyb25tZW50cyBzb21ldGltZXNcbi8vIGFuZCB3ZSBjb3VsZCBoYXZlIGEgc3BlY2lhbCBidWlsZCBqdXN0IGZvciB0aGF0XG4vLyBidXQgdGhpcyBpcyBtdWNoIGVhc2llciBhbmQgdGhlIG5hdGl2ZSBwYWNrYWdlc1xuLy8gbWlnaHQgdXNlIGEgZGlmZmVyZW50IHRoZW1lIGNvbnRleHQgaW4gdGhlIGZ1dHVyZSBhbnl3YXlcbnR5cGVvZiBIVE1MRWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcgPyAvKiAjX19QVVJFX18gKi9jcmVhdGVDYWNoZSh7XG4gIGtleTogJ2Nzcydcbn0pIDogbnVsbCk7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIEVtb3Rpb25DYWNoZUNvbnRleHQuZGlzcGxheU5hbWUgPSAnRW1vdGlvbkNhY2hlQ29udGV4dCc7XG59XG5cbnZhciBDYWNoZVByb3ZpZGVyID0gRW1vdGlvbkNhY2hlQ29udGV4dC5Qcm92aWRlcjtcbnZhciBfX3Vuc2FmZV91c2VFbW90aW9uQ2FjaGUgPSBmdW5jdGlvbiB1c2VFbW90aW9uQ2FjaGUoKSB7XG4gIHJldHVybiB1c2VDb250ZXh0KEVtb3Rpb25DYWNoZUNvbnRleHQpO1xufTtcblxudmFyIHdpdGhFbW90aW9uQ2FjaGUgPSBmdW5jdGlvbiB3aXRoRW1vdGlvbkNhY2hlKGZ1bmMpIHtcbiAgLy8gJEZsb3dGaXhNZVxuICByZXR1cm4gLyojX19QVVJFX18qL2ZvcndhcmRSZWYoZnVuY3Rpb24gKHByb3BzLCByZWYpIHtcbiAgICAvLyB0aGUgY2FjaGUgd2lsbCBuZXZlciBiZSBudWxsIGluIHRoZSBicm93c2VyXG4gICAgdmFyIGNhY2hlID0gdXNlQ29udGV4dChFbW90aW9uQ2FjaGVDb250ZXh0KTtcbiAgICByZXR1cm4gZnVuYyhwcm9wcywgY2FjaGUsIHJlZik7XG4gIH0pO1xufTtcblxuaWYgKCFpc0Jyb3dzZXIpIHtcbiAgd2l0aEVtb3Rpb25DYWNoZSA9IGZ1bmN0aW9uIHdpdGhFbW90aW9uQ2FjaGUoZnVuYykge1xuICAgIHJldHVybiBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICAgIHZhciBjYWNoZSA9IHVzZUNvbnRleHQoRW1vdGlvbkNhY2hlQ29udGV4dCk7XG5cbiAgICAgIGlmIChjYWNoZSA9PT0gbnVsbCkge1xuICAgICAgICAvLyB5ZXMsIHdlJ3JlIHBvdGVudGlhbGx5IGNyZWF0aW5nIHRoaXMgb24gZXZlcnkgcmVuZGVyXG4gICAgICAgIC8vIGl0IGRvZXNuJ3QgYWN0dWFsbHkgbWF0dGVyIHRob3VnaCBzaW5jZSBpdCdzIG9ubHkgb24gdGhlIHNlcnZlclxuICAgICAgICAvLyBzbyB0aGVyZSB3aWxsIG9ubHkgZXZlcnkgYmUgYSBzaW5nbGUgcmVuZGVyXG4gICAgICAgIC8vIHRoYXQgY291bGQgY2hhbmdlIGluIHRoZSBmdXR1cmUgYmVjYXVzZSBvZiBzdXNwZW5zZSBhbmQgZXRjLiBidXQgZm9yIG5vdyxcbiAgICAgICAgLy8gdGhpcyB3b3JrcyBhbmQgaSBkb24ndCB3YW50IHRvIG9wdGltaXNlIGZvciBhIGZ1dHVyZSB0aGluZyB0aGF0IHdlIGFyZW4ndCBzdXJlIGFib3V0XG4gICAgICAgIGNhY2hlID0gY3JlYXRlQ2FjaGUoe1xuICAgICAgICAgIGtleTogJ2NzcydcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChFbW90aW9uQ2FjaGVDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICAgICAgdmFsdWU6IGNhY2hlXG4gICAgICAgIH0sIGZ1bmMocHJvcHMsIGNhY2hlKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZnVuYyhwcm9wcywgY2FjaGUpO1xuICAgICAgfVxuICAgIH07XG4gIH07XG59XG5cbnZhciBUaGVtZUNvbnRleHQgPSAvKiAjX19QVVJFX18gKi9SZWFjdC5jcmVhdGVDb250ZXh0KHt9KTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgVGhlbWVDb250ZXh0LmRpc3BsYXlOYW1lID0gJ0Vtb3Rpb25UaGVtZUNvbnRleHQnO1xufVxuXG52YXIgdXNlVGhlbWUgPSBmdW5jdGlvbiB1c2VUaGVtZSgpIHtcbiAgcmV0dXJuIFJlYWN0LnVzZUNvbnRleHQoVGhlbWVDb250ZXh0KTtcbn07XG5cbnZhciBnZXRUaGVtZSA9IGZ1bmN0aW9uIGdldFRoZW1lKG91dGVyVGhlbWUsIHRoZW1lKSB7XG4gIGlmICh0eXBlb2YgdGhlbWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgbWVyZ2VkVGhlbWUgPSB0aGVtZShvdXRlclRoZW1lKTtcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIChtZXJnZWRUaGVtZSA9PSBudWxsIHx8IHR5cGVvZiBtZXJnZWRUaGVtZSAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShtZXJnZWRUaGVtZSkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1tUaGVtZVByb3ZpZGVyXSBQbGVhc2UgcmV0dXJuIGFuIG9iamVjdCBmcm9tIHlvdXIgdGhlbWUgZnVuY3Rpb24sIGkuZS4gdGhlbWU9eygpID0+ICh7fSl9IScpO1xuICAgIH1cblxuICAgIHJldHVybiBtZXJnZWRUaGVtZTtcbiAgfVxuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICh0aGVtZSA9PSBudWxsIHx8IHR5cGVvZiB0aGVtZSAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheSh0aGVtZSkpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdbVGhlbWVQcm92aWRlcl0gUGxlYXNlIG1ha2UgeW91ciB0aGVtZSBwcm9wIGEgcGxhaW4gb2JqZWN0Jyk7XG4gIH1cblxuICByZXR1cm4gX2V4dGVuZHMoe30sIG91dGVyVGhlbWUsIHRoZW1lKTtcbn07XG5cbnZhciBjcmVhdGVDYWNoZVdpdGhUaGVtZSA9IC8qICNfX1BVUkVfXyAqL3dlYWtNZW1vaXplKGZ1bmN0aW9uIChvdXRlclRoZW1lKSB7XG4gIHJldHVybiB3ZWFrTWVtb2l6ZShmdW5jdGlvbiAodGhlbWUpIHtcbiAgICByZXR1cm4gZ2V0VGhlbWUob3V0ZXJUaGVtZSwgdGhlbWUpO1xuICB9KTtcbn0pO1xudmFyIFRoZW1lUHJvdmlkZXIgPSBmdW5jdGlvbiBUaGVtZVByb3ZpZGVyKHByb3BzKSB7XG4gIHZhciB0aGVtZSA9IFJlYWN0LnVzZUNvbnRleHQoVGhlbWVDb250ZXh0KTtcblxuICBpZiAocHJvcHMudGhlbWUgIT09IHRoZW1lKSB7XG4gICAgdGhlbWUgPSBjcmVhdGVDYWNoZVdpdGhUaGVtZSh0aGVtZSkocHJvcHMudGhlbWUpO1xuICB9XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRoZW1lQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiB0aGVtZVxuICB9LCBwcm9wcy5jaGlsZHJlbik7XG59O1xuZnVuY3Rpb24gd2l0aFRoZW1lKENvbXBvbmVudCkge1xuICB2YXIgY29tcG9uZW50TmFtZSA9IENvbXBvbmVudC5kaXNwbGF5TmFtZSB8fCBDb21wb25lbnQubmFtZSB8fCAnQ29tcG9uZW50JztcblxuICB2YXIgcmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKHByb3BzLCByZWYpIHtcbiAgICB2YXIgdGhlbWUgPSBSZWFjdC51c2VDb250ZXh0KFRoZW1lQ29udGV4dCk7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KENvbXBvbmVudCwgX2V4dGVuZHMoe1xuICAgICAgdGhlbWU6IHRoZW1lLFxuICAgICAgcmVmOiByZWZcbiAgICB9LCBwcm9wcykpO1xuICB9OyAvLyAkRmxvd0ZpeE1lXG5cblxuICB2YXIgV2l0aFRoZW1lID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYocmVuZGVyKTtcbiAgV2l0aFRoZW1lLmRpc3BsYXlOYW1lID0gXCJXaXRoVGhlbWUoXCIgKyBjb21wb25lbnROYW1lICsgXCIpXCI7XG4gIHJldHVybiBob2lzdE5vblJlYWN0U3RhdGljcyhXaXRoVGhlbWUsIENvbXBvbmVudCk7XG59XG5cbnZhciBnZXRMYXN0UGFydCA9IGZ1bmN0aW9uIGdldExhc3RQYXJ0KGZ1bmN0aW9uTmFtZSkge1xuICAvLyBUaGUgbWF0Y2ggbWF5IGJlIHNvbWV0aGluZyBsaWtlICdPYmplY3QuY3JlYXRlRW1vdGlvblByb3BzJyBvclxuICAvLyAnTG9hZGVyLnByb3RvdHlwZS5yZW5kZXInXG4gIHZhciBwYXJ0cyA9IGZ1bmN0aW9uTmFtZS5zcGxpdCgnLicpO1xuICByZXR1cm4gcGFydHNbcGFydHMubGVuZ3RoIC0gMV07XG59O1xuXG52YXIgZ2V0RnVuY3Rpb25OYW1lRnJvbVN0YWNrVHJhY2VMaW5lID0gZnVuY3Rpb24gZ2V0RnVuY3Rpb25OYW1lRnJvbVN0YWNrVHJhY2VMaW5lKGxpbmUpIHtcbiAgLy8gVjhcbiAgdmFyIG1hdGNoID0gL15cXHMrYXRcXHMrKFtBLVphLXowLTkkLl0rKVxccy8uZXhlYyhsaW5lKTtcbiAgaWYgKG1hdGNoKSByZXR1cm4gZ2V0TGFzdFBhcnQobWF0Y2hbMV0pOyAvLyBTYWZhcmkgLyBGaXJlZm94XG5cbiAgbWF0Y2ggPSAvXihbQS1aYS16MC05JC5dKylALy5leGVjKGxpbmUpO1xuICBpZiAobWF0Y2gpIHJldHVybiBnZXRMYXN0UGFydChtYXRjaFsxXSk7XG4gIHJldHVybiB1bmRlZmluZWQ7XG59O1xuXG52YXIgaW50ZXJuYWxSZWFjdEZ1bmN0aW9uTmFtZXMgPSAvKiAjX19QVVJFX18gKi9uZXcgU2V0KFsncmVuZGVyV2l0aEhvb2tzJywgJ3Byb2Nlc3NDaGlsZCcsICdmaW5pc2hDbGFzc0NvbXBvbmVudCcsICdyZW5kZXJUb1N0cmluZyddKTsgLy8gVGhlc2UgaWRlbnRpZmllcnMgY29tZSBmcm9tIGVycm9yIHN0YWNrcywgc28gdGhleSBoYXZlIHRvIGJlIHZhbGlkIEpTXG4vLyBpZGVudGlmaWVycywgdGh1cyB3ZSBvbmx5IG5lZWQgdG8gcmVwbGFjZSB3aGF0IGlzIGEgdmFsaWQgY2hhcmFjdGVyIGZvciBKUyxcbi8vIGJ1dCBub3QgZm9yIENTUy5cblxudmFyIHNhbml0aXplSWRlbnRpZmllciA9IGZ1bmN0aW9uIHNhbml0aXplSWRlbnRpZmllcihpZGVudGlmaWVyKSB7XG4gIHJldHVybiBpZGVudGlmaWVyLnJlcGxhY2UoL1xcJC9nLCAnLScpO1xufTtcblxudmFyIGdldExhYmVsRnJvbVN0YWNrVHJhY2UgPSBmdW5jdGlvbiBnZXRMYWJlbEZyb21TdGFja1RyYWNlKHN0YWNrVHJhY2UpIHtcbiAgaWYgKCFzdGFja1RyYWNlKSByZXR1cm4gdW5kZWZpbmVkO1xuICB2YXIgbGluZXMgPSBzdGFja1RyYWNlLnNwbGl0KCdcXG4nKTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGZ1bmN0aW9uTmFtZSA9IGdldEZ1bmN0aW9uTmFtZUZyb21TdGFja1RyYWNlTGluZShsaW5lc1tpXSk7IC8vIFRoZSBmaXJzdCBsaW5lIG9mIFY4IHN0YWNrIHRyYWNlcyBpcyBqdXN0IFwiRXJyb3JcIlxuXG4gICAgaWYgKCFmdW5jdGlvbk5hbWUpIGNvbnRpbnVlOyAvLyBJZiB3ZSByZWFjaCBvbmUgb2YgdGhlc2UsIHdlIGhhdmUgZ29uZSB0b28gZmFyIGFuZCBzaG91bGQgcXVpdFxuXG4gICAgaWYgKGludGVybmFsUmVhY3RGdW5jdGlvbk5hbWVzLmhhcyhmdW5jdGlvbk5hbWUpKSBicmVhazsgLy8gVGhlIGNvbXBvbmVudCBuYW1lIGlzIHRoZSBmaXJzdCBmdW5jdGlvbiBpbiB0aGUgc3RhY2sgdGhhdCBzdGFydHMgd2l0aCBhblxuICAgIC8vIHVwcGVyY2FzZSBsZXR0ZXJcblxuICAgIGlmICgvXltBLVpdLy50ZXN0KGZ1bmN0aW9uTmFtZSkpIHJldHVybiBzYW5pdGl6ZUlkZW50aWZpZXIoZnVuY3Rpb25OYW1lKTtcbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59O1xuXG52YXIgdHlwZVByb3BOYW1lID0gJ19fRU1PVElPTl9UWVBFX1BMRUFTRV9ET19OT1RfVVNFX18nO1xudmFyIGxhYmVsUHJvcE5hbWUgPSAnX19FTU9USU9OX0xBQkVMX1BMRUFTRV9ET19OT1RfVVNFX18nO1xudmFyIGNyZWF0ZUVtb3Rpb25Qcm9wcyA9IGZ1bmN0aW9uIGNyZWF0ZUVtb3Rpb25Qcm9wcyh0eXBlLCBwcm9wcykge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB0eXBlb2YgcHJvcHMuY3NzID09PSAnc3RyaW5nJyAmJiAvLyBjaGVjayBpZiB0aGVyZSBpcyBhIGNzcyBkZWNsYXJhdGlvblxuICBwcm9wcy5jc3MuaW5kZXhPZignOicpICE9PSAtMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIlN0cmluZ3MgYXJlIG5vdCBhbGxvd2VkIGFzIGNzcyBwcm9wIHZhbHVlcywgcGxlYXNlIHdyYXAgaXQgaW4gYSBjc3MgdGVtcGxhdGUgbGl0ZXJhbCBmcm9tICdAZW1vdGlvbi9yZWFjdCcgbGlrZSB0aGlzOiBjc3NgXCIgKyBwcm9wcy5jc3MgKyBcImBcIik7XG4gIH1cblxuICB2YXIgbmV3UHJvcHMgPSB7fTtcblxuICBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHtcbiAgICBpZiAoaGFzT3duLmNhbGwocHJvcHMsIGtleSkpIHtcbiAgICAgIG5ld1Byb3BzW2tleV0gPSBwcm9wc1trZXldO1xuICAgIH1cbiAgfVxuXG4gIG5ld1Byb3BzW3R5cGVQcm9wTmFtZV0gPSB0eXBlOyAvLyBGb3IgcGVyZm9ybWFuY2UsIG9ubHkgY2FsbCBnZXRMYWJlbEZyb21TdGFja1RyYWNlIGluIGRldmVsb3BtZW50IGFuZCB3aGVuXG4gIC8vIHRoZSBsYWJlbCBoYXNuJ3QgYWxyZWFkeSBiZWVuIGNvbXB1dGVkXG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgISFwcm9wcy5jc3MgJiYgKHR5cGVvZiBwcm9wcy5jc3MgIT09ICdvYmplY3QnIHx8IHR5cGVvZiBwcm9wcy5jc3MubmFtZSAhPT0gJ3N0cmluZycgfHwgcHJvcHMuY3NzLm5hbWUuaW5kZXhPZignLScpID09PSAtMSkpIHtcbiAgICB2YXIgbGFiZWwgPSBnZXRMYWJlbEZyb21TdGFja1RyYWNlKG5ldyBFcnJvcigpLnN0YWNrKTtcbiAgICBpZiAobGFiZWwpIG5ld1Byb3BzW2xhYmVsUHJvcE5hbWVdID0gbGFiZWw7XG4gIH1cblxuICByZXR1cm4gbmV3UHJvcHM7XG59O1xuXG52YXIgSW5zZXJ0aW9uID0gZnVuY3Rpb24gSW5zZXJ0aW9uKF9yZWYpIHtcbiAgdmFyIGNhY2hlID0gX3JlZi5jYWNoZSxcbiAgICAgIHNlcmlhbGl6ZWQgPSBfcmVmLnNlcmlhbGl6ZWQsXG4gICAgICBpc1N0cmluZ1RhZyA9IF9yZWYuaXNTdHJpbmdUYWc7XG4gIHJlZ2lzdGVyU3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLCBpc1N0cmluZ1RhZyk7XG4gIHVzZUluc2VydGlvbkVmZmVjdEFsd2F5c1dpdGhTeW5jRmFsbGJhY2soZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBpbnNlcnRTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQsIGlzU3RyaW5nVGFnKTtcbiAgfSk7XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG52YXIgRW1vdGlvbiA9IC8qICNfX1BVUkVfXyAqL3dpdGhFbW90aW9uQ2FjaGUoZnVuY3Rpb24gKHByb3BzLCBjYWNoZSwgcmVmKSB7XG4gIHZhciBjc3NQcm9wID0gcHJvcHMuY3NzOyAvLyBzbyB0aGF0IHVzaW5nIGBjc3NgIGZyb20gYGVtb3Rpb25gIGFuZCBwYXNzaW5nIHRoZSByZXN1bHQgdG8gdGhlIGNzcyBwcm9wIHdvcmtzXG4gIC8vIG5vdCBwYXNzaW5nIHRoZSByZWdpc3RlcmVkIGNhY2hlIHRvIHNlcmlhbGl6ZVN0eWxlcyBiZWNhdXNlIGl0IHdvdWxkXG4gIC8vIG1ha2UgY2VydGFpbiBiYWJlbCBvcHRpbWlzYXRpb25zIG5vdCBwb3NzaWJsZVxuXG4gIGlmICh0eXBlb2YgY3NzUHJvcCA9PT0gJ3N0cmluZycgJiYgY2FjaGUucmVnaXN0ZXJlZFtjc3NQcm9wXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY3NzUHJvcCA9IGNhY2hlLnJlZ2lzdGVyZWRbY3NzUHJvcF07XG4gIH1cblxuICB2YXIgV3JhcHBlZENvbXBvbmVudCA9IHByb3BzW3R5cGVQcm9wTmFtZV07XG4gIHZhciByZWdpc3RlcmVkU3R5bGVzID0gW2Nzc1Byb3BdO1xuICB2YXIgY2xhc3NOYW1lID0gJyc7XG5cbiAgaWYgKHR5cGVvZiBwcm9wcy5jbGFzc05hbWUgPT09ICdzdHJpbmcnKSB7XG4gICAgY2xhc3NOYW1lID0gZ2V0UmVnaXN0ZXJlZFN0eWxlcyhjYWNoZS5yZWdpc3RlcmVkLCByZWdpc3RlcmVkU3R5bGVzLCBwcm9wcy5jbGFzc05hbWUpO1xuICB9IGVsc2UgaWYgKHByb3BzLmNsYXNzTmFtZSAhPSBudWxsKSB7XG4gICAgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lICsgXCIgXCI7XG4gIH1cblxuICB2YXIgc2VyaWFsaXplZCA9IHNlcmlhbGl6ZVN0eWxlcyhyZWdpc3RlcmVkU3R5bGVzLCB1bmRlZmluZWQsIFJlYWN0LnVzZUNvbnRleHQoVGhlbWVDb250ZXh0KSk7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgc2VyaWFsaXplZC5uYW1lLmluZGV4T2YoJy0nKSA9PT0gLTEpIHtcbiAgICB2YXIgbGFiZWxGcm9tU3RhY2sgPSBwcm9wc1tsYWJlbFByb3BOYW1lXTtcblxuICAgIGlmIChsYWJlbEZyb21TdGFjaykge1xuICAgICAgc2VyaWFsaXplZCA9IHNlcmlhbGl6ZVN0eWxlcyhbc2VyaWFsaXplZCwgJ2xhYmVsOicgKyBsYWJlbEZyb21TdGFjayArICc7J10pO1xuICAgIH1cbiAgfVxuXG4gIGNsYXNzTmFtZSArPSBjYWNoZS5rZXkgKyBcIi1cIiArIHNlcmlhbGl6ZWQubmFtZTtcbiAgdmFyIG5ld1Byb3BzID0ge307XG5cbiAgZm9yICh2YXIga2V5IGluIHByb3BzKSB7XG4gICAgaWYgKGhhc093bi5jYWxsKHByb3BzLCBrZXkpICYmIGtleSAhPT0gJ2NzcycgJiYga2V5ICE9PSB0eXBlUHJvcE5hbWUgJiYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicgfHwga2V5ICE9PSBsYWJlbFByb3BOYW1lKSkge1xuICAgICAgbmV3UHJvcHNba2V5XSA9IHByb3BzW2tleV07XG4gICAgfVxuICB9XG5cbiAgbmV3UHJvcHMucmVmID0gcmVmO1xuICBuZXdQcm9wcy5jbGFzc05hbWUgPSBjbGFzc05hbWU7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoSW5zZXJ0aW9uLCB7XG4gICAgY2FjaGU6IGNhY2hlLFxuICAgIHNlcmlhbGl6ZWQ6IHNlcmlhbGl6ZWQsXG4gICAgaXNTdHJpbmdUYWc6IHR5cGVvZiBXcmFwcGVkQ29tcG9uZW50ID09PSAnc3RyaW5nJ1xuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoV3JhcHBlZENvbXBvbmVudCwgbmV3UHJvcHMpKTtcbn0pO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBFbW90aW9uLmRpc3BsYXlOYW1lID0gJ0Vtb3Rpb25Dc3NQcm9wSW50ZXJuYWwnO1xufVxuXG52YXIgRW1vdGlvbiQxID0gRW1vdGlvbjtcblxuZXhwb3J0IHsgQ2FjaGVQcm92aWRlciBhcyBDLCBFbW90aW9uJDEgYXMgRSwgVGhlbWVDb250ZXh0IGFzIFQsIF9fdW5zYWZlX3VzZUVtb3Rpb25DYWNoZSBhcyBfLCBUaGVtZVByb3ZpZGVyIGFzIGEsIHdpdGhUaGVtZSBhcyBiLCBjcmVhdGVFbW90aW9uUHJvcHMgYXMgYywgaGFzT3duIGFzIGgsIGlzQnJvd3NlciBhcyBpLCB1c2VUaGVtZSBhcyB1LCB3aXRoRW1vdGlvbkNhY2hlIGFzIHcgfTtcbiIsICJpbXBvcnQgeyBoIGFzIGhhc093biwgRSBhcyBFbW90aW9uLCBjIGFzIGNyZWF0ZUVtb3Rpb25Qcm9wcywgdyBhcyB3aXRoRW1vdGlvbkNhY2hlLCBUIGFzIFRoZW1lQ29udGV4dCwgaSBhcyBpc0Jyb3dzZXIkMSB9IGZyb20gJy4vZW1vdGlvbi1lbGVtZW50LTQzYzZmZWEwLmJyb3dzZXIuZXNtLmpzJztcbmV4cG9ydCB7IEMgYXMgQ2FjaGVQcm92aWRlciwgVCBhcyBUaGVtZUNvbnRleHQsIGEgYXMgVGhlbWVQcm92aWRlciwgXyBhcyBfX3Vuc2FmZV91c2VFbW90aW9uQ2FjaGUsIHUgYXMgdXNlVGhlbWUsIHcgYXMgd2l0aEVtb3Rpb25DYWNoZSwgYiBhcyB3aXRoVGhlbWUgfSBmcm9tICcuL2Vtb3Rpb24tZWxlbWVudC00M2M2ZmVhMC5icm93c2VyLmVzbS5qcyc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBpbnNlcnRTdHlsZXMsIHJlZ2lzdGVyU3R5bGVzLCBnZXRSZWdpc3RlcmVkU3R5bGVzIH0gZnJvbSAnQGVtb3Rpb24vdXRpbHMnO1xuaW1wb3J0IHsgdXNlSW5zZXJ0aW9uRWZmZWN0V2l0aExheW91dEZhbGxiYWNrLCB1c2VJbnNlcnRpb25FZmZlY3RBbHdheXNXaXRoU3luY0ZhbGxiYWNrIH0gZnJvbSAnQGVtb3Rpb24vdXNlLWluc2VydGlvbi1lZmZlY3Qtd2l0aC1mYWxsYmFja3MnO1xuaW1wb3J0IHsgc2VyaWFsaXplU3R5bGVzIH0gZnJvbSAnQGVtb3Rpb24vc2VyaWFsaXplJztcbmltcG9ydCAnQGVtb3Rpb24vY2FjaGUnO1xuaW1wb3J0ICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2V4dGVuZHMnO1xuaW1wb3J0ICdAZW1vdGlvbi93ZWFrLW1lbW9pemUnO1xuaW1wb3J0ICcuLi9faXNvbGF0ZWQtaG5ycy9kaXN0L2Vtb3Rpb24tcmVhY3QtX2lzb2xhdGVkLWhucnMuYnJvd3Nlci5lc20uanMnO1xuaW1wb3J0ICdob2lzdC1ub24tcmVhY3Qtc3RhdGljcyc7XG5cbnZhciBwa2cgPSB7XG5cdG5hbWU6IFwiQGVtb3Rpb24vcmVhY3RcIixcblx0dmVyc2lvbjogXCIxMS4xMS40XCIsXG5cdG1haW46IFwiZGlzdC9lbW90aW9uLXJlYWN0LmNqcy5qc1wiLFxuXHRtb2R1bGU6IFwiZGlzdC9lbW90aW9uLXJlYWN0LmVzbS5qc1wiLFxuXHRicm93c2VyOiB7XG5cdFx0XCIuL2Rpc3QvZW1vdGlvbi1yZWFjdC5lc20uanNcIjogXCIuL2Rpc3QvZW1vdGlvbi1yZWFjdC5icm93c2VyLmVzbS5qc1wiXG5cdH0sXG5cdGV4cG9ydHM6IHtcblx0XHRcIi5cIjoge1xuXHRcdFx0bW9kdWxlOiB7XG5cdFx0XHRcdHdvcmtlcjogXCIuL2Rpc3QvZW1vdGlvbi1yZWFjdC53b3JrZXIuZXNtLmpzXCIsXG5cdFx0XHRcdGJyb3dzZXI6IFwiLi9kaXN0L2Vtb3Rpb24tcmVhY3QuYnJvd3Nlci5lc20uanNcIixcblx0XHRcdFx0XCJkZWZhdWx0XCI6IFwiLi9kaXN0L2Vtb3Rpb24tcmVhY3QuZXNtLmpzXCJcblx0XHRcdH0sXG5cdFx0XHRcImltcG9ydFwiOiBcIi4vZGlzdC9lbW90aW9uLXJlYWN0LmNqcy5tanNcIixcblx0XHRcdFwiZGVmYXVsdFwiOiBcIi4vZGlzdC9lbW90aW9uLXJlYWN0LmNqcy5qc1wiXG5cdFx0fSxcblx0XHRcIi4vanN4LXJ1bnRpbWVcIjoge1xuXHRcdFx0bW9kdWxlOiB7XG5cdFx0XHRcdHdvcmtlcjogXCIuL2pzeC1ydW50aW1lL2Rpc3QvZW1vdGlvbi1yZWFjdC1qc3gtcnVudGltZS53b3JrZXIuZXNtLmpzXCIsXG5cdFx0XHRcdGJyb3dzZXI6IFwiLi9qc3gtcnVudGltZS9kaXN0L2Vtb3Rpb24tcmVhY3QtanN4LXJ1bnRpbWUuYnJvd3Nlci5lc20uanNcIixcblx0XHRcdFx0XCJkZWZhdWx0XCI6IFwiLi9qc3gtcnVudGltZS9kaXN0L2Vtb3Rpb24tcmVhY3QtanN4LXJ1bnRpbWUuZXNtLmpzXCJcblx0XHRcdH0sXG5cdFx0XHRcImltcG9ydFwiOiBcIi4vanN4LXJ1bnRpbWUvZGlzdC9lbW90aW9uLXJlYWN0LWpzeC1ydW50aW1lLmNqcy5tanNcIixcblx0XHRcdFwiZGVmYXVsdFwiOiBcIi4vanN4LXJ1bnRpbWUvZGlzdC9lbW90aW9uLXJlYWN0LWpzeC1ydW50aW1lLmNqcy5qc1wiXG5cdFx0fSxcblx0XHRcIi4vX2lzb2xhdGVkLWhucnNcIjoge1xuXHRcdFx0bW9kdWxlOiB7XG5cdFx0XHRcdHdvcmtlcjogXCIuL19pc29sYXRlZC1obnJzL2Rpc3QvZW1vdGlvbi1yZWFjdC1faXNvbGF0ZWQtaG5ycy53b3JrZXIuZXNtLmpzXCIsXG5cdFx0XHRcdGJyb3dzZXI6IFwiLi9faXNvbGF0ZWQtaG5ycy9kaXN0L2Vtb3Rpb24tcmVhY3QtX2lzb2xhdGVkLWhucnMuYnJvd3Nlci5lc20uanNcIixcblx0XHRcdFx0XCJkZWZhdWx0XCI6IFwiLi9faXNvbGF0ZWQtaG5ycy9kaXN0L2Vtb3Rpb24tcmVhY3QtX2lzb2xhdGVkLWhucnMuZXNtLmpzXCJcblx0XHRcdH0sXG5cdFx0XHRcImltcG9ydFwiOiBcIi4vX2lzb2xhdGVkLWhucnMvZGlzdC9lbW90aW9uLXJlYWN0LV9pc29sYXRlZC1obnJzLmNqcy5tanNcIixcblx0XHRcdFwiZGVmYXVsdFwiOiBcIi4vX2lzb2xhdGVkLWhucnMvZGlzdC9lbW90aW9uLXJlYWN0LV9pc29sYXRlZC1obnJzLmNqcy5qc1wiXG5cdFx0fSxcblx0XHRcIi4vanN4LWRldi1ydW50aW1lXCI6IHtcblx0XHRcdG1vZHVsZToge1xuXHRcdFx0XHR3b3JrZXI6IFwiLi9qc3gtZGV2LXJ1bnRpbWUvZGlzdC9lbW90aW9uLXJlYWN0LWpzeC1kZXYtcnVudGltZS53b3JrZXIuZXNtLmpzXCIsXG5cdFx0XHRcdGJyb3dzZXI6IFwiLi9qc3gtZGV2LXJ1bnRpbWUvZGlzdC9lbW90aW9uLXJlYWN0LWpzeC1kZXYtcnVudGltZS5icm93c2VyLmVzbS5qc1wiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogXCIuL2pzeC1kZXYtcnVudGltZS9kaXN0L2Vtb3Rpb24tcmVhY3QtanN4LWRldi1ydW50aW1lLmVzbS5qc1wiXG5cdFx0XHR9LFxuXHRcdFx0XCJpbXBvcnRcIjogXCIuL2pzeC1kZXYtcnVudGltZS9kaXN0L2Vtb3Rpb24tcmVhY3QtanN4LWRldi1ydW50aW1lLmNqcy5tanNcIixcblx0XHRcdFwiZGVmYXVsdFwiOiBcIi4vanN4LWRldi1ydW50aW1lL2Rpc3QvZW1vdGlvbi1yZWFjdC1qc3gtZGV2LXJ1bnRpbWUuY2pzLmpzXCJcblx0XHR9LFxuXHRcdFwiLi9wYWNrYWdlLmpzb25cIjogXCIuL3BhY2thZ2UuanNvblwiLFxuXHRcdFwiLi90eXBlcy9jc3MtcHJvcFwiOiBcIi4vdHlwZXMvY3NzLXByb3AuZC50c1wiLFxuXHRcdFwiLi9tYWNyb1wiOiB7XG5cdFx0XHR0eXBlczoge1xuXHRcdFx0XHRcImltcG9ydFwiOiBcIi4vbWFjcm8uZC5tdHNcIixcblx0XHRcdFx0XCJkZWZhdWx0XCI6IFwiLi9tYWNyby5kLnRzXCJcblx0XHRcdH0sXG5cdFx0XHRcImRlZmF1bHRcIjogXCIuL21hY3JvLmpzXCJcblx0XHR9XG5cdH0sXG5cdHR5cGVzOiBcInR5cGVzL2luZGV4LmQudHNcIixcblx0ZmlsZXM6IFtcblx0XHRcInNyY1wiLFxuXHRcdFwiZGlzdFwiLFxuXHRcdFwianN4LXJ1bnRpbWVcIixcblx0XHRcImpzeC1kZXYtcnVudGltZVwiLFxuXHRcdFwiX2lzb2xhdGVkLWhucnNcIixcblx0XHRcInR5cGVzLyouZC50c1wiLFxuXHRcdFwibWFjcm8uKlwiXG5cdF0sXG5cdHNpZGVFZmZlY3RzOiBmYWxzZSxcblx0YXV0aG9yOiBcIkVtb3Rpb24gQ29udHJpYnV0b3JzXCIsXG5cdGxpY2Vuc2U6IFwiTUlUXCIsXG5cdHNjcmlwdHM6IHtcblx0XHRcInRlc3Q6dHlwZXNjcmlwdFwiOiBcImR0c2xpbnQgdHlwZXNcIlxuXHR9LFxuXHRkZXBlbmRlbmNpZXM6IHtcblx0XHRcIkBiYWJlbC9ydW50aW1lXCI6IFwiXjcuMTguM1wiLFxuXHRcdFwiQGVtb3Rpb24vYmFiZWwtcGx1Z2luXCI6IFwiXjExLjExLjBcIixcblx0XHRcIkBlbW90aW9uL2NhY2hlXCI6IFwiXjExLjExLjBcIixcblx0XHRcIkBlbW90aW9uL3NlcmlhbGl6ZVwiOiBcIl4xLjEuM1wiLFxuXHRcdFwiQGVtb3Rpb24vdXNlLWluc2VydGlvbi1lZmZlY3Qtd2l0aC1mYWxsYmFja3NcIjogXCJeMS4wLjFcIixcblx0XHRcIkBlbW90aW9uL3V0aWxzXCI6IFwiXjEuMi4xXCIsXG5cdFx0XCJAZW1vdGlvbi93ZWFrLW1lbW9pemVcIjogXCJeMC4zLjFcIixcblx0XHRcImhvaXN0LW5vbi1yZWFjdC1zdGF0aWNzXCI6IFwiXjMuMy4xXCJcblx0fSxcblx0cGVlckRlcGVuZGVuY2llczoge1xuXHRcdHJlYWN0OiBcIj49MTYuOC4wXCJcblx0fSxcblx0cGVlckRlcGVuZGVuY2llc01ldGE6IHtcblx0XHRcIkB0eXBlcy9yZWFjdFwiOiB7XG5cdFx0XHRvcHRpb25hbDogdHJ1ZVxuXHRcdH1cblx0fSxcblx0ZGV2RGVwZW5kZW5jaWVzOiB7XG5cdFx0XCJAZGVmaW5pdGVseXR5cGVkL2R0c2xpbnRcIjogXCIwLjAuMTEyXCIsXG5cdFx0XCJAZW1vdGlvbi9jc3NcIjogXCIxMS4xMS4yXCIsXG5cdFx0XCJAZW1vdGlvbi9jc3MtcHJldHRpZmllclwiOiBcIjEuMS4zXCIsXG5cdFx0XCJAZW1vdGlvbi9zZXJ2ZXJcIjogXCIxMS4xMS4wXCIsXG5cdFx0XCJAZW1vdGlvbi9zdHlsZWRcIjogXCIxMS4xMS4wXCIsXG5cdFx0XCJodG1sLXRhZy1uYW1lc1wiOiBcIl4xLjEuMlwiLFxuXHRcdHJlYWN0OiBcIjE2LjE0LjBcIixcblx0XHRcInN2Zy10YWctbmFtZXNcIjogXCJeMS4xLjFcIixcblx0XHR0eXBlc2NyaXB0OiBcIl40LjUuNVwiXG5cdH0sXG5cdHJlcG9zaXRvcnk6IFwiaHR0cHM6Ly9naXRodWIuY29tL2Vtb3Rpb24tanMvZW1vdGlvbi90cmVlL21haW4vcGFja2FnZXMvcmVhY3RcIixcblx0cHVibGlzaENvbmZpZzoge1xuXHRcdGFjY2VzczogXCJwdWJsaWNcIlxuXHR9LFxuXHRcInVtZDptYWluXCI6IFwiZGlzdC9lbW90aW9uLXJlYWN0LnVtZC5taW4uanNcIixcblx0cHJlY29uc3RydWN0OiB7XG5cdFx0ZW50cnlwb2ludHM6IFtcblx0XHRcdFwiLi9pbmRleC5qc1wiLFxuXHRcdFx0XCIuL2pzeC1ydW50aW1lLmpzXCIsXG5cdFx0XHRcIi4vanN4LWRldi1ydW50aW1lLmpzXCIsXG5cdFx0XHRcIi4vX2lzb2xhdGVkLWhucnMuanNcIlxuXHRcdF0sXG5cdFx0dW1kTmFtZTogXCJlbW90aW9uUmVhY3RcIixcblx0XHRleHBvcnRzOiB7XG5cdFx0XHRlbnZDb25kaXRpb25zOiBbXG5cdFx0XHRcdFwiYnJvd3NlclwiLFxuXHRcdFx0XHRcIndvcmtlclwiXG5cdFx0XHRdLFxuXHRcdFx0ZXh0cmE6IHtcblx0XHRcdFx0XCIuL3R5cGVzL2Nzcy1wcm9wXCI6IFwiLi90eXBlcy9jc3MtcHJvcC5kLnRzXCIsXG5cdFx0XHRcdFwiLi9tYWNyb1wiOiB7XG5cdFx0XHRcdFx0dHlwZXM6IHtcblx0XHRcdFx0XHRcdFwiaW1wb3J0XCI6IFwiLi9tYWNyby5kLm10c1wiLFxuXHRcdFx0XHRcdFx0XCJkZWZhdWx0XCI6IFwiLi9tYWNyby5kLnRzXCJcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFwiZGVmYXVsdFwiOiBcIi4vbWFjcm8uanNcIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG52YXIganN4ID0gZnVuY3Rpb24ganN4KHR5cGUsIHByb3BzKSB7XG4gIHZhciBhcmdzID0gYXJndW1lbnRzO1xuXG4gIGlmIChwcm9wcyA9PSBudWxsIHx8ICFoYXNPd24uY2FsbChwcm9wcywgJ2NzcycpKSB7XG4gICAgLy8gJEZsb3dGaXhNZVxuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50LmFwcGx5KHVuZGVmaW5lZCwgYXJncyk7XG4gIH1cblxuICB2YXIgYXJnc0xlbmd0aCA9IGFyZ3MubGVuZ3RoO1xuICB2YXIgY3JlYXRlRWxlbWVudEFyZ0FycmF5ID0gbmV3IEFycmF5KGFyZ3NMZW5ndGgpO1xuICBjcmVhdGVFbGVtZW50QXJnQXJyYXlbMF0gPSBFbW90aW9uO1xuICBjcmVhdGVFbGVtZW50QXJnQXJyYXlbMV0gPSBjcmVhdGVFbW90aW9uUHJvcHModHlwZSwgcHJvcHMpO1xuXG4gIGZvciAodmFyIGkgPSAyOyBpIDwgYXJnc0xlbmd0aDsgaSsrKSB7XG4gICAgY3JlYXRlRWxlbWVudEFyZ0FycmF5W2ldID0gYXJnc1tpXTtcbiAgfSAvLyAkRmxvd0ZpeE1lXG5cblxuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudC5hcHBseShudWxsLCBjcmVhdGVFbGVtZW50QXJnQXJyYXkpO1xufTtcblxudmFyIHdhcm5lZEFib3V0Q3NzUHJvcEZvckdsb2JhbCA9IGZhbHNlOyAvLyBtYWludGFpbiBwbGFjZSBvdmVyIHJlcmVuZGVycy5cbi8vIGluaXRpYWwgcmVuZGVyIGZyb20gYnJvd3NlciwgaW5zZXJ0QmVmb3JlIGNvbnRleHQuc2hlZXQudGFnc1swXSBvciBpZiBhIHN0eWxlIGhhc24ndCBiZWVuIGluc2VydGVkIHRoZXJlIHlldCwgYXBwZW5kQ2hpbGRcbi8vIGluaXRpYWwgY2xpZW50LXNpZGUgcmVuZGVyIGZyb20gU1NSLCB1c2UgcGxhY2Ugb2YgaHlkcmF0aW5nIHRhZ1xuXG52YXIgR2xvYmFsID0gLyogI19fUFVSRV9fICovd2l0aEVtb3Rpb25DYWNoZShmdW5jdGlvbiAocHJvcHMsIGNhY2hlKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICF3YXJuZWRBYm91dENzc1Byb3BGb3JHbG9iYWwgJiYgKCAvLyBjaGVjayBmb3IgY2xhc3NOYW1lIGFzIHdlbGwgc2luY2UgdGhlIHVzZXIgaXNcbiAgLy8gcHJvYmFibHkgdXNpbmcgdGhlIGN1c3RvbSBjcmVhdGVFbGVtZW50IHdoaWNoXG4gIC8vIG1lYW5zIGl0IHdpbGwgYmUgdHVybmVkIGludG8gYSBjbGFzc05hbWUgcHJvcFxuICAvLyAkRmxvd0ZpeE1lIEkgZG9uJ3QgcmVhbGx5IHdhbnQgdG8gYWRkIGl0IHRvIHRoZSB0eXBlIHNpbmNlIGl0IHNob3VsZG4ndCBiZSB1c2VkXG4gIHByb3BzLmNsYXNzTmFtZSB8fCBwcm9wcy5jc3MpKSB7XG4gICAgY29uc29sZS5lcnJvcihcIkl0IGxvb2tzIGxpa2UgeW91J3JlIHVzaW5nIHRoZSBjc3MgcHJvcCBvbiBHbG9iYWwsIGRpZCB5b3UgbWVhbiB0byB1c2UgdGhlIHN0eWxlcyBwcm9wIGluc3RlYWQ/XCIpO1xuICAgIHdhcm5lZEFib3V0Q3NzUHJvcEZvckdsb2JhbCA9IHRydWU7XG4gIH1cblxuICB2YXIgc3R5bGVzID0gcHJvcHMuc3R5bGVzO1xuICB2YXIgc2VyaWFsaXplZCA9IHNlcmlhbGl6ZVN0eWxlcyhbc3R5bGVzXSwgdW5kZWZpbmVkLCBSZWFjdC51c2VDb250ZXh0KFRoZW1lQ29udGV4dCkpO1xuXG4gIGlmICghaXNCcm93c2VyJDEpIHtcbiAgICB2YXIgX3JlZjtcblxuICAgIHZhciBzZXJpYWxpemVkTmFtZXMgPSBzZXJpYWxpemVkLm5hbWU7XG4gICAgdmFyIHNlcmlhbGl6ZWRTdHlsZXMgPSBzZXJpYWxpemVkLnN0eWxlcztcbiAgICB2YXIgbmV4dCA9IHNlcmlhbGl6ZWQubmV4dDtcblxuICAgIHdoaWxlIChuZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHNlcmlhbGl6ZWROYW1lcyArPSAnICcgKyBuZXh0Lm5hbWU7XG4gICAgICBzZXJpYWxpemVkU3R5bGVzICs9IG5leHQuc3R5bGVzO1xuICAgICAgbmV4dCA9IG5leHQubmV4dDtcbiAgICB9XG5cbiAgICB2YXIgc2hvdWxkQ2FjaGUgPSBjYWNoZS5jb21wYXQgPT09IHRydWU7XG4gICAgdmFyIHJ1bGVzID0gY2FjaGUuaW5zZXJ0KFwiXCIsIHtcbiAgICAgIG5hbWU6IHNlcmlhbGl6ZWROYW1lcyxcbiAgICAgIHN0eWxlczogc2VyaWFsaXplZFN0eWxlc1xuICAgIH0sIGNhY2hlLnNoZWV0LCBzaG91bGRDYWNoZSk7XG5cbiAgICBpZiAoc2hvdWxkQ2FjaGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN0eWxlXCIsIChfcmVmID0ge30sIF9yZWZbXCJkYXRhLWVtb3Rpb25cIl0gPSBjYWNoZS5rZXkgKyBcIi1nbG9iYWwgXCIgKyBzZXJpYWxpemVkTmFtZXMsIF9yZWYuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgPSB7XG4gICAgICBfX2h0bWw6IHJ1bGVzXG4gICAgfSwgX3JlZi5ub25jZSA9IGNhY2hlLnNoZWV0Lm5vbmNlLCBfcmVmKSk7XG4gIH0gLy8geWVzLCBpIGtub3cgdGhlc2UgaG9va3MgYXJlIHVzZWQgY29uZGl0aW9uYWxseVxuICAvLyBidXQgaXQgaXMgYmFzZWQgb24gYSBjb25zdGFudCB0aGF0IHdpbGwgbmV2ZXIgY2hhbmdlIGF0IHJ1bnRpbWVcbiAgLy8gaXQncyBlZmZlY3RpdmVseSBsaWtlIGhhdmluZyB0d28gaW1wbGVtZW50YXRpb25zIGFuZCBzd2l0Y2hpbmcgdGhlbSBvdXRcbiAgLy8gc28gaXQncyBub3QgYWN0dWFsbHkgYnJlYWtpbmcgYW55dGhpbmdcblxuXG4gIHZhciBzaGVldFJlZiA9IFJlYWN0LnVzZVJlZigpO1xuICB1c2VJbnNlcnRpb25FZmZlY3RXaXRoTGF5b3V0RmFsbGJhY2soZnVuY3Rpb24gKCkge1xuICAgIHZhciBrZXkgPSBjYWNoZS5rZXkgKyBcIi1nbG9iYWxcIjsgLy8gdXNlIGNhc2Ugb2YgaHR0cHM6Ly9naXRodWIuY29tL2Vtb3Rpb24tanMvZW1vdGlvbi9pc3N1ZXMvMjY3NVxuXG4gICAgdmFyIHNoZWV0ID0gbmV3IGNhY2hlLnNoZWV0LmNvbnN0cnVjdG9yKHtcbiAgICAgIGtleToga2V5LFxuICAgICAgbm9uY2U6IGNhY2hlLnNoZWV0Lm5vbmNlLFxuICAgICAgY29udGFpbmVyOiBjYWNoZS5zaGVldC5jb250YWluZXIsXG4gICAgICBzcGVlZHk6IGNhY2hlLnNoZWV0LmlzU3BlZWR5XG4gICAgfSk7XG4gICAgdmFyIHJlaHlkcmF0aW5nID0gZmFsc2U7IC8vICRGbG93Rml4TWVcblxuICAgIHZhciBub2RlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcInN0eWxlW2RhdGEtZW1vdGlvbj1cXFwiXCIgKyBrZXkgKyBcIiBcIiArIHNlcmlhbGl6ZWQubmFtZSArIFwiXFxcIl1cIik7XG5cbiAgICBpZiAoY2FjaGUuc2hlZXQudGFncy5sZW5ndGgpIHtcbiAgICAgIHNoZWV0LmJlZm9yZSA9IGNhY2hlLnNoZWV0LnRhZ3NbMF07XG4gICAgfVxuXG4gICAgaWYgKG5vZGUgIT09IG51bGwpIHtcbiAgICAgIHJlaHlkcmF0aW5nID0gdHJ1ZTsgLy8gY2xlYXIgdGhlIGhhc2ggc28gdGhpcyBub2RlIHdvbid0IGJlIHJlY29nbml6YWJsZSBhcyByZWh5ZHJhdGFibGUgYnkgb3RoZXIgPEdsb2JhbC8+c1xuXG4gICAgICBub2RlLnNldEF0dHJpYnV0ZSgnZGF0YS1lbW90aW9uJywga2V5KTtcbiAgICAgIHNoZWV0Lmh5ZHJhdGUoW25vZGVdKTtcbiAgICB9XG5cbiAgICBzaGVldFJlZi5jdXJyZW50ID0gW3NoZWV0LCByZWh5ZHJhdGluZ107XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNoZWV0LmZsdXNoKCk7XG4gICAgfTtcbiAgfSwgW2NhY2hlXSk7XG4gIHVzZUluc2VydGlvbkVmZmVjdFdpdGhMYXlvdXRGYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNoZWV0UmVmQ3VycmVudCA9IHNoZWV0UmVmLmN1cnJlbnQ7XG4gICAgdmFyIHNoZWV0ID0gc2hlZXRSZWZDdXJyZW50WzBdLFxuICAgICAgICByZWh5ZHJhdGluZyA9IHNoZWV0UmVmQ3VycmVudFsxXTtcblxuICAgIGlmIChyZWh5ZHJhdGluZykge1xuICAgICAgc2hlZXRSZWZDdXJyZW50WzFdID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHNlcmlhbGl6ZWQubmV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBpbnNlcnQga2V5ZnJhbWVzXG4gICAgICBpbnNlcnRTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQubmV4dCwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgaWYgKHNoZWV0LnRhZ3MubGVuZ3RoKSB7XG4gICAgICAvLyBpZiB0aGlzIGRvZXNuJ3QgZXhpc3QgdGhlbiBpdCB3aWxsIGJlIG51bGwgc28gdGhlIHN0eWxlIGVsZW1lbnQgd2lsbCBiZSBhcHBlbmRlZFxuICAgICAgdmFyIGVsZW1lbnQgPSBzaGVldC50YWdzW3NoZWV0LnRhZ3MubGVuZ3RoIC0gMV0ubmV4dEVsZW1lbnRTaWJsaW5nO1xuICAgICAgc2hlZXQuYmVmb3JlID0gZWxlbWVudDtcbiAgICAgIHNoZWV0LmZsdXNoKCk7XG4gICAgfVxuXG4gICAgY2FjaGUuaW5zZXJ0KFwiXCIsIHNlcmlhbGl6ZWQsIHNoZWV0LCBmYWxzZSk7XG4gIH0sIFtjYWNoZSwgc2VyaWFsaXplZC5uYW1lXSk7XG4gIHJldHVybiBudWxsO1xufSk7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIEdsb2JhbC5kaXNwbGF5TmFtZSA9ICdFbW90aW9uR2xvYmFsJztcbn1cblxuZnVuY3Rpb24gY3NzKCkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgcmV0dXJuIHNlcmlhbGl6ZVN0eWxlcyhhcmdzKTtcbn1cblxudmFyIGtleWZyYW1lcyA9IGZ1bmN0aW9uIGtleWZyYW1lcygpIHtcbiAgdmFyIGluc2VydGFibGUgPSBjc3MuYXBwbHkodm9pZCAwLCBhcmd1bWVudHMpO1xuICB2YXIgbmFtZSA9IFwiYW5pbWF0aW9uLVwiICsgaW5zZXJ0YWJsZS5uYW1lOyAvLyAkRmxvd0ZpeE1lXG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBuYW1lLFxuICAgIHN0eWxlczogXCJAa2V5ZnJhbWVzIFwiICsgbmFtZSArIFwie1wiICsgaW5zZXJ0YWJsZS5zdHlsZXMgKyBcIn1cIixcbiAgICBhbmltOiAxLFxuICAgIHRvU3RyaW5nOiBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICAgIHJldHVybiBcIl9FTU9fXCIgKyB0aGlzLm5hbWUgKyBcIl9cIiArIHRoaXMuc3R5bGVzICsgXCJfRU1PX1wiO1xuICAgIH1cbiAgfTtcbn07XG5cbnZhciBjbGFzc25hbWVzID0gZnVuY3Rpb24gY2xhc3NuYW1lcyhhcmdzKSB7XG4gIHZhciBsZW4gPSBhcmdzLmxlbmd0aDtcbiAgdmFyIGkgPSAwO1xuICB2YXIgY2xzID0gJyc7XG5cbiAgZm9yICg7IGkgPCBsZW47IGkrKykge1xuICAgIHZhciBhcmcgPSBhcmdzW2ldO1xuICAgIGlmIChhcmcgPT0gbnVsbCkgY29udGludWU7XG4gICAgdmFyIHRvQWRkID0gdm9pZCAwO1xuXG4gICAgc3dpdGNoICh0eXBlb2YgYXJnKSB7XG4gICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG4gICAgICAgICAgICB0b0FkZCA9IGNsYXNzbmFtZXMoYXJnKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgYXJnLnN0eWxlcyAhPT0gdW5kZWZpbmVkICYmIGFyZy5uYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignWW91IGhhdmUgcGFzc2VkIHN0eWxlcyBjcmVhdGVkIHdpdGggYGNzc2AgZnJvbSBgQGVtb3Rpb24vcmVhY3RgIHBhY2thZ2UgdG8gdGhlIGBjeGAuXFxuJyArICdgY3hgIGlzIG1lYW50IHRvIGNvbXBvc2UgY2xhc3MgbmFtZXMgKHN0cmluZ3MpIHNvIHlvdSBzaG91bGQgY29udmVydCB0aG9zZSBzdHlsZXMgdG8gYSBjbGFzcyBuYW1lIGJ5IHBhc3NpbmcgdGhlbSB0byB0aGUgYGNzc2AgcmVjZWl2ZWQgZnJvbSA8Q2xhc3NOYW1lcy8+IGNvbXBvbmVudC4nKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdG9BZGQgPSAnJztcblxuICAgICAgICAgICAgZm9yICh2YXIgayBpbiBhcmcpIHtcbiAgICAgICAgICAgICAgaWYgKGFyZ1trXSAmJiBrKSB7XG4gICAgICAgICAgICAgICAgdG9BZGQgJiYgKHRvQWRkICs9ICcgJyk7XG4gICAgICAgICAgICAgICAgdG9BZGQgKz0gaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHtcbiAgICAgICAgICB0b0FkZCA9IGFyZztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0b0FkZCkge1xuICAgICAgY2xzICYmIChjbHMgKz0gJyAnKTtcbiAgICAgIGNscyArPSB0b0FkZDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY2xzO1xufTtcblxuZnVuY3Rpb24gbWVyZ2UocmVnaXN0ZXJlZCwgY3NzLCBjbGFzc05hbWUpIHtcbiAgdmFyIHJlZ2lzdGVyZWRTdHlsZXMgPSBbXTtcbiAgdmFyIHJhd0NsYXNzTmFtZSA9IGdldFJlZ2lzdGVyZWRTdHlsZXMocmVnaXN0ZXJlZCwgcmVnaXN0ZXJlZFN0eWxlcywgY2xhc3NOYW1lKTtcblxuICBpZiAocmVnaXN0ZXJlZFN0eWxlcy5sZW5ndGggPCAyKSB7XG4gICAgcmV0dXJuIGNsYXNzTmFtZTtcbiAgfVxuXG4gIHJldHVybiByYXdDbGFzc05hbWUgKyBjc3MocmVnaXN0ZXJlZFN0eWxlcyk7XG59XG5cbnZhciBJbnNlcnRpb24gPSBmdW5jdGlvbiBJbnNlcnRpb24oX3JlZikge1xuICB2YXIgY2FjaGUgPSBfcmVmLmNhY2hlLFxuICAgICAgc2VyaWFsaXplZEFyciA9IF9yZWYuc2VyaWFsaXplZEFycjtcbiAgdXNlSW5zZXJ0aW9uRWZmZWN0QWx3YXlzV2l0aFN5bmNGYWxsYmFjayhmdW5jdGlvbiAoKSB7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlcmlhbGl6ZWRBcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgIGluc2VydFN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZEFycltpXSwgZmFsc2UpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG52YXIgQ2xhc3NOYW1lcyA9IC8qICNfX1BVUkVfXyAqL3dpdGhFbW90aW9uQ2FjaGUoZnVuY3Rpb24gKHByb3BzLCBjYWNoZSkge1xuICB2YXIgaGFzUmVuZGVyZWQgPSBmYWxzZTtcbiAgdmFyIHNlcmlhbGl6ZWRBcnIgPSBbXTtcblxuICB2YXIgY3NzID0gZnVuY3Rpb24gY3NzKCkge1xuICAgIGlmIChoYXNSZW5kZXJlZCAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NzcyBjYW4gb25seSBiZSB1c2VkIGR1cmluZyByZW5kZXInKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgdmFyIHNlcmlhbGl6ZWQgPSBzZXJpYWxpemVTdHlsZXMoYXJncywgY2FjaGUucmVnaXN0ZXJlZCk7XG4gICAgc2VyaWFsaXplZEFyci5wdXNoKHNlcmlhbGl6ZWQpOyAvLyByZWdpc3RyYXRpb24gaGFzIHRvIGhhcHBlbiBoZXJlIGFzIHRoZSByZXN1bHQgb2YgdGhpcyBtaWdodCBnZXQgY29uc3VtZWQgYnkgYGN4YFxuXG4gICAgcmVnaXN0ZXJTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQsIGZhbHNlKTtcbiAgICByZXR1cm4gY2FjaGUua2V5ICsgXCItXCIgKyBzZXJpYWxpemVkLm5hbWU7XG4gIH07XG5cbiAgdmFyIGN4ID0gZnVuY3Rpb24gY3goKSB7XG4gICAgaWYgKGhhc1JlbmRlcmVkICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY3ggY2FuIG9ubHkgYmUgdXNlZCBkdXJpbmcgcmVuZGVyJyk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4yKSwgX2tleTIgPSAwOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICBhcmdzW19rZXkyXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lcmdlKGNhY2hlLnJlZ2lzdGVyZWQsIGNzcywgY2xhc3NuYW1lcyhhcmdzKSk7XG4gIH07XG5cbiAgdmFyIGNvbnRlbnQgPSB7XG4gICAgY3NzOiBjc3MsXG4gICAgY3g6IGN4LFxuICAgIHRoZW1lOiBSZWFjdC51c2VDb250ZXh0KFRoZW1lQ29udGV4dClcbiAgfTtcbiAgdmFyIGVsZSA9IHByb3BzLmNoaWxkcmVuKGNvbnRlbnQpO1xuICBoYXNSZW5kZXJlZCA9IHRydWU7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoSW5zZXJ0aW9uLCB7XG4gICAgY2FjaGU6IGNhY2hlLFxuICAgIHNlcmlhbGl6ZWRBcnI6IHNlcmlhbGl6ZWRBcnJcbiAgfSksIGVsZSk7XG59KTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgQ2xhc3NOYW1lcy5kaXNwbGF5TmFtZSA9ICdFbW90aW9uQ2xhc3NOYW1lcyc7XG59XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBpc0Jyb3dzZXIgPSBcIm9iamVjdFwiICE9PSAndW5kZWZpbmVkJzsgLy8gIzE3MjcsICMyOTA1IGZvciBzb21lIHJlYXNvbiBKZXN0IGFuZCBWaXRlc3QgZXZhbHVhdGUgbW9kdWxlcyB0d2ljZSBpZiBzb21lIGNvbnN1bWluZyBtb2R1bGUgZ2V0cyBtb2NrZWRcblxuICB2YXIgaXNUZXN0RW52ID0gdHlwZW9mIGplc3QgIT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiB2aSAhPT0gJ3VuZGVmaW5lZCc7XG5cbiAgaWYgKGlzQnJvd3NlciAmJiAhaXNUZXN0RW52KSB7XG4gICAgLy8gZ2xvYmFsVGhpcyBoYXMgd2lkZSBicm93c2VyIHN1cHBvcnQgLSBodHRwczovL2Nhbml1c2UuY29tLz9zZWFyY2g9Z2xvYmFsVGhpcywgTm9kZS5qcyAxMiBhbmQgbGF0ZXJcbiAgICB2YXIgZ2xvYmFsQ29udGV4dCA9IC8vICRGbG93SWdub3JlXG4gICAgdHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsVGhpcyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG4gICAgOiBpc0Jyb3dzZXIgPyB3aW5kb3cgOiBnbG9iYWw7XG4gICAgdmFyIGdsb2JhbEtleSA9IFwiX19FTU9USU9OX1JFQUNUX1wiICsgcGtnLnZlcnNpb24uc3BsaXQoJy4nKVswXSArIFwiX19cIjtcblxuICAgIGlmIChnbG9iYWxDb250ZXh0W2dsb2JhbEtleV0pIHtcbiAgICAgIGNvbnNvbGUud2FybignWW91IGFyZSBsb2FkaW5nIEBlbW90aW9uL3JlYWN0IHdoZW4gaXQgaXMgYWxyZWFkeSBsb2FkZWQuIFJ1bm5pbmcgJyArICdtdWx0aXBsZSBpbnN0YW5jZXMgbWF5IGNhdXNlIHByb2JsZW1zLiBUaGlzIGNhbiBoYXBwZW4gaWYgbXVsdGlwbGUgJyArICd2ZXJzaW9ucyBhcmUgdXNlZCwgb3IgaWYgbXVsdGlwbGUgYnVpbGRzIG9mIHRoZSBzYW1lIHZlcnNpb24gYXJlICcgKyAndXNlZC4nKTtcbiAgICB9XG5cbiAgICBnbG9iYWxDb250ZXh0W2dsb2JhbEtleV0gPSB0cnVlO1xuICB9XG59XG5cbmV4cG9ydCB7IENsYXNzTmFtZXMsIEdsb2JhbCwganN4IGFzIGNyZWF0ZUVsZW1lbnQsIGNzcywganN4LCBrZXlmcmFtZXMgfTtcbiIsICJmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikge1xuICByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDoge1xuICAgIFwiZGVmYXVsdFwiOiBvYmpcbiAgfTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdCwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsICJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IGZvcm1hdE11aUVycm9yTWVzc2FnZTtcbi8qKlxuICogV0FSTklORzogRG9uJ3QgaW1wb3J0IHRoaXMgZGlyZWN0bHkuXG4gKiBVc2UgYE11aUVycm9yYCBmcm9tIGBAbXVpL2ludGVybmFsLWJhYmVsLW1hY3Jvcy9NdWlFcnJvci5tYWNyb2AgaW5zdGVhZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2RlXG4gKi9cbmZ1bmN0aW9uIGZvcm1hdE11aUVycm9yTWVzc2FnZShjb2RlKSB7XG4gIC8vIEFwcGx5IGJhYmVsLXBsdWdpbi10cmFuc2Zvcm0tdGVtcGxhdGUtbGl0ZXJhbHMgaW4gbG9vc2UgbW9kZVxuICAvLyBsb29zZSBtb2RlIGlzIHNhZmUgaWYgd2UncmUgY29uY2F0ZW5hdGluZyBwcmltaXRpdmVzXG4gIC8vIHNlZSBodHRwczovL2JhYmVsanMuaW8vZG9jcy9lbi9iYWJlbC1wbHVnaW4tdHJhbnNmb3JtLXRlbXBsYXRlLWxpdGVyYWxzI2xvb3NlXG4gIC8qIGVzbGludC1kaXNhYmxlIHByZWZlci10ZW1wbGF0ZSAqL1xuICBsZXQgdXJsID0gJ2h0dHBzOi8vbXVpLmNvbS9wcm9kdWN0aW9uLWVycm9yLz9jb2RlPScgKyBjb2RlO1xuICBmb3IgKGxldCBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIC8vIHJlc3QgcGFyYW1zIG92ZXItdHJhbnNwaWxlIGZvciB0aGlzIGNhc2VcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXJlc3QtcGFyYW1zXG4gICAgdXJsICs9ICcmYXJnc1tdPScgKyBlbmNvZGVVUklDb21wb25lbnQoYXJndW1lbnRzW2ldKTtcbiAgfVxuICByZXR1cm4gJ01pbmlmaWVkIE1VSSBlcnJvciAjJyArIGNvZGUgKyAnOyB2aXNpdCAnICsgdXJsICsgJyBmb3IgdGhlIGZ1bGwgbWVzc2FnZS4nO1xuICAvKiBlc2xpbnQtZW5hYmxlIHByZWZlci10ZW1wbGF0ZSAqL1xufSIsICJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVmYXVsdFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfZm9ybWF0TXVpRXJyb3JNZXNzYWdlLmRlZmF1bHQ7XG4gIH1cbn0pO1xudmFyIF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2Zvcm1hdE11aUVycm9yTWVzc2FnZVwiKSk7IiwgImltcG9ydCBtZW1vaXplIGZyb20gJ0BlbW90aW9uL21lbW9pemUnO1xuXG52YXIgcmVhY3RQcm9wc1JlZ2V4ID0gL14oKGNoaWxkcmVufGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MfGtleXxyZWZ8YXV0b0ZvY3VzfGRlZmF1bHRWYWx1ZXxkZWZhdWx0Q2hlY2tlZHxpbm5lckhUTUx8c3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nfHN1cHByZXNzSHlkcmF0aW9uV2FybmluZ3x2YWx1ZUxpbmt8YWJicnxhY2NlcHR8YWNjZXB0Q2hhcnNldHxhY2Nlc3NLZXl8YWN0aW9ufGFsbG93fGFsbG93VXNlck1lZGlhfGFsbG93UGF5bWVudFJlcXVlc3R8YWxsb3dGdWxsU2NyZWVufGFsbG93VHJhbnNwYXJlbmN5fGFsdHxhc3luY3xhdXRvQ29tcGxldGV8YXV0b1BsYXl8Y2FwdHVyZXxjZWxsUGFkZGluZ3xjZWxsU3BhY2luZ3xjaGFsbGVuZ2V8Y2hhclNldHxjaGVja2VkfGNpdGV8Y2xhc3NJRHxjbGFzc05hbWV8Y29sc3xjb2xTcGFufGNvbnRlbnR8Y29udGVudEVkaXRhYmxlfGNvbnRleHRNZW51fGNvbnRyb2xzfGNvbnRyb2xzTGlzdHxjb29yZHN8Y3Jvc3NPcmlnaW58ZGF0YXxkYXRlVGltZXxkZWNvZGluZ3xkZWZhdWx0fGRlZmVyfGRpcnxkaXNhYmxlZHxkaXNhYmxlUGljdHVyZUluUGljdHVyZXxkaXNhYmxlUmVtb3RlUGxheWJhY2t8ZG93bmxvYWR8ZHJhZ2dhYmxlfGVuY1R5cGV8ZW50ZXJLZXlIaW50fGZvcm18Zm9ybUFjdGlvbnxmb3JtRW5jVHlwZXxmb3JtTWV0aG9kfGZvcm1Ob1ZhbGlkYXRlfGZvcm1UYXJnZXR8ZnJhbWVCb3JkZXJ8aGVhZGVyc3xoZWlnaHR8aGlkZGVufGhpZ2h8aHJlZnxocmVmTGFuZ3xodG1sRm9yfGh0dHBFcXVpdnxpZHxpbnB1dE1vZGV8aW50ZWdyaXR5fGlzfGtleVBhcmFtc3xrZXlUeXBlfGtpbmR8bGFiZWx8bGFuZ3xsaXN0fGxvYWRpbmd8bG9vcHxsb3d8bWFyZ2luSGVpZ2h0fG1hcmdpbldpZHRofG1heHxtYXhMZW5ndGh8bWVkaWF8bWVkaWFHcm91cHxtZXRob2R8bWlufG1pbkxlbmd0aHxtdWx0aXBsZXxtdXRlZHxuYW1lfG5vbmNlfG5vVmFsaWRhdGV8b3BlbnxvcHRpbXVtfHBhdHRlcm58cGxhY2Vob2xkZXJ8cGxheXNJbmxpbmV8cG9zdGVyfHByZWxvYWR8cHJvZmlsZXxyYWRpb0dyb3VwfHJlYWRPbmx5fHJlZmVycmVyUG9saWN5fHJlbHxyZXF1aXJlZHxyZXZlcnNlZHxyb2xlfHJvd3N8cm93U3BhbnxzYW5kYm94fHNjb3BlfHNjb3BlZHxzY3JvbGxpbmd8c2VhbWxlc3N8c2VsZWN0ZWR8c2hhcGV8c2l6ZXxzaXplc3xzbG90fHNwYW58c3BlbGxDaGVja3xzcmN8c3JjRG9jfHNyY0xhbmd8c3JjU2V0fHN0YXJ0fHN0ZXB8c3R5bGV8c3VtbWFyeXx0YWJJbmRleHx0YXJnZXR8dGl0bGV8dHJhbnNsYXRlfHR5cGV8dXNlTWFwfHZhbHVlfHdpZHRofHdtb2RlfHdyYXB8YWJvdXR8ZGF0YXR5cGV8aW5saXN0fHByZWZpeHxwcm9wZXJ0eXxyZXNvdXJjZXx0eXBlb2Z8dm9jYWJ8YXV0b0NhcGl0YWxpemV8YXV0b0NvcnJlY3R8YXV0b1NhdmV8Y29sb3J8aW5jcmVtZW50YWx8ZmFsbGJhY2t8aW5lcnR8aXRlbVByb3B8aXRlbVNjb3BlfGl0ZW1UeXBlfGl0ZW1JRHxpdGVtUmVmfG9ufG9wdGlvbnxyZXN1bHRzfHNlY3VyaXR5fHVuc2VsZWN0YWJsZXxhY2NlbnRIZWlnaHR8YWNjdW11bGF0ZXxhZGRpdGl2ZXxhbGlnbm1lbnRCYXNlbGluZXxhbGxvd1Jlb3JkZXJ8YWxwaGFiZXRpY3xhbXBsaXR1ZGV8YXJhYmljRm9ybXxhc2NlbnR8YXR0cmlidXRlTmFtZXxhdHRyaWJ1dGVUeXBlfGF1dG9SZXZlcnNlfGF6aW11dGh8YmFzZUZyZXF1ZW5jeXxiYXNlbGluZVNoaWZ0fGJhc2VQcm9maWxlfGJib3h8YmVnaW58Ymlhc3xieXxjYWxjTW9kZXxjYXBIZWlnaHR8Y2xpcHxjbGlwUGF0aFVuaXRzfGNsaXBQYXRofGNsaXBSdWxlfGNvbG9ySW50ZXJwb2xhdGlvbnxjb2xvckludGVycG9sYXRpb25GaWx0ZXJzfGNvbG9yUHJvZmlsZXxjb2xvclJlbmRlcmluZ3xjb250ZW50U2NyaXB0VHlwZXxjb250ZW50U3R5bGVUeXBlfGN1cnNvcnxjeHxjeXxkfGRlY2VsZXJhdGV8ZGVzY2VudHxkaWZmdXNlQ29uc3RhbnR8ZGlyZWN0aW9ufGRpc3BsYXl8ZGl2aXNvcnxkb21pbmFudEJhc2VsaW5lfGR1cnxkeHxkeXxlZGdlTW9kZXxlbGV2YXRpb258ZW5hYmxlQmFja2dyb3VuZHxlbmR8ZXhwb25lbnR8ZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZHxmaWxsfGZpbGxPcGFjaXR5fGZpbGxSdWxlfGZpbHRlcnxmaWx0ZXJSZXN8ZmlsdGVyVW5pdHN8Zmxvb2RDb2xvcnxmbG9vZE9wYWNpdHl8Zm9jdXNhYmxlfGZvbnRGYW1pbHl8Zm9udFNpemV8Zm9udFNpemVBZGp1c3R8Zm9udFN0cmV0Y2h8Zm9udFN0eWxlfGZvbnRWYXJpYW50fGZvbnRXZWlnaHR8Zm9ybWF0fGZyb218ZnJ8Znh8Znl8ZzF8ZzJ8Z2x5cGhOYW1lfGdseXBoT3JpZW50YXRpb25Ib3Jpem9udGFsfGdseXBoT3JpZW50YXRpb25WZXJ0aWNhbHxnbHlwaFJlZnxncmFkaWVudFRyYW5zZm9ybXxncmFkaWVudFVuaXRzfGhhbmdpbmd8aG9yaXpBZHZYfGhvcml6T3JpZ2luWHxpZGVvZ3JhcGhpY3xpbWFnZVJlbmRlcmluZ3xpbnxpbjJ8aW50ZXJjZXB0fGt8azF8azJ8azN8azR8a2VybmVsTWF0cml4fGtlcm5lbFVuaXRMZW5ndGh8a2VybmluZ3xrZXlQb2ludHN8a2V5U3BsaW5lc3xrZXlUaW1lc3xsZW5ndGhBZGp1c3R8bGV0dGVyU3BhY2luZ3xsaWdodGluZ0NvbG9yfGxpbWl0aW5nQ29uZUFuZ2xlfGxvY2FsfG1hcmtlckVuZHxtYXJrZXJNaWR8bWFya2VyU3RhcnR8bWFya2VySGVpZ2h0fG1hcmtlclVuaXRzfG1hcmtlcldpZHRofG1hc2t8bWFza0NvbnRlbnRVbml0c3xtYXNrVW5pdHN8bWF0aGVtYXRpY2FsfG1vZGV8bnVtT2N0YXZlc3xvZmZzZXR8b3BhY2l0eXxvcGVyYXRvcnxvcmRlcnxvcmllbnR8b3JpZW50YXRpb258b3JpZ2lufG92ZXJmbG93fG92ZXJsaW5lUG9zaXRpb258b3ZlcmxpbmVUaGlja25lc3N8cGFub3NlMXxwYWludE9yZGVyfHBhdGhMZW5ndGh8cGF0dGVybkNvbnRlbnRVbml0c3xwYXR0ZXJuVHJhbnNmb3JtfHBhdHRlcm5Vbml0c3xwb2ludGVyRXZlbnRzfHBvaW50c3xwb2ludHNBdFh8cG9pbnRzQXRZfHBvaW50c0F0WnxwcmVzZXJ2ZUFscGhhfHByZXNlcnZlQXNwZWN0UmF0aW98cHJpbWl0aXZlVW5pdHN8cnxyYWRpdXN8cmVmWHxyZWZZfHJlbmRlcmluZ0ludGVudHxyZXBlYXRDb3VudHxyZXBlYXREdXJ8cmVxdWlyZWRFeHRlbnNpb25zfHJlcXVpcmVkRmVhdHVyZXN8cmVzdGFydHxyZXN1bHR8cm90YXRlfHJ4fHJ5fHNjYWxlfHNlZWR8c2hhcGVSZW5kZXJpbmd8c2xvcGV8c3BhY2luZ3xzcGVjdWxhckNvbnN0YW50fHNwZWN1bGFyRXhwb25lbnR8c3BlZWR8c3ByZWFkTWV0aG9kfHN0YXJ0T2Zmc2V0fHN0ZERldmlhdGlvbnxzdGVtaHxzdGVtdnxzdGl0Y2hUaWxlc3xzdG9wQ29sb3J8c3RvcE9wYWNpdHl8c3RyaWtldGhyb3VnaFBvc2l0aW9ufHN0cmlrZXRocm91Z2hUaGlja25lc3N8c3RyaW5nfHN0cm9rZXxzdHJva2VEYXNoYXJyYXl8c3Ryb2tlRGFzaG9mZnNldHxzdHJva2VMaW5lY2FwfHN0cm9rZUxpbmVqb2lufHN0cm9rZU1pdGVybGltaXR8c3Ryb2tlT3BhY2l0eXxzdHJva2VXaWR0aHxzdXJmYWNlU2NhbGV8c3lzdGVtTGFuZ3VhZ2V8dGFibGVWYWx1ZXN8dGFyZ2V0WHx0YXJnZXRZfHRleHRBbmNob3J8dGV4dERlY29yYXRpb258dGV4dFJlbmRlcmluZ3x0ZXh0TGVuZ3RofHRvfHRyYW5zZm9ybXx1MXx1Mnx1bmRlcmxpbmVQb3NpdGlvbnx1bmRlcmxpbmVUaGlja25lc3N8dW5pY29kZXx1bmljb2RlQmlkaXx1bmljb2RlUmFuZ2V8dW5pdHNQZXJFbXx2QWxwaGFiZXRpY3x2SGFuZ2luZ3x2SWRlb2dyYXBoaWN8dk1hdGhlbWF0aWNhbHx2YWx1ZXN8dmVjdG9yRWZmZWN0fHZlcnNpb258dmVydEFkdll8dmVydE9yaWdpblh8dmVydE9yaWdpbll8dmlld0JveHx2aWV3VGFyZ2V0fHZpc2liaWxpdHl8d2lkdGhzfHdvcmRTcGFjaW5nfHdyaXRpbmdNb2RlfHh8eEhlaWdodHx4MXx4Mnx4Q2hhbm5lbFNlbGVjdG9yfHhsaW5rQWN0dWF0ZXx4bGlua0FyY3JvbGV8eGxpbmtIcmVmfHhsaW5rUm9sZXx4bGlua1Nob3d8eGxpbmtUaXRsZXx4bGlua1R5cGV8eG1sQmFzZXx4bWxuc3x4bWxuc1hsaW5rfHhtbExhbmd8eG1sU3BhY2V8eXx5MXx5Mnx5Q2hhbm5lbFNlbGVjdG9yfHp8em9vbUFuZFBhbnxmb3J8Y2xhc3N8YXV0b2ZvY3VzKXwoKFtEZF1bQWFdW1R0XVtBYV18W0FhXVtScl1bSWldW0FhXXx4KS0uKikpJC87IC8vIGh0dHBzOi8vZXNiZW5jaC5jb20vYmVuY2gvNWJmZWU2OGE0Y2Q3ZTYwMDllZjYxZDIzXG5cbnZhciBpc1Byb3BWYWxpZCA9IC8qICNfX1BVUkVfXyAqL21lbW9pemUoZnVuY3Rpb24gKHByb3ApIHtcbiAgcmV0dXJuIHJlYWN0UHJvcHNSZWdleC50ZXN0KHByb3ApIHx8IHByb3AuY2hhckNvZGVBdCgwKSA9PT0gMTExXG4gIC8qIG8gKi9cbiAgJiYgcHJvcC5jaGFyQ29kZUF0KDEpID09PSAxMTBcbiAgLyogbiAqL1xuICAmJiBwcm9wLmNoYXJDb2RlQXQoMikgPCA5MTtcbn1cbi8qIForMSAqL1xuKTtcblxuZXhwb3J0IHsgaXNQcm9wVmFsaWQgYXMgZGVmYXVsdCB9O1xuIiwgImltcG9ydCBfZXh0ZW5kcyBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBpc1Byb3BWYWxpZCBmcm9tICdAZW1vdGlvbi9pcy1wcm9wLXZhbGlkJztcbmltcG9ydCB7IHdpdGhFbW90aW9uQ2FjaGUsIFRoZW1lQ29udGV4dCB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGdldFJlZ2lzdGVyZWRTdHlsZXMsIHJlZ2lzdGVyU3R5bGVzLCBpbnNlcnRTdHlsZXMgfSBmcm9tICdAZW1vdGlvbi91dGlscyc7XG5pbXBvcnQgeyBzZXJpYWxpemVTdHlsZXMgfSBmcm9tICdAZW1vdGlvbi9zZXJpYWxpemUnO1xuaW1wb3J0IHsgdXNlSW5zZXJ0aW9uRWZmZWN0QWx3YXlzV2l0aFN5bmNGYWxsYmFjayB9IGZyb20gJ0BlbW90aW9uL3VzZS1pbnNlcnRpb24tZWZmZWN0LXdpdGgtZmFsbGJhY2tzJztcblxudmFyIHRlc3RPbWl0UHJvcHNPblN0cmluZ1RhZyA9IGlzUHJvcFZhbGlkO1xuXG52YXIgdGVzdE9taXRQcm9wc09uQ29tcG9uZW50ID0gZnVuY3Rpb24gdGVzdE9taXRQcm9wc09uQ29tcG9uZW50KGtleSkge1xuICByZXR1cm4ga2V5ICE9PSAndGhlbWUnO1xufTtcblxudmFyIGdldERlZmF1bHRTaG91bGRGb3J3YXJkUHJvcCA9IGZ1bmN0aW9uIGdldERlZmF1bHRTaG91bGRGb3J3YXJkUHJvcCh0YWcpIHtcbiAgcmV0dXJuIHR5cGVvZiB0YWcgPT09ICdzdHJpbmcnICYmIC8vIDk2IGlzIG9uZSBsZXNzIHRoYW4gdGhlIGNoYXIgY29kZVxuICAvLyBmb3IgXCJhXCIgc28gdGhpcyBpcyBjaGVja2luZyB0aGF0XG4gIC8vIGl0J3MgYSBsb3dlcmNhc2UgY2hhcmFjdGVyXG4gIHRhZy5jaGFyQ29kZUF0KDApID4gOTYgPyB0ZXN0T21pdFByb3BzT25TdHJpbmdUYWcgOiB0ZXN0T21pdFByb3BzT25Db21wb25lbnQ7XG59O1xudmFyIGNvbXBvc2VTaG91bGRGb3J3YXJkUHJvcHMgPSBmdW5jdGlvbiBjb21wb3NlU2hvdWxkRm9yd2FyZFByb3BzKHRhZywgb3B0aW9ucywgaXNSZWFsKSB7XG4gIHZhciBzaG91bGRGb3J3YXJkUHJvcDtcblxuICBpZiAob3B0aW9ucykge1xuICAgIHZhciBvcHRpb25zU2hvdWxkRm9yd2FyZFByb3AgPSBvcHRpb25zLnNob3VsZEZvcndhcmRQcm9wO1xuICAgIHNob3VsZEZvcndhcmRQcm9wID0gdGFnLl9fZW1vdGlvbl9mb3J3YXJkUHJvcCAmJiBvcHRpb25zU2hvdWxkRm9yd2FyZFByb3AgPyBmdW5jdGlvbiAocHJvcE5hbWUpIHtcbiAgICAgIHJldHVybiB0YWcuX19lbW90aW9uX2ZvcndhcmRQcm9wKHByb3BOYW1lKSAmJiBvcHRpb25zU2hvdWxkRm9yd2FyZFByb3AocHJvcE5hbWUpO1xuICAgIH0gOiBvcHRpb25zU2hvdWxkRm9yd2FyZFByb3A7XG4gIH1cblxuICBpZiAodHlwZW9mIHNob3VsZEZvcndhcmRQcm9wICE9PSAnZnVuY3Rpb24nICYmIGlzUmVhbCkge1xuICAgIHNob3VsZEZvcndhcmRQcm9wID0gdGFnLl9fZW1vdGlvbl9mb3J3YXJkUHJvcDtcbiAgfVxuXG4gIHJldHVybiBzaG91bGRGb3J3YXJkUHJvcDtcbn07XG5cbnZhciBJTExFR0FMX0VTQ0FQRV9TRVFVRU5DRV9FUlJPUiA9IFwiWW91IGhhdmUgaWxsZWdhbCBlc2NhcGUgc2VxdWVuY2UgaW4geW91ciB0ZW1wbGF0ZSBsaXRlcmFsLCBtb3N0IGxpa2VseSBpbnNpZGUgY29udGVudCdzIHByb3BlcnR5IHZhbHVlLlxcbkJlY2F1c2UgeW91IHdyaXRlIHlvdXIgQ1NTIGluc2lkZSBhIEphdmFTY3JpcHQgc3RyaW5nIHlvdSBhY3R1YWxseSBoYXZlIHRvIGRvIGRvdWJsZSBlc2NhcGluZywgc28gZm9yIGV4YW1wbGUgXFxcImNvbnRlbnQ6ICdcXFxcMDBkNyc7XFxcIiBzaG91bGQgYmVjb21lIFxcXCJjb250ZW50OiAnXFxcXFxcXFwwMGQ3JztcXFwiLlxcbllvdSBjYW4gcmVhZCBtb3JlIGFib3V0IHRoaXMgaGVyZTpcXG5odHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9UZW1wbGF0ZV9saXRlcmFscyNFUzIwMThfcmV2aXNpb25fb2ZfaWxsZWdhbF9lc2NhcGVfc2VxdWVuY2VzXCI7XG5cbnZhciBJbnNlcnRpb24gPSBmdW5jdGlvbiBJbnNlcnRpb24oX3JlZikge1xuICB2YXIgY2FjaGUgPSBfcmVmLmNhY2hlLFxuICAgICAgc2VyaWFsaXplZCA9IF9yZWYuc2VyaWFsaXplZCxcbiAgICAgIGlzU3RyaW5nVGFnID0gX3JlZi5pc1N0cmluZ1RhZztcbiAgcmVnaXN0ZXJTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQsIGlzU3RyaW5nVGFnKTtcbiAgdXNlSW5zZXJ0aW9uRWZmZWN0QWx3YXlzV2l0aFN5bmNGYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGluc2VydFN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgaXNTdHJpbmdUYWcpO1xuICB9KTtcblxuICByZXR1cm4gbnVsbDtcbn07XG5cbnZhciBjcmVhdGVTdHlsZWQgPSBmdW5jdGlvbiBjcmVhdGVTdHlsZWQodGFnLCBvcHRpb25zKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKHRhZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBhcmUgdHJ5aW5nIHRvIGNyZWF0ZSBhIHN0eWxlZCBlbGVtZW50IHdpdGggYW4gdW5kZWZpbmVkIGNvbXBvbmVudC5cXG5Zb3UgbWF5IGhhdmUgZm9yZ290dGVuIHRvIGltcG9ydCBpdC4nKTtcbiAgICB9XG4gIH1cblxuICB2YXIgaXNSZWFsID0gdGFnLl9fZW1vdGlvbl9yZWFsID09PSB0YWc7XG4gIHZhciBiYXNlVGFnID0gaXNSZWFsICYmIHRhZy5fX2Vtb3Rpb25fYmFzZSB8fCB0YWc7XG4gIHZhciBpZGVudGlmaWVyTmFtZTtcbiAgdmFyIHRhcmdldENsYXNzTmFtZTtcblxuICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWRlbnRpZmllck5hbWUgPSBvcHRpb25zLmxhYmVsO1xuICAgIHRhcmdldENsYXNzTmFtZSA9IG9wdGlvbnMudGFyZ2V0O1xuICB9XG5cbiAgdmFyIHNob3VsZEZvcndhcmRQcm9wID0gY29tcG9zZVNob3VsZEZvcndhcmRQcm9wcyh0YWcsIG9wdGlvbnMsIGlzUmVhbCk7XG4gIHZhciBkZWZhdWx0U2hvdWxkRm9yd2FyZFByb3AgPSBzaG91bGRGb3J3YXJkUHJvcCB8fCBnZXREZWZhdWx0U2hvdWxkRm9yd2FyZFByb3AoYmFzZVRhZyk7XG4gIHZhciBzaG91bGRVc2VBcyA9ICFkZWZhdWx0U2hvdWxkRm9yd2FyZFByb3AoJ2FzJyk7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgdmFyIHN0eWxlcyA9IGlzUmVhbCAmJiB0YWcuX19lbW90aW9uX3N0eWxlcyAhPT0gdW5kZWZpbmVkID8gdGFnLl9fZW1vdGlvbl9zdHlsZXMuc2xpY2UoMCkgOiBbXTtcblxuICAgIGlmIChpZGVudGlmaWVyTmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBzdHlsZXMucHVzaChcImxhYmVsOlwiICsgaWRlbnRpZmllck5hbWUgKyBcIjtcIik7XG4gICAgfVxuXG4gICAgaWYgKGFyZ3NbMF0gPT0gbnVsbCB8fCBhcmdzWzBdLnJhdyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBzdHlsZXMucHVzaC5hcHBseShzdHlsZXMsIGFyZ3MpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBhcmdzWzBdWzBdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihJTExFR0FMX0VTQ0FQRV9TRVFVRU5DRV9FUlJPUik7XG4gICAgICB9XG5cbiAgICAgIHN0eWxlcy5wdXNoKGFyZ3NbMF1bMF0pO1xuICAgICAgdmFyIGxlbiA9IGFyZ3MubGVuZ3RoO1xuICAgICAgdmFyIGkgPSAxO1xuXG4gICAgICBmb3IgKDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGFyZ3NbMF1baV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoSUxMRUdBTF9FU0NBUEVfU0VRVUVOQ0VfRVJST1IpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3R5bGVzLnB1c2goYXJnc1tpXSwgYXJnc1swXVtpXSk7XG4gICAgICB9XG4gICAgfSAvLyAkRmxvd0ZpeE1lOiB3ZSBuZWVkIHRvIGNhc3QgU3RhdGVsZXNzRnVuY3Rpb25hbENvbXBvbmVudCB0byBvdXIgUHJpdmF0ZVN0eWxlZENvbXBvbmVudCBjbGFzc1xuXG5cbiAgICB2YXIgU3R5bGVkID0gd2l0aEVtb3Rpb25DYWNoZShmdW5jdGlvbiAocHJvcHMsIGNhY2hlLCByZWYpIHtcbiAgICAgIHZhciBGaW5hbFRhZyA9IHNob3VsZFVzZUFzICYmIHByb3BzLmFzIHx8IGJhc2VUYWc7XG4gICAgICB2YXIgY2xhc3NOYW1lID0gJyc7XG4gICAgICB2YXIgY2xhc3NJbnRlcnBvbGF0aW9ucyA9IFtdO1xuICAgICAgdmFyIG1lcmdlZFByb3BzID0gcHJvcHM7XG5cbiAgICAgIGlmIChwcm9wcy50aGVtZSA9PSBudWxsKSB7XG4gICAgICAgIG1lcmdlZFByb3BzID0ge307XG5cbiAgICAgICAgZm9yICh2YXIga2V5IGluIHByb3BzKSB7XG4gICAgICAgICAgbWVyZ2VkUHJvcHNba2V5XSA9IHByb3BzW2tleV07XG4gICAgICAgIH1cblxuICAgICAgICBtZXJnZWRQcm9wcy50aGVtZSA9IFJlYWN0LnVzZUNvbnRleHQoVGhlbWVDb250ZXh0KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBwcm9wcy5jbGFzc05hbWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNsYXNzTmFtZSA9IGdldFJlZ2lzdGVyZWRTdHlsZXMoY2FjaGUucmVnaXN0ZXJlZCwgY2xhc3NJbnRlcnBvbGF0aW9ucywgcHJvcHMuY2xhc3NOYW1lKTtcbiAgICAgIH0gZWxzZSBpZiAocHJvcHMuY2xhc3NOYW1lICE9IG51bGwpIHtcbiAgICAgICAgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lICsgXCIgXCI7XG4gICAgICB9XG5cbiAgICAgIHZhciBzZXJpYWxpemVkID0gc2VyaWFsaXplU3R5bGVzKHN0eWxlcy5jb25jYXQoY2xhc3NJbnRlcnBvbGF0aW9ucyksIGNhY2hlLnJlZ2lzdGVyZWQsIG1lcmdlZFByb3BzKTtcbiAgICAgIGNsYXNzTmFtZSArPSBjYWNoZS5rZXkgKyBcIi1cIiArIHNlcmlhbGl6ZWQubmFtZTtcblxuICAgICAgaWYgKHRhcmdldENsYXNzTmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNsYXNzTmFtZSArPSBcIiBcIiArIHRhcmdldENsYXNzTmFtZTtcbiAgICAgIH1cblxuICAgICAgdmFyIGZpbmFsU2hvdWxkRm9yd2FyZFByb3AgPSBzaG91bGRVc2VBcyAmJiBzaG91bGRGb3J3YXJkUHJvcCA9PT0gdW5kZWZpbmVkID8gZ2V0RGVmYXVsdFNob3VsZEZvcndhcmRQcm9wKEZpbmFsVGFnKSA6IGRlZmF1bHRTaG91bGRGb3J3YXJkUHJvcDtcbiAgICAgIHZhciBuZXdQcm9wcyA9IHt9O1xuXG4gICAgICBmb3IgKHZhciBfa2V5IGluIHByb3BzKSB7XG4gICAgICAgIGlmIChzaG91bGRVc2VBcyAmJiBfa2V5ID09PSAnYXMnKSBjb250aW51ZTtcblxuICAgICAgICBpZiAoIC8vICRGbG93Rml4TWVcbiAgICAgICAgZmluYWxTaG91bGRGb3J3YXJkUHJvcChfa2V5KSkge1xuICAgICAgICAgIG5ld1Byb3BzW19rZXldID0gcHJvcHNbX2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbmV3UHJvcHMuY2xhc3NOYW1lID0gY2xhc3NOYW1lO1xuICAgICAgbmV3UHJvcHMucmVmID0gcmVmO1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJbnNlcnRpb24sIHtcbiAgICAgICAgY2FjaGU6IGNhY2hlLFxuICAgICAgICBzZXJpYWxpemVkOiBzZXJpYWxpemVkLFxuICAgICAgICBpc1N0cmluZ1RhZzogdHlwZW9mIEZpbmFsVGFnID09PSAnc3RyaW5nJ1xuICAgICAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEZpbmFsVGFnLCBuZXdQcm9wcykpO1xuICAgIH0pO1xuICAgIFN0eWxlZC5kaXNwbGF5TmFtZSA9IGlkZW50aWZpZXJOYW1lICE9PSB1bmRlZmluZWQgPyBpZGVudGlmaWVyTmFtZSA6IFwiU3R5bGVkKFwiICsgKHR5cGVvZiBiYXNlVGFnID09PSAnc3RyaW5nJyA/IGJhc2VUYWcgOiBiYXNlVGFnLmRpc3BsYXlOYW1lIHx8IGJhc2VUYWcubmFtZSB8fCAnQ29tcG9uZW50JykgKyBcIilcIjtcbiAgICBTdHlsZWQuZGVmYXVsdFByb3BzID0gdGFnLmRlZmF1bHRQcm9wcztcbiAgICBTdHlsZWQuX19lbW90aW9uX3JlYWwgPSBTdHlsZWQ7XG4gICAgU3R5bGVkLl9fZW1vdGlvbl9iYXNlID0gYmFzZVRhZztcbiAgICBTdHlsZWQuX19lbW90aW9uX3N0eWxlcyA9IHN0eWxlcztcbiAgICBTdHlsZWQuX19lbW90aW9uX2ZvcndhcmRQcm9wID0gc2hvdWxkRm9yd2FyZFByb3A7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0eWxlZCwgJ3RvU3RyaW5nJywge1xuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKCkge1xuICAgICAgICBpZiAodGFyZ2V0Q2xhc3NOYW1lID09PSB1bmRlZmluZWQgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIHJldHVybiAnTk9fQ09NUE9ORU5UX1NFTEVDVE9SJztcbiAgICAgICAgfSAvLyAkRmxvd0ZpeE1lOiBjb2VyY2UgdW5kZWZpbmVkIHRvIHN0cmluZ1xuXG5cbiAgICAgICAgcmV0dXJuIFwiLlwiICsgdGFyZ2V0Q2xhc3NOYW1lO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgU3R5bGVkLndpdGhDb21wb25lbnQgPSBmdW5jdGlvbiAobmV4dFRhZywgbmV4dE9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBjcmVhdGVTdHlsZWQobmV4dFRhZywgX2V4dGVuZHMoe30sIG9wdGlvbnMsIG5leHRPcHRpb25zLCB7XG4gICAgICAgIHNob3VsZEZvcndhcmRQcm9wOiBjb21wb3NlU2hvdWxkRm9yd2FyZFByb3BzKFN0eWxlZCwgbmV4dE9wdGlvbnMsIHRydWUpXG4gICAgICB9KSkuYXBwbHkodm9pZCAwLCBzdHlsZXMpO1xuICAgIH07XG5cbiAgICByZXR1cm4gU3R5bGVkO1xuICB9O1xufTtcblxuZXhwb3J0IHsgY3JlYXRlU3R5bGVkIGFzIGRlZmF1bHQgfTtcbiIsICJpbXBvcnQgY3JlYXRlU3R5bGVkIGZyb20gJy4uL2Jhc2UvZGlzdC9lbW90aW9uLXN0eWxlZC1iYXNlLmJyb3dzZXIuZXNtLmpzJztcbmltcG9ydCAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9leHRlbmRzJztcbmltcG9ydCAncmVhY3QnO1xuaW1wb3J0ICdAZW1vdGlvbi9pcy1wcm9wLXZhbGlkJztcbmltcG9ydCAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0ICdAZW1vdGlvbi91dGlscyc7XG5pbXBvcnQgJ0BlbW90aW9uL3NlcmlhbGl6ZSc7XG5pbXBvcnQgJ0BlbW90aW9uL3VzZS1pbnNlcnRpb24tZWZmZWN0LXdpdGgtZmFsbGJhY2tzJztcblxudmFyIHRhZ3MgPSBbJ2EnLCAnYWJicicsICdhZGRyZXNzJywgJ2FyZWEnLCAnYXJ0aWNsZScsICdhc2lkZScsICdhdWRpbycsICdiJywgJ2Jhc2UnLCAnYmRpJywgJ2JkbycsICdiaWcnLCAnYmxvY2txdW90ZScsICdib2R5JywgJ2JyJywgJ2J1dHRvbicsICdjYW52YXMnLCAnY2FwdGlvbicsICdjaXRlJywgJ2NvZGUnLCAnY29sJywgJ2NvbGdyb3VwJywgJ2RhdGEnLCAnZGF0YWxpc3QnLCAnZGQnLCAnZGVsJywgJ2RldGFpbHMnLCAnZGZuJywgJ2RpYWxvZycsICdkaXYnLCAnZGwnLCAnZHQnLCAnZW0nLCAnZW1iZWQnLCAnZmllbGRzZXQnLCAnZmlnY2FwdGlvbicsICdmaWd1cmUnLCAnZm9vdGVyJywgJ2Zvcm0nLCAnaDEnLCAnaDInLCAnaDMnLCAnaDQnLCAnaDUnLCAnaDYnLCAnaGVhZCcsICdoZWFkZXInLCAnaGdyb3VwJywgJ2hyJywgJ2h0bWwnLCAnaScsICdpZnJhbWUnLCAnaW1nJywgJ2lucHV0JywgJ2lucycsICdrYmQnLCAna2V5Z2VuJywgJ2xhYmVsJywgJ2xlZ2VuZCcsICdsaScsICdsaW5rJywgJ21haW4nLCAnbWFwJywgJ21hcmsnLCAnbWFycXVlZScsICdtZW51JywgJ21lbnVpdGVtJywgJ21ldGEnLCAnbWV0ZXInLCAnbmF2JywgJ25vc2NyaXB0JywgJ29iamVjdCcsICdvbCcsICdvcHRncm91cCcsICdvcHRpb24nLCAnb3V0cHV0JywgJ3AnLCAncGFyYW0nLCAncGljdHVyZScsICdwcmUnLCAncHJvZ3Jlc3MnLCAncScsICdycCcsICdydCcsICdydWJ5JywgJ3MnLCAnc2FtcCcsICdzY3JpcHQnLCAnc2VjdGlvbicsICdzZWxlY3QnLCAnc21hbGwnLCAnc291cmNlJywgJ3NwYW4nLCAnc3Ryb25nJywgJ3N0eWxlJywgJ3N1YicsICdzdW1tYXJ5JywgJ3N1cCcsICd0YWJsZScsICd0Ym9keScsICd0ZCcsICd0ZXh0YXJlYScsICd0Zm9vdCcsICd0aCcsICd0aGVhZCcsICd0aW1lJywgJ3RpdGxlJywgJ3RyJywgJ3RyYWNrJywgJ3UnLCAndWwnLCAndmFyJywgJ3ZpZGVvJywgJ3dicicsIC8vIFNWR1xuJ2NpcmNsZScsICdjbGlwUGF0aCcsICdkZWZzJywgJ2VsbGlwc2UnLCAnZm9yZWlnbk9iamVjdCcsICdnJywgJ2ltYWdlJywgJ2xpbmUnLCAnbGluZWFyR3JhZGllbnQnLCAnbWFzaycsICdwYXRoJywgJ3BhdHRlcm4nLCAncG9seWdvbicsICdwb2x5bGluZScsICdyYWRpYWxHcmFkaWVudCcsICdyZWN0JywgJ3N0b3AnLCAnc3ZnJywgJ3RleHQnLCAndHNwYW4nXTtcblxudmFyIG5ld1N0eWxlZCA9IGNyZWF0ZVN0eWxlZC5iaW5kKCk7XG50YWdzLmZvckVhY2goZnVuY3Rpb24gKHRhZ05hbWUpIHtcbiAgLy8gJEZsb3dGaXhNZTogd2UgY2FuIGlnbm9yZSB0aGlzIGJlY2F1c2UgaXRzIGV4cG9zZWQgdHlwZSBpcyBkZWZpbmVkIGJ5IHRoZSBDcmVhdGVTdHlsZWQgdHlwZVxuICBuZXdTdHlsZWRbdGFnTmFtZV0gPSBuZXdTdHlsZWQodGFnTmFtZSk7XG59KTtcblxuZXhwb3J0IHsgbmV3U3R5bGVkIGFzIGRlZmF1bHQgfTtcbiIsICIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gJ1NFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEJztcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdFByb3BUeXBlc1NlY3JldDtcbiIsICIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gcmVxdWlyZSgnLi9saWIvUmVhY3RQcm9wVHlwZXNTZWNyZXQnKTtcblxuZnVuY3Rpb24gZW1wdHlGdW5jdGlvbigpIHt9XG5mdW5jdGlvbiBlbXB0eUZ1bmN0aW9uV2l0aFJlc2V0KCkge31cbmVtcHR5RnVuY3Rpb25XaXRoUmVzZXQucmVzZXRXYXJuaW5nQ2FjaGUgPSBlbXB0eUZ1bmN0aW9uO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBzaGltKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7XG4gICAgaWYgKHNlY3JldCA9PT0gUmVhY3RQcm9wVHlwZXNTZWNyZXQpIHtcbiAgICAgIC8vIEl0IGlzIHN0aWxsIHNhZmUgd2hlbiBjYWxsZWQgZnJvbSBSZWFjdC5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGVyciA9IG5ldyBFcnJvcihcbiAgICAgICdDYWxsaW5nIFByb3BUeXBlcyB2YWxpZGF0b3JzIGRpcmVjdGx5IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLiAnICtcbiAgICAgICdVc2UgUHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzKCkgdG8gY2FsbCB0aGVtLiAnICtcbiAgICAgICdSZWFkIG1vcmUgYXQgaHR0cDovL2ZiLm1lL3VzZS1jaGVjay1wcm9wLXR5cGVzJ1xuICAgICk7XG4gICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgdGhyb3cgZXJyO1xuICB9O1xuICBzaGltLmlzUmVxdWlyZWQgPSBzaGltO1xuICBmdW5jdGlvbiBnZXRTaGltKCkge1xuICAgIHJldHVybiBzaGltO1xuICB9O1xuICAvLyBJbXBvcnRhbnQhXG4gIC8vIEtlZXAgdGhpcyBsaXN0IGluIHN5bmMgd2l0aCBwcm9kdWN0aW9uIHZlcnNpb24gaW4gYC4vZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMuanNgLlxuICB2YXIgUmVhY3RQcm9wVHlwZXMgPSB7XG4gICAgYXJyYXk6IHNoaW0sXG4gICAgYmlnaW50OiBzaGltLFxuICAgIGJvb2w6IHNoaW0sXG4gICAgZnVuYzogc2hpbSxcbiAgICBudW1iZXI6IHNoaW0sXG4gICAgb2JqZWN0OiBzaGltLFxuICAgIHN0cmluZzogc2hpbSxcbiAgICBzeW1ib2w6IHNoaW0sXG5cbiAgICBhbnk6IHNoaW0sXG4gICAgYXJyYXlPZjogZ2V0U2hpbSxcbiAgICBlbGVtZW50OiBzaGltLFxuICAgIGVsZW1lbnRUeXBlOiBzaGltLFxuICAgIGluc3RhbmNlT2Y6IGdldFNoaW0sXG4gICAgbm9kZTogc2hpbSxcbiAgICBvYmplY3RPZjogZ2V0U2hpbSxcbiAgICBvbmVPZjogZ2V0U2hpbSxcbiAgICBvbmVPZlR5cGU6IGdldFNoaW0sXG4gICAgc2hhcGU6IGdldFNoaW0sXG4gICAgZXhhY3Q6IGdldFNoaW0sXG5cbiAgICBjaGVja1Byb3BUeXBlczogZW1wdHlGdW5jdGlvbldpdGhSZXNldCxcbiAgICByZXNldFdhcm5pbmdDYWNoZTogZW1wdHlGdW5jdGlvblxuICB9O1xuXG4gIFJlYWN0UHJvcFR5cGVzLlByb3BUeXBlcyA9IFJlYWN0UHJvcFR5cGVzO1xuXG4gIHJldHVybiBSZWFjdFByb3BUeXBlcztcbn07XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgUmVhY3RJcyA9IHJlcXVpcmUoJ3JlYWN0LWlzJyk7XG5cbiAgLy8gQnkgZXhwbGljaXRseSB1c2luZyBgcHJvcC10eXBlc2AgeW91IGFyZSBvcHRpbmcgaW50byBuZXcgZGV2ZWxvcG1lbnQgYmVoYXZpb3IuXG4gIC8vIGh0dHA6Ly9mYi5tZS9wcm9wLXR5cGVzLWluLXByb2RcbiAgdmFyIHRocm93T25EaXJlY3RBY2Nlc3MgPSB0cnVlO1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMnKShSZWFjdElzLmlzRWxlbWVudCwgdGhyb3dPbkRpcmVjdEFjY2Vzcyk7XG59IGVsc2Uge1xuICAvLyBCeSBleHBsaWNpdGx5IHVzaW5nIGBwcm9wLXR5cGVzYCB5b3UgYXJlIG9wdGluZyBpbnRvIG5ldyBwcm9kdWN0aW9uIGJlaGF2aW9yLlxuICAvLyBodHRwOi8vZmIubWUvcHJvcC10eXBlcy1pbi1wcm9kXG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9mYWN0b3J5V2l0aFRocm93aW5nU2hpbXMnKSgpO1xufVxuIiwgIi8qKiBAbGljZW5zZSBSZWFjdCB2MTcuMC4yXG4gKiByZWFjdC1qc3gtcnVudGltZS5wcm9kdWN0aW9uLm1pbi5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG4ndXNlIHN0cmljdCc7cmVxdWlyZShcIm9iamVjdC1hc3NpZ25cIik7dmFyIGY9cmVxdWlyZShcInJlYWN0XCIpLGc9NjAxMDM7ZXhwb3J0cy5GcmFnbWVudD02MDEwNztpZihcImZ1bmN0aW9uXCI9PT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yKXt2YXIgaD1TeW1ib2wuZm9yO2c9aChcInJlYWN0LmVsZW1lbnRcIik7ZXhwb3J0cy5GcmFnbWVudD1oKFwicmVhY3QuZnJhZ21lbnRcIil9dmFyIG09Zi5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRC5SZWFjdEN1cnJlbnRPd25lcixuPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkscD17a2V5OiEwLHJlZjohMCxfX3NlbGY6ITAsX19zb3VyY2U6ITB9O1xuZnVuY3Rpb24gcShjLGEsayl7dmFyIGIsZD17fSxlPW51bGwsbD1udWxsO3ZvaWQgMCE9PWsmJihlPVwiXCIrayk7dm9pZCAwIT09YS5rZXkmJihlPVwiXCIrYS5rZXkpO3ZvaWQgMCE9PWEucmVmJiYobD1hLnJlZik7Zm9yKGIgaW4gYSluLmNhbGwoYSxiKSYmIXAuaGFzT3duUHJvcGVydHkoYikmJihkW2JdPWFbYl0pO2lmKGMmJmMuZGVmYXVsdFByb3BzKWZvcihiIGluIGE9Yy5kZWZhdWx0UHJvcHMsYSl2b2lkIDA9PT1kW2JdJiYoZFtiXT1hW2JdKTtyZXR1cm57JCR0eXBlb2Y6Zyx0eXBlOmMsa2V5OmUscmVmOmwscHJvcHM6ZCxfb3duZXI6bS5jdXJyZW50fX1leHBvcnRzLmpzeD1xO2V4cG9ydHMuanN4cz1xO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1qc3gtcnVudGltZS5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1qc3gtcnVudGltZS5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuJ3VzZSBjbGllbnQnO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSBTdHlsZWRFbmdpbmVQcm92aWRlcjtcbnZhciBSZWFjdCA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG52YXIgX3Byb3BUeXBlcyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcInByb3AtdHlwZXNcIikpO1xudmFyIF9yZWFjdDIgPSByZXF1aXJlKFwiQGVtb3Rpb24vcmVhY3RcIik7XG52YXIgX2NhY2hlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiQGVtb3Rpb24vY2FjaGVcIikpO1xudmFyIF9qc3hSdW50aW1lID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xuZnVuY3Rpb24gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgV2Vha01hcCkgcmV0dXJuIG51bGw7IHZhciByID0gbmV3IFdlYWtNYXAoKSwgdCA9IG5ldyBXZWFrTWFwKCk7IHJldHVybiAoX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlID0gZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUgPyB0IDogcjsgfSkoZSk7IH1cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKGUsIHIpIHsgaWYgKCFyICYmIGUgJiYgZS5fX2VzTW9kdWxlKSByZXR1cm4gZTsgaWYgKG51bGwgPT09IGUgfHwgXCJvYmplY3RcIiAhPSB0eXBlb2YgZSAmJiBcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUpIHJldHVybiB7IGRlZmF1bHQ6IGUgfTsgdmFyIHQgPSBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUocik7IGlmICh0ICYmIHQuaGFzKGUpKSByZXR1cm4gdC5nZXQoZSk7IHZhciBuID0geyBfX3Byb3RvX186IG51bGwgfSwgYSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOyBmb3IgKHZhciB1IGluIGUpIGlmIChcImRlZmF1bHRcIiAhPT0gdSAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSwgdSkpIHsgdmFyIGkgPSBhID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCB1KSA6IG51bGw7IGkgJiYgKGkuZ2V0IHx8IGkuc2V0KSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCB1LCBpKSA6IG5bdV0gPSBlW3VdOyB9IHJldHVybiBuLmRlZmF1bHQgPSBlLCB0ICYmIHQuc2V0KGUsIG4pLCBuOyB9XG4vLyBwcmVwZW5kOiB0cnVlIG1vdmVzIE1VSSBzdHlsZXMgdG8gdGhlIHRvcCBvZiB0aGUgPGhlYWQ+IHNvIHRoZXkncmUgbG9hZGVkIGZpcnN0LlxuLy8gSXQgYWxsb3dzIGRldmVsb3BlcnMgdG8gZWFzaWx5IG92ZXJyaWRlIE1VSSBzdHlsZXMgd2l0aCBvdGhlciBzdHlsaW5nIHNvbHV0aW9ucywgbGlrZSBDU1MgbW9kdWxlcy5cbmxldCBjYWNoZTtcbmlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICdvYmplY3QnKSB7XG4gIGNhY2hlID0gKDAsIF9jYWNoZS5kZWZhdWx0KSh7XG4gICAga2V5OiAnY3NzJyxcbiAgICBwcmVwZW5kOiB0cnVlXG4gIH0pO1xufVxuZnVuY3Rpb24gU3R5bGVkRW5naW5lUHJvdmlkZXIocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGluamVjdEZpcnN0LFxuICAgIGNoaWxkcmVuXG4gIH0gPSBwcm9wcztcbiAgcmV0dXJuIGluamVjdEZpcnN0ICYmIGNhY2hlID8gLyojX19QVVJFX18qLygwLCBfanN4UnVudGltZS5qc3gpKF9yZWFjdDIuQ2FjaGVQcm92aWRlciwge1xuICAgIHZhbHVlOiBjYWNoZSxcbiAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgfSkgOiBjaGlsZHJlbjtcbn1cbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFN0eWxlZEVuZ2luZVByb3ZpZGVyLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAqIFlvdXIgY29tcG9uZW50IHRyZWUuXG4gICAqL1xuICBjaGlsZHJlbjogX3Byb3BUeXBlcy5kZWZhdWx0Lm5vZGUsXG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0LCB0aGUgc3R5bGVzIGFyZSBpbmplY3RlZCBsYXN0IGluIHRoZSA8aGVhZD4gZWxlbWVudCBvZiB0aGUgcGFnZS5cbiAgICogQXMgYSByZXN1bHQsIHRoZXkgZ2FpbiBtb3JlIHNwZWNpZmljaXR5IHRoYW4gYW55IG90aGVyIHN0eWxlIHNoZWV0LlxuICAgKiBJZiB5b3Ugd2FudCB0byBvdmVycmlkZSBNVUkncyBzdHlsZXMsIHNldCB0aGlzIHByb3AuXG4gICAqL1xuICBpbmplY3RGaXJzdDogX3Byb3BUeXBlcy5kZWZhdWx0LmJvb2xcbn0gOiB2b2lkIDA7IiwgIlwidXNlIHN0cmljdFwiO1xuJ3VzZSBjbGllbnQnO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZWZhdWx0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9TdHlsZWRFbmdpbmVQcm92aWRlci5kZWZhdWx0O1xuICB9XG59KTtcbnZhciBfU3R5bGVkRW5naW5lUHJvdmlkZXIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL1N0eWxlZEVuZ2luZVByb3ZpZGVyXCIpKTsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG4ndXNlIGNsaWVudCc7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IEdsb2JhbFN0eWxlcztcbnZhciBSZWFjdCA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG52YXIgX3Byb3BUeXBlcyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcInByb3AtdHlwZXNcIikpO1xudmFyIF9yZWFjdDIgPSByZXF1aXJlKFwiQGVtb3Rpb24vcmVhY3RcIik7XG52YXIgX2pzeFJ1bnRpbWUgPSByZXF1aXJlKFwicmVhY3QvanN4LXJ1bnRpbWVcIik7XG5mdW5jdGlvbiBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBXZWFrTWFwKSByZXR1cm4gbnVsbDsgdmFyIHIgPSBuZXcgV2Vha01hcCgpLCB0ID0gbmV3IFdlYWtNYXAoKTsgcmV0dXJuIChfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUgPSBmdW5jdGlvbiAoZSkgeyByZXR1cm4gZSA/IHQgOiByOyB9KShlKTsgfVxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQoZSwgcikgeyBpZiAoIXIgJiYgZSAmJiBlLl9fZXNNb2R1bGUpIHJldHVybiBlOyBpZiAobnVsbCA9PT0gZSB8fCBcIm9iamVjdFwiICE9IHR5cGVvZiBlICYmIFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSkgcmV0dXJuIHsgZGVmYXVsdDogZSB9OyB2YXIgdCA9IF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShyKTsgaWYgKHQgJiYgdC5oYXMoZSkpIHJldHVybiB0LmdldChlKTsgdmFyIG4gPSB7IF9fcHJvdG9fXzogbnVsbCB9LCBhID0gT2JqZWN0LmRlZmluZVByb3BlcnR5ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7IGZvciAodmFyIHUgaW4gZSkgaWYgKFwiZGVmYXVsdFwiICE9PSB1ICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCB1KSkgeyB2YXIgaSA9IGEgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHUpIDogbnVsbDsgaSAmJiAoaS5nZXQgfHwgaS5zZXQpID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIHUsIGkpIDogblt1XSA9IGVbdV07IH0gcmV0dXJuIG4uZGVmYXVsdCA9IGUsIHQgJiYgdC5zZXQoZSwgbiksIG47IH1cbmZ1bmN0aW9uIGlzRW1wdHkob2JqKSB7XG4gIHJldHVybiBvYmogPT09IHVuZGVmaW5lZCB8fCBvYmogPT09IG51bGwgfHwgT2JqZWN0LmtleXMob2JqKS5sZW5ndGggPT09IDA7XG59XG5mdW5jdGlvbiBHbG9iYWxTdHlsZXMocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIHN0eWxlcyxcbiAgICBkZWZhdWx0VGhlbWUgPSB7fVxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGdsb2JhbFN0eWxlcyA9IHR5cGVvZiBzdHlsZXMgPT09ICdmdW5jdGlvbicgPyB0aGVtZUlucHV0ID0+IHN0eWxlcyhpc0VtcHR5KHRoZW1lSW5wdXQpID8gZGVmYXVsdFRoZW1lIDogdGhlbWVJbnB1dCkgOiBzdHlsZXM7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovKDAsIF9qc3hSdW50aW1lLmpzeCkoX3JlYWN0Mi5HbG9iYWwsIHtcbiAgICBzdHlsZXM6IGdsb2JhbFN0eWxlc1xuICB9KTtcbn1cbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IEdsb2JhbFN0eWxlcy5wcm9wVHlwZXMgPSB7XG4gIGRlZmF1bHRUaGVtZTogX3Byb3BUeXBlcy5kZWZhdWx0Lm9iamVjdCxcbiAgc3R5bGVzOiBfcHJvcFR5cGVzLmRlZmF1bHQub25lT2ZUeXBlKFtfcHJvcFR5cGVzLmRlZmF1bHQuYXJyYXksIF9wcm9wVHlwZXMuZGVmYXVsdC5zdHJpbmcsIF9wcm9wVHlwZXMuZGVmYXVsdC5vYmplY3QsIF9wcm9wVHlwZXMuZGVmYXVsdC5mdW5jXSlcbn0gOiB2b2lkIDA7IiwgIlwidXNlIHN0cmljdFwiO1xuJ3VzZSBjbGllbnQnO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZWZhdWx0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9HbG9iYWxTdHlsZXMuZGVmYXVsdDtcbiAgfVxufSk7XG52YXIgX0dsb2JhbFN0eWxlcyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vR2xvYmFsU3R5bGVzXCIpKTsiLCAiLyoqXG4gKiBAbXVpL3N0eWxlZC1lbmdpbmUgdjUuMTUuMTFcbiAqXG4gKiBAbGljZW5zZSBNSVRcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cInVzZSBzdHJpY3RcIjtcbid1c2UgY2xpZW50JztcblxuLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZXJzY29yZS1kYW5nbGUgKi9cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkdsb2JhbFN0eWxlc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfR2xvYmFsU3R5bGVzLmRlZmF1bHQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiU3R5bGVkRW5naW5lUHJvdmlkZXJcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX1N0eWxlZEVuZ2luZVByb3ZpZGVyLmRlZmF1bHQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVGhlbWVDb250ZXh0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9yZWFjdC5UaGVtZUNvbnRleHQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3NzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9yZWFjdC5jc3M7XG4gIH1cbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gc3R5bGVkO1xuZXhwb3J0cy5pbnRlcm5hbF9wcm9jZXNzU3R5bGVzID0gdm9pZCAwO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwia2V5ZnJhbWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9yZWFjdC5rZXlmcmFtZXM7XG4gIH1cbn0pO1xudmFyIF9zdHlsZWQgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJAZW1vdGlvbi9zdHlsZWRcIikpO1xudmFyIF9yZWFjdCA9IHJlcXVpcmUoXCJAZW1vdGlvbi9yZWFjdFwiKTtcbnZhciBfU3R5bGVkRW5naW5lUHJvdmlkZXIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL1N0eWxlZEVuZ2luZVByb3ZpZGVyXCIpKTtcbnZhciBfR2xvYmFsU3R5bGVzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9HbG9iYWxTdHlsZXNcIikpO1xuZnVuY3Rpb24gc3R5bGVkKHRhZywgb3B0aW9ucykge1xuICBjb25zdCBzdHlsZXNGYWN0b3J5ID0gKDAsIF9zdHlsZWQuZGVmYXVsdCkodGFnLCBvcHRpb25zKTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICByZXR1cm4gKC4uLnN0eWxlcykgPT4ge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gdHlwZW9mIHRhZyA9PT0gJ3N0cmluZycgPyBgXCIke3RhZ31cImAgOiAnY29tcG9uZW50JztcbiAgICAgIGlmIChzdHlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoW2BNVUk6IFNlZW1zIGxpa2UgeW91IGNhbGxlZCBcXGBzdHlsZWQoJHtjb21wb25lbnR9KSgpXFxgIHdpdGhvdXQgYSBcXGBzdHlsZVxcYCBhcmd1bWVudC5gLCAnWW91IG11c3QgcHJvdmlkZSBhIGBzdHlsZXNgIGFyZ3VtZW50OiBgc3R5bGVkKFwiZGl2XCIpKHN0eWxlWW91Rm9yZ290VG9QYXNzKWAuJ10uam9pbignXFxuJykpO1xuICAgICAgfSBlbHNlIGlmIChzdHlsZXMuc29tZShzdHlsZSA9PiBzdHlsZSA9PT0gdW5kZWZpbmVkKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBNVUk6IHRoZSBzdHlsZWQoJHtjb21wb25lbnR9KSguLi5hcmdzKSBBUEkgcmVxdWlyZXMgYWxsIGl0cyBhcmdzIHRvIGJlIGRlZmluZWQuYCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3R5bGVzRmFjdG9yeSguLi5zdHlsZXMpO1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIHN0eWxlc0ZhY3Rvcnk7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbmNvbnN0IGludGVybmFsX3Byb2Nlc3NTdHlsZXMgPSAodGFnLCBwcm9jZXNzb3IpID0+IHtcbiAgLy8gRW1vdGlvbiBhdHRhY2hlcyBhbGwgdGhlIHN0eWxlcyBhcyBgX19lbW90aW9uX3N0eWxlc2AuXG4gIC8vIFJlZjogaHR0cHM6Ly9naXRodWIuY29tL2Vtb3Rpb24tanMvZW1vdGlvbi9ibG9iLzE2ZDk3MWQwZGEyMjk1OTZkNmJjYzM5ZDI4MmJhOTc1M2M5ZWU3Y2YvcGFja2FnZXMvc3R5bGVkL3NyYy9iYXNlLmpzI0wxODZcbiAgaWYgKEFycmF5LmlzQXJyYXkodGFnLl9fZW1vdGlvbl9zdHlsZXMpKSB7XG4gICAgdGFnLl9fZW1vdGlvbl9zdHlsZXMgPSBwcm9jZXNzb3IodGFnLl9fZW1vdGlvbl9zdHlsZXMpO1xuICB9XG59O1xuZXhwb3J0cy5pbnRlcm5hbF9wcm9jZXNzU3R5bGVzID0gaW50ZXJuYWxfcHJvY2Vzc1N0eWxlczsiLCAiZnVuY3Rpb24gX2V4dGVuZHMoKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07XG4gICAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7XG4gIHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfZXh0ZW5kcywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsICJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVlcG1lcmdlO1xuZXhwb3J0cy5pc1BsYWluT2JqZWN0ID0gaXNQbGFpbk9iamVjdDtcbnZhciBfZXh0ZW5kczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2V4dGVuZHNcIikpO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9pcy1wbGFpbi1vYmovYmxvYi9tYWluL2luZGV4LmpzXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KGl0ZW0pIHtcbiAgaWYgKHR5cGVvZiBpdGVtICE9PSAnb2JqZWN0JyB8fCBpdGVtID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IHByb3RvdHlwZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihpdGVtKTtcbiAgcmV0dXJuIChwcm90b3R5cGUgPT09IG51bGwgfHwgcHJvdG90eXBlID09PSBPYmplY3QucHJvdG90eXBlIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90b3R5cGUpID09PSBudWxsKSAmJiAhKFN5bWJvbC50b1N0cmluZ1RhZyBpbiBpdGVtKSAmJiAhKFN5bWJvbC5pdGVyYXRvciBpbiBpdGVtKTtcbn1cbmZ1bmN0aW9uIGRlZXBDbG9uZShzb3VyY2UpIHtcbiAgaWYgKCFpc1BsYWluT2JqZWN0KHNvdXJjZSkpIHtcbiAgICByZXR1cm4gc291cmNlO1xuICB9XG4gIGNvbnN0IG91dHB1dCA9IHt9O1xuICBPYmplY3Qua2V5cyhzb3VyY2UpLmZvckVhY2goa2V5ID0+IHtcbiAgICBvdXRwdXRba2V5XSA9IGRlZXBDbG9uZShzb3VyY2Vba2V5XSk7XG4gIH0pO1xuICByZXR1cm4gb3V0cHV0O1xufVxuZnVuY3Rpb24gZGVlcG1lcmdlKHRhcmdldCwgc291cmNlLCBvcHRpb25zID0ge1xuICBjbG9uZTogdHJ1ZVxufSkge1xuICBjb25zdCBvdXRwdXQgPSBvcHRpb25zLmNsb25lID8gKDAsIF9leHRlbmRzMi5kZWZhdWx0KSh7fSwgdGFyZ2V0KSA6IHRhcmdldDtcbiAgaWYgKGlzUGxhaW5PYmplY3QodGFyZ2V0KSAmJiBpc1BsYWluT2JqZWN0KHNvdXJjZSkpIHtcbiAgICBPYmplY3Qua2V5cyhzb3VyY2UpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIC8vIEF2b2lkIHByb3RvdHlwZSBwb2xsdXRpb25cbiAgICAgIGlmIChrZXkgPT09ICdfX3Byb3RvX18nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChpc1BsYWluT2JqZWN0KHNvdXJjZVtrZXldKSAmJiBrZXkgaW4gdGFyZ2V0ICYmIGlzUGxhaW5PYmplY3QodGFyZ2V0W2tleV0pKSB7XG4gICAgICAgIC8vIFNpbmNlIGBvdXRwdXRgIGlzIGEgY2xvbmUgb2YgYHRhcmdldGAgYW5kIHdlIGhhdmUgbmFycm93ZWQgYHRhcmdldGAgaW4gdGhpcyBibG9jayB3ZSBjYW4gY2FzdCB0byB0aGUgc2FtZSB0eXBlLlxuICAgICAgICBvdXRwdXRba2V5XSA9IGRlZXBtZXJnZSh0YXJnZXRba2V5XSwgc291cmNlW2tleV0sIG9wdGlvbnMpO1xuICAgICAgfSBlbHNlIGlmIChvcHRpb25zLmNsb25lKSB7XG4gICAgICAgIG91dHB1dFtrZXldID0gaXNQbGFpbk9iamVjdChzb3VyY2Vba2V5XSkgPyBkZWVwQ2xvbmUoc291cmNlW2tleV0pIDogc291cmNlW2tleV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXRwdXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHJldHVybiBvdXRwdXQ7XG59IiwgIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xudmFyIF9leHBvcnROYW1lcyA9IHt9O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVmYXVsdFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfZGVlcG1lcmdlLmRlZmF1bHQ7XG4gIH1cbn0pO1xudmFyIF9kZWVwbWVyZ2UgPSBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChyZXF1aXJlKFwiLi9kZWVwbWVyZ2VcIikpO1xuT2JqZWN0LmtleXMoX2RlZXBtZXJnZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gIGlmIChrZXkgPT09IFwiZGVmYXVsdFwiIHx8IGtleSA9PT0gXCJfX2VzTW9kdWxlXCIpIHJldHVybjtcbiAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfZXhwb3J0TmFtZXMsIGtleSkpIHJldHVybjtcbiAgaWYgKGtleSBpbiBleHBvcnRzICYmIGV4cG9ydHNba2V5XSA9PT0gX2RlZXBtZXJnZVtrZXldKSByZXR1cm47XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF9kZWVwbWVyZ2Vba2V5XTtcbiAgICB9XG4gIH0pO1xufSk7XG5mdW5jdGlvbiBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBXZWFrTWFwKSByZXR1cm4gbnVsbDsgdmFyIHIgPSBuZXcgV2Vha01hcCgpLCB0ID0gbmV3IFdlYWtNYXAoKTsgcmV0dXJuIChfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUgPSBmdW5jdGlvbiAoZSkgeyByZXR1cm4gZSA/IHQgOiByOyB9KShlKTsgfVxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQoZSwgcikgeyBpZiAoIXIgJiYgZSAmJiBlLl9fZXNNb2R1bGUpIHJldHVybiBlOyBpZiAobnVsbCA9PT0gZSB8fCBcIm9iamVjdFwiICE9IHR5cGVvZiBlICYmIFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSkgcmV0dXJuIHsgZGVmYXVsdDogZSB9OyB2YXIgdCA9IF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShyKTsgaWYgKHQgJiYgdC5oYXMoZSkpIHJldHVybiB0LmdldChlKTsgdmFyIG4gPSB7IF9fcHJvdG9fXzogbnVsbCB9LCBhID0gT2JqZWN0LmRlZmluZVByb3BlcnR5ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7IGZvciAodmFyIHUgaW4gZSkgaWYgKFwiZGVmYXVsdFwiICE9PSB1ICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCB1KSkgeyB2YXIgaSA9IGEgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHUpIDogbnVsbDsgaSAmJiAoaS5nZXQgfHwgaS5zZXQpID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIHUsIGkpIDogblt1XSA9IGVbdV07IH0gcmV0dXJuIG4uZGVmYXVsdCA9IGUsIHQgJiYgdC5zZXQoZSwgbiksIG47IH0iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IGNhcGl0YWxpemU7XG52YXIgX2Zvcm1hdE11aUVycm9yTWVzc2FnZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJAbXVpL3V0aWxzL2Zvcm1hdE11aUVycm9yTWVzc2FnZVwiKSk7XG4vLyBJdCBzaG91bGQgdG8gYmUgbm90ZWQgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzbid0IGVxdWl2YWxlbnQgdG8gYHRleHQtdHJhbnNmb3JtOiBjYXBpdGFsaXplYC5cbi8vXG4vLyBBIHN0cmljdCBjYXBpdGFsaXphdGlvbiBzaG91bGQgdXBwZXJjYXNlIHRoZSBmaXJzdCBsZXR0ZXIgb2YgZWFjaCB3b3JkIGluIHRoZSBzZW50ZW5jZS5cbi8vIFdlIG9ubHkgaGFuZGxlIHRoZSBmaXJzdCB3b3JkLlxuZnVuY3Rpb24gY2FwaXRhbGl6ZShzdHJpbmcpIHtcbiAgaWYgKHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGBNVUk6IFxcYGNhcGl0YWxpemUoc3RyaW5nKVxcYCBleHBlY3RzIGEgc3RyaW5nIGFyZ3VtZW50LmAgOiAoMCwgX2Zvcm1hdE11aUVycm9yTWVzc2FnZTIuZGVmYXVsdCkoNykpO1xuICB9XG4gIHJldHVybiBzdHJpbmcuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzdHJpbmcuc2xpY2UoMSk7XG59IiwgIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZWZhdWx0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9jYXBpdGFsaXplLmRlZmF1bHQ7XG4gIH1cbn0pO1xudmFyIF9jYXBpdGFsaXplID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9jYXBpdGFsaXplXCIpKTsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSBnZXREaXNwbGF5TmFtZTtcbmV4cG9ydHMuZ2V0RnVuY3Rpb25OYW1lID0gZ2V0RnVuY3Rpb25OYW1lO1xudmFyIF9yZWFjdElzID0gcmVxdWlyZShcInJlYWN0LWlzXCIpO1xuLy8gU2ltcGxpZmllZCBwb2x5ZmlsbCBmb3IgSUUxMSBzdXBwb3J0XG4vLyBodHRwczovL2dpdGh1Yi5jb20vSmFtZXNNR3JlZW5lL0Z1bmN0aW9uLm5hbWUvYmxvYi81OGIzMTRkNGE5ODMxMTBjMzY4MmYxMjI4Zjg0NWQzOWNjY2ExODE3L0Z1bmN0aW9uLm5hbWUuanMjTDNcbmNvbnN0IGZuTmFtZU1hdGNoUmVnZXggPSAvXlxccypmdW5jdGlvbig/Olxcc3xcXHMqXFwvXFwqLipcXCpcXC9cXHMqKSsoW14oXFxzL10qKVxccyovO1xuZnVuY3Rpb24gZ2V0RnVuY3Rpb25OYW1lKGZuKSB7XG4gIGNvbnN0IG1hdGNoID0gYCR7Zm59YC5tYXRjaChmbk5hbWVNYXRjaFJlZ2V4KTtcbiAgY29uc3QgbmFtZSA9IG1hdGNoICYmIG1hdGNoWzFdO1xuICByZXR1cm4gbmFtZSB8fCAnJztcbn1cbmZ1bmN0aW9uIGdldEZ1bmN0aW9uQ29tcG9uZW50TmFtZShDb21wb25lbnQsIGZhbGxiYWNrID0gJycpIHtcbiAgcmV0dXJuIENvbXBvbmVudC5kaXNwbGF5TmFtZSB8fCBDb21wb25lbnQubmFtZSB8fCBnZXRGdW5jdGlvbk5hbWUoQ29tcG9uZW50KSB8fCBmYWxsYmFjaztcbn1cbmZ1bmN0aW9uIGdldFdyYXBwZWROYW1lKG91dGVyVHlwZSwgaW5uZXJUeXBlLCB3cmFwcGVyTmFtZSkge1xuICBjb25zdCBmdW5jdGlvbk5hbWUgPSBnZXRGdW5jdGlvbkNvbXBvbmVudE5hbWUoaW5uZXJUeXBlKTtcbiAgcmV0dXJuIG91dGVyVHlwZS5kaXNwbGF5TmFtZSB8fCAoZnVuY3Rpb25OYW1lICE9PSAnJyA/IGAke3dyYXBwZXJOYW1lfSgke2Z1bmN0aW9uTmFtZX0pYCA6IHdyYXBwZXJOYW1lKTtcbn1cblxuLyoqXG4gKiBjaGVycnktcGljayBmcm9tXG4gKiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvYmxvYi83NjliMWYyNzBlMTI1MWQ5ZGJkY2UwZmNiZDllOTJlNTAyZDA1OWI4L3BhY2thZ2VzL3NoYXJlZC9nZXRDb21wb25lbnROYW1lLmpzXG4gKiBvcmlnaW5hbGx5IGZvcmtlZCBmcm9tIHJlY29tcG9zZS9nZXREaXNwbGF5TmFtZSB3aXRoIGFkZGVkIElFMTEgc3VwcG9ydFxuICovXG5mdW5jdGlvbiBnZXREaXNwbGF5TmFtZShDb21wb25lbnQpIHtcbiAgaWYgKENvbXBvbmVudCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAodHlwZW9mIENvbXBvbmVudCA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gQ29tcG9uZW50O1xuICB9XG4gIGlmICh0eXBlb2YgQ29tcG9uZW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGdldEZ1bmN0aW9uQ29tcG9uZW50TmFtZShDb21wb25lbnQsICdDb21wb25lbnQnKTtcbiAgfVxuXG4gIC8vIFR5cGVTY3JpcHQgY2FuJ3QgaGF2ZSBjb21wb25lbnRzIGFzIG9iamVjdHMgYnV0IHRoZXkgZXhpc3QgaW4gdGhlIGZvcm0gb2YgYG1lbW9gIG9yIGBTdXNwZW5zZWBcbiAgaWYgKHR5cGVvZiBDb21wb25lbnQgPT09ICdvYmplY3QnKSB7XG4gICAgc3dpdGNoIChDb21wb25lbnQuJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgX3JlYWN0SXMuRm9yd2FyZFJlZjpcbiAgICAgICAgcmV0dXJuIGdldFdyYXBwZWROYW1lKENvbXBvbmVudCwgQ29tcG9uZW50LnJlbmRlciwgJ0ZvcndhcmRSZWYnKTtcbiAgICAgIGNhc2UgX3JlYWN0SXMuTWVtbzpcbiAgICAgICAgcmV0dXJuIGdldFdyYXBwZWROYW1lKENvbXBvbmVudCwgQ29tcG9uZW50LnR5cGUsICdtZW1vJyk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufSIsICJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbnZhciBfZXhwb3J0TmFtZXMgPSB7fTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRlZmF1bHRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX2dldERpc3BsYXlOYW1lLmRlZmF1bHQ7XG4gIH1cbn0pO1xudmFyIF9nZXREaXNwbGF5TmFtZSA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKHJlcXVpcmUoXCIuL2dldERpc3BsYXlOYW1lXCIpKTtcbk9iamVjdC5rZXlzKF9nZXREaXNwbGF5TmFtZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gIGlmIChrZXkgPT09IFwiZGVmYXVsdFwiIHx8IGtleSA9PT0gXCJfX2VzTW9kdWxlXCIpIHJldHVybjtcbiAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfZXhwb3J0TmFtZXMsIGtleSkpIHJldHVybjtcbiAgaWYgKGtleSBpbiBleHBvcnRzICYmIGV4cG9ydHNba2V5XSA9PT0gX2dldERpc3BsYXlOYW1lW2tleV0pIHJldHVybjtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX2dldERpc3BsYXlOYW1lW2tleV07XG4gICAgfVxuICB9KTtcbn0pO1xuZnVuY3Rpb24gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgV2Vha01hcCkgcmV0dXJuIG51bGw7IHZhciByID0gbmV3IFdlYWtNYXAoKSwgdCA9IG5ldyBXZWFrTWFwKCk7IHJldHVybiAoX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlID0gZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUgPyB0IDogcjsgfSkoZSk7IH1cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKGUsIHIpIHsgaWYgKCFyICYmIGUgJiYgZS5fX2VzTW9kdWxlKSByZXR1cm4gZTsgaWYgKG51bGwgPT09IGUgfHwgXCJvYmplY3RcIiAhPSB0eXBlb2YgZSAmJiBcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUpIHJldHVybiB7IGRlZmF1bHQ6IGUgfTsgdmFyIHQgPSBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUocik7IGlmICh0ICYmIHQuaGFzKGUpKSByZXR1cm4gdC5nZXQoZSk7IHZhciBuID0geyBfX3Byb3RvX186IG51bGwgfSwgYSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOyBmb3IgKHZhciB1IGluIGUpIGlmIChcImRlZmF1bHRcIiAhPT0gdSAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSwgdSkpIHsgdmFyIGkgPSBhID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCB1KSA6IG51bGw7IGkgJiYgKGkuZ2V0IHx8IGkuc2V0KSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCB1LCBpKSA6IG5bdV0gPSBlW3VdOyB9IHJldHVybiBuLmRlZmF1bHQgPSBlLCB0ICYmIHQuc2V0KGUsIG4pLCBuOyB9IiwgIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuZnVuY3Rpb24gY2xhbXAodmFsLCBtaW4gPSBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUiwgbWF4ID0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpIHtcbiAgcmV0dXJuIE1hdGgubWF4KG1pbiwgTWF0aC5taW4odmFsLCBtYXgpKTtcbn1cbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9IGNsYW1wOyIsICJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVmYXVsdFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfY2xhbXAuZGVmYXVsdDtcbiAgfVxufSk7XG52YXIgX2NsYW1wID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9jbGFtcFwiKSk7IiwgIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG52YXIgX2RlZXBtZXJnZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIkBtdWkvdXRpbHMvZGVlcG1lcmdlXCIpKTtcbmZ1bmN0aW9uIG1lcmdlKGFjYywgaXRlbSkge1xuICBpZiAoIWl0ZW0pIHtcbiAgICByZXR1cm4gYWNjO1xuICB9XG4gIHJldHVybiAoMCwgX2RlZXBtZXJnZS5kZWZhdWx0KShhY2MsIGl0ZW0sIHtcbiAgICBjbG9uZTogZmFsc2UgLy8gTm8gbmVlZCB0byBjbG9uZSBkZWVwLCBpdCdzIHdheSBmYXN0ZXIuXG4gIH0pO1xufVxudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gbWVyZ2U7IiwgIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG52YXIgX3Byb3BUeXBlcyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcInByb3AtdHlwZXNcIikpO1xuY29uc3QgcmVzcG9uc2l2ZVByb3BUeXBlID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IF9wcm9wVHlwZXMuZGVmYXVsdC5vbmVPZlR5cGUoW19wcm9wVHlwZXMuZGVmYXVsdC5udW1iZXIsIF9wcm9wVHlwZXMuZGVmYXVsdC5zdHJpbmcsIF9wcm9wVHlwZXMuZGVmYXVsdC5vYmplY3QsIF9wcm9wVHlwZXMuZGVmYXVsdC5hcnJheV0pIDoge307XG52YXIgX2RlZmF1bHQgPSBleHBvcnRzLmRlZmF1bHQgPSByZXNwb25zaXZlUHJvcFR5cGU7IiwgIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNvbXB1dGVCcmVha3BvaW50c0Jhc2UgPSBjb21wdXRlQnJlYWtwb2ludHNCYXNlO1xuZXhwb3J0cy5jcmVhdGVFbXB0eUJyZWFrcG9pbnRPYmplY3QgPSBjcmVhdGVFbXB0eUJyZWFrcG9pbnRPYmplY3Q7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5leHBvcnRzLmhhbmRsZUJyZWFrcG9pbnRzID0gaGFuZGxlQnJlYWtwb2ludHM7XG5leHBvcnRzLm1lcmdlQnJlYWtwb2ludHNJbk9yZGVyID0gbWVyZ2VCcmVha3BvaW50c0luT3JkZXI7XG5leHBvcnRzLnJlbW92ZVVudXNlZEJyZWFrcG9pbnRzID0gcmVtb3ZlVW51c2VkQnJlYWtwb2ludHM7XG5leHBvcnRzLnJlc29sdmVCcmVha3BvaW50VmFsdWVzID0gcmVzb2x2ZUJyZWFrcG9pbnRWYWx1ZXM7XG5leHBvcnRzLnZhbHVlcyA9IHZvaWQgMDtcbnZhciBfZXh0ZW5kczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2V4dGVuZHNcIikpO1xudmFyIF9wcm9wVHlwZXMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJwcm9wLXR5cGVzXCIpKTtcbnZhciBfZGVlcG1lcmdlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiQG11aS91dGlscy9kZWVwbWVyZ2VcIikpO1xudmFyIF9tZXJnZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vbWVyZ2VcIikpO1xuLy8gVGhlIGJyZWFrcG9pbnQgKipzdGFydCoqIGF0IHRoaXMgdmFsdWUuXG4vLyBGb3IgaW5zdGFuY2Ugd2l0aCB0aGUgZmlyc3QgYnJlYWtwb2ludCB4czogW3hzLCBzbVsuXG5jb25zdCB2YWx1ZXMgPSBleHBvcnRzLnZhbHVlcyA9IHtcbiAgeHM6IDAsXG4gIC8vIHBob25lXG4gIHNtOiA2MDAsXG4gIC8vIHRhYmxldFxuICBtZDogOTAwLFxuICAvLyBzbWFsbCBsYXB0b3BcbiAgbGc6IDEyMDAsXG4gIC8vIGRlc2t0b3BcbiAgeGw6IDE1MzYgLy8gbGFyZ2Ugc2NyZWVuXG59O1xuY29uc3QgZGVmYXVsdEJyZWFrcG9pbnRzID0ge1xuICAvLyBTb3J0ZWQgQVNDIGJ5IHNpemUuIFRoYXQncyBpbXBvcnRhbnQuXG4gIC8vIEl0IGNhbid0IGJlIGNvbmZpZ3VyZWQgYXMgaXQncyB1c2VkIHN0YXRpY2FsbHkgZm9yIHByb3BUeXBlcy5cbiAga2V5czogWyd4cycsICdzbScsICdtZCcsICdsZycsICd4bCddLFxuICB1cDoga2V5ID0+IGBAbWVkaWEgKG1pbi13aWR0aDoke3ZhbHVlc1trZXldfXB4KWBcbn07XG5mdW5jdGlvbiBoYW5kbGVCcmVha3BvaW50cyhwcm9wcywgcHJvcFZhbHVlLCBzdHlsZUZyb21Qcm9wVmFsdWUpIHtcbiAgY29uc3QgdGhlbWUgPSBwcm9wcy50aGVtZSB8fCB7fTtcbiAgaWYgKEFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSkge1xuICAgIGNvbnN0IHRoZW1lQnJlYWtwb2ludHMgPSB0aGVtZS5icmVha3BvaW50cyB8fCBkZWZhdWx0QnJlYWtwb2ludHM7XG4gICAgcmV0dXJuIHByb3BWYWx1ZS5yZWR1Y2UoKGFjYywgaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgIGFjY1t0aGVtZUJyZWFrcG9pbnRzLnVwKHRoZW1lQnJlYWtwb2ludHMua2V5c1tpbmRleF0pXSA9IHN0eWxlRnJvbVByb3BWYWx1ZShwcm9wVmFsdWVbaW5kZXhdKTtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30pO1xuICB9XG4gIGlmICh0eXBlb2YgcHJvcFZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgIGNvbnN0IHRoZW1lQnJlYWtwb2ludHMgPSB0aGVtZS5icmVha3BvaW50cyB8fCBkZWZhdWx0QnJlYWtwb2ludHM7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHByb3BWYWx1ZSkucmVkdWNlKChhY2MsIGJyZWFrcG9pbnQpID0+IHtcbiAgICAgIC8vIGtleSBpcyBicmVha3BvaW50XG4gICAgICBpZiAoT2JqZWN0LmtleXModGhlbWVCcmVha3BvaW50cy52YWx1ZXMgfHwgdmFsdWVzKS5pbmRleE9mKGJyZWFrcG9pbnQpICE9PSAtMSkge1xuICAgICAgICBjb25zdCBtZWRpYUtleSA9IHRoZW1lQnJlYWtwb2ludHMudXAoYnJlYWtwb2ludCk7XG4gICAgICAgIGFjY1ttZWRpYUtleV0gPSBzdHlsZUZyb21Qcm9wVmFsdWUocHJvcFZhbHVlW2JyZWFrcG9pbnRdLCBicmVha3BvaW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGNzc0tleSA9IGJyZWFrcG9pbnQ7XG4gICAgICAgIGFjY1tjc3NLZXldID0gcHJvcFZhbHVlW2Nzc0tleV07XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KTtcbiAgfVxuICBjb25zdCBvdXRwdXQgPSBzdHlsZUZyb21Qcm9wVmFsdWUocHJvcFZhbHVlKTtcbiAgcmV0dXJuIG91dHB1dDtcbn1cbmZ1bmN0aW9uIGJyZWFrcG9pbnRzKHN0eWxlRnVuY3Rpb24pIHtcbiAgLy8gZmFsc2UgcG9zaXRpdmVcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L2Z1bmN0aW9uLWNvbXBvbmVudC1kZWZpbml0aW9uXG4gIGNvbnN0IG5ld1N0eWxlRnVuY3Rpb24gPSBwcm9wcyA9PiB7XG4gICAgY29uc3QgdGhlbWUgPSBwcm9wcy50aGVtZSB8fCB7fTtcbiAgICBjb25zdCBiYXNlID0gc3R5bGVGdW5jdGlvbihwcm9wcyk7XG4gICAgY29uc3QgdGhlbWVCcmVha3BvaW50cyA9IHRoZW1lLmJyZWFrcG9pbnRzIHx8IGRlZmF1bHRCcmVha3BvaW50cztcbiAgICBjb25zdCBleHRlbmRlZCA9IHRoZW1lQnJlYWtwb2ludHMua2V5cy5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gICAgICBpZiAocHJvcHNba2V5XSkge1xuICAgICAgICBhY2MgPSBhY2MgfHwge307XG4gICAgICAgIGFjY1t0aGVtZUJyZWFrcG9pbnRzLnVwKGtleSldID0gc3R5bGVGdW5jdGlvbigoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHtcbiAgICAgICAgICB0aGVtZVxuICAgICAgICB9LCBwcm9wc1trZXldKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIG51bGwpO1xuICAgIHJldHVybiAoMCwgX21lcmdlLmRlZmF1bHQpKGJhc2UsIGV4dGVuZGVkKTtcbiAgfTtcbiAgbmV3U3R5bGVGdW5jdGlvbi5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gKDAsIF9leHRlbmRzMi5kZWZhdWx0KSh7fSwgc3R5bGVGdW5jdGlvbi5wcm9wVHlwZXMsIHtcbiAgICB4czogX3Byb3BUeXBlcy5kZWZhdWx0Lm9iamVjdCxcbiAgICBzbTogX3Byb3BUeXBlcy5kZWZhdWx0Lm9iamVjdCxcbiAgICBtZDogX3Byb3BUeXBlcy5kZWZhdWx0Lm9iamVjdCxcbiAgICBsZzogX3Byb3BUeXBlcy5kZWZhdWx0Lm9iamVjdCxcbiAgICB4bDogX3Byb3BUeXBlcy5kZWZhdWx0Lm9iamVjdFxuICB9KSA6IHt9O1xuICBuZXdTdHlsZUZ1bmN0aW9uLmZpbHRlclByb3BzID0gWyd4cycsICdzbScsICdtZCcsICdsZycsICd4bCcsIC4uLnN0eWxlRnVuY3Rpb24uZmlsdGVyUHJvcHNdO1xuICByZXR1cm4gbmV3U3R5bGVGdW5jdGlvbjtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUVtcHR5QnJlYWtwb2ludE9iamVjdChicmVha3BvaW50c0lucHV0ID0ge30pIHtcbiAgdmFyIF9icmVha3BvaW50c0lucHV0JGtleTtcbiAgY29uc3QgYnJlYWtwb2ludHNJbk9yZGVyID0gKF9icmVha3BvaW50c0lucHV0JGtleSA9IGJyZWFrcG9pbnRzSW5wdXQua2V5cykgPT0gbnVsbCA/IHZvaWQgMCA6IF9icmVha3BvaW50c0lucHV0JGtleS5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gICAgY29uc3QgYnJlYWtwb2ludFN0eWxlS2V5ID0gYnJlYWtwb2ludHNJbnB1dC51cChrZXkpO1xuICAgIGFjY1ticmVha3BvaW50U3R5bGVLZXldID0ge307XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xuICByZXR1cm4gYnJlYWtwb2ludHNJbk9yZGVyIHx8IHt9O1xufVxuZnVuY3Rpb24gcmVtb3ZlVW51c2VkQnJlYWtwb2ludHMoYnJlYWtwb2ludEtleXMsIHN0eWxlKSB7XG4gIHJldHVybiBicmVha3BvaW50S2V5cy5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gICAgY29uc3QgYnJlYWtwb2ludE91dHB1dCA9IGFjY1trZXldO1xuICAgIGNvbnN0IGlzQnJlYWtwb2ludFVudXNlZCA9ICFicmVha3BvaW50T3V0cHV0IHx8IE9iamVjdC5rZXlzKGJyZWFrcG9pbnRPdXRwdXQpLmxlbmd0aCA9PT0gMDtcbiAgICBpZiAoaXNCcmVha3BvaW50VW51c2VkKSB7XG4gICAgICBkZWxldGUgYWNjW2tleV07XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIHN0eWxlKTtcbn1cbmZ1bmN0aW9uIG1lcmdlQnJlYWtwb2ludHNJbk9yZGVyKGJyZWFrcG9pbnRzSW5wdXQsIC4uLnN0eWxlcykge1xuICBjb25zdCBlbXB0eUJyZWFrcG9pbnRzID0gY3JlYXRlRW1wdHlCcmVha3BvaW50T2JqZWN0KGJyZWFrcG9pbnRzSW5wdXQpO1xuICBjb25zdCBtZXJnZWRPdXRwdXQgPSBbZW1wdHlCcmVha3BvaW50cywgLi4uc3R5bGVzXS5yZWR1Y2UoKHByZXYsIG5leHQpID0+ICgwLCBfZGVlcG1lcmdlLmRlZmF1bHQpKHByZXYsIG5leHQpLCB7fSk7XG4gIHJldHVybiByZW1vdmVVbnVzZWRCcmVha3BvaW50cyhPYmplY3Qua2V5cyhlbXB0eUJyZWFrcG9pbnRzKSwgbWVyZ2VkT3V0cHV0KTtcbn1cblxuLy8gY29tcHV0ZSBiYXNlIGZvciByZXNwb25zaXZlIHZhbHVlczsgZS5nLixcbi8vIFsxLDIsM10gPT4ge3hzOiB0cnVlLCBzbTogdHJ1ZSwgbWQ6IHRydWV9XG4vLyB7eHM6IDEsIHNtOiAyLCBtZDogM30gPT4ge3hzOiB0cnVlLCBzbTogdHJ1ZSwgbWQ6IHRydWV9XG5mdW5jdGlvbiBjb21wdXRlQnJlYWtwb2ludHNCYXNlKGJyZWFrcG9pbnRWYWx1ZXMsIHRoZW1lQnJlYWtwb2ludHMpIHtcbiAgLy8gZml4ZWQgdmFsdWVcbiAgaWYgKHR5cGVvZiBicmVha3BvaW50VmFsdWVzICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiB7fTtcbiAgfVxuICBjb25zdCBiYXNlID0ge307XG4gIGNvbnN0IGJyZWFrcG9pbnRzS2V5cyA9IE9iamVjdC5rZXlzKHRoZW1lQnJlYWtwb2ludHMpO1xuICBpZiAoQXJyYXkuaXNBcnJheShicmVha3BvaW50VmFsdWVzKSkge1xuICAgIGJyZWFrcG9pbnRzS2V5cy5mb3JFYWNoKChicmVha3BvaW50LCBpKSA9PiB7XG4gICAgICBpZiAoaSA8IGJyZWFrcG9pbnRWYWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgIGJhc2VbYnJlYWtwb2ludF0gPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGJyZWFrcG9pbnRzS2V5cy5mb3JFYWNoKGJyZWFrcG9pbnQgPT4ge1xuICAgICAgaWYgKGJyZWFrcG9pbnRWYWx1ZXNbYnJlYWtwb2ludF0gIT0gbnVsbCkge1xuICAgICAgICBiYXNlW2JyZWFrcG9pbnRdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4gYmFzZTtcbn1cbmZ1bmN0aW9uIHJlc29sdmVCcmVha3BvaW50VmFsdWVzKHtcbiAgdmFsdWVzOiBicmVha3BvaW50VmFsdWVzLFxuICBicmVha3BvaW50czogdGhlbWVCcmVha3BvaW50cyxcbiAgYmFzZTogY3VzdG9tQmFzZVxufSkge1xuICBjb25zdCBiYXNlID0gY3VzdG9tQmFzZSB8fCBjb21wdXRlQnJlYWtwb2ludHNCYXNlKGJyZWFrcG9pbnRWYWx1ZXMsIHRoZW1lQnJlYWtwb2ludHMpO1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoYmFzZSk7XG4gIGlmIChrZXlzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBicmVha3BvaW50VmFsdWVzO1xuICB9XG4gIGxldCBwcmV2aW91cztcbiAgcmV0dXJuIGtleXMucmVkdWNlKChhY2MsIGJyZWFrcG9pbnQsIGkpID0+IHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShicmVha3BvaW50VmFsdWVzKSkge1xuICAgICAgYWNjW2JyZWFrcG9pbnRdID0gYnJlYWtwb2ludFZhbHVlc1tpXSAhPSBudWxsID8gYnJlYWtwb2ludFZhbHVlc1tpXSA6IGJyZWFrcG9pbnRWYWx1ZXNbcHJldmlvdXNdO1xuICAgICAgcHJldmlvdXMgPSBpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGJyZWFrcG9pbnRWYWx1ZXMgPT09ICdvYmplY3QnKSB7XG4gICAgICBhY2NbYnJlYWtwb2ludF0gPSBicmVha3BvaW50VmFsdWVzW2JyZWFrcG9pbnRdICE9IG51bGwgPyBicmVha3BvaW50VmFsdWVzW2JyZWFrcG9pbnRdIDogYnJlYWtwb2ludFZhbHVlc1twcmV2aW91c107XG4gICAgICBwcmV2aW91cyA9IGJyZWFrcG9pbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFjY1ticmVha3BvaW50XSA9IGJyZWFrcG9pbnRWYWx1ZXM7XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbn1cbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9IGJyZWFrcG9pbnRzOyIsICJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuZXhwb3J0cy5nZXRQYXRoID0gZ2V0UGF0aDtcbmV4cG9ydHMuZ2V0U3R5bGVWYWx1ZSA9IGdldFN0eWxlVmFsdWU7XG52YXIgX2NhcGl0YWxpemUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJAbXVpL3V0aWxzL2NhcGl0YWxpemVcIikpO1xudmFyIF9yZXNwb25zaXZlUHJvcFR5cGUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3Jlc3BvbnNpdmVQcm9wVHlwZVwiKSk7XG52YXIgX2JyZWFrcG9pbnRzID0gcmVxdWlyZShcIi4vYnJlYWtwb2ludHNcIik7XG5mdW5jdGlvbiBnZXRQYXRoKG9iaiwgcGF0aCwgY2hlY2tWYXJzID0gdHJ1ZSkge1xuICBpZiAoIXBhdGggfHwgdHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBDaGVjayBpZiBDU1MgdmFyaWFibGVzIGFyZSB1c2VkXG4gIGlmIChvYmogJiYgb2JqLnZhcnMgJiYgY2hlY2tWYXJzKSB7XG4gICAgY29uc3QgdmFsID0gYHZhcnMuJHtwYXRofWAuc3BsaXQoJy4nKS5yZWR1Y2UoKGFjYywgaXRlbSkgPT4gYWNjICYmIGFjY1tpdGVtXSA/IGFjY1tpdGVtXSA6IG51bGwsIG9iaik7XG4gICAgaWYgKHZhbCAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gdmFsO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcGF0aC5zcGxpdCgnLicpLnJlZHVjZSgoYWNjLCBpdGVtKSA9PiB7XG4gICAgaWYgKGFjYyAmJiBhY2NbaXRlbV0gIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGFjY1tpdGVtXTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH0sIG9iaik7XG59XG5mdW5jdGlvbiBnZXRTdHlsZVZhbHVlKHRoZW1lTWFwcGluZywgdHJhbnNmb3JtLCBwcm9wVmFsdWVGaW5hbCwgdXNlclZhbHVlID0gcHJvcFZhbHVlRmluYWwpIHtcbiAgbGV0IHZhbHVlO1xuICBpZiAodHlwZW9mIHRoZW1lTWFwcGluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhbHVlID0gdGhlbWVNYXBwaW5nKHByb3BWYWx1ZUZpbmFsKTtcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHRoZW1lTWFwcGluZykpIHtcbiAgICB2YWx1ZSA9IHRoZW1lTWFwcGluZ1twcm9wVmFsdWVGaW5hbF0gfHwgdXNlclZhbHVlO1xuICB9IGVsc2Uge1xuICAgIHZhbHVlID0gZ2V0UGF0aCh0aGVtZU1hcHBpbmcsIHByb3BWYWx1ZUZpbmFsKSB8fCB1c2VyVmFsdWU7XG4gIH1cbiAgaWYgKHRyYW5zZm9ybSkge1xuICAgIHZhbHVlID0gdHJhbnNmb3JtKHZhbHVlLCB1c2VyVmFsdWUsIHRoZW1lTWFwcGluZyk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuZnVuY3Rpb24gc3R5bGUob3B0aW9ucykge1xuICBjb25zdCB7XG4gICAgcHJvcCxcbiAgICBjc3NQcm9wZXJ0eSA9IG9wdGlvbnMucHJvcCxcbiAgICB0aGVtZUtleSxcbiAgICB0cmFuc2Zvcm1cbiAgfSA9IG9wdGlvbnM7XG5cbiAgLy8gZmFsc2UgcG9zaXRpdmVcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L2Z1bmN0aW9uLWNvbXBvbmVudC1kZWZpbml0aW9uXG4gIGNvbnN0IGZuID0gcHJvcHMgPT4ge1xuICAgIGlmIChwcm9wc1twcm9wXSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgcHJvcFZhbHVlID0gcHJvcHNbcHJvcF07XG4gICAgY29uc3QgdGhlbWUgPSBwcm9wcy50aGVtZTtcbiAgICBjb25zdCB0aGVtZU1hcHBpbmcgPSBnZXRQYXRoKHRoZW1lLCB0aGVtZUtleSkgfHwge307XG4gICAgY29uc3Qgc3R5bGVGcm9tUHJvcFZhbHVlID0gcHJvcFZhbHVlRmluYWwgPT4ge1xuICAgICAgbGV0IHZhbHVlID0gZ2V0U3R5bGVWYWx1ZSh0aGVtZU1hcHBpbmcsIHRyYW5zZm9ybSwgcHJvcFZhbHVlRmluYWwpO1xuICAgICAgaWYgKHByb3BWYWx1ZUZpbmFsID09PSB2YWx1ZSAmJiB0eXBlb2YgcHJvcFZhbHVlRmluYWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIC8vIEhhdmVuJ3QgZm91bmQgdmFsdWVcbiAgICAgICAgdmFsdWUgPSBnZXRTdHlsZVZhbHVlKHRoZW1lTWFwcGluZywgdHJhbnNmb3JtLCBgJHtwcm9wfSR7cHJvcFZhbHVlRmluYWwgPT09ICdkZWZhdWx0JyA/ICcnIDogKDAsIF9jYXBpdGFsaXplLmRlZmF1bHQpKHByb3BWYWx1ZUZpbmFsKX1gLCBwcm9wVmFsdWVGaW5hbCk7XG4gICAgICB9XG4gICAgICBpZiAoY3NzUHJvcGVydHkgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIFtjc3NQcm9wZXJ0eV06IHZhbHVlXG4gICAgICB9O1xuICAgIH07XG4gICAgcmV0dXJuICgwLCBfYnJlYWtwb2ludHMuaGFuZGxlQnJlYWtwb2ludHMpKHByb3BzLCBwcm9wVmFsdWUsIHN0eWxlRnJvbVByb3BWYWx1ZSk7XG4gIH07XG4gIGZuLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB7XG4gICAgW3Byb3BdOiBfcmVzcG9uc2l2ZVByb3BUeXBlLmRlZmF1bHRcbiAgfSA6IHt9O1xuICBmbi5maWx0ZXJQcm9wcyA9IFtwcm9wXTtcbiAgcmV0dXJuIGZuO1xufVxudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gc3R5bGU7IiwgIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gbWVtb2l6ZTtcbmZ1bmN0aW9uIG1lbW9pemUoZm4pIHtcbiAgY29uc3QgY2FjaGUgPSB7fTtcbiAgcmV0dXJuIGFyZyA9PiB7XG4gICAgaWYgKGNhY2hlW2FyZ10gPT09IHVuZGVmaW5lZCkge1xuICAgICAgY2FjaGVbYXJnXSA9IGZuKGFyZyk7XG4gICAgfVxuICAgIHJldHVybiBjYWNoZVthcmddO1xuICB9O1xufSIsICJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVVbmFyeVNwYWNpbmcgPSBjcmVhdGVVbmFyeVNwYWNpbmc7XG5leHBvcnRzLmNyZWF0ZVVuYXJ5VW5pdCA9IGNyZWF0ZVVuYXJ5VW5pdDtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbmV4cG9ydHMuZ2V0U3R5bGVGcm9tUHJvcFZhbHVlID0gZ2V0U3R5bGVGcm9tUHJvcFZhbHVlO1xuZXhwb3J0cy5nZXRWYWx1ZSA9IGdldFZhbHVlO1xuZXhwb3J0cy5tYXJnaW4gPSBtYXJnaW47XG5leHBvcnRzLm1hcmdpbktleXMgPSB2b2lkIDA7XG5leHBvcnRzLnBhZGRpbmcgPSBwYWRkaW5nO1xuZXhwb3J0cy5wYWRkaW5nS2V5cyA9IHZvaWQgMDtcbnZhciBfcmVzcG9uc2l2ZVByb3BUeXBlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9yZXNwb25zaXZlUHJvcFR5cGVcIikpO1xudmFyIF9icmVha3BvaW50cyA9IHJlcXVpcmUoXCIuL2JyZWFrcG9pbnRzXCIpO1xudmFyIF9zdHlsZSA9IHJlcXVpcmUoXCIuL3N0eWxlXCIpO1xudmFyIF9tZXJnZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vbWVyZ2VcIikpO1xudmFyIF9tZW1vaXplID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9tZW1vaXplXCIpKTtcbmNvbnN0IHByb3BlcnRpZXMgPSB7XG4gIG06ICdtYXJnaW4nLFxuICBwOiAncGFkZGluZydcbn07XG5jb25zdCBkaXJlY3Rpb25zID0ge1xuICB0OiAnVG9wJyxcbiAgcjogJ1JpZ2h0JyxcbiAgYjogJ0JvdHRvbScsXG4gIGw6ICdMZWZ0JyxcbiAgeDogWydMZWZ0JywgJ1JpZ2h0J10sXG4gIHk6IFsnVG9wJywgJ0JvdHRvbSddXG59O1xuY29uc3QgYWxpYXNlcyA9IHtcbiAgbWFyZ2luWDogJ214JyxcbiAgbWFyZ2luWTogJ215JyxcbiAgcGFkZGluZ1g6ICdweCcsXG4gIHBhZGRpbmdZOiAncHknXG59O1xuXG4vLyBtZW1vaXplKCkgaW1wYWN0OlxuLy8gRnJvbSAzMDAsMDAwIG9wcy9zZWNcbi8vIFRvIDM1MCwwMDAgb3BzL3NlY1xuY29uc3QgZ2V0Q3NzUHJvcGVydGllcyA9ICgwLCBfbWVtb2l6ZS5kZWZhdWx0KShwcm9wID0+IHtcbiAgLy8gSXQncyBub3QgYSBzaG9ydGhhbmQgbm90YXRpb24uXG4gIGlmIChwcm9wLmxlbmd0aCA+IDIpIHtcbiAgICBpZiAoYWxpYXNlc1twcm9wXSkge1xuICAgICAgcHJvcCA9IGFsaWFzZXNbcHJvcF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBbcHJvcF07XG4gICAgfVxuICB9XG4gIGNvbnN0IFthLCBiXSA9IHByb3Auc3BsaXQoJycpO1xuICBjb25zdCBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbYV07XG4gIGNvbnN0IGRpcmVjdGlvbiA9IGRpcmVjdGlvbnNbYl0gfHwgJyc7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KGRpcmVjdGlvbikgPyBkaXJlY3Rpb24ubWFwKGRpciA9PiBwcm9wZXJ0eSArIGRpcikgOiBbcHJvcGVydHkgKyBkaXJlY3Rpb25dO1xufSk7XG5jb25zdCBtYXJnaW5LZXlzID0gZXhwb3J0cy5tYXJnaW5LZXlzID0gWydtJywgJ210JywgJ21yJywgJ21iJywgJ21sJywgJ214JywgJ215JywgJ21hcmdpbicsICdtYXJnaW5Ub3AnLCAnbWFyZ2luUmlnaHQnLCAnbWFyZ2luQm90dG9tJywgJ21hcmdpbkxlZnQnLCAnbWFyZ2luWCcsICdtYXJnaW5ZJywgJ21hcmdpbklubGluZScsICdtYXJnaW5JbmxpbmVTdGFydCcsICdtYXJnaW5JbmxpbmVFbmQnLCAnbWFyZ2luQmxvY2snLCAnbWFyZ2luQmxvY2tTdGFydCcsICdtYXJnaW5CbG9ja0VuZCddO1xuY29uc3QgcGFkZGluZ0tleXMgPSBleHBvcnRzLnBhZGRpbmdLZXlzID0gWydwJywgJ3B0JywgJ3ByJywgJ3BiJywgJ3BsJywgJ3B4JywgJ3B5JywgJ3BhZGRpbmcnLCAncGFkZGluZ1RvcCcsICdwYWRkaW5nUmlnaHQnLCAncGFkZGluZ0JvdHRvbScsICdwYWRkaW5nTGVmdCcsICdwYWRkaW5nWCcsICdwYWRkaW5nWScsICdwYWRkaW5nSW5saW5lJywgJ3BhZGRpbmdJbmxpbmVTdGFydCcsICdwYWRkaW5nSW5saW5lRW5kJywgJ3BhZGRpbmdCbG9jaycsICdwYWRkaW5nQmxvY2tTdGFydCcsICdwYWRkaW5nQmxvY2tFbmQnXTtcbmNvbnN0IHNwYWNpbmdLZXlzID0gWy4uLm1hcmdpbktleXMsIC4uLnBhZGRpbmdLZXlzXTtcbmZ1bmN0aW9uIGNyZWF0ZVVuYXJ5VW5pdCh0aGVtZSwgdGhlbWVLZXksIGRlZmF1bHRWYWx1ZSwgcHJvcE5hbWUpIHtcbiAgdmFyIF9nZXRQYXRoO1xuICBjb25zdCB0aGVtZVNwYWNpbmcgPSAoX2dldFBhdGggPSAoMCwgX3N0eWxlLmdldFBhdGgpKHRoZW1lLCB0aGVtZUtleSwgZmFsc2UpKSAhPSBudWxsID8gX2dldFBhdGggOiBkZWZhdWx0VmFsdWU7XG4gIGlmICh0eXBlb2YgdGhlbWVTcGFjaW5nID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBhYnMgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBhYnMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBhYnM7XG4gICAgICB9XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBpZiAodHlwZW9mIGFicyAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBNVUk6IEV4cGVjdGVkICR7cHJvcE5hbWV9IGFyZ3VtZW50IHRvIGJlIGEgbnVtYmVyIG9yIGEgc3RyaW5nLCBnb3QgJHthYnN9LmApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhlbWVTcGFjaW5nICogYWJzO1xuICAgIH07XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkodGhlbWVTcGFjaW5nKSkge1xuICAgIHJldHVybiBhYnMgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBhYnMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBhYnM7XG4gICAgICB9XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoYWJzKSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoW2BNVUk6IFRoZSBcXGB0aGVtZS4ke3RoZW1lS2V5fVxcYCBhcnJheSB0eXBlIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIG5vbiBpbnRlZ2VyIHZhbHVlcy5gICsgYFlvdSBzaG91bGQgZWl0aGVyIHVzZSBhbiBpbnRlZ2VyIHZhbHVlIHRoYXQgY2FuIGJlIHVzZWQgYXMgaW5kZXgsIG9yIGRlZmluZSB0aGUgXFxgdGhlbWUuJHt0aGVtZUtleX1cXGAgYXMgYSBudW1iZXIuYF0uam9pbignXFxuJykpO1xuICAgICAgICB9IGVsc2UgaWYgKGFicyA+IHRoZW1lU3BhY2luZy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihbYE1VSTogVGhlIHZhbHVlIHByb3ZpZGVkICgke2Fic30pIG92ZXJmbG93cy5gLCBgVGhlIHN1cHBvcnRlZCB2YWx1ZXMgYXJlOiAke0pTT04uc3RyaW5naWZ5KHRoZW1lU3BhY2luZyl9LmAsIGAke2Fic30gPiAke3RoZW1lU3BhY2luZy5sZW5ndGggLSAxfSwgeW91IG5lZWQgdG8gYWRkIHRoZSBtaXNzaW5nIHZhbHVlcy5gXS5qb2luKCdcXG4nKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGVtZVNwYWNpbmdbYWJzXTtcbiAgICB9O1xuICB9XG4gIGlmICh0eXBlb2YgdGhlbWVTcGFjaW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHRoZW1lU3BhY2luZztcbiAgfVxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGNvbnNvbGUuZXJyb3IoW2BNVUk6IFRoZSBcXGB0aGVtZS4ke3RoZW1lS2V5fVxcYCB2YWx1ZSAoJHt0aGVtZVNwYWNpbmd9KSBpcyBpbnZhbGlkLmAsICdJdCBzaG91bGQgYmUgYSBudW1iZXIsIGFuIGFycmF5IG9yIGEgZnVuY3Rpb24uJ10uam9pbignXFxuJykpO1xuICB9XG4gIHJldHVybiAoKSA9PiB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBjcmVhdGVVbmFyeVNwYWNpbmcodGhlbWUpIHtcbiAgcmV0dXJuIGNyZWF0ZVVuYXJ5VW5pdCh0aGVtZSwgJ3NwYWNpbmcnLCA4LCAnc3BhY2luZycpO1xufVxuZnVuY3Rpb24gZ2V0VmFsdWUodHJhbnNmb3JtZXIsIHByb3BWYWx1ZSkge1xuICBpZiAodHlwZW9mIHByb3BWYWx1ZSA9PT0gJ3N0cmluZycgfHwgcHJvcFZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gcHJvcFZhbHVlO1xuICB9XG4gIGNvbnN0IGFicyA9IE1hdGguYWJzKHByb3BWYWx1ZSk7XG4gIGNvbnN0IHRyYW5zZm9ybWVkID0gdHJhbnNmb3JtZXIoYWJzKTtcbiAgaWYgKHByb3BWYWx1ZSA+PSAwKSB7XG4gICAgcmV0dXJuIHRyYW5zZm9ybWVkO1xuICB9XG4gIGlmICh0eXBlb2YgdHJhbnNmb3JtZWQgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIC10cmFuc2Zvcm1lZDtcbiAgfVxuICByZXR1cm4gYC0ke3RyYW5zZm9ybWVkfWA7XG59XG5mdW5jdGlvbiBnZXRTdHlsZUZyb21Qcm9wVmFsdWUoY3NzUHJvcGVydGllcywgdHJhbnNmb3JtZXIpIHtcbiAgcmV0dXJuIHByb3BWYWx1ZSA9PiBjc3NQcm9wZXJ0aWVzLnJlZHVjZSgoYWNjLCBjc3NQcm9wZXJ0eSkgPT4ge1xuICAgIGFjY1tjc3NQcm9wZXJ0eV0gPSBnZXRWYWx1ZSh0cmFuc2Zvcm1lciwgcHJvcFZhbHVlKTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG59XG5mdW5jdGlvbiByZXNvbHZlQ3NzUHJvcGVydHkocHJvcHMsIGtleXMsIHByb3AsIHRyYW5zZm9ybWVyKSB7XG4gIC8vIFVzaW5nIGEgaGFzaCBjb21wdXRhdGlvbiBvdmVyIGFuIGFycmF5IGl0ZXJhdGlvbiBjb3VsZCBiZSBmYXN0ZXIsIGJ1dCB3aXRoIG9ubHkgMjggaXRlbXMsXG4gIC8vIGl0J3MgZG9lc24ndCB3b3J0aCB0aGUgYnVuZGxlIHNpemUuXG4gIGlmIChrZXlzLmluZGV4T2YocHJvcCkgPT09IC0xKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgY3NzUHJvcGVydGllcyA9IGdldENzc1Byb3BlcnRpZXMocHJvcCk7XG4gIGNvbnN0IHN0eWxlRnJvbVByb3BWYWx1ZSA9IGdldFN0eWxlRnJvbVByb3BWYWx1ZShjc3NQcm9wZXJ0aWVzLCB0cmFuc2Zvcm1lcik7XG4gIGNvbnN0IHByb3BWYWx1ZSA9IHByb3BzW3Byb3BdO1xuICByZXR1cm4gKDAsIF9icmVha3BvaW50cy5oYW5kbGVCcmVha3BvaW50cykocHJvcHMsIHByb3BWYWx1ZSwgc3R5bGVGcm9tUHJvcFZhbHVlKTtcbn1cbmZ1bmN0aW9uIHN0eWxlKHByb3BzLCBrZXlzKSB7XG4gIGNvbnN0IHRyYW5zZm9ybWVyID0gY3JlYXRlVW5hcnlTcGFjaW5nKHByb3BzLnRoZW1lKTtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKHByb3BzKS5tYXAocHJvcCA9PiByZXNvbHZlQ3NzUHJvcGVydHkocHJvcHMsIGtleXMsIHByb3AsIHRyYW5zZm9ybWVyKSkucmVkdWNlKF9tZXJnZS5kZWZhdWx0LCB7fSk7XG59XG5mdW5jdGlvbiBtYXJnaW4ocHJvcHMpIHtcbiAgcmV0dXJuIHN0eWxlKHByb3BzLCBtYXJnaW5LZXlzKTtcbn1cbm1hcmdpbi5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gbWFyZ2luS2V5cy5yZWR1Y2UoKG9iaiwga2V5KSA9PiB7XG4gIG9ialtrZXldID0gX3Jlc3BvbnNpdmVQcm9wVHlwZS5kZWZhdWx0O1xuICByZXR1cm4gb2JqO1xufSwge30pIDoge307XG5tYXJnaW4uZmlsdGVyUHJvcHMgPSBtYXJnaW5LZXlzO1xuZnVuY3Rpb24gcGFkZGluZyhwcm9wcykge1xuICByZXR1cm4gc3R5bGUocHJvcHMsIHBhZGRpbmdLZXlzKTtcbn1cbnBhZGRpbmcucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHBhZGRpbmdLZXlzLnJlZHVjZSgob2JqLCBrZXkpID0+IHtcbiAgb2JqW2tleV0gPSBfcmVzcG9uc2l2ZVByb3BUeXBlLmRlZmF1bHQ7XG4gIHJldHVybiBvYmo7XG59LCB7fSkgOiB7fTtcbnBhZGRpbmcuZmlsdGVyUHJvcHMgPSBwYWRkaW5nS2V5cztcbmZ1bmN0aW9uIHNwYWNpbmcocHJvcHMpIHtcbiAgcmV0dXJuIHN0eWxlKHByb3BzLCBzcGFjaW5nS2V5cyk7XG59XG5zcGFjaW5nLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBzcGFjaW5nS2V5cy5yZWR1Y2UoKG9iaiwga2V5KSA9PiB7XG4gIG9ialtrZXldID0gX3Jlc3BvbnNpdmVQcm9wVHlwZS5kZWZhdWx0O1xuICByZXR1cm4gb2JqO1xufSwge30pIDoge307XG5zcGFjaW5nLmZpbHRlclByb3BzID0gc3BhY2luZ0tleXM7XG52YXIgX2RlZmF1bHQgPSBleHBvcnRzLmRlZmF1bHQgPSBzcGFjaW5nOyIsICJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xudmFyIF9tZXJnZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vbWVyZ2VcIikpO1xuZnVuY3Rpb24gY29tcG9zZSguLi5zdHlsZXMpIHtcbiAgY29uc3QgaGFuZGxlcnMgPSBzdHlsZXMucmVkdWNlKChhY2MsIHN0eWxlKSA9PiB7XG4gICAgc3R5bGUuZmlsdGVyUHJvcHMuZm9yRWFjaChwcm9wID0+IHtcbiAgICAgIGFjY1twcm9wXSA9IHN0eWxlO1xuICAgIH0pO1xuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcblxuICAvLyBmYWxzZSBwb3NpdGl2ZVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvZnVuY3Rpb24tY29tcG9uZW50LWRlZmluaXRpb25cbiAgY29uc3QgZm4gPSBwcm9wcyA9PiB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHByb3BzKS5yZWR1Y2UoKGFjYywgcHJvcCkgPT4ge1xuICAgICAgaWYgKGhhbmRsZXJzW3Byb3BdKSB7XG4gICAgICAgIHJldHVybiAoMCwgX21lcmdlLmRlZmF1bHQpKGFjYywgaGFuZGxlcnNbcHJvcF0ocHJvcHMpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30pO1xuICB9O1xuICBmbi5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gc3R5bGVzLnJlZHVjZSgoYWNjLCBzdHlsZSkgPT4gT2JqZWN0LmFzc2lnbihhY2MsIHN0eWxlLnByb3BUeXBlcyksIHt9KSA6IHt9O1xuICBmbi5maWx0ZXJQcm9wcyA9IHN0eWxlcy5yZWR1Y2UoKGFjYywgc3R5bGUpID0+IGFjYy5jb25jYXQoc3R5bGUuZmlsdGVyUHJvcHMpLCBbXSk7XG4gIHJldHVybiBmbjtcbn1cbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9IGNvbXBvc2U7IiwgIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmJvcmRlclRvcENvbG9yID0gZXhwb3J0cy5ib3JkZXJUb3AgPSBleHBvcnRzLmJvcmRlclJpZ2h0Q29sb3IgPSBleHBvcnRzLmJvcmRlclJpZ2h0ID0gZXhwb3J0cy5ib3JkZXJSYWRpdXMgPSBleHBvcnRzLmJvcmRlckxlZnRDb2xvciA9IGV4cG9ydHMuYm9yZGVyTGVmdCA9IGV4cG9ydHMuYm9yZGVyQ29sb3IgPSBleHBvcnRzLmJvcmRlckJvdHRvbUNvbG9yID0gZXhwb3J0cy5ib3JkZXJCb3R0b20gPSBleHBvcnRzLmJvcmRlciA9IHZvaWQgMDtcbmV4cG9ydHMuYm9yZGVyVHJhbnNmb3JtID0gYm9yZGVyVHJhbnNmb3JtO1xuZXhwb3J0cy5vdXRsaW5lQ29sb3IgPSBleHBvcnRzLm91dGxpbmUgPSBleHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG52YXIgX3Jlc3BvbnNpdmVQcm9wVHlwZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vcmVzcG9uc2l2ZVByb3BUeXBlXCIpKTtcbnZhciBfc3R5bGUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3N0eWxlXCIpKTtcbnZhciBfY29tcG9zZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vY29tcG9zZVwiKSk7XG52YXIgX3NwYWNpbmcgPSByZXF1aXJlKFwiLi9zcGFjaW5nXCIpO1xudmFyIF9icmVha3BvaW50cyA9IHJlcXVpcmUoXCIuL2JyZWFrcG9pbnRzXCIpO1xuZnVuY3Rpb24gYm9yZGVyVHJhbnNmb3JtKHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJldHVybiBgJHt2YWx1ZX1weCBzb2xpZGA7XG59XG5mdW5jdGlvbiBjcmVhdGVCb3JkZXJTdHlsZShwcm9wLCB0cmFuc2Zvcm0pIHtcbiAgcmV0dXJuICgwLCBfc3R5bGUuZGVmYXVsdCkoe1xuICAgIHByb3AsXG4gICAgdGhlbWVLZXk6ICdib3JkZXJzJyxcbiAgICB0cmFuc2Zvcm1cbiAgfSk7XG59XG5jb25zdCBib3JkZXIgPSBleHBvcnRzLmJvcmRlciA9IGNyZWF0ZUJvcmRlclN0eWxlKCdib3JkZXInLCBib3JkZXJUcmFuc2Zvcm0pO1xuY29uc3QgYm9yZGVyVG9wID0gZXhwb3J0cy5ib3JkZXJUb3AgPSBjcmVhdGVCb3JkZXJTdHlsZSgnYm9yZGVyVG9wJywgYm9yZGVyVHJhbnNmb3JtKTtcbmNvbnN0IGJvcmRlclJpZ2h0ID0gZXhwb3J0cy5ib3JkZXJSaWdodCA9IGNyZWF0ZUJvcmRlclN0eWxlKCdib3JkZXJSaWdodCcsIGJvcmRlclRyYW5zZm9ybSk7XG5jb25zdCBib3JkZXJCb3R0b20gPSBleHBvcnRzLmJvcmRlckJvdHRvbSA9IGNyZWF0ZUJvcmRlclN0eWxlKCdib3JkZXJCb3R0b20nLCBib3JkZXJUcmFuc2Zvcm0pO1xuY29uc3QgYm9yZGVyTGVmdCA9IGV4cG9ydHMuYm9yZGVyTGVmdCA9IGNyZWF0ZUJvcmRlclN0eWxlKCdib3JkZXJMZWZ0JywgYm9yZGVyVHJhbnNmb3JtKTtcbmNvbnN0IGJvcmRlckNvbG9yID0gZXhwb3J0cy5ib3JkZXJDb2xvciA9IGNyZWF0ZUJvcmRlclN0eWxlKCdib3JkZXJDb2xvcicpO1xuY29uc3QgYm9yZGVyVG9wQ29sb3IgPSBleHBvcnRzLmJvcmRlclRvcENvbG9yID0gY3JlYXRlQm9yZGVyU3R5bGUoJ2JvcmRlclRvcENvbG9yJyk7XG5jb25zdCBib3JkZXJSaWdodENvbG9yID0gZXhwb3J0cy5ib3JkZXJSaWdodENvbG9yID0gY3JlYXRlQm9yZGVyU3R5bGUoJ2JvcmRlclJpZ2h0Q29sb3InKTtcbmNvbnN0IGJvcmRlckJvdHRvbUNvbG9yID0gZXhwb3J0cy5ib3JkZXJCb3R0b21Db2xvciA9IGNyZWF0ZUJvcmRlclN0eWxlKCdib3JkZXJCb3R0b21Db2xvcicpO1xuY29uc3QgYm9yZGVyTGVmdENvbG9yID0gZXhwb3J0cy5ib3JkZXJMZWZ0Q29sb3IgPSBjcmVhdGVCb3JkZXJTdHlsZSgnYm9yZGVyTGVmdENvbG9yJyk7XG5jb25zdCBvdXRsaW5lID0gZXhwb3J0cy5vdXRsaW5lID0gY3JlYXRlQm9yZGVyU3R5bGUoJ291dGxpbmUnLCBib3JkZXJUcmFuc2Zvcm0pO1xuY29uc3Qgb3V0bGluZUNvbG9yID0gZXhwb3J0cy5vdXRsaW5lQ29sb3IgPSBjcmVhdGVCb3JkZXJTdHlsZSgnb3V0bGluZUNvbG9yJyk7XG5cbi8vIGZhbHNlIHBvc2l0aXZlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvZnVuY3Rpb24tY29tcG9uZW50LWRlZmluaXRpb25cbmNvbnN0IGJvcmRlclJhZGl1cyA9IHByb3BzID0+IHtcbiAgaWYgKHByb3BzLmJvcmRlclJhZGl1cyAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmJvcmRlclJhZGl1cyAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHRyYW5zZm9ybWVyID0gKDAsIF9zcGFjaW5nLmNyZWF0ZVVuYXJ5VW5pdCkocHJvcHMudGhlbWUsICdzaGFwZS5ib3JkZXJSYWRpdXMnLCA0LCAnYm9yZGVyUmFkaXVzJyk7XG4gICAgY29uc3Qgc3R5bGVGcm9tUHJvcFZhbHVlID0gcHJvcFZhbHVlID0+ICh7XG4gICAgICBib3JkZXJSYWRpdXM6ICgwLCBfc3BhY2luZy5nZXRWYWx1ZSkodHJhbnNmb3JtZXIsIHByb3BWYWx1ZSlcbiAgICB9KTtcbiAgICByZXR1cm4gKDAsIF9icmVha3BvaW50cy5oYW5kbGVCcmVha3BvaW50cykocHJvcHMsIHByb3BzLmJvcmRlclJhZGl1cywgc3R5bGVGcm9tUHJvcFZhbHVlKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5leHBvcnRzLmJvcmRlclJhZGl1cyA9IGJvcmRlclJhZGl1cztcbmJvcmRlclJhZGl1cy5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8ge1xuICBib3JkZXJSYWRpdXM6IF9yZXNwb25zaXZlUHJvcFR5cGUuZGVmYXVsdFxufSA6IHt9O1xuYm9yZGVyUmFkaXVzLmZpbHRlclByb3BzID0gWydib3JkZXJSYWRpdXMnXTtcbmNvbnN0IGJvcmRlcnMgPSAoMCwgX2NvbXBvc2UuZGVmYXVsdCkoYm9yZGVyLCBib3JkZXJUb3AsIGJvcmRlclJpZ2h0LCBib3JkZXJCb3R0b20sIGJvcmRlckxlZnQsIGJvcmRlckNvbG9yLCBib3JkZXJUb3BDb2xvciwgYm9yZGVyUmlnaHRDb2xvciwgYm9yZGVyQm90dG9tQ29sb3IsIGJvcmRlckxlZnRDb2xvciwgYm9yZGVyUmFkaXVzLCBvdXRsaW5lLCBvdXRsaW5lQ29sb3IpO1xudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gYm9yZGVyczsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucm93R2FwID0gZXhwb3J0cy5ncmlkVGVtcGxhdGVSb3dzID0gZXhwb3J0cy5ncmlkVGVtcGxhdGVDb2x1bW5zID0gZXhwb3J0cy5ncmlkVGVtcGxhdGVBcmVhcyA9IGV4cG9ydHMuZ3JpZFJvdyA9IGV4cG9ydHMuZ3JpZENvbHVtbiA9IGV4cG9ydHMuZ3JpZEF1dG9Sb3dzID0gZXhwb3J0cy5ncmlkQXV0b0Zsb3cgPSBleHBvcnRzLmdyaWRBdXRvQ29sdW1ucyA9IGV4cG9ydHMuZ3JpZEFyZWEgPSBleHBvcnRzLmdhcCA9IGV4cG9ydHMuZGVmYXVsdCA9IGV4cG9ydHMuY29sdW1uR2FwID0gdm9pZCAwO1xudmFyIF9zdHlsZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vc3R5bGVcIikpO1xudmFyIF9jb21wb3NlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9jb21wb3NlXCIpKTtcbnZhciBfc3BhY2luZyA9IHJlcXVpcmUoXCIuL3NwYWNpbmdcIik7XG52YXIgX2JyZWFrcG9pbnRzID0gcmVxdWlyZShcIi4vYnJlYWtwb2ludHNcIik7XG52YXIgX3Jlc3BvbnNpdmVQcm9wVHlwZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vcmVzcG9uc2l2ZVByb3BUeXBlXCIpKTtcbi8vIGZhbHNlIHBvc2l0aXZlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvZnVuY3Rpb24tY29tcG9uZW50LWRlZmluaXRpb25cbmNvbnN0IGdhcCA9IHByb3BzID0+IHtcbiAgaWYgKHByb3BzLmdhcCAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmdhcCAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHRyYW5zZm9ybWVyID0gKDAsIF9zcGFjaW5nLmNyZWF0ZVVuYXJ5VW5pdCkocHJvcHMudGhlbWUsICdzcGFjaW5nJywgOCwgJ2dhcCcpO1xuICAgIGNvbnN0IHN0eWxlRnJvbVByb3BWYWx1ZSA9IHByb3BWYWx1ZSA9PiAoe1xuICAgICAgZ2FwOiAoMCwgX3NwYWNpbmcuZ2V0VmFsdWUpKHRyYW5zZm9ybWVyLCBwcm9wVmFsdWUpXG4gICAgfSk7XG4gICAgcmV0dXJuICgwLCBfYnJlYWtwb2ludHMuaGFuZGxlQnJlYWtwb2ludHMpKHByb3BzLCBwcm9wcy5nYXAsIHN0eWxlRnJvbVByb3BWYWx1ZSk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuZXhwb3J0cy5nYXAgPSBnYXA7XG5nYXAucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHtcbiAgZ2FwOiBfcmVzcG9uc2l2ZVByb3BUeXBlLmRlZmF1bHRcbn0gOiB7fTtcbmdhcC5maWx0ZXJQcm9wcyA9IFsnZ2FwJ107XG5cbi8vIGZhbHNlIHBvc2l0aXZlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvZnVuY3Rpb24tY29tcG9uZW50LWRlZmluaXRpb25cbmNvbnN0IGNvbHVtbkdhcCA9IHByb3BzID0+IHtcbiAgaWYgKHByb3BzLmNvbHVtbkdhcCAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmNvbHVtbkdhcCAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHRyYW5zZm9ybWVyID0gKDAsIF9zcGFjaW5nLmNyZWF0ZVVuYXJ5VW5pdCkocHJvcHMudGhlbWUsICdzcGFjaW5nJywgOCwgJ2NvbHVtbkdhcCcpO1xuICAgIGNvbnN0IHN0eWxlRnJvbVByb3BWYWx1ZSA9IHByb3BWYWx1ZSA9PiAoe1xuICAgICAgY29sdW1uR2FwOiAoMCwgX3NwYWNpbmcuZ2V0VmFsdWUpKHRyYW5zZm9ybWVyLCBwcm9wVmFsdWUpXG4gICAgfSk7XG4gICAgcmV0dXJuICgwLCBfYnJlYWtwb2ludHMuaGFuZGxlQnJlYWtwb2ludHMpKHByb3BzLCBwcm9wcy5jb2x1bW5HYXAsIHN0eWxlRnJvbVByb3BWYWx1ZSk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuZXhwb3J0cy5jb2x1bW5HYXAgPSBjb2x1bW5HYXA7XG5jb2x1bW5HYXAucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHtcbiAgY29sdW1uR2FwOiBfcmVzcG9uc2l2ZVByb3BUeXBlLmRlZmF1bHRcbn0gOiB7fTtcbmNvbHVtbkdhcC5maWx0ZXJQcm9wcyA9IFsnY29sdW1uR2FwJ107XG5cbi8vIGZhbHNlIHBvc2l0aXZlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvZnVuY3Rpb24tY29tcG9uZW50LWRlZmluaXRpb25cbmNvbnN0IHJvd0dhcCA9IHByb3BzID0+IHtcbiAgaWYgKHByb3BzLnJvd0dhcCAhPT0gdW5kZWZpbmVkICYmIHByb3BzLnJvd0dhcCAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHRyYW5zZm9ybWVyID0gKDAsIF9zcGFjaW5nLmNyZWF0ZVVuYXJ5VW5pdCkocHJvcHMudGhlbWUsICdzcGFjaW5nJywgOCwgJ3Jvd0dhcCcpO1xuICAgIGNvbnN0IHN0eWxlRnJvbVByb3BWYWx1ZSA9IHByb3BWYWx1ZSA9PiAoe1xuICAgICAgcm93R2FwOiAoMCwgX3NwYWNpbmcuZ2V0VmFsdWUpKHRyYW5zZm9ybWVyLCBwcm9wVmFsdWUpXG4gICAgfSk7XG4gICAgcmV0dXJuICgwLCBfYnJlYWtwb2ludHMuaGFuZGxlQnJlYWtwb2ludHMpKHByb3BzLCBwcm9wcy5yb3dHYXAsIHN0eWxlRnJvbVByb3BWYWx1ZSk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuZXhwb3J0cy5yb3dHYXAgPSByb3dHYXA7XG5yb3dHYXAucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHtcbiAgcm93R2FwOiBfcmVzcG9uc2l2ZVByb3BUeXBlLmRlZmF1bHRcbn0gOiB7fTtcbnJvd0dhcC5maWx0ZXJQcm9wcyA9IFsncm93R2FwJ107XG5jb25zdCBncmlkQ29sdW1uID0gZXhwb3J0cy5ncmlkQ29sdW1uID0gKDAsIF9zdHlsZS5kZWZhdWx0KSh7XG4gIHByb3A6ICdncmlkQ29sdW1uJ1xufSk7XG5jb25zdCBncmlkUm93ID0gZXhwb3J0cy5ncmlkUm93ID0gKDAsIF9zdHlsZS5kZWZhdWx0KSh7XG4gIHByb3A6ICdncmlkUm93J1xufSk7XG5jb25zdCBncmlkQXV0b0Zsb3cgPSBleHBvcnRzLmdyaWRBdXRvRmxvdyA9ICgwLCBfc3R5bGUuZGVmYXVsdCkoe1xuICBwcm9wOiAnZ3JpZEF1dG9GbG93J1xufSk7XG5jb25zdCBncmlkQXV0b0NvbHVtbnMgPSBleHBvcnRzLmdyaWRBdXRvQ29sdW1ucyA9ICgwLCBfc3R5bGUuZGVmYXVsdCkoe1xuICBwcm9wOiAnZ3JpZEF1dG9Db2x1bW5zJ1xufSk7XG5jb25zdCBncmlkQXV0b1Jvd3MgPSBleHBvcnRzLmdyaWRBdXRvUm93cyA9ICgwLCBfc3R5bGUuZGVmYXVsdCkoe1xuICBwcm9wOiAnZ3JpZEF1dG9Sb3dzJ1xufSk7XG5jb25zdCBncmlkVGVtcGxhdGVDb2x1bW5zID0gZXhwb3J0cy5ncmlkVGVtcGxhdGVDb2x1bW5zID0gKDAsIF9zdHlsZS5kZWZhdWx0KSh7XG4gIHByb3A6ICdncmlkVGVtcGxhdGVDb2x1bW5zJ1xufSk7XG5jb25zdCBncmlkVGVtcGxhdGVSb3dzID0gZXhwb3J0cy5ncmlkVGVtcGxhdGVSb3dzID0gKDAsIF9zdHlsZS5kZWZhdWx0KSh7XG4gIHByb3A6ICdncmlkVGVtcGxhdGVSb3dzJ1xufSk7XG5jb25zdCBncmlkVGVtcGxhdGVBcmVhcyA9IGV4cG9ydHMuZ3JpZFRlbXBsYXRlQXJlYXMgPSAoMCwgX3N0eWxlLmRlZmF1bHQpKHtcbiAgcHJvcDogJ2dyaWRUZW1wbGF0ZUFyZWFzJ1xufSk7XG5jb25zdCBncmlkQXJlYSA9IGV4cG9ydHMuZ3JpZEFyZWEgPSAoMCwgX3N0eWxlLmRlZmF1bHQpKHtcbiAgcHJvcDogJ2dyaWRBcmVhJ1xufSk7XG5jb25zdCBncmlkID0gKDAsIF9jb21wb3NlLmRlZmF1bHQpKGdhcCwgY29sdW1uR2FwLCByb3dHYXAsIGdyaWRDb2x1bW4sIGdyaWRSb3csIGdyaWRBdXRvRmxvdywgZ3JpZEF1dG9Db2x1bW5zLCBncmlkQXV0b1Jvd3MsIGdyaWRUZW1wbGF0ZUNvbHVtbnMsIGdyaWRUZW1wbGF0ZVJvd3MsIGdyaWRUZW1wbGF0ZUFyZWFzLCBncmlkQXJlYSk7XG52YXIgX2RlZmF1bHQgPSBleHBvcnRzLmRlZmF1bHQgPSBncmlkOyIsICJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gZXhwb3J0cy5jb2xvciA9IGV4cG9ydHMuYmdjb2xvciA9IGV4cG9ydHMuYmFja2dyb3VuZENvbG9yID0gdm9pZCAwO1xuZXhwb3J0cy5wYWxldHRlVHJhbnNmb3JtID0gcGFsZXR0ZVRyYW5zZm9ybTtcbnZhciBfc3R5bGUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3N0eWxlXCIpKTtcbnZhciBfY29tcG9zZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vY29tcG9zZVwiKSk7XG5mdW5jdGlvbiBwYWxldHRlVHJhbnNmb3JtKHZhbHVlLCB1c2VyVmFsdWUpIHtcbiAgaWYgKHVzZXJWYWx1ZSA9PT0gJ2dyZXknKSB7XG4gICAgcmV0dXJuIHVzZXJWYWx1ZTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5jb25zdCBjb2xvciA9IGV4cG9ydHMuY29sb3IgPSAoMCwgX3N0eWxlLmRlZmF1bHQpKHtcbiAgcHJvcDogJ2NvbG9yJyxcbiAgdGhlbWVLZXk6ICdwYWxldHRlJyxcbiAgdHJhbnNmb3JtOiBwYWxldHRlVHJhbnNmb3JtXG59KTtcbmNvbnN0IGJnY29sb3IgPSBleHBvcnRzLmJnY29sb3IgPSAoMCwgX3N0eWxlLmRlZmF1bHQpKHtcbiAgcHJvcDogJ2JnY29sb3InLFxuICBjc3NQcm9wZXJ0eTogJ2JhY2tncm91bmRDb2xvcicsXG4gIHRoZW1lS2V5OiAncGFsZXR0ZScsXG4gIHRyYW5zZm9ybTogcGFsZXR0ZVRyYW5zZm9ybVxufSk7XG5jb25zdCBiYWNrZ3JvdW5kQ29sb3IgPSBleHBvcnRzLmJhY2tncm91bmRDb2xvciA9ICgwLCBfc3R5bGUuZGVmYXVsdCkoe1xuICBwcm9wOiAnYmFja2dyb3VuZENvbG9yJyxcbiAgdGhlbWVLZXk6ICdwYWxldHRlJyxcbiAgdHJhbnNmb3JtOiBwYWxldHRlVHJhbnNmb3JtXG59KTtcbmNvbnN0IHBhbGV0dGUgPSAoMCwgX2NvbXBvc2UuZGVmYXVsdCkoY29sb3IsIGJnY29sb3IsIGJhY2tncm91bmRDb2xvcik7XG52YXIgX2RlZmF1bHQgPSBleHBvcnRzLmRlZmF1bHQgPSBwYWxldHRlOyIsICJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zaXplV2lkdGggPSBleHBvcnRzLnNpemVIZWlnaHQgPSBleHBvcnRzLm1pbldpZHRoID0gZXhwb3J0cy5taW5IZWlnaHQgPSBleHBvcnRzLm1heFdpZHRoID0gZXhwb3J0cy5tYXhIZWlnaHQgPSBleHBvcnRzLmhlaWdodCA9IGV4cG9ydHMuZGVmYXVsdCA9IGV4cG9ydHMuYm94U2l6aW5nID0gdm9pZCAwO1xuZXhwb3J0cy5zaXppbmdUcmFuc2Zvcm0gPSBzaXppbmdUcmFuc2Zvcm07XG5leHBvcnRzLndpZHRoID0gdm9pZCAwO1xudmFyIF9zdHlsZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vc3R5bGVcIikpO1xudmFyIF9jb21wb3NlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9jb21wb3NlXCIpKTtcbnZhciBfYnJlYWtwb2ludHMgPSByZXF1aXJlKFwiLi9icmVha3BvaW50c1wiKTtcbmZ1bmN0aW9uIHNpemluZ1RyYW5zZm9ybSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPD0gMSAmJiB2YWx1ZSAhPT0gMCA/IGAke3ZhbHVlICogMTAwfSVgIDogdmFsdWU7XG59XG5jb25zdCB3aWR0aCA9IGV4cG9ydHMud2lkdGggPSAoMCwgX3N0eWxlLmRlZmF1bHQpKHtcbiAgcHJvcDogJ3dpZHRoJyxcbiAgdHJhbnNmb3JtOiBzaXppbmdUcmFuc2Zvcm1cbn0pO1xuY29uc3QgbWF4V2lkdGggPSBwcm9wcyA9PiB7XG4gIGlmIChwcm9wcy5tYXhXaWR0aCAhPT0gdW5kZWZpbmVkICYmIHByb3BzLm1heFdpZHRoICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3R5bGVGcm9tUHJvcFZhbHVlID0gcHJvcFZhbHVlID0+IHtcbiAgICAgIHZhciBfcHJvcHMkdGhlbWUsIF9wcm9wcyR0aGVtZTI7XG4gICAgICBjb25zdCBicmVha3BvaW50ID0gKChfcHJvcHMkdGhlbWUgPSBwcm9wcy50aGVtZSkgPT0gbnVsbCB8fCAoX3Byb3BzJHRoZW1lID0gX3Byb3BzJHRoZW1lLmJyZWFrcG9pbnRzKSA9PSBudWxsIHx8IChfcHJvcHMkdGhlbWUgPSBfcHJvcHMkdGhlbWUudmFsdWVzKSA9PSBudWxsID8gdm9pZCAwIDogX3Byb3BzJHRoZW1lW3Byb3BWYWx1ZV0pIHx8IF9icmVha3BvaW50cy52YWx1ZXNbcHJvcFZhbHVlXTtcbiAgICAgIGlmICghYnJlYWtwb2ludCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG1heFdpZHRoOiBzaXppbmdUcmFuc2Zvcm0ocHJvcFZhbHVlKVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKCgoX3Byb3BzJHRoZW1lMiA9IHByb3BzLnRoZW1lKSA9PSBudWxsIHx8IChfcHJvcHMkdGhlbWUyID0gX3Byb3BzJHRoZW1lMi5icmVha3BvaW50cykgPT0gbnVsbCA/IHZvaWQgMCA6IF9wcm9wcyR0aGVtZTIudW5pdCkgIT09ICdweCcpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBtYXhXaWR0aDogYCR7YnJlYWtwb2ludH0ke3Byb3BzLnRoZW1lLmJyZWFrcG9pbnRzLnVuaXR9YFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbWF4V2lkdGg6IGJyZWFrcG9pbnRcbiAgICAgIH07XG4gICAgfTtcbiAgICByZXR1cm4gKDAsIF9icmVha3BvaW50cy5oYW5kbGVCcmVha3BvaW50cykocHJvcHMsIHByb3BzLm1heFdpZHRoLCBzdHlsZUZyb21Qcm9wVmFsdWUpO1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcbmV4cG9ydHMubWF4V2lkdGggPSBtYXhXaWR0aDtcbm1heFdpZHRoLmZpbHRlclByb3BzID0gWydtYXhXaWR0aCddO1xuY29uc3QgbWluV2lkdGggPSBleHBvcnRzLm1pbldpZHRoID0gKDAsIF9zdHlsZS5kZWZhdWx0KSh7XG4gIHByb3A6ICdtaW5XaWR0aCcsXG4gIHRyYW5zZm9ybTogc2l6aW5nVHJhbnNmb3JtXG59KTtcbmNvbnN0IGhlaWdodCA9IGV4cG9ydHMuaGVpZ2h0ID0gKDAsIF9zdHlsZS5kZWZhdWx0KSh7XG4gIHByb3A6ICdoZWlnaHQnLFxuICB0cmFuc2Zvcm06IHNpemluZ1RyYW5zZm9ybVxufSk7XG5jb25zdCBtYXhIZWlnaHQgPSBleHBvcnRzLm1heEhlaWdodCA9ICgwLCBfc3R5bGUuZGVmYXVsdCkoe1xuICBwcm9wOiAnbWF4SGVpZ2h0JyxcbiAgdHJhbnNmb3JtOiBzaXppbmdUcmFuc2Zvcm1cbn0pO1xuY29uc3QgbWluSGVpZ2h0ID0gZXhwb3J0cy5taW5IZWlnaHQgPSAoMCwgX3N0eWxlLmRlZmF1bHQpKHtcbiAgcHJvcDogJ21pbkhlaWdodCcsXG4gIHRyYW5zZm9ybTogc2l6aW5nVHJhbnNmb3JtXG59KTtcbmNvbnN0IHNpemVXaWR0aCA9IGV4cG9ydHMuc2l6ZVdpZHRoID0gKDAsIF9zdHlsZS5kZWZhdWx0KSh7XG4gIHByb3A6ICdzaXplJyxcbiAgY3NzUHJvcGVydHk6ICd3aWR0aCcsXG4gIHRyYW5zZm9ybTogc2l6aW5nVHJhbnNmb3JtXG59KTtcbmNvbnN0IHNpemVIZWlnaHQgPSBleHBvcnRzLnNpemVIZWlnaHQgPSAoMCwgX3N0eWxlLmRlZmF1bHQpKHtcbiAgcHJvcDogJ3NpemUnLFxuICBjc3NQcm9wZXJ0eTogJ2hlaWdodCcsXG4gIHRyYW5zZm9ybTogc2l6aW5nVHJhbnNmb3JtXG59KTtcbmNvbnN0IGJveFNpemluZyA9IGV4cG9ydHMuYm94U2l6aW5nID0gKDAsIF9zdHlsZS5kZWZhdWx0KSh7XG4gIHByb3A6ICdib3hTaXppbmcnXG59KTtcbmNvbnN0IHNpemluZyA9ICgwLCBfY29tcG9zZS5kZWZhdWx0KSh3aWR0aCwgbWF4V2lkdGgsIG1pbldpZHRoLCBoZWlnaHQsIG1heEhlaWdodCwgbWluSGVpZ2h0LCBib3hTaXppbmcpO1xudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gc2l6aW5nOyIsICJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbnZhciBfc3BhY2luZyA9IHJlcXVpcmUoXCIuLi9zcGFjaW5nXCIpO1xudmFyIF9ib3JkZXJzID0gcmVxdWlyZShcIi4uL2JvcmRlcnNcIik7XG52YXIgX2Nzc0dyaWQgPSByZXF1aXJlKFwiLi4vY3NzR3JpZFwiKTtcbnZhciBfcGFsZXR0ZSA9IHJlcXVpcmUoXCIuLi9wYWxldHRlXCIpO1xudmFyIF9zaXppbmcgPSByZXF1aXJlKFwiLi4vc2l6aW5nXCIpO1xuY29uc3QgZGVmYXVsdFN4Q29uZmlnID0ge1xuICAvLyBib3JkZXJzXG4gIGJvcmRlcjoge1xuICAgIHRoZW1lS2V5OiAnYm9yZGVycycsXG4gICAgdHJhbnNmb3JtOiBfYm9yZGVycy5ib3JkZXJUcmFuc2Zvcm1cbiAgfSxcbiAgYm9yZGVyVG9wOiB7XG4gICAgdGhlbWVLZXk6ICdib3JkZXJzJyxcbiAgICB0cmFuc2Zvcm06IF9ib3JkZXJzLmJvcmRlclRyYW5zZm9ybVxuICB9LFxuICBib3JkZXJSaWdodDoge1xuICAgIHRoZW1lS2V5OiAnYm9yZGVycycsXG4gICAgdHJhbnNmb3JtOiBfYm9yZGVycy5ib3JkZXJUcmFuc2Zvcm1cbiAgfSxcbiAgYm9yZGVyQm90dG9tOiB7XG4gICAgdGhlbWVLZXk6ICdib3JkZXJzJyxcbiAgICB0cmFuc2Zvcm06IF9ib3JkZXJzLmJvcmRlclRyYW5zZm9ybVxuICB9LFxuICBib3JkZXJMZWZ0OiB7XG4gICAgdGhlbWVLZXk6ICdib3JkZXJzJyxcbiAgICB0cmFuc2Zvcm06IF9ib3JkZXJzLmJvcmRlclRyYW5zZm9ybVxuICB9LFxuICBib3JkZXJDb2xvcjoge1xuICAgIHRoZW1lS2V5OiAncGFsZXR0ZSdcbiAgfSxcbiAgYm9yZGVyVG9wQ29sb3I6IHtcbiAgICB0aGVtZUtleTogJ3BhbGV0dGUnXG4gIH0sXG4gIGJvcmRlclJpZ2h0Q29sb3I6IHtcbiAgICB0aGVtZUtleTogJ3BhbGV0dGUnXG4gIH0sXG4gIGJvcmRlckJvdHRvbUNvbG9yOiB7XG4gICAgdGhlbWVLZXk6ICdwYWxldHRlJ1xuICB9LFxuICBib3JkZXJMZWZ0Q29sb3I6IHtcbiAgICB0aGVtZUtleTogJ3BhbGV0dGUnXG4gIH0sXG4gIG91dGxpbmU6IHtcbiAgICB0aGVtZUtleTogJ2JvcmRlcnMnLFxuICAgIHRyYW5zZm9ybTogX2JvcmRlcnMuYm9yZGVyVHJhbnNmb3JtXG4gIH0sXG4gIG91dGxpbmVDb2xvcjoge1xuICAgIHRoZW1lS2V5OiAncGFsZXR0ZSdcbiAgfSxcbiAgYm9yZGVyUmFkaXVzOiB7XG4gICAgdGhlbWVLZXk6ICdzaGFwZS5ib3JkZXJSYWRpdXMnLFxuICAgIHN0eWxlOiBfYm9yZGVycy5ib3JkZXJSYWRpdXNcbiAgfSxcbiAgLy8gcGFsZXR0ZVxuICBjb2xvcjoge1xuICAgIHRoZW1lS2V5OiAncGFsZXR0ZScsXG4gICAgdHJhbnNmb3JtOiBfcGFsZXR0ZS5wYWxldHRlVHJhbnNmb3JtXG4gIH0sXG4gIGJnY29sb3I6IHtcbiAgICB0aGVtZUtleTogJ3BhbGV0dGUnLFxuICAgIGNzc1Byb3BlcnR5OiAnYmFja2dyb3VuZENvbG9yJyxcbiAgICB0cmFuc2Zvcm06IF9wYWxldHRlLnBhbGV0dGVUcmFuc2Zvcm1cbiAgfSxcbiAgYmFja2dyb3VuZENvbG9yOiB7XG4gICAgdGhlbWVLZXk6ICdwYWxldHRlJyxcbiAgICB0cmFuc2Zvcm06IF9wYWxldHRlLnBhbGV0dGVUcmFuc2Zvcm1cbiAgfSxcbiAgLy8gc3BhY2luZ1xuICBwOiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLnBhZGRpbmdcbiAgfSxcbiAgcHQ6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcucGFkZGluZ1xuICB9LFxuICBwcjoge1xuICAgIHN0eWxlOiBfc3BhY2luZy5wYWRkaW5nXG4gIH0sXG4gIHBiOiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLnBhZGRpbmdcbiAgfSxcbiAgcGw6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcucGFkZGluZ1xuICB9LFxuICBweDoge1xuICAgIHN0eWxlOiBfc3BhY2luZy5wYWRkaW5nXG4gIH0sXG4gIHB5OiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLnBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZzoge1xuICAgIHN0eWxlOiBfc3BhY2luZy5wYWRkaW5nXG4gIH0sXG4gIHBhZGRpbmdUb3A6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcucGFkZGluZ1xuICB9LFxuICBwYWRkaW5nUmlnaHQ6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcucGFkZGluZ1xuICB9LFxuICBwYWRkaW5nQm90dG9tOiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLnBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZ0xlZnQ6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcucGFkZGluZ1xuICB9LFxuICBwYWRkaW5nWDoge1xuICAgIHN0eWxlOiBfc3BhY2luZy5wYWRkaW5nXG4gIH0sXG4gIHBhZGRpbmdZOiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLnBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZ0lubGluZToge1xuICAgIHN0eWxlOiBfc3BhY2luZy5wYWRkaW5nXG4gIH0sXG4gIHBhZGRpbmdJbmxpbmVTdGFydDoge1xuICAgIHN0eWxlOiBfc3BhY2luZy5wYWRkaW5nXG4gIH0sXG4gIHBhZGRpbmdJbmxpbmVFbmQ6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcucGFkZGluZ1xuICB9LFxuICBwYWRkaW5nQmxvY2s6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcucGFkZGluZ1xuICB9LFxuICBwYWRkaW5nQmxvY2tTdGFydDoge1xuICAgIHN0eWxlOiBfc3BhY2luZy5wYWRkaW5nXG4gIH0sXG4gIHBhZGRpbmdCbG9ja0VuZDoge1xuICAgIHN0eWxlOiBfc3BhY2luZy5wYWRkaW5nXG4gIH0sXG4gIG06IHtcbiAgICBzdHlsZTogX3NwYWNpbmcubWFyZ2luXG4gIH0sXG4gIG10OiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLm1hcmdpblxuICB9LFxuICBtcjoge1xuICAgIHN0eWxlOiBfc3BhY2luZy5tYXJnaW5cbiAgfSxcbiAgbWI6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcubWFyZ2luXG4gIH0sXG4gIG1sOiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLm1hcmdpblxuICB9LFxuICBteDoge1xuICAgIHN0eWxlOiBfc3BhY2luZy5tYXJnaW5cbiAgfSxcbiAgbXk6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcubWFyZ2luXG4gIH0sXG4gIG1hcmdpbjoge1xuICAgIHN0eWxlOiBfc3BhY2luZy5tYXJnaW5cbiAgfSxcbiAgbWFyZ2luVG9wOiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLm1hcmdpblxuICB9LFxuICBtYXJnaW5SaWdodDoge1xuICAgIHN0eWxlOiBfc3BhY2luZy5tYXJnaW5cbiAgfSxcbiAgbWFyZ2luQm90dG9tOiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLm1hcmdpblxuICB9LFxuICBtYXJnaW5MZWZ0OiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLm1hcmdpblxuICB9LFxuICBtYXJnaW5YOiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLm1hcmdpblxuICB9LFxuICBtYXJnaW5ZOiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLm1hcmdpblxuICB9LFxuICBtYXJnaW5JbmxpbmU6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcubWFyZ2luXG4gIH0sXG4gIG1hcmdpbklubGluZVN0YXJ0OiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLm1hcmdpblxuICB9LFxuICBtYXJnaW5JbmxpbmVFbmQ6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcubWFyZ2luXG4gIH0sXG4gIG1hcmdpbkJsb2NrOiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLm1hcmdpblxuICB9LFxuICBtYXJnaW5CbG9ja1N0YXJ0OiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLm1hcmdpblxuICB9LFxuICBtYXJnaW5CbG9ja0VuZDoge1xuICAgIHN0eWxlOiBfc3BhY2luZy5tYXJnaW5cbiAgfSxcbiAgLy8gZGlzcGxheVxuICBkaXNwbGF5UHJpbnQ6IHtcbiAgICBjc3NQcm9wZXJ0eTogZmFsc2UsXG4gICAgdHJhbnNmb3JtOiB2YWx1ZSA9PiAoe1xuICAgICAgJ0BtZWRpYSBwcmludCc6IHtcbiAgICAgICAgZGlzcGxheTogdmFsdWVcbiAgICAgIH1cbiAgICB9KVxuICB9LFxuICBkaXNwbGF5OiB7fSxcbiAgb3ZlcmZsb3c6IHt9LFxuICB0ZXh0T3ZlcmZsb3c6IHt9LFxuICB2aXNpYmlsaXR5OiB7fSxcbiAgd2hpdGVTcGFjZToge30sXG4gIC8vIGZsZXhib3hcbiAgZmxleEJhc2lzOiB7fSxcbiAgZmxleERpcmVjdGlvbjoge30sXG4gIGZsZXhXcmFwOiB7fSxcbiAganVzdGlmeUNvbnRlbnQ6IHt9LFxuICBhbGlnbkl0ZW1zOiB7fSxcbiAgYWxpZ25Db250ZW50OiB7fSxcbiAgb3JkZXI6IHt9LFxuICBmbGV4OiB7fSxcbiAgZmxleEdyb3c6IHt9LFxuICBmbGV4U2hyaW5rOiB7fSxcbiAgYWxpZ25TZWxmOiB7fSxcbiAganVzdGlmeUl0ZW1zOiB7fSxcbiAganVzdGlmeVNlbGY6IHt9LFxuICAvLyBncmlkXG4gIGdhcDoge1xuICAgIHN0eWxlOiBfY3NzR3JpZC5nYXBcbiAgfSxcbiAgcm93R2FwOiB7XG4gICAgc3R5bGU6IF9jc3NHcmlkLnJvd0dhcFxuICB9LFxuICBjb2x1bW5HYXA6IHtcbiAgICBzdHlsZTogX2Nzc0dyaWQuY29sdW1uR2FwXG4gIH0sXG4gIGdyaWRDb2x1bW46IHt9LFxuICBncmlkUm93OiB7fSxcbiAgZ3JpZEF1dG9GbG93OiB7fSxcbiAgZ3JpZEF1dG9Db2x1bW5zOiB7fSxcbiAgZ3JpZEF1dG9Sb3dzOiB7fSxcbiAgZ3JpZFRlbXBsYXRlQ29sdW1uczoge30sXG4gIGdyaWRUZW1wbGF0ZVJvd3M6IHt9LFxuICBncmlkVGVtcGxhdGVBcmVhczoge30sXG4gIGdyaWRBcmVhOiB7fSxcbiAgLy8gcG9zaXRpb25zXG4gIHBvc2l0aW9uOiB7fSxcbiAgekluZGV4OiB7XG4gICAgdGhlbWVLZXk6ICd6SW5kZXgnXG4gIH0sXG4gIHRvcDoge30sXG4gIHJpZ2h0OiB7fSxcbiAgYm90dG9tOiB7fSxcbiAgbGVmdDoge30sXG4gIC8vIHNoYWRvd3NcbiAgYm94U2hhZG93OiB7XG4gICAgdGhlbWVLZXk6ICdzaGFkb3dzJ1xuICB9LFxuICAvLyBzaXppbmdcbiAgd2lkdGg6IHtcbiAgICB0cmFuc2Zvcm06IF9zaXppbmcuc2l6aW5nVHJhbnNmb3JtXG4gIH0sXG4gIG1heFdpZHRoOiB7XG4gICAgc3R5bGU6IF9zaXppbmcubWF4V2lkdGhcbiAgfSxcbiAgbWluV2lkdGg6IHtcbiAgICB0cmFuc2Zvcm06IF9zaXppbmcuc2l6aW5nVHJhbnNmb3JtXG4gIH0sXG4gIGhlaWdodDoge1xuICAgIHRyYW5zZm9ybTogX3NpemluZy5zaXppbmdUcmFuc2Zvcm1cbiAgfSxcbiAgbWF4SGVpZ2h0OiB7XG4gICAgdHJhbnNmb3JtOiBfc2l6aW5nLnNpemluZ1RyYW5zZm9ybVxuICB9LFxuICBtaW5IZWlnaHQ6IHtcbiAgICB0cmFuc2Zvcm06IF9zaXppbmcuc2l6aW5nVHJhbnNmb3JtXG4gIH0sXG4gIGJveFNpemluZzoge30sXG4gIC8vIHR5cG9ncmFwaHlcbiAgZm9udEZhbWlseToge1xuICAgIHRoZW1lS2V5OiAndHlwb2dyYXBoeSdcbiAgfSxcbiAgZm9udFNpemU6IHtcbiAgICB0aGVtZUtleTogJ3R5cG9ncmFwaHknXG4gIH0sXG4gIGZvbnRTdHlsZToge1xuICAgIHRoZW1lS2V5OiAndHlwb2dyYXBoeSdcbiAgfSxcbiAgZm9udFdlaWdodDoge1xuICAgIHRoZW1lS2V5OiAndHlwb2dyYXBoeSdcbiAgfSxcbiAgbGV0dGVyU3BhY2luZzoge30sXG4gIHRleHRUcmFuc2Zvcm06IHt9LFxuICBsaW5lSGVpZ2h0OiB7fSxcbiAgdGV4dEFsaWduOiB7fSxcbiAgdHlwb2dyYXBoeToge1xuICAgIGNzc1Byb3BlcnR5OiBmYWxzZSxcbiAgICB0aGVtZUtleTogJ3R5cG9ncmFwaHknXG4gIH1cbn07XG52YXIgX2RlZmF1bHQgPSBleHBvcnRzLmRlZmF1bHQgPSBkZWZhdWx0U3hDb25maWc7IiwgIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5leHBvcnRzLnVuc3RhYmxlX2NyZWF0ZVN0eWxlRnVuY3Rpb25TeCA9IHVuc3RhYmxlX2NyZWF0ZVN0eWxlRnVuY3Rpb25TeDtcbnZhciBfY2FwaXRhbGl6ZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIkBtdWkvdXRpbHMvY2FwaXRhbGl6ZVwiKSk7XG52YXIgX21lcmdlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi4vbWVyZ2VcIikpO1xudmFyIF9zdHlsZSA9IHJlcXVpcmUoXCIuLi9zdHlsZVwiKTtcbnZhciBfYnJlYWtwb2ludHMgPSByZXF1aXJlKFwiLi4vYnJlYWtwb2ludHNcIik7XG52YXIgX2RlZmF1bHRTeENvbmZpZyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vZGVmYXVsdFN4Q29uZmlnXCIpKTtcbmZ1bmN0aW9uIG9iamVjdHNIYXZlU2FtZUtleXMoLi4ub2JqZWN0cykge1xuICBjb25zdCBhbGxLZXlzID0gb2JqZWN0cy5yZWR1Y2UoKGtleXMsIG9iamVjdCkgPT4ga2V5cy5jb25jYXQoT2JqZWN0LmtleXMob2JqZWN0KSksIFtdKTtcbiAgY29uc3QgdW5pb24gPSBuZXcgU2V0KGFsbEtleXMpO1xuICByZXR1cm4gb2JqZWN0cy5ldmVyeShvYmplY3QgPT4gdW5pb24uc2l6ZSA9PT0gT2JqZWN0LmtleXMob2JqZWN0KS5sZW5ndGgpO1xufVxuZnVuY3Rpb24gY2FsbElmRm4obWF5YmVGbiwgYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgbWF5YmVGbiA9PT0gJ2Z1bmN0aW9uJyA/IG1heWJlRm4oYXJnKSA6IG1heWJlRm47XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbmZ1bmN0aW9uIHVuc3RhYmxlX2NyZWF0ZVN0eWxlRnVuY3Rpb25TeCgpIHtcbiAgZnVuY3Rpb24gZ2V0VGhlbWVWYWx1ZShwcm9wLCB2YWwsIHRoZW1lLCBjb25maWcpIHtcbiAgICBjb25zdCBwcm9wcyA9IHtcbiAgICAgIFtwcm9wXTogdmFsLFxuICAgICAgdGhlbWVcbiAgICB9O1xuICAgIGNvbnN0IG9wdGlvbnMgPSBjb25maWdbcHJvcF07XG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBbcHJvcF06IHZhbFxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3Qge1xuICAgICAgY3NzUHJvcGVydHkgPSBwcm9wLFxuICAgICAgdGhlbWVLZXksXG4gICAgICB0cmFuc2Zvcm0sXG4gICAgICBzdHlsZVxuICAgIH0gPSBvcHRpb25zO1xuICAgIGlmICh2YWwgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gVE9ETyB2NjogcmVtb3ZlLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL211aS9tYXRlcmlhbC11aS9wdWxsLzM4MTIzXG4gICAgaWYgKHRoZW1lS2V5ID09PSAndHlwb2dyYXBoeScgJiYgdmFsID09PSAnaW5oZXJpdCcpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIFtwcm9wXTogdmFsXG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCB0aGVtZU1hcHBpbmcgPSAoMCwgX3N0eWxlLmdldFBhdGgpKHRoZW1lLCB0aGVtZUtleSkgfHwge307XG4gICAgaWYgKHN0eWxlKSB7XG4gICAgICByZXR1cm4gc3R5bGUocHJvcHMpO1xuICAgIH1cbiAgICBjb25zdCBzdHlsZUZyb21Qcm9wVmFsdWUgPSBwcm9wVmFsdWVGaW5hbCA9PiB7XG4gICAgICBsZXQgdmFsdWUgPSAoMCwgX3N0eWxlLmdldFN0eWxlVmFsdWUpKHRoZW1lTWFwcGluZywgdHJhbnNmb3JtLCBwcm9wVmFsdWVGaW5hbCk7XG4gICAgICBpZiAocHJvcFZhbHVlRmluYWwgPT09IHZhbHVlICYmIHR5cGVvZiBwcm9wVmFsdWVGaW5hbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgLy8gSGF2ZW4ndCBmb3VuZCB2YWx1ZVxuICAgICAgICB2YWx1ZSA9ICgwLCBfc3R5bGUuZ2V0U3R5bGVWYWx1ZSkodGhlbWVNYXBwaW5nLCB0cmFuc2Zvcm0sIGAke3Byb3B9JHtwcm9wVmFsdWVGaW5hbCA9PT0gJ2RlZmF1bHQnID8gJycgOiAoMCwgX2NhcGl0YWxpemUuZGVmYXVsdCkocHJvcFZhbHVlRmluYWwpfWAsIHByb3BWYWx1ZUZpbmFsKTtcbiAgICAgIH1cbiAgICAgIGlmIChjc3NQcm9wZXJ0eSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW2Nzc1Byb3BlcnR5XTogdmFsdWVcbiAgICAgIH07XG4gICAgfTtcbiAgICByZXR1cm4gKDAsIF9icmVha3BvaW50cy5oYW5kbGVCcmVha3BvaW50cykocHJvcHMsIHZhbCwgc3R5bGVGcm9tUHJvcFZhbHVlKTtcbiAgfVxuICBmdW5jdGlvbiBzdHlsZUZ1bmN0aW9uU3gocHJvcHMpIHtcbiAgICB2YXIgX3RoZW1lJHVuc3RhYmxlX3N4Q29uO1xuICAgIGNvbnN0IHtcbiAgICAgIHN4LFxuICAgICAgdGhlbWUgPSB7fVxuICAgIH0gPSBwcm9wcyB8fCB7fTtcbiAgICBpZiAoIXN4KSB7XG4gICAgICByZXR1cm4gbnVsbDsgLy8gRW1vdGlvbiAmIHN0eWxlZC1jb21wb25lbnRzIHdpbGwgbmVnbGVjdCBudWxsXG4gICAgfVxuICAgIGNvbnN0IGNvbmZpZyA9IChfdGhlbWUkdW5zdGFibGVfc3hDb24gPSB0aGVtZS51bnN0YWJsZV9zeENvbmZpZykgIT0gbnVsbCA/IF90aGVtZSR1bnN0YWJsZV9zeENvbiA6IF9kZWZhdWx0U3hDb25maWcuZGVmYXVsdDtcblxuICAgIC8qXG4gICAgICogUmVjZWl2ZSBgc3hJbnB1dGAgYXMgb2JqZWN0IG9yIGNhbGxiYWNrXG4gICAgICogYW5kIHRoZW4gcmVjdXJzaXZlbHkgY2hlY2sga2V5cyAmIHZhbHVlcyB0byBjcmVhdGUgbWVkaWEgcXVlcnkgb2JqZWN0IHN0eWxlcy5cbiAgICAgKiAodGhlIHJlc3VsdCB3aWxsIGJlIHVzZWQgaW4gYHN0eWxlZGApXG4gICAgICovXG4gICAgZnVuY3Rpb24gdHJhdmVyc2Uoc3hJbnB1dCkge1xuICAgICAgbGV0IHN4T2JqZWN0ID0gc3hJbnB1dDtcbiAgICAgIGlmICh0eXBlb2Ygc3hJbnB1dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBzeE9iamVjdCA9IHN4SW5wdXQodGhlbWUpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygc3hJbnB1dCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgLy8gdmFsdWVcbiAgICAgICAgcmV0dXJuIHN4SW5wdXQ7XG4gICAgICB9XG4gICAgICBpZiAoIXN4T2JqZWN0KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgZW1wdHlCcmVha3BvaW50cyA9ICgwLCBfYnJlYWtwb2ludHMuY3JlYXRlRW1wdHlCcmVha3BvaW50T2JqZWN0KSh0aGVtZS5icmVha3BvaW50cyk7XG4gICAgICBjb25zdCBicmVha3BvaW50c0tleXMgPSBPYmplY3Qua2V5cyhlbXB0eUJyZWFrcG9pbnRzKTtcbiAgICAgIGxldCBjc3MgPSBlbXB0eUJyZWFrcG9pbnRzO1xuICAgICAgT2JqZWN0LmtleXMoc3hPYmplY3QpLmZvckVhY2goc3R5bGVLZXkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGNhbGxJZkZuKHN4T2JqZWN0W3N0eWxlS2V5XSwgdGhlbWUpO1xuICAgICAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBpZiAoY29uZmlnW3N0eWxlS2V5XSkge1xuICAgICAgICAgICAgICBjc3MgPSAoMCwgX21lcmdlLmRlZmF1bHQpKGNzcywgZ2V0VGhlbWVWYWx1ZShzdHlsZUtleSwgdmFsdWUsIHRoZW1lLCBjb25maWcpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnN0IGJyZWFrcG9pbnRzVmFsdWVzID0gKDAsIF9icmVha3BvaW50cy5oYW5kbGVCcmVha3BvaW50cykoe1xuICAgICAgICAgICAgICAgIHRoZW1lXG4gICAgICAgICAgICAgIH0sIHZhbHVlLCB4ID0+ICh7XG4gICAgICAgICAgICAgICAgW3N0eWxlS2V5XTogeFxuICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgIGlmIChvYmplY3RzSGF2ZVNhbWVLZXlzKGJyZWFrcG9pbnRzVmFsdWVzLCB2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBjc3Nbc3R5bGVLZXldID0gc3R5bGVGdW5jdGlvblN4KHtcbiAgICAgICAgICAgICAgICAgIHN4OiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgIHRoZW1lXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY3NzID0gKDAsIF9tZXJnZS5kZWZhdWx0KShjc3MsIGJyZWFrcG9pbnRzVmFsdWVzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjc3MgPSAoMCwgX21lcmdlLmRlZmF1bHQpKGNzcywgZ2V0VGhlbWVWYWx1ZShzdHlsZUtleSwgdmFsdWUsIHRoZW1lLCBjb25maWcpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuICgwLCBfYnJlYWtwb2ludHMucmVtb3ZlVW51c2VkQnJlYWtwb2ludHMpKGJyZWFrcG9pbnRzS2V5cywgY3NzKTtcbiAgICB9XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoc3gpID8gc3gubWFwKHRyYXZlcnNlKSA6IHRyYXZlcnNlKHN4KTtcbiAgfVxuICByZXR1cm4gc3R5bGVGdW5jdGlvblN4O1xufVxuY29uc3Qgc3R5bGVGdW5jdGlvblN4ID0gdW5zdGFibGVfY3JlYXRlU3R5bGVGdW5jdGlvblN4KCk7XG5zdHlsZUZ1bmN0aW9uU3guZmlsdGVyUHJvcHMgPSBbJ3N4J107XG52YXIgX2RlZmF1bHQgPSBleHBvcnRzLmRlZmF1bHQgPSBzdHlsZUZ1bmN0aW9uU3g7IiwgImZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHtcbiAgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307XG4gIHZhciB0YXJnZXQgPSB7fTtcbiAgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpO1xuICB2YXIga2V5LCBpO1xuICBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGtleSA9IHNvdXJjZUtleXNbaV07XG4gICAgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTtcbiAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICB9XG4gIHJldHVybiB0YXJnZXQ7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwgIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSBleHRlbmRTeFByb3A7XG52YXIgX2V4dGVuZHMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9leHRlbmRzXCIpKTtcbnZhciBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIikpO1xudmFyIF9kZWVwbWVyZ2UgPSByZXF1aXJlKFwiQG11aS91dGlscy9kZWVwbWVyZ2VcIik7XG52YXIgX2RlZmF1bHRTeENvbmZpZyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vZGVmYXVsdFN4Q29uZmlnXCIpKTtcbmNvbnN0IF9leGNsdWRlZCA9IFtcInN4XCJdO1xuY29uc3Qgc3BsaXRQcm9wcyA9IHByb3BzID0+IHtcbiAgdmFyIF9wcm9wcyR0aGVtZSR1bnN0YWJsZSwgX3Byb3BzJHRoZW1lO1xuICBjb25zdCByZXN1bHQgPSB7XG4gICAgc3lzdGVtUHJvcHM6IHt9LFxuICAgIG90aGVyUHJvcHM6IHt9XG4gIH07XG4gIGNvbnN0IGNvbmZpZyA9IChfcHJvcHMkdGhlbWUkdW5zdGFibGUgPSBwcm9wcyA9PSBudWxsIHx8IChfcHJvcHMkdGhlbWUgPSBwcm9wcy50aGVtZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9wcm9wcyR0aGVtZS51bnN0YWJsZV9zeENvbmZpZykgIT0gbnVsbCA/IF9wcm9wcyR0aGVtZSR1bnN0YWJsZSA6IF9kZWZhdWx0U3hDb25maWcuZGVmYXVsdDtcbiAgT2JqZWN0LmtleXMocHJvcHMpLmZvckVhY2gocHJvcCA9PiB7XG4gICAgaWYgKGNvbmZpZ1twcm9wXSkge1xuICAgICAgcmVzdWx0LnN5c3RlbVByb3BzW3Byb3BdID0gcHJvcHNbcHJvcF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdC5vdGhlclByb3BzW3Byb3BdID0gcHJvcHNbcHJvcF07XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5mdW5jdGlvbiBleHRlbmRTeFByb3AocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgICAgc3g6IGluU3hcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSAoMCwgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UyLmRlZmF1bHQpKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCB7XG4gICAgc3lzdGVtUHJvcHMsXG4gICAgb3RoZXJQcm9wc1xuICB9ID0gc3BsaXRQcm9wcyhvdGhlcik7XG4gIGxldCBmaW5hbFN4O1xuICBpZiAoQXJyYXkuaXNBcnJheShpblN4KSkge1xuICAgIGZpbmFsU3ggPSBbc3lzdGVtUHJvcHMsIC4uLmluU3hdO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBpblN4ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgZmluYWxTeCA9ICguLi5hcmdzKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpblN4KC4uLmFyZ3MpO1xuICAgICAgaWYgKCEoMCwgX2RlZXBtZXJnZS5pc1BsYWluT2JqZWN0KShyZXN1bHQpKSB7XG4gICAgICAgIHJldHVybiBzeXN0ZW1Qcm9wcztcbiAgICAgIH1cbiAgICAgIHJldHVybiAoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHt9LCBzeXN0ZW1Qcm9wcywgcmVzdWx0KTtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGZpbmFsU3ggPSAoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHt9LCBzeXN0ZW1Qcm9wcywgaW5TeCk7XG4gIH1cbiAgcmV0dXJuICgwLCBfZXh0ZW5kczIuZGVmYXVsdCkoe30sIG90aGVyUHJvcHMsIHtcbiAgICBzeDogZmluYWxTeFxuICB9KTtcbn0iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRlZmF1bHRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3N0eWxlRnVuY3Rpb25TeC5kZWZhdWx0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImV4dGVuZFN4UHJvcFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfZXh0ZW5kU3hQcm9wLmRlZmF1bHQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidW5zdGFibGVfY3JlYXRlU3R5bGVGdW5jdGlvblN4XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9zdHlsZUZ1bmN0aW9uU3gudW5zdGFibGVfY3JlYXRlU3R5bGVGdW5jdGlvblN4O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInVuc3RhYmxlX2RlZmF1bHRTeENvbmZpZ1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfZGVmYXVsdFN4Q29uZmlnLmRlZmF1bHQ7XG4gIH1cbn0pO1xudmFyIF9zdHlsZUZ1bmN0aW9uU3ggPSBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChyZXF1aXJlKFwiLi9zdHlsZUZ1bmN0aW9uU3hcIikpO1xudmFyIF9leHRlbmRTeFByb3AgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2V4dGVuZFN4UHJvcFwiKSk7XG52YXIgX2RlZmF1bHRTeENvbmZpZyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vZGVmYXVsdFN4Q29uZmlnXCIpKTtcbmZ1bmN0aW9uIF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIFdlYWtNYXApIHJldHVybiBudWxsOyB2YXIgciA9IG5ldyBXZWFrTWFwKCksIHQgPSBuZXcgV2Vha01hcCgpOyByZXR1cm4gKF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSA9IGZ1bmN0aW9uIChlKSB7IHJldHVybiBlID8gdCA6IHI7IH0pKGUpOyB9XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChlLCByKSB7IGlmICghciAmJiBlICYmIGUuX19lc01vZHVsZSkgcmV0dXJuIGU7IGlmIChudWxsID09PSBlIHx8IFwib2JqZWN0XCIgIT0gdHlwZW9mIGUgJiYgXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlKSByZXR1cm4geyBkZWZhdWx0OiBlIH07IHZhciB0ID0gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKHIpOyBpZiAodCAmJiB0LmhhcyhlKSkgcmV0dXJuIHQuZ2V0KGUpOyB2YXIgbiA9IHsgX19wcm90b19fOiBudWxsIH0sIGEgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjsgZm9yICh2YXIgdSBpbiBlKSBpZiAoXCJkZWZhdWx0XCIgIT09IHUgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIHUpKSB7IHZhciBpID0gYSA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgdSkgOiBudWxsOyBpICYmIChpLmdldCB8fCBpLnNldCkgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkobiwgdSwgaSkgOiBuW3VdID0gZVt1XTsgfSByZXR1cm4gbi5kZWZhdWx0ID0gZSwgdCAmJiB0LnNldChlLCBuKSwgbjsgfSIsICJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5icmVha3BvaW50S2V5cyA9IHZvaWQgMDtcbmV4cG9ydHMuZGVmYXVsdCA9IGNyZWF0ZUJyZWFrcG9pbnRzO1xudmFyIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiKSk7XG52YXIgX2V4dGVuZHMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9leHRlbmRzXCIpKTtcbmNvbnN0IF9leGNsdWRlZCA9IFtcInZhbHVlc1wiLCBcInVuaXRcIiwgXCJzdGVwXCJdO1xuLy8gU29ydGVkIEFTQyBieSBzaXplLiBUaGF0J3MgaW1wb3J0YW50LlxuLy8gSXQgY2FuJ3QgYmUgY29uZmlndXJlZCBhcyBpdCdzIHVzZWQgc3RhdGljYWxseSBmb3IgcHJvcFR5cGVzLlxuY29uc3QgYnJlYWtwb2ludEtleXMgPSBleHBvcnRzLmJyZWFrcG9pbnRLZXlzID0gWyd4cycsICdzbScsICdtZCcsICdsZycsICd4bCddO1xuY29uc3Qgc29ydEJyZWFrcG9pbnRzVmFsdWVzID0gdmFsdWVzID0+IHtcbiAgY29uc3QgYnJlYWtwb2ludHNBc0FycmF5ID0gT2JqZWN0LmtleXModmFsdWVzKS5tYXAoa2V5ID0+ICh7XG4gICAga2V5LFxuICAgIHZhbDogdmFsdWVzW2tleV1cbiAgfSkpIHx8IFtdO1xuICAvLyBTb3J0IGluIGFzY2VuZGluZyBvcmRlclxuICBicmVha3BvaW50c0FzQXJyYXkuc29ydCgoYnJlYWtwb2ludDEsIGJyZWFrcG9pbnQyKSA9PiBicmVha3BvaW50MS52YWwgLSBicmVha3BvaW50Mi52YWwpO1xuICByZXR1cm4gYnJlYWtwb2ludHNBc0FycmF5LnJlZHVjZSgoYWNjLCBvYmopID0+IHtcbiAgICByZXR1cm4gKDAsIF9leHRlbmRzMi5kZWZhdWx0KSh7fSwgYWNjLCB7XG4gICAgICBbb2JqLmtleV06IG9iai52YWxcbiAgICB9KTtcbiAgfSwge30pO1xufTtcblxuLy8gS2VlcCBpbiBtaW5kIHRoYXQgQG1lZGlhIGlzIGluY2x1c2l2ZSBieSB0aGUgQ1NTIHNwZWNpZmljYXRpb24uXG5mdW5jdGlvbiBjcmVhdGVCcmVha3BvaW50cyhicmVha3BvaW50cykge1xuICBjb25zdCB7XG4gICAgICAvLyBUaGUgYnJlYWtwb2ludCAqKnN0YXJ0KiogYXQgdGhpcyB2YWx1ZS5cbiAgICAgIC8vIEZvciBpbnN0YW5jZSB3aXRoIHRoZSBmaXJzdCBicmVha3BvaW50IHhzOiBbeHMsIHNtKS5cbiAgICAgIHZhbHVlcyA9IHtcbiAgICAgICAgeHM6IDAsXG4gICAgICAgIC8vIHBob25lXG4gICAgICAgIHNtOiA2MDAsXG4gICAgICAgIC8vIHRhYmxldFxuICAgICAgICBtZDogOTAwLFxuICAgICAgICAvLyBzbWFsbCBsYXB0b3BcbiAgICAgICAgbGc6IDEyMDAsXG4gICAgICAgIC8vIGRlc2t0b3BcbiAgICAgICAgeGw6IDE1MzYgLy8gbGFyZ2Ugc2NyZWVuXG4gICAgICB9LFxuICAgICAgdW5pdCA9ICdweCcsXG4gICAgICBzdGVwID0gNVxuICAgIH0gPSBicmVha3BvaW50cyxcbiAgICBvdGhlciA9ICgwLCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZTIuZGVmYXVsdCkoYnJlYWtwb2ludHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IHNvcnRlZFZhbHVlcyA9IHNvcnRCcmVha3BvaW50c1ZhbHVlcyh2YWx1ZXMpO1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoc29ydGVkVmFsdWVzKTtcbiAgZnVuY3Rpb24gdXAoa2V5KSB7XG4gICAgY29uc3QgdmFsdWUgPSB0eXBlb2YgdmFsdWVzW2tleV0gPT09ICdudW1iZXInID8gdmFsdWVzW2tleV0gOiBrZXk7XG4gICAgcmV0dXJuIGBAbWVkaWEgKG1pbi13aWR0aDoke3ZhbHVlfSR7dW5pdH0pYDtcbiAgfVxuICBmdW5jdGlvbiBkb3duKGtleSkge1xuICAgIGNvbnN0IHZhbHVlID0gdHlwZW9mIHZhbHVlc1trZXldID09PSAnbnVtYmVyJyA/IHZhbHVlc1trZXldIDoga2V5O1xuICAgIHJldHVybiBgQG1lZGlhIChtYXgtd2lkdGg6JHt2YWx1ZSAtIHN0ZXAgLyAxMDB9JHt1bml0fSlgO1xuICB9XG4gIGZ1bmN0aW9uIGJldHdlZW4oc3RhcnQsIGVuZCkge1xuICAgIGNvbnN0IGVuZEluZGV4ID0ga2V5cy5pbmRleE9mKGVuZCk7XG4gICAgcmV0dXJuIGBAbWVkaWEgKG1pbi13aWR0aDoke3R5cGVvZiB2YWx1ZXNbc3RhcnRdID09PSAnbnVtYmVyJyA/IHZhbHVlc1tzdGFydF0gOiBzdGFydH0ke3VuaXR9KSBhbmQgYCArIGAobWF4LXdpZHRoOiR7KGVuZEluZGV4ICE9PSAtMSAmJiB0eXBlb2YgdmFsdWVzW2tleXNbZW5kSW5kZXhdXSA9PT0gJ251bWJlcicgPyB2YWx1ZXNba2V5c1tlbmRJbmRleF1dIDogZW5kKSAtIHN0ZXAgLyAxMDB9JHt1bml0fSlgO1xuICB9XG4gIGZ1bmN0aW9uIG9ubHkoa2V5KSB7XG4gICAgaWYgKGtleXMuaW5kZXhPZihrZXkpICsgMSA8IGtleXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gYmV0d2VlbihrZXksIGtleXNba2V5cy5pbmRleE9mKGtleSkgKyAxXSk7XG4gICAgfVxuICAgIHJldHVybiB1cChrZXkpO1xuICB9XG4gIGZ1bmN0aW9uIG5vdChrZXkpIHtcbiAgICAvLyBoYW5kbGUgZmlyc3QgYW5kIGxhc3Qga2V5IHNlcGFyYXRlbHksIGZvciBiZXR0ZXIgcmVhZGFiaWxpdHlcbiAgICBjb25zdCBrZXlJbmRleCA9IGtleXMuaW5kZXhPZihrZXkpO1xuICAgIGlmIChrZXlJbmRleCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHVwKGtleXNbMV0pO1xuICAgIH1cbiAgICBpZiAoa2V5SW5kZXggPT09IGtleXMubGVuZ3RoIC0gMSkge1xuICAgICAgcmV0dXJuIGRvd24oa2V5c1trZXlJbmRleF0pO1xuICAgIH1cbiAgICByZXR1cm4gYmV0d2VlbihrZXksIGtleXNba2V5cy5pbmRleE9mKGtleSkgKyAxXSkucmVwbGFjZSgnQG1lZGlhJywgJ0BtZWRpYSBub3QgYWxsIGFuZCcpO1xuICB9XG4gIHJldHVybiAoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHtcbiAgICBrZXlzLFxuICAgIHZhbHVlczogc29ydGVkVmFsdWVzLFxuICAgIHVwLFxuICAgIGRvd24sXG4gICAgYmV0d2VlbixcbiAgICBvbmx5LFxuICAgIG5vdCxcbiAgICB1bml0XG4gIH0sIG90aGVyKTtcbn0iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5jb25zdCBzaGFwZSA9IHtcbiAgYm9yZGVyUmFkaXVzOiA0XG59O1xudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gc2hhcGU7IiwgIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gY3JlYXRlU3BhY2luZztcbnZhciBfc3BhY2luZyA9IHJlcXVpcmUoXCIuLi9zcGFjaW5nXCIpO1xuLy8gVGhlIGRpZmZlcmVudCBzaWduYXR1cmVzIGltcGx5IGRpZmZlcmVudCBtZWFuaW5nIGZvciB0aGVpciBhcmd1bWVudHMgdGhhdCBjYW4ndCBiZSBleHByZXNzZWQgc3RydWN0dXJhbGx5LlxuLy8gV2UgZXhwcmVzcyB0aGUgZGlmZmVyZW5jZSB3aXRoIHZhcmlhYmxlIG5hbWVzLlxuXG5mdW5jdGlvbiBjcmVhdGVTcGFjaW5nKHNwYWNpbmdJbnB1dCA9IDgpIHtcbiAgLy8gQWxyZWFkeSB0cmFuc2Zvcm1lZC5cbiAgaWYgKHNwYWNpbmdJbnB1dC5tdWkpIHtcbiAgICByZXR1cm4gc3BhY2luZ0lucHV0O1xuICB9XG5cbiAgLy8gTWF0ZXJpYWwgRGVzaWduIGxheW91dHMgYXJlIHZpc3VhbGx5IGJhbGFuY2VkLiBNb3N0IG1lYXN1cmVtZW50cyBhbGlnbiB0byBhbiA4ZHAgZ3JpZCwgd2hpY2ggYWxpZ25zIGJvdGggc3BhY2luZyBhbmQgdGhlIG92ZXJhbGwgbGF5b3V0LlxuICAvLyBTbWFsbGVyIGNvbXBvbmVudHMsIHN1Y2ggYXMgaWNvbnMsIGNhbiBhbGlnbiB0byBhIDRkcCBncmlkLlxuICAvLyBodHRwczovL20yLm1hdGVyaWFsLmlvL2Rlc2lnbi9sYXlvdXQvdW5kZXJzdGFuZGluZy1sYXlvdXQuaHRtbFxuICBjb25zdCB0cmFuc2Zvcm0gPSAoMCwgX3NwYWNpbmcuY3JlYXRlVW5hcnlTcGFjaW5nKSh7XG4gICAgc3BhY2luZzogc3BhY2luZ0lucHV0XG4gIH0pO1xuICBjb25zdCBzcGFjaW5nID0gKC4uLmFyZ3NJbnB1dCkgPT4ge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAoIShhcmdzSW5wdXQubGVuZ3RoIDw9IDQpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYE1VSTogVG9vIG1hbnkgYXJndW1lbnRzIHByb3ZpZGVkLCBleHBlY3RlZCBiZXR3ZWVuIDAgYW5kIDQsIGdvdCAke2FyZ3NJbnB1dC5sZW5ndGh9YCk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGFyZ3MgPSBhcmdzSW5wdXQubGVuZ3RoID09PSAwID8gWzFdIDogYXJnc0lucHV0O1xuICAgIHJldHVybiBhcmdzLm1hcChhcmd1bWVudCA9PiB7XG4gICAgICBjb25zdCBvdXRwdXQgPSB0cmFuc2Zvcm0oYXJndW1lbnQpO1xuICAgICAgcmV0dXJuIHR5cGVvZiBvdXRwdXQgPT09ICdudW1iZXInID8gYCR7b3V0cHV0fXB4YCA6IG91dHB1dDtcbiAgICB9KS5qb2luKCcgJyk7XG4gIH07XG4gIHNwYWNpbmcubXVpID0gdHJ1ZTtcbiAgcmV0dXJuIHNwYWNpbmc7XG59IiwgIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gYXBwbHlTdHlsZXM7XG4vKipcbiAqIEEgdW5pdmVyc2FsIHV0aWxpdHkgdG8gc3R5bGUgY29tcG9uZW50cyB3aXRoIG11bHRpcGxlIGNvbG9yIG1vZGVzLiBBbHdheXMgdXNlIGl0IGZyb20gdGhlIHRoZW1lIG9iamVjdC5cbiAqIEl0IHdvcmtzIHdpdGg6XG4gKiAgLSBbQmFzaWMgdGhlbWVdKGh0dHBzOi8vbXVpLmNvbS9tYXRlcmlhbC11aS9jdXN0b21pemF0aW9uL2RhcmstbW9kZS8pXG4gKiAgLSBbQ1NTIHRoZW1lIHZhcmlhYmxlc10oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL2V4cGVyaW1lbnRhbC1hcGkvY3NzLXRoZW1lLXZhcmlhYmxlcy9vdmVydmlldy8pXG4gKiAgLSBaZXJvLXJ1bnRpbWUgZW5naW5lXG4gKlxuICogVGlwczogVXNlIGFuIGFycmF5IG92ZXIgb2JqZWN0IHNwcmVhZCBhbmQgcGxhY2UgYHRoZW1lLmFwcGx5U3R5bGVzKClgIGxhc3QuXG4gKlxuICogXHUyNzA1IFt7IGJhY2tncm91bmQ6ICcjZTVlNWU1JyB9LCB0aGVtZS5hcHBseVN0eWxlcygnZGFyaycsIHsgYmFja2dyb3VuZDogJyMxYzFjMWMnIH0pXVxuICpcbiAqIFx1RDgzRFx1REVBQiB7IGJhY2tncm91bmQ6ICcjZTVlNWU1JywgLi4udGhlbWUuYXBwbHlTdHlsZXMoJ2RhcmsnLCB7IGJhY2tncm91bmQ6ICcjMWMxYzFjJyB9KX1cbiAqXG4gKiBAZXhhbXBsZVxuICogMS4gdXNpbmcgd2l0aCBgc3R5bGVkYDpcbiAqIGBgYGpzeFxuICogICBjb25zdCBDb21wb25lbnQgPSBzdHlsZWQoJ2RpdicpKCh7IHRoZW1lIH0pID0+IFtcbiAqICAgICB7IGJhY2tncm91bmQ6ICcjZTVlNWU1JyB9LFxuICogICAgIHRoZW1lLmFwcGx5U3R5bGVzKCdkYXJrJywge1xuICogICAgICAgYmFja2dyb3VuZDogJyMxYzFjMWMnLFxuICogICAgICAgY29sb3I6ICcjZmZmJyxcbiAqICAgICB9KSxcbiAqICAgXSk7XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICogMi4gdXNpbmcgd2l0aCBgc3hgIHByb3A6XG4gKiBgYGBqc3hcbiAqICAgPEJveCBzeD17dGhlbWUgPT4gW1xuICogICAgIHsgYmFja2dyb3VuZDogJyNlNWU1ZTUnIH0sXG4gKiAgICAgdGhlbWUuYXBwbHlTdHlsZXMoJ2RhcmsnLCB7XG4gKiAgICAgICAgYmFja2dyb3VuZDogJyMxYzFjMWMnLFxuICogICAgICAgIGNvbG9yOiAnI2ZmZicsXG4gKiAgICAgIH0pLFxuICogICAgIF19XG4gKiAgIC8+XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICogMy4gdGhlbWluZyBhIGNvbXBvbmVudDpcbiAqIGBgYGpzeFxuICogICBleHRlbmRUaGVtZSh7XG4gKiAgICAgY29tcG9uZW50czoge1xuICogICAgICAgTXVpQnV0dG9uOiB7XG4gKiAgICAgICAgIHN0eWxlT3ZlcnJpZGVzOiB7XG4gKiAgICAgICAgICAgcm9vdDogKHsgdGhlbWUgfSkgPT4gW1xuICogICAgICAgICAgICAgeyBiYWNrZ3JvdW5kOiAnI2U1ZTVlNScgfSxcbiAqICAgICAgICAgICAgIHRoZW1lLmFwcGx5U3R5bGVzKCdkYXJrJywge1xuICogICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAnIzFjMWMxYycsXG4gKiAgICAgICAgICAgICAgIGNvbG9yOiAnI2ZmZicsXG4gKiAgICAgICAgICAgICB9KSxcbiAqICAgICAgICAgICBdLFxuICogICAgICAgICB9LFxuICogICAgICAgfVxuICogICAgIH1cbiAqICAgfSlcbiAqYGBgXG4gKi9cbmZ1bmN0aW9uIGFwcGx5U3R5bGVzKGtleSwgc3R5bGVzKSB7XG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgdGhpcyBpcyAnYW55JyB0eXBlXG4gIGNvbnN0IHRoZW1lID0gdGhpcztcbiAgaWYgKHRoZW1lLnZhcnMgJiYgdHlwZW9mIHRoZW1lLmdldENvbG9yU2NoZW1lU2VsZWN0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBJZiBDc3NWYXJzUHJvdmlkZXIgaXMgdXNlZCBhcyBhIHByb3ZpZGVyLFxuICAgIC8vIHJldHVybnMgJyogOndoZXJlKFtkYXRhLW11aS1jb2xvci1zY2hlbWU9XCJsaWdodHxkYXJrXCJdKSAmJ1xuICAgIGNvbnN0IHNlbGVjdG9yID0gdGhlbWUuZ2V0Q29sb3JTY2hlbWVTZWxlY3RvcihrZXkpLnJlcGxhY2UoLyhcXFtbXlxcXV0rXFxdKS8sICcqOndoZXJlKCQxKScpO1xuICAgIHJldHVybiB7XG4gICAgICBbc2VsZWN0b3JdOiBzdHlsZXNcbiAgICB9O1xuICB9XG4gIGlmICh0aGVtZS5wYWxldHRlLm1vZGUgPT09IGtleSkge1xuICAgIHJldHVybiBzdHlsZXM7XG4gIH1cbiAgcmV0dXJuIHt9O1xufSIsICJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xudmFyIF9leHRlbmRzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXh0ZW5kc1wiKSk7XG52YXIgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCIpKTtcbnZhciBfZGVlcG1lcmdlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiQG11aS91dGlscy9kZWVwbWVyZ2VcIikpO1xudmFyIF9jcmVhdGVCcmVha3BvaW50cyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vY3JlYXRlQnJlYWtwb2ludHNcIikpO1xudmFyIF9zaGFwZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vc2hhcGVcIikpO1xudmFyIF9jcmVhdGVTcGFjaW5nID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9jcmVhdGVTcGFjaW5nXCIpKTtcbnZhciBfc3R5bGVGdW5jdGlvblN4ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi4vc3R5bGVGdW5jdGlvblN4L3N0eWxlRnVuY3Rpb25TeFwiKSk7XG52YXIgX2RlZmF1bHRTeENvbmZpZyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4uL3N0eWxlRnVuY3Rpb25TeC9kZWZhdWx0U3hDb25maWdcIikpO1xudmFyIF9hcHBseVN0eWxlcyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vYXBwbHlTdHlsZXNcIikpO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiYnJlYWtwb2ludHNcIiwgXCJwYWxldHRlXCIsIFwic3BhY2luZ1wiLCBcInNoYXBlXCJdO1xuZnVuY3Rpb24gY3JlYXRlVGhlbWUob3B0aW9ucyA9IHt9LCAuLi5hcmdzKSB7XG4gIGNvbnN0IHtcbiAgICAgIGJyZWFrcG9pbnRzOiBicmVha3BvaW50c0lucHV0ID0ge30sXG4gICAgICBwYWxldHRlOiBwYWxldHRlSW5wdXQgPSB7fSxcbiAgICAgIHNwYWNpbmc6IHNwYWNpbmdJbnB1dCxcbiAgICAgIHNoYXBlOiBzaGFwZUlucHV0ID0ge31cbiAgICB9ID0gb3B0aW9ucyxcbiAgICBvdGhlciA9ICgwLCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZTIuZGVmYXVsdCkob3B0aW9ucywgX2V4Y2x1ZGVkKTtcbiAgY29uc3QgYnJlYWtwb2ludHMgPSAoMCwgX2NyZWF0ZUJyZWFrcG9pbnRzLmRlZmF1bHQpKGJyZWFrcG9pbnRzSW5wdXQpO1xuICBjb25zdCBzcGFjaW5nID0gKDAsIF9jcmVhdGVTcGFjaW5nLmRlZmF1bHQpKHNwYWNpbmdJbnB1dCk7XG4gIGxldCBtdWlUaGVtZSA9ICgwLCBfZGVlcG1lcmdlLmRlZmF1bHQpKHtcbiAgICBicmVha3BvaW50cyxcbiAgICBkaXJlY3Rpb246ICdsdHInLFxuICAgIGNvbXBvbmVudHM6IHt9LFxuICAgIC8vIEluamVjdCBjb21wb25lbnQgZGVmaW5pdGlvbnMuXG4gICAgcGFsZXR0ZTogKDAsIF9leHRlbmRzMi5kZWZhdWx0KSh7XG4gICAgICBtb2RlOiAnbGlnaHQnXG4gICAgfSwgcGFsZXR0ZUlucHV0KSxcbiAgICBzcGFjaW5nLFxuICAgIHNoYXBlOiAoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHt9LCBfc2hhcGUuZGVmYXVsdCwgc2hhcGVJbnB1dClcbiAgfSwgb3RoZXIpO1xuICBtdWlUaGVtZS5hcHBseVN0eWxlcyA9IF9hcHBseVN0eWxlcy5kZWZhdWx0O1xuICBtdWlUaGVtZSA9IGFyZ3MucmVkdWNlKChhY2MsIGFyZ3VtZW50KSA9PiAoMCwgX2RlZXBtZXJnZS5kZWZhdWx0KShhY2MsIGFyZ3VtZW50KSwgbXVpVGhlbWUpO1xuICBtdWlUaGVtZS51bnN0YWJsZV9zeENvbmZpZyA9ICgwLCBfZXh0ZW5kczIuZGVmYXVsdCkoe30sIF9kZWZhdWx0U3hDb25maWcuZGVmYXVsdCwgb3RoZXIgPT0gbnVsbCA/IHZvaWQgMCA6IG90aGVyLnVuc3RhYmxlX3N4Q29uZmlnKTtcbiAgbXVpVGhlbWUudW5zdGFibGVfc3ggPSBmdW5jdGlvbiBzeChwcm9wcykge1xuICAgIHJldHVybiAoMCwgX3N0eWxlRnVuY3Rpb25TeC5kZWZhdWx0KSh7XG4gICAgICBzeDogcHJvcHMsXG4gICAgICB0aGVtZTogdGhpc1xuICAgIH0pO1xuICB9O1xuICByZXR1cm4gbXVpVGhlbWU7XG59XG52YXIgX2RlZmF1bHQgPSBleHBvcnRzLmRlZmF1bHQgPSBjcmVhdGVUaGVtZTsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRlZmF1bHRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX2NyZWF0ZVRoZW1lLmRlZmF1bHQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicHJpdmF0ZV9jcmVhdGVCcmVha3BvaW50c1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfY3JlYXRlQnJlYWtwb2ludHMuZGVmYXVsdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ1bnN0YWJsZV9hcHBseVN0eWxlc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfYXBwbHlTdHlsZXMuZGVmYXVsdDtcbiAgfVxufSk7XG52YXIgX2NyZWF0ZVRoZW1lID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9jcmVhdGVUaGVtZVwiKSk7XG52YXIgX2NyZWF0ZUJyZWFrcG9pbnRzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9jcmVhdGVCcmVha3BvaW50c1wiKSk7XG52YXIgX2FwcGx5U3R5bGVzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9hcHBseVN0eWxlc1wiKSk7IiwgIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFscGhhID0gYWxwaGE7XG5leHBvcnRzLmJsZW5kID0gYmxlbmQ7XG5leHBvcnRzLmNvbG9yQ2hhbm5lbCA9IHZvaWQgMDtcbmV4cG9ydHMuZGFya2VuID0gZGFya2VuO1xuZXhwb3J0cy5kZWNvbXBvc2VDb2xvciA9IGRlY29tcG9zZUNvbG9yO1xuZXhwb3J0cy5lbXBoYXNpemUgPSBlbXBoYXNpemU7XG5leHBvcnRzLmdldENvbnRyYXN0UmF0aW8gPSBnZXRDb250cmFzdFJhdGlvO1xuZXhwb3J0cy5nZXRMdW1pbmFuY2UgPSBnZXRMdW1pbmFuY2U7XG5leHBvcnRzLmhleFRvUmdiID0gaGV4VG9SZ2I7XG5leHBvcnRzLmhzbFRvUmdiID0gaHNsVG9SZ2I7XG5leHBvcnRzLmxpZ2h0ZW4gPSBsaWdodGVuO1xuZXhwb3J0cy5wcml2YXRlX3NhZmVBbHBoYSA9IHByaXZhdGVfc2FmZUFscGhhO1xuZXhwb3J0cy5wcml2YXRlX3NhZmVDb2xvckNoYW5uZWwgPSB2b2lkIDA7XG5leHBvcnRzLnByaXZhdGVfc2FmZURhcmtlbiA9IHByaXZhdGVfc2FmZURhcmtlbjtcbmV4cG9ydHMucHJpdmF0ZV9zYWZlRW1waGFzaXplID0gcHJpdmF0ZV9zYWZlRW1waGFzaXplO1xuZXhwb3J0cy5wcml2YXRlX3NhZmVMaWdodGVuID0gcHJpdmF0ZV9zYWZlTGlnaHRlbjtcbmV4cG9ydHMucmVjb21wb3NlQ29sb3IgPSByZWNvbXBvc2VDb2xvcjtcbmV4cG9ydHMucmdiVG9IZXggPSByZ2JUb0hleDtcbnZhciBfZm9ybWF0TXVpRXJyb3JNZXNzYWdlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIkBtdWkvdXRpbHMvZm9ybWF0TXVpRXJyb3JNZXNzYWdlXCIpKTtcbnZhciBfY2xhbXAgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJAbXVpL3V0aWxzL2NsYW1wXCIpKTtcbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvbiAqL1xuXG4vKipcbiAqIFJldHVybnMgYSBudW1iZXIgd2hvc2UgdmFsdWUgaXMgbGltaXRlZCB0byB0aGUgZ2l2ZW4gcmFuZ2UuXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgVGhlIHZhbHVlIHRvIGJlIGNsYW1wZWRcbiAqIEBwYXJhbSB7bnVtYmVyfSBtaW4gVGhlIGxvd2VyIGJvdW5kYXJ5IG9mIHRoZSBvdXRwdXQgcmFuZ2VcbiAqIEBwYXJhbSB7bnVtYmVyfSBtYXggVGhlIHVwcGVyIGJvdW5kYXJ5IG9mIHRoZSBvdXRwdXQgcmFuZ2VcbiAqIEByZXR1cm5zIHtudW1iZXJ9IEEgbnVtYmVyIGluIHRoZSByYW5nZSBbbWluLCBtYXhdXG4gKi9cbmZ1bmN0aW9uIGNsYW1wV3JhcHBlcih2YWx1ZSwgbWluID0gMCwgbWF4ID0gMSkge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmICh2YWx1ZSA8IG1pbiB8fCB2YWx1ZSA+IG1heCkge1xuICAgICAgY29uc29sZS5lcnJvcihgTVVJOiBUaGUgdmFsdWUgcHJvdmlkZWQgJHt2YWx1ZX0gaXMgb3V0IG9mIHJhbmdlIFske21pbn0sICR7bWF4fV0uYCk7XG4gICAgfVxuICB9XG4gIHJldHVybiAoMCwgX2NsYW1wLmRlZmF1bHQpKHZhbHVlLCBtaW4sIG1heCk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBjb2xvciBmcm9tIENTUyBoZXggZm9ybWF0IHRvIENTUyByZ2IgZm9ybWF0LlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yIC0gSGV4IGNvbG9yLCBpLmUuICNubm4gb3IgI25ubm5ublxuICogQHJldHVybnMge3N0cmluZ30gQSBDU1MgcmdiIGNvbG9yIHN0cmluZ1xuICovXG5mdW5jdGlvbiBoZXhUb1JnYihjb2xvcikge1xuICBjb2xvciA9IGNvbG9yLnNsaWNlKDEpO1xuICBjb25zdCByZSA9IG5ldyBSZWdFeHAoYC57MSwke2NvbG9yLmxlbmd0aCA+PSA2ID8gMiA6IDF9fWAsICdnJyk7XG4gIGxldCBjb2xvcnMgPSBjb2xvci5tYXRjaChyZSk7XG4gIGlmIChjb2xvcnMgJiYgY29sb3JzWzBdLmxlbmd0aCA9PT0gMSkge1xuICAgIGNvbG9ycyA9IGNvbG9ycy5tYXAobiA9PiBuICsgbik7XG4gIH1cbiAgcmV0dXJuIGNvbG9ycyA/IGByZ2Ike2NvbG9ycy5sZW5ndGggPT09IDQgPyAnYScgOiAnJ30oJHtjb2xvcnMubWFwKChuLCBpbmRleCkgPT4ge1xuICAgIHJldHVybiBpbmRleCA8IDMgPyBwYXJzZUludChuLCAxNikgOiBNYXRoLnJvdW5kKHBhcnNlSW50KG4sIDE2KSAvIDI1NSAqIDEwMDApIC8gMTAwMDtcbiAgfSkuam9pbignLCAnKX0pYCA6ICcnO1xufVxuZnVuY3Rpb24gaW50VG9IZXgoaW50KSB7XG4gIGNvbnN0IGhleCA9IGludC50b1N0cmluZygxNik7XG4gIHJldHVybiBoZXgubGVuZ3RoID09PSAxID8gYDAke2hleH1gIDogaGV4O1xufVxuXG4vKipcbiAqIFJldHVybnMgYW4gb2JqZWN0IHdpdGggdGhlIHR5cGUgYW5kIHZhbHVlcyBvZiBhIGNvbG9yLlxuICpcbiAqIE5vdGU6IERvZXMgbm90IHN1cHBvcnQgcmdiICUgdmFsdWVzLlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yIC0gQ1NTIGNvbG9yLCBpLmUuIG9uZSBvZjogI25ubiwgI25ubm5ubiwgcmdiKCksIHJnYmEoKSwgaHNsKCksIGhzbGEoKSwgY29sb3IoKVxuICogQHJldHVybnMge29iamVjdH0gLSBBIE1VSSBjb2xvciBvYmplY3Q6IHt0eXBlOiBzdHJpbmcsIHZhbHVlczogbnVtYmVyW119XG4gKi9cbmZ1bmN0aW9uIGRlY29tcG9zZUNvbG9yKGNvbG9yKSB7XG4gIC8vIElkZW1wb3RlbnRcbiAgaWYgKGNvbG9yLnR5cGUpIHtcbiAgICByZXR1cm4gY29sb3I7XG4gIH1cbiAgaWYgKGNvbG9yLmNoYXJBdCgwKSA9PT0gJyMnKSB7XG4gICAgcmV0dXJuIGRlY29tcG9zZUNvbG9yKGhleFRvUmdiKGNvbG9yKSk7XG4gIH1cbiAgY29uc3QgbWFya2VyID0gY29sb3IuaW5kZXhPZignKCcpO1xuICBjb25zdCB0eXBlID0gY29sb3Iuc3Vic3RyaW5nKDAsIG1hcmtlcik7XG4gIGlmIChbJ3JnYicsICdyZ2JhJywgJ2hzbCcsICdoc2xhJywgJ2NvbG9yJ10uaW5kZXhPZih0eXBlKSA9PT0gLTEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gYE1VSTogVW5zdXBwb3J0ZWQgXFxgJHtjb2xvcn1cXGAgY29sb3IuXG5UaGUgZm9sbG93aW5nIGZvcm1hdHMgYXJlIHN1cHBvcnRlZDogI25ubiwgI25ubm5ubiwgcmdiKCksIHJnYmEoKSwgaHNsKCksIGhzbGEoKSwgY29sb3IoKS5gIDogKDAsIF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UyLmRlZmF1bHQpKDksIGNvbG9yKSk7XG4gIH1cbiAgbGV0IHZhbHVlcyA9IGNvbG9yLnN1YnN0cmluZyhtYXJrZXIgKyAxLCBjb2xvci5sZW5ndGggLSAxKTtcbiAgbGV0IGNvbG9yU3BhY2U7XG4gIGlmICh0eXBlID09PSAnY29sb3InKSB7XG4gICAgdmFsdWVzID0gdmFsdWVzLnNwbGl0KCcgJyk7XG4gICAgY29sb3JTcGFjZSA9IHZhbHVlcy5zaGlmdCgpO1xuICAgIGlmICh2YWx1ZXMubGVuZ3RoID09PSA0ICYmIHZhbHVlc1szXS5jaGFyQXQoMCkgPT09ICcvJykge1xuICAgICAgdmFsdWVzWzNdID0gdmFsdWVzWzNdLnNsaWNlKDEpO1xuICAgIH1cbiAgICBpZiAoWydzcmdiJywgJ2Rpc3BsYXktcDMnLCAnYTk4LXJnYicsICdwcm9waG90by1yZ2InLCAncmVjLTIwMjAnXS5pbmRleE9mKGNvbG9yU3BhY2UpID09PSAtMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGBNVUk6IHVuc3VwcG9ydGVkIFxcYCR7Y29sb3JTcGFjZX1cXGAgY29sb3Igc3BhY2UuXG5UaGUgZm9sbG93aW5nIGNvbG9yIHNwYWNlcyBhcmUgc3VwcG9ydGVkOiBzcmdiLCBkaXNwbGF5LXAzLCBhOTgtcmdiLCBwcm9waG90by1yZ2IsIHJlYy0yMDIwLmAgOiAoMCwgX2Zvcm1hdE11aUVycm9yTWVzc2FnZTIuZGVmYXVsdCkoMTAsIGNvbG9yU3BhY2UpKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFsdWVzID0gdmFsdWVzLnNwbGl0KCcsJyk7XG4gIH1cbiAgdmFsdWVzID0gdmFsdWVzLm1hcCh2YWx1ZSA9PiBwYXJzZUZsb2F0KHZhbHVlKSk7XG4gIHJldHVybiB7XG4gICAgdHlwZSxcbiAgICB2YWx1ZXMsXG4gICAgY29sb3JTcGFjZVxuICB9O1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBjaGFubmVsIGNyZWF0ZWQgZnJvbSB0aGUgaW5wdXQgY29sb3IuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yIC0gQ1NTIGNvbG9yLCBpLmUuIG9uZSBvZjogI25ubiwgI25ubm5ubiwgcmdiKCksIHJnYmEoKSwgaHNsKCksIGhzbGEoKSwgY29sb3IoKVxuICogQHJldHVybnMge3N0cmluZ30gLSBUaGUgY2hhbm5lbCBmb3IgdGhlIGNvbG9yLCB0aGF0IGNhbiBiZSB1c2VkIGluIHJnYmEgb3IgaHNsYSBjb2xvcnNcbiAqL1xuY29uc3QgY29sb3JDaGFubmVsID0gY29sb3IgPT4ge1xuICBjb25zdCBkZWNvbXBvc2VkQ29sb3IgPSBkZWNvbXBvc2VDb2xvcihjb2xvcik7XG4gIHJldHVybiBkZWNvbXBvc2VkQ29sb3IudmFsdWVzLnNsaWNlKDAsIDMpLm1hcCgodmFsLCBpZHgpID0+IGRlY29tcG9zZWRDb2xvci50eXBlLmluZGV4T2YoJ2hzbCcpICE9PSAtMSAmJiBpZHggIT09IDAgPyBgJHt2YWx9JWAgOiB2YWwpLmpvaW4oJyAnKTtcbn07XG5leHBvcnRzLmNvbG9yQ2hhbm5lbCA9IGNvbG9yQ2hhbm5lbDtcbmNvbnN0IHByaXZhdGVfc2FmZUNvbG9yQ2hhbm5lbCA9IChjb2xvciwgd2FybmluZykgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBjb2xvckNoYW5uZWwoY29sb3IpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmICh3YXJuaW5nICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGNvbnNvbGUud2Fybih3YXJuaW5nKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbG9yO1xuICB9XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIGEgY29sb3Igb2JqZWN0IHdpdGggdHlwZSBhbmQgdmFsdWVzIHRvIGEgc3RyaW5nLlxuICogQHBhcmFtIHtvYmplY3R9IGNvbG9yIC0gRGVjb21wb3NlZCBjb2xvclxuICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yLnR5cGUgLSBPbmUgb2Y6ICdyZ2InLCAncmdiYScsICdoc2wnLCAnaHNsYScsICdjb2xvcidcbiAqIEBwYXJhbSB7YXJyYXl9IGNvbG9yLnZhbHVlcyAtIFtuLG4sbl0gb3IgW24sbixuLG5dXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBIENTUyBjb2xvciBzdHJpbmdcbiAqL1xuZXhwb3J0cy5wcml2YXRlX3NhZmVDb2xvckNoYW5uZWwgPSBwcml2YXRlX3NhZmVDb2xvckNoYW5uZWw7XG5mdW5jdGlvbiByZWNvbXBvc2VDb2xvcihjb2xvcikge1xuICBjb25zdCB7XG4gICAgdHlwZSxcbiAgICBjb2xvclNwYWNlXG4gIH0gPSBjb2xvcjtcbiAgbGV0IHtcbiAgICB2YWx1ZXNcbiAgfSA9IGNvbG9yO1xuICBpZiAodHlwZS5pbmRleE9mKCdyZ2InKSAhPT0gLTEpIHtcbiAgICAvLyBPbmx5IGNvbnZlcnQgdGhlIGZpcnN0IDMgdmFsdWVzIHRvIGludCAoaS5lLiBub3QgYWxwaGEpXG4gICAgdmFsdWVzID0gdmFsdWVzLm1hcCgobiwgaSkgPT4gaSA8IDMgPyBwYXJzZUludChuLCAxMCkgOiBuKTtcbiAgfSBlbHNlIGlmICh0eXBlLmluZGV4T2YoJ2hzbCcpICE9PSAtMSkge1xuICAgIHZhbHVlc1sxXSA9IGAke3ZhbHVlc1sxXX0lYDtcbiAgICB2YWx1ZXNbMl0gPSBgJHt2YWx1ZXNbMl19JWA7XG4gIH1cbiAgaWYgKHR5cGUuaW5kZXhPZignY29sb3InKSAhPT0gLTEpIHtcbiAgICB2YWx1ZXMgPSBgJHtjb2xvclNwYWNlfSAke3ZhbHVlcy5qb2luKCcgJyl9YDtcbiAgfSBlbHNlIHtcbiAgICB2YWx1ZXMgPSBgJHt2YWx1ZXMuam9pbignLCAnKX1gO1xuICB9XG4gIHJldHVybiBgJHt0eXBlfSgke3ZhbHVlc30pYDtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIGNvbG9yIGZyb20gQ1NTIHJnYiBmb3JtYXQgdG8gQ1NTIGhleCBmb3JtYXQuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3IgLSBSR0IgY29sb3IsIGkuZS4gcmdiKG4sIG4sIG4pXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBIENTUyByZ2IgY29sb3Igc3RyaW5nLCBpLmUuICNubm5ubm5cbiAqL1xuZnVuY3Rpb24gcmdiVG9IZXgoY29sb3IpIHtcbiAgLy8gSWRlbXBvdGVudFxuICBpZiAoY29sb3IuaW5kZXhPZignIycpID09PSAwKSB7XG4gICAgcmV0dXJuIGNvbG9yO1xuICB9XG4gIGNvbnN0IHtcbiAgICB2YWx1ZXNcbiAgfSA9IGRlY29tcG9zZUNvbG9yKGNvbG9yKTtcbiAgcmV0dXJuIGAjJHt2YWx1ZXMubWFwKChuLCBpKSA9PiBpbnRUb0hleChpID09PSAzID8gTWF0aC5yb3VuZCgyNTUgKiBuKSA6IG4pKS5qb2luKCcnKX1gO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgY29sb3IgZnJvbSBoc2wgZm9ybWF0IHRvIHJnYiBmb3JtYXQuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3IgLSBIU0wgY29sb3IgdmFsdWVzXG4gKiBAcmV0dXJucyB7c3RyaW5nfSByZ2IgY29sb3IgdmFsdWVzXG4gKi9cbmZ1bmN0aW9uIGhzbFRvUmdiKGNvbG9yKSB7XG4gIGNvbG9yID0gZGVjb21wb3NlQ29sb3IoY29sb3IpO1xuICBjb25zdCB7XG4gICAgdmFsdWVzXG4gIH0gPSBjb2xvcjtcbiAgY29uc3QgaCA9IHZhbHVlc1swXTtcbiAgY29uc3QgcyA9IHZhbHVlc1sxXSAvIDEwMDtcbiAgY29uc3QgbCA9IHZhbHVlc1syXSAvIDEwMDtcbiAgY29uc3QgYSA9IHMgKiBNYXRoLm1pbihsLCAxIC0gbCk7XG4gIGNvbnN0IGYgPSAobiwgayA9IChuICsgaCAvIDMwKSAlIDEyKSA9PiBsIC0gYSAqIE1hdGgubWF4KE1hdGgubWluKGsgLSAzLCA5IC0gaywgMSksIC0xKTtcbiAgbGV0IHR5cGUgPSAncmdiJztcbiAgY29uc3QgcmdiID0gW01hdGgucm91bmQoZigwKSAqIDI1NSksIE1hdGgucm91bmQoZig4KSAqIDI1NSksIE1hdGgucm91bmQoZig0KSAqIDI1NSldO1xuICBpZiAoY29sb3IudHlwZSA9PT0gJ2hzbGEnKSB7XG4gICAgdHlwZSArPSAnYSc7XG4gICAgcmdiLnB1c2godmFsdWVzWzNdKTtcbiAgfVxuICByZXR1cm4gcmVjb21wb3NlQ29sb3Ioe1xuICAgIHR5cGUsXG4gICAgdmFsdWVzOiByZ2JcbiAgfSk7XG59XG4vKipcbiAqIFRoZSByZWxhdGl2ZSBicmlnaHRuZXNzIG9mIGFueSBwb2ludCBpbiBhIGNvbG9yIHNwYWNlLFxuICogbm9ybWFsaXplZCB0byAwIGZvciBkYXJrZXN0IGJsYWNrIGFuZCAxIGZvciBsaWdodGVzdCB3aGl0ZS5cbiAqXG4gKiBGb3JtdWxhOiBodHRwczovL3d3dy53My5vcmcvVFIvV0NBRzIwLVRFQ0hTL0cxNy5odG1sI0cxNy10ZXN0c1xuICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yIC0gQ1NTIGNvbG9yLCBpLmUuIG9uZSBvZjogI25ubiwgI25ubm5ubiwgcmdiKCksIHJnYmEoKSwgaHNsKCksIGhzbGEoKSwgY29sb3IoKVxuICogQHJldHVybnMge251bWJlcn0gVGhlIHJlbGF0aXZlIGJyaWdodG5lc3Mgb2YgdGhlIGNvbG9yIGluIHRoZSByYW5nZSAwIC0gMVxuICovXG5mdW5jdGlvbiBnZXRMdW1pbmFuY2UoY29sb3IpIHtcbiAgY29sb3IgPSBkZWNvbXBvc2VDb2xvcihjb2xvcik7XG4gIGxldCByZ2IgPSBjb2xvci50eXBlID09PSAnaHNsJyB8fCBjb2xvci50eXBlID09PSAnaHNsYScgPyBkZWNvbXBvc2VDb2xvcihoc2xUb1JnYihjb2xvcikpLnZhbHVlcyA6IGNvbG9yLnZhbHVlcztcbiAgcmdiID0gcmdiLm1hcCh2YWwgPT4ge1xuICAgIGlmIChjb2xvci50eXBlICE9PSAnY29sb3InKSB7XG4gICAgICB2YWwgLz0gMjU1OyAvLyBub3JtYWxpemVkXG4gICAgfVxuICAgIHJldHVybiB2YWwgPD0gMC4wMzkyOCA/IHZhbCAvIDEyLjkyIDogKCh2YWwgKyAwLjA1NSkgLyAxLjA1NSkgKiogMi40O1xuICB9KTtcblxuICAvLyBUcnVuY2F0ZSBhdCAzIGRpZ2l0c1xuICByZXR1cm4gTnVtYmVyKCgwLjIxMjYgKiByZ2JbMF0gKyAwLjcxNTIgKiByZ2JbMV0gKyAwLjA3MjIgKiByZ2JbMl0pLnRvRml4ZWQoMykpO1xufVxuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGNvbnRyYXN0IHJhdGlvIGJldHdlZW4gdHdvIGNvbG9ycy5cbiAqXG4gKiBGb3JtdWxhOiBodHRwczovL3d3dy53My5vcmcvVFIvV0NBRzIwLVRFQ0hTL0cxNy5odG1sI0cxNy10ZXN0c1xuICogQHBhcmFtIHtzdHJpbmd9IGZvcmVncm91bmQgLSBDU1MgY29sb3IsIGkuZS4gb25lIG9mOiAjbm5uLCAjbm5ubm5uLCByZ2IoKSwgcmdiYSgpLCBoc2woKSwgaHNsYSgpXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFja2dyb3VuZCAtIENTUyBjb2xvciwgaS5lLiBvbmUgb2Y6ICNubm4sICNubm5ubm4sIHJnYigpLCByZ2JhKCksIGhzbCgpLCBoc2xhKClcbiAqIEByZXR1cm5zIHtudW1iZXJ9IEEgY29udHJhc3QgcmF0aW8gdmFsdWUgaW4gdGhlIHJhbmdlIDAgLSAyMS5cbiAqL1xuZnVuY3Rpb24gZ2V0Q29udHJhc3RSYXRpbyhmb3JlZ3JvdW5kLCBiYWNrZ3JvdW5kKSB7XG4gIGNvbnN0IGx1bUEgPSBnZXRMdW1pbmFuY2UoZm9yZWdyb3VuZCk7XG4gIGNvbnN0IGx1bUIgPSBnZXRMdW1pbmFuY2UoYmFja2dyb3VuZCk7XG4gIHJldHVybiAoTWF0aC5tYXgobHVtQSwgbHVtQikgKyAwLjA1KSAvIChNYXRoLm1pbihsdW1BLCBsdW1CKSArIDAuMDUpO1xufVxuXG4vKipcbiAqIFNldHMgdGhlIGFic29sdXRlIHRyYW5zcGFyZW5jeSBvZiBhIGNvbG9yLlxuICogQW55IGV4aXN0aW5nIGFscGhhIHZhbHVlcyBhcmUgb3ZlcndyaXR0ZW4uXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3IgLSBDU1MgY29sb3IsIGkuZS4gb25lIG9mOiAjbm5uLCAjbm5ubm5uLCByZ2IoKSwgcmdiYSgpLCBoc2woKSwgaHNsYSgpLCBjb2xvcigpXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSB2YWx1ZSB0byBzZXQgdGhlIGFscGhhIGNoYW5uZWwgdG8gaW4gdGhlIHJhbmdlIDAgLSAxXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBIENTUyBjb2xvciBzdHJpbmcuIEhleCBpbnB1dCB2YWx1ZXMgYXJlIHJldHVybmVkIGFzIHJnYlxuICovXG5mdW5jdGlvbiBhbHBoYShjb2xvciwgdmFsdWUpIHtcbiAgY29sb3IgPSBkZWNvbXBvc2VDb2xvcihjb2xvcik7XG4gIHZhbHVlID0gY2xhbXBXcmFwcGVyKHZhbHVlKTtcbiAgaWYgKGNvbG9yLnR5cGUgPT09ICdyZ2InIHx8IGNvbG9yLnR5cGUgPT09ICdoc2wnKSB7XG4gICAgY29sb3IudHlwZSArPSAnYSc7XG4gIH1cbiAgaWYgKGNvbG9yLnR5cGUgPT09ICdjb2xvcicpIHtcbiAgICBjb2xvci52YWx1ZXNbM10gPSBgLyR7dmFsdWV9YDtcbiAgfSBlbHNlIHtcbiAgICBjb2xvci52YWx1ZXNbM10gPSB2YWx1ZTtcbiAgfVxuICByZXR1cm4gcmVjb21wb3NlQ29sb3IoY29sb3IpO1xufVxuZnVuY3Rpb24gcHJpdmF0ZV9zYWZlQWxwaGEoY29sb3IsIHZhbHVlLCB3YXJuaW5nKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGFscGhhKGNvbG9yLCB2YWx1ZSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKHdhcm5pbmcgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgY29uc29sZS53YXJuKHdhcm5pbmcpO1xuICAgIH1cbiAgICByZXR1cm4gY29sb3I7XG4gIH1cbn1cblxuLyoqXG4gKiBEYXJrZW5zIGEgY29sb3IuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3IgLSBDU1MgY29sb3IsIGkuZS4gb25lIG9mOiAjbm5uLCAjbm5ubm5uLCByZ2IoKSwgcmdiYSgpLCBoc2woKSwgaHNsYSgpLCBjb2xvcigpXG4gKiBAcGFyYW0ge251bWJlcn0gY29lZmZpY2llbnQgLSBtdWx0aXBsaWVyIGluIHRoZSByYW5nZSAwIC0gMVxuICogQHJldHVybnMge3N0cmluZ30gQSBDU1MgY29sb3Igc3RyaW5nLiBIZXggaW5wdXQgdmFsdWVzIGFyZSByZXR1cm5lZCBhcyByZ2JcbiAqL1xuZnVuY3Rpb24gZGFya2VuKGNvbG9yLCBjb2VmZmljaWVudCkge1xuICBjb2xvciA9IGRlY29tcG9zZUNvbG9yKGNvbG9yKTtcbiAgY29lZmZpY2llbnQgPSBjbGFtcFdyYXBwZXIoY29lZmZpY2llbnQpO1xuICBpZiAoY29sb3IudHlwZS5pbmRleE9mKCdoc2wnKSAhPT0gLTEpIHtcbiAgICBjb2xvci52YWx1ZXNbMl0gKj0gMSAtIGNvZWZmaWNpZW50O1xuICB9IGVsc2UgaWYgKGNvbG9yLnR5cGUuaW5kZXhPZigncmdiJykgIT09IC0xIHx8IGNvbG9yLnR5cGUuaW5kZXhPZignY29sb3InKSAhPT0gLTEpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDM7IGkgKz0gMSkge1xuICAgICAgY29sb3IudmFsdWVzW2ldICo9IDEgLSBjb2VmZmljaWVudDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY29tcG9zZUNvbG9yKGNvbG9yKTtcbn1cbmZ1bmN0aW9uIHByaXZhdGVfc2FmZURhcmtlbihjb2xvciwgY29lZmZpY2llbnQsIHdhcm5pbmcpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZGFya2VuKGNvbG9yLCBjb2VmZmljaWVudCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKHdhcm5pbmcgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgY29uc29sZS53YXJuKHdhcm5pbmcpO1xuICAgIH1cbiAgICByZXR1cm4gY29sb3I7XG4gIH1cbn1cblxuLyoqXG4gKiBMaWdodGVucyBhIGNvbG9yLlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yIC0gQ1NTIGNvbG9yLCBpLmUuIG9uZSBvZjogI25ubiwgI25ubm5ubiwgcmdiKCksIHJnYmEoKSwgaHNsKCksIGhzbGEoKSwgY29sb3IoKVxuICogQHBhcmFtIHtudW1iZXJ9IGNvZWZmaWNpZW50IC0gbXVsdGlwbGllciBpbiB0aGUgcmFuZ2UgMCAtIDFcbiAqIEByZXR1cm5zIHtzdHJpbmd9IEEgQ1NTIGNvbG9yIHN0cmluZy4gSGV4IGlucHV0IHZhbHVlcyBhcmUgcmV0dXJuZWQgYXMgcmdiXG4gKi9cbmZ1bmN0aW9uIGxpZ2h0ZW4oY29sb3IsIGNvZWZmaWNpZW50KSB7XG4gIGNvbG9yID0gZGVjb21wb3NlQ29sb3IoY29sb3IpO1xuICBjb2VmZmljaWVudCA9IGNsYW1wV3JhcHBlcihjb2VmZmljaWVudCk7XG4gIGlmIChjb2xvci50eXBlLmluZGV4T2YoJ2hzbCcpICE9PSAtMSkge1xuICAgIGNvbG9yLnZhbHVlc1syXSArPSAoMTAwIC0gY29sb3IudmFsdWVzWzJdKSAqIGNvZWZmaWNpZW50O1xuICB9IGVsc2UgaWYgKGNvbG9yLnR5cGUuaW5kZXhPZigncmdiJykgIT09IC0xKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAzOyBpICs9IDEpIHtcbiAgICAgIGNvbG9yLnZhbHVlc1tpXSArPSAoMjU1IC0gY29sb3IudmFsdWVzW2ldKSAqIGNvZWZmaWNpZW50O1xuICAgIH1cbiAgfSBlbHNlIGlmIChjb2xvci50eXBlLmluZGV4T2YoJ2NvbG9yJykgIT09IC0xKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAzOyBpICs9IDEpIHtcbiAgICAgIGNvbG9yLnZhbHVlc1tpXSArPSAoMSAtIGNvbG9yLnZhbHVlc1tpXSkgKiBjb2VmZmljaWVudDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY29tcG9zZUNvbG9yKGNvbG9yKTtcbn1cbmZ1bmN0aW9uIHByaXZhdGVfc2FmZUxpZ2h0ZW4oY29sb3IsIGNvZWZmaWNpZW50LCB3YXJuaW5nKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGxpZ2h0ZW4oY29sb3IsIGNvZWZmaWNpZW50KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAod2FybmluZyAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBjb25zb2xlLndhcm4od2FybmluZyk7XG4gICAgfVxuICAgIHJldHVybiBjb2xvcjtcbiAgfVxufVxuXG4vKipcbiAqIERhcmtlbiBvciBsaWdodGVuIGEgY29sb3IsIGRlcGVuZGluZyBvbiBpdHMgbHVtaW5hbmNlLlxuICogTGlnaHQgY29sb3JzIGFyZSBkYXJrZW5lZCwgZGFyayBjb2xvcnMgYXJlIGxpZ2h0ZW5lZC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvciAtIENTUyBjb2xvciwgaS5lLiBvbmUgb2Y6ICNubm4sICNubm5ubm4sIHJnYigpLCByZ2JhKCksIGhzbCgpLCBoc2xhKCksIGNvbG9yKClcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2VmZmljaWVudD0wLjE1IC0gbXVsdGlwbGllciBpbiB0aGUgcmFuZ2UgMCAtIDFcbiAqIEByZXR1cm5zIHtzdHJpbmd9IEEgQ1NTIGNvbG9yIHN0cmluZy4gSGV4IGlucHV0IHZhbHVlcyBhcmUgcmV0dXJuZWQgYXMgcmdiXG4gKi9cbmZ1bmN0aW9uIGVtcGhhc2l6ZShjb2xvciwgY29lZmZpY2llbnQgPSAwLjE1KSB7XG4gIHJldHVybiBnZXRMdW1pbmFuY2UoY29sb3IpID4gMC41ID8gZGFya2VuKGNvbG9yLCBjb2VmZmljaWVudCkgOiBsaWdodGVuKGNvbG9yLCBjb2VmZmljaWVudCk7XG59XG5mdW5jdGlvbiBwcml2YXRlX3NhZmVFbXBoYXNpemUoY29sb3IsIGNvZWZmaWNpZW50LCB3YXJuaW5nKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHByaXZhdGVfc2FmZUVtcGhhc2l6ZShjb2xvciwgY29lZmZpY2llbnQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmICh3YXJuaW5nICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGNvbnNvbGUud2Fybih3YXJuaW5nKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbG9yO1xuICB9XG59XG5cbi8qKlxuICogQmxlbmQgYSB0cmFuc3BhcmVudCBvdmVybGF5IGNvbG9yIHdpdGggYSBiYWNrZ3JvdW5kIGNvbG9yLCByZXN1bHRpbmcgaW4gYSBzaW5nbGVcbiAqIFJHQiBjb2xvci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBiYWNrZ3JvdW5kIC0gQ1NTIGNvbG9yXG4gKiBAcGFyYW0ge3N0cmluZ30gb3ZlcmxheSAtIENTUyBjb2xvclxuICogQHBhcmFtIHtudW1iZXJ9IG9wYWNpdHkgLSBPcGFjaXR5IG11bHRpcGxpZXIgaW4gdGhlIHJhbmdlIDAgLSAxXG4gKiBAcGFyYW0ge251bWJlcn0gW2dhbW1hPTEuMF0gLSBHYW1tYSBjb3JyZWN0aW9uIGZhY3Rvci4gRm9yIGdhbW1hLWNvcnJlY3QgYmxlbmRpbmcsIDIuMiBpcyB1c3VhbC5cbiAqL1xuZnVuY3Rpb24gYmxlbmQoYmFja2dyb3VuZCwgb3ZlcmxheSwgb3BhY2l0eSwgZ2FtbWEgPSAxLjApIHtcbiAgY29uc3QgYmxlbmRDaGFubmVsID0gKGIsIG8pID0+IE1hdGgucm91bmQoKGIgKiogKDEgLyBnYW1tYSkgKiAoMSAtIG9wYWNpdHkpICsgbyAqKiAoMSAvIGdhbW1hKSAqIG9wYWNpdHkpICoqIGdhbW1hKTtcbiAgY29uc3QgYmFja2dyb3VuZENvbG9yID0gZGVjb21wb3NlQ29sb3IoYmFja2dyb3VuZCk7XG4gIGNvbnN0IG92ZXJsYXlDb2xvciA9IGRlY29tcG9zZUNvbG9yKG92ZXJsYXkpO1xuICBjb25zdCByZ2IgPSBbYmxlbmRDaGFubmVsKGJhY2tncm91bmRDb2xvci52YWx1ZXNbMF0sIG92ZXJsYXlDb2xvci52YWx1ZXNbMF0pLCBibGVuZENoYW5uZWwoYmFja2dyb3VuZENvbG9yLnZhbHVlc1sxXSwgb3ZlcmxheUNvbG9yLnZhbHVlc1sxXSksIGJsZW5kQ2hhbm5lbChiYWNrZ3JvdW5kQ29sb3IudmFsdWVzWzJdLCBvdmVybGF5Q29sb3IudmFsdWVzWzJdKV07XG4gIHJldHVybiByZWNvbXBvc2VDb2xvcih7XG4gICAgdHlwZTogJ3JnYicsXG4gICAgdmFsdWVzOiByZ2JcbiAgfSk7XG59IiwgIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSBjcmVhdGVTdHlsZWQ7XG5leHBvcnRzLnNob3VsZEZvcndhcmRQcm9wID0gc2hvdWxkRm9yd2FyZFByb3A7XG5leHBvcnRzLnN5c3RlbURlZmF1bHRUaGVtZSA9IHZvaWQgMDtcbnZhciBfZXh0ZW5kczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2V4dGVuZHNcIikpO1xudmFyIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiKSk7XG52YXIgX3N0eWxlZEVuZ2luZSA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKHJlcXVpcmUoXCJAbXVpL3N0eWxlZC1lbmdpbmVcIikpO1xudmFyIF9kZWVwbWVyZ2UgPSByZXF1aXJlKFwiQG11aS91dGlscy9kZWVwbWVyZ2VcIik7XG52YXIgX2NhcGl0YWxpemUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJAbXVpL3V0aWxzL2NhcGl0YWxpemVcIikpO1xudmFyIF9nZXREaXNwbGF5TmFtZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIkBtdWkvdXRpbHMvZ2V0RGlzcGxheU5hbWVcIikpO1xudmFyIF9jcmVhdGVUaGVtZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vY3JlYXRlVGhlbWVcIikpO1xudmFyIF9zdHlsZUZ1bmN0aW9uU3ggPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3N0eWxlRnVuY3Rpb25TeFwiKSk7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJvd25lclN0YXRlXCJdLFxuICBfZXhjbHVkZWQyID0gW1widmFyaWFudHNcIl0sXG4gIF9leGNsdWRlZDMgPSBbXCJuYW1lXCIsIFwic2xvdFwiLCBcInNraXBWYXJpYW50c1Jlc29sdmVyXCIsIFwic2tpcFN4XCIsIFwib3ZlcnJpZGVzUmVzb2x2ZXJcIl07XG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlcnNjb3JlLWRhbmdsZSAqL1xuZnVuY3Rpb24gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgV2Vha01hcCkgcmV0dXJuIG51bGw7IHZhciByID0gbmV3IFdlYWtNYXAoKSwgdCA9IG5ldyBXZWFrTWFwKCk7IHJldHVybiAoX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlID0gZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUgPyB0IDogcjsgfSkoZSk7IH1cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKGUsIHIpIHsgaWYgKCFyICYmIGUgJiYgZS5fX2VzTW9kdWxlKSByZXR1cm4gZTsgaWYgKG51bGwgPT09IGUgfHwgXCJvYmplY3RcIiAhPSB0eXBlb2YgZSAmJiBcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUpIHJldHVybiB7IGRlZmF1bHQ6IGUgfTsgdmFyIHQgPSBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUocik7IGlmICh0ICYmIHQuaGFzKGUpKSByZXR1cm4gdC5nZXQoZSk7IHZhciBuID0geyBfX3Byb3RvX186IG51bGwgfSwgYSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOyBmb3IgKHZhciB1IGluIGUpIGlmIChcImRlZmF1bHRcIiAhPT0gdSAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSwgdSkpIHsgdmFyIGkgPSBhID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCB1KSA6IG51bGw7IGkgJiYgKGkuZ2V0IHx8IGkuc2V0KSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCB1LCBpKSA6IG5bdV0gPSBlW3VdOyB9IHJldHVybiBuLmRlZmF1bHQgPSBlLCB0ICYmIHQuc2V0KGUsIG4pLCBuOyB9XG5mdW5jdGlvbiBpc0VtcHR5KG9iaikge1xuICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5sZW5ndGggPT09IDA7XG59XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9lbW90aW9uLWpzL2Vtb3Rpb24vYmxvYi8yNmRlZDYxMDlmY2Q4Y2E5ODc1Y2MyY2U0NTY0ZmVlNjc4YTNmM2M1L3BhY2thZ2VzL3N0eWxlZC9zcmMvdXRpbHMuanMjTDQwXG5mdW5jdGlvbiBpc1N0cmluZ1RhZyh0YWcpIHtcbiAgcmV0dXJuIHR5cGVvZiB0YWcgPT09ICdzdHJpbmcnICYmXG4gIC8vIDk2IGlzIG9uZSBsZXNzIHRoYW4gdGhlIGNoYXIgY29kZVxuICAvLyBmb3IgXCJhXCIgc28gdGhpcyBpcyBjaGVja2luZyB0aGF0XG4gIC8vIGl0J3MgYSBsb3dlcmNhc2UgY2hhcmFjdGVyXG4gIHRhZy5jaGFyQ29kZUF0KDApID4gOTY7XG59XG5cbi8vIFVwZGF0ZSAvc3lzdGVtL3N0eWxlZC8jYXBpIGluIGNhc2UgaWYgdGhpcyBjaGFuZ2VzXG5mdW5jdGlvbiBzaG91bGRGb3J3YXJkUHJvcChwcm9wKSB7XG4gIHJldHVybiBwcm9wICE9PSAnb3duZXJTdGF0ZScgJiYgcHJvcCAhPT0gJ3RoZW1lJyAmJiBwcm9wICE9PSAnc3gnICYmIHByb3AgIT09ICdhcyc7XG59XG5jb25zdCBzeXN0ZW1EZWZhdWx0VGhlbWUgPSBleHBvcnRzLnN5c3RlbURlZmF1bHRUaGVtZSA9ICgwLCBfY3JlYXRlVGhlbWUuZGVmYXVsdCkoKTtcbmNvbnN0IGxvd2VyY2FzZUZpcnN0TGV0dGVyID0gc3RyaW5nID0+IHtcbiAgaWYgKCFzdHJpbmcpIHtcbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG4gIHJldHVybiBzdHJpbmcuY2hhckF0KDApLnRvTG93ZXJDYXNlKCkgKyBzdHJpbmcuc2xpY2UoMSk7XG59O1xuZnVuY3Rpb24gcmVzb2x2ZVRoZW1lKHtcbiAgZGVmYXVsdFRoZW1lLFxuICB0aGVtZSxcbiAgdGhlbWVJZFxufSkge1xuICByZXR1cm4gaXNFbXB0eSh0aGVtZSkgPyBkZWZhdWx0VGhlbWUgOiB0aGVtZVt0aGVtZUlkXSB8fCB0aGVtZTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRPdmVycmlkZXNSZXNvbHZlcihzbG90KSB7XG4gIGlmICghc2xvdCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiAocHJvcHMsIHN0eWxlcykgPT4gc3R5bGVzW3Nsb3RdO1xufVxuZnVuY3Rpb24gcHJvY2Vzc1N0eWxlQXJnKGNhbGxhYmxlU3R5bGUsIF9yZWYpIHtcbiAgbGV0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gX3JlZixcbiAgICBwcm9wcyA9ICgwLCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZTIuZGVmYXVsdCkoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgY29uc3QgcmVzb2x2ZWRTdHlsZXNBcmcgPSB0eXBlb2YgY2FsbGFibGVTdHlsZSA9PT0gJ2Z1bmN0aW9uJyA/IGNhbGxhYmxlU3R5bGUoKDAsIF9leHRlbmRzMi5kZWZhdWx0KSh7XG4gICAgb3duZXJTdGF0ZVxuICB9LCBwcm9wcykpIDogY2FsbGFibGVTdHlsZTtcbiAgaWYgKEFycmF5LmlzQXJyYXkocmVzb2x2ZWRTdHlsZXNBcmcpKSB7XG4gICAgcmV0dXJuIHJlc29sdmVkU3R5bGVzQXJnLmZsYXRNYXAocmVzb2x2ZWRTdHlsZSA9PiBwcm9jZXNzU3R5bGVBcmcocmVzb2x2ZWRTdHlsZSwgKDAsIF9leHRlbmRzMi5kZWZhdWx0KSh7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSwgcHJvcHMpKSk7XG4gIH1cbiAgaWYgKCEhcmVzb2x2ZWRTdHlsZXNBcmcgJiYgdHlwZW9mIHJlc29sdmVkU3R5bGVzQXJnID09PSAnb2JqZWN0JyAmJiBBcnJheS5pc0FycmF5KHJlc29sdmVkU3R5bGVzQXJnLnZhcmlhbnRzKSkge1xuICAgIGNvbnN0IHtcbiAgICAgICAgdmFyaWFudHMgPSBbXVxuICAgICAgfSA9IHJlc29sdmVkU3R5bGVzQXJnLFxuICAgICAgb3RoZXJTdHlsZXMgPSAoMCwgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UyLmRlZmF1bHQpKHJlc29sdmVkU3R5bGVzQXJnLCBfZXhjbHVkZWQyKTtcbiAgICBsZXQgcmVzdWx0ID0gb3RoZXJTdHlsZXM7XG4gICAgdmFyaWFudHMuZm9yRWFjaCh2YXJpYW50ID0+IHtcbiAgICAgIGxldCBpc01hdGNoID0gdHJ1ZTtcbiAgICAgIGlmICh0eXBlb2YgdmFyaWFudC5wcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpc01hdGNoID0gdmFyaWFudC5wcm9wcygoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHtcbiAgICAgICAgICBvd25lclN0YXRlXG4gICAgICAgIH0sIHByb3BzLCBvd25lclN0YXRlKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBPYmplY3Qua2V5cyh2YXJpYW50LnByb3BzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgaWYgKChvd25lclN0YXRlID09IG51bGwgPyB2b2lkIDAgOiBvd25lclN0YXRlW2tleV0pICE9PSB2YXJpYW50LnByb3BzW2tleV0gJiYgcHJvcHNba2V5XSAhPT0gdmFyaWFudC5wcm9wc1trZXldKSB7XG4gICAgICAgICAgICBpc01hdGNoID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChpc01hdGNoKSB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShyZXN1bHQpKSB7XG4gICAgICAgICAgcmVzdWx0ID0gW3Jlc3VsdF07XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnB1c2godHlwZW9mIHZhcmlhbnQuc3R5bGUgPT09ICdmdW5jdGlvbicgPyB2YXJpYW50LnN0eWxlKCgwLCBfZXh0ZW5kczIuZGVmYXVsdCkoe1xuICAgICAgICAgIG93bmVyU3RhdGVcbiAgICAgICAgfSwgcHJvcHMsIG93bmVyU3RhdGUpKSA6IHZhcmlhbnQuc3R5bGUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgcmV0dXJuIHJlc29sdmVkU3R5bGVzQXJnO1xufVxuZnVuY3Rpb24gY3JlYXRlU3R5bGVkKGlucHV0ID0ge30pIHtcbiAgY29uc3Qge1xuICAgIHRoZW1lSWQsXG4gICAgZGVmYXVsdFRoZW1lID0gc3lzdGVtRGVmYXVsdFRoZW1lLFxuICAgIHJvb3RTaG91bGRGb3J3YXJkUHJvcCA9IHNob3VsZEZvcndhcmRQcm9wLFxuICAgIHNsb3RTaG91bGRGb3J3YXJkUHJvcCA9IHNob3VsZEZvcndhcmRQcm9wXG4gIH0gPSBpbnB1dDtcbiAgY29uc3Qgc3lzdGVtU3ggPSBwcm9wcyA9PiB7XG4gICAgcmV0dXJuICgwLCBfc3R5bGVGdW5jdGlvblN4LmRlZmF1bHQpKCgwLCBfZXh0ZW5kczIuZGVmYXVsdCkoe30sIHByb3BzLCB7XG4gICAgICB0aGVtZTogcmVzb2x2ZVRoZW1lKCgwLCBfZXh0ZW5kczIuZGVmYXVsdCkoe30sIHByb3BzLCB7XG4gICAgICAgIGRlZmF1bHRUaGVtZSxcbiAgICAgICAgdGhlbWVJZFxuICAgICAgfSkpXG4gICAgfSkpO1xuICB9O1xuICBzeXN0ZW1TeC5fX211aV9zeXN0ZW1TeCA9IHRydWU7XG4gIHJldHVybiAodGFnLCBpbnB1dE9wdGlvbnMgPSB7fSkgPT4ge1xuICAgIC8vIEZpbHRlciBvdXQgdGhlIGBzeGAgc3R5bGUgZnVuY3Rpb24gZnJvbSB0aGUgcHJldmlvdXMgc3R5bGVkIGNvbXBvbmVudCB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHN0eWxlcyBnZW5lcmF0ZWQgYnkgdGhlIGNvbXBvc2l0ZSBjb21wb25lbnRzLlxuICAgICgwLCBfc3R5bGVkRW5naW5lLmludGVybmFsX3Byb2Nlc3NTdHlsZXMpKHRhZywgc3R5bGVzID0+IHN0eWxlcy5maWx0ZXIoc3R5bGUgPT4gIShzdHlsZSAhPSBudWxsICYmIHN0eWxlLl9fbXVpX3N5c3RlbVN4KSkpO1xuICAgIGNvbnN0IHtcbiAgICAgICAgbmFtZTogY29tcG9uZW50TmFtZSxcbiAgICAgICAgc2xvdDogY29tcG9uZW50U2xvdCxcbiAgICAgICAgc2tpcFZhcmlhbnRzUmVzb2x2ZXI6IGlucHV0U2tpcFZhcmlhbnRzUmVzb2x2ZXIsXG4gICAgICAgIHNraXBTeDogaW5wdXRTa2lwU3gsXG4gICAgICAgIC8vIFRPRE8gdjY6IHJlbW92ZSBgbG93ZXJjYXNlRmlyc3RMZXR0ZXIoKWAgaW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZVxuICAgICAgICAvLyBGb3IgbW9yZSBkZXRhaWxzOiBodHRwczovL2dpdGh1Yi5jb20vbXVpL21hdGVyaWFsLXVpL3B1bGwvMzc5MDhcbiAgICAgICAgb3ZlcnJpZGVzUmVzb2x2ZXIgPSBkZWZhdWx0T3ZlcnJpZGVzUmVzb2x2ZXIobG93ZXJjYXNlRmlyc3RMZXR0ZXIoY29tcG9uZW50U2xvdCkpXG4gICAgICB9ID0gaW5wdXRPcHRpb25zLFxuICAgICAgb3B0aW9ucyA9ICgwLCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZTIuZGVmYXVsdCkoaW5wdXRPcHRpb25zLCBfZXhjbHVkZWQzKTtcblxuICAgIC8vIGlmIHNraXBWYXJpYW50c1Jlc29sdmVyIG9wdGlvbiBpcyBkZWZpbmVkLCB0YWtlIHRoZSB2YWx1ZSwgb3RoZXJ3aXNlLCB0cnVlIGZvciByb290IGFuZCBmYWxzZSBmb3Igb3RoZXIgc2xvdHMuXG4gICAgY29uc3Qgc2tpcFZhcmlhbnRzUmVzb2x2ZXIgPSBpbnB1dFNraXBWYXJpYW50c1Jlc29sdmVyICE9PSB1bmRlZmluZWQgPyBpbnB1dFNraXBWYXJpYW50c1Jlc29sdmVyIDpcbiAgICAvLyBUT0RPIHY2OiByZW1vdmUgYFJvb3RgIGluIHRoZSBuZXh0IG1ham9yIHJlbGVhc2VcbiAgICAvLyBGb3IgbW9yZSBkZXRhaWxzOiBodHRwczovL2dpdGh1Yi5jb20vbXVpL21hdGVyaWFsLXVpL3B1bGwvMzc5MDhcbiAgICBjb21wb25lbnRTbG90ICYmIGNvbXBvbmVudFNsb3QgIT09ICdSb290JyAmJiBjb21wb25lbnRTbG90ICE9PSAncm9vdCcgfHwgZmFsc2U7XG4gICAgY29uc3Qgc2tpcFN4ID0gaW5wdXRTa2lwU3ggfHwgZmFsc2U7XG4gICAgbGV0IGxhYmVsO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAoY29tcG9uZW50TmFtZSkge1xuICAgICAgICAvLyBUT0RPIHY2OiByZW1vdmUgYGxvd2VyY2FzZUZpcnN0TGV0dGVyKClgIGluIHRoZSBuZXh0IG1ham9yIHJlbGVhc2VcbiAgICAgICAgLy8gRm9yIG1vcmUgZGV0YWlsczogaHR0cHM6Ly9naXRodWIuY29tL211aS9tYXRlcmlhbC11aS9wdWxsLzM3OTA4XG4gICAgICAgIGxhYmVsID0gYCR7Y29tcG9uZW50TmFtZX0tJHtsb3dlcmNhc2VGaXJzdExldHRlcihjb21wb25lbnRTbG90IHx8ICdSb290Jyl9YDtcbiAgICAgIH1cbiAgICB9XG4gICAgbGV0IHNob3VsZEZvcndhcmRQcm9wT3B0aW9uID0gc2hvdWxkRm9yd2FyZFByb3A7XG5cbiAgICAvLyBUT0RPIHY2OiByZW1vdmUgYFJvb3RgIGluIHRoZSBuZXh0IG1ham9yIHJlbGVhc2VcbiAgICAvLyBGb3IgbW9yZSBkZXRhaWxzOiBodHRwczovL2dpdGh1Yi5jb20vbXVpL21hdGVyaWFsLXVpL3B1bGwvMzc5MDhcbiAgICBpZiAoY29tcG9uZW50U2xvdCA9PT0gJ1Jvb3QnIHx8IGNvbXBvbmVudFNsb3QgPT09ICdyb290Jykge1xuICAgICAgc2hvdWxkRm9yd2FyZFByb3BPcHRpb24gPSByb290U2hvdWxkRm9yd2FyZFByb3A7XG4gICAgfSBlbHNlIGlmIChjb21wb25lbnRTbG90KSB7XG4gICAgICAvLyBhbnkgb3RoZXIgc2xvdCBzcGVjaWZpZWRcbiAgICAgIHNob3VsZEZvcndhcmRQcm9wT3B0aW9uID0gc2xvdFNob3VsZEZvcndhcmRQcm9wO1xuICAgIH0gZWxzZSBpZiAoaXNTdHJpbmdUYWcodGFnKSkge1xuICAgICAgLy8gZm9yIHN0cmluZyAoaHRtbCkgdGFnLCBwcmVzZXJ2ZSB0aGUgYmVoYXZpb3IgaW4gZW1vdGlvbiAmIHN0eWxlZC1jb21wb25lbnRzLlxuICAgICAgc2hvdWxkRm9yd2FyZFByb3BPcHRpb24gPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IGRlZmF1bHRTdHlsZWRSZXNvbHZlciA9ICgwLCBfc3R5bGVkRW5naW5lLmRlZmF1bHQpKHRhZywgKDAsIF9leHRlbmRzMi5kZWZhdWx0KSh7XG4gICAgICBzaG91bGRGb3J3YXJkUHJvcDogc2hvdWxkRm9yd2FyZFByb3BPcHRpb24sXG4gICAgICBsYWJlbFxuICAgIH0sIG9wdGlvbnMpKTtcbiAgICBjb25zdCB0cmFuc2Zvcm1TdHlsZUFyZyA9IHN0eWxlc0FyZyA9PiB7XG4gICAgICAvLyBPbiB0aGUgc2VydmVyIEVtb3Rpb24gZG9lc24ndCB1c2UgUmVhY3QuZm9yd2FyZFJlZiBmb3IgY3JlYXRpbmcgY29tcG9uZW50cywgc28gdGhlIGNyZWF0ZWRcbiAgICAgIC8vIGNvbXBvbmVudCBzdGF5cyBhcyBhIGZ1bmN0aW9uLiBUaGlzIGNvbmRpdGlvbiBtYWtlcyBzdXJlIHRoYXQgd2UgZG8gbm90IGludGVycG9sYXRlIGZ1bmN0aW9uc1xuICAgICAgLy8gd2hpY2ggYXJlIGJhc2ljYWxseSBjb21wb25lbnRzIHVzZWQgYXMgYSBzZWxlY3RvcnMuXG4gICAgICBpZiAodHlwZW9mIHN0eWxlc0FyZyA9PT0gJ2Z1bmN0aW9uJyAmJiBzdHlsZXNBcmcuX19lbW90aW9uX3JlYWwgIT09IHN0eWxlc0FyZyB8fCAoMCwgX2RlZXBtZXJnZS5pc1BsYWluT2JqZWN0KShzdHlsZXNBcmcpKSB7XG4gICAgICAgIHJldHVybiBwcm9wcyA9PiBwcm9jZXNzU3R5bGVBcmcoc3R5bGVzQXJnLCAoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHt9LCBwcm9wcywge1xuICAgICAgICAgIHRoZW1lOiByZXNvbHZlVGhlbWUoe1xuICAgICAgICAgICAgdGhlbWU6IHByb3BzLnRoZW1lLFxuICAgICAgICAgICAgZGVmYXVsdFRoZW1lLFxuICAgICAgICAgICAgdGhlbWVJZFxuICAgICAgICAgIH0pXG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdHlsZXNBcmc7XG4gICAgfTtcbiAgICBjb25zdCBtdWlTdHlsZWRSZXNvbHZlciA9IChzdHlsZUFyZywgLi4uZXhwcmVzc2lvbnMpID0+IHtcbiAgICAgIGxldCB0cmFuc2Zvcm1lZFN0eWxlQXJnID0gdHJhbnNmb3JtU3R5bGVBcmcoc3R5bGVBcmcpO1xuICAgICAgY29uc3QgZXhwcmVzc2lvbnNXaXRoRGVmYXVsdFRoZW1lID0gZXhwcmVzc2lvbnMgPyBleHByZXNzaW9ucy5tYXAodHJhbnNmb3JtU3R5bGVBcmcpIDogW107XG4gICAgICBpZiAoY29tcG9uZW50TmFtZSAmJiBvdmVycmlkZXNSZXNvbHZlcikge1xuICAgICAgICBleHByZXNzaW9uc1dpdGhEZWZhdWx0VGhlbWUucHVzaChwcm9wcyA9PiB7XG4gICAgICAgICAgY29uc3QgdGhlbWUgPSByZXNvbHZlVGhlbWUoKDAsIF9leHRlbmRzMi5kZWZhdWx0KSh7fSwgcHJvcHMsIHtcbiAgICAgICAgICAgIGRlZmF1bHRUaGVtZSxcbiAgICAgICAgICAgIHRoZW1lSWRcbiAgICAgICAgICB9KSk7XG4gICAgICAgICAgaWYgKCF0aGVtZS5jb21wb25lbnRzIHx8ICF0aGVtZS5jb21wb25lbnRzW2NvbXBvbmVudE5hbWVdIHx8ICF0aGVtZS5jb21wb25lbnRzW2NvbXBvbmVudE5hbWVdLnN0eWxlT3ZlcnJpZGVzKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3Qgc3R5bGVPdmVycmlkZXMgPSB0aGVtZS5jb21wb25lbnRzW2NvbXBvbmVudE5hbWVdLnN0eWxlT3ZlcnJpZGVzO1xuICAgICAgICAgIGNvbnN0IHJlc29sdmVkU3R5bGVPdmVycmlkZXMgPSB7fTtcbiAgICAgICAgICAvLyBUT0RPOiB2NyByZW1vdmUgaXRlcmF0aW9uIGFuZCB1c2UgYHJlc29sdmVTdHlsZUFyZyhzdHlsZU92ZXJyaWRlc1tzbG90XSlgIGRpcmVjdGx5XG4gICAgICAgICAgT2JqZWN0LmVudHJpZXMoc3R5bGVPdmVycmlkZXMpLmZvckVhY2goKFtzbG90S2V5LCBzbG90U3R5bGVdKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlZFN0eWxlT3ZlcnJpZGVzW3Nsb3RLZXldID0gcHJvY2Vzc1N0eWxlQXJnKHNsb3RTdHlsZSwgKDAsIF9leHRlbmRzMi5kZWZhdWx0KSh7fSwgcHJvcHMsIHtcbiAgICAgICAgICAgICAgdGhlbWVcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gb3ZlcnJpZGVzUmVzb2x2ZXIocHJvcHMsIHJlc29sdmVkU3R5bGVPdmVycmlkZXMpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChjb21wb25lbnROYW1lICYmICFza2lwVmFyaWFudHNSZXNvbHZlcikge1xuICAgICAgICBleHByZXNzaW9uc1dpdGhEZWZhdWx0VGhlbWUucHVzaChwcm9wcyA9PiB7XG4gICAgICAgICAgdmFyIF90aGVtZSRjb21wb25lbnRzO1xuICAgICAgICAgIGNvbnN0IHRoZW1lID0gcmVzb2x2ZVRoZW1lKCgwLCBfZXh0ZW5kczIuZGVmYXVsdCkoe30sIHByb3BzLCB7XG4gICAgICAgICAgICBkZWZhdWx0VGhlbWUsXG4gICAgICAgICAgICB0aGVtZUlkXG4gICAgICAgICAgfSkpO1xuICAgICAgICAgIGNvbnN0IHRoZW1lVmFyaWFudHMgPSB0aGVtZSA9PSBudWxsIHx8IChfdGhlbWUkY29tcG9uZW50cyA9IHRoZW1lLmNvbXBvbmVudHMpID09IG51bGwgfHwgKF90aGVtZSRjb21wb25lbnRzID0gX3RoZW1lJGNvbXBvbmVudHNbY29tcG9uZW50TmFtZV0pID09IG51bGwgPyB2b2lkIDAgOiBfdGhlbWUkY29tcG9uZW50cy52YXJpYW50cztcbiAgICAgICAgICByZXR1cm4gcHJvY2Vzc1N0eWxlQXJnKHtcbiAgICAgICAgICAgIHZhcmlhbnRzOiB0aGVtZVZhcmlhbnRzXG4gICAgICAgICAgfSwgKDAsIF9leHRlbmRzMi5kZWZhdWx0KSh7fSwgcHJvcHMsIHtcbiAgICAgICAgICAgIHRoZW1lXG4gICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICghc2tpcFN4KSB7XG4gICAgICAgIGV4cHJlc3Npb25zV2l0aERlZmF1bHRUaGVtZS5wdXNoKHN5c3RlbVN4KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG51bU9mQ3VzdG9tRm5zQXBwbGllZCA9IGV4cHJlc3Npb25zV2l0aERlZmF1bHRUaGVtZS5sZW5ndGggLSBleHByZXNzaW9ucy5sZW5ndGg7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShzdHlsZUFyZykgJiYgbnVtT2ZDdXN0b21GbnNBcHBsaWVkID4gMCkge1xuICAgICAgICBjb25zdCBwbGFjZWhvbGRlcnMgPSBuZXcgQXJyYXkobnVtT2ZDdXN0b21GbnNBcHBsaWVkKS5maWxsKCcnKTtcbiAgICAgICAgLy8gSWYgdGhlIHR5cGUgaXMgYXJyYXksIHRoYW4gd2UgbmVlZCB0byBhZGQgcGxhY2Vob2xkZXJzIGluIHRoZSB0ZW1wbGF0ZSBmb3IgdGhlIG92ZXJyaWRlcywgdmFyaWFudHMgYW5kIHRoZSBzeCBzdHlsZXMuXG4gICAgICAgIHRyYW5zZm9ybWVkU3R5bGVBcmcgPSBbLi4uc3R5bGVBcmcsIC4uLnBsYWNlaG9sZGVyc107XG4gICAgICAgIHRyYW5zZm9ybWVkU3R5bGVBcmcucmF3ID0gWy4uLnN0eWxlQXJnLnJhdywgLi4ucGxhY2Vob2xkZXJzXTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IENvbXBvbmVudCA9IGRlZmF1bHRTdHlsZWRSZXNvbHZlcih0cmFuc2Zvcm1lZFN0eWxlQXJnLCAuLi5leHByZXNzaW9uc1dpdGhEZWZhdWx0VGhlbWUpO1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgbGV0IGRpc3BsYXlOYW1lO1xuICAgICAgICBpZiAoY29tcG9uZW50TmFtZSkge1xuICAgICAgICAgIGRpc3BsYXlOYW1lID0gYCR7Y29tcG9uZW50TmFtZX0keygwLCBfY2FwaXRhbGl6ZS5kZWZhdWx0KShjb21wb25lbnRTbG90IHx8ICcnKX1gO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkaXNwbGF5TmFtZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZGlzcGxheU5hbWUgPSBgU3R5bGVkKCR7KDAsIF9nZXREaXNwbGF5TmFtZS5kZWZhdWx0KSh0YWcpfSlgO1xuICAgICAgICB9XG4gICAgICAgIENvbXBvbmVudC5kaXNwbGF5TmFtZSA9IGRpc3BsYXlOYW1lO1xuICAgICAgfVxuICAgICAgaWYgKHRhZy5tdWlOYW1lKSB7XG4gICAgICAgIENvbXBvbmVudC5tdWlOYW1lID0gdGFnLm11aU5hbWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gQ29tcG9uZW50O1xuICAgIH07XG4gICAgaWYgKGRlZmF1bHRTdHlsZWRSZXNvbHZlci53aXRoQ29uZmlnKSB7XG4gICAgICBtdWlTdHlsZWRSZXNvbHZlci53aXRoQ29uZmlnID0gZGVmYXVsdFN0eWxlZFJlc29sdmVyLndpdGhDb25maWc7XG4gICAgfVxuICAgIHJldHVybiBtdWlTdHlsZWRSZXNvbHZlcjtcbiAgfTtcbn0iLCAiaW1wb3J0IHsgRnJhZ21lbnQsIHVzZUVmZmVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcbmltcG9ydCB7IFByb3ZpZGVyIH0gZnJvbSBcInJlYWN0LXJlZHV4XCI7XG5pbXBvcnQgeyB1c2VBcHBEaXNwYXRjaCwgdXNlQXBwU2VsZWN0b3IgfSBmcm9tIFwiLi4vYXBwL2hvb2tzXCI7XG5pbXBvcnQgeyBzdG9yZSB9IGZyb20gXCIuLi9hcHAvc3RvcmVcIjtcbmltcG9ydCBFbnRpdHlUcmVlIGZyb20gXCIuLi9wYWdlcy9vbnRvbG9naWVzL2VudGl0aWVzL0VudGl0eVRyZWVcIjtcbmltcG9ydCB7IGdldENsYXNzSW5zdGFuY2VzLCBnZXRFbnRpdHksIGdldEVudGl0eVdpdGhUeXBlLCBnZXRPbnRvbG9neSB9IGZyb20gXCIuLi9wYWdlcy9vbnRvbG9naWVzL29udG9sb2dpZXNTbGljZVwiO1xuaW1wb3J0IHsgUXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIgfSBmcm9tIFwicmVhY3QtcXVlcnlcIjtcbmltcG9ydCBPbnRvbG9neSBmcm9tICcuLi9tb2RlbC9PbnRvbG9neSdcbmltcG9ydCBFbnRpdHkgZnJvbSAnLi4vbW9kZWwvRW50aXR5J1xuaW1wb3J0IHsgQ2lyY3VsYXJQcm9ncmVzcyB9IGZyb20gJ0BtdWkvbWF0ZXJpYWwnXG5cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5VHJlZVdpZGdldFByb3BzIHtcbiAgICBpcmk/OiBzdHJpbmc7XG4gICAgb250b2xvZ3lJZDogc3RyaW5nO1xuICAgIGFwaVVybDogc3RyaW5nO1xuICAgIGVudGl0eVR5cGU/OiBcImVudGl0aWVzXCIgfCBcImNsYXNzZXNcIiB8IFwicHJvcGVydGllc1wiIHwgXCJpbmRpdmlkdWFsc1wiO1xuICAgIGxhbmc/OiBzdHJpbmc7XG4gICAgb25OYXZpZ2F0ZVRvRW50aXR5PzogKG9udG9sb2d5SWQ6IHN0cmluZywgZW50aXR5VHlwZTogc3RyaW5nLCBpcmk6IHN0cmluZykgPT4gdm9pZDtcbiAgICBvbk5hdmlnYXRlVG9PbnRvbG9neT86IChvbnRvbG9neUlkOiBzdHJpbmcsIGVudGl0eVR5cGU6IHN0cmluZywgaXJpOiBzdHJpbmcpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVFbnRpdHlUcmVlKFxuICAgIHByb3BzOiBFbnRpdHlUcmVlV2lkZ2V0UHJvcHMsXG4gICAgY29udGFpbmVyOiBhbnksXG4gICAgY2FsbGJhY2s/OiAoKSA9PiB2b2lkXG4pIHtcbiAgICBSZWFjdERPTS5yZW5kZXIoRW50aXR5VHJlZVdpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBFbnRpdHlUcmVlV2lkZ2V0KHByb3BzOiBFbnRpdHlUcmVlV2lkZ2V0UHJvcHMpIHtcbiAgICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPFByb3ZpZGVyIHN0b3JlPXtzdG9yZX0+XG4gICAgICAgICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgICAgICAgICA8RW50aXR5VHJlZVdpZGdldElubmVyXG4gICAgICAgICAgICAgICAgICAgIG9udG9sb2d5SWQ9e3Byb3BzLm9udG9sb2d5SWR9XG4gICAgICAgICAgICAgICAgICAgIGlyaT17cHJvcHMuaXJpfVxuICAgICAgICAgICAgICAgICAgICBlbnRpdHlUeXBlPXtwcm9wcy5lbnRpdHlUeXBlfVxuICAgICAgICAgICAgICAgICAgICBhcGlVcmw9e3Byb3BzLmFwaVVybH1cbiAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvRW50aXR5PXtwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHl9XG4gICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5PXtwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuXG4gICAgICAgIDwvUHJvdmlkZXI+XG4gICAgKTtcbn1cblxuZnVuY3Rpb24gRW50aXR5VHJlZVdpZGdldElubmVyKHByb3BzOiBFbnRpdHlUcmVlV2lkZ2V0UHJvcHMpIHtcbiAgICBjb25zdCB7XG4gICAgICAgIGVudGl0eVR5cGUsXG4gICAgICAgIGxhbmcgPSBcImVuXCIsXG4gICAgICAgIG9uTmF2aWdhdGVUb0VudGl0eSA9ICgpID0+IHtcbiAgICAgICAgfSxcbiAgICAgICAgb25OYXZpZ2F0ZVRvT250b2xvZ3kgPSAoKSA9PiB7XG4gICAgICAgIH0sXG4gICAgfSA9IHByb3BzO1xuXG4gICAgY29uc3Qgb250b2xvZ3kgPSB1c2VBcHBTZWxlY3Rvcigoc3RhdGUpID0+IHN0YXRlLm9udG9sb2dpZXMub250b2xvZ3kpO1xuICAgIGNvbnN0IGxvYWRpbmdPbnRvbG9neSA9IHVzZUFwcFNlbGVjdG9yKChzdGF0ZSkgPT4gc3RhdGUub250b2xvZ2llcy5sb2FkaW5nT250b2xvZ3kpO1xuXG4gICAgY29uc3QgZW50aXR5ID0gdXNlQXBwU2VsZWN0b3IoKHN0YXRlKSA9PiBzdGF0ZS5vbnRvbG9naWVzLmVudGl0eSk7XG4gICAgY29uc3QgbG9hZGluZ0VudGl0eSA9IHVzZUFwcFNlbGVjdG9yKChzdGF0ZSkgPT4gc3RhdGUub250b2xvZ2llcy5sb2FkaW5nRW50aXR5KTtcblxuICAgIC8vY29uc3QgY2xhc3NJbnN0YW5jZXMgPSB1c2VBcHBTZWxlY3Rvcigoc3RhdGUpID0+IHN0YXRlLm9udG9sb2dpZXMuY2xhc3NJbnN0YW5jZXMpO1xuICAgIGNvbnN0IGxvYWRpbmdDbGFzc0luc3RhbmNlcyA9IHVzZUFwcFNlbGVjdG9yKChzdGF0ZSkgPT4gc3RhdGUub250b2xvZ2llcy5sb2FkaW5nQ2xhc3NJbnN0YW5jZXMpO1xuXG5cbiAgICBjb25zdCBkaXNwYXRjaCA9IHVzZUFwcERpc3BhdGNoKCk7XG5cbiAgICBjb25zdCBoYW5kbGVOYXZpZ2F0ZVRvRW50aXR5ID0gKG9udG9sb2d5OiBPbnRvbG9neSwgZW50aXR5OiBFbnRpdHkpID0+IHtcbiAgICAgICAgY29uc3Qgb250b2xvZ3lJZCA9IG9udG9sb2d5LmdldE9udG9sb2d5SWQoKTtcbiAgICAgICAgY29uc3QgZW50aXR5VHlwZSA9IGVudGl0eS5nZXRUeXBlUGx1cmFsKCk7XG4gICAgICAgIGNvbnN0IGlyaSA9IGVudGl0eS5nZXRJcmkoKTtcblxuICAgICAgICBvbk5hdmlnYXRlVG9FbnRpdHkob250b2xvZ3lJZCwgZW50aXR5VHlwZSwgaXJpKTtcbiAgICB9O1xuXG4gICAgY29uc3QgaGFuZGxlTmF2aWdhdGVUb09udG9sb2d5ID0gKG9udG9sb2d5SWQ6IHN0cmluZywgZW50aXR5OiBFbnRpdHkpID0+IHtcbiAgICAgICAgY29uc3QgZW50aXR5VHlwZSA9IGVudGl0eS5nZXRUeXBlUGx1cmFsKCk7XG4gICAgICAgIGNvbnN0IGlyaSA9IGVudGl0eS5nZXRJcmkoKTtcblxuICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neShvbnRvbG9neUlkLCBlbnRpdHlUeXBlLCBpcmkpO1xuICAgIH07XG5cblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGRpc3BhdGNoKFxuICAgICAgICAgICAgZ2V0T250b2xvZ3koe1xuICAgICAgICAgICAgICAgIG9udG9sb2d5SWQ6IHByb3BzLm9udG9sb2d5SWQsXG4gICAgICAgICAgICAgICAgbGFuZzogXCJlblwiLFxuICAgICAgICAgICAgICAgIGFwaVVybDogcHJvcHMuYXBpVXJsLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9LCBbZGlzcGF0Y2gsIHByb3BzLm9udG9sb2d5SWQsIHByb3BzLmFwaVVybF0pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKG9udG9sb2d5ICYmIHByb3BzLmlyaSkge1xuICAgICAgICAgICAgaWYgKHByb3BzLmVudGl0eVR5cGUgJiYgcHJvcHMuZW50aXR5VHlwZSAhPT0gXCJlbnRpdGllc1wiKSB7XG4gICAgICAgICAgICAgICAgZGlzcGF0Y2goXG4gICAgICAgICAgICAgICAgICAgIGdldEVudGl0eVdpdGhUeXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9udG9sb2d5SWQ6IHByb3BzLm9udG9sb2d5SWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5VHlwZTogcHJvcHMuZW50aXR5VHlwZSBhcyBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5SXJpOiBwcm9wcy5pcmksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoUGFyYW1zOiBuZXcgVVJMU2VhcmNoUGFyYW1zKClcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0gZWxzZSBkaXNwYXRjaChcbiAgICAgICAgICAgICAgICBnZXRFbnRpdHkoXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9udG9sb2d5SWQ6IHByb3BzLm9udG9sb2d5SWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHlJcmk6IHByb3BzLmlyaVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICAgIDtcbiAgICB9LCBbZGlzcGF0Y2gsIHByb3BzLm9udG9sb2d5SWQsIHByb3BzLmVudGl0eVR5cGUsIHByb3BzLmlyaSwgb250b2xvZ3ldKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChlbnRpdHkgJiYgcHJvcHMuZW50aXR5VHlwZSA9PT0gXCJjbGFzc2VzXCIpIHtcbiAgICAgICAgICAgIGRpc3BhdGNoKFxuICAgICAgICAgICAgICAgIGdldENsYXNzSW5zdGFuY2VzKHtcbiAgICAgICAgICAgICAgICAgICAgb250b2xvZ3lJZDogZW50aXR5LmdldE9udG9sb2d5SWQoKSxcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NJcmk6IGVudGl0eS5nZXRJcmkoKSxcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoUGFyYW1zOiBuZXcgVVJMU2VhcmNoUGFyYW1zKCksXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9LCBbZGlzcGF0Y2gsIHByb3BzLm9udG9sb2d5SWQsIHByb3BzLmVudGl0eVR5cGUsIHByb3BzLmlyaSwgZW50aXR5XSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8RnJhZ21lbnQ+XG4gICAgICAgICAgICB7KGxvYWRpbmdFbnRpdHkgfHwgbG9hZGluZ09udG9sb2d5IHx8IGxvYWRpbmdDbGFzc0luc3RhbmNlcykgJiZcbiAgICAgICAgICAgICAgICA8Q2lyY3VsYXJQcm9ncmVzcy8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB7IWxvYWRpbmdFbnRpdHkgJiYgIWxvYWRpbmdPbnRvbG9neSAmJiAhbG9hZGluZ0NsYXNzSW5zdGFuY2VzICYmIG9udG9sb2d5ICYmIChcbiAgICAgICAgICAgICAgICA8RW50aXR5VHJlZVxuICAgICAgICAgICAgICAgICAgICBvbnRvbG9neT17b250b2xvZ3l9XG4gICAgICAgICAgICAgICAgICAgIGVudGl0eVR5cGU9e2VudGl0eVR5cGUgPyBlbnRpdHlUeXBlIDogXCJlbnRpdGllc1wifVxuICAgICAgICAgICAgICAgICAgICBsYW5nPXtsYW5nfVxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZEVudGl0eT17ZW50aXR5fVxuICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9FbnRpdHk9e2hhbmRsZU5hdmlnYXRlVG9FbnRpdHl9XG4gICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5PXtoYW5kbGVOYXZpZ2F0ZVRvT250b2xvZ3l9XG4gICAgICAgICAgICAgICAgICAgIGFwaVVybD17cHJvcHMuYXBpVXJsfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApfVxuICAgICAgICA8L0ZyYWdtZW50PlxuICAgICk7XG59XG4iLCAiLy8gVGhlIHByaW1hcnkgZW50cnkgcG9pbnQgYXNzdW1lcyB3ZSdyZSB3b3JraW5nIHdpdGggc3RhbmRhcmQgUmVhY3RET00vUk4sIGJ1dFxuLy8gb2xkZXIgdmVyc2lvbnMgdGhhdCBkbyBub3QgaW5jbHVkZSBgdXNlU3luY0V4dGVybmFsU3RvcmVgIChSZWFjdCAxNi45IC0gMTcueCkuXG4vLyBCZWNhdXNlIG9mIHRoYXQsIHRoZSB1c2VTeW5jRXh0ZXJuYWxTdG9yZSBjb21wYXQgc2hpbSBpcyBuZWVkZWQuXG5pbXBvcnQgeyB1c2VTeW5jRXh0ZXJuYWxTdG9yZSB9IGZyb20gJ3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlL3NoaW0nO1xuaW1wb3J0IHsgdXNlU3luY0V4dGVybmFsU3RvcmVXaXRoU2VsZWN0b3IgfSBmcm9tICd1c2Utc3luYy1leHRlcm5hbC1zdG9yZS9zaGltL3dpdGgtc2VsZWN0b3InO1xuaW1wb3J0IHsgdW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMgYXMgYmF0Y2ggfSBmcm9tICcuL3V0aWxzL3JlYWN0QmF0Y2hlZFVwZGF0ZXMnO1xuaW1wb3J0IHsgc2V0QmF0Y2ggfSBmcm9tICcuL3V0aWxzL2JhdGNoJztcbmltcG9ydCB7IGluaXRpYWxpemVVc2VTZWxlY3RvciB9IGZyb20gJy4vaG9va3MvdXNlU2VsZWN0b3InO1xuaW1wb3J0IHsgaW5pdGlhbGl6ZUNvbm5lY3QgfSBmcm9tICcuL2NvbXBvbmVudHMvY29ubmVjdCc7XG5pbml0aWFsaXplVXNlU2VsZWN0b3IodXNlU3luY0V4dGVybmFsU3RvcmVXaXRoU2VsZWN0b3IpO1xuaW5pdGlhbGl6ZUNvbm5lY3QodXNlU3luY0V4dGVybmFsU3RvcmUpOyAvLyBFbmFibGUgYmF0Y2hlZCB1cGRhdGVzIGluIG91ciBzdWJzY3JpcHRpb25zIGZvciB1c2Vcbi8vIHdpdGggc3RhbmRhcmQgUmVhY3QgcmVuZGVyZXJzIChSZWFjdERPTSwgUmVhY3QgTmF0aXZlKVxuXG5zZXRCYXRjaChiYXRjaCk7XG5leHBvcnQgeyBiYXRjaCB9O1xuZXhwb3J0ICogZnJvbSAnLi9leHBvcnRzJzsiLCAiZXhwb3J0IHsgdW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMgfSBmcm9tICdyZWFjdC1kb20nOyIsICIvLyBEZWZhdWx0IHRvIGEgZHVtbXkgXCJiYXRjaFwiIGltcGxlbWVudGF0aW9uIHRoYXQganVzdCBydW5zIHRoZSBjYWxsYmFja1xuZnVuY3Rpb24gZGVmYXVsdE5vb3BCYXRjaChjYWxsYmFjaykge1xuICBjYWxsYmFjaygpO1xufVxuXG5sZXQgYmF0Y2ggPSBkZWZhdWx0Tm9vcEJhdGNoOyAvLyBBbGxvdyBpbmplY3RpbmcgYW5vdGhlciBiYXRjaGluZyBmdW5jdGlvbiBsYXRlclxuXG5leHBvcnQgY29uc3Qgc2V0QmF0Y2ggPSBuZXdCYXRjaCA9PiBiYXRjaCA9IG5ld0JhdGNoOyAvLyBTdXBwbHkgYSBnZXR0ZXIganVzdCB0byBza2lwIGRlYWxpbmcgd2l0aCBFU00gYmluZGluZ3NcblxuZXhwb3J0IGNvbnN0IGdldEJhdGNoID0gKCkgPT4gYmF0Y2g7IiwgImltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VEZWJ1Z1ZhbHVlLCB1c2VSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjcmVhdGVSZWR1eENvbnRleHRIb29rLCB1c2VSZWR1eENvbnRleHQgYXMgdXNlRGVmYXVsdFJlZHV4Q29udGV4dCB9IGZyb20gJy4vdXNlUmVkdXhDb250ZXh0JztcbmltcG9ydCB7IFJlYWN0UmVkdXhDb250ZXh0IH0gZnJvbSAnLi4vY29tcG9uZW50cy9Db250ZXh0JztcbmltcG9ydCB7IG5vdEluaXRpYWxpemVkIH0gZnJvbSAnLi4vdXRpbHMvdXNlU3luY0V4dGVybmFsU3RvcmUnO1xubGV0IHVzZVN5bmNFeHRlcm5hbFN0b3JlV2l0aFNlbGVjdG9yID0gbm90SW5pdGlhbGl6ZWQ7XG5leHBvcnQgY29uc3QgaW5pdGlhbGl6ZVVzZVNlbGVjdG9yID0gZm4gPT4ge1xuICB1c2VTeW5jRXh0ZXJuYWxTdG9yZVdpdGhTZWxlY3RvciA9IGZuO1xufTtcblxuY29uc3QgcmVmRXF1YWxpdHkgPSAoYSwgYikgPT4gYSA9PT0gYjtcbi8qKlxyXG4gKiBIb29rIGZhY3RvcnksIHdoaWNoIGNyZWF0ZXMgYSBgdXNlU2VsZWN0b3JgIGhvb2sgYm91bmQgdG8gYSBnaXZlbiBjb250ZXh0LlxyXG4gKlxyXG4gKiBAcGFyYW0ge1JlYWN0LkNvbnRleHR9IFtjb250ZXh0PVJlYWN0UmVkdXhDb250ZXh0XSBDb250ZXh0IHBhc3NlZCB0byB5b3VyIGA8UHJvdmlkZXI+YC5cclxuICogQHJldHVybnMge0Z1bmN0aW9ufSBBIGB1c2VTZWxlY3RvcmAgaG9vayBib3VuZCB0byB0aGUgc3BlY2lmaWVkIGNvbnRleHQuXHJcbiAqL1xuXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTZWxlY3Rvckhvb2soY29udGV4dCA9IFJlYWN0UmVkdXhDb250ZXh0KSB7XG4gIGNvbnN0IHVzZVJlZHV4Q29udGV4dCA9IGNvbnRleHQgPT09IFJlYWN0UmVkdXhDb250ZXh0ID8gdXNlRGVmYXVsdFJlZHV4Q29udGV4dCA6IGNyZWF0ZVJlZHV4Q29udGV4dEhvb2soY29udGV4dCk7XG4gIHJldHVybiBmdW5jdGlvbiB1c2VTZWxlY3RvcihzZWxlY3RvciwgZXF1YWxpdHlGbk9yT3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3Qge1xuICAgICAgZXF1YWxpdHlGbiA9IHJlZkVxdWFsaXR5LFxuICAgICAgc3RhYmlsaXR5Q2hlY2sgPSB1bmRlZmluZWQsXG4gICAgICBub29wQ2hlY2sgPSB1bmRlZmluZWRcbiAgICB9ID0gdHlwZW9mIGVxdWFsaXR5Rm5Pck9wdGlvbnMgPT09ICdmdW5jdGlvbicgPyB7XG4gICAgICBlcXVhbGl0eUZuOiBlcXVhbGl0eUZuT3JPcHRpb25zXG4gICAgfSA6IGVxdWFsaXR5Rm5Pck9wdGlvbnM7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKCFzZWxlY3Rvcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFlvdSBtdXN0IHBhc3MgYSBzZWxlY3RvciB0byB1c2VTZWxlY3RvcmApO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHNlbGVjdG9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgWW91IG11c3QgcGFzcyBhIGZ1bmN0aW9uIGFzIGEgc2VsZWN0b3IgdG8gdXNlU2VsZWN0b3JgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBlcXVhbGl0eUZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgWW91IG11c3QgcGFzcyBhIGZ1bmN0aW9uIGFzIGFuIGVxdWFsaXR5IGZ1bmN0aW9uIHRvIHVzZVNlbGVjdG9yYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qge1xuICAgICAgc3RvcmUsXG4gICAgICBzdWJzY3JpcHRpb24sXG4gICAgICBnZXRTZXJ2ZXJTdGF0ZSxcbiAgICAgIHN0YWJpbGl0eUNoZWNrOiBnbG9iYWxTdGFiaWxpdHlDaGVjayxcbiAgICAgIG5vb3BDaGVjazogZ2xvYmFsTm9vcENoZWNrXG4gICAgfSA9IHVzZVJlZHV4Q29udGV4dCgpO1xuICAgIGNvbnN0IGZpcnN0UnVuID0gdXNlUmVmKHRydWUpO1xuICAgIGNvbnN0IHdyYXBwZWRTZWxlY3RvciA9IHVzZUNhbGxiYWNrKHtcbiAgICAgIFtzZWxlY3Rvci5uYW1lXShzdGF0ZSkge1xuICAgICAgICBjb25zdCBzZWxlY3RlZCA9IHNlbGVjdG9yKHN0YXRlKTtcblxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIGNvbnN0IGZpbmFsU3RhYmlsaXR5Q2hlY2sgPSB0eXBlb2Ygc3RhYmlsaXR5Q2hlY2sgPT09ICd1bmRlZmluZWQnID8gZ2xvYmFsU3RhYmlsaXR5Q2hlY2sgOiBzdGFiaWxpdHlDaGVjaztcblxuICAgICAgICAgIGlmIChmaW5hbFN0YWJpbGl0eUNoZWNrID09PSAnYWx3YXlzJyB8fCBmaW5hbFN0YWJpbGl0eUNoZWNrID09PSAnb25jZScgJiYgZmlyc3RSdW4uY3VycmVudCkge1xuICAgICAgICAgICAgY29uc3QgdG9Db21wYXJlID0gc2VsZWN0b3Ioc3RhdGUpO1xuXG4gICAgICAgICAgICBpZiAoIWVxdWFsaXR5Rm4oc2VsZWN0ZWQsIHRvQ29tcGFyZSkpIHtcbiAgICAgICAgICAgICAgbGV0IHN0YWNrID0gdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICA7XG4gICAgICAgICAgICAgICAgKHtcbiAgICAgICAgICAgICAgICAgIHN0YWNrXG4gICAgICAgICAgICAgICAgfSA9IGUpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdTZWxlY3RvciAnICsgKHNlbGVjdG9yLm5hbWUgfHwgJ3Vua25vd24nKSArICcgcmV0dXJuZWQgYSBkaWZmZXJlbnQgcmVzdWx0IHdoZW4gY2FsbGVkIHdpdGggdGhlIHNhbWUgcGFyYW1ldGVycy4gVGhpcyBjYW4gbGVhZCB0byB1bm5lY2Vzc2FyeSByZXJlbmRlcnMuJyArICdcXG5TZWxlY3RvcnMgdGhhdCByZXR1cm4gYSBuZXcgcmVmZXJlbmNlIChzdWNoIGFzIGFuIG9iamVjdCBvciBhbiBhcnJheSkgc2hvdWxkIGJlIG1lbW9pemVkOiBodHRwczovL3JlZHV4LmpzLm9yZy91c2FnZS9kZXJpdmluZy1kYXRhLXNlbGVjdG9ycyNvcHRpbWl6aW5nLXNlbGVjdG9ycy13aXRoLW1lbW9pemF0aW9uJywge1xuICAgICAgICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkLFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkMjogdG9Db21wYXJlLFxuICAgICAgICAgICAgICAgIHN0YWNrXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGZpbmFsTm9vcENoZWNrID0gdHlwZW9mIG5vb3BDaGVjayA9PT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWxOb29wQ2hlY2sgOiBub29wQ2hlY2s7XG5cbiAgICAgICAgICBpZiAoZmluYWxOb29wQ2hlY2sgPT09ICdhbHdheXMnIHx8IGZpbmFsTm9vcENoZWNrID09PSAnb25jZScgJiYgZmlyc3RSdW4uY3VycmVudCkge1xuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgaWYgKHNlbGVjdGVkID09PSBzdGF0ZSkge1xuICAgICAgICAgICAgICBsZXQgc3RhY2sgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIDtcbiAgICAgICAgICAgICAgICAoe1xuICAgICAgICAgICAgICAgICAgc3RhY2tcbiAgICAgICAgICAgICAgICB9ID0gZSk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1NlbGVjdG9yICcgKyAoc2VsZWN0b3IubmFtZSB8fCAndW5rbm93bicpICsgJyByZXR1cm5lZCB0aGUgcm9vdCBzdGF0ZSB3aGVuIGNhbGxlZC4gVGhpcyBjYW4gbGVhZCB0byB1bm5lY2Vzc2FyeSByZXJlbmRlcnMuJyArICdcXG5TZWxlY3RvcnMgdGhhdCByZXR1cm4gdGhlIGVudGlyZSBzdGF0ZSBhcmUgYWxtb3N0IGNlcnRhaW5seSBhIG1pc3Rha2UsIGFzIHRoZXkgd2lsbCBjYXVzZSBhIHJlcmVuZGVyIHdoZW5ldmVyICphbnl0aGluZyogaW4gc3RhdGUgY2hhbmdlcy4nLCB7XG4gICAgICAgICAgICAgICAgc3RhY2tcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGZpcnN0UnVuLmN1cnJlbnQpIGZpcnN0UnVuLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzZWxlY3RlZDtcbiAgICAgIH1cblxuICAgIH1bc2VsZWN0b3IubmFtZV0sIFtzZWxlY3RvciwgZ2xvYmFsU3RhYmlsaXR5Q2hlY2ssIHN0YWJpbGl0eUNoZWNrXSk7XG4gICAgY29uc3Qgc2VsZWN0ZWRTdGF0ZSA9IHVzZVN5bmNFeHRlcm5hbFN0b3JlV2l0aFNlbGVjdG9yKHN1YnNjcmlwdGlvbi5hZGROZXN0ZWRTdWIsIHN0b3JlLmdldFN0YXRlLCBnZXRTZXJ2ZXJTdGF0ZSB8fCBzdG9yZS5nZXRTdGF0ZSwgd3JhcHBlZFNlbGVjdG9yLCBlcXVhbGl0eUZuKTtcbiAgICB1c2VEZWJ1Z1ZhbHVlKHNlbGVjdGVkU3RhdGUpO1xuICAgIHJldHVybiBzZWxlY3RlZFN0YXRlO1xuICB9O1xufVxuLyoqXHJcbiAqIEEgaG9vayB0byBhY2Nlc3MgdGhlIHJlZHV4IHN0b3JlJ3Mgc3RhdGUuIFRoaXMgaG9vayB0YWtlcyBhIHNlbGVjdG9yIGZ1bmN0aW9uXHJcbiAqIGFzIGFuIGFyZ3VtZW50LiBUaGUgc2VsZWN0b3IgaXMgY2FsbGVkIHdpdGggdGhlIHN0b3JlIHN0YXRlLlxyXG4gKlxyXG4gKiBUaGlzIGhvb2sgdGFrZXMgYW4gb3B0aW9uYWwgZXF1YWxpdHkgY29tcGFyaXNvbiBmdW5jdGlvbiBhcyB0aGUgc2Vjb25kIHBhcmFtZXRlclxyXG4gKiB0aGF0IGFsbG93cyB5b3UgdG8gY3VzdG9taXplIHRoZSB3YXkgdGhlIHNlbGVjdGVkIHN0YXRlIGlzIGNvbXBhcmVkIHRvIGRldGVybWluZVxyXG4gKiB3aGV0aGVyIHRoZSBjb21wb25lbnQgbmVlZHMgdG8gYmUgcmUtcmVuZGVyZWQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHNlbGVjdG9yIHRoZSBzZWxlY3RvciBmdW5jdGlvblxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9uPX0gZXF1YWxpdHlGbiB0aGUgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIHVzZWQgdG8gZGV0ZXJtaW5lIGVxdWFsaXR5XHJcbiAqXHJcbiAqIEByZXR1cm5zIHthbnl9IHRoZSBzZWxlY3RlZCBzdGF0ZVxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKlxyXG4gKiBpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXHJcbiAqIGltcG9ydCB7IHVzZVNlbGVjdG9yIH0gZnJvbSAncmVhY3QtcmVkdXgnXHJcbiAqXHJcbiAqIGV4cG9ydCBjb25zdCBDb3VudGVyQ29tcG9uZW50ID0gKCkgPT4ge1xyXG4gKiAgIGNvbnN0IGNvdW50ZXIgPSB1c2VTZWxlY3RvcihzdGF0ZSA9PiBzdGF0ZS5jb3VudGVyKVxyXG4gKiAgIHJldHVybiA8ZGl2Pntjb3VudGVyfTwvZGl2PlxyXG4gKiB9XHJcbiAqL1xuXG5leHBvcnQgY29uc3QgdXNlU2VsZWN0b3IgPSAvKiNfX1BVUkVfXyovY3JlYXRlU2VsZWN0b3JIb29rKCk7IiwgImltcG9ydCB7IHVzZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBSZWFjdFJlZHV4Q29udGV4dCB9IGZyb20gJy4uL2NvbXBvbmVudHMvQ29udGV4dCc7XG5cbi8qKlxyXG4gKiBIb29rIGZhY3RvcnksIHdoaWNoIGNyZWF0ZXMgYSBgdXNlUmVkdXhDb250ZXh0YCBob29rIGJvdW5kIHRvIGEgZ2l2ZW4gY29udGV4dC4gVGhpcyBpcyBhIGxvdy1sZXZlbFxyXG4gKiBob29rIHRoYXQgeW91IHNob3VsZCB1c3VhbGx5IG5vdCBuZWVkIHRvIGNhbGwgZGlyZWN0bHkuXHJcbiAqXHJcbiAqIEBwYXJhbSB7UmVhY3QuQ29udGV4dH0gW2NvbnRleHQ9UmVhY3RSZWR1eENvbnRleHRdIENvbnRleHQgcGFzc2VkIHRvIHlvdXIgYDxQcm92aWRlcj5gLlxyXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgYHVzZVJlZHV4Q29udGV4dGAgaG9vayBib3VuZCB0byB0aGUgc3BlY2lmaWVkIGNvbnRleHQuXHJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlZHV4Q29udGV4dEhvb2soY29udGV4dCA9IFJlYWN0UmVkdXhDb250ZXh0KSB7XG4gIHJldHVybiBmdW5jdGlvbiB1c2VSZWR1eENvbnRleHQoKSB7XG4gICAgY29uc3QgY29udGV4dFZhbHVlID0gdXNlQ29udGV4dChjb250ZXh0KTtcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICFjb250ZXh0VmFsdWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IGZpbmQgcmVhY3QtcmVkdXggY29udGV4dCB2YWx1ZTsgcGxlYXNlIGVuc3VyZSB0aGUgY29tcG9uZW50IGlzIHdyYXBwZWQgaW4gYSA8UHJvdmlkZXI+Jyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRleHRWYWx1ZTtcbiAgfTtcbn1cbi8qKlxyXG4gKiBBIGhvb2sgdG8gYWNjZXNzIHRoZSB2YWx1ZSBvZiB0aGUgYFJlYWN0UmVkdXhDb250ZXh0YC4gVGhpcyBpcyBhIGxvdy1sZXZlbFxyXG4gKiBob29rIHRoYXQgeW91IHNob3VsZCB1c3VhbGx5IG5vdCBuZWVkIHRvIGNhbGwgZGlyZWN0bHkuXHJcbiAqXHJcbiAqIEByZXR1cm5zIHthbnl9IHRoZSB2YWx1ZSBvZiB0aGUgYFJlYWN0UmVkdXhDb250ZXh0YFxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKlxyXG4gKiBpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXHJcbiAqIGltcG9ydCB7IHVzZVJlZHV4Q29udGV4dCB9IGZyb20gJ3JlYWN0LXJlZHV4J1xyXG4gKlxyXG4gKiBleHBvcnQgY29uc3QgQ291bnRlckNvbXBvbmVudCA9ICgpID0+IHtcclxuICogICBjb25zdCB7IHN0b3JlIH0gPSB1c2VSZWR1eENvbnRleHQoKVxyXG4gKiAgIHJldHVybiA8ZGl2PntzdG9yZS5nZXRTdGF0ZSgpfTwvZGl2PlxyXG4gKiB9XHJcbiAqL1xuXG5leHBvcnQgY29uc3QgdXNlUmVkdXhDb250ZXh0ID0gLyojX19QVVJFX18qL2NyZWF0ZVJlZHV4Q29udGV4dEhvb2soKTsiLCAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuY29uc3QgQ29udGV4dEtleSA9IFN5bWJvbC5mb3IoYHJlYWN0LXJlZHV4LWNvbnRleHRgKTtcbmNvbnN0IGdUID0gdHlwZW9mIGdsb2JhbFRoaXMgIT09IFwidW5kZWZpbmVkXCIgPyBnbG9iYWxUaGlzIDpcbi8qIGZhbGwgYmFjayB0byBhIHBlci1tb2R1bGUgc2NvcGUgKHByZS04LjEgYmVoYXZpb3VyKSBpZiBgZ2xvYmFsVGhpc2AgaXMgbm90IGF2YWlsYWJsZSAqL1xue307XG5cbmZ1bmN0aW9uIGdldENvbnRleHQoKSB7XG4gIHZhciBfZ1QkQ29udGV4dEtleTtcblxuICBpZiAoIVJlYWN0LmNyZWF0ZUNvbnRleHQpIHJldHVybiB7fTtcbiAgY29uc3QgY29udGV4dE1hcCA9IChfZ1QkQ29udGV4dEtleSA9IGdUW0NvbnRleHRLZXldKSAhPSBudWxsID8gX2dUJENvbnRleHRLZXkgOiBnVFtDb250ZXh0S2V5XSA9IG5ldyBNYXAoKTtcbiAgbGV0IHJlYWxDb250ZXh0ID0gY29udGV4dE1hcC5nZXQoUmVhY3QuY3JlYXRlQ29udGV4dCk7XG5cbiAgaWYgKCFyZWFsQ29udGV4dCkge1xuICAgIHJlYWxDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dChudWxsKTtcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICByZWFsQ29udGV4dC5kaXNwbGF5TmFtZSA9ICdSZWFjdFJlZHV4JztcbiAgICB9XG5cbiAgICBjb250ZXh0TWFwLnNldChSZWFjdC5jcmVhdGVDb250ZXh0LCByZWFsQ29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gcmVhbENvbnRleHQ7XG59XG5cbmV4cG9ydCBjb25zdCBSZWFjdFJlZHV4Q29udGV4dCA9IC8qI19fUFVSRV9fKi9nZXRDb250ZXh0KCk7XG5leHBvcnQgZGVmYXVsdCBSZWFjdFJlZHV4Q29udGV4dDsiLCAiZXhwb3J0IGNvbnN0IG5vdEluaXRpYWxpemVkID0gKCkgPT4ge1xuICB0aHJvdyBuZXcgRXJyb3IoJ3VTRVMgbm90IGluaXRpYWxpemVkIScpO1xufTsiLCAiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcInJlYWN0UmVkdXhGb3J3YXJkZWRSZWZcIl07XG5cbi8qIGVzbGludC1kaXNhYmxlIHZhbGlkLWpzZG9jLCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgKi9cbmltcG9ydCBob2lzdFN0YXRpY3MgZnJvbSAnaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3MnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaXNWYWxpZEVsZW1lbnRUeXBlLCBpc0NvbnRleHRDb25zdW1lciB9IGZyb20gJ3JlYWN0LWlzJztcbmltcG9ydCBkZWZhdWx0U2VsZWN0b3JGYWN0b3J5IGZyb20gJy4uL2Nvbm5lY3Qvc2VsZWN0b3JGYWN0b3J5JztcbmltcG9ydCB7IG1hcERpc3BhdGNoVG9Qcm9wc0ZhY3RvcnkgfSBmcm9tICcuLi9jb25uZWN0L21hcERpc3BhdGNoVG9Qcm9wcyc7XG5pbXBvcnQgeyBtYXBTdGF0ZVRvUHJvcHNGYWN0b3J5IH0gZnJvbSAnLi4vY29ubmVjdC9tYXBTdGF0ZVRvUHJvcHMnO1xuaW1wb3J0IHsgbWVyZ2VQcm9wc0ZhY3RvcnkgfSBmcm9tICcuLi9jb25uZWN0L21lcmdlUHJvcHMnO1xuaW1wb3J0IHsgY3JlYXRlU3Vic2NyaXB0aW9uIH0gZnJvbSAnLi4vdXRpbHMvU3Vic2NyaXB0aW9uJztcbmltcG9ydCB7IHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QgfSBmcm9tICcuLi91dGlscy91c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0JztcbmltcG9ydCBzaGFsbG93RXF1YWwgZnJvbSAnLi4vdXRpbHMvc2hhbGxvd0VxdWFsJztcbmltcG9ydCB3YXJuaW5nIGZyb20gJy4uL3V0aWxzL3dhcm5pbmcnO1xuaW1wb3J0IHsgUmVhY3RSZWR1eENvbnRleHQgfSBmcm9tICcuL0NvbnRleHQnO1xuaW1wb3J0IHsgbm90SW5pdGlhbGl6ZWQgfSBmcm9tICcuLi91dGlscy91c2VTeW5jRXh0ZXJuYWxTdG9yZSc7XG5sZXQgdXNlU3luY0V4dGVybmFsU3RvcmUgPSBub3RJbml0aWFsaXplZDtcbmV4cG9ydCBjb25zdCBpbml0aWFsaXplQ29ubmVjdCA9IGZuID0+IHtcbiAgdXNlU3luY0V4dGVybmFsU3RvcmUgPSBmbjtcbn07IC8vIERlZmluZSBzb21lIGNvbnN0YW50IGFycmF5cyBqdXN0IHRvIGF2b2lkIHJlLWNyZWF0aW5nIHRoZXNlXG5cbmNvbnN0IEVNUFRZX0FSUkFZID0gW251bGwsIDBdO1xuY29uc3QgTk9fU1VCU0NSSVBUSU9OX0FSUkFZID0gW251bGwsIG51bGxdOyAvLyBBdHRlbXB0cyB0byBzdHJpbmdpZnkgd2hhdGV2ZXIgbm90LXJlYWxseS1hLWNvbXBvbmVudCB2YWx1ZSB3ZSB3ZXJlIGdpdmVuXG4vLyBmb3IgbG9nZ2luZyBpbiBhbiBlcnJvciBtZXNzYWdlXG5cbmNvbnN0IHN0cmluZ2lmeUNvbXBvbmVudCA9IENvbXAgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShDb21wKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIFN0cmluZyhDb21wKTtcbiAgfVxufTtcblxuLy8gVGhpcyBpcyBcImp1c3RcIiBhIGB1c2VMYXlvdXRFZmZlY3RgLCBidXQgd2l0aCB0d28gbW9kaWZpY2F0aW9uczpcbi8vIC0gd2UgbmVlZCB0byBmYWxsIGJhY2sgdG8gYHVzZUVmZmVjdGAgaW4gU1NSIHRvIGF2b2lkIGFubm95aW5nIHdhcm5pbmdzXG4vLyAtIHdlIGV4dHJhY3QgdGhpcyB0byBhIHNlcGFyYXRlIGZ1bmN0aW9uIHRvIGF2b2lkIGNsb3Npbmcgb3ZlciB2YWx1ZXNcbi8vICAgYW5kIGNhdXNpbmcgbWVtb3J5IGxlYWtzXG5mdW5jdGlvbiB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0V2l0aEFyZ3MoZWZmZWN0RnVuYywgZWZmZWN0QXJncywgZGVwZW5kZW5jaWVzKSB7XG4gIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoKCkgPT4gZWZmZWN0RnVuYyguLi5lZmZlY3RBcmdzKSwgZGVwZW5kZW5jaWVzKTtcbn0gLy8gRWZmZWN0IGNhbGxiYWNrLCBleHRyYWN0ZWQ6IGFzc2lnbiB0aGUgbGF0ZXN0IHByb3BzIHZhbHVlcyB0byByZWZzIGZvciBsYXRlciB1c2FnZVxuXG5cbmZ1bmN0aW9uIGNhcHR1cmVXcmFwcGVyUHJvcHMobGFzdFdyYXBwZXJQcm9wcywgbGFzdENoaWxkUHJvcHMsIHJlbmRlcklzU2NoZWR1bGVkLCB3cmFwcGVyUHJvcHMsIC8vIGFjdHVhbENoaWxkUHJvcHM6IHVua25vd24sXG5jaGlsZFByb3BzRnJvbVN0b3JlVXBkYXRlLCBub3RpZnlOZXN0ZWRTdWJzKSB7XG4gIC8vIFdlIHdhbnQgdG8gY2FwdHVyZSB0aGUgd3JhcHBlciBwcm9wcyBhbmQgY2hpbGQgcHJvcHMgd2UgdXNlZCBmb3IgbGF0ZXIgY29tcGFyaXNvbnNcbiAgbGFzdFdyYXBwZXJQcm9wcy5jdXJyZW50ID0gd3JhcHBlclByb3BzO1xuICByZW5kZXJJc1NjaGVkdWxlZC5jdXJyZW50ID0gZmFsc2U7IC8vIElmIHRoZSByZW5kZXIgd2FzIGZyb20gYSBzdG9yZSB1cGRhdGUsIGNsZWFyIG91dCB0aGF0IHJlZmVyZW5jZSBhbmQgY2FzY2FkZSB0aGUgc3Vic2NyaWJlciB1cGRhdGVcblxuICBpZiAoY2hpbGRQcm9wc0Zyb21TdG9yZVVwZGF0ZS5jdXJyZW50KSB7XG4gICAgY2hpbGRQcm9wc0Zyb21TdG9yZVVwZGF0ZS5jdXJyZW50ID0gbnVsbDtcbiAgICBub3RpZnlOZXN0ZWRTdWJzKCk7XG4gIH1cbn0gLy8gRWZmZWN0IGNhbGxiYWNrLCBleHRyYWN0ZWQ6IHN1YnNjcmliZSB0byB0aGUgUmVkdXggc3RvcmUgb3IgbmVhcmVzdCBjb25uZWN0ZWQgYW5jZXN0b3IsXG4vLyBjaGVjayBmb3IgdXBkYXRlcyBhZnRlciBkaXNwYXRjaGVkIGFjdGlvbnMsIGFuZCB0cmlnZ2VyIHJlLXJlbmRlcnMuXG5cblxuZnVuY3Rpb24gc3Vic2NyaWJlVXBkYXRlcyhzaG91bGRIYW5kbGVTdGF0ZUNoYW5nZXMsIHN0b3JlLCBzdWJzY3JpcHRpb24sIGNoaWxkUHJvcHNTZWxlY3RvciwgbGFzdFdyYXBwZXJQcm9wcywgbGFzdENoaWxkUHJvcHMsIHJlbmRlcklzU2NoZWR1bGVkLCBpc01vdW50ZWQsIGNoaWxkUHJvcHNGcm9tU3RvcmVVcGRhdGUsIG5vdGlmeU5lc3RlZFN1YnMsIC8vIGZvcmNlQ29tcG9uZW50VXBkYXRlRGlzcGF0Y2g6IFJlYWN0LkRpc3BhdGNoPGFueT4sXG5hZGRpdGlvbmFsU3Vic2NyaWJlTGlzdGVuZXIpIHtcbiAgLy8gSWYgd2UncmUgbm90IHN1YnNjcmliZWQgdG8gdGhlIHN0b3JlLCBub3RoaW5nIHRvIGRvIGhlcmVcbiAgaWYgKCFzaG91bGRIYW5kbGVTdGF0ZUNoYW5nZXMpIHJldHVybiAoKSA9PiB7fTsgLy8gQ2FwdHVyZSB2YWx1ZXMgZm9yIGNoZWNraW5nIGlmIGFuZCB3aGVuIHRoaXMgY29tcG9uZW50IHVubW91bnRzXG5cbiAgbGV0IGRpZFVuc3Vic2NyaWJlID0gZmFsc2U7XG4gIGxldCBsYXN0VGhyb3duRXJyb3IgPSBudWxsOyAvLyBXZSdsbCBydW4gdGhpcyBjYWxsYmFjayBldmVyeSB0aW1lIGEgc3RvcmUgc3Vic2NyaXB0aW9uIHVwZGF0ZSBwcm9wYWdhdGVzIHRvIHRoaXMgY29tcG9uZW50XG5cbiAgY29uc3QgY2hlY2tGb3JVcGRhdGVzID0gKCkgPT4ge1xuICAgIGlmIChkaWRVbnN1YnNjcmliZSB8fCAhaXNNb3VudGVkLmN1cnJlbnQpIHtcbiAgICAgIC8vIERvbid0IHJ1biBzdGFsZSBsaXN0ZW5lcnMuXG4gICAgICAvLyBSZWR1eCBkb2Vzbid0IGd1YXJhbnRlZSB1bnN1YnNjcmlwdGlvbnMgaGFwcGVuIHVudGlsIG5leHQgZGlzcGF0Y2guXG4gICAgICByZXR1cm47XG4gICAgfSAvLyBUT0RPIFdlJ3JlIGN1cnJlbnRseSBjYWxsaW5nIGdldFN0YXRlIG91cnNlbHZlcyBoZXJlLCByYXRoZXIgdGhhbiBsZXR0aW5nIGB1U0VTYCBkbyBpdFxuXG5cbiAgICBjb25zdCBsYXRlc3RTdG9yZVN0YXRlID0gc3RvcmUuZ2V0U3RhdGUoKTtcbiAgICBsZXQgbmV3Q2hpbGRQcm9wcywgZXJyb3I7XG5cbiAgICB0cnkge1xuICAgICAgLy8gQWN0dWFsbHkgcnVuIHRoZSBzZWxlY3RvciB3aXRoIHRoZSBtb3N0IHJlY2VudCBzdG9yZSBzdGF0ZSBhbmQgd3JhcHBlciBwcm9wc1xuICAgICAgLy8gdG8gZGV0ZXJtaW5lIHdoYXQgdGhlIGNoaWxkIHByb3BzIHNob3VsZCBiZVxuICAgICAgbmV3Q2hpbGRQcm9wcyA9IGNoaWxkUHJvcHNTZWxlY3RvcihsYXRlc3RTdG9yZVN0YXRlLCBsYXN0V3JhcHBlclByb3BzLmN1cnJlbnQpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGVycm9yID0gZTtcbiAgICAgIGxhc3RUaHJvd25FcnJvciA9IGU7XG4gICAgfVxuXG4gICAgaWYgKCFlcnJvcikge1xuICAgICAgbGFzdFRocm93bkVycm9yID0gbnVsbDtcbiAgICB9IC8vIElmIHRoZSBjaGlsZCBwcm9wcyBoYXZlbid0IGNoYW5nZWQsIG5vdGhpbmcgdG8gZG8gaGVyZSAtIGNhc2NhZGUgdGhlIHN1YnNjcmlwdGlvbiB1cGRhdGVcblxuXG4gICAgaWYgKG5ld0NoaWxkUHJvcHMgPT09IGxhc3RDaGlsZFByb3BzLmN1cnJlbnQpIHtcbiAgICAgIGlmICghcmVuZGVySXNTY2hlZHVsZWQuY3VycmVudCkge1xuICAgICAgICBub3RpZnlOZXN0ZWRTdWJzKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFNhdmUgcmVmZXJlbmNlcyB0byB0aGUgbmV3IGNoaWxkIHByb3BzLiAgTm90ZSB0aGF0IHdlIHRyYWNrIHRoZSBcImNoaWxkIHByb3BzIGZyb20gc3RvcmUgdXBkYXRlXCJcbiAgICAgIC8vIGFzIGEgcmVmIGluc3RlYWQgb2YgYSB1c2VTdGF0ZS91c2VSZWR1Y2VyIGJlY2F1c2Ugd2UgbmVlZCBhIHdheSB0byBkZXRlcm1pbmUgaWYgdGhhdCB2YWx1ZSBoYXNcbiAgICAgIC8vIGJlZW4gcHJvY2Vzc2VkLiAgSWYgdGhpcyB3ZW50IGludG8gdXNlU3RhdGUvdXNlUmVkdWNlciwgd2UgY291bGRuJ3QgY2xlYXIgb3V0IHRoZSB2YWx1ZSB3aXRob3V0XG4gICAgICAvLyBmb3JjaW5nIGFub3RoZXIgcmUtcmVuZGVyLCB3aGljaCB3ZSBkb24ndCB3YW50LlxuICAgICAgbGFzdENoaWxkUHJvcHMuY3VycmVudCA9IG5ld0NoaWxkUHJvcHM7XG4gICAgICBjaGlsZFByb3BzRnJvbVN0b3JlVXBkYXRlLmN1cnJlbnQgPSBuZXdDaGlsZFByb3BzO1xuICAgICAgcmVuZGVySXNTY2hlZHVsZWQuY3VycmVudCA9IHRydWU7IC8vIFRPRE8gVGhpcyBpcyBoYWNreSBhbmQgbm90IGhvdyBgdVNFU2AgaXMgbWVhbnQgdG8gYmUgdXNlZFxuICAgICAgLy8gVHJpZ2dlciB0aGUgUmVhY3QgYHVzZVN5bmNFeHRlcm5hbFN0b3JlYCBzdWJzY3JpYmVyXG5cbiAgICAgIGFkZGl0aW9uYWxTdWJzY3JpYmVMaXN0ZW5lcigpO1xuICAgIH1cbiAgfTsgLy8gQWN0dWFsbHkgc3Vic2NyaWJlIHRvIHRoZSBuZWFyZXN0IGNvbm5lY3RlZCBhbmNlc3RvciAob3Igc3RvcmUpXG5cblxuICBzdWJzY3JpcHRpb24ub25TdGF0ZUNoYW5nZSA9IGNoZWNrRm9yVXBkYXRlcztcbiAgc3Vic2NyaXB0aW9uLnRyeVN1YnNjcmliZSgpOyAvLyBQdWxsIGRhdGEgZnJvbSB0aGUgc3RvcmUgYWZ0ZXIgZmlyc3QgcmVuZGVyIGluIGNhc2UgdGhlIHN0b3JlIGhhc1xuICAvLyBjaGFuZ2VkIHNpbmNlIHdlIGJlZ2FuLlxuXG4gIGNoZWNrRm9yVXBkYXRlcygpO1xuXG4gIGNvbnN0IHVuc3Vic2NyaWJlV3JhcHBlciA9ICgpID0+IHtcbiAgICBkaWRVbnN1YnNjcmliZSA9IHRydWU7XG4gICAgc3Vic2NyaXB0aW9uLnRyeVVuc3Vic2NyaWJlKCk7XG4gICAgc3Vic2NyaXB0aW9uLm9uU3RhdGVDaGFuZ2UgPSBudWxsO1xuXG4gICAgaWYgKGxhc3RUaHJvd25FcnJvcikge1xuICAgICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IHdlIGNhdWdodCBhbiBlcnJvciBkdWUgdG8gYSBiYWQgbWFwU3RhdGUgZnVuY3Rpb24sIGJ1dCB0aGVcbiAgICAgIC8vIHBhcmVudCByZS1yZW5kZXJlZCB3aXRob3V0IHRoaXMgY29tcG9uZW50IGFuZCB3ZSdyZSBhYm91dCB0byB1bm1vdW50LlxuICAgICAgLy8gVGhpcyBzaG91bGRuJ3QgaGFwcGVuIGFzIGxvbmcgYXMgd2UgZG8gdG9wLWRvd24gc3Vic2NyaXB0aW9ucyBjb3JyZWN0bHksIGJ1dFxuICAgICAgLy8gaWYgd2UgZXZlciBkbyB0aG9zZSB3cm9uZywgdGhpcyB0aHJvdyB3aWxsIHN1cmZhY2UgdGhlIGVycm9yIGluIG91ciB0ZXN0cy5cbiAgICAgIC8vIEluIHRoYXQgY2FzZSwgdGhyb3cgdGhlIGVycm9yIGZyb20gaGVyZSBzbyBpdCBkb2Vzbid0IGdldCBsb3N0LlxuICAgICAgdGhyb3cgbGFzdFRocm93bkVycm9yO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gdW5zdWJzY3JpYmVXcmFwcGVyO1xufSAvLyBSZWR1Y2VyIGluaXRpYWwgc3RhdGUgY3JlYXRpb24gZm9yIG91ciB1cGRhdGUgcmVkdWNlclxuXG5cbmNvbnN0IGluaXRTdGF0ZVVwZGF0ZXMgPSAoKSA9PiBFTVBUWV9BUlJBWTtcblxuZnVuY3Rpb24gc3RyaWN0RXF1YWwoYSwgYikge1xuICByZXR1cm4gYSA9PT0gYjtcbn1cbi8qKlxyXG4gKiBJbmZlcnMgdGhlIHR5cGUgb2YgcHJvcHMgdGhhdCBhIGNvbm5lY3RvciB3aWxsIGluamVjdCBpbnRvIGEgY29tcG9uZW50LlxyXG4gKi9cblxuXG5sZXQgaGFzV2FybmVkQWJvdXREZXByZWNhdGVkUHVyZU9wdGlvbiA9IGZhbHNlO1xuLyoqXHJcbiAqIENvbm5lY3RzIGEgUmVhY3QgY29tcG9uZW50IHRvIGEgUmVkdXggc3RvcmUuXHJcbiAqXHJcbiAqIC0gV2l0aG91dCBhcmd1bWVudHMsIGp1c3Qgd3JhcHMgdGhlIGNvbXBvbmVudCwgd2l0aG91dCBjaGFuZ2luZyB0aGUgYmVoYXZpb3IgLyBwcm9wc1xyXG4gKlxyXG4gKiAtIElmIDIgcGFyYW1zIGFyZSBwYXNzZWQgKDNyZCBwYXJhbSwgbWVyZ2VQcm9wcywgaXMgc2tpcHBlZCksIGRlZmF1bHQgYmVoYXZpb3JcclxuICogaXMgdG8gb3ZlcnJpZGUgb3duUHJvcHMgKGFzIHN0YXRlZCBpbiB0aGUgZG9jcyksIHNvIHdoYXQgcmVtYWlucyBpcyBldmVyeXRoaW5nIHRoYXQnc1xyXG4gKiBub3QgYSBzdGF0ZSBvciBkaXNwYXRjaCBwcm9wXHJcbiAqXHJcbiAqIC0gV2hlbiAzcmQgcGFyYW0gaXMgcGFzc2VkLCB3ZSBkb24ndCBrbm93IGlmIG93blByb3BzIHByb3BhZ2F0ZSBhbmQgd2hldGhlciB0aGV5XHJcbiAqIHNob3VsZCBiZSB2YWxpZCBjb21wb25lbnQgcHJvcHMsIGJlY2F1c2UgaXQgZGVwZW5kcyBvbiBtZXJnZVByb3BzIGltcGxlbWVudGF0aW9uLlxyXG4gKiBBcyBzdWNoLCBpdCBpcyB0aGUgdXNlcidzIHJlc3BvbnNpYmlsaXR5IHRvIGV4dGVuZCBvd25Qcm9wcyBpbnRlcmZhY2UgZnJvbSBzdGF0ZSBvclxyXG4gKiBkaXNwYXRjaCBwcm9wcyBvciBib3RoIHdoZW4gYXBwbGljYWJsZVxyXG4gKlxyXG4gKiBAcGFyYW0gbWFwU3RhdGVUb1Byb3BzIEEgZnVuY3Rpb24gdGhhdCBleHRyYWN0cyB2YWx1ZXMgZnJvbSBzdGF0ZVxyXG4gKiBAcGFyYW0gbWFwRGlzcGF0Y2hUb1Byb3BzIFNldHVwIGZvciBkaXNwYXRjaGluZyBhY3Rpb25zXHJcbiAqIEBwYXJhbSBtZXJnZVByb3BzIE9wdGlvbmFsIGNhbGxiYWNrIHRvIG1lcmdlIHN0YXRlIGFuZCBkaXNwYXRjaCBwcm9wcyB0b2dldGhlclxyXG4gKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciBjb25maWd1cmluZyB0aGUgY29ubmVjdGlvblxyXG4gKlxyXG4gKi9cblxuZnVuY3Rpb24gY29ubmVjdChtYXBTdGF0ZVRvUHJvcHMsIG1hcERpc3BhdGNoVG9Qcm9wcywgbWVyZ2VQcm9wcywge1xuICAvLyBUaGUgYHB1cmVgIG9wdGlvbiBoYXMgYmVlbiByZW1vdmVkLCBzbyBUUyBkb2Vzbid0IGxpa2UgdXMgZGVzdHJ1Y3R1cmluZyB0aGlzIHRvIGNoZWNrIGl0cyBleGlzdGVuY2UuXG4gIC8vIEB0cy1pZ25vcmVcbiAgcHVyZSxcbiAgYXJlU3RhdGVzRXF1YWwgPSBzdHJpY3RFcXVhbCxcbiAgYXJlT3duUHJvcHNFcXVhbCA9IHNoYWxsb3dFcXVhbCxcbiAgYXJlU3RhdGVQcm9wc0VxdWFsID0gc2hhbGxvd0VxdWFsLFxuICBhcmVNZXJnZWRQcm9wc0VxdWFsID0gc2hhbGxvd0VxdWFsLFxuICAvLyB1c2UgUmVhY3QncyBmb3J3YXJkUmVmIHRvIGV4cG9zZSBhIHJlZiBvZiB0aGUgd3JhcHBlZCBjb21wb25lbnRcbiAgZm9yd2FyZFJlZiA9IGZhbHNlLFxuICAvLyB0aGUgY29udGV4dCBjb25zdW1lciB0byB1c2VcbiAgY29udGV4dCA9IFJlYWN0UmVkdXhDb250ZXh0XG59ID0ge30pIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAocHVyZSAhPT0gdW5kZWZpbmVkICYmICFoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRQdXJlT3B0aW9uKSB7XG4gICAgICBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRQdXJlT3B0aW9uID0gdHJ1ZTtcbiAgICAgIHdhcm5pbmcoJ1RoZSBgcHVyZWAgb3B0aW9uIGhhcyBiZWVuIHJlbW92ZWQuIGBjb25uZWN0YCBpcyBub3cgYWx3YXlzIGEgXCJwdXJlL21lbW9pemVkXCIgY29tcG9uZW50Jyk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgQ29udGV4dCA9IGNvbnRleHQ7XG4gIGNvbnN0IGluaXRNYXBTdGF0ZVRvUHJvcHMgPSBtYXBTdGF0ZVRvUHJvcHNGYWN0b3J5KG1hcFN0YXRlVG9Qcm9wcyk7XG4gIGNvbnN0IGluaXRNYXBEaXNwYXRjaFRvUHJvcHMgPSBtYXBEaXNwYXRjaFRvUHJvcHNGYWN0b3J5KG1hcERpc3BhdGNoVG9Qcm9wcyk7XG4gIGNvbnN0IGluaXRNZXJnZVByb3BzID0gbWVyZ2VQcm9wc0ZhY3RvcnkobWVyZ2VQcm9wcyk7XG4gIGNvbnN0IHNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlcyA9IEJvb2xlYW4obWFwU3RhdGVUb1Byb3BzKTtcblxuICBjb25zdCB3cmFwV2l0aENvbm5lY3QgPSBXcmFwcGVkQ29tcG9uZW50ID0+IHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhaXNWYWxpZEVsZW1lbnRUeXBlKFdyYXBwZWRDb21wb25lbnQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFlvdSBtdXN0IHBhc3MgYSBjb21wb25lbnQgdG8gdGhlIGZ1bmN0aW9uIHJldHVybmVkIGJ5IGNvbm5lY3QuIEluc3RlYWQgcmVjZWl2ZWQgJHtzdHJpbmdpZnlDb21wb25lbnQoV3JhcHBlZENvbXBvbmVudCl9YCk7XG4gICAgfVxuXG4gICAgY29uc3Qgd3JhcHBlZENvbXBvbmVudE5hbWUgPSBXcmFwcGVkQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8IFdyYXBwZWRDb21wb25lbnQubmFtZSB8fCAnQ29tcG9uZW50JztcbiAgICBjb25zdCBkaXNwbGF5TmFtZSA9IGBDb25uZWN0KCR7d3JhcHBlZENvbXBvbmVudE5hbWV9KWA7XG4gICAgY29uc3Qgc2VsZWN0b3JGYWN0b3J5T3B0aW9ucyA9IHtcbiAgICAgIHNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlcyxcbiAgICAgIGRpc3BsYXlOYW1lLFxuICAgICAgd3JhcHBlZENvbXBvbmVudE5hbWUsXG4gICAgICBXcmFwcGVkQ29tcG9uZW50LFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgaW5pdE1hcFN0YXRlVG9Qcm9wcyxcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGluaXRNYXBEaXNwYXRjaFRvUHJvcHMsXG4gICAgICBpbml0TWVyZ2VQcm9wcyxcbiAgICAgIGFyZVN0YXRlc0VxdWFsLFxuICAgICAgYXJlU3RhdGVQcm9wc0VxdWFsLFxuICAgICAgYXJlT3duUHJvcHNFcXVhbCxcbiAgICAgIGFyZU1lcmdlZFByb3BzRXF1YWxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gQ29ubmVjdEZ1bmN0aW9uKHByb3BzKSB7XG4gICAgICBjb25zdCBbcHJvcHNDb250ZXh0LCByZWFjdFJlZHV4Rm9yd2FyZGVkUmVmLCB3cmFwcGVyUHJvcHNdID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgICAgIC8vIERpc3Rpbmd1aXNoIGJldHdlZW4gYWN0dWFsIFwiZGF0YVwiIHByb3BzIHRoYXQgd2VyZSBwYXNzZWQgdG8gdGhlIHdyYXBwZXIgY29tcG9uZW50LFxuICAgICAgICAvLyBhbmQgdmFsdWVzIG5lZWRlZCB0byBjb250cm9sIGJlaGF2aW9yIChmb3J3YXJkZWQgcmVmcywgYWx0ZXJuYXRlIGNvbnRleHQgaW5zdGFuY2VzKS5cbiAgICAgICAgLy8gVG8gbWFpbnRhaW4gdGhlIHdyYXBwZXJQcm9wcyBvYmplY3QgcmVmZXJlbmNlLCBtZW1vaXplIHRoaXMgZGVzdHJ1Y3R1cmluZy5cbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIHJlYWN0UmVkdXhGb3J3YXJkZWRSZWZcbiAgICAgICAgfSA9IHByb3BzLFxuICAgICAgICAgICAgICB3cmFwcGVyUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcblxuICAgICAgICByZXR1cm4gW3Byb3BzLmNvbnRleHQsIHJlYWN0UmVkdXhGb3J3YXJkZWRSZWYsIHdyYXBwZXJQcm9wc107XG4gICAgICB9LCBbcHJvcHNdKTtcbiAgICAgIGNvbnN0IENvbnRleHRUb1VzZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgICAgICAvLyBVc2VycyBtYXkgb3B0aW9uYWxseSBwYXNzIGluIGEgY3VzdG9tIGNvbnRleHQgaW5zdGFuY2UgdG8gdXNlIGluc3RlYWQgb2Ygb3VyIFJlYWN0UmVkdXhDb250ZXh0LlxuICAgICAgICAvLyBNZW1vaXplIHRoZSBjaGVjayB0aGF0IGRldGVybWluZXMgd2hpY2ggY29udGV4dCBpbnN0YW5jZSB3ZSBzaG91bGQgdXNlLlxuICAgICAgICByZXR1cm4gcHJvcHNDb250ZXh0ICYmIHByb3BzQ29udGV4dC5Db25zdW1lciAmJiAvLyBAdHMtaWdub3JlXG4gICAgICAgIGlzQ29udGV4dENvbnN1bWVyKCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChwcm9wc0NvbnRleHQuQ29uc3VtZXIsIG51bGwpKSA/IHByb3BzQ29udGV4dCA6IENvbnRleHQ7XG4gICAgICB9LCBbcHJvcHNDb250ZXh0LCBDb250ZXh0XSk7IC8vIFJldHJpZXZlIHRoZSBzdG9yZSBhbmQgYW5jZXN0b3Igc3Vic2NyaXB0aW9uIHZpYSBjb250ZXh0LCBpZiBhdmFpbGFibGVcblxuICAgICAgY29uc3QgY29udGV4dFZhbHVlID0gUmVhY3QudXNlQ29udGV4dChDb250ZXh0VG9Vc2UpOyAvLyBUaGUgc3RvcmUgX211c3RfIGV4aXN0IGFzIGVpdGhlciBhIHByb3Agb3IgaW4gY29udGV4dC5cbiAgICAgIC8vIFdlJ2xsIGNoZWNrIHRvIHNlZSBpZiBpdCBfbG9va3NfIGxpa2UgYSBSZWR1eCBzdG9yZSBmaXJzdC5cbiAgICAgIC8vIFRoaXMgYWxsb3dzIHVzIHRvIHBhc3MgdGhyb3VnaCBhIGBzdG9yZWAgcHJvcCB0aGF0IGlzIGp1c3QgYSBwbGFpbiB2YWx1ZS5cblxuICAgICAgY29uc3QgZGlkU3RvcmVDb21lRnJvbVByb3BzID0gQm9vbGVhbihwcm9wcy5zdG9yZSkgJiYgQm9vbGVhbihwcm9wcy5zdG9yZS5nZXRTdGF0ZSkgJiYgQm9vbGVhbihwcm9wcy5zdG9yZS5kaXNwYXRjaCk7XG4gICAgICBjb25zdCBkaWRTdG9yZUNvbWVGcm9tQ29udGV4dCA9IEJvb2xlYW4oY29udGV4dFZhbHVlKSAmJiBCb29sZWFuKGNvbnRleHRWYWx1ZS5zdG9yZSk7XG5cbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICFkaWRTdG9yZUNvbWVGcm9tUHJvcHMgJiYgIWRpZFN0b3JlQ29tZUZyb21Db250ZXh0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgXCJzdG9yZVwiIGluIHRoZSBjb250ZXh0IG9mIGAgKyBgXCIke2Rpc3BsYXlOYW1lfVwiLiBFaXRoZXIgd3JhcCB0aGUgcm9vdCBjb21wb25lbnQgaW4gYSA8UHJvdmlkZXI+LCBgICsgYG9yIHBhc3MgYSBjdXN0b20gUmVhY3QgY29udGV4dCBwcm92aWRlciB0byA8UHJvdmlkZXI+IGFuZCB0aGUgY29ycmVzcG9uZGluZyBgICsgYFJlYWN0IGNvbnRleHQgY29uc3VtZXIgdG8gJHtkaXNwbGF5TmFtZX0gaW4gY29ubmVjdCBvcHRpb25zLmApO1xuICAgICAgfSAvLyBCYXNlZCBvbiB0aGUgcHJldmlvdXMgY2hlY2ssIG9uZSBvZiB0aGVzZSBtdXN0IGJlIHRydWVcblxuXG4gICAgICBjb25zdCBzdG9yZSA9IGRpZFN0b3JlQ29tZUZyb21Qcm9wcyA/IHByb3BzLnN0b3JlIDogY29udGV4dFZhbHVlLnN0b3JlO1xuICAgICAgY29uc3QgZ2V0U2VydmVyU3RhdGUgPSBkaWRTdG9yZUNvbWVGcm9tQ29udGV4dCA/IGNvbnRleHRWYWx1ZS5nZXRTZXJ2ZXJTdGF0ZSA6IHN0b3JlLmdldFN0YXRlO1xuICAgICAgY29uc3QgY2hpbGRQcm9wc1NlbGVjdG9yID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgICAgIC8vIFRoZSBjaGlsZCBwcm9wcyBzZWxlY3RvciBuZWVkcyB0aGUgc3RvcmUgcmVmZXJlbmNlIGFzIGFuIGlucHV0LlxuICAgICAgICAvLyBSZS1jcmVhdGUgdGhpcyBzZWxlY3RvciB3aGVuZXZlciB0aGUgc3RvcmUgY2hhbmdlcy5cbiAgICAgICAgcmV0dXJuIGRlZmF1bHRTZWxlY3RvckZhY3Rvcnkoc3RvcmUuZGlzcGF0Y2gsIHNlbGVjdG9yRmFjdG9yeU9wdGlvbnMpO1xuICAgICAgfSwgW3N0b3JlXSk7XG4gICAgICBjb25zdCBbc3Vic2NyaXB0aW9uLCBub3RpZnlOZXN0ZWRTdWJzXSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgICAgICBpZiAoIXNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlcykgcmV0dXJuIE5PX1NVQlNDUklQVElPTl9BUlJBWTsgLy8gVGhpcyBTdWJzY3JpcHRpb24ncyBzb3VyY2Ugc2hvdWxkIG1hdGNoIHdoZXJlIHN0b3JlIGNhbWUgZnJvbTogcHJvcHMgdnMuIGNvbnRleHQuIEEgY29tcG9uZW50XG4gICAgICAgIC8vIGNvbm5lY3RlZCB0byB0aGUgc3RvcmUgdmlhIHByb3BzIHNob3VsZG4ndCB1c2Ugc3Vic2NyaXB0aW9uIGZyb20gY29udGV4dCwgb3IgdmljZSB2ZXJzYS5cblxuICAgICAgICBjb25zdCBzdWJzY3JpcHRpb24gPSBjcmVhdGVTdWJzY3JpcHRpb24oc3RvcmUsIGRpZFN0b3JlQ29tZUZyb21Qcm9wcyA/IHVuZGVmaW5lZCA6IGNvbnRleHRWYWx1ZS5zdWJzY3JpcHRpb24pOyAvLyBgbm90aWZ5TmVzdGVkU3Vic2AgaXMgZHVwbGljYXRlZCB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhlIGNvbXBvbmVudCBpcyB1bm1vdW50ZWQgaW5cbiAgICAgICAgLy8gdGhlIG1pZGRsZSBvZiB0aGUgbm90aWZpY2F0aW9uIGxvb3AsIHdoZXJlIGBzdWJzY3JpcHRpb25gIHdpbGwgdGhlbiBiZSBudWxsLiBUaGlzIGNhblxuICAgICAgICAvLyBwcm9iYWJseSBiZSBhdm9pZGVkIGlmIFN1YnNjcmlwdGlvbidzIGxpc3RlbmVycyBsb2dpYyBpcyBjaGFuZ2VkIHRvIG5vdCBjYWxsIGxpc3RlbmVyc1xuICAgICAgICAvLyB0aGF0IGhhdmUgYmVlbiB1bnN1YnNjcmliZWQgaW4gdGhlICBtaWRkbGUgb2YgdGhlIG5vdGlmaWNhdGlvbiBsb29wLlxuXG4gICAgICAgIGNvbnN0IG5vdGlmeU5lc3RlZFN1YnMgPSBzdWJzY3JpcHRpb24ubm90aWZ5TmVzdGVkU3Vicy5iaW5kKHN1YnNjcmlwdGlvbik7XG4gICAgICAgIHJldHVybiBbc3Vic2NyaXB0aW9uLCBub3RpZnlOZXN0ZWRTdWJzXTtcbiAgICAgIH0sIFtzdG9yZSwgZGlkU3RvcmVDb21lRnJvbVByb3BzLCBjb250ZXh0VmFsdWVdKTsgLy8gRGV0ZXJtaW5lIHdoYXQge3N0b3JlLCBzdWJzY3JpcHRpb259IHZhbHVlIHNob3VsZCBiZSBwdXQgaW50byBuZXN0ZWQgY29udGV4dCwgaWYgbmVjZXNzYXJ5LFxuICAgICAgLy8gYW5kIG1lbW9pemUgdGhhdCB2YWx1ZSB0byBhdm9pZCB1bm5lY2Vzc2FyeSBjb250ZXh0IHVwZGF0ZXMuXG5cbiAgICAgIGNvbnN0IG92ZXJyaWRkZW5Db250ZXh0VmFsdWUgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICAgICAgaWYgKGRpZFN0b3JlQ29tZUZyb21Qcm9wcykge1xuICAgICAgICAgIC8vIFRoaXMgY29tcG9uZW50IGlzIGRpcmVjdGx5IHN1YnNjcmliZWQgdG8gYSBzdG9yZSBmcm9tIHByb3BzLlxuICAgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgZGVzY2VuZGFudHMgcmVhZGluZyBmcm9tIHRoaXMgc3RvcmUgLSBwYXNzIGRvd24gd2hhdGV2ZXJcbiAgICAgICAgICAvLyB0aGUgZXhpc3RpbmcgY29udGV4dCB2YWx1ZSBpcyBmcm9tIHRoZSBuZWFyZXN0IGNvbm5lY3RlZCBhbmNlc3Rvci5cbiAgICAgICAgICByZXR1cm4gY29udGV4dFZhbHVlO1xuICAgICAgICB9IC8vIE90aGVyd2lzZSwgcHV0IHRoaXMgY29tcG9uZW50J3Mgc3Vic2NyaXB0aW9uIGluc3RhbmNlIGludG8gY29udGV4dCwgc28gdGhhdFxuICAgICAgICAvLyBjb25uZWN0ZWQgZGVzY2VuZGFudHMgd29uJ3QgdXBkYXRlIHVudGlsIGFmdGVyIHRoaXMgY29tcG9uZW50IGlzIGRvbmVcblxuXG4gICAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgY29udGV4dFZhbHVlLCB7XG4gICAgICAgICAgc3Vic2NyaXB0aW9uXG4gICAgICAgIH0pO1xuICAgICAgfSwgW2RpZFN0b3JlQ29tZUZyb21Qcm9wcywgY29udGV4dFZhbHVlLCBzdWJzY3JpcHRpb25dKTsgLy8gU2V0IHVwIHJlZnMgdG8gY29vcmRpbmF0ZSB2YWx1ZXMgYmV0d2VlbiB0aGUgc3Vic2NyaXB0aW9uIGVmZmVjdCBhbmQgdGhlIHJlbmRlciBsb2dpY1xuXG4gICAgICBjb25zdCBsYXN0Q2hpbGRQcm9wcyA9IFJlYWN0LnVzZVJlZigpO1xuICAgICAgY29uc3QgbGFzdFdyYXBwZXJQcm9wcyA9IFJlYWN0LnVzZVJlZih3cmFwcGVyUHJvcHMpO1xuICAgICAgY29uc3QgY2hpbGRQcm9wc0Zyb21TdG9yZVVwZGF0ZSA9IFJlYWN0LnVzZVJlZigpO1xuICAgICAgY29uc3QgcmVuZGVySXNTY2hlZHVsZWQgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuICAgICAgY29uc3QgaXNQcm9jZXNzaW5nRGlzcGF0Y2ggPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuICAgICAgY29uc3QgaXNNb3VudGVkID0gUmVhY3QudXNlUmVmKGZhbHNlKTtcbiAgICAgIGNvbnN0IGxhdGVzdFN1YnNjcmlwdGlvbkNhbGxiYWNrRXJyb3IgPSBSZWFjdC51c2VSZWYoKTtcbiAgICAgIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpc01vdW50ZWQuY3VycmVudCA9IHRydWU7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgaXNNb3VudGVkLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgfTtcbiAgICAgIH0sIFtdKTtcbiAgICAgIGNvbnN0IGFjdHVhbENoaWxkUHJvcHNTZWxlY3RvciA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgICAgICBjb25zdCBzZWxlY3RvciA9ICgpID0+IHtcbiAgICAgICAgICAvLyBUcmlja3kgbG9naWMgaGVyZTpcbiAgICAgICAgICAvLyAtIFRoaXMgcmVuZGVyIG1heSBoYXZlIGJlZW4gdHJpZ2dlcmVkIGJ5IGEgUmVkdXggc3RvcmUgdXBkYXRlIHRoYXQgcHJvZHVjZWQgbmV3IGNoaWxkIHByb3BzXG4gICAgICAgICAgLy8gLSBIb3dldmVyLCB3ZSBtYXkgaGF2ZSBnb3R0ZW4gbmV3IHdyYXBwZXIgcHJvcHMgYWZ0ZXIgdGhhdFxuICAgICAgICAgIC8vIElmIHdlIGhhdmUgbmV3IGNoaWxkIHByb3BzLCBhbmQgdGhlIHNhbWUgd3JhcHBlciBwcm9wcywgd2Uga25vdyB3ZSBzaG91bGQgdXNlIHRoZSBuZXcgY2hpbGQgcHJvcHMgYXMtaXMuXG4gICAgICAgICAgLy8gQnV0LCBpZiB3ZSBoYXZlIG5ldyB3cmFwcGVyIHByb3BzLCB0aG9zZSBtaWdodCBjaGFuZ2UgdGhlIGNoaWxkIHByb3BzLCBzbyB3ZSBoYXZlIHRvIHJlY2FsY3VsYXRlIHRoaW5ncy5cbiAgICAgICAgICAvLyBTbywgd2UnbGwgdXNlIHRoZSBjaGlsZCBwcm9wcyBmcm9tIHN0b3JlIHVwZGF0ZSBvbmx5IGlmIHRoZSB3cmFwcGVyIHByb3BzIGFyZSB0aGUgc2FtZSBhcyBsYXN0IHRpbWUuXG4gICAgICAgICAgaWYgKGNoaWxkUHJvcHNGcm9tU3RvcmVVcGRhdGUuY3VycmVudCAmJiB3cmFwcGVyUHJvcHMgPT09IGxhc3RXcmFwcGVyUHJvcHMuY3VycmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIGNoaWxkUHJvcHNGcm9tU3RvcmVVcGRhdGUuY3VycmVudDtcbiAgICAgICAgICB9IC8vIFRPRE8gV2UncmUgcmVhZGluZyB0aGUgc3RvcmUgZGlyZWN0bHkgaW4gcmVuZGVyKCkgaGVyZS4gQmFkIGlkZWE/XG4gICAgICAgICAgLy8gVGhpcyB3aWxsIGxpa2VseSBjYXVzZSBCYWQgVGhpbmdzIChUTSkgdG8gaGFwcGVuIGluIENvbmN1cnJlbnQgTW9kZS5cbiAgICAgICAgICAvLyBOb3RlIHRoYXQgd2UgZG8gdGhpcyBiZWNhdXNlIG9uIHJlbmRlcnMgX25vdF8gY2F1c2VkIGJ5IHN0b3JlIHVwZGF0ZXMsIHdlIG5lZWQgdGhlIGxhdGVzdCBzdG9yZSBzdGF0ZVxuICAgICAgICAgIC8vIHRvIGRldGVybWluZSB3aGF0IHRoZSBjaGlsZCBwcm9wcyBzaG91bGQgYmUuXG5cblxuICAgICAgICAgIHJldHVybiBjaGlsZFByb3BzU2VsZWN0b3Ioc3RvcmUuZ2V0U3RhdGUoKSwgd3JhcHBlclByb3BzKTtcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gc2VsZWN0b3I7XG4gICAgICB9LCBbc3RvcmUsIHdyYXBwZXJQcm9wc10pOyAvLyBXZSBuZWVkIHRoaXMgdG8gZXhlY3V0ZSBzeW5jaHJvbm91c2x5IGV2ZXJ5IHRpbWUgd2UgcmUtcmVuZGVyLiBIb3dldmVyLCBSZWFjdCB3YXJuc1xuICAgICAgLy8gYWJvdXQgdXNlTGF5b3V0RWZmZWN0IGluIFNTUiwgc28gd2UgdHJ5IHRvIGRldGVjdCBlbnZpcm9ubWVudCBhbmQgZmFsbCBiYWNrIHRvXG4gICAgICAvLyBqdXN0IHVzZUVmZmVjdCBpbnN0ZWFkIHRvIGF2b2lkIHRoZSB3YXJuaW5nLCBzaW5jZSBuZWl0aGVyIHdpbGwgcnVuIGFueXdheS5cblxuICAgICAgY29uc3Qgc3Vic2NyaWJlRm9yUmVhY3QgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICAgICAgY29uc3Qgc3Vic2NyaWJlID0gcmVhY3RMaXN0ZW5lciA9PiB7XG4gICAgICAgICAgaWYgKCFzdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB7fTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gc3Vic2NyaWJlVXBkYXRlcyhzaG91bGRIYW5kbGVTdGF0ZUNoYW5nZXMsIHN0b3JlLCBzdWJzY3JpcHRpb24sIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICBjaGlsZFByb3BzU2VsZWN0b3IsIGxhc3RXcmFwcGVyUHJvcHMsIGxhc3RDaGlsZFByb3BzLCByZW5kZXJJc1NjaGVkdWxlZCwgaXNNb3VudGVkLCBjaGlsZFByb3BzRnJvbVN0b3JlVXBkYXRlLCBub3RpZnlOZXN0ZWRTdWJzLCByZWFjdExpc3RlbmVyKTtcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gc3Vic2NyaWJlO1xuICAgICAgfSwgW3N1YnNjcmlwdGlvbl0pO1xuICAgICAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdFdpdGhBcmdzKGNhcHR1cmVXcmFwcGVyUHJvcHMsIFtsYXN0V3JhcHBlclByb3BzLCBsYXN0Q2hpbGRQcm9wcywgcmVuZGVySXNTY2hlZHVsZWQsIHdyYXBwZXJQcm9wcywgY2hpbGRQcm9wc0Zyb21TdG9yZVVwZGF0ZSwgbm90aWZ5TmVzdGVkU3Vic10pO1xuICAgICAgbGV0IGFjdHVhbENoaWxkUHJvcHM7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGFjdHVhbENoaWxkUHJvcHMgPSB1c2VTeW5jRXh0ZXJuYWxTdG9yZSggLy8gVE9ETyBXZSdyZSBwYXNzaW5nIHRocm91Z2ggYSBiaWcgd3JhcHBlciB0aGF0IGRvZXMgYSBidW5jaCBvZiBleHRyYSBzaWRlIGVmZmVjdHMgYmVzaWRlcyBzdWJzY3JpYmluZ1xuICAgICAgICBzdWJzY3JpYmVGb3JSZWFjdCwgLy8gVE9ETyBUaGlzIGlzIGluY3JlZGlibHkgaGFja3kuIFdlJ3ZlIGFscmVhZHkgcHJvY2Vzc2VkIHRoZSBzdG9yZSB1cGRhdGUgYW5kIGNhbGN1bGF0ZWQgbmV3IGNoaWxkIHByb3BzLFxuICAgICAgICAvLyBUT0RPIGFuZCB3ZSdyZSBqdXN0IHBhc3NpbmcgdGhhdCB0aHJvdWdoIHNvIGl0IHRyaWdnZXJzIGEgcmUtcmVuZGVyIGZvciB1cyByYXRoZXIgdGhhbiByZWx5aW5nIG9uIGB1U0VTYC5cbiAgICAgICAgYWN0dWFsQ2hpbGRQcm9wc1NlbGVjdG9yLCBnZXRTZXJ2ZXJTdGF0ZSA/ICgpID0+IGNoaWxkUHJvcHNTZWxlY3RvcihnZXRTZXJ2ZXJTdGF0ZSgpLCB3cmFwcGVyUHJvcHMpIDogYWN0dWFsQ2hpbGRQcm9wc1NlbGVjdG9yKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAobGF0ZXN0U3Vic2NyaXB0aW9uQ2FsbGJhY2tFcnJvci5jdXJyZW50KSB7XG4gICAgICAgICAgO1xuICAgICAgICAgIGVyci5tZXNzYWdlICs9IGBcXG5UaGUgZXJyb3IgbWF5IGJlIGNvcnJlbGF0ZWQgd2l0aCB0aGlzIHByZXZpb3VzIGVycm9yOlxcbiR7bGF0ZXN0U3Vic2NyaXB0aW9uQ2FsbGJhY2tFcnJvci5jdXJyZW50LnN0YWNrfVxcblxcbmA7XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG5cbiAgICAgIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgICAgICBsYXRlc3RTdWJzY3JpcHRpb25DYWxsYmFja0Vycm9yLmN1cnJlbnQgPSB1bmRlZmluZWQ7XG4gICAgICAgIGNoaWxkUHJvcHNGcm9tU3RvcmVVcGRhdGUuY3VycmVudCA9IHVuZGVmaW5lZDtcbiAgICAgICAgbGFzdENoaWxkUHJvcHMuY3VycmVudCA9IGFjdHVhbENoaWxkUHJvcHM7XG4gICAgICB9KTsgLy8gTm93IHRoYXQgYWxsIHRoYXQncyBkb25lLCB3ZSBjYW4gZmluYWxseSB0cnkgdG8gYWN0dWFsbHkgcmVuZGVyIHRoZSBjaGlsZCBjb21wb25lbnQuXG4gICAgICAvLyBXZSBtZW1vaXplIHRoZSBlbGVtZW50cyBmb3IgdGhlIHJlbmRlcmVkIGNoaWxkIGNvbXBvbmVudCBhcyBhbiBvcHRpbWl6YXRpb24uXG5cbiAgICAgIGNvbnN0IHJlbmRlcmVkV3JhcHBlZENvbXBvbmVudCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChXcmFwcGVkQ29tcG9uZW50LCBfZXh0ZW5kcyh7fSwgYWN0dWFsQ2hpbGRQcm9wcywge1xuICAgICAgICAgICAgcmVmOiByZWFjdFJlZHV4Rm9yd2FyZGVkUmVmXG4gICAgICAgICAgfSkpXG4gICAgICAgICk7XG4gICAgICB9LCBbcmVhY3RSZWR1eEZvcndhcmRlZFJlZiwgV3JhcHBlZENvbXBvbmVudCwgYWN0dWFsQ2hpbGRQcm9wc10pOyAvLyBJZiBSZWFjdCBzZWVzIHRoZSBleGFjdCBzYW1lIGVsZW1lbnQgcmVmZXJlbmNlIGFzIGxhc3QgdGltZSwgaXQgYmFpbHMgb3V0IG9mIHJlLXJlbmRlcmluZ1xuICAgICAgLy8gdGhhdCBjaGlsZCwgc2FtZSBhcyBpZiBpdCB3YXMgd3JhcHBlZCBpbiBSZWFjdC5tZW1vKCkgb3IgcmV0dXJuZWQgZmFsc2UgZnJvbSBzaG91bGRDb21wb25lbnRVcGRhdGUuXG5cbiAgICAgIGNvbnN0IHJlbmRlcmVkQ2hpbGQgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICAgICAgaWYgKHNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlcykge1xuICAgICAgICAgIC8vIElmIHRoaXMgY29tcG9uZW50IGlzIHN1YnNjcmliZWQgdG8gc3RvcmUgdXBkYXRlcywgd2UgbmVlZCB0byBwYXNzIGl0cyBvd25cbiAgICAgICAgICAvLyBzdWJzY3JpcHRpb24gaW5zdGFuY2UgZG93biB0byBvdXIgZGVzY2VuZGFudHMuIFRoYXQgbWVhbnMgcmVuZGVyaW5nIHRoZSBzYW1lXG4gICAgICAgICAgLy8gQ29udGV4dCBpbnN0YW5jZSwgYW5kIHB1dHRpbmcgYSBkaWZmZXJlbnQgdmFsdWUgaW50byB0aGUgY29udGV4dC5cbiAgICAgICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ29udGV4dFRvVXNlLlByb3ZpZGVyLCB7XG4gICAgICAgICAgICB2YWx1ZTogb3ZlcnJpZGRlbkNvbnRleHRWYWx1ZVxuICAgICAgICAgIH0sIHJlbmRlcmVkV3JhcHBlZENvbXBvbmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVuZGVyZWRXcmFwcGVkQ29tcG9uZW50O1xuICAgICAgfSwgW0NvbnRleHRUb1VzZSwgcmVuZGVyZWRXcmFwcGVkQ29tcG9uZW50LCBvdmVycmlkZGVuQ29udGV4dFZhbHVlXSk7XG4gICAgICByZXR1cm4gcmVuZGVyZWRDaGlsZDtcbiAgICB9XG5cbiAgICBjb25zdCBfQ29ubmVjdCA9IFJlYWN0Lm1lbW8oQ29ubmVjdEZ1bmN0aW9uKTtcblxuICAgIC8vIEFkZCBhIGhhY2t5IGNhc3QgdG8gZ2V0IHRoZSByaWdodCBvdXRwdXQgdHlwZVxuICAgIGNvbnN0IENvbm5lY3QgPSBfQ29ubmVjdDtcbiAgICBDb25uZWN0LldyYXBwZWRDb21wb25lbnQgPSBXcmFwcGVkQ29tcG9uZW50O1xuICAgIENvbm5lY3QuZGlzcGxheU5hbWUgPSBDb25uZWN0RnVuY3Rpb24uZGlzcGxheU5hbWUgPSBkaXNwbGF5TmFtZTtcblxuICAgIGlmIChmb3J3YXJkUmVmKSB7XG4gICAgICBjb25zdCBfZm9yd2FyZGVkID0gUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBmb3J3YXJkQ29ubmVjdFJlZihwcm9wcywgcmVmKSB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KENvbm5lY3QsIF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgICAgICAgIHJlYWN0UmVkdXhGb3J3YXJkZWRSZWY6IHJlZlxuICAgICAgICB9KSk7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgZm9yd2FyZGVkID0gX2ZvcndhcmRlZDtcbiAgICAgIGZvcndhcmRlZC5kaXNwbGF5TmFtZSA9IGRpc3BsYXlOYW1lO1xuICAgICAgZm9yd2FyZGVkLldyYXBwZWRDb21wb25lbnQgPSBXcmFwcGVkQ29tcG9uZW50O1xuICAgICAgcmV0dXJuIGhvaXN0U3RhdGljcyhmb3J3YXJkZWQsIFdyYXBwZWRDb21wb25lbnQpO1xuICAgIH1cblxuICAgIHJldHVybiBob2lzdFN0YXRpY3MoQ29ubmVjdCwgV3JhcHBlZENvbXBvbmVudCk7XG4gIH07XG5cbiAgcmV0dXJuIHdyYXBXaXRoQ29ubmVjdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdDsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkge1xuICBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTtcbiAgdmFyIHRhcmdldCA9IHt9O1xuICB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7XG4gIHZhciBrZXksIGk7XG4gIGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAga2V5ID0gc291cmNlS2V5c1tpXTtcbiAgICBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlO1xuICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gIH1cbiAgcmV0dXJuIHRhcmdldDtcbn0iLCAiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgdmVyaWZ5UGxhaW5PYmplY3QgZnJvbSAnLi4vdXRpbHMvdmVyaWZ5UGxhaW5PYmplY3QnO1xuaW1wb3J0IHsgY3JlYXRlSW52YWxpZEFyZ0ZhY3RvcnkgfSBmcm9tICcuL2ludmFsaWRBcmdGYWN0b3J5JztcbmV4cG9ydCBmdW5jdGlvbiBkZWZhdWx0TWVyZ2VQcm9wcyhzdGF0ZVByb3BzLCBkaXNwYXRjaFByb3BzLCBvd25Qcm9wcykge1xuICAvLyBAdHMtaWdub3JlXG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgb3duUHJvcHMsIHN0YXRlUHJvcHMsIGRpc3BhdGNoUHJvcHMpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHdyYXBNZXJnZVByb3BzRnVuYyhtZXJnZVByb3BzKSB7XG4gIHJldHVybiBmdW5jdGlvbiBpbml0TWVyZ2VQcm9wc1Byb3h5KGRpc3BhdGNoLCB7XG4gICAgZGlzcGxheU5hbWUsXG4gICAgYXJlTWVyZ2VkUHJvcHNFcXVhbFxuICB9KSB7XG4gICAgbGV0IGhhc1J1bk9uY2UgPSBmYWxzZTtcbiAgICBsZXQgbWVyZ2VkUHJvcHM7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIG1lcmdlUHJvcHNQcm94eShzdGF0ZVByb3BzLCBkaXNwYXRjaFByb3BzLCBvd25Qcm9wcykge1xuICAgICAgY29uc3QgbmV4dE1lcmdlZFByb3BzID0gbWVyZ2VQcm9wcyhzdGF0ZVByb3BzLCBkaXNwYXRjaFByb3BzLCBvd25Qcm9wcyk7XG5cbiAgICAgIGlmIChoYXNSdW5PbmNlKSB7XG4gICAgICAgIGlmICghYXJlTWVyZ2VkUHJvcHNFcXVhbChuZXh0TWVyZ2VkUHJvcHMsIG1lcmdlZFByb3BzKSkgbWVyZ2VkUHJvcHMgPSBuZXh0TWVyZ2VkUHJvcHM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoYXNSdW5PbmNlID0gdHJ1ZTtcbiAgICAgICAgbWVyZ2VkUHJvcHMgPSBuZXh0TWVyZ2VkUHJvcHM7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB2ZXJpZnlQbGFpbk9iamVjdChtZXJnZWRQcm9wcywgZGlzcGxheU5hbWUsICdtZXJnZVByb3BzJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBtZXJnZWRQcm9wcztcbiAgICB9O1xuICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlUHJvcHNGYWN0b3J5KG1lcmdlUHJvcHMpIHtcbiAgcmV0dXJuICFtZXJnZVByb3BzID8gKCkgPT4gZGVmYXVsdE1lcmdlUHJvcHMgOiB0eXBlb2YgbWVyZ2VQcm9wcyA9PT0gJ2Z1bmN0aW9uJyA/IHdyYXBNZXJnZVByb3BzRnVuYyhtZXJnZVByb3BzKSA6IGNyZWF0ZUludmFsaWRBcmdGYWN0b3J5KG1lcmdlUHJvcHMsICdtZXJnZVByb3BzJyk7XG59IiwgImltcG9ydCB7IGdldEJhdGNoIH0gZnJvbSAnLi9iYXRjaCc7IC8vIGVuY2Fwc3VsYXRlcyB0aGUgc3Vic2NyaXB0aW9uIGxvZ2ljIGZvciBjb25uZWN0aW5nIGEgY29tcG9uZW50IHRvIHRoZSByZWR1eCBzdG9yZSwgYXNcbi8vIHdlbGwgYXMgbmVzdGluZyBzdWJzY3JpcHRpb25zIG9mIGRlc2NlbmRhbnQgY29tcG9uZW50cywgc28gdGhhdCB3ZSBjYW4gZW5zdXJlIHRoZVxuLy8gYW5jZXN0b3IgY29tcG9uZW50cyByZS1yZW5kZXIgYmVmb3JlIGRlc2NlbmRhbnRzXG5cbmZ1bmN0aW9uIGNyZWF0ZUxpc3RlbmVyQ29sbGVjdGlvbigpIHtcbiAgY29uc3QgYmF0Y2ggPSBnZXRCYXRjaCgpO1xuICBsZXQgZmlyc3QgPSBudWxsO1xuICBsZXQgbGFzdCA9IG51bGw7XG4gIHJldHVybiB7XG4gICAgY2xlYXIoKSB7XG4gICAgICBmaXJzdCA9IG51bGw7XG4gICAgICBsYXN0ID0gbnVsbDtcbiAgICB9LFxuXG4gICAgbm90aWZ5KCkge1xuICAgICAgYmF0Y2goKCkgPT4ge1xuICAgICAgICBsZXQgbGlzdGVuZXIgPSBmaXJzdDtcblxuICAgICAgICB3aGlsZSAobGlzdGVuZXIpIHtcbiAgICAgICAgICBsaXN0ZW5lci5jYWxsYmFjaygpO1xuICAgICAgICAgIGxpc3RlbmVyID0gbGlzdGVuZXIubmV4dDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSxcblxuICAgIGdldCgpIHtcbiAgICAgIGxldCBsaXN0ZW5lcnMgPSBbXTtcbiAgICAgIGxldCBsaXN0ZW5lciA9IGZpcnN0O1xuXG4gICAgICB3aGlsZSAobGlzdGVuZXIpIHtcbiAgICAgICAgbGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICAgICAgICBsaXN0ZW5lciA9IGxpc3RlbmVyLm5leHQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBsaXN0ZW5lcnM7XG4gICAgfSxcblxuICAgIHN1YnNjcmliZShjYWxsYmFjaykge1xuICAgICAgbGV0IGlzU3Vic2NyaWJlZCA9IHRydWU7XG4gICAgICBsZXQgbGlzdGVuZXIgPSBsYXN0ID0ge1xuICAgICAgICBjYWxsYmFjayxcbiAgICAgICAgbmV4dDogbnVsbCxcbiAgICAgICAgcHJldjogbGFzdFxuICAgICAgfTtcblxuICAgICAgaWYgKGxpc3RlbmVyLnByZXYpIHtcbiAgICAgICAgbGlzdGVuZXIucHJldi5uZXh0ID0gbGlzdGVuZXI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaXJzdCA9IGxpc3RlbmVyO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZnVuY3Rpb24gdW5zdWJzY3JpYmUoKSB7XG4gICAgICAgIGlmICghaXNTdWJzY3JpYmVkIHx8IGZpcnN0ID09PSBudWxsKSByZXR1cm47XG4gICAgICAgIGlzU3Vic2NyaWJlZCA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChsaXN0ZW5lci5uZXh0KSB7XG4gICAgICAgICAgbGlzdGVuZXIubmV4dC5wcmV2ID0gbGlzdGVuZXIucHJldjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsYXN0ID0gbGlzdGVuZXIucHJldjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsaXN0ZW5lci5wcmV2KSB7XG4gICAgICAgICAgbGlzdGVuZXIucHJldi5uZXh0ID0gbGlzdGVuZXIubmV4dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmaXJzdCA9IGxpc3RlbmVyLm5leHQ7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuXG4gIH07XG59XG5cbmNvbnN0IG51bGxMaXN0ZW5lcnMgPSB7XG4gIG5vdGlmeSgpIHt9LFxuXG4gIGdldDogKCkgPT4gW11cbn07XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3Vic2NyaXB0aW9uKHN0b3JlLCBwYXJlbnRTdWIpIHtcbiAgbGV0IHVuc3Vic2NyaWJlO1xuICBsZXQgbGlzdGVuZXJzID0gbnVsbExpc3RlbmVyczsgLy8gUmVhc29ucyB0byBrZWVwIHRoZSBzdWJzY3JpcHRpb24gYWN0aXZlXG5cbiAgbGV0IHN1YnNjcmlwdGlvbnNBbW91bnQgPSAwOyAvLyBJcyB0aGlzIHNwZWNpZmljIHN1YnNjcmlwdGlvbiBzdWJzY3JpYmVkIChvciBvbmx5IG5lc3RlZCBvbmVzPylcblxuICBsZXQgc2VsZlN1YnNjcmliZWQgPSBmYWxzZTtcblxuICBmdW5jdGlvbiBhZGROZXN0ZWRTdWIobGlzdGVuZXIpIHtcbiAgICB0cnlTdWJzY3JpYmUoKTtcbiAgICBjb25zdCBjbGVhbnVwTGlzdGVuZXIgPSBsaXN0ZW5lcnMuc3Vic2NyaWJlKGxpc3RlbmVyKTsgLy8gY2xlYW51cCBuZXN0ZWQgc3ViXG5cbiAgICBsZXQgcmVtb3ZlZCA9IGZhbHNlO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAoIXJlbW92ZWQpIHtcbiAgICAgICAgcmVtb3ZlZCA9IHRydWU7XG4gICAgICAgIGNsZWFudXBMaXN0ZW5lcigpO1xuICAgICAgICB0cnlVbnN1YnNjcmliZSgpO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBub3RpZnlOZXN0ZWRTdWJzKCkge1xuICAgIGxpc3RlbmVycy5ub3RpZnkoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZUNoYW5nZVdyYXBwZXIoKSB7XG4gICAgaWYgKHN1YnNjcmlwdGlvbi5vblN0YXRlQ2hhbmdlKSB7XG4gICAgICBzdWJzY3JpcHRpb24ub25TdGF0ZUNoYW5nZSgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGlzU3Vic2NyaWJlZCgpIHtcbiAgICByZXR1cm4gc2VsZlN1YnNjcmliZWQ7XG4gIH1cblxuICBmdW5jdGlvbiB0cnlTdWJzY3JpYmUoKSB7XG4gICAgc3Vic2NyaXB0aW9uc0Ftb3VudCsrO1xuXG4gICAgaWYgKCF1bnN1YnNjcmliZSkge1xuICAgICAgdW5zdWJzY3JpYmUgPSBwYXJlbnRTdWIgPyBwYXJlbnRTdWIuYWRkTmVzdGVkU3ViKGhhbmRsZUNoYW5nZVdyYXBwZXIpIDogc3RvcmUuc3Vic2NyaWJlKGhhbmRsZUNoYW5nZVdyYXBwZXIpO1xuICAgICAgbGlzdGVuZXJzID0gY3JlYXRlTGlzdGVuZXJDb2xsZWN0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdHJ5VW5zdWJzY3JpYmUoKSB7XG4gICAgc3Vic2NyaXB0aW9uc0Ftb3VudC0tO1xuXG4gICAgaWYgKHVuc3Vic2NyaWJlICYmIHN1YnNjcmlwdGlvbnNBbW91bnQgPT09IDApIHtcbiAgICAgIHVuc3Vic2NyaWJlKCk7XG4gICAgICB1bnN1YnNjcmliZSA9IHVuZGVmaW5lZDtcbiAgICAgIGxpc3RlbmVycy5jbGVhcigpO1xuICAgICAgbGlzdGVuZXJzID0gbnVsbExpc3RlbmVycztcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB0cnlTdWJzY3JpYmVTZWxmKCkge1xuICAgIGlmICghc2VsZlN1YnNjcmliZWQpIHtcbiAgICAgIHNlbGZTdWJzY3JpYmVkID0gdHJ1ZTtcbiAgICAgIHRyeVN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHRyeVVuc3Vic2NyaWJlU2VsZigpIHtcbiAgICBpZiAoc2VsZlN1YnNjcmliZWQpIHtcbiAgICAgIHNlbGZTdWJzY3JpYmVkID0gZmFsc2U7XG4gICAgICB0cnlVbnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHtcbiAgICBhZGROZXN0ZWRTdWIsXG4gICAgbm90aWZ5TmVzdGVkU3VicyxcbiAgICBoYW5kbGVDaGFuZ2VXcmFwcGVyLFxuICAgIGlzU3Vic2NyaWJlZCxcbiAgICB0cnlTdWJzY3JpYmU6IHRyeVN1YnNjcmliZVNlbGYsXG4gICAgdHJ5VW5zdWJzY3JpYmU6IHRyeVVuc3Vic2NyaWJlU2VsZixcbiAgICBnZXRMaXN0ZW5lcnM6ICgpID0+IGxpc3RlbmVyc1xuICB9O1xuICByZXR1cm4gc3Vic2NyaXB0aW9uO1xufSIsICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7IC8vIFJlYWN0IGN1cnJlbnRseSB0aHJvd3MgYSB3YXJuaW5nIHdoZW4gdXNpbmcgdXNlTGF5b3V0RWZmZWN0IG9uIHRoZSBzZXJ2ZXIuXG4vLyBUbyBnZXQgYXJvdW5kIGl0LCB3ZSBjYW4gY29uZGl0aW9uYWxseSB1c2VFZmZlY3Qgb24gdGhlIHNlcnZlciAobm8tb3ApIGFuZFxuLy8gdXNlTGF5b3V0RWZmZWN0IGluIHRoZSBicm93c2VyLiBXZSBuZWVkIHVzZUxheW91dEVmZmVjdCB0byBlbnN1cmUgdGhlIHN0b3JlXG4vLyBzdWJzY3JpcHRpb24gY2FsbGJhY2sgYWx3YXlzIGhhcyB0aGUgc2VsZWN0b3IgZnJvbSB0aGUgbGF0ZXN0IHJlbmRlciBjb21taXRcbi8vIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGEgc3RvcmUgdXBkYXRlIG1heSBoYXBwZW4gYmV0d2VlbiByZW5kZXIgYW5kIHRoZSBlZmZlY3QsXG4vLyB3aGljaCBtYXkgY2F1c2UgbWlzc2VkIHVwZGF0ZXM7IHdlIGFsc28gbXVzdCBlbnN1cmUgdGhlIHN0b3JlIHN1YnNjcmlwdGlvblxuLy8gaXMgY3JlYXRlZCBzeW5jaHJvbm91c2x5LCBvdGhlcndpc2UgYSBzdG9yZSB1cGRhdGUgbWF5IG9jY3VyIGJlZm9yZSB0aGVcbi8vIHN1YnNjcmlwdGlvbiBpcyBjcmVhdGVkIGFuZCBhbiBpbmNvbnNpc3RlbnQgc3RhdGUgbWF5IGJlIG9ic2VydmVkXG4vLyBNYXRjaGVzIGxvZ2ljIGluIFJlYWN0J3MgYHNoYXJlZC9FeGVjdXRpb25FbnZpcm9ubWVudGAgZmlsZVxuXG5leHBvcnQgY29uc3QgY2FuVXNlRE9NID0gISEodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50ICE9PSAndW5kZWZpbmVkJyk7XG5leHBvcnQgY29uc3QgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCA9IGNhblVzZURPTSA/IFJlYWN0LnVzZUxheW91dEVmZmVjdCA6IFJlYWN0LnVzZUVmZmVjdDsiLCAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgUmVhY3RSZWR1eENvbnRleHQgfSBmcm9tICcuL0NvbnRleHQnO1xuaW1wb3J0IHsgY3JlYXRlU3Vic2NyaXB0aW9uIH0gZnJvbSAnLi4vdXRpbHMvU3Vic2NyaXB0aW9uJztcbmltcG9ydCB7IHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QgfSBmcm9tICcuLi91dGlscy91c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0JztcblxuZnVuY3Rpb24gUHJvdmlkZXIoe1xuICBzdG9yZSxcbiAgY29udGV4dCxcbiAgY2hpbGRyZW4sXG4gIHNlcnZlclN0YXRlLFxuICBzdGFiaWxpdHlDaGVjayA9ICdvbmNlJyxcbiAgbm9vcENoZWNrID0gJ29uY2UnXG59KSB7XG4gIGNvbnN0IGNvbnRleHRWYWx1ZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IGNyZWF0ZVN1YnNjcmlwdGlvbihzdG9yZSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0b3JlLFxuICAgICAgc3Vic2NyaXB0aW9uLFxuICAgICAgZ2V0U2VydmVyU3RhdGU6IHNlcnZlclN0YXRlID8gKCkgPT4gc2VydmVyU3RhdGUgOiB1bmRlZmluZWQsXG4gICAgICBzdGFiaWxpdHlDaGVjayxcbiAgICAgIG5vb3BDaGVja1xuICAgIH07XG4gIH0sIFtzdG9yZSwgc2VydmVyU3RhdGUsIHN0YWJpbGl0eUNoZWNrLCBub29wQ2hlY2tdKTtcbiAgY29uc3QgcHJldmlvdXNTdGF0ZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gc3RvcmUuZ2V0U3RhdGUoKSwgW3N0b3JlXSk7XG4gIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIHN1YnNjcmlwdGlvblxuICAgIH0gPSBjb250ZXh0VmFsdWU7XG4gICAgc3Vic2NyaXB0aW9uLm9uU3RhdGVDaGFuZ2UgPSBzdWJzY3JpcHRpb24ubm90aWZ5TmVzdGVkU3VicztcbiAgICBzdWJzY3JpcHRpb24udHJ5U3Vic2NyaWJlKCk7XG5cbiAgICBpZiAocHJldmlvdXNTdGF0ZSAhPT0gc3RvcmUuZ2V0U3RhdGUoKSkge1xuICAgICAgc3Vic2NyaXB0aW9uLm5vdGlmeU5lc3RlZFN1YnMoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgc3Vic2NyaXB0aW9uLnRyeVVuc3Vic2NyaWJlKCk7XG4gICAgICBzdWJzY3JpcHRpb24ub25TdGF0ZUNoYW5nZSA9IHVuZGVmaW5lZDtcbiAgICB9O1xuICB9LCBbY29udGV4dFZhbHVlLCBwcmV2aW91c1N0YXRlXSk7XG4gIGNvbnN0IENvbnRleHQgPSBjb250ZXh0IHx8IFJlYWN0UmVkdXhDb250ZXh0OyAvLyBAdHMtaWdub3JlICdBbnlBY3Rpb24nIGlzIGFzc2lnbmFibGUgdG8gdGhlIGNvbnN0cmFpbnQgb2YgdHlwZSAnQScsIGJ1dCAnQScgY291bGQgYmUgaW5zdGFudGlhdGVkIHdpdGggYSBkaWZmZXJlbnQgc3VidHlwZVxuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IGNvbnRleHRWYWx1ZVxuICB9LCBjaGlsZHJlbik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFByb3ZpZGVyOyIsICJpbXBvcnQgeyBSZWFjdFJlZHV4Q29udGV4dCB9IGZyb20gJy4uL2NvbXBvbmVudHMvQ29udGV4dCc7XG5pbXBvcnQgeyB1c2VSZWR1eENvbnRleHQgYXMgdXNlRGVmYXVsdFJlZHV4Q29udGV4dCwgY3JlYXRlUmVkdXhDb250ZXh0SG9vayB9IGZyb20gJy4vdXNlUmVkdXhDb250ZXh0Jztcbi8qKlxyXG4gKiBIb29rIGZhY3RvcnksIHdoaWNoIGNyZWF0ZXMgYSBgdXNlU3RvcmVgIGhvb2sgYm91bmQgdG8gYSBnaXZlbiBjb250ZXh0LlxyXG4gKlxyXG4gKiBAcGFyYW0ge1JlYWN0LkNvbnRleHR9IFtjb250ZXh0PVJlYWN0UmVkdXhDb250ZXh0XSBDb250ZXh0IHBhc3NlZCB0byB5b3VyIGA8UHJvdmlkZXI+YC5cclxuICogQHJldHVybnMge0Z1bmN0aW9ufSBBIGB1c2VTdG9yZWAgaG9vayBib3VuZCB0byB0aGUgc3BlY2lmaWVkIGNvbnRleHQuXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3RvcmVIb29rKGNvbnRleHQgPSBSZWFjdFJlZHV4Q29udGV4dCkge1xuICBjb25zdCB1c2VSZWR1eENvbnRleHQgPSAvLyBAdHMtaWdub3JlXG4gIGNvbnRleHQgPT09IFJlYWN0UmVkdXhDb250ZXh0ID8gdXNlRGVmYXVsdFJlZHV4Q29udGV4dCA6IC8vIEB0cy1pZ25vcmVcbiAgY3JlYXRlUmVkdXhDb250ZXh0SG9vayhjb250ZXh0KTtcbiAgcmV0dXJuIGZ1bmN0aW9uIHVzZVN0b3JlKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHN0b3JlXG4gICAgfSA9IHVzZVJlZHV4Q29udGV4dCgpOyAvLyBAdHMtaWdub3JlXG5cbiAgICByZXR1cm4gc3RvcmU7XG4gIH07XG59XG4vKipcclxuICogQSBob29rIHRvIGFjY2VzcyB0aGUgcmVkdXggc3RvcmUuXHJcbiAqXHJcbiAqIEByZXR1cm5zIHthbnl9IHRoZSByZWR1eCBzdG9yZVxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKlxyXG4gKiBpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXHJcbiAqIGltcG9ydCB7IHVzZVN0b3JlIH0gZnJvbSAncmVhY3QtcmVkdXgnXHJcbiAqXHJcbiAqIGV4cG9ydCBjb25zdCBFeGFtcGxlQ29tcG9uZW50ID0gKCkgPT4ge1xyXG4gKiAgIGNvbnN0IHN0b3JlID0gdXNlU3RvcmUoKVxyXG4gKiAgIHJldHVybiA8ZGl2PntzdG9yZS5nZXRTdGF0ZSgpfTwvZGl2PlxyXG4gKiB9XHJcbiAqL1xuXG5leHBvcnQgY29uc3QgdXNlU3RvcmUgPSAvKiNfX1BVUkVfXyovY3JlYXRlU3RvcmVIb29rKCk7IiwgImltcG9ydCB7IFJlYWN0UmVkdXhDb250ZXh0IH0gZnJvbSAnLi4vY29tcG9uZW50cy9Db250ZXh0JztcbmltcG9ydCB7IHVzZVN0b3JlIGFzIHVzZURlZmF1bHRTdG9yZSwgY3JlYXRlU3RvcmVIb29rIH0gZnJvbSAnLi91c2VTdG9yZSc7XG4vKipcclxuICogSG9vayBmYWN0b3J5LCB3aGljaCBjcmVhdGVzIGEgYHVzZURpc3BhdGNoYCBob29rIGJvdW5kIHRvIGEgZ2l2ZW4gY29udGV4dC5cclxuICpcclxuICogQHBhcmFtIHtSZWFjdC5Db250ZXh0fSBbY29udGV4dD1SZWFjdFJlZHV4Q29udGV4dF0gQ29udGV4dCBwYXNzZWQgdG8geW91ciBgPFByb3ZpZGVyPmAuXHJcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gQSBgdXNlRGlzcGF0Y2hgIGhvb2sgYm91bmQgdG8gdGhlIHNwZWNpZmllZCBjb250ZXh0LlxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZURpc3BhdGNoSG9vayhjb250ZXh0ID0gUmVhY3RSZWR1eENvbnRleHQpIHtcbiAgY29uc3QgdXNlU3RvcmUgPSAvLyBAdHMtaWdub3JlXG4gIGNvbnRleHQgPT09IFJlYWN0UmVkdXhDb250ZXh0ID8gdXNlRGVmYXVsdFN0b3JlIDogY3JlYXRlU3RvcmVIb29rKGNvbnRleHQpO1xuICByZXR1cm4gZnVuY3Rpb24gdXNlRGlzcGF0Y2goKSB7XG4gICAgY29uc3Qgc3RvcmUgPSB1c2VTdG9yZSgpOyAvLyBAdHMtaWdub3JlXG5cbiAgICByZXR1cm4gc3RvcmUuZGlzcGF0Y2g7XG4gIH07XG59XG4vKipcclxuICogQSBob29rIHRvIGFjY2VzcyB0aGUgcmVkdXggYGRpc3BhdGNoYCBmdW5jdGlvbi5cclxuICpcclxuICogQHJldHVybnMge2FueXxmdW5jdGlvbn0gcmVkdXggc3RvcmUncyBgZGlzcGF0Y2hgIGZ1bmN0aW9uXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqXHJcbiAqIGltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0J1xyXG4gKiBpbXBvcnQgeyB1c2VEaXNwYXRjaCB9IGZyb20gJ3JlYWN0LXJlZHV4J1xyXG4gKlxyXG4gKiBleHBvcnQgY29uc3QgQ291bnRlckNvbXBvbmVudCA9ICh7IHZhbHVlIH0pID0+IHtcclxuICogICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKClcclxuICogICBjb25zdCBpbmNyZWFzZUNvdW50ZXIgPSB1c2VDYWxsYmFjaygoKSA9PiBkaXNwYXRjaCh7IHR5cGU6ICdpbmNyZWFzZS1jb3VudGVyJyB9KSwgW10pXHJcbiAqICAgcmV0dXJuIChcclxuICogICAgIDxkaXY+XHJcbiAqICAgICAgIDxzcGFuPnt2YWx1ZX08L3NwYW4+XHJcbiAqICAgICAgIDxidXR0b24gb25DbGljaz17aW5jcmVhc2VDb3VudGVyfT5JbmNyZWFzZSBjb3VudGVyPC9idXR0b24+XHJcbiAqICAgICA8L2Rpdj5cclxuICogICApXHJcbiAqIH1cclxuICovXG5cbmV4cG9ydCBjb25zdCB1c2VEaXNwYXRjaCA9IC8qI19fUFVSRV9fKi9jcmVhdGVEaXNwYXRjaEhvb2soKTsiLCAiaW1wb3J0IHsgVHlwZWRVc2VTZWxlY3Rvckhvb2ssIHVzZVNlbGVjdG9yLCB1c2VEaXNwYXRjaCB9IGZyb20gXCJyZWFjdC1yZWR1eFwiO1xuaW1wb3J0IHR5cGUgeyBSb290U3RhdGUsIEFwcERpc3BhdGNoIH0gZnJvbSBcIi4vc3RvcmVcIjtcblxuZXhwb3J0IGNvbnN0IHVzZUFwcERpc3BhdGNoID0gKCkgPT4gdXNlRGlzcGF0Y2g8QXBwRGlzcGF0Y2g+KCk7XG5leHBvcnQgY29uc3QgdXNlQXBwU2VsZWN0b3I6IFR5cGVkVXNlU2VsZWN0b3JIb29rPFJvb3RTdGF0ZT4gPSB1c2VTZWxlY3RvcjtcbiIsICJjb25zdCBlcnJvcnMgPSB7XG5cdDA6IFwiSWxsZWdhbCBzdGF0ZVwiLFxuXHQxOiBcIkltbWVyIGRyYWZ0cyBjYW5ub3QgaGF2ZSBjb21wdXRlZCBwcm9wZXJ0aWVzXCIsXG5cdDI6IFwiVGhpcyBvYmplY3QgaGFzIGJlZW4gZnJvemVuIGFuZCBzaG91bGQgbm90IGJlIG11dGF0ZWRcIixcblx0MyhkYXRhOiBhbnkpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0XCJDYW5ub3QgdXNlIGEgcHJveHkgdGhhdCBoYXMgYmVlbiByZXZva2VkLiBEaWQgeW91IHBhc3MgYW4gb2JqZWN0IGZyb20gaW5zaWRlIGFuIGltbWVyIGZ1bmN0aW9uIHRvIGFuIGFzeW5jIHByb2Nlc3M/IFwiICtcblx0XHRcdGRhdGFcblx0XHQpXG5cdH0sXG5cdDQ6IFwiQW4gaW1tZXIgcHJvZHVjZXIgcmV0dXJuZWQgYSBuZXcgdmFsdWUgKmFuZCogbW9kaWZpZWQgaXRzIGRyYWZ0LiBFaXRoZXIgcmV0dXJuIGEgbmV3IHZhbHVlICpvciogbW9kaWZ5IHRoZSBkcmFmdC5cIixcblx0NTogXCJJbW1lciBmb3JiaWRzIGNpcmN1bGFyIHJlZmVyZW5jZXNcIixcblx0NjogXCJUaGUgZmlyc3Qgb3Igc2Vjb25kIGFyZ3VtZW50IHRvIGBwcm9kdWNlYCBtdXN0IGJlIGEgZnVuY3Rpb25cIixcblx0NzogXCJUaGUgdGhpcmQgYXJndW1lbnQgdG8gYHByb2R1Y2VgIG11c3QgYmUgYSBmdW5jdGlvbiBvciB1bmRlZmluZWRcIixcblx0ODogXCJGaXJzdCBhcmd1bWVudCB0byBgY3JlYXRlRHJhZnRgIG11c3QgYmUgYSBwbGFpbiBvYmplY3QsIGFuIGFycmF5LCBvciBhbiBpbW1lcmFibGUgb2JqZWN0XCIsXG5cdDk6IFwiRmlyc3QgYXJndW1lbnQgdG8gYGZpbmlzaERyYWZ0YCBtdXN0IGJlIGEgZHJhZnQgcmV0dXJuZWQgYnkgYGNyZWF0ZURyYWZ0YFwiLFxuXHQxMDogXCJUaGUgZ2l2ZW4gZHJhZnQgaXMgYWxyZWFkeSBmaW5hbGl6ZWRcIixcblx0MTE6IFwiT2JqZWN0LmRlZmluZVByb3BlcnR5KCkgY2Fubm90IGJlIHVzZWQgb24gYW4gSW1tZXIgZHJhZnRcIixcblx0MTI6IFwiT2JqZWN0LnNldFByb3RvdHlwZU9mKCkgY2Fubm90IGJlIHVzZWQgb24gYW4gSW1tZXIgZHJhZnRcIixcblx0MTM6IFwiSW1tZXIgb25seSBzdXBwb3J0cyBkZWxldGluZyBhcnJheSBpbmRpY2VzXCIsXG5cdDE0OiBcIkltbWVyIG9ubHkgc3VwcG9ydHMgc2V0dGluZyBhcnJheSBpbmRpY2VzIGFuZCB0aGUgJ2xlbmd0aCcgcHJvcGVydHlcIixcblx0MTUocGF0aDogc3RyaW5nKSB7XG5cdFx0cmV0dXJuIFwiQ2Fubm90IGFwcGx5IHBhdGNoLCBwYXRoIGRvZXNuJ3QgcmVzb2x2ZTogXCIgKyBwYXRoXG5cdH0sXG5cdDE2OiAnU2V0cyBjYW5ub3QgaGF2ZSBcInJlcGxhY2VcIiBwYXRjaGVzLicsXG5cdDE3KG9wOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gXCJVbnN1cHBvcnRlZCBwYXRjaCBvcGVyYXRpb246IFwiICsgb3Bcblx0fSxcblx0MTgocGx1Z2luOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gYFRoZSBwbHVnaW4gZm9yICcke3BsdWdpbn0nIGhhcyBub3QgYmVlbiBsb2FkZWQgaW50byBJbW1lci4gVG8gZW5hYmxlIHRoZSBwbHVnaW4sIGltcG9ydCBhbmQgY2FsbCBcXGBlbmFibGUke3BsdWdpbn0oKVxcYCB3aGVuIGluaXRpYWxpemluZyB5b3VyIGFwcGxpY2F0aW9uLmBcblx0fSxcblx0MjA6IFwiQ2Fubm90IHVzZSBwcm94aWVzIGlmIFByb3h5LCBQcm94eS5yZXZvY2FibGUgb3IgUmVmbGVjdCBhcmUgbm90IGF2YWlsYWJsZVwiLFxuXHQyMSh0aGluZzogc3RyaW5nKSB7XG5cdFx0cmV0dXJuIGBwcm9kdWNlIGNhbiBvbmx5IGJlIGNhbGxlZCBvbiB0aGluZ3MgdGhhdCBhcmUgZHJhZnRhYmxlOiBwbGFpbiBvYmplY3RzLCBhcnJheXMsIE1hcCwgU2V0IG9yIGNsYXNzZXMgdGhhdCBhcmUgbWFya2VkIHdpdGggJ1tpbW1lcmFibGVdOiB0cnVlJy4gR290ICcke3RoaW5nfSdgXG5cdH0sXG5cdDIyKHRoaW5nOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gYCdjdXJyZW50JyBleHBlY3RzIGEgZHJhZnQsIGdvdDogJHt0aGluZ31gXG5cdH0sXG5cdDIzKHRoaW5nOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gYCdvcmlnaW5hbCcgZXhwZWN0cyBhIGRyYWZ0LCBnb3Q6ICR7dGhpbmd9YFxuXHR9LFxuXHQyNDogXCJQYXRjaGluZyByZXNlcnZlZCBhdHRyaWJ1dGVzIGxpa2UgX19wcm90b19fLCBwcm90b3R5cGUgYW5kIGNvbnN0cnVjdG9yIGlzIG5vdCBhbGxvd2VkXCJcbn0gYXMgY29uc3RcblxuZXhwb3J0IGZ1bmN0aW9uIGRpZShlcnJvcjoga2V5b2YgdHlwZW9mIGVycm9ycywgLi4uYXJnczogYW55W10pOiBuZXZlciB7XG5cdGlmIChfX0RFVl9fKSB7XG5cdFx0Y29uc3QgZSA9IGVycm9yc1tlcnJvcl1cblx0XHRjb25zdCBtc2cgPSAhZVxuXHRcdFx0PyBcInVua25vd24gZXJyb3IgbnI6IFwiICsgZXJyb3Jcblx0XHRcdDogdHlwZW9mIGUgPT09IFwiZnVuY3Rpb25cIlxuXHRcdFx0PyBlLmFwcGx5KG51bGwsIGFyZ3MgYXMgYW55KVxuXHRcdFx0OiBlXG5cdFx0dGhyb3cgbmV3IEVycm9yKGBbSW1tZXJdICR7bXNnfWApXG5cdH1cblx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdGBbSW1tZXJdIG1pbmlmaWVkIGVycm9yIG5yOiAke2Vycm9yfSR7XG5cdFx0XHRhcmdzLmxlbmd0aCA/IFwiIFwiICsgYXJncy5tYXAocyA9PiBgJyR7c30nYCkuam9pbihcIixcIikgOiBcIlwiXG5cdFx0fS4gRmluZCB0aGUgZnVsbCBlcnJvciBhdDogaHR0cHM6Ly9iaXQubHkvM2NYRUtXZmBcblx0KVxufVxuIiwgImltcG9ydCB7XG5cdERSQUZUX1NUQVRFLFxuXHREUkFGVEFCTEUsXG5cdGhhc1NldCxcblx0T2JqZWN0aXNoLFxuXHREcmFmdGVkLFxuXHRBbnlPYmplY3QsXG5cdEFueU1hcCxcblx0QW55U2V0LFxuXHRJbW1lclN0YXRlLFxuXHRoYXNNYXAsXG5cdEFyY2h0eXBlLFxuXHRkaWVcbn0gZnJvbSBcIi4uL2ludGVybmFsXCJcblxuLyoqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgYW4gSW1tZXIgZHJhZnQgKi9cbi8qI19fUFVSRV9fKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0RyYWZ0KHZhbHVlOiBhbnkpOiBib29sZWFuIHtcblx0cmV0dXJuICEhdmFsdWUgJiYgISF2YWx1ZVtEUkFGVF9TVEFURV1cbn1cblxuLyoqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gdmFsdWUgY2FuIGJlIGRyYWZ0ZWQgYnkgSW1tZXIgKi9cbi8qI19fUFVSRV9fKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0RyYWZ0YWJsZSh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG5cdGlmICghdmFsdWUpIHJldHVybiBmYWxzZVxuXHRyZXR1cm4gKFxuXHRcdGlzUGxhaW5PYmplY3QodmFsdWUpIHx8XG5cdFx0QXJyYXkuaXNBcnJheSh2YWx1ZSkgfHxcblx0XHQhIXZhbHVlW0RSQUZUQUJMRV0gfHxcblx0XHQhIXZhbHVlLmNvbnN0cnVjdG9yPy5bRFJBRlRBQkxFXSB8fFxuXHRcdGlzTWFwKHZhbHVlKSB8fFxuXHRcdGlzU2V0KHZhbHVlKVxuXHQpXG59XG5cbmNvbnN0IG9iamVjdEN0b3JTdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yLnRvU3RyaW5nKClcbi8qI19fUFVSRV9fKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlOiBhbnkpOiBib29sZWFuIHtcblx0aWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIpIHJldHVybiBmYWxzZVxuXHRjb25zdCBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSlcblx0aWYgKHByb3RvID09PSBudWxsKSB7XG5cdFx0cmV0dXJuIHRydWVcblx0fVxuXHRjb25zdCBDdG9yID1cblx0XHRPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChwcm90bywgXCJjb25zdHJ1Y3RvclwiKSAmJiBwcm90by5jb25zdHJ1Y3RvclxuXG5cdGlmIChDdG9yID09PSBPYmplY3QpIHJldHVybiB0cnVlXG5cblx0cmV0dXJuIChcblx0XHR0eXBlb2YgQ3RvciA9PSBcImZ1bmN0aW9uXCIgJiZcblx0XHRGdW5jdGlvbi50b1N0cmluZy5jYWxsKEN0b3IpID09PSBvYmplY3RDdG9yU3RyaW5nXG5cdClcbn1cblxuLyoqIEdldCB0aGUgdW5kZXJseWluZyBvYmplY3QgdGhhdCBpcyByZXByZXNlbnRlZCBieSB0aGUgZ2l2ZW4gZHJhZnQgKi9cbi8qI19fUFVSRV9fKi9cbmV4cG9ydCBmdW5jdGlvbiBvcmlnaW5hbDxUPih2YWx1ZTogVCk6IFQgfCB1bmRlZmluZWRcbmV4cG9ydCBmdW5jdGlvbiBvcmlnaW5hbCh2YWx1ZTogRHJhZnRlZDxhbnk+KTogYW55IHtcblx0aWYgKCFpc0RyYWZ0KHZhbHVlKSkgZGllKDIzLCB2YWx1ZSlcblx0cmV0dXJuIHZhbHVlW0RSQUZUX1NUQVRFXS5iYXNlX1xufVxuXG4vKiNfX1BVUkVfXyovXG5leHBvcnQgY29uc3Qgb3duS2V5czogKHRhcmdldDogQW55T2JqZWN0KSA9PiBQcm9wZXJ0eUtleVtdID1cblx0dHlwZW9mIFJlZmxlY3QgIT09IFwidW5kZWZpbmVkXCIgJiYgUmVmbGVjdC5vd25LZXlzXG5cdFx0PyBSZWZsZWN0Lm93bktleXNcblx0XHQ6IHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzICE9PSBcInVuZGVmaW5lZFwiXG5cdFx0PyBvYmogPT5cblx0XHRcdFx0T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqKS5jb25jYXQoXG5cdFx0XHRcdFx0T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmopIGFzIGFueVxuXHRcdFx0XHQpXG5cdFx0OiAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc1xuXG5leHBvcnQgY29uc3QgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA9XG5cdE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIHx8XG5cdGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnModGFyZ2V0OiBhbnkpIHtcblx0XHQvLyBQb2x5ZmlsbCBuZWVkZWQgZm9yIEhlcm1lcyBhbmQgSUUsIHNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svaGVybWVzL2lzc3Vlcy8yNzRcblx0XHRjb25zdCByZXM6IGFueSA9IHt9XG5cdFx0b3duS2V5cyh0YXJnZXQpLmZvckVhY2goa2V5ID0+IHtcblx0XHRcdHJlc1trZXldID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSlcblx0XHR9KVxuXHRcdHJldHVybiByZXNcblx0fVxuXG5leHBvcnQgZnVuY3Rpb24gZWFjaDxUIGV4dGVuZHMgT2JqZWN0aXNoPihcblx0b2JqOiBULFxuXHRpdGVyOiAoa2V5OiBzdHJpbmcgfCBudW1iZXIsIHZhbHVlOiBhbnksIHNvdXJjZTogVCkgPT4gdm9pZCxcblx0ZW51bWVyYWJsZU9ubHk/OiBib29sZWFuXG4pOiB2b2lkXG5leHBvcnQgZnVuY3Rpb24gZWFjaChvYmo6IGFueSwgaXRlcjogYW55LCBlbnVtZXJhYmxlT25seSA9IGZhbHNlKSB7XG5cdGlmIChnZXRBcmNodHlwZShvYmopID09PSBBcmNodHlwZS5PYmplY3QpIHtcblx0XHQ7KGVudW1lcmFibGVPbmx5ID8gT2JqZWN0LmtleXMgOiBvd25LZXlzKShvYmopLmZvckVhY2goa2V5ID0+IHtcblx0XHRcdGlmICghZW51bWVyYWJsZU9ubHkgfHwgdHlwZW9mIGtleSAhPT0gXCJzeW1ib2xcIikgaXRlcihrZXksIG9ialtrZXldLCBvYmopXG5cdFx0fSlcblx0fSBlbHNlIHtcblx0XHRvYmouZm9yRWFjaCgoZW50cnk6IGFueSwgaW5kZXg6IGFueSkgPT4gaXRlcihpbmRleCwgZW50cnksIG9iaikpXG5cdH1cbn1cblxuLyojX19QVVJFX18qL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFyY2h0eXBlKHRoaW5nOiBhbnkpOiBBcmNodHlwZSB7XG5cdC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cdGNvbnN0IHN0YXRlOiB1bmRlZmluZWQgfCBJbW1lclN0YXRlID0gdGhpbmdbRFJBRlRfU1RBVEVdXG5cdHJldHVybiBzdGF0ZVxuXHRcdD8gc3RhdGUudHlwZV8gPiAzXG5cdFx0XHQ/IHN0YXRlLnR5cGVfIC0gNCAvLyBjYXVzZSBPYmplY3QgYW5kIEFycmF5IG1hcCBiYWNrIGZyb20gNCBhbmQgNVxuXHRcdFx0OiAoc3RhdGUudHlwZV8gYXMgYW55KSAvLyBvdGhlcnMgYXJlIHRoZSBzYW1lXG5cdFx0OiBBcnJheS5pc0FycmF5KHRoaW5nKVxuXHRcdD8gQXJjaHR5cGUuQXJyYXlcblx0XHQ6IGlzTWFwKHRoaW5nKVxuXHRcdD8gQXJjaHR5cGUuTWFwXG5cdFx0OiBpc1NldCh0aGluZylcblx0XHQ/IEFyY2h0eXBlLlNldFxuXHRcdDogQXJjaHR5cGUuT2JqZWN0XG59XG5cbi8qI19fUFVSRV9fKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXModGhpbmc6IGFueSwgcHJvcDogUHJvcGVydHlLZXkpOiBib29sZWFuIHtcblx0cmV0dXJuIGdldEFyY2h0eXBlKHRoaW5nKSA9PT0gQXJjaHR5cGUuTWFwXG5cdFx0PyB0aGluZy5oYXMocHJvcClcblx0XHQ6IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGluZywgcHJvcClcbn1cblxuLyojX19QVVJFX18qL1xuZXhwb3J0IGZ1bmN0aW9uIGdldCh0aGluZzogQW55TWFwIHwgQW55T2JqZWN0LCBwcm9wOiBQcm9wZXJ0eUtleSk6IGFueSB7XG5cdC8vIEB0cy1pZ25vcmVcblx0cmV0dXJuIGdldEFyY2h0eXBlKHRoaW5nKSA9PT0gQXJjaHR5cGUuTWFwID8gdGhpbmcuZ2V0KHByb3ApIDogdGhpbmdbcHJvcF1cbn1cblxuLyojX19QVVJFX18qL1xuZXhwb3J0IGZ1bmN0aW9uIHNldCh0aGluZzogYW55LCBwcm9wT3JPbGRWYWx1ZTogUHJvcGVydHlLZXksIHZhbHVlOiBhbnkpIHtcblx0Y29uc3QgdCA9IGdldEFyY2h0eXBlKHRoaW5nKVxuXHRpZiAodCA9PT0gQXJjaHR5cGUuTWFwKSB0aGluZy5zZXQocHJvcE9yT2xkVmFsdWUsIHZhbHVlKVxuXHRlbHNlIGlmICh0ID09PSBBcmNodHlwZS5TZXQpIHtcblx0XHR0aGluZy5hZGQodmFsdWUpXG5cdH0gZWxzZSB0aGluZ1twcm9wT3JPbGRWYWx1ZV0gPSB2YWx1ZVxufVxuXG4vKiNfX1BVUkVfXyovXG5leHBvcnQgZnVuY3Rpb24gaXMoeDogYW55LCB5OiBhbnkpOiBib29sZWFuIHtcblx0Ly8gRnJvbTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2ZianMvYmxvYi9jNjk5MDRhNTExYjkwMDI2NjkzNTE2ODIyMzA2M2RkODc3MmRmYzQwL3BhY2thZ2VzL2ZianMvc3JjL2NvcmUvc2hhbGxvd0VxdWFsLmpzXG5cdGlmICh4ID09PSB5KSB7XG5cdFx0cmV0dXJuIHggIT09IDAgfHwgMSAvIHggPT09IDEgLyB5XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHggIT09IHggJiYgeSAhPT0geVxuXHR9XG59XG5cbi8qI19fUFVSRV9fKi9cbmV4cG9ydCBmdW5jdGlvbiBpc01hcCh0YXJnZXQ6IGFueSk6IHRhcmdldCBpcyBBbnlNYXAge1xuXHRyZXR1cm4gaGFzTWFwICYmIHRhcmdldCBpbnN0YW5jZW9mIE1hcFxufVxuXG4vKiNfX1BVUkVfXyovXG5leHBvcnQgZnVuY3Rpb24gaXNTZXQodGFyZ2V0OiBhbnkpOiB0YXJnZXQgaXMgQW55U2V0IHtcblx0cmV0dXJuIGhhc1NldCAmJiB0YXJnZXQgaW5zdGFuY2VvZiBTZXRcbn1cbi8qI19fUFVSRV9fKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXRlc3Qoc3RhdGU6IEltbWVyU3RhdGUpOiBhbnkge1xuXHRyZXR1cm4gc3RhdGUuY29weV8gfHwgc3RhdGUuYmFzZV9cbn1cblxuLyojX19QVVJFX18qL1xuZXhwb3J0IGZ1bmN0aW9uIHNoYWxsb3dDb3B5KGJhc2U6IGFueSkge1xuXHRpZiAoQXJyYXkuaXNBcnJheShiYXNlKSkgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGJhc2UpXG5cdGNvbnN0IGRlc2NyaXB0b3JzID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhiYXNlKVxuXHRkZWxldGUgZGVzY3JpcHRvcnNbRFJBRlRfU1RBVEUgYXMgYW55XVxuXHRsZXQga2V5cyA9IG93bktleXMoZGVzY3JpcHRvcnMpXG5cdGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuXHRcdGNvbnN0IGtleTogYW55ID0ga2V5c1tpXVxuXHRcdGNvbnN0IGRlc2MgPSBkZXNjcmlwdG9yc1trZXldXG5cdFx0aWYgKGRlc2Mud3JpdGFibGUgPT09IGZhbHNlKSB7XG5cdFx0XHRkZXNjLndyaXRhYmxlID0gdHJ1ZVxuXHRcdFx0ZGVzYy5jb25maWd1cmFibGUgPSB0cnVlXG5cdFx0fVxuXHRcdC8vIGxpa2Ugb2JqZWN0LmFzc2lnbiwgd2Ugd2lsbCByZWFkIGFueSBfb3duXywgZ2V0L3NldCBhY2Nlc3NvcnMuIFRoaXMgaGVscHMgaW4gZGVhbGluZ1xuXHRcdC8vIHdpdGggbGlicmFyaWVzIHRoYXQgdHJhcCB2YWx1ZXMsIGxpa2UgbW9ieCBvciB2dWVcblx0XHQvLyB1bmxpa2Ugb2JqZWN0LmFzc2lnbiwgbm9uLWVudW1lcmFibGVzIHdpbGwgYmUgY29waWVkIGFzIHdlbGxcblx0XHRpZiAoZGVzYy5nZXQgfHwgZGVzYy5zZXQpXG5cdFx0XHRkZXNjcmlwdG9yc1trZXldID0ge1xuXHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdHdyaXRhYmxlOiB0cnVlLCAvLyBjb3VsZCBsaXZlIHdpdGggISFkZXNjLnNldCBhcyB3ZWxsIGhlcmUuLi5cblx0XHRcdFx0ZW51bWVyYWJsZTogZGVzYy5lbnVtZXJhYmxlLFxuXHRcdFx0XHR2YWx1ZTogYmFzZVtrZXldXG5cdFx0XHR9XG5cdH1cblx0cmV0dXJuIE9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKGJhc2UpLCBkZXNjcmlwdG9ycylcbn1cblxuLyoqXG4gKiBGcmVlemVzIGRyYWZ0YWJsZSBvYmplY3RzLiBSZXR1cm5zIHRoZSBvcmlnaW5hbCBvYmplY3QuXG4gKiBCeSBkZWZhdWx0IGZyZWV6ZXMgc2hhbGxvd2x5LCBidXQgaWYgdGhlIHNlY29uZCBhcmd1bWVudCBpcyBgdHJ1ZWAgaXQgd2lsbCBmcmVlemUgcmVjdXJzaXZlbHkuXG4gKlxuICogQHBhcmFtIG9ialxuICogQHBhcmFtIGRlZXBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZyZWV6ZTxUPihvYmo6IFQsIGRlZXA/OiBib29sZWFuKTogVFxuZXhwb3J0IGZ1bmN0aW9uIGZyZWV6ZTxUPihvYmo6IGFueSwgZGVlcDogYm9vbGVhbiA9IGZhbHNlKTogVCB7XG5cdGlmIChpc0Zyb3plbihvYmopIHx8IGlzRHJhZnQob2JqKSB8fCAhaXNEcmFmdGFibGUob2JqKSkgcmV0dXJuIG9ialxuXHRpZiAoZ2V0QXJjaHR5cGUob2JqKSA+IDEgLyogTWFwIG9yIFNldCAqLykge1xuXHRcdG9iai5zZXQgPSBvYmouYWRkID0gb2JqLmNsZWFyID0gb2JqLmRlbGV0ZSA9IGRvbnRNdXRhdGVGcm96ZW5Db2xsZWN0aW9ucyBhcyBhbnlcblx0fVxuXHRPYmplY3QuZnJlZXplKG9iailcblx0aWYgKGRlZXApIGVhY2gob2JqLCAoa2V5LCB2YWx1ZSkgPT4gZnJlZXplKHZhbHVlLCB0cnVlKSwgdHJ1ZSlcblx0cmV0dXJuIG9ialxufVxuXG5mdW5jdGlvbiBkb250TXV0YXRlRnJvemVuQ29sbGVjdGlvbnMoKSB7XG5cdGRpZSgyKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNGcm96ZW4ob2JqOiBhbnkpOiBib29sZWFuIHtcblx0aWYgKG9iaiA9PSBudWxsIHx8IHR5cGVvZiBvYmogIT09IFwib2JqZWN0XCIpIHJldHVybiB0cnVlXG5cdC8vIFNlZSAjNjAwLCBJRSBkaWVzIG9uIG5vbi1vYmplY3RzIGluIE9iamVjdC5pc0Zyb3plblxuXHRyZXR1cm4gT2JqZWN0LmlzRnJvemVuKG9iailcbn1cbiIsICJpbXBvcnQge1xuXHRJbW1lclN0YXRlLFxuXHRQYXRjaCxcblx0SW1tZXJTY29wZSxcblx0RHJhZnRlZCxcblx0QW55T2JqZWN0LFxuXHRJbW1lckJhc2VTdGF0ZSxcblx0QW55TWFwLFxuXHRBbnlTZXQsXG5cdFByb3h5VHlwZSxcblx0ZGllXG59IGZyb20gXCIuLi9pbnRlcm5hbFwiXG5cbi8qKiBQbHVnaW4gdXRpbGl0aWVzICovXG5jb25zdCBwbHVnaW5zOiB7XG5cdFBhdGNoZXM/OiB7XG5cdFx0Z2VuZXJhdGVQYXRjaGVzXyhcblx0XHRcdHN0YXRlOiBJbW1lclN0YXRlLFxuXHRcdFx0YmFzZVBhdGg6IFBhdGNoUGF0aCxcblx0XHRcdHBhdGNoZXM6IFBhdGNoW10sXG5cdFx0XHRpbnZlcnNlUGF0Y2hlczogUGF0Y2hbXVxuXHRcdCk6IHZvaWRcblx0XHRnZW5lcmF0ZVJlcGxhY2VtZW50UGF0Y2hlc18oXG5cdFx0XHRiYXNlOiBhbnksXG5cdFx0XHRyZXBsYWNlbWVudDogYW55LFxuXHRcdFx0cGF0Y2hlczogUGF0Y2hbXSxcblx0XHRcdGludmVyc2VQYXRjaGVzOiBQYXRjaFtdXG5cdFx0KTogdm9pZFxuXHRcdGFwcGx5UGF0Y2hlc188VD4oZHJhZnQ6IFQsIHBhdGNoZXM6IFBhdGNoW10pOiBUXG5cdH1cblx0RVM1Pzoge1xuXHRcdHdpbGxGaW5hbGl6ZUVTNV8oc2NvcGU6IEltbWVyU2NvcGUsIHJlc3VsdDogYW55LCBpc1JlcGxhY2VkOiBib29sZWFuKTogdm9pZFxuXHRcdGNyZWF0ZUVTNVByb3h5XzxUPihcblx0XHRcdGJhc2U6IFQsXG5cdFx0XHRwYXJlbnQ/OiBJbW1lclN0YXRlXG5cdFx0KTogRHJhZnRlZDxULCBFUzVPYmplY3RTdGF0ZSB8IEVTNUFycmF5U3RhdGU+XG5cdFx0aGFzQ2hhbmdlc18oc3RhdGU6IEVTNUFycmF5U3RhdGUgfCBFUzVPYmplY3RTdGF0ZSk6IGJvb2xlYW5cblx0fVxuXHRNYXBTZXQ/OiB7XG5cdFx0cHJveHlNYXBfPFQgZXh0ZW5kcyBBbnlNYXA+KHRhcmdldDogVCwgcGFyZW50PzogSW1tZXJTdGF0ZSk6IFRcblx0XHRwcm94eVNldF88VCBleHRlbmRzIEFueVNldD4odGFyZ2V0OiBULCBwYXJlbnQ/OiBJbW1lclN0YXRlKTogVFxuXHR9XG59ID0ge31cblxudHlwZSBQbHVnaW5zID0gdHlwZW9mIHBsdWdpbnNcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBsdWdpbjxLIGV4dGVuZHMga2V5b2YgUGx1Z2lucz4oXG5cdHBsdWdpbktleTogS1xuKTogRXhjbHVkZTxQbHVnaW5zW0tdLCB1bmRlZmluZWQ+IHtcblx0Y29uc3QgcGx1Z2luID0gcGx1Z2luc1twbHVnaW5LZXldXG5cdGlmICghcGx1Z2luKSB7XG5cdFx0ZGllKDE4LCBwbHVnaW5LZXkpXG5cdH1cblx0Ly8gQHRzLWlnbm9yZVxuXHRyZXR1cm4gcGx1Z2luXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkUGx1Z2luPEsgZXh0ZW5kcyBrZXlvZiBQbHVnaW5zPihcblx0cGx1Z2luS2V5OiBLLFxuXHRpbXBsZW1lbnRhdGlvbjogUGx1Z2luc1tLXVxuKTogdm9pZCB7XG5cdGlmICghcGx1Z2luc1twbHVnaW5LZXldKSBwbHVnaW5zW3BsdWdpbktleV0gPSBpbXBsZW1lbnRhdGlvblxufVxuXG4vKiogRVM1IFBsdWdpbiAqL1xuXG5pbnRlcmZhY2UgRVM1QmFzZVN0YXRlIGV4dGVuZHMgSW1tZXJCYXNlU3RhdGUge1xuXHRhc3NpZ25lZF86IHtba2V5OiBzdHJpbmddOiBhbnl9XG5cdHBhcmVudF8/OiBJbW1lclN0YXRlXG5cdHJldm9rZWRfOiBib29sZWFuXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRVM1T2JqZWN0U3RhdGUgZXh0ZW5kcyBFUzVCYXNlU3RhdGUge1xuXHR0eXBlXzogUHJveHlUeXBlLkVTNU9iamVjdFxuXHRkcmFmdF86IERyYWZ0ZWQ8QW55T2JqZWN0LCBFUzVPYmplY3RTdGF0ZT5cblx0YmFzZV86IEFueU9iamVjdFxuXHRjb3B5XzogQW55T2JqZWN0IHwgbnVsbFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVTNUFycmF5U3RhdGUgZXh0ZW5kcyBFUzVCYXNlU3RhdGUge1xuXHR0eXBlXzogUHJveHlUeXBlLkVTNUFycmF5XG5cdGRyYWZ0XzogRHJhZnRlZDxBbnlPYmplY3QsIEVTNUFycmF5U3RhdGU+XG5cdGJhc2VfOiBhbnlcblx0Y29weV86IGFueVxufVxuXG4vKiogTWFwIC8gU2V0IHBsdWdpbiAqL1xuXG5leHBvcnQgaW50ZXJmYWNlIE1hcFN0YXRlIGV4dGVuZHMgSW1tZXJCYXNlU3RhdGUge1xuXHR0eXBlXzogUHJveHlUeXBlLk1hcFxuXHRjb3B5XzogQW55TWFwIHwgdW5kZWZpbmVkXG5cdGFzc2lnbmVkXzogTWFwPGFueSwgYm9vbGVhbj4gfCB1bmRlZmluZWRcblx0YmFzZV86IEFueU1hcFxuXHRyZXZva2VkXzogYm9vbGVhblxuXHRkcmFmdF86IERyYWZ0ZWQ8QW55TWFwLCBNYXBTdGF0ZT5cbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZXRTdGF0ZSBleHRlbmRzIEltbWVyQmFzZVN0YXRlIHtcblx0dHlwZV86IFByb3h5VHlwZS5TZXRcblx0Y29weV86IEFueVNldCB8IHVuZGVmaW5lZFxuXHRiYXNlXzogQW55U2V0XG5cdGRyYWZ0c186IE1hcDxhbnksIERyYWZ0ZWQ+IC8vIG1hcHMgdGhlIG9yaWdpbmFsIHZhbHVlIHRvIHRoZSBkcmFmdCB2YWx1ZSBpbiB0aGUgbmV3IHNldFxuXHRyZXZva2VkXzogYm9vbGVhblxuXHRkcmFmdF86IERyYWZ0ZWQ8QW55U2V0LCBTZXRTdGF0ZT5cbn1cblxuLyoqIFBhdGNoZXMgcGx1Z2luICovXG5cbmV4cG9ydCB0eXBlIFBhdGNoUGF0aCA9IChzdHJpbmcgfCBudW1iZXIpW11cbiIsICJpbXBvcnQge1xuXHRQYXRjaCxcblx0UGF0Y2hMaXN0ZW5lcixcblx0RHJhZnRlZCxcblx0SW1tZXIsXG5cdERSQUZUX1NUQVRFLFxuXHRJbW1lclN0YXRlLFxuXHRQcm94eVR5cGUsXG5cdGdldFBsdWdpblxufSBmcm9tIFwiLi4vaW50ZXJuYWxcIlxuaW1wb3J0IHtkaWV9IGZyb20gXCIuLi91dGlscy9lcnJvcnNcIlxuXG4vKiogRWFjaCBzY29wZSByZXByZXNlbnRzIGEgYHByb2R1Y2VgIGNhbGwuICovXG5cbmV4cG9ydCBpbnRlcmZhY2UgSW1tZXJTY29wZSB7XG5cdHBhdGNoZXNfPzogUGF0Y2hbXVxuXHRpbnZlcnNlUGF0Y2hlc18/OiBQYXRjaFtdXG5cdGNhbkF1dG9GcmVlemVfOiBib29sZWFuXG5cdGRyYWZ0c186IGFueVtdXG5cdHBhcmVudF8/OiBJbW1lclNjb3BlXG5cdHBhdGNoTGlzdGVuZXJfPzogUGF0Y2hMaXN0ZW5lclxuXHRpbW1lcl86IEltbWVyXG5cdHVuZmluYWxpemVkRHJhZnRzXzogbnVtYmVyXG59XG5cbmxldCBjdXJyZW50U2NvcGU6IEltbWVyU2NvcGUgfCB1bmRlZmluZWRcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEN1cnJlbnRTY29wZSgpIHtcblx0aWYgKF9fREVWX18gJiYgIWN1cnJlbnRTY29wZSkgZGllKDApXG5cdHJldHVybiBjdXJyZW50U2NvcGUhXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVNjb3BlKFxuXHRwYXJlbnRfOiBJbW1lclNjb3BlIHwgdW5kZWZpbmVkLFxuXHRpbW1lcl86IEltbWVyXG4pOiBJbW1lclNjb3BlIHtcblx0cmV0dXJuIHtcblx0XHRkcmFmdHNfOiBbXSxcblx0XHRwYXJlbnRfLFxuXHRcdGltbWVyXyxcblx0XHQvLyBXaGVuZXZlciB0aGUgbW9kaWZpZWQgZHJhZnQgY29udGFpbnMgYSBkcmFmdCBmcm9tIGFub3RoZXIgc2NvcGUsIHdlXG5cdFx0Ly8gbmVlZCB0byBwcmV2ZW50IGF1dG8tZnJlZXppbmcgc28gdGhlIHVub3duZWQgZHJhZnQgY2FuIGJlIGZpbmFsaXplZC5cblx0XHRjYW5BdXRvRnJlZXplXzogdHJ1ZSxcblx0XHR1bmZpbmFsaXplZERyYWZ0c186IDBcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlUGF0Y2hlc0luU2NvcGUoXG5cdHNjb3BlOiBJbW1lclNjb3BlLFxuXHRwYXRjaExpc3RlbmVyPzogUGF0Y2hMaXN0ZW5lclxuKSB7XG5cdGlmIChwYXRjaExpc3RlbmVyKSB7XG5cdFx0Z2V0UGx1Z2luKFwiUGF0Y2hlc1wiKSAvLyBhc3NlcnQgd2UgaGF2ZSB0aGUgcGx1Z2luXG5cdFx0c2NvcGUucGF0Y2hlc18gPSBbXVxuXHRcdHNjb3BlLmludmVyc2VQYXRjaGVzXyA9IFtdXG5cdFx0c2NvcGUucGF0Y2hMaXN0ZW5lcl8gPSBwYXRjaExpc3RlbmVyXG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJldm9rZVNjb3BlKHNjb3BlOiBJbW1lclNjb3BlKSB7XG5cdGxlYXZlU2NvcGUoc2NvcGUpXG5cdHNjb3BlLmRyYWZ0c18uZm9yRWFjaChyZXZva2VEcmFmdClcblx0Ly8gQHRzLWlnbm9yZVxuXHRzY29wZS5kcmFmdHNfID0gbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gbGVhdmVTY29wZShzY29wZTogSW1tZXJTY29wZSkge1xuXHRpZiAoc2NvcGUgPT09IGN1cnJlbnRTY29wZSkge1xuXHRcdGN1cnJlbnRTY29wZSA9IHNjb3BlLnBhcmVudF9cblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZW50ZXJTY29wZShpbW1lcjogSW1tZXIpIHtcblx0cmV0dXJuIChjdXJyZW50U2NvcGUgPSBjcmVhdGVTY29wZShjdXJyZW50U2NvcGUsIGltbWVyKSlcbn1cblxuZnVuY3Rpb24gcmV2b2tlRHJhZnQoZHJhZnQ6IERyYWZ0ZWQpIHtcblx0Y29uc3Qgc3RhdGU6IEltbWVyU3RhdGUgPSBkcmFmdFtEUkFGVF9TVEFURV1cblx0aWYgKFxuXHRcdHN0YXRlLnR5cGVfID09PSBQcm94eVR5cGUuUHJveHlPYmplY3QgfHxcblx0XHRzdGF0ZS50eXBlXyA9PT0gUHJveHlUeXBlLlByb3h5QXJyYXlcblx0KVxuXHRcdHN0YXRlLnJldm9rZV8oKVxuXHRlbHNlIHN0YXRlLnJldm9rZWRfID0gdHJ1ZVxufVxuIiwgImltcG9ydCB7XG5cdEltbWVyU2NvcGUsXG5cdERSQUZUX1NUQVRFLFxuXHRpc0RyYWZ0YWJsZSxcblx0Tk9USElORyxcblx0UGF0Y2hQYXRoLFxuXHRlYWNoLFxuXHRoYXMsXG5cdGZyZWV6ZSxcblx0SW1tZXJTdGF0ZSxcblx0aXNEcmFmdCxcblx0U2V0U3RhdGUsXG5cdHNldCxcblx0UHJveHlUeXBlLFxuXHRnZXRQbHVnaW4sXG5cdGRpZSxcblx0cmV2b2tlU2NvcGUsXG5cdGlzRnJvemVuLFxuXHRzaGFsbG93Q29weVxufSBmcm9tIFwiLi4vaW50ZXJuYWxcIlxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc1Jlc3VsdChyZXN1bHQ6IGFueSwgc2NvcGU6IEltbWVyU2NvcGUpIHtcblx0c2NvcGUudW5maW5hbGl6ZWREcmFmdHNfID0gc2NvcGUuZHJhZnRzXy5sZW5ndGhcblx0Y29uc3QgYmFzZURyYWZ0ID0gc2NvcGUuZHJhZnRzXyFbMF1cblx0Y29uc3QgaXNSZXBsYWNlZCA9IHJlc3VsdCAhPT0gdW5kZWZpbmVkICYmIHJlc3VsdCAhPT0gYmFzZURyYWZ0XG5cdGlmICghc2NvcGUuaW1tZXJfLnVzZVByb3hpZXNfKVxuXHRcdGdldFBsdWdpbihcIkVTNVwiKS53aWxsRmluYWxpemVFUzVfKHNjb3BlLCByZXN1bHQsIGlzUmVwbGFjZWQpXG5cdGlmIChpc1JlcGxhY2VkKSB7XG5cdFx0aWYgKGJhc2VEcmFmdFtEUkFGVF9TVEFURV0ubW9kaWZpZWRfKSB7XG5cdFx0XHRyZXZva2VTY29wZShzY29wZSlcblx0XHRcdGRpZSg0KVxuXHRcdH1cblx0XHRpZiAoaXNEcmFmdGFibGUocmVzdWx0KSkge1xuXHRcdFx0Ly8gRmluYWxpemUgdGhlIHJlc3VsdCBpbiBjYXNlIGl0IGNvbnRhaW5zIChvciBpcykgYSBzdWJzZXQgb2YgdGhlIGRyYWZ0LlxuXHRcdFx0cmVzdWx0ID0gZmluYWxpemUoc2NvcGUsIHJlc3VsdClcblx0XHRcdGlmICghc2NvcGUucGFyZW50XykgbWF5YmVGcmVlemUoc2NvcGUsIHJlc3VsdClcblx0XHR9XG5cdFx0aWYgKHNjb3BlLnBhdGNoZXNfKSB7XG5cdFx0XHRnZXRQbHVnaW4oXCJQYXRjaGVzXCIpLmdlbmVyYXRlUmVwbGFjZW1lbnRQYXRjaGVzXyhcblx0XHRcdFx0YmFzZURyYWZ0W0RSQUZUX1NUQVRFXS5iYXNlXyxcblx0XHRcdFx0cmVzdWx0LFxuXHRcdFx0XHRzY29wZS5wYXRjaGVzXyxcblx0XHRcdFx0c2NvcGUuaW52ZXJzZVBhdGNoZXNfIVxuXHRcdFx0KVxuXHRcdH1cblx0fSBlbHNlIHtcblx0XHQvLyBGaW5hbGl6ZSB0aGUgYmFzZSBkcmFmdC5cblx0XHRyZXN1bHQgPSBmaW5hbGl6ZShzY29wZSwgYmFzZURyYWZ0LCBbXSlcblx0fVxuXHRyZXZva2VTY29wZShzY29wZSlcblx0aWYgKHNjb3BlLnBhdGNoZXNfKSB7XG5cdFx0c2NvcGUucGF0Y2hMaXN0ZW5lcl8hKHNjb3BlLnBhdGNoZXNfLCBzY29wZS5pbnZlcnNlUGF0Y2hlc18hKVxuXHR9XG5cdHJldHVybiByZXN1bHQgIT09IE5PVEhJTkcgPyByZXN1bHQgOiB1bmRlZmluZWRcbn1cblxuZnVuY3Rpb24gZmluYWxpemUocm9vdFNjb3BlOiBJbW1lclNjb3BlLCB2YWx1ZTogYW55LCBwYXRoPzogUGF0Y2hQYXRoKSB7XG5cdC8vIERvbid0IHJlY3Vyc2UgaW4gdGhvIHJlY3Vyc2l2ZSBkYXRhIHN0cnVjdHVyZXNcblx0aWYgKGlzRnJvemVuKHZhbHVlKSkgcmV0dXJuIHZhbHVlXG5cblx0Y29uc3Qgc3RhdGU6IEltbWVyU3RhdGUgPSB2YWx1ZVtEUkFGVF9TVEFURV1cblx0Ly8gQSBwbGFpbiBvYmplY3QsIG1pZ2h0IG5lZWQgZnJlZXppbmcsIG1pZ2h0IGNvbnRhaW4gZHJhZnRzXG5cdGlmICghc3RhdGUpIHtcblx0XHRlYWNoKFxuXHRcdFx0dmFsdWUsXG5cdFx0XHQoa2V5LCBjaGlsZFZhbHVlKSA9PlxuXHRcdFx0XHRmaW5hbGl6ZVByb3BlcnR5KHJvb3RTY29wZSwgc3RhdGUsIHZhbHVlLCBrZXksIGNoaWxkVmFsdWUsIHBhdGgpLFxuXHRcdFx0dHJ1ZSAvLyBTZWUgIzU5MCwgZG9uJ3QgcmVjdXJzZSBpbnRvIG5vbi1lbnVtZXJhYmxlIG9mIG5vbiBkcmFmdGVkIG9iamVjdHNcblx0XHQpXG5cdFx0cmV0dXJuIHZhbHVlXG5cdH1cblx0Ly8gTmV2ZXIgZmluYWxpemUgZHJhZnRzIG93bmVkIGJ5IGFub3RoZXIgc2NvcGUuXG5cdGlmIChzdGF0ZS5zY29wZV8gIT09IHJvb3RTY29wZSkgcmV0dXJuIHZhbHVlXG5cdC8vIFVubW9kaWZpZWQgZHJhZnQsIHJldHVybiB0aGUgKGZyb3plbikgb3JpZ2luYWxcblx0aWYgKCFzdGF0ZS5tb2RpZmllZF8pIHtcblx0XHRtYXliZUZyZWV6ZShyb290U2NvcGUsIHN0YXRlLmJhc2VfLCB0cnVlKVxuXHRcdHJldHVybiBzdGF0ZS5iYXNlX1xuXHR9XG5cdC8vIE5vdCBmaW5hbGl6ZWQgeWV0LCBsZXQncyBkbyB0aGF0IG5vd1xuXHRpZiAoIXN0YXRlLmZpbmFsaXplZF8pIHtcblx0XHRzdGF0ZS5maW5hbGl6ZWRfID0gdHJ1ZVxuXHRcdHN0YXRlLnNjb3BlXy51bmZpbmFsaXplZERyYWZ0c18tLVxuXHRcdGNvbnN0IHJlc3VsdCA9XG5cdFx0XHQvLyBGb3IgRVM1LCBjcmVhdGUgYSBnb29kIGNvcHkgZnJvbSB0aGUgZHJhZnQgZmlyc3QsIHdpdGggYWRkZWQga2V5cyBhbmQgd2l0aG91dCBkZWxldGVkIGtleXMuXG5cdFx0XHRzdGF0ZS50eXBlXyA9PT0gUHJveHlUeXBlLkVTNU9iamVjdCB8fCBzdGF0ZS50eXBlXyA9PT0gUHJveHlUeXBlLkVTNUFycmF5XG5cdFx0XHRcdD8gKHN0YXRlLmNvcHlfID0gc2hhbGxvd0NvcHkoc3RhdGUuZHJhZnRfKSlcblx0XHRcdFx0OiBzdGF0ZS5jb3B5X1xuXHRcdC8vIEZpbmFsaXplIGFsbCBjaGlsZHJlbiBvZiB0aGUgY29weVxuXHRcdC8vIEZvciBzZXRzIHdlIGNsb25lIGJlZm9yZSBpdGVyYXRpbmcsIG90aGVyd2lzZSB3ZSBjYW4gZ2V0IGluIGVuZGxlc3MgbG9vcCBkdWUgdG8gbW9kaWZ5aW5nIGR1cmluZyBpdGVyYXRpb24sIHNlZSAjNjI4XG5cdFx0Ly8gVG8gcHJlc2VydmUgaW5zZXJ0aW9uIG9yZGVyIGluIGFsbCBjYXNlcyB3ZSB0aGVuIGNsZWFyIHRoZSBzZXRcblx0XHQvLyBBbmQgd2UgbGV0IGZpbmFsaXplUHJvcGVydHkga25vdyBpdCBuZWVkcyB0byByZS1hZGQgbm9uLWRyYWZ0IGNoaWxkcmVuIGJhY2sgdG8gdGhlIHRhcmdldFxuXHRcdGxldCByZXN1bHRFYWNoID0gcmVzdWx0XG5cdFx0bGV0IGlzU2V0ID0gZmFsc2Vcblx0XHRpZiAoc3RhdGUudHlwZV8gPT09IFByb3h5VHlwZS5TZXQpIHtcblx0XHRcdHJlc3VsdEVhY2ggPSBuZXcgU2V0KHJlc3VsdClcblx0XHRcdHJlc3VsdC5jbGVhcigpXG5cdFx0XHRpc1NldCA9IHRydWVcblx0XHR9XG5cdFx0ZWFjaChyZXN1bHRFYWNoLCAoa2V5LCBjaGlsZFZhbHVlKSA9PlxuXHRcdFx0ZmluYWxpemVQcm9wZXJ0eShyb290U2NvcGUsIHN0YXRlLCByZXN1bHQsIGtleSwgY2hpbGRWYWx1ZSwgcGF0aCwgaXNTZXQpXG5cdFx0KVxuXHRcdC8vIGV2ZXJ5dGhpbmcgaW5zaWRlIGlzIGZyb3plbiwgd2UgY2FuIGZyZWV6ZSBoZXJlXG5cdFx0bWF5YmVGcmVlemUocm9vdFNjb3BlLCByZXN1bHQsIGZhbHNlKVxuXHRcdC8vIGZpcnN0IHRpbWUgZmluYWxpemluZywgbGV0J3MgY3JlYXRlIHRob3NlIHBhdGNoZXNcblx0XHRpZiAocGF0aCAmJiByb290U2NvcGUucGF0Y2hlc18pIHtcblx0XHRcdGdldFBsdWdpbihcIlBhdGNoZXNcIikuZ2VuZXJhdGVQYXRjaGVzXyhcblx0XHRcdFx0c3RhdGUsXG5cdFx0XHRcdHBhdGgsXG5cdFx0XHRcdHJvb3RTY29wZS5wYXRjaGVzXyxcblx0XHRcdFx0cm9vdFNjb3BlLmludmVyc2VQYXRjaGVzXyFcblx0XHRcdClcblx0XHR9XG5cdH1cblx0cmV0dXJuIHN0YXRlLmNvcHlfXG59XG5cbmZ1bmN0aW9uIGZpbmFsaXplUHJvcGVydHkoXG5cdHJvb3RTY29wZTogSW1tZXJTY29wZSxcblx0cGFyZW50U3RhdGU6IHVuZGVmaW5lZCB8IEltbWVyU3RhdGUsXG5cdHRhcmdldE9iamVjdDogYW55LFxuXHRwcm9wOiBzdHJpbmcgfCBudW1iZXIsXG5cdGNoaWxkVmFsdWU6IGFueSxcblx0cm9vdFBhdGg/OiBQYXRjaFBhdGgsXG5cdHRhcmdldElzU2V0PzogYm9vbGVhblxuKSB7XG5cdGlmIChfX0RFVl9fICYmIGNoaWxkVmFsdWUgPT09IHRhcmdldE9iamVjdCkgZGllKDUpXG5cdGlmIChpc0RyYWZ0KGNoaWxkVmFsdWUpKSB7XG5cdFx0Y29uc3QgcGF0aCA9XG5cdFx0XHRyb290UGF0aCAmJlxuXHRcdFx0cGFyZW50U3RhdGUgJiZcblx0XHRcdHBhcmVudFN0YXRlIS50eXBlXyAhPT0gUHJveHlUeXBlLlNldCAmJiAvLyBTZXQgb2JqZWN0cyBhcmUgYXRvbWljIHNpbmNlIHRoZXkgaGF2ZSBubyBrZXlzLlxuXHRcdFx0IWhhcygocGFyZW50U3RhdGUgYXMgRXhjbHVkZTxJbW1lclN0YXRlLCBTZXRTdGF0ZT4pLmFzc2lnbmVkXyEsIHByb3ApIC8vIFNraXAgZGVlcCBwYXRjaGVzIGZvciBhc3NpZ25lZCBrZXlzLlxuXHRcdFx0XHQ/IHJvb3RQYXRoIS5jb25jYXQocHJvcClcblx0XHRcdFx0OiB1bmRlZmluZWRcblx0XHQvLyBEcmFmdHMgb3duZWQgYnkgYHNjb3BlYCBhcmUgZmluYWxpemVkIGhlcmUuXG5cdFx0Y29uc3QgcmVzID0gZmluYWxpemUocm9vdFNjb3BlLCBjaGlsZFZhbHVlLCBwYXRoKVxuXHRcdHNldCh0YXJnZXRPYmplY3QsIHByb3AsIHJlcylcblx0XHQvLyBEcmFmdHMgZnJvbSBhbm90aGVyIHNjb3BlIG11c3QgcHJldmVudGVkIHRvIGJlIGZyb3plblxuXHRcdC8vIGlmIHdlIGdvdCBhIGRyYWZ0IGJhY2sgZnJvbSBmaW5hbGl6ZSwgd2UncmUgaW4gYSBuZXN0ZWQgcHJvZHVjZSBhbmQgc2hvdWxkbid0IGZyZWV6ZVxuXHRcdGlmIChpc0RyYWZ0KHJlcykpIHtcblx0XHRcdHJvb3RTY29wZS5jYW5BdXRvRnJlZXplXyA9IGZhbHNlXG5cdFx0fSBlbHNlIHJldHVyblxuXHR9IGVsc2UgaWYgKHRhcmdldElzU2V0KSB7XG5cdFx0dGFyZ2V0T2JqZWN0LmFkZChjaGlsZFZhbHVlKVxuXHR9XG5cdC8vIFNlYXJjaCBuZXcgb2JqZWN0cyBmb3IgdW5maW5hbGl6ZWQgZHJhZnRzLiBGcm96ZW4gb2JqZWN0cyBzaG91bGQgbmV2ZXIgY29udGFpbiBkcmFmdHMuXG5cdGlmIChpc0RyYWZ0YWJsZShjaGlsZFZhbHVlKSAmJiAhaXNGcm96ZW4oY2hpbGRWYWx1ZSkpIHtcblx0XHRpZiAoIXJvb3RTY29wZS5pbW1lcl8uYXV0b0ZyZWV6ZV8gJiYgcm9vdFNjb3BlLnVuZmluYWxpemVkRHJhZnRzXyA8IDEpIHtcblx0XHRcdC8vIG9wdGltaXphdGlvbjogaWYgYW4gb2JqZWN0IGlzIG5vdCBhIGRyYWZ0LCBhbmQgd2UgZG9uJ3QgaGF2ZSB0b1xuXHRcdFx0Ly8gZGVlcGZyZWV6ZSBldmVyeXRoaW5nLCBhbmQgd2UgYXJlIHN1cmUgdGhhdCBubyBkcmFmdHMgYXJlIGxlZnQgaW4gdGhlIHJlbWFpbmluZyBvYmplY3Rcblx0XHRcdC8vIGNhdXNlIHdlIHNhdyBhbmQgZmluYWxpemVkIGFsbCBkcmFmdHMgYWxyZWFkeTsgd2UgY2FuIHN0b3AgdmlzaXRpbmcgdGhlIHJlc3Qgb2YgdGhlIHRyZWUuXG5cdFx0XHQvLyBUaGlzIGJlbmVmaXRzIGVzcGVjaWFsbHkgYWRkaW5nIGxhcmdlIGRhdGEgdHJlZSdzIHdpdGhvdXQgZnVydGhlciBwcm9jZXNzaW5nLlxuXHRcdFx0Ly8gU2VlIGFkZC1kYXRhLmpzIHBlcmYgdGVzdFxuXHRcdFx0cmV0dXJuXG5cdFx0fVxuXHRcdGZpbmFsaXplKHJvb3RTY29wZSwgY2hpbGRWYWx1ZSlcblx0XHQvLyBpbW1lciBkZWVwIGZyZWV6ZXMgcGxhaW4gb2JqZWN0cywgc28gaWYgdGhlcmUgaXMgbm8gcGFyZW50IHN0YXRlLCB3ZSBmcmVlemUgYXMgd2VsbFxuXHRcdGlmICghcGFyZW50U3RhdGUgfHwgIXBhcmVudFN0YXRlLnNjb3BlXy5wYXJlbnRfKVxuXHRcdFx0bWF5YmVGcmVlemUocm9vdFNjb3BlLCBjaGlsZFZhbHVlKVxuXHR9XG59XG5cbmZ1bmN0aW9uIG1heWJlRnJlZXplKHNjb3BlOiBJbW1lclNjb3BlLCB2YWx1ZTogYW55LCBkZWVwID0gZmFsc2UpIHtcblx0Ly8gd2UgbmV2ZXIgZnJlZXplIGZvciBhIG5vbi1yb290IHNjb3BlOyBhcyBpdCB3b3VsZCBwcmV2ZW50IHBydW5pbmcgZm9yIGRyYWZ0cyBpbnNpZGUgd3JhcHBpbmcgb2JqZWN0c1xuXHRpZiAoIXNjb3BlLnBhcmVudF8gJiYgc2NvcGUuaW1tZXJfLmF1dG9GcmVlemVfICYmIHNjb3BlLmNhbkF1dG9GcmVlemVfKSB7XG5cdFx0ZnJlZXplKHZhbHVlLCBkZWVwKVxuXHR9XG59XG4iLCAiaW1wb3J0IHtcblx0ZWFjaCxcblx0aGFzLFxuXHRpcyxcblx0aXNEcmFmdGFibGUsXG5cdHNoYWxsb3dDb3B5LFxuXHRsYXRlc3QsXG5cdEltbWVyQmFzZVN0YXRlLFxuXHRJbW1lclN0YXRlLFxuXHREcmFmdGVkLFxuXHRBbnlPYmplY3QsXG5cdEFueUFycmF5LFxuXHRPYmplY3Rpc2gsXG5cdGdldEN1cnJlbnRTY29wZSxcblx0RFJBRlRfU1RBVEUsXG5cdGRpZSxcblx0Y3JlYXRlUHJveHksXG5cdFByb3h5VHlwZVxufSBmcm9tIFwiLi4vaW50ZXJuYWxcIlxuXG5pbnRlcmZhY2UgUHJveHlCYXNlU3RhdGUgZXh0ZW5kcyBJbW1lckJhc2VTdGF0ZSB7XG5cdGFzc2lnbmVkXzoge1xuXHRcdFtwcm9wZXJ0eTogc3RyaW5nXTogYm9vbGVhblxuXHR9XG5cdHBhcmVudF8/OiBJbW1lclN0YXRlXG5cdHJldm9rZV8oKTogdm9pZFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb3h5T2JqZWN0U3RhdGUgZXh0ZW5kcyBQcm94eUJhc2VTdGF0ZSB7XG5cdHR5cGVfOiBQcm94eVR5cGUuUHJveHlPYmplY3Rcblx0YmFzZV86IGFueVxuXHRjb3B5XzogYW55XG5cdGRyYWZ0XzogRHJhZnRlZDxBbnlPYmplY3QsIFByb3h5T2JqZWN0U3RhdGU+XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJveHlBcnJheVN0YXRlIGV4dGVuZHMgUHJveHlCYXNlU3RhdGUge1xuXHR0eXBlXzogUHJveHlUeXBlLlByb3h5QXJyYXlcblx0YmFzZV86IEFueUFycmF5XG5cdGNvcHlfOiBBbnlBcnJheSB8IG51bGxcblx0ZHJhZnRfOiBEcmFmdGVkPEFueUFycmF5LCBQcm94eUFycmF5U3RhdGU+XG59XG5cbnR5cGUgUHJveHlTdGF0ZSA9IFByb3h5T2JqZWN0U3RhdGUgfCBQcm94eUFycmF5U3RhdGVcblxuLyoqXG4gKiBSZXR1cm5zIGEgbmV3IGRyYWZ0IG9mIHRoZSBgYmFzZWAgb2JqZWN0LlxuICpcbiAqIFRoZSBzZWNvbmQgYXJndW1lbnQgaXMgdGhlIHBhcmVudCBkcmFmdC1zdGF0ZSAodXNlZCBpbnRlcm5hbGx5KS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVByb3h5UHJveHk8VCBleHRlbmRzIE9iamVjdGlzaD4oXG5cdGJhc2U6IFQsXG5cdHBhcmVudD86IEltbWVyU3RhdGVcbik6IERyYWZ0ZWQ8VCwgUHJveHlTdGF0ZT4ge1xuXHRjb25zdCBpc0FycmF5ID0gQXJyYXkuaXNBcnJheShiYXNlKVxuXHRjb25zdCBzdGF0ZTogUHJveHlTdGF0ZSA9IHtcblx0XHR0eXBlXzogaXNBcnJheSA/IFByb3h5VHlwZS5Qcm94eUFycmF5IDogKFByb3h5VHlwZS5Qcm94eU9iamVjdCBhcyBhbnkpLFxuXHRcdC8vIFRyYWNrIHdoaWNoIHByb2R1Y2UgY2FsbCB0aGlzIGlzIGFzc29jaWF0ZWQgd2l0aC5cblx0XHRzY29wZV86IHBhcmVudCA/IHBhcmVudC5zY29wZV8gOiBnZXRDdXJyZW50U2NvcGUoKSEsXG5cdFx0Ly8gVHJ1ZSBmb3IgYm90aCBzaGFsbG93IGFuZCBkZWVwIGNoYW5nZXMuXG5cdFx0bW9kaWZpZWRfOiBmYWxzZSxcblx0XHQvLyBVc2VkIGR1cmluZyBmaW5hbGl6YXRpb24uXG5cdFx0ZmluYWxpemVkXzogZmFsc2UsXG5cdFx0Ly8gVHJhY2sgd2hpY2ggcHJvcGVydGllcyBoYXZlIGJlZW4gYXNzaWduZWQgKHRydWUpIG9yIGRlbGV0ZWQgKGZhbHNlKS5cblx0XHRhc3NpZ25lZF86IHt9LFxuXHRcdC8vIFRoZSBwYXJlbnQgZHJhZnQgc3RhdGUuXG5cdFx0cGFyZW50XzogcGFyZW50LFxuXHRcdC8vIFRoZSBiYXNlIHN0YXRlLlxuXHRcdGJhc2VfOiBiYXNlLFxuXHRcdC8vIFRoZSBiYXNlIHByb3h5LlxuXHRcdGRyYWZ0XzogbnVsbCBhcyBhbnksIC8vIHNldCBiZWxvd1xuXHRcdC8vIFRoZSBiYXNlIGNvcHkgd2l0aCBhbnkgdXBkYXRlZCB2YWx1ZXMuXG5cdFx0Y29weV86IG51bGwsXG5cdFx0Ly8gQ2FsbGVkIGJ5IHRoZSBgcHJvZHVjZWAgZnVuY3Rpb24uXG5cdFx0cmV2b2tlXzogbnVsbCBhcyBhbnksXG5cdFx0aXNNYW51YWxfOiBmYWxzZVxuXHR9XG5cblx0Ly8gdGhlIHRyYXBzIG11c3QgdGFyZ2V0IHNvbWV0aGluZywgYSBiaXQgbGlrZSB0aGUgJ3JlYWwnIGJhc2UuXG5cdC8vIGJ1dCBhbHNvLCB3ZSBuZWVkIHRvIGJlIGFibGUgdG8gZGV0ZXJtaW5lIGZyb20gdGhlIHRhcmdldCB3aGF0IHRoZSByZWxldmFudCBzdGF0ZSBpc1xuXHQvLyAodG8gYXZvaWQgY3JlYXRpbmcgdHJhcHMgcGVyIGluc3RhbmNlIHRvIGNhcHR1cmUgdGhlIHN0YXRlIGluIGNsb3N1cmUsXG5cdC8vIGFuZCB0byBhdm9pZCBjcmVhdGluZyB3ZWlyZCBoaWRkZW4gcHJvcGVydGllcyBhcyB3ZWxsKVxuXHQvLyBTbyB0aGUgdHJpY2sgaXMgdG8gdXNlICdzdGF0ZScgYXMgdGhlIGFjdHVhbCAndGFyZ2V0JyEgKGFuZCBtYWtlIHN1cmUgd2UgaW50ZXJjZXB0IGV2ZXJ5dGhpbmcpXG5cdC8vIE5vdGUgdGhhdCBpbiB0aGUgY2FzZSBvZiBhbiBhcnJheSwgd2UgcHV0IHRoZSBzdGF0ZSBpbiBhbiBhcnJheSB0byBoYXZlIGJldHRlciBSZWZsZWN0IGRlZmF1bHRzIG9vdGJcblx0bGV0IHRhcmdldDogVCA9IHN0YXRlIGFzIGFueVxuXHRsZXQgdHJhcHM6IFByb3h5SGFuZGxlcjxvYmplY3QgfCBBcnJheTxhbnk+PiA9IG9iamVjdFRyYXBzXG5cdGlmIChpc0FycmF5KSB7XG5cdFx0dGFyZ2V0ID0gW3N0YXRlXSBhcyBhbnlcblx0XHR0cmFwcyA9IGFycmF5VHJhcHNcblx0fVxuXG5cdGNvbnN0IHtyZXZva2UsIHByb3h5fSA9IFByb3h5LnJldm9jYWJsZSh0YXJnZXQsIHRyYXBzKVxuXHRzdGF0ZS5kcmFmdF8gPSBwcm94eSBhcyBhbnlcblx0c3RhdGUucmV2b2tlXyA9IHJldm9rZVxuXHRyZXR1cm4gcHJveHkgYXMgYW55XG59XG5cbi8qKlxuICogT2JqZWN0IGRyYWZ0c1xuICovXG5leHBvcnQgY29uc3Qgb2JqZWN0VHJhcHM6IFByb3h5SGFuZGxlcjxQcm94eVN0YXRlPiA9IHtcblx0Z2V0KHN0YXRlLCBwcm9wKSB7XG5cdFx0aWYgKHByb3AgPT09IERSQUZUX1NUQVRFKSByZXR1cm4gc3RhdGVcblxuXHRcdGNvbnN0IHNvdXJjZSA9IGxhdGVzdChzdGF0ZSlcblx0XHRpZiAoIWhhcyhzb3VyY2UsIHByb3ApKSB7XG5cdFx0XHQvLyBub24tZXhpc3Rpbmcgb3Igbm9uLW93biBwcm9wZXJ0eS4uLlxuXHRcdFx0cmV0dXJuIHJlYWRQcm9wRnJvbVByb3RvKHN0YXRlLCBzb3VyY2UsIHByb3ApXG5cdFx0fVxuXHRcdGNvbnN0IHZhbHVlID0gc291cmNlW3Byb3BdXG5cdFx0aWYgKHN0YXRlLmZpbmFsaXplZF8gfHwgIWlzRHJhZnRhYmxlKHZhbHVlKSkge1xuXHRcdFx0cmV0dXJuIHZhbHVlXG5cdFx0fVxuXHRcdC8vIENoZWNrIGZvciBleGlzdGluZyBkcmFmdCBpbiBtb2RpZmllZCBzdGF0ZS5cblx0XHQvLyBBc3NpZ25lZCB2YWx1ZXMgYXJlIG5ldmVyIGRyYWZ0ZWQuIFRoaXMgY2F0Y2hlcyBhbnkgZHJhZnRzIHdlIGNyZWF0ZWQsIHRvby5cblx0XHRpZiAodmFsdWUgPT09IHBlZWsoc3RhdGUuYmFzZV8sIHByb3ApKSB7XG5cdFx0XHRwcmVwYXJlQ29weShzdGF0ZSlcblx0XHRcdHJldHVybiAoc3RhdGUuY29weV8hW3Byb3AgYXMgYW55XSA9IGNyZWF0ZVByb3h5KFxuXHRcdFx0XHRzdGF0ZS5zY29wZV8uaW1tZXJfLFxuXHRcdFx0XHR2YWx1ZSxcblx0XHRcdFx0c3RhdGVcblx0XHRcdCkpXG5cdFx0fVxuXHRcdHJldHVybiB2YWx1ZVxuXHR9LFxuXHRoYXMoc3RhdGUsIHByb3ApIHtcblx0XHRyZXR1cm4gcHJvcCBpbiBsYXRlc3Qoc3RhdGUpXG5cdH0sXG5cdG93bktleXMoc3RhdGUpIHtcblx0XHRyZXR1cm4gUmVmbGVjdC5vd25LZXlzKGxhdGVzdChzdGF0ZSkpXG5cdH0sXG5cdHNldChcblx0XHRzdGF0ZTogUHJveHlPYmplY3RTdGF0ZSxcblx0XHRwcm9wOiBzdHJpbmcgLyogc3RyaWN0bHkgbm90LCBidXQgaGVscHMgVFMgKi8sXG5cdFx0dmFsdWVcblx0KSB7XG5cdFx0Y29uc3QgZGVzYyA9IGdldERlc2NyaXB0b3JGcm9tUHJvdG8obGF0ZXN0KHN0YXRlKSwgcHJvcClcblx0XHRpZiAoZGVzYz8uc2V0KSB7XG5cdFx0XHQvLyBzcGVjaWFsIGNhc2U6IGlmIHRoaXMgd3JpdGUgaXMgY2FwdHVyZWQgYnkgYSBzZXR0ZXIsIHdlIGhhdmVcblx0XHRcdC8vIHRvIHRyaWdnZXIgaXQgd2l0aCB0aGUgY29ycmVjdCBjb250ZXh0XG5cdFx0XHRkZXNjLnNldC5jYWxsKHN0YXRlLmRyYWZ0XywgdmFsdWUpXG5cdFx0XHRyZXR1cm4gdHJ1ZVxuXHRcdH1cblx0XHRpZiAoIXN0YXRlLm1vZGlmaWVkXykge1xuXHRcdFx0Ly8gdGhlIGxhc3QgY2hlY2sgaXMgYmVjYXVzZSB3ZSBuZWVkIHRvIGJlIGFibGUgdG8gZGlzdGluZ3Vpc2ggc2V0dGluZyBhIG5vbi1leGlzdGluZyB0byB1bmRlZmluZWQgKHdoaWNoIGlzIGEgY2hhbmdlKVxuXHRcdFx0Ly8gZnJvbSBzZXR0aW5nIGFuIGV4aXN0aW5nIHByb3BlcnR5IHdpdGggdmFsdWUgdW5kZWZpbmVkIHRvIHVuZGVmaW5lZCAod2hpY2ggaXMgbm90IGEgY2hhbmdlKVxuXHRcdFx0Y29uc3QgY3VycmVudCA9IHBlZWsobGF0ZXN0KHN0YXRlKSwgcHJvcClcblx0XHRcdC8vIHNwZWNpYWwgY2FzZSwgaWYgd2UgYXNzaWduaW5nIHRoZSBvcmlnaW5hbCB2YWx1ZSB0byBhIGRyYWZ0LCB3ZSBjYW4gaWdub3JlIHRoZSBhc3NpZ25tZW50XG5cdFx0XHRjb25zdCBjdXJyZW50U3RhdGU6IFByb3h5T2JqZWN0U3RhdGUgPSBjdXJyZW50Py5bRFJBRlRfU1RBVEVdXG5cdFx0XHRpZiAoY3VycmVudFN0YXRlICYmIGN1cnJlbnRTdGF0ZS5iYXNlXyA9PT0gdmFsdWUpIHtcblx0XHRcdFx0c3RhdGUuY29weV8hW3Byb3BdID0gdmFsdWVcblx0XHRcdFx0c3RhdGUuYXNzaWduZWRfW3Byb3BdID0gZmFsc2Vcblx0XHRcdFx0cmV0dXJuIHRydWVcblx0XHRcdH1cblx0XHRcdGlmIChpcyh2YWx1ZSwgY3VycmVudCkgJiYgKHZhbHVlICE9PSB1bmRlZmluZWQgfHwgaGFzKHN0YXRlLmJhc2VfLCBwcm9wKSkpXG5cdFx0XHRcdHJldHVybiB0cnVlXG5cdFx0XHRwcmVwYXJlQ29weShzdGF0ZSlcblx0XHRcdG1hcmtDaGFuZ2VkKHN0YXRlKVxuXHRcdH1cblxuXHRcdGlmIChcblx0XHRcdChzdGF0ZS5jb3B5XyFbcHJvcF0gPT09IHZhbHVlICYmXG5cdFx0XHRcdC8vIHNwZWNpYWwgY2FzZTogaGFuZGxlIG5ldyBwcm9wcyB3aXRoIHZhbHVlICd1bmRlZmluZWQnXG5cdFx0XHRcdCh2YWx1ZSAhPT0gdW5kZWZpbmVkIHx8IHByb3AgaW4gc3RhdGUuY29weV8pKSB8fFxuXHRcdFx0Ly8gc3BlY2lhbCBjYXNlOiBOYU5cblx0XHRcdChOdW1iZXIuaXNOYU4odmFsdWUpICYmIE51bWJlci5pc05hTihzdGF0ZS5jb3B5XyFbcHJvcF0pKVxuXHRcdClcblx0XHRcdHJldHVybiB0cnVlXG5cblx0XHQvLyBAdHMtaWdub3JlXG5cdFx0c3RhdGUuY29weV8hW3Byb3BdID0gdmFsdWVcblx0XHRzdGF0ZS5hc3NpZ25lZF9bcHJvcF0gPSB0cnVlXG5cdFx0cmV0dXJuIHRydWVcblx0fSxcblx0ZGVsZXRlUHJvcGVydHkoc3RhdGUsIHByb3A6IHN0cmluZykge1xuXHRcdC8vIFRoZSBgdW5kZWZpbmVkYCBjaGVjayBpcyBhIGZhc3QgcGF0aCBmb3IgcHJlLWV4aXN0aW5nIGtleXMuXG5cdFx0aWYgKHBlZWsoc3RhdGUuYmFzZV8sIHByb3ApICE9PSB1bmRlZmluZWQgfHwgcHJvcCBpbiBzdGF0ZS5iYXNlXykge1xuXHRcdFx0c3RhdGUuYXNzaWduZWRfW3Byb3BdID0gZmFsc2Vcblx0XHRcdHByZXBhcmVDb3B5KHN0YXRlKVxuXHRcdFx0bWFya0NoYW5nZWQoc3RhdGUpXG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGlmIGFuIG9yaWdpbmFsbHkgbm90IGFzc2lnbmVkIHByb3BlcnR5IHdhcyBkZWxldGVkXG5cdFx0XHRkZWxldGUgc3RhdGUuYXNzaWduZWRfW3Byb3BdXG5cdFx0fVxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRpZiAoc3RhdGUuY29weV8pIGRlbGV0ZSBzdGF0ZS5jb3B5X1twcm9wXVxuXHRcdHJldHVybiB0cnVlXG5cdH0sXG5cdC8vIE5vdGU6IFdlIG5ldmVyIGNvZXJjZSBgZGVzYy52YWx1ZWAgaW50byBhbiBJbW1lciBkcmFmdCwgYmVjYXVzZSB3ZSBjYW4ndCBtYWtlXG5cdC8vIHRoZSBzYW1lIGd1YXJhbnRlZSBpbiBFUzUgbW9kZS5cblx0Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHN0YXRlLCBwcm9wKSB7XG5cdFx0Y29uc3Qgb3duZXIgPSBsYXRlc3Qoc3RhdGUpXG5cdFx0Y29uc3QgZGVzYyA9IFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG93bmVyLCBwcm9wKVxuXHRcdGlmICghZGVzYykgcmV0dXJuIGRlc2Ncblx0XHRyZXR1cm4ge1xuXHRcdFx0d3JpdGFibGU6IHRydWUsXG5cdFx0XHRjb25maWd1cmFibGU6IHN0YXRlLnR5cGVfICE9PSBQcm94eVR5cGUuUHJveHlBcnJheSB8fCBwcm9wICE9PSBcImxlbmd0aFwiLFxuXHRcdFx0ZW51bWVyYWJsZTogZGVzYy5lbnVtZXJhYmxlLFxuXHRcdFx0dmFsdWU6IG93bmVyW3Byb3BdXG5cdFx0fVxuXHR9LFxuXHRkZWZpbmVQcm9wZXJ0eSgpIHtcblx0XHRkaWUoMTEpXG5cdH0sXG5cdGdldFByb3RvdHlwZU9mKHN0YXRlKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihzdGF0ZS5iYXNlXylcblx0fSxcblx0c2V0UHJvdG90eXBlT2YoKSB7XG5cdFx0ZGllKDEyKVxuXHR9XG59XG5cbi8qKlxuICogQXJyYXkgZHJhZnRzXG4gKi9cblxuY29uc3QgYXJyYXlUcmFwczogUHJveHlIYW5kbGVyPFtQcm94eUFycmF5U3RhdGVdPiA9IHt9XG5lYWNoKG9iamVjdFRyYXBzLCAoa2V5LCBmbikgPT4ge1xuXHQvLyBAdHMtaWdub3JlXG5cdGFycmF5VHJhcHNba2V5XSA9IGZ1bmN0aW9uKCkge1xuXHRcdGFyZ3VtZW50c1swXSA9IGFyZ3VtZW50c1swXVswXVxuXHRcdHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG5cdH1cbn0pXG5hcnJheVRyYXBzLmRlbGV0ZVByb3BlcnR5ID0gZnVuY3Rpb24oc3RhdGUsIHByb3ApIHtcblx0aWYgKF9fREVWX18gJiYgaXNOYU4ocGFyc2VJbnQocHJvcCBhcyBhbnkpKSkgZGllKDEzKVxuXHQvLyBAdHMtaWdub3JlXG5cdHJldHVybiBhcnJheVRyYXBzLnNldCEuY2FsbCh0aGlzLCBzdGF0ZSwgcHJvcCwgdW5kZWZpbmVkKVxufVxuYXJyYXlUcmFwcy5zZXQgPSBmdW5jdGlvbihzdGF0ZSwgcHJvcCwgdmFsdWUpIHtcblx0aWYgKF9fREVWX18gJiYgcHJvcCAhPT0gXCJsZW5ndGhcIiAmJiBpc05hTihwYXJzZUludChwcm9wIGFzIGFueSkpKSBkaWUoMTQpXG5cdHJldHVybiBvYmplY3RUcmFwcy5zZXQhLmNhbGwodGhpcywgc3RhdGVbMF0sIHByb3AsIHZhbHVlLCBzdGF0ZVswXSlcbn1cblxuLy8gQWNjZXNzIGEgcHJvcGVydHkgd2l0aG91dCBjcmVhdGluZyBhbiBJbW1lciBkcmFmdC5cbmZ1bmN0aW9uIHBlZWsoZHJhZnQ6IERyYWZ0ZWQsIHByb3A6IFByb3BlcnR5S2V5KSB7XG5cdGNvbnN0IHN0YXRlID0gZHJhZnRbRFJBRlRfU1RBVEVdXG5cdGNvbnN0IHNvdXJjZSA9IHN0YXRlID8gbGF0ZXN0KHN0YXRlKSA6IGRyYWZ0XG5cdHJldHVybiBzb3VyY2VbcHJvcF1cbn1cblxuZnVuY3Rpb24gcmVhZFByb3BGcm9tUHJvdG8oc3RhdGU6IEltbWVyU3RhdGUsIHNvdXJjZTogYW55LCBwcm9wOiBQcm9wZXJ0eUtleSkge1xuXHRjb25zdCBkZXNjID0gZ2V0RGVzY3JpcHRvckZyb21Qcm90byhzb3VyY2UsIHByb3ApXG5cdHJldHVybiBkZXNjXG5cdFx0PyBgdmFsdWVgIGluIGRlc2Ncblx0XHRcdD8gZGVzYy52YWx1ZVxuXHRcdFx0OiAvLyBUaGlzIGlzIGEgdmVyeSBzcGVjaWFsIGNhc2UsIGlmIHRoZSBwcm9wIGlzIGEgZ2V0dGVyIGRlZmluZWQgYnkgdGhlXG5cdFx0XHQgIC8vIHByb3RvdHlwZSwgd2Ugc2hvdWxkIGludm9rZSBpdCB3aXRoIHRoZSBkcmFmdCBhcyBjb250ZXh0IVxuXHRcdFx0ICBkZXNjLmdldD8uY2FsbChzdGF0ZS5kcmFmdF8pXG5cdFx0OiB1bmRlZmluZWRcbn1cblxuZnVuY3Rpb24gZ2V0RGVzY3JpcHRvckZyb21Qcm90byhcblx0c291cmNlOiBhbnksXG5cdHByb3A6IFByb3BlcnR5S2V5XG4pOiBQcm9wZXJ0eURlc2NyaXB0b3IgfCB1bmRlZmluZWQge1xuXHQvLyAnaW4nIGNoZWNrcyBwcm90byFcblx0aWYgKCEocHJvcCBpbiBzb3VyY2UpKSByZXR1cm4gdW5kZWZpbmVkXG5cdGxldCBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihzb3VyY2UpXG5cdHdoaWxlIChwcm90bykge1xuXHRcdGNvbnN0IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByb3RvLCBwcm9wKVxuXHRcdGlmIChkZXNjKSByZXR1cm4gZGVzY1xuXHRcdHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvKVxuXHR9XG5cdHJldHVybiB1bmRlZmluZWRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hcmtDaGFuZ2VkKHN0YXRlOiBJbW1lclN0YXRlKSB7XG5cdGlmICghc3RhdGUubW9kaWZpZWRfKSB7XG5cdFx0c3RhdGUubW9kaWZpZWRfID0gdHJ1ZVxuXHRcdGlmIChzdGF0ZS5wYXJlbnRfKSB7XG5cdFx0XHRtYXJrQ2hhbmdlZChzdGF0ZS5wYXJlbnRfKVxuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlcGFyZUNvcHkoc3RhdGU6IHtiYXNlXzogYW55OyBjb3B5XzogYW55fSkge1xuXHRpZiAoIXN0YXRlLmNvcHlfKSB7XG5cdFx0c3RhdGUuY29weV8gPSBzaGFsbG93Q29weShzdGF0ZS5iYXNlXylcblx0fVxufVxuIiwgImltcG9ydCB7XG5cdElQcm9kdWNlV2l0aFBhdGNoZXMsXG5cdElQcm9kdWNlLFxuXHRJbW1lclN0YXRlLFxuXHREcmFmdGVkLFxuXHRpc0RyYWZ0YWJsZSxcblx0cHJvY2Vzc1Jlc3VsdCxcblx0UGF0Y2gsXG5cdE9iamVjdGlzaCxcblx0RFJBRlRfU1RBVEUsXG5cdERyYWZ0LFxuXHRQYXRjaExpc3RlbmVyLFxuXHRpc0RyYWZ0LFxuXHRpc01hcCxcblx0aXNTZXQsXG5cdGNyZWF0ZVByb3h5UHJveHksXG5cdGdldFBsdWdpbixcblx0ZGllLFxuXHRoYXNQcm94aWVzLFxuXHRlbnRlclNjb3BlLFxuXHRyZXZva2VTY29wZSxcblx0bGVhdmVTY29wZSxcblx0dXNlUGF0Y2hlc0luU2NvcGUsXG5cdGdldEN1cnJlbnRTY29wZSxcblx0Tk9USElORyxcblx0ZnJlZXplLFxuXHRjdXJyZW50XG59IGZyb20gXCIuLi9pbnRlcm5hbFwiXG5cbmludGVyZmFjZSBQcm9kdWNlcnNGbnMge1xuXHRwcm9kdWNlOiBJUHJvZHVjZVxuXHRwcm9kdWNlV2l0aFBhdGNoZXM6IElQcm9kdWNlV2l0aFBhdGNoZXNcbn1cblxuZXhwb3J0IGNsYXNzIEltbWVyIGltcGxlbWVudHMgUHJvZHVjZXJzRm5zIHtcblx0dXNlUHJveGllc186IGJvb2xlYW4gPSBoYXNQcm94aWVzXG5cblx0YXV0b0ZyZWV6ZV86IGJvb2xlYW4gPSB0cnVlXG5cblx0Y29uc3RydWN0b3IoY29uZmlnPzoge3VzZVByb3hpZXM/OiBib29sZWFuOyBhdXRvRnJlZXplPzogYm9vbGVhbn0pIHtcblx0XHRpZiAodHlwZW9mIGNvbmZpZz8udXNlUHJveGllcyA9PT0gXCJib29sZWFuXCIpXG5cdFx0XHR0aGlzLnNldFVzZVByb3hpZXMoY29uZmlnIS51c2VQcm94aWVzKVxuXHRcdGlmICh0eXBlb2YgY29uZmlnPy5hdXRvRnJlZXplID09PSBcImJvb2xlYW5cIilcblx0XHRcdHRoaXMuc2V0QXV0b0ZyZWV6ZShjb25maWchLmF1dG9GcmVlemUpXG5cdH1cblxuXHQvKipcblx0ICogVGhlIGBwcm9kdWNlYCBmdW5jdGlvbiB0YWtlcyBhIHZhbHVlIGFuZCBhIFwicmVjaXBlIGZ1bmN0aW9uXCIgKHdob3NlXG5cdCAqIHJldHVybiB2YWx1ZSBvZnRlbiBkZXBlbmRzIG9uIHRoZSBiYXNlIHN0YXRlKS4gVGhlIHJlY2lwZSBmdW5jdGlvbiBpc1xuXHQgKiBmcmVlIHRvIG11dGF0ZSBpdHMgZmlyc3QgYXJndW1lbnQgaG93ZXZlciBpdCB3YW50cy4gQWxsIG11dGF0aW9ucyBhcmVcblx0ICogb25seSBldmVyIGFwcGxpZWQgdG8gYSBfX2NvcHlfXyBvZiB0aGUgYmFzZSBzdGF0ZS5cblx0ICpcblx0ICogUGFzcyBvbmx5IGEgZnVuY3Rpb24gdG8gY3JlYXRlIGEgXCJjdXJyaWVkIHByb2R1Y2VyXCIgd2hpY2ggcmVsaWV2ZXMgeW91XG5cdCAqIGZyb20gcGFzc2luZyB0aGUgcmVjaXBlIGZ1bmN0aW9uIGV2ZXJ5IHRpbWUuXG5cdCAqXG5cdCAqIE9ubHkgcGxhaW4gb2JqZWN0cyBhbmQgYXJyYXlzIGFyZSBtYWRlIG11dGFibGUuIEFsbCBvdGhlciBvYmplY3RzIGFyZVxuXHQgKiBjb25zaWRlcmVkIHVuY29weWFibGUuXG5cdCAqXG5cdCAqIE5vdGU6IFRoaXMgZnVuY3Rpb24gaXMgX19ib3VuZF9fIHRvIGl0cyBgSW1tZXJgIGluc3RhbmNlLlxuXHQgKlxuXHQgKiBAcGFyYW0ge2FueX0gYmFzZSAtIHRoZSBpbml0aWFsIHN0YXRlXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IHJlY2lwZSAtIGZ1bmN0aW9uIHRoYXQgcmVjZWl2ZXMgYSBwcm94eSBvZiB0aGUgYmFzZSBzdGF0ZSBhcyBmaXJzdCBhcmd1bWVudCBhbmQgd2hpY2ggY2FuIGJlIGZyZWVseSBtb2RpZmllZFxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwYXRjaExpc3RlbmVyIC0gb3B0aW9uYWwgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCB3aXRoIGFsbCB0aGUgcGF0Y2hlcyBwcm9kdWNlZCBoZXJlXG5cdCAqIEByZXR1cm5zIHthbnl9IGEgbmV3IHN0YXRlLCBvciB0aGUgaW5pdGlhbCBzdGF0ZSBpZiBub3RoaW5nIHdhcyBtb2RpZmllZFxuXHQgKi9cblx0cHJvZHVjZTogSVByb2R1Y2UgPSAoYmFzZTogYW55LCByZWNpcGU/OiBhbnksIHBhdGNoTGlzdGVuZXI/OiBhbnkpID0+IHtcblx0XHQvLyBjdXJyaWVkIGludm9jYXRpb25cblx0XHRpZiAodHlwZW9mIGJhc2UgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgcmVjaXBlICE9PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdGNvbnN0IGRlZmF1bHRCYXNlID0gcmVjaXBlXG5cdFx0XHRyZWNpcGUgPSBiYXNlXG5cblx0XHRcdGNvbnN0IHNlbGYgPSB0aGlzXG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gY3VycmllZFByb2R1Y2UoXG5cdFx0XHRcdHRoaXM6IGFueSxcblx0XHRcdFx0YmFzZSA9IGRlZmF1bHRCYXNlLFxuXHRcdFx0XHQuLi5hcmdzOiBhbnlbXVxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybiBzZWxmLnByb2R1Y2UoYmFzZSwgKGRyYWZ0OiBEcmFmdGVkKSA9PiByZWNpcGUuY2FsbCh0aGlzLCBkcmFmdCwgLi4uYXJncykpIC8vIHByZXR0aWVyLWlnbm9yZVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICh0eXBlb2YgcmVjaXBlICE9PSBcImZ1bmN0aW9uXCIpIGRpZSg2KVxuXHRcdGlmIChwYXRjaExpc3RlbmVyICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIHBhdGNoTGlzdGVuZXIgIT09IFwiZnVuY3Rpb25cIilcblx0XHRcdGRpZSg3KVxuXG5cdFx0bGV0IHJlc3VsdFxuXG5cdFx0Ly8gT25seSBwbGFpbiBvYmplY3RzLCBhcnJheXMsIGFuZCBcImltbWVyYWJsZSBjbGFzc2VzXCIgYXJlIGRyYWZ0ZWQuXG5cdFx0aWYgKGlzRHJhZnRhYmxlKGJhc2UpKSB7XG5cdFx0XHRjb25zdCBzY29wZSA9IGVudGVyU2NvcGUodGhpcylcblx0XHRcdGNvbnN0IHByb3h5ID0gY3JlYXRlUHJveHkodGhpcywgYmFzZSwgdW5kZWZpbmVkKVxuXHRcdFx0bGV0IGhhc0Vycm9yID0gdHJ1ZVxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0cmVzdWx0ID0gcmVjaXBlKHByb3h5KVxuXHRcdFx0XHRoYXNFcnJvciA9IGZhbHNlXG5cdFx0XHR9IGZpbmFsbHkge1xuXHRcdFx0XHQvLyBmaW5hbGx5IGluc3RlYWQgb2YgY2F0Y2ggKyByZXRocm93IGJldHRlciBwcmVzZXJ2ZXMgb3JpZ2luYWwgc3RhY2tcblx0XHRcdFx0aWYgKGhhc0Vycm9yKSByZXZva2VTY29wZShzY29wZSlcblx0XHRcdFx0ZWxzZSBsZWF2ZVNjb3BlKHNjb3BlKVxuXHRcdFx0fVxuXHRcdFx0aWYgKHR5cGVvZiBQcm9taXNlICE9PSBcInVuZGVmaW5lZFwiICYmIHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcblx0XHRcdFx0cmV0dXJuIHJlc3VsdC50aGVuKFxuXHRcdFx0XHRcdHJlc3VsdCA9PiB7XG5cdFx0XHRcdFx0XHR1c2VQYXRjaGVzSW5TY29wZShzY29wZSwgcGF0Y2hMaXN0ZW5lcilcblx0XHRcdFx0XHRcdHJldHVybiBwcm9jZXNzUmVzdWx0KHJlc3VsdCwgc2NvcGUpXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRlcnJvciA9PiB7XG5cdFx0XHRcdFx0XHRyZXZva2VTY29wZShzY29wZSlcblx0XHRcdFx0XHRcdHRocm93IGVycm9yXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpXG5cdFx0XHR9XG5cdFx0XHR1c2VQYXRjaGVzSW5TY29wZShzY29wZSwgcGF0Y2hMaXN0ZW5lcilcblx0XHRcdHJldHVybiBwcm9jZXNzUmVzdWx0KHJlc3VsdCwgc2NvcGUpXG5cdFx0fSBlbHNlIGlmICghYmFzZSB8fCB0eXBlb2YgYmFzZSAhPT0gXCJvYmplY3RcIikge1xuXHRcdFx0cmVzdWx0ID0gcmVjaXBlKGJhc2UpXG5cdFx0XHRpZiAocmVzdWx0ID09PSB1bmRlZmluZWQpIHJlc3VsdCA9IGJhc2Vcblx0XHRcdGlmIChyZXN1bHQgPT09IE5PVEhJTkcpIHJlc3VsdCA9IHVuZGVmaW5lZFxuXHRcdFx0aWYgKHRoaXMuYXV0b0ZyZWV6ZV8pIGZyZWV6ZShyZXN1bHQsIHRydWUpXG5cdFx0XHRpZiAocGF0Y2hMaXN0ZW5lcikge1xuXHRcdFx0XHRjb25zdCBwOiBQYXRjaFtdID0gW11cblx0XHRcdFx0Y29uc3QgaXA6IFBhdGNoW10gPSBbXVxuXHRcdFx0XHRnZXRQbHVnaW4oXCJQYXRjaGVzXCIpLmdlbmVyYXRlUmVwbGFjZW1lbnRQYXRjaGVzXyhiYXNlLCByZXN1bHQsIHAsIGlwKVxuXHRcdFx0XHRwYXRjaExpc3RlbmVyKHAsIGlwKVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlc3VsdFxuXHRcdH0gZWxzZSBkaWUoMjEsIGJhc2UpXG5cdH1cblxuXHRwcm9kdWNlV2l0aFBhdGNoZXM6IElQcm9kdWNlV2l0aFBhdGNoZXMgPSAoYmFzZTogYW55LCByZWNpcGU/OiBhbnkpOiBhbnkgPT4ge1xuXHRcdC8vIGN1cnJpZWQgaW52b2NhdGlvblxuXHRcdGlmICh0eXBlb2YgYmFzZSA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHRyZXR1cm4gKHN0YXRlOiBhbnksIC4uLmFyZ3M6IGFueVtdKSA9PlxuXHRcdFx0XHR0aGlzLnByb2R1Y2VXaXRoUGF0Y2hlcyhzdGF0ZSwgKGRyYWZ0OiBhbnkpID0+IGJhc2UoZHJhZnQsIC4uLmFyZ3MpKVxuXHRcdH1cblxuXHRcdGxldCBwYXRjaGVzOiBQYXRjaFtdLCBpbnZlcnNlUGF0Y2hlczogUGF0Y2hbXVxuXHRcdGNvbnN0IHJlc3VsdCA9IHRoaXMucHJvZHVjZShiYXNlLCByZWNpcGUsIChwOiBQYXRjaFtdLCBpcDogUGF0Y2hbXSkgPT4ge1xuXHRcdFx0cGF0Y2hlcyA9IHBcblx0XHRcdGludmVyc2VQYXRjaGVzID0gaXBcblx0XHR9KVxuXG5cdFx0aWYgKHR5cGVvZiBQcm9taXNlICE9PSBcInVuZGVmaW5lZFwiICYmIHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcblx0XHRcdHJldHVybiByZXN1bHQudGhlbihuZXh0U3RhdGUgPT4gW25leHRTdGF0ZSwgcGF0Y2hlcyEsIGludmVyc2VQYXRjaGVzIV0pXG5cdFx0fVxuXHRcdHJldHVybiBbcmVzdWx0LCBwYXRjaGVzISwgaW52ZXJzZVBhdGNoZXMhXVxuXHR9XG5cblx0Y3JlYXRlRHJhZnQ8VCBleHRlbmRzIE9iamVjdGlzaD4oYmFzZTogVCk6IERyYWZ0PFQ+IHtcblx0XHRpZiAoIWlzRHJhZnRhYmxlKGJhc2UpKSBkaWUoOClcblx0XHRpZiAoaXNEcmFmdChiYXNlKSkgYmFzZSA9IGN1cnJlbnQoYmFzZSlcblx0XHRjb25zdCBzY29wZSA9IGVudGVyU2NvcGUodGhpcylcblx0XHRjb25zdCBwcm94eSA9IGNyZWF0ZVByb3h5KHRoaXMsIGJhc2UsIHVuZGVmaW5lZClcblx0XHRwcm94eVtEUkFGVF9TVEFURV0uaXNNYW51YWxfID0gdHJ1ZVxuXHRcdGxlYXZlU2NvcGUoc2NvcGUpXG5cdFx0cmV0dXJuIHByb3h5IGFzIGFueVxuXHR9XG5cblx0ZmluaXNoRHJhZnQ8RCBleHRlbmRzIERyYWZ0PGFueT4+KFxuXHRcdGRyYWZ0OiBELFxuXHRcdHBhdGNoTGlzdGVuZXI/OiBQYXRjaExpc3RlbmVyXG5cdCk6IEQgZXh0ZW5kcyBEcmFmdDxpbmZlciBUPiA/IFQgOiBuZXZlciB7XG5cdFx0Y29uc3Qgc3RhdGU6IEltbWVyU3RhdGUgPSBkcmFmdCAmJiAoZHJhZnQgYXMgYW55KVtEUkFGVF9TVEFURV1cblx0XHRpZiAoX19ERVZfXykge1xuXHRcdFx0aWYgKCFzdGF0ZSB8fCAhc3RhdGUuaXNNYW51YWxfKSBkaWUoOSlcblx0XHRcdGlmIChzdGF0ZS5maW5hbGl6ZWRfKSBkaWUoMTApXG5cdFx0fVxuXHRcdGNvbnN0IHtzY29wZV86IHNjb3BlfSA9IHN0YXRlXG5cdFx0dXNlUGF0Y2hlc0luU2NvcGUoc2NvcGUsIHBhdGNoTGlzdGVuZXIpXG5cdFx0cmV0dXJuIHByb2Nlc3NSZXN1bHQodW5kZWZpbmVkLCBzY29wZSlcblx0fVxuXG5cdC8qKlxuXHQgKiBQYXNzIHRydWUgdG8gYXV0b21hdGljYWxseSBmcmVlemUgYWxsIGNvcGllcyBjcmVhdGVkIGJ5IEltbWVyLlxuXHQgKlxuXHQgKiBCeSBkZWZhdWx0LCBhdXRvLWZyZWV6aW5nIGlzIGVuYWJsZWQuXG5cdCAqL1xuXHRzZXRBdXRvRnJlZXplKHZhbHVlOiBib29sZWFuKSB7XG5cdFx0dGhpcy5hdXRvRnJlZXplXyA9IHZhbHVlXG5cdH1cblxuXHQvKipcblx0ICogUGFzcyB0cnVlIHRvIHVzZSB0aGUgRVMyMDE1IGBQcm94eWAgY2xhc3Mgd2hlbiBjcmVhdGluZyBkcmFmdHMsIHdoaWNoIGlzXG5cdCAqIGFsd2F5cyBmYXN0ZXIgdGhhbiB1c2luZyBFUzUgcHJveGllcy5cblx0ICpcblx0ICogQnkgZGVmYXVsdCwgZmVhdHVyZSBkZXRlY3Rpb24gaXMgdXNlZCwgc28gY2FsbGluZyB0aGlzIGlzIHJhcmVseSBuZWNlc3NhcnkuXG5cdCAqL1xuXHRzZXRVc2VQcm94aWVzKHZhbHVlOiBib29sZWFuKSB7XG5cdFx0aWYgKHZhbHVlICYmICFoYXNQcm94aWVzKSB7XG5cdFx0XHRkaWUoMjApXG5cdFx0fVxuXHRcdHRoaXMudXNlUHJveGllc18gPSB2YWx1ZVxuXHR9XG5cblx0YXBwbHlQYXRjaGVzPFQgZXh0ZW5kcyBPYmplY3Rpc2g+KGJhc2U6IFQsIHBhdGNoZXM6IFBhdGNoW10pOiBUIHtcblx0XHQvLyBJZiBhIHBhdGNoIHJlcGxhY2VzIHRoZSBlbnRpcmUgc3RhdGUsIHRha2UgdGhhdCByZXBsYWNlbWVudCBhcyBiYXNlXG5cdFx0Ly8gYmVmb3JlIGFwcGx5aW5nIHBhdGNoZXNcblx0XHRsZXQgaTogbnVtYmVyXG5cdFx0Zm9yIChpID0gcGF0Y2hlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuXHRcdFx0Y29uc3QgcGF0Y2ggPSBwYXRjaGVzW2ldXG5cdFx0XHRpZiAocGF0Y2gucGF0aC5sZW5ndGggPT09IDAgJiYgcGF0Y2gub3AgPT09IFwicmVwbGFjZVwiKSB7XG5cdFx0XHRcdGJhc2UgPSBwYXRjaC52YWx1ZVxuXHRcdFx0XHRicmVha1xuXHRcdFx0fVxuXHRcdH1cblx0XHQvLyBJZiB0aGVyZSB3YXMgYSBwYXRjaCB0aGF0IHJlcGxhY2VkIHRoZSBlbnRpcmUgc3RhdGUsIHN0YXJ0IGZyb20gdGhlXG5cdFx0Ly8gcGF0Y2ggYWZ0ZXIgdGhhdC5cblx0XHRpZiAoaSA+IC0xKSB7XG5cdFx0XHRwYXRjaGVzID0gcGF0Y2hlcy5zbGljZShpICsgMSlcblx0XHR9XG5cblx0XHRjb25zdCBhcHBseVBhdGNoZXNJbXBsID0gZ2V0UGx1Z2luKFwiUGF0Y2hlc1wiKS5hcHBseVBhdGNoZXNfXG5cdFx0aWYgKGlzRHJhZnQoYmFzZSkpIHtcblx0XHRcdC8vIE4uQjogbmV2ZXIgaGl0cyBpZiBzb21lIHBhdGNoIGEgcmVwbGFjZW1lbnQsIHBhdGNoZXMgYXJlIG5ldmVyIGRyYWZ0c1xuXHRcdFx0cmV0dXJuIGFwcGx5UGF0Y2hlc0ltcGwoYmFzZSwgcGF0Y2hlcylcblx0XHR9XG5cdFx0Ly8gT3RoZXJ3aXNlLCBwcm9kdWNlIGEgY29weSBvZiB0aGUgYmFzZSBzdGF0ZS5cblx0XHRyZXR1cm4gdGhpcy5wcm9kdWNlKGJhc2UsIChkcmFmdDogRHJhZnRlZCkgPT5cblx0XHRcdGFwcGx5UGF0Y2hlc0ltcGwoZHJhZnQsIHBhdGNoZXMpXG5cdFx0KVxuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQcm94eTxUIGV4dGVuZHMgT2JqZWN0aXNoPihcblx0aW1tZXI6IEltbWVyLFxuXHR2YWx1ZTogVCxcblx0cGFyZW50PzogSW1tZXJTdGF0ZVxuKTogRHJhZnRlZDxULCBJbW1lclN0YXRlPiB7XG5cdC8vIHByZWNvbmRpdGlvbjogY3JlYXRlUHJveHkgc2hvdWxkIGJlIGd1YXJkZWQgYnkgaXNEcmFmdGFibGUsIHNvIHdlIGtub3cgd2UgY2FuIHNhZmVseSBkcmFmdFxuXHRjb25zdCBkcmFmdDogRHJhZnRlZCA9IGlzTWFwKHZhbHVlKVxuXHRcdD8gZ2V0UGx1Z2luKFwiTWFwU2V0XCIpLnByb3h5TWFwXyh2YWx1ZSwgcGFyZW50KVxuXHRcdDogaXNTZXQodmFsdWUpXG5cdFx0PyBnZXRQbHVnaW4oXCJNYXBTZXRcIikucHJveHlTZXRfKHZhbHVlLCBwYXJlbnQpXG5cdFx0OiBpbW1lci51c2VQcm94aWVzX1xuXHRcdD8gY3JlYXRlUHJveHlQcm94eSh2YWx1ZSwgcGFyZW50KVxuXHRcdDogZ2V0UGx1Z2luKFwiRVM1XCIpLmNyZWF0ZUVTNVByb3h5Xyh2YWx1ZSwgcGFyZW50KVxuXG5cdGNvbnN0IHNjb3BlID0gcGFyZW50ID8gcGFyZW50LnNjb3BlXyA6IGdldEN1cnJlbnRTY29wZSgpXG5cdHNjb3BlLmRyYWZ0c18ucHVzaChkcmFmdClcblx0cmV0dXJuIGRyYWZ0XG59XG4iLCAiaW1wb3J0IHtcblx0ZGllLFxuXHRpc0RyYWZ0LFxuXHRzaGFsbG93Q29weSxcblx0ZWFjaCxcblx0RFJBRlRfU1RBVEUsXG5cdGdldCxcblx0c2V0LFxuXHRJbW1lclN0YXRlLFxuXHRpc0RyYWZ0YWJsZSxcblx0QXJjaHR5cGUsXG5cdGdldEFyY2h0eXBlLFxuXHRnZXRQbHVnaW5cbn0gZnJvbSBcIi4uL2ludGVybmFsXCJcblxuLyoqIFRha2VzIGEgc25hcHNob3Qgb2YgdGhlIGN1cnJlbnQgc3RhdGUgb2YgYSBkcmFmdCBhbmQgZmluYWxpemVzIGl0IChidXQgd2l0aG91dCBmcmVlemluZykuIFRoaXMgaXMgYSBncmVhdCB1dGlsaXR5IHRvIHByaW50IHRoZSBjdXJyZW50IHN0YXRlIGR1cmluZyBkZWJ1Z2dpbmcgKG5vIFByb3hpZXMgaW4gdGhlIHdheSkuIFRoZSBvdXRwdXQgb2YgY3VycmVudCBjYW4gYWxzbyBiZSBzYWZlbHkgbGVha2VkIG91dHNpZGUgdGhlIHByb2R1Y2VyLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGN1cnJlbnQ8VD4odmFsdWU6IFQpOiBUXG5leHBvcnQgZnVuY3Rpb24gY3VycmVudCh2YWx1ZTogYW55KTogYW55IHtcblx0aWYgKCFpc0RyYWZ0KHZhbHVlKSkgZGllKDIyLCB2YWx1ZSlcblx0cmV0dXJuIGN1cnJlbnRJbXBsKHZhbHVlKVxufVxuXG5mdW5jdGlvbiBjdXJyZW50SW1wbCh2YWx1ZTogYW55KTogYW55IHtcblx0aWYgKCFpc0RyYWZ0YWJsZSh2YWx1ZSkpIHJldHVybiB2YWx1ZVxuXHRjb25zdCBzdGF0ZTogSW1tZXJTdGF0ZSB8IHVuZGVmaW5lZCA9IHZhbHVlW0RSQUZUX1NUQVRFXVxuXHRsZXQgY29weTogYW55XG5cdGNvbnN0IGFyY2hUeXBlID0gZ2V0QXJjaHR5cGUodmFsdWUpXG5cdGlmIChzdGF0ZSkge1xuXHRcdGlmIChcblx0XHRcdCFzdGF0ZS5tb2RpZmllZF8gJiZcblx0XHRcdChzdGF0ZS50eXBlXyA8IDQgfHwgIWdldFBsdWdpbihcIkVTNVwiKS5oYXNDaGFuZ2VzXyhzdGF0ZSBhcyBhbnkpKVxuXHRcdClcblx0XHRcdHJldHVybiBzdGF0ZS5iYXNlX1xuXHRcdC8vIE9wdGltaXphdGlvbjogYXZvaWQgZ2VuZXJhdGluZyBuZXcgZHJhZnRzIGR1cmluZyBjb3B5aW5nXG5cdFx0c3RhdGUuZmluYWxpemVkXyA9IHRydWVcblx0XHRjb3B5ID0gY29weUhlbHBlcih2YWx1ZSwgYXJjaFR5cGUpXG5cdFx0c3RhdGUuZmluYWxpemVkXyA9IGZhbHNlXG5cdH0gZWxzZSB7XG5cdFx0Y29weSA9IGNvcHlIZWxwZXIodmFsdWUsIGFyY2hUeXBlKVxuXHR9XG5cblx0ZWFjaChjb3B5LCAoa2V5LCBjaGlsZFZhbHVlKSA9PiB7XG5cdFx0aWYgKHN0YXRlICYmIGdldChzdGF0ZS5iYXNlXywga2V5KSA9PT0gY2hpbGRWYWx1ZSkgcmV0dXJuIC8vIG5vIG5lZWQgdG8gY29weSBvciBzZWFyY2ggaW4gc29tZXRoaW5nIHRoYXQgZGlkbid0IGNoYW5nZVxuXHRcdHNldChjb3B5LCBrZXksIGN1cnJlbnRJbXBsKGNoaWxkVmFsdWUpKVxuXHR9KVxuXHQvLyBJbiB0aGUgZnV0dXJlLCB3ZSBtaWdodCBjb25zaWRlciBmcmVlemluZyBoZXJlLCBiYXNlZCBvbiB0aGUgY3VycmVudCBzZXR0aW5nc1xuXHRyZXR1cm4gYXJjaFR5cGUgPT09IEFyY2h0eXBlLlNldCA/IG5ldyBTZXQoY29weSkgOiBjb3B5XG59XG5cbmZ1bmN0aW9uIGNvcHlIZWxwZXIodmFsdWU6IGFueSwgYXJjaFR5cGU6IG51bWJlcik6IGFueSB7XG5cdC8vIGNyZWF0ZXMgYSBzaGFsbG93IGNvcHksIGV2ZW4gaWYgaXQgaXMgYSBtYXAgb3Igc2V0XG5cdHN3aXRjaCAoYXJjaFR5cGUpIHtcblx0XHRjYXNlIEFyY2h0eXBlLk1hcDpcblx0XHRcdHJldHVybiBuZXcgTWFwKHZhbHVlKVxuXHRcdGNhc2UgQXJjaHR5cGUuU2V0OlxuXHRcdFx0Ly8gU2V0IHdpbGwgYmUgY2xvbmVkIGFzIGFycmF5IHRlbXBvcmFyaWx5LCBzbyB0aGF0IHdlIGNhbiByZXBsYWNlIGluZGl2aWR1YWwgaXRlbXNcblx0XHRcdHJldHVybiBBcnJheS5mcm9tKHZhbHVlKVxuXHR9XG5cdHJldHVybiBzaGFsbG93Q29weSh2YWx1ZSlcbn1cbiIsICJpbXBvcnQge1xuXHRJbW1lclN0YXRlLFxuXHREcmFmdGVkLFxuXHRFUzVBcnJheVN0YXRlLFxuXHRFUzVPYmplY3RTdGF0ZSxcblx0ZWFjaCxcblx0aGFzLFxuXHRpc0RyYWZ0LFxuXHRsYXRlc3QsXG5cdERSQUZUX1NUQVRFLFxuXHRpcyxcblx0bG9hZFBsdWdpbixcblx0SW1tZXJTY29wZSxcblx0UHJveHlUeXBlLFxuXHRnZXRDdXJyZW50U2NvcGUsXG5cdGRpZSxcblx0bWFya0NoYW5nZWQsXG5cdG9iamVjdFRyYXBzLFxuXHRvd25LZXlzLFxuXHRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzXG59IGZyb20gXCIuLi9pbnRlcm5hbFwiXG5cbnR5cGUgRVM1U3RhdGUgPSBFUzVBcnJheVN0YXRlIHwgRVM1T2JqZWN0U3RhdGVcblxuZXhwb3J0IGZ1bmN0aW9uIGVuYWJsZUVTNSgpIHtcblx0ZnVuY3Rpb24gd2lsbEZpbmFsaXplRVM1Xyhcblx0XHRzY29wZTogSW1tZXJTY29wZSxcblx0XHRyZXN1bHQ6IGFueSxcblx0XHRpc1JlcGxhY2VkOiBib29sZWFuXG5cdCkge1xuXHRcdGlmICghaXNSZXBsYWNlZCkge1xuXHRcdFx0aWYgKHNjb3BlLnBhdGNoZXNfKSB7XG5cdFx0XHRcdG1hcmtDaGFuZ2VzUmVjdXJzaXZlbHkoc2NvcGUuZHJhZnRzXyFbMF0pXG5cdFx0XHR9XG5cdFx0XHQvLyBUaGlzIGlzIGZhc3RlciB3aGVuIHdlIGRvbid0IGNhcmUgYWJvdXQgd2hpY2ggYXR0cmlidXRlcyBjaGFuZ2VkLlxuXHRcdFx0bWFya0NoYW5nZXNTd2VlcChzY29wZS5kcmFmdHNfKVxuXHRcdH1cblx0XHQvLyBXaGVuIGEgY2hpbGQgZHJhZnQgaXMgcmV0dXJuZWQsIGxvb2sgZm9yIGNoYW5nZXMuXG5cdFx0ZWxzZSBpZiAoXG5cdFx0XHRpc0RyYWZ0KHJlc3VsdCkgJiZcblx0XHRcdChyZXN1bHRbRFJBRlRfU1RBVEVdIGFzIEVTNVN0YXRlKS5zY29wZV8gPT09IHNjb3BlXG5cdFx0KSB7XG5cdFx0XHRtYXJrQ2hhbmdlc1N3ZWVwKHNjb3BlLmRyYWZ0c18pXG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gY3JlYXRlRVM1RHJhZnQoaXNBcnJheTogYm9vbGVhbiwgYmFzZTogYW55KSB7XG5cdFx0aWYgKGlzQXJyYXkpIHtcblx0XHRcdGNvbnN0IGRyYWZ0ID0gbmV3IEFycmF5KGJhc2UubGVuZ3RoKVxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBiYXNlLmxlbmd0aDsgaSsrKVxuXHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZHJhZnQsIFwiXCIgKyBpLCBwcm94eVByb3BlcnR5KGksIHRydWUpKVxuXHRcdFx0cmV0dXJuIGRyYWZ0XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IGRlc2NyaXB0b3JzID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhiYXNlKVxuXHRcdFx0ZGVsZXRlIGRlc2NyaXB0b3JzW0RSQUZUX1NUQVRFIGFzIGFueV1cblx0XHRcdGNvbnN0IGtleXMgPSBvd25LZXlzKGRlc2NyaXB0b3JzKVxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGNvbnN0IGtleTogYW55ID0ga2V5c1tpXVxuXHRcdFx0XHRkZXNjcmlwdG9yc1trZXldID0gcHJveHlQcm9wZXJ0eShcblx0XHRcdFx0XHRrZXksXG5cdFx0XHRcdFx0aXNBcnJheSB8fCAhIWRlc2NyaXB0b3JzW2tleV0uZW51bWVyYWJsZVxuXHRcdFx0XHQpXG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gT2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2YoYmFzZSksIGRlc2NyaXB0b3JzKVxuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIGNyZWF0ZUVTNVByb3h5XzxUPihcblx0XHRiYXNlOiBULFxuXHRcdHBhcmVudD86IEltbWVyU3RhdGVcblx0KTogRHJhZnRlZDxULCBFUzVPYmplY3RTdGF0ZSB8IEVTNUFycmF5U3RhdGU+IHtcblx0XHRjb25zdCBpc0FycmF5ID0gQXJyYXkuaXNBcnJheShiYXNlKVxuXHRcdGNvbnN0IGRyYWZ0ID0gY3JlYXRlRVM1RHJhZnQoaXNBcnJheSwgYmFzZSlcblxuXHRcdGNvbnN0IHN0YXRlOiBFUzVPYmplY3RTdGF0ZSB8IEVTNUFycmF5U3RhdGUgPSB7XG5cdFx0XHR0eXBlXzogaXNBcnJheSA/IFByb3h5VHlwZS5FUzVBcnJheSA6IChQcm94eVR5cGUuRVM1T2JqZWN0IGFzIGFueSksXG5cdFx0XHRzY29wZV86IHBhcmVudCA/IHBhcmVudC5zY29wZV8gOiBnZXRDdXJyZW50U2NvcGUoKSxcblx0XHRcdG1vZGlmaWVkXzogZmFsc2UsXG5cdFx0XHRmaW5hbGl6ZWRfOiBmYWxzZSxcblx0XHRcdGFzc2lnbmVkXzoge30sXG5cdFx0XHRwYXJlbnRfOiBwYXJlbnQsXG5cdFx0XHQvLyBiYXNlIGlzIHRoZSBvYmplY3Qgd2UgYXJlIGRyYWZ0aW5nXG5cdFx0XHRiYXNlXzogYmFzZSxcblx0XHRcdC8vIGRyYWZ0IGlzIHRoZSBkcmFmdCBvYmplY3QgaXRzZWxmLCB0aGF0IHRyYXBzIGFsbCByZWFkcyBhbmQgcmVhZHMgZnJvbSBlaXRoZXIgdGhlIGJhc2UgKGlmIHVubW9kaWZpZWQpIG9yIGNvcHkgKGlmIG1vZGlmaWVkKVxuXHRcdFx0ZHJhZnRfOiBkcmFmdCxcblx0XHRcdGNvcHlfOiBudWxsLFxuXHRcdFx0cmV2b2tlZF86IGZhbHNlLFxuXHRcdFx0aXNNYW51YWxfOiBmYWxzZVxuXHRcdH1cblxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkcmFmdCwgRFJBRlRfU1RBVEUsIHtcblx0XHRcdHZhbHVlOiBzdGF0ZSxcblx0XHRcdC8vIGVudW1lcmFibGU6IGZhbHNlIDwtIHRoZSBkZWZhdWx0XG5cdFx0XHR3cml0YWJsZTogdHJ1ZVxuXHRcdH0pXG5cdFx0cmV0dXJuIGRyYWZ0XG5cdH1cblxuXHQvLyBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBhcmUgcmVjeWNsZWQgdG8gbWFrZSBzdXJlIHdlIGRvbid0IGNyZWF0ZSBhIGdldCBhbmQgc2V0IGNsb3N1cmUgcGVyIHByb3BlcnR5LFxuXHQvLyBidXQgc2hhcmUgdGhlbSBhbGwgaW5zdGVhZFxuXHRjb25zdCBkZXNjcmlwdG9yczoge1twcm9wOiBzdHJpbmddOiBQcm9wZXJ0eURlc2NyaXB0b3J9ID0ge31cblxuXHRmdW5jdGlvbiBwcm94eVByb3BlcnR5KFxuXHRcdHByb3A6IHN0cmluZyB8IG51bWJlcixcblx0XHRlbnVtZXJhYmxlOiBib29sZWFuXG5cdCk6IFByb3BlcnR5RGVzY3JpcHRvciB7XG5cdFx0bGV0IGRlc2MgPSBkZXNjcmlwdG9yc1twcm9wXVxuXHRcdGlmIChkZXNjKSB7XG5cdFx0XHRkZXNjLmVudW1lcmFibGUgPSBlbnVtZXJhYmxlXG5cdFx0fSBlbHNlIHtcblx0XHRcdGRlc2NyaXB0b3JzW3Byb3BdID0gZGVzYyA9IHtcblx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRlbnVtZXJhYmxlLFxuXHRcdFx0XHRnZXQodGhpczogYW55KSB7XG5cdFx0XHRcdFx0Y29uc3Qgc3RhdGUgPSB0aGlzW0RSQUZUX1NUQVRFXVxuXHRcdFx0XHRcdGlmIChfX0RFVl9fKSBhc3NlcnRVbnJldm9rZWQoc3RhdGUpXG5cdFx0XHRcdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdFx0XHRcdHJldHVybiBvYmplY3RUcmFwcy5nZXQoc3RhdGUsIHByb3ApXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHNldCh0aGlzOiBhbnksIHZhbHVlKSB7XG5cdFx0XHRcdFx0Y29uc3Qgc3RhdGUgPSB0aGlzW0RSQUZUX1NUQVRFXVxuXHRcdFx0XHRcdGlmIChfX0RFVl9fKSBhc3NlcnRVbnJldm9rZWQoc3RhdGUpXG5cdFx0XHRcdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdFx0XHRcdG9iamVjdFRyYXBzLnNldChzdGF0ZSwgcHJvcCwgdmFsdWUpXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGRlc2Ncblx0fVxuXG5cdC8vIFRoaXMgbG9va3MgZXhwZW5zaXZlLCBidXQgb25seSBwcm94aWVzIGFyZSB2aXNpdGVkLCBhbmQgb25seSBvYmplY3RzIHdpdGhvdXQga25vd24gY2hhbmdlcyBhcmUgc2Nhbm5lZC5cblx0ZnVuY3Rpb24gbWFya0NoYW5nZXNTd2VlcChkcmFmdHM6IERyYWZ0ZWQ8YW55LCBJbW1lclN0YXRlPltdKSB7XG5cdFx0Ly8gVGhlIG5hdHVyYWwgb3JkZXIgb2YgZHJhZnRzIGluIHRoZSBgc2NvcGVgIGFycmF5IGlzIGJhc2VkIG9uIHdoZW4gdGhleVxuXHRcdC8vIHdlcmUgYWNjZXNzZWQuIEJ5IHByb2Nlc3NpbmcgZHJhZnRzIGluIHJldmVyc2UgbmF0dXJhbCBvcmRlciwgd2UgaGF2ZSBhXG5cdFx0Ly8gYmV0dGVyIGNoYW5jZSBvZiBwcm9jZXNzaW5nIGxlYWYgbm9kZXMgZmlyc3QuIFdoZW4gYSBsZWFmIG5vZGUgaXMga25vd24gdG9cblx0XHQvLyBoYXZlIGNoYW5nZWQsIHdlIGNhbiBhdm9pZCBhbnkgdHJhdmVyc2FsIG9mIGl0cyBhbmNlc3RvciBub2Rlcy5cblx0XHRmb3IgKGxldCBpID0gZHJhZnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG5cdFx0XHRjb25zdCBzdGF0ZTogRVM1U3RhdGUgPSBkcmFmdHNbaV1bRFJBRlRfU1RBVEVdXG5cdFx0XHRpZiAoIXN0YXRlLm1vZGlmaWVkXykge1xuXHRcdFx0XHRzd2l0Y2ggKHN0YXRlLnR5cGVfKSB7XG5cdFx0XHRcdFx0Y2FzZSBQcm94eVR5cGUuRVM1QXJyYXk6XG5cdFx0XHRcdFx0XHRpZiAoaGFzQXJyYXlDaGFuZ2VzKHN0YXRlKSkgbWFya0NoYW5nZWQoc3RhdGUpXG5cdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdGNhc2UgUHJveHlUeXBlLkVTNU9iamVjdDpcblx0XHRcdFx0XHRcdGlmIChoYXNPYmplY3RDaGFuZ2VzKHN0YXRlKSkgbWFya0NoYW5nZWQoc3RhdGUpXG5cdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gbWFya0NoYW5nZXNSZWN1cnNpdmVseShvYmplY3Q6IGFueSkge1xuXHRcdGlmICghb2JqZWN0IHx8IHR5cGVvZiBvYmplY3QgIT09IFwib2JqZWN0XCIpIHJldHVyblxuXHRcdGNvbnN0IHN0YXRlOiBFUzVTdGF0ZSB8IHVuZGVmaW5lZCA9IG9iamVjdFtEUkFGVF9TVEFURV1cblx0XHRpZiAoIXN0YXRlKSByZXR1cm5cblx0XHRjb25zdCB7YmFzZV8sIGRyYWZ0XywgYXNzaWduZWRfLCB0eXBlX30gPSBzdGF0ZVxuXHRcdGlmICh0eXBlXyA9PT0gUHJveHlUeXBlLkVTNU9iamVjdCkge1xuXHRcdFx0Ly8gTG9vayBmb3IgYWRkZWQga2V5cy5cblx0XHRcdC8vIHByb2JhYmx5IHRoZXJlIGlzIGEgZmFzdGVyIHdheSB0byBkZXRlY3QgY2hhbmdlcywgYXMgc3dlZXAgKyByZWN1cnNlIHNlZW1zIHRvIGRvIHNvbWVcblx0XHRcdC8vIHVubmVjZXNzYXJ5IHdvcmsuXG5cdFx0XHQvLyBhbHNvOiBwcm9iYWJseSB3ZSBjYW4gc3RvcmUgdGhlIGluZm9ybWF0aW9uIHdlIGRldGVjdCBoZXJlLCB0byBzcGVlZCB1cCB0cmVlIGZpbmFsaXphdGlvbiFcblx0XHRcdGVhY2goZHJhZnRfLCBrZXkgPT4ge1xuXHRcdFx0XHRpZiAoKGtleSBhcyBhbnkpID09PSBEUkFGVF9TVEFURSkgcmV0dXJuXG5cdFx0XHRcdC8vIFRoZSBgdW5kZWZpbmVkYCBjaGVjayBpcyBhIGZhc3QgcGF0aCBmb3IgcHJlLWV4aXN0aW5nIGtleXMuXG5cdFx0XHRcdGlmICgoYmFzZV8gYXMgYW55KVtrZXldID09PSB1bmRlZmluZWQgJiYgIWhhcyhiYXNlXywga2V5KSkge1xuXHRcdFx0XHRcdGFzc2lnbmVkX1trZXldID0gdHJ1ZVxuXHRcdFx0XHRcdG1hcmtDaGFuZ2VkKHN0YXRlKVxuXHRcdFx0XHR9IGVsc2UgaWYgKCFhc3NpZ25lZF9ba2V5XSkge1xuXHRcdFx0XHRcdC8vIE9ubHkgdW50b3VjaGVkIHByb3BlcnRpZXMgdHJpZ2dlciByZWN1cnNpb24uXG5cdFx0XHRcdFx0bWFya0NoYW5nZXNSZWN1cnNpdmVseShkcmFmdF9ba2V5XSlcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdC8vIExvb2sgZm9yIHJlbW92ZWQga2V5cy5cblx0XHRcdGVhY2goYmFzZV8sIGtleSA9PiB7XG5cdFx0XHRcdC8vIFRoZSBgdW5kZWZpbmVkYCBjaGVjayBpcyBhIGZhc3QgcGF0aCBmb3IgcHJlLWV4aXN0aW5nIGtleXMuXG5cdFx0XHRcdGlmIChkcmFmdF9ba2V5XSA9PT0gdW5kZWZpbmVkICYmICFoYXMoZHJhZnRfLCBrZXkpKSB7XG5cdFx0XHRcdFx0YXNzaWduZWRfW2tleV0gPSBmYWxzZVxuXHRcdFx0XHRcdG1hcmtDaGFuZ2VkKHN0YXRlKVxuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdH0gZWxzZSBpZiAodHlwZV8gPT09IFByb3h5VHlwZS5FUzVBcnJheSkge1xuXHRcdFx0aWYgKGhhc0FycmF5Q2hhbmdlcyhzdGF0ZSBhcyBFUzVBcnJheVN0YXRlKSkge1xuXHRcdFx0XHRtYXJrQ2hhbmdlZChzdGF0ZSlcblx0XHRcdFx0YXNzaWduZWRfLmxlbmd0aCA9IHRydWVcblx0XHRcdH1cblxuXHRcdFx0aWYgKGRyYWZ0Xy5sZW5ndGggPCBiYXNlXy5sZW5ndGgpIHtcblx0XHRcdFx0Zm9yIChsZXQgaSA9IGRyYWZ0Xy5sZW5ndGg7IGkgPCBiYXNlXy5sZW5ndGg7IGkrKykgYXNzaWduZWRfW2ldID0gZmFsc2Vcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZvciAobGV0IGkgPSBiYXNlXy5sZW5ndGg7IGkgPCBkcmFmdF8ubGVuZ3RoOyBpKyspIGFzc2lnbmVkX1tpXSA9IHRydWVcblx0XHRcdH1cblxuXHRcdFx0Ly8gTWluaW11bSBjb3VudCBpcyBlbm91Z2gsIHRoZSBvdGhlciBwYXJ0cyBoYXMgYmVlbiBwcm9jZXNzZWQuXG5cdFx0XHRjb25zdCBtaW4gPSBNYXRoLm1pbihkcmFmdF8ubGVuZ3RoLCBiYXNlXy5sZW5ndGgpXG5cblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbWluOyBpKyspIHtcblx0XHRcdFx0Ly8gT25seSB1bnRvdWNoZWQgaW5kaWNlcyB0cmlnZ2VyIHJlY3Vyc2lvbi5cblx0XHRcdFx0aWYgKCFkcmFmdF8uaGFzT3duUHJvcGVydHkoaSkpIHtcblx0XHRcdFx0XHRhc3NpZ25lZF9baV0gPSB0cnVlXG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGFzc2lnbmVkX1tpXSA9PT0gdW5kZWZpbmVkKSBtYXJrQ2hhbmdlc1JlY3Vyc2l2ZWx5KGRyYWZ0X1tpXSlcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBoYXNPYmplY3RDaGFuZ2VzKHN0YXRlOiBFUzVPYmplY3RTdGF0ZSkge1xuXHRcdGNvbnN0IHtiYXNlXywgZHJhZnRffSA9IHN0YXRlXG5cblx0XHQvLyBTZWFyY2ggZm9yIGFkZGVkIGtleXMgYW5kIGNoYW5nZWQga2V5cy4gU3RhcnQgYXQgdGhlIGJhY2ssIGJlY2F1c2Vcblx0XHQvLyBub24tbnVtZXJpYyBrZXlzIGFyZSBvcmRlcmVkIGJ5IHRpbWUgb2YgZGVmaW5pdGlvbiBvbiB0aGUgb2JqZWN0LlxuXHRcdGNvbnN0IGtleXMgPSBvd25LZXlzKGRyYWZ0Xylcblx0XHRmb3IgKGxldCBpID0ga2V5cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuXHRcdFx0Y29uc3Qga2V5OiBhbnkgPSBrZXlzW2ldXG5cdFx0XHRpZiAoa2V5ID09PSBEUkFGVF9TVEFURSkgY29udGludWVcblx0XHRcdGNvbnN0IGJhc2VWYWx1ZSA9IGJhc2VfW2tleV1cblx0XHRcdC8vIFRoZSBgdW5kZWZpbmVkYCBjaGVjayBpcyBhIGZhc3QgcGF0aCBmb3IgcHJlLWV4aXN0aW5nIGtleXMuXG5cdFx0XHRpZiAoYmFzZVZhbHVlID09PSB1bmRlZmluZWQgJiYgIWhhcyhiYXNlXywga2V5KSkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZVxuXHRcdFx0fVxuXHRcdFx0Ly8gT25jZSBhIGJhc2Uga2V5IGlzIGRlbGV0ZWQsIGZ1dHVyZSBjaGFuZ2VzIGdvIHVuZGV0ZWN0ZWQsIGJlY2F1c2UgaXRzXG5cdFx0XHQvLyBkZXNjcmlwdG9yIGlzIGVyYXNlZC4gVGhpcyBicmFuY2ggZGV0ZWN0cyBhbnkgbWlzc2VkIGNoYW5nZXMuXG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0Y29uc3QgdmFsdWUgPSBkcmFmdF9ba2V5XVxuXHRcdFx0XHRjb25zdCBzdGF0ZTogSW1tZXJTdGF0ZSA9IHZhbHVlICYmIHZhbHVlW0RSQUZUX1NUQVRFXVxuXHRcdFx0XHRpZiAoc3RhdGUgPyBzdGF0ZS5iYXNlXyAhPT0gYmFzZVZhbHVlIDogIWlzKHZhbHVlLCBiYXNlVmFsdWUpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWVcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEF0IHRoaXMgcG9pbnQsIG5vIGtleXMgd2VyZSBhZGRlZCBvciBjaGFuZ2VkLlxuXHRcdC8vIENvbXBhcmUga2V5IGNvdW50IHRvIGRldGVybWluZSBpZiBrZXlzIHdlcmUgZGVsZXRlZC5cblx0XHRjb25zdCBiYXNlSXNEcmFmdCA9ICEhYmFzZV9bRFJBRlRfU1RBVEUgYXMgYW55XVxuXHRcdHJldHVybiBrZXlzLmxlbmd0aCAhPT0gb3duS2V5cyhiYXNlXykubGVuZ3RoICsgKGJhc2VJc0RyYWZ0ID8gMCA6IDEpIC8vICsgMSB0byBjb3JyZWN0IGZvciBEUkFGVF9TVEFURVxuXHR9XG5cblx0ZnVuY3Rpb24gaGFzQXJyYXlDaGFuZ2VzKHN0YXRlOiBFUzVBcnJheVN0YXRlKSB7XG5cdFx0Y29uc3Qge2RyYWZ0X30gPSBzdGF0ZVxuXHRcdGlmIChkcmFmdF8ubGVuZ3RoICE9PSBzdGF0ZS5iYXNlXy5sZW5ndGgpIHJldHVybiB0cnVlXG5cdFx0Ly8gU2VlICMxMTZcblx0XHQvLyBJZiB3ZSBmaXJzdCBzaG9ydGVuIHRoZSBsZW5ndGgsIG91ciBhcnJheSBpbnRlcmNlcHRvcnMgd2lsbCBiZSByZW1vdmVkLlxuXHRcdC8vIElmIGFmdGVyIHRoYXQgbmV3IGl0ZW1zIGFyZSBhZGRlZCwgcmVzdWx0IGluIHRoZSBzYW1lIG9yaWdpbmFsIGxlbmd0aCxcblx0XHQvLyB0aG9zZSBsYXN0IGl0ZW1zIHdpbGwgaGF2ZSBubyBpbnRlcmNlcHRpbmcgcHJvcGVydHkuXG5cdFx0Ly8gU28gaWYgdGhlcmUgaXMgbm8gb3duIGRlc2NyaXB0b3Igb24gdGhlIGxhc3QgcG9zaXRpb24sIHdlIGtub3cgdGhhdCBpdGVtcyB3ZXJlIHJlbW92ZWQgYW5kIGFkZGVkXG5cdFx0Ly8gTi5CLjogc3BsaWNlLCB1bnNoaWZ0LCBldGMgb25seSBzaGlmdCB2YWx1ZXMgYXJvdW5kLCBidXQgbm90IHByb3AgZGVzY3JpcHRvcnMsIHNvIHdlIG9ubHkgaGF2ZSB0byBjaGVja1xuXHRcdC8vIHRoZSBsYXN0IG9uZVxuXHRcdC8vIGxhc3QgZGVzY3JpcHRvciBjYW4gYmUgbm90IGEgdHJhcCwgaWYgdGhlIGFycmF5IHdhcyBleHRlbmRlZFxuXHRcdGNvbnN0IGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxuXHRcdFx0ZHJhZnRfLFxuXHRcdFx0ZHJhZnRfLmxlbmd0aCAtIDFcblx0XHQpXG5cdFx0Ly8gZGVzY3JpcHRvciBjYW4gYmUgbnVsbCwgYnV0IG9ubHkgZm9yIG5ld2x5IGNyZWF0ZWQgc3BhcnNlIGFycmF5cywgZWcuIG5ldyBBcnJheSgxMClcblx0XHRpZiAoZGVzY3JpcHRvciAmJiAhZGVzY3JpcHRvci5nZXQpIHJldHVybiB0cnVlXG5cdFx0Ly8gaWYgd2UgbWlzcyBhIHByb3BlcnR5LCBpdCBoYXMgYmVlbiBkZWxldGVkLCBzbyBhcnJheSBwcm9ib2JhbHkgY2hhbmdlZFxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgZHJhZnRfLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZiAoIWRyYWZ0Xy5oYXNPd25Qcm9wZXJ0eShpKSkgcmV0dXJuIHRydWVcblx0XHR9XG5cdFx0Ly8gRm9yIGFsbCBvdGhlciBjYXNlcywgd2UgZG9uJ3QgaGF2ZSB0byBjb21wYXJlLCBhcyB0aGV5IHdvdWxkIGhhdmUgYmVlbiBwaWNrZWQgdXAgYnkgdGhlIGluZGV4IHNldHRlcnNcblx0XHRyZXR1cm4gZmFsc2Vcblx0fVxuXG5cdGZ1bmN0aW9uIGhhc0NoYW5nZXNfKHN0YXRlOiBFUzVTdGF0ZSkge1xuXHRcdHJldHVybiBzdGF0ZS50eXBlXyA9PT0gUHJveHlUeXBlLkVTNU9iamVjdFxuXHRcdFx0PyBoYXNPYmplY3RDaGFuZ2VzKHN0YXRlKVxuXHRcdFx0OiBoYXNBcnJheUNoYW5nZXMoc3RhdGUpXG5cdH1cblxuXHRmdW5jdGlvbiBhc3NlcnRVbnJldm9rZWQoc3RhdGU6IGFueSAvKkVTNVN0YXRlIHwgTWFwU3RhdGUgfCBTZXRTdGF0ZSovKSB7XG5cdFx0aWYgKHN0YXRlLnJldm9rZWRfKSBkaWUoMywgSlNPTi5zdHJpbmdpZnkobGF0ZXN0KHN0YXRlKSkpXG5cdH1cblxuXHRsb2FkUGx1Z2luKFwiRVM1XCIsIHtcblx0XHRjcmVhdGVFUzVQcm94eV8sXG5cdFx0d2lsbEZpbmFsaXplRVM1Xyxcblx0XHRoYXNDaGFuZ2VzX1xuXHR9KVxufVxuIiwgImltcG9ydCB7aW1tZXJhYmxlfSBmcm9tIFwiLi4vaW1tZXJcIlxuaW1wb3J0IHtcblx0SW1tZXJTdGF0ZSxcblx0UGF0Y2gsXG5cdFNldFN0YXRlLFxuXHRFUzVBcnJheVN0YXRlLFxuXHRQcm94eUFycmF5U3RhdGUsXG5cdE1hcFN0YXRlLFxuXHRFUzVPYmplY3RTdGF0ZSxcblx0UHJveHlPYmplY3RTdGF0ZSxcblx0UGF0Y2hQYXRoLFxuXHRnZXQsXG5cdGVhY2gsXG5cdGhhcyxcblx0Z2V0QXJjaHR5cGUsXG5cdGlzU2V0LFxuXHRpc01hcCxcblx0bG9hZFBsdWdpbixcblx0UHJveHlUeXBlLFxuXHRBcmNodHlwZSxcblx0ZGllLFxuXHRpc0RyYWZ0LFxuXHRpc0RyYWZ0YWJsZSxcblx0Tk9USElOR1xufSBmcm9tIFwiLi4vaW50ZXJuYWxcIlxuXG5leHBvcnQgZnVuY3Rpb24gZW5hYmxlUGF0Y2hlcygpIHtcblx0Y29uc3QgUkVQTEFDRSA9IFwicmVwbGFjZVwiXG5cdGNvbnN0IEFERCA9IFwiYWRkXCJcblx0Y29uc3QgUkVNT1ZFID0gXCJyZW1vdmVcIlxuXG5cdGZ1bmN0aW9uIGdlbmVyYXRlUGF0Y2hlc18oXG5cdFx0c3RhdGU6IEltbWVyU3RhdGUsXG5cdFx0YmFzZVBhdGg6IFBhdGNoUGF0aCxcblx0XHRwYXRjaGVzOiBQYXRjaFtdLFxuXHRcdGludmVyc2VQYXRjaGVzOiBQYXRjaFtdXG5cdCk6IHZvaWQge1xuXHRcdHN3aXRjaCAoc3RhdGUudHlwZV8pIHtcblx0XHRcdGNhc2UgUHJveHlUeXBlLlByb3h5T2JqZWN0OlxuXHRcdFx0Y2FzZSBQcm94eVR5cGUuRVM1T2JqZWN0OlxuXHRcdFx0Y2FzZSBQcm94eVR5cGUuTWFwOlxuXHRcdFx0XHRyZXR1cm4gZ2VuZXJhdGVQYXRjaGVzRnJvbUFzc2lnbmVkKFxuXHRcdFx0XHRcdHN0YXRlLFxuXHRcdFx0XHRcdGJhc2VQYXRoLFxuXHRcdFx0XHRcdHBhdGNoZXMsXG5cdFx0XHRcdFx0aW52ZXJzZVBhdGNoZXNcblx0XHRcdFx0KVxuXHRcdFx0Y2FzZSBQcm94eVR5cGUuRVM1QXJyYXk6XG5cdFx0XHRjYXNlIFByb3h5VHlwZS5Qcm94eUFycmF5OlxuXHRcdFx0XHRyZXR1cm4gZ2VuZXJhdGVBcnJheVBhdGNoZXMoc3RhdGUsIGJhc2VQYXRoLCBwYXRjaGVzLCBpbnZlcnNlUGF0Y2hlcylcblx0XHRcdGNhc2UgUHJveHlUeXBlLlNldDpcblx0XHRcdFx0cmV0dXJuIGdlbmVyYXRlU2V0UGF0Y2hlcyhcblx0XHRcdFx0XHQoc3RhdGUgYXMgYW55KSBhcyBTZXRTdGF0ZSxcblx0XHRcdFx0XHRiYXNlUGF0aCxcblx0XHRcdFx0XHRwYXRjaGVzLFxuXHRcdFx0XHRcdGludmVyc2VQYXRjaGVzXG5cdFx0XHRcdClcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBnZW5lcmF0ZUFycmF5UGF0Y2hlcyhcblx0XHRzdGF0ZTogRVM1QXJyYXlTdGF0ZSB8IFByb3h5QXJyYXlTdGF0ZSxcblx0XHRiYXNlUGF0aDogUGF0Y2hQYXRoLFxuXHRcdHBhdGNoZXM6IFBhdGNoW10sXG5cdFx0aW52ZXJzZVBhdGNoZXM6IFBhdGNoW11cblx0KSB7XG5cdFx0bGV0IHtiYXNlXywgYXNzaWduZWRffSA9IHN0YXRlXG5cdFx0bGV0IGNvcHlfID0gc3RhdGUuY29weV8hXG5cblx0XHQvLyBSZWR1Y2UgY29tcGxleGl0eSBieSBlbnN1cmluZyBgYmFzZWAgaXMgbmV2ZXIgbG9uZ2VyLlxuXHRcdGlmIChjb3B5Xy5sZW5ndGggPCBiYXNlXy5sZW5ndGgpIHtcblx0XHRcdC8vIEB0cy1pZ25vcmVcblx0XHRcdDtbYmFzZV8sIGNvcHlfXSA9IFtjb3B5XywgYmFzZV9dXG5cdFx0XHQ7W3BhdGNoZXMsIGludmVyc2VQYXRjaGVzXSA9IFtpbnZlcnNlUGF0Y2hlcywgcGF0Y2hlc11cblx0XHR9XG5cblx0XHQvLyBQcm9jZXNzIHJlcGxhY2VkIGluZGljZXMuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBiYXNlXy5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYgKGFzc2lnbmVkX1tpXSAmJiBjb3B5X1tpXSAhPT0gYmFzZV9baV0pIHtcblx0XHRcdFx0Y29uc3QgcGF0aCA9IGJhc2VQYXRoLmNvbmNhdChbaV0pXG5cdFx0XHRcdHBhdGNoZXMucHVzaCh7XG5cdFx0XHRcdFx0b3A6IFJFUExBQ0UsXG5cdFx0XHRcdFx0cGF0aCxcblx0XHRcdFx0XHQvLyBOZWVkIHRvIG1heWJlIGNsb25lIGl0LCBhcyBpdCBjYW4gaW4gZmFjdCBiZSB0aGUgb3JpZ2luYWwgdmFsdWVcblx0XHRcdFx0XHQvLyBkdWUgdG8gdGhlIGJhc2UvY29weSBpbnZlcnNpb24gYXQgdGhlIHN0YXJ0IG9mIHRoaXMgZnVuY3Rpb25cblx0XHRcdFx0XHR2YWx1ZTogY2xvbmVQYXRjaFZhbHVlSWZOZWVkZWQoY29weV9baV0pXG5cdFx0XHRcdH0pXG5cdFx0XHRcdGludmVyc2VQYXRjaGVzLnB1c2goe1xuXHRcdFx0XHRcdG9wOiBSRVBMQUNFLFxuXHRcdFx0XHRcdHBhdGgsXG5cdFx0XHRcdFx0dmFsdWU6IGNsb25lUGF0Y2hWYWx1ZUlmTmVlZGVkKGJhc2VfW2ldKVxuXHRcdFx0XHR9KVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFByb2Nlc3MgYWRkZWQgaW5kaWNlcy5cblx0XHRmb3IgKGxldCBpID0gYmFzZV8ubGVuZ3RoOyBpIDwgY29weV8ubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IHBhdGggPSBiYXNlUGF0aC5jb25jYXQoW2ldKVxuXHRcdFx0cGF0Y2hlcy5wdXNoKHtcblx0XHRcdFx0b3A6IEFERCxcblx0XHRcdFx0cGF0aCxcblx0XHRcdFx0Ly8gTmVlZCB0byBtYXliZSBjbG9uZSBpdCwgYXMgaXQgY2FuIGluIGZhY3QgYmUgdGhlIG9yaWdpbmFsIHZhbHVlXG5cdFx0XHRcdC8vIGR1ZSB0byB0aGUgYmFzZS9jb3B5IGludmVyc2lvbiBhdCB0aGUgc3RhcnQgb2YgdGhpcyBmdW5jdGlvblxuXHRcdFx0XHR2YWx1ZTogY2xvbmVQYXRjaFZhbHVlSWZOZWVkZWQoY29weV9baV0pXG5cdFx0XHR9KVxuXHRcdH1cblx0XHRpZiAoYmFzZV8ubGVuZ3RoIDwgY29weV8ubGVuZ3RoKSB7XG5cdFx0XHRpbnZlcnNlUGF0Y2hlcy5wdXNoKHtcblx0XHRcdFx0b3A6IFJFUExBQ0UsXG5cdFx0XHRcdHBhdGg6IGJhc2VQYXRoLmNvbmNhdChbXCJsZW5ndGhcIl0pLFxuXHRcdFx0XHR2YWx1ZTogYmFzZV8ubGVuZ3RoXG5cdFx0XHR9KVxuXHRcdH1cblx0fVxuXG5cdC8vIFRoaXMgaXMgdXNlZCBmb3IgYm90aCBNYXAgb2JqZWN0cyBhbmQgbm9ybWFsIG9iamVjdHMuXG5cdGZ1bmN0aW9uIGdlbmVyYXRlUGF0Y2hlc0Zyb21Bc3NpZ25lZChcblx0XHRzdGF0ZTogTWFwU3RhdGUgfCBFUzVPYmplY3RTdGF0ZSB8IFByb3h5T2JqZWN0U3RhdGUsXG5cdFx0YmFzZVBhdGg6IFBhdGNoUGF0aCxcblx0XHRwYXRjaGVzOiBQYXRjaFtdLFxuXHRcdGludmVyc2VQYXRjaGVzOiBQYXRjaFtdXG5cdCkge1xuXHRcdGNvbnN0IHtiYXNlXywgY29weV99ID0gc3RhdGVcblx0XHRlYWNoKHN0YXRlLmFzc2lnbmVkXyEsIChrZXksIGFzc2lnbmVkVmFsdWUpID0+IHtcblx0XHRcdGNvbnN0IG9yaWdWYWx1ZSA9IGdldChiYXNlXywga2V5KVxuXHRcdFx0Y29uc3QgdmFsdWUgPSBnZXQoY29weV8hLCBrZXkpXG5cdFx0XHRjb25zdCBvcCA9ICFhc3NpZ25lZFZhbHVlID8gUkVNT1ZFIDogaGFzKGJhc2VfLCBrZXkpID8gUkVQTEFDRSA6IEFERFxuXHRcdFx0aWYgKG9yaWdWYWx1ZSA9PT0gdmFsdWUgJiYgb3AgPT09IFJFUExBQ0UpIHJldHVyblxuXHRcdFx0Y29uc3QgcGF0aCA9IGJhc2VQYXRoLmNvbmNhdChrZXkgYXMgYW55KVxuXHRcdFx0cGF0Y2hlcy5wdXNoKG9wID09PSBSRU1PVkUgPyB7b3AsIHBhdGh9IDoge29wLCBwYXRoLCB2YWx1ZX0pXG5cdFx0XHRpbnZlcnNlUGF0Y2hlcy5wdXNoKFxuXHRcdFx0XHRvcCA9PT0gQUREXG5cdFx0XHRcdFx0PyB7b3A6IFJFTU9WRSwgcGF0aH1cblx0XHRcdFx0XHQ6IG9wID09PSBSRU1PVkVcblx0XHRcdFx0XHQ/IHtvcDogQURELCBwYXRoLCB2YWx1ZTogY2xvbmVQYXRjaFZhbHVlSWZOZWVkZWQob3JpZ1ZhbHVlKX1cblx0XHRcdFx0XHQ6IHtvcDogUkVQTEFDRSwgcGF0aCwgdmFsdWU6IGNsb25lUGF0Y2hWYWx1ZUlmTmVlZGVkKG9yaWdWYWx1ZSl9XG5cdFx0XHQpXG5cdFx0fSlcblx0fVxuXG5cdGZ1bmN0aW9uIGdlbmVyYXRlU2V0UGF0Y2hlcyhcblx0XHRzdGF0ZTogU2V0U3RhdGUsXG5cdFx0YmFzZVBhdGg6IFBhdGNoUGF0aCxcblx0XHRwYXRjaGVzOiBQYXRjaFtdLFxuXHRcdGludmVyc2VQYXRjaGVzOiBQYXRjaFtdXG5cdCkge1xuXHRcdGxldCB7YmFzZV8sIGNvcHlffSA9IHN0YXRlXG5cblx0XHRsZXQgaSA9IDBcblx0XHRiYXNlXy5mb3JFYWNoKCh2YWx1ZTogYW55KSA9PiB7XG5cdFx0XHRpZiAoIWNvcHlfIS5oYXModmFsdWUpKSB7XG5cdFx0XHRcdGNvbnN0IHBhdGggPSBiYXNlUGF0aC5jb25jYXQoW2ldKVxuXHRcdFx0XHRwYXRjaGVzLnB1c2goe1xuXHRcdFx0XHRcdG9wOiBSRU1PVkUsXG5cdFx0XHRcdFx0cGF0aCxcblx0XHRcdFx0XHR2YWx1ZVxuXHRcdFx0XHR9KVxuXHRcdFx0XHRpbnZlcnNlUGF0Y2hlcy51bnNoaWZ0KHtcblx0XHRcdFx0XHRvcDogQURELFxuXHRcdFx0XHRcdHBhdGgsXG5cdFx0XHRcdFx0dmFsdWVcblx0XHRcdFx0fSlcblx0XHRcdH1cblx0XHRcdGkrK1xuXHRcdH0pXG5cdFx0aSA9IDBcblx0XHRjb3B5XyEuZm9yRWFjaCgodmFsdWU6IGFueSkgPT4ge1xuXHRcdFx0aWYgKCFiYXNlXy5oYXModmFsdWUpKSB7XG5cdFx0XHRcdGNvbnN0IHBhdGggPSBiYXNlUGF0aC5jb25jYXQoW2ldKVxuXHRcdFx0XHRwYXRjaGVzLnB1c2goe1xuXHRcdFx0XHRcdG9wOiBBREQsXG5cdFx0XHRcdFx0cGF0aCxcblx0XHRcdFx0XHR2YWx1ZVxuXHRcdFx0XHR9KVxuXHRcdFx0XHRpbnZlcnNlUGF0Y2hlcy51bnNoaWZ0KHtcblx0XHRcdFx0XHRvcDogUkVNT1ZFLFxuXHRcdFx0XHRcdHBhdGgsXG5cdFx0XHRcdFx0dmFsdWVcblx0XHRcdFx0fSlcblx0XHRcdH1cblx0XHRcdGkrK1xuXHRcdH0pXG5cdH1cblxuXHRmdW5jdGlvbiBnZW5lcmF0ZVJlcGxhY2VtZW50UGF0Y2hlc18oXG5cdFx0YmFzZVZhbHVlOiBhbnksXG5cdFx0cmVwbGFjZW1lbnQ6IGFueSxcblx0XHRwYXRjaGVzOiBQYXRjaFtdLFxuXHRcdGludmVyc2VQYXRjaGVzOiBQYXRjaFtdXG5cdCk6IHZvaWQge1xuXHRcdHBhdGNoZXMucHVzaCh7XG5cdFx0XHRvcDogUkVQTEFDRSxcblx0XHRcdHBhdGg6IFtdLFxuXHRcdFx0dmFsdWU6IHJlcGxhY2VtZW50ID09PSBOT1RISU5HID8gdW5kZWZpbmVkIDogcmVwbGFjZW1lbnRcblx0XHR9KVxuXHRcdGludmVyc2VQYXRjaGVzLnB1c2goe1xuXHRcdFx0b3A6IFJFUExBQ0UsXG5cdFx0XHRwYXRoOiBbXSxcblx0XHRcdHZhbHVlOiBiYXNlVmFsdWVcblx0XHR9KVxuXHR9XG5cblx0ZnVuY3Rpb24gYXBwbHlQYXRjaGVzXzxUPihkcmFmdDogVCwgcGF0Y2hlczogUGF0Y2hbXSk6IFQge1xuXHRcdHBhdGNoZXMuZm9yRWFjaChwYXRjaCA9PiB7XG5cdFx0XHRjb25zdCB7cGF0aCwgb3B9ID0gcGF0Y2hcblxuXHRcdFx0bGV0IGJhc2U6IGFueSA9IGRyYWZ0XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoIC0gMTsgaSsrKSB7XG5cdFx0XHRcdGNvbnN0IHBhcmVudFR5cGUgPSBnZXRBcmNodHlwZShiYXNlKVxuXHRcdFx0XHRsZXQgcCA9IHBhdGhbaV1cblx0XHRcdFx0aWYgKHR5cGVvZiBwICE9PSBcInN0cmluZ1wiICYmIHR5cGVvZiBwICE9PSBcIm51bWJlclwiKSB7XG5cdFx0XHRcdFx0cCA9IFwiXCIgKyBwXG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBTZWUgIzczOCwgYXZvaWQgcHJvdG90eXBlIHBvbGx1dGlvblxuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0KHBhcmVudFR5cGUgPT09IEFyY2h0eXBlLk9iamVjdCB8fCBwYXJlbnRUeXBlID09PSBBcmNodHlwZS5BcnJheSkgJiZcblx0XHRcdFx0XHQocCA9PT0gXCJfX3Byb3RvX19cIiB8fCBwID09PSBcImNvbnN0cnVjdG9yXCIpXG5cdFx0XHRcdClcblx0XHRcdFx0XHRkaWUoMjQpXG5cdFx0XHRcdGlmICh0eXBlb2YgYmFzZSA9PT0gXCJmdW5jdGlvblwiICYmIHAgPT09IFwicHJvdG90eXBlXCIpIGRpZSgyNClcblx0XHRcdFx0YmFzZSA9IGdldChiYXNlLCBwKVxuXHRcdFx0XHRpZiAodHlwZW9mIGJhc2UgIT09IFwib2JqZWN0XCIpIGRpZSgxNSwgcGF0aC5qb2luKFwiL1wiKSlcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgdHlwZSA9IGdldEFyY2h0eXBlKGJhc2UpXG5cdFx0XHRjb25zdCB2YWx1ZSA9IGRlZXBDbG9uZVBhdGNoVmFsdWUocGF0Y2gudmFsdWUpIC8vIHVzZWQgdG8gY2xvbmUgcGF0Y2ggdG8gZW5zdXJlIG9yaWdpbmFsIHBhdGNoIGlzIG5vdCBtb2RpZmllZCwgc2VlICM0MTFcblx0XHRcdGNvbnN0IGtleSA9IHBhdGhbcGF0aC5sZW5ndGggLSAxXVxuXHRcdFx0c3dpdGNoIChvcCkge1xuXHRcdFx0XHRjYXNlIFJFUExBQ0U6XG5cdFx0XHRcdFx0c3dpdGNoICh0eXBlKSB7XG5cdFx0XHRcdFx0XHRjYXNlIEFyY2h0eXBlLk1hcDpcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGJhc2Uuc2V0KGtleSwgdmFsdWUpXG5cdFx0XHRcdFx0XHQvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXHRcdFx0XHRcdFx0Y2FzZSBBcmNodHlwZS5TZXQ6XG5cdFx0XHRcdFx0XHRcdGRpZSgxNilcblx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdC8vIGlmIHZhbHVlIGlzIGFuIG9iamVjdCwgdGhlbiBpdCdzIGFzc2lnbmVkIGJ5IHJlZmVyZW5jZVxuXHRcdFx0XHRcdFx0XHQvLyBpbiB0aGUgZm9sbG93aW5nIGFkZCBvciByZW1vdmUgb3BzLCB0aGUgdmFsdWUgZmllbGQgaW5zaWRlIHRoZSBwYXRjaCB3aWxsIGFsc28gYmUgbW9kaWZ5ZWRcblx0XHRcdFx0XHRcdFx0Ly8gc28gd2UgdXNlIHZhbHVlIGZyb20gdGhlIGNsb25lZCBwYXRjaFxuXHRcdFx0XHRcdFx0XHQvLyBAdHMtaWdub3JlXG5cdFx0XHRcdFx0XHRcdHJldHVybiAoYmFzZVtrZXldID0gdmFsdWUpXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRjYXNlIEFERDpcblx0XHRcdFx0XHRzd2l0Y2ggKHR5cGUpIHtcblx0XHRcdFx0XHRcdGNhc2UgQXJjaHR5cGUuQXJyYXk6XG5cdFx0XHRcdFx0XHRcdHJldHVybiBrZXkgPT09IFwiLVwiXG5cdFx0XHRcdFx0XHRcdFx0PyBiYXNlLnB1c2godmFsdWUpXG5cdFx0XHRcdFx0XHRcdFx0OiBiYXNlLnNwbGljZShrZXkgYXMgYW55LCAwLCB2YWx1ZSlcblx0XHRcdFx0XHRcdGNhc2UgQXJjaHR5cGUuTWFwOlxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gYmFzZS5zZXQoa2V5LCB2YWx1ZSlcblx0XHRcdFx0XHRcdGNhc2UgQXJjaHR5cGUuU2V0OlxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gYmFzZS5hZGQodmFsdWUpXG5cdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gKGJhc2Vba2V5XSA9IHZhbHVlKVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0Y2FzZSBSRU1PVkU6XG5cdFx0XHRcdFx0c3dpdGNoICh0eXBlKSB7XG5cdFx0XHRcdFx0XHRjYXNlIEFyY2h0eXBlLkFycmF5OlxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gYmFzZS5zcGxpY2Uoa2V5IGFzIGFueSwgMSlcblx0XHRcdFx0XHRcdGNhc2UgQXJjaHR5cGUuTWFwOlxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gYmFzZS5kZWxldGUoa2V5KVxuXHRcdFx0XHRcdFx0Y2FzZSBBcmNodHlwZS5TZXQ6XG5cdFx0XHRcdFx0XHRcdHJldHVybiBiYXNlLmRlbGV0ZShwYXRjaC52YWx1ZSlcblx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdHJldHVybiBkZWxldGUgYmFzZVtrZXldXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdGRpZSgxNywgb3ApXG5cdFx0XHR9XG5cdFx0fSlcblxuXHRcdHJldHVybiBkcmFmdFxuXHR9XG5cblx0Ly8gb3B0aW1pemU6IHRoaXMgaXMgcXVpdGUgYSBwZXJmb3JtYW5jZSBoaXQsIGNhbiB3ZSBkZXRlY3QgaW50ZWxsaWdlbnRseSB3aGVuIGl0IGlzIG5lZWRlZD9cblx0Ly8gRS5nLiBhdXRvLWRyYWZ0IHdoZW4gbmV3IG9iamVjdHMgZnJvbSBvdXRzaWRlIGFyZSBhc3NpZ25lZCBhbmQgbW9kaWZpZWQ/XG5cdC8vIChTZWUgZmFpbGluZyB0ZXN0IHdoZW4gZGVlcENsb25lIGp1c3QgcmV0dXJucyBvYmopXG5cdGZ1bmN0aW9uIGRlZXBDbG9uZVBhdGNoVmFsdWU8VD4ob2JqOiBUKTogVFxuXHRmdW5jdGlvbiBkZWVwQ2xvbmVQYXRjaFZhbHVlKG9iajogYW55KSB7XG5cdFx0aWYgKCFpc0RyYWZ0YWJsZShvYmopKSByZXR1cm4gb2JqXG5cdFx0aWYgKEFycmF5LmlzQXJyYXkob2JqKSkgcmV0dXJuIG9iai5tYXAoZGVlcENsb25lUGF0Y2hWYWx1ZSlcblx0XHRpZiAoaXNNYXAob2JqKSlcblx0XHRcdHJldHVybiBuZXcgTWFwKFxuXHRcdFx0XHRBcnJheS5mcm9tKG9iai5lbnRyaWVzKCkpLm1hcCgoW2ssIHZdKSA9PiBbaywgZGVlcENsb25lUGF0Y2hWYWx1ZSh2KV0pXG5cdFx0XHQpXG5cdFx0aWYgKGlzU2V0KG9iaikpIHJldHVybiBuZXcgU2V0KEFycmF5LmZyb20ob2JqKS5tYXAoZGVlcENsb25lUGF0Y2hWYWx1ZSkpXG5cdFx0Y29uc3QgY2xvbmVkID0gT2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKSlcblx0XHRmb3IgKGNvbnN0IGtleSBpbiBvYmopIGNsb25lZFtrZXldID0gZGVlcENsb25lUGF0Y2hWYWx1ZShvYmpba2V5XSlcblx0XHRpZiAoaGFzKG9iaiwgaW1tZXJhYmxlKSkgY2xvbmVkW2ltbWVyYWJsZV0gPSBvYmpbaW1tZXJhYmxlXVxuXHRcdHJldHVybiBjbG9uZWRcblx0fVxuXG5cdGZ1bmN0aW9uIGNsb25lUGF0Y2hWYWx1ZUlmTmVlZGVkPFQ+KG9iajogVCk6IFQge1xuXHRcdGlmIChpc0RyYWZ0KG9iaikpIHtcblx0XHRcdHJldHVybiBkZWVwQ2xvbmVQYXRjaFZhbHVlKG9iailcblx0XHR9IGVsc2UgcmV0dXJuIG9ialxuXHR9XG5cblx0bG9hZFBsdWdpbihcIlBhdGNoZXNcIiwge1xuXHRcdGFwcGx5UGF0Y2hlc18sXG5cdFx0Z2VuZXJhdGVQYXRjaGVzXyxcblx0XHRnZW5lcmF0ZVJlcGxhY2VtZW50UGF0Y2hlc19cblx0fSlcbn1cbiIsICIvLyB0eXBlcyBvbmx5IVxuaW1wb3J0IHtcblx0SW1tZXJTdGF0ZSxcblx0QW55TWFwLFxuXHRBbnlTZXQsXG5cdE1hcFN0YXRlLFxuXHRTZXRTdGF0ZSxcblx0RFJBRlRfU1RBVEUsXG5cdGdldEN1cnJlbnRTY29wZSxcblx0bGF0ZXN0LFxuXHRpdGVyYXRvclN5bWJvbCxcblx0aXNEcmFmdGFibGUsXG5cdGNyZWF0ZVByb3h5LFxuXHRsb2FkUGx1Z2luLFxuXHRtYXJrQ2hhbmdlZCxcblx0UHJveHlUeXBlLFxuXHRkaWUsXG5cdGVhY2hcbn0gZnJvbSBcIi4uL2ludGVybmFsXCJcblxuZXhwb3J0IGZ1bmN0aW9uIGVuYWJsZU1hcFNldCgpIHtcblx0LyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblx0dmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbihkOiBhbnksIGI6IGFueSk6IGFueSB7XG5cdFx0ZXh0ZW5kU3RhdGljcyA9XG5cdFx0XHRPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcblx0XHRcdCh7X19wcm90b19fOiBbXX0gaW5zdGFuY2VvZiBBcnJheSAmJlxuXHRcdFx0XHRmdW5jdGlvbihkLCBiKSB7XG5cdFx0XHRcdFx0ZC5fX3Byb3RvX18gPSBiXG5cdFx0XHRcdH0pIHx8XG5cdFx0XHRmdW5jdGlvbihkLCBiKSB7XG5cdFx0XHRcdGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdXG5cdFx0XHR9XG5cdFx0cmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYilcblx0fVxuXG5cdC8vIFVnbHkgaGFjayB0byByZXNvbHZlICM1MDIgYW5kIGluaGVyaXQgYnVpbHQgaW4gTWFwIC8gU2V0XG5cdGZ1bmN0aW9uIF9fZXh0ZW5kcyhkOiBhbnksIGI6IGFueSk6IGFueSB7XG5cdFx0ZXh0ZW5kU3RhdGljcyhkLCBiKVxuXHRcdGZ1bmN0aW9uIF9fKHRoaXM6IGFueSk6IGFueSB7XG5cdFx0XHR0aGlzLmNvbnN0cnVjdG9yID0gZFxuXHRcdH1cblx0XHRkLnByb3RvdHlwZSA9XG5cdFx0XHQvLyBAdHMtaWdub3JlXG5cdFx0XHQoKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlKSwgbmV3IF9fKCkpXG5cdH1cblxuXHRjb25zdCBEcmFmdE1hcCA9IChmdW5jdGlvbihfc3VwZXIpIHtcblx0XHRfX2V4dGVuZHMoRHJhZnRNYXAsIF9zdXBlcilcblx0XHQvLyBDcmVhdGUgY2xhc3MgbWFudWFsbHksIGNhdXNlICM1MDJcblx0XHRmdW5jdGlvbiBEcmFmdE1hcCh0aGlzOiBhbnksIHRhcmdldDogQW55TWFwLCBwYXJlbnQ/OiBJbW1lclN0YXRlKTogYW55IHtcblx0XHRcdHRoaXNbRFJBRlRfU1RBVEVdID0ge1xuXHRcdFx0XHR0eXBlXzogUHJveHlUeXBlLk1hcCxcblx0XHRcdFx0cGFyZW50XzogcGFyZW50LFxuXHRcdFx0XHRzY29wZV86IHBhcmVudCA/IHBhcmVudC5zY29wZV8gOiBnZXRDdXJyZW50U2NvcGUoKSEsXG5cdFx0XHRcdG1vZGlmaWVkXzogZmFsc2UsXG5cdFx0XHRcdGZpbmFsaXplZF86IGZhbHNlLFxuXHRcdFx0XHRjb3B5XzogdW5kZWZpbmVkLFxuXHRcdFx0XHRhc3NpZ25lZF86IHVuZGVmaW5lZCxcblx0XHRcdFx0YmFzZV86IHRhcmdldCxcblx0XHRcdFx0ZHJhZnRfOiB0aGlzIGFzIGFueSxcblx0XHRcdFx0aXNNYW51YWxfOiBmYWxzZSxcblx0XHRcdFx0cmV2b2tlZF86IGZhbHNlXG5cdFx0XHR9IGFzIE1hcFN0YXRlXG5cdFx0XHRyZXR1cm4gdGhpc1xuXHRcdH1cblx0XHRjb25zdCBwID0gRHJhZnRNYXAucHJvdG90eXBlXG5cblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkocCwgXCJzaXplXCIsIHtcblx0XHRcdGdldDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiBsYXRlc3QodGhpc1tEUkFGVF9TVEFURV0pLnNpemVcblx0XHRcdH1cblx0XHRcdC8vIGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0Ly8gY29uZmlndXJhYmxlOiB0cnVlXG5cdFx0fSlcblxuXHRcdHAuaGFzID0gZnVuY3Rpb24oa2V5OiBhbnkpOiBib29sZWFuIHtcblx0XHRcdHJldHVybiBsYXRlc3QodGhpc1tEUkFGVF9TVEFURV0pLmhhcyhrZXkpXG5cdFx0fVxuXG5cdFx0cC5zZXQgPSBmdW5jdGlvbihrZXk6IGFueSwgdmFsdWU6IGFueSkge1xuXHRcdFx0Y29uc3Qgc3RhdGU6IE1hcFN0YXRlID0gdGhpc1tEUkFGVF9TVEFURV1cblx0XHRcdGFzc2VydFVucmV2b2tlZChzdGF0ZSlcblx0XHRcdGlmICghbGF0ZXN0KHN0YXRlKS5oYXMoa2V5KSB8fCBsYXRlc3Qoc3RhdGUpLmdldChrZXkpICE9PSB2YWx1ZSkge1xuXHRcdFx0XHRwcmVwYXJlTWFwQ29weShzdGF0ZSlcblx0XHRcdFx0bWFya0NoYW5nZWQoc3RhdGUpXG5cdFx0XHRcdHN0YXRlLmFzc2lnbmVkXyEuc2V0KGtleSwgdHJ1ZSlcblx0XHRcdFx0c3RhdGUuY29weV8hLnNldChrZXksIHZhbHVlKVxuXHRcdFx0XHRzdGF0ZS5hc3NpZ25lZF8hLnNldChrZXksIHRydWUpXG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGhpc1xuXHRcdH1cblxuXHRcdHAuZGVsZXRlID0gZnVuY3Rpb24oa2V5OiBhbnkpOiBib29sZWFuIHtcblx0XHRcdGlmICghdGhpcy5oYXMoa2V5KSkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2Vcblx0XHRcdH1cblxuXHRcdFx0Y29uc3Qgc3RhdGU6IE1hcFN0YXRlID0gdGhpc1tEUkFGVF9TVEFURV1cblx0XHRcdGFzc2VydFVucmV2b2tlZChzdGF0ZSlcblx0XHRcdHByZXBhcmVNYXBDb3B5KHN0YXRlKVxuXHRcdFx0bWFya0NoYW5nZWQoc3RhdGUpXG5cdFx0XHRpZiAoc3RhdGUuYmFzZV8uaGFzKGtleSkpIHtcblx0XHRcdFx0c3RhdGUuYXNzaWduZWRfIS5zZXQoa2V5LCBmYWxzZSlcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHN0YXRlLmFzc2lnbmVkXyEuZGVsZXRlKGtleSlcblx0XHRcdH1cblx0XHRcdHN0YXRlLmNvcHlfIS5kZWxldGUoa2V5KVxuXHRcdFx0cmV0dXJuIHRydWVcblx0XHR9XG5cblx0XHRwLmNsZWFyID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRjb25zdCBzdGF0ZTogTWFwU3RhdGUgPSB0aGlzW0RSQUZUX1NUQVRFXVxuXHRcdFx0YXNzZXJ0VW5yZXZva2VkKHN0YXRlKVxuXHRcdFx0aWYgKGxhdGVzdChzdGF0ZSkuc2l6ZSkge1xuXHRcdFx0XHRwcmVwYXJlTWFwQ29weShzdGF0ZSlcblx0XHRcdFx0bWFya0NoYW5nZWQoc3RhdGUpXG5cdFx0XHRcdHN0YXRlLmFzc2lnbmVkXyA9IG5ldyBNYXAoKVxuXHRcdFx0XHRlYWNoKHN0YXRlLmJhc2VfLCBrZXkgPT4ge1xuXHRcdFx0XHRcdHN0YXRlLmFzc2lnbmVkXyEuc2V0KGtleSwgZmFsc2UpXG5cdFx0XHRcdH0pXG5cdFx0XHRcdHN0YXRlLmNvcHlfIS5jbGVhcigpXG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cC5mb3JFYWNoID0gZnVuY3Rpb24oXG5cdFx0XHRjYjogKHZhbHVlOiBhbnksIGtleTogYW55LCBzZWxmOiBhbnkpID0+IHZvaWQsXG5cdFx0XHR0aGlzQXJnPzogYW55XG5cdFx0KSB7XG5cdFx0XHRjb25zdCBzdGF0ZTogTWFwU3RhdGUgPSB0aGlzW0RSQUZUX1NUQVRFXVxuXHRcdFx0bGF0ZXN0KHN0YXRlKS5mb3JFYWNoKChfdmFsdWU6IGFueSwga2V5OiBhbnksIF9tYXA6IGFueSkgPT4ge1xuXHRcdFx0XHRjYi5jYWxsKHRoaXNBcmcsIHRoaXMuZ2V0KGtleSksIGtleSwgdGhpcylcblx0XHRcdH0pXG5cdFx0fVxuXG5cdFx0cC5nZXQgPSBmdW5jdGlvbihrZXk6IGFueSk6IGFueSB7XG5cdFx0XHRjb25zdCBzdGF0ZTogTWFwU3RhdGUgPSB0aGlzW0RSQUZUX1NUQVRFXVxuXHRcdFx0YXNzZXJ0VW5yZXZva2VkKHN0YXRlKVxuXHRcdFx0Y29uc3QgdmFsdWUgPSBsYXRlc3Qoc3RhdGUpLmdldChrZXkpXG5cdFx0XHRpZiAoc3RhdGUuZmluYWxpemVkXyB8fCAhaXNEcmFmdGFibGUodmFsdWUpKSB7XG5cdFx0XHRcdHJldHVybiB2YWx1ZVxuXHRcdFx0fVxuXHRcdFx0aWYgKHZhbHVlICE9PSBzdGF0ZS5iYXNlXy5nZXQoa2V5KSkge1xuXHRcdFx0XHRyZXR1cm4gdmFsdWUgLy8gZWl0aGVyIGFscmVhZHkgZHJhZnRlZCBvciByZWFzc2lnbmVkXG5cdFx0XHR9XG5cdFx0XHQvLyBkZXNwaXRlIHdoYXQgaXQgbG9va3MsIHRoaXMgY3JlYXRlcyBhIGRyYWZ0IG9ubHkgb25jZSwgc2VlIGFib3ZlIGNvbmRpdGlvblxuXHRcdFx0Y29uc3QgZHJhZnQgPSBjcmVhdGVQcm94eShzdGF0ZS5zY29wZV8uaW1tZXJfLCB2YWx1ZSwgc3RhdGUpXG5cdFx0XHRwcmVwYXJlTWFwQ29weShzdGF0ZSlcblx0XHRcdHN0YXRlLmNvcHlfIS5zZXQoa2V5LCBkcmFmdClcblx0XHRcdHJldHVybiBkcmFmdFxuXHRcdH1cblxuXHRcdHAua2V5cyA9IGZ1bmN0aW9uKCk6IEl0ZXJhYmxlSXRlcmF0b3I8YW55PiB7XG5cdFx0XHRyZXR1cm4gbGF0ZXN0KHRoaXNbRFJBRlRfU1RBVEVdKS5rZXlzKClcblx0XHR9XG5cblx0XHRwLnZhbHVlcyA9IGZ1bmN0aW9uKCk6IEl0ZXJhYmxlSXRlcmF0b3I8YW55PiB7XG5cdFx0XHRjb25zdCBpdGVyYXRvciA9IHRoaXMua2V5cygpXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRbaXRlcmF0b3JTeW1ib2xdOiAoKSA9PiB0aGlzLnZhbHVlcygpLFxuXHRcdFx0XHRuZXh0OiAoKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgciA9IGl0ZXJhdG9yLm5leHQoKVxuXHRcdFx0XHRcdC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cdFx0XHRcdFx0aWYgKHIuZG9uZSkgcmV0dXJuIHJcblx0XHRcdFx0XHRjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0KHIudmFsdWUpXG5cdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdGRvbmU6IGZhbHNlLFxuXHRcdFx0XHRcdFx0dmFsdWVcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gYXMgYW55XG5cdFx0fVxuXG5cdFx0cC5lbnRyaWVzID0gZnVuY3Rpb24oKTogSXRlcmFibGVJdGVyYXRvcjxbYW55LCBhbnldPiB7XG5cdFx0XHRjb25zdCBpdGVyYXRvciA9IHRoaXMua2V5cygpXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRbaXRlcmF0b3JTeW1ib2xdOiAoKSA9PiB0aGlzLmVudHJpZXMoKSxcblx0XHRcdFx0bmV4dDogKCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHIgPSBpdGVyYXRvci5uZXh0KClcblx0XHRcdFx0XHQvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXHRcdFx0XHRcdGlmIChyLmRvbmUpIHJldHVybiByXG5cdFx0XHRcdFx0Y29uc3QgdmFsdWUgPSB0aGlzLmdldChyLnZhbHVlKVxuXHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRkb25lOiBmYWxzZSxcblx0XHRcdFx0XHRcdHZhbHVlOiBbci52YWx1ZSwgdmFsdWVdXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGFzIGFueVxuXHRcdH1cblxuXHRcdHBbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lbnRyaWVzKClcblx0XHR9XG5cblx0XHRyZXR1cm4gRHJhZnRNYXBcblx0fSkoTWFwKVxuXG5cdGZ1bmN0aW9uIHByb3h5TWFwXzxUIGV4dGVuZHMgQW55TWFwPih0YXJnZXQ6IFQsIHBhcmVudD86IEltbWVyU3RhdGUpOiBUIHtcblx0XHQvLyBAdHMtaWdub3JlXG5cdFx0cmV0dXJuIG5ldyBEcmFmdE1hcCh0YXJnZXQsIHBhcmVudClcblx0fVxuXG5cdGZ1bmN0aW9uIHByZXBhcmVNYXBDb3B5KHN0YXRlOiBNYXBTdGF0ZSkge1xuXHRcdGlmICghc3RhdGUuY29weV8pIHtcblx0XHRcdHN0YXRlLmFzc2lnbmVkXyA9IG5ldyBNYXAoKVxuXHRcdFx0c3RhdGUuY29weV8gPSBuZXcgTWFwKHN0YXRlLmJhc2VfKVxuXHRcdH1cblx0fVxuXG5cdGNvbnN0IERyYWZ0U2V0ID0gKGZ1bmN0aW9uKF9zdXBlcikge1xuXHRcdF9fZXh0ZW5kcyhEcmFmdFNldCwgX3N1cGVyKVxuXHRcdC8vIENyZWF0ZSBjbGFzcyBtYW51YWxseSwgY2F1c2UgIzUwMlxuXHRcdGZ1bmN0aW9uIERyYWZ0U2V0KHRoaXM6IGFueSwgdGFyZ2V0OiBBbnlTZXQsIHBhcmVudD86IEltbWVyU3RhdGUpIHtcblx0XHRcdHRoaXNbRFJBRlRfU1RBVEVdID0ge1xuXHRcdFx0XHR0eXBlXzogUHJveHlUeXBlLlNldCxcblx0XHRcdFx0cGFyZW50XzogcGFyZW50LFxuXHRcdFx0XHRzY29wZV86IHBhcmVudCA/IHBhcmVudC5zY29wZV8gOiBnZXRDdXJyZW50U2NvcGUoKSEsXG5cdFx0XHRcdG1vZGlmaWVkXzogZmFsc2UsXG5cdFx0XHRcdGZpbmFsaXplZF86IGZhbHNlLFxuXHRcdFx0XHRjb3B5XzogdW5kZWZpbmVkLFxuXHRcdFx0XHRiYXNlXzogdGFyZ2V0LFxuXHRcdFx0XHRkcmFmdF86IHRoaXMsXG5cdFx0XHRcdGRyYWZ0c186IG5ldyBNYXAoKSxcblx0XHRcdFx0cmV2b2tlZF86IGZhbHNlLFxuXHRcdFx0XHRpc01hbnVhbF86IGZhbHNlXG5cdFx0XHR9IGFzIFNldFN0YXRlXG5cdFx0XHRyZXR1cm4gdGhpc1xuXHRcdH1cblx0XHRjb25zdCBwID0gRHJhZnRTZXQucHJvdG90eXBlXG5cblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkocCwgXCJzaXplXCIsIHtcblx0XHRcdGdldDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiBsYXRlc3QodGhpc1tEUkFGVF9TVEFURV0pLnNpemVcblx0XHRcdH1cblx0XHRcdC8vIGVudW1lcmFibGU6IHRydWUsXG5cdFx0fSlcblxuXHRcdHAuaGFzID0gZnVuY3Rpb24odmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuXHRcdFx0Y29uc3Qgc3RhdGU6IFNldFN0YXRlID0gdGhpc1tEUkFGVF9TVEFURV1cblx0XHRcdGFzc2VydFVucmV2b2tlZChzdGF0ZSlcblx0XHRcdC8vIGJpdCBvZiB0cmlja2VyeSBoZXJlLCB0byBiZSBhYmxlIHRvIHJlY29nbml6ZSBib3RoIHRoZSB2YWx1ZSwgYW5kIHRoZSBkcmFmdCBvZiBpdHMgdmFsdWVcblx0XHRcdGlmICghc3RhdGUuY29weV8pIHtcblx0XHRcdFx0cmV0dXJuIHN0YXRlLmJhc2VfLmhhcyh2YWx1ZSlcblx0XHRcdH1cblx0XHRcdGlmIChzdGF0ZS5jb3B5Xy5oYXModmFsdWUpKSByZXR1cm4gdHJ1ZVxuXHRcdFx0aWYgKHN0YXRlLmRyYWZ0c18uaGFzKHZhbHVlKSAmJiBzdGF0ZS5jb3B5Xy5oYXMoc3RhdGUuZHJhZnRzXy5nZXQodmFsdWUpKSlcblx0XHRcdFx0cmV0dXJuIHRydWVcblx0XHRcdHJldHVybiBmYWxzZVxuXHRcdH1cblxuXHRcdHAuYWRkID0gZnVuY3Rpb24odmFsdWU6IGFueSk6IGFueSB7XG5cdFx0XHRjb25zdCBzdGF0ZTogU2V0U3RhdGUgPSB0aGlzW0RSQUZUX1NUQVRFXVxuXHRcdFx0YXNzZXJ0VW5yZXZva2VkKHN0YXRlKVxuXHRcdFx0aWYgKCF0aGlzLmhhcyh2YWx1ZSkpIHtcblx0XHRcdFx0cHJlcGFyZVNldENvcHkoc3RhdGUpXG5cdFx0XHRcdG1hcmtDaGFuZ2VkKHN0YXRlKVxuXHRcdFx0XHRzdGF0ZS5jb3B5XyEuYWRkKHZhbHVlKVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXNcblx0XHR9XG5cblx0XHRwLmRlbGV0ZSA9IGZ1bmN0aW9uKHZhbHVlOiBhbnkpOiBhbnkge1xuXHRcdFx0aWYgKCF0aGlzLmhhcyh2YWx1ZSkpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlXG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHN0YXRlOiBTZXRTdGF0ZSA9IHRoaXNbRFJBRlRfU1RBVEVdXG5cdFx0XHRhc3NlcnRVbnJldm9rZWQoc3RhdGUpXG5cdFx0XHRwcmVwYXJlU2V0Q29weShzdGF0ZSlcblx0XHRcdG1hcmtDaGFuZ2VkKHN0YXRlKVxuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0c3RhdGUuY29weV8hLmRlbGV0ZSh2YWx1ZSkgfHxcblx0XHRcdFx0KHN0YXRlLmRyYWZ0c18uaGFzKHZhbHVlKVxuXHRcdFx0XHRcdD8gc3RhdGUuY29weV8hLmRlbGV0ZShzdGF0ZS5kcmFmdHNfLmdldCh2YWx1ZSkpXG5cdFx0XHRcdFx0OiAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyBmYWxzZSlcblx0XHRcdClcblx0XHR9XG5cblx0XHRwLmNsZWFyID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRjb25zdCBzdGF0ZTogU2V0U3RhdGUgPSB0aGlzW0RSQUZUX1NUQVRFXVxuXHRcdFx0YXNzZXJ0VW5yZXZva2VkKHN0YXRlKVxuXHRcdFx0aWYgKGxhdGVzdChzdGF0ZSkuc2l6ZSkge1xuXHRcdFx0XHRwcmVwYXJlU2V0Q29weShzdGF0ZSlcblx0XHRcdFx0bWFya0NoYW5nZWQoc3RhdGUpXG5cdFx0XHRcdHN0YXRlLmNvcHlfIS5jbGVhcigpXG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cC52YWx1ZXMgPSBmdW5jdGlvbigpOiBJdGVyYWJsZUl0ZXJhdG9yPGFueT4ge1xuXHRcdFx0Y29uc3Qgc3RhdGU6IFNldFN0YXRlID0gdGhpc1tEUkFGVF9TVEFURV1cblx0XHRcdGFzc2VydFVucmV2b2tlZChzdGF0ZSlcblx0XHRcdHByZXBhcmVTZXRDb3B5KHN0YXRlKVxuXHRcdFx0cmV0dXJuIHN0YXRlLmNvcHlfIS52YWx1ZXMoKVxuXHRcdH1cblxuXHRcdHAuZW50cmllcyA9IGZ1bmN0aW9uIGVudHJpZXMoKTogSXRlcmFibGVJdGVyYXRvcjxbYW55LCBhbnldPiB7XG5cdFx0XHRjb25zdCBzdGF0ZTogU2V0U3RhdGUgPSB0aGlzW0RSQUZUX1NUQVRFXVxuXHRcdFx0YXNzZXJ0VW5yZXZva2VkKHN0YXRlKVxuXHRcdFx0cHJlcGFyZVNldENvcHkoc3RhdGUpXG5cdFx0XHRyZXR1cm4gc3RhdGUuY29weV8hLmVudHJpZXMoKVxuXHRcdH1cblxuXHRcdHAua2V5cyA9IGZ1bmN0aW9uKCk6IEl0ZXJhYmxlSXRlcmF0b3I8YW55PiB7XG5cdFx0XHRyZXR1cm4gdGhpcy52YWx1ZXMoKVxuXHRcdH1cblxuXHRcdHBbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy52YWx1ZXMoKVxuXHRcdH1cblxuXHRcdHAuZm9yRWFjaCA9IGZ1bmN0aW9uIGZvckVhY2goY2I6IGFueSwgdGhpc0FyZz86IGFueSkge1xuXHRcdFx0Y29uc3QgaXRlcmF0b3IgPSB0aGlzLnZhbHVlcygpXG5cdFx0XHRsZXQgcmVzdWx0ID0gaXRlcmF0b3IubmV4dCgpXG5cdFx0XHR3aGlsZSAoIXJlc3VsdC5kb25lKSB7XG5cdFx0XHRcdGNiLmNhbGwodGhpc0FyZywgcmVzdWx0LnZhbHVlLCByZXN1bHQudmFsdWUsIHRoaXMpXG5cdFx0XHRcdHJlc3VsdCA9IGl0ZXJhdG9yLm5leHQoKVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBEcmFmdFNldFxuXHR9KShTZXQpXG5cblx0ZnVuY3Rpb24gcHJveHlTZXRfPFQgZXh0ZW5kcyBBbnlTZXQ+KHRhcmdldDogVCwgcGFyZW50PzogSW1tZXJTdGF0ZSk6IFQge1xuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRyZXR1cm4gbmV3IERyYWZ0U2V0KHRhcmdldCwgcGFyZW50KVxuXHR9XG5cblx0ZnVuY3Rpb24gcHJlcGFyZVNldENvcHkoc3RhdGU6IFNldFN0YXRlKSB7XG5cdFx0aWYgKCFzdGF0ZS5jb3B5Xykge1xuXHRcdFx0Ly8gY3JlYXRlIGRyYWZ0cyBmb3IgYWxsIGVudHJpZXMgdG8gcHJlc2VydmUgaW5zZXJ0aW9uIG9yZGVyXG5cdFx0XHRzdGF0ZS5jb3B5XyA9IG5ldyBTZXQoKVxuXHRcdFx0c3RhdGUuYmFzZV8uZm9yRWFjaCh2YWx1ZSA9PiB7XG5cdFx0XHRcdGlmIChpc0RyYWZ0YWJsZSh2YWx1ZSkpIHtcblx0XHRcdFx0XHRjb25zdCBkcmFmdCA9IGNyZWF0ZVByb3h5KHN0YXRlLnNjb3BlXy5pbW1lcl8sIHZhbHVlLCBzdGF0ZSlcblx0XHRcdFx0XHRzdGF0ZS5kcmFmdHNfLnNldCh2YWx1ZSwgZHJhZnQpXG5cdFx0XHRcdFx0c3RhdGUuY29weV8hLmFkZChkcmFmdClcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzdGF0ZS5jb3B5XyEuYWRkKHZhbHVlKVxuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIGFzc2VydFVucmV2b2tlZChzdGF0ZTogYW55IC8qRVM1U3RhdGUgfCBNYXBTdGF0ZSB8IFNldFN0YXRlKi8pIHtcblx0XHRpZiAoc3RhdGUucmV2b2tlZF8pIGRpZSgzLCBKU09OLnN0cmluZ2lmeShsYXRlc3Qoc3RhdGUpKSlcblx0fVxuXG5cdGxvYWRQbHVnaW4oXCJNYXBTZXRcIiwge3Byb3h5TWFwXywgcHJveHlTZXRffSlcbn1cbiIsICJpbXBvcnQge2VuYWJsZUVTNX0gZnJvbSBcIi4vZXM1XCJcbmltcG9ydCB7ZW5hYmxlTWFwU2V0fSBmcm9tIFwiLi9tYXBzZXRcIlxuaW1wb3J0IHtlbmFibGVQYXRjaGVzfSBmcm9tIFwiLi9wYXRjaGVzXCJcblxuZXhwb3J0IGZ1bmN0aW9uIGVuYWJsZUFsbFBsdWdpbnMoKSB7XG5cdGVuYWJsZUVTNSgpXG5cdGVuYWJsZU1hcFNldCgpXG5cdGVuYWJsZVBhdGNoZXMoKVxufVxuIiwgImltcG9ydCB7XG5cdElQcm9kdWNlLFxuXHRJUHJvZHVjZVdpdGhQYXRjaGVzLFxuXHRJbW1lcixcblx0RHJhZnQsXG5cdEltbXV0YWJsZVxufSBmcm9tIFwiLi9pbnRlcm5hbFwiXG5cbmV4cG9ydCB7XG5cdERyYWZ0LFxuXHRJbW11dGFibGUsXG5cdFBhdGNoLFxuXHRQYXRjaExpc3RlbmVyLFxuXHRvcmlnaW5hbCxcblx0Y3VycmVudCxcblx0aXNEcmFmdCxcblx0aXNEcmFmdGFibGUsXG5cdE5PVEhJTkcgYXMgbm90aGluZyxcblx0RFJBRlRBQkxFIGFzIGltbWVyYWJsZSxcblx0ZnJlZXplXG59IGZyb20gXCIuL2ludGVybmFsXCJcblxuY29uc3QgaW1tZXIgPSBuZXcgSW1tZXIoKVxuXG4vKipcbiAqIFRoZSBgcHJvZHVjZWAgZnVuY3Rpb24gdGFrZXMgYSB2YWx1ZSBhbmQgYSBcInJlY2lwZSBmdW5jdGlvblwiICh3aG9zZVxuICogcmV0dXJuIHZhbHVlIG9mdGVuIGRlcGVuZHMgb24gdGhlIGJhc2Ugc3RhdGUpLiBUaGUgcmVjaXBlIGZ1bmN0aW9uIGlzXG4gKiBmcmVlIHRvIG11dGF0ZSBpdHMgZmlyc3QgYXJndW1lbnQgaG93ZXZlciBpdCB3YW50cy4gQWxsIG11dGF0aW9ucyBhcmVcbiAqIG9ubHkgZXZlciBhcHBsaWVkIHRvIGEgX19jb3B5X18gb2YgdGhlIGJhc2Ugc3RhdGUuXG4gKlxuICogUGFzcyBvbmx5IGEgZnVuY3Rpb24gdG8gY3JlYXRlIGEgXCJjdXJyaWVkIHByb2R1Y2VyXCIgd2hpY2ggcmVsaWV2ZXMgeW91XG4gKiBmcm9tIHBhc3NpbmcgdGhlIHJlY2lwZSBmdW5jdGlvbiBldmVyeSB0aW1lLlxuICpcbiAqIE9ubHkgcGxhaW4gb2JqZWN0cyBhbmQgYXJyYXlzIGFyZSBtYWRlIG11dGFibGUuIEFsbCBvdGhlciBvYmplY3RzIGFyZVxuICogY29uc2lkZXJlZCB1bmNvcHlhYmxlLlxuICpcbiAqIE5vdGU6IFRoaXMgZnVuY3Rpb24gaXMgX19ib3VuZF9fIHRvIGl0cyBgSW1tZXJgIGluc3RhbmNlLlxuICpcbiAqIEBwYXJhbSB7YW55fSBiYXNlIC0gdGhlIGluaXRpYWwgc3RhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByb2R1Y2VyIC0gZnVuY3Rpb24gdGhhdCByZWNlaXZlcyBhIHByb3h5IG9mIHRoZSBiYXNlIHN0YXRlIGFzIGZpcnN0IGFyZ3VtZW50IGFuZCB3aGljaCBjYW4gYmUgZnJlZWx5IG1vZGlmaWVkXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwYXRjaExpc3RlbmVyIC0gb3B0aW9uYWwgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCB3aXRoIGFsbCB0aGUgcGF0Y2hlcyBwcm9kdWNlZCBoZXJlXG4gKiBAcmV0dXJucyB7YW55fSBhIG5ldyBzdGF0ZSwgb3IgdGhlIGluaXRpYWwgc3RhdGUgaWYgbm90aGluZyB3YXMgbW9kaWZpZWRcbiAqL1xuZXhwb3J0IGNvbnN0IHByb2R1Y2U6IElQcm9kdWNlID0gaW1tZXIucHJvZHVjZVxuZXhwb3J0IGRlZmF1bHQgcHJvZHVjZVxuXG4vKipcbiAqIExpa2UgYHByb2R1Y2VgLCBidXQgYHByb2R1Y2VXaXRoUGF0Y2hlc2AgYWx3YXlzIHJldHVybnMgYSB0dXBsZVxuICogW25leHRTdGF0ZSwgcGF0Y2hlcywgaW52ZXJzZVBhdGNoZXNdIChpbnN0ZWFkIG9mIGp1c3QgdGhlIG5leHQgc3RhdGUpXG4gKi9cbmV4cG9ydCBjb25zdCBwcm9kdWNlV2l0aFBhdGNoZXM6IElQcm9kdWNlV2l0aFBhdGNoZXMgPSBpbW1lci5wcm9kdWNlV2l0aFBhdGNoZXMuYmluZChcblx0aW1tZXJcbilcblxuLyoqXG4gKiBQYXNzIHRydWUgdG8gYXV0b21hdGljYWxseSBmcmVlemUgYWxsIGNvcGllcyBjcmVhdGVkIGJ5IEltbWVyLlxuICpcbiAqIEFsd2F5cyBmcmVlemUgYnkgZGVmYXVsdCwgZXZlbiBpbiBwcm9kdWN0aW9uIG1vZGVcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEF1dG9GcmVlemUgPSBpbW1lci5zZXRBdXRvRnJlZXplLmJpbmQoaW1tZXIpXG5cbi8qKlxuICogUGFzcyB0cnVlIHRvIHVzZSB0aGUgRVMyMDE1IGBQcm94eWAgY2xhc3Mgd2hlbiBjcmVhdGluZyBkcmFmdHMsIHdoaWNoIGlzXG4gKiBhbHdheXMgZmFzdGVyIHRoYW4gdXNpbmcgRVM1IHByb3hpZXMuXG4gKlxuICogQnkgZGVmYXVsdCwgZmVhdHVyZSBkZXRlY3Rpb24gaXMgdXNlZCwgc28gY2FsbGluZyB0aGlzIGlzIHJhcmVseSBuZWNlc3NhcnkuXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRVc2VQcm94aWVzID0gaW1tZXIuc2V0VXNlUHJveGllcy5iaW5kKGltbWVyKVxuXG4vKipcbiAqIEFwcGx5IGFuIGFycmF5IG9mIEltbWVyIHBhdGNoZXMgdG8gdGhlIGZpcnN0IGFyZ3VtZW50LlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gaXMgYSBwcm9kdWNlciwgd2hpY2ggbWVhbnMgY29weS1vbi13cml0ZSBpcyBpbiBlZmZlY3QuXG4gKi9cbmV4cG9ydCBjb25zdCBhcHBseVBhdGNoZXMgPSBpbW1lci5hcHBseVBhdGNoZXMuYmluZChpbW1lcilcblxuLyoqXG4gKiBDcmVhdGUgYW4gSW1tZXIgZHJhZnQgZnJvbSB0aGUgZ2l2ZW4gYmFzZSBzdGF0ZSwgd2hpY2ggbWF5IGJlIGEgZHJhZnQgaXRzZWxmLlxuICogVGhlIGRyYWZ0IGNhbiBiZSBtb2RpZmllZCB1bnRpbCB5b3UgZmluYWxpemUgaXQgd2l0aCB0aGUgYGZpbmlzaERyYWZ0YCBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZURyYWZ0ID0gaW1tZXIuY3JlYXRlRHJhZnQuYmluZChpbW1lcilcblxuLyoqXG4gKiBGaW5hbGl6ZSBhbiBJbW1lciBkcmFmdCBmcm9tIGEgYGNyZWF0ZURyYWZ0YCBjYWxsLCByZXR1cm5pbmcgdGhlIGJhc2Ugc3RhdGVcbiAqIChpZiBubyBjaGFuZ2VzIHdlcmUgbWFkZSkgb3IgYSBtb2RpZmllZCBjb3B5LiBUaGUgZHJhZnQgbXVzdCAqbm90KiBiZVxuICogbXV0YXRlZCBhZnRlcndhcmRzLlxuICpcbiAqIFBhc3MgYSBmdW5jdGlvbiBhcyB0aGUgMm5kIGFyZ3VtZW50IHRvIGdlbmVyYXRlIEltbWVyIHBhdGNoZXMgYmFzZWQgb24gdGhlXG4gKiBjaGFuZ2VzIHRoYXQgd2VyZSBtYWRlLlxuICovXG5leHBvcnQgY29uc3QgZmluaXNoRHJhZnQgPSBpbW1lci5maW5pc2hEcmFmdC5iaW5kKGltbWVyKVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgYSBuby1vcCwgYnV0IGNhbiBiZSB1c2VkIHRvIGNhc3QgYW4gaW1tdXRhYmxlIHR5cGVcbiAqIHRvIGFuIGRyYWZ0IHR5cGUgYW5kIG1ha2UgVHlwZVNjcmlwdCBoYXBweVxuICpcbiAqIEBwYXJhbSB2YWx1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FzdERyYWZ0PFQ+KHZhbHVlOiBUKTogRHJhZnQ8VD4ge1xuXHRyZXR1cm4gdmFsdWUgYXMgYW55XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSBhIG5vLW9wLCBidXQgY2FuIGJlIHVzZWQgdG8gY2FzdCBhIG11dGFibGUgdHlwZVxuICogdG8gYW4gaW1tdXRhYmxlIHR5cGUgYW5kIG1ha2UgVHlwZVNjcmlwdCBoYXBweVxuICogQHBhcmFtIHZhbHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYXN0SW1tdXRhYmxlPFQ+KHZhbHVlOiBUKTogSW1tdXRhYmxlPFQ+IHtcblx0cmV0dXJuIHZhbHVlIGFzIGFueVxufVxuXG5leHBvcnQge0ltbWVyfVxuXG5leHBvcnQge2VuYWJsZUVTNX0gZnJvbSBcIi4vcGx1Z2lucy9lczVcIlxuZXhwb3J0IHtlbmFibGVQYXRjaGVzfSBmcm9tIFwiLi9wbHVnaW5zL3BhdGNoZXNcIlxuZXhwb3J0IHtlbmFibGVNYXBTZXR9IGZyb20gXCIuL3BsdWdpbnMvbWFwc2V0XCJcbmV4cG9ydCB7ZW5hYmxlQWxsUGx1Z2luc30gZnJvbSBcIi4vcGx1Z2lucy9hbGxcIlxuIiwgIi8vIFNob3VsZCBiZSBubyBpbXBvcnRzIGhlcmUhXG5cbi8vIFNvbWUgdGhpbmdzIHRoYXQgc2hvdWxkIGJlIGV2YWx1YXRlZCBiZWZvcmUgYWxsIGVsc2UuLi5cblxuLy8gV2Ugb25seSB3YW50IHRvIGtub3cgaWYgbm9uLXBvbHlmaWxsZWQgc3ltYm9scyBhcmUgYXZhaWxhYmxlXG5jb25zdCBoYXNTeW1ib2wgPVxuXHR0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiBTeW1ib2woXCJ4XCIpID09PSBcInN5bWJvbFwiXG5leHBvcnQgY29uc3QgaGFzTWFwID0gdHlwZW9mIE1hcCAhPT0gXCJ1bmRlZmluZWRcIlxuZXhwb3J0IGNvbnN0IGhhc1NldCA9IHR5cGVvZiBTZXQgIT09IFwidW5kZWZpbmVkXCJcbmV4cG9ydCBjb25zdCBoYXNQcm94aWVzID1cblx0dHlwZW9mIFByb3h5ICE9PSBcInVuZGVmaW5lZFwiICYmXG5cdHR5cGVvZiBQcm94eS5yZXZvY2FibGUgIT09IFwidW5kZWZpbmVkXCIgJiZcblx0dHlwZW9mIFJlZmxlY3QgIT09IFwidW5kZWZpbmVkXCJcblxuLyoqXG4gKiBUaGUgc2VudGluZWwgdmFsdWUgcmV0dXJuZWQgYnkgcHJvZHVjZXJzIHRvIHJlcGxhY2UgdGhlIGRyYWZ0IHdpdGggdW5kZWZpbmVkLlxuICovXG5leHBvcnQgY29uc3QgTk9USElORzogTm90aGluZyA9IGhhc1N5bWJvbFxuXHQ/IFN5bWJvbC5mb3IoXCJpbW1lci1ub3RoaW5nXCIpXG5cdDogKHtbXCJpbW1lci1ub3RoaW5nXCJdOiB0cnVlfSBhcyBhbnkpXG5cbi8qKlxuICogVG8gbGV0IEltbWVyIHRyZWF0IHlvdXIgY2xhc3MgaW5zdGFuY2VzIGFzIHBsYWluIGltbXV0YWJsZSBvYmplY3RzXG4gKiAoYWxiZWl0IHdpdGggYSBjdXN0b20gcHJvdG90eXBlKSwgeW91IG11c3QgZGVmaW5lIGVpdGhlciBhbiBpbnN0YW5jZSBwcm9wZXJ0eVxuICogb3IgYSBzdGF0aWMgcHJvcGVydHkgb24gZWFjaCBvZiB5b3VyIGN1c3RvbSBjbGFzc2VzLlxuICpcbiAqIE90aGVyd2lzZSwgeW91ciBjbGFzcyBpbnN0YW5jZSB3aWxsIG5ldmVyIGJlIGRyYWZ0ZWQsIHdoaWNoIG1lYW5zIGl0IHdvbid0IGJlXG4gKiBzYWZlIHRvIG11dGF0ZSBpbiBhIHByb2R1Y2UgY2FsbGJhY2suXG4gKi9cbmV4cG9ydCBjb25zdCBEUkFGVEFCTEU6IHVuaXF1ZSBzeW1ib2wgPSBoYXNTeW1ib2xcblx0PyBTeW1ib2wuZm9yKFwiaW1tZXItZHJhZnRhYmxlXCIpXG5cdDogKFwiX18kaW1tZXJfZHJhZnRhYmxlXCIgYXMgYW55KVxuXG5leHBvcnQgY29uc3QgRFJBRlRfU1RBVEU6IHVuaXF1ZSBzeW1ib2wgPSBoYXNTeW1ib2xcblx0PyBTeW1ib2wuZm9yKFwiaW1tZXItc3RhdGVcIilcblx0OiAoXCJfXyRpbW1lcl9zdGF0ZVwiIGFzIGFueSlcblxuLy8gRXZlbiBhIHBvbHlmaWxsZWQgU3ltYm9sIG1pZ2h0IHByb3ZpZGUgU3ltYm9sLml0ZXJhdG9yXG5leHBvcnQgY29uc3QgaXRlcmF0b3JTeW1ib2w6IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPVxuXHQodHlwZW9mIFN5bWJvbCAhPSBcInVuZGVmaW5lZFwiICYmIFN5bWJvbC5pdGVyYXRvcikgfHwgKFwiQEBpdGVyYXRvclwiIGFzIGFueSlcblxuLyoqIFVzZSBhIGNsYXNzIHR5cGUgZm9yIGBub3RoaW5nYCBzbyBpdHMgdHlwZSBpcyB1bmlxdWUgKi9cbmV4cG9ydCBjbGFzcyBOb3RoaW5nIHtcblx0Ly8gVGhpcyBsZXRzIHVzIGRvIGBFeGNsdWRlPFQsIE5vdGhpbmc+YFxuXHQvLyBAdHMtaWdub3JlXG5cdHByaXZhdGUgXyE6IHVuaXF1ZSBzeW1ib2xcbn1cbiIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdHlwZW9mKG8pIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gdHlwZW9mIG87XG4gIH0gOiBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvO1xuICB9LCBfdHlwZW9mKG8pO1xufSIsICJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRvUHJpbWl0aXZlKHQsIHIpIHtcbiAgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7XG4gIHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdO1xuICBpZiAodm9pZCAwICE9PSBlKSB7XG4gICAgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7XG4gICAgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpO1xuICB9XG4gIHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7XG59IiwgImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuaW1wb3J0IHRvUHJpbWl0aXZlIGZyb20gXCIuL3RvUHJpbWl0aXZlLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0b1Byb3BlcnR5S2V5KHQpIHtcbiAgdmFyIGkgPSB0b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTtcbiAgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBTdHJpbmcoaSk7XG59IiwgImltcG9ydCB0b1Byb3BlcnR5S2V5IGZyb20gXCIuL3RvUHJvcGVydHlLZXkuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHtcbiAga2V5ID0gdG9Qcm9wZXJ0eUtleShrZXkpO1xuICBpZiAoa2V5IGluIG9iaikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgfVxuICByZXR1cm4gb2JqO1xufSIsICJpbXBvcnQgZGVmaW5lUHJvcGVydHkgZnJvbSBcIi4vZGVmaW5lUHJvcGVydHkuanNcIjtcbmZ1bmN0aW9uIG93bktleXMoZSwgcikge1xuICB2YXIgdCA9IE9iamVjdC5rZXlzKGUpO1xuICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICAgIHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtcbiAgICByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHtcbiAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7XG4gICAgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7XG4gIH1cbiAgcmV0dXJuIHQ7XG59XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfb2JqZWN0U3ByZWFkMihlKSB7XG4gIGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7XG4gICAgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9O1xuICAgIHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7XG4gICAgICBkZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTtcbiAgICB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gZTtcbn0iLCAiaW1wb3J0IF9vYmplY3RTcHJlYWQgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0U3ByZWFkMic7XG5cbi8qKlxuICogQWRhcHRlZCBmcm9tIFJlYWN0OiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvYmxvYi9tYXN0ZXIvcGFja2FnZXMvc2hhcmVkL2Zvcm1hdFByb2RFcnJvck1lc3NhZ2UuanNcbiAqXG4gKiBEbyBub3QgcmVxdWlyZSB0aGlzIG1vZHVsZSBkaXJlY3RseSEgVXNlIG5vcm1hbCB0aHJvdyBlcnJvciBjYWxscy4gVGhlc2UgbWVzc2FnZXMgd2lsbCBiZSByZXBsYWNlZCB3aXRoIGVycm9yIGNvZGVzXG4gKiBkdXJpbmcgYnVpbGQuXG4gKiBAcGFyYW0ge251bWJlcn0gY29kZVxuICovXG5mdW5jdGlvbiBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKGNvZGUpIHtcbiAgcmV0dXJuIFwiTWluaWZpZWQgUmVkdXggZXJyb3IgI1wiICsgY29kZSArIFwiOyB2aXNpdCBodHRwczovL3JlZHV4LmpzLm9yZy9FcnJvcnM/Y29kZT1cIiArIGNvZGUgKyBcIiBmb3IgdGhlIGZ1bGwgbWVzc2FnZSBvciBcIiArICd1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgZm9yIGZ1bGwgZXJyb3JzLiAnO1xufVxuXG4vLyBJbmxpbmVkIHZlcnNpb24gb2YgdGhlIGBzeW1ib2wtb2JzZXJ2YWJsZWAgcG9seWZpbGxcbnZhciAkJG9ic2VydmFibGUgPSAoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wub2JzZXJ2YWJsZSB8fCAnQEBvYnNlcnZhYmxlJztcbn0pKCk7XG5cbi8qKlxuICogVGhlc2UgYXJlIHByaXZhdGUgYWN0aW9uIHR5cGVzIHJlc2VydmVkIGJ5IFJlZHV4LlxuICogRm9yIGFueSB1bmtub3duIGFjdGlvbnMsIHlvdSBtdXN0IHJldHVybiB0aGUgY3VycmVudCBzdGF0ZS5cbiAqIElmIHRoZSBjdXJyZW50IHN0YXRlIGlzIHVuZGVmaW5lZCwgeW91IG11c3QgcmV0dXJuIHRoZSBpbml0aWFsIHN0YXRlLlxuICogRG8gbm90IHJlZmVyZW5jZSB0aGVzZSBhY3Rpb24gdHlwZXMgZGlyZWN0bHkgaW4geW91ciBjb2RlLlxuICovXG52YXIgcmFuZG9tU3RyaW5nID0gZnVuY3Rpb24gcmFuZG9tU3RyaW5nKCkge1xuICByZXR1cm4gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDcpLnNwbGl0KCcnKS5qb2luKCcuJyk7XG59O1xuXG52YXIgQWN0aW9uVHlwZXMgPSB7XG4gIElOSVQ6IFwiQEByZWR1eC9JTklUXCIgKyByYW5kb21TdHJpbmcoKSxcbiAgUkVQTEFDRTogXCJAQHJlZHV4L1JFUExBQ0VcIiArIHJhbmRvbVN0cmluZygpLFxuICBQUk9CRV9VTktOT1dOX0FDVElPTjogZnVuY3Rpb24gUFJPQkVfVU5LTk9XTl9BQ1RJT04oKSB7XG4gICAgcmV0dXJuIFwiQEByZWR1eC9QUk9CRV9VTktOT1dOX0FDVElPTlwiICsgcmFuZG9tU3RyaW5nKCk7XG4gIH1cbn07XG5cbi8qKlxuICogQHBhcmFtIHthbnl9IG9iaiBUaGUgb2JqZWN0IHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgYXJndW1lbnQgYXBwZWFycyB0byBiZSBhIHBsYWluIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdChvYmopIHtcbiAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnIHx8IG9iaiA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICB2YXIgcHJvdG8gPSBvYmo7XG5cbiAgd2hpbGUgKE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90bykgIT09IG51bGwpIHtcbiAgICBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90byk7XG4gIH1cblxuICByZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iaikgPT09IHByb3RvO1xufVxuXG4vLyBJbmxpbmVkIC8gc2hvcnRlbmVkIHZlcnNpb24gb2YgYGtpbmRPZmAgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vam9uc2NobGlua2VydC9raW5kLW9mXG5mdW5jdGlvbiBtaW5pS2luZE9mKHZhbCkge1xuICBpZiAodmFsID09PSB2b2lkIDApIHJldHVybiAndW5kZWZpbmVkJztcbiAgaWYgKHZhbCA9PT0gbnVsbCkgcmV0dXJuICdudWxsJztcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsO1xuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgY2FzZSAnbnVtYmVyJzpcbiAgICBjYXNlICdzeW1ib2wnOlxuICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgICB9XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSByZXR1cm4gJ2FycmF5JztcbiAgaWYgKGlzRGF0ZSh2YWwpKSByZXR1cm4gJ2RhdGUnO1xuICBpZiAoaXNFcnJvcih2YWwpKSByZXR1cm4gJ2Vycm9yJztcbiAgdmFyIGNvbnN0cnVjdG9yTmFtZSA9IGN0b3JOYW1lKHZhbCk7XG5cbiAgc3dpdGNoIChjb25zdHJ1Y3Rvck5hbWUpIHtcbiAgICBjYXNlICdTeW1ib2wnOlxuICAgIGNhc2UgJ1Byb21pc2UnOlxuICAgIGNhc2UgJ1dlYWtNYXAnOlxuICAgIGNhc2UgJ1dlYWtTZXQnOlxuICAgIGNhc2UgJ01hcCc6XG4gICAgY2FzZSAnU2V0JzpcbiAgICAgIHJldHVybiBjb25zdHJ1Y3Rvck5hbWU7XG4gIH0gLy8gb3RoZXJcblxuXG4gIHJldHVybiB0eXBlLnNsaWNlKDgsIC0xKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xccy9nLCAnJyk7XG59XG5cbmZ1bmN0aW9uIGN0b3JOYW1lKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbC5jb25zdHJ1Y3RvciA9PT0gJ2Z1bmN0aW9uJyA/IHZhbC5jb25zdHJ1Y3Rvci5uYW1lIDogbnVsbDtcbn1cblxuZnVuY3Rpb24gaXNFcnJvcih2YWwpIHtcbiAgcmV0dXJuIHZhbCBpbnN0YW5jZW9mIEVycm9yIHx8IHR5cGVvZiB2YWwubWVzc2FnZSA9PT0gJ3N0cmluZycgJiYgdmFsLmNvbnN0cnVjdG9yICYmIHR5cGVvZiB2YWwuY29uc3RydWN0b3Iuc3RhY2tUcmFjZUxpbWl0ID09PSAnbnVtYmVyJztcbn1cblxuZnVuY3Rpb24gaXNEYXRlKHZhbCkge1xuICBpZiAodmFsIGluc3RhbmNlb2YgRGF0ZSkgcmV0dXJuIHRydWU7XG4gIHJldHVybiB0eXBlb2YgdmFsLnRvRGF0ZVN0cmluZyA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgdmFsLmdldERhdGUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbC5zZXREYXRlID09PSAnZnVuY3Rpb24nO1xufVxuXG5mdW5jdGlvbiBraW5kT2YodmFsKSB7XG4gIHZhciB0eXBlT2ZWYWwgPSB0eXBlb2YgdmFsO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgdHlwZU9mVmFsID0gbWluaUtpbmRPZih2YWwpO1xuICB9XG5cbiAgcmV0dXJuIHR5cGVPZlZhbDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZFxuICpcbiAqICoqV2UgcmVjb21tZW5kIHVzaW5nIHRoZSBgY29uZmlndXJlU3RvcmVgIG1ldGhvZFxuICogb2YgdGhlIGBAcmVkdXhqcy90b29sa2l0YCBwYWNrYWdlKiosIHdoaWNoIHJlcGxhY2VzIGBjcmVhdGVTdG9yZWAuXG4gKlxuICogUmVkdXggVG9vbGtpdCBpcyBvdXIgcmVjb21tZW5kZWQgYXBwcm9hY2ggZm9yIHdyaXRpbmcgUmVkdXggbG9naWMgdG9kYXksXG4gKiBpbmNsdWRpbmcgc3RvcmUgc2V0dXAsIHJlZHVjZXJzLCBkYXRhIGZldGNoaW5nLCBhbmQgbW9yZS5cbiAqXG4gKiAqKkZvciBtb3JlIGRldGFpbHMsIHBsZWFzZSByZWFkIHRoaXMgUmVkdXggZG9jcyBwYWdlOioqXG4gKiAqKmh0dHBzOi8vcmVkdXguanMub3JnL2ludHJvZHVjdGlvbi93aHktcnRrLWlzLXJlZHV4LXRvZGF5KipcbiAqXG4gKiBgY29uZmlndXJlU3RvcmVgIGZyb20gUmVkdXggVG9vbGtpdCBpcyBhbiBpbXByb3ZlZCB2ZXJzaW9uIG9mIGBjcmVhdGVTdG9yZWAgdGhhdFxuICogc2ltcGxpZmllcyBzZXR1cCBhbmQgaGVscHMgYXZvaWQgY29tbW9uIGJ1Z3MuXG4gKlxuICogWW91IHNob3VsZCBub3QgYmUgdXNpbmcgdGhlIGByZWR1eGAgY29yZSBwYWNrYWdlIGJ5IGl0c2VsZiB0b2RheSwgZXhjZXB0IGZvciBsZWFybmluZyBwdXJwb3Nlcy5cbiAqIFRoZSBgY3JlYXRlU3RvcmVgIG1ldGhvZCBmcm9tIHRoZSBjb3JlIGByZWR1eGAgcGFja2FnZSB3aWxsIG5vdCBiZSByZW1vdmVkLCBidXQgd2UgZW5jb3VyYWdlXG4gKiBhbGwgdXNlcnMgdG8gbWlncmF0ZSB0byB1c2luZyBSZWR1eCBUb29sa2l0IGZvciBhbGwgUmVkdXggY29kZS5cbiAqXG4gKiBJZiB5b3Ugd2FudCB0byB1c2UgYGNyZWF0ZVN0b3JlYCB3aXRob3V0IHRoaXMgdmlzdWFsIGRlcHJlY2F0aW9uIHdhcm5pbmcsIHVzZVxuICogdGhlIGBsZWdhY3lfY3JlYXRlU3RvcmVgIGltcG9ydCBpbnN0ZWFkOlxuICpcbiAqIGBpbXBvcnQgeyBsZWdhY3lfY3JlYXRlU3RvcmUgYXMgY3JlYXRlU3RvcmV9IGZyb20gJ3JlZHV4J2BcbiAqXG4gKi9cblxuZnVuY3Rpb24gY3JlYXRlU3RvcmUocmVkdWNlciwgcHJlbG9hZGVkU3RhdGUsIGVuaGFuY2VyKSB7XG4gIHZhciBfcmVmMjtcblxuICBpZiAodHlwZW9mIHByZWxvYWRlZFN0YXRlID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBlbmhhbmNlciA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgZW5oYW5jZXIgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGFyZ3VtZW50c1szXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDApIDogJ0l0IGxvb2tzIGxpa2UgeW91IGFyZSBwYXNzaW5nIHNldmVyYWwgc3RvcmUgZW5oYW5jZXJzIHRvICcgKyAnY3JlYXRlU3RvcmUoKS4gVGhpcyBpcyBub3Qgc3VwcG9ydGVkLiBJbnN0ZWFkLCBjb21wb3NlIHRoZW0gJyArICd0b2dldGhlciB0byBhIHNpbmdsZSBmdW5jdGlvbi4gU2VlIGh0dHBzOi8vcmVkdXguanMub3JnL3R1dG9yaWFscy9mdW5kYW1lbnRhbHMvcGFydC00LXN0b3JlI2NyZWF0aW5nLWEtc3RvcmUtd2l0aC1lbmhhbmNlcnMgZm9yIGFuIGV4YW1wbGUuJyk7XG4gIH1cblxuICBpZiAodHlwZW9mIHByZWxvYWRlZFN0YXRlID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBlbmhhbmNlciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBlbmhhbmNlciA9IHByZWxvYWRlZFN0YXRlO1xuICAgIHByZWxvYWRlZFN0YXRlID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBlbmhhbmNlciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBpZiAodHlwZW9mIGVuaGFuY2VyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgxKSA6IFwiRXhwZWN0ZWQgdGhlIGVuaGFuY2VyIHRvIGJlIGEgZnVuY3Rpb24uIEluc3RlYWQsIHJlY2VpdmVkOiAnXCIgKyBraW5kT2YoZW5oYW5jZXIpICsgXCInXCIpO1xuICAgIH1cblxuICAgIHJldHVybiBlbmhhbmNlcihjcmVhdGVTdG9yZSkocmVkdWNlciwgcHJlbG9hZGVkU3RhdGUpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiByZWR1Y2VyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMikgOiBcIkV4cGVjdGVkIHRoZSByb290IHJlZHVjZXIgdG8gYmUgYSBmdW5jdGlvbi4gSW5zdGVhZCwgcmVjZWl2ZWQ6ICdcIiArIGtpbmRPZihyZWR1Y2VyKSArIFwiJ1wiKTtcbiAgfVxuXG4gIHZhciBjdXJyZW50UmVkdWNlciA9IHJlZHVjZXI7XG4gIHZhciBjdXJyZW50U3RhdGUgPSBwcmVsb2FkZWRTdGF0ZTtcbiAgdmFyIGN1cnJlbnRMaXN0ZW5lcnMgPSBbXTtcbiAgdmFyIG5leHRMaXN0ZW5lcnMgPSBjdXJyZW50TGlzdGVuZXJzO1xuICB2YXIgaXNEaXNwYXRjaGluZyA9IGZhbHNlO1xuICAvKipcbiAgICogVGhpcyBtYWtlcyBhIHNoYWxsb3cgY29weSBvZiBjdXJyZW50TGlzdGVuZXJzIHNvIHdlIGNhbiB1c2VcbiAgICogbmV4dExpc3RlbmVycyBhcyBhIHRlbXBvcmFyeSBsaXN0IHdoaWxlIGRpc3BhdGNoaW5nLlxuICAgKlxuICAgKiBUaGlzIHByZXZlbnRzIGFueSBidWdzIGFyb3VuZCBjb25zdW1lcnMgY2FsbGluZ1xuICAgKiBzdWJzY3JpYmUvdW5zdWJzY3JpYmUgaW4gdGhlIG1pZGRsZSBvZiBhIGRpc3BhdGNoLlxuICAgKi9cblxuICBmdW5jdGlvbiBlbnN1cmVDYW5NdXRhdGVOZXh0TGlzdGVuZXJzKCkge1xuICAgIGlmIChuZXh0TGlzdGVuZXJzID09PSBjdXJyZW50TGlzdGVuZXJzKSB7XG4gICAgICBuZXh0TGlzdGVuZXJzID0gY3VycmVudExpc3RlbmVycy5zbGljZSgpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUmVhZHMgdGhlIHN0YXRlIHRyZWUgbWFuYWdlZCBieSB0aGUgc3RvcmUuXG4gICAqXG4gICAqIEByZXR1cm5zIHthbnl9IFRoZSBjdXJyZW50IHN0YXRlIHRyZWUgb2YgeW91ciBhcHBsaWNhdGlvbi5cbiAgICovXG5cblxuICBmdW5jdGlvbiBnZXRTdGF0ZSgpIHtcbiAgICBpZiAoaXNEaXNwYXRjaGluZykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMykgOiAnWW91IG1heSBub3QgY2FsbCBzdG9yZS5nZXRTdGF0ZSgpIHdoaWxlIHRoZSByZWR1Y2VyIGlzIGV4ZWN1dGluZy4gJyArICdUaGUgcmVkdWNlciBoYXMgYWxyZWFkeSByZWNlaXZlZCB0aGUgc3RhdGUgYXMgYW4gYXJndW1lbnQuICcgKyAnUGFzcyBpdCBkb3duIGZyb20gdGhlIHRvcCByZWR1Y2VyIGluc3RlYWQgb2YgcmVhZGluZyBpdCBmcm9tIHRoZSBzdG9yZS4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY3VycmVudFN0YXRlO1xuICB9XG4gIC8qKlxuICAgKiBBZGRzIGEgY2hhbmdlIGxpc3RlbmVyLiBJdCB3aWxsIGJlIGNhbGxlZCBhbnkgdGltZSBhbiBhY3Rpb24gaXMgZGlzcGF0Y2hlZCxcbiAgICogYW5kIHNvbWUgcGFydCBvZiB0aGUgc3RhdGUgdHJlZSBtYXkgcG90ZW50aWFsbHkgaGF2ZSBjaGFuZ2VkLiBZb3UgbWF5IHRoZW5cbiAgICogY2FsbCBgZ2V0U3RhdGUoKWAgdG8gcmVhZCB0aGUgY3VycmVudCBzdGF0ZSB0cmVlIGluc2lkZSB0aGUgY2FsbGJhY2suXG4gICAqXG4gICAqIFlvdSBtYXkgY2FsbCBgZGlzcGF0Y2goKWAgZnJvbSBhIGNoYW5nZSBsaXN0ZW5lciwgd2l0aCB0aGUgZm9sbG93aW5nXG4gICAqIGNhdmVhdHM6XG4gICAqXG4gICAqIDEuIFRoZSBzdWJzY3JpcHRpb25zIGFyZSBzbmFwc2hvdHRlZCBqdXN0IGJlZm9yZSBldmVyeSBgZGlzcGF0Y2goKWAgY2FsbC5cbiAgICogSWYgeW91IHN1YnNjcmliZSBvciB1bnN1YnNjcmliZSB3aGlsZSB0aGUgbGlzdGVuZXJzIGFyZSBiZWluZyBpbnZva2VkLCB0aGlzXG4gICAqIHdpbGwgbm90IGhhdmUgYW55IGVmZmVjdCBvbiB0aGUgYGRpc3BhdGNoKClgIHRoYXQgaXMgY3VycmVudGx5IGluIHByb2dyZXNzLlxuICAgKiBIb3dldmVyLCB0aGUgbmV4dCBgZGlzcGF0Y2goKWAgY2FsbCwgd2hldGhlciBuZXN0ZWQgb3Igbm90LCB3aWxsIHVzZSBhIG1vcmVcbiAgICogcmVjZW50IHNuYXBzaG90IG9mIHRoZSBzdWJzY3JpcHRpb24gbGlzdC5cbiAgICpcbiAgICogMi4gVGhlIGxpc3RlbmVyIHNob3VsZCBub3QgZXhwZWN0IHRvIHNlZSBhbGwgc3RhdGUgY2hhbmdlcywgYXMgdGhlIHN0YXRlXG4gICAqIG1pZ2h0IGhhdmUgYmVlbiB1cGRhdGVkIG11bHRpcGxlIHRpbWVzIGR1cmluZyBhIG5lc3RlZCBgZGlzcGF0Y2goKWAgYmVmb3JlXG4gICAqIHRoZSBsaXN0ZW5lciBpcyBjYWxsZWQuIEl0IGlzLCBob3dldmVyLCBndWFyYW50ZWVkIHRoYXQgYWxsIHN1YnNjcmliZXJzXG4gICAqIHJlZ2lzdGVyZWQgYmVmb3JlIHRoZSBgZGlzcGF0Y2goKWAgc3RhcnRlZCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSBsYXRlc3RcbiAgICogc3RhdGUgYnkgdGhlIHRpbWUgaXQgZXhpdHMuXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGxpc3RlbmVyIEEgY2FsbGJhY2sgdG8gYmUgaW52b2tlZCBvbiBldmVyeSBkaXNwYXRjaC5cbiAgICogQHJldHVybnMge0Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRvIHJlbW92ZSB0aGlzIGNoYW5nZSBsaXN0ZW5lci5cbiAgICovXG5cblxuICBmdW5jdGlvbiBzdWJzY3JpYmUobGlzdGVuZXIpIHtcbiAgICBpZiAodHlwZW9mIGxpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSg0KSA6IFwiRXhwZWN0ZWQgdGhlIGxpc3RlbmVyIHRvIGJlIGEgZnVuY3Rpb24uIEluc3RlYWQsIHJlY2VpdmVkOiAnXCIgKyBraW5kT2YobGlzdGVuZXIpICsgXCInXCIpO1xuICAgIH1cblxuICAgIGlmIChpc0Rpc3BhdGNoaW5nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSg1KSA6ICdZb3UgbWF5IG5vdCBjYWxsIHN0b3JlLnN1YnNjcmliZSgpIHdoaWxlIHRoZSByZWR1Y2VyIGlzIGV4ZWN1dGluZy4gJyArICdJZiB5b3Ugd291bGQgbGlrZSB0byBiZSBub3RpZmllZCBhZnRlciB0aGUgc3RvcmUgaGFzIGJlZW4gdXBkYXRlZCwgc3Vic2NyaWJlIGZyb20gYSAnICsgJ2NvbXBvbmVudCBhbmQgaW52b2tlIHN0b3JlLmdldFN0YXRlKCkgaW4gdGhlIGNhbGxiYWNrIHRvIGFjY2VzcyB0aGUgbGF0ZXN0IHN0YXRlLiAnICsgJ1NlZSBodHRwczovL3JlZHV4LmpzLm9yZy9hcGkvc3RvcmUjc3Vic2NyaWJlbGlzdGVuZXIgZm9yIG1vcmUgZGV0YWlscy4nKTtcbiAgICB9XG5cbiAgICB2YXIgaXNTdWJzY3JpYmVkID0gdHJ1ZTtcbiAgICBlbnN1cmVDYW5NdXRhdGVOZXh0TGlzdGVuZXJzKCk7XG4gICAgbmV4dExpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gdW5zdWJzY3JpYmUoKSB7XG4gICAgICBpZiAoIWlzU3Vic2NyaWJlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChpc0Rpc3BhdGNoaW5nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDYpIDogJ1lvdSBtYXkgbm90IHVuc3Vic2NyaWJlIGZyb20gYSBzdG9yZSBsaXN0ZW5lciB3aGlsZSB0aGUgcmVkdWNlciBpcyBleGVjdXRpbmcuICcgKyAnU2VlIGh0dHBzOi8vcmVkdXguanMub3JnL2FwaS9zdG9yZSNzdWJzY3JpYmVsaXN0ZW5lciBmb3IgbW9yZSBkZXRhaWxzLicpO1xuICAgICAgfVxuXG4gICAgICBpc1N1YnNjcmliZWQgPSBmYWxzZTtcbiAgICAgIGVuc3VyZUNhbk11dGF0ZU5leHRMaXN0ZW5lcnMoKTtcbiAgICAgIHZhciBpbmRleCA9IG5leHRMaXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lcik7XG4gICAgICBuZXh0TGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICBjdXJyZW50TGlzdGVuZXJzID0gbnVsbDtcbiAgICB9O1xuICB9XG4gIC8qKlxuICAgKiBEaXNwYXRjaGVzIGFuIGFjdGlvbi4gSXQgaXMgdGhlIG9ubHkgd2F5IHRvIHRyaWdnZXIgYSBzdGF0ZSBjaGFuZ2UuXG4gICAqXG4gICAqIFRoZSBgcmVkdWNlcmAgZnVuY3Rpb24sIHVzZWQgdG8gY3JlYXRlIHRoZSBzdG9yZSwgd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGVcbiAgICogY3VycmVudCBzdGF0ZSB0cmVlIGFuZCB0aGUgZ2l2ZW4gYGFjdGlvbmAuIEl0cyByZXR1cm4gdmFsdWUgd2lsbFxuICAgKiBiZSBjb25zaWRlcmVkIHRoZSAqKm5leHQqKiBzdGF0ZSBvZiB0aGUgdHJlZSwgYW5kIHRoZSBjaGFuZ2UgbGlzdGVuZXJzXG4gICAqIHdpbGwgYmUgbm90aWZpZWQuXG4gICAqXG4gICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9ubHkgc3VwcG9ydHMgcGxhaW4gb2JqZWN0IGFjdGlvbnMuIElmIHlvdSB3YW50IHRvXG4gICAqIGRpc3BhdGNoIGEgUHJvbWlzZSwgYW4gT2JzZXJ2YWJsZSwgYSB0aHVuaywgb3Igc29tZXRoaW5nIGVsc2UsIHlvdSBuZWVkIHRvXG4gICAqIHdyYXAgeW91ciBzdG9yZSBjcmVhdGluZyBmdW5jdGlvbiBpbnRvIHRoZSBjb3JyZXNwb25kaW5nIG1pZGRsZXdhcmUuIEZvclxuICAgKiBleGFtcGxlLCBzZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBgcmVkdXgtdGh1bmtgIHBhY2thZ2UuIEV2ZW4gdGhlXG4gICAqIG1pZGRsZXdhcmUgd2lsbCBldmVudHVhbGx5IGRpc3BhdGNoIHBsYWluIG9iamVjdCBhY3Rpb25zIHVzaW5nIHRoaXMgbWV0aG9kLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gYWN0aW9uIEEgcGxhaW4gb2JqZWN0IHJlcHJlc2VudGluZyBcdTIwMUN3aGF0IGNoYW5nZWRcdTIwMUQuIEl0IGlzXG4gICAqIGEgZ29vZCBpZGVhIHRvIGtlZXAgYWN0aW9ucyBzZXJpYWxpemFibGUgc28geW91IGNhbiByZWNvcmQgYW5kIHJlcGxheSB1c2VyXG4gICAqIHNlc3Npb25zLCBvciB1c2UgdGhlIHRpbWUgdHJhdmVsbGluZyBgcmVkdXgtZGV2dG9vbHNgLiBBbiBhY3Rpb24gbXVzdCBoYXZlXG4gICAqIGEgYHR5cGVgIHByb3BlcnR5IHdoaWNoIG1heSBub3QgYmUgYHVuZGVmaW5lZGAuIEl0IGlzIGEgZ29vZCBpZGVhIHRvIHVzZVxuICAgKiBzdHJpbmcgY29uc3RhbnRzIGZvciBhY3Rpb24gdHlwZXMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IEZvciBjb252ZW5pZW5jZSwgdGhlIHNhbWUgYWN0aW9uIG9iamVjdCB5b3UgZGlzcGF0Y2hlZC5cbiAgICpcbiAgICogTm90ZSB0aGF0LCBpZiB5b3UgdXNlIGEgY3VzdG9tIG1pZGRsZXdhcmUsIGl0IG1heSB3cmFwIGBkaXNwYXRjaCgpYCB0b1xuICAgKiByZXR1cm4gc29tZXRoaW5nIGVsc2UgKGZvciBleGFtcGxlLCBhIFByb21pc2UgeW91IGNhbiBhd2FpdCkuXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gZGlzcGF0Y2goYWN0aW9uKSB7XG4gICAgaWYgKCFpc1BsYWluT2JqZWN0KGFjdGlvbikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDcpIDogXCJBY3Rpb25zIG11c3QgYmUgcGxhaW4gb2JqZWN0cy4gSW5zdGVhZCwgdGhlIGFjdHVhbCB0eXBlIHdhczogJ1wiICsga2luZE9mKGFjdGlvbikgKyBcIicuIFlvdSBtYXkgbmVlZCB0byBhZGQgbWlkZGxld2FyZSB0byB5b3VyIHN0b3JlIHNldHVwIHRvIGhhbmRsZSBkaXNwYXRjaGluZyBvdGhlciB2YWx1ZXMsIHN1Y2ggYXMgJ3JlZHV4LXRodW5rJyB0byBoYW5kbGUgZGlzcGF0Y2hpbmcgZnVuY3Rpb25zLiBTZWUgaHR0cHM6Ly9yZWR1eC5qcy5vcmcvdHV0b3JpYWxzL2Z1bmRhbWVudGFscy9wYXJ0LTQtc3RvcmUjbWlkZGxld2FyZSBhbmQgaHR0cHM6Ly9yZWR1eC5qcy5vcmcvdHV0b3JpYWxzL2Z1bmRhbWVudGFscy9wYXJ0LTYtYXN5bmMtbG9naWMjdXNpbmctdGhlLXJlZHV4LXRodW5rLW1pZGRsZXdhcmUgZm9yIGV4YW1wbGVzLlwiKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGFjdGlvbi50eXBlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoOCkgOiAnQWN0aW9ucyBtYXkgbm90IGhhdmUgYW4gdW5kZWZpbmVkIFwidHlwZVwiIHByb3BlcnR5LiBZb3UgbWF5IGhhdmUgbWlzc3BlbGxlZCBhbiBhY3Rpb24gdHlwZSBzdHJpbmcgY29uc3RhbnQuJyk7XG4gICAgfVxuXG4gICAgaWYgKGlzRGlzcGF0Y2hpbmcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDkpIDogJ1JlZHVjZXJzIG1heSBub3QgZGlzcGF0Y2ggYWN0aW9ucy4nKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgaXNEaXNwYXRjaGluZyA9IHRydWU7XG4gICAgICBjdXJyZW50U3RhdGUgPSBjdXJyZW50UmVkdWNlcihjdXJyZW50U3RhdGUsIGFjdGlvbik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlzRGlzcGF0Y2hpbmcgPSBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgbGlzdGVuZXJzID0gY3VycmVudExpc3RlbmVycyA9IG5leHRMaXN0ZW5lcnM7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3RlbmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGxpc3RlbmVyID0gbGlzdGVuZXJzW2ldO1xuICAgICAgbGlzdGVuZXIoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWN0aW9uO1xuICB9XG4gIC8qKlxuICAgKiBSZXBsYWNlcyB0aGUgcmVkdWNlciBjdXJyZW50bHkgdXNlZCBieSB0aGUgc3RvcmUgdG8gY2FsY3VsYXRlIHRoZSBzdGF0ZS5cbiAgICpcbiAgICogWW91IG1pZ2h0IG5lZWQgdGhpcyBpZiB5b3VyIGFwcCBpbXBsZW1lbnRzIGNvZGUgc3BsaXR0aW5nIGFuZCB5b3Ugd2FudCB0b1xuICAgKiBsb2FkIHNvbWUgb2YgdGhlIHJlZHVjZXJzIGR5bmFtaWNhbGx5LiBZb3UgbWlnaHQgYWxzbyBuZWVkIHRoaXMgaWYgeW91XG4gICAqIGltcGxlbWVudCBhIGhvdCByZWxvYWRpbmcgbWVjaGFuaXNtIGZvciBSZWR1eC5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gbmV4dFJlZHVjZXIgVGhlIHJlZHVjZXIgZm9yIHRoZSBzdG9yZSB0byB1c2UgaW5zdGVhZC5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcmVwbGFjZVJlZHVjZXIobmV4dFJlZHVjZXIpIHtcbiAgICBpZiAodHlwZW9mIG5leHRSZWR1Y2VyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgxMCkgOiBcIkV4cGVjdGVkIHRoZSBuZXh0UmVkdWNlciB0byBiZSBhIGZ1bmN0aW9uLiBJbnN0ZWFkLCByZWNlaXZlZDogJ1wiICsga2luZE9mKG5leHRSZWR1Y2VyKSk7XG4gICAgfVxuXG4gICAgY3VycmVudFJlZHVjZXIgPSBuZXh0UmVkdWNlcjsgLy8gVGhpcyBhY3Rpb24gaGFzIGEgc2ltaWxpYXIgZWZmZWN0IHRvIEFjdGlvblR5cGVzLklOSVQuXG4gICAgLy8gQW55IHJlZHVjZXJzIHRoYXQgZXhpc3RlZCBpbiBib3RoIHRoZSBuZXcgYW5kIG9sZCByb290UmVkdWNlclxuICAgIC8vIHdpbGwgcmVjZWl2ZSB0aGUgcHJldmlvdXMgc3RhdGUuIFRoaXMgZWZmZWN0aXZlbHkgcG9wdWxhdGVzXG4gICAgLy8gdGhlIG5ldyBzdGF0ZSB0cmVlIHdpdGggYW55IHJlbGV2YW50IGRhdGEgZnJvbSB0aGUgb2xkIG9uZS5cblxuICAgIGRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IEFjdGlvblR5cGVzLlJFUExBQ0VcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogSW50ZXJvcGVyYWJpbGl0eSBwb2ludCBmb3Igb2JzZXJ2YWJsZS9yZWFjdGl2ZSBsaWJyYXJpZXMuXG4gICAqIEByZXR1cm5zIHtvYnNlcnZhYmxlfSBBIG1pbmltYWwgb2JzZXJ2YWJsZSBvZiBzdGF0ZSBjaGFuZ2VzLlxuICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZSBvYnNlcnZhYmxlIHByb3Bvc2FsOlxuICAgKiBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1vYnNlcnZhYmxlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gb2JzZXJ2YWJsZSgpIHtcbiAgICB2YXIgX3JlZjtcblxuICAgIHZhciBvdXRlclN1YnNjcmliZSA9IHN1YnNjcmliZTtcbiAgICByZXR1cm4gX3JlZiA9IHtcbiAgICAgIC8qKlxuICAgICAgICogVGhlIG1pbmltYWwgb2JzZXJ2YWJsZSBzdWJzY3JpcHRpb24gbWV0aG9kLlxuICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9ic2VydmVyIEFueSBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCBhcyBhbiBvYnNlcnZlci5cbiAgICAgICAqIFRoZSBvYnNlcnZlciBvYmplY3Qgc2hvdWxkIGhhdmUgYSBgbmV4dGAgbWV0aG9kLlxuICAgICAgICogQHJldHVybnMge3N1YnNjcmlwdGlvbn0gQW4gb2JqZWN0IHdpdGggYW4gYHVuc3Vic2NyaWJlYCBtZXRob2QgdGhhdCBjYW5cbiAgICAgICAqIGJlIHVzZWQgdG8gdW5zdWJzY3JpYmUgdGhlIG9ic2VydmFibGUgZnJvbSB0aGUgc3RvcmUsIGFuZCBwcmV2ZW50IGZ1cnRoZXJcbiAgICAgICAqIGVtaXNzaW9uIG9mIHZhbHVlcyBmcm9tIHRoZSBvYnNlcnZhYmxlLlxuICAgICAgICovXG4gICAgICBzdWJzY3JpYmU6IGZ1bmN0aW9uIHN1YnNjcmliZShvYnNlcnZlcikge1xuICAgICAgICBpZiAodHlwZW9mIG9ic2VydmVyICE9PSAnb2JqZWN0JyB8fCBvYnNlcnZlciA9PT0gbnVsbCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDExKSA6IFwiRXhwZWN0ZWQgdGhlIG9ic2VydmVyIHRvIGJlIGFuIG9iamVjdC4gSW5zdGVhZCwgcmVjZWl2ZWQ6ICdcIiArIGtpbmRPZihvYnNlcnZlcikgKyBcIidcIik7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBvYnNlcnZlU3RhdGUoKSB7XG4gICAgICAgICAgaWYgKG9ic2VydmVyLm5leHQpIHtcbiAgICAgICAgICAgIG9ic2VydmVyLm5leHQoZ2V0U3RhdGUoKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgb2JzZXJ2ZVN0YXRlKCk7XG4gICAgICAgIHZhciB1bnN1YnNjcmliZSA9IG91dGVyU3Vic2NyaWJlKG9ic2VydmVTdGF0ZSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdW5zdWJzY3JpYmU6IHVuc3Vic2NyaWJlXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSwgX3JlZlskJG9ic2VydmFibGVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSwgX3JlZjtcbiAgfSAvLyBXaGVuIGEgc3RvcmUgaXMgY3JlYXRlZCwgYW4gXCJJTklUXCIgYWN0aW9uIGlzIGRpc3BhdGNoZWQgc28gdGhhdCBldmVyeVxuICAvLyByZWR1Y2VyIHJldHVybnMgdGhlaXIgaW5pdGlhbCBzdGF0ZS4gVGhpcyBlZmZlY3RpdmVseSBwb3B1bGF0ZXNcbiAgLy8gdGhlIGluaXRpYWwgc3RhdGUgdHJlZS5cblxuXG4gIGRpc3BhdGNoKHtcbiAgICB0eXBlOiBBY3Rpb25UeXBlcy5JTklUXG4gIH0pO1xuICByZXR1cm4gX3JlZjIgPSB7XG4gICAgZGlzcGF0Y2g6IGRpc3BhdGNoLFxuICAgIHN1YnNjcmliZTogc3Vic2NyaWJlLFxuICAgIGdldFN0YXRlOiBnZXRTdGF0ZSxcbiAgICByZXBsYWNlUmVkdWNlcjogcmVwbGFjZVJlZHVjZXJcbiAgfSwgX3JlZjJbJCRvYnNlcnZhYmxlXSA9IG9ic2VydmFibGUsIF9yZWYyO1xufVxuLyoqXG4gKiBDcmVhdGVzIGEgUmVkdXggc3RvcmUgdGhhdCBob2xkcyB0aGUgc3RhdGUgdHJlZS5cbiAqXG4gKiAqKldlIHJlY29tbWVuZCB1c2luZyBgY29uZmlndXJlU3RvcmVgIGZyb20gdGhlXG4gKiBgQHJlZHV4anMvdG9vbGtpdGAgcGFja2FnZSoqLCB3aGljaCByZXBsYWNlcyBgY3JlYXRlU3RvcmVgOlxuICogKipodHRwczovL3JlZHV4LmpzLm9yZy9pbnRyb2R1Y3Rpb24vd2h5LXJ0ay1pcy1yZWR1eC10b2RheSoqXG4gKlxuICogVGhlIG9ubHkgd2F5IHRvIGNoYW5nZSB0aGUgZGF0YSBpbiB0aGUgc3RvcmUgaXMgdG8gY2FsbCBgZGlzcGF0Y2goKWAgb24gaXQuXG4gKlxuICogVGhlcmUgc2hvdWxkIG9ubHkgYmUgYSBzaW5nbGUgc3RvcmUgaW4geW91ciBhcHAuIFRvIHNwZWNpZnkgaG93IGRpZmZlcmVudFxuICogcGFydHMgb2YgdGhlIHN0YXRlIHRyZWUgcmVzcG9uZCB0byBhY3Rpb25zLCB5b3UgbWF5IGNvbWJpbmUgc2V2ZXJhbCByZWR1Y2Vyc1xuICogaW50byBhIHNpbmdsZSByZWR1Y2VyIGZ1bmN0aW9uIGJ5IHVzaW5nIGBjb21iaW5lUmVkdWNlcnNgLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlZHVjZXIgQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIG5leHQgc3RhdGUgdHJlZSwgZ2l2ZW5cbiAqIHRoZSBjdXJyZW50IHN0YXRlIHRyZWUgYW5kIHRoZSBhY3Rpb24gdG8gaGFuZGxlLlxuICpcbiAqIEBwYXJhbSB7YW55fSBbcHJlbG9hZGVkU3RhdGVdIFRoZSBpbml0aWFsIHN0YXRlLiBZb3UgbWF5IG9wdGlvbmFsbHkgc3BlY2lmeSBpdFxuICogdG8gaHlkcmF0ZSB0aGUgc3RhdGUgZnJvbSB0aGUgc2VydmVyIGluIHVuaXZlcnNhbCBhcHBzLCBvciB0byByZXN0b3JlIGFcbiAqIHByZXZpb3VzbHkgc2VyaWFsaXplZCB1c2VyIHNlc3Npb24uXG4gKiBJZiB5b3UgdXNlIGBjb21iaW5lUmVkdWNlcnNgIHRvIHByb2R1Y2UgdGhlIHJvb3QgcmVkdWNlciBmdW5jdGlvbiwgdGhpcyBtdXN0IGJlXG4gKiBhbiBvYmplY3Qgd2l0aCB0aGUgc2FtZSBzaGFwZSBhcyBgY29tYmluZVJlZHVjZXJzYCBrZXlzLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtlbmhhbmNlcl0gVGhlIHN0b3JlIGVuaGFuY2VyLiBZb3UgbWF5IG9wdGlvbmFsbHkgc3BlY2lmeSBpdFxuICogdG8gZW5oYW5jZSB0aGUgc3RvcmUgd2l0aCB0aGlyZC1wYXJ0eSBjYXBhYmlsaXRpZXMgc3VjaCBhcyBtaWRkbGV3YXJlLFxuICogdGltZSB0cmF2ZWwsIHBlcnNpc3RlbmNlLCBldGMuIFRoZSBvbmx5IHN0b3JlIGVuaGFuY2VyIHRoYXQgc2hpcHMgd2l0aCBSZWR1eFxuICogaXMgYGFwcGx5TWlkZGxld2FyZSgpYC5cbiAqXG4gKiBAcmV0dXJucyB7U3RvcmV9IEEgUmVkdXggc3RvcmUgdGhhdCBsZXRzIHlvdSByZWFkIHRoZSBzdGF0ZSwgZGlzcGF0Y2ggYWN0aW9uc1xuICogYW5kIHN1YnNjcmliZSB0byBjaGFuZ2VzLlxuICovXG5cbnZhciBsZWdhY3lfY3JlYXRlU3RvcmUgPSBjcmVhdGVTdG9yZTtcblxuLyoqXG4gKiBQcmludHMgYSB3YXJuaW5nIGluIHRoZSBjb25zb2xlIGlmIGl0IGV4aXN0cy5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZSBUaGUgd2FybmluZyBtZXNzYWdlLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHdhcm5pbmcobWVzc2FnZSkge1xuICAvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG4gIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGNvbnNvbGUuZXJyb3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xuICB9XG4gIC8qIGVzbGludC1lbmFibGUgbm8tY29uc29sZSAqL1xuXG5cbiAgdHJ5IHtcbiAgICAvLyBUaGlzIGVycm9yIHdhcyB0aHJvd24gYXMgYSBjb252ZW5pZW5jZSBzbyB0aGF0IGlmIHlvdSBlbmFibGVcbiAgICAvLyBcImJyZWFrIG9uIGFsbCBleGNlcHRpb25zXCIgaW4geW91ciBjb25zb2xlLFxuICAgIC8vIGl0IHdvdWxkIHBhdXNlIHRoZSBleGVjdXRpb24gYXQgdGhpcyBsaW5lLlxuICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgfSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuXG59XG5cbmZ1bmN0aW9uIGdldFVuZXhwZWN0ZWRTdGF0ZVNoYXBlV2FybmluZ01lc3NhZ2UoaW5wdXRTdGF0ZSwgcmVkdWNlcnMsIGFjdGlvbiwgdW5leHBlY3RlZEtleUNhY2hlKSB7XG4gIHZhciByZWR1Y2VyS2V5cyA9IE9iamVjdC5rZXlzKHJlZHVjZXJzKTtcbiAgdmFyIGFyZ3VtZW50TmFtZSA9IGFjdGlvbiAmJiBhY3Rpb24udHlwZSA9PT0gQWN0aW9uVHlwZXMuSU5JVCA/ICdwcmVsb2FkZWRTdGF0ZSBhcmd1bWVudCBwYXNzZWQgdG8gY3JlYXRlU3RvcmUnIDogJ3ByZXZpb3VzIHN0YXRlIHJlY2VpdmVkIGJ5IHRoZSByZWR1Y2VyJztcblxuICBpZiAocmVkdWNlcktleXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuICdTdG9yZSBkb2VzIG5vdCBoYXZlIGEgdmFsaWQgcmVkdWNlci4gTWFrZSBzdXJlIHRoZSBhcmd1bWVudCBwYXNzZWQgJyArICd0byBjb21iaW5lUmVkdWNlcnMgaXMgYW4gb2JqZWN0IHdob3NlIHZhbHVlcyBhcmUgcmVkdWNlcnMuJztcbiAgfVxuXG4gIGlmICghaXNQbGFpbk9iamVjdChpbnB1dFN0YXRlKSkge1xuICAgIHJldHVybiBcIlRoZSBcIiArIGFyZ3VtZW50TmFtZSArIFwiIGhhcyB1bmV4cGVjdGVkIHR5cGUgb2YgXFxcIlwiICsga2luZE9mKGlucHV0U3RhdGUpICsgXCJcXFwiLiBFeHBlY3RlZCBhcmd1bWVudCB0byBiZSBhbiBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIFwiICsgKFwia2V5czogXFxcIlwiICsgcmVkdWNlcktleXMuam9pbignXCIsIFwiJykgKyBcIlxcXCJcIik7XG4gIH1cblxuICB2YXIgdW5leHBlY3RlZEtleXMgPSBPYmplY3Qua2V5cyhpbnB1dFN0YXRlKS5maWx0ZXIoZnVuY3Rpb24gKGtleSkge1xuICAgIHJldHVybiAhcmVkdWNlcnMuaGFzT3duUHJvcGVydHkoa2V5KSAmJiAhdW5leHBlY3RlZEtleUNhY2hlW2tleV07XG4gIH0pO1xuICB1bmV4cGVjdGVkS2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICB1bmV4cGVjdGVkS2V5Q2FjaGVba2V5XSA9IHRydWU7XG4gIH0pO1xuICBpZiAoYWN0aW9uICYmIGFjdGlvbi50eXBlID09PSBBY3Rpb25UeXBlcy5SRVBMQUNFKSByZXR1cm47XG5cbiAgaWYgKHVuZXhwZWN0ZWRLZXlzLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gXCJVbmV4cGVjdGVkIFwiICsgKHVuZXhwZWN0ZWRLZXlzLmxlbmd0aCA+IDEgPyAna2V5cycgOiAna2V5JykgKyBcIiBcIiArIChcIlxcXCJcIiArIHVuZXhwZWN0ZWRLZXlzLmpvaW4oJ1wiLCBcIicpICsgXCJcXFwiIGZvdW5kIGluIFwiICsgYXJndW1lbnROYW1lICsgXCIuIFwiKSArIFwiRXhwZWN0ZWQgdG8gZmluZCBvbmUgb2YgdGhlIGtub3duIHJlZHVjZXIga2V5cyBpbnN0ZWFkOiBcIiArIChcIlxcXCJcIiArIHJlZHVjZXJLZXlzLmpvaW4oJ1wiLCBcIicpICsgXCJcXFwiLiBVbmV4cGVjdGVkIGtleXMgd2lsbCBiZSBpZ25vcmVkLlwiKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhc3NlcnRSZWR1Y2VyU2hhcGUocmVkdWNlcnMpIHtcbiAgT2JqZWN0LmtleXMocmVkdWNlcnMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciByZWR1Y2VyID0gcmVkdWNlcnNba2V5XTtcbiAgICB2YXIgaW5pdGlhbFN0YXRlID0gcmVkdWNlcih1bmRlZmluZWQsIHtcbiAgICAgIHR5cGU6IEFjdGlvblR5cGVzLklOSVRcbiAgICB9KTtcblxuICAgIGlmICh0eXBlb2YgaW5pdGlhbFN0YXRlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMTIpIDogXCJUaGUgc2xpY2UgcmVkdWNlciBmb3Iga2V5IFxcXCJcIiArIGtleSArIFwiXFxcIiByZXR1cm5lZCB1bmRlZmluZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uLiBcIiArIFwiSWYgdGhlIHN0YXRlIHBhc3NlZCB0byB0aGUgcmVkdWNlciBpcyB1bmRlZmluZWQsIHlvdSBtdXN0IFwiICsgXCJleHBsaWNpdGx5IHJldHVybiB0aGUgaW5pdGlhbCBzdGF0ZS4gVGhlIGluaXRpYWwgc3RhdGUgbWF5IFwiICsgXCJub3QgYmUgdW5kZWZpbmVkLiBJZiB5b3UgZG9uJ3Qgd2FudCB0byBzZXQgYSB2YWx1ZSBmb3IgdGhpcyByZWR1Y2VyLCBcIiArIFwieW91IGNhbiB1c2UgbnVsbCBpbnN0ZWFkIG9mIHVuZGVmaW5lZC5cIik7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiByZWR1Y2VyKHVuZGVmaW5lZCwge1xuICAgICAgdHlwZTogQWN0aW9uVHlwZXMuUFJPQkVfVU5LTk9XTl9BQ1RJT04oKVxuICAgIH0pID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMTMpIDogXCJUaGUgc2xpY2UgcmVkdWNlciBmb3Iga2V5IFxcXCJcIiArIGtleSArIFwiXFxcIiByZXR1cm5lZCB1bmRlZmluZWQgd2hlbiBwcm9iZWQgd2l0aCBhIHJhbmRvbSB0eXBlLiBcIiArIChcIkRvbid0IHRyeSB0byBoYW5kbGUgJ1wiICsgQWN0aW9uVHlwZXMuSU5JVCArIFwiJyBvciBvdGhlciBhY3Rpb25zIGluIFxcXCJyZWR1eC8qXFxcIiBcIikgKyBcIm5hbWVzcGFjZS4gVGhleSBhcmUgY29uc2lkZXJlZCBwcml2YXRlLiBJbnN0ZWFkLCB5b3UgbXVzdCByZXR1cm4gdGhlIFwiICsgXCJjdXJyZW50IHN0YXRlIGZvciBhbnkgdW5rbm93biBhY3Rpb25zLCB1bmxlc3MgaXQgaXMgdW5kZWZpbmVkLCBcIiArIFwiaW4gd2hpY2ggY2FzZSB5b3UgbXVzdCByZXR1cm4gdGhlIGluaXRpYWwgc3RhdGUsIHJlZ2FyZGxlc3Mgb2YgdGhlIFwiICsgXCJhY3Rpb24gdHlwZS4gVGhlIGluaXRpYWwgc3RhdGUgbWF5IG5vdCBiZSB1bmRlZmluZWQsIGJ1dCBjYW4gYmUgbnVsbC5cIik7XG4gICAgfVxuICB9KTtcbn1cbi8qKlxuICogVHVybnMgYW4gb2JqZWN0IHdob3NlIHZhbHVlcyBhcmUgZGlmZmVyZW50IHJlZHVjZXIgZnVuY3Rpb25zLCBpbnRvIGEgc2luZ2xlXG4gKiByZWR1Y2VyIGZ1bmN0aW9uLiBJdCB3aWxsIGNhbGwgZXZlcnkgY2hpbGQgcmVkdWNlciwgYW5kIGdhdGhlciB0aGVpciByZXN1bHRzXG4gKiBpbnRvIGEgc2luZ2xlIHN0YXRlIG9iamVjdCwgd2hvc2Uga2V5cyBjb3JyZXNwb25kIHRvIHRoZSBrZXlzIG9mIHRoZSBwYXNzZWRcbiAqIHJlZHVjZXIgZnVuY3Rpb25zLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSByZWR1Y2VycyBBbiBvYmplY3Qgd2hvc2UgdmFsdWVzIGNvcnJlc3BvbmQgdG8gZGlmZmVyZW50XG4gKiByZWR1Y2VyIGZ1bmN0aW9ucyB0aGF0IG5lZWQgdG8gYmUgY29tYmluZWQgaW50byBvbmUuIE9uZSBoYW5keSB3YXkgdG8gb2J0YWluXG4gKiBpdCBpcyB0byB1c2UgRVM2IGBpbXBvcnQgKiBhcyByZWR1Y2Vyc2Agc3ludGF4LiBUaGUgcmVkdWNlcnMgbWF5IG5ldmVyIHJldHVyblxuICogdW5kZWZpbmVkIGZvciBhbnkgYWN0aW9uLiBJbnN0ZWFkLCB0aGV5IHNob3VsZCByZXR1cm4gdGhlaXIgaW5pdGlhbCBzdGF0ZVxuICogaWYgdGhlIHN0YXRlIHBhc3NlZCB0byB0aGVtIHdhcyB1bmRlZmluZWQsIGFuZCB0aGUgY3VycmVudCBzdGF0ZSBmb3IgYW55XG4gKiB1bnJlY29nbml6ZWQgYWN0aW9uLlxuICpcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gQSByZWR1Y2VyIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBldmVyeSByZWR1Y2VyIGluc2lkZSB0aGVcbiAqIHBhc3NlZCBvYmplY3QsIGFuZCBidWlsZHMgYSBzdGF0ZSBvYmplY3Qgd2l0aCB0aGUgc2FtZSBzaGFwZS5cbiAqL1xuXG5cbmZ1bmN0aW9uIGNvbWJpbmVSZWR1Y2VycyhyZWR1Y2Vycykge1xuICB2YXIgcmVkdWNlcktleXMgPSBPYmplY3Qua2V5cyhyZWR1Y2Vycyk7XG4gIHZhciBmaW5hbFJlZHVjZXJzID0ge307XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCByZWR1Y2VyS2V5cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBrZXkgPSByZWR1Y2VyS2V5c1tpXTtcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAodHlwZW9mIHJlZHVjZXJzW2tleV0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHdhcm5pbmcoXCJObyByZWR1Y2VyIHByb3ZpZGVkIGZvciBrZXkgXFxcIlwiICsga2V5ICsgXCJcXFwiXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgcmVkdWNlcnNba2V5XSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZmluYWxSZWR1Y2Vyc1trZXldID0gcmVkdWNlcnNba2V5XTtcbiAgICB9XG4gIH1cblxuICB2YXIgZmluYWxSZWR1Y2VyS2V5cyA9IE9iamVjdC5rZXlzKGZpbmFsUmVkdWNlcnMpOyAvLyBUaGlzIGlzIHVzZWQgdG8gbWFrZSBzdXJlIHdlIGRvbid0IHdhcm4gYWJvdXQgdGhlIHNhbWVcbiAgLy8ga2V5cyBtdWx0aXBsZSB0aW1lcy5cblxuICB2YXIgdW5leHBlY3RlZEtleUNhY2hlO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgdW5leHBlY3RlZEtleUNhY2hlID0ge307XG4gIH1cblxuICB2YXIgc2hhcGVBc3NlcnRpb25FcnJvcjtcblxuICB0cnkge1xuICAgIGFzc2VydFJlZHVjZXJTaGFwZShmaW5hbFJlZHVjZXJzKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHNoYXBlQXNzZXJ0aW9uRXJyb3IgPSBlO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIGNvbWJpbmF0aW9uKHN0YXRlLCBhY3Rpb24pIHtcbiAgICBpZiAoc3RhdGUgPT09IHZvaWQgMCkge1xuICAgICAgc3RhdGUgPSB7fTtcbiAgICB9XG5cbiAgICBpZiAoc2hhcGVBc3NlcnRpb25FcnJvcikge1xuICAgICAgdGhyb3cgc2hhcGVBc3NlcnRpb25FcnJvcjtcbiAgICB9XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgdmFyIHdhcm5pbmdNZXNzYWdlID0gZ2V0VW5leHBlY3RlZFN0YXRlU2hhcGVXYXJuaW5nTWVzc2FnZShzdGF0ZSwgZmluYWxSZWR1Y2VycywgYWN0aW9uLCB1bmV4cGVjdGVkS2V5Q2FjaGUpO1xuXG4gICAgICBpZiAod2FybmluZ01lc3NhZ2UpIHtcbiAgICAgICAgd2FybmluZyh3YXJuaW5nTWVzc2FnZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGhhc0NoYW5nZWQgPSBmYWxzZTtcbiAgICB2YXIgbmV4dFN0YXRlID0ge307XG5cbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgZmluYWxSZWR1Y2VyS2V5cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgIHZhciBfa2V5ID0gZmluYWxSZWR1Y2VyS2V5c1tfaV07XG4gICAgICB2YXIgcmVkdWNlciA9IGZpbmFsUmVkdWNlcnNbX2tleV07XG4gICAgICB2YXIgcHJldmlvdXNTdGF0ZUZvcktleSA9IHN0YXRlW19rZXldO1xuICAgICAgdmFyIG5leHRTdGF0ZUZvcktleSA9IHJlZHVjZXIocHJldmlvdXNTdGF0ZUZvcktleSwgYWN0aW9uKTtcblxuICAgICAgaWYgKHR5cGVvZiBuZXh0U3RhdGVGb3JLZXkgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHZhciBhY3Rpb25UeXBlID0gYWN0aW9uICYmIGFjdGlvbi50eXBlO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgxNCkgOiBcIldoZW4gY2FsbGVkIHdpdGggYW4gYWN0aW9uIG9mIHR5cGUgXCIgKyAoYWN0aW9uVHlwZSA/IFwiXFxcIlwiICsgU3RyaW5nKGFjdGlvblR5cGUpICsgXCJcXFwiXCIgOiAnKHVua25vd24gdHlwZSknKSArIFwiLCB0aGUgc2xpY2UgcmVkdWNlciBmb3Iga2V5IFxcXCJcIiArIF9rZXkgKyBcIlxcXCIgcmV0dXJuZWQgdW5kZWZpbmVkLiBcIiArIFwiVG8gaWdub3JlIGFuIGFjdGlvbiwgeW91IG11c3QgZXhwbGljaXRseSByZXR1cm4gdGhlIHByZXZpb3VzIHN0YXRlLiBcIiArIFwiSWYgeW91IHdhbnQgdGhpcyByZWR1Y2VyIHRvIGhvbGQgbm8gdmFsdWUsIHlvdSBjYW4gcmV0dXJuIG51bGwgaW5zdGVhZCBvZiB1bmRlZmluZWQuXCIpO1xuICAgICAgfVxuXG4gICAgICBuZXh0U3RhdGVbX2tleV0gPSBuZXh0U3RhdGVGb3JLZXk7XG4gICAgICBoYXNDaGFuZ2VkID0gaGFzQ2hhbmdlZCB8fCBuZXh0U3RhdGVGb3JLZXkgIT09IHByZXZpb3VzU3RhdGVGb3JLZXk7XG4gICAgfVxuXG4gICAgaGFzQ2hhbmdlZCA9IGhhc0NoYW5nZWQgfHwgZmluYWxSZWR1Y2VyS2V5cy5sZW5ndGggIT09IE9iamVjdC5rZXlzKHN0YXRlKS5sZW5ndGg7XG4gICAgcmV0dXJuIGhhc0NoYW5nZWQgPyBuZXh0U3RhdGUgOiBzdGF0ZTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYmluZEFjdGlvbkNyZWF0b3IoYWN0aW9uQ3JlYXRvciwgZGlzcGF0Y2gpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZGlzcGF0Y2goYWN0aW9uQ3JlYXRvci5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTtcbiAgfTtcbn1cbi8qKlxuICogVHVybnMgYW4gb2JqZWN0IHdob3NlIHZhbHVlcyBhcmUgYWN0aW9uIGNyZWF0b3JzLCBpbnRvIGFuIG9iamVjdCB3aXRoIHRoZVxuICogc2FtZSBrZXlzLCBidXQgd2l0aCBldmVyeSBmdW5jdGlvbiB3cmFwcGVkIGludG8gYSBgZGlzcGF0Y2hgIGNhbGwgc28gdGhleVxuICogbWF5IGJlIGludm9rZWQgZGlyZWN0bHkuIFRoaXMgaXMganVzdCBhIGNvbnZlbmllbmNlIG1ldGhvZCwgYXMgeW91IGNhbiBjYWxsXG4gKiBgc3RvcmUuZGlzcGF0Y2goTXlBY3Rpb25DcmVhdG9ycy5kb1NvbWV0aGluZygpKWAgeW91cnNlbGYganVzdCBmaW5lLlxuICpcbiAqIEZvciBjb252ZW5pZW5jZSwgeW91IGNhbiBhbHNvIHBhc3MgYW4gYWN0aW9uIGNyZWF0b3IgYXMgdGhlIGZpcnN0IGFyZ3VtZW50LFxuICogYW5kIGdldCBhIGRpc3BhdGNoIHdyYXBwZWQgZnVuY3Rpb24gaW4gcmV0dXJuLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb258T2JqZWN0fSBhY3Rpb25DcmVhdG9ycyBBbiBvYmplY3Qgd2hvc2UgdmFsdWVzIGFyZSBhY3Rpb25cbiAqIGNyZWF0b3IgZnVuY3Rpb25zLiBPbmUgaGFuZHkgd2F5IHRvIG9idGFpbiBpdCBpcyB0byB1c2UgRVM2IGBpbXBvcnQgKiBhc2BcbiAqIHN5bnRheC4gWW91IG1heSBhbHNvIHBhc3MgYSBzaW5nbGUgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZGlzcGF0Y2ggVGhlIGBkaXNwYXRjaGAgZnVuY3Rpb24gYXZhaWxhYmxlIG9uIHlvdXIgUmVkdXhcbiAqIHN0b3JlLlxuICpcbiAqIEByZXR1cm5zIHtGdW5jdGlvbnxPYmplY3R9IFRoZSBvYmplY3QgbWltaWNraW5nIHRoZSBvcmlnaW5hbCBvYmplY3QsIGJ1dCB3aXRoXG4gKiBldmVyeSBhY3Rpb24gY3JlYXRvciB3cmFwcGVkIGludG8gdGhlIGBkaXNwYXRjaGAgY2FsbC4gSWYgeW91IHBhc3NlZCBhXG4gKiBmdW5jdGlvbiBhcyBgYWN0aW9uQ3JlYXRvcnNgLCB0aGUgcmV0dXJuIHZhbHVlIHdpbGwgYWxzbyBiZSBhIHNpbmdsZVxuICogZnVuY3Rpb24uXG4gKi9cblxuXG5mdW5jdGlvbiBiaW5kQWN0aW9uQ3JlYXRvcnMoYWN0aW9uQ3JlYXRvcnMsIGRpc3BhdGNoKSB7XG4gIGlmICh0eXBlb2YgYWN0aW9uQ3JlYXRvcnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gYmluZEFjdGlvbkNyZWF0b3IoYWN0aW9uQ3JlYXRvcnMsIGRpc3BhdGNoKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgYWN0aW9uQ3JlYXRvcnMgIT09ICdvYmplY3QnIHx8IGFjdGlvbkNyZWF0b3JzID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMTYpIDogXCJiaW5kQWN0aW9uQ3JlYXRvcnMgZXhwZWN0ZWQgYW4gb2JqZWN0IG9yIGEgZnVuY3Rpb24sIGJ1dCBpbnN0ZWFkIHJlY2VpdmVkOiAnXCIgKyBraW5kT2YoYWN0aW9uQ3JlYXRvcnMpICsgXCInLiBcIiArIFwiRGlkIHlvdSB3cml0ZSBcXFwiaW1wb3J0IEFjdGlvbkNyZWF0b3JzIGZyb21cXFwiIGluc3RlYWQgb2YgXFxcImltcG9ydCAqIGFzIEFjdGlvbkNyZWF0b3JzIGZyb21cXFwiP1wiKTtcbiAgfVxuXG4gIHZhciBib3VuZEFjdGlvbkNyZWF0b3JzID0ge307XG5cbiAgZm9yICh2YXIga2V5IGluIGFjdGlvbkNyZWF0b3JzKSB7XG4gICAgdmFyIGFjdGlvbkNyZWF0b3IgPSBhY3Rpb25DcmVhdG9yc1trZXldO1xuXG4gICAgaWYgKHR5cGVvZiBhY3Rpb25DcmVhdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBib3VuZEFjdGlvbkNyZWF0b3JzW2tleV0gPSBiaW5kQWN0aW9uQ3JlYXRvcihhY3Rpb25DcmVhdG9yLCBkaXNwYXRjaCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGJvdW5kQWN0aW9uQ3JlYXRvcnM7XG59XG5cbi8qKlxuICogQ29tcG9zZXMgc2luZ2xlLWFyZ3VtZW50IGZ1bmN0aW9ucyBmcm9tIHJpZ2h0IHRvIGxlZnQuIFRoZSByaWdodG1vc3RcbiAqIGZ1bmN0aW9uIGNhbiB0YWtlIG11bHRpcGxlIGFyZ3VtZW50cyBhcyBpdCBwcm92aWRlcyB0aGUgc2lnbmF0dXJlIGZvclxuICogdGhlIHJlc3VsdGluZyBjb21wb3NpdGUgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtIHsuLi5GdW5jdGlvbn0gZnVuY3MgVGhlIGZ1bmN0aW9ucyB0byBjb21wb3NlLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBBIGZ1bmN0aW9uIG9idGFpbmVkIGJ5IGNvbXBvc2luZyB0aGUgYXJndW1lbnQgZnVuY3Rpb25zXG4gKiBmcm9tIHJpZ2h0IHRvIGxlZnQuIEZvciBleGFtcGxlLCBjb21wb3NlKGYsIGcsIGgpIGlzIGlkZW50aWNhbCB0byBkb2luZ1xuICogKC4uLmFyZ3MpID0+IGYoZyhoKC4uLmFyZ3MpKSkuXG4gKi9cbmZ1bmN0aW9uIGNvbXBvc2UoKSB7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBmdW5jcyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICBmdW5jc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuXG4gIGlmIChmdW5jcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGFyZykge1xuICAgICAgcmV0dXJuIGFyZztcbiAgICB9O1xuICB9XG5cbiAgaWYgKGZ1bmNzLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiBmdW5jc1swXTtcbiAgfVxuXG4gIHJldHVybiBmdW5jcy5yZWR1Y2UoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGEoYi5hcHBseSh2b2lkIDAsIGFyZ3VtZW50cykpO1xuICAgIH07XG4gIH0pO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBzdG9yZSBlbmhhbmNlciB0aGF0IGFwcGxpZXMgbWlkZGxld2FyZSB0byB0aGUgZGlzcGF0Y2ggbWV0aG9kXG4gKiBvZiB0aGUgUmVkdXggc3RvcmUuIFRoaXMgaXMgaGFuZHkgZm9yIGEgdmFyaWV0eSBvZiB0YXNrcywgc3VjaCBhcyBleHByZXNzaW5nXG4gKiBhc3luY2hyb25vdXMgYWN0aW9ucyBpbiBhIGNvbmNpc2UgbWFubmVyLCBvciBsb2dnaW5nIGV2ZXJ5IGFjdGlvbiBwYXlsb2FkLlxuICpcbiAqIFNlZSBgcmVkdXgtdGh1bmtgIHBhY2thZ2UgYXMgYW4gZXhhbXBsZSBvZiB0aGUgUmVkdXggbWlkZGxld2FyZS5cbiAqXG4gKiBCZWNhdXNlIG1pZGRsZXdhcmUgaXMgcG90ZW50aWFsbHkgYXN5bmNocm9ub3VzLCB0aGlzIHNob3VsZCBiZSB0aGUgZmlyc3RcbiAqIHN0b3JlIGVuaGFuY2VyIGluIHRoZSBjb21wb3NpdGlvbiBjaGFpbi5cbiAqXG4gKiBOb3RlIHRoYXQgZWFjaCBtaWRkbGV3YXJlIHdpbGwgYmUgZ2l2ZW4gdGhlIGBkaXNwYXRjaGAgYW5kIGBnZXRTdGF0ZWAgZnVuY3Rpb25zXG4gKiBhcyBuYW1lZCBhcmd1bWVudHMuXG4gKlxuICogQHBhcmFtIHsuLi5GdW5jdGlvbn0gbWlkZGxld2FyZXMgVGhlIG1pZGRsZXdhcmUgY2hhaW4gdG8gYmUgYXBwbGllZC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gQSBzdG9yZSBlbmhhbmNlciBhcHBseWluZyB0aGUgbWlkZGxld2FyZS5cbiAqL1xuXG5mdW5jdGlvbiBhcHBseU1pZGRsZXdhcmUoKSB7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBtaWRkbGV3YXJlcyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICBtaWRkbGV3YXJlc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoY3JlYXRlU3RvcmUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHN0b3JlID0gY3JlYXRlU3RvcmUuYXBwbHkodm9pZCAwLCBhcmd1bWVudHMpO1xuXG4gICAgICB2YXIgX2Rpc3BhdGNoID0gZnVuY3Rpb24gZGlzcGF0Y2goKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDE1KSA6ICdEaXNwYXRjaGluZyB3aGlsZSBjb25zdHJ1Y3RpbmcgeW91ciBtaWRkbGV3YXJlIGlzIG5vdCBhbGxvd2VkLiAnICsgJ090aGVyIG1pZGRsZXdhcmUgd291bGQgbm90IGJlIGFwcGxpZWQgdG8gdGhpcyBkaXNwYXRjaC4nKTtcbiAgICAgIH07XG5cbiAgICAgIHZhciBtaWRkbGV3YXJlQVBJID0ge1xuICAgICAgICBnZXRTdGF0ZTogc3RvcmUuZ2V0U3RhdGUsXG4gICAgICAgIGRpc3BhdGNoOiBmdW5jdGlvbiBkaXNwYXRjaCgpIHtcbiAgICAgICAgICByZXR1cm4gX2Rpc3BhdGNoLmFwcGx5KHZvaWQgMCwgYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHZhciBjaGFpbiA9IG1pZGRsZXdhcmVzLm1hcChmdW5jdGlvbiAobWlkZGxld2FyZSkge1xuICAgICAgICByZXR1cm4gbWlkZGxld2FyZShtaWRkbGV3YXJlQVBJKTtcbiAgICAgIH0pO1xuICAgICAgX2Rpc3BhdGNoID0gY29tcG9zZS5hcHBseSh2b2lkIDAsIGNoYWluKShzdG9yZS5kaXNwYXRjaCk7XG4gICAgICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBzdG9yZSksIHt9LCB7XG4gICAgICAgIGRpc3BhdGNoOiBfZGlzcGF0Y2hcbiAgICAgIH0pO1xuICAgIH07XG4gIH07XG59XG5cbmV4cG9ydCB7IEFjdGlvblR5cGVzIGFzIF9fRE9fTk9UX1VTRV9fQWN0aW9uVHlwZXMsIGFwcGx5TWlkZGxld2FyZSwgYmluZEFjdGlvbkNyZWF0b3JzLCBjb21iaW5lUmVkdWNlcnMsIGNvbXBvc2UsIGNyZWF0ZVN0b3JlLCBsZWdhY3lfY3JlYXRlU3RvcmUgfTtcbiIsICIvKiogQSBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgYSBwb3RlbnRpYWwgXCJleHRyYSBhcmd1bWVudFwiIHZhbHVlIHRvIGJlIGluamVjdGVkIGxhdGVyLFxyXG4gKiBhbmQgcmV0dXJucyBhbiBpbnN0YW5jZSBvZiB0aGUgdGh1bmsgbWlkZGxld2FyZSB0aGF0IHVzZXMgdGhhdCB2YWx1ZVxyXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVRodW5rTWlkZGxld2FyZShleHRyYUFyZ3VtZW50KSB7XG4gIC8vIFN0YW5kYXJkIFJlZHV4IG1pZGRsZXdhcmUgZGVmaW5pdGlvbiBwYXR0ZXJuOlxuICAvLyBTZWU6IGh0dHBzOi8vcmVkdXguanMub3JnL3R1dG9yaWFscy9mdW5kYW1lbnRhbHMvcGFydC00LXN0b3JlI3dyaXRpbmctY3VzdG9tLW1pZGRsZXdhcmVcbiAgdmFyIG1pZGRsZXdhcmUgPSBmdW5jdGlvbiBtaWRkbGV3YXJlKF9yZWYpIHtcbiAgICB2YXIgZGlzcGF0Y2ggPSBfcmVmLmRpc3BhdGNoLFxuICAgICAgICBnZXRTdGF0ZSA9IF9yZWYuZ2V0U3RhdGU7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChuZXh0KSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKGFjdGlvbikge1xuICAgICAgICAvLyBUaGUgdGh1bmsgbWlkZGxld2FyZSBsb29rcyBmb3IgYW55IGZ1bmN0aW9ucyB0aGF0IHdlcmUgcGFzc2VkIHRvIGBzdG9yZS5kaXNwYXRjaGAuXG4gICAgICAgIC8vIElmIHRoaXMgXCJhY3Rpb25cIiBpcyByZWFsbHkgYSBmdW5jdGlvbiwgY2FsbCBpdCBhbmQgcmV0dXJuIHRoZSByZXN1bHQuXG4gICAgICAgIGlmICh0eXBlb2YgYWN0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgLy8gSW5qZWN0IHRoZSBzdG9yZSdzIGBkaXNwYXRjaGAgYW5kIGBnZXRTdGF0ZWAgbWV0aG9kcywgYXMgd2VsbCBhcyBhbnkgXCJleHRyYSBhcmdcIlxuICAgICAgICAgIHJldHVybiBhY3Rpb24oZGlzcGF0Y2gsIGdldFN0YXRlLCBleHRyYUFyZ3VtZW50KTtcbiAgICAgICAgfSAvLyBPdGhlcndpc2UsIHBhc3MgdGhlIGFjdGlvbiBkb3duIHRoZSBtaWRkbGV3YXJlIGNoYWluIGFzIHVzdWFsXG5cblxuICAgICAgICByZXR1cm4gbmV4dChhY3Rpb24pO1xuICAgICAgfTtcbiAgICB9O1xuICB9O1xuXG4gIHJldHVybiBtaWRkbGV3YXJlO1xufVxuXG52YXIgdGh1bmsgPSBjcmVhdGVUaHVua01pZGRsZXdhcmUoKTsgLy8gQXR0YWNoIHRoZSBmYWN0b3J5IGZ1bmN0aW9uIHNvIHVzZXJzIGNhbiBjcmVhdGUgYSBjdXN0b21pemVkIHZlcnNpb25cbi8vIHdpdGggd2hhdGV2ZXIgXCJleHRyYSBhcmdcIiB0aGV5IHdhbnQgdG8gaW5qZWN0IGludG8gdGhlaXIgdGh1bmtzXG5cbnRodW5rLndpdGhFeHRyYUFyZ3VtZW50ID0gY3JlYXRlVGh1bmtNaWRkbGV3YXJlO1xuZXhwb3J0IGRlZmF1bHQgdGh1bms7IiwgImltcG9ydCB7IGVuYWJsZUVTNSB9IGZyb20gJ2ltbWVyJ1xyXG5leHBvcnQgKiBmcm9tICdyZWR1eCdcclxuZXhwb3J0IHtcclxuICBkZWZhdWx0IGFzIGNyZWF0ZU5leHRTdGF0ZSxcclxuICBjdXJyZW50LFxyXG4gIGZyZWV6ZSxcclxuICBvcmlnaW5hbCxcclxuICBpc0RyYWZ0LFxyXG59IGZyb20gJ2ltbWVyJ1xyXG5leHBvcnQgdHlwZSB7IERyYWZ0IH0gZnJvbSAnaW1tZXInXHJcbmV4cG9ydCB7IGNyZWF0ZVNlbGVjdG9yIH0gZnJvbSAncmVzZWxlY3QnXHJcbmV4cG9ydCB0eXBlIHtcclxuICBTZWxlY3RvcixcclxuICBPdXRwdXRQYXJhbWV0cmljU2VsZWN0b3IsXHJcbiAgT3V0cHV0U2VsZWN0b3IsXHJcbiAgUGFyYW1ldHJpY1NlbGVjdG9yLFxyXG59IGZyb20gJ3Jlc2VsZWN0J1xyXG5leHBvcnQgeyBjcmVhdGVEcmFmdFNhZmVTZWxlY3RvciB9IGZyb20gJy4vY3JlYXRlRHJhZnRTYWZlU2VsZWN0b3InXHJcbmV4cG9ydCB0eXBlIHsgVGh1bmtBY3Rpb24sIFRodW5rRGlzcGF0Y2gsIFRodW5rTWlkZGxld2FyZSB9IGZyb20gJ3JlZHV4LXRodW5rJ1xyXG5cclxuLy8gV2UgZGVsaWJlcmF0ZWx5IGVuYWJsZSBJbW1lcidzIEVTNSBzdXBwb3J0LCBvbiB0aGUgZ3JvdW5kcyB0aGF0XHJcbi8vIHdlIGFzc3VtZSBSVEsgd2lsbCBiZSB1c2VkIHdpdGggUmVhY3QgTmF0aXZlIGFuZCBvdGhlciBQcm94eS1sZXNzXHJcbi8vIGVudmlyb25tZW50cy4gIEluIGFkZGl0aW9uLCB0aGF0J3MgaG93IEltbWVyIDQgYmVoYXZlZCwgYW5kIHNpbmNlXHJcbi8vIHdlIHdhbnQgdG8gc2hpcCB0aGlzIGluIGFuIFJUSyBtaW5vciwgd2Ugc2hvdWxkIGtlZXAgdGhlIHNhbWUgYmVoYXZpb3IuXHJcbmVuYWJsZUVTNSgpXHJcblxyXG5leHBvcnQge1xyXG4gIC8vIGpzXHJcbiAgY29uZmlndXJlU3RvcmUsXHJcbn0gZnJvbSAnLi9jb25maWd1cmVTdG9yZSdcclxuZXhwb3J0IHR5cGUge1xyXG4gIC8vIHR5cGVzXHJcbiAgQ29uZmlndXJlRW5oYW5jZXJzQ2FsbGJhY2ssXHJcbiAgQ29uZmlndXJlU3RvcmVPcHRpb25zLFxyXG4gIEVuaGFuY2VkU3RvcmUsXHJcbn0gZnJvbSAnLi9jb25maWd1cmVTdG9yZSdcclxuZXhwb3J0IHR5cGUgeyBEZXZUb29sc0VuaGFuY2VyT3B0aW9ucyB9IGZyb20gJy4vZGV2dG9vbHNFeHRlbnNpb24nXHJcbmV4cG9ydCB7XHJcbiAgLy8ganNcclxuICBjcmVhdGVBY3Rpb24sXHJcbiAgZ2V0VHlwZSxcclxuICBpc0FjdGlvbixcclxuICBpc0FjdGlvbkNyZWF0b3IsXHJcbiAgaXNGU0EgYXMgaXNGbHV4U3RhbmRhcmRBY3Rpb24sXHJcbn0gZnJvbSAnLi9jcmVhdGVBY3Rpb24nXHJcbmV4cG9ydCB0eXBlIHtcclxuICAvLyB0eXBlc1xyXG4gIFBheWxvYWRBY3Rpb24sXHJcbiAgUGF5bG9hZEFjdGlvbkNyZWF0b3IsXHJcbiAgQWN0aW9uQ3JlYXRvcldpdGhOb25JbmZlcnJhYmxlUGF5bG9hZCxcclxuICBBY3Rpb25DcmVhdG9yV2l0aE9wdGlvbmFsUGF5bG9hZCxcclxuICBBY3Rpb25DcmVhdG9yV2l0aFBheWxvYWQsXHJcbiAgQWN0aW9uQ3JlYXRvcldpdGhvdXRQYXlsb2FkLFxyXG4gIEFjdGlvbkNyZWF0b3JXaXRoUHJlcGFyZWRQYXlsb2FkLFxyXG4gIFByZXBhcmVBY3Rpb24sXHJcbn0gZnJvbSAnLi9jcmVhdGVBY3Rpb24nXHJcbmV4cG9ydCB7XHJcbiAgLy8ganNcclxuICBjcmVhdGVSZWR1Y2VyLFxyXG59IGZyb20gJy4vY3JlYXRlUmVkdWNlcidcclxuZXhwb3J0IHR5cGUge1xyXG4gIC8vIHR5cGVzXHJcbiAgQWN0aW9ucyxcclxuICBDYXNlUmVkdWNlcixcclxuICBDYXNlUmVkdWNlcnMsXHJcbn0gZnJvbSAnLi9jcmVhdGVSZWR1Y2VyJ1xyXG5leHBvcnQge1xyXG4gIC8vIGpzXHJcbiAgY3JlYXRlU2xpY2UsXHJcbn0gZnJvbSAnLi9jcmVhdGVTbGljZSdcclxuXHJcbmV4cG9ydCB0eXBlIHtcclxuICAvLyB0eXBlc1xyXG4gIENyZWF0ZVNsaWNlT3B0aW9ucyxcclxuICBTbGljZSxcclxuICBDYXNlUmVkdWNlckFjdGlvbnMsXHJcbiAgU2xpY2VDYXNlUmVkdWNlcnMsXHJcbiAgVmFsaWRhdGVTbGljZUNhc2VSZWR1Y2VycyxcclxuICBDYXNlUmVkdWNlcldpdGhQcmVwYXJlLFxyXG4gIFNsaWNlQWN0aW9uQ3JlYXRvcixcclxufSBmcm9tICcuL2NyZWF0ZVNsaWNlJ1xyXG5leHBvcnQgdHlwZSB7IEFjdGlvbkNyZWF0b3JJbnZhcmlhbnRNaWRkbGV3YXJlT3B0aW9ucyB9IGZyb20gJy4vYWN0aW9uQ3JlYXRvckludmFyaWFudE1pZGRsZXdhcmUnXHJcbmV4cG9ydCB7IGNyZWF0ZUFjdGlvbkNyZWF0b3JJbnZhcmlhbnRNaWRkbGV3YXJlIH0gZnJvbSAnLi9hY3Rpb25DcmVhdG9ySW52YXJpYW50TWlkZGxld2FyZSdcclxuZXhwb3J0IHtcclxuICAvLyBqc1xyXG4gIGNyZWF0ZUltbXV0YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZSxcclxuICBpc0ltbXV0YWJsZURlZmF1bHQsXHJcbn0gZnJvbSAnLi9pbW11dGFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmUnXHJcbmV4cG9ydCB0eXBlIHtcclxuICAvLyB0eXBlc1xyXG4gIEltbXV0YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZU9wdGlvbnMsXHJcbn0gZnJvbSAnLi9pbW11dGFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmUnXHJcbmV4cG9ydCB7XHJcbiAgLy8ganNcclxuICBjcmVhdGVTZXJpYWxpemFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmUsXHJcbiAgZmluZE5vblNlcmlhbGl6YWJsZVZhbHVlLFxyXG4gIGlzUGxhaW4sXHJcbn0gZnJvbSAnLi9zZXJpYWxpemFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmUnXHJcbmV4cG9ydCB0eXBlIHtcclxuICAvLyB0eXBlc1xyXG4gIFNlcmlhbGl6YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZU9wdGlvbnMsXHJcbn0gZnJvbSAnLi9zZXJpYWxpemFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmUnXHJcbmV4cG9ydCB7XHJcbiAgLy8ganNcclxuICBnZXREZWZhdWx0TWlkZGxld2FyZSxcclxufSBmcm9tICcuL2dldERlZmF1bHRNaWRkbGV3YXJlJ1xyXG5leHBvcnQgdHlwZSB7XHJcbiAgLy8gdHlwZXNcclxuICBBY3Rpb25SZWR1Y2VyTWFwQnVpbGRlcixcclxufSBmcm9tICcuL21hcEJ1aWxkZXJzJ1xyXG5leHBvcnQgeyBNaWRkbGV3YXJlQXJyYXksIEVuaGFuY2VyQXJyYXkgfSBmcm9tICcuL3V0aWxzJ1xyXG5cclxuZXhwb3J0IHsgY3JlYXRlRW50aXR5QWRhcHRlciB9IGZyb20gJy4vZW50aXRpZXMvY3JlYXRlX2FkYXB0ZXInXHJcbmV4cG9ydCB0eXBlIHtcclxuICBEaWN0aW9uYXJ5LFxyXG4gIEVudGl0eVN0YXRlLFxyXG4gIEVudGl0eUFkYXB0ZXIsXHJcbiAgRW50aXR5U2VsZWN0b3JzLFxyXG4gIEVudGl0eVN0YXRlQWRhcHRlcixcclxuICBFbnRpdHlJZCxcclxuICBVcGRhdGUsXHJcbiAgSWRTZWxlY3RvcixcclxuICBDb21wYXJlcixcclxufSBmcm9tICcuL2VudGl0aWVzL21vZGVscydcclxuXHJcbmV4cG9ydCB7XHJcbiAgY3JlYXRlQXN5bmNUaHVuayxcclxuICB1bndyYXBSZXN1bHQsXHJcbiAgbWluaVNlcmlhbGl6ZUVycm9yLFxyXG59IGZyb20gJy4vY3JlYXRlQXN5bmNUaHVuaydcclxuZXhwb3J0IHR5cGUge1xyXG4gIEFzeW5jVGh1bmssXHJcbiAgQXN5bmNUaHVua09wdGlvbnMsXHJcbiAgQXN5bmNUaHVua0FjdGlvbixcclxuICBBc3luY1RodW5rUGF5bG9hZENyZWF0b3JSZXR1cm5WYWx1ZSxcclxuICBBc3luY1RodW5rUGF5bG9hZENyZWF0b3IsXHJcbiAgU2VyaWFsaXplZEVycm9yLFxyXG59IGZyb20gJy4vY3JlYXRlQXN5bmNUaHVuaydcclxuXHJcbmV4cG9ydCB7XHJcbiAgLy8ganNcclxuICBpc0FsbE9mLFxyXG4gIGlzQW55T2YsXHJcbiAgaXNQZW5kaW5nLFxyXG4gIGlzUmVqZWN0ZWQsXHJcbiAgaXNGdWxmaWxsZWQsXHJcbiAgaXNBc3luY1RodW5rQWN0aW9uLFxyXG4gIGlzUmVqZWN0ZWRXaXRoVmFsdWUsXHJcbn0gZnJvbSAnLi9tYXRjaGVycydcclxuZXhwb3J0IHR5cGUge1xyXG4gIC8vIHR5cGVzXHJcbiAgQWN0aW9uTWF0Y2hpbmdBbGxPZixcclxuICBBY3Rpb25NYXRjaGluZ0FueU9mLFxyXG59IGZyb20gJy4vbWF0Y2hlcnMnXHJcblxyXG5leHBvcnQgeyBuYW5vaWQgfSBmcm9tICcuL25hbm9pZCdcclxuXHJcbmV4cG9ydCB7IGRlZmF1bHQgYXMgaXNQbGFpbk9iamVjdCB9IGZyb20gJy4vaXNQbGFpbk9iamVjdCdcclxuXHJcbmV4cG9ydCB0eXBlIHtcclxuICBMaXN0ZW5lckVmZmVjdCxcclxuICBMaXN0ZW5lck1pZGRsZXdhcmUsXHJcbiAgTGlzdGVuZXJFZmZlY3RBUEksXHJcbiAgTGlzdGVuZXJNaWRkbGV3YXJlSW5zdGFuY2UsXHJcbiAgQ3JlYXRlTGlzdGVuZXJNaWRkbGV3YXJlT3B0aW9ucyxcclxuICBMaXN0ZW5lckVycm9ySGFuZGxlcixcclxuICBUeXBlZFN0YXJ0TGlzdGVuaW5nLFxyXG4gIFR5cGVkQWRkTGlzdGVuZXIsXHJcbiAgVHlwZWRTdG9wTGlzdGVuaW5nLFxyXG4gIFR5cGVkUmVtb3ZlTGlzdGVuZXIsXHJcbiAgVW5zdWJzY3JpYmVMaXN0ZW5lcixcclxuICBVbnN1YnNjcmliZUxpc3RlbmVyT3B0aW9ucyxcclxuICBGb3JrZWRUYXNrRXhlY3V0b3IsXHJcbiAgRm9ya2VkVGFzayxcclxuICBGb3JrZWRUYXNrQVBJLFxyXG4gIEFzeW5jVGFza0V4ZWN1dG9yLFxyXG4gIFN5bmNUYXNrRXhlY3V0b3IsXHJcbiAgVGFza0NhbmNlbGxlZCxcclxuICBUYXNrUmVqZWN0ZWQsXHJcbiAgVGFza1Jlc29sdmVkLFxyXG4gIFRhc2tSZXN1bHQsXHJcbn0gZnJvbSAnLi9saXN0ZW5lck1pZGRsZXdhcmUvaW5kZXgnXHJcbmV4cG9ydCB0eXBlIHsgQW55TGlzdGVuZXJQcmVkaWNhdGUgfSBmcm9tICcuL2xpc3RlbmVyTWlkZGxld2FyZS90eXBlcydcclxuXHJcbmV4cG9ydCB7XHJcbiAgY3JlYXRlTGlzdGVuZXJNaWRkbGV3YXJlLFxyXG4gIGFkZExpc3RlbmVyLFxyXG4gIHJlbW92ZUxpc3RlbmVyLFxyXG4gIGNsZWFyQWxsTGlzdGVuZXJzLFxyXG4gIFRhc2tBYm9ydEVycm9yLFxyXG59IGZyb20gJy4vbGlzdGVuZXJNaWRkbGV3YXJlL2luZGV4J1xyXG5cclxuZXhwb3J0IHtcclxuICBTSE9VTERfQVVUT0JBVENILFxyXG4gIHByZXBhcmVBdXRvQmF0Y2hlZCxcclxuICBhdXRvQmF0Y2hFbmhhbmNlcixcclxufSBmcm9tICcuL2F1dG9CYXRjaEVuaGFuY2VyJ1xyXG5leHBvcnQgdHlwZSB7IEF1dG9CYXRjaE9wdGlvbnMgfSBmcm9tICcuL2F1dG9CYXRjaEVuaGFuY2VyJ1xyXG5cclxuZXhwb3J0IHR5cGUgeyBFeHRyYWN0RGlzcGF0Y2hFeHRlbnNpb25zIGFzIFRTSGVscGVyc0V4dHJhY3REaXNwYXRjaEV4dGVuc2lvbnMgfSBmcm9tICcuL3RzSGVscGVycydcclxuIiwgImltcG9ydCB7IGN1cnJlbnQsIGlzRHJhZnQgfSBmcm9tICdpbW1lcidcclxuaW1wb3J0IHsgY3JlYXRlU2VsZWN0b3IgfSBmcm9tICdyZXNlbGVjdCdcclxuXHJcbi8qKlxyXG4gKiBcIkRyYWZ0LVNhZmVcIiB2ZXJzaW9uIG9mIGByZXNlbGVjdGAncyBgY3JlYXRlU2VsZWN0b3JgOlxyXG4gKiBJZiBhbiBgaW1tZXJgLWRyYWZ0ZWQgb2JqZWN0IGlzIHBhc3NlZCBpbnRvIHRoZSByZXN1bHRpbmcgc2VsZWN0b3IncyBmaXJzdCBhcmd1bWVudCxcclxuICogdGhlIHNlbGVjdG9yIHdpbGwgYWN0IG9uIHRoZSBjdXJyZW50IGRyYWZ0IHZhbHVlLCBpbnN0ZWFkIG9mIHJldHVybmluZyBhIGNhY2hlZCB2YWx1ZVxyXG4gKiB0aGF0IG1pZ2h0IGJlIHBvc3NpYmx5IG91dGRhdGVkIGlmIHRoZSBkcmFmdCBoYXMgYmVlbiBtb2RpZmllZCBzaW5jZS5cclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGNyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yOiB0eXBlb2YgY3JlYXRlU2VsZWN0b3IgPSAoXHJcbiAgLi4uYXJnczogdW5rbm93bltdXHJcbikgPT4ge1xyXG4gIGNvbnN0IHNlbGVjdG9yID0gKGNyZWF0ZVNlbGVjdG9yIGFzIGFueSkoLi4uYXJncylcclxuICBjb25zdCB3cmFwcGVkU2VsZWN0b3IgPSAodmFsdWU6IHVua25vd24sIC4uLnJlc3Q6IHVua25vd25bXSkgPT5cclxuICAgIHNlbGVjdG9yKGlzRHJhZnQodmFsdWUpID8gY3VycmVudCh2YWx1ZSkgOiB2YWx1ZSwgLi4ucmVzdClcclxuICByZXR1cm4gd3JhcHBlZFNlbGVjdG9yIGFzIGFueVxyXG59XHJcbiIsICJpbXBvcnQgdHlwZSB7XHJcbiAgUmVkdWNlcixcclxuICBSZWR1Y2Vyc01hcE9iamVjdCxcclxuICBNaWRkbGV3YXJlLFxyXG4gIEFjdGlvbixcclxuICBBbnlBY3Rpb24sXHJcbiAgU3RvcmVFbmhhbmNlcixcclxuICBTdG9yZSxcclxuICBEaXNwYXRjaCxcclxuICBQcmVsb2FkZWRTdGF0ZSxcclxuICBDb21iaW5lZFN0YXRlLFxyXG59IGZyb20gJ3JlZHV4J1xyXG5pbXBvcnQgeyBjcmVhdGVTdG9yZSwgY29tcG9zZSwgYXBwbHlNaWRkbGV3YXJlLCBjb21iaW5lUmVkdWNlcnMgfSBmcm9tICdyZWR1eCdcclxuaW1wb3J0IHR5cGUgeyBEZXZUb29sc0VuaGFuY2VyT3B0aW9ucyBhcyBEZXZUb29sc09wdGlvbnMgfSBmcm9tICcuL2RldnRvb2xzRXh0ZW5zaW9uJ1xyXG5pbXBvcnQgeyBjb21wb3NlV2l0aERldlRvb2xzIH0gZnJvbSAnLi9kZXZ0b29sc0V4dGVuc2lvbidcclxuXHJcbmltcG9ydCBpc1BsYWluT2JqZWN0IGZyb20gJy4vaXNQbGFpbk9iamVjdCdcclxuaW1wb3J0IHR5cGUge1xyXG4gIFRodW5rTWlkZGxld2FyZUZvcixcclxuICBDdXJyaWVkR2V0RGVmYXVsdE1pZGRsZXdhcmUsXHJcbn0gZnJvbSAnLi9nZXREZWZhdWx0TWlkZGxld2FyZSdcclxuaW1wb3J0IHsgY3VycnlHZXREZWZhdWx0TWlkZGxld2FyZSB9IGZyb20gJy4vZ2V0RGVmYXVsdE1pZGRsZXdhcmUnXHJcbmltcG9ydCB0eXBlIHtcclxuICBOb0luZmVyLFxyXG4gIEV4dHJhY3REaXNwYXRjaEV4dGVuc2lvbnMsXHJcbiAgRXh0cmFjdFN0b3JlRXh0ZW5zaW9ucyxcclxuICBFeHRyYWN0U3RhdGVFeHRlbnNpb25zLFxyXG59IGZyb20gJy4vdHNIZWxwZXJzJ1xyXG5pbXBvcnQgeyBFbmhhbmNlckFycmF5IH0gZnJvbSAnLi91dGlscydcclxuXHJcbmNvbnN0IElTX1BST0RVQ1RJT04gPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nXHJcblxyXG4vKipcclxuICogQ2FsbGJhY2sgZnVuY3Rpb24gdHlwZSwgdG8gYmUgdXNlZCBpbiBgQ29uZmlndXJlU3RvcmVPcHRpb25zLmVuaGFuY2Vyc2BcclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IHR5cGUgQ29uZmlndXJlRW5oYW5jZXJzQ2FsbGJhY2s8RSBleHRlbmRzIEVuaGFuY2VycyA9IEVuaGFuY2Vycz4gPSAoXHJcbiAgZGVmYXVsdEVuaGFuY2VyczogRW5oYW5jZXJBcnJheTxbU3RvcmVFbmhhbmNlcjx7fSwge30+XT5cclxuKSA9PiBFXHJcblxyXG4vKipcclxuICogT3B0aW9ucyBmb3IgYGNvbmZpZ3VyZVN0b3JlKClgLlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIENvbmZpZ3VyZVN0b3JlT3B0aW9uczxcclxuICBTID0gYW55LFxyXG4gIEEgZXh0ZW5kcyBBY3Rpb24gPSBBbnlBY3Rpb24sXHJcbiAgTSBleHRlbmRzIE1pZGRsZXdhcmVzPFM+ID0gTWlkZGxld2FyZXM8Uz4sXHJcbiAgRSBleHRlbmRzIEVuaGFuY2VycyA9IEVuaGFuY2Vyc1xyXG4+IHtcclxuICAvKipcclxuICAgKiBBIHNpbmdsZSByZWR1Y2VyIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSB1c2VkIGFzIHRoZSByb290IHJlZHVjZXIsIG9yIGFuXHJcbiAgICogb2JqZWN0IG9mIHNsaWNlIHJlZHVjZXJzIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gYGNvbWJpbmVSZWR1Y2VycygpYC5cclxuICAgKi9cclxuICByZWR1Y2VyOiBSZWR1Y2VyPFMsIEE+IHwgUmVkdWNlcnNNYXBPYmplY3Q8UywgQT5cclxuXHJcbiAgLyoqXHJcbiAgICogQW4gYXJyYXkgb2YgUmVkdXggbWlkZGxld2FyZSB0byBpbnN0YWxsLiBJZiBub3Qgc3VwcGxpZWQsIGRlZmF1bHRzIHRvXHJcbiAgICogdGhlIHNldCBvZiBtaWRkbGV3YXJlIHJldHVybmVkIGJ5IGBnZXREZWZhdWx0TWlkZGxld2FyZSgpYC5cclxuICAgKlxyXG4gICAqIEBleGFtcGxlIGBtaWRkbGV3YXJlOiAoZ0RNKSA9PiBnRE0oKS5jb25jYXQobG9nZ2VyLCBhcGlNaWRkbGV3YXJlLCB5b3VyQ3VzdG9tTWlkZGxld2FyZSlgXHJcbiAgICogQHNlZSBodHRwczovL3JlZHV4LXRvb2xraXQuanMub3JnL2FwaS9nZXREZWZhdWx0TWlkZGxld2FyZSNpbnRlbmRlZC11c2FnZVxyXG4gICAqL1xyXG4gIG1pZGRsZXdhcmU/OiAoKGdldERlZmF1bHRNaWRkbGV3YXJlOiBDdXJyaWVkR2V0RGVmYXVsdE1pZGRsZXdhcmU8Uz4pID0+IE0pIHwgTVxyXG5cclxuICAvKipcclxuICAgKiBXaGV0aGVyIHRvIGVuYWJsZSBSZWR1eCBEZXZUb29scyBpbnRlZ3JhdGlvbi4gRGVmYXVsdHMgdG8gYHRydWVgLlxyXG4gICAqXHJcbiAgICogQWRkaXRpb25hbCBjb25maWd1cmF0aW9uIGNhbiBiZSBkb25lIGJ5IHBhc3NpbmcgUmVkdXggRGV2VG9vbHMgb3B0aW9uc1xyXG4gICAqL1xyXG4gIGRldlRvb2xzPzogYm9vbGVhbiB8IERldlRvb2xzT3B0aW9uc1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgaW5pdGlhbCBzdGF0ZSwgc2FtZSBhcyBSZWR1eCdzIGNyZWF0ZVN0b3JlLlxyXG4gICAqIFlvdSBtYXkgb3B0aW9uYWxseSBzcGVjaWZ5IGl0IHRvIGh5ZHJhdGUgdGhlIHN0YXRlXHJcbiAgICogZnJvbSB0aGUgc2VydmVyIGluIHVuaXZlcnNhbCBhcHBzLCBvciB0byByZXN0b3JlIGEgcHJldmlvdXNseSBzZXJpYWxpemVkXHJcbiAgICogdXNlciBzZXNzaW9uLiBJZiB5b3UgdXNlIGBjb21iaW5lUmVkdWNlcnMoKWAgdG8gcHJvZHVjZSB0aGUgcm9vdCByZWR1Y2VyXHJcbiAgICogZnVuY3Rpb24gKGVpdGhlciBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGJ5IHBhc3NpbmcgYW4gb2JqZWN0IGFzIGByZWR1Y2VyYCksXHJcbiAgICogdGhpcyBtdXN0IGJlIGFuIG9iamVjdCB3aXRoIHRoZSBzYW1lIHNoYXBlIGFzIHRoZSByZWR1Y2VyIG1hcCBrZXlzLlxyXG4gICAqL1xyXG4gIC8qXHJcbiAgTm90IDEwMCUgY29ycmVjdCBidXQgdGhlIGJlc3QgYXBwcm94aW1hdGlvbiB3ZSBjYW4gZ2V0OlxyXG4gIC0gaWYgUyBpcyBhIGBDb21iaW5lZFN0YXRlYCBhcHBseWluZyBhIHNlY29uZCBgQ29tYmluZWRTdGF0ZWAgb24gaXQgZG9lcyBub3QgY2hhbmdlIGFueXRoaW5nLlxyXG4gIC0gaWYgaXQgaXMgbm90LCB0aGVyZSBjb3VsZCBiZSB0d28gY2FzZXM6XHJcbiAgICAtIGBSZWR1Y2Vyc01hcE9iamVjdDxTLCBBPmAgaXMgYmVpbmcgcGFzc2VkIGluLiBJbiB0aGlzIGNhc2UsIHdlIHdpbGwgY2FsbCBgY29tYmluZVJlZHVjZXJzYCBvbiBpdCBhbmQgYENvbWJpbmVkU3RhdGU8Uz5gIGlzIGNvcnJlY3RcclxuICAgIC0gYFJlZHVjZXI8UywgQT5gIGlzIGJlaW5nIHBhc3NlZCBpbi4gSW4gdGhpcyBjYXNlLCBhY3R1YWxseSBgQ29tYmluZWRTdGF0ZTxTPmAgaXMgd3JvbmcgYW5kIGBTYCB3b3VsZCBiZSBjb3JyZWN0LlxyXG4gICAgQXMgd2UgY2Fubm90IGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhvc2UgdHdvIGNhc2VzIHdpdGhvdXQgYWRkaW5nIGFub3RoZXIgZ2VuZXJpYyBwYXJhbWV0ZXIsXHJcbiAgICB3ZSBqdXN0IG1ha2UgdGhlIHByYWdtYXRpYyBhc3N1bXB0aW9uIHRoYXQgdGhlIGxhdHRlciBhbG1vc3QgbmV2ZXIgaGFwcGVucy5cclxuICAqL1xyXG4gIHByZWxvYWRlZFN0YXRlPzogUHJlbG9hZGVkU3RhdGU8Q29tYmluZWRTdGF0ZTxOb0luZmVyPFM+Pj5cclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIHN0b3JlIGVuaGFuY2VycyB0byBhcHBseS4gU2VlIFJlZHV4J3MgYGNyZWF0ZVN0b3JlKClgLlxyXG4gICAqIEFsbCBlbmhhbmNlcnMgd2lsbCBiZSBpbmNsdWRlZCBiZWZvcmUgdGhlIERldlRvb2xzIEV4dGVuc2lvbiBlbmhhbmNlci5cclxuICAgKiBJZiB5b3UgbmVlZCB0byBjdXN0b21pemUgdGhlIG9yZGVyIG9mIGVuaGFuY2Vycywgc3VwcGx5IGEgY2FsbGJhY2tcclxuICAgKiBmdW5jdGlvbiB0aGF0IHdpbGwgcmVjZWl2ZSB0aGUgb3JpZ2luYWwgYXJyYXkgKGllLCBgW2FwcGx5TWlkZGxld2FyZV1gKSxcclxuICAgKiBhbmQgc2hvdWxkIHJldHVybiBhIG5ldyBhcnJheSAoc3VjaCBhcyBgW2FwcGx5TWlkZGxld2FyZSwgb2ZmbGluZV1gKS5cclxuICAgKiBJZiB5b3Ugb25seSBuZWVkIHRvIGFkZCBtaWRkbGV3YXJlLCB5b3UgY2FuIHVzZSB0aGUgYG1pZGRsZXdhcmVgIHBhcmFtZXRlciBpbnN0ZWFkLlxyXG4gICAqL1xyXG4gIGVuaGFuY2Vycz86IEUgfCBDb25maWd1cmVFbmhhbmNlcnNDYWxsYmFjazxFPlxyXG59XHJcblxyXG50eXBlIE1pZGRsZXdhcmVzPFM+ID0gUmVhZG9ubHlBcnJheTxNaWRkbGV3YXJlPHt9LCBTPj5cclxuXHJcbnR5cGUgRW5oYW5jZXJzID0gUmVhZG9ubHlBcnJheTxTdG9yZUVuaGFuY2VyPlxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBUb29sa2l0U3RvcmU8XHJcbiAgUyA9IGFueSxcclxuICBBIGV4dGVuZHMgQWN0aW9uID0gQW55QWN0aW9uLFxyXG4gIE0gZXh0ZW5kcyBNaWRkbGV3YXJlczxTPiA9IE1pZGRsZXdhcmVzPFM+XHJcbj4gZXh0ZW5kcyBTdG9yZTxTLCBBPiB7XHJcbiAgLyoqXHJcbiAgICogVGhlIGBkaXNwYXRjaGAgbWV0aG9kIG9mIHlvdXIgc3RvcmUsIGVuaGFuY2VkIGJ5IGFsbCBpdHMgbWlkZGxld2FyZXMuXHJcbiAgICpcclxuICAgKiBAaW5oZXJpdGRvY1xyXG4gICAqL1xyXG4gIGRpc3BhdGNoOiBFeHRyYWN0RGlzcGF0Y2hFeHRlbnNpb25zPE0+ICYgRGlzcGF0Y2g8QT5cclxufVxyXG5cclxuLyoqXHJcbiAqIEEgUmVkdXggc3RvcmUgcmV0dXJuZWQgYnkgYGNvbmZpZ3VyZVN0b3JlKClgLiBTdXBwb3J0cyBkaXNwYXRjaGluZ1xyXG4gKiBzaWRlLWVmZmVjdGZ1bCBfdGh1bmtzXyBpbiBhZGRpdGlvbiB0byBwbGFpbiBhY3Rpb25zLlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBFbmhhbmNlZFN0b3JlPFxyXG4gIFMgPSBhbnksXHJcbiAgQSBleHRlbmRzIEFjdGlvbiA9IEFueUFjdGlvbixcclxuICBNIGV4dGVuZHMgTWlkZGxld2FyZXM8Uz4gPSBNaWRkbGV3YXJlczxTPixcclxuICBFIGV4dGVuZHMgRW5oYW5jZXJzID0gRW5oYW5jZXJzXHJcbj4gPSBUb29sa2l0U3RvcmU8UyAmIEV4dHJhY3RTdGF0ZUV4dGVuc2lvbnM8RT4sIEEsIE0+ICZcclxuICBFeHRyYWN0U3RvcmVFeHRlbnNpb25zPEU+XHJcblxyXG4vKipcclxuICogQSBmcmllbmRseSBhYnN0cmFjdGlvbiBvdmVyIHRoZSBzdGFuZGFyZCBSZWR1eCBgY3JlYXRlU3RvcmUoKWAgZnVuY3Rpb24uXHJcbiAqXHJcbiAqIEBwYXJhbSBvcHRpb25zIFRoZSBzdG9yZSBjb25maWd1cmF0aW9uLlxyXG4gKiBAcmV0dXJucyBBIGNvbmZpZ3VyZWQgUmVkdXggc3RvcmUuXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBjb25maWd1cmVTdG9yZTxcclxuICBTID0gYW55LFxyXG4gIEEgZXh0ZW5kcyBBY3Rpb24gPSBBbnlBY3Rpb24sXHJcbiAgTSBleHRlbmRzIE1pZGRsZXdhcmVzPFM+ID0gW1RodW5rTWlkZGxld2FyZUZvcjxTPl0sXHJcbiAgRSBleHRlbmRzIEVuaGFuY2VycyA9IFtTdG9yZUVuaGFuY2VyXVxyXG4+KG9wdGlvbnM6IENvbmZpZ3VyZVN0b3JlT3B0aW9uczxTLCBBLCBNLCBFPik6IEVuaGFuY2VkU3RvcmU8UywgQSwgTSwgRT4ge1xyXG4gIGNvbnN0IGN1cnJpZWRHZXREZWZhdWx0TWlkZGxld2FyZSA9IGN1cnJ5R2V0RGVmYXVsdE1pZGRsZXdhcmU8Uz4oKVxyXG5cclxuICBjb25zdCB7XHJcbiAgICByZWR1Y2VyID0gdW5kZWZpbmVkLFxyXG4gICAgbWlkZGxld2FyZSA9IGN1cnJpZWRHZXREZWZhdWx0TWlkZGxld2FyZSgpLFxyXG4gICAgZGV2VG9vbHMgPSB0cnVlLFxyXG4gICAgcHJlbG9hZGVkU3RhdGUgPSB1bmRlZmluZWQsXHJcbiAgICBlbmhhbmNlcnMgPSB1bmRlZmluZWQsXHJcbiAgfSA9IG9wdGlvbnMgfHwge31cclxuXHJcbiAgbGV0IHJvb3RSZWR1Y2VyOiBSZWR1Y2VyPFMsIEE+XHJcblxyXG4gIGlmICh0eXBlb2YgcmVkdWNlciA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgcm9vdFJlZHVjZXIgPSByZWR1Y2VyXHJcbiAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHJlZHVjZXIpKSB7XHJcbiAgICByb290UmVkdWNlciA9IGNvbWJpbmVSZWR1Y2VycyhyZWR1Y2VyKSBhcyB1bmtub3duIGFzIFJlZHVjZXI8UywgQT5cclxuICB9IGVsc2Uge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAnXCJyZWR1Y2VyXCIgaXMgYSByZXF1aXJlZCBhcmd1bWVudCwgYW5kIG11c3QgYmUgYSBmdW5jdGlvbiBvciBhbiBvYmplY3Qgb2YgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHBhc3NlZCB0byBjb21iaW5lUmVkdWNlcnMnXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICBsZXQgZmluYWxNaWRkbGV3YXJlID0gbWlkZGxld2FyZVxyXG4gIGlmICh0eXBlb2YgZmluYWxNaWRkbGV3YXJlID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICBmaW5hbE1pZGRsZXdhcmUgPSBmaW5hbE1pZGRsZXdhcmUoY3VycmllZEdldERlZmF1bHRNaWRkbGV3YXJlKVxyXG5cclxuICAgIGlmICghSVNfUFJPRFVDVElPTiAmJiAhQXJyYXkuaXNBcnJheShmaW5hbE1pZGRsZXdhcmUpKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAnd2hlbiB1c2luZyBhIG1pZGRsZXdhcmUgYnVpbGRlciBmdW5jdGlvbiwgYW4gYXJyYXkgb2YgbWlkZGxld2FyZSBtdXN0IGJlIHJldHVybmVkJ1xyXG4gICAgICApXHJcbiAgICB9XHJcbiAgfVxyXG4gIGlmIChcclxuICAgICFJU19QUk9EVUNUSU9OICYmXHJcbiAgICBmaW5hbE1pZGRsZXdhcmUuc29tZSgoaXRlbTogYW55KSA9PiB0eXBlb2YgaXRlbSAhPT0gJ2Z1bmN0aW9uJylcclxuICApIHtcclxuICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgJ2VhY2ggbWlkZGxld2FyZSBwcm92aWRlZCB0byBjb25maWd1cmVTdG9yZSBtdXN0IGJlIGEgZnVuY3Rpb24nXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICBjb25zdCBtaWRkbGV3YXJlRW5oYW5jZXI6IFN0b3JlRW5oYW5jZXIgPSBhcHBseU1pZGRsZXdhcmUoLi4uZmluYWxNaWRkbGV3YXJlKVxyXG5cclxuICBsZXQgZmluYWxDb21wb3NlID0gY29tcG9zZVxyXG5cclxuICBpZiAoZGV2VG9vbHMpIHtcclxuICAgIGZpbmFsQ29tcG9zZSA9IGNvbXBvc2VXaXRoRGV2VG9vbHMoe1xyXG4gICAgICAvLyBFbmFibGUgY2FwdHVyZSBvZiBzdGFjayB0cmFjZXMgZm9yIGRpc3BhdGNoZWQgUmVkdXggYWN0aW9uc1xyXG4gICAgICB0cmFjZTogIUlTX1BST0RVQ1RJT04sXHJcbiAgICAgIC4uLih0eXBlb2YgZGV2VG9vbHMgPT09ICdvYmplY3QnICYmIGRldlRvb2xzKSxcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBjb25zdCBkZWZhdWx0RW5oYW5jZXJzID0gbmV3IEVuaGFuY2VyQXJyYXkobWlkZGxld2FyZUVuaGFuY2VyKVxyXG4gIGxldCBzdG9yZUVuaGFuY2VyczogRW5oYW5jZXJzID0gZGVmYXVsdEVuaGFuY2Vyc1xyXG5cclxuICBpZiAoQXJyYXkuaXNBcnJheShlbmhhbmNlcnMpKSB7XHJcbiAgICBzdG9yZUVuaGFuY2VycyA9IFttaWRkbGV3YXJlRW5oYW5jZXIsIC4uLmVuaGFuY2Vyc11cclxuICB9IGVsc2UgaWYgKHR5cGVvZiBlbmhhbmNlcnMgPT09ICdmdW5jdGlvbicpIHtcclxuICAgIHN0b3JlRW5oYW5jZXJzID0gZW5oYW5jZXJzKGRlZmF1bHRFbmhhbmNlcnMpXHJcbiAgfVxyXG5cclxuICBjb25zdCBjb21wb3NlZEVuaGFuY2VyID0gZmluYWxDb21wb3NlKC4uLnN0b3JlRW5oYW5jZXJzKSBhcyBTdG9yZUVuaGFuY2VyPGFueT5cclxuXHJcbiAgcmV0dXJuIGNyZWF0ZVN0b3JlKHJvb3RSZWR1Y2VyLCBwcmVsb2FkZWRTdGF0ZSwgY29tcG9zZWRFbmhhbmNlcilcclxufVxyXG4iLCAiaW1wb3J0IHR5cGUgeyBBY3Rpb24sIEFjdGlvbkNyZWF0b3IsIFN0b3JlRW5oYW5jZXIgfSBmcm9tICdyZWR1eCdcclxuaW1wb3J0IHsgY29tcG9zZSB9IGZyb20gJ3JlZHV4J1xyXG5cclxuLyoqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgRGV2VG9vbHNFbmhhbmNlck9wdGlvbnMge1xyXG4gIC8qKlxyXG4gICAqIHRoZSBpbnN0YW5jZSBuYW1lIHRvIGJlIHNob3dlZCBvbiB0aGUgbW9uaXRvciBwYWdlLiBEZWZhdWx0IHZhbHVlIGlzIGBkb2N1bWVudC50aXRsZWAuXHJcbiAgICogSWYgbm90IHNwZWNpZmllZCBhbmQgdGhlcmUncyBubyBkb2N1bWVudCB0aXRsZSwgaXQgd2lsbCBjb25zaXN0IG9mIGB0YWJJZGAgYW5kIGBpbnN0YW5jZUlkYC5cclxuICAgKi9cclxuICBuYW1lPzogc3RyaW5nXHJcbiAgLyoqXHJcbiAgICogYWN0aW9uIGNyZWF0b3JzIGZ1bmN0aW9ucyB0byBiZSBhdmFpbGFibGUgaW4gdGhlIERpc3BhdGNoZXIuXHJcbiAgICovXHJcbiAgYWN0aW9uQ3JlYXRvcnM/OiBBY3Rpb25DcmVhdG9yPGFueT5bXSB8IHsgW2tleTogc3RyaW5nXTogQWN0aW9uQ3JlYXRvcjxhbnk+IH1cclxuICAvKipcclxuICAgKiBpZiBtb3JlIHRoYW4gb25lIGFjdGlvbiBpcyBkaXNwYXRjaGVkIGluIHRoZSBpbmRpY2F0ZWQgaW50ZXJ2YWwsIGFsbCBuZXcgYWN0aW9ucyB3aWxsIGJlIGNvbGxlY3RlZCBhbmQgc2VudCBhdCBvbmNlLlxyXG4gICAqIEl0IGlzIHRoZSBqb2ludCBiZXR3ZWVuIHBlcmZvcm1hbmNlIGFuZCBzcGVlZC4gV2hlbiBzZXQgdG8gYDBgLCBhbGwgYWN0aW9ucyB3aWxsIGJlIHNlbnQgaW5zdGFudGx5LlxyXG4gICAqIFNldCBpdCB0byBhIGhpZ2hlciB2YWx1ZSB3aGVuIGV4cGVyaWVuY2luZyBwZXJmIGlzc3VlcyAoYWxzbyBgbWF4QWdlYCB0byBhIGxvd2VyIHZhbHVlKS5cclxuICAgKlxyXG4gICAqIEBkZWZhdWx0IDUwMCBtcy5cclxuICAgKi9cclxuICBsYXRlbmN5PzogbnVtYmVyXHJcbiAgLyoqXHJcbiAgICogKD4gMSkgLSBtYXhpbXVtIGFsbG93ZWQgYWN0aW9ucyB0byBiZSBzdG9yZWQgaW4gdGhlIGhpc3RvcnkgdHJlZS4gVGhlIG9sZGVzdCBhY3Rpb25zIGFyZSByZW1vdmVkIG9uY2UgbWF4QWdlIGlzIHJlYWNoZWQuIEl0J3MgY3JpdGljYWwgZm9yIHBlcmZvcm1hbmNlLlxyXG4gICAqXHJcbiAgICogQGRlZmF1bHQgNTBcclxuICAgKi9cclxuICBtYXhBZ2U/OiBudW1iZXJcclxuICAvKipcclxuICAgKiBDdXN0b21pemVzIGhvdyBhY3Rpb25zIGFuZCBzdGF0ZSBhcmUgc2VyaWFsaXplZCBhbmQgZGVzZXJpYWxpemVkLiBDYW4gYmUgYSBib29sZWFuIG9yIG9iamVjdC4gSWYgZ2l2ZW4gYSBib29sZWFuLCB0aGUgYmVoYXZpb3IgaXMgdGhlIHNhbWUgYXMgaWYgeW91XHJcbiAgICogd2VyZSB0byBwYXNzIGFuIG9iamVjdCBhbmQgc3BlY2lmeSBgb3B0aW9uc2AgYXMgYSBib29sZWFuLiBHaXZpbmcgYW4gb2JqZWN0IGFsbG93cyBmaW5lLWdyYWluZWQgY3VzdG9taXphdGlvbiB1c2luZyB0aGUgYHJlcGxhY2VyYCBhbmQgYHJldml2ZXJgXHJcbiAgICogZnVuY3Rpb25zLlxyXG4gICAqL1xyXG4gIHNlcmlhbGl6ZT86XHJcbiAgICB8IGJvb2xlYW5cclxuICAgIHwge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIC0gYHVuZGVmaW5lZGAgLSB3aWxsIHVzZSByZWd1bGFyIGBKU09OLnN0cmluZ2lmeWAgdG8gc2VuZCBkYXRhIChpdCdzIHRoZSBmYXN0IG1vZGUpLlxyXG4gICAgICAgICAqIC0gYGZhbHNlYCAtIHdpbGwgaGFuZGxlIGFsc28gY2lyY3VsYXIgcmVmZXJlbmNlcy5cclxuICAgICAgICAgKiAtIGB0cnVlYCAtIHdpbGwgaGFuZGxlIGFsc28gZGF0ZSwgcmVnZXgsIHVuZGVmaW5lZCwgZXJyb3Igb2JqZWN0cywgc3ltYm9scywgbWFwcywgc2V0cyBhbmQgZnVuY3Rpb25zLlxyXG4gICAgICAgICAqIC0gb2JqZWN0LCB3aGljaCBjb250YWlucyBgZGF0ZWAsIGByZWdleGAsIGB1bmRlZmluZWRgLCBgZXJyb3JgLCBgc3ltYm9sYCwgYG1hcGAsIGBzZXRgIGFuZCBgZnVuY3Rpb25gIGtleXMuXHJcbiAgICAgICAgICogICBGb3IgZWFjaCBvZiB0aGVtIHlvdSBjYW4gaW5kaWNhdGUgaWYgdG8gaW5jbHVkZSAoYnkgc2V0dGluZyBhcyBgdHJ1ZWApLlxyXG4gICAgICAgICAqICAgRm9yIGBmdW5jdGlvbmAga2V5IHlvdSBjYW4gYWxzbyBzcGVjaWZ5IGEgY3VzdG9tIGZ1bmN0aW9uIHdoaWNoIGhhbmRsZXMgc2VyaWFsaXphdGlvbi5cclxuICAgICAgICAgKiAgIFNlZSBbYGpzYW5gXShodHRwczovL2dpdGh1Yi5jb20va29sb2RueS9qc2FuKSBmb3IgbW9yZSBkZXRhaWxzLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG9wdGlvbnM/OlxyXG4gICAgICAgICAgfCB1bmRlZmluZWRcclxuICAgICAgICAgIHwgYm9vbGVhblxyXG4gICAgICAgICAgfCB7XHJcbiAgICAgICAgICAgICAgZGF0ZT86IHRydWVcclxuICAgICAgICAgICAgICByZWdleD86IHRydWVcclxuICAgICAgICAgICAgICB1bmRlZmluZWQ/OiB0cnVlXHJcbiAgICAgICAgICAgICAgZXJyb3I/OiB0cnVlXHJcbiAgICAgICAgICAgICAgc3ltYm9sPzogdHJ1ZVxyXG4gICAgICAgICAgICAgIG1hcD86IHRydWVcclxuICAgICAgICAgICAgICBzZXQ/OiB0cnVlXHJcbiAgICAgICAgICAgICAgZnVuY3Rpb24/OiB0cnVlIHwgKChmbjogKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnkpID0+IHN0cmluZylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFtKU09OIHJlcGxhY2VyIGZ1bmN0aW9uXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9KU09OL3N0cmluZ2lmeSNUaGVfcmVwbGFjZXJfcGFyYW1ldGVyKSB1c2VkIGZvciBib3RoIGFjdGlvbnMgYW5kIHN0YXRlcyBzdHJpbmdpZnkuXHJcbiAgICAgICAgICogSW4gYWRkaXRpb24sIHlvdSBjYW4gc3BlY2lmeSBhIGRhdGEgdHlwZSBieSBhZGRpbmcgYSBbYF9fc2VyaWFsaXplZFR5cGVfX2BdKGh0dHBzOi8vZ2l0aHViLmNvbS96YWxtb3hpc3VzL3JlbW90ZWRldi1zZXJpYWxpemUvYmxvYi9tYXN0ZXIvaGVscGVycy9pbmRleC5qcyNMNClcclxuICAgICAgICAgKiBrZXkuIFNvIHlvdSBjYW4gZGVzZXJpYWxpemUgaXQgYmFjayB3aGlsZSBpbXBvcnRpbmcgb3IgcGVyc2lzdGluZyBkYXRhLlxyXG4gICAgICAgICAqIE1vcmVvdmVyLCBpdCB3aWxsIGFsc28gW3Nob3cgYSBuaWNlIHByZXZpZXcgc2hvd2luZyB0aGUgcHJvdmlkZWQgY3VzdG9tIHR5cGVdKGh0dHBzOi8vY2xvdWQuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2Fzc2V0cy83OTU3ODU5LzIxODE0MzMwL2ExN2Q1NTZhLWQ3NjEtMTFlNi04NWVmLTE1OWRkMTJmMzZjNS5wbmcpOlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHJlcGxhY2VyPzogKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bikgPT4gYW55XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogW0pTT04gYHJldml2ZXJgIGZ1bmN0aW9uXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9KU09OL3BhcnNlI1VzaW5nX3RoZV9yZXZpdmVyX3BhcmFtZXRlcilcclxuICAgICAgICAgKiB1c2VkIGZvciBwYXJzaW5nIHRoZSBpbXBvcnRlZCBhY3Rpb25zIGFuZCBzdGF0ZXMuIFNlZSBbYHJlbW90ZWRldi1zZXJpYWxpemVgXShodHRwczovL2dpdGh1Yi5jb20vemFsbW94aXN1cy9yZW1vdGVkZXYtc2VyaWFsaXplL2Jsb2IvbWFzdGVyL2ltbXV0YWJsZS9zZXJpYWxpemUuanMjTDgtTDQxKVxyXG4gICAgICAgICAqIGFzIGFuIGV4YW1wbGUgb24gaG93IHRvIHNlcmlhbGl6ZSBzcGVjaWFsIGRhdGEgdHlwZXMgYW5kIGdldCB0aGVtIGJhY2suXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcmV2aXZlcj86IChrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pID0+IGFueVxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEF1dG9tYXRpY2FsbHkgc2VyaWFsaXplL2Rlc2VyaWFsaXplIGltbXV0YWJsZWpzIHZpYSBbcmVtb3RlZGV2LXNlcmlhbGl6ZV0oaHR0cHM6Ly9naXRodWIuY29tL3phbG1veGlzdXMvcmVtb3RlZGV2LXNlcmlhbGl6ZSkuXHJcbiAgICAgICAgICogSnVzdCBwYXNzIHRoZSBJbW11dGFibGUgbGlicmFyeS4gSXQgd2lsbCBzdXBwb3J0IGFsbCBJbW11dGFibGVKUyBzdHJ1Y3R1cmVzLiBZb3UgY2FuIGV2ZW4gZXhwb3J0IHRoZW0gaW50byBhIGZpbGUgYW5kIGdldCB0aGVtIGJhY2suXHJcbiAgICAgICAgICogVGhlIG9ubHkgZXhjZXB0aW9uIGlzIGBSZWNvcmRgIGNsYXNzLCBmb3Igd2hpY2ggeW91IHNob3VsZCBwYXNzIHRoaXMgaW4gYWRkaXRpb24gdGhlIHJlZmVyZW5jZXMgdG8geW91ciBjbGFzc2VzIGluIGByZWZzYC5cclxuICAgICAgICAgKi9cclxuICAgICAgICBpbW11dGFibGU/OiBhbnlcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJbW11dGFibGVKUyBgUmVjb3JkYCBjbGFzc2VzIHVzZWQgdG8gbWFrZSBwb3NzaWJsZSByZXN0b3JlIGl0cyBpbnN0YW5jZXMgYmFjayB3aGVuIGltcG9ydGluZywgcGVyc2lzdGluZy4uLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHJlZnM/OiBhbnlcclxuICAgICAgfVxyXG4gIC8qKlxyXG4gICAqIGZ1bmN0aW9uIHdoaWNoIHRha2VzIGBhY3Rpb25gIG9iamVjdCBhbmQgaWQgbnVtYmVyIGFzIGFyZ3VtZW50cywgYW5kIHNob3VsZCByZXR1cm4gYGFjdGlvbmAgb2JqZWN0IGJhY2suXHJcbiAgICovXHJcbiAgYWN0aW9uU2FuaXRpemVyPzogPEEgZXh0ZW5kcyBBY3Rpb24+KGFjdGlvbjogQSwgaWQ6IG51bWJlcikgPT4gQVxyXG4gIC8qKlxyXG4gICAqIGZ1bmN0aW9uIHdoaWNoIHRha2VzIGBzdGF0ZWAgb2JqZWN0IGFuZCBpbmRleCBhcyBhcmd1bWVudHMsIGFuZCBzaG91bGQgcmV0dXJuIGBzdGF0ZWAgb2JqZWN0IGJhY2suXHJcbiAgICovXHJcbiAgc3RhdGVTYW5pdGl6ZXI/OiA8Uz4oc3RhdGU6IFMsIGluZGV4OiBudW1iZXIpID0+IFNcclxuICAvKipcclxuICAgKiAqc3RyaW5nIG9yIGFycmF5IG9mIHN0cmluZ3MgYXMgcmVnZXgqIC0gYWN0aW9ucyB0eXBlcyB0byBiZSBoaWRkZW4gLyBzaG93biBpbiB0aGUgbW9uaXRvcnMgKHdoaWxlIHBhc3NlZCB0byB0aGUgcmVkdWNlcnMpLlxyXG4gICAqIElmIGBhY3Rpb25zV2hpdGVsaXN0YCBzcGVjaWZpZWQsIGBhY3Rpb25zQmxhY2tsaXN0YCBpcyBpZ25vcmVkLlxyXG4gICAqIEBkZXByZWNhdGVkIFVzZSBhY3Rpb25zRGVueWxpc3QgaW5zdGVhZC5cclxuICAgKi9cclxuICBhY3Rpb25zQmxhY2tsaXN0Pzogc3RyaW5nIHwgc3RyaW5nW11cclxuICAvKipcclxuICAgKiAqc3RyaW5nIG9yIGFycmF5IG9mIHN0cmluZ3MgYXMgcmVnZXgqIC0gYWN0aW9ucyB0eXBlcyB0byBiZSBoaWRkZW4gLyBzaG93biBpbiB0aGUgbW9uaXRvcnMgKHdoaWxlIHBhc3NlZCB0byB0aGUgcmVkdWNlcnMpLlxyXG4gICAqIElmIGBhY3Rpb25zV2hpdGVsaXN0YCBzcGVjaWZpZWQsIGBhY3Rpb25zQmxhY2tsaXN0YCBpcyBpZ25vcmVkLlxyXG4gICAqIEBkZXByZWNhdGVkIFVzZSBhY3Rpb25zQWxsb3dsaXN0IGluc3RlYWQuXHJcbiAgICovXHJcbiAgYWN0aW9uc1doaXRlbGlzdD86IHN0cmluZyB8IHN0cmluZ1tdXHJcbiAgLyoqXHJcbiAgICogKnN0cmluZyBvciBhcnJheSBvZiBzdHJpbmdzIGFzIHJlZ2V4KiAtIGFjdGlvbnMgdHlwZXMgdG8gYmUgaGlkZGVuIC8gc2hvd24gaW4gdGhlIG1vbml0b3JzICh3aGlsZSBwYXNzZWQgdG8gdGhlIHJlZHVjZXJzKS5cclxuICAgKiBJZiBgYWN0aW9uc0FsbG93bGlzdGAgc3BlY2lmaWVkLCBgYWN0aW9uc0RlbnlsaXN0YCBpcyBpZ25vcmVkLlxyXG4gICAqL1xyXG4gIGFjdGlvbnNEZW55bGlzdD86IHN0cmluZyB8IHN0cmluZ1tdXHJcbiAgLyoqXHJcbiAgICogKnN0cmluZyBvciBhcnJheSBvZiBzdHJpbmdzIGFzIHJlZ2V4KiAtIGFjdGlvbnMgdHlwZXMgdG8gYmUgaGlkZGVuIC8gc2hvd24gaW4gdGhlIG1vbml0b3JzICh3aGlsZSBwYXNzZWQgdG8gdGhlIHJlZHVjZXJzKS5cclxuICAgKiBJZiBgYWN0aW9uc0FsbG93bGlzdGAgc3BlY2lmaWVkLCBgYWN0aW9uc0RlbnlsaXN0YCBpcyBpZ25vcmVkLlxyXG4gICAqL1xyXG4gIGFjdGlvbnNBbGxvd2xpc3Q/OiBzdHJpbmcgfCBzdHJpbmdbXVxyXG4gIC8qKlxyXG4gICAqIGNhbGxlZCBmb3IgZXZlcnkgYWN0aW9uIGJlZm9yZSBzZW5kaW5nLCB0YWtlcyBgc3RhdGVgIGFuZCBgYWN0aW9uYCBvYmplY3QsIGFuZCByZXR1cm5zIGB0cnVlYCBpbiBjYXNlIGl0IGFsbG93cyBzZW5kaW5nIHRoZSBjdXJyZW50IGRhdGEgdG8gdGhlIG1vbml0b3IuXHJcbiAgICogVXNlIGl0IGFzIGEgbW9yZSBhZHZhbmNlZCB2ZXJzaW9uIG9mIGBhY3Rpb25zRGVueWxpc3RgL2BhY3Rpb25zQWxsb3dsaXN0YCBwYXJhbWV0ZXJzLlxyXG4gICAqL1xyXG4gIHByZWRpY2F0ZT86IDxTLCBBIGV4dGVuZHMgQWN0aW9uPihzdGF0ZTogUywgYWN0aW9uOiBBKSA9PiBib29sZWFuXHJcbiAgLyoqXHJcbiAgICogaWYgc3BlY2lmaWVkIGFzIGBmYWxzZWAsIGl0IHdpbGwgbm90IHJlY29yZCB0aGUgY2hhbmdlcyB0aWxsIGNsaWNraW5nIG9uIGBTdGFydCByZWNvcmRpbmdgIGJ1dHRvbi5cclxuICAgKiBBdmFpbGFibGUgb25seSBmb3IgUmVkdXggZW5oYW5jZXIsIGZvciBvdGhlcnMgdXNlIGBhdXRvUGF1c2VgLlxyXG4gICAqXHJcbiAgICogQGRlZmF1bHQgdHJ1ZVxyXG4gICAqL1xyXG4gIHNob3VsZFJlY29yZENoYW5nZXM/OiBib29sZWFuXHJcbiAgLyoqXHJcbiAgICogaWYgc3BlY2lmaWVkLCB3aGVuZXZlciBjbGlja2luZyBvbiBgUGF1c2UgcmVjb3JkaW5nYCBidXR0b24gYW5kIHRoZXJlIGFyZSBhY3Rpb25zIGluIHRoZSBoaXN0b3J5IGxvZywgd2lsbCBhZGQgdGhpcyBhY3Rpb24gdHlwZS5cclxuICAgKiBJZiBub3Qgc3BlY2lmaWVkLCB3aWxsIGNvbW1pdCB3aGVuIHBhdXNlZC4gQXZhaWxhYmxlIG9ubHkgZm9yIFJlZHV4IGVuaGFuY2VyLlxyXG4gICAqXHJcbiAgICogQGRlZmF1bHQgXCJAQFBBVVNFRFwiXCJcclxuICAgKi9cclxuICBwYXVzZUFjdGlvblR5cGU/OiBzdHJpbmdcclxuICAvKipcclxuICAgKiBhdXRvIHBhdXNlcyB3aGVuIHRoZSBleHRlbnNpb27igJlzIHdpbmRvdyBpcyBub3Qgb3BlbmVkLCBhbmQgc28gaGFzIHplcm8gaW1wYWN0IG9uIHlvdXIgYXBwIHdoZW4gbm90IGluIHVzZS5cclxuICAgKiBOb3QgYXZhaWxhYmxlIGZvciBSZWR1eCBlbmhhbmNlciAoYXMgaXQgYWxyZWFkeSBkb2VzIGl0IGJ1dCBzdG9yaW5nIHRoZSBkYXRhIHRvIGJlIHNlbnQpLlxyXG4gICAqXHJcbiAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgKi9cclxuICBhdXRvUGF1c2U/OiBib29sZWFuXHJcbiAgLyoqXHJcbiAgICogaWYgc3BlY2lmaWVkIGFzIGB0cnVlYCwgaXQgd2lsbCBub3QgYWxsb3cgYW55IG5vbi1tb25pdG9yIGFjdGlvbnMgdG8gYmUgZGlzcGF0Y2hlZCB0aWxsIGNsaWNraW5nIG9uIGBVbmxvY2sgY2hhbmdlc2AgYnV0dG9uLlxyXG4gICAqIEF2YWlsYWJsZSBvbmx5IGZvciBSZWR1eCBlbmhhbmNlci5cclxuICAgKlxyXG4gICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICovXHJcbiAgc2hvdWxkU3RhcnRMb2NrZWQ/OiBib29sZWFuXHJcbiAgLyoqXHJcbiAgICogaWYgc2V0IHRvIGBmYWxzZWAsIHdpbGwgbm90IHJlY29tcHV0ZSB0aGUgc3RhdGVzIG9uIGhvdCByZWxvYWRpbmcgKG9yIG9uIHJlcGxhY2luZyB0aGUgcmVkdWNlcnMpLiBBdmFpbGFibGUgb25seSBmb3IgUmVkdXggZW5oYW5jZXIuXHJcbiAgICpcclxuICAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgICovXHJcbiAgc2hvdWxkSG90UmVsb2FkPzogYm9vbGVhblxyXG4gIC8qKlxyXG4gICAqIGlmIHNwZWNpZmllZCBhcyBgdHJ1ZWAsIHdoZW5ldmVyIHRoZXJlJ3MgYW4gZXhjZXB0aW9uIGluIHJlZHVjZXJzLCB0aGUgbW9uaXRvcnMgd2lsbCBzaG93IHRoZSBlcnJvciBtZXNzYWdlLCBhbmQgbmV4dCBhY3Rpb25zIHdpbGwgbm90IGJlIGRpc3BhdGNoZWQuXHJcbiAgICpcclxuICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAqL1xyXG4gIHNob3VsZENhdGNoRXJyb3JzPzogYm9vbGVhblxyXG4gIC8qKlxyXG4gICAqIElmIHlvdSB3YW50IHRvIHJlc3RyaWN0IHRoZSBleHRlbnNpb24sIHNwZWNpZnkgdGhlIGZlYXR1cmVzIHlvdSBhbGxvdy5cclxuICAgKiBJZiBub3Qgc3BlY2lmaWVkLCBhbGwgb2YgdGhlIGZlYXR1cmVzIGFyZSBlbmFibGVkLiBXaGVuIHNldCBhcyBhbiBvYmplY3QsIG9ubHkgdGhvc2UgaW5jbHVkZWQgYXMgYHRydWVgIHdpbGwgYmUgYWxsb3dlZC5cclxuICAgKiBOb3RlIHRoYXQgZXhjZXB0IGB0cnVlYC9gZmFsc2VgLCBgaW1wb3J0YCBhbmQgYGV4cG9ydGAgY2FuIGJlIHNldCBhcyBgY3VzdG9tYCAod2hpY2ggaXMgYnkgZGVmYXVsdCBmb3IgUmVkdXggZW5oYW5jZXIpLCBtZWFuaW5nIHRoYXQgdGhlIGltcG9ydGluZy9leHBvcnRpbmcgb2NjdXJzIG9uIHRoZSBjbGllbnQgc2lkZS5cclxuICAgKiBPdGhlcndpc2UsIHlvdSdsbCBnZXQvc2V0IHRoZSBkYXRhIHJpZ2h0IGZyb20gdGhlIG1vbml0b3IgcGFydC5cclxuICAgKi9cclxuICBmZWF0dXJlcz86IHtcclxuICAgIC8qKlxyXG4gICAgICogc3RhcnQvcGF1c2UgcmVjb3JkaW5nIG9mIGRpc3BhdGNoZWQgYWN0aW9uc1xyXG4gICAgICovXHJcbiAgICBwYXVzZT86IGJvb2xlYW5cclxuICAgIC8qKlxyXG4gICAgICogbG9jay91bmxvY2sgZGlzcGF0Y2hpbmcgYWN0aW9ucyBhbmQgc2lkZSBlZmZlY3RzXHJcbiAgICAgKi9cclxuICAgIGxvY2s/OiBib29sZWFuXHJcbiAgICAvKipcclxuICAgICAqIHBlcnNpc3Qgc3RhdGVzIG9uIHBhZ2UgcmVsb2FkaW5nXHJcbiAgICAgKi9cclxuICAgIHBlcnNpc3Q/OiBib29sZWFuXHJcbiAgICAvKipcclxuICAgICAqIGV4cG9ydCBoaXN0b3J5IG9mIGFjdGlvbnMgaW4gYSBmaWxlXHJcbiAgICAgKi9cclxuICAgIGV4cG9ydD86IGJvb2xlYW4gfCAnY3VzdG9tJ1xyXG4gICAgLyoqXHJcbiAgICAgKiBpbXBvcnQgaGlzdG9yeSBvZiBhY3Rpb25zIGZyb20gYSBmaWxlXHJcbiAgICAgKi9cclxuICAgIGltcG9ydD86IGJvb2xlYW4gfCAnY3VzdG9tJ1xyXG4gICAgLyoqXHJcbiAgICAgKiBqdW1wIGJhY2sgYW5kIGZvcnRoICh0aW1lIHRyYXZlbGxpbmcpXHJcbiAgICAgKi9cclxuICAgIGp1bXA/OiBib29sZWFuXHJcbiAgICAvKipcclxuICAgICAqIHNraXAgKGNhbmNlbCkgYWN0aW9uc1xyXG4gICAgICovXHJcbiAgICBza2lwPzogYm9vbGVhblxyXG4gICAgLyoqXHJcbiAgICAgKiBkcmFnIGFuZCBkcm9wIGFjdGlvbnMgaW4gdGhlIGhpc3RvcnkgbGlzdFxyXG4gICAgICovXHJcbiAgICByZW9yZGVyPzogYm9vbGVhblxyXG4gICAgLyoqXHJcbiAgICAgKiBkaXNwYXRjaCBjdXN0b20gYWN0aW9ucyBvciBhY3Rpb24gY3JlYXRvcnNcclxuICAgICAqL1xyXG4gICAgZGlzcGF0Y2g/OiBib29sZWFuXHJcbiAgICAvKipcclxuICAgICAqIGdlbmVyYXRlIHRlc3RzIGZvciB0aGUgc2VsZWN0ZWQgYWN0aW9uc1xyXG4gICAgICovXHJcbiAgICB0ZXN0PzogYm9vbGVhblxyXG4gIH1cclxuICAvKipcclxuICAgKiBTZXQgdG8gdHJ1ZSBvciBhIHN0YWNrdHJhY2UtcmV0dXJuaW5nIGZ1bmN0aW9uIHRvIHJlY29yZCBjYWxsIHN0YWNrIHRyYWNlcyBmb3IgZGlzcGF0Y2hlZCBhY3Rpb25zLlxyXG4gICAqIERlZmF1bHRzIHRvIGZhbHNlLlxyXG4gICAqL1xyXG4gIHRyYWNlPzogYm9vbGVhbiB8ICg8QSBleHRlbmRzIEFjdGlvbj4oYWN0aW9uOiBBKSA9PiBzdHJpbmcpXHJcbiAgLyoqXHJcbiAgICogVGhlIG1heGltdW0gbnVtYmVyIG9mIHN0YWNrIHRyYWNlIGVudHJpZXMgdG8gcmVjb3JkIHBlciBhY3Rpb24uIERlZmF1bHRzIHRvIDEwLlxyXG4gICAqL1xyXG4gIHRyYWNlTGltaXQ/OiBudW1iZXJcclxufVxyXG5cclxudHlwZSBDb21wb3NlID0gdHlwZW9mIGNvbXBvc2VcclxuXHJcbmludGVyZmFjZSBDb21wb3NlV2l0aERldlRvb2xzIHtcclxuICAob3B0aW9uczogRGV2VG9vbHNFbmhhbmNlck9wdGlvbnMpOiBDb21wb3NlXHJcbiAgPFN0b3JlRXh0PiguLi5mdW5jczogU3RvcmVFbmhhbmNlcjxTdG9yZUV4dD5bXSk6IFN0b3JlRW5oYW5jZXI8U3RvcmVFeHQ+XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgY29tcG9zZVdpdGhEZXZUb29sczogQ29tcG9zZVdpdGhEZXZUb29scyA9XHJcbiAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiZcclxuICAod2luZG93IGFzIGFueSkuX19SRURVWF9ERVZUT09MU19FWFRFTlNJT05fQ09NUE9TRV9fXHJcbiAgICA/ICh3aW5kb3cgYXMgYW55KS5fX1JFRFVYX0RFVlRPT0xTX0VYVEVOU0lPTl9DT01QT1NFX19cclxuICAgIDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSByZXR1cm4gdW5kZWZpbmVkXHJcbiAgICAgICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbMF0gPT09ICdvYmplY3QnKSByZXR1cm4gY29tcG9zZVxyXG4gICAgICAgIHJldHVybiBjb21wb3NlLmFwcGx5KG51bGwsIGFyZ3VtZW50cyBhcyBhbnkgYXMgRnVuY3Rpb25bXSlcclxuICAgICAgfVxyXG5cclxuLyoqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBjb25zdCBkZXZUb29sc0VuaGFuY2VyOiB7XHJcbiAgKG9wdGlvbnM6IERldlRvb2xzRW5oYW5jZXJPcHRpb25zKTogU3RvcmVFbmhhbmNlcjxhbnk+XHJcbn0gPVxyXG4gIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmICh3aW5kb3cgYXMgYW55KS5fX1JFRFVYX0RFVlRPT0xTX0VYVEVOU0lPTl9fXHJcbiAgICA/ICh3aW5kb3cgYXMgYW55KS5fX1JFRFVYX0RFVlRPT0xTX0VYVEVOU0lPTl9fXHJcbiAgICA6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG5vb3ApIHtcclxuICAgICAgICAgIHJldHVybiBub29wXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiIsICIvKipcclxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBwYXNzZWQgdmFsdWUgaXMgXCJwbGFpblwiIG9iamVjdCwgaS5lLiBhbiBvYmplY3Qgd2hvc2VcclxuICogcHJvdG90eXBlIGlzIHRoZSByb290IGBPYmplY3QucHJvdG90eXBlYC4gVGhpcyBpbmNsdWRlcyBvYmplY3RzIGNyZWF0ZWRcclxuICogdXNpbmcgb2JqZWN0IGxpdGVyYWxzLCBidXQgbm90IGZvciBpbnN0YW5jZSBmb3IgY2xhc3MgaW5zdGFuY2VzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge2FueX0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXHJcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBhcmd1bWVudCBhcHBlYXJzIHRvIGJlIGEgcGxhaW4gb2JqZWN0LlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgb2JqZWN0IHtcclxuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCB2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlXHJcblxyXG4gIGxldCBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSlcclxuICBpZiAocHJvdG8gPT09IG51bGwpIHJldHVybiB0cnVlXHJcblxyXG4gIGxldCBiYXNlUHJvdG8gPSBwcm90b1xyXG4gIHdoaWxlIChPYmplY3QuZ2V0UHJvdG90eXBlT2YoYmFzZVByb3RvKSAhPT0gbnVsbCkge1xyXG4gICAgYmFzZVByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGJhc2VQcm90bylcclxuICB9XHJcblxyXG4gIHJldHVybiBwcm90byA9PT0gYmFzZVByb3RvXHJcbn1cclxuIiwgImltcG9ydCB0eXBlIHsgTWlkZGxld2FyZSwgQW55QWN0aW9uIH0gZnJvbSAncmVkdXgnXHJcbmltcG9ydCB0eXBlIHsgVGh1bmtNaWRkbGV3YXJlIH0gZnJvbSAncmVkdXgtdGh1bmsnXHJcbmltcG9ydCB0aHVua01pZGRsZXdhcmUgZnJvbSAncmVkdXgtdGh1bmsnXHJcbmltcG9ydCB0eXBlIHsgQWN0aW9uQ3JlYXRvckludmFyaWFudE1pZGRsZXdhcmVPcHRpb25zIH0gZnJvbSAnLi9hY3Rpb25DcmVhdG9ySW52YXJpYW50TWlkZGxld2FyZSdcclxuaW1wb3J0IHsgY3JlYXRlQWN0aW9uQ3JlYXRvckludmFyaWFudE1pZGRsZXdhcmUgfSBmcm9tICcuL2FjdGlvbkNyZWF0b3JJbnZhcmlhbnRNaWRkbGV3YXJlJ1xyXG5pbXBvcnQgdHlwZSB7IEltbXV0YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZU9wdGlvbnMgfSBmcm9tICcuL2ltbXV0YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZSdcclxuLyogUFJPRF9TVEFSVF9SRU1PVkVfVU1EICovXHJcbmltcG9ydCB7IGNyZWF0ZUltbXV0YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZSB9IGZyb20gJy4vaW1tdXRhYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlJ1xyXG4vKiBQUk9EX1NUT1BfUkVNT1ZFX1VNRCAqL1xyXG5cclxuaW1wb3J0IHR5cGUgeyBTZXJpYWxpemFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmVPcHRpb25zIH0gZnJvbSAnLi9zZXJpYWxpemFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmUnXHJcbmltcG9ydCB7IGNyZWF0ZVNlcmlhbGl6YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZSB9IGZyb20gJy4vc2VyaWFsaXphYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlJ1xyXG5pbXBvcnQgdHlwZSB7IEV4Y2x1ZGVGcm9tVHVwbGUgfSBmcm9tICcuL3RzSGVscGVycydcclxuaW1wb3J0IHsgTWlkZGxld2FyZUFycmF5IH0gZnJvbSAnLi91dGlscydcclxuXHJcbmZ1bmN0aW9uIGlzQm9vbGVhbih4OiBhbnkpOiB4IGlzIGJvb2xlYW4ge1xyXG4gIHJldHVybiB0eXBlb2YgeCA9PT0gJ2Jvb2xlYW4nXHJcbn1cclxuXHJcbmludGVyZmFjZSBUaHVua09wdGlvbnM8RSA9IGFueT4ge1xyXG4gIGV4dHJhQXJndW1lbnQ6IEVcclxufVxyXG5cclxuaW50ZXJmYWNlIEdldERlZmF1bHRNaWRkbGV3YXJlT3B0aW9ucyB7XHJcbiAgdGh1bms/OiBib29sZWFuIHwgVGh1bmtPcHRpb25zXHJcbiAgaW1tdXRhYmxlQ2hlY2s/OiBib29sZWFuIHwgSW1tdXRhYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlT3B0aW9uc1xyXG4gIHNlcmlhbGl6YWJsZUNoZWNrPzogYm9vbGVhbiB8IFNlcmlhbGl6YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZU9wdGlvbnNcclxuICBhY3Rpb25DcmVhdG9yQ2hlY2s/OiBib29sZWFuIHwgQWN0aW9uQ3JlYXRvckludmFyaWFudE1pZGRsZXdhcmVPcHRpb25zXHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIFRodW5rTWlkZGxld2FyZUZvcjxcclxuICBTLFxyXG4gIE8gZXh0ZW5kcyBHZXREZWZhdWx0TWlkZGxld2FyZU9wdGlvbnMgPSB7fVxyXG4+ID0gTyBleHRlbmRzIHtcclxuICB0aHVuazogZmFsc2VcclxufVxyXG4gID8gbmV2ZXJcclxuICA6IE8gZXh0ZW5kcyB7IHRodW5rOiB7IGV4dHJhQXJndW1lbnQ6IGluZmVyIEUgfSB9XHJcbiAgPyBUaHVua01pZGRsZXdhcmU8UywgQW55QWN0aW9uLCBFPlxyXG4gIDogVGh1bmtNaWRkbGV3YXJlPFMsIEFueUFjdGlvbj5cclxuXHJcbmV4cG9ydCB0eXBlIEN1cnJpZWRHZXREZWZhdWx0TWlkZGxld2FyZTxTID0gYW55PiA9IDxcclxuICBPIGV4dGVuZHMgUGFydGlhbDxHZXREZWZhdWx0TWlkZGxld2FyZU9wdGlvbnM+ID0ge1xyXG4gICAgdGh1bms6IHRydWVcclxuICAgIGltbXV0YWJsZUNoZWNrOiB0cnVlXHJcbiAgICBzZXJpYWxpemFibGVDaGVjazogdHJ1ZVxyXG4gICAgYWN0aW9uQ3JlYXRvckNoZWNrOiB0cnVlXHJcbiAgfVxyXG4+KFxyXG4gIG9wdGlvbnM/OiBPXHJcbikgPT4gTWlkZGxld2FyZUFycmF5PEV4Y2x1ZGVGcm9tVHVwbGU8W1RodW5rTWlkZGxld2FyZUZvcjxTLCBPPl0sIG5ldmVyPj5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjdXJyeUdldERlZmF1bHRNaWRkbGV3YXJlPFxyXG4gIFMgPSBhbnlcclxuPigpOiBDdXJyaWVkR2V0RGVmYXVsdE1pZGRsZXdhcmU8Uz4ge1xyXG4gIHJldHVybiBmdW5jdGlvbiBjdXJyaWVkR2V0RGVmYXVsdE1pZGRsZXdhcmUob3B0aW9ucykge1xyXG4gICAgcmV0dXJuIGdldERlZmF1bHRNaWRkbGV3YXJlKG9wdGlvbnMpXHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogUmV0dXJucyBhbnkgYXJyYXkgY29udGFpbmluZyB0aGUgZGVmYXVsdCBtaWRkbGV3YXJlIGluc3RhbGxlZCBieVxyXG4gKiBgY29uZmlndXJlU3RvcmUoKWAuIFVzZWZ1bCBpZiB5b3Ugd2FudCB0byBjb25maWd1cmUgeW91ciBzdG9yZSB3aXRoIGEgY3VzdG9tXHJcbiAqIGBtaWRkbGV3YXJlYCBhcnJheSBidXQgc3RpbGwga2VlcCB0aGUgZGVmYXVsdCBzZXQuXHJcbiAqXHJcbiAqIEByZXR1cm4gVGhlIGRlZmF1bHQgbWlkZGxld2FyZSB1c2VkIGJ5IGBjb25maWd1cmVTdG9yZSgpYC5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKlxyXG4gKiBAZGVwcmVjYXRlZCBQcmVmZXIgdG8gdXNlIHRoZSBjYWxsYmFjayBub3RhdGlvbiBmb3IgdGhlIGBtaWRkbGV3YXJlYCBvcHRpb24gaW4gYGNvbmZpZ3VyZVN0b3JlYFxyXG4gKiB0byBhY2Nlc3MgYSBwcmUtdHlwZWQgYGdldERlZmF1bHRNaWRkbGV3YXJlYCBpbnN0ZWFkLlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRNaWRkbGV3YXJlPFxyXG4gIFMgPSBhbnksXHJcbiAgTyBleHRlbmRzIFBhcnRpYWw8R2V0RGVmYXVsdE1pZGRsZXdhcmVPcHRpb25zPiA9IHtcclxuICAgIHRodW5rOiB0cnVlXHJcbiAgICBpbW11dGFibGVDaGVjazogdHJ1ZVxyXG4gICAgc2VyaWFsaXphYmxlQ2hlY2s6IHRydWVcclxuICAgIGFjdGlvbkNyZWF0b3JDaGVjazogdHJ1ZVxyXG4gIH1cclxuPihcclxuICBvcHRpb25zOiBPID0ge30gYXMgT1xyXG4pOiBNaWRkbGV3YXJlQXJyYXk8RXhjbHVkZUZyb21UdXBsZTxbVGh1bmtNaWRkbGV3YXJlRm9yPFMsIE8+XSwgbmV2ZXI+PiB7XHJcbiAgY29uc3Qge1xyXG4gICAgdGh1bmsgPSB0cnVlLFxyXG4gICAgaW1tdXRhYmxlQ2hlY2sgPSB0cnVlLFxyXG4gICAgc2VyaWFsaXphYmxlQ2hlY2sgPSB0cnVlLFxyXG4gICAgYWN0aW9uQ3JlYXRvckNoZWNrID0gdHJ1ZSxcclxuICB9ID0gb3B0aW9uc1xyXG5cclxuICBsZXQgbWlkZGxld2FyZUFycmF5ID0gbmV3IE1pZGRsZXdhcmVBcnJheTxNaWRkbGV3YXJlW10+KClcclxuXHJcbiAgaWYgKHRodW5rKSB7XHJcbiAgICBpZiAoaXNCb29sZWFuKHRodW5rKSkge1xyXG4gICAgICBtaWRkbGV3YXJlQXJyYXkucHVzaCh0aHVua01pZGRsZXdhcmUpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBtaWRkbGV3YXJlQXJyYXkucHVzaChcclxuICAgICAgICB0aHVua01pZGRsZXdhcmUud2l0aEV4dHJhQXJndW1lbnQodGh1bmsuZXh0cmFBcmd1bWVudClcclxuICAgICAgKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcclxuICAgIGlmIChpbW11dGFibGVDaGVjaykge1xyXG4gICAgICAvKiBQUk9EX1NUQVJUX1JFTU9WRV9VTUQgKi9cclxuICAgICAgbGV0IGltbXV0YWJsZU9wdGlvbnM6IEltbXV0YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZU9wdGlvbnMgPSB7fVxyXG5cclxuICAgICAgaWYgKCFpc0Jvb2xlYW4oaW1tdXRhYmxlQ2hlY2spKSB7XHJcbiAgICAgICAgaW1tdXRhYmxlT3B0aW9ucyA9IGltbXV0YWJsZUNoZWNrXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIG1pZGRsZXdhcmVBcnJheS51bnNoaWZ0KFxyXG4gICAgICAgIGNyZWF0ZUltbXV0YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZShpbW11dGFibGVPcHRpb25zKVxyXG4gICAgICApXHJcbiAgICAgIC8qIFBST0RfU1RPUF9SRU1PVkVfVU1EICovXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHNlcmlhbGl6YWJsZUNoZWNrKSB7XHJcbiAgICAgIGxldCBzZXJpYWxpemFibGVPcHRpb25zOiBTZXJpYWxpemFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmVPcHRpb25zID0ge31cclxuXHJcbiAgICAgIGlmICghaXNCb29sZWFuKHNlcmlhbGl6YWJsZUNoZWNrKSkge1xyXG4gICAgICAgIHNlcmlhbGl6YWJsZU9wdGlvbnMgPSBzZXJpYWxpemFibGVDaGVja1xyXG4gICAgICB9XHJcblxyXG4gICAgICBtaWRkbGV3YXJlQXJyYXkucHVzaChcclxuICAgICAgICBjcmVhdGVTZXJpYWxpemFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmUoc2VyaWFsaXphYmxlT3B0aW9ucylcclxuICAgICAgKVxyXG4gICAgfVxyXG4gICAgaWYgKGFjdGlvbkNyZWF0b3JDaGVjaykge1xyXG4gICAgICBsZXQgYWN0aW9uQ3JlYXRvck9wdGlvbnM6IEFjdGlvbkNyZWF0b3JJbnZhcmlhbnRNaWRkbGV3YXJlT3B0aW9ucyA9IHt9XHJcblxyXG4gICAgICBpZiAoIWlzQm9vbGVhbihhY3Rpb25DcmVhdG9yQ2hlY2spKSB7XHJcbiAgICAgICAgYWN0aW9uQ3JlYXRvck9wdGlvbnMgPSBhY3Rpb25DcmVhdG9yQ2hlY2tcclxuICAgICAgfVxyXG5cclxuICAgICAgbWlkZGxld2FyZUFycmF5LnVuc2hpZnQoXHJcbiAgICAgICAgY3JlYXRlQWN0aW9uQ3JlYXRvckludmFyaWFudE1pZGRsZXdhcmUoYWN0aW9uQ3JlYXRvck9wdGlvbnMpXHJcbiAgICAgIClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybiBtaWRkbGV3YXJlQXJyYXkgYXMgYW55XHJcbn1cclxuIiwgImltcG9ydCB0eXBlIHsgTWlkZGxld2FyZSwgU3RvcmVFbmhhbmNlciB9IGZyb20gJ3JlZHV4J1xyXG5pbXBvcnQgdHlwZSB7IEVuaGFuY2VyQXJyYXksIE1pZGRsZXdhcmVBcnJheSB9IGZyb20gJy4vdXRpbHMnXHJcblxyXG4vKipcclxuICogcmV0dXJuIFRydWUgaWYgVCBpcyBgYW55YCwgb3RoZXJ3aXNlIHJldHVybiBGYWxzZVxyXG4gKiB0YWtlbiBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9qb29uaG9jaG8vdHNkZWZcclxuICpcclxuICogQGludGVybmFsXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBJc0FueTxULCBUcnVlLCBGYWxzZSA9IG5ldmVyPiA9XHJcbiAgLy8gdGVzdCBpZiB3ZSBhcmUgZ29pbmcgdGhlIGxlZnQgQU5EIHJpZ2h0IHBhdGggaW4gdGhlIGNvbmRpdGlvblxyXG4gIHRydWUgfCBmYWxzZSBleHRlbmRzIChUIGV4dGVuZHMgbmV2ZXIgPyB0cnVlIDogZmFsc2UpID8gVHJ1ZSA6IEZhbHNlXHJcblxyXG4vKipcclxuICogcmV0dXJuIFRydWUgaWYgVCBpcyBgdW5rbm93bmAsIG90aGVyd2lzZSByZXR1cm4gRmFsc2VcclxuICogdGFrZW4gZnJvbSBodHRwczovL2dpdGh1Yi5jb20vam9vbmhvY2hvL3RzZGVmXHJcbiAqXHJcbiAqIEBpbnRlcm5hbFxyXG4gKi9cclxuZXhwb3J0IHR5cGUgSXNVbmtub3duPFQsIFRydWUsIEZhbHNlID0gbmV2ZXI+ID0gdW5rbm93biBleHRlbmRzIFRcclxuICA/IElzQW55PFQsIEZhbHNlLCBUcnVlPlxyXG4gIDogRmFsc2VcclxuXHJcbmV4cG9ydCB0eXBlIEZhbGxiYWNrSWZVbmtub3duPFQsIEZhbGxiYWNrPiA9IElzVW5rbm93bjxULCBGYWxsYmFjaywgVD5cclxuXHJcbi8qKlxyXG4gKiBAaW50ZXJuYWxcclxuICovXHJcbmV4cG9ydCB0eXBlIElmTWF5YmVVbmRlZmluZWQ8UCwgVHJ1ZSwgRmFsc2U+ID0gW3VuZGVmaW5lZF0gZXh0ZW5kcyBbUF1cclxuICA/IFRydWVcclxuICA6IEZhbHNlXHJcblxyXG4vKipcclxuICogQGludGVybmFsXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBJZlZvaWQ8UCwgVHJ1ZSwgRmFsc2U+ID0gW3ZvaWRdIGV4dGVuZHMgW1BdID8gVHJ1ZSA6IEZhbHNlXHJcblxyXG4vKipcclxuICogQGludGVybmFsXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBJc0VtcHR5T2JqPFQsIFRydWUsIEZhbHNlID0gbmV2ZXI+ID0gVCBleHRlbmRzIGFueVxyXG4gID8ga2V5b2YgVCBleHRlbmRzIG5ldmVyXHJcbiAgICA/IElzVW5rbm93bjxULCBGYWxzZSwgSWZNYXliZVVuZGVmaW5lZDxULCBGYWxzZSwgSWZWb2lkPFQsIEZhbHNlLCBUcnVlPj4+XHJcbiAgICA6IEZhbHNlXHJcbiAgOiBuZXZlclxyXG5cclxuLyoqXHJcbiAqIHJldHVybnMgVHJ1ZSBpZiBUUyB2ZXJzaW9uIGlzIGFib3ZlIDMuNSwgRmFsc2UgaWYgYmVsb3cuXHJcbiAqIHVzZXMgZmVhdHVyZSBkZXRlY3Rpb24gdG8gZGV0ZWN0IFRTIHZlcnNpb24gPj0gMy41XHJcbiAqICogdmVyc2lvbnMgYmVsb3cgMy41IHdpbGwgcmV0dXJuIGB7fWAgZm9yIHVucmVzb2x2YWJsZSBpbnRlcmZlcmVuY2VcclxuICogKiB2ZXJzaW9ucyBhYm92ZSB3aWxsIHJldHVybiBgdW5rbm93bmBcclxuICpcclxuICogQGludGVybmFsXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBBdExlYXN0VFMzNTxUcnVlLCBGYWxzZT4gPSBbVHJ1ZSwgRmFsc2VdW0lzVW5rbm93bjxcclxuICBSZXR1cm5UeXBlPDxUPigpID0+IFQ+LFxyXG4gIDAsXHJcbiAgMVxyXG4+XVxyXG5cclxuLyoqXHJcbiAqIEBpbnRlcm5hbFxyXG4gKi9cclxuZXhwb3J0IHR5cGUgSXNVbmtub3duT3JOb25JbmZlcnJhYmxlPFQsIFRydWUsIEZhbHNlPiA9IEF0TGVhc3RUUzM1PFxyXG4gIElzVW5rbm93bjxULCBUcnVlLCBGYWxzZT4sXHJcbiAgSXNFbXB0eU9iajxULCBUcnVlLCBJc1Vua25vd248VCwgVHJ1ZSwgRmFsc2U+PlxyXG4+XHJcblxyXG4vKipcclxuICogQ29udmVydCBhIFVuaW9uIHR5cGUgYChBfEIpYCB0byBhbiBpbnRlcnNlY3Rpb24gdHlwZSBgKEEmQilgXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBVbmlvblRvSW50ZXJzZWN0aW9uPFU+ID0gKFxyXG4gIFUgZXh0ZW5kcyBhbnkgPyAoazogVSkgPT4gdm9pZCA6IG5ldmVyXHJcbikgZXh0ZW5kcyAoazogaW5mZXIgSSkgPT4gdm9pZFxyXG4gID8gSVxyXG4gIDogbmV2ZXJcclxuXHJcbi8vIEFwcGVhcnMgdG8gaGF2ZSBhIGNvbnZlbmllbnQgc2lkZSBlZmZlY3Qgb2YgaWdub3JpbmcgYG5ldmVyYCBldmVuIGlmIHRoYXQncyBub3Qgd2hhdCB5b3Ugc3BlY2lmaWVkXHJcbmV4cG9ydCB0eXBlIEV4Y2x1ZGVGcm9tVHVwbGU8VCwgRSwgQWNjIGV4dGVuZHMgdW5rbm93bltdID0gW10+ID0gVCBleHRlbmRzIFtcclxuICBpbmZlciBIZWFkLFxyXG4gIC4uLmluZmVyIFRhaWxcclxuXVxyXG4gID8gRXhjbHVkZUZyb21UdXBsZTxUYWlsLCBFLCBbLi4uQWNjLCAuLi4oW0hlYWRdIGV4dGVuZHMgW0VdID8gW10gOiBbSGVhZF0pXT5cclxuICA6IEFjY1xyXG5cclxudHlwZSBFeHRyYWN0RGlzcGF0Y2hGcm9tTWlkZGxld2FyZVR1cGxlPFxyXG4gIE1pZGRsZXdhcmVUdXBsZSBleHRlbmRzIGFueVtdLFxyXG4gIEFjYyBleHRlbmRzIHt9XHJcbj4gPSBNaWRkbGV3YXJlVHVwbGUgZXh0ZW5kcyBbaW5mZXIgSGVhZCwgLi4uaW5mZXIgVGFpbF1cclxuICA/IEV4dHJhY3REaXNwYXRjaEZyb21NaWRkbGV3YXJlVHVwbGU8XHJcbiAgICAgIFRhaWwsXHJcbiAgICAgIEFjYyAmIChIZWFkIGV4dGVuZHMgTWlkZGxld2FyZTxpbmZlciBEPiA/IElzQW55PEQsIHt9LCBEPiA6IHt9KVxyXG4gICAgPlxyXG4gIDogQWNjXHJcblxyXG5leHBvcnQgdHlwZSBFeHRyYWN0RGlzcGF0Y2hFeHRlbnNpb25zPE0+ID0gTSBleHRlbmRzIE1pZGRsZXdhcmVBcnJheTxcclxuICBpbmZlciBNaWRkbGV3YXJlVHVwbGVcclxuPlxyXG4gID8gRXh0cmFjdERpc3BhdGNoRnJvbU1pZGRsZXdhcmVUdXBsZTxNaWRkbGV3YXJlVHVwbGUsIHt9PlxyXG4gIDogTSBleHRlbmRzIFJlYWRvbmx5QXJyYXk8TWlkZGxld2FyZT5cclxuICA/IEV4dHJhY3REaXNwYXRjaEZyb21NaWRkbGV3YXJlVHVwbGU8Wy4uLk1dLCB7fT5cclxuICA6IG5ldmVyXHJcblxyXG50eXBlIEV4dHJhY3RTdG9yZUV4dGVuc2lvbnNGcm9tRW5oYW5jZXJUdXBsZTxcclxuICBFbmhhbmNlclR1cGxlIGV4dGVuZHMgYW55W10sXHJcbiAgQWNjIGV4dGVuZHMge31cclxuPiA9IEVuaGFuY2VyVHVwbGUgZXh0ZW5kcyBbaW5mZXIgSGVhZCwgLi4uaW5mZXIgVGFpbF1cclxuICA/IEV4dHJhY3RTdG9yZUV4dGVuc2lvbnNGcm9tRW5oYW5jZXJUdXBsZTxcclxuICAgICAgVGFpbCxcclxuICAgICAgQWNjICYgKEhlYWQgZXh0ZW5kcyBTdG9yZUVuaGFuY2VyPGluZmVyIEV4dD4gPyBJc0FueTxFeHQsIHt9LCBFeHQ+IDoge30pXHJcbiAgICA+XHJcbiAgOiBBY2NcclxuXHJcbmV4cG9ydCB0eXBlIEV4dHJhY3RTdG9yZUV4dGVuc2lvbnM8RT4gPSBFIGV4dGVuZHMgRW5oYW5jZXJBcnJheTxcclxuICBpbmZlciBFbmhhbmNlclR1cGxlXHJcbj5cclxuICA/IEV4dHJhY3RTdG9yZUV4dGVuc2lvbnNGcm9tRW5oYW5jZXJUdXBsZTxFbmhhbmNlclR1cGxlLCB7fT5cclxuICA6IEUgZXh0ZW5kcyBSZWFkb25seUFycmF5PFN0b3JlRW5oYW5jZXI+XHJcbiAgPyBVbmlvblRvSW50ZXJzZWN0aW9uPFxyXG4gICAgICBFW251bWJlcl0gZXh0ZW5kcyBTdG9yZUVuaGFuY2VyPGluZmVyIEV4dD5cclxuICAgICAgICA/IEV4dCBleHRlbmRzIHt9XHJcbiAgICAgICAgICA/IElzQW55PEV4dCwge30sIEV4dD5cclxuICAgICAgICAgIDoge31cclxuICAgICAgICA6IHt9XHJcbiAgICA+XHJcbiAgOiBuZXZlclxyXG5cclxudHlwZSBFeHRyYWN0U3RhdGVFeHRlbnNpb25zRnJvbUVuaGFuY2VyVHVwbGU8XHJcbiAgRW5oYW5jZXJUdXBsZSBleHRlbmRzIGFueVtdLFxyXG4gIEFjYyBleHRlbmRzIHt9XHJcbj4gPSBFbmhhbmNlclR1cGxlIGV4dGVuZHMgW2luZmVyIEhlYWQsIC4uLmluZmVyIFRhaWxdXHJcbiAgPyBFeHRyYWN0U3RhdGVFeHRlbnNpb25zRnJvbUVuaGFuY2VyVHVwbGU8XHJcbiAgICAgIFRhaWwsXHJcbiAgICAgIEFjYyAmXHJcbiAgICAgICAgKEhlYWQgZXh0ZW5kcyBTdG9yZUVuaGFuY2VyPGFueSwgaW5mZXIgU3RhdGVFeHQ+XHJcbiAgICAgICAgICA/IElzQW55PFN0YXRlRXh0LCB7fSwgU3RhdGVFeHQ+XHJcbiAgICAgICAgICA6IHt9KVxyXG4gICAgPlxyXG4gIDogQWNjXHJcblxyXG5leHBvcnQgdHlwZSBFeHRyYWN0U3RhdGVFeHRlbnNpb25zPEU+ID0gRSBleHRlbmRzIEVuaGFuY2VyQXJyYXk8XHJcbiAgaW5mZXIgRW5oYW5jZXJUdXBsZVxyXG4+XHJcbiAgPyBFeHRyYWN0U3RhdGVFeHRlbnNpb25zRnJvbUVuaGFuY2VyVHVwbGU8RW5oYW5jZXJUdXBsZSwge30+XHJcbiAgOiBFIGV4dGVuZHMgUmVhZG9ubHlBcnJheTxTdG9yZUVuaGFuY2VyPlxyXG4gID8gVW5pb25Ub0ludGVyc2VjdGlvbjxcclxuICAgICAgRVtudW1iZXJdIGV4dGVuZHMgU3RvcmVFbmhhbmNlcjxhbnksIGluZmVyIFN0YXRlRXh0PlxyXG4gICAgICAgID8gU3RhdGVFeHQgZXh0ZW5kcyB7fVxyXG4gICAgICAgICAgPyBJc0FueTxTdGF0ZUV4dCwge30sIFN0YXRlRXh0PlxyXG4gICAgICAgICAgOiB7fVxyXG4gICAgICAgIDoge31cclxuICAgID5cclxuICA6IG5ldmVyXHJcblxyXG4vKipcclxuICogSGVscGVyIHR5cGUuIFBhc3NlcyBUIG91dCBhZ2FpbiwgYnV0IGJveGVzIGl0IGluIGEgd2F5IHRoYXQgaXQgY2Fubm90XHJcbiAqIFwid2lkZW5cIiB0aGUgdHlwZSBieSBhY2NpZGVudCBpZiBpdCBpcyBhIGdlbmVyaWMgdGhhdCBzaG91bGQgYmUgaW5mZXJyZWRcclxuICogZnJvbSBlbHNld2hlcmUuXHJcbiAqXHJcbiAqIEBpbnRlcm5hbFxyXG4gKi9cclxuZXhwb3J0IHR5cGUgTm9JbmZlcjxUPiA9IFtUXVtUIGV4dGVuZHMgYW55ID8gMCA6IG5ldmVyXVxyXG5cclxuZXhwb3J0IHR5cGUgT21pdDxULCBLIGV4dGVuZHMga2V5b2YgYW55PiA9IFBpY2s8VCwgRXhjbHVkZTxrZXlvZiBULCBLPj5cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgVHlwZUd1YXJkPFQ+IHtcclxuICAodmFsdWU6IGFueSk6IHZhbHVlIGlzIFRcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBIYXNNYXRjaEZ1bmN0aW9uPFQ+IHtcclxuICBtYXRjaDogVHlwZUd1YXJkPFQ+XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBoYXNNYXRjaEZ1bmN0aW9uID0gPFQ+KFxyXG4gIHY6IE1hdGNoZXI8VD5cclxuKTogdiBpcyBIYXNNYXRjaEZ1bmN0aW9uPFQ+ID0+IHtcclxuICByZXR1cm4gdiAmJiB0eXBlb2YgKHYgYXMgSGFzTWF0Y2hGdW5jdGlvbjxUPikubWF0Y2ggPT09ICdmdW5jdGlvbidcclxufVxyXG5cclxuLyoqIEBwdWJsaWMgKi9cclxuZXhwb3J0IHR5cGUgTWF0Y2hlcjxUPiA9IEhhc01hdGNoRnVuY3Rpb248VD4gfCBUeXBlR3VhcmQ8VD5cclxuXHJcbi8qKiBAcHVibGljICovXHJcbmV4cG9ydCB0eXBlIEFjdGlvbkZyb21NYXRjaGVyPE0gZXh0ZW5kcyBNYXRjaGVyPGFueT4+ID0gTSBleHRlbmRzIE1hdGNoZXI8XHJcbiAgaW5mZXIgVFxyXG4+XHJcbiAgPyBUXHJcbiAgOiBuZXZlclxyXG5cclxuZXhwb3J0IHR5cGUgSWQ8VD4gPSB7IFtLIGluIGtleW9mIFRdOiBUW0tdIH0gJiB7fVxyXG4iLCAiaW1wb3J0IHR5cGUgeyBBY3Rpb24gfSBmcm9tICdyZWR1eCdcclxuaW1wb3J0IHR5cGUge1xyXG4gIElzVW5rbm93bk9yTm9uSW5mZXJyYWJsZSxcclxuICBJZk1heWJlVW5kZWZpbmVkLFxyXG4gIElmVm9pZCxcclxuICBJc0FueSxcclxufSBmcm9tICcuL3RzSGVscGVycydcclxuaW1wb3J0IHsgaGFzTWF0Y2hGdW5jdGlvbiB9IGZyb20gJy4vdHNIZWxwZXJzJ1xyXG5pbXBvcnQgaXNQbGFpbk9iamVjdCBmcm9tICcuL2lzUGxhaW5PYmplY3QnXHJcblxyXG4vKipcclxuICogQW4gYWN0aW9uIHdpdGggYSBzdHJpbmcgdHlwZSBhbmQgYW4gYXNzb2NpYXRlZCBwYXlsb2FkLiBUaGlzIGlzIHRoZVxyXG4gKiB0eXBlIG9mIGFjdGlvbiByZXR1cm5lZCBieSBgY3JlYXRlQWN0aW9uKClgIGFjdGlvbiBjcmVhdG9ycy5cclxuICpcclxuICogQHRlbXBsYXRlIFAgVGhlIHR5cGUgb2YgdGhlIGFjdGlvbidzIHBheWxvYWQuXHJcbiAqIEB0ZW1wbGF0ZSBUIHRoZSB0eXBlIHVzZWQgZm9yIHRoZSBhY3Rpb24gdHlwZS5cclxuICogQHRlbXBsYXRlIE0gVGhlIHR5cGUgb2YgdGhlIGFjdGlvbidzIG1ldGEgKG9wdGlvbmFsKVxyXG4gKiBAdGVtcGxhdGUgRSBUaGUgdHlwZSBvZiB0aGUgYWN0aW9uJ3MgZXJyb3IgKG9wdGlvbmFsKVxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBQYXlsb2FkQWN0aW9uPFxyXG4gIFAgPSB2b2lkLFxyXG4gIFQgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsXHJcbiAgTSA9IG5ldmVyLFxyXG4gIEUgPSBuZXZlclxyXG4+ID0ge1xyXG4gIHBheWxvYWQ6IFBcclxuICB0eXBlOiBUXHJcbn0gJiAoW01dIGV4dGVuZHMgW25ldmVyXVxyXG4gID8ge31cclxuICA6IHtcclxuICAgICAgbWV0YTogTVxyXG4gICAgfSkgJlxyXG4gIChbRV0gZXh0ZW5kcyBbbmV2ZXJdXHJcbiAgICA/IHt9XHJcbiAgICA6IHtcclxuICAgICAgICBlcnJvcjogRVxyXG4gICAgICB9KVxyXG5cclxuLyoqXHJcbiAqIEEgXCJwcmVwYXJlXCIgbWV0aG9kIHRvIGJlIHVzZWQgYXMgdGhlIHNlY29uZCBwYXJhbWV0ZXIgb2YgYGNyZWF0ZUFjdGlvbmAuXHJcbiAqIFRha2VzIGFueSBudW1iZXIgb2YgYXJndW1lbnRzIGFuZCByZXR1cm5zIGEgRmx1eCBTdGFuZGFyZCBBY3Rpb24gd2l0aG91dFxyXG4gKiB0eXBlICh3aWxsIGJlIGFkZGVkIGxhdGVyKSB0aGF0ICptdXN0KiBjb250YWluIGEgcGF5bG9hZCAobWlnaHQgYmUgdW5kZWZpbmVkKS5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IHR5cGUgUHJlcGFyZUFjdGlvbjxQPiA9XHJcbiAgfCAoKC4uLmFyZ3M6IGFueVtdKSA9PiB7IHBheWxvYWQ6IFAgfSlcclxuICB8ICgoLi4uYXJnczogYW55W10pID0+IHsgcGF5bG9hZDogUDsgbWV0YTogYW55IH0pXHJcbiAgfCAoKC4uLmFyZ3M6IGFueVtdKSA9PiB7IHBheWxvYWQ6IFA7IGVycm9yOiBhbnkgfSlcclxuICB8ICgoLi4uYXJnczogYW55W10pID0+IHsgcGF5bG9hZDogUDsgbWV0YTogYW55OyBlcnJvcjogYW55IH0pXHJcblxyXG4vKipcclxuICogSW50ZXJuYWwgdmVyc2lvbiBvZiBgQWN0aW9uQ3JlYXRvcldpdGhQcmVwYXJlZFBheWxvYWRgLiBOb3QgdG8gYmUgdXNlZCBleHRlcm5hbGx5LlxyXG4gKlxyXG4gKiBAaW50ZXJuYWxcclxuICovXHJcbmV4cG9ydCB0eXBlIF9BY3Rpb25DcmVhdG9yV2l0aFByZXBhcmVkUGF5bG9hZDxcclxuICBQQSBleHRlbmRzIFByZXBhcmVBY3Rpb248YW55PiB8IHZvaWQsXHJcbiAgVCBleHRlbmRzIHN0cmluZyA9IHN0cmluZ1xyXG4+ID0gUEEgZXh0ZW5kcyBQcmVwYXJlQWN0aW9uPGluZmVyIFA+XHJcbiAgPyBBY3Rpb25DcmVhdG9yV2l0aFByZXBhcmVkUGF5bG9hZDxcclxuICAgICAgUGFyYW1ldGVyczxQQT4sXHJcbiAgICAgIFAsXHJcbiAgICAgIFQsXHJcbiAgICAgIFJldHVyblR5cGU8UEE+IGV4dGVuZHMge1xyXG4gICAgICAgIGVycm9yOiBpbmZlciBFXHJcbiAgICAgIH1cclxuICAgICAgICA/IEVcclxuICAgICAgICA6IG5ldmVyLFxyXG4gICAgICBSZXR1cm5UeXBlPFBBPiBleHRlbmRzIHtcclxuICAgICAgICBtZXRhOiBpbmZlciBNXHJcbiAgICAgIH1cclxuICAgICAgICA/IE1cclxuICAgICAgICA6IG5ldmVyXHJcbiAgICA+XHJcbiAgOiB2b2lkXHJcblxyXG4vKipcclxuICogQmFzaWMgdHlwZSBmb3IgYWxsIGFjdGlvbiBjcmVhdG9ycy5cclxuICpcclxuICogQGluaGVyaXRkb2Mge3JlZHV4I0FjdGlvbkNyZWF0b3J9XHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VBY3Rpb25DcmVhdG9yPFAsIFQgZXh0ZW5kcyBzdHJpbmcsIE0gPSBuZXZlciwgRSA9IG5ldmVyPiB7XHJcbiAgdHlwZTogVFxyXG4gIG1hdGNoOiAoYWN0aW9uOiBBY3Rpb248dW5rbm93bj4pID0+IGFjdGlvbiBpcyBQYXlsb2FkQWN0aW9uPFAsIFQsIE0sIEU+XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBbiBhY3Rpb24gY3JlYXRvciB0aGF0IHRha2VzIG11bHRpcGxlIGFyZ3VtZW50cyB0aGF0IGFyZSBwYXNzZWRcclxuICogdG8gYSBgUHJlcGFyZUFjdGlvbmAgbWV0aG9kIHRvIGNyZWF0ZSB0aGUgZmluYWwgQWN0aW9uLlxyXG4gKiBAdHlwZVBhcmFtIEFyZ3MgYXJndW1lbnRzIGZvciB0aGUgYWN0aW9uIGNyZWF0b3IgZnVuY3Rpb25cclxuICogQHR5cGVQYXJhbSBQIGBwYXlsb2FkYCB0eXBlXHJcbiAqIEB0eXBlUGFyYW0gVCBgdHlwZWAgbmFtZVxyXG4gKiBAdHlwZVBhcmFtIEUgb3B0aW9uYWwgYGVycm9yYCB0eXBlXHJcbiAqIEB0eXBlUGFyYW0gTSBvcHRpb25hbCBgbWV0YWAgdHlwZVxyXG4gKlxyXG4gKiBAaW5oZXJpdGRvYyB7cmVkdXgjQWN0aW9uQ3JlYXRvcn1cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBBY3Rpb25DcmVhdG9yV2l0aFByZXBhcmVkUGF5bG9hZDxcclxuICBBcmdzIGV4dGVuZHMgdW5rbm93bltdLFxyXG4gIFAsXHJcbiAgVCBleHRlbmRzIHN0cmluZyA9IHN0cmluZyxcclxuICBFID0gbmV2ZXIsXHJcbiAgTSA9IG5ldmVyXHJcbj4gZXh0ZW5kcyBCYXNlQWN0aW9uQ3JlYXRvcjxQLCBULCBNLCBFPiB7XHJcbiAgLyoqXHJcbiAgICogQ2FsbGluZyB0aGlzIHtAbGluayByZWR1eCNBY3Rpb25DcmVhdG9yfSB3aXRoIGBBcmdzYCB3aWxsIHJldHVyblxyXG4gICAqIGFuIEFjdGlvbiB3aXRoIGEgcGF5bG9hZCBvZiB0eXBlIGBQYCBhbmQgKGRlcGVuZGluZyBvbiB0aGUgYFByZXBhcmVBY3Rpb25gXHJcbiAgICogbWV0aG9kIHVzZWQpIGEgYG1ldGFgLSBhbmQgYGVycm9yYCBwcm9wZXJ0eSBvZiB0eXBlcyBgTWAgYW5kIGBFYCByZXNwZWN0aXZlbHkuXHJcbiAgICovXHJcbiAgKC4uLmFyZ3M6IEFyZ3MpOiBQYXlsb2FkQWN0aW9uPFAsIFQsIE0sIEU+XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBbiBhY3Rpb24gY3JlYXRvciBvZiB0eXBlIGBUYCB0aGF0IHRha2VzIGFuIG9wdGlvbmFsIHBheWxvYWQgb2YgdHlwZSBgUGAuXHJcbiAqXHJcbiAqIEBpbmhlcml0ZG9jIHtyZWR1eCNBY3Rpb25DcmVhdG9yfVxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIEFjdGlvbkNyZWF0b3JXaXRoT3B0aW9uYWxQYXlsb2FkPFAsIFQgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmc+XHJcbiAgZXh0ZW5kcyBCYXNlQWN0aW9uQ3JlYXRvcjxQLCBUPiB7XHJcbiAgLyoqXHJcbiAgICogQ2FsbGluZyB0aGlzIHtAbGluayByZWR1eCNBY3Rpb25DcmVhdG9yfSB3aXRoIGFuIGFyZ3VtZW50IHdpbGxcclxuICAgKiByZXR1cm4gYSB7QGxpbmsgUGF5bG9hZEFjdGlvbn0gb2YgdHlwZSBgVGAgd2l0aCBhIHBheWxvYWQgb2YgYFBgLlxyXG4gICAqIENhbGxpbmcgaXQgd2l0aG91dCBhbiBhcmd1bWVudCB3aWxsIHJldHVybiBhIFBheWxvYWRBY3Rpb24gd2l0aCBhIHBheWxvYWQgb2YgYHVuZGVmaW5lZGAuXHJcbiAgICovXHJcbiAgKHBheWxvYWQ/OiBQKTogUGF5bG9hZEFjdGlvbjxQLCBUPlxyXG59XHJcblxyXG4vKipcclxuICogQW4gYWN0aW9uIGNyZWF0b3Igb2YgdHlwZSBgVGAgdGhhdCB0YWtlcyBubyBwYXlsb2FkLlxyXG4gKlxyXG4gKiBAaW5oZXJpdGRvYyB7cmVkdXgjQWN0aW9uQ3JlYXRvcn1cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBBY3Rpb25DcmVhdG9yV2l0aG91dFBheWxvYWQ8VCBleHRlbmRzIHN0cmluZyA9IHN0cmluZz5cclxuICBleHRlbmRzIEJhc2VBY3Rpb25DcmVhdG9yPHVuZGVmaW5lZCwgVD4ge1xyXG4gIC8qKlxyXG4gICAqIENhbGxpbmcgdGhpcyB7QGxpbmsgcmVkdXgjQWN0aW9uQ3JlYXRvcn0gd2lsbFxyXG4gICAqIHJldHVybiBhIHtAbGluayBQYXlsb2FkQWN0aW9ufSBvZiB0eXBlIGBUYCB3aXRoIGEgcGF5bG9hZCBvZiBgdW5kZWZpbmVkYFxyXG4gICAqL1xyXG4gIChub0FyZ3VtZW50OiB2b2lkKTogUGF5bG9hZEFjdGlvbjx1bmRlZmluZWQsIFQ+XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBbiBhY3Rpb24gY3JlYXRvciBvZiB0eXBlIGBUYCB0aGF0IHJlcXVpcmVzIGEgcGF5bG9hZCBvZiB0eXBlIFAuXHJcbiAqXHJcbiAqIEBpbmhlcml0ZG9jIHtyZWR1eCNBY3Rpb25DcmVhdG9yfVxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIEFjdGlvbkNyZWF0b3JXaXRoUGF5bG9hZDxQLCBUIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPlxyXG4gIGV4dGVuZHMgQmFzZUFjdGlvbkNyZWF0b3I8UCwgVD4ge1xyXG4gIC8qKlxyXG4gICAqIENhbGxpbmcgdGhpcyB7QGxpbmsgcmVkdXgjQWN0aW9uQ3JlYXRvcn0gd2l0aCBhbiBhcmd1bWVudCB3aWxsXHJcbiAgICogcmV0dXJuIGEge0BsaW5rIFBheWxvYWRBY3Rpb259IG9mIHR5cGUgYFRgIHdpdGggYSBwYXlsb2FkIG9mIGBQYFxyXG4gICAqL1xyXG4gIChwYXlsb2FkOiBQKTogUGF5bG9hZEFjdGlvbjxQLCBUPlxyXG59XHJcblxyXG4vKipcclxuICogQW4gYWN0aW9uIGNyZWF0b3Igb2YgdHlwZSBgVGAgd2hvc2UgYHBheWxvYWRgIHR5cGUgY291bGQgbm90IGJlIGluZmVycmVkLiBBY2NlcHRzIGV2ZXJ5dGhpbmcgYXMgYHBheWxvYWRgLlxyXG4gKlxyXG4gKiBAaW5oZXJpdGRvYyB7cmVkdXgjQWN0aW9uQ3JlYXRvcn1cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBBY3Rpb25DcmVhdG9yV2l0aE5vbkluZmVycmFibGVQYXlsb2FkPFxyXG4gIFQgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmdcclxuPiBleHRlbmRzIEJhc2VBY3Rpb25DcmVhdG9yPHVua25vd24sIFQ+IHtcclxuICAvKipcclxuICAgKiBDYWxsaW5nIHRoaXMge0BsaW5rIHJlZHV4I0FjdGlvbkNyZWF0b3J9IHdpdGggYW4gYXJndW1lbnQgd2lsbFxyXG4gICAqIHJldHVybiBhIHtAbGluayBQYXlsb2FkQWN0aW9ufSBvZiB0eXBlIGBUYCB3aXRoIGEgcGF5bG9hZFxyXG4gICAqIG9mIGV4YWN0bHkgdGhlIHR5cGUgb2YgdGhlIGFyZ3VtZW50LlxyXG4gICAqL1xyXG4gIDxQVCBleHRlbmRzIHVua25vd24+KHBheWxvYWQ6IFBUKTogUGF5bG9hZEFjdGlvbjxQVCwgVD5cclxufVxyXG5cclxuLyoqXHJcbiAqIEFuIGFjdGlvbiBjcmVhdG9yIHRoYXQgcHJvZHVjZXMgYWN0aW9ucyB3aXRoIGEgYHBheWxvYWRgIGF0dHJpYnV0ZS5cclxuICpcclxuICogQHR5cGVQYXJhbSBQIHRoZSBgcGF5bG9hZGAgdHlwZVxyXG4gKiBAdHlwZVBhcmFtIFQgdGhlIGB0eXBlYCBvZiB0aGUgcmVzdWx0aW5nIGFjdGlvblxyXG4gKiBAdHlwZVBhcmFtIFBBIGlmIHRoZSByZXN1bHRpbmcgYWN0aW9uIGlzIHByZXByb2Nlc3NlZCBieSBhIGBwcmVwYXJlYCBtZXRob2QsIHRoZSBzaWduYXR1cmUgb2Ygc2FpZCBtZXRob2QuXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCB0eXBlIFBheWxvYWRBY3Rpb25DcmVhdG9yPFxyXG4gIFAgPSB2b2lkLFxyXG4gIFQgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsXHJcbiAgUEEgZXh0ZW5kcyBQcmVwYXJlQWN0aW9uPFA+IHwgdm9pZCA9IHZvaWRcclxuPiA9IElmUHJlcGFyZUFjdGlvbk1ldGhvZFByb3ZpZGVkPFxyXG4gIFBBLFxyXG4gIF9BY3Rpb25DcmVhdG9yV2l0aFByZXBhcmVkUGF5bG9hZDxQQSwgVD4sXHJcbiAgLy8gZWxzZVxyXG4gIElzQW55PFxyXG4gICAgUCxcclxuICAgIEFjdGlvbkNyZWF0b3JXaXRoUGF5bG9hZDxhbnksIFQ+LFxyXG4gICAgSXNVbmtub3duT3JOb25JbmZlcnJhYmxlPFxyXG4gICAgICBQLFxyXG4gICAgICBBY3Rpb25DcmVhdG9yV2l0aE5vbkluZmVycmFibGVQYXlsb2FkPFQ+LFxyXG4gICAgICAvLyBlbHNlXHJcbiAgICAgIElmVm9pZDxcclxuICAgICAgICBQLFxyXG4gICAgICAgIEFjdGlvbkNyZWF0b3JXaXRob3V0UGF5bG9hZDxUPixcclxuICAgICAgICAvLyBlbHNlXHJcbiAgICAgICAgSWZNYXliZVVuZGVmaW5lZDxcclxuICAgICAgICAgIFAsXHJcbiAgICAgICAgICBBY3Rpb25DcmVhdG9yV2l0aE9wdGlvbmFsUGF5bG9hZDxQLCBUPixcclxuICAgICAgICAgIC8vIGVsc2VcclxuICAgICAgICAgIEFjdGlvbkNyZWF0b3JXaXRoUGF5bG9hZDxQLCBUPlxyXG4gICAgICAgID5cclxuICAgICAgPlxyXG4gICAgPlxyXG4gID5cclxuPlxyXG5cclxuLyoqXHJcbiAqIEEgdXRpbGl0eSBmdW5jdGlvbiB0byBjcmVhdGUgYW4gYWN0aW9uIGNyZWF0b3IgZm9yIHRoZSBnaXZlbiBhY3Rpb24gdHlwZVxyXG4gKiBzdHJpbmcuIFRoZSBhY3Rpb24gY3JlYXRvciBhY2NlcHRzIGEgc2luZ2xlIGFyZ3VtZW50LCB3aGljaCB3aWxsIGJlIGluY2x1ZGVkXHJcbiAqIGluIHRoZSBhY3Rpb24gb2JqZWN0IGFzIGEgZmllbGQgY2FsbGVkIHBheWxvYWQuIFRoZSBhY3Rpb24gY3JlYXRvciBmdW5jdGlvblxyXG4gKiB3aWxsIGFsc28gaGF2ZSBpdHMgdG9TdHJpbmcoKSBvdmVycmlkZGVuIHNvIHRoYXQgaXQgcmV0dXJucyB0aGUgYWN0aW9uIHR5cGUsXHJcbiAqIGFsbG93aW5nIGl0IHRvIGJlIHVzZWQgaW4gcmVkdWNlciBsb2dpYyB0aGF0IGlzIGxvb2tpbmcgZm9yIHRoYXQgYWN0aW9uIHR5cGUuXHJcbiAqXHJcbiAqIEBwYXJhbSB0eXBlIFRoZSBhY3Rpb24gdHlwZSB0byB1c2UgZm9yIGNyZWF0ZWQgYWN0aW9ucy5cclxuICogQHBhcmFtIHByZXBhcmUgKG9wdGlvbmFsKSBhIG1ldGhvZCB0aGF0IHRha2VzIGFueSBudW1iZXIgb2YgYXJndW1lbnRzIGFuZCByZXR1cm5zIHsgcGF5bG9hZCB9IG9yIHsgcGF5bG9hZCwgbWV0YSB9LlxyXG4gKiAgICAgICAgICAgICAgICBJZiB0aGlzIGlzIGdpdmVuLCB0aGUgcmVzdWx0aW5nIGFjdGlvbiBjcmVhdG9yIHdpbGwgcGFzcyBpdHMgYXJndW1lbnRzIHRvIHRoaXMgbWV0aG9kIHRvIGNhbGN1bGF0ZSBwYXlsb2FkICYgbWV0YS5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFjdGlvbjxQID0gdm9pZCwgVCBleHRlbmRzIHN0cmluZyA9IHN0cmluZz4oXHJcbiAgdHlwZTogVFxyXG4pOiBQYXlsb2FkQWN0aW9uQ3JlYXRvcjxQLCBUPlxyXG5cclxuLyoqXHJcbiAqIEEgdXRpbGl0eSBmdW5jdGlvbiB0byBjcmVhdGUgYW4gYWN0aW9uIGNyZWF0b3IgZm9yIHRoZSBnaXZlbiBhY3Rpb24gdHlwZVxyXG4gKiBzdHJpbmcuIFRoZSBhY3Rpb24gY3JlYXRvciBhY2NlcHRzIGEgc2luZ2xlIGFyZ3VtZW50LCB3aGljaCB3aWxsIGJlIGluY2x1ZGVkXHJcbiAqIGluIHRoZSBhY3Rpb24gb2JqZWN0IGFzIGEgZmllbGQgY2FsbGVkIHBheWxvYWQuIFRoZSBhY3Rpb24gY3JlYXRvciBmdW5jdGlvblxyXG4gKiB3aWxsIGFsc28gaGF2ZSBpdHMgdG9TdHJpbmcoKSBvdmVycmlkZGVuIHNvIHRoYXQgaXQgcmV0dXJucyB0aGUgYWN0aW9uIHR5cGUsXHJcbiAqIGFsbG93aW5nIGl0IHRvIGJlIHVzZWQgaW4gcmVkdWNlciBsb2dpYyB0aGF0IGlzIGxvb2tpbmcgZm9yIHRoYXQgYWN0aW9uIHR5cGUuXHJcbiAqXHJcbiAqIEBwYXJhbSB0eXBlIFRoZSBhY3Rpb24gdHlwZSB0byB1c2UgZm9yIGNyZWF0ZWQgYWN0aW9ucy5cclxuICogQHBhcmFtIHByZXBhcmUgKG9wdGlvbmFsKSBhIG1ldGhvZCB0aGF0IHRha2VzIGFueSBudW1iZXIgb2YgYXJndW1lbnRzIGFuZCByZXR1cm5zIHsgcGF5bG9hZCB9IG9yIHsgcGF5bG9hZCwgbWV0YSB9LlxyXG4gKiAgICAgICAgICAgICAgICBJZiB0aGlzIGlzIGdpdmVuLCB0aGUgcmVzdWx0aW5nIGFjdGlvbiBjcmVhdG9yIHdpbGwgcGFzcyBpdHMgYXJndW1lbnRzIHRvIHRoaXMgbWV0aG9kIHRvIGNhbGN1bGF0ZSBwYXlsb2FkICYgbWV0YS5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFjdGlvbjxcclxuICBQQSBleHRlbmRzIFByZXBhcmVBY3Rpb248YW55PixcclxuICBUIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nXHJcbj4oXHJcbiAgdHlwZTogVCxcclxuICBwcmVwYXJlQWN0aW9uOiBQQVxyXG4pOiBQYXlsb2FkQWN0aW9uQ3JlYXRvcjxSZXR1cm5UeXBlPFBBPlsncGF5bG9hZCddLCBULCBQQT5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBY3Rpb24odHlwZTogc3RyaW5nLCBwcmVwYXJlQWN0aW9uPzogRnVuY3Rpb24pOiBhbnkge1xyXG4gIGZ1bmN0aW9uIGFjdGlvbkNyZWF0b3IoLi4uYXJnczogYW55W10pIHtcclxuICAgIGlmIChwcmVwYXJlQWN0aW9uKSB7XHJcbiAgICAgIGxldCBwcmVwYXJlZCA9IHByZXBhcmVBY3Rpb24oLi4uYXJncylcclxuICAgICAgaWYgKCFwcmVwYXJlZCkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcigncHJlcGFyZUFjdGlvbiBkaWQgbm90IHJldHVybiBhbiBvYmplY3QnKVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIHR5cGUsXHJcbiAgICAgICAgcGF5bG9hZDogcHJlcGFyZWQucGF5bG9hZCxcclxuICAgICAgICAuLi4oJ21ldGEnIGluIHByZXBhcmVkICYmIHsgbWV0YTogcHJlcGFyZWQubWV0YSB9KSxcclxuICAgICAgICAuLi4oJ2Vycm9yJyBpbiBwcmVwYXJlZCAmJiB7IGVycm9yOiBwcmVwYXJlZC5lcnJvciB9KSxcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgdHlwZSwgcGF5bG9hZDogYXJnc1swXSB9XHJcbiAgfVxyXG5cclxuICBhY3Rpb25DcmVhdG9yLnRvU3RyaW5nID0gKCkgPT4gYCR7dHlwZX1gXHJcblxyXG4gIGFjdGlvbkNyZWF0b3IudHlwZSA9IHR5cGVcclxuXHJcbiAgYWN0aW9uQ3JlYXRvci5tYXRjaCA9IChhY3Rpb246IEFjdGlvbjx1bmtub3duPik6IGFjdGlvbiBpcyBQYXlsb2FkQWN0aW9uID0+XHJcbiAgICBhY3Rpb24udHlwZSA9PT0gdHlwZVxyXG5cclxuICByZXR1cm4gYWN0aW9uQ3JlYXRvclxyXG59XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0cnVlIGlmIHZhbHVlIGlzIGEgcGxhaW4gb2JqZWN0IHdpdGggYSBgdHlwZWAgcHJvcGVydHkuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNBY3Rpb24oYWN0aW9uOiB1bmtub3duKTogYWN0aW9uIGlzIEFjdGlvbjx1bmtub3duPiB7XHJcbiAgcmV0dXJuIGlzUGxhaW5PYmplY3QoYWN0aW9uKSAmJiAndHlwZScgaW4gYWN0aW9uXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRydWUgaWYgdmFsdWUgaXMgYW4gUlRLLWxpa2UgYWN0aW9uIGNyZWF0b3IsIHdpdGggYSBzdGF0aWMgdHlwZSBwcm9wZXJ0eSBhbmQgbWF0Y2ggbWV0aG9kLlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzQWN0aW9uQ3JlYXRvcihcclxuICBhY3Rpb246IHVua25vd25cclxuKTogYWN0aW9uIGlzIEJhc2VBY3Rpb25DcmVhdG9yPHVua25vd24sIHN0cmluZz4gJiBGdW5jdGlvbiB7XHJcbiAgcmV0dXJuIChcclxuICAgIHR5cGVvZiBhY3Rpb24gPT09ICdmdW5jdGlvbicgJiZcclxuICAgICd0eXBlJyBpbiBhY3Rpb24gJiZcclxuICAgIC8vIGhhc01hdGNoRnVuY3Rpb24gb25seSB3YW50cyBNYXRjaGVycyBidXQgSSBkb24ndCBzZWUgdGhlIHBvaW50IGluIHJld3JpdGluZyBpdFxyXG4gICAgaGFzTWF0Y2hGdW5jdGlvbihhY3Rpb24gYXMgYW55KVxyXG4gIClcclxufVxyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdHJ1ZSBpZiB2YWx1ZSBpcyBhbiBhY3Rpb24gd2l0aCBhIHN0cmluZyB0eXBlIGFuZCB2YWxpZCBGbHV4IFN0YW5kYXJkIEFjdGlvbiBrZXlzLlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzRlNBKGFjdGlvbjogdW5rbm93bik6IGFjdGlvbiBpcyB7XHJcbiAgdHlwZTogc3RyaW5nXHJcbiAgcGF5bG9hZD86IHVua25vd25cclxuICBlcnJvcj86IHVua25vd25cclxuICBtZXRhPzogdW5rbm93blxyXG59IHtcclxuICByZXR1cm4gKFxyXG4gICAgaXNBY3Rpb24oYWN0aW9uKSAmJlxyXG4gICAgdHlwZW9mIGFjdGlvbi50eXBlID09PSAnc3RyaW5nJyAmJlxyXG4gICAgT2JqZWN0LmtleXMoYWN0aW9uKS5ldmVyeShpc1ZhbGlkS2V5KVxyXG4gIClcclxufVxyXG5cclxuZnVuY3Rpb24gaXNWYWxpZEtleShrZXk6IHN0cmluZykge1xyXG4gIHJldHVybiBbJ3R5cGUnLCAncGF5bG9hZCcsICdlcnJvcicsICdtZXRhJ10uaW5kZXhPZihrZXkpID4gLTFcclxufVxyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhlIGFjdGlvbiB0eXBlIG9mIHRoZSBhY3Rpb25zIGNyZWF0ZWQgYnkgdGhlIHBhc3NlZFxyXG4gKiBgY3JlYXRlQWN0aW9uKClgLWdlbmVyYXRlZCBhY3Rpb24gY3JlYXRvciAoYXJiaXRyYXJ5IGFjdGlvbiBjcmVhdG9yc1xyXG4gKiBhcmUgbm90IHN1cHBvcnRlZCkuXHJcbiAqXHJcbiAqIEBwYXJhbSBhY3Rpb24gVGhlIGFjdGlvbiBjcmVhdG9yIHdob3NlIGFjdGlvbiB0eXBlIHRvIGdldC5cclxuICogQHJldHVybnMgVGhlIGFjdGlvbiB0eXBlIHVzZWQgYnkgdGhlIGFjdGlvbiBjcmVhdG9yLlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZ2V0VHlwZTxUIGV4dGVuZHMgc3RyaW5nPihcclxuICBhY3Rpb25DcmVhdG9yOiBQYXlsb2FkQWN0aW9uQ3JlYXRvcjxhbnksIFQ+XHJcbik6IFQge1xyXG4gIHJldHVybiBgJHthY3Rpb25DcmVhdG9yfWAgYXMgVFxyXG59XHJcblxyXG4vLyBoZWxwZXIgdHlwZXMgZm9yIG1vcmUgcmVhZGFibGUgdHlwaW5nc1xyXG5cclxudHlwZSBJZlByZXBhcmVBY3Rpb25NZXRob2RQcm92aWRlZDxcclxuICBQQSBleHRlbmRzIFByZXBhcmVBY3Rpb248YW55PiB8IHZvaWQsXHJcbiAgVHJ1ZSxcclxuICBGYWxzZVxyXG4+ID0gUEEgZXh0ZW5kcyAoLi4uYXJnczogYW55W10pID0+IGFueSA/IFRydWUgOiBGYWxzZVxyXG4iLCAiaW1wb3J0IHR5cGUgeyBNaWRkbGV3YXJlIH0gZnJvbSAncmVkdXgnXHJcbmltcG9ydCB7IGlzQWN0aW9uQ3JlYXRvciBhcyBpc1JUS0FjdGlvbiB9IGZyb20gJy4vY3JlYXRlQWN0aW9uJ1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBBY3Rpb25DcmVhdG9ySW52YXJpYW50TWlkZGxld2FyZU9wdGlvbnMge1xyXG4gIC8qKlxyXG4gICAqIFRoZSBmdW5jdGlvbiB0byBpZGVudGlmeSB3aGV0aGVyIGEgdmFsdWUgaXMgYW4gYWN0aW9uIGNyZWF0b3IuXHJcbiAgICogVGhlIGRlZmF1bHQgY2hlY2tzIGZvciBhIGZ1bmN0aW9uIHdpdGggYSBzdGF0aWMgdHlwZSBwcm9wZXJ0eSBhbmQgbWF0Y2ggbWV0aG9kLlxyXG4gICAqL1xyXG4gIGlzQWN0aW9uQ3JlYXRvcj86IChhY3Rpb246IHVua25vd24pID0+IGFjdGlvbiBpcyBGdW5jdGlvbiAmIHsgdHlwZT86IHVua25vd24gfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWVzc2FnZSh0eXBlPzogdW5rbm93bikge1xyXG4gIGNvbnN0IHNwbGl0VHlwZSA9IHR5cGUgPyBgJHt0eXBlfWAuc3BsaXQoJy8nKSA6IFtdXHJcbiAgY29uc3QgYWN0aW9uTmFtZSA9IHNwbGl0VHlwZVtzcGxpdFR5cGUubGVuZ3RoIC0gMV0gfHwgJ2FjdGlvbkNyZWF0b3InXHJcbiAgcmV0dXJuIGBEZXRlY3RlZCBhbiBhY3Rpb24gY3JlYXRvciB3aXRoIHR5cGUgXCIke1xyXG4gICAgdHlwZSB8fCAndW5rbm93bidcclxuICB9XCIgYmVpbmcgZGlzcGF0Y2hlZC4gXHJcbk1ha2Ugc3VyZSB5b3UncmUgY2FsbGluZyB0aGUgYWN0aW9uIGNyZWF0b3IgYmVmb3JlIGRpc3BhdGNoaW5nLCBpLmUuIFxcYGRpc3BhdGNoKCR7YWN0aW9uTmFtZX0oKSlcXGAgaW5zdGVhZCBvZiBcXGBkaXNwYXRjaCgke2FjdGlvbk5hbWV9KVxcYC4gVGhpcyBpcyBuZWNlc3NhcnkgZXZlbiBpZiB0aGUgYWN0aW9uIGhhcyBubyBwYXlsb2FkLmBcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFjdGlvbkNyZWF0b3JJbnZhcmlhbnRNaWRkbGV3YXJlKFxyXG4gIG9wdGlvbnM6IEFjdGlvbkNyZWF0b3JJbnZhcmlhbnRNaWRkbGV3YXJlT3B0aW9ucyA9IHt9XHJcbik6IE1pZGRsZXdhcmUge1xyXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XHJcbiAgICByZXR1cm4gKCkgPT4gKG5leHQpID0+IChhY3Rpb24pID0+IG5leHQoYWN0aW9uKVxyXG4gIH1cclxuICBjb25zdCB7IGlzQWN0aW9uQ3JlYXRvciA9IGlzUlRLQWN0aW9uIH0gPSBvcHRpb25zXHJcbiAgcmV0dXJuICgpID0+IChuZXh0KSA9PiAoYWN0aW9uKSA9PiB7XHJcbiAgICBpZiAoaXNBY3Rpb25DcmVhdG9yKGFjdGlvbikpIHtcclxuICAgICAgY29uc29sZS53YXJuKGdldE1lc3NhZ2UoYWN0aW9uLnR5cGUpKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5leHQoYWN0aW9uKVxyXG4gIH1cclxufVxyXG4iLCAiaW1wb3J0IGNyZWF0ZU5leHRTdGF0ZSwgeyBpc0RyYWZ0YWJsZSB9IGZyb20gJ2ltbWVyJ1xyXG5pbXBvcnQgdHlwZSB7IE1pZGRsZXdhcmUsIFN0b3JlRW5oYW5jZXIgfSBmcm9tICdyZWR1eCdcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRUaW1lTWVhc3VyZVV0aWxzKG1heERlbGF5OiBudW1iZXIsIGZuTmFtZTogc3RyaW5nKSB7XHJcbiAgbGV0IGVsYXBzZWQgPSAwXHJcbiAgcmV0dXJuIHtcclxuICAgIG1lYXN1cmVUaW1lPFQ+KGZuOiAoKSA9PiBUKTogVCB7XHJcbiAgICAgIGNvbnN0IHN0YXJ0ZWQgPSBEYXRlLm5vdygpXHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgcmV0dXJuIGZuKClcclxuICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KClcclxuICAgICAgICBlbGFwc2VkICs9IGZpbmlzaGVkIC0gc3RhcnRlZFxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgd2FybklmRXhjZWVkZWQoKSB7XHJcbiAgICAgIGlmIChlbGFwc2VkID4gbWF4RGVsYXkpIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oYCR7Zm5OYW1lfSB0b29rICR7ZWxhcHNlZH1tcywgd2hpY2ggaXMgbW9yZSB0aGFuIHRoZSB3YXJuaW5nIHRocmVzaG9sZCBvZiAke21heERlbGF5fW1zLiBcclxuSWYgeW91ciBzdGF0ZSBvciBhY3Rpb25zIGFyZSB2ZXJ5IGxhcmdlLCB5b3UgbWF5IHdhbnQgdG8gZGlzYWJsZSB0aGUgbWlkZGxld2FyZSBhcyBpdCBtaWdodCBjYXVzZSB0b28gbXVjaCBvZiBhIHNsb3dkb3duIGluIGRldmVsb3BtZW50IG1vZGUuIFNlZSBodHRwczovL3JlZHV4LXRvb2xraXQuanMub3JnL2FwaS9nZXREZWZhdWx0TWlkZGxld2FyZSBmb3IgaW5zdHJ1Y3Rpb25zLlxyXG5JdCBpcyBkaXNhYmxlZCBpbiBwcm9kdWN0aW9uIGJ1aWxkcywgc28geW91IGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgdGhhdC5gKVxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGRlbGF5KG1zOiBudW1iZXIpIHtcclxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKVxyXG59XHJcblxyXG4vKipcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGNsYXNzIE1pZGRsZXdhcmVBcnJheTxcclxuICBNaWRkbGV3YXJlcyBleHRlbmRzIE1pZGRsZXdhcmU8YW55LCBhbnk+W11cclxuPiBleHRlbmRzIEFycmF5PE1pZGRsZXdhcmVzW251bWJlcl0+IHtcclxuICBjb25zdHJ1Y3RvciguLi5pdGVtczogTWlkZGxld2FyZXMpXHJcbiAgY29uc3RydWN0b3IoLi4uYXJnczogYW55W10pIHtcclxuICAgIHN1cGVyKC4uLmFyZ3MpXHJcbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgTWlkZGxld2FyZUFycmF5LnByb3RvdHlwZSlcclxuICB9XHJcblxyXG4gIHN0YXRpYyBnZXQgW1N5bWJvbC5zcGVjaWVzXSgpIHtcclxuICAgIHJldHVybiBNaWRkbGV3YXJlQXJyYXkgYXMgYW55XHJcbiAgfVxyXG5cclxuICBjb25jYXQ8QWRkaXRpb25hbE1pZGRsZXdhcmVzIGV4dGVuZHMgUmVhZG9ubHlBcnJheTxNaWRkbGV3YXJlPGFueSwgYW55Pj4+KFxyXG4gICAgaXRlbXM6IEFkZGl0aW9uYWxNaWRkbGV3YXJlc1xyXG4gICk6IE1pZGRsZXdhcmVBcnJheTxbLi4uTWlkZGxld2FyZXMsIC4uLkFkZGl0aW9uYWxNaWRkbGV3YXJlc10+XHJcblxyXG4gIGNvbmNhdDxBZGRpdGlvbmFsTWlkZGxld2FyZXMgZXh0ZW5kcyBSZWFkb25seUFycmF5PE1pZGRsZXdhcmU8YW55LCBhbnk+Pj4oXHJcbiAgICAuLi5pdGVtczogQWRkaXRpb25hbE1pZGRsZXdhcmVzXHJcbiAgKTogTWlkZGxld2FyZUFycmF5PFsuLi5NaWRkbGV3YXJlcywgLi4uQWRkaXRpb25hbE1pZGRsZXdhcmVzXT5cclxuICBjb25jYXQoLi4uYXJyOiBhbnlbXSkge1xyXG4gICAgcmV0dXJuIHN1cGVyLmNvbmNhdC5hcHBseSh0aGlzLCBhcnIpXHJcbiAgfVxyXG5cclxuICBwcmVwZW5kPEFkZGl0aW9uYWxNaWRkbGV3YXJlcyBleHRlbmRzIFJlYWRvbmx5QXJyYXk8TWlkZGxld2FyZTxhbnksIGFueT4+PihcclxuICAgIGl0ZW1zOiBBZGRpdGlvbmFsTWlkZGxld2FyZXNcclxuICApOiBNaWRkbGV3YXJlQXJyYXk8Wy4uLkFkZGl0aW9uYWxNaWRkbGV3YXJlcywgLi4uTWlkZGxld2FyZXNdPlxyXG5cclxuICBwcmVwZW5kPEFkZGl0aW9uYWxNaWRkbGV3YXJlcyBleHRlbmRzIFJlYWRvbmx5QXJyYXk8TWlkZGxld2FyZTxhbnksIGFueT4+PihcclxuICAgIC4uLml0ZW1zOiBBZGRpdGlvbmFsTWlkZGxld2FyZXNcclxuICApOiBNaWRkbGV3YXJlQXJyYXk8Wy4uLkFkZGl0aW9uYWxNaWRkbGV3YXJlcywgLi4uTWlkZGxld2FyZXNdPlxyXG5cclxuICBwcmVwZW5kKC4uLmFycjogYW55W10pIHtcclxuICAgIGlmIChhcnIubGVuZ3RoID09PSAxICYmIEFycmF5LmlzQXJyYXkoYXJyWzBdKSkge1xyXG4gICAgICByZXR1cm4gbmV3IE1pZGRsZXdhcmVBcnJheSguLi5hcnJbMF0uY29uY2F0KHRoaXMpKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5ldyBNaWRkbGV3YXJlQXJyYXkoLi4uYXJyLmNvbmNhdCh0aGlzKSlcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgRW5oYW5jZXJBcnJheTxcclxuICBFbmhhbmNlcnMgZXh0ZW5kcyBTdG9yZUVuaGFuY2VyPGFueSwgYW55PltdXHJcbj4gZXh0ZW5kcyBBcnJheTxFbmhhbmNlcnNbbnVtYmVyXT4ge1xyXG4gIGNvbnN0cnVjdG9yKC4uLml0ZW1zOiBFbmhhbmNlcnMpXHJcbiAgY29uc3RydWN0b3IoLi4uYXJnczogYW55W10pIHtcclxuICAgIHN1cGVyKC4uLmFyZ3MpXHJcbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgRW5oYW5jZXJBcnJheS5wcm90b3R5cGUpXHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZ2V0IFtTeW1ib2wuc3BlY2llc10oKSB7XHJcbiAgICByZXR1cm4gRW5oYW5jZXJBcnJheSBhcyBhbnlcclxuICB9XHJcblxyXG4gIGNvbmNhdDxBZGRpdGlvbmFsRW5oYW5jZXJzIGV4dGVuZHMgUmVhZG9ubHlBcnJheTxTdG9yZUVuaGFuY2VyPGFueSwgYW55Pj4+KFxyXG4gICAgaXRlbXM6IEFkZGl0aW9uYWxFbmhhbmNlcnNcclxuICApOiBFbmhhbmNlckFycmF5PFsuLi5FbmhhbmNlcnMsIC4uLkFkZGl0aW9uYWxFbmhhbmNlcnNdPlxyXG5cclxuICBjb25jYXQ8QWRkaXRpb25hbEVuaGFuY2VycyBleHRlbmRzIFJlYWRvbmx5QXJyYXk8U3RvcmVFbmhhbmNlcjxhbnksIGFueT4+PihcclxuICAgIC4uLml0ZW1zOiBBZGRpdGlvbmFsRW5oYW5jZXJzXHJcbiAgKTogRW5oYW5jZXJBcnJheTxbLi4uRW5oYW5jZXJzLCAuLi5BZGRpdGlvbmFsRW5oYW5jZXJzXT5cclxuICBjb25jYXQoLi4uYXJyOiBhbnlbXSkge1xyXG4gICAgcmV0dXJuIHN1cGVyLmNvbmNhdC5hcHBseSh0aGlzLCBhcnIpXHJcbiAgfVxyXG5cclxuICBwcmVwZW5kPEFkZGl0aW9uYWxFbmhhbmNlcnMgZXh0ZW5kcyBSZWFkb25seUFycmF5PFN0b3JlRW5oYW5jZXI8YW55LCBhbnk+Pj4oXHJcbiAgICBpdGVtczogQWRkaXRpb25hbEVuaGFuY2Vyc1xyXG4gICk6IEVuaGFuY2VyQXJyYXk8Wy4uLkFkZGl0aW9uYWxFbmhhbmNlcnMsIC4uLkVuaGFuY2Vyc10+XHJcblxyXG4gIHByZXBlbmQ8QWRkaXRpb25hbEVuaGFuY2VycyBleHRlbmRzIFJlYWRvbmx5QXJyYXk8U3RvcmVFbmhhbmNlcjxhbnksIGFueT4+PihcclxuICAgIC4uLml0ZW1zOiBBZGRpdGlvbmFsRW5oYW5jZXJzXHJcbiAgKTogRW5oYW5jZXJBcnJheTxbLi4uQWRkaXRpb25hbEVuaGFuY2VycywgLi4uRW5oYW5jZXJzXT5cclxuXHJcbiAgcHJlcGVuZCguLi5hcnI6IGFueVtdKSB7XHJcbiAgICBpZiAoYXJyLmxlbmd0aCA9PT0gMSAmJiBBcnJheS5pc0FycmF5KGFyclswXSkpIHtcclxuICAgICAgcmV0dXJuIG5ldyBFbmhhbmNlckFycmF5KC4uLmFyclswXS5jb25jYXQodGhpcykpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmV3IEVuaGFuY2VyQXJyYXkoLi4uYXJyLmNvbmNhdCh0aGlzKSlcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBmcmVlemVEcmFmdGFibGU8VD4odmFsOiBUKSB7XHJcbiAgcmV0dXJuIGlzRHJhZnRhYmxlKHZhbCkgPyBjcmVhdGVOZXh0U3RhdGUodmFsLCAoKSA9PiB7fSkgOiB2YWxcclxufVxyXG4iLCAiaW1wb3J0IHR5cGUgeyBNaWRkbGV3YXJlIH0gZnJvbSAncmVkdXgnXHJcbmltcG9ydCB7IGdldFRpbWVNZWFzdXJlVXRpbHMgfSBmcm9tICcuL3V0aWxzJ1xyXG5cclxudHlwZSBFbnRyeVByb2Nlc3NvciA9IChrZXk6IHN0cmluZywgdmFsdWU6IGFueSkgPT4gYW55XHJcblxyXG5jb25zdCBpc1Byb2R1Y3Rpb246IGJvb2xlYW4gPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nXHJcbmNvbnN0IHByZWZpeDogc3RyaW5nID0gJ0ludmFyaWFudCBmYWlsZWQnXHJcblxyXG4vLyBUaHJvdyBhbiBlcnJvciBpZiB0aGUgY29uZGl0aW9uIGZhaWxzXHJcbi8vIFN0cmlwIG91dCBlcnJvciBtZXNzYWdlcyBmb3IgcHJvZHVjdGlvblxyXG4vLyA+IE5vdCBwcm92aWRpbmcgYW4gaW5saW5lIGRlZmF1bHQgYXJndW1lbnQgZm9yIG1lc3NhZ2UgYXMgdGhlIHJlc3VsdCBpcyBzbWFsbGVyXHJcbmZ1bmN0aW9uIGludmFyaWFudChjb25kaXRpb246IGFueSwgbWVzc2FnZT86IHN0cmluZykge1xyXG4gIGlmIChjb25kaXRpb24pIHtcclxuICAgIHJldHVyblxyXG4gIH1cclxuICAvLyBDb25kaXRpb24gbm90IHBhc3NlZFxyXG5cclxuICAvLyBJbiBwcm9kdWN0aW9uIHdlIHN0cmlwIHRoZSBtZXNzYWdlIGJ1dCBzdGlsbCB0aHJvd1xyXG4gIGlmIChpc1Byb2R1Y3Rpb24pIHtcclxuICAgIHRocm93IG5ldyBFcnJvcihwcmVmaXgpXHJcbiAgfVxyXG5cclxuICAvLyBXaGVuIG5vdCBpbiBwcm9kdWN0aW9uIHdlIGFsbG93IHRoZSBtZXNzYWdlIHRvIHBhc3MgdGhyb3VnaFxyXG4gIC8vICpUaGlzIGJsb2NrIHdpbGwgYmUgcmVtb3ZlZCBpbiBwcm9kdWN0aW9uIGJ1aWxkcypcclxuICB0aHJvdyBuZXcgRXJyb3IoYCR7cHJlZml4fTogJHttZXNzYWdlIHx8ICcnfWApXHJcbn1cclxuXHJcbmZ1bmN0aW9uIHN0cmluZ2lmeShcclxuICBvYmo6IGFueSxcclxuICBzZXJpYWxpemVyPzogRW50cnlQcm9jZXNzb3IsXHJcbiAgaW5kZW50Pzogc3RyaW5nIHwgbnVtYmVyLFxyXG4gIGRlY3ljbGVyPzogRW50cnlQcm9jZXNzb3JcclxuKTogc3RyaW5nIHtcclxuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqLCBnZXRTZXJpYWxpemUoc2VyaWFsaXplciwgZGVjeWNsZXIpLCBpbmRlbnQpXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldFNlcmlhbGl6ZShcclxuICBzZXJpYWxpemVyPzogRW50cnlQcm9jZXNzb3IsXHJcbiAgZGVjeWNsZXI/OiBFbnRyeVByb2Nlc3NvclxyXG4pOiBFbnRyeVByb2Nlc3NvciB7XHJcbiAgbGV0IHN0YWNrOiBhbnlbXSA9IFtdLFxyXG4gICAga2V5czogYW55W10gPSBbXVxyXG5cclxuICBpZiAoIWRlY3ljbGVyKVxyXG4gICAgZGVjeWNsZXIgPSBmdW5jdGlvbiAoXzogc3RyaW5nLCB2YWx1ZTogYW55KSB7XHJcbiAgICAgIGlmIChzdGFja1swXSA9PT0gdmFsdWUpIHJldHVybiAnW0NpcmN1bGFyIH5dJ1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgICdbQ2lyY3VsYXIgfi4nICsga2V5cy5zbGljZSgwLCBzdGFjay5pbmRleE9mKHZhbHVlKSkuam9pbignLicpICsgJ10nXHJcbiAgICAgIClcclxuICAgIH1cclxuXHJcbiAgcmV0dXJuIGZ1bmN0aW9uICh0aGlzOiBhbnksIGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XHJcbiAgICBpZiAoc3RhY2subGVuZ3RoID4gMCkge1xyXG4gICAgICB2YXIgdGhpc1BvcyA9IHN0YWNrLmluZGV4T2YodGhpcylcclxuICAgICAgfnRoaXNQb3MgPyBzdGFjay5zcGxpY2UodGhpc1BvcyArIDEpIDogc3RhY2sucHVzaCh0aGlzKVxyXG4gICAgICB+dGhpc1BvcyA/IGtleXMuc3BsaWNlKHRoaXNQb3MsIEluZmluaXR5LCBrZXkpIDoga2V5cy5wdXNoKGtleSlcclxuICAgICAgaWYgKH5zdGFjay5pbmRleE9mKHZhbHVlKSkgdmFsdWUgPSBkZWN5Y2xlciEuY2FsbCh0aGlzLCBrZXksIHZhbHVlKVxyXG4gICAgfSBlbHNlIHN0YWNrLnB1c2godmFsdWUpXHJcblxyXG4gICAgcmV0dXJuIHNlcmlhbGl6ZXIgPT0gbnVsbCA/IHZhbHVlIDogc2VyaWFsaXplci5jYWxsKHRoaXMsIGtleSwgdmFsdWUpXHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogVGhlIGRlZmF1bHQgYGlzSW1tdXRhYmxlYCBmdW5jdGlvbi5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzSW1tdXRhYmxlRGVmYXVsdCh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xyXG4gIHJldHVybiB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09IG51bGwgfHwgT2JqZWN0LmlzRnJvemVuKHZhbHVlKVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gdHJhY2tGb3JNdXRhdGlvbnMoXHJcbiAgaXNJbW11dGFibGU6IElzSW1tdXRhYmxlRnVuYyxcclxuICBpZ25vcmVQYXRoczogSWdub3JlUGF0aHMgfCB1bmRlZmluZWQsXHJcbiAgb2JqOiBhbnlcclxuKSB7XHJcbiAgY29uc3QgdHJhY2tlZFByb3BlcnRpZXMgPSB0cmFja1Byb3BlcnRpZXMoaXNJbW11dGFibGUsIGlnbm9yZVBhdGhzLCBvYmopXHJcbiAgcmV0dXJuIHtcclxuICAgIGRldGVjdE11dGF0aW9ucygpIHtcclxuICAgICAgcmV0dXJuIGRldGVjdE11dGF0aW9ucyhpc0ltbXV0YWJsZSwgaWdub3JlUGF0aHMsIHRyYWNrZWRQcm9wZXJ0aWVzLCBvYmopXHJcbiAgICB9LFxyXG4gIH1cclxufVxyXG5cclxuaW50ZXJmYWNlIFRyYWNrZWRQcm9wZXJ0eSB7XHJcbiAgdmFsdWU6IGFueVxyXG4gIGNoaWxkcmVuOiBSZWNvcmQ8c3RyaW5nLCBhbnk+XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHRyYWNrUHJvcGVydGllcyhcclxuICBpc0ltbXV0YWJsZTogSXNJbW11dGFibGVGdW5jLFxyXG4gIGlnbm9yZVBhdGhzOiBJZ25vcmVQYXRocyA9IFtdLFxyXG4gIG9iajogUmVjb3JkPHN0cmluZywgYW55PixcclxuICBwYXRoOiBzdHJpbmcgPSAnJyxcclxuICBjaGVja2VkT2JqZWN0czogU2V0PFJlY29yZDxzdHJpbmcsIGFueT4+ID0gbmV3IFNldCgpXHJcbikge1xyXG4gIGNvbnN0IHRyYWNrZWQ6IFBhcnRpYWw8VHJhY2tlZFByb3BlcnR5PiA9IHsgdmFsdWU6IG9iaiB9XHJcblxyXG4gIGlmICghaXNJbW11dGFibGUob2JqKSAmJiAhY2hlY2tlZE9iamVjdHMuaGFzKG9iaikpIHtcclxuICAgIGNoZWNrZWRPYmplY3RzLmFkZChvYmopO1xyXG4gICAgdHJhY2tlZC5jaGlsZHJlbiA9IHt9XHJcblxyXG4gICAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XHJcbiAgICAgIGNvbnN0IGNoaWxkUGF0aCA9IHBhdGggPyBwYXRoICsgJy4nICsga2V5IDoga2V5XHJcbiAgICAgIGlmIChpZ25vcmVQYXRocy5sZW5ndGggJiYgaWdub3JlUGF0aHMuaW5kZXhPZihjaGlsZFBhdGgpICE9PSAtMSkge1xyXG4gICAgICAgIGNvbnRpbnVlXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRyYWNrZWQuY2hpbGRyZW5ba2V5XSA9IHRyYWNrUHJvcGVydGllcyhcclxuICAgICAgICBpc0ltbXV0YWJsZSxcclxuICAgICAgICBpZ25vcmVQYXRocyxcclxuICAgICAgICBvYmpba2V5XSxcclxuICAgICAgICBjaGlsZFBhdGhcclxuICAgICAgKVxyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gdHJhY2tlZCBhcyBUcmFja2VkUHJvcGVydHlcclxufVxyXG5cclxudHlwZSBJZ25vcmVQYXRocyA9IHJlYWRvbmx5IChzdHJpbmcgfCBSZWdFeHApW11cclxuXHJcbmZ1bmN0aW9uIGRldGVjdE11dGF0aW9ucyhcclxuICBpc0ltbXV0YWJsZTogSXNJbW11dGFibGVGdW5jLFxyXG4gIGlnbm9yZWRQYXRoczogSWdub3JlUGF0aHMgPSBbXSxcclxuICB0cmFja2VkUHJvcGVydHk6IFRyYWNrZWRQcm9wZXJ0eSxcclxuICBvYmo6IGFueSxcclxuICBzYW1lUGFyZW50UmVmOiBib29sZWFuID0gZmFsc2UsXHJcbiAgcGF0aDogc3RyaW5nID0gJydcclxuKTogeyB3YXNNdXRhdGVkOiBib29sZWFuOyBwYXRoPzogc3RyaW5nIH0ge1xyXG4gIGNvbnN0IHByZXZPYmogPSB0cmFja2VkUHJvcGVydHkgPyB0cmFja2VkUHJvcGVydHkudmFsdWUgOiB1bmRlZmluZWRcclxuXHJcbiAgY29uc3Qgc2FtZVJlZiA9IHByZXZPYmogPT09IG9ialxyXG5cclxuICBpZiAoc2FtZVBhcmVudFJlZiAmJiAhc2FtZVJlZiAmJiAhTnVtYmVyLmlzTmFOKG9iaikpIHtcclxuICAgIHJldHVybiB7IHdhc011dGF0ZWQ6IHRydWUsIHBhdGggfVxyXG4gIH1cclxuXHJcbiAgaWYgKGlzSW1tdXRhYmxlKHByZXZPYmopIHx8IGlzSW1tdXRhYmxlKG9iaikpIHtcclxuICAgIHJldHVybiB7IHdhc011dGF0ZWQ6IGZhbHNlIH1cclxuICB9XHJcblxyXG4gIC8vIEdhdGhlciBhbGwga2V5cyBmcm9tIHByZXYgKHRyYWNrZWQpIGFuZCBhZnRlciBvYmpzXHJcbiAgY29uc3Qga2V5c1RvRGV0ZWN0OiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9XHJcbiAgZm9yIChsZXQga2V5IGluIHRyYWNrZWRQcm9wZXJ0eS5jaGlsZHJlbikge1xyXG4gICAga2V5c1RvRGV0ZWN0W2tleV0gPSB0cnVlXHJcbiAgfVxyXG4gIGZvciAobGV0IGtleSBpbiBvYmopIHtcclxuICAgIGtleXNUb0RldGVjdFtrZXldID0gdHJ1ZVxyXG4gIH1cclxuXHJcbiAgY29uc3QgaGFzSWdub3JlZFBhdGhzID0gaWdub3JlZFBhdGhzLmxlbmd0aCA+IDBcclxuXHJcbiAgZm9yIChsZXQga2V5IGluIGtleXNUb0RldGVjdCkge1xyXG4gICAgY29uc3QgbmVzdGVkUGF0aCA9IHBhdGggPyBwYXRoICsgJy4nICsga2V5IDoga2V5XHJcblxyXG4gICAgaWYgKGhhc0lnbm9yZWRQYXRocykge1xyXG4gICAgICBjb25zdCBoYXNNYXRjaGVzID0gaWdub3JlZFBhdGhzLnNvbWUoKGlnbm9yZWQpID0+IHtcclxuICAgICAgICBpZiAoaWdub3JlZCBpbnN0YW5jZW9mIFJlZ0V4cCkge1xyXG4gICAgICAgICAgcmV0dXJuIGlnbm9yZWQudGVzdChuZXN0ZWRQYXRoKVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmVzdGVkUGF0aCA9PT0gaWdub3JlZFxyXG4gICAgICB9KVxyXG4gICAgICBpZiAoaGFzTWF0Y2hlcykge1xyXG4gICAgICAgIGNvbnRpbnVlXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCByZXN1bHQgPSBkZXRlY3RNdXRhdGlvbnMoXHJcbiAgICAgIGlzSW1tdXRhYmxlLFxyXG4gICAgICBpZ25vcmVkUGF0aHMsXHJcbiAgICAgIHRyYWNrZWRQcm9wZXJ0eS5jaGlsZHJlbltrZXldLFxyXG4gICAgICBvYmpba2V5XSxcclxuICAgICAgc2FtZVJlZixcclxuICAgICAgbmVzdGVkUGF0aFxyXG4gICAgKVxyXG5cclxuICAgIGlmIChyZXN1bHQud2FzTXV0YXRlZCkge1xyXG4gICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiB7IHdhc011dGF0ZWQ6IGZhbHNlIH1cclxufVxyXG5cclxudHlwZSBJc0ltbXV0YWJsZUZ1bmMgPSAodmFsdWU6IGFueSkgPT4gYm9vbGVhblxyXG5cclxuLyoqXHJcbiAqIE9wdGlvbnMgZm9yIGBjcmVhdGVJbW11dGFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmUoKWAuXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgSW1tdXRhYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlT3B0aW9ucyB7XHJcbiAgLyoqXHJcbiAgICBDYWxsYmFjayBmdW5jdGlvbiB0byBjaGVjayBpZiBhIHZhbHVlIGlzIGNvbnNpZGVyZWQgdG8gYmUgaW1tdXRhYmxlLlxyXG4gICAgVGhpcyBmdW5jdGlvbiBpcyBhcHBsaWVkIHJlY3Vyc2l2ZWx5IHRvIGV2ZXJ5IHZhbHVlIGNvbnRhaW5lZCBpbiB0aGUgc3RhdGUuXHJcbiAgICBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiB3aWxsIHJldHVybiB0cnVlIGZvciBwcmltaXRpdmUgdHlwZXMgXHJcbiAgICAobGlrZSBudW1iZXJzLCBzdHJpbmdzLCBib29sZWFucywgbnVsbCBhbmQgdW5kZWZpbmVkKS5cclxuICAgKi9cclxuICBpc0ltbXV0YWJsZT86IElzSW1tdXRhYmxlRnVuY1xyXG4gIC8qKiBcclxuICAgIEFuIGFycmF5IG9mIGRvdC1zZXBhcmF0ZWQgcGF0aCBzdHJpbmdzIHRoYXQgbWF0Y2ggbmFtZWQgbm9kZXMgZnJvbSBcclxuICAgIHRoZSByb290IHN0YXRlIHRvIGlnbm9yZSB3aGVuIGNoZWNraW5nIGZvciBpbW11dGFiaWxpdHkuXHJcbiAgICBEZWZhdWx0cyB0byB1bmRlZmluZWRcclxuICAgKi9cclxuICBpZ25vcmVkUGF0aHM/OiBJZ25vcmVQYXRoc1xyXG4gIC8qKiBQcmludCBhIHdhcm5pbmcgaWYgY2hlY2tzIHRha2UgbG9uZ2VyIHRoYW4gTiBtcy4gRGVmYXVsdDogMzJtcyAqL1xyXG4gIHdhcm5BZnRlcj86IG51bWJlclxyXG4gIC8vIEBkZXByZWNhdGVkLiBVc2UgaWdub3JlZFBhdGhzXHJcbiAgaWdub3JlPzogc3RyaW5nW11cclxufVxyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBtaWRkbGV3YXJlIHRoYXQgY2hlY2tzIHdoZXRoZXIgYW55IHN0YXRlIHdhcyBtdXRhdGVkIGluIGJldHdlZW5cclxuICogZGlzcGF0Y2hlcyBvciBkdXJpbmcgYSBkaXNwYXRjaC4gSWYgYW55IG11dGF0aW9ucyBhcmUgZGV0ZWN0ZWQsIGFuIGVycm9yIGlzXHJcbiAqIHRocm93bi5cclxuICpcclxuICogQHBhcmFtIG9wdGlvbnMgTWlkZGxld2FyZSBvcHRpb25zLlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSW1tdXRhYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlKFxyXG4gIG9wdGlvbnM6IEltbXV0YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZU9wdGlvbnMgPSB7fVxyXG4pOiBNaWRkbGV3YXJlIHtcclxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xyXG4gICAgcmV0dXJuICgpID0+IChuZXh0KSA9PiAoYWN0aW9uKSA9PiBuZXh0KGFjdGlvbilcclxuICB9XHJcblxyXG4gIGxldCB7XHJcbiAgICBpc0ltbXV0YWJsZSA9IGlzSW1tdXRhYmxlRGVmYXVsdCxcclxuICAgIGlnbm9yZWRQYXRocyxcclxuICAgIHdhcm5BZnRlciA9IDMyLFxyXG4gICAgaWdub3JlLFxyXG4gIH0gPSBvcHRpb25zXHJcblxyXG4gIC8vIEFsaWFzIGlnbm9yZS0+aWdub3JlZFBhdGhzLCBidXQgcHJlZmVyIGlnbm9yZWRQYXRocyBpZiBwcmVzZW50XHJcbiAgaWdub3JlZFBhdGhzID0gaWdub3JlZFBhdGhzIHx8IGlnbm9yZVxyXG5cclxuICBjb25zdCB0cmFjayA9IHRyYWNrRm9yTXV0YXRpb25zLmJpbmQobnVsbCwgaXNJbW11dGFibGUsIGlnbm9yZWRQYXRocylcclxuXHJcbiAgcmV0dXJuICh7IGdldFN0YXRlIH0pID0+IHtcclxuICAgIGxldCBzdGF0ZSA9IGdldFN0YXRlKClcclxuICAgIGxldCB0cmFja2VyID0gdHJhY2soc3RhdGUpXHJcblxyXG4gICAgbGV0IHJlc3VsdFxyXG4gICAgcmV0dXJuIChuZXh0KSA9PiAoYWN0aW9uKSA9PiB7XHJcbiAgICAgIGNvbnN0IG1lYXN1cmVVdGlscyA9IGdldFRpbWVNZWFzdXJlVXRpbHMoXHJcbiAgICAgICAgd2FybkFmdGVyLFxyXG4gICAgICAgICdJbW11dGFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmUnXHJcbiAgICAgIClcclxuXHJcbiAgICAgIG1lYXN1cmVVdGlscy5tZWFzdXJlVGltZSgoKSA9PiB7XHJcbiAgICAgICAgc3RhdGUgPSBnZXRTdGF0ZSgpXHJcblxyXG4gICAgICAgIHJlc3VsdCA9IHRyYWNrZXIuZGV0ZWN0TXV0YXRpb25zKClcclxuICAgICAgICAvLyBUcmFjayBiZWZvcmUgcG90ZW50aWFsbHkgbm90IG1lZXRpbmcgdGhlIGludmFyaWFudFxyXG4gICAgICAgIHRyYWNrZXIgPSB0cmFjayhzdGF0ZSlcclxuXHJcbiAgICAgICAgaW52YXJpYW50KFxyXG4gICAgICAgICAgIXJlc3VsdC53YXNNdXRhdGVkLFxyXG4gICAgICAgICAgYEEgc3RhdGUgbXV0YXRpb24gd2FzIGRldGVjdGVkIGJldHdlZW4gZGlzcGF0Y2hlcywgaW4gdGhlIHBhdGggJyR7XHJcbiAgICAgICAgICAgIHJlc3VsdC5wYXRoIHx8ICcnXHJcbiAgICAgICAgICB9Jy4gIFRoaXMgbWF5IGNhdXNlIGluY29ycmVjdCBiZWhhdmlvci4gKGh0dHBzOi8vcmVkdXguanMub3JnL3N0eWxlLWd1aWRlL3N0eWxlLWd1aWRlI2RvLW5vdC1tdXRhdGUtc3RhdGUpYFxyXG4gICAgICAgIClcclxuICAgICAgfSlcclxuXHJcbiAgICAgIGNvbnN0IGRpc3BhdGNoZWRBY3Rpb24gPSBuZXh0KGFjdGlvbilcclxuXHJcbiAgICAgIG1lYXN1cmVVdGlscy5tZWFzdXJlVGltZSgoKSA9PiB7XHJcbiAgICAgICAgc3RhdGUgPSBnZXRTdGF0ZSgpXHJcblxyXG4gICAgICAgIHJlc3VsdCA9IHRyYWNrZXIuZGV0ZWN0TXV0YXRpb25zKClcclxuICAgICAgICAvLyBUcmFjayBiZWZvcmUgcG90ZW50aWFsbHkgbm90IG1lZXRpbmcgdGhlIGludmFyaWFudFxyXG4gICAgICAgIHRyYWNrZXIgPSB0cmFjayhzdGF0ZSlcclxuXHJcbiAgICAgICAgcmVzdWx0Lndhc011dGF0ZWQgJiZcclxuICAgICAgICAgIGludmFyaWFudChcclxuICAgICAgICAgICAgIXJlc3VsdC53YXNNdXRhdGVkLFxyXG4gICAgICAgICAgICBgQSBzdGF0ZSBtdXRhdGlvbiB3YXMgZGV0ZWN0ZWQgaW5zaWRlIGEgZGlzcGF0Y2gsIGluIHRoZSBwYXRoOiAke1xyXG4gICAgICAgICAgICAgIHJlc3VsdC5wYXRoIHx8ICcnXHJcbiAgICAgICAgICAgIH0uIFRha2UgYSBsb29rIGF0IHRoZSByZWR1Y2VyKHMpIGhhbmRsaW5nIHRoZSBhY3Rpb24gJHtzdHJpbmdpZnkoXHJcbiAgICAgICAgICAgICAgYWN0aW9uXHJcbiAgICAgICAgICAgICl9LiAoaHR0cHM6Ly9yZWR1eC5qcy5vcmcvc3R5bGUtZ3VpZGUvc3R5bGUtZ3VpZGUjZG8tbm90LW11dGF0ZS1zdGF0ZSlgXHJcbiAgICAgICAgICApXHJcbiAgICAgIH0pXHJcblxyXG4gICAgICBtZWFzdXJlVXRpbHMud2FybklmRXhjZWVkZWQoKVxyXG5cclxuICAgICAgcmV0dXJuIGRpc3BhdGNoZWRBY3Rpb25cclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwgImltcG9ydCBpc1BsYWluT2JqZWN0IGZyb20gJy4vaXNQbGFpbk9iamVjdCdcclxuaW1wb3J0IHR5cGUgeyBNaWRkbGV3YXJlIH0gZnJvbSAncmVkdXgnXHJcbmltcG9ydCB7IGdldFRpbWVNZWFzdXJlVXRpbHMgfSBmcm9tICcuL3V0aWxzJ1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcGFzc2VkIHZhbHVlIGlzIFwicGxhaW5cIiwgaS5lLiBhIHZhbHVlIHRoYXQgaXMgZWl0aGVyXHJcbiAqIGRpcmVjdGx5IEpTT04tc2VyaWFsaXphYmxlIChib29sZWFuLCBudW1iZXIsIHN0cmluZywgYXJyYXksIHBsYWluIG9iamVjdClcclxuICogb3IgYHVuZGVmaW5lZGAuXHJcbiAqXHJcbiAqIEBwYXJhbSB2YWwgVGhlIHZhbHVlIHRvIGNoZWNrLlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNQbGFpbih2YWw6IGFueSkge1xyXG4gIGNvbnN0IHR5cGUgPSB0eXBlb2YgdmFsXHJcbiAgcmV0dXJuIChcclxuICAgIHZhbCA9PSBudWxsIHx8XHJcbiAgICB0eXBlID09PSAnc3RyaW5nJyB8fFxyXG4gICAgdHlwZSA9PT0gJ2Jvb2xlYW4nIHx8XHJcbiAgICB0eXBlID09PSAnbnVtYmVyJyB8fFxyXG4gICAgQXJyYXkuaXNBcnJheSh2YWwpIHx8XHJcbiAgICBpc1BsYWluT2JqZWN0KHZhbClcclxuICApXHJcbn1cclxuXHJcbmludGVyZmFjZSBOb25TZXJpYWxpemFibGVWYWx1ZSB7XHJcbiAga2V5UGF0aDogc3RyaW5nXHJcbiAgdmFsdWU6IHVua25vd25cclxufVxyXG5cclxudHlwZSBJZ25vcmVQYXRocyA9IHJlYWRvbmx5IChzdHJpbmcgfCBSZWdFeHApW11cclxuXHJcbi8qKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZmluZE5vblNlcmlhbGl6YWJsZVZhbHVlKFxyXG4gIHZhbHVlOiB1bmtub3duLFxyXG4gIHBhdGg6IHN0cmluZyA9ICcnLFxyXG4gIGlzU2VyaWFsaXphYmxlOiAodmFsdWU6IHVua25vd24pID0+IGJvb2xlYW4gPSBpc1BsYWluLFxyXG4gIGdldEVudHJpZXM/OiAodmFsdWU6IHVua25vd24pID0+IFtzdHJpbmcsIGFueV1bXSxcclxuICBpZ25vcmVkUGF0aHM6IElnbm9yZVBhdGhzID0gW10sXHJcbiAgY2FjaGU/OiBXZWFrU2V0PG9iamVjdD5cclxuKTogTm9uU2VyaWFsaXphYmxlVmFsdWUgfCBmYWxzZSB7XHJcbiAgbGV0IGZvdW5kTmVzdGVkU2VyaWFsaXphYmxlOiBOb25TZXJpYWxpemFibGVWYWx1ZSB8IGZhbHNlXHJcblxyXG4gIGlmICghaXNTZXJpYWxpemFibGUodmFsdWUpKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBrZXlQYXRoOiBwYXRoIHx8ICc8cm9vdD4nLFxyXG4gICAgICB2YWx1ZTogdmFsdWUsXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCB2YWx1ZSA9PT0gbnVsbCkge1xyXG4gICAgcmV0dXJuIGZhbHNlXHJcbiAgfVxyXG5cclxuICBpZiAoY2FjaGU/Lmhhcyh2YWx1ZSkpIHJldHVybiBmYWxzZVxyXG5cclxuICBjb25zdCBlbnRyaWVzID0gZ2V0RW50cmllcyAhPSBudWxsID8gZ2V0RW50cmllcyh2YWx1ZSkgOiBPYmplY3QuZW50cmllcyh2YWx1ZSlcclxuXHJcbiAgY29uc3QgaGFzSWdub3JlZFBhdGhzID0gaWdub3JlZFBhdGhzLmxlbmd0aCA+IDBcclxuXHJcbiAgZm9yIChjb25zdCBba2V5LCBuZXN0ZWRWYWx1ZV0gb2YgZW50cmllcykge1xyXG4gICAgY29uc3QgbmVzdGVkUGF0aCA9IHBhdGggPyBwYXRoICsgJy4nICsga2V5IDoga2V5XHJcblxyXG4gICAgaWYgKGhhc0lnbm9yZWRQYXRocykge1xyXG4gICAgICBjb25zdCBoYXNNYXRjaGVzID0gaWdub3JlZFBhdGhzLnNvbWUoKGlnbm9yZWQpID0+IHtcclxuICAgICAgICBpZiAoaWdub3JlZCBpbnN0YW5jZW9mIFJlZ0V4cCkge1xyXG4gICAgICAgICAgcmV0dXJuIGlnbm9yZWQudGVzdChuZXN0ZWRQYXRoKVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmVzdGVkUGF0aCA9PT0gaWdub3JlZFxyXG4gICAgICB9KVxyXG4gICAgICBpZiAoaGFzTWF0Y2hlcykge1xyXG4gICAgICAgIGNvbnRpbnVlXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWlzU2VyaWFsaXphYmxlKG5lc3RlZFZhbHVlKSkge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGtleVBhdGg6IG5lc3RlZFBhdGgsXHJcbiAgICAgICAgdmFsdWU6IG5lc3RlZFZhbHVlLFxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGVvZiBuZXN0ZWRWYWx1ZSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgZm91bmROZXN0ZWRTZXJpYWxpemFibGUgPSBmaW5kTm9uU2VyaWFsaXphYmxlVmFsdWUoXHJcbiAgICAgICAgbmVzdGVkVmFsdWUsXHJcbiAgICAgICAgbmVzdGVkUGF0aCxcclxuICAgICAgICBpc1NlcmlhbGl6YWJsZSxcclxuICAgICAgICBnZXRFbnRyaWVzLFxyXG4gICAgICAgIGlnbm9yZWRQYXRocyxcclxuICAgICAgICBjYWNoZVxyXG4gICAgICApXHJcblxyXG4gICAgICBpZiAoZm91bmROZXN0ZWRTZXJpYWxpemFibGUpIHtcclxuICAgICAgICByZXR1cm4gZm91bmROZXN0ZWRTZXJpYWxpemFibGVcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaWYgKGNhY2hlICYmIGlzTmVzdGVkRnJvemVuKHZhbHVlKSkgY2FjaGUuYWRkKHZhbHVlKVxyXG5cclxuICByZXR1cm4gZmFsc2VcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzTmVzdGVkRnJvemVuKHZhbHVlOiBvYmplY3QpIHtcclxuICBpZiAoIU9iamVjdC5pc0Zyb3plbih2YWx1ZSkpIHJldHVybiBmYWxzZVxyXG5cclxuICBmb3IgKGNvbnN0IG5lc3RlZFZhbHVlIG9mIE9iamVjdC52YWx1ZXModmFsdWUpKSB7XHJcbiAgICBpZiAodHlwZW9mIG5lc3RlZFZhbHVlICE9PSAnb2JqZWN0JyB8fCBuZXN0ZWRWYWx1ZSA9PT0gbnVsbCkgY29udGludWVcclxuXHJcbiAgICBpZiAoIWlzTmVzdGVkRnJvemVuKG5lc3RlZFZhbHVlKSkgcmV0dXJuIGZhbHNlXHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZVxyXG59XHJcblxyXG4vKipcclxuICogT3B0aW9ucyBmb3IgYGNyZWF0ZVNlcmlhbGl6YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZSgpYC5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBTZXJpYWxpemFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmVPcHRpb25zIHtcclxuICAvKipcclxuICAgKiBUaGUgZnVuY3Rpb24gdG8gY2hlY2sgaWYgYSB2YWx1ZSBpcyBjb25zaWRlcmVkIHNlcmlhbGl6YWJsZS4gVGhpc1xyXG4gICAqIGZ1bmN0aW9uIGlzIGFwcGxpZWQgcmVjdXJzaXZlbHkgdG8gZXZlcnkgdmFsdWUgY29udGFpbmVkIGluIHRoZVxyXG4gICAqIHN0YXRlLiBEZWZhdWx0cyB0byBgaXNQbGFpbigpYC5cclxuICAgKi9cclxuICBpc1NlcmlhbGl6YWJsZT86ICh2YWx1ZTogYW55KSA9PiBib29sZWFuXHJcbiAgLyoqXHJcbiAgICogVGhlIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHJldHJpZXZlIGVudHJpZXMgZnJvbSBlYWNoXHJcbiAgICogdmFsdWUuICBJZiB1bnNwZWNpZmllZCwgYE9iamVjdC5lbnRyaWVzYCB3aWxsIGJlIHVzZWQuIERlZmF1bHRzXHJcbiAgICogdG8gYHVuZGVmaW5lZGAuXHJcbiAgICovXHJcbiAgZ2V0RW50cmllcz86ICh2YWx1ZTogYW55KSA9PiBbc3RyaW5nLCBhbnldW11cclxuXHJcbiAgLyoqXHJcbiAgICogQW4gYXJyYXkgb2YgYWN0aW9uIHR5cGVzIHRvIGlnbm9yZSB3aGVuIGNoZWNraW5nIGZvciBzZXJpYWxpemFiaWxpdHkuXHJcbiAgICogRGVmYXVsdHMgdG8gW11cclxuICAgKi9cclxuICBpZ25vcmVkQWN0aW9ucz86IHN0cmluZ1tdXHJcblxyXG4gIC8qKlxyXG4gICAqIEFuIGFycmF5IG9mIGRvdC1zZXBhcmF0ZWQgcGF0aCBzdHJpbmdzIG9yIHJlZ3VsYXIgZXhwcmVzc2lvbnMgdG8gaWdub3JlXHJcbiAgICogd2hlbiBjaGVja2luZyBmb3Igc2VyaWFsaXphYmlsaXR5LCBEZWZhdWx0cyB0b1xyXG4gICAqIFsnbWV0YS5hcmcnLCAnbWV0YS5iYXNlUXVlcnlNZXRhJ11cclxuICAgKi9cclxuICBpZ25vcmVkQWN0aW9uUGF0aHM/OiAoc3RyaW5nIHwgUmVnRXhwKVtdXHJcblxyXG4gIC8qKlxyXG4gICAqIEFuIGFycmF5IG9mIGRvdC1zZXBhcmF0ZWQgcGF0aCBzdHJpbmdzIG9yIHJlZ3VsYXIgZXhwcmVzc2lvbnMgdG8gaWdub3JlXHJcbiAgICogd2hlbiBjaGVja2luZyBmb3Igc2VyaWFsaXphYmlsaXR5LCBEZWZhdWx0cyB0byBbXVxyXG4gICAqL1xyXG4gIGlnbm9yZWRQYXRocz86IChzdHJpbmcgfCBSZWdFeHApW11cclxuICAvKipcclxuICAgKiBFeGVjdXRpb24gdGltZSB3YXJuaW5nIHRocmVzaG9sZC4gSWYgdGhlIG1pZGRsZXdhcmUgdGFrZXMgbG9uZ2VyXHJcbiAgICogdGhhbiBgd2FybkFmdGVyYCBtcywgYSB3YXJuaW5nIHdpbGwgYmUgZGlzcGxheWVkIGluIHRoZSBjb25zb2xlLlxyXG4gICAqIERlZmF1bHRzIHRvIDMybXMuXHJcbiAgICovXHJcbiAgd2FybkFmdGVyPzogbnVtYmVyXHJcblxyXG4gIC8qKlxyXG4gICAqIE9wdCBvdXQgb2YgY2hlY2tpbmcgc3RhdGUuIFdoZW4gc2V0IHRvIGB0cnVlYCwgb3RoZXIgc3RhdGUtcmVsYXRlZCBwYXJhbXMgd2lsbCBiZSBpZ25vcmVkLlxyXG4gICAqL1xyXG4gIGlnbm9yZVN0YXRlPzogYm9vbGVhblxyXG5cclxuICAvKipcclxuICAgKiBPcHQgb3V0IG9mIGNoZWNraW5nIGFjdGlvbnMuIFdoZW4gc2V0IHRvIGB0cnVlYCwgb3RoZXIgYWN0aW9uLXJlbGF0ZWQgcGFyYW1zIHdpbGwgYmUgaWdub3JlZC5cclxuICAgKi9cclxuICBpZ25vcmVBY3Rpb25zPzogYm9vbGVhblxyXG5cclxuICAvKipcclxuICAgKiBPcHQgb3V0IG9mIGNhY2hpbmcgdGhlIHJlc3VsdHMuIFRoZSBjYWNoZSB1c2VzIGEgV2Vha1NldCBhbmQgc3BlZWRzIHVwIHJlcGVhdGVkIGNoZWNraW5nIHByb2Nlc3Nlcy5cclxuICAgKiBUaGUgY2FjaGUgaXMgYXV0b21hdGljYWxseSBkaXNhYmxlZCBpZiBubyBicm93c2VyIHN1cHBvcnQgZm9yIFdlYWtTZXQgaXMgcHJlc2VudC5cclxuICAgKi9cclxuICBkaXNhYmxlQ2FjaGU/OiBib29sZWFuXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbWlkZGxld2FyZSB0aGF0LCBhZnRlciBldmVyeSBzdGF0ZSBjaGFuZ2UsIGNoZWNrcyBpZiB0aGUgbmV3XHJcbiAqIHN0YXRlIGlzIHNlcmlhbGl6YWJsZS4gSWYgYSBub24tc2VyaWFsaXphYmxlIHZhbHVlIGlzIGZvdW5kIHdpdGhpbiB0aGVcclxuICogc3RhdGUsIGFuIGVycm9yIGlzIHByaW50ZWQgdG8gdGhlIGNvbnNvbGUuXHJcbiAqXHJcbiAqIEBwYXJhbSBvcHRpb25zIE1pZGRsZXdhcmUgb3B0aW9ucy5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNlcmlhbGl6YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZShcclxuICBvcHRpb25zOiBTZXJpYWxpemFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmVPcHRpb25zID0ge31cclxuKTogTWlkZGxld2FyZSB7XHJcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcclxuICAgIHJldHVybiAoKSA9PiAobmV4dCkgPT4gKGFjdGlvbikgPT4gbmV4dChhY3Rpb24pXHJcbiAgfVxyXG4gIGNvbnN0IHtcclxuICAgIGlzU2VyaWFsaXphYmxlID0gaXNQbGFpbixcclxuICAgIGdldEVudHJpZXMsXHJcbiAgICBpZ25vcmVkQWN0aW9ucyA9IFtdLFxyXG4gICAgaWdub3JlZEFjdGlvblBhdGhzID0gWydtZXRhLmFyZycsICdtZXRhLmJhc2VRdWVyeU1ldGEnXSxcclxuICAgIGlnbm9yZWRQYXRocyA9IFtdLFxyXG4gICAgd2FybkFmdGVyID0gMzIsXHJcbiAgICBpZ25vcmVTdGF0ZSA9IGZhbHNlLFxyXG4gICAgaWdub3JlQWN0aW9ucyA9IGZhbHNlLFxyXG4gICAgZGlzYWJsZUNhY2hlID0gZmFsc2UsXHJcbiAgfSA9IG9wdGlvbnNcclxuXHJcbiAgY29uc3QgY2FjaGU6IFdlYWtTZXQ8b2JqZWN0PiB8IHVuZGVmaW5lZCA9XHJcbiAgICAhZGlzYWJsZUNhY2hlICYmIFdlYWtTZXQgPyBuZXcgV2Vha1NldCgpIDogdW5kZWZpbmVkXHJcblxyXG4gIHJldHVybiAoc3RvcmVBUEkpID0+IChuZXh0KSA9PiAoYWN0aW9uKSA9PiB7XHJcbiAgICBjb25zdCByZXN1bHQgPSBuZXh0KGFjdGlvbilcclxuXHJcbiAgICBjb25zdCBtZWFzdXJlVXRpbHMgPSBnZXRUaW1lTWVhc3VyZVV0aWxzKFxyXG4gICAgICB3YXJuQWZ0ZXIsXHJcbiAgICAgICdTZXJpYWxpemFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmUnXHJcbiAgICApXHJcblxyXG4gICAgaWYgKFxyXG4gICAgICAhaWdub3JlQWN0aW9ucyAmJlxyXG4gICAgICAhKGlnbm9yZWRBY3Rpb25zLmxlbmd0aCAmJiBpZ25vcmVkQWN0aW9ucy5pbmRleE9mKGFjdGlvbi50eXBlKSAhPT0gLTEpXHJcbiAgICApIHtcclxuICAgICAgbWVhc3VyZVV0aWxzLm1lYXN1cmVUaW1lKCgpID0+IHtcclxuICAgICAgICBjb25zdCBmb3VuZEFjdGlvbk5vblNlcmlhbGl6YWJsZVZhbHVlID0gZmluZE5vblNlcmlhbGl6YWJsZVZhbHVlKFxyXG4gICAgICAgICAgYWN0aW9uLFxyXG4gICAgICAgICAgJycsXHJcbiAgICAgICAgICBpc1NlcmlhbGl6YWJsZSxcclxuICAgICAgICAgIGdldEVudHJpZXMsXHJcbiAgICAgICAgICBpZ25vcmVkQWN0aW9uUGF0aHMsXHJcbiAgICAgICAgICBjYWNoZVxyXG4gICAgICAgIClcclxuXHJcbiAgICAgICAgaWYgKGZvdW5kQWN0aW9uTm9uU2VyaWFsaXphYmxlVmFsdWUpIHtcclxuICAgICAgICAgIGNvbnN0IHsga2V5UGF0aCwgdmFsdWUgfSA9IGZvdW5kQWN0aW9uTm9uU2VyaWFsaXphYmxlVmFsdWVcclxuXHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxyXG4gICAgICAgICAgICBgQSBub24tc2VyaWFsaXphYmxlIHZhbHVlIHdhcyBkZXRlY3RlZCBpbiBhbiBhY3Rpb24sIGluIHRoZSBwYXRoOiBcXGAke2tleVBhdGh9XFxgLiBWYWx1ZTpgLFxyXG4gICAgICAgICAgICB2YWx1ZSxcclxuICAgICAgICAgICAgJ1xcblRha2UgYSBsb29rIGF0IHRoZSBsb2dpYyB0aGF0IGRpc3BhdGNoZWQgdGhpcyBhY3Rpb246ICcsXHJcbiAgICAgICAgICAgIGFjdGlvbixcclxuICAgICAgICAgICAgJ1xcbihTZWUgaHR0cHM6Ly9yZWR1eC5qcy5vcmcvZmFxL2FjdGlvbnMjd2h5LXNob3VsZC10eXBlLWJlLWEtc3RyaW5nLW9yLWF0LWxlYXN0LXNlcmlhbGl6YWJsZS13aHktc2hvdWxkLW15LWFjdGlvbi10eXBlcy1iZS1jb25zdGFudHMpJyxcclxuICAgICAgICAgICAgJ1xcbihUbyBhbGxvdyBub24tc2VyaWFsaXphYmxlIHZhbHVlcyBzZWU6IGh0dHBzOi8vcmVkdXgtdG9vbGtpdC5qcy5vcmcvdXNhZ2UvdXNhZ2UtZ3VpZGUjd29ya2luZy13aXRoLW5vbi1zZXJpYWxpemFibGUtZGF0YSknXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGlmICghaWdub3JlU3RhdGUpIHtcclxuICAgICAgbWVhc3VyZVV0aWxzLm1lYXN1cmVUaW1lKCgpID0+IHtcclxuICAgICAgICBjb25zdCBzdGF0ZSA9IHN0b3JlQVBJLmdldFN0YXRlKClcclxuXHJcbiAgICAgICAgY29uc3QgZm91bmRTdGF0ZU5vblNlcmlhbGl6YWJsZVZhbHVlID0gZmluZE5vblNlcmlhbGl6YWJsZVZhbHVlKFxyXG4gICAgICAgICAgc3RhdGUsXHJcbiAgICAgICAgICAnJyxcclxuICAgICAgICAgIGlzU2VyaWFsaXphYmxlLFxyXG4gICAgICAgICAgZ2V0RW50cmllcyxcclxuICAgICAgICAgIGlnbm9yZWRQYXRocyxcclxuICAgICAgICAgIGNhY2hlXHJcbiAgICAgICAgKVxyXG5cclxuICAgICAgICBpZiAoZm91bmRTdGF0ZU5vblNlcmlhbGl6YWJsZVZhbHVlKSB7XHJcbiAgICAgICAgICBjb25zdCB7IGtleVBhdGgsIHZhbHVlIH0gPSBmb3VuZFN0YXRlTm9uU2VyaWFsaXphYmxlVmFsdWVcclxuXHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxyXG4gICAgICAgICAgICBgQSBub24tc2VyaWFsaXphYmxlIHZhbHVlIHdhcyBkZXRlY3RlZCBpbiB0aGUgc3RhdGUsIGluIHRoZSBwYXRoOiBcXGAke2tleVBhdGh9XFxgLiBWYWx1ZTpgLFxyXG4gICAgICAgICAgICB2YWx1ZSxcclxuICAgICAgICAgICAgYFxyXG5UYWtlIGEgbG9vayBhdCB0aGUgcmVkdWNlcihzKSBoYW5kbGluZyB0aGlzIGFjdGlvbiB0eXBlOiAke2FjdGlvbi50eXBlfS5cclxuKFNlZSBodHRwczovL3JlZHV4LmpzLm9yZy9mYXEvb3JnYW5pemluZy1zdGF0ZSNjYW4taS1wdXQtZnVuY3Rpb25zLXByb21pc2VzLW9yLW90aGVyLW5vbi1zZXJpYWxpemFibGUtaXRlbXMtaW4tbXktc3RvcmUtc3RhdGUpYFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuXHJcbiAgICAgIG1lYXN1cmVVdGlscy53YXJuSWZFeGNlZWRlZCgpXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdFxyXG4gIH1cclxufVxyXG4iLCAiaW1wb3J0IHR5cGUgeyBEcmFmdCB9IGZyb20gJ2ltbWVyJ1xyXG5pbXBvcnQgY3JlYXRlTmV4dFN0YXRlLCB7IGlzRHJhZnQsIGlzRHJhZnRhYmxlIH0gZnJvbSAnaW1tZXInXHJcbmltcG9ydCB0eXBlIHsgQW55QWN0aW9uLCBBY3Rpb24sIFJlZHVjZXIgfSBmcm9tICdyZWR1eCdcclxuaW1wb3J0IHR5cGUgeyBBY3Rpb25SZWR1Y2VyTWFwQnVpbGRlciB9IGZyb20gJy4vbWFwQnVpbGRlcnMnXHJcbmltcG9ydCB7IGV4ZWN1dGVSZWR1Y2VyQnVpbGRlckNhbGxiYWNrIH0gZnJvbSAnLi9tYXBCdWlsZGVycydcclxuaW1wb3J0IHR5cGUgeyBOb0luZmVyIH0gZnJvbSAnLi90c0hlbHBlcnMnXHJcbmltcG9ydCB7IGZyZWV6ZURyYWZ0YWJsZSB9IGZyb20gJy4vdXRpbHMnXHJcblxyXG4vKipcclxuICogRGVmaW5lcyBhIG1hcHBpbmcgZnJvbSBhY3Rpb24gdHlwZXMgdG8gY29ycmVzcG9uZGluZyBhY3Rpb24gb2JqZWN0IHNoYXBlcy5cclxuICpcclxuICogQGRlcHJlY2F0ZWQgVGhpcyBzaG91bGQgbm90IGJlIHVzZWQgbWFudWFsbHkgLSBpdCBpcyBvbmx5IHVzZWQgZm9yIGludGVybmFsXHJcbiAqICAgICAgICAgICAgIGluZmVyZW5jZSBwdXJwb3NlcyBhbmQgc2hvdWxkIG5vdCBoYXZlIGFueSBmdXJ0aGVyIHZhbHVlLlxyXG4gKiAgICAgICAgICAgICBJdCBtaWdodCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCB0eXBlIEFjdGlvbnM8VCBleHRlbmRzIGtleW9mIGFueSA9IHN0cmluZz4gPSBSZWNvcmQ8VCwgQWN0aW9uPlxyXG5cclxuLyoqXHJcbiAqIEBkZXByZWNhdGVkIHVzZSBgVHlwZUd1YXJkYCBpbnN0ZWFkXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIEFjdGlvbk1hdGNoZXI8QSBleHRlbmRzIEFueUFjdGlvbj4ge1xyXG4gIChhY3Rpb246IEFueUFjdGlvbik6IGFjdGlvbiBpcyBBXHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIEFjdGlvbk1hdGNoZXJEZXNjcmlwdGlvbjxTLCBBIGV4dGVuZHMgQW55QWN0aW9uPiA9IHtcclxuICBtYXRjaGVyOiBBY3Rpb25NYXRjaGVyPEE+XHJcbiAgcmVkdWNlcjogQ2FzZVJlZHVjZXI8UywgTm9JbmZlcjxBPj5cclxufVxyXG5cclxuZXhwb3J0IHR5cGUgUmVhZG9ubHlBY3Rpb25NYXRjaGVyRGVzY3JpcHRpb25Db2xsZWN0aW9uPFM+ID0gUmVhZG9ubHlBcnJheTxcclxuICBBY3Rpb25NYXRjaGVyRGVzY3JpcHRpb248UywgYW55PlxyXG4+XHJcblxyXG5leHBvcnQgdHlwZSBBY3Rpb25NYXRjaGVyRGVzY3JpcHRpb25Db2xsZWN0aW9uPFM+ID0gQXJyYXk8XHJcbiAgQWN0aW9uTWF0Y2hlckRlc2NyaXB0aW9uPFMsIGFueT5cclxuPlxyXG5cclxuLyoqXHJcbiAqIEEgKmNhc2UgcmVkdWNlciogaXMgYSByZWR1Y2VyIGZ1bmN0aW9uIGZvciBhIHNwZWNpZmljIGFjdGlvbiB0eXBlLiBDYXNlXHJcbiAqIHJlZHVjZXJzIGNhbiBiZSBjb21wb3NlZCB0byBmdWxsIHJlZHVjZXJzIHVzaW5nIGBjcmVhdGVSZWR1Y2VyKClgLlxyXG4gKlxyXG4gKiBVbmxpa2UgYSBub3JtYWwgUmVkdXggcmVkdWNlciwgYSBjYXNlIHJlZHVjZXIgaXMgbmV2ZXIgY2FsbGVkIHdpdGggYW5cclxuICogYHVuZGVmaW5lZGAgc3RhdGUgdG8gZGV0ZXJtaW5lIHRoZSBpbml0aWFsIHN0YXRlLiBJbnN0ZWFkLCB0aGUgaW5pdGlhbFxyXG4gKiBzdGF0ZSBpcyBleHBsaWNpdGx5IHNwZWNpZmllZCBhcyBhbiBhcmd1bWVudCB0byBgY3JlYXRlUmVkdWNlcigpYC5cclxuICpcclxuICogSW4gYWRkaXRpb24sIGEgY2FzZSByZWR1Y2VyIGNhbiBjaG9vc2UgdG8gbXV0YXRlIHRoZSBwYXNzZWQtaW4gYHN0YXRlYFxyXG4gKiB2YWx1ZSBkaXJlY3RseSBpbnN0ZWFkIG9mIHJldHVybmluZyBhIG5ldyBzdGF0ZS4gVGhpcyBkb2VzIG5vdCBhY3R1YWxseVxyXG4gKiBjYXVzZSB0aGUgc3RvcmUgc3RhdGUgdG8gYmUgbXV0YXRlZCBkaXJlY3RseTsgaW5zdGVhZCwgdGhhbmtzIHRvXHJcbiAqIFtpbW1lcl0oaHR0cHM6Ly9naXRodWIuY29tL213ZXN0c3RyYXRlL2ltbWVyKSwgdGhlIG11dGF0aW9ucyBhcmVcclxuICogdHJhbnNsYXRlZCB0byBjb3B5IG9wZXJhdGlvbnMgdGhhdCByZXN1bHQgaW4gYSBuZXcgc3RhdGUuXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCB0eXBlIENhc2VSZWR1Y2VyPFMgPSBhbnksIEEgZXh0ZW5kcyBBY3Rpb24gPSBBbnlBY3Rpb24+ID0gKFxyXG4gIHN0YXRlOiBEcmFmdDxTPixcclxuICBhY3Rpb246IEFcclxuKSA9PiBOb0luZmVyPFM+IHwgdm9pZCB8IERyYWZ0PE5vSW5mZXI8Uz4+XHJcblxyXG4vKipcclxuICogQSBtYXBwaW5nIGZyb20gYWN0aW9uIHR5cGVzIHRvIGNhc2UgcmVkdWNlcnMgZm9yIGBjcmVhdGVSZWR1Y2VyKClgLlxyXG4gKlxyXG4gKiBAZGVwcmVjYXRlZCBUaGlzIHNob3VsZCBub3QgYmUgdXNlZCBtYW51YWxseSAtIGl0IGlzIG9ubHkgdXNlZFxyXG4gKiAgICAgICAgICAgICBmb3IgaW50ZXJuYWwgaW5mZXJlbmNlIHB1cnBvc2VzIGFuZCB1c2luZyBpdCBtYW51YWxseVxyXG4gKiAgICAgICAgICAgICB3b3VsZCBsZWFkIHRvIHR5cGUgZXJhc3VyZS5cclxuICogICAgICAgICAgICAgSXQgbWlnaHQgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBDYXNlUmVkdWNlcnM8UywgQVMgZXh0ZW5kcyBBY3Rpb25zPiA9IHtcclxuICBbVCBpbiBrZXlvZiBBU106IEFTW1RdIGV4dGVuZHMgQWN0aW9uID8gQ2FzZVJlZHVjZXI8UywgQVNbVF0+IDogdm9pZFxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBOb3RGdW5jdGlvbjxUPiA9IFQgZXh0ZW5kcyBGdW5jdGlvbiA/IG5ldmVyIDogVFxyXG5cclxuZnVuY3Rpb24gaXNTdGF0ZUZ1bmN0aW9uPFM+KHg6IHVua25vd24pOiB4IGlzICgpID0+IFMge1xyXG4gIHJldHVybiB0eXBlb2YgeCA9PT0gJ2Z1bmN0aW9uJ1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBSZWR1Y2VyV2l0aEluaXRpYWxTdGF0ZTxTIGV4dGVuZHMgTm90RnVuY3Rpb248YW55Pj4gPSBSZWR1Y2VyPFM+ICYge1xyXG4gIGdldEluaXRpYWxTdGF0ZTogKCkgPT4gU1xyXG59XHJcblxyXG5sZXQgaGFzV2FybmVkQWJvdXRPYmplY3ROb3RhdGlvbiA9IGZhbHNlXHJcblxyXG4vKipcclxuICogQSB1dGlsaXR5IGZ1bmN0aW9uIHRoYXQgYWxsb3dzIGRlZmluaW5nIGEgcmVkdWNlciBhcyBhIG1hcHBpbmcgZnJvbSBhY3Rpb25cclxuICogdHlwZSB0byAqY2FzZSByZWR1Y2VyKiBmdW5jdGlvbnMgdGhhdCBoYW5kbGUgdGhlc2UgYWN0aW9uIHR5cGVzLiBUaGVcclxuICogcmVkdWNlcidzIGluaXRpYWwgc3RhdGUgaXMgcGFzc2VkIGFzIHRoZSBmaXJzdCBhcmd1bWVudC5cclxuICpcclxuICogQHJlbWFya3NcclxuICogVGhlIGJvZHkgb2YgZXZlcnkgY2FzZSByZWR1Y2VyIGlzIGltcGxpY2l0bHkgd3JhcHBlZCB3aXRoIGEgY2FsbCB0b1xyXG4gKiBgcHJvZHVjZSgpYCBmcm9tIHRoZSBbaW1tZXJdKGh0dHBzOi8vZ2l0aHViLmNvbS9td2VzdHN0cmF0ZS9pbW1lcikgbGlicmFyeS5cclxuICogVGhpcyBtZWFucyB0aGF0IHJhdGhlciB0aGFuIHJldHVybmluZyBhIG5ldyBzdGF0ZSBvYmplY3QsIHlvdSBjYW4gYWxzb1xyXG4gKiBtdXRhdGUgdGhlIHBhc3NlZC1pbiBzdGF0ZSBvYmplY3QgZGlyZWN0bHk7IHRoZXNlIG11dGF0aW9ucyB3aWxsIHRoZW4gYmVcclxuICogYXV0b21hdGljYWxseSBhbmQgZWZmaWNpZW50bHkgdHJhbnNsYXRlZCBpbnRvIGNvcGllcywgZ2l2aW5nIHlvdSBib3RoXHJcbiAqIGNvbnZlbmllbmNlIGFuZCBpbW11dGFiaWxpdHkuXHJcbiAqXHJcbiAqIEBvdmVybG9hZFN1bW1hcnlcclxuICogVGhpcyBvdmVybG9hZCBhY2NlcHRzIGEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCByZWNlaXZlcyBhIGBidWlsZGVyYCBvYmplY3QgYXMgaXRzIGFyZ3VtZW50LlxyXG4gKiBUaGF0IGJ1aWxkZXIgcHJvdmlkZXMgYGFkZENhc2VgLCBgYWRkTWF0Y2hlcmAgYW5kIGBhZGREZWZhdWx0Q2FzZWAgZnVuY3Rpb25zIHRoYXQgbWF5IGJlXHJcbiAqIGNhbGxlZCB0byBkZWZpbmUgd2hhdCBhY3Rpb25zIHRoaXMgcmVkdWNlciB3aWxsIGhhbmRsZS5cclxuICpcclxuICogQHBhcmFtIGluaXRpYWxTdGF0ZSAtIGBTdGF0ZSB8ICgoKSA9PiBTdGF0ZSlgOiBUaGUgaW5pdGlhbCBzdGF0ZSB0aGF0IHNob3VsZCBiZSB1c2VkIHdoZW4gdGhlIHJlZHVjZXIgaXMgY2FsbGVkIHRoZSBmaXJzdCB0aW1lLiBUaGlzIG1heSBhbHNvIGJlIGEgXCJsYXp5IGluaXRpYWxpemVyXCIgZnVuY3Rpb24sIHdoaWNoIHNob3VsZCByZXR1cm4gYW4gaW5pdGlhbCBzdGF0ZSB2YWx1ZSB3aGVuIGNhbGxlZC4gVGhpcyB3aWxsIGJlIHVzZWQgd2hlbmV2ZXIgdGhlIHJlZHVjZXIgaXMgY2FsbGVkIHdpdGggYHVuZGVmaW5lZGAgYXMgaXRzIHN0YXRlIHZhbHVlLCBhbmQgaXMgcHJpbWFyaWx5IHVzZWZ1bCBmb3IgY2FzZXMgbGlrZSByZWFkaW5nIGluaXRpYWwgc3RhdGUgZnJvbSBgbG9jYWxTdG9yYWdlYC5cclxuICogQHBhcmFtIGJ1aWxkZXJDYWxsYmFjayAtIGAoYnVpbGRlcjogQnVpbGRlcikgPT4gdm9pZGAgQSBjYWxsYmFjayB0aGF0IHJlY2VpdmVzIGEgKmJ1aWxkZXIqIG9iamVjdCB0byBkZWZpbmVcclxuICogICBjYXNlIHJlZHVjZXJzIHZpYSBjYWxscyB0byBgYnVpbGRlci5hZGRDYXNlKGFjdGlvbkNyZWF0b3JPclR5cGUsIHJlZHVjZXIpYC5cclxuICogQGV4YW1wbGVcclxuYGBgdHNcclxuaW1wb3J0IHtcclxuICBjcmVhdGVBY3Rpb24sXHJcbiAgY3JlYXRlUmVkdWNlcixcclxuICBBbnlBY3Rpb24sXHJcbiAgUGF5bG9hZEFjdGlvbixcclxufSBmcm9tIFwiQHJlZHV4anMvdG9vbGtpdFwiO1xyXG5cclxuY29uc3QgaW5jcmVtZW50ID0gY3JlYXRlQWN0aW9uPG51bWJlcj4oXCJpbmNyZW1lbnRcIik7XHJcbmNvbnN0IGRlY3JlbWVudCA9IGNyZWF0ZUFjdGlvbjxudW1iZXI+KFwiZGVjcmVtZW50XCIpO1xyXG5cclxuZnVuY3Rpb24gaXNBY3Rpb25XaXRoTnVtYmVyUGF5bG9hZChcclxuICBhY3Rpb246IEFueUFjdGlvblxyXG4pOiBhY3Rpb24gaXMgUGF5bG9hZEFjdGlvbjxudW1iZXI+IHtcclxuICByZXR1cm4gdHlwZW9mIGFjdGlvbi5wYXlsb2FkID09PSBcIm51bWJlclwiO1xyXG59XHJcblxyXG5jb25zdCByZWR1Y2VyID0gY3JlYXRlUmVkdWNlcihcclxuICB7XHJcbiAgICBjb3VudGVyOiAwLFxyXG4gICAgc3VtT2ZOdW1iZXJQYXlsb2FkczogMCxcclxuICAgIHVuaGFuZGxlZEFjdGlvbnM6IDAsXHJcbiAgfSxcclxuICAoYnVpbGRlcikgPT4ge1xyXG4gICAgYnVpbGRlclxyXG4gICAgICAuYWRkQ2FzZShpbmNyZW1lbnQsIChzdGF0ZSwgYWN0aW9uKSA9PiB7XHJcbiAgICAgICAgLy8gYWN0aW9uIGlzIGluZmVycmVkIGNvcnJlY3RseSBoZXJlXHJcbiAgICAgICAgc3RhdGUuY291bnRlciArPSBhY3Rpb24ucGF5bG9hZDtcclxuICAgICAgfSlcclxuICAgICAgLy8gWW91IGNhbiBjaGFpbiBjYWxscywgb3IgaGF2ZSBzZXBhcmF0ZSBgYnVpbGRlci5hZGRDYXNlKClgIGxpbmVzIGVhY2ggdGltZVxyXG4gICAgICAuYWRkQ2FzZShkZWNyZW1lbnQsIChzdGF0ZSwgYWN0aW9uKSA9PiB7XHJcbiAgICAgICAgc3RhdGUuY291bnRlciAtPSBhY3Rpb24ucGF5bG9hZDtcclxuICAgICAgfSlcclxuICAgICAgLy8gWW91IGNhbiBhcHBseSBhIFwibWF0Y2hlciBmdW5jdGlvblwiIHRvIGluY29taW5nIGFjdGlvbnNcclxuICAgICAgLmFkZE1hdGNoZXIoaXNBY3Rpb25XaXRoTnVtYmVyUGF5bG9hZCwgKHN0YXRlLCBhY3Rpb24pID0+IHt9KVxyXG4gICAgICAvLyBhbmQgcHJvdmlkZSBhIGRlZmF1bHQgY2FzZSBpZiBubyBvdGhlciBoYW5kbGVycyBtYXRjaGVkXHJcbiAgICAgIC5hZGREZWZhdWx0Q2FzZSgoc3RhdGUsIGFjdGlvbikgPT4ge30pO1xyXG4gIH1cclxuKTtcclxuYGBgXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZWR1Y2VyPFMgZXh0ZW5kcyBOb3RGdW5jdGlvbjxhbnk+PihcclxuICBpbml0aWFsU3RhdGU6IFMgfCAoKCkgPT4gUyksXHJcbiAgYnVpbGRlckNhbGxiYWNrOiAoYnVpbGRlcjogQWN0aW9uUmVkdWNlck1hcEJ1aWxkZXI8Uz4pID0+IHZvaWRcclxuKTogUmVkdWNlcldpdGhJbml0aWFsU3RhdGU8Uz5cclxuXHJcbi8qKlxyXG4gKiBBIHV0aWxpdHkgZnVuY3Rpb24gdGhhdCBhbGxvd3MgZGVmaW5pbmcgYSByZWR1Y2VyIGFzIGEgbWFwcGluZyBmcm9tIGFjdGlvblxyXG4gKiB0eXBlIHRvICpjYXNlIHJlZHVjZXIqIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZSB0aGVzZSBhY3Rpb24gdHlwZXMuIFRoZVxyXG4gKiByZWR1Y2VyJ3MgaW5pdGlhbCBzdGF0ZSBpcyBwYXNzZWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50LlxyXG4gKlxyXG4gKiBUaGUgYm9keSBvZiBldmVyeSBjYXNlIHJlZHVjZXIgaXMgaW1wbGljaXRseSB3cmFwcGVkIHdpdGggYSBjYWxsIHRvXHJcbiAqIGBwcm9kdWNlKClgIGZyb20gdGhlIFtpbW1lcl0oaHR0cHM6Ly9naXRodWIuY29tL213ZXN0c3RyYXRlL2ltbWVyKSBsaWJyYXJ5LlxyXG4gKiBUaGlzIG1lYW5zIHRoYXQgcmF0aGVyIHRoYW4gcmV0dXJuaW5nIGEgbmV3IHN0YXRlIG9iamVjdCwgeW91IGNhbiBhbHNvXHJcbiAqIG11dGF0ZSB0aGUgcGFzc2VkLWluIHN0YXRlIG9iamVjdCBkaXJlY3RseTsgdGhlc2UgbXV0YXRpb25zIHdpbGwgdGhlbiBiZVxyXG4gKiBhdXRvbWF0aWNhbGx5IGFuZCBlZmZpY2llbnRseSB0cmFuc2xhdGVkIGludG8gY29waWVzLCBnaXZpbmcgeW91IGJvdGhcclxuICogY29udmVuaWVuY2UgYW5kIGltbXV0YWJpbGl0eS5cclxuICogXHJcbiAqIEBvdmVybG9hZFN1bW1hcnlcclxuICogVGhpcyBvdmVybG9hZCBhY2NlcHRzIGFuIG9iamVjdCB3aGVyZSB0aGUga2V5cyBhcmUgc3RyaW5nIGFjdGlvbiB0eXBlcywgYW5kIHRoZSB2YWx1ZXNcclxuICogYXJlIGNhc2UgcmVkdWNlciBmdW5jdGlvbnMgdG8gaGFuZGxlIHRob3NlIGFjdGlvbiB0eXBlcy5cclxuICpcclxuICogQHBhcmFtIGluaXRpYWxTdGF0ZSAtIGBTdGF0ZSB8ICgoKSA9PiBTdGF0ZSlgOiBUaGUgaW5pdGlhbCBzdGF0ZSB0aGF0IHNob3VsZCBiZSB1c2VkIHdoZW4gdGhlIHJlZHVjZXIgaXMgY2FsbGVkIHRoZSBmaXJzdCB0aW1lLiBUaGlzIG1heSBhbHNvIGJlIGEgXCJsYXp5IGluaXRpYWxpemVyXCIgZnVuY3Rpb24sIHdoaWNoIHNob3VsZCByZXR1cm4gYW4gaW5pdGlhbCBzdGF0ZSB2YWx1ZSB3aGVuIGNhbGxlZC4gVGhpcyB3aWxsIGJlIHVzZWQgd2hlbmV2ZXIgdGhlIHJlZHVjZXIgaXMgY2FsbGVkIHdpdGggYHVuZGVmaW5lZGAgYXMgaXRzIHN0YXRlIHZhbHVlLCBhbmQgaXMgcHJpbWFyaWx5IHVzZWZ1bCBmb3IgY2FzZXMgbGlrZSByZWFkaW5nIGluaXRpYWwgc3RhdGUgZnJvbSBgbG9jYWxTdG9yYWdlYC5cclxuICogQHBhcmFtIGFjdGlvbnNNYXAgLSBBbiBvYmplY3QgbWFwcGluZyBmcm9tIGFjdGlvbiB0eXBlcyB0byBfY2FzZSByZWR1Y2Vyc18sIGVhY2ggb2Ygd2hpY2ggaGFuZGxlcyBvbmUgc3BlY2lmaWMgYWN0aW9uIHR5cGUuXHJcbiAqIEBwYXJhbSBhY3Rpb25NYXRjaGVycyAtIEFuIGFycmF5IG9mIG1hdGNoZXIgZGVmaW5pdGlvbnMgaW4gdGhlIGZvcm0gYHttYXRjaGVyLCByZWR1Y2VyfWAuXHJcbiAqICAgQWxsIG1hdGNoaW5nIHJlZHVjZXJzIHdpbGwgYmUgZXhlY3V0ZWQgaW4gb3JkZXIsIGluZGVwZW5kZW50bHkgaWYgYSBjYXNlIHJlZHVjZXIgbWF0Y2hlZCBvciBub3QuXHJcbiAqIEBwYXJhbSBkZWZhdWx0Q2FzZVJlZHVjZXIgLSBBIFwiZGVmYXVsdCBjYXNlXCIgcmVkdWNlciB0aGF0IGlzIGV4ZWN1dGVkIGlmIG5vIGNhc2UgcmVkdWNlciBhbmQgbm8gbWF0Y2hlclxyXG4gKiAgIHJlZHVjZXIgd2FzIGV4ZWN1dGVkIGZvciB0aGlzIGFjdGlvbi5cclxuICpcclxuICogQGV4YW1wbGVcclxuYGBganNcclxuY29uc3QgY291bnRlclJlZHVjZXIgPSBjcmVhdGVSZWR1Y2VyKDAsIHtcclxuICBpbmNyZW1lbnQ6IChzdGF0ZSwgYWN0aW9uKSA9PiBzdGF0ZSArIGFjdGlvbi5wYXlsb2FkLFxyXG4gIGRlY3JlbWVudDogKHN0YXRlLCBhY3Rpb24pID0+IHN0YXRlIC0gYWN0aW9uLnBheWxvYWRcclxufSlcclxuXHJcbi8vIEFsdGVybmF0ZWx5LCB1c2UgYSBcImxhenkgaW5pdGlhbGl6ZXJcIiB0byBwcm92aWRlIHRoZSBpbml0aWFsIHN0YXRlXHJcbi8vICh3b3JrcyB3aXRoIGVpdGhlciBmb3JtIG9mIGNyZWF0ZVJlZHVjZXIpXHJcbmNvbnN0IGluaXRpYWxTdGF0ZSA9ICgpID0+IDBcclxuY29uc3QgY291bnRlclJlZHVjZXIgPSBjcmVhdGVSZWR1Y2VyKGluaXRpYWxTdGF0ZSwge1xyXG4gIGluY3JlbWVudDogKHN0YXRlLCBhY3Rpb24pID0+IHN0YXRlICsgYWN0aW9uLnBheWxvYWQsXHJcbiAgZGVjcmVtZW50OiAoc3RhdGUsIGFjdGlvbikgPT4gc3RhdGUgLSBhY3Rpb24ucGF5bG9hZFxyXG59KVxyXG5gYGBcclxuIFxyXG4gKiBBY3Rpb24gY3JlYXRvcnMgdGhhdCB3ZXJlIGdlbmVyYXRlZCB1c2luZyBbYGNyZWF0ZUFjdGlvbmBdKC4vY3JlYXRlQWN0aW9uKSBtYXkgYmUgdXNlZCBkaXJlY3RseSBhcyB0aGUga2V5cyBoZXJlLCB1c2luZyBjb21wdXRlZCBwcm9wZXJ0eSBzeW50YXg6XHJcblxyXG5gYGBqc1xyXG5jb25zdCBpbmNyZW1lbnQgPSBjcmVhdGVBY3Rpb24oJ2luY3JlbWVudCcpXHJcbmNvbnN0IGRlY3JlbWVudCA9IGNyZWF0ZUFjdGlvbignZGVjcmVtZW50JylcclxuXHJcbmNvbnN0IGNvdW50ZXJSZWR1Y2VyID0gY3JlYXRlUmVkdWNlcigwLCB7XHJcbiAgW2luY3JlbWVudF06IChzdGF0ZSwgYWN0aW9uKSA9PiBzdGF0ZSArIGFjdGlvbi5wYXlsb2FkLFxyXG4gIFtkZWNyZW1lbnQudHlwZV06IChzdGF0ZSwgYWN0aW9uKSA9PiBzdGF0ZSAtIGFjdGlvbi5wYXlsb2FkXHJcbn0pXHJcbmBgYFxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVkdWNlcjxcclxuICBTIGV4dGVuZHMgTm90RnVuY3Rpb248YW55PixcclxuICBDUiBleHRlbmRzIENhc2VSZWR1Y2VyczxTLCBhbnk+ID0gQ2FzZVJlZHVjZXJzPFMsIGFueT5cclxuPihcclxuICBpbml0aWFsU3RhdGU6IFMgfCAoKCkgPT4gUyksXHJcbiAgYWN0aW9uc01hcDogQ1IsXHJcbiAgYWN0aW9uTWF0Y2hlcnM/OiBBY3Rpb25NYXRjaGVyRGVzY3JpcHRpb25Db2xsZWN0aW9uPFM+LFxyXG4gIGRlZmF1bHRDYXNlUmVkdWNlcj86IENhc2VSZWR1Y2VyPFM+XHJcbik6IFJlZHVjZXJXaXRoSW5pdGlhbFN0YXRlPFM+XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVkdWNlcjxTIGV4dGVuZHMgTm90RnVuY3Rpb248YW55Pj4oXHJcbiAgaW5pdGlhbFN0YXRlOiBTIHwgKCgpID0+IFMpLFxyXG4gIG1hcE9yQnVpbGRlckNhbGxiYWNrOlxyXG4gICAgfCBDYXNlUmVkdWNlcnM8UywgYW55PlxyXG4gICAgfCAoKGJ1aWxkZXI6IEFjdGlvblJlZHVjZXJNYXBCdWlsZGVyPFM+KSA9PiB2b2lkKSxcclxuICBhY3Rpb25NYXRjaGVyczogUmVhZG9ubHlBY3Rpb25NYXRjaGVyRGVzY3JpcHRpb25Db2xsZWN0aW9uPFM+ID0gW10sXHJcbiAgZGVmYXVsdENhc2VSZWR1Y2VyPzogQ2FzZVJlZHVjZXI8Uz5cclxuKTogUmVkdWNlcldpdGhJbml0aWFsU3RhdGU8Uz4ge1xyXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XHJcbiAgICBpZiAodHlwZW9mIG1hcE9yQnVpbGRlckNhbGxiYWNrID09PSAnb2JqZWN0Jykge1xyXG4gICAgICBpZiAoIWhhc1dhcm5lZEFib3V0T2JqZWN0Tm90YXRpb24pIHtcclxuICAgICAgICBoYXNXYXJuZWRBYm91dE9iamVjdE5vdGF0aW9uID0gdHJ1ZVxyXG4gICAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICAgIFwiVGhlIG9iamVjdCBub3RhdGlvbiBmb3IgYGNyZWF0ZVJlZHVjZXJgIGlzIGRlcHJlY2F0ZWQsIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gUlRLIDIuMC4gUGxlYXNlIHVzZSB0aGUgJ2J1aWxkZXIgY2FsbGJhY2snIG5vdGF0aW9uIGluc3RlYWQ6IGh0dHBzOi8vcmVkdXgtdG9vbGtpdC5qcy5vcmcvYXBpL2NyZWF0ZVJlZHVjZXJcIlxyXG4gICAgICAgIClcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbGV0IFthY3Rpb25zTWFwLCBmaW5hbEFjdGlvbk1hdGNoZXJzLCBmaW5hbERlZmF1bHRDYXNlUmVkdWNlcl0gPVxyXG4gICAgdHlwZW9mIG1hcE9yQnVpbGRlckNhbGxiYWNrID09PSAnZnVuY3Rpb24nXHJcbiAgICAgID8gZXhlY3V0ZVJlZHVjZXJCdWlsZGVyQ2FsbGJhY2sobWFwT3JCdWlsZGVyQ2FsbGJhY2spXHJcbiAgICAgIDogW21hcE9yQnVpbGRlckNhbGxiYWNrLCBhY3Rpb25NYXRjaGVycywgZGVmYXVsdENhc2VSZWR1Y2VyXVxyXG5cclxuICAvLyBFbnN1cmUgdGhlIGluaXRpYWwgc3RhdGUgZ2V0cyBmcm96ZW4gZWl0aGVyIHdheSAoaWYgZHJhZnRhYmxlKVxyXG4gIGxldCBnZXRJbml0aWFsU3RhdGU6ICgpID0+IFNcclxuICBpZiAoaXNTdGF0ZUZ1bmN0aW9uKGluaXRpYWxTdGF0ZSkpIHtcclxuICAgIGdldEluaXRpYWxTdGF0ZSA9ICgpID0+IGZyZWV6ZURyYWZ0YWJsZShpbml0aWFsU3RhdGUoKSlcclxuICB9IGVsc2Uge1xyXG4gICAgY29uc3QgZnJvemVuSW5pdGlhbFN0YXRlID0gZnJlZXplRHJhZnRhYmxlKGluaXRpYWxTdGF0ZSlcclxuICAgIGdldEluaXRpYWxTdGF0ZSA9ICgpID0+IGZyb3plbkluaXRpYWxTdGF0ZVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gcmVkdWNlcihzdGF0ZSA9IGdldEluaXRpYWxTdGF0ZSgpLCBhY3Rpb246IGFueSk6IFMge1xyXG4gICAgbGV0IGNhc2VSZWR1Y2VycyA9IFtcclxuICAgICAgYWN0aW9uc01hcFthY3Rpb24udHlwZV0sXHJcbiAgICAgIC4uLmZpbmFsQWN0aW9uTWF0Y2hlcnNcclxuICAgICAgICAuZmlsdGVyKCh7IG1hdGNoZXIgfSkgPT4gbWF0Y2hlcihhY3Rpb24pKVxyXG4gICAgICAgIC5tYXAoKHsgcmVkdWNlciB9KSA9PiByZWR1Y2VyKSxcclxuICAgIF1cclxuICAgIGlmIChjYXNlUmVkdWNlcnMuZmlsdGVyKChjcikgPT4gISFjcikubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIGNhc2VSZWR1Y2VycyA9IFtmaW5hbERlZmF1bHRDYXNlUmVkdWNlcl1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY2FzZVJlZHVjZXJzLnJlZHVjZSgocHJldmlvdXNTdGF0ZSwgY2FzZVJlZHVjZXIpOiBTID0+IHtcclxuICAgICAgaWYgKGNhc2VSZWR1Y2VyKSB7XHJcbiAgICAgICAgaWYgKGlzRHJhZnQocHJldmlvdXNTdGF0ZSkpIHtcclxuICAgICAgICAgIC8vIElmIGl0J3MgYWxyZWFkeSBhIGRyYWZ0LCB3ZSBtdXN0IGFscmVhZHkgYmUgaW5zaWRlIGEgYGNyZWF0ZU5leHRTdGF0ZWAgY2FsbCxcclxuICAgICAgICAgIC8vIGxpa2VseSBiZWNhdXNlIHRoaXMgaXMgYmVpbmcgd3JhcHBlZCBpbiBgY3JlYXRlUmVkdWNlcmAsIGBjcmVhdGVTbGljZWAsIG9yIG5lc3RlZFxyXG4gICAgICAgICAgLy8gaW5zaWRlIGFuIGV4aXN0aW5nIGRyYWZ0LiBJdCdzIHNhZmUgdG8ganVzdCBwYXNzIHRoZSBkcmFmdCB0byB0aGUgbXV0YXRvci5cclxuICAgICAgICAgIGNvbnN0IGRyYWZ0ID0gcHJldmlvdXNTdGF0ZSBhcyBEcmFmdDxTPiAvLyBXZSBjYW4gYXNzdW1lIHRoaXMgaXMgYWxyZWFkeSBhIGRyYWZ0XHJcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBjYXNlUmVkdWNlcihkcmFmdCwgYWN0aW9uKVxyXG5cclxuICAgICAgICAgIGlmIChyZXN1bHQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gcHJldmlvdXNTdGF0ZVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHJldHVybiByZXN1bHQgYXMgU1xyXG4gICAgICAgIH0gZWxzZSBpZiAoIWlzRHJhZnRhYmxlKHByZXZpb3VzU3RhdGUpKSB7XHJcbiAgICAgICAgICAvLyBJZiBzdGF0ZSBpcyBub3QgZHJhZnRhYmxlIChleDogYSBwcmltaXRpdmUsIHN1Y2ggYXMgMCksIHdlIHdhbnQgdG8gZGlyZWN0bHlcclxuICAgICAgICAgIC8vIHJldHVybiB0aGUgY2FzZVJlZHVjZXIgZnVuYyBhbmQgbm90IHdyYXAgaXQgd2l0aCBwcm9kdWNlLlxyXG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gY2FzZVJlZHVjZXIocHJldmlvdXNTdGF0ZSBhcyBhbnksIGFjdGlvbilcclxuXHJcbiAgICAgICAgICBpZiAocmVzdWx0ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgaWYgKHByZXZpb3VzU3RhdGUgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gcHJldmlvdXNTdGF0ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRocm93IEVycm9yKFxyXG4gICAgICAgICAgICAgICdBIGNhc2UgcmVkdWNlciBvbiBhIG5vbi1kcmFmdGFibGUgdmFsdWUgbXVzdCBub3QgcmV0dXJuIHVuZGVmaW5lZCdcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHJldHVybiByZXN1bHQgYXMgU1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyBAdHMtaWdub3JlIGNyZWF0ZU5leHRTdGF0ZSgpIHByb2R1Y2VzIGFuIEltbXV0YWJsZTxEcmFmdDxTPj4gcmF0aGVyXHJcbiAgICAgICAgICAvLyB0aGFuIGFuIEltbXV0YWJsZTxTPiwgYW5kIFR5cGVTY3JpcHQgY2Fubm90IGZpbmQgb3V0IGhvdyB0byByZWNvbmNpbGVcclxuICAgICAgICAgIC8vIHRoZXNlIHR3byB0eXBlcy5cclxuICAgICAgICAgIHJldHVybiBjcmVhdGVOZXh0U3RhdGUocHJldmlvdXNTdGF0ZSwgKGRyYWZ0OiBEcmFmdDxTPikgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gY2FzZVJlZHVjZXIoZHJhZnQsIGFjdGlvbilcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gcHJldmlvdXNTdGF0ZVxyXG4gICAgfSwgc3RhdGUpXHJcbiAgfVxyXG5cclxuICByZWR1Y2VyLmdldEluaXRpYWxTdGF0ZSA9IGdldEluaXRpYWxTdGF0ZVxyXG5cclxuICByZXR1cm4gcmVkdWNlciBhcyBSZWR1Y2VyV2l0aEluaXRpYWxTdGF0ZTxTPlxyXG59XHJcbiIsICJpbXBvcnQgdHlwZSB7IEFjdGlvbiwgQW55QWN0aW9uIH0gZnJvbSAncmVkdXgnXHJcbmltcG9ydCB0eXBlIHtcclxuICBDYXNlUmVkdWNlcixcclxuICBDYXNlUmVkdWNlcnMsXHJcbiAgQWN0aW9uTWF0Y2hlckRlc2NyaXB0aW9uQ29sbGVjdGlvbixcclxufSBmcm9tICcuL2NyZWF0ZVJlZHVjZXInXHJcbmltcG9ydCB0eXBlIHsgVHlwZUd1YXJkIH0gZnJvbSAnLi90c0hlbHBlcnMnXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFR5cGVkQWN0aW9uQ3JlYXRvcjxUeXBlIGV4dGVuZHMgc3RyaW5nPiB7XHJcbiAgKC4uLmFyZ3M6IGFueVtdKTogQWN0aW9uPFR5cGU+XHJcbiAgdHlwZTogVHlwZVxyXG59XHJcblxyXG4vKipcclxuICogQSBidWlsZGVyIGZvciBhbiBhY3Rpb24gPC0+IHJlZHVjZXIgbWFwLlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIEFjdGlvblJlZHVjZXJNYXBCdWlsZGVyPFN0YXRlPiB7XHJcbiAgLyoqXHJcbiAgICogQWRkcyBhIGNhc2UgcmVkdWNlciB0byBoYW5kbGUgYSBzaW5nbGUgZXhhY3QgYWN0aW9uIHR5cGUuXHJcbiAgICogQHJlbWFya3NcclxuICAgKiBBbGwgY2FsbHMgdG8gYGJ1aWxkZXIuYWRkQ2FzZWAgbXVzdCBjb21lIGJlZm9yZSBhbnkgY2FsbHMgdG8gYGJ1aWxkZXIuYWRkTWF0Y2hlcmAgb3IgYGJ1aWxkZXIuYWRkRGVmYXVsdENhc2VgLlxyXG4gICAqIEBwYXJhbSBhY3Rpb25DcmVhdG9yIC0gRWl0aGVyIGEgcGxhaW4gYWN0aW9uIHR5cGUgc3RyaW5nLCBvciBhbiBhY3Rpb24gY3JlYXRvciBnZW5lcmF0ZWQgYnkgW2BjcmVhdGVBY3Rpb25gXSguL2NyZWF0ZUFjdGlvbikgdGhhdCBjYW4gYmUgdXNlZCB0byBkZXRlcm1pbmUgdGhlIGFjdGlvbiB0eXBlLlxyXG4gICAqIEBwYXJhbSByZWR1Y2VyIC0gVGhlIGFjdHVhbCBjYXNlIHJlZHVjZXIgZnVuY3Rpb24uXHJcbiAgICovXHJcbiAgYWRkQ2FzZTxBY3Rpb25DcmVhdG9yIGV4dGVuZHMgVHlwZWRBY3Rpb25DcmVhdG9yPHN0cmluZz4+KFxyXG4gICAgYWN0aW9uQ3JlYXRvcjogQWN0aW9uQ3JlYXRvcixcclxuICAgIHJlZHVjZXI6IENhc2VSZWR1Y2VyPFN0YXRlLCBSZXR1cm5UeXBlPEFjdGlvbkNyZWF0b3I+PlxyXG4gICk6IEFjdGlvblJlZHVjZXJNYXBCdWlsZGVyPFN0YXRlPlxyXG4gIC8qKlxyXG4gICAqIEFkZHMgYSBjYXNlIHJlZHVjZXIgdG8gaGFuZGxlIGEgc2luZ2xlIGV4YWN0IGFjdGlvbiB0eXBlLlxyXG4gICAqIEByZW1hcmtzXHJcbiAgICogQWxsIGNhbGxzIHRvIGBidWlsZGVyLmFkZENhc2VgIG11c3QgY29tZSBiZWZvcmUgYW55IGNhbGxzIHRvIGBidWlsZGVyLmFkZE1hdGNoZXJgIG9yIGBidWlsZGVyLmFkZERlZmF1bHRDYXNlYC5cclxuICAgKiBAcGFyYW0gYWN0aW9uQ3JlYXRvciAtIEVpdGhlciBhIHBsYWluIGFjdGlvbiB0eXBlIHN0cmluZywgb3IgYW4gYWN0aW9uIGNyZWF0b3IgZ2VuZXJhdGVkIGJ5IFtgY3JlYXRlQWN0aW9uYF0oLi9jcmVhdGVBY3Rpb24pIHRoYXQgY2FuIGJlIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBhY3Rpb24gdHlwZS5cclxuICAgKiBAcGFyYW0gcmVkdWNlciAtIFRoZSBhY3R1YWwgY2FzZSByZWR1Y2VyIGZ1bmN0aW9uLlxyXG4gICAqL1xyXG4gIGFkZENhc2U8VHlwZSBleHRlbmRzIHN0cmluZywgQSBleHRlbmRzIEFjdGlvbjxUeXBlPj4oXHJcbiAgICB0eXBlOiBUeXBlLFxyXG4gICAgcmVkdWNlcjogQ2FzZVJlZHVjZXI8U3RhdGUsIEE+XHJcbiAgKTogQWN0aW9uUmVkdWNlck1hcEJ1aWxkZXI8U3RhdGU+XHJcblxyXG4gIC8qKlxyXG4gICAqIEFsbG93cyB5b3UgdG8gbWF0Y2ggeW91ciBpbmNvbWluZyBhY3Rpb25zIGFnYWluc3QgeW91ciBvd24gZmlsdGVyIGZ1bmN0aW9uIGluc3RlYWQgb2Ygb25seSB0aGUgYGFjdGlvbi50eXBlYCBwcm9wZXJ0eS5cclxuICAgKiBAcmVtYXJrc1xyXG4gICAqIElmIG11bHRpcGxlIG1hdGNoZXIgcmVkdWNlcnMgbWF0Y2gsIGFsbCBvZiB0aGVtIHdpbGwgYmUgZXhlY3V0ZWQgaW4gdGhlIG9yZGVyXHJcbiAgICogdGhleSB3ZXJlIGRlZmluZWQgaW4gLSBldmVuIGlmIGEgY2FzZSByZWR1Y2VyIGFscmVhZHkgbWF0Y2hlZC5cclxuICAgKiBBbGwgY2FsbHMgdG8gYGJ1aWxkZXIuYWRkTWF0Y2hlcmAgbXVzdCBjb21lIGFmdGVyIGFueSBjYWxscyB0byBgYnVpbGRlci5hZGRDYXNlYCBhbmQgYmVmb3JlIGFueSBjYWxscyB0byBgYnVpbGRlci5hZGREZWZhdWx0Q2FzZWAuXHJcbiAgICogQHBhcmFtIG1hdGNoZXIgLSBBIG1hdGNoZXIgZnVuY3Rpb24uIEluIFR5cGVTY3JpcHQsIHRoaXMgc2hvdWxkIGJlIGEgW3R5cGUgcHJlZGljYXRlXShodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay8yL25hcnJvd2luZy5odG1sI3VzaW5nLXR5cGUtcHJlZGljYXRlcylcclxuICAgKiAgIGZ1bmN0aW9uXHJcbiAgICogQHBhcmFtIHJlZHVjZXIgLSBUaGUgYWN0dWFsIGNhc2UgcmVkdWNlciBmdW5jdGlvbi5cclxuICAgKlxyXG4gICAqIEBleGFtcGxlXHJcbmBgYHRzXHJcbmltcG9ydCB7XHJcbiAgY3JlYXRlQWN0aW9uLFxyXG4gIGNyZWF0ZVJlZHVjZXIsXHJcbiAgQXN5bmNUaHVuayxcclxuICBBbnlBY3Rpb24sXHJcbn0gZnJvbSBcIkByZWR1eGpzL3Rvb2xraXRcIjtcclxuXHJcbnR5cGUgR2VuZXJpY0FzeW5jVGh1bmsgPSBBc3luY1RodW5rPHVua25vd24sIHVua25vd24sIGFueT47XHJcblxyXG50eXBlIFBlbmRpbmdBY3Rpb24gPSBSZXR1cm5UeXBlPEdlbmVyaWNBc3luY1RodW5rW1wicGVuZGluZ1wiXT47XHJcbnR5cGUgUmVqZWN0ZWRBY3Rpb24gPSBSZXR1cm5UeXBlPEdlbmVyaWNBc3luY1RodW5rW1wicmVqZWN0ZWRcIl0+O1xyXG50eXBlIEZ1bGZpbGxlZEFjdGlvbiA9IFJldHVyblR5cGU8R2VuZXJpY0FzeW5jVGh1bmtbXCJmdWxmaWxsZWRcIl0+O1xyXG5cclxuY29uc3QgaW5pdGlhbFN0YXRlOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XHJcbmNvbnN0IHJlc2V0QWN0aW9uID0gY3JlYXRlQWN0aW9uKFwicmVzZXQtdHJhY2tlZC1sb2FkaW5nLXN0YXRlXCIpO1xyXG5cclxuZnVuY3Rpb24gaXNQZW5kaW5nQWN0aW9uKGFjdGlvbjogQW55QWN0aW9uKTogYWN0aW9uIGlzIFBlbmRpbmdBY3Rpb24ge1xyXG4gIHJldHVybiBhY3Rpb24udHlwZS5lbmRzV2l0aChcIi9wZW5kaW5nXCIpO1xyXG59XHJcblxyXG5jb25zdCByZWR1Y2VyID0gY3JlYXRlUmVkdWNlcihpbml0aWFsU3RhdGUsIChidWlsZGVyKSA9PiB7XHJcbiAgYnVpbGRlclxyXG4gICAgLmFkZENhc2UocmVzZXRBY3Rpb24sICgpID0+IGluaXRpYWxTdGF0ZSlcclxuICAgIC8vIG1hdGNoZXIgY2FuIGJlIGRlZmluZWQgb3V0c2lkZSBhcyBhIHR5cGUgcHJlZGljYXRlIGZ1bmN0aW9uXHJcbiAgICAuYWRkTWF0Y2hlcihpc1BlbmRpbmdBY3Rpb24sIChzdGF0ZSwgYWN0aW9uKSA9PiB7XHJcbiAgICAgIHN0YXRlW2FjdGlvbi5tZXRhLnJlcXVlc3RJZF0gPSBcInBlbmRpbmdcIjtcclxuICAgIH0pXHJcbiAgICAuYWRkTWF0Y2hlcihcclxuICAgICAgLy8gbWF0Y2hlciBjYW4gYmUgZGVmaW5lZCBpbmxpbmUgYXMgYSB0eXBlIHByZWRpY2F0ZSBmdW5jdGlvblxyXG4gICAgICAoYWN0aW9uKTogYWN0aW9uIGlzIFJlamVjdGVkQWN0aW9uID0+IGFjdGlvbi50eXBlLmVuZHNXaXRoKFwiL3JlamVjdGVkXCIpLFxyXG4gICAgICAoc3RhdGUsIGFjdGlvbikgPT4ge1xyXG4gICAgICAgIHN0YXRlW2FjdGlvbi5tZXRhLnJlcXVlc3RJZF0gPSBcInJlamVjdGVkXCI7XHJcbiAgICAgIH1cclxuICAgIClcclxuICAgIC8vIG1hdGNoZXIgY2FuIGp1c3QgcmV0dXJuIGJvb2xlYW4gYW5kIHRoZSBtYXRjaGVyIGNhbiByZWNlaXZlIGEgZ2VuZXJpYyBhcmd1bWVudFxyXG4gICAgLmFkZE1hdGNoZXI8RnVsZmlsbGVkQWN0aW9uPihcclxuICAgICAgKGFjdGlvbikgPT4gYWN0aW9uLnR5cGUuZW5kc1dpdGgoXCIvZnVsZmlsbGVkXCIpLFxyXG4gICAgICAoc3RhdGUsIGFjdGlvbikgPT4ge1xyXG4gICAgICAgIHN0YXRlW2FjdGlvbi5tZXRhLnJlcXVlc3RJZF0gPSBcImZ1bGZpbGxlZFwiO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG59KTtcclxuYGBgXHJcbiAgICovXHJcbiAgYWRkTWF0Y2hlcjxBPihcclxuICAgIG1hdGNoZXI6IFR5cGVHdWFyZDxBPiB8ICgoYWN0aW9uOiBhbnkpID0+IGJvb2xlYW4pLFxyXG4gICAgcmVkdWNlcjogQ2FzZVJlZHVjZXI8U3RhdGUsIEEgZXh0ZW5kcyBBbnlBY3Rpb24gPyBBIDogQSAmIEFueUFjdGlvbj5cclxuICApOiBPbWl0PEFjdGlvblJlZHVjZXJNYXBCdWlsZGVyPFN0YXRlPiwgJ2FkZENhc2UnPlxyXG5cclxuICAvKipcclxuICAgKiBBZGRzIGEgXCJkZWZhdWx0IGNhc2VcIiByZWR1Y2VyIHRoYXQgaXMgZXhlY3V0ZWQgaWYgbm8gY2FzZSByZWR1Y2VyIGFuZCBubyBtYXRjaGVyXHJcbiAgICogcmVkdWNlciB3YXMgZXhlY3V0ZWQgZm9yIHRoaXMgYWN0aW9uLlxyXG4gICAqIEBwYXJhbSByZWR1Y2VyIC0gVGhlIGZhbGxiYWNrIFwiZGVmYXVsdCBjYXNlXCIgcmVkdWNlciBmdW5jdGlvbi5cclxuICAgKlxyXG4gICAqIEBleGFtcGxlXHJcbmBgYHRzXHJcbmltcG9ydCB7IGNyZWF0ZVJlZHVjZXIgfSBmcm9tICdAcmVkdXhqcy90b29sa2l0J1xyXG5jb25zdCBpbml0aWFsU3RhdGUgPSB7IG90aGVyQWN0aW9uczogMCB9XHJcbmNvbnN0IHJlZHVjZXIgPSBjcmVhdGVSZWR1Y2VyKGluaXRpYWxTdGF0ZSwgYnVpbGRlciA9PiB7XHJcbiAgYnVpbGRlclxyXG4gICAgLy8gLmFkZENhc2UoLi4uKVxyXG4gICAgLy8gLmFkZE1hdGNoZXIoLi4uKVxyXG4gICAgLmFkZERlZmF1bHRDYXNlKChzdGF0ZSwgYWN0aW9uKSA9PiB7XHJcbiAgICAgIHN0YXRlLm90aGVyQWN0aW9ucysrXHJcbiAgICB9KVxyXG59KVxyXG5gYGBcclxuICAgKi9cclxuICBhZGREZWZhdWx0Q2FzZShyZWR1Y2VyOiBDYXNlUmVkdWNlcjxTdGF0ZSwgQW55QWN0aW9uPik6IHt9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBleGVjdXRlUmVkdWNlckJ1aWxkZXJDYWxsYmFjazxTPihcclxuICBidWlsZGVyQ2FsbGJhY2s6IChidWlsZGVyOiBBY3Rpb25SZWR1Y2VyTWFwQnVpbGRlcjxTPikgPT4gdm9pZFxyXG4pOiBbXHJcbiAgQ2FzZVJlZHVjZXJzPFMsIGFueT4sXHJcbiAgQWN0aW9uTWF0Y2hlckRlc2NyaXB0aW9uQ29sbGVjdGlvbjxTPixcclxuICBDYXNlUmVkdWNlcjxTLCBBbnlBY3Rpb24+IHwgdW5kZWZpbmVkXHJcbl0ge1xyXG4gIGNvbnN0IGFjdGlvbnNNYXA6IENhc2VSZWR1Y2VyczxTLCBhbnk+ID0ge31cclxuICBjb25zdCBhY3Rpb25NYXRjaGVyczogQWN0aW9uTWF0Y2hlckRlc2NyaXB0aW9uQ29sbGVjdGlvbjxTPiA9IFtdXHJcbiAgbGV0IGRlZmF1bHRDYXNlUmVkdWNlcjogQ2FzZVJlZHVjZXI8UywgQW55QWN0aW9uPiB8IHVuZGVmaW5lZFxyXG4gIGNvbnN0IGJ1aWxkZXIgPSB7XHJcbiAgICBhZGRDYXNlKFxyXG4gICAgICB0eXBlT3JBY3Rpb25DcmVhdG9yOiBzdHJpbmcgfCBUeXBlZEFjdGlvbkNyZWF0b3I8YW55PixcclxuICAgICAgcmVkdWNlcjogQ2FzZVJlZHVjZXI8Uz5cclxuICAgICkge1xyXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xyXG4gICAgICAgIC8qXHJcbiAgICAgICAgIHRvIGtlZXAgdGhlIGRlZmluaXRpb24gYnkgdGhlIHVzZXIgaW4gbGluZSB3aXRoIGFjdHVhbCBiZWhhdmlvcixcclxuICAgICAgICAgd2UgZW5mb3JjZSBgYWRkQ2FzZWAgdG8gYWx3YXlzIGJlIGNhbGxlZCBiZWZvcmUgY2FsbGluZyBgYWRkTWF0Y2hlcmBcclxuICAgICAgICAgYXMgbWF0Y2hpbmcgY2FzZXMgdGFrZSBwcmVjZWRlbmNlIG92ZXIgbWF0Y2hlcnNcclxuICAgICAgICAgKi9cclxuICAgICAgICBpZiAoYWN0aW9uTWF0Y2hlcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgICAnYGJ1aWxkZXIuYWRkQ2FzZWAgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJlZm9yZSBjYWxsaW5nIGBidWlsZGVyLmFkZE1hdGNoZXJgJ1xyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZGVmYXVsdENhc2VSZWR1Y2VyKSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgICAgICdgYnVpbGRlci5hZGRDYXNlYCBzaG91bGQgb25seSBiZSBjYWxsZWQgYmVmb3JlIGNhbGxpbmcgYGJ1aWxkZXIuYWRkRGVmYXVsdENhc2VgJ1xyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBjb25zdCB0eXBlID1cclxuICAgICAgICB0eXBlb2YgdHlwZU9yQWN0aW9uQ3JlYXRvciA9PT0gJ3N0cmluZydcclxuICAgICAgICAgID8gdHlwZU9yQWN0aW9uQ3JlYXRvclxyXG4gICAgICAgICAgOiB0eXBlT3JBY3Rpb25DcmVhdG9yLnR5cGVcclxuICAgICAgaWYgKCF0eXBlKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgJ2BidWlsZGVyLmFkZENhc2VgIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBhbiBlbXB0eSBhY3Rpb24gdHlwZSdcclxuICAgICAgICApXHJcbiAgICAgIH1cclxuICAgICAgaWYgKHR5cGUgaW4gYWN0aW9uc01hcCkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgICdgYnVpbGRlci5hZGRDYXNlYCBjYW5ub3QgYmUgY2FsbGVkIHdpdGggdHdvIHJlZHVjZXJzIGZvciB0aGUgc2FtZSBhY3Rpb24gdHlwZSdcclxuICAgICAgICApXHJcbiAgICAgIH1cclxuICAgICAgYWN0aW9uc01hcFt0eXBlXSA9IHJlZHVjZXJcclxuICAgICAgcmV0dXJuIGJ1aWxkZXJcclxuICAgIH0sXHJcbiAgICBhZGRNYXRjaGVyPEE+KFxyXG4gICAgICBtYXRjaGVyOiBUeXBlR3VhcmQ8QT4sXHJcbiAgICAgIHJlZHVjZXI6IENhc2VSZWR1Y2VyPFMsIEEgZXh0ZW5kcyBBbnlBY3Rpb24gPyBBIDogQSAmIEFueUFjdGlvbj5cclxuICAgICkge1xyXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xyXG4gICAgICAgIGlmIChkZWZhdWx0Q2FzZVJlZHVjZXIpIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgICAgJ2BidWlsZGVyLmFkZE1hdGNoZXJgIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBiZWZvcmUgY2FsbGluZyBgYnVpbGRlci5hZGREZWZhdWx0Q2FzZWAnXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGFjdGlvbk1hdGNoZXJzLnB1c2goeyBtYXRjaGVyLCByZWR1Y2VyIH0pXHJcbiAgICAgIHJldHVybiBidWlsZGVyXHJcbiAgICB9LFxyXG4gICAgYWRkRGVmYXVsdENhc2UocmVkdWNlcjogQ2FzZVJlZHVjZXI8UywgQW55QWN0aW9uPikge1xyXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xyXG4gICAgICAgIGlmIChkZWZhdWx0Q2FzZVJlZHVjZXIpIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignYGJ1aWxkZXIuYWRkRGVmYXVsdENhc2VgIGNhbiBvbmx5IGJlIGNhbGxlZCBvbmNlJylcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZGVmYXVsdENhc2VSZWR1Y2VyID0gcmVkdWNlclxyXG4gICAgICByZXR1cm4gYnVpbGRlclxyXG4gICAgfSxcclxuICB9XHJcbiAgYnVpbGRlckNhbGxiYWNrKGJ1aWxkZXIpXHJcbiAgcmV0dXJuIFthY3Rpb25zTWFwLCBhY3Rpb25NYXRjaGVycywgZGVmYXVsdENhc2VSZWR1Y2VyXVxyXG59XHJcbiIsICJpbXBvcnQgdHlwZSB7IEFueUFjdGlvbiwgUmVkdWNlciB9IGZyb20gJ3JlZHV4J1xyXG5pbXBvcnQgeyBjcmVhdGVOZXh0U3RhdGUgfSBmcm9tICcuJ1xyXG5pbXBvcnQgdHlwZSB7XHJcbiAgQWN0aW9uQ3JlYXRvcldpdGhvdXRQYXlsb2FkLFxyXG4gIFBheWxvYWRBY3Rpb24sXHJcbiAgUGF5bG9hZEFjdGlvbkNyZWF0b3IsXHJcbiAgUHJlcGFyZUFjdGlvbixcclxuICBfQWN0aW9uQ3JlYXRvcldpdGhQcmVwYXJlZFBheWxvYWQsXHJcbn0gZnJvbSAnLi9jcmVhdGVBY3Rpb24nXHJcbmltcG9ydCB7IGNyZWF0ZUFjdGlvbiB9IGZyb20gJy4vY3JlYXRlQWN0aW9uJ1xyXG5pbXBvcnQgdHlwZSB7XHJcbiAgQ2FzZVJlZHVjZXIsXHJcbiAgQ2FzZVJlZHVjZXJzLFxyXG4gIFJlZHVjZXJXaXRoSW5pdGlhbFN0YXRlLFxyXG59IGZyb20gJy4vY3JlYXRlUmVkdWNlcidcclxuaW1wb3J0IHsgY3JlYXRlUmVkdWNlciwgTm90RnVuY3Rpb24gfSBmcm9tICcuL2NyZWF0ZVJlZHVjZXInXHJcbmltcG9ydCB0eXBlIHsgQWN0aW9uUmVkdWNlck1hcEJ1aWxkZXIgfSBmcm9tICcuL21hcEJ1aWxkZXJzJ1xyXG5pbXBvcnQgeyBleGVjdXRlUmVkdWNlckJ1aWxkZXJDYWxsYmFjayB9IGZyb20gJy4vbWFwQnVpbGRlcnMnXHJcbmltcG9ydCB0eXBlIHsgTm9JbmZlciB9IGZyb20gJy4vdHNIZWxwZXJzJ1xyXG5pbXBvcnQgeyBmcmVlemVEcmFmdGFibGUgfSBmcm9tICcuL3V0aWxzJ1xyXG5cclxubGV0IGhhc1dhcm5lZEFib3V0T2JqZWN0Tm90YXRpb24gPSBmYWxzZVxyXG5cclxuLyoqXHJcbiAqIEFuIGFjdGlvbiBjcmVhdG9yIGF0dGFjaGVkIHRvIGEgc2xpY2UuXHJcbiAqXHJcbiAqIEBkZXByZWNhdGVkIHBsZWFzZSB1c2UgUGF5bG9hZEFjdGlvbkNyZWF0b3IgZGlyZWN0bHlcclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IHR5cGUgU2xpY2VBY3Rpb25DcmVhdG9yPFA+ID0gUGF5bG9hZEFjdGlvbkNyZWF0b3I8UD5cclxuXHJcbi8qKlxyXG4gKiBUaGUgcmV0dXJuIHZhbHVlIG9mIGBjcmVhdGVTbGljZWBcclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBTbGljZTxcclxuICBTdGF0ZSA9IGFueSxcclxuICBDYXNlUmVkdWNlcnMgZXh0ZW5kcyBTbGljZUNhc2VSZWR1Y2VyczxTdGF0ZT4gPSBTbGljZUNhc2VSZWR1Y2VyczxTdGF0ZT4sXHJcbiAgTmFtZSBleHRlbmRzIHN0cmluZyA9IHN0cmluZ1xyXG4+IHtcclxuICAvKipcclxuICAgKiBUaGUgc2xpY2UgbmFtZS5cclxuICAgKi9cclxuICBuYW1lOiBOYW1lXHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBzbGljZSdzIHJlZHVjZXIuXHJcbiAgICovXHJcbiAgcmVkdWNlcjogUmVkdWNlcjxTdGF0ZT5cclxuXHJcbiAgLyoqXHJcbiAgICogQWN0aW9uIGNyZWF0b3JzIGZvciB0aGUgdHlwZXMgb2YgYWN0aW9ucyB0aGF0IGFyZSBoYW5kbGVkIGJ5IHRoZSBzbGljZVxyXG4gICAqIHJlZHVjZXIuXHJcbiAgICovXHJcbiAgYWN0aW9uczogQ2FzZVJlZHVjZXJBY3Rpb25zPENhc2VSZWR1Y2VycywgTmFtZT5cclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIGluZGl2aWR1YWwgY2FzZSByZWR1Y2VyIGZ1bmN0aW9ucyB0aGF0IHdlcmUgcGFzc2VkIGluIHRoZSBgcmVkdWNlcnNgIHBhcmFtZXRlci5cclxuICAgKiBUaGlzIGVuYWJsZXMgcmV1c2UgYW5kIHRlc3RpbmcgaWYgdGhleSB3ZXJlIGRlZmluZWQgaW5saW5lIHdoZW4gY2FsbGluZyBgY3JlYXRlU2xpY2VgLlxyXG4gICAqL1xyXG4gIGNhc2VSZWR1Y2VyczogU2xpY2VEZWZpbmVkQ2FzZVJlZHVjZXJzPENhc2VSZWR1Y2Vycz5cclxuXHJcbiAgLyoqXHJcbiAgICogUHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBpbml0aWFsIHN0YXRlIHZhbHVlIGdpdmVuIHRvIHRoZSBzbGljZS5cclxuICAgKiBJZiBhIGxhenkgc3RhdGUgaW5pdGlhbGl6ZXIgd2FzIHByb3ZpZGVkLCBpdCB3aWxsIGJlIGNhbGxlZCBhbmQgYSBmcmVzaCB2YWx1ZSByZXR1cm5lZC5cclxuICAgKi9cclxuICBnZXRJbml0aWFsU3RhdGU6ICgpID0+IFN0YXRlXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBPcHRpb25zIGZvciBgY3JlYXRlU2xpY2UoKWAuXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlU2xpY2VPcHRpb25zPFxyXG4gIFN0YXRlID0gYW55LFxyXG4gIENSIGV4dGVuZHMgU2xpY2VDYXNlUmVkdWNlcnM8U3RhdGU+ID0gU2xpY2VDYXNlUmVkdWNlcnM8U3RhdGU+LFxyXG4gIE5hbWUgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmdcclxuPiB7XHJcbiAgLyoqXHJcbiAgICogVGhlIHNsaWNlJ3MgbmFtZS4gVXNlZCB0byBuYW1lc3BhY2UgdGhlIGdlbmVyYXRlZCBhY3Rpb24gdHlwZXMuXHJcbiAgICovXHJcbiAgbmFtZTogTmFtZVxyXG5cclxuICAvKipcclxuICAgKiBUaGUgaW5pdGlhbCBzdGF0ZSB0aGF0IHNob3VsZCBiZSB1c2VkIHdoZW4gdGhlIHJlZHVjZXIgaXMgY2FsbGVkIHRoZSBmaXJzdCB0aW1lLiBUaGlzIG1heSBhbHNvIGJlIGEgXCJsYXp5IGluaXRpYWxpemVyXCIgZnVuY3Rpb24sIHdoaWNoIHNob3VsZCByZXR1cm4gYW4gaW5pdGlhbCBzdGF0ZSB2YWx1ZSB3aGVuIGNhbGxlZC4gVGhpcyB3aWxsIGJlIHVzZWQgd2hlbmV2ZXIgdGhlIHJlZHVjZXIgaXMgY2FsbGVkIHdpdGggYHVuZGVmaW5lZGAgYXMgaXRzIHN0YXRlIHZhbHVlLCBhbmQgaXMgcHJpbWFyaWx5IHVzZWZ1bCBmb3IgY2FzZXMgbGlrZSByZWFkaW5nIGluaXRpYWwgc3RhdGUgZnJvbSBgbG9jYWxTdG9yYWdlYC5cclxuICAgKi9cclxuICBpbml0aWFsU3RhdGU6IFN0YXRlIHwgKCgpID0+IFN0YXRlKVxyXG5cclxuICAvKipcclxuICAgKiBBIG1hcHBpbmcgZnJvbSBhY3Rpb24gdHlwZXMgdG8gYWN0aW9uLXR5cGUtc3BlY2lmaWMgKmNhc2UgcmVkdWNlcipcclxuICAgKiBmdW5jdGlvbnMuIEZvciBldmVyeSBhY3Rpb24gdHlwZSwgYSBtYXRjaGluZyBhY3Rpb24gY3JlYXRvciB3aWxsIGJlXHJcbiAgICogZ2VuZXJhdGVkIHVzaW5nIGBjcmVhdGVBY3Rpb24oKWAuXHJcbiAgICovXHJcbiAgcmVkdWNlcnM6IFZhbGlkYXRlU2xpY2VDYXNlUmVkdWNlcnM8U3RhdGUsIENSPlxyXG5cclxuICAvKipcclxuICAgKiBBIGNhbGxiYWNrIHRoYXQgcmVjZWl2ZXMgYSAqYnVpbGRlciogb2JqZWN0IHRvIGRlZmluZVxyXG4gICAqIGNhc2UgcmVkdWNlcnMgdmlhIGNhbGxzIHRvIGBidWlsZGVyLmFkZENhc2UoYWN0aW9uQ3JlYXRvck9yVHlwZSwgcmVkdWNlcilgLlxyXG4gICAqIFxyXG4gICAqIEFsdGVybmF0aXZlbHksIGEgbWFwcGluZyBmcm9tIGFjdGlvbiB0eXBlcyB0byBhY3Rpb24tdHlwZS1zcGVjaWZpYyAqY2FzZSByZWR1Y2VyKlxyXG4gICAqIGZ1bmN0aW9ucy4gVGhlc2UgcmVkdWNlcnMgc2hvdWxkIGhhdmUgZXhpc3RpbmcgYWN0aW9uIHR5cGVzIHVzZWRcclxuICAgKiBhcyB0aGUga2V5cywgYW5kIGFjdGlvbiBjcmVhdG9ycyB3aWxsIF9ub3RfIGJlIGdlbmVyYXRlZC5cclxuICAgKiBcclxuICAgKiBAZXhhbXBsZVxyXG5gYGB0c1xyXG5pbXBvcnQgeyBjcmVhdGVBY3Rpb24sIGNyZWF0ZVNsaWNlLCBBY3Rpb24sIEFueUFjdGlvbiB9IGZyb20gJ0ByZWR1eGpzL3Rvb2xraXQnXHJcbmNvbnN0IGluY3JlbWVudEJ5ID0gY3JlYXRlQWN0aW9uPG51bWJlcj4oJ2luY3JlbWVudEJ5JylcclxuY29uc3QgZGVjcmVtZW50ID0gY3JlYXRlQWN0aW9uKCdkZWNyZW1lbnQnKVxyXG5cclxuaW50ZXJmYWNlIFJlamVjdGVkQWN0aW9uIGV4dGVuZHMgQWN0aW9uIHtcclxuICBlcnJvcjogRXJyb3JcclxufVxyXG5cclxuZnVuY3Rpb24gaXNSZWplY3RlZEFjdGlvbihhY3Rpb246IEFueUFjdGlvbik6IGFjdGlvbiBpcyBSZWplY3RlZEFjdGlvbiB7XHJcbiAgcmV0dXJuIGFjdGlvbi50eXBlLmVuZHNXaXRoKCdyZWplY3RlZCcpXHJcbn1cclxuXHJcbmNyZWF0ZVNsaWNlKHtcclxuICBuYW1lOiAnY291bnRlcicsXHJcbiAgaW5pdGlhbFN0YXRlOiAwLFxyXG4gIHJlZHVjZXJzOiB7fSxcclxuICBleHRyYVJlZHVjZXJzOiBidWlsZGVyID0+IHtcclxuICAgIGJ1aWxkZXJcclxuICAgICAgLmFkZENhc2UoaW5jcmVtZW50QnksIChzdGF0ZSwgYWN0aW9uKSA9PiB7XHJcbiAgICAgICAgLy8gYWN0aW9uIGlzIGluZmVycmVkIGNvcnJlY3RseSBoZXJlIGlmIHVzaW5nIFRTXHJcbiAgICAgIH0pXHJcbiAgICAgIC8vIFlvdSBjYW4gY2hhaW4gY2FsbHMsIG9yIGhhdmUgc2VwYXJhdGUgYGJ1aWxkZXIuYWRkQ2FzZSgpYCBsaW5lcyBlYWNoIHRpbWVcclxuICAgICAgLmFkZENhc2UoZGVjcmVtZW50LCAoc3RhdGUsIGFjdGlvbikgPT4ge30pXHJcbiAgICAgIC8vIFlvdSBjYW4gbWF0Y2ggYSByYW5nZSBvZiBhY3Rpb24gdHlwZXNcclxuICAgICAgLmFkZE1hdGNoZXIoXHJcbiAgICAgICAgaXNSZWplY3RlZEFjdGlvbixcclxuICAgICAgICAvLyBgYWN0aW9uYCB3aWxsIGJlIGluZmVycmVkIGFzIGEgUmVqZWN0ZWRBY3Rpb24gZHVlIHRvIGlzUmVqZWN0ZWRBY3Rpb24gYmVpbmcgZGVmaW5lZCBhcyBhIHR5cGUgZ3VhcmRcclxuICAgICAgICAoc3RhdGUsIGFjdGlvbikgPT4ge31cclxuICAgICAgKVxyXG4gICAgICAvLyBhbmQgcHJvdmlkZSBhIGRlZmF1bHQgY2FzZSBpZiBubyBvdGhlciBoYW5kbGVycyBtYXRjaGVkXHJcbiAgICAgIC5hZGREZWZhdWx0Q2FzZSgoc3RhdGUsIGFjdGlvbikgPT4ge30pXHJcbiAgICB9XHJcbn0pXHJcbmBgYFxyXG4gICAqL1xyXG4gIGV4dHJhUmVkdWNlcnM/OlxyXG4gICAgfCBDYXNlUmVkdWNlcnM8Tm9JbmZlcjxTdGF0ZT4sIGFueT5cclxuICAgIHwgKChidWlsZGVyOiBBY3Rpb25SZWR1Y2VyTWFwQnVpbGRlcjxOb0luZmVyPFN0YXRlPj4pID0+IHZvaWQpXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBIENhc2VSZWR1Y2VyIHdpdGggYSBgcHJlcGFyZWAgbWV0aG9kLlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBDYXNlUmVkdWNlcldpdGhQcmVwYXJlPFN0YXRlLCBBY3Rpb24gZXh0ZW5kcyBQYXlsb2FkQWN0aW9uPiA9IHtcclxuICByZWR1Y2VyOiBDYXNlUmVkdWNlcjxTdGF0ZSwgQWN0aW9uPlxyXG4gIHByZXBhcmU6IFByZXBhcmVBY3Rpb248QWN0aW9uWydwYXlsb2FkJ10+XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBUaGUgdHlwZSBkZXNjcmliaW5nIGEgc2xpY2UncyBgcmVkdWNlcnNgIG9wdGlvbi5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IHR5cGUgU2xpY2VDYXNlUmVkdWNlcnM8U3RhdGU+ID0ge1xyXG4gIFtLOiBzdHJpbmddOlxyXG4gICAgfCBDYXNlUmVkdWNlcjxTdGF0ZSwgUGF5bG9hZEFjdGlvbjxhbnk+PlxyXG4gICAgfCBDYXNlUmVkdWNlcldpdGhQcmVwYXJlPFN0YXRlLCBQYXlsb2FkQWN0aW9uPGFueSwgc3RyaW5nLCBhbnksIGFueT4+XHJcbn1cclxuXHJcbnR5cGUgU2xpY2VBY3Rpb25UeXBlPFxyXG4gIFNsaWNlTmFtZSBleHRlbmRzIHN0cmluZyxcclxuICBBY3Rpb25OYW1lIGV4dGVuZHMga2V5b2YgYW55XHJcbj4gPSBBY3Rpb25OYW1lIGV4dGVuZHMgc3RyaW5nIHwgbnVtYmVyID8gYCR7U2xpY2VOYW1lfS8ke0FjdGlvbk5hbWV9YCA6IHN0cmluZ1xyXG5cclxuLyoqXHJcbiAqIERlcml2ZXMgdGhlIHNsaWNlJ3MgYGFjdGlvbnNgIHByb3BlcnR5IGZyb20gdGhlIGByZWR1Y2Vyc2Agb3B0aW9uc1xyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBDYXNlUmVkdWNlckFjdGlvbnM8XHJcbiAgQ2FzZVJlZHVjZXJzIGV4dGVuZHMgU2xpY2VDYXNlUmVkdWNlcnM8YW55PixcclxuICBTbGljZU5hbWUgZXh0ZW5kcyBzdHJpbmdcclxuPiA9IHtcclxuICBbVHlwZSBpbiBrZXlvZiBDYXNlUmVkdWNlcnNdOiBDYXNlUmVkdWNlcnNbVHlwZV0gZXh0ZW5kcyB7IHByZXBhcmU6IGFueSB9XHJcbiAgICA/IEFjdGlvbkNyZWF0b3JGb3JDYXNlUmVkdWNlcldpdGhQcmVwYXJlPFxyXG4gICAgICAgIENhc2VSZWR1Y2Vyc1tUeXBlXSxcclxuICAgICAgICBTbGljZUFjdGlvblR5cGU8U2xpY2VOYW1lLCBUeXBlPlxyXG4gICAgICA+XHJcbiAgICA6IEFjdGlvbkNyZWF0b3JGb3JDYXNlUmVkdWNlcjxcclxuICAgICAgICBDYXNlUmVkdWNlcnNbVHlwZV0sXHJcbiAgICAgICAgU2xpY2VBY3Rpb25UeXBlPFNsaWNlTmFtZSwgVHlwZT5cclxuICAgICAgPlxyXG59XHJcblxyXG4vKipcclxuICogR2V0IGEgYFBheWxvYWRBY3Rpb25DcmVhdG9yYCB0eXBlIGZvciBhIHBhc3NlZCBgQ2FzZVJlZHVjZXJXaXRoUHJlcGFyZWBcclxuICpcclxuICogQGludGVybmFsXHJcbiAqL1xyXG50eXBlIEFjdGlvbkNyZWF0b3JGb3JDYXNlUmVkdWNlcldpdGhQcmVwYXJlPFxyXG4gIENSIGV4dGVuZHMgeyBwcmVwYXJlOiBhbnkgfSxcclxuICBUeXBlIGV4dGVuZHMgc3RyaW5nXHJcbj4gPSBfQWN0aW9uQ3JlYXRvcldpdGhQcmVwYXJlZFBheWxvYWQ8Q1JbJ3ByZXBhcmUnXSwgVHlwZT5cclxuXHJcbi8qKlxyXG4gKiBHZXQgYSBgUGF5bG9hZEFjdGlvbkNyZWF0b3JgIHR5cGUgZm9yIGEgcGFzc2VkIGBDYXNlUmVkdWNlcmBcclxuICpcclxuICogQGludGVybmFsXHJcbiAqL1xyXG50eXBlIEFjdGlvbkNyZWF0b3JGb3JDYXNlUmVkdWNlcjxDUiwgVHlwZSBleHRlbmRzIHN0cmluZz4gPSBDUiBleHRlbmRzIChcclxuICBzdGF0ZTogYW55LFxyXG4gIGFjdGlvbjogaW5mZXIgQWN0aW9uXHJcbikgPT4gYW55XHJcbiAgPyBBY3Rpb24gZXh0ZW5kcyB7IHBheWxvYWQ6IGluZmVyIFAgfVxyXG4gICAgPyBQYXlsb2FkQWN0aW9uQ3JlYXRvcjxQLCBUeXBlPlxyXG4gICAgOiBBY3Rpb25DcmVhdG9yV2l0aG91dFBheWxvYWQ8VHlwZT5cclxuICA6IEFjdGlvbkNyZWF0b3JXaXRob3V0UGF5bG9hZDxUeXBlPlxyXG5cclxuLyoqXHJcbiAqIEV4dHJhY3RzIHRoZSBDYXNlUmVkdWNlcnMgb3V0IG9mIGEgYHJlZHVjZXJzYCBvYmplY3QsIGV2ZW4gaWYgdGhleSBhcmVcclxuICogdGVzdGVkIGludG8gYSBgQ2FzZVJlZHVjZXJXaXRoUHJlcGFyZWAuXHJcbiAqXHJcbiAqIEBpbnRlcm5hbFxyXG4gKi9cclxudHlwZSBTbGljZURlZmluZWRDYXNlUmVkdWNlcnM8Q2FzZVJlZHVjZXJzIGV4dGVuZHMgU2xpY2VDYXNlUmVkdWNlcnM8YW55Pj4gPSB7XHJcbiAgW1R5cGUgaW4ga2V5b2YgQ2FzZVJlZHVjZXJzXTogQ2FzZVJlZHVjZXJzW1R5cGVdIGV4dGVuZHMge1xyXG4gICAgcmVkdWNlcjogaW5mZXIgUmVkdWNlclxyXG4gIH1cclxuICAgID8gUmVkdWNlclxyXG4gICAgOiBDYXNlUmVkdWNlcnNbVHlwZV1cclxufVxyXG5cclxuLyoqXHJcbiAqIFVzZWQgb24gYSBTbGljZUNhc2VSZWR1Y2VycyBvYmplY3QuXHJcbiAqIEVuc3VyZXMgdGhhdCBpZiBhIENhc2VSZWR1Y2VyIGlzIGEgYENhc2VSZWR1Y2VyV2l0aFByZXBhcmVgLCB0aGF0XHJcbiAqIHRoZSBgcmVkdWNlcmAgYW5kIHRoZSBgcHJlcGFyZWAgZnVuY3Rpb24gdXNlIHRoZSBzYW1lIHR5cGUgb2YgYHBheWxvYWRgLlxyXG4gKlxyXG4gKiBNaWdodCBkbyBhZGRpdGlvbmFsIHN1Y2ggY2hlY2tzIGluIHRoZSBmdXR1cmUuXHJcbiAqXHJcbiAqIFRoaXMgdHlwZSBpcyBvbmx5IGV2ZXIgdXNlZnVsIGlmIHlvdSB3YW50IHRvIHdyaXRlIHlvdXIgb3duIHdyYXBwZXIgYXJvdW5kXHJcbiAqIGBjcmVhdGVTbGljZWAuIFBsZWFzZSBkb24ndCB1c2UgaXQgb3RoZXJ3aXNlIVxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBWYWxpZGF0ZVNsaWNlQ2FzZVJlZHVjZXJzPFxyXG4gIFMsXHJcbiAgQUNSIGV4dGVuZHMgU2xpY2VDYXNlUmVkdWNlcnM8Uz5cclxuPiA9IEFDUiAmXHJcbiAge1xyXG4gICAgW1QgaW4ga2V5b2YgQUNSXTogQUNSW1RdIGV4dGVuZHMge1xyXG4gICAgICByZWR1Y2VyKHM6IFMsIGFjdGlvbj86IGluZmVyIEEpOiBhbnlcclxuICAgIH1cclxuICAgICAgPyB7XHJcbiAgICAgICAgICBwcmVwYXJlKC4uLmE6IG5ldmVyW10pOiBPbWl0PEEsICd0eXBlJz5cclxuICAgICAgICB9XHJcbiAgICAgIDoge31cclxuICB9XHJcblxyXG5mdW5jdGlvbiBnZXRUeXBlKHNsaWNlOiBzdHJpbmcsIGFjdGlvbktleTogc3RyaW5nKTogc3RyaW5nIHtcclxuICByZXR1cm4gYCR7c2xpY2V9LyR7YWN0aW9uS2V5fWBcclxufVxyXG5cclxuLyoqXHJcbiAqIEEgZnVuY3Rpb24gdGhhdCBhY2NlcHRzIGFuIGluaXRpYWwgc3RhdGUsIGFuIG9iamVjdCBmdWxsIG9mIHJlZHVjZXJcclxuICogZnVuY3Rpb25zLCBhbmQgYSBcInNsaWNlIG5hbWVcIiwgYW5kIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVzXHJcbiAqIGFjdGlvbiBjcmVhdG9ycyBhbmQgYWN0aW9uIHR5cGVzIHRoYXQgY29ycmVzcG9uZCB0byB0aGVcclxuICogcmVkdWNlcnMgYW5kIHN0YXRlLlxyXG4gKlxyXG4gKiBUaGUgYHJlZHVjZXJgIGFyZ3VtZW50IGlzIHBhc3NlZCB0byBgY3JlYXRlUmVkdWNlcigpYC5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNsaWNlPFxyXG4gIFN0YXRlLFxyXG4gIENhc2VSZWR1Y2VycyBleHRlbmRzIFNsaWNlQ2FzZVJlZHVjZXJzPFN0YXRlPixcclxuICBOYW1lIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nXHJcbj4oXHJcbiAgb3B0aW9uczogQ3JlYXRlU2xpY2VPcHRpb25zPFN0YXRlLCBDYXNlUmVkdWNlcnMsIE5hbWU+XHJcbik6IFNsaWNlPFN0YXRlLCBDYXNlUmVkdWNlcnMsIE5hbWU+IHtcclxuICBjb25zdCB7IG5hbWUgfSA9IG9wdGlvbnNcclxuICBpZiAoIW5hbWUpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcignYG5hbWVgIGlzIGEgcmVxdWlyZWQgb3B0aW9uIGZvciBjcmVhdGVTbGljZScpXHJcbiAgfVxyXG5cclxuICBpZiAoXHJcbiAgICB0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiZcclxuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnXHJcbiAgKSB7XHJcbiAgICBpZiAob3B0aW9ucy5pbml0aWFsU3RhdGUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKFxyXG4gICAgICAgICdZb3UgbXVzdCBwcm92aWRlIGFuIGBpbml0aWFsU3RhdGVgIHZhbHVlIHRoYXQgaXMgbm90IGB1bmRlZmluZWRgLiBZb3UgbWF5IGhhdmUgbWlzc3BlbGxlZCBgaW5pdGlhbFN0YXRlYCdcclxuICAgICAgKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29uc3QgaW5pdGlhbFN0YXRlID1cclxuICAgIHR5cGVvZiBvcHRpb25zLmluaXRpYWxTdGF0ZSA9PSAnZnVuY3Rpb24nXHJcbiAgICAgID8gb3B0aW9ucy5pbml0aWFsU3RhdGVcclxuICAgICAgOiBmcmVlemVEcmFmdGFibGUob3B0aW9ucy5pbml0aWFsU3RhdGUpXHJcblxyXG4gIGNvbnN0IHJlZHVjZXJzID0gb3B0aW9ucy5yZWR1Y2VycyB8fCB7fVxyXG5cclxuICBjb25zdCByZWR1Y2VyTmFtZXMgPSBPYmplY3Qua2V5cyhyZWR1Y2VycylcclxuXHJcbiAgY29uc3Qgc2xpY2VDYXNlUmVkdWNlcnNCeU5hbWU6IFJlY29yZDxzdHJpbmcsIENhc2VSZWR1Y2VyPiA9IHt9XHJcbiAgY29uc3Qgc2xpY2VDYXNlUmVkdWNlcnNCeVR5cGU6IFJlY29yZDxzdHJpbmcsIENhc2VSZWR1Y2VyPiA9IHt9XHJcbiAgY29uc3QgYWN0aW9uQ3JlYXRvcnM6IFJlY29yZDxzdHJpbmcsIEZ1bmN0aW9uPiA9IHt9XHJcblxyXG4gIHJlZHVjZXJOYW1lcy5mb3JFYWNoKChyZWR1Y2VyTmFtZSkgPT4ge1xyXG4gICAgY29uc3QgbWF5YmVSZWR1Y2VyV2l0aFByZXBhcmUgPSByZWR1Y2Vyc1tyZWR1Y2VyTmFtZV1cclxuICAgIGNvbnN0IHR5cGUgPSBnZXRUeXBlKG5hbWUsIHJlZHVjZXJOYW1lKVxyXG5cclxuICAgIGxldCBjYXNlUmVkdWNlcjogQ2FzZVJlZHVjZXI8U3RhdGUsIGFueT5cclxuICAgIGxldCBwcmVwYXJlQ2FsbGJhY2s6IFByZXBhcmVBY3Rpb248YW55PiB8IHVuZGVmaW5lZFxyXG5cclxuICAgIGlmICgncmVkdWNlcicgaW4gbWF5YmVSZWR1Y2VyV2l0aFByZXBhcmUpIHtcclxuICAgICAgY2FzZVJlZHVjZXIgPSBtYXliZVJlZHVjZXJXaXRoUHJlcGFyZS5yZWR1Y2VyXHJcbiAgICAgIHByZXBhcmVDYWxsYmFjayA9IG1heWJlUmVkdWNlcldpdGhQcmVwYXJlLnByZXBhcmVcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNhc2VSZWR1Y2VyID0gbWF5YmVSZWR1Y2VyV2l0aFByZXBhcmVcclxuICAgIH1cclxuXHJcbiAgICBzbGljZUNhc2VSZWR1Y2Vyc0J5TmFtZVtyZWR1Y2VyTmFtZV0gPSBjYXNlUmVkdWNlclxyXG4gICAgc2xpY2VDYXNlUmVkdWNlcnNCeVR5cGVbdHlwZV0gPSBjYXNlUmVkdWNlclxyXG4gICAgYWN0aW9uQ3JlYXRvcnNbcmVkdWNlck5hbWVdID0gcHJlcGFyZUNhbGxiYWNrXHJcbiAgICAgID8gY3JlYXRlQWN0aW9uKHR5cGUsIHByZXBhcmVDYWxsYmFjaylcclxuICAgICAgOiBjcmVhdGVBY3Rpb24odHlwZSlcclxuICB9KVxyXG5cclxuICBmdW5jdGlvbiBidWlsZFJlZHVjZXIoKSB7XHJcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xyXG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMuZXh0cmFSZWR1Y2VycyA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICBpZiAoIWhhc1dhcm5lZEFib3V0T2JqZWN0Tm90YXRpb24pIHtcclxuICAgICAgICAgIGhhc1dhcm5lZEFib3V0T2JqZWN0Tm90YXRpb24gPSB0cnVlXHJcbiAgICAgICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgICAgIFwiVGhlIG9iamVjdCBub3RhdGlvbiBmb3IgYGNyZWF0ZVNsaWNlLmV4dHJhUmVkdWNlcnNgIGlzIGRlcHJlY2F0ZWQsIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gUlRLIDIuMC4gUGxlYXNlIHVzZSB0aGUgJ2J1aWxkZXIgY2FsbGJhY2snIG5vdGF0aW9uIGluc3RlYWQ6IGh0dHBzOi8vcmVkdXgtdG9vbGtpdC5qcy5vcmcvYXBpL2NyZWF0ZVNsaWNlXCJcclxuICAgICAgICAgIClcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IFtcclxuICAgICAgZXh0cmFSZWR1Y2VycyA9IHt9LFxyXG4gICAgICBhY3Rpb25NYXRjaGVycyA9IFtdLFxyXG4gICAgICBkZWZhdWx0Q2FzZVJlZHVjZXIgPSB1bmRlZmluZWQsXHJcbiAgICBdID1cclxuICAgICAgdHlwZW9mIG9wdGlvbnMuZXh0cmFSZWR1Y2VycyA9PT0gJ2Z1bmN0aW9uJ1xyXG4gICAgICAgID8gZXhlY3V0ZVJlZHVjZXJCdWlsZGVyQ2FsbGJhY2sob3B0aW9ucy5leHRyYVJlZHVjZXJzKVxyXG4gICAgICAgIDogW29wdGlvbnMuZXh0cmFSZWR1Y2Vyc11cclxuXHJcbiAgICBjb25zdCBmaW5hbENhc2VSZWR1Y2VycyA9IHsgLi4uZXh0cmFSZWR1Y2VycywgLi4uc2xpY2VDYXNlUmVkdWNlcnNCeVR5cGUgfVxyXG5cclxuICAgIHJldHVybiBjcmVhdGVSZWR1Y2VyKGluaXRpYWxTdGF0ZSwgKGJ1aWxkZXIpID0+IHtcclxuICAgICAgZm9yIChsZXQga2V5IGluIGZpbmFsQ2FzZVJlZHVjZXJzKSB7XHJcbiAgICAgICAgYnVpbGRlci5hZGRDYXNlKGtleSwgZmluYWxDYXNlUmVkdWNlcnNba2V5XSBhcyBDYXNlUmVkdWNlcjxhbnk+KVxyXG4gICAgICB9XHJcbiAgICAgIGZvciAobGV0IG0gb2YgYWN0aW9uTWF0Y2hlcnMpIHtcclxuICAgICAgICBidWlsZGVyLmFkZE1hdGNoZXIobS5tYXRjaGVyLCBtLnJlZHVjZXIpXHJcbiAgICAgIH1cclxuICAgICAgaWYgKGRlZmF1bHRDYXNlUmVkdWNlcikge1xyXG4gICAgICAgIGJ1aWxkZXIuYWRkRGVmYXVsdENhc2UoZGVmYXVsdENhc2VSZWR1Y2VyKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgbGV0IF9yZWR1Y2VyOiBSZWR1Y2VyV2l0aEluaXRpYWxTdGF0ZTxTdGF0ZT5cclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIG5hbWUsXHJcbiAgICByZWR1Y2VyKHN0YXRlLCBhY3Rpb24pIHtcclxuICAgICAgaWYgKCFfcmVkdWNlcikgX3JlZHVjZXIgPSBidWlsZFJlZHVjZXIoKVxyXG5cclxuICAgICAgcmV0dXJuIF9yZWR1Y2VyKHN0YXRlLCBhY3Rpb24pXHJcbiAgICB9LFxyXG4gICAgYWN0aW9uczogYWN0aW9uQ3JlYXRvcnMgYXMgYW55LFxyXG4gICAgY2FzZVJlZHVjZXJzOiBzbGljZUNhc2VSZWR1Y2Vyc0J5TmFtZSBhcyBhbnksXHJcbiAgICBnZXRJbml0aWFsU3RhdGUoKSB7XHJcbiAgICAgIGlmICghX3JlZHVjZXIpIF9yZWR1Y2VyID0gYnVpbGRSZWR1Y2VyKClcclxuXHJcbiAgICAgIHJldHVybiBfcmVkdWNlci5nZXRJbml0aWFsU3RhdGUoKVxyXG4gICAgfSxcclxuICB9XHJcbn1cclxuIiwgImltcG9ydCB0eXBlIHsgRW50aXR5U3RhdGUgfSBmcm9tICcuL21vZGVscydcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRJbml0aWFsRW50aXR5U3RhdGU8Vj4oKTogRW50aXR5U3RhdGU8Vj4ge1xyXG4gIHJldHVybiB7XHJcbiAgICBpZHM6IFtdLFxyXG4gICAgZW50aXRpZXM6IHt9LFxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUluaXRpYWxTdGF0ZUZhY3Rvcnk8Vj4oKSB7XHJcbiAgZnVuY3Rpb24gZ2V0SW5pdGlhbFN0YXRlKCk6IEVudGl0eVN0YXRlPFY+XHJcbiAgZnVuY3Rpb24gZ2V0SW5pdGlhbFN0YXRlPFMgZXh0ZW5kcyBvYmplY3Q+KFxyXG4gICAgYWRkaXRpb25hbFN0YXRlOiBTXHJcbiAgKTogRW50aXR5U3RhdGU8Vj4gJiBTXHJcbiAgZnVuY3Rpb24gZ2V0SW5pdGlhbFN0YXRlKGFkZGl0aW9uYWxTdGF0ZTogYW55ID0ge30pOiBhbnkge1xyXG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oZ2V0SW5pdGlhbEVudGl0eVN0YXRlKCksIGFkZGl0aW9uYWxTdGF0ZSlcclxuICB9XHJcblxyXG4gIHJldHVybiB7IGdldEluaXRpYWxTdGF0ZSB9XHJcbn1cclxuIiwgImltcG9ydCB0eXBlIHsgU2VsZWN0b3IgfSBmcm9tICdyZXNlbGVjdCdcclxuaW1wb3J0IHsgY3JlYXRlRHJhZnRTYWZlU2VsZWN0b3IgfSBmcm9tICcuLi9jcmVhdGVEcmFmdFNhZmVTZWxlY3RvcidcclxuaW1wb3J0IHR5cGUge1xyXG4gIEVudGl0eVN0YXRlLFxyXG4gIEVudGl0eVNlbGVjdG9ycyxcclxuICBEaWN0aW9uYXJ5LFxyXG4gIEVudGl0eUlkLFxyXG59IGZyb20gJy4vbW9kZWxzJ1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNlbGVjdG9yc0ZhY3Rvcnk8VD4oKSB7XHJcbiAgZnVuY3Rpb24gZ2V0U2VsZWN0b3JzKCk6IEVudGl0eVNlbGVjdG9yczxULCBFbnRpdHlTdGF0ZTxUPj5cclxuICBmdW5jdGlvbiBnZXRTZWxlY3RvcnM8Vj4oXHJcbiAgICBzZWxlY3RTdGF0ZTogKHN0YXRlOiBWKSA9PiBFbnRpdHlTdGF0ZTxUPlxyXG4gICk6IEVudGl0eVNlbGVjdG9yczxULCBWPlxyXG4gIGZ1bmN0aW9uIGdldFNlbGVjdG9yczxWPihcclxuICAgIHNlbGVjdFN0YXRlPzogKHN0YXRlOiBWKSA9PiBFbnRpdHlTdGF0ZTxUPlxyXG4gICk6IEVudGl0eVNlbGVjdG9yczxULCBhbnk+IHtcclxuICAgIGNvbnN0IHNlbGVjdElkcyA9IChzdGF0ZTogRW50aXR5U3RhdGU8VD4pID0+IHN0YXRlLmlkc1xyXG5cclxuICAgIGNvbnN0IHNlbGVjdEVudGl0aWVzID0gKHN0YXRlOiBFbnRpdHlTdGF0ZTxUPikgPT4gc3RhdGUuZW50aXRpZXNcclxuXHJcbiAgICBjb25zdCBzZWxlY3RBbGwgPSBjcmVhdGVEcmFmdFNhZmVTZWxlY3RvcihcclxuICAgICAgc2VsZWN0SWRzLFxyXG4gICAgICBzZWxlY3RFbnRpdGllcyxcclxuICAgICAgKGlkcywgZW50aXRpZXMpOiBUW10gPT4gaWRzLm1hcCgoaWQpID0+IGVudGl0aWVzW2lkXSEpXHJcbiAgICApXHJcblxyXG4gICAgY29uc3Qgc2VsZWN0SWQgPSAoXzogdW5rbm93biwgaWQ6IEVudGl0eUlkKSA9PiBpZFxyXG5cclxuICAgIGNvbnN0IHNlbGVjdEJ5SWQgPSAoZW50aXRpZXM6IERpY3Rpb25hcnk8VD4sIGlkOiBFbnRpdHlJZCkgPT4gZW50aXRpZXNbaWRdXHJcblxyXG4gICAgY29uc3Qgc2VsZWN0VG90YWwgPSBjcmVhdGVEcmFmdFNhZmVTZWxlY3RvcihzZWxlY3RJZHMsIChpZHMpID0+IGlkcy5sZW5ndGgpXHJcblxyXG4gICAgaWYgKCFzZWxlY3RTdGF0ZSkge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIHNlbGVjdElkcyxcclxuICAgICAgICBzZWxlY3RFbnRpdGllcyxcclxuICAgICAgICBzZWxlY3RBbGwsXHJcbiAgICAgICAgc2VsZWN0VG90YWwsXHJcbiAgICAgICAgc2VsZWN0QnlJZDogY3JlYXRlRHJhZnRTYWZlU2VsZWN0b3IoXHJcbiAgICAgICAgICBzZWxlY3RFbnRpdGllcyxcclxuICAgICAgICAgIHNlbGVjdElkLFxyXG4gICAgICAgICAgc2VsZWN0QnlJZFxyXG4gICAgICAgICksXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzZWxlY3RHbG9iYWxpemVkRW50aXRpZXMgPSBjcmVhdGVEcmFmdFNhZmVTZWxlY3RvcihcclxuICAgICAgc2VsZWN0U3RhdGUgYXMgU2VsZWN0b3I8ViwgRW50aXR5U3RhdGU8VD4+LFxyXG4gICAgICBzZWxlY3RFbnRpdGllc1xyXG4gICAgKVxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIHNlbGVjdElkczogY3JlYXRlRHJhZnRTYWZlU2VsZWN0b3Ioc2VsZWN0U3RhdGUsIHNlbGVjdElkcyksXHJcbiAgICAgIHNlbGVjdEVudGl0aWVzOiBzZWxlY3RHbG9iYWxpemVkRW50aXRpZXMsXHJcbiAgICAgIHNlbGVjdEFsbDogY3JlYXRlRHJhZnRTYWZlU2VsZWN0b3Ioc2VsZWN0U3RhdGUsIHNlbGVjdEFsbCksXHJcbiAgICAgIHNlbGVjdFRvdGFsOiBjcmVhdGVEcmFmdFNhZmVTZWxlY3RvcihzZWxlY3RTdGF0ZSwgc2VsZWN0VG90YWwpLFxyXG4gICAgICBzZWxlY3RCeUlkOiBjcmVhdGVEcmFmdFNhZmVTZWxlY3RvcihcclxuICAgICAgICBzZWxlY3RHbG9iYWxpemVkRW50aXRpZXMsXHJcbiAgICAgICAgc2VsZWN0SWQsXHJcbiAgICAgICAgc2VsZWN0QnlJZFxyXG4gICAgICApLFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHsgZ2V0U2VsZWN0b3JzIH1cclxufVxyXG4iLCAiaW1wb3J0IGNyZWF0ZU5leHRTdGF0ZSwgeyBpc0RyYWZ0IH0gZnJvbSAnaW1tZXInXHJcbmltcG9ydCB0eXBlIHsgRW50aXR5U3RhdGUsIFByZXZlbnRBbnkgfSBmcm9tICcuL21vZGVscydcclxuaW1wb3J0IHR5cGUgeyBQYXlsb2FkQWN0aW9uIH0gZnJvbSAnLi4vY3JlYXRlQWN0aW9uJ1xyXG5pbXBvcnQgeyBpc0ZTQSB9IGZyb20gJy4uL2NyZWF0ZUFjdGlvbidcclxuaW1wb3J0IHsgSXNBbnkgfSBmcm9tICcuLi90c0hlbHBlcnMnXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU2luZ2xlQXJndW1lbnRTdGF0ZU9wZXJhdG9yPFY+KFxyXG4gIG11dGF0b3I6IChzdGF0ZTogRW50aXR5U3RhdGU8Vj4pID0+IHZvaWRcclxuKSB7XHJcbiAgY29uc3Qgb3BlcmF0b3IgPSBjcmVhdGVTdGF0ZU9wZXJhdG9yKChfOiB1bmRlZmluZWQsIHN0YXRlOiBFbnRpdHlTdGF0ZTxWPikgPT5cclxuICAgIG11dGF0b3Ioc3RhdGUpXHJcbiAgKVxyXG5cclxuICByZXR1cm4gZnVuY3Rpb24gb3BlcmF0aW9uPFMgZXh0ZW5kcyBFbnRpdHlTdGF0ZTxWPj4oXHJcbiAgICBzdGF0ZTogUHJldmVudEFueTxTLCBWPlxyXG4gICk6IFMge1xyXG4gICAgcmV0dXJuIG9wZXJhdG9yKHN0YXRlIGFzIFMsIHVuZGVmaW5lZClcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTdGF0ZU9wZXJhdG9yPFYsIFI+KFxyXG4gIG11dGF0b3I6IChhcmc6IFIsIHN0YXRlOiBFbnRpdHlTdGF0ZTxWPikgPT4gdm9pZFxyXG4pIHtcclxuICByZXR1cm4gZnVuY3Rpb24gb3BlcmF0aW9uPFMgZXh0ZW5kcyBFbnRpdHlTdGF0ZTxWPj4oXHJcbiAgICBzdGF0ZTogUyxcclxuICAgIGFyZzogUiB8IFBheWxvYWRBY3Rpb248Uj5cclxuICApOiBTIHtcclxuICAgIGZ1bmN0aW9uIGlzUGF5bG9hZEFjdGlvbkFyZ3VtZW50KFxyXG4gICAgICBhcmc6IFIgfCBQYXlsb2FkQWN0aW9uPFI+XHJcbiAgICApOiBhcmcgaXMgUGF5bG9hZEFjdGlvbjxSPiB7XHJcbiAgICAgIHJldHVybiBpc0ZTQShhcmcpXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcnVuTXV0YXRvciA9IChkcmFmdDogRW50aXR5U3RhdGU8Vj4pID0+IHtcclxuICAgICAgaWYgKGlzUGF5bG9hZEFjdGlvbkFyZ3VtZW50KGFyZykpIHtcclxuICAgICAgICBtdXRhdG9yKGFyZy5wYXlsb2FkLCBkcmFmdClcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBtdXRhdG9yKGFyZywgZHJhZnQpXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoaXNEcmFmdChzdGF0ZSkpIHtcclxuICAgICAgLy8gd2UgbXVzdCBhbHJlYWR5IGJlIGluc2lkZSBhIGBjcmVhdGVOZXh0U3RhdGVgIGNhbGwsIGxpa2VseSBiZWNhdXNlXHJcbiAgICAgIC8vIHRoaXMgaXMgYmVpbmcgd3JhcHBlZCBpbiBgY3JlYXRlUmVkdWNlcmAgb3IgYGNyZWF0ZVNsaWNlYC5cclxuICAgICAgLy8gSXQncyBzYWZlIHRvIGp1c3QgcGFzcyB0aGUgZHJhZnQgdG8gdGhlIG11dGF0b3IuXHJcbiAgICAgIHJ1bk11dGF0b3Ioc3RhdGUpXHJcblxyXG4gICAgICAvLyBzaW5jZSBpdCdzIGEgZHJhZnQsIHdlJ2xsIGp1c3QgcmV0dXJuIGl0XHJcbiAgICAgIHJldHVybiBzdGF0ZVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gQHRzLWlnbm9yZSBjcmVhdGVOZXh0U3RhdGUoKSBwcm9kdWNlcyBhbiBJbW11dGFibGU8RHJhZnQ8Uz4+IHJhdGhlclxyXG4gICAgICAvLyB0aGFuIGFuIEltbXV0YWJsZTxTPiwgYW5kIFR5cGVTY3JpcHQgY2Fubm90IGZpbmQgb3V0IGhvdyB0byByZWNvbmNpbGVcclxuICAgICAgLy8gdGhlc2UgdHdvIHR5cGVzLlxyXG4gICAgICByZXR1cm4gY3JlYXRlTmV4dFN0YXRlKHN0YXRlLCBydW5NdXRhdG9yKVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCAiaW1wb3J0IHR5cGUgeyBFbnRpdHlTdGF0ZSwgSWRTZWxlY3RvciwgVXBkYXRlLCBFbnRpdHlJZCB9IGZyb20gJy4vbW9kZWxzJ1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNlbGVjdElkVmFsdWU8VD4oZW50aXR5OiBULCBzZWxlY3RJZDogSWRTZWxlY3RvcjxUPikge1xyXG4gIGNvbnN0IGtleSA9IHNlbGVjdElkKGVudGl0eSlcclxuXHJcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYga2V5ID09PSB1bmRlZmluZWQpIHtcclxuICAgIGNvbnNvbGUud2FybihcclxuICAgICAgJ1RoZSBlbnRpdHkgcGFzc2VkIHRvIHRoZSBgc2VsZWN0SWRgIGltcGxlbWVudGF0aW9uIHJldHVybmVkIHVuZGVmaW5lZC4nLFxyXG4gICAgICAnWW91IHNob3VsZCBwcm9iYWJseSBwcm92aWRlIHlvdXIgb3duIGBzZWxlY3RJZGAgaW1wbGVtZW50YXRpb24uJyxcclxuICAgICAgJ1RoZSBlbnRpdHkgdGhhdCB3YXMgcGFzc2VkOicsXHJcbiAgICAgIGVudGl0eSxcclxuICAgICAgJ1RoZSBgc2VsZWN0SWRgIGltcGxlbWVudGF0aW9uOicsXHJcbiAgICAgIHNlbGVjdElkLnRvU3RyaW5nKClcclxuICAgIClcclxuICB9XHJcblxyXG4gIHJldHVybiBrZXlcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZUVudGl0aWVzQXJyYXk8VD4oXHJcbiAgZW50aXRpZXM6IHJlYWRvbmx5IFRbXSB8IFJlY29yZDxFbnRpdHlJZCwgVD5cclxuKTogcmVhZG9ubHkgVFtdIHtcclxuICBpZiAoIUFycmF5LmlzQXJyYXkoZW50aXRpZXMpKSB7XHJcbiAgICBlbnRpdGllcyA9IE9iamVjdC52YWx1ZXMoZW50aXRpZXMpXHJcbiAgfVxyXG5cclxuICByZXR1cm4gZW50aXRpZXNcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNwbGl0QWRkZWRVcGRhdGVkRW50aXRpZXM8VD4oXHJcbiAgbmV3RW50aXRpZXM6IHJlYWRvbmx5IFRbXSB8IFJlY29yZDxFbnRpdHlJZCwgVD4sXHJcbiAgc2VsZWN0SWQ6IElkU2VsZWN0b3I8VD4sXHJcbiAgc3RhdGU6IEVudGl0eVN0YXRlPFQ+XHJcbik6IFtUW10sIFVwZGF0ZTxUPltdXSB7XHJcbiAgbmV3RW50aXRpZXMgPSBlbnN1cmVFbnRpdGllc0FycmF5KG5ld0VudGl0aWVzKVxyXG5cclxuICBjb25zdCBhZGRlZDogVFtdID0gW11cclxuICBjb25zdCB1cGRhdGVkOiBVcGRhdGU8VD5bXSA9IFtdXHJcblxyXG4gIGZvciAoY29uc3QgZW50aXR5IG9mIG5ld0VudGl0aWVzKSB7XHJcbiAgICBjb25zdCBpZCA9IHNlbGVjdElkVmFsdWUoZW50aXR5LCBzZWxlY3RJZClcclxuICAgIGlmIChpZCBpbiBzdGF0ZS5lbnRpdGllcykge1xyXG4gICAgICB1cGRhdGVkLnB1c2goeyBpZCwgY2hhbmdlczogZW50aXR5IH0pXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBhZGRlZC5wdXNoKGVudGl0eSlcclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIFthZGRlZCwgdXBkYXRlZF1cclxufVxyXG4iLCAiaW1wb3J0IHR5cGUge1xyXG4gIEVudGl0eVN0YXRlLFxyXG4gIEVudGl0eVN0YXRlQWRhcHRlcixcclxuICBJZFNlbGVjdG9yLFxyXG4gIFVwZGF0ZSxcclxuICBFbnRpdHlJZCxcclxufSBmcm9tICcuL21vZGVscydcclxuaW1wb3J0IHtcclxuICBjcmVhdGVTdGF0ZU9wZXJhdG9yLFxyXG4gIGNyZWF0ZVNpbmdsZUFyZ3VtZW50U3RhdGVPcGVyYXRvcixcclxufSBmcm9tICcuL3N0YXRlX2FkYXB0ZXInXHJcbmltcG9ydCB7XHJcbiAgc2VsZWN0SWRWYWx1ZSxcclxuICBlbnN1cmVFbnRpdGllc0FycmF5LFxyXG4gIHNwbGl0QWRkZWRVcGRhdGVkRW50aXRpZXMsXHJcbn0gZnJvbSAnLi91dGlscydcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVVbnNvcnRlZFN0YXRlQWRhcHRlcjxUPihcclxuICBzZWxlY3RJZDogSWRTZWxlY3RvcjxUPlxyXG4pOiBFbnRpdHlTdGF0ZUFkYXB0ZXI8VD4ge1xyXG4gIHR5cGUgUiA9IEVudGl0eVN0YXRlPFQ+XHJcblxyXG4gIGZ1bmN0aW9uIGFkZE9uZU11dGFibHkoZW50aXR5OiBULCBzdGF0ZTogUik6IHZvaWQge1xyXG4gICAgY29uc3Qga2V5ID0gc2VsZWN0SWRWYWx1ZShlbnRpdHksIHNlbGVjdElkKVxyXG5cclxuICAgIGlmIChrZXkgaW4gc3RhdGUuZW50aXRpZXMpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGUuaWRzLnB1c2goa2V5KVxyXG4gICAgc3RhdGUuZW50aXRpZXNba2V5XSA9IGVudGl0eVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gYWRkTWFueU11dGFibHkoXHJcbiAgICBuZXdFbnRpdGllczogcmVhZG9ubHkgVFtdIHwgUmVjb3JkPEVudGl0eUlkLCBUPixcclxuICAgIHN0YXRlOiBSXHJcbiAgKTogdm9pZCB7XHJcbiAgICBuZXdFbnRpdGllcyA9IGVuc3VyZUVudGl0aWVzQXJyYXkobmV3RW50aXRpZXMpXHJcblxyXG4gICAgZm9yIChjb25zdCBlbnRpdHkgb2YgbmV3RW50aXRpZXMpIHtcclxuICAgICAgYWRkT25lTXV0YWJseShlbnRpdHksIHN0YXRlKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gc2V0T25lTXV0YWJseShlbnRpdHk6IFQsIHN0YXRlOiBSKTogdm9pZCB7XHJcbiAgICBjb25zdCBrZXkgPSBzZWxlY3RJZFZhbHVlKGVudGl0eSwgc2VsZWN0SWQpXHJcbiAgICBpZiAoIShrZXkgaW4gc3RhdGUuZW50aXRpZXMpKSB7XHJcbiAgICAgIHN0YXRlLmlkcy5wdXNoKGtleSlcclxuICAgIH1cclxuICAgIHN0YXRlLmVudGl0aWVzW2tleV0gPSBlbnRpdHlcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHNldE1hbnlNdXRhYmx5KFxyXG4gICAgbmV3RW50aXRpZXM6IHJlYWRvbmx5IFRbXSB8IFJlY29yZDxFbnRpdHlJZCwgVD4sXHJcbiAgICBzdGF0ZTogUlxyXG4gICk6IHZvaWQge1xyXG4gICAgbmV3RW50aXRpZXMgPSBlbnN1cmVFbnRpdGllc0FycmF5KG5ld0VudGl0aWVzKVxyXG4gICAgZm9yIChjb25zdCBlbnRpdHkgb2YgbmV3RW50aXRpZXMpIHtcclxuICAgICAgc2V0T25lTXV0YWJseShlbnRpdHksIHN0YXRlKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gc2V0QWxsTXV0YWJseShcclxuICAgIG5ld0VudGl0aWVzOiByZWFkb25seSBUW10gfCBSZWNvcmQ8RW50aXR5SWQsIFQ+LFxyXG4gICAgc3RhdGU6IFJcclxuICApOiB2b2lkIHtcclxuICAgIG5ld0VudGl0aWVzID0gZW5zdXJlRW50aXRpZXNBcnJheShuZXdFbnRpdGllcylcclxuXHJcbiAgICBzdGF0ZS5pZHMgPSBbXVxyXG4gICAgc3RhdGUuZW50aXRpZXMgPSB7fVxyXG5cclxuICAgIGFkZE1hbnlNdXRhYmx5KG5ld0VudGl0aWVzLCBzdGF0ZSlcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHJlbW92ZU9uZU11dGFibHkoa2V5OiBFbnRpdHlJZCwgc3RhdGU6IFIpOiB2b2lkIHtcclxuICAgIHJldHVybiByZW1vdmVNYW55TXV0YWJseShba2V5XSwgc3RhdGUpXHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiByZW1vdmVNYW55TXV0YWJseShrZXlzOiByZWFkb25seSBFbnRpdHlJZFtdLCBzdGF0ZTogUik6IHZvaWQge1xyXG4gICAgbGV0IGRpZE11dGF0ZSA9IGZhbHNlXHJcblxyXG4gICAga2V5cy5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgICAgaWYgKGtleSBpbiBzdGF0ZS5lbnRpdGllcykge1xyXG4gICAgICAgIGRlbGV0ZSBzdGF0ZS5lbnRpdGllc1trZXldXHJcbiAgICAgICAgZGlkTXV0YXRlID0gdHJ1ZVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG5cclxuICAgIGlmIChkaWRNdXRhdGUpIHtcclxuICAgICAgc3RhdGUuaWRzID0gc3RhdGUuaWRzLmZpbHRlcigoaWQpID0+IGlkIGluIHN0YXRlLmVudGl0aWVzKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gcmVtb3ZlQWxsTXV0YWJseShzdGF0ZTogUik6IHZvaWQge1xyXG4gICAgT2JqZWN0LmFzc2lnbihzdGF0ZSwge1xyXG4gICAgICBpZHM6IFtdLFxyXG4gICAgICBlbnRpdGllczoge30sXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gdGFrZU5ld0tleShcclxuICAgIGtleXM6IHsgW2lkOiBzdHJpbmddOiBFbnRpdHlJZCB9LFxyXG4gICAgdXBkYXRlOiBVcGRhdGU8VD4sXHJcbiAgICBzdGF0ZTogUlxyXG4gICk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3Qgb3JpZ2luYWwgPSBzdGF0ZS5lbnRpdGllc1t1cGRhdGUuaWRdXHJcbiAgICBjb25zdCB1cGRhdGVkOiBUID0gT2JqZWN0LmFzc2lnbih7fSwgb3JpZ2luYWwsIHVwZGF0ZS5jaGFuZ2VzKVxyXG4gICAgY29uc3QgbmV3S2V5ID0gc2VsZWN0SWRWYWx1ZSh1cGRhdGVkLCBzZWxlY3RJZClcclxuICAgIGNvbnN0IGhhc05ld0tleSA9IG5ld0tleSAhPT0gdXBkYXRlLmlkXHJcblxyXG4gICAgaWYgKGhhc05ld0tleSkge1xyXG4gICAgICBrZXlzW3VwZGF0ZS5pZF0gPSBuZXdLZXlcclxuICAgICAgZGVsZXRlIHN0YXRlLmVudGl0aWVzW3VwZGF0ZS5pZF1cclxuICAgIH1cclxuXHJcbiAgICBzdGF0ZS5lbnRpdGllc1tuZXdLZXldID0gdXBkYXRlZFxyXG5cclxuICAgIHJldHVybiBoYXNOZXdLZXlcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHVwZGF0ZU9uZU11dGFibHkodXBkYXRlOiBVcGRhdGU8VD4sIHN0YXRlOiBSKTogdm9pZCB7XHJcbiAgICByZXR1cm4gdXBkYXRlTWFueU11dGFibHkoW3VwZGF0ZV0sIHN0YXRlKVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gdXBkYXRlTWFueU11dGFibHkoXHJcbiAgICB1cGRhdGVzOiBSZWFkb25seUFycmF5PFVwZGF0ZTxUPj4sXHJcbiAgICBzdGF0ZTogUlxyXG4gICk6IHZvaWQge1xyXG4gICAgY29uc3QgbmV3S2V5czogeyBbaWQ6IHN0cmluZ106IEVudGl0eUlkIH0gPSB7fVxyXG5cclxuICAgIGNvbnN0IHVwZGF0ZXNQZXJFbnRpdHk6IHsgW2lkOiBzdHJpbmddOiBVcGRhdGU8VD4gfSA9IHt9XHJcblxyXG4gICAgdXBkYXRlcy5mb3JFYWNoKCh1cGRhdGUpID0+IHtcclxuICAgICAgLy8gT25seSBhcHBseSB1cGRhdGVzIHRvIGVudGl0aWVzIHRoYXQgY3VycmVudGx5IGV4aXN0XHJcbiAgICAgIGlmICh1cGRhdGUuaWQgaW4gc3RhdGUuZW50aXRpZXMpIHtcclxuICAgICAgICAvLyBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgdXBkYXRlcyB0byBvbmUgZW50aXR5LCBtZXJnZSB0aGVtIHRvZ2V0aGVyXHJcbiAgICAgICAgdXBkYXRlc1BlckVudGl0eVt1cGRhdGUuaWRdID0ge1xyXG4gICAgICAgICAgaWQ6IHVwZGF0ZS5pZCxcclxuICAgICAgICAgIC8vIFNwcmVhZHMgaWdub3JlIGZhbHN5IHZhbHVlcywgc28gdGhpcyB3b3JrcyBldmVuIGlmIHRoZXJlIGlzbid0XHJcbiAgICAgICAgICAvLyBhbiBleGlzdGluZyB1cGRhdGUgYWxyZWFkeSBhdCB0aGlzIGtleVxyXG4gICAgICAgICAgY2hhbmdlczoge1xyXG4gICAgICAgICAgICAuLi4odXBkYXRlc1BlckVudGl0eVt1cGRhdGUuaWRdXHJcbiAgICAgICAgICAgICAgPyB1cGRhdGVzUGVyRW50aXR5W3VwZGF0ZS5pZF0uY2hhbmdlc1xyXG4gICAgICAgICAgICAgIDogbnVsbCksXHJcbiAgICAgICAgICAgIC4uLnVwZGF0ZS5jaGFuZ2VzLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcblxyXG4gICAgdXBkYXRlcyA9IE9iamVjdC52YWx1ZXModXBkYXRlc1BlckVudGl0eSlcclxuXHJcbiAgICBjb25zdCBkaWRNdXRhdGVFbnRpdGllcyA9IHVwZGF0ZXMubGVuZ3RoID4gMFxyXG5cclxuICAgIGlmIChkaWRNdXRhdGVFbnRpdGllcykge1xyXG4gICAgICBjb25zdCBkaWRNdXRhdGVJZHMgPVxyXG4gICAgICAgIHVwZGF0ZXMuZmlsdGVyKCh1cGRhdGUpID0+IHRha2VOZXdLZXkobmV3S2V5cywgdXBkYXRlLCBzdGF0ZSkpLmxlbmd0aCA+XHJcbiAgICAgICAgMFxyXG5cclxuICAgICAgaWYgKGRpZE11dGF0ZUlkcykge1xyXG4gICAgICAgIHN0YXRlLmlkcyA9IE9iamVjdC5rZXlzKHN0YXRlLmVudGl0aWVzKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiB1cHNlcnRPbmVNdXRhYmx5KGVudGl0eTogVCwgc3RhdGU6IFIpOiB2b2lkIHtcclxuICAgIHJldHVybiB1cHNlcnRNYW55TXV0YWJseShbZW50aXR5XSwgc3RhdGUpXHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiB1cHNlcnRNYW55TXV0YWJseShcclxuICAgIG5ld0VudGl0aWVzOiByZWFkb25seSBUW10gfCBSZWNvcmQ8RW50aXR5SWQsIFQ+LFxyXG4gICAgc3RhdGU6IFJcclxuICApOiB2b2lkIHtcclxuICAgIGNvbnN0IFthZGRlZCwgdXBkYXRlZF0gPSBzcGxpdEFkZGVkVXBkYXRlZEVudGl0aWVzPFQ+KFxyXG4gICAgICBuZXdFbnRpdGllcyxcclxuICAgICAgc2VsZWN0SWQsXHJcbiAgICAgIHN0YXRlXHJcbiAgICApXHJcblxyXG4gICAgdXBkYXRlTWFueU11dGFibHkodXBkYXRlZCwgc3RhdGUpXHJcbiAgICBhZGRNYW55TXV0YWJseShhZGRlZCwgc3RhdGUpXHJcbiAgfVxyXG5cclxuICByZXR1cm4ge1xyXG4gICAgcmVtb3ZlQWxsOiBjcmVhdGVTaW5nbGVBcmd1bWVudFN0YXRlT3BlcmF0b3IocmVtb3ZlQWxsTXV0YWJseSksXHJcbiAgICBhZGRPbmU6IGNyZWF0ZVN0YXRlT3BlcmF0b3IoYWRkT25lTXV0YWJseSksXHJcbiAgICBhZGRNYW55OiBjcmVhdGVTdGF0ZU9wZXJhdG9yKGFkZE1hbnlNdXRhYmx5KSxcclxuICAgIHNldE9uZTogY3JlYXRlU3RhdGVPcGVyYXRvcihzZXRPbmVNdXRhYmx5KSxcclxuICAgIHNldE1hbnk6IGNyZWF0ZVN0YXRlT3BlcmF0b3Ioc2V0TWFueU11dGFibHkpLFxyXG4gICAgc2V0QWxsOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHNldEFsbE11dGFibHkpLFxyXG4gICAgdXBkYXRlT25lOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHVwZGF0ZU9uZU11dGFibHkpLFxyXG4gICAgdXBkYXRlTWFueTogY3JlYXRlU3RhdGVPcGVyYXRvcih1cGRhdGVNYW55TXV0YWJseSksXHJcbiAgICB1cHNlcnRPbmU6IGNyZWF0ZVN0YXRlT3BlcmF0b3IodXBzZXJ0T25lTXV0YWJseSksXHJcbiAgICB1cHNlcnRNYW55OiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHVwc2VydE1hbnlNdXRhYmx5KSxcclxuICAgIHJlbW92ZU9uZTogY3JlYXRlU3RhdGVPcGVyYXRvcihyZW1vdmVPbmVNdXRhYmx5KSxcclxuICAgIHJlbW92ZU1hbnk6IGNyZWF0ZVN0YXRlT3BlcmF0b3IocmVtb3ZlTWFueU11dGFibHkpLFxyXG4gIH1cclxufVxyXG4iLCAiaW1wb3J0IHR5cGUge1xyXG4gIEVudGl0eVN0YXRlLFxyXG4gIElkU2VsZWN0b3IsXHJcbiAgQ29tcGFyZXIsXHJcbiAgRW50aXR5U3RhdGVBZGFwdGVyLFxyXG4gIFVwZGF0ZSxcclxuICBFbnRpdHlJZCxcclxufSBmcm9tICcuL21vZGVscydcclxuaW1wb3J0IHsgY3JlYXRlU3RhdGVPcGVyYXRvciB9IGZyb20gJy4vc3RhdGVfYWRhcHRlcidcclxuaW1wb3J0IHsgY3JlYXRlVW5zb3J0ZWRTdGF0ZUFkYXB0ZXIgfSBmcm9tICcuL3Vuc29ydGVkX3N0YXRlX2FkYXB0ZXInXHJcbmltcG9ydCB7XHJcbiAgc2VsZWN0SWRWYWx1ZSxcclxuICBlbnN1cmVFbnRpdGllc0FycmF5LFxyXG4gIHNwbGl0QWRkZWRVcGRhdGVkRW50aXRpZXMsXHJcbn0gZnJvbSAnLi91dGlscydcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTb3J0ZWRTdGF0ZUFkYXB0ZXI8VD4oXHJcbiAgc2VsZWN0SWQ6IElkU2VsZWN0b3I8VD4sXHJcbiAgc29ydDogQ29tcGFyZXI8VD5cclxuKTogRW50aXR5U3RhdGVBZGFwdGVyPFQ+IHtcclxuICB0eXBlIFIgPSBFbnRpdHlTdGF0ZTxUPlxyXG5cclxuICBjb25zdCB7IHJlbW92ZU9uZSwgcmVtb3ZlTWFueSwgcmVtb3ZlQWxsIH0gPVxyXG4gICAgY3JlYXRlVW5zb3J0ZWRTdGF0ZUFkYXB0ZXIoc2VsZWN0SWQpXHJcblxyXG4gIGZ1bmN0aW9uIGFkZE9uZU11dGFibHkoZW50aXR5OiBULCBzdGF0ZTogUik6IHZvaWQge1xyXG4gICAgcmV0dXJuIGFkZE1hbnlNdXRhYmx5KFtlbnRpdHldLCBzdGF0ZSlcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGFkZE1hbnlNdXRhYmx5KFxyXG4gICAgbmV3RW50aXRpZXM6IHJlYWRvbmx5IFRbXSB8IFJlY29yZDxFbnRpdHlJZCwgVD4sXHJcbiAgICBzdGF0ZTogUlxyXG4gICk6IHZvaWQge1xyXG4gICAgbmV3RW50aXRpZXMgPSBlbnN1cmVFbnRpdGllc0FycmF5KG5ld0VudGl0aWVzKVxyXG5cclxuICAgIGNvbnN0IG1vZGVscyA9IG5ld0VudGl0aWVzLmZpbHRlcihcclxuICAgICAgKG1vZGVsKSA9PiAhKHNlbGVjdElkVmFsdWUobW9kZWwsIHNlbGVjdElkKSBpbiBzdGF0ZS5lbnRpdGllcylcclxuICAgIClcclxuXHJcbiAgICBpZiAobW9kZWxzLmxlbmd0aCAhPT0gMCkge1xyXG4gICAgICBtZXJnZShtb2RlbHMsIHN0YXRlKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gc2V0T25lTXV0YWJseShlbnRpdHk6IFQsIHN0YXRlOiBSKTogdm9pZCB7XHJcbiAgICByZXR1cm4gc2V0TWFueU11dGFibHkoW2VudGl0eV0sIHN0YXRlKVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gc2V0TWFueU11dGFibHkoXHJcbiAgICBuZXdFbnRpdGllczogcmVhZG9ubHkgVFtdIHwgUmVjb3JkPEVudGl0eUlkLCBUPixcclxuICAgIHN0YXRlOiBSXHJcbiAgKTogdm9pZCB7XHJcbiAgICBuZXdFbnRpdGllcyA9IGVuc3VyZUVudGl0aWVzQXJyYXkobmV3RW50aXRpZXMpXHJcbiAgICBpZiAobmV3RW50aXRpZXMubGVuZ3RoICE9PSAwKSB7XHJcbiAgICAgIG1lcmdlKG5ld0VudGl0aWVzLCBzdGF0ZSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHNldEFsbE11dGFibHkoXHJcbiAgICBuZXdFbnRpdGllczogcmVhZG9ubHkgVFtdIHwgUmVjb3JkPEVudGl0eUlkLCBUPixcclxuICAgIHN0YXRlOiBSXHJcbiAgKTogdm9pZCB7XHJcbiAgICBuZXdFbnRpdGllcyA9IGVuc3VyZUVudGl0aWVzQXJyYXkobmV3RW50aXRpZXMpXHJcbiAgICBzdGF0ZS5lbnRpdGllcyA9IHt9XHJcbiAgICBzdGF0ZS5pZHMgPSBbXVxyXG5cclxuICAgIGFkZE1hbnlNdXRhYmx5KG5ld0VudGl0aWVzLCBzdGF0ZSlcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHVwZGF0ZU9uZU11dGFibHkodXBkYXRlOiBVcGRhdGU8VD4sIHN0YXRlOiBSKTogdm9pZCB7XHJcbiAgICByZXR1cm4gdXBkYXRlTWFueU11dGFibHkoW3VwZGF0ZV0sIHN0YXRlKVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gdXBkYXRlTWFueU11dGFibHkoXHJcbiAgICB1cGRhdGVzOiBSZWFkb25seUFycmF5PFVwZGF0ZTxUPj4sXHJcbiAgICBzdGF0ZTogUlxyXG4gICk6IHZvaWQge1xyXG4gICAgbGV0IGFwcGxpZWRVcGRhdGVzID0gZmFsc2VcclxuXHJcbiAgICBmb3IgKGxldCB1cGRhdGUgb2YgdXBkYXRlcykge1xyXG4gICAgICBjb25zdCBlbnRpdHkgPSBzdGF0ZS5lbnRpdGllc1t1cGRhdGUuaWRdXHJcbiAgICAgIGlmICghZW50aXR5KSB7XHJcbiAgICAgICAgY29udGludWVcclxuICAgICAgfVxyXG5cclxuICAgICAgYXBwbGllZFVwZGF0ZXMgPSB0cnVlXHJcblxyXG4gICAgICBPYmplY3QuYXNzaWduKGVudGl0eSwgdXBkYXRlLmNoYW5nZXMpXHJcbiAgICAgIGNvbnN0IG5ld0lkID0gc2VsZWN0SWQoZW50aXR5KVxyXG4gICAgICBpZiAodXBkYXRlLmlkICE9PSBuZXdJZCkge1xyXG4gICAgICAgIGRlbGV0ZSBzdGF0ZS5lbnRpdGllc1t1cGRhdGUuaWRdXHJcbiAgICAgICAgc3RhdGUuZW50aXRpZXNbbmV3SWRdID0gZW50aXR5XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoYXBwbGllZFVwZGF0ZXMpIHtcclxuICAgICAgcmVzb3J0RW50aXRpZXMoc3RhdGUpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiB1cHNlcnRPbmVNdXRhYmx5KGVudGl0eTogVCwgc3RhdGU6IFIpOiB2b2lkIHtcclxuICAgIHJldHVybiB1cHNlcnRNYW55TXV0YWJseShbZW50aXR5XSwgc3RhdGUpXHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiB1cHNlcnRNYW55TXV0YWJseShcclxuICAgIG5ld0VudGl0aWVzOiByZWFkb25seSBUW10gfCBSZWNvcmQ8RW50aXR5SWQsIFQ+LFxyXG4gICAgc3RhdGU6IFJcclxuICApOiB2b2lkIHtcclxuICAgIGNvbnN0IFthZGRlZCwgdXBkYXRlZF0gPSBzcGxpdEFkZGVkVXBkYXRlZEVudGl0aWVzPFQ+KFxyXG4gICAgICBuZXdFbnRpdGllcyxcclxuICAgICAgc2VsZWN0SWQsXHJcbiAgICAgIHN0YXRlXHJcbiAgICApXHJcblxyXG4gICAgdXBkYXRlTWFueU11dGFibHkodXBkYXRlZCwgc3RhdGUpXHJcbiAgICBhZGRNYW55TXV0YWJseShhZGRlZCwgc3RhdGUpXHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBhcmVBcnJheXNFcXVhbChhOiByZWFkb25seSB1bmtub3duW10sIGI6IHJlYWRvbmx5IHVua25vd25bXSkge1xyXG4gICAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkge1xyXG4gICAgICByZXR1cm4gZmFsc2VcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGEubGVuZ3RoICYmIGkgPCBiLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmIChhW2ldID09PSBiW2ldKSB7XHJcbiAgICAgICAgY29udGludWVcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZmFsc2VcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlXHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBtZXJnZShtb2RlbHM6IHJlYWRvbmx5IFRbXSwgc3RhdGU6IFIpOiB2b2lkIHtcclxuICAgIC8vIEluc2VydC9vdmVyd3JpdGUgYWxsIG5ldy91cGRhdGVkXHJcbiAgICBtb2RlbHMuZm9yRWFjaCgobW9kZWwpID0+IHtcclxuICAgICAgc3RhdGUuZW50aXRpZXNbc2VsZWN0SWQobW9kZWwpXSA9IG1vZGVsXHJcbiAgICB9KVxyXG5cclxuICAgIHJlc29ydEVudGl0aWVzKHN0YXRlKVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gcmVzb3J0RW50aXRpZXMoc3RhdGU6IFIpIHtcclxuICAgIGNvbnN0IGFsbEVudGl0aWVzID0gT2JqZWN0LnZhbHVlcyhzdGF0ZS5lbnRpdGllcykgYXMgVFtdXHJcbiAgICBhbGxFbnRpdGllcy5zb3J0KHNvcnQpXHJcblxyXG4gICAgY29uc3QgbmV3U29ydGVkSWRzID0gYWxsRW50aXRpZXMubWFwKHNlbGVjdElkKVxyXG4gICAgY29uc3QgeyBpZHMgfSA9IHN0YXRlXHJcblxyXG4gICAgaWYgKCFhcmVBcnJheXNFcXVhbChpZHMsIG5ld1NvcnRlZElkcykpIHtcclxuICAgICAgc3RhdGUuaWRzID0gbmV3U29ydGVkSWRzXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4ge1xyXG4gICAgcmVtb3ZlT25lLFxyXG4gICAgcmVtb3ZlTWFueSxcclxuICAgIHJlbW92ZUFsbCxcclxuICAgIGFkZE9uZTogY3JlYXRlU3RhdGVPcGVyYXRvcihhZGRPbmVNdXRhYmx5KSxcclxuICAgIHVwZGF0ZU9uZTogY3JlYXRlU3RhdGVPcGVyYXRvcih1cGRhdGVPbmVNdXRhYmx5KSxcclxuICAgIHVwc2VydE9uZTogY3JlYXRlU3RhdGVPcGVyYXRvcih1cHNlcnRPbmVNdXRhYmx5KSxcclxuICAgIHNldE9uZTogY3JlYXRlU3RhdGVPcGVyYXRvcihzZXRPbmVNdXRhYmx5KSxcclxuICAgIHNldE1hbnk6IGNyZWF0ZVN0YXRlT3BlcmF0b3Ioc2V0TWFueU11dGFibHkpLFxyXG4gICAgc2V0QWxsOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHNldEFsbE11dGFibHkpLFxyXG4gICAgYWRkTWFueTogY3JlYXRlU3RhdGVPcGVyYXRvcihhZGRNYW55TXV0YWJseSksXHJcbiAgICB1cGRhdGVNYW55OiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHVwZGF0ZU1hbnlNdXRhYmx5KSxcclxuICAgIHVwc2VydE1hbnk6IGNyZWF0ZVN0YXRlT3BlcmF0b3IodXBzZXJ0TWFueU11dGFibHkpLFxyXG4gIH1cclxufVxyXG4iLCAiaW1wb3J0IHR5cGUge1xyXG4gIEVudGl0eURlZmluaXRpb24sXHJcbiAgQ29tcGFyZXIsXHJcbiAgSWRTZWxlY3RvcixcclxuICBFbnRpdHlBZGFwdGVyLFxyXG59IGZyb20gJy4vbW9kZWxzJ1xyXG5pbXBvcnQgeyBjcmVhdGVJbml0aWFsU3RhdGVGYWN0b3J5IH0gZnJvbSAnLi9lbnRpdHlfc3RhdGUnXHJcbmltcG9ydCB7IGNyZWF0ZVNlbGVjdG9yc0ZhY3RvcnkgfSBmcm9tICcuL3N0YXRlX3NlbGVjdG9ycydcclxuaW1wb3J0IHsgY3JlYXRlU29ydGVkU3RhdGVBZGFwdGVyIH0gZnJvbSAnLi9zb3J0ZWRfc3RhdGVfYWRhcHRlcidcclxuaW1wb3J0IHsgY3JlYXRlVW5zb3J0ZWRTdGF0ZUFkYXB0ZXIgfSBmcm9tICcuL3Vuc29ydGVkX3N0YXRlX2FkYXB0ZXInXHJcblxyXG4vKipcclxuICpcclxuICogQHBhcmFtIG9wdGlvbnNcclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUVudGl0eUFkYXB0ZXI8VD4oXHJcbiAgb3B0aW9uczoge1xyXG4gICAgc2VsZWN0SWQ/OiBJZFNlbGVjdG9yPFQ+XHJcbiAgICBzb3J0Q29tcGFyZXI/OiBmYWxzZSB8IENvbXBhcmVyPFQ+XHJcbiAgfSA9IHt9XHJcbik6IEVudGl0eUFkYXB0ZXI8VD4ge1xyXG4gIGNvbnN0IHsgc2VsZWN0SWQsIHNvcnRDb21wYXJlciB9OiBFbnRpdHlEZWZpbml0aW9uPFQ+ID0ge1xyXG4gICAgc29ydENvbXBhcmVyOiBmYWxzZSxcclxuICAgIHNlbGVjdElkOiAoaW5zdGFuY2U6IGFueSkgPT4gaW5zdGFuY2UuaWQsXHJcbiAgICAuLi5vcHRpb25zLFxyXG4gIH1cclxuXHJcbiAgY29uc3Qgc3RhdGVGYWN0b3J5ID0gY3JlYXRlSW5pdGlhbFN0YXRlRmFjdG9yeTxUPigpXHJcbiAgY29uc3Qgc2VsZWN0b3JzRmFjdG9yeSA9IGNyZWF0ZVNlbGVjdG9yc0ZhY3Rvcnk8VD4oKVxyXG4gIGNvbnN0IHN0YXRlQWRhcHRlciA9IHNvcnRDb21wYXJlclxyXG4gICAgPyBjcmVhdGVTb3J0ZWRTdGF0ZUFkYXB0ZXIoc2VsZWN0SWQsIHNvcnRDb21wYXJlcilcclxuICAgIDogY3JlYXRlVW5zb3J0ZWRTdGF0ZUFkYXB0ZXIoc2VsZWN0SWQpXHJcblxyXG4gIHJldHVybiB7XHJcbiAgICBzZWxlY3RJZCxcclxuICAgIHNvcnRDb21wYXJlcixcclxuICAgIC4uLnN0YXRlRmFjdG9yeSxcclxuICAgIC4uLnNlbGVjdG9yc0ZhY3RvcnksXHJcbiAgICAuLi5zdGF0ZUFkYXB0ZXIsXHJcbiAgfVxyXG59XHJcbiIsICIvLyBCb3Jyb3dlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9haS9uYW5vaWQvYmxvYi8zLjAuMi9ub24tc2VjdXJlL2luZGV4LmpzXHJcbi8vIFRoaXMgYWxwaGFiZXQgdXNlcyBgQS1aYS16MC05Xy1gIHN5bWJvbHMuIEEgZ2VuZXRpYyBhbGdvcml0aG0gaGVscGVkXHJcbi8vIG9wdGltaXplIHRoZSBnemlwIGNvbXByZXNzaW9uIGZvciB0aGlzIGFscGhhYmV0LlxyXG5sZXQgdXJsQWxwaGFiZXQgPVxyXG4gICdNb2R1bGVTeW1iaGFzT3duUHItMDEyMzQ1Njc4OUFCQ0RFRkdITlJWZmdjdGlVdnpfS3FZVEprTHhwWlhJalFXJ1xyXG5cclxuLyoqXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBsZXQgbmFub2lkID0gKHNpemUgPSAyMSkgPT4ge1xyXG4gIGxldCBpZCA9ICcnXHJcbiAgLy8gQSBjb21wYWN0IGFsdGVybmF0aXZlIGZvciBgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGVwOyBpKyspYC5cclxuICBsZXQgaSA9IHNpemVcclxuICB3aGlsZSAoaS0tKSB7XHJcbiAgICAvLyBgfCAwYCBpcyBtb3JlIGNvbXBhY3QgYW5kIGZhc3RlciB0aGFuIGBNYXRoLmZsb29yKClgLlxyXG4gICAgaWQgKz0gdXJsQWxwaGFiZXRbKE1hdGgucmFuZG9tKCkgKiA2NCkgfCAwXVxyXG4gIH1cclxuICByZXR1cm4gaWRcclxufVxyXG4iLCAiaW1wb3J0IHR5cGUgeyBEaXNwYXRjaCwgQW55QWN0aW9uIH0gZnJvbSAncmVkdXgnXHJcbmltcG9ydCB0eXBlIHtcclxuICBQYXlsb2FkQWN0aW9uLFxyXG4gIEFjdGlvbkNyZWF0b3JXaXRoUHJlcGFyZWRQYXlsb2FkLFxyXG59IGZyb20gJy4vY3JlYXRlQWN0aW9uJ1xyXG5pbXBvcnQgeyBjcmVhdGVBY3Rpb24gfSBmcm9tICcuL2NyZWF0ZUFjdGlvbidcclxuaW1wb3J0IHR5cGUgeyBUaHVua0Rpc3BhdGNoIH0gZnJvbSAncmVkdXgtdGh1bmsnXHJcbmltcG9ydCB0eXBlIHsgRmFsbGJhY2tJZlVua25vd24sIElkLCBJc0FueSwgSXNVbmtub3duIH0gZnJvbSAnLi90c0hlbHBlcnMnXHJcbmltcG9ydCB7IG5hbm9pZCB9IGZyb20gJy4vbmFub2lkJ1xyXG5cclxuLy8gQHRzLWlnbm9yZSB3ZSBuZWVkIHRoZSBpbXBvcnQgb2YgdGhlc2UgdHlwZXMgZHVlIHRvIGEgYnVuZGxpbmcgaXNzdWUuXHJcbnR5cGUgX0tlZXAgPSBQYXlsb2FkQWN0aW9uIHwgQWN0aW9uQ3JlYXRvcldpdGhQcmVwYXJlZFBheWxvYWQ8YW55LCB1bmtub3duPlxyXG5cclxuZXhwb3J0IHR5cGUgQmFzZVRodW5rQVBJPFxyXG4gIFMsXHJcbiAgRSxcclxuICBEIGV4dGVuZHMgRGlzcGF0Y2ggPSBEaXNwYXRjaCxcclxuICBSZWplY3RlZFZhbHVlID0gdW5rbm93bixcclxuICBSZWplY3RlZE1ldGEgPSB1bmtub3duLFxyXG4gIEZ1bGZpbGxlZE1ldGEgPSB1bmtub3duXHJcbj4gPSB7XHJcbiAgZGlzcGF0Y2g6IERcclxuICBnZXRTdGF0ZTogKCkgPT4gU1xyXG4gIGV4dHJhOiBFXHJcbiAgcmVxdWVzdElkOiBzdHJpbmdcclxuICBzaWduYWw6IEFib3J0U2lnbmFsXHJcbiAgYWJvcnQ6IChyZWFzb24/OiBzdHJpbmcpID0+IHZvaWRcclxuICByZWplY3RXaXRoVmFsdWU6IElzVW5rbm93bjxcclxuICAgIFJlamVjdGVkTWV0YSxcclxuICAgICh2YWx1ZTogUmVqZWN0ZWRWYWx1ZSkgPT4gUmVqZWN0V2l0aFZhbHVlPFJlamVjdGVkVmFsdWUsIFJlamVjdGVkTWV0YT4sXHJcbiAgICAoXHJcbiAgICAgIHZhbHVlOiBSZWplY3RlZFZhbHVlLFxyXG4gICAgICBtZXRhOiBSZWplY3RlZE1ldGFcclxuICAgICkgPT4gUmVqZWN0V2l0aFZhbHVlPFJlamVjdGVkVmFsdWUsIFJlamVjdGVkTWV0YT5cclxuICA+XHJcbiAgZnVsZmlsbFdpdGhWYWx1ZTogSXNVbmtub3duPFxyXG4gICAgRnVsZmlsbGVkTWV0YSxcclxuICAgIDxGdWxmaWxsZWRWYWx1ZT4odmFsdWU6IEZ1bGZpbGxlZFZhbHVlKSA9PiBGdWxmaWxsZWRWYWx1ZSxcclxuICAgIDxGdWxmaWxsZWRWYWx1ZT4oXHJcbiAgICAgIHZhbHVlOiBGdWxmaWxsZWRWYWx1ZSxcclxuICAgICAgbWV0YTogRnVsZmlsbGVkTWV0YVxyXG4gICAgKSA9PiBGdWxmaWxsV2l0aE1ldGE8RnVsZmlsbGVkVmFsdWUsIEZ1bGZpbGxlZE1ldGE+XHJcbiAgPlxyXG59XHJcblxyXG4vKipcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBTZXJpYWxpemVkRXJyb3Ige1xyXG4gIG5hbWU/OiBzdHJpbmdcclxuICBtZXNzYWdlPzogc3RyaW5nXHJcbiAgc3RhY2s/OiBzdHJpbmdcclxuICBjb2RlPzogc3RyaW5nXHJcbn1cclxuXHJcbmNvbnN0IGNvbW1vblByb3BlcnRpZXM6IEFycmF5PGtleW9mIFNlcmlhbGl6ZWRFcnJvcj4gPSBbXHJcbiAgJ25hbWUnLFxyXG4gICdtZXNzYWdlJyxcclxuICAnc3RhY2snLFxyXG4gICdjb2RlJyxcclxuXVxyXG5cclxuY2xhc3MgUmVqZWN0V2l0aFZhbHVlPFBheWxvYWQsIFJlamVjdGVkTWV0YT4ge1xyXG4gIC8qXHJcbiAgdHlwZS1vbmx5IHByb3BlcnR5IHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gUmVqZWN0V2l0aFZhbHVlIGFuZCBGdWxmaWxsV2l0aE1ldGFcclxuICBkb2VzIG5vdCBleGlzdCBhdCBydW50aW1lXHJcbiAgKi9cclxuICBwcml2YXRlIHJlYWRvbmx5IF90eXBlITogJ1JlamVjdFdpdGhWYWx1ZSdcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyByZWFkb25seSBwYXlsb2FkOiBQYXlsb2FkLFxyXG4gICAgcHVibGljIHJlYWRvbmx5IG1ldGE6IFJlamVjdGVkTWV0YVxyXG4gICkge31cclxufVxyXG5cclxuY2xhc3MgRnVsZmlsbFdpdGhNZXRhPFBheWxvYWQsIEZ1bGZpbGxlZE1ldGE+IHtcclxuICAvKlxyXG4gIHR5cGUtb25seSBwcm9wZXJ0eSB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIFJlamVjdFdpdGhWYWx1ZSBhbmQgRnVsZmlsbFdpdGhNZXRhXHJcbiAgZG9lcyBub3QgZXhpc3QgYXQgcnVudGltZVxyXG4gICovXHJcbiAgcHJpdmF0ZSByZWFkb25seSBfdHlwZSE6ICdGdWxmaWxsV2l0aE1ldGEnXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgcGF5bG9hZDogUGF5bG9hZCxcclxuICAgIHB1YmxpYyByZWFkb25seSBtZXRhOiBGdWxmaWxsZWRNZXRhXHJcbiAgKSB7fVxyXG59XHJcblxyXG4vKipcclxuICogU2VyaWFsaXplcyBhbiBlcnJvciBpbnRvIGEgcGxhaW4gb2JqZWN0LlxyXG4gKiBSZXdvcmtlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvc2VyaWFsaXplLWVycm9yXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBjb25zdCBtaW5pU2VyaWFsaXplRXJyb3IgPSAodmFsdWU6IGFueSk6IFNlcmlhbGl6ZWRFcnJvciA9PiB7XHJcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwpIHtcclxuICAgIGNvbnN0IHNpbXBsZUVycm9yOiBTZXJpYWxpemVkRXJyb3IgPSB7fVxyXG4gICAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBjb21tb25Qcm9wZXJ0aWVzKSB7XHJcbiAgICAgIGlmICh0eXBlb2YgdmFsdWVbcHJvcGVydHldID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIHNpbXBsZUVycm9yW3Byb3BlcnR5XSA9IHZhbHVlW3Byb3BlcnR5XVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHNpbXBsZUVycm9yXHJcbiAgfVxyXG5cclxuICByZXR1cm4geyBtZXNzYWdlOiBTdHJpbmcodmFsdWUpIH1cclxufVxyXG5cclxudHlwZSBBc3luY1RodW5rQ29uZmlnID0ge1xyXG4gIHN0YXRlPzogdW5rbm93blxyXG4gIGRpc3BhdGNoPzogRGlzcGF0Y2hcclxuICBleHRyYT86IHVua25vd25cclxuICByZWplY3RWYWx1ZT86IHVua25vd25cclxuICBzZXJpYWxpemVkRXJyb3JUeXBlPzogdW5rbm93blxyXG4gIHBlbmRpbmdNZXRhPzogdW5rbm93blxyXG4gIGZ1bGZpbGxlZE1ldGE/OiB1bmtub3duXHJcbiAgcmVqZWN0ZWRNZXRhPzogdW5rbm93blxyXG59XHJcblxyXG50eXBlIEdldFN0YXRlPFRodW5rQXBpQ29uZmlnPiA9IFRodW5rQXBpQ29uZmlnIGV4dGVuZHMge1xyXG4gIHN0YXRlOiBpbmZlciBTdGF0ZVxyXG59XHJcbiAgPyBTdGF0ZVxyXG4gIDogdW5rbm93blxyXG50eXBlIEdldEV4dHJhPFRodW5rQXBpQ29uZmlnPiA9IFRodW5rQXBpQ29uZmlnIGV4dGVuZHMgeyBleHRyYTogaW5mZXIgRXh0cmEgfVxyXG4gID8gRXh0cmFcclxuICA6IHVua25vd25cclxudHlwZSBHZXREaXNwYXRjaDxUaHVua0FwaUNvbmZpZz4gPSBUaHVua0FwaUNvbmZpZyBleHRlbmRzIHtcclxuICBkaXNwYXRjaDogaW5mZXIgRGlzcGF0Y2hcclxufVxyXG4gID8gRmFsbGJhY2tJZlVua25vd248XHJcbiAgICAgIERpc3BhdGNoLFxyXG4gICAgICBUaHVua0Rpc3BhdGNoPFxyXG4gICAgICAgIEdldFN0YXRlPFRodW5rQXBpQ29uZmlnPixcclxuICAgICAgICBHZXRFeHRyYTxUaHVua0FwaUNvbmZpZz4sXHJcbiAgICAgICAgQW55QWN0aW9uXHJcbiAgICAgID5cclxuICAgID5cclxuICA6IFRodW5rRGlzcGF0Y2g8R2V0U3RhdGU8VGh1bmtBcGlDb25maWc+LCBHZXRFeHRyYTxUaHVua0FwaUNvbmZpZz4sIEFueUFjdGlvbj5cclxuXHJcbmV4cG9ydCB0eXBlIEdldFRodW5rQVBJPFRodW5rQXBpQ29uZmlnPiA9IEJhc2VUaHVua0FQSTxcclxuICBHZXRTdGF0ZTxUaHVua0FwaUNvbmZpZz4sXHJcbiAgR2V0RXh0cmE8VGh1bmtBcGlDb25maWc+LFxyXG4gIEdldERpc3BhdGNoPFRodW5rQXBpQ29uZmlnPixcclxuICBHZXRSZWplY3RWYWx1ZTxUaHVua0FwaUNvbmZpZz4sXHJcbiAgR2V0UmVqZWN0ZWRNZXRhPFRodW5rQXBpQ29uZmlnPixcclxuICBHZXRGdWxmaWxsZWRNZXRhPFRodW5rQXBpQ29uZmlnPlxyXG4+XHJcblxyXG50eXBlIEdldFJlamVjdFZhbHVlPFRodW5rQXBpQ29uZmlnPiA9IFRodW5rQXBpQ29uZmlnIGV4dGVuZHMge1xyXG4gIHJlamVjdFZhbHVlOiBpbmZlciBSZWplY3RWYWx1ZVxyXG59XHJcbiAgPyBSZWplY3RWYWx1ZVxyXG4gIDogdW5rbm93blxyXG5cclxudHlwZSBHZXRQZW5kaW5nTWV0YTxUaHVua0FwaUNvbmZpZz4gPSBUaHVua0FwaUNvbmZpZyBleHRlbmRzIHtcclxuICBwZW5kaW5nTWV0YTogaW5mZXIgUGVuZGluZ01ldGFcclxufVxyXG4gID8gUGVuZGluZ01ldGFcclxuICA6IHVua25vd25cclxuXHJcbnR5cGUgR2V0RnVsZmlsbGVkTWV0YTxUaHVua0FwaUNvbmZpZz4gPSBUaHVua0FwaUNvbmZpZyBleHRlbmRzIHtcclxuICBmdWxmaWxsZWRNZXRhOiBpbmZlciBGdWxmaWxsZWRNZXRhXHJcbn1cclxuICA/IEZ1bGZpbGxlZE1ldGFcclxuICA6IHVua25vd25cclxuXHJcbnR5cGUgR2V0UmVqZWN0ZWRNZXRhPFRodW5rQXBpQ29uZmlnPiA9IFRodW5rQXBpQ29uZmlnIGV4dGVuZHMge1xyXG4gIHJlamVjdGVkTWV0YTogaW5mZXIgUmVqZWN0ZWRNZXRhXHJcbn1cclxuICA/IFJlamVjdGVkTWV0YVxyXG4gIDogdW5rbm93blxyXG5cclxudHlwZSBHZXRTZXJpYWxpemVkRXJyb3JUeXBlPFRodW5rQXBpQ29uZmlnPiA9IFRodW5rQXBpQ29uZmlnIGV4dGVuZHMge1xyXG4gIHNlcmlhbGl6ZWRFcnJvclR5cGU6IGluZmVyIEdldFNlcmlhbGl6ZWRFcnJvclR5cGVcclxufVxyXG4gID8gR2V0U2VyaWFsaXplZEVycm9yVHlwZVxyXG4gIDogU2VyaWFsaXplZEVycm9yXHJcblxyXG50eXBlIE1heWJlUHJvbWlzZTxUPiA9IFQgfCBQcm9taXNlPFQ+IHwgKFQgZXh0ZW5kcyBhbnkgPyBQcm9taXNlPFQ+IDogbmV2ZXIpXHJcblxyXG4vKipcclxuICogQSB0eXBlIGRlc2NyaWJpbmcgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgYHBheWxvYWRDcmVhdG9yYCBhcmd1bWVudCB0byBgY3JlYXRlQXN5bmNUaHVua2AuXHJcbiAqIE1pZ2h0IGJlIHVzZWZ1bCBmb3Igd3JhcHBpbmcgYGNyZWF0ZUFzeW5jVGh1bmtgIGluIGN1c3RvbSBhYnN0cmFjdGlvbnMuXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCB0eXBlIEFzeW5jVGh1bmtQYXlsb2FkQ3JlYXRvclJldHVyblZhbHVlPFxyXG4gIFJldHVybmVkLFxyXG4gIFRodW5rQXBpQ29uZmlnIGV4dGVuZHMgQXN5bmNUaHVua0NvbmZpZ1xyXG4+ID0gTWF5YmVQcm9taXNlPFxyXG4gIHwgSXNVbmtub3duPFxyXG4gICAgICBHZXRGdWxmaWxsZWRNZXRhPFRodW5rQXBpQ29uZmlnPixcclxuICAgICAgUmV0dXJuZWQsXHJcbiAgICAgIEZ1bGZpbGxXaXRoTWV0YTxSZXR1cm5lZCwgR2V0RnVsZmlsbGVkTWV0YTxUaHVua0FwaUNvbmZpZz4+XHJcbiAgICA+XHJcbiAgfCBSZWplY3RXaXRoVmFsdWU8XHJcbiAgICAgIEdldFJlamVjdFZhbHVlPFRodW5rQXBpQ29uZmlnPixcclxuICAgICAgR2V0UmVqZWN0ZWRNZXRhPFRodW5rQXBpQ29uZmlnPlxyXG4gICAgPlxyXG4+XHJcbi8qKlxyXG4gKiBBIHR5cGUgZGVzY3JpYmluZyB0aGUgYHBheWxvYWRDcmVhdG9yYCBhcmd1bWVudCB0byBgY3JlYXRlQXN5bmNUaHVua2AuXHJcbiAqIE1pZ2h0IGJlIHVzZWZ1bCBmb3Igd3JhcHBpbmcgYGNyZWF0ZUFzeW5jVGh1bmtgIGluIGN1c3RvbSBhYnN0cmFjdGlvbnMuXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCB0eXBlIEFzeW5jVGh1bmtQYXlsb2FkQ3JlYXRvcjxcclxuICBSZXR1cm5lZCxcclxuICBUaHVua0FyZyA9IHZvaWQsXHJcbiAgVGh1bmtBcGlDb25maWcgZXh0ZW5kcyBBc3luY1RodW5rQ29uZmlnID0ge31cclxuPiA9IChcclxuICBhcmc6IFRodW5rQXJnLFxyXG4gIHRodW5rQVBJOiBHZXRUaHVua0FQSTxUaHVua0FwaUNvbmZpZz5cclxuKSA9PiBBc3luY1RodW5rUGF5bG9hZENyZWF0b3JSZXR1cm5WYWx1ZTxSZXR1cm5lZCwgVGh1bmtBcGlDb25maWc+XHJcblxyXG4vKipcclxuICogQSBUaHVua0FjdGlvbiBjcmVhdGVkIGJ5IGBjcmVhdGVBc3luY1RodW5rYC5cclxuICogRGlzcGF0Y2hpbmcgaXQgcmV0dXJucyBhIFByb21pc2UgZm9yIGVpdGhlciBhXHJcbiAqIGZ1bGZpbGxlZCBvciByZWplY3RlZCBhY3Rpb24uXHJcbiAqIEFsc28sIHRoZSByZXR1cm5lZCB2YWx1ZSBjb250YWlucyBhbiBgYWJvcnQoKWAgbWV0aG9kXHJcbiAqIHRoYXQgYWxsb3dzIHRoZSBhc3luY0FjdGlvbiB0byBiZSBjYW5jZWxsZWQgZnJvbSB0aGUgb3V0c2lkZS5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IHR5cGUgQXN5bmNUaHVua0FjdGlvbjxcclxuICBSZXR1cm5lZCxcclxuICBUaHVua0FyZyxcclxuICBUaHVua0FwaUNvbmZpZyBleHRlbmRzIEFzeW5jVGh1bmtDb25maWdcclxuPiA9IChcclxuICBkaXNwYXRjaDogR2V0RGlzcGF0Y2g8VGh1bmtBcGlDb25maWc+LFxyXG4gIGdldFN0YXRlOiAoKSA9PiBHZXRTdGF0ZTxUaHVua0FwaUNvbmZpZz4sXHJcbiAgZXh0cmE6IEdldEV4dHJhPFRodW5rQXBpQ29uZmlnPlxyXG4pID0+IFByb21pc2U8XHJcbiAgfCBSZXR1cm5UeXBlPEFzeW5jVGh1bmtGdWxmaWxsZWRBY3Rpb25DcmVhdG9yPFJldHVybmVkLCBUaHVua0FyZz4+XHJcbiAgfCBSZXR1cm5UeXBlPEFzeW5jVGh1bmtSZWplY3RlZEFjdGlvbkNyZWF0b3I8VGh1bmtBcmcsIFRodW5rQXBpQ29uZmlnPj5cclxuPiAmIHtcclxuICBhYm9ydDogKHJlYXNvbj86IHN0cmluZykgPT4gdm9pZFxyXG4gIHJlcXVlc3RJZDogc3RyaW5nXHJcbiAgYXJnOiBUaHVua0FyZ1xyXG4gIHVud3JhcDogKCkgPT4gUHJvbWlzZTxSZXR1cm5lZD5cclxufVxyXG5cclxudHlwZSBBc3luY1RodW5rQWN0aW9uQ3JlYXRvcjxcclxuICBSZXR1cm5lZCxcclxuICBUaHVua0FyZyxcclxuICBUaHVua0FwaUNvbmZpZyBleHRlbmRzIEFzeW5jVGh1bmtDb25maWdcclxuPiA9IElzQW55PFxyXG4gIFRodW5rQXJnLFxyXG4gIC8vIGFueSBoYW5kbGluZ1xyXG4gIChhcmc6IFRodW5rQXJnKSA9PiBBc3luY1RodW5rQWN0aW9uPFJldHVybmVkLCBUaHVua0FyZywgVGh1bmtBcGlDb25maWc+LFxyXG4gIC8vIHVua25vd24gaGFuZGxpbmdcclxuICB1bmtub3duIGV4dGVuZHMgVGh1bmtBcmdcclxuICAgID8gKGFyZzogVGh1bmtBcmcpID0+IEFzeW5jVGh1bmtBY3Rpb248UmV0dXJuZWQsIFRodW5rQXJnLCBUaHVua0FwaUNvbmZpZz4gLy8gYXJndW1lbnQgbm90IHNwZWNpZmllZCBvciBzcGVjaWZpZWQgYXMgdm9pZCBvciB1bmRlZmluZWRcclxuICAgIDogW1RodW5rQXJnXSBleHRlbmRzIFt2b2lkXSB8IFt1bmRlZmluZWRdXHJcbiAgICA/ICgpID0+IEFzeW5jVGh1bmtBY3Rpb248UmV0dXJuZWQsIFRodW5rQXJnLCBUaHVua0FwaUNvbmZpZz4gLy8gYXJndW1lbnQgY29udGFpbnMgdm9pZFxyXG4gICAgOiBbdm9pZF0gZXh0ZW5kcyBbVGh1bmtBcmddIC8vIG1ha2Ugb3B0aW9uYWxcclxuICAgID8gKGFyZz86IFRodW5rQXJnKSA9PiBBc3luY1RodW5rQWN0aW9uPFJldHVybmVkLCBUaHVua0FyZywgVGh1bmtBcGlDb25maWc+IC8vIGFyZ3VtZW50IGNvbnRhaW5zIHVuZGVmaW5lZFxyXG4gICAgOiBbdW5kZWZpbmVkXSBleHRlbmRzIFtUaHVua0FyZ11cclxuICAgID8gV2l0aFN0cmljdE51bGxDaGVja3M8XHJcbiAgICAgICAgLy8gd2l0aCBzdHJpY3QgbnVsbENoZWNrczogbWFrZSBvcHRpb25hbFxyXG4gICAgICAgIChcclxuICAgICAgICAgIGFyZz86IFRodW5rQXJnXHJcbiAgICAgICAgKSA9PiBBc3luY1RodW5rQWN0aW9uPFJldHVybmVkLCBUaHVua0FyZywgVGh1bmtBcGlDb25maWc+LFxyXG4gICAgICAgIC8vIHdpdGhvdXQgc3RyaWN0IG51bGwgY2hlY2tzIHRoaXMgd2lsbCBtYXRjaCBldmVyeXRoaW5nLCBzbyBkb24ndCBtYWtlIGl0IG9wdGlvbmFsXHJcbiAgICAgICAgKGFyZzogVGh1bmtBcmcpID0+IEFzeW5jVGh1bmtBY3Rpb248UmV0dXJuZWQsIFRodW5rQXJnLCBUaHVua0FwaUNvbmZpZz5cclxuICAgICAgPiAvLyBkZWZhdWx0IGNhc2U6IG5vcm1hbCBhcmd1bWVudFxyXG4gICAgOiAoYXJnOiBUaHVua0FyZykgPT4gQXN5bmNUaHVua0FjdGlvbjxSZXR1cm5lZCwgVGh1bmtBcmcsIFRodW5rQXBpQ29uZmlnPlxyXG4+XHJcblxyXG4vKipcclxuICogT3B0aW9ucyBvYmplY3QgZm9yIGBjcmVhdGVBc3luY1RodW5rYC5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IHR5cGUgQXN5bmNUaHVua09wdGlvbnM8XHJcbiAgVGh1bmtBcmcgPSB2b2lkLFxyXG4gIFRodW5rQXBpQ29uZmlnIGV4dGVuZHMgQXN5bmNUaHVua0NvbmZpZyA9IHt9XHJcbj4gPSB7XHJcbiAgLyoqXHJcbiAgICogQSBtZXRob2QgdG8gY29udHJvbCB3aGV0aGVyIHRoZSBhc3luY1RodW5rIHNob3VsZCBiZSBleGVjdXRlZC4gSGFzIGFjY2VzcyB0byB0aGVcclxuICAgKiBgYXJnYCwgYGFwaS5nZXRTdGF0ZSgpYCBhbmQgYGFwaS5leHRyYWAgYXJndW1lbnRzLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMgYGZhbHNlYCBpZiBpdCBzaG91bGQgYmUgc2tpcHBlZFxyXG4gICAqL1xyXG4gIGNvbmRpdGlvbj8oXHJcbiAgICBhcmc6IFRodW5rQXJnLFxyXG4gICAgYXBpOiBQaWNrPEdldFRodW5rQVBJPFRodW5rQXBpQ29uZmlnPiwgJ2dldFN0YXRlJyB8ICdleHRyYSc+XHJcbiAgKTogTWF5YmVQcm9taXNlPGJvb2xlYW4gfCB1bmRlZmluZWQ+XHJcbiAgLyoqXHJcbiAgICogSWYgYGNvbmRpdGlvbmAgcmV0dXJucyBgZmFsc2VgLCB0aGUgYXN5bmNUaHVuayB3aWxsIGJlIHNraXBwZWQuXHJcbiAgICogVGhpcyBvcHRpb24gYWxsb3dzIHlvdSB0byBjb250cm9sIHdoZXRoZXIgYSBgcmVqZWN0ZWRgIGFjdGlvbiB3aXRoIGBtZXRhLmNvbmRpdGlvbiA9PSBmYWxzZWBcclxuICAgKiB3aWxsIGJlIGRpc3BhdGNoZWQgb3Igbm90LlxyXG4gICAqXHJcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxyXG4gICAqL1xyXG4gIGRpc3BhdGNoQ29uZGl0aW9uUmVqZWN0aW9uPzogYm9vbGVhblxyXG5cclxuICBzZXJpYWxpemVFcnJvcj86ICh4OiB1bmtub3duKSA9PiBHZXRTZXJpYWxpemVkRXJyb3JUeXBlPFRodW5rQXBpQ29uZmlnPlxyXG5cclxuICAvKipcclxuICAgKiBBIGZ1bmN0aW9uIHRvIHVzZSB3aGVuIGdlbmVyYXRpbmcgdGhlIGByZXF1ZXN0SWRgIGZvciB0aGUgcmVxdWVzdCBzZXF1ZW5jZS5cclxuICAgKlxyXG4gICAqIEBkZWZhdWx0IGBuYW5vaWRgXHJcbiAgICovXHJcbiAgaWRHZW5lcmF0b3I/OiAoYXJnOiBUaHVua0FyZykgPT4gc3RyaW5nXHJcbn0gJiBJc1Vua25vd248XHJcbiAgR2V0UGVuZGluZ01ldGE8VGh1bmtBcGlDb25maWc+LFxyXG4gIHtcclxuICAgIC8qKlxyXG4gICAgICogQSBtZXRob2QgdG8gZ2VuZXJhdGUgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRvIGJlIGFkZGVkIHRvIGBtZXRhYCBvZiB0aGUgcGVuZGluZyBhY3Rpb24uXHJcbiAgICAgKlxyXG4gICAgICogVXNpbmcgdGhpcyBvcHRpb25hbCBvdmVybG9hZCB3aWxsIG5vdCBtb2RpZnkgdGhlIHR5cGVzIGNvcnJlY3RseSwgdGhpcyBvdmVybG9hZCBpcyBvbmx5IGluIHBsYWNlIHRvIHN1cHBvcnQgSmF2YVNjcmlwdCB1c2Vycy5cclxuICAgICAqIFBsZWFzZSB1c2UgdGhlIGBUaHVua0FwaUNvbmZpZ2AgcGFyYW1ldGVyIGBwZW5kaW5nTWV0YWAgdG8gZ2V0IGFjY2VzcyB0byBhIGNvcnJlY3RseSB0eXBlZCBvdmVybG9hZFxyXG4gICAgICovXHJcbiAgICBnZXRQZW5kaW5nTWV0YT8oXHJcbiAgICAgIGJhc2U6IHtcclxuICAgICAgICBhcmc6IFRodW5rQXJnXHJcbiAgICAgICAgcmVxdWVzdElkOiBzdHJpbmdcclxuICAgICAgfSxcclxuICAgICAgYXBpOiBQaWNrPEdldFRodW5rQVBJPFRodW5rQXBpQ29uZmlnPiwgJ2dldFN0YXRlJyB8ICdleHRyYSc+XHJcbiAgICApOiBHZXRQZW5kaW5nTWV0YTxUaHVua0FwaUNvbmZpZz5cclxuICB9LFxyXG4gIHtcclxuICAgIC8qKlxyXG4gICAgICogQSBtZXRob2QgdG8gZ2VuZXJhdGUgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRvIGJlIGFkZGVkIHRvIGBtZXRhYCBvZiB0aGUgcGVuZGluZyBhY3Rpb24uXHJcbiAgICAgKi9cclxuICAgIGdldFBlbmRpbmdNZXRhKFxyXG4gICAgICBiYXNlOiB7XHJcbiAgICAgICAgYXJnOiBUaHVua0FyZ1xyXG4gICAgICAgIHJlcXVlc3RJZDogc3RyaW5nXHJcbiAgICAgIH0sXHJcbiAgICAgIGFwaTogUGljazxHZXRUaHVua0FQSTxUaHVua0FwaUNvbmZpZz4sICdnZXRTdGF0ZScgfCAnZXh0cmEnPlxyXG4gICAgKTogR2V0UGVuZGluZ01ldGE8VGh1bmtBcGlDb25maWc+XHJcbiAgfVxyXG4+XHJcblxyXG5leHBvcnQgdHlwZSBBc3luY1RodW5rUGVuZGluZ0FjdGlvbkNyZWF0b3I8XHJcbiAgVGh1bmtBcmcsXHJcbiAgVGh1bmtBcGlDb25maWcgPSB7fVxyXG4+ID0gQWN0aW9uQ3JlYXRvcldpdGhQcmVwYXJlZFBheWxvYWQ8XHJcbiAgW3N0cmluZywgVGh1bmtBcmcsIEdldFBlbmRpbmdNZXRhPFRodW5rQXBpQ29uZmlnPj9dLFxyXG4gIHVuZGVmaW5lZCxcclxuICBzdHJpbmcsXHJcbiAgbmV2ZXIsXHJcbiAge1xyXG4gICAgYXJnOiBUaHVua0FyZ1xyXG4gICAgcmVxdWVzdElkOiBzdHJpbmdcclxuICAgIHJlcXVlc3RTdGF0dXM6ICdwZW5kaW5nJ1xyXG4gIH0gJiBHZXRQZW5kaW5nTWV0YTxUaHVua0FwaUNvbmZpZz5cclxuPlxyXG5cclxuZXhwb3J0IHR5cGUgQXN5bmNUaHVua1JlamVjdGVkQWN0aW9uQ3JlYXRvcjxcclxuICBUaHVua0FyZyxcclxuICBUaHVua0FwaUNvbmZpZyA9IHt9XHJcbj4gPSBBY3Rpb25DcmVhdG9yV2l0aFByZXBhcmVkUGF5bG9hZDxcclxuICBbXHJcbiAgICBFcnJvciB8IG51bGwsXHJcbiAgICBzdHJpbmcsXHJcbiAgICBUaHVua0FyZyxcclxuICAgIEdldFJlamVjdFZhbHVlPFRodW5rQXBpQ29uZmlnPj8sXHJcbiAgICBHZXRSZWplY3RlZE1ldGE8VGh1bmtBcGlDb25maWc+P1xyXG4gIF0sXHJcbiAgR2V0UmVqZWN0VmFsdWU8VGh1bmtBcGlDb25maWc+IHwgdW5kZWZpbmVkLFxyXG4gIHN0cmluZyxcclxuICBHZXRTZXJpYWxpemVkRXJyb3JUeXBlPFRodW5rQXBpQ29uZmlnPixcclxuICB7XHJcbiAgICBhcmc6IFRodW5rQXJnXHJcbiAgICByZXF1ZXN0SWQ6IHN0cmluZ1xyXG4gICAgcmVxdWVzdFN0YXR1czogJ3JlamVjdGVkJ1xyXG4gICAgYWJvcnRlZDogYm9vbGVhblxyXG4gICAgY29uZGl0aW9uOiBib29sZWFuXHJcbiAgfSAmIChcclxuICAgIHwgKHsgcmVqZWN0ZWRXaXRoVmFsdWU6IGZhbHNlIH0gJiB7XHJcbiAgICAgICAgW0sgaW4ga2V5b2YgR2V0UmVqZWN0ZWRNZXRhPFRodW5rQXBpQ29uZmlnPl0/OiB1bmRlZmluZWRcclxuICAgICAgfSlcclxuICAgIHwgKHsgcmVqZWN0ZWRXaXRoVmFsdWU6IHRydWUgfSAmIEdldFJlamVjdGVkTWV0YTxUaHVua0FwaUNvbmZpZz4pXHJcbiAgKVxyXG4+XHJcblxyXG5leHBvcnQgdHlwZSBBc3luY1RodW5rRnVsZmlsbGVkQWN0aW9uQ3JlYXRvcjxcclxuICBSZXR1cm5lZCxcclxuICBUaHVua0FyZyxcclxuICBUaHVua0FwaUNvbmZpZyA9IHt9XHJcbj4gPSBBY3Rpb25DcmVhdG9yV2l0aFByZXBhcmVkUGF5bG9hZDxcclxuICBbUmV0dXJuZWQsIHN0cmluZywgVGh1bmtBcmcsIEdldEZ1bGZpbGxlZE1ldGE8VGh1bmtBcGlDb25maWc+P10sXHJcbiAgUmV0dXJuZWQsXHJcbiAgc3RyaW5nLFxyXG4gIG5ldmVyLFxyXG4gIHtcclxuICAgIGFyZzogVGh1bmtBcmdcclxuICAgIHJlcXVlc3RJZDogc3RyaW5nXHJcbiAgICByZXF1ZXN0U3RhdHVzOiAnZnVsZmlsbGVkJ1xyXG4gIH0gJiBHZXRGdWxmaWxsZWRNZXRhPFRodW5rQXBpQ29uZmlnPlxyXG4+XHJcblxyXG4vKipcclxuICogQSB0eXBlIGRlc2NyaWJpbmcgdGhlIHJldHVybiB2YWx1ZSBvZiBgY3JlYXRlQXN5bmNUaHVua2AuXHJcbiAqIE1pZ2h0IGJlIHVzZWZ1bCBmb3Igd3JhcHBpbmcgYGNyZWF0ZUFzeW5jVGh1bmtgIGluIGN1c3RvbSBhYnN0cmFjdGlvbnMuXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCB0eXBlIEFzeW5jVGh1bms8XHJcbiAgUmV0dXJuZWQsXHJcbiAgVGh1bmtBcmcsXHJcbiAgVGh1bmtBcGlDb25maWcgZXh0ZW5kcyBBc3luY1RodW5rQ29uZmlnXHJcbj4gPSBBc3luY1RodW5rQWN0aW9uQ3JlYXRvcjxSZXR1cm5lZCwgVGh1bmtBcmcsIFRodW5rQXBpQ29uZmlnPiAmIHtcclxuICBwZW5kaW5nOiBBc3luY1RodW5rUGVuZGluZ0FjdGlvbkNyZWF0b3I8VGh1bmtBcmcsIFRodW5rQXBpQ29uZmlnPlxyXG4gIHJlamVjdGVkOiBBc3luY1RodW5rUmVqZWN0ZWRBY3Rpb25DcmVhdG9yPFRodW5rQXJnLCBUaHVua0FwaUNvbmZpZz5cclxuICBmdWxmaWxsZWQ6IEFzeW5jVGh1bmtGdWxmaWxsZWRBY3Rpb25DcmVhdG9yPFxyXG4gICAgUmV0dXJuZWQsXHJcbiAgICBUaHVua0FyZyxcclxuICAgIFRodW5rQXBpQ29uZmlnXHJcbiAgPlxyXG4gIHR5cGVQcmVmaXg6IHN0cmluZ1xyXG59XHJcblxyXG50eXBlIE92ZXJyaWRlVGh1bmtBcGlDb25maWdzPE9sZENvbmZpZywgTmV3Q29uZmlnPiA9IElkPFxyXG4gIE5ld0NvbmZpZyAmIE9taXQ8T2xkQ29uZmlnLCBrZXlvZiBOZXdDb25maWc+XHJcbj5cclxuXHJcbnR5cGUgQ3JlYXRlQXN5bmNUaHVuazxDdXJyaWVkVGh1bmtBcGlDb25maWcgZXh0ZW5kcyBBc3luY1RodW5rQ29uZmlnPiA9IHtcclxuICAvKipcclxuICAgKlxyXG4gICAqIEBwYXJhbSB0eXBlUHJlZml4XHJcbiAgICogQHBhcmFtIHBheWxvYWRDcmVhdG9yXHJcbiAgICogQHBhcmFtIG9wdGlvbnNcclxuICAgKlxyXG4gICAqIEBwdWJsaWNcclxuICAgKi9cclxuICAvLyBzZXBhcmF0ZSBzaWduYXR1cmUgd2l0aG91dCBgQXN5bmNUaHVua0NvbmZpZ2AgZm9yIGJldHRlciBpbmZlcmVuY2VcclxuICA8UmV0dXJuZWQsIFRodW5rQXJnID0gdm9pZD4oXHJcbiAgICB0eXBlUHJlZml4OiBzdHJpbmcsXHJcbiAgICBwYXlsb2FkQ3JlYXRvcjogQXN5bmNUaHVua1BheWxvYWRDcmVhdG9yPFxyXG4gICAgICBSZXR1cm5lZCxcclxuICAgICAgVGh1bmtBcmcsXHJcbiAgICAgIEN1cnJpZWRUaHVua0FwaUNvbmZpZ1xyXG4gICAgPixcclxuICAgIG9wdGlvbnM/OiBBc3luY1RodW5rT3B0aW9uczxUaHVua0FyZywgQ3VycmllZFRodW5rQXBpQ29uZmlnPlxyXG4gICk6IEFzeW5jVGh1bms8UmV0dXJuZWQsIFRodW5rQXJnLCBDdXJyaWVkVGh1bmtBcGlDb25maWc+XHJcblxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHR5cGVQcmVmaXhcclxuICAgKiBAcGFyYW0gcGF5bG9hZENyZWF0b3JcclxuICAgKiBAcGFyYW0gb3B0aW9uc1xyXG4gICAqXHJcbiAgICogQHB1YmxpY1xyXG4gICAqL1xyXG4gIDxSZXR1cm5lZCwgVGh1bmtBcmcsIFRodW5rQXBpQ29uZmlnIGV4dGVuZHMgQXN5bmNUaHVua0NvbmZpZz4oXHJcbiAgICB0eXBlUHJlZml4OiBzdHJpbmcsXHJcbiAgICBwYXlsb2FkQ3JlYXRvcjogQXN5bmNUaHVua1BheWxvYWRDcmVhdG9yPFxyXG4gICAgICBSZXR1cm5lZCxcclxuICAgICAgVGh1bmtBcmcsXHJcbiAgICAgIE92ZXJyaWRlVGh1bmtBcGlDb25maWdzPEN1cnJpZWRUaHVua0FwaUNvbmZpZywgVGh1bmtBcGlDb25maWc+XHJcbiAgICA+LFxyXG4gICAgb3B0aW9ucz86IEFzeW5jVGh1bmtPcHRpb25zPFxyXG4gICAgICBUaHVua0FyZyxcclxuICAgICAgT3ZlcnJpZGVUaHVua0FwaUNvbmZpZ3M8Q3VycmllZFRodW5rQXBpQ29uZmlnLCBUaHVua0FwaUNvbmZpZz5cclxuICAgID5cclxuICApOiBBc3luY1RodW5rPFxyXG4gICAgUmV0dXJuZWQsXHJcbiAgICBUaHVua0FyZyxcclxuICAgIE92ZXJyaWRlVGh1bmtBcGlDb25maWdzPEN1cnJpZWRUaHVua0FwaUNvbmZpZywgVGh1bmtBcGlDb25maWc+XHJcbiAgPlxyXG5cclxuICB3aXRoVHlwZXM8VGh1bmtBcGlDb25maWcgZXh0ZW5kcyBBc3luY1RodW5rQ29uZmlnPigpOiBDcmVhdGVBc3luY1RodW5rPFxyXG4gICAgT3ZlcnJpZGVUaHVua0FwaUNvbmZpZ3M8Q3VycmllZFRodW5rQXBpQ29uZmlnLCBUaHVua0FwaUNvbmZpZz5cclxuICA+XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBjcmVhdGVBc3luY1RodW5rID0gKCgpID0+IHtcclxuICBmdW5jdGlvbiBjcmVhdGVBc3luY1RodW5rPFxyXG4gICAgUmV0dXJuZWQsXHJcbiAgICBUaHVua0FyZyxcclxuICAgIFRodW5rQXBpQ29uZmlnIGV4dGVuZHMgQXN5bmNUaHVua0NvbmZpZ1xyXG4gID4oXHJcbiAgICB0eXBlUHJlZml4OiBzdHJpbmcsXHJcbiAgICBwYXlsb2FkQ3JlYXRvcjogQXN5bmNUaHVua1BheWxvYWRDcmVhdG9yPFxyXG4gICAgICBSZXR1cm5lZCxcclxuICAgICAgVGh1bmtBcmcsXHJcbiAgICAgIFRodW5rQXBpQ29uZmlnXHJcbiAgICA+LFxyXG4gICAgb3B0aW9ucz86IEFzeW5jVGh1bmtPcHRpb25zPFRodW5rQXJnLCBUaHVua0FwaUNvbmZpZz5cclxuICApOiBBc3luY1RodW5rPFJldHVybmVkLCBUaHVua0FyZywgVGh1bmtBcGlDb25maWc+IHtcclxuICAgIHR5cGUgUmVqZWN0ZWRWYWx1ZSA9IEdldFJlamVjdFZhbHVlPFRodW5rQXBpQ29uZmlnPlxyXG4gICAgdHlwZSBQZW5kaW5nTWV0YSA9IEdldFBlbmRpbmdNZXRhPFRodW5rQXBpQ29uZmlnPlxyXG4gICAgdHlwZSBGdWxmaWxsZWRNZXRhID0gR2V0RnVsZmlsbGVkTWV0YTxUaHVua0FwaUNvbmZpZz5cclxuICAgIHR5cGUgUmVqZWN0ZWRNZXRhID0gR2V0UmVqZWN0ZWRNZXRhPFRodW5rQXBpQ29uZmlnPlxyXG5cclxuICAgIGNvbnN0IGZ1bGZpbGxlZDogQXN5bmNUaHVua0Z1bGZpbGxlZEFjdGlvbkNyZWF0b3I8XHJcbiAgICAgIFJldHVybmVkLFxyXG4gICAgICBUaHVua0FyZyxcclxuICAgICAgVGh1bmtBcGlDb25maWdcclxuICAgID4gPSBjcmVhdGVBY3Rpb24oXHJcbiAgICAgIHR5cGVQcmVmaXggKyAnL2Z1bGZpbGxlZCcsXHJcbiAgICAgIChcclxuICAgICAgICBwYXlsb2FkOiBSZXR1cm5lZCxcclxuICAgICAgICByZXF1ZXN0SWQ6IHN0cmluZyxcclxuICAgICAgICBhcmc6IFRodW5rQXJnLFxyXG4gICAgICAgIG1ldGE/OiBGdWxmaWxsZWRNZXRhXHJcbiAgICAgICkgPT4gKHtcclxuICAgICAgICBwYXlsb2FkLFxyXG4gICAgICAgIG1ldGE6IHtcclxuICAgICAgICAgIC4uLigobWV0YSBhcyBhbnkpIHx8IHt9KSxcclxuICAgICAgICAgIGFyZyxcclxuICAgICAgICAgIHJlcXVlc3RJZCxcclxuICAgICAgICAgIHJlcXVlc3RTdGF0dXM6ICdmdWxmaWxsZWQnIGFzIGNvbnN0LFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pXHJcbiAgICApXHJcblxyXG4gICAgY29uc3QgcGVuZGluZzogQXN5bmNUaHVua1BlbmRpbmdBY3Rpb25DcmVhdG9yPFRodW5rQXJnLCBUaHVua0FwaUNvbmZpZz4gPVxyXG4gICAgICBjcmVhdGVBY3Rpb24oXHJcbiAgICAgICAgdHlwZVByZWZpeCArICcvcGVuZGluZycsXHJcbiAgICAgICAgKHJlcXVlc3RJZDogc3RyaW5nLCBhcmc6IFRodW5rQXJnLCBtZXRhPzogUGVuZGluZ01ldGEpID0+ICh7XHJcbiAgICAgICAgICBwYXlsb2FkOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICBtZXRhOiB7XHJcbiAgICAgICAgICAgIC4uLigobWV0YSBhcyBhbnkpIHx8IHt9KSxcclxuICAgICAgICAgICAgYXJnLFxyXG4gICAgICAgICAgICByZXF1ZXN0SWQsXHJcbiAgICAgICAgICAgIHJlcXVlc3RTdGF0dXM6ICdwZW5kaW5nJyBhcyBjb25zdCxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG5cclxuICAgIGNvbnN0IHJlamVjdGVkOiBBc3luY1RodW5rUmVqZWN0ZWRBY3Rpb25DcmVhdG9yPFRodW5rQXJnLCBUaHVua0FwaUNvbmZpZz4gPVxyXG4gICAgICBjcmVhdGVBY3Rpb24oXHJcbiAgICAgICAgdHlwZVByZWZpeCArICcvcmVqZWN0ZWQnLFxyXG4gICAgICAgIChcclxuICAgICAgICAgIGVycm9yOiBFcnJvciB8IG51bGwsXHJcbiAgICAgICAgICByZXF1ZXN0SWQ6IHN0cmluZyxcclxuICAgICAgICAgIGFyZzogVGh1bmtBcmcsXHJcbiAgICAgICAgICBwYXlsb2FkPzogUmVqZWN0ZWRWYWx1ZSxcclxuICAgICAgICAgIG1ldGE/OiBSZWplY3RlZE1ldGFcclxuICAgICAgICApID0+ICh7XHJcbiAgICAgICAgICBwYXlsb2FkLFxyXG4gICAgICAgICAgZXJyb3I6ICgob3B0aW9ucyAmJiBvcHRpb25zLnNlcmlhbGl6ZUVycm9yKSB8fCBtaW5pU2VyaWFsaXplRXJyb3IpKFxyXG4gICAgICAgICAgICBlcnJvciB8fCAnUmVqZWN0ZWQnXHJcbiAgICAgICAgICApIGFzIEdldFNlcmlhbGl6ZWRFcnJvclR5cGU8VGh1bmtBcGlDb25maWc+LFxyXG4gICAgICAgICAgbWV0YToge1xyXG4gICAgICAgICAgICAuLi4oKG1ldGEgYXMgYW55KSB8fCB7fSksXHJcbiAgICAgICAgICAgIGFyZyxcclxuICAgICAgICAgICAgcmVxdWVzdElkLFxyXG4gICAgICAgICAgICByZWplY3RlZFdpdGhWYWx1ZTogISFwYXlsb2FkLFxyXG4gICAgICAgICAgICByZXF1ZXN0U3RhdHVzOiAncmVqZWN0ZWQnIGFzIGNvbnN0LFxyXG4gICAgICAgICAgICBhYm9ydGVkOiBlcnJvcj8ubmFtZSA9PT0gJ0Fib3J0RXJyb3InLFxyXG4gICAgICAgICAgICBjb25kaXRpb246IGVycm9yPy5uYW1lID09PSAnQ29uZGl0aW9uRXJyb3InLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9KVxyXG4gICAgICApXHJcblxyXG4gICAgbGV0IGRpc3BsYXllZFdhcm5pbmcgPSBmYWxzZVxyXG5cclxuICAgIGNvbnN0IEFDID1cclxuICAgICAgdHlwZW9mIEFib3J0Q29udHJvbGxlciAhPT0gJ3VuZGVmaW5lZCdcclxuICAgICAgICA/IEFib3J0Q29udHJvbGxlclxyXG4gICAgICAgIDogY2xhc3MgaW1wbGVtZW50cyBBYm9ydENvbnRyb2xsZXIge1xyXG4gICAgICAgICAgICBzaWduYWwgPSB7XHJcbiAgICAgICAgICAgICAgYWJvcnRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgYWRkRXZlbnRMaXN0ZW5lcigpIHt9LFxyXG4gICAgICAgICAgICAgIGRpc3BhdGNoRXZlbnQoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIG9uYWJvcnQoKSB7fSxcclxuICAgICAgICAgICAgICByZW1vdmVFdmVudExpc3RlbmVyKCkge30sXHJcbiAgICAgICAgICAgICAgcmVhc29uOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgdGhyb3dJZkFib3J0ZWQoKSB7fSxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhYm9ydCgpIHtcclxuICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFkaXNwbGF5ZWRXYXJuaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgIGRpc3BsYXllZFdhcm5pbmcgPSB0cnVlXHJcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuaW5mbyhcclxuICAgICAgICAgICAgICAgICAgICBgVGhpcyBwbGF0Zm9ybSBkb2VzIG5vdCBpbXBsZW1lbnQgQWJvcnRDb250cm9sbGVyLiBcclxuSWYgeW91IHdhbnQgdG8gdXNlIHRoZSBBYm9ydENvbnRyb2xsZXIgdG8gcmVhY3QgdG8gXFxgYWJvcnRcXGAgZXZlbnRzLCBwbGVhc2UgY29uc2lkZXIgaW1wb3J0aW5nIGEgcG9seWZpbGwgbGlrZSAnYWJvcnRjb250cm9sbGVyLXBvbHlmaWxsL2Rpc3QvYWJvcnRjb250cm9sbGVyLXBvbHlmaWxsLW9ubHknLmBcclxuICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGFjdGlvbkNyZWF0b3IoXHJcbiAgICAgIGFyZzogVGh1bmtBcmdcclxuICAgICk6IEFzeW5jVGh1bmtBY3Rpb248UmV0dXJuZWQsIFRodW5rQXJnLCBUaHVua0FwaUNvbmZpZz4ge1xyXG4gICAgICByZXR1cm4gKGRpc3BhdGNoLCBnZXRTdGF0ZSwgZXh0cmEpID0+IHtcclxuICAgICAgICBjb25zdCByZXF1ZXN0SWQgPSBvcHRpb25zPy5pZEdlbmVyYXRvclxyXG4gICAgICAgICAgPyBvcHRpb25zLmlkR2VuZXJhdG9yKGFyZylcclxuICAgICAgICAgIDogbmFub2lkKClcclxuXHJcbiAgICAgICAgY29uc3QgYWJvcnRDb250cm9sbGVyID0gbmV3IEFDKClcclxuICAgICAgICBsZXQgYWJvcnRSZWFzb246IHN0cmluZyB8IHVuZGVmaW5lZFxyXG5cclxuICAgICAgICBsZXQgc3RhcnRlZCA9IGZhbHNlXHJcbiAgICAgICAgZnVuY3Rpb24gYWJvcnQocmVhc29uPzogc3RyaW5nKSB7XHJcbiAgICAgICAgICBhYm9ydFJlYXNvbiA9IHJlYXNvblxyXG4gICAgICAgICAgYWJvcnRDb250cm9sbGVyLmFib3J0KClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHByb21pc2UgPSAoYXN5bmMgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgbGV0IGZpbmFsQWN0aW9uOiBSZXR1cm5UeXBlPHR5cGVvZiBmdWxmaWxsZWQgfCB0eXBlb2YgcmVqZWN0ZWQ+XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBsZXQgY29uZGl0aW9uUmVzdWx0ID0gb3B0aW9ucz8uY29uZGl0aW9uPy4oYXJnLCB7IGdldFN0YXRlLCBleHRyYSB9KVxyXG4gICAgICAgICAgICBpZiAoaXNUaGVuYWJsZShjb25kaXRpb25SZXN1bHQpKSB7XHJcbiAgICAgICAgICAgICAgY29uZGl0aW9uUmVzdWx0ID0gYXdhaXQgY29uZGl0aW9uUmVzdWx0XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChjb25kaXRpb25SZXN1bHQgPT09IGZhbHNlIHx8IGFib3J0Q29udHJvbGxlci5zaWduYWwuYWJvcnRlZCkge1xyXG4gICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby10aHJvdy1saXRlcmFsXHJcbiAgICAgICAgICAgICAgdGhyb3cge1xyXG4gICAgICAgICAgICAgICAgbmFtZTogJ0NvbmRpdGlvbkVycm9yJyxcclxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdBYm9ydGVkIGR1ZSB0byBjb25kaXRpb24gY2FsbGJhY2sgcmV0dXJuaW5nIGZhbHNlLicsXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHN0YXJ0ZWQgPSB0cnVlXHJcblxyXG4gICAgICAgICAgICBjb25zdCBhYm9ydGVkUHJvbWlzZSA9IG5ldyBQcm9taXNlPG5ldmVyPigoXywgcmVqZWN0KSA9PlxyXG4gICAgICAgICAgICAgIGFib3J0Q29udHJvbGxlci5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCAoKSA9PlxyXG4gICAgICAgICAgICAgICAgcmVqZWN0KHtcclxuICAgICAgICAgICAgICAgICAgbmFtZTogJ0Fib3J0RXJyb3InLFxyXG4gICAgICAgICAgICAgICAgICBtZXNzYWdlOiBhYm9ydFJlYXNvbiB8fCAnQWJvcnRlZCcsXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICBkaXNwYXRjaChcclxuICAgICAgICAgICAgICBwZW5kaW5nKFxyXG4gICAgICAgICAgICAgICAgcmVxdWVzdElkLFxyXG4gICAgICAgICAgICAgICAgYXJnLFxyXG4gICAgICAgICAgICAgICAgb3B0aW9ucz8uZ2V0UGVuZGluZ01ldGE/LihcclxuICAgICAgICAgICAgICAgICAgeyByZXF1ZXN0SWQsIGFyZyB9LFxyXG4gICAgICAgICAgICAgICAgICB7IGdldFN0YXRlLCBleHRyYSB9XHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIGZpbmFsQWN0aW9uID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcclxuICAgICAgICAgICAgICBhYm9ydGVkUHJvbWlzZSxcclxuICAgICAgICAgICAgICBQcm9taXNlLnJlc29sdmUoXHJcbiAgICAgICAgICAgICAgICBwYXlsb2FkQ3JlYXRvcihhcmcsIHtcclxuICAgICAgICAgICAgICAgICAgZGlzcGF0Y2gsXHJcbiAgICAgICAgICAgICAgICAgIGdldFN0YXRlLFxyXG4gICAgICAgICAgICAgICAgICBleHRyYSxcclxuICAgICAgICAgICAgICAgICAgcmVxdWVzdElkLFxyXG4gICAgICAgICAgICAgICAgICBzaWduYWw6IGFib3J0Q29udHJvbGxlci5zaWduYWwsXHJcbiAgICAgICAgICAgICAgICAgIGFib3J0LFxyXG4gICAgICAgICAgICAgICAgICByZWplY3RXaXRoVmFsdWU6ICgoXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IFJlamVjdGVkVmFsdWUsXHJcbiAgICAgICAgICAgICAgICAgICAgbWV0YT86IFJlamVjdGVkTWV0YVxyXG4gICAgICAgICAgICAgICAgICApID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFJlamVjdFdpdGhWYWx1ZSh2YWx1ZSwgbWV0YSlcclxuICAgICAgICAgICAgICAgICAgfSkgYXMgYW55LFxyXG4gICAgICAgICAgICAgICAgICBmdWxmaWxsV2l0aFZhbHVlOiAoKHZhbHVlOiB1bmtub3duLCBtZXRhPzogRnVsZmlsbGVkTWV0YSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRnVsZmlsbFdpdGhNZXRhKHZhbHVlLCBtZXRhKVxyXG4gICAgICAgICAgICAgICAgICB9KSBhcyBhbnksXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICkudGhlbigocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUmVqZWN0V2l0aFZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRocm93IHJlc3VsdFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIEZ1bGZpbGxXaXRoTWV0YSkge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gZnVsZmlsbGVkKHJlc3VsdC5wYXlsb2FkLCByZXF1ZXN0SWQsIGFyZywgcmVzdWx0Lm1ldGEpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVsZmlsbGVkKHJlc3VsdCBhcyBhbnksIHJlcXVlc3RJZCwgYXJnKVxyXG4gICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBdKVxyXG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgIGZpbmFsQWN0aW9uID1cclxuICAgICAgICAgICAgICBlcnIgaW5zdGFuY2VvZiBSZWplY3RXaXRoVmFsdWVcclxuICAgICAgICAgICAgICAgID8gcmVqZWN0ZWQobnVsbCwgcmVxdWVzdElkLCBhcmcsIGVyci5wYXlsb2FkLCBlcnIubWV0YSlcclxuICAgICAgICAgICAgICAgIDogcmVqZWN0ZWQoZXJyIGFzIGFueSwgcmVxdWVzdElkLCBhcmcpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyBXZSBkaXNwYXRjaCB0aGUgcmVzdWx0IGFjdGlvbiBfYWZ0ZXJfIHRoZSBjYXRjaCwgdG8gYXZvaWQgaGF2aW5nIGFueSBlcnJvcnNcclxuICAgICAgICAgIC8vIGhlcmUgZ2V0IHN3YWxsb3dlZCBieSB0aGUgdHJ5L2NhdGNoIGJsb2NrLFxyXG4gICAgICAgICAgLy8gcGVyIGh0dHBzOi8vdHdpdHRlci5jb20vZGFuX2FicmFtb3Yvc3RhdHVzLzc3MDkxNDIyMTYzODk0MjcyMFxyXG4gICAgICAgICAgLy8gYW5kIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWR1eGpzL3JlZHV4LXRvb2xraXQvYmxvYi9lODVlYjE3YjM5YTIxMThkODU5ZjdiNzc0NmUwZjNmZWU1MjNlMDg5L2RvY3MvdHV0b3JpYWxzL2FkdmFuY2VkLXR1dG9yaWFsLm1kI2FzeW5jLWVycm9yLWhhbmRsaW5nLWxvZ2ljLWluLXRodW5rc1xyXG5cclxuICAgICAgICAgIGNvbnN0IHNraXBEaXNwYXRjaCA9XHJcbiAgICAgICAgICAgIG9wdGlvbnMgJiZcclxuICAgICAgICAgICAgIW9wdGlvbnMuZGlzcGF0Y2hDb25kaXRpb25SZWplY3Rpb24gJiZcclxuICAgICAgICAgICAgcmVqZWN0ZWQubWF0Y2goZmluYWxBY3Rpb24pICYmXHJcbiAgICAgICAgICAgIChmaW5hbEFjdGlvbiBhcyBhbnkpLm1ldGEuY29uZGl0aW9uXHJcblxyXG4gICAgICAgICAgaWYgKCFza2lwRGlzcGF0Y2gpIHtcclxuICAgICAgICAgICAgZGlzcGF0Y2goZmluYWxBY3Rpb24pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gZmluYWxBY3Rpb25cclxuICAgICAgICB9KSgpXHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24ocHJvbWlzZSBhcyBQcm9taXNlPGFueT4sIHtcclxuICAgICAgICAgIGFib3J0LFxyXG4gICAgICAgICAgcmVxdWVzdElkLFxyXG4gICAgICAgICAgYXJnLFxyXG4gICAgICAgICAgdW53cmFwKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gcHJvbWlzZS50aGVuPGFueT4odW53cmFwUmVzdWx0KVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oXHJcbiAgICAgIGFjdGlvbkNyZWF0b3IgYXMgQXN5bmNUaHVua0FjdGlvbkNyZWF0b3I8XHJcbiAgICAgICAgUmV0dXJuZWQsXHJcbiAgICAgICAgVGh1bmtBcmcsXHJcbiAgICAgICAgVGh1bmtBcGlDb25maWdcclxuICAgICAgPixcclxuICAgICAge1xyXG4gICAgICAgIHBlbmRpbmcsXHJcbiAgICAgICAgcmVqZWN0ZWQsXHJcbiAgICAgICAgZnVsZmlsbGVkLFxyXG4gICAgICAgIHR5cGVQcmVmaXgsXHJcbiAgICAgIH1cclxuICAgIClcclxuICB9XHJcbiAgY3JlYXRlQXN5bmNUaHVuay53aXRoVHlwZXMgPSAoKSA9PiBjcmVhdGVBc3luY1RodW5rXHJcblxyXG4gIHJldHVybiBjcmVhdGVBc3luY1RodW5rIGFzIENyZWF0ZUFzeW5jVGh1bms8QXN5bmNUaHVua0NvbmZpZz5cclxufSkoKVxyXG5cclxuaW50ZXJmYWNlIFVud3JhcHBhYmxlQWN0aW9uIHtcclxuICBwYXlsb2FkOiBhbnlcclxuICBtZXRhPzogYW55XHJcbiAgZXJyb3I/OiBhbnlcclxufVxyXG5cclxudHlwZSBVbndyYXBwZWRBY3Rpb25QYXlsb2FkPFQgZXh0ZW5kcyBVbndyYXBwYWJsZUFjdGlvbj4gPSBFeGNsdWRlPFxyXG4gIFQsXHJcbiAgeyBlcnJvcjogYW55IH1cclxuPlsncGF5bG9hZCddXHJcblxyXG4vKipcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHVud3JhcFJlc3VsdDxSIGV4dGVuZHMgVW53cmFwcGFibGVBY3Rpb24+KFxyXG4gIGFjdGlvbjogUlxyXG4pOiBVbndyYXBwZWRBY3Rpb25QYXlsb2FkPFI+IHtcclxuICBpZiAoYWN0aW9uLm1ldGEgJiYgYWN0aW9uLm1ldGEucmVqZWN0ZWRXaXRoVmFsdWUpIHtcclxuICAgIHRocm93IGFjdGlvbi5wYXlsb2FkXHJcbiAgfVxyXG4gIGlmIChhY3Rpb24uZXJyb3IpIHtcclxuICAgIHRocm93IGFjdGlvbi5lcnJvclxyXG4gIH1cclxuICByZXR1cm4gYWN0aW9uLnBheWxvYWRcclxufVxyXG5cclxudHlwZSBXaXRoU3RyaWN0TnVsbENoZWNrczxUcnVlLCBGYWxzZT4gPSB1bmRlZmluZWQgZXh0ZW5kcyBib29sZWFuXHJcbiAgPyBGYWxzZVxyXG4gIDogVHJ1ZVxyXG5cclxuZnVuY3Rpb24gaXNUaGVuYWJsZSh2YWx1ZTogYW55KTogdmFsdWUgaXMgUHJvbWlzZUxpa2U8YW55PiB7XHJcbiAgcmV0dXJuIChcclxuICAgIHZhbHVlICE9PSBudWxsICYmXHJcbiAgICB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXHJcbiAgICB0eXBlb2YgdmFsdWUudGhlbiA9PT0gJ2Z1bmN0aW9uJ1xyXG4gIClcclxufVxyXG4iLCAiaW1wb3J0IHR5cGUge1xyXG4gIEFjdGlvbkZyb21NYXRjaGVyLFxyXG4gIE1hdGNoZXIsXHJcbiAgVW5pb25Ub0ludGVyc2VjdGlvbixcclxufSBmcm9tICcuL3RzSGVscGVycydcclxuaW1wb3J0IHsgaGFzTWF0Y2hGdW5jdGlvbiB9IGZyb20gJy4vdHNIZWxwZXJzJ1xyXG5pbXBvcnQgdHlwZSB7XHJcbiAgQXN5bmNUaHVuayxcclxuICBBc3luY1RodW5rRnVsZmlsbGVkQWN0aW9uQ3JlYXRvcixcclxuICBBc3luY1RodW5rUGVuZGluZ0FjdGlvbkNyZWF0b3IsXHJcbiAgQXN5bmNUaHVua1JlamVjdGVkQWN0aW9uQ3JlYXRvcixcclxufSBmcm9tICcuL2NyZWF0ZUFzeW5jVGh1bmsnXHJcblxyXG4vKiogQHB1YmxpYyAqL1xyXG5leHBvcnQgdHlwZSBBY3Rpb25NYXRjaGluZ0FueU9mPE1hdGNoZXJzIGV4dGVuZHMgWy4uLk1hdGNoZXI8YW55PltdXT4gPVxyXG4gIEFjdGlvbkZyb21NYXRjaGVyPE1hdGNoZXJzW251bWJlcl0+XHJcblxyXG4vKiogQHB1YmxpYyAqL1xyXG5leHBvcnQgdHlwZSBBY3Rpb25NYXRjaGluZ0FsbE9mPE1hdGNoZXJzIGV4dGVuZHMgWy4uLk1hdGNoZXI8YW55PltdXT4gPVxyXG4gIFVuaW9uVG9JbnRlcnNlY3Rpb248QWN0aW9uTWF0Y2hpbmdBbnlPZjxNYXRjaGVycz4+XHJcblxyXG5jb25zdCBtYXRjaGVzID0gKG1hdGNoZXI6IE1hdGNoZXI8YW55PiwgYWN0aW9uOiBhbnkpID0+IHtcclxuICBpZiAoaGFzTWF0Y2hGdW5jdGlvbihtYXRjaGVyKSkge1xyXG4gICAgcmV0dXJuIG1hdGNoZXIubWF0Y2goYWN0aW9uKVxyXG4gIH0gZWxzZSB7XHJcbiAgICByZXR1cm4gbWF0Y2hlcihhY3Rpb24pXHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogQSBoaWdoZXItb3JkZXIgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBtYXkgYmUgdXNlZCB0byBjaGVja1xyXG4gKiB3aGV0aGVyIGFuIGFjdGlvbiBtYXRjaGVzIGFueSBvbmUgb2YgdGhlIHN1cHBsaWVkIHR5cGUgZ3VhcmRzIG9yIGFjdGlvblxyXG4gKiBjcmVhdG9ycy5cclxuICpcclxuICogQHBhcmFtIG1hdGNoZXJzIFRoZSB0eXBlIGd1YXJkcyBvciBhY3Rpb24gY3JlYXRvcnMgdG8gbWF0Y2ggYWdhaW5zdC5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzQW55T2Y8TWF0Y2hlcnMgZXh0ZW5kcyBbLi4uTWF0Y2hlcjxhbnk+W11dPihcclxuICAuLi5tYXRjaGVyczogTWF0Y2hlcnNcclxuKSB7XHJcbiAgcmV0dXJuIChhY3Rpb246IGFueSk6IGFjdGlvbiBpcyBBY3Rpb25NYXRjaGluZ0FueU9mPE1hdGNoZXJzPiA9PiB7XHJcbiAgICByZXR1cm4gbWF0Y2hlcnMuc29tZSgobWF0Y2hlcikgPT4gbWF0Y2hlcyhtYXRjaGVyLCBhY3Rpb24pKVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEEgaGlnaGVyLW9yZGVyIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgbWF5IGJlIHVzZWQgdG8gY2hlY2tcclxuICogd2hldGhlciBhbiBhY3Rpb24gbWF0Y2hlcyBhbGwgb2YgdGhlIHN1cHBsaWVkIHR5cGUgZ3VhcmRzIG9yIGFjdGlvblxyXG4gKiBjcmVhdG9ycy5cclxuICpcclxuICogQHBhcmFtIG1hdGNoZXJzIFRoZSB0eXBlIGd1YXJkcyBvciBhY3Rpb24gY3JlYXRvcnMgdG8gbWF0Y2ggYWdhaW5zdC5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzQWxsT2Y8TWF0Y2hlcnMgZXh0ZW5kcyBbLi4uTWF0Y2hlcjxhbnk+W11dPihcclxuICAuLi5tYXRjaGVyczogTWF0Y2hlcnNcclxuKSB7XHJcbiAgcmV0dXJuIChhY3Rpb246IGFueSk6IGFjdGlvbiBpcyBBY3Rpb25NYXRjaGluZ0FsbE9mPE1hdGNoZXJzPiA9PiB7XHJcbiAgICByZXR1cm4gbWF0Y2hlcnMuZXZlcnkoKG1hdGNoZXIpID0+IG1hdGNoZXMobWF0Y2hlciwgYWN0aW9uKSlcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gYWN0aW9uIEEgcmVkdXggYWN0aW9uXHJcbiAqIEBwYXJhbSB2YWxpZFN0YXR1cyBBbiBhcnJheSBvZiB2YWxpZCBtZXRhLnJlcXVlc3RTdGF0dXMgdmFsdWVzXHJcbiAqXHJcbiAqIEBpbnRlcm5hbFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGhhc0V4cGVjdGVkUmVxdWVzdE1ldGFkYXRhKFxyXG4gIGFjdGlvbjogYW55LFxyXG4gIHZhbGlkU3RhdHVzOiByZWFkb25seSBzdHJpbmdbXVxyXG4pIHtcclxuICBpZiAoIWFjdGlvbiB8fCAhYWN0aW9uLm1ldGEpIHJldHVybiBmYWxzZVxyXG5cclxuICBjb25zdCBoYXNWYWxpZFJlcXVlc3RJZCA9IHR5cGVvZiBhY3Rpb24ubWV0YS5yZXF1ZXN0SWQgPT09ICdzdHJpbmcnXHJcbiAgY29uc3QgaGFzVmFsaWRSZXF1ZXN0U3RhdHVzID1cclxuICAgIHZhbGlkU3RhdHVzLmluZGV4T2YoYWN0aW9uLm1ldGEucmVxdWVzdFN0YXR1cykgPiAtMVxyXG5cclxuICByZXR1cm4gaGFzVmFsaWRSZXF1ZXN0SWQgJiYgaGFzVmFsaWRSZXF1ZXN0U3RhdHVzXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzQXN5bmNUaHVua0FycmF5KGE6IFthbnldIHwgQW55QXN5bmNUaHVua1tdKTogYSBpcyBBbnlBc3luY1RodW5rW10ge1xyXG4gIHJldHVybiAoXHJcbiAgICB0eXBlb2YgYVswXSA9PT0gJ2Z1bmN0aW9uJyAmJlxyXG4gICAgJ3BlbmRpbmcnIGluIGFbMF0gJiZcclxuICAgICdmdWxmaWxsZWQnIGluIGFbMF0gJiZcclxuICAgICdyZWplY3RlZCcgaW4gYVswXVxyXG4gIClcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgVW5rbm93bkFzeW5jVGh1bmtQZW5kaW5nQWN0aW9uID0gUmV0dXJuVHlwZTxcclxuICBBc3luY1RodW5rUGVuZGluZ0FjdGlvbkNyZWF0b3I8dW5rbm93bj5cclxuPlxyXG5cclxuZXhwb3J0IHR5cGUgUGVuZGluZ0FjdGlvbkZyb21Bc3luY1RodW5rPFQgZXh0ZW5kcyBBbnlBc3luY1RodW5rPiA9XHJcbiAgQWN0aW9uRnJvbU1hdGNoZXI8VFsncGVuZGluZyddPlxyXG5cclxuLyoqXHJcbiAqIEEgaGlnaGVyLW9yZGVyIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgbWF5IGJlIHVzZWQgdG8gY2hlY2tcclxuICogd2hldGhlciBhbiBhY3Rpb24gd2FzIGNyZWF0ZWQgYnkgYW4gYXN5bmMgdGh1bmsgYWN0aW9uIGNyZWF0b3IsIGFuZCB0aGF0XHJcbiAqIHRoZSBhY3Rpb24gaXMgcGVuZGluZy5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzUGVuZGluZygpOiAoXHJcbiAgYWN0aW9uOiBhbnlcclxuKSA9PiBhY3Rpb24gaXMgVW5rbm93bkFzeW5jVGh1bmtQZW5kaW5nQWN0aW9uXHJcbi8qKlxyXG4gKiBBIGhpZ2hlci1vcmRlciBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBmdW5jdGlvbiB0aGF0IG1heSBiZSB1c2VkIHRvIGNoZWNrXHJcbiAqIHdoZXRoZXIgYW4gYWN0aW9uIGJlbG9uZ3MgdG8gb25lIG9mIHRoZSBwcm92aWRlZCBhc3luYyB0aHVuayBhY3Rpb24gY3JlYXRvcnMsXHJcbiAqIGFuZCB0aGF0IHRoZSBhY3Rpb24gaXMgcGVuZGluZy5cclxuICpcclxuICogQHBhcmFtIGFzeW5jVGh1bmtzIChvcHRpb25hbCkgVGhlIGFzeW5jIHRodW5rIGFjdGlvbiBjcmVhdG9ycyB0byBtYXRjaCBhZ2FpbnN0LlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNQZW5kaW5nPFxyXG4gIEFzeW5jVGh1bmtzIGV4dGVuZHMgW0FueUFzeW5jVGh1bmssIC4uLkFueUFzeW5jVGh1bmtbXV1cclxuPihcclxuICAuLi5hc3luY1RodW5rczogQXN5bmNUaHVua3NcclxuKTogKGFjdGlvbjogYW55KSA9PiBhY3Rpb24gaXMgUGVuZGluZ0FjdGlvbkZyb21Bc3luY1RodW5rPEFzeW5jVGh1bmtzW251bWJlcl0+XHJcbi8qKlxyXG4gKiBUZXN0cyBpZiBgYWN0aW9uYCBpcyBhIHBlbmRpbmcgdGh1bmsgYWN0aW9uXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1BlbmRpbmcoYWN0aW9uOiBhbnkpOiBhY3Rpb24gaXMgVW5rbm93bkFzeW5jVGh1bmtQZW5kaW5nQWN0aW9uXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1BlbmRpbmc8XHJcbiAgQXN5bmNUaHVua3MgZXh0ZW5kcyBbQW55QXN5bmNUaHVuaywgLi4uQW55QXN5bmNUaHVua1tdXVxyXG4+KC4uLmFzeW5jVGh1bmtzOiBBc3luY1RodW5rcyB8IFthbnldKSB7XHJcbiAgaWYgKGFzeW5jVGh1bmtzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgcmV0dXJuIChhY3Rpb246IGFueSkgPT4gaGFzRXhwZWN0ZWRSZXF1ZXN0TWV0YWRhdGEoYWN0aW9uLCBbJ3BlbmRpbmcnXSlcclxuICB9XHJcblxyXG4gIGlmICghaXNBc3luY1RodW5rQXJyYXkoYXN5bmNUaHVua3MpKSB7XHJcbiAgICByZXR1cm4gaXNQZW5kaW5nKCkoYXN5bmNUaHVua3NbMF0pXHJcbiAgfVxyXG5cclxuICByZXR1cm4gKFxyXG4gICAgYWN0aW9uOiBhbnlcclxuICApOiBhY3Rpb24gaXMgUGVuZGluZ0FjdGlvbkZyb21Bc3luY1RodW5rPEFzeW5jVGh1bmtzW251bWJlcl0+ID0+IHtcclxuICAgIC8vIG5vdGU6IHRoaXMgdHlwZSB3aWxsIGJlIGNvcnJlY3QgYmVjYXVzZSB3ZSBoYXZlIGF0IGxlYXN0IDEgYXN5bmNUaHVua1xyXG4gICAgY29uc3QgbWF0Y2hlcnM6IFtNYXRjaGVyPGFueT4sIC4uLk1hdGNoZXI8YW55PltdXSA9IGFzeW5jVGh1bmtzLm1hcChcclxuICAgICAgKGFzeW5jVGh1bmspID0+IGFzeW5jVGh1bmsucGVuZGluZ1xyXG4gICAgKSBhcyBhbnlcclxuXHJcbiAgICBjb25zdCBjb21iaW5lZE1hdGNoZXIgPSBpc0FueU9mKC4uLm1hdGNoZXJzKVxyXG5cclxuICAgIHJldHVybiBjb21iaW5lZE1hdGNoZXIoYWN0aW9uKVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IHR5cGUgVW5rbm93bkFzeW5jVGh1bmtSZWplY3RlZEFjdGlvbiA9IFJldHVyblR5cGU8XHJcbiAgQXN5bmNUaHVua1JlamVjdGVkQWN0aW9uQ3JlYXRvcjx1bmtub3duLCB1bmtub3duPlxyXG4+XHJcblxyXG5leHBvcnQgdHlwZSBSZWplY3RlZEFjdGlvbkZyb21Bc3luY1RodW5rPFQgZXh0ZW5kcyBBbnlBc3luY1RodW5rPiA9XHJcbiAgQWN0aW9uRnJvbU1hdGNoZXI8VFsncmVqZWN0ZWQnXT5cclxuXHJcbi8qKlxyXG4gKiBBIGhpZ2hlci1vcmRlciBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBmdW5jdGlvbiB0aGF0IG1heSBiZSB1c2VkIHRvIGNoZWNrXHJcbiAqIHdoZXRoZXIgYW4gYWN0aW9uIHdhcyBjcmVhdGVkIGJ5IGFuIGFzeW5jIHRodW5rIGFjdGlvbiBjcmVhdG9yLCBhbmQgdGhhdFxyXG4gKiB0aGUgYWN0aW9uIGlzIHJlamVjdGVkLlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNSZWplY3RlZCgpOiAoXHJcbiAgYWN0aW9uOiBhbnlcclxuKSA9PiBhY3Rpb24gaXMgVW5rbm93bkFzeW5jVGh1bmtSZWplY3RlZEFjdGlvblxyXG4vKipcclxuICogQSBoaWdoZXItb3JkZXIgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBtYXkgYmUgdXNlZCB0byBjaGVja1xyXG4gKiB3aGV0aGVyIGFuIGFjdGlvbiBiZWxvbmdzIHRvIG9uZSBvZiB0aGUgcHJvdmlkZWQgYXN5bmMgdGh1bmsgYWN0aW9uIGNyZWF0b3JzLFxyXG4gKiBhbmQgdGhhdCB0aGUgYWN0aW9uIGlzIHJlamVjdGVkLlxyXG4gKlxyXG4gKiBAcGFyYW0gYXN5bmNUaHVua3MgKG9wdGlvbmFsKSBUaGUgYXN5bmMgdGh1bmsgYWN0aW9uIGNyZWF0b3JzIHRvIG1hdGNoIGFnYWluc3QuXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1JlamVjdGVkPFxyXG4gIEFzeW5jVGh1bmtzIGV4dGVuZHMgW0FueUFzeW5jVGh1bmssIC4uLkFueUFzeW5jVGh1bmtbXV1cclxuPihcclxuICAuLi5hc3luY1RodW5rczogQXN5bmNUaHVua3NcclxuKTogKGFjdGlvbjogYW55KSA9PiBhY3Rpb24gaXMgUmVqZWN0ZWRBY3Rpb25Gcm9tQXN5bmNUaHVuazxBc3luY1RodW5rc1tudW1iZXJdPlxyXG4vKipcclxuICogVGVzdHMgaWYgYGFjdGlvbmAgaXMgYSByZWplY3RlZCB0aHVuayBhY3Rpb25cclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzUmVqZWN0ZWQoXHJcbiAgYWN0aW9uOiBhbnlcclxuKTogYWN0aW9uIGlzIFVua25vd25Bc3luY1RodW5rUmVqZWN0ZWRBY3Rpb25cclxuZXhwb3J0IGZ1bmN0aW9uIGlzUmVqZWN0ZWQ8XHJcbiAgQXN5bmNUaHVua3MgZXh0ZW5kcyBbQW55QXN5bmNUaHVuaywgLi4uQW55QXN5bmNUaHVua1tdXVxyXG4+KC4uLmFzeW5jVGh1bmtzOiBBc3luY1RodW5rcyB8IFthbnldKSB7XHJcbiAgaWYgKGFzeW5jVGh1bmtzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgcmV0dXJuIChhY3Rpb246IGFueSkgPT4gaGFzRXhwZWN0ZWRSZXF1ZXN0TWV0YWRhdGEoYWN0aW9uLCBbJ3JlamVjdGVkJ10pXHJcbiAgfVxyXG5cclxuICBpZiAoIWlzQXN5bmNUaHVua0FycmF5KGFzeW5jVGh1bmtzKSkge1xyXG4gICAgcmV0dXJuIGlzUmVqZWN0ZWQoKShhc3luY1RodW5rc1swXSlcclxuICB9XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICBhY3Rpb246IGFueVxyXG4gICk6IGFjdGlvbiBpcyBSZWplY3RlZEFjdGlvbkZyb21Bc3luY1RodW5rPEFzeW5jVGh1bmtzW251bWJlcl0+ID0+IHtcclxuICAgIC8vIG5vdGU6IHRoaXMgdHlwZSB3aWxsIGJlIGNvcnJlY3QgYmVjYXVzZSB3ZSBoYXZlIGF0IGxlYXN0IDEgYXN5bmNUaHVua1xyXG4gICAgY29uc3QgbWF0Y2hlcnM6IFtNYXRjaGVyPGFueT4sIC4uLk1hdGNoZXI8YW55PltdXSA9IGFzeW5jVGh1bmtzLm1hcChcclxuICAgICAgKGFzeW5jVGh1bmspID0+IGFzeW5jVGh1bmsucmVqZWN0ZWRcclxuICAgICkgYXMgYW55XHJcblxyXG4gICAgY29uc3QgY29tYmluZWRNYXRjaGVyID0gaXNBbnlPZiguLi5tYXRjaGVycylcclxuXHJcbiAgICByZXR1cm4gY29tYmluZWRNYXRjaGVyKGFjdGlvbilcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIFVua25vd25Bc3luY1RodW5rUmVqZWN0ZWRXaXRoVmFsdWVBY3Rpb24gPSBSZXR1cm5UeXBlPFxyXG4gIEFzeW5jVGh1bmtSZWplY3RlZEFjdGlvbkNyZWF0b3I8dW5rbm93biwgdW5rbm93bj5cclxuPlxyXG5cclxuZXhwb3J0IHR5cGUgUmVqZWN0ZWRXaXRoVmFsdWVBY3Rpb25Gcm9tQXN5bmNUaHVuazxUIGV4dGVuZHMgQW55QXN5bmNUaHVuaz4gPVxyXG4gIEFjdGlvbkZyb21NYXRjaGVyPFRbJ3JlamVjdGVkJ10+ICZcclxuICAgIChUIGV4dGVuZHMgQXN5bmNUaHVuazxhbnksIGFueSwgeyByZWplY3RWYWx1ZTogaW5mZXIgUmVqZWN0ZWRWYWx1ZSB9PlxyXG4gICAgICA/IHsgcGF5bG9hZDogUmVqZWN0ZWRWYWx1ZSB9XHJcbiAgICAgIDogdW5rbm93bilcclxuXHJcbi8qKlxyXG4gKiBBIGhpZ2hlci1vcmRlciBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBmdW5jdGlvbiB0aGF0IG1heSBiZSB1c2VkIHRvIGNoZWNrXHJcbiAqIHdoZXRoZXIgYW4gYWN0aW9uIHdhcyBjcmVhdGVkIGJ5IGFuIGFzeW5jIHRodW5rIGFjdGlvbiBjcmVhdG9yLCBhbmQgdGhhdFxyXG4gKiB0aGUgYWN0aW9uIGlzIHJlamVjdGVkIHdpdGggdmFsdWUuXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1JlamVjdGVkV2l0aFZhbHVlKCk6IChcclxuICBhY3Rpb246IGFueVxyXG4pID0+IGFjdGlvbiBpcyBVbmtub3duQXN5bmNUaHVua1JlamVjdGVkQWN0aW9uXHJcbi8qKlxyXG4gKiBBIGhpZ2hlci1vcmRlciBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBmdW5jdGlvbiB0aGF0IG1heSBiZSB1c2VkIHRvIGNoZWNrXHJcbiAqIHdoZXRoZXIgYW4gYWN0aW9uIGJlbG9uZ3MgdG8gb25lIG9mIHRoZSBwcm92aWRlZCBhc3luYyB0aHVuayBhY3Rpb24gY3JlYXRvcnMsXHJcbiAqIGFuZCB0aGF0IHRoZSBhY3Rpb24gaXMgcmVqZWN0ZWQgd2l0aCB2YWx1ZS5cclxuICpcclxuICogQHBhcmFtIGFzeW5jVGh1bmtzIChvcHRpb25hbCkgVGhlIGFzeW5jIHRodW5rIGFjdGlvbiBjcmVhdG9ycyB0byBtYXRjaCBhZ2FpbnN0LlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNSZWplY3RlZFdpdGhWYWx1ZTxcclxuICBBc3luY1RodW5rcyBleHRlbmRzIFtBbnlBc3luY1RodW5rLCAuLi5BbnlBc3luY1RodW5rW11dXHJcbj4oXHJcbiAgLi4uYXN5bmNUaHVua3M6IEFzeW5jVGh1bmtzXHJcbik6IChcclxuICBhY3Rpb246IGFueVxyXG4pID0+IGFjdGlvbiBpcyBSZWplY3RlZFdpdGhWYWx1ZUFjdGlvbkZyb21Bc3luY1RodW5rPEFzeW5jVGh1bmtzW251bWJlcl0+XHJcbi8qKlxyXG4gKiBUZXN0cyBpZiBgYWN0aW9uYCBpcyBhIHJlamVjdGVkIHRodW5rIGFjdGlvbiB3aXRoIHZhbHVlXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1JlamVjdGVkV2l0aFZhbHVlKFxyXG4gIGFjdGlvbjogYW55XHJcbik6IGFjdGlvbiBpcyBVbmtub3duQXN5bmNUaHVua1JlamVjdGVkQWN0aW9uXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1JlamVjdGVkV2l0aFZhbHVlPFxyXG4gIEFzeW5jVGh1bmtzIGV4dGVuZHMgW0FueUFzeW5jVGh1bmssIC4uLkFueUFzeW5jVGh1bmtbXV1cclxuPiguLi5hc3luY1RodW5rczogQXN5bmNUaHVua3MgfCBbYW55XSkge1xyXG4gIGNvbnN0IGhhc0ZsYWcgPSAoYWN0aW9uOiBhbnkpOiBhY3Rpb24gaXMgYW55ID0+IHtcclxuICAgIHJldHVybiBhY3Rpb24gJiYgYWN0aW9uLm1ldGEgJiYgYWN0aW9uLm1ldGEucmVqZWN0ZWRXaXRoVmFsdWVcclxuICB9XHJcblxyXG4gIGlmIChhc3luY1RodW5rcy5sZW5ndGggPT09IDApIHtcclxuICAgIHJldHVybiAoYWN0aW9uOiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgY29tYmluZWRNYXRjaGVyID0gaXNBbGxPZihpc1JlamVjdGVkKC4uLmFzeW5jVGh1bmtzKSwgaGFzRmxhZylcclxuXHJcbiAgICAgIHJldHVybiBjb21iaW5lZE1hdGNoZXIoYWN0aW9uKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaWYgKCFpc0FzeW5jVGh1bmtBcnJheShhc3luY1RodW5rcykpIHtcclxuICAgIHJldHVybiBpc1JlamVjdGVkV2l0aFZhbHVlKCkoYXN5bmNUaHVua3NbMF0pXHJcbiAgfVxyXG5cclxuICByZXR1cm4gKFxyXG4gICAgYWN0aW9uOiBhbnlcclxuICApOiBhY3Rpb24gaXMgUmVqZWN0ZWRBY3Rpb25Gcm9tQXN5bmNUaHVuazxBc3luY1RodW5rc1tudW1iZXJdPiA9PiB7XHJcbiAgICBjb25zdCBjb21iaW5lZE1hdGNoZXIgPSBpc0FsbE9mKGlzUmVqZWN0ZWQoLi4uYXN5bmNUaHVua3MpLCBoYXNGbGFnKVxyXG5cclxuICAgIHJldHVybiBjb21iaW5lZE1hdGNoZXIoYWN0aW9uKVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IHR5cGUgVW5rbm93bkFzeW5jVGh1bmtGdWxmaWxsZWRBY3Rpb24gPSBSZXR1cm5UeXBlPFxyXG4gIEFzeW5jVGh1bmtGdWxmaWxsZWRBY3Rpb25DcmVhdG9yPHVua25vd24sIHVua25vd24+XHJcbj5cclxuXHJcbmV4cG9ydCB0eXBlIEZ1bGZpbGxlZEFjdGlvbkZyb21Bc3luY1RodW5rPFQgZXh0ZW5kcyBBbnlBc3luY1RodW5rPiA9XHJcbiAgQWN0aW9uRnJvbU1hdGNoZXI8VFsnZnVsZmlsbGVkJ10+XHJcblxyXG4vKipcclxuICogQSBoaWdoZXItb3JkZXIgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBtYXkgYmUgdXNlZCB0byBjaGVja1xyXG4gKiB3aGV0aGVyIGFuIGFjdGlvbiB3YXMgY3JlYXRlZCBieSBhbiBhc3luYyB0aHVuayBhY3Rpb24gY3JlYXRvciwgYW5kIHRoYXRcclxuICogdGhlIGFjdGlvbiBpcyBmdWxmaWxsZWQuXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0Z1bGZpbGxlZCgpOiAoXHJcbiAgYWN0aW9uOiBhbnlcclxuKSA9PiBhY3Rpb24gaXMgVW5rbm93bkFzeW5jVGh1bmtGdWxmaWxsZWRBY3Rpb25cclxuLyoqXHJcbiAqIEEgaGlnaGVyLW9yZGVyIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgbWF5IGJlIHVzZWQgdG8gY2hlY2tcclxuICogd2hldGhlciBhbiBhY3Rpb24gYmVsb25ncyB0byBvbmUgb2YgdGhlIHByb3ZpZGVkIGFzeW5jIHRodW5rIGFjdGlvbiBjcmVhdG9ycyxcclxuICogYW5kIHRoYXQgdGhlIGFjdGlvbiBpcyBmdWxmaWxsZWQuXHJcbiAqXHJcbiAqIEBwYXJhbSBhc3luY1RodW5rcyAob3B0aW9uYWwpIFRoZSBhc3luYyB0aHVuayBhY3Rpb24gY3JlYXRvcnMgdG8gbWF0Y2ggYWdhaW5zdC5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzRnVsZmlsbGVkPFxyXG4gIEFzeW5jVGh1bmtzIGV4dGVuZHMgW0FueUFzeW5jVGh1bmssIC4uLkFueUFzeW5jVGh1bmtbXV1cclxuPihcclxuICAuLi5hc3luY1RodW5rczogQXN5bmNUaHVua3NcclxuKTogKGFjdGlvbjogYW55KSA9PiBhY3Rpb24gaXMgRnVsZmlsbGVkQWN0aW9uRnJvbUFzeW5jVGh1bms8QXN5bmNUaHVua3NbbnVtYmVyXT5cclxuLyoqXHJcbiAqIFRlc3RzIGlmIGBhY3Rpb25gIGlzIGEgZnVsZmlsbGVkIHRodW5rIGFjdGlvblxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNGdWxmaWxsZWQoXHJcbiAgYWN0aW9uOiBhbnlcclxuKTogYWN0aW9uIGlzIFVua25vd25Bc3luY1RodW5rRnVsZmlsbGVkQWN0aW9uXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0Z1bGZpbGxlZDxcclxuICBBc3luY1RodW5rcyBleHRlbmRzIFtBbnlBc3luY1RodW5rLCAuLi5BbnlBc3luY1RodW5rW11dXHJcbj4oLi4uYXN5bmNUaHVua3M6IEFzeW5jVGh1bmtzIHwgW2FueV0pIHtcclxuICBpZiAoYXN5bmNUaHVua3MubGVuZ3RoID09PSAwKSB7XHJcbiAgICByZXR1cm4gKGFjdGlvbjogYW55KSA9PiBoYXNFeHBlY3RlZFJlcXVlc3RNZXRhZGF0YShhY3Rpb24sIFsnZnVsZmlsbGVkJ10pXHJcbiAgfVxyXG5cclxuICBpZiAoIWlzQXN5bmNUaHVua0FycmF5KGFzeW5jVGh1bmtzKSkge1xyXG4gICAgcmV0dXJuIGlzRnVsZmlsbGVkKCkoYXN5bmNUaHVua3NbMF0pXHJcbiAgfVxyXG5cclxuICByZXR1cm4gKFxyXG4gICAgYWN0aW9uOiBhbnlcclxuICApOiBhY3Rpb24gaXMgRnVsZmlsbGVkQWN0aW9uRnJvbUFzeW5jVGh1bms8QXN5bmNUaHVua3NbbnVtYmVyXT4gPT4ge1xyXG4gICAgLy8gbm90ZTogdGhpcyB0eXBlIHdpbGwgYmUgY29ycmVjdCBiZWNhdXNlIHdlIGhhdmUgYXQgbGVhc3QgMSBhc3luY1RodW5rXHJcbiAgICBjb25zdCBtYXRjaGVyczogW01hdGNoZXI8YW55PiwgLi4uTWF0Y2hlcjxhbnk+W11dID0gYXN5bmNUaHVua3MubWFwKFxyXG4gICAgICAoYXN5bmNUaHVuaykgPT4gYXN5bmNUaHVuay5mdWxmaWxsZWRcclxuICAgICkgYXMgYW55XHJcblxyXG4gICAgY29uc3QgY29tYmluZWRNYXRjaGVyID0gaXNBbnlPZiguLi5tYXRjaGVycylcclxuXHJcbiAgICByZXR1cm4gY29tYmluZWRNYXRjaGVyKGFjdGlvbilcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIFVua25vd25Bc3luY1RodW5rQWN0aW9uID1cclxuICB8IFVua25vd25Bc3luY1RodW5rUGVuZGluZ0FjdGlvblxyXG4gIHwgVW5rbm93bkFzeW5jVGh1bmtSZWplY3RlZEFjdGlvblxyXG4gIHwgVW5rbm93bkFzeW5jVGh1bmtGdWxmaWxsZWRBY3Rpb25cclxuXHJcbmV4cG9ydCB0eXBlIEFueUFzeW5jVGh1bmsgPSB7XHJcbiAgcGVuZGluZzogeyBtYXRjaDogKGFjdGlvbjogYW55KSA9PiBhY3Rpb24gaXMgYW55IH1cclxuICBmdWxmaWxsZWQ6IHsgbWF0Y2g6IChhY3Rpb246IGFueSkgPT4gYWN0aW9uIGlzIGFueSB9XHJcbiAgcmVqZWN0ZWQ6IHsgbWF0Y2g6IChhY3Rpb246IGFueSkgPT4gYWN0aW9uIGlzIGFueSB9XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIEFjdGlvbnNGcm9tQXN5bmNUaHVuazxUIGV4dGVuZHMgQW55QXN5bmNUaHVuaz4gPVxyXG4gIHwgQWN0aW9uRnJvbU1hdGNoZXI8VFsncGVuZGluZyddPlxyXG4gIHwgQWN0aW9uRnJvbU1hdGNoZXI8VFsnZnVsZmlsbGVkJ10+XHJcbiAgfCBBY3Rpb25Gcm9tTWF0Y2hlcjxUWydyZWplY3RlZCddPlxyXG5cclxuLyoqXHJcbiAqIEEgaGlnaGVyLW9yZGVyIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgbWF5IGJlIHVzZWQgdG8gY2hlY2tcclxuICogd2hldGhlciBhbiBhY3Rpb24gd2FzIGNyZWF0ZWQgYnkgYW4gYXN5bmMgdGh1bmsgYWN0aW9uIGNyZWF0b3IuXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0FzeW5jVGh1bmtBY3Rpb24oKTogKFxyXG4gIGFjdGlvbjogYW55XHJcbikgPT4gYWN0aW9uIGlzIFVua25vd25Bc3luY1RodW5rQWN0aW9uXHJcbi8qKlxyXG4gKiBBIGhpZ2hlci1vcmRlciBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBmdW5jdGlvbiB0aGF0IG1heSBiZSB1c2VkIHRvIGNoZWNrXHJcbiAqIHdoZXRoZXIgYW4gYWN0aW9uIGJlbG9uZ3MgdG8gb25lIG9mIHRoZSBwcm92aWRlZCBhc3luYyB0aHVuayBhY3Rpb24gY3JlYXRvcnMuXHJcbiAqXHJcbiAqIEBwYXJhbSBhc3luY1RodW5rcyAob3B0aW9uYWwpIFRoZSBhc3luYyB0aHVuayBhY3Rpb24gY3JlYXRvcnMgdG8gbWF0Y2ggYWdhaW5zdC5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzQXN5bmNUaHVua0FjdGlvbjxcclxuICBBc3luY1RodW5rcyBleHRlbmRzIFtBbnlBc3luY1RodW5rLCAuLi5BbnlBc3luY1RodW5rW11dXHJcbj4oXHJcbiAgLi4uYXN5bmNUaHVua3M6IEFzeW5jVGh1bmtzXHJcbik6IChhY3Rpb246IGFueSkgPT4gYWN0aW9uIGlzIEFjdGlvbnNGcm9tQXN5bmNUaHVuazxBc3luY1RodW5rc1tudW1iZXJdPlxyXG4vKipcclxuICogVGVzdHMgaWYgYGFjdGlvbmAgaXMgYSB0aHVuayBhY3Rpb25cclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzQXN5bmNUaHVua0FjdGlvbihcclxuICBhY3Rpb246IGFueVxyXG4pOiBhY3Rpb24gaXMgVW5rbm93bkFzeW5jVGh1bmtBY3Rpb25cclxuZXhwb3J0IGZ1bmN0aW9uIGlzQXN5bmNUaHVua0FjdGlvbjxcclxuICBBc3luY1RodW5rcyBleHRlbmRzIFtBbnlBc3luY1RodW5rLCAuLi5BbnlBc3luY1RodW5rW11dXHJcbj4oLi4uYXN5bmNUaHVua3M6IEFzeW5jVGh1bmtzIHwgW2FueV0pIHtcclxuICBpZiAoYXN5bmNUaHVua3MubGVuZ3RoID09PSAwKSB7XHJcbiAgICByZXR1cm4gKGFjdGlvbjogYW55KSA9PlxyXG4gICAgICBoYXNFeHBlY3RlZFJlcXVlc3RNZXRhZGF0YShhY3Rpb24sIFsncGVuZGluZycsICdmdWxmaWxsZWQnLCAncmVqZWN0ZWQnXSlcclxuICB9XHJcblxyXG4gIGlmICghaXNBc3luY1RodW5rQXJyYXkoYXN5bmNUaHVua3MpKSB7XHJcbiAgICByZXR1cm4gaXNBc3luY1RodW5rQWN0aW9uKCkoYXN5bmNUaHVua3NbMF0pXHJcbiAgfVxyXG5cclxuICByZXR1cm4gKFxyXG4gICAgYWN0aW9uOiBhbnlcclxuICApOiBhY3Rpb24gaXMgQWN0aW9uc0Zyb21Bc3luY1RodW5rPEFzeW5jVGh1bmtzW251bWJlcl0+ID0+IHtcclxuICAgIC8vIG5vdGU6IHRoaXMgdHlwZSB3aWxsIGJlIGNvcnJlY3QgYmVjYXVzZSB3ZSBoYXZlIGF0IGxlYXN0IDEgYXN5bmNUaHVua1xyXG4gICAgY29uc3QgbWF0Y2hlcnM6IFtNYXRjaGVyPGFueT4sIC4uLk1hdGNoZXI8YW55PltdXSA9IFtdIGFzIGFueVxyXG5cclxuICAgIGZvciAoY29uc3QgYXN5bmNUaHVuayBvZiBhc3luY1RodW5rcykge1xyXG4gICAgICBtYXRjaGVycy5wdXNoKFxyXG4gICAgICAgIGFzeW5jVGh1bmsucGVuZGluZyxcclxuICAgICAgICBhc3luY1RodW5rLnJlamVjdGVkLFxyXG4gICAgICAgIGFzeW5jVGh1bmsuZnVsZmlsbGVkXHJcbiAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjb21iaW5lZE1hdGNoZXIgPSBpc0FueU9mKC4uLm1hdGNoZXJzKVxyXG5cclxuICAgIHJldHVybiBjb21iaW5lZE1hdGNoZXIoYWN0aW9uKVxyXG4gIH1cclxufVxyXG4iLCAiaW1wb3J0IHR5cGUgeyBBYm9ydFNpZ25hbFdpdGhSZWFzb24gfSBmcm9tICcuL3R5cGVzJ1xyXG5cclxuZXhwb3J0IGNvbnN0IGFzc2VydEZ1bmN0aW9uOiAoXHJcbiAgZnVuYzogdW5rbm93bixcclxuICBleHBlY3RlZDogc3RyaW5nXHJcbikgPT4gYXNzZXJ0cyBmdW5jIGlzICguLi5hcmdzOiB1bmtub3duW10pID0+IHVua25vd24gPSAoXHJcbiAgZnVuYzogdW5rbm93bixcclxuICBleHBlY3RlZDogc3RyaW5nXHJcbikgPT4ge1xyXG4gIGlmICh0eXBlb2YgZnVuYyAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJHtleHBlY3RlZH0gaXMgbm90IGEgZnVuY3Rpb25gKVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IG5vb3AgPSAoKSA9PiB7fVxyXG5cclxuZXhwb3J0IGNvbnN0IGNhdGNoUmVqZWN0aW9uID0gPFQ+KFxyXG4gIHByb21pc2U6IFByb21pc2U8VD4sXHJcbiAgb25FcnJvciA9IG5vb3BcclxuKTogUHJvbWlzZTxUPiA9PiB7XHJcbiAgcHJvbWlzZS5jYXRjaChvbkVycm9yKVxyXG5cclxuICByZXR1cm4gcHJvbWlzZVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgYWRkQWJvcnRTaWduYWxMaXN0ZW5lciA9IChcclxuICBhYm9ydFNpZ25hbDogQWJvcnRTaWduYWwsXHJcbiAgY2FsbGJhY2s6IChldnQ6IEV2ZW50KSA9PiB2b2lkXHJcbikgPT4ge1xyXG4gIGFib3J0U2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgY2FsbGJhY2ssIHsgb25jZTogdHJ1ZSB9KVxyXG4gIHJldHVybiAoKSA9PiBhYm9ydFNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIGNhbGxiYWNrKVxyXG59XHJcblxyXG4vKipcclxuICogQ2FsbHMgYGFib3J0Q29udHJvbGxlci5hYm9ydChyZWFzb24pYCBhbmQgcGF0Y2hlcyBgc2lnbmFsLnJlYXNvbmAuXHJcbiAqIGlmIGl0IGlzIG5vdCBzdXBwb3J0ZWQuXHJcbiAqXHJcbiAqIEF0IHRoZSB0aW1lIG9mIHdyaXRpbmcgYHNpZ25hbC5yZWFzb25gIGlzIGF2YWlsYWJsZSBpbiBGRiBjaHJvbWUsIGVkZ2Ugbm9kZSAxNyBhbmQgZGVuby5cclxuICogQHBhcmFtIGFib3J0Q29udHJvbGxlclxyXG4gKiBAcGFyYW0gcmVhc29uXHJcbiAqIEByZXR1cm5zXHJcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0Fib3J0U2lnbmFsL3JlYXNvblxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGFib3J0Q29udHJvbGxlcldpdGhSZWFzb24gPSA8VD4oXHJcbiAgYWJvcnRDb250cm9sbGVyOiBBYm9ydENvbnRyb2xsZXIsXHJcbiAgcmVhc29uOiBUXHJcbik6IHZvaWQgPT4ge1xyXG4gIHR5cGUgQ29uc3VtZXI8VD4gPSAodmFsOiBUKSA9PiB2b2lkXHJcblxyXG4gIGNvbnN0IHNpZ25hbCA9IGFib3J0Q29udHJvbGxlci5zaWduYWwgYXMgQWJvcnRTaWduYWxXaXRoUmVhc29uPFQ+XHJcblxyXG4gIGlmIChzaWduYWwuYWJvcnRlZCkge1xyXG4gICAgcmV0dXJuXHJcbiAgfVxyXG5cclxuICAvLyBQYXRjaCBgcmVhc29uYCBpZiBuZWNlc3NhcnkuXHJcbiAgLy8gLSBXZSB1c2UgZGVmaW5lUHJvcGVydHkgaGVyZSBiZWNhdXNlIHJlYXNvbiBpcyBhIGdldHRlciBvZiBgQWJvcnRTaWduYWwuX19wcm90b19fYC5cclxuICAvLyAtIFdlIG5lZWQgdG8gcGF0Y2ggJ3JlYXNvbicgYmVmb3JlIGNhbGxpbmcgYC5hYm9ydCgpYCBiZWNhdXNlIGxpc3RlbmVycyB0byB0aGUgJ2Fib3J0J1xyXG4gIC8vIGV2ZW50IGFyZSBhcmUgbm90aWZpZWQgaW1tZWRpYXRlbHkuXHJcbiAgaWYgKCEoJ3JlYXNvbicgaW4gc2lnbmFsKSkge1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHNpZ25hbCwgJ3JlYXNvbicsIHtcclxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcclxuICAgICAgdmFsdWU6IHJlYXNvbixcclxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxyXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICA7KGFib3J0Q29udHJvbGxlci5hYm9ydCBhcyBDb25zdW1lcjx0eXBlb2YgcmVhc29uPikocmVhc29uKVxyXG59XHJcbiIsICJpbXBvcnQgdHlwZSB7IFNlcmlhbGl6ZWRFcnJvciB9IGZyb20gJ0ByZWR1eGpzL3Rvb2xraXQnXHJcblxyXG5jb25zdCB0YXNrID0gJ3Rhc2snXHJcbmNvbnN0IGxpc3RlbmVyID0gJ2xpc3RlbmVyJ1xyXG5jb25zdCBjb21wbGV0ZWQgPSAnY29tcGxldGVkJ1xyXG5jb25zdCBjYW5jZWxsZWQgPSAnY2FuY2VsbGVkJ1xyXG5cclxuLyogVGFza0Fib3J0RXJyb3IgZXJyb3IgY29kZXMgICovXHJcbmV4cG9ydCBjb25zdCB0YXNrQ2FuY2VsbGVkID0gYHRhc2stJHtjYW5jZWxsZWR9YCBhcyBjb25zdFxyXG5leHBvcnQgY29uc3QgdGFza0NvbXBsZXRlZCA9IGB0YXNrLSR7Y29tcGxldGVkfWAgYXMgY29uc3RcclxuZXhwb3J0IGNvbnN0IGxpc3RlbmVyQ2FuY2VsbGVkID0gYCR7bGlzdGVuZXJ9LSR7Y2FuY2VsbGVkfWAgYXMgY29uc3RcclxuZXhwb3J0IGNvbnN0IGxpc3RlbmVyQ29tcGxldGVkID0gYCR7bGlzdGVuZXJ9LSR7Y29tcGxldGVkfWAgYXMgY29uc3RcclxuXHJcbmV4cG9ydCBjbGFzcyBUYXNrQWJvcnRFcnJvciBpbXBsZW1lbnRzIFNlcmlhbGl6ZWRFcnJvciB7XHJcbiAgbmFtZSA9ICdUYXNrQWJvcnRFcnJvcidcclxuICBtZXNzYWdlOiBzdHJpbmdcclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgY29kZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLm1lc3NhZ2UgPSBgJHt0YXNrfSAke2NhbmNlbGxlZH0gKHJlYXNvbjogJHtjb2RlfSlgXHJcbiAgfVxyXG59XHJcbiIsICJpbXBvcnQgeyBUYXNrQWJvcnRFcnJvciB9IGZyb20gJy4vZXhjZXB0aW9ucydcclxuaW1wb3J0IHR5cGUgeyBBYm9ydFNpZ25hbFdpdGhSZWFzb24sIFRhc2tSZXN1bHQgfSBmcm9tICcuL3R5cGVzJ1xyXG5pbXBvcnQgeyBhZGRBYm9ydFNpZ25hbExpc3RlbmVyLCBjYXRjaFJlamVjdGlvbiwgbm9vcCB9IGZyb20gJy4vdXRpbHMnXHJcblxyXG4vKipcclxuICogU3luY2hyb25vdXNseSByYWlzZXMge0BsaW5rIFRhc2tBYm9ydEVycm9yfSBpZiB0aGUgdGFzayB0aWVkIHRvIHRoZSBpbnB1dCBgc2lnbmFsYCBoYXMgYmVlbiBjYW5jZWxsZWQuXHJcbiAqIEBwYXJhbSBzaWduYWxcclxuICogQHBhcmFtIHJlYXNvblxyXG4gKiBAc2VlIHtUYXNrQWJvcnRFcnJvcn1cclxuICovXHJcbmV4cG9ydCBjb25zdCB2YWxpZGF0ZUFjdGl2ZSA9IChzaWduYWw6IEFib3J0U2lnbmFsKTogdm9pZCA9PiB7XHJcbiAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XHJcbiAgICB0aHJvdyBuZXcgVGFza0Fib3J0RXJyb3IoKHNpZ25hbCBhcyBBYm9ydFNpZ25hbFdpdGhSZWFzb248c3RyaW5nPikucmVhc29uKVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEdlbmVyYXRlcyBhIHJhY2UgYmV0d2VlbiB0aGUgcHJvbWlzZShzKSBhbmQgdGhlIEFib3J0U2lnbmFsXHJcbiAqIFRoaXMgYXZvaWRzIGBQcm9taXNlLnJhY2UoKWAtcmVsYXRlZCBtZW1vcnkgbGVha3M6XHJcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9pc3N1ZXMvMTc0NjkjaXNzdWVjb21tZW50LTM0OTc5NDkwOVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHJhY2VXaXRoU2lnbmFsPFQ+KFxyXG4gIHNpZ25hbDogQWJvcnRTaWduYWxXaXRoUmVhc29uPHN0cmluZz4sXHJcbiAgcHJvbWlzZTogUHJvbWlzZTxUPlxyXG4pOiBQcm9taXNlPFQ+IHtcclxuICBsZXQgY2xlYW51cCA9IG5vb3BcclxuICByZXR1cm4gbmV3IFByb21pc2U8VD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgY29uc3Qgbm90aWZ5UmVqZWN0aW9uID0gKCkgPT4gcmVqZWN0KG5ldyBUYXNrQWJvcnRFcnJvcihzaWduYWwucmVhc29uKSlcclxuXHJcbiAgICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcclxuICAgICAgbm90aWZ5UmVqZWN0aW9uKClcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYW51cCA9IGFkZEFib3J0U2lnbmFsTGlzdGVuZXIoc2lnbmFsLCBub3RpZnlSZWplY3Rpb24pXHJcbiAgICBwcm9taXNlLmZpbmFsbHkoKCkgPT4gY2xlYW51cCgpKS50aGVuKHJlc29sdmUsIHJlamVjdClcclxuICB9KS5maW5hbGx5KCgpID0+IHtcclxuICAgIC8vIGFmdGVyIHRoaXMgcG9pbnQsIHJlcGxhY2UgYGNsZWFudXBgIHdpdGggYSBub29wLCBzbyB0aGVyZSBpcyBubyByZWZlcmVuY2UgdG8gYHNpZ25hbGAgYW55IG1vcmVcclxuICAgIGNsZWFudXAgPSBub29wXHJcbiAgfSlcclxufVxyXG5cclxuLyoqXHJcbiAqIFJ1bnMgYSB0YXNrIGFuZCByZXR1cm5zIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB7QGxpbmsgVGFza1Jlc3VsdH0uXHJcbiAqIFNlY29uZCBhcmd1bWVudCBpcyBhbiBvcHRpb25hbCBgY2xlYW5VcGAgZnVuY3Rpb24gdGhhdCBhbHdheXMgcnVucyBhZnRlciB0YXNrLlxyXG4gKlxyXG4gKiAqKk5vdGU6KiogYHJ1blRhc2tgIHJ1bnMgdGhlIGV4ZWN1dG9yIGluIHRoZSBuZXh0IG1pY3JvdGFzay5cclxuICogQHJldHVybnNcclxuICovXHJcbmV4cG9ydCBjb25zdCBydW5UYXNrID0gYXN5bmMgPFQ+KFxyXG4gIHRhc2s6ICgpID0+IFByb21pc2U8VD4sXHJcbiAgY2xlYW5VcD86ICgpID0+IHZvaWRcclxuKTogUHJvbWlzZTxUYXNrUmVzdWx0PFQ+PiA9PiB7XHJcbiAgdHJ5IHtcclxuICAgIGF3YWl0IFByb21pc2UucmVzb2x2ZSgpXHJcbiAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IHRhc2soKVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgc3RhdHVzOiAnb2snLFxyXG4gICAgICB2YWx1ZSxcclxuICAgIH1cclxuICB9IGNhdGNoIChlcnJvcjogYW55KSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBzdGF0dXM6IGVycm9yIGluc3RhbmNlb2YgVGFza0Fib3J0RXJyb3IgPyAnY2FuY2VsbGVkJyA6ICdyZWplY3RlZCcsXHJcbiAgICAgIGVycm9yLFxyXG4gICAgfVxyXG4gIH0gZmluYWxseSB7XHJcbiAgICBjbGVhblVwPy4oKVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEdpdmVuIGFuIGlucHV0IGBBYm9ydFNpZ25hbGAgYW5kIGEgcHJvbWlzZSByZXR1cm5zIGFub3RoZXIgcHJvbWlzZSB0aGF0IHJlc29sdmVzXHJcbiAqIGFzIHNvb24gdGhlIGlucHV0IHByb21pc2UgaXMgcHJvdmlkZWQgb3IgcmVqZWN0cyBhcyBzb29uIGFzXHJcbiAqIGBBYm9ydFNpZ25hbC5hYm9ydGAgaXMgYHRydWVgLlxyXG4gKiBAcGFyYW0gc2lnbmFsXHJcbiAqIEByZXR1cm5zXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgY3JlYXRlUGF1c2UgPSA8VD4oc2lnbmFsOiBBYm9ydFNpZ25hbCkgPT4ge1xyXG4gIHJldHVybiAocHJvbWlzZTogUHJvbWlzZTxUPik6IFByb21pc2U8VD4gPT4ge1xyXG4gICAgcmV0dXJuIGNhdGNoUmVqZWN0aW9uKFxyXG4gICAgICByYWNlV2l0aFNpZ25hbChzaWduYWwsIHByb21pc2UpLnRoZW4oKG91dHB1dCkgPT4ge1xyXG4gICAgICAgIHZhbGlkYXRlQWN0aXZlKHNpZ25hbClcclxuICAgICAgICByZXR1cm4gb3V0cHV0XHJcbiAgICAgIH0pXHJcbiAgICApXHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogR2l2ZW4gYW4gaW5wdXQgYEFib3J0U2lnbmFsYCBhbmQgYHRpbWVvdXRNc2AgcmV0dXJucyBhIHByb21pc2UgdGhhdCByZXNvbHZlc1xyXG4gKiBhZnRlciBgdGltZW91dE1zYCBvciByZWplY3RzIGFzIHNvb24gYXMgYEFib3J0U2lnbmFsLmFib3J0YCBpcyBgdHJ1ZWAuXHJcbiAqIEBwYXJhbSBzaWduYWxcclxuICogQHJldHVybnNcclxuICovXHJcbmV4cG9ydCBjb25zdCBjcmVhdGVEZWxheSA9IChzaWduYWw6IEFib3J0U2lnbmFsKSA9PiB7XHJcbiAgY29uc3QgcGF1c2UgPSBjcmVhdGVQYXVzZTx2b2lkPihzaWduYWwpXHJcbiAgcmV0dXJuICh0aW1lb3V0TXM6IG51bWJlcik6IFByb21pc2U8dm9pZD4gPT4ge1xyXG4gICAgcmV0dXJuIHBhdXNlKG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIHRpbWVvdXRNcykpKVxyXG4gIH1cclxufVxyXG4iLCAiaW1wb3J0IHR5cGUgeyBEaXNwYXRjaCwgQW55QWN0aW9uLCBNaWRkbGV3YXJlQVBJIH0gZnJvbSAncmVkdXgnXHJcbmltcG9ydCB0eXBlIHsgVGh1bmtEaXNwYXRjaCB9IGZyb20gJ3JlZHV4LXRodW5rJ1xyXG5pbXBvcnQgeyBjcmVhdGVBY3Rpb24sIGlzQWN0aW9uIH0gZnJvbSAnLi4vY3JlYXRlQWN0aW9uJ1xyXG5pbXBvcnQgeyBuYW5vaWQgfSBmcm9tICcuLi9uYW5vaWQnXHJcblxyXG5pbXBvcnQgdHlwZSB7XHJcbiAgTGlzdGVuZXJNaWRkbGV3YXJlLFxyXG4gIExpc3RlbmVyTWlkZGxld2FyZUluc3RhbmNlLFxyXG4gIEFkZExpc3RlbmVyT3ZlcmxvYWRzLFxyXG4gIEFueUxpc3RlbmVyUHJlZGljYXRlLFxyXG4gIENyZWF0ZUxpc3RlbmVyTWlkZGxld2FyZU9wdGlvbnMsXHJcbiAgVHlwZWRBZGRMaXN0ZW5lcixcclxuICBUeXBlZENyZWF0ZUxpc3RlbmVyRW50cnksXHJcbiAgRmFsbGJhY2tBZGRMaXN0ZW5lck9wdGlvbnMsXHJcbiAgTGlzdGVuZXJFbnRyeSxcclxuICBMaXN0ZW5lckVycm9ySGFuZGxlcixcclxuICBVbnN1YnNjcmliZUxpc3RlbmVyLFxyXG4gIFRha2VQYXR0ZXJuLFxyXG4gIExpc3RlbmVyRXJyb3JJbmZvLFxyXG4gIEZvcmtlZFRhc2tFeGVjdXRvcixcclxuICBGb3JrZWRUYXNrLFxyXG4gIFR5cGVkUmVtb3ZlTGlzdGVuZXIsXHJcbiAgVGFza1Jlc3VsdCxcclxuICBBYm9ydFNpZ25hbFdpdGhSZWFzb24sXHJcbiAgVW5zdWJzY3JpYmVMaXN0ZW5lck9wdGlvbnMsXHJcbiAgRm9ya09wdGlvbnMsXHJcbn0gZnJvbSAnLi90eXBlcydcclxuaW1wb3J0IHtcclxuICBhYm9ydENvbnRyb2xsZXJXaXRoUmVhc29uLFxyXG4gIGFkZEFib3J0U2lnbmFsTGlzdGVuZXIsXHJcbiAgYXNzZXJ0RnVuY3Rpb24sXHJcbiAgY2F0Y2hSZWplY3Rpb24sXHJcbn0gZnJvbSAnLi91dGlscydcclxuaW1wb3J0IHtcclxuICBsaXN0ZW5lckNhbmNlbGxlZCxcclxuICBsaXN0ZW5lckNvbXBsZXRlZCxcclxuICBUYXNrQWJvcnRFcnJvcixcclxuICB0YXNrQ2FuY2VsbGVkLFxyXG4gIHRhc2tDb21wbGV0ZWQsXHJcbn0gZnJvbSAnLi9leGNlcHRpb25zJ1xyXG5pbXBvcnQge1xyXG4gIHJ1blRhc2ssXHJcbiAgdmFsaWRhdGVBY3RpdmUsXHJcbiAgY3JlYXRlUGF1c2UsXHJcbiAgY3JlYXRlRGVsYXksXHJcbiAgcmFjZVdpdGhTaWduYWwsXHJcbn0gZnJvbSAnLi90YXNrJ1xyXG5leHBvcnQgeyBUYXNrQWJvcnRFcnJvciB9IGZyb20gJy4vZXhjZXB0aW9ucydcclxuZXhwb3J0IHR5cGUge1xyXG4gIExpc3RlbmVyRWZmZWN0LFxyXG4gIExpc3RlbmVyTWlkZGxld2FyZSxcclxuICBMaXN0ZW5lckVmZmVjdEFQSSxcclxuICBMaXN0ZW5lck1pZGRsZXdhcmVJbnN0YW5jZSxcclxuICBDcmVhdGVMaXN0ZW5lck1pZGRsZXdhcmVPcHRpb25zLFxyXG4gIExpc3RlbmVyRXJyb3JIYW5kbGVyLFxyXG4gIFR5cGVkU3RhcnRMaXN0ZW5pbmcsXHJcbiAgVHlwZWRBZGRMaXN0ZW5lcixcclxuICBUeXBlZFN0b3BMaXN0ZW5pbmcsXHJcbiAgVHlwZWRSZW1vdmVMaXN0ZW5lcixcclxuICBVbnN1YnNjcmliZUxpc3RlbmVyLFxyXG4gIFVuc3Vic2NyaWJlTGlzdGVuZXJPcHRpb25zLFxyXG4gIEZvcmtlZFRhc2tFeGVjdXRvcixcclxuICBGb3JrZWRUYXNrLFxyXG4gIEZvcmtlZFRhc2tBUEksXHJcbiAgQXN5bmNUYXNrRXhlY3V0b3IsXHJcbiAgU3luY1Rhc2tFeGVjdXRvcixcclxuICBUYXNrQ2FuY2VsbGVkLFxyXG4gIFRhc2tSZWplY3RlZCxcclxuICBUYXNrUmVzb2x2ZWQsXHJcbiAgVGFza1Jlc3VsdCxcclxufSBmcm9tICcuL3R5cGVzJ1xyXG5cclxuLy9PdmVybHktYWdncmVzc2l2ZSBieXRlLXNoYXZpbmdcclxuY29uc3QgeyBhc3NpZ24gfSA9IE9iamVjdFxyXG4vKipcclxuICogQGludGVybmFsXHJcbiAqL1xyXG5jb25zdCBJTlRFUk5BTF9OSUxfVE9LRU4gPSB7fSBhcyBjb25zdFxyXG5cclxuY29uc3QgYWxtID0gJ2xpc3RlbmVyTWlkZGxld2FyZScgYXMgY29uc3RcclxuXHJcbmNvbnN0IGNyZWF0ZUZvcmsgPSAoXHJcbiAgcGFyZW50QWJvcnRTaWduYWw6IEFib3J0U2lnbmFsV2l0aFJlYXNvbjx1bmtub3duPixcclxuICBwYXJlbnRCbG9ja2luZ1Byb21pc2VzOiBQcm9taXNlPGFueT5bXVxyXG4pID0+IHtcclxuICBjb25zdCBsaW5rQ29udHJvbGxlcnMgPSAoY29udHJvbGxlcjogQWJvcnRDb250cm9sbGVyKSA9PlxyXG4gICAgYWRkQWJvcnRTaWduYWxMaXN0ZW5lcihwYXJlbnRBYm9ydFNpZ25hbCwgKCkgPT5cclxuICAgICAgYWJvcnRDb250cm9sbGVyV2l0aFJlYXNvbihjb250cm9sbGVyLCBwYXJlbnRBYm9ydFNpZ25hbC5yZWFzb24pXHJcbiAgICApXHJcblxyXG4gIHJldHVybiA8VD4oXHJcbiAgICB0YXNrRXhlY3V0b3I6IEZvcmtlZFRhc2tFeGVjdXRvcjxUPixcclxuICAgIG9wdHM/OiBGb3JrT3B0aW9uc1xyXG4gICk6IEZvcmtlZFRhc2s8VD4gPT4ge1xyXG4gICAgYXNzZXJ0RnVuY3Rpb24odGFza0V4ZWN1dG9yLCAndGFza0V4ZWN1dG9yJylcclxuICAgIGNvbnN0IGNoaWxkQWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpXHJcblxyXG4gICAgbGlua0NvbnRyb2xsZXJzKGNoaWxkQWJvcnRDb250cm9sbGVyKVxyXG5cclxuICAgIGNvbnN0IHJlc3VsdCA9IHJ1blRhc2s8VD4oXHJcbiAgICAgIGFzeW5jICgpOiBQcm9taXNlPFQ+ID0+IHtcclxuICAgICAgICB2YWxpZGF0ZUFjdGl2ZShwYXJlbnRBYm9ydFNpZ25hbClcclxuICAgICAgICB2YWxpZGF0ZUFjdGl2ZShjaGlsZEFib3J0Q29udHJvbGxlci5zaWduYWwpXHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gKGF3YWl0IHRhc2tFeGVjdXRvcih7XHJcbiAgICAgICAgICBwYXVzZTogY3JlYXRlUGF1c2UoY2hpbGRBYm9ydENvbnRyb2xsZXIuc2lnbmFsKSxcclxuICAgICAgICAgIGRlbGF5OiBjcmVhdGVEZWxheShjaGlsZEFib3J0Q29udHJvbGxlci5zaWduYWwpLFxyXG4gICAgICAgICAgc2lnbmFsOiBjaGlsZEFib3J0Q29udHJvbGxlci5zaWduYWwsXHJcbiAgICAgICAgfSkpIGFzIFRcclxuICAgICAgICB2YWxpZGF0ZUFjdGl2ZShjaGlsZEFib3J0Q29udHJvbGxlci5zaWduYWwpXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdFxyXG4gICAgICB9LFxyXG4gICAgICAoKSA9PiBhYm9ydENvbnRyb2xsZXJXaXRoUmVhc29uKGNoaWxkQWJvcnRDb250cm9sbGVyLCB0YXNrQ29tcGxldGVkKVxyXG4gICAgKVxyXG5cclxuICAgIGlmIChvcHRzPy5hdXRvSm9pbikge1xyXG4gICAgICBwYXJlbnRCbG9ja2luZ1Byb21pc2VzLnB1c2gocmVzdWx0KVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIHJlc3VsdDogY3JlYXRlUGF1c2U8VGFza1Jlc3VsdDxUPj4ocGFyZW50QWJvcnRTaWduYWwpKHJlc3VsdCksXHJcbiAgICAgIGNhbmNlbCgpIHtcclxuICAgICAgICBhYm9ydENvbnRyb2xsZXJXaXRoUmVhc29uKGNoaWxkQWJvcnRDb250cm9sbGVyLCB0YXNrQ2FuY2VsbGVkKVxyXG4gICAgICB9LFxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgY3JlYXRlVGFrZVBhdHRlcm4gPSA8Uz4oXHJcbiAgc3RhcnRMaXN0ZW5pbmc6IEFkZExpc3RlbmVyT3ZlcmxvYWRzPFxyXG4gICAgVW5zdWJzY3JpYmVMaXN0ZW5lcixcclxuICAgIFMsXHJcbiAgICBEaXNwYXRjaDxBbnlBY3Rpb24+XHJcbiAgPixcclxuICBzaWduYWw6IEFib3J0U2lnbmFsXHJcbik6IFRha2VQYXR0ZXJuPFM+ID0+IHtcclxuICAvKipcclxuICAgKiBBIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYSBMaXN0ZW5lclByZWRpY2F0ZSBhbmQgYW4gb3B0aW9uYWwgdGltZW91dCxcclxuICAgKiBhbmQgcmVzb2x2ZXMgd2hlbiBlaXRoZXIgdGhlIHByZWRpY2F0ZSByZXR1cm5zIGB0cnVlYCBiYXNlZCBvbiBhbiBhY3Rpb25cclxuICAgKiBzdGF0ZSBjb21iaW5hdGlvbiBvciB3aGVuIHRoZSB0aW1lb3V0IGV4cGlyZXMuXHJcbiAgICogSWYgdGhlIHBhcmVudCBsaXN0ZW5lciBpcyBjYW5jZWxlZCB3aGlsZSB3YWl0aW5nLCB0aGlzIHdpbGwgdGhyb3cgYVxyXG4gICAqIFRhc2tBYm9ydEVycm9yLlxyXG4gICAqL1xyXG4gIGNvbnN0IHRha2UgPSBhc3luYyA8UCBleHRlbmRzIEFueUxpc3RlbmVyUHJlZGljYXRlPFM+PihcclxuICAgIHByZWRpY2F0ZTogUCxcclxuICAgIHRpbWVvdXQ6IG51bWJlciB8IHVuZGVmaW5lZFxyXG4gICkgPT4ge1xyXG4gICAgdmFsaWRhdGVBY3RpdmUoc2lnbmFsKVxyXG5cclxuICAgIC8vIFBsYWNlaG9sZGVyIHVuc3Vic2NyaWJlIGZ1bmN0aW9uIHVudGlsIHRoZSBsaXN0ZW5lciBpcyBhZGRlZFxyXG4gICAgbGV0IHVuc3Vic2NyaWJlOiBVbnN1YnNjcmliZUxpc3RlbmVyID0gKCkgPT4ge31cclxuXHJcbiAgICBjb25zdCB0dXBsZVByb21pc2UgPSBuZXcgUHJvbWlzZTxbQW55QWN0aW9uLCBTLCBTXT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAvLyBJbnNpZGUgdGhlIFByb21pc2UsIHdlIHN5bmNocm9ub3VzbHkgYWRkIHRoZSBsaXN0ZW5lci5cclxuICAgICAgbGV0IHN0b3BMaXN0ZW5pbmcgPSBzdGFydExpc3RlbmluZyh7XHJcbiAgICAgICAgcHJlZGljYXRlOiBwcmVkaWNhdGUgYXMgYW55LFxyXG4gICAgICAgIGVmZmVjdDogKGFjdGlvbiwgbGlzdGVuZXJBcGkpOiB2b2lkID0+IHtcclxuICAgICAgICAgIC8vIE9uZS1zaG90IGxpc3RlbmVyIHRoYXQgY2xlYW5zIHVwIGFzIHNvb24gYXMgdGhlIHByZWRpY2F0ZSBwYXNzZXNcclxuICAgICAgICAgIGxpc3RlbmVyQXBpLnVuc3Vic2NyaWJlKClcclxuICAgICAgICAgIC8vIFJlc29sdmUgdGhlIHByb21pc2Ugd2l0aCB0aGUgc2FtZSBhcmd1bWVudHMgdGhlIHByZWRpY2F0ZSBzYXdcclxuICAgICAgICAgIHJlc29sdmUoW1xyXG4gICAgICAgICAgICBhY3Rpb24sXHJcbiAgICAgICAgICAgIGxpc3RlbmVyQXBpLmdldFN0YXRlKCksXHJcbiAgICAgICAgICAgIGxpc3RlbmVyQXBpLmdldE9yaWdpbmFsU3RhdGUoKSxcclxuICAgICAgICAgIF0pXHJcbiAgICAgICAgfSxcclxuICAgICAgfSlcclxuICAgICAgdW5zdWJzY3JpYmUgPSAoKSA9PiB7XHJcbiAgICAgICAgc3RvcExpc3RlbmluZygpXHJcbiAgICAgICAgcmVqZWN0KClcclxuICAgICAgfVxyXG4gICAgfSlcclxuXHJcbiAgICBjb25zdCBwcm9taXNlczogKFByb21pc2U8bnVsbD4gfCBQcm9taXNlPFtBbnlBY3Rpb24sIFMsIFNdPilbXSA9IFtcclxuICAgICAgdHVwbGVQcm9taXNlLFxyXG4gICAgXVxyXG5cclxuICAgIGlmICh0aW1lb3V0ICE9IG51bGwpIHtcclxuICAgICAgcHJvbWlzZXMucHVzaChcclxuICAgICAgICBuZXcgUHJvbWlzZTxudWxsPigocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCB0aW1lb3V0LCBudWxsKSlcclxuICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IHJhY2VXaXRoU2lnbmFsKHNpZ25hbCwgUHJvbWlzZS5yYWNlKHByb21pc2VzKSlcclxuXHJcbiAgICAgIHZhbGlkYXRlQWN0aXZlKHNpZ25hbClcclxuICAgICAgcmV0dXJuIG91dHB1dFxyXG4gICAgfSBmaW5hbGx5IHtcclxuICAgICAgLy8gQWx3YXlzIGNsZWFuIHVwIHRoZSBsaXN0ZW5lclxyXG4gICAgICB1bnN1YnNjcmliZSgpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gKChwcmVkaWNhdGU6IEFueUxpc3RlbmVyUHJlZGljYXRlPFM+LCB0aW1lb3V0OiBudW1iZXIgfCB1bmRlZmluZWQpID0+XHJcbiAgICBjYXRjaFJlamVjdGlvbih0YWtlKHByZWRpY2F0ZSwgdGltZW91dCkpKSBhcyBUYWtlUGF0dGVybjxTPlxyXG59XHJcblxyXG5jb25zdCBnZXRMaXN0ZW5lckVudHJ5UHJvcHNGcm9tID0gKG9wdGlvbnM6IEZhbGxiYWNrQWRkTGlzdGVuZXJPcHRpb25zKSA9PiB7XHJcbiAgbGV0IHsgdHlwZSwgYWN0aW9uQ3JlYXRvciwgbWF0Y2hlciwgcHJlZGljYXRlLCBlZmZlY3QgfSA9IG9wdGlvbnNcclxuXHJcbiAgaWYgKHR5cGUpIHtcclxuICAgIHByZWRpY2F0ZSA9IGNyZWF0ZUFjdGlvbih0eXBlKS5tYXRjaFxyXG4gIH0gZWxzZSBpZiAoYWN0aW9uQ3JlYXRvcikge1xyXG4gICAgdHlwZSA9IGFjdGlvbkNyZWF0b3IhLnR5cGVcclxuICAgIHByZWRpY2F0ZSA9IGFjdGlvbkNyZWF0b3IubWF0Y2hcclxuICB9IGVsc2UgaWYgKG1hdGNoZXIpIHtcclxuICAgIHByZWRpY2F0ZSA9IG1hdGNoZXJcclxuICB9IGVsc2UgaWYgKHByZWRpY2F0ZSkge1xyXG4gICAgLy8gcGFzc1xyXG4gIH0gZWxzZSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICdDcmVhdGluZyBvciByZW1vdmluZyBhIGxpc3RlbmVyIHJlcXVpcmVzIG9uZSBvZiB0aGUga25vd24gZmllbGRzIGZvciBtYXRjaGluZyBhbiBhY3Rpb24nXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICBhc3NlcnRGdW5jdGlvbihlZmZlY3QsICdvcHRpb25zLmxpc3RlbmVyJylcclxuXHJcbiAgcmV0dXJuIHsgcHJlZGljYXRlLCB0eXBlLCBlZmZlY3QgfVxyXG59XHJcblxyXG4vKiogQWNjZXB0cyB0aGUgcG9zc2libGUgb3B0aW9ucyBmb3IgY3JlYXRpbmcgYSBsaXN0ZW5lciwgYW5kIHJldHVybnMgYSBmb3JtYXR0ZWQgbGlzdGVuZXIgZW50cnkgKi9cclxuZXhwb3J0IGNvbnN0IGNyZWF0ZUxpc3RlbmVyRW50cnk6IFR5cGVkQ3JlYXRlTGlzdGVuZXJFbnRyeTx1bmtub3duPiA9IChcclxuICBvcHRpb25zOiBGYWxsYmFja0FkZExpc3RlbmVyT3B0aW9uc1xyXG4pID0+IHtcclxuICBjb25zdCB7IHR5cGUsIHByZWRpY2F0ZSwgZWZmZWN0IH0gPSBnZXRMaXN0ZW5lckVudHJ5UHJvcHNGcm9tKG9wdGlvbnMpXHJcblxyXG4gIGNvbnN0IGlkID0gbmFub2lkKClcclxuICBjb25zdCBlbnRyeTogTGlzdGVuZXJFbnRyeTx1bmtub3duPiA9IHtcclxuICAgIGlkLFxyXG4gICAgZWZmZWN0LFxyXG4gICAgdHlwZSxcclxuICAgIHByZWRpY2F0ZSxcclxuICAgIHBlbmRpbmc6IG5ldyBTZXQ8QWJvcnRDb250cm9sbGVyPigpLFxyXG4gICAgdW5zdWJzY3JpYmU6ICgpID0+IHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1YnNjcmliZSBub3QgaW5pdGlhbGl6ZWQnKVxyXG4gICAgfSxcclxuICB9XHJcblxyXG4gIHJldHVybiBlbnRyeVxyXG59XHJcblxyXG5jb25zdCBjYW5jZWxBY3RpdmVMaXN0ZW5lcnMgPSAoXHJcbiAgZW50cnk6IExpc3RlbmVyRW50cnk8dW5rbm93biwgRGlzcGF0Y2g8QW55QWN0aW9uPj5cclxuKSA9PiB7XHJcbiAgZW50cnkucGVuZGluZy5mb3JFYWNoKChjb250cm9sbGVyKSA9PiB7XHJcbiAgICBhYm9ydENvbnRyb2xsZXJXaXRoUmVhc29uKGNvbnRyb2xsZXIsIGxpc3RlbmVyQ2FuY2VsbGVkKVxyXG4gIH0pXHJcbn1cclxuXHJcbmNvbnN0IGNyZWF0ZUNsZWFyTGlzdGVuZXJNaWRkbGV3YXJlID0gKFxyXG4gIGxpc3RlbmVyTWFwOiBNYXA8c3RyaW5nLCBMaXN0ZW5lckVudHJ5PlxyXG4pID0+IHtcclxuICByZXR1cm4gKCkgPT4ge1xyXG4gICAgbGlzdGVuZXJNYXAuZm9yRWFjaChjYW5jZWxBY3RpdmVMaXN0ZW5lcnMpXHJcblxyXG4gICAgbGlzdGVuZXJNYXAuY2xlYXIoKVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIFNhZmVseSByZXBvcnRzIGVycm9ycyB0byB0aGUgYGVycm9ySGFuZGxlcmAgcHJvdmlkZWQuXHJcbiAqIEVycm9ycyB0aGF0IG9jY3VyIGluc2lkZSBgZXJyb3JIYW5kbGVyYCBhcmUgbm90aWZpZWQgaW4gYSBuZXcgdGFzay5cclxuICogSW5zcGlyZWQgYnkgW3J4anMgcmVwb3J0VW5oYW5kbGVkRXJyb3JdKGh0dHBzOi8vZ2l0aHViLmNvbS9SZWFjdGl2ZVgvcnhqcy9ibG9iLzZmYWZjZjUzZGM5ZTU1NzQzOWIyNWRlYmFlYWRmZDIyNGIyNDVhNjYvc3JjL2ludGVybmFsL3V0aWwvcmVwb3J0VW5oYW5kbGVkRXJyb3IudHMpXHJcbiAqIEBwYXJhbSBlcnJvckhhbmRsZXJcclxuICogQHBhcmFtIGVycm9yVG9Ob3RpZnlcclxuICovXHJcbmNvbnN0IHNhZmVseU5vdGlmeUVycm9yID0gKFxyXG4gIGVycm9ySGFuZGxlcjogTGlzdGVuZXJFcnJvckhhbmRsZXIsXHJcbiAgZXJyb3JUb05vdGlmeTogdW5rbm93bixcclxuICBlcnJvckluZm86IExpc3RlbmVyRXJyb3JJbmZvXHJcbik6IHZvaWQgPT4ge1xyXG4gIHRyeSB7XHJcbiAgICBlcnJvckhhbmRsZXIoZXJyb3JUb05vdGlmeSwgZXJyb3JJbmZvKVxyXG4gIH0gY2F0Y2ggKGVycm9ySGFuZGxlckVycm9yKSB7XHJcbiAgICAvLyBXZSBjYW5ub3QgbGV0IGFuIGVycm9yIHJhaXNlZCBoZXJlIGJsb2NrIHRoZSBsaXN0ZW5lciBxdWV1ZS5cclxuICAgIC8vIFRoZSBlcnJvciByYWlzZWQgaGVyZSB3aWxsIGJlIHBpY2tlZCB1cCBieSBgd2luZG93Lm9uZXJyb3JgLCBgcHJvY2Vzcy5vbignZXJyb3InKWAgZXRjLi4uXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhyb3cgZXJyb3JIYW5kbGVyRXJyb3JcclxuICAgIH0sIDApXHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGFkZExpc3RlbmVyID0gY3JlYXRlQWN0aW9uKFxyXG4gIGAke2FsbX0vYWRkYFxyXG4pIGFzIFR5cGVkQWRkTGlzdGVuZXI8dW5rbm93bj5cclxuXHJcbi8qKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgY2xlYXJBbGxMaXN0ZW5lcnMgPSBjcmVhdGVBY3Rpb24oYCR7YWxtfS9yZW1vdmVBbGxgKVxyXG5cclxuLyoqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBjb25zdCByZW1vdmVMaXN0ZW5lciA9IGNyZWF0ZUFjdGlvbihcclxuICBgJHthbG19L3JlbW92ZWBcclxuKSBhcyBUeXBlZFJlbW92ZUxpc3RlbmVyPHVua25vd24+XHJcblxyXG5jb25zdCBkZWZhdWx0RXJyb3JIYW5kbGVyOiBMaXN0ZW5lckVycm9ySGFuZGxlciA9ICguLi5hcmdzOiB1bmtub3duW10pID0+IHtcclxuICBjb25zb2xlLmVycm9yKGAke2FsbX0vZXJyb3JgLCAuLi5hcmdzKVxyXG59XHJcblxyXG4vKipcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUxpc3RlbmVyTWlkZGxld2FyZTxcclxuICBTID0gdW5rbm93bixcclxuICBEIGV4dGVuZHMgRGlzcGF0Y2g8QW55QWN0aW9uPiA9IFRodW5rRGlzcGF0Y2g8UywgdW5rbm93biwgQW55QWN0aW9uPixcclxuICBFeHRyYUFyZ3VtZW50ID0gdW5rbm93blxyXG4+KG1pZGRsZXdhcmVPcHRpb25zOiBDcmVhdGVMaXN0ZW5lck1pZGRsZXdhcmVPcHRpb25zPEV4dHJhQXJndW1lbnQ+ID0ge30pIHtcclxuICBjb25zdCBsaXN0ZW5lck1hcCA9IG5ldyBNYXA8c3RyaW5nLCBMaXN0ZW5lckVudHJ5PigpXHJcbiAgY29uc3QgeyBleHRyYSwgb25FcnJvciA9IGRlZmF1bHRFcnJvckhhbmRsZXIgfSA9IG1pZGRsZXdhcmVPcHRpb25zXHJcblxyXG4gIGFzc2VydEZ1bmN0aW9uKG9uRXJyb3IsICdvbkVycm9yJylcclxuXHJcbiAgY29uc3QgaW5zZXJ0RW50cnkgPSAoZW50cnk6IExpc3RlbmVyRW50cnkpID0+IHtcclxuICAgIGVudHJ5LnVuc3Vic2NyaWJlID0gKCkgPT4gbGlzdGVuZXJNYXAuZGVsZXRlKGVudHJ5IS5pZClcclxuXHJcbiAgICBsaXN0ZW5lck1hcC5zZXQoZW50cnkuaWQsIGVudHJ5KVxyXG4gICAgcmV0dXJuIChjYW5jZWxPcHRpb25zPzogVW5zdWJzY3JpYmVMaXN0ZW5lck9wdGlvbnMpID0+IHtcclxuICAgICAgZW50cnkudW5zdWJzY3JpYmUoKVxyXG4gICAgICBpZiAoY2FuY2VsT3B0aW9ucz8uY2FuY2VsQWN0aXZlKSB7XHJcbiAgICAgICAgY2FuY2VsQWN0aXZlTGlzdGVuZXJzKGVudHJ5KVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb25zdCBmaW5kTGlzdGVuZXJFbnRyeSA9IChcclxuICAgIGNvbXBhcmF0b3I6IChlbnRyeTogTGlzdGVuZXJFbnRyeSkgPT4gYm9vbGVhblxyXG4gICk6IExpc3RlbmVyRW50cnkgfCB1bmRlZmluZWQgPT4ge1xyXG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBBcnJheS5mcm9tKGxpc3RlbmVyTWFwLnZhbHVlcygpKSkge1xyXG4gICAgICBpZiAoY29tcGFyYXRvcihlbnRyeSkpIHtcclxuICAgICAgICByZXR1cm4gZW50cnlcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB1bmRlZmluZWRcclxuICB9XHJcblxyXG4gIGNvbnN0IHN0YXJ0TGlzdGVuaW5nID0gKG9wdGlvbnM6IEZhbGxiYWNrQWRkTGlzdGVuZXJPcHRpb25zKSA9PiB7XHJcbiAgICBsZXQgZW50cnkgPSBmaW5kTGlzdGVuZXJFbnRyeShcclxuICAgICAgKGV4aXN0aW5nRW50cnkpID0+IGV4aXN0aW5nRW50cnkuZWZmZWN0ID09PSBvcHRpb25zLmVmZmVjdFxyXG4gICAgKVxyXG5cclxuICAgIGlmICghZW50cnkpIHtcclxuICAgICAgZW50cnkgPSBjcmVhdGVMaXN0ZW5lckVudHJ5KG9wdGlvbnMgYXMgYW55KVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBpbnNlcnRFbnRyeShlbnRyeSlcclxuICB9XHJcblxyXG4gIGNvbnN0IHN0b3BMaXN0ZW5pbmcgPSAoXHJcbiAgICBvcHRpb25zOiBGYWxsYmFja0FkZExpc3RlbmVyT3B0aW9ucyAmIFVuc3Vic2NyaWJlTGlzdGVuZXJPcHRpb25zXHJcbiAgKTogYm9vbGVhbiA9PiB7XHJcbiAgICBjb25zdCB7IHR5cGUsIGVmZmVjdCwgcHJlZGljYXRlIH0gPSBnZXRMaXN0ZW5lckVudHJ5UHJvcHNGcm9tKG9wdGlvbnMpXHJcblxyXG4gICAgY29uc3QgZW50cnkgPSBmaW5kTGlzdGVuZXJFbnRyeSgoZW50cnkpID0+IHtcclxuICAgICAgY29uc3QgbWF0Y2hQcmVkaWNhdGVPclR5cGUgPVxyXG4gICAgICAgIHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJ1xyXG4gICAgICAgICAgPyBlbnRyeS50eXBlID09PSB0eXBlXHJcbiAgICAgICAgICA6IGVudHJ5LnByZWRpY2F0ZSA9PT0gcHJlZGljYXRlXHJcblxyXG4gICAgICByZXR1cm4gbWF0Y2hQcmVkaWNhdGVPclR5cGUgJiYgZW50cnkuZWZmZWN0ID09PSBlZmZlY3RcclxuICAgIH0pXHJcblxyXG4gICAgaWYgKGVudHJ5KSB7XHJcbiAgICAgIGVudHJ5LnVuc3Vic2NyaWJlKClcclxuICAgICAgaWYgKG9wdGlvbnMuY2FuY2VsQWN0aXZlKSB7XHJcbiAgICAgICAgY2FuY2VsQWN0aXZlTGlzdGVuZXJzKGVudHJ5KVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuICEhZW50cnlcclxuICB9XHJcblxyXG4gIGNvbnN0IG5vdGlmeUxpc3RlbmVyID0gYXN5bmMgKFxyXG4gICAgZW50cnk6IExpc3RlbmVyRW50cnk8dW5rbm93biwgRGlzcGF0Y2g8QW55QWN0aW9uPj4sXHJcbiAgICBhY3Rpb246IEFueUFjdGlvbixcclxuICAgIGFwaTogTWlkZGxld2FyZUFQSSxcclxuICAgIGdldE9yaWdpbmFsU3RhdGU6ICgpID0+IFNcclxuICApID0+IHtcclxuICAgIGNvbnN0IGludGVybmFsVGFza0NvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKClcclxuICAgIGNvbnN0IHRha2UgPSBjcmVhdGVUYWtlUGF0dGVybihcclxuICAgICAgc3RhcnRMaXN0ZW5pbmcsXHJcbiAgICAgIGludGVybmFsVGFza0NvbnRyb2xsZXIuc2lnbmFsXHJcbiAgICApXHJcbiAgICBjb25zdCBhdXRvSm9pblByb21pc2VzOiBQcm9taXNlPGFueT5bXSA9IFtdXHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgZW50cnkucGVuZGluZy5hZGQoaW50ZXJuYWxUYXNrQ29udHJvbGxlcilcclxuICAgICAgYXdhaXQgUHJvbWlzZS5yZXNvbHZlKFxyXG4gICAgICAgIGVudHJ5LmVmZmVjdChcclxuICAgICAgICAgIGFjdGlvbixcclxuICAgICAgICAgIC8vIFVzZSBhc3NpZ24oKSByYXRoZXIgdGhhbiAuLi4gdG8gYXZvaWQgZXh0cmEgaGVscGVyIGZ1bmN0aW9ucyBhZGRlZCB0byBidW5kbGVcclxuICAgICAgICAgIGFzc2lnbih7fSwgYXBpLCB7XHJcbiAgICAgICAgICAgIGdldE9yaWdpbmFsU3RhdGUsXHJcbiAgICAgICAgICAgIGNvbmRpdGlvbjogKFxyXG4gICAgICAgICAgICAgIHByZWRpY2F0ZTogQW55TGlzdGVuZXJQcmVkaWNhdGU8YW55PixcclxuICAgICAgICAgICAgICB0aW1lb3V0PzogbnVtYmVyXHJcbiAgICAgICAgICAgICkgPT4gdGFrZShwcmVkaWNhdGUsIHRpbWVvdXQpLnRoZW4oQm9vbGVhbiksXHJcbiAgICAgICAgICAgIHRha2UsXHJcbiAgICAgICAgICAgIGRlbGF5OiBjcmVhdGVEZWxheShpbnRlcm5hbFRhc2tDb250cm9sbGVyLnNpZ25hbCksXHJcbiAgICAgICAgICAgIHBhdXNlOiBjcmVhdGVQYXVzZTxhbnk+KGludGVybmFsVGFza0NvbnRyb2xsZXIuc2lnbmFsKSxcclxuICAgICAgICAgICAgZXh0cmEsXHJcbiAgICAgICAgICAgIHNpZ25hbDogaW50ZXJuYWxUYXNrQ29udHJvbGxlci5zaWduYWwsXHJcbiAgICAgICAgICAgIGZvcms6IGNyZWF0ZUZvcmsoaW50ZXJuYWxUYXNrQ29udHJvbGxlci5zaWduYWwsIGF1dG9Kb2luUHJvbWlzZXMpLFxyXG4gICAgICAgICAgICB1bnN1YnNjcmliZTogZW50cnkudW5zdWJzY3JpYmUsXHJcbiAgICAgICAgICAgIHN1YnNjcmliZTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgIGxpc3RlbmVyTWFwLnNldChlbnRyeS5pZCwgZW50cnkpXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNhbmNlbEFjdGl2ZUxpc3RlbmVyczogKCkgPT4ge1xyXG4gICAgICAgICAgICAgIGVudHJ5LnBlbmRpbmcuZm9yRWFjaCgoY29udHJvbGxlciwgXywgc2V0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29udHJvbGxlciAhPT0gaW50ZXJuYWxUYXNrQ29udHJvbGxlcikge1xyXG4gICAgICAgICAgICAgICAgICBhYm9ydENvbnRyb2xsZXJXaXRoUmVhc29uKGNvbnRyb2xsZXIsIGxpc3RlbmVyQ2FuY2VsbGVkKVxyXG4gICAgICAgICAgICAgICAgICBzZXQuZGVsZXRlKGNvbnRyb2xsZXIpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKVxyXG4gICAgICApXHJcbiAgICB9IGNhdGNoIChsaXN0ZW5lckVycm9yKSB7XHJcbiAgICAgIGlmICghKGxpc3RlbmVyRXJyb3IgaW5zdGFuY2VvZiBUYXNrQWJvcnRFcnJvcikpIHtcclxuICAgICAgICBzYWZlbHlOb3RpZnlFcnJvcihvbkVycm9yLCBsaXN0ZW5lckVycm9yLCB7XHJcbiAgICAgICAgICByYWlzZWRCeTogJ2VmZmVjdCcsXHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgfSBmaW5hbGx5IHtcclxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKGF1dG9Kb2luUHJvbWlzZXMpXHJcblxyXG4gICAgICBhYm9ydENvbnRyb2xsZXJXaXRoUmVhc29uKGludGVybmFsVGFza0NvbnRyb2xsZXIsIGxpc3RlbmVyQ29tcGxldGVkKSAvLyBOb3RpZnkgdGhhdCB0aGUgdGFzayBoYXMgY29tcGxldGVkXHJcbiAgICAgIGVudHJ5LnBlbmRpbmcuZGVsZXRlKGludGVybmFsVGFza0NvbnRyb2xsZXIpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb25zdCBjbGVhckxpc3RlbmVyTWlkZGxld2FyZSA9IGNyZWF0ZUNsZWFyTGlzdGVuZXJNaWRkbGV3YXJlKGxpc3RlbmVyTWFwKVxyXG5cclxuICBjb25zdCBtaWRkbGV3YXJlOiBMaXN0ZW5lck1pZGRsZXdhcmU8UywgRCwgRXh0cmFBcmd1bWVudD4gPVxyXG4gICAgKGFwaSkgPT4gKG5leHQpID0+IChhY3Rpb24pID0+IHtcclxuICAgICAgaWYgKCFpc0FjdGlvbihhY3Rpb24pKSB7XHJcbiAgICAgICAgLy8gd2Ugb25seSB3YW50IHRvIG5vdGlmeSBsaXN0ZW5lcnMgZm9yIGFjdGlvbiBvYmplY3RzXHJcbiAgICAgICAgcmV0dXJuIG5leHQoYWN0aW9uKVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoYWRkTGlzdGVuZXIubWF0Y2goYWN0aW9uKSkge1xyXG4gICAgICAgIHJldHVybiBzdGFydExpc3RlbmluZyhhY3Rpb24ucGF5bG9hZClcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGNsZWFyQWxsTGlzdGVuZXJzLm1hdGNoKGFjdGlvbikpIHtcclxuICAgICAgICBjbGVhckxpc3RlbmVyTWlkZGxld2FyZSgpXHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChyZW1vdmVMaXN0ZW5lci5tYXRjaChhY3Rpb24pKSB7XHJcbiAgICAgICAgcmV0dXJuIHN0b3BMaXN0ZW5pbmcoYWN0aW9uLnBheWxvYWQpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIE5lZWQgdG8gZ2V0IHRoaXMgc3RhdGUgX2JlZm9yZV8gdGhlIHJlZHVjZXIgcHJvY2Vzc2VzIHRoZSBhY3Rpb25cclxuICAgICAgbGV0IG9yaWdpbmFsU3RhdGU6IFMgfCB0eXBlb2YgSU5URVJOQUxfTklMX1RPS0VOID0gYXBpLmdldFN0YXRlKClcclxuXHJcbiAgICAgIC8vIGBnZXRPcmlnaW5hbFN0YXRlYCBjYW4gb25seSBiZSBjYWxsZWQgc3luY2hyb25vdXNseS5cclxuICAgICAgLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vcmVkdXhqcy9yZWR1eC10b29sa2l0L2Rpc2N1c3Npb25zLzE2NDgjZGlzY3Vzc2lvbmNvbW1lbnQtMTkzMjgyMFxyXG4gICAgICBjb25zdCBnZXRPcmlnaW5hbFN0YXRlID0gKCk6IFMgPT4ge1xyXG4gICAgICAgIGlmIChvcmlnaW5hbFN0YXRlID09PSBJTlRFUk5BTF9OSUxfVE9LRU4pIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgICAgYCR7YWxtfTogZ2V0T3JpZ2luYWxTdGF0ZSBjYW4gb25seSBiZSBjYWxsZWQgc3luY2hyb25vdXNseWBcclxuICAgICAgICAgIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBvcmlnaW5hbFN0YXRlIGFzIFNcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IHJlc3VsdDogdW5rbm93blxyXG5cclxuICAgICAgdHJ5IHtcclxuICAgICAgICAvLyBBY3R1YWxseSBmb3J3YXJkIHRoZSBhY3Rpb24gdG8gdGhlIHJlZHVjZXIgYmVmb3JlIHdlIGhhbmRsZSBsaXN0ZW5lcnNcclxuICAgICAgICByZXN1bHQgPSBuZXh0KGFjdGlvbilcclxuXHJcbiAgICAgICAgaWYgKGxpc3RlbmVyTWFwLnNpemUgPiAwKSB7XHJcbiAgICAgICAgICBsZXQgY3VycmVudFN0YXRlID0gYXBpLmdldFN0YXRlKClcclxuICAgICAgICAgIC8vIFdvcmsgYXJvdW5kIEVTQnVpbGQrVFMgdHJhbnNwaWxhdGlvbiBpc3N1ZVxyXG4gICAgICAgICAgY29uc3QgbGlzdGVuZXJFbnRyaWVzID0gQXJyYXkuZnJvbShsaXN0ZW5lck1hcC52YWx1ZXMoKSlcclxuICAgICAgICAgIGZvciAobGV0IGVudHJ5IG9mIGxpc3RlbmVyRW50cmllcykge1xyXG4gICAgICAgICAgICBsZXQgcnVuTGlzdGVuZXIgPSBmYWxzZVxyXG5cclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICBydW5MaXN0ZW5lciA9IGVudHJ5LnByZWRpY2F0ZShhY3Rpb24sIGN1cnJlbnRTdGF0ZSwgb3JpZ2luYWxTdGF0ZSlcclxuICAgICAgICAgICAgfSBjYXRjaCAocHJlZGljYXRlRXJyb3IpIHtcclxuICAgICAgICAgICAgICBydW5MaXN0ZW5lciA9IGZhbHNlXHJcblxyXG4gICAgICAgICAgICAgIHNhZmVseU5vdGlmeUVycm9yKG9uRXJyb3IsIHByZWRpY2F0ZUVycm9yLCB7XHJcbiAgICAgICAgICAgICAgICByYWlzZWRCeTogJ3ByZWRpY2F0ZScsXHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFydW5MaXN0ZW5lcikge1xyXG4gICAgICAgICAgICAgIGNvbnRpbnVlXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIG5vdGlmeUxpc3RlbmVyKGVudHJ5LCBhY3Rpb24sIGFwaSwgZ2V0T3JpZ2luYWxTdGF0ZSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgLy8gUmVtb3ZlIGBvcmlnaW5hbFN0YXRlYCBzdG9yZSBmcm9tIHRoaXMgc2NvcGUuXHJcbiAgICAgICAgb3JpZ2luYWxTdGF0ZSA9IElOVEVSTkFMX05JTF9UT0tFTlxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICB9XHJcblxyXG4gIHJldHVybiB7XHJcbiAgICBtaWRkbGV3YXJlLFxyXG4gICAgc3RhcnRMaXN0ZW5pbmcsXHJcbiAgICBzdG9wTGlzdGVuaW5nLFxyXG4gICAgY2xlYXJMaXN0ZW5lcnM6IGNsZWFyTGlzdGVuZXJNaWRkbGV3YXJlLFxyXG4gIH0gYXMgTGlzdGVuZXJNaWRkbGV3YXJlSW5zdGFuY2U8UywgRCwgRXh0cmFBcmd1bWVudD5cclxufVxyXG4iLCAiaW1wb3J0IHR5cGUgeyBTdG9yZUVuaGFuY2VyIH0gZnJvbSAncmVkdXgnXHJcblxyXG5leHBvcnQgY29uc3QgU0hPVUxEX0FVVE9CQVRDSCA9ICdSVEtfYXV0b0JhdGNoJ1xyXG5cclxuZXhwb3J0IGNvbnN0IHByZXBhcmVBdXRvQmF0Y2hlZCA9XHJcbiAgPFQ+KCkgPT5cclxuICAocGF5bG9hZDogVCk6IHsgcGF5bG9hZDogVDsgbWV0YTogdW5rbm93biB9ID0+ICh7XHJcbiAgICBwYXlsb2FkLFxyXG4gICAgbWV0YTogeyBbU0hPVUxEX0FVVE9CQVRDSF06IHRydWUgfSxcclxuICB9KVxyXG5cclxuLy8gVE9ETyBSZW1vdmUgdGhpcyBpbiAyLjBcclxuLy8gQ29waWVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9xdWV1ZS1taWNyb3Rhc2tcclxubGV0IHByb21pc2U6IFByb21pc2U8YW55PlxyXG5jb25zdCBxdWV1ZU1pY3JvdGFza1NoaW0gPVxyXG4gIHR5cGVvZiBxdWV1ZU1pY3JvdGFzayA9PT0gJ2Z1bmN0aW9uJ1xyXG4gICAgPyBxdWV1ZU1pY3JvdGFzay5iaW5kKFxyXG4gICAgICAgIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnXHJcbiAgICAgICAgICA/IHdpbmRvd1xyXG4gICAgICAgICAgOiB0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJ1xyXG4gICAgICAgICAgPyBnbG9iYWxcclxuICAgICAgICAgIDogZ2xvYmFsVGhpc1xyXG4gICAgICApXHJcbiAgICA6IC8vIHJldXNlIHJlc29sdmVkIHByb21pc2UsIGFuZCBhbGxvY2F0ZSBpdCBsYXppbHlcclxuICAgICAgKGNiOiAoKSA9PiB2b2lkKSA9PlxyXG4gICAgICAgIChwcm9taXNlIHx8IChwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKCkpKS50aGVuKGNiKS5jYXRjaCgoZXJyOiBhbnkpID0+XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhyb3cgZXJyXHJcbiAgICAgICAgICB9LCAwKVxyXG4gICAgICAgIClcclxuXHJcbmNvbnN0IGNyZWF0ZVF1ZXVlV2l0aFRpbWVyID0gKHRpbWVvdXQ6IG51bWJlcikgPT4ge1xyXG4gIHJldHVybiAobm90aWZ5OiAoKSA9PiB2b2lkKSA9PiB7XHJcbiAgICBzZXRUaW1lb3V0KG5vdGlmeSwgdGltZW91dClcclxuICB9XHJcbn1cclxuXHJcbi8vIHJlcXVlc3RBbmltYXRpb25GcmFtZSB3b24ndCBleGlzdCBpbiBTU1IgZW52aXJvbm1lbnRzLlxyXG4vLyBGYWxsIGJhY2sgdG8gYSB2YWd1ZSBhcHByb3hpbWF0aW9uIGp1c3QgdG8ga2VlcCBmcm9tIGVycm9yaW5nLlxyXG5jb25zdCByQUYgPVxyXG4gIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVcclxuICAgID8gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZVxyXG4gICAgOiBjcmVhdGVRdWV1ZVdpdGhUaW1lcigxMClcclxuXHJcbmV4cG9ydCB0eXBlIEF1dG9CYXRjaE9wdGlvbnMgPVxyXG4gIHwgeyB0eXBlOiAndGljaycgfVxyXG4gIHwgeyB0eXBlOiAndGltZXInOyB0aW1lb3V0OiBudW1iZXIgfVxyXG4gIHwgeyB0eXBlOiAncmFmJyB9XHJcbiAgfCB7IHR5cGU6ICdjYWxsYmFjayc7IHF1ZXVlTm90aWZpY2F0aW9uOiAobm90aWZ5OiAoKSA9PiB2b2lkKSA9PiB2b2lkIH1cclxuXHJcbi8qKlxyXG4gKiBBIFJlZHV4IHN0b3JlIGVuaGFuY2VyIHRoYXQgd2F0Y2hlcyBmb3IgXCJsb3ctcHJpb3JpdHlcIiBhY3Rpb25zLCBhbmQgZGVsYXlzXHJcbiAqIG5vdGlmeWluZyBzdWJzY3JpYmVycyB1bnRpbCBlaXRoZXIgdGhlIHF1ZXVlZCBjYWxsYmFjayBleGVjdXRlcyBvciB0aGVcclxuICogbmV4dCBcInN0YW5kYXJkLXByaW9yaXR5XCIgYWN0aW9uIGlzIGRpc3BhdGNoZWQuXHJcbiAqXHJcbiAqIFRoaXMgYWxsb3dzIGRpc3BhdGNoaW5nIG11bHRpcGxlIFwibG93LXByaW9yaXR5XCIgYWN0aW9ucyBpbiBhIHJvdyB3aXRoIG9ubHlcclxuICogYSBzaW5nbGUgc3Vic2NyaWJlciBub3RpZmljYXRpb24gdG8gdGhlIFVJIGFmdGVyIHRoZSBzZXF1ZW5jZSBvZiBhY3Rpb25zXHJcbiAqIGlzIGZpbmlzaGVkLCB0aHVzIGltcHJvdmluZyBVSSByZS1yZW5kZXIgcGVyZm9ybWFuY2UuXHJcbiAqXHJcbiAqIFdhdGNoZXMgZm9yIGFjdGlvbnMgd2l0aCB0aGUgYGFjdGlvbi5tZXRhW1NIT1VMRF9BVVRPQkFUQ0hdYCBhdHRyaWJ1dGUuXHJcbiAqIFRoaXMgY2FuIGJlIGFkZGVkIHRvIGBhY3Rpb24ubWV0YWAgbWFudWFsbHksIG9yIGJ5IHVzaW5nIHRoZVxyXG4gKiBgcHJlcGFyZUF1dG9CYXRjaGVkYCBoZWxwZXIuXHJcbiAqXHJcbiAqIEJ5IGRlZmF1bHQsIGl0IHdpbGwgcXVldWUgYSBub3RpZmljYXRpb24gZm9yIHRoZSBlbmQgb2YgdGhlIGV2ZW50IGxvb3AgdGljay5cclxuICogSG93ZXZlciwgeW91IGNhbiBwYXNzIHNldmVyYWwgb3RoZXIgb3B0aW9ucyB0byBjb25maWd1cmUgdGhlIGJlaGF2aW9yOlxyXG4gKiAtIGB7dHlwZTogJ3RpY2snfTogcXVldWVzIHVzaW5nIGBxdWV1ZU1pY3JvdGFza2AgKGRlZmF1bHQpXHJcbiAqIC0gYHt0eXBlOiAndGltZXIsIHRpbWVvdXQ6IG51bWJlcn1gOiBxdWV1ZXMgdXNpbmcgYHNldFRpbWVvdXRgXHJcbiAqIC0gYHt0eXBlOiAncmFmJ31gOiBxdWV1ZXMgdXNpbmcgYHJlcXVlc3RBbmltYXRpb25GcmFtZWBcclxuICogLSBge3R5cGU6ICdjYWxsYmFjaycsIHF1ZXVlTm90aWZpY2F0aW9uOiAobm90aWZ5OiAoKSA9PiB2b2lkKSA9PiB2b2lkfTogbGV0cyB5b3UgcHJvdmlkZSB5b3VyIG93biBjYWxsYmFja1xyXG4gKlxyXG4gKlxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGF1dG9CYXRjaEVuaGFuY2VyID1cclxuICAob3B0aW9uczogQXV0b0JhdGNoT3B0aW9ucyA9IHsgdHlwZTogJ3JhZicgfSk6IFN0b3JlRW5oYW5jZXIgPT5cclxuICAobmV4dCkgPT5cclxuICAoLi4uYXJncykgPT4ge1xyXG4gICAgY29uc3Qgc3RvcmUgPSBuZXh0KC4uLmFyZ3MpXHJcblxyXG4gICAgbGV0IG5vdGlmeWluZyA9IHRydWVcclxuICAgIGxldCBzaG91bGROb3RpZnlBdEVuZE9mVGljayA9IGZhbHNlXHJcbiAgICBsZXQgbm90aWZpY2F0aW9uUXVldWVkID0gZmFsc2VcclxuXHJcbiAgICBjb25zdCBsaXN0ZW5lcnMgPSBuZXcgU2V0PCgpID0+IHZvaWQ+KClcclxuXHJcbiAgICBjb25zdCBxdWV1ZUNhbGxiYWNrID1cclxuICAgICAgb3B0aW9ucy50eXBlID09PSAndGljaydcclxuICAgICAgICA/IHF1ZXVlTWljcm90YXNrU2hpbVxyXG4gICAgICAgIDogb3B0aW9ucy50eXBlID09PSAncmFmJ1xyXG4gICAgICAgID8gckFGXHJcbiAgICAgICAgOiBvcHRpb25zLnR5cGUgPT09ICdjYWxsYmFjaydcclxuICAgICAgICA/IG9wdGlvbnMucXVldWVOb3RpZmljYXRpb25cclxuICAgICAgICA6IGNyZWF0ZVF1ZXVlV2l0aFRpbWVyKG9wdGlvbnMudGltZW91dClcclxuXHJcbiAgICBjb25zdCBub3RpZnlMaXN0ZW5lcnMgPSAoKSA9PiB7XHJcbiAgICAgIC8vIFdlJ3JlIHJ1bm5pbmcgYXQgdGhlIGVuZCBvZiB0aGUgZXZlbnQgbG9vcCB0aWNrLlxyXG4gICAgICAvLyBSdW4gdGhlIHJlYWwgbGlzdGVuZXIgY2FsbGJhY2tzIHRvIGFjdHVhbGx5IHVwZGF0ZSB0aGUgVUkuXHJcbiAgICAgIG5vdGlmaWNhdGlvblF1ZXVlZCA9IGZhbHNlXHJcbiAgICAgIGlmIChzaG91bGROb3RpZnlBdEVuZE9mVGljaykge1xyXG4gICAgICAgIHNob3VsZE5vdGlmeUF0RW5kT2ZUaWNrID0gZmFsc2VcclxuICAgICAgICBsaXN0ZW5lcnMuZm9yRWFjaCgobCkgPT4gbCgpKVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN0b3JlLCB7XHJcbiAgICAgIC8vIE92ZXJyaWRlIHRoZSBiYXNlIGBzdG9yZS5zdWJzY3JpYmVgIG1ldGhvZCB0byBrZWVwIG9yaWdpbmFsIGxpc3RlbmVyc1xyXG4gICAgICAvLyBmcm9tIHJ1bm5pbmcgaWYgd2UncmUgZGVsYXlpbmcgbm90aWZpY2F0aW9uc1xyXG4gICAgICBzdWJzY3JpYmUobGlzdGVuZXI6ICgpID0+IHZvaWQpIHtcclxuICAgICAgICAvLyBFYWNoIHdyYXBwZWQgbGlzdGVuZXIgd2lsbCBvbmx5IGNhbGwgdGhlIHJlYWwgbGlzdGVuZXIgaWZcclxuICAgICAgICAvLyB0aGUgYG5vdGlmeWluZ2AgZmxhZyBpcyBjdXJyZW50bHkgYWN0aXZlIHdoZW4gaXQncyBjYWxsZWQuXHJcbiAgICAgICAgLy8gVGhpcyBsZXRzIHRoZSBiYXNlIHN0b3JlIHdvcmsgYXMgbm9ybWFsLCB3aGlsZSB0aGUgYWN0dWFsIFVJXHJcbiAgICAgICAgLy8gdXBkYXRlIGJlY29tZXMgY29udHJvbGxlZCBieSB0aGlzIGVuaGFuY2VyLlxyXG4gICAgICAgIGNvbnN0IHdyYXBwZWRMaXN0ZW5lcjogdHlwZW9mIGxpc3RlbmVyID0gKCkgPT4gbm90aWZ5aW5nICYmIGxpc3RlbmVyKClcclxuICAgICAgICBjb25zdCB1bnN1YnNjcmliZSA9IHN0b3JlLnN1YnNjcmliZSh3cmFwcGVkTGlzdGVuZXIpXHJcbiAgICAgICAgbGlzdGVuZXJzLmFkZChsaXN0ZW5lcilcclxuICAgICAgICByZXR1cm4gKCkgPT4ge1xyXG4gICAgICAgICAgdW5zdWJzY3JpYmUoKVxyXG4gICAgICAgICAgbGlzdGVuZXJzLmRlbGV0ZShsaXN0ZW5lcilcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIC8vIE92ZXJyaWRlIHRoZSBiYXNlIGBzdG9yZS5kaXNwYXRjaGAgbWV0aG9kIHNvIHRoYXQgd2UgY2FuIGNoZWNrIGFjdGlvbnNcclxuICAgICAgLy8gZm9yIHRoZSBgc2hvdWxkQXV0b0JhdGNoYCBmbGFnIGFuZCBkZXRlcm1pbmUgaWYgYmF0Y2hpbmcgaXMgYWN0aXZlXHJcbiAgICAgIGRpc3BhdGNoKGFjdGlvbjogYW55KSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIC8vIElmIHRoZSBhY3Rpb24gZG9lcyBfbm90XyBoYXZlIHRoZSBgc2hvdWxkQXV0b0JhdGNoYCBmbGFnLFxyXG4gICAgICAgICAgLy8gd2UgcmVzdW1lL2NvbnRpbnVlIG5vcm1hbCBub3RpZnktYWZ0ZXItZWFjaC1kaXNwYXRjaCBiZWhhdmlvclxyXG4gICAgICAgICAgbm90aWZ5aW5nID0gIWFjdGlvbj8ubWV0YT8uW1NIT1VMRF9BVVRPQkFUQ0hdXHJcbiAgICAgICAgICAvLyBJZiBhIGBub3RpZnlMaXN0ZW5lcnNgIG1pY3JvdGFzayB3YXMgcXVldWVkLCB5b3UgY2FuJ3QgY2FuY2VsIGl0LlxyXG4gICAgICAgICAgLy8gSW5zdGVhZCwgd2Ugc2V0IGEgZmxhZyBzbyB0aGF0IGl0J3MgYSBuby1vcCB3aGVuIGl0IGRvZXMgcnVuXHJcbiAgICAgICAgICBzaG91bGROb3RpZnlBdEVuZE9mVGljayA9ICFub3RpZnlpbmdcclxuICAgICAgICAgIGlmIChzaG91bGROb3RpZnlBdEVuZE9mVGljaykge1xyXG4gICAgICAgICAgICAvLyBXZSd2ZSBzZWVuIGF0IGxlYXN0IDEgYWN0aW9uIHdpdGggYFNIT1VMRF9BVVRPQkFUQ0hgLiBUcnkgdG8gcXVldWVcclxuICAgICAgICAgICAgLy8gYSBtaWNyb3Rhc2sgdG8gbm90aWZ5IGxpc3RlbmVycyBhdCB0aGUgZW5kIG9mIHRoZSBldmVudCBsb29wIHRpY2suXHJcbiAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBvbmx5IGVucXVldWUgdGhpcyBfb25jZV8gcGVyIHRpY2suXHJcbiAgICAgICAgICAgIGlmICghbm90aWZpY2F0aW9uUXVldWVkKSB7XHJcbiAgICAgICAgICAgICAgbm90aWZpY2F0aW9uUXVldWVkID0gdHJ1ZVxyXG4gICAgICAgICAgICAgIHF1ZXVlQ2FsbGJhY2sobm90aWZ5TGlzdGVuZXJzKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyBHbyBhaGVhZCBhbmQgcHJvY2VzcyB0aGUgYWN0aW9uIGFzIHVzdWFsLCBpbmNsdWRpbmcgcmVkdWNlcnMuXHJcbiAgICAgICAgICAvLyBJZiBub3JtYWwgbm90aWZpY2F0aW9uIGJlaGF2aW9yIGlzIGVuYWJsZWQsIHRoZSBzdG9yZSB3aWxsIG5vdGlmeVxyXG4gICAgICAgICAgLy8gYWxsIG9mIGl0cyBvd24gbGlzdGVuZXJzLCBhbmQgdGhlIHdyYXBwZXIgY2FsbGJhY2tzIGFib3ZlIHdpbGxcclxuICAgICAgICAgIC8vIHNlZSBgbm90aWZ5aW5nYCBpcyB0cnVlIGFuZCBwYXNzIG9uIHRvIHRoZSByZWFsIGxpc3RlbmVyIGNhbGxiYWNrcy5cclxuICAgICAgICAgIC8vIElmIHdlJ3JlIFwiYmF0Y2hpbmdcIiBiZWhhdmlvciwgdGhlbiB0aGUgd3JhcHBlZCBjYWxsYmFja3Mgd2lsbFxyXG4gICAgICAgICAgLy8gYmFpbCBvdXQsIGNhdXNpbmcgdGhlIGJhc2Ugc3RvcmUgbm90aWZpY2F0aW9uIGJlaGF2aW9yIHRvIGJlIG5vLW9wcy5cclxuICAgICAgICAgIHJldHVybiBzdG9yZS5kaXNwYXRjaChhY3Rpb24pXHJcbiAgICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAgIC8vIEFzc3VtZSB3ZSdyZSBiYWNrIHRvIG5vcm1hbCBiZWhhdmlvciBhZnRlciBlYWNoIGFjdGlvblxyXG4gICAgICAgICAgbm90aWZ5aW5nID0gdHJ1ZVxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgIH0pXHJcbiAgfVxyXG4iLCAidmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xyXG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcclxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxyXG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xyXG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xyXG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcclxuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxyXG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcclxuICAgIH07XHJcbn0pKCk7XHJcbnZhciBfX2dlbmVyYXRvciA9ICh0aGlzICYmIHRoaXMuX19nZW5lcmF0b3IpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBib2R5KSB7XHJcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xyXG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcclxuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XHJcbiAgICAgICAgd2hpbGUgKF8pIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcclxuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XHJcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cclxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcclxuICAgIH1cclxufTtcclxudmFyIF9fc3ByZWFkQXJyYXkgPSAodGhpcyAmJiB0aGlzLl9fc3ByZWFkQXJyYXkpIHx8IGZ1bmN0aW9uICh0bywgZnJvbSkge1xyXG4gICAgZm9yICh2YXIgaSA9IDAsIGlsID0gZnJvbS5sZW5ndGgsIGogPSB0by5sZW5ndGg7IGkgPCBpbDsgaSsrLCBqKyspXHJcbiAgICAgICAgdG9bal0gPSBmcm9tW2ldO1xyXG4gICAgcmV0dXJuIHRvO1xyXG59O1xyXG52YXIgX19kZWZQcm9wID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xyXG52YXIgX19kZWZQcm9wcyA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzO1xyXG52YXIgX19nZXRPd25Qcm9wRGVzY3MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycztcclxudmFyIF9fZ2V0T3duUHJvcFN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xyXG52YXIgX19oYXNPd25Qcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcclxudmFyIF9fcHJvcElzRW51bSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XHJcbnZhciBfX2RlZk5vcm1hbFByb3AgPSBmdW5jdGlvbiAob2JqLCBrZXksIHZhbHVlKSB7IHJldHVybiBrZXkgaW4gb2JqID8gX19kZWZQcm9wKG9iaiwga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KSA6IG9ialtrZXldID0gdmFsdWU7IH07XHJcbnZhciBfX3NwcmVhZFZhbHVlcyA9IGZ1bmN0aW9uIChhLCBiKSB7XHJcbiAgICBmb3IgKHZhciBwcm9wIGluIGIgfHwgKGIgPSB7fSkpXHJcbiAgICAgICAgaWYgKF9faGFzT3duUHJvcC5jYWxsKGIsIHByb3ApKVxyXG4gICAgICAgICAgICBfX2RlZk5vcm1hbFByb3AoYSwgcHJvcCwgYltwcm9wXSk7XHJcbiAgICBpZiAoX19nZXRPd25Qcm9wU3ltYm9scylcclxuICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9jID0gX19nZXRPd25Qcm9wU3ltYm9scyhiKTsgX2kgPCBfYy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgdmFyIHByb3AgPSBfY1tfaV07XHJcbiAgICAgICAgICAgIGlmIChfX3Byb3BJc0VudW0uY2FsbChiLCBwcm9wKSlcclxuICAgICAgICAgICAgICAgIF9fZGVmTm9ybWFsUHJvcChhLCBwcm9wLCBiW3Byb3BdKTtcclxuICAgICAgICB9XHJcbiAgICByZXR1cm4gYTtcclxufTtcclxudmFyIF9fc3ByZWFkUHJvcHMgPSBmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gX19kZWZQcm9wcyhhLCBfX2dldE93blByb3BEZXNjcyhiKSk7IH07XHJcbnZhciBfX2FzeW5jID0gZnVuY3Rpb24gKF9fdGhpcywgX19hcmd1bWVudHMsIGdlbmVyYXRvcikge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICB2YXIgZnVsZmlsbGVkID0gZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHJlamVjdChlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdmFyIHJlamVjdGVkID0gZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBzdGVwKGdlbmVyYXRvci50aHJvdyh2YWx1ZSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICByZWplY3QoZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIHZhciBzdGVwID0gZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHguZG9uZSA/IHJlc29sdmUoeC52YWx1ZSkgOiBQcm9taXNlLnJlc29sdmUoeC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfTtcclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkoX190aGlzLCBfX2FyZ3VtZW50cykpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufTtcclxuLy8gc3JjL2luZGV4LnRzXHJcbmltcG9ydCB7IGVuYWJsZUVTNSB9IGZyb20gXCJpbW1lclwiO1xyXG5leHBvcnQgKiBmcm9tIFwicmVkdXhcIjtcclxuaW1wb3J0IHsgZGVmYXVsdCBhcyBkZWZhdWx0MiwgY3VycmVudCBhcyBjdXJyZW50MiwgZnJlZXplLCBvcmlnaW5hbCwgaXNEcmFmdCBhcyBpc0RyYWZ0NCB9IGZyb20gXCJpbW1lclwiO1xyXG5pbXBvcnQgeyBjcmVhdGVTZWxlY3RvciBhcyBjcmVhdGVTZWxlY3RvcjIgfSBmcm9tIFwicmVzZWxlY3RcIjtcclxuLy8gc3JjL2NyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yLnRzXHJcbmltcG9ydCB7IGN1cnJlbnQsIGlzRHJhZnQgfSBmcm9tIFwiaW1tZXJcIjtcclxuaW1wb3J0IHsgY3JlYXRlU2VsZWN0b3IgfSBmcm9tIFwicmVzZWxlY3RcIjtcclxudmFyIGNyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGFyZ3MgPSBbXTtcclxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgfVxyXG4gICAgdmFyIHNlbGVjdG9yID0gY3JlYXRlU2VsZWN0b3IuYXBwbHkodm9pZCAwLCBhcmdzKTtcclxuICAgIHZhciB3cmFwcGVkU2VsZWN0b3IgPSBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICB2YXIgcmVzdCA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIF9pID0gMTsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgICAgIHJlc3RbX2kgLSAxXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzZWxlY3Rvci5hcHBseSh2b2lkIDAsIF9fc3ByZWFkQXJyYXkoW2lzRHJhZnQodmFsdWUpID8gY3VycmVudCh2YWx1ZSkgOiB2YWx1ZV0sIHJlc3QpKTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gd3JhcHBlZFNlbGVjdG9yO1xyXG59O1xyXG4vLyBzcmMvY29uZmlndXJlU3RvcmUudHNcclxuaW1wb3J0IHsgY3JlYXRlU3RvcmUsIGNvbXBvc2UgYXMgY29tcG9zZTIsIGFwcGx5TWlkZGxld2FyZSwgY29tYmluZVJlZHVjZXJzIH0gZnJvbSBcInJlZHV4XCI7XHJcbi8vIHNyYy9kZXZ0b29sc0V4dGVuc2lvbi50c1xyXG5pbXBvcnQgeyBjb21wb3NlIH0gZnJvbSBcInJlZHV4XCI7XHJcbnZhciBjb21wb3NlV2l0aERldlRvb2xzID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB3aW5kb3cuX19SRURVWF9ERVZUT09MU19FWFRFTlNJT05fQ09NUE9TRV9fID8gd2luZG93Ll9fUkVEVVhfREVWVE9PTFNfRVhURU5TSU9OX0NPTVBPU0VfXyA6IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKVxyXG4gICAgICAgIHJldHVybiB2b2lkIDA7XHJcbiAgICBpZiAodHlwZW9mIGFyZ3VtZW50c1swXSA9PT0gXCJvYmplY3RcIilcclxuICAgICAgICByZXR1cm4gY29tcG9zZTtcclxuICAgIHJldHVybiBjb21wb3NlLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XHJcbn07XHJcbnZhciBkZXZUb29sc0VuaGFuY2VyID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB3aW5kb3cuX19SRURVWF9ERVZUT09MU19FWFRFTlNJT05fXyA/IHdpbmRvdy5fX1JFRFVYX0RFVlRPT0xTX0VYVEVOU0lPTl9fIDogZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChub29wMikge1xyXG4gICAgICAgIHJldHVybiBub29wMjtcclxuICAgIH07XHJcbn07XHJcbi8vIHNyYy9pc1BsYWluT2JqZWN0LnRzXHJcbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgfHwgdmFsdWUgPT09IG51bGwpXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgdmFyIHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKTtcclxuICAgIGlmIChwcm90byA9PT0gbnVsbClcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIHZhciBiYXNlUHJvdG8gPSBwcm90bztcclxuICAgIHdoaWxlIChPYmplY3QuZ2V0UHJvdG90eXBlT2YoYmFzZVByb3RvKSAhPT0gbnVsbCkge1xyXG4gICAgICAgIGJhc2VQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihiYXNlUHJvdG8pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHByb3RvID09PSBiYXNlUHJvdG87XHJcbn1cclxuLy8gc3JjL2dldERlZmF1bHRNaWRkbGV3YXJlLnRzXHJcbmltcG9ydCB0aHVua01pZGRsZXdhcmUgZnJvbSBcInJlZHV4LXRodW5rXCI7XHJcbi8vIHNyYy90c0hlbHBlcnMudHNcclxudmFyIGhhc01hdGNoRnVuY3Rpb24gPSBmdW5jdGlvbiAodikge1xyXG4gICAgcmV0dXJuIHYgJiYgdHlwZW9mIHYubWF0Y2ggPT09IFwiZnVuY3Rpb25cIjtcclxufTtcclxuLy8gc3JjL2NyZWF0ZUFjdGlvbi50c1xyXG5mdW5jdGlvbiBjcmVhdGVBY3Rpb24odHlwZSwgcHJlcGFyZUFjdGlvbikge1xyXG4gICAgZnVuY3Rpb24gYWN0aW9uQ3JlYXRvcigpIHtcclxuICAgICAgICB2YXIgYXJncyA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHByZXBhcmVBY3Rpb24pIHtcclxuICAgICAgICAgICAgdmFyIHByZXBhcmVkID0gcHJlcGFyZUFjdGlvbi5hcHBseSh2b2lkIDAsIGFyZ3MpO1xyXG4gICAgICAgICAgICBpZiAoIXByZXBhcmVkKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJwcmVwYXJlQWN0aW9uIGRpZCBub3QgcmV0dXJuIGFuIG9iamVjdFwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gX19zcHJlYWRWYWx1ZXMoX19zcHJlYWRWYWx1ZXMoe1xyXG4gICAgICAgICAgICAgICAgdHlwZTogdHlwZSxcclxuICAgICAgICAgICAgICAgIHBheWxvYWQ6IHByZXBhcmVkLnBheWxvYWRcclxuICAgICAgICAgICAgfSwgXCJtZXRhXCIgaW4gcHJlcGFyZWQgJiYgeyBtZXRhOiBwcmVwYXJlZC5tZXRhIH0pLCBcImVycm9yXCIgaW4gcHJlcGFyZWQgJiYgeyBlcnJvcjogcHJlcGFyZWQuZXJyb3IgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IHR5cGU6IHR5cGUsIHBheWxvYWQ6IGFyZ3NbMF0gfTtcclxuICAgIH1cclxuICAgIGFjdGlvbkNyZWF0b3IudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBcIlwiICsgdHlwZTsgfTtcclxuICAgIGFjdGlvbkNyZWF0b3IudHlwZSA9IHR5cGU7XHJcbiAgICBhY3Rpb25DcmVhdG9yLm1hdGNoID0gZnVuY3Rpb24gKGFjdGlvbikgeyByZXR1cm4gYWN0aW9uLnR5cGUgPT09IHR5cGU7IH07XHJcbiAgICByZXR1cm4gYWN0aW9uQ3JlYXRvcjtcclxufVxyXG5mdW5jdGlvbiBpc0FjdGlvbihhY3Rpb24pIHtcclxuICAgIHJldHVybiBpc1BsYWluT2JqZWN0KGFjdGlvbikgJiYgXCJ0eXBlXCIgaW4gYWN0aW9uO1xyXG59XHJcbmZ1bmN0aW9uIGlzQWN0aW9uQ3JlYXRvcihhY3Rpb24pIHtcclxuICAgIHJldHVybiB0eXBlb2YgYWN0aW9uID09PSBcImZ1bmN0aW9uXCIgJiYgXCJ0eXBlXCIgaW4gYWN0aW9uICYmIGhhc01hdGNoRnVuY3Rpb24oYWN0aW9uKTtcclxufVxyXG5mdW5jdGlvbiBpc0ZTQShhY3Rpb24pIHtcclxuICAgIHJldHVybiBpc0FjdGlvbihhY3Rpb24pICYmIHR5cGVvZiBhY3Rpb24udHlwZSA9PT0gXCJzdHJpbmdcIiAmJiBPYmplY3Qua2V5cyhhY3Rpb24pLmV2ZXJ5KGlzVmFsaWRLZXkpO1xyXG59XHJcbmZ1bmN0aW9uIGlzVmFsaWRLZXkoa2V5KSB7XHJcbiAgICByZXR1cm4gW1widHlwZVwiLCBcInBheWxvYWRcIiwgXCJlcnJvclwiLCBcIm1ldGFcIl0uaW5kZXhPZihrZXkpID4gLTE7XHJcbn1cclxuZnVuY3Rpb24gZ2V0VHlwZShhY3Rpb25DcmVhdG9yKSB7XHJcbiAgICByZXR1cm4gXCJcIiArIGFjdGlvbkNyZWF0b3I7XHJcbn1cclxuLy8gc3JjL2FjdGlvbkNyZWF0b3JJbnZhcmlhbnRNaWRkbGV3YXJlLnRzXHJcbmZ1bmN0aW9uIGdldE1lc3NhZ2UodHlwZSkge1xyXG4gICAgdmFyIHNwbGl0VHlwZSA9IHR5cGUgPyAoXCJcIiArIHR5cGUpLnNwbGl0KFwiL1wiKSA6IFtdO1xyXG4gICAgdmFyIGFjdGlvbk5hbWUgPSBzcGxpdFR5cGVbc3BsaXRUeXBlLmxlbmd0aCAtIDFdIHx8IFwiYWN0aW9uQ3JlYXRvclwiO1xyXG4gICAgcmV0dXJuIFwiRGV0ZWN0ZWQgYW4gYWN0aW9uIGNyZWF0b3Igd2l0aCB0eXBlIFxcXCJcIiArICh0eXBlIHx8IFwidW5rbm93blwiKSArIFwiXFxcIiBiZWluZyBkaXNwYXRjaGVkLiBcXG5NYWtlIHN1cmUgeW91J3JlIGNhbGxpbmcgdGhlIGFjdGlvbiBjcmVhdG9yIGJlZm9yZSBkaXNwYXRjaGluZywgaS5lLiBgZGlzcGF0Y2goXCIgKyBhY3Rpb25OYW1lICsgXCIoKSlgIGluc3RlYWQgb2YgYGRpc3BhdGNoKFwiICsgYWN0aW9uTmFtZSArIFwiKWAuIFRoaXMgaXMgbmVjZXNzYXJ5IGV2ZW4gaWYgdGhlIGFjdGlvbiBoYXMgbm8gcGF5bG9hZC5cIjtcclxufVxyXG5mdW5jdGlvbiBjcmVhdGVBY3Rpb25DcmVhdG9ySW52YXJpYW50TWlkZGxld2FyZShvcHRpb25zKSB7XHJcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxyXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIikge1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBmdW5jdGlvbiAobmV4dCkgeyByZXR1cm4gZnVuY3Rpb24gKGFjdGlvbikgeyByZXR1cm4gbmV4dChhY3Rpb24pOyB9OyB9OyB9O1xyXG4gICAgfVxyXG4gICAgdmFyIF9jID0gb3B0aW9ucy5pc0FjdGlvbkNyZWF0b3IsIGlzQWN0aW9uQ3JlYXRvcjIgPSBfYyA9PT0gdm9pZCAwID8gaXNBY3Rpb25DcmVhdG9yIDogX2M7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gZnVuY3Rpb24gKG5leHQpIHsgcmV0dXJuIGZ1bmN0aW9uIChhY3Rpb24pIHtcclxuICAgICAgICBpZiAoaXNBY3Rpb25DcmVhdG9yMihhY3Rpb24pKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihnZXRNZXNzYWdlKGFjdGlvbi50eXBlKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXh0KGFjdGlvbik7XHJcbiAgICB9OyB9OyB9O1xyXG59XHJcbi8vIHNyYy91dGlscy50c1xyXG5pbXBvcnQgY3JlYXRlTmV4dFN0YXRlLCB7IGlzRHJhZnRhYmxlIH0gZnJvbSBcImltbWVyXCI7XHJcbmZ1bmN0aW9uIGdldFRpbWVNZWFzdXJlVXRpbHMobWF4RGVsYXksIGZuTmFtZSkge1xyXG4gICAgdmFyIGVsYXBzZWQgPSAwO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBtZWFzdXJlVGltZTogZnVuY3Rpb24gKGZuKSB7XHJcbiAgICAgICAgICAgIHZhciBzdGFydGVkID0gRGF0ZS5ub3coKTtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmbigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZpbmFsbHkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcclxuICAgICAgICAgICAgICAgIGVsYXBzZWQgKz0gZmluaXNoZWQgLSBzdGFydGVkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICB3YXJuSWZFeGNlZWRlZDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAoZWxhcHNlZCA+IG1heERlbGF5KSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oZm5OYW1lICsgXCIgdG9vayBcIiArIGVsYXBzZWQgKyBcIm1zLCB3aGljaCBpcyBtb3JlIHRoYW4gdGhlIHdhcm5pbmcgdGhyZXNob2xkIG9mIFwiICsgbWF4RGVsYXkgKyBcIm1zLiBcXG5JZiB5b3VyIHN0YXRlIG9yIGFjdGlvbnMgYXJlIHZlcnkgbGFyZ2UsIHlvdSBtYXkgd2FudCB0byBkaXNhYmxlIHRoZSBtaWRkbGV3YXJlIGFzIGl0IG1pZ2h0IGNhdXNlIHRvbyBtdWNoIG9mIGEgc2xvd2Rvd24gaW4gZGV2ZWxvcG1lbnQgbW9kZS4gU2VlIGh0dHBzOi8vcmVkdXgtdG9vbGtpdC5qcy5vcmcvYXBpL2dldERlZmF1bHRNaWRkbGV3YXJlIGZvciBpbnN0cnVjdGlvbnMuXFxuSXQgaXMgZGlzYWJsZWQgaW4gcHJvZHVjdGlvbiBidWlsZHMsIHNvIHlvdSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IHRoYXQuXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxyXG52YXIgTWlkZGxld2FyZUFycmF5ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xyXG4gICAgX19leHRlbmRzKE1pZGRsZXdhcmVBcnJheSwgX3N1cGVyKTtcclxuICAgIGZ1bmN0aW9uIE1pZGRsZXdhcmVBcnJheSgpIHtcclxuICAgICAgICB2YXIgYXJncyA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3MpIHx8IHRoaXM7XHJcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKF90aGlzLCBNaWRkbGV3YXJlQXJyYXkucHJvdG90eXBlKTtcclxuICAgICAgICByZXR1cm4gX3RoaXM7XHJcbiAgICB9XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTWlkZGxld2FyZUFycmF5LCBTeW1ib2wuc3BlY2llcywge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gTWlkZGxld2FyZUFycmF5O1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXHJcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXHJcbiAgICB9KTtcclxuICAgIE1pZGRsZXdhcmVBcnJheS5wcm90b3R5cGUuY29uY2F0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBhcnIgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgICAgICBhcnJbX2ldID0gYXJndW1lbnRzW19pXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUuY29uY2F0LmFwcGx5KHRoaXMsIGFycik7XHJcbiAgICB9O1xyXG4gICAgTWlkZGxld2FyZUFycmF5LnByb3RvdHlwZS5wcmVwZW5kID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBhcnIgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgICAgICBhcnJbX2ldID0gYXJndW1lbnRzW19pXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGFyci5sZW5ndGggPT09IDEgJiYgQXJyYXkuaXNBcnJheShhcnJbMF0pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgKE1pZGRsZXdhcmVBcnJheS5iaW5kLmFwcGx5KE1pZGRsZXdhcmVBcnJheSwgX19zcHJlYWRBcnJheShbdm9pZCAwXSwgYXJyWzBdLmNvbmNhdCh0aGlzKSkpKSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV3IChNaWRkbGV3YXJlQXJyYXkuYmluZC5hcHBseShNaWRkbGV3YXJlQXJyYXksIF9fc3ByZWFkQXJyYXkoW3ZvaWQgMF0sIGFyci5jb25jYXQodGhpcykpKSkoKTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gTWlkZGxld2FyZUFycmF5O1xyXG59KEFycmF5KSk7XHJcbnZhciBFbmhhbmNlckFycmF5ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xyXG4gICAgX19leHRlbmRzKEVuaGFuY2VyQXJyYXksIF9zdXBlcik7XHJcbiAgICBmdW5jdGlvbiBFbmhhbmNlckFycmF5KCkge1xyXG4gICAgICAgIHZhciBhcmdzID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuYXBwbHkodGhpcywgYXJncykgfHwgdGhpcztcclxuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoX3RoaXMsIEVuaGFuY2VyQXJyYXkucHJvdG90eXBlKTtcclxuICAgICAgICByZXR1cm4gX3RoaXM7XHJcbiAgICB9XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRW5oYW5jZXJBcnJheSwgU3ltYm9sLnNwZWNpZXMsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIEVuaGFuY2VyQXJyYXk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcclxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcclxuICAgIH0pO1xyXG4gICAgRW5oYW5jZXJBcnJheS5wcm90b3R5cGUuY29uY2F0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBhcnIgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgICAgICBhcnJbX2ldID0gYXJndW1lbnRzW19pXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUuY29uY2F0LmFwcGx5KHRoaXMsIGFycik7XHJcbiAgICB9O1xyXG4gICAgRW5oYW5jZXJBcnJheS5wcm90b3R5cGUucHJlcGVuZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgYXJyID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgYXJyW19pXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChhcnIubGVuZ3RoID09PSAxICYmIEFycmF5LmlzQXJyYXkoYXJyWzBdKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IChFbmhhbmNlckFycmF5LmJpbmQuYXBwbHkoRW5oYW5jZXJBcnJheSwgX19zcHJlYWRBcnJheShbdm9pZCAwXSwgYXJyWzBdLmNvbmNhdCh0aGlzKSkpKSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV3IChFbmhhbmNlckFycmF5LmJpbmQuYXBwbHkoRW5oYW5jZXJBcnJheSwgX19zcHJlYWRBcnJheShbdm9pZCAwXSwgYXJyLmNvbmNhdCh0aGlzKSkpKSgpO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBFbmhhbmNlckFycmF5O1xyXG59KEFycmF5KSk7XHJcbmZ1bmN0aW9uIGZyZWV6ZURyYWZ0YWJsZSh2YWwpIHtcclxuICAgIHJldHVybiBpc0RyYWZ0YWJsZSh2YWwpID8gY3JlYXRlTmV4dFN0YXRlKHZhbCwgZnVuY3Rpb24gKCkge1xyXG4gICAgfSkgOiB2YWw7XHJcbn1cclxuLy8gc3JjL2ltbXV0YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZS50c1xyXG52YXIgaXNQcm9kdWN0aW9uID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiO1xyXG52YXIgcHJlZml4ID0gXCJJbnZhcmlhbnQgZmFpbGVkXCI7XHJcbmZ1bmN0aW9uIGludmFyaWFudChjb25kaXRpb24sIG1lc3NhZ2UpIHtcclxuICAgIGlmIChjb25kaXRpb24pIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoaXNQcm9kdWN0aW9uKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKHByZWZpeCk7XHJcbiAgICB9XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IocHJlZml4ICsgXCI6IFwiICsgKG1lc3NhZ2UgfHwgXCJcIikpO1xyXG59XHJcbmZ1bmN0aW9uIHN0cmluZ2lmeShvYmosIHNlcmlhbGl6ZXIsIGluZGVudCwgZGVjeWNsZXIpIHtcclxuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShvYmosIGdldFNlcmlhbGl6ZShzZXJpYWxpemVyLCBkZWN5Y2xlciksIGluZGVudCk7XHJcbn1cclxuZnVuY3Rpb24gZ2V0U2VyaWFsaXplKHNlcmlhbGl6ZXIsIGRlY3ljbGVyKSB7XHJcbiAgICB2YXIgc3RhY2sgPSBbXSwga2V5cyA9IFtdO1xyXG4gICAgaWYgKCFkZWN5Y2xlcilcclxuICAgICAgICBkZWN5Y2xlciA9IGZ1bmN0aW9uIChfLCB2YWx1ZSkge1xyXG4gICAgICAgICAgICBpZiAoc3RhY2tbMF0gPT09IHZhbHVlKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiW0NpcmN1bGFyIH5dXCI7XHJcbiAgICAgICAgICAgIHJldHVybiBcIltDaXJjdWxhciB+LlwiICsga2V5cy5zbGljZSgwLCBzdGFjay5pbmRleE9mKHZhbHVlKSkuam9pbihcIi5cIikgKyBcIl1cIjtcclxuICAgICAgICB9O1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdmFyIHRoaXNQb3MgPSBzdGFjay5pbmRleE9mKHRoaXMpO1xyXG4gICAgICAgICAgICB+dGhpc1BvcyA/IHN0YWNrLnNwbGljZSh0aGlzUG9zICsgMSkgOiBzdGFjay5wdXNoKHRoaXMpO1xyXG4gICAgICAgICAgICB+dGhpc1BvcyA/IGtleXMuc3BsaWNlKHRoaXNQb3MsIEluZmluaXR5LCBrZXkpIDoga2V5cy5wdXNoKGtleSk7XHJcbiAgICAgICAgICAgIGlmICh+c3RhY2suaW5kZXhPZih2YWx1ZSkpXHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGRlY3ljbGVyLmNhbGwodGhpcywga2V5LCB2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgc3RhY2sucHVzaCh2YWx1ZSk7XHJcbiAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZXIgPT0gbnVsbCA/IHZhbHVlIDogc2VyaWFsaXplci5jYWxsKHRoaXMsIGtleSwgdmFsdWUpO1xyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiBpc0ltbXV0YWJsZURlZmF1bHQodmFsdWUpIHtcclxuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgfHwgdmFsdWUgPT0gbnVsbCB8fCBPYmplY3QuaXNGcm96ZW4odmFsdWUpO1xyXG59XHJcbmZ1bmN0aW9uIHRyYWNrRm9yTXV0YXRpb25zKGlzSW1tdXRhYmxlLCBpZ25vcmVQYXRocywgb2JqKSB7XHJcbiAgICB2YXIgdHJhY2tlZFByb3BlcnRpZXMgPSB0cmFja1Byb3BlcnRpZXMoaXNJbW11dGFibGUsIGlnbm9yZVBhdGhzLCBvYmopO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBkZXRlY3RNdXRhdGlvbnM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGRldGVjdE11dGF0aW9ucyhpc0ltbXV0YWJsZSwgaWdub3JlUGF0aHMsIHRyYWNrZWRQcm9wZXJ0aWVzLCBvYmopO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gdHJhY2tQcm9wZXJ0aWVzKGlzSW1tdXRhYmxlLCBpZ25vcmVQYXRocywgb2JqLCBwYXRoLCBjaGVja2VkT2JqZWN0cykge1xyXG4gICAgaWYgKGlnbm9yZVBhdGhzID09PSB2b2lkIDApIHsgaWdub3JlUGF0aHMgPSBbXTsgfVxyXG4gICAgaWYgKHBhdGggPT09IHZvaWQgMCkgeyBwYXRoID0gXCJcIjsgfVxyXG4gICAgaWYgKGNoZWNrZWRPYmplY3RzID09PSB2b2lkIDApIHsgY2hlY2tlZE9iamVjdHMgPSBuZXcgU2V0KCk7IH1cclxuICAgIHZhciB0cmFja2VkID0geyB2YWx1ZTogb2JqIH07XHJcbiAgICBpZiAoIWlzSW1tdXRhYmxlKG9iaikgJiYgIWNoZWNrZWRPYmplY3RzLmhhcyhvYmopKSB7XHJcbiAgICAgICAgY2hlY2tlZE9iamVjdHMuYWRkKG9iaik7XHJcbiAgICAgICAgdHJhY2tlZC5jaGlsZHJlbiA9IHt9O1xyXG4gICAgICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcclxuICAgICAgICAgICAgdmFyIGNoaWxkUGF0aCA9IHBhdGggPyBwYXRoICsgXCIuXCIgKyBrZXkgOiBrZXk7XHJcbiAgICAgICAgICAgIGlmIChpZ25vcmVQYXRocy5sZW5ndGggJiYgaWdub3JlUGF0aHMuaW5kZXhPZihjaGlsZFBhdGgpICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdHJhY2tlZC5jaGlsZHJlbltrZXldID0gdHJhY2tQcm9wZXJ0aWVzKGlzSW1tdXRhYmxlLCBpZ25vcmVQYXRocywgb2JqW2tleV0sIGNoaWxkUGF0aCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRyYWNrZWQ7XHJcbn1cclxuZnVuY3Rpb24gZGV0ZWN0TXV0YXRpb25zKGlzSW1tdXRhYmxlLCBpZ25vcmVkUGF0aHMsIHRyYWNrZWRQcm9wZXJ0eSwgb2JqLCBzYW1lUGFyZW50UmVmLCBwYXRoKSB7XHJcbiAgICBpZiAoaWdub3JlZFBhdGhzID09PSB2b2lkIDApIHsgaWdub3JlZFBhdGhzID0gW107IH1cclxuICAgIGlmIChzYW1lUGFyZW50UmVmID09PSB2b2lkIDApIHsgc2FtZVBhcmVudFJlZiA9IGZhbHNlOyB9XHJcbiAgICBpZiAocGF0aCA9PT0gdm9pZCAwKSB7IHBhdGggPSBcIlwiOyB9XHJcbiAgICB2YXIgcHJldk9iaiA9IHRyYWNrZWRQcm9wZXJ0eSA/IHRyYWNrZWRQcm9wZXJ0eS52YWx1ZSA6IHZvaWQgMDtcclxuICAgIHZhciBzYW1lUmVmID0gcHJldk9iaiA9PT0gb2JqO1xyXG4gICAgaWYgKHNhbWVQYXJlbnRSZWYgJiYgIXNhbWVSZWYgJiYgIU51bWJlci5pc05hTihvYmopKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgd2FzTXV0YXRlZDogdHJ1ZSwgcGF0aDogcGF0aCB9O1xyXG4gICAgfVxyXG4gICAgaWYgKGlzSW1tdXRhYmxlKHByZXZPYmopIHx8IGlzSW1tdXRhYmxlKG9iaikpIHtcclxuICAgICAgICByZXR1cm4geyB3YXNNdXRhdGVkOiBmYWxzZSB9O1xyXG4gICAgfVxyXG4gICAgdmFyIGtleXNUb0RldGVjdCA9IHt9O1xyXG4gICAgZm9yICh2YXIga2V5IGluIHRyYWNrZWRQcm9wZXJ0eS5jaGlsZHJlbikge1xyXG4gICAgICAgIGtleXNUb0RldGVjdFtrZXldID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcclxuICAgICAgICBrZXlzVG9EZXRlY3Rba2V5XSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICB2YXIgaGFzSWdub3JlZFBhdGhzID0gaWdub3JlZFBhdGhzLmxlbmd0aCA+IDA7XHJcbiAgICB2YXIgX2xvb3BfMSA9IGZ1bmN0aW9uIChrZXkpIHtcclxuICAgICAgICB2YXIgbmVzdGVkUGF0aCA9IHBhdGggPyBwYXRoICsgXCIuXCIgKyBrZXkgOiBrZXk7XHJcbiAgICAgICAgaWYgKGhhc0lnbm9yZWRQYXRocykge1xyXG4gICAgICAgICAgICB2YXIgaGFzTWF0Y2hlcyA9IGlnbm9yZWRQYXRocy5zb21lKGZ1bmN0aW9uIChpZ25vcmVkKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaWdub3JlZCBpbnN0YW5jZW9mIFJlZ0V4cCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpZ25vcmVkLnRlc3QobmVzdGVkUGF0aCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmVzdGVkUGF0aCA9PT0gaWdub3JlZDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmIChoYXNNYXRjaGVzKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJjb250aW51ZVwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciByZXN1bHQgPSBkZXRlY3RNdXRhdGlvbnMoaXNJbW11dGFibGUsIGlnbm9yZWRQYXRocywgdHJhY2tlZFByb3BlcnR5LmNoaWxkcmVuW2tleV0sIG9ialtrZXldLCBzYW1lUmVmLCBuZXN0ZWRQYXRoKTtcclxuICAgICAgICBpZiAocmVzdWx0Lndhc011dGF0ZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IHJlc3VsdCB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBmb3IgKHZhciBrZXkgaW4ga2V5c1RvRGV0ZWN0KSB7XHJcbiAgICAgICAgdmFyIHN0YXRlXzEgPSBfbG9vcF8xKGtleSk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBzdGF0ZV8xID09PSBcIm9iamVjdFwiKVxyXG4gICAgICAgICAgICByZXR1cm4gc3RhdGVfMS52YWx1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiB7IHdhc011dGF0ZWQ6IGZhbHNlIH07XHJcbn1cclxuZnVuY3Rpb24gY3JlYXRlSW1tdXRhYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlKG9wdGlvbnMpIHtcclxuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XHJcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiKSB7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZ1bmN0aW9uIChuZXh0KSB7IHJldHVybiBmdW5jdGlvbiAoYWN0aW9uKSB7IHJldHVybiBuZXh0KGFjdGlvbik7IH07IH07IH07XHJcbiAgICB9XHJcbiAgICB2YXIgX2MgPSBvcHRpb25zLmlzSW1tdXRhYmxlLCBpc0ltbXV0YWJsZSA9IF9jID09PSB2b2lkIDAgPyBpc0ltbXV0YWJsZURlZmF1bHQgOiBfYywgaWdub3JlZFBhdGhzID0gb3B0aW9ucy5pZ25vcmVkUGF0aHMsIF9kID0gb3B0aW9ucy53YXJuQWZ0ZXIsIHdhcm5BZnRlciA9IF9kID09PSB2b2lkIDAgPyAzMiA6IF9kLCBpZ25vcmUgPSBvcHRpb25zLmlnbm9yZTtcclxuICAgIGlnbm9yZWRQYXRocyA9IGlnbm9yZWRQYXRocyB8fCBpZ25vcmU7XHJcbiAgICB2YXIgdHJhY2sgPSB0cmFja0Zvck11dGF0aW9ucy5iaW5kKG51bGwsIGlzSW1tdXRhYmxlLCBpZ25vcmVkUGF0aHMpO1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChfYykge1xyXG4gICAgICAgIHZhciBnZXRTdGF0ZSA9IF9jLmdldFN0YXRlO1xyXG4gICAgICAgIHZhciBzdGF0ZSA9IGdldFN0YXRlKCk7XHJcbiAgICAgICAgdmFyIHRyYWNrZXIgPSB0cmFjayhzdGF0ZSk7XHJcbiAgICAgICAgdmFyIHJlc3VsdDtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG5leHQpIHsgcmV0dXJuIGZ1bmN0aW9uIChhY3Rpb24pIHtcclxuICAgICAgICAgICAgdmFyIG1lYXN1cmVVdGlscyA9IGdldFRpbWVNZWFzdXJlVXRpbHMod2FybkFmdGVyLCBcIkltbXV0YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZVwiKTtcclxuICAgICAgICAgICAgbWVhc3VyZVV0aWxzLm1lYXN1cmVUaW1lKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHN0YXRlID0gZ2V0U3RhdGUoKTtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRyYWNrZXIuZGV0ZWN0TXV0YXRpb25zKCk7XHJcbiAgICAgICAgICAgICAgICB0cmFja2VyID0gdHJhY2soc3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgaW52YXJpYW50KCFyZXN1bHQud2FzTXV0YXRlZCwgXCJBIHN0YXRlIG11dGF0aW9uIHdhcyBkZXRlY3RlZCBiZXR3ZWVuIGRpc3BhdGNoZXMsIGluIHRoZSBwYXRoICdcIiArIChyZXN1bHQucGF0aCB8fCBcIlwiKSArIFwiJy4gIFRoaXMgbWF5IGNhdXNlIGluY29ycmVjdCBiZWhhdmlvci4gKGh0dHBzOi8vcmVkdXguanMub3JnL3N0eWxlLWd1aWRlL3N0eWxlLWd1aWRlI2RvLW5vdC1tdXRhdGUtc3RhdGUpXCIpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdmFyIGRpc3BhdGNoZWRBY3Rpb24gPSBuZXh0KGFjdGlvbik7XHJcbiAgICAgICAgICAgIG1lYXN1cmVVdGlscy5tZWFzdXJlVGltZShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBzdGF0ZSA9IGdldFN0YXRlKCk7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB0cmFja2VyLmRldGVjdE11dGF0aW9ucygpO1xyXG4gICAgICAgICAgICAgICAgdHJhY2tlciA9IHRyYWNrKHN0YXRlKTtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC53YXNNdXRhdGVkICYmIGludmFyaWFudCghcmVzdWx0Lndhc011dGF0ZWQsIFwiQSBzdGF0ZSBtdXRhdGlvbiB3YXMgZGV0ZWN0ZWQgaW5zaWRlIGEgZGlzcGF0Y2gsIGluIHRoZSBwYXRoOiBcIiArIChyZXN1bHQucGF0aCB8fCBcIlwiKSArIFwiLiBUYWtlIGEgbG9vayBhdCB0aGUgcmVkdWNlcihzKSBoYW5kbGluZyB0aGUgYWN0aW9uIFwiICsgc3RyaW5naWZ5KGFjdGlvbikgKyBcIi4gKGh0dHBzOi8vcmVkdXguanMub3JnL3N0eWxlLWd1aWRlL3N0eWxlLWd1aWRlI2RvLW5vdC1tdXRhdGUtc3RhdGUpXCIpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgbWVhc3VyZVV0aWxzLndhcm5JZkV4Y2VlZGVkKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBkaXNwYXRjaGVkQWN0aW9uO1xyXG4gICAgICAgIH07IH07XHJcbiAgICB9O1xyXG59XHJcbi8vIHNyYy9zZXJpYWxpemFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmUudHNcclxuZnVuY3Rpb24gaXNQbGFpbih2YWwpIHtcclxuICAgIHZhciB0eXBlID0gdHlwZW9mIHZhbDtcclxuICAgIHJldHVybiB2YWwgPT0gbnVsbCB8fCB0eXBlID09PSBcInN0cmluZ1wiIHx8IHR5cGUgPT09IFwiYm9vbGVhblwiIHx8IHR5cGUgPT09IFwibnVtYmVyXCIgfHwgQXJyYXkuaXNBcnJheSh2YWwpIHx8IGlzUGxhaW5PYmplY3QodmFsKTtcclxufVxyXG5mdW5jdGlvbiBmaW5kTm9uU2VyaWFsaXphYmxlVmFsdWUodmFsdWUsIHBhdGgsIGlzU2VyaWFsaXphYmxlLCBnZXRFbnRyaWVzLCBpZ25vcmVkUGF0aHMsIGNhY2hlKSB7XHJcbiAgICBpZiAocGF0aCA9PT0gdm9pZCAwKSB7IHBhdGggPSBcIlwiOyB9XHJcbiAgICBpZiAoaXNTZXJpYWxpemFibGUgPT09IHZvaWQgMCkgeyBpc1NlcmlhbGl6YWJsZSA9IGlzUGxhaW47IH1cclxuICAgIGlmIChpZ25vcmVkUGF0aHMgPT09IHZvaWQgMCkgeyBpZ25vcmVkUGF0aHMgPSBbXTsgfVxyXG4gICAgdmFyIGZvdW5kTmVzdGVkU2VyaWFsaXphYmxlO1xyXG4gICAgaWYgKCFpc1NlcmlhbGl6YWJsZSh2YWx1ZSkpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBrZXlQYXRoOiBwYXRoIHx8IFwiPHJvb3Q+XCIsXHJcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IHZhbHVlID09PSBudWxsKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKGNhY2hlID09IG51bGwgPyB2b2lkIDAgOiBjYWNoZS5oYXModmFsdWUpKVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIHZhciBlbnRyaWVzID0gZ2V0RW50cmllcyAhPSBudWxsID8gZ2V0RW50cmllcyh2YWx1ZSkgOiBPYmplY3QuZW50cmllcyh2YWx1ZSk7XHJcbiAgICB2YXIgaGFzSWdub3JlZFBhdGhzID0gaWdub3JlZFBhdGhzLmxlbmd0aCA+IDA7XHJcbiAgICB2YXIgX2xvb3BfMiA9IGZ1bmN0aW9uIChrZXksIG5lc3RlZFZhbHVlKSB7XHJcbiAgICAgICAgdmFyIG5lc3RlZFBhdGggPSBwYXRoID8gcGF0aCArIFwiLlwiICsga2V5IDoga2V5O1xyXG4gICAgICAgIGlmIChoYXNJZ25vcmVkUGF0aHMpIHtcclxuICAgICAgICAgICAgdmFyIGhhc01hdGNoZXMgPSBpZ25vcmVkUGF0aHMuc29tZShmdW5jdGlvbiAoaWdub3JlZCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlnbm9yZWQgaW5zdGFuY2VvZiBSZWdFeHApIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWdub3JlZC50ZXN0KG5lc3RlZFBhdGgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5lc3RlZFBhdGggPT09IGlnbm9yZWQ7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBpZiAoaGFzTWF0Y2hlcykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiY29udGludWVcIjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWlzU2VyaWFsaXphYmxlKG5lc3RlZFZhbHVlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZToge1xyXG4gICAgICAgICAgICAgICAgICAgIGtleVBhdGg6IG5lc3RlZFBhdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG5lc3RlZFZhbHVlXHJcbiAgICAgICAgICAgICAgICB9IH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlb2YgbmVzdGVkVmFsdWUgPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICAgICAgZm91bmROZXN0ZWRTZXJpYWxpemFibGUgPSBmaW5kTm9uU2VyaWFsaXphYmxlVmFsdWUobmVzdGVkVmFsdWUsIG5lc3RlZFBhdGgsIGlzU2VyaWFsaXphYmxlLCBnZXRFbnRyaWVzLCBpZ25vcmVkUGF0aHMsIGNhY2hlKTtcclxuICAgICAgICAgICAgaWYgKGZvdW5kTmVzdGVkU2VyaWFsaXphYmxlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogZm91bmROZXN0ZWRTZXJpYWxpemFibGUgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBmb3IgKHZhciBfaSA9IDAsIGVudHJpZXNfMSA9IGVudHJpZXM7IF9pIDwgZW50cmllc18xLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgIHZhciBfYyA9IGVudHJpZXNfMVtfaV0sIGtleSA9IF9jWzBdLCBuZXN0ZWRWYWx1ZSA9IF9jWzFdO1xyXG4gICAgICAgIHZhciBzdGF0ZV8yID0gX2xvb3BfMihrZXksIG5lc3RlZFZhbHVlKTtcclxuICAgICAgICBpZiAodHlwZW9mIHN0YXRlXzIgPT09IFwib2JqZWN0XCIpXHJcbiAgICAgICAgICAgIHJldHVybiBzdGF0ZV8yLnZhbHVlO1xyXG4gICAgfVxyXG4gICAgaWYgKGNhY2hlICYmIGlzTmVzdGVkRnJvemVuKHZhbHVlKSlcclxuICAgICAgICBjYWNoZS5hZGQodmFsdWUpO1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59XHJcbmZ1bmN0aW9uIGlzTmVzdGVkRnJvemVuKHZhbHVlKSB7XHJcbiAgICBpZiAoIU9iamVjdC5pc0Zyb3plbih2YWx1ZSkpXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgZm9yICh2YXIgX2kgPSAwLCBfYyA9IE9iamVjdC52YWx1ZXModmFsdWUpOyBfaSA8IF9jLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgIHZhciBuZXN0ZWRWYWx1ZSA9IF9jW19pXTtcclxuICAgICAgICBpZiAodHlwZW9mIG5lc3RlZFZhbHVlICE9PSBcIm9iamVjdFwiIHx8IG5lc3RlZFZhbHVlID09PSBudWxsKVxyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICBpZiAoIWlzTmVzdGVkRnJvemVuKG5lc3RlZFZhbHVlKSlcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn1cclxuZnVuY3Rpb24gY3JlYXRlU2VyaWFsaXphYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlKG9wdGlvbnMpIHtcclxuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XHJcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiKSB7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZ1bmN0aW9uIChuZXh0KSB7IHJldHVybiBmdW5jdGlvbiAoYWN0aW9uKSB7IHJldHVybiBuZXh0KGFjdGlvbik7IH07IH07IH07XHJcbiAgICB9XHJcbiAgICB2YXIgX2MgPSBvcHRpb25zLmlzU2VyaWFsaXphYmxlLCBpc1NlcmlhbGl6YWJsZSA9IF9jID09PSB2b2lkIDAgPyBpc1BsYWluIDogX2MsIGdldEVudHJpZXMgPSBvcHRpb25zLmdldEVudHJpZXMsIF9kID0gb3B0aW9ucy5pZ25vcmVkQWN0aW9ucywgaWdub3JlZEFjdGlvbnMgPSBfZCA9PT0gdm9pZCAwID8gW10gOiBfZCwgX2UgPSBvcHRpb25zLmlnbm9yZWRBY3Rpb25QYXRocywgaWdub3JlZEFjdGlvblBhdGhzID0gX2UgPT09IHZvaWQgMCA/IFtcIm1ldGEuYXJnXCIsIFwibWV0YS5iYXNlUXVlcnlNZXRhXCJdIDogX2UsIF9mID0gb3B0aW9ucy5pZ25vcmVkUGF0aHMsIGlnbm9yZWRQYXRocyA9IF9mID09PSB2b2lkIDAgPyBbXSA6IF9mLCBfZyA9IG9wdGlvbnMud2FybkFmdGVyLCB3YXJuQWZ0ZXIgPSBfZyA9PT0gdm9pZCAwID8gMzIgOiBfZywgX2ggPSBvcHRpb25zLmlnbm9yZVN0YXRlLCBpZ25vcmVTdGF0ZSA9IF9oID09PSB2b2lkIDAgPyBmYWxzZSA6IF9oLCBfaiA9IG9wdGlvbnMuaWdub3JlQWN0aW9ucywgaWdub3JlQWN0aW9ucyA9IF9qID09PSB2b2lkIDAgPyBmYWxzZSA6IF9qLCBfayA9IG9wdGlvbnMuZGlzYWJsZUNhY2hlLCBkaXNhYmxlQ2FjaGUgPSBfayA9PT0gdm9pZCAwID8gZmFsc2UgOiBfaztcclxuICAgIHZhciBjYWNoZSA9ICFkaXNhYmxlQ2FjaGUgJiYgV2Vha1NldCA/IG5ldyBXZWFrU2V0KCkgOiB2b2lkIDA7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHN0b3JlQVBJKSB7IHJldHVybiBmdW5jdGlvbiAobmV4dCkgeyByZXR1cm4gZnVuY3Rpb24gKGFjdGlvbikge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBuZXh0KGFjdGlvbik7XHJcbiAgICAgICAgdmFyIG1lYXN1cmVVdGlscyA9IGdldFRpbWVNZWFzdXJlVXRpbHMod2FybkFmdGVyLCBcIlNlcmlhbGl6YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZVwiKTtcclxuICAgICAgICBpZiAoIWlnbm9yZUFjdGlvbnMgJiYgIShpZ25vcmVkQWN0aW9ucy5sZW5ndGggJiYgaWdub3JlZEFjdGlvbnMuaW5kZXhPZihhY3Rpb24udHlwZSkgIT09IC0xKSkge1xyXG4gICAgICAgICAgICBtZWFzdXJlVXRpbHMubWVhc3VyZVRpbWUoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGZvdW5kQWN0aW9uTm9uU2VyaWFsaXphYmxlVmFsdWUgPSBmaW5kTm9uU2VyaWFsaXphYmxlVmFsdWUoYWN0aW9uLCBcIlwiLCBpc1NlcmlhbGl6YWJsZSwgZ2V0RW50cmllcywgaWdub3JlZEFjdGlvblBhdGhzLCBjYWNoZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZm91bmRBY3Rpb25Ob25TZXJpYWxpemFibGVWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBrZXlQYXRoID0gZm91bmRBY3Rpb25Ob25TZXJpYWxpemFibGVWYWx1ZS5rZXlQYXRoLCB2YWx1ZSA9IGZvdW5kQWN0aW9uTm9uU2VyaWFsaXphYmxlVmFsdWUudmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkEgbm9uLXNlcmlhbGl6YWJsZSB2YWx1ZSB3YXMgZGV0ZWN0ZWQgaW4gYW4gYWN0aW9uLCBpbiB0aGUgcGF0aDogYFwiICsga2V5UGF0aCArIFwiYC4gVmFsdWU6XCIsIHZhbHVlLCBcIlxcblRha2UgYSBsb29rIGF0IHRoZSBsb2dpYyB0aGF0IGRpc3BhdGNoZWQgdGhpcyBhY3Rpb246IFwiLCBhY3Rpb24sIFwiXFxuKFNlZSBodHRwczovL3JlZHV4LmpzLm9yZy9mYXEvYWN0aW9ucyN3aHktc2hvdWxkLXR5cGUtYmUtYS1zdHJpbmctb3ItYXQtbGVhc3Qtc2VyaWFsaXphYmxlLXdoeS1zaG91bGQtbXktYWN0aW9uLXR5cGVzLWJlLWNvbnN0YW50cylcIiwgXCJcXG4oVG8gYWxsb3cgbm9uLXNlcmlhbGl6YWJsZSB2YWx1ZXMgc2VlOiBodHRwczovL3JlZHV4LXRvb2xraXQuanMub3JnL3VzYWdlL3VzYWdlLWd1aWRlI3dvcmtpbmctd2l0aC1ub24tc2VyaWFsaXphYmxlLWRhdGEpXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFpZ25vcmVTdGF0ZSkge1xyXG4gICAgICAgICAgICBtZWFzdXJlVXRpbHMubWVhc3VyZVRpbWUoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHN0YXRlID0gc3RvcmVBUEkuZ2V0U3RhdGUoKTtcclxuICAgICAgICAgICAgICAgIHZhciBmb3VuZFN0YXRlTm9uU2VyaWFsaXphYmxlVmFsdWUgPSBmaW5kTm9uU2VyaWFsaXphYmxlVmFsdWUoc3RhdGUsIFwiXCIsIGlzU2VyaWFsaXphYmxlLCBnZXRFbnRyaWVzLCBpZ25vcmVkUGF0aHMsIGNhY2hlKTtcclxuICAgICAgICAgICAgICAgIGlmIChmb3VuZFN0YXRlTm9uU2VyaWFsaXphYmxlVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIga2V5UGF0aCA9IGZvdW5kU3RhdGVOb25TZXJpYWxpemFibGVWYWx1ZS5rZXlQYXRoLCB2YWx1ZSA9IGZvdW5kU3RhdGVOb25TZXJpYWxpemFibGVWYWx1ZS52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiQSBub24tc2VyaWFsaXphYmxlIHZhbHVlIHdhcyBkZXRlY3RlZCBpbiB0aGUgc3RhdGUsIGluIHRoZSBwYXRoOiBgXCIgKyBrZXlQYXRoICsgXCJgLiBWYWx1ZTpcIiwgdmFsdWUsIFwiXFxuVGFrZSBhIGxvb2sgYXQgdGhlIHJlZHVjZXIocykgaGFuZGxpbmcgdGhpcyBhY3Rpb24gdHlwZTogXCIgKyBhY3Rpb24udHlwZSArIFwiLlxcbihTZWUgaHR0cHM6Ly9yZWR1eC5qcy5vcmcvZmFxL29yZ2FuaXppbmctc3RhdGUjY2FuLWktcHV0LWZ1bmN0aW9ucy1wcm9taXNlcy1vci1vdGhlci1ub24tc2VyaWFsaXphYmxlLWl0ZW1zLWluLW15LXN0b3JlLXN0YXRlKVwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIG1lYXN1cmVVdGlscy53YXJuSWZFeGNlZWRlZCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfTsgfTsgfTtcclxufVxyXG4vLyBzcmMvZ2V0RGVmYXVsdE1pZGRsZXdhcmUudHNcclxuZnVuY3Rpb24gaXNCb29sZWFuKHgpIHtcclxuICAgIHJldHVybiB0eXBlb2YgeCA9PT0gXCJib29sZWFuXCI7XHJcbn1cclxuZnVuY3Rpb24gY3VycnlHZXREZWZhdWx0TWlkZGxld2FyZSgpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiBjdXJyaWVkR2V0RGVmYXVsdE1pZGRsZXdhcmUob3B0aW9ucykge1xyXG4gICAgICAgIHJldHVybiBnZXREZWZhdWx0TWlkZGxld2FyZShvcHRpb25zKTtcclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gZ2V0RGVmYXVsdE1pZGRsZXdhcmUob3B0aW9ucykge1xyXG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cclxuICAgIHZhciBfYyA9IG9wdGlvbnMudGh1bmssIHRodW5rID0gX2MgPT09IHZvaWQgMCA/IHRydWUgOiBfYywgX2QgPSBvcHRpb25zLmltbXV0YWJsZUNoZWNrLCBpbW11dGFibGVDaGVjayA9IF9kID09PSB2b2lkIDAgPyB0cnVlIDogX2QsIF9lID0gb3B0aW9ucy5zZXJpYWxpemFibGVDaGVjaywgc2VyaWFsaXphYmxlQ2hlY2sgPSBfZSA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9lLCBfZiA9IG9wdGlvbnMuYWN0aW9uQ3JlYXRvckNoZWNrLCBhY3Rpb25DcmVhdG9yQ2hlY2sgPSBfZiA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9mO1xyXG4gICAgdmFyIG1pZGRsZXdhcmVBcnJheSA9IG5ldyBNaWRkbGV3YXJlQXJyYXkoKTtcclxuICAgIGlmICh0aHVuaykge1xyXG4gICAgICAgIGlmIChpc0Jvb2xlYW4odGh1bmspKSB7XHJcbiAgICAgICAgICAgIG1pZGRsZXdhcmVBcnJheS5wdXNoKHRodW5rTWlkZGxld2FyZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBtaWRkbGV3YXJlQXJyYXkucHVzaCh0aHVua01pZGRsZXdhcmUud2l0aEV4dHJhQXJndW1lbnQodGh1bmsuZXh0cmFBcmd1bWVudCkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcclxuICAgICAgICBpZiAoaW1tdXRhYmxlQ2hlY2spIHtcclxuICAgICAgICAgICAgdmFyIGltbXV0YWJsZU9wdGlvbnMgPSB7fTtcclxuICAgICAgICAgICAgaWYgKCFpc0Jvb2xlYW4oaW1tdXRhYmxlQ2hlY2spKSB7XHJcbiAgICAgICAgICAgICAgICBpbW11dGFibGVPcHRpb25zID0gaW1tdXRhYmxlQ2hlY2s7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbWlkZGxld2FyZUFycmF5LnVuc2hpZnQoY3JlYXRlSW1tdXRhYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlKGltbXV0YWJsZU9wdGlvbnMpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNlcmlhbGl6YWJsZUNoZWNrKSB7XHJcbiAgICAgICAgICAgIHZhciBzZXJpYWxpemFibGVPcHRpb25zID0ge307XHJcbiAgICAgICAgICAgIGlmICghaXNCb29sZWFuKHNlcmlhbGl6YWJsZUNoZWNrKSkge1xyXG4gICAgICAgICAgICAgICAgc2VyaWFsaXphYmxlT3B0aW9ucyA9IHNlcmlhbGl6YWJsZUNoZWNrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG1pZGRsZXdhcmVBcnJheS5wdXNoKGNyZWF0ZVNlcmlhbGl6YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZShzZXJpYWxpemFibGVPcHRpb25zKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChhY3Rpb25DcmVhdG9yQ2hlY2spIHtcclxuICAgICAgICAgICAgdmFyIGFjdGlvbkNyZWF0b3JPcHRpb25zID0ge307XHJcbiAgICAgICAgICAgIGlmICghaXNCb29sZWFuKGFjdGlvbkNyZWF0b3JDaGVjaykpIHtcclxuICAgICAgICAgICAgICAgIGFjdGlvbkNyZWF0b3JPcHRpb25zID0gYWN0aW9uQ3JlYXRvckNoZWNrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG1pZGRsZXdhcmVBcnJheS51bnNoaWZ0KGNyZWF0ZUFjdGlvbkNyZWF0b3JJbnZhcmlhbnRNaWRkbGV3YXJlKGFjdGlvbkNyZWF0b3JPcHRpb25zKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG1pZGRsZXdhcmVBcnJheTtcclxufVxyXG4vLyBzcmMvY29uZmlndXJlU3RvcmUudHNcclxudmFyIElTX1BST0RVQ1RJT04gPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCI7XHJcbmZ1bmN0aW9uIGNvbmZpZ3VyZVN0b3JlKG9wdGlvbnMpIHtcclxuICAgIHZhciBjdXJyaWVkR2V0RGVmYXVsdE1pZGRsZXdhcmUgPSBjdXJyeUdldERlZmF1bHRNaWRkbGV3YXJlKCk7XHJcbiAgICB2YXIgX2MgPSBvcHRpb25zIHx8IHt9LCBfZCA9IF9jLnJlZHVjZXIsIHJlZHVjZXIgPSBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QsIF9lID0gX2MubWlkZGxld2FyZSwgbWlkZGxld2FyZSA9IF9lID09PSB2b2lkIDAgPyBjdXJyaWVkR2V0RGVmYXVsdE1pZGRsZXdhcmUoKSA6IF9lLCBfZiA9IF9jLmRldlRvb2xzLCBkZXZUb29scyA9IF9mID09PSB2b2lkIDAgPyB0cnVlIDogX2YsIF9nID0gX2MucHJlbG9hZGVkU3RhdGUsIHByZWxvYWRlZFN0YXRlID0gX2cgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9nLCBfaCA9IF9jLmVuaGFuY2VycywgZW5oYW5jZXJzID0gX2ggPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9oO1xyXG4gICAgdmFyIHJvb3RSZWR1Y2VyO1xyXG4gICAgaWYgKHR5cGVvZiByZWR1Y2VyID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICByb290UmVkdWNlciA9IHJlZHVjZXI7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHJlZHVjZXIpKSB7XHJcbiAgICAgICAgcm9vdFJlZHVjZXIgPSBjb21iaW5lUmVkdWNlcnMocmVkdWNlcik7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1wicmVkdWNlclwiIGlzIGEgcmVxdWlyZWQgYXJndW1lbnQsIGFuZCBtdXN0IGJlIGEgZnVuY3Rpb24gb3IgYW4gb2JqZWN0IG9mIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gY29tYmluZVJlZHVjZXJzJyk7XHJcbiAgICB9XHJcbiAgICB2YXIgZmluYWxNaWRkbGV3YXJlID0gbWlkZGxld2FyZTtcclxuICAgIGlmICh0eXBlb2YgZmluYWxNaWRkbGV3YXJlID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICBmaW5hbE1pZGRsZXdhcmUgPSBmaW5hbE1pZGRsZXdhcmUoY3VycmllZEdldERlZmF1bHRNaWRkbGV3YXJlKTtcclxuICAgICAgICBpZiAoIUlTX1BST0RVQ1RJT04gJiYgIUFycmF5LmlzQXJyYXkoZmluYWxNaWRkbGV3YXJlKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ3aGVuIHVzaW5nIGEgbWlkZGxld2FyZSBidWlsZGVyIGZ1bmN0aW9uLCBhbiBhcnJheSBvZiBtaWRkbGV3YXJlIG11c3QgYmUgcmV0dXJuZWRcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKCFJU19QUk9EVUNUSU9OICYmIGZpbmFsTWlkZGxld2FyZS5zb21lKGZ1bmN0aW9uIChpdGVtKSB7IHJldHVybiB0eXBlb2YgaXRlbSAhPT0gXCJmdW5jdGlvblwiOyB9KSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImVhY2ggbWlkZGxld2FyZSBwcm92aWRlZCB0byBjb25maWd1cmVTdG9yZSBtdXN0IGJlIGEgZnVuY3Rpb25cIik7XHJcbiAgICB9XHJcbiAgICB2YXIgbWlkZGxld2FyZUVuaGFuY2VyID0gYXBwbHlNaWRkbGV3YXJlLmFwcGx5KHZvaWQgMCwgZmluYWxNaWRkbGV3YXJlKTtcclxuICAgIHZhciBmaW5hbENvbXBvc2UgPSBjb21wb3NlMjtcclxuICAgIGlmIChkZXZUb29scykge1xyXG4gICAgICAgIGZpbmFsQ29tcG9zZSA9IGNvbXBvc2VXaXRoRGV2VG9vbHMoX19zcHJlYWRWYWx1ZXMoe1xyXG4gICAgICAgICAgICB0cmFjZTogIUlTX1BST0RVQ1RJT05cclxuICAgICAgICB9LCB0eXBlb2YgZGV2VG9vbHMgPT09IFwib2JqZWN0XCIgJiYgZGV2VG9vbHMpKTtcclxuICAgIH1cclxuICAgIHZhciBkZWZhdWx0RW5oYW5jZXJzID0gbmV3IEVuaGFuY2VyQXJyYXkobWlkZGxld2FyZUVuaGFuY2VyKTtcclxuICAgIHZhciBzdG9yZUVuaGFuY2VycyA9IGRlZmF1bHRFbmhhbmNlcnM7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShlbmhhbmNlcnMpKSB7XHJcbiAgICAgICAgc3RvcmVFbmhhbmNlcnMgPSBfX3NwcmVhZEFycmF5KFttaWRkbGV3YXJlRW5oYW5jZXJdLCBlbmhhbmNlcnMpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodHlwZW9mIGVuaGFuY2VycyA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgc3RvcmVFbmhhbmNlcnMgPSBlbmhhbmNlcnMoZGVmYXVsdEVuaGFuY2Vycyk7XHJcbiAgICB9XHJcbiAgICB2YXIgY29tcG9zZWRFbmhhbmNlciA9IGZpbmFsQ29tcG9zZS5hcHBseSh2b2lkIDAsIHN0b3JlRW5oYW5jZXJzKTtcclxuICAgIHJldHVybiBjcmVhdGVTdG9yZShyb290UmVkdWNlciwgcHJlbG9hZGVkU3RhdGUsIGNvbXBvc2VkRW5oYW5jZXIpO1xyXG59XHJcbi8vIHNyYy9jcmVhdGVSZWR1Y2VyLnRzXHJcbmltcG9ydCBjcmVhdGVOZXh0U3RhdGUyLCB7IGlzRHJhZnQgYXMgaXNEcmFmdDIsIGlzRHJhZnRhYmxlIGFzIGlzRHJhZnRhYmxlMiB9IGZyb20gXCJpbW1lclwiO1xyXG4vLyBzcmMvbWFwQnVpbGRlcnMudHNcclxuZnVuY3Rpb24gZXhlY3V0ZVJlZHVjZXJCdWlsZGVyQ2FsbGJhY2soYnVpbGRlckNhbGxiYWNrKSB7XHJcbiAgICB2YXIgYWN0aW9uc01hcCA9IHt9O1xyXG4gICAgdmFyIGFjdGlvbk1hdGNoZXJzID0gW107XHJcbiAgICB2YXIgZGVmYXVsdENhc2VSZWR1Y2VyO1xyXG4gICAgdmFyIGJ1aWxkZXIgPSB7XHJcbiAgICAgICAgYWRkQ2FzZTogZnVuY3Rpb24gKHR5cGVPckFjdGlvbkNyZWF0b3IsIHJlZHVjZXIpIHtcclxuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGFjdGlvbk1hdGNoZXJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJgYnVpbGRlci5hZGRDYXNlYCBzaG91bGQgb25seSBiZSBjYWxsZWQgYmVmb3JlIGNhbGxpbmcgYGJ1aWxkZXIuYWRkTWF0Y2hlcmBcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoZGVmYXVsdENhc2VSZWR1Y2VyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYGJ1aWxkZXIuYWRkQ2FzZWAgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJlZm9yZSBjYWxsaW5nIGBidWlsZGVyLmFkZERlZmF1bHRDYXNlYFwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgdHlwZSA9IHR5cGVvZiB0eXBlT3JBY3Rpb25DcmVhdG9yID09PSBcInN0cmluZ1wiID8gdHlwZU9yQWN0aW9uQ3JlYXRvciA6IHR5cGVPckFjdGlvbkNyZWF0b3IudHlwZTtcclxuICAgICAgICAgICAgaWYgKCF0eXBlKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJgYnVpbGRlci5hZGRDYXNlYCBjYW5ub3QgYmUgY2FsbGVkIHdpdGggYW4gZW1wdHkgYWN0aW9uIHR5cGVcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHR5cGUgaW4gYWN0aW9uc01hcCkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYGJ1aWxkZXIuYWRkQ2FzZWAgY2Fubm90IGJlIGNhbGxlZCB3aXRoIHR3byByZWR1Y2VycyBmb3IgdGhlIHNhbWUgYWN0aW9uIHR5cGVcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYWN0aW9uc01hcFt0eXBlXSA9IHJlZHVjZXI7XHJcbiAgICAgICAgICAgIHJldHVybiBidWlsZGVyO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgYWRkTWF0Y2hlcjogZnVuY3Rpb24gKG1hdGNoZXIsIHJlZHVjZXIpIHtcclxuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGRlZmF1bHRDYXNlUmVkdWNlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImBidWlsZGVyLmFkZE1hdGNoZXJgIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBiZWZvcmUgY2FsbGluZyBgYnVpbGRlci5hZGREZWZhdWx0Q2FzZWBcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYWN0aW9uTWF0Y2hlcnMucHVzaCh7IG1hdGNoZXI6IG1hdGNoZXIsIHJlZHVjZXI6IHJlZHVjZXIgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiBidWlsZGVyO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgYWRkRGVmYXVsdENhc2U6IGZ1bmN0aW9uIChyZWR1Y2VyKSB7XHJcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChkZWZhdWx0Q2FzZVJlZHVjZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJgYnVpbGRlci5hZGREZWZhdWx0Q2FzZWAgY2FuIG9ubHkgYmUgY2FsbGVkIG9uY2VcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZGVmYXVsdENhc2VSZWR1Y2VyID0gcmVkdWNlcjtcclxuICAgICAgICAgICAgcmV0dXJuIGJ1aWxkZXI7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIGJ1aWxkZXJDYWxsYmFjayhidWlsZGVyKTtcclxuICAgIHJldHVybiBbYWN0aW9uc01hcCwgYWN0aW9uTWF0Y2hlcnMsIGRlZmF1bHRDYXNlUmVkdWNlcl07XHJcbn1cclxuLy8gc3JjL2NyZWF0ZVJlZHVjZXIudHNcclxuZnVuY3Rpb24gaXNTdGF0ZUZ1bmN0aW9uKHgpIHtcclxuICAgIHJldHVybiB0eXBlb2YgeCA9PT0gXCJmdW5jdGlvblwiO1xyXG59XHJcbnZhciBoYXNXYXJuZWRBYm91dE9iamVjdE5vdGF0aW9uID0gZmFsc2U7XHJcbmZ1bmN0aW9uIGNyZWF0ZVJlZHVjZXIoaW5pdGlhbFN0YXRlLCBtYXBPckJ1aWxkZXJDYWxsYmFjaywgYWN0aW9uTWF0Y2hlcnMsIGRlZmF1bHRDYXNlUmVkdWNlcikge1xyXG4gICAgaWYgKGFjdGlvbk1hdGNoZXJzID09PSB2b2lkIDApIHsgYWN0aW9uTWF0Y2hlcnMgPSBbXTsgfVxyXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xyXG4gICAgICAgIGlmICh0eXBlb2YgbWFwT3JCdWlsZGVyQ2FsbGJhY2sgPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICAgICAgaWYgKCFoYXNXYXJuZWRBYm91dE9iamVjdE5vdGF0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBoYXNXYXJuZWRBYm91dE9iamVjdE5vdGF0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcIlRoZSBvYmplY3Qgbm90YXRpb24gZm9yIGBjcmVhdGVSZWR1Y2VyYCBpcyBkZXByZWNhdGVkLCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIFJUSyAyLjAuIFBsZWFzZSB1c2UgdGhlICdidWlsZGVyIGNhbGxiYWNrJyBub3RhdGlvbiBpbnN0ZWFkOiBodHRwczovL3JlZHV4LXRvb2xraXQuanMub3JnL2FwaS9jcmVhdGVSZWR1Y2VyXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdmFyIF9jID0gdHlwZW9mIG1hcE9yQnVpbGRlckNhbGxiYWNrID09PSBcImZ1bmN0aW9uXCIgPyBleGVjdXRlUmVkdWNlckJ1aWxkZXJDYWxsYmFjayhtYXBPckJ1aWxkZXJDYWxsYmFjaykgOiBbbWFwT3JCdWlsZGVyQ2FsbGJhY2ssIGFjdGlvbk1hdGNoZXJzLCBkZWZhdWx0Q2FzZVJlZHVjZXJdLCBhY3Rpb25zTWFwID0gX2NbMF0sIGZpbmFsQWN0aW9uTWF0Y2hlcnMgPSBfY1sxXSwgZmluYWxEZWZhdWx0Q2FzZVJlZHVjZXIgPSBfY1syXTtcclxuICAgIHZhciBnZXRJbml0aWFsU3RhdGU7XHJcbiAgICBpZiAoaXNTdGF0ZUZ1bmN0aW9uKGluaXRpYWxTdGF0ZSkpIHtcclxuICAgICAgICBnZXRJbml0aWFsU3RhdGUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBmcmVlemVEcmFmdGFibGUoaW5pdGlhbFN0YXRlKCkpOyB9O1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdmFyIGZyb3plbkluaXRpYWxTdGF0ZV8xID0gZnJlZXplRHJhZnRhYmxlKGluaXRpYWxTdGF0ZSk7XHJcbiAgICAgICAgZ2V0SW5pdGlhbFN0YXRlID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gZnJvemVuSW5pdGlhbFN0YXRlXzE7IH07XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiByZWR1Y2VyKHN0YXRlLCBhY3Rpb24pIHtcclxuICAgICAgICBpZiAoc3RhdGUgPT09IHZvaWQgMCkgeyBzdGF0ZSA9IGdldEluaXRpYWxTdGF0ZSgpOyB9XHJcbiAgICAgICAgdmFyIGNhc2VSZWR1Y2VycyA9IF9fc3ByZWFkQXJyYXkoW1xyXG4gICAgICAgICAgICBhY3Rpb25zTWFwW2FjdGlvbi50eXBlXVxyXG4gICAgICAgIF0sIGZpbmFsQWN0aW9uTWF0Y2hlcnMuZmlsdGVyKGZ1bmN0aW9uIChfYykge1xyXG4gICAgICAgICAgICB2YXIgbWF0Y2hlciA9IF9jLm1hdGNoZXI7XHJcbiAgICAgICAgICAgIHJldHVybiBtYXRjaGVyKGFjdGlvbik7XHJcbiAgICAgICAgfSkubWFwKGZ1bmN0aW9uIChfYykge1xyXG4gICAgICAgICAgICB2YXIgcmVkdWNlcjIgPSBfYy5yZWR1Y2VyO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVkdWNlcjI7XHJcbiAgICAgICAgfSkpO1xyXG4gICAgICAgIGlmIChjYXNlUmVkdWNlcnMuZmlsdGVyKGZ1bmN0aW9uIChjcikgeyByZXR1cm4gISFjcjsgfSkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIGNhc2VSZWR1Y2VycyA9IFtmaW5hbERlZmF1bHRDYXNlUmVkdWNlcl07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjYXNlUmVkdWNlcnMucmVkdWNlKGZ1bmN0aW9uIChwcmV2aW91c1N0YXRlLCBjYXNlUmVkdWNlcikge1xyXG4gICAgICAgICAgICBpZiAoY2FzZVJlZHVjZXIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpc0RyYWZ0MihwcmV2aW91c1N0YXRlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBkcmFmdCA9IHByZXZpb3VzU3RhdGU7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGNhc2VSZWR1Y2VyKGRyYWZ0LCBhY3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJldmlvdXNTdGF0ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFpc0RyYWZ0YWJsZTIocHJldmlvdXNTdGF0ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gY2FzZVJlZHVjZXIocHJldmlvdXNTdGF0ZSwgYWN0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzU3RhdGUgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmV2aW91c1N0YXRlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFwiQSBjYXNlIHJlZHVjZXIgb24gYSBub24tZHJhZnRhYmxlIHZhbHVlIG11c3Qgbm90IHJldHVybiB1bmRlZmluZWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTmV4dFN0YXRlMihwcmV2aW91c1N0YXRlLCBmdW5jdGlvbiAoZHJhZnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhc2VSZWR1Y2VyKGRyYWZ0LCBhY3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBwcmV2aW91c1N0YXRlO1xyXG4gICAgICAgIH0sIHN0YXRlKTtcclxuICAgIH1cclxuICAgIHJlZHVjZXIuZ2V0SW5pdGlhbFN0YXRlID0gZ2V0SW5pdGlhbFN0YXRlO1xyXG4gICAgcmV0dXJuIHJlZHVjZXI7XHJcbn1cclxuLy8gc3JjL2NyZWF0ZVNsaWNlLnRzXHJcbnZhciBoYXNXYXJuZWRBYm91dE9iamVjdE5vdGF0aW9uMiA9IGZhbHNlO1xyXG5mdW5jdGlvbiBnZXRUeXBlMihzbGljZSwgYWN0aW9uS2V5KSB7XHJcbiAgICByZXR1cm4gc2xpY2UgKyBcIi9cIiArIGFjdGlvbktleTtcclxufVxyXG5mdW5jdGlvbiBjcmVhdGVTbGljZShvcHRpb25zKSB7XHJcbiAgICB2YXIgbmFtZSA9IG9wdGlvbnMubmFtZTtcclxuICAgIGlmICghbmFtZSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImBuYW1lYCBpcyBhIHJlcXVpcmVkIG9wdGlvbiBmb3IgY3JlYXRlU2xpY2VcIik7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgIT09IFwidW5kZWZpbmVkXCIgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwiZGV2ZWxvcG1lbnRcIikge1xyXG4gICAgICAgIGlmIChvcHRpb25zLmluaXRpYWxTdGF0ZSA9PT0gdm9pZCAwKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJZb3UgbXVzdCBwcm92aWRlIGFuIGBpbml0aWFsU3RhdGVgIHZhbHVlIHRoYXQgaXMgbm90IGB1bmRlZmluZWRgLiBZb3UgbWF5IGhhdmUgbWlzc3BlbGxlZCBgaW5pdGlhbFN0YXRlYFwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB2YXIgaW5pdGlhbFN0YXRlID0gdHlwZW9mIG9wdGlvbnMuaW5pdGlhbFN0YXRlID09IFwiZnVuY3Rpb25cIiA/IG9wdGlvbnMuaW5pdGlhbFN0YXRlIDogZnJlZXplRHJhZnRhYmxlKG9wdGlvbnMuaW5pdGlhbFN0YXRlKTtcclxuICAgIHZhciByZWR1Y2VycyA9IG9wdGlvbnMucmVkdWNlcnMgfHwge307XHJcbiAgICB2YXIgcmVkdWNlck5hbWVzID0gT2JqZWN0LmtleXMocmVkdWNlcnMpO1xyXG4gICAgdmFyIHNsaWNlQ2FzZVJlZHVjZXJzQnlOYW1lID0ge307XHJcbiAgICB2YXIgc2xpY2VDYXNlUmVkdWNlcnNCeVR5cGUgPSB7fTtcclxuICAgIHZhciBhY3Rpb25DcmVhdG9ycyA9IHt9O1xyXG4gICAgcmVkdWNlck5hbWVzLmZvckVhY2goZnVuY3Rpb24gKHJlZHVjZXJOYW1lKSB7XHJcbiAgICAgICAgdmFyIG1heWJlUmVkdWNlcldpdGhQcmVwYXJlID0gcmVkdWNlcnNbcmVkdWNlck5hbWVdO1xyXG4gICAgICAgIHZhciB0eXBlID0gZ2V0VHlwZTIobmFtZSwgcmVkdWNlck5hbWUpO1xyXG4gICAgICAgIHZhciBjYXNlUmVkdWNlcjtcclxuICAgICAgICB2YXIgcHJlcGFyZUNhbGxiYWNrO1xyXG4gICAgICAgIGlmIChcInJlZHVjZXJcIiBpbiBtYXliZVJlZHVjZXJXaXRoUHJlcGFyZSkge1xyXG4gICAgICAgICAgICBjYXNlUmVkdWNlciA9IG1heWJlUmVkdWNlcldpdGhQcmVwYXJlLnJlZHVjZXI7XHJcbiAgICAgICAgICAgIHByZXBhcmVDYWxsYmFjayA9IG1heWJlUmVkdWNlcldpdGhQcmVwYXJlLnByZXBhcmU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjYXNlUmVkdWNlciA9IG1heWJlUmVkdWNlcldpdGhQcmVwYXJlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzbGljZUNhc2VSZWR1Y2Vyc0J5TmFtZVtyZWR1Y2VyTmFtZV0gPSBjYXNlUmVkdWNlcjtcclxuICAgICAgICBzbGljZUNhc2VSZWR1Y2Vyc0J5VHlwZVt0eXBlXSA9IGNhc2VSZWR1Y2VyO1xyXG4gICAgICAgIGFjdGlvbkNyZWF0b3JzW3JlZHVjZXJOYW1lXSA9IHByZXBhcmVDYWxsYmFjayA/IGNyZWF0ZUFjdGlvbih0eXBlLCBwcmVwYXJlQ2FsbGJhY2spIDogY3JlYXRlQWN0aW9uKHR5cGUpO1xyXG4gICAgfSk7XHJcbiAgICBmdW5jdGlvbiBidWlsZFJlZHVjZXIoKSB7XHJcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuZXh0cmFSZWR1Y2VycyA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFoYXNXYXJuZWRBYm91dE9iamVjdE5vdGF0aW9uMikge1xyXG4gICAgICAgICAgICAgICAgICAgIGhhc1dhcm5lZEFib3V0T2JqZWN0Tm90YXRpb24yID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXCJUaGUgb2JqZWN0IG5vdGF0aW9uIGZvciBgY3JlYXRlU2xpY2UuZXh0cmFSZWR1Y2Vyc2AgaXMgZGVwcmVjYXRlZCwgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBSVEsgMi4wLiBQbGVhc2UgdXNlIHRoZSAnYnVpbGRlciBjYWxsYmFjaycgbm90YXRpb24gaW5zdGVhZDogaHR0cHM6Ly9yZWR1eC10b29sa2l0LmpzLm9yZy9hcGkvY3JlYXRlU2xpY2VcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIF9jID0gdHlwZW9mIG9wdGlvbnMuZXh0cmFSZWR1Y2VycyA9PT0gXCJmdW5jdGlvblwiID8gZXhlY3V0ZVJlZHVjZXJCdWlsZGVyQ2FsbGJhY2sob3B0aW9ucy5leHRyYVJlZHVjZXJzKSA6IFtvcHRpb25zLmV4dHJhUmVkdWNlcnNdLCBfZCA9IF9jWzBdLCBleHRyYVJlZHVjZXJzID0gX2QgPT09IHZvaWQgMCA/IHt9IDogX2QsIF9lID0gX2NbMV0sIGFjdGlvbk1hdGNoZXJzID0gX2UgPT09IHZvaWQgMCA/IFtdIDogX2UsIF9mID0gX2NbMl0sIGRlZmF1bHRDYXNlUmVkdWNlciA9IF9mID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZjtcclxuICAgICAgICB2YXIgZmluYWxDYXNlUmVkdWNlcnMgPSBfX3NwcmVhZFZhbHVlcyhfX3NwcmVhZFZhbHVlcyh7fSwgZXh0cmFSZWR1Y2VycyksIHNsaWNlQ2FzZVJlZHVjZXJzQnlUeXBlKTtcclxuICAgICAgICByZXR1cm4gY3JlYXRlUmVkdWNlcihpbml0aWFsU3RhdGUsIGZ1bmN0aW9uIChidWlsZGVyKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBmaW5hbENhc2VSZWR1Y2Vycykge1xyXG4gICAgICAgICAgICAgICAgYnVpbGRlci5hZGRDYXNlKGtleSwgZmluYWxDYXNlUmVkdWNlcnNba2V5XSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBhY3Rpb25NYXRjaGVyc18xID0gYWN0aW9uTWF0Y2hlcnM7IF9pIDwgYWN0aW9uTWF0Y2hlcnNfMS5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBtID0gYWN0aW9uTWF0Y2hlcnNfMVtfaV07XHJcbiAgICAgICAgICAgICAgICBidWlsZGVyLmFkZE1hdGNoZXIobS5tYXRjaGVyLCBtLnJlZHVjZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChkZWZhdWx0Q2FzZVJlZHVjZXIpIHtcclxuICAgICAgICAgICAgICAgIGJ1aWxkZXIuYWRkRGVmYXVsdENhc2UoZGVmYXVsdENhc2VSZWR1Y2VyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgdmFyIF9yZWR1Y2VyO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBuYW1lOiBuYW1lLFxyXG4gICAgICAgIHJlZHVjZXI6IGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uKSB7XHJcbiAgICAgICAgICAgIGlmICghX3JlZHVjZXIpXHJcbiAgICAgICAgICAgICAgICBfcmVkdWNlciA9IGJ1aWxkUmVkdWNlcigpO1xyXG4gICAgICAgICAgICByZXR1cm4gX3JlZHVjZXIoc3RhdGUsIGFjdGlvbik7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBhY3Rpb25zOiBhY3Rpb25DcmVhdG9ycyxcclxuICAgICAgICBjYXNlUmVkdWNlcnM6IHNsaWNlQ2FzZVJlZHVjZXJzQnlOYW1lLFxyXG4gICAgICAgIGdldEluaXRpYWxTdGF0ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAoIV9yZWR1Y2VyKVxyXG4gICAgICAgICAgICAgICAgX3JlZHVjZXIgPSBidWlsZFJlZHVjZXIoKTtcclxuICAgICAgICAgICAgcmV0dXJuIF9yZWR1Y2VyLmdldEluaXRpYWxTdGF0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cclxuLy8gc3JjL2VudGl0aWVzL2VudGl0eV9zdGF0ZS50c1xyXG5mdW5jdGlvbiBnZXRJbml0aWFsRW50aXR5U3RhdGUoKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGlkczogW10sXHJcbiAgICAgICAgZW50aXRpZXM6IHt9XHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIGNyZWF0ZUluaXRpYWxTdGF0ZUZhY3RvcnkoKSB7XHJcbiAgICBmdW5jdGlvbiBnZXRJbml0aWFsU3RhdGUoYWRkaXRpb25hbFN0YXRlKSB7XHJcbiAgICAgICAgaWYgKGFkZGl0aW9uYWxTdGF0ZSA9PT0gdm9pZCAwKSB7IGFkZGl0aW9uYWxTdGF0ZSA9IHt9OyB9XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oZ2V0SW5pdGlhbEVudGl0eVN0YXRlKCksIGFkZGl0aW9uYWxTdGF0ZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyBnZXRJbml0aWFsU3RhdGU6IGdldEluaXRpYWxTdGF0ZSB9O1xyXG59XHJcbi8vIHNyYy9lbnRpdGllcy9zdGF0ZV9zZWxlY3RvcnMudHNcclxuZnVuY3Rpb24gY3JlYXRlU2VsZWN0b3JzRmFjdG9yeSgpIHtcclxuICAgIGZ1bmN0aW9uIGdldFNlbGVjdG9ycyhzZWxlY3RTdGF0ZSkge1xyXG4gICAgICAgIHZhciBzZWxlY3RJZHMgPSBmdW5jdGlvbiAoc3RhdGUpIHsgcmV0dXJuIHN0YXRlLmlkczsgfTtcclxuICAgICAgICB2YXIgc2VsZWN0RW50aXRpZXMgPSBmdW5jdGlvbiAoc3RhdGUpIHsgcmV0dXJuIHN0YXRlLmVudGl0aWVzOyB9O1xyXG4gICAgICAgIHZhciBzZWxlY3RBbGwgPSBjcmVhdGVEcmFmdFNhZmVTZWxlY3RvcihzZWxlY3RJZHMsIHNlbGVjdEVudGl0aWVzLCBmdW5jdGlvbiAoaWRzLCBlbnRpdGllcykgeyByZXR1cm4gaWRzLm1hcChmdW5jdGlvbiAoaWQpIHsgcmV0dXJuIGVudGl0aWVzW2lkXTsgfSk7IH0pO1xyXG4gICAgICAgIHZhciBzZWxlY3RJZCA9IGZ1bmN0aW9uIChfLCBpZCkgeyByZXR1cm4gaWQ7IH07XHJcbiAgICAgICAgdmFyIHNlbGVjdEJ5SWQgPSBmdW5jdGlvbiAoZW50aXRpZXMsIGlkKSB7IHJldHVybiBlbnRpdGllc1tpZF07IH07XHJcbiAgICAgICAgdmFyIHNlbGVjdFRvdGFsID0gY3JlYXRlRHJhZnRTYWZlU2VsZWN0b3Ioc2VsZWN0SWRzLCBmdW5jdGlvbiAoaWRzKSB7IHJldHVybiBpZHMubGVuZ3RoOyB9KTtcclxuICAgICAgICBpZiAoIXNlbGVjdFN0YXRlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBzZWxlY3RJZHM6IHNlbGVjdElkcyxcclxuICAgICAgICAgICAgICAgIHNlbGVjdEVudGl0aWVzOiBzZWxlY3RFbnRpdGllcyxcclxuICAgICAgICAgICAgICAgIHNlbGVjdEFsbDogc2VsZWN0QWxsLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0VG90YWw6IHNlbGVjdFRvdGFsLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0QnlJZDogY3JlYXRlRHJhZnRTYWZlU2VsZWN0b3Ioc2VsZWN0RW50aXRpZXMsIHNlbGVjdElkLCBzZWxlY3RCeUlkKVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgc2VsZWN0R2xvYmFsaXplZEVudGl0aWVzID0gY3JlYXRlRHJhZnRTYWZlU2VsZWN0b3Ioc2VsZWN0U3RhdGUsIHNlbGVjdEVudGl0aWVzKTtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBzZWxlY3RJZHM6IGNyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yKHNlbGVjdFN0YXRlLCBzZWxlY3RJZHMpLFxyXG4gICAgICAgICAgICBzZWxlY3RFbnRpdGllczogc2VsZWN0R2xvYmFsaXplZEVudGl0aWVzLFxyXG4gICAgICAgICAgICBzZWxlY3RBbGw6IGNyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yKHNlbGVjdFN0YXRlLCBzZWxlY3RBbGwpLFxyXG4gICAgICAgICAgICBzZWxlY3RUb3RhbDogY3JlYXRlRHJhZnRTYWZlU2VsZWN0b3Ioc2VsZWN0U3RhdGUsIHNlbGVjdFRvdGFsKSxcclxuICAgICAgICAgICAgc2VsZWN0QnlJZDogY3JlYXRlRHJhZnRTYWZlU2VsZWN0b3Ioc2VsZWN0R2xvYmFsaXplZEVudGl0aWVzLCBzZWxlY3RJZCwgc2VsZWN0QnlJZClcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgZ2V0U2VsZWN0b3JzOiBnZXRTZWxlY3RvcnMgfTtcclxufVxyXG4vLyBzcmMvZW50aXRpZXMvc3RhdGVfYWRhcHRlci50c1xyXG5pbXBvcnQgY3JlYXRlTmV4dFN0YXRlMywgeyBpc0RyYWZ0IGFzIGlzRHJhZnQzIH0gZnJvbSBcImltbWVyXCI7XHJcbmZ1bmN0aW9uIGNyZWF0ZVNpbmdsZUFyZ3VtZW50U3RhdGVPcGVyYXRvcihtdXRhdG9yKSB7XHJcbiAgICB2YXIgb3BlcmF0b3IgPSBjcmVhdGVTdGF0ZU9wZXJhdG9yKGZ1bmN0aW9uIChfLCBzdGF0ZSkgeyByZXR1cm4gbXV0YXRvcihzdGF0ZSk7IH0pO1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIG9wZXJhdGlvbihzdGF0ZSkge1xyXG4gICAgICAgIHJldHVybiBvcGVyYXRvcihzdGF0ZSwgdm9pZCAwKTtcclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gY3JlYXRlU3RhdGVPcGVyYXRvcihtdXRhdG9yKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gb3BlcmF0aW9uKHN0YXRlLCBhcmcpIHtcclxuICAgICAgICBmdW5jdGlvbiBpc1BheWxvYWRBY3Rpb25Bcmd1bWVudChhcmcyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpc0ZTQShhcmcyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHJ1bk11dGF0b3IgPSBmdW5jdGlvbiAoZHJhZnQpIHtcclxuICAgICAgICAgICAgaWYgKGlzUGF5bG9hZEFjdGlvbkFyZ3VtZW50KGFyZykpIHtcclxuICAgICAgICAgICAgICAgIG11dGF0b3IoYXJnLnBheWxvYWQsIGRyYWZ0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG11dGF0b3IoYXJnLCBkcmFmdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmIChpc0RyYWZ0MyhzdGF0ZSkpIHtcclxuICAgICAgICAgICAgcnVuTXV0YXRvcihzdGF0ZSk7XHJcbiAgICAgICAgICAgIHJldHVybiBzdGF0ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVOZXh0U3RhdGUzKHN0YXRlLCBydW5NdXRhdG9yKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59XHJcbi8vIHNyYy9lbnRpdGllcy91dGlscy50c1xyXG5mdW5jdGlvbiBzZWxlY3RJZFZhbHVlKGVudGl0eSwgc2VsZWN0SWQpIHtcclxuICAgIHZhciBrZXkgPSBzZWxlY3RJZChlbnRpdHkpO1xyXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJiBrZXkgPT09IHZvaWQgMCkge1xyXG4gICAgICAgIGNvbnNvbGUud2FybihcIlRoZSBlbnRpdHkgcGFzc2VkIHRvIHRoZSBgc2VsZWN0SWRgIGltcGxlbWVudGF0aW9uIHJldHVybmVkIHVuZGVmaW5lZC5cIiwgXCJZb3Ugc2hvdWxkIHByb2JhYmx5IHByb3ZpZGUgeW91ciBvd24gYHNlbGVjdElkYCBpbXBsZW1lbnRhdGlvbi5cIiwgXCJUaGUgZW50aXR5IHRoYXQgd2FzIHBhc3NlZDpcIiwgZW50aXR5LCBcIlRoZSBgc2VsZWN0SWRgIGltcGxlbWVudGF0aW9uOlwiLCBzZWxlY3RJZC50b1N0cmluZygpKTtcclxuICAgIH1cclxuICAgIHJldHVybiBrZXk7XHJcbn1cclxuZnVuY3Rpb24gZW5zdXJlRW50aXRpZXNBcnJheShlbnRpdGllcykge1xyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGVudGl0aWVzKSkge1xyXG4gICAgICAgIGVudGl0aWVzID0gT2JqZWN0LnZhbHVlcyhlbnRpdGllcyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZW50aXRpZXM7XHJcbn1cclxuZnVuY3Rpb24gc3BsaXRBZGRlZFVwZGF0ZWRFbnRpdGllcyhuZXdFbnRpdGllcywgc2VsZWN0SWQsIHN0YXRlKSB7XHJcbiAgICBuZXdFbnRpdGllcyA9IGVuc3VyZUVudGl0aWVzQXJyYXkobmV3RW50aXRpZXMpO1xyXG4gICAgdmFyIGFkZGVkID0gW107XHJcbiAgICB2YXIgdXBkYXRlZCA9IFtdO1xyXG4gICAgZm9yICh2YXIgX2kgPSAwLCBuZXdFbnRpdGllc18xID0gbmV3RW50aXRpZXM7IF9pIDwgbmV3RW50aXRpZXNfMS5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICB2YXIgZW50aXR5ID0gbmV3RW50aXRpZXNfMVtfaV07XHJcbiAgICAgICAgdmFyIGlkID0gc2VsZWN0SWRWYWx1ZShlbnRpdHksIHNlbGVjdElkKTtcclxuICAgICAgICBpZiAoaWQgaW4gc3RhdGUuZW50aXRpZXMpIHtcclxuICAgICAgICAgICAgdXBkYXRlZC5wdXNoKHsgaWQ6IGlkLCBjaGFuZ2VzOiBlbnRpdHkgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBhZGRlZC5wdXNoKGVudGl0eSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIFthZGRlZCwgdXBkYXRlZF07XHJcbn1cclxuLy8gc3JjL2VudGl0aWVzL3Vuc29ydGVkX3N0YXRlX2FkYXB0ZXIudHNcclxuZnVuY3Rpb24gY3JlYXRlVW5zb3J0ZWRTdGF0ZUFkYXB0ZXIoc2VsZWN0SWQpIHtcclxuICAgIGZ1bmN0aW9uIGFkZE9uZU11dGFibHkoZW50aXR5LCBzdGF0ZSkge1xyXG4gICAgICAgIHZhciBrZXkgPSBzZWxlY3RJZFZhbHVlKGVudGl0eSwgc2VsZWN0SWQpO1xyXG4gICAgICAgIGlmIChrZXkgaW4gc3RhdGUuZW50aXRpZXMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzdGF0ZS5pZHMucHVzaChrZXkpO1xyXG4gICAgICAgIHN0YXRlLmVudGl0aWVzW2tleV0gPSBlbnRpdHk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBhZGRNYW55TXV0YWJseShuZXdFbnRpdGllcywgc3RhdGUpIHtcclxuICAgICAgICBuZXdFbnRpdGllcyA9IGVuc3VyZUVudGl0aWVzQXJyYXkobmV3RW50aXRpZXMpO1xyXG4gICAgICAgIGZvciAodmFyIF9pID0gMCwgbmV3RW50aXRpZXNfMiA9IG5ld0VudGl0aWVzOyBfaSA8IG5ld0VudGl0aWVzXzIubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBlbnRpdHkgPSBuZXdFbnRpdGllc18yW19pXTtcclxuICAgICAgICAgICAgYWRkT25lTXV0YWJseShlbnRpdHksIHN0YXRlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBzZXRPbmVNdXRhYmx5KGVudGl0eSwgc3RhdGUpIHtcclxuICAgICAgICB2YXIga2V5ID0gc2VsZWN0SWRWYWx1ZShlbnRpdHksIHNlbGVjdElkKTtcclxuICAgICAgICBpZiAoIShrZXkgaW4gc3RhdGUuZW50aXRpZXMpKSB7XHJcbiAgICAgICAgICAgIHN0YXRlLmlkcy5wdXNoKGtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHN0YXRlLmVudGl0aWVzW2tleV0gPSBlbnRpdHk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBzZXRNYW55TXV0YWJseShuZXdFbnRpdGllcywgc3RhdGUpIHtcclxuICAgICAgICBuZXdFbnRpdGllcyA9IGVuc3VyZUVudGl0aWVzQXJyYXkobmV3RW50aXRpZXMpO1xyXG4gICAgICAgIGZvciAodmFyIF9pID0gMCwgbmV3RW50aXRpZXNfMyA9IG5ld0VudGl0aWVzOyBfaSA8IG5ld0VudGl0aWVzXzMubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBlbnRpdHkgPSBuZXdFbnRpdGllc18zW19pXTtcclxuICAgICAgICAgICAgc2V0T25lTXV0YWJseShlbnRpdHksIHN0YXRlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBzZXRBbGxNdXRhYmx5KG5ld0VudGl0aWVzLCBzdGF0ZSkge1xyXG4gICAgICAgIG5ld0VudGl0aWVzID0gZW5zdXJlRW50aXRpZXNBcnJheShuZXdFbnRpdGllcyk7XHJcbiAgICAgICAgc3RhdGUuaWRzID0gW107XHJcbiAgICAgICAgc3RhdGUuZW50aXRpZXMgPSB7fTtcclxuICAgICAgICBhZGRNYW55TXV0YWJseShuZXdFbnRpdGllcywgc3RhdGUpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gcmVtb3ZlT25lTXV0YWJseShrZXksIHN0YXRlKSB7XHJcbiAgICAgICAgcmV0dXJuIHJlbW92ZU1hbnlNdXRhYmx5KFtrZXldLCBzdGF0ZSk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiByZW1vdmVNYW55TXV0YWJseShrZXlzLCBzdGF0ZSkge1xyXG4gICAgICAgIHZhciBkaWRNdXRhdGUgPSBmYWxzZTtcclxuICAgICAgICBrZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgICAgICBpZiAoa2V5IGluIHN0YXRlLmVudGl0aWVzKSB7XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgc3RhdGUuZW50aXRpZXNba2V5XTtcclxuICAgICAgICAgICAgICAgIGRpZE11dGF0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoZGlkTXV0YXRlKSB7XHJcbiAgICAgICAgICAgIHN0YXRlLmlkcyA9IHN0YXRlLmlkcy5maWx0ZXIoZnVuY3Rpb24gKGlkKSB7IHJldHVybiBpZCBpbiBzdGF0ZS5lbnRpdGllczsgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gcmVtb3ZlQWxsTXV0YWJseShzdGF0ZSkge1xyXG4gICAgICAgIE9iamVjdC5hc3NpZ24oc3RhdGUsIHtcclxuICAgICAgICAgICAgaWRzOiBbXSxcclxuICAgICAgICAgICAgZW50aXRpZXM6IHt9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiB0YWtlTmV3S2V5KGtleXMsIHVwZGF0ZSwgc3RhdGUpIHtcclxuICAgICAgICB2YXIgb3JpZ2luYWwyID0gc3RhdGUuZW50aXRpZXNbdXBkYXRlLmlkXTtcclxuICAgICAgICB2YXIgdXBkYXRlZCA9IE9iamVjdC5hc3NpZ24oe30sIG9yaWdpbmFsMiwgdXBkYXRlLmNoYW5nZXMpO1xyXG4gICAgICAgIHZhciBuZXdLZXkgPSBzZWxlY3RJZFZhbHVlKHVwZGF0ZWQsIHNlbGVjdElkKTtcclxuICAgICAgICB2YXIgaGFzTmV3S2V5ID0gbmV3S2V5ICE9PSB1cGRhdGUuaWQ7XHJcbiAgICAgICAgaWYgKGhhc05ld0tleSkge1xyXG4gICAgICAgICAgICBrZXlzW3VwZGF0ZS5pZF0gPSBuZXdLZXk7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBzdGF0ZS5lbnRpdGllc1t1cGRhdGUuaWRdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzdGF0ZS5lbnRpdGllc1tuZXdLZXldID0gdXBkYXRlZDtcclxuICAgICAgICByZXR1cm4gaGFzTmV3S2V5O1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gdXBkYXRlT25lTXV0YWJseSh1cGRhdGUsIHN0YXRlKSB7XHJcbiAgICAgICAgcmV0dXJuIHVwZGF0ZU1hbnlNdXRhYmx5KFt1cGRhdGVdLCBzdGF0ZSk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiB1cGRhdGVNYW55TXV0YWJseSh1cGRhdGVzLCBzdGF0ZSkge1xyXG4gICAgICAgIHZhciBuZXdLZXlzID0ge307XHJcbiAgICAgICAgdmFyIHVwZGF0ZXNQZXJFbnRpdHkgPSB7fTtcclxuICAgICAgICB1cGRhdGVzLmZvckVhY2goZnVuY3Rpb24gKHVwZGF0ZSkge1xyXG4gICAgICAgICAgICBpZiAodXBkYXRlLmlkIGluIHN0YXRlLmVudGl0aWVzKSB7XHJcbiAgICAgICAgICAgICAgICB1cGRhdGVzUGVyRW50aXR5W3VwZGF0ZS5pZF0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWQ6IHVwZGF0ZS5pZCxcclxuICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzOiBfX3NwcmVhZFZhbHVlcyhfX3NwcmVhZFZhbHVlcyh7fSwgdXBkYXRlc1BlckVudGl0eVt1cGRhdGUuaWRdID8gdXBkYXRlc1BlckVudGl0eVt1cGRhdGUuaWRdLmNoYW5nZXMgOiBudWxsKSwgdXBkYXRlLmNoYW5nZXMpXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdXBkYXRlcyA9IE9iamVjdC52YWx1ZXModXBkYXRlc1BlckVudGl0eSk7XHJcbiAgICAgICAgdmFyIGRpZE11dGF0ZUVudGl0aWVzID0gdXBkYXRlcy5sZW5ndGggPiAwO1xyXG4gICAgICAgIGlmIChkaWRNdXRhdGVFbnRpdGllcykge1xyXG4gICAgICAgICAgICB2YXIgZGlkTXV0YXRlSWRzID0gdXBkYXRlcy5maWx0ZXIoZnVuY3Rpb24gKHVwZGF0ZSkgeyByZXR1cm4gdGFrZU5ld0tleShuZXdLZXlzLCB1cGRhdGUsIHN0YXRlKTsgfSkubGVuZ3RoID4gMDtcclxuICAgICAgICAgICAgaWYgKGRpZE11dGF0ZUlkcykge1xyXG4gICAgICAgICAgICAgICAgc3RhdGUuaWRzID0gT2JqZWN0LmtleXMoc3RhdGUuZW50aXRpZXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gdXBzZXJ0T25lTXV0YWJseShlbnRpdHksIHN0YXRlKSB7XHJcbiAgICAgICAgcmV0dXJuIHVwc2VydE1hbnlNdXRhYmx5KFtlbnRpdHldLCBzdGF0ZSk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiB1cHNlcnRNYW55TXV0YWJseShuZXdFbnRpdGllcywgc3RhdGUpIHtcclxuICAgICAgICB2YXIgX2MgPSBzcGxpdEFkZGVkVXBkYXRlZEVudGl0aWVzKG5ld0VudGl0aWVzLCBzZWxlY3RJZCwgc3RhdGUpLCBhZGRlZCA9IF9jWzBdLCB1cGRhdGVkID0gX2NbMV07XHJcbiAgICAgICAgdXBkYXRlTWFueU11dGFibHkodXBkYXRlZCwgc3RhdGUpO1xyXG4gICAgICAgIGFkZE1hbnlNdXRhYmx5KGFkZGVkLCBzdGF0ZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHJlbW92ZUFsbDogY3JlYXRlU2luZ2xlQXJndW1lbnRTdGF0ZU9wZXJhdG9yKHJlbW92ZUFsbE11dGFibHkpLFxyXG4gICAgICAgIGFkZE9uZTogY3JlYXRlU3RhdGVPcGVyYXRvcihhZGRPbmVNdXRhYmx5KSxcclxuICAgICAgICBhZGRNYW55OiBjcmVhdGVTdGF0ZU9wZXJhdG9yKGFkZE1hbnlNdXRhYmx5KSxcclxuICAgICAgICBzZXRPbmU6IGNyZWF0ZVN0YXRlT3BlcmF0b3Ioc2V0T25lTXV0YWJseSksXHJcbiAgICAgICAgc2V0TWFueTogY3JlYXRlU3RhdGVPcGVyYXRvcihzZXRNYW55TXV0YWJseSksXHJcbiAgICAgICAgc2V0QWxsOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHNldEFsbE11dGFibHkpLFxyXG4gICAgICAgIHVwZGF0ZU9uZTogY3JlYXRlU3RhdGVPcGVyYXRvcih1cGRhdGVPbmVNdXRhYmx5KSxcclxuICAgICAgICB1cGRhdGVNYW55OiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHVwZGF0ZU1hbnlNdXRhYmx5KSxcclxuICAgICAgICB1cHNlcnRPbmU6IGNyZWF0ZVN0YXRlT3BlcmF0b3IodXBzZXJ0T25lTXV0YWJseSksXHJcbiAgICAgICAgdXBzZXJ0TWFueTogY3JlYXRlU3RhdGVPcGVyYXRvcih1cHNlcnRNYW55TXV0YWJseSksXHJcbiAgICAgICAgcmVtb3ZlT25lOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHJlbW92ZU9uZU11dGFibHkpLFxyXG4gICAgICAgIHJlbW92ZU1hbnk6IGNyZWF0ZVN0YXRlT3BlcmF0b3IocmVtb3ZlTWFueU11dGFibHkpXHJcbiAgICB9O1xyXG59XHJcbi8vIHNyYy9lbnRpdGllcy9zb3J0ZWRfc3RhdGVfYWRhcHRlci50c1xyXG5mdW5jdGlvbiBjcmVhdGVTb3J0ZWRTdGF0ZUFkYXB0ZXIoc2VsZWN0SWQsIHNvcnQpIHtcclxuICAgIHZhciBfYyA9IGNyZWF0ZVVuc29ydGVkU3RhdGVBZGFwdGVyKHNlbGVjdElkKSwgcmVtb3ZlT25lID0gX2MucmVtb3ZlT25lLCByZW1vdmVNYW55ID0gX2MucmVtb3ZlTWFueSwgcmVtb3ZlQWxsID0gX2MucmVtb3ZlQWxsO1xyXG4gICAgZnVuY3Rpb24gYWRkT25lTXV0YWJseShlbnRpdHksIHN0YXRlKSB7XHJcbiAgICAgICAgcmV0dXJuIGFkZE1hbnlNdXRhYmx5KFtlbnRpdHldLCBzdGF0ZSk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBhZGRNYW55TXV0YWJseShuZXdFbnRpdGllcywgc3RhdGUpIHtcclxuICAgICAgICBuZXdFbnRpdGllcyA9IGVuc3VyZUVudGl0aWVzQXJyYXkobmV3RW50aXRpZXMpO1xyXG4gICAgICAgIHZhciBtb2RlbHMgPSBuZXdFbnRpdGllcy5maWx0ZXIoZnVuY3Rpb24gKG1vZGVsKSB7IHJldHVybiAhKHNlbGVjdElkVmFsdWUobW9kZWwsIHNlbGVjdElkKSBpbiBzdGF0ZS5lbnRpdGllcyk7IH0pO1xyXG4gICAgICAgIGlmIChtb2RlbHMubGVuZ3RoICE9PSAwKSB7XHJcbiAgICAgICAgICAgIG1lcmdlKG1vZGVscywgc3RhdGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHNldE9uZU11dGFibHkoZW50aXR5LCBzdGF0ZSkge1xyXG4gICAgICAgIHJldHVybiBzZXRNYW55TXV0YWJseShbZW50aXR5XSwgc3RhdGUpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gc2V0TWFueU11dGFibHkobmV3RW50aXRpZXMsIHN0YXRlKSB7XHJcbiAgICAgICAgbmV3RW50aXRpZXMgPSBlbnN1cmVFbnRpdGllc0FycmF5KG5ld0VudGl0aWVzKTtcclxuICAgICAgICBpZiAobmV3RW50aXRpZXMubGVuZ3RoICE9PSAwKSB7XHJcbiAgICAgICAgICAgIG1lcmdlKG5ld0VudGl0aWVzLCBzdGF0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gc2V0QWxsTXV0YWJseShuZXdFbnRpdGllcywgc3RhdGUpIHtcclxuICAgICAgICBuZXdFbnRpdGllcyA9IGVuc3VyZUVudGl0aWVzQXJyYXkobmV3RW50aXRpZXMpO1xyXG4gICAgICAgIHN0YXRlLmVudGl0aWVzID0ge307XHJcbiAgICAgICAgc3RhdGUuaWRzID0gW107XHJcbiAgICAgICAgYWRkTWFueU11dGFibHkobmV3RW50aXRpZXMsIHN0YXRlKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHVwZGF0ZU9uZU11dGFibHkodXBkYXRlLCBzdGF0ZSkge1xyXG4gICAgICAgIHJldHVybiB1cGRhdGVNYW55TXV0YWJseShbdXBkYXRlXSwgc3RhdGUpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gdXBkYXRlTWFueU11dGFibHkodXBkYXRlcywgc3RhdGUpIHtcclxuICAgICAgICB2YXIgYXBwbGllZFVwZGF0ZXMgPSBmYWxzZTtcclxuICAgICAgICBmb3IgKHZhciBfaSA9IDAsIHVwZGF0ZXNfMSA9IHVwZGF0ZXM7IF9pIDwgdXBkYXRlc18xLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgICAgICB2YXIgdXBkYXRlID0gdXBkYXRlc18xW19pXTtcclxuICAgICAgICAgICAgdmFyIGVudGl0eSA9IHN0YXRlLmVudGl0aWVzW3VwZGF0ZS5pZF07XHJcbiAgICAgICAgICAgIGlmICghZW50aXR5KSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhcHBsaWVkVXBkYXRlcyA9IHRydWU7XHJcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oZW50aXR5LCB1cGRhdGUuY2hhbmdlcyk7XHJcbiAgICAgICAgICAgIHZhciBuZXdJZCA9IHNlbGVjdElkKGVudGl0eSk7XHJcbiAgICAgICAgICAgIGlmICh1cGRhdGUuaWQgIT09IG5ld0lkKSB7XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgc3RhdGUuZW50aXRpZXNbdXBkYXRlLmlkXTtcclxuICAgICAgICAgICAgICAgIHN0YXRlLmVudGl0aWVzW25ld0lkXSA9IGVudGl0eTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYXBwbGllZFVwZGF0ZXMpIHtcclxuICAgICAgICAgICAgcmVzb3J0RW50aXRpZXMoc3RhdGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHVwc2VydE9uZU11dGFibHkoZW50aXR5LCBzdGF0ZSkge1xyXG4gICAgICAgIHJldHVybiB1cHNlcnRNYW55TXV0YWJseShbZW50aXR5XSwgc3RhdGUpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gdXBzZXJ0TWFueU11dGFibHkobmV3RW50aXRpZXMsIHN0YXRlKSB7XHJcbiAgICAgICAgdmFyIF9jID0gc3BsaXRBZGRlZFVwZGF0ZWRFbnRpdGllcyhuZXdFbnRpdGllcywgc2VsZWN0SWQsIHN0YXRlKSwgYWRkZWQgPSBfY1swXSwgdXBkYXRlZCA9IF9jWzFdO1xyXG4gICAgICAgIHVwZGF0ZU1hbnlNdXRhYmx5KHVwZGF0ZWQsIHN0YXRlKTtcclxuICAgICAgICBhZGRNYW55TXV0YWJseShhZGRlZCwgc3RhdGUpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gYXJlQXJyYXlzRXF1YWwoYSwgYikge1xyXG4gICAgICAgIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGEubGVuZ3RoICYmIGkgPCBiLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChhW2ldID09PSBiW2ldKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gbWVyZ2UobW9kZWxzLCBzdGF0ZSkge1xyXG4gICAgICAgIG1vZGVscy5mb3JFYWNoKGZ1bmN0aW9uIChtb2RlbCkge1xyXG4gICAgICAgICAgICBzdGF0ZS5lbnRpdGllc1tzZWxlY3RJZChtb2RlbCldID0gbW9kZWw7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmVzb3J0RW50aXRpZXMoc3RhdGUpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gcmVzb3J0RW50aXRpZXMoc3RhdGUpIHtcclxuICAgICAgICB2YXIgYWxsRW50aXRpZXMgPSBPYmplY3QudmFsdWVzKHN0YXRlLmVudGl0aWVzKTtcclxuICAgICAgICBhbGxFbnRpdGllcy5zb3J0KHNvcnQpO1xyXG4gICAgICAgIHZhciBuZXdTb3J0ZWRJZHMgPSBhbGxFbnRpdGllcy5tYXAoc2VsZWN0SWQpO1xyXG4gICAgICAgIHZhciBpZHMgPSBzdGF0ZS5pZHM7XHJcbiAgICAgICAgaWYgKCFhcmVBcnJheXNFcXVhbChpZHMsIG5ld1NvcnRlZElkcykpIHtcclxuICAgICAgICAgICAgc3RhdGUuaWRzID0gbmV3U29ydGVkSWRzO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgcmVtb3ZlT25lOiByZW1vdmVPbmUsXHJcbiAgICAgICAgcmVtb3ZlTWFueTogcmVtb3ZlTWFueSxcclxuICAgICAgICByZW1vdmVBbGw6IHJlbW92ZUFsbCxcclxuICAgICAgICBhZGRPbmU6IGNyZWF0ZVN0YXRlT3BlcmF0b3IoYWRkT25lTXV0YWJseSksXHJcbiAgICAgICAgdXBkYXRlT25lOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHVwZGF0ZU9uZU11dGFibHkpLFxyXG4gICAgICAgIHVwc2VydE9uZTogY3JlYXRlU3RhdGVPcGVyYXRvcih1cHNlcnRPbmVNdXRhYmx5KSxcclxuICAgICAgICBzZXRPbmU6IGNyZWF0ZVN0YXRlT3BlcmF0b3Ioc2V0T25lTXV0YWJseSksXHJcbiAgICAgICAgc2V0TWFueTogY3JlYXRlU3RhdGVPcGVyYXRvcihzZXRNYW55TXV0YWJseSksXHJcbiAgICAgICAgc2V0QWxsOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHNldEFsbE11dGFibHkpLFxyXG4gICAgICAgIGFkZE1hbnk6IGNyZWF0ZVN0YXRlT3BlcmF0b3IoYWRkTWFueU11dGFibHkpLFxyXG4gICAgICAgIHVwZGF0ZU1hbnk6IGNyZWF0ZVN0YXRlT3BlcmF0b3IodXBkYXRlTWFueU11dGFibHkpLFxyXG4gICAgICAgIHVwc2VydE1hbnk6IGNyZWF0ZVN0YXRlT3BlcmF0b3IodXBzZXJ0TWFueU11dGFibHkpXHJcbiAgICB9O1xyXG59XHJcbi8vIHNyYy9lbnRpdGllcy9jcmVhdGVfYWRhcHRlci50c1xyXG5mdW5jdGlvbiBjcmVhdGVFbnRpdHlBZGFwdGVyKG9wdGlvbnMpIHtcclxuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XHJcbiAgICB2YXIgX2MgPSBfX3NwcmVhZFZhbHVlcyh7XHJcbiAgICAgICAgc29ydENvbXBhcmVyOiBmYWxzZSxcclxuICAgICAgICBzZWxlY3RJZDogZnVuY3Rpb24gKGluc3RhbmNlKSB7IHJldHVybiBpbnN0YW5jZS5pZDsgfVxyXG4gICAgfSwgb3B0aW9ucyksIHNlbGVjdElkID0gX2Muc2VsZWN0SWQsIHNvcnRDb21wYXJlciA9IF9jLnNvcnRDb21wYXJlcjtcclxuICAgIHZhciBzdGF0ZUZhY3RvcnkgPSBjcmVhdGVJbml0aWFsU3RhdGVGYWN0b3J5KCk7XHJcbiAgICB2YXIgc2VsZWN0b3JzRmFjdG9yeSA9IGNyZWF0ZVNlbGVjdG9yc0ZhY3RvcnkoKTtcclxuICAgIHZhciBzdGF0ZUFkYXB0ZXIgPSBzb3J0Q29tcGFyZXIgPyBjcmVhdGVTb3J0ZWRTdGF0ZUFkYXB0ZXIoc2VsZWN0SWQsIHNvcnRDb21wYXJlcikgOiBjcmVhdGVVbnNvcnRlZFN0YXRlQWRhcHRlcihzZWxlY3RJZCk7XHJcbiAgICByZXR1cm4gX19zcHJlYWRWYWx1ZXMoX19zcHJlYWRWYWx1ZXMoX19zcHJlYWRWYWx1ZXMoe1xyXG4gICAgICAgIHNlbGVjdElkOiBzZWxlY3RJZCxcclxuICAgICAgICBzb3J0Q29tcGFyZXI6IHNvcnRDb21wYXJlclxyXG4gICAgfSwgc3RhdGVGYWN0b3J5KSwgc2VsZWN0b3JzRmFjdG9yeSksIHN0YXRlQWRhcHRlcik7XHJcbn1cclxuLy8gc3JjL25hbm9pZC50c1xyXG52YXIgdXJsQWxwaGFiZXQgPSBcIk1vZHVsZVN5bWJoYXNPd25Qci0wMTIzNDU2Nzg5QUJDREVGR0hOUlZmZ2N0aVV2el9LcVlUSmtMeHBaWElqUVdcIjtcclxudmFyIG5hbm9pZCA9IGZ1bmN0aW9uIChzaXplKSB7XHJcbiAgICBpZiAoc2l6ZSA9PT0gdm9pZCAwKSB7IHNpemUgPSAyMTsgfVxyXG4gICAgdmFyIGlkID0gXCJcIjtcclxuICAgIHZhciBpID0gc2l6ZTtcclxuICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgICBpZCArPSB1cmxBbHBoYWJldFtNYXRoLnJhbmRvbSgpICogNjQgfCAwXTtcclxuICAgIH1cclxuICAgIHJldHVybiBpZDtcclxufTtcclxuLy8gc3JjL2NyZWF0ZUFzeW5jVGh1bmsudHNcclxudmFyIGNvbW1vblByb3BlcnRpZXMgPSBbXHJcbiAgICBcIm5hbWVcIixcclxuICAgIFwibWVzc2FnZVwiLFxyXG4gICAgXCJzdGFja1wiLFxyXG4gICAgXCJjb2RlXCJcclxuXTtcclxudmFyIFJlamVjdFdpdGhWYWx1ZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIFJlamVjdFdpdGhWYWx1ZShwYXlsb2FkLCBtZXRhKSB7XHJcbiAgICAgICAgdGhpcy5wYXlsb2FkID0gcGF5bG9hZDtcclxuICAgICAgICB0aGlzLm1ldGEgPSBtZXRhO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFJlamVjdFdpdGhWYWx1ZTtcclxufSgpKTtcclxudmFyIEZ1bGZpbGxXaXRoTWV0YSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIEZ1bGZpbGxXaXRoTWV0YShwYXlsb2FkLCBtZXRhKSB7XHJcbiAgICAgICAgdGhpcy5wYXlsb2FkID0gcGF5bG9hZDtcclxuICAgICAgICB0aGlzLm1ldGEgPSBtZXRhO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIEZ1bGZpbGxXaXRoTWV0YTtcclxufSgpKTtcclxudmFyIG1pbmlTZXJpYWxpemVFcnJvciA9IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB2YWx1ZSAhPT0gbnVsbCkge1xyXG4gICAgICAgIHZhciBzaW1wbGVFcnJvciA9IHt9O1xyXG4gICAgICAgIGZvciAodmFyIF9pID0gMCwgY29tbW9uUHJvcGVydGllc18xID0gY29tbW9uUHJvcGVydGllczsgX2kgPCBjb21tb25Qcm9wZXJ0aWVzXzEubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBwcm9wZXJ0eSA9IGNvbW1vblByb3BlcnRpZXNfMVtfaV07XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWVbcHJvcGVydHldID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgICAgICBzaW1wbGVFcnJvcltwcm9wZXJ0eV0gPSB2YWx1ZVtwcm9wZXJ0eV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHNpbXBsZUVycm9yO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgbWVzc2FnZTogU3RyaW5nKHZhbHVlKSB9O1xyXG59O1xyXG52YXIgY3JlYXRlQXN5bmNUaHVuayA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBjcmVhdGVBc3luY1RodW5rMih0eXBlUHJlZml4LCBwYXlsb2FkQ3JlYXRvciwgb3B0aW9ucykge1xyXG4gICAgICAgIHZhciBmdWxmaWxsZWQgPSBjcmVhdGVBY3Rpb24odHlwZVByZWZpeCArIFwiL2Z1bGZpbGxlZFwiLCBmdW5jdGlvbiAocGF5bG9hZCwgcmVxdWVzdElkLCBhcmcsIG1ldGEpIHsgcmV0dXJuICh7XHJcbiAgICAgICAgICAgIHBheWxvYWQ6IHBheWxvYWQsXHJcbiAgICAgICAgICAgIG1ldGE6IF9fc3ByZWFkUHJvcHMoX19zcHJlYWRWYWx1ZXMoe30sIG1ldGEgfHwge30pLCB7XHJcbiAgICAgICAgICAgICAgICBhcmc6IGFyZyxcclxuICAgICAgICAgICAgICAgIHJlcXVlc3RJZDogcmVxdWVzdElkLFxyXG4gICAgICAgICAgICAgICAgcmVxdWVzdFN0YXR1czogXCJmdWxmaWxsZWRcIlxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH0pOyB9KTtcclxuICAgICAgICB2YXIgcGVuZGluZyA9IGNyZWF0ZUFjdGlvbih0eXBlUHJlZml4ICsgXCIvcGVuZGluZ1wiLCBmdW5jdGlvbiAocmVxdWVzdElkLCBhcmcsIG1ldGEpIHsgcmV0dXJuICh7XHJcbiAgICAgICAgICAgIHBheWxvYWQ6IHZvaWQgMCxcclxuICAgICAgICAgICAgbWV0YTogX19zcHJlYWRQcm9wcyhfX3NwcmVhZFZhbHVlcyh7fSwgbWV0YSB8fCB7fSksIHtcclxuICAgICAgICAgICAgICAgIGFyZzogYXJnLFxyXG4gICAgICAgICAgICAgICAgcmVxdWVzdElkOiByZXF1ZXN0SWQsXHJcbiAgICAgICAgICAgICAgICByZXF1ZXN0U3RhdHVzOiBcInBlbmRpbmdcIlxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH0pOyB9KTtcclxuICAgICAgICB2YXIgcmVqZWN0ZWQgPSBjcmVhdGVBY3Rpb24odHlwZVByZWZpeCArIFwiL3JlamVjdGVkXCIsIGZ1bmN0aW9uIChlcnJvciwgcmVxdWVzdElkLCBhcmcsIHBheWxvYWQsIG1ldGEpIHsgcmV0dXJuICh7XHJcbiAgICAgICAgICAgIHBheWxvYWQ6IHBheWxvYWQsXHJcbiAgICAgICAgICAgIGVycm9yOiAob3B0aW9ucyAmJiBvcHRpb25zLnNlcmlhbGl6ZUVycm9yIHx8IG1pbmlTZXJpYWxpemVFcnJvcikoZXJyb3IgfHwgXCJSZWplY3RlZFwiKSxcclxuICAgICAgICAgICAgbWV0YTogX19zcHJlYWRQcm9wcyhfX3NwcmVhZFZhbHVlcyh7fSwgbWV0YSB8fCB7fSksIHtcclxuICAgICAgICAgICAgICAgIGFyZzogYXJnLFxyXG4gICAgICAgICAgICAgICAgcmVxdWVzdElkOiByZXF1ZXN0SWQsXHJcbiAgICAgICAgICAgICAgICByZWplY3RlZFdpdGhWYWx1ZTogISFwYXlsb2FkLFxyXG4gICAgICAgICAgICAgICAgcmVxdWVzdFN0YXR1czogXCJyZWplY3RlZFwiLFxyXG4gICAgICAgICAgICAgICAgYWJvcnRlZDogKGVycm9yID09IG51bGwgPyB2b2lkIDAgOiBlcnJvci5uYW1lKSA9PT0gXCJBYm9ydEVycm9yXCIsXHJcbiAgICAgICAgICAgICAgICBjb25kaXRpb246IChlcnJvciA9PSBudWxsID8gdm9pZCAwIDogZXJyb3IubmFtZSkgPT09IFwiQ29uZGl0aW9uRXJyb3JcIlxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH0pOyB9KTtcclxuICAgICAgICB2YXIgZGlzcGxheWVkV2FybmluZyA9IGZhbHNlO1xyXG4gICAgICAgIHZhciBBQyA9IHR5cGVvZiBBYm9ydENvbnRyb2xsZXIgIT09IFwidW5kZWZpbmVkXCIgPyBBYm9ydENvbnRyb2xsZXIgOiAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIGNsYXNzXzEoKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNpZ25hbCA9IHtcclxuICAgICAgICAgICAgICAgICAgICBhYm9ydGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBhZGRFdmVudExpc3RlbmVyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaEV2ZW50OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIG9uYWJvcnQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUV2ZW50TGlzdGVuZXI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHJlYXNvbjogdm9pZCAwLFxyXG4gICAgICAgICAgICAgICAgICAgIHRocm93SWZBYm9ydGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjbGFzc18xLnByb3RvdHlwZS5hYm9ydCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWRpc3BsYXllZFdhcm5pbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheWVkV2FybmluZyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuaW5mbyhcIlRoaXMgcGxhdGZvcm0gZG9lcyBub3QgaW1wbGVtZW50IEFib3J0Q29udHJvbGxlci4gXFxuSWYgeW91IHdhbnQgdG8gdXNlIHRoZSBBYm9ydENvbnRyb2xsZXIgdG8gcmVhY3QgdG8gYGFib3J0YCBldmVudHMsIHBsZWFzZSBjb25zaWRlciBpbXBvcnRpbmcgYSBwb2x5ZmlsbCBsaWtlICdhYm9ydGNvbnRyb2xsZXItcG9seWZpbGwvZGlzdC9hYm9ydGNvbnRyb2xsZXItcG9seWZpbGwtb25seScuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgcmV0dXJuIGNsYXNzXzE7XHJcbiAgICAgICAgfSgpKTtcclxuICAgICAgICBmdW5jdGlvbiBhY3Rpb25DcmVhdG9yKGFyZykge1xyXG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGRpc3BhdGNoLCBnZXRTdGF0ZSwgZXh0cmEpIHtcclxuICAgICAgICAgICAgICAgIHZhciByZXF1ZXN0SWQgPSAob3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5pZEdlbmVyYXRvcikgPyBvcHRpb25zLmlkR2VuZXJhdG9yKGFyZykgOiBuYW5vaWQoKTtcclxuICAgICAgICAgICAgICAgIHZhciBhYm9ydENvbnRyb2xsZXIgPSBuZXcgQUMoKTtcclxuICAgICAgICAgICAgICAgIHZhciBhYm9ydFJlYXNvbjtcclxuICAgICAgICAgICAgICAgIHZhciBzdGFydGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBhYm9ydChyZWFzb24pIHtcclxuICAgICAgICAgICAgICAgICAgICBhYm9ydFJlYXNvbiA9IHJlYXNvbjtcclxuICAgICAgICAgICAgICAgICAgICBhYm9ydENvbnRyb2xsZXIuYWJvcnQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhciBwcm9taXNlMiA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX19hc3luYyh0aGlzLCBudWxsLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYSwgX2IsIGZpbmFsQWN0aW9uLCBjb25kaXRpb25SZXN1bHQsIGFib3J0ZWRQcm9taXNlLCBlcnJfMSwgc2tpcERpc3BhdGNoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9jKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKF9jLmxhYmVsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYy50cnlzLnB1c2goWzAsIDQsICwgNV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25SZXN1bHQgPSAoX2EgPSBvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLmNvbmRpdGlvbikgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLmNhbGwob3B0aW9ucywgYXJnLCB7IGdldFN0YXRlOiBnZXRTdGF0ZSwgZXh0cmE6IGV4dHJhIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzVGhlbmFibGUoY29uZGl0aW9uUmVzdWx0KSkgcmV0dXJuIFszIC8qYnJlYWsqLywgMl07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIGNvbmRpdGlvblJlc3VsdF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25SZXN1bHQgPSBfYy5zZW50KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jLmxhYmVsID0gMjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25kaXRpb25SZXN1bHQgPT09IGZhbHNlIHx8IGFib3J0Q29udHJvbGxlci5zaWduYWwuYWJvcnRlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29uZGl0aW9uRXJyb3JcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBcIkFib3J0ZWQgZHVlIHRvIGNvbmRpdGlvbiBjYWxsYmFjayByZXR1cm5pbmcgZmFsc2UuXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0ZWRQcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKF8sIHJlamVjdCkgeyByZXR1cm4gYWJvcnRDb250cm9sbGVyLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVqZWN0KHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiQWJvcnRFcnJvclwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYWJvcnRSZWFzb24gfHwgXCJBYm9ydGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7IH0pOyB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2gocGVuZGluZyhyZXF1ZXN0SWQsIGFyZywgKF9iID0gb3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5nZXRQZW5kaW5nTWV0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLmNhbGwob3B0aW9ucywgeyByZXF1ZXN0SWQ6IHJlcXVlc3RJZCwgYXJnOiBhcmcgfSwgeyBnZXRTdGF0ZTogZ2V0U3RhdGUsIGV4dHJhOiBleHRyYSB9KSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCBQcm9taXNlLnJhY2UoW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0ZWRQcm9taXNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb21pc2UucmVzb2x2ZShwYXlsb2FkQ3JlYXRvcihhcmcsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2g6IGRpc3BhdGNoLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRTdGF0ZTogZ2V0U3RhdGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiBleHRyYSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdElkOiByZXF1ZXN0SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hbDogYWJvcnRDb250cm9sbGVyLnNpZ25hbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJvcnQ6IGFib3J0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3RXaXRoVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgbWV0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBSZWplY3RXaXRoVmFsdWUodmFsdWUsIG1ldGEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdWxmaWxsV2l0aFZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIG1ldGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRnVsZmlsbFdpdGhNZXRhKHZhbHVlLCBtZXRhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFJlamVjdFdpdGhWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBGdWxmaWxsV2l0aE1ldGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdWxmaWxsZWQocmVzdWx0LnBheWxvYWQsIHJlcXVlc3RJZCwgYXJnLCByZXN1bHQubWV0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bGZpbGxlZChyZXN1bHQsIHJlcXVlc3RJZCwgYXJnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxBY3Rpb24gPSBfYy5zZW50KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDVdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyXzEgPSBfYy5zZW50KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsQWN0aW9uID0gZXJyXzEgaW5zdGFuY2VvZiBSZWplY3RXaXRoVmFsdWUgPyByZWplY3RlZChudWxsLCByZXF1ZXN0SWQsIGFyZywgZXJyXzEucGF5bG9hZCwgZXJyXzEubWV0YSkgOiByZWplY3RlZChlcnJfMSwgcmVxdWVzdElkLCBhcmcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMgLypicmVhayovLCA1XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNraXBEaXNwYXRjaCA9IG9wdGlvbnMgJiYgIW9wdGlvbnMuZGlzcGF0Y2hDb25kaXRpb25SZWplY3Rpb24gJiYgcmVqZWN0ZWQubWF0Y2goZmluYWxBY3Rpb24pICYmIGZpbmFsQWN0aW9uLm1ldGEuY29uZGl0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNraXBEaXNwYXRjaCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2goZmluYWxBY3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBmaW5hbEFjdGlvbl07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSgpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24ocHJvbWlzZTIsIHtcclxuICAgICAgICAgICAgICAgICAgICBhYm9ydDogYWJvcnQsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdElkOiByZXF1ZXN0SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgYXJnOiBhcmcsXHJcbiAgICAgICAgICAgICAgICAgICAgdW53cmFwOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcm9taXNlMi50aGVuKHVud3JhcFJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKGFjdGlvbkNyZWF0b3IsIHtcclxuICAgICAgICAgICAgcGVuZGluZzogcGVuZGluZyxcclxuICAgICAgICAgICAgcmVqZWN0ZWQ6IHJlamVjdGVkLFxyXG4gICAgICAgICAgICBmdWxmaWxsZWQ6IGZ1bGZpbGxlZCxcclxuICAgICAgICAgICAgdHlwZVByZWZpeDogdHlwZVByZWZpeFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgY3JlYXRlQXN5bmNUaHVuazIud2l0aFR5cGVzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gY3JlYXRlQXN5bmNUaHVuazI7IH07XHJcbiAgICByZXR1cm4gY3JlYXRlQXN5bmNUaHVuazI7XHJcbn0pKCk7XHJcbmZ1bmN0aW9uIHVud3JhcFJlc3VsdChhY3Rpb24pIHtcclxuICAgIGlmIChhY3Rpb24ubWV0YSAmJiBhY3Rpb24ubWV0YS5yZWplY3RlZFdpdGhWYWx1ZSkge1xyXG4gICAgICAgIHRocm93IGFjdGlvbi5wYXlsb2FkO1xyXG4gICAgfVxyXG4gICAgaWYgKGFjdGlvbi5lcnJvcikge1xyXG4gICAgICAgIHRocm93IGFjdGlvbi5lcnJvcjtcclxuICAgIH1cclxuICAgIHJldHVybiBhY3Rpb24ucGF5bG9hZDtcclxufVxyXG5mdW5jdGlvbiBpc1RoZW5hYmxlKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiB2YWx1ZS50aGVuID09PSBcImZ1bmN0aW9uXCI7XHJcbn1cclxuLy8gc3JjL21hdGNoZXJzLnRzXHJcbnZhciBtYXRjaGVzID0gZnVuY3Rpb24gKG1hdGNoZXIsIGFjdGlvbikge1xyXG4gICAgaWYgKGhhc01hdGNoRnVuY3Rpb24obWF0Y2hlcikpIHtcclxuICAgICAgICByZXR1cm4gbWF0Y2hlci5tYXRjaChhY3Rpb24pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIG1hdGNoZXIoYWN0aW9uKTtcclxuICAgIH1cclxufTtcclxuZnVuY3Rpb24gaXNBbnlPZigpIHtcclxuICAgIHZhciBtYXRjaGVycyA9IFtdO1xyXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICBtYXRjaGVyc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChhY3Rpb24pIHtcclxuICAgICAgICByZXR1cm4gbWF0Y2hlcnMuc29tZShmdW5jdGlvbiAobWF0Y2hlcikgeyByZXR1cm4gbWF0Y2hlcyhtYXRjaGVyLCBhY3Rpb24pOyB9KTtcclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gaXNBbGxPZigpIHtcclxuICAgIHZhciBtYXRjaGVycyA9IFtdO1xyXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICBtYXRjaGVyc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChhY3Rpb24pIHtcclxuICAgICAgICByZXR1cm4gbWF0Y2hlcnMuZXZlcnkoZnVuY3Rpb24gKG1hdGNoZXIpIHsgcmV0dXJuIG1hdGNoZXMobWF0Y2hlciwgYWN0aW9uKTsgfSk7XHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIGhhc0V4cGVjdGVkUmVxdWVzdE1ldGFkYXRhKGFjdGlvbiwgdmFsaWRTdGF0dXMpIHtcclxuICAgIGlmICghYWN0aW9uIHx8ICFhY3Rpb24ubWV0YSlcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB2YXIgaGFzVmFsaWRSZXF1ZXN0SWQgPSB0eXBlb2YgYWN0aW9uLm1ldGEucmVxdWVzdElkID09PSBcInN0cmluZ1wiO1xyXG4gICAgdmFyIGhhc1ZhbGlkUmVxdWVzdFN0YXR1cyA9IHZhbGlkU3RhdHVzLmluZGV4T2YoYWN0aW9uLm1ldGEucmVxdWVzdFN0YXR1cykgPiAtMTtcclxuICAgIHJldHVybiBoYXNWYWxpZFJlcXVlc3RJZCAmJiBoYXNWYWxpZFJlcXVlc3RTdGF0dXM7XHJcbn1cclxuZnVuY3Rpb24gaXNBc3luY1RodW5rQXJyYXkoYSkge1xyXG4gICAgcmV0dXJuIHR5cGVvZiBhWzBdID09PSBcImZ1bmN0aW9uXCIgJiYgXCJwZW5kaW5nXCIgaW4gYVswXSAmJiBcImZ1bGZpbGxlZFwiIGluIGFbMF0gJiYgXCJyZWplY3RlZFwiIGluIGFbMF07XHJcbn1cclxuZnVuY3Rpb24gaXNQZW5kaW5nKCkge1xyXG4gICAgdmFyIGFzeW5jVGh1bmtzID0gW107XHJcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgIGFzeW5jVGh1bmtzW19pXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICB9XHJcbiAgICBpZiAoYXN5bmNUaHVua3MubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChhY3Rpb24pIHsgcmV0dXJuIGhhc0V4cGVjdGVkUmVxdWVzdE1ldGFkYXRhKGFjdGlvbiwgW1wicGVuZGluZ1wiXSk7IH07XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzQXN5bmNUaHVua0FycmF5KGFzeW5jVGh1bmtzKSkge1xyXG4gICAgICAgIHJldHVybiBpc1BlbmRpbmcoKShhc3luY1RodW5rc1swXSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKGFjdGlvbikge1xyXG4gICAgICAgIHZhciBtYXRjaGVycyA9IGFzeW5jVGh1bmtzLm1hcChmdW5jdGlvbiAoYXN5bmNUaHVuaykgeyByZXR1cm4gYXN5bmNUaHVuay5wZW5kaW5nOyB9KTtcclxuICAgICAgICB2YXIgY29tYmluZWRNYXRjaGVyID0gaXNBbnlPZi5hcHBseSh2b2lkIDAsIG1hdGNoZXJzKTtcclxuICAgICAgICByZXR1cm4gY29tYmluZWRNYXRjaGVyKGFjdGlvbik7XHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIGlzUmVqZWN0ZWQoKSB7XHJcbiAgICB2YXIgYXN5bmNUaHVua3MgPSBbXTtcclxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgYXN5bmNUaHVua3NbX2ldID0gYXJndW1lbnRzW19pXTtcclxuICAgIH1cclxuICAgIGlmIChhc3luY1RodW5rcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGFjdGlvbikgeyByZXR1cm4gaGFzRXhwZWN0ZWRSZXF1ZXN0TWV0YWRhdGEoYWN0aW9uLCBbXCJyZWplY3RlZFwiXSk7IH07XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzQXN5bmNUaHVua0FycmF5KGFzeW5jVGh1bmtzKSkge1xyXG4gICAgICAgIHJldHVybiBpc1JlamVjdGVkKCkoYXN5bmNUaHVua3NbMF0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChhY3Rpb24pIHtcclxuICAgICAgICB2YXIgbWF0Y2hlcnMgPSBhc3luY1RodW5rcy5tYXAoZnVuY3Rpb24gKGFzeW5jVGh1bmspIHsgcmV0dXJuIGFzeW5jVGh1bmsucmVqZWN0ZWQ7IH0pO1xyXG4gICAgICAgIHZhciBjb21iaW5lZE1hdGNoZXIgPSBpc0FueU9mLmFwcGx5KHZvaWQgMCwgbWF0Y2hlcnMpO1xyXG4gICAgICAgIHJldHVybiBjb21iaW5lZE1hdGNoZXIoYWN0aW9uKTtcclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gaXNSZWplY3RlZFdpdGhWYWx1ZSgpIHtcclxuICAgIHZhciBhc3luY1RodW5rcyA9IFtdO1xyXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICBhc3luY1RodW5rc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgfVxyXG4gICAgdmFyIGhhc0ZsYWcgPSBmdW5jdGlvbiAoYWN0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIGFjdGlvbiAmJiBhY3Rpb24ubWV0YSAmJiBhY3Rpb24ubWV0YS5yZWplY3RlZFdpdGhWYWx1ZTtcclxuICAgIH07XHJcbiAgICBpZiAoYXN5bmNUaHVua3MubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChhY3Rpb24pIHtcclxuICAgICAgICAgICAgdmFyIGNvbWJpbmVkTWF0Y2hlciA9IGlzQWxsT2YoaXNSZWplY3RlZC5hcHBseSh2b2lkIDAsIGFzeW5jVGh1bmtzKSwgaGFzRmxhZyk7XHJcbiAgICAgICAgICAgIHJldHVybiBjb21iaW5lZE1hdGNoZXIoYWN0aW9uKTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKCFpc0FzeW5jVGh1bmtBcnJheShhc3luY1RodW5rcykpIHtcclxuICAgICAgICByZXR1cm4gaXNSZWplY3RlZFdpdGhWYWx1ZSgpKGFzeW5jVGh1bmtzWzBdKTtcclxuICAgIH1cclxuICAgIHJldHVybiBmdW5jdGlvbiAoYWN0aW9uKSB7XHJcbiAgICAgICAgdmFyIGNvbWJpbmVkTWF0Y2hlciA9IGlzQWxsT2YoaXNSZWplY3RlZC5hcHBseSh2b2lkIDAsIGFzeW5jVGh1bmtzKSwgaGFzRmxhZyk7XHJcbiAgICAgICAgcmV0dXJuIGNvbWJpbmVkTWF0Y2hlcihhY3Rpb24pO1xyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiBpc0Z1bGZpbGxlZCgpIHtcclxuICAgIHZhciBhc3luY1RodW5rcyA9IFtdO1xyXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICBhc3luY1RodW5rc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgfVxyXG4gICAgaWYgKGFzeW5jVGh1bmtzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoYWN0aW9uKSB7IHJldHVybiBoYXNFeHBlY3RlZFJlcXVlc3RNZXRhZGF0YShhY3Rpb24sIFtcImZ1bGZpbGxlZFwiXSk7IH07XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzQXN5bmNUaHVua0FycmF5KGFzeW5jVGh1bmtzKSkge1xyXG4gICAgICAgIHJldHVybiBpc0Z1bGZpbGxlZCgpKGFzeW5jVGh1bmtzWzBdKTtcclxuICAgIH1cclxuICAgIHJldHVybiBmdW5jdGlvbiAoYWN0aW9uKSB7XHJcbiAgICAgICAgdmFyIG1hdGNoZXJzID0gYXN5bmNUaHVua3MubWFwKGZ1bmN0aW9uIChhc3luY1RodW5rKSB7IHJldHVybiBhc3luY1RodW5rLmZ1bGZpbGxlZDsgfSk7XHJcbiAgICAgICAgdmFyIGNvbWJpbmVkTWF0Y2hlciA9IGlzQW55T2YuYXBwbHkodm9pZCAwLCBtYXRjaGVycyk7XHJcbiAgICAgICAgcmV0dXJuIGNvbWJpbmVkTWF0Y2hlcihhY3Rpb24pO1xyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiBpc0FzeW5jVGh1bmtBY3Rpb24oKSB7XHJcbiAgICB2YXIgYXN5bmNUaHVua3MgPSBbXTtcclxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgYXN5bmNUaHVua3NbX2ldID0gYXJndW1lbnRzW19pXTtcclxuICAgIH1cclxuICAgIGlmIChhc3luY1RodW5rcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGFjdGlvbikgeyByZXR1cm4gaGFzRXhwZWN0ZWRSZXF1ZXN0TWV0YWRhdGEoYWN0aW9uLCBbXCJwZW5kaW5nXCIsIFwiZnVsZmlsbGVkXCIsIFwicmVqZWN0ZWRcIl0pOyB9O1xyXG4gICAgfVxyXG4gICAgaWYgKCFpc0FzeW5jVGh1bmtBcnJheShhc3luY1RodW5rcykpIHtcclxuICAgICAgICByZXR1cm4gaXNBc3luY1RodW5rQWN0aW9uKCkoYXN5bmNUaHVua3NbMF0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChhY3Rpb24pIHtcclxuICAgICAgICB2YXIgbWF0Y2hlcnMgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBfaSA9IDAsIGFzeW5jVGh1bmtzXzEgPSBhc3luY1RodW5rczsgX2kgPCBhc3luY1RodW5rc18xLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgICAgICB2YXIgYXN5bmNUaHVuayA9IGFzeW5jVGh1bmtzXzFbX2ldO1xyXG4gICAgICAgICAgICBtYXRjaGVycy5wdXNoKGFzeW5jVGh1bmsucGVuZGluZywgYXN5bmNUaHVuay5yZWplY3RlZCwgYXN5bmNUaHVuay5mdWxmaWxsZWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgY29tYmluZWRNYXRjaGVyID0gaXNBbnlPZi5hcHBseSh2b2lkIDAsIG1hdGNoZXJzKTtcclxuICAgICAgICByZXR1cm4gY29tYmluZWRNYXRjaGVyKGFjdGlvbik7XHJcbiAgICB9O1xyXG59XHJcbi8vIHNyYy9saXN0ZW5lck1pZGRsZXdhcmUvdXRpbHMudHNcclxudmFyIGFzc2VydEZ1bmN0aW9uID0gZnVuY3Rpb24gKGZ1bmMsIGV4cGVjdGVkKSB7XHJcbiAgICBpZiAodHlwZW9mIGZ1bmMgIT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoZXhwZWN0ZWQgKyBcIiBpcyBub3QgYSBmdW5jdGlvblwiKTtcclxuICAgIH1cclxufTtcclxudmFyIG5vb3AgPSBmdW5jdGlvbiAoKSB7XHJcbn07XHJcbnZhciBjYXRjaFJlamVjdGlvbiA9IGZ1bmN0aW9uIChwcm9taXNlMiwgb25FcnJvcikge1xyXG4gICAgaWYgKG9uRXJyb3IgPT09IHZvaWQgMCkgeyBvbkVycm9yID0gbm9vcDsgfVxyXG4gICAgcHJvbWlzZTIuY2F0Y2gob25FcnJvcik7XHJcbiAgICByZXR1cm4gcHJvbWlzZTI7XHJcbn07XHJcbnZhciBhZGRBYm9ydFNpZ25hbExpc3RlbmVyID0gZnVuY3Rpb24gKGFib3J0U2lnbmFsLCBjYWxsYmFjaykge1xyXG4gICAgYWJvcnRTaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIGNhbGxiYWNrLCB7IG9uY2U6IHRydWUgfSk7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gYWJvcnRTaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIGNhbGxiYWNrKTsgfTtcclxufTtcclxudmFyIGFib3J0Q29udHJvbGxlcldpdGhSZWFzb24gPSBmdW5jdGlvbiAoYWJvcnRDb250cm9sbGVyLCByZWFzb24pIHtcclxuICAgIHZhciBzaWduYWwgPSBhYm9ydENvbnRyb2xsZXIuc2lnbmFsO1xyXG4gICAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKCEoXCJyZWFzb25cIiBpbiBzaWduYWwpKSB7XHJcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHNpZ25hbCwgXCJyZWFzb25cIiwge1xyXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICB2YWx1ZTogcmVhc29uLFxyXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXHJcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICA7XHJcbiAgICBhYm9ydENvbnRyb2xsZXIuYWJvcnQocmVhc29uKTtcclxufTtcclxuLy8gc3JjL2xpc3RlbmVyTWlkZGxld2FyZS9leGNlcHRpb25zLnRzXHJcbnZhciB0YXNrID0gXCJ0YXNrXCI7XHJcbnZhciBsaXN0ZW5lciA9IFwibGlzdGVuZXJcIjtcclxudmFyIGNvbXBsZXRlZCA9IFwiY29tcGxldGVkXCI7XHJcbnZhciBjYW5jZWxsZWQgPSBcImNhbmNlbGxlZFwiO1xyXG52YXIgdGFza0NhbmNlbGxlZCA9IFwidGFzay1cIiArIGNhbmNlbGxlZDtcclxudmFyIHRhc2tDb21wbGV0ZWQgPSBcInRhc2stXCIgKyBjb21wbGV0ZWQ7XHJcbnZhciBsaXN0ZW5lckNhbmNlbGxlZCA9IGxpc3RlbmVyICsgXCItXCIgKyBjYW5jZWxsZWQ7XHJcbnZhciBsaXN0ZW5lckNvbXBsZXRlZCA9IGxpc3RlbmVyICsgXCItXCIgKyBjb21wbGV0ZWQ7XHJcbnZhciBUYXNrQWJvcnRFcnJvciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIFRhc2tBYm9ydEVycm9yKGNvZGUpIHtcclxuICAgICAgICB0aGlzLmNvZGUgPSBjb2RlO1xyXG4gICAgICAgIHRoaXMubmFtZSA9IFwiVGFza0Fib3J0RXJyb3JcIjtcclxuICAgICAgICB0aGlzLm1lc3NhZ2UgPSB0YXNrICsgXCIgXCIgKyBjYW5jZWxsZWQgKyBcIiAocmVhc29uOiBcIiArIGNvZGUgKyBcIilcIjtcclxuICAgIH1cclxuICAgIHJldHVybiBUYXNrQWJvcnRFcnJvcjtcclxufSgpKTtcclxuLy8gc3JjL2xpc3RlbmVyTWlkZGxld2FyZS90YXNrLnRzXHJcbnZhciB2YWxpZGF0ZUFjdGl2ZSA9IGZ1bmN0aW9uIChzaWduYWwpIHtcclxuICAgIGlmIChzaWduYWwuYWJvcnRlZCkge1xyXG4gICAgICAgIHRocm93IG5ldyBUYXNrQWJvcnRFcnJvcihzaWduYWwucmVhc29uKTtcclxuICAgIH1cclxufTtcclxuZnVuY3Rpb24gcmFjZVdpdGhTaWduYWwoc2lnbmFsLCBwcm9taXNlMikge1xyXG4gICAgdmFyIGNsZWFudXAgPSBub29wO1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICB2YXIgbm90aWZ5UmVqZWN0aW9uID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVqZWN0KG5ldyBUYXNrQWJvcnRFcnJvcihzaWduYWwucmVhc29uKSk7IH07XHJcbiAgICAgICAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XHJcbiAgICAgICAgICAgIG5vdGlmeVJlamVjdGlvbigpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNsZWFudXAgPSBhZGRBYm9ydFNpZ25hbExpc3RlbmVyKHNpZ25hbCwgbm90aWZ5UmVqZWN0aW9uKTtcclxuICAgICAgICBwcm9taXNlMi5maW5hbGx5KGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNsZWFudXAoKTsgfSkudGhlbihyZXNvbHZlLCByZWplY3QpO1xyXG4gICAgfSkuZmluYWxseShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgY2xlYW51cCA9IG5vb3A7XHJcbiAgICB9KTtcclxufVxyXG52YXIgcnVuVGFzayA9IGZ1bmN0aW9uICh0YXNrMiwgY2xlYW5VcCkgeyByZXR1cm4gX19hc3luYyh2b2lkIDAsIG51bGwsIGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciB2YWx1ZSwgZXJyb3JfMTtcclxuICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2MpIHtcclxuICAgICAgICBzd2l0Y2ggKF9jLmxhYmVsKSB7XHJcbiAgICAgICAgICAgIGNhc2UgMDpcclxuICAgICAgICAgICAgICAgIF9jLnRyeXMucHVzaChbMCwgMywgNCwgNV0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgUHJvbWlzZS5yZXNvbHZlKCldO1xyXG4gICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgICBfYy5zZW50KCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCB0YXNrMigpXTtcclxuICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSBfYy5zZW50KCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IFwib2tcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgfV07XHJcbiAgICAgICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgICAgICAgIGVycm9yXzEgPSBfYy5zZW50KCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IGVycm9yXzEgaW5zdGFuY2VvZiBUYXNrQWJvcnRFcnJvciA/IFwiY2FuY2VsbGVkXCIgOiBcInJlamVjdGVkXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvcl8xXHJcbiAgICAgICAgICAgICAgICAgICAgfV07XHJcbiAgICAgICAgICAgIGNhc2UgNDpcclxuICAgICAgICAgICAgICAgIGNsZWFuVXAgPT0gbnVsbCA/IHZvaWQgMCA6IGNsZWFuVXAoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbNyAvKmVuZGZpbmFsbHkqL107XHJcbiAgICAgICAgICAgIGNhc2UgNTogcmV0dXJuIFsyIC8qcmV0dXJuKi9dO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59KTsgfTtcclxudmFyIGNyZWF0ZVBhdXNlID0gZnVuY3Rpb24gKHNpZ25hbCkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChwcm9taXNlMikge1xyXG4gICAgICAgIHJldHVybiBjYXRjaFJlamVjdGlvbihyYWNlV2l0aFNpZ25hbChzaWduYWwsIHByb21pc2UyKS50aGVuKGZ1bmN0aW9uIChvdXRwdXQpIHtcclxuICAgICAgICAgICAgdmFsaWRhdGVBY3RpdmUoc2lnbmFsKTtcclxuICAgICAgICAgICAgcmV0dXJuIG91dHB1dDtcclxuICAgICAgICB9KSk7XHJcbiAgICB9O1xyXG59O1xyXG52YXIgY3JlYXRlRGVsYXkgPSBmdW5jdGlvbiAoc2lnbmFsKSB7XHJcbiAgICB2YXIgcGF1c2UgPSBjcmVhdGVQYXVzZShzaWduYWwpO1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0aW1lb3V0TXMpIHtcclxuICAgICAgICByZXR1cm4gcGF1c2UobmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmV0dXJuIHNldFRpbWVvdXQocmVzb2x2ZSwgdGltZW91dE1zKTsgfSkpO1xyXG4gICAgfTtcclxufTtcclxuLy8gc3JjL2xpc3RlbmVyTWlkZGxld2FyZS9pbmRleC50c1xyXG52YXIgYXNzaWduID0gT2JqZWN0LmFzc2lnbjtcclxudmFyIElOVEVSTkFMX05JTF9UT0tFTiA9IHt9O1xyXG52YXIgYWxtID0gXCJsaXN0ZW5lck1pZGRsZXdhcmVcIjtcclxudmFyIGNyZWF0ZUZvcmsgPSBmdW5jdGlvbiAocGFyZW50QWJvcnRTaWduYWwsIHBhcmVudEJsb2NraW5nUHJvbWlzZXMpIHtcclxuICAgIHZhciBsaW5rQ29udHJvbGxlcnMgPSBmdW5jdGlvbiAoY29udHJvbGxlcikgeyByZXR1cm4gYWRkQWJvcnRTaWduYWxMaXN0ZW5lcihwYXJlbnRBYm9ydFNpZ25hbCwgZnVuY3Rpb24gKCkgeyByZXR1cm4gYWJvcnRDb250cm9sbGVyV2l0aFJlYXNvbihjb250cm9sbGVyLCBwYXJlbnRBYm9ydFNpZ25hbC5yZWFzb24pOyB9KTsgfTtcclxuICAgIHJldHVybiBmdW5jdGlvbiAodGFza0V4ZWN1dG9yLCBvcHRzKSB7XHJcbiAgICAgICAgYXNzZXJ0RnVuY3Rpb24odGFza0V4ZWN1dG9yLCBcInRhc2tFeGVjdXRvclwiKTtcclxuICAgICAgICB2YXIgY2hpbGRBYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XHJcbiAgICAgICAgbGlua0NvbnRyb2xsZXJzKGNoaWxkQWJvcnRDb250cm9sbGVyKTtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gcnVuVGFzayhmdW5jdGlvbiAoKSB7IHJldHVybiBfX2FzeW5jKHZvaWQgMCwgbnVsbCwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0MjtcclxuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYykge1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChfYy5sYWJlbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVBY3RpdmUocGFyZW50QWJvcnRTaWduYWwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZUFjdGl2ZShjaGlsZEFib3J0Q29udHJvbGxlci5zaWduYWwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCB0YXNrRXhlY3V0b3Ioe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdXNlOiBjcmVhdGVQYXVzZShjaGlsZEFib3J0Q29udHJvbGxlci5zaWduYWwpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5OiBjcmVhdGVEZWxheShjaGlsZEFib3J0Q29udHJvbGxlci5zaWduYWwpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hbDogY2hpbGRBYm9ydENvbnRyb2xsZXIuc2lnbmFsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KV07XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQyID0gX2Muc2VudCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZUFjdGl2ZShjaGlsZEFib3J0Q29udHJvbGxlci5zaWduYWwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgcmVzdWx0Ml07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pOyB9LCBmdW5jdGlvbiAoKSB7IHJldHVybiBhYm9ydENvbnRyb2xsZXJXaXRoUmVhc29uKGNoaWxkQWJvcnRDb250cm9sbGVyLCB0YXNrQ29tcGxldGVkKTsgfSk7XHJcbiAgICAgICAgaWYgKG9wdHMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdHMuYXV0b0pvaW4pIHtcclxuICAgICAgICAgICAgcGFyZW50QmxvY2tpbmdQcm9taXNlcy5wdXNoKHJlc3VsdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHJlc3VsdDogY3JlYXRlUGF1c2UocGFyZW50QWJvcnRTaWduYWwpKHJlc3VsdCksXHJcbiAgICAgICAgICAgIGNhbmNlbDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgYWJvcnRDb250cm9sbGVyV2l0aFJlYXNvbihjaGlsZEFib3J0Q29udHJvbGxlciwgdGFza0NhbmNlbGxlZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgfTtcclxufTtcclxudmFyIGNyZWF0ZVRha2VQYXR0ZXJuID0gZnVuY3Rpb24gKHN0YXJ0TGlzdGVuaW5nLCBzaWduYWwpIHtcclxuICAgIHZhciB0YWtlID0gZnVuY3Rpb24gKHByZWRpY2F0ZSwgdGltZW91dCkgeyByZXR1cm4gX19hc3luYyh2b2lkIDAsIG51bGwsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgdW5zdWJzY3JpYmUsIHR1cGxlUHJvbWlzZSwgcHJvbWlzZXMsIG91dHB1dDtcclxuICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9jKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAoX2MubGFiZWwpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMDpcclxuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZUFjdGl2ZShzaWduYWwpO1xyXG4gICAgICAgICAgICAgICAgICAgIHVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgdHVwbGVQcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RvcExpc3RlbmluZyA9IHN0YXJ0TGlzdGVuaW5nKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWRpY2F0ZTogcHJlZGljYXRlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWZmZWN0OiBmdW5jdGlvbiAoYWN0aW9uLCBsaXN0ZW5lckFwaSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyQXBpLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJBcGkuZ2V0U3RhdGUoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJBcGkuZ2V0T3JpZ2luYWxTdGF0ZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3BMaXN0ZW5pbmcoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHByb21pc2VzID0gW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0dXBsZVByb21pc2VcclxuICAgICAgICAgICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aW1lb3V0ICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaChuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXR1cm4gc2V0VGltZW91dChyZXNvbHZlLCB0aW1lb3V0LCBudWxsKTsgfSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBfYy5sYWJlbCA9IDE7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgICAgICAgX2MudHJ5cy5wdXNoKFsxLCAsIDMsIDRdKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCByYWNlV2l0aFNpZ25hbChzaWduYWwsIFByb21pc2UucmFjZShwcm9taXNlcykpXTtcclxuICAgICAgICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSBfYy5zZW50KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVBY3RpdmUoc2lnbmFsKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgb3V0cHV0XTtcclxuICAgICAgICAgICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgICAgICAgICAgICB1bnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNyAvKmVuZGZpbmFsbHkqL107XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBbMiAvKnJldHVybiovXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7IH07XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHByZWRpY2F0ZSwgdGltZW91dCkgeyByZXR1cm4gY2F0Y2hSZWplY3Rpb24odGFrZShwcmVkaWNhdGUsIHRpbWVvdXQpKTsgfTtcclxufTtcclxudmFyIGdldExpc3RlbmVyRW50cnlQcm9wc0Zyb20gPSBmdW5jdGlvbiAob3B0aW9ucykge1xyXG4gICAgdmFyIHR5cGUgPSBvcHRpb25zLnR5cGUsIGFjdGlvbkNyZWF0b3IgPSBvcHRpb25zLmFjdGlvbkNyZWF0b3IsIG1hdGNoZXIgPSBvcHRpb25zLm1hdGNoZXIsIHByZWRpY2F0ZSA9IG9wdGlvbnMucHJlZGljYXRlLCBlZmZlY3QgPSBvcHRpb25zLmVmZmVjdDtcclxuICAgIGlmICh0eXBlKSB7XHJcbiAgICAgICAgcHJlZGljYXRlID0gY3JlYXRlQWN0aW9uKHR5cGUpLm1hdGNoO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoYWN0aW9uQ3JlYXRvcikge1xyXG4gICAgICAgIHR5cGUgPSBhY3Rpb25DcmVhdG9yLnR5cGU7XHJcbiAgICAgICAgcHJlZGljYXRlID0gYWN0aW9uQ3JlYXRvci5tYXRjaDtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKG1hdGNoZXIpIHtcclxuICAgICAgICBwcmVkaWNhdGUgPSBtYXRjaGVyO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAocHJlZGljYXRlKSB7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDcmVhdGluZyBvciByZW1vdmluZyBhIGxpc3RlbmVyIHJlcXVpcmVzIG9uZSBvZiB0aGUga25vd24gZmllbGRzIGZvciBtYXRjaGluZyBhbiBhY3Rpb25cIik7XHJcbiAgICB9XHJcbiAgICBhc3NlcnRGdW5jdGlvbihlZmZlY3QsIFwib3B0aW9ucy5saXN0ZW5lclwiKTtcclxuICAgIHJldHVybiB7IHByZWRpY2F0ZTogcHJlZGljYXRlLCB0eXBlOiB0eXBlLCBlZmZlY3Q6IGVmZmVjdCB9O1xyXG59O1xyXG52YXIgY3JlYXRlTGlzdGVuZXJFbnRyeSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XHJcbiAgICB2YXIgX2MgPSBnZXRMaXN0ZW5lckVudHJ5UHJvcHNGcm9tKG9wdGlvbnMpLCB0eXBlID0gX2MudHlwZSwgcHJlZGljYXRlID0gX2MucHJlZGljYXRlLCBlZmZlY3QgPSBfYy5lZmZlY3Q7XHJcbiAgICB2YXIgaWQgPSBuYW5vaWQoKTtcclxuICAgIHZhciBlbnRyeSA9IHtcclxuICAgICAgICBpZDogaWQsXHJcbiAgICAgICAgZWZmZWN0OiBlZmZlY3QsXHJcbiAgICAgICAgdHlwZTogdHlwZSxcclxuICAgICAgICBwcmVkaWNhdGU6IHByZWRpY2F0ZSxcclxuICAgICAgICBwZW5kaW5nOiBuZXcgU2V0KCksXHJcbiAgICAgICAgdW5zdWJzY3JpYmU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5zdWJzY3JpYmUgbm90IGluaXRpYWxpemVkXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICByZXR1cm4gZW50cnk7XHJcbn07XHJcbnZhciBjYW5jZWxBY3RpdmVMaXN0ZW5lcnMgPSBmdW5jdGlvbiAoZW50cnkpIHtcclxuICAgIGVudHJ5LnBlbmRpbmcuZm9yRWFjaChmdW5jdGlvbiAoY29udHJvbGxlcikge1xyXG4gICAgICAgIGFib3J0Q29udHJvbGxlcldpdGhSZWFzb24oY29udHJvbGxlciwgbGlzdGVuZXJDYW5jZWxsZWQpO1xyXG4gICAgfSk7XHJcbn07XHJcbnZhciBjcmVhdGVDbGVhckxpc3RlbmVyTWlkZGxld2FyZSA9IGZ1bmN0aW9uIChsaXN0ZW5lck1hcCkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBsaXN0ZW5lck1hcC5mb3JFYWNoKGNhbmNlbEFjdGl2ZUxpc3RlbmVycyk7XHJcbiAgICAgICAgbGlzdGVuZXJNYXAuY2xlYXIoKTtcclxuICAgIH07XHJcbn07XHJcbnZhciBzYWZlbHlOb3RpZnlFcnJvciA9IGZ1bmN0aW9uIChlcnJvckhhbmRsZXIsIGVycm9yVG9Ob3RpZnksIGVycm9ySW5mbykge1xyXG4gICAgdHJ5IHtcclxuICAgICAgICBlcnJvckhhbmRsZXIoZXJyb3JUb05vdGlmeSwgZXJyb3JJbmZvKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlcnJvckhhbmRsZXJFcnJvcikge1xyXG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aHJvdyBlcnJvckhhbmRsZXJFcnJvcjtcclxuICAgICAgICB9LCAwKTtcclxuICAgIH1cclxufTtcclxudmFyIGFkZExpc3RlbmVyID0gY3JlYXRlQWN0aW9uKGFsbSArIFwiL2FkZFwiKTtcclxudmFyIGNsZWFyQWxsTGlzdGVuZXJzID0gY3JlYXRlQWN0aW9uKGFsbSArIFwiL3JlbW92ZUFsbFwiKTtcclxudmFyIHJlbW92ZUxpc3RlbmVyID0gY3JlYXRlQWN0aW9uKGFsbSArIFwiL3JlbW92ZVwiKTtcclxudmFyIGRlZmF1bHRFcnJvckhhbmRsZXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgYXJncyA9IFtdO1xyXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICB9XHJcbiAgICBjb25zb2xlLmVycm9yLmFwcGx5KGNvbnNvbGUsIF9fc3ByZWFkQXJyYXkoW2FsbSArIFwiL2Vycm9yXCJdLCBhcmdzKSk7XHJcbn07XHJcbmZ1bmN0aW9uIGNyZWF0ZUxpc3RlbmVyTWlkZGxld2FyZShtaWRkbGV3YXJlT3B0aW9ucykge1xyXG4gICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgIGlmIChtaWRkbGV3YXJlT3B0aW9ucyA9PT0gdm9pZCAwKSB7IG1pZGRsZXdhcmVPcHRpb25zID0ge307IH1cclxuICAgIHZhciBsaXN0ZW5lck1hcCA9IG5ldyBNYXAoKTtcclxuICAgIHZhciBleHRyYSA9IG1pZGRsZXdhcmVPcHRpb25zLmV4dHJhLCBfYyA9IG1pZGRsZXdhcmVPcHRpb25zLm9uRXJyb3IsIG9uRXJyb3IgPSBfYyA9PT0gdm9pZCAwID8gZGVmYXVsdEVycm9ySGFuZGxlciA6IF9jO1xyXG4gICAgYXNzZXJ0RnVuY3Rpb24ob25FcnJvciwgXCJvbkVycm9yXCIpO1xyXG4gICAgdmFyIGluc2VydEVudHJ5ID0gZnVuY3Rpb24gKGVudHJ5KSB7XHJcbiAgICAgICAgZW50cnkudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBsaXN0ZW5lck1hcC5kZWxldGUoZW50cnkuaWQpOyB9O1xyXG4gICAgICAgIGxpc3RlbmVyTWFwLnNldChlbnRyeS5pZCwgZW50cnkpO1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoY2FuY2VsT3B0aW9ucykge1xyXG4gICAgICAgICAgICBlbnRyeS51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgICBpZiAoY2FuY2VsT3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogY2FuY2VsT3B0aW9ucy5jYW5jZWxBY3RpdmUpIHtcclxuICAgICAgICAgICAgICAgIGNhbmNlbEFjdGl2ZUxpc3RlbmVycyhlbnRyeSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgfTtcclxuICAgIHZhciBmaW5kTGlzdGVuZXJFbnRyeSA9IGZ1bmN0aW9uIChjb21wYXJhdG9yKSB7XHJcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYyA9IEFycmF5LmZyb20obGlzdGVuZXJNYXAudmFsdWVzKCkpOyBfaSA8IF9jLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgICAgICB2YXIgZW50cnkgPSBfY1tfaV07XHJcbiAgICAgICAgICAgIGlmIChjb21wYXJhdG9yKGVudHJ5KSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB2b2lkIDA7XHJcbiAgICB9O1xyXG4gICAgdmFyIHN0YXJ0TGlzdGVuaW5nID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcclxuICAgICAgICB2YXIgZW50cnkgPSBmaW5kTGlzdGVuZXJFbnRyeShmdW5jdGlvbiAoZXhpc3RpbmdFbnRyeSkgeyByZXR1cm4gZXhpc3RpbmdFbnRyeS5lZmZlY3QgPT09IG9wdGlvbnMuZWZmZWN0OyB9KTtcclxuICAgICAgICBpZiAoIWVudHJ5KSB7XHJcbiAgICAgICAgICAgIGVudHJ5ID0gY3JlYXRlTGlzdGVuZXJFbnRyeShvcHRpb25zKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGluc2VydEVudHJ5KGVudHJ5KTtcclxuICAgIH07XHJcbiAgICB2YXIgc3RvcExpc3RlbmluZyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XHJcbiAgICAgICAgdmFyIF9jID0gZ2V0TGlzdGVuZXJFbnRyeVByb3BzRnJvbShvcHRpb25zKSwgdHlwZSA9IF9jLnR5cGUsIGVmZmVjdCA9IF9jLmVmZmVjdCwgcHJlZGljYXRlID0gX2MucHJlZGljYXRlO1xyXG4gICAgICAgIHZhciBlbnRyeSA9IGZpbmRMaXN0ZW5lckVudHJ5KGZ1bmN0aW9uIChlbnRyeTIpIHtcclxuICAgICAgICAgICAgdmFyIG1hdGNoUHJlZGljYXRlT3JUeXBlID0gdHlwZW9mIHR5cGUgPT09IFwic3RyaW5nXCIgPyBlbnRyeTIudHlwZSA9PT0gdHlwZSA6IGVudHJ5Mi5wcmVkaWNhdGUgPT09IHByZWRpY2F0ZTtcclxuICAgICAgICAgICAgcmV0dXJuIG1hdGNoUHJlZGljYXRlT3JUeXBlICYmIGVudHJ5Mi5lZmZlY3QgPT09IGVmZmVjdDtcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoZW50cnkpIHtcclxuICAgICAgICAgICAgZW50cnkudW5zdWJzY3JpYmUoKTtcclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuY2FuY2VsQWN0aXZlKSB7XHJcbiAgICAgICAgICAgICAgICBjYW5jZWxBY3RpdmVMaXN0ZW5lcnMoZW50cnkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAhIWVudHJ5O1xyXG4gICAgfTtcclxuICAgIHZhciBub3RpZnlMaXN0ZW5lciA9IGZ1bmN0aW9uIChlbnRyeSwgYWN0aW9uLCBhcGksIGdldE9yaWdpbmFsU3RhdGUpIHsgcmV0dXJuIF9fYXN5bmMoX3RoaXMsIG51bGwsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgaW50ZXJuYWxUYXNrQ29udHJvbGxlciwgdGFrZSwgYXV0b0pvaW5Qcm9taXNlcywgbGlzdGVuZXJFcnJvcl8xO1xyXG4gICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2MpIHtcclxuICAgICAgICAgICAgc3dpdGNoIChfYy5sYWJlbCkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAgICAgICAgIGludGVybmFsVGFza0NvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGFrZSA9IGNyZWF0ZVRha2VQYXR0ZXJuKHN0YXJ0TGlzdGVuaW5nLCBpbnRlcm5hbFRhc2tDb250cm9sbGVyLnNpZ25hbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYXV0b0pvaW5Qcm9taXNlcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIF9jLmxhYmVsID0gMTtcclxuICAgICAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgICAgICBfYy50cnlzLnB1c2goWzEsIDMsIDQsIDZdKTtcclxuICAgICAgICAgICAgICAgICAgICBlbnRyeS5wZW5kaW5nLmFkZChpbnRlcm5hbFRhc2tDb250cm9sbGVyKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCBQcm9taXNlLnJlc29sdmUoZW50cnkuZWZmZWN0KGFjdGlvbiwgYXNzaWduKHt9LCBhcGksIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldE9yaWdpbmFsU3RhdGU6IGdldE9yaWdpbmFsU3RhdGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb246IGZ1bmN0aW9uIChwcmVkaWNhdGUsIHRpbWVvdXQpIHsgcmV0dXJuIHRha2UocHJlZGljYXRlLCB0aW1lb3V0KS50aGVuKEJvb2xlYW4pOyB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFrZTogdGFrZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5OiBjcmVhdGVEZWxheShpbnRlcm5hbFRhc2tDb250cm9sbGVyLnNpZ25hbCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXVzZTogY3JlYXRlUGF1c2UoaW50ZXJuYWxUYXNrQ29udHJvbGxlci5zaWduYWwpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IGV4dHJhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmFsOiBpbnRlcm5hbFRhc2tDb250cm9sbGVyLnNpZ25hbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcms6IGNyZWF0ZUZvcmsoaW50ZXJuYWxUYXNrQ29udHJvbGxlci5zaWduYWwsIGF1dG9Kb2luUHJvbWlzZXMpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zdWJzY3JpYmU6IGVudHJ5LnVuc3Vic2NyaWJlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJNYXAuc2V0KGVudHJ5LmlkLCBlbnRyeSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsQWN0aXZlTGlzdGVuZXJzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnkucGVuZGluZy5mb3JFYWNoKGZ1bmN0aW9uIChjb250cm9sbGVyLCBfLCBzZXQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRyb2xsZXIgIT09IGludGVybmFsVGFza0NvbnRyb2xsZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0Q29udHJvbGxlcldpdGhSZWFzb24oY29udHJvbGxlciwgbGlzdGVuZXJDYW5jZWxsZWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0LmRlbGV0ZShjb250cm9sbGVyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSkpXTtcclxuICAgICAgICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgICAgICAgICBfYy5zZW50KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszIC8qYnJlYWsqLywgNl07XHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJFcnJvcl8xID0gX2Muc2VudCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghKGxpc3RlbmVyRXJyb3JfMSBpbnN0YW5jZW9mIFRhc2tBYm9ydEVycm9yKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzYWZlbHlOb3RpZnlFcnJvcihvbkVycm9yLCBsaXN0ZW5lckVycm9yXzEsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlZEJ5OiBcImVmZmVjdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMgLypicmVhayovLCA2XTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFs0IC8qeWllbGQqLywgUHJvbWlzZS5hbGxTZXR0bGVkKGF1dG9Kb2luUHJvbWlzZXMpXTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNTpcclxuICAgICAgICAgICAgICAgICAgICBfYy5zZW50KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYWJvcnRDb250cm9sbGVyV2l0aFJlYXNvbihpbnRlcm5hbFRhc2tDb250cm9sbGVyLCBsaXN0ZW5lckNvbXBsZXRlZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZW50cnkucGVuZGluZy5kZWxldGUoaW50ZXJuYWxUYXNrQ29udHJvbGxlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs3IC8qZW5kZmluYWxseSovXTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNjogcmV0dXJuIFsyIC8qcmV0dXJuKi9dO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTsgfTtcclxuICAgIHZhciBjbGVhckxpc3RlbmVyTWlkZGxld2FyZSA9IGNyZWF0ZUNsZWFyTGlzdGVuZXJNaWRkbGV3YXJlKGxpc3RlbmVyTWFwKTtcclxuICAgIHZhciBtaWRkbGV3YXJlID0gZnVuY3Rpb24gKGFwaSkgeyByZXR1cm4gZnVuY3Rpb24gKG5leHQpIHsgcmV0dXJuIGZ1bmN0aW9uIChhY3Rpb24pIHtcclxuICAgICAgICBpZiAoIWlzQWN0aW9uKGFjdGlvbikpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5leHQoYWN0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGFkZExpc3RlbmVyLm1hdGNoKGFjdGlvbikpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHN0YXJ0TGlzdGVuaW5nKGFjdGlvbi5wYXlsb2FkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNsZWFyQWxsTGlzdGVuZXJzLm1hdGNoKGFjdGlvbikpIHtcclxuICAgICAgICAgICAgY2xlYXJMaXN0ZW5lck1pZGRsZXdhcmUoKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVtb3ZlTGlzdGVuZXIubWF0Y2goYWN0aW9uKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gc3RvcExpc3RlbmluZyhhY3Rpb24ucGF5bG9hZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBvcmlnaW5hbFN0YXRlID0gYXBpLmdldFN0YXRlKCk7XHJcbiAgICAgICAgdmFyIGdldE9yaWdpbmFsU3RhdGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChvcmlnaW5hbFN0YXRlID09PSBJTlRFUk5BTF9OSUxfVE9LRU4pIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihhbG0gKyBcIjogZ2V0T3JpZ2luYWxTdGF0ZSBjYW4gb25seSBiZSBjYWxsZWQgc3luY2hyb25vdXNseVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxTdGF0ZTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHZhciByZXN1bHQ7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcmVzdWx0ID0gbmV4dChhY3Rpb24pO1xyXG4gICAgICAgICAgICBpZiAobGlzdGVuZXJNYXAuc2l6ZSA+IDApIHtcclxuICAgICAgICAgICAgICAgIHZhciBjdXJyZW50U3RhdGUgPSBhcGkuZ2V0U3RhdGUoKTtcclxuICAgICAgICAgICAgICAgIHZhciBsaXN0ZW5lckVudHJpZXMgPSBBcnJheS5mcm9tKGxpc3RlbmVyTWFwLnZhbHVlcygpKTtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIF9pID0gMCwgbGlzdGVuZXJFbnRyaWVzXzEgPSBsaXN0ZW5lckVudHJpZXM7IF9pIDwgbGlzdGVuZXJFbnRyaWVzXzEubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVudHJ5ID0gbGlzdGVuZXJFbnRyaWVzXzFbX2ldO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBydW5MaXN0ZW5lciA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bkxpc3RlbmVyID0gZW50cnkucHJlZGljYXRlKGFjdGlvbiwgY3VycmVudFN0YXRlLCBvcmlnaW5hbFN0YXRlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKHByZWRpY2F0ZUVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bkxpc3RlbmVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNhZmVseU5vdGlmeUVycm9yKG9uRXJyb3IsIHByZWRpY2F0ZUVycm9yLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZWRCeTogXCJwcmVkaWNhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFydW5MaXN0ZW5lcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgbm90aWZ5TGlzdGVuZXIoZW50cnksIGFjdGlvbiwgYXBpLCBnZXRPcmlnaW5hbFN0YXRlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgICAgb3JpZ2luYWxTdGF0ZSA9IElOVEVSTkFMX05JTF9UT0tFTjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH07IH07IH07XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIG1pZGRsZXdhcmU6IG1pZGRsZXdhcmUsXHJcbiAgICAgICAgc3RhcnRMaXN0ZW5pbmc6IHN0YXJ0TGlzdGVuaW5nLFxyXG4gICAgICAgIHN0b3BMaXN0ZW5pbmc6IHN0b3BMaXN0ZW5pbmcsXHJcbiAgICAgICAgY2xlYXJMaXN0ZW5lcnM6IGNsZWFyTGlzdGVuZXJNaWRkbGV3YXJlXHJcbiAgICB9O1xyXG59XHJcbi8vIHNyYy9hdXRvQmF0Y2hFbmhhbmNlci50c1xyXG52YXIgU0hPVUxEX0FVVE9CQVRDSCA9IFwiUlRLX2F1dG9CYXRjaFwiO1xyXG52YXIgcHJlcGFyZUF1dG9CYXRjaGVkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gZnVuY3Rpb24gKHBheWxvYWQpIHtcclxuICAgIHZhciBfYztcclxuICAgIHJldHVybiAoe1xyXG4gICAgICAgIHBheWxvYWQ6IHBheWxvYWQsXHJcbiAgICAgICAgbWV0YTogKF9jID0ge30sIF9jW1NIT1VMRF9BVVRPQkFUQ0hdID0gdHJ1ZSwgX2MpXHJcbiAgICB9KTtcclxufTsgfTtcclxudmFyIHByb21pc2U7XHJcbnZhciBxdWV1ZU1pY3JvdGFza1NoaW0gPSB0eXBlb2YgcXVldWVNaWNyb3Rhc2sgPT09IFwiZnVuY3Rpb25cIiA/IHF1ZXVlTWljcm90YXNrLmJpbmQodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvdyA6IHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgPyBnbG9iYWwgOiBnbG9iYWxUaGlzKSA6IGZ1bmN0aW9uIChjYikgeyByZXR1cm4gKHByb21pc2UgfHwgKHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoKSkpLnRoZW4oY2IpLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHsgcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgdGhyb3cgZXJyO1xyXG59LCAwKTsgfSk7IH07XHJcbnZhciBjcmVhdGVRdWV1ZVdpdGhUaW1lciA9IGZ1bmN0aW9uICh0aW1lb3V0KSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKG5vdGlmeSkge1xyXG4gICAgICAgIHNldFRpbWVvdXQobm90aWZ5LCB0aW1lb3V0KTtcclxuICAgIH07XHJcbn07XHJcbnZhciByQUYgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPyB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lIDogY3JlYXRlUXVldWVXaXRoVGltZXIoMTApO1xyXG52YXIgYXV0b0JhdGNoRW5oYW5jZXIgPSBmdW5jdGlvbiAob3B0aW9ucykge1xyXG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0geyB0eXBlOiBcInJhZlwiIH07IH1cclxuICAgIHJldHVybiBmdW5jdGlvbiAobmV4dCkgeyByZXR1cm4gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBhcmdzID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgc3RvcmUgPSBuZXh0LmFwcGx5KHZvaWQgMCwgYXJncyk7XHJcbiAgICAgICAgdmFyIG5vdGlmeWluZyA9IHRydWU7XHJcbiAgICAgICAgdmFyIHNob3VsZE5vdGlmeUF0RW5kT2ZUaWNrID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIG5vdGlmaWNhdGlvblF1ZXVlZCA9IGZhbHNlO1xyXG4gICAgICAgIHZhciBsaXN0ZW5lcnMgPSBuZXcgU2V0KCk7XHJcbiAgICAgICAgdmFyIHF1ZXVlQ2FsbGJhY2sgPSBvcHRpb25zLnR5cGUgPT09IFwidGlja1wiID8gcXVldWVNaWNyb3Rhc2tTaGltIDogb3B0aW9ucy50eXBlID09PSBcInJhZlwiID8gckFGIDogb3B0aW9ucy50eXBlID09PSBcImNhbGxiYWNrXCIgPyBvcHRpb25zLnF1ZXVlTm90aWZpY2F0aW9uIDogY3JlYXRlUXVldWVXaXRoVGltZXIob3B0aW9ucy50aW1lb3V0KTtcclxuICAgICAgICB2YXIgbm90aWZ5TGlzdGVuZXJzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBub3RpZmljYXRpb25RdWV1ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKHNob3VsZE5vdGlmeUF0RW5kT2ZUaWNrKSB7XHJcbiAgICAgICAgICAgICAgICBzaG91bGROb3RpZnlBdEVuZE9mVGljayA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgbGlzdGVuZXJzLmZvckVhY2goZnVuY3Rpb24gKGwpIHsgcmV0dXJuIGwoKTsgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdG9yZSwge1xyXG4gICAgICAgICAgICBzdWJzY3JpYmU6IGZ1bmN0aW9uIChsaXN0ZW5lcjIpIHtcclxuICAgICAgICAgICAgICAgIHZhciB3cmFwcGVkTGlzdGVuZXIgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBub3RpZnlpbmcgJiYgbGlzdGVuZXIyKCk7IH07XHJcbiAgICAgICAgICAgICAgICB2YXIgdW5zdWJzY3JpYmUgPSBzdG9yZS5zdWJzY3JpYmUod3JhcHBlZExpc3RlbmVyKTtcclxuICAgICAgICAgICAgICAgIGxpc3RlbmVycy5hZGQobGlzdGVuZXIyKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdW5zdWJzY3JpYmUoKTtcclxuICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcnMuZGVsZXRlKGxpc3RlbmVyMik7XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBkaXNwYXRjaDogZnVuY3Rpb24gKGFjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgdmFyIF9hO1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBub3RpZnlpbmcgPSAhKChfYSA9IGFjdGlvbiA9PSBudWxsID8gdm9pZCAwIDogYWN0aW9uLm1ldGEpID09IG51bGwgPyB2b2lkIDAgOiBfYVtTSE9VTERfQVVUT0JBVENIXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgc2hvdWxkTm90aWZ5QXRFbmRPZlRpY2sgPSAhbm90aWZ5aW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzaG91bGROb3RpZnlBdEVuZE9mVGljaykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW5vdGlmaWNhdGlvblF1ZXVlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpY2F0aW9uUXVldWVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXVlQ2FsbGJhY2sobm90aWZ5TGlzdGVuZXJzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RvcmUuZGlzcGF0Y2goYWN0aW9uKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vdGlmeWluZyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH07IH07XHJcbn07XHJcbi8vIHNyYy9pbmRleC50c1xyXG5lbmFibGVFUzUoKTtcclxuZXhwb3J0IHsgRW5oYW5jZXJBcnJheSwgTWlkZGxld2FyZUFycmF5LCBTSE9VTERfQVVUT0JBVENILCBUYXNrQWJvcnRFcnJvciwgYWRkTGlzdGVuZXIsIGF1dG9CYXRjaEVuaGFuY2VyLCBjbGVhckFsbExpc3RlbmVycywgY29uZmlndXJlU3RvcmUsIGNyZWF0ZUFjdGlvbiwgY3JlYXRlQWN0aW9uQ3JlYXRvckludmFyaWFudE1pZGRsZXdhcmUsIGNyZWF0ZUFzeW5jVGh1bmssIGNyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yLCBjcmVhdGVFbnRpdHlBZGFwdGVyLCBjcmVhdGVJbW11dGFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmUsIGNyZWF0ZUxpc3RlbmVyTWlkZGxld2FyZSwgZGVmYXVsdDIgYXMgY3JlYXRlTmV4dFN0YXRlLCBjcmVhdGVSZWR1Y2VyLCBjcmVhdGVTZWxlY3RvcjIgYXMgY3JlYXRlU2VsZWN0b3IsIGNyZWF0ZVNlcmlhbGl6YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZSwgY3JlYXRlU2xpY2UsIGN1cnJlbnQyIGFzIGN1cnJlbnQsIGZpbmROb25TZXJpYWxpemFibGVWYWx1ZSwgZnJlZXplLCBnZXREZWZhdWx0TWlkZGxld2FyZSwgZ2V0VHlwZSwgaXNBY3Rpb24sIGlzQWN0aW9uQ3JlYXRvciwgaXNBbGxPZiwgaXNBbnlPZiwgaXNBc3luY1RodW5rQWN0aW9uLCBpc0RyYWZ0NCBhcyBpc0RyYWZ0LCBpc0ZTQSBhcyBpc0ZsdXhTdGFuZGFyZEFjdGlvbiwgaXNGdWxmaWxsZWQsIGlzSW1tdXRhYmxlRGVmYXVsdCwgaXNQZW5kaW5nLCBpc1BsYWluLCBpc1BsYWluT2JqZWN0LCBpc1JlamVjdGVkLCBpc1JlamVjdGVkV2l0aFZhbHVlLCBtaW5pU2VyaWFsaXplRXJyb3IsIG5hbm9pZCwgb3JpZ2luYWwsIHByZXBhcmVBdXRvQmF0Y2hlZCwgcmVtb3ZlTGlzdGVuZXIsIHVud3JhcFJlc3VsdCB9O1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZWR1eC10b29sa2l0LmVzbS5qcy5tYXAiLCAiXG50eXBlIFJlcVBhcmFtcyA9IHtbazpzdHJpbmddOnN0cmluZ318dW5kZWZpbmVkIFxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVxdWVzdChcbiAgcGF0aDogc3RyaW5nLFxuICByZXFQYXJhbXM6UmVxUGFyYW1zLFxuICBpbml0PzogUmVxdWVzdEluaXQgfCB1bmRlZmluZWQsXG4gIGFwaVVybD86IHN0cmluZ1xuKTogUHJvbWlzZTxhbnk+IHtcbiAgY29uc3QgdXJsID0gKGFwaVVybCB8fCBwcm9jZXNzLmVudi5SRUFDVF9BUFBfQVBJVVJMKSArIHBhdGg7XG4gIC8vY29uc3QgcmVzID0gYXdhaXQgZmV0Y2godXJsLnJlcGxhY2UoLyhbXjpdXFwvKVxcLysvZywgXCIkMVwiKSwge1xuICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCh1cmwgKyAocmVxUGFyYW1zID8gKCc/JyArIG5ldyBVUkxTZWFyY2hQYXJhbXMoT2JqZWN0LmVudHJpZXMocmVxUGFyYW1zKSkudG9TdHJpbmcoKSkgOiAnJyksIHtcbiAgICAuLi4oaW5pdCA/IGluaXQgOiB7fSksXG4gICAgLy9oZWFkZXJzOiB7IC4uLihpbml0Py5oZWFkZXJzIHx8IHt9KSwgLi4uZ2V0QXV0aEhlYWRlcnMoKSB9XG4gIH0pO1xuICBpZiAoIXJlcy5vaykge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBgRmFpbHVyZSBsb2FkaW5nICR7cmVzLnVybH0gd2l0aCBzdGF0dXMgJHtyZXMuc3RhdHVzfSAoJHtyZXMuc3RhdHVzVGV4dH0pYDtcbiAgICBjb25zb2xlLmRpcihtZXNzYWdlKTtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKG1lc3NhZ2UpKVxuICB9XG4gIHJldHVybiBhd2FpdCByZXMuanNvbigpO1xufVxuXG5leHBvcnQgY2xhc3MgUGFnZTxUPiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBwYWdlOiBudW1iZXIsXG4gICAgcHVibGljIG51bUVsZW1lbnRzOiBudW1iZXIsXG4gICAgcHVibGljIHRvdGFsUGFnZXM6IG51bWJlcixcbiAgICBwdWJsaWMgdG90YWxFbGVtZW50czogbnVtYmVyLFxuICAgIHB1YmxpYyBlbGVtZW50czogVFtdLFxuICAgIHB1YmxpYyBmYWNldEZpZWxkc1RvQ291bnRzOiBNYXA8c3RyaW5nLCBNYXA8c3RyaW5nLCBudW1iZXI+PlxuICApIHt9XG5cbiAgbWFwPE5ld1R5cGU+KGZuOiAoVCkgPT4gTmV3VHlwZSkge1xuICAgIHJldHVybiBuZXcgUGFnZTxOZXdUeXBlPihcbiAgICAgIHRoaXMucGFnZSxcbiAgICAgIHRoaXMubnVtRWxlbWVudHMsXG4gICAgICB0aGlzLnRvdGFsUGFnZXMsXG4gICAgICB0aGlzLnRvdGFsRWxlbWVudHMsXG4gICAgICB0aGlzLmVsZW1lbnRzLm1hcChmbiksXG4gICAgICB0aGlzLmZhY2V0RmllbGRzVG9Db3VudHNcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRQYWdpbmF0ZWQ8UmVzVHlwZT4oXG4gIHBhdGg6IHN0cmluZyxcbiAgcmVxUGFyYW1zPzogUmVxUGFyYW1zLFxuICBhcGlVcmw/OiBzdHJpbmdcbik6IFByb21pc2U8UGFnZTxSZXNUeXBlPj4ge1xuICBjb25zdCByZXMgPSBhd2FpdCBnZXQ8YW55PihwYXRoLCByZXFQYXJhbXMsIGFwaVVybCk7XG5cbiAgcmV0dXJuIG5ldyBQYWdlPFJlc1R5cGU+KFxuXHRyZXMucGFnZSB8fCAwLFxuXHRyZXMubnVtRWxlbWVudHMgfHwgMCxcblx0cmVzLnRvdGFsUGFnZXMgfHwgMCxcblx0cmVzLnRvdGFsRWxlbWVudHMgfHwgMCxcblx0cmVzLmVsZW1lbnRzIHx8IFtdLFxuXHRyZXMuZmFjZXRGaWVsZHNUb0NvdW50cyB8fCBuZXcgTWFwKClcbiAgKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldDxSZXNUeXBlPihwYXRoOiBzdHJpbmcsIHJlcVBhcmFtcz86UmVxUGFyYW1zLCBhcGlVcmw/OiBzdHJpbmcpOiBQcm9taXNlPFJlc1R5cGU+IHtcbiAgcmV0dXJuIHJlcXVlc3QocGF0aCwgcmVxUGFyYW1zLCB1bmRlZmluZWQsIGFwaVVybCk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwb3N0PFJlcVR5cGUsIFJlc1R5cGUgPSBhbnk+KFxuICBwYXRoOiBzdHJpbmcsXG4gIHJlcVBhcmFtczogUmVxUGFyYW1zLFxuICBib2R5OiBSZXFUeXBlXG4pOiBQcm9taXNlPFJlc1R5cGU+IHtcbiAgcmV0dXJuIHJlcXVlc3QocGF0aCwgcmVxUGFyYW1zLCB7XG4gICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICBib2R5OiBKU09OLnN0cmluZ2lmeShib2R5KSxcbiAgICBoZWFkZXJzOiB7XG4gICAgICBcImNvbnRlbnQtdHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICB9LFxuICB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHB1dDxSZXFUeXBlLCBSZXNUeXBlID0gYW55PihcbiAgcGF0aDogc3RyaW5nLFxuICByZXFQYXJhbXM6IFJlcVBhcmFtcyxcbiAgYm9keTogUmVxVHlwZVxuKTogUHJvbWlzZTxSZXNUeXBlPiB7XG4gIHJldHVybiByZXF1ZXN0KHBhdGgsIHJlcVBhcmFtcywge1xuICAgIG1ldGhvZDogXCJQVVRcIixcbiAgICBib2R5OiBKU09OLnN0cmluZ2lmeShib2R5KSxcbiAgICBoZWFkZXJzOiB7XG4gICAgICBcImNvbnRlbnQtdHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICB9LFxuICB9KTtcbn1cbiIsICJmdW5jdGlvbiBub3JtYWxpemUgKHN0ckFycmF5KSB7XG4gIHZhciByZXN1bHRBcnJheSA9IFtdO1xuICBpZiAoc3RyQXJyYXkubGVuZ3RoID09PSAwKSB7IHJldHVybiAnJzsgfVxuXG4gIGlmICh0eXBlb2Ygc3RyQXJyYXlbMF0gIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVXJsIG11c3QgYmUgYSBzdHJpbmcuIFJlY2VpdmVkICcgKyBzdHJBcnJheVswXSk7XG4gIH1cblxuICAvLyBJZiB0aGUgZmlyc3QgcGFydCBpcyBhIHBsYWluIHByb3RvY29sLCB3ZSBjb21iaW5lIGl0IHdpdGggdGhlIG5leHQgcGFydC5cbiAgaWYgKHN0ckFycmF5WzBdLm1hdGNoKC9eW14vOl0rOlxcLyokLykgJiYgc3RyQXJyYXkubGVuZ3RoID4gMSkge1xuICAgIHZhciBmaXJzdCA9IHN0ckFycmF5LnNoaWZ0KCk7XG4gICAgc3RyQXJyYXlbMF0gPSBmaXJzdCArIHN0ckFycmF5WzBdO1xuICB9XG5cbiAgLy8gVGhlcmUgbXVzdCBiZSB0d28gb3IgdGhyZWUgc2xhc2hlcyBpbiB0aGUgZmlsZSBwcm90b2NvbCwgdHdvIHNsYXNoZXMgaW4gYW55dGhpbmcgZWxzZS5cbiAgaWYgKHN0ckFycmF5WzBdLm1hdGNoKC9eZmlsZTpcXC9cXC9cXC8vKSkge1xuICAgIHN0ckFycmF5WzBdID0gc3RyQXJyYXlbMF0ucmVwbGFjZSgvXihbXi86XSspOlxcLyovLCAnJDE6Ly8vJyk7XG4gIH0gZWxzZSB7XG4gICAgc3RyQXJyYXlbMF0gPSBzdHJBcnJheVswXS5yZXBsYWNlKC9eKFteLzpdKyk6XFwvKi8sICckMTovLycpO1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHJBcnJheS5sZW5ndGg7IGkrKykge1xuICAgIHZhciBjb21wb25lbnQgPSBzdHJBcnJheVtpXTtcblxuICAgIGlmICh0eXBlb2YgY29tcG9uZW50ICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVXJsIG11c3QgYmUgYSBzdHJpbmcuIFJlY2VpdmVkICcgKyBjb21wb25lbnQpO1xuICAgIH1cblxuICAgIGlmIChjb21wb25lbnQgPT09ICcnKSB7IGNvbnRpbnVlOyB9XG5cbiAgICBpZiAoaSA+IDApIHtcbiAgICAgIC8vIFJlbW92aW5nIHRoZSBzdGFydGluZyBzbGFzaGVzIGZvciBlYWNoIGNvbXBvbmVudCBidXQgdGhlIGZpcnN0LlxuICAgICAgY29tcG9uZW50ID0gY29tcG9uZW50LnJlcGxhY2UoL15bXFwvXSsvLCAnJyk7XG4gICAgfVxuICAgIGlmIChpIDwgc3RyQXJyYXkubGVuZ3RoIC0gMSkge1xuICAgICAgLy8gUmVtb3ZpbmcgdGhlIGVuZGluZyBzbGFzaGVzIGZvciBlYWNoIGNvbXBvbmVudCBidXQgdGhlIGxhc3QuXG4gICAgICBjb21wb25lbnQgPSBjb21wb25lbnQucmVwbGFjZSgvW1xcL10rJC8sICcnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRm9yIHRoZSBsYXN0IGNvbXBvbmVudCB3ZSB3aWxsIGNvbWJpbmUgbXVsdGlwbGUgc2xhc2hlcyB0byBhIHNpbmdsZSBvbmUuXG4gICAgICBjb21wb25lbnQgPSBjb21wb25lbnQucmVwbGFjZSgvW1xcL10rJC8sICcvJyk7XG4gICAgfVxuXG4gICAgcmVzdWx0QXJyYXkucHVzaChjb21wb25lbnQpO1xuXG4gIH1cblxuICB2YXIgc3RyID0gcmVzdWx0QXJyYXkuam9pbignLycpO1xuICAvLyBFYWNoIGlucHV0IGNvbXBvbmVudCBpcyBub3cgc2VwYXJhdGVkIGJ5IGEgc2luZ2xlIHNsYXNoIGV4Y2VwdCB0aGUgcG9zc2libGUgZmlyc3QgcGxhaW4gcHJvdG9jb2wgcGFydC5cblxuICAvLyByZW1vdmUgdHJhaWxpbmcgc2xhc2ggYmVmb3JlIHBhcmFtZXRlcnMgb3IgaGFzaFxuICBzdHIgPSBzdHIucmVwbGFjZSgvXFwvKFxcP3wmfCNbXiFdKS9nLCAnJDEnKTtcblxuICAvLyByZXBsYWNlID8gaW4gcGFyYW1ldGVycyB3aXRoICZcbiAgdmFyIHBhcnRzID0gc3RyLnNwbGl0KCc/Jyk7XG4gIHN0ciA9IHBhcnRzLnNoaWZ0KCkgKyAocGFydHMubGVuZ3RoID4gMCA/ICc/JzogJycpICsgcGFydHMuam9pbignJicpO1xuXG4gIHJldHVybiBzdHI7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVybEpvaW4oKSB7XG4gIHZhciBpbnB1dDtcblxuICBpZiAodHlwZW9mIGFyZ3VtZW50c1swXSA9PT0gJ29iamVjdCcpIHtcbiAgICBpbnB1dCA9IGFyZ3VtZW50c1swXTtcbiAgfSBlbHNlIHtcbiAgICBpbnB1dCA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgfVxuXG4gIHJldHVybiBub3JtYWxpemUoaW5wdXQpO1xufVxuIiwgImltcG9ydCB7IGNyZWF0ZUFzeW5jVGh1bmssIGNyZWF0ZVNsaWNlLCBQYXlsb2FkQWN0aW9uIH0gZnJvbSBcIkByZWR1eGpzL3Rvb2xraXRcIjtcbmltcG9ydCB7IGdldCB9IGZyb20gXCIuLi8uLi9hcHAvYXBpXCI7XG5pbXBvcnQgdXJsSm9pbiBmcm9tIFwidXJsLWpvaW5cIjtcblxuZXhwb3J0IGludGVyZmFjZSBIb21lU3RhdGUge1xuICBiYW5uZXJUZXh0OiBzdHJpbmc7XG4gIHN0YXRzOiBTdGF0cyB8IHVuZGVmaW5lZDtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgU3RhdHMge1xuICBudW1iZXJPZk9udG9sb2dpZXM6IG51bWJlcjtcbiAgbnVtYmVyT2ZDbGFzc2VzOiBudW1iZXI7XG4gIG51bWJlck9mUHJvcGVydGllczogbnVtYmVyO1xuICBudW1iZXJPZkluZGl2aWR1YWxzOiBudW1iZXI7XG4gIGxhc3RNb2RpZmllZDogc3RyaW5nO1xufVxuY29uc3QgaW5pdGlhbFN0YXRlOiBIb21lU3RhdGUgPSB7XG4gIHN0YXRzOiB1bmRlZmluZWQsXG4gIGJhbm5lclRleHQ6IFwiXCIsXG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U3RhdHMgPSBjcmVhdGVBc3luY1RodW5rKFxuICBcImhvbWVfc3RhdHNcIixcbiAgYXN5bmMgKGFyZywgeyByZWplY3RXaXRoVmFsdWUgfSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgZ2V0PFN0YXRzPihgYXBpL3YyL3N0YXRzYCk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgcmV0dXJuIHJlamVjdFdpdGhWYWx1ZShlcnJvci5tZXNzYWdlKTtcbiAgICB9XG4gIH1cbik7XG5leHBvcnQgY29uc3QgZ2V0QmFubmVyVGV4dCA9IGNyZWF0ZUFzeW5jVGh1bmsoXG4gIFwiaG9tZV9iYW5uZXJcIixcbiAgYXN5bmMgKGFyZywgeyByZWplY3RXaXRoVmFsdWUgfSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCh1cmxKb2luKHByb2Nlc3MuZW52LlBVQkxJQ19VUkwhLCBcImJhbm5lci50eHRcIikpO1xuICAgICAgcmV0dXJuIHJlcy50ZXh0KCk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgcmV0dXJuIHJlamVjdFdpdGhWYWx1ZShlcnJvci5tZXNzYWdlKTtcbiAgICB9XG4gIH1cbik7XG5cbmNvbnN0IGhvbWVTbGljZSA9IGNyZWF0ZVNsaWNlKHtcbiAgbmFtZTogXCJob21lXCIsXG4gIGluaXRpYWxTdGF0ZSxcbiAgcmVkdWNlcnM6IHt9LFxuICBleHRyYVJlZHVjZXJzOiAoYnVpbGRlcikgPT4ge1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShcbiAgICAgIGdldFN0YXRzLmZ1bGZpbGxlZCxcbiAgICAgIChzdGF0ZTogSG9tZVN0YXRlLCBhY3Rpb246IFBheWxvYWRBY3Rpb248U3RhdHM+KSA9PiB7XG4gICAgICAgIHN0YXRlLnN0YXRzID0gYWN0aW9uLnBheWxvYWQ7XG4gICAgICB9XG4gICAgKTtcbiAgICBidWlsZGVyLmFkZENhc2UoZ2V0U3RhdHMucmVqZWN0ZWQsIChzdGF0ZTogSG9tZVN0YXRlKSA9PiB7XG4gICAgICBzdGF0ZS5zdGF0cyA9IGluaXRpYWxTdGF0ZS5zdGF0cztcbiAgICB9KTtcbiAgICBidWlsZGVyLmFkZENhc2UoXG4gICAgICBnZXRCYW5uZXJUZXh0LmZ1bGZpbGxlZCxcbiAgICAgIChzdGF0ZTogSG9tZVN0YXRlLCBhY3Rpb246IGFueSkgPT4ge1xuICAgICAgICBzdGF0ZS5iYW5uZXJUZXh0ID0gYWN0aW9uLnBheWxvYWQ7XG4gICAgICB9XG4gICAgKTtcbiAgICBidWlsZGVyLmFkZENhc2UoZ2V0QmFubmVyVGV4dC5yZWplY3RlZCwgKHN0YXRlOiBIb21lU3RhdGUpID0+IHtcbiAgICAgIHN0YXRlLmJhbm5lclRleHQgPSBpbml0aWFsU3RhdGUuYmFubmVyVGV4dDtcbiAgICB9KTtcbiAgfSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBob21lU2xpY2UucmVkdWNlcjtcbiIsICJpbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IENsYXNzIGZyb20gXCIuLi9tb2RlbC9DbGFzc1wiO1xuaW1wb3J0IEVudGl0eSBmcm9tIFwiLi4vbW9kZWwvRW50aXR5XCI7XG5pbXBvcnQgSW5kaXZpZHVhbCBmcm9tIFwiLi4vbW9kZWwvSW5kaXZpZHVhbFwiO1xuaW1wb3J0IFByb3BlcnR5IGZyb20gXCIuLi9tb2RlbC9Qcm9wZXJ0eVwiO1xuXG5leHBvcnQgZnVuY3Rpb24gYXNBcnJheTxUPihvYmo6IFQgfCBUW10pOiBUW10ge1xuICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgcmV0dXJuIG9iajtcbiAgfSBlbHNlIGlmIChvYmopIHtcbiAgICByZXR1cm4gW29ial07XG4gIH1cbiAgcmV0dXJuIFtdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmFuZG9tU3RyaW5nKCkge1xuICByZXR1cm4gKE1hdGgucmFuZG9tKCkgKiBNYXRoLnBvdygyLCA1NCkpLnRvU3RyaW5nKDM2KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNvcnRCeUtleXMoYTogYW55LCBiOiBhbnkpIHtcbiAgY29uc3Qga2V5QSA9IGEua2V5LnRvVXBwZXJDYXNlKCk7XG4gIGNvbnN0IGtleUIgPSBiLmtleS50b1VwcGVyQ2FzZSgpO1xuICByZXR1cm4ga2V5QSA9PT0ga2V5QiA/IDAgOiBrZXlBID4ga2V5QiA/IDEgOiAtMTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNvcHlUb0NsaXBib2FyZCh0ZXh0OiBzdHJpbmcpIHtcbiAgaWYgKFwiY2xpcGJvYXJkXCIgaW4gbmF2aWdhdG9yKSB7XG4gICAgcmV0dXJuIGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRleHQpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBkb2N1bWVudC5leGVjQ29tbWFuZChcImNvcHlcIiwgdHJ1ZSwgdGV4dCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVByZXZpb3VzKHZhbHVlOiBhbnkpIHtcbiAgY29uc3QgcmVmID0gdXNlUmVmKCk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgcmVmLmN1cnJlbnQgPSB2YWx1ZTtcbiAgfSwgW3ZhbHVlXSk7XG4gIHJldHVybiByZWYuY3VycmVudDtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0aGluZ0Zyb21Kc29uUHJvcGVydGllcyhwcm9wZXJ0aWVzOiBhbnkpOiBFbnRpdHkge1xuICBjb25zdCB0eXBlcyA9IHByb3BlcnRpZXNbXCJ0eXBlXCJdIHx8IFtdO1xuICBpZiAodHlwZXMuaW5kZXhPZihcImNsYXNzXCIpICE9PSAtMSkgcmV0dXJuIG5ldyBDbGFzcyhwcm9wZXJ0aWVzKTtcbiAgaWYgKHR5cGVzLmluZGV4T2YoXCJwcm9wZXJ0eVwiKSAhPT0gLTEpIHJldHVybiBuZXcgUHJvcGVydHkocHJvcGVydGllcyk7XG4gIGlmICh0eXBlcy5pbmRleE9mKFwiaW5kaXZpZHVhbFwiKSAhPT0gLTEpIHJldHVybiBuZXcgSW5kaXZpZHVhbChwcm9wZXJ0aWVzKTtcbiAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBlbnRpdHkgdHlwZTogXCIgKyBKU09OLnN0cmluZ2lmeShwcm9wZXJ0aWVzKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXBUb0FwaVBhcmFtcyhzZWFyY2hQYXJhbXM6IFVSTFNlYXJjaFBhcmFtcykge1xuICBjb25zdCBzZWFyY2hQYXJhbXNDb3B5ID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICBzZWFyY2hQYXJhbXMuZm9yRWFjaCgodmFsdWU6IHN0cmluZywga2V5OiBzdHJpbmcpID0+IHtcbiAgICBsZXQgbmV3S2V5ID0ga2V5LmluY2x1ZGVzKFwiX1wiKSA/IHRvQ2FtZWwoa2V5KSA6IGtleTtcbiAgICAvLyBzcGVjaWFsIGNhc2VzXG4gICAgaWYgKG5ld0tleSA9PT0gXCJvYm9JZFwiKSBuZXdLZXkgPSBcImN1cmllXCI7XG4gICAgc2VhcmNoUGFyYW1zQ29weS5hcHBlbmQobmV3S2V5LCB2YWx1ZSk7XG4gIH0pO1xuICByZXR1cm4gc2VhcmNoUGFyYW1zQ29weTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvQ2FtZWwoc3RyOiBzdHJpbmcpIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC8oWy1fXVthLXpdKS9naSwgKCQxKSA9PiB7XG4gICAgcmV0dXJuICQxLnRvVXBwZXJDYXNlKCkucmVwbGFjZShcIi1cIiwgXCJcIikucmVwbGFjZShcIl9cIiwgXCJcIik7XG4gIH0pO1xufVxuIiwgImV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlaWZpZWQ8VD4ge1xuICB2YWx1ZTogVDtcbiAgYXhpb21zOiBhbnlbXSB8IG51bGw7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcih2YWx1ZTogVCwgYXhpb21zOiBhbnlbXSB8IG51bGwpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5heGlvbXMgPSBheGlvbXM7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGZyb21Kc29uPFQ+KGpzb25Ob2RlOiBhbnkpOiBSZWlmaWVkPFQ+W10ge1xuICAgIGlmICghanNvbk5vZGUpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoanNvbk5vZGUpKSB7XG4gICAgICBqc29uTm9kZSA9IFtqc29uTm9kZV07XG4gICAgfVxuXG4gICAgcmV0dXJuIGpzb25Ob2RlLm1hcCgodmFsdWU6IGFueSkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgQXJyYXkuaXNBcnJheSh2YWx1ZS50eXBlKSAmJlxuICAgICAgICB2YWx1ZS50eXBlLmluZGV4T2YoXCJyZWlmaWNhdGlvblwiKSAhPT0gLTFcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gbmV3IFJlaWZpZWQ8VD4odmFsdWUudmFsdWUsIHZhbHVlLmF4aW9tcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbmV3IFJlaWZpZWQ8VD4odmFsdWUsIG51bGwpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgaGFzTWV0YWRhdGEoKSB7XG4gICAgcmV0dXJuIHRoaXMuYXhpb21zICE9IG51bGw7XG4gIH1cblxuICAvLyBDb21iaW5lIGFsbCBvZiB0aGUgYXhpb21zIGludG8gb25lIG1ldGFkYXRhIG9iamVjdCBmb3IgdGhlIHByb3BlcnR5LlxuICAvL1xuICAvLyBub3RlOiBUaGlzIG1lYW5zIHRoYXQgaWYgdGhlIHNhbWUgcHJvcGVydHkgaXMgcmVpZmllZCBtdWx0aXBsZSB0aW1lcyB3aXRoXG4gIC8vIGRpZmZlcmVudCBtZXRhZGF0YSwgaXQgd2lsbCBhbGwgYmUgY29tYmluZWQgaW4gdGhlIFVJLiBXaGV0aGVyIHRoaXMgaXNcbiAgLy8gdGhlIGRlc2lyZWQgYmVoYXZpb3VyIGlzIFRCRC5cbiAgLy9cbiAgZ2V0TWV0YWRhdGEoKTogYW55IHwgbnVsbCB7XG4gICAgaWYgKCF0aGlzLmF4aW9tcykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgbGV0IHByb3BlcnRpZXM6IGFueSA9IHt9O1xuXG4gICAgZm9yIChsZXQgYXhpb20gb2YgdGhpcy5heGlvbXMpIHtcbiAgICAgIGZvciAobGV0IGsgb2YgT2JqZWN0LmtleXMoYXhpb20pKSB7XG4gICAgICAgIGxldCB2ID0gYXhpb21ba107XG4gICAgICAgIGxldCBleGlzdGluZzogYW55W10gfCB1bmRlZmluZWQgPSBwcm9wZXJ0aWVzW2tdO1xuICAgICAgICBpZiAoZXhpc3RpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGV4aXN0aW5nLnB1c2godik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJvcGVydGllc1trXSA9IFt2XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwcm9wZXJ0aWVzO1xuICB9XG59XG4iLCAiaW1wb3J0IFJlaWZpZWQgZnJvbSBcIi4vUmVpZmllZFwiXG5cbmV4cG9ydCBpbnRlcmZhY2UgTGlua2VkRW50aXR5IHtcblx0ZGVmaW5lZEJ5PzpzdHJpbmdbXVxuXHRpcmk/OnN0cmluZ1xuXHR1cmw/OnN0cmluZ1xuXHRudW1BcHBlYXJzSW46c3RyaW5nXG5cdGhhc0xvY2FsRGVmaW5pdGlvbjpib29sZWFuXG5cdGxhYmVsOnN0cmluZ3xzdHJpbmdbXVxuXHR0eXBlOnN0cmluZ1tdXG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExpbmtlZEVudGl0aWVzIHtcblxuXHRsaW5rZWRFbnRpdGllczp7IFtrZXk6c3RyaW5nXTpMaW5rZWRFbnRpdHkgfVxuXG5cdGNvbnN0cnVjdG9yKGxpbmtlZEVudGl0aWVzOmFueSkge1xuXHRcdGlmKGxpbmtlZEVudGl0aWVzKVxuXHRcdFx0dGhpcy5saW5rZWRFbnRpdGllcyA9IHsuLi5saW5rZWRFbnRpdGllc31cblx0XHRlbHNlXG5cdFx0XHR0aGlzLmxpbmtlZEVudGl0aWVzID0ge31cblx0fVxuXG5cdG1lcmdlV2l0aChsaW5rZWRFbnRpdGllczphbnkpOkxpbmtlZEVudGl0aWVzIHtcblx0XHRpZihsaW5rZWRFbnRpdGllcylcblx0XHRcdHJldHVybiBuZXcgTGlua2VkRW50aXRpZXMoeyAuLi50aGlzLmxpbmtlZEVudGl0aWVzLCBsaW5rZWRFbnRpdGllcyB9KVxuXHRcdGVsc2Vcblx0XHRcdHJldHVybiBuZXcgTGlua2VkRW50aXRpZXMoeyAuLi50aGlzLmxpbmtlZEVudGl0aWVzIH0pXG5cdH1cblxuXHRnZXRMYWJlbEZvcklyaShpcmk6c3RyaW5nKTpzdHJpbmd8dW5kZWZpbmVkIHtcblxuXHRcdGxldCBsaW5rZWRFbnRpdHkgPSB0aGlzLmxpbmtlZEVudGl0aWVzW2lyaV1cblxuXHRcdGlmKGxpbmtlZEVudGl0eSkge1xuXHRcdFx0bGV0IGxhYmVsID0gUmVpZmllZC5mcm9tSnNvbjxzdHJpbmc+KCBsaW5rZWRFbnRpdHkubGFiZWwgKVxuXHRcdFx0aWYobGFiZWwgJiYgbGFiZWwubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRyZXR1cm4gbGFiZWxbMF0udmFsdWVcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRnZXQoaXJpOnN0cmluZyk6TGlua2VkRW50aXR5fHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMubGlua2VkRW50aXRpZXNbaXJpXVxuXHR9XG59XG4iLCAiaW1wb3J0IHsgYXNBcnJheSB9IGZyb20gXCIuLi9hcHAvdXRpbFwiO1xuaW1wb3J0IExpbmtlZEVudGl0aWVzIGZyb20gXCIuL0xpbmtlZEVudGl0aWVzXCI7XG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi9SZWlmaWVkXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGFic3RyYWN0IGNsYXNzIFRoaW5nIHtcbiAgcHJvcGVydGllczogYW55O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BlcnRpZXM6IGFueSkge1xuICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG4gIH1cblxuICBnZXRJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJpZFwiXTtcbiAgfVxuXG4gIGdldElyaSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJpcmlcIl07XG4gIH1cblxuICBnZXRUeXBlKCk6IFwib250b2xvZ3lcIiB8IFwiY2xhc3NcIiB8IFwicHJvcGVydHlcIiB8IFwiaW5kaXZpZHVhbFwiIHtcbiAgICBjb25zdCB0eXBlcyA9IHRoaXMucHJvcGVydGllc1tcInR5cGVcIl0gYXMgc3RyaW5nW107XG5cbiAgICBmb3IgKGNvbnN0IHR5cGUgb2YgdHlwZXMpIHtcbiAgICAgIGlmIChcbiAgICAgICAgW1wib250b2xvZ3lcIiwgXCJjbGFzc1wiLCBcInByb3BlcnR5XCIsIFwiaW5kaXZpZHVhbFwiXS5pbmRleE9mKHR5cGUpICE9PSAtMVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB0eXBlIGFzIGFueTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIHR5cGVcIik7XG4gIH1cblxuICBnZXRUeXBlUGx1cmFsKCk6IFwib250b2xvZ2llc1wiIHwgXCJjbGFzc2VzXCIgfCBcInByb3BlcnRpZXNcIiB8IFwiaW5kaXZpZHVhbHNcIiB7XG4gICAgY29uc3QgdHlwZSA9IHRoaXMuZ2V0VHlwZSgpO1xuXG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIFwib250b2xvZ3lcIjpcbiAgICAgICAgcmV0dXJuIFwib250b2xvZ2llc1wiO1xuICAgICAgY2FzZSBcImNsYXNzXCI6XG4gICAgICAgIHJldHVybiBcImNsYXNzZXNcIjtcbiAgICAgIGNhc2UgXCJwcm9wZXJ0eVwiOlxuICAgICAgICByZXR1cm4gXCJwcm9wZXJ0aWVzXCI7XG4gICAgICBjYXNlIFwiaW5kaXZpZHVhbFwiOlxuICAgICAgICByZXR1cm4gXCJpbmRpdmlkdWFsc1wiO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidW5rbm93biB0eXBlXCIpO1xuICAgIH1cbiAgfVxuXG4gIGdldFJkZlR5cGVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXG4gICAgICBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyN0eXBlXCJcbiAgICBdKVxuICB9XG5cbiAgZ2V0TmFtZSgpOiBzdHJpbmcge1xuXHRyZXR1cm4gdGhpcy5nZXROYW1lcygpWzBdO1xuICB9XG5cbiAgZ2V0TmFtZXMoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGxhYmVscyA9IFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImxhYmVsXCJdXG4gICAgKTtcbiAgICBpZiAobGFiZWxzICYmIGxhYmVscy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gbGFiZWxzLm1hcChsYWJlbCA9PiBsYWJlbC52YWx1ZSlcbiAgICB9XG4gICAgcmV0dXJuIFt0aGlzLmdldElyaSgpXTtcbiAgfVxuXG4gIGdldERlc2NyaXB0aW9uKCk6IHN0cmluZyB7XG4gICAgY29uc3QgZGVmaW5pdGlvbiA9IFJlaWZpZWQuZnJvbUpzb248YW55Pih0aGlzLnByb3BlcnRpZXNbXCJkZWZpbml0aW9uXCJdKTtcbiAgICBpZiAoZGVmaW5pdGlvbiAmJiBkZWZpbml0aW9uLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBkZWZpbml0aW9uLm1hcCgoZGVmKSA9PiBkZWYudmFsdWUgfHwgXCJcIikuam9pbihcIiBcIik7XG4gICAgfVxuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgZ2V0T250b2xvZ3lJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJvbnRvbG9neUlkXCJdO1xuICB9XG5cbiAgZ2V0TGFiZWxGb3JJcmkoaWQ6IHN0cmluZykge1xuICAgIGNvbnN0IGxpbmtlZEVudGl0aWVzID0gdGhpcy5wcm9wZXJ0aWVzW1wibGlua2VkRW50aXRpZXNcIl07XG4gICAgaWYgKGxpbmtlZEVudGl0aWVzKSB7XG4gICAgICBjb25zdCBsYWJlbDpSZWlmaWVkPHN0cmluZz5bXSA9IFJlaWZpZWQuZnJvbUpzb248c3RyaW5nPiggbGlua2VkRW50aXRpZXNbaWRdPy5sYWJlbCApO1xuICAgICAgcmV0dXJuIGxhYmVsWzBdPy52YWx1ZSB8fCBpZFxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gaWQ7XG4gICAgfVxuICB9XG5cbiAgZ2V0QW5ub3RhdGlvbkJ5SWQoaWQ6IHN0cmluZyk6UmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uKGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW2lkXSkpXG4gIH1cblxuICBnZXRMaW5rZWRFbnRpdGllcygpOiBMaW5rZWRFbnRpdGllcyB7XG4gICAgcmV0dXJuIG5ldyBMaW5rZWRFbnRpdGllcyh0aGlzLnByb3BlcnRpZXNbXCJsaW5rZWRFbnRpdGllc1wiXSB8fCB7fSk7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBhc0FycmF5IH0gZnJvbSBcIi4uL2FwcC91dGlsXCI7XG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi9SZWlmaWVkXCI7XG5pbXBvcnQgVGhpbmcgZnJvbSBcIi4vVGhpbmdcIjtcblxuZXhwb3J0IGRlZmF1bHQgYWJzdHJhY3QgY2xhc3MgRW50aXR5IGV4dGVuZHMgVGhpbmcge1xuICBhYnN0cmFjdCBnZXRQYXJlbnRzKCk6IFJlaWZpZWQ8YW55PltdO1xuICBhYnN0cmFjdCBnZXRTdXBlckVudGl0aWVzKCk6IFJlaWZpZWQ8YW55PltdO1xuICBhYnN0cmFjdCBnZXRFcXVpdmFsZW50cygpOiBSZWlmaWVkPGFueT5bXTtcblxuICBpc0Nhbm9uaWNhbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaXNEZWZpbmluZ09udG9sb2d5XCJdID09PSB0cnVlO1xuICB9XG5cbiAgaXNEZXByZWNhdGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNkZXByZWNhdGVkXCJdID09PSBcInRydWVcIlxuICAgICk7XG4gIH1cblxuICBnZXREZXByZWNhdGlvblZlcnNpb24oKTogc3RyaW5nIHtcbiAgICAvLyBvbmx5IHN1cHBvcnRzIEVGTyBmb3Igbm93XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cuZWJpLmFjLnVrL2Vmby9vYnNvbGV0ZWRfaW5fdmVyc2lvblwiXTtcbiAgfVxuXG4gIGdldERlcHJlY2F0aW9uUmVhc29uKCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3B1cmwub2JvbGlicmFyeS5vcmcvb2JvL0lBT18wMDAwMjMxXCJdXG4gICAgKS5jb25jYXQoXG4gICAgICBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cuZWJpLmFjLnVrL2Vmby9yZWFzb25fZm9yX29ic29sZXNjZW5jZVwiXVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBnZXREZXByZWNhdGlvblJlcGxhY2VtZW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly9wdXJsLm9ib2xpYnJhcnkub3JnL29iby9JQU9fMDEwMDAwMVwiXTtcbiAgfVxuXG4gIGdldFJlbGF0ZWRGcm9tKCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KHRoaXMucHJvcGVydGllc1tcInJlbGF0ZWRGcm9tXCJdKTtcbiAgfVxuXG4gIGdldERlc2NyaXB0aW9uQXNBcnJheSgpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55Pih0aGlzLnByb3BlcnRpZXNbXCJkZWZpbml0aW9uXCJdKTtcbiAgfVxuXG4gIGhhc0RpcmVjdENoaWxkcmVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJoYXNEaXJlY3RDaGlsZHJlblwiXSA9PT0gXCJ0cnVlXCI7XG4gIH1cblxuICBoYXNIaWVyYXJjaGljYWxDaGlsZHJlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaGFzSGllcmFyY2hpY2FsQ2hpbGRyZW5cIl0gPT09IFwidHJ1ZVwiO1xuICB9XG5cbiAgaGFzQ2hpbGRyZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzRGlyZWN0Q2hpbGRyZW4oKSB8fCB0aGlzLmhhc0hpZXJhcmNoaWNhbENoaWxkcmVuKCk7XG4gIH1cblxuICBnZXRBbmNlc3RvcklyaXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImFuY2VzdG9yXCJdKTtcbiAgfVxuXG4gIGdldEhpZXJhcmNoaWNhbEFuY2VzdG9ySXJpcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiaGllcmFyY2hpY2FsQW5jZXN0b3JcIl0pO1xuICB9XG5cbiAgZ2V0U3lub255bXMoKSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55Pih0aGlzLnByb3BlcnRpZXNbXCJzeW5vbnltXCJdKTtcbiAgfVxuXG4gIGdldEFwcGVhcnNJbigpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuICh0aGlzLnByb3BlcnRpZXNbXCJhcHBlYXJzSW5cIl0gfHwgW10pIGFzIHN0cmluZ1tdO1xuICB9XG5cbiAgZ2V0RGVmaW5lZEJ5KCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gKHRoaXMucHJvcGVydGllc1tcImRlZmluZWRCeVwiXSB8fCBbXSkgYXMgc3RyaW5nW107XG4gIH1cblxuICBnZXRTaG9ydEZvcm0oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiY3VyaWVcIl0gfHwgdGhpcy5wcm9wZXJ0aWVzW1wic2hvcnRGb3JtXCJdO1xuICB9XG5cbiAgZ2V0RGVwaWN0ZWRCeSgpOiBSZWlmaWVkPHN0cmluZz5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248c3RyaW5nPihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly94bWxucy5jb20vZm9hZi8wLjEvZGVwaWN0ZWRfYnlcIl1cbiAgICApO1xuICB9XG5cbiAgZ2V0QW5ub3RhdGlvblByZWRpY2F0ZXMoKTogc3RyaW5nW10ge1xuICAgIGxldCBkZWZpbml0aW9uUHJvcGVydGllcyA9IGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiZGVmaW5pdGlvblByb3BlcnR5XCJdKTtcbiAgICBsZXQgc3lub255bVByb3BlcnRpZXMgPSBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcInN5bm9ueW1Qcm9wZXJ0eVwiXSk7XG4gICAgbGV0IGhpZXJhcmNoaWNhbFByb3BlcnRpZXMgPSBhc0FycmF5KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaGllcmFyY2hpY2FsUHJvcGVydHlcIl1cbiAgICApO1xuICAgIGxldCBhbm5vdGF0aW9uUHJlZGljYXRlcyA9IG5ldyBTZXQoKTtcblxuICAgIGZvciAobGV0IHByZWRpY2F0ZSBvZiBPYmplY3Qua2V5cyh0aGlzLnByb3BlcnRpZXMpKSB7XG4gICAgICAvLyBwcm9wZXJ0aWVzIHdpdGhvdXQgYW4gSVJJIGFyZSB0aGluZ3MgdGhhdCB3ZXJlIGFkZGVkIGJ5IHJkZjJqc29uIHNvIHNob3VsZCBub3RcbiAgICAgIC8vIGJlIGluY2x1ZGVkIGFzIGFubm90YXRpb25zXG4gICAgICBpZiAocHJlZGljYXRlLmluZGV4T2YoXCI6Ly9cIikgPT09IC0xKSBjb250aW51ZTtcblxuICAgICAgLy8gdGhpcyBpcyBoYW5kbGVkIGV4cGxpY2l0bHkgaW4gRW50aXR5UGFnZVxuICAgICAgaWYgKHByZWRpY2F0ZS5zdGFydHNXaXRoKFwibmVnYXRpdmVQcm9wZXJ0eUFzc2VydGlvbitcIikpIGNvbnRpbnVlO1xuXG4gICAgICAvLyB0aGlzIGlzIGhhbmRsZWQgZXhwbGljaXRseSBpbiBFbnRpdHlQYWdlXG4gICAgICBpZiAocHJlZGljYXRlID09PSBcImh0dHA6Ly94bWxucy5jb20vZm9hZi8wLjEvZGVwaWN0ZWRfYnlcIikgY29udGludWU7XG5cbiAgICAgIGxldCBsaW5rZWRFbnRpdHkgPSB0aGlzLmdldExpbmtlZEVudGl0aWVzKCkuZ2V0KHByZWRpY2F0ZSlcbiAgICAgIGlmIChsaW5rZWRFbnRpdHkgIT0gdW5kZWZpbmVkICYmIGxpbmtlZEVudGl0eS50eXBlLmluZGV4T2YoXCJvYmplY3RQcm9wZXJ0eVwiKSAhPT0gLTEpIGNvbnRpbnVlO1xuICAgICAgaWYgKGxpbmtlZEVudGl0eSAhPSB1bmRlZmluZWQgJiYgbGlua2VkRW50aXR5LnR5cGUuaW5kZXhPZihcImRhdGFQcm9wZXJ0eVwiKSAhPT0gLTEpIGNvbnRpbnVlO1xuXG4gICAgICAvLyBJZiB0aGUgdmFsdWUgd2FzIGFscmVhZHkgaW50ZXJwcmV0ZWQgYXMgZGVmaW5pdGlvbi9zeW5vbnltL2hpZXJhcmNoaWNhbCwgZG9cbiAgICAgIC8vIG5vdCBpbmNsdWRlIGl0IGFzIGFuIGFubm90YXRpb25cbiAgICAgIGlmIChcbiAgICAgICAgZGVmaW5pdGlvblByb3BlcnRpZXMuaW5kZXhPZihwcmVkaWNhdGUpICE9PSAtMSB8fFxuICAgICAgICBzeW5vbnltUHJvcGVydGllcy5pbmRleE9mKHByZWRpY2F0ZSkgIT09IC0xIHx8XG4gICAgICAgIGhpZXJhcmNoaWNhbFByb3BlcnRpZXMuaW5kZXhPZihwcmVkaWNhdGUpICE9PSAtMVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBhbnl0aGluZyBpbiB0aGUgcmRmLCByZGZzLCBvd2wgbmFtZXNwYWNlcyBhcmVuJ3QgZGlzcGxheWVkIGluIHRoZSBhbm5vdGF0aW9ucyBzZWN0aW9uLi4uXG4gICAgICBpZiAoXG4gICAgICAgIHByZWRpY2F0ZS5zdGFydHNXaXRoKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI1wiKSB8fFxuICAgICAgICBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyNcIikgfHxcbiAgICAgICAgcHJlZGljYXRlLnN0YXJ0c1dpdGgoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNcIilcbiAgICAgICkge1xuICAgICAgICAvLyAuLi5hcGFydCBmcm9tIHRoZXNlIG9uZXNcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHByZWRpY2F0ZSAhPT0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjY29tbWVudFwiICYmXG4gICAgICAgICAgcHJlZGljYXRlICE9PSBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNzZWVBbHNvXCIgJiZcbiAgICAgICAgICAvLyBwcmVkaWNhdGUgIT09IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjaGFzS2V5XCIgJiZcbiAgICAgICAgICBwcmVkaWNhdGUgIT09IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjZGlzam9pbnRVbmlvbk9mXCJcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gd2hpbGUgaW4gZ2VuZXJhbCBvYm9Jbk93bCBuYW1lc3BhY2UgcHJvcGVydGllcyBhcmUgYW5ub3RhdGlvbnMsIHNvbWVcbiAgICAgIC8vIG9mIHRoZW0gd2UgZG9uJ3Qgd2FudCB0byBkaXNwbGF5XG4gICAgICAvL1xuICAgICAgaWYgKFxuICAgICAgICAvL3ByZWRpY2F0ZSA9PT0gXCJodHRwOi8vd3d3LmdlbmVvbnRvbG9neS5vcmcvZm9ybWF0cy9vYm9Jbk93bCNpblN1YnNldFwiXG4gICAgICAgIHByZWRpY2F0ZSA9PT0gXCJodHRwOi8vd3d3LmdlbmVvbnRvbG9neS5vcmcvZm9ybWF0cy9vYm9Jbk93bCNpZFwiXG4gICAgICApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGFubm90YXRpb25QcmVkaWNhdGVzLmFkZChwcmVkaWNhdGUpO1xuICAgIH1cblxuICAgIC8vIGNvbnNvbGUubG9nKFwiQVBzXCIpO1xuICAgIC8vIGNvbnNvbGUuZGlyKEFycmF5LmZyb20oYW5ub3RhdGlvblByZWRpY2F0ZXMpKTtcblxuICAgIHJldHVybiBBcnJheS5mcm9tKGFubm90YXRpb25QcmVkaWNhdGVzKSBhcyBzdHJpbmdbXTtcbiAgfVxuXG4gIGdldE51bUhpZXJhcmNoaWNhbERlc2NlbmRhbnRzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcIm51bUhpZXJhcmNoaWNhbERlc2NlbmRhbnRzXCJdXG4gICAgICA/IHBhcnNlSW50KHRoaXMucHJvcGVydGllc1tcIm51bUhpZXJhcmNoaWNhbERlc2NlbmRhbnRzXCJdKVxuICAgICAgOiAwO1xuICB9XG5cbiAgZ2V0TnVtRGVzY2VuZGFudHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wibnVtRGVzY2VuZGFudHNcIl1cbiAgICAgID8gcGFyc2VJbnQodGhpcy5wcm9wZXJ0aWVzW1wibnVtRGVzY2VuZGFudHNcIl0pXG4gICAgICA6IDA7XG4gIH1cblxuICBnZXRIaWVyYXJjaGljYWxQYXJlbnRSZWlmaWNhdGlvbkF4aW9tcyhwYXJlbnRJcmk6IHN0cmluZyk6IGFueSB7XG4gICAgbGV0IGhpZXJhcmNoaWNhbFBhcmVudHMgPSBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJoaWVyYXJjaGljYWxQYXJlbnRcIl1cbiAgICApO1xuXG4gICAgZm9yIChsZXQgcCBvZiBoaWVyYXJjaGljYWxQYXJlbnRzKSB7XG4gICAgICBpZiAocC52YWx1ZSA9PT0gcGFyZW50SXJpKSB7XG4gICAgICAgIHJldHVybiBwLmdldE1ldGFkYXRhKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCAiaW1wb3J0IHsgYXNBcnJheSB9IGZyb20gXCIuLi9hcHAvdXRpbFwiO1xuaW1wb3J0IEVudGl0eSBmcm9tIFwiLi9FbnRpdHlcIjtcbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuL1JlaWZpZWRcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2xhc3MgZXh0ZW5kcyBFbnRpdHkge1xuICBnZXRQYXJlbnRzKCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaGllcmFyY2hpY2FsUGFyZW50XCJdXG4gICAgKTtcbiAgfVxuICBnZXRTdXBlckVudGl0aWVzKCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI3N1YkNsYXNzT2ZcIl1cbiAgICApO1xuICB9XG4gIGdldEVxdWl2YWxlbnRzKCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjZXF1aXZhbGVudENsYXNzXCJdXG4gICAgKTtcbiAgfVxuXG4gIGdldERpc2pvaW50V2l0aCgpIHtcblx0cmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzWydodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNkaXNqb2ludFdpdGgnXSlcbiAgfVxuXG4gIGdldEhhc0tleSgpIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbJ2h0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2hhc0tleSddKVxuICB9XG59XG4iLCAiaW1wb3J0IHsgYXNBcnJheSB9IGZyb20gXCIuLi9hcHAvdXRpbFwiO1xuaW1wb3J0IEVudGl0eSBmcm9tIFwiLi9FbnRpdHlcIjtcbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuL1JlaWZpZWRcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW5kaXZpZHVhbCBleHRlbmRzIEVudGl0eSB7XG4gIGdldFBhcmVudHMoKSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImRpcmVjdFBhcmVudFwiXVxuICAgICk7XG4gIH1cbiAgZ2V0RXF1aXZhbGVudHMoKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGdldFN1cGVyRW50aXRpZXMoKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oW10pXG4gIH1cblxuICBnZXREaWZmZXJlbnRGcm9tKCkge1xuICAgIHJldHVybiBhc0FycmF5KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjZGlmZmVyZW50RnJvbVwiXVxuICAgICk7XG4gIH1cblxuICBnZXRTYW1lQXMoKSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjc2FtZUFzXCJdKTtcbiAgfVxuXG4gIGdldEluZGl2aWR1YWxUeXBlcygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgcmRmVHlwZXM6IGFueSA9IHRoaXMuZ2V0UmRmVHlwZXMoKTtcblxuICAgIGlmICghcmRmVHlwZXMgfHwgIUFycmF5LmlzQXJyYXkocmRmVHlwZXMpKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIHJkZlR5cGVzLmZpbHRlcihcbiAgICAgICh0OiBhbnkpID0+XG4gICAgICAgIHQgIT09IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjTmFtZWRJbmRpdmlkdWFsXCIgJiZcblx0XHQoICghICh0eXBlb2YgdCA9PT0gJ3N0cmluZycpIHx8ICF0LnN0YXJ0c1dpdGgoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjXCIpKSlcbiAgICApO1xuICB9XG5cbn1cbiIsICJpbXBvcnQgeyBhc0FycmF5IH0gZnJvbSBcIi4uL2FwcC91dGlsXCI7XG5pbXBvcnQgRW50aXR5IGZyb20gXCIuL0VudGl0eVwiO1xuaW1wb3J0IFJlaWZpZWQgZnJvbSBcIi4vUmVpZmllZFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQcm9wZXJ0eSBleHRlbmRzIEVudGl0eSB7XG4gIGdldFBhcmVudHMoKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjc3ViUHJvcGVydHlPZlwiXVxuICAgICk7XG4gIH1cbiAgZ2V0U3VwZXJFbnRpdGllcygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNzdWJQcm9wZXJ0eU9mXCJdXG4gICAgKTtcbiAgfVxuICBnZXRFcXVpdmFsZW50cygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2VxdWl2YWxlbnRQcm9wZXJ0eVwiXVxuICAgICk7XG4gIH1cblxuXG4gIGdldERpc2pvaW50V2l0aCgpIHtcblx0cmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzWydodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNwcm9wZXJ0eURpc2pvaW50V2l0aCddKVxuICB9XG5cbiAgZ2V0SW52ZXJzZU9mKCkge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2ludmVyc2VPZlwiXSk7XG4gIH1cblxuICBnZXREb21haW4oKSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzWydodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjZG9tYWluJ10pXG4gIH1cblxuICBnZXRSYW5nZSgpIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNyYW5nZSddKVxuICB9XG5cbiAgZ2V0UHJvcGVydHlDaGFpbnMoKTpSZWlmaWVkPGFueT5bXSB7XG5cdHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG5cdFx0dGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjcHJvcGVydHlDaGFpbkF4aW9tXCJdXG5cdClcbiAgfVxuXG59XG4iLCAiaW1wb3J0IHsgYXNBcnJheSB9IGZyb20gXCIuLi9hcHAvdXRpbFwiO1xuaW1wb3J0IFJlaWZpZWQgZnJvbSBcIi4vUmVpZmllZFwiO1xuaW1wb3J0IFRoaW5nIGZyb20gXCIuL1RoaW5nXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE9udG9sb2d5IGV4dGVuZHMgVGhpbmcge1xuICBnZXRPbnRvbG9neUlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcIm9udG9sb2d5SWRcIl07XG4gIH1cbiAgZ2V0TmFtZSgpOiBzdHJpbmcge1xuICAgIGxldCBuYW1lcyA9IFJlaWZpZWQuZnJvbUpzb248c3RyaW5nPihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImxhYmVsXCJdIHx8IHRoaXMucHJvcGVydGllc1tcInRpdGxlXCJdIHx8IFwiXCJcbiAgICApO1xuICAgIHJldHVybiAobmFtZXNbMF0gJiYgbmFtZXNbMF0udmFsdWUpIHx8IHRoaXMuZ2V0T250b2xvZ3lJZCgpO1xuICB9XG4gIGdldERlc2NyaXB0aW9uKCk6IHN0cmluZyB7XG4gICAgbGV0IGRlc2NyaXB0aW9ucyA9IFJlaWZpZWQuZnJvbUpzb248c3RyaW5nPihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImRlZmluaXRpb25cIl0gfHwgdGhpcy5wcm9wZXJ0aWVzW1wiZGVzY3JpcHRpb25cIl0gfHwgXCJcIlxuICAgICk7XG4gICAgcmV0dXJuIChkZXNjcmlwdGlvbnNbMF0gJiYgZGVzY3JpcHRpb25zWzBdLnZhbHVlKSB8fCBcIlwiO1xuICB9XG4gIGdldFNvdXJjZUZpbGVUaW1lc3RhbXAoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wic291cmNlRmlsZVRpbWVzdGFtcFwiXTtcbiAgfVxuICBnZXROdW1FbnRpdGllcygpOiBudW1iZXIge1xuICAgIHJldHVybiBwYXJzZUludCh0aGlzLnByb3BlcnRpZXNbXCJudW1iZXJPZkVudGl0aWVzXCJdKTtcbiAgfVxuICBnZXROdW1DbGFzc2VzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHBhcnNlSW50KHRoaXMucHJvcGVydGllc1tcIm51bWJlck9mQ2xhc3Nlc1wiXSk7XG4gIH1cbiAgZ2V0TnVtUHJvcGVydGllcygpOiBudW1iZXIge1xuICAgIHJldHVybiBwYXJzZUludCh0aGlzLnByb3BlcnRpZXNbXCJudW1iZXJPZlByb3BlcnRpZXNcIl0pO1xuICB9XG4gIGdldE51bUluZGl2aWR1YWxzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHBhcnNlSW50KHRoaXMucHJvcGVydGllc1tcIm51bWJlck9mSW5kaXZpZHVhbHNcIl0pO1xuICB9XG4gIGdldExvZ29VUkwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiZGVwaWN0ZWRfYnlcIl0gfHwgdW5kZWZpbmVkO1xuICB9XG4gIGdldE9udG9sb2d5UHVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJvbnRvbG9neV9wdXJsXCJdO1xuICB9XG4gIGdldEhvbWVwYWdlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImhvbWVwYWdlXCJdO1xuICB9XG4gIGdldE1haWxpbmdMaXN0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcIm1haWxpbmdfbGlzdFwiXTtcbiAgfVxuICBnZXRUcmFja2VyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcInRyYWNrZXJcIl07XG4gIH1cbiAgZ2V0VmVyc2lvbklyaSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCN2ZXJzaW9uSVJJXCJdO1xuICB9XG4gIGdldFZlcnNpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjdmVyc2lvbkluZm9cIl07XG4gIH1cbiAgZ2V0VmVyc2lvbkZyb21JcmkoKTogc3RyaW5nIHtcbiAgICBjb25zdCB2ZXJzaW9uSXJpID1cbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI3ZlcnNpb25JUklcIl07XG4gICAgaWYgKCF2ZXJzaW9uSXJpKSByZXR1cm4gXCJcIjtcbiAgICBjb25zdCB2ZXJzaW9uRnJvbURhdGUgPSB2ZXJzaW9uSXJpLm1hdGNoKC9cXGR7NH0tXFxkezJ9LVxcZHsyfS8pO1xuXG4gICAgaWYgKHZlcnNpb25Gcm9tRGF0ZSAmJiB2ZXJzaW9uRnJvbURhdGUubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHZlcnNpb25Gcm9tRGF0ZVswXTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdmVyc2lvbkZyb21OdW1iZXIgPSB2ZXJzaW9uSXJpLm1hdGNoKC9cXC92W2QuXS4qXFwvLyk7XG4gICAgICByZXR1cm4gdmVyc2lvbkZyb21OdW1iZXJcbiAgICAgICAgPyB2ZXJzaW9uRnJvbU51bWJlclswXS5yZXBsYWNlQWxsKFwiL1wiLCBcIlwiKS5yZXBsYWNlKFwidlwiLCBcIlwiKVxuICAgICAgICA6IFwiXCI7XG4gICAgfVxuICB9XG4gIGdldExvYWRlZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJsb2FkZWRcIl07XG4gIH1cbiAgZ2V0QW5ub3RhdGlvblByZWRpY2F0ZXMoKTogc3RyaW5nW10ge1xuICAgIGxldCBhbm5vdGF0aW9uUHJlZGljYXRlcyA9IG5ldyBTZXQoKTtcblxuICAgIGZvciAobGV0IHByZWRpY2F0ZSBvZiBPYmplY3Qua2V5cyh0aGlzLnByb3BlcnRpZXMpKSB7XG4gICAgICAvLyBwcm9wZXJ0aWVzIHdpdGhvdXQgYW4gSVJJIGFyZSB0aGluZ3MgdGhhdCB3ZXJlIGFkZGVkIGJ5IHJkZjJqc29uIHNvIHNob3VsZCBub3RcbiAgICAgIC8vIGJlIGluY2x1ZGVkIGFzIGFubm90YXRpb25zXG4gICAgICBpZiAocHJlZGljYXRlLmluZGV4T2YoXCI6Ly9cIikgPT09IC0xKSBjb250aW51ZTtcblxuICAgICAgaWYgKHByZWRpY2F0ZSA9PT0gXCJodHRwOi8vcHVybC5vYm9saWJyYXJ5Lm9yZy9vYm8vSUFPXzAwMDA3MDBcIikge1xuICAgICAgICAvLyBcImhhcyBwcmVmZXJyZWQgcm9vdCB0ZXJtXCJcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIGFueXRoaW5nIGluIHRoZSByZGYsIHJkZnMsIG93bCBuYW1lc3BhY2VzIGFyZW4ndCBjb25zaWRlcmVkIGFubm90YXRpb25zXG4gICAgICBpZiAoXG4gICAgICAgICEoXG4gICAgICAgICAgcHJlZGljYXRlLnN0YXJ0c1dpdGgoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjXCIpIHx8XG4gICAgICAgICAgcHJlZGljYXRlLnN0YXJ0c1dpdGgoXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjXCIpIHx8XG4gICAgICAgICAgcHJlZGljYXRlLnN0YXJ0c1dpdGgoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNcIilcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIGFubm90YXRpb25QcmVkaWNhdGVzLmFkZChwcmVkaWNhdGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBBcnJheS5mcm9tKGFubm90YXRpb25QcmVkaWNhdGVzKSBhcyBzdHJpbmdbXTtcbiAgfVxuICBnZXRQcmVmZXJyZWRSb290cygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiaGFzUHJlZmVycmVkUm9vdFwiXSk7XG4gIH1cbiAgZ2V0TGFuZ3VhZ2VzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJsYW5ndWFnZVwiXSk7XG4gIH1cbiAgZ2V0SW1wb3J0c0Zyb20oKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImltcG9ydHNGcm9tXCJdKTtcbiAgfVxuICBnZXRFeHBvcnRzVG8oKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImV4cG9ydHNUb1wiXSk7XG4gIH1cbn1cbiIsICJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCBNdWx0aW1hcCBmcm9tIFwibXVsdGltYXBcIjtcbmltcG9ydCBFbnRpdHkgZnJvbSBcIi4uLy4uLy4uL21vZGVsL0VudGl0eVwiO1xuXG4vKiBVbmZsYXR0ZW5zIGEgbGlzdCBvZiBlbnRpdGllcyBpbnRvOlxuICpcdC0gQSBsaXN0IG9mIHJvb3QgZW50aXRpZXNcbiAqIFx0LSBBIG1hcHBpbmcgb2YgVVJJIHRvIGxpc3Qgb2YgY2hpbGQgZW50aXRpZXNcbiAqXG4gKiBVc2VkIGJ5IEVudGl0eVRyZWUgYW5kIEVudGl0eUdyYXBoXG4gKi9cblxuIGludGVyZmFjZSBQYXJlbnRDaGlsZFJlbGF0aW9uIHtcblx0cGFyZW50OkVudGl0eSxcblx0Y2hpbGQ6RW50aXR5XG5cdHBhcmVudFJlbGF0aW9uVG9DaGlsZDpzdHJpbmd8bnVsbFxuXHRjaGlsZFJlbGF0aW9uVG9QYXJlbnQ6c3RyaW5nfG51bGxcbiB9XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGV4dHJhY3RFbnRpdHlIaWVyYXJjaHkoZW50aXRpZXM6IEVudGl0eVtdKToge1xuICByb290RW50aXRpZXM6IEVudGl0eVtdO1xuICBwYXJlbnRUb0NoaWxkUmVsYXRpb25zOiBNdWx0aW1hcDxzdHJpbmcsIFBhcmVudENoaWxkUmVsYXRpb24+O1xufSB7XG4gIGxldCBjaGlsZFRvUGFyZW50UmVsYXRpb25zOiBNdWx0aW1hcDxzdHJpbmcsIFBhcmVudENoaWxkUmVsYXRpb24+ID0gbmV3IE11bHRpbWFwKCk7XG5cbiAgbGV0IHVyaVRvTm9kZTogTWFwPHN0cmluZywgRW50aXR5PiA9IG5ldyBNYXAoKTtcbiAgZm9yIChsZXQgZW50aXR5IG9mIGVudGl0aWVzKSB7XG4gICAgdXJpVG9Ob2RlLnNldChlbnRpdHkuZ2V0SXJpKCksIGVudGl0eSk7XG4gIH1cblxuICBmb3IgKGxldCBlbnRpdHkgb2YgZW50aXRpZXMpIHtcbiAgICBpZiAoaXNUb3AoZW50aXR5LmdldElyaSgpKSkgY29udGludWU7XG5cbiAgICBmb3IgKGxldCBwYXJlbnRSZWxhdGlvbiBvZiBlbnRpdHkuZ2V0UGFyZW50cygpKSB7XG5cbiAgICAgIGxldCBwYXJlbnRJcmkgPSBwYXJlbnRSZWxhdGlvbi52YWx1ZTtcbiAgICAgIGxldCBwYXJlbnRFbnRpdHkgPSB1cmlUb05vZGUuZ2V0KHBhcmVudElyaSk7XG5cbiAgICAgIGlmIChpc1RvcChwYXJlbnRJcmkpKSBjb250aW51ZTtcblxuICAgICAgaWYoISAocGFyZW50RW50aXR5IGluc3RhbmNlb2YgRW50aXR5KSkge1xuXHRjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIHBhcmVudFJlbGF0aW9uVG9DaGlsZCwgY2hpbGRSZWxhdGlvblRvUGFyZW50XG5cbiAgICAgIGlmKGVudGl0eS5nZXRUeXBlKCkgPT09ICdpbmRpdmlkdWFsJykge1xuXG5cdC8vIEluIHRoZSBjYXNlIG9mIGluZGl2aWR1YWxzLCB0aGUgY2hpbGQtPnBhcmVudCByZWxhdGlvbnNoaXAgaXMgYWx3YXlzXG5cdC8vIHJkZjp0eXBlIGFuZCB0aGVyZSBpcyBubyBleHBsaWNpdCBwYXJlbnQtPmNoaWxkIHJlbGF0aW9uc2hpcC5cblxuXHRjaGlsZFJlbGF0aW9uVG9QYXJlbnQgPSAnaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zI3R5cGUnXG5cdHBhcmVudFJlbGF0aW9uVG9DaGlsZCA9IG51bGxcblxuICAgICAgfSBlbHNlIGlmKGVudGl0eS5nZXRUeXBlKCkgPT0gJ2NsYXNzJykge1xuXG5cdC8vIEluIHRoZSBjYXNlIG9mIGNsYXNzZXMsIHRoZSByZWxhdGlvbnMgYXJlIHByb3ZpZGVkIGluIHRoZSBtZXRhZGF0YS5cblxuXHRwYXJlbnRSZWxhdGlvblRvQ2hpbGQgPSBcblx0XHRwYXJlbnRSZWxhdGlvbi5nZXRNZXRhZGF0YSgpXG5cdFx0XHQmJiBwYXJlbnRSZWxhdGlvbi5nZXRNZXRhZGF0YSgpWydwYXJlbnRSZWxhdGlvblRvQ2hpbGQnXSBcblx0XHRcdCYmIHBhcmVudFJlbGF0aW9uLmdldE1ldGFkYXRhKClbJ3BhcmVudFJlbGF0aW9uVG9DaGlsZCddWzBdO1xuXG5cdGNoaWxkUmVsYXRpb25Ub1BhcmVudCA9IFxuXHRcdHBhcmVudFJlbGF0aW9uLmdldE1ldGFkYXRhKClcblx0XHRcdCYmIHBhcmVudFJlbGF0aW9uLmdldE1ldGFkYXRhKClbJ2NoaWxkUmVsYXRpb25Ub1BhcmVudCddIFxuXHRcdFx0JiYgcGFyZW50UmVsYXRpb24uZ2V0TWV0YWRhdGEoKVsnY2hpbGRSZWxhdGlvblRvUGFyZW50J11bMF07XG5cbiAgICAgIH0gZWxzZSB7XG5cblx0Ly8gSW4gdGhlIGNhc2Ugb2YgcHJvcGVydGllcywgdGhlcmUgYXJlIG5vIHJlbGF0aW9ucyB0byBzaG93LlxuXHQvLyAoaXQgd291bGQgYWx3YXlzIGJlIGp1c3Qgc3ViUHJvcGVydHlPZilcblx0Ly9cblxuICAgICAgfVxuXG4gICAgICBsZXQgcmVsYXRpb24gPSB7XG5cdHBhcmVudDogcGFyZW50RW50aXR5LFxuXHRjaGlsZDogZW50aXR5LFxuXHRwYXJlbnRSZWxhdGlvblRvQ2hpbGQsXG5cdGNoaWxkUmVsYXRpb25Ub1BhcmVudFxuICAgICAgfVxuXG4gICAgICBjaGlsZFRvUGFyZW50UmVsYXRpb25zLnNldChlbnRpdHkuZ2V0SXJpKCksIHJlbGF0aW9uKTtcbiAgICB9XG4gIH1cblxuICB2YXIgYnJlYWtDeWNsZXMgPSBmdW5jdGlvbiAoY3VycmVudElyaTpzdHJpbmcsIHZpc2l0ZWRJcmlzOiBTZXQ8c3RyaW5nPikge1xuICAgIHZpc2l0ZWRJcmlzLmFkZChjdXJyZW50SXJpKTtcblxuICAgIGxldCBwYXJlbnRSZWxhdGlvbnMgPSBjaGlsZFRvUGFyZW50UmVsYXRpb25zLmdldChjdXJyZW50SXJpKTtcbiAgICBpZiAocGFyZW50UmVsYXRpb25zKSB7XG4gICAgICBmb3IgKGxldCBwYXJlbnRSZWxhdGlvbiBvZiBwYXJlbnRSZWxhdGlvbnMpIHtcbiAgICAgICAgaWYgKHZpc2l0ZWRJcmlzLmhhcyhwYXJlbnRSZWxhdGlvbi5wYXJlbnQuZ2V0SXJpKCkpKSB7XG4gICAgICAgICAgLy8gd2UgYWxyZWFkeSBzYXcgdGhpcyBwYXJlbnQsIHJlbW92ZSBpdFxuXHQgIGNoaWxkVG9QYXJlbnRSZWxhdGlvbnMuZGVsZXRlKGN1cnJlbnRJcmksIHBhcmVudFJlbGF0aW9uKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJyZWFrQ3ljbGVzKHBhcmVudFJlbGF0aW9uLnBhcmVudC5nZXRJcmkoKSwgbmV3IFNldCh2aXNpdGVkSXJpcykpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIC8vIGJyZWFrIGN5Y2xlcyBzdGFydGluZyBmcm9tIGxlYWYgZW50aXRpZXNcbiAgZm9yIChsZXQgZW50aXR5IG9mIGVudGl0aWVzKSB7XG4gICAgYnJlYWtDeWNsZXMoZW50aXR5LmdldElyaSgpLCBuZXcgU2V0KCkpO1xuICB9XG5cbiAgbGV0IHBhcmVudFRvQ2hpbGRSZWxhdGlvbnM6IE11bHRpbWFwPHN0cmluZywgUGFyZW50Q2hpbGRSZWxhdGlvbj4gPSBuZXcgTXVsdGltYXAoKTtcblxuICBmb3IobGV0IGNoaWxkSXJpIG9mIEFycmF5LmZyb20oY2hpbGRUb1BhcmVudFJlbGF0aW9ucy5rZXlzKCkpKSB7XG4gIFx0bGV0IHJlbGF0aW9ucyA9IGNoaWxkVG9QYXJlbnRSZWxhdGlvbnMuZ2V0KGNoaWxkSXJpKTtcblx0Zm9yKGxldCByIG9mIHJlbGF0aW9ucykge1xuXHRcdHBhcmVudFRvQ2hpbGRSZWxhdGlvbnMuc2V0KHIucGFyZW50LmdldElyaSgpLCByKVxuXHR9XG4gIH1cblxuICBsZXQgcm9vdEVudGl0aWVzID0gZW50aXRpZXMuZmlsdGVyKChub2RlKSA9PiB7XG4gICAgaWYgKGlzVG9wKG5vZGUuZ2V0SXJpKCkpKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIChjaGlsZFRvUGFyZW50UmVsYXRpb25zLmdldChub2RlLmdldElyaSgpKSB8fCBbXSkubGVuZ3RoID09PSAwO1xuICB9KTtcblxuICByZXR1cm4geyByb290RW50aXRpZXMsIHBhcmVudFRvQ2hpbGRSZWxhdGlvbnMgfTtcbn1cblxuZnVuY3Rpb24gaXNUb3AoaXJpKSB7XG4gIHJldHVybiAoXG4gICAgaXJpID09PSBcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI1RoaW5nXCIgfHxcbiAgICBpcmkgPT09IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjVG9wT2JqZWN0UHJvcGVydHlcIlxuICApO1xufVxuIiwgImltcG9ydCBFbnRpdHkgZnJvbSBcIi4uLy4uLy4uL21vZGVsL0VudGl0eVwiO1xuaW1wb3J0IE9udG9sb2d5IGZyb20gXCIuLi8uLi8uLi9tb2RlbC9PbnRvbG9neVwiO1xuaW1wb3J0IGV4dHJhY3RFbnRpdHlIaWVyYXJjaHkgZnJvbSBcIi4vZXh0cmFjdEVudGl0eUhpZXJhcmNoeVwiO1xuaW1wb3J0IHsgVHJlZU5vZGUgfSBmcm9tIFwiLi4vb250b2xvZ2llc1NsaWNlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVRyZWVGcm9tRW50aXRpZXMoXG4gIGVudGl0aWVzOiBFbnRpdHlbXSxcbiAgcHJlZmVycmVkUm9vdHM6IGJvb2xlYW4sXG4gIG9udG9sb2d5OiBPbnRvbG9neVxuKTogeyBhbGxOb2RlczpUcmVlTm9kZVtdLCByb290Tm9kZXM6IFRyZWVOb2RlW107IGF1dG9tYXRpY2FsbHlFeHBhbmRlZE5vZGVzOlNldDxzdHJpbmc+LCBub2RlQ2hpbGRyZW46IGFueSB9IHtcbiAgbGV0IHsgcm9vdEVudGl0aWVzLCBwYXJlbnRUb0NoaWxkUmVsYXRpb25zIH0gPSBleHRyYWN0RW50aXR5SGllcmFyY2h5KGVudGl0aWVzKTtcblxuICBjb25zb2xlLmxvZygncm9vdEVudGl0aWVzJylcbiAgY29uc29sZS5kaXIocm9vdEVudGl0aWVzKVxuICBjb25zb2xlLmxvZygncGFyZW50VG9DaGlsZFJlbGF0aW9ucycpXG4gIGNvbnNvbGUuZGlyKHBhcmVudFRvQ2hpbGRSZWxhdGlvbnMpXG5cbiAgaWYgKHByZWZlcnJlZFJvb3RzKSB7XG4gICAgbGV0IHByZWZlcnJlZCA9IG9udG9sb2d5LmdldFByZWZlcnJlZFJvb3RzKCk7XG4gICAgaWYgKHByZWZlcnJlZC5sZW5ndGggPiAwKSB7XG4gICAgICBsZXQgcHJlZmVycmVkUm9vdEVudGl0aWVzID0gcHJlZmVycmVkLm1hcChcbiAgICAgICAgKGlyaSkgPT4gZW50aXRpZXMuZmlsdGVyKChlbnRpdHkpID0+IGVudGl0eS5nZXRJcmkoKSA9PT0gaXJpKVswXVxuICAgICAgKTtcbiAgICAgIHJvb3RFbnRpdGllcyA9IHByZWZlcnJlZFJvb3RFbnRpdGllcy5maWx0ZXIoKGVudGl0eSkgPT4gISFlbnRpdHkpO1xuICAgIH1cbiAgfVxuXG4gIGxldCBhbGxOb2RlczpUcmVlTm9kZVtdID0gW11cbiAgbGV0IG5vZGVDaGlsZHJlbjogYW55ID0ge307XG4gIGxldCBhdXRvbWF0aWNhbGx5RXhwYW5kZWROb2RlczpTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKVxuXG4gIHJldHVybiB7XG4gICAgYWxsTm9kZXM6IGFsbE5vZGVzLFxuICAgIHJvb3ROb2Rlczogcm9vdEVudGl0aWVzLm1hcCgocm9vdEVudGl0eSkgPT5cbiAgICAgIGNyZWF0ZVRyZWVOb2RlKHJvb3RFbnRpdHksIHVuZGVmaW5lZCwgMCwgbnVsbCwgbnVsbClcbiAgICApLFxuICAgIG5vZGVDaGlsZHJlbixcbiAgICBhdXRvbWF0aWNhbGx5RXhwYW5kZWROb2Rlc1xuICB9O1xuXG4gIGZ1bmN0aW9uIGNyZWF0ZVRyZWVOb2RlKFxuICAgIG5vZGU6IEVudGl0eSxcbiAgICBwYXJlbnQ6IFRyZWVOb2RlIHwgdW5kZWZpbmVkLFxuICAgIGRlYnVnTnVtSXRlcmF0aW9uczogbnVtYmVyLFxuICAgIHBhcmVudFJlbGF0aW9uVG9DaGlsZDpzdHJpbmd8bnVsbCxcbiAgICBjaGlsZFJlbGF0aW9uVG9QYXJlbnQ6c3RyaW5nfG51bGwsXG4gICk6IFRyZWVOb2RlIHtcbiAgICBpZiAoZGVidWdOdW1JdGVyYXRpb25zID4gMTAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJwcm9iYWJsZSBjeWNsaWMgdHJlZSAoY3JlYXRlVHJlZU5vZGUpXCIpO1xuICAgIH1cbiAgICBjb25zdCBjaGlsZE5vZGVzID0gcGFyZW50VG9DaGlsZFJlbGF0aW9ucy5nZXQobm9kZS5nZXRJcmkoKSkgfHwgW107XG5cbiAgICBjb25zdCB0cmVlTm9kZTogVHJlZU5vZGUgPSB7XG4gICAgICBhYnNvbHV0ZUlkZW50aXR5OiBwYXJlbnRcbiAgICAgICAgPyBwYXJlbnQuYWJzb2x1dGVJZGVudGl0eSArIFwiO1wiICsgbm9kZS5nZXRJcmkoKVxuICAgICAgICA6IG5vZGUuZ2V0SXJpKCksXG4gICAgICBpcmk6IG5vZGUuZ2V0SXJpKCksXG4gICAgICB0aXRsZTogbm9kZS5nZXROYW1lKCksXG4gICAgICBleHBhbmRhYmxlOiBub2RlLmhhc0NoaWxkcmVuKCksXG4gICAgICBlbnRpdHk6IG5vZGUsXG4gICAgICBudW1EZXNjZW5kYW50czpcbiAgICAgICAgbm9kZS5nZXROdW1IaWVyYXJjaGljYWxEZXNjZW5kYW50cygpIHx8IG5vZGUuZ2V0TnVtRGVzY2VuZGFudHMoKSxcbiAgICAgIHBhcmVudFJlbGF0aW9uVG9DaGlsZCxcbiAgICAgIGNoaWxkUmVsYXRpb25Ub1BhcmVudFxuICAgIH07XG5cbiAgICBhbGxOb2Rlcy5wdXNoKHRyZWVOb2RlKVxuXG4gICAgbm9kZUNoaWxkcmVuW3RyZWVOb2RlLmFic29sdXRlSWRlbnRpdHldID0gY2hpbGROb2Rlcy5tYXAoKGNoaWxkTm9kZSkgPT5cbiAgICAgIGNyZWF0ZVRyZWVOb2RlKGNoaWxkTm9kZS5jaGlsZCwgdHJlZU5vZGUsIGRlYnVnTnVtSXRlcmF0aW9ucyArIDEsIGNoaWxkTm9kZS5wYXJlbnRSZWxhdGlvblRvQ2hpbGQsIGNoaWxkTm9kZS5jaGlsZFJlbGF0aW9uVG9QYXJlbnQpXG4gICAgKTtcblxuICAgIGlmKG5vZGUuaGFzQ2hpbGRyZW4oKSAmJiBjaGlsZE5vZGVzLmxlbmd0aCA+IDApIHtcblx0YXV0b21hdGljYWxseUV4cGFuZGVkTm9kZXMuYWRkKHRyZWVOb2RlLmFic29sdXRlSWRlbnRpdHkpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRyZWVOb2RlO1xuICB9XG59XG4iLCAiaW1wb3J0IHtcbiAgY3JlYXRlQWN0aW9uLFxuICBjcmVhdGVBc3luY1RodW5rLFxuICBjcmVhdGVTbGljZSxcbiAgUGF5bG9hZEFjdGlvbixcbn0gZnJvbSBcIkByZWR1eGpzL3Rvb2xraXRcIjtcbmltcG9ydCB7IGdldCwgZ2V0UGFnaW5hdGVkLCBQYWdlIH0gZnJvbSBcIi4uLy4uL2FwcC9hcGlcIjtcbmltcG9ydCB7IG1hcFRvQXBpUGFyYW1zLCB0aGluZ0Zyb21Kc29uUHJvcGVydGllcyB9IGZyb20gXCIuLi8uLi9hcHAvdXRpbFwiO1xuaW1wb3J0IEVudGl0eSBmcm9tIFwiLi4vLi4vbW9kZWwvRW50aXR5XCI7XG5pbXBvcnQgT250b2xvZ3kgZnJvbSBcIi4uLy4uL21vZGVsL09udG9sb2d5XCI7XG5pbXBvcnQgY3JlYXRlVHJlZUZyb21FbnRpdGllcyBmcm9tIFwiLi9lbnRpdGllcy9jcmVhdGVUcmVlRnJvbUVudGl0aWVzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgT250b2xvZ2llc1N0YXRlIHtcbiAgb250b2xvZ3k6IE9udG9sb2d5IHwgdW5kZWZpbmVkO1xuICBlbnRpdHk6IEVudGl0eSB8IHVuZGVmaW5lZDtcbiAgbm9kZXNXaXRoQ2hpbGRyZW5Mb2FkZWQ6IHN0cmluZ1tdO1xuICBub2RlQ2hpbGRyZW46IGFueTtcbiAgcm9vdE5vZGVzOiBUcmVlTm9kZVtdO1xuICBvbnRvbG9naWVzOiBPbnRvbG9neVtdO1xuICB0b3RhbE9udG9sb2dpZXM6IG51bWJlcjtcbiAgZW50aXRpZXM6IEVudGl0eVtdO1xuICB0b3RhbEVudGl0aWVzOiBudW1iZXI7XG4gIGxvYWRpbmdPbnRvbG9naWVzOiBib29sZWFuO1xuICBsb2FkaW5nRW50aXRpZXM6IGJvb2xlYW47XG4gIG51bVBlbmRpbmdUcmVlUmVxdWVzdHM6IG51bWJlcjtcbiAgbG9hZGluZ09udG9sb2d5OiBib29sZWFuO1xuICBsb2FkaW5nRW50aXR5OiBib29sZWFuO1xuICBjbGFzc0luc3RhbmNlczogUGFnZTxFbnRpdHk+IHwgbnVsbDtcbiAgbG9hZGluZ0NsYXNzSW5zdGFuY2VzOiBib29sZWFuO1xuICBhdXRvbWF0aWNhbGx5RXhwYW5kZWROb2Rlczogc3RyaW5nW107XG4gIG1hbnVhbGx5RXhwYW5kZWROb2Rlczogc3RyaW5nW107XG4gIHByZWZlcnJlZFJvb3RzOiBib29sZWFuO1xuICBkaXNwbGF5T2Jzb2xldGU6IGJvb2xlYW47XG4gIGRpc3BsYXlTaWJsaW5nczogYm9vbGVhbjtcbiAgZGlzcGxheUNvdW50czogYm9vbGVhbjtcbiAgZXJyb3JNZXNzYWdlOiBzdHJpbmc7XG59XG5leHBvcnQgaW50ZXJmYWNlIFRyZWVOb2RlIHtcbiAgYWJzb2x1dGVJZGVudGl0eTogc3RyaW5nOyAvLyB0aGUgSVJJcyBvZiB0aGlzIG5vZGUgYW5kIGl0cyBhbmNlc3RvcnMgZGVsaW1pdGVkIGJ5IGEgO1xuICBpcmk6IHN0cmluZztcbiAgdGl0bGU6IHN0cmluZztcbiAgZXhwYW5kYWJsZTogYm9vbGVhbjtcbiAgZW50aXR5OiBFbnRpdHk7XG4gIG51bURlc2NlbmRhbnRzOiBudW1iZXI7XG4gIHBhcmVudFJlbGF0aW9uVG9DaGlsZDogc3RyaW5nIHwgbnVsbDsgLy8gaWYgYXBwbGljYWJsZSwgcmVsYXRpb24gZnJvbSB0aGUgcGFyZW50IG5vZGUgdG8gdGhpcyBub2RlIChlLmcuIGhhc19wYXJ0KVxuICBjaGlsZFJlbGF0aW9uVG9QYXJlbnQ6IHN0cmluZyB8IG51bGw7IC8vIGlmIGFwcGxpY2FibGUsIHJlbGF0aW9uIGZyb20gdGhpcyBub2RlIHRvIHRoZSBwYXJlbnQgbm9kZSAoZS5nLiBwYXJ0X29mKVxufVxuXG5jb25zdCBpbml0aWFsU3RhdGU6IE9udG9sb2dpZXNTdGF0ZSA9IHtcbiAgb250b2xvZ3k6IHVuZGVmaW5lZCxcbiAgZW50aXR5OiB1bmRlZmluZWQsXG4gIG5vZGVzV2l0aENoaWxkcmVuTG9hZGVkOiBbXSxcbiAgbm9kZUNoaWxkcmVuOiB7fSxcbiAgcm9vdE5vZGVzOiBbXSxcbiAgb250b2xvZ2llczogW10sXG4gIHRvdGFsT250b2xvZ2llczogMCxcbiAgZW50aXRpZXM6IFtdLFxuICB0b3RhbEVudGl0aWVzOiAwLFxuICBsb2FkaW5nT250b2xvZ2llczogZmFsc2UsXG4gIGxvYWRpbmdFbnRpdGllczogZmFsc2UsXG4gIG51bVBlbmRpbmdUcmVlUmVxdWVzdHM6IDAsXG4gIGxvYWRpbmdPbnRvbG9neTogZmFsc2UsXG4gIGxvYWRpbmdFbnRpdHk6IGZhbHNlLFxuICBjbGFzc0luc3RhbmNlczogbnVsbCxcbiAgbG9hZGluZ0NsYXNzSW5zdGFuY2VzOiBmYWxzZSxcbiAgYXV0b21hdGljYWxseUV4cGFuZGVkTm9kZXM6IFtdLFxuICBtYW51YWxseUV4cGFuZGVkTm9kZXM6IFtdLFxuICBwcmVmZXJyZWRSb290czogZmFsc2UsXG4gIGRpc3BsYXlPYnNvbGV0ZTogZmFsc2UsXG4gIGRpc3BsYXlTaWJsaW5nczogZmFsc2UsXG4gIGRpc3BsYXlDb3VudHM6IHRydWUsXG4gIGVycm9yTWVzc2FnZTogXCJcIixcbn07XG5cbmV4cG9ydCBjb25zdCByZXNldFRyZWVDb250ZW50ID0gY3JlYXRlQWN0aW9uKFwib250b2xvZ2llc190cmVlX3Jlc2V0X2NvbnRlbnRcIik7XG5leHBvcnQgY29uc3QgcmVzZXRUcmVlU2V0dGluZ3MgPSBjcmVhdGVBY3Rpb248e1xuICBlbnRpdHlUeXBlOiBzdHJpbmc7XG4gIHNlbGVjdGVkRW50aXR5PzogRW50aXR5O1xufT4oXCJvbnRvbG9naWVzX3RyZWVfcmVzZXRfc2V0dGluZ3NcIik7XG5cbmV4cG9ydCBjb25zdCBlbmFibGVQcmVmZXJyZWRSb290cyA9IGNyZWF0ZUFjdGlvbihcbiAgXCJvbnRvbG9naWVzX3ByZWZlcnJlZF9lbmFibGVkXCJcbik7XG5leHBvcnQgY29uc3QgZGlzYWJsZVByZWZlcnJlZFJvb3RzID0gY3JlYXRlQWN0aW9uKFxuICBcIm9udG9sb2dpZXNfcHJlZmVycmVkX2Rpc2FibGVkXCJcbik7XG5leHBvcnQgY29uc3Qgb3Blbk5vZGUgPSBjcmVhdGVBY3Rpb248VHJlZU5vZGU+KFwib250b2xvZ2llc19ub2RlX29wZW5cIik7XG5leHBvcnQgY29uc3QgY2xvc2VOb2RlID0gY3JlYXRlQWN0aW9uPFRyZWVOb2RlPihcIm9udG9sb2dpZXNfbm9kZV9jbG9zZVwiKTtcblxuZXhwb3J0IGNvbnN0IHNob3dPYnNvbGV0ZSA9IGNyZWF0ZUFjdGlvbihcIm9udG9sb2dpZXNfc2hvd19vYnNvbGV0ZVwiKTtcbmV4cG9ydCBjb25zdCBoaWRlT2Jzb2xldGUgPSBjcmVhdGVBY3Rpb24oXCJvbnRvbG9naWVzX2hpZGVfb2Jzb2xldGVcIik7XG5cbmV4cG9ydCBjb25zdCBzaG93U2libGluZ3MgPSBjcmVhdGVBY3Rpb24oXCJvbnRvbG9naWVzX3Nob3dfc2libGluZ3NcIik7XG5leHBvcnQgY29uc3QgaGlkZVNpYmxpbmdzID0gY3JlYXRlQWN0aW9uKFwib250b2xvZ2llc19oaWRlX3NpYmxpbmdzXCIpO1xuXG5leHBvcnQgY29uc3Qgc2hvd0NvdW50cyA9IGNyZWF0ZUFjdGlvbihcIm9udG9sb2dpZXNfc2hvd19jb3VudHNcIik7XG5leHBvcnQgY29uc3QgaGlkZUNvdW50cyA9IGNyZWF0ZUFjdGlvbihcIm9udG9sb2dpZXNfaGlkZV9jb3VudHNcIik7XG5cbmV4cG9ydCBjb25zdCBnZXRPbnRvbG9neSA9IGNyZWF0ZUFzeW5jVGh1bmsoXG4gIFwib250b2xvZ2llc19vbnRvbG9neVwiLFxuICBhc3luYyAoXG4gICAge1xuICAgICAgb250b2xvZ3lJZCxcbiAgICAgIGxhbmcsXG4gICAgICBhcGlVcmwsXG4gICAgfTogeyBvbnRvbG9neUlkOiBzdHJpbmc7IGxhbmc6IHN0cmluZzsgYXBpVXJsPzogc3RyaW5nIH0sXG4gICAgeyByZWplY3RXaXRoVmFsdWUgfVxuICApID0+IHtcbiAgICBjb25zdCBwYXRoID0gYGFwaS92Mi9vbnRvbG9naWVzLyR7b250b2xvZ3lJZH1gO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBvbnRvbG9neVByb3BlcnRpZXMgPSBhd2FpdCBnZXQ8YW55PihwYXRoLCB7IGxhbmcgfSwgYXBpVXJsKTtcbiAgICAgIHJldHVybiBuZXcgT250b2xvZ3kob250b2xvZ3lQcm9wZXJ0aWVzKTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICByZXR1cm4gcmVqZWN0V2l0aFZhbHVlKGBFcnJvciBhY2Nlc3Npbmc6ICR7cGF0aH07ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cbik7XG5leHBvcnQgY29uc3QgZ2V0RW50aXR5V2l0aFR5cGUgPSBjcmVhdGVBc3luY1RodW5rKFxuICBcIm9udG9sb2dpZXNfZW50aXR5X3R5cGVcIixcbiAgYXN5bmMgKFxuICAgIHtcbiAgICAgIG9udG9sb2d5SWQsXG4gICAgICBlbnRpdHlUeXBlLFxuICAgICAgZW50aXR5SXJpLFxuICAgICAgc2VhcmNoUGFyYW1zLFxuICAgIH06IHtcbiAgICAgIG9udG9sb2d5SWQ6IHN0cmluZztcbiAgICAgIGVudGl0eVR5cGU6IHN0cmluZztcbiAgICAgIGVudGl0eUlyaTogc3RyaW5nO1xuICAgICAgc2VhcmNoUGFyYW1zOiBVUkxTZWFyY2hQYXJhbXM7XG4gICAgfSxcbiAgICB7IHJlamVjdFdpdGhWYWx1ZSB9XG4gICkgPT4ge1xuICAgIGNvbnN0IGFwaVNlYXJjaFBhcmFtcyA9IG1hcFRvQXBpUGFyYW1zKHNlYXJjaFBhcmFtcyk7XG4gICAgY29uc3QgZG91YmxlRW5jb2RlZFRlcm1VcmkgPSBlbmNvZGVVUklDb21wb25lbnQoXG4gICAgICBlbmNvZGVVUklDb21wb25lbnQoZW50aXR5SXJpKVxuICAgICk7XG4gICAgbGV0IHBhdGggPSBcIlwiO1xuICAgIHRyeSB7XG4gICAgICBsZXQgZW50aXR5SnNvblByb3BlcnRpZXMgPSBudWxsO1xuICAgICAgaWYgKGVudGl0eUlyaSkge1xuICAgICAgICBwYXRoID0gYGFwaS92Mi9vbnRvbG9naWVzLyR7b250b2xvZ3lJZH0vJHtlbnRpdHlUeXBlfS8ke2RvdWJsZUVuY29kZWRUZXJtVXJpfT8ke25ldyBVUkxTZWFyY2hQYXJhbXMoXG4gICAgICAgICAgYXBpU2VhcmNoUGFyYW1zXG4gICAgICAgICl9YDtcbiAgICAgICAgZW50aXR5SnNvblByb3BlcnRpZXMgPSBhd2FpdCBnZXQ8YW55PihwYXRoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhdGggPSBgYXBpL3YyL29udG9sb2dpZXMvJHtvbnRvbG9neUlkfS8ke2VudGl0eVR5cGV9PyR7bmV3IFVSTFNlYXJjaFBhcmFtcyhcbiAgICAgICAgICBhcGlTZWFyY2hQYXJhbXNcbiAgICAgICAgKX1gO1xuICAgICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgZ2V0UGFnaW5hdGVkPGFueT4ocGF0aCk7XG4gICAgICAgIGlmIChyZXN1bHRzLmVsZW1lbnRzLmxlbmd0aCA9PT0gMSAmJiByZXN1bHRzLnRvdGFsRWxlbWVudHMgPT09IDEpIHtcbiAgICAgICAgICBlbnRpdHlKc29uUHJvcGVydGllcyA9IHJlc3VsdHMuZWxlbWVudHNbMF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHJlamVjdFdpdGhWYWx1ZShcbiAgICAgICAgICAgIGBFcnJvciBhY2Nlc3Npbmc6ICR7cGF0aH07IFJldHJpZXZlZCBub25kaXN0aW5jdCBlbnRpdHk6ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgICAgIHJlc3VsdHNcbiAgICAgICAgICAgICl9YFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGluZ0Zyb21Kc29uUHJvcGVydGllcyhlbnRpdHlKc29uUHJvcGVydGllcyk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgcmV0dXJuIHJlamVjdFdpdGhWYWx1ZShgRXJyb3IgYWNjZXNzaW5nOiAke3BhdGh9OyAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG4pO1xuZXhwb3J0IGNvbnN0IGdldEVudGl0eSA9IGNyZWF0ZUFzeW5jVGh1bmsoXG4gIFwib250b2xvZ2llc19lbnRpdHlcIixcbiAgYXN5bmMgKFxuICAgIHtcbiAgICAgIG9udG9sb2d5SWQsXG4gICAgICBlbnRpdHlJcmksXG4gICAgfToge1xuICAgICAgb250b2xvZ3lJZDogc3RyaW5nO1xuICAgICAgZW50aXR5SXJpOiBzdHJpbmc7XG4gICAgfSxcbiAgICB7IHJlamVjdFdpdGhWYWx1ZSB9XG4gICkgPT4ge1xuICAgIGNvbnN0IGRvdWJsZUVuY29kZWRUZXJtVXJpID0gZW5jb2RlVVJJQ29tcG9uZW50KFxuICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KGVudGl0eUlyaSlcbiAgICApO1xuICAgIGxldCBwYXRoID0gXCJcIjtcbiAgICB0cnkge1xuICAgICAgcGF0aCA9IGBhcGkvdjIvb250b2xvZ2llcy8ke29udG9sb2d5SWR9L2VudGl0aWVzLyR7ZG91YmxlRW5jb2RlZFRlcm1Vcml9YDtcbiAgICAgIGNvbnN0IGVudGl0eUpzb25Qcm9wZXJ0aWVzID0gYXdhaXQgZ2V0PGFueT4ocGF0aCk7XG4gICAgICByZXR1cm4gdGhpbmdGcm9tSnNvblByb3BlcnRpZXMoZW50aXR5SnNvblByb3BlcnRpZXMpO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIHJldHVybiByZWplY3RXaXRoVmFsdWUoYEVycm9yIGFjY2Vzc2luZzogJHtwYXRofTsgJHtlcnJvci5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuKTtcbmV4cG9ydCBjb25zdCBnZXRDbGFzc0luc3RhbmNlcyA9IGNyZWF0ZUFzeW5jVGh1bmsoXG4gIFwib250b2xvZ2llc19lbnRpdHlfY2xhc3NfaW5zdGFuY2VzXCIsXG4gIGFzeW5jIChcbiAgICB7XG4gICAgICBvbnRvbG9neUlkLFxuICAgICAgY2xhc3NJcmksXG4gICAgICBzZWFyY2hQYXJhbXMsXG4gICAgfToge1xuICAgICAgb250b2xvZ3lJZDogc3RyaW5nO1xuICAgICAgY2xhc3NJcmk6IHN0cmluZztcbiAgICAgIHNlYXJjaFBhcmFtczogVVJMU2VhcmNoUGFyYW1zO1xuICAgIH0sXG4gICAgeyByZWplY3RXaXRoVmFsdWUgfVxuICApID0+IHtcbiAgICBsZXQgcGF0aCA9IFwiXCI7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChjbGFzc0lyaSkge1xuICAgICAgICBjb25zdCBhcGlTZWFyY2hQYXJhbXMgPSBtYXBUb0FwaVBhcmFtcyhzZWFyY2hQYXJhbXMpO1xuICAgICAgICBjb25zdCBkb3VibGVFbmNvZGVkVGVybVVyaSA9IGVuY29kZVVSSUNvbXBvbmVudChcbiAgICAgICAgICBlbmNvZGVVUklDb21wb25lbnQoY2xhc3NJcmkpXG4gICAgICAgICk7XG4gICAgICAgIHBhdGggPSBgYXBpL3YyL29udG9sb2dpZXMvJHtvbnRvbG9neUlkfS9jbGFzc2VzLyR7ZG91YmxlRW5jb2RlZFRlcm1Vcml9L2luc3RhbmNlcz8ke25ldyBVUkxTZWFyY2hQYXJhbXMoXG4gICAgICAgICAgYXBpU2VhcmNoUGFyYW1zXG4gICAgICAgICl9YDtcbiAgICAgICAgY29uc3QgaW5zdGFuY2VzID0gKGF3YWl0IGdldFBhZ2luYXRlZDxhbnk+KHBhdGgpKS5tYXAoKGkpID0+XG4gICAgICAgICAgdGhpbmdGcm9tSnNvblByb3BlcnRpZXMoaSlcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGluc3RhbmNlcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiByZWplY3RXaXRoVmFsdWUoXG4gICAgICAgICAgYFdhcm5pbmcgYWNjZXNzaW5nOiAke3BhdGh9OyBDbGFzcyBJUkkgbm90IHByb3ZpZGVkYFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIHJldHVybiByZWplY3RXaXRoVmFsdWUoYEVycm9yIGFjY2Vzc2luZzogJHtwYXRofTsgJHtlcnJvci5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuKTtcbmV4cG9ydCBjb25zdCBnZXRPbnRvbG9naWVzID0gY3JlYXRlQXN5bmNUaHVuayhcbiAgXCJvbnRvbG9naWVzX29udG9sb2dpZXNcIixcbiAgYXN5bmMgKHsgcGFnZSwgcm93c1BlclBhZ2UsIHNlYXJjaCB9OiBhbnksIHsgcmVqZWN0V2l0aFZhbHVlIH0pID0+IHtcbiAgICBpZiAoc2VhcmNoLmxlbmd0aCA+IDEgJiYgIXNlYXJjaC5pbmNsdWRlcyhcIiBcIikpIHNlYXJjaCA9IFwiKlwiICsgc2VhcmNoICsgXCIqXCI7XG4gICAgY29uc3QgcGF0aCA9IGBhcGkvdjIvb250b2xvZ2llcz9wYWdlPSR7cGFnZX0mc2l6ZT0ke3Jvd3NQZXJQYWdlfSR7XG4gICAgICBzZWFyY2ggPyBcIiZzZWFyY2g9XCIgKyBzZWFyY2ggOiBcIlwiXG4gICAgfWA7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRhdGEgPSAoYXdhaXQgZ2V0UGFnaW5hdGVkPGFueT4ocGF0aCkpLm1hcCgobykgPT4gbmV3IE9udG9sb2d5KG8pKTtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIHJldHVybiByZWplY3RXaXRoVmFsdWUoYEVycm9yIGFjY2Vzc2luZzogJHtwYXRofTsgJHtlcnJvci5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuKTtcbmV4cG9ydCBjb25zdCBnZXRFbnRpdGllcyA9IGNyZWF0ZUFzeW5jVGh1bmsoXG4gIFwib250b2xvZ2llc19lbnRpdGllc1wiLFxuICBhc3luYyAoXG4gICAgeyBvbnRvbG9neUlkLCBlbnRpdHlUeXBlLCBwYWdlLCByb3dzUGVyUGFnZSwgc2VhcmNoIH06IGFueSxcbiAgICB7IHJlamVjdFdpdGhWYWx1ZSB9XG4gICkgPT4ge1xuICAgIGNvbnN0IHBhdGggPSBgYXBpL3YyL29udG9sb2dpZXMvJHtvbnRvbG9neUlkfS8ke2VudGl0eVR5cGV9P3BhZ2U9JHtwYWdlfSZzaXplPSR7cm93c1BlclBhZ2V9JHtcbiAgICAgIHNlYXJjaCA/IFwiJnNlYXJjaD1cIiArIHNlYXJjaCA6IFwiXCJcbiAgICB9YDtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZGF0YSA9IChhd2FpdCBnZXRQYWdpbmF0ZWQ8YW55PihwYXRoKSkubWFwKChlKSA9PlxuICAgICAgICB0aGluZ0Zyb21Kc29uUHJvcGVydGllcyhlKVxuICAgICAgKTtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIHJldHVybiByZWplY3RXaXRoVmFsdWUoYEVycm9yIGFjY2Vzc2luZzogJHtwYXRofTsgJHtlcnJvci5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuKTtcbmV4cG9ydCBjb25zdCBnZXRBbmNlc3RvcnMgPSBjcmVhdGVBc3luY1RodW5rKFxuICBcIm9udG9sb2dpZXNfYW5jZXN0b3JzXCIsXG4gIGFzeW5jICh7XG4gICAgb250b2xvZ3lJZCxcbiAgICBlbnRpdHlUeXBlLFxuICAgIGVudGl0eUlyaSxcbiAgICBsYW5nLFxuICAgIHNob3dPYnNvbGV0ZUVuYWJsZWQsXG4gICAgYXBpVXJsLFxuICB9OiBhbnkpID0+IHtcbiAgICBjb25zdCBkb3VibGVFbmNvZGVkVXJpID0gZW5jb2RlVVJJQ29tcG9uZW50KGVuY29kZVVSSUNvbXBvbmVudChlbnRpdHlJcmkpKTtcbiAgICB2YXIgYW5jZXN0b3JzUGFnZTogYW55O1xuICAgIGlmIChlbnRpdHlUeXBlID09PSBcImNsYXNzZXNcIikge1xuICAgICAgYW5jZXN0b3JzUGFnZSA9IGF3YWl0IGdldFBhZ2luYXRlZDxhbnk+KFxuICAgICAgICBgYXBpL3YyL29udG9sb2dpZXMvJHtvbnRvbG9neUlkfS9jbGFzc2VzLyR7ZG91YmxlRW5jb2RlZFVyaX0vaGllcmFyY2hpY2FsQW5jZXN0b3JzPyR7bmV3IFVSTFNlYXJjaFBhcmFtcyhcbiAgICAgICAgICB7IHNpemU6IFwiMTAwMFwiLCBsYW5nLCBpbmNsdWRlT2Jzb2xldGVFbnRpdGllczogc2hvd09ic29sZXRlRW5hYmxlZCB9XG4gICAgICAgICl9YCxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICBhcGlVcmxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFuY2VzdG9yc1BhZ2UgPSBhd2FpdCBnZXRQYWdpbmF0ZWQ8YW55PihcbiAgICAgICAgYGFwaS92Mi9vbnRvbG9naWVzLyR7b250b2xvZ3lJZH0vJHtlbnRpdHlUeXBlfS8ke2RvdWJsZUVuY29kZWRVcml9L2FuY2VzdG9ycz8ke25ldyBVUkxTZWFyY2hQYXJhbXMoXG4gICAgICAgICAgeyBzaXplOiBcIjEwMDBcIiwgbGFuZywgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM6IHNob3dPYnNvbGV0ZUVuYWJsZWQgfVxuICAgICAgICApfWAsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgYXBpVXJsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gYW5jZXN0b3JzUGFnZS5lbGVtZW50cy5tYXAoKG9iajogYW55KSA9PlxuICAgICAgdGhpbmdGcm9tSnNvblByb3BlcnRpZXMob2JqKVxuICAgICk7XG4gIH1cbik7XG5leHBvcnQgY29uc3QgZ2V0Um9vdEVudGl0aWVzID0gY3JlYXRlQXN5bmNUaHVuayhcbiAgXCJvbnRvbG9naWVzX3Jvb3RzXCIsXG4gIGFzeW5jICh7XG4gICAgb250b2xvZ3lJZCxcbiAgICBlbnRpdHlUeXBlLFxuICAgIHByZWZlcnJlZFJvb3RzLFxuICAgIGxhbmcsXG4gICAgc2hvd09ic29sZXRlRW5hYmxlZCxcbiAgICBhcGlVcmwsXG4gIH06IGFueSkgPT4ge1xuICAgIGlmIChlbnRpdHlUeXBlID09PSBcImluZGl2aWR1YWxzXCIpIHtcbiAgICAgIGNvbnN0IFtjbGFzc2VzV2l0aEluZGl2aWR1YWxzLCBvcnBoYW5lZEluZGl2aWR1YWxzXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgZ2V0UGFnaW5hdGVkPGFueT4oXG4gICAgICAgICAgYGFwaS92Mi9vbnRvbG9naWVzLyR7b250b2xvZ3lJZH0vY2xhc3Nlcz8ke25ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgICAgICAgICAgaGFzSW5kaXZpZHVhbHM6IFwidHJ1ZVwiLFxuICAgICAgICAgICAgc2l6ZTogXCIxMDAwXCIsXG4gICAgICAgICAgICBsYW5nLFxuICAgICAgICAgICAgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM6IHNob3dPYnNvbGV0ZUVuYWJsZWQsXG4gICAgICAgICAgfSl9YCxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgYXBpVXJsXG4gICAgICAgICksXG4gICAgICAgIGdldFBhZ2luYXRlZDxhbnk+KFxuICAgICAgICAgIGBhcGkvdjIvb250b2xvZ2llcy8ke29udG9sb2d5SWR9L2luZGl2aWR1YWxzPyR7bmV3IFVSTFNlYXJjaFBhcmFtcyh7XG4gICAgICAgICAgICBoYXNEaXJlY3RQYXJlbnQ6IFwiZmFsc2VcIixcbiAgICAgICAgICAgIHNpemU6IFwiMTAwMFwiLFxuICAgICAgICAgICAgbGFuZyxcbiAgICAgICAgICAgIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzOiBzaG93T2Jzb2xldGVFbmFibGVkLFxuICAgICAgICAgIH0pfWAsXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIGFwaVVybFxuICAgICAgICApLFxuICAgICAgXSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBlbnRpdHlUeXBlLFxuICAgICAgICByb290VGVybXM6IG51bGwsXG4gICAgICAgIGNsYXNzZXNXaXRoSW5kaXZpZHVhbHM6IGNsYXNzZXNXaXRoSW5kaXZpZHVhbHMuZWxlbWVudHMubWFwKChvYmopID0+XG4gICAgICAgICAgdGhpbmdGcm9tSnNvblByb3BlcnRpZXMob2JqKVxuICAgICAgICApLFxuICAgICAgICBvcnBoYW5lZEluZGl2aWR1YWxzOiBvcnBoYW5lZEluZGl2aWR1YWxzLmVsZW1lbnRzLm1hcCgob2JqKSA9PlxuICAgICAgICAgIHRoaW5nRnJvbUpzb25Qcm9wZXJ0aWVzKG9iailcbiAgICAgICAgKSxcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChlbnRpdHlUeXBlID09PSBcImNsYXNzZXNcIiAmJiBwcmVmZXJyZWRSb290cykge1xuICAgICAgY29uc3Qgcm9vdHNQYWdlID0gYXdhaXQgZ2V0UGFnaW5hdGVkPGFueT4oXG4gICAgICAgIGBhcGkvdjIvb250b2xvZ2llcy8ke29udG9sb2d5SWR9LyR7ZW50aXR5VHlwZX0/JHtuZXcgVVJMU2VhcmNoUGFyYW1zKHtcbiAgICAgICAgICBpc1ByZWZlcnJlZFJvb3Q6IFwidHJ1ZVwiLFxuICAgICAgICAgIHNpemU6IFwiMTAwMFwiLFxuICAgICAgICAgIGxhbmcsXG4gICAgICAgICAgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM6IHNob3dPYnNvbGV0ZUVuYWJsZWQsXG4gICAgICAgIH0pfWAsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgYXBpVXJsXG4gICAgICApO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZW50aXR5VHlwZSxcbiAgICAgICAgcm9vdFRlcm1zOiByb290c1BhZ2UuZWxlbWVudHMubWFwKChvYmopID0+XG4gICAgICAgICAgdGhpbmdGcm9tSnNvblByb3BlcnRpZXMob2JqKVxuICAgICAgICApLFxuICAgICAgICBjbGFzc2VzV2l0aEluZGl2aWR1YWxzOiBudWxsLFxuICAgICAgICBvcnBoYW5lZEluZGl2aWR1YWxzOiBudWxsLFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgcm9vdHNQYWdlID0gYXdhaXQgZ2V0UGFnaW5hdGVkPGFueT4oXG4gICAgICAgIGBhcGkvdjIvb250b2xvZ2llcy8ke29udG9sb2d5SWR9LyR7ZW50aXR5VHlwZX0/JHtuZXcgVVJMU2VhcmNoUGFyYW1zKHtcbiAgICAgICAgICBoYXNEaXJlY3RQYXJlbnQ6IFwiZmFsc2VcIixcbiAgICAgICAgICBzaXplOiBcIjEwMDBcIixcbiAgICAgICAgICBsYW5nLFxuICAgICAgICAgIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzOiBzaG93T2Jzb2xldGVFbmFibGVkLFxuICAgICAgICB9KX1gLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIGFwaVVybFxuICAgICAgKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVudGl0eVR5cGUsXG4gICAgICAgIHJvb3RUZXJtczogcm9vdHNQYWdlLmVsZW1lbnRzLm1hcCgob2JqKSA9PlxuICAgICAgICAgIHRoaW5nRnJvbUpzb25Qcm9wZXJ0aWVzKG9iailcbiAgICAgICAgKSxcbiAgICAgICAgY2xhc3Nlc1dpdGhJbmRpdmlkdWFsczogbnVsbCxcbiAgICAgICAgb3JwaGFuZWRJbmRpdmlkdWFsczogbnVsbCxcbiAgICAgIH07XG4gICAgfVxuICB9XG4pO1xuZXhwb3J0IGNvbnN0IGdldE5vZGVDaGlsZHJlbiA9IGNyZWF0ZUFzeW5jVGh1bmsoXG4gIFwib250b2xvZ2llc19ub2RlX2NoaWxkcmVuXCIsXG4gIGFzeW5jICh7XG4gICAgb250b2xvZ3lJZCxcbiAgICBlbnRpdHlUeXBlUGx1cmFsLFxuICAgIGVudGl0eUlyaSxcbiAgICBhYnNvbHV0ZUlkZW50aXR5LFxuICAgIGxhbmcsXG4gICAgYXBpVXJsLFxuICAgIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzOiBzaG93T2Jzb2xldGVFbmFibGVkLFxuICB9OiBhbnkpID0+IHtcbiAgICBjb25zdCBkb3VibGVFbmNvZGVkVXJpID0gZW5jb2RlVVJJQ29tcG9uZW50KGVuY29kZVVSSUNvbXBvbmVudChlbnRpdHlJcmkpKTtcbiAgICB2YXIgY2hpbGRyZW5QYWdlOiBhbnk7XG4gICAgaWYgKGVudGl0eVR5cGVQbHVyYWwgPT09IFwiY2xhc3Nlc1wiKSB7XG4gICAgICBjaGlsZHJlblBhZ2UgPSBhd2FpdCBnZXRQYWdpbmF0ZWQ8YW55PihcbiAgICAgICAgYGFwaS92Mi9vbnRvbG9naWVzLyR7b250b2xvZ3lJZH0vY2xhc3Nlcy8ke2RvdWJsZUVuY29kZWRVcml9L2hpZXJhcmNoaWNhbENoaWxkcmVuPyR7bmV3IFVSTFNlYXJjaFBhcmFtcyhcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzaXplOiBcIjEwMDBcIixcbiAgICAgICAgICAgIGxhbmcsXG4gICAgICAgICAgICBpbmNsdWRlT2Jzb2xldGVFbnRpdGllczogc2hvd09ic29sZXRlRW5hYmxlZCxcbiAgICAgICAgICB9XG4gICAgICAgICl9YCxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICBhcGlVcmxcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChlbnRpdHlUeXBlUGx1cmFsID09PSBcImluZGl2aWR1YWxzXCIpIHtcbiAgICAgIGNoaWxkcmVuUGFnZSA9IGF3YWl0IGdldFBhZ2luYXRlZDxhbnk+KFxuICAgICAgICBgYXBpL3YyL29udG9sb2dpZXMvJHtvbnRvbG9neUlkfS9jbGFzc2VzLyR7ZG91YmxlRW5jb2RlZFVyaX0vaW5zdGFuY2VzPyR7bmV3IFVSTFNlYXJjaFBhcmFtcyhcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzaXplOiBcIjEwMDBcIixcbiAgICAgICAgICAgIGxhbmcsXG4gICAgICAgICAgICBpbmNsdWRlT2Jzb2xldGVFbnRpdGllczogc2hvd09ic29sZXRlRW5hYmxlZCxcbiAgICAgICAgICB9XG4gICAgICAgICl9YCxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICBhcGlVcmxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNoaWxkcmVuUGFnZSA9IGF3YWl0IGdldFBhZ2luYXRlZDxhbnk+KFxuICAgICAgICBgYXBpL3YyL29udG9sb2dpZXMvJHtvbnRvbG9neUlkfS8ke2VudGl0eVR5cGVQbHVyYWx9LyR7ZG91YmxlRW5jb2RlZFVyaX0vY2hpbGRyZW4/JHtuZXcgVVJMU2VhcmNoUGFyYW1zKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNpemU6IFwiMTAwMFwiLFxuICAgICAgICAgICAgbGFuZyxcbiAgICAgICAgICAgIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzOiBzaG93T2Jzb2xldGVFbmFibGVkLFxuICAgICAgICAgIH1cbiAgICAgICAgKX1gLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIGFwaVVybFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGFic29sdXRlSWRlbnRpdHksXG4gICAgICBjaGlsZHJlbjogY2hpbGRyZW5QYWdlLmVsZW1lbnRzXG4gICAgICAgIC5tYXAoKG9iajogYW55KSA9PiB0aGluZ0Zyb21Kc29uUHJvcGVydGllcyhvYmopKVxuICAgICAgICAubWFwKCh0ZXJtOiBFbnRpdHkpID0+IHtcbiAgICAgICAgICBsZXQgcGFyZW50aG9vZE1ldGFkYXRhID1cbiAgICAgICAgICAgIHRlcm0uZ2V0SGllcmFyY2hpY2FsUGFyZW50UmVpZmljYXRpb25BeGlvbXMoZW50aXR5SXJpKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaXJpOiB0ZXJtLmdldElyaSgpLFxuICAgICAgICAgICAgYWJzb2x1dGVJZGVudGl0eTogYWJzb2x1dGVJZGVudGl0eSArIFwiO1wiICsgdGVybS5nZXRJcmkoKSxcbiAgICAgICAgICAgIHRpdGxlOiB0ZXJtLmdldE5hbWUoKSxcbiAgICAgICAgICAgIGV4cGFuZGFibGU6IHRlcm0uaGFzQ2hpbGRyZW4oKSxcbiAgICAgICAgICAgIGVudGl0eTogdGVybSxcbiAgICAgICAgICAgIG51bURlc2NlbmRhbnRzOlxuICAgICAgICAgICAgICB0ZXJtLmdldE51bUhpZXJhcmNoaWNhbERlc2NlbmRhbnRzKCkgfHwgdGVybS5nZXROdW1EZXNjZW5kYW50cygpLFxuICAgICAgICAgICAgcGFyZW50UmVsYXRpb25Ub0NoaWxkOlxuICAgICAgICAgICAgICAocGFyZW50aG9vZE1ldGFkYXRhICYmXG4gICAgICAgICAgICAgICAgcGFyZW50aG9vZE1ldGFkYXRhW1wicGFyZW50UmVsYXRpb25Ub0NoaWxkXCJdPy5bMF0pIHx8XG4gICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICBjaGlsZFJlbGF0aW9uVG9QYXJlbnQ6XG4gICAgICAgICAgICAgIChwYXJlbnRob29kTWV0YWRhdGEgJiZcbiAgICAgICAgICAgICAgICBwYXJlbnRob29kTWV0YWRhdGFbXCJjaGlsZFJlbGF0aW9uVG9QYXJlbnRcIl0/LlswXSkgfHxcbiAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICB9O1xuICAgICAgICB9KSxcbiAgICB9O1xuICB9XG4pO1xuXG5jb25zdCBvbnRvbG9naWVzU2xpY2UgPSBjcmVhdGVTbGljZSh7XG4gIG5hbWU6IFwib250b2xvZ2llc1wiLFxuICBpbml0aWFsU3RhdGUsXG4gIHJlZHVjZXJzOiB7fSxcbiAgZXh0cmFSZWR1Y2VyczogKGJ1aWxkZXIpID0+IHtcbiAgICBidWlsZGVyLmFkZENhc2UoXG4gICAgICBnZXRPbnRvbG9neS5mdWxmaWxsZWQsXG4gICAgICAoc3RhdGU6IE9udG9sb2dpZXNTdGF0ZSwgYWN0aW9uOiBQYXlsb2FkQWN0aW9uPE9udG9sb2d5PikgPT4ge1xuICAgICAgICBzdGF0ZS5vbnRvbG9neSA9IGFjdGlvbi5wYXlsb2FkO1xuICAgICAgICBzdGF0ZS5sb2FkaW5nT250b2xvZ3kgPSBmYWxzZTtcbiAgICAgIH1cbiAgICApO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShnZXRPbnRvbG9neS5wZW5kaW5nLCAoc3RhdGU6IE9udG9sb2dpZXNTdGF0ZSkgPT4ge1xuICAgICAgc3RhdGUubG9hZGluZ09udG9sb2d5ID0gdHJ1ZTtcbiAgICAgIHN0YXRlLmVycm9yTWVzc2FnZSA9IGluaXRpYWxTdGF0ZS5lcnJvck1lc3NhZ2U7XG4gICAgfSk7XG4gICAgYnVpbGRlci5hZGRDYXNlKFxuICAgICAgZ2V0T250b2xvZ3kucmVqZWN0ZWQsXG4gICAgICAoc3RhdGU6IE9udG9sb2dpZXNTdGF0ZSwgZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICBzdGF0ZS5vbnRvbG9neSA9IGluaXRpYWxTdGF0ZS5vbnRvbG9neTtcbiAgICAgICAgc3RhdGUubG9hZGluZ09udG9sb2d5ID0gZmFsc2U7XG4gICAgICAgIHN0YXRlLmVycm9yTWVzc2FnZSA9IGVycm9yLnBheWxvYWQ7XG4gICAgICB9XG4gICAgKTtcbiAgICBidWlsZGVyLmFkZENhc2UoXG4gICAgICBnZXRFbnRpdHlXaXRoVHlwZS5mdWxmaWxsZWQsXG4gICAgICAoc3RhdGU6IE9udG9sb2dpZXNTdGF0ZSwgYWN0aW9uOiBQYXlsb2FkQWN0aW9uPEVudGl0eT4pID0+IHtcbiAgICAgICAgc3RhdGUuZW50aXR5ID0gYWN0aW9uLnBheWxvYWQ7XG4gICAgICAgIHN0YXRlLmxvYWRpbmdFbnRpdHkgPSBmYWxzZTtcbiAgICAgIH1cbiAgICApO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShnZXRFbnRpdHlXaXRoVHlwZS5wZW5kaW5nLCAoc3RhdGU6IE9udG9sb2dpZXNTdGF0ZSkgPT4ge1xuICAgICAgc3RhdGUubG9hZGluZ0VudGl0eSA9IHRydWU7XG4gICAgICBzdGF0ZS5lcnJvck1lc3NhZ2UgPSBpbml0aWFsU3RhdGUuZXJyb3JNZXNzYWdlO1xuICAgIH0pO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShcbiAgICAgIGdldEVudGl0eVdpdGhUeXBlLnJlamVjdGVkLFxuICAgICAgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUsIGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgc3RhdGUubG9hZGluZ0VudGl0eSA9IGZhbHNlO1xuICAgICAgICBzdGF0ZS5lbnRpdHkgPSBpbml0aWFsU3RhdGUuZW50aXR5O1xuICAgICAgICBzdGF0ZS5lcnJvck1lc3NhZ2UgPSBlcnJvci5wYXlsb2FkO1xuICAgICAgfVxuICAgICk7XG4gICAgYnVpbGRlci5hZGRDYXNlKFxuICAgICAgZ2V0RW50aXR5LmZ1bGZpbGxlZCxcbiAgICAgIChzdGF0ZTogT250b2xvZ2llc1N0YXRlLCBhY3Rpb246IFBheWxvYWRBY3Rpb248RW50aXR5PikgPT4ge1xuICAgICAgICBzdGF0ZS5lbnRpdHkgPSBhY3Rpb24ucGF5bG9hZDtcbiAgICAgICAgc3RhdGUubG9hZGluZ0VudGl0eSA9IGZhbHNlO1xuICAgICAgfVxuICAgICk7XG4gICAgYnVpbGRlci5hZGRDYXNlKGdldEVudGl0eS5wZW5kaW5nLCAoc3RhdGU6IE9udG9sb2dpZXNTdGF0ZSkgPT4ge1xuICAgICAgc3RhdGUubG9hZGluZ0VudGl0eSA9IHRydWU7XG4gICAgICBzdGF0ZS5lcnJvck1lc3NhZ2UgPSBpbml0aWFsU3RhdGUuZXJyb3JNZXNzYWdlO1xuICAgIH0pO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShcbiAgICAgIGdldEVudGl0eS5yZWplY3RlZCxcbiAgICAgIChzdGF0ZTogT250b2xvZ2llc1N0YXRlLCBlcnJvcjogYW55KSA9PiB7XG4gICAgICAgIHN0YXRlLmxvYWRpbmdFbnRpdHkgPSBmYWxzZTtcbiAgICAgICAgc3RhdGUuZW50aXR5ID0gaW5pdGlhbFN0YXRlLmVudGl0eTtcbiAgICAgICAgc3RhdGUuZXJyb3JNZXNzYWdlID0gZXJyb3IucGF5bG9hZDtcbiAgICAgIH1cbiAgICApO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShcbiAgICAgIGdldENsYXNzSW5zdGFuY2VzLmZ1bGZpbGxlZCxcbiAgICAgIChzdGF0ZTogT250b2xvZ2llc1N0YXRlLCBhY3Rpb246IFBheWxvYWRBY3Rpb248UGFnZTxFbnRpdHk+PikgPT4ge1xuICAgICAgICBzdGF0ZS5jbGFzc0luc3RhbmNlcyA9IGFjdGlvbi5wYXlsb2FkO1xuICAgICAgICBzdGF0ZS5sb2FkaW5nQ2xhc3NJbnN0YW5jZXMgPSBmYWxzZTtcbiAgICAgIH1cbiAgICApO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShnZXRDbGFzc0luc3RhbmNlcy5wZW5kaW5nLCAoc3RhdGU6IE9udG9sb2dpZXNTdGF0ZSkgPT4ge1xuICAgICAgc3RhdGUubG9hZGluZ0NsYXNzSW5zdGFuY2VzID0gdHJ1ZTtcbiAgICAgIHN0YXRlLmVycm9yTWVzc2FnZSA9IGluaXRpYWxTdGF0ZS5lcnJvck1lc3NhZ2U7XG4gICAgfSk7XG4gICAgYnVpbGRlci5hZGRDYXNlKFxuICAgICAgZ2V0Q2xhc3NJbnN0YW5jZXMucmVqZWN0ZWQsXG4gICAgICAoc3RhdGU6IE9udG9sb2dpZXNTdGF0ZSwgZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICBzdGF0ZS5sb2FkaW5nQ2xhc3NJbnN0YW5jZXMgPSBmYWxzZTtcbiAgICAgICAgc3RhdGUuY2xhc3NJbnN0YW5jZXMgPSBpbml0aWFsU3RhdGUuY2xhc3NJbnN0YW5jZXM7XG4gICAgICAgIHN0YXRlLmVycm9yTWVzc2FnZSA9IGVycm9yLnBheWxvYWQ7XG4gICAgICB9XG4gICAgKTtcbiAgICBidWlsZGVyLmFkZENhc2UoZ2V0QW5jZXN0b3JzLnBlbmRpbmcsIChzdGF0ZTogT250b2xvZ2llc1N0YXRlKSA9PiB7XG4gICAgICArK3N0YXRlLm51bVBlbmRpbmdUcmVlUmVxdWVzdHM7XG4gICAgfSk7XG4gICAgYnVpbGRlci5hZGRDYXNlKFxuICAgICAgZ2V0QW5jZXN0b3JzLmZ1bGZpbGxlZCxcbiAgICAgIChzdGF0ZTogT250b2xvZ2llc1N0YXRlLCBhY3Rpb246IFBheWxvYWRBY3Rpb248RW50aXR5W10+KSA9PiB7XG4gICAgICAgIGxldCB7IHJvb3ROb2Rlcywgbm9kZUNoaWxkcmVuLCBhdXRvbWF0aWNhbGx5RXhwYW5kZWROb2RlcyB9ID1cbiAgICAgICAgICBjcmVhdGVUcmVlRnJvbUVudGl0aWVzKFxuICAgICAgICAgICAgW3N0YXRlLmVudGl0eSEsIC4uLmFjdGlvbi5wYXlsb2FkXSxcbiAgICAgICAgICAgIHN0YXRlLnByZWZlcnJlZFJvb3RzLFxuICAgICAgICAgICAgc3RhdGUub250b2xvZ3khXG4gICAgICAgICAgKTtcbiAgICAgICAgc3RhdGUucm9vdE5vZGVzID0gcm9vdE5vZGVzO1xuICAgICAgICBzdGF0ZS5ub2RlQ2hpbGRyZW4gPSBub2RlQ2hpbGRyZW47XG4gICAgICAgIHN0YXRlLmF1dG9tYXRpY2FsbHlFeHBhbmRlZE5vZGVzID0gQXJyYXkuZnJvbShcbiAgICAgICAgICBuZXcgU2V0KFtcbiAgICAgICAgICAgIC4uLnN0YXRlLmF1dG9tYXRpY2FsbHlFeHBhbmRlZE5vZGVzLFxuICAgICAgICAgICAgLi4uQXJyYXkuZnJvbShhdXRvbWF0aWNhbGx5RXhwYW5kZWROb2RlcyksXG4gICAgICAgICAgXSlcbiAgICAgICAgKTtcbiAgICAgICAgLS1zdGF0ZS5udW1QZW5kaW5nVHJlZVJlcXVlc3RzO1xuICAgICAgfVxuICAgICk7XG4gICAgYnVpbGRlci5hZGRDYXNlKGdldEFuY2VzdG9ycy5yZWplY3RlZCwgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUpID0+IHtcbiAgICAgIC0tc3RhdGUubnVtUGVuZGluZ1RyZWVSZXF1ZXN0cztcbiAgICB9KTtcbiAgICBidWlsZGVyLmFkZENhc2UoZ2V0Tm9kZUNoaWxkcmVuLnBlbmRpbmcsIChzdGF0ZTogT250b2xvZ2llc1N0YXRlKSA9PiB7XG4gICAgICArK3N0YXRlLm51bVBlbmRpbmdUcmVlUmVxdWVzdHM7XG4gICAgfSk7XG4gICAgYnVpbGRlci5hZGRDYXNlKFxuICAgICAgZ2V0Tm9kZUNoaWxkcmVuLmZ1bGZpbGxlZCxcbiAgICAgIChcbiAgICAgICAgc3RhdGU6IE9udG9sb2dpZXNTdGF0ZSxcbiAgICAgICAgYWN0aW9uOiBQYXlsb2FkQWN0aW9uPHtcbiAgICAgICAgICBhYnNvbHV0ZUlkZW50aXR5OiBzdHJpbmc7XG4gICAgICAgICAgY2hpbGRyZW46IFRyZWVOb2RlW107XG4gICAgICAgIH0+XG4gICAgICApID0+IHtcbiAgICAgICAgc3RhdGUubm9kZUNoaWxkcmVuID0ge1xuICAgICAgICAgIC4uLnN0YXRlLm5vZGVDaGlsZHJlbixcbiAgICAgICAgICBbYWN0aW9uLnBheWxvYWQuYWJzb2x1dGVJZGVudGl0eV06IGFjdGlvbi5wYXlsb2FkLmNoaWxkcmVuLFxuICAgICAgICB9O1xuICAgICAgICBzdGF0ZS5ub2Rlc1dpdGhDaGlsZHJlbkxvYWRlZC5wdXNoKGFjdGlvbi5wYXlsb2FkLmFic29sdXRlSWRlbnRpdHkpO1xuICAgICAgICAtLXN0YXRlLm51bVBlbmRpbmdUcmVlUmVxdWVzdHM7XG4gICAgICB9XG4gICAgKTtcbiAgICBidWlsZGVyLmFkZENhc2UoZ2V0Tm9kZUNoaWxkcmVuLnJlamVjdGVkLCAoc3RhdGU6IE9udG9sb2dpZXNTdGF0ZSkgPT4ge1xuICAgICAgLS1zdGF0ZS5udW1QZW5kaW5nVHJlZVJlcXVlc3RzO1xuICAgIH0pO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShnZXRSb290RW50aXRpZXMucGVuZGluZywgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUpID0+IHtcbiAgICAgICsrc3RhdGUubnVtUGVuZGluZ1RyZWVSZXF1ZXN0cztcbiAgICB9KTtcbiAgICBidWlsZGVyLmFkZENhc2UoXG4gICAgICBnZXRSb290RW50aXRpZXMuZnVsZmlsbGVkLFxuICAgICAgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUsIGFjdGlvbjogUGF5bG9hZEFjdGlvbjxhbnk+KSA9PiB7XG4gICAgICAgIGxldCB7IHJvb3RUZXJtcywgY2xhc3Nlc1dpdGhJbmRpdmlkdWFscywgb3JwaGFuZWRJbmRpdmlkdWFscyB9ID1cbiAgICAgICAgICBhY3Rpb24ucGF5bG9hZDtcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJyb290VGVybXNcIik7XG4gICAgICAgIC8vIGNvbnNvbGUuZGlyKHJvb3RUZXJtcyk7XG4gICAgICAgIGxldCB7IHJvb3ROb2Rlcywgbm9kZUNoaWxkcmVuLCBhdXRvbWF0aWNhbGx5RXhwYW5kZWROb2RlcyB9ID1cbiAgICAgICAgICBjcmVhdGVUcmVlRnJvbUVudGl0aWVzKFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAuLi4ocm9vdFRlcm1zIHx8IFtdKSxcbiAgICAgICAgICAgICAgLi4uKGNsYXNzZXNXaXRoSW5kaXZpZHVhbHMgfHwgW10pLFxuICAgICAgICAgICAgICAuLi4ob3JwaGFuZWRJbmRpdmlkdWFscyB8fCBbXSksXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgc3RhdGUucHJlZmVycmVkUm9vdHMsXG4gICAgICAgICAgICBzdGF0ZS5vbnRvbG9neSFcbiAgICAgICAgICApO1xuXG4gICAgICAgIHN0YXRlLnJvb3ROb2RlcyA9IHJvb3ROb2RlcztcbiAgICAgICAgc3RhdGUubm9kZUNoaWxkcmVuID0gbm9kZUNoaWxkcmVuO1xuICAgICAgICBzdGF0ZS5hdXRvbWF0aWNhbGx5RXhwYW5kZWROb2RlcyA9IEFycmF5LmZyb20oXG4gICAgICAgICAgbmV3IFNldChbXG4gICAgICAgICAgICAuLi5zdGF0ZS5hdXRvbWF0aWNhbGx5RXhwYW5kZWROb2RlcyxcbiAgICAgICAgICAgIC4uLkFycmF5LmZyb20oYXV0b21hdGljYWxseUV4cGFuZGVkTm9kZXMpLFxuICAgICAgICAgIF0pXG4gICAgICAgICk7XG4gICAgICAgIC0tc3RhdGUubnVtUGVuZGluZ1RyZWVSZXF1ZXN0cztcbiAgICAgIH1cbiAgICApO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShnZXRSb290RW50aXRpZXMucmVqZWN0ZWQsIChzdGF0ZTogT250b2xvZ2llc1N0YXRlKSA9PiB7XG4gICAgICAtLXN0YXRlLm51bVBlbmRpbmdUcmVlUmVxdWVzdHM7XG4gICAgfSk7XG4gICAgYnVpbGRlci5hZGRDYXNlKFxuICAgICAgZ2V0T250b2xvZ2llcy5mdWxmaWxsZWQsXG4gICAgICAoc3RhdGU6IE9udG9sb2dpZXNTdGF0ZSwgYWN0aW9uOiBQYXlsb2FkQWN0aW9uPFBhZ2U8T250b2xvZ3k+PikgPT4ge1xuICAgICAgICBzdGF0ZS5vbnRvbG9naWVzID0gYWN0aW9uLnBheWxvYWQuZWxlbWVudHM7XG4gICAgICAgIHN0YXRlLnRvdGFsT250b2xvZ2llcyA9IGFjdGlvbi5wYXlsb2FkLnRvdGFsRWxlbWVudHM7XG4gICAgICAgIHN0YXRlLmxvYWRpbmdPbnRvbG9naWVzID0gZmFsc2U7XG4gICAgICB9XG4gICAgKTtcbiAgICBidWlsZGVyLmFkZENhc2UoZ2V0T250b2xvZ2llcy5wZW5kaW5nLCAoc3RhdGU6IE9udG9sb2dpZXNTdGF0ZSkgPT4ge1xuICAgICAgc3RhdGUubG9hZGluZ09udG9sb2dpZXMgPSB0cnVlO1xuICAgICAgc3RhdGUuZXJyb3JNZXNzYWdlID0gaW5pdGlhbFN0YXRlLmVycm9yTWVzc2FnZTtcbiAgICB9KTtcbiAgICBidWlsZGVyLmFkZENhc2UoXG4gICAgICBnZXRPbnRvbG9naWVzLnJlamVjdGVkLFxuICAgICAgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUsIGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgc3RhdGUub250b2xvZ2llcyA9IGluaXRpYWxTdGF0ZS5vbnRvbG9naWVzO1xuICAgICAgICBzdGF0ZS5sb2FkaW5nT250b2xvZ2llcyA9IGZhbHNlO1xuICAgICAgICBzdGF0ZS5lcnJvck1lc3NhZ2UgPSBlcnJvci5wYXlsb2FkO1xuICAgICAgfVxuICAgICk7XG4gICAgYnVpbGRlci5hZGRDYXNlKFxuICAgICAgZ2V0RW50aXRpZXMuZnVsZmlsbGVkLFxuICAgICAgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUsIGFjdGlvbjogUGF5bG9hZEFjdGlvbjxQYWdlPEVudGl0eT4+KSA9PiB7XG4gICAgICAgIHN0YXRlLmVudGl0aWVzID0gYWN0aW9uLnBheWxvYWQuZWxlbWVudHM7XG4gICAgICAgIHN0YXRlLnRvdGFsRW50aXRpZXMgPSBhY3Rpb24ucGF5bG9hZC50b3RhbEVsZW1lbnRzO1xuICAgICAgICBzdGF0ZS5sb2FkaW5nRW50aXRpZXMgPSBmYWxzZTtcbiAgICAgIH1cbiAgICApO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShnZXRFbnRpdGllcy5wZW5kaW5nLCAoc3RhdGU6IE9udG9sb2dpZXNTdGF0ZSkgPT4ge1xuICAgICAgc3RhdGUubG9hZGluZ0VudGl0aWVzID0gdHJ1ZTtcbiAgICAgIHN0YXRlLmVycm9yTWVzc2FnZSA9IGluaXRpYWxTdGF0ZS5lcnJvck1lc3NhZ2U7XG4gICAgfSk7XG4gICAgYnVpbGRlci5hZGRDYXNlKFxuICAgICAgZ2V0RW50aXRpZXMucmVqZWN0ZWQsXG4gICAgICAoc3RhdGU6IE9udG9sb2dpZXNTdGF0ZSwgZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICBzdGF0ZS5lbnRpdGllcyA9IGluaXRpYWxTdGF0ZS5lbnRpdGllcztcbiAgICAgICAgc3RhdGUubG9hZGluZ0VudGl0aWVzID0gZmFsc2U7XG4gICAgICAgIHN0YXRlLmVycm9yTWVzc2FnZSA9IGVycm9yLnBheWxvYWQ7XG4gICAgICB9XG4gICAgKTtcbiAgICBidWlsZGVyLmFkZENhc2UocmVzZXRUcmVlQ29udGVudCwgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUpID0+IHtcbiAgICAgIHN0YXRlLm5vZGVzV2l0aENoaWxkcmVuTG9hZGVkID0gW107XG4gICAgICBzdGF0ZS5ub2RlQ2hpbGRyZW4gPSB7fTtcbiAgICAgIHN0YXRlLnJvb3ROb2RlcyA9IFtdO1xuICAgICAgc3RhdGUuYXV0b21hdGljYWxseUV4cGFuZGVkTm9kZXMgPSBbXTtcbiAgICB9KTtcbiAgICBidWlsZGVyLmFkZENhc2UoXG4gICAgICByZXNldFRyZWVTZXR0aW5ncyxcbiAgICAgIChcbiAgICAgICAgc3RhdGU6IE9udG9sb2dpZXNTdGF0ZSxcbiAgICAgICAgYWN0aW9uOiBQYXlsb2FkQWN0aW9uPHsgZW50aXR5VHlwZTogc3RyaW5nOyBzZWxlY3RlZEVudGl0eT86IEVudGl0eSB9PlxuICAgICAgKSA9PiB7XG4gICAgICAgIHN0YXRlLnByZWZlcnJlZFJvb3RzID1cbiAgICAgICAgICBhY3Rpb24ucGF5bG9hZC5lbnRpdHlUeXBlID09PSBcImNsYXNzZXNcIiAmJlxuICAgICAgICAgIHN0YXRlLm9udG9sb2d5IS5nZXRQcmVmZXJyZWRSb290cygpLmxlbmd0aCA+IDA7XG5cbiAgICAgICAgaWYgKGFjdGlvbi5wYXlsb2FkLnNlbGVjdGVkRW50aXR5KSB7XG4gICAgICAgICAgbGV0IHNlbGVjdGVkSXNEZXNjZW5kYW50T2ZQcmVmZXJyZWRSb290cyA9IGZhbHNlO1xuICAgICAgICAgIGZvciAobGV0IHJvb3Qgb2Ygc3RhdGUub250b2xvZ3khLmdldFByZWZlcnJlZFJvb3RzKCkpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgYWN0aW9uLnBheWxvYWQuc2VsZWN0ZWRFbnRpdHlcbiAgICAgICAgICAgICAgICAuZ2V0SGllcmFyY2hpY2FsQW5jZXN0b3JJcmlzKClcbiAgICAgICAgICAgICAgICAuaW5kZXhPZihyb290KSAhPT0gLTFcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBzZWxlY3RlZElzRGVzY2VuZGFudE9mUHJlZmVycmVkUm9vdHMgPSB0cnVlO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFzZWxlY3RlZElzRGVzY2VuZGFudE9mUHJlZmVycmVkUm9vdHMpIHtcbiAgICAgICAgICAgIHN0YXRlLnByZWZlcnJlZFJvb3RzID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHN0YXRlLmRpc3BsYXlPYnNvbGV0ZSA9IGZhbHNlO1xuICAgICAgICBzdGF0ZS5kaXNwbGF5U2libGluZ3MgPSBmYWxzZTtcbiAgICAgICAgc3RhdGUuZGlzcGxheUNvdW50cyA9IHRydWU7XG4gICAgICAgIHN0YXRlLm1hbnVhbGx5RXhwYW5kZWROb2RlcyA9IFtdO1xuICAgICAgfVxuICAgICk7XG4gICAgYnVpbGRlci5hZGRDYXNlKGVuYWJsZVByZWZlcnJlZFJvb3RzLCAoc3RhdGU6IE9udG9sb2dpZXNTdGF0ZSkgPT4ge1xuICAgICAgc3RhdGUucHJlZmVycmVkUm9vdHMgPSB0cnVlO1xuICAgIH0pO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShkaXNhYmxlUHJlZmVycmVkUm9vdHMsIChzdGF0ZTogT250b2xvZ2llc1N0YXRlKSA9PiB7XG4gICAgICBzdGF0ZS5wcmVmZXJyZWRSb290cyA9IGZhbHNlO1xuICAgIH0pO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShzaG93T2Jzb2xldGUsIChzdGF0ZTogT250b2xvZ2llc1N0YXRlKSA9PiB7XG4gICAgICBzdGF0ZS5kaXNwbGF5T2Jzb2xldGUgPSB0cnVlO1xuICAgIH0pO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShoaWRlT2Jzb2xldGUsIChzdGF0ZTogT250b2xvZ2llc1N0YXRlKSA9PiB7XG4gICAgICBzdGF0ZS5kaXNwbGF5T2Jzb2xldGUgPSBmYWxzZTtcbiAgICB9KTtcbiAgICBidWlsZGVyLmFkZENhc2Uoc2hvd1NpYmxpbmdzLCAoc3RhdGU6IE9udG9sb2dpZXNTdGF0ZSkgPT4ge1xuICAgICAgc3RhdGUuZGlzcGxheVNpYmxpbmdzID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBidWlsZGVyLmFkZENhc2UoaGlkZVNpYmxpbmdzLCAoc3RhdGU6IE9udG9sb2dpZXNTdGF0ZSkgPT4ge1xuICAgICAgc3RhdGUuZGlzcGxheVNpYmxpbmdzID0gZmFsc2U7XG4gICAgfSk7XG4gICAgYnVpbGRlci5hZGRDYXNlKHNob3dDb3VudHMsIChzdGF0ZTogT250b2xvZ2llc1N0YXRlKSA9PiB7XG4gICAgICBzdGF0ZS5kaXNwbGF5Q291bnRzID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBidWlsZGVyLmFkZENhc2UoaGlkZUNvdW50cywgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUpID0+IHtcbiAgICAgIHN0YXRlLmRpc3BsYXlDb3VudHMgPSBmYWxzZTtcbiAgICB9KTtcbiAgICBidWlsZGVyLmFkZENhc2UoXG4gICAgICBvcGVuTm9kZSxcbiAgICAgIChzdGF0ZTogT250b2xvZ2llc1N0YXRlLCBhY3Rpb246IFBheWxvYWRBY3Rpb248VHJlZU5vZGU+KSA9PiB7XG4gICAgICAgIHN0YXRlLm1hbnVhbGx5RXhwYW5kZWROb2RlcyA9IEFycmF5LmZyb20oXG4gICAgICAgICAgbmV3IFNldChbXG4gICAgICAgICAgICAuLi5zdGF0ZS5tYW51YWxseUV4cGFuZGVkTm9kZXMsXG4gICAgICAgICAgICBhY3Rpb24ucGF5bG9hZC5hYnNvbHV0ZUlkZW50aXR5LFxuICAgICAgICAgIF0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgKTtcbiAgICBidWlsZGVyLmFkZENhc2UoXG4gICAgICBjbG9zZU5vZGUsXG4gICAgICAoc3RhdGU6IE9udG9sb2dpZXNTdGF0ZSwgYWN0aW9uOiBQYXlsb2FkQWN0aW9uPFRyZWVOb2RlPikgPT4ge1xuICAgICAgICBzdGF0ZS5tYW51YWxseUV4cGFuZGVkTm9kZXMgPSBzdGF0ZS5tYW51YWxseUV4cGFuZGVkTm9kZXMuZmlsdGVyKFxuICAgICAgICAgIChub2RlKSA9PiBub2RlICE9PSBhY3Rpb24ucGF5bG9hZC5hYnNvbHV0ZUlkZW50aXR5XG4gICAgICAgICk7XG4gICAgICAgIHN0YXRlLmF1dG9tYXRpY2FsbHlFeHBhbmRlZE5vZGVzID1cbiAgICAgICAgICBzdGF0ZS5hdXRvbWF0aWNhbGx5RXhwYW5kZWROb2Rlcy5maWx0ZXIoXG4gICAgICAgICAgICAobm9kZSkgPT4gbm9kZSAhPT0gYWN0aW9uLnBheWxvYWQuYWJzb2x1dGVJZGVudGl0eVxuICAgICAgICAgICk7XG4gICAgICAgIGRlbGV0ZSBzdGF0ZS5ub2RlQ2hpbGRyZW5bYWN0aW9uLnBheWxvYWQuYWJzb2x1dGVJZGVudGl0eV07XG4gICAgICAgIHN0YXRlLm5vZGVzV2l0aENoaWxkcmVuTG9hZGVkID0gc3RhdGUubm9kZXNXaXRoQ2hpbGRyZW5Mb2FkZWQuZmlsdGVyKFxuICAgICAgICAgIChhYnNJZCkgPT4gYWJzSWQgIT09IGFjdGlvbi5wYXlsb2FkLmFic29sdXRlSWRlbnRpdHlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICApO1xuICB9LFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IG9udG9sb2dpZXNTbGljZS5yZWR1Y2VyO1xuIiwgImltcG9ydCB7IGNyZWF0ZUFzeW5jVGh1bmssIGNyZWF0ZVNsaWNlLCBQYXlsb2FkQWN0aW9uIH0gZnJvbSBcIkByZWR1eGpzL3Rvb2xraXRcIjtcbmltcG9ydCB7IGdldFBhZ2luYXRlZCwgUGFnZSB9IGZyb20gXCIuLi8uLi9hcHAvYXBpXCI7XG5pbXBvcnQgeyB0aGluZ0Zyb21Kc29uUHJvcGVydGllcyB9IGZyb20gXCIuLi8uLi9hcHAvdXRpbFwiO1xuaW1wb3J0IEVudGl0eSBmcm9tIFwiLi4vLi4vbW9kZWwvRW50aXR5XCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VhcmNoU3RhdGUge1xuICBzZWFyY2hSZXN1bHRzOiBFbnRpdHlbXTtcbiAgbG9hZGluZ1NlYXJjaFJlc3VsdHM6IGJvb2xlYW47XG4gIHRvdGFsU2VhcmNoUmVzdWx0czogbnVtYmVyO1xuICBmYWNldHM6IE9iamVjdDtcbn1cbmNvbnN0IGluaXRpYWxTdGF0ZTogU2VhcmNoU3RhdGUgPSB7XG4gIHNlYXJjaFJlc3VsdHM6IFtdLFxuICBsb2FkaW5nU2VhcmNoUmVzdWx0czogZmFsc2UsXG4gIHRvdGFsU2VhcmNoUmVzdWx0czogMCxcbiAgZmFjZXRzOiBPYmplY3QuY3JlYXRlKG51bGwpLFxufTtcblxuZXhwb3J0IGNvbnN0IGdldFNlYXJjaFJlc3VsdHMgPSBjcmVhdGVBc3luY1RodW5rKFxuICBcInNlYXJjaF9yZXN1bHRzXCIsXG4gIGFzeW5jIChcbiAgICB7IHBhZ2UsIHJvd3NQZXJQYWdlLCBzZWFyY2gsIG9udG9sb2d5SWQsIHR5cGUsIHNlYXJjaFBhcmFtcyB9OiBhbnksXG4gICAgeyByZWplY3RXaXRoVmFsdWUgfVxuICApID0+IHtcbiAgICB0cnkge1xuICAgICAgbGV0IHF1ZXJ5ID0ge1xuICAgICAgICBzZWFyY2g6IHNlYXJjaCxcbiAgICAgICAgc2l6ZTogcm93c1BlclBhZ2UsXG4gICAgICAgIHBhZ2UsXG4gICAgICAgIGZhY2V0RmllbGRzOiBcIm9udG9sb2d5SWQgdHlwZVwiLFxuICAgICAgICBvbnRvbG9neUlkOiBvbnRvbG9neUlkLmxlbmd0aCA+IDAgPyBvbnRvbG9neUlkWzBdIDogbnVsbCxcbiAgICAgICAgdHlwZTogdHlwZS5sZW5ndGggPiAwID8gdHlwZVswXSA6IG51bGwsXG4gICAgICAgIC8vIGxhbmc6IFwiYWxsXCIsXG5cbiAgICAgICAgLi4uT2JqZWN0LmZyb21FbnRyaWVzKHNlYXJjaFBhcmFtcyBhcyBVUkxTZWFyY2hQYXJhbXMpLFxuICAgICAgfTtcbiAgICAgIGZvciAoY29uc3QgcGFyYW0gaW4gcXVlcnkpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHF1ZXJ5W3BhcmFtXSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgcXVlcnlbcGFyYW1dID09PSBudWxsIHx8XG4gICAgICAgICAgcXVlcnlbcGFyYW1dID09PSBcIlwiXG4gICAgICAgICkge1xuICAgICAgICAgIGRlbGV0ZSBxdWVyeVtwYXJhbV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IHBhcnNlZFF1ZXJ5ID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhxdWVyeSk7XG4gICAgICAvLyByZW1vdmUgcmVkdW5kYW50IHBhcmFtZXRlcnNcbiAgICAgIGlmIChzZWFyY2hQYXJhbXMuZ2V0KFwib250b2xvZ3lcIikpIHtcbiAgICAgICAgcGFyc2VkUXVlcnkuc2V0KFwib250b2xvZ3lJZFwiLCBzZWFyY2hQYXJhbXMuZ2V0KFwib250b2xvZ3lcIikpO1xuICAgICAgICBwYXJzZWRRdWVyeS5kZWxldGUoXCJvbnRvbG9neVwiKTtcbiAgICAgIH1cbiAgICAgIGlmIChzZWFyY2hQYXJhbXMuZ2V0KFwicVwiKSkgcGFyc2VkUXVlcnkuZGVsZXRlKFwicVwiKTtcblxuICAgICAgY29uc3QgZGF0YSA9IChcbiAgICAgICAgYXdhaXQgZ2V0UGFnaW5hdGVkPGFueT4oYGFwaS92Mi9lbnRpdGllcz8ke3BhcnNlZFF1ZXJ5fWApXG4gICAgICApLm1hcCgoZSkgPT4gdGhpbmdGcm9tSnNvblByb3BlcnRpZXMoZSkpO1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgcmV0dXJuIHJlamVjdFdpdGhWYWx1ZShlcnJvci5tZXNzYWdlKTtcbiAgICB9XG4gIH1cbik7XG5cbmNvbnN0IHNlYXJjaFNsaWNlID0gY3JlYXRlU2xpY2Uoe1xuICBuYW1lOiBcInNlYXJjaFwiLFxuICBpbml0aWFsU3RhdGUsXG4gIHJlZHVjZXJzOiB7fSxcbiAgZXh0cmFSZWR1Y2VyczogKGJ1aWxkZXIpID0+IHtcbiAgICBidWlsZGVyLmFkZENhc2UoXG4gICAgICBnZXRTZWFyY2hSZXN1bHRzLmZ1bGZpbGxlZCxcbiAgICAgIChzdGF0ZTogU2VhcmNoU3RhdGUsIGFjdGlvbjogUGF5bG9hZEFjdGlvbjxQYWdlPEVudGl0eT4+KSA9PiB7XG4gICAgICAgIHN0YXRlLnNlYXJjaFJlc3VsdHMgPSBhY3Rpb24ucGF5bG9hZC5lbGVtZW50cztcbiAgICAgICAgc3RhdGUudG90YWxTZWFyY2hSZXN1bHRzID0gYWN0aW9uLnBheWxvYWQudG90YWxFbGVtZW50cztcbiAgICAgICAgc3RhdGUuZmFjZXRzID0gYWN0aW9uLnBheWxvYWQuZmFjZXRGaWVsZHNUb0NvdW50cztcbiAgICAgICAgc3RhdGUubG9hZGluZ1NlYXJjaFJlc3VsdHMgPSBmYWxzZTtcbiAgICAgIH1cbiAgICApO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShnZXRTZWFyY2hSZXN1bHRzLnBlbmRpbmcsIChzdGF0ZTogU2VhcmNoU3RhdGUpID0+IHtcbiAgICAgIHN0YXRlLmxvYWRpbmdTZWFyY2hSZXN1bHRzID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBidWlsZGVyLmFkZENhc2UoZ2V0U2VhcmNoUmVzdWx0cy5yZWplY3RlZCwgKHN0YXRlOiBTZWFyY2hTdGF0ZSkgPT4ge1xuICAgICAgc3RhdGUubG9hZGluZ1NlYXJjaFJlc3VsdHMgPSBmYWxzZTtcbiAgICAgIHN0YXRlLnNlYXJjaFJlc3VsdHMgPSBpbml0aWFsU3RhdGUuc2VhcmNoUmVzdWx0cztcbiAgICAgIHN0YXRlLmZhY2V0cyA9IGluaXRpYWxTdGF0ZS5mYWNldHM7XG4gICAgfSk7XG4gIH0sXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgc2VhcmNoU2xpY2UucmVkdWNlcjtcbiIsICJpbXBvcnQgeyBjb25maWd1cmVTdG9yZSB9IGZyb20gXCJAcmVkdXhqcy90b29sa2l0XCI7XG5pbXBvcnQgaG9tZVJlZHVjZXIgZnJvbSBcIi4uL3BhZ2VzL2hvbWUvaG9tZVNsaWNlXCI7XG5pbXBvcnQgb250b2xvZ2llc1JlZHVjZXIgZnJvbSBcIi4uL3BhZ2VzL29udG9sb2dpZXMvb250b2xvZ2llc1NsaWNlXCI7XG5pbXBvcnQgc2VhcmNoUmVkdWNlciBmcm9tICcuLi9wYWdlcy9zZWFyY2gvc2VhcmNoU2xpY2UnO1xuXG5leHBvcnQgY29uc3Qgc3RvcmUgPSBjb25maWd1cmVTdG9yZSh7XG4gIHJlZHVjZXI6IHtcbiAgICBob21lOiBob21lUmVkdWNlcixcbiAgICBzZWFyY2g6IHNlYXJjaFJlZHVjZXIsXG4gICAgb250b2xvZ2llczogb250b2xvZ2llc1JlZHVjZXIsXG4gIH0sXG4gIG1pZGRsZXdhcmU6IChnZXREZWZhdWx0TWlkZGxld2FyZSkgPT5cbiAgICBnZXREZWZhdWx0TWlkZGxld2FyZSh7XG4gICAgICBzZXJpYWxpemFibGVDaGVjazogZmFsc2UsXG4gICAgfSksXG59KTtcblxuZXhwb3J0IHR5cGUgUm9vdFN0YXRlID0gUmV0dXJuVHlwZTx0eXBlb2Ygc3RvcmUuZ2V0U3RhdGU+O1xuZXhwb3J0IHR5cGUgQXBwRGlzcGF0Y2ggPSB0eXBlb2Ygc3RvcmUuZGlzcGF0Y2g7XG4iLCAiaW1wb3J0IHsgVGhlbWVQcm92aWRlciB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuaW1wb3J0IHtcbiAgQ2hlY2tib3gsXG4gIEZvcm1Db250cm9sLFxuICBGb3JtQ29udHJvbExhYmVsLFxuICBSYWRpbyxcbiAgUmFkaW9Hcm91cCxcbn0gZnJvbSBcIkBtdWkvbWF0ZXJpYWxcIjtcbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB1cmxKb2luIGZyb20gXCJ1cmwtam9pblwiO1xuaW1wb3J0IHsgdXNlQXBwRGlzcGF0Y2gsIHVzZUFwcFNlbGVjdG9yIH0gZnJvbSBcIi4uLy4uLy4uL2FwcC9ob29rc1wiO1xuaW1wb3J0IHsgdGhlbWUgfSBmcm9tIFwiLi4vLi4vLi4vYXBwL211aVwiO1xuaW1wb3J0IHsgcmFuZG9tU3RyaW5nIH0gZnJvbSBcIi4uLy4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQgTm9kZSBmcm9tIFwiLi4vLi4vLi4vY29tcG9uZW50cy9Ob2RlXCI7XG5pbXBvcnQgRW50aXR5IGZyb20gXCIuLi8uLi8uLi9tb2RlbC9FbnRpdHlcIjtcbmltcG9ydCBPbnRvbG9neSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvT250b2xvZ3lcIjtcbmltcG9ydCB7XG4gIFRyZWVOb2RlLFxuICBjbG9zZU5vZGUsXG4gIGRpc2FibGVQcmVmZXJyZWRSb290cyxcbiAgZW5hYmxlUHJlZmVycmVkUm9vdHMsXG4gIGdldEFuY2VzdG9ycyxcbiAgZ2V0Tm9kZUNoaWxkcmVuLFxuICBnZXRSb290RW50aXRpZXMsXG4gIGhpZGVDb3VudHMsXG4gIGhpZGVPYnNvbGV0ZSxcbiAgaGlkZVNpYmxpbmdzLFxuICBvcGVuTm9kZSxcbiAgcmVzZXRUcmVlQ29udGVudCxcbiAgcmVzZXRUcmVlU2V0dGluZ3MsXG4gIHNob3dDb3VudHMsXG4gIHNob3dPYnNvbGV0ZSxcbiAgc2hvd1NpYmxpbmdzLFxufSBmcm9tIFwiLi4vb250b2xvZ2llc1NsaWNlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEVudGl0eVRyZWUoe1xuICBvbnRvbG9neSxcbiAgZW50aXR5VHlwZSxcbiAgc2VsZWN0ZWRFbnRpdHksXG4gIGxhbmcsXG4gIG9uTmF2aWdhdGVUb0VudGl0eSxcbiAgb25OYXZpZ2F0ZVRvT250b2xvZ3ksXG4gIGFwaVVybCxcbn06IHtcbiAgb250b2xvZ3k6IE9udG9sb2d5O1xuICBzZWxlY3RlZEVudGl0eT86IEVudGl0eTtcbiAgZW50aXR5VHlwZTogXCJlbnRpdGllc1wiIHwgXCJjbGFzc2VzXCIgfCBcInByb3BlcnRpZXNcIiB8IFwiaW5kaXZpZHVhbHNcIjtcbiAgbGFuZzogc3RyaW5nO1xuICBvbk5hdmlnYXRlVG9FbnRpdHk6IChvbnRvbG9neTogT250b2xvZ3ksIGVudGl0eTogRW50aXR5KSA9PiB2b2lkO1xuICBvbk5hdmlnYXRlVG9PbnRvbG9neTogKG9udG9sb2d5SWQ6IHN0cmluZywgZW50aXR5OiBFbnRpdHkpID0+IHZvaWQ7XG4gIGFwaVVybD86IHN0cmluZztcbn0pIHtcbiAgY29uc3QgZGlzcGF0Y2ggPSB1c2VBcHBEaXNwYXRjaCgpO1xuICBjb25zdCBub2Rlc1dpdGhDaGlsZHJlbkxvYWRlZCA9IHVzZUFwcFNlbGVjdG9yKFxuICAgIChzdGF0ZSkgPT4gc3RhdGUub250b2xvZ2llcy5ub2Rlc1dpdGhDaGlsZHJlbkxvYWRlZFxuICApO1xuICBjb25zdCBub2RlQ2hpbGRyZW4gPSB1c2VBcHBTZWxlY3Rvcigoc3RhdGUpID0+IHN0YXRlLm9udG9sb2dpZXMubm9kZUNoaWxkcmVuKTtcbiAgY29uc3Qgcm9vdE5vZGVzID0gdXNlQXBwU2VsZWN0b3IoKHN0YXRlKSA9PiBzdGF0ZS5vbnRvbG9naWVzLnJvb3ROb2Rlcyk7XG4gIGNvbnN0IG51bVBlbmRpbmdUcmVlUmVxdWVzdHMgPSB1c2VBcHBTZWxlY3RvcihcbiAgICAoc3RhdGUpID0+IHN0YXRlLm9udG9sb2dpZXMubnVtUGVuZGluZ1RyZWVSZXF1ZXN0c1xuICApO1xuICBjb25zdCBwcmVmZXJyZWRSb290cyA9IHVzZUFwcFNlbGVjdG9yKFxuICAgIChzdGF0ZSkgPT4gc3RhdGUub250b2xvZ2llcy5wcmVmZXJyZWRSb290c1xuICApO1xuICBjb25zdCBhdXRvbWF0aWNhbGx5RXhwYW5kZWROb2RlcyA9IHVzZUFwcFNlbGVjdG9yKFxuICAgIChzdGF0ZSkgPT4gc3RhdGUub250b2xvZ2llcy5hdXRvbWF0aWNhbGx5RXhwYW5kZWROb2Rlc1xuICApO1xuICBjb25zdCBtYW51YWxseUV4cGFuZGVkTm9kZXMgPSB1c2VBcHBTZWxlY3RvcihcbiAgICAoc3RhdGUpID0+IHN0YXRlLm9udG9sb2dpZXMubWFudWFsbHlFeHBhbmRlZE5vZGVzXG4gICk7XG5cbiAgY29uc3Qgc2hvd09ic29sZXRlRW5hYmxlZCA9IHNlbGVjdGVkRW50aXR5XG4gICAgPyBzZWxlY3RlZEVudGl0eS5pc0RlcHJlY2F0ZWQoKVxuICAgIDogdXNlQXBwU2VsZWN0b3IoKHN0YXRlKSA9PiBzdGF0ZS5vbnRvbG9naWVzLmRpc3BsYXlPYnNvbGV0ZSk7XG4gIGNvbnN0IHNob3dTaWJsaW5nc0VuYWJsZWQgPSB1c2VBcHBTZWxlY3RvcihcbiAgICAoc3RhdGUpID0+IHN0YXRlLm9udG9sb2dpZXMuZGlzcGxheVNpYmxpbmdzXG4gICk7XG4gIGNvbnN0IHNob3dDb3VudHNFbmFibGVkID0gdXNlQXBwU2VsZWN0b3IoXG4gICAgKHN0YXRlKSA9PiBzdGF0ZS5vbnRvbG9naWVzLmRpc3BsYXlDb3VudHNcbiAgKTtcblxuICBjb25zdCB0b2dnbGVOb2RlID0gdXNlQ2FsbGJhY2soXG4gICAgKG5vZGU6IGFueSkgPT4ge1xuICAgICAgbGV0IGlzRXhwYW5kZWQgPVxuICAgICAgICBtYW51YWxseUV4cGFuZGVkTm9kZXMuaW5kZXhPZihub2RlLmFic29sdXRlSWRlbnRpdHkpICE9PSAtMSB8fFxuICAgICAgICBhdXRvbWF0aWNhbGx5RXhwYW5kZWROb2Rlcy5pbmRleE9mKG5vZGUuYWJzb2x1dGVJZGVudGl0eSkgIT09IC0xO1xuXG4gICAgICBpZiAoaXNFeHBhbmRlZCkge1xuICAgICAgICBkaXNwYXRjaChjbG9zZU5vZGUobm9kZSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGlzcGF0Y2gob3Blbk5vZGUobm9kZSkpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW1xuICAgICAgZGlzcGF0Y2gsXG4gICAgICBKU09OLnN0cmluZ2lmeShhdXRvbWF0aWNhbGx5RXhwYW5kZWROb2RlcyksXG4gICAgICBKU09OLnN0cmluZ2lmeShtYW51YWxseUV4cGFuZGVkTm9kZXMpLFxuICAgIF1cbiAgKTtcblxuICAvLyBJZiB0aGUgb250b2xvZ3ksIGVudGl0eSB0eXBlLCBzZWxlY3RlZCBlbnRpdHkgSVJJLCBvciBsYW5nIGNoYW5nZSwgcmVzZXQgdGhlIHRyZWUgc2V0dGluZ3MgKGluY2x1ZGluZyBzaG93b2Jzb2xldGUvcHJlZmVycmVkIHJvb3RzKVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGRpc3BhdGNoKHJlc2V0VHJlZVNldHRpbmdzKHsgZW50aXR5VHlwZSwgc2VsZWN0ZWRFbnRpdHkgfSkpO1xuICB9LCBbXG4gICAgZGlzcGF0Y2gsXG4gICAgb250b2xvZ3kuZ2V0T250b2xvZ3lJZCgpLFxuICAgIGVudGl0eVR5cGUsXG4gICAgc2VsZWN0ZWRFbnRpdHk/LmdldElyaSgpLFxuICBdKTtcblxuICAvLyBJZiB0aGUgb250b2xvZ3ksIGVudGl0eSB0eXBlLCBzZWxlY3RlZCBlbnRpdHksIGxhbmcgT1IgdGhlIHNob3dPYnNvbGV0ZUVuYWJsZWQvcHJlZmVycmVkUm9vdHMgY2hhbmdlLCByZXNldCB0aGUgdHJlZSBjb250ZW50IGJ1dCBub3QgdGhlIHNldHRpbmdzXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgZGlzcGF0Y2gocmVzZXRUcmVlQ29udGVudCgpKTtcbiAgfSwgW1xuICAgIGRpc3BhdGNoLFxuICAgIG9udG9sb2d5LmdldE9udG9sb2d5SWQoKSxcbiAgICBlbnRpdHlUeXBlLFxuICAgIEpTT04uc3RyaW5naWZ5KHNlbGVjdGVkRW50aXR5KSxcbiAgICBzaG93T2Jzb2xldGVFbmFibGVkLFxuICAgIHByZWZlcnJlZFJvb3RzLFxuICAgIGxhbmcsXG4gIF0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHNlbGVjdGVkRW50aXR5KSB7XG4gICAgICBjb25zdCBlbnRpdHlJcmkgPSBzZWxlY3RlZEVudGl0eS5nZXRJcmkoKTtcbiAgICAgIGxldCBwcm9taXNlID0gZGlzcGF0Y2goXG4gICAgICAgIGdldEFuY2VzdG9ycyh7XG4gICAgICAgICAgb250b2xvZ3lJZDogb250b2xvZ3kuZ2V0T250b2xvZ3lJZCgpLFxuICAgICAgICAgIGVudGl0eVR5cGU6IHNlbGVjdGVkRW50aXR5LmdldFR5cGVQbHVyYWwoKSxcbiAgICAgICAgICBlbnRpdHlJcmksXG4gICAgICAgICAgbGFuZyxcbiAgICAgICAgICBzaG93T2Jzb2xldGVFbmFibGVkLFxuICAgICAgICAgIHNob3dTaWJsaW5nc0VuYWJsZWQsXG4gICAgICAgICAgYXBpVXJsLFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICAgIHJldHVybiAoKSA9PiBwcm9taXNlLmFib3J0KCk7IC8vIGNvbXBvbmVudCB3YXMgdW5tb3VudGVkXG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBwcm9taXNlID0gZGlzcGF0Y2goXG4gICAgICAgIGdldFJvb3RFbnRpdGllcyh7XG4gICAgICAgICAgb250b2xvZ3lJZDogb250b2xvZ3kuZ2V0T250b2xvZ3lJZCgpLFxuICAgICAgICAgIGVudGl0eVR5cGUsXG4gICAgICAgICAgcHJlZmVycmVkUm9vdHMsXG4gICAgICAgICAgbGFuZyxcbiAgICAgICAgICBzaG93T2Jzb2xldGVFbmFibGVkLFxuICAgICAgICAgIGFwaVVybCxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICByZXR1cm4gKCkgPT4gcHJvbWlzZS5hYm9ydCgpOyAvLyBjb21wb25lbnQgd2FzIHVubW91bnRlZFxuICAgIH1cbiAgfSwgW1xuICAgIGRpc3BhdGNoLFxuICAgIGVudGl0eVR5cGUsXG4gICAgSlNPTi5zdHJpbmdpZnkoc2VsZWN0ZWRFbnRpdHkpLFxuICAgIG9udG9sb2d5LmdldE9udG9sb2d5SWQoKSxcbiAgICBwcmVmZXJyZWRSb290cyxcbiAgICBsYW5nLFxuICAgIHNob3dPYnNvbGV0ZUVuYWJsZWQsXG4gIF0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgbGV0IG5vZGVzTWlzc2luZ0NoaWxkcmVuOiBzdHJpbmdbXSA9IG1hbnVhbGx5RXhwYW5kZWROb2Rlcy5maWx0ZXIoXG4gICAgICAoYWJzb2x1dGVJZGVudGl0eSkgPT5cbiAgICAgICAgbm9kZXNXaXRoQ2hpbGRyZW5Mb2FkZWQuaW5kZXhPZihhYnNvbHV0ZUlkZW50aXR5KSA9PT0gLTFcbiAgICApO1xuXG4gICAgaWYgKHNob3dTaWJsaW5nc0VuYWJsZWQpIHtcbiAgICAgIG5vZGVzTWlzc2luZ0NoaWxkcmVuID0gW1xuICAgICAgICAuLi5ub2Rlc01pc3NpbmdDaGlsZHJlbixcbiAgICAgICAgLi4uYXV0b21hdGljYWxseUV4cGFuZGVkTm9kZXMuZmlsdGVyKFxuICAgICAgICAgIChhYnNvbHV0ZUlkZW50aXR5KSA9PlxuICAgICAgICAgICAgbm9kZXNXaXRoQ2hpbGRyZW5Mb2FkZWQuaW5kZXhPZihhYnNvbHV0ZUlkZW50aXR5KSA9PT0gLTFcbiAgICAgICAgKSxcbiAgICAgIF07XG4gICAgfVxuICAgIC8vIGNvbnNvbGUubG9nKFxuICAgIC8vICAgXCIhISEhIEdldHRpbmcgbWlzc2luZyBub2RlIGNoaWxkcmVuOiBcIiArXG4gICAgLy8gICAgIEpTT04uc3RyaW5naWZ5KG5vZGVzTWlzc2luZ0NoaWxkcmVuKVxuICAgIC8vICk7XG5cbiAgICBsZXQgcHJvbWlzZXM6IGFueSA9IFtdO1xuICAgIGZvciAobGV0IGFic0lkIG9mIG5vZGVzTWlzc2luZ0NoaWxkcmVuKSB7XG4gICAgICBwcm9taXNlcy5wdXNoKFxuICAgICAgICBkaXNwYXRjaChcbiAgICAgICAgICBnZXROb2RlQ2hpbGRyZW4oe1xuICAgICAgICAgICAgb250b2xvZ3lJZDogb250b2xvZ3kuZ2V0T250b2xvZ3lJZCgpLFxuICAgICAgICAgICAgZW50aXR5VHlwZVBsdXJhbDogc2VsZWN0ZWRFbnRpdHk/LmdldFR5cGVQbHVyYWwoKSB8fCBlbnRpdHlUeXBlLCAvLyBUT0RPOiBzaG91bGQgYWN0dWFsbHkgYmUgdHlwZSBvZiBjdXJyZW50IGVudGl0eSB3aXRoIGlyaSBhYnNJZCwgbm90IHR5cGUgb2Ygc2VsZWN0ZWRFbnRpdHlcbiAgICAgICAgICAgIGVudGl0eUlyaTogYWJzSWQuc3BsaXQoXCI7XCIpLnBvcCgpLFxuICAgICAgICAgICAgYWJzb2x1dGVJZGVudGl0eTogYWJzSWQsXG4gICAgICAgICAgICBsYW5nLFxuICAgICAgICAgICAgc2hvd09ic29sZXRlRW5hYmxlZCxcbiAgICAgICAgICAgIGFwaVVybCxcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBmb3IgKGxldCBwcm9taXNlIG9mIHByb21pc2VzKSBwcm9taXNlLmFib3J0KCk7IC8vIGNvbXBvbmVudCB3YXMgdW5tb3VudGVkXG4gICAgfTtcbiAgfSwgW1xuICAgIGRpc3BhdGNoLFxuICAgIGxhbmcsXG4gICAgSlNPTi5zdHJpbmdpZnkobWFudWFsbHlFeHBhbmRlZE5vZGVzKSxcbiAgICBKU09OLnN0cmluZ2lmeShhdXRvbWF0aWNhbGx5RXhwYW5kZWROb2RlcyksXG4gICAgSlNPTi5zdHJpbmdpZnkobm9kZUNoaWxkcmVuKSxcbiAgICBvbnRvbG9neS5nZXRPbnRvbG9neUlkKCksXG4gICAgZW50aXR5VHlwZSxcbiAgICBwcmVmZXJyZWRSb290cyxcbiAgICBzaG93T2Jzb2xldGVFbmFibGVkLFxuICAgIHNob3dTaWJsaW5nc0VuYWJsZWQsXG4gIF0pO1xuXG4gIGxldCB0b2dnbGVTaG93T2Jzb2xldGUgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKHNob3dPYnNvbGV0ZUVuYWJsZWQpIGRpc3BhdGNoKGhpZGVPYnNvbGV0ZSgpKTtcbiAgICBlbHNlIGRpc3BhdGNoKHNob3dPYnNvbGV0ZSgpKTtcbiAgfSwgW2Rpc3BhdGNoLCBzaG93T2Jzb2xldGVFbmFibGVkXSk7XG5cbiAgbGV0IHRvZ2dsZVNob3dTaWJsaW5ncyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoc2hvd1NpYmxpbmdzRW5hYmxlZCkgZGlzcGF0Y2goaGlkZVNpYmxpbmdzKCkpO1xuICAgIGVsc2UgZGlzcGF0Y2goc2hvd1NpYmxpbmdzKCkpO1xuICB9LCBbZGlzcGF0Y2gsIHNob3dTaWJsaW5nc0VuYWJsZWRdKTtcblxuICBsZXQgdG9nZ2xlU2hvd0NvdW50cyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoc2hvd0NvdW50c0VuYWJsZWQpIGRpc3BhdGNoKGhpZGVDb3VudHMoKSk7XG4gICAgZWxzZSBkaXNwYXRjaChzaG93Q291bnRzKCkpO1xuICB9LCBbZGlzcGF0Y2gsIHNob3dDb3VudHNFbmFibGVkXSk7XG5cbiAgZnVuY3Rpb24gcmVuZGVyTm9kZUNoaWxkcmVuKFxuICAgIGNoaWxkcmVuOiBUcmVlTm9kZVtdLFxuICAgIGRlYnVnTnVtSXRlcmF0aW9uczogbnVtYmVyXG4gICkge1xuICAgIGlmIChkZWJ1Z051bUl0ZXJhdGlvbnMgPiAxMDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcInByb2JhYmxlIGN5Y2xpYyB0cmVlIChyZW5kZXJOb2RlQ2hpbGRyZW4pXCIpO1xuICAgIH1cbiAgICBjb25zdCBjaGlsZHJlbkNvcHkgPSBbLi4uY2hpbGRyZW5dO1xuICAgIGNoaWxkcmVuQ29weS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICBjb25zdCB0aXRsZUEgPSBhPy50aXRsZSA/IGEudGl0bGUudG9TdHJpbmcoKS50b1VwcGVyQ2FzZSgpIDogXCJcIjtcbiAgICAgIGNvbnN0IHRpdGxlQiA9IGI/LnRpdGxlID8gYi50aXRsZS50b1N0cmluZygpLnRvVXBwZXJDYXNlKCkgOiBcIlwiO1xuICAgICAgcmV0dXJuIHRpdGxlQSA9PT0gdGl0bGVCID8gMCA6IHRpdGxlQSA+IHRpdGxlQiA/IDEgOiAtMTtcbiAgICB9KTtcbiAgICBjb25zdCBjaGlsZHJlblNvcnRlZCA9IGNoaWxkcmVuQ29weS5maWx0ZXIoXG4gICAgICAoY2hpbGQsIGksIGFycikgPT5cbiAgICAgICAgIWkgfHwgY2hpbGQuYWJzb2x1dGVJZGVudGl0eSAhPT0gYXJyW2kgLSAxXS5hYnNvbHV0ZUlkZW50aXR5XG4gICAgKTtcbiAgICByZXR1cm4gKFxuICAgICAgPHVsXG4gICAgICAgIHJvbGU9XCJncm91cFwiXG4gICAgICAgIGNsYXNzTmFtZT1cImpzdHJlZS1jb250YWluZXItdWwganN0cmVlLWNoaWxkcmVuIGpzdHJlZS1uby1pY29uc1wiXG4gICAgICA+XG4gICAgICAgIHtjaGlsZHJlblNvcnRlZC5tYXAoKGNoaWxkTm9kZTogVHJlZU5vZGUsIGkpID0+IHtcbiAgICAgICAgICBjb25zdCBpc0V4cGFuZGVkID1cbiAgICAgICAgICAgIG1hbnVhbGx5RXhwYW5kZWROb2Rlcy5pbmRleE9mKGNoaWxkTm9kZS5hYnNvbHV0ZUlkZW50aXR5KSAhPT0gLTEgfHxcbiAgICAgICAgICAgIGF1dG9tYXRpY2FsbHlFeHBhbmRlZE5vZGVzLmluZGV4T2YoY2hpbGROb2RlLmFic29sdXRlSWRlbnRpdHkpICE9PVxuICAgICAgICAgICAgICAtMTtcbiAgICAgICAgICBjb25zdCBpc0xhc3QgPSBpID09PSBjaGlsZHJlblNvcnRlZCEubGVuZ3RoIC0gMTtcbiAgICAgICAgICBjb25zdCBoaWdobGlnaHQgPVxuICAgICAgICAgICAgKHNlbGVjdGVkRW50aXR5ICYmIGNoaWxkTm9kZS5pcmkgPT09IHNlbGVjdGVkRW50aXR5LmdldElyaSgpKSB8fFxuICAgICAgICAgICAgZmFsc2U7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxOb2RlXG4gICAgICAgICAgICAgIGV4cGFuZGFibGU9e2NoaWxkTm9kZS5leHBhbmRhYmxlfVxuICAgICAgICAgICAgICBleHBhbmRlZD17aXNFeHBhbmRlZH1cbiAgICAgICAgICAgICAgaGlnaGxpZ2h0PXtoaWdobGlnaHR9XG4gICAgICAgICAgICAgIGlzTGFzdD17aXNMYXN0fVxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgdG9nZ2xlTm9kZShjaGlsZE5vZGUpO1xuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBrZXk9e3JhbmRvbVN0cmluZygpfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7Y2hpbGROb2RlLmNoaWxkUmVsYXRpb25Ub1BhcmVudCA9PT1cbiAgICAgICAgICAgICAgICBcImh0dHA6Ly9wdXJsLm9ib2xpYnJhcnkub3JnL29iby9CRk9fMDAwMDA1MFwiICYmIChcbiAgICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJtci0xXCJcbiAgICAgICAgICAgICAgICAgIHNyYz17dXJsSm9pbihwcm9jZXNzLmVudi5QVUJMSUNfVVJMISwgXCIvcGFydC5zdmdcIil9XG4gICAgICAgICAgICAgICAgICBzdHlsZT17eyBoZWlnaHQ6IFwiMWVtXCIsIGRpc3BsYXk6IFwiaW5saW5lXCIgfX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICB7Y2hpbGROb2RlLmNoaWxkUmVsYXRpb25Ub1BhcmVudCA9PT1cbiAgICAgICAgICAgICAgICBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyN0eXBlXCIgJiYgKFxuICAgICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm1yLTFcIlxuICAgICAgICAgICAgICAgICAgc3JjPXt1cmxKb2luKHByb2Nlc3MuZW52LlBVQkxJQ19VUkwhLCBcIi9pbnN0YW5jZS5zdmdcIil9XG4gICAgICAgICAgICAgICAgICBzdHlsZT17eyBoZWlnaHQ6IFwiMWVtXCIsIGRpc3BsYXk6IFwiaW5saW5lXCIgfX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8VHJlZUxpbmtcbiAgICAgICAgICAgICAgICBvbnRvbG9neT17b250b2xvZ3l9XG4gICAgICAgICAgICAgICAgZW50aXR5PXtjaGlsZE5vZGUuZW50aXR5fVxuICAgICAgICAgICAgICAgIHRpdGxlPXtjaGlsZE5vZGUudGl0bGV9XG4gICAgICAgICAgICAgICAgbGFuZz17bGFuZ31cbiAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9FbnRpdHk9e29uTmF2aWdhdGVUb0VudGl0eX1cbiAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neT17b25OYXZpZ2F0ZVRvT250b2xvZ3l9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIHshc2hvd09ic29sZXRlRW5hYmxlZCAmJlxuICAgICAgICAgICAgICAgIHNob3dDb3VudHNFbmFibGVkICYmXG4gICAgICAgICAgICAgICAgY2hpbGROb2RlLm51bURlc2NlbmRhbnRzID4gMCAmJiAoXG4gICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBjb2xvcjogXCJncmF5XCIgfX0+XG4gICAgICAgICAgICAgICAgICAgIHtcIiAoXCIgKyBjaGlsZE5vZGUubnVtRGVzY2VuZGFudHMudG9Mb2NhbGVTdHJpbmcoKSArIFwiKVwifVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIHtpc0V4cGFuZGVkICYmXG4gICAgICAgICAgICAgICAgcmVuZGVyTm9kZUNoaWxkcmVuKFxuICAgICAgICAgICAgICAgICAgbm9kZUNoaWxkcmVuW2NoaWxkTm9kZS5hYnNvbHV0ZUlkZW50aXR5XSB8fCBbXSxcbiAgICAgICAgICAgICAgICAgIGRlYnVnTnVtSXRlcmF0aW9ucyArIDFcbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9Ob2RlPlxuICAgICAgICAgICk7XG4gICAgICAgIH0pfVxuICAgICAgPC91bD5cbiAgICApO1xuICB9XG4gIHJldHVybiAoXG4gICAgPFRoZW1lUHJvdmlkZXIgdGhlbWU9e3RoZW1lfT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbC1yZXZlcnNlIGxnOmdyaWQgbGc6Z3JpZC1jb2xzLTMgbGc6Z2FwLTRcIj5cbiAgICAgICAge3Jvb3ROb2RlcyA/IChcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImxnOmNvbC1zcGFuLTIgcmVsYXRpdmVcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicHgtMyBwYi0zIGpzdHJlZSBqc3RyZWUtMSBqc3RyZWUtcHJvdG9uIG92ZXJmbG93LXgtYXV0b1wiXG4gICAgICAgICAgICAgIHJvbGU9XCJ0cmVlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3JlbmRlck5vZGVDaGlsZHJlbihyb290Tm9kZXMsIDApfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB7bnVtUGVuZGluZ1RyZWVSZXF1ZXN0cyA+IDAgPyAoXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYWJzb2x1dGUgc3Bpbm5lci1kZWZhdWx0IHctNyBoLTcgLXRvcC0xIC1sZWZ0LTQgei1hdXRvXCIgLz5cbiAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApIDogbnVsbH1cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJsZzpjb2wtc3Bhbi0xIGZsZXggZmxleC1jb2wgYmctd2hpdGUgcHgtMiBtYi0yIHJvdW5kZWQtbGdcIj5cbiAgICAgICAgICB7ZW50aXR5VHlwZSA9PT0gXCJjbGFzc2VzXCIgJiZcbiAgICAgICAgICAgIG9udG9sb2d5LmdldFByZWZlcnJlZFJvb3RzKCkubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWItMlwiPlxuICAgICAgICAgICAgICAgIDxGb3JtQ29udHJvbD5cbiAgICAgICAgICAgICAgICAgIDxSYWRpb0dyb3VwXG4gICAgICAgICAgICAgICAgICAgIG5hbWU9XCJyYWRpby1idXR0b25zLWdyb3VwXCJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3ByZWZlcnJlZFJvb3RzID8gXCJ0cnVlXCIgOiBcImZhbHNlXCJ9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxGb3JtQ29udHJvbExhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBkaXNwYXRjaChlbmFibGVQcmVmZXJyZWRSb290cygpKX1cbiAgICAgICAgICAgICAgICAgICAgICBjb250cm9sPXs8UmFkaW8gLz59XG4gICAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJQcmVmZXJyZWQgcm9vdHNcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8Rm9ybUNvbnRyb2xMYWJlbFxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGRpc3BhdGNoKGRpc2FibGVQcmVmZXJyZWRSb290cygpKX1cbiAgICAgICAgICAgICAgICAgICAgICBjb250cm9sPXs8UmFkaW8gLz59XG4gICAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJBbGwgY2xhc3Nlc1wiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L1JhZGlvR3JvdXA+XG4gICAgICAgICAgICAgICAgPC9Gb3JtQ29udHJvbD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDxGb3JtQ29udHJvbExhYmVsXG4gICAgICAgICAgICBjb250cm9sPXtcbiAgICAgICAgICAgICAgPENoZWNrYm94XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3Nob3dPYnNvbGV0ZUVuYWJsZWR9XG4gICAgICAgICAgICAgICAgY2hlY2tlZD17IXNob3dPYnNvbGV0ZUVuYWJsZWQgJiYgc2hvd0NvdW50c0VuYWJsZWR9XG4gICAgICAgICAgICAgICAgb25DbGljaz17dG9nZ2xlU2hvd0NvdW50c31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxhYmVsPVwiU2hvdyBjb3VudHNcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPEZvcm1Db250cm9sTGFiZWxcbiAgICAgICAgICAgIGNvbnRyb2w9e1xuICAgICAgICAgICAgICA8Q2hlY2tib3hcbiAgICAgICAgICAgICAgICBjaGVja2VkPXtzaG93T2Jzb2xldGVFbmFibGVkfVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e3RvZ2dsZVNob3dPYnNvbGV0ZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxhYmVsPVwiU2hvdyBvYnNvbGV0ZSB0ZXJtc1wiXG4gICAgICAgICAgLz5cbiAgICAgICAgICB7c2VsZWN0ZWRFbnRpdHkgJiYgKFxuICAgICAgICAgICAgPEZvcm1Db250cm9sTGFiZWxcbiAgICAgICAgICAgICAgY29udHJvbD17XG4gICAgICAgICAgICAgICAgPENoZWNrYm94XG4gICAgICAgICAgICAgICAgICBjaGVja2VkPXtzaG93U2libGluZ3NFbmFibGVkfVxuICAgICAgICAgICAgICAgICAgb25DbGljaz17dG9nZ2xlU2hvd1NpYmxpbmdzfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgbGFiZWw9XCJTaG93IGFsbCBzaWJsaW5nc1wiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9UaGVtZVByb3ZpZGVyPlxuICApO1xufVxuXG5mdW5jdGlvbiBUcmVlTGluayh7XG4gIG9udG9sb2d5LFxuICBlbnRpdHksXG4gIHRpdGxlLFxuICBsYW5nLFxuICBvbk5hdmlnYXRlVG9FbnRpdHksXG4gIG9uTmF2aWdhdGVUb09udG9sb2d5LFxufToge1xuICBvbnRvbG9neTogT250b2xvZ3k7XG4gIGVudGl0eTogRW50aXR5O1xuICB0aXRsZTogc3RyaW5nO1xuICBsYW5nOiBzdHJpbmc7XG4gIG9uTmF2aWdhdGVUb0VudGl0eTogKG9udG9sb2d5OiBPbnRvbG9neSwgZW50aXR5OiBFbnRpdHkpID0+IHZvaWQ7XG4gIG9uTmF2aWdhdGVUb09udG9sb2d5OiAob250b2xvZ3lJZDogc3RyaW5nLCBlbnRpdHk6IEVudGl0eSkgPT4gdm9pZDtcbn0pIHtcbiAgbGV0IGRlZmluZWRCeTogc3RyaW5nW10gPSBlbnRpdHkuZ2V0RGVmaW5lZEJ5KCk7XG5cbiAgaWYgKGRlZmluZWRCeS5pbmRleE9mKG9udG9sb2d5LmdldE9udG9sb2d5SWQoKSkgIT09IC0xKSBkZWZpbmVkQnkgPSBbXTsgLy8gZG9uJ3Qgc2hvdyBkZWZpbmVkQnkgbGlua3MgZm9yIHRlcm1zIGluIGN1cnJlbnQgb250b2xvZ3lcblxuICByZXR1cm4gKFxuICAgIDxzcGFuPlxuICAgICAgPGFcbiAgICAgICAgdGl0bGU9e2VudGl0eS5nZXRJcmkoKX1cbiAgICAgICAgY2xhc3NOYW1lPXtcImxpbmstZGVmYXVsdFwifVxuICAgICAgICBvbkNsaWNrPXsoKSA9PiBvbk5hdmlnYXRlVG9FbnRpdHkob250b2xvZ3ksIGVudGl0eSl9XG4gICAgICA+XG4gICAgICAgIHt0aXRsZX1cbiAgICAgIDwvYT5cbiAgICAgIHtkZWZpbmVkQnkubGVuZ3RoID4gMCAmJlxuICAgICAgICBkZWZpbmVkQnkubWFwKChkZWZpbmluZ09udG9sb2d5KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IG9uTmF2aWdhdGVUb09udG9sb2d5KGRlZmluaW5nT250b2xvZ3ksIGVudGl0eSl9XG4gICAgICAgICAgICAgIHRpdGxlPXtkZWZpbmluZ09udG9sb2d5LnRvVXBwZXJDYXNlKCl9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm14LTEgbGluay1vbnRvbG9neSBweC0yIHB5LTAuNSByb3VuZGVkLW1kIHRleHQtc20gdGV4dC13aGl0ZSB1cHBlcmNhc2UgbWwtMVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHtkZWZpbmluZ09udG9sb2d5fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICk7XG4gICAgICAgIH0pfVxuICAgIDwvc3Bhbj5cbiAgKTtcbn1cbiIsICJjb25zdCBjb21tb24gPSB7XG4gIGJsYWNrOiAnIzAwMCcsXG4gIHdoaXRlOiAnI2ZmZidcbn07XG5leHBvcnQgZGVmYXVsdCBjb21tb247IiwgImNvbnN0IHJlZCA9IHtcbiAgNTA6ICcjZmZlYmVlJyxcbiAgMTAwOiAnI2ZmY2RkMicsXG4gIDIwMDogJyNlZjlhOWEnLFxuICAzMDA6ICcjZTU3MzczJyxcbiAgNDAwOiAnI2VmNTM1MCcsXG4gIDUwMDogJyNmNDQzMzYnLFxuICA2MDA6ICcjZTUzOTM1JyxcbiAgNzAwOiAnI2QzMmYyZicsXG4gIDgwMDogJyNjNjI4MjgnLFxuICA5MDA6ICcjYjcxYzFjJyxcbiAgQTEwMDogJyNmZjhhODAnLFxuICBBMjAwOiAnI2ZmNTI1MicsXG4gIEE0MDA6ICcjZmYxNzQ0JyxcbiAgQTcwMDogJyNkNTAwMDAnXG59O1xuZXhwb3J0IGRlZmF1bHQgcmVkOyIsICJjb25zdCBwdXJwbGUgPSB7XG4gIDUwOiAnI2YzZTVmNScsXG4gIDEwMDogJyNlMWJlZTcnLFxuICAyMDA6ICcjY2U5M2Q4JyxcbiAgMzAwOiAnI2JhNjhjOCcsXG4gIDQwMDogJyNhYjQ3YmMnLFxuICA1MDA6ICcjOWMyN2IwJyxcbiAgNjAwOiAnIzhlMjRhYScsXG4gIDcwMDogJyM3YjFmYTInLFxuICA4MDA6ICcjNmExYjlhJyxcbiAgOTAwOiAnIzRhMTQ4YycsXG4gIEExMDA6ICcjZWE4MGZjJyxcbiAgQTIwMDogJyNlMDQwZmInLFxuICBBNDAwOiAnI2Q1MDBmOScsXG4gIEE3MDA6ICcjYWEwMGZmJ1xufTtcbmV4cG9ydCBkZWZhdWx0IHB1cnBsZTsiLCAiY29uc3QgYmx1ZSA9IHtcbiAgNTA6ICcjZTNmMmZkJyxcbiAgMTAwOiAnI2JiZGVmYicsXG4gIDIwMDogJyM5MGNhZjknLFxuICAzMDA6ICcjNjRiNWY2JyxcbiAgNDAwOiAnIzQyYTVmNScsXG4gIDUwMDogJyMyMTk2ZjMnLFxuICA2MDA6ICcjMWU4OGU1JyxcbiAgNzAwOiAnIzE5NzZkMicsXG4gIDgwMDogJyMxNTY1YzAnLFxuICA5MDA6ICcjMGQ0N2ExJyxcbiAgQTEwMDogJyM4MmIxZmYnLFxuICBBMjAwOiAnIzQ0OGFmZicsXG4gIEE0MDA6ICcjMjk3OWZmJyxcbiAgQTcwMDogJyMyOTYyZmYnXG59O1xuZXhwb3J0IGRlZmF1bHQgYmx1ZTsiLCAiY29uc3QgbGlnaHRCbHVlID0ge1xuICA1MDogJyNlMWY1ZmUnLFxuICAxMDA6ICcjYjNlNWZjJyxcbiAgMjAwOiAnIzgxZDRmYScsXG4gIDMwMDogJyM0ZmMzZjcnLFxuICA0MDA6ICcjMjliNmY2JyxcbiAgNTAwOiAnIzAzYTlmNCcsXG4gIDYwMDogJyMwMzliZTUnLFxuICA3MDA6ICcjMDI4OGQxJyxcbiAgODAwOiAnIzAyNzdiZCcsXG4gIDkwMDogJyMwMTU3OWInLFxuICBBMTAwOiAnIzgwZDhmZicsXG4gIEEyMDA6ICcjNDBjNGZmJyxcbiAgQTQwMDogJyMwMGIwZmYnLFxuICBBNzAwOiAnIzAwOTFlYSdcbn07XG5leHBvcnQgZGVmYXVsdCBsaWdodEJsdWU7IiwgImNvbnN0IGdyZWVuID0ge1xuICA1MDogJyNlOGY1ZTknLFxuICAxMDA6ICcjYzhlNmM5JyxcbiAgMjAwOiAnI2E1ZDZhNycsXG4gIDMwMDogJyM4MWM3ODQnLFxuICA0MDA6ICcjNjZiYjZhJyxcbiAgNTAwOiAnIzRjYWY1MCcsXG4gIDYwMDogJyM0M2EwNDcnLFxuICA3MDA6ICcjMzg4ZTNjJyxcbiAgODAwOiAnIzJlN2QzMicsXG4gIDkwMDogJyMxYjVlMjAnLFxuICBBMTAwOiAnI2I5ZjZjYScsXG4gIEEyMDA6ICcjNjlmMGFlJyxcbiAgQTQwMDogJyMwMGU2NzYnLFxuICBBNzAwOiAnIzAwYzg1Mydcbn07XG5leHBvcnQgZGVmYXVsdCBncmVlbjsiLCAiY29uc3Qgb3JhbmdlID0ge1xuICA1MDogJyNmZmYzZTAnLFxuICAxMDA6ICcjZmZlMGIyJyxcbiAgMjAwOiAnI2ZmY2M4MCcsXG4gIDMwMDogJyNmZmI3NGQnLFxuICA0MDA6ICcjZmZhNzI2JyxcbiAgNTAwOiAnI2ZmOTgwMCcsXG4gIDYwMDogJyNmYjhjMDAnLFxuICA3MDA6ICcjZjU3YzAwJyxcbiAgODAwOiAnI2VmNmMwMCcsXG4gIDkwMDogJyNlNjUxMDAnLFxuICBBMTAwOiAnI2ZmZDE4MCcsXG4gIEEyMDA6ICcjZmZhYjQwJyxcbiAgQTQwMDogJyNmZjkxMDAnLFxuICBBNzAwOiAnI2ZmNmQwMCdcbn07XG5leHBvcnQgZGVmYXVsdCBvcmFuZ2U7IiwgImNvbnN0IGdyZXkgPSB7XG4gIDUwOiAnI2ZhZmFmYScsXG4gIDEwMDogJyNmNWY1ZjUnLFxuICAyMDA6ICcjZWVlZWVlJyxcbiAgMzAwOiAnI2UwZTBlMCcsXG4gIDQwMDogJyNiZGJkYmQnLFxuICA1MDA6ICcjOWU5ZTllJyxcbiAgNjAwOiAnIzc1NzU3NScsXG4gIDcwMDogJyM2MTYxNjEnLFxuICA4MDA6ICcjNDI0MjQyJyxcbiAgOTAwOiAnIzIxMjEyMScsXG4gIEExMDA6ICcjZjVmNWY1JyxcbiAgQTIwMDogJyNlZWVlZWUnLFxuICBBNDAwOiAnI2JkYmRiZCcsXG4gIEE3MDA6ICcjNjE2MTYxJ1xufTtcbmV4cG9ydCBkZWZhdWx0IGdyZXk7IiwgImV4cG9ydCBkZWZhdWx0ICckJG1hdGVyaWFsJzsiLCAiaW1wb3J0IF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UgZnJvbSBcIkBtdWkvdXRpbHMvZm9ybWF0TXVpRXJyb3JNZXNzYWdlXCI7XG5leHBvcnQgeyBjc3MsIGtleWZyYW1lcywgU3R5bGVkRW5naW5lUHJvdmlkZXIgfSBmcm9tICdAbXVpL3N0eWxlZC1lbmdpbmUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBHbG9iYWxTdHlsZXMgfSBmcm9tICcuL0dsb2JhbFN0eWxlcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGJvcmRlcnMgfSBmcm9tICcuL2JvcmRlcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9ib3JkZXJzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgYnJlYWtwb2ludHMgfSBmcm9tICcuL2JyZWFrcG9pbnRzJztcbmV4cG9ydCB7IGhhbmRsZUJyZWFrcG9pbnRzLCBtZXJnZUJyZWFrcG9pbnRzSW5PcmRlciwgcmVzb2x2ZUJyZWFrcG9pbnRWYWx1ZXMgYXMgdW5zdGFibGVfcmVzb2x2ZUJyZWFrcG9pbnRWYWx1ZXMgfSBmcm9tICcuL2JyZWFrcG9pbnRzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgY29tcG9zZSB9IGZyb20gJy4vY29tcG9zZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGRpc3BsYXkgfSBmcm9tICcuL2Rpc3BsYXknO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBmbGV4Ym94IH0gZnJvbSAnLi9mbGV4Ym94JztcbmV4cG9ydCAqIGZyb20gJy4vZmxleGJveCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGdyaWQgfSBmcm9tICcuL2Nzc0dyaWQnO1xuZXhwb3J0ICogZnJvbSAnLi9jc3NHcmlkJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcGFsZXR0ZSB9IGZyb20gJy4vcGFsZXR0ZSc7XG5leHBvcnQgKiBmcm9tICcuL3BhbGV0dGUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBwb3NpdGlvbnMgfSBmcm9tICcuL3Bvc2l0aW9ucyc7XG5leHBvcnQgKiBmcm9tICcuL3Bvc2l0aW9ucyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHNoYWRvd3MgfSBmcm9tICcuL3NoYWRvd3MnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzaXppbmcgfSBmcm9tICcuL3NpemluZyc7XG5leHBvcnQgKiBmcm9tICcuL3NpemluZyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHNwYWNpbmcgfSBmcm9tICcuL3NwYWNpbmcnO1xuZXhwb3J0ICogZnJvbSAnLi9zcGFjaW5nJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc3R5bGUsIGdldFBhdGgsIGdldFN0eWxlVmFsdWUgfSBmcm9tICcuL3N0eWxlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdHlwb2dyYXBoeSB9IGZyb20gJy4vdHlwb2dyYXBoeSc7XG5leHBvcnQgKiBmcm9tICcuL3R5cG9ncmFwaHknO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB1bnN0YWJsZV9zdHlsZUZ1bmN0aW9uU3gsIHVuc3RhYmxlX2NyZWF0ZVN0eWxlRnVuY3Rpb25TeCwgZXh0ZW5kU3hQcm9wIGFzIHVuc3RhYmxlX2V4dGVuZFN4UHJvcCwgdW5zdGFibGVfZGVmYXVsdFN4Q29uZmlnIH0gZnJvbSAnLi9zdHlsZUZ1bmN0aW9uU3gnO1xuLy8gVE9ETzogUmVtb3ZlIHRoaXMgZnVuY3Rpb24gaW4gdjZcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbmV4cG9ydCBmdW5jdGlvbiBleHBlcmltZW50YWxfc3goKSB7XG4gIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBgTVVJOiBUaGUgXFxgZXhwZXJpbWVudGFsX3N4XFxgIGhhcyBiZWVuIG1vdmVkIHRvIFxcYHRoZW1lLnVuc3RhYmxlX3N4XFxgLkZvciBtb3JlIGRldGFpbHMsIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbXVpL21hdGVyaWFsLXVpL3B1bGwvMzUxNTAuYCA6IF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UoMjApKTtcbn1cbmV4cG9ydCB7IGRlZmF1bHQgYXMgdW5zdGFibGVfZ2V0VGhlbWVWYWx1ZSB9IGZyb20gJy4vZ2V0VGhlbWVWYWx1ZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEJveCB9IGZyb20gJy4vQm94JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgY3JlYXRlQm94IH0gZnJvbSAnLi9jcmVhdGVCb3gnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjcmVhdGVTdHlsZWQgfSBmcm9tICcuL2NyZWF0ZVN0eWxlZCc7XG5leHBvcnQgKiBmcm9tICcuL2NyZWF0ZVN0eWxlZCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHN0eWxlZCB9IGZyb20gJy4vc3R5bGVkJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgY3JlYXRlVGhlbWUgfSBmcm9tICcuL2NyZWF0ZVRoZW1lJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgY3JlYXRlQnJlYWtwb2ludHMgfSBmcm9tICcuL2NyZWF0ZVRoZW1lL2NyZWF0ZUJyZWFrcG9pbnRzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgY3JlYXRlU3BhY2luZyB9IGZyb20gJy4vY3JlYXRlVGhlbWUvY3JlYXRlU3BhY2luZyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHNoYXBlIH0gZnJvbSAnLi9jcmVhdGVUaGVtZS9zaGFwZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHVzZVRoZW1lUHJvcHMsIGdldFRoZW1lUHJvcHMgfSBmcm9tICcuL3VzZVRoZW1lUHJvcHMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB1c2VUaGVtZSB9IGZyb20gJy4vdXNlVGhlbWUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB1c2VUaGVtZVdpdGhvdXREZWZhdWx0IH0gZnJvbSAnLi91c2VUaGVtZVdpdGhvdXREZWZhdWx0JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdXNlTWVkaWFRdWVyeSB9IGZyb20gJy4vdXNlTWVkaWFRdWVyeSc7XG5leHBvcnQgKiBmcm9tICcuL2NvbG9yTWFuaXB1bGF0b3InO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUaGVtZVByb3ZpZGVyIH0gZnJvbSAnLi9UaGVtZVByb3ZpZGVyJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdW5zdGFibGVfY3JlYXRlQ3NzVmFyc1Byb3ZpZGVyIH0gZnJvbSAnLi9jc3NWYXJzL2NyZWF0ZUNzc1ZhcnNQcm92aWRlcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHVuc3RhYmxlX2NyZWF0ZUdldENzc1ZhciB9IGZyb20gJy4vY3NzVmFycy9jcmVhdGVHZXRDc3NWYXInO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB1bnN0YWJsZV9jc3NWYXJzUGFyc2VyIH0gZnJvbSAnLi9jc3NWYXJzL2Nzc1ZhcnNQYXJzZXInO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB1bnN0YWJsZV9wcmVwYXJlQ3NzVmFycyB9IGZyb20gJy4vY3NzVmFycy9wcmVwYXJlQ3NzVmFycyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHVuc3RhYmxlX2NyZWF0ZUNzc1ZhcnNUaGVtZSB9IGZyb20gJy4vY3NzVmFycy9jcmVhdGVDc3NWYXJzVGhlbWUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyByZXNwb25zaXZlUHJvcFR5cGUgfSBmcm9tICcuL3Jlc3BvbnNpdmVQcm9wVHlwZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFJ0bFByb3ZpZGVyIH0gZnJvbSAnLi9SdGxQcm92aWRlcic7XG5leHBvcnQgKiBmcm9tICcuL1J0bFByb3ZpZGVyJztcblxuLyoqIC0tLS0tLS0tLS0tLS0tLS0tICovXG4vKiogTGF5b3V0IGNvbXBvbmVudHMgKi9cbmV4cG9ydCB7IGRlZmF1bHQgYXMgY3JlYXRlQ29udGFpbmVyIH0gZnJvbSAnLi9Db250YWluZXIvY3JlYXRlQ29udGFpbmVyJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ29udGFpbmVyIH0gZnJvbSAnLi9Db250YWluZXInO1xuZXhwb3J0ICogZnJvbSAnLi9Db250YWluZXInO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBVbnN0YWJsZV9HcmlkIH0gZnJvbSAnLi9VbnN0YWJsZV9HcmlkL0dyaWQnO1xuZXhwb3J0ICogZnJvbSAnLi9VbnN0YWJsZV9HcmlkJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU3RhY2sgfSBmcm9tICcuL1N0YWNrL1N0YWNrJztcbmV4cG9ydCAqIGZyb20gJy4vU3RhY2snOyIsICJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiYnJlYWtwb2ludHNcIiwgXCJwYWxldHRlXCIsIFwic3BhY2luZ1wiLCBcInNoYXBlXCJdO1xuaW1wb3J0IGRlZXBtZXJnZSBmcm9tICdAbXVpL3V0aWxzL2RlZXBtZXJnZSc7XG5pbXBvcnQgY3JlYXRlQnJlYWtwb2ludHMgZnJvbSAnLi9jcmVhdGVCcmVha3BvaW50cyc7XG5pbXBvcnQgc2hhcGUgZnJvbSAnLi9zaGFwZSc7XG5pbXBvcnQgY3JlYXRlU3BhY2luZyBmcm9tICcuL2NyZWF0ZVNwYWNpbmcnO1xuaW1wb3J0IHN0eWxlRnVuY3Rpb25TeCBmcm9tICcuLi9zdHlsZUZ1bmN0aW9uU3gvc3R5bGVGdW5jdGlvblN4JztcbmltcG9ydCBkZWZhdWx0U3hDb25maWcgZnJvbSAnLi4vc3R5bGVGdW5jdGlvblN4L2RlZmF1bHRTeENvbmZpZyc7XG5pbXBvcnQgYXBwbHlTdHlsZXMgZnJvbSAnLi9hcHBseVN0eWxlcyc7XG5mdW5jdGlvbiBjcmVhdGVUaGVtZShvcHRpb25zID0ge30sIC4uLmFyZ3MpIHtcbiAgY29uc3Qge1xuICAgICAgYnJlYWtwb2ludHM6IGJyZWFrcG9pbnRzSW5wdXQgPSB7fSxcbiAgICAgIHBhbGV0dGU6IHBhbGV0dGVJbnB1dCA9IHt9LFxuICAgICAgc3BhY2luZzogc3BhY2luZ0lucHV0LFxuICAgICAgc2hhcGU6IHNoYXBlSW5wdXQgPSB7fVxuICAgIH0gPSBvcHRpb25zLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uob3B0aW9ucywgX2V4Y2x1ZGVkKTtcbiAgY29uc3QgYnJlYWtwb2ludHMgPSBjcmVhdGVCcmVha3BvaW50cyhicmVha3BvaW50c0lucHV0KTtcbiAgY29uc3Qgc3BhY2luZyA9IGNyZWF0ZVNwYWNpbmcoc3BhY2luZ0lucHV0KTtcbiAgbGV0IG11aVRoZW1lID0gZGVlcG1lcmdlKHtcbiAgICBicmVha3BvaW50cyxcbiAgICBkaXJlY3Rpb246ICdsdHInLFxuICAgIGNvbXBvbmVudHM6IHt9LFxuICAgIC8vIEluamVjdCBjb21wb25lbnQgZGVmaW5pdGlvbnMuXG4gICAgcGFsZXR0ZTogX2V4dGVuZHMoe1xuICAgICAgbW9kZTogJ2xpZ2h0J1xuICAgIH0sIHBhbGV0dGVJbnB1dCksXG4gICAgc3BhY2luZyxcbiAgICBzaGFwZTogX2V4dGVuZHMoe30sIHNoYXBlLCBzaGFwZUlucHV0KVxuICB9LCBvdGhlcik7XG4gIG11aVRoZW1lLmFwcGx5U3R5bGVzID0gYXBwbHlTdHlsZXM7XG4gIG11aVRoZW1lID0gYXJncy5yZWR1Y2UoKGFjYywgYXJndW1lbnQpID0+IGRlZXBtZXJnZShhY2MsIGFyZ3VtZW50KSwgbXVpVGhlbWUpO1xuICBtdWlUaGVtZS51bnN0YWJsZV9zeENvbmZpZyA9IF9leHRlbmRzKHt9LCBkZWZhdWx0U3hDb25maWcsIG90aGVyID09IG51bGwgPyB2b2lkIDAgOiBvdGhlci51bnN0YWJsZV9zeENvbmZpZyk7XG4gIG11aVRoZW1lLnVuc3RhYmxlX3N4ID0gZnVuY3Rpb24gc3gocHJvcHMpIHtcbiAgICByZXR1cm4gc3R5bGVGdW5jdGlvblN4KHtcbiAgICAgIHN4OiBwcm9wcyxcbiAgICAgIHRoZW1lOiB0aGlzXG4gICAgfSk7XG4gIH07XG4gIHJldHVybiBtdWlUaGVtZTtcbn1cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZVRoZW1lOyIsICJpbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1widmFsdWVzXCIsIFwidW5pdFwiLCBcInN0ZXBcIl07XG4vLyBTb3J0ZWQgQVNDIGJ5IHNpemUuIFRoYXQncyBpbXBvcnRhbnQuXG4vLyBJdCBjYW4ndCBiZSBjb25maWd1cmVkIGFzIGl0J3MgdXNlZCBzdGF0aWNhbGx5IGZvciBwcm9wVHlwZXMuXG5leHBvcnQgY29uc3QgYnJlYWtwb2ludEtleXMgPSBbJ3hzJywgJ3NtJywgJ21kJywgJ2xnJywgJ3hsJ107XG5jb25zdCBzb3J0QnJlYWtwb2ludHNWYWx1ZXMgPSB2YWx1ZXMgPT4ge1xuICBjb25zdCBicmVha3BvaW50c0FzQXJyYXkgPSBPYmplY3Qua2V5cyh2YWx1ZXMpLm1hcChrZXkgPT4gKHtcbiAgICBrZXksXG4gICAgdmFsOiB2YWx1ZXNba2V5XVxuICB9KSkgfHwgW107XG4gIC8vIFNvcnQgaW4gYXNjZW5kaW5nIG9yZGVyXG4gIGJyZWFrcG9pbnRzQXNBcnJheS5zb3J0KChicmVha3BvaW50MSwgYnJlYWtwb2ludDIpID0+IGJyZWFrcG9pbnQxLnZhbCAtIGJyZWFrcG9pbnQyLnZhbCk7XG4gIHJldHVybiBicmVha3BvaW50c0FzQXJyYXkucmVkdWNlKChhY2MsIG9iaikgPT4ge1xuICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgYWNjLCB7XG4gICAgICBbb2JqLmtleV06IG9iai52YWxcbiAgICB9KTtcbiAgfSwge30pO1xufTtcblxuLy8gS2VlcCBpbiBtaW5kIHRoYXQgQG1lZGlhIGlzIGluY2x1c2l2ZSBieSB0aGUgQ1NTIHNwZWNpZmljYXRpb24uXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVCcmVha3BvaW50cyhicmVha3BvaW50cykge1xuICBjb25zdCB7XG4gICAgICAvLyBUaGUgYnJlYWtwb2ludCAqKnN0YXJ0KiogYXQgdGhpcyB2YWx1ZS5cbiAgICAgIC8vIEZvciBpbnN0YW5jZSB3aXRoIHRoZSBmaXJzdCBicmVha3BvaW50IHhzOiBbeHMsIHNtKS5cbiAgICAgIHZhbHVlcyA9IHtcbiAgICAgICAgeHM6IDAsXG4gICAgICAgIC8vIHBob25lXG4gICAgICAgIHNtOiA2MDAsXG4gICAgICAgIC8vIHRhYmxldFxuICAgICAgICBtZDogOTAwLFxuICAgICAgICAvLyBzbWFsbCBsYXB0b3BcbiAgICAgICAgbGc6IDEyMDAsXG4gICAgICAgIC8vIGRlc2t0b3BcbiAgICAgICAgeGw6IDE1MzYgLy8gbGFyZ2Ugc2NyZWVuXG4gICAgICB9LFxuICAgICAgdW5pdCA9ICdweCcsXG4gICAgICBzdGVwID0gNVxuICAgIH0gPSBicmVha3BvaW50cyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGJyZWFrcG9pbnRzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBzb3J0ZWRWYWx1ZXMgPSBzb3J0QnJlYWtwb2ludHNWYWx1ZXModmFsdWVzKTtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHNvcnRlZFZhbHVlcyk7XG4gIGZ1bmN0aW9uIHVwKGtleSkge1xuICAgIGNvbnN0IHZhbHVlID0gdHlwZW9mIHZhbHVlc1trZXldID09PSAnbnVtYmVyJyA/IHZhbHVlc1trZXldIDoga2V5O1xuICAgIHJldHVybiBgQG1lZGlhIChtaW4td2lkdGg6JHt2YWx1ZX0ke3VuaXR9KWA7XG4gIH1cbiAgZnVuY3Rpb24gZG93bihrZXkpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHR5cGVvZiB2YWx1ZXNba2V5XSA9PT0gJ251bWJlcicgPyB2YWx1ZXNba2V5XSA6IGtleTtcbiAgICByZXR1cm4gYEBtZWRpYSAobWF4LXdpZHRoOiR7dmFsdWUgLSBzdGVwIC8gMTAwfSR7dW5pdH0pYDtcbiAgfVxuICBmdW5jdGlvbiBiZXR3ZWVuKHN0YXJ0LCBlbmQpIHtcbiAgICBjb25zdCBlbmRJbmRleCA9IGtleXMuaW5kZXhPZihlbmQpO1xuICAgIHJldHVybiBgQG1lZGlhIChtaW4td2lkdGg6JHt0eXBlb2YgdmFsdWVzW3N0YXJ0XSA9PT0gJ251bWJlcicgPyB2YWx1ZXNbc3RhcnRdIDogc3RhcnR9JHt1bml0fSkgYW5kIGAgKyBgKG1heC13aWR0aDokeyhlbmRJbmRleCAhPT0gLTEgJiYgdHlwZW9mIHZhbHVlc1trZXlzW2VuZEluZGV4XV0gPT09ICdudW1iZXInID8gdmFsdWVzW2tleXNbZW5kSW5kZXhdXSA6IGVuZCkgLSBzdGVwIC8gMTAwfSR7dW5pdH0pYDtcbiAgfVxuICBmdW5jdGlvbiBvbmx5KGtleSkge1xuICAgIGlmIChrZXlzLmluZGV4T2Yoa2V5KSArIDEgPCBrZXlzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGJldHdlZW4oa2V5LCBrZXlzW2tleXMuaW5kZXhPZihrZXkpICsgMV0pO1xuICAgIH1cbiAgICByZXR1cm4gdXAoa2V5KTtcbiAgfVxuICBmdW5jdGlvbiBub3Qoa2V5KSB7XG4gICAgLy8gaGFuZGxlIGZpcnN0IGFuZCBsYXN0IGtleSBzZXBhcmF0ZWx5LCBmb3IgYmV0dGVyIHJlYWRhYmlsaXR5XG4gICAgY29uc3Qga2V5SW5kZXggPSBrZXlzLmluZGV4T2Yoa2V5KTtcbiAgICBpZiAoa2V5SW5kZXggPT09IDApIHtcbiAgICAgIHJldHVybiB1cChrZXlzWzFdKTtcbiAgICB9XG4gICAgaWYgKGtleUluZGV4ID09PSBrZXlzLmxlbmd0aCAtIDEpIHtcbiAgICAgIHJldHVybiBkb3duKGtleXNba2V5SW5kZXhdKTtcbiAgICB9XG4gICAgcmV0dXJuIGJldHdlZW4oa2V5LCBrZXlzW2tleXMuaW5kZXhPZihrZXkpICsgMV0pLnJlcGxhY2UoJ0BtZWRpYScsICdAbWVkaWEgbm90IGFsbCBhbmQnKTtcbiAgfVxuICByZXR1cm4gX2V4dGVuZHMoe1xuICAgIGtleXMsXG4gICAgdmFsdWVzOiBzb3J0ZWRWYWx1ZXMsXG4gICAgdXAsXG4gICAgZG93bixcbiAgICBiZXR3ZWVuLFxuICAgIG9ubHksXG4gICAgbm90LFxuICAgIHVuaXRcbiAgfSwgb3RoZXIpO1xufSIsICJjb25zdCBzaGFwZSA9IHtcbiAgYm9yZGVyUmFkaXVzOiA0XG59O1xuZXhwb3J0IGRlZmF1bHQgc2hhcGU7IiwgImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBkZWVwbWVyZ2UgZnJvbSAnQG11aS91dGlscy9kZWVwbWVyZ2UnO1xuaW1wb3J0IG1lcmdlIGZyb20gJy4vbWVyZ2UnO1xuXG4vLyBUaGUgYnJlYWtwb2ludCAqKnN0YXJ0KiogYXQgdGhpcyB2YWx1ZS5cbi8vIEZvciBpbnN0YW5jZSB3aXRoIHRoZSBmaXJzdCBicmVha3BvaW50IHhzOiBbeHMsIHNtWy5cbmV4cG9ydCBjb25zdCB2YWx1ZXMgPSB7XG4gIHhzOiAwLFxuICAvLyBwaG9uZVxuICBzbTogNjAwLFxuICAvLyB0YWJsZXRcbiAgbWQ6IDkwMCxcbiAgLy8gc21hbGwgbGFwdG9wXG4gIGxnOiAxMjAwLFxuICAvLyBkZXNrdG9wXG4gIHhsOiAxNTM2IC8vIGxhcmdlIHNjcmVlblxufTtcbmNvbnN0IGRlZmF1bHRCcmVha3BvaW50cyA9IHtcbiAgLy8gU29ydGVkIEFTQyBieSBzaXplLiBUaGF0J3MgaW1wb3J0YW50LlxuICAvLyBJdCBjYW4ndCBiZSBjb25maWd1cmVkIGFzIGl0J3MgdXNlZCBzdGF0aWNhbGx5IGZvciBwcm9wVHlwZXMuXG4gIGtleXM6IFsneHMnLCAnc20nLCAnbWQnLCAnbGcnLCAneGwnXSxcbiAgdXA6IGtleSA9PiBgQG1lZGlhIChtaW4td2lkdGg6JHt2YWx1ZXNba2V5XX1weClgXG59O1xuZXhwb3J0IGZ1bmN0aW9uIGhhbmRsZUJyZWFrcG9pbnRzKHByb3BzLCBwcm9wVmFsdWUsIHN0eWxlRnJvbVByb3BWYWx1ZSkge1xuICBjb25zdCB0aGVtZSA9IHByb3BzLnRoZW1lIHx8IHt9O1xuICBpZiAoQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG4gICAgY29uc3QgdGhlbWVCcmVha3BvaW50cyA9IHRoZW1lLmJyZWFrcG9pbnRzIHx8IGRlZmF1bHRCcmVha3BvaW50cztcbiAgICByZXR1cm4gcHJvcFZhbHVlLnJlZHVjZSgoYWNjLCBpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgYWNjW3RoZW1lQnJlYWtwb2ludHMudXAodGhlbWVCcmVha3BvaW50cy5rZXlzW2luZGV4XSldID0gc3R5bGVGcm9tUHJvcFZhbHVlKHByb3BWYWx1ZVtpbmRleF0pO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG4gIH1cbiAgaWYgKHR5cGVvZiBwcm9wVmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgY29uc3QgdGhlbWVCcmVha3BvaW50cyA9IHRoZW1lLmJyZWFrcG9pbnRzIHx8IGRlZmF1bHRCcmVha3BvaW50cztcbiAgICByZXR1cm4gT2JqZWN0LmtleXMocHJvcFZhbHVlKS5yZWR1Y2UoKGFjYywgYnJlYWtwb2ludCkgPT4ge1xuICAgICAgLy8ga2V5IGlzIGJyZWFrcG9pbnRcbiAgICAgIGlmIChPYmplY3Qua2V5cyh0aGVtZUJyZWFrcG9pbnRzLnZhbHVlcyB8fCB2YWx1ZXMpLmluZGV4T2YoYnJlYWtwb2ludCkgIT09IC0xKSB7XG4gICAgICAgIGNvbnN0IG1lZGlhS2V5ID0gdGhlbWVCcmVha3BvaW50cy51cChicmVha3BvaW50KTtcbiAgICAgICAgYWNjW21lZGlhS2V5XSA9IHN0eWxlRnJvbVByb3BWYWx1ZShwcm9wVmFsdWVbYnJlYWtwb2ludF0sIGJyZWFrcG9pbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY3NzS2V5ID0gYnJlYWtwb2ludDtcbiAgICAgICAgYWNjW2Nzc0tleV0gPSBwcm9wVmFsdWVbY3NzS2V5XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30pO1xuICB9XG4gIGNvbnN0IG91dHB1dCA9IHN0eWxlRnJvbVByb3BWYWx1ZShwcm9wVmFsdWUpO1xuICByZXR1cm4gb3V0cHV0O1xufVxuZnVuY3Rpb24gYnJlYWtwb2ludHMoc3R5bGVGdW5jdGlvbikge1xuICAvLyBmYWxzZSBwb3NpdGl2ZVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvZnVuY3Rpb24tY29tcG9uZW50LWRlZmluaXRpb25cbiAgY29uc3QgbmV3U3R5bGVGdW5jdGlvbiA9IHByb3BzID0+IHtcbiAgICBjb25zdCB0aGVtZSA9IHByb3BzLnRoZW1lIHx8IHt9O1xuICAgIGNvbnN0IGJhc2UgPSBzdHlsZUZ1bmN0aW9uKHByb3BzKTtcbiAgICBjb25zdCB0aGVtZUJyZWFrcG9pbnRzID0gdGhlbWUuYnJlYWtwb2ludHMgfHwgZGVmYXVsdEJyZWFrcG9pbnRzO1xuICAgIGNvbnN0IGV4dGVuZGVkID0gdGhlbWVCcmVha3BvaW50cy5rZXlzLnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcbiAgICAgIGlmIChwcm9wc1trZXldKSB7XG4gICAgICAgIGFjYyA9IGFjYyB8fCB7fTtcbiAgICAgICAgYWNjW3RoZW1lQnJlYWtwb2ludHMudXAoa2V5KV0gPSBzdHlsZUZ1bmN0aW9uKF9leHRlbmRzKHtcbiAgICAgICAgICB0aGVtZVxuICAgICAgICB9LCBwcm9wc1trZXldKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIG51bGwpO1xuICAgIHJldHVybiBtZXJnZShiYXNlLCBleHRlbmRlZCk7XG4gIH07XG4gIG5ld1N0eWxlRnVuY3Rpb24ucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IF9leHRlbmRzKHt9LCBzdHlsZUZ1bmN0aW9uLnByb3BUeXBlcywge1xuICAgIHhzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIHNtOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIG1kOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIGxnOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIHhsOiBQcm9wVHlwZXMub2JqZWN0XG4gIH0pIDoge307XG4gIG5ld1N0eWxlRnVuY3Rpb24uZmlsdGVyUHJvcHMgPSBbJ3hzJywgJ3NtJywgJ21kJywgJ2xnJywgJ3hsJywgLi4uc3R5bGVGdW5jdGlvbi5maWx0ZXJQcm9wc107XG4gIHJldHVybiBuZXdTdHlsZUZ1bmN0aW9uO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUVtcHR5QnJlYWtwb2ludE9iamVjdChicmVha3BvaW50c0lucHV0ID0ge30pIHtcbiAgdmFyIF9icmVha3BvaW50c0lucHV0JGtleTtcbiAgY29uc3QgYnJlYWtwb2ludHNJbk9yZGVyID0gKF9icmVha3BvaW50c0lucHV0JGtleSA9IGJyZWFrcG9pbnRzSW5wdXQua2V5cykgPT0gbnVsbCA/IHZvaWQgMCA6IF9icmVha3BvaW50c0lucHV0JGtleS5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gICAgY29uc3QgYnJlYWtwb2ludFN0eWxlS2V5ID0gYnJlYWtwb2ludHNJbnB1dC51cChrZXkpO1xuICAgIGFjY1ticmVha3BvaW50U3R5bGVLZXldID0ge307XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xuICByZXR1cm4gYnJlYWtwb2ludHNJbk9yZGVyIHx8IHt9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZVVudXNlZEJyZWFrcG9pbnRzKGJyZWFrcG9pbnRLZXlzLCBzdHlsZSkge1xuICByZXR1cm4gYnJlYWtwb2ludEtleXMucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAgIGNvbnN0IGJyZWFrcG9pbnRPdXRwdXQgPSBhY2Nba2V5XTtcbiAgICBjb25zdCBpc0JyZWFrcG9pbnRVbnVzZWQgPSAhYnJlYWtwb2ludE91dHB1dCB8fCBPYmplY3Qua2V5cyhicmVha3BvaW50T3V0cHV0KS5sZW5ndGggPT09IDA7XG4gICAgaWYgKGlzQnJlYWtwb2ludFVudXNlZCkge1xuICAgICAgZGVsZXRlIGFjY1trZXldO1xuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9LCBzdHlsZSk7XG59XG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VCcmVha3BvaW50c0luT3JkZXIoYnJlYWtwb2ludHNJbnB1dCwgLi4uc3R5bGVzKSB7XG4gIGNvbnN0IGVtcHR5QnJlYWtwb2ludHMgPSBjcmVhdGVFbXB0eUJyZWFrcG9pbnRPYmplY3QoYnJlYWtwb2ludHNJbnB1dCk7XG4gIGNvbnN0IG1lcmdlZE91dHB1dCA9IFtlbXB0eUJyZWFrcG9pbnRzLCAuLi5zdHlsZXNdLnJlZHVjZSgocHJldiwgbmV4dCkgPT4gZGVlcG1lcmdlKHByZXYsIG5leHQpLCB7fSk7XG4gIHJldHVybiByZW1vdmVVbnVzZWRCcmVha3BvaW50cyhPYmplY3Qua2V5cyhlbXB0eUJyZWFrcG9pbnRzKSwgbWVyZ2VkT3V0cHV0KTtcbn1cblxuLy8gY29tcHV0ZSBiYXNlIGZvciByZXNwb25zaXZlIHZhbHVlczsgZS5nLixcbi8vIFsxLDIsM10gPT4ge3hzOiB0cnVlLCBzbTogdHJ1ZSwgbWQ6IHRydWV9XG4vLyB7eHM6IDEsIHNtOiAyLCBtZDogM30gPT4ge3hzOiB0cnVlLCBzbTogdHJ1ZSwgbWQ6IHRydWV9XG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZUJyZWFrcG9pbnRzQmFzZShicmVha3BvaW50VmFsdWVzLCB0aGVtZUJyZWFrcG9pbnRzKSB7XG4gIC8vIGZpeGVkIHZhbHVlXG4gIGlmICh0eXBlb2YgYnJlYWtwb2ludFZhbHVlcyAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4ge307XG4gIH1cbiAgY29uc3QgYmFzZSA9IHt9O1xuICBjb25zdCBicmVha3BvaW50c0tleXMgPSBPYmplY3Qua2V5cyh0aGVtZUJyZWFrcG9pbnRzKTtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYnJlYWtwb2ludFZhbHVlcykpIHtcbiAgICBicmVha3BvaW50c0tleXMuZm9yRWFjaCgoYnJlYWtwb2ludCwgaSkgPT4ge1xuICAgICAgaWYgKGkgPCBicmVha3BvaW50VmFsdWVzLmxlbmd0aCkge1xuICAgICAgICBiYXNlW2JyZWFrcG9pbnRdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBicmVha3BvaW50c0tleXMuZm9yRWFjaChicmVha3BvaW50ID0+IHtcbiAgICAgIGlmIChicmVha3BvaW50VmFsdWVzW2JyZWFrcG9pbnRdICE9IG51bGwpIHtcbiAgICAgICAgYmFzZVticmVha3BvaW50XSA9IHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGJhc2U7XG59XG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUJyZWFrcG9pbnRWYWx1ZXMoe1xuICB2YWx1ZXM6IGJyZWFrcG9pbnRWYWx1ZXMsXG4gIGJyZWFrcG9pbnRzOiB0aGVtZUJyZWFrcG9pbnRzLFxuICBiYXNlOiBjdXN0b21CYXNlXG59KSB7XG4gIGNvbnN0IGJhc2UgPSBjdXN0b21CYXNlIHx8IGNvbXB1dGVCcmVha3BvaW50c0Jhc2UoYnJlYWtwb2ludFZhbHVlcywgdGhlbWVCcmVha3BvaW50cyk7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhiYXNlKTtcbiAgaWYgKGtleXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGJyZWFrcG9pbnRWYWx1ZXM7XG4gIH1cbiAgbGV0IHByZXZpb3VzO1xuICByZXR1cm4ga2V5cy5yZWR1Y2UoKGFjYywgYnJlYWtwb2ludCwgaSkgPT4ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGJyZWFrcG9pbnRWYWx1ZXMpKSB7XG4gICAgICBhY2NbYnJlYWtwb2ludF0gPSBicmVha3BvaW50VmFsdWVzW2ldICE9IG51bGwgPyBicmVha3BvaW50VmFsdWVzW2ldIDogYnJlYWtwb2ludFZhbHVlc1twcmV2aW91c107XG4gICAgICBwcmV2aW91cyA9IGk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYnJlYWtwb2ludFZhbHVlcyA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGFjY1ticmVha3BvaW50XSA9IGJyZWFrcG9pbnRWYWx1ZXNbYnJlYWtwb2ludF0gIT0gbnVsbCA/IGJyZWFrcG9pbnRWYWx1ZXNbYnJlYWtwb2ludF0gOiBicmVha3BvaW50VmFsdWVzW3ByZXZpb3VzXTtcbiAgICAgIHByZXZpb3VzID0gYnJlYWtwb2ludDtcbiAgICB9IGVsc2Uge1xuICAgICAgYWNjW2JyZWFrcG9pbnRdID0gYnJlYWtwb2ludFZhbHVlcztcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xufVxuZXhwb3J0IGRlZmF1bHQgYnJlYWtwb2ludHM7IiwgImltcG9ydCBkZWVwbWVyZ2UgZnJvbSAnQG11aS91dGlscy9kZWVwbWVyZ2UnO1xuZnVuY3Rpb24gbWVyZ2UoYWNjLCBpdGVtKSB7XG4gIGlmICghaXRlbSkge1xuICAgIHJldHVybiBhY2M7XG4gIH1cbiAgcmV0dXJuIGRlZXBtZXJnZShhY2MsIGl0ZW0sIHtcbiAgICBjbG9uZTogZmFsc2UgLy8gTm8gbmVlZCB0byBjbG9uZSBkZWVwLCBpdCdzIHdheSBmYXN0ZXIuXG4gIH0pO1xufVxuZXhwb3J0IGRlZmF1bHQgbWVyZ2U7IiwgImltcG9ydCBjYXBpdGFsaXplIGZyb20gJ0BtdWkvdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgcmVzcG9uc2l2ZVByb3BUeXBlIGZyb20gJy4vcmVzcG9uc2l2ZVByb3BUeXBlJztcbmltcG9ydCB7IGhhbmRsZUJyZWFrcG9pbnRzIH0gZnJvbSAnLi9icmVha3BvaW50cyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0UGF0aChvYmosIHBhdGgsIGNoZWNrVmFycyA9IHRydWUpIHtcbiAgaWYgKCFwYXRoIHx8IHR5cGVvZiBwYXRoICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gQ2hlY2sgaWYgQ1NTIHZhcmlhYmxlcyBhcmUgdXNlZFxuICBpZiAob2JqICYmIG9iai52YXJzICYmIGNoZWNrVmFycykge1xuICAgIGNvbnN0IHZhbCA9IGB2YXJzLiR7cGF0aH1gLnNwbGl0KCcuJykucmVkdWNlKChhY2MsIGl0ZW0pID0+IGFjYyAmJiBhY2NbaXRlbV0gPyBhY2NbaXRlbV0gOiBudWxsLCBvYmopO1xuICAgIGlmICh2YWwgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHZhbDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHBhdGguc3BsaXQoJy4nKS5yZWR1Y2UoKGFjYywgaXRlbSkgPT4ge1xuICAgIGlmIChhY2MgJiYgYWNjW2l0ZW1dICE9IG51bGwpIHtcbiAgICAgIHJldHVybiBhY2NbaXRlbV07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9LCBvYmopO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFN0eWxlVmFsdWUodGhlbWVNYXBwaW5nLCB0cmFuc2Zvcm0sIHByb3BWYWx1ZUZpbmFsLCB1c2VyVmFsdWUgPSBwcm9wVmFsdWVGaW5hbCkge1xuICBsZXQgdmFsdWU7XG4gIGlmICh0eXBlb2YgdGhlbWVNYXBwaW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFsdWUgPSB0aGVtZU1hcHBpbmcocHJvcFZhbHVlRmluYWwpO1xuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodGhlbWVNYXBwaW5nKSkge1xuICAgIHZhbHVlID0gdGhlbWVNYXBwaW5nW3Byb3BWYWx1ZUZpbmFsXSB8fCB1c2VyVmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgdmFsdWUgPSBnZXRQYXRoKHRoZW1lTWFwcGluZywgcHJvcFZhbHVlRmluYWwpIHx8IHVzZXJWYWx1ZTtcbiAgfVxuICBpZiAodHJhbnNmb3JtKSB7XG4gICAgdmFsdWUgPSB0cmFuc2Zvcm0odmFsdWUsIHVzZXJWYWx1ZSwgdGhlbWVNYXBwaW5nKTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5mdW5jdGlvbiBzdHlsZShvcHRpb25zKSB7XG4gIGNvbnN0IHtcbiAgICBwcm9wLFxuICAgIGNzc1Byb3BlcnR5ID0gb3B0aW9ucy5wcm9wLFxuICAgIHRoZW1lS2V5LFxuICAgIHRyYW5zZm9ybVxuICB9ID0gb3B0aW9ucztcblxuICAvLyBmYWxzZSBwb3NpdGl2ZVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvZnVuY3Rpb24tY29tcG9uZW50LWRlZmluaXRpb25cbiAgY29uc3QgZm4gPSBwcm9wcyA9PiB7XG4gICAgaWYgKHByb3BzW3Byb3BdID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBwcm9wVmFsdWUgPSBwcm9wc1twcm9wXTtcbiAgICBjb25zdCB0aGVtZSA9IHByb3BzLnRoZW1lO1xuICAgIGNvbnN0IHRoZW1lTWFwcGluZyA9IGdldFBhdGgodGhlbWUsIHRoZW1lS2V5KSB8fCB7fTtcbiAgICBjb25zdCBzdHlsZUZyb21Qcm9wVmFsdWUgPSBwcm9wVmFsdWVGaW5hbCA9PiB7XG4gICAgICBsZXQgdmFsdWUgPSBnZXRTdHlsZVZhbHVlKHRoZW1lTWFwcGluZywgdHJhbnNmb3JtLCBwcm9wVmFsdWVGaW5hbCk7XG4gICAgICBpZiAocHJvcFZhbHVlRmluYWwgPT09IHZhbHVlICYmIHR5cGVvZiBwcm9wVmFsdWVGaW5hbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgLy8gSGF2ZW4ndCBmb3VuZCB2YWx1ZVxuICAgICAgICB2YWx1ZSA9IGdldFN0eWxlVmFsdWUodGhlbWVNYXBwaW5nLCB0cmFuc2Zvcm0sIGAke3Byb3B9JHtwcm9wVmFsdWVGaW5hbCA9PT0gJ2RlZmF1bHQnID8gJycgOiBjYXBpdGFsaXplKHByb3BWYWx1ZUZpbmFsKX1gLCBwcm9wVmFsdWVGaW5hbCk7XG4gICAgICB9XG4gICAgICBpZiAoY3NzUHJvcGVydHkgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIFtjc3NQcm9wZXJ0eV06IHZhbHVlXG4gICAgICB9O1xuICAgIH07XG4gICAgcmV0dXJuIGhhbmRsZUJyZWFrcG9pbnRzKHByb3BzLCBwcm9wVmFsdWUsIHN0eWxlRnJvbVByb3BWYWx1ZSk7XG4gIH07XG4gIGZuLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB7XG4gICAgW3Byb3BdOiByZXNwb25zaXZlUHJvcFR5cGVcbiAgfSA6IHt9O1xuICBmbi5maWx0ZXJQcm9wcyA9IFtwcm9wXTtcbiAgcmV0dXJuIGZuO1xufVxuZXhwb3J0IGRlZmF1bHQgc3R5bGU7IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1lbW9pemUoZm4pIHtcbiAgY29uc3QgY2FjaGUgPSB7fTtcbiAgcmV0dXJuIGFyZyA9PiB7XG4gICAgaWYgKGNhY2hlW2FyZ10gPT09IHVuZGVmaW5lZCkge1xuICAgICAgY2FjaGVbYXJnXSA9IGZuKGFyZyk7XG4gICAgfVxuICAgIHJldHVybiBjYWNoZVthcmddO1xuICB9O1xufSIsICJpbXBvcnQgcmVzcG9uc2l2ZVByb3BUeXBlIGZyb20gJy4vcmVzcG9uc2l2ZVByb3BUeXBlJztcbmltcG9ydCB7IGhhbmRsZUJyZWFrcG9pbnRzIH0gZnJvbSAnLi9icmVha3BvaW50cyc7XG5pbXBvcnQgeyBnZXRQYXRoIH0gZnJvbSAnLi9zdHlsZSc7XG5pbXBvcnQgbWVyZ2UgZnJvbSAnLi9tZXJnZSc7XG5pbXBvcnQgbWVtb2l6ZSBmcm9tICcuL21lbW9pemUnO1xuY29uc3QgcHJvcGVydGllcyA9IHtcbiAgbTogJ21hcmdpbicsXG4gIHA6ICdwYWRkaW5nJ1xufTtcbmNvbnN0IGRpcmVjdGlvbnMgPSB7XG4gIHQ6ICdUb3AnLFxuICByOiAnUmlnaHQnLFxuICBiOiAnQm90dG9tJyxcbiAgbDogJ0xlZnQnLFxuICB4OiBbJ0xlZnQnLCAnUmlnaHQnXSxcbiAgeTogWydUb3AnLCAnQm90dG9tJ11cbn07XG5jb25zdCBhbGlhc2VzID0ge1xuICBtYXJnaW5YOiAnbXgnLFxuICBtYXJnaW5ZOiAnbXknLFxuICBwYWRkaW5nWDogJ3B4JyxcbiAgcGFkZGluZ1k6ICdweSdcbn07XG5cbi8vIG1lbW9pemUoKSBpbXBhY3Q6XG4vLyBGcm9tIDMwMCwwMDAgb3BzL3NlY1xuLy8gVG8gMzUwLDAwMCBvcHMvc2VjXG5jb25zdCBnZXRDc3NQcm9wZXJ0aWVzID0gbWVtb2l6ZShwcm9wID0+IHtcbiAgLy8gSXQncyBub3QgYSBzaG9ydGhhbmQgbm90YXRpb24uXG4gIGlmIChwcm9wLmxlbmd0aCA+IDIpIHtcbiAgICBpZiAoYWxpYXNlc1twcm9wXSkge1xuICAgICAgcHJvcCA9IGFsaWFzZXNbcHJvcF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBbcHJvcF07XG4gICAgfVxuICB9XG4gIGNvbnN0IFthLCBiXSA9IHByb3Auc3BsaXQoJycpO1xuICBjb25zdCBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbYV07XG4gIGNvbnN0IGRpcmVjdGlvbiA9IGRpcmVjdGlvbnNbYl0gfHwgJyc7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KGRpcmVjdGlvbikgPyBkaXJlY3Rpb24ubWFwKGRpciA9PiBwcm9wZXJ0eSArIGRpcikgOiBbcHJvcGVydHkgKyBkaXJlY3Rpb25dO1xufSk7XG5leHBvcnQgY29uc3QgbWFyZ2luS2V5cyA9IFsnbScsICdtdCcsICdtcicsICdtYicsICdtbCcsICdteCcsICdteScsICdtYXJnaW4nLCAnbWFyZ2luVG9wJywgJ21hcmdpblJpZ2h0JywgJ21hcmdpbkJvdHRvbScsICdtYXJnaW5MZWZ0JywgJ21hcmdpblgnLCAnbWFyZ2luWScsICdtYXJnaW5JbmxpbmUnLCAnbWFyZ2luSW5saW5lU3RhcnQnLCAnbWFyZ2luSW5saW5lRW5kJywgJ21hcmdpbkJsb2NrJywgJ21hcmdpbkJsb2NrU3RhcnQnLCAnbWFyZ2luQmxvY2tFbmQnXTtcbmV4cG9ydCBjb25zdCBwYWRkaW5nS2V5cyA9IFsncCcsICdwdCcsICdwcicsICdwYicsICdwbCcsICdweCcsICdweScsICdwYWRkaW5nJywgJ3BhZGRpbmdUb3AnLCAncGFkZGluZ1JpZ2h0JywgJ3BhZGRpbmdCb3R0b20nLCAncGFkZGluZ0xlZnQnLCAncGFkZGluZ1gnLCAncGFkZGluZ1knLCAncGFkZGluZ0lubGluZScsICdwYWRkaW5nSW5saW5lU3RhcnQnLCAncGFkZGluZ0lubGluZUVuZCcsICdwYWRkaW5nQmxvY2snLCAncGFkZGluZ0Jsb2NrU3RhcnQnLCAncGFkZGluZ0Jsb2NrRW5kJ107XG5jb25zdCBzcGFjaW5nS2V5cyA9IFsuLi5tYXJnaW5LZXlzLCAuLi5wYWRkaW5nS2V5c107XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVW5hcnlVbml0KHRoZW1lLCB0aGVtZUtleSwgZGVmYXVsdFZhbHVlLCBwcm9wTmFtZSkge1xuICB2YXIgX2dldFBhdGg7XG4gIGNvbnN0IHRoZW1lU3BhY2luZyA9IChfZ2V0UGF0aCA9IGdldFBhdGgodGhlbWUsIHRoZW1lS2V5LCBmYWxzZSkpICE9IG51bGwgPyBfZ2V0UGF0aCA6IGRlZmF1bHRWYWx1ZTtcbiAgaWYgKHR5cGVvZiB0aGVtZVNwYWNpbmcgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIGFicyA9PiB7XG4gICAgICBpZiAodHlwZW9mIGFicyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIGFicztcbiAgICAgIH1cbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYWJzICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYE1VSTogRXhwZWN0ZWQgJHtwcm9wTmFtZX0gYXJndW1lbnQgdG8gYmUgYSBudW1iZXIgb3IgYSBzdHJpbmcsIGdvdCAke2Fic30uYCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGVtZVNwYWNpbmcgKiBhYnM7XG4gICAgfTtcbiAgfVxuICBpZiAoQXJyYXkuaXNBcnJheSh0aGVtZVNwYWNpbmcpKSB7XG4gICAgcmV0dXJuIGFicyA9PiB7XG4gICAgICBpZiAodHlwZW9mIGFicyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIGFicztcbiAgICAgIH1cbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihhYnMpKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihbYE1VSTogVGhlIFxcYHRoZW1lLiR7dGhlbWVLZXl9XFxgIGFycmF5IHR5cGUgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggbm9uIGludGVnZXIgdmFsdWVzLmAgKyBgWW91IHNob3VsZCBlaXRoZXIgdXNlIGFuIGludGVnZXIgdmFsdWUgdGhhdCBjYW4gYmUgdXNlZCBhcyBpbmRleCwgb3IgZGVmaW5lIHRoZSBcXGB0aGVtZS4ke3RoZW1lS2V5fVxcYCBhcyBhIG51bWJlci5gXS5qb2luKCdcXG4nKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoYWJzID4gdGhlbWVTcGFjaW5nLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFtgTVVJOiBUaGUgdmFsdWUgcHJvdmlkZWQgKCR7YWJzfSkgb3ZlcmZsb3dzLmAsIGBUaGUgc3VwcG9ydGVkIHZhbHVlcyBhcmU6ICR7SlNPTi5zdHJpbmdpZnkodGhlbWVTcGFjaW5nKX0uYCwgYCR7YWJzfSA+ICR7dGhlbWVTcGFjaW5nLmxlbmd0aCAtIDF9LCB5b3UgbmVlZCB0byBhZGQgdGhlIG1pc3NpbmcgdmFsdWVzLmBdLmpvaW4oJ1xcbicpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoZW1lU3BhY2luZ1thYnNdO1xuICAgIH07XG4gIH1cbiAgaWYgKHR5cGVvZiB0aGVtZVNwYWNpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdGhlbWVTcGFjaW5nO1xuICB9XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgY29uc29sZS5lcnJvcihbYE1VSTogVGhlIFxcYHRoZW1lLiR7dGhlbWVLZXl9XFxgIHZhbHVlICgke3RoZW1lU3BhY2luZ30pIGlzIGludmFsaWQuYCwgJ0l0IHNob3VsZCBiZSBhIG51bWJlciwgYW4gYXJyYXkgb3IgYSBmdW5jdGlvbi4nXS5qb2luKCdcXG4nKSk7XG4gIH1cbiAgcmV0dXJuICgpID0+IHVuZGVmaW5lZDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVVbmFyeVNwYWNpbmcodGhlbWUpIHtcbiAgcmV0dXJuIGNyZWF0ZVVuYXJ5VW5pdCh0aGVtZSwgJ3NwYWNpbmcnLCA4LCAnc3BhY2luZycpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFZhbHVlKHRyYW5zZm9ybWVyLCBwcm9wVmFsdWUpIHtcbiAgaWYgKHR5cGVvZiBwcm9wVmFsdWUgPT09ICdzdHJpbmcnIHx8IHByb3BWYWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHByb3BWYWx1ZTtcbiAgfVxuICBjb25zdCBhYnMgPSBNYXRoLmFicyhwcm9wVmFsdWUpO1xuICBjb25zdCB0cmFuc2Zvcm1lZCA9IHRyYW5zZm9ybWVyKGFicyk7XG4gIGlmIChwcm9wVmFsdWUgPj0gMCkge1xuICAgIHJldHVybiB0cmFuc2Zvcm1lZDtcbiAgfVxuICBpZiAodHlwZW9mIHRyYW5zZm9ybWVkID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiAtdHJhbnNmb3JtZWQ7XG4gIH1cbiAgcmV0dXJuIGAtJHt0cmFuc2Zvcm1lZH1gO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFN0eWxlRnJvbVByb3BWYWx1ZShjc3NQcm9wZXJ0aWVzLCB0cmFuc2Zvcm1lcikge1xuICByZXR1cm4gcHJvcFZhbHVlID0+IGNzc1Byb3BlcnRpZXMucmVkdWNlKChhY2MsIGNzc1Byb3BlcnR5KSA9PiB7XG4gICAgYWNjW2Nzc1Byb3BlcnR5XSA9IGdldFZhbHVlKHRyYW5zZm9ybWVyLCBwcm9wVmFsdWUpO1xuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbn1cbmZ1bmN0aW9uIHJlc29sdmVDc3NQcm9wZXJ0eShwcm9wcywga2V5cywgcHJvcCwgdHJhbnNmb3JtZXIpIHtcbiAgLy8gVXNpbmcgYSBoYXNoIGNvbXB1dGF0aW9uIG92ZXIgYW4gYXJyYXkgaXRlcmF0aW9uIGNvdWxkIGJlIGZhc3RlciwgYnV0IHdpdGggb25seSAyOCBpdGVtcyxcbiAgLy8gaXQncyBkb2Vzbid0IHdvcnRoIHRoZSBidW5kbGUgc2l6ZS5cbiAgaWYgKGtleXMuaW5kZXhPZihwcm9wKSA9PT0gLTEpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBjc3NQcm9wZXJ0aWVzID0gZ2V0Q3NzUHJvcGVydGllcyhwcm9wKTtcbiAgY29uc3Qgc3R5bGVGcm9tUHJvcFZhbHVlID0gZ2V0U3R5bGVGcm9tUHJvcFZhbHVlKGNzc1Byb3BlcnRpZXMsIHRyYW5zZm9ybWVyKTtcbiAgY29uc3QgcHJvcFZhbHVlID0gcHJvcHNbcHJvcF07XG4gIHJldHVybiBoYW5kbGVCcmVha3BvaW50cyhwcm9wcywgcHJvcFZhbHVlLCBzdHlsZUZyb21Qcm9wVmFsdWUpO1xufVxuZnVuY3Rpb24gc3R5bGUocHJvcHMsIGtleXMpIHtcbiAgY29uc3QgdHJhbnNmb3JtZXIgPSBjcmVhdGVVbmFyeVNwYWNpbmcocHJvcHMudGhlbWUpO1xuICByZXR1cm4gT2JqZWN0LmtleXMocHJvcHMpLm1hcChwcm9wID0+IHJlc29sdmVDc3NQcm9wZXJ0eShwcm9wcywga2V5cywgcHJvcCwgdHJhbnNmb3JtZXIpKS5yZWR1Y2UobWVyZ2UsIHt9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBtYXJnaW4ocHJvcHMpIHtcbiAgcmV0dXJuIHN0eWxlKHByb3BzLCBtYXJnaW5LZXlzKTtcbn1cbm1hcmdpbi5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gbWFyZ2luS2V5cy5yZWR1Y2UoKG9iaiwga2V5KSA9PiB7XG4gIG9ialtrZXldID0gcmVzcG9uc2l2ZVByb3BUeXBlO1xuICByZXR1cm4gb2JqO1xufSwge30pIDoge307XG5tYXJnaW4uZmlsdGVyUHJvcHMgPSBtYXJnaW5LZXlzO1xuZXhwb3J0IGZ1bmN0aW9uIHBhZGRpbmcocHJvcHMpIHtcbiAgcmV0dXJuIHN0eWxlKHByb3BzLCBwYWRkaW5nS2V5cyk7XG59XG5wYWRkaW5nLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBwYWRkaW5nS2V5cy5yZWR1Y2UoKG9iaiwga2V5KSA9PiB7XG4gIG9ialtrZXldID0gcmVzcG9uc2l2ZVByb3BUeXBlO1xuICByZXR1cm4gb2JqO1xufSwge30pIDoge307XG5wYWRkaW5nLmZpbHRlclByb3BzID0gcGFkZGluZ0tleXM7XG5mdW5jdGlvbiBzcGFjaW5nKHByb3BzKSB7XG4gIHJldHVybiBzdHlsZShwcm9wcywgc3BhY2luZ0tleXMpO1xufVxuc3BhY2luZy5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gc3BhY2luZ0tleXMucmVkdWNlKChvYmosIGtleSkgPT4ge1xuICBvYmpba2V5XSA9IHJlc3BvbnNpdmVQcm9wVHlwZTtcbiAgcmV0dXJuIG9iajtcbn0sIHt9KSA6IHt9O1xuc3BhY2luZy5maWx0ZXJQcm9wcyA9IHNwYWNpbmdLZXlzO1xuZXhwb3J0IGRlZmF1bHQgc3BhY2luZzsiLCAiaW1wb3J0IHsgY3JlYXRlVW5hcnlTcGFjaW5nIH0gZnJvbSAnLi4vc3BhY2luZyc7XG5cbi8vIFRoZSBkaWZmZXJlbnQgc2lnbmF0dXJlcyBpbXBseSBkaWZmZXJlbnQgbWVhbmluZyBmb3IgdGhlaXIgYXJndW1lbnRzIHRoYXQgY2FuJ3QgYmUgZXhwcmVzc2VkIHN0cnVjdHVyYWxseS5cbi8vIFdlIGV4cHJlc3MgdGhlIGRpZmZlcmVuY2Ugd2l0aCB2YXJpYWJsZSBuYW1lcy5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlU3BhY2luZyhzcGFjaW5nSW5wdXQgPSA4KSB7XG4gIC8vIEFscmVhZHkgdHJhbnNmb3JtZWQuXG4gIGlmIChzcGFjaW5nSW5wdXQubXVpKSB7XG4gICAgcmV0dXJuIHNwYWNpbmdJbnB1dDtcbiAgfVxuXG4gIC8vIE1hdGVyaWFsIERlc2lnbiBsYXlvdXRzIGFyZSB2aXN1YWxseSBiYWxhbmNlZC4gTW9zdCBtZWFzdXJlbWVudHMgYWxpZ24gdG8gYW4gOGRwIGdyaWQsIHdoaWNoIGFsaWducyBib3RoIHNwYWNpbmcgYW5kIHRoZSBvdmVyYWxsIGxheW91dC5cbiAgLy8gU21hbGxlciBjb21wb25lbnRzLCBzdWNoIGFzIGljb25zLCBjYW4gYWxpZ24gdG8gYSA0ZHAgZ3JpZC5cbiAgLy8gaHR0cHM6Ly9tMi5tYXRlcmlhbC5pby9kZXNpZ24vbGF5b3V0L3VuZGVyc3RhbmRpbmctbGF5b3V0Lmh0bWxcbiAgY29uc3QgdHJhbnNmb3JtID0gY3JlYXRlVW5hcnlTcGFjaW5nKHtcbiAgICBzcGFjaW5nOiBzcGFjaW5nSW5wdXRcbiAgfSk7XG4gIGNvbnN0IHNwYWNpbmcgPSAoLi4uYXJnc0lucHV0KSA9PiB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmICghKGFyZ3NJbnB1dC5sZW5ndGggPD0gNCkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgTVVJOiBUb28gbWFueSBhcmd1bWVudHMgcHJvdmlkZWQsIGV4cGVjdGVkIGJldHdlZW4gMCBhbmQgNCwgZ290ICR7YXJnc0lucHV0Lmxlbmd0aH1gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgYXJncyA9IGFyZ3NJbnB1dC5sZW5ndGggPT09IDAgPyBbMV0gOiBhcmdzSW5wdXQ7XG4gICAgcmV0dXJuIGFyZ3MubWFwKGFyZ3VtZW50ID0+IHtcbiAgICAgIGNvbnN0IG91dHB1dCA9IHRyYW5zZm9ybShhcmd1bWVudCk7XG4gICAgICByZXR1cm4gdHlwZW9mIG91dHB1dCA9PT0gJ251bWJlcicgPyBgJHtvdXRwdXR9cHhgIDogb3V0cHV0O1xuICAgIH0pLmpvaW4oJyAnKTtcbiAgfTtcbiAgc3BhY2luZy5tdWkgPSB0cnVlO1xuICByZXR1cm4gc3BhY2luZztcbn0iLCAiaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnQG11aS91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCBtZXJnZSBmcm9tICcuLi9tZXJnZSc7XG5pbXBvcnQgeyBnZXRQYXRoLCBnZXRTdHlsZVZhbHVlIGFzIGdldFZhbHVlIH0gZnJvbSAnLi4vc3R5bGUnO1xuaW1wb3J0IHsgaGFuZGxlQnJlYWtwb2ludHMsIGNyZWF0ZUVtcHR5QnJlYWtwb2ludE9iamVjdCwgcmVtb3ZlVW51c2VkQnJlYWtwb2ludHMgfSBmcm9tICcuLi9icmVha3BvaW50cyc7XG5pbXBvcnQgZGVmYXVsdFN4Q29uZmlnIGZyb20gJy4vZGVmYXVsdFN4Q29uZmlnJztcbmZ1bmN0aW9uIG9iamVjdHNIYXZlU2FtZUtleXMoLi4ub2JqZWN0cykge1xuICBjb25zdCBhbGxLZXlzID0gb2JqZWN0cy5yZWR1Y2UoKGtleXMsIG9iamVjdCkgPT4ga2V5cy5jb25jYXQoT2JqZWN0LmtleXMob2JqZWN0KSksIFtdKTtcbiAgY29uc3QgdW5pb24gPSBuZXcgU2V0KGFsbEtleXMpO1xuICByZXR1cm4gb2JqZWN0cy5ldmVyeShvYmplY3QgPT4gdW5pb24uc2l6ZSA9PT0gT2JqZWN0LmtleXMob2JqZWN0KS5sZW5ndGgpO1xufVxuZnVuY3Rpb24gY2FsbElmRm4obWF5YmVGbiwgYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgbWF5YmVGbiA9PT0gJ2Z1bmN0aW9uJyA/IG1heWJlRm4oYXJnKSA6IG1heWJlRm47XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbmV4cG9ydCBmdW5jdGlvbiB1bnN0YWJsZV9jcmVhdGVTdHlsZUZ1bmN0aW9uU3goKSB7XG4gIGZ1bmN0aW9uIGdldFRoZW1lVmFsdWUocHJvcCwgdmFsLCB0aGVtZSwgY29uZmlnKSB7XG4gICAgY29uc3QgcHJvcHMgPSB7XG4gICAgICBbcHJvcF06IHZhbCxcbiAgICAgIHRoZW1lXG4gICAgfTtcbiAgICBjb25zdCBvcHRpb25zID0gY29uZmlnW3Byb3BdO1xuICAgIGlmICghb3B0aW9ucykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW3Byb3BdOiB2YWxcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IHtcbiAgICAgIGNzc1Byb3BlcnR5ID0gcHJvcCxcbiAgICAgIHRoZW1lS2V5LFxuICAgICAgdHJhbnNmb3JtLFxuICAgICAgc3R5bGVcbiAgICB9ID0gb3B0aW9ucztcbiAgICBpZiAodmFsID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIFRPRE8gdjY6IHJlbW92ZSwgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tdWkvbWF0ZXJpYWwtdWkvcHVsbC8zODEyM1xuICAgIGlmICh0aGVtZUtleSA9PT0gJ3R5cG9ncmFwaHknICYmIHZhbCA9PT0gJ2luaGVyaXQnKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBbcHJvcF06IHZhbFxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgdGhlbWVNYXBwaW5nID0gZ2V0UGF0aCh0aGVtZSwgdGhlbWVLZXkpIHx8IHt9O1xuICAgIGlmIChzdHlsZSkge1xuICAgICAgcmV0dXJuIHN0eWxlKHByb3BzKTtcbiAgICB9XG4gICAgY29uc3Qgc3R5bGVGcm9tUHJvcFZhbHVlID0gcHJvcFZhbHVlRmluYWwgPT4ge1xuICAgICAgbGV0IHZhbHVlID0gZ2V0VmFsdWUodGhlbWVNYXBwaW5nLCB0cmFuc2Zvcm0sIHByb3BWYWx1ZUZpbmFsKTtcbiAgICAgIGlmIChwcm9wVmFsdWVGaW5hbCA9PT0gdmFsdWUgJiYgdHlwZW9mIHByb3BWYWx1ZUZpbmFsID09PSAnc3RyaW5nJykge1xuICAgICAgICAvLyBIYXZlbid0IGZvdW5kIHZhbHVlXG4gICAgICAgIHZhbHVlID0gZ2V0VmFsdWUodGhlbWVNYXBwaW5nLCB0cmFuc2Zvcm0sIGAke3Byb3B9JHtwcm9wVmFsdWVGaW5hbCA9PT0gJ2RlZmF1bHQnID8gJycgOiBjYXBpdGFsaXplKHByb3BWYWx1ZUZpbmFsKX1gLCBwcm9wVmFsdWVGaW5hbCk7XG4gICAgICB9XG4gICAgICBpZiAoY3NzUHJvcGVydHkgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIFtjc3NQcm9wZXJ0eV06IHZhbHVlXG4gICAgICB9O1xuICAgIH07XG4gICAgcmV0dXJuIGhhbmRsZUJyZWFrcG9pbnRzKHByb3BzLCB2YWwsIHN0eWxlRnJvbVByb3BWYWx1ZSk7XG4gIH1cbiAgZnVuY3Rpb24gc3R5bGVGdW5jdGlvblN4KHByb3BzKSB7XG4gICAgdmFyIF90aGVtZSR1bnN0YWJsZV9zeENvbjtcbiAgICBjb25zdCB7XG4gICAgICBzeCxcbiAgICAgIHRoZW1lID0ge31cbiAgICB9ID0gcHJvcHMgfHwge307XG4gICAgaWYgKCFzeCkge1xuICAgICAgcmV0dXJuIG51bGw7IC8vIEVtb3Rpb24gJiBzdHlsZWQtY29tcG9uZW50cyB3aWxsIG5lZ2xlY3QgbnVsbFxuICAgIH1cbiAgICBjb25zdCBjb25maWcgPSAoX3RoZW1lJHVuc3RhYmxlX3N4Q29uID0gdGhlbWUudW5zdGFibGVfc3hDb25maWcpICE9IG51bGwgPyBfdGhlbWUkdW5zdGFibGVfc3hDb24gOiBkZWZhdWx0U3hDb25maWc7XG5cbiAgICAvKlxuICAgICAqIFJlY2VpdmUgYHN4SW5wdXRgIGFzIG9iamVjdCBvciBjYWxsYmFja1xuICAgICAqIGFuZCB0aGVuIHJlY3Vyc2l2ZWx5IGNoZWNrIGtleXMgJiB2YWx1ZXMgdG8gY3JlYXRlIG1lZGlhIHF1ZXJ5IG9iamVjdCBzdHlsZXMuXG4gICAgICogKHRoZSByZXN1bHQgd2lsbCBiZSB1c2VkIGluIGBzdHlsZWRgKVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRyYXZlcnNlKHN4SW5wdXQpIHtcbiAgICAgIGxldCBzeE9iamVjdCA9IHN4SW5wdXQ7XG4gICAgICBpZiAodHlwZW9mIHN4SW5wdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgc3hPYmplY3QgPSBzeElucHV0KHRoZW1lKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHN4SW5wdXQgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIC8vIHZhbHVlXG4gICAgICAgIHJldHVybiBzeElucHV0O1xuICAgICAgfVxuICAgICAgaWYgKCFzeE9iamVjdCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGVtcHR5QnJlYWtwb2ludHMgPSBjcmVhdGVFbXB0eUJyZWFrcG9pbnRPYmplY3QodGhlbWUuYnJlYWtwb2ludHMpO1xuICAgICAgY29uc3QgYnJlYWtwb2ludHNLZXlzID0gT2JqZWN0LmtleXMoZW1wdHlCcmVha3BvaW50cyk7XG4gICAgICBsZXQgY3NzID0gZW1wdHlCcmVha3BvaW50cztcbiAgICAgIE9iamVjdC5rZXlzKHN4T2JqZWN0KS5mb3JFYWNoKHN0eWxlS2V5ID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBjYWxsSWZGbihzeE9iamVjdFtzdHlsZUtleV0sIHRoZW1lKTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgaWYgKGNvbmZpZ1tzdHlsZUtleV0pIHtcbiAgICAgICAgICAgICAgY3NzID0gbWVyZ2UoY3NzLCBnZXRUaGVtZVZhbHVlKHN0eWxlS2V5LCB2YWx1ZSwgdGhlbWUsIGNvbmZpZykpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29uc3QgYnJlYWtwb2ludHNWYWx1ZXMgPSBoYW5kbGVCcmVha3BvaW50cyh7XG4gICAgICAgICAgICAgICAgdGhlbWVcbiAgICAgICAgICAgICAgfSwgdmFsdWUsIHggPT4gKHtcbiAgICAgICAgICAgICAgICBbc3R5bGVLZXldOiB4XG4gICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgaWYgKG9iamVjdHNIYXZlU2FtZUtleXMoYnJlYWtwb2ludHNWYWx1ZXMsIHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGNzc1tzdHlsZUtleV0gPSBzdHlsZUZ1bmN0aW9uU3goe1xuICAgICAgICAgICAgICAgICAgc3g6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgdGhlbWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjc3MgPSBtZXJnZShjc3MsIGJyZWFrcG9pbnRzVmFsdWVzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjc3MgPSBtZXJnZShjc3MsIGdldFRoZW1lVmFsdWUoc3R5bGVLZXksIHZhbHVlLCB0aGVtZSwgY29uZmlnKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZW1vdmVVbnVzZWRCcmVha3BvaW50cyhicmVha3BvaW50c0tleXMsIGNzcyk7XG4gICAgfVxuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHN4KSA/IHN4Lm1hcCh0cmF2ZXJzZSkgOiB0cmF2ZXJzZShzeCk7XG4gIH1cbiAgcmV0dXJuIHN0eWxlRnVuY3Rpb25TeDtcbn1cbmNvbnN0IHN0eWxlRnVuY3Rpb25TeCA9IHVuc3RhYmxlX2NyZWF0ZVN0eWxlRnVuY3Rpb25TeCgpO1xuc3R5bGVGdW5jdGlvblN4LmZpbHRlclByb3BzID0gWydzeCddO1xuZXhwb3J0IGRlZmF1bHQgc3R5bGVGdW5jdGlvblN4OyIsICJpbXBvcnQgbWVyZ2UgZnJvbSAnLi9tZXJnZSc7XG5mdW5jdGlvbiBjb21wb3NlKC4uLnN0eWxlcykge1xuICBjb25zdCBoYW5kbGVycyA9IHN0eWxlcy5yZWR1Y2UoKGFjYywgc3R5bGUpID0+IHtcbiAgICBzdHlsZS5maWx0ZXJQcm9wcy5mb3JFYWNoKHByb3AgPT4ge1xuICAgICAgYWNjW3Byb3BdID0gc3R5bGU7XG4gICAgfSk7XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xuXG4gIC8vIGZhbHNlIHBvc2l0aXZlXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvblxuICBjb25zdCBmbiA9IHByb3BzID0+IHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMocHJvcHMpLnJlZHVjZSgoYWNjLCBwcm9wKSA9PiB7XG4gICAgICBpZiAoaGFuZGxlcnNbcHJvcF0pIHtcbiAgICAgICAgcmV0dXJuIG1lcmdlKGFjYywgaGFuZGxlcnNbcHJvcF0ocHJvcHMpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30pO1xuICB9O1xuICBmbi5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gc3R5bGVzLnJlZHVjZSgoYWNjLCBzdHlsZSkgPT4gT2JqZWN0LmFzc2lnbihhY2MsIHN0eWxlLnByb3BUeXBlcyksIHt9KSA6IHt9O1xuICBmbi5maWx0ZXJQcm9wcyA9IHN0eWxlcy5yZWR1Y2UoKGFjYywgc3R5bGUpID0+IGFjYy5jb25jYXQoc3R5bGUuZmlsdGVyUHJvcHMpLCBbXSk7XG4gIHJldHVybiBmbjtcbn1cbmV4cG9ydCBkZWZhdWx0IGNvbXBvc2U7IiwgImltcG9ydCByZXNwb25zaXZlUHJvcFR5cGUgZnJvbSAnLi9yZXNwb25zaXZlUHJvcFR5cGUnO1xuaW1wb3J0IHN0eWxlIGZyb20gJy4vc3R5bGUnO1xuaW1wb3J0IGNvbXBvc2UgZnJvbSAnLi9jb21wb3NlJztcbmltcG9ydCB7IGNyZWF0ZVVuYXJ5VW5pdCwgZ2V0VmFsdWUgfSBmcm9tICcuL3NwYWNpbmcnO1xuaW1wb3J0IHsgaGFuZGxlQnJlYWtwb2ludHMgfSBmcm9tICcuL2JyZWFrcG9pbnRzJztcbmV4cG9ydCBmdW5jdGlvbiBib3JkZXJUcmFuc2Zvcm0odmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIGAke3ZhbHVlfXB4IHNvbGlkYDtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUJvcmRlclN0eWxlKHByb3AsIHRyYW5zZm9ybSkge1xuICByZXR1cm4gc3R5bGUoe1xuICAgIHByb3AsXG4gICAgdGhlbWVLZXk6ICdib3JkZXJzJyxcbiAgICB0cmFuc2Zvcm1cbiAgfSk7XG59XG5leHBvcnQgY29uc3QgYm9yZGVyID0gY3JlYXRlQm9yZGVyU3R5bGUoJ2JvcmRlcicsIGJvcmRlclRyYW5zZm9ybSk7XG5leHBvcnQgY29uc3QgYm9yZGVyVG9wID0gY3JlYXRlQm9yZGVyU3R5bGUoJ2JvcmRlclRvcCcsIGJvcmRlclRyYW5zZm9ybSk7XG5leHBvcnQgY29uc3QgYm9yZGVyUmlnaHQgPSBjcmVhdGVCb3JkZXJTdHlsZSgnYm9yZGVyUmlnaHQnLCBib3JkZXJUcmFuc2Zvcm0pO1xuZXhwb3J0IGNvbnN0IGJvcmRlckJvdHRvbSA9IGNyZWF0ZUJvcmRlclN0eWxlKCdib3JkZXJCb3R0b20nLCBib3JkZXJUcmFuc2Zvcm0pO1xuZXhwb3J0IGNvbnN0IGJvcmRlckxlZnQgPSBjcmVhdGVCb3JkZXJTdHlsZSgnYm9yZGVyTGVmdCcsIGJvcmRlclRyYW5zZm9ybSk7XG5leHBvcnQgY29uc3QgYm9yZGVyQ29sb3IgPSBjcmVhdGVCb3JkZXJTdHlsZSgnYm9yZGVyQ29sb3InKTtcbmV4cG9ydCBjb25zdCBib3JkZXJUb3BDb2xvciA9IGNyZWF0ZUJvcmRlclN0eWxlKCdib3JkZXJUb3BDb2xvcicpO1xuZXhwb3J0IGNvbnN0IGJvcmRlclJpZ2h0Q29sb3IgPSBjcmVhdGVCb3JkZXJTdHlsZSgnYm9yZGVyUmlnaHRDb2xvcicpO1xuZXhwb3J0IGNvbnN0IGJvcmRlckJvdHRvbUNvbG9yID0gY3JlYXRlQm9yZGVyU3R5bGUoJ2JvcmRlckJvdHRvbUNvbG9yJyk7XG5leHBvcnQgY29uc3QgYm9yZGVyTGVmdENvbG9yID0gY3JlYXRlQm9yZGVyU3R5bGUoJ2JvcmRlckxlZnRDb2xvcicpO1xuZXhwb3J0IGNvbnN0IG91dGxpbmUgPSBjcmVhdGVCb3JkZXJTdHlsZSgnb3V0bGluZScsIGJvcmRlclRyYW5zZm9ybSk7XG5leHBvcnQgY29uc3Qgb3V0bGluZUNvbG9yID0gY3JlYXRlQm9yZGVyU3R5bGUoJ291dGxpbmVDb2xvcicpO1xuXG4vLyBmYWxzZSBwb3NpdGl2ZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L2Z1bmN0aW9uLWNvbXBvbmVudC1kZWZpbml0aW9uXG5leHBvcnQgY29uc3QgYm9yZGVyUmFkaXVzID0gcHJvcHMgPT4ge1xuICBpZiAocHJvcHMuYm9yZGVyUmFkaXVzICE9PSB1bmRlZmluZWQgJiYgcHJvcHMuYm9yZGVyUmFkaXVzICE9PSBudWxsKSB7XG4gICAgY29uc3QgdHJhbnNmb3JtZXIgPSBjcmVhdGVVbmFyeVVuaXQocHJvcHMudGhlbWUsICdzaGFwZS5ib3JkZXJSYWRpdXMnLCA0LCAnYm9yZGVyUmFkaXVzJyk7XG4gICAgY29uc3Qgc3R5bGVGcm9tUHJvcFZhbHVlID0gcHJvcFZhbHVlID0+ICh7XG4gICAgICBib3JkZXJSYWRpdXM6IGdldFZhbHVlKHRyYW5zZm9ybWVyLCBwcm9wVmFsdWUpXG4gICAgfSk7XG4gICAgcmV0dXJuIGhhbmRsZUJyZWFrcG9pbnRzKHByb3BzLCBwcm9wcy5ib3JkZXJSYWRpdXMsIHN0eWxlRnJvbVByb3BWYWx1ZSk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuYm9yZGVyUmFkaXVzLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB7XG4gIGJvcmRlclJhZGl1czogcmVzcG9uc2l2ZVByb3BUeXBlXG59IDoge307XG5ib3JkZXJSYWRpdXMuZmlsdGVyUHJvcHMgPSBbJ2JvcmRlclJhZGl1cyddO1xuY29uc3QgYm9yZGVycyA9IGNvbXBvc2UoYm9yZGVyLCBib3JkZXJUb3AsIGJvcmRlclJpZ2h0LCBib3JkZXJCb3R0b20sIGJvcmRlckxlZnQsIGJvcmRlckNvbG9yLCBib3JkZXJUb3BDb2xvciwgYm9yZGVyUmlnaHRDb2xvciwgYm9yZGVyQm90dG9tQ29sb3IsIGJvcmRlckxlZnRDb2xvciwgYm9yZGVyUmFkaXVzLCBvdXRsaW5lLCBvdXRsaW5lQ29sb3IpO1xuZXhwb3J0IGRlZmF1bHQgYm9yZGVyczsiLCAiaW1wb3J0IHN0eWxlIGZyb20gJy4vc3R5bGUnO1xuaW1wb3J0IGNvbXBvc2UgZnJvbSAnLi9jb21wb3NlJztcbmltcG9ydCB7IGNyZWF0ZVVuYXJ5VW5pdCwgZ2V0VmFsdWUgfSBmcm9tICcuL3NwYWNpbmcnO1xuaW1wb3J0IHsgaGFuZGxlQnJlYWtwb2ludHMgfSBmcm9tICcuL2JyZWFrcG9pbnRzJztcbmltcG9ydCByZXNwb25zaXZlUHJvcFR5cGUgZnJvbSAnLi9yZXNwb25zaXZlUHJvcFR5cGUnO1xuXG4vLyBmYWxzZSBwb3NpdGl2ZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L2Z1bmN0aW9uLWNvbXBvbmVudC1kZWZpbml0aW9uXG5leHBvcnQgY29uc3QgZ2FwID0gcHJvcHMgPT4ge1xuICBpZiAocHJvcHMuZ2FwICE9PSB1bmRlZmluZWQgJiYgcHJvcHMuZ2FwICE9PSBudWxsKSB7XG4gICAgY29uc3QgdHJhbnNmb3JtZXIgPSBjcmVhdGVVbmFyeVVuaXQocHJvcHMudGhlbWUsICdzcGFjaW5nJywgOCwgJ2dhcCcpO1xuICAgIGNvbnN0IHN0eWxlRnJvbVByb3BWYWx1ZSA9IHByb3BWYWx1ZSA9PiAoe1xuICAgICAgZ2FwOiBnZXRWYWx1ZSh0cmFuc2Zvcm1lciwgcHJvcFZhbHVlKVxuICAgIH0pO1xuICAgIHJldHVybiBoYW5kbGVCcmVha3BvaW50cyhwcm9wcywgcHJvcHMuZ2FwLCBzdHlsZUZyb21Qcm9wVmFsdWUpO1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcbmdhcC5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8ge1xuICBnYXA6IHJlc3BvbnNpdmVQcm9wVHlwZVxufSA6IHt9O1xuZ2FwLmZpbHRlclByb3BzID0gWydnYXAnXTtcblxuLy8gZmFsc2UgcG9zaXRpdmVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvblxuZXhwb3J0IGNvbnN0IGNvbHVtbkdhcCA9IHByb3BzID0+IHtcbiAgaWYgKHByb3BzLmNvbHVtbkdhcCAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmNvbHVtbkdhcCAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHRyYW5zZm9ybWVyID0gY3JlYXRlVW5hcnlVbml0KHByb3BzLnRoZW1lLCAnc3BhY2luZycsIDgsICdjb2x1bW5HYXAnKTtcbiAgICBjb25zdCBzdHlsZUZyb21Qcm9wVmFsdWUgPSBwcm9wVmFsdWUgPT4gKHtcbiAgICAgIGNvbHVtbkdhcDogZ2V0VmFsdWUodHJhbnNmb3JtZXIsIHByb3BWYWx1ZSlcbiAgICB9KTtcbiAgICByZXR1cm4gaGFuZGxlQnJlYWtwb2ludHMocHJvcHMsIHByb3BzLmNvbHVtbkdhcCwgc3R5bGVGcm9tUHJvcFZhbHVlKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5jb2x1bW5HYXAucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHtcbiAgY29sdW1uR2FwOiByZXNwb25zaXZlUHJvcFR5cGVcbn0gOiB7fTtcbmNvbHVtbkdhcC5maWx0ZXJQcm9wcyA9IFsnY29sdW1uR2FwJ107XG5cbi8vIGZhbHNlIHBvc2l0aXZlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvZnVuY3Rpb24tY29tcG9uZW50LWRlZmluaXRpb25cbmV4cG9ydCBjb25zdCByb3dHYXAgPSBwcm9wcyA9PiB7XG4gIGlmIChwcm9wcy5yb3dHYXAgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5yb3dHYXAgIT09IG51bGwpIHtcbiAgICBjb25zdCB0cmFuc2Zvcm1lciA9IGNyZWF0ZVVuYXJ5VW5pdChwcm9wcy50aGVtZSwgJ3NwYWNpbmcnLCA4LCAncm93R2FwJyk7XG4gICAgY29uc3Qgc3R5bGVGcm9tUHJvcFZhbHVlID0gcHJvcFZhbHVlID0+ICh7XG4gICAgICByb3dHYXA6IGdldFZhbHVlKHRyYW5zZm9ybWVyLCBwcm9wVmFsdWUpXG4gICAgfSk7XG4gICAgcmV0dXJuIGhhbmRsZUJyZWFrcG9pbnRzKHByb3BzLCBwcm9wcy5yb3dHYXAsIHN0eWxlRnJvbVByb3BWYWx1ZSk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xucm93R2FwLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB7XG4gIHJvd0dhcDogcmVzcG9uc2l2ZVByb3BUeXBlXG59IDoge307XG5yb3dHYXAuZmlsdGVyUHJvcHMgPSBbJ3Jvd0dhcCddO1xuZXhwb3J0IGNvbnN0IGdyaWRDb2x1bW4gPSBzdHlsZSh7XG4gIHByb3A6ICdncmlkQ29sdW1uJ1xufSk7XG5leHBvcnQgY29uc3QgZ3JpZFJvdyA9IHN0eWxlKHtcbiAgcHJvcDogJ2dyaWRSb3cnXG59KTtcbmV4cG9ydCBjb25zdCBncmlkQXV0b0Zsb3cgPSBzdHlsZSh7XG4gIHByb3A6ICdncmlkQXV0b0Zsb3cnXG59KTtcbmV4cG9ydCBjb25zdCBncmlkQXV0b0NvbHVtbnMgPSBzdHlsZSh7XG4gIHByb3A6ICdncmlkQXV0b0NvbHVtbnMnXG59KTtcbmV4cG9ydCBjb25zdCBncmlkQXV0b1Jvd3MgPSBzdHlsZSh7XG4gIHByb3A6ICdncmlkQXV0b1Jvd3MnXG59KTtcbmV4cG9ydCBjb25zdCBncmlkVGVtcGxhdGVDb2x1bW5zID0gc3R5bGUoe1xuICBwcm9wOiAnZ3JpZFRlbXBsYXRlQ29sdW1ucydcbn0pO1xuZXhwb3J0IGNvbnN0IGdyaWRUZW1wbGF0ZVJvd3MgPSBzdHlsZSh7XG4gIHByb3A6ICdncmlkVGVtcGxhdGVSb3dzJ1xufSk7XG5leHBvcnQgY29uc3QgZ3JpZFRlbXBsYXRlQXJlYXMgPSBzdHlsZSh7XG4gIHByb3A6ICdncmlkVGVtcGxhdGVBcmVhcydcbn0pO1xuZXhwb3J0IGNvbnN0IGdyaWRBcmVhID0gc3R5bGUoe1xuICBwcm9wOiAnZ3JpZEFyZWEnXG59KTtcbmNvbnN0IGdyaWQgPSBjb21wb3NlKGdhcCwgY29sdW1uR2FwLCByb3dHYXAsIGdyaWRDb2x1bW4sIGdyaWRSb3csIGdyaWRBdXRvRmxvdywgZ3JpZEF1dG9Db2x1bW5zLCBncmlkQXV0b1Jvd3MsIGdyaWRUZW1wbGF0ZUNvbHVtbnMsIGdyaWRUZW1wbGF0ZVJvd3MsIGdyaWRUZW1wbGF0ZUFyZWFzLCBncmlkQXJlYSk7XG5leHBvcnQgZGVmYXVsdCBncmlkOyIsICJpbXBvcnQgc3R5bGUgZnJvbSAnLi9zdHlsZSc7XG5pbXBvcnQgY29tcG9zZSBmcm9tICcuL2NvbXBvc2UnO1xuZXhwb3J0IGZ1bmN0aW9uIHBhbGV0dGVUcmFuc2Zvcm0odmFsdWUsIHVzZXJWYWx1ZSkge1xuICBpZiAodXNlclZhbHVlID09PSAnZ3JleScpIHtcbiAgICByZXR1cm4gdXNlclZhbHVlO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cbmV4cG9ydCBjb25zdCBjb2xvciA9IHN0eWxlKHtcbiAgcHJvcDogJ2NvbG9yJyxcbiAgdGhlbWVLZXk6ICdwYWxldHRlJyxcbiAgdHJhbnNmb3JtOiBwYWxldHRlVHJhbnNmb3JtXG59KTtcbmV4cG9ydCBjb25zdCBiZ2NvbG9yID0gc3R5bGUoe1xuICBwcm9wOiAnYmdjb2xvcicsXG4gIGNzc1Byb3BlcnR5OiAnYmFja2dyb3VuZENvbG9yJyxcbiAgdGhlbWVLZXk6ICdwYWxldHRlJyxcbiAgdHJhbnNmb3JtOiBwYWxldHRlVHJhbnNmb3JtXG59KTtcbmV4cG9ydCBjb25zdCBiYWNrZ3JvdW5kQ29sb3IgPSBzdHlsZSh7XG4gIHByb3A6ICdiYWNrZ3JvdW5kQ29sb3InLFxuICB0aGVtZUtleTogJ3BhbGV0dGUnLFxuICB0cmFuc2Zvcm06IHBhbGV0dGVUcmFuc2Zvcm1cbn0pO1xuY29uc3QgcGFsZXR0ZSA9IGNvbXBvc2UoY29sb3IsIGJnY29sb3IsIGJhY2tncm91bmRDb2xvcik7XG5leHBvcnQgZGVmYXVsdCBwYWxldHRlOyIsICJpbXBvcnQgc3R5bGUgZnJvbSAnLi9zdHlsZSc7XG5pbXBvcnQgY29tcG9zZSBmcm9tICcuL2NvbXBvc2UnO1xuaW1wb3J0IHsgaGFuZGxlQnJlYWtwb2ludHMsIHZhbHVlcyBhcyBicmVha3BvaW50c1ZhbHVlcyB9IGZyb20gJy4vYnJlYWtwb2ludHMnO1xuZXhwb3J0IGZ1bmN0aW9uIHNpemluZ1RyYW5zZm9ybSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPD0gMSAmJiB2YWx1ZSAhPT0gMCA/IGAke3ZhbHVlICogMTAwfSVgIDogdmFsdWU7XG59XG5leHBvcnQgY29uc3Qgd2lkdGggPSBzdHlsZSh7XG4gIHByb3A6ICd3aWR0aCcsXG4gIHRyYW5zZm9ybTogc2l6aW5nVHJhbnNmb3JtXG59KTtcbmV4cG9ydCBjb25zdCBtYXhXaWR0aCA9IHByb3BzID0+IHtcbiAgaWYgKHByb3BzLm1heFdpZHRoICE9PSB1bmRlZmluZWQgJiYgcHJvcHMubWF4V2lkdGggIT09IG51bGwpIHtcbiAgICBjb25zdCBzdHlsZUZyb21Qcm9wVmFsdWUgPSBwcm9wVmFsdWUgPT4ge1xuICAgICAgdmFyIF9wcm9wcyR0aGVtZSwgX3Byb3BzJHRoZW1lMjtcbiAgICAgIGNvbnN0IGJyZWFrcG9pbnQgPSAoKF9wcm9wcyR0aGVtZSA9IHByb3BzLnRoZW1lKSA9PSBudWxsIHx8IChfcHJvcHMkdGhlbWUgPSBfcHJvcHMkdGhlbWUuYnJlYWtwb2ludHMpID09IG51bGwgfHwgKF9wcm9wcyR0aGVtZSA9IF9wcm9wcyR0aGVtZS52YWx1ZXMpID09IG51bGwgPyB2b2lkIDAgOiBfcHJvcHMkdGhlbWVbcHJvcFZhbHVlXSkgfHwgYnJlYWtwb2ludHNWYWx1ZXNbcHJvcFZhbHVlXTtcbiAgICAgIGlmICghYnJlYWtwb2ludCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG1heFdpZHRoOiBzaXppbmdUcmFuc2Zvcm0ocHJvcFZhbHVlKVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKCgoX3Byb3BzJHRoZW1lMiA9IHByb3BzLnRoZW1lKSA9PSBudWxsIHx8IChfcHJvcHMkdGhlbWUyID0gX3Byb3BzJHRoZW1lMi5icmVha3BvaW50cykgPT0gbnVsbCA/IHZvaWQgMCA6IF9wcm9wcyR0aGVtZTIudW5pdCkgIT09ICdweCcpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBtYXhXaWR0aDogYCR7YnJlYWtwb2ludH0ke3Byb3BzLnRoZW1lLmJyZWFrcG9pbnRzLnVuaXR9YFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbWF4V2lkdGg6IGJyZWFrcG9pbnRcbiAgICAgIH07XG4gICAgfTtcbiAgICByZXR1cm4gaGFuZGxlQnJlYWtwb2ludHMocHJvcHMsIHByb3BzLm1heFdpZHRoLCBzdHlsZUZyb21Qcm9wVmFsdWUpO1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcbm1heFdpZHRoLmZpbHRlclByb3BzID0gWydtYXhXaWR0aCddO1xuZXhwb3J0IGNvbnN0IG1pbldpZHRoID0gc3R5bGUoe1xuICBwcm9wOiAnbWluV2lkdGgnLFxuICB0cmFuc2Zvcm06IHNpemluZ1RyYW5zZm9ybVxufSk7XG5leHBvcnQgY29uc3QgaGVpZ2h0ID0gc3R5bGUoe1xuICBwcm9wOiAnaGVpZ2h0JyxcbiAgdHJhbnNmb3JtOiBzaXppbmdUcmFuc2Zvcm1cbn0pO1xuZXhwb3J0IGNvbnN0IG1heEhlaWdodCA9IHN0eWxlKHtcbiAgcHJvcDogJ21heEhlaWdodCcsXG4gIHRyYW5zZm9ybTogc2l6aW5nVHJhbnNmb3JtXG59KTtcbmV4cG9ydCBjb25zdCBtaW5IZWlnaHQgPSBzdHlsZSh7XG4gIHByb3A6ICdtaW5IZWlnaHQnLFxuICB0cmFuc2Zvcm06IHNpemluZ1RyYW5zZm9ybVxufSk7XG5leHBvcnQgY29uc3Qgc2l6ZVdpZHRoID0gc3R5bGUoe1xuICBwcm9wOiAnc2l6ZScsXG4gIGNzc1Byb3BlcnR5OiAnd2lkdGgnLFxuICB0cmFuc2Zvcm06IHNpemluZ1RyYW5zZm9ybVxufSk7XG5leHBvcnQgY29uc3Qgc2l6ZUhlaWdodCA9IHN0eWxlKHtcbiAgcHJvcDogJ3NpemUnLFxuICBjc3NQcm9wZXJ0eTogJ2hlaWdodCcsXG4gIHRyYW5zZm9ybTogc2l6aW5nVHJhbnNmb3JtXG59KTtcbmV4cG9ydCBjb25zdCBib3hTaXppbmcgPSBzdHlsZSh7XG4gIHByb3A6ICdib3hTaXppbmcnXG59KTtcbmNvbnN0IHNpemluZyA9IGNvbXBvc2Uod2lkdGgsIG1heFdpZHRoLCBtaW5XaWR0aCwgaGVpZ2h0LCBtYXhIZWlnaHQsIG1pbkhlaWdodCwgYm94U2l6aW5nKTtcbmV4cG9ydCBkZWZhdWx0IHNpemluZzsiLCAiaW1wb3J0IHsgcGFkZGluZywgbWFyZ2luIH0gZnJvbSAnLi4vc3BhY2luZyc7XG5pbXBvcnQgeyBib3JkZXJSYWRpdXMsIGJvcmRlclRyYW5zZm9ybSB9IGZyb20gJy4uL2JvcmRlcnMnO1xuaW1wb3J0IHsgZ2FwLCByb3dHYXAsIGNvbHVtbkdhcCB9IGZyb20gJy4uL2Nzc0dyaWQnO1xuaW1wb3J0IHsgcGFsZXR0ZVRyYW5zZm9ybSB9IGZyb20gJy4uL3BhbGV0dGUnO1xuaW1wb3J0IHsgbWF4V2lkdGgsIHNpemluZ1RyYW5zZm9ybSB9IGZyb20gJy4uL3NpemluZyc7XG5jb25zdCBkZWZhdWx0U3hDb25maWcgPSB7XG4gIC8vIGJvcmRlcnNcbiAgYm9yZGVyOiB7XG4gICAgdGhlbWVLZXk6ICdib3JkZXJzJyxcbiAgICB0cmFuc2Zvcm06IGJvcmRlclRyYW5zZm9ybVxuICB9LFxuICBib3JkZXJUb3A6IHtcbiAgICB0aGVtZUtleTogJ2JvcmRlcnMnLFxuICAgIHRyYW5zZm9ybTogYm9yZGVyVHJhbnNmb3JtXG4gIH0sXG4gIGJvcmRlclJpZ2h0OiB7XG4gICAgdGhlbWVLZXk6ICdib3JkZXJzJyxcbiAgICB0cmFuc2Zvcm06IGJvcmRlclRyYW5zZm9ybVxuICB9LFxuICBib3JkZXJCb3R0b206IHtcbiAgICB0aGVtZUtleTogJ2JvcmRlcnMnLFxuICAgIHRyYW5zZm9ybTogYm9yZGVyVHJhbnNmb3JtXG4gIH0sXG4gIGJvcmRlckxlZnQ6IHtcbiAgICB0aGVtZUtleTogJ2JvcmRlcnMnLFxuICAgIHRyYW5zZm9ybTogYm9yZGVyVHJhbnNmb3JtXG4gIH0sXG4gIGJvcmRlckNvbG9yOiB7XG4gICAgdGhlbWVLZXk6ICdwYWxldHRlJ1xuICB9LFxuICBib3JkZXJUb3BDb2xvcjoge1xuICAgIHRoZW1lS2V5OiAncGFsZXR0ZSdcbiAgfSxcbiAgYm9yZGVyUmlnaHRDb2xvcjoge1xuICAgIHRoZW1lS2V5OiAncGFsZXR0ZSdcbiAgfSxcbiAgYm9yZGVyQm90dG9tQ29sb3I6IHtcbiAgICB0aGVtZUtleTogJ3BhbGV0dGUnXG4gIH0sXG4gIGJvcmRlckxlZnRDb2xvcjoge1xuICAgIHRoZW1lS2V5OiAncGFsZXR0ZSdcbiAgfSxcbiAgb3V0bGluZToge1xuICAgIHRoZW1lS2V5OiAnYm9yZGVycycsXG4gICAgdHJhbnNmb3JtOiBib3JkZXJUcmFuc2Zvcm1cbiAgfSxcbiAgb3V0bGluZUNvbG9yOiB7XG4gICAgdGhlbWVLZXk6ICdwYWxldHRlJ1xuICB9LFxuICBib3JkZXJSYWRpdXM6IHtcbiAgICB0aGVtZUtleTogJ3NoYXBlLmJvcmRlclJhZGl1cycsXG4gICAgc3R5bGU6IGJvcmRlclJhZGl1c1xuICB9LFxuICAvLyBwYWxldHRlXG4gIGNvbG9yOiB7XG4gICAgdGhlbWVLZXk6ICdwYWxldHRlJyxcbiAgICB0cmFuc2Zvcm06IHBhbGV0dGVUcmFuc2Zvcm1cbiAgfSxcbiAgYmdjb2xvcjoge1xuICAgIHRoZW1lS2V5OiAncGFsZXR0ZScsXG4gICAgY3NzUHJvcGVydHk6ICdiYWNrZ3JvdW5kQ29sb3InLFxuICAgIHRyYW5zZm9ybTogcGFsZXR0ZVRyYW5zZm9ybVxuICB9LFxuICBiYWNrZ3JvdW5kQ29sb3I6IHtcbiAgICB0aGVtZUtleTogJ3BhbGV0dGUnLFxuICAgIHRyYW5zZm9ybTogcGFsZXR0ZVRyYW5zZm9ybVxuICB9LFxuICAvLyBzcGFjaW5nXG4gIHA6IHtcbiAgICBzdHlsZTogcGFkZGluZ1xuICB9LFxuICBwdDoge1xuICAgIHN0eWxlOiBwYWRkaW5nXG4gIH0sXG4gIHByOiB7XG4gICAgc3R5bGU6IHBhZGRpbmdcbiAgfSxcbiAgcGI6IHtcbiAgICBzdHlsZTogcGFkZGluZ1xuICB9LFxuICBwbDoge1xuICAgIHN0eWxlOiBwYWRkaW5nXG4gIH0sXG4gIHB4OiB7XG4gICAgc3R5bGU6IHBhZGRpbmdcbiAgfSxcbiAgcHk6IHtcbiAgICBzdHlsZTogcGFkZGluZ1xuICB9LFxuICBwYWRkaW5nOiB7XG4gICAgc3R5bGU6IHBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZ1RvcDoge1xuICAgIHN0eWxlOiBwYWRkaW5nXG4gIH0sXG4gIHBhZGRpbmdSaWdodDoge1xuICAgIHN0eWxlOiBwYWRkaW5nXG4gIH0sXG4gIHBhZGRpbmdCb3R0b206IHtcbiAgICBzdHlsZTogcGFkZGluZ1xuICB9LFxuICBwYWRkaW5nTGVmdDoge1xuICAgIHN0eWxlOiBwYWRkaW5nXG4gIH0sXG4gIHBhZGRpbmdYOiB7XG4gICAgc3R5bGU6IHBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZ1k6IHtcbiAgICBzdHlsZTogcGFkZGluZ1xuICB9LFxuICBwYWRkaW5nSW5saW5lOiB7XG4gICAgc3R5bGU6IHBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZ0lubGluZVN0YXJ0OiB7XG4gICAgc3R5bGU6IHBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZ0lubGluZUVuZDoge1xuICAgIHN0eWxlOiBwYWRkaW5nXG4gIH0sXG4gIHBhZGRpbmdCbG9jazoge1xuICAgIHN0eWxlOiBwYWRkaW5nXG4gIH0sXG4gIHBhZGRpbmdCbG9ja1N0YXJ0OiB7XG4gICAgc3R5bGU6IHBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZ0Jsb2NrRW5kOiB7XG4gICAgc3R5bGU6IHBhZGRpbmdcbiAgfSxcbiAgbToge1xuICAgIHN0eWxlOiBtYXJnaW5cbiAgfSxcbiAgbXQ6IHtcbiAgICBzdHlsZTogbWFyZ2luXG4gIH0sXG4gIG1yOiB7XG4gICAgc3R5bGU6IG1hcmdpblxuICB9LFxuICBtYjoge1xuICAgIHN0eWxlOiBtYXJnaW5cbiAgfSxcbiAgbWw6IHtcbiAgICBzdHlsZTogbWFyZ2luXG4gIH0sXG4gIG14OiB7XG4gICAgc3R5bGU6IG1hcmdpblxuICB9LFxuICBteToge1xuICAgIHN0eWxlOiBtYXJnaW5cbiAgfSxcbiAgbWFyZ2luOiB7XG4gICAgc3R5bGU6IG1hcmdpblxuICB9LFxuICBtYXJnaW5Ub3A6IHtcbiAgICBzdHlsZTogbWFyZ2luXG4gIH0sXG4gIG1hcmdpblJpZ2h0OiB7XG4gICAgc3R5bGU6IG1hcmdpblxuICB9LFxuICBtYXJnaW5Cb3R0b206IHtcbiAgICBzdHlsZTogbWFyZ2luXG4gIH0sXG4gIG1hcmdpbkxlZnQ6IHtcbiAgICBzdHlsZTogbWFyZ2luXG4gIH0sXG4gIG1hcmdpblg6IHtcbiAgICBzdHlsZTogbWFyZ2luXG4gIH0sXG4gIG1hcmdpblk6IHtcbiAgICBzdHlsZTogbWFyZ2luXG4gIH0sXG4gIG1hcmdpbklubGluZToge1xuICAgIHN0eWxlOiBtYXJnaW5cbiAgfSxcbiAgbWFyZ2luSW5saW5lU3RhcnQ6IHtcbiAgICBzdHlsZTogbWFyZ2luXG4gIH0sXG4gIG1hcmdpbklubGluZUVuZDoge1xuICAgIHN0eWxlOiBtYXJnaW5cbiAgfSxcbiAgbWFyZ2luQmxvY2s6IHtcbiAgICBzdHlsZTogbWFyZ2luXG4gIH0sXG4gIG1hcmdpbkJsb2NrU3RhcnQ6IHtcbiAgICBzdHlsZTogbWFyZ2luXG4gIH0sXG4gIG1hcmdpbkJsb2NrRW5kOiB7XG4gICAgc3R5bGU6IG1hcmdpblxuICB9LFxuICAvLyBkaXNwbGF5XG4gIGRpc3BsYXlQcmludDoge1xuICAgIGNzc1Byb3BlcnR5OiBmYWxzZSxcbiAgICB0cmFuc2Zvcm06IHZhbHVlID0+ICh7XG4gICAgICAnQG1lZGlhIHByaW50Jzoge1xuICAgICAgICBkaXNwbGF5OiB2YWx1ZVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG4gIGRpc3BsYXk6IHt9LFxuICBvdmVyZmxvdzoge30sXG4gIHRleHRPdmVyZmxvdzoge30sXG4gIHZpc2liaWxpdHk6IHt9LFxuICB3aGl0ZVNwYWNlOiB7fSxcbiAgLy8gZmxleGJveFxuICBmbGV4QmFzaXM6IHt9LFxuICBmbGV4RGlyZWN0aW9uOiB7fSxcbiAgZmxleFdyYXA6IHt9LFxuICBqdXN0aWZ5Q29udGVudDoge30sXG4gIGFsaWduSXRlbXM6IHt9LFxuICBhbGlnbkNvbnRlbnQ6IHt9LFxuICBvcmRlcjoge30sXG4gIGZsZXg6IHt9LFxuICBmbGV4R3Jvdzoge30sXG4gIGZsZXhTaHJpbms6IHt9LFxuICBhbGlnblNlbGY6IHt9LFxuICBqdXN0aWZ5SXRlbXM6IHt9LFxuICBqdXN0aWZ5U2VsZjoge30sXG4gIC8vIGdyaWRcbiAgZ2FwOiB7XG4gICAgc3R5bGU6IGdhcFxuICB9LFxuICByb3dHYXA6IHtcbiAgICBzdHlsZTogcm93R2FwXG4gIH0sXG4gIGNvbHVtbkdhcDoge1xuICAgIHN0eWxlOiBjb2x1bW5HYXBcbiAgfSxcbiAgZ3JpZENvbHVtbjoge30sXG4gIGdyaWRSb3c6IHt9LFxuICBncmlkQXV0b0Zsb3c6IHt9LFxuICBncmlkQXV0b0NvbHVtbnM6IHt9LFxuICBncmlkQXV0b1Jvd3M6IHt9LFxuICBncmlkVGVtcGxhdGVDb2x1bW5zOiB7fSxcbiAgZ3JpZFRlbXBsYXRlUm93czoge30sXG4gIGdyaWRUZW1wbGF0ZUFyZWFzOiB7fSxcbiAgZ3JpZEFyZWE6IHt9LFxuICAvLyBwb3NpdGlvbnNcbiAgcG9zaXRpb246IHt9LFxuICB6SW5kZXg6IHtcbiAgICB0aGVtZUtleTogJ3pJbmRleCdcbiAgfSxcbiAgdG9wOiB7fSxcbiAgcmlnaHQ6IHt9LFxuICBib3R0b206IHt9LFxuICBsZWZ0OiB7fSxcbiAgLy8gc2hhZG93c1xuICBib3hTaGFkb3c6IHtcbiAgICB0aGVtZUtleTogJ3NoYWRvd3MnXG4gIH0sXG4gIC8vIHNpemluZ1xuICB3aWR0aDoge1xuICAgIHRyYW5zZm9ybTogc2l6aW5nVHJhbnNmb3JtXG4gIH0sXG4gIG1heFdpZHRoOiB7XG4gICAgc3R5bGU6IG1heFdpZHRoXG4gIH0sXG4gIG1pbldpZHRoOiB7XG4gICAgdHJhbnNmb3JtOiBzaXppbmdUcmFuc2Zvcm1cbiAgfSxcbiAgaGVpZ2h0OiB7XG4gICAgdHJhbnNmb3JtOiBzaXppbmdUcmFuc2Zvcm1cbiAgfSxcbiAgbWF4SGVpZ2h0OiB7XG4gICAgdHJhbnNmb3JtOiBzaXppbmdUcmFuc2Zvcm1cbiAgfSxcbiAgbWluSGVpZ2h0OiB7XG4gICAgdHJhbnNmb3JtOiBzaXppbmdUcmFuc2Zvcm1cbiAgfSxcbiAgYm94U2l6aW5nOiB7fSxcbiAgLy8gdHlwb2dyYXBoeVxuICBmb250RmFtaWx5OiB7XG4gICAgdGhlbWVLZXk6ICd0eXBvZ3JhcGh5J1xuICB9LFxuICBmb250U2l6ZToge1xuICAgIHRoZW1lS2V5OiAndHlwb2dyYXBoeSdcbiAgfSxcbiAgZm9udFN0eWxlOiB7XG4gICAgdGhlbWVLZXk6ICd0eXBvZ3JhcGh5J1xuICB9LFxuICBmb250V2VpZ2h0OiB7XG4gICAgdGhlbWVLZXk6ICd0eXBvZ3JhcGh5J1xuICB9LFxuICBsZXR0ZXJTcGFjaW5nOiB7fSxcbiAgdGV4dFRyYW5zZm9ybToge30sXG4gIGxpbmVIZWlnaHQ6IHt9LFxuICB0ZXh0QWxpZ246IHt9LFxuICB0eXBvZ3JhcGh5OiB7XG4gICAgY3NzUHJvcGVydHk6IGZhbHNlLFxuICAgIHRoZW1lS2V5OiAndHlwb2dyYXBoeSdcbiAgfVxufTtcbmV4cG9ydCBkZWZhdWx0IGRlZmF1bHRTeENvbmZpZzsiLCAiLyoqXG4gKiBBIHVuaXZlcnNhbCB1dGlsaXR5IHRvIHN0eWxlIGNvbXBvbmVudHMgd2l0aCBtdWx0aXBsZSBjb2xvciBtb2Rlcy4gQWx3YXlzIHVzZSBpdCBmcm9tIHRoZSB0aGVtZSBvYmplY3QuXG4gKiBJdCB3b3JrcyB3aXRoOlxuICogIC0gW0Jhc2ljIHRoZW1lXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvY3VzdG9taXphdGlvbi9kYXJrLW1vZGUvKVxuICogIC0gW0NTUyB0aGVtZSB2YXJpYWJsZXNdKGh0dHBzOi8vbXVpLmNvbS9tYXRlcmlhbC11aS9leHBlcmltZW50YWwtYXBpL2Nzcy10aGVtZS12YXJpYWJsZXMvb3ZlcnZpZXcvKVxuICogIC0gWmVyby1ydW50aW1lIGVuZ2luZVxuICpcbiAqIFRpcHM6IFVzZSBhbiBhcnJheSBvdmVyIG9iamVjdCBzcHJlYWQgYW5kIHBsYWNlIGB0aGVtZS5hcHBseVN0eWxlcygpYCBsYXN0LlxuICpcbiAqIFx1MjcwNSBbeyBiYWNrZ3JvdW5kOiAnI2U1ZTVlNScgfSwgdGhlbWUuYXBwbHlTdHlsZXMoJ2RhcmsnLCB7IGJhY2tncm91bmQ6ICcjMWMxYzFjJyB9KV1cbiAqXG4gKiBcdUQ4M0RcdURFQUIgeyBiYWNrZ3JvdW5kOiAnI2U1ZTVlNScsIC4uLnRoZW1lLmFwcGx5U3R5bGVzKCdkYXJrJywgeyBiYWNrZ3JvdW5kOiAnIzFjMWMxYycgfSl9XG4gKlxuICogQGV4YW1wbGVcbiAqIDEuIHVzaW5nIHdpdGggYHN0eWxlZGA6XG4gKiBgYGBqc3hcbiAqICAgY29uc3QgQ29tcG9uZW50ID0gc3R5bGVkKCdkaXYnKSgoeyB0aGVtZSB9KSA9PiBbXG4gKiAgICAgeyBiYWNrZ3JvdW5kOiAnI2U1ZTVlNScgfSxcbiAqICAgICB0aGVtZS5hcHBseVN0eWxlcygnZGFyaycsIHtcbiAqICAgICAgIGJhY2tncm91bmQ6ICcjMWMxYzFjJyxcbiAqICAgICAgIGNvbG9yOiAnI2ZmZicsXG4gKiAgICAgfSksXG4gKiAgIF0pO1xuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqIDIuIHVzaW5nIHdpdGggYHN4YCBwcm9wOlxuICogYGBganN4XG4gKiAgIDxCb3ggc3g9e3RoZW1lID0+IFtcbiAqICAgICB7IGJhY2tncm91bmQ6ICcjZTVlNWU1JyB9LFxuICogICAgIHRoZW1lLmFwcGx5U3R5bGVzKCdkYXJrJywge1xuICogICAgICAgIGJhY2tncm91bmQ6ICcjMWMxYzFjJyxcbiAqICAgICAgICBjb2xvcjogJyNmZmYnLFxuICogICAgICB9KSxcbiAqICAgICBdfVxuICogICAvPlxuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqIDMuIHRoZW1pbmcgYSBjb21wb25lbnQ6XG4gKiBgYGBqc3hcbiAqICAgZXh0ZW5kVGhlbWUoe1xuICogICAgIGNvbXBvbmVudHM6IHtcbiAqICAgICAgIE11aUJ1dHRvbjoge1xuICogICAgICAgICBzdHlsZU92ZXJyaWRlczoge1xuICogICAgICAgICAgIHJvb3Q6ICh7IHRoZW1lIH0pID0+IFtcbiAqICAgICAgICAgICAgIHsgYmFja2dyb3VuZDogJyNlNWU1ZTUnIH0sXG4gKiAgICAgICAgICAgICB0aGVtZS5hcHBseVN0eWxlcygnZGFyaycsIHtcbiAqICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJyMxYzFjMWMnLFxuICogICAgICAgICAgICAgICBjb2xvcjogJyNmZmYnLFxuICogICAgICAgICAgICAgfSksXG4gKiAgICAgICAgICAgXSxcbiAqICAgICAgICAgfSxcbiAqICAgICAgIH1cbiAqICAgICB9XG4gKiAgIH0pXG4gKmBgYFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhcHBseVN0eWxlcyhrZXksIHN0eWxlcykge1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIHRoaXMgaXMgJ2FueScgdHlwZVxuICBjb25zdCB0aGVtZSA9IHRoaXM7XG4gIGlmICh0aGVtZS52YXJzICYmIHR5cGVvZiB0aGVtZS5nZXRDb2xvclNjaGVtZVNlbGVjdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gSWYgQ3NzVmFyc1Byb3ZpZGVyIGlzIHVzZWQgYXMgYSBwcm92aWRlcixcbiAgICAvLyByZXR1cm5zICcqIDp3aGVyZShbZGF0YS1tdWktY29sb3Itc2NoZW1lPVwibGlnaHR8ZGFya1wiXSkgJidcbiAgICBjb25zdCBzZWxlY3RvciA9IHRoZW1lLmdldENvbG9yU2NoZW1lU2VsZWN0b3Ioa2V5KS5yZXBsYWNlKC8oXFxbW15cXF1dK1xcXSkvLCAnKjp3aGVyZSgkMSknKTtcbiAgICByZXR1cm4ge1xuICAgICAgW3NlbGVjdG9yXTogc3R5bGVzXG4gICAgfTtcbiAgfVxuICBpZiAodGhlbWUucGFsZXR0ZS5tb2RlID09PSBrZXkpIHtcbiAgICByZXR1cm4gc3R5bGVzO1xuICB9XG4gIHJldHVybiB7fTtcbn0iLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBUaGVtZUNvbnRleHQgfSBmcm9tICdAbXVpL3N0eWxlZC1lbmdpbmUnO1xuZnVuY3Rpb24gaXNPYmplY3RFbXB0eShvYmopIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaikubGVuZ3RoID09PSAwO1xufVxuZnVuY3Rpb24gdXNlVGhlbWUoZGVmYXVsdFRoZW1lID0gbnVsbCkge1xuICBjb25zdCBjb250ZXh0VGhlbWUgPSBSZWFjdC51c2VDb250ZXh0KFRoZW1lQ29udGV4dCk7XG4gIHJldHVybiAhY29udGV4dFRoZW1lIHx8IGlzT2JqZWN0RW1wdHkoY29udGV4dFRoZW1lKSA/IGRlZmF1bHRUaGVtZSA6IGNvbnRleHRUaGVtZTtcbn1cbmV4cG9ydCBkZWZhdWx0IHVzZVRoZW1lOyIsICIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBjcmVhdGVUaGVtZSBmcm9tICcuL2NyZWF0ZVRoZW1lJztcbmltcG9ydCB1c2VUaGVtZVdpdGhvdXREZWZhdWx0IGZyb20gJy4vdXNlVGhlbWVXaXRob3V0RGVmYXVsdCc7XG5leHBvcnQgY29uc3Qgc3lzdGVtRGVmYXVsdFRoZW1lID0gY3JlYXRlVGhlbWUoKTtcbmZ1bmN0aW9uIHVzZVRoZW1lKGRlZmF1bHRUaGVtZSA9IHN5c3RlbURlZmF1bHRUaGVtZSkge1xuICByZXR1cm4gdXNlVGhlbWVXaXRob3V0RGVmYXVsdChkZWZhdWx0VGhlbWUpO1xufVxuZXhwb3J0IGRlZmF1bHQgdXNlVGhlbWU7IiwgImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJzeFwiXTtcbmltcG9ydCB7IGlzUGxhaW5PYmplY3QgfSBmcm9tICdAbXVpL3V0aWxzL2RlZXBtZXJnZSc7XG5pbXBvcnQgZGVmYXVsdFN4Q29uZmlnIGZyb20gJy4vZGVmYXVsdFN4Q29uZmlnJztcbmNvbnN0IHNwbGl0UHJvcHMgPSBwcm9wcyA9PiB7XG4gIHZhciBfcHJvcHMkdGhlbWUkdW5zdGFibGUsIF9wcm9wcyR0aGVtZTtcbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIHN5c3RlbVByb3BzOiB7fSxcbiAgICBvdGhlclByb3BzOiB7fVxuICB9O1xuICBjb25zdCBjb25maWcgPSAoX3Byb3BzJHRoZW1lJHVuc3RhYmxlID0gcHJvcHMgPT0gbnVsbCB8fCAoX3Byb3BzJHRoZW1lID0gcHJvcHMudGhlbWUpID09IG51bGwgPyB2b2lkIDAgOiBfcHJvcHMkdGhlbWUudW5zdGFibGVfc3hDb25maWcpICE9IG51bGwgPyBfcHJvcHMkdGhlbWUkdW5zdGFibGUgOiBkZWZhdWx0U3hDb25maWc7XG4gIE9iamVjdC5rZXlzKHByb3BzKS5mb3JFYWNoKHByb3AgPT4ge1xuICAgIGlmIChjb25maWdbcHJvcF0pIHtcbiAgICAgIHJlc3VsdC5zeXN0ZW1Qcm9wc1twcm9wXSA9IHByb3BzW3Byb3BdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQub3RoZXJQcm9wc1twcm9wXSA9IHByb3BzW3Byb3BdO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZXh0ZW5kU3hQcm9wKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICAgIHN4OiBpblN4XG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IHtcbiAgICBzeXN0ZW1Qcm9wcyxcbiAgICBvdGhlclByb3BzXG4gIH0gPSBzcGxpdFByb3BzKG90aGVyKTtcbiAgbGV0IGZpbmFsU3g7XG4gIGlmIChBcnJheS5pc0FycmF5KGluU3gpKSB7XG4gICAgZmluYWxTeCA9IFtzeXN0ZW1Qcm9wcywgLi4uaW5TeF07XG4gIH0gZWxzZSBpZiAodHlwZW9mIGluU3ggPT09ICdmdW5jdGlvbicpIHtcbiAgICBmaW5hbFN4ID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGluU3goLi4uYXJncyk7XG4gICAgICBpZiAoIWlzUGxhaW5PYmplY3QocmVzdWx0KSkge1xuICAgICAgICByZXR1cm4gc3lzdGVtUHJvcHM7XG4gICAgICB9XG4gICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN5c3RlbVByb3BzLCByZXN1bHQpO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgZmluYWxTeCA9IF9leHRlbmRzKHt9LCBzeXN0ZW1Qcm9wcywgaW5TeCk7XG4gIH1cbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBvdGhlclByb3BzLCB7XG4gICAgc3g6IGZpbmFsU3hcbiAgfSk7XG59IiwgImNvbnN0IGRlZmF1bHRHZW5lcmF0b3IgPSBjb21wb25lbnROYW1lID0+IGNvbXBvbmVudE5hbWU7XG5jb25zdCBjcmVhdGVDbGFzc05hbWVHZW5lcmF0b3IgPSAoKSA9PiB7XG4gIGxldCBnZW5lcmF0ZSA9IGRlZmF1bHRHZW5lcmF0b3I7XG4gIHJldHVybiB7XG4gICAgY29uZmlndXJlKGdlbmVyYXRvcikge1xuICAgICAgZ2VuZXJhdGUgPSBnZW5lcmF0b3I7XG4gICAgfSxcbiAgICBnZW5lcmF0ZShjb21wb25lbnROYW1lKSB7XG4gICAgICByZXR1cm4gZ2VuZXJhdGUoY29tcG9uZW50TmFtZSk7XG4gICAgfSxcbiAgICByZXNldCgpIHtcbiAgICAgIGdlbmVyYXRlID0gZGVmYXVsdEdlbmVyYXRvcjtcbiAgICB9XG4gIH07XG59O1xuY29uc3QgQ2xhc3NOYW1lR2VuZXJhdG9yID0gY3JlYXRlQ2xhc3NOYW1lR2VuZXJhdG9yKCk7XG5leHBvcnQgZGVmYXVsdCBDbGFzc05hbWVHZW5lcmF0b3I7IiwgImZ1bmN0aW9uIHIoZSl7dmFyIHQsZixuPVwiXCI7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGV8fFwibnVtYmVyXCI9PXR5cGVvZiBlKW4rPWU7ZWxzZSBpZihcIm9iamVjdFwiPT10eXBlb2YgZSlpZihBcnJheS5pc0FycmF5KGUpKXt2YXIgbz1lLmxlbmd0aDtmb3IodD0wO3Q8bzt0KyspZVt0XSYmKGY9cihlW3RdKSkmJihuJiYobis9XCIgXCIpLG4rPWYpfWVsc2UgZm9yKGYgaW4gZSllW2ZdJiYobiYmKG4rPVwiIFwiKSxuKz1mKTtyZXR1cm4gbn1leHBvcnQgZnVuY3Rpb24gY2xzeCgpe2Zvcih2YXIgZSx0LGY9MCxuPVwiXCIsbz1hcmd1bWVudHMubGVuZ3RoO2Y8bztmKyspKGU9YXJndW1lbnRzW2ZdKSYmKHQ9cihlKSkmJihuJiYobis9XCIgXCIpLG4rPXQpO3JldHVybiBufWV4cG9ydCBkZWZhdWx0IGNsc3g7IiwgImltcG9ydCBDbGFzc05hbWVHZW5lcmF0b3IgZnJvbSAnLi4vQ2xhc3NOYW1lR2VuZXJhdG9yJztcbmV4cG9ydCBjb25zdCBnbG9iYWxTdGF0ZUNsYXNzZXMgPSB7XG4gIGFjdGl2ZTogJ2FjdGl2ZScsXG4gIGNoZWNrZWQ6ICdjaGVja2VkJyxcbiAgY29tcGxldGVkOiAnY29tcGxldGVkJyxcbiAgZGlzYWJsZWQ6ICdkaXNhYmxlZCcsXG4gIGVycm9yOiAnZXJyb3InLFxuICBleHBhbmRlZDogJ2V4cGFuZGVkJyxcbiAgZm9jdXNlZDogJ2ZvY3VzZWQnLFxuICBmb2N1c1Zpc2libGU6ICdmb2N1c1Zpc2libGUnLFxuICBvcGVuOiAnb3BlbicsXG4gIHJlYWRPbmx5OiAncmVhZE9ubHknLFxuICByZXF1aXJlZDogJ3JlcXVpcmVkJyxcbiAgc2VsZWN0ZWQ6ICdzZWxlY3RlZCdcbn07XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZW5lcmF0ZVV0aWxpdHlDbGFzcyhjb21wb25lbnROYW1lLCBzbG90LCBnbG9iYWxTdGF0ZVByZWZpeCA9ICdNdWknKSB7XG4gIGNvbnN0IGdsb2JhbFN0YXRlQ2xhc3MgPSBnbG9iYWxTdGF0ZUNsYXNzZXNbc2xvdF07XG4gIHJldHVybiBnbG9iYWxTdGF0ZUNsYXNzID8gYCR7Z2xvYmFsU3RhdGVQcmVmaXh9LSR7Z2xvYmFsU3RhdGVDbGFzc31gIDogYCR7Q2xhc3NOYW1lR2VuZXJhdG9yLmdlbmVyYXRlKGNvbXBvbmVudE5hbWUpfS0ke3Nsb3R9YDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0dsb2JhbFN0YXRlKHNsb3QpIHtcbiAgcmV0dXJuIGdsb2JhbFN0YXRlQ2xhc3Nlc1tzbG90XSAhPT0gdW5kZWZpbmVkO1xufSIsICJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnLi4vZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyhjb21wb25lbnROYW1lLCBzbG90cywgZ2xvYmFsU3RhdGVQcmVmaXggPSAnTXVpJykge1xuICBjb25zdCByZXN1bHQgPSB7fTtcbiAgc2xvdHMuZm9yRWFjaChzbG90ID0+IHtcbiAgICByZXN1bHRbc2xvdF0gPSBnZW5lcmF0ZVV0aWxpdHlDbGFzcyhjb21wb25lbnROYW1lLCBzbG90LCBnbG9iYWxTdGF0ZVByZWZpeCk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufSIsICJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wib3duZXJTdGF0ZVwiXSxcbiAgX2V4Y2x1ZGVkMiA9IFtcInZhcmlhbnRzXCJdLFxuICBfZXhjbHVkZWQzID0gW1wibmFtZVwiLCBcInNsb3RcIiwgXCJza2lwVmFyaWFudHNSZXNvbHZlclwiLCBcInNraXBTeFwiLCBcIm92ZXJyaWRlc1Jlc29sdmVyXCJdO1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZXJzY29yZS1kYW5nbGUgKi9cbmltcG9ydCBzdHlsZWRFbmdpbmVTdHlsZWQsIHsgaW50ZXJuYWxfcHJvY2Vzc1N0eWxlcyBhcyBwcm9jZXNzU3R5bGVzIH0gZnJvbSAnQG11aS9zdHlsZWQtZW5naW5lJztcbmltcG9ydCB7IGlzUGxhaW5PYmplY3QgfSBmcm9tICdAbXVpL3V0aWxzL2RlZXBtZXJnZSc7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICdAbXVpL3V0aWxzL2NhcGl0YWxpemUnO1xuaW1wb3J0IGdldERpc3BsYXlOYW1lIGZyb20gJ0BtdWkvdXRpbHMvZ2V0RGlzcGxheU5hbWUnO1xuaW1wb3J0IGNyZWF0ZVRoZW1lIGZyb20gJy4vY3JlYXRlVGhlbWUnO1xuaW1wb3J0IHN0eWxlRnVuY3Rpb25TeCBmcm9tICcuL3N0eWxlRnVuY3Rpb25TeCc7XG5mdW5jdGlvbiBpc0VtcHR5KG9iaikge1xuICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5sZW5ndGggPT09IDA7XG59XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9lbW90aW9uLWpzL2Vtb3Rpb24vYmxvYi8yNmRlZDYxMDlmY2Q4Y2E5ODc1Y2MyY2U0NTY0ZmVlNjc4YTNmM2M1L3BhY2thZ2VzL3N0eWxlZC9zcmMvdXRpbHMuanMjTDQwXG5mdW5jdGlvbiBpc1N0cmluZ1RhZyh0YWcpIHtcbiAgcmV0dXJuIHR5cGVvZiB0YWcgPT09ICdzdHJpbmcnICYmXG4gIC8vIDk2IGlzIG9uZSBsZXNzIHRoYW4gdGhlIGNoYXIgY29kZVxuICAvLyBmb3IgXCJhXCIgc28gdGhpcyBpcyBjaGVja2luZyB0aGF0XG4gIC8vIGl0J3MgYSBsb3dlcmNhc2UgY2hhcmFjdGVyXG4gIHRhZy5jaGFyQ29kZUF0KDApID4gOTY7XG59XG5cbi8vIFVwZGF0ZSAvc3lzdGVtL3N0eWxlZC8jYXBpIGluIGNhc2UgaWYgdGhpcyBjaGFuZ2VzXG5leHBvcnQgZnVuY3Rpb24gc2hvdWxkRm9yd2FyZFByb3AocHJvcCkge1xuICByZXR1cm4gcHJvcCAhPT0gJ293bmVyU3RhdGUnICYmIHByb3AgIT09ICd0aGVtZScgJiYgcHJvcCAhPT0gJ3N4JyAmJiBwcm9wICE9PSAnYXMnO1xufVxuZXhwb3J0IGNvbnN0IHN5c3RlbURlZmF1bHRUaGVtZSA9IGNyZWF0ZVRoZW1lKCk7XG5jb25zdCBsb3dlcmNhc2VGaXJzdExldHRlciA9IHN0cmluZyA9PiB7XG4gIGlmICghc3RyaW5nKSB7XG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuICByZXR1cm4gc3RyaW5nLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpICsgc3RyaW5nLnNsaWNlKDEpO1xufTtcbmZ1bmN0aW9uIHJlc29sdmVUaGVtZSh7XG4gIGRlZmF1bHRUaGVtZSxcbiAgdGhlbWUsXG4gIHRoZW1lSWRcbn0pIHtcbiAgcmV0dXJuIGlzRW1wdHkodGhlbWUpID8gZGVmYXVsdFRoZW1lIDogdGhlbWVbdGhlbWVJZF0gfHwgdGhlbWU7XG59XG5mdW5jdGlvbiBkZWZhdWx0T3ZlcnJpZGVzUmVzb2x2ZXIoc2xvdCkge1xuICBpZiAoIXNsb3QpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlc1tzbG90XTtcbn1cbmZ1bmN0aW9uIHByb2Nlc3NTdHlsZUFyZyhjYWxsYWJsZVN0eWxlLCBfcmVmKSB7XG4gIGxldCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IF9yZWYsXG4gICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShfcmVmLCBfZXhjbHVkZWQpO1xuICBjb25zdCByZXNvbHZlZFN0eWxlc0FyZyA9IHR5cGVvZiBjYWxsYWJsZVN0eWxlID09PSAnZnVuY3Rpb24nID8gY2FsbGFibGVTdHlsZShfZXh0ZW5kcyh7XG4gICAgb3duZXJTdGF0ZVxuICB9LCBwcm9wcykpIDogY2FsbGFibGVTdHlsZTtcbiAgaWYgKEFycmF5LmlzQXJyYXkocmVzb2x2ZWRTdHlsZXNBcmcpKSB7XG4gICAgcmV0dXJuIHJlc29sdmVkU3R5bGVzQXJnLmZsYXRNYXAocmVzb2x2ZWRTdHlsZSA9PiBwcm9jZXNzU3R5bGVBcmcocmVzb2x2ZWRTdHlsZSwgX2V4dGVuZHMoe1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0sIHByb3BzKSkpO1xuICB9XG4gIGlmICghIXJlc29sdmVkU3R5bGVzQXJnICYmIHR5cGVvZiByZXNvbHZlZFN0eWxlc0FyZyA9PT0gJ29iamVjdCcgJiYgQXJyYXkuaXNBcnJheShyZXNvbHZlZFN0eWxlc0FyZy52YXJpYW50cykpIHtcbiAgICBjb25zdCB7XG4gICAgICAgIHZhcmlhbnRzID0gW11cbiAgICAgIH0gPSByZXNvbHZlZFN0eWxlc0FyZyxcbiAgICAgIG90aGVyU3R5bGVzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocmVzb2x2ZWRTdHlsZXNBcmcsIF9leGNsdWRlZDIpO1xuICAgIGxldCByZXN1bHQgPSBvdGhlclN0eWxlcztcbiAgICB2YXJpYW50cy5mb3JFYWNoKHZhcmlhbnQgPT4ge1xuICAgICAgbGV0IGlzTWF0Y2ggPSB0cnVlO1xuICAgICAgaWYgKHR5cGVvZiB2YXJpYW50LnByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGlzTWF0Y2ggPSB2YXJpYW50LnByb3BzKF9leHRlbmRzKHtcbiAgICAgICAgICBvd25lclN0YXRlXG4gICAgICAgIH0sIHByb3BzLCBvd25lclN0YXRlKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBPYmplY3Qua2V5cyh2YXJpYW50LnByb3BzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgaWYgKChvd25lclN0YXRlID09IG51bGwgPyB2b2lkIDAgOiBvd25lclN0YXRlW2tleV0pICE9PSB2YXJpYW50LnByb3BzW2tleV0gJiYgcHJvcHNba2V5XSAhPT0gdmFyaWFudC5wcm9wc1trZXldKSB7XG4gICAgICAgICAgICBpc01hdGNoID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChpc01hdGNoKSB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShyZXN1bHQpKSB7XG4gICAgICAgICAgcmVzdWx0ID0gW3Jlc3VsdF07XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnB1c2godHlwZW9mIHZhcmlhbnQuc3R5bGUgPT09ICdmdW5jdGlvbicgPyB2YXJpYW50LnN0eWxlKF9leHRlbmRzKHtcbiAgICAgICAgICBvd25lclN0YXRlXG4gICAgICAgIH0sIHByb3BzLCBvd25lclN0YXRlKSkgOiB2YXJpYW50LnN0eWxlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHJldHVybiByZXNvbHZlZFN0eWxlc0FyZztcbn1cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVN0eWxlZChpbnB1dCA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICB0aGVtZUlkLFxuICAgIGRlZmF1bHRUaGVtZSA9IHN5c3RlbURlZmF1bHRUaGVtZSxcbiAgICByb290U2hvdWxkRm9yd2FyZFByb3AgPSBzaG91bGRGb3J3YXJkUHJvcCxcbiAgICBzbG90U2hvdWxkRm9yd2FyZFByb3AgPSBzaG91bGRGb3J3YXJkUHJvcFxuICB9ID0gaW5wdXQ7XG4gIGNvbnN0IHN5c3RlbVN4ID0gcHJvcHMgPT4ge1xuICAgIHJldHVybiBzdHlsZUZ1bmN0aW9uU3goX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgICB0aGVtZTogcmVzb2x2ZVRoZW1lKF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgICAgICBkZWZhdWx0VGhlbWUsXG4gICAgICAgIHRoZW1lSWRcbiAgICAgIH0pKVxuICAgIH0pKTtcbiAgfTtcbiAgc3lzdGVtU3guX19tdWlfc3lzdGVtU3ggPSB0cnVlO1xuICByZXR1cm4gKHRhZywgaW5wdXRPcHRpb25zID0ge30pID0+IHtcbiAgICAvLyBGaWx0ZXIgb3V0IHRoZSBgc3hgIHN0eWxlIGZ1bmN0aW9uIGZyb20gdGhlIHByZXZpb3VzIHN0eWxlZCBjb21wb25lbnQgdG8gcHJldmVudCB1bm5lY2Vzc2FyeSBzdHlsZXMgZ2VuZXJhdGVkIGJ5IHRoZSBjb21wb3NpdGUgY29tcG9uZW50cy5cbiAgICBwcm9jZXNzU3R5bGVzKHRhZywgc3R5bGVzID0+IHN0eWxlcy5maWx0ZXIoc3R5bGUgPT4gIShzdHlsZSAhPSBudWxsICYmIHN0eWxlLl9fbXVpX3N5c3RlbVN4KSkpO1xuICAgIGNvbnN0IHtcbiAgICAgICAgbmFtZTogY29tcG9uZW50TmFtZSxcbiAgICAgICAgc2xvdDogY29tcG9uZW50U2xvdCxcbiAgICAgICAgc2tpcFZhcmlhbnRzUmVzb2x2ZXI6IGlucHV0U2tpcFZhcmlhbnRzUmVzb2x2ZXIsXG4gICAgICAgIHNraXBTeDogaW5wdXRTa2lwU3gsXG4gICAgICAgIC8vIFRPRE8gdjY6IHJlbW92ZSBgbG93ZXJjYXNlRmlyc3RMZXR0ZXIoKWAgaW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZVxuICAgICAgICAvLyBGb3IgbW9yZSBkZXRhaWxzOiBodHRwczovL2dpdGh1Yi5jb20vbXVpL21hdGVyaWFsLXVpL3B1bGwvMzc5MDhcbiAgICAgICAgb3ZlcnJpZGVzUmVzb2x2ZXIgPSBkZWZhdWx0T3ZlcnJpZGVzUmVzb2x2ZXIobG93ZXJjYXNlRmlyc3RMZXR0ZXIoY29tcG9uZW50U2xvdCkpXG4gICAgICB9ID0gaW5wdXRPcHRpb25zLFxuICAgICAgb3B0aW9ucyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGlucHV0T3B0aW9ucywgX2V4Y2x1ZGVkMyk7XG5cbiAgICAvLyBpZiBza2lwVmFyaWFudHNSZXNvbHZlciBvcHRpb24gaXMgZGVmaW5lZCwgdGFrZSB0aGUgdmFsdWUsIG90aGVyd2lzZSwgdHJ1ZSBmb3Igcm9vdCBhbmQgZmFsc2UgZm9yIG90aGVyIHNsb3RzLlxuICAgIGNvbnN0IHNraXBWYXJpYW50c1Jlc29sdmVyID0gaW5wdXRTa2lwVmFyaWFudHNSZXNvbHZlciAhPT0gdW5kZWZpbmVkID8gaW5wdXRTa2lwVmFyaWFudHNSZXNvbHZlciA6XG4gICAgLy8gVE9ETyB2NjogcmVtb3ZlIGBSb290YCBpbiB0aGUgbmV4dCBtYWpvciByZWxlYXNlXG4gICAgLy8gRm9yIG1vcmUgZGV0YWlsczogaHR0cHM6Ly9naXRodWIuY29tL211aS9tYXRlcmlhbC11aS9wdWxsLzM3OTA4XG4gICAgY29tcG9uZW50U2xvdCAmJiBjb21wb25lbnRTbG90ICE9PSAnUm9vdCcgJiYgY29tcG9uZW50U2xvdCAhPT0gJ3Jvb3QnIHx8IGZhbHNlO1xuICAgIGNvbnN0IHNraXBTeCA9IGlucHV0U2tpcFN4IHx8IGZhbHNlO1xuICAgIGxldCBsYWJlbDtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKGNvbXBvbmVudE5hbWUpIHtcbiAgICAgICAgLy8gVE9ETyB2NjogcmVtb3ZlIGBsb3dlcmNhc2VGaXJzdExldHRlcigpYCBpbiB0aGUgbmV4dCBtYWpvciByZWxlYXNlXG4gICAgICAgIC8vIEZvciBtb3JlIGRldGFpbHM6IGh0dHBzOi8vZ2l0aHViLmNvbS9tdWkvbWF0ZXJpYWwtdWkvcHVsbC8zNzkwOFxuICAgICAgICBsYWJlbCA9IGAke2NvbXBvbmVudE5hbWV9LSR7bG93ZXJjYXNlRmlyc3RMZXR0ZXIoY29tcG9uZW50U2xvdCB8fCAnUm9vdCcpfWA7XG4gICAgICB9XG4gICAgfVxuICAgIGxldCBzaG91bGRGb3J3YXJkUHJvcE9wdGlvbiA9IHNob3VsZEZvcndhcmRQcm9wO1xuXG4gICAgLy8gVE9ETyB2NjogcmVtb3ZlIGBSb290YCBpbiB0aGUgbmV4dCBtYWpvciByZWxlYXNlXG4gICAgLy8gRm9yIG1vcmUgZGV0YWlsczogaHR0cHM6Ly9naXRodWIuY29tL211aS9tYXRlcmlhbC11aS9wdWxsLzM3OTA4XG4gICAgaWYgKGNvbXBvbmVudFNsb3QgPT09ICdSb290JyB8fCBjb21wb25lbnRTbG90ID09PSAncm9vdCcpIHtcbiAgICAgIHNob3VsZEZvcndhcmRQcm9wT3B0aW9uID0gcm9vdFNob3VsZEZvcndhcmRQcm9wO1xuICAgIH0gZWxzZSBpZiAoY29tcG9uZW50U2xvdCkge1xuICAgICAgLy8gYW55IG90aGVyIHNsb3Qgc3BlY2lmaWVkXG4gICAgICBzaG91bGRGb3J3YXJkUHJvcE9wdGlvbiA9IHNsb3RTaG91bGRGb3J3YXJkUHJvcDtcbiAgICB9IGVsc2UgaWYgKGlzU3RyaW5nVGFnKHRhZykpIHtcbiAgICAgIC8vIGZvciBzdHJpbmcgKGh0bWwpIHRhZywgcHJlc2VydmUgdGhlIGJlaGF2aW9yIGluIGVtb3Rpb24gJiBzdHlsZWQtY29tcG9uZW50cy5cbiAgICAgIHNob3VsZEZvcndhcmRQcm9wT3B0aW9uID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBkZWZhdWx0U3R5bGVkUmVzb2x2ZXIgPSBzdHlsZWRFbmdpbmVTdHlsZWQodGFnLCBfZXh0ZW5kcyh7XG4gICAgICBzaG91bGRGb3J3YXJkUHJvcDogc2hvdWxkRm9yd2FyZFByb3BPcHRpb24sXG4gICAgICBsYWJlbFxuICAgIH0sIG9wdGlvbnMpKTtcbiAgICBjb25zdCB0cmFuc2Zvcm1TdHlsZUFyZyA9IHN0eWxlc0FyZyA9PiB7XG4gICAgICAvLyBPbiB0aGUgc2VydmVyIEVtb3Rpb24gZG9lc24ndCB1c2UgUmVhY3QuZm9yd2FyZFJlZiBmb3IgY3JlYXRpbmcgY29tcG9uZW50cywgc28gdGhlIGNyZWF0ZWRcbiAgICAgIC8vIGNvbXBvbmVudCBzdGF5cyBhcyBhIGZ1bmN0aW9uLiBUaGlzIGNvbmRpdGlvbiBtYWtlcyBzdXJlIHRoYXQgd2UgZG8gbm90IGludGVycG9sYXRlIGZ1bmN0aW9uc1xuICAgICAgLy8gd2hpY2ggYXJlIGJhc2ljYWxseSBjb21wb25lbnRzIHVzZWQgYXMgYSBzZWxlY3RvcnMuXG4gICAgICBpZiAodHlwZW9mIHN0eWxlc0FyZyA9PT0gJ2Z1bmN0aW9uJyAmJiBzdHlsZXNBcmcuX19lbW90aW9uX3JlYWwgIT09IHN0eWxlc0FyZyB8fCBpc1BsYWluT2JqZWN0KHN0eWxlc0FyZykpIHtcbiAgICAgICAgcmV0dXJuIHByb3BzID0+IHByb2Nlc3NTdHlsZUFyZyhzdHlsZXNBcmcsIF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgICAgICAgIHRoZW1lOiByZXNvbHZlVGhlbWUoe1xuICAgICAgICAgICAgdGhlbWU6IHByb3BzLnRoZW1lLFxuICAgICAgICAgICAgZGVmYXVsdFRoZW1lLFxuICAgICAgICAgICAgdGhlbWVJZFxuICAgICAgICAgIH0pXG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdHlsZXNBcmc7XG4gICAgfTtcbiAgICBjb25zdCBtdWlTdHlsZWRSZXNvbHZlciA9IChzdHlsZUFyZywgLi4uZXhwcmVzc2lvbnMpID0+IHtcbiAgICAgIGxldCB0cmFuc2Zvcm1lZFN0eWxlQXJnID0gdHJhbnNmb3JtU3R5bGVBcmcoc3R5bGVBcmcpO1xuICAgICAgY29uc3QgZXhwcmVzc2lvbnNXaXRoRGVmYXVsdFRoZW1lID0gZXhwcmVzc2lvbnMgPyBleHByZXNzaW9ucy5tYXAodHJhbnNmb3JtU3R5bGVBcmcpIDogW107XG4gICAgICBpZiAoY29tcG9uZW50TmFtZSAmJiBvdmVycmlkZXNSZXNvbHZlcikge1xuICAgICAgICBleHByZXNzaW9uc1dpdGhEZWZhdWx0VGhlbWUucHVzaChwcm9wcyA9PiB7XG4gICAgICAgICAgY29uc3QgdGhlbWUgPSByZXNvbHZlVGhlbWUoX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgICAgICAgICBkZWZhdWx0VGhlbWUsXG4gICAgICAgICAgICB0aGVtZUlkXG4gICAgICAgICAgfSkpO1xuICAgICAgICAgIGlmICghdGhlbWUuY29tcG9uZW50cyB8fCAhdGhlbWUuY29tcG9uZW50c1tjb21wb25lbnROYW1lXSB8fCAhdGhlbWUuY29tcG9uZW50c1tjb21wb25lbnROYW1lXS5zdHlsZU92ZXJyaWRlcykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHN0eWxlT3ZlcnJpZGVzID0gdGhlbWUuY29tcG9uZW50c1tjb21wb25lbnROYW1lXS5zdHlsZU92ZXJyaWRlcztcbiAgICAgICAgICBjb25zdCByZXNvbHZlZFN0eWxlT3ZlcnJpZGVzID0ge307XG4gICAgICAgICAgLy8gVE9ETzogdjcgcmVtb3ZlIGl0ZXJhdGlvbiBhbmQgdXNlIGByZXNvbHZlU3R5bGVBcmcoc3R5bGVPdmVycmlkZXNbc2xvdF0pYCBkaXJlY3RseVxuICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHN0eWxlT3ZlcnJpZGVzKS5mb3JFYWNoKChbc2xvdEtleSwgc2xvdFN0eWxlXSkgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZWRTdHlsZU92ZXJyaWRlc1tzbG90S2V5XSA9IHByb2Nlc3NTdHlsZUFyZyhzbG90U3R5bGUsIF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgICAgICAgICAgICB0aGVtZVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBvdmVycmlkZXNSZXNvbHZlcihwcm9wcywgcmVzb2x2ZWRTdHlsZU92ZXJyaWRlcyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKGNvbXBvbmVudE5hbWUgJiYgIXNraXBWYXJpYW50c1Jlc29sdmVyKSB7XG4gICAgICAgIGV4cHJlc3Npb25zV2l0aERlZmF1bHRUaGVtZS5wdXNoKHByb3BzID0+IHtcbiAgICAgICAgICB2YXIgX3RoZW1lJGNvbXBvbmVudHM7XG4gICAgICAgICAgY29uc3QgdGhlbWUgPSByZXNvbHZlVGhlbWUoX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgICAgICAgICBkZWZhdWx0VGhlbWUsXG4gICAgICAgICAgICB0aGVtZUlkXG4gICAgICAgICAgfSkpO1xuICAgICAgICAgIGNvbnN0IHRoZW1lVmFyaWFudHMgPSB0aGVtZSA9PSBudWxsIHx8IChfdGhlbWUkY29tcG9uZW50cyA9IHRoZW1lLmNvbXBvbmVudHMpID09IG51bGwgfHwgKF90aGVtZSRjb21wb25lbnRzID0gX3RoZW1lJGNvbXBvbmVudHNbY29tcG9uZW50TmFtZV0pID09IG51bGwgPyB2b2lkIDAgOiBfdGhlbWUkY29tcG9uZW50cy52YXJpYW50cztcbiAgICAgICAgICByZXR1cm4gcHJvY2Vzc1N0eWxlQXJnKHtcbiAgICAgICAgICAgIHZhcmlhbnRzOiB0aGVtZVZhcmlhbnRzXG4gICAgICAgICAgfSwgX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgICAgICAgICB0aGVtZVxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoIXNraXBTeCkge1xuICAgICAgICBleHByZXNzaW9uc1dpdGhEZWZhdWx0VGhlbWUucHVzaChzeXN0ZW1TeCk7XG4gICAgICB9XG4gICAgICBjb25zdCBudW1PZkN1c3RvbUZuc0FwcGxpZWQgPSBleHByZXNzaW9uc1dpdGhEZWZhdWx0VGhlbWUubGVuZ3RoIC0gZXhwcmVzc2lvbnMubGVuZ3RoO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc3R5bGVBcmcpICYmIG51bU9mQ3VzdG9tRm5zQXBwbGllZCA+IDApIHtcbiAgICAgICAgY29uc3QgcGxhY2Vob2xkZXJzID0gbmV3IEFycmF5KG51bU9mQ3VzdG9tRm5zQXBwbGllZCkuZmlsbCgnJyk7XG4gICAgICAgIC8vIElmIHRoZSB0eXBlIGlzIGFycmF5LCB0aGFuIHdlIG5lZWQgdG8gYWRkIHBsYWNlaG9sZGVycyBpbiB0aGUgdGVtcGxhdGUgZm9yIHRoZSBvdmVycmlkZXMsIHZhcmlhbnRzIGFuZCB0aGUgc3ggc3R5bGVzLlxuICAgICAgICB0cmFuc2Zvcm1lZFN0eWxlQXJnID0gWy4uLnN0eWxlQXJnLCAuLi5wbGFjZWhvbGRlcnNdO1xuICAgICAgICB0cmFuc2Zvcm1lZFN0eWxlQXJnLnJhdyA9IFsuLi5zdHlsZUFyZy5yYXcsIC4uLnBsYWNlaG9sZGVyc107XG4gICAgICB9XG4gICAgICBjb25zdCBDb21wb25lbnQgPSBkZWZhdWx0U3R5bGVkUmVzb2x2ZXIodHJhbnNmb3JtZWRTdHlsZUFyZywgLi4uZXhwcmVzc2lvbnNXaXRoRGVmYXVsdFRoZW1lKTtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGxldCBkaXNwbGF5TmFtZTtcbiAgICAgICAgaWYgKGNvbXBvbmVudE5hbWUpIHtcbiAgICAgICAgICBkaXNwbGF5TmFtZSA9IGAke2NvbXBvbmVudE5hbWV9JHtjYXBpdGFsaXplKGNvbXBvbmVudFNsb3QgfHwgJycpfWA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRpc3BsYXlOYW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkaXNwbGF5TmFtZSA9IGBTdHlsZWQoJHtnZXREaXNwbGF5TmFtZSh0YWcpfSlgO1xuICAgICAgICB9XG4gICAgICAgIENvbXBvbmVudC5kaXNwbGF5TmFtZSA9IGRpc3BsYXlOYW1lO1xuICAgICAgfVxuICAgICAgaWYgKHRhZy5tdWlOYW1lKSB7XG4gICAgICAgIENvbXBvbmVudC5tdWlOYW1lID0gdGFnLm11aU5hbWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gQ29tcG9uZW50O1xuICAgIH07XG4gICAgaWYgKGRlZmF1bHRTdHlsZWRSZXNvbHZlci53aXRoQ29uZmlnKSB7XG4gICAgICBtdWlTdHlsZWRSZXNvbHZlci53aXRoQ29uZmlnID0gZGVmYXVsdFN0eWxlZFJlc29sdmVyLndpdGhDb25maWc7XG4gICAgfVxuICAgIHJldHVybiBtdWlTdHlsZWRSZXNvbHZlcjtcbiAgfTtcbn0iLCAiaW1wb3J0IGNyZWF0ZVN0eWxlZCBmcm9tICcuL2NyZWF0ZVN0eWxlZCc7XG5jb25zdCBzdHlsZWQgPSBjcmVhdGVTdHlsZWQoKTtcbmV4cG9ydCBkZWZhdWx0IHN0eWxlZDsiLCAiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG4vKipcbiAqIEFkZCBrZXlzLCB2YWx1ZXMgb2YgYGRlZmF1bHRQcm9wc2AgdGhhdCBkb2VzIG5vdCBleGlzdCBpbiBgcHJvcHNgXG4gKiBAcGFyYW0ge29iamVjdH0gZGVmYXVsdFByb3BzXG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHNcbiAqIEByZXR1cm5zIHtvYmplY3R9IHJlc29sdmVkIHByb3BzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlc29sdmVQcm9wcyhkZWZhdWx0UHJvcHMsIHByb3BzKSB7XG4gIGNvbnN0IG91dHB1dCA9IF9leHRlbmRzKHt9LCBwcm9wcyk7XG4gIE9iamVjdC5rZXlzKGRlZmF1bHRQcm9wcykuZm9yRWFjaChwcm9wTmFtZSA9PiB7XG4gICAgaWYgKHByb3BOYW1lLnRvU3RyaW5nKCkubWF0Y2goL14oY29tcG9uZW50c3xzbG90cykkLykpIHtcbiAgICAgIG91dHB1dFtwcm9wTmFtZV0gPSBfZXh0ZW5kcyh7fSwgZGVmYXVsdFByb3BzW3Byb3BOYW1lXSwgb3V0cHV0W3Byb3BOYW1lXSk7XG4gICAgfSBlbHNlIGlmIChwcm9wTmFtZS50b1N0cmluZygpLm1hdGNoKC9eKGNvbXBvbmVudHNQcm9wc3xzbG90UHJvcHMpJC8pKSB7XG4gICAgICBjb25zdCBkZWZhdWx0U2xvdFByb3BzID0gZGVmYXVsdFByb3BzW3Byb3BOYW1lXSB8fCB7fTtcbiAgICAgIGNvbnN0IHNsb3RQcm9wcyA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIG91dHB1dFtwcm9wTmFtZV0gPSB7fTtcbiAgICAgIGlmICghc2xvdFByb3BzIHx8ICFPYmplY3Qua2V5cyhzbG90UHJvcHMpKSB7XG4gICAgICAgIC8vIFJlZHVjZSB0aGUgaXRlcmF0aW9uIGlmIHRoZSBzbG90IHByb3BzIGlzIGVtcHR5XG4gICAgICAgIG91dHB1dFtwcm9wTmFtZV0gPSBkZWZhdWx0U2xvdFByb3BzO1xuICAgICAgfSBlbHNlIGlmICghZGVmYXVsdFNsb3RQcm9wcyB8fCAhT2JqZWN0LmtleXMoZGVmYXVsdFNsb3RQcm9wcykpIHtcbiAgICAgICAgLy8gUmVkdWNlIHRoZSBpdGVyYXRpb24gaWYgdGhlIGRlZmF1bHQgc2xvdCBwcm9wcyBpcyBlbXB0eVxuICAgICAgICBvdXRwdXRbcHJvcE5hbWVdID0gc2xvdFByb3BzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0cHV0W3Byb3BOYW1lXSA9IF9leHRlbmRzKHt9LCBzbG90UHJvcHMpO1xuICAgICAgICBPYmplY3Qua2V5cyhkZWZhdWx0U2xvdFByb3BzKS5mb3JFYWNoKHNsb3RQcm9wTmFtZSA9PiB7XG4gICAgICAgICAgb3V0cHV0W3Byb3BOYW1lXVtzbG90UHJvcE5hbWVdID0gcmVzb2x2ZVByb3BzKGRlZmF1bHRTbG90UHJvcHNbc2xvdFByb3BOYW1lXSwgc2xvdFByb3BzW3Nsb3RQcm9wTmFtZV0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG91dHB1dFtwcm9wTmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgb3V0cHV0W3Byb3BOYW1lXSA9IGRlZmF1bHRQcm9wc1twcm9wTmFtZV07XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIG91dHB1dDtcbn0iLCAiaW1wb3J0IHJlc29sdmVQcm9wcyBmcm9tICdAbXVpL3V0aWxzL3Jlc29sdmVQcm9wcyc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRUaGVtZVByb3BzKHBhcmFtcykge1xuICBjb25zdCB7XG4gICAgdGhlbWUsXG4gICAgbmFtZSxcbiAgICBwcm9wc1xuICB9ID0gcGFyYW1zO1xuICBpZiAoIXRoZW1lIHx8ICF0aGVtZS5jb21wb25lbnRzIHx8ICF0aGVtZS5jb21wb25lbnRzW25hbWVdIHx8ICF0aGVtZS5jb21wb25lbnRzW25hbWVdLmRlZmF1bHRQcm9wcykge1xuICAgIHJldHVybiBwcm9wcztcbiAgfVxuICByZXR1cm4gcmVzb2x2ZVByb3BzKHRoZW1lLmNvbXBvbmVudHNbbmFtZV0uZGVmYXVsdFByb3BzLCBwcm9wcyk7XG59IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0IGdldFRoZW1lUHJvcHMgZnJvbSAnLi9nZXRUaGVtZVByb3BzJztcbmltcG9ydCB1c2VUaGVtZSBmcm9tICcuLi91c2VUaGVtZSc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VUaGVtZVByb3BzKHtcbiAgcHJvcHMsXG4gIG5hbWUsXG4gIGRlZmF1bHRUaGVtZSxcbiAgdGhlbWVJZFxufSkge1xuICBsZXQgdGhlbWUgPSB1c2VUaGVtZShkZWZhdWx0VGhlbWUpO1xuICBpZiAodGhlbWVJZCkge1xuICAgIHRoZW1lID0gdGhlbWVbdGhlbWVJZF0gfHwgdGhlbWU7XG4gIH1cbiAgY29uc3QgbWVyZ2VkUHJvcHMgPSBnZXRUaGVtZVByb3BzKHtcbiAgICB0aGVtZSxcbiAgICBuYW1lLFxuICAgIHByb3BzXG4gIH0pO1xuICByZXR1cm4gbWVyZ2VkUHJvcHM7XG59IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG4vKipcbiAqIEEgdmVyc2lvbiBvZiBgUmVhY3QudXNlTGF5b3V0RWZmZWN0YCB0aGF0IGRvZXMgbm90IHNob3cgYSB3YXJuaW5nIHdoZW4gc2VydmVyLXNpZGUgcmVuZGVyaW5nLlxuICogVGhpcyBpcyB1c2VmdWwgZm9yIGVmZmVjdHMgdGhhdCBhcmUgb25seSBuZWVkZWQgZm9yIGNsaWVudC1zaWRlIHJlbmRlcmluZyBidXQgbm90IGZvciBTU1IuXG4gKlxuICogQmVmb3JlIHlvdSB1c2UgdGhpcyBob29rLCBtYWtlIHN1cmUgdG8gcmVhZCBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9nYWVhcm9uL2U3ZDk3Y2RmMzhhMjkwNzkyNGVhMTJlNGViZGYzYzg1XG4gKiBhbmQgY29uZmlybSBpdCBkb2Vzbid0IGFwcGx5IHRvIHlvdXIgdXNlLWNhc2UuXG4gKi9cbmNvbnN0IHVzZUVuaGFuY2VkRWZmZWN0ID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyBSZWFjdC51c2VMYXlvdXRFZmZlY3QgOiBSZWFjdC51c2VFZmZlY3Q7XG5leHBvcnQgZGVmYXVsdCB1c2VFbmhhbmNlZEVmZmVjdDsiLCAiLyoqXG4gKiBTYWZlIGNoYWluZWQgZnVuY3Rpb24uXG4gKlxuICogV2lsbCBvbmx5IGNyZWF0ZSBhIG5ldyBmdW5jdGlvbiBpZiBuZWVkZWQsXG4gKiBvdGhlcndpc2Ugd2lsbCBwYXNzIGJhY2sgZXhpc3RpbmcgZnVuY3Rpb25zIG9yIG51bGwuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZUNoYWluZWRGdW5jdGlvbiguLi5mdW5jcykge1xuICByZXR1cm4gZnVuY3MucmVkdWNlKChhY2MsIGZ1bmMpID0+IHtcbiAgICBpZiAoZnVuYyA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gY2hhaW5lZEZ1bmN0aW9uKC4uLmFyZ3MpIHtcbiAgICAgIGFjYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgIGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfTtcbiAgfSwgKCkgPT4ge30pO1xufSIsICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc011aUVsZW1lbnQoZWxlbWVudCwgbXVpTmFtZXMpIHtcbiAgdmFyIF9tdWlOYW1lLCBfZWxlbWVudCR0eXBlO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmlzVmFsaWRFbGVtZW50KGVsZW1lbnQpICYmIG11aU5hbWVzLmluZGV4T2YoIC8vIEZvciBzZXJ2ZXIgY29tcG9uZW50cyBgbXVpTmFtZWAgaXMgYXZhaWFsYmxlIGluIGVsZW1lbnQudHlwZS5fcGF5bG9hZC52YWx1ZS5tdWlOYW1lXG4gIC8vIHJlbGV2YW50IGluZm8gLSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvYmxvYi8yODA3ZDc4MWEwOGRiOGU5ODczNjg3ZmNjYzI1YzBmMTJiNGZiM2Q0L3BhY2thZ2VzL3JlYWN0L3NyYy9SZWFjdExhenkuanMjTDQ1XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlcnNjb3JlLWRhbmdsZVxuICAoX211aU5hbWUgPSBlbGVtZW50LnR5cGUubXVpTmFtZSkgIT0gbnVsbCA/IF9tdWlOYW1lIDogKF9lbGVtZW50JHR5cGUgPSBlbGVtZW50LnR5cGUpID09IG51bGwgfHwgKF9lbGVtZW50JHR5cGUgPSBfZWxlbWVudCR0eXBlLl9wYXlsb2FkKSA9PSBudWxsIHx8IChfZWxlbWVudCR0eXBlID0gX2VsZW1lbnQkdHlwZS52YWx1ZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9lbGVtZW50JHR5cGUubXVpTmFtZSkgIT09IC0xO1xufSIsICIvKipcbiAqIFRPRE8gdjU6IGNvbnNpZGVyIG1ha2luZyBpdCBwcml2YXRlXG4gKlxuICogcGFzc2VzIHt2YWx1ZX0gdG8ge3JlZn1cbiAqXG4gKiBXQVJOSU5HOiBCZSBzdXJlIHRvIG9ubHkgY2FsbCB0aGlzIGluc2lkZSBhIGNhbGxiYWNrIHRoYXQgaXMgcGFzc2VkIGFzIGEgcmVmLlxuICogT3RoZXJ3aXNlLCBtYWtlIHN1cmUgdG8gY2xlYW51cCB0aGUgcHJldmlvdXMge3JlZn0gaWYgaXQgY2hhbmdlcy4gU2VlXG4gKiBodHRwczovL2dpdGh1Yi5jb20vbXVpL21hdGVyaWFsLXVpL2lzc3Vlcy8xMzUzOVxuICpcbiAqIFVzZWZ1bCBpZiB5b3Ugd2FudCB0byBleHBvc2UgdGhlIHJlZiBvZiBhbiBpbm5lciBjb21wb25lbnQgdG8gdGhlIHB1YmxpYyBBUElcbiAqIHdoaWxlIHN0aWxsIHVzaW5nIGl0IGluc2lkZSB0aGUgY29tcG9uZW50LlxuICogQHBhcmFtIHJlZiBBIHJlZiBjYWxsYmFjayBvciByZWYgb2JqZWN0LiBJZiBhbnl0aGluZyBmYWxzeSwgdGhpcyBpcyBhIG5vLW9wLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzZXRSZWYocmVmLCB2YWx1ZSkge1xuICBpZiAodHlwZW9mIHJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJlZih2YWx1ZSk7XG4gIH0gZWxzZSBpZiAocmVmKSB7XG4gICAgcmVmLmN1cnJlbnQgPSB2YWx1ZTtcbiAgfVxufSIsICIndXNlIGNsaWVudCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmxldCBnbG9iYWxJZCA9IDA7XG5mdW5jdGlvbiB1c2VHbG9iYWxJZChpZE92ZXJyaWRlKSB7XG4gIGNvbnN0IFtkZWZhdWx0SWQsIHNldERlZmF1bHRJZF0gPSBSZWFjdC51c2VTdGF0ZShpZE92ZXJyaWRlKTtcbiAgY29uc3QgaWQgPSBpZE92ZXJyaWRlIHx8IGRlZmF1bHRJZDtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoZGVmYXVsdElkID09IG51bGwpIHtcbiAgICAgIC8vIEZhbGxiYWNrIHRvIHRoaXMgZGVmYXVsdCBpZCB3aGVuIHBvc3NpYmxlLlxuICAgICAgLy8gVXNlIHRoZSBpbmNyZW1lbnRpbmcgdmFsdWUgZm9yIGNsaWVudC1zaWRlIHJlbmRlcmluZyBvbmx5LlxuICAgICAgLy8gV2UgY2FuJ3QgdXNlIGl0IHNlcnZlci1zaWRlLlxuICAgICAgLy8gSWYgeW91IHdhbnQgdG8gdXNlIHJhbmRvbSB2YWx1ZXMgcGxlYXNlIGNvbnNpZGVyIHRoZSBCaXJ0aGRheSBQcm9ibGVtOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9CaXJ0aGRheV9wcm9ibGVtXG4gICAgICBnbG9iYWxJZCArPSAxO1xuICAgICAgc2V0RGVmYXVsdElkKGBtdWktJHtnbG9iYWxJZH1gKTtcbiAgICB9XG4gIH0sIFtkZWZhdWx0SWRdKTtcbiAgcmV0dXJuIGlkO1xufVxuXG4vLyBkb3duc3RyZWFtIGJ1bmRsZXJzIG1heSByZW1vdmUgdW5uZWNlc3NhcnkgY29uY2F0ZW5hdGlvbiwgYnV0IHdvbid0IHJlbW92ZSB0b1N0cmluZyBjYWxsIC0tIFdvcmthcm91bmQgZm9yIGh0dHBzOi8vZ2l0aHViLmNvbS93ZWJwYWNrL3dlYnBhY2svaXNzdWVzLzE0ODE0XG5jb25zdCBtYXliZVJlYWN0VXNlSWQgPSBSZWFjdFsndXNlSWQnLnRvU3RyaW5nKCldO1xuLyoqXG4gKlxuICogQGV4YW1wbGUgPGRpdiBpZD17dXNlSWQoKX0gLz5cbiAqIEBwYXJhbSBpZE92ZXJyaWRlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VJZChpZE92ZXJyaWRlKSB7XG4gIGlmIChtYXliZVJlYWN0VXNlSWQgIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IHJlYWN0SWQgPSBtYXliZVJlYWN0VXNlSWQoKTtcbiAgICByZXR1cm4gaWRPdmVycmlkZSAhPSBudWxsID8gaWRPdmVycmlkZSA6IHJlYWN0SWQ7XG4gIH1cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzIC0tIGBSZWFjdC51c2VJZGAgaXMgaW52YXJpYW50IGF0IHJ1bnRpbWUuXG4gIHJldHVybiB1c2VHbG9iYWxJZChpZE92ZXJyaWRlKTtcbn0iLCAiJ3VzZSBjbGllbnQnO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC1ob29rcy9ydWxlcy1vZi1ob29rcywgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzICovXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VDb250cm9sbGVkKHtcbiAgY29udHJvbGxlZCxcbiAgZGVmYXVsdDogZGVmYXVsdFByb3AsXG4gIG5hbWUsXG4gIHN0YXRlID0gJ3ZhbHVlJ1xufSkge1xuICAvLyBpc0NvbnRyb2xsZWQgaXMgaWdub3JlZCBpbiB0aGUgaG9vayBkZXBlbmRlbmN5IGxpc3RzIGFzIGl0IHNob3VsZCBuZXZlciBjaGFuZ2UuXG4gIGNvbnN0IHtcbiAgICBjdXJyZW50OiBpc0NvbnRyb2xsZWRcbiAgfSA9IFJlYWN0LnVzZVJlZihjb250cm9sbGVkICE9PSB1bmRlZmluZWQpO1xuICBjb25zdCBbdmFsdWVTdGF0ZSwgc2V0VmFsdWVdID0gUmVhY3QudXNlU3RhdGUoZGVmYXVsdFByb3ApO1xuICBjb25zdCB2YWx1ZSA9IGlzQ29udHJvbGxlZCA/IGNvbnRyb2xsZWQgOiB2YWx1ZVN0YXRlO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAoaXNDb250cm9sbGVkICE9PSAoY29udHJvbGxlZCAhPT0gdW5kZWZpbmVkKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFtgTVVJOiBBIGNvbXBvbmVudCBpcyBjaGFuZ2luZyB0aGUgJHtpc0NvbnRyb2xsZWQgPyAnJyA6ICd1bid9Y29udHJvbGxlZCAke3N0YXRlfSBzdGF0ZSBvZiAke25hbWV9IHRvIGJlICR7aXNDb250cm9sbGVkID8gJ3VuJyA6ICcnfWNvbnRyb2xsZWQuYCwgJ0VsZW1lbnRzIHNob3VsZCBub3Qgc3dpdGNoIGZyb20gdW5jb250cm9sbGVkIHRvIGNvbnRyb2xsZWQgKG9yIHZpY2UgdmVyc2EpLicsIGBEZWNpZGUgYmV0d2VlbiB1c2luZyBhIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkICR7bmFtZX0gYCArICdlbGVtZW50IGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIGNvbXBvbmVudC4nLCBcIlRoZSBuYXR1cmUgb2YgdGhlIHN0YXRlIGlzIGRldGVybWluZWQgZHVyaW5nIHRoZSBmaXJzdCByZW5kZXIuIEl0J3MgY29uc2lkZXJlZCBjb250cm9sbGVkIGlmIHRoZSB2YWx1ZSBpcyBub3QgYHVuZGVmaW5lZGAuXCIsICdNb3JlIGluZm86IGh0dHBzOi8vZmIubWUvcmVhY3QtY29udHJvbGxlZC1jb21wb25lbnRzJ10uam9pbignXFxuJykpO1xuICAgICAgfVxuICAgIH0sIFtzdGF0ZSwgbmFtZSwgY29udHJvbGxlZF0pO1xuICAgIGNvbnN0IHtcbiAgICAgIGN1cnJlbnQ6IGRlZmF1bHRWYWx1ZVxuICAgIH0gPSBSZWFjdC51c2VSZWYoZGVmYXVsdFByb3ApO1xuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAoIWlzQ29udHJvbGxlZCAmJiBkZWZhdWx0VmFsdWUgIT09IGRlZmF1bHRQcm9wKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoW2BNVUk6IEEgY29tcG9uZW50IGlzIGNoYW5naW5nIHRoZSBkZWZhdWx0ICR7c3RhdGV9IHN0YXRlIG9mIGFuIHVuY29udHJvbGxlZCAke25hbWV9IGFmdGVyIGJlaW5nIGluaXRpYWxpemVkLiBgICsgYFRvIHN1cHByZXNzIHRoaXMgd2FybmluZyBvcHQgdG8gdXNlIGEgY29udHJvbGxlZCAke25hbWV9LmBdLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICB9LCBbSlNPTi5zdHJpbmdpZnkoZGVmYXVsdFByb3ApXSk7XG4gIH1cbiAgY29uc3Qgc2V0VmFsdWVJZlVuY29udHJvbGxlZCA9IFJlYWN0LnVzZUNhbGxiYWNrKG5ld1ZhbHVlID0+IHtcbiAgICBpZiAoIWlzQ29udHJvbGxlZCkge1xuICAgICAgc2V0VmFsdWUobmV3VmFsdWUpO1xuICAgIH1cbiAgfSwgW10pO1xuICByZXR1cm4gW3ZhbHVlLCBzZXRWYWx1ZUlmVW5jb250cm9sbGVkXTtcbn0iLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdXNlRW5oYW5jZWRFZmZlY3QgZnJvbSAnLi4vdXNlRW5oYW5jZWRFZmZlY3QnO1xuXG4vKipcbiAqIEluc3BpcmVkIGJ5IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTQwOTkjaXNzdWVjb21tZW50LTQ0MDAxMzg5MlxuICogU2VlIFJGQyBpbiBodHRwczovL2dpdGh1Yi5jb20vcmVhY3Rqcy9yZmNzL3B1bGwvMjIwXG4gKi9cblxuZnVuY3Rpb24gdXNlRXZlbnRDYWxsYmFjayhmbikge1xuICBjb25zdCByZWYgPSBSZWFjdC51c2VSZWYoZm4pO1xuICB1c2VFbmhhbmNlZEVmZmVjdCgoKSA9PiB7XG4gICAgcmVmLmN1cnJlbnQgPSBmbjtcbiAgfSk7XG4gIHJldHVybiBSZWFjdC51c2VSZWYoKC4uLmFyZ3MpID0+XG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgaGlkZSBgdGhpc2BcbiAgKDAsIHJlZi5jdXJyZW50KSguLi5hcmdzKSkuY3VycmVudDtcbn1cbmV4cG9ydCBkZWZhdWx0IHVzZUV2ZW50Q2FsbGJhY2s7IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHNldFJlZiBmcm9tICcuLi9zZXRSZWYnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlRm9ya1JlZiguLi5yZWZzKSB7XG4gIC8qKlxuICAgKiBUaGlzIHdpbGwgY3JlYXRlIGEgbmV3IGZ1bmN0aW9uIGlmIHRoZSByZWZzIHBhc3NlZCB0byB0aGlzIGhvb2sgY2hhbmdlIGFuZCBhcmUgYWxsIGRlZmluZWQuXG4gICAqIFRoaXMgbWVhbnMgcmVhY3Qgd2lsbCBjYWxsIHRoZSBvbGQgZm9ya1JlZiB3aXRoIGBudWxsYCBhbmQgdGhlIG5ldyBmb3JrUmVmXG4gICAqIHdpdGggdGhlIHJlZi4gQ2xlYW51cCBuYXR1cmFsbHkgZW1lcmdlcyBmcm9tIHRoaXMgYmVoYXZpb3IuXG4gICAqL1xuICByZXR1cm4gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKHJlZnMuZXZlcnkocmVmID0+IHJlZiA9PSBudWxsKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBpbnN0YW5jZSA9PiB7XG4gICAgICByZWZzLmZvckVhY2gocmVmID0+IHtcbiAgICAgICAgc2V0UmVmKHJlZiwgaW5zdGFuY2UpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIH0sIHJlZnMpO1xufSIsICIndXNlIGNsaWVudCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmNvbnN0IFVOSU5JVElBTElaRUQgPSB7fTtcblxuLyoqXG4gKiBBIFJlYWN0LnVzZVJlZigpIHRoYXQgaXMgaW5pdGlhbGl6ZWQgbGF6aWx5IHdpdGggYSBmdW5jdGlvbi4gTm90ZSB0aGF0IGl0IGFjY2VwdHMgYW4gb3B0aW9uYWxcbiAqIGluaXRpYWxpemF0aW9uIGFyZ3VtZW50LCBzbyB0aGUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZG9lc24ndCBuZWVkIHRvIGJlIGFuIGlubGluZSBjbG9zdXJlLlxuICpcbiAqIEB1c2FnZVxuICogICBjb25zdCByZWYgPSB1c2VMYXp5UmVmKHNvcnRDb2x1bW5zLCBjb2x1bW5zKVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VMYXp5UmVmKGluaXQsIGluaXRBcmcpIHtcbiAgY29uc3QgcmVmID0gUmVhY3QudXNlUmVmKFVOSU5JVElBTElaRUQpO1xuICBpZiAocmVmLmN1cnJlbnQgPT09IFVOSU5JVElBTElaRUQpIHtcbiAgICByZWYuY3VycmVudCA9IGluaXQoaW5pdEFyZyk7XG4gIH1cbiAgcmV0dXJuIHJlZjtcbn0iLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5jb25zdCBFTVBUWSA9IFtdO1xuXG4vKipcbiAqIEEgUmVhY3QudXNlRWZmZWN0IGVxdWl2YWxlbnQgdGhhdCBydW5zIG9uY2UsIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBtb3VudGVkLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VPbk1vdW50KGZuKSB7XG4gIC8qIGVzbGludC1kaXNhYmxlIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwcyAqL1xuICBSZWFjdC51c2VFZmZlY3QoZm4sIEVNUFRZKTtcbiAgLyogZXNsaW50LWVuYWJsZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHMgKi9cbn0iLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgdXNlTGF6eVJlZiBmcm9tICcuLi91c2VMYXp5UmVmL3VzZUxhenlSZWYnO1xuaW1wb3J0IHVzZU9uTW91bnQgZnJvbSAnLi4vdXNlT25Nb3VudC91c2VPbk1vdW50JztcbmV4cG9ydCBjbGFzcyBUaW1lb3V0IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5jdXJyZW50SWQgPSBudWxsO1xuICAgIHRoaXMuY2xlYXIgPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5jdXJyZW50SWQgIT09IG51bGwpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuY3VycmVudElkKTtcbiAgICAgICAgdGhpcy5jdXJyZW50SWQgPSBudWxsO1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5kaXNwb3NlRWZmZWN0ID0gKCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuY2xlYXI7XG4gICAgfTtcbiAgfVxuICBzdGF0aWMgY3JlYXRlKCkge1xuICAgIHJldHVybiBuZXcgVGltZW91dCgpO1xuICB9XG4gIC8qKlxuICAgKiBFeGVjdXRlcyBgZm5gIGFmdGVyIGBkZWxheWAsIGNsZWFyaW5nIGFueSBwcmV2aW91c2x5IHNjaGVkdWxlZCBjYWxsLlxuICAgKi9cbiAgc3RhcnQoZGVsYXksIGZuKSB7XG4gICAgdGhpcy5jbGVhcigpO1xuICAgIHRoaXMuY3VycmVudElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmN1cnJlbnRJZCA9IG51bGw7XG4gICAgICBmbigpO1xuICAgIH0sIGRlbGF5KTtcbiAgfVxufVxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlVGltZW91dCgpIHtcbiAgY29uc3QgdGltZW91dCA9IHVzZUxhenlSZWYoVGltZW91dC5jcmVhdGUpLmN1cnJlbnQ7XG4gIHVzZU9uTW91bnQodGltZW91dC5kaXNwb3NlRWZmZWN0KTtcbiAgcmV0dXJuIHRpbWVvdXQ7XG59IiwgIid1c2UgY2xpZW50JztcblxuLy8gYmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL1dJQ0cvZm9jdXMtdmlzaWJsZS9ibG9iL3Y0LjEuNS9zcmMvZm9jdXMtdmlzaWJsZS5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgVGltZW91dCB9IGZyb20gJy4uL3VzZVRpbWVvdXQvdXNlVGltZW91dCc7XG5sZXQgaGFkS2V5Ym9hcmRFdmVudCA9IHRydWU7XG5sZXQgaGFkRm9jdXNWaXNpYmxlUmVjZW50bHkgPSBmYWxzZTtcbmNvbnN0IGhhZEZvY3VzVmlzaWJsZVJlY2VudGx5VGltZW91dCA9IG5ldyBUaW1lb3V0KCk7XG5jb25zdCBpbnB1dFR5cGVzV2hpdGVsaXN0ID0ge1xuICB0ZXh0OiB0cnVlLFxuICBzZWFyY2g6IHRydWUsXG4gIHVybDogdHJ1ZSxcbiAgdGVsOiB0cnVlLFxuICBlbWFpbDogdHJ1ZSxcbiAgcGFzc3dvcmQ6IHRydWUsXG4gIG51bWJlcjogdHJ1ZSxcbiAgZGF0ZTogdHJ1ZSxcbiAgbW9udGg6IHRydWUsXG4gIHdlZWs6IHRydWUsXG4gIHRpbWU6IHRydWUsXG4gIGRhdGV0aW1lOiB0cnVlLFxuICAnZGF0ZXRpbWUtbG9jYWwnOiB0cnVlXG59O1xuXG4vKipcbiAqIENvbXB1dGVzIHdoZXRoZXIgdGhlIGdpdmVuIGVsZW1lbnQgc2hvdWxkIGF1dG9tYXRpY2FsbHkgdHJpZ2dlciB0aGVcbiAqIGBmb2N1cy12aXNpYmxlYCBjbGFzcyBiZWluZyBhZGRlZCwgaS5lLiB3aGV0aGVyIGl0IHNob3VsZCBhbHdheXMgbWF0Y2hcbiAqIGA6Zm9jdXMtdmlzaWJsZWAgd2hlbiBmb2N1c2VkLlxuICogQHBhcmFtIHtFbGVtZW50fSBub2RlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gZm9jdXNUcmlnZ2Vyc0tleWJvYXJkTW9kYWxpdHkobm9kZSkge1xuICBjb25zdCB7XG4gICAgdHlwZSxcbiAgICB0YWdOYW1lXG4gIH0gPSBub2RlO1xuICBpZiAodGFnTmFtZSA9PT0gJ0lOUFVUJyAmJiBpbnB1dFR5cGVzV2hpdGVsaXN0W3R5cGVdICYmICFub2RlLnJlYWRPbmx5KSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKHRhZ05hbWUgPT09ICdURVhUQVJFQScgJiYgIW5vZGUucmVhZE9ubHkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAobm9kZS5pc0NvbnRlbnRFZGl0YWJsZSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBLZWVwIHRyYWNrIG9mIG91ciBrZXlib2FyZCBtb2RhbGl0eSBzdGF0ZSB3aXRoIGBoYWRLZXlib2FyZEV2ZW50YC5cbiAqIElmIHRoZSBtb3N0IHJlY2VudCB1c2VyIGludGVyYWN0aW9uIHdhcyB2aWEgdGhlIGtleWJvYXJkO1xuICogYW5kIHRoZSBrZXkgcHJlc3MgZGlkIG5vdCBpbmNsdWRlIGEgbWV0YSwgYWx0L29wdGlvbiwgb3IgY29udHJvbCBrZXk7XG4gKiB0aGVuIHRoZSBtb2RhbGl0eSBpcyBrZXlib2FyZC4gT3RoZXJ3aXNlLCB0aGUgbW9kYWxpdHkgaXMgbm90IGtleWJvYXJkLlxuICogQHBhcmFtIHtLZXlib2FyZEV2ZW50fSBldmVudFxuICovXG5mdW5jdGlvbiBoYW5kbGVLZXlEb3duKGV2ZW50KSB7XG4gIGlmIChldmVudC5tZXRhS2V5IHx8IGV2ZW50LmFsdEtleSB8fCBldmVudC5jdHJsS2V5KSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGhhZEtleWJvYXJkRXZlbnQgPSB0cnVlO1xufVxuXG4vKipcbiAqIElmIGF0IGFueSBwb2ludCBhIHVzZXIgY2xpY2tzIHdpdGggYSBwb2ludGluZyBkZXZpY2UsIGVuc3VyZSB0aGF0IHdlIGNoYW5nZVxuICogdGhlIG1vZGFsaXR5IGF3YXkgZnJvbSBrZXlib2FyZC5cbiAqIFRoaXMgYXZvaWRzIHRoZSBzaXR1YXRpb24gd2hlcmUgYSB1c2VyIHByZXNzZXMgYSBrZXkgb24gYW4gYWxyZWFkeSBmb2N1c2VkXG4gKiBlbGVtZW50LCBhbmQgdGhlbiBjbGlja3Mgb24gYSBkaWZmZXJlbnQgZWxlbWVudCwgZm9jdXNpbmcgaXQgd2l0aCBhXG4gKiBwb2ludGluZyBkZXZpY2UsIHdoaWxlIHdlIHN0aWxsIHRoaW5rIHdlJ3JlIGluIGtleWJvYXJkIG1vZGFsaXR5LlxuICovXG5mdW5jdGlvbiBoYW5kbGVQb2ludGVyRG93bigpIHtcbiAgaGFkS2V5Ym9hcmRFdmVudCA9IGZhbHNlO1xufVxuZnVuY3Rpb24gaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSgpIHtcbiAgaWYgKHRoaXMudmlzaWJpbGl0eVN0YXRlID09PSAnaGlkZGVuJykge1xuICAgIC8vIElmIHRoZSB0YWIgYmVjb21lcyBhY3RpdmUgYWdhaW4sIHRoZSBicm93c2VyIHdpbGwgaGFuZGxlIGNhbGxpbmcgZm9jdXNcbiAgICAvLyBvbiB0aGUgZWxlbWVudCAoU2FmYXJpIGFjdHVhbGx5IGNhbGxzIGl0IHR3aWNlKS5cbiAgICAvLyBJZiB0aGlzIHRhYiBjaGFuZ2UgY2F1c2VkIGEgYmx1ciBvbiBhbiBlbGVtZW50IHdpdGggZm9jdXMtdmlzaWJsZSxcbiAgICAvLyByZS1hcHBseSB0aGUgY2xhc3Mgd2hlbiB0aGUgdXNlciBzd2l0Y2hlcyBiYWNrIHRvIHRoZSB0YWIuXG4gICAgaWYgKGhhZEZvY3VzVmlzaWJsZVJlY2VudGx5KSB7XG4gICAgICBoYWRLZXlib2FyZEV2ZW50ID0gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHByZXBhcmUoZG9jKSB7XG4gIGRvYy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgaGFuZGxlS2V5RG93biwgdHJ1ZSk7XG4gIGRvYy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBoYW5kbGVQb2ludGVyRG93biwgdHJ1ZSk7XG4gIGRvYy5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVyZG93bicsIGhhbmRsZVBvaW50ZXJEb3duLCB0cnVlKTtcbiAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBoYW5kbGVQb2ludGVyRG93biwgdHJ1ZSk7XG4gIGRvYy5hZGRFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSwgdHJ1ZSk7XG59XG5leHBvcnQgZnVuY3Rpb24gdGVhcmRvd24oZG9jKSB7XG4gIGRvYy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgaGFuZGxlS2V5RG93biwgdHJ1ZSk7XG4gIGRvYy5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBoYW5kbGVQb2ludGVyRG93biwgdHJ1ZSk7XG4gIGRvYy5yZW1vdmVFdmVudExpc3RlbmVyKCdwb2ludGVyZG93bicsIGhhbmRsZVBvaW50ZXJEb3duLCB0cnVlKTtcbiAgZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBoYW5kbGVQb2ludGVyRG93biwgdHJ1ZSk7XG4gIGRvYy5yZW1vdmVFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSwgdHJ1ZSk7XG59XG5mdW5jdGlvbiBpc0ZvY3VzVmlzaWJsZShldmVudCkge1xuICBjb25zdCB7XG4gICAgdGFyZ2V0XG4gIH0gPSBldmVudDtcbiAgdHJ5IHtcbiAgICByZXR1cm4gdGFyZ2V0Lm1hdGNoZXMoJzpmb2N1cy12aXNpYmxlJyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgLy8gQnJvd3NlcnMgbm90IGltcGxlbWVudGluZyA6Zm9jdXMtdmlzaWJsZSB3aWxsIHRocm93IGEgU3ludGF4RXJyb3IuXG4gICAgLy8gV2UgdXNlIG91ciBvd24gaGV1cmlzdGljIGZvciB0aG9zZSBicm93c2Vycy5cbiAgICAvLyBSZXRocm93IG1pZ2h0IGJlIGJldHRlciBpZiBpdCdzIG5vdCB0aGUgZXhwZWN0ZWQgZXJyb3IgYnV0IGRvIHdlIHJlYWxseVxuICAgIC8vIHdhbnQgdG8gY3Jhc2ggaWYgZm9jdXMtdmlzaWJsZSBtYWxmdW5jdGlvbmVkP1xuICB9XG5cbiAgLy8gTm8gbmVlZCBmb3IgdmFsaWRGb2N1c1RhcmdldCBjaGVjay4gVGhlIHVzZXIgZG9lcyB0aGF0IGJ5IGF0dGFjaGluZyBpdCB0b1xuICAvLyBmb2N1c2FibGUgZXZlbnRzIG9ubHkuXG4gIHJldHVybiBoYWRLZXlib2FyZEV2ZW50IHx8IGZvY3VzVHJpZ2dlcnNLZXlib2FyZE1vZGFsaXR5KHRhcmdldCk7XG59XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VJc0ZvY3VzVmlzaWJsZSgpIHtcbiAgY29uc3QgcmVmID0gUmVhY3QudXNlQ2FsbGJhY2sobm9kZSA9PiB7XG4gICAgaWYgKG5vZGUgIT0gbnVsbCkge1xuICAgICAgcHJlcGFyZShub2RlLm93bmVyRG9jdW1lbnQpO1xuICAgIH1cbiAgfSwgW10pO1xuICBjb25zdCBpc0ZvY3VzVmlzaWJsZVJlZiA9IFJlYWN0LnVzZVJlZihmYWxzZSk7XG5cbiAgLyoqXG4gICAqIFNob3VsZCBiZSBjYWxsZWQgaWYgYSBibHVyIGV2ZW50IGlzIGZpcmVkXG4gICAqL1xuICBmdW5jdGlvbiBoYW5kbGVCbHVyVmlzaWJsZSgpIHtcbiAgICAvLyBjaGVja2luZyBhZ2FpbnN0IHBvdGVudGlhbCBzdGF0ZSB2YXJpYWJsZSBkb2VzIG5vdCBzdWZmaWNlIGlmIHdlIGZvY3VzIGFuZCBibHVyIHN5bmNocm9ub3VzbHkuXG4gICAgLy8gUmVhY3Qgd291bGRuJ3QgaGF2ZSB0aW1lIHRvIHRyaWdnZXIgYSByZS1yZW5kZXIgc28gYGZvY3VzVmlzaWJsZWAgd291bGQgYmUgc3RhbGUuXG4gICAgLy8gSWRlYWxseSB3ZSB3b3VsZCBhZGp1c3QgYGlzRm9jdXNWaXNpYmxlKGV2ZW50KWAgdG8gbG9vayBhdCBgcmVsYXRlZFRhcmdldGAgZm9yIGJsdXIgZXZlbnRzLlxuICAgIC8vIFRoaXMgZG9lc24ndCB3b3JrIGluIElFMTEgZHVlIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMzc1MVxuICAgIC8vIFRPRE86IGNoZWNrIGFnYWluIGlmIFJlYWN0IHJlbGVhc2VzIHRoZWlyIGludGVybmFsIGNoYW5nZXMgdG8gZm9jdXMgZXZlbnQgaGFuZGxpbmcgKGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzE5MTg2KS5cbiAgICBpZiAoaXNGb2N1c1Zpc2libGVSZWYuY3VycmVudCkge1xuICAgICAgLy8gVG8gZGV0ZWN0IGEgdGFiL3dpbmRvdyBzd2l0Y2gsIHdlIGxvb2sgZm9yIGEgYmx1ciBldmVudCBmb2xsb3dlZFxuICAgICAgLy8gcmFwaWRseSBieSBhIHZpc2liaWxpdHkgY2hhbmdlLlxuICAgICAgLy8gSWYgd2UgZG9uJ3Qgc2VlIGEgdmlzaWJpbGl0eSBjaGFuZ2Ugd2l0aGluIDEwMG1zLCBpdCdzIHByb2JhYmx5IGFcbiAgICAgIC8vIHJlZ3VsYXIgZm9jdXMgY2hhbmdlLlxuICAgICAgaGFkRm9jdXNWaXNpYmxlUmVjZW50bHkgPSB0cnVlO1xuICAgICAgaGFkRm9jdXNWaXNpYmxlUmVjZW50bHlUaW1lb3V0LnN0YXJ0KDEwMCwgKCkgPT4ge1xuICAgICAgICBoYWRGb2N1c1Zpc2libGVSZWNlbnRseSA9IGZhbHNlO1xuICAgICAgfSk7XG4gICAgICBpc0ZvY3VzVmlzaWJsZVJlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNob3VsZCBiZSBjYWxsZWQgaWYgYSBibHVyIGV2ZW50IGlzIGZpcmVkXG4gICAqL1xuICBmdW5jdGlvbiBoYW5kbGVGb2N1c1Zpc2libGUoZXZlbnQpIHtcbiAgICBpZiAoaXNGb2N1c1Zpc2libGUoZXZlbnQpKSB7XG4gICAgICBpc0ZvY3VzVmlzaWJsZVJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBpc0ZvY3VzVmlzaWJsZVJlZixcbiAgICBvbkZvY3VzOiBoYW5kbGVGb2N1c1Zpc2libGUsXG4gICAgb25CbHVyOiBoYW5kbGVCbHVyVmlzaWJsZSxcbiAgICByZWZcbiAgfTtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldFV0aWxpdHlDbGFzcywgY2xhc3NlcyA9IHVuZGVmaW5lZCkge1xuICBjb25zdCBvdXRwdXQgPSB7fTtcbiAgT2JqZWN0LmtleXMoc2xvdHMpLmZvckVhY2goXG4gIC8vIGBPYmplY3Qua2V5cyhzbG90cylgIGNhbid0IGJlIHdpZGVyIHRoYW4gYFRgIGJlY2F1c2Ugd2UgaW5mZXIgYFRgIGZyb20gYHNsb3RzYC5cbiAgLy8gQHRzLWV4cGVjdC1lcnJvciBodHRwczovL2dpdGh1Yi5jb20vbWljcm9zb2Z0L1R5cGVTY3JpcHQvcHVsbC8xMjI1MyNpc3N1ZWNvbW1lbnQtMjYzMTMyMjA4XG4gIHNsb3QgPT4ge1xuICAgIG91dHB1dFtzbG90XSA9IHNsb3RzW3Nsb3RdLnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgY29uc3QgdXRpbGl0eUNsYXNzID0gZ2V0VXRpbGl0eUNsYXNzKGtleSk7XG4gICAgICAgIGlmICh1dGlsaXR5Q2xhc3MgIT09ICcnKSB7XG4gICAgICAgICAgYWNjLnB1c2godXRpbGl0eUNsYXNzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2xhc3NlcyAmJiBjbGFzc2VzW2tleV0pIHtcbiAgICAgICAgICBhY2MucHVzaChjbGFzc2VzW2tleV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIFtdKS5qb2luKCcgJyk7XG4gIH0pO1xuICByZXR1cm4gb3V0cHV0O1xufSIsICJpbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY29tcG9uZW50XCIsIFwiZGlyZWN0aW9uXCIsIFwic3BhY2luZ1wiLCBcImRpdmlkZXJcIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcInVzZUZsZXhHYXBcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgZGVlcG1lcmdlIGZyb20gJ0BtdWkvdXRpbHMvZGVlcG1lcmdlJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmltcG9ydCBjb21wb3NlQ2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCBzeXN0ZW1TdHlsZWQgZnJvbSAnLi4vc3R5bGVkJztcbmltcG9ydCB1c2VUaGVtZVByb3BzU3lzdGVtIGZyb20gJy4uL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IHsgZXh0ZW5kU3hQcm9wIH0gZnJvbSAnLi4vc3R5bGVGdW5jdGlvblN4JztcbmltcG9ydCBjcmVhdGVUaGVtZSBmcm9tICcuLi9jcmVhdGVUaGVtZSc7XG5pbXBvcnQgeyBoYW5kbGVCcmVha3BvaW50cywgbWVyZ2VCcmVha3BvaW50c0luT3JkZXIsIHJlc29sdmVCcmVha3BvaW50VmFsdWVzIH0gZnJvbSAnLi4vYnJlYWtwb2ludHMnO1xuaW1wb3J0IHsgY3JlYXRlVW5hcnlTcGFjaW5nLCBnZXRWYWx1ZSB9IGZyb20gJy4uL3NwYWNpbmcnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IGRlZmF1bHRUaGVtZSA9IGNyZWF0ZVRoZW1lKCk7XG4vLyB3aWRlbmluZyBUaGVtZSB0byBhbnkgc28gdGhhdCB0aGUgY29uc3VtZXIgY2FuIG93biB0aGUgdGhlbWUgc3RydWN0dXJlLlxuY29uc3QgZGVmYXVsdENyZWF0ZVN0eWxlZENvbXBvbmVudCA9IHN5c3RlbVN0eWxlZCgnZGl2Jywge1xuICBuYW1lOiAnTXVpU3RhY2snLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4gc3R5bGVzLnJvb3Rcbn0pO1xuZnVuY3Rpb24gdXNlVGhlbWVQcm9wc0RlZmF1bHQocHJvcHMpIHtcbiAgcmV0dXJuIHVzZVRoZW1lUHJvcHNTeXN0ZW0oe1xuICAgIHByb3BzLFxuICAgIG5hbWU6ICdNdWlTdGFjaycsXG4gICAgZGVmYXVsdFRoZW1lXG4gIH0pO1xufVxuXG4vKipcbiAqIFJldHVybiBhbiBhcnJheSB3aXRoIHRoZSBzZXBhcmF0b3IgUmVhY3QgZWxlbWVudCBpbnRlcnNwZXJzZWQgYmV0d2VlblxuICogZWFjaCBSZWFjdCBub2RlIG9mIHRoZSBpbnB1dCBjaGlsZHJlbi5cbiAqXG4gKiA+IGpvaW5DaGlsZHJlbihbMSwyLDNdLCAwKVxuICogWzEsMCwyLDAsM11cbiAqL1xuZnVuY3Rpb24gam9pbkNoaWxkcmVuKGNoaWxkcmVuLCBzZXBhcmF0b3IpIHtcbiAgY29uc3QgY2hpbGRyZW5BcnJheSA9IFJlYWN0LkNoaWxkcmVuLnRvQXJyYXkoY2hpbGRyZW4pLmZpbHRlcihCb29sZWFuKTtcbiAgcmV0dXJuIGNoaWxkcmVuQXJyYXkucmVkdWNlKChvdXRwdXQsIGNoaWxkLCBpbmRleCkgPT4ge1xuICAgIG91dHB1dC5wdXNoKGNoaWxkKTtcbiAgICBpZiAoaW5kZXggPCBjaGlsZHJlbkFycmF5Lmxlbmd0aCAtIDEpIHtcbiAgICAgIG91dHB1dC5wdXNoKCAvKiNfX1BVUkVfXyovUmVhY3QuY2xvbmVFbGVtZW50KHNlcGFyYXRvciwge1xuICAgICAgICBrZXk6IGBzZXBhcmF0b3ItJHtpbmRleH1gXG4gICAgICB9KSk7XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH0sIFtdKTtcbn1cbmNvbnN0IGdldFNpZGVGcm9tRGlyZWN0aW9uID0gZGlyZWN0aW9uID0+IHtcbiAgcmV0dXJuIHtcbiAgICByb3c6ICdMZWZ0JyxcbiAgICAncm93LXJldmVyc2UnOiAnUmlnaHQnLFxuICAgIGNvbHVtbjogJ1RvcCcsXG4gICAgJ2NvbHVtbi1yZXZlcnNlJzogJ0JvdHRvbSdcbiAgfVtkaXJlY3Rpb25dO1xufTtcbmV4cG9ydCBjb25zdCBzdHlsZSA9ICh7XG4gIG93bmVyU3RhdGUsXG4gIHRoZW1lXG59KSA9PiB7XG4gIGxldCBzdHlsZXMgPSBfZXh0ZW5kcyh7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nXG4gIH0sIGhhbmRsZUJyZWFrcG9pbnRzKHtcbiAgICB0aGVtZVxuICB9LCByZXNvbHZlQnJlYWtwb2ludFZhbHVlcyh7XG4gICAgdmFsdWVzOiBvd25lclN0YXRlLmRpcmVjdGlvbixcbiAgICBicmVha3BvaW50czogdGhlbWUuYnJlYWtwb2ludHMudmFsdWVzXG4gIH0pLCBwcm9wVmFsdWUgPT4gKHtcbiAgICBmbGV4RGlyZWN0aW9uOiBwcm9wVmFsdWVcbiAgfSkpKTtcbiAgaWYgKG93bmVyU3RhdGUuc3BhY2luZykge1xuICAgIGNvbnN0IHRyYW5zZm9ybWVyID0gY3JlYXRlVW5hcnlTcGFjaW5nKHRoZW1lKTtcbiAgICBjb25zdCBiYXNlID0gT2JqZWN0LmtleXModGhlbWUuYnJlYWtwb2ludHMudmFsdWVzKS5yZWR1Y2UoKGFjYywgYnJlYWtwb2ludCkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBvd25lclN0YXRlLnNwYWNpbmcgPT09ICdvYmplY3QnICYmIG93bmVyU3RhdGUuc3BhY2luZ1ticmVha3BvaW50XSAhPSBudWxsIHx8IHR5cGVvZiBvd25lclN0YXRlLmRpcmVjdGlvbiA9PT0gJ29iamVjdCcgJiYgb3duZXJTdGF0ZS5kaXJlY3Rpb25bYnJlYWtwb2ludF0gIT0gbnVsbCkge1xuICAgICAgICBhY2NbYnJlYWtwb2ludF0gPSB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG4gICAgY29uc3QgZGlyZWN0aW9uVmFsdWVzID0gcmVzb2x2ZUJyZWFrcG9pbnRWYWx1ZXMoe1xuICAgICAgdmFsdWVzOiBvd25lclN0YXRlLmRpcmVjdGlvbixcbiAgICAgIGJhc2VcbiAgICB9KTtcbiAgICBjb25zdCBzcGFjaW5nVmFsdWVzID0gcmVzb2x2ZUJyZWFrcG9pbnRWYWx1ZXMoe1xuICAgICAgdmFsdWVzOiBvd25lclN0YXRlLnNwYWNpbmcsXG4gICAgICBiYXNlXG4gICAgfSk7XG4gICAgaWYgKHR5cGVvZiBkaXJlY3Rpb25WYWx1ZXMgPT09ICdvYmplY3QnKSB7XG4gICAgICBPYmplY3Qua2V5cyhkaXJlY3Rpb25WYWx1ZXMpLmZvckVhY2goKGJyZWFrcG9pbnQsIGluZGV4LCBicmVha3BvaW50cykgPT4ge1xuICAgICAgICBjb25zdCBkaXJlY3Rpb25WYWx1ZSA9IGRpcmVjdGlvblZhbHVlc1ticmVha3BvaW50XTtcbiAgICAgICAgaWYgKCFkaXJlY3Rpb25WYWx1ZSkge1xuICAgICAgICAgIGNvbnN0IHByZXZpb3VzRGlyZWN0aW9uVmFsdWUgPSBpbmRleCA+IDAgPyBkaXJlY3Rpb25WYWx1ZXNbYnJlYWtwb2ludHNbaW5kZXggLSAxXV0gOiAnY29sdW1uJztcbiAgICAgICAgICBkaXJlY3Rpb25WYWx1ZXNbYnJlYWtwb2ludF0gPSBwcmV2aW91c0RpcmVjdGlvblZhbHVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3Qgc3R5bGVGcm9tUHJvcFZhbHVlID0gKHByb3BWYWx1ZSwgYnJlYWtwb2ludCkgPT4ge1xuICAgICAgaWYgKG93bmVyU3RhdGUudXNlRmxleEdhcCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGdhcDogZ2V0VmFsdWUodHJhbnNmb3JtZXIsIHByb3BWYWx1ZSlcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC8vIFRoZSB1c2VGbGV4R2FwPXtmYWxzZX0gaW1wbGVtZW50IHJlbGllcyBvbiBlYWNoIGNoaWxkIHRvIGdpdmUgdXAgY29udHJvbCBvZiB0aGUgbWFyZ2luLlxuICAgICAgICAvLyBXZSBuZWVkIHRvIHJlc2V0IHRoZSBtYXJnaW4gdG8gYXZvaWQgZG91YmxlIHNwYWNpbmcuXG4gICAgICAgICcmID4gOm5vdChzdHlsZSk6bm90KHN0eWxlKSc6IHtcbiAgICAgICAgICBtYXJnaW46IDBcbiAgICAgICAgfSxcbiAgICAgICAgJyYgPiA6bm90KHN0eWxlKSB+IDpub3Qoc3R5bGUpJzoge1xuICAgICAgICAgIFtgbWFyZ2luJHtnZXRTaWRlRnJvbURpcmVjdGlvbihicmVha3BvaW50ID8gZGlyZWN0aW9uVmFsdWVzW2JyZWFrcG9pbnRdIDogb3duZXJTdGF0ZS5kaXJlY3Rpb24pfWBdOiBnZXRWYWx1ZSh0cmFuc2Zvcm1lciwgcHJvcFZhbHVlKVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH07XG4gICAgc3R5bGVzID0gZGVlcG1lcmdlKHN0eWxlcywgaGFuZGxlQnJlYWtwb2ludHMoe1xuICAgICAgdGhlbWVcbiAgICB9LCBzcGFjaW5nVmFsdWVzLCBzdHlsZUZyb21Qcm9wVmFsdWUpKTtcbiAgfVxuICBzdHlsZXMgPSBtZXJnZUJyZWFrcG9pbnRzSW5PcmRlcih0aGVtZS5icmVha3BvaW50cywgc3R5bGVzKTtcbiAgcmV0dXJuIHN0eWxlcztcbn07XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVTdGFjayhvcHRpb25zID0ge30pIHtcbiAgY29uc3Qge1xuICAgIC8vIFRoaXMgd2lsbCBhbGxvdyBhZGRpbmcgY3VzdG9tIHN0eWxlZCBmbiAoZm9yIGV4YW1wbGUgZm9yIGN1c3RvbSBzeCBzdHlsZSBmdW5jdGlvbilcbiAgICBjcmVhdGVTdHlsZWRDb21wb25lbnQgPSBkZWZhdWx0Q3JlYXRlU3R5bGVkQ29tcG9uZW50LFxuICAgIHVzZVRoZW1lUHJvcHMgPSB1c2VUaGVtZVByb3BzRGVmYXVsdCxcbiAgICBjb21wb25lbnROYW1lID0gJ011aVN0YWNrJ1xuICB9ID0gb3B0aW9ucztcbiAgY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSAoKSA9PiB7XG4gICAgY29uc3Qgc2xvdHMgPSB7XG4gICAgICByb290OiBbJ3Jvb3QnXVxuICAgIH07XG4gICAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBzbG90ID0+IGdlbmVyYXRlVXRpbGl0eUNsYXNzKGNvbXBvbmVudE5hbWUsIHNsb3QpLCB7fSk7XG4gIH07XG4gIGNvbnN0IFN0YWNrUm9vdCA9IGNyZWF0ZVN0eWxlZENvbXBvbmVudChzdHlsZSk7XG4gIGNvbnN0IFN0YWNrID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gR3JpZChpblByb3BzLCByZWYpIHtcbiAgICBjb25zdCB0aGVtZVByb3BzID0gdXNlVGhlbWVQcm9wcyhpblByb3BzKTtcbiAgICBjb25zdCBwcm9wcyA9IGV4dGVuZFN4UHJvcCh0aGVtZVByb3BzKTsgLy8gYGNvbG9yYCB0eXBlIGNvbmZsaWN0cyB3aXRoIGh0bWwgY29sb3IgYXR0cmlidXRlLlxuICAgIGNvbnN0IHtcbiAgICAgICAgY29tcG9uZW50ID0gJ2RpdicsXG4gICAgICAgIGRpcmVjdGlvbiA9ICdjb2x1bW4nLFxuICAgICAgICBzcGFjaW5nID0gMCxcbiAgICAgICAgZGl2aWRlcixcbiAgICAgICAgY2hpbGRyZW4sXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgdXNlRmxleEdhcCA9IGZhbHNlXG4gICAgICB9ID0gcHJvcHMsXG4gICAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICAgIGNvbnN0IG93bmVyU3RhdGUgPSB7XG4gICAgICBkaXJlY3Rpb24sXG4gICAgICBzcGFjaW5nLFxuICAgICAgdXNlRmxleEdhcFxuICAgIH07XG4gICAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKCk7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFN0YWNrUm9vdCwgX2V4dGVuZHMoe1xuICAgICAgYXM6IGNvbXBvbmVudCxcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICByZWY6IHJlZixcbiAgICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSlcbiAgICB9LCBvdGhlciwge1xuICAgICAgY2hpbGRyZW46IGRpdmlkZXIgPyBqb2luQ2hpbGRyZW4oY2hpbGRyZW4sIGRpdmlkZXIpIDogY2hpbGRyZW5cbiAgICB9KSk7XG4gIH0pO1xuICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBTdGFjay5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gICAgZGlyZWN0aW9uOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydjb2x1bW4tcmV2ZXJzZScsICdjb2x1bW4nLCAncm93LXJldmVyc2UnLCAncm93J10pLCBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2YoWydjb2x1bW4tcmV2ZXJzZScsICdjb2x1bW4nLCAncm93LXJldmVyc2UnLCAncm93J10pKSwgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAgIGRpdmlkZXI6IFByb3BUeXBlcy5ub2RlLFxuICAgIHNwYWNpbmc6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSksIFByb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pXG4gIH0gOiB2b2lkIDA7XG4gIHJldHVybiBTdGFjaztcbn0iLCAiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZm9ybWF0TXVpRXJyb3JNZXNzYWdlIGZyb20gXCJAbXVpL3V0aWxzL2Zvcm1hdE11aUVycm9yTWVzc2FnZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiYnJlYWtwb2ludHNcIiwgXCJtaXhpbnNcIiwgXCJzcGFjaW5nXCIsIFwicGFsZXR0ZVwiLCBcInRyYW5zaXRpb25zXCIsIFwidHlwb2dyYXBoeVwiLCBcInNoYXBlXCJdO1xuaW1wb3J0IGRlZXBtZXJnZSBmcm9tICdAbXVpL3V0aWxzL2RlZXBtZXJnZSc7XG5pbXBvcnQgc3R5bGVGdW5jdGlvblN4LCB7IHVuc3RhYmxlX2RlZmF1bHRTeENvbmZpZyBhcyBkZWZhdWx0U3hDb25maWcgfSBmcm9tICdAbXVpL3N5c3RlbS9zdHlsZUZ1bmN0aW9uU3gnO1xuaW1wb3J0IHN5c3RlbUNyZWF0ZVRoZW1lIGZyb20gJ0BtdWkvc3lzdGVtL2NyZWF0ZVRoZW1lJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmltcG9ydCBjcmVhdGVNaXhpbnMgZnJvbSAnLi9jcmVhdGVNaXhpbnMnO1xuaW1wb3J0IGNyZWF0ZVBhbGV0dGUgZnJvbSAnLi9jcmVhdGVQYWxldHRlJztcbmltcG9ydCBjcmVhdGVUeXBvZ3JhcGh5IGZyb20gJy4vY3JlYXRlVHlwb2dyYXBoeSc7XG5pbXBvcnQgc2hhZG93cyBmcm9tICcuL3NoYWRvd3MnO1xuaW1wb3J0IGNyZWF0ZVRyYW5zaXRpb25zIGZyb20gJy4vY3JlYXRlVHJhbnNpdGlvbnMnO1xuaW1wb3J0IHpJbmRleCBmcm9tICcuL3pJbmRleCc7XG5mdW5jdGlvbiBjcmVhdGVUaGVtZShvcHRpb25zID0ge30sIC4uLmFyZ3MpIHtcbiAgY29uc3Qge1xuICAgICAgbWl4aW5zOiBtaXhpbnNJbnB1dCA9IHt9LFxuICAgICAgcGFsZXR0ZTogcGFsZXR0ZUlucHV0ID0ge30sXG4gICAgICB0cmFuc2l0aW9uczogdHJhbnNpdGlvbnNJbnB1dCA9IHt9LFxuICAgICAgdHlwb2dyYXBoeTogdHlwb2dyYXBoeUlucHV0ID0ge31cbiAgICB9ID0gb3B0aW9ucyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKG9wdGlvbnMsIF9leGNsdWRlZCk7XG4gIGlmIChvcHRpb25zLnZhcnMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gYE1VSTogXFxgdmFyc1xcYCBpcyBhIHByaXZhdGUgZmllbGQgdXNlZCBmb3IgQ1NTIHZhcmlhYmxlcyBzdXBwb3J0LlxuUGxlYXNlIHVzZSBhbm90aGVyIG5hbWUuYCA6IF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UoMTgpKTtcbiAgfVxuICBjb25zdCBwYWxldHRlID0gY3JlYXRlUGFsZXR0ZShwYWxldHRlSW5wdXQpO1xuICBjb25zdCBzeXN0ZW1UaGVtZSA9IHN5c3RlbUNyZWF0ZVRoZW1lKG9wdGlvbnMpO1xuICBsZXQgbXVpVGhlbWUgPSBkZWVwbWVyZ2Uoc3lzdGVtVGhlbWUsIHtcbiAgICBtaXhpbnM6IGNyZWF0ZU1peGlucyhzeXN0ZW1UaGVtZS5icmVha3BvaW50cywgbWl4aW5zSW5wdXQpLFxuICAgIHBhbGV0dGUsXG4gICAgLy8gRG9uJ3QgdXNlIFsuLi5zaGFkb3dzXSB1bnRpbCB5b3UndmUgdmVyaWZpZWQgaXRzIHRyYW5zcGlsZWQgY29kZSBpcyBub3QgaW52b2tpbmcgdGhlIGl0ZXJhdG9yIHByb3RvY29sLlxuICAgIHNoYWRvd3M6IHNoYWRvd3Muc2xpY2UoKSxcbiAgICB0eXBvZ3JhcGh5OiBjcmVhdGVUeXBvZ3JhcGh5KHBhbGV0dGUsIHR5cG9ncmFwaHlJbnB1dCksXG4gICAgdHJhbnNpdGlvbnM6IGNyZWF0ZVRyYW5zaXRpb25zKHRyYW5zaXRpb25zSW5wdXQpLFxuICAgIHpJbmRleDogX2V4dGVuZHMoe30sIHpJbmRleClcbiAgfSk7XG4gIG11aVRoZW1lID0gZGVlcG1lcmdlKG11aVRoZW1lLCBvdGhlcik7XG4gIG11aVRoZW1lID0gYXJncy5yZWR1Y2UoKGFjYywgYXJndW1lbnQpID0+IGRlZXBtZXJnZShhY2MsIGFyZ3VtZW50KSwgbXVpVGhlbWUpO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIC8vIFRPRE8gdjY6IFJlZmFjdG9yIHRvIHVzZSBnbG9iYWxTdGF0ZUNsYXNzZXNNYXBwaW5nIGZyb20gQG11aS91dGlscyBvbmNlIGByZWFkT25seWAgc3RhdGUgY2xhc3MgaXMgdXNlZCBpbiBSYXRpbmcgY29tcG9uZW50LlxuICAgIGNvbnN0IHN0YXRlQ2xhc3NlcyA9IFsnYWN0aXZlJywgJ2NoZWNrZWQnLCAnY29tcGxldGVkJywgJ2Rpc2FibGVkJywgJ2Vycm9yJywgJ2V4cGFuZGVkJywgJ2ZvY3VzZWQnLCAnZm9jdXNWaXNpYmxlJywgJ3JlcXVpcmVkJywgJ3NlbGVjdGVkJ107XG4gICAgY29uc3QgdHJhdmVyc2UgPSAobm9kZSwgY29tcG9uZW50KSA9PiB7XG4gICAgICBsZXQga2V5O1xuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ3VhcmQtZm9yLWluLCBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgZm9yIChrZXkgaW4gbm9kZSkge1xuICAgICAgICBjb25zdCBjaGlsZCA9IG5vZGVba2V5XTtcbiAgICAgICAgaWYgKHN0YXRlQ2xhc3Nlcy5pbmRleE9mKGtleSkgIT09IC0xICYmIE9iamVjdC5rZXlzKGNoaWxkKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlQ2xhc3MgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnJywga2V5KTtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoW2BNVUk6IFRoZSBcXGAke2NvbXBvbmVudH1cXGAgY29tcG9uZW50IGluY3JlYXNlcyBgICsgYHRoZSBDU1Mgc3BlY2lmaWNpdHkgb2YgdGhlIFxcYCR7a2V5fVxcYCBpbnRlcm5hbCBzdGF0ZS5gLCAnWW91IGNhbiBub3Qgb3ZlcnJpZGUgaXQgbGlrZSB0aGlzOiAnLCBKU09OLnN0cmluZ2lmeShub2RlLCBudWxsLCAyKSwgJycsIGBJbnN0ZWFkLCB5b3UgbmVlZCB0byB1c2UgdGhlICcmLiR7c3RhdGVDbGFzc30nIHN5bnRheDpgLCBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgIHJvb3Q6IHtcbiAgICAgICAgICAgICAgICBbYCYuJHtzdGF0ZUNsYXNzfWBdOiBjaGlsZFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBudWxsLCAyKSwgJycsICdodHRwczovL211aS5jb20vci9zdGF0ZS1jbGFzc2VzLWd1aWRlJ10uam9pbignXFxuJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBSZW1vdmUgdGhlIHN0eWxlIHRvIHByZXZlbnQgZ2xvYmFsIGNvbmZsaWN0cy5cbiAgICAgICAgICBub2RlW2tleV0gPSB7fTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgT2JqZWN0LmtleXMobXVpVGhlbWUuY29tcG9uZW50cykuZm9yRWFjaChjb21wb25lbnQgPT4ge1xuICAgICAgY29uc3Qgc3R5bGVPdmVycmlkZXMgPSBtdWlUaGVtZS5jb21wb25lbnRzW2NvbXBvbmVudF0uc3R5bGVPdmVycmlkZXM7XG4gICAgICBpZiAoc3R5bGVPdmVycmlkZXMgJiYgY29tcG9uZW50LmluZGV4T2YoJ011aScpID09PSAwKSB7XG4gICAgICAgIHRyYXZlcnNlKHN0eWxlT3ZlcnJpZGVzLCBjb21wb25lbnQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIG11aVRoZW1lLnVuc3RhYmxlX3N4Q29uZmlnID0gX2V4dGVuZHMoe30sIGRlZmF1bHRTeENvbmZpZywgb3RoZXIgPT0gbnVsbCA/IHZvaWQgMCA6IG90aGVyLnVuc3RhYmxlX3N4Q29uZmlnKTtcbiAgbXVpVGhlbWUudW5zdGFibGVfc3ggPSBmdW5jdGlvbiBzeChwcm9wcykge1xuICAgIHJldHVybiBzdHlsZUZ1bmN0aW9uU3goe1xuICAgICAgc3g6IHByb3BzLFxuICAgICAgdGhlbWU6IHRoaXNcbiAgICB9KTtcbiAgfTtcbiAgcmV0dXJuIG11aVRoZW1lO1xufVxubGV0IHdhcm5lZE9uY2UgPSBmYWxzZTtcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNdWlUaGVtZSguLi5hcmdzKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKCF3YXJuZWRPbmNlKSB7XG4gICAgICB3YXJuZWRPbmNlID0gdHJ1ZTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoWydNVUk6IHRoZSBjcmVhdGVNdWlUaGVtZSBmdW5jdGlvbiB3YXMgcmVuYW1lZCB0byBjcmVhdGVUaGVtZS4nLCAnJywgXCJZb3Ugc2hvdWxkIHVzZSBgaW1wb3J0IHsgY3JlYXRlVGhlbWUgfSBmcm9tICdAbXVpL21hdGVyaWFsL3N0eWxlcydgXCJdLmpvaW4oJ1xcbicpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNyZWF0ZVRoZW1lKC4uLmFyZ3MpO1xufVxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlVGhlbWU7IiwgImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlTWl4aW5zKGJyZWFrcG9pbnRzLCBtaXhpbnMpIHtcbiAgcmV0dXJuIF9leHRlbmRzKHtcbiAgICB0b29sYmFyOiB7XG4gICAgICBtaW5IZWlnaHQ6IDU2LFxuICAgICAgW2JyZWFrcG9pbnRzLnVwKCd4cycpXToge1xuICAgICAgICAnQG1lZGlhIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSc6IHtcbiAgICAgICAgICBtaW5IZWlnaHQ6IDQ4XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBbYnJlYWtwb2ludHMudXAoJ3NtJyldOiB7XG4gICAgICAgIG1pbkhlaWdodDogNjRcbiAgICAgIH1cbiAgICB9XG4gIH0sIG1peGlucyk7XG59IiwgImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2Zvcm1hdE11aUVycm9yTWVzc2FnZSBmcm9tIFwiQG11aS91dGlscy9mb3JtYXRNdWlFcnJvck1lc3NhZ2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcIm1vZGVcIiwgXCJjb250cmFzdFRocmVzaG9sZFwiLCBcInRvbmFsT2Zmc2V0XCJdO1xuaW1wb3J0IGRlZXBtZXJnZSBmcm9tICdAbXVpL3V0aWxzL2RlZXBtZXJnZSc7XG5pbXBvcnQgeyBkYXJrZW4sIGdldENvbnRyYXN0UmF0aW8sIGxpZ2h0ZW4gfSBmcm9tICdAbXVpL3N5c3RlbS9jb2xvck1hbmlwdWxhdG9yJztcbmltcG9ydCBjb21tb24gZnJvbSAnLi4vY29sb3JzL2NvbW1vbic7XG5pbXBvcnQgZ3JleSBmcm9tICcuLi9jb2xvcnMvZ3JleSc7XG5pbXBvcnQgcHVycGxlIGZyb20gJy4uL2NvbG9ycy9wdXJwbGUnO1xuaW1wb3J0IHJlZCBmcm9tICcuLi9jb2xvcnMvcmVkJztcbmltcG9ydCBvcmFuZ2UgZnJvbSAnLi4vY29sb3JzL29yYW5nZSc7XG5pbXBvcnQgYmx1ZSBmcm9tICcuLi9jb2xvcnMvYmx1ZSc7XG5pbXBvcnQgbGlnaHRCbHVlIGZyb20gJy4uL2NvbG9ycy9saWdodEJsdWUnO1xuaW1wb3J0IGdyZWVuIGZyb20gJy4uL2NvbG9ycy9ncmVlbic7XG5leHBvcnQgY29uc3QgbGlnaHQgPSB7XG4gIC8vIFRoZSBjb2xvcnMgdXNlZCB0byBzdHlsZSB0aGUgdGV4dC5cbiAgdGV4dDoge1xuICAgIC8vIFRoZSBtb3N0IGltcG9ydGFudCB0ZXh0LlxuICAgIHByaW1hcnk6ICdyZ2JhKDAsIDAsIDAsIDAuODcpJyxcbiAgICAvLyBTZWNvbmRhcnkgdGV4dC5cbiAgICBzZWNvbmRhcnk6ICdyZ2JhKDAsIDAsIDAsIDAuNiknLFxuICAgIC8vIERpc2FibGVkIHRleHQgaGF2ZSBldmVuIGxvd2VyIHZpc3VhbCBwcm9taW5lbmNlLlxuICAgIGRpc2FibGVkOiAncmdiYSgwLCAwLCAwLCAwLjM4KSdcbiAgfSxcbiAgLy8gVGhlIGNvbG9yIHVzZWQgdG8gZGl2aWRlIGRpZmZlcmVudCBlbGVtZW50cy5cbiAgZGl2aWRlcjogJ3JnYmEoMCwgMCwgMCwgMC4xMiknLFxuICAvLyBUaGUgYmFja2dyb3VuZCBjb2xvcnMgdXNlZCB0byBzdHlsZSB0aGUgc3VyZmFjZXMuXG4gIC8vIENvbnNpc3RlbmN5IGJldHdlZW4gdGhlc2UgdmFsdWVzIGlzIGltcG9ydGFudC5cbiAgYmFja2dyb3VuZDoge1xuICAgIHBhcGVyOiBjb21tb24ud2hpdGUsXG4gICAgZGVmYXVsdDogY29tbW9uLndoaXRlXG4gIH0sXG4gIC8vIFRoZSBjb2xvcnMgdXNlZCB0byBzdHlsZSB0aGUgYWN0aW9uIGVsZW1lbnRzLlxuICBhY3Rpb246IHtcbiAgICAvLyBUaGUgY29sb3Igb2YgYW4gYWN0aXZlIGFjdGlvbiBsaWtlIGFuIGljb24gYnV0dG9uLlxuICAgIGFjdGl2ZTogJ3JnYmEoMCwgMCwgMCwgMC41NCknLFxuICAgIC8vIFRoZSBjb2xvciBvZiBhbiBob3ZlcmVkIGFjdGlvbi5cbiAgICBob3ZlcjogJ3JnYmEoMCwgMCwgMCwgMC4wNCknLFxuICAgIGhvdmVyT3BhY2l0eTogMC4wNCxcbiAgICAvLyBUaGUgY29sb3Igb2YgYSBzZWxlY3RlZCBhY3Rpb24uXG4gICAgc2VsZWN0ZWQ6ICdyZ2JhKDAsIDAsIDAsIDAuMDgpJyxcbiAgICBzZWxlY3RlZE9wYWNpdHk6IDAuMDgsXG4gICAgLy8gVGhlIGNvbG9yIG9mIGEgZGlzYWJsZWQgYWN0aW9uLlxuICAgIGRpc2FibGVkOiAncmdiYSgwLCAwLCAwLCAwLjI2KScsXG4gICAgLy8gVGhlIGJhY2tncm91bmQgY29sb3Igb2YgYSBkaXNhYmxlZCBhY3Rpb24uXG4gICAgZGlzYWJsZWRCYWNrZ3JvdW5kOiAncmdiYSgwLCAwLCAwLCAwLjEyKScsXG4gICAgZGlzYWJsZWRPcGFjaXR5OiAwLjM4LFxuICAgIGZvY3VzOiAncmdiYSgwLCAwLCAwLCAwLjEyKScsXG4gICAgZm9jdXNPcGFjaXR5OiAwLjEyLFxuICAgIGFjdGl2YXRlZE9wYWNpdHk6IDAuMTJcbiAgfVxufTtcbmV4cG9ydCBjb25zdCBkYXJrID0ge1xuICB0ZXh0OiB7XG4gICAgcHJpbWFyeTogY29tbW9uLndoaXRlLFxuICAgIHNlY29uZGFyeTogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC43KScsXG4gICAgZGlzYWJsZWQ6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSknLFxuICAgIGljb246ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSknXG4gIH0sXG4gIGRpdmlkZXI6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpJyxcbiAgYmFja2dyb3VuZDoge1xuICAgIHBhcGVyOiAnIzEyMTIxMicsXG4gICAgZGVmYXVsdDogJyMxMjEyMTInXG4gIH0sXG4gIGFjdGlvbjoge1xuICAgIGFjdGl2ZTogY29tbW9uLndoaXRlLFxuICAgIGhvdmVyOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KScsXG4gICAgaG92ZXJPcGFjaXR5OiAwLjA4LFxuICAgIHNlbGVjdGVkOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE2KScsXG4gICAgc2VsZWN0ZWRPcGFjaXR5OiAwLjE2LFxuICAgIGRpc2FibGVkOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjMpJyxcbiAgICBkaXNhYmxlZEJhY2tncm91bmQ6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpJyxcbiAgICBkaXNhYmxlZE9wYWNpdHk6IDAuMzgsXG4gICAgZm9jdXM6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpJyxcbiAgICBmb2N1c09wYWNpdHk6IDAuMTIsXG4gICAgYWN0aXZhdGVkT3BhY2l0eTogMC4yNFxuICB9XG59O1xuZnVuY3Rpb24gYWRkTGlnaHRPckRhcmsoaW50ZW50LCBkaXJlY3Rpb24sIHNoYWRlLCB0b25hbE9mZnNldCkge1xuICBjb25zdCB0b25hbE9mZnNldExpZ2h0ID0gdG9uYWxPZmZzZXQubGlnaHQgfHwgdG9uYWxPZmZzZXQ7XG4gIGNvbnN0IHRvbmFsT2Zmc2V0RGFyayA9IHRvbmFsT2Zmc2V0LmRhcmsgfHwgdG9uYWxPZmZzZXQgKiAxLjU7XG4gIGlmICghaW50ZW50W2RpcmVjdGlvbl0pIHtcbiAgICBpZiAoaW50ZW50Lmhhc093blByb3BlcnR5KHNoYWRlKSkge1xuICAgICAgaW50ZW50W2RpcmVjdGlvbl0gPSBpbnRlbnRbc2hhZGVdO1xuICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSAnbGlnaHQnKSB7XG4gICAgICBpbnRlbnQubGlnaHQgPSBsaWdodGVuKGludGVudC5tYWluLCB0b25hbE9mZnNldExpZ2h0KTtcbiAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gJ2RhcmsnKSB7XG4gICAgICBpbnRlbnQuZGFyayA9IGRhcmtlbihpbnRlbnQubWFpbiwgdG9uYWxPZmZzZXREYXJrKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGdldERlZmF1bHRQcmltYXJ5KG1vZGUgPSAnbGlnaHQnKSB7XG4gIGlmIChtb2RlID09PSAnZGFyaycpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWFpbjogYmx1ZVsyMDBdLFxuICAgICAgbGlnaHQ6IGJsdWVbNTBdLFxuICAgICAgZGFyazogYmx1ZVs0MDBdXG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG1haW46IGJsdWVbNzAwXSxcbiAgICBsaWdodDogYmx1ZVs0MDBdLFxuICAgIGRhcms6IGJsdWVbODAwXVxuICB9O1xufVxuZnVuY3Rpb24gZ2V0RGVmYXVsdFNlY29uZGFyeShtb2RlID0gJ2xpZ2h0Jykge1xuICBpZiAobW9kZSA9PT0gJ2RhcmsnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1haW46IHB1cnBsZVsyMDBdLFxuICAgICAgbGlnaHQ6IHB1cnBsZVs1MF0sXG4gICAgICBkYXJrOiBwdXJwbGVbNDAwXVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBtYWluOiBwdXJwbGVbNTAwXSxcbiAgICBsaWdodDogcHVycGxlWzMwMF0sXG4gICAgZGFyazogcHVycGxlWzcwMF1cbiAgfTtcbn1cbmZ1bmN0aW9uIGdldERlZmF1bHRFcnJvcihtb2RlID0gJ2xpZ2h0Jykge1xuICBpZiAobW9kZSA9PT0gJ2RhcmsnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1haW46IHJlZFs1MDBdLFxuICAgICAgbGlnaHQ6IHJlZFszMDBdLFxuICAgICAgZGFyazogcmVkWzcwMF1cbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbWFpbjogcmVkWzcwMF0sXG4gICAgbGlnaHQ6IHJlZFs0MDBdLFxuICAgIGRhcms6IHJlZFs4MDBdXG4gIH07XG59XG5mdW5jdGlvbiBnZXREZWZhdWx0SW5mbyhtb2RlID0gJ2xpZ2h0Jykge1xuICBpZiAobW9kZSA9PT0gJ2RhcmsnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1haW46IGxpZ2h0Qmx1ZVs0MDBdLFxuICAgICAgbGlnaHQ6IGxpZ2h0Qmx1ZVszMDBdLFxuICAgICAgZGFyazogbGlnaHRCbHVlWzcwMF1cbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbWFpbjogbGlnaHRCbHVlWzcwMF0sXG4gICAgbGlnaHQ6IGxpZ2h0Qmx1ZVs1MDBdLFxuICAgIGRhcms6IGxpZ2h0Qmx1ZVs5MDBdXG4gIH07XG59XG5mdW5jdGlvbiBnZXREZWZhdWx0U3VjY2Vzcyhtb2RlID0gJ2xpZ2h0Jykge1xuICBpZiAobW9kZSA9PT0gJ2RhcmsnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1haW46IGdyZWVuWzQwMF0sXG4gICAgICBsaWdodDogZ3JlZW5bMzAwXSxcbiAgICAgIGRhcms6IGdyZWVuWzcwMF1cbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbWFpbjogZ3JlZW5bODAwXSxcbiAgICBsaWdodDogZ3JlZW5bNTAwXSxcbiAgICBkYXJrOiBncmVlbls5MDBdXG4gIH07XG59XG5mdW5jdGlvbiBnZXREZWZhdWx0V2FybmluZyhtb2RlID0gJ2xpZ2h0Jykge1xuICBpZiAobW9kZSA9PT0gJ2RhcmsnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1haW46IG9yYW5nZVs0MDBdLFxuICAgICAgbGlnaHQ6IG9yYW5nZVszMDBdLFxuICAgICAgZGFyazogb3JhbmdlWzcwMF1cbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbWFpbjogJyNlZDZjMDInLFxuICAgIC8vIGNsb3Nlc3QgdG8gb3JhbmdlWzgwMF0gdGhhdCBwYXNzIDM6MS5cbiAgICBsaWdodDogb3JhbmdlWzUwMF0sXG4gICAgZGFyazogb3JhbmdlWzkwMF1cbiAgfTtcbn1cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVBhbGV0dGUocGFsZXR0ZSkge1xuICBjb25zdCB7XG4gICAgICBtb2RlID0gJ2xpZ2h0JyxcbiAgICAgIGNvbnRyYXN0VGhyZXNob2xkID0gMyxcbiAgICAgIHRvbmFsT2Zmc2V0ID0gMC4yXG4gICAgfSA9IHBhbGV0dGUsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwYWxldHRlLCBfZXhjbHVkZWQpO1xuICBjb25zdCBwcmltYXJ5ID0gcGFsZXR0ZS5wcmltYXJ5IHx8IGdldERlZmF1bHRQcmltYXJ5KG1vZGUpO1xuICBjb25zdCBzZWNvbmRhcnkgPSBwYWxldHRlLnNlY29uZGFyeSB8fCBnZXREZWZhdWx0U2Vjb25kYXJ5KG1vZGUpO1xuICBjb25zdCBlcnJvciA9IHBhbGV0dGUuZXJyb3IgfHwgZ2V0RGVmYXVsdEVycm9yKG1vZGUpO1xuICBjb25zdCBpbmZvID0gcGFsZXR0ZS5pbmZvIHx8IGdldERlZmF1bHRJbmZvKG1vZGUpO1xuICBjb25zdCBzdWNjZXNzID0gcGFsZXR0ZS5zdWNjZXNzIHx8IGdldERlZmF1bHRTdWNjZXNzKG1vZGUpO1xuICBjb25zdCB3YXJuaW5nID0gcGFsZXR0ZS53YXJuaW5nIHx8IGdldERlZmF1bHRXYXJuaW5nKG1vZGUpO1xuXG4gIC8vIFVzZSB0aGUgc2FtZSBsb2dpYyBhc1xuICAvLyBCb290c3RyYXA6IGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iLzFkNmUzNzEwZGQ0NDdkZTFhMjAwZjI5ZThmYTUyMWY4YTA5MDhmNzAvc2Nzcy9fZnVuY3Rpb25zLnNjc3MjTDU5XG4gIC8vIGFuZCBtYXRlcmlhbC1jb21wb25lbnRzLXdlYiBodHRwczovL2dpdGh1Yi5jb20vbWF0ZXJpYWwtY29tcG9uZW50cy9tYXRlcmlhbC1jb21wb25lbnRzLXdlYi9ibG9iL2FjNDZiODg2M2M0ZGFiOWZjMjJjNGM2NjJkYzZiZDFiNjVkZDY1MmYvcGFja2FnZXMvbWRjLXRoZW1lL19mdW5jdGlvbnMuc2NzcyNMNTRcbiAgZnVuY3Rpb24gZ2V0Q29udHJhc3RUZXh0KGJhY2tncm91bmQpIHtcbiAgICBjb25zdCBjb250cmFzdFRleHQgPSBnZXRDb250cmFzdFJhdGlvKGJhY2tncm91bmQsIGRhcmsudGV4dC5wcmltYXJ5KSA+PSBjb250cmFzdFRocmVzaG9sZCA/IGRhcmsudGV4dC5wcmltYXJ5IDogbGlnaHQudGV4dC5wcmltYXJ5O1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBjb25zdCBjb250cmFzdCA9IGdldENvbnRyYXN0UmF0aW8oYmFja2dyb3VuZCwgY29udHJhc3RUZXh0KTtcbiAgICAgIGlmIChjb250cmFzdCA8IDMpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihbYE1VSTogVGhlIGNvbnRyYXN0IHJhdGlvIG9mICR7Y29udHJhc3R9OjEgZm9yICR7Y29udHJhc3RUZXh0fSBvbiAke2JhY2tncm91bmR9YCwgJ2ZhbGxzIGJlbG93IHRoZSBXQ0FHIHJlY29tbWVuZGVkIGFic29sdXRlIG1pbmltdW0gY29udHJhc3QgcmF0aW8gb2YgMzoxLicsICdodHRwczovL3d3dy53My5vcmcvVFIvMjAwOC9SRUMtV0NBRzIwLTIwMDgxMjExLyN2aXN1YWwtYXVkaW8tY29udHJhc3QtY29udHJhc3QnXS5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb250cmFzdFRleHQ7XG4gIH1cbiAgY29uc3QgYXVnbWVudENvbG9yID0gKHtcbiAgICBjb2xvcixcbiAgICBuYW1lLFxuICAgIG1haW5TaGFkZSA9IDUwMCxcbiAgICBsaWdodFNoYWRlID0gMzAwLFxuICAgIGRhcmtTaGFkZSA9IDcwMFxuICB9KSA9PiB7XG4gICAgY29sb3IgPSBfZXh0ZW5kcyh7fSwgY29sb3IpO1xuICAgIGlmICghY29sb3IubWFpbiAmJiBjb2xvclttYWluU2hhZGVdKSB7XG4gICAgICBjb2xvci5tYWluID0gY29sb3JbbWFpblNoYWRlXTtcbiAgICB9XG4gICAgaWYgKCFjb2xvci5oYXNPd25Qcm9wZXJ0eSgnbWFpbicpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gYE1VSTogVGhlIGNvbG9yJHtuYW1lID8gYCAoJHtuYW1lfSlgIDogJyd9IHByb3ZpZGVkIHRvIGF1Z21lbnRDb2xvcihjb2xvcikgaXMgaW52YWxpZC5cblRoZSBjb2xvciBvYmplY3QgbmVlZHMgdG8gaGF2ZSBhIFxcYG1haW5cXGAgcHJvcGVydHkgb3IgYSBcXGAke21haW5TaGFkZX1cXGAgcHJvcGVydHkuYCA6IF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UoMTEsIG5hbWUgPyBgICgke25hbWV9KWAgOiAnJywgbWFpblNoYWRlKSk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgY29sb3IubWFpbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBgTVVJOiBUaGUgY29sb3Ike25hbWUgPyBgICgke25hbWV9KWAgOiAnJ30gcHJvdmlkZWQgdG8gYXVnbWVudENvbG9yKGNvbG9yKSBpcyBpbnZhbGlkLlxuXFxgY29sb3IubWFpblxcYCBzaG91bGQgYmUgYSBzdHJpbmcsIGJ1dCBcXGAke0pTT04uc3RyaW5naWZ5KGNvbG9yLm1haW4pfVxcYCB3YXMgcHJvdmlkZWQgaW5zdGVhZC5cblxuRGlkIHlvdSBpbnRlbmQgdG8gdXNlIG9uZSBvZiB0aGUgZm9sbG93aW5nIGFwcHJvYWNoZXM/XG5cbmltcG9ydCB7IGdyZWVuIH0gZnJvbSBcIkBtdWkvbWF0ZXJpYWwvY29sb3JzXCI7XG5cbmNvbnN0IHRoZW1lMSA9IGNyZWF0ZVRoZW1lKHsgcGFsZXR0ZToge1xuICBwcmltYXJ5OiBncmVlbixcbn0gfSk7XG5cbmNvbnN0IHRoZW1lMiA9IGNyZWF0ZVRoZW1lKHsgcGFsZXR0ZToge1xuICBwcmltYXJ5OiB7IG1haW46IGdyZWVuWzUwMF0gfSxcbn0gfSk7YCA6IF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UoMTIsIG5hbWUgPyBgICgke25hbWV9KWAgOiAnJywgSlNPTi5zdHJpbmdpZnkoY29sb3IubWFpbikpKTtcbiAgICB9XG4gICAgYWRkTGlnaHRPckRhcmsoY29sb3IsICdsaWdodCcsIGxpZ2h0U2hhZGUsIHRvbmFsT2Zmc2V0KTtcbiAgICBhZGRMaWdodE9yRGFyayhjb2xvciwgJ2RhcmsnLCBkYXJrU2hhZGUsIHRvbmFsT2Zmc2V0KTtcbiAgICBpZiAoIWNvbG9yLmNvbnRyYXN0VGV4dCkge1xuICAgICAgY29sb3IuY29udHJhc3RUZXh0ID0gZ2V0Q29udHJhc3RUZXh0KGNvbG9yLm1haW4pO1xuICAgIH1cbiAgICByZXR1cm4gY29sb3I7XG4gIH07XG4gIGNvbnN0IG1vZGVzID0ge1xuICAgIGRhcmssXG4gICAgbGlnaHRcbiAgfTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAoIW1vZGVzW21vZGVdKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBNVUk6IFRoZSBwYWxldHRlIG1vZGUgXFxgJHttb2RlfVxcYCBpcyBub3Qgc3VwcG9ydGVkLmApO1xuICAgIH1cbiAgfVxuICBjb25zdCBwYWxldHRlT3V0cHV0ID0gZGVlcG1lcmdlKF9leHRlbmRzKHtcbiAgICAvLyBBIGNvbGxlY3Rpb24gb2YgY29tbW9uIGNvbG9ycy5cbiAgICBjb21tb246IF9leHRlbmRzKHt9LCBjb21tb24pLFxuICAgIC8vIHByZXZlbnQgbXV0YWJsZSBvYmplY3QuXG4gICAgLy8gVGhlIHBhbGV0dGUgbW9kZSwgY2FuIGJlIGxpZ2h0IG9yIGRhcmsuXG4gICAgbW9kZSxcbiAgICAvLyBUaGUgY29sb3JzIHVzZWQgdG8gcmVwcmVzZW50IHByaW1hcnkgaW50ZXJmYWNlIGVsZW1lbnRzIGZvciBhIHVzZXIuXG4gICAgcHJpbWFyeTogYXVnbWVudENvbG9yKHtcbiAgICAgIGNvbG9yOiBwcmltYXJ5LFxuICAgICAgbmFtZTogJ3ByaW1hcnknXG4gICAgfSksXG4gICAgLy8gVGhlIGNvbG9ycyB1c2VkIHRvIHJlcHJlc2VudCBzZWNvbmRhcnkgaW50ZXJmYWNlIGVsZW1lbnRzIGZvciBhIHVzZXIuXG4gICAgc2Vjb25kYXJ5OiBhdWdtZW50Q29sb3Ioe1xuICAgICAgY29sb3I6IHNlY29uZGFyeSxcbiAgICAgIG5hbWU6ICdzZWNvbmRhcnknLFxuICAgICAgbWFpblNoYWRlOiAnQTQwMCcsXG4gICAgICBsaWdodFNoYWRlOiAnQTIwMCcsXG4gICAgICBkYXJrU2hhZGU6ICdBNzAwJ1xuICAgIH0pLFxuICAgIC8vIFRoZSBjb2xvcnMgdXNlZCB0byByZXByZXNlbnQgaW50ZXJmYWNlIGVsZW1lbnRzIHRoYXQgdGhlIHVzZXIgc2hvdWxkIGJlIG1hZGUgYXdhcmUgb2YuXG4gICAgZXJyb3I6IGF1Z21lbnRDb2xvcih7XG4gICAgICBjb2xvcjogZXJyb3IsXG4gICAgICBuYW1lOiAnZXJyb3InXG4gICAgfSksXG4gICAgLy8gVGhlIGNvbG9ycyB1c2VkIHRvIHJlcHJlc2VudCBwb3RlbnRpYWxseSBkYW5nZXJvdXMgYWN0aW9ucyBvciBpbXBvcnRhbnQgbWVzc2FnZXMuXG4gICAgd2FybmluZzogYXVnbWVudENvbG9yKHtcbiAgICAgIGNvbG9yOiB3YXJuaW5nLFxuICAgICAgbmFtZTogJ3dhcm5pbmcnXG4gICAgfSksXG4gICAgLy8gVGhlIGNvbG9ycyB1c2VkIHRvIHByZXNlbnQgaW5mb3JtYXRpb24gdG8gdGhlIHVzZXIgdGhhdCBpcyBuZXV0cmFsIGFuZCBub3QgbmVjZXNzYXJpbHkgaW1wb3J0YW50LlxuICAgIGluZm86IGF1Z21lbnRDb2xvcih7XG4gICAgICBjb2xvcjogaW5mbyxcbiAgICAgIG5hbWU6ICdpbmZvJ1xuICAgIH0pLFxuICAgIC8vIFRoZSBjb2xvcnMgdXNlZCB0byBpbmRpY2F0ZSB0aGUgc3VjY2Vzc2Z1bCBjb21wbGV0aW9uIG9mIGFuIGFjdGlvbiB0aGF0IHVzZXIgdHJpZ2dlcmVkLlxuICAgIHN1Y2Nlc3M6IGF1Z21lbnRDb2xvcih7XG4gICAgICBjb2xvcjogc3VjY2VzcyxcbiAgICAgIG5hbWU6ICdzdWNjZXNzJ1xuICAgIH0pLFxuICAgIC8vIFRoZSBncmV5IGNvbG9ycy5cbiAgICBncmV5LFxuICAgIC8vIFVzZWQgYnkgYGdldENvbnRyYXN0VGV4dCgpYCB0byBtYXhpbWl6ZSB0aGUgY29udHJhc3QgYmV0d2VlblxuICAgIC8vIHRoZSBiYWNrZ3JvdW5kIGFuZCB0aGUgdGV4dC5cbiAgICBjb250cmFzdFRocmVzaG9sZCxcbiAgICAvLyBUYWtlcyBhIGJhY2tncm91bmQgY29sb3IgYW5kIHJldHVybnMgdGhlIHRleHQgY29sb3IgdGhhdCBtYXhpbWl6ZXMgdGhlIGNvbnRyYXN0LlxuICAgIGdldENvbnRyYXN0VGV4dCxcbiAgICAvLyBHZW5lcmF0ZSBhIHJpY2ggY29sb3Igb2JqZWN0LlxuICAgIGF1Z21lbnRDb2xvcixcbiAgICAvLyBVc2VkIGJ5IHRoZSBmdW5jdGlvbnMgYmVsb3cgdG8gc2hpZnQgYSBjb2xvcidzIGx1bWluYW5jZSBieSBhcHByb3hpbWF0ZWx5XG4gICAgLy8gdHdvIGluZGV4ZXMgd2l0aGluIGl0cyB0b25hbCBwYWxldHRlLlxuICAgIC8vIEUuZy4sIHNoaWZ0IGZyb20gUmVkIDUwMCB0byBSZWQgMzAwIG9yIFJlZCA3MDAuXG4gICAgdG9uYWxPZmZzZXRcbiAgfSwgbW9kZXNbbW9kZV0pLCBvdGhlcik7XG4gIHJldHVybiBwYWxldHRlT3V0cHV0O1xufSIsICJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiZm9udEZhbWlseVwiLCBcImZvbnRTaXplXCIsIFwiZm9udFdlaWdodExpZ2h0XCIsIFwiZm9udFdlaWdodFJlZ3VsYXJcIiwgXCJmb250V2VpZ2h0TWVkaXVtXCIsIFwiZm9udFdlaWdodEJvbGRcIiwgXCJodG1sRm9udFNpemVcIiwgXCJhbGxWYXJpYW50c1wiLCBcInB4VG9SZW1cIl07XG5pbXBvcnQgZGVlcG1lcmdlIGZyb20gJ0BtdWkvdXRpbHMvZGVlcG1lcmdlJztcbmZ1bmN0aW9uIHJvdW5kKHZhbHVlKSB7XG4gIHJldHVybiBNYXRoLnJvdW5kKHZhbHVlICogMWU1KSAvIDFlNTtcbn1cbmNvbnN0IGNhc2VBbGxDYXBzID0ge1xuICB0ZXh0VHJhbnNmb3JtOiAndXBwZXJjYXNlJ1xufTtcbmNvbnN0IGRlZmF1bHRGb250RmFtaWx5ID0gJ1wiUm9ib3RvXCIsIFwiSGVsdmV0aWNhXCIsIFwiQXJpYWxcIiwgc2Fucy1zZXJpZic7XG5cbi8qKlxuICogQHNlZSBAbGlua3todHRwczovL20yLm1hdGVyaWFsLmlvL2Rlc2lnbi90eXBvZ3JhcGh5L3RoZS10eXBlLXN5c3RlbS5odG1sfVxuICogQHNlZSBAbGlua3todHRwczovL20yLm1hdGVyaWFsLmlvL2Rlc2lnbi90eXBvZ3JhcGh5L3VuZGVyc3RhbmRpbmctdHlwb2dyYXBoeS5odG1sfVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVUeXBvZ3JhcGh5KHBhbGV0dGUsIHR5cG9ncmFwaHkpIHtcbiAgY29uc3QgX3JlZiA9IHR5cGVvZiB0eXBvZ3JhcGh5ID09PSAnZnVuY3Rpb24nID8gdHlwb2dyYXBoeShwYWxldHRlKSA6IHR5cG9ncmFwaHksXG4gICAge1xuICAgICAgZm9udEZhbWlseSA9IGRlZmF1bHRGb250RmFtaWx5LFxuICAgICAgLy8gVGhlIGRlZmF1bHQgZm9udCBzaXplIG9mIHRoZSBNYXRlcmlhbCBTcGVjaWZpY2F0aW9uLlxuICAgICAgZm9udFNpemUgPSAxNCxcbiAgICAgIC8vIHB4XG4gICAgICBmb250V2VpZ2h0TGlnaHQgPSAzMDAsXG4gICAgICBmb250V2VpZ2h0UmVndWxhciA9IDQwMCxcbiAgICAgIGZvbnRXZWlnaHRNZWRpdW0gPSA1MDAsXG4gICAgICBmb250V2VpZ2h0Qm9sZCA9IDcwMCxcbiAgICAgIC8vIFRlbGwgTVVJIHdoYXQncyB0aGUgZm9udC1zaXplIG9uIHRoZSBodG1sIGVsZW1lbnQuXG4gICAgICAvLyAxNnB4IGlzIHRoZSBkZWZhdWx0IGZvbnQtc2l6ZSB1c2VkIGJ5IGJyb3dzZXJzLlxuICAgICAgaHRtbEZvbnRTaXplID0gMTYsXG4gICAgICAvLyBBcHBseSB0aGUgQ1NTIHByb3BlcnRpZXMgdG8gYWxsIHRoZSB2YXJpYW50cy5cbiAgICAgIGFsbFZhcmlhbnRzLFxuICAgICAgcHhUb1JlbTogcHhUb1JlbTJcbiAgICB9ID0gX3JlZixcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKF9yZWYsIF9leGNsdWRlZCk7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKHR5cGVvZiBmb250U2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ01VSTogYGZvbnRTaXplYCBpcyByZXF1aXJlZCB0byBiZSBhIG51bWJlci4nKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBodG1sRm9udFNpemUgIT09ICdudW1iZXInKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdNVUk6IGBodG1sRm9udFNpemVgIGlzIHJlcXVpcmVkIHRvIGJlIGEgbnVtYmVyLicpO1xuICAgIH1cbiAgfVxuICBjb25zdCBjb2VmID0gZm9udFNpemUgLyAxNDtcbiAgY29uc3QgcHhUb1JlbSA9IHB4VG9SZW0yIHx8IChzaXplID0+IGAke3NpemUgLyBodG1sRm9udFNpemUgKiBjb2VmfXJlbWApO1xuICBjb25zdCBidWlsZFZhcmlhbnQgPSAoZm9udFdlaWdodCwgc2l6ZSwgbGluZUhlaWdodCwgbGV0dGVyU3BhY2luZywgY2FzaW5nKSA9PiBfZXh0ZW5kcyh7XG4gICAgZm9udEZhbWlseSxcbiAgICBmb250V2VpZ2h0LFxuICAgIGZvbnRTaXplOiBweFRvUmVtKHNpemUpLFxuICAgIC8vIFVuaXRsZXNzIGZvbGxvd2luZyBodHRwczovL21leWVyd2ViLmNvbS9lcmljL3Rob3VnaHRzLzIwMDYvMDIvMDgvdW5pdGxlc3MtbGluZS1oZWlnaHRzL1xuICAgIGxpbmVIZWlnaHRcbiAgfSwgZm9udEZhbWlseSA9PT0gZGVmYXVsdEZvbnRGYW1pbHkgPyB7XG4gICAgbGV0dGVyU3BhY2luZzogYCR7cm91bmQobGV0dGVyU3BhY2luZyAvIHNpemUpfWVtYFxuICB9IDoge30sIGNhc2luZywgYWxsVmFyaWFudHMpO1xuICBjb25zdCB2YXJpYW50cyA9IHtcbiAgICBoMTogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRMaWdodCwgOTYsIDEuMTY3LCAtMS41KSxcbiAgICBoMjogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRMaWdodCwgNjAsIDEuMiwgLTAuNSksXG4gICAgaDM6IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0UmVndWxhciwgNDgsIDEuMTY3LCAwKSxcbiAgICBoNDogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRSZWd1bGFyLCAzNCwgMS4yMzUsIDAuMjUpLFxuICAgIGg1OiBidWlsZFZhcmlhbnQoZm9udFdlaWdodFJlZ3VsYXIsIDI0LCAxLjMzNCwgMCksXG4gICAgaDY6IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0TWVkaXVtLCAyMCwgMS42LCAwLjE1KSxcbiAgICBzdWJ0aXRsZTE6IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0UmVndWxhciwgMTYsIDEuNzUsIDAuMTUpLFxuICAgIHN1YnRpdGxlMjogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRNZWRpdW0sIDE0LCAxLjU3LCAwLjEpLFxuICAgIGJvZHkxOiBidWlsZFZhcmlhbnQoZm9udFdlaWdodFJlZ3VsYXIsIDE2LCAxLjUsIDAuMTUpLFxuICAgIGJvZHkyOiBidWlsZFZhcmlhbnQoZm9udFdlaWdodFJlZ3VsYXIsIDE0LCAxLjQzLCAwLjE1KSxcbiAgICBidXR0b246IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0TWVkaXVtLCAxNCwgMS43NSwgMC40LCBjYXNlQWxsQ2FwcyksXG4gICAgY2FwdGlvbjogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRSZWd1bGFyLCAxMiwgMS42NiwgMC40KSxcbiAgICBvdmVybGluZTogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRSZWd1bGFyLCAxMiwgMi42NiwgMSwgY2FzZUFsbENhcHMpLFxuICAgIC8vIFRPRE8gdjY6IFJlbW92ZSBoYW5kbGluZyBvZiAnaW5oZXJpdCcgdmFyaWFudCBmcm9tIHRoZSB0aGVtZSBhcyBpdCBpcyBhbHJlYWR5IGhhbmRsZWQgaW4gTWF0ZXJpYWwgVUkncyBUeXBvZ3JhcGh5IGNvbXBvbmVudC4gQWxzbywgcmVtZW1iZXIgdG8gcmVtb3ZlIHRoZSBhc3NvY2lhdGVkIHR5cGVzLlxuICAgIGluaGVyaXQ6IHtcbiAgICAgIGZvbnRGYW1pbHk6ICdpbmhlcml0JyxcbiAgICAgIGZvbnRXZWlnaHQ6ICdpbmhlcml0JyxcbiAgICAgIGZvbnRTaXplOiAnaW5oZXJpdCcsXG4gICAgICBsaW5lSGVpZ2h0OiAnaW5oZXJpdCcsXG4gICAgICBsZXR0ZXJTcGFjaW5nOiAnaW5oZXJpdCdcbiAgICB9XG4gIH07XG4gIHJldHVybiBkZWVwbWVyZ2UoX2V4dGVuZHMoe1xuICAgIGh0bWxGb250U2l6ZSxcbiAgICBweFRvUmVtLFxuICAgIGZvbnRGYW1pbHksXG4gICAgZm9udFNpemUsXG4gICAgZm9udFdlaWdodExpZ2h0LFxuICAgIGZvbnRXZWlnaHRSZWd1bGFyLFxuICAgIGZvbnRXZWlnaHRNZWRpdW0sXG4gICAgZm9udFdlaWdodEJvbGRcbiAgfSwgdmFyaWFudHMpLCBvdGhlciwge1xuICAgIGNsb25lOiBmYWxzZSAvLyBObyBuZWVkIHRvIGNsb25lIGRlZXBcbiAgfSk7XG59IiwgImNvbnN0IHNoYWRvd0tleVVtYnJhT3BhY2l0eSA9IDAuMjtcbmNvbnN0IHNoYWRvd0tleVBlbnVtYnJhT3BhY2l0eSA9IDAuMTQ7XG5jb25zdCBzaGFkb3dBbWJpZW50U2hhZG93T3BhY2l0eSA9IDAuMTI7XG5mdW5jdGlvbiBjcmVhdGVTaGFkb3coLi4ucHgpIHtcbiAgcmV0dXJuIFtgJHtweFswXX1weCAke3B4WzFdfXB4ICR7cHhbMl19cHggJHtweFszXX1weCByZ2JhKDAsMCwwLCR7c2hhZG93S2V5VW1icmFPcGFjaXR5fSlgLCBgJHtweFs0XX1weCAke3B4WzVdfXB4ICR7cHhbNl19cHggJHtweFs3XX1weCByZ2JhKDAsMCwwLCR7c2hhZG93S2V5UGVudW1icmFPcGFjaXR5fSlgLCBgJHtweFs4XX1weCAke3B4WzldfXB4ICR7cHhbMTBdfXB4ICR7cHhbMTFdfXB4IHJnYmEoMCwwLDAsJHtzaGFkb3dBbWJpZW50U2hhZG93T3BhY2l0eX0pYF0uam9pbignLCcpO1xufVxuXG4vLyBWYWx1ZXMgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbWF0ZXJpYWwtY29tcG9uZW50cy9tYXRlcmlhbC1jb21wb25lbnRzLXdlYi9ibG9iL2JlODc0N2Y5NDU3NDY2OWNiNWU3YWRkMWE3YzU0ZmE0MWE4OWNlYzcvcGFja2FnZXMvbWRjLWVsZXZhdGlvbi9fdmFyaWFibGVzLnNjc3NcbmNvbnN0IHNoYWRvd3MgPSBbJ25vbmUnLCBjcmVhdGVTaGFkb3coMCwgMiwgMSwgLTEsIDAsIDEsIDEsIDAsIDAsIDEsIDMsIDApLCBjcmVhdGVTaGFkb3coMCwgMywgMSwgLTIsIDAsIDIsIDIsIDAsIDAsIDEsIDUsIDApLCBjcmVhdGVTaGFkb3coMCwgMywgMywgLTIsIDAsIDMsIDQsIDAsIDAsIDEsIDgsIDApLCBjcmVhdGVTaGFkb3coMCwgMiwgNCwgLTEsIDAsIDQsIDUsIDAsIDAsIDEsIDEwLCAwKSwgY3JlYXRlU2hhZG93KDAsIDMsIDUsIC0xLCAwLCA1LCA4LCAwLCAwLCAxLCAxNCwgMCksIGNyZWF0ZVNoYWRvdygwLCAzLCA1LCAtMSwgMCwgNiwgMTAsIDAsIDAsIDEsIDE4LCAwKSwgY3JlYXRlU2hhZG93KDAsIDQsIDUsIC0yLCAwLCA3LCAxMCwgMSwgMCwgMiwgMTYsIDEpLCBjcmVhdGVTaGFkb3coMCwgNSwgNSwgLTMsIDAsIDgsIDEwLCAxLCAwLCAzLCAxNCwgMiksIGNyZWF0ZVNoYWRvdygwLCA1LCA2LCAtMywgMCwgOSwgMTIsIDEsIDAsIDMsIDE2LCAyKSwgY3JlYXRlU2hhZG93KDAsIDYsIDYsIC0zLCAwLCAxMCwgMTQsIDEsIDAsIDQsIDE4LCAzKSwgY3JlYXRlU2hhZG93KDAsIDYsIDcsIC00LCAwLCAxMSwgMTUsIDEsIDAsIDQsIDIwLCAzKSwgY3JlYXRlU2hhZG93KDAsIDcsIDgsIC00LCAwLCAxMiwgMTcsIDIsIDAsIDUsIDIyLCA0KSwgY3JlYXRlU2hhZG93KDAsIDcsIDgsIC00LCAwLCAxMywgMTksIDIsIDAsIDUsIDI0LCA0KSwgY3JlYXRlU2hhZG93KDAsIDcsIDksIC00LCAwLCAxNCwgMjEsIDIsIDAsIDUsIDI2LCA0KSwgY3JlYXRlU2hhZG93KDAsIDgsIDksIC01LCAwLCAxNSwgMjIsIDIsIDAsIDYsIDI4LCA1KSwgY3JlYXRlU2hhZG93KDAsIDgsIDEwLCAtNSwgMCwgMTYsIDI0LCAyLCAwLCA2LCAzMCwgNSksIGNyZWF0ZVNoYWRvdygwLCA4LCAxMSwgLTUsIDAsIDE3LCAyNiwgMiwgMCwgNiwgMzIsIDUpLCBjcmVhdGVTaGFkb3coMCwgOSwgMTEsIC01LCAwLCAxOCwgMjgsIDIsIDAsIDcsIDM0LCA2KSwgY3JlYXRlU2hhZG93KDAsIDksIDEyLCAtNiwgMCwgMTksIDI5LCAyLCAwLCA3LCAzNiwgNiksIGNyZWF0ZVNoYWRvdygwLCAxMCwgMTMsIC02LCAwLCAyMCwgMzEsIDMsIDAsIDgsIDM4LCA3KSwgY3JlYXRlU2hhZG93KDAsIDEwLCAxMywgLTYsIDAsIDIxLCAzMywgMywgMCwgOCwgNDAsIDcpLCBjcmVhdGVTaGFkb3coMCwgMTAsIDE0LCAtNiwgMCwgMjIsIDM1LCAzLCAwLCA4LCA0MiwgNyksIGNyZWF0ZVNoYWRvdygwLCAxMSwgMTQsIC03LCAwLCAyMywgMzYsIDMsIDAsIDksIDQ0LCA4KSwgY3JlYXRlU2hhZG93KDAsIDExLCAxNSwgLTcsIDAsIDI0LCAzOCwgMywgMCwgOSwgNDYsIDgpXTtcbmV4cG9ydCBkZWZhdWx0IHNoYWRvd3M7IiwgImltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJkdXJhdGlvblwiLCBcImVhc2luZ1wiLCBcImRlbGF5XCJdO1xuLy8gRm9sbG93IGh0dHBzOi8vbWF0ZXJpYWwuZ29vZ2xlLmNvbS9tb3Rpb24vZHVyYXRpb24tZWFzaW5nLmh0bWwjZHVyYXRpb24tZWFzaW5nLW5hdHVyYWwtZWFzaW5nLWN1cnZlc1xuLy8gdG8gbGVhcm4gdGhlIGNvbnRleHQgaW4gd2hpY2ggZWFjaCBlYXNpbmcgc2hvdWxkIGJlIHVzZWQuXG5leHBvcnQgY29uc3QgZWFzaW5nID0ge1xuICAvLyBUaGlzIGlzIHRoZSBtb3N0IGNvbW1vbiBlYXNpbmcgY3VydmUuXG4gIGVhc2VJbk91dDogJ2N1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSknLFxuICAvLyBPYmplY3RzIGVudGVyIHRoZSBzY3JlZW4gYXQgZnVsbCB2ZWxvY2l0eSBmcm9tIG9mZi1zY3JlZW4gYW5kXG4gIC8vIHNsb3dseSBkZWNlbGVyYXRlIHRvIGEgcmVzdGluZyBwb2ludC5cbiAgZWFzZU91dDogJ2N1YmljLWJlemllcigwLjAsIDAsIDAuMiwgMSknLFxuICAvLyBPYmplY3RzIGxlYXZlIHRoZSBzY3JlZW4gYXQgZnVsbCB2ZWxvY2l0eS4gVGhleSBkbyBub3QgZGVjZWxlcmF0ZSB3aGVuIG9mZi1zY3JlZW4uXG4gIGVhc2VJbjogJ2N1YmljLWJlemllcigwLjQsIDAsIDEsIDEpJyxcbiAgLy8gVGhlIHNoYXJwIGN1cnZlIGlzIHVzZWQgYnkgb2JqZWN0cyB0aGF0IG1heSByZXR1cm4gdG8gdGhlIHNjcmVlbiBhdCBhbnkgdGltZS5cbiAgc2hhcnA6ICdjdWJpYy1iZXppZXIoMC40LCAwLCAwLjYsIDEpJ1xufTtcblxuLy8gRm9sbG93IGh0dHBzOi8vbTIubWF0ZXJpYWwuaW8vZ3VpZGVsaW5lcy9tb3Rpb24vZHVyYXRpb24tZWFzaW5nLmh0bWwjZHVyYXRpb24tZWFzaW5nLWNvbW1vbi1kdXJhdGlvbnNcbi8vIHRvIGxlYXJuIHdoZW4gdXNlIHdoYXQgdGltaW5nXG5leHBvcnQgY29uc3QgZHVyYXRpb24gPSB7XG4gIHNob3J0ZXN0OiAxNTAsXG4gIHNob3J0ZXI6IDIwMCxcbiAgc2hvcnQ6IDI1MCxcbiAgLy8gbW9zdCBiYXNpYyByZWNvbW1lbmRlZCB0aW1pbmdcbiAgc3RhbmRhcmQ6IDMwMCxcbiAgLy8gdGhpcyBpcyB0byBiZSB1c2VkIGluIGNvbXBsZXggYW5pbWF0aW9uc1xuICBjb21wbGV4OiAzNzUsXG4gIC8vIHJlY29tbWVuZGVkIHdoZW4gc29tZXRoaW5nIGlzIGVudGVyaW5nIHNjcmVlblxuICBlbnRlcmluZ1NjcmVlbjogMjI1LFxuICAvLyByZWNvbW1lbmRlZCB3aGVuIHNvbWV0aGluZyBpcyBsZWF2aW5nIHNjcmVlblxuICBsZWF2aW5nU2NyZWVuOiAxOTVcbn07XG5mdW5jdGlvbiBmb3JtYXRNcyhtaWxsaXNlY29uZHMpIHtcbiAgcmV0dXJuIGAke01hdGgucm91bmQobWlsbGlzZWNvbmRzKX1tc2A7XG59XG5mdW5jdGlvbiBnZXRBdXRvSGVpZ2h0RHVyYXRpb24oaGVpZ2h0KSB7XG4gIGlmICghaGVpZ2h0KSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgY29uc3QgY29uc3RhbnQgPSBoZWlnaHQgLyAzNjtcblxuICAvLyBodHRwczovL3d3dy53b2xmcmFtYWxwaGEuY29tL2lucHV0Lz9pPSg0KyUyQisxNSsqKyh4KyUyRiszNispKyoqKzAuMjUrJTJCKyh4KyUyRiszNikrJTJGKzUpKyorMTBcbiAgcmV0dXJuIE1hdGgucm91bmQoKDQgKyAxNSAqIGNvbnN0YW50ICoqIDAuMjUgKyBjb25zdGFudCAvIDUpICogMTApO1xufVxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlVHJhbnNpdGlvbnMoaW5wdXRUcmFuc2l0aW9ucykge1xuICBjb25zdCBtZXJnZWRFYXNpbmcgPSBfZXh0ZW5kcyh7fSwgZWFzaW5nLCBpbnB1dFRyYW5zaXRpb25zLmVhc2luZyk7XG4gIGNvbnN0IG1lcmdlZER1cmF0aW9uID0gX2V4dGVuZHMoe30sIGR1cmF0aW9uLCBpbnB1dFRyYW5zaXRpb25zLmR1cmF0aW9uKTtcbiAgY29uc3QgY3JlYXRlID0gKHByb3BzID0gWydhbGwnXSwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgICBkdXJhdGlvbjogZHVyYXRpb25PcHRpb24gPSBtZXJnZWREdXJhdGlvbi5zdGFuZGFyZCxcbiAgICAgICAgZWFzaW5nOiBlYXNpbmdPcHRpb24gPSBtZXJnZWRFYXNpbmcuZWFzZUluT3V0LFxuICAgICAgICBkZWxheSA9IDBcbiAgICAgIH0gPSBvcHRpb25zLFxuICAgICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShvcHRpb25zLCBfZXhjbHVkZWQpO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBjb25zdCBpc1N0cmluZyA9IHZhbHVlID0+IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZyc7XG4gICAgICAvLyBJRTExIHN1cHBvcnQsIHJlcGxhY2Ugd2l0aCBOdW1iZXIuaXNOYU5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHNcbiAgICAgIGNvbnN0IGlzTnVtYmVyID0gdmFsdWUgPT4gIWlzTmFOKHBhcnNlRmxvYXQodmFsdWUpKTtcbiAgICAgIGlmICghaXNTdHJpbmcocHJvcHMpICYmICFBcnJheS5pc0FycmF5KHByb3BzKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdNVUk6IEFyZ3VtZW50IFwicHJvcHNcIiBtdXN0IGJlIGEgc3RyaW5nIG9yIEFycmF5LicpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc051bWJlcihkdXJhdGlvbk9wdGlvbikgJiYgIWlzU3RyaW5nKGR1cmF0aW9uT3B0aW9uKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBNVUk6IEFyZ3VtZW50IFwiZHVyYXRpb25cIiBtdXN0IGJlIGEgbnVtYmVyIG9yIGEgc3RyaW5nIGJ1dCBmb3VuZCAke2R1cmF0aW9uT3B0aW9ufS5gKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNTdHJpbmcoZWFzaW5nT3B0aW9uKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdNVUk6IEFyZ3VtZW50IFwiZWFzaW5nXCIgbXVzdCBiZSBhIHN0cmluZy4nKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNOdW1iZXIoZGVsYXkpICYmICFpc1N0cmluZyhkZWxheSkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignTVVJOiBBcmd1bWVudCBcImRlbGF5XCIgbXVzdCBiZSBhIG51bWJlciBvciBhIHN0cmluZy4nKTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihbJ01VSTogU2Vjb25nIGFyZ3VtZW50IG9mIHRyYW5zaXRpb24uY3JlYXRlIG11c3QgYmUgYW4gb2JqZWN0LicsIFwiQXJndW1lbnRzIHNob3VsZCBiZSBlaXRoZXIgYGNyZWF0ZSgncHJvcDEnLCBvcHRpb25zKWAgb3IgYGNyZWF0ZShbJ3Byb3AxJywgJ3Byb3AyJ10sIG9wdGlvbnMpYFwiXS5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgICBpZiAoT2JqZWN0LmtleXMob3RoZXIpLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBNVUk6IFVucmVjb2duaXplZCBhcmd1bWVudChzKSBbJHtPYmplY3Qua2V5cyhvdGhlcikuam9pbignLCcpfV0uYCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAoQXJyYXkuaXNBcnJheShwcm9wcykgPyBwcm9wcyA6IFtwcm9wc10pLm1hcChhbmltYXRlZFByb3AgPT4gYCR7YW5pbWF0ZWRQcm9wfSAke3R5cGVvZiBkdXJhdGlvbk9wdGlvbiA9PT0gJ3N0cmluZycgPyBkdXJhdGlvbk9wdGlvbiA6IGZvcm1hdE1zKGR1cmF0aW9uT3B0aW9uKX0gJHtlYXNpbmdPcHRpb259ICR7dHlwZW9mIGRlbGF5ID09PSAnc3RyaW5nJyA/IGRlbGF5IDogZm9ybWF0TXMoZGVsYXkpfWApLmpvaW4oJywnKTtcbiAgfTtcbiAgcmV0dXJuIF9leHRlbmRzKHtcbiAgICBnZXRBdXRvSGVpZ2h0RHVyYXRpb24sXG4gICAgY3JlYXRlXG4gIH0sIGlucHV0VHJhbnNpdGlvbnMsIHtcbiAgICBlYXNpbmc6IG1lcmdlZEVhc2luZyxcbiAgICBkdXJhdGlvbjogbWVyZ2VkRHVyYXRpb25cbiAgfSk7XG59IiwgIi8vIFdlIG5lZWQgdG8gY2VudHJhbGl6ZSB0aGUgekluZGV4IGRlZmluaXRpb25zIGFzIHRoZXkgd29ya1xuLy8gbGlrZSBnbG9iYWwgdmFsdWVzIGluIHRoZSBicm93c2VyLlxuY29uc3QgekluZGV4ID0ge1xuICBtb2JpbGVTdGVwcGVyOiAxMDAwLFxuICBmYWI6IDEwNTAsXG4gIHNwZWVkRGlhbDogMTA1MCxcbiAgYXBwQmFyOiAxMTAwLFxuICBkcmF3ZXI6IDEyMDAsXG4gIG1vZGFsOiAxMzAwLFxuICBzbmFja2JhcjogMTQwMCxcbiAgdG9vbHRpcDogMTUwMFxufTtcbmV4cG9ydCBkZWZhdWx0IHpJbmRleDsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgY3JlYXRlVGhlbWUgZnJvbSAnLi9jcmVhdGVUaGVtZSc7XG5jb25zdCBkZWZhdWx0VGhlbWUgPSBjcmVhdGVUaGVtZSgpO1xuZXhwb3J0IGRlZmF1bHQgZGVmYXVsdFRoZW1lOyIsICIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBzeXN0ZW1Vc2VUaGVtZVByb3BzIGZyb20gJ0BtdWkvc3lzdGVtL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IGRlZmF1bHRUaGVtZSBmcm9tICcuL2RlZmF1bHRUaGVtZSc7XG5pbXBvcnQgVEhFTUVfSUQgZnJvbSAnLi9pZGVudGlmaWVyJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZVRoZW1lUHJvcHMoe1xuICBwcm9wcyxcbiAgbmFtZVxufSkge1xuICByZXR1cm4gc3lzdGVtVXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHMsXG4gICAgbmFtZSxcbiAgICBkZWZhdWx0VGhlbWUsXG4gICAgdGhlbWVJZDogVEhFTUVfSURcbiAgfSk7XG59IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0IGNyZWF0ZVN0eWxlZCwgeyBzaG91bGRGb3J3YXJkUHJvcCB9IGZyb20gJ0BtdWkvc3lzdGVtL2NyZWF0ZVN0eWxlZCc7XG5pbXBvcnQgZGVmYXVsdFRoZW1lIGZyb20gJy4vZGVmYXVsdFRoZW1lJztcbmltcG9ydCBUSEVNRV9JRCBmcm9tICcuL2lkZW50aWZpZXInO1xuZXhwb3J0IGNvbnN0IHJvb3RTaG91bGRGb3J3YXJkUHJvcCA9IHByb3AgPT4gc2hvdWxkRm9yd2FyZFByb3AocHJvcCkgJiYgcHJvcCAhPT0gJ2NsYXNzZXMnO1xuZXhwb3J0IGNvbnN0IHNsb3RTaG91bGRGb3J3YXJkUHJvcCA9IHNob3VsZEZvcndhcmRQcm9wO1xuY29uc3Qgc3R5bGVkID0gY3JlYXRlU3R5bGVkKHtcbiAgdGhlbWVJZDogVEhFTUVfSUQsXG4gIGRlZmF1bHRUaGVtZSxcbiAgcm9vdFNob3VsZEZvcndhcmRQcm9wXG59KTtcbmV4cG9ydCBkZWZhdWx0IHN0eWxlZDsiLCAiaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnQG11aS91dGlscy9jYXBpdGFsaXplJztcbmV4cG9ydCBkZWZhdWx0IGNhcGl0YWxpemU7IiwgImltcG9ydCBjcmVhdGVDaGFpbmVkRnVuY3Rpb24gZnJvbSAnQG11aS91dGlscy9jcmVhdGVDaGFpbmVkRnVuY3Rpb24nO1xuZXhwb3J0IGRlZmF1bHQgY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uOyIsICIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFN2Z0ljb24gZnJvbSAnLi4vU3ZnSWNvbic7XG5cbi8qKlxuICogUHJpdmF0ZSBtb2R1bGUgcmVzZXJ2ZWQgZm9yIEBtdWkgcGFja2FnZXMuXG4gKi9cbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVTdmdJY29uKHBhdGgsIGRpc3BsYXlOYW1lKSB7XG4gIGZ1bmN0aW9uIENvbXBvbmVudChwcm9wcywgcmVmKSB7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFN2Z0ljb24sIF9leHRlbmRzKHtcbiAgICAgIFwiZGF0YS10ZXN0aWRcIjogYCR7ZGlzcGxheU5hbWV9SWNvbmAsXG4gICAgICByZWY6IHJlZlxuICAgIH0sIHByb3BzLCB7XG4gICAgICBjaGlsZHJlbjogcGF0aFxuICAgIH0pKTtcbiAgfVxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIC8vIE5lZWQgdG8gc2V0IGBkaXNwbGF5TmFtZWAgb24gdGhlIGlubmVyIGNvbXBvbmVudCBmb3IgUmVhY3QubWVtby5cbiAgICAvLyBSZWFjdCBwcmlvciB0byAxNi4xNCBpZ25vcmVzIGBkaXNwbGF5TmFtZWAgb24gdGhlIHdyYXBwZXIuXG4gICAgQ29tcG9uZW50LmRpc3BsYXlOYW1lID0gYCR7ZGlzcGxheU5hbWV9SWNvbmA7XG4gIH1cbiAgQ29tcG9uZW50Lm11aU5hbWUgPSBTdmdJY29uLm11aU5hbWU7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QubWVtbyggLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoQ29tcG9uZW50KSk7XG59IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29sb3JcIiwgXCJjb21wb25lbnRcIiwgXCJmb250U2l6ZVwiLCBcImh0bWxDb2xvclwiLCBcImluaGVyaXRWaWV3Qm94XCIsIFwidGl0bGVBY2Nlc3NcIiwgXCJ2aWV3Qm94XCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnLi4vdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHsgZ2V0U3ZnSWNvblV0aWxpdHlDbGFzcyB9IGZyb20gJy4vc3ZnSWNvbkNsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjb2xvcixcbiAgICBmb250U2l6ZSxcbiAgICBjbGFzc2VzXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCBjb2xvciAhPT0gJ2luaGVyaXQnICYmIGBjb2xvciR7Y2FwaXRhbGl6ZShjb2xvcil9YCwgYGZvbnRTaXplJHtjYXBpdGFsaXplKGZvbnRTaXplKX1gXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldFN2Z0ljb25VdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcbmNvbnN0IFN2Z0ljb25Sb290ID0gc3R5bGVkKCdzdmcnLCB7XG4gIG5hbWU6ICdNdWlTdmdJY29uJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLnJvb3QsIG93bmVyU3RhdGUuY29sb3IgIT09ICdpbmhlcml0JyAmJiBzdHlsZXNbYGNvbG9yJHtjYXBpdGFsaXplKG93bmVyU3RhdGUuY29sb3IpfWBdLCBzdHlsZXNbYGZvbnRTaXplJHtjYXBpdGFsaXplKG93bmVyU3RhdGUuZm9udFNpemUpfWBdXTtcbiAgfVxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IHtcbiAgdmFyIF90aGVtZSR0cmFuc2l0aW9ucywgX3RoZW1lJHRyYW5zaXRpb25zJGNyLCBfdGhlbWUkdHJhbnNpdGlvbnMyLCBfdGhlbWUkdHlwb2dyYXBoeSwgX3RoZW1lJHR5cG9ncmFwaHkkcHhULCBfdGhlbWUkdHlwb2dyYXBoeTIsIF90aGVtZSR0eXBvZ3JhcGh5MiRweCwgX3RoZW1lJHR5cG9ncmFwaHkzLCBfdGhlbWUkdHlwb2dyYXBoeTMkcHgsIF9wYWxldHRlJG93bmVyU3RhdGUkYywgX3BhbGV0dGUsIF9wYWxldHRlMiwgX3BhbGV0dGUzO1xuICByZXR1cm4ge1xuICAgIHVzZXJTZWxlY3Q6ICdub25lJyxcbiAgICB3aWR0aDogJzFlbScsXG4gICAgaGVpZ2h0OiAnMWVtJyxcbiAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyxcbiAgICAvLyB0aGUgPHN2Zz4gd2lsbCBkZWZpbmUgdGhlIHByb3BlcnR5IHRoYXQgaGFzIGBjdXJyZW50Q29sb3JgXG4gICAgLy8gZS5nLiBoZXJvaWNvbnMgdXNlcyBmaWxsPVwibm9uZVwiIGFuZCBzdHJva2U9XCJjdXJyZW50Q29sb3JcIlxuICAgIGZpbGw6IG93bmVyU3RhdGUuaGFzU3ZnQXNDaGlsZCA/IHVuZGVmaW5lZCA6ICdjdXJyZW50Q29sb3InLFxuICAgIGZsZXhTaHJpbms6IDAsXG4gICAgdHJhbnNpdGlvbjogKF90aGVtZSR0cmFuc2l0aW9ucyA9IHRoZW1lLnRyYW5zaXRpb25zKSA9PSBudWxsIHx8IChfdGhlbWUkdHJhbnNpdGlvbnMkY3IgPSBfdGhlbWUkdHJhbnNpdGlvbnMuY3JlYXRlKSA9PSBudWxsID8gdm9pZCAwIDogX3RoZW1lJHRyYW5zaXRpb25zJGNyLmNhbGwoX3RoZW1lJHRyYW5zaXRpb25zLCAnZmlsbCcsIHtcbiAgICAgIGR1cmF0aW9uOiAoX3RoZW1lJHRyYW5zaXRpb25zMiA9IHRoZW1lLnRyYW5zaXRpb25zKSA9PSBudWxsIHx8IChfdGhlbWUkdHJhbnNpdGlvbnMyID0gX3RoZW1lJHRyYW5zaXRpb25zMi5kdXJhdGlvbikgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGVtZSR0cmFuc2l0aW9uczIuc2hvcnRlclxuICAgIH0pLFxuICAgIGZvbnRTaXplOiB7XG4gICAgICBpbmhlcml0OiAnaW5oZXJpdCcsXG4gICAgICBzbWFsbDogKChfdGhlbWUkdHlwb2dyYXBoeSA9IHRoZW1lLnR5cG9ncmFwaHkpID09IG51bGwgfHwgKF90aGVtZSR0eXBvZ3JhcGh5JHB4VCA9IF90aGVtZSR0eXBvZ3JhcGh5LnB4VG9SZW0pID09IG51bGwgPyB2b2lkIDAgOiBfdGhlbWUkdHlwb2dyYXBoeSRweFQuY2FsbChfdGhlbWUkdHlwb2dyYXBoeSwgMjApKSB8fCAnMS4yNXJlbScsXG4gICAgICBtZWRpdW06ICgoX3RoZW1lJHR5cG9ncmFwaHkyID0gdGhlbWUudHlwb2dyYXBoeSkgPT0gbnVsbCB8fCAoX3RoZW1lJHR5cG9ncmFwaHkyJHB4ID0gX3RoZW1lJHR5cG9ncmFwaHkyLnB4VG9SZW0pID09IG51bGwgPyB2b2lkIDAgOiBfdGhlbWUkdHlwb2dyYXBoeTIkcHguY2FsbChfdGhlbWUkdHlwb2dyYXBoeTIsIDI0KSkgfHwgJzEuNXJlbScsXG4gICAgICBsYXJnZTogKChfdGhlbWUkdHlwb2dyYXBoeTMgPSB0aGVtZS50eXBvZ3JhcGh5KSA9PSBudWxsIHx8IChfdGhlbWUkdHlwb2dyYXBoeTMkcHggPSBfdGhlbWUkdHlwb2dyYXBoeTMucHhUb1JlbSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGVtZSR0eXBvZ3JhcGh5MyRweC5jYWxsKF90aGVtZSR0eXBvZ3JhcGh5MywgMzUpKSB8fCAnMi4xODc1cmVtJ1xuICAgIH1bb3duZXJTdGF0ZS5mb250U2l6ZV0sXG4gICAgLy8gVE9ETyB2NSBkZXByZWNhdGUsIHY2IHJlbW92ZSBmb3Igc3hcbiAgICBjb2xvcjogKF9wYWxldHRlJG93bmVyU3RhdGUkYyA9IChfcGFsZXR0ZSA9ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlKSA9PSBudWxsIHx8IChfcGFsZXR0ZSA9IF9wYWxldHRlW293bmVyU3RhdGUuY29sb3JdKSA9PSBudWxsID8gdm9pZCAwIDogX3BhbGV0dGUubWFpbikgIT0gbnVsbCA/IF9wYWxldHRlJG93bmVyU3RhdGUkYyA6IHtcbiAgICAgIGFjdGlvbjogKF9wYWxldHRlMiA9ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlKSA9PSBudWxsIHx8IChfcGFsZXR0ZTIgPSBfcGFsZXR0ZTIuYWN0aW9uKSA9PSBudWxsID8gdm9pZCAwIDogX3BhbGV0dGUyLmFjdGl2ZSxcbiAgICAgIGRpc2FibGVkOiAoX3BhbGV0dGUzID0gKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUpID09IG51bGwgfHwgKF9wYWxldHRlMyA9IF9wYWxldHRlMy5hY3Rpb24pID09IG51bGwgPyB2b2lkIDAgOiBfcGFsZXR0ZTMuZGlzYWJsZWQsXG4gICAgICBpbmhlcml0OiB1bmRlZmluZWRcbiAgICB9W293bmVyU3RhdGUuY29sb3JdXG4gIH07XG59KTtcbmNvbnN0IFN2Z0ljb24gPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBTdmdJY29uKGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlTdmdJY29uJ1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBjb2xvciA9ICdpbmhlcml0JyxcbiAgICAgIGNvbXBvbmVudCA9ICdzdmcnLFxuICAgICAgZm9udFNpemUgPSAnbWVkaXVtJyxcbiAgICAgIGh0bWxDb2xvcixcbiAgICAgIGluaGVyaXRWaWV3Qm94ID0gZmFsc2UsXG4gICAgICB0aXRsZUFjY2VzcyxcbiAgICAgIHZpZXdCb3ggPSAnMCAwIDI0IDI0J1xuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBoYXNTdmdBc0NoaWxkID0gLyojX19QVVJFX18qL1JlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSAmJiBjaGlsZHJlbi50eXBlID09PSAnc3ZnJztcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNvbG9yLFxuICAgIGNvbXBvbmVudCxcbiAgICBmb250U2l6ZSxcbiAgICBpbnN0YW5jZUZvbnRTaXplOiBpblByb3BzLmZvbnRTaXplLFxuICAgIGluaGVyaXRWaWV3Qm94LFxuICAgIHZpZXdCb3gsXG4gICAgaGFzU3ZnQXNDaGlsZFxuICB9KTtcbiAgY29uc3QgbW9yZSA9IHt9O1xuICBpZiAoIWluaGVyaXRWaWV3Qm94KSB7XG4gICAgbW9yZS52aWV3Qm94ID0gdmlld0JveDtcbiAgfVxuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeHMoU3ZnSWNvblJvb3QsIF9leHRlbmRzKHtcbiAgICBhczogY29tcG9uZW50LFxuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSksXG4gICAgZm9jdXNhYmxlOiBcImZhbHNlXCIsXG4gICAgY29sb3I6IGh0bWxDb2xvcixcbiAgICBcImFyaWEtaGlkZGVuXCI6IHRpdGxlQWNjZXNzID8gdW5kZWZpbmVkIDogdHJ1ZSxcbiAgICByb2xlOiB0aXRsZUFjY2VzcyA/ICdpbWcnIDogdW5kZWZpbmVkLFxuICAgIHJlZjogcmVmXG4gIH0sIG1vcmUsIG90aGVyLCBoYXNTdmdBc0NoaWxkICYmIGNoaWxkcmVuLnByb3BzLCB7XG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICBjaGlsZHJlbjogW2hhc1N2Z0FzQ2hpbGQgPyBjaGlsZHJlbi5wcm9wcy5jaGlsZHJlbiA6IGNoaWxkcmVuLCB0aXRsZUFjY2VzcyA/IC8qI19fUFVSRV9fKi9fanN4KFwidGl0bGVcIiwge1xuICAgICAgY2hpbGRyZW46IHRpdGxlQWNjZXNzXG4gICAgfSkgOiBudWxsXVxuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFN2Z0ljb24ucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIFx1MjUwQ1x1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMCBXYXJuaW5nIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUxMFxuICAvLyBcdTI1MDIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiBcdTI1MDJcbiAgLy8gXHUyNTAyICAgIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiAgICAgXHUyNTAyXG4gIC8vIFx1MjUxNFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUxOFxuICAvKipcbiAgICogTm9kZSBwYXNzZWQgaW50byB0aGUgU1ZHIGVsZW1lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbG9yIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEl0IHN1cHBvcnRzIGJvdGggZGVmYXVsdCBhbmQgY3VzdG9tIHRoZW1lIGNvbG9ycywgd2hpY2ggY2FuIGJlIGFkZGVkIGFzIHNob3duIGluIHRoZVxuICAgKiBbcGFsZXR0ZSBjdXN0b21pemF0aW9uIGd1aWRlXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvY3VzdG9taXphdGlvbi9wYWxldHRlLyNjdXN0b20tY29sb3JzKS5cbiAgICogWW91IGNhbiB1c2UgdGhlIGBodG1sQ29sb3JgIHByb3AgdG8gYXBwbHkgYSBjb2xvciBhdHRyaWJ1dGUgdG8gdGhlIFNWRyBlbGVtZW50LlxuICAgKiBAZGVmYXVsdCAnaW5oZXJpdCdcbiAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2luaGVyaXQnLCAnYWN0aW9uJywgJ2Rpc2FibGVkJywgJ3ByaW1hcnknLCAnc2Vjb25kYXJ5JywgJ2Vycm9yJywgJ2luZm8nLCAnc3VjY2VzcycsICd3YXJuaW5nJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIFRoZSBmb250U2l6ZSBhcHBsaWVkIHRvIHRoZSBpY29uLiBEZWZhdWx0cyB0byAyNHB4LCBidXQgY2FuIGJlIGNvbmZpZ3VyZSB0byBpbmhlcml0IGZvbnQgc2l6ZS5cbiAgICogQGRlZmF1bHQgJ21lZGl1bSdcbiAgICovXG4gIGZvbnRTaXplOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2luaGVyaXQnLCAnbGFyZ2UnLCAnbWVkaXVtJywgJ3NtYWxsJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBBcHBsaWVzIGEgY29sb3IgYXR0cmlidXRlIHRvIHRoZSBTVkcgZWxlbWVudC5cbiAgICovXG4gIGh0bWxDb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHJvb3Qgbm9kZSB3aWxsIGluaGVyaXQgdGhlIGN1c3RvbSBgY29tcG9uZW50YCdzIHZpZXdCb3ggYW5kIHRoZSBgdmlld0JveGBcbiAgICogcHJvcCB3aWxsIGJlIGlnbm9yZWQuXG4gICAqIFVzZWZ1bCB3aGVuIHlvdSB3YW50IHRvIHJlZmVyZW5jZSBhIGN1c3RvbSBgY29tcG9uZW50YCBhbmQgaGF2ZSBgU3ZnSWNvbmAgcGFzcyB0aGF0XG4gICAqIGBjb21wb25lbnRgJ3Mgdmlld0JveCB0byB0aGUgcm9vdCBub2RlLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgaW5oZXJpdFZpZXdCb3g6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIHNoYXBlLXJlbmRlcmluZyBhdHRyaWJ1dGUuIFRoZSBiZWhhdmlvciBvZiB0aGUgZGlmZmVyZW50IG9wdGlvbnMgaXMgZGVzY3JpYmVkIG9uIHRoZVxuICAgKiBbTUROIFdlYiBEb2NzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9TVkcvQXR0cmlidXRlL3NoYXBlLXJlbmRlcmluZykuXG4gICAqIElmIHlvdSBhcmUgaGF2aW5nIGlzc3VlcyB3aXRoIGJsdXJyeSBpY29ucyB5b3Ugc2hvdWxkIGludmVzdGlnYXRlIHRoaXMgcHJvcC5cbiAgICovXG4gIHNoYXBlUmVuZGVyaW5nOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogUHJvdmlkZXMgYSBodW1hbi1yZWFkYWJsZSB0aXRsZSBmb3IgdGhlIGVsZW1lbnQgdGhhdCBjb250YWlucyBpdC5cbiAgICogaHR0cHM6Ly93d3cudzMub3JnL1RSL1NWRy1hY2Nlc3MvI0VxdWl2YWxlbnRcbiAgICovXG4gIHRpdGxlQWNjZXNzOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogQWxsb3dzIHlvdSB0byByZWRlZmluZSB3aGF0IHRoZSBjb29yZGluYXRlcyB3aXRob3V0IHVuaXRzIG1lYW4gaW5zaWRlIGFuIFNWRyBlbGVtZW50LlxuICAgKiBGb3IgZXhhbXBsZSwgaWYgdGhlIFNWRyBlbGVtZW50IGlzIDUwMCAod2lkdGgpIGJ5IDIwMCAoaGVpZ2h0KSxcbiAgICogYW5kIHlvdSBwYXNzIHZpZXdCb3g9XCIwIDAgNTAgMjBcIixcbiAgICogdGhpcyBtZWFucyB0aGF0IHRoZSBjb29yZGluYXRlcyBpbnNpZGUgdGhlIFNWRyB3aWxsIGdvIGZyb20gdGhlIHRvcCBsZWZ0IGNvcm5lciAoMCwwKVxuICAgKiB0byBib3R0b20gcmlnaHQgKDUwLDIwKSBhbmQgZWFjaCB1bml0IHdpbGwgYmUgd29ydGggMTBweC5cbiAgICogQGRlZmF1bHQgJzAgMCAyNCAyNCdcbiAgICovXG4gIHZpZXdCb3g6IFByb3BUeXBlcy5zdHJpbmdcbn0gOiB2b2lkIDA7XG5TdmdJY29uLm11aU5hbWUgPSAnU3ZnSWNvbic7XG5leHBvcnQgZGVmYXVsdCBTdmdJY29uOyIsICJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN2Z0ljb25VdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aVN2Z0ljb24nLCBzbG90KTtcbn1cbmNvbnN0IHN2Z0ljb25DbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpU3ZnSWNvbicsIFsncm9vdCcsICdjb2xvclByaW1hcnknLCAnY29sb3JTZWNvbmRhcnknLCAnY29sb3JBY3Rpb24nLCAnY29sb3JFcnJvcicsICdjb2xvckRpc2FibGVkJywgJ2ZvbnRTaXplSW5oZXJpdCcsICdmb250U2l6ZVNtYWxsJywgJ2ZvbnRTaXplTWVkaXVtJywgJ2ZvbnRTaXplTGFyZ2UnXSk7XG5leHBvcnQgZGVmYXVsdCBzdmdJY29uQ2xhc3NlczsiLCAiaW1wb3J0IGlzTXVpRWxlbWVudCBmcm9tICdAbXVpL3V0aWxzL2lzTXVpRWxlbWVudCc7XG5leHBvcnQgZGVmYXVsdCBpc011aUVsZW1lbnQ7IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0IHVzZUlkIGZyb20gJ0BtdWkvdXRpbHMvdXNlSWQnO1xuZXhwb3J0IGRlZmF1bHQgdXNlSWQ7IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0IHVzZUNvbnRyb2xsZWQgZnJvbSAnQG11aS91dGlscy91c2VDb250cm9sbGVkJztcbmV4cG9ydCBkZWZhdWx0IHVzZUNvbnRyb2xsZWQ7IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0IHVzZUV2ZW50Q2FsbGJhY2sgZnJvbSAnQG11aS91dGlscy91c2VFdmVudENhbGxiYWNrJztcbmV4cG9ydCBkZWZhdWx0IHVzZUV2ZW50Q2FsbGJhY2s7IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0IHVzZUZvcmtSZWYgZnJvbSAnQG11aS91dGlscy91c2VGb3JrUmVmJztcbmV4cG9ydCBkZWZhdWx0IHVzZUZvcmtSZWY7IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0IHVzZUlzRm9jdXNWaXNpYmxlIGZyb20gJ0BtdWkvdXRpbHMvdXNlSXNGb2N1c1Zpc2libGUnO1xuZXhwb3J0IGRlZmF1bHQgdXNlSXNGb2N1c1Zpc2libGU7IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIG8uX19wcm90b19fID0gcDtcbiAgICByZXR1cm4gbztcbiAgfTtcbiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn0iLCAiaW1wb3J0IHNldFByb3RvdHlwZU9mIGZyb20gXCIuL3NldFByb3RvdHlwZU9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaW5oZXJpdHNMb29zZShzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MucHJvdG90eXBlKTtcbiAgc3ViQ2xhc3MucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gc3ViQ2xhc3M7XG4gIHNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTtcbn0iLCAiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmV4cG9ydCBkZWZhdWx0IFJlYWN0LmNyZWF0ZUNvbnRleHQobnVsbCk7IiwgImltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX2Fzc2VydFRoaXNJbml0aWFsaXplZCBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXNzZXJ0VGhpc0luaXRpYWxpemVkXCI7XG5pbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2VcIjtcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFRyYW5zaXRpb25Hcm91cENvbnRleHQgZnJvbSAnLi9UcmFuc2l0aW9uR3JvdXBDb250ZXh0JztcbmltcG9ydCB7IGdldENoaWxkTWFwcGluZywgZ2V0SW5pdGlhbENoaWxkTWFwcGluZywgZ2V0TmV4dENoaWxkTWFwcGluZyB9IGZyb20gJy4vdXRpbHMvQ2hpbGRNYXBwaW5nJztcblxudmFyIHZhbHVlcyA9IE9iamVjdC52YWx1ZXMgfHwgZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5tYXAoZnVuY3Rpb24gKGspIHtcbiAgICByZXR1cm4gb2JqW2tdO1xuICB9KTtcbn07XG5cbnZhciBkZWZhdWx0UHJvcHMgPSB7XG4gIGNvbXBvbmVudDogJ2RpdicsXG4gIGNoaWxkRmFjdG9yeTogZnVuY3Rpb24gY2hpbGRGYWN0b3J5KGNoaWxkKSB7XG4gICAgcmV0dXJuIGNoaWxkO1xuICB9XG59O1xuLyoqXG4gKiBUaGUgYDxUcmFuc2l0aW9uR3JvdXA+YCBjb21wb25lbnQgbWFuYWdlcyBhIHNldCBvZiB0cmFuc2l0aW9uIGNvbXBvbmVudHNcbiAqIChgPFRyYW5zaXRpb24+YCBhbmQgYDxDU1NUcmFuc2l0aW9uPmApIGluIGEgbGlzdC4gTGlrZSB3aXRoIHRoZSB0cmFuc2l0aW9uXG4gKiBjb21wb25lbnRzLCBgPFRyYW5zaXRpb25Hcm91cD5gIGlzIGEgc3RhdGUgbWFjaGluZSBmb3IgbWFuYWdpbmcgdGhlIG1vdW50aW5nXG4gKiBhbmQgdW5tb3VudGluZyBvZiBjb21wb25lbnRzIG92ZXIgdGltZS5cbiAqXG4gKiBDb25zaWRlciB0aGUgZXhhbXBsZSBiZWxvdy4gQXMgaXRlbXMgYXJlIHJlbW92ZWQgb3IgYWRkZWQgdG8gdGhlIFRvZG9MaXN0IHRoZVxuICogYGluYCBwcm9wIGlzIHRvZ2dsZWQgYXV0b21hdGljYWxseSBieSB0aGUgYDxUcmFuc2l0aW9uR3JvdXA+YC5cbiAqXG4gKiBOb3RlIHRoYXQgYDxUcmFuc2l0aW9uR3JvdXA+YCAgZG9lcyBub3QgZGVmaW5lIGFueSBhbmltYXRpb24gYmVoYXZpb3IhXG4gKiBFeGFjdGx5IF9ob3dfIGEgbGlzdCBpdGVtIGFuaW1hdGVzIGlzIHVwIHRvIHRoZSBpbmRpdmlkdWFsIHRyYW5zaXRpb25cbiAqIGNvbXBvbmVudC4gVGhpcyBtZWFucyB5b3UgY2FuIG1peCBhbmQgbWF0Y2ggYW5pbWF0aW9ucyBhY3Jvc3MgZGlmZmVyZW50IGxpc3RcbiAqIGl0ZW1zLlxuICovXG5cbnZhciBUcmFuc2l0aW9uR3JvdXAgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzTG9vc2UoVHJhbnNpdGlvbkdyb3VwLCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBUcmFuc2l0aW9uR3JvdXAocHJvcHMsIGNvbnRleHQpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfdGhpcyA9IF9SZWFjdCRDb21wb25lbnQuY2FsbCh0aGlzLCBwcm9wcywgY29udGV4dCkgfHwgdGhpcztcblxuICAgIHZhciBoYW5kbGVFeGl0ZWQgPSBfdGhpcy5oYW5kbGVFeGl0ZWQuYmluZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSk7IC8vIEluaXRpYWwgY2hpbGRyZW4gc2hvdWxkIGFsbCBiZSBlbnRlcmluZywgZGVwZW5kZW50IG9uIGFwcGVhclxuXG5cbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGNvbnRleHRWYWx1ZToge1xuICAgICAgICBpc01vdW50aW5nOiB0cnVlXG4gICAgICB9LFxuICAgICAgaGFuZGxlRXhpdGVkOiBoYW5kbGVFeGl0ZWQsXG4gICAgICBmaXJzdFJlbmRlcjogdHJ1ZVxuICAgIH07XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFRyYW5zaXRpb25Hcm91cC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmNvbXBvbmVudERpZE1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdGhpcy5tb3VudGVkID0gdHJ1ZTtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGNvbnRleHRWYWx1ZToge1xuICAgICAgICBpc01vdW50aW5nOiBmYWxzZVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5jb21wb25lbnRXaWxsVW5tb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHRoaXMubW91bnRlZCA9IGZhbHNlO1xuICB9O1xuXG4gIFRyYW5zaXRpb25Hcm91cC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPSBmdW5jdGlvbiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMobmV4dFByb3BzLCBfcmVmKSB7XG4gICAgdmFyIHByZXZDaGlsZE1hcHBpbmcgPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgICBoYW5kbGVFeGl0ZWQgPSBfcmVmLmhhbmRsZUV4aXRlZCxcbiAgICAgICAgZmlyc3RSZW5kZXIgPSBfcmVmLmZpcnN0UmVuZGVyO1xuICAgIHJldHVybiB7XG4gICAgICBjaGlsZHJlbjogZmlyc3RSZW5kZXIgPyBnZXRJbml0aWFsQ2hpbGRNYXBwaW5nKG5leHRQcm9wcywgaGFuZGxlRXhpdGVkKSA6IGdldE5leHRDaGlsZE1hcHBpbmcobmV4dFByb3BzLCBwcmV2Q2hpbGRNYXBwaW5nLCBoYW5kbGVFeGl0ZWQpLFxuICAgICAgZmlyc3RSZW5kZXI6IGZhbHNlXG4gICAgfTtcbiAgfSAvLyBub2RlIGlzIGB1bmRlZmluZWRgIHdoZW4gdXNlciBwcm92aWRlZCBgbm9kZVJlZmAgcHJvcFxuICA7XG5cbiAgX3Byb3RvLmhhbmRsZUV4aXRlZCA9IGZ1bmN0aW9uIGhhbmRsZUV4aXRlZChjaGlsZCwgbm9kZSkge1xuICAgIHZhciBjdXJyZW50Q2hpbGRNYXBwaW5nID0gZ2V0Q2hpbGRNYXBwaW5nKHRoaXMucHJvcHMuY2hpbGRyZW4pO1xuICAgIGlmIChjaGlsZC5rZXkgaW4gY3VycmVudENoaWxkTWFwcGluZykgcmV0dXJuO1xuXG4gICAgaWYgKGNoaWxkLnByb3BzLm9uRXhpdGVkKSB7XG4gICAgICBjaGlsZC5wcm9wcy5vbkV4aXRlZChub2RlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5tb3VudGVkKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKGZ1bmN0aW9uIChzdGF0ZSkge1xuICAgICAgICB2YXIgY2hpbGRyZW4gPSBfZXh0ZW5kcyh7fSwgc3RhdGUuY2hpbGRyZW4pO1xuXG4gICAgICAgIGRlbGV0ZSBjaGlsZHJlbltjaGlsZC5rZXldO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgQ29tcG9uZW50ID0gX3RoaXMkcHJvcHMuY29tcG9uZW50LFxuICAgICAgICBjaGlsZEZhY3RvcnkgPSBfdGhpcyRwcm9wcy5jaGlsZEZhY3RvcnksXG4gICAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3RoaXMkcHJvcHMsIFtcImNvbXBvbmVudFwiLCBcImNoaWxkRmFjdG9yeVwiXSk7XG5cbiAgICB2YXIgY29udGV4dFZhbHVlID0gdGhpcy5zdGF0ZS5jb250ZXh0VmFsdWU7XG4gICAgdmFyIGNoaWxkcmVuID0gdmFsdWVzKHRoaXMuc3RhdGUuY2hpbGRyZW4pLm1hcChjaGlsZEZhY3RvcnkpO1xuICAgIGRlbGV0ZSBwcm9wcy5hcHBlYXI7XG4gICAgZGVsZXRlIHByb3BzLmVudGVyO1xuICAgIGRlbGV0ZSBwcm9wcy5leGl0O1xuXG4gICAgaWYgKENvbXBvbmVudCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRyYW5zaXRpb25Hcm91cENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgICAgdmFsdWU6IGNvbnRleHRWYWx1ZVxuICAgICAgfSwgY2hpbGRyZW4pO1xuICAgIH1cblxuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUcmFuc2l0aW9uR3JvdXBDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICB2YWx1ZTogY29udGV4dFZhbHVlXG4gICAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ29tcG9uZW50LCBwcm9wcywgY2hpbGRyZW4pKTtcbiAgfTtcblxuICByZXR1cm4gVHJhbnNpdGlvbkdyb3VwO1xufShSZWFjdC5Db21wb25lbnQpO1xuXG5UcmFuc2l0aW9uR3JvdXAucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8ge1xuICAvKipcbiAgICogYDxUcmFuc2l0aW9uR3JvdXA+YCByZW5kZXJzIGEgYDxkaXY+YCBieSBkZWZhdWx0LiBZb3UgY2FuIGNoYW5nZSB0aGlzXG4gICAqIGJlaGF2aW9yIGJ5IHByb3ZpZGluZyBhIGBjb21wb25lbnRgIHByb3AuXG4gICAqIElmIHlvdSB1c2UgUmVhY3QgdjE2KyBhbmQgd291bGQgbGlrZSB0byBhdm9pZCBhIHdyYXBwaW5nIGA8ZGl2PmAgZWxlbWVudFxuICAgKiB5b3UgY2FuIHBhc3MgaW4gYGNvbXBvbmVudD17bnVsbH1gLiBUaGlzIGlzIHVzZWZ1bCBpZiB0aGUgd3JhcHBpbmcgZGl2XG4gICAqIGJvcmtzIHlvdXIgY3NzIHN0eWxlcy5cbiAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICogQSBzZXQgb2YgYDxUcmFuc2l0aW9uPmAgY29tcG9uZW50cywgdGhhdCBhcmUgdG9nZ2xlZCBgaW5gIGFuZCBvdXQgYXMgdGhleVxuICAgKiBsZWF2ZS4gdGhlIGA8VHJhbnNpdGlvbkdyb3VwPmAgd2lsbCBpbmplY3Qgc3BlY2lmaWMgdHJhbnNpdGlvbiBwcm9wcywgc29cbiAgICogcmVtZW1iZXIgdG8gc3ByZWFkIHRoZW0gdGhyb3VnaCBpZiB5b3UgYXJlIHdyYXBwaW5nIHRoZSBgPFRyYW5zaXRpb24+YCBhc1xuICAgKiB3aXRoIG91ciBgPEZhZGU+YCBleGFtcGxlLlxuICAgKlxuICAgKiBXaGlsZSB0aGlzIGNvbXBvbmVudCBpcyBtZWFudCBmb3IgbXVsdGlwbGUgYFRyYW5zaXRpb25gIG9yIGBDU1NUcmFuc2l0aW9uYFxuICAgKiBjaGlsZHJlbiwgc29tZXRpbWVzIHlvdSBtYXkgd2FudCB0byBoYXZlIGEgc2luZ2xlIHRyYW5zaXRpb24gY2hpbGQgd2l0aFxuICAgKiBjb250ZW50IHRoYXQgeW91IHdhbnQgdG8gYmUgdHJhbnNpdGlvbmVkIG91dCBhbmQgaW4gd2hlbiB5b3UgY2hhbmdlIGl0XG4gICAqIChlLmcuIHJvdXRlcywgaW1hZ2VzIGV0Yy4pIEluIHRoYXQgY2FzZSB5b3UgY2FuIGNoYW5nZSB0aGUgYGtleWAgcHJvcCBvZlxuICAgKiB0aGUgdHJhbnNpdGlvbiBjaGlsZCBhcyB5b3UgY2hhbmdlIGl0cyBjb250ZW50LCB0aGlzIHdpbGwgY2F1c2VcbiAgICogYFRyYW5zaXRpb25Hcm91cGAgdG8gdHJhbnNpdGlvbiB0aGUgY2hpbGQgb3V0IGFuZCBiYWNrIGluLlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgKiBBIGNvbnZlbmllbmNlIHByb3AgdGhhdCBlbmFibGVzIG9yIGRpc2FibGVzIGFwcGVhciBhbmltYXRpb25zXG4gICAqIGZvciBhbGwgY2hpbGRyZW4uIE5vdGUgdGhhdCBzcGVjaWZ5aW5nIHRoaXMgd2lsbCBvdmVycmlkZSBhbnkgZGVmYXVsdHMgc2V0XG4gICAqIG9uIGluZGl2aWR1YWwgY2hpbGRyZW4gVHJhbnNpdGlvbnMuXG4gICAqL1xuICBhcHBlYXI6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBBIGNvbnZlbmllbmNlIHByb3AgdGhhdCBlbmFibGVzIG9yIGRpc2FibGVzIGVudGVyIGFuaW1hdGlvbnNcbiAgICogZm9yIGFsbCBjaGlsZHJlbi4gTm90ZSB0aGF0IHNwZWNpZnlpbmcgdGhpcyB3aWxsIG92ZXJyaWRlIGFueSBkZWZhdWx0cyBzZXRcbiAgICogb24gaW5kaXZpZHVhbCBjaGlsZHJlbiBUcmFuc2l0aW9ucy5cbiAgICovXG4gIGVudGVyOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogQSBjb252ZW5pZW5jZSBwcm9wIHRoYXQgZW5hYmxlcyBvciBkaXNhYmxlcyBleGl0IGFuaW1hdGlvbnNcbiAgICogZm9yIGFsbCBjaGlsZHJlbi4gTm90ZSB0aGF0IHNwZWNpZnlpbmcgdGhpcyB3aWxsIG92ZXJyaWRlIGFueSBkZWZhdWx0cyBzZXRcbiAgICogb24gaW5kaXZpZHVhbCBjaGlsZHJlbiBUcmFuc2l0aW9ucy5cbiAgICovXG4gIGV4aXQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBZb3UgbWF5IG5lZWQgdG8gYXBwbHkgcmVhY3RpdmUgdXBkYXRlcyB0byBhIGNoaWxkIGFzIGl0IGlzIGV4aXRpbmcuXG4gICAqIFRoaXMgaXMgZ2VuZXJhbGx5IGRvbmUgYnkgdXNpbmcgYGNsb25lRWxlbWVudGAgaG93ZXZlciBpbiB0aGUgY2FzZSBvZiBhbiBleGl0aW5nXG4gICAqIGNoaWxkIHRoZSBlbGVtZW50IGhhcyBhbHJlYWR5IGJlZW4gcmVtb3ZlZCBhbmQgbm90IGFjY2Vzc2libGUgdG8gdGhlIGNvbnN1bWVyLlxuICAgKlxuICAgKiBJZiB5b3UgZG8gbmVlZCB0byB1cGRhdGUgYSBjaGlsZCBhcyBpdCBsZWF2ZXMgeW91IGNhbiBwcm92aWRlIGEgYGNoaWxkRmFjdG9yeWBcbiAgICogdG8gd3JhcCBldmVyeSBjaGlsZCwgZXZlbiB0aGUgb25lcyB0aGF0IGFyZSBsZWF2aW5nLlxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihjaGlsZDogUmVhY3RFbGVtZW50KSAtPiBSZWFjdEVsZW1lbnRcbiAgICovXG4gIGNoaWxkRmFjdG9yeTogUHJvcFR5cGVzLmZ1bmNcbn0gOiB7fTtcblRyYW5zaXRpb25Hcm91cC5kZWZhdWx0UHJvcHMgPSBkZWZhdWx0UHJvcHM7XG5leHBvcnQgZGVmYXVsdCBUcmFuc2l0aW9uR3JvdXA7IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG4gIHJldHVybiBzZWxmO1xufSIsICJpbXBvcnQgeyBDaGlsZHJlbiwgY2xvbmVFbGVtZW50LCBpc1ZhbGlkRWxlbWVudCB9IGZyb20gJ3JlYWN0Jztcbi8qKlxuICogR2l2ZW4gYHRoaXMucHJvcHMuY2hpbGRyZW5gLCByZXR1cm4gYW4gb2JqZWN0IG1hcHBpbmcga2V5IHRvIGNoaWxkLlxuICpcbiAqIEBwYXJhbSB7Kn0gY2hpbGRyZW4gYHRoaXMucHJvcHMuY2hpbGRyZW5gXG4gKiBAcmV0dXJuIHtvYmplY3R9IE1hcHBpbmcgb2Yga2V5IHRvIGNoaWxkXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENoaWxkTWFwcGluZyhjaGlsZHJlbiwgbWFwRm4pIHtcbiAgdmFyIG1hcHBlciA9IGZ1bmN0aW9uIG1hcHBlcihjaGlsZCkge1xuICAgIHJldHVybiBtYXBGbiAmJiBpc1ZhbGlkRWxlbWVudChjaGlsZCkgPyBtYXBGbihjaGlsZCkgOiBjaGlsZDtcbiAgfTtcblxuICB2YXIgcmVzdWx0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgaWYgKGNoaWxkcmVuKSBDaGlsZHJlbi5tYXAoY2hpbGRyZW4sIGZ1bmN0aW9uIChjKSB7XG4gICAgcmV0dXJuIGM7XG4gIH0pLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgLy8gcnVuIHRoZSBtYXAgZnVuY3Rpb24gaGVyZSBpbnN0ZWFkIHNvIHRoYXQgdGhlIGtleSBpcyB0aGUgY29tcHV0ZWQgb25lXG4gICAgcmVzdWx0W2NoaWxkLmtleV0gPSBtYXBwZXIoY2hpbGQpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKlxuICogV2hlbiB5b3UncmUgYWRkaW5nIG9yIHJlbW92aW5nIGNoaWxkcmVuIHNvbWUgbWF5IGJlIGFkZGVkIG9yIHJlbW92ZWQgaW4gdGhlXG4gKiBzYW1lIHJlbmRlciBwYXNzLiBXZSB3YW50IHRvIHNob3cgKmJvdGgqIHNpbmNlIHdlIHdhbnQgdG8gc2ltdWx0YW5lb3VzbHlcbiAqIGFuaW1hdGUgZWxlbWVudHMgaW4gYW5kIG91dC4gVGhpcyBmdW5jdGlvbiB0YWtlcyBhIHByZXZpb3VzIHNldCBvZiBrZXlzXG4gKiBhbmQgYSBuZXcgc2V0IG9mIGtleXMgYW5kIG1lcmdlcyB0aGVtIHdpdGggaXRzIGJlc3QgZ3Vlc3Mgb2YgdGhlIGNvcnJlY3RcbiAqIG9yZGVyaW5nLiBJbiB0aGUgZnV0dXJlIHdlIG1heSBleHBvc2Ugc29tZSBvZiB0aGUgdXRpbGl0aWVzIGluXG4gKiBSZWFjdE11bHRpQ2hpbGQgdG8gbWFrZSB0aGlzIGVhc3ksIGJ1dCBmb3Igbm93IFJlYWN0IGl0c2VsZiBkb2VzIG5vdFxuICogZGlyZWN0bHkgaGF2ZSB0aGlzIGNvbmNlcHQgb2YgdGhlIHVuaW9uIG9mIHByZXZDaGlsZHJlbiBhbmQgbmV4dENoaWxkcmVuXG4gKiBzbyB3ZSBpbXBsZW1lbnQgaXQgaGVyZS5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gcHJldiBwcmV2IGNoaWxkcmVuIGFzIHJldHVybmVkIGZyb21cbiAqIGBSZWFjdFRyYW5zaXRpb25DaGlsZE1hcHBpbmcuZ2V0Q2hpbGRNYXBwaW5nKClgLlxuICogQHBhcmFtIHtvYmplY3R9IG5leHQgbmV4dCBjaGlsZHJlbiBhcyByZXR1cm5lZCBmcm9tXG4gKiBgUmVhY3RUcmFuc2l0aW9uQ2hpbGRNYXBwaW5nLmdldENoaWxkTWFwcGluZygpYC5cbiAqIEByZXR1cm4ge29iamVjdH0gYSBrZXkgc2V0IHRoYXQgY29udGFpbnMgYWxsIGtleXMgaW4gYHByZXZgIGFuZCBhbGwga2V5c1xuICogaW4gYG5leHRgIGluIGEgcmVhc29uYWJsZSBvcmRlci5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VDaGlsZE1hcHBpbmdzKHByZXYsIG5leHQpIHtcbiAgcHJldiA9IHByZXYgfHwge307XG4gIG5leHQgPSBuZXh0IHx8IHt9O1xuXG4gIGZ1bmN0aW9uIGdldFZhbHVlRm9yS2V5KGtleSkge1xuICAgIHJldHVybiBrZXkgaW4gbmV4dCA/IG5leHRba2V5XSA6IHByZXZba2V5XTtcbiAgfSAvLyBGb3IgZWFjaCBrZXkgb2YgYG5leHRgLCB0aGUgbGlzdCBvZiBrZXlzIHRvIGluc2VydCBiZWZvcmUgdGhhdCBrZXkgaW5cbiAgLy8gdGhlIGNvbWJpbmVkIGxpc3RcblxuXG4gIHZhciBuZXh0S2V5c1BlbmRpbmcgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB2YXIgcGVuZGluZ0tleXMgPSBbXTtcblxuICBmb3IgKHZhciBwcmV2S2V5IGluIHByZXYpIHtcbiAgICBpZiAocHJldktleSBpbiBuZXh0KSB7XG4gICAgICBpZiAocGVuZGluZ0tleXMubGVuZ3RoKSB7XG4gICAgICAgIG5leHRLZXlzUGVuZGluZ1twcmV2S2V5XSA9IHBlbmRpbmdLZXlzO1xuICAgICAgICBwZW5kaW5nS2V5cyA9IFtdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZW5kaW5nS2V5cy5wdXNoKHByZXZLZXkpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBpO1xuICB2YXIgY2hpbGRNYXBwaW5nID0ge307XG5cbiAgZm9yICh2YXIgbmV4dEtleSBpbiBuZXh0KSB7XG4gICAgaWYgKG5leHRLZXlzUGVuZGluZ1tuZXh0S2V5XSkge1xuICAgICAgZm9yIChpID0gMDsgaSA8IG5leHRLZXlzUGVuZGluZ1tuZXh0S2V5XS5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgcGVuZGluZ05leHRLZXkgPSBuZXh0S2V5c1BlbmRpbmdbbmV4dEtleV1baV07XG4gICAgICAgIGNoaWxkTWFwcGluZ1tuZXh0S2V5c1BlbmRpbmdbbmV4dEtleV1baV1dID0gZ2V0VmFsdWVGb3JLZXkocGVuZGluZ05leHRLZXkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNoaWxkTWFwcGluZ1tuZXh0S2V5XSA9IGdldFZhbHVlRm9yS2V5KG5leHRLZXkpO1xuICB9IC8vIEZpbmFsbHksIGFkZCB0aGUga2V5cyB3aGljaCBkaWRuJ3QgYXBwZWFyIGJlZm9yZSBhbnkga2V5IGluIGBuZXh0YFxuXG5cbiAgZm9yIChpID0gMDsgaSA8IHBlbmRpbmdLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgY2hpbGRNYXBwaW5nW3BlbmRpbmdLZXlzW2ldXSA9IGdldFZhbHVlRm9yS2V5KHBlbmRpbmdLZXlzW2ldKTtcbiAgfVxuXG4gIHJldHVybiBjaGlsZE1hcHBpbmc7XG59XG5cbmZ1bmN0aW9uIGdldFByb3AoY2hpbGQsIHByb3AsIHByb3BzKSB7XG4gIHJldHVybiBwcm9wc1twcm9wXSAhPSBudWxsID8gcHJvcHNbcHJvcF0gOiBjaGlsZC5wcm9wc1twcm9wXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEluaXRpYWxDaGlsZE1hcHBpbmcocHJvcHMsIG9uRXhpdGVkKSB7XG4gIHJldHVybiBnZXRDaGlsZE1hcHBpbmcocHJvcHMuY2hpbGRyZW4sIGZ1bmN0aW9uIChjaGlsZCkge1xuICAgIHJldHVybiBjbG9uZUVsZW1lbnQoY2hpbGQsIHtcbiAgICAgIG9uRXhpdGVkOiBvbkV4aXRlZC5iaW5kKG51bGwsIGNoaWxkKSxcbiAgICAgIGluOiB0cnVlLFxuICAgICAgYXBwZWFyOiBnZXRQcm9wKGNoaWxkLCAnYXBwZWFyJywgcHJvcHMpLFxuICAgICAgZW50ZXI6IGdldFByb3AoY2hpbGQsICdlbnRlcicsIHByb3BzKSxcbiAgICAgIGV4aXQ6IGdldFByb3AoY2hpbGQsICdleGl0JywgcHJvcHMpXG4gICAgfSk7XG4gIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldE5leHRDaGlsZE1hcHBpbmcobmV4dFByb3BzLCBwcmV2Q2hpbGRNYXBwaW5nLCBvbkV4aXRlZCkge1xuICB2YXIgbmV4dENoaWxkTWFwcGluZyA9IGdldENoaWxkTWFwcGluZyhuZXh0UHJvcHMuY2hpbGRyZW4pO1xuICB2YXIgY2hpbGRyZW4gPSBtZXJnZUNoaWxkTWFwcGluZ3MocHJldkNoaWxkTWFwcGluZywgbmV4dENoaWxkTWFwcGluZyk7XG4gIE9iamVjdC5rZXlzKGNoaWxkcmVuKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgY2hpbGQgPSBjaGlsZHJlbltrZXldO1xuICAgIGlmICghaXNWYWxpZEVsZW1lbnQoY2hpbGQpKSByZXR1cm47XG4gICAgdmFyIGhhc1ByZXYgPSAoa2V5IGluIHByZXZDaGlsZE1hcHBpbmcpO1xuICAgIHZhciBoYXNOZXh0ID0gKGtleSBpbiBuZXh0Q2hpbGRNYXBwaW5nKTtcbiAgICB2YXIgcHJldkNoaWxkID0gcHJldkNoaWxkTWFwcGluZ1trZXldO1xuICAgIHZhciBpc0xlYXZpbmcgPSBpc1ZhbGlkRWxlbWVudChwcmV2Q2hpbGQpICYmICFwcmV2Q2hpbGQucHJvcHMuaW47IC8vIGl0ZW0gaXMgbmV3IChlbnRlcmluZylcblxuICAgIGlmIChoYXNOZXh0ICYmICghaGFzUHJldiB8fCBpc0xlYXZpbmcpKSB7XG4gICAgICAvLyBjb25zb2xlLmxvZygnZW50ZXJpbmcnLCBrZXkpXG4gICAgICBjaGlsZHJlbltrZXldID0gY2xvbmVFbGVtZW50KGNoaWxkLCB7XG4gICAgICAgIG9uRXhpdGVkOiBvbkV4aXRlZC5iaW5kKG51bGwsIGNoaWxkKSxcbiAgICAgICAgaW46IHRydWUsXG4gICAgICAgIGV4aXQ6IGdldFByb3AoY2hpbGQsICdleGl0JywgbmV4dFByb3BzKSxcbiAgICAgICAgZW50ZXI6IGdldFByb3AoY2hpbGQsICdlbnRlcicsIG5leHRQcm9wcylcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoIWhhc05leHQgJiYgaGFzUHJldiAmJiAhaXNMZWF2aW5nKSB7XG4gICAgICAvLyBpdGVtIGlzIG9sZCAoZXhpdGluZylcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdsZWF2aW5nJywga2V5KVxuICAgICAgY2hpbGRyZW5ba2V5XSA9IGNsb25lRWxlbWVudChjaGlsZCwge1xuICAgICAgICBpbjogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoaGFzTmV4dCAmJiBoYXNQcmV2ICYmIGlzVmFsaWRFbGVtZW50KHByZXZDaGlsZCkpIHtcbiAgICAgIC8vIGl0ZW0gaGFzbid0IGNoYW5nZWQgdHJhbnNpdGlvbiBzdGF0ZXNcbiAgICAgIC8vIGNvcHkgb3ZlciB0aGUgbGFzdCB0cmFuc2l0aW9uIHByb3BzO1xuICAgICAgLy8gY29uc29sZS5sb2coJ3VuY2hhbmdlZCcsIGtleSlcbiAgICAgIGNoaWxkcmVuW2tleV0gPSBjbG9uZUVsZW1lbnQoY2hpbGQsIHtcbiAgICAgICAgb25FeGl0ZWQ6IG9uRXhpdGVkLmJpbmQobnVsbCwgY2hpbGQpLFxuICAgICAgICBpbjogcHJldkNoaWxkLnByb3BzLmluLFxuICAgICAgICBleGl0OiBnZXRQcm9wKGNoaWxkLCAnZXhpdCcsIG5leHRQcm9wcyksXG4gICAgICAgIGVudGVyOiBnZXRQcm9wKGNoaWxkLCAnZW50ZXInLCBuZXh0UHJvcHMpXG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gY2hpbGRyZW47XG59IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImFjdGlvblwiLCBcImNlbnRlclJpcHBsZVwiLCBcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29tcG9uZW50XCIsIFwiZGlzYWJsZWRcIiwgXCJkaXNhYmxlUmlwcGxlXCIsIFwiZGlzYWJsZVRvdWNoUmlwcGxlXCIsIFwiZm9jdXNSaXBwbGVcIiwgXCJmb2N1c1Zpc2libGVDbGFzc05hbWVcIiwgXCJMaW5rQ29tcG9uZW50XCIsIFwib25CbHVyXCIsIFwib25DbGlja1wiLCBcIm9uQ29udGV4dE1lbnVcIiwgXCJvbkRyYWdMZWF2ZVwiLCBcIm9uRm9jdXNcIiwgXCJvbkZvY3VzVmlzaWJsZVwiLCBcIm9uS2V5RG93blwiLCBcIm9uS2V5VXBcIiwgXCJvbk1vdXNlRG93blwiLCBcIm9uTW91c2VMZWF2ZVwiLCBcIm9uTW91c2VVcFwiLCBcIm9uVG91Y2hFbmRcIiwgXCJvblRvdWNoTW92ZVwiLCBcIm9uVG91Y2hTdGFydFwiLCBcInRhYkluZGV4XCIsIFwiVG91Y2hSaXBwbGVQcm9wc1wiLCBcInRvdWNoUmlwcGxlUmVmXCIsIFwidHlwZVwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCByZWZUeXBlIGZyb20gJ0BtdWkvdXRpbHMvcmVmVHlwZSc7XG5pbXBvcnQgZWxlbWVudFR5cGVBY2NlcHRpbmdSZWYgZnJvbSAnQG11aS91dGlscy9lbGVtZW50VHlwZUFjY2VwdGluZ1JlZic7XG5pbXBvcnQgY29tcG9zZUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IHVzZUZvcmtSZWYgZnJvbSAnLi4vdXRpbHMvdXNlRm9ya1JlZic7XG5pbXBvcnQgdXNlRXZlbnRDYWxsYmFjayBmcm9tICcuLi91dGlscy91c2VFdmVudENhbGxiYWNrJztcbmltcG9ydCB1c2VJc0ZvY3VzVmlzaWJsZSBmcm9tICcuLi91dGlscy91c2VJc0ZvY3VzVmlzaWJsZSc7XG5pbXBvcnQgVG91Y2hSaXBwbGUgZnJvbSAnLi9Ub3VjaFJpcHBsZSc7XG5pbXBvcnQgYnV0dG9uQmFzZUNsYXNzZXMsIHsgZ2V0QnV0dG9uQmFzZVV0aWxpdHlDbGFzcyB9IGZyb20gJy4vYnV0dG9uQmFzZUNsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBkaXNhYmxlZCxcbiAgICBmb2N1c1Zpc2libGUsXG4gICAgZm9jdXNWaXNpYmxlQ2xhc3NOYW1lLFxuICAgIGNsYXNzZXNcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIGRpc2FibGVkICYmICdkaXNhYmxlZCcsIGZvY3VzVmlzaWJsZSAmJiAnZm9jdXNWaXNpYmxlJ11cbiAgfTtcbiAgY29uc3QgY29tcG9zZWRDbGFzc2VzID0gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldEJ1dHRvbkJhc2VVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xuICBpZiAoZm9jdXNWaXNpYmxlICYmIGZvY3VzVmlzaWJsZUNsYXNzTmFtZSkge1xuICAgIGNvbXBvc2VkQ2xhc3Nlcy5yb290ICs9IGAgJHtmb2N1c1Zpc2libGVDbGFzc05hbWV9YDtcbiAgfVxuICByZXR1cm4gY29tcG9zZWRDbGFzc2VzO1xufTtcbmV4cG9ydCBjb25zdCBCdXR0b25CYXNlUm9vdCA9IHN0eWxlZCgnYnV0dG9uJywge1xuICBuYW1lOiAnTXVpQnV0dG9uQmFzZScsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMucm9vdFxufSkoe1xuICBkaXNwbGF5OiAnaW5saW5lLWZsZXgnLFxuICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgYm94U2l6aW5nOiAnYm9yZGVyLWJveCcsXG4gIFdlYmtpdFRhcEhpZ2hsaWdodENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gIC8vIFJlc2V0IGRlZmF1bHQgdmFsdWVcbiAgLy8gV2UgZGlzYWJsZSB0aGUgZm9jdXMgcmluZyBmb3IgbW91c2UsIHRvdWNoIGFuZCBrZXlib2FyZCB1c2Vycy5cbiAgb3V0bGluZTogMCxcbiAgYm9yZGVyOiAwLFxuICBtYXJnaW46IDAsXG4gIC8vIFJlbW92ZSB0aGUgbWFyZ2luIGluIFNhZmFyaVxuICBib3JkZXJSYWRpdXM6IDAsXG4gIHBhZGRpbmc6IDAsXG4gIC8vIFJlbW92ZSB0aGUgcGFkZGluZyBpbiBGaXJlZm94XG4gIGN1cnNvcjogJ3BvaW50ZXInLFxuICB1c2VyU2VsZWN0OiAnbm9uZScsXG4gIHZlcnRpY2FsQWxpZ246ICdtaWRkbGUnLFxuICBNb3pBcHBlYXJhbmNlOiAnbm9uZScsXG4gIC8vIFJlc2V0XG4gIFdlYmtpdEFwcGVhcmFuY2U6ICdub25lJyxcbiAgLy8gUmVzZXRcbiAgdGV4dERlY29yYXRpb246ICdub25lJyxcbiAgLy8gU28gd2UgdGFrZSBwcmVjZWRlbnQgb3ZlciB0aGUgc3R5bGUgb2YgYSBuYXRpdmUgPGEgLz4gZWxlbWVudC5cbiAgY29sb3I6ICdpbmhlcml0JyxcbiAgJyY6Oi1tb3otZm9jdXMtaW5uZXInOiB7XG4gICAgYm9yZGVyU3R5bGU6ICdub25lJyAvLyBSZW1vdmUgRmlyZWZveCBkb3R0ZWQgb3V0bGluZS5cbiAgfSxcbiAgW2AmLiR7YnV0dG9uQmFzZUNsYXNzZXMuZGlzYWJsZWR9YF06IHtcbiAgICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG4gICAgLy8gRGlzYWJsZSBsaW5rIGludGVyYWN0aW9uc1xuICAgIGN1cnNvcjogJ2RlZmF1bHQnXG4gIH0sXG4gICdAbWVkaWEgcHJpbnQnOiB7XG4gICAgY29sb3JBZGp1c3Q6ICdleGFjdCdcbiAgfVxufSk7XG5cbi8qKlxuICogYEJ1dHRvbkJhc2VgIGNvbnRhaW5zIGFzIGZldyBzdHlsZXMgYXMgcG9zc2libGUuXG4gKiBJdCBhaW1zIHRvIGJlIGEgc2ltcGxlIGJ1aWxkaW5nIGJsb2NrIGZvciBjcmVhdGluZyBhIGJ1dHRvbi5cbiAqIEl0IGNvbnRhaW5zIGEgbG9hZCBvZiBzdHlsZSByZXNldCBhbmQgc29tZSBmb2N1cy9yaXBwbGUgbG9naWMuXG4gKi9cbmNvbnN0IEJ1dHRvbkJhc2UgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBCdXR0b25CYXNlKGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlCdXR0b25CYXNlJ1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgYWN0aW9uLFxuICAgICAgY2VudGVyUmlwcGxlID0gZmFsc2UsXG4gICAgICBjaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNvbXBvbmVudCA9ICdidXR0b24nLFxuICAgICAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgICAgIGRpc2FibGVSaXBwbGUgPSBmYWxzZSxcbiAgICAgIGRpc2FibGVUb3VjaFJpcHBsZSA9IGZhbHNlLFxuICAgICAgZm9jdXNSaXBwbGUgPSBmYWxzZSxcbiAgICAgIExpbmtDb21wb25lbnQgPSAnYScsXG4gICAgICBvbkJsdXIsXG4gICAgICBvbkNsaWNrLFxuICAgICAgb25Db250ZXh0TWVudSxcbiAgICAgIG9uRHJhZ0xlYXZlLFxuICAgICAgb25Gb2N1cyxcbiAgICAgIG9uRm9jdXNWaXNpYmxlLFxuICAgICAgb25LZXlEb3duLFxuICAgICAgb25LZXlVcCxcbiAgICAgIG9uTW91c2VEb3duLFxuICAgICAgb25Nb3VzZUxlYXZlLFxuICAgICAgb25Nb3VzZVVwLFxuICAgICAgb25Ub3VjaEVuZCxcbiAgICAgIG9uVG91Y2hNb3ZlLFxuICAgICAgb25Ub3VjaFN0YXJ0LFxuICAgICAgdGFiSW5kZXggPSAwLFxuICAgICAgVG91Y2hSaXBwbGVQcm9wcyxcbiAgICAgIHRvdWNoUmlwcGxlUmVmLFxuICAgICAgdHlwZVxuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBidXR0b25SZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IHJpcHBsZVJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3QgaGFuZGxlUmlwcGxlUmVmID0gdXNlRm9ya1JlZihyaXBwbGVSZWYsIHRvdWNoUmlwcGxlUmVmKTtcbiAgY29uc3Qge1xuICAgIGlzRm9jdXNWaXNpYmxlUmVmLFxuICAgIG9uRm9jdXM6IGhhbmRsZUZvY3VzVmlzaWJsZSxcbiAgICBvbkJsdXI6IGhhbmRsZUJsdXJWaXNpYmxlLFxuICAgIHJlZjogZm9jdXNWaXNpYmxlUmVmXG4gIH0gPSB1c2VJc0ZvY3VzVmlzaWJsZSgpO1xuICBjb25zdCBbZm9jdXNWaXNpYmxlLCBzZXRGb2N1c1Zpc2libGVdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBpZiAoZGlzYWJsZWQgJiYgZm9jdXNWaXNpYmxlKSB7XG4gICAgc2V0Rm9jdXNWaXNpYmxlKGZhbHNlKTtcbiAgfVxuICBSZWFjdC51c2VJbXBlcmF0aXZlSGFuZGxlKGFjdGlvbiwgKCkgPT4gKHtcbiAgICBmb2N1c1Zpc2libGU6ICgpID0+IHtcbiAgICAgIHNldEZvY3VzVmlzaWJsZSh0cnVlKTtcbiAgICAgIGJ1dHRvblJlZi5jdXJyZW50LmZvY3VzKCk7XG4gICAgfVxuICB9KSwgW10pO1xuICBjb25zdCBbbW91bnRlZFN0YXRlLCBzZXRNb3VudGVkU3RhdGVdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldE1vdW50ZWRTdGF0ZSh0cnVlKTtcbiAgfSwgW10pO1xuICBjb25zdCBlbmFibGVUb3VjaFJpcHBsZSA9IG1vdW50ZWRTdGF0ZSAmJiAhZGlzYWJsZVJpcHBsZSAmJiAhZGlzYWJsZWQ7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGZvY3VzVmlzaWJsZSAmJiBmb2N1c1JpcHBsZSAmJiAhZGlzYWJsZVJpcHBsZSAmJiBtb3VudGVkU3RhdGUpIHtcbiAgICAgIHJpcHBsZVJlZi5jdXJyZW50LnB1bHNhdGUoKTtcbiAgICB9XG4gIH0sIFtkaXNhYmxlUmlwcGxlLCBmb2N1c1JpcHBsZSwgZm9jdXNWaXNpYmxlLCBtb3VudGVkU3RhdGVdKTtcbiAgZnVuY3Rpb24gdXNlUmlwcGxlSGFuZGxlcihyaXBwbGVBY3Rpb24sIGV2ZW50Q2FsbGJhY2ssIHNraXBSaXBwbGVBY3Rpb24gPSBkaXNhYmxlVG91Y2hSaXBwbGUpIHtcbiAgICByZXR1cm4gdXNlRXZlbnRDYWxsYmFjayhldmVudCA9PiB7XG4gICAgICBpZiAoZXZlbnRDYWxsYmFjaykge1xuICAgICAgICBldmVudENhbGxiYWNrKGV2ZW50KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGlnbm9yZSA9IHNraXBSaXBwbGVBY3Rpb247XG4gICAgICBpZiAoIWlnbm9yZSAmJiByaXBwbGVSZWYuY3VycmVudCkge1xuICAgICAgICByaXBwbGVSZWYuY3VycmVudFtyaXBwbGVBY3Rpb25dKGV2ZW50KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuICB9XG4gIGNvbnN0IGhhbmRsZU1vdXNlRG93biA9IHVzZVJpcHBsZUhhbmRsZXIoJ3N0YXJ0Jywgb25Nb3VzZURvd24pO1xuICBjb25zdCBoYW5kbGVDb250ZXh0TWVudSA9IHVzZVJpcHBsZUhhbmRsZXIoJ3N0b3AnLCBvbkNvbnRleHRNZW51KTtcbiAgY29uc3QgaGFuZGxlRHJhZ0xlYXZlID0gdXNlUmlwcGxlSGFuZGxlcignc3RvcCcsIG9uRHJhZ0xlYXZlKTtcbiAgY29uc3QgaGFuZGxlTW91c2VVcCA9IHVzZVJpcHBsZUhhbmRsZXIoJ3N0b3AnLCBvbk1vdXNlVXApO1xuICBjb25zdCBoYW5kbGVNb3VzZUxlYXZlID0gdXNlUmlwcGxlSGFuZGxlcignc3RvcCcsIGV2ZW50ID0+IHtcbiAgICBpZiAoZm9jdXNWaXNpYmxlKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICBpZiAob25Nb3VzZUxlYXZlKSB7XG4gICAgICBvbk1vdXNlTGVhdmUoZXZlbnQpO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IGhhbmRsZVRvdWNoU3RhcnQgPSB1c2VSaXBwbGVIYW5kbGVyKCdzdGFydCcsIG9uVG91Y2hTdGFydCk7XG4gIGNvbnN0IGhhbmRsZVRvdWNoRW5kID0gdXNlUmlwcGxlSGFuZGxlcignc3RvcCcsIG9uVG91Y2hFbmQpO1xuICBjb25zdCBoYW5kbGVUb3VjaE1vdmUgPSB1c2VSaXBwbGVIYW5kbGVyKCdzdG9wJywgb25Ub3VjaE1vdmUpO1xuICBjb25zdCBoYW5kbGVCbHVyID0gdXNlUmlwcGxlSGFuZGxlcignc3RvcCcsIGV2ZW50ID0+IHtcbiAgICBoYW5kbGVCbHVyVmlzaWJsZShldmVudCk7XG4gICAgaWYgKGlzRm9jdXNWaXNpYmxlUmVmLmN1cnJlbnQgPT09IGZhbHNlKSB7XG4gICAgICBzZXRGb2N1c1Zpc2libGUoZmFsc2UpO1xuICAgIH1cbiAgICBpZiAob25CbHVyKSB7XG4gICAgICBvbkJsdXIoZXZlbnQpO1xuICAgIH1cbiAgfSwgZmFsc2UpO1xuICBjb25zdCBoYW5kbGVGb2N1cyA9IHVzZUV2ZW50Q2FsbGJhY2soZXZlbnQgPT4ge1xuICAgIC8vIEZpeCBmb3IgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy83NzY5XG4gICAgaWYgKCFidXR0b25SZWYuY3VycmVudCkge1xuICAgICAgYnV0dG9uUmVmLmN1cnJlbnQgPSBldmVudC5jdXJyZW50VGFyZ2V0O1xuICAgIH1cbiAgICBoYW5kbGVGb2N1c1Zpc2libGUoZXZlbnQpO1xuICAgIGlmIChpc0ZvY3VzVmlzaWJsZVJlZi5jdXJyZW50ID09PSB0cnVlKSB7XG4gICAgICBzZXRGb2N1c1Zpc2libGUodHJ1ZSk7XG4gICAgICBpZiAob25Gb2N1c1Zpc2libGUpIHtcbiAgICAgICAgb25Gb2N1c1Zpc2libGUoZXZlbnQpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAob25Gb2N1cykge1xuICAgICAgb25Gb2N1cyhldmVudCk7XG4gICAgfVxuICB9KTtcbiAgY29uc3QgaXNOb25OYXRpdmVCdXR0b24gPSAoKSA9PiB7XG4gICAgY29uc3QgYnV0dG9uID0gYnV0dG9uUmVmLmN1cnJlbnQ7XG4gICAgcmV0dXJuIGNvbXBvbmVudCAmJiBjb21wb25lbnQgIT09ICdidXR0b24nICYmICEoYnV0dG9uLnRhZ05hbWUgPT09ICdBJyAmJiBidXR0b24uaHJlZik7XG4gIH07XG5cbiAgLyoqXG4gICAqIElFMTEgc2hpbSBmb3IgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0tleWJvYXJkRXZlbnQvcmVwZWF0XG4gICAqL1xuICBjb25zdCBrZXlkb3duUmVmID0gUmVhY3QudXNlUmVmKGZhbHNlKTtcbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IHVzZUV2ZW50Q2FsbGJhY2soZXZlbnQgPT4ge1xuICAgIC8vIENoZWNrIGlmIGtleSBpcyBhbHJlYWR5IGRvd24gdG8gYXZvaWQgcmVwZWF0cyBiZWluZyBjb3VudGVkIGFzIG11bHRpcGxlIGFjdGl2YXRpb25zXG4gICAgaWYgKGZvY3VzUmlwcGxlICYmICFrZXlkb3duUmVmLmN1cnJlbnQgJiYgZm9jdXNWaXNpYmxlICYmIHJpcHBsZVJlZi5jdXJyZW50ICYmIGV2ZW50LmtleSA9PT0gJyAnKSB7XG4gICAgICBrZXlkb3duUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgcmlwcGxlUmVmLmN1cnJlbnQuc3RvcChldmVudCwgKCkgPT4ge1xuICAgICAgICByaXBwbGVSZWYuY3VycmVudC5zdGFydChldmVudCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKGV2ZW50LnRhcmdldCA9PT0gZXZlbnQuY3VycmVudFRhcmdldCAmJiBpc05vbk5hdGl2ZUJ1dHRvbigpICYmIGV2ZW50LmtleSA9PT0gJyAnKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICBpZiAob25LZXlEb3duKSB7XG4gICAgICBvbktleURvd24oZXZlbnQpO1xuICAgIH1cblxuICAgIC8vIEtleWJvYXJkIGFjY2Vzc2liaWxpdHkgZm9yIG5vbiBpbnRlcmFjdGl2ZSBlbGVtZW50c1xuICAgIGlmIChldmVudC50YXJnZXQgPT09IGV2ZW50LmN1cnJlbnRUYXJnZXQgJiYgaXNOb25OYXRpdmVCdXR0b24oKSAmJiBldmVudC5rZXkgPT09ICdFbnRlcicgJiYgIWRpc2FibGVkKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgaWYgKG9uQ2xpY2spIHtcbiAgICAgICAgb25DbGljayhldmVudCk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgY29uc3QgaGFuZGxlS2V5VXAgPSB1c2VFdmVudENhbGxiYWNrKGV2ZW50ID0+IHtcbiAgICAvLyBjYWxsaW5nIHByZXZlbnREZWZhdWx0IGluIGtleVVwIG9uIGEgPGJ1dHRvbj4gd2lsbCBub3QgZGlzcGF0Y2ggYSBjbGljayBldmVudCBpZiBTcGFjZSBpcyBwcmVzc2VkXG4gICAgLy8gaHR0cHM6Ly9jb2Rlc2FuZGJveC5pby9wL3NhbmRib3gvYnV0dG9uLWtleXVwLXByZXZlbnRkZWZhdWx0LWRuN2YwXG4gICAgaWYgKGZvY3VzUmlwcGxlICYmIGV2ZW50LmtleSA9PT0gJyAnICYmIHJpcHBsZVJlZi5jdXJyZW50ICYmIGZvY3VzVmlzaWJsZSAmJiAhZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAga2V5ZG93blJlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICByaXBwbGVSZWYuY3VycmVudC5zdG9wKGV2ZW50LCAoKSA9PiB7XG4gICAgICAgIHJpcHBsZVJlZi5jdXJyZW50LnB1bHNhdGUoZXZlbnQpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChvbktleVVwKSB7XG4gICAgICBvbktleVVwKGV2ZW50KTtcbiAgICB9XG5cbiAgICAvLyBLZXlib2FyZCBhY2Nlc3NpYmlsaXR5IGZvciBub24gaW50ZXJhY3RpdmUgZWxlbWVudHNcbiAgICBpZiAob25DbGljayAmJiBldmVudC50YXJnZXQgPT09IGV2ZW50LmN1cnJlbnRUYXJnZXQgJiYgaXNOb25OYXRpdmVCdXR0b24oKSAmJiBldmVudC5rZXkgPT09ICcgJyAmJiAhZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgb25DbGljayhldmVudCk7XG4gICAgfVxuICB9KTtcbiAgbGV0IENvbXBvbmVudFByb3AgPSBjb21wb25lbnQ7XG4gIGlmIChDb21wb25lbnRQcm9wID09PSAnYnV0dG9uJyAmJiAob3RoZXIuaHJlZiB8fCBvdGhlci50bykpIHtcbiAgICBDb21wb25lbnRQcm9wID0gTGlua0NvbXBvbmVudDtcbiAgfVxuICBjb25zdCBidXR0b25Qcm9wcyA9IHt9O1xuICBpZiAoQ29tcG9uZW50UHJvcCA9PT0gJ2J1dHRvbicpIHtcbiAgICBidXR0b25Qcm9wcy50eXBlID0gdHlwZSA9PT0gdW5kZWZpbmVkID8gJ2J1dHRvbicgOiB0eXBlO1xuICAgIGJ1dHRvblByb3BzLmRpc2FibGVkID0gZGlzYWJsZWQ7XG4gIH0gZWxzZSB7XG4gICAgaWYgKCFvdGhlci5ocmVmICYmICFvdGhlci50bykge1xuICAgICAgYnV0dG9uUHJvcHMucm9sZSA9ICdidXR0b24nO1xuICAgIH1cbiAgICBpZiAoZGlzYWJsZWQpIHtcbiAgICAgIGJ1dHRvblByb3BzWydhcmlhLWRpc2FibGVkJ10gPSBkaXNhYmxlZDtcbiAgICB9XG4gIH1cbiAgY29uc3QgaGFuZGxlUmVmID0gdXNlRm9ya1JlZihyZWYsIGZvY3VzVmlzaWJsZVJlZiwgYnV0dG9uUmVmKTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvcnVsZXMtb2YtaG9va3NcbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKGVuYWJsZVRvdWNoUmlwcGxlICYmICFyaXBwbGVSZWYuY3VycmVudCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFsnTVVJOiBUaGUgYGNvbXBvbmVudGAgcHJvcCBwcm92aWRlZCB0byBCdXR0b25CYXNlIGlzIGludmFsaWQuJywgJ1BsZWFzZSBtYWtlIHN1cmUgdGhlIGNoaWxkcmVuIHByb3AgaXMgcmVuZGVyZWQgaW4gdGhpcyBjdXN0b20gY29tcG9uZW50LiddLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICB9LCBbZW5hYmxlVG91Y2hSaXBwbGVdKTtcbiAgfVxuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY2VudGVyUmlwcGxlLFxuICAgIGNvbXBvbmVudCxcbiAgICBkaXNhYmxlZCxcbiAgICBkaXNhYmxlUmlwcGxlLFxuICAgIGRpc2FibGVUb3VjaFJpcHBsZSxcbiAgICBmb2N1c1JpcHBsZSxcbiAgICB0YWJJbmRleCxcbiAgICBmb2N1c1Zpc2libGVcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4cyhCdXR0b25CYXNlUm9vdCwgX2V4dGVuZHMoe1xuICAgIGFzOiBDb21wb25lbnRQcm9wLFxuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSksXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICBvbkJsdXI6IGhhbmRsZUJsdXIsXG4gICAgb25DbGljazogb25DbGljayxcbiAgICBvbkNvbnRleHRNZW51OiBoYW5kbGVDb250ZXh0TWVudSxcbiAgICBvbkZvY3VzOiBoYW5kbGVGb2N1cyxcbiAgICBvbktleURvd246IGhhbmRsZUtleURvd24sXG4gICAgb25LZXlVcDogaGFuZGxlS2V5VXAsXG4gICAgb25Nb3VzZURvd246IGhhbmRsZU1vdXNlRG93bixcbiAgICBvbk1vdXNlTGVhdmU6IGhhbmRsZU1vdXNlTGVhdmUsXG4gICAgb25Nb3VzZVVwOiBoYW5kbGVNb3VzZVVwLFxuICAgIG9uRHJhZ0xlYXZlOiBoYW5kbGVEcmFnTGVhdmUsXG4gICAgb25Ub3VjaEVuZDogaGFuZGxlVG91Y2hFbmQsXG4gICAgb25Ub3VjaE1vdmU6IGhhbmRsZVRvdWNoTW92ZSxcbiAgICBvblRvdWNoU3RhcnQ6IGhhbmRsZVRvdWNoU3RhcnQsXG4gICAgcmVmOiBoYW5kbGVSZWYsXG4gICAgdGFiSW5kZXg6IGRpc2FibGVkID8gLTEgOiB0YWJJbmRleCxcbiAgICB0eXBlOiB0eXBlXG4gIH0sIGJ1dHRvblByb3BzLCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiBbY2hpbGRyZW4sIGVuYWJsZVRvdWNoUmlwcGxlID9cbiAgICAvKiNfX1BVUkVfXyovXG4gICAgLyogVG91Y2hSaXBwbGUgaXMgb25seSBuZWVkZWQgY2xpZW50LXNpZGUsIHgyIGJvb3N0IG9uIHRoZSBzZXJ2ZXIuICovXG4gICAgX2pzeChUb3VjaFJpcHBsZSwgX2V4dGVuZHMoe1xuICAgICAgcmVmOiBoYW5kbGVSaXBwbGVSZWYsXG4gICAgICBjZW50ZXI6IGNlbnRlclJpcHBsZVxuICAgIH0sIFRvdWNoUmlwcGxlUHJvcHMpKSA6IG51bGxdXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gQnV0dG9uQmFzZS5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gXHUyNTBDXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwIFdhcm5pbmcgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTEwXG4gIC8vIFx1MjUwMiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIFx1MjUwMlxuICAvLyBcdTI1MDIgICAgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuICAgICBcdTI1MDJcbiAgLy8gXHUyNTE0XHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTE4XG4gIC8qKlxuICAgKiBBIHJlZiBmb3IgaW1wZXJhdGl2ZSBhY3Rpb25zLlxuICAgKiBJdCBjdXJyZW50bHkgb25seSBzdXBwb3J0cyBgZm9jdXNWaXNpYmxlKClgIGFjdGlvbi5cbiAgICovXG4gIGFjdGlvbjogcmVmVHlwZSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHJpcHBsZXMgYXJlIGNlbnRlcmVkLlxuICAgKiBUaGV5IHdvbid0IHN0YXJ0IGF0IHRoZSBjdXJzb3IgaW50ZXJhY3Rpb24gcG9zaXRpb24uXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBjZW50ZXJSaXBwbGU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IGVsZW1lbnRUeXBlQWNjZXB0aW5nUmVmLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIGRpc2FibGVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgcmlwcGxlIGVmZmVjdCBpcyBkaXNhYmxlZC5cbiAgICpcbiAgICogXHUyNkEwXHVGRTBGIFdpdGhvdXQgYSByaXBwbGUgdGhlcmUgaXMgbm8gc3R5bGluZyBmb3IgOmZvY3VzLXZpc2libGUgYnkgZGVmYXVsdC4gQmUgc3VyZVxuICAgKiB0byBoaWdobGlnaHQgdGhlIGVsZW1lbnQgYnkgYXBwbHlpbmcgc2VwYXJhdGUgc3R5bGVzIHdpdGggdGhlIGAuTXVpLWZvY3VzVmlzaWJsZWAgY2xhc3MuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlUmlwcGxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHRvdWNoIHJpcHBsZSBlZmZlY3QgaXMgZGlzYWJsZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlVG91Y2hSaXBwbGU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYmFzZSBidXR0b24gd2lsbCBoYXZlIGEga2V5Ym9hcmQgZm9jdXMgcmlwcGxlLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZm9jdXNSaXBwbGU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhpcyBwcm9wIGNhbiBoZWxwIGlkZW50aWZ5IHdoaWNoIGVsZW1lbnQgaGFzIGtleWJvYXJkIGZvY3VzLlxuICAgKiBUaGUgY2xhc3MgbmFtZSB3aWxsIGJlIGFwcGxpZWQgd2hlbiB0aGUgZWxlbWVudCBnYWlucyB0aGUgZm9jdXMgdGhyb3VnaCBrZXlib2FyZCBpbnRlcmFjdGlvbi5cbiAgICogSXQncyBhIHBvbHlmaWxsIGZvciB0aGUgW0NTUyA6Zm9jdXMtdmlzaWJsZSBzZWxlY3Rvcl0oaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL3NlbGVjdG9ycy00LyN0aGUtZm9jdXMtdmlzaWJsZS1wc2V1ZG8pLlxuICAgKiBUaGUgcmF0aW9uYWxlIGZvciB1c2luZyB0aGlzIGZlYXR1cmUgW2lzIGV4cGxhaW5lZCBoZXJlXShodHRwczovL2dpdGh1Yi5jb20vV0lDRy9mb2N1cy12aXNpYmxlL2Jsb2IvSEVBRC9leHBsYWluZXIubWQpLlxuICAgKiBBIFtwb2x5ZmlsbCBjYW4gYmUgdXNlZF0oaHR0cHM6Ly9naXRodWIuY29tL1dJQ0cvZm9jdXMtdmlzaWJsZSkgdG8gYXBwbHkgYSBgZm9jdXMtdmlzaWJsZWAgY2xhc3MgdG8gb3RoZXIgY29tcG9uZW50c1xuICAgKiBpZiBuZWVkZWQuXG4gICAqL1xuICBmb2N1c1Zpc2libGVDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBocmVmOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5hbnksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgdG8gcmVuZGVyIGEgbGluayB3aGVuIHRoZSBgaHJlZmAgcHJvcCBpcyBwcm92aWRlZC5cbiAgICogQGRlZmF1bHQgJ2EnXG4gICAqL1xuICBMaW5rQ29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkJsdXI6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkNvbnRleHRNZW51OiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRHJhZ0xlYXZlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRm9jdXM6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIGZvY3VzZWQgd2l0aCBhIGtleWJvYXJkLlxuICAgKiBXZSB0cmlnZ2VyIGEgYG9uRm9jdXNgIGNhbGxiYWNrIHRvby5cbiAgICovXG4gIG9uRm9jdXNWaXNpYmxlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uS2V5RG93bjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbktleVVwOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uTW91c2VEb3duOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uTW91c2VMZWF2ZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbk1vdXNlVXA6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25Ub3VjaEVuZDogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvblRvdWNoTW92ZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvblRvdWNoU3RhcnQ6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgdGFiSW5kZXg6IFByb3BUeXBlcy5udW1iZXIsXG4gIC8qKlxuICAgKiBQcm9wcyBhcHBsaWVkIHRvIHRoZSBgVG91Y2hSaXBwbGVgIGVsZW1lbnQuXG4gICAqL1xuICBUb3VjaFJpcHBsZVByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQSByZWYgdGhhdCBwb2ludHMgdG8gdGhlIGBUb3VjaFJpcHBsZWAgZWxlbWVudC5cbiAgICovXG4gIHRvdWNoUmlwcGxlUmVmOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjdXJyZW50OiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgcHVsc2F0ZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICAgIHN0YXJ0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgICAgc3RvcDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZFxuICAgIH0pXG4gIH0pXSksXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICB0eXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydidXR0b24nLCAncmVzZXQnLCAnc3VibWl0J10pLCBQcm9wVHlwZXMuc3RyaW5nXSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBCdXR0b25CYXNlOyIsICIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjZW50ZXJcIiwgXCJjbGFzc2VzXCIsIFwiY2xhc3NOYW1lXCJdO1xubGV0IF8gPSB0ID0+IHQsXG4gIF90LFxuICBfdDIsXG4gIF90MyxcbiAgX3Q0O1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IFRyYW5zaXRpb25Hcm91cCB9IGZyb20gJ3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyBrZXlmcmFtZXMgfSBmcm9tICdAbXVpL3N5c3RlbSc7XG5pbXBvcnQgdXNlVGltZW91dCBmcm9tICdAbXVpL3V0aWxzL3VzZVRpbWVvdXQnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCBSaXBwbGUgZnJvbSAnLi9SaXBwbGUnO1xuaW1wb3J0IHRvdWNoUmlwcGxlQ2xhc3NlcyBmcm9tICcuL3RvdWNoUmlwcGxlQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgRFVSQVRJT04gPSA1NTA7XG5leHBvcnQgY29uc3QgREVMQVlfUklQUExFID0gODA7XG5jb25zdCBlbnRlcktleWZyYW1lID0ga2V5ZnJhbWVzKF90IHx8IChfdCA9IF9gXG4gIDAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDApO1xuICAgIG9wYWNpdHk6IDAuMTtcbiAgfVxuXG4gIDEwMCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgb3BhY2l0eTogMC4zO1xuICB9XG5gKSk7XG5jb25zdCBleGl0S2V5ZnJhbWUgPSBrZXlmcmFtZXMoX3QyIHx8IChfdDIgPSBfYFxuICAwJSB7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxuXG4gIDEwMCUge1xuICAgIG9wYWNpdHk6IDA7XG4gIH1cbmApKTtcbmNvbnN0IHB1bHNhdGVLZXlmcmFtZSA9IGtleWZyYW1lcyhfdDMgfHwgKF90MyA9IF9gXG4gIDAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICB9XG5cbiAgNTAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOTIpO1xuICB9XG5cbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgfVxuYCkpO1xuZXhwb3J0IGNvbnN0IFRvdWNoUmlwcGxlUm9vdCA9IHN0eWxlZCgnc3BhbicsIHtcbiAgbmFtZTogJ011aVRvdWNoUmlwcGxlJyxcbiAgc2xvdDogJ1Jvb3QnXG59KSh7XG4gIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgekluZGV4OiAwLFxuICB0b3A6IDAsXG4gIHJpZ2h0OiAwLFxuICBib3R0b206IDAsXG4gIGxlZnQ6IDAsXG4gIGJvcmRlclJhZGl1czogJ2luaGVyaXQnXG59KTtcblxuLy8gVGhpcyBgc3R5bGVkKClgIGZ1bmN0aW9uIGludm9rZXMga2V5ZnJhbWVzLiBgc3R5bGVkLWNvbXBvbmVudHNgIG9ubHkgc3VwcG9ydHMga2V5ZnJhbWVzXG4vLyBpbiBzdHJpbmcgdGVtcGxhdGVzLiBEbyBub3QgY29udmVydCB0aGVzZSBzdHlsZXMgaW4gSlMgb2JqZWN0IGFzIGl0IHdpbGwgYnJlYWsuXG5leHBvcnQgY29uc3QgVG91Y2hSaXBwbGVSaXBwbGUgPSBzdHlsZWQoUmlwcGxlLCB7XG4gIG5hbWU6ICdNdWlUb3VjaFJpcHBsZScsXG4gIHNsb3Q6ICdSaXBwbGUnXG59KShfdDQgfHwgKF90NCA9IF9gXG4gIG9wYWNpdHk6IDA7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcblxuICAmLiR7MH0ge1xuICAgIG9wYWNpdHk6IDAuMztcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAgIGFuaW1hdGlvbi1uYW1lOiAkezB9O1xuICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogJHswfW1zO1xuICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246ICR7MH07XG4gIH1cblxuICAmLiR7MH0ge1xuICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogJHswfW1zO1xuICB9XG5cbiAgJiAuJHswfSB7XG4gICAgb3BhY2l0eTogMTtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgIGJhY2tncm91bmQtY29sb3I6IGN1cnJlbnRDb2xvcjtcbiAgfVxuXG4gICYgLiR7MH0ge1xuICAgIG9wYWNpdHk6IDA7XG4gICAgYW5pbWF0aW9uLW5hbWU6ICR7MH07XG4gICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAkezB9bXM7XG4gICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogJHswfTtcbiAgfVxuXG4gICYgLiR7MH0ge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAvKiBAbm9mbGlwICovXG4gICAgbGVmdDogMHB4O1xuICAgIHRvcDogMDtcbiAgICBhbmltYXRpb24tbmFtZTogJHswfTtcbiAgICBhbmltYXRpb24tZHVyYXRpb246IDI1MDBtcztcbiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiAkezB9O1xuICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IGluZmluaXRlO1xuICAgIGFuaW1hdGlvbi1kZWxheTogMjAwbXM7XG4gIH1cbmApLCB0b3VjaFJpcHBsZUNsYXNzZXMucmlwcGxlVmlzaWJsZSwgZW50ZXJLZXlmcmFtZSwgRFVSQVRJT04sICh7XG4gIHRoZW1lXG59KSA9PiB0aGVtZS50cmFuc2l0aW9ucy5lYXNpbmcuZWFzZUluT3V0LCB0b3VjaFJpcHBsZUNsYXNzZXMucmlwcGxlUHVsc2F0ZSwgKHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLnNob3J0ZXIsIHRvdWNoUmlwcGxlQ2xhc3Nlcy5jaGlsZCwgdG91Y2hSaXBwbGVDbGFzc2VzLmNoaWxkTGVhdmluZywgZXhpdEtleWZyYW1lLCBEVVJBVElPTiwgKHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLnRyYW5zaXRpb25zLmVhc2luZy5lYXNlSW5PdXQsIHRvdWNoUmlwcGxlQ2xhc3Nlcy5jaGlsZFB1bHNhdGUsIHB1bHNhdGVLZXlmcmFtZSwgKHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLnRyYW5zaXRpb25zLmVhc2luZy5lYXNlSW5PdXQpO1xuXG4vKipcbiAqIEBpZ25vcmUgLSBpbnRlcm5hbCBjb21wb25lbnQuXG4gKlxuICogVE9ETyB2NTogTWFrZSBwcml2YXRlXG4gKi9cbmNvbnN0IFRvdWNoUmlwcGxlID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gVG91Y2hSaXBwbGUoaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aVRvdWNoUmlwcGxlJ1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgY2VudGVyOiBjZW50ZXJQcm9wID0gZmFsc2UsXG4gICAgICBjbGFzc2VzID0ge30sXG4gICAgICBjbGFzc05hbWVcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3QgW3JpcHBsZXMsIHNldFJpcHBsZXNdID0gUmVhY3QudXNlU3RhdGUoW10pO1xuICBjb25zdCBuZXh0S2V5ID0gUmVhY3QudXNlUmVmKDApO1xuICBjb25zdCByaXBwbGVDYWxsYmFjayA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAocmlwcGxlQ2FsbGJhY2suY3VycmVudCkge1xuICAgICAgcmlwcGxlQ2FsbGJhY2suY3VycmVudCgpO1xuICAgICAgcmlwcGxlQ2FsbGJhY2suY3VycmVudCA9IG51bGw7XG4gICAgfVxuICB9LCBbcmlwcGxlc10pO1xuXG4gIC8vIFVzZWQgdG8gZmlsdGVyIG91dCBtb3VzZSBlbXVsYXRlZCBldmVudHMgb24gbW9iaWxlLlxuICBjb25zdCBpZ25vcmluZ01vdXNlRG93biA9IFJlYWN0LnVzZVJlZihmYWxzZSk7XG4gIC8vIFdlIHVzZSBhIHRpbWVyIGluIG9yZGVyIHRvIG9ubHkgc2hvdyB0aGUgcmlwcGxlcyBmb3IgdG91Y2ggXCJjbGlja1wiIGxpa2UgZXZlbnRzLlxuICAvLyBXZSBkb24ndCB3YW50IHRvIGRpc3BsYXkgdGhlIHJpcHBsZSBmb3IgdG91Y2ggc2Nyb2xsIGV2ZW50cy5cbiAgY29uc3Qgc3RhcnRUaW1lciA9IHVzZVRpbWVvdXQoKTtcblxuICAvLyBUaGlzIGlzIHRoZSBob29rIGNhbGxlZCBvbmNlIHRoZSBwcmV2aW91cyB0aW1lb3V0IGlzIHJlYWR5LlxuICBjb25zdCBzdGFydFRpbWVyQ29tbWl0ID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBjb250YWluZXIgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IHN0YXJ0Q29tbWl0ID0gUmVhY3QudXNlQ2FsbGJhY2socGFyYW1zID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBwdWxzYXRlLFxuICAgICAgcmlwcGxlWCxcbiAgICAgIHJpcHBsZVksXG4gICAgICByaXBwbGVTaXplLFxuICAgICAgY2JcbiAgICB9ID0gcGFyYW1zO1xuICAgIHNldFJpcHBsZXMob2xkUmlwcGxlcyA9PiBbLi4ub2xkUmlwcGxlcywgLyojX19QVVJFX18qL19qc3goVG91Y2hSaXBwbGVSaXBwbGUsIHtcbiAgICAgIGNsYXNzZXM6IHtcbiAgICAgICAgcmlwcGxlOiBjbHN4KGNsYXNzZXMucmlwcGxlLCB0b3VjaFJpcHBsZUNsYXNzZXMucmlwcGxlKSxcbiAgICAgICAgcmlwcGxlVmlzaWJsZTogY2xzeChjbGFzc2VzLnJpcHBsZVZpc2libGUsIHRvdWNoUmlwcGxlQ2xhc3Nlcy5yaXBwbGVWaXNpYmxlKSxcbiAgICAgICAgcmlwcGxlUHVsc2F0ZTogY2xzeChjbGFzc2VzLnJpcHBsZVB1bHNhdGUsIHRvdWNoUmlwcGxlQ2xhc3Nlcy5yaXBwbGVQdWxzYXRlKSxcbiAgICAgICAgY2hpbGQ6IGNsc3goY2xhc3Nlcy5jaGlsZCwgdG91Y2hSaXBwbGVDbGFzc2VzLmNoaWxkKSxcbiAgICAgICAgY2hpbGRMZWF2aW5nOiBjbHN4KGNsYXNzZXMuY2hpbGRMZWF2aW5nLCB0b3VjaFJpcHBsZUNsYXNzZXMuY2hpbGRMZWF2aW5nKSxcbiAgICAgICAgY2hpbGRQdWxzYXRlOiBjbHN4KGNsYXNzZXMuY2hpbGRQdWxzYXRlLCB0b3VjaFJpcHBsZUNsYXNzZXMuY2hpbGRQdWxzYXRlKVxuICAgICAgfSxcbiAgICAgIHRpbWVvdXQ6IERVUkFUSU9OLFxuICAgICAgcHVsc2F0ZTogcHVsc2F0ZSxcbiAgICAgIHJpcHBsZVg6IHJpcHBsZVgsXG4gICAgICByaXBwbGVZOiByaXBwbGVZLFxuICAgICAgcmlwcGxlU2l6ZTogcmlwcGxlU2l6ZVxuICAgIH0sIG5leHRLZXkuY3VycmVudCldKTtcbiAgICBuZXh0S2V5LmN1cnJlbnQgKz0gMTtcbiAgICByaXBwbGVDYWxsYmFjay5jdXJyZW50ID0gY2I7XG4gIH0sIFtjbGFzc2VzXSk7XG4gIGNvbnN0IHN0YXJ0ID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50ID0ge30sIG9wdGlvbnMgPSB7fSwgY2IgPSAoKSA9PiB7fSkgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIHB1bHNhdGUgPSBmYWxzZSxcbiAgICAgIGNlbnRlciA9IGNlbnRlclByb3AgfHwgb3B0aW9ucy5wdWxzYXRlLFxuICAgICAgZmFrZUVsZW1lbnQgPSBmYWxzZSAvLyBGb3IgdGVzdCBwdXJwb3Nlc1xuICAgIH0gPSBvcHRpb25zO1xuICAgIGlmICgoZXZlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IGV2ZW50LnR5cGUpID09PSAnbW91c2Vkb3duJyAmJiBpZ25vcmluZ01vdXNlRG93bi5jdXJyZW50KSB7XG4gICAgICBpZ25vcmluZ01vdXNlRG93bi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICgoZXZlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IGV2ZW50LnR5cGUpID09PSAndG91Y2hzdGFydCcpIHtcbiAgICAgIGlnbm9yaW5nTW91c2VEb3duLmN1cnJlbnQgPSB0cnVlO1xuICAgIH1cbiAgICBjb25zdCBlbGVtZW50ID0gZmFrZUVsZW1lbnQgPyBudWxsIDogY29udGFpbmVyLmN1cnJlbnQ7XG4gICAgY29uc3QgcmVjdCA9IGVsZW1lbnQgPyBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpIDoge1xuICAgICAgd2lkdGg6IDAsXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiAwLFxuICAgICAgdG9wOiAwXG4gICAgfTtcblxuICAgIC8vIEdldCB0aGUgc2l6ZSBvZiB0aGUgcmlwcGxlXG4gICAgbGV0IHJpcHBsZVg7XG4gICAgbGV0IHJpcHBsZVk7XG4gICAgbGV0IHJpcHBsZVNpemU7XG4gICAgaWYgKGNlbnRlciB8fCBldmVudCA9PT0gdW5kZWZpbmVkIHx8IGV2ZW50LmNsaWVudFggPT09IDAgJiYgZXZlbnQuY2xpZW50WSA9PT0gMCB8fCAhZXZlbnQuY2xpZW50WCAmJiAhZXZlbnQudG91Y2hlcykge1xuICAgICAgcmlwcGxlWCA9IE1hdGgucm91bmQocmVjdC53aWR0aCAvIDIpO1xuICAgICAgcmlwcGxlWSA9IE1hdGgucm91bmQocmVjdC5oZWlnaHQgLyAyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qge1xuICAgICAgICBjbGllbnRYLFxuICAgICAgICBjbGllbnRZXG4gICAgICB9ID0gZXZlbnQudG91Y2hlcyAmJiBldmVudC50b3VjaGVzLmxlbmd0aCA+IDAgPyBldmVudC50b3VjaGVzWzBdIDogZXZlbnQ7XG4gICAgICByaXBwbGVYID0gTWF0aC5yb3VuZChjbGllbnRYIC0gcmVjdC5sZWZ0KTtcbiAgICAgIHJpcHBsZVkgPSBNYXRoLnJvdW5kKGNsaWVudFkgLSByZWN0LnRvcCk7XG4gICAgfVxuICAgIGlmIChjZW50ZXIpIHtcbiAgICAgIHJpcHBsZVNpemUgPSBNYXRoLnNxcnQoKDIgKiByZWN0LndpZHRoICoqIDIgKyByZWN0LmhlaWdodCAqKiAyKSAvIDMpO1xuXG4gICAgICAvLyBGb3Igc29tZSByZWFzb24gdGhlIGFuaW1hdGlvbiBpcyBicm9rZW4gb24gTW9iaWxlIENocm9tZSBpZiB0aGUgc2l6ZSBpcyBldmVuLlxuICAgICAgaWYgKHJpcHBsZVNpemUgJSAyID09PSAwKSB7XG4gICAgICAgIHJpcHBsZVNpemUgKz0gMTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc2l6ZVggPSBNYXRoLm1heChNYXRoLmFicygoZWxlbWVudCA/IGVsZW1lbnQuY2xpZW50V2lkdGggOiAwKSAtIHJpcHBsZVgpLCByaXBwbGVYKSAqIDIgKyAyO1xuICAgICAgY29uc3Qgc2l6ZVkgPSBNYXRoLm1heChNYXRoLmFicygoZWxlbWVudCA/IGVsZW1lbnQuY2xpZW50SGVpZ2h0IDogMCkgLSByaXBwbGVZKSwgcmlwcGxlWSkgKiAyICsgMjtcbiAgICAgIHJpcHBsZVNpemUgPSBNYXRoLnNxcnQoc2l6ZVggKiogMiArIHNpemVZICoqIDIpO1xuICAgIH1cblxuICAgIC8vIFRvdWNoZSBkZXZpY2VzXG4gICAgaWYgKGV2ZW50ICE9IG51bGwgJiYgZXZlbnQudG91Y2hlcykge1xuICAgICAgLy8gY2hlY2sgdGhhdCB0aGlzIGlzbid0IGFub3RoZXIgdG91Y2hzdGFydCBkdWUgdG8gbXVsdGl0b3VjaFxuICAgICAgLy8gb3RoZXJ3aXNlIHdlIHdpbGwgb25seSBjbGVhciBhIHNpbmdsZSB0aW1lciB3aGVuIHVubW91bnRpbmcgd2hpbGUgdHdvXG4gICAgICAvLyBhcmUgcnVubmluZ1xuICAgICAgaWYgKHN0YXJ0VGltZXJDb21taXQuY3VycmVudCA9PT0gbnVsbCkge1xuICAgICAgICAvLyBQcmVwYXJlIHRoZSByaXBwbGUgZWZmZWN0LlxuICAgICAgICBzdGFydFRpbWVyQ29tbWl0LmN1cnJlbnQgPSAoKSA9PiB7XG4gICAgICAgICAgc3RhcnRDb21taXQoe1xuICAgICAgICAgICAgcHVsc2F0ZSxcbiAgICAgICAgICAgIHJpcHBsZVgsXG4gICAgICAgICAgICByaXBwbGVZLFxuICAgICAgICAgICAgcmlwcGxlU2l6ZSxcbiAgICAgICAgICAgIGNiXG4gICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIC8vIERlbGF5IHRoZSBleGVjdXRpb24gb2YgdGhlIHJpcHBsZSBlZmZlY3QuXG4gICAgICAgIC8vIFdlIGhhdmUgdG8gbWFrZSBhIHRyYWRlb2ZmIHdpdGggdGhpcyBkZWxheSB2YWx1ZS5cbiAgICAgICAgc3RhcnRUaW1lci5zdGFydChERUxBWV9SSVBQTEUsICgpID0+IHtcbiAgICAgICAgICBpZiAoc3RhcnRUaW1lckNvbW1pdC5jdXJyZW50KSB7XG4gICAgICAgICAgICBzdGFydFRpbWVyQ29tbWl0LmN1cnJlbnQoKTtcbiAgICAgICAgICAgIHN0YXJ0VGltZXJDb21taXQuY3VycmVudCA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc3RhcnRDb21taXQoe1xuICAgICAgICBwdWxzYXRlLFxuICAgICAgICByaXBwbGVYLFxuICAgICAgICByaXBwbGVZLFxuICAgICAgICByaXBwbGVTaXplLFxuICAgICAgICBjYlxuICAgICAgfSk7XG4gICAgfVxuICB9LCBbY2VudGVyUHJvcCwgc3RhcnRDb21taXQsIHN0YXJ0VGltZXJdKTtcbiAgY29uc3QgcHVsc2F0ZSA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzdGFydCh7fSwge1xuICAgICAgcHVsc2F0ZTogdHJ1ZVxuICAgIH0pO1xuICB9LCBbc3RhcnRdKTtcbiAgY29uc3Qgc3RvcCA9IFJlYWN0LnVzZUNhbGxiYWNrKChldmVudCwgY2IpID0+IHtcbiAgICBzdGFydFRpbWVyLmNsZWFyKCk7XG5cbiAgICAvLyBUaGUgdG91Y2ggaW50ZXJhY3Rpb24gb2NjdXJzIHRvbyBxdWlja2x5LlxuICAgIC8vIFdlIHN0aWxsIHdhbnQgdG8gc2hvdyByaXBwbGUgZWZmZWN0LlxuICAgIGlmICgoZXZlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IGV2ZW50LnR5cGUpID09PSAndG91Y2hlbmQnICYmIHN0YXJ0VGltZXJDb21taXQuY3VycmVudCkge1xuICAgICAgc3RhcnRUaW1lckNvbW1pdC5jdXJyZW50KCk7XG4gICAgICBzdGFydFRpbWVyQ29tbWl0LmN1cnJlbnQgPSBudWxsO1xuICAgICAgc3RhcnRUaW1lci5zdGFydCgwLCAoKSA9PiB7XG4gICAgICAgIHN0b3AoZXZlbnQsIGNiKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzdGFydFRpbWVyQ29tbWl0LmN1cnJlbnQgPSBudWxsO1xuICAgIHNldFJpcHBsZXMob2xkUmlwcGxlcyA9PiB7XG4gICAgICBpZiAob2xkUmlwcGxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBvbGRSaXBwbGVzLnNsaWNlKDEpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9sZFJpcHBsZXM7XG4gICAgfSk7XG4gICAgcmlwcGxlQ2FsbGJhY2suY3VycmVudCA9IGNiO1xuICB9LCBbc3RhcnRUaW1lcl0pO1xuICBSZWFjdC51c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgKCkgPT4gKHtcbiAgICBwdWxzYXRlLFxuICAgIHN0YXJ0LFxuICAgIHN0b3BcbiAgfSksIFtwdWxzYXRlLCBzdGFydCwgc3RvcF0pO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goVG91Y2hSaXBwbGVSb290LCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbHN4KHRvdWNoUmlwcGxlQ2xhc3Nlcy5yb290LCBjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSksXG4gICAgcmVmOiBjb250YWluZXJcbiAgfSwgb3RoZXIsIHtcbiAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3goVHJhbnNpdGlvbkdyb3VwLCB7XG4gICAgICBjb21wb25lbnQ6IG51bGwsXG4gICAgICBleGl0OiB0cnVlLFxuICAgICAgY2hpbGRyZW46IHJpcHBsZXNcbiAgICB9KVxuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFRvdWNoUmlwcGxlLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHJpcHBsZSBzdGFydHMgYXQgdGhlIGNlbnRlciBvZiB0aGUgY29tcG9uZW50XG4gICAqIHJhdGhlciB0aGFuIGF0IHRoZSBwb2ludCBvZiBpbnRlcmFjdGlvbi5cbiAgICovXG4gIGNlbnRlcjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgVG91Y2hSaXBwbGU7IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuXG4vKipcbiAqIEBpZ25vcmUgLSBpbnRlcm5hbCBjb21wb25lbnQuXG4gKi9cbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5mdW5jdGlvbiBSaXBwbGUocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGNsYXNzTmFtZSxcbiAgICBjbGFzc2VzLFxuICAgIHB1bHNhdGUgPSBmYWxzZSxcbiAgICByaXBwbGVYLFxuICAgIHJpcHBsZVksXG4gICAgcmlwcGxlU2l6ZSxcbiAgICBpbjogaW5Qcm9wLFxuICAgIG9uRXhpdGVkLFxuICAgIHRpbWVvdXRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBbbGVhdmluZywgc2V0TGVhdmluZ10gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IHJpcHBsZUNsYXNzTmFtZSA9IGNsc3goY2xhc3NOYW1lLCBjbGFzc2VzLnJpcHBsZSwgY2xhc3Nlcy5yaXBwbGVWaXNpYmxlLCBwdWxzYXRlICYmIGNsYXNzZXMucmlwcGxlUHVsc2F0ZSk7XG4gIGNvbnN0IHJpcHBsZVN0eWxlcyA9IHtcbiAgICB3aWR0aDogcmlwcGxlU2l6ZSxcbiAgICBoZWlnaHQ6IHJpcHBsZVNpemUsXG4gICAgdG9wOiAtKHJpcHBsZVNpemUgLyAyKSArIHJpcHBsZVksXG4gICAgbGVmdDogLShyaXBwbGVTaXplIC8gMikgKyByaXBwbGVYXG4gIH07XG4gIGNvbnN0IGNoaWxkQ2xhc3NOYW1lID0gY2xzeChjbGFzc2VzLmNoaWxkLCBsZWF2aW5nICYmIGNsYXNzZXMuY2hpbGRMZWF2aW5nLCBwdWxzYXRlICYmIGNsYXNzZXMuY2hpbGRQdWxzYXRlKTtcbiAgaWYgKCFpblByb3AgJiYgIWxlYXZpbmcpIHtcbiAgICBzZXRMZWF2aW5nKHRydWUpO1xuICB9XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpblByb3AgJiYgb25FeGl0ZWQgIT0gbnVsbCkge1xuICAgICAgLy8gcmVhY3QtdHJhbnNpdGlvbi1ncm91cCNvbkV4aXRlZFxuICAgICAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dChvbkV4aXRlZCwgdGltZW91dCk7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH0sIFtvbkV4aXRlZCwgaW5Qcm9wLCB0aW1lb3V0XSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChcInNwYW5cIiwge1xuICAgIGNsYXNzTmFtZTogcmlwcGxlQ2xhc3NOYW1lLFxuICAgIHN0eWxlOiByaXBwbGVTdHlsZXMsXG4gICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4KFwic3BhblwiLCB7XG4gICAgICBjbGFzc05hbWU6IGNoaWxkQ2xhc3NOYW1lXG4gICAgfSlcbiAgfSk7XG59XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBSaXBwbGUucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBAaWdub3JlIC0gaW5qZWN0ZWQgZnJvbSBUcmFuc2l0aW9uR3JvdXBcbiAgICovXG4gIGluOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIEBpZ25vcmUgLSBpbmplY3RlZCBmcm9tIFRyYW5zaXRpb25Hcm91cFxuICAgKi9cbiAgb25FeGl0ZWQ6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgcmlwcGxlIHB1bHNhdGVzLCB0eXBpY2FsbHkgaW5kaWNhdGluZyB0aGUga2V5Ym9hcmQgZm9jdXMgc3RhdGUgb2YgYW4gZWxlbWVudC5cbiAgICovXG4gIHB1bHNhdGU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogRGlhbWV0ZXIgb2YgdGhlIHJpcHBsZS5cbiAgICovXG4gIHJpcHBsZVNpemU6IFByb3BUeXBlcy5udW1iZXIsXG4gIC8qKlxuICAgKiBIb3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoZSByaXBwbGUgY2VudGVyLlxuICAgKi9cbiAgcmlwcGxlWDogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAqIFZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoZSByaXBwbGUgY2VudGVyLlxuICAgKi9cbiAgcmlwcGxlWTogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAqIGV4aXQgZGVsYXlcbiAgICovXG4gIHRpbWVvdXQ6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZFxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IFJpcHBsZTsiLCAiaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRUb3VjaFJpcHBsZVV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpVG91Y2hSaXBwbGUnLCBzbG90KTtcbn1cbmNvbnN0IHRvdWNoUmlwcGxlQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aVRvdWNoUmlwcGxlJywgWydyb290JywgJ3JpcHBsZScsICdyaXBwbGVWaXNpYmxlJywgJ3JpcHBsZVB1bHNhdGUnLCAnY2hpbGQnLCAnY2hpbGRMZWF2aW5nJywgJ2NoaWxkUHVsc2F0ZSddKTtcbmV4cG9ydCBkZWZhdWx0IHRvdWNoUmlwcGxlQ2xhc3NlczsiLCAiaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRCdXR0b25CYXNlVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlCdXR0b25CYXNlJywgc2xvdCk7XG59XG5jb25zdCBidXR0b25CYXNlQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUJ1dHRvbkJhc2UnLCBbJ3Jvb3QnLCAnZGlzYWJsZWQnLCAnZm9jdXNWaXNpYmxlJ10pO1xuZXhwb3J0IGRlZmF1bHQgYnV0dG9uQmFzZUNsYXNzZXM7IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImFsaWduXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29tcG9uZW50XCIsIFwiZ3V0dGVyQm90dG9tXCIsIFwibm9XcmFwXCIsIFwicGFyYWdyYXBoXCIsIFwidmFyaWFudFwiLCBcInZhcmlhbnRNYXBwaW5nXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsgZXh0ZW5kU3hQcm9wIH0gZnJvbSAnQG11aS9zeXN0ZW0vc3R5bGVGdW5jdGlvblN4JztcbmltcG9ydCBjb21wb3NlQ2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCB7IGdldFR5cG9ncmFwaHlVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL3R5cG9ncmFwaHlDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgYWxpZ24sXG4gICAgZ3V0dGVyQm90dG9tLFxuICAgIG5vV3JhcCxcbiAgICBwYXJhZ3JhcGgsXG4gICAgdmFyaWFudCxcbiAgICBjbGFzc2VzXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCB2YXJpYW50LCBvd25lclN0YXRlLmFsaWduICE9PSAnaW5oZXJpdCcgJiYgYGFsaWduJHtjYXBpdGFsaXplKGFsaWduKX1gLCBndXR0ZXJCb3R0b20gJiYgJ2d1dHRlckJvdHRvbScsIG5vV3JhcCAmJiAnbm9XcmFwJywgcGFyYWdyYXBoICYmICdwYXJhZ3JhcGgnXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldFR5cG9ncmFwaHlVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcbmV4cG9ydCBjb25zdCBUeXBvZ3JhcGh5Um9vdCA9IHN0eWxlZCgnc3BhbicsIHtcbiAgbmFtZTogJ011aVR5cG9ncmFwaHknLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMucm9vdCwgb3duZXJTdGF0ZS52YXJpYW50ICYmIHN0eWxlc1tvd25lclN0YXRlLnZhcmlhbnRdLCBvd25lclN0YXRlLmFsaWduICE9PSAnaW5oZXJpdCcgJiYgc3R5bGVzW2BhbGlnbiR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLmFsaWduKX1gXSwgb3duZXJTdGF0ZS5ub1dyYXAgJiYgc3R5bGVzLm5vV3JhcCwgb3duZXJTdGF0ZS5ndXR0ZXJCb3R0b20gJiYgc3R5bGVzLmd1dHRlckJvdHRvbSwgb3duZXJTdGF0ZS5wYXJhZ3JhcGggJiYgc3R5bGVzLnBhcmFncmFwaF07XG4gIH1cbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIG1hcmdpbjogMFxufSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnaW5oZXJpdCcgJiYge1xuICAvLyBTb21lIGVsZW1lbnRzLCBsaWtlIDxidXR0b24+IG9uIENocm9tZSBoYXZlIGRlZmF1bHQgZm9udCB0aGF0IGRvZXNuJ3QgaW5oZXJpdCwgcmVzZXQgdGhpcy5cbiAgZm9udDogJ2luaGVyaXQnXG59LCBvd25lclN0YXRlLnZhcmlhbnQgIT09ICdpbmhlcml0JyAmJiB0aGVtZS50eXBvZ3JhcGh5W293bmVyU3RhdGUudmFyaWFudF0sIG93bmVyU3RhdGUuYWxpZ24gIT09ICdpbmhlcml0JyAmJiB7XG4gIHRleHRBbGlnbjogb3duZXJTdGF0ZS5hbGlnblxufSwgb3duZXJTdGF0ZS5ub1dyYXAgJiYge1xuICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gIHRleHRPdmVyZmxvdzogJ2VsbGlwc2lzJyxcbiAgd2hpdGVTcGFjZTogJ25vd3JhcCdcbn0sIG93bmVyU3RhdGUuZ3V0dGVyQm90dG9tICYmIHtcbiAgbWFyZ2luQm90dG9tOiAnMC4zNWVtJ1xufSwgb3duZXJTdGF0ZS5wYXJhZ3JhcGggJiYge1xuICBtYXJnaW5Cb3R0b206IDE2XG59KSk7XG5jb25zdCBkZWZhdWx0VmFyaWFudE1hcHBpbmcgPSB7XG4gIGgxOiAnaDEnLFxuICBoMjogJ2gyJyxcbiAgaDM6ICdoMycsXG4gIGg0OiAnaDQnLFxuICBoNTogJ2g1JyxcbiAgaDY6ICdoNicsXG4gIHN1YnRpdGxlMTogJ2g2JyxcbiAgc3VidGl0bGUyOiAnaDYnLFxuICBib2R5MTogJ3AnLFxuICBib2R5MjogJ3AnLFxuICBpbmhlcml0OiAncCdcbn07XG5cbi8vIFRPRE8gdjY6IGRlcHJlY2F0ZSB0aGVzZSBjb2xvciB2YWx1ZXMgaW4gdjUueCBhbmQgcmVtb3ZlIHRoZSB0cmFuc2Zvcm1hdGlvbiBpbiB2NlxuY29uc3QgY29sb3JUcmFuc2Zvcm1hdGlvbnMgPSB7XG4gIHByaW1hcnk6ICdwcmltYXJ5Lm1haW4nLFxuICB0ZXh0UHJpbWFyeTogJ3RleHQucHJpbWFyeScsXG4gIHNlY29uZGFyeTogJ3NlY29uZGFyeS5tYWluJyxcbiAgdGV4dFNlY29uZGFyeTogJ3RleHQuc2Vjb25kYXJ5JyxcbiAgZXJyb3I6ICdlcnJvci5tYWluJ1xufTtcbmNvbnN0IHRyYW5zZm9ybURlcHJlY2F0ZWRDb2xvcnMgPSBjb2xvciA9PiB7XG4gIHJldHVybiBjb2xvclRyYW5zZm9ybWF0aW9uc1tjb2xvcl0gfHwgY29sb3I7XG59O1xuY29uc3QgVHlwb2dyYXBoeSA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIFR5cG9ncmFwaHkoaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHRoZW1lUHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpVHlwb2dyYXBoeSdcbiAgfSk7XG4gIGNvbnN0IGNvbG9yID0gdHJhbnNmb3JtRGVwcmVjYXRlZENvbG9ycyh0aGVtZVByb3BzLmNvbG9yKTtcbiAgY29uc3QgcHJvcHMgPSBleHRlbmRTeFByb3AoX2V4dGVuZHMoe30sIHRoZW1lUHJvcHMsIHtcbiAgICBjb2xvclxuICB9KSk7XG4gIGNvbnN0IHtcbiAgICAgIGFsaWduID0gJ2luaGVyaXQnLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29tcG9uZW50LFxuICAgICAgZ3V0dGVyQm90dG9tID0gZmFsc2UsXG4gICAgICBub1dyYXAgPSBmYWxzZSxcbiAgICAgIHBhcmFncmFwaCA9IGZhbHNlLFxuICAgICAgdmFyaWFudCA9ICdib2R5MScsXG4gICAgICB2YXJpYW50TWFwcGluZyA9IGRlZmF1bHRWYXJpYW50TWFwcGluZ1xuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgYWxpZ24sXG4gICAgY29sb3IsXG4gICAgY2xhc3NOYW1lLFxuICAgIGNvbXBvbmVudCxcbiAgICBndXR0ZXJCb3R0b20sXG4gICAgbm9XcmFwLFxuICAgIHBhcmFncmFwaCxcbiAgICB2YXJpYW50LFxuICAgIHZhcmlhbnRNYXBwaW5nXG4gIH0pO1xuICBjb25zdCBDb21wb25lbnQgPSBjb21wb25lbnQgfHwgKHBhcmFncmFwaCA/ICdwJyA6IHZhcmlhbnRNYXBwaW5nW3ZhcmlhbnRdIHx8IGRlZmF1bHRWYXJpYW50TWFwcGluZ1t2YXJpYW50XSkgfHwgJ3NwYW4nO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChUeXBvZ3JhcGh5Um9vdCwgX2V4dGVuZHMoe1xuICAgIGFzOiBDb21wb25lbnQsXG4gICAgcmVmOiByZWYsXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpXG4gIH0sIG90aGVyKSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFR5cG9ncmFwaHkucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIFx1MjUwQ1x1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMCBXYXJuaW5nIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUxMFxuICAvLyBcdTI1MDIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiBcdTI1MDJcbiAgLy8gXHUyNTAyICAgIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiAgICAgXHUyNTAyXG4gIC8vIFx1MjUxNFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUxOFxuICAvKipcbiAgICogU2V0IHRoZSB0ZXh0LWFsaWduIG9uIHRoZSBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0ICdpbmhlcml0J1xuICAgKi9cbiAgYWxpZ246IFByb3BUeXBlcy5vbmVPZihbJ2NlbnRlcicsICdpbmhlcml0JywgJ2p1c3RpZnknLCAnbGVmdCcsICdyaWdodCddKSxcbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSB0ZXh0IHdpbGwgaGF2ZSBhIGJvdHRvbSBtYXJnaW4uXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBndXR0ZXJCb3R0b206IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgdGV4dCB3aWxsIG5vdCB3cmFwLCBidXQgaW5zdGVhZCB3aWxsIHRydW5jYXRlIHdpdGggYSB0ZXh0IG92ZXJmbG93IGVsbGlwc2lzLlxuICAgKlxuICAgKiBOb3RlIHRoYXQgdGV4dCBvdmVyZmxvdyBjYW4gb25seSBoYXBwZW4gd2l0aCBibG9jayBvciBpbmxpbmUtYmxvY2sgbGV2ZWwgZWxlbWVudHNcbiAgICogKHRoZSBlbGVtZW50IG5lZWRzIHRvIGhhdmUgYSB3aWR0aCBpbiBvcmRlciB0byBvdmVyZmxvdykuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBub1dyYXA6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgZWxlbWVudCB3aWxsIGJlIGEgcGFyYWdyYXBoIGVsZW1lbnQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBwYXJhZ3JhcGg6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogQXBwbGllcyB0aGUgdGhlbWUgdHlwb2dyYXBoeSBzdHlsZXMuXG4gICAqIEBkZWZhdWx0ICdib2R5MSdcbiAgICovXG4gIHZhcmlhbnQ6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnYm9keTEnLCAnYm9keTInLCAnYnV0dG9uJywgJ2NhcHRpb24nLCAnaDEnLCAnaDInLCAnaDMnLCAnaDQnLCAnaDUnLCAnaDYnLCAnaW5oZXJpdCcsICdvdmVybGluZScsICdzdWJ0aXRsZTEnLCAnc3VidGl0bGUyJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IG1hcHMgdGhlIHZhcmlhbnQgcHJvcCB0byBhIHJhbmdlIG9mIGRpZmZlcmVudCBIVE1MIGVsZW1lbnQgdHlwZXMuXG4gICAqIEZvciBpbnN0YW5jZSwgc3VidGl0bGUxIHRvIGA8aDY+YC5cbiAgICogSWYgeW91IHdpc2ggdG8gY2hhbmdlIHRoYXQgbWFwcGluZywgeW91IGNhbiBwcm92aWRlIHlvdXIgb3duLlxuICAgKiBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHVzZSB0aGUgYGNvbXBvbmVudGAgcHJvcC5cbiAgICogQGRlZmF1bHQge1xuICAgKiAgIGgxOiAnaDEnLFxuICAgKiAgIGgyOiAnaDInLFxuICAgKiAgIGgzOiAnaDMnLFxuICAgKiAgIGg0OiAnaDQnLFxuICAgKiAgIGg1OiAnaDUnLFxuICAgKiAgIGg2OiAnaDYnLFxuICAgKiAgIHN1YnRpdGxlMTogJ2g2JyxcbiAgICogICBzdWJ0aXRsZTI6ICdoNicsXG4gICAqICAgYm9keTE6ICdwJyxcbiAgICogICBib2R5MjogJ3AnLFxuICAgKiAgIGluaGVyaXQ6ICdwJyxcbiAgICogfVxuICAgKi9cbiAgdmFyaWFudE1hcHBpbmc6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9iamVjdFxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IFR5cG9ncmFwaHk7IiwgImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0VHlwb2dyYXBoeVV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpVHlwb2dyYXBoeScsIHNsb3QpO1xufVxuY29uc3QgdHlwb2dyYXBoeUNsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlUeXBvZ3JhcGh5JywgWydyb290JywgJ2gxJywgJ2gyJywgJ2gzJywgJ2g0JywgJ2g1JywgJ2g2JywgJ3N1YnRpdGxlMScsICdzdWJ0aXRsZTInLCAnYm9keTEnLCAnYm9keTInLCAnaW5oZXJpdCcsICdidXR0b24nLCAnY2FwdGlvbicsICdvdmVybGluZScsICdhbGlnbkxlZnQnLCAnYWxpZ25SaWdodCcsICdhbGlnbkNlbnRlcicsICdhbGlnbkp1c3RpZnknLCAnbm9XcmFwJywgJ2d1dHRlckJvdHRvbScsICdwYXJhZ3JhcGgnXSk7XG5leHBvcnQgZGVmYXVsdCB0eXBvZ3JhcGh5Q2xhc3NlczsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZm9ybUNvbnRyb2xTdGF0ZSh7XG4gIHByb3BzLFxuICBzdGF0ZXMsXG4gIG11aUZvcm1Db250cm9sXG59KSB7XG4gIHJldHVybiBzdGF0ZXMucmVkdWNlKChhY2MsIHN0YXRlKSA9PiB7XG4gICAgYWNjW3N0YXRlXSA9IHByb3BzW3N0YXRlXTtcbiAgICBpZiAobXVpRm9ybUNvbnRyb2wpIHtcbiAgICAgIGlmICh0eXBlb2YgcHJvcHNbc3RhdGVdID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICBhY2Nbc3RhdGVdID0gbXVpRm9ybUNvbnRyb2xbc3RhdGVdO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG59IiwgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0Jztcbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqL1xuY29uc3QgRm9ybUNvbnRyb2xDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQodW5kZWZpbmVkKTtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIEZvcm1Db250cm9sQ29udGV4dC5kaXNwbGF5TmFtZSA9ICdGb3JtQ29udHJvbENvbnRleHQnO1xufVxuZXhwb3J0IGRlZmF1bHQgRm9ybUNvbnRyb2xDb250ZXh0OyIsICIndXNlIGNsaWVudCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBGb3JtQ29udHJvbENvbnRleHQgZnJvbSAnLi9Gb3JtQ29udHJvbENvbnRleHQnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlRm9ybUNvbnRyb2woKSB7XG4gIHJldHVybiBSZWFjdC51c2VDb250ZXh0KEZvcm1Db250cm9sQ29udGV4dCk7XG59IiwgIi8vIFN1cHBvcnRzIGRldGVybWluYXRpb24gb2YgaXNDb250cm9sbGVkKCkuXG4vLyBDb250cm9sbGVkIGlucHV0IGFjY2VwdHMgaXRzIGN1cnJlbnQgdmFsdWUgYXMgYSBwcm9wLlxuLy9cbi8vIEBzZWUgaHR0cHM6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9jcy9mb3Jtcy5odG1sI2NvbnRyb2xsZWQtY29tcG9uZW50c1xuLy8gQHBhcmFtIHZhbHVlXG4vLyBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiBzdHJpbmcgKGluY2x1ZGluZyAnJykgb3IgbnVtYmVyIChpbmNsdWRpbmcgemVybylcbmV4cG9ydCBmdW5jdGlvbiBoYXNWYWx1ZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiAhKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gMCk7XG59XG5cbi8vIERldGVybWluZSBpZiBmaWVsZCBpcyBlbXB0eSBvciBmaWxsZWQuXG4vLyBSZXNwb25zZSBkZXRlcm1pbmVzIGlmIGxhYmVsIGlzIHByZXNlbnRlZCBhYm92ZSBmaWVsZCBvciBhcyBwbGFjZWhvbGRlci5cbi8vXG4vLyBAcGFyYW0gb2JqXG4vLyBAcGFyYW0gU1NSXG4vLyBAcmV0dXJucyB7Ym9vbGVhbn0gRmFsc2Ugd2hlbiBub3QgcHJlc2VudCBvciBlbXB0eSBzdHJpbmcuXG4vLyAgICAgICAgICAgICAgICAgICAgVHJ1ZSB3aGVuIGFueSBudW1iZXIgb3Igc3RyaW5nIHdpdGggbGVuZ3RoLlxuZXhwb3J0IGZ1bmN0aW9uIGlzRmlsbGVkKG9iaiwgU1NSID0gZmFsc2UpIHtcbiAgcmV0dXJuIG9iaiAmJiAoaGFzVmFsdWUob2JqLnZhbHVlKSAmJiBvYmoudmFsdWUgIT09ICcnIHx8IFNTUiAmJiBoYXNWYWx1ZShvYmouZGVmYXVsdFZhbHVlKSAmJiBvYmouZGVmYXVsdFZhbHVlICE9PSAnJyk7XG59XG5cbi8vIERldGVybWluZSBpZiBhbiBJbnB1dCBpcyBhZG9ybmVkIG9uIHN0YXJ0LlxuLy8gSXQncyBjb3JyZXNwb25kaW5nIHRvIHRoZSBsZWZ0IHdpdGggTFRSLlxuLy9cbi8vIEBwYXJhbSBvYmpcbi8vIEByZXR1cm5zIHtib29sZWFufSBGYWxzZSB3aGVuIG5vIGFkb3JubWVudHMuXG4vLyAgICAgICAgICAgICAgICAgICAgVHJ1ZSB3aGVuIGFkb3JuZWQgYXQgdGhlIHN0YXJ0LlxuZXhwb3J0IGZ1bmN0aW9uIGlzQWRvcm5lZFN0YXJ0KG9iaikge1xuICByZXR1cm4gb2JqLnN0YXJ0QWRvcm5tZW50O1xufSIsICIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjaGVja2VkSWNvblwiLCBcImNvbG9yXCIsIFwiaWNvblwiLCBcImluZGV0ZXJtaW5hdGVcIiwgXCJpbmRldGVybWluYXRlSWNvblwiLCBcImlucHV0UHJvcHNcIiwgXCJzaXplXCIsIFwiY2xhc3NOYW1lXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHJlZlR5cGUgZnJvbSAnQG11aS91dGlscy9yZWZUeXBlJztcbmltcG9ydCBjb21wb3NlQ2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCB7IGFscGhhIH0gZnJvbSAnQG11aS9zeXN0ZW0vY29sb3JNYW5pcHVsYXRvcic7XG5pbXBvcnQgU3dpdGNoQmFzZSBmcm9tICcuLi9pbnRlcm5hbC9Td2l0Y2hCYXNlJztcbmltcG9ydCBDaGVja0JveE91dGxpbmVCbGFua0ljb24gZnJvbSAnLi4vaW50ZXJuYWwvc3ZnLWljb25zL0NoZWNrQm94T3V0bGluZUJsYW5rJztcbmltcG9ydCBDaGVja0JveEljb24gZnJvbSAnLi4vaW50ZXJuYWwvc3ZnLWljb25zL0NoZWNrQm94JztcbmltcG9ydCBJbmRldGVybWluYXRlQ2hlY2tCb3hJY29uIGZyb20gJy4uL2ludGVybmFsL3N2Zy1pY29ucy9JbmRldGVybWluYXRlQ2hlY2tCb3gnO1xuaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnLi4vdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgc3R5bGVkLCB7IHJvb3RTaG91bGRGb3J3YXJkUHJvcCB9IGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IGNoZWNrYm94Q2xhc3NlcywgeyBnZXRDaGVja2JveFV0aWxpdHlDbGFzcyB9IGZyb20gJy4vY2hlY2tib3hDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICBpbmRldGVybWluYXRlLFxuICAgIGNvbG9yLFxuICAgIHNpemVcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIGluZGV0ZXJtaW5hdGUgJiYgJ2luZGV0ZXJtaW5hdGUnLCBgY29sb3Ike2NhcGl0YWxpemUoY29sb3IpfWAsIGBzaXplJHtjYXBpdGFsaXplKHNpemUpfWBdXG4gIH07XG4gIGNvbnN0IGNvbXBvc2VkQ2xhc3NlcyA9IGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRDaGVja2JveFV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgY2xhc3NlcywgY29tcG9zZWRDbGFzc2VzKTtcbn07XG5jb25zdCBDaGVja2JveFJvb3QgPSBzdHlsZWQoU3dpdGNoQmFzZSwge1xuICBzaG91bGRGb3J3YXJkUHJvcDogcHJvcCA9PiByb290U2hvdWxkRm9yd2FyZFByb3AocHJvcCkgfHwgcHJvcCA9PT0gJ2NsYXNzZXMnLFxuICBuYW1lOiAnTXVpQ2hlY2tib3gnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMucm9vdCwgb3duZXJTdGF0ZS5pbmRldGVybWluYXRlICYmIHN0eWxlcy5pbmRldGVybWluYXRlLCBzdHlsZXNbYHNpemUke2NhcGl0YWxpemUob3duZXJTdGF0ZS5zaXplKX1gXSwgb3duZXJTdGF0ZS5jb2xvciAhPT0gJ2RlZmF1bHQnICYmIHN0eWxlc1tgY29sb3Ike2NhcGl0YWxpemUob3duZXJTdGF0ZS5jb2xvcil9YF1dO1xuICB9XG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUudGV4dC5zZWNvbmRhcnlcbn0sICFvd25lclN0YXRlLmRpc2FibGVSaXBwbGUgJiYge1xuICAnJjpob3Zlcic6IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnZhcnMgPyBgcmdiYSgke293bmVyU3RhdGUuY29sb3IgPT09ICdkZWZhdWx0JyA/IHRoZW1lLnZhcnMucGFsZXR0ZS5hY3Rpb24uYWN0aXZlQ2hhbm5lbCA6IHRoZW1lLnZhcnMucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXS5tYWluQ2hhbm5lbH0gLyAke3RoZW1lLnZhcnMucGFsZXR0ZS5hY3Rpb24uaG92ZXJPcGFjaXR5fSlgIDogYWxwaGEob3duZXJTdGF0ZS5jb2xvciA9PT0gJ2RlZmF1bHQnID8gdGhlbWUucGFsZXR0ZS5hY3Rpb24uYWN0aXZlIDogdGhlbWUucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXS5tYWluLCB0aGVtZS5wYWxldHRlLmFjdGlvbi5ob3Zlck9wYWNpdHkpLFxuICAgIC8vIFJlc2V0IG9uIHRvdWNoIGRldmljZXMsIGl0IGRvZXNuJ3QgYWRkIHNwZWNpZmljaXR5XG4gICAgJ0BtZWRpYSAoaG92ZXI6IG5vbmUpJzoge1xuICAgICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnXG4gICAgfVxuICB9XG59LCBvd25lclN0YXRlLmNvbG9yICE9PSAnZGVmYXVsdCcgJiYge1xuICBbYCYuJHtjaGVja2JveENsYXNzZXMuY2hlY2tlZH0sICYuJHtjaGVja2JveENsYXNzZXMuaW5kZXRlcm1pbmF0ZX1gXToge1xuICAgIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXS5tYWluXG4gIH0sXG4gIFtgJi4ke2NoZWNrYm94Q2xhc3Nlcy5kaXNhYmxlZH1gXToge1xuICAgIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5hY3Rpb24uZGlzYWJsZWRcbiAgfVxufSkpO1xuY29uc3QgZGVmYXVsdENoZWNrZWRJY29uID0gLyojX19QVVJFX18qL19qc3goQ2hlY2tCb3hJY29uLCB7fSk7XG5jb25zdCBkZWZhdWx0SWNvbiA9IC8qI19fUFVSRV9fKi9fanN4KENoZWNrQm94T3V0bGluZUJsYW5rSWNvbiwge30pO1xuY29uc3QgZGVmYXVsdEluZGV0ZXJtaW5hdGVJY29uID0gLyojX19QVVJFX18qL19qc3goSW5kZXRlcm1pbmF0ZUNoZWNrQm94SWNvbiwge30pO1xuY29uc3QgQ2hlY2tib3ggPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBDaGVja2JveChpblByb3BzLCByZWYpIHtcbiAgdmFyIF9pY29uJHByb3BzJGZvbnRTaXplLCBfaW5kZXRlcm1pbmF0ZUljb24kcHI7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUNoZWNrYm94J1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgY2hlY2tlZEljb24gPSBkZWZhdWx0Q2hlY2tlZEljb24sXG4gICAgICBjb2xvciA9ICdwcmltYXJ5JyxcbiAgICAgIGljb246IGljb25Qcm9wID0gZGVmYXVsdEljb24sXG4gICAgICBpbmRldGVybWluYXRlID0gZmFsc2UsXG4gICAgICBpbmRldGVybWluYXRlSWNvbjogaW5kZXRlcm1pbmF0ZUljb25Qcm9wID0gZGVmYXVsdEluZGV0ZXJtaW5hdGVJY29uLFxuICAgICAgaW5wdXRQcm9wcyxcbiAgICAgIHNpemUgPSAnbWVkaXVtJyxcbiAgICAgIGNsYXNzTmFtZVxuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBpY29uID0gaW5kZXRlcm1pbmF0ZSA/IGluZGV0ZXJtaW5hdGVJY29uUHJvcCA6IGljb25Qcm9wO1xuICBjb25zdCBpbmRldGVybWluYXRlSWNvbiA9IGluZGV0ZXJtaW5hdGUgPyBpbmRldGVybWluYXRlSWNvblByb3AgOiBjaGVja2VkSWNvbjtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNvbG9yLFxuICAgIGluZGV0ZXJtaW5hdGUsXG4gICAgc2l6ZVxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goQ2hlY2tib3hSb290LCBfZXh0ZW5kcyh7XG4gICAgdHlwZTogXCJjaGVja2JveFwiLFxuICAgIGlucHV0UHJvcHM6IF9leHRlbmRzKHtcbiAgICAgICdkYXRhLWluZGV0ZXJtaW5hdGUnOiBpbmRldGVybWluYXRlXG4gICAgfSwgaW5wdXRQcm9wcyksXG4gICAgaWNvbjogLyojX19QVVJFX18qL1JlYWN0LmNsb25lRWxlbWVudChpY29uLCB7XG4gICAgICBmb250U2l6ZTogKF9pY29uJHByb3BzJGZvbnRTaXplID0gaWNvbi5wcm9wcy5mb250U2l6ZSkgIT0gbnVsbCA/IF9pY29uJHByb3BzJGZvbnRTaXplIDogc2l6ZVxuICAgIH0pLFxuICAgIGNoZWNrZWRJY29uOiAvKiNfX1BVUkVfXyovUmVhY3QuY2xvbmVFbGVtZW50KGluZGV0ZXJtaW5hdGVJY29uLCB7XG4gICAgICBmb250U2l6ZTogKF9pbmRldGVybWluYXRlSWNvbiRwciA9IGluZGV0ZXJtaW5hdGVJY29uLnByb3BzLmZvbnRTaXplKSAhPSBudWxsID8gX2luZGV0ZXJtaW5hdGVJY29uJHByIDogc2l6ZVxuICAgIH0pLFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgcmVmOiByZWYsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKVxuICB9LCBvdGhlciwge1xuICAgIGNsYXNzZXM6IGNsYXNzZXNcbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBDaGVja2JveC5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gXHUyNTBDXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwIFdhcm5pbmcgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTEwXG4gIC8vIFx1MjUwMiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIFx1MjUwMlxuICAvLyBcdTI1MDIgICAgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuICAgICBcdTI1MDJcbiAgLy8gXHUyNTE0XHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTE4XG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgY2hlY2tlZC5cbiAgICovXG4gIGNoZWNrZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIGljb24gdG8gZGlzcGxheSB3aGVuIHRoZSBjb21wb25lbnQgaXMgY2hlY2tlZC5cbiAgICogQGRlZmF1bHQgPENoZWNrQm94SWNvbiAvPlxuICAgKi9cbiAgY2hlY2tlZEljb246IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb2xvciBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBJdCBzdXBwb3J0cyBib3RoIGRlZmF1bHQgYW5kIGN1c3RvbSB0aGVtZSBjb2xvcnMsIHdoaWNoIGNhbiBiZSBhZGRlZCBhcyBzaG93biBpbiB0aGVcbiAgICogW3BhbGV0dGUgY3VzdG9taXphdGlvbiBndWlkZV0oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL2N1c3RvbWl6YXRpb24vcGFsZXR0ZS8jY3VzdG9tLWNvbG9ycykuXG4gICAqIEBkZWZhdWx0ICdwcmltYXJ5J1xuICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnZGVmYXVsdCcsICdwcmltYXJ5JywgJ3NlY29uZGFyeScsICdlcnJvcicsICdpbmZvJywgJ3N1Y2Nlc3MnLCAnd2FybmluZyddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgY2hlY2tlZCBzdGF0ZS4gVXNlIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBub3QgY29udHJvbGxlZC5cbiAgICovXG4gIGRlZmF1bHRDaGVja2VkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBkaXNhYmxlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHJpcHBsZSBlZmZlY3QgaXMgZGlzYWJsZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlUmlwcGxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBpY29uIHRvIGRpc3BsYXkgd2hlbiB0aGUgY29tcG9uZW50IGlzIHVuY2hlY2tlZC5cbiAgICogQGRlZmF1bHQgPENoZWNrQm94T3V0bGluZUJsYW5rSWNvbiAvPlxuICAgKi9cbiAgaWNvbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBUaGUgaWQgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGFwcGVhcnMgaW5kZXRlcm1pbmF0ZS5cbiAgICogVGhpcyBkb2VzIG5vdCBzZXQgdGhlIG5hdGl2ZSBpbnB1dCBlbGVtZW50IHRvIGluZGV0ZXJtaW5hdGUgZHVlXG4gICAqIHRvIGluY29uc2lzdGVudCBiZWhhdmlvciBhY3Jvc3MgYnJvd3NlcnMuXG4gICAqIEhvd2V2ZXIsIHdlIHNldCBhIGBkYXRhLWluZGV0ZXJtaW5hdGVgIGF0dHJpYnV0ZSBvbiB0aGUgYGlucHV0YC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGluZGV0ZXJtaW5hdGU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIGljb24gdG8gZGlzcGxheSB3aGVuIHRoZSBjb21wb25lbnQgaXMgaW5kZXRlcm1pbmF0ZS5cbiAgICogQGRlZmF1bHQgPEluZGV0ZXJtaW5hdGVDaGVja0JveEljb24gLz5cbiAgICovXG4gIGluZGV0ZXJtaW5hdGVJY29uOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIFtBdHRyaWJ1dGVzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQjQXR0cmlidXRlcykgYXBwbGllZCB0byB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgaW5wdXRQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIFBhc3MgYSByZWYgdG8gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIGlucHV0UmVmOiByZWZUeXBlLFxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiB0aGUgc3RhdGUgaXMgY2hhbmdlZC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdC5DaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50Pn0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqIFlvdSBjYW4gcHVsbCBvdXQgdGhlIG5ldyBjaGVja2VkIHN0YXRlIGJ5IGFjY2Vzc2luZyBgZXZlbnQudGFyZ2V0LmNoZWNrZWRgIChib29sZWFuKS5cbiAgICovXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgZWxlbWVudCBpcyByZXF1aXJlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlcXVpcmVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBzaXplIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIGBzbWFsbGAgaXMgZXF1aXZhbGVudCB0byB0aGUgZGVuc2UgY2hlY2tib3ggc3R5bGluZy5cbiAgICogQGRlZmF1bHQgJ21lZGl1bSdcbiAgICovXG4gIHNpemU6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnbWVkaXVtJywgJ3NtYWxsJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgb2YgdGhlIGNvbXBvbmVudC4gVGhlIERPTSBBUEkgY2FzdHMgdGhpcyB0byBhIHN0cmluZy5cbiAgICogVGhlIGJyb3dzZXIgdXNlcyBcIm9uXCIgYXMgdGhlIGRlZmF1bHQgdmFsdWUuXG4gICAqL1xuICB2YWx1ZTogUHJvcFR5cGVzLmFueVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IENoZWNrYm94OyIsICIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJhdXRvRm9jdXNcIiwgXCJjaGVja2VkXCIsIFwiY2hlY2tlZEljb25cIiwgXCJjbGFzc05hbWVcIiwgXCJkZWZhdWx0Q2hlY2tlZFwiLCBcImRpc2FibGVkXCIsIFwiZGlzYWJsZUZvY3VzUmlwcGxlXCIsIFwiZWRnZVwiLCBcImljb25cIiwgXCJpZFwiLCBcImlucHV0UHJvcHNcIiwgXCJpbnB1dFJlZlwiLCBcIm5hbWVcIiwgXCJvbkJsdXJcIiwgXCJvbkNoYW5nZVwiLCBcIm9uRm9jdXNcIiwgXCJyZWFkT25seVwiLCBcInJlcXVpcmVkXCIsIFwidGFiSW5kZXhcIiwgXCJ0eXBlXCIsIFwidmFsdWVcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgcmVmVHlwZSBmcm9tICdAbXVpL3V0aWxzL3JlZlR5cGUnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnLi4vdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgc3R5bGVkLCB7IHJvb3RTaG91bGRGb3J3YXJkUHJvcCB9IGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHVzZUNvbnRyb2xsZWQgZnJvbSAnLi4vdXRpbHMvdXNlQ29udHJvbGxlZCc7XG5pbXBvcnQgdXNlRm9ybUNvbnRyb2wgZnJvbSAnLi4vRm9ybUNvbnRyb2wvdXNlRm9ybUNvbnRyb2wnO1xuaW1wb3J0IEJ1dHRvbkJhc2UgZnJvbSAnLi4vQnV0dG9uQmFzZSc7XG5pbXBvcnQgeyBnZXRTd2l0Y2hCYXNlVXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9zd2l0Y2hCYXNlQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgY2hlY2tlZCxcbiAgICBkaXNhYmxlZCxcbiAgICBlZGdlXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCBjaGVja2VkICYmICdjaGVja2VkJywgZGlzYWJsZWQgJiYgJ2Rpc2FibGVkJywgZWRnZSAmJiBgZWRnZSR7Y2FwaXRhbGl6ZShlZGdlKX1gXSxcbiAgICBpbnB1dDogWydpbnB1dCddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0U3dpdGNoQmFzZVV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG59O1xuY29uc3QgU3dpdGNoQmFzZVJvb3QgPSBzdHlsZWQoQnV0dG9uQmFzZSkoKHtcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBwYWRkaW5nOiA5LFxuICBib3JkZXJSYWRpdXM6ICc1MCUnXG59LCBvd25lclN0YXRlLmVkZ2UgPT09ICdzdGFydCcgJiYge1xuICBtYXJnaW5MZWZ0OiBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgPyAtMyA6IC0xMlxufSwgb3duZXJTdGF0ZS5lZGdlID09PSAnZW5kJyAmJiB7XG4gIG1hcmdpblJpZ2h0OiBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgPyAtMyA6IC0xMlxufSkpO1xuY29uc3QgU3dpdGNoQmFzZUlucHV0ID0gc3R5bGVkKCdpbnB1dCcsIHtcbiAgc2hvdWxkRm9yd2FyZFByb3A6IHJvb3RTaG91bGRGb3J3YXJkUHJvcFxufSkoe1xuICBjdXJzb3I6ICdpbmhlcml0JyxcbiAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gIG9wYWNpdHk6IDAsXG4gIHdpZHRoOiAnMTAwJScsXG4gIGhlaWdodDogJzEwMCUnLFxuICB0b3A6IDAsXG4gIGxlZnQ6IDAsXG4gIG1hcmdpbjogMCxcbiAgcGFkZGluZzogMCxcbiAgekluZGV4OiAxXG59KTtcblxuLyoqXG4gKiBAaWdub3JlIC0gaW50ZXJuYWwgY29tcG9uZW50LlxuICovXG5jb25zdCBTd2l0Y2hCYXNlID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gU3dpdGNoQmFzZShwcm9wcywgcmVmKSB7XG4gIGNvbnN0IHtcbiAgICAgIGF1dG9Gb2N1cyxcbiAgICAgIGNoZWNrZWQ6IGNoZWNrZWRQcm9wLFxuICAgICAgY2hlY2tlZEljb24sXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBkZWZhdWx0Q2hlY2tlZCxcbiAgICAgIGRpc2FibGVkOiBkaXNhYmxlZFByb3AsXG4gICAgICBkaXNhYmxlRm9jdXNSaXBwbGUgPSBmYWxzZSxcbiAgICAgIGVkZ2UgPSBmYWxzZSxcbiAgICAgIGljb24sXG4gICAgICBpZCxcbiAgICAgIGlucHV0UHJvcHMsXG4gICAgICBpbnB1dFJlZixcbiAgICAgIG5hbWUsXG4gICAgICBvbkJsdXIsXG4gICAgICBvbkNoYW5nZSxcbiAgICAgIG9uRm9jdXMsXG4gICAgICByZWFkT25seSxcbiAgICAgIHJlcXVpcmVkID0gZmFsc2UsXG4gICAgICB0YWJJbmRleCxcbiAgICAgIHR5cGUsXG4gICAgICB2YWx1ZVxuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBbY2hlY2tlZCwgc2V0Q2hlY2tlZFN0YXRlXSA9IHVzZUNvbnRyb2xsZWQoe1xuICAgIGNvbnRyb2xsZWQ6IGNoZWNrZWRQcm9wLFxuICAgIGRlZmF1bHQ6IEJvb2xlYW4oZGVmYXVsdENoZWNrZWQpLFxuICAgIG5hbWU6ICdTd2l0Y2hCYXNlJyxcbiAgICBzdGF0ZTogJ2NoZWNrZWQnXG4gIH0pO1xuICBjb25zdCBtdWlGb3JtQ29udHJvbCA9IHVzZUZvcm1Db250cm9sKCk7XG4gIGNvbnN0IGhhbmRsZUZvY3VzID0gZXZlbnQgPT4ge1xuICAgIGlmIChvbkZvY3VzKSB7XG4gICAgICBvbkZvY3VzKGV2ZW50KTtcbiAgICB9XG4gICAgaWYgKG11aUZvcm1Db250cm9sICYmIG11aUZvcm1Db250cm9sLm9uRm9jdXMpIHtcbiAgICAgIG11aUZvcm1Db250cm9sLm9uRm9jdXMoZXZlbnQpO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgaGFuZGxlQmx1ciA9IGV2ZW50ID0+IHtcbiAgICBpZiAob25CbHVyKSB7XG4gICAgICBvbkJsdXIoZXZlbnQpO1xuICAgIH1cbiAgICBpZiAobXVpRm9ybUNvbnRyb2wgJiYgbXVpRm9ybUNvbnRyb2wub25CbHVyKSB7XG4gICAgICBtdWlGb3JtQ29udHJvbC5vbkJsdXIoZXZlbnQpO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgaGFuZGxlSW5wdXRDaGFuZ2UgPSBldmVudCA9PiB7XG4gICAgLy8gV29ya2Fyb3VuZCBmb3IgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy85MDIzXG4gICAgaWYgKGV2ZW50Lm5hdGl2ZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbmV3Q2hlY2tlZCA9IGV2ZW50LnRhcmdldC5jaGVja2VkO1xuICAgIHNldENoZWNrZWRTdGF0ZShuZXdDaGVja2VkKTtcbiAgICBpZiAob25DaGFuZ2UpIHtcbiAgICAgIC8vIFRPRE8gdjY6IHJlbW92ZSB0aGUgc2Vjb25kIGFyZ3VtZW50LlxuICAgICAgb25DaGFuZ2UoZXZlbnQsIG5ld0NoZWNrZWQpO1xuICAgIH1cbiAgfTtcbiAgbGV0IGRpc2FibGVkID0gZGlzYWJsZWRQcm9wO1xuICBpZiAobXVpRm9ybUNvbnRyb2wpIHtcbiAgICBpZiAodHlwZW9mIGRpc2FibGVkID09PSAndW5kZWZpbmVkJykge1xuICAgICAgZGlzYWJsZWQgPSBtdWlGb3JtQ29udHJvbC5kaXNhYmxlZDtcbiAgICB9XG4gIH1cbiAgY29uc3QgaGFzTGFiZWxGb3IgPSB0eXBlID09PSAnY2hlY2tib3gnIHx8IHR5cGUgPT09ICdyYWRpbyc7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjaGVja2VkLFxuICAgIGRpc2FibGVkLFxuICAgIGRpc2FibGVGb2N1c1JpcHBsZSxcbiAgICBlZGdlXG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeHMoU3dpdGNoQmFzZVJvb3QsIF9leHRlbmRzKHtcbiAgICBjb21wb25lbnQ6IFwic3BhblwiLFxuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSksXG4gICAgY2VudGVyUmlwcGxlOiB0cnVlLFxuICAgIGZvY3VzUmlwcGxlOiAhZGlzYWJsZUZvY3VzUmlwcGxlLFxuICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICB0YWJJbmRleDogbnVsbCxcbiAgICByb2xlOiB1bmRlZmluZWQsXG4gICAgb25Gb2N1czogaGFuZGxlRm9jdXMsXG4gICAgb25CbHVyOiBoYW5kbGVCbHVyLFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgcmVmOiByZWZcbiAgfSwgb3RoZXIsIHtcbiAgICBjaGlsZHJlbjogWy8qI19fUFVSRV9fKi9fanN4KFN3aXRjaEJhc2VJbnB1dCwgX2V4dGVuZHMoe1xuICAgICAgYXV0b0ZvY3VzOiBhdXRvRm9jdXMsXG4gICAgICBjaGVja2VkOiBjaGVja2VkUHJvcCxcbiAgICAgIGRlZmF1bHRDaGVja2VkOiBkZWZhdWx0Q2hlY2tlZCxcbiAgICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5pbnB1dCxcbiAgICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICAgIGlkOiBoYXNMYWJlbEZvciA/IGlkIDogdW5kZWZpbmVkLFxuICAgICAgbmFtZTogbmFtZSxcbiAgICAgIG9uQ2hhbmdlOiBoYW5kbGVJbnB1dENoYW5nZSxcbiAgICAgIHJlYWRPbmx5OiByZWFkT25seSxcbiAgICAgIHJlZjogaW5wdXRSZWYsXG4gICAgICByZXF1aXJlZDogcmVxdWlyZWQsXG4gICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgICAgdGFiSW5kZXg6IHRhYkluZGV4LFxuICAgICAgdHlwZTogdHlwZVxuICAgIH0sIHR5cGUgPT09ICdjaGVja2JveCcgJiYgdmFsdWUgPT09IHVuZGVmaW5lZCA/IHt9IDoge1xuICAgICAgdmFsdWVcbiAgICB9LCBpbnB1dFByb3BzKSksIGNoZWNrZWQgPyBjaGVja2VkSWNvbiA6IGljb25dXG4gIH0pKTtcbn0pO1xuXG4vLyBOQjogSWYgY2hhbmdlZCwgcGxlYXNlIHVwZGF0ZSBDaGVja2JveCwgU3dpdGNoIGFuZCBSYWRpb1xuLy8gc28gdGhhdCB0aGUgQVBJIGRvY3VtZW50YXRpb24gaXMgdXBkYXRlZC5cbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFN3aXRjaEJhc2UucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCBlbGVtZW50IGlzIGZvY3VzZWQgZHVyaW5nIHRoZSBmaXJzdCBtb3VudC5cbiAgICovXG4gIGF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgY2hlY2tlZC5cbiAgICovXG4gIGNoZWNrZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIGljb24gdG8gZGlzcGxheSB3aGVuIHRoZSBjb21wb25lbnQgaXMgY2hlY2tlZC5cbiAgICovXG4gIGNoZWNrZWRJY29uOiBQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGRlZmF1bHRDaGVja2VkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBkaXNhYmxlZC5cbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlICBrZXlib2FyZCBmb2N1cyByaXBwbGUgaXMgZGlzYWJsZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlRm9jdXNSaXBwbGU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgZ2l2ZW4sIHVzZXMgYSBuZWdhdGl2ZSBtYXJnaW4gdG8gY291bnRlcmFjdCB0aGUgcGFkZGluZyBvbiBvbmVcbiAgICogc2lkZSAodGhpcyBpcyBvZnRlbiBoZWxwZnVsIGZvciBhbGlnbmluZyB0aGUgbGVmdCBvciByaWdodFxuICAgKiBzaWRlIG9mIHRoZSBpY29uIHdpdGggY29udGVudCBhYm92ZSBvciBiZWxvdywgd2l0aG91dCBydWluaW5nIHRoZSBib3JkZXJcbiAgICogc2l6ZSBhbmQgc2hhcGUpLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZWRnZTogUHJvcFR5cGVzLm9uZU9mKFsnZW5kJywgJ3N0YXJ0JywgZmFsc2VdKSxcbiAgLyoqXG4gICAqIFRoZSBpY29uIHRvIGRpc3BsYXkgd2hlbiB0aGUgY29tcG9uZW50IGlzIHVuY2hlY2tlZC5cbiAgICovXG4gIGljb246IFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgKiBUaGUgaWQgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogW0F0dHJpYnV0ZXNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCNBdHRyaWJ1dGVzKSBhcHBsaWVkIHRvIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBpbnB1dFByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogUGFzcyBhIHJlZiB0byB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgaW5wdXRSZWY6IHJlZlR5cGUsXG4gIC8qXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkJsdXI6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiB0aGUgc3RhdGUgaXMgY2hhbmdlZC5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IFRoZSBldmVudCBzb3VyY2Ugb2YgdGhlIGNhbGxiYWNrLlxuICAgKiBZb3UgY2FuIHB1bGwgb3V0IHRoZSBuZXcgY2hlY2tlZCBzdGF0ZSBieSBhY2Nlc3NpbmcgYGV2ZW50LnRhcmdldC5jaGVja2VkYCAoYm9vbGVhbikuXG4gICAqL1xuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkZvY3VzOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEl0IHByZXZlbnRzIHRoZSB1c2VyIGZyb20gY2hhbmdpbmcgdGhlIHZhbHVlIG9mIHRoZSBmaWVsZFxuICAgKiAobm90IGZyb20gaW50ZXJhY3Rpbmcgd2l0aCB0aGUgZmllbGQpLlxuICAgKi9cbiAgcmVhZE9ubHk6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCBlbGVtZW50IGlzIHJlcXVpcmVkLlxuICAgKi9cbiAgcmVxdWlyZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHRhYkluZGV4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgaW5wdXQgY29tcG9uZW50IHByb3AgYHR5cGVgLlxuICAgKi9cbiAgdHlwZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAvKipcbiAgICogVGhlIHZhbHVlIG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICB2YWx1ZTogUHJvcFR5cGVzLmFueVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IFN3aXRjaEJhc2U7IiwgImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0U3dpdGNoQmFzZVV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnUHJpdmF0ZVN3aXRjaEJhc2UnLCBzbG90KTtcbn1cbmNvbnN0IHN3aXRjaEJhc2VDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnUHJpdmF0ZVN3aXRjaEJhc2UnLCBbJ3Jvb3QnLCAnY2hlY2tlZCcsICdkaXNhYmxlZCcsICdpbnB1dCcsICdlZGdlU3RhcnQnLCAnZWRnZUVuZCddKTtcbmV4cG9ydCBkZWZhdWx0IHN3aXRjaEJhc2VDbGFzc2VzOyIsICIndXNlIGNsaWVudCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBjcmVhdGVTdmdJY29uIGZyb20gJy4uLy4uL3V0aWxzL2NyZWF0ZVN2Z0ljb24nO1xuXG4vKipcbiAqIEBpZ25vcmUgLSBpbnRlcm5hbCBjb21wb25lbnQuXG4gKi9cbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5leHBvcnQgZGVmYXVsdCBjcmVhdGVTdmdJY29uKCAvKiNfX1BVUkVfXyovX2pzeChcInBhdGhcIiwge1xuICBkOiBcIk0xOSA1djE0SDVWNWgxNG0wLTJINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yelwiXG59KSwgJ0NoZWNrQm94T3V0bGluZUJsYW5rJyk7IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNyZWF0ZVN2Z0ljb24gZnJvbSAnLi4vLi4vdXRpbHMvY3JlYXRlU3ZnSWNvbic7XG5cbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqL1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZVN2Z0ljb24oIC8qI19fUFVSRV9fKi9fanN4KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTE5IDNINWMtMS4xMSAwLTIgLjktMiAydjE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMTEgMCAyLS45IDItMlY1YzAtMS4xLS44OS0yLTItMnptLTkgMTRsLTUtNSAxLjQxLTEuNDFMMTAgMTQuMTdsNy41OS03LjU5TDE5IDhsLTkgOXpcIlxufSksICdDaGVja0JveCcpOyIsICIndXNlIGNsaWVudCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBjcmVhdGVTdmdJY29uIGZyb20gJy4uLy4uL3V0aWxzL2NyZWF0ZVN2Z0ljb24nO1xuXG4vKipcbiAqIEBpZ25vcmUgLSBpbnRlcm5hbCBjb21wb25lbnQuXG4gKi9cbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5leHBvcnQgZGVmYXVsdCBjcmVhdGVTdmdJY29uKCAvKiNfX1BVUkVfXyovX2pzeChcInBhdGhcIiwge1xuICBkOiBcIk0xOSAzSDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTIgMTBIN3YtMmgxMHYyelwiXG59KSwgJ0luZGV0ZXJtaW5hdGVDaGVja0JveCcpOyIsICJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldENoZWNrYm94VXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlDaGVja2JveCcsIHNsb3QpO1xufVxuY29uc3QgY2hlY2tib3hDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpQ2hlY2tib3gnLCBbJ3Jvb3QnLCAnY2hlY2tlZCcsICdkaXNhYmxlZCcsICdpbmRldGVybWluYXRlJywgJ2NvbG9yUHJpbWFyeScsICdjb2xvclNlY29uZGFyeScsICdzaXplU21hbGwnLCAnc2l6ZU1lZGl1bSddKTtcbmV4cG9ydCBkZWZhdWx0IGNoZWNrYm94Q2xhc3NlczsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwiY29sb3JcIiwgXCJkaXNhYmxlU2hyaW5rXCIsIFwic2l6ZVwiLCBcInN0eWxlXCIsIFwidGhpY2tuZXNzXCIsIFwidmFsdWVcIiwgXCJ2YXJpYW50XCJdO1xubGV0IF8gPSB0ID0+IHQsXG4gIF90LFxuICBfdDIsXG4gIF90MyxcbiAgX3Q0O1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IGNoYWluUHJvcFR5cGVzIGZyb20gJ0BtdWkvdXRpbHMvY2hhaW5Qcm9wVHlwZXMnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHsga2V5ZnJhbWVzLCBjc3MgfSBmcm9tICdAbXVpL3N5c3RlbSc7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgeyBnZXRDaXJjdWxhclByb2dyZXNzVXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9jaXJjdWxhclByb2dyZXNzQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgU0laRSA9IDQ0O1xuY29uc3QgY2lyY3VsYXJSb3RhdGVLZXlmcmFtZSA9IGtleWZyYW1lcyhfdCB8fCAoX3QgPSBfYFxuICAwJSB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XG4gIH1cblxuICAxMDAlIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpO1xuICB9XG5gKSk7XG5jb25zdCBjaXJjdWxhckRhc2hLZXlmcmFtZSA9IGtleWZyYW1lcyhfdDIgfHwgKF90MiA9IF9gXG4gIDAlIHtcbiAgICBzdHJva2UtZGFzaGFycmF5OiAxcHgsIDIwMHB4O1xuICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAwO1xuICB9XG5cbiAgNTAlIHtcbiAgICBzdHJva2UtZGFzaGFycmF5OiAxMDBweCwgMjAwcHg7XG4gICAgc3Ryb2tlLWRhc2hvZmZzZXQ6IC0xNXB4O1xuICB9XG5cbiAgMTAwJSB7XG4gICAgc3Ryb2tlLWRhc2hhcnJheTogMTAwcHgsIDIwMHB4O1xuICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAtMTI1cHg7XG4gIH1cbmApKTtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIHZhcmlhbnQsXG4gICAgY29sb3IsXG4gICAgZGlzYWJsZVNocmlua1xuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgdmFyaWFudCwgYGNvbG9yJHtjYXBpdGFsaXplKGNvbG9yKX1gXSxcbiAgICBzdmc6IFsnc3ZnJ10sXG4gICAgY2lyY2xlOiBbJ2NpcmNsZScsIGBjaXJjbGUke2NhcGl0YWxpemUodmFyaWFudCl9YCwgZGlzYWJsZVNocmluayAmJiAnY2lyY2xlRGlzYWJsZVNocmluayddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0Q2lyY3VsYXJQcm9ncmVzc1V0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG59O1xuY29uc3QgQ2lyY3VsYXJQcm9ncmVzc1Jvb3QgPSBzdHlsZWQoJ3NwYW4nLCB7XG4gIG5hbWU6ICdNdWlDaXJjdWxhclByb2dyZXNzJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLnJvb3QsIHN0eWxlc1tvd25lclN0YXRlLnZhcmlhbnRdLCBzdHlsZXNbYGNvbG9yJHtjYXBpdGFsaXplKG93bmVyU3RhdGUuY29sb3IpfWBdXTtcbiAgfVxufSkoKHtcbiAgb3duZXJTdGF0ZSxcbiAgdGhlbWVcbn0pID0+IF9leHRlbmRzKHtcbiAgZGlzcGxheTogJ2lubGluZS1ibG9jaydcbn0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2RldGVybWluYXRlJyAmJiB7XG4gIHRyYW5zaXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgndHJhbnNmb3JtJylcbn0sIG93bmVyU3RhdGUuY29sb3IgIT09ICdpbmhlcml0JyAmJiB7XG4gIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXS5tYWluXG59KSwgKHtcbiAgb3duZXJTdGF0ZVxufSkgPT4gb3duZXJTdGF0ZS52YXJpYW50ID09PSAnaW5kZXRlcm1pbmF0ZScgJiYgY3NzKF90MyB8fCAoX3QzID0gX2BcbiAgICAgIGFuaW1hdGlvbjogJHswfSAxLjRzIGxpbmVhciBpbmZpbml0ZTtcbiAgICBgKSwgY2lyY3VsYXJSb3RhdGVLZXlmcmFtZSkpO1xuY29uc3QgQ2lyY3VsYXJQcm9ncmVzc1NWRyA9IHN0eWxlZCgnc3ZnJywge1xuICBuYW1lOiAnTXVpQ2lyY3VsYXJQcm9ncmVzcycsXG4gIHNsb3Q6ICdTdmcnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlcy5zdmdcbn0pKHtcbiAgZGlzcGxheTogJ2Jsb2NrJyAvLyBLZWVwcyB0aGUgcHJvZ3Jlc3MgY2VudGVyZWRcbn0pO1xuY29uc3QgQ2lyY3VsYXJQcm9ncmVzc0NpcmNsZSA9IHN0eWxlZCgnY2lyY2xlJywge1xuICBuYW1lOiAnTXVpQ2lyY3VsYXJQcm9ncmVzcycsXG4gIHNsb3Q6ICdDaXJjbGUnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLmNpcmNsZSwgc3R5bGVzW2BjaXJjbGUke2NhcGl0YWxpemUob3duZXJTdGF0ZS52YXJpYW50KX1gXSwgb3duZXJTdGF0ZS5kaXNhYmxlU2hyaW5rICYmIHN0eWxlcy5jaXJjbGVEaXNhYmxlU2hyaW5rXTtcbiAgfVxufSkoKHtcbiAgb3duZXJTdGF0ZSxcbiAgdGhlbWVcbn0pID0+IF9leHRlbmRzKHtcbiAgc3Ryb2tlOiAnY3VycmVudENvbG9yJ1xufSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnZGV0ZXJtaW5hdGUnICYmIHtcbiAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCdzdHJva2UtZGFzaG9mZnNldCcpXG59LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdpbmRldGVybWluYXRlJyAmJiB7XG4gIC8vIFNvbWUgZGVmYXVsdCB2YWx1ZSB0aGF0IGxvb2tzIGZpbmUgd2FpdGluZyBmb3IgdGhlIGFuaW1hdGlvbiB0byBraWNrcyBpbi5cbiAgc3Ryb2tlRGFzaGFycmF5OiAnODBweCwgMjAwcHgnLFxuICBzdHJva2VEYXNob2Zmc2V0OiAwIC8vIEFkZCB0aGUgdW5pdCB0byBmaXggYSBFZGdlIDE2IGFuZCBiZWxvdyBidWcuXG59KSwgKHtcbiAgb3duZXJTdGF0ZVxufSkgPT4gb3duZXJTdGF0ZS52YXJpYW50ID09PSAnaW5kZXRlcm1pbmF0ZScgJiYgIW93bmVyU3RhdGUuZGlzYWJsZVNocmluayAmJiBjc3MoX3Q0IHx8IChfdDQgPSBfYFxuICAgICAgYW5pbWF0aW9uOiAkezB9IDEuNHMgZWFzZS1pbi1vdXQgaW5maW5pdGU7XG4gICAgYCksIGNpcmN1bGFyRGFzaEtleWZyYW1lKSk7XG5cbi8qKlxuICogIyMgQVJJQVxuICpcbiAqIElmIHRoZSBwcm9ncmVzcyBiYXIgaXMgZGVzY3JpYmluZyB0aGUgbG9hZGluZyBwcm9ncmVzcyBvZiBhIHBhcnRpY3VsYXIgcmVnaW9uIG9mIGEgcGFnZSxcbiAqIHlvdSBzaG91bGQgdXNlIGBhcmlhLWRlc2NyaWJlZGJ5YCB0byBwb2ludCB0byB0aGUgcHJvZ3Jlc3MgYmFyLCBhbmQgc2V0IHRoZSBgYXJpYS1idXN5YFxuICogYXR0cmlidXRlIHRvIGB0cnVlYCBvbiB0aGF0IHJlZ2lvbiB1bnRpbCBpdCBoYXMgZmluaXNoZWQgbG9hZGluZy5cbiAqL1xuY29uc3QgQ2lyY3VsYXJQcm9ncmVzcyA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIENpcmN1bGFyUHJvZ3Jlc3MoaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUNpcmN1bGFyUHJvZ3Jlc3MnXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBjbGFzc05hbWUsXG4gICAgICBjb2xvciA9ICdwcmltYXJ5JyxcbiAgICAgIGRpc2FibGVTaHJpbmsgPSBmYWxzZSxcbiAgICAgIHNpemUgPSA0MCxcbiAgICAgIHN0eWxlLFxuICAgICAgdGhpY2tuZXNzID0gMy42LFxuICAgICAgdmFsdWUgPSAwLFxuICAgICAgdmFyaWFudCA9ICdpbmRldGVybWluYXRlJ1xuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY29sb3IsXG4gICAgZGlzYWJsZVNocmluayxcbiAgICBzaXplLFxuICAgIHRoaWNrbmVzcyxcbiAgICB2YWx1ZSxcbiAgICB2YXJpYW50XG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIGNvbnN0IGNpcmNsZVN0eWxlID0ge307XG4gIGNvbnN0IHJvb3RTdHlsZSA9IHt9O1xuICBjb25zdCByb290UHJvcHMgPSB7fTtcbiAgaWYgKHZhcmlhbnQgPT09ICdkZXRlcm1pbmF0ZScpIHtcbiAgICBjb25zdCBjaXJjdW1mZXJlbmNlID0gMiAqIE1hdGguUEkgKiAoKFNJWkUgLSB0aGlja25lc3MpIC8gMik7XG4gICAgY2lyY2xlU3R5bGUuc3Ryb2tlRGFzaGFycmF5ID0gY2lyY3VtZmVyZW5jZS50b0ZpeGVkKDMpO1xuICAgIHJvb3RQcm9wc1snYXJpYS12YWx1ZW5vdyddID0gTWF0aC5yb3VuZCh2YWx1ZSk7XG4gICAgY2lyY2xlU3R5bGUuc3Ryb2tlRGFzaG9mZnNldCA9IGAkeygoMTAwIC0gdmFsdWUpIC8gMTAwICogY2lyY3VtZmVyZW5jZSkudG9GaXhlZCgzKX1weGA7XG4gICAgcm9vdFN0eWxlLnRyYW5zZm9ybSA9ICdyb3RhdGUoLTkwZGVnKSc7XG4gIH1cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KENpcmN1bGFyUHJvZ3Jlc3NSb290LCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICBzdHlsZTogX2V4dGVuZHMoe1xuICAgICAgd2lkdGg6IHNpemUsXG4gICAgICBoZWlnaHQ6IHNpemVcbiAgICB9LCByb290U3R5bGUsIHN0eWxlKSxcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgIHJlZjogcmVmLFxuICAgIHJvbGU6IFwicHJvZ3Jlc3NiYXJcIlxuICB9LCByb290UHJvcHMsIG90aGVyLCB7XG4gICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4KENpcmN1bGFyUHJvZ3Jlc3NTVkcsIHtcbiAgICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5zdmcsXG4gICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgICAgdmlld0JveDogYCR7U0laRSAvIDJ9ICR7U0laRSAvIDJ9ICR7U0laRX0gJHtTSVpFfWAsXG4gICAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3goQ2lyY3VsYXJQcm9ncmVzc0NpcmNsZSwge1xuICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMuY2lyY2xlLFxuICAgICAgICBzdHlsZTogY2lyY2xlU3R5bGUsXG4gICAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICAgIGN4OiBTSVpFLFxuICAgICAgICBjeTogU0laRSxcbiAgICAgICAgcjogKFNJWkUgLSB0aGlja25lc3MpIC8gMixcbiAgICAgICAgZmlsbDogXCJub25lXCIsXG4gICAgICAgIHN0cm9rZVdpZHRoOiB0aGlja25lc3NcbiAgICAgIH0pXG4gICAgfSlcbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBDaXJjdWxhclByb2dyZXNzLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyBcdTI1MENcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDAgV2FybmluZyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MTBcbiAgLy8gXHUyNTAyIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4gXHUyNTAyXG4gIC8vIFx1MjUwMiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIFx1MjUwMlxuICAvLyBcdTI1MTRcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MThcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgY29sb3Igb2YgdGhlIGNvbXBvbmVudC5cbiAgICogSXQgc3VwcG9ydHMgYm90aCBkZWZhdWx0IGFuZCBjdXN0b20gdGhlbWUgY29sb3JzLCB3aGljaCBjYW4gYmUgYWRkZWQgYXMgc2hvd24gaW4gdGhlXG4gICAqIFtwYWxldHRlIGN1c3RvbWl6YXRpb24gZ3VpZGVdKGh0dHBzOi8vbXVpLmNvbS9tYXRlcmlhbC11aS9jdXN0b21pemF0aW9uL3BhbGV0dGUvI2N1c3RvbS1jb2xvcnMpLlxuICAgKiBAZGVmYXVsdCAncHJpbWFyeSdcbiAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2luaGVyaXQnLCAncHJpbWFyeScsICdzZWNvbmRhcnknLCAnZXJyb3InLCAnaW5mbycsICdzdWNjZXNzJywgJ3dhcm5pbmcnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHNocmluayBhbmltYXRpb24gaXMgZGlzYWJsZWQuXG4gICAqIFRoaXMgb25seSB3b3JrcyBpZiB2YXJpYW50IGlzIGBpbmRldGVybWluYXRlYC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVTaHJpbms6IGNoYWluUHJvcFR5cGVzKFByb3BUeXBlcy5ib29sLCBwcm9wcyA9PiB7XG4gICAgaWYgKHByb3BzLmRpc2FibGVTaHJpbmsgJiYgcHJvcHMudmFyaWFudCAmJiBwcm9wcy52YXJpYW50ICE9PSAnaW5kZXRlcm1pbmF0ZScpIHtcbiAgICAgIHJldHVybiBuZXcgRXJyb3IoJ01VSTogWW91IGhhdmUgcHJvdmlkZWQgdGhlIGBkaXNhYmxlU2hyaW5rYCBwcm9wICcgKyAnd2l0aCBhIHZhcmlhbnQgb3RoZXIgdGhhbiBgaW5kZXRlcm1pbmF0ZWAuIFRoaXMgd2lsbCBoYXZlIG5vIGVmZmVjdC4nKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH0pLFxuICAvKipcbiAgICogVGhlIHNpemUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICogSWYgdXNpbmcgYSBudW1iZXIsIHRoZSBwaXhlbCB1bml0IGlzIGFzc3VtZWQuXG4gICAqIElmIHVzaW5nIGEgc3RyaW5nLCB5b3UgbmVlZCB0byBwcm92aWRlIHRoZSBDU1MgdW5pdCwgZS5nLiAnM3JlbScuXG4gICAqIEBkZWZhdWx0IDQwXG4gICAqL1xuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBzdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIFRoZSB0aGlja25lc3Mgb2YgdGhlIGNpcmNsZS5cbiAgICogQGRlZmF1bHQgMy42XG4gICAqL1xuICB0aGlja25lc3M6IFByb3BUeXBlcy5udW1iZXIsXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgb2YgdGhlIHByb2dyZXNzIGluZGljYXRvciBmb3IgdGhlIGRldGVybWluYXRlIHZhcmlhbnQuXG4gICAqIFZhbHVlIGJldHdlZW4gMCBhbmQgMTAwLlxuICAgKiBAZGVmYXVsdCAwXG4gICAqL1xuICB2YWx1ZTogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAqIFRoZSB2YXJpYW50IHRvIHVzZS5cbiAgICogVXNlIGluZGV0ZXJtaW5hdGUgd2hlbiB0aGVyZSBpcyBubyBwcm9ncmVzcyB2YWx1ZS5cbiAgICogQGRlZmF1bHQgJ2luZGV0ZXJtaW5hdGUnXG4gICAqL1xuICB2YXJpYW50OiBQcm9wVHlwZXMub25lT2YoWydkZXRlcm1pbmF0ZScsICdpbmRldGVybWluYXRlJ10pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgQ2lyY3VsYXJQcm9ncmVzczsiLCAiaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRDaXJjdWxhclByb2dyZXNzVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlDaXJjdWxhclByb2dyZXNzJywgc2xvdCk7XG59XG5jb25zdCBjaXJjdWxhclByb2dyZXNzQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUNpcmN1bGFyUHJvZ3Jlc3MnLCBbJ3Jvb3QnLCAnZGV0ZXJtaW5hdGUnLCAnaW5kZXRlcm1pbmF0ZScsICdjb2xvclByaW1hcnknLCAnY29sb3JTZWNvbmRhcnknLCAnc3ZnJywgJ2NpcmNsZScsICdjaXJjbGVEZXRlcm1pbmF0ZScsICdjaXJjbGVJbmRldGVybWluYXRlJywgJ2NpcmNsZURpc2FibGVTaHJpbmsnXSk7XG5leHBvcnQgZGVmYXVsdCBjaXJjdWxhclByb2dyZXNzQ2xhc3NlczsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJjb2xvclwiLCBcImNvbXBvbmVudFwiLCBcImRpc2FibGVkXCIsIFwiZXJyb3JcIiwgXCJmb2N1c2VkXCIsIFwiZnVsbFdpZHRoXCIsIFwiaGlkZGVuTGFiZWxcIiwgXCJtYXJnaW5cIiwgXCJyZXF1aXJlZFwiLCBcInNpemVcIiwgXCJ2YXJpYW50XCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB7IGlzRmlsbGVkLCBpc0Fkb3JuZWRTdGFydCB9IGZyb20gJy4uL0lucHV0QmFzZS91dGlscyc7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCBpc011aUVsZW1lbnQgZnJvbSAnLi4vdXRpbHMvaXNNdWlFbGVtZW50JztcbmltcG9ydCBGb3JtQ29udHJvbENvbnRleHQgZnJvbSAnLi9Gb3JtQ29udHJvbENvbnRleHQnO1xuaW1wb3J0IHsgZ2V0Rm9ybUNvbnRyb2xVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJy4vZm9ybUNvbnRyb2xDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICBtYXJnaW4sXG4gICAgZnVsbFdpZHRoXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCBtYXJnaW4gIT09ICdub25lJyAmJiBgbWFyZ2luJHtjYXBpdGFsaXplKG1hcmdpbil9YCwgZnVsbFdpZHRoICYmICdmdWxsV2lkdGgnXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldEZvcm1Db250cm9sVXRpbGl0eUNsYXNzZXMsIGNsYXNzZXMpO1xufTtcbmNvbnN0IEZvcm1Db250cm9sUm9vdCA9IHN0eWxlZCgnZGl2Jywge1xuICBuYW1lOiAnTXVpRm9ybUNvbnRyb2wnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAoe1xuICAgIG93bmVyU3RhdGVcbiAgfSwgc3R5bGVzKSA9PiB7XG4gICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdHlsZXMucm9vdCwgc3R5bGVzW2BtYXJnaW4ke2NhcGl0YWxpemUob3duZXJTdGF0ZS5tYXJnaW4pfWBdLCBvd25lclN0YXRlLmZ1bGxXaWR0aCAmJiBzdHlsZXMuZnVsbFdpZHRoKTtcbiAgfVxufSkoKHtcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBkaXNwbGF5OiAnaW5saW5lLWZsZXgnLFxuICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gIC8vIFJlc2V0IGZpZWxkc2V0IGRlZmF1bHQgc3R5bGUuXG4gIG1pbldpZHRoOiAwLFxuICBwYWRkaW5nOiAwLFxuICBtYXJnaW46IDAsXG4gIGJvcmRlcjogMCxcbiAgdmVydGljYWxBbGlnbjogJ3RvcCdcbn0sIG93bmVyU3RhdGUubWFyZ2luID09PSAnbm9ybWFsJyAmJiB7XG4gIG1hcmdpblRvcDogMTYsXG4gIG1hcmdpbkJvdHRvbTogOFxufSwgb3duZXJTdGF0ZS5tYXJnaW4gPT09ICdkZW5zZScgJiYge1xuICBtYXJnaW5Ub3A6IDgsXG4gIG1hcmdpbkJvdHRvbTogNFxufSwgb3duZXJTdGF0ZS5mdWxsV2lkdGggJiYge1xuICB3aWR0aDogJzEwMCUnXG59KSk7XG5cbi8qKlxuICogUHJvdmlkZXMgY29udGV4dCBzdWNoIGFzIGZpbGxlZC9mb2N1c2VkL2Vycm9yL3JlcXVpcmVkIGZvciBmb3JtIGlucHV0cy5cbiAqIFJlbHlpbmcgb24gdGhlIGNvbnRleHQgcHJvdmlkZXMgaGlnaCBmbGV4aWJpbGl0eSBhbmQgZW5zdXJlcyB0aGF0IHRoZSBzdGF0ZSBhbHdheXMgc3RheXNcbiAqIGNvbnNpc3RlbnQgYWNyb3NzIHRoZSBjaGlsZHJlbiBvZiB0aGUgYEZvcm1Db250cm9sYC5cbiAqIFRoaXMgY29udGV4dCBpcyB1c2VkIGJ5IHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czpcbiAqXG4gKiAgLSBGb3JtTGFiZWxcbiAqICAtIEZvcm1IZWxwZXJUZXh0XG4gKiAgLSBJbnB1dFxuICogIC0gSW5wdXRMYWJlbFxuICpcbiAqIFlvdSBjYW4gZmluZCBvbmUgY29tcG9zaXRpb24gZXhhbXBsZSBiZWxvdyBhbmQgbW9yZSBnb2luZyB0byBbdGhlIGRlbW9zXSgvbWF0ZXJpYWwtdWkvcmVhY3QtdGV4dC1maWVsZC8jY29tcG9uZW50cykuXG4gKlxuICogYGBganN4XG4gKiA8Rm9ybUNvbnRyb2w+XG4gKiAgIDxJbnB1dExhYmVsIGh0bWxGb3I9XCJteS1pbnB1dFwiPkVtYWlsIGFkZHJlc3M8L0lucHV0TGFiZWw+XG4gKiAgIDxJbnB1dCBpZD1cIm15LWlucHV0XCIgYXJpYS1kZXNjcmliZWRieT1cIm15LWhlbHBlci10ZXh0XCIgLz5cbiAqICAgPEZvcm1IZWxwZXJUZXh0IGlkPVwibXktaGVscGVyLXRleHRcIj5XZSdsbCBuZXZlciBzaGFyZSB5b3VyIGVtYWlsLjwvRm9ybUhlbHBlclRleHQ+XG4gKiA8L0Zvcm1Db250cm9sPlxuICogYGBgXG4gKlxuICogXHUyNkEwXHVGRTBGIE9ubHkgb25lIGBJbnB1dEJhc2VgIGNhbiBiZSB1c2VkIHdpdGhpbiBhIEZvcm1Db250cm9sIGJlY2F1c2UgaXQgY3JlYXRlcyB2aXN1YWwgaW5jb25zaXN0ZW5jaWVzLlxuICogRm9yIGluc3RhbmNlLCBvbmx5IG9uZSBpbnB1dCBjYW4gYmUgZm9jdXNlZCBhdCB0aGUgc2FtZSB0aW1lLCB0aGUgc3RhdGUgc2hvdWxkbid0IGJlIHNoYXJlZC5cbiAqL1xuY29uc3QgRm9ybUNvbnRyb2wgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBGb3JtQ29udHJvbChpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpRm9ybUNvbnRyb2wnXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBjaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNvbG9yID0gJ3ByaW1hcnknLFxuICAgICAgY29tcG9uZW50ID0gJ2RpdicsXG4gICAgICBkaXNhYmxlZCA9IGZhbHNlLFxuICAgICAgZXJyb3IgPSBmYWxzZSxcbiAgICAgIGZvY3VzZWQ6IHZpc3VhbGx5Rm9jdXNlZCxcbiAgICAgIGZ1bGxXaWR0aCA9IGZhbHNlLFxuICAgICAgaGlkZGVuTGFiZWwgPSBmYWxzZSxcbiAgICAgIG1hcmdpbiA9ICdub25lJyxcbiAgICAgIHJlcXVpcmVkID0gZmFsc2UsXG4gICAgICBzaXplID0gJ21lZGl1bScsXG4gICAgICB2YXJpYW50ID0gJ291dGxpbmVkJ1xuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY29sb3IsXG4gICAgY29tcG9uZW50LFxuICAgIGRpc2FibGVkLFxuICAgIGVycm9yLFxuICAgIGZ1bGxXaWR0aCxcbiAgICBoaWRkZW5MYWJlbCxcbiAgICBtYXJnaW4sXG4gICAgcmVxdWlyZWQsXG4gICAgc2l6ZSxcbiAgICB2YXJpYW50XG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIGNvbnN0IFthZG9ybmVkU3RhcnQsIHNldEFkb3JuZWRTdGFydF0gPSBSZWFjdC51c2VTdGF0ZSgoKSA9PiB7XG4gICAgLy8gV2UgbmVlZCB0byBpdGVyYXRlIHRocm91Z2ggdGhlIGNoaWxkcmVuIGFuZCBmaW5kIHRoZSBJbnB1dCBpbiBvcmRlclxuICAgIC8vIHRvIGZ1bGx5IHN1cHBvcnQgc2VydmVyLXNpZGUgcmVuZGVyaW5nLlxuICAgIGxldCBpbml0aWFsQWRvcm5lZFN0YXJ0ID0gZmFsc2U7XG4gICAgaWYgKGNoaWxkcmVuKSB7XG4gICAgICBSZWFjdC5DaGlsZHJlbi5mb3JFYWNoKGNoaWxkcmVuLCBjaGlsZCA9PiB7XG4gICAgICAgIGlmICghaXNNdWlFbGVtZW50KGNoaWxkLCBbJ0lucHV0JywgJ1NlbGVjdCddKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbnB1dCA9IGlzTXVpRWxlbWVudChjaGlsZCwgWydTZWxlY3QnXSkgPyBjaGlsZC5wcm9wcy5pbnB1dCA6IGNoaWxkO1xuICAgICAgICBpZiAoaW5wdXQgJiYgaXNBZG9ybmVkU3RhcnQoaW5wdXQucHJvcHMpKSB7XG4gICAgICAgICAgaW5pdGlhbEFkb3JuZWRTdGFydCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gaW5pdGlhbEFkb3JuZWRTdGFydDtcbiAgfSk7XG4gIGNvbnN0IFtmaWxsZWQsIHNldEZpbGxlZF0gPSBSZWFjdC51c2VTdGF0ZSgoKSA9PiB7XG4gICAgLy8gV2UgbmVlZCB0byBpdGVyYXRlIHRocm91Z2ggdGhlIGNoaWxkcmVuIGFuZCBmaW5kIHRoZSBJbnB1dCBpbiBvcmRlclxuICAgIC8vIHRvIGZ1bGx5IHN1cHBvcnQgc2VydmVyLXNpZGUgcmVuZGVyaW5nLlxuICAgIGxldCBpbml0aWFsRmlsbGVkID0gZmFsc2U7XG4gICAgaWYgKGNoaWxkcmVuKSB7XG4gICAgICBSZWFjdC5DaGlsZHJlbi5mb3JFYWNoKGNoaWxkcmVuLCBjaGlsZCA9PiB7XG4gICAgICAgIGlmICghaXNNdWlFbGVtZW50KGNoaWxkLCBbJ0lucHV0JywgJ1NlbGVjdCddKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNGaWxsZWQoY2hpbGQucHJvcHMsIHRydWUpIHx8IGlzRmlsbGVkKGNoaWxkLnByb3BzLmlucHV0UHJvcHMsIHRydWUpKSB7XG4gICAgICAgICAgaW5pdGlhbEZpbGxlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gaW5pdGlhbEZpbGxlZDtcbiAgfSk7XG4gIGNvbnN0IFtmb2N1c2VkU3RhdGUsIHNldEZvY3VzZWRdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBpZiAoZGlzYWJsZWQgJiYgZm9jdXNlZFN0YXRlKSB7XG4gICAgc2V0Rm9jdXNlZChmYWxzZSk7XG4gIH1cbiAgY29uc3QgZm9jdXNlZCA9IHZpc3VhbGx5Rm9jdXNlZCAhPT0gdW5kZWZpbmVkICYmICFkaXNhYmxlZCA/IHZpc3VhbGx5Rm9jdXNlZCA6IGZvY3VzZWRTdGF0ZTtcbiAgbGV0IHJlZ2lzdGVyRWZmZWN0O1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9ydWxlcy1vZi1ob29rc1xuICAgIGNvbnN0IHJlZ2lzdGVyZWRJbnB1dCA9IFJlYWN0LnVzZVJlZihmYWxzZSk7XG4gICAgcmVnaXN0ZXJFZmZlY3QgPSAoKSA9PiB7XG4gICAgICBpZiAocmVnaXN0ZXJlZElucHV0LmN1cnJlbnQpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihbJ01VSTogVGhlcmUgYXJlIG11bHRpcGxlIGBJbnB1dEJhc2VgIGNvbXBvbmVudHMgaW5zaWRlIGEgRm9ybUNvbnRyb2wuJywgJ1RoaXMgY3JlYXRlcyB2aXN1YWwgaW5jb25zaXN0ZW5jaWVzLCBvbmx5IHVzZSBvbmUgYElucHV0QmFzZWAuJ10uam9pbignXFxuJykpO1xuICAgICAgfVxuICAgICAgcmVnaXN0ZXJlZElucHV0LmN1cnJlbnQgPSB0cnVlO1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgcmVnaXN0ZXJlZElucHV0LmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIH07XG4gICAgfTtcbiAgfVxuICBjb25zdCBjaGlsZENvbnRleHQgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgYWRvcm5lZFN0YXJ0LFxuICAgICAgc2V0QWRvcm5lZFN0YXJ0LFxuICAgICAgY29sb3IsXG4gICAgICBkaXNhYmxlZCxcbiAgICAgIGVycm9yLFxuICAgICAgZmlsbGVkLFxuICAgICAgZm9jdXNlZCxcbiAgICAgIGZ1bGxXaWR0aCxcbiAgICAgIGhpZGRlbkxhYmVsLFxuICAgICAgc2l6ZSxcbiAgICAgIG9uQmx1cjogKCkgPT4ge1xuICAgICAgICBzZXRGb2N1c2VkKGZhbHNlKTtcbiAgICAgIH0sXG4gICAgICBvbkVtcHR5OiAoKSA9PiB7XG4gICAgICAgIHNldEZpbGxlZChmYWxzZSk7XG4gICAgICB9LFxuICAgICAgb25GaWxsZWQ6ICgpID0+IHtcbiAgICAgICAgc2V0RmlsbGVkKHRydWUpO1xuICAgICAgfSxcbiAgICAgIG9uRm9jdXM6ICgpID0+IHtcbiAgICAgICAgc2V0Rm9jdXNlZCh0cnVlKTtcbiAgICAgIH0sXG4gICAgICByZWdpc3RlckVmZmVjdCxcbiAgICAgIHJlcXVpcmVkLFxuICAgICAgdmFyaWFudFxuICAgIH07XG4gIH0sIFthZG9ybmVkU3RhcnQsIGNvbG9yLCBkaXNhYmxlZCwgZXJyb3IsIGZpbGxlZCwgZm9jdXNlZCwgZnVsbFdpZHRoLCBoaWRkZW5MYWJlbCwgcmVnaXN0ZXJFZmZlY3QsIHJlcXVpcmVkLCBzaXplLCB2YXJpYW50XSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChGb3JtQ29udHJvbENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogY2hpbGRDb250ZXh0LFxuICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeChGb3JtQ29udHJvbFJvb3QsIF9leHRlbmRzKHtcbiAgICAgIGFzOiBjb21wb25lbnQsXG4gICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICAgIHJlZjogcmVmXG4gICAgfSwgb3RoZXIsIHtcbiAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICAgIH0pKVxuICB9KTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gRm9ybUNvbnRyb2wucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIFx1MjUwQ1x1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMCBXYXJuaW5nIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUxMFxuICAvLyBcdTI1MDIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiBcdTI1MDJcbiAgLy8gXHUyNTAyICAgIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiAgICAgXHUyNTAyXG4gIC8vIFx1MjUxNFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUxOFxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgY29sb3Igb2YgdGhlIGNvbXBvbmVudC5cbiAgICogSXQgc3VwcG9ydHMgYm90aCBkZWZhdWx0IGFuZCBjdXN0b20gdGhlbWUgY29sb3JzLCB3aGljaCBjYW4gYmUgYWRkZWQgYXMgc2hvd24gaW4gdGhlXG4gICAqIFtwYWxldHRlIGN1c3RvbWl6YXRpb24gZ3VpZGVdKGh0dHBzOi8vbXVpLmNvbS9tYXRlcmlhbC11aS9jdXN0b21pemF0aW9uL3BhbGV0dGUvI2N1c3RvbS1jb2xvcnMpLlxuICAgKiBAZGVmYXVsdCAncHJpbWFyeSdcbiAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ3ByaW1hcnknLCAnc2Vjb25kYXJ5JywgJ2Vycm9yJywgJ2luZm8nLCAnc3VjY2VzcycsICd3YXJuaW5nJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxhYmVsLCBpbnB1dCBhbmQgaGVscGVyIHRleHQgc2hvdWxkIGJlIGRpc3BsYXllZCBpbiBhIGRpc2FibGVkIHN0YXRlLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbGFiZWwgaXMgZGlzcGxheWVkIGluIGFuIGVycm9yIHN0YXRlLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZXJyb3I6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIGRpc3BsYXllZCBpbiBmb2N1c2VkIHN0YXRlLlxuICAgKi9cbiAgZm9jdXNlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgd2lsbCB0YWtlIHVwIHRoZSBmdWxsIHdpZHRoIG9mIGl0cyBjb250YWluZXIuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBmdWxsV2lkdGg6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbGFiZWwgaXMgaGlkZGVuLlxuICAgKiBUaGlzIGlzIHVzZWQgdG8gaW5jcmVhc2UgZGVuc2l0eSBmb3IgYSBgRmlsbGVkSW5wdXRgLlxuICAgKiBCZSBzdXJlIHRvIGFkZCBgYXJpYS1sYWJlbGAgdG8gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGhpZGRlbkxhYmVsOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGBkZW5zZWAgb3IgYG5vcm1hbGAsIHdpbGwgYWRqdXN0IHZlcnRpY2FsIHNwYWNpbmcgb2YgdGhpcyBhbmQgY29udGFpbmVkIGNvbXBvbmVudHMuXG4gICAqIEBkZWZhdWx0ICdub25lJ1xuICAgKi9cbiAgbWFyZ2luOiBQcm9wVHlwZXMub25lT2YoWydkZW5zZScsICdub25lJywgJ25vcm1hbCddKSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxhYmVsIHdpbGwgaW5kaWNhdGUgdGhhdCB0aGUgYGlucHV0YCBpcyByZXF1aXJlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlcXVpcmVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBzaXplIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0ICdtZWRpdW0nXG4gICAqL1xuICBzaXplOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ21lZGl1bScsICdzbWFsbCddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogVGhlIHZhcmlhbnQgdG8gdXNlLlxuICAgKiBAZGVmYXVsdCAnb3V0bGluZWQnXG4gICAqL1xuICB2YXJpYW50OiBQcm9wVHlwZXMub25lT2YoWydmaWxsZWQnLCAnb3V0bGluZWQnLCAnc3RhbmRhcmQnXSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBGb3JtQ29udHJvbDsiLCAiaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtQ29udHJvbFV0aWxpdHlDbGFzc2VzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlGb3JtQ29udHJvbCcsIHNsb3QpO1xufVxuY29uc3QgZm9ybUNvbnRyb2xDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpRm9ybUNvbnRyb2wnLCBbJ3Jvb3QnLCAnbWFyZ2luTm9uZScsICdtYXJnaW5Ob3JtYWwnLCAnbWFyZ2luRGVuc2UnLCAnZnVsbFdpZHRoJywgJ2Rpc2FibGVkJ10pO1xuZXhwb3J0IGRlZmF1bHQgZm9ybUNvbnRyb2xDbGFzc2VzOyIsICIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjaGVja2VkXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29tcG9uZW50c1Byb3BzXCIsIFwiY29udHJvbFwiLCBcImRpc2FibGVkXCIsIFwiZGlzYWJsZVR5cG9ncmFwaHlcIiwgXCJpbnB1dFJlZlwiLCBcImxhYmVsXCIsIFwibGFiZWxQbGFjZW1lbnRcIiwgXCJuYW1lXCIsIFwib25DaGFuZ2VcIiwgXCJyZXF1aXJlZFwiLCBcInNsb3RQcm9wc1wiLCBcInZhbHVlXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHJlZlR5cGUgZnJvbSAnQG11aS91dGlscy9yZWZUeXBlJztcbmltcG9ydCBjb21wb3NlQ2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCB7IHVzZUZvcm1Db250cm9sIH0gZnJvbSAnLi4vRm9ybUNvbnRyb2wnO1xuaW1wb3J0IFN0YWNrIGZyb20gJy4uL1N0YWNrJztcbmltcG9ydCBUeXBvZ3JhcGh5IGZyb20gJy4uL1R5cG9ncmFwaHknO1xuaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnLi4vdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IGZvcm1Db250cm9sTGFiZWxDbGFzc2VzLCB7IGdldEZvcm1Db250cm9sTGFiZWxVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJy4vZm9ybUNvbnRyb2xMYWJlbENsYXNzZXMnO1xuaW1wb3J0IGZvcm1Db250cm9sU3RhdGUgZnJvbSAnLi4vRm9ybUNvbnRyb2wvZm9ybUNvbnRyb2xTdGF0ZSc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgZGlzYWJsZWQsXG4gICAgbGFiZWxQbGFjZW1lbnQsXG4gICAgZXJyb3IsXG4gICAgcmVxdWlyZWRcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIGRpc2FibGVkICYmICdkaXNhYmxlZCcsIGBsYWJlbFBsYWNlbWVudCR7Y2FwaXRhbGl6ZShsYWJlbFBsYWNlbWVudCl9YCwgZXJyb3IgJiYgJ2Vycm9yJywgcmVxdWlyZWQgJiYgJ3JlcXVpcmVkJ10sXG4gICAgbGFiZWw6IFsnbGFiZWwnLCBkaXNhYmxlZCAmJiAnZGlzYWJsZWQnXSxcbiAgICBhc3RlcmlzazogWydhc3RlcmlzaycsIGVycm9yICYmICdlcnJvciddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0Rm9ybUNvbnRyb2xMYWJlbFV0aWxpdHlDbGFzc2VzLCBjbGFzc2VzKTtcbn07XG5leHBvcnQgY29uc3QgRm9ybUNvbnRyb2xMYWJlbFJvb3QgPSBzdHlsZWQoJ2xhYmVsJywge1xuICBuYW1lOiAnTXVpRm9ybUNvbnRyb2xMYWJlbCcsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3tcbiAgICAgIFtgJiAuJHtmb3JtQ29udHJvbExhYmVsQ2xhc3Nlcy5sYWJlbH1gXTogc3R5bGVzLmxhYmVsXG4gICAgfSwgc3R5bGVzLnJvb3QsIHN0eWxlc1tgbGFiZWxQbGFjZW1lbnQke2NhcGl0YWxpemUob3duZXJTdGF0ZS5sYWJlbFBsYWNlbWVudCl9YF1dO1xuICB9XG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBkaXNwbGF5OiAnaW5saW5lLWZsZXgnLFxuICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgY3Vyc29yOiAncG9pbnRlcicsXG4gIC8vIEZvciBjb3JyZWN0IGFsaWdubWVudCB3aXRoIHRoZSB0ZXh0LlxuICB2ZXJ0aWNhbEFsaWduOiAnbWlkZGxlJyxcbiAgV2Via2l0VGFwSGlnaGxpZ2h0Q29sb3I6ICd0cmFuc3BhcmVudCcsXG4gIG1hcmdpbkxlZnQ6IC0xMSxcbiAgbWFyZ2luUmlnaHQ6IDE2LFxuICAvLyB1c2VkIGZvciByb3cgcHJlc2VudGF0aW9uIG9mIHJhZGlvL2NoZWNrYm94XG4gIFtgJi4ke2Zvcm1Db250cm9sTGFiZWxDbGFzc2VzLmRpc2FibGVkfWBdOiB7XG4gICAgY3Vyc29yOiAnZGVmYXVsdCdcbiAgfVxufSwgb3duZXJTdGF0ZS5sYWJlbFBsYWNlbWVudCA9PT0gJ3N0YXJ0JyAmJiB7XG4gIGZsZXhEaXJlY3Rpb246ICdyb3ctcmV2ZXJzZScsXG4gIG1hcmdpbkxlZnQ6IDE2LFxuICAvLyB1c2VkIGZvciByb3cgcHJlc2VudGF0aW9uIG9mIHJhZGlvL2NoZWNrYm94XG4gIG1hcmdpblJpZ2h0OiAtMTFcbn0sIG93bmVyU3RhdGUubGFiZWxQbGFjZW1lbnQgPT09ICd0b3AnICYmIHtcbiAgZmxleERpcmVjdGlvbjogJ2NvbHVtbi1yZXZlcnNlJyxcbiAgbWFyZ2luTGVmdDogMTZcbn0sIG93bmVyU3RhdGUubGFiZWxQbGFjZW1lbnQgPT09ICdib3R0b20nICYmIHtcbiAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gIG1hcmdpbkxlZnQ6IDE2XG59LCB7XG4gIFtgJiAuJHtmb3JtQ29udHJvbExhYmVsQ2xhc3Nlcy5sYWJlbH1gXToge1xuICAgIFtgJi4ke2Zvcm1Db250cm9sTGFiZWxDbGFzc2VzLmRpc2FibGVkfWBdOiB7XG4gICAgICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUudGV4dC5kaXNhYmxlZFxuICAgIH1cbiAgfVxufSkpO1xuY29uc3QgQXN0ZXJpc2tDb21wb25lbnQgPSBzdHlsZWQoJ3NwYW4nLCB7XG4gIG5hbWU6ICdNdWlGb3JtQ29udHJvbExhYmVsJyxcbiAgc2xvdDogJ0FzdGVyaXNrJyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMuYXN0ZXJpc2tcbn0pKCh7XG4gIHRoZW1lXG59KSA9PiAoe1xuICBbYCYuJHtmb3JtQ29udHJvbExhYmVsQ2xhc3Nlcy5lcnJvcn1gXToge1xuICAgIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5lcnJvci5tYWluXG4gIH1cbn0pKTtcblxuLyoqXG4gKiBEcm9wLWluIHJlcGxhY2VtZW50IG9mIHRoZSBgUmFkaW9gLCBgU3dpdGNoYCBhbmQgYENoZWNrYm94YCBjb21wb25lbnQuXG4gKiBVc2UgdGhpcyBjb21wb25lbnQgaWYgeW91IHdhbnQgdG8gZGlzcGxheSBhbiBleHRyYSBsYWJlbC5cbiAqL1xuY29uc3QgRm9ybUNvbnRyb2xMYWJlbCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIEZvcm1Db250cm9sTGFiZWwoaW5Qcm9wcywgcmVmKSB7XG4gIHZhciBfcmVmLCBfc2xvdFByb3BzJHR5cG9ncmFwaHk7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUZvcm1Db250cm9sTGFiZWwnXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBjbGFzc05hbWUsXG4gICAgICBjb21wb25lbnRzUHJvcHMgPSB7fSxcbiAgICAgIGNvbnRyb2wsXG4gICAgICBkaXNhYmxlZDogZGlzYWJsZWRQcm9wLFxuICAgICAgZGlzYWJsZVR5cG9ncmFwaHksXG4gICAgICBsYWJlbDogbGFiZWxQcm9wLFxuICAgICAgbGFiZWxQbGFjZW1lbnQgPSAnZW5kJyxcbiAgICAgIHJlcXVpcmVkOiByZXF1aXJlZFByb3AsXG4gICAgICBzbG90UHJvcHMgPSB7fVxuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBtdWlGb3JtQ29udHJvbCA9IHVzZUZvcm1Db250cm9sKCk7XG4gIGNvbnN0IGRpc2FibGVkID0gKF9yZWYgPSBkaXNhYmxlZFByb3AgIT0gbnVsbCA/IGRpc2FibGVkUHJvcCA6IGNvbnRyb2wucHJvcHMuZGlzYWJsZWQpICE9IG51bGwgPyBfcmVmIDogbXVpRm9ybUNvbnRyb2wgPT0gbnVsbCA/IHZvaWQgMCA6IG11aUZvcm1Db250cm9sLmRpc2FibGVkO1xuICBjb25zdCByZXF1aXJlZCA9IHJlcXVpcmVkUHJvcCAhPSBudWxsID8gcmVxdWlyZWRQcm9wIDogY29udHJvbC5wcm9wcy5yZXF1aXJlZDtcbiAgY29uc3QgY29udHJvbFByb3BzID0ge1xuICAgIGRpc2FibGVkLFxuICAgIHJlcXVpcmVkXG4gIH07XG4gIFsnY2hlY2tlZCcsICduYW1lJywgJ29uQ2hhbmdlJywgJ3ZhbHVlJywgJ2lucHV0UmVmJ10uZm9yRWFjaChrZXkgPT4ge1xuICAgIGlmICh0eXBlb2YgY29udHJvbC5wcm9wc1trZXldID09PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgcHJvcHNba2V5XSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbnRyb2xQcm9wc1trZXldID0gcHJvcHNba2V5XTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBmY3MgPSBmb3JtQ29udHJvbFN0YXRlKHtcbiAgICBwcm9wcyxcbiAgICBtdWlGb3JtQ29udHJvbCxcbiAgICBzdGF0ZXM6IFsnZXJyb3InXVxuICB9KTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGRpc2FibGVkLFxuICAgIGxhYmVsUGxhY2VtZW50LFxuICAgIHJlcXVpcmVkLFxuICAgIGVycm9yOiBmY3MuZXJyb3JcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgY29uc3QgdHlwb2dyYXBoeVNsb3RQcm9wcyA9IChfc2xvdFByb3BzJHR5cG9ncmFwaHkgPSBzbG90UHJvcHMudHlwb2dyYXBoeSkgIT0gbnVsbCA/IF9zbG90UHJvcHMkdHlwb2dyYXBoeSA6IGNvbXBvbmVudHNQcm9wcy50eXBvZ3JhcGh5O1xuICBsZXQgbGFiZWwgPSBsYWJlbFByb3A7XG4gIGlmIChsYWJlbCAhPSBudWxsICYmIGxhYmVsLnR5cGUgIT09IFR5cG9ncmFwaHkgJiYgIWRpc2FibGVUeXBvZ3JhcGh5KSB7XG4gICAgbGFiZWwgPSAvKiNfX1BVUkVfXyovX2pzeChUeXBvZ3JhcGh5LCBfZXh0ZW5kcyh7XG4gICAgICBjb21wb25lbnQ6IFwic3BhblwiXG4gICAgfSwgdHlwb2dyYXBoeVNsb3RQcm9wcywge1xuICAgICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMubGFiZWwsIHR5cG9ncmFwaHlTbG90UHJvcHMgPT0gbnVsbCA/IHZvaWQgMCA6IHR5cG9ncmFwaHlTbG90UHJvcHMuY2xhc3NOYW1lKSxcbiAgICAgIGNoaWxkcmVuOiBsYWJlbFxuICAgIH0pKTtcbiAgfVxuICByZXR1cm4gLyojX19QVVJFX18qL19qc3hzKEZvcm1Db250cm9sTGFiZWxSb290LCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgIHJlZjogcmVmXG4gIH0sIG90aGVyLCB7XG4gICAgY2hpbGRyZW46IFsvKiNfX1BVUkVfXyovUmVhY3QuY2xvbmVFbGVtZW50KGNvbnRyb2wsIGNvbnRyb2xQcm9wcyksIHJlcXVpcmVkID8gLyojX19QVVJFX18qL19qc3hzKFN0YWNrLCB7XG4gICAgICBkaXNwbGF5OiBcImJsb2NrXCIsXG4gICAgICBjaGlsZHJlbjogW2xhYmVsLCAvKiNfX1BVUkVfXyovX2pzeHMoQXN0ZXJpc2tDb21wb25lbnQsIHtcbiAgICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICAgICAgXCJhcmlhLWhpZGRlblwiOiB0cnVlLFxuICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMuYXN0ZXJpc2ssXG4gICAgICAgIGNoaWxkcmVuOiBbXCJcXHUyMDA5XCIsICcqJ11cbiAgICAgIH0pXVxuICAgIH0pIDogbGFiZWxdXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gRm9ybUNvbnRyb2xMYWJlbC5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gXHUyNTBDXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwIFdhcm5pbmcgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTEwXG4gIC8vIFx1MjUwMiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIFx1MjUwMlxuICAvLyBcdTI1MDIgICAgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuICAgICBcdTI1MDJcbiAgLy8gXHUyNTE0XHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTE4XG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgYXBwZWFycyBzZWxlY3RlZC5cbiAgICovXG4gIGNoZWNrZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBwcm9wcyB1c2VkIGZvciBlYWNoIHNsb3QgaW5zaWRlLlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgY29tcG9uZW50c1Byb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIHR5cG9ncmFwaHk6IFByb3BUeXBlcy5vYmplY3RcbiAgfSksXG4gIC8qKlxuICAgKiBBIGNvbnRyb2wgZWxlbWVudC4gRm9yIGluc3RhbmNlLCBpdCBjYW4gYmUgYSBgUmFkaW9gLCBhIGBTd2l0Y2hgIG9yIGEgYENoZWNrYm94YC5cbiAgICovXG4gIGNvbnRyb2w6IFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb250cm9sIGlzIGRpc2FibGVkLlxuICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbGFiZWwgaXMgcmVuZGVyZWQgYXMgaXQgaXMgcGFzc2VkIHdpdGhvdXQgYW4gYWRkaXRpb25hbCB0eXBvZ3JhcGh5IG5vZGUuXG4gICAqL1xuICBkaXNhYmxlVHlwb2dyYXBoeTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBQYXNzIGEgcmVmIHRvIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBpbnB1dFJlZjogcmVmVHlwZSxcbiAgLyoqXG4gICAqIEEgdGV4dCBvciBhbiBlbGVtZW50IHRvIGJlIHVzZWQgaW4gYW4gZW5jbG9zaW5nIGxhYmVsIGVsZW1lbnQuXG4gICAqL1xuICBsYWJlbDogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBUaGUgcG9zaXRpb24gb2YgdGhlIGxhYmVsLlxuICAgKiBAZGVmYXVsdCAnZW5kJ1xuICAgKi9cbiAgbGFiZWxQbGFjZW1lbnQ6IFByb3BUeXBlcy5vbmVPZihbJ2JvdHRvbScsICdlbmQnLCAnc3RhcnQnLCAndG9wJ10pLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIHN0YXRlIGlzIGNoYW5nZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3QuU3ludGhldGljRXZlbnR9IGV2ZW50IFRoZSBldmVudCBzb3VyY2Ugb2YgdGhlIGNhbGxiYWNrLlxuICAgKiBZb3UgY2FuIHB1bGwgb3V0IHRoZSBuZXcgY2hlY2tlZCBzdGF0ZSBieSBhY2Nlc3NpbmcgYGV2ZW50LnRhcmdldC5jaGVja2VkYCAoYm9vbGVhbikuXG4gICAqL1xuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsYWJlbCB3aWxsIGluZGljYXRlIHRoYXQgdGhlIGBpbnB1dGAgaXMgcmVxdWlyZWQuXG4gICAqL1xuICByZXF1aXJlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgcHJvcHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZS5cbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIHNsb3RQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICB0eXBvZ3JhcGh5OiBQcm9wVHlwZXMub2JqZWN0XG4gIH0pLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogVGhlIHZhbHVlIG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICB2YWx1ZTogUHJvcFR5cGVzLmFueVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IEZvcm1Db250cm9sTGFiZWw7IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IGNyZWF0ZVN0YWNrIH0gZnJvbSAnQG11aS9zeXN0ZW0nO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmNvbnN0IFN0YWNrID0gY3JlYXRlU3RhY2soe1xuICBjcmVhdGVTdHlsZWRDb21wb25lbnQ6IHN0eWxlZCgnZGl2Jywge1xuICAgIG5hbWU6ICdNdWlTdGFjaycsXG4gICAgc2xvdDogJ1Jvb3QnLFxuICAgIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4gc3R5bGVzLnJvb3RcbiAgfSksXG4gIHVzZVRoZW1lUHJvcHM6IGluUHJvcHMgPT4gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aVN0YWNrJ1xuICB9KVxufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBTdGFjay5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gXHUyNTBDXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwIFdhcm5pbmcgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTEwXG4gIC8vIFx1MjUwMiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIFx1MjUwMlxuICAvLyBcdTI1MDIgICAgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuICAgICBcdTI1MDJcbiAgLy8gXHUyNTE0XHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTE4XG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBEZWZpbmVzIHRoZSBgZmxleC1kaXJlY3Rpb25gIHN0eWxlIHByb3BlcnR5LlxuICAgKiBJdCBpcyBhcHBsaWVkIGZvciBhbGwgc2NyZWVuIHNpemVzLlxuICAgKiBAZGVmYXVsdCAnY29sdW1uJ1xuICAgKi9cbiAgZGlyZWN0aW9uOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydjb2x1bW4tcmV2ZXJzZScsICdjb2x1bW4nLCAncm93LXJldmVyc2UnLCAncm93J10pLCBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2YoWydjb2x1bW4tcmV2ZXJzZScsICdjb2x1bW4nLCAncm93LXJldmVyc2UnLCAncm93J10pKSwgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogQWRkIGFuIGVsZW1lbnQgYmV0d2VlbiBlYWNoIGNoaWxkLlxuICAgKi9cbiAgZGl2aWRlcjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBEZWZpbmVzIHRoZSBzcGFjZSBiZXR3ZWVuIGltbWVkaWF0ZSBjaGlsZHJlbi5cbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgc3BhY2luZzogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pKSwgUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wLCB3aGljaCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBDU1MgZmxleGJveCBgZ2FwYCBpcyB1c2VkIGluc3RlYWQgb2YgYXBwbHlpbmcgYG1hcmdpbmAgdG8gY2hpbGRyZW4uXG4gICAqXG4gICAqIFdoaWxlIENTUyBgZ2FwYCByZW1vdmVzIHRoZSBba25vd24gbGltaXRhdGlvbnNdKGh0dHBzOi8vbXVpLmNvbS9qb3ktdWkvcmVhY3Qtc3RhY2svI2xpbWl0YXRpb25zKSxcbiAgICogaXQgaXMgbm90IGZ1bGx5IHN1cHBvcnRlZCBpbiBzb21lIGJyb3dzZXJzLiBXZSByZWNvbW1lbmQgY2hlY2tpbmcgaHR0cHM6Ly9jYW5pdXNlLmNvbS8/c2VhcmNoPWZsZXglMjBnYXAgYmVmb3JlIHVzaW5nIHRoaXMgZmxhZy5cbiAgICpcbiAgICogVG8gZW5hYmxlIHRoaXMgZmxhZyBnbG9iYWxseSwgZm9sbG93IHRoZSBbdGhlbWUncyBkZWZhdWx0IHByb3BzXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvY3VzdG9taXphdGlvbi90aGVtZS1jb21wb25lbnRzLyNkZWZhdWx0LXByb3BzKSBjb25maWd1cmF0aW9uLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgdXNlRmxleEdhcDogUHJvcFR5cGVzLmJvb2xcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBTdGFjazsiLCAiaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtQ29udHJvbExhYmVsVXRpbGl0eUNsYXNzZXMoc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUZvcm1Db250cm9sTGFiZWwnLCBzbG90KTtcbn1cbmNvbnN0IGZvcm1Db250cm9sTGFiZWxDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpRm9ybUNvbnRyb2xMYWJlbCcsIFsncm9vdCcsICdsYWJlbFBsYWNlbWVudFN0YXJ0JywgJ2xhYmVsUGxhY2VtZW50VG9wJywgJ2xhYmVsUGxhY2VtZW50Qm90dG9tJywgJ2Rpc2FibGVkJywgJ2xhYmVsJywgJ2Vycm9yJywgJ3JlcXVpcmVkJywgJ2FzdGVyaXNrJ10pO1xuZXhwb3J0IGRlZmF1bHQgZm9ybUNvbnRyb2xMYWJlbENsYXNzZXM7IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcInJvd1wiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCBjb21wb3NlQ2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgeyBnZXRGb3JtR3JvdXBVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL2Zvcm1Hcm91cENsYXNzZXMnO1xuaW1wb3J0IHVzZUZvcm1Db250cm9sIGZyb20gJy4uL0Zvcm1Db250cm9sL3VzZUZvcm1Db250cm9sJztcbmltcG9ydCBmb3JtQ29udHJvbFN0YXRlIGZyb20gJy4uL0Zvcm1Db250cm9sL2Zvcm1Db250cm9sU3RhdGUnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIHJvdyxcbiAgICBlcnJvclxuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290Jywgcm93ICYmICdyb3cnLCBlcnJvciAmJiAnZXJyb3InXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldEZvcm1Hcm91cFV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG59O1xuY29uc3QgRm9ybUdyb3VwUm9vdCA9IHN0eWxlZCgnZGl2Jywge1xuICBuYW1lOiAnTXVpRm9ybUdyb3VwJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLnJvb3QsIG93bmVyU3RhdGUucm93ICYmIHN0eWxlcy5yb3ddO1xuICB9XG59KSgoe1xuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gIGZsZXhXcmFwOiAnd3JhcCdcbn0sIG93bmVyU3RhdGUucm93ICYmIHtcbiAgZmxleERpcmVjdGlvbjogJ3Jvdydcbn0pKTtcblxuLyoqXG4gKiBgRm9ybUdyb3VwYCB3cmFwcyBjb250cm9scyBzdWNoIGFzIGBDaGVja2JveGAgYW5kIGBTd2l0Y2hgLlxuICogSXQgcHJvdmlkZXMgY29tcGFjdCByb3cgbGF5b3V0LlxuICogRm9yIHRoZSBgUmFkaW9gLCB5b3Ugc2hvdWxkIGJlIHVzaW5nIHRoZSBgUmFkaW9Hcm91cGAgY29tcG9uZW50IGluc3RlYWQgb2YgdGhpcyBvbmUuXG4gKi9cbmNvbnN0IEZvcm1Hcm91cCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIEZvcm1Hcm91cChpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpRm9ybUdyb3VwJ1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgY2xhc3NOYW1lLFxuICAgICAgcm93ID0gZmFsc2VcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3QgbXVpRm9ybUNvbnRyb2wgPSB1c2VGb3JtQ29udHJvbCgpO1xuICBjb25zdCBmY3MgPSBmb3JtQ29udHJvbFN0YXRlKHtcbiAgICBwcm9wcyxcbiAgICBtdWlGb3JtQ29udHJvbCxcbiAgICBzdGF0ZXM6IFsnZXJyb3InXVxuICB9KTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIHJvdyxcbiAgICBlcnJvcjogZmNzLmVycm9yXG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChGb3JtR3JvdXBSb290LCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgIHJlZjogcmVmXG4gIH0sIG90aGVyKSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IEZvcm1Hcm91cC5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gXHUyNTBDXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwIFdhcm5pbmcgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTEwXG4gIC8vIFx1MjUwMiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIFx1MjUwMlxuICAvLyBcdTI1MDIgICAgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuICAgICBcdTI1MDJcbiAgLy8gXHUyNTE0XHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTE4XG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIERpc3BsYXkgZ3JvdXAgb2YgZWxlbWVudHMgaW4gYSBjb21wYWN0IHJvdy5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJvdzogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBGb3JtR3JvdXA7IiwgImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybUdyb3VwVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlGb3JtR3JvdXAnLCBzbG90KTtcbn1cbmNvbnN0IGZvcm1Hcm91cENsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlGb3JtR3JvdXAnLCBbJ3Jvb3QnLCAncm93JywgJ2Vycm9yJ10pO1xuZXhwb3J0IGRlZmF1bHQgZm9ybUdyb3VwQ2xhc3NlczsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2hlY2tlZFwiLCBcImNoZWNrZWRJY29uXCIsIFwiY29sb3JcIiwgXCJpY29uXCIsIFwibmFtZVwiLCBcIm9uQ2hhbmdlXCIsIFwic2l6ZVwiLCBcImNsYXNzTmFtZVwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCByZWZUeXBlIGZyb20gJ0BtdWkvdXRpbHMvcmVmVHlwZSc7XG5pbXBvcnQgY29tcG9zZUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgeyBhbHBoYSB9IGZyb20gJ0BtdWkvc3lzdGVtL2NvbG9yTWFuaXB1bGF0b3InO1xuaW1wb3J0IFN3aXRjaEJhc2UgZnJvbSAnLi4vaW50ZXJuYWwvU3dpdGNoQmFzZSc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgUmFkaW9CdXR0b25JY29uIGZyb20gJy4vUmFkaW9CdXR0b25JY29uJztcbmltcG9ydCBjYXBpdGFsaXplIGZyb20gJy4uL3V0aWxzL2NhcGl0YWxpemUnO1xuaW1wb3J0IGNyZWF0ZUNoYWluZWRGdW5jdGlvbiBmcm9tICcuLi91dGlscy9jcmVhdGVDaGFpbmVkRnVuY3Rpb24nO1xuaW1wb3J0IHVzZVJhZGlvR3JvdXAgZnJvbSAnLi4vUmFkaW9Hcm91cC91c2VSYWRpb0dyb3VwJztcbmltcG9ydCByYWRpb0NsYXNzZXMsIHsgZ2V0UmFkaW9VdGlsaXR5Q2xhc3MgfSBmcm9tICcuL3JhZGlvQ2xhc3Nlcyc7XG5pbXBvcnQgc3R5bGVkLCB7IHJvb3RTaG91bGRGb3J3YXJkUHJvcCB9IGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIGNvbG9yLFxuICAgIHNpemVcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIGBjb2xvciR7Y2FwaXRhbGl6ZShjb2xvcil9YCwgc2l6ZSAhPT0gJ21lZGl1bScgJiYgYHNpemUke2NhcGl0YWxpemUoc2l6ZSl9YF1cbiAgfTtcbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBjbGFzc2VzLCBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0UmFkaW9VdGlsaXR5Q2xhc3MsIGNsYXNzZXMpKTtcbn07XG5jb25zdCBSYWRpb1Jvb3QgPSBzdHlsZWQoU3dpdGNoQmFzZSwge1xuICBzaG91bGRGb3J3YXJkUHJvcDogcHJvcCA9PiByb290U2hvdWxkRm9yd2FyZFByb3AocHJvcCkgfHwgcHJvcCA9PT0gJ2NsYXNzZXMnLFxuICBuYW1lOiAnTXVpUmFkaW8nLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMucm9vdCwgb3duZXJTdGF0ZS5zaXplICE9PSAnbWVkaXVtJyAmJiBzdHlsZXNbYHNpemUke2NhcGl0YWxpemUob3duZXJTdGF0ZS5zaXplKX1gXSwgc3R5bGVzW2Bjb2xvciR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLmNvbG9yKX1gXV07XG4gIH1cbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS50ZXh0LnNlY29uZGFyeVxufSwgIW93bmVyU3RhdGUuZGlzYWJsZVJpcHBsZSAmJiB7XG4gICcmOmhvdmVyJzoge1xuICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUudmFycyA/IGByZ2JhKCR7b3duZXJTdGF0ZS5jb2xvciA9PT0gJ2RlZmF1bHQnID8gdGhlbWUudmFycy5wYWxldHRlLmFjdGlvbi5hY3RpdmVDaGFubmVsIDogdGhlbWUudmFycy5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW5DaGFubmVsfSAvICR7dGhlbWUudmFycy5wYWxldHRlLmFjdGlvbi5ob3Zlck9wYWNpdHl9KWAgOiBhbHBoYShvd25lclN0YXRlLmNvbG9yID09PSAnZGVmYXVsdCcgPyB0aGVtZS5wYWxldHRlLmFjdGlvbi5hY3RpdmUgOiB0aGVtZS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW4sIHRoZW1lLnBhbGV0dGUuYWN0aW9uLmhvdmVyT3BhY2l0eSksXG4gICAgLy8gUmVzZXQgb24gdG91Y2ggZGV2aWNlcywgaXQgZG9lc24ndCBhZGQgc3BlY2lmaWNpdHlcbiAgICAnQG1lZGlhIChob3Zlcjogbm9uZSknOiB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCdcbiAgICB9XG4gIH1cbn0sIG93bmVyU3RhdGUuY29sb3IgIT09ICdkZWZhdWx0JyAmJiB7XG4gIFtgJi4ke3JhZGlvQ2xhc3Nlcy5jaGVja2VkfWBdOiB7XG4gICAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW5cbiAgfVxufSwge1xuICBbYCYuJHtyYWRpb0NsYXNzZXMuZGlzYWJsZWR9YF06IHtcbiAgICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuYWN0aW9uLmRpc2FibGVkXG4gIH1cbn0pKTtcbmZ1bmN0aW9uIGFyZUVxdWFsVmFsdWVzKGEsIGIpIHtcbiAgaWYgKHR5cGVvZiBiID09PSAnb2JqZWN0JyAmJiBiICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIGEgPT09IGI7XG4gIH1cblxuICAvLyBUaGUgdmFsdWUgY291bGQgYmUgYSBudW1iZXIsIHRoZSBET00gd2lsbCBzdHJpbmdpZnkgaXQgYW55d2F5LlxuICByZXR1cm4gU3RyaW5nKGEpID09PSBTdHJpbmcoYik7XG59XG5jb25zdCBkZWZhdWx0Q2hlY2tlZEljb24gPSAvKiNfX1BVUkVfXyovX2pzeChSYWRpb0J1dHRvbkljb24sIHtcbiAgY2hlY2tlZDogdHJ1ZVxufSk7XG5jb25zdCBkZWZhdWx0SWNvbiA9IC8qI19fUFVSRV9fKi9fanN4KFJhZGlvQnV0dG9uSWNvbiwge30pO1xuY29uc3QgUmFkaW8gPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBSYWRpbyhpblByb3BzLCByZWYpIHtcbiAgdmFyIF9kZWZhdWx0SWNvbiRwcm9wcyRmbywgX2RlZmF1bHRDaGVja2VkSWNvbiRwO1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlSYWRpbydcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGNoZWNrZWQ6IGNoZWNrZWRQcm9wLFxuICAgICAgY2hlY2tlZEljb24gPSBkZWZhdWx0Q2hlY2tlZEljb24sXG4gICAgICBjb2xvciA9ICdwcmltYXJ5JyxcbiAgICAgIGljb24gPSBkZWZhdWx0SWNvbixcbiAgICAgIG5hbWU6IG5hbWVQcm9wLFxuICAgICAgb25DaGFuZ2U6IG9uQ2hhbmdlUHJvcCxcbiAgICAgIHNpemUgPSAnbWVkaXVtJyxcbiAgICAgIGNsYXNzTmFtZVxuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY29sb3IsXG4gICAgc2l6ZVxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICBjb25zdCByYWRpb0dyb3VwID0gdXNlUmFkaW9Hcm91cCgpO1xuICBsZXQgY2hlY2tlZCA9IGNoZWNrZWRQcm9wO1xuICBjb25zdCBvbkNoYW5nZSA9IGNyZWF0ZUNoYWluZWRGdW5jdGlvbihvbkNoYW5nZVByb3AsIHJhZGlvR3JvdXAgJiYgcmFkaW9Hcm91cC5vbkNoYW5nZSk7XG4gIGxldCBuYW1lID0gbmFtZVByb3A7XG4gIGlmIChyYWRpb0dyb3VwKSB7XG4gICAgaWYgKHR5cGVvZiBjaGVja2VkID09PSAndW5kZWZpbmVkJykge1xuICAgICAgY2hlY2tlZCA9IGFyZUVxdWFsVmFsdWVzKHJhZGlvR3JvdXAudmFsdWUsIHByb3BzLnZhbHVlKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBuYW1lID09PSAndW5kZWZpbmVkJykge1xuICAgICAgbmFtZSA9IHJhZGlvR3JvdXAubmFtZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFJhZGlvUm9vdCwgX2V4dGVuZHMoe1xuICAgIHR5cGU6IFwicmFkaW9cIixcbiAgICBpY29uOiAvKiNfX1BVUkVfXyovUmVhY3QuY2xvbmVFbGVtZW50KGljb24sIHtcbiAgICAgIGZvbnRTaXplOiAoX2RlZmF1bHRJY29uJHByb3BzJGZvID0gZGVmYXVsdEljb24ucHJvcHMuZm9udFNpemUpICE9IG51bGwgPyBfZGVmYXVsdEljb24kcHJvcHMkZm8gOiBzaXplXG4gICAgfSksXG4gICAgY2hlY2tlZEljb246IC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQoY2hlY2tlZEljb24sIHtcbiAgICAgIGZvbnRTaXplOiAoX2RlZmF1bHRDaGVja2VkSWNvbiRwID0gZGVmYXVsdENoZWNrZWRJY29uLnByb3BzLmZvbnRTaXplKSAhPSBudWxsID8gX2RlZmF1bHRDaGVja2VkSWNvbiRwIDogc2l6ZVxuICAgIH0pLFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgY2xhc3NlczogY2xhc3NlcyxcbiAgICBuYW1lOiBuYW1lLFxuICAgIGNoZWNrZWQ6IGNoZWNrZWQsXG4gICAgb25DaGFuZ2U6IG9uQ2hhbmdlLFxuICAgIHJlZjogcmVmLFxuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSlcbiAgfSwgb3RoZXIpKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gUmFkaW8ucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIFx1MjUwQ1x1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMCBXYXJuaW5nIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUxMFxuICAvLyBcdTI1MDIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiBcdTI1MDJcbiAgLy8gXHUyNTAyICAgIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiAgICAgXHUyNTAyXG4gIC8vIFx1MjUxNFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUxOFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIGNoZWNrZWQuXG4gICAqL1xuICBjaGVja2VkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBpY29uIHRvIGRpc3BsYXkgd2hlbiB0aGUgY29tcG9uZW50IGlzIGNoZWNrZWQuXG4gICAqIEBkZWZhdWx0IDxSYWRpb0J1dHRvbkljb24gY2hlY2tlZCAvPlxuICAgKi9cbiAgY2hlY2tlZEljb246IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb2xvciBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBJdCBzdXBwb3J0cyBib3RoIGRlZmF1bHQgYW5kIGN1c3RvbSB0aGVtZSBjb2xvcnMsIHdoaWNoIGNhbiBiZSBhZGRlZCBhcyBzaG93biBpbiB0aGVcbiAgICogW3BhbGV0dGUgY3VzdG9taXphdGlvbiBndWlkZV0oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL2N1c3RvbWl6YXRpb24vcGFsZXR0ZS8jY3VzdG9tLWNvbG9ycykuXG4gICAqIEBkZWZhdWx0ICdwcmltYXJ5J1xuICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnZGVmYXVsdCcsICdwcmltYXJ5JywgJ3NlY29uZGFyeScsICdlcnJvcicsICdpbmZvJywgJ3N1Y2Nlc3MnLCAnd2FybmluZyddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIGRpc2FibGVkLlxuICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgcmlwcGxlIGVmZmVjdCBpcyBkaXNhYmxlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVSaXBwbGU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIGljb24gdG8gZGlzcGxheSB3aGVuIHRoZSBjb21wb25lbnQgaXMgdW5jaGVja2VkLlxuICAgKiBAZGVmYXVsdCA8UmFkaW9CdXR0b25JY29uIC8+XG4gICAqL1xuICBpY29uOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIFRoZSBpZCBvZiB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBbQXR0cmlidXRlc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0I0F0dHJpYnV0ZXMpIGFwcGxpZWQgdG8gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIGlucHV0UHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBQYXNzIGEgcmVmIHRvIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBpbnB1dFJlZjogcmVmVHlwZSxcbiAgLyoqXG4gICAqIE5hbWUgYXR0cmlidXRlIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBuYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiB0aGUgc3RhdGUgaXMgY2hhbmdlZC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdC5DaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50Pn0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqIFlvdSBjYW4gcHVsbCBvdXQgdGhlIG5ldyB2YWx1ZSBieSBhY2Nlc3NpbmcgYGV2ZW50LnRhcmdldC52YWx1ZWAgKHN0cmluZykuXG4gICAqIFlvdSBjYW4gcHVsbCBvdXQgdGhlIG5ldyBjaGVja2VkIHN0YXRlIGJ5IGFjY2Vzc2luZyBgZXZlbnQudGFyZ2V0LmNoZWNrZWRgIChib29sZWFuKS5cbiAgICovXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgZWxlbWVudCBpcyByZXF1aXJlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlcXVpcmVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBzaXplIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIGBzbWFsbGAgaXMgZXF1aXZhbGVudCB0byB0aGUgZGVuc2UgcmFkaW8gc3R5bGluZy5cbiAgICogQGRlZmF1bHQgJ21lZGl1bSdcbiAgICovXG4gIHNpemU6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnbWVkaXVtJywgJ3NtYWxsJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgb2YgdGhlIGNvbXBvbmVudC4gVGhlIERPTSBBUEkgY2FzdHMgdGhpcyB0byBhIHN0cmluZy5cbiAgICovXG4gIHZhbHVlOiBQcm9wVHlwZXMuYW55XG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgUmFkaW87IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFJhZGlvQnV0dG9uVW5jaGVja2VkSWNvbiBmcm9tICcuLi9pbnRlcm5hbC9zdmctaWNvbnMvUmFkaW9CdXR0b25VbmNoZWNrZWQnO1xuaW1wb3J0IFJhZGlvQnV0dG9uQ2hlY2tlZEljb24gZnJvbSAnLi4vaW50ZXJuYWwvc3ZnLWljb25zL1JhZGlvQnV0dG9uQ2hlY2tlZCc7XG5pbXBvcnQgc3R5bGVkLCB7IHJvb3RTaG91bGRGb3J3YXJkUHJvcCB9IGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IFJhZGlvQnV0dG9uSWNvblJvb3QgPSBzdHlsZWQoJ3NwYW4nLCB7XG4gIHNob3VsZEZvcndhcmRQcm9wOiByb290U2hvdWxkRm9yd2FyZFByb3Bcbn0pKHtcbiAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gIGRpc3BsYXk6ICdmbGV4J1xufSk7XG5jb25zdCBSYWRpb0J1dHRvbkljb25CYWNrZ3JvdW5kID0gc3R5bGVkKFJhZGlvQnV0dG9uVW5jaGVja2VkSWNvbikoe1xuICAvLyBTY2FsZSBhcHBsaWVkIHRvIHByZXZlbnQgZG90IG1pc2FsaWdubWVudCBpbiBTYWZhcmlcbiAgdHJhbnNmb3JtOiAnc2NhbGUoMSknXG59KTtcbmNvbnN0IFJhZGlvQnV0dG9uSWNvbkRvdCA9IHN0eWxlZChSYWRpb0J1dHRvbkNoZWNrZWRJY29uKSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBsZWZ0OiAwLFxuICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgdHJhbnNmb3JtOiAnc2NhbGUoMCknLFxuICB0cmFuc2l0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ3RyYW5zZm9ybScsIHtcbiAgICBlYXNpbmc6IHRoZW1lLnRyYW5zaXRpb25zLmVhc2luZy5lYXNlSW4sXG4gICAgZHVyYXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLnNob3J0ZXN0XG4gIH0pXG59LCBvd25lclN0YXRlLmNoZWNrZWQgJiYge1xuICB0cmFuc2Zvcm06ICdzY2FsZSgxKScsXG4gIHRyYW5zaXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgndHJhbnNmb3JtJywge1xuICAgIGVhc2luZzogdGhlbWUudHJhbnNpdGlvbnMuZWFzaW5nLmVhc2VPdXQsXG4gICAgZHVyYXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLnNob3J0ZXN0XG4gIH0pXG59KSk7XG5cbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqL1xuZnVuY3Rpb24gUmFkaW9CdXR0b25JY29uKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBjaGVja2VkID0gZmFsc2UsXG4gICAgY2xhc3NlcyA9IHt9LFxuICAgIGZvbnRTaXplXG4gIH0gPSBwcm9wcztcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNoZWNrZWRcbiAgfSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeHMoUmFkaW9CdXR0b25JY29uUm9vdCwge1xuICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5yb290LFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgY2hpbGRyZW46IFsvKiNfX1BVUkVfXyovX2pzeChSYWRpb0J1dHRvbkljb25CYWNrZ3JvdW5kLCB7XG4gICAgICBmb250U2l6ZTogZm9udFNpemUsXG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXMuYmFja2dyb3VuZCxcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGVcbiAgICB9KSwgLyojX19QVVJFX18qL19qc3goUmFkaW9CdXR0b25JY29uRG90LCB7XG4gICAgICBmb250U2l6ZTogZm9udFNpemUsXG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXMuZG90LFxuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZVxuICAgIH0pXVxuICB9KTtcbn1cbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFJhZGlvQnV0dG9uSWNvbi5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgY2hlY2tlZC5cbiAgICovXG4gIGNoZWNrZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIFRoZSBzaXplIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIGBzbWFsbGAgaXMgZXF1aXZhbGVudCB0byB0aGUgZGVuc2UgcmFkaW8gc3R5bGluZy5cbiAgICovXG4gIGZvbnRTaXplOiBQcm9wVHlwZXMub25lT2YoWydzbWFsbCcsICdtZWRpdW0nXSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBSYWRpb0J1dHRvbkljb247IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNyZWF0ZVN2Z0ljb24gZnJvbSAnLi4vLi4vdXRpbHMvY3JlYXRlU3ZnSWNvbic7XG5cbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqL1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZVN2Z0ljb24oIC8qI19fUFVSRV9fKi9fanN4KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgMThjLTQuNDIgMC04LTMuNTgtOC04czMuNTgtOCA4LTggOCAzLjU4IDggOC0zLjU4IDgtOCA4elwiXG59KSwgJ1JhZGlvQnV0dG9uVW5jaGVja2VkJyk7IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNyZWF0ZVN2Z0ljb24gZnJvbSAnLi4vLi4vdXRpbHMvY3JlYXRlU3ZnSWNvbic7XG5cbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqL1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZVN2Z0ljb24oIC8qI19fUFVSRV9fKi9fanN4KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTguNDY1IDguNDY1QzkuMzcgNy41NiAxMC42MiA3IDEyIDdDMTQuNzYgNyAxNyA5LjI0IDE3IDEyQzE3IDEzLjM4IDE2LjQ0IDE0LjYzIDE1LjUzNSAxNS41MzVDMTQuNjMgMTYuNDQgMTMuMzggMTcgMTIgMTdDOS4yNCAxNyA3IDE0Ljc2IDcgMTJDNyAxMC42MiA3LjU2IDkuMzcgOC40NjUgOC40NjVaXCJcbn0pLCAnUmFkaW9CdXR0b25DaGVja2VkJyk7IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFJhZGlvR3JvdXBDb250ZXh0IGZyb20gJy4vUmFkaW9Hcm91cENvbnRleHQnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlUmFkaW9Hcm91cCgpIHtcbiAgcmV0dXJuIFJlYWN0LnVzZUNvbnRleHQoUmFkaW9Hcm91cENvbnRleHQpO1xufSIsICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG4vKipcbiAqIEBpZ25vcmUgLSBpbnRlcm5hbCBjb21wb25lbnQuXG4gKi9cbmNvbnN0IFJhZGlvR3JvdXBDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQodW5kZWZpbmVkKTtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIFJhZGlvR3JvdXBDb250ZXh0LmRpc3BsYXlOYW1lID0gJ1JhZGlvR3JvdXBDb250ZXh0Jztcbn1cbmV4cG9ydCBkZWZhdWx0IFJhZGlvR3JvdXBDb250ZXh0OyIsICJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJhZGlvVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlSYWRpbycsIHNsb3QpO1xufVxuY29uc3QgcmFkaW9DbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpUmFkaW8nLCBbJ3Jvb3QnLCAnY2hlY2tlZCcsICdkaXNhYmxlZCcsICdjb2xvclByaW1hcnknLCAnY29sb3JTZWNvbmRhcnknLCAnc2l6ZVNtYWxsJ10pO1xuZXhwb3J0IGRlZmF1bHQgcmFkaW9DbGFzc2VzOyIsICIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJhY3Rpb25zXCIsIFwiY2hpbGRyZW5cIiwgXCJkZWZhdWx0VmFsdWVcIiwgXCJuYW1lXCIsIFwib25DaGFuZ2VcIiwgXCJ2YWx1ZVwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgRm9ybUdyb3VwIGZyb20gJy4uL0Zvcm1Hcm91cCc7XG5pbXBvcnQgdXNlRm9ya1JlZiBmcm9tICcuLi91dGlscy91c2VGb3JrUmVmJztcbmltcG9ydCB1c2VDb250cm9sbGVkIGZyb20gJy4uL3V0aWxzL3VzZUNvbnRyb2xsZWQnO1xuaW1wb3J0IFJhZGlvR3JvdXBDb250ZXh0IGZyb20gJy4vUmFkaW9Hcm91cENvbnRleHQnO1xuaW1wb3J0IHVzZUlkIGZyb20gJy4uL3V0aWxzL3VzZUlkJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCBSYWRpb0dyb3VwID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gUmFkaW9Hcm91cChwcm9wcywgcmVmKSB7XG4gIGNvbnN0IHtcbiAgICAgIC8vIHByaXZhdGVcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9wcm9wLXR5cGVzXG4gICAgICBhY3Rpb25zLFxuICAgICAgY2hpbGRyZW4sXG4gICAgICBkZWZhdWx0VmFsdWUsXG4gICAgICBuYW1lOiBuYW1lUHJvcCxcbiAgICAgIG9uQ2hhbmdlLFxuICAgICAgdmFsdWU6IHZhbHVlUHJvcFxuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCByb290UmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBbdmFsdWUsIHNldFZhbHVlU3RhdGVdID0gdXNlQ29udHJvbGxlZCh7XG4gICAgY29udHJvbGxlZDogdmFsdWVQcm9wLFxuICAgIGRlZmF1bHQ6IGRlZmF1bHRWYWx1ZSxcbiAgICBuYW1lOiAnUmFkaW9Hcm91cCdcbiAgfSk7XG4gIFJlYWN0LnVzZUltcGVyYXRpdmVIYW5kbGUoYWN0aW9ucywgKCkgPT4gKHtcbiAgICBmb2N1czogKCkgPT4ge1xuICAgICAgbGV0IGlucHV0ID0gcm9vdFJlZi5jdXJyZW50LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0Om5vdCg6ZGlzYWJsZWQpOmNoZWNrZWQnKTtcbiAgICAgIGlmICghaW5wdXQpIHtcbiAgICAgICAgaW5wdXQgPSByb290UmVmLmN1cnJlbnQucXVlcnlTZWxlY3RvcignaW5wdXQ6bm90KDpkaXNhYmxlZCknKTtcbiAgICAgIH1cbiAgICAgIGlmIChpbnB1dCkge1xuICAgICAgICBpbnB1dC5mb2N1cygpO1xuICAgICAgfVxuICAgIH1cbiAgfSksIFtdKTtcbiAgY29uc3QgaGFuZGxlUmVmID0gdXNlRm9ya1JlZihyZWYsIHJvb3RSZWYpO1xuICBjb25zdCBuYW1lID0gdXNlSWQobmFtZVByb3ApO1xuICBjb25zdCBjb250ZXh0VmFsdWUgPSBSZWFjdC51c2VNZW1vKCgpID0+ICh7XG4gICAgbmFtZSxcbiAgICBvbkNoYW5nZShldmVudCkge1xuICAgICAgc2V0VmFsdWVTdGF0ZShldmVudC50YXJnZXQudmFsdWUpO1xuICAgICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICAgIG9uQ2hhbmdlKGV2ZW50LCBldmVudC50YXJnZXQudmFsdWUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgdmFsdWVcbiAgfSksIFtuYW1lLCBvbkNoYW5nZSwgc2V0VmFsdWVTdGF0ZSwgdmFsdWVdKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFJhZGlvR3JvdXBDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IGNvbnRleHRWYWx1ZSxcbiAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3goRm9ybUdyb3VwLCBfZXh0ZW5kcyh7XG4gICAgICByb2xlOiBcInJhZGlvZ3JvdXBcIixcbiAgICAgIHJlZjogaGFuZGxlUmVmXG4gICAgfSwgb3RoZXIsIHtcbiAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICAgIH0pKVxuICB9KTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gUmFkaW9Hcm91cC5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gXHUyNTBDXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwIFdhcm5pbmcgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTEwXG4gIC8vIFx1MjUwMiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIFx1MjUwMlxuICAvLyBcdTI1MDIgICAgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuICAgICBcdTI1MDJcbiAgLy8gXHUyNTE0XHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTE4XG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgdmFsdWUuIFVzZSB3aGVuIHRoZSBjb21wb25lbnQgaXMgbm90IGNvbnRyb2xsZWQuXG4gICAqL1xuICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgKiBUaGUgbmFtZSB1c2VkIHRvIHJlZmVyZW5jZSB0aGUgdmFsdWUgb2YgdGhlIGNvbnRyb2wuXG4gICAqIElmIHlvdSBkb24ndCBwcm92aWRlIHRoaXMgcHJvcCwgaXQgZmFsbHMgYmFjayB0byBhIHJhbmRvbWx5IGdlbmVyYXRlZCBuYW1lLlxuICAgKi9cbiAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gYSByYWRpbyBidXR0b24gaXMgc2VsZWN0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD59IGV2ZW50IFRoZSBldmVudCBzb3VyY2Ugb2YgdGhlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUgVGhlIHZhbHVlIG9mIHRoZSBzZWxlY3RlZCByYWRpbyBidXR0b24uXG4gICAqIFlvdSBjYW4gcHVsbCBvdXQgdGhlIG5ldyB2YWx1ZSBieSBhY2Nlc3NpbmcgYGV2ZW50LnRhcmdldC52YWx1ZWAgKHN0cmluZykuXG4gICAqL1xuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBWYWx1ZSBvZiB0aGUgc2VsZWN0ZWQgcmFkaW8gYnV0dG9uLiBUaGUgRE9NIEFQSSBjYXN0cyB0aGlzIHRvIGEgc3RyaW5nLlxuICAgKi9cbiAgdmFsdWU6IFByb3BUeXBlcy5hbnlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBSYWRpb0dyb3VwOyIsICJpbXBvcnQgeyBjcmVhdGVUaGVtZSB9IGZyb20gXCJAbXVpL21hdGVyaWFsXCI7XG5cbmV4cG9ydCBjb25zdCB0aGVtZSA9IGNyZWF0ZVRoZW1lKHtcbiAgcGFsZXR0ZToge1xuICAgIHByaW1hcnk6IHtcbiAgICAgIG1haW46IFwiIzAwODI3Y1wiLFxuICAgIH0sXG4gIH0sXG59KTtcbiIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBOb2RlKHtcbiAgZXhwYW5kYWJsZSxcbiAgZXhwYW5kZWQsXG4gIGhpZ2hsaWdodCxcbiAgaXNMYXN0LFxuICBjaGlsZHJlbixcbiAgb25DbGljayxcbn06IHtcbiAgZXhwYW5kYWJsZTogYm9vbGVhbjtcbiAgZXhwYW5kZWQ6IGJvb2xlYW47XG4gIGhpZ2hsaWdodDogYm9vbGVhbjtcbiAgaXNMYXN0OiBib29sZWFuO1xuICBjaGlsZHJlbjogYW55O1xuICBvbkNsaWNrOiAoKSA9PiB2b2lkO1xufSkge1xuICBjb25zdCBjbGFzc2VzOiBzdHJpbmdbXSA9IFtcImpzdHJlZS1ub2RlXCJdO1xuXG4gIGlmIChleHBhbmRlZCkge1xuICAgIGNsYXNzZXMucHVzaChcImpzdHJlZS1vcGVuXCIpO1xuICB9IGVsc2Uge1xuICAgIGNsYXNzZXMucHVzaChcImpzdHJlZS1jbG9zZWRcIik7XG4gIH1cblxuICBpZiAoIWV4cGFuZGFibGUpIHtcbiAgICBjbGFzc2VzLnB1c2goXCJqc3RyZWUtbGVhZlwiKTtcbiAgfVxuXG4gIGlmIChpc0xhc3QpIHtcbiAgICBjbGFzc2VzLnB1c2goXCJqc3RyZWUtbGFzdFwiKTtcbiAgfVxuXG4gIGlmIChoaWdobGlnaHQpIHtcbiAgICBjaGlsZHJlbiA9IDxzcGFuIGNsYXNzTmFtZT1cImpzdHJlZS1jbGlja2VkXCI+e2NoaWxkcmVufTwvc3Bhbj47XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxsaSByb2xlPVwidHJlZWl0ZW1cIiBjbGFzc05hbWU9e2NsYXNzZXMuam9pbihcIiBcIil9PlxuICAgICAgPGlcbiAgICAgICAgY2xhc3NOYW1lPVwianN0cmVlLWljb24ganN0cmVlLW9jbFwiXG4gICAgICAgIHJvbGU9XCJwcmVzZW50YXRpb25cIlxuICAgICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgLz5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2xpPlxuICApO1xufVxuIiwgImV4cG9ydCB2YXIgU3Vic2NyaWJhYmxlID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gU3Vic2NyaWJhYmxlKCkge1xuICAgIHRoaXMubGlzdGVuZXJzID0gW107XG4gIH1cblxuICB2YXIgX3Byb3RvID0gU3Vic2NyaWJhYmxlLnByb3RvdHlwZTtcblxuICBfcHJvdG8uc3Vic2NyaWJlID0gZnVuY3Rpb24gc3Vic2NyaWJlKGxpc3RlbmVyKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHZhciBjYWxsYmFjayA9IGxpc3RlbmVyIHx8IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfTtcblxuICAgIHRoaXMubGlzdGVuZXJzLnB1c2goY2FsbGJhY2spO1xuICAgIHRoaXMub25TdWJzY3JpYmUoKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMubGlzdGVuZXJzID0gX3RoaXMubGlzdGVuZXJzLmZpbHRlcihmdW5jdGlvbiAoeCkge1xuICAgICAgICByZXR1cm4geCAhPT0gY2FsbGJhY2s7XG4gICAgICB9KTtcblxuICAgICAgX3RoaXMub25VbnN1YnNjcmliZSgpO1xuICAgIH07XG4gIH07XG5cbiAgX3Byb3RvLmhhc0xpc3RlbmVycyA9IGZ1bmN0aW9uIGhhc0xpc3RlbmVycygpIHtcbiAgICByZXR1cm4gdGhpcy5saXN0ZW5lcnMubGVuZ3RoID4gMDtcbiAgfTtcblxuICBfcHJvdG8ub25TdWJzY3JpYmUgPSBmdW5jdGlvbiBvblN1YnNjcmliZSgpIHsvLyBEbyBub3RoaW5nXG4gIH07XG5cbiAgX3Byb3RvLm9uVW5zdWJzY3JpYmUgPSBmdW5jdGlvbiBvblVuc3Vic2NyaWJlKCkgey8vIERvIG5vdGhpbmdcbiAgfTtcblxuICByZXR1cm4gU3Vic2NyaWJhYmxlO1xufSgpOyIsICJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbi8vIFRZUEVTXG4vLyBVVElMU1xuZXhwb3J0IHZhciBpc1NlcnZlciA9IHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnO1xuZXhwb3J0IGZ1bmN0aW9uIG5vb3AoKSB7XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5leHBvcnQgZnVuY3Rpb24gZnVuY3Rpb25hbFVwZGF0ZSh1cGRhdGVyLCBpbnB1dCkge1xuICByZXR1cm4gdHlwZW9mIHVwZGF0ZXIgPT09ICdmdW5jdGlvbicgPyB1cGRhdGVyKGlucHV0KSA6IHVwZGF0ZXI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZFRpbWVvdXQodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgPj0gMCAmJiB2YWx1ZSAhPT0gSW5maW5pdHk7XG59XG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlUXVlcnlLZXlBcnJheSh2YWx1ZSkge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFt2YWx1ZV07XG59XG5leHBvcnQgZnVuY3Rpb24gZGlmZmVyZW5jZShhcnJheTEsIGFycmF5Mikge1xuICByZXR1cm4gYXJyYXkxLmZpbHRlcihmdW5jdGlvbiAoeCkge1xuICAgIHJldHVybiBhcnJheTIuaW5kZXhPZih4KSA9PT0gLTE7XG4gIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VBdChhcnJheSwgaW5kZXgsIHZhbHVlKSB7XG4gIHZhciBjb3B5ID0gYXJyYXkuc2xpY2UoMCk7XG4gIGNvcHlbaW5kZXhdID0gdmFsdWU7XG4gIHJldHVybiBjb3B5O1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRpbWVVbnRpbFN0YWxlKHVwZGF0ZWRBdCwgc3RhbGVUaW1lKSB7XG4gIHJldHVybiBNYXRoLm1heCh1cGRhdGVkQXQgKyAoc3RhbGVUaW1lIHx8IDApIC0gRGF0ZS5ub3coKSwgMCk7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VRdWVyeUFyZ3MoYXJnMSwgYXJnMiwgYXJnMykge1xuICBpZiAoIWlzUXVlcnlLZXkoYXJnMSkpIHtcbiAgICByZXR1cm4gYXJnMTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgYXJnMiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgYXJnMywge1xuICAgICAgcXVlcnlLZXk6IGFyZzEsXG4gICAgICBxdWVyeUZuOiBhcmcyXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gX2V4dGVuZHMoe30sIGFyZzIsIHtcbiAgICBxdWVyeUtleTogYXJnMVxuICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU11dGF0aW9uQXJncyhhcmcxLCBhcmcyLCBhcmczKSB7XG4gIGlmIChpc1F1ZXJ5S2V5KGFyZzEpKSB7XG4gICAgaWYgKHR5cGVvZiBhcmcyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gX2V4dGVuZHMoe30sIGFyZzMsIHtcbiAgICAgICAgbXV0YXRpb25LZXk6IGFyZzEsXG4gICAgICAgIG11dGF0aW9uRm46IGFyZzJcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgYXJnMiwge1xuICAgICAgbXV0YXRpb25LZXk6IGFyZzFcbiAgICB9KTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgYXJnMSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgYXJnMiwge1xuICAgICAgbXV0YXRpb25GbjogYXJnMVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBhcmcxKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUZpbHRlckFyZ3MoYXJnMSwgYXJnMiwgYXJnMykge1xuICByZXR1cm4gaXNRdWVyeUtleShhcmcxKSA/IFtfZXh0ZW5kcyh7fSwgYXJnMiwge1xuICAgIHF1ZXJ5S2V5OiBhcmcxXG4gIH0pLCBhcmczXSA6IFthcmcxIHx8IHt9LCBhcmcyXTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU11dGF0aW9uRmlsdGVyQXJncyhhcmcxLCBhcmcyKSB7XG4gIHJldHVybiBpc1F1ZXJ5S2V5KGFyZzEpID8gX2V4dGVuZHMoe30sIGFyZzIsIHtcbiAgICBtdXRhdGlvbktleTogYXJnMVxuICB9KSA6IGFyZzE7XG59XG5leHBvcnQgZnVuY3Rpb24gbWFwUXVlcnlTdGF0dXNGaWx0ZXIoYWN0aXZlLCBpbmFjdGl2ZSkge1xuICBpZiAoYWN0aXZlID09PSB0cnVlICYmIGluYWN0aXZlID09PSB0cnVlIHx8IGFjdGl2ZSA9PSBudWxsICYmIGluYWN0aXZlID09IG51bGwpIHtcbiAgICByZXR1cm4gJ2FsbCc7XG4gIH0gZWxzZSBpZiAoYWN0aXZlID09PSBmYWxzZSAmJiBpbmFjdGl2ZSA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gJ25vbmUnO1xuICB9IGVsc2Uge1xuICAgIC8vIEF0IHRoaXMgcG9pbnQsIGFjdGl2ZXxpbmFjdGl2ZSBjYW4gb25seSBiZSB0cnVlfGZhbHNlIG9yIGZhbHNlfHRydWVcbiAgICAvLyBzbywgd2hlbiBvbmx5IG9uZSB2YWx1ZSBpcyBwcm92aWRlZCwgdGhlIG1pc3Npbmcgb25lIGhhcyB0byBiZSB0aGUgbmVnYXRlZCB2YWx1ZVxuICAgIHZhciBpc0FjdGl2ZSA9IGFjdGl2ZSAhPSBudWxsID8gYWN0aXZlIDogIWluYWN0aXZlO1xuICAgIHJldHVybiBpc0FjdGl2ZSA/ICdhY3RpdmUnIDogJ2luYWN0aXZlJztcbiAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoUXVlcnkoZmlsdGVycywgcXVlcnkpIHtcbiAgdmFyIGFjdGl2ZSA9IGZpbHRlcnMuYWN0aXZlLFxuICAgICAgZXhhY3QgPSBmaWx0ZXJzLmV4YWN0LFxuICAgICAgZmV0Y2hpbmcgPSBmaWx0ZXJzLmZldGNoaW5nLFxuICAgICAgaW5hY3RpdmUgPSBmaWx0ZXJzLmluYWN0aXZlLFxuICAgICAgcHJlZGljYXRlID0gZmlsdGVycy5wcmVkaWNhdGUsXG4gICAgICBxdWVyeUtleSA9IGZpbHRlcnMucXVlcnlLZXksXG4gICAgICBzdGFsZSA9IGZpbHRlcnMuc3RhbGU7XG5cbiAgaWYgKGlzUXVlcnlLZXkocXVlcnlLZXkpKSB7XG4gICAgaWYgKGV4YWN0KSB7XG4gICAgICBpZiAocXVlcnkucXVlcnlIYXNoICE9PSBoYXNoUXVlcnlLZXlCeU9wdGlvbnMocXVlcnlLZXksIHF1ZXJ5Lm9wdGlvbnMpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFwYXJ0aWFsTWF0Y2hLZXkocXVlcnkucXVlcnlLZXksIHF1ZXJ5S2V5KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHZhciBxdWVyeVN0YXR1c0ZpbHRlciA9IG1hcFF1ZXJ5U3RhdHVzRmlsdGVyKGFjdGl2ZSwgaW5hY3RpdmUpO1xuXG4gIGlmIChxdWVyeVN0YXR1c0ZpbHRlciA9PT0gJ25vbmUnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGVsc2UgaWYgKHF1ZXJ5U3RhdHVzRmlsdGVyICE9PSAnYWxsJykge1xuICAgIHZhciBpc0FjdGl2ZSA9IHF1ZXJ5LmlzQWN0aXZlKCk7XG5cbiAgICBpZiAocXVlcnlTdGF0dXNGaWx0ZXIgPT09ICdhY3RpdmUnICYmICFpc0FjdGl2ZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChxdWVyeVN0YXR1c0ZpbHRlciA9PT0gJ2luYWN0aXZlJyAmJiBpc0FjdGl2ZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2Ygc3RhbGUgPT09ICdib29sZWFuJyAmJiBxdWVyeS5pc1N0YWxlKCkgIT09IHN0YWxlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBmZXRjaGluZyA9PT0gJ2Jvb2xlYW4nICYmIHF1ZXJ5LmlzRmV0Y2hpbmcoKSAhPT0gZmV0Y2hpbmcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAocHJlZGljYXRlICYmICFwcmVkaWNhdGUocXVlcnkpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5leHBvcnQgZnVuY3Rpb24gbWF0Y2hNdXRhdGlvbihmaWx0ZXJzLCBtdXRhdGlvbikge1xuICB2YXIgZXhhY3QgPSBmaWx0ZXJzLmV4YWN0LFxuICAgICAgZmV0Y2hpbmcgPSBmaWx0ZXJzLmZldGNoaW5nLFxuICAgICAgcHJlZGljYXRlID0gZmlsdGVycy5wcmVkaWNhdGUsXG4gICAgICBtdXRhdGlvbktleSA9IGZpbHRlcnMubXV0YXRpb25LZXk7XG5cbiAgaWYgKGlzUXVlcnlLZXkobXV0YXRpb25LZXkpKSB7XG4gICAgaWYgKCFtdXRhdGlvbi5vcHRpb25zLm11dGF0aW9uS2V5KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKGV4YWN0KSB7XG4gICAgICBpZiAoaGFzaFF1ZXJ5S2V5KG11dGF0aW9uLm9wdGlvbnMubXV0YXRpb25LZXkpICE9PSBoYXNoUXVlcnlLZXkobXV0YXRpb25LZXkpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFwYXJ0aWFsTWF0Y2hLZXkobXV0YXRpb24ub3B0aW9ucy5tdXRhdGlvbktleSwgbXV0YXRpb25LZXkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiBmZXRjaGluZyA9PT0gJ2Jvb2xlYW4nICYmIG11dGF0aW9uLnN0YXRlLnN0YXR1cyA9PT0gJ2xvYWRpbmcnICE9PSBmZXRjaGluZykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChwcmVkaWNhdGUgJiYgIXByZWRpY2F0ZShtdXRhdGlvbikpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBoYXNoUXVlcnlLZXlCeU9wdGlvbnMocXVlcnlLZXksIG9wdGlvbnMpIHtcbiAgdmFyIGhhc2hGbiA9IChvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLnF1ZXJ5S2V5SGFzaEZuKSB8fCBoYXNoUXVlcnlLZXk7XG4gIHJldHVybiBoYXNoRm4ocXVlcnlLZXkpO1xufVxuLyoqXG4gKiBEZWZhdWx0IHF1ZXJ5IGtleXMgaGFzaCBmdW5jdGlvbi5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaGFzaFF1ZXJ5S2V5KHF1ZXJ5S2V5KSB7XG4gIHZhciBhc0FycmF5ID0gZW5zdXJlUXVlcnlLZXlBcnJheShxdWVyeUtleSk7XG4gIHJldHVybiBzdGFibGVWYWx1ZUhhc2goYXNBcnJheSk7XG59XG4vKipcbiAqIEhhc2hlcyB0aGUgdmFsdWUgaW50byBhIHN0YWJsZSBoYXNoLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzdGFibGVWYWx1ZUhhc2godmFsdWUpIHtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlLCBmdW5jdGlvbiAoXywgdmFsKSB7XG4gICAgcmV0dXJuIGlzUGxhaW5PYmplY3QodmFsKSA/IE9iamVjdC5rZXlzKHZhbCkuc29ydCgpLnJlZHVjZShmdW5jdGlvbiAocmVzdWx0LCBrZXkpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gdmFsW2tleV07XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sIHt9KSA6IHZhbDtcbiAgfSk7XG59XG4vKipcbiAqIENoZWNrcyBpZiBrZXkgYGJgIHBhcnRpYWxseSBtYXRjaGVzIHdpdGgga2V5IGBhYC5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcGFydGlhbE1hdGNoS2V5KGEsIGIpIHtcbiAgcmV0dXJuIHBhcnRpYWxEZWVwRXF1YWwoZW5zdXJlUXVlcnlLZXlBcnJheShhKSwgZW5zdXJlUXVlcnlLZXlBcnJheShiKSk7XG59XG4vKipcbiAqIENoZWNrcyBpZiBgYmAgcGFydGlhbGx5IG1hdGNoZXMgd2l0aCBgYWAuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnRpYWxEZWVwRXF1YWwoYSwgYikge1xuICBpZiAoYSA9PT0gYikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBhICE9PSB0eXBlb2YgYikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChhICYmIGIgJiYgdHlwZW9mIGEgPT09ICdvYmplY3QnICYmIHR5cGVvZiBiID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiAhT2JqZWN0LmtleXMoYikuc29tZShmdW5jdGlvbiAoa2V5KSB7XG4gICAgICByZXR1cm4gIXBhcnRpYWxEZWVwRXF1YWwoYVtrZXldLCBiW2tleV0pO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYGFgIGlmIGBiYCBpcyBkZWVwbHkgZXF1YWwuXG4gKiBJZiBub3QsIGl0IHdpbGwgcmVwbGFjZSBhbnkgZGVlcGx5IGVxdWFsIGNoaWxkcmVuIG9mIGBiYCB3aXRoIHRob3NlIG9mIGBhYC5cbiAqIFRoaXMgY2FuIGJlIHVzZWQgZm9yIHN0cnVjdHVyYWwgc2hhcmluZyBiZXR3ZWVuIEpTT04gdmFsdWVzIGZvciBleGFtcGxlLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlRXF1YWxEZWVwKGEsIGIpIHtcbiAgaWYgKGEgPT09IGIpIHtcbiAgICByZXR1cm4gYTtcbiAgfVxuXG4gIHZhciBhcnJheSA9IEFycmF5LmlzQXJyYXkoYSkgJiYgQXJyYXkuaXNBcnJheShiKTtcblxuICBpZiAoYXJyYXkgfHwgaXNQbGFpbk9iamVjdChhKSAmJiBpc1BsYWluT2JqZWN0KGIpKSB7XG4gICAgdmFyIGFTaXplID0gYXJyYXkgPyBhLmxlbmd0aCA6IE9iamVjdC5rZXlzKGEpLmxlbmd0aDtcbiAgICB2YXIgYkl0ZW1zID0gYXJyYXkgPyBiIDogT2JqZWN0LmtleXMoYik7XG4gICAgdmFyIGJTaXplID0gYkl0ZW1zLmxlbmd0aDtcbiAgICB2YXIgY29weSA9IGFycmF5ID8gW10gOiB7fTtcbiAgICB2YXIgZXF1YWxJdGVtcyA9IDA7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJTaXplOyBpKyspIHtcbiAgICAgIHZhciBrZXkgPSBhcnJheSA/IGkgOiBiSXRlbXNbaV07XG4gICAgICBjb3B5W2tleV0gPSByZXBsYWNlRXF1YWxEZWVwKGFba2V5XSwgYltrZXldKTtcblxuICAgICAgaWYgKGNvcHlba2V5XSA9PT0gYVtrZXldKSB7XG4gICAgICAgIGVxdWFsSXRlbXMrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYVNpemUgPT09IGJTaXplICYmIGVxdWFsSXRlbXMgPT09IGFTaXplID8gYSA6IGNvcHk7XG4gIH1cblxuICByZXR1cm4gYjtcbn1cbi8qKlxuICogU2hhbGxvdyBjb21wYXJlIG9iamVjdHMuIE9ubHkgd29ya3Mgd2l0aCBvYmplY3RzIHRoYXQgYWx3YXlzIGhhdmUgdGhlIHNhbWUgcHJvcGVydGllcy5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc2hhbGxvd0VxdWFsT2JqZWN0cyhhLCBiKSB7XG4gIGlmIChhICYmICFiIHx8IGIgJiYgIWEpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmb3IgKHZhciBrZXkgaW4gYSkge1xuICAgIGlmIChhW2tleV0gIT09IGJba2V5XSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufSAvLyBDb3BpZWQgZnJvbTogaHR0cHM6Ly9naXRodWIuY29tL2pvbnNjaGxpbmtlcnQvaXMtcGxhaW4tb2JqZWN0XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1BsYWluT2JqZWN0KG8pIHtcbiAgaWYgKCFoYXNPYmplY3RQcm90b3R5cGUobykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gLy8gSWYgaGFzIG1vZGlmaWVkIGNvbnN0cnVjdG9yXG5cblxuICB2YXIgY3RvciA9IG8uY29uc3RydWN0b3I7XG5cbiAgaWYgKHR5cGVvZiBjdG9yID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9IC8vIElmIGhhcyBtb2RpZmllZCBwcm90b3R5cGVcblxuXG4gIHZhciBwcm90ID0gY3Rvci5wcm90b3R5cGU7XG5cbiAgaWYgKCFoYXNPYmplY3RQcm90b3R5cGUocHJvdCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gLy8gSWYgY29uc3RydWN0b3IgZG9lcyBub3QgaGF2ZSBhbiBPYmplY3Qtc3BlY2lmaWMgbWV0aG9kXG5cblxuICBpZiAoIXByb3QuaGFzT3duUHJvcGVydHkoJ2lzUHJvdG90eXBlT2YnKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSAvLyBNb3N0IGxpa2VseSBhIHBsYWluIE9iamVjdFxuXG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGhhc09iamVjdFByb3RvdHlwZShvKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykgPT09ICdbb2JqZWN0IE9iamVjdF0nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNRdWVyeUtleSh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fCBBcnJheS5pc0FycmF5KHZhbHVlKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0Vycm9yKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIEVycm9yO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHNsZWVwKHRpbWVvdXQpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgc2V0VGltZW91dChyZXNvbHZlLCB0aW1lb3V0KTtcbiAgfSk7XG59XG4vKipcbiAqIFNjaGVkdWxlcyBhIG1pY3JvdGFzay5cbiAqIFRoaXMgY2FuIGJlIHVzZWZ1bCB0byBzY2hlZHVsZSBzdGF0ZSB1cGRhdGVzIGFmdGVyIHJlbmRlcmluZy5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc2NoZWR1bGVNaWNyb3Rhc2soY2FsbGJhY2spIHtcbiAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbihjYWxsYmFjaykuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSk7XG4gIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldEFib3J0Q29udHJvbGxlcigpIHtcbiAgaWYgKHR5cGVvZiBBYm9ydENvbnRyb2xsZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICB9XG59IiwgImltcG9ydCBfaW5oZXJpdHNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZVwiO1xuaW1wb3J0IHsgU3Vic2NyaWJhYmxlIH0gZnJvbSAnLi9zdWJzY3JpYmFibGUnO1xuaW1wb3J0IHsgaXNTZXJ2ZXIgfSBmcm9tICcuL3V0aWxzJztcbmV4cG9ydCB2YXIgRm9jdXNNYW5hZ2VyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfU3Vic2NyaWJhYmxlKSB7XG4gIF9pbmhlcml0c0xvb3NlKEZvY3VzTWFuYWdlciwgX1N1YnNjcmliYWJsZSk7XG5cbiAgZnVuY3Rpb24gRm9jdXNNYW5hZ2VyKCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF90aGlzID0gX1N1YnNjcmliYWJsZS5jYWxsKHRoaXMpIHx8IHRoaXM7XG5cbiAgICBfdGhpcy5zZXR1cCA9IGZ1bmN0aW9uIChvbkZvY3VzKSB7XG4gICAgICB2YXIgX3dpbmRvdztcblxuICAgICAgaWYgKCFpc1NlcnZlciAmJiAoKF93aW5kb3cgPSB3aW5kb3cpID09IG51bGwgPyB2b2lkIDAgOiBfd2luZG93LmFkZEV2ZW50TGlzdGVuZXIpKSB7XG4gICAgICAgIHZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uIGxpc3RlbmVyKCkge1xuICAgICAgICAgIHJldHVybiBvbkZvY3VzKCk7XG4gICAgICAgIH07IC8vIExpc3RlbiB0byB2aXNpYmlsbGl0eWNoYW5nZSBhbmQgZm9jdXNcblxuXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgbGlzdGVuZXIsIGZhbHNlKTtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgbGlzdGVuZXIsIGZhbHNlKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAvLyBCZSBzdXJlIHRvIHVuc3Vic2NyaWJlIGlmIGEgbmV3IGhhbmRsZXIgaXMgc2V0XG4gICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCBsaXN0ZW5lcik7XG4gICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgbGlzdGVuZXIpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gRm9jdXNNYW5hZ2VyLnByb3RvdHlwZTtcblxuICBfcHJvdG8ub25TdWJzY3JpYmUgPSBmdW5jdGlvbiBvblN1YnNjcmliZSgpIHtcbiAgICBpZiAoIXRoaXMuY2xlYW51cCkge1xuICAgICAgdGhpcy5zZXRFdmVudExpc3RlbmVyKHRoaXMuc2V0dXApO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ub25VbnN1YnNjcmliZSA9IGZ1bmN0aW9uIG9uVW5zdWJzY3JpYmUoKSB7XG4gICAgaWYgKCF0aGlzLmhhc0xpc3RlbmVycygpKSB7XG4gICAgICB2YXIgX3RoaXMkY2xlYW51cDtcblxuICAgICAgKF90aGlzJGNsZWFudXAgPSB0aGlzLmNsZWFudXApID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRjbGVhbnVwLmNhbGwodGhpcyk7XG4gICAgICB0aGlzLmNsZWFudXAgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5zZXRFdmVudExpc3RlbmVyID0gZnVuY3Rpb24gc2V0RXZlbnRMaXN0ZW5lcihzZXR1cCkge1xuICAgIHZhciBfdGhpcyRjbGVhbnVwMixcbiAgICAgICAgX3RoaXMyID0gdGhpcztcblxuICAgIHRoaXMuc2V0dXAgPSBzZXR1cDtcbiAgICAoX3RoaXMkY2xlYW51cDIgPSB0aGlzLmNsZWFudXApID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRjbGVhbnVwMi5jYWxsKHRoaXMpO1xuICAgIHRoaXMuY2xlYW51cCA9IHNldHVwKGZ1bmN0aW9uIChmb2N1c2VkKSB7XG4gICAgICBpZiAodHlwZW9mIGZvY3VzZWQgPT09ICdib29sZWFuJykge1xuICAgICAgICBfdGhpczIuc2V0Rm9jdXNlZChmb2N1c2VkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIF90aGlzMi5vbkZvY3VzKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLnNldEZvY3VzZWQgPSBmdW5jdGlvbiBzZXRGb2N1c2VkKGZvY3VzZWQpIHtcbiAgICB0aGlzLmZvY3VzZWQgPSBmb2N1c2VkO1xuXG4gICAgaWYgKGZvY3VzZWQpIHtcbiAgICAgIHRoaXMub25Gb2N1cygpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ub25Gb2N1cyA9IGZ1bmN0aW9uIG9uRm9jdXMoKSB7XG4gICAgdGhpcy5saXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbiAobGlzdGVuZXIpIHtcbiAgICAgIGxpc3RlbmVyKCk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmlzRm9jdXNlZCA9IGZ1bmN0aW9uIGlzRm9jdXNlZCgpIHtcbiAgICBpZiAodHlwZW9mIHRoaXMuZm9jdXNlZCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICByZXR1cm4gdGhpcy5mb2N1c2VkO1xuICAgIH0gLy8gZG9jdW1lbnQgZ2xvYmFsIGNhbiBiZSB1bmF2YWlsYWJsZSBpbiByZWFjdCBuYXRpdmVcblxuXG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBbdW5kZWZpbmVkLCAndmlzaWJsZScsICdwcmVyZW5kZXInXS5pbmNsdWRlcyhkb2N1bWVudC52aXNpYmlsaXR5U3RhdGUpO1xuICB9O1xuXG4gIHJldHVybiBGb2N1c01hbmFnZXI7XG59KFN1YnNjcmliYWJsZSk7XG5leHBvcnQgdmFyIGZvY3VzTWFuYWdlciA9IG5ldyBGb2N1c01hbmFnZXIoKTsiLCAiaW1wb3J0IF9pbmhlcml0c0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlXCI7XG5pbXBvcnQgeyBTdWJzY3JpYmFibGUgfSBmcm9tICcuL3N1YnNjcmliYWJsZSc7XG5pbXBvcnQgeyBpc1NlcnZlciB9IGZyb20gJy4vdXRpbHMnO1xuZXhwb3J0IHZhciBPbmxpbmVNYW5hZ2VyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfU3Vic2NyaWJhYmxlKSB7XG4gIF9pbmhlcml0c0xvb3NlKE9ubGluZU1hbmFnZXIsIF9TdWJzY3JpYmFibGUpO1xuXG4gIGZ1bmN0aW9uIE9ubGluZU1hbmFnZXIoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX3RoaXMgPSBfU3Vic2NyaWJhYmxlLmNhbGwodGhpcykgfHwgdGhpcztcblxuICAgIF90aGlzLnNldHVwID0gZnVuY3Rpb24gKG9uT25saW5lKSB7XG4gICAgICB2YXIgX3dpbmRvdztcblxuICAgICAgaWYgKCFpc1NlcnZlciAmJiAoKF93aW5kb3cgPSB3aW5kb3cpID09IG51bGwgPyB2b2lkIDAgOiBfd2luZG93LmFkZEV2ZW50TGlzdGVuZXIpKSB7XG4gICAgICAgIHZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uIGxpc3RlbmVyKCkge1xuICAgICAgICAgIHJldHVybiBvbk9ubGluZSgpO1xuICAgICAgICB9OyAvLyBMaXN0ZW4gdG8gb25saW5lXG5cblxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignb25saW5lJywgbGlzdGVuZXIsIGZhbHNlKTtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ29mZmxpbmUnLCBsaXN0ZW5lciwgZmFsc2UpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIC8vIEJlIHN1cmUgdG8gdW5zdWJzY3JpYmUgaWYgYSBuZXcgaGFuZGxlciBpcyBzZXRcbiAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignb25saW5lJywgbGlzdGVuZXIpO1xuICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdvZmZsaW5lJywgbGlzdGVuZXIpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gT25saW5lTWFuYWdlci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLm9uU3Vic2NyaWJlID0gZnVuY3Rpb24gb25TdWJzY3JpYmUoKSB7XG4gICAgaWYgKCF0aGlzLmNsZWFudXApIHtcbiAgICAgIHRoaXMuc2V0RXZlbnRMaXN0ZW5lcih0aGlzLnNldHVwKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLm9uVW5zdWJzY3JpYmUgPSBmdW5jdGlvbiBvblVuc3Vic2NyaWJlKCkge1xuICAgIGlmICghdGhpcy5oYXNMaXN0ZW5lcnMoKSkge1xuICAgICAgdmFyIF90aGlzJGNsZWFudXA7XG5cbiAgICAgIChfdGhpcyRjbGVhbnVwID0gdGhpcy5jbGVhbnVwKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkY2xlYW51cC5jYWxsKHRoaXMpO1xuICAgICAgdGhpcy5jbGVhbnVwID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uc2V0RXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uIHNldEV2ZW50TGlzdGVuZXIoc2V0dXApIHtcbiAgICB2YXIgX3RoaXMkY2xlYW51cDIsXG4gICAgICAgIF90aGlzMiA9IHRoaXM7XG5cbiAgICB0aGlzLnNldHVwID0gc2V0dXA7XG4gICAgKF90aGlzJGNsZWFudXAyID0gdGhpcy5jbGVhbnVwKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkY2xlYW51cDIuY2FsbCh0aGlzKTtcbiAgICB0aGlzLmNsZWFudXAgPSBzZXR1cChmdW5jdGlvbiAob25saW5lKSB7XG4gICAgICBpZiAodHlwZW9mIG9ubGluZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIF90aGlzMi5zZXRPbmxpbmUob25saW5lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIF90aGlzMi5vbk9ubGluZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5zZXRPbmxpbmUgPSBmdW5jdGlvbiBzZXRPbmxpbmUob25saW5lKSB7XG4gICAgdGhpcy5vbmxpbmUgPSBvbmxpbmU7XG5cbiAgICBpZiAob25saW5lKSB7XG4gICAgICB0aGlzLm9uT25saW5lKCk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5vbk9ubGluZSA9IGZ1bmN0aW9uIG9uT25saW5lKCkge1xuICAgIHRoaXMubGlzdGVuZXJzLmZvckVhY2goZnVuY3Rpb24gKGxpc3RlbmVyKSB7XG4gICAgICBsaXN0ZW5lcigpO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5pc09ubGluZSA9IGZ1bmN0aW9uIGlzT25saW5lKCkge1xuICAgIGlmICh0eXBlb2YgdGhpcy5vbmxpbmUgPT09ICdib29sZWFuJykge1xuICAgICAgcmV0dXJuIHRoaXMub25saW5lO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbmF2aWdhdG9yID09PSAndW5kZWZpbmVkJyB8fCB0eXBlb2YgbmF2aWdhdG9yLm9uTGluZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBuYXZpZ2F0b3Iub25MaW5lO1xuICB9O1xuXG4gIHJldHVybiBPbmxpbmVNYW5hZ2VyO1xufShTdWJzY3JpYmFibGUpO1xuZXhwb3J0IHZhciBvbmxpbmVNYW5hZ2VyID0gbmV3IE9ubGluZU1hbmFnZXIoKTsiLCAiaW1wb3J0IHsgZm9jdXNNYW5hZ2VyIH0gZnJvbSAnLi9mb2N1c01hbmFnZXInO1xuaW1wb3J0IHsgb25saW5lTWFuYWdlciB9IGZyb20gJy4vb25saW5lTWFuYWdlcic7XG5pbXBvcnQgeyBzbGVlcCB9IGZyb20gJy4vdXRpbHMnO1xuXG5mdW5jdGlvbiBkZWZhdWx0UmV0cnlEZWxheShmYWlsdXJlQ291bnQpIHtcbiAgcmV0dXJuIE1hdGgubWluKDEwMDAgKiBNYXRoLnBvdygyLCBmYWlsdXJlQ291bnQpLCAzMDAwMCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NhbmNlbGFibGUodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiAodmFsdWUgPT0gbnVsbCA/IHZvaWQgMCA6IHZhbHVlLmNhbmNlbCkgPT09ICdmdW5jdGlvbic7XG59XG5leHBvcnQgdmFyIENhbmNlbGxlZEVycm9yID0gZnVuY3Rpb24gQ2FuY2VsbGVkRXJyb3Iob3B0aW9ucykge1xuICB0aGlzLnJldmVydCA9IG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMucmV2ZXJ0O1xuICB0aGlzLnNpbGVudCA9IG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMuc2lsZW50O1xufTtcbmV4cG9ydCBmdW5jdGlvbiBpc0NhbmNlbGxlZEVycm9yKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIENhbmNlbGxlZEVycm9yO1xufSAvLyBDTEFTU1xuXG5leHBvcnQgdmFyIFJldHJ5ZXIgPSBmdW5jdGlvbiBSZXRyeWVyKGNvbmZpZykge1xuICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gIHZhciBjYW5jZWxSZXRyeSA9IGZhbHNlO1xuICB2YXIgY2FuY2VsRm47XG4gIHZhciBjb250aW51ZUZuO1xuICB2YXIgcHJvbWlzZVJlc29sdmU7XG4gIHZhciBwcm9taXNlUmVqZWN0O1xuICB0aGlzLmFib3J0ID0gY29uZmlnLmFib3J0O1xuXG4gIHRoaXMuY2FuY2VsID0gZnVuY3Rpb24gKGNhbmNlbE9wdGlvbnMpIHtcbiAgICByZXR1cm4gY2FuY2VsRm4gPT0gbnVsbCA/IHZvaWQgMCA6IGNhbmNlbEZuKGNhbmNlbE9wdGlvbnMpO1xuICB9O1xuXG4gIHRoaXMuY2FuY2VsUmV0cnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgY2FuY2VsUmV0cnkgPSB0cnVlO1xuICB9O1xuXG4gIHRoaXMuY29udGludWVSZXRyeSA9IGZ1bmN0aW9uICgpIHtcbiAgICBjYW5jZWxSZXRyeSA9IGZhbHNlO1xuICB9O1xuXG4gIHRoaXMuY29udGludWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGNvbnRpbnVlRm4gPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRpbnVlRm4oKTtcbiAgfTtcblxuICB0aGlzLmZhaWx1cmVDb3VudCA9IDA7XG4gIHRoaXMuaXNQYXVzZWQgPSBmYWxzZTtcbiAgdGhpcy5pc1Jlc29sdmVkID0gZmFsc2U7XG4gIHRoaXMuaXNUcmFuc3BvcnRDYW5jZWxhYmxlID0gZmFsc2U7XG4gIHRoaXMucHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChvdXRlclJlc29sdmUsIG91dGVyUmVqZWN0KSB7XG4gICAgcHJvbWlzZVJlc29sdmUgPSBvdXRlclJlc29sdmU7XG4gICAgcHJvbWlzZVJlamVjdCA9IG91dGVyUmVqZWN0O1xuICB9KTtcblxuICB2YXIgcmVzb2x2ZSA9IGZ1bmN0aW9uIHJlc29sdmUodmFsdWUpIHtcbiAgICBpZiAoIV90aGlzLmlzUmVzb2x2ZWQpIHtcbiAgICAgIF90aGlzLmlzUmVzb2x2ZWQgPSB0cnVlO1xuICAgICAgY29uZmlnLm9uU3VjY2VzcyA9PSBudWxsID8gdm9pZCAwIDogY29uZmlnLm9uU3VjY2Vzcyh2YWx1ZSk7XG4gICAgICBjb250aW51ZUZuID09IG51bGwgPyB2b2lkIDAgOiBjb250aW51ZUZuKCk7XG4gICAgICBwcm9taXNlUmVzb2x2ZSh2YWx1ZSk7XG4gICAgfVxuICB9O1xuXG4gIHZhciByZWplY3QgPSBmdW5jdGlvbiByZWplY3QodmFsdWUpIHtcbiAgICBpZiAoIV90aGlzLmlzUmVzb2x2ZWQpIHtcbiAgICAgIF90aGlzLmlzUmVzb2x2ZWQgPSB0cnVlO1xuICAgICAgY29uZmlnLm9uRXJyb3IgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbmZpZy5vbkVycm9yKHZhbHVlKTtcbiAgICAgIGNvbnRpbnVlRm4gPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRpbnVlRm4oKTtcbiAgICAgIHByb21pc2VSZWplY3QodmFsdWUpO1xuICAgIH1cbiAgfTtcblxuICB2YXIgcGF1c2UgPSBmdW5jdGlvbiBwYXVzZSgpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGNvbnRpbnVlUmVzb2x2ZSkge1xuICAgICAgY29udGludWVGbiA9IGNvbnRpbnVlUmVzb2x2ZTtcbiAgICAgIF90aGlzLmlzUGF1c2VkID0gdHJ1ZTtcbiAgICAgIGNvbmZpZy5vblBhdXNlID09IG51bGwgPyB2b2lkIDAgOiBjb25maWcub25QYXVzZSgpO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgY29udGludWVGbiA9IHVuZGVmaW5lZDtcbiAgICAgIF90aGlzLmlzUGF1c2VkID0gZmFsc2U7XG4gICAgICBjb25maWcub25Db250aW51ZSA9PSBudWxsID8gdm9pZCAwIDogY29uZmlnLm9uQ29udGludWUoKTtcbiAgICB9KTtcbiAgfTsgLy8gQ3JlYXRlIGxvb3AgZnVuY3Rpb25cblxuXG4gIHZhciBydW4gPSBmdW5jdGlvbiBydW4oKSB7XG4gICAgLy8gRG8gbm90aGluZyBpZiBhbHJlYWR5IHJlc29sdmVkXG4gICAgaWYgKF90aGlzLmlzUmVzb2x2ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgcHJvbWlzZU9yVmFsdWU7IC8vIEV4ZWN1dGUgcXVlcnlcblxuICAgIHRyeSB7XG4gICAgICBwcm9taXNlT3JWYWx1ZSA9IGNvbmZpZy5mbigpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBwcm9taXNlT3JWYWx1ZSA9IFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgICB9IC8vIENyZWF0ZSBjYWxsYmFjayB0byBjYW5jZWwgdGhpcyBmZXRjaFxuXG5cbiAgICBjYW5jZWxGbiA9IGZ1bmN0aW9uIGNhbmNlbEZuKGNhbmNlbE9wdGlvbnMpIHtcbiAgICAgIGlmICghX3RoaXMuaXNSZXNvbHZlZCkge1xuICAgICAgICByZWplY3QobmV3IENhbmNlbGxlZEVycm9yKGNhbmNlbE9wdGlvbnMpKTtcbiAgICAgICAgX3RoaXMuYWJvcnQgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzLmFib3J0KCk7IC8vIENhbmNlbCB0cmFuc3BvcnQgaWYgc3VwcG9ydGVkXG5cbiAgICAgICAgaWYgKGlzQ2FuY2VsYWJsZShwcm9taXNlT3JWYWx1ZSkpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcHJvbWlzZU9yVmFsdWUuY2FuY2VsKCk7XG4gICAgICAgICAgfSBjYXRjaCAoX3VudXNlZCkge31cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07IC8vIENoZWNrIGlmIHRoZSB0cmFuc3BvcnQgbGF5ZXIgc3VwcG9ydCBjYW5jZWxsYXRpb25cblxuXG4gICAgX3RoaXMuaXNUcmFuc3BvcnRDYW5jZWxhYmxlID0gaXNDYW5jZWxhYmxlKHByb21pc2VPclZhbHVlKTtcbiAgICBQcm9taXNlLnJlc29sdmUocHJvbWlzZU9yVmFsdWUpLnRoZW4ocmVzb2x2ZSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICB2YXIgX2NvbmZpZyRyZXRyeSwgX2NvbmZpZyRyZXRyeURlbGF5O1xuXG4gICAgICAvLyBTdG9wIGlmIHRoZSBmZXRjaCBpcyBhbHJlYWR5IHJlc29sdmVkXG4gICAgICBpZiAoX3RoaXMuaXNSZXNvbHZlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9IC8vIERvIHdlIG5lZWQgdG8gcmV0cnkgdGhlIHJlcXVlc3Q/XG5cblxuICAgICAgdmFyIHJldHJ5ID0gKF9jb25maWckcmV0cnkgPSBjb25maWcucmV0cnkpICE9IG51bGwgPyBfY29uZmlnJHJldHJ5IDogMztcbiAgICAgIHZhciByZXRyeURlbGF5ID0gKF9jb25maWckcmV0cnlEZWxheSA9IGNvbmZpZy5yZXRyeURlbGF5KSAhPSBudWxsID8gX2NvbmZpZyRyZXRyeURlbGF5IDogZGVmYXVsdFJldHJ5RGVsYXk7XG4gICAgICB2YXIgZGVsYXkgPSB0eXBlb2YgcmV0cnlEZWxheSA9PT0gJ2Z1bmN0aW9uJyA/IHJldHJ5RGVsYXkoX3RoaXMuZmFpbHVyZUNvdW50LCBlcnJvcikgOiByZXRyeURlbGF5O1xuICAgICAgdmFyIHNob3VsZFJldHJ5ID0gcmV0cnkgPT09IHRydWUgfHwgdHlwZW9mIHJldHJ5ID09PSAnbnVtYmVyJyAmJiBfdGhpcy5mYWlsdXJlQ291bnQgPCByZXRyeSB8fCB0eXBlb2YgcmV0cnkgPT09ICdmdW5jdGlvbicgJiYgcmV0cnkoX3RoaXMuZmFpbHVyZUNvdW50LCBlcnJvcik7XG5cbiAgICAgIGlmIChjYW5jZWxSZXRyeSB8fCAhc2hvdWxkUmV0cnkpIHtcbiAgICAgICAgLy8gV2UgYXJlIGRvbmUgaWYgdGhlIHF1ZXJ5IGRvZXMgbm90IG5lZWQgdG8gYmUgcmV0cmllZFxuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIF90aGlzLmZhaWx1cmVDb3VudCsrOyAvLyBOb3RpZnkgb24gZmFpbFxuXG4gICAgICBjb25maWcub25GYWlsID09IG51bGwgPyB2b2lkIDAgOiBjb25maWcub25GYWlsKF90aGlzLmZhaWx1cmVDb3VudCwgZXJyb3IpOyAvLyBEZWxheVxuXG4gICAgICBzbGVlcChkZWxheSkgLy8gUGF1c2UgaWYgdGhlIGRvY3VtZW50IGlzIG5vdCB2aXNpYmxlIG9yIHdoZW4gdGhlIGRldmljZSBpcyBvZmZsaW5lXG4gICAgICAudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghZm9jdXNNYW5hZ2VyLmlzRm9jdXNlZCgpIHx8ICFvbmxpbmVNYW5hZ2VyLmlzT25saW5lKCkpIHtcbiAgICAgICAgICByZXR1cm4gcGF1c2UoKTtcbiAgICAgICAgfVxuICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChjYW5jZWxSZXRyeSkge1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcnVuKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9OyAvLyBTdGFydCBsb29wXG5cblxuICBydW4oKTtcbn07IiwgImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IHsgZ2V0QWJvcnRDb250cm9sbGVyLCBmdW5jdGlvbmFsVXBkYXRlLCBpc1ZhbGlkVGltZW91dCwgbm9vcCwgcmVwbGFjZUVxdWFsRGVlcCwgdGltZVVudGlsU3RhbGUsIGVuc3VyZVF1ZXJ5S2V5QXJyYXkgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IG5vdGlmeU1hbmFnZXIgfSBmcm9tICcuL25vdGlmeU1hbmFnZXInO1xuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHsgUmV0cnllciwgaXNDYW5jZWxsZWRFcnJvciB9IGZyb20gJy4vcmV0cnllcic7IC8vIFRZUEVTXG5cbi8vIENMQVNTXG5leHBvcnQgdmFyIFF1ZXJ5ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gUXVlcnkoY29uZmlnKSB7XG4gICAgdGhpcy5hYm9ydFNpZ25hbENvbnN1bWVkID0gZmFsc2U7XG4gICAgdGhpcy5oYWRPYnNlcnZlcnMgPSBmYWxzZTtcbiAgICB0aGlzLmRlZmF1bHRPcHRpb25zID0gY29uZmlnLmRlZmF1bHRPcHRpb25zO1xuICAgIHRoaXMuc2V0T3B0aW9ucyhjb25maWcub3B0aW9ucyk7XG4gICAgdGhpcy5vYnNlcnZlcnMgPSBbXTtcbiAgICB0aGlzLmNhY2hlID0gY29uZmlnLmNhY2hlO1xuICAgIHRoaXMucXVlcnlLZXkgPSBjb25maWcucXVlcnlLZXk7XG4gICAgdGhpcy5xdWVyeUhhc2ggPSBjb25maWcucXVlcnlIYXNoO1xuICAgIHRoaXMuaW5pdGlhbFN0YXRlID0gY29uZmlnLnN0YXRlIHx8IHRoaXMuZ2V0RGVmYXVsdFN0YXRlKHRoaXMub3B0aW9ucyk7XG4gICAgdGhpcy5zdGF0ZSA9IHRoaXMuaW5pdGlhbFN0YXRlO1xuICAgIHRoaXMubWV0YSA9IGNvbmZpZy5tZXRhO1xuICAgIHRoaXMuc2NoZWR1bGVHYygpO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFF1ZXJ5LnByb3RvdHlwZTtcblxuICBfcHJvdG8uc2V0T3B0aW9ucyA9IGZ1bmN0aW9uIHNldE9wdGlvbnMob3B0aW9ucykge1xuICAgIHZhciBfdGhpcyRvcHRpb25zJGNhY2hlVGk7XG5cbiAgICB0aGlzLm9wdGlvbnMgPSBfZXh0ZW5kcyh7fSwgdGhpcy5kZWZhdWx0T3B0aW9ucywgb3B0aW9ucyk7XG4gICAgdGhpcy5tZXRhID0gb3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5tZXRhOyAvLyBEZWZhdWx0IHRvIDUgbWludXRlcyBpZiBub3QgY2FjaGUgdGltZSBpcyBzZXRcblxuICAgIHRoaXMuY2FjaGVUaW1lID0gTWF0aC5tYXgodGhpcy5jYWNoZVRpbWUgfHwgMCwgKF90aGlzJG9wdGlvbnMkY2FjaGVUaSA9IHRoaXMub3B0aW9ucy5jYWNoZVRpbWUpICE9IG51bGwgPyBfdGhpcyRvcHRpb25zJGNhY2hlVGkgOiA1ICogNjAgKiAxMDAwKTtcbiAgfTtcblxuICBfcHJvdG8uc2V0RGVmYXVsdE9wdGlvbnMgPSBmdW5jdGlvbiBzZXREZWZhdWx0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgdGhpcy5kZWZhdWx0T3B0aW9ucyA9IG9wdGlvbnM7XG4gIH07XG5cbiAgX3Byb3RvLnNjaGVkdWxlR2MgPSBmdW5jdGlvbiBzY2hlZHVsZUdjKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB0aGlzLmNsZWFyR2NUaW1lb3V0KCk7XG5cbiAgICBpZiAoaXNWYWxpZFRpbWVvdXQodGhpcy5jYWNoZVRpbWUpKSB7XG4gICAgICB0aGlzLmdjVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpcy5vcHRpb25hbFJlbW92ZSgpO1xuICAgICAgfSwgdGhpcy5jYWNoZVRpbWUpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uY2xlYXJHY1RpbWVvdXQgPSBmdW5jdGlvbiBjbGVhckdjVGltZW91dCgpIHtcbiAgICBpZiAodGhpcy5nY1RpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLmdjVGltZW91dCk7XG4gICAgICB0aGlzLmdjVGltZW91dCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLm9wdGlvbmFsUmVtb3ZlID0gZnVuY3Rpb24gb3B0aW9uYWxSZW1vdmUoKSB7XG4gICAgaWYgKCF0aGlzLm9ic2VydmVycy5sZW5ndGgpIHtcbiAgICAgIGlmICh0aGlzLnN0YXRlLmlzRmV0Y2hpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFkT2JzZXJ2ZXJzKSB7XG4gICAgICAgICAgdGhpcy5zY2hlZHVsZUdjKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY2FjaGUucmVtb3ZlKHRoaXMpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uc2V0RGF0YSA9IGZ1bmN0aW9uIHNldERhdGEodXBkYXRlciwgb3B0aW9ucykge1xuICAgIHZhciBfdGhpcyRvcHRpb25zJGlzRGF0YUUsIF90aGlzJG9wdGlvbnM7XG5cbiAgICB2YXIgcHJldkRhdGEgPSB0aGlzLnN0YXRlLmRhdGE7IC8vIEdldCB0aGUgbmV3IGRhdGFcblxuICAgIHZhciBkYXRhID0gZnVuY3Rpb25hbFVwZGF0ZSh1cGRhdGVyLCBwcmV2RGF0YSk7IC8vIFVzZSBwcmV2IGRhdGEgaWYgYW4gaXNEYXRhRXF1YWwgZnVuY3Rpb24gaXMgZGVmaW5lZCBhbmQgcmV0dXJucyBgdHJ1ZWBcblxuICAgIGlmICgoX3RoaXMkb3B0aW9ucyRpc0RhdGFFID0gKF90aGlzJG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMpLmlzRGF0YUVxdWFsKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkb3B0aW9ucyRpc0RhdGFFLmNhbGwoX3RoaXMkb3B0aW9ucywgcHJldkRhdGEsIGRhdGEpKSB7XG4gICAgICBkYXRhID0gcHJldkRhdGE7XG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMuc3RydWN0dXJhbFNoYXJpbmcgIT09IGZhbHNlKSB7XG4gICAgICAvLyBTdHJ1Y3R1cmFsbHkgc2hhcmUgZGF0YSBiZXR3ZWVuIHByZXYgYW5kIG5ldyBkYXRhIGlmIG5lZWRlZFxuICAgICAgZGF0YSA9IHJlcGxhY2VFcXVhbERlZXAocHJldkRhdGEsIGRhdGEpO1xuICAgIH0gLy8gU2V0IGRhdGEgYW5kIG1hcmsgaXQgYXMgY2FjaGVkXG5cblxuICAgIHRoaXMuZGlzcGF0Y2goe1xuICAgICAgZGF0YTogZGF0YSxcbiAgICAgIHR5cGU6ICdzdWNjZXNzJyxcbiAgICAgIGRhdGFVcGRhdGVkQXQ6IG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMudXBkYXRlZEF0XG4gICAgfSk7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH07XG5cbiAgX3Byb3RvLnNldFN0YXRlID0gZnVuY3Rpb24gc2V0U3RhdGUoc3RhdGUsIHNldFN0YXRlT3B0aW9ucykge1xuICAgIHRoaXMuZGlzcGF0Y2goe1xuICAgICAgdHlwZTogJ3NldFN0YXRlJyxcbiAgICAgIHN0YXRlOiBzdGF0ZSxcbiAgICAgIHNldFN0YXRlT3B0aW9uczogc2V0U3RhdGVPcHRpb25zXG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmNhbmNlbCA9IGZ1bmN0aW9uIGNhbmNlbChvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzJHJldHJ5ZXI7XG5cbiAgICB2YXIgcHJvbWlzZSA9IHRoaXMucHJvbWlzZTtcbiAgICAoX3RoaXMkcmV0cnllciA9IHRoaXMucmV0cnllcikgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJHJldHJ5ZXIuY2FuY2VsKG9wdGlvbnMpO1xuICAgIHJldHVybiBwcm9taXNlID8gcHJvbWlzZS50aGVuKG5vb3ApLmNhdGNoKG5vb3ApIDogUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH07XG5cbiAgX3Byb3RvLmRlc3Ryb3kgPSBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgIHRoaXMuY2xlYXJHY1RpbWVvdXQoKTtcbiAgICB0aGlzLmNhbmNlbCh7XG4gICAgICBzaWxlbnQ6IHRydWVcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8ucmVzZXQgPSBmdW5jdGlvbiByZXNldCgpIHtcbiAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICB0aGlzLnNldFN0YXRlKHRoaXMuaW5pdGlhbFN0YXRlKTtcbiAgfTtcblxuICBfcHJvdG8uaXNBY3RpdmUgPSBmdW5jdGlvbiBpc0FjdGl2ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5vYnNlcnZlcnMuc29tZShmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgIHJldHVybiBvYnNlcnZlci5vcHRpb25zLmVuYWJsZWQgIT09IGZhbHNlO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5pc0ZldGNoaW5nID0gZnVuY3Rpb24gaXNGZXRjaGluZygpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5pc0ZldGNoaW5nO1xuICB9O1xuXG4gIF9wcm90by5pc1N0YWxlID0gZnVuY3Rpb24gaXNTdGFsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5pc0ludmFsaWRhdGVkIHx8ICF0aGlzLnN0YXRlLmRhdGFVcGRhdGVkQXQgfHwgdGhpcy5vYnNlcnZlcnMuc29tZShmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgIHJldHVybiBvYnNlcnZlci5nZXRDdXJyZW50UmVzdWx0KCkuaXNTdGFsZTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uaXNTdGFsZUJ5VGltZSA9IGZ1bmN0aW9uIGlzU3RhbGVCeVRpbWUoc3RhbGVUaW1lKSB7XG4gICAgaWYgKHN0YWxlVGltZSA9PT0gdm9pZCAwKSB7XG4gICAgICBzdGFsZVRpbWUgPSAwO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnN0YXRlLmlzSW52YWxpZGF0ZWQgfHwgIXRoaXMuc3RhdGUuZGF0YVVwZGF0ZWRBdCB8fCAhdGltZVVudGlsU3RhbGUodGhpcy5zdGF0ZS5kYXRhVXBkYXRlZEF0LCBzdGFsZVRpbWUpO1xuICB9O1xuXG4gIF9wcm90by5vbkZvY3VzID0gZnVuY3Rpb24gb25Gb2N1cygpIHtcbiAgICB2YXIgX3RoaXMkcmV0cnllcjI7XG5cbiAgICB2YXIgb2JzZXJ2ZXIgPSB0aGlzLm9ic2VydmVycy5maW5kKGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4geC5zaG91bGRGZXRjaE9uV2luZG93Rm9jdXMoKTtcbiAgICB9KTtcblxuICAgIGlmIChvYnNlcnZlcikge1xuICAgICAgb2JzZXJ2ZXIucmVmZXRjaCgpO1xuICAgIH0gLy8gQ29udGludWUgZmV0Y2ggaWYgY3VycmVudGx5IHBhdXNlZFxuXG5cbiAgICAoX3RoaXMkcmV0cnllcjIgPSB0aGlzLnJldHJ5ZXIpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRyZXRyeWVyMi5jb250aW51ZSgpO1xuICB9O1xuXG4gIF9wcm90by5vbk9ubGluZSA9IGZ1bmN0aW9uIG9uT25saW5lKCkge1xuICAgIHZhciBfdGhpcyRyZXRyeWVyMztcblxuICAgIHZhciBvYnNlcnZlciA9IHRoaXMub2JzZXJ2ZXJzLmZpbmQoZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiB4LnNob3VsZEZldGNoT25SZWNvbm5lY3QoKTtcbiAgICB9KTtcblxuICAgIGlmIChvYnNlcnZlcikge1xuICAgICAgb2JzZXJ2ZXIucmVmZXRjaCgpO1xuICAgIH0gLy8gQ29udGludWUgZmV0Y2ggaWYgY3VycmVudGx5IHBhdXNlZFxuXG5cbiAgICAoX3RoaXMkcmV0cnllcjMgPSB0aGlzLnJldHJ5ZXIpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRyZXRyeWVyMy5jb250aW51ZSgpO1xuICB9O1xuXG4gIF9wcm90by5hZGRPYnNlcnZlciA9IGZ1bmN0aW9uIGFkZE9ic2VydmVyKG9ic2VydmVyKSB7XG4gICAgaWYgKHRoaXMub2JzZXJ2ZXJzLmluZGV4T2Yob2JzZXJ2ZXIpID09PSAtMSkge1xuICAgICAgdGhpcy5vYnNlcnZlcnMucHVzaChvYnNlcnZlcik7XG4gICAgICB0aGlzLmhhZE9ic2VydmVycyA9IHRydWU7IC8vIFN0b3AgdGhlIHF1ZXJ5IGZyb20gYmVpbmcgZ2FyYmFnZSBjb2xsZWN0ZWRcblxuICAgICAgdGhpcy5jbGVhckdjVGltZW91dCgpO1xuICAgICAgdGhpcy5jYWNoZS5ub3RpZnkoe1xuICAgICAgICB0eXBlOiAnb2JzZXJ2ZXJBZGRlZCcsXG4gICAgICAgIHF1ZXJ5OiB0aGlzLFxuICAgICAgICBvYnNlcnZlcjogb2JzZXJ2ZXJcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ucmVtb3ZlT2JzZXJ2ZXIgPSBmdW5jdGlvbiByZW1vdmVPYnNlcnZlcihvYnNlcnZlcikge1xuICAgIGlmICh0aGlzLm9ic2VydmVycy5pbmRleE9mKG9ic2VydmVyKSAhPT0gLTEpIHtcbiAgICAgIHRoaXMub2JzZXJ2ZXJzID0gdGhpcy5vYnNlcnZlcnMuZmlsdGVyKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHJldHVybiB4ICE9PSBvYnNlcnZlcjtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIXRoaXMub2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgICAvLyBJZiB0aGUgdHJhbnNwb3J0IGxheWVyIGRvZXMgbm90IHN1cHBvcnQgY2FuY2VsbGF0aW9uXG4gICAgICAgIC8vIHdlJ2xsIGxldCB0aGUgcXVlcnkgY29udGludWUgc28gdGhlIHJlc3VsdCBjYW4gYmUgY2FjaGVkXG4gICAgICAgIGlmICh0aGlzLnJldHJ5ZXIpIHtcbiAgICAgICAgICBpZiAodGhpcy5yZXRyeWVyLmlzVHJhbnNwb3J0Q2FuY2VsYWJsZSB8fCB0aGlzLmFib3J0U2lnbmFsQ29uc3VtZWQpIHtcbiAgICAgICAgICAgIHRoaXMucmV0cnllci5jYW5jZWwoe1xuICAgICAgICAgICAgICByZXZlcnQ6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJldHJ5ZXIuY2FuY2VsUmV0cnkoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jYWNoZVRpbWUpIHtcbiAgICAgICAgICB0aGlzLnNjaGVkdWxlR2MoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmNhY2hlLnJlbW92ZSh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLmNhY2hlLm5vdGlmeSh7XG4gICAgICAgIHR5cGU6ICdvYnNlcnZlclJlbW92ZWQnLFxuICAgICAgICBxdWVyeTogdGhpcyxcbiAgICAgICAgb2JzZXJ2ZXI6IG9ic2VydmVyXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLmdldE9ic2VydmVyc0NvdW50ID0gZnVuY3Rpb24gZ2V0T2JzZXJ2ZXJzQ291bnQoKSB7XG4gICAgcmV0dXJuIHRoaXMub2JzZXJ2ZXJzLmxlbmd0aDtcbiAgfTtcblxuICBfcHJvdG8uaW52YWxpZGF0ZSA9IGZ1bmN0aW9uIGludmFsaWRhdGUoKSB7XG4gICAgaWYgKCF0aGlzLnN0YXRlLmlzSW52YWxpZGF0ZWQpIHtcbiAgICAgIHRoaXMuZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiAnaW52YWxpZGF0ZSdcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uZmV0Y2ggPSBmdW5jdGlvbiBmZXRjaChvcHRpb25zLCBmZXRjaE9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcyxcbiAgICAgICAgX3RoaXMkb3B0aW9ucyRiZWhhdmlvLFxuICAgICAgICBfY29udGV4dCRmZXRjaE9wdGlvbnMsXG4gICAgICAgIF9hYm9ydENvbnRyb2xsZXIkYWJvcjtcblxuICAgIGlmICh0aGlzLnN0YXRlLmlzRmV0Y2hpbmcpIHtcbiAgICAgIGlmICh0aGlzLnN0YXRlLmRhdGFVcGRhdGVkQXQgJiYgKGZldGNoT3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogZmV0Y2hPcHRpb25zLmNhbmNlbFJlZmV0Y2gpKSB7XG4gICAgICAgIC8vIFNpbGVudGx5IGNhbmNlbCBjdXJyZW50IGZldGNoIGlmIHRoZSB1c2VyIHdhbnRzIHRvIGNhbmNlbCByZWZldGNoZXNcbiAgICAgICAgdGhpcy5jYW5jZWwoe1xuICAgICAgICAgIHNpbGVudDogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5wcm9taXNlKSB7XG4gICAgICAgIHZhciBfdGhpcyRyZXRyeWVyNDtcblxuICAgICAgICAvLyBtYWtlIHN1cmUgdGhhdCByZXRyaWVzIHRoYXQgd2VyZSBwb3RlbnRpYWxseSBjYW5jZWxsZWQgZHVlIHRvIHVubW91bnRzIGNhbiBjb250aW51ZVxuICAgICAgICAoX3RoaXMkcmV0cnllcjQgPSB0aGlzLnJldHJ5ZXIpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRyZXRyeWVyNC5jb250aW51ZVJldHJ5KCk7IC8vIFJldHVybiBjdXJyZW50IHByb21pc2UgaWYgd2UgYXJlIGFscmVhZHkgZmV0Y2hpbmdcblxuICAgICAgICByZXR1cm4gdGhpcy5wcm9taXNlO1xuICAgICAgfVxuICAgIH0gLy8gVXBkYXRlIGNvbmZpZyBpZiBwYXNzZWQsIG90aGVyd2lzZSB0aGUgY29uZmlnIGZyb20gdGhlIGxhc3QgZXhlY3V0aW9uIGlzIHVzZWRcblxuXG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgIHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcbiAgICB9IC8vIFVzZSB0aGUgb3B0aW9ucyBmcm9tIHRoZSBmaXJzdCBvYnNlcnZlciB3aXRoIGEgcXVlcnkgZnVuY3Rpb24gaWYgbm8gZnVuY3Rpb24gaXMgZm91bmQuXG4gICAgLy8gVGhpcyBjYW4gaGFwcGVuIHdoZW4gdGhlIHF1ZXJ5IGlzIGh5ZHJhdGVkIG9yIGNyZWF0ZWQgd2l0aCBzZXRRdWVyeURhdGEuXG5cblxuICAgIGlmICghdGhpcy5vcHRpb25zLnF1ZXJ5Rm4pIHtcbiAgICAgIHZhciBvYnNlcnZlciA9IHRoaXMub2JzZXJ2ZXJzLmZpbmQoZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgcmV0dXJuIHgub3B0aW9ucy5xdWVyeUZuO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChvYnNlcnZlcikge1xuICAgICAgICB0aGlzLnNldE9wdGlvbnMob2JzZXJ2ZXIub3B0aW9ucyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHF1ZXJ5S2V5ID0gZW5zdXJlUXVlcnlLZXlBcnJheSh0aGlzLnF1ZXJ5S2V5KTtcbiAgICB2YXIgYWJvcnRDb250cm9sbGVyID0gZ2V0QWJvcnRDb250cm9sbGVyKCk7IC8vIENyZWF0ZSBxdWVyeSBmdW5jdGlvbiBjb250ZXh0XG5cbiAgICB2YXIgcXVlcnlGbkNvbnRleHQgPSB7XG4gICAgICBxdWVyeUtleTogcXVlcnlLZXksXG4gICAgICBwYWdlUGFyYW06IHVuZGVmaW5lZCxcbiAgICAgIG1ldGE6IHRoaXMubWV0YVxuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHF1ZXJ5Rm5Db250ZXh0LCAnc2lnbmFsJywge1xuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICBpZiAoYWJvcnRDb250cm9sbGVyKSB7XG4gICAgICAgICAgX3RoaXMyLmFib3J0U2lnbmFsQ29uc3VtZWQgPSB0cnVlO1xuICAgICAgICAgIHJldHVybiBhYm9ydENvbnRyb2xsZXIuc2lnbmFsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9KTsgLy8gQ3JlYXRlIGZldGNoIGZ1bmN0aW9uXG5cbiAgICB2YXIgZmV0Y2hGbiA9IGZ1bmN0aW9uIGZldGNoRm4oKSB7XG4gICAgICBpZiAoIV90aGlzMi5vcHRpb25zLnF1ZXJ5Rm4pIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCdNaXNzaW5nIHF1ZXJ5Rm4nKTtcbiAgICAgIH1cblxuICAgICAgX3RoaXMyLmFib3J0U2lnbmFsQ29uc3VtZWQgPSBmYWxzZTtcbiAgICAgIHJldHVybiBfdGhpczIub3B0aW9ucy5xdWVyeUZuKHF1ZXJ5Rm5Db250ZXh0KTtcbiAgICB9OyAvLyBUcmlnZ2VyIGJlaGF2aW9yIGhvb2tcblxuXG4gICAgdmFyIGNvbnRleHQgPSB7XG4gICAgICBmZXRjaE9wdGlvbnM6IGZldGNoT3B0aW9ucyxcbiAgICAgIG9wdGlvbnM6IHRoaXMub3B0aW9ucyxcbiAgICAgIHF1ZXJ5S2V5OiBxdWVyeUtleSxcbiAgICAgIHN0YXRlOiB0aGlzLnN0YXRlLFxuICAgICAgZmV0Y2hGbjogZmV0Y2hGbixcbiAgICAgIG1ldGE6IHRoaXMubWV0YVxuICAgIH07XG5cbiAgICBpZiAoKF90aGlzJG9wdGlvbnMkYmVoYXZpbyA9IHRoaXMub3B0aW9ucy5iZWhhdmlvcikgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJG9wdGlvbnMkYmVoYXZpby5vbkZldGNoKSB7XG4gICAgICB2YXIgX3RoaXMkb3B0aW9ucyRiZWhhdmlvMjtcblxuICAgICAgKF90aGlzJG9wdGlvbnMkYmVoYXZpbzIgPSB0aGlzLm9wdGlvbnMuYmVoYXZpb3IpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRvcHRpb25zJGJlaGF2aW8yLm9uRmV0Y2goY29udGV4dCk7XG4gICAgfSAvLyBTdG9yZSBzdGF0ZSBpbiBjYXNlIHRoZSBjdXJyZW50IGZldGNoIG5lZWRzIHRvIGJlIHJldmVydGVkXG5cblxuICAgIHRoaXMucmV2ZXJ0U3RhdGUgPSB0aGlzLnN0YXRlOyAvLyBTZXQgdG8gZmV0Y2hpbmcgc3RhdGUgaWYgbm90IGFscmVhZHkgaW4gaXRcblxuICAgIGlmICghdGhpcy5zdGF0ZS5pc0ZldGNoaW5nIHx8IHRoaXMuc3RhdGUuZmV0Y2hNZXRhICE9PSAoKF9jb250ZXh0JGZldGNoT3B0aW9ucyA9IGNvbnRleHQuZmV0Y2hPcHRpb25zKSA9PSBudWxsID8gdm9pZCAwIDogX2NvbnRleHQkZmV0Y2hPcHRpb25zLm1ldGEpKSB7XG4gICAgICB2YXIgX2NvbnRleHQkZmV0Y2hPcHRpb25zMjtcblxuICAgICAgdGhpcy5kaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6ICdmZXRjaCcsXG4gICAgICAgIG1ldGE6IChfY29udGV4dCRmZXRjaE9wdGlvbnMyID0gY29udGV4dC5mZXRjaE9wdGlvbnMpID09IG51bGwgPyB2b2lkIDAgOiBfY29udGV4dCRmZXRjaE9wdGlvbnMyLm1ldGFcbiAgICAgIH0pO1xuICAgIH0gLy8gVHJ5IHRvIGZldGNoIHRoZSBkYXRhXG5cblxuICAgIHRoaXMucmV0cnllciA9IG5ldyBSZXRyeWVyKHtcbiAgICAgIGZuOiBjb250ZXh0LmZldGNoRm4sXG4gICAgICBhYm9ydDogYWJvcnRDb250cm9sbGVyID09IG51bGwgPyB2b2lkIDAgOiAoX2Fib3J0Q29udHJvbGxlciRhYm9yID0gYWJvcnRDb250cm9sbGVyLmFib3J0KSA9PSBudWxsID8gdm9pZCAwIDogX2Fib3J0Q29udHJvbGxlciRhYm9yLmJpbmQoYWJvcnRDb250cm9sbGVyKSxcbiAgICAgIG9uU3VjY2VzczogZnVuY3Rpb24gb25TdWNjZXNzKGRhdGEpIHtcbiAgICAgICAgX3RoaXMyLnNldERhdGEoZGF0YSk7IC8vIE5vdGlmeSBjYWNoZSBjYWxsYmFja1xuXG5cbiAgICAgICAgX3RoaXMyLmNhY2hlLmNvbmZpZy5vblN1Y2Nlc3MgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzMi5jYWNoZS5jb25maWcub25TdWNjZXNzKGRhdGEsIF90aGlzMik7IC8vIFJlbW92ZSBxdWVyeSBhZnRlciBmZXRjaGluZyBpZiBjYWNoZSB0aW1lIGlzIDBcblxuICAgICAgICBpZiAoX3RoaXMyLmNhY2hlVGltZSA9PT0gMCkge1xuICAgICAgICAgIF90aGlzMi5vcHRpb25hbFJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgb25FcnJvcjogZnVuY3Rpb24gb25FcnJvcihlcnJvcikge1xuICAgICAgICAvLyBPcHRpbWlzdGljYWxseSB1cGRhdGUgc3RhdGUgaWYgbmVlZGVkXG4gICAgICAgIGlmICghKGlzQ2FuY2VsbGVkRXJyb3IoZXJyb3IpICYmIGVycm9yLnNpbGVudCkpIHtcbiAgICAgICAgICBfdGhpczIuZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgIGVycm9yOiBlcnJvclxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc0NhbmNlbGxlZEVycm9yKGVycm9yKSkge1xuICAgICAgICAgIC8vIE5vdGlmeSBjYWNoZSBjYWxsYmFja1xuICAgICAgICAgIF90aGlzMi5jYWNoZS5jb25maWcub25FcnJvciA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMyLmNhY2hlLmNvbmZpZy5vbkVycm9yKGVycm9yLCBfdGhpczIpOyAvLyBMb2cgZXJyb3JcblxuICAgICAgICAgIGdldExvZ2dlcigpLmVycm9yKGVycm9yKTtcbiAgICAgICAgfSAvLyBSZW1vdmUgcXVlcnkgYWZ0ZXIgZmV0Y2hpbmcgaWYgY2FjaGUgdGltZSBpcyAwXG5cblxuICAgICAgICBpZiAoX3RoaXMyLmNhY2hlVGltZSA9PT0gMCkge1xuICAgICAgICAgIF90aGlzMi5vcHRpb25hbFJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgb25GYWlsOiBmdW5jdGlvbiBvbkZhaWwoKSB7XG4gICAgICAgIF90aGlzMi5kaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogJ2ZhaWxlZCdcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgb25QYXVzZTogZnVuY3Rpb24gb25QYXVzZSgpIHtcbiAgICAgICAgX3RoaXMyLmRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiAncGF1c2UnXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIG9uQ29udGludWU6IGZ1bmN0aW9uIG9uQ29udGludWUoKSB7XG4gICAgICAgIF90aGlzMi5kaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogJ2NvbnRpbnVlJ1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICByZXRyeTogY29udGV4dC5vcHRpb25zLnJldHJ5LFxuICAgICAgcmV0cnlEZWxheTogY29udGV4dC5vcHRpb25zLnJldHJ5RGVsYXlcbiAgICB9KTtcbiAgICB0aGlzLnByb21pc2UgPSB0aGlzLnJldHJ5ZXIucHJvbWlzZTtcbiAgICByZXR1cm4gdGhpcy5wcm9taXNlO1xuICB9O1xuXG4gIF9wcm90by5kaXNwYXRjaCA9IGZ1bmN0aW9uIGRpc3BhdGNoKGFjdGlvbikge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHRoaXMucmVkdWNlcih0aGlzLnN0YXRlLCBhY3Rpb24pO1xuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMzLm9ic2VydmVycy5mb3JFYWNoKGZ1bmN0aW9uIChvYnNlcnZlcikge1xuICAgICAgICBvYnNlcnZlci5vblF1ZXJ5VXBkYXRlKGFjdGlvbik7XG4gICAgICB9KTtcblxuICAgICAgX3RoaXMzLmNhY2hlLm5vdGlmeSh7XG4gICAgICAgIHF1ZXJ5OiBfdGhpczMsXG4gICAgICAgIHR5cGU6ICdxdWVyeVVwZGF0ZWQnLFxuICAgICAgICBhY3Rpb246IGFjdGlvblxuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmdldERlZmF1bHRTdGF0ZSA9IGZ1bmN0aW9uIGdldERlZmF1bHRTdGF0ZShvcHRpb25zKSB7XG4gICAgdmFyIGRhdGEgPSB0eXBlb2Ygb3B0aW9ucy5pbml0aWFsRGF0YSA9PT0gJ2Z1bmN0aW9uJyA/IG9wdGlvbnMuaW5pdGlhbERhdGEoKSA6IG9wdGlvbnMuaW5pdGlhbERhdGE7XG4gICAgdmFyIGhhc0luaXRpYWxEYXRhID0gdHlwZW9mIG9wdGlvbnMuaW5pdGlhbERhdGEgIT09ICd1bmRlZmluZWQnO1xuICAgIHZhciBpbml0aWFsRGF0YVVwZGF0ZWRBdCA9IGhhc0luaXRpYWxEYXRhID8gdHlwZW9mIG9wdGlvbnMuaW5pdGlhbERhdGFVcGRhdGVkQXQgPT09ICdmdW5jdGlvbicgPyBvcHRpb25zLmluaXRpYWxEYXRhVXBkYXRlZEF0KCkgOiBvcHRpb25zLmluaXRpYWxEYXRhVXBkYXRlZEF0IDogMDtcbiAgICB2YXIgaGFzRGF0YSA9IHR5cGVvZiBkYXRhICE9PSAndW5kZWZpbmVkJztcbiAgICByZXR1cm4ge1xuICAgICAgZGF0YTogZGF0YSxcbiAgICAgIGRhdGFVcGRhdGVDb3VudDogMCxcbiAgICAgIGRhdGFVcGRhdGVkQXQ6IGhhc0RhdGEgPyBpbml0aWFsRGF0YVVwZGF0ZWRBdCAhPSBudWxsID8gaW5pdGlhbERhdGFVcGRhdGVkQXQgOiBEYXRlLm5vdygpIDogMCxcbiAgICAgIGVycm9yOiBudWxsLFxuICAgICAgZXJyb3JVcGRhdGVDb3VudDogMCxcbiAgICAgIGVycm9yVXBkYXRlZEF0OiAwLFxuICAgICAgZmV0Y2hGYWlsdXJlQ291bnQ6IDAsXG4gICAgICBmZXRjaE1ldGE6IG51bGwsXG4gICAgICBpc0ZldGNoaW5nOiBmYWxzZSxcbiAgICAgIGlzSW52YWxpZGF0ZWQ6IGZhbHNlLFxuICAgICAgaXNQYXVzZWQ6IGZhbHNlLFxuICAgICAgc3RhdHVzOiBoYXNEYXRhID8gJ3N1Y2Nlc3MnIDogJ2lkbGUnXG4gICAgfTtcbiAgfTtcblxuICBfcHJvdG8ucmVkdWNlciA9IGZ1bmN0aW9uIHJlZHVjZXIoc3RhdGUsIGFjdGlvbikge1xuICAgIHZhciBfYWN0aW9uJG1ldGEsIF9hY3Rpb24kZGF0YVVwZGF0ZWRBdDtcblxuICAgIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICAgIGNhc2UgJ2ZhaWxlZCc6XG4gICAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgICBmZXRjaEZhaWx1cmVDb3VudDogc3RhdGUuZmV0Y2hGYWlsdXJlQ291bnQgKyAxXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdwYXVzZSc6XG4gICAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgICBpc1BhdXNlZDogdHJ1ZVxuICAgICAgICB9KTtcblxuICAgICAgY2FzZSAnY29udGludWUnOlxuICAgICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCB7XG4gICAgICAgICAgaXNQYXVzZWQ6IGZhbHNlXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdmZXRjaCc6XG4gICAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgICBmZXRjaEZhaWx1cmVDb3VudDogMCxcbiAgICAgICAgICBmZXRjaE1ldGE6IChfYWN0aW9uJG1ldGEgPSBhY3Rpb24ubWV0YSkgIT0gbnVsbCA/IF9hY3Rpb24kbWV0YSA6IG51bGwsXG4gICAgICAgICAgaXNGZXRjaGluZzogdHJ1ZSxcbiAgICAgICAgICBpc1BhdXNlZDogZmFsc2VcbiAgICAgICAgfSwgIXN0YXRlLmRhdGFVcGRhdGVkQXQgJiYge1xuICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgIHN0YXR1czogJ2xvYWRpbmcnXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdzdWNjZXNzJzpcbiAgICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwge1xuICAgICAgICAgIGRhdGE6IGFjdGlvbi5kYXRhLFxuICAgICAgICAgIGRhdGFVcGRhdGVDb3VudDogc3RhdGUuZGF0YVVwZGF0ZUNvdW50ICsgMSxcbiAgICAgICAgICBkYXRhVXBkYXRlZEF0OiAoX2FjdGlvbiRkYXRhVXBkYXRlZEF0ID0gYWN0aW9uLmRhdGFVcGRhdGVkQXQpICE9IG51bGwgPyBfYWN0aW9uJGRhdGFVcGRhdGVkQXQgOiBEYXRlLm5vdygpLFxuICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgIGZldGNoRmFpbHVyZUNvdW50OiAwLFxuICAgICAgICAgIGlzRmV0Y2hpbmc6IGZhbHNlLFxuICAgICAgICAgIGlzSW52YWxpZGF0ZWQ6IGZhbHNlLFxuICAgICAgICAgIGlzUGF1c2VkOiBmYWxzZSxcbiAgICAgICAgICBzdGF0dXM6ICdzdWNjZXNzJ1xuICAgICAgICB9KTtcblxuICAgICAgY2FzZSAnZXJyb3InOlxuICAgICAgICB2YXIgZXJyb3IgPSBhY3Rpb24uZXJyb3I7XG5cbiAgICAgICAgaWYgKGlzQ2FuY2VsbGVkRXJyb3IoZXJyb3IpICYmIGVycm9yLnJldmVydCAmJiB0aGlzLnJldmVydFN0YXRlKSB7XG4gICAgICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCB0aGlzLnJldmVydFN0YXRlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgICBlcnJvcjogZXJyb3IsXG4gICAgICAgICAgZXJyb3JVcGRhdGVDb3VudDogc3RhdGUuZXJyb3JVcGRhdGVDb3VudCArIDEsXG4gICAgICAgICAgZXJyb3JVcGRhdGVkQXQ6IERhdGUubm93KCksXG4gICAgICAgICAgZmV0Y2hGYWlsdXJlQ291bnQ6IHN0YXRlLmZldGNoRmFpbHVyZUNvdW50ICsgMSxcbiAgICAgICAgICBpc0ZldGNoaW5nOiBmYWxzZSxcbiAgICAgICAgICBpc1BhdXNlZDogZmFsc2UsXG4gICAgICAgICAgc3RhdHVzOiAnZXJyb3InXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdpbnZhbGlkYXRlJzpcbiAgICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwge1xuICAgICAgICAgIGlzSW52YWxpZGF0ZWQ6IHRydWVcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ3NldFN0YXRlJzpcbiAgICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwgYWN0aW9uLnN0YXRlKTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gUXVlcnk7XG59KCk7IiwgImltcG9ydCB7IHNjaGVkdWxlTWljcm90YXNrIH0gZnJvbSAnLi91dGlscyc7IC8vIFRZUEVTXG5cbi8vIENMQVNTXG5leHBvcnQgdmFyIE5vdGlmeU1hbmFnZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBOb3RpZnlNYW5hZ2VyKCkge1xuICAgIHRoaXMucXVldWUgPSBbXTtcbiAgICB0aGlzLnRyYW5zYWN0aW9ucyA9IDA7XG5cbiAgICB0aGlzLm5vdGlmeUZuID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICBjYWxsYmFjaygpO1xuICAgIH07XG5cbiAgICB0aGlzLmJhdGNoTm90aWZ5Rm4gPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgIGNhbGxiYWNrKCk7XG4gICAgfTtcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBOb3RpZnlNYW5hZ2VyLnByb3RvdHlwZTtcblxuICBfcHJvdG8uYmF0Y2ggPSBmdW5jdGlvbiBiYXRjaChjYWxsYmFjaykge1xuICAgIHZhciByZXN1bHQ7XG4gICAgdGhpcy50cmFuc2FjdGlvbnMrKztcblxuICAgIHRyeSB7XG4gICAgICByZXN1bHQgPSBjYWxsYmFjaygpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9ucy0tO1xuXG4gICAgICBpZiAoIXRoaXMudHJhbnNhY3Rpb25zKSB7XG4gICAgICAgIHRoaXMuZmx1c2goKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIF9wcm90by5zY2hlZHVsZSA9IGZ1bmN0aW9uIHNjaGVkdWxlKGNhbGxiYWNrKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIGlmICh0aGlzLnRyYW5zYWN0aW9ucykge1xuICAgICAgdGhpcy5xdWV1ZS5wdXNoKGNhbGxiYWNrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2NoZWR1bGVNaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpcy5ub3RpZnlGbihjYWxsYmFjayk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEFsbCBjYWxscyB0byB0aGUgd3JhcHBlZCBmdW5jdGlvbiB3aWxsIGJlIGJhdGNoZWQuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLmJhdGNoQ2FsbHMgPSBmdW5jdGlvbiBiYXRjaENhbGxzKGNhbGxiYWNrKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICB9XG5cbiAgICAgIF90aGlzMi5zY2hlZHVsZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNhbGxiYWNrLmFwcGx5KHZvaWQgMCwgYXJncyk7XG4gICAgICB9KTtcbiAgICB9O1xuICB9O1xuXG4gIF9wcm90by5mbHVzaCA9IGZ1bmN0aW9uIGZsdXNoKCkge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgdmFyIHF1ZXVlID0gdGhpcy5xdWV1ZTtcbiAgICB0aGlzLnF1ZXVlID0gW107XG5cbiAgICBpZiAocXVldWUubGVuZ3RoKSB7XG4gICAgICBzY2hlZHVsZU1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzMy5iYXRjaE5vdGlmeUZuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBxdWV1ZS5mb3JFYWNoKGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICAgICAgX3RoaXMzLm5vdGlmeUZuKGNhbGxiYWNrKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFVzZSB0aGlzIG1ldGhvZCB0byBzZXQgYSBjdXN0b20gbm90aWZ5IGZ1bmN0aW9uLlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGZvciBleGFtcGxlIHdyYXAgbm90aWZpY2F0aW9ucyB3aXRoIGBSZWFjdC5hY3RgIHdoaWxlIHJ1bm5pbmcgdGVzdHMuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnNldE5vdGlmeUZ1bmN0aW9uID0gZnVuY3Rpb24gc2V0Tm90aWZ5RnVuY3Rpb24oZm4pIHtcbiAgICB0aGlzLm5vdGlmeUZuID0gZm47XG4gIH1cbiAgLyoqXG4gICAqIFVzZSB0aGlzIG1ldGhvZCB0byBzZXQgYSBjdXN0b20gZnVuY3Rpb24gdG8gYmF0Y2ggbm90aWZpY2F0aW9ucyB0b2dldGhlciBpbnRvIGEgc2luZ2xlIHRpY2suXG4gICAqIEJ5IGRlZmF1bHQgUmVhY3QgUXVlcnkgd2lsbCB1c2UgdGhlIGJhdGNoIGZ1bmN0aW9uIHByb3ZpZGVkIGJ5IFJlYWN0RE9NIG9yIFJlYWN0IE5hdGl2ZS5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uc2V0QmF0Y2hOb3RpZnlGdW5jdGlvbiA9IGZ1bmN0aW9uIHNldEJhdGNoTm90aWZ5RnVuY3Rpb24oZm4pIHtcbiAgICB0aGlzLmJhdGNoTm90aWZ5Rm4gPSBmbjtcbiAgfTtcblxuICByZXR1cm4gTm90aWZ5TWFuYWdlcjtcbn0oKTsgLy8gU0lOR0xFVE9OXG5cbmV4cG9ydCB2YXIgbm90aWZ5TWFuYWdlciA9IG5ldyBOb3RpZnlNYW5hZ2VyKCk7IiwgIi8vIFRZUEVTXG4vLyBGVU5DVElPTlNcbnZhciBsb2dnZXIgPSBjb25zb2xlO1xuZXhwb3J0IGZ1bmN0aW9uIGdldExvZ2dlcigpIHtcbiAgcmV0dXJuIGxvZ2dlcjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBzZXRMb2dnZXIobmV3TG9nZ2VyKSB7XG4gIGxvZ2dlciA9IG5ld0xvZ2dlcjtcbn0iLCAiaW1wb3J0IF9pbmhlcml0c0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlXCI7XG5pbXBvcnQgeyBoYXNoUXVlcnlLZXlCeU9wdGlvbnMsIG1hdGNoUXVlcnksIHBhcnNlRmlsdGVyQXJncyB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgUXVlcnkgfSBmcm9tICcuL3F1ZXJ5JztcbmltcG9ydCB7IG5vdGlmeU1hbmFnZXIgfSBmcm9tICcuL25vdGlmeU1hbmFnZXInO1xuaW1wb3J0IHsgU3Vic2NyaWJhYmxlIH0gZnJvbSAnLi9zdWJzY3JpYmFibGUnO1xuLy8gQ0xBU1NcbmV4cG9ydCB2YXIgUXVlcnlDYWNoZSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1N1YnNjcmliYWJsZSkge1xuICBfaW5oZXJpdHNMb29zZShRdWVyeUNhY2hlLCBfU3Vic2NyaWJhYmxlKTtcblxuICBmdW5jdGlvbiBRdWVyeUNhY2hlKGNvbmZpZykge1xuICAgIHZhciBfdGhpcztcblxuICAgIF90aGlzID0gX1N1YnNjcmliYWJsZS5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgX3RoaXMuY29uZmlnID0gY29uZmlnIHx8IHt9O1xuICAgIF90aGlzLnF1ZXJpZXMgPSBbXTtcbiAgICBfdGhpcy5xdWVyaWVzTWFwID0ge307XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFF1ZXJ5Q2FjaGUucHJvdG90eXBlO1xuXG4gIF9wcm90by5idWlsZCA9IGZ1bmN0aW9uIGJ1aWxkKGNsaWVudCwgb3B0aW9ucywgc3RhdGUpIHtcbiAgICB2YXIgX29wdGlvbnMkcXVlcnlIYXNoO1xuXG4gICAgdmFyIHF1ZXJ5S2V5ID0gb3B0aW9ucy5xdWVyeUtleTtcbiAgICB2YXIgcXVlcnlIYXNoID0gKF9vcHRpb25zJHF1ZXJ5SGFzaCA9IG9wdGlvbnMucXVlcnlIYXNoKSAhPSBudWxsID8gX29wdGlvbnMkcXVlcnlIYXNoIDogaGFzaFF1ZXJ5S2V5QnlPcHRpb25zKHF1ZXJ5S2V5LCBvcHRpb25zKTtcbiAgICB2YXIgcXVlcnkgPSB0aGlzLmdldChxdWVyeUhhc2gpO1xuXG4gICAgaWYgKCFxdWVyeSkge1xuICAgICAgcXVlcnkgPSBuZXcgUXVlcnkoe1xuICAgICAgICBjYWNoZTogdGhpcyxcbiAgICAgICAgcXVlcnlLZXk6IHF1ZXJ5S2V5LFxuICAgICAgICBxdWVyeUhhc2g6IHF1ZXJ5SGFzaCxcbiAgICAgICAgb3B0aW9uczogY2xpZW50LmRlZmF1bHRRdWVyeU9wdGlvbnMob3B0aW9ucyksXG4gICAgICAgIHN0YXRlOiBzdGF0ZSxcbiAgICAgICAgZGVmYXVsdE9wdGlvbnM6IGNsaWVudC5nZXRRdWVyeURlZmF1bHRzKHF1ZXJ5S2V5KSxcbiAgICAgICAgbWV0YTogb3B0aW9ucy5tZXRhXG4gICAgICB9KTtcbiAgICAgIHRoaXMuYWRkKHF1ZXJ5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcXVlcnk7XG4gIH07XG5cbiAgX3Byb3RvLmFkZCA9IGZ1bmN0aW9uIGFkZChxdWVyeSkge1xuICAgIGlmICghdGhpcy5xdWVyaWVzTWFwW3F1ZXJ5LnF1ZXJ5SGFzaF0pIHtcbiAgICAgIHRoaXMucXVlcmllc01hcFtxdWVyeS5xdWVyeUhhc2hdID0gcXVlcnk7XG4gICAgICB0aGlzLnF1ZXJpZXMucHVzaChxdWVyeSk7XG4gICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgIHR5cGU6ICdxdWVyeUFkZGVkJyxcbiAgICAgICAgcXVlcnk6IHF1ZXJ5XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnJlbW92ZSA9IGZ1bmN0aW9uIHJlbW92ZShxdWVyeSkge1xuICAgIHZhciBxdWVyeUluTWFwID0gdGhpcy5xdWVyaWVzTWFwW3F1ZXJ5LnF1ZXJ5SGFzaF07XG5cbiAgICBpZiAocXVlcnlJbk1hcCkge1xuICAgICAgcXVlcnkuZGVzdHJveSgpO1xuICAgICAgdGhpcy5xdWVyaWVzID0gdGhpcy5xdWVyaWVzLmZpbHRlcihmdW5jdGlvbiAoeCkge1xuICAgICAgICByZXR1cm4geCAhPT0gcXVlcnk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKHF1ZXJ5SW5NYXAgPT09IHF1ZXJ5KSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLnF1ZXJpZXNNYXBbcXVlcnkucXVlcnlIYXNoXTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICB0eXBlOiAncXVlcnlSZW1vdmVkJyxcbiAgICAgICAgcXVlcnk6IHF1ZXJ5XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLmNsZWFyID0gZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzMi5xdWVyaWVzLmZvckVhY2goZnVuY3Rpb24gKHF1ZXJ5KSB7XG4gICAgICAgIF90aGlzMi5yZW1vdmUocXVlcnkpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmdldCA9IGZ1bmN0aW9uIGdldChxdWVyeUhhc2gpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVyaWVzTWFwW3F1ZXJ5SGFzaF07XG4gIH07XG5cbiAgX3Byb3RvLmdldEFsbCA9IGZ1bmN0aW9uIGdldEFsbCgpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVyaWVzO1xuICB9O1xuXG4gIF9wcm90by5maW5kID0gZnVuY3Rpb24gZmluZChhcmcxLCBhcmcyKSB7XG4gICAgdmFyIF9wYXJzZUZpbHRlckFyZ3MgPSBwYXJzZUZpbHRlckFyZ3MoYXJnMSwgYXJnMiksXG4gICAgICAgIGZpbHRlcnMgPSBfcGFyc2VGaWx0ZXJBcmdzWzBdO1xuXG4gICAgaWYgKHR5cGVvZiBmaWx0ZXJzLmV4YWN0ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgZmlsdGVycy5leGFjdCA9IHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucXVlcmllcy5maW5kKGZ1bmN0aW9uIChxdWVyeSkge1xuICAgICAgcmV0dXJuIG1hdGNoUXVlcnkoZmlsdGVycywgcXVlcnkpO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5maW5kQWxsID0gZnVuY3Rpb24gZmluZEFsbChhcmcxLCBhcmcyKSB7XG4gICAgdmFyIF9wYXJzZUZpbHRlckFyZ3MyID0gcGFyc2VGaWx0ZXJBcmdzKGFyZzEsIGFyZzIpLFxuICAgICAgICBmaWx0ZXJzID0gX3BhcnNlRmlsdGVyQXJnczJbMF07XG5cbiAgICByZXR1cm4gT2JqZWN0LmtleXMoZmlsdGVycykubGVuZ3RoID4gMCA/IHRoaXMucXVlcmllcy5maWx0ZXIoZnVuY3Rpb24gKHF1ZXJ5KSB7XG4gICAgICByZXR1cm4gbWF0Y2hRdWVyeShmaWx0ZXJzLCBxdWVyeSk7XG4gICAgfSkgOiB0aGlzLnF1ZXJpZXM7XG4gIH07XG5cbiAgX3Byb3RvLm5vdGlmeSA9IGZ1bmN0aW9uIG5vdGlmeShldmVudCkge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczMubGlzdGVuZXJzLmZvckVhY2goZnVuY3Rpb24gKGxpc3RlbmVyKSB7XG4gICAgICAgIGxpc3RlbmVyKGV2ZW50KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5vbkZvY3VzID0gZnVuY3Rpb24gb25Gb2N1cygpIHtcbiAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXM0LnF1ZXJpZXMuZm9yRWFjaChmdW5jdGlvbiAocXVlcnkpIHtcbiAgICAgICAgcXVlcnkub25Gb2N1cygpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLm9uT25saW5lID0gZnVuY3Rpb24gb25PbmxpbmUoKSB7XG4gICAgdmFyIF90aGlzNSA9IHRoaXM7XG5cbiAgICBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzNS5xdWVyaWVzLmZvckVhY2goZnVuY3Rpb24gKHF1ZXJ5KSB7XG4gICAgICAgIHF1ZXJ5Lm9uT25saW5lKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4gUXVlcnlDYWNoZTtcbn0oU3Vic2NyaWJhYmxlKTsiLCAiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgeyBoYXNoUXVlcnlLZXksIG5vb3AsIHBhcnNlRmlsdGVyQXJncywgcGFyc2VRdWVyeUFyZ3MsIHBhcnRpYWxNYXRjaEtleSwgaGFzaFF1ZXJ5S2V5QnlPcHRpb25zIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBRdWVyeUNhY2hlIH0gZnJvbSAnLi9xdWVyeUNhY2hlJztcbmltcG9ydCB7IE11dGF0aW9uQ2FjaGUgfSBmcm9tICcuL211dGF0aW9uQ2FjaGUnO1xuaW1wb3J0IHsgZm9jdXNNYW5hZ2VyIH0gZnJvbSAnLi9mb2N1c01hbmFnZXInO1xuaW1wb3J0IHsgb25saW5lTWFuYWdlciB9IGZyb20gJy4vb25saW5lTWFuYWdlcic7XG5pbXBvcnQgeyBub3RpZnlNYW5hZ2VyIH0gZnJvbSAnLi9ub3RpZnlNYW5hZ2VyJztcbmltcG9ydCB7IGluZmluaXRlUXVlcnlCZWhhdmlvciB9IGZyb20gJy4vaW5maW5pdGVRdWVyeUJlaGF2aW9yJztcbi8vIENMQVNTXG5leHBvcnQgdmFyIFF1ZXJ5Q2xpZW50ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gUXVlcnlDbGllbnQoY29uZmlnKSB7XG4gICAgaWYgKGNvbmZpZyA9PT0gdm9pZCAwKSB7XG4gICAgICBjb25maWcgPSB7fTtcbiAgICB9XG5cbiAgICB0aGlzLnF1ZXJ5Q2FjaGUgPSBjb25maWcucXVlcnlDYWNoZSB8fCBuZXcgUXVlcnlDYWNoZSgpO1xuICAgIHRoaXMubXV0YXRpb25DYWNoZSA9IGNvbmZpZy5tdXRhdGlvbkNhY2hlIHx8IG5ldyBNdXRhdGlvbkNhY2hlKCk7XG4gICAgdGhpcy5kZWZhdWx0T3B0aW9ucyA9IGNvbmZpZy5kZWZhdWx0T3B0aW9ucyB8fCB7fTtcbiAgICB0aGlzLnF1ZXJ5RGVmYXVsdHMgPSBbXTtcbiAgICB0aGlzLm11dGF0aW9uRGVmYXVsdHMgPSBbXTtcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBRdWVyeUNsaWVudC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLm1vdW50ID0gZnVuY3Rpb24gbW91bnQoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMudW5zdWJzY3JpYmVGb2N1cyA9IGZvY3VzTWFuYWdlci5zdWJzY3JpYmUoZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKGZvY3VzTWFuYWdlci5pc0ZvY3VzZWQoKSAmJiBvbmxpbmVNYW5hZ2VyLmlzT25saW5lKCkpIHtcbiAgICAgICAgX3RoaXMubXV0YXRpb25DYWNoZS5vbkZvY3VzKCk7XG5cbiAgICAgICAgX3RoaXMucXVlcnlDYWNoZS5vbkZvY3VzKCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy51bnN1YnNjcmliZU9ubGluZSA9IG9ubGluZU1hbmFnZXIuc3Vic2NyaWJlKGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChmb2N1c01hbmFnZXIuaXNGb2N1c2VkKCkgJiYgb25saW5lTWFuYWdlci5pc09ubGluZSgpKSB7XG4gICAgICAgIF90aGlzLm11dGF0aW9uQ2FjaGUub25PbmxpbmUoKTtcblxuICAgICAgICBfdGhpcy5xdWVyeUNhY2hlLm9uT25saW5lKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLnVubW91bnQgPSBmdW5jdGlvbiB1bm1vdW50KCkge1xuICAgIHZhciBfdGhpcyR1bnN1YnNjcmliZUZvY3UsIF90aGlzJHVuc3Vic2NyaWJlT25saTtcblxuICAgIChfdGhpcyR1bnN1YnNjcmliZUZvY3UgPSB0aGlzLnVuc3Vic2NyaWJlRm9jdXMpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyR1bnN1YnNjcmliZUZvY3UuY2FsbCh0aGlzKTtcbiAgICAoX3RoaXMkdW5zdWJzY3JpYmVPbmxpID0gdGhpcy51bnN1YnNjcmliZU9ubGluZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJHVuc3Vic2NyaWJlT25saS5jYWxsKHRoaXMpO1xuICB9O1xuXG4gIF9wcm90by5pc0ZldGNoaW5nID0gZnVuY3Rpb24gaXNGZXRjaGluZyhhcmcxLCBhcmcyKSB7XG4gICAgdmFyIF9wYXJzZUZpbHRlckFyZ3MgPSBwYXJzZUZpbHRlckFyZ3MoYXJnMSwgYXJnMiksXG4gICAgICAgIGZpbHRlcnMgPSBfcGFyc2VGaWx0ZXJBcmdzWzBdO1xuXG4gICAgZmlsdGVycy5mZXRjaGluZyA9IHRydWU7XG4gICAgcmV0dXJuIHRoaXMucXVlcnlDYWNoZS5maW5kQWxsKGZpbHRlcnMpLmxlbmd0aDtcbiAgfTtcblxuICBfcHJvdG8uaXNNdXRhdGluZyA9IGZ1bmN0aW9uIGlzTXV0YXRpbmcoZmlsdGVycykge1xuICAgIHJldHVybiB0aGlzLm11dGF0aW9uQ2FjaGUuZmluZEFsbChfZXh0ZW5kcyh7fSwgZmlsdGVycywge1xuICAgICAgZmV0Y2hpbmc6IHRydWVcbiAgICB9KSkubGVuZ3RoO1xuICB9O1xuXG4gIF9wcm90by5nZXRRdWVyeURhdGEgPSBmdW5jdGlvbiBnZXRRdWVyeURhdGEocXVlcnlLZXksIGZpbHRlcnMpIHtcbiAgICB2YXIgX3RoaXMkcXVlcnlDYWNoZSRmaW5kO1xuXG4gICAgcmV0dXJuIChfdGhpcyRxdWVyeUNhY2hlJGZpbmQgPSB0aGlzLnF1ZXJ5Q2FjaGUuZmluZChxdWVyeUtleSwgZmlsdGVycykpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRxdWVyeUNhY2hlJGZpbmQuc3RhdGUuZGF0YTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0UXVlcmllc0RhdGEgPSBmdW5jdGlvbiBnZXRRdWVyaWVzRGF0YShxdWVyeUtleU9yRmlsdGVycykge1xuICAgIHJldHVybiB0aGlzLmdldFF1ZXJ5Q2FjaGUoKS5maW5kQWxsKHF1ZXJ5S2V5T3JGaWx0ZXJzKS5tYXAoZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgIHZhciBxdWVyeUtleSA9IF9yZWYucXVlcnlLZXksXG4gICAgICAgICAgc3RhdGUgPSBfcmVmLnN0YXRlO1xuICAgICAgdmFyIGRhdGEgPSBzdGF0ZS5kYXRhO1xuICAgICAgcmV0dXJuIFtxdWVyeUtleSwgZGF0YV07XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLnNldFF1ZXJ5RGF0YSA9IGZ1bmN0aW9uIHNldFF1ZXJ5RGF0YShxdWVyeUtleSwgdXBkYXRlciwgb3B0aW9ucykge1xuICAgIHZhciBwYXJzZWRPcHRpb25zID0gcGFyc2VRdWVyeUFyZ3MocXVlcnlLZXkpO1xuICAgIHZhciBkZWZhdWx0ZWRPcHRpb25zID0gdGhpcy5kZWZhdWx0UXVlcnlPcHRpb25zKHBhcnNlZE9wdGlvbnMpO1xuICAgIHJldHVybiB0aGlzLnF1ZXJ5Q2FjaGUuYnVpbGQodGhpcywgZGVmYXVsdGVkT3B0aW9ucykuc2V0RGF0YSh1cGRhdGVyLCBvcHRpb25zKTtcbiAgfTtcblxuICBfcHJvdG8uc2V0UXVlcmllc0RhdGEgPSBmdW5jdGlvbiBzZXRRdWVyaWVzRGF0YShxdWVyeUtleU9yRmlsdGVycywgdXBkYXRlciwgb3B0aW9ucykge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgcmV0dXJuIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzMi5nZXRRdWVyeUNhY2hlKCkuZmluZEFsbChxdWVyeUtleU9yRmlsdGVycykubWFwKGZ1bmN0aW9uIChfcmVmMikge1xuICAgICAgICB2YXIgcXVlcnlLZXkgPSBfcmVmMi5xdWVyeUtleTtcbiAgICAgICAgcmV0dXJuIFtxdWVyeUtleSwgX3RoaXMyLnNldFF1ZXJ5RGF0YShxdWVyeUtleSwgdXBkYXRlciwgb3B0aW9ucyldO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmdldFF1ZXJ5U3RhdGUgPSBmdW5jdGlvbiBnZXRRdWVyeVN0YXRlKHF1ZXJ5S2V5LCBmaWx0ZXJzKSB7XG4gICAgdmFyIF90aGlzJHF1ZXJ5Q2FjaGUkZmluZDI7XG5cbiAgICByZXR1cm4gKF90aGlzJHF1ZXJ5Q2FjaGUkZmluZDIgPSB0aGlzLnF1ZXJ5Q2FjaGUuZmluZChxdWVyeUtleSwgZmlsdGVycykpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRxdWVyeUNhY2hlJGZpbmQyLnN0YXRlO1xuICB9O1xuXG4gIF9wcm90by5yZW1vdmVRdWVyaWVzID0gZnVuY3Rpb24gcmVtb3ZlUXVlcmllcyhhcmcxLCBhcmcyKSB7XG4gICAgdmFyIF9wYXJzZUZpbHRlckFyZ3MyID0gcGFyc2VGaWx0ZXJBcmdzKGFyZzEsIGFyZzIpLFxuICAgICAgICBmaWx0ZXJzID0gX3BhcnNlRmlsdGVyQXJnczJbMF07XG5cbiAgICB2YXIgcXVlcnlDYWNoZSA9IHRoaXMucXVlcnlDYWNoZTtcbiAgICBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHF1ZXJ5Q2FjaGUuZmluZEFsbChmaWx0ZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChxdWVyeSkge1xuICAgICAgICBxdWVyeUNhY2hlLnJlbW92ZShxdWVyeSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8ucmVzZXRRdWVyaWVzID0gZnVuY3Rpb24gcmVzZXRRdWVyaWVzKGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgIHZhciBfcGFyc2VGaWx0ZXJBcmdzMyA9IHBhcnNlRmlsdGVyQXJncyhhcmcxLCBhcmcyLCBhcmczKSxcbiAgICAgICAgZmlsdGVycyA9IF9wYXJzZUZpbHRlckFyZ3MzWzBdLFxuICAgICAgICBvcHRpb25zID0gX3BhcnNlRmlsdGVyQXJnczNbMV07XG5cbiAgICB2YXIgcXVlcnlDYWNoZSA9IHRoaXMucXVlcnlDYWNoZTtcblxuICAgIHZhciByZWZldGNoRmlsdGVycyA9IF9leHRlbmRzKHt9LCBmaWx0ZXJzLCB7XG4gICAgICBhY3RpdmU6IHRydWVcbiAgICB9KTtcblxuICAgIHJldHVybiBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHF1ZXJ5Q2FjaGUuZmluZEFsbChmaWx0ZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChxdWVyeSkge1xuICAgICAgICBxdWVyeS5yZXNldCgpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gX3RoaXMzLnJlZmV0Y2hRdWVyaWVzKHJlZmV0Y2hGaWx0ZXJzLCBvcHRpb25zKTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uY2FuY2VsUXVlcmllcyA9IGZ1bmN0aW9uIGNhbmNlbFF1ZXJpZXMoYXJnMSwgYXJnMiwgYXJnMykge1xuICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgdmFyIF9wYXJzZUZpbHRlckFyZ3M0ID0gcGFyc2VGaWx0ZXJBcmdzKGFyZzEsIGFyZzIsIGFyZzMpLFxuICAgICAgICBmaWx0ZXJzID0gX3BhcnNlRmlsdGVyQXJnczRbMF0sXG4gICAgICAgIF9wYXJzZUZpbHRlckFyZ3M0JCA9IF9wYXJzZUZpbHRlckFyZ3M0WzFdLFxuICAgICAgICBjYW5jZWxPcHRpb25zID0gX3BhcnNlRmlsdGVyQXJnczQkID09PSB2b2lkIDAgPyB7fSA6IF9wYXJzZUZpbHRlckFyZ3M0JDtcblxuICAgIGlmICh0eXBlb2YgY2FuY2VsT3B0aW9ucy5yZXZlcnQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjYW5jZWxPcHRpb25zLnJldmVydCA9IHRydWU7XG4gICAgfVxuXG4gICAgdmFyIHByb21pc2VzID0gbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3RoaXM0LnF1ZXJ5Q2FjaGUuZmluZEFsbChmaWx0ZXJzKS5tYXAoZnVuY3Rpb24gKHF1ZXJ5KSB7XG4gICAgICAgIHJldHVybiBxdWVyeS5jYW5jZWwoY2FuY2VsT3B0aW9ucyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4obm9vcCkuY2F0Y2gobm9vcCk7XG4gIH07XG5cbiAgX3Byb3RvLmludmFsaWRhdGVRdWVyaWVzID0gZnVuY3Rpb24gaW52YWxpZGF0ZVF1ZXJpZXMoYXJnMSwgYXJnMiwgYXJnMykge1xuICAgIHZhciBfcmVmMyxcbiAgICAgICAgX2ZpbHRlcnMkcmVmZXRjaEFjdGl2LFxuICAgICAgICBfZmlsdGVycyRyZWZldGNoSW5hY3QsXG4gICAgICAgIF90aGlzNSA9IHRoaXM7XG5cbiAgICB2YXIgX3BhcnNlRmlsdGVyQXJnczUgPSBwYXJzZUZpbHRlckFyZ3MoYXJnMSwgYXJnMiwgYXJnMyksXG4gICAgICAgIGZpbHRlcnMgPSBfcGFyc2VGaWx0ZXJBcmdzNVswXSxcbiAgICAgICAgb3B0aW9ucyA9IF9wYXJzZUZpbHRlckFyZ3M1WzFdO1xuXG4gICAgdmFyIHJlZmV0Y2hGaWx0ZXJzID0gX2V4dGVuZHMoe30sIGZpbHRlcnMsIHtcbiAgICAgIC8vIGlmIGZpbHRlcnMucmVmZXRjaEFjdGl2ZSBpcyBub3QgcHJvdmlkZWQgYW5kIGZpbHRlcnMuYWN0aXZlIGlzIGV4cGxpY2l0bHkgZmFsc2UsXG4gICAgICAvLyBlLmcuIGludmFsaWRhdGVRdWVyaWVzKHsgYWN0aXZlOiBmYWxzZSB9KSwgd2UgZG9uJ3Qgd2FudCB0byByZWZldGNoIGFjdGl2ZSBxdWVyaWVzXG4gICAgICBhY3RpdmU6IChfcmVmMyA9IChfZmlsdGVycyRyZWZldGNoQWN0aXYgPSBmaWx0ZXJzLnJlZmV0Y2hBY3RpdmUpICE9IG51bGwgPyBfZmlsdGVycyRyZWZldGNoQWN0aXYgOiBmaWx0ZXJzLmFjdGl2ZSkgIT0gbnVsbCA/IF9yZWYzIDogdHJ1ZSxcbiAgICAgIGluYWN0aXZlOiAoX2ZpbHRlcnMkcmVmZXRjaEluYWN0ID0gZmlsdGVycy5yZWZldGNoSW5hY3RpdmUpICE9IG51bGwgPyBfZmlsdGVycyRyZWZldGNoSW5hY3QgOiBmYWxzZVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXM1LnF1ZXJ5Q2FjaGUuZmluZEFsbChmaWx0ZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChxdWVyeSkge1xuICAgICAgICBxdWVyeS5pbnZhbGlkYXRlKCk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIF90aGlzNS5yZWZldGNoUXVlcmllcyhyZWZldGNoRmlsdGVycywgb3B0aW9ucyk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLnJlZmV0Y2hRdWVyaWVzID0gZnVuY3Rpb24gcmVmZXRjaFF1ZXJpZXMoYXJnMSwgYXJnMiwgYXJnMykge1xuICAgIHZhciBfdGhpczYgPSB0aGlzO1xuXG4gICAgdmFyIF9wYXJzZUZpbHRlckFyZ3M2ID0gcGFyc2VGaWx0ZXJBcmdzKGFyZzEsIGFyZzIsIGFyZzMpLFxuICAgICAgICBmaWx0ZXJzID0gX3BhcnNlRmlsdGVyQXJnczZbMF0sXG4gICAgICAgIG9wdGlvbnMgPSBfcGFyc2VGaWx0ZXJBcmdzNlsxXTtcblxuICAgIHZhciBwcm9taXNlcyA9IG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzNi5xdWVyeUNhY2hlLmZpbmRBbGwoZmlsdGVycykubWFwKGZ1bmN0aW9uIChxdWVyeSkge1xuICAgICAgICByZXR1cm4gcXVlcnkuZmV0Y2godW5kZWZpbmVkLCBfZXh0ZW5kcyh7fSwgb3B0aW9ucywge1xuICAgICAgICAgIG1ldGE6IHtcbiAgICAgICAgICAgIHJlZmV0Y2hQYWdlOiBmaWx0ZXJzID09IG51bGwgPyB2b2lkIDAgOiBmaWx0ZXJzLnJlZmV0Y2hQYWdlXG4gICAgICAgICAgfVxuICAgICAgICB9KSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICB2YXIgcHJvbWlzZSA9IFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKG5vb3ApO1xuXG4gICAgaWYgKCEob3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy50aHJvd09uRXJyb3IpKSB7XG4gICAgICBwcm9taXNlID0gcHJvbWlzZS5jYXRjaChub29wKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfTtcblxuICBfcHJvdG8uZmV0Y2hRdWVyeSA9IGZ1bmN0aW9uIGZldGNoUXVlcnkoYXJnMSwgYXJnMiwgYXJnMykge1xuICAgIHZhciBwYXJzZWRPcHRpb25zID0gcGFyc2VRdWVyeUFyZ3MoYXJnMSwgYXJnMiwgYXJnMyk7XG4gICAgdmFyIGRlZmF1bHRlZE9wdGlvbnMgPSB0aGlzLmRlZmF1bHRRdWVyeU9wdGlvbnMocGFyc2VkT3B0aW9ucyk7IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YW5uZXJsaW5zbGV5L3JlYWN0LXF1ZXJ5L2lzc3Vlcy82NTJcblxuICAgIGlmICh0eXBlb2YgZGVmYXVsdGVkT3B0aW9ucy5yZXRyeSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGRlZmF1bHRlZE9wdGlvbnMucmV0cnkgPSBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgcXVlcnkgPSB0aGlzLnF1ZXJ5Q2FjaGUuYnVpbGQodGhpcywgZGVmYXVsdGVkT3B0aW9ucyk7XG4gICAgcmV0dXJuIHF1ZXJ5LmlzU3RhbGVCeVRpbWUoZGVmYXVsdGVkT3B0aW9ucy5zdGFsZVRpbWUpID8gcXVlcnkuZmV0Y2goZGVmYXVsdGVkT3B0aW9ucykgOiBQcm9taXNlLnJlc29sdmUocXVlcnkuc3RhdGUuZGF0YSk7XG4gIH07XG5cbiAgX3Byb3RvLnByZWZldGNoUXVlcnkgPSBmdW5jdGlvbiBwcmVmZXRjaFF1ZXJ5KGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgICByZXR1cm4gdGhpcy5mZXRjaFF1ZXJ5KGFyZzEsIGFyZzIsIGFyZzMpLnRoZW4obm9vcCkuY2F0Y2gobm9vcCk7XG4gIH07XG5cbiAgX3Byb3RvLmZldGNoSW5maW5pdGVRdWVyeSA9IGZ1bmN0aW9uIGZldGNoSW5maW5pdGVRdWVyeShhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgdmFyIHBhcnNlZE9wdGlvbnMgPSBwYXJzZVF1ZXJ5QXJncyhhcmcxLCBhcmcyLCBhcmczKTtcbiAgICBwYXJzZWRPcHRpb25zLmJlaGF2aW9yID0gaW5maW5pdGVRdWVyeUJlaGF2aW9yKCk7XG4gICAgcmV0dXJuIHRoaXMuZmV0Y2hRdWVyeShwYXJzZWRPcHRpb25zKTtcbiAgfTtcblxuICBfcHJvdG8ucHJlZmV0Y2hJbmZpbml0ZVF1ZXJ5ID0gZnVuY3Rpb24gcHJlZmV0Y2hJbmZpbml0ZVF1ZXJ5KGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgICByZXR1cm4gdGhpcy5mZXRjaEluZmluaXRlUXVlcnkoYXJnMSwgYXJnMiwgYXJnMykudGhlbihub29wKS5jYXRjaChub29wKTtcbiAgfTtcblxuICBfcHJvdG8uY2FuY2VsTXV0YXRpb25zID0gZnVuY3Rpb24gY2FuY2VsTXV0YXRpb25zKCkge1xuICAgIHZhciBfdGhpczcgPSB0aGlzO1xuXG4gICAgdmFyIHByb21pc2VzID0gbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3RoaXM3Lm11dGF0aW9uQ2FjaGUuZ2V0QWxsKCkubWFwKGZ1bmN0aW9uIChtdXRhdGlvbikge1xuICAgICAgICByZXR1cm4gbXV0YXRpb24uY2FuY2VsKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4obm9vcCkuY2F0Y2gobm9vcCk7XG4gIH07XG5cbiAgX3Byb3RvLnJlc3VtZVBhdXNlZE11dGF0aW9ucyA9IGZ1bmN0aW9uIHJlc3VtZVBhdXNlZE11dGF0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRNdXRhdGlvbkNhY2hlKCkucmVzdW1lUGF1c2VkTXV0YXRpb25zKCk7XG4gIH07XG5cbiAgX3Byb3RvLmV4ZWN1dGVNdXRhdGlvbiA9IGZ1bmN0aW9uIGV4ZWN1dGVNdXRhdGlvbihvcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRpb25DYWNoZS5idWlsZCh0aGlzLCBvcHRpb25zKS5leGVjdXRlKCk7XG4gIH07XG5cbiAgX3Byb3RvLmdldFF1ZXJ5Q2FjaGUgPSBmdW5jdGlvbiBnZXRRdWVyeUNhY2hlKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXJ5Q2FjaGU7XG4gIH07XG5cbiAgX3Byb3RvLmdldE11dGF0aW9uQ2FjaGUgPSBmdW5jdGlvbiBnZXRNdXRhdGlvbkNhY2hlKCkge1xuICAgIHJldHVybiB0aGlzLm11dGF0aW9uQ2FjaGU7XG4gIH07XG5cbiAgX3Byb3RvLmdldERlZmF1bHRPcHRpb25zID0gZnVuY3Rpb24gZ2V0RGVmYXVsdE9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGVmYXVsdE9wdGlvbnM7XG4gIH07XG5cbiAgX3Byb3RvLnNldERlZmF1bHRPcHRpb25zID0gZnVuY3Rpb24gc2V0RGVmYXVsdE9wdGlvbnMob3B0aW9ucykge1xuICAgIHRoaXMuZGVmYXVsdE9wdGlvbnMgPSBvcHRpb25zO1xuICB9O1xuXG4gIF9wcm90by5zZXRRdWVyeURlZmF1bHRzID0gZnVuY3Rpb24gc2V0UXVlcnlEZWZhdWx0cyhxdWVyeUtleSwgb3B0aW9ucykge1xuICAgIHZhciByZXN1bHQgPSB0aGlzLnF1ZXJ5RGVmYXVsdHMuZmluZChmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIGhhc2hRdWVyeUtleShxdWVyeUtleSkgPT09IGhhc2hRdWVyeUtleSh4LnF1ZXJ5S2V5KTtcbiAgICB9KTtcblxuICAgIGlmIChyZXN1bHQpIHtcbiAgICAgIHJlc3VsdC5kZWZhdWx0T3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucXVlcnlEZWZhdWx0cy5wdXNoKHtcbiAgICAgICAgcXVlcnlLZXk6IHF1ZXJ5S2V5LFxuICAgICAgICBkZWZhdWx0T3B0aW9uczogb3B0aW9uc1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5nZXRRdWVyeURlZmF1bHRzID0gZnVuY3Rpb24gZ2V0UXVlcnlEZWZhdWx0cyhxdWVyeUtleSkge1xuICAgIHZhciBfdGhpcyRxdWVyeURlZmF1bHRzJGY7XG5cbiAgICByZXR1cm4gcXVlcnlLZXkgPyAoX3RoaXMkcXVlcnlEZWZhdWx0cyRmID0gdGhpcy5xdWVyeURlZmF1bHRzLmZpbmQoZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiBwYXJ0aWFsTWF0Y2hLZXkocXVlcnlLZXksIHgucXVlcnlLZXkpO1xuICAgIH0pKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkcXVlcnlEZWZhdWx0cyRmLmRlZmF1bHRPcHRpb25zIDogdW5kZWZpbmVkO1xuICB9O1xuXG4gIF9wcm90by5zZXRNdXRhdGlvbkRlZmF1bHRzID0gZnVuY3Rpb24gc2V0TXV0YXRpb25EZWZhdWx0cyhtdXRhdGlvbktleSwgb3B0aW9ucykge1xuICAgIHZhciByZXN1bHQgPSB0aGlzLm11dGF0aW9uRGVmYXVsdHMuZmluZChmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIGhhc2hRdWVyeUtleShtdXRhdGlvbktleSkgPT09IGhhc2hRdWVyeUtleSh4Lm11dGF0aW9uS2V5KTtcbiAgICB9KTtcblxuICAgIGlmIChyZXN1bHQpIHtcbiAgICAgIHJlc3VsdC5kZWZhdWx0T3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubXV0YXRpb25EZWZhdWx0cy5wdXNoKHtcbiAgICAgICAgbXV0YXRpb25LZXk6IG11dGF0aW9uS2V5LFxuICAgICAgICBkZWZhdWx0T3B0aW9uczogb3B0aW9uc1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5nZXRNdXRhdGlvbkRlZmF1bHRzID0gZnVuY3Rpb24gZ2V0TXV0YXRpb25EZWZhdWx0cyhtdXRhdGlvbktleSkge1xuICAgIHZhciBfdGhpcyRtdXRhdGlvbkRlZmF1bHQ7XG5cbiAgICByZXR1cm4gbXV0YXRpb25LZXkgPyAoX3RoaXMkbXV0YXRpb25EZWZhdWx0ID0gdGhpcy5tdXRhdGlvbkRlZmF1bHRzLmZpbmQoZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiBwYXJ0aWFsTWF0Y2hLZXkobXV0YXRpb25LZXksIHgubXV0YXRpb25LZXkpO1xuICAgIH0pKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkbXV0YXRpb25EZWZhdWx0LmRlZmF1bHRPcHRpb25zIDogdW5kZWZpbmVkO1xuICB9O1xuXG4gIF9wcm90by5kZWZhdWx0UXVlcnlPcHRpb25zID0gZnVuY3Rpb24gZGVmYXVsdFF1ZXJ5T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMuX2RlZmF1bHRlZCkge1xuICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRlZE9wdGlvbnMgPSBfZXh0ZW5kcyh7fSwgdGhpcy5kZWZhdWx0T3B0aW9ucy5xdWVyaWVzLCB0aGlzLmdldFF1ZXJ5RGVmYXVsdHMob3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5xdWVyeUtleSksIG9wdGlvbnMsIHtcbiAgICAgIF9kZWZhdWx0ZWQ6IHRydWVcbiAgICB9KTtcblxuICAgIGlmICghZGVmYXVsdGVkT3B0aW9ucy5xdWVyeUhhc2ggJiYgZGVmYXVsdGVkT3B0aW9ucy5xdWVyeUtleSkge1xuICAgICAgZGVmYXVsdGVkT3B0aW9ucy5xdWVyeUhhc2ggPSBoYXNoUXVlcnlLZXlCeU9wdGlvbnMoZGVmYXVsdGVkT3B0aW9ucy5xdWVyeUtleSwgZGVmYXVsdGVkT3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlZmF1bHRlZE9wdGlvbnM7XG4gIH07XG5cbiAgX3Byb3RvLmRlZmF1bHRRdWVyeU9ic2VydmVyT3B0aW9ucyA9IGZ1bmN0aW9uIGRlZmF1bHRRdWVyeU9ic2VydmVyT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMuZGVmYXVsdFF1ZXJ5T3B0aW9ucyhvcHRpb25zKTtcbiAgfTtcblxuICBfcHJvdG8uZGVmYXVsdE11dGF0aW9uT3B0aW9ucyA9IGZ1bmN0aW9uIGRlZmF1bHRNdXRhdGlvbk9wdGlvbnMob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLl9kZWZhdWx0ZWQpIHtcbiAgICAgIHJldHVybiBvcHRpb25zO1xuICAgIH1cblxuICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgdGhpcy5kZWZhdWx0T3B0aW9ucy5tdXRhdGlvbnMsIHRoaXMuZ2V0TXV0YXRpb25EZWZhdWx0cyhvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLm11dGF0aW9uS2V5KSwgb3B0aW9ucywge1xuICAgICAgX2RlZmF1bHRlZDogdHJ1ZVxuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5jbGVhciA9IGZ1bmN0aW9uIGNsZWFyKCkge1xuICAgIHRoaXMucXVlcnlDYWNoZS5jbGVhcigpO1xuICAgIHRoaXMubXV0YXRpb25DYWNoZS5jbGVhcigpO1xuICB9O1xuXG4gIHJldHVybiBRdWVyeUNsaWVudDtcbn0oKTsiLCAiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyBub3RpZnlNYW5hZ2VyIH0gZnJvbSAnLi9ub3RpZnlNYW5hZ2VyJztcbmltcG9ydCB7IFJldHJ5ZXIgfSBmcm9tICcuL3JldHJ5ZXInO1xuaW1wb3J0IHsgbm9vcCB9IGZyb20gJy4vdXRpbHMnOyAvLyBUWVBFU1xuXG4vLyBDTEFTU1xuZXhwb3J0IHZhciBNdXRhdGlvbiA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIE11dGF0aW9uKGNvbmZpZykge1xuICAgIHRoaXMub3B0aW9ucyA9IF9leHRlbmRzKHt9LCBjb25maWcuZGVmYXVsdE9wdGlvbnMsIGNvbmZpZy5vcHRpb25zKTtcbiAgICB0aGlzLm11dGF0aW9uSWQgPSBjb25maWcubXV0YXRpb25JZDtcbiAgICB0aGlzLm11dGF0aW9uQ2FjaGUgPSBjb25maWcubXV0YXRpb25DYWNoZTtcbiAgICB0aGlzLm9ic2VydmVycyA9IFtdO1xuICAgIHRoaXMuc3RhdGUgPSBjb25maWcuc3RhdGUgfHwgZ2V0RGVmYXVsdFN0YXRlKCk7XG4gICAgdGhpcy5tZXRhID0gY29uZmlnLm1ldGE7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gTXV0YXRpb24ucHJvdG90eXBlO1xuXG4gIF9wcm90by5zZXRTdGF0ZSA9IGZ1bmN0aW9uIHNldFN0YXRlKHN0YXRlKSB7XG4gICAgdGhpcy5kaXNwYXRjaCh7XG4gICAgICB0eXBlOiAnc2V0U3RhdGUnLFxuICAgICAgc3RhdGU6IHN0YXRlXG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmFkZE9ic2VydmVyID0gZnVuY3Rpb24gYWRkT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcbiAgICBpZiAodGhpcy5vYnNlcnZlcnMuaW5kZXhPZihvYnNlcnZlcikgPT09IC0xKSB7XG4gICAgICB0aGlzLm9ic2VydmVycy5wdXNoKG9ic2VydmVyKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnJlbW92ZU9ic2VydmVyID0gZnVuY3Rpb24gcmVtb3ZlT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcbiAgICB0aGlzLm9ic2VydmVycyA9IHRoaXMub2JzZXJ2ZXJzLmZpbHRlcihmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHggIT09IG9ic2VydmVyO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5jYW5jZWwgPSBmdW5jdGlvbiBjYW5jZWwoKSB7XG4gICAgaWYgKHRoaXMucmV0cnllcikge1xuICAgICAgdGhpcy5yZXRyeWVyLmNhbmNlbCgpO1xuICAgICAgcmV0dXJuIHRoaXMucmV0cnllci5wcm9taXNlLnRoZW4obm9vcCkuY2F0Y2gobm9vcCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9O1xuXG4gIF9wcm90by5jb250aW51ZSA9IGZ1bmN0aW9uIF9jb250aW51ZSgpIHtcbiAgICBpZiAodGhpcy5yZXRyeWVyKSB7XG4gICAgICB0aGlzLnJldHJ5ZXIuY29udGludWUoKTtcbiAgICAgIHJldHVybiB0aGlzLnJldHJ5ZXIucHJvbWlzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5leGVjdXRlKCk7XG4gIH07XG5cbiAgX3Byb3RvLmV4ZWN1dGUgPSBmdW5jdGlvbiBleGVjdXRlKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB2YXIgZGF0YTtcbiAgICB2YXIgcmVzdG9yZWQgPSB0aGlzLnN0YXRlLnN0YXR1cyA9PT0gJ2xvYWRpbmcnO1xuICAgIHZhciBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cbiAgICBpZiAoIXJlc3RvcmVkKSB7XG4gICAgICB0aGlzLmRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogJ2xvYWRpbmcnLFxuICAgICAgICB2YXJpYWJsZXM6IHRoaXMub3B0aW9ucy52YXJpYWJsZXNcbiAgICAgIH0pO1xuICAgICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIE5vdGlmeSBjYWNoZSBjYWxsYmFja1xuICAgICAgICBfdGhpcy5tdXRhdGlvbkNhY2hlLmNvbmZpZy5vbk11dGF0ZSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMubXV0YXRpb25DYWNoZS5jb25maWcub25NdXRhdGUoX3RoaXMuc3RhdGUudmFyaWFibGVzLCBfdGhpcyk7XG4gICAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLm9wdGlvbnMub25NdXRhdGUgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzLm9wdGlvbnMub25NdXRhdGUoX3RoaXMuc3RhdGUudmFyaWFibGVzKTtcbiAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgICAgaWYgKGNvbnRleHQgIT09IF90aGlzLnN0YXRlLmNvbnRleHQpIHtcbiAgICAgICAgICBfdGhpcy5kaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiAnbG9hZGluZycsXG4gICAgICAgICAgICBjb250ZXh0OiBjb250ZXh0LFxuICAgICAgICAgICAgdmFyaWFibGVzOiBfdGhpcy5zdGF0ZS52YXJpYWJsZXNcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3RoaXMuZXhlY3V0ZU11dGF0aW9uKCk7XG4gICAgfSkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICBkYXRhID0gcmVzdWx0OyAvLyBOb3RpZnkgY2FjaGUgY2FsbGJhY2tcblxuICAgICAgX3RoaXMubXV0YXRpb25DYWNoZS5jb25maWcub25TdWNjZXNzID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcy5tdXRhdGlvbkNhY2hlLmNvbmZpZy5vblN1Y2Nlc3MoZGF0YSwgX3RoaXMuc3RhdGUudmFyaWFibGVzLCBfdGhpcy5zdGF0ZS5jb250ZXh0LCBfdGhpcyk7XG4gICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3RoaXMub3B0aW9ucy5vblN1Y2Nlc3MgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzLm9wdGlvbnMub25TdWNjZXNzKGRhdGEsIF90aGlzLnN0YXRlLnZhcmlhYmxlcywgX3RoaXMuc3RhdGUuY29udGV4dCk7XG4gICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3RoaXMub3B0aW9ucy5vblNldHRsZWQgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzLm9wdGlvbnMub25TZXR0bGVkKGRhdGEsIG51bGwsIF90aGlzLnN0YXRlLnZhcmlhYmxlcywgX3RoaXMuc3RhdGUuY29udGV4dCk7XG4gICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5kaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6ICdzdWNjZXNzJyxcbiAgICAgICAgZGF0YTogZGF0YVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgLy8gTm90aWZ5IGNhY2hlIGNhbGxiYWNrXG4gICAgICBfdGhpcy5tdXRhdGlvbkNhY2hlLmNvbmZpZy5vbkVycm9yID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcy5tdXRhdGlvbkNhY2hlLmNvbmZpZy5vbkVycm9yKGVycm9yLCBfdGhpcy5zdGF0ZS52YXJpYWJsZXMsIF90aGlzLnN0YXRlLmNvbnRleHQsIF90aGlzKTsgLy8gTG9nIGVycm9yXG5cbiAgICAgIGdldExvZ2dlcigpLmVycm9yKGVycm9yKTtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLm9wdGlvbnMub25FcnJvciA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMub3B0aW9ucy5vbkVycm9yKGVycm9yLCBfdGhpcy5zdGF0ZS52YXJpYWJsZXMsIF90aGlzLnN0YXRlLmNvbnRleHQpO1xuICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5vcHRpb25zLm9uU2V0dGxlZCA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMub3B0aW9ucy5vblNldHRsZWQodW5kZWZpbmVkLCBlcnJvciwgX3RoaXMuc3RhdGUudmFyaWFibGVzLCBfdGhpcy5zdGF0ZS5jb250ZXh0KTtcbiAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpcy5kaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICBlcnJvcjogZXJyb3JcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uZXhlY3V0ZU11dGF0aW9uID0gZnVuY3Rpb24gZXhlY3V0ZU11dGF0aW9uKCkge1xuICAgIHZhciBfdGhpczIgPSB0aGlzLFxuICAgICAgICBfdGhpcyRvcHRpb25zJHJldHJ5O1xuXG4gICAgdGhpcy5yZXRyeWVyID0gbmV3IFJldHJ5ZXIoe1xuICAgICAgZm46IGZ1bmN0aW9uIGZuKCkge1xuICAgICAgICBpZiAoIV90aGlzMi5vcHRpb25zLm11dGF0aW9uRm4pIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoJ05vIG11dGF0aW9uRm4gZm91bmQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBfdGhpczIub3B0aW9ucy5tdXRhdGlvbkZuKF90aGlzMi5zdGF0ZS52YXJpYWJsZXMpO1xuICAgICAgfSxcbiAgICAgIG9uRmFpbDogZnVuY3Rpb24gb25GYWlsKCkge1xuICAgICAgICBfdGhpczIuZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6ICdmYWlsZWQnXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIG9uUGF1c2U6IGZ1bmN0aW9uIG9uUGF1c2UoKSB7XG4gICAgICAgIF90aGlzMi5kaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogJ3BhdXNlJ1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBvbkNvbnRpbnVlOiBmdW5jdGlvbiBvbkNvbnRpbnVlKCkge1xuICAgICAgICBfdGhpczIuZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6ICdjb250aW51ZSdcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgcmV0cnk6IChfdGhpcyRvcHRpb25zJHJldHJ5ID0gdGhpcy5vcHRpb25zLnJldHJ5KSAhPSBudWxsID8gX3RoaXMkb3B0aW9ucyRyZXRyeSA6IDAsXG4gICAgICByZXRyeURlbGF5OiB0aGlzLm9wdGlvbnMucmV0cnlEZWxheVxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLnJldHJ5ZXIucHJvbWlzZTtcbiAgfTtcblxuICBfcHJvdG8uZGlzcGF0Y2ggPSBmdW5jdGlvbiBkaXNwYXRjaChhY3Rpb24pIHtcbiAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgIHRoaXMuc3RhdGUgPSByZWR1Y2VyKHRoaXMuc3RhdGUsIGFjdGlvbik7XG4gICAgbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczMub2JzZXJ2ZXJzLmZvckVhY2goZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICAgIG9ic2VydmVyLm9uTXV0YXRpb25VcGRhdGUoYWN0aW9uKTtcbiAgICAgIH0pO1xuXG4gICAgICBfdGhpczMubXV0YXRpb25DYWNoZS5ub3RpZnkoX3RoaXMzKTtcbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4gTXV0YXRpb247XG59KCk7XG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdFN0YXRlKCkge1xuICByZXR1cm4ge1xuICAgIGNvbnRleHQ6IHVuZGVmaW5lZCxcbiAgICBkYXRhOiB1bmRlZmluZWQsXG4gICAgZXJyb3I6IG51bGwsXG4gICAgZmFpbHVyZUNvdW50OiAwLFxuICAgIGlzUGF1c2VkOiBmYWxzZSxcbiAgICBzdGF0dXM6ICdpZGxlJyxcbiAgICB2YXJpYWJsZXM6IHVuZGVmaW5lZFxuICB9O1xufVxuXG5mdW5jdGlvbiByZWR1Y2VyKHN0YXRlLCBhY3Rpb24pIHtcbiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgIGNhc2UgJ2ZhaWxlZCc6XG4gICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCB7XG4gICAgICAgIGZhaWx1cmVDb3VudDogc3RhdGUuZmFpbHVyZUNvdW50ICsgMVxuICAgICAgfSk7XG5cbiAgICBjYXNlICdwYXVzZSc6XG4gICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCB7XG4gICAgICAgIGlzUGF1c2VkOiB0cnVlXG4gICAgICB9KTtcblxuICAgIGNhc2UgJ2NvbnRpbnVlJzpcbiAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgaXNQYXVzZWQ6IGZhbHNlXG4gICAgICB9KTtcblxuICAgIGNhc2UgJ2xvYWRpbmcnOlxuICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwge1xuICAgICAgICBjb250ZXh0OiBhY3Rpb24uY29udGV4dCxcbiAgICAgICAgZGF0YTogdW5kZWZpbmVkLFxuICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgaXNQYXVzZWQ6IGZhbHNlLFxuICAgICAgICBzdGF0dXM6ICdsb2FkaW5nJyxcbiAgICAgICAgdmFyaWFibGVzOiBhY3Rpb24udmFyaWFibGVzXG4gICAgICB9KTtcblxuICAgIGNhc2UgJ3N1Y2Nlc3MnOlxuICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwge1xuICAgICAgICBkYXRhOiBhY3Rpb24uZGF0YSxcbiAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgIHN0YXR1czogJ3N1Y2Nlc3MnLFxuICAgICAgICBpc1BhdXNlZDogZmFsc2VcbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnZXJyb3InOlxuICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwge1xuICAgICAgICBkYXRhOiB1bmRlZmluZWQsXG4gICAgICAgIGVycm9yOiBhY3Rpb24uZXJyb3IsXG4gICAgICAgIGZhaWx1cmVDb3VudDogc3RhdGUuZmFpbHVyZUNvdW50ICsgMSxcbiAgICAgICAgaXNQYXVzZWQ6IGZhbHNlLFxuICAgICAgICBzdGF0dXM6ICdlcnJvcidcbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnc2V0U3RhdGUnOlxuICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwgYWN0aW9uLnN0YXRlKTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gc3RhdGU7XG4gIH1cbn0iLCAiaW1wb3J0IF9pbmhlcml0c0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlXCI7XG5pbXBvcnQgeyBub3RpZnlNYW5hZ2VyIH0gZnJvbSAnLi9ub3RpZnlNYW5hZ2VyJztcbmltcG9ydCB7IE11dGF0aW9uIH0gZnJvbSAnLi9tdXRhdGlvbic7XG5pbXBvcnQgeyBtYXRjaE11dGF0aW9uLCBub29wIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBTdWJzY3JpYmFibGUgfSBmcm9tICcuL3N1YnNjcmliYWJsZSc7IC8vIFRZUEVTXG5cbi8vIENMQVNTXG5leHBvcnQgdmFyIE11dGF0aW9uQ2FjaGUgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9TdWJzY3JpYmFibGUpIHtcbiAgX2luaGVyaXRzTG9vc2UoTXV0YXRpb25DYWNoZSwgX1N1YnNjcmliYWJsZSk7XG5cbiAgZnVuY3Rpb24gTXV0YXRpb25DYWNoZShjb25maWcpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfdGhpcyA9IF9TdWJzY3JpYmFibGUuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIF90aGlzLmNvbmZpZyA9IGNvbmZpZyB8fCB7fTtcbiAgICBfdGhpcy5tdXRhdGlvbnMgPSBbXTtcbiAgICBfdGhpcy5tdXRhdGlvbklkID0gMDtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gTXV0YXRpb25DYWNoZS5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmJ1aWxkID0gZnVuY3Rpb24gYnVpbGQoY2xpZW50LCBvcHRpb25zLCBzdGF0ZSkge1xuICAgIHZhciBtdXRhdGlvbiA9IG5ldyBNdXRhdGlvbih7XG4gICAgICBtdXRhdGlvbkNhY2hlOiB0aGlzLFxuICAgICAgbXV0YXRpb25JZDogKyt0aGlzLm11dGF0aW9uSWQsXG4gICAgICBvcHRpb25zOiBjbGllbnQuZGVmYXVsdE11dGF0aW9uT3B0aW9ucyhvcHRpb25zKSxcbiAgICAgIHN0YXRlOiBzdGF0ZSxcbiAgICAgIGRlZmF1bHRPcHRpb25zOiBvcHRpb25zLm11dGF0aW9uS2V5ID8gY2xpZW50LmdldE11dGF0aW9uRGVmYXVsdHMob3B0aW9ucy5tdXRhdGlvbktleSkgOiB1bmRlZmluZWQsXG4gICAgICBtZXRhOiBvcHRpb25zLm1ldGFcbiAgICB9KTtcbiAgICB0aGlzLmFkZChtdXRhdGlvbik7XG4gICAgcmV0dXJuIG11dGF0aW9uO1xuICB9O1xuXG4gIF9wcm90by5hZGQgPSBmdW5jdGlvbiBhZGQobXV0YXRpb24pIHtcbiAgICB0aGlzLm11dGF0aW9ucy5wdXNoKG11dGF0aW9uKTtcbiAgICB0aGlzLm5vdGlmeShtdXRhdGlvbik7XG4gIH07XG5cbiAgX3Byb3RvLnJlbW92ZSA9IGZ1bmN0aW9uIHJlbW92ZShtdXRhdGlvbikge1xuICAgIHRoaXMubXV0YXRpb25zID0gdGhpcy5tdXRhdGlvbnMuZmlsdGVyKGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4geCAhPT0gbXV0YXRpb247XG4gICAgfSk7XG4gICAgbXV0YXRpb24uY2FuY2VsKCk7XG4gICAgdGhpcy5ub3RpZnkobXV0YXRpb24pO1xuICB9O1xuXG4gIF9wcm90by5jbGVhciA9IGZ1bmN0aW9uIGNsZWFyKCkge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczIubXV0YXRpb25zLmZvckVhY2goZnVuY3Rpb24gKG11dGF0aW9uKSB7XG4gICAgICAgIF90aGlzMi5yZW1vdmUobXV0YXRpb24pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmdldEFsbCA9IGZ1bmN0aW9uIGdldEFsbCgpIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGlvbnM7XG4gIH07XG5cbiAgX3Byb3RvLmZpbmQgPSBmdW5jdGlvbiBmaW5kKGZpbHRlcnMpIHtcbiAgICBpZiAodHlwZW9mIGZpbHRlcnMuZXhhY3QgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBmaWx0ZXJzLmV4YWN0ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5tdXRhdGlvbnMuZmluZChmdW5jdGlvbiAobXV0YXRpb24pIHtcbiAgICAgIHJldHVybiBtYXRjaE11dGF0aW9uKGZpbHRlcnMsIG11dGF0aW9uKTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uZmluZEFsbCA9IGZ1bmN0aW9uIGZpbmRBbGwoZmlsdGVycykge1xuICAgIHJldHVybiB0aGlzLm11dGF0aW9ucy5maWx0ZXIoZnVuY3Rpb24gKG11dGF0aW9uKSB7XG4gICAgICByZXR1cm4gbWF0Y2hNdXRhdGlvbihmaWx0ZXJzLCBtdXRhdGlvbik7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLm5vdGlmeSA9IGZ1bmN0aW9uIG5vdGlmeShtdXRhdGlvbikge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczMubGlzdGVuZXJzLmZvckVhY2goZnVuY3Rpb24gKGxpc3RlbmVyKSB7XG4gICAgICAgIGxpc3RlbmVyKG11dGF0aW9uKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5vbkZvY3VzID0gZnVuY3Rpb24gb25Gb2N1cygpIHtcbiAgICB0aGlzLnJlc3VtZVBhdXNlZE11dGF0aW9ucygpO1xuICB9O1xuXG4gIF9wcm90by5vbk9ubGluZSA9IGZ1bmN0aW9uIG9uT25saW5lKCkge1xuICAgIHRoaXMucmVzdW1lUGF1c2VkTXV0YXRpb25zKCk7XG4gIH07XG5cbiAgX3Byb3RvLnJlc3VtZVBhdXNlZE11dGF0aW9ucyA9IGZ1bmN0aW9uIHJlc3VtZVBhdXNlZE11dGF0aW9ucygpIHtcbiAgICB2YXIgcGF1c2VkTXV0YXRpb25zID0gdGhpcy5tdXRhdGlvbnMuZmlsdGVyKGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4geC5zdGF0ZS5pc1BhdXNlZDtcbiAgICB9KTtcbiAgICByZXR1cm4gbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gcGF1c2VkTXV0YXRpb25zLnJlZHVjZShmdW5jdGlvbiAocHJvbWlzZSwgbXV0YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIG11dGF0aW9uLmNvbnRpbnVlKCkuY2F0Y2gobm9vcCk7XG4gICAgICAgIH0pO1xuICAgICAgfSwgUHJvbWlzZS5yZXNvbHZlKCkpO1xuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiBNdXRhdGlvbkNhY2hlO1xufShTdWJzY3JpYmFibGUpOyIsICJpbXBvcnQgeyBpc0NhbmNlbGFibGUgfSBmcm9tICcuL3JldHJ5ZXInO1xuaW1wb3J0IHsgZ2V0QWJvcnRDb250cm9sbGVyIH0gZnJvbSAnLi91dGlscyc7XG5leHBvcnQgZnVuY3Rpb24gaW5maW5pdGVRdWVyeUJlaGF2aW9yKCkge1xuICByZXR1cm4ge1xuICAgIG9uRmV0Y2g6IGZ1bmN0aW9uIG9uRmV0Y2goY29udGV4dCkge1xuICAgICAgY29udGV4dC5mZXRjaEZuID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2NvbnRleHQkZmV0Y2hPcHRpb25zLCBfY29udGV4dCRmZXRjaE9wdGlvbnMyLCBfY29udGV4dCRmZXRjaE9wdGlvbnMzLCBfY29udGV4dCRmZXRjaE9wdGlvbnM0LCBfY29udGV4dCRzdGF0ZSRkYXRhLCBfY29udGV4dCRzdGF0ZSRkYXRhMjtcblxuICAgICAgICB2YXIgcmVmZXRjaFBhZ2UgPSAoX2NvbnRleHQkZmV0Y2hPcHRpb25zID0gY29udGV4dC5mZXRjaE9wdGlvbnMpID09IG51bGwgPyB2b2lkIDAgOiAoX2NvbnRleHQkZmV0Y2hPcHRpb25zMiA9IF9jb250ZXh0JGZldGNoT3B0aW9ucy5tZXRhKSA9PSBudWxsID8gdm9pZCAwIDogX2NvbnRleHQkZmV0Y2hPcHRpb25zMi5yZWZldGNoUGFnZTtcbiAgICAgICAgdmFyIGZldGNoTW9yZSA9IChfY29udGV4dCRmZXRjaE9wdGlvbnMzID0gY29udGV4dC5mZXRjaE9wdGlvbnMpID09IG51bGwgPyB2b2lkIDAgOiAoX2NvbnRleHQkZmV0Y2hPcHRpb25zNCA9IF9jb250ZXh0JGZldGNoT3B0aW9uczMubWV0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9jb250ZXh0JGZldGNoT3B0aW9uczQuZmV0Y2hNb3JlO1xuICAgICAgICB2YXIgcGFnZVBhcmFtID0gZmV0Y2hNb3JlID09IG51bGwgPyB2b2lkIDAgOiBmZXRjaE1vcmUucGFnZVBhcmFtO1xuICAgICAgICB2YXIgaXNGZXRjaGluZ05leHRQYWdlID0gKGZldGNoTW9yZSA9PSBudWxsID8gdm9pZCAwIDogZmV0Y2hNb3JlLmRpcmVjdGlvbikgPT09ICdmb3J3YXJkJztcbiAgICAgICAgdmFyIGlzRmV0Y2hpbmdQcmV2aW91c1BhZ2UgPSAoZmV0Y2hNb3JlID09IG51bGwgPyB2b2lkIDAgOiBmZXRjaE1vcmUuZGlyZWN0aW9uKSA9PT0gJ2JhY2t3YXJkJztcbiAgICAgICAgdmFyIG9sZFBhZ2VzID0gKChfY29udGV4dCRzdGF0ZSRkYXRhID0gY29udGV4dC5zdGF0ZS5kYXRhKSA9PSBudWxsID8gdm9pZCAwIDogX2NvbnRleHQkc3RhdGUkZGF0YS5wYWdlcykgfHwgW107XG4gICAgICAgIHZhciBvbGRQYWdlUGFyYW1zID0gKChfY29udGV4dCRzdGF0ZSRkYXRhMiA9IGNvbnRleHQuc3RhdGUuZGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9jb250ZXh0JHN0YXRlJGRhdGEyLnBhZ2VQYXJhbXMpIHx8IFtdO1xuICAgICAgICB2YXIgYWJvcnRDb250cm9sbGVyID0gZ2V0QWJvcnRDb250cm9sbGVyKCk7XG4gICAgICAgIHZhciBhYm9ydFNpZ25hbCA9IGFib3J0Q29udHJvbGxlciA9PSBudWxsID8gdm9pZCAwIDogYWJvcnRDb250cm9sbGVyLnNpZ25hbDtcbiAgICAgICAgdmFyIG5ld1BhZ2VQYXJhbXMgPSBvbGRQYWdlUGFyYW1zO1xuICAgICAgICB2YXIgY2FuY2VsbGVkID0gZmFsc2U7IC8vIEdldCBxdWVyeSBmdW5jdGlvblxuXG4gICAgICAgIHZhciBxdWVyeUZuID0gY29udGV4dC5vcHRpb25zLnF1ZXJ5Rm4gfHwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCgnTWlzc2luZyBxdWVyeUZuJyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgdmFyIGJ1aWxkTmV3UGFnZXMgPSBmdW5jdGlvbiBidWlsZE5ld1BhZ2VzKHBhZ2VzLCBwYXJhbSwgcGFnZSwgcHJldmlvdXMpIHtcbiAgICAgICAgICBuZXdQYWdlUGFyYW1zID0gcHJldmlvdXMgPyBbcGFyYW1dLmNvbmNhdChuZXdQYWdlUGFyYW1zKSA6IFtdLmNvbmNhdChuZXdQYWdlUGFyYW1zLCBbcGFyYW1dKTtcbiAgICAgICAgICByZXR1cm4gcHJldmlvdXMgPyBbcGFnZV0uY29uY2F0KHBhZ2VzKSA6IFtdLmNvbmNhdChwYWdlcywgW3BhZ2VdKTtcbiAgICAgICAgfTsgLy8gQ3JlYXRlIGZ1bmN0aW9uIHRvIGZldGNoIGEgcGFnZVxuXG5cbiAgICAgICAgdmFyIGZldGNoUGFnZSA9IGZ1bmN0aW9uIGZldGNoUGFnZShwYWdlcywgbWFudWFsLCBwYXJhbSwgcHJldmlvdXMpIHtcbiAgICAgICAgICBpZiAoY2FuY2VsbGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoJ0NhbmNlbGxlZCcpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0eXBlb2YgcGFyYW0gPT09ICd1bmRlZmluZWQnICYmICFtYW51YWwgJiYgcGFnZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHBhZ2VzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgcXVlcnlGbkNvbnRleHQgPSB7XG4gICAgICAgICAgICBxdWVyeUtleTogY29udGV4dC5xdWVyeUtleSxcbiAgICAgICAgICAgIHNpZ25hbDogYWJvcnRTaWduYWwsXG4gICAgICAgICAgICBwYWdlUGFyYW06IHBhcmFtLFxuICAgICAgICAgICAgbWV0YTogY29udGV4dC5tZXRhXG4gICAgICAgICAgfTtcbiAgICAgICAgICB2YXIgcXVlcnlGblJlc3VsdCA9IHF1ZXJ5Rm4ocXVlcnlGbkNvbnRleHQpO1xuICAgICAgICAgIHZhciBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHF1ZXJ5Rm5SZXN1bHQpLnRoZW4oZnVuY3Rpb24gKHBhZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiBidWlsZE5ld1BhZ2VzKHBhZ2VzLCBwYXJhbSwgcGFnZSwgcHJldmlvdXMpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaWYgKGlzQ2FuY2VsYWJsZShxdWVyeUZuUmVzdWx0KSkge1xuICAgICAgICAgICAgdmFyIHByb21pc2VBc0FueSA9IHByb21pc2U7XG4gICAgICAgICAgICBwcm9taXNlQXNBbnkuY2FuY2VsID0gcXVlcnlGblJlc3VsdC5jYW5jZWw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgICAgIH07XG5cbiAgICAgICAgdmFyIHByb21pc2U7IC8vIEZldGNoIGZpcnN0IHBhZ2U/XG5cbiAgICAgICAgaWYgKCFvbGRQYWdlcy5sZW5ndGgpIHtcbiAgICAgICAgICBwcm9taXNlID0gZmV0Y2hQYWdlKFtdKTtcbiAgICAgICAgfSAvLyBGZXRjaCBuZXh0IHBhZ2U/XG4gICAgICAgIGVsc2UgaWYgKGlzRmV0Y2hpbmdOZXh0UGFnZSkge1xuICAgICAgICAgICAgdmFyIG1hbnVhbCA9IHR5cGVvZiBwYWdlUGFyYW0gIT09ICd1bmRlZmluZWQnO1xuICAgICAgICAgICAgdmFyIHBhcmFtID0gbWFudWFsID8gcGFnZVBhcmFtIDogZ2V0TmV4dFBhZ2VQYXJhbShjb250ZXh0Lm9wdGlvbnMsIG9sZFBhZ2VzKTtcbiAgICAgICAgICAgIHByb21pc2UgPSBmZXRjaFBhZ2Uob2xkUGFnZXMsIG1hbnVhbCwgcGFyYW0pO1xuICAgICAgICAgIH0gLy8gRmV0Y2ggcHJldmlvdXMgcGFnZT9cbiAgICAgICAgICBlbHNlIGlmIChpc0ZldGNoaW5nUHJldmlvdXNQYWdlKSB7XG4gICAgICAgICAgICAgIHZhciBfbWFudWFsID0gdHlwZW9mIHBhZ2VQYXJhbSAhPT0gJ3VuZGVmaW5lZCc7XG5cbiAgICAgICAgICAgICAgdmFyIF9wYXJhbSA9IF9tYW51YWwgPyBwYWdlUGFyYW0gOiBnZXRQcmV2aW91c1BhZ2VQYXJhbShjb250ZXh0Lm9wdGlvbnMsIG9sZFBhZ2VzKTtcblxuICAgICAgICAgICAgICBwcm9taXNlID0gZmV0Y2hQYWdlKG9sZFBhZ2VzLCBfbWFudWFsLCBfcGFyYW0sIHRydWUpO1xuICAgICAgICAgICAgfSAvLyBSZWZldGNoIHBhZ2VzXG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgbmV3UGFnZVBhcmFtcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgdmFyIG1hbnVhbCA9IHR5cGVvZiBjb250ZXh0Lm9wdGlvbnMuZ2V0TmV4dFBhZ2VQYXJhbSA9PT0gJ3VuZGVmaW5lZCc7XG4gICAgICAgICAgICAgICAgICB2YXIgc2hvdWxkRmV0Y2hGaXJzdFBhZ2UgPSByZWZldGNoUGFnZSAmJiBvbGRQYWdlc1swXSA/IHJlZmV0Y2hQYWdlKG9sZFBhZ2VzWzBdLCAwLCBvbGRQYWdlcykgOiB0cnVlOyAvLyBGZXRjaCBmaXJzdCBwYWdlXG5cbiAgICAgICAgICAgICAgICAgIHByb21pc2UgPSBzaG91bGRGZXRjaEZpcnN0UGFnZSA/IGZldGNoUGFnZShbXSwgbWFudWFsLCBvbGRQYWdlUGFyYW1zWzBdKSA6IFByb21pc2UucmVzb2x2ZShidWlsZE5ld1BhZ2VzKFtdLCBvbGRQYWdlUGFyYW1zWzBdLCBvbGRQYWdlc1swXSkpOyAvLyBGZXRjaCByZW1haW5pbmcgcGFnZXNcblxuICAgICAgICAgICAgICAgICAgdmFyIF9sb29wID0gZnVuY3Rpb24gX2xvb3AoaSkge1xuICAgICAgICAgICAgICAgICAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKGZ1bmN0aW9uIChwYWdlcykge1xuICAgICAgICAgICAgICAgICAgICAgIHZhciBzaG91bGRGZXRjaE5leHRQYWdlID0gcmVmZXRjaFBhZ2UgJiYgb2xkUGFnZXNbaV0gPyByZWZldGNoUGFnZShvbGRQYWdlc1tpXSwgaSwgb2xkUGFnZXMpIDogdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgIGlmIChzaG91bGRGZXRjaE5leHRQYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3BhcmFtMiA9IG1hbnVhbCA/IG9sZFBhZ2VQYXJhbXNbaV0gOiBnZXROZXh0UGFnZVBhcmFtKGNvbnRleHQub3B0aW9ucywgcGFnZXMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmV0Y2hQYWdlKHBhZ2VzLCBtYW51YWwsIF9wYXJhbTIpO1xuICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoYnVpbGROZXdQYWdlcyhwYWdlcywgb2xkUGFnZVBhcmFtc1tpXSwgb2xkUGFnZXNbaV0pKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IG9sZFBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIF9sb29wKGkpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICB2YXIgZmluYWxQcm9taXNlID0gcHJvbWlzZS50aGVuKGZ1bmN0aW9uIChwYWdlcykge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwYWdlczogcGFnZXMsXG4gICAgICAgICAgICBwYWdlUGFyYW1zOiBuZXdQYWdlUGFyYW1zXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBmaW5hbFByb21pc2VBc0FueSA9IGZpbmFsUHJvbWlzZTtcblxuICAgICAgICBmaW5hbFByb21pc2VBc0FueS5jYW5jZWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY2FuY2VsbGVkID0gdHJ1ZTtcbiAgICAgICAgICBhYm9ydENvbnRyb2xsZXIgPT0gbnVsbCA/IHZvaWQgMCA6IGFib3J0Q29udHJvbGxlci5hYm9ydCgpO1xuXG4gICAgICAgICAgaWYgKGlzQ2FuY2VsYWJsZShwcm9taXNlKSkge1xuICAgICAgICAgICAgcHJvbWlzZS5jYW5jZWwoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIGZpbmFsUHJvbWlzZTtcbiAgICAgIH07XG4gICAgfVxuICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldE5leHRQYWdlUGFyYW0ob3B0aW9ucywgcGFnZXMpIHtcbiAgcmV0dXJuIG9wdGlvbnMuZ2V0TmV4dFBhZ2VQYXJhbSA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5nZXROZXh0UGFnZVBhcmFtKHBhZ2VzW3BhZ2VzLmxlbmd0aCAtIDFdLCBwYWdlcyk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0UHJldmlvdXNQYWdlUGFyYW0ob3B0aW9ucywgcGFnZXMpIHtcbiAgcmV0dXJuIG9wdGlvbnMuZ2V0UHJldmlvdXNQYWdlUGFyYW0gPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMuZ2V0UHJldmlvdXNQYWdlUGFyYW0ocGFnZXNbMF0sIHBhZ2VzKTtcbn1cbi8qKlxuICogQ2hlY2tzIGlmIHRoZXJlIGlzIGEgbmV4dCBwYWdlLlxuICogUmV0dXJucyBgdW5kZWZpbmVkYCBpZiBpdCBjYW5ub3QgYmUgZGV0ZXJtaW5lZC5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaGFzTmV4dFBhZ2Uob3B0aW9ucywgcGFnZXMpIHtcbiAgaWYgKG9wdGlvbnMuZ2V0TmV4dFBhZ2VQYXJhbSAmJiBBcnJheS5pc0FycmF5KHBhZ2VzKSkge1xuICAgIHZhciBuZXh0UGFnZVBhcmFtID0gZ2V0TmV4dFBhZ2VQYXJhbShvcHRpb25zLCBwYWdlcyk7XG4gICAgcmV0dXJuIHR5cGVvZiBuZXh0UGFnZVBhcmFtICE9PSAndW5kZWZpbmVkJyAmJiBuZXh0UGFnZVBhcmFtICE9PSBudWxsICYmIG5leHRQYWdlUGFyYW0gIT09IGZhbHNlO1xuICB9XG59XG4vKipcbiAqIENoZWNrcyBpZiB0aGVyZSBpcyBhIHByZXZpb3VzIHBhZ2UuXG4gKiBSZXR1cm5zIGB1bmRlZmluZWRgIGlmIGl0IGNhbm5vdCBiZSBkZXRlcm1pbmVkLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNQcmV2aW91c1BhZ2Uob3B0aW9ucywgcGFnZXMpIHtcbiAgaWYgKG9wdGlvbnMuZ2V0UHJldmlvdXNQYWdlUGFyYW0gJiYgQXJyYXkuaXNBcnJheShwYWdlcykpIHtcbiAgICB2YXIgcHJldmlvdXNQYWdlUGFyYW0gPSBnZXRQcmV2aW91c1BhZ2VQYXJhbShvcHRpb25zLCBwYWdlcyk7XG4gICAgcmV0dXJuIHR5cGVvZiBwcmV2aW91c1BhZ2VQYXJhbSAhPT0gJ3VuZGVmaW5lZCcgJiYgcHJldmlvdXNQYWdlUGFyYW0gIT09IG51bGwgJiYgcHJldmlvdXNQYWdlUGFyYW0gIT09IGZhbHNlO1xuICB9XG59IiwgImltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nO1xuZXhwb3J0IHZhciB1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyA9IFJlYWN0RE9NLnVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzOyIsICJpbXBvcnQgeyBub3RpZnlNYW5hZ2VyIH0gZnJvbSAnLi4vY29yZSc7XG5pbXBvcnQgeyB1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyB9IGZyb20gJy4vcmVhY3RCYXRjaGVkVXBkYXRlcyc7XG5ub3RpZnlNYW5hZ2VyLnNldEJhdGNoTm90aWZ5RnVuY3Rpb24odW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMpOyIsICJleHBvcnQgdmFyIGxvZ2dlciA9IGNvbnNvbGU7IiwgImltcG9ydCB7IHNldExvZ2dlciB9IGZyb20gJy4uL2NvcmUnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXInO1xuc2V0TG9nZ2VyKGxvZ2dlcik7IiwgImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG52YXIgZGVmYXVsdENvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dCh1bmRlZmluZWQpO1xudmFyIFF1ZXJ5Q2xpZW50U2hhcmluZ0NvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dChmYWxzZSk7IC8vIGlmIGNvbnRleHRTaGFyaW5nIGlzIG9uLCB3ZSBzaGFyZSB0aGUgZmlyc3QgYW5kIGF0IGxlYXN0IG9uZVxuLy8gaW5zdGFuY2Ugb2YgdGhlIGNvbnRleHQgYWNyb3NzIHRoZSB3aW5kb3dcbi8vIHRvIGVuc3VyZSB0aGF0IGlmIFJlYWN0IFF1ZXJ5IGlzIHVzZWQgYWNyb3NzXG4vLyBkaWZmZXJlbnQgYnVuZGxlcyBvciBtaWNyb2Zyb250ZW5kcyB0aGV5IHdpbGxcbi8vIGFsbCB1c2UgdGhlIHNhbWUgKippbnN0YW5jZSoqIG9mIGNvbnRleHQsIHJlZ2FyZGxlc3Ncbi8vIG9mIG1vZHVsZSBzY29waW5nLlxuXG5mdW5jdGlvbiBnZXRRdWVyeUNsaWVudENvbnRleHQoY29udGV4dFNoYXJpbmcpIHtcbiAgaWYgKGNvbnRleHRTaGFyaW5nICYmIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgaWYgKCF3aW5kb3cuUmVhY3RRdWVyeUNsaWVudENvbnRleHQpIHtcbiAgICAgIHdpbmRvdy5SZWFjdFF1ZXJ5Q2xpZW50Q29udGV4dCA9IGRlZmF1bHRDb250ZXh0O1xuICAgIH1cblxuICAgIHJldHVybiB3aW5kb3cuUmVhY3RRdWVyeUNsaWVudENvbnRleHQ7XG4gIH1cblxuICByZXR1cm4gZGVmYXVsdENvbnRleHQ7XG59XG5cbmV4cG9ydCB2YXIgdXNlUXVlcnlDbGllbnQgPSBmdW5jdGlvbiB1c2VRdWVyeUNsaWVudCgpIHtcbiAgdmFyIHF1ZXJ5Q2xpZW50ID0gUmVhY3QudXNlQ29udGV4dChnZXRRdWVyeUNsaWVudENvbnRleHQoUmVhY3QudXNlQ29udGV4dChRdWVyeUNsaWVudFNoYXJpbmdDb250ZXh0KSkpO1xuXG4gIGlmICghcXVlcnlDbGllbnQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFF1ZXJ5Q2xpZW50IHNldCwgdXNlIFF1ZXJ5Q2xpZW50UHJvdmlkZXIgdG8gc2V0IG9uZScpO1xuICB9XG5cbiAgcmV0dXJuIHF1ZXJ5Q2xpZW50O1xufTtcbmV4cG9ydCB2YXIgUXVlcnlDbGllbnRQcm92aWRlciA9IGZ1bmN0aW9uIFF1ZXJ5Q2xpZW50UHJvdmlkZXIoX3JlZikge1xuICB2YXIgY2xpZW50ID0gX3JlZi5jbGllbnQsXG4gICAgICBfcmVmJGNvbnRleHRTaGFyaW5nID0gX3JlZi5jb250ZXh0U2hhcmluZyxcbiAgICAgIGNvbnRleHRTaGFyaW5nID0gX3JlZiRjb250ZXh0U2hhcmluZyA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGNvbnRleHRTaGFyaW5nLFxuICAgICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuO1xuICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGNsaWVudC5tb3VudCgpO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBjbGllbnQudW5tb3VudCgpO1xuICAgIH07XG4gIH0sIFtjbGllbnRdKTtcbiAgdmFyIENvbnRleHQgPSBnZXRRdWVyeUNsaWVudENvbnRleHQoY29udGV4dFNoYXJpbmcpO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUXVlcnlDbGllbnRTaGFyaW5nQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBjb250ZXh0U2hhcmluZ1xuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IGNsaWVudFxuICB9LCBjaGlsZHJlbikpO1xufTsiLCAiXG5pbXBvcnQgeyBjcmVhdGVFbnRpdHlUcmVlIH0gZnJvbSBcIi4vRW50aXR5VHJlZVdpZGdldFwiXG5cbndpbmRvd1snT0xTV2lkZ2V0cyddID0ge1xuICAgIGNyZWF0ZUVudGl0eVRyZWVcbn1cblxuZXhwb3J0IHsgY3JlYXRlRW50aXR5VHJlZSB9XG4iLCAiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtFdWlMb2FkaW5nU3Bpbm5lciwgRXVpUHJvdmlkZXIsIEV1aVRleHR9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7UXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIsIHVzZVF1ZXJ5fSBmcm9tIFwicmVhY3QtcXVlcnlcIjtcbmltcG9ydCB7T2xzQXBpfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBpL09sc0FwaVwiO1xuaW1wb3J0IHtUYWJXaWRnZXRQcm9wc30gZnJvbSBcIi4uLy4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IHsgRW50aXR5IH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVsL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7IFRhYlByZXNlbnRhdGlvbiB9IGZyb20gXCIuL1RhYlByZXNlbnRhdGlvblwiO1xuaW1wb3J0IHsgZ2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5IH0gZnJvbSBcIi4uLy4uLy4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQge0VudGl0eVR5cGVOYW1lLCBpc0VudGl0eX0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVsL01vZGVsVHlwZUNoZWNrXCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuXG5mdW5jdGlvbiBUYWJXaWRnZXQocHJvcHM6IFRhYldpZGdldFByb3BzKSB7XG4gIGNvbnN0IHsgaXJpLCBhcGksIG9udG9sb2d5SWQsIGVudGl0eVR5cGUsIHBhcmFtZXRlciwgdXNlTGVnYWN5LCAuLi5yZXN0IH0gPSBwcm9wcztcbiAgY29uc3Qgb2xzQXBpID0gbmV3IE9sc0FwaShhcGkpO1xuXG4gIGNvbnN0IHtcbiAgICBkYXRhLFxuICAgIGlzTG9hZGluZyxcbiAgICBpc1N1Y2Nlc3MsXG4gICAgaXNFcnJvcixcbiAgICBlcnJvclxuICB9ID0gdXNlUXVlcnk8RW50aXR5PihcbiAgICBbXCJ0YWJkYXRhXCIsIGFwaSwgcGFyYW1ldGVyLCBlbnRpdHlUeXBlLCBpcmksIG9udG9sb2d5SWQsIHVzZUxlZ2FjeV0sXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgcmV0dXJuIG9sc0FwaS5nZXRFbnRpdHlPYmplY3QoaXJpLCBlbnRpdHlUeXBlLCBvbnRvbG9neUlkLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSk7XG4gICAgfVxuICApO1xuXG4gIGZ1bmN0aW9uIHJlbmRlcihkYXRhOiBFbnRpdHkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFRhYlByZXNlbnRhdGlvbiB7Li4ucmVzdH1cbiAgICAgICAgZGF0YT17ZGF0YX1cbiAgICAgICAgaXJpPXtpcml9XG4gICAgICAgIGFwaT17YXBpfVxuICAgICAgICB1c2VMZWdhY3k9e3VzZUxlZ2FjeX1cbiAgICAgICAgZW50aXR5VHlwZT17ZGF0YS5nZXRUeXBlKCkgYXMgRW50aXR5VHlwZU5hbWV9XG4gICAgICAvPlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICB7aXNMb2FkaW5nICYmIDxFdWlMb2FkaW5nU3Bpbm5lciAvPn1cbiAgICAgIHtpc0Vycm9yICYmIDxFdWlUZXh0PntnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkoZXJyb3IsIFwiZGVzY3JpcHRpb25cIil9PC9FdWlUZXh0Pn1cbiAgICAgIHtpc1N1Y2Nlc3MgJiYgZGF0YSAmJlxuICAgICAgICA8PlxuICAgICAgICAgIHtpc0VudGl0eShkYXRhKSA/IHJlbmRlcihkYXRhKSA6IG51bGx9XG4gICAgICAgIDwvPlxuICAgICAgfVxuICAgIDwvPlxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVUYWIocHJvcHM6IFRhYldpZGdldFByb3BzLCBjb250YWluZXI6IEVsZW1lbnQsIGNhbGxiYWNrPzogKCk9PnZvaWQpIHtcbiAgUmVhY3RET00ucmVuZGVyKFdyYXBwZWRUYWJXaWRnZXQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZFRhYldpZGdldChwcm9wczogVGFiV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTtcbiAgcmV0dXJuIChcbiAgICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgICA8VGFiV2lkZ2V0XG4gICAgICAgICAgICAgIGlyaT17cHJvcHMuaXJpfVxuICAgICAgICAgICAgICBhcGk9e3Byb3BzLmFwaX1cbiAgICAgICAgICAgICAgb250b2xvZ3lJZD17cHJvcHMub250b2xvZ3lJZH1cbiAgICAgICAgICAgICAgZW50aXR5VHlwZT17cHJvcHMuZW50aXR5VHlwZX1cbiAgICAgICAgICAgICAgcGFyYW1ldGVyPXtwcm9wcy5wYXJhbWV0ZXJ9XG4gICAgICAgICAgICAgIHVzZUxlZ2FjeT17cHJvcHMudXNlTGVnYWN5fVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICAgIDwvRXVpUHJvdmlkZXI+XG4gIClcbn1cblxuZXhwb3J0IHsgVGFiV2lkZ2V0LCBjcmVhdGVUYWIgfTtcbiIsICJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBFdWlGbGV4SXRlbSwgRXVpVGFiYmVkQ29udGVudCB9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7IEhpZXJhcmNoeVdpZGdldCB9IGZyb20gXCIuL0hpZXJhcmNoeVdpZGdldFwiO1xuaW1wb3J0IHsgRW50aXR5IH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVsL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7IGlzRW50aXR5LCBpc0luZGl2aWR1YWwsIGlzUHJvcGVydHkgfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWwvTW9kZWxUeXBlQ2hlY2tcIjtcbmltcG9ydCB7IEFsdGVybmF0aXZlTmFtZVRhYlByZXNlbnRhdGlvbiB9IGZyb20gXCIuL0FsdGVybmF0aXZlTmFtZVRhYldpZGdldC9BbHRlcm5hdGl2ZU5hbWVUYWJQcmVzZW50YXRpb25cIjtcbmltcG9ydCB7IENyb3NzUmVmVGFiUHJlc2VudGF0aW9uIH0gZnJvbSBcIi4vQ3Jvc3NSZWZXaWRnZXQvQ3Jvc3NSZWZUYWJQcmVzZW50YXRpb25cIjtcbmltcG9ydCB7IEhpZXJhcmNoeVdpZGdldERlcHJlY2F0ZWQgfSBmcm9tIFwiLi9IaWVyYXJjaHlXaWRnZXREZXByZWNhdGVkXCI7XG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWwvUmVpZmllZFwiO1xuaW1wb3J0IHtUYWJQcmVzZW50YXRpb25Qcm9wc30gZnJvbSBcIi4uLy4uLy4uLy4uL2FwcC90eXBlc1wiO1xuXG5mdW5jdGlvbiBUYWJQcmVzZW50YXRpb24ocHJvcHM6IFRhYlByZXNlbnRhdGlvblByb3BzKSB7XG4gIGZ1bmN0aW9uIHJlbmRlcihkYXRhOiBFbnRpdHkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAgICA8RXVpVGFiYmVkQ29udGVudCBzaXplPVwic1wiIHRhYnM9e1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGVudDogKFxuICAgICAgICAgICAgICAgICAgPEFsdGVybmF0aXZlTmFtZVRhYlByZXNlbnRhdGlvbiBzeW5vbnltcz17ZGF0YS5nZXRTeW5vbnltcygpLm1hcChzeW5vbnltID0+IHN5bm9ueW0udmFsdWUpfSAvPlxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgaWQ6IFwidGFiMVwiLFxuICAgICAgICAgICAgICAgIG5hbWU6IFwiQWx0ZXJuYXRpdmUgTmFtZXNcIlxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGVudDogKFxuICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBvdmVyZmxvdzogXCJhdXRvXCJ9fT5cbiAgICAgICAgICAgICAgICAgICAge3Byb3BzLnVzZUxlZ2FjeSA9PSB1bmRlZmluZWQgfHwgcHJvcHMudXNlTGVnYWN5XG4gICAgICAgICAgICAgICAgICAgICAgPyA8SGllcmFyY2h5V2lkZ2V0RGVwcmVjYXRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgb250b2xvZ3lJZD17cHJvcHMub250b2xvZ3lJZCB8fCAoKGRhdGEgJiYgZGF0YS5nZXRPbnRvbG9neUlkKCkgIT09IHVuZGVmaW5lZCkgPyBkYXRhLmdldE9udG9sb2d5SWQoKSA6IFwiXCIpfVxuICAgICAgICAgICAgICAgICAgICAgICAgYXBpPXtwcm9wcy5hcGl9XG4gICAgICAgICAgICAgICAgICAgICAgICBpcmk9e3Byb3BzLmlyaX1cblxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgOiA8SGllcmFyY2h5V2lkZ2V0XG4gICAgICAgICAgICAgICAgICAgICAgICBhcGk9e3Byb3BzLmFwaX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlyaT17cHJvcHMuaXJpfVxuICAgICAgICAgICAgICAgICAgICAgICAgb250b2xvZ3lJZD17cHJvcHMub250b2xvZ3lJZCB8fCAoKGRhdGEgJiYgZGF0YS5nZXRPbnRvbG9neUlkKCkgIT09IHVuZGVmaW5lZCkgPyBkYXRhLmdldE9udG9sb2d5SWQoKSA6IFwiXCIpfVxuICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5VHlwZT17cHJvcHMuZW50aXR5VHlwZX1cbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBpZDogXCJ0YWIyXCIsXG4gICAgICAgICAgICAgICAgbmFtZTogXCJIaWVyYXJjaHlcIlxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGVudDpcbiAgICAgICAgICAgICAgICAgIDxDcm9zc1JlZlRhYlByZXNlbnRhdGlvbiBjcm9zc3JlZnM9e1JlaWZpZWQuZnJvbUpzb24oZGF0YS5nZXRDcm9zc1JlZmVyZW5jZXMoKSkubWFwKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUudmFsdWU7XG4gICAgICAgICAgICAgICAgICB9KX0gLz4sXG4gICAgICAgICAgICAgICAgaWQ6IFwidGFiM1wiLFxuICAgICAgICAgICAgICAgIG5hbWU6IFwiQ3Jvc3MgcmVmZXJlbmNlc1wiXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9IC8+XG4gICAgICA8Lz5cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAge2lzRW50aXR5KHByb3BzLmRhdGEpIHx8IGlzUHJvcGVydHkocHJvcHMuZGF0YSkgfHwgaXNJbmRpdmlkdWFsKHByb3BzLmRhdGEpID8gcmVuZGVyKHByb3BzLmRhdGEpIDogbnVsbH1cbiAgICA8Lz5cbiAgKTtcbn1cblxuZXhwb3J0IHsgVGFiUHJlc2VudGF0aW9uIH07XG4iLCAiaW1wb3J0IHtFdWlQYW5lbCwgRXVpUHJvdmlkZXIsIEV1aVRyZWVWaWV3fSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQgeyBOb2RlIH0gZnJvbSBcIkBlbGFzdGljL2V1aS9zcmMvY29tcG9uZW50cy90cmVlX3ZpZXcvdHJlZV92aWV3XCI7XG5pbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7UXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIsIHVzZVF1ZXJ5fSBmcm9tIFwicmVhY3QtcXVlcnlcIjtcbmltcG9ydCB7IGZldGNoX2RhdGEsIGdldF91cmxfcHJlZml4IH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL2FwaS9oaWVyYXJjaHlfd2lkZ2V0X2RlcHJlY2F0ZWRcIjtcbmltcG9ydCB7IE9sc0FwaSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9hcGkvT2xzQXBpXCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuLyoqXG4gKiBSZXNwb25zZSBmcm9tIE9MU1xuICovXG5pbnRlcmZhY2UgU2VtYW50aWNSZXNwb25zZSB7XG4gIGlkOiBzdHJpbmc7XG4gIHBhcmVudDogc3RyaW5nO1xuICBpcmk6IHN0cmluZztcbiAgdGV4dDogc3RyaW5nO1xuICAvKiBzdGF0ZToge1xuICAgIG9wZW5lZDogYm9vbGVhbjtcbiAgfTsgKi9cbiAgY2hpbGRyZW46IGJvb2xlYW47XG4gIC8qIGFfYXR0cjoge1xuICAgIGlyaTogc3RyaW5nO1xuICAgIG9udG9sb2d5X25hbWU6IHN0cmluZztcbiAgICB0aXRsZTogc3RyaW5nO1xuICAgIGNsYXNzOiBzdHJpbmc7XG4gIH07ICovXG4gIC8vIG9udG9sb2d5X25hbWU6IHN0cmluZztcbn1cbmNsYXNzIEhpZXJhcmNoeVRyZWUgaW1wbGVtZW50cyBOb2RlIHtcbiAgdXJsOiBzdHJpbmc7XG4gIGlyaTogc3RyaW5nO1xuICBsYWJlbDogUmVhY3QuUmVhY3ROb2RlO1xuICBpZDogc3RyaW5nO1xuICBpc0V4cGFuZGVkPzogYm9vbGVhbiA9IHRydWU7XG4gIGNoaWxkcmVuOiBBcnJheTxIaWVyYXJjaHlUcmVlPiA9IFtdO1xuICBpY29uOiBSZWFjdC5SZWFjdEVsZW1lbnQgPSAoPD4rPC8+KTtcbiAgaWNvbldoZW5FeHBhbmRlZDogUmVhY3QuUmVhY3RFbGVtZW50ID0gKDw+LTwvPik7XG4gIGNvbnN0cnVjdG9yKGxhYmVsOiBSZWFjdC5SZWFjdE5vZGUsIGlkOiBzdHJpbmcsIHVybDogc3RyaW5nLCBpcmk6IHN0cmluZykge1xuICAgIHRoaXMubGFiZWwgPSBsYWJlbDtcbiAgICB0aGlzLmlkID0gaWQ7XG4gICAgdGhpcy5pcmkgPSBpcmk7XG4gICAgdGhpcy51cmwgPSB1cmw7XG4gIH1cbiAgc2V0Y2hpbGQoY2hpbGQ6IEhpZXJhcmNoeVRyZWUpIHtcbiAgICB0aGlzLmNoaWxkcmVuLnB1c2goY2hpbGQpO1xuICAgIGlmICh0aGlzLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuaWNvbiA9IDw+KzwvPjtcbiAgICB9XG4gIH1cbiAgaXNfcm9vdCgpIHtcbiAgICByZXR1cm4gdGhpcy5pZCA9PT0gXCIjXCI7XG4gIH1cbiAgdG9fc3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMubGFiZWwgKyBcIlsgXCIgKyB0aGlzLmNoaWxkcmVuLm1hcCgodmFsdWUpID0+IHZhbHVlLnRvX3N0cmluZygpKSArIFwiIF1cIlxuICAgICk7XG4gIH1cbiAgY2FsbGJhY2soKSB7IC8vVE9ETyBoYW5kbGUgdmlhIE9sc0FwaS5nZXRUZXJtVHJlZSB3aXRoIGNoaWxkIHBhcmFtXG4gICAgaWYgKHRoaXMuaXNFeHBhbmRlZCkgcmV0dXJuIFwiXCI7XG4gICAgY29uc3QgYXBpX2RhdGFfb25jbGljayA9XG4gICAgICB0aGlzLnVybCArXG4gICAgICBlbmNvZGVVUklDb21wb25lbnQoZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMuaXJpKSkgK1xuICAgICAgXCIvanN0cmVlL2NoaWxkcmVuL1wiICtcbiAgICAgIHRoaXMuaWQ7XG4gICAgZmV0Y2hfZGF0YShhcGlfZGF0YV9vbmNsaWNrKS50aGVuKChyZXMpID0+IHtcbiAgICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgICAgIGNyZWF0ZV90cmVlKHRoaXMsIHJlcywgdGhpcy51cmwpO1xuICAgIH0pO1xuICAgIHJldHVybiBcIlwiO1xuICB9XG59XG5jb25zdCBjcmVhdGVfdHJlZSA9IChcbiAgdHJlZTogSGllcmFyY2h5VHJlZSxcbiAgYXJyOiBBcnJheTxTZW1hbnRpY1Jlc3BvbnNlPixcbiAgdXJsOiBzdHJpbmdcbikgPT4ge1xuICBhcnJcbiAgICAuZmlsdGVyKCh2YWx1ZSkgPT4gdmFsdWUucGFyZW50ID09PSB0cmVlLmlkKVxuICAgIC5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuICAgICAgdHJlZS5zZXRjaGlsZChcbiAgICAgICAgbmV3IEhpZXJhcmNoeVRyZWUodmFsdWUudGV4dCwgdmFsdWUuaWQsIHVybCwgdmFsdWUuaXJpKVxuICAgICAgKTtcbiAgICB9KTtcbiAgICB0cmVlLmNoaWxkcmVuLm1hcCgodmFsdWUpID0+IGNyZWF0ZV90cmVlKHZhbHVlLCBhcnIsIHVybCkpO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBIaWVyYXJjaHlXaWRnZXREZXByZWNhdGVkUHJvcHMge1xuICBpcmk/OiBzdHJpbmc7XG4gIG9udG9sb2d5SWQ6IHN0cmluZztcbiAgYXBpOiBzdHJpbmc7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFRyZWUob2xzQXBpOiBPbHNBcGksIG9udG9sb2d5SUQ6IHN0cmluZywgaXJpPzogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBvbHNBcGkuZ2V0VGVybVRyZWUoe29udG9sb2d5SWQ6IG9udG9sb2d5SUQsIHRlcm1Jcmk6IGlyaX0sIHt2aWV3TW9kZTogXCJBbGxcIiwgc2libGluZ3M6IGZhbHNlfSwgdW5kZWZpbmVkLCB1bmRlZmluZWQpXG4gICAgLmNhdGNoKChlcnJvcikgPT4gY29uc29sZS5sb2coZXJyb3IpKTtcbiAgaWYgKGlyaSkgcmV0dXJuIHJlc3BvbnNlXG4gIGVsc2UgeyAvL3Jvb3RzIGhhdmUgYmVlbiBxdWVyaWVkLCBhbmQgdGhlIHJlc3BvbnNlIG5lZWRzIHJlc3RydWN0dXJpbmcgdG8gYmVjb21lIFNlbWFudGljUmVzcG9uc2VcbiAgICByZXR1cm4gcmVzcG9uc2UuX2VtYmVkZGVkLnRlcm1zLm1hcChcbiAgICAgICh4OiB7IGlyaTogc3RyaW5nLCBsYWJlbDogc3RyaW5nLCBoYXNfY2hpbGRyZW46IGJvb2xlYW4gfSwgaTogbnVtYmVyKSA9PlxuICAgICAgICAoe2lkOiAoKytpKS50b1N0cmluZygpLCBwYXJlbnQ6ICcjJywgaXJpOiB4LmlyaSwgdGV4dDogeC5sYWJlbCwgY2hpbGRyZW46IHguaGFzX2NoaWxkcmVufSlcbiAgICApO1xuICB9XG59XG5cbmNvbnN0IEhpZXJhcmNoeVdpZGdldERlcHJlY2F0ZWQgPSAocHJvcHM6IEhpZXJhcmNoeVdpZGdldERlcHJlY2F0ZWRQcm9wcykgPT4ge1xuICBjb25zdCB7IGlyaSwgb250b2xvZ3lJZCwgYXBpIH0gPSBwcm9wcztcbiAgY29uc3QgW3RyZWVJdGVtcywgc2V0VHJlZUl0ZW1zXSA9IHVzZVN0YXRlPEhpZXJhcmNoeVRyZWVbXT4oKTtcbiAgY29uc3Qgb2xzQXBpID0gbmV3IE9sc0FwaShhcGkpO1xuICBjb25zdCBsaW5rVG9TZWxmID0gYXBpK1wib250b2xvZ2llcy9cIitvbnRvbG9neUlkK1wiL3Rlcm1zL1wiXG5cbiAgY29uc3QgZmV0Y2hDaGlsZHJlbiA9IGFzeW5jIChjaGlsZDogSGllcmFyY2h5VHJlZSkgPT4geyAvL2NvdWxkIGJlIGdpdmVuIHRvIEhpZXJhcmNoeVRyZWUgbm9kZXMgZm9yIG9uQ2xpY2sgY2FsbGJhY2tzXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBvbHNBcGkuZ2V0VGVybVRyZWUoe29udG9sb2d5SWQ6IG9udG9sb2d5SWQsIHRlcm1Jcmk6IGlyaX0sIHtjaGlsZDogY2hpbGQuaWR9LCB1bmRlZmluZWQsIHVuZGVmaW5lZClcbiAgICAgIC5jYXRjaCgoZXJyb3IpID0+IGNvbnNvbGUubG9nKGVycm9yKSk7XG4gICAgY2hpbGQuY2hpbGRyZW4gPSBbXTtcbiAgICBjcmVhdGVfdHJlZShjaGlsZCwgcmVzcG9uc2UsIGdldF91cmxfcHJlZml4KGxpbmtUb1NlbGYpKTtcbiAgfVxuXG4gIC8vaW5pdGlhbCB0cmVlIHF1ZXJ5XG4gIHVzZVF1ZXJ5PEFycmF5PFNlbWFudGljUmVzcG9uc2U+PihbYXBpLCBcImdldFRlcm1UcmVlXCIsIG9udG9sb2d5SWQsIGlyaV0sICgpID0+IHtcbiAgICByZXR1cm4gZ2V0VHJlZShvbHNBcGksIG9udG9sb2d5SWQsIGlyaSlcbiAgICAgIC50aGVuKChyZXMpID0+IHtcbiAgICAgICAgY29uc3Qgcm9vdCA9IG5ldyBIaWVyYXJjaHlUcmVlKFwiI1wiLCBcIiNcIiwgXCJcIiwgXCJcIik7XG4gICAgICAgIGlmIChyZXMpIGNyZWF0ZV90cmVlKHJvb3QsIHJlcywgZ2V0X3VybF9wcmVmaXgobGlua1RvU2VsZikpO1xuICAgICAgICBzZXRUcmVlSXRlbXMocm9vdC5jaGlsZHJlbik7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KTtcbiAgfSk7XG4gIHJldHVybiAoXG4gICAgPEV1aVBhbmVsPlxuICAgICAge3RyZWVJdGVtcyAmJiAoXG4gICAgICAgIDxFdWlUcmVlVmlld1xuICAgICAgICAgIGV4cGFuZEJ5RGVmYXVsdD17dHJ1ZX1cbiAgICAgICAgICBhcmlhLWxhYmVsPVwiSGllcmFyY2h5VGFiXCJcbiAgICAgICAgICBpdGVtcz17dHJlZUl0ZW1zfVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICA8L0V1aVBhbmVsPlxuICApO1xufTtcblxuZnVuY3Rpb24gY3JlYXRlSGllcmFyY2h5RGVwcmVjYXRlZChwcm9wczogSGllcmFyY2h5V2lkZ2V0RGVwcmVjYXRlZFByb3BzLCBjb250YWluZXI6IGFueSwgY2FsbGJhY2s/OiAoKT0+dm9pZCkge1xuICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZEhpZXJhcmNoeVdpZGdldERlcHJlY2F0ZWQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZEhpZXJhcmNoeVdpZGdldERlcHJlY2F0ZWQocHJvcHM6IEhpZXJhcmNoeVdpZGdldERlcHJlY2F0ZWRQcm9wcykge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gKFxuICAgICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCI+XG4gICAgICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgICAgIDxIaWVyYXJjaHlXaWRnZXREZXByZWNhdGVkXG4gICAgICAgICAgICAgIG9udG9sb2d5SWQ9e3Byb3BzLm9udG9sb2d5SWR9XG4gICAgICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgICAgICBpcmk9e3Byb3BzLmlyaX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgICA8L0V1aVByb3ZpZGVyPlxuICApXG59XG5cbmV4cG9ydCB7IGNyZWF0ZUhpZXJhcmNoeURlcHJlY2F0ZWQsIEhpZXJhcmNoeVdpZGdldERlcHJlY2F0ZWQgfTsiLCAiZXhwb3J0IGZ1bmN0aW9uIGdldENsYXNzTmFtZShjbGFzc2lkOiBzdHJpbmcpIHtcbiAgcmV0dXJuIGZldGNoKFxuICAgIFwiaHR0cHM6Ly9zZW1hbnRpY2xvb2t1cC56Ym1lZC5kZS9vbHMvYXBpL29udG9sb2dpZXMvXCIgK1xuICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KGNsYXNzaWQpLFxuICAgIHtcbiAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgQWNjZXB0OiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICB9LFxuICAgIH1cbiAgKVxuICAgIC50aGVuKChzKSA9PiBzLmpzb24oKSlcbiAgICAudGhlbigocykgPT4ge1xuICAgICAgcmV0dXJuIHsgY2xhc3NJRDogY2xhc3NpZCwgcHJlZkxhYmVsOiBzLmNvbmZpZz8udGl0bGUgfTtcbiAgICB9KVxuICAgIC5jYXRjaCgocykgPT4ge1xuICAgICAgcmV0dXJuIHsgY2xhc3NJRDogY2xhc3NpZCwgcHJlZkxhYmVsOiB1bmRlZmluZWQgfTtcbiAgICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZldGNoQ29uY2VwdEJ5SWQoaWQ6IHN0cmluZykge1xuICByZXR1cm4gZmV0Y2goXG4gICAgXCJodHRwczovL3NlbWFudGljbG9va3VwLnpibWVkLmRlL29scy9hcGkvdGVybXMvXCIgK1xuICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KGVuY29kZVVSSUNvbXBvbmVudChpZCkpLFxuICAgIHtcbiAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgQWNjZXB0OiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICB9LFxuICAgIH1cbiAgKVxuICAgIC50aGVuKChzKSA9PiBzLmpzb24oKSlcbiAgICAudGhlbigocykgPT4ge1xuICAgICAgcmV0dXJuIHsgY29uY2VwdElkOiBpZCwgY29uY2VwdDogcz8uX2VtYmVkZGVkPy50ZXJtc1swXSB9O1xuICAgIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXV0b2NvbXBsZXRlQ29uY2VwdChcbiAgdGV4dDogc3RyaW5nLFxuICBvbnRvbG9neTogc3RyaW5nIHwgdW5kZWZpbmVkXG4pIHtcbiAgbGV0IHF1ZXJ0ID0gXCJcIjtcbiAgaWYgKG9udG9sb2d5ICE9PSB1bmRlZmluZWQpIHtcbiAgICBxdWVydCA9IFwiJm9udG9sb2d5PVwiICsgb250b2xvZ3k7XG4gIH1cbiAgcmV0dXJuIGZldGNoKFxuICAgIFwiaHR0cHM6Ly9zZW1hbnRpY2xvb2t1cC56Ym1lZC5kZS9vbHMvYXBpL3NlbGVjdD9xdWVyeUZpZWxkcz1sYWJlbCxzeW5vbnltLHNob3J0X2Zvcm0sb2JvX2lkJmdyb3VwRmllbGQ9dHJ1ZSZ0eXBlPWNsYXNzJnE9XCIgK1xuICAgICAgdGV4dCArXG4gICAgICBxdWVydCxcbiAgICB7XG4gICAgICBtZXRob2Q6IFwiR0VUXCIsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgIEFjY2VwdDogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgfSxcbiAgICB9XG4gIClcbiAgICAudGhlbigocykgPT4gcy5qc29uKCkpXG4gICAgLnRoZW4oKHMpID0+IHtcbiAgICAgIHJldHVybiBzPy5yZXNwb25zZT8uZG9jcy5tYXAoKHA6IGFueSkgPT4gbWFwT2xzVG9JcmlBbmROYW1lVHVwbGUocCkpO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBtYXBPbHNUb0lyaUFuZE5hbWVUdXBsZShpdGVtOiBhbnkpIHtcbiAgcmV0dXJuIHsgaXJpOiBpdGVtPy5pcmksIGxhYmVsOiBpdGVtPy5sYWJlbCB9O1xufVxuXG5leHBvcnQgY29uc3QgZmV0Y2hfZGF0YSA9ICh1cmw6IHN0cmluZykgPT4ge1xuICByZXR1cm4gKFxuICAgIGZldGNoKHVybCwge1xuICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICBBY2NlcHQ6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgIH0sXG4gICAgfSlcbiAgICAgIC50aGVuKChyZXMpID0+IHJlcy5qc29uKCkpXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm9kZS9oYW5kbGUtY2FsbGJhY2stZXJyXG4gICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9KVxuICApO1xufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIHVybCBHZXQgdXJsIHdpdGggaHR0cCBvciBodHRwcyBwcm90b2NvbFxuICogQHJldHVybnMgY29uY2F0aW5hdGUgcyB0byBodHRwXG4gKi9cbmV4cG9ydCBjb25zdCBmaXhfdXJsID0gKHVybDogc3RyaW5nKSA9PiB7XG4gIGlmICh1cmwuc3Vic3RyKDAsIDUpID09PSBcImh0dHA6XCIpIHtcbiAgICByZXR1cm4gdXJsLnJlcGxhY2UoXCJodHRwXCIsIFwiaHR0cHNcIik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIHVybFxuICogQHJldHVybnMgcmV0dXJuIHVybCBmcm9tIGh0dHBzIHRvIC90ZXJtc1xuICovXG5leHBvcnQgY29uc3QgZ2V0X3VybF9wcmVmaXggPSAodXJsOiBzdHJpbmcgfCB1bmRlZmluZWQpID0+IHtcbiAgaWYgKHVybCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gXCJcIjtcbiAgcmV0dXJuIGZpeF91cmwodXJsLnN1YnN0cmluZygwLCB1cmwuc2VhcmNoKFwiL3Rlcm1zXCIpICsgNykpO1xufTsiLCAiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtRdWVyeUNsaWVudCwgUXVlcnlDbGllbnRQcm92aWRlciwgdXNlUXVlcnl9IGZyb20gXCJyZWFjdC1xdWVyeVwiO1xuaW1wb3J0IHtFdWlMb2FkaW5nU3Bpbm5lciwgRXVpUHJvdmlkZXIsIEV1aVRleHR9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7T2xzQXBpfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBpL09sc0FwaVwiO1xuaW1wb3J0IHsgZ2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5IH0gZnJvbSBcIi4uLy4uLy4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQge1RpdGxlV2lkZ2V0UHJvcHN9IGZyb20gXCIuLi8uLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCB7aXNPbnRvbG9neX0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVsL01vZGVsVHlwZUNoZWNrXCI7XG5pbXBvcnQgeyBUaGluZyB9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbC9pbnRlcmZhY2VzXCI7XG5pbXBvcnQgeyBUaXRsZVByZXNlbnRhdGlvbiB9IGZyb20gXCIuL1RpdGxlUHJlc2VudGF0aW9uXCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuXG5jb25zdCBOT19USVRMRSA9IFwiTm8gdGl0bGUgYXZhaWxhYmxlLlwiO1xuXG5mdW5jdGlvbiBUaXRsZVdpZGdldChwcm9wczogVGl0bGVXaWRnZXRQcm9wcykge1xuICAgIGNvbnN0IHtpcmksIG9udG9sb2d5SWQsIGFwaSwgdGl0bGVUZXh0LCB0aGluZ1R5cGUsIHBhcmFtZXRlciwgdXNlTGVnYWN5LCBkZWZhdWx0X3ZhbHVlfSA9IHByb3BzO1xuICAgIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICBjb25zdCB7XG4gICAgZGF0YSxcbiAgICBpc0xvYWRpbmcsXG4gICAgaXNTdWNjZXNzLFxuICAgIGlzRXJyb3IsXG4gICAgZXJyb3JcbiAgfSA9IHVzZVF1ZXJ5PFRoaW5nPihcbiAgICBbXCJtZXRhZGF0YVwiLCBhcGksIHBhcmFtZXRlciwgdGhpbmdUeXBlLCBpcmksIG9udG9sb2d5SWQsIHVzZUxlZ2FjeV0sXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgcmV0dXJuIG9sc0FwaS5nZXRUaGluZ09iamVjdChpcmksIHRoaW5nVHlwZSwgb250b2xvZ3lJZCwgcGFyYW1ldGVyLCB1c2VMZWdhY3kpO1xuICAgIH1cbiAgKTtcblxuXG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAge2lzTG9hZGluZyAmJiA8RXVpTG9hZGluZ1NwaW5uZXIgc2l6ZT1cInNcIiAvPn1cbiAgICAgIHtpc1N1Y2Nlc3MgJiYgZGF0YSAmJlxuICAgICAgICA8VGl0bGVQcmVzZW50YXRpb24gdGl0bGU9e3RpdGxlVGV4dCB8fCAoaXNPbnRvbG9neShkYXRhKSA/IGRhdGEuZ2V0TmFtZSgpIDogZGF0YS5nZXRMYWJlbCgpKSB8fCBkZWZhdWx0X3ZhbHVlIHx8IE5PX1RJVExFfSAvPlxuICAgICAgfVxuICAgICAge2lzRXJyb3IgJiYgPEV1aVRleHQ+e2dldEVycm9yTWVzc2FnZVRvRGlzcGxheShlcnJvciwgXCJ0aXRsZVwiKX08L0V1aVRleHQ+fVxuICAgIDwvPlxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVUaXRsZShwcm9wczogVGl0bGVXaWRnZXRQcm9wcywgY29udGFpbmVyOiBFbGVtZW50LCBjYWxsYmFjaz86ICgpPT52b2lkKSB7XG4gICAgUmVhY3RET00ucmVuZGVyKFdyYXBwZWRUaXRsZVdpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkVGl0bGVXaWRnZXQocHJvcHM6IFRpdGxlV2lkZ2V0UHJvcHMpIHtcbiAgICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICAgIHJldHVybiAoXG4gICAgICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgICAgICAgICAgPFRpdGxlV2lkZ2V0XG4gICAgICAgICAgICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgICAgICAgICAgICB0aGluZ1R5cGU9e3Byb3BzLnRoaW5nVHlwZX1cbiAgICAgICAgICAgICAgICAgICAgaXJpPXtwcm9wcy5pcml9XG4gICAgICAgICAgICAgICAgICAgIG9udG9sb2d5SWQ9e3Byb3BzLm9udG9sb2d5SWR9XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlVGV4dD17cHJvcHMudGl0bGVUZXh0fVxuICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXI9e3Byb3BzLnBhcmFtZXRlcn1cbiAgICAgICAgICAgICAgICAgICAgdXNlTGVnYWN5PXtwcm9wcy51c2VMZWdhY3l9XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRfdmFsdWU9e3Byb3BzLmRlZmF1bHRfdmFsdWV9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICAgICAgPC9FdWlQcm92aWRlcj5cbiAgICApXG59XG5cbmV4cG9ydCB7IFRpdGxlV2lkZ2V0LCBjcmVhdGVUaXRsZSB9O1xuIiwgImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEV1aVRleHQgfSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQge1RpdGxlUHJlc2VudGF0aW9uUHJvcHN9IGZyb20gXCIuLi8uLi8uLi8uLi9hcHAvdHlwZXNcIjtcblxuZnVuY3Rpb24gVGl0bGVQcmVzZW50YXRpb24ocHJvcHM6IFRpdGxlUHJlc2VudGF0aW9uUHJvcHMpIHtcblxuICByZXR1cm4gKFxuICAgIDxFdWlUZXh0Pntwcm9wcy50aXRsZVRleHQgfHwgcHJvcHMudGl0bGV9PC9FdWlUZXh0PlxuICApO1xufVxuXG5leHBvcnQgeyBUaXRsZVByZXNlbnRhdGlvbiB9O1xuIiwgImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7RXVpRmxleEdyb3VwLCBFdWlGbGV4SXRlbSwgRXVpTG9hZGluZ1NwaW5uZXIsIEV1aVByb3ZpZGVyLCBFdWlUZXh0fSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQgeyBJcmlXaWRnZXQgfSBmcm9tIFwiLi9JcmlXaWRnZXRcIjtcbmltcG9ydCB7UXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIsIHVzZVF1ZXJ5fSBmcm9tIFwicmVhY3QtcXVlcnlcIjtcbmltcG9ydCB7T2xzQXBpfSBmcm9tIFwiLi4vLi4vLi4vYXBpL09sc0FwaVwiO1xuaW1wb3J0IHtNZXRhZGF0YVdpZGdldFByb3BzfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgeyBFbnRpdHksIFRoaW5nIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVsL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7IEJyZWFkY3J1bWJQcmVzZW50YXRpb24gfSBmcm9tIFwiLi9CcmVhZGNydW1iV2lkZ2V0L0JyZWFkY3J1bWJQcmVzZW50YXRpb25cIjtcbmltcG9ydCB7IFRhYlByZXNlbnRhdGlvbiB9IGZyb20gXCIuL1RhYldpZGdldC9UYWJQcmVzZW50YXRpb25cIjtcbmltcG9ydCB7IERlc2NyaXB0aW9uUHJlc2VudGF0aW9uIH0gZnJvbSBcIi4vRGVzY3JpcHRpb25XaWRnZXQvRGVzY3JpcHRpb25QcmVzZW50YXRpb25cIjtcbmltcG9ydCB7IFRpdGxlUHJlc2VudGF0aW9uIH0gZnJvbSBcIi4vVGl0bGVXaWRnZXQvVGl0bGVQcmVzZW50YXRpb25cIjtcbmltcG9ydCB7IGdldEVycm9yTWVzc2FnZVRvRGlzcGxheSB9IGZyb20gXCIuLi8uLi8uLi9hcHAvdXRpbFwiO1xuaW1wb3J0IHsgaXNFbnRpdHkgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvTW9kZWxUeXBlQ2hlY2tcIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5cbmZ1bmN0aW9uIE1ldGFkYXRhV2lkZ2V0KHByb3BzOiBNZXRhZGF0YVdpZGdldFByb3BzKSB7XG4gIGNvbnN0IHsgaXJpLCBhcGksIG9udG9sb2d5SWQsIGVudGl0eVR5cGUsIHBhcmFtZXRlciwgdXNlTGVnYWN5IH0gPSBwcm9wcztcbiAgY29uc3Qgb2xzQXBpID0gbmV3IE9sc0FwaShhcGkpO1xuXG4gIGNvbnN0IHtcbiAgICBkYXRhLFxuICAgIGlzTG9hZGluZyxcbiAgICBpc1N1Y2Nlc3MsXG4gICAgaXNFcnJvcixcbiAgICBlcnJvclxuICB9ID0gdXNlUXVlcnk8VGhpbmc+KFxuICAgIFtcIm1ldGFkYXRhXCIsIGFwaSwgcGFyYW1ldGVyLCBlbnRpdHlUeXBlLCBpcmksIG9udG9sb2d5SWQsIHVzZUxlZ2FjeV0sXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgcmV0dXJuIG9sc0FwaS5nZXRFbnRpdHlPYmplY3QoaXJpLCBlbnRpdHlUeXBlLCBvbnRvbG9neUlkLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSk7XG4gICAgfVxuICApO1xuXG4gIGZ1bmN0aW9uIHJlbmRlcihkYXRhOiBFbnRpdHkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAgPEV1aUZsZXhHcm91cCBkaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICA8RXVpRmxleEl0ZW0gZ3Jvdz17ZmFsc2V9PlxuICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgPEJyZWFkY3J1bWJQcmVzZW50YXRpb25cbiAgICAgICAgICAgICAgICAgICAgaXNEZWZpbmluZ09udG9sb2d5PXtkYXRhLmdldElzRGVmaW5pbmdPbnRvbG9neSgpfVxuICAgICAgICAgICAgICAgICAgICBvbnRvbG9neU5hbWU9e2RhdGEuZ2V0T250b2xvZ3lJZCgpfVxuICAgICAgICAgICAgICAgICAgICBzaG9ydEZvcm09e2RhdGEuZ2V0U2hvcnRGb3JtKCl9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgIDxFdWlGbGV4R3JvdXAgZGlyZWN0aW9uPVwiY29sdW1uXCI+XG4gICAgICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICA8RXVpRmxleEdyb3VwPlxuICAgICAgICAgICAgICAgICAgPEV1aUZsZXhJdGVtIGdyb3c9e2ZhbHNlfSBzdHlsZT17eyBtYXhXaWR0aDogNjAwIH19PlxuICAgICAgICAgICAgICAgICAgICA8SXJpV2lkZ2V0XG4gICAgICAgICAgICAgICAgICAgICAgaXJpPXtpcml9XG4gICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyPXtwYXJhbWV0ZXJ9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgIDwvRXVpRmxleEdyb3VwPlxuICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICA8RXVpRmxleEl0ZW0gZ3Jvdz17ZmFsc2V9IHN0eWxlPXt7IG1heFdpZHRoOiA2MDAgfX0+XG4gICAgICAgICAgICAgICAgPFRpdGxlUHJlc2VudGF0aW9uXG4gICAgICAgICAgICAgICAgICB0aXRsZT17ZGF0YS5nZXRMYWJlbCgpfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICAgICA8L0V1aUZsZXhHcm91cD5cbiAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICAgIDxFdWlGbGV4SXRlbSBzdHlsZT17eyBtYXhXaWR0aDogNjAwIH19PlxuICAgICAgICAgICAgPERlc2NyaXB0aW9uUHJlc2VudGF0aW9uXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uPXtkYXRhLmdldERlc2NyaXB0aW9uKCl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICAgPEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICA8VGFiUHJlc2VudGF0aW9uXG4gICAgICAgICAgICAgICAgZGF0YT17ZGF0YX1cbiAgICAgICAgICAgICAgICBpcmk9e2lyaX1cbiAgICAgICAgICAgICAgICBlbnRpdHlUeXBlPXtwcm9wcy5lbnRpdHlUeXBlfVxuICAgICAgICAgICAgICAgIGFwaT17YXBpfVxuICAgICAgICAgICAgICAgIG9udG9sb2d5SWQ9e3Byb3BzLm9udG9sb2d5SWQgPyBwcm9wcy5vbnRvbG9neUlkIDogZGF0YS5nZXRPbnRvbG9neUlkKCl9XG4gICAgICAgICAgICAgICAgdXNlTGVnYWN5PXt1c2VMZWdhY3l9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgPC9FdWlGbGV4R3JvdXA+XG4gICAgICA8Lz5cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAge2lzTG9hZGluZyAmJiA8RXVpTG9hZGluZ1NwaW5uZXIgLz59XG4gICAgICB7aXNFcnJvciAmJiA8RXVpVGV4dD57Z2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5KGVycm9yLCBcIm1ldGFkYXRhXCIpfTwvRXVpVGV4dD59XG4gICAgICB7aXNTdWNjZXNzICYmIGRhdGEgJiZcbiAgICAgICAgPD5cbiAgICAgICAgICB7aXNFbnRpdHkoZGF0YSkgPyByZW5kZXIoZGF0YSkgOiBudWxsfVxuICAgICAgICA8Lz5cbiAgICAgIH1cbiAgICA8Lz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlTWV0YWRhdGEocHJvcHM6IE1ldGFkYXRhV2lkZ2V0UHJvcHMsIGNvbnRhaW5lcjogRWxlbWVudCwgY2FsbGJhY2s/OiAoKT0+dm9pZCkge1xuICAgIFJlYWN0RE9NLnJlbmRlcihXcmFwcGVkTWV0YWRhdGFXaWRnZXQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZE1ldGFkYXRhV2lkZ2V0KHByb3BzOiBNZXRhZGF0YVdpZGdldFByb3BzKSB7XG4gICAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTtcbiAgICByZXR1cm4gKFxuICAgICAgICA8RXVpUHJvdmlkZXIgY29sb3JNb2RlPVwibGlnaHRcIj5cbiAgICAgICAgICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgICAgICAgICAgIDxNZXRhZGF0YVdpZGdldFxuICAgICAgICAgICAgICAgICAgICBpcmk9e3Byb3BzLmlyaX1cbiAgICAgICAgICAgICAgICAgICAgb250b2xvZ3lJZD17cHJvcHMub250b2xvZ3lJZH1cbiAgICAgICAgICAgICAgICAgICAgYXBpPXtwcm9wcy5hcGl9XG4gICAgICAgICAgICAgICAgICAgIGVudGl0eVR5cGU9e3Byb3BzLmVudGl0eVR5cGV9XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcj17cHJvcHMucGFyYW1ldGVyfVxuICAgICAgICAgICAgICAgICAgICB1c2VMZWdhY3k9e3Byb3BzLnVzZUxlZ2FjeX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICAgICAgICA8L0V1aVByb3ZpZGVyPlxuICAgIClcbn1cblxuZXhwb3J0IHsgTWV0YWRhdGFXaWRnZXQsIGNyZWF0ZU1ldGFkYXRhIH07XG4iLCAiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtFdWlDYXJkLCBFdWlMb2FkaW5nU3Bpbm5lciwgRXVpUHJvdmlkZXIsIEV1aVRleHR9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7UXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIsIHVzZVF1ZXJ5fSBmcm9tIFwicmVhY3QtcXVlcnlcIjtcbmltcG9ydCB7IE9sc0FwaSB9IGZyb20gXCIuLi8uLi8uLi9hcGkvT2xzQXBpXCI7XG5pbXBvcnQge09udG9sb2dpZXN9IGZyb20gXCIuLi8uLi8uLi9tb2RlbC9pbnRlcmZhY2VzXCI7XG5pbXBvcnQge0RhdGFDb250ZW50V2lkZ2V0UHJvcHN9IGZyb20gXCIuLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5cbmZ1bmN0aW9uIERhdGFDb250ZW50V2lkZ2V0KHByb3BzOiBEYXRhQ29udGVudFdpZGdldFByb3BzKSB7XG4gIGNvbnN0IHsgYXBpLCBwYXJhbWV0ZXIsIC4uLnJlc3QgfSA9IHByb3BzO1xuICBjb25zdCBvbHNBcGkgPSBuZXcgT2xzQXBpKGFwaSk7XG5cbiAgY29uc3Qge1xuICAgIGRhdGE6IG9udG9sb2dpZXNEYXRhLFxuICAgIGlzTG9hZGluZyxcbiAgICBpc0Vycm9yLFxuICAgIGRhdGFVcGRhdGVkQXRcbiAgfSA9IHVzZVF1ZXJ5PE9udG9sb2dpZXM+KFxuICAgIFtcIm9udG9sb2dpZXNEYXRhXCIsIGFwaSwgcGFyYW1ldGVyXSxcbiAgICBhc3luYyAoKSA9PiB7XG4gICAgICByZXR1cm4gb2xzQXBpLmdldE9udG9sb2dpZXNEYXRhKFxuICAgICAgICBwcm9wcy5wYXJhbWV0ZXJcbiAgICAgICk7XG4gICAgfVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxFdWlDYXJkXG4gICAgICAgIHRpdGxlPVwiRGF0YSBDb250ZW50XCJcbiAgICAgICAgZGVzY3JpcHRpb249e2RhdGFVcGRhdGVkQXQgPyBgVXBkYXRlZCAke25ldyBEYXRlKGRhdGFVcGRhdGVkQXQpLnRvTG9jYWxlU3RyaW5nKCl9YCA6IFwiXCJ9XG4gICAgICAgIGxheW91dD1cImhvcml6b250YWxcIlxuICAgICAgPlxuICAgICAgICA8RXVpVGV4dCB7Li4ucmVzdH0+XG4gICAgICAgICAgeyhpc0Vycm9yKSAmJiA8RXVpVGV4dD5ObyBkYXRhIGNvbnRlbnQgYXZhaWxhYmxlPC9FdWlUZXh0Pn1cbiAgICAgICAgICB7aXNMb2FkaW5nXG4gICAgICAgICAgICA/IDxFdWlMb2FkaW5nU3Bpbm5lciBzaXplPVwic1wiIC8+XG4gICAgICAgICAgICA6XG4gICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgIHsob250b2xvZ2llc0RhdGE/LmdldFRvdGFsT250b2xvZ2llcygpXG4gICAgICAgICAgICAgICAgPyA8bGk+e29udG9sb2dpZXNEYXRhPy5nZXRUb3RhbE9udG9sb2dpZXMoKS50b0xvY2FsZVN0cmluZygpfSBvbnRvbG9naWVzIGFuZCB0ZXJtaW5vbG9naWVzPC9saT5cbiAgICAgICAgICAgICAgICA6IDxsaSBzdHlsZT17eyBmb250U3R5bGU6IFwiaXRhbGljXCIgfX0+b250b2xvZ3kgbnVtYmVyIG5vdCBhdmFpbGFibGU8L2xpPil9XG4gICAgICAgICAgICAgIHsob250b2xvZ2llc0RhdGE/LmdldE51bUNsYXNzZXMoKVxuICAgICAgICAgICAgICAgID8gPGxpPntvbnRvbG9naWVzRGF0YT8uZ2V0TnVtQ2xhc3NlcygpLnRvTG9jYWxlU3RyaW5nKCl9IHRlcm1zPC9saT5cbiAgICAgICAgICAgICAgICA6IDxsaSBzdHlsZT17eyBmb250U3R5bGU6IFwiaXRhbGljXCIgfX0+dGVybSBudW1iZXIgbm90IGF2YWlsYWJsZTwvbGk+KX1cbiAgICAgICAgICAgICAgeyhvbnRvbG9naWVzRGF0YT8uZ2V0TnVtUHJvcGVydGllcygpXG4gICAgICAgICAgICAgICAgPyA8bGk+e29udG9sb2dpZXNEYXRhPy5nZXROdW1Qcm9wZXJ0aWVzKCkudG9Mb2NhbGVTdHJpbmcoKX0gcHJvcGVydGllczwvbGk+XG4gICAgICAgICAgICAgICAgOiA8bGkgc3R5bGU9e3sgZm9udFN0eWxlOiBcIml0YWxpY1wiIH19PnByb3BlcnR5IG51bWJlciBub3QgYXZhaWxhYmxlPC9saT4pfVxuICAgICAgICAgICAgICB7KG9udG9sb2dpZXNEYXRhPy5nZXROdW1JbmRpdmlkdWFscygpXG4gICAgICAgICAgICAgICAgPyA8bGk+e29udG9sb2dpZXNEYXRhPy5nZXROdW1JbmRpdmlkdWFscygpLnRvTG9jYWxlU3RyaW5nKCl9IGluZGl2aWR1YWxzPC9saT5cbiAgICAgICAgICAgICAgICA6IDxsaSBzdHlsZT17eyBmb250U3R5bGU6IFwiaXRhbGljXCIgfX0+aW5kaXZpZHVhbCBudW1iZXIgbm90IGF2YWlsYWJsZTwvbGk+KX1cbiAgICAgICAgICAgICAgey8qIDxsaT5WZXJzaW9uIHtOT1RfQVZBSUxBQkxFfTwvbGk+ICovfSB7LyogVE9ETyBob3cgdG8gZ2V0IEFQSSB2ZXJzaW9uPyAqL31cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgfVxuICAgICAgICA8L0V1aVRleHQ+XG4gICAgICA8L0V1aUNhcmQ+XG4gICAgPC8+XG4gICk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZURhdGFDb250ZW50KHByb3BzOiBEYXRhQ29udGVudFdpZGdldFByb3BzLCBjb250YWluZXI6IGFueSwgY2FsbGJhY2s/OiAoKT0+dm9pZCkge1xuICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZERhdGFDb250ZW50V2lkZ2V0KHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIFdyYXBwZWREYXRhQ29udGVudFdpZGdldChwcm9wczogRGF0YUNvbnRlbnRXaWRnZXRQcm9wcykge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gKFxuICAgICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCI+XG4gICAgICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgICAgIDxEYXRhQ29udGVudFdpZGdldFxuICAgICAgICAgICAgYXBpPXtwcm9wcy5hcGl9XG4gICAgICAgICAgICBwYXJhbWV0ZXI9e3Byb3BzLnBhcmFtZXRlcn1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgICA8L0V1aVByb3ZpZGVyPlxuICApXG59XG5cbmV4cG9ydCB7IERhdGFDb250ZW50V2lkZ2V0LCBjcmVhdGVEYXRhQ29udGVudCB9O1xuIiwgImltcG9ydCBSZWFjdCwge1JlYWN0RWxlbWVudH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge0V1aUNhcmQsIEV1aUZsZXhJdGVtLCBFdWlMb2FkaW5nU3Bpbm5lciwgRXVpUHJvdmlkZXIsIEV1aVNwYWNlciwgRXVpVGV4dH0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHtPbHNBcGl9IGZyb20gXCIuLi8uLi8uLi9hcGkvT2xzQXBpXCI7XG5pbXBvcnQge1F1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyLCB1c2VRdWVyeX0gZnJvbSAncmVhY3QtcXVlcnknO1xuaW1wb3J0IHthc0FycmF5LCBjYXBpdGFsaXplLCBkZUNhbWVsQ2FzZSwgZGVVbmRlcnNjb3JlLCBnZXRFbnRpdHlUeXBlTmFtZSwgcmFuZG9tU3RyaW5nLCBnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXl9IGZyb20gXCIuLi8uLi8uLi9hcHAvdXRpbFwiO1xuaW1wb3J0IHtnZXRDbGFzc0V4cHJlc3Npb25KU1gsIGdldEVudGl0eUxpbmtKU1gsIGdldFJlaWZpZWRKU1gsIGdldFRvb2x0aXB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbC9TdHJ1Y3R1cmVSZW5kZXJpbmdcIjtcbmltcG9ydCB7UHJvcGVydHksIFRoaW5nLCBDbGFzcywgRW50aXR5LCBJbmRpdmlkdWFsfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHtpc0NsYXNzLCBpc1Byb3BlcnR5LCBpc0luZGl2aWR1YWx9IGZyb20gXCIuLi8uLi8uLi9tb2RlbC9Nb2RlbFR5cGVDaGVja1wiO1xuaW1wb3J0IHtFbnRpdHlJbmZvV2lkZ2V0UHJvcHN9IGZyb20gXCIuLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5cbmNvbnN0IERFRkFVTFRfSEFTX1RJVExFID0gdHJ1ZTtcblxuZnVuY3Rpb24gRW50aXR5SW5mb1dpZGdldChwcm9wczogRW50aXR5SW5mb1dpZGdldFByb3BzKSB7XG4gICAgY29uc3QgeyBhcGksIGlyaSwgb250b2xvZ3lJZCwgaGFzVGl0bGUgPSBERUZBVUxUX0hBU19USVRMRSwgZW50aXR5VHlwZSwgcGFyYW1ldGVyLCBzaG93QmFkZ2VzICwgdXNlTGVnYWN5ICwgLi4ucmVzdCB9ID0gcHJvcHM7XG4gICAgY29uc3Qgb2xzQXBpID0gbmV3IE9sc0FwaShhcGkpO1xuXG4gICAgY29uc3Qge1xuICAgICAgICBkYXRhOiBlbnRpdHksXG4gICAgICAgIGlzTG9hZGluZzogaXNMb2FkaW5nRW50aXR5LFxuICAgICAgICBpc1N1Y2Nlc3M6IGlzU3VjY2Vzc0VudGl0eSxcbiAgICAgICAgaXNFcnJvcjogaXNFcnJvckVudGl0eSxcbiAgICAgICAgZXJyb3I6IGVycm9yRW50aXR5LFxuICAgIH0gPSB1c2VRdWVyeShcbiAgICAgICAgW1xuICAgICAgICAgICAgXCJlbnRpdHlJbmZvXCIsXG4gICAgICAgICAgICBwcm9wc1xuICAgICAgICBdLFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gb2xzQXBpLmdldEVudGl0eU9iamVjdChpcmksIGVudGl0eVR5cGUsIG9udG9sb2d5SWQsIHBhcmFtZXRlciwgdXNlTGVnYWN5KTtcbiAgICAgICAgfVxuICAgICk7XG5cbiAgICBmdW5jdGlvbiBnZXRMYWJlbFNlY3Rpb24oZW50aXR5OiBFbnRpdHkpIDogUmVhY3RFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAge2VudGl0eS5nZXRMYWJlbCgpICYmXG4gICAgICAgICAgICAgICAgICAgIDw+PEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGI+TGFiZWw6PC9iPlxuICAgICAgICAgICAgICAgICAgICAgICAge2VudGl0eS5nZXRMYWJlbCgpfVxuICAgICAgICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPjxFdWlTcGFjZXIvPjwvPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvPlxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFN5bm9ueW1zU2VjdGlvbihlbnRpdHk6IEVudGl0eSkgOiBSZWFjdEVsZW1lbnQge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICB7ZW50aXR5LmdldFN5bm9ueW1zKCkubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgICAgICA8PjxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxiPlN5bm9ueW1zOjwvYj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtlbnRpdHkuZ2V0U3lub255bXMoKS5sZW5ndGggPiAxID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWw+e2VudGl0eS5nZXRTeW5vbnltcygpLm1hcCgoc3lub255bSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPGxpIGtleT17cmFuZG9tU3RyaW5nKCl9IGlkPXtzeW5vbnltLnZhbHVlfT57Z2V0UmVpZmllZEpTWChlbnRpdHksIHN5bm9ueW0sIGFwaSwgc2hvd0JhZGdlcyl9PC9saT47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSl9PC91bD4gOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPntnZXRSZWlmaWVkSlNYKGVudGl0eSwgZW50aXR5LmdldFN5bm9ueW1zKClbMF0sIGFwaSwgc2hvd0JhZGdlcyl9PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPjwvPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvPlxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEhhc0tleVNlY3Rpb24odGVybTogQ2xhc3MpIDogUmVhY3RFbGVtZW50IHtcbiAgICAgICAgY29uc3Qga2V5cyA9IHRlcm0uZ2V0SGFzS2V5KCk7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgIHtrZXlzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgPD48RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Yj5IYXMgS2V5OjwvYj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtrZXlzLmxlbmd0aCA+IDEgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bD57a2V5cy5tYXAoKGtleXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxsaSBrZXk9e3JhbmRvbVN0cmluZygpfT57Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKHRlcm0sIHRlcm0uZ2V0TGlua2VkRW50aXRpZXMoKSwga2V5cywgYXBpLCBzaG93QmFkZ2VzKX08L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pfTwvdWw+IDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD57Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKHRlcm0sIHRlcm0uZ2V0TGlua2VkRW50aXRpZXMoKSwga2V5c1swXSwgYXBpLCBzaG93QmFkZ2VzKX08L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+PC8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC8+XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U3Vic2V0c1NlY3Rpb24odGVybTogQ2xhc3MpIDogUmVhY3RFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgeyB0ZXJtLmdldFN1YnNldHMoKS5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICAgIDw+PEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGI+SW4gU3Vic2V0czo8L2I+XG4gICAgICAgICAgICAgICAgICAgICAgICB7dGVybS5nZXRTdWJzZXRzKCkubGVuZ3RoID4gMSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsPnt0ZXJtLmdldFN1YnNldHMoKS5tYXAoKHN1YnNldCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPGxpIGtleT17cmFuZG9tU3RyaW5nKCl9IGlkPXtzdWJzZXQgKyByYW5kb21TdHJpbmcoKX0+e2dldEVudGl0eUxpbmtKU1godGVybSwgdGVybS5nZXRMaW5rZWRFbnRpdGllcygpLCBzdWJzZXQsIGFwaSwgc2hvd0JhZGdlcyl9PC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KX08L3VsPiA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+e2dldEVudGl0eUxpbmtKU1godGVybSwgdGVybS5nZXRMaW5rZWRFbnRpdGllcygpLCB0ZXJtLmdldFN1YnNldHMoKVswXSwgYXBpLCBzaG93QmFkZ2VzKX08L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+PC8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC8+XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0UHJvcGVydHlDaGFyYWN0ZXJpc3RpY3NTZWN0aW9uKHByb3BlcnR5OiBQcm9wZXJ0eSkgOiBSZWFjdEVsZW1lbnQge1xuICAgICAgICBjb25zdCBjaGFyYWN0ZXJpc3RpY3MgPSBwcm9wZXJ0eS5nZXRSZGZUeXBlcygpLm1hcCh0eXBlID0+IHtcbiAgICAgICAgICAgIHJldHVybiAoe1xuICAgICAgICAgICAgICAgICdodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNGdW5jdGlvbmFsUHJvcGVydHknOiAnRnVuY3Rpb25hbCcsXG4gICAgICAgICAgICAgICAgJ2h0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI0ludmVyc2VGdW5jdGlvbmFsUHJvcGVydHknOiAnSW52ZXJzZSBGdW5jdGlvbmFsJyxcbiAgICAgICAgICAgICAgICAnaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjVHJhbnNpdGl2ZVByb3BlcnR5JzogJ1RyYW5zaXRpdmUnLFxuICAgICAgICAgICAgICAgICdodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNTeW1tZXRyaWNQcm9wZXJ0eSc6ICdTeW1tZXRyaWMnLFxuICAgICAgICAgICAgICAgICdodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNBc3ltbWV0cmljUHJvcGVydHknOiAnQXN5bW1ldHJpYycsXG4gICAgICAgICAgICAgICAgJ2h0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI1JlZmxleGl2ZVByb3BlcnR5JzogJ1JlZmxleGl2ZScsXG4gICAgICAgICAgICAgICAgJ2h0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI0lycmVmbGV4aXZlUHJvcGVydHknOiAnSXJyZWZsZXhpdmUnLFxuICAgICAgICAgICAgfSlbdHlwZV07XG4gICAgICAgIH0pLmZpbHRlcigodHlwZSkgPT4gISF0eXBlKTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICB7Y2hhcmFjdGVyaXN0aWNzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgPD48RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Yj5DaGFyYWN0ZXJpc3RpY3M6PC9iPlxuICAgICAgICAgICAgICAgICAgICAgICAge2NoYXJhY3RlcmlzdGljcy5sZW5ndGggPiAxID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWw+e2NoYXJhY3RlcmlzdGljcy5tYXAoKGNoYXJhY3RlcmlzdGljKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8bGkga2V5PXtyYW5kb21TdHJpbmcoKX0+e2NoYXJhY3RlcmlzdGljfTwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNvcnQoKX08L3VsPiA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+e2NoYXJhY3RlcmlzdGljc1swXX08L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+PC8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC8+XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RG9tYWluU2VjdGlvbihwcm9wZXJ0eTogUHJvcGVydHkpIDogUmVhY3RFbGVtZW50IHtcbiAgICAgICAgY29uc3QgZG9tYWlucyA9IHByb3BlcnR5LmdldERvbWFpbigpO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICB7ZG9tYWlucy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICAgIDw+PEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGI+RG9tYWluOjwvYj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtkb21haW5zLmxlbmd0aCA+IDEgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bD57ZG9tYWlucy5tYXAoKGRvbWFpbnMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxsaSBrZXk9e3JhbmRvbVN0cmluZygpfT57Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKHByb3BlcnR5LCBwcm9wZXJ0eS5nZXRMaW5rZWRFbnRpdGllcygpLCBkb21haW5zLCBhcGksIHNob3dCYWRnZXMpfTwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSl9PC91bD4gOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPntnZXRDbGFzc0V4cHJlc3Npb25KU1gocHJvcGVydHksIHByb3BlcnR5LmdldExpbmtlZEVudGl0aWVzKCksIGRvbWFpbnNbMF0sIGFwaSwgc2hvd0JhZGdlcyl9PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPjwvPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvPlxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFJhbmdlU2VjdGlvbihwcm9wZXJ0eTogUHJvcGVydHkpIDogUmVhY3RFbGVtZW50IHtcbiAgICAgICAgY29uc3QgcmFuZ2VzID0gcHJvcGVydHkuZ2V0UmFuZ2UoKTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAge3Jhbmdlcy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxiPlJhbmdlOjwvYj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtyYW5nZXMubGVuZ3RoID4gMSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsPntyYW5nZXMubWFwKChyYW5nZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxsaSBrZXk9e3JhbmRvbVN0cmluZygpfT57Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKHByb3BlcnR5LCBwcm9wZXJ0eS5nZXRMaW5rZWRFbnRpdGllcygpLCByYW5nZXMsIGFwaSwgc2hvd0JhZGdlcyl9PC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KX08L3VsPiA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+e2dldENsYXNzRXhwcmVzc2lvbkpTWChwcm9wZXJ0eSwgcHJvcGVydHkuZ2V0TGlua2VkRW50aXRpZXMoKSwgcmFuZ2VzWzBdLCBhcGksIHNob3dCYWRnZXMpfTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRJbmRpdmlkdWFsUHJvcGVydHlBc3NlcnRpb25zU2VjdGlvbihpbmRpdmlkdWFsOiBJbmRpdmlkdWFsKSA6IFJlYWN0RWxlbWVudCB7XG4gICAgICAgIGNvbnN0IHByb3BlcnR5SXJpcyA9IE9iamVjdC5rZXlzKGluZGl2aWR1YWwucHJvcGVydGllcyk7XG4gICAgICAgIGNvbnN0IG5lZ2F0aXZlUHJvcGVydGllcyA9IHByb3BlcnR5SXJpcy5maWx0ZXIoKGtleSkgPT4ga2V5LnN0YXJ0c1dpdGgoXCJuZWdhdGl2ZVByb3BlcnR5QXNzZXJ0aW9uK1wiKSk7XG4gICAgICAgIGNvbnN0IG9iamVjdFByb3BlcnRpZXMgPSBwcm9wZXJ0eUlyaXMuZmlsdGVyKChrZXkpID0+IGluZGl2aWR1YWwuZ2V0TGlua2VkRW50aXRpZXMoKS5nZXQoa2V5KSAmJiBpbmRpdmlkdWFsLmdldExpbmtlZEVudGl0aWVzKCkuZ2V0KGtleSk/LnR5cGUuaW5kZXhPZihcIm9iamVjdFByb3BlcnR5XCIpICE9PSAtMSlcbiAgICAgICAgY29uc3QgZGF0YVByb3BlcnRpZXMgPSBwcm9wZXJ0eUlyaXMuZmlsdGVyKChrZXkpID0+IGluZGl2aWR1YWwuZ2V0TGlua2VkRW50aXRpZXMoKS5nZXQoa2V5KSAmJiBpbmRpdmlkdWFsLmdldExpbmtlZEVudGl0aWVzKCkuZ2V0KGtleSk/LnR5cGUuaW5kZXhPZihcImRhdGFQcm9wZXJ0eVwiKSAhPT0gLTEpXG4gICAgICAgIGNvbnN0IHByb3BlcnR5QXNzZXJ0aW9uczogUmVhY3RFbGVtZW50W10gPSBbXTtcblxuICAgICAgICBmb3IoY29uc3QgaXJpIG9mIG9iamVjdFByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IGFzQXJyYXkoaW5kaXZpZHVhbC5wcm9wZXJ0aWVzW2lyaV0pO1xuICAgICAgICAgICAgZm9yKGNvbnN0IHYgb2YgdmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHlBc3NlcnRpb25zLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKGluZGl2aWR1YWwsIGluZGl2aWR1YWwuZ2V0TGlua2VkRW50aXRpZXMoKSwgaXJpLCBhcGksIHNob3dCYWRnZXMpfVxuICAgICAgICAgICAgICAgICAgICAgICAge3R5cGVvZiB2ID09PSBcInN0cmluZ1wiICYmIHYuaW5jbHVkZXMoXCJodHRwXCIpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3tmb250U2l6ZTogXCJtZWRpdW1cIiwgY29sb3I6IFwiZ3JheVwifX0+JiM5NjU2Ozwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtnZXRFbnRpdHlMaW5rSlNYKGluZGl2aWR1YWwsIGluZGl2aWR1YWwuZ2V0TGlua2VkRW50aXRpZXMoKSwgdiwgYXBpLCBzaG93QmFkZ2VzKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Lz4gOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldFRvb2x0aXAoKHR5cGVvZiB2ID09PSBcInN0cmluZ1wiID8gdiA6IHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KHYpICYmIHYudmFsdWUgPyBKU09OLnN0cmluZ2lmeSh2LnZhbHVlKSA6IEpTT04uc3RyaW5naWZ5KHYpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yKGNvbnN0IGlyaSBvZiBkYXRhUHJvcGVydGllcykge1xuICAgICAgICAgICAgY29uc3QgdmFsdWVzID0gYXNBcnJheShpbmRpdmlkdWFsLnByb3BlcnRpZXNbaXJpXSk7XG4gICAgICAgICAgICBmb3IoY29uc3QgdiBvZiB2YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eUFzc2VydGlvbnMucHVzaChcbiAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1goaW5kaXZpZHVhbCwgaW5kaXZpZHVhbC5nZXRMaW5rZWRFbnRpdGllcygpLCBpcmksIGFwaSwgc2hvd0JhZGdlcyl9XG4gICAgICAgICAgICAgICAgICAgICAgICB7PD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17e2ZvbnRTaXplOiBcIm1lZGl1bVwiLCBjb2xvcjogXCJncmF5XCJ9fT4mIzk2NTY7PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtnZXRFbnRpdHlMaW5rSlNYKGluZGl2aWR1YWwsIGluZGl2aWR1YWwuZ2V0TGlua2VkRW50aXRpZXMoKSwgdiwgYXBpLCBzaG93QmFkZ2VzKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvPn1cbiAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yKGNvbnN0IGtleSBvZiBuZWdhdGl2ZVByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGlyaSA9IGtleS5zbGljZShcIm5lZ2F0aXZlUHJvcGVydHlBc3NlcnRpb24rXCIubGVuZ3RoKTtcbiAgICAgICAgICAgIGNvbnN0IGxpbmtlZEVudGl0eSA9IGluZGl2aWR1YWwuZ2V0TGlua2VkRW50aXRpZXMoKS5nZXQoaXJpKTtcbiAgICAgICAgICAgIGNvbnN0IGhhc0RhdGFQcm9wZXJ0eSA9IGxpbmtlZEVudGl0eT8udHlwZS5pbmRleE9mKFwiZGF0YVByb3BlcnR5XCIpICE9PSAtMTtcbiAgICAgICAgICAgIGNvbnN0IGhhc09iamVjdFByb3BlcnR5ID0gbGlua2VkRW50aXR5Py50eXBlLmluZGV4T2YoXCJvYmplY3RQcm9wZXJ0eVwiKSAhPT0gLTE7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSBhc0FycmF5KGluZGl2aWR1YWwucHJvcGVydGllc1trZXldKTtcblxuICAgICAgICAgICAgZm9yKGNvbnN0IHYgb2YgdmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHlBc3NlcnRpb25zLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBzdHlsZT17e2NvbG9yOiBcInB1cnBsZVwifX0+bm90PC9pPntcIiBcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1goaW5kaXZpZHVhbCwgaW5kaXZpZHVhbC5nZXRMaW5rZWRFbnRpdGllcygpLCBpcmksIGFwaSwgc2hvd0JhZGdlcyl9XG4gICAgICAgICAgICAgICAgICAgICAgICB7dHlwZW9mIHYgPT09IFwic3RyaW5nXCIgJiYgdi5pbmNsdWRlcyhcImh0dHBcIikgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7Zm9udFNpemU6IFwibWVkaXVtXCIsIGNvbG9yOiBcImdyYXlcIn19PiYjOTY1Njs8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Z2V0RW50aXR5TGlua0pTWChpbmRpdmlkdWFsLCBpbmRpdmlkdWFsLmdldExpbmtlZEVudGl0aWVzKCksIHYsIGFwaSwgc2hvd0JhZGdlcyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICAgICAgICApIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc09iamVjdFByb3BlcnR5ID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldFRvb2x0aXAoKHR5cGVvZiB2ID09PSBcInN0cmluZ1wiID8gdiA6IHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KHYpICYmIHYudmFsdWUgPyBKU09OLnN0cmluZ2lmeSh2LnZhbHVlKSA6IEpTT04uc3RyaW5naWZ5KHYpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzRGF0YVByb3BlcnR5ID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17e2ZvbnRTaXplOiBcIm1lZGl1bVwiLCBjb2xvcjogXCJncmF5XCJ9fT4mIzk2NTY7PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2dldEVudGl0eUxpbmtKU1goaW5kaXZpZHVhbCwgaW5kaXZpZHVhbC5nZXRMaW5rZWRFbnRpdGllcygpLCB2LCBhcGksIHNob3dCYWRnZXMpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD48Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAge3Byb3BlcnR5QXNzZXJ0aW9ucy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICAgIDw+PEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGI+UHJvcGVydHkgYXNzZXJ0aW9uczo8L2I+XG4gICAgICAgICAgICAgICAgICAgICAgICB7cHJvcGVydHlBc3NlcnRpb25zLmxlbmd0aCA+IDEgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bD57cHJvcGVydHlBc3NlcnRpb25zLm1hcCgocGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxsaSBrZXk9e3JhbmRvbVN0cmluZygpfT57cGF9PC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc29ydCgpfTwvdWw+IDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD57cHJvcGVydHlBc3NlcnRpb25zWzBdfTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT48Lz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRBbm5vdGF0aW9uU2VjdGlvbih0aGluZzogVGhpbmcpIDogUmVhY3RFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAge3RoaW5nLmdldEFubm90YXRpb25QcmVkaWNhdGVzKCkubWFwKChhbm5vS2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFubm9zID0gdGhpbmcuZ2V0QW5ub3RhdGlvbkJ5SWQoYW5ub0tleSk7XG4gICAgICAgICAgICAgICAgICAgIGlmKGFubm9zLmxlbmd0aCA9PSAwKSByZXR1cm4gPD48Lz47XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxFdWlGbGV4SXRlbSBncm93PXtmYWxzZX0ga2V5PXthbm5vS2V5fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxiPntjYXBpdGFsaXplKGRlVW5kZXJzY29yZShkZUNhbWVsQ2FzZSh0aGluZy5nZXRBbm5vdGF0aW9uVGl0bGVCeUlkKGFubm9LZXkpKSkpfTo8L2I+XG4gICAgICAgICAgICAgICAgICAgICAgICB7YW5ub3MubGVuZ3RoID4gMSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsPnthbm5vcy5tYXAoKGFubm90YXRpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxsaSBrZXk9e3JhbmRvbVN0cmluZygpfSBpZD17YW5ub3RhdGlvbi52YWx1ZX0+e2dldFJlaWZpZWRKU1godGhpbmcsIGFubm90YXRpb24sIGFwaSwgc2hvd0JhZGdlcyl9PC9saT47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSl9PC91bD4gOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGtleT17cmFuZG9tU3RyaW5nKCl9PntnZXRSZWlmaWVkSlNYKHRoaW5nLCBhbm5vc1swXSwgYXBpLCBzaG93QmFkZ2VzKX08L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC8+XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICAgIDxFdWlDYXJkXG4gICAgICAgICAgICAgICAgdGl0bGU9e2hhc1RpdGxlID8gKGVudGl0eVR5cGUgPyBjYXBpdGFsaXplKGdldEVudGl0eVR5cGVOYW1lKGVudGl0eVR5cGUpKSA6IChpc1N1Y2Nlc3NFbnRpdHkgJiYgZW50aXR5KSA/IGNhcGl0YWxpemUoZW50aXR5LmdldFR5cGUoKSkgOiBcIlwiKSAgKyBcIiBJbmZvcm1hdGlvblwiIDogXCJcIn1cbiAgICAgICAgICAgICAgICBsYXlvdXQ9XCJob3Jpem9udGFsXCJcbiAgICAgICAgICAgID5cblxuICAgICAgICAgICAgICAgIHtpc0xvYWRpbmdFbnRpdHkgJiYgPEV1aUxvYWRpbmdTcGlubmVyIHNpemU9eydzJ30vPn1cbiAgICAgICAgICAgICAgICB7aXNTdWNjZXNzRW50aXR5ICYmIGVudGl0eSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgICAgIDxFdWlUZXh0IHsuLi5yZXN0fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtnZXRMYWJlbFNlY3Rpb24oZW50aXR5KX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHtnZXRTeW5vbnltc1NlY3Rpb24oZW50aXR5KX1cblxuICAgICAgICAgICAgICAgICAgICAgICAge2lzQ2xhc3MoZW50aXR5KSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtnZXRTdWJzZXRzU2VjdGlvbihlbnRpdHkpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Z2V0SGFzS2V5U2VjdGlvbihlbnRpdHkpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB7aXNQcm9wZXJ0eShlbnRpdHkpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2dldFByb3BlcnR5Q2hhcmFjdGVyaXN0aWNzU2VjdGlvbihlbnRpdHkpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Z2V0RG9tYWluU2VjdGlvbihlbnRpdHkpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Z2V0UmFuZ2VTZWN0aW9uKGVudGl0eSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtpc0luZGl2aWR1YWwoZW50aXR5KSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtnZXRJbmRpdmlkdWFsUHJvcGVydHlBc3NlcnRpb25zU2VjdGlvbihlbnRpdHkpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB7Z2V0QW5ub3RhdGlvblNlY3Rpb24oZW50aXR5KX1cbiAgICAgICAgICAgICAgICAgICAgPC9FdWlUZXh0PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB7aXNFcnJvckVudGl0eSAmJiA8RXVpVGV4dD57Z2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5KGVycm9yRW50aXR5LCBcImluZm9ybWF0aW9uXCIpfTwvRXVpVGV4dD59XG4gICAgICAgICAgICA8L0V1aUNhcmQ+XG4gICAgICAgIDwvPlxuICAgICk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUVudGl0eUluZm8ocHJvcHM6IEVudGl0eUluZm9XaWRnZXRQcm9wcywgY29udGFpbmVyOiBhbnksIGNhbGxiYWNrPzogKCk9PnZvaWQpIHtcbiAgICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZEVudGl0aXlJbmZvV2lkZ2V0KHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIFdyYXBwZWRFbnRpdGl5SW5mb1dpZGdldChwcm9wczogRW50aXR5SW5mb1dpZGdldFByb3BzKSB7XG4gICAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTtcbiAgICByZXR1cm4gKFxuICAgICAgICA8RXVpUHJvdmlkZXIgY29sb3JNb2RlPVwibGlnaHRcIj5cbiAgICAgICAgICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgICAgICAgICAgIDxFbnRpdHlJbmZvV2lkZ2V0XG4gICAgICAgICAgICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgICAgICAgICAgICBpcmk9e3Byb3BzLmlyaX1cbiAgICAgICAgICAgICAgICAgICAgb250b2xvZ3lJZD17cHJvcHMub250b2xvZ3lJZH1cbiAgICAgICAgICAgICAgICAgICAgaGFzVGl0bGU9e3Byb3BzLmhhc1RpdGxlfVxuICAgICAgICAgICAgICAgICAgICBlbnRpdHlUeXBlPXtwcm9wcy5lbnRpdHlUeXBlfVxuICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXI9e3Byb3BzLnBhcmFtZXRlcn1cbiAgICAgICAgICAgICAgICAgICAgdXNlTGVnYWN5PXtwcm9wcy51c2VMZWdhY3l9XG4gICAgICAgICAgICAgICAgICAgIHNob3dCYWRnZXM9e3Byb3BzLnNob3dCYWRnZXN9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICAgICAgPC9FdWlQcm92aWRlcj5cbiAgICApXG59XG5cbmV4cG9ydCB7IEVudGl0eUluZm9XaWRnZXQsIGNyZWF0ZUVudGl0eUluZm8gfTtcbiIsICJpbXBvcnQge1RoaW5nfSBmcm9tIFwiLi9pbnRlcmZhY2VzXCI7XG5pbXBvcnQgUmVhY3QsIHtSZWFjdEVsZW1lbnR9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtFdWlCYWRnZSwgRXVpSWNvblRpcCwgRXVpSWNvbn0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHthc0FycmF5LCBnZXRGcm9udEVuZEFwaSwgZ2V0VGVybUluT250b2xvZ3lTdWZmaXgsIHJhbmRvbVN0cmluZ30gZnJvbSBcIi4uL2FwcC91dGlsXCI7XG5pbXBvcnQgTGlua2VkRW50aXRpZXMgZnJvbSBcIi4vTGlua2VkRW50aXRpZXNcIjtcbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuL1JlaWZpZWRcIjtcblxuY29uc3QgREVGQVVMVF9TSE9XX0JBREdFUyA9IHRydWU7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUb29sdGlwKHRleHQ6IHN0cmluZykgOiBSZWFjdEVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICAgIDxFdWlJY29uVGlwIHR5cGU9e1wiaUluQ2lyY2xlXCJ9IGNvbG9yPXtcInN1YmR1ZWRcIn0gY29udGVudD17dGV4dH0vPlxuICAgICk7XG59XG5cbi8qKlxuICogT05MWSBVU0FCTEUgV0lUSCBWMi1BUEkgRU5USVRJRVNcbiAqXG4gKiBSZXR1cm5zIFJlaWZpZWQgYXhpb21zIGFzIEpTWCBlbGVtZW50IChzaW1pbGFyIHRvIE1ldGFkYXRhVG9vbHRpcCBjb21wb25lbnQgaW4gb2xzNCBwcm9qZWN0KVxuICogQHBhcmFtIHBhcmVudEVudGl0eSB0aGUgc3Vycm91bmRpbmcgZW50aXR5IG9mIHRoZSBheGlvbXMgYXJyYXkgKGZvciBldmVudHVhbCBsYWJlbCBmZXRjaGluZylcbiAqIEBwYXJhbSBheGlvbXNEaWN0IHRoZSBlbnRpdGllcyBheGlvbXMgaW4gdGhlIGZvcm1hdCByZXR1cm5lZCBieSBSZWlmaWVkOjpnZXRNZXRhZGF0YSgpXG4gKiBAcmV0dXJucyBSZWFjdEVsZW1lbnQgdGhlIGF4aW9tcyBpbiBKU1ggZm9ybWF0IHRvIGRpc3BsYXlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEF4aW9tc0luZm9ybWF0aW9uSlNYKHBhcmVudEVudGl0eTogVGhpbmcsIGF4aW9tc0RpY3Q6IGFueSB8IG51bGwpIDogUmVhY3RFbGVtZW50IHtcbiAgICBjb25zdCBheGlvbXNUZXh0ID0gT2JqZWN0LmtleXMoYXhpb21zRGljdClcbiAgICAgICAgLm1hcCgoa2V5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBsYWJlbCA9IHBhcmVudEVudGl0eS5nZXRMaW5rZWRFbnRpdGllcygpLmdldExhYmVsRm9ySXJpKGtleSkgfHwga2V5O1xuICAgICAgICAgICAgaWYgKGxhYmVsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgXCIqXCIgKyBheGlvbXNEaWN0W2tleV0gKyBcIiAoXCIgKyBsYWJlbCArIFwiKVwiXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgcmV0dXJuIFwiXCI7XG4gICAgICAgIH0pXG4gICAgICAgIC5qb2luKFwiXFxuXCIpXG5cbiAgICByZXR1cm4gZ2V0VG9vbHRpcChheGlvbXNUZXh0KTtcbn1cblxuLyoqXG4gKiBPTkxZIFVTQUJMRSBXSVRIIFYyLUFQSSBFTlRJVElFU1xuICpcbiAqIFJldHVybnMgYSBsYWJlbGVkIGVudGl0eSBsaW5rIGFzIEpTWCBlbGVtZW50XG4gKiBAcGFyYW0gcGFyZW50RW50aXR5IHRoZSBlbnRpdHkgb2JqZWN0IGluIHdoaWNoIHRoZSBsaW5rZWQgZW50aXR5IGV4aXN0c1xuICogQHBhcmFtIGxpbmtlZEVudGl0aWVzIHRoZSBsaW5rZWRFbnRpdGllcyBvYmplY3QgKGV4aXN0cyBhcyBwYXJhbSBiZWNhdXNlIGl0IGlzIG5lY2Vzc2FyeSB0aGF0IHRoZSBlbnRpdHkgaGFzIGEgbGlua2VkRW50aXRpZXMgYmxvY2sgaW4gcHJvcGVydGllcylcbiAqIEBwYXJhbSBpcmkgICB0aGUgZW50aXRpZXMnIGlyaVxuICogQHBhcmFtIGFwaSAgIHRoZSBhcGkgdXNlZCB0byBleHRyYWN0IHRoZSBmcm9udGVuZCBhcGkgdG8gbGluayB0byBsaW5rZWQgZW50aXR5XG4gKiBAcGFyYW0gc2hvd0JhZGdlcyAgICBib29sZWFuIHdoaWNoIGluZGljYXRlcyBpZiBiYWRnZXMgc2hvdWxkIGJlIHNob3duXG4gKiBAcmV0dXJucyBSZWFjdEVsZW1lbnQgdGhlIGVudGl0eSBsaW5rIEpTWFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW50aXR5TGlua0pTWChwYXJlbnRFbnRpdHk6IFRoaW5nLCBsaW5rZWRFbnRpdGllczogTGlua2VkRW50aXRpZXMsIGlyaTogc3RyaW5nLCBhcGk6IHN0cmluZywgc2hvd0JhZGdlcyA6IGJvb2xlYW4gPSBERUZBVUxUX1NIT1dfQkFER0VTKTogUmVhY3RFbGVtZW50IHtcbiAgICBjb25zdCBmcm9udGVuZEFwaSA9IGdldEZyb250RW5kQXBpKGFwaSk7XG4gICAgY29uc3QgbGFiZWwgPSBsaW5rZWRFbnRpdGllcy5nZXRMYWJlbEZvcklyaShpcmkpIHx8IGlyaS5zcGxpdChcIi9cIikucG9wKCkgfHwgaXJpO1xuICAgIGNvbnN0IGxpbmtlZEVudGl0eSA9IGxpbmtlZEVudGl0aWVzLmdldChpcmkpO1xuICAgIGNvbnN0IGxvY2FsT250b2xvZ3kgPSBwYXJlbnRFbnRpdHkuZ2V0T250b2xvZ3lJZCgpO1xuXG4gICAgLy8gcmVmZXJlbmNlIHRvIHNlbGY6IGp1c3QgZGlzcGxheSBsYWJlbCBiZWNhdXNlIHdlIGFyZSBhbHJlYWR5IG9uIHRoYXQgcGFnZVxuICAgIGlmIChwYXJlbnRFbnRpdHkuZ2V0VHlwZSgpICE9PSBcIm9udG9sb2d5XCIgJiYgaXJpID09PSBwYXJlbnRFbnRpdHk/LmdldElyaSgpKSB7XG4gICAgICAgIHJldHVybiA8Yj57cGFyZW50RW50aXR5LmdldExhYmVsKCl9PC9iPlxuICAgIH1cblxuICAgIGlmICghbGlua2VkRW50aXR5KSB7XG4gICAgICAgIGlmKGlyaS5zdGFydHNXaXRoKFwiaHR0cFwiKSkge1xuICAgICAgICAgICAgcmV0dXJuIDxhIGhyZWY9e2lyaX0+e2xhYmVsfTwvYT47XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBTbyBmYXIgb25seSBrbm93biBvY2N1cnJlbmNlIG9mIHRoaXMgYnJhbmNoIGlzIGZvciBvd2wjVGhpbmdcbiAgICAgICAgICAgIHJldHVybiA8c3Bhbj57bGFiZWx9PC9zcGFuPjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG90aGVyRGVmaW5lZEJ5ID0gbGlua2VkRW50aXR5W1wiZGVmaW5lZEJ5XCJdID8gbGlua2VkRW50aXR5W1wiZGVmaW5lZEJ5XCJdLmZpbHRlcigoZWxlbTogYW55KSA9PiB7cmV0dXJuIGVsZW0gIT09IGxvY2FsT250b2xvZ3l9KSA6IFtdO1xuICAgIGNvbnN0IGxpbmtlZEVudGl0eVR5cGUgPSBsaW5rZWRFbnRpdHlbXCJ0eXBlXCJdOyAvLyBUT0RPOiBkb2VzIHR5cGUga2V5IGFsd2F5cyBleGlzdCBpbiBsaW5rZWRFbnRpdHkgcmVsZXZhbnQgZm9yIHJlbGF0aW9uc1dpZGdldD9cblxuICAgIC8vIHNlZSBodHRwczovL2dpdGxhYi56Ym1lZC5kZS9rbS9zZW1sb29rcC9vbHM0Ly0vYmxvYi9kZXYvZnJvbnRlbmQvc3JjL2NvbXBvbmVudHMvRW50aXR5TGluay50c3ggZm9yIG9yaWdpbmFsIHJlZmVyZW5jZVxuICAgIGlmKG90aGVyRGVmaW5lZEJ5Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBpZihsaW5rZWRFbnRpdHlbXCJoYXNMb2NhbERlZmluaXRpb25cIl0pIHtcbiAgICAgICAgICAgIC8vIHNob3cgPGxhYmVsPiA8b250b2xvZ3lJZD4gd2hlcmUgPGxhYmVsPiBsaW5rcyB0byB0aGUgdGVybSBpbiB0aGlzIG9udG9sb2d5IGFuZCA8b250b2xvZ3lJZD4gbGlua3MgdG8gdGhlIHRlcm0gaW4gdGhlIGRlZmluaW5nIG9udG9sb2d5XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9e2Zyb250ZW5kQXBpICsgZ2V0VGVybUluT250b2xvZ3lTdWZmaXgobG9jYWxPbnRvbG9neSwgaXJpLCBsaW5rZWRFbnRpdHlUeXBlKX0+e2xhYmVsfTwvYT5cbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0JhZGdlcyA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9e2Zyb250ZW5kQXBpICsgZ2V0VGVybUluT250b2xvZ3lTdWZmaXgob3RoZXJEZWZpbmVkQnlbMF0sIGlyaSwgbGlua2VkRW50aXR5VHlwZSl9Pns8RXVpQmFkZ2UgY29sb3I9e1wic3VjY2Vzc1wifT57b3RoZXJEZWZpbmVkQnlbMF0udG9VcHBlckNhc2UoKX08L0V1aUJhZGdlPn08L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC8+IDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PjwvPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBzaG93IDxsYWJlbD4gPG9udG9sb2d5SWQ+IGxpbmtpbmcgdG8gdGhlIHRlcm0gaW4gdGhlIGRlZmluaW5nIG9udG9sb2d5XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9e2Zyb250ZW5kQXBpICsgZ2V0VGVybUluT250b2xvZ3lTdWZmaXgob3RoZXJEZWZpbmVkQnlbMF0sIGlyaSwgbGlua2VkRW50aXR5VHlwZSl9PntsYWJlbH08L2E+XG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNob3dCYWRnZXMgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPXtmcm9udGVuZEFwaSArIGdldFRlcm1Jbk9udG9sb2d5U3VmZml4KG90aGVyRGVmaW5lZEJ5WzBdLCBpcmksIGxpbmtlZEVudGl0eVR5cGUpfT57PEV1aUJhZGdlIGNvbG9yPXtcInN1Y2Nlc3NcIn0+e290aGVyRGVmaW5lZEJ5WzBdLnRvVXBwZXJDYXNlKCl9PC9FdWlCYWRnZT59PC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvPiA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD48Lz5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKVxuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYob3RoZXJEZWZpbmVkQnkubGVuZ3RoID4gMSkge1xuICAgICAgICBpZihsaW5rZWRFbnRpdHlbXCJoYXNMb2NhbERlZmluaXRpb25cIl0pIHtcbiAgICAgICAgICAgIC8vIHNob3cgPGxhYmVsPiA8b250b2xvZ3lJZDE+IDxvbnRvbG9neUlkMj4gLi4uIDxvbnRvbG9neUlkTj4gd2hlcmUgPGxhYmVsPiBsaW5rcyB0byB0aGUgdGVybSBpbiB0aGlzIG9udG9sb2d5IGFuZCA8b250b2xvZ3lJZEk+IGxpbmtzIHRvIHRoZSB0ZXJtIGluIHRoYXQgZGVmaW5pbmcgb250b2xvZ3lcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj17ZnJvbnRlbmRBcGkgKyBnZXRUZXJtSW5PbnRvbG9neVN1ZmZpeChsb2NhbE9udG9sb2d5LCBpcmksIGxpbmtlZEVudGl0eVR5cGUpfT57bGFiZWx9PC9hPlxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaG93QmFkZ2VzID9cbiAgICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge290aGVyRGVmaW5lZEJ5Lm1hcCgoZWxlbTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBrZXk9e3JhbmRvbVN0cmluZygpfSBocmVmPXtmcm9udGVuZEFwaSArIGdldFRlcm1Jbk9udG9sb2d5U3VmZml4KGVsZW0sIGlyaSwgbGlua2VkRW50aXR5VHlwZSl9Pns8RXVpQmFkZ2UgY29sb3I9e1wic3VjY2Vzc1wifT57ZWxlbS50b1VwcGVyQ2FzZSgpfTwvRXVpQmFkZ2U+fTwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvPiA6XG4gICAgICAgICAgICAgICAgICAgICAgICA8PjwvPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBzaG93IDxsYWJlbD48SUNPTj4gd2hlcmUgPGxhYmVsPiBsaW5rcyB0byB0aGUgdGVybXMnIGlyaSBhbmQgPElDT04+IGxpbmtzIHRvIGRpc2FtYmlndWF0aW9uIHBhZ2VcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj17aXJpfT57bGFiZWx9PC9hPlxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaG93QmFkZ2VzID9cbiAgICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEga2V5PXtyYW5kb21TdHJpbmcoKX0gaHJlZj17ZnJvbnRlbmRBcGkgKyBgL3NlYXJjaD9xPSR7ZW5jb2RlVVJJQ29tcG9uZW50KGxhYmVsKX0mZXhhY3RNYXRjaD10cnVlYH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxFdWlCYWRnZSBjb2xvcj17XCJzdWNjZXNzXCJ9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEV1aUljb24gdHlwZT17XCJzZWFyY2hcIn0gc2l6ZT17XCJzXCJ9Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge290aGVyRGVmaW5lZEJ5Lmxlbmd0aH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1wib250b2xvZ2llc1wifVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0V1aUJhZGdlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvPiA6XG4gICAgICAgICAgICAgICAgICAgICAgICA8PjwvPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZihsaW5rZWRFbnRpdHlbXCJoYXNMb2NhbERlZmluaXRpb25cIl0pIHtcbiAgICAgICAgICAgIC8vIHNob3cgPGxhYmVsPiB3aGVyZSA8bGFiZWw+IGxpbmtzIHRvIHRoZSB0ZXJtIGluIHRoaXMgb250b2xvZ3lcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj17ZnJvbnRlbmRBcGkgKyBnZXRUZXJtSW5PbnRvbG9neVN1ZmZpeChsb2NhbE9udG9sb2d5LCBpcmksIGxpbmtlZEVudGl0eVR5cGUpfT57bGFiZWx9PC9hPlxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYocGFyc2VJbnQobGlua2VkRW50aXR5W1wibnVtQXBwZWFyc0luXCJdKSA+IDApIHtcbiAgICAgICAgICAgICAgICAvLyBzaG93IDxsYWJlbD48SUNPTj4gd2hlcmUgPGxhYmVsPiBsaW5rcyB0byB0aGUgdGVybXMnIGlyaSBhbmQgPElDT04+IGxpbmtzIHRvIGRpc2FtYmlndWF0aW9uIHBhZ2VcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj17aXJpfT57bGFiZWx9PC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dCYWRnZXMgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBrZXk9e3JhbmRvbVN0cmluZygpfSBocmVmPXtmcm9udGVuZEFwaSArIGAvc2VhcmNoP3E9JHtlbmNvZGVVUklDb21wb25lbnQobGFiZWwpfSZleGFjdE1hdGNoPXRydWVgfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RXVpQmFkZ2UgY29sb3I9e1wic3VjY2Vzc1wifT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEV1aUljb24gdHlwZT17XCJzZWFyY2hcIn0gc2l6ZT17XCJzXCJ9Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtsaW5rZWRFbnRpdHlbXCJudW1BcHBlYXJzSW5cIl19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cGFyc2VJbnQobGlua2VkRW50aXR5W1wibnVtQXBwZWFyc0luXCJdKSA+IDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gXCJvbnRvbG9naWVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJvbnRvbG9neVwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRXVpQmFkZ2U+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvPiA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw+PC8+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIHNob3cgcmF3IGlyaVxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPXtpcml9PntsYWJlbH08L2E+XG4gICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyoqXG4gKiBPTkxZIFVTQUJMRSBXSVRIIFYyLUFQSSBFTlRJVElFU1xuICpcbiAqIEJ1aWxkcyBhbmQgcmV0dXJucyBvbmUgZWxlbWVudCBvZiBhIHNlY3Rpb25zJyBsaXN0LCBwb3NzaWJseSBpbiBhIHJlY3Vyc2l2ZSBmYXNoaW9uIGJ5IHBhcnNpbmcgdGhlIHJlc3BvbnNlIG9iamVjdCBhdCB0aGUgY3VycmVudFJlc3BvbnNlUGF0aCB0byBzaG93IE1hbmNoZXN0ZXIgc3ludGF4LlxuICogQHBhcmFtIHBhcmVudEVudGl0eSB0aGUgZW50aXR5IG9iamVjdCBwb3NzZXNzaW5nIHRoZSB3aG9sZSByZXNwb25zZSBvYmplY3RcbiAqIEBwYXJhbSBsaW5rZWRFbnRpdGllcyB0aGUgbGlua2VkRW50aXRpZXMgb2JqZWN0IChleGlzdHMgYXMgcGFyYW0gYmVjYXVzZSBpdCBpcyBuZWNlc3NhcnkgdGhhdCB0aGUgZW50aXR5IGhhcyBhIGxpbmtlZEVudGl0aWVzIGJsb2NrIGluIHByb3BlcnRpZXMpXG4gKiBAcGFyYW0gY3VycmVudFJlc3BvbnNlUGF0aCB0aGUgY3VycmVudCBzdWItb2JqZWN0IG9mIHRoZSBwYXJlbnRFbnRpdGllcyByZXNwb25zZSBvYmplY3QgcGFyc2VkIGFzIGNsYXNzIGV4cHJlc3Npb25cbiAqIEBwYXJhbSBhcGkgdGhlIGFwaSB1c2VkIHRvIGV4dHJhY3QgdGhlIGZyb250ZW5kIGFwaSB0byBsaW5rIHRvIGxpbmtlZCBlbnRpdHkgKG5lY2Vzc2FyeSBmb3IgY2FsbCB0byBnZXRFbnRpdHlMaW5rSlNYKCkpXG4gKiBAcGFyYW0gc2hvd0JhZGdlcyBib29sZWFuIHdoaWNoIGluZGljYXRlcyBpZiBiYWRnZXMgc2hvdWxkIGJlIHNob3duXG4gKiBAcmV0dXJucyBSZWFjdEVsZW1lbnQgdGhlIGNsYXNzIGV4cHJlc3Npb24gSlNYXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDbGFzc0V4cHJlc3Npb25KU1gocGFyZW50RW50aXR5OiBUaGluZywgbGlua2VkRW50aXRpZXM6IExpbmtlZEVudGl0aWVzLCBjdXJyZW50UmVzcG9uc2VQYXRoOiBhbnksIGFwaTogc3RyaW5nLCBzaG93QmFkZ2VzOiBib29sZWFuID0gREVGQVVMVF9TSE9XX0JBREdFUyk6IFJlYWN0RWxlbWVudCB7XG4gICAgbGV0IHJlc3VsdCA9IDw+PC8+O1xuXG4gICAgLy8gbWVyZ2UgbGlua2VkRW50aXRpZXMgb2YgY3VycmVudFJlc3BvbnNlUGF0aCBpZiBjdXJyZW50UmVzcG9uc2VQYXRoLmxpbmtlZEVudGl0aWVzIGlzIG5vdCB1bmRlZmluZWRcbiAgICBsaW5rZWRFbnRpdGllcyA9IGxpbmtlZEVudGl0aWVzLm1lcmdlV2l0aChjdXJyZW50UmVzcG9uc2VQYXRoLmxpbmtlZEVudGl0aWVzKTtcblxuICAgIGlmICh0eXBlb2YgY3VycmVudFJlc3BvbnNlUGF0aCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXN1bHQgPSBnZXRFbnRpdHlMaW5rSlNYKHBhcmVudEVudGl0eSwgbGlua2VkRW50aXRpZXMsIGN1cnJlbnRSZXNwb25zZVBhdGgsIGFwaSwgc2hvd0JhZGdlcyk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBjdXJyZW50UmVzcG9uc2VQYXRoID09PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KGN1cnJlbnRSZXNwb25zZVBhdGgpICYmIEFycmF5LmlzQXJyYXkoY3VycmVudFJlc3BvbnNlUGF0aFtcInR5cGVcIl0pICYmIGN1cnJlbnRSZXNwb25zZVBhdGhbXCJ0eXBlXCJdLmluZGV4T2YoXCJyZWlmaWNhdGlvblwiKSAhPT0gLTEpIHsgLy8gVE9ETzogQ29uY2F0IHdpdGggZWxzZSBwYXJ0PyBTZWUgcmVsYXRlZEZyb20gKE1hbmNoZXN0ZXIgc3ludGF4IGRvZXMgbm90IGdldCBkaXNwbGF5ZWQsIGJ1dCBuZWl0aGVyIGluIG9sczQpXG4gICAgICAgIC8vIGN1cnJlbnQgcmVzcG9uc2UgcGF0aCBpcyByZWlmaWNhdGlvblxuICAgICAgICByZXN1bHQgPSBnZXRSZWlmaWVkSlNYKHBhcmVudEVudGl0eSwgUmVpZmllZC5mcm9tSnNvbjxhbnk+KGN1cnJlbnRSZXNwb25zZVBhdGgpWzBdLCBhcGksIHNob3dCYWRnZXMpO1xuICAgIH1cbiAgICBlbHNlIHsgLy8gdHlwZSA9PT0gXCJvYmplY3RcIlxuICAgICAgICBjb25zdCBzb21lVmFsdWVzRnJvbSA9IGN1cnJlbnRSZXNwb25zZVBhdGhbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNzb21lVmFsdWVzRnJvbVwiXTtcbiAgICAgICAgY29uc3QgYWxsVmFsdWVzRnJvbSA9IGN1cnJlbnRSZXNwb25zZVBhdGhbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNhbGxWYWx1ZXNGcm9tXCJdO1xuICAgICAgICBjb25zdCBpbnRlcnNlY3Rpb25PZiA9IGFzQXJyYXkoY3VycmVudFJlc3BvbnNlUGF0aFtcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2ludGVyc2VjdGlvbk9mXCJdKTtcbiAgICAgICAgY29uc3QgdW5pb25PZiA9IGFzQXJyYXkoY3VycmVudFJlc3BvbnNlUGF0aFtcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI3VuaW9uT2ZcIl0pO1xuICAgICAgICBjb25zdCBoYXNWYWx1ZSA9IGN1cnJlbnRSZXNwb25zZVBhdGhbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNoYXNWYWx1ZVwiXTtcbiAgICAgICAgY29uc3QgbWluQ2FyZGluYWxpdHkgPSBjdXJyZW50UmVzcG9uc2VQYXRoW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjbWluQ2FyZGluYWxpdHlcIl0gfHwgY3VycmVudFJlc3BvbnNlUGF0aFtcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI21pblF1YWxpZmllZENhcmRpbmFsaXR5XCJdO1xuICAgICAgICBjb25zdCBtYXhDYXJkaW5hbGl0eSA9IGN1cnJlbnRSZXNwb25zZVBhdGhbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNtYXhDYXJkaW5hbGl0eVwiXSB8fCBjdXJyZW50UmVzcG9uc2VQYXRoW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjbWF4UXVhbGlmaWVkQ2FyZGluYWxpdHlcIl07XG4gICAgICAgIGNvbnN0IGNhcmRpbmFsaXR5ID0gY3VycmVudFJlc3BvbnNlUGF0aFtcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2NhcmRpbmFsaXR5XCJdIHx8IGN1cnJlbnRSZXNwb25zZVBhdGhbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNxdWFsaWZpZWRDYXJkaW5hbGl0eVwiXTtcbiAgICAgICAgY29uc3QgaGFzU2VsZiA9IGN1cnJlbnRSZXNwb25zZVBhdGhbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNoYXNTZWxmXCJdO1xuICAgICAgICBjb25zdCBjb21wbGVtZW50T2YgPSBjdXJyZW50UmVzcG9uc2VQYXRoW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjY29tcGxlbWVudE9mXCJdO1xuICAgICAgICBjb25zdCBvbmVPZiA9IGFzQXJyYXkoY3VycmVudFJlc3BvbnNlUGF0aFtcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI29uZU9mXCJdKTtcbiAgICAgICAgY29uc3QgaW52ZXJzZU9mID0gY3VycmVudFJlc3BvbnNlUGF0aFtcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2ludmVyc2VPZlwiXTtcbiAgICAgICAgY29uc3Qgb25Qcm9wZXJ0eSA9IGN1cnJlbnRSZXNwb25zZVBhdGhbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNvblByb3BlcnR5XCJdO1xuICAgICAgICBjb25zdCBvbkRhdGFUeXBlID0gY3VycmVudFJlc3BvbnNlUGF0aFtcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI29uRGF0YXR5cGVcIl07XG5cbiAgICAgICAgaWYob25EYXRhVHlwZSkge1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudHM6IFJlYWN0RWxlbWVudFtdID0gW1xuICAgICAgICAgICAgICAgIGdldENsYXNzRXhwcmVzc2lvbkpTWChwYXJlbnRFbnRpdHksIGxpbmtlZEVudGl0aWVzLCBvbkRhdGFUeXBlLCBhcGksIHNob3dCYWRnZXMpXG4gICAgICAgICAgICBdO1xuXG4gICAgICAgICAgICBjb25zdCB3aXRoUmVzdHJpY3Rpb25zID0gYXNBcnJheShjdXJyZW50UmVzcG9uc2VQYXRoW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjd2l0aFJlc3RyaWN0aW9uc1wiXSk7XG4gICAgICAgICAgICBpZih3aXRoUmVzdHJpY3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKDw+WzwvPik7XG5cbiAgICAgICAgICAgICAgICBsZXQgaXNGaXJzdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgZm9yKGNvbnN0IHJlc3RyaWN0aW9uIG9mIHdpdGhSZXN0cmljdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYoaXNGaXJzdCkgaXNGaXJzdCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIGVsZW1lbnRzLnB1c2goPD4sJm5ic3A7PC8+KTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBtaW5FeGNsdXNpdmUgPSByZXN0cmljdGlvbltcImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI21pbkV4Y2x1c2l2ZVwiXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWluSW5jbHVzaXZlID0gcmVzdHJpY3Rpb25bXCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNtaW5JbmNsdXNpdmVcIl07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1heEV4Y2x1c2l2ZSA9IHJlc3RyaWN0aW9uW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjbWF4RXhjbHVzaXZlXCJdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXhJbmNsdXNpdmUgPSByZXN0cmljdGlvbltcImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI21heEluY2x1c2l2ZVwiXTtcblxuICAgICAgICAgICAgICAgICAgICBpZihtaW5FeGNsdXNpdmUpIGVsZW1lbnRzLnB1c2goPD4mZ3Q7IHttaW5FeGNsdXNpdmV9PC8+KTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZihtaW5JbmNsdXNpdmUpIGVsZW1lbnRzLnB1c2goPD4mZ2U7IHttaW5JbmNsdXNpdmV9PC8+KTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZihtYXhFeGNsdXNpdmUpIGVsZW1lbnRzLnB1c2goPD4mbHQ7IHttYXhFeGNsdXNpdmV9PC8+KTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZihtYXhJbmNsdXNpdmUpIGVsZW1lbnRzLnB1c2goPD4mbGU7IHttYXhJbmNsdXNpdmV9PC8+KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKDw+XTwvPik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlc3VsdCA9IDw+e2VsZW1lbnRzLm1hcCgoZWxlbSkgPT4gPHNwYW4ga2V5PXtyYW5kb21TdHJpbmcoKX0+e2VsZW19PC9zcGFuPil9PC8+XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc29tZVZhbHVlc0Zyb20pIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKHBhcmVudEVudGl0eSwgbGlua2VkRW50aXRpZXMsIG9uUHJvcGVydHksIGFwaSwgc2hvd0JhZGdlcyl9XG4gICAgICAgICAgICAgICAgICAgIDxpIHN0eWxlPXt7Y29sb3I6IFwicHVycGxlXCJ9fT4gc29tZSA8L2k+XG4gICAgICAgICAgICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1gocGFyZW50RW50aXR5LCBsaW5rZWRFbnRpdGllcywgYXNBcnJheShzb21lVmFsdWVzRnJvbSlbMF0sIGFwaSwgc2hvd0JhZGdlcyl9XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGFsbFZhbHVlc0Zyb20pIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKHBhcmVudEVudGl0eSwgbGlua2VkRW50aXRpZXMsIG9uUHJvcGVydHksIGFwaSwgc2hvd0JhZGdlcyl9XG4gICAgICAgICAgICAgICAgICAgIDxpIHN0eWxlPXt7Y29sb3I6IFwicHVycGxlXCJ9fT4gb25seSA8L2k+XG4gICAgICAgICAgICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1gocGFyZW50RW50aXR5LCBsaW5rZWRFbnRpdGllcywgYXNBcnJheShhbGxWYWx1ZXNGcm9tKVswXSwgYXBpLCBzaG93QmFkZ2VzKX1cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaW50ZXJzZWN0aW9uT2YubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudHM6IFJlYWN0RWxlbWVudFtdID0gW1xuICAgICAgICAgICAgICAgIDxzcGFuIGtleT17cmFuZG9tU3RyaW5nKCl9IGNsYXNzTmFtZT1cInRleHQtbmV1dHJhbC1kZWZhdWx0XCI+XG4gICAgICAgICAgICAgICAgICAgICYjNDA7XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZWxlbSBvZiBpbnRlcnNlY3Rpb25PZikge1xuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgICA8aT4gYW5kIDwvaT5cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaChcbiAgICAgICAgICAgICAgICAgICAgZ2V0Q2xhc3NFeHByZXNzaW9uSlNYKHBhcmVudEVudGl0eSwgbGlua2VkRW50aXRpZXMsIGVsZW0sIGFwaSwgc2hvd0JhZGdlcylcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxlbWVudHMucHVzaChcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LW5ldXRyYWwtZGVmYXVsdFwiPlxuICAgICAgICAgICAgICAgICAgICAmIzQxO1xuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXN1bHQgPSAoXG4gICAgICAgICAgICAgICAgPHNwYW4+e2VsZW1lbnRzLm1hcCgoZWxlbSkgPT4gPHNwYW4ga2V5PXtyYW5kb21TdHJpbmcoKX0+e2VsZW19PC9zcGFuPil9PC9zcGFuPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh1bmlvbk9mLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRzOiBSZWFjdEVsZW1lbnRbXSA9IFtcbiAgICAgICAgICAgICAgICA8c3BhbiBrZXk9e3JhbmRvbVN0cmluZygpfSBjbGFzc05hbWU9XCJ0ZXh0LW5ldXRyYWwtZGVmYXVsdFwiPlxuICAgICAgICAgICAgICAgICAgICAmIzQwO1xuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGVsZW0gb2YgdW5pb25PZikge1xuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgICA8aT4gb3IgPC9pPlxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICBnZXRDbGFzc0V4cHJlc3Npb25KU1gocGFyZW50RW50aXR5LCBsaW5rZWRFbnRpdGllcywgZWxlbSwgYXBpLCBzaG93QmFkZ2VzKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbGVtZW50cy5wdXNoKFxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtbmV1dHJhbC1kZWZhdWx0XCI+XG4gICAgICAgICAgICAgICAgICAgICYjNDE7XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJlc3VsdCA9IChcbiAgICAgICAgICAgICAgICA8c3Bhbj57ZWxlbWVudHMubWFwKChlbGVtKSA9PiA8c3BhbiBrZXk9e3JhbmRvbVN0cmluZygpfT57ZWxlbX08L3NwYW4+KX08L3NwYW4+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGhhc1ZhbHVlKSB7XG4gICAgICAgICAgICByZXN1bHQgPSAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAge2dldENsYXNzRXhwcmVzc2lvbkpTWChwYXJlbnRFbnRpdHksIGxpbmtlZEVudGl0aWVzLCBvblByb3BlcnR5LCBhcGksIHNob3dCYWRnZXMpfVxuICAgICAgICAgICAgICAgICAgICA8aSBzdHlsZT17e2NvbG9yOiBcInB1cnBsZVwifX0+IHZhbHVlIDwvaT5cbiAgICAgICAgICAgICAgICAgICAge2dldENsYXNzRXhwcmVzc2lvbkpTWChwYXJlbnRFbnRpdHksIGxpbmtlZEVudGl0aWVzLCBhc0FycmF5KGhhc1ZhbHVlKVswXSwgYXBpLCBzaG93QmFkZ2VzKX1cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobWluQ2FyZGluYWxpdHkpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKHBhcmVudEVudGl0eSwgbGlua2VkRW50aXRpZXMsIG9uUHJvcGVydHksIGFwaSwgc2hvd0JhZGdlcyl9XG4gICAgICAgICAgICAgICAgICAgIDxpIHN0eWxlPXt7Y29sb3I6IFwicHVycGxlXCJ9fT4gbWluIDwvaT5cbiAgICAgICAgICAgICAgICAgICAge2dldENsYXNzRXhwcmVzc2lvbkpTWChwYXJlbnRFbnRpdHksIGxpbmtlZEVudGl0aWVzLCBhc0FycmF5KG1pbkNhcmRpbmFsaXR5KVswXSwgYXBpLCBzaG93QmFkZ2VzKX1cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobWF4Q2FyZGluYWxpdHkpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKHBhcmVudEVudGl0eSwgbGlua2VkRW50aXRpZXMsIG9uUHJvcGVydHksIGFwaSwgc2hvd0JhZGdlcyl9XG4gICAgICAgICAgICAgICAgICAgIDxpIHN0eWxlPXt7Y29sb3I6IFwicHVycGxlXCJ9fT4gbWF4IDwvaT5cbiAgICAgICAgICAgICAgICAgICAge2dldENsYXNzRXhwcmVzc2lvbkpTWChwYXJlbnRFbnRpdHksIGxpbmtlZEVudGl0aWVzLCBhc0FycmF5KG1heENhcmRpbmFsaXR5KVswXSwgYXBpLCBzaG93QmFkZ2VzKX1cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY2FyZGluYWxpdHkpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKHBhcmVudEVudGl0eSwgbGlua2VkRW50aXRpZXMsIG9uUHJvcGVydHksIGFwaSwgc2hvd0JhZGdlcyl9XG4gICAgICAgICAgICAgICAgICAgIDxpIHN0eWxlPXt7Y29sb3I6IFwicHVycGxlXCJ9fT4gZXhhY3RseSA8L2k+XG4gICAgICAgICAgICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1gocGFyZW50RW50aXR5LCBsaW5rZWRFbnRpdGllcywgYXNBcnJheShjYXJkaW5hbGl0eSlbMF0sIGFwaSwgc2hvd0JhZGdlcyl9XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGhhc1NlbGYpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKHBhcmVudEVudGl0eSwgbGlua2VkRW50aXRpZXMsIG9uUHJvcGVydHksIGFwaSwgc2hvd0JhZGdlcyl9XG4gICAgICAgICAgICAgICAgICAgIDxpIHN0eWxlPXt7Y29sb3I6IFwicHVycGxlXCJ9fT4gU2VsZiA8L2k+XG4gICAgICAgICAgICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1gocGFyZW50RW50aXR5LCBsaW5rZWRFbnRpdGllcywgYXNBcnJheShoYXNTZWxmKVswXSwgYXBpLCBzaG93QmFkZ2VzKX1cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY29tcGxlbWVudE9mKSB7XG4gICAgICAgICAgICByZXN1bHQgPSAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgPGk+bm90IDwvaT5cbiAgICAgICAgICAgICAgICAgICAge2dldENsYXNzRXhwcmVzc2lvbkpTWChwYXJlbnRFbnRpdHksIGxpbmtlZEVudGl0aWVzLCBhc0FycmF5KGNvbXBsZW1lbnRPZilbMF0sIGFwaSwgc2hvd0JhZGdlcyl9XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG9uZU9mLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRzOiBSZWFjdEVsZW1lbnRbXSA9IFtcbiAgICAgICAgICAgICAgICA8c3BhbiBrZXk9e3JhbmRvbVN0cmluZygpfSBjbGFzc05hbWU9XCJ0ZXh0LW5ldXRyYWwtZGVmYXVsdFwiPlxuICAgICAgICAgICAgICAgICAgICAmIzEyMztcbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBlbGVtIG9mIG9uZU9mKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGtleT17cmFuZG9tU3RyaW5nKCl9IGNsYXNzTmFtZT1cInRleHQtbmV1dHJhbC1kZWZhdWx0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICYjNDQ7Jm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIGdldENsYXNzRXhwcmVzc2lvbkpTWChwYXJlbnRFbnRpdHksIGxpbmtlZEVudGl0aWVzLCBlbGVtLCBhcGksIHNob3dCYWRnZXMpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsZW1lbnRzLnB1c2goXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1uZXV0cmFsLWRlZmF1bHRcIj5cbiAgICAgICAgICAgICAgICAgICAgJiMxMjU7XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJlc3VsdCA9IChcbiAgICAgICAgICAgICAgICA8c3Bhbj57ZWxlbWVudHMubWFwKChlbGVtKSA9PiA8c3BhbiBrZXk9e3JhbmRvbVN0cmluZygpfT57ZWxlbX08L3NwYW4+KX08L3NwYW4+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGludmVyc2VPZikge1xuICAgICAgICAgICAgcmVzdWx0ID0gKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIDxpIHN0eWxlPXt7Y29sb3I6IFwicHVycGxlXCJ9fT5pbnZlcnNlIDwvaT5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4ga2V5PXtyYW5kb21TdHJpbmcoKX0gY2xhc3NOYW1lPVwidGV4dC1uZXV0cmFsLWRlZmF1bHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAmIzQwO1xuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1gocGFyZW50RW50aXR5LCBsaW5rZWRFbnRpdGllcywgaW52ZXJzZU9mLCBhcGksIHNob3dCYWRnZXMpfVxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBrZXk9e3JhbmRvbVN0cmluZygpfSBjbGFzc05hbWU9XCJ0ZXh0LW5ldXRyYWwtZGVmYXVsdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICYjNDE7XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEJ1aWxkcyBhbmQgcmV0dXJucyBhbiBhcnJheSBvZiBzZWN0aW9uIGxpc3QgZWxlbWVudHMgc3BlY2lmaWVkIGF0IGBjdXJyZW50UmVzcG9uc2VQYXRoYFxuICogQHBhcmFtIHBhcmVudEVudGl0eVxuICogQHBhcmFtIGxpbmtlZEVudGl0aWVzXG4gKiBAcGFyYW0gYXJyYXlcbiAqIEBwYXJhbSBhcGlcbiAqIEBwYXJhbSBzaG93QmFkZ2VzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWN0aW9uTGlzdEpTWChwYXJlbnRFbnRpdHk6IFRoaW5nLCBsaW5rZWRFbnRpdGllczogTGlua2VkRW50aXRpZXMsIGFycmF5OiBhbnlbXSwgYXBpOiBzdHJpbmcsIHNob3dCYWRnZXM6IGJvb2xlYW4gPSBERUZBVUxUX1NIT1dfQkFER0VTKTogUmVhY3RFbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgICA8PlxuICAgICAgICAgICAge2FycmF5Lmxlbmd0aCA9PT0gMSA/IChcbiAgICAgICAgICAgICAgICA8cD57Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKHBhcmVudEVudGl0eSwgcGFyZW50RW50aXR5LmdldExpbmtlZEVudGl0aWVzKCksIGFycmF5WzBdLCBhcGksIHNob3dCYWRnZXMpfTwvcD5cbiAgICAgICAgICAgICkgOlxuICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgYXJyYXkubWFwKChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoPGxpIGtleT17cmFuZG9tU3RyaW5nKCl9ID57Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKHBhcmVudEVudGl0eSwgcGFyZW50RW50aXR5LmdldExpbmtlZEVudGl0aWVzKCksIGl0ZW0sIGFwaSwgc2hvd0JhZGdlcyl9PC9saT4pO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvdWw+fVxuICAgICAgICA8Lz5cbiAgICApO1xufVxuXG4vKipcbiAqIEluc2VydHMgbGlua3MgaW50byB0ZXh0IChwb3RlbnRpYWxseSB3aXRoIGxhYmVsIGluc3RlYWQgb2YgbGluayBkaXNwbGF5ZWQgaWYgbGluayBleGlzdHMgYXMga2V5IGluc2lkZSBsaW5rZWRFbnRpdGllcykgYW5kIHJldHVybnMgdGhlIHJlc3VsdGluZyBKU1ggZWxlbWVudFxuICogQHBhcmFtIHBhcmVudEVudGl0eSB0aGUgZW50aXR5IG9iamVjdCBwb3NzZXNzaW5nIHRoZSB3aG9sZSByZXNwb25zZSBvYmplY3RcbiAqIEBwYXJhbSB0ZXh0IHRoZSB0ZXh0IHRvIGluc2VydCBsaW5rcyBpbnRvXG4gKiBAcGFyYW0gbGlua2VkRW50aXRpZXMgdGhlIGxpbmtlZEVudGl0aWVzIG9iamVjdCAoaWYgdW5kZWZpbmVkLCBubyBsYWJlbHMgYXJlIGluZmVycmVkKVxuICogQHBhcmFtIGFwaSB0aGUgYXBpIHVzZWQgdG8gZXh0cmFjdCB0aGUgZnJvbnRlbmQgYXBpIHRvIGxpbmsgdG8gbGlua2VkIGVudGl0eSAobmVjZXNzYXJ5IGZvciBjYWxsIHRvIGdldEVudGl0eUxpbmtKU1goKSlcbiAqIEBwYXJhbSBzaG93QmFkZ2VzIGJvb2xlYW4gd2hpY2ggaW5kaWNhdGVzIGlmIGJhZGdlcyBzaG91bGQgYmUgc2hvd25cbiAqL1xuZnVuY3Rpb24gYWRkTGlua3NUb1RleHQocGFyZW50RW50aXR5OiBUaGluZywgdGV4dDogc3RyaW5nLCBsaW5rZWRFbnRpdGllczogTGlua2VkRW50aXRpZXMgfCB1bmRlZmluZWQsIGFwaTogc3RyaW5nLCBzaG93QmFkZ2VzOiBib29sZWFuID0gREVGQVVMVF9TSE9XX0JBREdFUykge1xuICAgIGNvbnN0IGxpbmtzVG9TcGxpY2U6IEFycmF5PHsgc3RhcnQ6IG51bWJlcjsgZW5kOiBudW1iZXI7IGxpbms6IFJlYWN0RWxlbWVudCB9PiA9XG4gICAgICAgIFtdO1xuXG4gICAgaWYobGlua2VkRW50aXRpZXMpIHtcbiAgICAgICAgZm9yIChjb25zdCBlbnRpdHlJZCBvZiBPYmplY3Qua2V5cyhsaW5rZWRFbnRpdGllcy5saW5rZWRFbnRpdGllcykpIHtcbiAgICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICAgICAgbGV0IG4gPSB0ZXh0LmluZGV4T2YoZW50aXR5SWQsIDApO1xuICAgICAgICAgICAgICAgIG4gIT09IC0xO1xuICAgICAgICAgICAgICAgIG4gPSB0ZXh0LmluZGV4T2YoZW50aXR5SWQsIG4pXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBsaW5rc1RvU3BsaWNlLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBzdGFydDogbixcbiAgICAgICAgICAgICAgICAgICAgZW5kOiBuICsgZW50aXR5SWQubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICBsaW5rOiBnZXRFbnRpdHlMaW5rSlNYKHBhcmVudEVudGl0eSwgbGlua2VkRW50aXRpZXMsIGVudGl0eUlkLCBhcGksIHNob3dCYWRnZXMpLFxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgbiArPSBlbnRpdHlJZC5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB1cmxSZSA9IC9bQS16XSs6XFwvXFwvW15cXHNdKy9nO1xuICAgIGZvciAobGV0IG1hdGNoID0gdXJsUmUuZXhlYyh0ZXh0KTsgbWF0Y2g7IG1hdGNoID0gdXJsUmUuZXhlYyh0ZXh0KSkge1xuICAgICAgICBjb25zdCB1cmwgPSBtYXRjaFswXTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJmb3VuZCBtYXRjaCBcIiArIHVybCk7XG5cbiAgICAgICAgbGlua3NUb1NwbGljZS5wdXNoKHtcbiAgICAgICAgICAgIHN0YXJ0OiBtYXRjaC5pbmRleCxcbiAgICAgICAgICAgIGVuZDogbWF0Y2guaW5kZXggKyB1cmwubGVuZ3RoLFxuICAgICAgICAgICAgbGluazogKFxuICAgICAgICAgICAgICAgIDxzcGFuIGtleT17cmFuZG9tU3RyaW5nKCl9PlxuICAgICAgICAgICAgICAgICAgICA8YSBocmVmPXt1cmx9Pnt1cmx9PC9hPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICksXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGxpbmtzVG9TcGxpY2Uuc29ydCgoYSxiKSA9PiBhLnN0YXJ0IC0gYi5zdGFydCk7XG5cbiAgICByZW1vdmVPdmVybGFwcGluZzogZm9yIChsZXQgbiA9IDA7IG4gPCBsaW5rc1RvU3BsaWNlLmxlbmd0aDsgKSB7XG4gICAgICAgIGZvciAobGV0IG4yID0gbiArIDE7IG4yIDwgbGlua3NUb1NwbGljZS5sZW5ndGg7ICsrbjIpIHtcbiAgICAgICAgICAgIGNvbnN0IHNwbGljZUEgPSBsaW5rc1RvU3BsaWNlW25dO1xuICAgICAgICAgICAgY29uc3Qgc3BsaWNlQiA9IGxpbmtzVG9TcGxpY2VbbjJdO1xuXG4gICAgICAgICAgICBpZiAoc3BsaWNlQSA9PT0gc3BsaWNlQikgY29udGludWU7XG5cbiAgICAgICAgICAgIC8vIFRoZSBzcGxpY2VzIG92ZXJsYXAgaWYgbmVpdGhlciBlbmRzIGJlZm9yZSB0aGUgb3RoZXIgc3RhcnRzXG4gICAgICAgICAgICBpZiAoc3BsaWNlQS5lbmQgPj0gc3BsaWNlQi5zdGFydCAmJiBzcGxpY2VCLmVuZCA+PSBzcGxpY2VBLnN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJSZW1vdmluZyBvdmVybGFwcGluZ1wiKTtcblxuICAgICAgICAgICAgICAgIC8vIHJlbW92ZSB0aGUgc2hvcnRlciBsaW5rIG9mIGJvdGhcbiAgICAgICAgICAgICAgICBpZihzcGxpY2VBLmVuZCAtIHNwbGljZUEuc3RhcnQgPCBzcGxpY2VCLmVuZCAtIHNwbGljZUIuc3RhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgbGlua3NUb1NwbGljZS5zcGxpY2UobiwgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsaW5rc1RvU3BsaWNlLnNwbGljZShuMiwgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlIHJlbW92ZU92ZXJsYXBwaW5nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgICsrbjtcbiAgICB9XG5cbiAgICBpZiAobGlua3NUb1NwbGljZS5sZW5ndGggPT09IDApIHJldHVybiA8Pnt0ZXh0fTwvPjtcblxuICAgIGNvbnN0IHJlczogUmVhY3RFbGVtZW50W10gPSBbXTtcbiAgICBsZXQgbiA9IDA7XG5cbiAgICBmb3IgKGNvbnN0IGxpbmsgb2YgbGlua3NUb1NwbGljZSkge1xuICAgICAgICByZXMucHVzaChcbiAgICAgICAgICAgIDxzcGFuIGtleT17cmFuZG9tU3RyaW5nKCl9PlxuICAgICAgICAgICAgICAgIHt0ZXh0LnN1YnN0cmluZyhuLCBsaW5rLnN0YXJ0KX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgKTtcbiAgICAgICAgcmVzLnB1c2gobGluay5saW5rKTtcbiAgICAgICAgbiA9IGxpbmsuZW5kO1xuICAgIH1cbiAgICByZXMucHVzaChcbiAgICAgICAgPHNwYW4ga2V5PXtyYW5kb21TdHJpbmcoKX0+e3RleHQuc2xpY2Uobil9PC9zcGFuPlxuICAgICk7XG5cbiAgICByZXR1cm4gPD57cmVzfTwvPjtcbn1cblxuXG4vKipcbiAqIFJlbmRlcnMgYSBnaXZlbiBSZWlmaWVkXG4gKiBAcGFyYW0gZW50aXR5IHRoZSBlbnRpdHkgdGhlIFJlaWZpZWQgZXhpc3RzIGluXG4gKiBAcGFyYW0gcmVpZmllZCB0aGUgUmVpZmllZFxuICogQHBhcmFtIGFwaSB0aGUgYXBpIHVzZWQgdG8gZXh0cmFjdCB0aGUgZnJvbnRlbmQgYXBpIHRvIGxpbmsgdG8gbGlua2VkIGVudGl0aWVzXG4gKiBAcGFyYW0gc2hvd0JhZGdlcyBib29sZWFuIHdoaWNoIGluZGljYXRlcyBpZiBiYWRnZXMgc2hvdWxkIGJlIHNob3duXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRSZWlmaWVkSlNYKGVudGl0eTogVGhpbmcsIHJlaWZpZWQ6IFJlaWZpZWQ8YW55PiwgYXBpOiBzdHJpbmcsIHNob3dCYWRnZXM6IGJvb2xlYW4gPSBERUZBVUxUX1NIT1dfQkFER0VTKTogUmVhY3RFbGVtZW50IHtcbiAgICBmdW5jdGlvbiBnZXRWYWx1ZUpTWCh2YWx1ZTogUmVpZmllZDxhbnk+KTogUmVhY3RFbGVtZW50IHtcbiAgICAgICAgY29uc3QgbGlua2VkRW50aXRpZXMgPSBlbnRpdHkuZ2V0TGlua2VkRW50aXRpZXMoKTtcblxuICAgICAgICAvLyBsaW5rZWRFbnRpdGllcyBub3QgZXhpc3RlbnQgb24gZW50aXR5ICgtPiBwcm9iYWJseSBsZWdhY3kgYXBpIHZlcnNpb24pXG4gICAgICAgIGlmKE9iamVjdC5rZXlzKGxpbmtlZEVudGl0aWVzLmxpbmtlZEVudGl0aWVzKS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgaWYodHlwZW9mIHZhbHVlLnZhbHVlID09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWRkTGlua3NUb1RleHQoZW50aXR5LCB2YWx1ZS52YWx1ZS50b1N0cmluZygpLCB1bmRlZmluZWQsIGFwaSwgc2hvd0JhZGdlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBzaG91bGQgbm90IGhhcHBlbiwgcHJvdmUgdGhhdCB0aGlzIGlzIG5ldmVyIHRoZSBjYXNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIDw+e0pTT04uc3RyaW5naWZ5KHZhbHVlLnZhbHVlKX08Lz47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBsaW5rZWRFbnRpdHkgPSBsaW5rZWRFbnRpdGllcy5nZXQodmFsdWUudmFsdWUpO1xuXG4gICAgICAgICAgICBpZiAobGlua2VkRW50aXR5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldEVudGl0eUxpbmtKU1goZW50aXR5LCBsaW5rZWRFbnRpdGllcywgdmFsdWUudmFsdWUsIGFwaSwgc2hvd0JhZGdlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlLnZhbHVlICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmKGVudGl0eS5nZXRUeXBlKCkgPT0gXCJvbnRvbG9neVwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPD57SlNPTi5zdHJpbmdpZnkodmFsdWUudmFsdWUpfTwvPjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRDbGFzc0V4cHJlc3Npb25KU1goZW50aXR5LCBsaW5rZWRFbnRpdGllcywgdmFsdWUudmFsdWUsIGFwaSwgc2hvd0JhZGdlcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhZGRMaW5rc1RvVGV4dChlbnRpdHksIHZhbHVlLnZhbHVlLnRvU3RyaW5nKCksIGxpbmtlZEVudGl0aWVzLCBhcGksIHNob3dCYWRnZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICAgIDw+XG4gICAgICAgICAgICB7Z2V0VmFsdWVKU1gocmVpZmllZCl9XG4gICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgIHtyZWlmaWVkLmhhc01ldGFkYXRhKCkgJiYgZ2V0QXhpb21zSW5mb3JtYXRpb25KU1goZW50aXR5LCByZWlmaWVkLmdldE1ldGFkYXRhKCkpfVxuICAgICAgICA8Lz5cbiAgICApO1xufSIsICJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge0V1aUJ1dHRvbiwgRXVpUHJvdmlkZXJ9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7SnNvbkFwaVdpZGdldFByb3BzfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuaW1wb3J0IHtRdWVyeUNsaWVudCwgUXVlcnlDbGllbnRQcm92aWRlcn0gZnJvbSBcInJlYWN0LXF1ZXJ5XCI7XG5cbmZ1bmN0aW9uIEpzb25BcGlXaWRnZXQocHJvcHM6IEpzb25BcGlXaWRnZXRQcm9wcykge1xuICBjb25zdCB7IGFwaVF1ZXJ5LCBidXR0b25UZXh0LCBidXR0b25TaXplIH0gPSBwcm9wcztcblxuICByZXR1cm4gKFxuICAgIDxFdWlCdXR0b24gaHJlZj17YXBpUXVlcnl9IHRhcmdldD1cIl9ibGFua1wiIHNpemU9e2J1dHRvblNpemUgfHwgXCJtXCJ9PntidXR0b25UZXh0fTwvRXVpQnV0dG9uPlxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVKc29uQXBpKHByb3BzOiBKc29uQXBpV2lkZ2V0UHJvcHMsIGNvbnRhaW5lcjogRWxlbWVudCwgY2FsbGJhY2s/OiAoKT0+dm9pZCkge1xuICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZEpzb25BcGlXaWRnZXQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZEpzb25BcGlXaWRnZXQocHJvcHM6IEpzb25BcGlXaWRnZXRQcm9wcykge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gKFxuICAgICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCI+XG4gICAgICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgICAgIDxKc29uQXBpV2lkZ2V0XG4gICAgICAgICAgICAgIGFwaVF1ZXJ5PXtwcm9wcy5hcGlRdWVyeX1cbiAgICAgICAgICAgICAgYnV0dG9uVGV4dD17cHJvcHMuYnV0dG9uVGV4dH1cbiAgICAgICAgICAgICAgYnV0dG9uU2l6ZT17cHJvcHMuYnV0dG9uU2l6ZX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgICA8L0V1aVByb3ZpZGVyPlxuICApXG59XG5cbmV4cG9ydCB7IEpzb25BcGlXaWRnZXQsIGNyZWF0ZUpzb25BcGkgfTtcbiIsICJpbXBvcnQgUmVhY3QsIHtSZWFjdEVsZW1lbnR9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtFdWlDYXJkLCBFdWlGbGV4SXRlbSwgRXVpTG9hZGluZ1NwaW5uZXIsIEV1aVByb3ZpZGVyLCBFdWlTcGFjZXIsIEV1aVRleHR9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7UXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIsIHVzZVF1ZXJ5fSBmcm9tIFwicmVhY3QtcXVlcnlcIjtcbmltcG9ydCB7IE9sc0FwaSB9IGZyb20gXCIuLi8uLi8uLi9hcGkvT2xzQXBpXCI7XG5pbXBvcnQge09udG9sb2d5LCBUaGluZ30gZnJvbSBcIi4uLy4uLy4uL21vZGVsL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7Y2FwaXRhbGl6ZSwgZGVDYW1lbENhc2UsIGRlVW5kZXJzY29yZSwgcmFuZG9tU3RyaW5nfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCB7Z2V0RW50aXR5TGlua0pTWCwgZ2V0UmVpZmllZEpTWH0gZnJvbSBcIi4uLy4uLy4uL21vZGVsL1N0cnVjdHVyZVJlbmRlcmluZ1wiO1xuaW1wb3J0IHtnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXl9IGZyb20gXCIuLi8uLi8uLi9hcHAvdXRpbFwiO1xuaW1wb3J0IHtPbnRvbG9neUluZm9XaWRnZXRQcm9wc30gZnJvbSBcIi4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcblxuY29uc3QgREVGQVVMVF9IQVNfVElUTEUgPSB0cnVlO1xuXG5mdW5jdGlvbiBPbnRvbG9neUluZm9XaWRnZXQocHJvcHM6IE9udG9sb2d5SW5mb1dpZGdldFByb3BzKSB7XG4gIGNvbnN0IHsgb250b2xvZ3lJZCwgYXBpLCBwYXJhbWV0ZXIsIGhhc1RpdGxlID0gREVGQVVMVF9IQVNfVElUTEUsIHVzZUxlZ2FjeSwgc2hvd0JhZGdlcywgLi4ucmVzdCB9ID0gcHJvcHM7XG4gIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICBjb25zdCB7XG4gICAgZGF0YTogb250b2xvZ3ksXG4gICAgaXNMb2FkaW5nOiBpc0xvYWRpbmdPbnRvbG9neSxcbiAgICBpc1N1Y2Nlc3M6IGlzU3VjY2Vzc09udG9sb2d5LFxuICAgIGlzRXJyb3I6IGlzRXJyb3JPbnRvbG9neSxcbiAgICBlcnJvcjogZXJyb3JPbnRvbG9neSxcbiAgfSA9IHVzZVF1ZXJ5KFxuICAgICAgW1xuICAgICAgICBcIm9udG9sb2d5SW5mb1wiLFxuICAgICAgICBwcm9wc1xuICAgICAgXSxcbiAgICAgICgpID0+IHtcbiAgICAgICAgcmV0dXJuIG9sc0FwaS5nZXRPbnRvbG9neU9iamVjdChvbnRvbG9neUlkLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSk7XG4gICAgICB9XG4gICk7XG5cbiAgZnVuY3Rpb24gZ2V0T250b2xvZ3lJcmlTZWN0aW9uKG9udG9sb2d5OiBPbnRvbG9neSk6IFJlYWN0RWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICB7KG9udG9sb2d5LmdldElyaSgpIHx8IG9udG9sb2d5LmdldE9udG9sb2d5UHVybCgpKSAmJlxuICAgICAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgPGI+T250b2xvZ3kgSVJJOjwvYj5cbiAgICAgICAgICAgICAgICA8cD48YSBpZD17XCJvbnRvbG9neUlyaVwifSBocmVmPXtvbnRvbG9neS5nZXRJcmkoKSB8fCBvbnRvbG9neS5nZXRPbnRvbG9neVB1cmwoKX0+XG4gICAgICAgICAgICAgICAgICB7b250b2xvZ3kuZ2V0SXJpKCkgfHwgb250b2xvZ3kuZ2V0T250b2xvZ3lQdXJsKCl9XG4gICAgICAgICAgICAgICAgPC9hPjwvcD5cbiAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgICB9XG4gICAgICAgIDwvPlxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRWZXJzaW9uSXJpU2VjdGlvbihvbnRvbG9neTogT250b2xvZ3kpIDogUmVhY3RFbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgICA8PlxuICAgICAgICAgIHtvbnRvbG9neS5nZXRWZXJzaW9uSXJpKCkgJiZcbiAgICAgICAgICAgICAgPEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgIDxiPlZlcnNpb24gSVJJOjwvYj5cbiAgICAgICAgICAgICAgICA8cD48YSBpZD17XCJ2ZXJzaW9uSXJpXCJ9IGhyZWY9e29udG9sb2d5LmdldFZlcnNpb25JcmkoKX0+XG4gICAgICAgICAgICAgICAgICB7b250b2xvZ3kuZ2V0VmVyc2lvbklyaSgpfVxuICAgICAgICAgICAgICAgIDwvYT48L3A+XG4gICAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICAgfVxuICAgICAgICA8Lz5cbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0TGFzdExvYWRTZWN0aW9uKG9udG9sb2d5OiBPbnRvbG9neSkgOiBSZWFjdEVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICAgIDw+XG4gICAgICAgICAge29udG9sb2d5LmdldFNvdXJjZUZpbGVUaW1lc3RhbXAoKSAmJlxuICAgICAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgPGI+TGFzdCBsb2FkZWQ6PC9iPlxuICAgICAgICAgICAgICAgIDxwPntuZXcgRGF0ZShvbnRvbG9neS5nZXRTb3VyY2VGaWxlVGltZXN0YW1wKCkpLnRvU3RyaW5nKCl9PC9wPlxuICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICAgIH1cbiAgICAgICAgPC8+XG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldE9udG9sb2d5SWRTZWN0aW9uKG9udG9sb2d5OiBPbnRvbG9neSkgOiBSZWFjdEVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICAgIDw+XG4gICAgICAgICAge29udG9sb2d5LmdldE9udG9sb2d5SWQoKSAmJlxuICAgICAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgPGI+T250b2xvZ3kgSUQ6PC9iPlxuICAgICAgICAgICAgICAgIDxwPntvbnRvbG9neS5nZXRPbnRvbG9neUlkKCl9PC9wPlxuICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICAgIH1cbiAgICAgICAgPC8+XG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFZlcnNpb25TZWN0aW9uKG9udG9sb2d5OiBPbnRvbG9neSkgOiBSZWFjdEVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICAgIDw+XG4gICAgICAgICAge29udG9sb2d5LmdldFZlcnNpb24oKSAmJlxuICAgICAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgPGI+VmVyc2lvbjo8L2I+XG4gICAgICAgICAgICAgICAgPHA+e29udG9sb2d5LmdldFZlcnNpb24oKX08L3A+XG4gICAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICAgfVxuICAgICAgICA8Lz5cbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0TnVtQ2xhc3Nlc1NlY3Rpb24ob250b2xvZ3k6IE9udG9sb2d5KSA6IFJlYWN0RWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICB7b250b2xvZ3kuZ2V0TnVtQ2xhc3NlcygpICYmXG4gICAgICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICA8Yj5OdW1iZXIgb2YgY2xhc3Nlczo8L2I+XG4gICAgICAgICAgICAgICAgPHA+e29udG9sb2d5LmdldE51bUNsYXNzZXMoKS50b0xvY2FsZVN0cmluZygpfTwvcD5cbiAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgICB9XG4gICAgICAgIDwvPlxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRDcmVhdG9yc1NlY3Rpb24ob250b2xvZ3k6IE9udG9sb2d5KSA6IFJlYWN0RWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICB7b250b2xvZ3kuZ2V0Q3JlYXRvcnMoKS5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgIDw+PEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgIDxiPkNyZWF0b3JzOjwvYj5cbiAgICAgICAgICAgICAgICB7b250b2xvZ3kuZ2V0Q3JlYXRvcnMoKS5sZW5ndGggPiAxID9cbiAgICAgICAgICAgICAgICAgICAgPHVsPntvbnRvbG9neS5nZXRDcmVhdG9ycygpLm1hcCgoY3JlYXRvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8bGkga2V5PXtjcmVhdG9yICsgcmFuZG9tU3RyaW5nKCl9PntnZXRFbnRpdHlMaW5rSlNYKG9udG9sb2d5LCBvbnRvbG9neS5nZXRMaW5rZWRFbnRpdGllcygpLCBjcmVhdG9yLCBhcGksIHNob3dCYWRnZXMpfTwvbGk+XG4gICAgICAgICAgICAgICAgICAgIH0pfTwvdWw+IDpcbiAgICAgICAgICAgICAgICAgICAgPHA+e2dldEVudGl0eUxpbmtKU1gob250b2xvZ3ksIG9udG9sb2d5LmdldExpbmtlZEVudGl0aWVzKCksIG9udG9sb2d5LmdldENyZWF0b3JzKClbMF0sIGFwaSwgc2hvd0JhZGdlcyl9PC9wPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT48RXVpU3BhY2VyLz48Lz5cbiAgICAgICAgICB9XG4gICAgICAgIDwvPlxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRBbm5vdGF0aW9uU2VjdGlvbih0aGluZzogVGhpbmcpIDogUmVhY3RFbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgICA8PlxuICAgICAgICAgIHt0aGluZy5nZXRBbm5vdGF0aW9uUHJlZGljYXRlcygpLm1hcCgoYW5ub0tleSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFubm9zID0gdGhpbmcuZ2V0QW5ub3RhdGlvbkJ5SWQoYW5ub0tleSk7XG4gICAgICAgICAgICAgICAgaWYoYW5ub3MubGVuZ3RoID09IDApIHJldHVybiA8PjwvPjtcblxuICAgICAgICAgICAgICAgIHJldHVybiA8RXVpRmxleEl0ZW0gZ3Jvdz17ZmFsc2V9IGtleT17YW5ub0tleX0+XG4gICAgICAgICAgICAgICAgICA8Yj57Y2FwaXRhbGl6ZShkZVVuZGVyc2NvcmUoZGVDYW1lbENhc2UodGhpbmcuZ2V0QW5ub3RhdGlvblRpdGxlQnlJZChhbm5vS2V5KSkpKX06PC9iPlxuICAgICAgICAgICAgICAgICAge2Fubm9zLmxlbmd0aCA+IDEgP1xuICAgICAgICAgICAgICAgICAgICAgIDx1bD57YW5ub3MubWFwKChhbm5vdGF0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPGxpIGtleT17cmFuZG9tU3RyaW5nKCl9IGlkPXthbm5vdGF0aW9uLnZhbHVlfT57Z2V0UmVpZmllZEpTWCh0aGluZywgYW5ub3RhdGlvbiwgYXBpLCBzaG93QmFkZ2VzKX08L2xpPjtcbiAgICAgICAgICAgICAgICAgICAgICB9KX08L3VsPiA6XG4gICAgICAgICAgICAgICAgICAgICAgPHAga2V5PXtyYW5kb21TdHJpbmcoKX0+e2dldFJlaWZpZWRKU1godGhpbmcsIGFubm9zWzBdLCBhcGksIHNob3dCYWRnZXMpfTwvcD5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgKX1cbiAgICAgICAgPC8+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICA8RXVpQ2FyZFxuICAgICAgICAgICAgdGl0bGU9e2hhc1RpdGxlID8gXCJPbnRvbG9neSBJbmZvcm1hdGlvblwiIDogXCJcIn1cbiAgICAgICAgICAgIGxheW91dD1cImhvcml6b250YWxcIlxuICAgICAgICA+XG5cbiAgICAgICAgICB7aXNMb2FkaW5nT250b2xvZ3kgJiYgPEV1aUxvYWRpbmdTcGlubmVyIHNpemU9eydzJ30vPn1cbiAgICAgICAgICB7aXNTdWNjZXNzT250b2xvZ3kgJiYgb250b2xvZ3kgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICA8RXVpVGV4dCB7Li4ucmVzdH0+XG5cbiAgICAgICAgICAgICAgICB7Z2V0T250b2xvZ3lJcmlTZWN0aW9uKG9udG9sb2d5KX1cbiAgICAgICAgICAgICAgICB7Z2V0VmVyc2lvbklyaVNlY3Rpb24ob250b2xvZ3kpfVxuICAgICAgICAgICAgICAgIHtnZXRMYXN0TG9hZFNlY3Rpb24ob250b2xvZ3kpfVxuICAgICAgICAgICAgICAgIHsvKiBUT0RPOiBEbyB3ZSB3YW50IHRoZSBmb2xsb3dpbmcgb24gdGhlIGluZm9ybWF0aW9uIHdpZGdldD9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEViaSBkb2VzIG5vdCBoYXZlIHRoZW0gdGhlcmUsIGJ1dCBvbiBvdGhlciBwYXJ0cyBvZiB0aGUgZW50aXR5IHBhZ2UgKi9cbiAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIHtnZXRPbnRvbG9neUlkU2VjdGlvbihvbnRvbG9neSl9XG4gICAgICAgICAgICAgICAgICAgIHtnZXRWZXJzaW9uU2VjdGlvbihvbnRvbG9neSl9XG4gICAgICAgICAgICAgICAgICAgIHtnZXROdW1DbGFzc2VzU2VjdGlvbihvbnRvbG9neSl9XG4gICAgICAgICAgICAgICAgICAgIHsvKntnZXRDcmVhdG9yc1NlY3Rpb24oZW50aXR5SW5mbyl9Ki8gLyogcmVkdW5kYW50IGFzIGl0J3MgbGlzdGVkIGluIGFubm90YXRpb25zIGFueXdheSAqL31cbiAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHtnZXRBbm5vdGF0aW9uU2VjdGlvbihvbnRvbG9neSl9XG4gICAgICAgICAgICAgIDwvRXVpVGV4dD5cbiAgICAgICAgICB9XG4gICAgICAgICAge2lzRXJyb3JPbnRvbG9neSAmJiA8RXVpVGV4dD57Z2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5KGVycm9yT250b2xvZ3ksIFwiaW5mb3JtYXRpb25cIil9PC9FdWlUZXh0Pn1cbiAgICAgICAgPC9FdWlDYXJkPlxuICAgICAgPC8+XG4gICk7XG5cbn1cblxuZnVuY3Rpb24gY3JlYXRlT250b2xvZ3lJbmZvKHByb3BzOiBPbnRvbG9neUluZm9XaWRnZXRQcm9wcywgY29udGFpbmVyOiBFbGVtZW50LCBjYWxsYmFjaz86ICgpPT52b2lkKSB7XG4gIFJlYWN0RE9NLnJlbmRlcihXcmFwcGVkT250b2xvZ3lJbmZvV2lkZ2V0KHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIFdyYXBwZWRPbnRvbG9neUluZm9XaWRnZXQocHJvcHM6IE9udG9sb2d5SW5mb1dpZGdldFByb3BzKSB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7XG4gIHJldHVybiAoXG4gICAgICA8RXVpUHJvdmlkZXIgY29sb3JNb2RlPVwibGlnaHRcIj5cbiAgICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgICAgPE9udG9sb2d5SW5mb1dpZGdldFxuICAgICAgICAgICAgICBvbnRvbG9neUlkPXtwcm9wcy5vbnRvbG9neUlkfVxuICAgICAgICAgICAgICBhcGk9e3Byb3BzLmFwaX1cbiAgICAgICAgICAgICAgcGFyYW1ldGVyPXtwcm9wcy5wYXJhbWV0ZXJ9XG4gICAgICAgICAgICAgIHVzZUxlZ2FjeT17cHJvcHMudXNlTGVnYWN5fVxuICAgICAgICAgICAgICBzaG93QmFkZ2VzPXtwcm9wcy5zaG93QmFkZ2VzfVxuICAgICAgICAgICAgICBoYXNUaXRsZT17cHJvcHMuaGFzVGl0bGV9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICAgICAgPC9FdWlQcm92aWRlcj5cbiAgKVxufVxuXG5leHBvcnQgeyBPbnRvbG9neUluZm9XaWRnZXQsIGNyZWF0ZU9udG9sb2d5SW5mbyB9O1xuIiwgImltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgQ29tcGFyYXRvcnMsXG4gIENyaXRlcmlhV2l0aFBhZ2luYXRpb24sXG4gIEV1aUJhc2ljVGFibGUsXG4gIEV1aUJ1dHRvbkljb24sXG4gIEV1aUhvcml6b250YWxSdWxlLFxuICBFdWlQcm92aWRlcixcbiAgRXVpTGluayxcbiAgRXVpU3BhY2VyLFxuICBFdWlUZXh0XG59IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7UXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIsIHVzZVF1ZXJ5fSBmcm9tIFwicmVhY3QtcXVlcnlcIjtcbmltcG9ydCB7IE9sc0FwaSB9IGZyb20gXCIuLi8uLi8uLi9hcGkvT2xzQXBpXCI7XG5pbXBvcnQgeyBjc3MsIFNlcmlhbGl6ZWRTdHlsZXMgfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmltcG9ydCB7IEV1aUJhc2ljVGFibGVDb2x1bW4gfSBmcm9tIFwiQGVsYXN0aWMvZXVpL3NyYy9jb21wb25lbnRzL2Jhc2ljX3RhYmxlL2Jhc2ljX3RhYmxlXCI7XG5pbXBvcnQgeyBPbHNSZXNvdXJjZSwgUmVzb3VyY2VzV2lkZ2V0UHJvcHMgfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgeyBPbnRvbG9naWVzIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVsL2ludGVyZmFjZXNcIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5cbmNvbnN0IERFRkFVTFRfSU5JVElBTF9FTlRSSUVTX1BFUl9QQUdFID0gMTA7XG5jb25zdCBERUZBVUxUX1BBR0VfU0laRV9PUFRJT05TID0gWzEwLCAyNSwgNTAsIDEwMF07XG5jb25zdCBERUZBVUxUX0lOSVRJQUxfU09SVF9GSUVMRCA9IFwiY29uZmlnLnByZWZlcnJlZFByZWZpeFwiO1xuY29uc3QgREVGQVVMVF9JTklUSUFMX1NPUlRfRElSID0gXCJhc2NcIiBhcyBjb25zdDtcblxuZnVuY3Rpb24gUmVzb3VyY2VzV2lkZ2V0KHByb3BzOiBSZXNvdXJjZXNXaWRnZXRQcm9wcykge1xuICBjb25zdCB7XG4gICAgYXBpLFxuICAgIGluaXRpYWxFbnRyaWVzUGVyUGFnZSA9IERFRkFVTFRfSU5JVElBTF9FTlRSSUVTX1BFUl9QQUdFLFxuICAgIHBhZ2VTaXplT3B0aW9ucyA9IERFRkFVTFRfUEFHRV9TSVpFX09QVElPTlMsXG4gICAgaW5pdGlhbFNvcnRGaWVsZCA9IERFRkFVTFRfSU5JVElBTF9TT1JUX0ZJRUxELFxuICAgIGluaXRpYWxTb3J0RGlyID0gREVGQVVMVF9JTklUSUFMX1NPUlRfRElSLFxuICAgIHRhcmdldExpbmssXG4gICAgcGFyYW1ldGVyLFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICBjb25zdCBbcGFnZUluZGV4LCBzZXRQYWdlSW5kZXhdID0gdXNlU3RhdGUoMCk7XG4gIGNvbnN0IFtwYWdlU2l6ZSwgc2V0UGFnZVNpemVdID0gdXNlU3RhdGUoaW5pdGlhbEVudHJpZXNQZXJQYWdlKTtcbiAgY29uc3QgW3NvcnRGaWVsZCwgc2V0U29ydEZpZWxkXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bWJlcj4oaW5pdGlhbFNvcnRGaWVsZCk7XG4gIGNvbnN0IFtzb3J0RGlyZWN0aW9uLCBzZXRTb3J0RGlyZWN0aW9uXSA9IHVzZVN0YXRlKGluaXRpYWxTb3J0RGlyKTtcblxuXG4gIGNvbnN0IGNvbHVtbnM6IEFycmF5PEV1aUJhc2ljVGFibGVDb2x1bW48T2xzUmVzb3VyY2U+ICYgeyBjc3M/OiBTZXJpYWxpemVkU3R5bGVzIH0+ID0gW1xuICAgIHtcbiAgICAgIG5hbWU6IFwiUmVzb3VyY2UgTmFtZVwiLFxuICAgICAgZmllbGQ6IFwiY29uZmlnLnRpdGxlXCIsXG4gICAgICB3aWR0aDogXCIxNSVcIixcbiAgICAgIHNvcnRhYmxlOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcIlNob3J0IE5hbWVcIixcbiAgICAgIGZpZWxkOiBcImNvbmZpZy5wcmVmZXJyZWRQcmVmaXhcIixcbiAgICAgIHJlbmRlcjogKHZhbHVlOiBzdHJpbmcpID0+IChcbiAgICAgICAgdGFyZ2V0TGluayA/IDxFdWlMaW5rIGhyZWY9e3RhcmdldExpbmsgKyBcIm9udG9sb2dpZXMvXCIgKyB2YWx1ZS50b0xvd2VyQ2FzZSgpICsgXCIvXCJ9Pnt2YWx1ZX08L0V1aUxpbms+IDogdmFsdWVcbiAgICAgICksXG4gICAgICB3aWR0aDogXCIxMCVcIixcbiAgICAgIHNvcnRhYmxlOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcIkRlc2NyaXB0aW9uXCIsXG4gICAgICBmaWVsZDogXCJjb25maWcuZGVzY3JpcHRpb25cIixcbiAgICAgIHdpZHRoOiBcIjMwJVwiLFxuICAgICAgY3NzOiBjc3NgXG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgbWF4LWhlaWdodDogMjAwcHg7XG4gICAgICAgICAgb3ZlcmZsb3c6IGF1dG87XG4gICAgICBgXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcIlZlcnNpb25cIixcbiAgICAgIGZpZWxkOiBcImNvbmZpZy52ZXJzaW9uXCIsXG4gICAgICB3aWR0aDogXCI3LjUlXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiTG9hZGVkIG9uXCIsXG4gICAgICBmaWVsZDogXCJsb2FkZWRcIixcbiAgICAgIHdpZHRoOiBcIjEwJVwiLFxuICAgICAgZGF0YVR5cGU6IFwiZGF0ZVwiIGFzIGNvbnN0LFxuICAgICAgc29ydGFibGU6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiVGVybXNcIixcbiAgICAgIGZpZWxkOiBcIm51bWJlck9mVGVybXNcIixcbiAgICAgIHJlbmRlcjogKHZhbHVlOiBudW1iZXIpID0+IDw+e3ZhbHVlLnRvTG9jYWxlU3RyaW5nKCl9PC8+LFxuICAgICAgd2lkdGg6IFwiNy41JVwiLFxuICAgICAgc29ydGFibGU6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiUHJvcGVydGllc1wiLFxuICAgICAgZmllbGQ6IFwibnVtYmVyT2ZQcm9wZXJ0aWVzXCIsXG4gICAgICByZW5kZXI6ICh2YWx1ZTogbnVtYmVyKSA9PiA8Pnt2YWx1ZS50b0xvY2FsZVN0cmluZygpfTwvPixcbiAgICAgIHdpZHRoOiBcIjcuNSVcIixcbiAgICAgIHNvcnRhYmxlOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcIkluZGl2aWR1YWxzXCIsXG4gICAgICBmaWVsZDogXCJudW1iZXJPZkluZGl2aWR1YWxzXCIsXG4gICAgICByZW5kZXI6ICh2YWx1ZTogbnVtYmVyKSA9PiA8Pnt2YWx1ZS50b0xvY2FsZVN0cmluZygpfTwvPixcbiAgICAgIHdpZHRoOiBcIjcuNSVcIixcbiAgICAgIHNvcnRhYmxlOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICB3aWR0aDogXCI1JVwiLFxuICAgICAgYWN0aW9uczogW1xuICAgICAgICAuLi4ocHJvcHMuYWN0aW9ucyB8fCBbXSksXG4gICAgICAgIHtcbiAgICAgICAgICByZW5kZXI6IChpdGVtOiBPbHNSZXNvdXJjZSkgPT4gKFxuICAgICAgICAgICAgPEV1aUJ1dHRvbkljb25cbiAgICAgICAgICAgICAgaHJlZj17aXRlbS5jb25maWcuZmlsZUxvY2F0aW9ufVxuICAgICAgICAgICAgICBpY29uVHlwZT1cImRvd25sb2FkXCJcbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkRvd25sb2FkXCJcbiAgICAgICAgICAgICAgaXNEaXNhYmxlZD17XG4gICAgICAgICAgICAgICAgIWl0ZW0uY29uZmlnLmFsbG93RG93bmxvYWQgfHxcbiAgICAgICAgICAgICAgICBpdGVtLmNvbmZpZy5maWxlTG9jYXRpb24uc3RhcnRzV2l0aChcImZpbGU6Ly9cIilcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9XG4gIF07XG5cbiAgY29uc3Qgb25UYWJsZUNoYW5nZSA9ICh7XG4gICAgcGFnZSxcbiAgICBzb3J0LFxuICB9OiBDcml0ZXJpYVdpdGhQYWdpbmF0aW9uPE9sc1Jlc291cmNlPikgPT4ge1xuICAgIGNvbnN0IHsgaW5kZXg6IHBhZ2VJbmRleCwgc2l6ZTogcGFnZVNpemUgfSA9IHBhZ2U7XG4gICAgc2V0UGFnZUluZGV4KHBhZ2VJbmRleCk7XG4gICAgc2V0UGFnZVNpemUocGFnZVNpemUpO1xuXG4gICAgaWYgKHNvcnQpIHtcbiAgICAgIGNvbnN0IHsgZmllbGQ6IHNvcnRGaWVsZCwgZGlyZWN0aW9uOiBzb3J0RGlyZWN0aW9uIH0gPSBzb3J0O1xuICAgICAgc2V0U29ydEZpZWxkKHNvcnRGaWVsZCk7XG4gICAgICBzZXRTb3J0RGlyZWN0aW9uKHNvcnREaXJlY3Rpb24pO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCB7XG4gICAgZGF0YTogb250b2xvZ2llc0RhdGEsXG4gICAgaXNTdWNjZXNzLFxuICAgIGlzRXJyb3IsXG4gICAgaXNMb2FkaW5nXG4gIH0gPSB1c2VRdWVyeTxPbnRvbG9naWVzPihcbiAgICBbXCJvbnRvbG9naWVzRGF0YVwiLCBhcGksIHBhcmFtZXRlcl0sXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgcmV0dXJuIG9sc0FwaS5nZXRPbnRvbG9naWVzRGF0YShcbiAgICAgICAgcHJvcHMucGFyYW1ldGVyLFxuICAgICAgKTtcbiAgICB9XG4gICk7XG5cblxuICBjb25zdCBvbnRvcyA9IG9udG9sb2dpZXNEYXRhPy5wcm9wZXJ0aWVzLm1hcChvbnRvbG9neSA9PiAoe1xuICAgIC4uLm9udG9sb2d5LnByb3BlcnRpZXNcbiAgfSkpIHx8IFtdO1xuXG4gIGNvbnN0IGZpbmRPbnRvbG9naWVzID0gKFxuICAgIG9udG9sb2dpZXM6IGFueVtdLFxuICAgIHBhZ2VJbmRleDogbnVtYmVyLFxuICAgIHBhZ2VTaXplOiBudW1iZXIsXG4gICAgc29ydEZpZWxkOiBhbnksXG4gICAgc29ydERpcmVjdGlvbjogXCJhc2NcIiB8IFwiZGVzY1wiXG4gICkgPT4ge1xuICAgIGxldCBpdGVtcztcblxuICAgIGlmIChzb3J0RmllbGQpIHtcbiAgICAgIGl0ZW1zID0gb250b2xvZ2llc1xuICAgICAgICAuc2xpY2UoMClcbiAgICAgICAgLnNvcnQoXG4gICAgICAgICAgQ29tcGFyYXRvcnMucHJvcGVydHkoc29ydEZpZWxkLCBDb21wYXJhdG9ycy5kZWZhdWx0KHNvcnREaXJlY3Rpb24pKVxuICAgICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBpdGVtcyA9IG9udG9sb2dpZXM7XG4gICAgfVxuXG4gICAgbGV0IHBhZ2VPZkl0ZW1zO1xuXG4gICAgaWYgKCFwYWdlSW5kZXggJiYgIXBhZ2VTaXplKSB7XG4gICAgICBwYWdlT2ZJdGVtcyA9IGl0ZW1zO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzdGFydEluZGV4ID0gcGFnZUluZGV4ICogcGFnZVNpemU7XG4gICAgICBwYWdlT2ZJdGVtcyA9IGl0ZW1zLnNsaWNlKFxuICAgICAgICBzdGFydEluZGV4LFxuICAgICAgICBNYXRoLm1pbihzdGFydEluZGV4ICsgcGFnZVNpemUsIG9udG9sb2dpZXMubGVuZ3RoKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgcGFnZU9mSXRlbXMsXG4gICAgICB0b3RhbEl0ZW1Db3VudDogb250b2xvZ2llcy5sZW5ndGhcbiAgICB9O1xuICB9O1xuXG4gIGNvbnN0IHsgcGFnZU9mSXRlbXMsIHRvdGFsSXRlbUNvdW50IH0gPSBmaW5kT250b2xvZ2llcyhcbiAgICBvbnRvcyxcbiAgICBwYWdlSW5kZXgsXG4gICAgcGFnZVNpemUsXG4gICAgc29ydEZpZWxkLFxuICAgIHNvcnREaXJlY3Rpb25cbiAgKTtcblxuICBjb25zdCBwYWdpbmF0aW9uID0ge1xuICAgIHBhZ2VJbmRleCxcbiAgICBwYWdlU2l6ZSxcbiAgICB0b3RhbEl0ZW1Db3VudCxcbiAgICBwYWdlU2l6ZU9wdGlvbnNcbiAgfTtcblxuICBjb25zdCByZXN1bHRzQ291bnQgPVxuICAgIHBhZ2VTaXplID09PSAwID8gKFxuICAgICAgPHN0cm9uZz5BbGw8L3N0cm9uZz5cbiAgICApIDogKFxuICAgICAgPD5cbiAgICAgICAgPHN0cm9uZz5cbiAgICAgICAgICB7cGFnZVNpemUgKiBwYWdlSW5kZXggKyAxfS17cGFnZVNpemUgKiBwYWdlSW5kZXggKyBwYWdlU2l6ZX1cbiAgICAgICAgPC9zdHJvbmc+e1wiIFwifVxuICAgICAgICBvZiB7dG90YWxJdGVtQ291bnR9XG4gICAgICA8Lz5cbiAgICApO1xuXG5cbiAgY29uc3Qgc29ydGluZyA9IHtcbiAgICBzb3J0OiB7XG4gICAgICBmaWVsZDogc29ydEZpZWxkLFxuICAgICAgZGlyZWN0aW9uOiBzb3J0RGlyZWN0aW9uXG4gICAgfVxuICB9O1xuXG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAge2lzU3VjY2VzcyAmJlxuICAgICAgICA8PlxuICAgICAgICAgIDxFdWlUZXh0IHNpemU9XCJ4c1wiPlxuICAgICAgICAgICAgU2hvd2luZyB7cmVzdWx0c0NvdW50fSA8c3Ryb25nPk9udG9sb2dpZXM8L3N0cm9uZz5cbiAgICAgICAgICA8L0V1aVRleHQ+XG4gICAgICAgICAgPEV1aVNwYWNlciBzaXplPVwic1wiIC8+XG4gICAgICAgICAgPEV1aUhvcml6b250YWxSdWxlIG1hcmdpbj1cIm5vbmVcIiBzdHlsZT17eyBoZWlnaHQ6IDIgfX0gLz5cblxuICAgICAgICAgIDxFdWlCYXNpY1RhYmxlXG4gICAgICAgICAgICBjb2x1bW5zPXtjb2x1bW5zfVxuICAgICAgICAgICAgaXRlbXM9e3BhZ2VPZkl0ZW1zfVxuICAgICAgICAgICAgb25DaGFuZ2U9e29uVGFibGVDaGFuZ2V9XG4gICAgICAgICAgICBwYWdpbmF0aW9uPXtwYWdpbmF0aW9ufVxuICAgICAgICAgICAgc29ydGluZz17c29ydGluZ31cbiAgICAgICAgICAvPlxuICAgICAgICA8Lz5cbiAgICAgIH1cbiAgICAgIHtpc0xvYWRpbmcgJiZcbiAgICAgICAgPEV1aUJhc2ljVGFibGVcbiAgICAgICAgICBjb2x1bW5zPXtjb2x1bW5zfVxuICAgICAgICAgIGl0ZW1zPXtwYWdlT2ZJdGVtc31cbiAgICAgICAgICBvbkNoYW5nZT17b25UYWJsZUNoYW5nZX1cbiAgICAgICAgICBwYWdpbmF0aW9uPXtwYWdpbmF0aW9ufVxuICAgICAgICAgIHNvcnRpbmc9e3NvcnRpbmd9XG4gICAgICAgICAgbG9hZGluZ1xuICAgICAgICAvPlxuXG4gICAgICB9XG4gICAgICB7aXNFcnJvciAmJlxuICAgICAgICA8RXVpQmFzaWNUYWJsZVxuICAgICAgICAgIGNvbHVtbnM9e2NvbHVtbnN9XG4gICAgICAgICAgaXRlbXM9e3BhZ2VPZkl0ZW1zfVxuICAgICAgICAgIG9uQ2hhbmdlPXtvblRhYmxlQ2hhbmdlfVxuICAgICAgICAgIHBhZ2luYXRpb249e3BhZ2luYXRpb259XG4gICAgICAgICAgc29ydGluZz17c29ydGluZ31cbiAgICAgICAgICAvKlxuICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcj17Z2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5KGVycm9yLCBcInJlc291cmNlc1wiKX1cbiAgICAgICAgICAqL1xuICAgICAgICAvPlxuICAgICAgfVxuICAgIDwvPlxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVSZXNvdXJjZXMocHJvcHM6IFJlc291cmNlc1dpZGdldFByb3BzLCBjb250YWluZXI6IEVsZW1lbnQsIGNhbGxiYWNrPzogKCk9PnZvaWQpIHtcbiAgUmVhY3RET00ucmVuZGVyKFdyYXBwZWRSZXNvdXJjZXNXaWRnZXQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZFJlc291cmNlc1dpZGdldChwcm9wczogUmVzb3VyY2VzV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTtcbiAgcmV0dXJuIChcbiAgICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgICA8UmVzb3VyY2VzV2lkZ2V0XG4gICAgICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgICAgICBpbml0aWFsRW50cmllc1BlclBhZ2U9e3Byb3BzLmluaXRpYWxFbnRyaWVzUGVyUGFnZX1cbiAgICAgICAgICAgICAgcGFnZVNpemVPcHRpb25zPXtwcm9wcy5wYWdlU2l6ZU9wdGlvbnN9XG4gICAgICAgICAgICAgIGluaXRpYWxTb3J0RmllbGQ9e3Byb3BzLmluaXRpYWxTb3J0RmllbGR9XG4gICAgICAgICAgICAgIGluaXRpYWxTb3J0RGlyPXtwcm9wcy5pbml0aWFsU29ydERpcn1cbiAgICAgICAgICAgICAgdGFyZ2V0TGluaz17cHJvcHMudGFyZ2V0TGlua31cbiAgICAgICAgICAgICAgYWN0aW9ucz17cHJvcHMuYWN0aW9uc31cbiAgICAgICAgICAgICAgcGFyYW1ldGVyPXtwcm9wcy5wYXJhbWV0ZXJ9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICAgICAgPC9FdWlQcm92aWRlcj5cbiAgKVxufVxuXG5leHBvcnQgeyBSZXNvdXJjZXNXaWRnZXQsIGNyZWF0ZVJlc291cmNlcyB9O1xuIiwgImltcG9ydCB7RXVpUHJvdmlkZXIsIEV1aVN1Z2dlc3QsIEV1aVN1Z2dlc3Rpb25Qcm9wc30gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IE9sc0FwaSB9IGZyb20gXCIuLi8uLi8uLi9hcGkvT2xzQXBpXCI7XG5pbXBvcnQge1F1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyLCB1c2VRdWVyeX0gZnJvbSBcInJlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQge1NlYXJjaEJhcldpZGdldFByb3BzfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuXG5mdW5jdGlvbiBTZWFyY2hCYXJXaWRnZXQocHJvcHM6IFNlYXJjaEJhcldpZGdldFByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBhcGksXG4gICAgcXVlcnksXG4gICAgb25TZWFyY2hWYWx1ZUNoYW5nZSxcbiAgICAuLi5yZXN0XG4gIH0gPSBwcm9wcztcbiAgY29uc3Qgb2xzQXBpID0gbmV3IE9sc0FwaShhcGkpO1xuXG4gIGNvbnN0IFtzZWFyY2hWYWx1ZSwgc2V0U2VhcmNoVmFsdWVdID0gdXNlU3RhdGUocXVlcnkpO1xuICBjb25zdCBbc3VnZ2VzdGlvbnMsIHNldFN1Z2dlc3Rpb25zXSA9IHVzZVN0YXRlPEFycmF5PEV1aVN1Z2dlc3Rpb25Qcm9wcz4+KFtdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldFNlYXJjaFZhbHVlKHF1ZXJ5KTtcbiAgfSwgW3F1ZXJ5XSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBvblNlYXJjaFZhbHVlQ2hhbmdlKHNlYXJjaFZhbHVlKTtcbiAgfSwgW29uU2VhcmNoVmFsdWVDaGFuZ2UsIHNlYXJjaFZhbHVlXSk7XG5cbiAgLyoqXG4gICAqIGZldGNoZXMgc3VnZ2VzdGlvbnMgd2hlbiBzZWFyY2hWYWx1ZSBjaGFuZ2VzIChzZXRTZWFyY2hWYWx1ZSBpcyBwYXNzZWQgYXMgRXVpU3VnZ2VzdCBvbkNoYW5nZSlcbiAgICovXG4gIHVzZVF1ZXJ5KFxuICAgICAgW1xuICAgICAgICAgIFwib25DaGFuZ2VcIixcbiAgICAgICAgICBzZWFyY2hWYWx1ZVxuICAgICAgXSxcbiAgICAgIGFzeW5jICgpID0+IHtcbiAgICAgICAgICByZXR1cm4gb2xzQXBpLnN1Z2dlc3QoXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBxdWVyeTogc2VhcmNoVmFsdWUsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICBwcm9wcy5wYXJhbWV0ZXIsXG4gICAgICAgICAgKS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnJlc3BvbnNlICYmIHJlc3BvbnNlLnJlc3BvbnNlLmRvY3MpIHtcbiAgICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbnMocmVzcG9uc2UucmVzcG9uc2UuZG9jcy5tYXAoKHN1Z2dlc3Rpb246IGFueSkgPT4gKFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogc3VnZ2VzdGlvbi5hdXRvc3VnZ2VzdCxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogeyBjb2xvcjogXCJ0aW50MVwiLCBpY29uVHlwZTogXCJcIn0sXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgKVxuXG4gIGZ1bmN0aW9uIG9uSXRlbUNsaWNrKGl0ZW06IEV1aVN1Z2dlc3Rpb25Qcm9wcykge1xuICAgIHNldFNlYXJjaFZhbHVlKGl0ZW0ubGFiZWwpO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPEV1aVN1Z2dlc3RcbiAgICAgICAgYXJpYS1sYWJlbD1cIlNlYXJjaCBmb3IgQ29uY2VwdFwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIGZvciBDb25jZXB0XCJcbiAgICAgICAgaXNDbGVhcmFibGVcbiAgICAgICAgey4uLnJlc3R9XG4gICAgICAgIHN1Z2dlc3Rpb25zPXtzdWdnZXN0aW9uc31cbiAgICAgICAgb25DaGFuZ2U9e3NldFNlYXJjaFZhbHVlfVxuICAgICAgICBvbkl0ZW1DbGljaz17b25JdGVtQ2xpY2t9XG4gICAgICAgIHZhbHVlPXtzZWFyY2hWYWx1ZX1cbiAgICAgIC8+XG4gICAgPC8+XG4gICk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVNlYXJjaEJhcihwcm9wczogU2VhcmNoQmFyV2lkZ2V0UHJvcHMsIGNvbnRhaW5lcjogYW55LCBjYWxsYmFjaz86ICgpPT52b2lkKSB7XG4gIFJlYWN0RE9NLnJlbmRlcihXcmFwcGVkU2VhcmNoQmFyV2lkZ2V0KHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIFdyYXBwZWRTZWFyY2hCYXJXaWRnZXQocHJvcHM6IFNlYXJjaEJhcldpZGdldFByb3BzKSB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7XG4gIHJldHVybiAoXG4gICAgICA8RXVpUHJvdmlkZXIgY29sb3JNb2RlPVwibGlnaHRcIj5cbiAgICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgICAgPFNlYXJjaEJhcldpZGdldFxuICAgICAgICAgICAgICBhcGk9e3Byb3BzLmFwaX1cbiAgICAgICAgICAgICAgcXVlcnk9e3Byb3BzLnF1ZXJ5fVxuICAgICAgICAgICAgICBvblNlYXJjaFZhbHVlQ2hhbmdlPXtwcm9wcy5vblNlYXJjaFZhbHVlQ2hhbmdlfVxuICAgICAgICAgICAgICBwYXJhbWV0ZXI9e3Byb3BzLnBhcmFtZXRlcn1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgICA8L0V1aVByb3ZpZGVyPlxuICApXG59XG5cbmV4cG9ydCB7IFNlYXJjaEJhcldpZGdldCwgY3JlYXRlU2VhcmNoQmFyIH07XG4iLCAiaW1wb3J0IHtcbiAgICBFdWlCdXR0b25FbXB0eSxcbiAgICBFdWlGbGV4R3JvdXAsXG4gICAgRXVpRmxleEl0ZW0sXG4gICAgRXVpRm9ybVJvdyxcbiAgICBFdWlIb3Jpem9udGFsUnVsZSxcbiAgICBFdWlMb2FkaW5nU3Bpbm5lcixcbiAgICBFdWlQYW5lbCwgRXVpUHJvdmlkZXIsXG4gICAgRXVpU2VsZWN0YWJsZSxcbiAgICBFdWlTZWxlY3RhYmxlT3B0aW9uLFxuICAgIEV1aVNwYWNlcixcbiAgICBFdWlTd2l0Y2gsXG4gICAgRXVpVGFibGVQYWdpbmF0aW9uLFxuICAgIEV1aVRleHQsXG59IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge1F1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyLCB1c2VRdWVyeX0gZnJvbSAncmVhY3QtcXVlcnknO1xuaW1wb3J0IHsgT2xzQXBpIH0gZnJvbSBcIi4uLy4uLy4uL2FwaS9PbHNBcGlcIjtcbmltcG9ydCB7IE1ldGFkYXRhQ29tcGFjdCB9IGZyb20gJy4vTWV0YWRhdGFDb21wYWN0J1xuaW1wb3J0IHtTZWFyY2hSZXN1bHRzTGlzdFdpZGdldFByb3BzfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgeyBBdXRvY29tcGxldGVXaWRnZXQgfSBmcm9tIFwiLi4vQXV0b2NvbXBsZXRlV2lkZ2V0XCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuXG5jb25zdCBERUZBVUxUX0lOSVRJQUxfSVRFTVNfUEVSX1BBR0UgPSAxMDtcbmNvbnN0IERFRkFVTFRfUEFHRV9TSVpFX09QVElPTlMgPSBbMTAsIDI1LCA1MCwgMTAwXTtcblxuZnVuY3Rpb24gU2VhcmNoUmVzdWx0c0xpc3RXaWRnZXQocHJvcHM6IFNlYXJjaFJlc3VsdHNMaXN0V2lkZ2V0UHJvcHMpIHtcbiAgICBjb25zdCB7XG4gICAgICAgIGFwaSxcbiAgICAgICAgcXVlcnksXG4gICAgICAgIHBhcmFtZXRlcixcbiAgICAgICAgaW5pdGlhbEl0ZW1zUGVyUGFnZSA9IERFRkFVTFRfSU5JVElBTF9JVEVNU19QRVJfUEFHRSxcbiAgICAgICAgaXRlbXNQZXJQYWdlT3B0aW9ucyA9IERFRkFVTFRfUEFHRV9TSVpFX09QVElPTlMsXG4gICAgICAgIHRhcmdldExpbmssXG4gICAgICAgIHByZXNlbGVjdGVkLFxuICAgICAgICAuLi5yZXN0XG4gICAgfSA9IHByb3BzO1xuICAgIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICAgIGNvbnN0IFtzZWFyY2hWYWx1ZSwgc2V0U2VhcmNoVmFsdWVdID0gdXNlU3RhdGUocXVlcnkpO1xuICAgIGNvbnN0IFthY3RpdmVQYWdlLCBzZXRBY3RpdmVQYWdlXSA9IHVzZVN0YXRlKDApO1xuICAgIGNvbnN0IFtwYWdlQ291bnQsIHNldFBhZ2VDb3VudF0gPSB1c2VTdGF0ZSgwKTtcbiAgICBjb25zdCBbaXRlbXNQZXJQYWdlLCBzZXRJdGVtc1BlclBhZ2VdID0gdXNlU3RhdGUoaW5pdGlhbEl0ZW1zUGVyUGFnZSk7XG4gICAgY29uc3QgW3RvdGFsSXRlbXMsIHNldFRvdGFsSXRlbXNdID0gdXNlU3RhdGUoMCk7XG4gICAgY29uc3QgW2V4YWN0TWF0Y2gsIHNldEV4YWN0TWF0Y2hdID0gdXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IFtzaG93T2Jzb2xldGVUZXJtcywgc2V0U2hvd09ic29sZXRlVGVybXNdID0gdXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IFtmaWx0ZXJCeVR5cGVPcHRpb25zLCBzZXRGaWx0ZXJCeVR5cGVPcHRpb25zXSA9IHVzZVN0YXRlPEV1aVNlbGVjdGFibGVPcHRpb25bXT4oW10pO1xuICAgIGNvbnN0IFtmaWx0ZXJCeU9udG9sb2d5T3B0aW9ucywgc2V0RmlsdGVyQnlPbnRvbG9neU9wdGlvbnNdID0gdXNlU3RhdGU8RXVpU2VsZWN0YWJsZU9wdGlvbltdPihbXSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBzZXRTZWFyY2hWYWx1ZShxdWVyeSk7XG4gICAgfSwgW3F1ZXJ5XSk7XG5cbiAgICBmdW5jdGlvbiB1cGRhdGVGaWx0ZXJPcHRpb25zKGN1cnJlbnRPcHRpb25zOiBFdWlTZWxlY3RhYmxlT3B0aW9uW10sIG9wdGlvbkNvdW50czogYW55W10sIHNldE9wdGlvbnM6IEZ1bmN0aW9uLCByZW5kZXI/OiAodmFsdWU6IHN0cmluZykgPT4gc3RyaW5nKSB7XG4gICAgICAgIGlmIChjdXJyZW50T3B0aW9ucy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgc2V0T3B0aW9ucyhvcHRpb25Db3VudHMucmVkdWNlKChhY2N1bXVsYXRvcjogYW55W10sIGN1cnJlbnRWYWx1ZTogc3RyaW5nLCBjdXJyZW50SW5kZXg6IG51bWJlciwgYXJyYXk6IGFueVtdKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRJbmRleCAlIDIgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYWNjdW11bGF0b3IucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogcmVuZGVyID8gcmVuZGVyKGN1cnJlbnRWYWx1ZSkgOiBjdXJyZW50VmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGN1cnJlbnRWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZDogXCIoXCIgKyBhcnJheVtjdXJyZW50SW5kZXggKyAxXSArIFwiKVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGFycmF5W2N1cnJlbnRJbmRleCArIDFdID09IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB7IHRvdGFsQ291bnQ6IGFycmF5W2N1cnJlbnRJbmRleCArIDFdIH0sXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYWNjdW11bGF0b3I7XG4gICAgICAgICAgICB9LCBbXSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbmV3T3B0aW9uczogRXVpU2VsZWN0YWJsZU9wdGlvbltdID0gW107XG4gICAgICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgY3VycmVudE9wdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBuZXdPcHRpb25zLnB1c2goT2JqZWN0LmFzc2lnbih7fSwgY3VycmVudE9wdGlvbnNbaV0pKTsgLy8gdXNpbmcgT2JqZWN0LmFzc2lnbiB0byBwYXNzIGJ5IHZhbHVlLCBub3QgYnkgcmVmZXJlbmNlXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG9wdGlvbkNvdW50cy5mb3JFYWNoKChjdXJyZW50VmFsdWU6IHN0cmluZywgY3VycmVudEluZGV4OiBudW1iZXIsIGFycmF5OiBhbnlbXSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50SW5kZXggJSAyID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbiA9IG5ld09wdGlvbnMuZmluZCgob3B0aW9uOiBFdWlTZWxlY3RhYmxlT3B0aW9uKSA9PiBvcHRpb24ua2V5ID09IGN1cnJlbnRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbi5hcHBlbmQgPSBcIihcIiArIGFycmF5W2N1cnJlbnRJbmRleCArIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbi5kYXRhICYmIGFycmF5W2N1cnJlbnRJbmRleCArIDFdIDwgb3B0aW9uLmRhdGEudG90YWxDb3VudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbi5hcHBlbmQgKz0gXCIvXCIgKyBvcHRpb24uZGF0YS50b3RhbENvdW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uLmFwcGVuZCArPSBcIilcIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc2V0T3B0aW9ucyhuZXdPcHRpb25zKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGZpbHRlclNlbGVjdGVkT3B0aW9ucyA9IChvcHRpb246IEV1aVNlbGVjdGFibGVPcHRpb24pID0+IG9wdGlvbi5jaGVja2VkID09PSBcIm9uXCI7XG5cbiAgICBjb25zdCB7XG4gICAgICAgIGRhdGE6IHNlYXJjaFJlc3VsdHMsXG4gICAgICAgIGlzTG9hZGluZyxcbiAgICAgICAgaXNTdWNjZXNzLFxuICAgICAgICBpc0Vycm9yLFxuICAgICAgICBlcnJvcixcbiAgICB9ID0gdXNlUXVlcnkoXG4gICAgICAgIFtcbiAgICAgICAgICAgIFwic2VhcmNoUmVzdWx0c1wiLFxuICAgICAgICAgICAgYXBpLFxuICAgICAgICAgICAgc2VhcmNoVmFsdWUsXG4gICAgICAgICAgICBleGFjdE1hdGNoLFxuICAgICAgICAgICAgc2hvd09ic29sZXRlVGVybXMsXG4gICAgICAgICAgICBhY3RpdmVQYWdlLFxuICAgICAgICAgICAgaXRlbXNQZXJQYWdlLFxuICAgICAgICAgICAgZmlsdGVyQnlUeXBlT3B0aW9ucy5maWx0ZXIoZmlsdGVyU2VsZWN0ZWRPcHRpb25zKS5tYXAoKG9wdGlvbjogRXVpU2VsZWN0YWJsZU9wdGlvbikgPT4gb3B0aW9uLmtleSksXG4gICAgICAgICAgICBmaWx0ZXJCeU9udG9sb2d5T3B0aW9ucy5maWx0ZXIoZmlsdGVyU2VsZWN0ZWRPcHRpb25zKS5tYXAoKG9wdGlvbjogRXVpU2VsZWN0YWJsZU9wdGlvbikgPT4gb3B0aW9uLmtleSksXG4gICAgICAgICAgICBwYXJhbWV0ZXJcbiAgICAgICAgXSxcbiAgICAgICAgYXN5bmMgKHtzaWduYWx9KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gb2xzQXBpLnNlYXJjaChcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5OiBzZWFyY2hWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgZXhhY3RNYXRjaDogZXhhY3RNYXRjaCxcbiAgICAgICAgICAgICAgICAgICAgc2hvd09ic29sZXRlVGVybXM6IHNob3dPYnNvbGV0ZVRlcm1zLFxuICAgICAgICAgICAgICAgICAgICB0eXBlczogZmlsdGVyQnlUeXBlT3B0aW9ucy5maWx0ZXIoZmlsdGVyU2VsZWN0ZWRPcHRpb25zKS5tYXAoKG9wdGlvbjogRXVpU2VsZWN0YWJsZU9wdGlvbikgPT4gb3B0aW9uLmtleSkuam9pbihcIixcIiksXG4gICAgICAgICAgICAgICAgICAgIG9udG9sb2d5OiBmaWx0ZXJCeU9udG9sb2d5T3B0aW9ucy5maWx0ZXIoZmlsdGVyU2VsZWN0ZWRPcHRpb25zKS5tYXAoKG9wdGlvbjogRXVpU2VsZWN0YWJsZU9wdGlvbikgPT4gb3B0aW9uLmtleSkuam9pbihcIixcIiksXG4gICAgICAgICAgICAgICAgICAgIGdyb3VwQnlJcmk6IHRydWUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHBhZ2U6IGFjdGl2ZVBhZ2UudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICAgICAgc2l6ZTogaXRlbXNQZXJQYWdlLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgcHJvcHMucGFyYW1ldGVyLFxuICAgICAgICAgICAgICAgIHNpZ25hbFxuICAgICAgICAgICAgKS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZVtcInJlc3BvbnNlXCJdICYmIHJlc3BvbnNlW1wicmVzcG9uc2VcIl1bXCJkb2NzXCJdICE9IG51bGwgJiYgcmVzcG9uc2VbXCJyZXNwb25zZVwiXVtcIm51bUZvdW5kXCJdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlW1wiZmFjZXRfY291bnRzXCJdICYmIHJlc3BvbnNlW1wiZmFjZXRfY291bnRzXCJdW1wiZmFjZXRfZmllbGRzXCJdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2VbXCJmYWNldF9jb3VudHNcIl1bXCJmYWNldF9maWVsZHNcIl1bXCJ0eXBlXCJdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlRmlsdGVyT3B0aW9ucyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyQnlUeXBlT3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VbXCJmYWNldF9jb3VudHNcIl1bXCJmYWNldF9maWVsZHNcIl1bXCJ0eXBlXCJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRGaWx0ZXJCeVR5cGVPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY3VycmVudFZhbHVlOiBzdHJpbmcpID0+IGAke2N1cnJlbnRWYWx1ZVswXS50b1VwcGVyQ2FzZSgpfSR7Y3VycmVudFZhbHVlLnNsaWNlKDEpfWBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlW1wiZmFjZXRfY291bnRzXCJdW1wiZmFjZXRfZmllbGRzXCJdW1wib250b2xvZ3lfbmFtZVwiXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUZpbHRlck9wdGlvbnMoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlckJ5T250b2xvZ3lPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZVtcImZhY2V0X2NvdW50c1wiXVtcImZhY2V0X2ZpZWxkc1wiXVtcIm9udG9sb2d5X25hbWVcIl0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEZpbHRlckJ5T250b2xvZ3lPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY3VycmVudFZhbHVlOiBzdHJpbmcpID0+IGN1cnJlbnRWYWx1ZS50b1VwcGVyQ2FzZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHNldFRvdGFsSXRlbXMocmVzcG9uc2VbXCJyZXNwb25zZVwiXVtcIm51bUZvdW5kXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3UGFnZUNvdW50ID0gTWF0aC5jZWlsKHJlc3BvbnNlW1wicmVzcG9uc2VcIl1bXCJudW1Gb3VuZFwiXSAvIGl0ZW1zUGVyUGFnZSlcbiAgICAgICAgICAgICAgICAgICAgc2V0UGFnZUNvdW50KG5ld1BhZ2VDb3VudCk7XG4gICAgICAgICAgICAgICAgICAgIGlmKGFjdGl2ZVBhZ2UgPj0gbmV3UGFnZUNvdW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRBY3RpdmVQYWdlKDApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLnJlc3BvbnNlLmRvY3M7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZCBBUEkgcmVzcG9uc2VcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtlZXBQcmV2aW91c0RhdGE6IHRydWVcbiAgICAgICAgfSAvLyBTZWU6IGh0dHBzOi8vcmVhY3QtcXVlcnktdjMudGFuc3RhY2suY29tL2d1aWRlcy9wYWdpbmF0ZWQtcXVlcmllc1xuICAgICk7XG5cbiAgICBmdW5jdGlvbiBvbkNoYW5nZUl0ZW1zUGVyUGFnZShuZXdJdGVtc1BlclBhZ2U6IG51bWJlcikge1xuICAgICAgICBzZXRBY3RpdmVQYWdlKE1hdGguZmxvb3IoKGFjdGl2ZVBhZ2UgKiBpdGVtc1BlclBhZ2UgKyAxKSAvIG5ld0l0ZW1zUGVyUGFnZSkpO1xuICAgICAgICBzZXRJdGVtc1BlclBhZ2UobmV3SXRlbXNQZXJQYWdlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b2dnbGVFeGFjdE1hdGNoKCkge1xuICAgICAgICBzZXRFeGFjdE1hdGNoKCFleGFjdE1hdGNoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b2dnbGVTaG93T2Jzb2xldGVUZXJtcygpIHtcbiAgICAgICAgc2V0U2hvd09ic29sZXRlVGVybXMoIXNob3dPYnNvbGV0ZVRlcm1zKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjbGVhckZpbHRlcihjdXJyZW50T3B0aW9uczogRXVpU2VsZWN0YWJsZU9wdGlvbltdLCBzZXRPcHRpb25zOiBGdW5jdGlvbikge1xuICAgICAgICBjb25zdCBuZXdPcHRpb25zID0gWy4uLmN1cnJlbnRPcHRpb25zXTtcbiAgICAgICAgc2V0T3B0aW9ucyhuZXdPcHRpb25zLm1hcCgob3B0aW9uOiBFdWlTZWxlY3RhYmxlT3B0aW9uKSA9PiAoeyAuLi5vcHRpb24sIGNoZWNrZWQ6IHVuZGVmaW5lZCB9KSkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNsZWFyQWxsRmlsdGVycygpIHtcbiAgICAgICAgY2xlYXJGaWx0ZXIoZmlsdGVyQnlUeXBlT3B0aW9ucywgc2V0RmlsdGVyQnlUeXBlT3B0aW9ucyk7XG4gICAgICAgIGNsZWFyRmlsdGVyKGZpbHRlckJ5T250b2xvZ3lPcHRpb25zLCBzZXRGaWx0ZXJCeU9udG9sb2d5T3B0aW9ucyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdHJhbnNmb3JtX3RvX3NlYXJjaFZhbHVlKHNlbGVjdGVkT3B0aW9uOiB7XG4gICAgICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgICAgIGlyaT86IHN0cmluZztcbiAgICAgICAgb250b2xvZ3lfbmFtZT86IHN0cmluZztcbiAgICAgICAgdHlwZT86IHN0cmluZ1xuICAgIH1bXSkge1xuICAgICAgICBzZXRTZWFyY2hWYWx1ZShzZWxlY3RlZE9wdGlvblswXSA/IHNlbGVjdGVkT3B0aW9uWzBdLmxhYmVsIDogXCJcIilcbiAgICB9XG5cblxuICAgIHJldHVybiAoXG4gICAgICAgIDw+XG4gICAgICAgICAgICA8QXV0b2NvbXBsZXRlV2lkZ2V0XG4gICAgICAgICAgICAgICAgYXBpPXthcGl9XG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uQ2hhbmdlZEV2ZW50PXsoc2VsZWN0ZWRPcHRpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtX3RvX3NlYXJjaFZhbHVlKHNlbGVjdGVkT3B0aW9uKTtcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIGFsbG93Q3VzdG9tVGVybXM9e3RydWV9XG4gICAgICAgICAgICAgICAgc2luZ2xlU2VsZWN0aW9uPXt0cnVlfVxuICAgICAgICAgICAgICAgIGhhc1Nob3J0U2VsZWN0ZWRMYWJlbD17dHJ1ZX1cbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17XCJTZWFyY2hcIn1cbiAgICAgICAgICAgICAgICBwcmVzZWxlY3RlZD17cHJlc2VsZWN0ZWR9XG4gICAgICAgICAgICAvPlxuXG4gICAgICAgICAgICA8RXVpU3BhY2VyIHNpemU9XCJzXCIvPlxuXG4gICAgICAgICAgICA8RXVpRmxleEdyb3VwPlxuICAgICAgICAgICAgICAgIDxFdWlGbGV4SXRlbSBncm93PXszfSBzdHlsZT17eyBtaW5XaWR0aDogMjUwIH19PlxuICAgICAgICAgICAgICAgICAgICA8RXVpUGFuZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICB7aXNTdWNjZXNzICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEV1aUZvcm1Sb3cgbGFiZWw9XCJGaWx0ZXIgYnkgdHlwZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RXVpU2VsZWN0YWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz17ZmlsdGVyQnlUeXBlT3B0aW9uc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtzZXRGaWx0ZXJCeVR5cGVPcHRpb25zfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdFByb3BzPXt7IGJvcmRlcmVkOiB0cnVlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsobGlzdCkgPT4gbGlzdH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9FdWlTZWxlY3RhYmxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRXVpRm9ybVJvdz5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHtpc0xvYWRpbmcgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RXVpRm9ybVJvdyBsYWJlbD1cIkZpbHRlciBieSB0eXBlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxFdWlMb2FkaW5nU3Bpbm5lciBzaXplPVwic1wiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9FdWlGb3JtUm93PlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAge2lzRXJyb3IgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RXVpRm9ybVJvdyBsYWJlbD1cIkZpbHRlciBieSB0eXBlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxFdWlTZWxlY3RhYmxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zPXtbXX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtzZXRGaWx0ZXJCeVR5cGVPcHRpb25zfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdFByb3BzPXt7IGJvcmRlcmVkOiB0cnVlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsobGlzdCkgPT4gbGlzdH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9FdWlTZWxlY3RhYmxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRXVpRm9ybVJvdz5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAge2lzU3VjY2VzcyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxFdWlGb3JtUm93IGxhYmVsPVwiRmlsdGVyIGJ5IG9udG9sb2d5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxFdWlTZWxlY3RhYmxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zPXtmaWx0ZXJCeU9udG9sb2d5T3B0aW9uc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtzZXRGaWx0ZXJCeU9udG9sb2d5T3B0aW9uc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RQcm9wcz17eyBib3JkZXJlZDogdHJ1ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoYWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KGxpc3QsIHNlYXJjaCkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzZWFyY2h9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtsaXN0fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9FdWlTZWxlY3RhYmxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRXVpRm9ybVJvdz5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHtpc0xvYWRpbmcgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RXVpRm9ybVJvdyBsYWJlbD1cIkZpbHRlciBieSBvbnRvbG9neVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RXVpTG9hZGluZ1NwaW5uZXIgc2l6ZT1cInNcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRXVpRm9ybVJvdz5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHtpc0Vycm9yICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEV1aUZvcm1Sb3cgbGFiZWw9XCJGaWx0ZXIgYnkgb250b2xvZ3lcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEV1aVNlbGVjdGFibGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM9e1tdfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3NldEZpbHRlckJ5T250b2xvZ3lPcHRpb25zfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdFByb3BzPXt7IGJvcmRlcmVkOiB0cnVlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hhYmxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsobGlzdCwgc2VhcmNoKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3NlYXJjaH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2xpc3R9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0V1aVNlbGVjdGFibGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9FdWlGb3JtUm93PlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8RXVpQnV0dG9uRW1wdHlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtjbGVhckFsbEZpbHRlcnN9XG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xlYXIgYWxsIGZpbHRlcnNcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvRXVpQnV0dG9uRW1wdHk+XG4gICAgICAgICAgICAgICAgICAgIDwvRXVpUGFuZWw+XG4gICAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cblxuICAgICAgICAgICAgICAgIDxFdWlGbGV4SXRlbSBncm93PXs3fT5cbiAgICAgICAgICAgICAgICAgICAgPEV1aVBhbmVsIGNvbG9yPVwidHJhbnNwYXJlbnRcIiBncm93PXtmYWxzZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8RXVpRmxleEdyb3VwPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxFdWlGbGV4SXRlbSBncm93PXtmYWxzZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxFdWlTd2l0Y2ggbGFiZWw9XCJFeGFjdCBtYXRjaFwiIGNoZWNrZWQ9e2V4YWN0TWF0Y2h9IG9uQ2hhbmdlPXt0b2dnbGVFeGFjdE1hdGNofS8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxFdWlTd2l0Y2ggbGFiZWw9XCJTaG93IG9ubHkgb2Jzb2xldGUgdGVybXNcIiBjaGVja2VkPXtzaG93T2Jzb2xldGVUZXJtc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dG9nZ2xlU2hvd09ic29sZXRlVGVybXN9Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9FdWlGbGV4R3JvdXA+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxFdWlTcGFjZXIgc2l6ZT1cIm1cIi8+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxFdWlUZXh0IHNpemU9XCJ4c1wiIHN0eWxlPXt7IHBhZGRpbmc6IFwiMCA4cHhcIiB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaG93aW5nIHtNYXRoLm1pbihhY3RpdmVQYWdlICogaXRlbXNQZXJQYWdlICsgMSwgdG90YWxJdGVtcyl9IHRvIHtNYXRoLm1pbigoYWN0aXZlUGFnZSArIDEpICogaXRlbXNQZXJQYWdlLCB0b3RhbEl0ZW1zKX0gb2Yge3RvdGFsSXRlbXN9IHJlc3VsdHNcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvRXVpVGV4dD5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPEV1aVNwYWNlciBzaXplPVwic1wiLz5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPEV1aUhvcml6b250YWxSdWxlIG1hcmdpbj1cIm5vbmVcIiBzdHlsZT17eyBoZWlnaHQ6IDIgfX0vPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8RXVpU3BhY2VyIHNpemU9XCJzXCIvPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8RXVpVGFibGVQYWdpbmF0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlNlYXJjaCByZXN1bHQgcGFnaW5hdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZUNvdW50PXtwYWdlQ291bnR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlUGFnZT17YWN0aXZlUGFnZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZVBhZ2U9e3NldEFjdGl2ZVBhZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXNQZXJQYWdlPXtpdGVtc1BlclBhZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2VJdGVtc1BlclBhZ2U9e29uQ2hhbmdlSXRlbXNQZXJQYWdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zUGVyUGFnZU9wdGlvbnM9e2l0ZW1zUGVyUGFnZU9wdGlvbnN9XG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8RXVpU3BhY2VyIHNpemU9XCJzXCIvPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICB7c2VhcmNoUmVzdWx0cyAmJiBzZWFyY2hSZXN1bHRzLm1hcCgocmVzdWx0OiBhbnkpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8UmVhY3QuRnJhZ21lbnQga2V5PXtyZXN1bHQuaWR9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TWV0YWRhdGFDb21wYWN0IGFwaT17YXBpfSByZXN1bHQ9e3Jlc3VsdH0gdGFyZ2V0TGluaz17dGFyZ2V0TGlua30vPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RXVpU3BhY2VyLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICAgIDwvRXVpUGFuZWw+XG4gICAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgICAgIDwvRXVpRmxleEdyb3VwPlxuICAgICAgICA8Lz5cbiAgICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVTZWFyY2hSZXN1bHRzTGlzdChwcm9wczogU2VhcmNoUmVzdWx0c0xpc3RXaWRnZXRQcm9wcywgY29udGFpbmVyOiBhbnksIGNhbGxiYWNrPzogKCk9PnZvaWQpIHtcbiAgICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZFNlYXJjaFJlc3VsdHNMaXN0V2lkZ2V0KHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIFdyYXBwZWRTZWFyY2hSZXN1bHRzTGlzdFdpZGdldChwcm9wczogU2VhcmNoUmVzdWx0c0xpc3RXaWRnZXRQcm9wcykge1xuICAgIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCI+XG4gICAgICAgICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgICAgICAgICA8U2VhcmNoUmVzdWx0c0xpc3RXaWRnZXRcbiAgICAgICAgICAgICAgICAgICAgYXBpPXtwcm9wcy5hcGl9XG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5PXtwcm9wcy5xdWVyeX1cbiAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyPXtwcm9wcy5wYXJhbWV0ZXJ9XG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxJdGVtc1BlclBhZ2U9e3Byb3BzLmluaXRpYWxJdGVtc1BlclBhZ2V9XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zUGVyUGFnZU9wdGlvbnM9e3Byb3BzLml0ZW1zUGVyUGFnZU9wdGlvbnN9XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldExpbms9e3Byb3BzLnRhcmdldExpbmt9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICAgICAgPC9FdWlQcm92aWRlcj5cbiAgICApXG59XG5cbmV4cG9ydCB7IFNlYXJjaFJlc3VsdHNMaXN0V2lkZ2V0LCBjcmVhdGVTZWFyY2hSZXN1bHRzTGlzdCB9O1xuIiwgImltcG9ydCB7IEV1aUNhcmQsIEV1aUZsZXhHcm91cCwgRXVpRmxleEl0ZW0sIEV1aVNwYWNlciwgRXVpVGl0bGUgfSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBCcmVhZGNydW1iV2lkZ2V0LCBEZXNjcmlwdGlvbldpZGdldCwgSXJpV2lkZ2V0IH0gZnJvbSBcIi4uL01ldGFkYXRhV2lkZ2V0XCI7XG5pbXBvcnQge01ldGFkYXRhQ29tcGFjdFByb3BzfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQge3BsdXJhbGl6ZVR5cGV9IGZyb20gXCIuLi8uLi8uLi9hcHAvdXRpbFwiO1xuXG5mdW5jdGlvbiBNZXRhZGF0YUNvbXBhY3QocHJvcHM6IE1ldGFkYXRhQ29tcGFjdFByb3BzKSB7XG4gICAgY29uc3Qge1xuICAgICAgICBhcGksXG4gICAgICAgIHJlc3VsdCxcbiAgICAgICAgdGFyZ2V0TGluayxcbiAgICAgICAgLi4ucmVzdFxuICAgIH0gPSBwcm9wcztcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxFdWlDYXJkXG4gICAgICAgICAgICB0ZXh0QWxpZ249XCJsZWZ0XCJcbiAgICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgICAgaHJlZj17dGFyZ2V0TGluayA/XG4gICAgICAgICAgICAgICAgKHJlc3VsdC50eXBlICE9IFwib250b2xvZ3lcIiA/XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldExpbmsgKyBcIm9udG9sb2dpZXMvXCIgKyByZXN1bHQub250b2xvZ3lfbmFtZSArIFwiL1wiICsgcGx1cmFsaXplVHlwZShyZXN1bHQudHlwZSwgdHJ1ZSkgKyBcIj9pcmk9XCIgKyBlbmNvZGVVUklDb21wb25lbnQocmVzdWx0LmlyaSlcbiAgICAgICAgICAgICAgICAgICAgOiB0YXJnZXRMaW5rICsgXCJvbnRvbG9naWVzL1wiICsgcmVzdWx0Lm9udG9sb2d5X25hbWUpXG4gICAgICAgICAgICAgICAgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICB0aXRsZT17XG4gICAgICAgICAgICAgICAgPEV1aUZsZXhHcm91cD5cbiAgICAgICAgICAgICAgICAgICAgPEV1aUZsZXhJdGVtIGdyb3c9e2ZhbHNlfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxFdWlUaXRsZT48aDI+e3Jlc3VsdC5sYWJlbH08L2gyPjwvRXVpVGl0bGU+XG4gICAgICAgICAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtyZXN1bHQudHlwZSAhPSBcIm9udG9sb2d5XCIgJiYgPEJyZWFkY3J1bWJXaWRnZXQgYXBpPXthcGl9IGlyaT17cmVzdWx0LmlyaX0gZW50aXR5VHlwZT17cmVzdWx0LnR5cGV9IG9udG9sb2d5SWQ9e3Jlc3VsdC5vbnRvbG9neV9uYW1lfS8+fVxuICAgICAgICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgIDwvRXVpRmxleEdyb3VwPlxuICAgICAgICAgICAgfVxuICAgICAgICA+XG4gICAgICAgICAgICB7cmVzdWx0LnR5cGUgIT0gXCJvbnRvbG9neVwiID8gPElyaVdpZGdldCBpcmk9e3Jlc3VsdC5pcml9Lz4gOiB1bmRlZmluZWR9XG4gICAgICAgICAgICA8RXVpU3BhY2VyIHNpemU9XCJzXCIvPlxuICAgICAgICAgICAgPERlc2NyaXB0aW9uV2lkZ2V0IGFwaT17YXBpfSBvbnRvbG9neUlkPXtyZXN1bHQub250b2xvZ3lfbmFtZX0gaXJpPXtyZXN1bHQuaXJpfSB0aGluZ1R5cGU9e3Jlc3VsdC50eXBlfS8+XG4gICAgICAgIDwvRXVpQ2FyZD5cblxuICAgICk7XG59XG5cbmV4cG9ydCB7IE1ldGFkYXRhQ29tcGFjdCB9O1xuIiwgImltcG9ydCBSZWFjdCwge1JlYWN0RWxlbWVudH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBPbHNBcGkgfSBmcm9tIFwiLi4vLi4vLi4vYXBpL09sc0FwaVwiO1xuaW1wb3J0IHtRdWVyeUNsaWVudCwgUXVlcnlDbGllbnRQcm92aWRlciwgdXNlUXVlcnl9IGZyb20gXCJyZWFjdC1xdWVyeVwiO1xuaW1wb3J0IHtFdWlDYXJkLCBFdWlGbGV4SXRlbSwgRXVpTG9hZGluZ1NwaW5uZXIsIEV1aVByb3ZpZGVyLCBFdWlUZXh0fSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQge0NsYXNzLCBJbmRpdmlkdWFsLCBQcm9wZXJ0eSwgVGhpbmd9IGZyb20gXCIuLi8uLi8uLi9tb2RlbC9pbnRlcmZhY2VzXCI7XG5pbXBvcnQge2dldENsYXNzRXhwcmVzc2lvbkpTWCwgZ2V0RW50aXR5TGlua0pTWCwgZ2V0UmVpZmllZEpTWCwgZ2V0U2VjdGlvbkxpc3RKU1h9IGZyb20gXCIuLi8uLi8uLi9tb2RlbC9TdHJ1Y3R1cmVSZW5kZXJpbmdcIjtcbmltcG9ydCB7aXNDbGFzcywgaXNJbmRpdmlkdWFsLCBpc1Byb3BlcnR5fSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvTW9kZWxUeXBlQ2hlY2tcIjtcbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuLi8uLi8uLi9tb2RlbC9SZWlmaWVkXCI7XG5pbXBvcnQge2NyZWF0ZU1vZGVsT2JqZWN0fSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvTW9kZWxPYmplY3RDcmVhdG9yXCI7XG5pbXBvcnQge2FzQXJyYXksIGNhcGl0YWxpemUsIGdldEVudGl0eVR5cGVOYW1lLCByYW5kb21TdHJpbmd9IGZyb20gXCIuLi8uLi8uLi9hcHAvdXRpbFwiO1xuaW1wb3J0IHtFbnRpdHlSZWxhdGlvbnNXaWRnZXRQcm9wc30gZnJvbSBcIi4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcblxuY29uc3QgREVGQVVMVF9IQVNfVElUTEUgPSB0cnVlO1xuXG4vKipcbiAqIEJ1aWxkcyBhbmQgcmV0dXJucyB0aGUgdHlwZSBzZWN0aW9uIEpTWCBlbGVtZW50LlxuICogQHBhcmFtIGluZGl2aWR1YWxcbiAqIEBwYXJhbSBwcm9wcyB0aGUgZW50aXRpZXMnIHByb3BlcnRpZXNcbiAqIEByZXR1cm5zIHtSZWFjdEVsZW1lbnR9IHRoZSBzZWN0aW9ucycgSlNYIGVsZW1lbnRcbiAqL1xuZnVuY3Rpb24gZ2V0SW5kaXZpZHVhbFR5cGVzU2VjdGlvbkpTWChpbmRpdmlkdWFsOiBJbmRpdmlkdWFsLCBwcm9wczogRW50aXR5UmVsYXRpb25zV2lkZ2V0UHJvcHMpOiBSZWFjdEVsZW1lbnQge1xuICAgIGNvbnN0IHR5cGVzID0gaW5kaXZpZHVhbC5nZXRSZGZUeXBlcygpLmZpbHRlcigoZWxlbTogc3RyaW5nKSA9PiBlbGVtICE9PSBcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI05hbWVkSW5kaXZpZHVhbFwiICYmICFlbGVtLnN0YXJ0c1dpdGgoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjXCIpKTtcblxuICAgIGlmKGluZGl2aWR1YWwuZ2V0UmRmVHlwZXMoKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiAoPEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgPGI+VHlwZTwvYj5cbiAgICAgICAgICAgIHtnZXRTZWN0aW9uTGlzdEpTWChpbmRpdmlkdWFsLCBpbmRpdmlkdWFsLmdldExpbmtlZEVudGl0aWVzKCksIHR5cGVzLCBwcm9wcy5hcGksIHByb3BzLnNob3dCYWRnZXMpfVxuICAgICAgICA8L0V1aUZsZXhJdGVtPik7XG4gICAgfVxuICAgIGVsc2UgcmV0dXJuIDw+PC8+O1xufVxuXG4vKipcbiAqIEJ1aWxkcyBhbmQgcmV0dXJucyB0aGUgc2FtZSBhcyBzZWN0aW9uIEpTWCBlbGVtZW50LlxuICogQHBhcmFtIGluZGl2aWR1YWxcbiAqIEBwYXJhbSBwcm9wcyB0aGUgZW50aXRpZXMnIHByb3BlcnRpZXNcbiAqIEByZXR1cm5zIHtSZWFjdEVsZW1lbnR9IHRoZSBzZWN0aW9ucycgSlNYIGVsZW1lbnRcbiAqL1xuZnVuY3Rpb24gZ2V0SW5kaXZpZHVhbFNhbWVBc1NlY3Rpb25KU1goaW5kaXZpZHVhbDogSW5kaXZpZHVhbCwgcHJvcHM6IEVudGl0eVJlbGF0aW9uc1dpZGdldFByb3BzKTogUmVhY3RFbGVtZW50IHtcbiAgICBjb25zdCBzYW1lQXMgPSBpbmRpdmlkdWFsLmdldFNhbWVBcygpO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICAgIHtzYW1lQXMubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICAgICAgPGI+U2FtZSBBczwvYj5cbiAgICAgICAgICAgICAgICAgICAge2dldFNlY3Rpb25MaXN0SlNYKGluZGl2aWR1YWwsIGluZGl2aWR1YWwuZ2V0TGlua2VkRW50aXRpZXMoKSwgc2FtZUFzLCBwcm9wcy5hcGksIHByb3BzLnNob3dCYWRnZXMpfVxuICAgICAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvPik7XG59XG5cbi8qKlxuICogQnVpbGRzIGFuZCByZXR1cm5zIHRoZSBkaWZmZXJlbnQgZnJvbSBzZWN0aW9uIEpTWCBlbGVtZW50LlxuICogQHBhcmFtIGluZGl2aWR1YWxcbiAqIEBwYXJhbSBwcm9wcyB0aGUgZW50aXRpZXMnIHByb3BlcnRpZXNcbiAqIEByZXR1cm5zIHtSZWFjdEVsZW1lbnR9IHRoZSBzZWN0aW9ucycgSlNYIGVsZW1lbnRcbiAqL1xuZnVuY3Rpb24gZ2V0SW5kaXZpZHVhbERpZmZlcmVudEZyb21TZWN0aW9uSlNYKGluZGl2aWR1YWw6IEluZGl2aWR1YWwsIHByb3BzOiBFbnRpdHlSZWxhdGlvbnNXaWRnZXRQcm9wcyk6IFJlYWN0RWxlbWVudCB7XG4gICAgY29uc3QgZGlmZmVyZW50RnJvbSA9IGluZGl2aWR1YWwuZ2V0RGlmZmVyZW50RnJvbSgpO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICAgIHtkaWZmZXJlbnRGcm9tLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgICAgIDxiPkRpZmZlcmVudCBmcm9tPC9iPlxuICAgICAgICAgICAgICAgICAgICB7Z2V0U2VjdGlvbkxpc3RKU1goaW5kaXZpZHVhbCwgaW5kaXZpZHVhbC5nZXRMaW5rZWRFbnRpdGllcygpLCBkaWZmZXJlbnRGcm9tLCBwcm9wcy5hcGksIHByb3BzLnNob3dCYWRnZXMpfVxuICAgICAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvPlxuICAgICk7XG59XG5cbi8qKlxuICogQnVpbGRzIGFuZCByZXR1cm5zIHRoZSBkaXNqb2ludCB3aXRoIHNlY3Rpb24gSlNYIGVsZW1lbnQuXG4gKiBAcGFyYW0gZW50aXR5XG4gKiBAcGFyYW0gcHJvcHMgdGhlIGVudGl0aWVzJyBwcm9wZXJ0aWVzXG4gKiBAcmV0dXJucyB7UmVhY3RFbGVtZW50fSB0aGUgc2VjdGlvbnMnIEpTWCBlbGVtZW50XG4gKi9cbmZ1bmN0aW9uIGdldERpc2pvaW50V2l0aFNlY3Rpb25KU1goZW50aXR5OiBQcm9wZXJ0eSB8IENsYXNzLCBwcm9wczogRW50aXR5UmVsYXRpb25zV2lkZ2V0UHJvcHMpOiBSZWFjdEVsZW1lbnQge1xuICAgIGNvbnN0IGRpc2pvaW50V2l0aCA9IGVudGl0eS5nZXREaXNqb2ludFdpdGgoKTtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDw+XG4gICAgICAgICAgICB7ZGlzam9pbnRXaXRoLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgICAgIDxiPkRpc2pvaW50IHdpdGg8L2I+XG4gICAgICAgICAgICAgICAgICAgIHtnZXRTZWN0aW9uTGlzdEpTWChlbnRpdHksIGVudGl0eS5nZXRMaW5rZWRFbnRpdGllcygpLCBkaXNqb2ludFdpdGgsIHByb3BzLmFwaSwgcHJvcHMuc2hvd0JhZGdlcyl9XG4gICAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC8+XG4gICAgKTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgYW5kIHJldHVybnMgdGhlIGludmVyc2Ugb2Ygc2VjdGlvbiBKU1ggZWxlbWVudC5cbiAqIEBwYXJhbSBwcm9wZXJ0eVxuICogQHBhcmFtIHByb3BzIHRoZSBlbnRpdGllcycgcHJvcGVydGllc1xuICogQHJldHVybnMge1JlYWN0RWxlbWVudH0gdGhlIHNlY3Rpb25zJyBKU1ggZWxlbWVudFxuICovXG5mdW5jdGlvbiBnZXRQcm9wZXJ0eUludmVyc2VPZlNlY3Rpb25KU1gocHJvcGVydHk6IFByb3BlcnR5LCBwcm9wczogRW50aXR5UmVsYXRpb25zV2lkZ2V0UHJvcHMpOiBSZWFjdEVsZW1lbnQge1xuICAgIGNvbnN0IGludmVyc2VPZnMgPSBwcm9wZXJ0eS5nZXRJbnZlcnNlT2YoKTtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDw+XG4gICAgICAgICAgICB7aW52ZXJzZU9mcy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgPEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgICAgICA8Yj5JbnZlcnNlIG9mPC9iPlxuICAgICAgICAgICAgICAgICAgICB7Z2V0U2VjdGlvbkxpc3RKU1gocHJvcGVydHksIHByb3BlcnR5LmdldExpbmtlZEVudGl0aWVzKCksIGludmVyc2VPZnMsIHByb3BzLmFwaSwgcHJvcHMuc2hvd0JhZGdlcyl9XG4gICAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC8+XG4gICAgKTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgYW5kIHJldHVybnMgb25lIHByb3BlcnR5IGNoYWluIEpTWCBlbGVtZW50LiBJcyB1c2VkIGZvciB7QGxpbmsgZ2V0UHJvcGVydHlDaGFpblNlY3Rpb25KU1h9LlxuICogQHBhcmFtIHByb3BlcnR5Q2hhaW4gdGhlIHByb3BlcnR5IGNoYWluXG4gKiBAcGFyYW0gcHJvcGVydHlcbiAqIEBwYXJhbSBwcm9wcyAgICAgdGhlIGVudGl0aWVzJyBwcm9wZXJ0aWVzXG4gKiBAcmV0dXJucyB7UmVhY3RFbGVtZW50W119IHRoZSBjaGFpbnMgSlNYIGVsZW1lbnRcbiAqL1xuZnVuY3Rpb24gZ2V0UHJvcGVydHlDaGFpbkpTWChwcm9wZXJ0eUNoYWluOiBhbnlbXSwgcHJvcGVydHk6IFByb3BlcnR5LCBwcm9wczogRW50aXR5UmVsYXRpb25zV2lkZ2V0UHJvcHMpOiBSZWFjdEVsZW1lbnRbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkocHJvcGVydHlDaGFpbikuc2xpY2UoKS5yZXZlcnNlKCkubWFwKChwcm9wZXJ0eUV4cHIsIGkpID0+IHsgLy8gdXNpbmcgLnNsaWNlKCkgaGVyZSBpcyBpbXBvcnRhbnQgYmVjYXVzZSBhIG11dGF0aW9uIG9mIHByb3BlcnR5Q2hhaW4gd291bGQgdHJpZ2dlciBhIHVzZVF1ZXJ5KClcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxzcGFuIGtleT17cHJvcGVydHlFeHByfT5cbiAgICAgICAgICAgICAgICB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKHByb3BlcnR5LCBwcm9wZXJ0eS5nZXRMaW5rZWRFbnRpdGllcygpLCBwcm9wZXJ0eUV4cHIsIHByb3BzLmFwaSwgcHJvcHMuc2hvd0JhZGdlcyl9XG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAge2kgPCBhc0FycmF5KHByb3BlcnR5Q2hhaW4pLmxlbmd0aCAtIDEgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3tmb250U2l6ZTogXCJtZWRpdW1cIiwgY29sb3I6IFwiZ3JheVwifX0+Jm5ic3A7JiM5NjY2OyZuYnNwOzwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgKTtcbiAgICB9KTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgYW5kIHJldHVybnMgdGhlIHByb3BlcnR5IGNoYWlucyBzZWN0aW9uIEpTWCBlbGVtZW50LlxuICogQHBhcmFtIHByb3BlcnR5XG4gKiBAcGFyYW0gcHJvcHMgdGhlIGVudGl0aWVzJyBwcm9wZXJ0aWVzXG4gKiBAcmV0dXJucyB7UmVhY3RFbGVtZW50fSB0aGUgc2VjdGlvbnMnIEpTWCBlbGVtZW50XG4gKi9cbmZ1bmN0aW9uIGdldFByb3BlcnR5Q2hhaW5TZWN0aW9uSlNYKHByb3BlcnR5OiBQcm9wZXJ0eSwgcHJvcHM6IEVudGl0eVJlbGF0aW9uc1dpZGdldFByb3BzKTogUmVhY3RFbGVtZW50IHtcbiAgICBjb25zdCBwcm9wZXJ0eUNoYWlucyA9IHByb3BlcnR5LmdldFByb3BlcnR5Q2hhaW5zKCkubWFwKChyZWlmaWVkIDogUmVpZmllZDxhbnk+KSA9PiByZWlmaWVkLnZhbHVlKTtcblxuICAgIGNvbnN0IGhhc011bHRpcGxlQ2hhaW5zID0gcHJvcGVydHlDaGFpbnMuZmlsdGVyKChlbGVtOiBhbnkpID0+IEFycmF5LmlzQXJyYXkoZWxlbSkpLmxlbmd0aCA+IDA7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8PlxuICAgICAgICAgICAge3Byb3BlcnR5Q2hhaW5zLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgICAgIDxiPnshaGFzTXVsdGlwbGVDaGFpbnMgPyBcIlByb3BlcnR5IGNoYWluXCIgOiBcIlByb3BlcnR5IGNoYWluc1wifTwvYj5cbiAgICAgICAgICAgICAgICAgICAgeyFoYXNNdWx0aXBsZUNoYWlucyA/XG4gICAgICAgICAgICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+e2dldFByb3BlcnR5Q2hhaW5KU1gocHJvcGVydHlDaGFpbnMsIHByb3BlcnR5LCBwcm9wcyl9PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eUNoYWlucy5tYXAoKGl0ZW06IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICg8bGkga2V5PXtyYW5kb21TdHJpbmcoKX0+e2dldFByb3BlcnR5Q2hhaW5KU1goaXRlbSwgcHJvcGVydHksIHByb3BzKX08L2xpPik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvPlxuICAgICk7XG59XG5cbi8qKlxuICogQnVpbGRzIGFuZCByZXR1cm5zIHRoZSBlcXVpdmFsZW50IHRvIHNlY3Rpb24gSlNYIGVsZW1lbnQuXG4gKiBAcGFyYW0gZW50aXR5XG4gKiBAcGFyYW0gcHJvcHMgdGhlIGVudGl0aWVzJyBwcm9wZXJ0aWVzXG4gKiBAcmV0dXJucyB7UmVhY3RFbGVtZW50fSB0aGUgc2VjdGlvbnMnIEpTWCBlbGVtZW50XG4gKi9cbmZ1bmN0aW9uIGdldEVudGl0eUVxdWl2YWxlbnRUb1NlY3Rpb25KU1goZW50aXR5OiBQcm9wZXJ0eSB8IENsYXNzLCBwcm9wczogRW50aXR5UmVsYXRpb25zV2lkZ2V0UHJvcHMpOiBSZWFjdEVsZW1lbnQge1xuICAgIGNvbnN0IGVxdWl2YWxlbnRzID0gZW50aXR5LmdldEVxdWl2YWxlbnRzKCk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8PlxuICAgICAgICAgICAge2VxdWl2YWxlbnRzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgICAgIDxiPkVxdWl2YWxlbnQgdG88L2I+XG4gICAgICAgICAgICAgICAgICAgIHtlcXVpdmFsZW50cy5sZW5ndGggPT09IDEgP1xuICAgICAgICAgICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPntnZXRSZWlmaWVkSlNYKGVudGl0eSwgZXF1aXZhbGVudHNbMF0sIHByb3BzLmFwaSwgcHJvcHMuc2hvd0JhZGdlcyl9PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcXVpdmFsZW50cy5tYXAoKGl0ZW06IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICg8bGkga2V5PXtyYW5kb21TdHJpbmcoKX0gPntnZXRSZWlmaWVkSlNYKGVudGl0eSwgaXRlbSwgcHJvcHMuYXBpLCBwcm9wcy5zaG93QmFkZ2VzKX08L2xpPik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvPlxuICAgICk7XG59XG5cbi8qKlxuICogQnVpbGRzIGFuZCByZXR1cm5zIHRoZSBzdWJlbnRpdHkgb2Ygc2VjdGlvbiBKU1ggZWxlbWVudC5cbiAqIEBwYXJhbSBlbnRpdHlcbiAqIEBwYXJhbSBwcm9wcyB0aGUgZW50aXRpZXMnIHByb3BlcnRpZXNcbiAqIEByZXR1cm5zIHtSZWFjdEVsZW1lbnR9IHRoZSBzZWN0aW9ucycgSlNYIGVsZW1lbnRcbiAqL1xuZnVuY3Rpb24gZ2V0U3ViRW50aXR5T2ZTZWN0aW9uSlNYKGVudGl0eTogUHJvcGVydHkgfCBDbGFzcywgcHJvcHM6IEVudGl0eVJlbGF0aW9uc1dpZGdldFByb3BzKTogUmVhY3RFbGVtZW50IHtcbiAgICBjb25zdCBzdXBlckVudGl0aWVzID0gZW50aXR5LmdldFN1cGVyRW50aXRpZXMoKTtcbiAgICByZXR1cm4gKFxuICAgICAgICA8PlxuICAgICAgICAgICAge3N1cGVyRW50aXRpZXMubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICAgICAgPGI+U3Vie2VudGl0eS5nZXRUeXBlKCl9IG9mPC9iPlxuICAgICAgICAgICAgICAgICAgICB7c3VwZXJFbnRpdGllcy5sZW5ndGggPT09IDEgP1xuICAgICAgICAgICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPntnZXRSZWlmaWVkSlNYKGVudGl0eSwgc3VwZXJFbnRpdGllc1swXSwgcHJvcHMuYXBpLCBwcm9wcy5zaG93QmFkZ2VzKX08L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICApIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cGVyRW50aXRpZXMubWFwKChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoPGxpIGtleT17cmFuZG9tU3RyaW5nKCl9PntnZXRSZWlmaWVkSlNYKGVudGl0eSwgaXRlbSwgcHJvcHMuYXBpLCBwcm9wcy5zaG93QmFkZ2VzKX08L2xpPik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvPlxuICAgICk7XG59XG5cbi8qKlxuICogQnVpbGRzIGFuZCByZXR1cm5zIHRoZSByZWxhdGVkIGZyb20gc2VjdGlvbiBKU1ggZWxlbWVudC5cbiAqIEBwYXJhbSBlbnRpdHlcbiAqIEBwYXJhbSBwcm9wcyB0aGUgZW50aXRpZXMnIHByb3BlcnRpZXNcbiAqIEByZXR1cm5zIHtSZWFjdEVsZW1lbnR9IHRoZSBzZWN0aW9ucycgSlNYIGVsZW1lbnRcbiAqL1xuZnVuY3Rpb24gZ2V0RW50aXR5UmVsYXRlZEZyb21TZWN0aW9uSlNYKGVudGl0eTogUHJvcGVydHkgfCBDbGFzcywgcHJvcHM6IEVudGl0eVJlbGF0aW9uc1dpZGdldFByb3BzKTogUmVhY3RFbGVtZW50IHtcbiAgICBjb25zdCByZWxhdGVkRnJvbXMgPSBlbnRpdHkuZ2V0UmVsYXRlZEZyb20oKTtcbiAgICBjb25zdCBwcmVkaWNhdGVzOiBzdHJpbmdbXSA9IEFycmF5LmZyb20obmV3IFNldChyZWxhdGVkRnJvbXMubWFwKChlbGVtOiBhbnkpID0+IHtyZXR1cm4gZWxlbS52YWx1ZVtcInByb3BlcnR5XCJdfSkpKTtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDw+XG4gICAgICAgICAgICB7cmVsYXRlZEZyb21zLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgICAgIDxiPlJlbGF0ZWQgZnJvbTwvYj5cbiAgICAgICAgICAgICAgICAgICAge3ByZWRpY2F0ZXMubWFwKChwKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsYWJlbCA9IGVudGl0eS5nZXRMaW5rZWRFbnRpdGllcygpLmdldExhYmVsRm9ySXJpKHApO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGtleT17cC50b1N0cmluZygpICsgcmFuZG9tU3RyaW5nKCl9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgc3R5bGU9e3tjb2xvcjogXCJibGFja1wifX0gaHJlZj17cH0+PGk+e2xhYmVsIHx8IHB9PC9pPjwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBzdHlsZT17e21hcmdpbkJvdHRvbTogMH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3JlbGF0ZWRGcm9tcy5maWx0ZXIoKGVsZW06IGFueSkgPT4ge3JldHVybiBlbGVtLnZhbHVlW1wicHJvcGVydHlcIl0gPT09IHB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoKGVsZW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGtleT17cmFuZG9tU3RyaW5nKCl9PntnZXRDbGFzc0V4cHJlc3Npb25KU1goZW50aXR5LCBlbnRpdHkuZ2V0TGlua2VkRW50aXRpZXMoKSwgZWxlbS52YWx1ZVtcInZhbHVlXCJdLCBwcm9wcy5hcGksIHByb3BzLnNob3dCYWRnZXMpfTwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+PC9wPiB7LyogV29ya3MgYXMgZW1wdHkgc3BhY2UgbGVmdCB0byBuZXh0IHNlY3Rpb24gKi99XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICApO30pXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICAgICAgfVxuICAgICAgICA8Lz5cbiAgICApO1xufVxuXG4vKipcbiAqIEJ1aWxkcyBhbmQgcmV0dXJucyB0aGUgY2xhc3MgaW5zdGFuY2VzIHNlY3Rpb24gSlNYIGVsZW1lbnQuXG4gKiBAcGFyYW0gdGVybVxuICogQHBhcmFtIGluc3RhbmNlcyBhbiBhcnJheSBvZiB0aGUgY2xhc3NlcycgaW5zdGFuY2VzXG4gKiBAcGFyYW0gcHJvcHNcbiAqIEByZXR1cm5zIHtSZWFjdEVsZW1lbnR9IHRoZSBzZWN0aW9ucycgSlNYIGVsZW1lbnRcbiAqL1xuZnVuY3Rpb24gZ2V0Q2xhc3NJbnN0YW5jZXNTZWN0aW9uSlNYKHRlcm06IENsYXNzLCBpbnN0YW5jZXM6IFRoaW5nW10sIHByb3BzOiBFbnRpdHlSZWxhdGlvbnNXaWRnZXRQcm9wcyk6IFJlYWN0RWxlbWVudCB7XG4gICAgaWYoaW5zdGFuY2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuICg8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgPGI+SW5zdGFuY2VzPC9iPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2VzLm1hcCgoaW5zdGFuY2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoPGxpIGtleT17cmFuZG9tU3RyaW5nKCl9ID5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtnZXRFbnRpdHlMaW5rSlNYKHRlcm0sIHRlcm0uZ2V0TGlua2VkRW50aXRpZXMoKSwgaW5zdGFuY2UuZ2V0SXJpKCksIHByb3BzLmFwaSwgcHJvcHMuc2hvd0JhZGdlcyl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xpPik7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgPC9FdWlGbGV4SXRlbT4pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIDw+PC8+O1xuICAgIH1cbn1cblxuLyoqXG4gKiBGZXRjaGVzIGEgY2xhc3NlcyBpbnN0YW5jZXMgZnJvbSB0aGUgSlNPTiBhcGkuXG4gKiBAcGFyYW0gdGVybVxuICogQHBhcmFtIGFwaSAgIGEgcmVmZXJlbmNlIHRvIHRoZSBhcGlcbiAqIEBwYXJhbSBwcm9wcyB0aGUgY2xhc3NlcycgcHJvcGVydGllc1xuICovXG5hc3luYyBmdW5jdGlvbiBmZXRjaEluc3RhbmNlcyh0ZXJtOiBDbGFzcywgYXBpOiBPbHNBcGksIHByb3BzOiBFbnRpdHlSZWxhdGlvbnNXaWRnZXRQcm9wcykgIHtcbiAgICBjb25zdCBkb3VibGVFbmNvZGVkVGVybUlyaSA9IGVuY29kZVVSSUNvbXBvbmVudChlbmNvZGVVUklDb21wb25lbnQodGVybS5nZXRJcmkoKSkpO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXBpLmdldENsYXNzSW5zdGFuY2VzKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB7b250b2xvZ3lJZDogcHJvcHMub250b2xvZ3lJZCB8fCB0ZXJtLmdldE9udG9sb2d5SWQoKSwgdGVybUlyaTogZG91YmxlRW5jb2RlZFRlcm1Jcml9LCBwcm9wcy5wYXJhbWV0ZXIpXG4gICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IGNvbnNvbGUubG9nKGVycm9yKSk7XG4gICAgaWYgKHJlc3BvbnNlW1wiZWxlbWVudHNcIl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gYXNBcnJheShyZXNwb25zZVtcImVsZW1lbnRzXCJdKS5tYXAoKGluc3RhbmNlKSA9PiBjcmVhdGVNb2RlbE9iamVjdCh7ZWxlbWVudHM6IFtpbnN0YW5jZV19KSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aHJvdyBFcnJvcihcIkVycm9yIGZldGNoaW5nIGluc3RhbmNlcyBvZiAnXCIgKyBwcm9wcy5pcmkgKyBcIidcIik7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBFbnRpdHlSZWxhdGlvbnNXaWRnZXQocHJvcHM6IEVudGl0eVJlbGF0aW9uc1dpZGdldFByb3BzKSB7XG4gICAgY29uc3QgeyBhcGksIGlyaSwgb250b2xvZ3lJZCwgaGFzVGl0bGUgPSBERUZBVUxUX0hBU19USVRMRSwgc2hvd0JhZGdlcywgZW50aXR5VHlwZSwgcGFyYW1ldGVyLCAuLi5yZXN0IH0gPSBwcm9wcztcblxuICAgIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gZmV0Y2ggYW4gZW50aXRpZXMnIGRhdGEgdG8gYmUgc2hvd24gaW4gZGlmZmVyZW50IHNlY3Rpb25zXG4gICAgICovXG4gICAgY29uc3Qge1xuICAgICAgICBkYXRhOiBlbnRpdHksXG4gICAgICAgIGlzTG9hZGluZzogaXNMb2FkaW5nRW50aXR5UmVsYXRpb24sXG4gICAgICAgIGlzU3VjY2VzczogaXNTdWNjZXNzRW50aXR5UmVsYXRpb24sXG4gICAgICAgIGlzRXJyb3I6IGlzRXJyb3JFbnRpdHlSZWxhdGlvbixcbiAgICB9ID0gdXNlUXVlcnkoXG4gICAgICAgIFtcbiAgICAgICAgICAgIFwiZW50aXR5SnNvblwiLFxuICAgICAgICAgICAgYXBpLFxuICAgICAgICAgICAgaXJpLFxuICAgICAgICAgICAgb250b2xvZ3lJZCxcbiAgICAgICAgICAgIGVudGl0eVR5cGUsXG4gICAgICAgICAgICBwYXJhbWV0ZXIsXG4gICAgICAgICAgICBzaG93QmFkZ2VzXG4gICAgICAgIF0sXG4gICAgICAgIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBvbHNBcGkuZ2V0RW50aXR5T2JqZWN0KGlyaSwgZW50aXR5VHlwZSwgb250b2xvZ3lJZCwgcGFyYW1ldGVyLCAgZmFsc2UpOyAvLyBhbHdheXMgdXNlIHYyLyBBUElcbiAgICAgICAgfSxcbiAgICApO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byBmZXRjaCBhIGNsYXNzZXMgaW5zdGFuY2VzIHRvIGJlIHNob3duIGluIGNsYXNzIGluc3RhbmNlcyBzZWN0aW9uXG4gICAgICovXG4gICAgY29uc3Qge1xuICAgICAgICBkYXRhOiBpbnN0YW5jZXNKc29uLFxuICAgICAgICBpc0xvYWRpbmc6IGlzTG9hZGluZ0luc3RhbmNlcyxcbiAgICAgICAgaXNTdWNjZXNzOiBpc1N1Y2Nlc3NJbnN0YW5jZXMsXG4gICAgfSA9IHVzZVF1ZXJ5KHtcbiAgICAgICAgcXVlcnlLZXk6IFtcbiAgICAgICAgICAgIFwiaW5zdGFuY2VzSnNvblwiLFxuICAgICAgICAgICAgZW50aXR5XG4gICAgICAgIF0sXG4gICAgICAgIHF1ZXJ5Rm46IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiAoZW50aXR5ICYmIGlzQ2xhc3MoZW50aXR5KSAmJiBlbnRpdHkuaGFzRGlyZWN0Q2hpbGRyZW4oKSkgPyBmZXRjaEluc3RhbmNlcyhlbnRpdHksIG9sc0FwaSwgcHJvcHMpIDogW107XG4gICAgICAgIH0sXG4gICAgICAgIGVuYWJsZWQ6ICEhZW50aXR5fSxcbiAgICApO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICAgIDxFdWlDYXJkXG4gICAgICAgICAgICAgICAgdGl0bGU9e2hhc1RpdGxlID8gKGVudGl0eVR5cGUgPyBjYXBpdGFsaXplKGdldEVudGl0eVR5cGVOYW1lKGVudGl0eVR5cGUpKSA6IChpc1N1Y2Nlc3NFbnRpdHlSZWxhdGlvbiAmJiBlbnRpdHkpID8gY2FwaXRhbGl6ZShlbnRpdHkuZ2V0VHlwZSgpKSA6IFwiXCIpICsgXCIgUmVsYXRpb25zXCIgOiBcIlwifVxuICAgICAgICAgICAgICAgIGxheW91dD1cImhvcml6b250YWxcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHsoaXNMb2FkaW5nRW50aXR5UmVsYXRpb24gfHwgaXNMb2FkaW5nSW5zdGFuY2VzKSAmJiA8RXVpTG9hZGluZ1NwaW5uZXIgc2l6ZT17J3MnfS8+fVxuICAgICAgICAgICAgICAgIHtpc0Vycm9yRW50aXR5UmVsYXRpb24gJiYgPEV1aVRleHQ+UmVxdWVzdGVkIHJlc291cmNlIG5vdCBhdmFpbGFibGU8L0V1aVRleHQ+fVxuICAgICAgICAgICAgICAgIHsoaXNTdWNjZXNzRW50aXR5UmVsYXRpb24gJiYgaXNTdWNjZXNzSW5zdGFuY2VzKSAmJiBlbnRpdHkgIT09IHVuZGVmaW5lZCAmJiBpbnN0YW5jZXNKc29uICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgPEV1aVRleHQgey4uLnJlc3R9PlxuICAgICAgICAgICAgICAgICAgICAgICAge2lzSW5kaXZpZHVhbChlbnRpdHkpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2dldEluZGl2aWR1YWxUeXBlc1NlY3Rpb25KU1goZW50aXR5LCBwcm9wcyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtnZXRJbmRpdmlkdWFsU2FtZUFzU2VjdGlvbkpTWChlbnRpdHksIHByb3BzKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2dldEluZGl2aWR1YWxEaWZmZXJlbnRGcm9tU2VjdGlvbkpTWChlbnRpdHksIHByb3BzKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgeyhpc1Byb3BlcnR5KGVudGl0eSkgfHwgaXNDbGFzcyhlbnRpdHkpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtnZXREaXNqb2ludFdpdGhTZWN0aW9uSlNYKGVudGl0eSwgcHJvcHMpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB7aXNQcm9wZXJ0eShlbnRpdHkpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2dldFByb3BlcnR5SW52ZXJzZU9mU2VjdGlvbkpTWChlbnRpdHksIHByb3BzKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2dldFByb3BlcnR5Q2hhaW5TZWN0aW9uSlNYKGVudGl0eSwgcHJvcHMpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB7KGlzUHJvcGVydHkoZW50aXR5KSB8fCBpc0NsYXNzKGVudGl0eSkpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2dldEVudGl0eUVxdWl2YWxlbnRUb1NlY3Rpb25KU1goZW50aXR5LCBwcm9wcyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtnZXRTdWJFbnRpdHlPZlNlY3Rpb25KU1goZW50aXR5LCBwcm9wcyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtnZXRFbnRpdHlSZWxhdGVkRnJvbVNlY3Rpb25KU1goZW50aXR5LCBwcm9wcyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtpc0NsYXNzKGVudGl0eSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Z2V0Q2xhc3NJbnN0YW5jZXNTZWN0aW9uSlNYKGVudGl0eSwgaW5zdGFuY2VzSnNvbiwgcHJvcHMpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L0V1aVRleHQ+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9FdWlDYXJkPlxuICAgICAgICA8Lz5cbiAgICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVFbnRpdHlSZWxhdGlvbnMocHJvcHM6IEVudGl0eVJlbGF0aW9uc1dpZGdldFByb3BzLCBjb250YWluZXI6IEVsZW1lbnQsIGNhbGxiYWNrPzogKCk9PnZvaWQpIHtcbiAgICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZEVudGl0aXlSZWxhdGlvbnNXaWRnZXQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZEVudGl0aXlSZWxhdGlvbnNXaWRnZXQocHJvcHM6IEVudGl0eVJlbGF0aW9uc1dpZGdldFByb3BzKSB7XG4gICAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTtcbiAgICByZXR1cm4gKFxuICAgICAgICA8RXVpUHJvdmlkZXIgY29sb3JNb2RlPVwibGlnaHRcIj5cbiAgICAgICAgICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgICAgICAgICAgIDxFbnRpdHlSZWxhdGlvbnNXaWRnZXRcbiAgICAgICAgICAgICAgICAgICAgYXBpPXtwcm9wcy5hcGl9XG4gICAgICAgICAgICAgICAgICAgIGlyaT17cHJvcHMuaXJpfVxuICAgICAgICAgICAgICAgICAgICBvbnRvbG9neUlkPXtwcm9wcy5vbnRvbG9neUlkfVxuICAgICAgICAgICAgICAgICAgICBoYXNUaXRsZT17cHJvcHMuaGFzVGl0bGV9XG4gICAgICAgICAgICAgICAgICAgIGVudGl0eVR5cGU9e3Byb3BzLmVudGl0eVR5cGV9XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcj17cHJvcHMucGFyYW1ldGVyfVxuICAgICAgICAgICAgICAgICAgICBzaG93QmFkZ2VzPXtwcm9wcy5zaG93QmFkZ2VzfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgICAgIDwvRXVpUHJvdmlkZXI+XG4gICAgKVxufVxuXG5leHBvcnQgeyBjcmVhdGVFbnRpdHlSZWxhdGlvbnMsIEVudGl0eVJlbGF0aW9uc1dpZGdldCB9OyIsICJpbXBvcnQgeyBjcmVhdGVBdXRvY29tcGxldGUgfSBmcm9tIFwiLi9BdXRvY29tcGxldGVXaWRnZXQvQXV0b2NvbXBsZXRlV2lkZ2V0XCI7XG5pbXBvcnQgeyBjcmVhdGVEYXRhQ29udGVudCB9IGZyb20gXCIuL0RhdGFDb250ZW50V2lkZ2V0L0RhdGFDb250ZW50V2lkZ2V0XCJcbmltcG9ydCB7IGNyZWF0ZUVudGl0eUluZm8gfSBmcm9tIFwiLi9FbnRpdHlJbmZvV2lkZ2V0L0VudGl0eUluZm9XaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZUpzb25BcGl9IGZyb20gXCIuL0pzb25BcGlXaWRnZXQvSnNvbkFwaVdpZGdldFwiO1xuaW1wb3J0IHsgY3JlYXRlQnJlYWRjcnVtYiB9IGZyb20gXCIuL01ldGFkYXRhV2lkZ2V0L0JyZWFkY3J1bWJXaWRnZXQvQnJlYWRjcnVtYldpZGdldFwiO1xuaW1wb3J0IHsgY3JlYXRlRGVzY3JpcHRpb24gfSBmcm9tIFwiLi9NZXRhZGF0YVdpZGdldC9EZXNjcmlwdGlvbldpZGdldC9EZXNjcmlwdGlvbldpZGdldFwiXG5pbXBvcnQgeyBjcmVhdGVJcmkgfSBmcm9tIFwiLi9NZXRhZGF0YVdpZGdldC9JcmlXaWRnZXQvSXJpV2lkZ2V0XCI7XG5pbXBvcnQgeyBjcmVhdGVUYWIgfSBmcm9tIFwiLi9NZXRhZGF0YVdpZGdldC9UYWJXaWRnZXQvVGFiV2lkZ2V0XCI7XG5pbXBvcnQgeyBjcmVhdGVBbHRlcm5hdGl2ZU5hbWVUYWIgfSBmcm9tIFwiLi9NZXRhZGF0YVdpZGdldC9UYWJXaWRnZXQvQWx0ZXJuYXRpdmVOYW1lVGFiV2lkZ2V0L0FsdGVybmF0aXZlTmFtZVRhYldpZGdldFwiO1xuaW1wb3J0IHsgY3JlYXRlQ3Jvc3NSZWZUYWIgfSBmcm9tIFwiLi9NZXRhZGF0YVdpZGdldC9UYWJXaWRnZXQvQ3Jvc3NSZWZXaWRnZXQvQ3Jvc3NSZWZUYWJXaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZUhpZXJhcmNoeSB9IGZyb20gXCIuL01ldGFkYXRhV2lkZ2V0L1RhYldpZGdldC9IaWVyYXJjaHlXaWRnZXQvSGllcmFyY2h5V2lkZ2V0XCI7XG5pbXBvcnQgeyBjcmVhdGVIaWVyYXJjaHlEZXByZWNhdGVkIH0gZnJvbSBcIi4vTWV0YWRhdGFXaWRnZXQvVGFiV2lkZ2V0L0hpZXJhcmNoeVdpZGdldERlcHJlY2F0ZWQvSGllcmFyY2h5V2lkZ2V0RGVwcmVjYXRlZFwiO1xuaW1wb3J0IHsgY3JlYXRlVGl0bGV9IGZyb20gXCIuL01ldGFkYXRhV2lkZ2V0L1RpdGxlV2lkZ2V0L1RpdGxlV2lkZ2V0XCI7XG5pbXBvcnQgeyBjcmVhdGVNZXRhZGF0YSB9IGZyb20gXCIuL01ldGFkYXRhV2lkZ2V0L01ldGFkYXRhV2lkZ2V0XCI7XG5pbXBvcnQgeyBjcmVhdGVPbnRvbG9neUluZm8gfSBmcm9tIFwiLi9PbnRvbG9neUluZm9XaWRnZXQvT250b2xvZ3lJbmZvV2lkZ2V0XCI7XG5pbXBvcnQgeyBjcmVhdGVSZXNvdXJjZXMgfSBmcm9tIFwiLi9SZXNvdXJjZXNXaWRnZXQvUmVzb3VyY2VzV2lkZ2V0XCI7XG5pbXBvcnQgeyBjcmVhdGVTZWFyY2hCYXIgfSBmcm9tIFwiLi9TZWFyY2hCYXJXaWRnZXQvU2VhcmNoQmFyV2lkZ2V0XCI7XG5pbXBvcnQgeyBjcmVhdGVTZWFyY2hSZXN1bHRzTGlzdCB9IGZyb20gXCIuL1NlYXJjaFJlc3VsdHNMaXN0V2lkZ2V0L1NlYXJjaFJlc3VsdHNMaXN0V2lkZ2V0XCI7XG5pbXBvcnQge2NyZWF0ZUVudGl0eVJlbGF0aW9uc30gZnJvbSBcIi4vRW50aXR5UmVsYXRpb25zV2lkZ2V0L0VudGl0eVJlbGF0aW9uc1dpZGdldFwiO1xuXG4od2luZG93IGFzIGFueSlbJ1NlbUxvb2tQV2lkZ2V0cyddID0ge1xuICAgIGNyZWF0ZUF1dG9jb21wbGV0ZSxcbiAgICBjcmVhdGVEYXRhQ29udGVudCxcbiAgICBjcmVhdGVFbnRpdHlJbmZvLFxuICAgIGNyZWF0ZUVudGl0eVJlbGF0aW9ucyxcbiAgICBjcmVhdGVKc29uQXBpLFxuICAgIGNyZWF0ZUJyZWFkY3J1bWIsXG4gICAgY3JlYXRlRGVzY3JpcHRpb24sXG4gICAgY3JlYXRlSXJpLFxuICAgIGNyZWF0ZVRhYixcbiAgICBjcmVhdGVBbHRlcm5hdGl2ZU5hbWVUYWIsXG4gICAgY3JlYXRlQ3Jvc3NSZWZUYWIsXG4gICAgY3JlYXRlSGllcmFyY2h5LFxuICAgIGNyZWF0ZUhpZXJhcmNoeURlcHJlY2F0ZWQsXG4gICAgY3JlYXRlVGl0bGUsXG4gICAgY3JlYXRlT250b2xvZ3lJbmZvLFxuICAgIGNyZWF0ZVJlc291cmNlcyxcbiAgICBjcmVhdGVTZWFyY2hCYXIsXG4gICAgY3JlYXRlU2VhcmNoUmVzdWx0c0xpc3QsXG4gICAgY3JlYXRlTWV0YWRhdGFcbn1cblxuZXhwb3J0IHtcbiAgICBjcmVhdGVBdXRvY29tcGxldGUsXG4gICAgY3JlYXRlRGF0YUNvbnRlbnQsXG4gICAgY3JlYXRlRW50aXR5SW5mbyxcbiAgICBjcmVhdGVFbnRpdHlSZWxhdGlvbnMsXG4gICAgY3JlYXRlSnNvbkFwaSxcbiAgICBjcmVhdGVCcmVhZGNydW1iLFxuICAgIGNyZWF0ZURlc2NyaXB0aW9uLFxuICAgIGNyZWF0ZUlyaSxcbiAgICBjcmVhdGVUYWIsXG4gICAgY3JlYXRlQWx0ZXJuYXRpdmVOYW1lVGFiLFxuICAgIGNyZWF0ZUNyb3NzUmVmVGFiLFxuICAgIGNyZWF0ZUhpZXJhcmNoeSxcbiAgICBjcmVhdGVIaWVyYXJjaHlEZXByZWNhdGVkLFxuICAgIGNyZWF0ZVRpdGxlLFxuICAgIGNyZWF0ZU9udG9sb2d5SW5mbyxcbiAgICBjcmVhdGVSZXNvdXJjZXMsXG4gICAgY3JlYXRlU2VhcmNoQmFyLFxuICAgIGNyZWF0ZVNlYXJjaFJlc3VsdHNMaXN0LFxuICAgIGNyZWF0ZU1ldGFkYXRhXG59XG5cbmV4cG9ydCAqIGZyb20gXCIuL01ldGFkYXRhV2lkZ2V0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9BdXRvY29tcGxldGVXaWRnZXRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL0pzb25BcGlXaWRnZXRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL0RhdGFDb250ZW50V2lkZ2V0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9SZXNvdXJjZXNXaWRnZXRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL09udG9sb2d5SW5mb1dpZGdldFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vU2VhcmNoQmFyV2lkZ2V0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9TZWFyY2hSZXN1bHRzTGlzdFdpZGdldFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vRW50aXR5SW5mb1dpZGdldFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vRW50aXR5UmVsYXRpb25zV2lkZ2V0XCIiXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBUUEsVUFBSSx3QkFBd0IsT0FBTztBQUNuQyxVQUFJQSxrQkFBaUIsT0FBTyxVQUFVO0FBQ3RDLFVBQUksbUJBQW1CLE9BQU8sVUFBVTtBQUV4QyxlQUFTLFNBQVMsS0FBSztBQUN0QixZQUFJLFFBQVEsUUFBUSxRQUFRLFFBQVc7QUFDdEMsZ0JBQU0sSUFBSSxVQUFVLHVEQUF1RDtBQUFBLFFBQzVFO0FBRUEsZUFBTyxPQUFPLEdBQUc7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VixhQUFhO0FBQUEsWUFDYixjQUFjO0FBQUEsWUFDZCxLQUFLO0FBQUEsWUFDTCxXQUFXO0FBQUEsWUFDWCxPQUFPO0FBQUEsWUFDUCxZQUFZO0FBQUEsWUFDWixRQUFRO0FBQUEsWUFDUixLQUFLO0FBQUEsWUFDTCxXQUFXO0FBQUEsWUFDWCxVQUFVO0FBQUEsWUFDVixPQUFPO0FBQUEsWUFDUCxNQUFNO0FBQUEsWUFDTixVQUFVO0FBQUEsWUFDVixPQUFPO0FBQUEsWUFDUCxZQUFZO0FBQUEsWUFDWixNQUFNO0FBQUEsWUFDTixTQUFTO0FBQUEsWUFDVCxTQUFTO0FBQUEsWUFDVCxhQUFhO0FBQUEsWUFDYixhQUFhO0FBQUEsWUFDYixRQUFRO0FBQUEsWUFDUixTQUFTO0FBQUEsWUFDVCxTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsWUFDWixVQUFVO0FBQUEsWUFDVixnQkFBZ0I7QUFBQSxZQUNoQixLQUFLO0FBQUEsWUFDTCxVQUFVO0FBQUEsWUFDVixVQUFVO0FBQUEsWUFDVixNQUFNO0FBQUEsWUFDTixNQUFNO0FBQUEsWUFDTixTQUFTO0FBQUEsWUFDVCxTQUFTO0FBQUEsWUFDVCxPQUFPO0FBQUEsWUFDUCxRQUFRO0FBQUEsWUFDUixXQUFXO0FBQUEsWUFDWCxVQUFVO0FBQUEsWUFDVixVQUFVO0FBQUEsWUFDVixPQUFPO0FBQUEsWUFDUCxNQUFNO0FBQUEsWUFDTixPQUFPO0FBQUEsWUFDUCxNQUFNO0FBQUEsWUFDTixZQUFZO0FBQUEsWUFDWixLQUFLO0FBQUEsWUFDTCxRQUFRO0FBQUEsWUFDUixTQUFTO0FBQUEsWUFDVCxRQUFRO0FBQUEsWUFDUixPQUFPO0FBQUEsWUFDUCxNQUFNO0FBQUEsWUFDTixPQUFPO0FBQUEsWUFDUCxTQUFTO0FBQUEsWUFDVCxVQUFVO0FBQUEsWUFDVixRQUFRO0FBQUEsWUFDUixPQUFPO0FBQUEsWUFDUCxNQUFNO0FBQUEsWUFDTixRQUFRO0FBQUEsWUFDUixPQUFPO0FBQUEsWUFDUCxPQUFPO0FBQUEsWUFDUCxPQUFPO0FBQUEsWUFDUCxNQUFNO0FBQUE7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QUFZO0FBQUEsVUFDWixZQUFZO0FBQUEsVUFDWixTQUFTO0FBQUEsVUFDVCxZQUFZO0FBQUEsVUFDWixjQUFjO0FBQUEsVUFDZCxlQUFlO0FBQUEsVUFDZixlQUFlO0FBQUEsVUFDZixlQUFlO0FBQUEsVUFDZixlQUFlO0FBQUEsVUFDZixZQUFZO0FBQUEsVUFDWixVQUFVO0FBQUEsVUFDVixhQUFhO0FBQUEsVUFDYixTQUFTO0FBQUEsVUFDVCxTQUFTO0FBQUEsVUFDVCxZQUFZO0FBQUEsVUFDWixXQUFXO0FBQUEsVUFDWCxhQUFhO0FBQUEsVUFDYixhQUFhO0FBQUEsVUFDYixTQUFTO0FBQUEsVUFDVCxXQUFXO0FBQUEsVUFDWCxZQUFZO0FBQUEsVUFDWixNQUFNO0FBQUEsVUFDTixXQUFXO0FBQUEsVUFDWCxNQUFNO0FBQUEsVUFDTixPQUFPO0FBQUEsVUFDUCxhQUFhO0FBQUEsVUFDYixNQUFNO0FBQUEsVUFDTixVQUFVO0FBQUEsVUFDVixTQUFTO0FBQUEsVUFDVCxXQUFXO0FBQUEsVUFDWCxRQUFRO0FBQUEsVUFDUixPQUFPO0FBQUEsVUFDUCxPQUFPO0FBQUEsVUFDUCxZQUFZO0FBQUEsVUFDWixVQUFVO0FBQUEsVUFDVixlQUFlO0FBQUEsVUFDZixXQUFXO0FBQUEsVUFDWCxjQUFjO0FBQUEsVUFDZCxXQUFXO0FBQUEsVUFDWCxZQUFZO0FBQUEsVUFDWixXQUFXO0FBQUEsVUFDWCxnQkFBZ0I7QUFBQSxVQUNoQixzQkFBc0I7QUFBQSxVQUN0QixXQUFXO0FBQUEsVUFDWCxZQUFZO0FBQUEsVUFDWixXQUFXO0FBQUEsVUFDWCxXQUFXO0FBQUEsVUFDWCxhQUFhO0FBQUEsVUFDYixlQUFlO0FBQUEsVUFDZixjQUFjO0FBQUEsVUFDZCxnQkFBZ0I7QUFBQSxVQUNoQixnQkFBZ0I7QUFBQSxVQUNoQixnQkFBZ0I7QUFBQSxVQUNoQixhQUFhO0FBQUEsVUFDYixNQUFNO0FBQUEsVUFDTixXQUFXO0FBQUEsVUFDWCxPQUFPO0FBQUEsVUFDUCxTQUFTO0FBQUEsVUFDVCxRQUFRO0FBQUEsVUFDUixTQUFTO0FBQUEsVUFDVCxTQUFTO0FBQUEsVUFDVCxrQkFBa0I7QUFBQSxVQUNsQixZQUFZO0FBQUEsVUFDWixjQUFjO0FBQUEsVUFDZCxjQUFjO0FBQUEsVUFDZCxnQkFBZ0I7QUFBQSxVQUNoQixpQkFBaUI7QUFBQSxVQUNqQixtQkFBbUI7QUFBQSxVQUNuQixpQkFBaUI7QUFBQSxVQUNqQixpQkFBaUI7QUFBQSxVQUNqQixjQUFjO0FBQUEsVUFDZCxXQUFXO0FBQUEsVUFDWCxXQUFXO0FBQUEsVUFDWCxVQUFVO0FBQUEsVUFDVixhQUFhO0FBQUEsVUFDYixNQUFNO0FBQUEsVUFDTixTQUFTO0FBQUEsVUFDVCxPQUFPO0FBQUEsVUFDUCxXQUFXO0FBQUEsVUFDWCxRQUFRO0FBQUEsVUFDUixXQUFXO0FBQUEsVUFDWCxRQUFRO0FBQUEsVUFDUixlQUFlO0FBQUEsVUFDZixXQUFXO0FBQUEsVUFDWCxlQUFlO0FBQUEsVUFDZixlQUFlO0FBQUEsVUFDZixZQUFZO0FBQUEsVUFDWixXQUFXO0FBQUEsVUFDWCxNQUFNO0FBQUEsVUFDTixNQUFNO0FBQUEsVUFDTixNQUFNO0FBQUEsVUFDTixZQUFZO0FBQUEsVUFDWixRQUFRO0FBQUEsVUFDUixTQUFTO0FBQUEsVUFDVCxTQUFTO0FBQUEsVUFDVCxlQUFlO0FBQUEsVUFDZixLQUFLO0FBQUEsVUFDTCxXQUFXO0FBQUEsVUFDWCxXQUFXO0FBQUEsVUFDWCxhQUFhO0FBQUEsVUFDYixRQUFRO0FBQUEsVUFDUixZQUFZO0FBQUEsVUFDWixVQUFVO0FBQUEsVUFDVixVQUFVO0FBQUEsVUFDVixRQUFRO0FBQUEsVUFDUixRQUFRO0FBQUEsVUFDUixTQUFTO0FBQUEsVUFDVCxXQUFXO0FBQUEsVUFDWCxXQUFXO0FBQUEsVUFDWCxXQUFXO0FBQUEsVUFDWCxNQUFNO0FBQUEsVUFDTixhQUFhO0FBQUEsVUFDYixXQUFXO0FBQUEsVUFDWCxLQUFLO0FBQUEsVUFDTCxNQUFNO0FBQUEsVUFDTixTQUFTO0FBQUEsVUFDVCxRQUFRO0FBQUEsVUFDUixXQUFXO0FBQUEsVUFD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QVcsV0FBVyxTQUFTO0FBQUEsVUFDeEcsTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsVUFDeEcsU0FBUyxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsVUFDM0csTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsVUFDeEcsUUFBUSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsVUFDMUcsTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsVUFDeEcsTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsVUFDeEcsTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsVUFDeEcsUUFBUSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsVUFDMUcsUUFBUSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsVUFDMUcsU0FBUyxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsVUFDM0csTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsVUFDeEcsT0FBTyxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsVUFDekcsUUFBUSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsVUFDMUcsTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsVUFDeEcsT0FBTyxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsVUFDekcsUUFBUSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsVUFDMUcsU0FBUyxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUE7QUFBQSxVQUkzRyxVQUFVLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsVUFDbEksUUFBUSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsU0FBUztBQUFBLFVBQ2hJLE1BQU0sQ0FBQyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxVQUM5SCxNQUFNLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsVUFDOUgsTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsU0FBUztBQUFBLFVBQzlILFFBQVEsQ0FBQyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxVQUNoSSxNQUFNLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsVUFDOUgsTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsU0FBUztBQUFBLFVBQzlILE1BQU0sQ0FBQyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxX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QUEsTUFDSCxNQUFNO0FBQUEsSUFDUixDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsR0FBRztBQUFBLE1BQ0gsTUFBTTtBQUFBLElBQ1IsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLEdBQUc7QUFBQSxNQUNILE1BQU07QUFBQSxJQUNSLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixHQUFHO0FBQUEsTUFDSCxNQUFNO0FBQUEsSUFDUixDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsR0FBRztBQUFBLE1BQ0gsTUFBTTtBQUFBLElBQ1IsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLEdBQUc7QUFBQSxNQUNILE1BQU07QUFBQSxJQUNSLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixHQUFHO0FBQUEsTUFDSCxNQUFNO0FBQUEsSUFDUixDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsR0FBRztBQUFBLE1BQ0gsTUFBTTtBQUFBLElBQ1IsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLEdBQUc7QUFBQSxNQUNILE1BQU07QUFBQSxJQUNSLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixHQUFHO0FBQUEsTUFDSCxNQUFNO0FBQUEsSUFDUixDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsR0FBRztBQUFBLE1BQ0gsTUFBTTtBQUFBLElBQ1IsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLEdBQUc7QUFBQSxNQUNILE1BQU07QUFBQSxJQUNSLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixHQUFHO0FBQUEsTUFDSCxNQUFNO0FBQUEsSUFDUixDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsR0FBRztBQUFBLE1BQ0gsTUFBTTtBQUFBLElBQ1IsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLEdBQUc7QUFBQSxNQUNILE1BQU07QUFBQSxJQUNSLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixHQUFHO0FBQUEsTUFDSCxNQUFNO0FBQUEsSUFDUixDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsR0FBRztBQUFBLE1BQ0gsTUFBTTtBQUFBLElBQ1IsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLEdBQUc7QUFBQSxNQUNILE1BQU07QUFBQSxJQUNSLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixHQUFHO0FBQUEsTUFDSCxNQUFNO0FBQUEsSUFDUixDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsR0FBRztBQUFBLE1BQ0gsTUFBTTtBQUFBLElBQ1IsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLEdBQUc7QUFBQSxNQUNILE1BQU07QUFBQSxJQUNSLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixHQUFHO0FBQUEsTUFDSCxNQUFNO0FBQUEsSUFDUixDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsR0FBRztBQUFBLE1BQ0gsTUFBTTtBQUFBLElBQ1IsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLEdBQUc7QUFBQSxNQUNILE1BQU07QUFBQSxJQUNSLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixHQUFHO0FBQUEsTUFDSCxNQUFNO0FBQUEsSUFDUixDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsR0FBRztBQUFBLE1BQ0gsTUFBTTtBQUFBLElBQ1IsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLEdBQUc7QUFBQSxNQUNILE1BQU07QUFBQSxJQUNSLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixHQUFHO0FBQUEsTUFDSCxNQUFNO0FBQUEsSUFDUixDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsR0FBRztBQUFBLE1BQ0gsTUFBTTtBQUFBLElBQ1IsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLEdBQUc7QUFBQSxNQUNILE1BQU07QUFBQSxJQUNSLENBQUMsQ0FB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WUFBQUEsRUFBQUEsQ0FBQUEsSUFBQUE7QUFBQUEsZ0JBQUFBLEVBQUFBLENBQUFBO0FBQUFBLGVBQUFBLEVBQUFBLENBQUFBO01BQUFBLEdBQUFBLE1BQUFBLENBQUFBLEdBQUFBLEtBQUFBLENBQUFBLEVBQUFBLEdBQUFBLEdBQUFBLEdBQUFBLEdBQUFBO0FBQUFBLGFBQUFBLElBQUFBLEVBQUFBLE1BQUFBLEVBQUFBLENBQUFBLEdBQUFBLE9BQUFBLEVBQUFBLENBQUFBLEdBQUFBLFFBQUFBLEVBQUFBLENBQUFBLEVBQUFBLEdBQUFBLE9BQUFBLFVBQUFBLGVBQUFBLEVBQUFBLE9BQUFBLFFBQUFBLElBQUFBLFdBQUFBO0FBQUFBLGVBQUFBO01BQUFBLElBQUFBO0FBQUFBLGVBQUFBLEVBQUFBLEdBQUFBO0FBQUFBLGVBQUFBLFNBQUFBLEdBQUFBO0FBQUFBLGlCQUFBQSxFQUFBQSxDQUFBQSxHQUFBQSxDQUFBQSxDQUFBQTtRQUFBQTtNQUFBQTtBQUFBQSxlQUFBQSxFQUFBQSxHQUFBQTtBQUFBQSxZQUFBQTtBQUFBQSxnQkFBQUEsSUFBQUEsVUFBQUEsaUNBQUFBO0FBQUFBLGVBQUFBO0FBQUFBLGNBQUFBO0FBQUFBLGdCQUFBQSxJQUFBQSxHQUFBQSxNQUFBQSxJQUFBQSxFQUFBQSxDQUFBQSxJQUFBQSxJQUFBQSxFQUFBQSxTQUFBQSxFQUFBQSxDQUFBQSxJQUFBQSxFQUFBQSxXQUFBQSxJQUFBQSxFQUFBQSxXQUFBQSxFQUFBQSxLQUFBQSxDQUFBQSxHQUFBQSxLQUFBQSxFQUFBQSxTQUFBQSxFQUFBQSxJQUFBQSxFQUFBQSxLQUFBQSxHQUFBQSxFQUFBQSxDQUFBQSxDQUFBQSxHQUFBQTtBQUFBQSxxQkFBQUE7QUFBQUEsb0JBQUFBLElBQUFBLEdBQUFBLE1BQUFBLElBQUFBLENBQUFBLEVBQUFBLENBQUFBLElBQUFBLEdBQUFBLEVBQUFBLEtBQUFBLElBQUFBLEVBQUFBLENBQUFBLEdBQUFBO2NBQUFBLEtBQUFBO2NBQUFBLEtBQUFBO0FBQUFBLG9CQUFBQTtBQUFBQTtjQUFBQSxLQUFBQTtBQUFBQSx1QkFBQUEsRUFBQUEsU0FBQUEsRUFBQUEsT0FBQUEsRUFBQUEsQ0FBQUEsR0FBQUEsTUFBQUEsTUFBQUE7Y0FBQUEsS0FBQUE7QUFBQUEsa0JBQUFBLFNBQUFBLElBQUFBLEVBQUFBLENBQUFBLEdBQUFBLElBQUFBLENBQUFBLENBQUFBO0FBQUFBO2NBQUFBLEtBQUFBO0FBQUFBLG9CQUFBQSxFQUFBQSxJQUFBQSxJQUFBQSxHQUFBQSxFQUFBQSxLQUFBQSxJQUFBQTtBQUFBQTtjQUFBQTtBQUFBQSxvQkFBQUEsSUFBQUEsRUFBQUEsTUFBQUEsRUFBQUEsSUFBQUEsRUFBQUEsU0FBQUEsS0FBQUEsRUFBQUEsRUFBQUEsU0FBQUEsQ0FBQUEsT0FBQUEsRUFBQUEsQ0FBQUEsTUFBQUEsS0FBQUEsRUFBQUEsQ0FBQUEsTUFBQUEsSUFBQUE7QUFBQUEsc0JBQUFBO0FBQUFBO2dCQUFBQTtBQUFBQSxvQkFBQUEsRUFBQUEsQ0FBQUEsTUFBQUEsTUFBQUEsQ0FBQUEsS0FBQUEsRUFBQUEsQ0FBQUEsSUFBQUEsRUFBQUEsQ0FBQUEsS0FBQUEsRUFBQUEsQ0FBQUEsSUFBQUEsRUFBQUEsQ0FBQUEsSUFBQUE7QUFBQUEsb0JBQUFBLFFBQUFBLEVBQUFBLENBQUFBO0FBQUFBO2dCQUFBQTtBQUFBQSxvQkFBQUEsRUFBQUEsQ0FBQUEsTUFBQUEsS0FBQUEsRUFBQUEsUUFBQUEsRUFBQUEsQ0FBQUEsR0FBQUE7QUFBQUEsb0JBQUFBLFFBQUFBLEVBQUFBLENBQUFBLEdBQUFBLElBQUFBO0FBQUFBO2dCQUFBQTtBQUFBQSxvQkFBQUEsS0FBQUEsRUFBQUEsUUFBQUEsRUFBQUEsQ0FBQUEsR0FBQUE7QUFBQUEsb0JBQUFBLFFBQUFBLEVBQUFBLENBQUFBLEdBQUFBLEVBQUFBLElBQUFBLEtBQUFBLENBQUFBO0FBQUFBO2dCQUFBQTtBQUFBQSxrQkFBQUEsQ0FBQUEsS0FBQUEsRUFBQUEsSUFBQUEsSUFBQUEsR0FBQUEsRUFBQUEsS0FBQUEsSUFBQUE7QUFBQUE7WUFBQUE7QUFBQUEsZ0JBQUFBLEVBQUFBLEtBQUFBLEdBQUFBLENBQUFBO1VBQUFBLFNBQUFBLEdBQUFBO0FBQUFBLGdCQUFBQSxDQUFBQSxHQUFBQSxDQUFBQSxHQUFBQSxJQUFBQTtVQUFBQSxVQUFBQTtBQUFBQSxnQkFBQUEsSUFBQUE7VUFBQUE7QUFBQUEsWUFBQUEsRUFBQUEsQ0FBQUEsSUFBQUE7QUFBQUEsZ0JBQUFBLEVBQUFBLENBQUFBO0FBQUFBLGVBQUFBLEVBQUFBLE9BQUFBLEVBQUFBLENBQUFBLElBQUFBLEVBQUFBLENBQUFBLElBQUFBLFFBQUFBLE1BQUFBLEtBQUFBO01BQUFBO0lBQUFBLEdBQUFBLEtBQUFBLFNBQUFBLEdBQUFBLEdBQUFBO0FBQUFBLGVBQUFBLElBQUFBLEdBQUFBLElBQUFBLEVBQUFBLFFBQUFBLElBQUFBLEVBQUFBLFFBQUFBLElBQUFBLEdBQUFBLEtBQUFBO0FBQUFBLFVBQUFBLENBQUFBLElBQUFBLEVBQUFBLENBQUFBO0FBQUFBLGFBQUFBO0lBQUFBLEdBQUFBLEtBQUFBLE9BQUFBLGdCQUFBQSxLQUFBQSxPQUFBQSxrQkFBQUEsS0FBQUEsT0FBQUEsMkJBQUFBLEtBQUFBLE9BQUFBLHVCQUFBQSxLQUFBQSxPQUFBQSxVQUFBQSxnQkFBQUEsS0FBQUEsT0FBQUEsVUFBQUEsc0JBQUFBLEtBQUFBLFNBQUFBLEdBQUFBLEdBQUFBLEdBQUFBO0FBQUFBLGFBQUFBLEtBQUFBLElBQUFBLEdBQUFBLEdBQUFBLEdBQUFBLEVBQUFBLFlBQUFBLE1BQUFBLGNBQUFBLE1BQUFBLFVBQUFBLE1BQUFBLE9BQUFBLEVBQUFBLENBQUFBLElBQUFBLEVBQUFBLENBQUFBLElBQUFBO0lBQUFBLEdBQUFBLEtBQUFBLFNBQUFBLEdBQUFBLEdBQUFBO0FBQUFBLGVBQUFBLEtBQUFBLE1BQUFBLElBQUFBLENBQUFBO0FBQUFBLFdBQUFBLEtBQUFBLEdBQUFBLENBQUFBLEtBQUFBLEdBQUFBLEdBQUFBLEdBQUFBLEVBQUFBLENBQUFBLENBQUFBO0FBQUFBLFVBQUFBO0FBQUFBLGlCQUFBQSxJQUFBQSxHQUFBQSxJQUFBQSxH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SSxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBR0EsR0FBYSxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHQSxHQUFhLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUdBLEdBQWEsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBR0EsR0FBYSxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsSUFBSSxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHQSxHQUFhLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxJQUFJLElBQUksR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUdBLEdBQWEsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUksSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBR0EsR0FBYSxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsSUFBSSxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHQSxHQUFhLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxJQUFJLElBQUksR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUdBLEdBQWEsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUksSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBR0EsR0FBYSxHQUFHLEdBQUcsSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHQSxHQUFhLEdBQUcsR0FBRyxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUdBLEdBQWEsR0FBRyxHQUFHLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBR0Es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O0FBRUEsV0FBUyw4QkFBOEIsT0FBbUM7QUFDdEUsVUFBTSxjQUFjLElBQUksWUFBWTtBQUNwQyxXQUNJLGdDQUFBSCxRQUFBLGNBQUMsZUFBWSxXQUFVLFdBQ25CLGdDQUFBQSxRQUFBLGNBQUMsdUJBQW9CLFFBQVEsZUFDekIsZ0NBQUFBLFFBQUE7QUFBQSxNQUFDO0FBQUE7QUFBQSxRQUNHLEtBQUssTUFBTTtBQUFBLFFBQ1gsS0FBSyxNQUFNO0FBQUEsUUFDWCxZQUFZLE1BQU07QUFBQSxRQUNsQixVQUFVLE1BQU07QUFBQSxRQUNoQixZQUFZLE1BQU07QUFBQSxRQUNsQixXQUFXLE1BQU07QUFBQSxRQUNqQixZQUFZLE1BQU07QUFBQTtBQUFBLElBQ3RCLENBQ0osQ0FDSjtBQUFBLEVBRVI7OztBQ3JhQSxFQUFDLE9BQWUsaUJBQWlCLElBQUk7QUFBQSxJQUNqQztBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0o7IiwKICAibmFtZXMiOiBbImhhc093blByb3BlcnR5IiwgImZyb20iLCAiUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSIsICJDb21wb25lbnQiLCAiUHVyZUNvbXBvbmVudCIsICJjcmVhdGVSZWYiLCAieCIsICJoYXNPd25Qcm9wZXJ0eSIsICJSZWFjdEVsZW1lbnQiLCAic2VsZiIsICJjcmVhdGVFbGVtZW50IiwgImNsb25lRWxlbWVudCIsICJpc1ZhbGlkRWxlbWVudCIsICJvYmplY3QiLCAibWF0Y2giLCAiZnVuYyIsICJ0b0FycmF5IiwgImNyZWF0ZUNvbnRleHQiLCAiZXJyb3IiLCAiZm9yd2FyZFJlZiIsICJyZW5kZXIiLCAibWVtbyIsICJ1c2VDb250ZXh0IiwgInVzZVN0YXRlIiwgInJlZHVjZXIiLCAidXNlUmVmIiwgInVzZUVmZmVjdCIsICJ1c2VMYXlvdXRFZmZlY3QiLCAidXNlQ2FsbGJhY2siLCAidXNlTWVtbyIsICJwcmVmaXgiLCAicHJvdG90eXBlIiwgIm5vZGUiLCAia2V5cyIsICJDaGlsZHJlbiIsICJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCAiY2FuY2VsQW5pbWF0aW9uRnJhbWUiLCAibm9kZSIsICJwZWVrIiwgImxlbmd0aCIsICJiIiwgImluaXRpYWxUaW1lIiwgIlJlYWN0IiwgIlJlYWN0RGVidWdDdXJyZW50RnJhbWUiLCAiRnJhZ21lbnQiLCAiaGFzT3duUHJvcGVydHkiLCAicHJlZml4IiwgInNhbml0aXplVVJMIiwgIl9yZWYiLCAiY2FwaXRhbGl6ZSIsICJ0b2tlbiIsICJub2RlIiwgIngiLCAibWF0Y2giLCAiQ29tcG9uZW50IiwgInByb3RvdHlwZSIsICJ3b3JrSW5Qcm9ncmVzcyIsICJ0b1N0cmluZyIsICJnZXQiLCAic2V0IiwgImdldEFjdGl2ZUVsZW1lbnQiLCAiaXNIeWRyYXRpbmciLCAidmFsaWRhdGVQcm9wcyIsICJpc0FycmF5IiwgIm9wdGlvbnMiLCAiZnVuYyIsICJpc0N1c3RvbVByb3BlcnR5IiwgInN0cmluZyIsICJjaGFyYWN0ZXIiLCAic3R5bGVzIiwgImRlbGltaXRlciIsICJzdHlsZSIsICJyZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzIiwgInBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXMiLCAiYiIsICJlcnJvciIsICJjYWxsQ2FsbGJhY2siLCAiY3VycmVudCIsICJyb290IiwgInF1ZXVlZEV2ZW50IiwgInByZWZpeGVzIiwgImluZGV4IiwgImlzRXZlbnRTdXBwb3J0ZWQiLCAiZnJvbSIsICJsZW5ndGgiLCAibmV4dCIsICJub29wIiwgImNyZWF0ZUVsZW1lbnQiLCAiY3JlYXRlSW5zdGFuY2UiLCAiY2FuY2VsVGltZW91dCIsICJoYXMiLCAiY3Vyc29yIiwgIm5vdyIsICJfcXVldWUiLCAicmVuZGVyTGFuZXMiLCAidXBkYXRlRnJhZ21lbnQiLCAiY2hpbGQiLCAicmVjb25jaWxlQ2hpbGRGaWJlcnMiLCAiaXNPYmplY3QiLCAicmVkdWNlciIsICJyZW5kZXIiLCAic3VidHJlZVJlbmRlckxhbmVzIiwgImlzSGlkZGVuIiwgImVycm9yJDEiLCAiY29tbWl0VGltZSIsICJoeWRyYXRlIiwgImNyZWF0ZVBvcnRhbCIsICJjdXJyZW50SG9vayIsICJSZWFjdEN1cnJlbnREaXNwYXRjaGVyIiwgIm9iamVjdCIsICJFbGVtZW50IiwgIkZyYWdtZW50IiwgImlzRWxlbWVudCIsICJ4IiwgImFzc2lnbiIsICJ4IiwgImlzVmFsaWRFbGVtZW50IiwgInZhbGlkYXRlIiwgImkiLCAiY2hlY2tlciIsICJoYXNPd24iLCAiY2xhc3NOYW1lcyIsICJyZXF1aXJlX3JlYWN0X2lzX2RldmVsb3BtZW50IiwgIm9iamVjdCIsICJFbGVtZW50IiwgIkZyYWdtZW50IiwgImlzRWxlbWVudCIsICJyZXF1aXJlX3JlYWN0X2lzIiwgImdldFByb3RvdHlwZU9mIiwgImtleXMiLCAiZ2xvYmFsIiwgIngiLCAibWluIiwgIm1heCIsICJyZ2IiLCAiaSIsICJDb2xvciIsICJiIiwgImxpc3QiLCAidG9TdHJpbmciLCAiYXNzaWduIiwgImNzcyIsICJpJDEiLCAiaHNsIiwgInYiLCAibmFtZSIsICJudW0iLCAicm5kIiwgImFicyIsICJsYWIiLCAibGNoIiwgImNvbG9ycyIsICJBIiwgImQiLCAiZiIsICJfcG9zIiwgImxpZ2h0bmVzcyIsICJrZXkiLCAibGltaXRzIiwgImIyIiwgImNocm9tYSIsICJsZW5ndGgiLCAibGVuZ3RoIiwgIlN5bWJvbCIsICJTeW1ib2wiLCAiaGFzT3duUHJvcGVydHkiLCAiU3ltYm9sIiwgImlzT2JqZWN0IiwgImlzT2JqZWN0IiwgImlzRnVuY3Rpb24iLCAiZnVuYyIsICJmdW5jIiwgImlzRnVuY3Rpb24iLCAiaXNPYmplY3QiLCAiaGFzT3duUHJvcGVydHkiLCAib2JqZWN0IiwgIm9iamVjdCIsICJNYXAiLCAiaGFzT3duUHJvcGVydHkiLCAiaGFzT3duUHJvcGVydHkiLCAibGVuZ3RoIiwgIk1hcCIsICJzaXplIiwgImxlbmd0aCIsICJNYXAiLCAibGVuZ3RoIiwgImxlbmd0aCIsICJvdGhWYWx1ZSIsICJVaW50OEFycmF5IiwgIlN5bWJvbCIsICJVaW50OEFycmF5IiwgIm9iamVjdCIsICJsZW5ndGgiLCAiaXNBcnJheSIsICJpc0FycmF5IiwgIm9iamVjdCIsICJsZW5ndGgiLCAib2JqZWN0IiwgImhhc093blByb3BlcnR5IiwgIkJ1ZmZlciIsICJpc0J1ZmZlciIsICJsZW5ndGgiLCAiZnVuYyIsICJpc1R5cGVkQXJyYXkiLCAiaXNBcnJheSIsICJpc0J1ZmZlciIsICJpc1R5cGVkQXJyYXkiLCAiaGFzT3duUHJvcGVydHkiLCAibGVuZ3RoIiwgImZ1bmMiLCAiaGFzT3duUHJvcGVydHkiLCAib2JqZWN0IiwgImlzRnVuY3Rpb24iLCAia2V5cyIsICJvYmplY3QiLCAia2V5cyIsICJvYmplY3QiLCAiaGFzT3duUHJvcGVydHkiLCAib2JqZWN0IiwgIlByb21pc2UiLCAiU2V0IiwgIldlYWtNYXAiLCAiTWFwIiwgIlByb21pc2UiLCAiU2V0IiwgIldlYWtNYXAiLCAiaXNBcnJheSIsICJpc0J1ZmZlciIsICJpc1R5cGVkQXJyYXkiLCAiaGFzT3duUHJvcGVydHkiLCAib2JqZWN0IiwgImlzRXF1YWwiLCAiZ2xvYmFsIiwgImlzQXJyYXkiLCAiaXNPYmplY3QiLCAiYiIsICJpc1VuZGVmaW5lZCIsICJpc051bWJlciIsICJpc0RhdGUiLCAiZXh0ZW5kIiwgImZvcm1hdCIsICJsb2NhbGUiLCAidG8iLCAiZnJvbSIsICJpc0Z1bmN0aW9uIiwgImtleXMiLCAiY2FsZW5kYXIiLCAibm93IiwgInNpZ24iLCAidG9rZW4iLCAib3JkaW5hbCIsICJmdW5jIiwgImxlbmd0aCIsICJpIiwgInN0cmluZyIsICJkaWZmIiwgImxvY2FsZURhdGEiLCAiZ2V0IiwgIngiLCAiaG91cnMiLCAibWludXRlcyIsICJuZXh0IiwgIm1hdGNoIiwgImRlZmF1bHRzIiwgInRva2VucyIsICJtZXJpZGllbSIsICJ5ZWFycyIsICJtb250aHMiLCAid2Vla3MiLCAiZGF5cyIsICJzZWNvbmRzIiwgIm1pbGxpc2Vjb25kcyIsICJvZmZzZXQiLCAibWF0Y2hlcyIsICJiYXNlIiwgImlzU3RyaW5nIiwgInByb3BlcnR5IiwgInRvU3RyaW5nIiwgInByZWZpeCIsICJ0b0FycmF5IiwgInRvSlNPTiIsICJhYnMiLCAidGhyZXNob2xkcyIsICJpc0FycmF5IiwgImlzU3RyaW5nIiwgImlzQm9vbGVhbiIsICJpc051bWJlciIsICJpc051bWJlciIsICJpc05hTiIsICJnbG9iYWwiLCAibnVtZXJhbCIsICJWRVJTSU9OIiwgImRlZmF1bHRzIiwgImFicyIsICJzdHJpbmciLCAieCIsICJuZXh0IiwgInByb3BlcnR5IiwgImIiLCAibWVtb2l6ZSIsICJmdW5jIiwgImlzQXJyYXkiLCAib2JqZWN0IiwgIm1lbW9pemUiLCAiZnVuYyIsICJzdHJpbmciLCAibWF0Y2giLCAibGVuZ3RoIiwgIlN5bWJvbCIsICJpc0FycmF5IiwgInRvU3RyaW5nIiwgImlzQXJyYXkiLCAidG9TdHJpbmciLCAib2JqZWN0IiwgIm9iamVjdCIsICJsZW5ndGgiLCAiZ2V0IiwgIm9iamVjdCIsICJsZW5ndGgiLCAiZnVuYyIsICJvYmplY3QiLCAiaGFzT3duUHJvcGVydHkiLCAib2JqZWN0IiwgIm9iamVjdCIsICJsZW5ndGgiLCAia2V5cyIsICJvYmplY3QiLCAib2JqZWN0IiwgImlzT2JqZWN0IiwgImhhc093blByb3BlcnR5IiwgIm9iamVjdCIsICJvYmplY3QiLCAib2JqZWN0IiwgIkJ1ZmZlciIsICJsZW5ndGgiLCAibGVuZ3RoIiwgIm9iamVjdCIsICJvYmplY3QiLCAib2JqZWN0IiwgIm9iamVjdCIsICJoYXNPd25Qcm9wZXJ0eSIsICJsZW5ndGgiLCAiVWludDhBcnJheSIsICJTeW1ib2wiLCAib2JqZWN0IiwgImlzT2JqZWN0IiwgIm9iamVjdCIsICJvYmplY3QiLCAiaXNBcnJheSIsICJpc0J1ZmZlciIsICJpc09iamVjdCIsICJrZXlzIiwgIm9iamVjdCIsICJrZXkiLCAibGVuZ3RoIiwgImxlbmd0aCIsICJvYmplY3QiLCAib2JqZWN0IiwgImhhc093blByb3BlcnR5IiwgImlzUGxhaW5PYmplY3QiLCAiaXNQbGFpbk9iamVjdCIsICJTeW1ib2wiLCAiaXNBcnJheSIsICJsZW5ndGgiLCAiZmxhdHRlbiIsICJsZW5ndGgiLCAiZnVuYyIsICJmdW5jIiwgImxlbmd0aCIsICJmdW5jIiwgInN0cmluZyIsICJmdW5jIiwgImZsYXR0ZW4iLCAiZnVuYyIsICJvYmplY3QiLCAibGVuZ3RoIiwgInJlcXVpcmVfcmVhY3RfaXNfZGV2ZWxvcG1lbnQiLCAib2JqZWN0IiwgIkVsZW1lbnQiLCAiRnJhZ21lbnQiLCAiaXNFbGVtZW50IiwgInJlcXVpcmVfcmVhY3RfaXMiLCAiZW5jb2RlIiwgInByZWZpeCIsICJtYXRjaCIsICJiYXNlIiwgInBhcnNlIiwgImNoYXIiLCAidG9TdHJpbmciLCAic3RyaW5naWZ5IiwgIl9leHRlbmRzIiwgIl9jcmVhdGVDbGFzcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAia2V5cyIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAic2VsZiIsICJfaW5oZXJpdHMiLCAiY2xlYW5JbnB1dFByb3BzIiwgImNvcHlTdHlsZXMiLCAic3R5bGVzIiwgIm5vZGUiLCAiZ2VuZXJhdGVJZCIsICJBdXRvc2l6ZUlucHV0IiwgImZvY3VzIiwgImluamVjdFN0eWxlcyIsICJyZW5kZXIiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdF9kb20iLCAicHJvdG90eXBlIiwgImtleXMiLCAiYiIsICJkZXNjcmlwdG9ycyIsICJmaWx0ZXIiLCAicG9zaXRpb24iLCAibWF0Y2hlcyIsICJoYXNPd25Qcm9wZXJ0eSIsICJyZWR1Y2VyIiwgImRlbGltaXRlciIsICJkZWZpbmUiLCAic2l6ZSIsICJsZW5ndGgiLCAiZmlsdGVyIiwgInRva2VuIiwgIm1hdGNoIiwgInByb3RvdHlwZSIsICJ0b1N0cmluZyIsICJlbmNvZGUiLCAibWF0Y2giLCAia2V5cyIsICJpc0Zvcm1EYXRhIiwgImlzRmlsZUxpc3QiLCAidHJhbnNpdGlvbmFsIiwgImxpbmUiLCAibWF0Y2giLCAiZmlsdGVyIiwgImNoYXIiLCAic2VsZiIsICJrZXlzIiwgImNvbXB1dGVkIiwgInByb3RvdHlwZSIsICJ2YWxpZGF0ZVN0YXR1cyIsICJtYXRjaCIsICJtYXRjaCIsICJub3ciLCAidG9rZW4iLCAidHJhbnNpdGlvbmFsIiwgImxlbmd0aCIsICJiIiwgIm1lcmdlIiwgImtleXMiLCAidmFsaWRhdG9ycyIsICJ0cmFuc2l0aW9uYWwiLCAidG9rZW4iLCAiQXhpb3MiLCAiQXhpb3NFcnJvciIsICJDYW5jZWxlZEVycm9yIiwgImlzQ2FuY2VsIiwgIkNhbmNlbFRva2VuIiwgIlZFUlNJT04iLCAiYWxsIiwgImlzQXhpb3NFcnJvciIsICJzcHJlYWQiLCAidG9Gb3JtRGF0YSIsICJBeGlvc0hlYWRlcnMiLCAiSHR0cFN0YXR1c0NvZGUiLCAibWVyZ2VDb25maWciLCAidiIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiUmVhY3QiLCAiU3R5bGVTaGVldCIsICJpc0ltcG9ydFJ1bGUiLCAibGVuZ3RoIiwgInRyaW0iLCAiYXBwZW5kIiwgImxlbmd0aCIsICJ0cmltIiwgImxlbmd0aCIsICJwcm9wZXJ0eSIsICJjaGFyYWN0ZXIiLCAiY2hhcmFjdGVycyIsICJhcHBlbmQiLCAic2l6ZSIsICJ4IiwgInRyaW0iLCAibGVuZ3RoIiwgImxlbmd0aCIsICJpZGVudGlmaWVyV2l0aFBvaW50VHJhY2tpbmciLCAiY2hhcmFjdGVyIiwgInRvUnVsZXMiLCAiZ2V0UnVsZXMiLCAiY29tcGF0IiwgInJlbW92ZUxhYmVsIiwgImlzSWdub3JpbmdDb21tZW50IiwgImNyZWF0ZVVuc2FmZVNlbGVjdG9yc0FsYXJtIiwgIm5vZGUiLCAiaXNJbXBvcnRSdWxlIiwgImlzUHJlcGVuZGVkV2l0aFJlZ3VsYXJSdWxlcyIsICJudWxsaWZ5RWxlbWVudCIsICJpbmNvcnJlY3RJbXBvcnRBbGFybSIsICJsZW5ndGgiLCAicHJlZml4ZXIiLCAiY3JlYXRlQ2FjaGUiLCAic3R5bGlzIiwgInN0eWxlcyIsICJpbnNlcnQiLCAiY2xhc3NOYW1lcyIsICJyZWdpc3RlclN0eWxlcyIsICJpbnNlcnRTdHlsZXMiLCAiaXNDdXN0b21Qcm9wZXJ0eSIsICJwcm9wZXJ0eSIsICJpc1Byb2Nlc3NhYmxlVmFsdWUiLCAicHJvY2Vzc1N0eWxlVmFsdWUiLCAibWF0Y2giLCAibmV4dCIsICJzdHlsZXMiLCAic3RyaW5nIiwgInNlcmlhbGl6ZVN0eWxlcyIsICJ0b1N0cmluZyIsICJzeW5jRmFsbGJhY2siLCAidXNlSW5zZXJ0aW9uRWZmZWN0IiwgImlzQnJvd3NlciIsICJ3aXRoRW1vdGlvbkNhY2hlIiwgImZ1bmMiLCAiaXNCcm93c2VyIiwgImdldExhc3RQYXJ0IiwgImdldEZ1bmN0aW9uTmFtZUZyb21TdGFja1RyYWNlTGluZSIsICJsaW5lIiwgIm1hdGNoIiwgInNhbml0aXplSWRlbnRpZmllciIsICJpZGVudGlmaWVyIiwgImdldExhYmVsRnJvbVN0YWNrVHJhY2UiLCAiY3JlYXRlRW1vdGlvblByb3BzIiwgIkluc2VydGlvbiIsICJfcmVmIiwgIlJlYWN0IiwgImpzeCIsICJzdHlsZXMiLCAiaXNCcm93c2VyIiwgIl9yZWYiLCAibmV4dCIsICJub2RlIiwgImtleWZyYW1lcyIsICJ0b1N0cmluZyIsICJjbGFzc25hbWVzIiwgIm1lcmdlIiwgImNzcyIsICJJbnNlcnRpb24iLCAiY3giLCAib2JqZWN0IiwgImtleXMiLCAiY2xvbmVFbGVtZW50V2l0aENzcyIsICJldWlTY3JlZW5SZWFkZXJPbmx5IiwgImV1aVNjcmVlblJlYWRlck9ubHlTdHlsZXMiLCAiRXVpU2NyZWVuUmVhZGVyT25seSIsICJfcmVmIiwgImNsYXNzTmFtZXMiLCAic3R5bGVzIiwgIlByb3BUeXBlcyIsICJFdWlTY3JlZW5SZWFkZXJMaXZlIiwgIl9yZWYiLCAidG9nZ2xlIiwgIlByb3BUeXBlcyIsICJjYW5kaWRhdGVTZWxlY3RvcnMiLCAiY2FuZGlkYXRlU2VsZWN0b3IiLCAiam9pbiIsICJOb0VsZW1lbnQiLCAiRWxlbWVudCIsICJtYXRjaGVzIiwgInByb3RvdHlwZSIsICJtc01hdGNoZXNTZWxlY3RvciIsICJ3ZWJraXRNYXRjaGVzU2VsZWN0b3IiLCAiZ2V0Um9vdE5vZGUiLCAiZWxlbWVudCIsICJvd25lckRvY3VtZW50IiwgImdldENhbmRpZGF0ZXMiLCAiZWwiLCAiaW5jbHVkZUNvbnRhaW5lciIsICJmaWx0ZXIiLCAiY2FuZGlkYXRlcyIsICJBcnJheSIsICJzbGljZSIsICJhcHBseSIsICJxdWVyeVNlbGVjdG9yQWxsIiwgImNhbGwiLCAidW5zaGlmdCIsICJnZXRDYW5kaWRhdGVzSXRlcmF0aXZlbHkiLCAiZWxlbWVudHMiLCAib3B0aW9ucyIsICJlbGVtZW50c1RvQ2hlY2siLCAiZnJvbSIsICJsZW5ndGgiLCAic2hpZnQiLCAidGFnTmFtZSIsICJhc3NpZ25lZCIsICJhc3NpZ25lZEVsZW1lbnRzIiwgImNvbnRlbnQiLCAiY2hpbGRyZW4iLCAibmVzdGVkQ2FuZGlkYXRlcyIsICJmbGF0dGVuIiwgInB1c2giLCAic2NvcGUiLCAidmFsaWRDYW5kaWRhdGUiLCAiaW5jbHVkZXMiLCAic2hhZG93Um9vdCIsICJnZXRTaGFkb3dSb290IiwgInZhbGlkU2hhZG93Um9vdCIsICJzaGFkb3dSb290RmlsdGVyIiwgImdldFRhYmluZGV4IiwgIm5vZGUiLCAiaXNTY29wZSIsICJ0YWJJbmRleCIsICJ0ZXN0IiwgImlzQ29udGVudEVkaXRhYmxlIiwgImlzTmFOIiwgInBhcnNlSW50IiwgImdldEF0dHJpYnV0ZSIsICJzb3J0T3JkZXJlZFRhYmJhYmxlcyIsICJhIiwgImIiLCAiZG9jdW1lbnRPcmRlciIsICJpc0lucHV0IiwgImlzSGlkZGVuSW5wdXQiLCAidHlwZSIsICJpc0RldGFpbHNXaXRoU3VtbWFyeSIsICJyIiwgInNvbWUiLCAiY2hpbGQiLCAiZ2V0Q2hlY2tlZFJhZGlvIiwgIm5vZGVzIiwgImZvcm0iLCAiaSIsICJjaGVja2VkIiwgImlzVGFiYmFibGVSYWRpbyIsICJuYW1lIiwgInJhZGlvU2NvcGUiLCAicXVlcnlSYWRpb3MiLCAicmFkaW9TZXQiLCAid2luZG93IiwgIkNTUyIsICJlc2NhcGUiLCAiZXJyIiwgImNvbnNvbGUiLCAiZXJyb3IiLCAibWVzc2FnZSIsICJpc1JhZGlvIiwgImlzTm9uVGFiYmFibGVSYWRpbyIsICJpc1plcm9BcmVhIiwgImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsICJ3aWR0aCIsICJoZWlnaHQiLCAiaXNIaWRkZW4iLCAiX3JlZiIsICJkaXNwbGF5Q2hlY2siLCAiZ2V0Q29tcHV0ZWRTdHlsZSIsICJ2aXNpYmlsaXR5IiwgImlzRGlyZWN0U3VtbWFyeSIsICJub2RlVW5kZXJEZXRhaWxzIiwgInBhcmVudEVsZW1lbnQiLCAibm9kZVJvb3RIb3N0IiwgImhvc3QiLCAibm9kZUlzQXR0YWNoZWQiLCAiY29udGFpbnMiLCAib3JpZ2luYWxOb2RlIiwgInJvb3ROb2RlIiwgImFzc2lnbmVkU2xvdCIsICJnZXRDbGllbnRSZWN0cyIsICJpc0Rpc2FibGVkRnJvbUZpZWxkc2V0IiwgInBhcmVudE5vZGUiLCAiZGlzYWJsZWQiLCAiaXRlbSIsICJpc05vZGVNYXRjaGluZ1NlbGVjdG9yRm9jdXNhYmxlIiwgImlzTm9kZU1hdGNoaW5nU2VsZWN0b3JUYWJiYWJsZSIsICJpc1ZhbGlkU2hhZG93Um9vdFRhYmJhYmxlIiwgInNoYWRvd0hvc3ROb2RlIiwgInNvcnRCeU9yZGVyIiwgInJlZ3VsYXJUYWJiYWJsZXMiLCAib3JkZXJlZFRhYmJhYmxlcyIsICJmb3JFYWNoIiwgImNhbmRpZGF0ZVRhYmluZGV4IiwgInNvcnQiLCAicmVkdWNlIiwgImFjYyIsICJzb3J0YWJsZSIsICJjb25jYXQiLCAidGFiYmFibGUiLCAiYmluZCIsICJmb2N1c2FibGUiLCAia2V5cyIsICJzdHJpbmdpZnkiLCAiYiIsICJub2RlIiwgImltcG9ydF9yZWFjdCIsICJwcmVmaXgiLCAidXNlR2VuZXJhdGVkSHRtbElkIiwgIl9yZWYiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdCIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJfdHlwZW9mIiwgIm9iaiIsICJpc09iamVjdCIsICJpc0ludmVyc2VDb2xvck1vZGUiLCAiZ2V0Q29sb3JNb2RlIiwgImdldE9uIiwgIm5vZGUiLCAic2V0T24iLCAiQ29tcHV0ZWQiLCAiYmFzZSIsICJfcmVmIiwgIl9yZWYyIiwgImdldENvbXB1dGVkIiwgIm92ZXIiLCAiYnVpbGRUaGVtZSIsICJnZXRQcm90b3R5cGVPZiIsICJwcm90b3R5cGUiLCAia2V5IiwgInByb3BlcnR5IiwgImdldCIsICJtZXJnZURlZXAiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJiIiwgImltcG9ydF9jaHJvbWFfanMiLCAiY29sb3JzIiwgImNocm9tYSIsICJfdG9Db25zdW1hYmxlQXJyYXkiLCAiX2FycmF5V2l0aG91dEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXkiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVNwcmVhZCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJmbGF0dGVuIiwgIl9yZWYiLCAiZXVpUGFsZXR0ZUNvbG9yQmxpbmQiLCAiX3JlZjIiLCAiY29sb3JzIiwgImJhc2UiLCAiX3RvQ29uc3VtYWJsZUFycmF5IiwgImIiLCAiY2hyb21hIiwgIl9sb29wIiwgImkiLCAiZXVpUGFsZXR0ZUNvbG9yQmxpbmRCZWhpbmRUZXh0IiwgImltcG9ydF9jaHJvbWFfanMiLCAiaW5PcmlnaW5hbEZvcm1hdCIsICJ0cmFuc3BhcmVudGl6ZSIsICJjaHJvbWEiLCAidGludCIsICJzaGFkZSIsICJsaWdodG5lc3MiLCAiY2hyb21hIiwgImltcG9ydF9jaHJvbWFfanMiLCAiX3R5cGVvZiIsICJvYmoiLCAibWFrZUhpZ2hDb250cmFzdENvbG9yIiwgImNocm9tYSIsICJsaWdodG5lc3MiLCAibWFrZURpc2FibGVkQ29udHJhc3RDb2xvciIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9zbGljZWRUb0FycmF5IiwgIl9hcnJheVdpdGhIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5TGltaXQiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVJlc3QiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiX3JlZiIsICJfcmVmMiIsICJfcmVmMyIsICJfcmVmNCIsICJfcmVmNSIsICJjb2xvcnMiLCAiX3JlZjYiLCAiX3JlZjciLCAiX3JlZjgiLCAib3duS2V5cyIsICJvYmplY3QiLCAia2V5cyIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgImxvZ2ljYWxDU1MiLCAicHJvcGVydHkiLCAibG9naWNhbFNpemVDU1MiLCAibG9naWNhbFRleHRBbGlnbkNTUyIsICJfdHlwZW9mIiwgIm9iaiIsICJzaXplVG9QaXhlbCIsICJiYXNlIiwgIl9yZWYiLCAiYmFzZSIsICJmb250IiwgIl9yZWYyIiwgIl9yZWYzIiwgIl9yZWY0IiwgIl9zbGljZWRUb0FycmF5IiwgIl9hcnJheVdpdGhIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5TGltaXQiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVJlc3QiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiX3JlZiIsICJfcmVmMiIsICJfcmVmMyIsICJfcmVmNCIsICJfcmVmNSIsICJfcmVmNiIsICJfcmVmNyIsICJfcmVmOCIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9zbGljZWRUb0FycmF5IiwgIl9hcnJheVdpdGhIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5TGltaXQiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVJlc3QiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiX3JlZiIsICJfcmVmMiIsICJiYXNlIiwgImltcG9ydF9yZWFjdCIsICJfZXh0ZW5kcyIsICJ1c2VFdWlUaGVtZSIsICJ3aXRoRXVpVGhlbWUiLCAiQ29tcG9uZW50IiwgIlJlbmRlciIsICJpbXBvcnRfcmVhY3QiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJFdWlUaGVtZVByb3ZpZGVyIiwgIl9yZWYiLCAiaXNFcXVhbCIsICJ0aHJvdHRsZSIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIkN1cnJlbnRFdWlCcmVha3BvaW50UHJvdmlkZXIiLCAiX3JlZiIsICJpbXBvcnRfcmVhY3QiLCAidXNlQ3VycmVudEV1aUJyZWFrcG9pbnQiLCAidXNlSXNXaXRoaW5CcmVha3BvaW50cyIsICJmaW5kRWxlbWVudEJ5U2VsZWN0b3JPclJlZiIsICJub2RlIiwgImlzVW5kZWZpbmVkIiwgImlzTnVsbCIsICJpc05pbCIsICJpc0RhdGUiLCAibW9tZW50IiwgImlzRnVuY3Rpb24iLCAiX2lzRnVuY3Rpb24iLCAiaXNBcnJheSIsICJfaXNBcnJheSIsICJpc1N0cmluZyIsICJfaXNTdHJpbmciLCAiaXNCb29sZWFuIiwgIl9pc0Jvb2xlYW4iLCAiaXNOdW1iZXIiLCAiX2lzTnVtYmVyIiwgImlzTmFOIiwgIl9pc05hTiIsICJmb3JtYXRCb29sZWFuIiwgIl9yZWYiLCAiaW1wb3J0X21vbWVudCIsICJfdHlwZW9mIiwgIm9iaiIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgImNhbGVuZGFyIiwgIm1vbWVudCIsICJ4IiwgImZvcm1hdERhdGUiLCAiaXNTdHJpbmciLCAiaXNGdW5jdGlvbiIsICJmb3JtYXROdW1iZXIiLCAiaXNTdHJpbmciLCAibnVtZXJhbCIsICJmb3JtYXRUZXh0IiwgImZvcm1hdEF1dG8iLCAiaXNOYU4iLCAiaXNTdHJpbmciLCAiaXNEYXRlIiwgImlzQm9vbGVhbiIsICJpc051bWJlciIsICJpc0FycmF5IiwgImlzRG9tYWluU2VjdXJlIiwgImdldFNlY3VyZVJlbEZvclRhcmdldCIsICJfcmVmIiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIlByb3BUeXBlcyIsICJnZXQiLCAib2JqZWN0IiwgIl9nZXQiLCAidjEiLCAicmV2ZXJzZSIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJnZXRCdWZmZXJWYWx1ZXMiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX3JlZiIsICJwb3NpdGlvbiIsICJfcmVmMiIsICJfcmVmMyIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3JlZjQiLCAiX3JlZjUiLCAibm9kZSIsICJnZXRUcmFuc2l0aW9uVGltaW5ncyIsICJnZXRXYWl0RHVyYXRpb24iLCAicGVyZm9ybU9uRnJhbWUiLCAib25GcmFtZSIsICJpbXBvcnRfcmVhY3QiLCAidXNlQ29tYmluZWRSZWZzIiwgIm5vZGUiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJSZWFjdCIsICJfZXh0ZW5kcyIsICJFdWlJY29uQWNjZXNzaWJpbGl0eSIsICJfcmVmIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQWdncmVnYXRlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFsZXJ0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFuYWx5emVFdmVudCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BbmFseXplRXZlbnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQW5ub3RhdGlvbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcG1UcmFjZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBBZGREYXRhIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcEFkdmFuY2VkU2V0dGluZ3MiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwQWdlbnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwQXBtIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcEFwcFNlYXJjaCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBBdWRpdGJlYXQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwQ2FudmFzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcENhc2VzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcENvZGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwQ29uc29sZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBDcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBEYXNoYm9hcmQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwRGV2dG9vbHMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwRGlzY292ZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwRW1zIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcEZpbGViZWF0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcEZsZWV0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcEdpcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBHcmFwaCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBHcm9rIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcEhlYXJ0YmVhdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBJbmRleE1hbmFnZW1lbnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwSW5kZXhQYXR0ZXJuIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcEluZGV4Um9sbHVwIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcExlbnMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwTG9ncyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBNYW5hZ2VtZW50IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcE1ldHJpY2JlYXQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwTWV0cmljcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBNbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBNb25pdG9yaW5nIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcE5vdGVib29rIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcFBhY2tldGJlYXQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwUGlwZWxpbmUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwUmVjZW50bHlWaWV3ZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwUmVwb3J0aW5nIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcFNhdmVkT2JqZWN0cyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBTZWFyY2hQcm9maWxlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBTZWN1cml0eSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBTZWN1cml0eUFuYWx5dGljcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBTcGFjZXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwU3FsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcFRpbWVsaW9uIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcFVwZ3JhZGVBc3Npc3RhbnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwVXB0aW1lIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcFVzZXJzUm9sZXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwVmlzdWFsaXplIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcFdhdGNoZXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwV29ya3BsYWNlU2VhcmNoIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcHMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXJyb3dFbmQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXJyb3dTdGFydCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcnJvd0Rvd24iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXJyb3dMZWZ0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFycm93UmlnaHQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXJyb3dVcCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Bc3RlcmlzayIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25CZWFrZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQmVsbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25CZWxsU2xhc2giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQm9sdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Cb3hlc0hvcml6b250YWwiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQm94ZXNWZXJ0aWNhbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25CcmFuY2giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQnJhbmNoVXNlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ccm9vbSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25CcnVzaCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25CdWciLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQnVsbHNleWUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ2FsZW5kYXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ2hlY2siLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ2hlY2tJbkNpcmNsZUZpbGxlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25DaGVlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25DbG9jayIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25DbG91ZERyaXp6bGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ2xvdWRTdG9ybXkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ2xvdWRTdW5ueSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25DbHVzdGVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNvbG9yIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNvbXB1dGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ29uc29sZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Db250YWluZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ29udGludWl0eUFib3ZlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNvbnRpbnVpdHlBYm92ZUJlbG93IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNvbnRpbnVpdHlCZWxvdyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Db250aW51aXR5V2l0aGluIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNvbnRyb2xzSG9yaXpvbnRhbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Db250cm9sc1ZlcnRpY2FsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNvcHkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ29weUNsaXBib2FyZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Dcm9zcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Dcm9zc0luQUNpcmNsZUZpbGxlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Dcm9zc2hhaXJzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkN1cnJlbmN5IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkN1dCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25EYXRhYmFzZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25EZXNrdG9wIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkRvY3VtZW50IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkRvY3VtZW50RWRpdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Eb2N1bWVudGF0aW9uIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkRvY3VtZW50cyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Eb3QiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRG91YmxlQXJyb3dMZWZ0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkRvdWJsZUFycm93UmlnaHQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRG93bmxvYWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWwiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvckl0ZW1BbGlnbkJvdHRvbSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JJdGVtQWxpZ25DZW50ZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9ySXRlbUFsaWduTGVmdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JJdGVtQWxpZ25NaWRkbGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9ySXRlbUFsaWduUmlnaHQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9ySXRlbUFsaWduVG9wIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvclBvc2l0aW9uQm90dG9tTGVmdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvclBvc2l0aW9uVG9wTGVmdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JQb3NpdGlvblRvcFJpZ2h0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvckFsaWduQ2VudGVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvckFsaWduTGVmdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JBbGlnblJpZ2h0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvckJvbGQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9yQ2hlY2tsaXN0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvckNvZGVCbG9jayIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JDb21tZW50IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvckhlYWRpbmciLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9ySXRhbGljIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvckxpbmsiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9yT3JkZXJlZExpc3QiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9yUmVkbyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JTdHJpa2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9yVGFibGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9yVW5kZXJsaW5lIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvclVuZG8iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9yVW5vcmRlcmVkTGlzdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FbWFpbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FbXB0eSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FcWwiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRXJhc2VyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkV4aXQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRXhwYW5kIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkV4cGFuZE1pbmkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRXhwb3J0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkV5ZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FeWVDbG9zZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRmFjZUhhcHB5IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkZhY2VOZXV0cmFsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkZhY2VTYWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRmlsdGVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkZsYWciLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRm9sZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Gb2xkZXJDaGVjayIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Gb2xkZXJDbG9zZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRm9sZGVyRXhjbGFtYXRpb24iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRm9sZGVyT3BlbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25GcmFtZU5leHQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRnJhbWVQcmV2aW91cyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25GdWxsU2NyZWVuRXhpdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25GdWxsU2NyZWVuIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkZ1bmN0aW9uIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkdlYXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uR2xhc3NlcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25HbG9iZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25HcmFiIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkdyYWJIb3Jpem9udGFsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkdyaWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uSGVhcnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uSGVhdG1hcCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25IZWxwIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkhvbWUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uSUluQ2lyY2xlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkltYWdlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkltcG9ydCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25JbmRleENsb3NlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkluZGV4RWRpdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25JbmRleEZsdXNoIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkluZGV4TWFwcGluZyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25JbmRleE9wZW4iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uSW5kZXhSdW50aW1lIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkluZGV4U2V0dGluZ3MiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uSW5wdXRPdXRwdXQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uSW5zcGVjdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25JbnZlcnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uSXAiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uS2V5Ym9hcmQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uS3FsRmllbGQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uS3FsRnVuY3Rpb24iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uS3FsT3BlcmFuZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25LcWxTZWxlY3RvciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25LcWxWYWx1ZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25LdWJlcm5ldGVzTm9kZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25LdWJlcm5ldGVzUG9kIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxheWVycyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25MZXR0ZXJpbmciLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTGluZURhc2hlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25MaW5lRG90dGVkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxpbmVTb2xpZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25MaW5rIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxpc3QiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTGlzdEFkZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2NrIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvY2tPcGVuIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29BZXJvc3Bpa2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0FwYWNoZSIsICJfcmVmIiwgImdlbmVyYXRlSWQiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29BcHBTZWFyY2giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0F3cyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvQXdzTW9ubyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvQXp1cmUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0F6dXJlTW9ubyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvQmVhdHMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0J1c2luZXNzQW5hbHl0aWNzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29DZXBoIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29DbG91ZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvQ2xvdWRFY2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0NvZGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0NvZGVzYW5kYm94IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29Db3VjaGJhc2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0RvY2tlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvRHJvcHdpemFyZCIsICJfcmVmIiwgImdlbmVyYXRlSWQiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29FbGFzdGljIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29FbGFzdGljU3RhY2siLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0VsYXN0aWNzZWFyY2giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0VudGVycHJpc2VTZWFyY2giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0V0Y2QiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0djcCIsICJfcmVmIiwgImdlbmVyYXRlSWQiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29HY3BNb25vIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29HaXRodWIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0dtYWlsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29Hb2xhbmciLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0dvb2dsZUciLCAiX3JlZiIsICJnZW5lcmF0ZUlkIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvSGFwcm94eSIsICJfcmVmIiwgImdlbmVyYXRlSWQiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29JYm0iLCAiX3JlZiIsICJnZW5lcmF0ZUlkIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvSWJtTW9ubyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvS2Fma2EiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0tpYmFuYSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvS3ViZXJuZXRlcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvTG9nZ2luZyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvTG9nc3Rhc2giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb01hcHMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb01lbWNhY2hlZCIsICJfcmVmIiwgImdlbmVyYXRlSWQiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29NZXRyaWNzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29Nb25nb2RiIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29NeXNxbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvTmdpbngiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb09ic2VydmFiaWxpdHkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb09zcXVlcnkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb1BocCIsICJfcmVmIiwgImdlbmVyYXRlSWQiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29Qb3N0Z3JlcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvUHJvbWV0aGV1cyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvUmFiYml0bXEiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb1JlZGlzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29TZWN1cml0eSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvU2l0ZVNlYXJjaCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvU2tldGNoIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29TbGFjayIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvVXB0aW1lIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29XZWJob29rIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29XaW5kb3dzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29Xb3JrcGxhY2VTZWFyY2giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nc3Rhc2hGaWx0ZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nc3Rhc2hJZiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dzdGFzaElucHV0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ3N0YXNoT3V0cHV0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ3N0YXNoUXVldWUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWFnbmV0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1hZ25pZnlXaXRoRXhjbGFtYXRpb24iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWFnbmlmeVdpdGhNaW51cyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NYWduaWZ5V2l0aFBsdXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWFwTWFya2VyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1lbW9yeSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NZW51IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1lbnVEb3duIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1lbnVMZWZ0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1lbnVSaWdodCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NZW51VXAiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWVyZ2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWluaW1pemUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWludXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWludXNJbkNpcmNsZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NaW51c0luQ2lyY2xlRmlsbGVkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1sQ2xhc3NpZmljYXRpb25Kb2IiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWxDcmVhdGVBZHZhbmNlZEpvYiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NbENyZWF0ZU11bHRpTWV0cmljSm9iIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1sQ3JlYXRlUG9wdWxhdGlvbkpvYiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NbENyZWF0ZVNpbmdsZU1ldHJpY0pvYiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NbERhdGFWaXN1YWxpemVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1sT3V0bGllckRldGVjdGlvbkpvYiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NbFJlZ3Jlc3Npb25Kb2IiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTW9iaWxlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1vb24iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTmFtZXNwYWNlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk5lc3RlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ob2RlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk51bWJlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25PZmZsaW5lIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk9ubGluZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25QYWNrYWdlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblBhZ2VTZWxlY3QiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUGFnZXNTZWxlY3QiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUGFpbnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUGFwZXJDbGlwIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblBhcnRpYWwiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUGF1c2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUGF5bWVudCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25QZW5jaWwiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUGVyY2VudCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25QaW4iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUGluRmlsbGVkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblBsYXkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUGxheUZpbGxlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25QbHVzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblBsdXNJbkNpcmNsZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25QbHVzSW5DaXJjbGVGaWxsZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUG9wb3V0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblB1c2giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUXVlc3Rpb25JbkNpcmNsZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25RdW90ZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25SZWZyZXNoIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblJlcG9ydGVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblJldHVybktleSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TYXZlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblNjYWxlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblNlYXJjaCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TZWN1cml0eVNpZ25hbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TZWN1cml0eVNpZ25hbERldGVjdGVkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblNlY3VyaXR5U2lnbmFsUmVzb2x2ZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU2Vzc2lvblZpZXdlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TaGFyZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TaGFyZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Tbm93Zmxha2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU29ydExlZnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU29ydFJpZ2h0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblNvcnREb3duIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblNvcnRVcCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Tb3J0YWJsZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TdGFyUGx1c0VtcHR5IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblN0YXJQbHVzRmlsbGVkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblN0YXJFbXB0eSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TdGFyRW1wdHlTcGFjZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TdGFyRmlsbGVkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblN0YXJGaWxsZWRTcGFjZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TdGFyTWludXNFbXB0eSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TdGFyTWludXNGaWxsZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3RhdHMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3RvcCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TdG9wRmlsbGVkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblN0b3BTbGFzaCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TdG9yYWdlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblN0cmluZyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TdWJtb2R1bGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3VuIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblN3YXRjaElucHV0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblN5bWxpbmsiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVGFibGVPZkNvbnRlbnRzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRhYmxlRGVuc2l0eUNvbXBhY3QiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVGFibGVEZW5zaXR5RXhwYW5kZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVGFibGVEZW5zaXR5Tm9ybWFsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRhZyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25UZWFyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRlbXBlcmF0dXJlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRpbWVSZWZyZXNoIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRpbWVsaW5lIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRpbWVzbGlkZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5BbGlhcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbkFubm90YXRpb24iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5BcnJheSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbkJpbmFyeSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbkJvb2xlYW4iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5DbGFzcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbkNvbXBsZXRpb25TdWdnZXN0ZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5Db25zdGFudCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbkRhdGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5EZW5zZVZlY3RvciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbkVsZW1lbnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5FbnVtIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuRW51bU1lbWJlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbkV2ZW50IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuRXhjZXB0aW9uIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuRmllbGQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5GaWxlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuRmxhdHRlbmVkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuRnVuY3Rpb24iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5HZW8iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5IaXN0b2dyYW0iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5JUCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbkludGVyZmFjZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbkpvaW4iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5LZXkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5LZXl3b3JkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuTWV0aG9kIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuTWV0cmljQ291bnRlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbk1ldHJpY0dhdWdlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuTW9kdWxlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuTmFtZXNwYWNlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuTmVzdGVkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuTnVsbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbk51bWJlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbk9iamVjdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbk9wZXJhdG9yIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuUGFja2FnZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlblBhcmFtZXRlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlblBlcmNvbGF0b3IiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5Qcm9wZXJ0eSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlblJhbmdlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuUmFua0ZlYXR1cmUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5SYW5rRmVhdHVyZXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5SZXBvIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuU2VhcmNoVHlwZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlblNoYXBlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuU3RyaW5nIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuU3RydWN0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuU3ltYm9sIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuVGFnIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuVGV4dCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlblRva2VuQ291bnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5WYXJpYWJsZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25UcmFpbmluZyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25UcmFzaCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25VbmZvbGQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVW5saW5rIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblVzZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVXNlckF2YXRhciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Vc2VycyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WZWN0b3IiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVmlkZW9QbGF5ZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVmlzQXJlYSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNBcmVhU3RhY2tlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNCYXJIb3Jpem9udGFsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblZpc0Jhckhvcml6b250YWxTdGFja2VkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblZpc0JhclZlcnRpY2FsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblZpc0JhclZlcnRpY2FsU3RhY2tlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNHYXVnZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNHb2FsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblZpc0xpbmUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVmlzTWFwQ29vcmRpbmF0ZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNNYXBSZWdpb24iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVmlzTWV0cmljIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblZpc1BpZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNUYWJsZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNUYWdDbG91ZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNUZXh0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblZpc1RpbWVsaW9uIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblZpc1ZlZ2EiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVmlzVmlzdWFsQnVpbGRlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Xb3JkV3JhcCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Xb3JkV3JhcERpc2FibGVkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbldyZW5jaCIsICJfcmVmIiwgImljb24iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9yZWFjdCIsICJldWlCYWNrZ3JvdW5kQ29sb3IiLCAiX3JlZiIsICJfcmVmMiIsICJ0aW50T3JTaGFkZSIsICJjb2xvciIsICJ1c2VFdWlCYWNrZ3JvdW5kQ29sb3IiLCAiX3JlZjMiLCAidXNlRXVpQmFja2dyb3VuZENvbG9yQ1NTIiwgImV1aVNjcm9sbEJhclN0eWxlcyIsICJfcmVmIiwgImNvbG9ycyIsICJzaXplIiwgIl9yZWYyIiwgImV1aVBhZGRpbmdTaXplIiwgIl9yZWYiLCAic2l6ZSIsICJ1c2VFdWlQYWRkaW5nU2l6ZSIsICJ1c2VFdWlQYWRkaW5nQ1NTIiwgInByb3BlcnR5IiwgImV1aUZvY3VzUmluZyIsICJldWlGb250U2l6ZSIsICJfcmVmIiwgImV1aVRleHRCcmVha1dvcmQiLCAiRXVpR2xvYmFsU3R5bGVzIiwgIl9yZWYiLCAiYmFzZSIsICJjb2xvcnMiLCAiZm9udCIsICJzdHlsZXMiLCAiaWNvblNpemUiLCAic2l6ZSIsICJldWlJY29uU3R5bGVzIiwgIl9yZWYzIiwgIl90eXBlb2YiLCAib2JqIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX2NyZWF0ZUNsYXNzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJvIiwgInAiLCAic2VsZiIsICJfZ2V0UHJvdG90eXBlT2YiLCAiZ2V0SXNBcHBJY29uIiwgIngiLCAiaWNvbiIsICJFdWlJY29uQ2xhc3MiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfcmVmIiwgImljb24iLCAiX2NyZWF0ZUNsYXNzIiwgInJlbmRlciIsICJzaXplIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfZXhjbHVkZWQiLCAiX29iamVjdFNwcmVhZCIsICJjbGFzc05hbWVzIiwgInN0eWxlcyIsICJmb2N1c2FibGUiLCAiX2V4dGVuZHMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiRXVpQ29udGV4dCIsICJfcmVmIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiX3R5cGVvZiIsICJvYmoiLCAiaXNCb29sZWFuIiwgImlzU3RyaW5nIiwgImlzTnVtYmVyIiwgImlzVW5kZWZpbmVkIiwgImNoYXIiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJ0b2tlbiIsICJyZW5kZXIiLCAiQ29tcG9uZW50IiwgIlJlYWN0IiwgIngiLCAiRXVpSTE4biIsICJfcmVmIiwgIl9yZWYyIiwgInVzZUxvYWRpbmdBcmlhTGFiZWwiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl90ZW1wbGF0ZU9iamVjdCIsICJfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsIiwgInNwaW5uZXJDb2xvcnNDU1MiLCAiYm9yZGVyIiwgImhpZ2hsaWdodCIsICJldWlMb2FkaW5nU3Bpbm5lclN0eWxlcyIsICJfcmVmIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpTG9hZGluZ1NwaW5uZXIiLCAiX3JlZiIsICJzaXplIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfZXhjbHVkZWQiLCAic3R5bGVzIiwgImNsYXNzTmFtZXMiLCAiX2V4dGVuZHMiLCAiUHJvcFR5cGVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpQnV0dG9uQ29udGVudERlcHJlY2F0ZWQiLCAiX3JlZiIsICJpY29uU2l6ZSIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJVUkwiLCAiX2V4Y2x1ZGVkIiwgIl9leGNsdWRlZDIiLCAiX2V4dGVuZHMiLCAib3duS2V5cyIsICJvYmplY3QiLCAia2V5cyIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiQ09MT1JTIiwgIlNJWkVTIiwgIkV1aUJ1dHRvbiIsICJfcmVmIiwgIlByb3BUeXBlcyIsICJfcmVmMiIsICJzaXplIiwgImNsYXNzTmFtZXMiLCAiUmVhY3QiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdCIsICJfdHlwZW9mIiwgIm9iaiIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX2NyZWF0ZUNsYXNzIiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAibyIsICJwIiwgIl9jcmVhdGVTdXBlciIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJzZWxmIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIkV1aU9ic2VydmVyIiwgInJlbmRlciIsICJfdHlwZW9mIiwgIm9iaiIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJvIiwgInAiLCAiX2NyZWF0ZVN1cGVyIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgInNlbGYiLCAiX3R5cGVvZiIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJFdWlSZXNpemVPYnNlcnZlciIsICJtYWtlUmVzaXplT2JzZXJ2ZXIiLCAibm9kZSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18iLCAiX2NvbG9yQ1NTIiwgImV1aUxpbmtIb3ZlckNTUyIsICJldWlMaW5rRm9jdXNDU1MiLCAiZXVpTGlua0NTUyIsICJfcmVmIiwgImV1aUxpbmtTdHlsZXMiLCAiX3JlZjIiLCAib3duS2V5cyIsICJvYmplY3QiLCAia2V5cyIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJldWlUaXRsZSIsICJfcmVmIiwgIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fIiwgImV1aVRpdGxlU3R5bGVzIiwgImV1aVRleHQiLCAiZXVpU2NhbGVUZXh0IiwgImV1aVRleHRTdHlsZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fIiwgIl9yZWYiLCAiZXVpVGV4dENvbG9yU3R5bGVzIiwgIl9yZWYyIiwgIl9leGNsdWRlZCIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJDT0xPUlMiLCAiRXVpVGV4dENvbG9yIiwgIl9yZWYiLCAiY2xvbmVFbGVtZW50IiwgImlzTmFtZWRDb2xvciIsICJzdHlsZXMiLCAiQ29tcG9uZW50IiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiZXVpVGV4dEFsaWduU3R5bGVzIiwgIl9leGNsdWRlZCIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlUZXh0QWxpZ24iLCAiX3JlZiIsICJjbG9uZUVsZW1lbnQiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJzdHlsZXMiLCAiX29iamVjdFNwcmVhZCIsICJQcm9wVHlwZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlUZXh0IiwgIl9yZWYiLCAic2l6ZSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX2V4Y2x1ZGVkIiwgInN0eWxlcyIsICJjbGFzc05hbWVzIiwgIl9leHRlbmRzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIm93bktleXMiLCAib2JqZWN0IiwgImtleXMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgImNvbG9yVG9DbGFzc05hbWVNYXAiLCAiQ09MT1JTIiwgInNpemVUb0NsYXNzTmFtZU1hcCIsICJTSVpFUyIsICJFdWlCdXR0b25FbXB0eSIsICJfcmVmIiwgImljb25TaXplIiwgInNpemUiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiY29sb3JUb0NsYXNzTmFtZU1hcCIsICJDT0xPUlMiLCAic2l6ZVRvQ2xhc3NOYW1lTWFwIiwgIlNJWkVTIiwgIkV1aUJ1dHRvbkljb24iLCAiX3JlZiIsICJpY29uU2l6ZSIsICJzaXplIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9yZWFjdCIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIm5vZGUiLCAiRXVpSW5uZXJUZXh0IiwgIl9yZWYiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJjYW5jZWxGcmFtZSIsICJhbmltYXRpb24iLCAiY3NzIiwgIl90eXBlb2YiLCAib2JqIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgIm8iLCAicCIsICJfY3JlYXRlU3VwZXIiLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAic2VsZiIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIkV1aUF1dG9TaXplciIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X2Nocm9tYV9qcyIsICJpbXBvcnRfY2hyb21hX2pzIiwgIl90eXBlb2YiLCAib2JqIiwgInBhcnNlQ29sb3IiLCAiY2hyb21hVmFsaWQiLCAiX3R5cGVvZiIsICJjaHJvbWEiLCAiX2V4Y2x1ZGVkIiwgIl90b0NvbnN1bWFibGVBcnJheSIsICJfYXJyYXlXaXRob3V0SG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheSIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlU3ByZWFkIiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIl9leHRlbmRzIiwgIm93bktleXMiLCAib2JqZWN0IiwgImtleXMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkNPTE9SUyIsICJpY29uU2lkZVRvQ2xhc3NOYW1lTWFwIiwgIklDT05fU0lERVMiLCAiRXVpQmFkZ2UiLCAiX3JlZiIsICJjbGFzc05hbWVzIiwgIkVsZW1lbnQiLCAiUHJvcFR5cGVzIiwgImNocm9tYSIsICJpc05hbWVkQ29sb3IiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJfdHlwZW9mIiwgIm9iaiIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX2NyZWF0ZUNsYXNzIiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAibyIsICJwIiwgIl9jcmVhdGVTdXBlciIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJzZWxmIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIkV1aVBvcnRhbCIsICJwb3NpdGlvbiIsICJyZW5kZXIiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfdHlwZW9mIiwgIm9iaiIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfY3JlYXRlQ2xhc3MiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJvIiwgInAiLCAiX2NyZWF0ZVN1cGVyIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgInNlbGYiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiRXVpVG9vbFRpcFBvcG92ZXIiLCAicmVuZGVyIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgIl90eXBlb2YiLCAib2JqIiwgIl9leGNsdWRlZCIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX2NyZWF0ZUNsYXNzIiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAibyIsICJwIiwgIl9jcmVhdGVTdXBlciIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJzZWxmIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiZGlzcGxheVRvQ2xhc3NOYW1lTWFwIiwgIkV1aVRvb2xUaXAiLCAicG9zaXRpb24iLCAicmVuZGVyIiwgImNsYXNzTmFtZXMiLCAiYW5jaG9yIiwgIm9uRm9jdXMiLCAib25CbHVyIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVGlwIiwgIl9yZWYiLCAic2l6ZSIsICJwb3NpdGlvbiIsICJQcm9wVHlwZXMiLCAiX2V4Y2x1ZGVkIiwgIl90eXBlb2YiLCAib2JqIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJDT0xPUlMiLCAiU0laRVMiLCAiRXVpQmV0YUJhZGdlIiwgIl9yZWYiLCAic2l6ZSIsICJjbGFzc05hbWVzIiwgImljb24iLCAiRWxlbWVudCIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X2Nocm9tYV9qcyIsICJnZXRTaGFkb3dDb2xvciIsICJjaHJvbWEiLCAiZXVpU2hhZG93WFNtYWxsIiwgIl9yZWYiLCAiX3JlZjIiLCAiZXVpU2hhZG93U21hbGwiLCAiX3JlZjMiLCAiX3JlZjQiLCAiZXVpU2hhZG93TWVkaXVtIiwgIl9yZWY1IiwgIl9yZWY2IiwgInByb3BlcnR5IiwgInYiLCAiZXVpU2hhZG93TGFyZ2UiLCAiX3JlZjciLCAiX3JlZjgiLCAiZXVpU2hhZG93WExhcmdlIiwgInJldmVyc2UiLCAiZXVpU2hhZG93RmxhdCIsICJldWlTaGFkb3ciLCAic2l6ZSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIm93bktleXMiLCAib2JqZWN0IiwgImtleXMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9yZWYiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJzdHlsZXMiLCAiX29iamVjdFNwcmVhZCIsICJjbGFzc05hbWVzIiwgIl9leHRlbmRzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIl9fYXNzaWduIiwgImZyb20iLCAiUmVhY3QiLCAiUmVhY3QiLCAiUmVhY3QiLCAiaW1wb3J0X3JlYWN0IiwgIlJlYWN0IiwgIl9fYXNzaWduIiwgIl9fcmVzdCIsICJkZWZhdWx0cyIsICJtaWRkbGV3YXJlIiwgIngiLCAiY2JzIiwgImZpbHRlciIsICJfX2Fzc2lnbiIsICJSZWFjdCIsICJfX3Jlc3QiLCAiX19hc3NpZ24iLCAiU2lkZUNhciIsICJSZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJSZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJJbkZvY3VzR3VhcmQiLCAiX3JlZiIsICJQcm9wVHlwZXMiLCAiX3JlZiIsICJpbXBvcnRfcmVhY3QiLCAiX2V4dGVuZHMyIiwgIlNpZGVDYXIiLCAiX3JlZiIsICJjYXB0dXJlRm9jdXNSZXN0b3JlIiwgIm9uRm9jdXMiLCAib25CbHVyIiwgImV4dHJhY3RSZWYiLCAiZWZmZWN0Q2FyIiwgIlNpZGVDYXIiLCAiZWZmZWN0Q2FyIiwgIlJlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJvIiwgInAiLCAiX3NldFByb3RvdHlwZU9mIiwgIl90eXBlb2YiLCAibyIsICJfdHlwZW9mIiwgIl90eXBlb2YiLCAiX2RlZmluZVByb3BlcnR5IiwgImltcG9ydF9yZWFjdCIsICJyZWR1Y2VQcm9wc1RvU3RhdGUiLCAiaGFuZGxlU3RhdGVDaGFuZ2VPbkNsaWVudCIsICJTaWRlRWZmZWN0IiwgInBlZWsiLCAicmVuZGVyIiwgIlJlYWN0IiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJ0b0FycmF5IiwgImFzQXJyYXkiLCAibm9kZSIsICJ4IiwgImIiLCAibm9kZSIsICJ0b0FycmF5IiwgInRvQXJyYXkiLCAibm9kZSIsICJ0b0FycmF5IiwgIm5vZGUiLCAicG9zaXRpb24iLCAibm9kZSIsICJhc0FycmF5IiwgInRvQXJyYXkiLCAidG9BcnJheSIsICJub2RlIiwgInRvQXJyYXkiLCAibm9kZSIsICJub2RlIiwgIm5vZGUiLCAibm9kZSIsICJub2RlIiwgImFzQXJyYXkiLCAibm9kZSIsICJhc0FycmF5IiwgIm5vZGUiLCAiZm9jdXNhYmxlIiwgImxpbmUiLCAiZm9jdXNhYmxlIiwgImFzQXJyYXkiLCAibm9kZSIsICJuZXh0IiwgInByZXYiLCAiZm9jdXNPbkJvZHkiLCAiaXNGcmVlRm9jdXMiLCAiZGVmYXVsdFdoaXRlbGlzdCIsICJmb2N1c1doaXRlbGlzdGVkIiwgInJlY29yZFBvcnRhbCIsICJmb2N1c0lzUG9ydGFsZWRQYWlyIiwgImZvY3VzV2FzT3V0c2lkZSIsICJjaGVja0luSG9zdCIsICJ3aXRoaW5Ib3N0IiwgImFjdGl2YXRlVHJhcCIsICJfcmVmIiwgIm5vZGUiLCAiX3JlZjIiLCAiX3JlZjMiLCAib25UcmFwIiwgIm9uQmx1ciIsICJvbkZvY3VzIiwgIkZvY3VzV2F0Y2hlciIsICJGb2N1c1RyYXAiLCAiX3JlZjQiLCAiUHJvcFR5cGVzIiwgIm9uV2luZG93Qmx1ciIsICJhdHRhY2hIYW5kbGVyIiwgImRldGFjaEhhbmRsZXIiLCAiX3JlZjUiLCAiX3JlZjYiLCAiUmVhY3QiLCAiUmVhY3QiLCAiUmVhY3QiLCAiY3NzIiwgInN0eWxlcyIsICJzdHlsZXMiLCAicGFyc2UiLCAieCIsICJub2RlIiwgInN0eWxlcyIsICJwb3NpdGlvbiIsICJleHRyYWN0UmVmIiwgIngiLCAiU3R5bGUiLCAibm9kZSIsICJzaWRlY2FyX2RlZmF1bHQiLCAiUmVhY3QiLCAibm9kZSIsICJ4IiwgIlJlYWN0IiwgIlN0eWxlIiwgImltcG9ydF9yZWFjdCIsICJleHRyYWN0UmVmIiwgIm5vZGUiLCAic2lkZWNhcl9kZWZhdWx0IiwgImVmZmVjdENhciIsICJzaWRlY2FyX2RlZmF1bHQiLCAiRm9jdXNPbiIsICJfdHlwZW9mIiwgIm9iaiIsICJfZXhjbHVkZWQiLCAib3duS2V5cyIsICJvYmplY3QiLCAia2V5cyIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl9jcmVhdGVDbGFzcyIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgIm8iLCAicCIsICJfY3JlYXRlU3VwZXIiLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAic2VsZiIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIkV1aUZvY3VzVHJhcCIsICJub2RlIiwgInJlbmRlciIsICJGb2N1c09uIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgIl90eXBlb2YiLCAib2JqIiwgIm93bktleXMiLCAib2JqZWN0IiwgImtleXMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAibyIsICJwIiwgIl9jcmVhdGVTdXBlciIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJzZWxmIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiRXVpTXV0YXRpb25PYnNlcnZlciIsICJtYWtlTXV0YXRpb25PYnNlcnZlciIsICJub2RlIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJfdHlwZW9mIiwgIm9iaiIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfY3JlYXRlQ2xhc3MiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJvIiwgInAiLCAiX2NyZWF0ZVN1cGVyIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgInNlbGYiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJFdWlPdXRzaWRlQ2xpY2tEZXRlY3RvciIsICJyZW5kZXIiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJldWlQb3BvdmVyQXJyb3dTdHlsZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlQb3BvdmVyQXJyb3ciLCAiX3JlZiIsICJwb3NpdGlvbiIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX2V4Y2x1ZGVkIiwgInN0eWxlcyIsICJfZXh0ZW5kcyIsICJQcm9wVHlwZXMiLCAiZXVpUG9wb3ZlclN0eWxlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fIiwgIl9yZWYiLCAiX3JlZjIiLCAiZXVpUGFuZWxTdHlsZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpUGFuZWwiLCAiX3JlZiIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX2V4Y2x1ZGVkIiwgInN0eWxlcyIsICJjbGFzc05hbWVzIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfZXh0ZW5kcyIsICJQcm9wVHlwZXMiLCAiZXVpUG9wb3ZlclBhbmVsU3R5bGVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfdG9Db25zdW1hYmxlQXJyYXkiLCAiX2FycmF5V2l0aG91dEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXkiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVNwcmVhZCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpUG9wb3ZlclBhbmVsIiwgIl9yZWYiLCAicG9zaXRpb24iLCAiY2xhc3NOYW1lcyIsICJzdHlsZXMiLCAiUHJvcFR5cGVzIiwgIl90eXBlb2YiLCAib2JqIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAib3duS2V5cyIsICJvYmplY3QiLCAia2V5cyIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9Db25zdW1hYmxlQXJyYXkiLCAiX2FycmF5V2l0aG91dEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXkiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVNwcmVhZCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX2NyZWF0ZUNsYXNzIiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAibyIsICJwIiwgIl9jcmVhdGVTdXBlciIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJzZWxmIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9yZWYiLCAiX3JlZjIiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX3JlZjMiLCAiX3JlZjQiLCAiX2luaGVyaXRzIiwgIkV1aVBvcG92ZXIiLCAiX2NyZWF0ZVN1cGVyIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydHkiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJfdG9Db25zdW1hYmxlQXJyYXkiLCAiX3JlZjUiLCAiZHVyYXRpb25NYXRjaCIsICJkZWxheU1hdGNoIiwgIl9yZWY2IiwgInBvc2l0aW9uIiwgIl9vYmplY3RTcHJlYWQiLCAibm9kZSIsICJfY3JlYXRlQ2xhc3MiLCAicmVuZGVyIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfZXhjbHVkZWQiLCAic3R5bGVzIiwgImNsYXNzTmFtZXMiLCAiaW5pdGlhbEZvY3VzIiwgIl9leHRlbmRzIiwgIlByb3BUeXBlcyIsICJldWlGb3JtTWF4V2lkdGgiLCAiX3JlZiIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSW5wdXRQb3BvdmVyIiwgIl9yZWYiLCAib25LZXlEb3duIiwgImVsIiwgImNsYXNzbmFtZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIl9leGNsdWRlZCIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlUaXRsZSIsICJfcmVmIiwgInNpemUiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJzdHlsZXMiLCAiY2xhc3NOYW1lcyIsICJfb2JqZWN0U3ByZWFkIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpQ2FyZFNlbGVjdCIsICJfcmVmIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpQ2FyZCIsICJfcmVmIiwgImljb24iLCAib3V0ZXJPbkNsaWNrIiwgImNsYXNzTmFtZXMiLCAiUmVhY3QiLCAibm9kZSIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl90eXBlb2YiLCAib2JqIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl9jcmVhdGVDbGFzcyIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgIm8iLCAicCIsICJfY3JlYXRlU3VwZXIiLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAic2VsZiIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJUWVBFUyIsICJFdWlDaGVja2JveCIsICJyZW5kZXIiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiaXNWYWxpZEVsZW1lbnQiLCAiX3JlZiIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpRmxleEl0ZW0iLCAiX3JlZiIsICJDb21wb25lbnQiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJzaXplVG9DbGFzc05hbWVNYXAiLCAiU0laRVMiLCAiRXVpRm9ybUNvbnRyb2xMYXlvdXRDbGVhckJ1dHRvbiIsICJfcmVmIiwgInNpemUiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpRm9ybUNvbnRyb2xMYXlvdXRDdXN0b21JY29uIiwgIl9yZWYiLCAic2l6ZSIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJfdHlwZW9mIiwgIm9iaiIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfY3JlYXRlQ2xhc3MiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJvIiwgInAiLCAiX2NyZWF0ZVN1cGVyIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgInNlbGYiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJpY29uIiwgIl9pbmhlcml0cyIsICJFdWlGb3JtQ29udHJvbExheW91dEljb25zIiwgIl9jcmVhdGVTdXBlciIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2NyZWF0ZUNsYXNzIiwgInJlbmRlciIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlGb3JtTGFiZWwiLCAiX3JlZiIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJfdHlwZW9mIiwgIm9iaiIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfY3JlYXRlQ2xhc3MiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJvIiwgInAiLCAiX2NyZWF0ZVN1cGVyIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgInNlbGYiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJFdWlGb3JtQ29udHJvbExheW91dCIsICJyZW5kZXIiLCAiaWNvbiIsICJhcHBlbmQiLCAiY2xhc3NOYW1lcyIsICJSZWFjdCIsICJzdHJpbmciLCAibm9kZSIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIkV1aVZhbGlkYXRhYmxlQ29udHJvbCIsICJfcmVmIiwgIlByb3BUeXBlcyIsICJfcmVmIiwgImljb24iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl90eXBlb2YiLCAib2JqIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl9jcmVhdGVDbGFzcyIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgIm8iLCAicCIsICJfY3JlYXRlU3VwZXIiLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAic2VsZiIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJFdWlGaWVsZFNlYXJjaCIsICJvblNlYXJjaCIsICJvbkNoYW5nZSIsICJyZW5kZXIiLCAiYXBwZW5kIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUZvcm1FcnJvclRleHQiLCAiX3JlZiIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlGb3JtSGVscFRleHQiLCAiX3JlZiIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX3R5cGVvZiIsICJvYmoiLCAiX2V4Y2x1ZGVkIiwgIl90b0NvbnN1bWFibGVBcnJheSIsICJfYXJyYXlXaXRob3V0SG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheSIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlU3ByZWFkIiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIl9leHRlbmRzIiwgIm93bktleXMiLCAib2JqZWN0IiwgImtleXMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfY3JlYXRlQ2xhc3MiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJvIiwgInAiLCAiX2NyZWF0ZVN1cGVyIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgInNlbGYiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJkaXNwbGF5VG9DbGFzc05hbWVNYXAiLCAiRElTUExBWVMiLCAiRXVpRm9ybVJvdyIsICJfcmVmIiwgInJlbmRlciIsICJfcmVmMiIsICJjbGFzc05hbWVzIiwgImhlbHBUZXh0IiwgImVycm9yIiwgIlJlYWN0IiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfdHlwZW9mIiwgIm9iaiIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl9jcmVhdGVDbGFzcyIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgIm8iLCAicCIsICJfY3JlYXRlU3VwZXIiLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAic2VsZiIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgInNpemVUb0NsYXNzTmFtZU1hcCIsICJTSVpFUyIsICJFdWlDb250ZXh0TWVudUl0ZW0iLCAicmVuZGVyIiwgImljb24iLCAic2l6ZSIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJfdHlwZW9mIiwgIm9iaiIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfY3JlYXRlQ2xhc3MiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJvIiwgInAiLCAiX2NyZWF0ZVN1cGVyIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgInNlbGYiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiU0laRVMiLCAiRXVpQ29udGV4dE1lbnVQYW5lbCIsICJub2RlIiwgInJlbmRlciIsICJzaXplIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJldWlIb3Jpem9udGFsUnVsZVN0eWxlcyIsICJfcmVmIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfZGVmaW5lUHJvcGVydHkiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUhvcml6b250YWxSdWxlIiwgIl9yZWYiLCAic2l6ZSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX2V4Y2x1ZGVkIiwgInN0eWxlcyIsICJjbGFzc05hbWVzIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfZXh0ZW5kcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpU3dpdGNoIiwgIl9yZWYiLCAiY2xhc3NOYW1lcyIsICJSZWFjdCIsICJQcm9wVHlwZXMiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJzZWxmIiwgImlzRXF1YWwiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiaGFzTmF0aXZlUGVyZm9ybWFuY2VOb3ciLCAicGVyZm9ybWFuY2UiLCAibm93IiwgIkRhdGUiLCAiY2FuY2VsVGltZW91dCIsICJ0aW1lb3V0SUQiLCAiY2FuY2VsQW5pbWF0aW9uRnJhbWUiLCAiaWQiLCAicmVxdWVzdFRpbWVvdXQiLCAiY2FsbGJhY2siLCAiZGVsYXkiLCAic3RhcnQiLCAidGljayIsICJjYWxsIiwgInJlcXVlc3RBbmltYXRpb25GcmFtZSIsICJzaXplIiwgImdldFNjcm9sbGJhclNpemUiLCAicmVjYWxjdWxhdGUiLCAiZGl2IiwgImRvY3VtZW50IiwgImNyZWF0ZUVsZW1lbnQiLCAic3R5bGUiLCAid2lkdGgiLCAiaGVpZ2h0IiwgIm92ZXJmbG93IiwgImJvZHkiLCAiYXBwZW5kQ2hpbGQiLCAib2Zmc2V0V2lkdGgiLCAiY2xpZW50V2lkdGgiLCAicmVtb3ZlQ2hpbGQiLCAiY2FjaGVkUlRMUmVzdWx0IiwgImdldFJUTE9mZnNldFR5cGUiLCAib3V0ZXJEaXYiLCAib3V0ZXJTdHlsZSIsICJkaXJlY3Rpb24iLCAiaW5uZXJEaXYiLCAiaW5uZXJTdHlsZSIsICJzY3JvbGxMZWZ0IiwgImRldldhcm5pbmdzT3ZlcnNjYW5Db3VudCIsICJkZXZXYXJuaW5nc092ZXJzY2FuUm93c0NvbHVtbnNDb3VudCIsICJkZXZXYXJuaW5nc1RhZ05hbWUiLCAicHJvY2VzcyIsICJ3aW5kb3ciLCAiV2Vha1NldCIsICJJU19TQ1JPTExJTkdfREVCT1VOQ0VfSU5URVJWQUwiLCAiZGVmYXVsdEl0ZW1LZXkiLCAiaW5kZXgiLCAiZGF0YSIsICJkZXZXYXJuaW5nc0RpcmVjdGlvbiIsICJkZXZXYXJuaW5nc1RhZ05hbWUiLCAicHJvY2VzcyIsICJ3aW5kb3ciLCAiV2Vha1NldCIsICJjcmVhdGVMaXN0Q29tcG9uZW50IiwgIl9yZWYiLCAiZ2V0SXRlbU9mZnNldCIsICJnZXRFc3RpbWF0ZWRUb3RhbFNpemUiLCAiZ2V0SXRlbVNpemUiLCAiZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQiLCAiZ2V0U3RhcnRJbmRleEZvck9mZnNldCIsICJnZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4IiwgImluaXRJbnN0YW5jZVByb3BzIiwgInNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UiLCAidmFsaWRhdGVQcm9wcyIsICJwcm9wcyIsICJfaW5zdGFuY2VQcm9wcyIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIl9vdXRlclJlZiIsICJfcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCIsICJzdGF0ZSIsICJpbnN0YW5jZSIsICJpc1Njcm9sbGluZyIsICJzY3JvbGxEaXJlY3Rpb24iLCAic2Nyb2xsT2Zmc2V0IiwgImluaXRpYWxTY3JvbGxPZmZzZXQiLCAic2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkIiwgIl9jYWxsT25JdGVtc1JlbmRlcmVkIiwgIm1lbW9pemVPbmUiLCAib3ZlcnNjYW5TdGFydEluZGV4IiwgIm92ZXJzY2FuU3RvcEluZGV4IiwgInZpc2libGVTdGFydEluZGV4IiwgInZpc2libGVTdG9wSW5kZXgiLCAib25JdGVtc1JlbmRlcmVkIiwgIl9jYWxsT25TY3JvbGwiLCAib25TY3JvbGwiLCAiX2dldEl0ZW1TdHlsZSIsICJkaXJlY3Rpb24iLCAiaXRlbVNpemUiLCAibGF5b3V0IiwgIml0ZW1TdHlsZUNhY2hlIiwgIl9nZXRJdGVtU3R5bGVDYWNoZSIsICJzdHlsZSIsICJoYXNPd25Qcm9wZXJ0eSIsICJvZmZzZXQiLCAic2l6ZSIsICJpc0hvcml6b250YWwiLCAiaXNSdGwiLCAib2Zmc2V0SG9yaXpvbnRhbCIsICJwb3NpdGlvbiIsICJsZWZ0IiwgInVuZGVmaW5lZCIsICJyaWdodCIsICJ0b3AiLCAiaGVpZ2h0IiwgIndpZHRoIiwgIl8iLCAiX18iLCAiX19fIiwgIl9vblNjcm9sbEhvcml6b250YWwiLCAiZXZlbnQiLCAiY3VycmVudFRhcmdldCIsICJjbGllbnRXaWR0aCIsICJzY3JvbGxMZWZ0IiwgInNjcm9sbFdpZHRoIiwgInNldFN0YXRlIiwgInByZXZTdGF0ZSIsICJnZXRSVExPZmZzZXRUeXBlIiwgIk1hdGgiLCAibWF4IiwgIm1pbiIsICJfcmVzZXRJc1Njcm9sbGluZ0RlYm91bmNlZCIsICJfb25TY3JvbGxWZXJ0aWNhbCIsICJjbGllbnRIZWlnaHQiLCAic2Nyb2xsSGVpZ2h0IiwgInNjcm9sbFRvcCIsICJfb3V0ZXJSZWZTZXR0ZXIiLCAicmVmIiwgIm91dGVyUmVmIiwgImN1cnJlbnQiLCAiY2FuY2VsVGltZW91dCIsICJyZXF1ZXN0VGltZW91dCIsICJfcmVzZXRJc1Njcm9sbGluZyIsICJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMiLCAibmV4dFByb3BzIiwgInZhbGlkYXRlU2hhcmVkUHJvcHMiLCAic2Nyb2xsVG8iLCAic2Nyb2xsVG9JdGVtIiwgImFsaWduIiwgIml0ZW1Db3VudCIsICJzY3JvbGxiYXJTaXplIiwgImdldFNjcm9sbGJhclNpemUiLCAiY29tcG9uZW50RGlkTW91bnQiLCAiX2NhbGxQcm9wc0NhbGxiYWNrcyIsICJjb21wb25lbnREaWRVcGRhdGUiLCAiY29tcG9uZW50V2lsbFVubW91bnQiLCAicmVuZGVyIiwgImNoaWxkcmVuIiwgImNsYXNzTmFtZSIsICJpbm5lclJlZiIsICJpbm5lckVsZW1lbnRUeXBlIiwgImlubmVyVGFnTmFtZSIsICJpdGVtRGF0YSIsICJpdGVtS2V5IiwgIm91dGVyRWxlbWVudFR5cGUiLCAib3V0ZXJUYWdOYW1lIiwgInVzZUlzU2Nyb2xsaW5nIiwgIl9nZXRSYW5nZVRvUmVuZGVyIiwgInN0YXJ0SW5kZXgiLCAic3RvcEluZGV4IiwgIml0ZW1zIiwgInB1c2giLCAiY3JlYXRlRWxlbWVudCIsICJrZXkiLCAiZXN0aW1hdGVkVG90YWxTaXplIiwgIm92ZXJmbG93IiwgIldlYmtpdE92ZXJmbG93U2Nyb2xsaW5nIiwgIndpbGxDaGFuZ2UiLCAicG9pbnRlckV2ZW50cyIsICJvdmVyc2NhbkNvdW50IiwgIm92ZXJzY2FuQmFja3dhcmQiLCAib3ZlcnNjYW5Gb3J3YXJkIiwgIlB1cmVDb21wb25lbnQiLCAiZGVmYXVsdFByb3BzIiwgIl9yZWYyIiwgIl9yZWYzIiwgImhhcyIsICJhZGQiLCAiY29uc29sZSIsICJ3YXJuIiwgIkVycm9yIiwgIkZpeGVkU2l6ZUxpc3QiLCAiY3JlYXRlTGlzdENvbXBvbmVudCIsICJnZXRJdGVtT2Zmc2V0IiwgIl9yZWYiLCAiaW5kZXgiLCAiaXRlbVNpemUiLCAiZ2V0SXRlbVNpemUiLCAiX3JlZjIiLCAiZ2V0RXN0aW1hdGVkVG90YWxTaXplIiwgIl9yZWYzIiwgIml0ZW1Db3VudCIsICJnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudCIsICJfcmVmNCIsICJhbGlnbiIsICJzY3JvbGxPZmZzZXQiLCAiaW5zdGFuY2VQcm9wcyIsICJzY3JvbGxiYXJTaXplIiwgImRpcmVjdGlvbiIsICJoZWlnaHQiLCAibGF5b3V0IiwgIndpZHRoIiwgImlzSG9yaXpvbnRhbCIsICJzaXplIiwgImxhc3RJdGVtT2Zmc2V0IiwgIk1hdGgiLCAibWF4IiwgIm1heE9mZnNldCIsICJtaW4iLCAibWluT2Zmc2V0IiwgIm1pZGRsZU9mZnNldCIsICJyb3VuZCIsICJjZWlsIiwgImZsb29yIiwgImdldFN0YXJ0SW5kZXhGb3JPZmZzZXQiLCAiX3JlZjUiLCAib2Zmc2V0IiwgImdldFN0b3BJbmRleEZvclN0YXJ0SW5kZXgiLCAiX3JlZjYiLCAic3RhcnRJbmRleCIsICJudW1WaXNpYmxlSXRlbXMiLCAiaW5pdEluc3RhbmNlUHJvcHMiLCAicHJvcHMiLCAic2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSIsICJ2YWxpZGF0ZVByb3BzIiwgIl9yZWY3IiwgInByb2Nlc3MiLCAiRXJyb3IiLCAic2hhbGxvd0RpZmZlcnMiLCAicHJldiIsICJuZXh0IiwgImF0dHJpYnV0ZSIsICJhcmVFcXVhbCIsICJwcmV2UHJvcHMiLCAibmV4dFByb3BzIiwgInByZXZTdHlsZSIsICJzdHlsZSIsICJwcmV2UmVzdCIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJfZXhjbHVkZWQiLCAibmV4dFN0eWxlIiwgIm5leHRSZXN0IiwgIl9leGNsdWRlZDIiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fIiwgIl9yZWYiLCAiZXVpU3BhY2VyU3R5bGVzIiwgIl9yZWYyIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfZGVmaW5lUHJvcGVydHkiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVNwYWNlciIsICJfcmVmIiwgInNpemUiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJzdHlsZXMiLCAiY2xhc3NOYW1lcyIsICJfZGVmaW5lUHJvcGVydHkiLCAiX2V4dGVuZHMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJldWlNYXJrU3R5bGVzIiwgIl9yZWYiLCAiX3JlZjIiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlNYXJrIiwgIl9yZWYiLCAidXNlVGhlbWUiLCAic3R5bGVzIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiaGlnaGxpZ2h0IiwgIm1hdGNoIiwgImdldEhpZ2h0bGlnaHRXb3JkcyIsICJtYXRjaGVzIiwgImZpbGxJbkNodW5rcyIsICJhcHBlbmQiLCAiRXVpSGlnaGxpZ2h0IiwgIl9yZWYiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJFdWlDb21ib0JveFRpdGxlIiwgIl9yZWYiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl90eXBlb2YiLCAib2JqIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl9jcmVhdGVDbGFzcyIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgIm8iLCAicCIsICJfY3JlYXRlU3VwZXIiLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAic2VsZiIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJyZXNvbHZlSWNvbkFuZENvbG9yIiwgIkV1aUZpbHRlclNlbGVjdEl0ZW0iLCAicmVuZGVyIiwgImNsYXNzTmFtZXMiLCAiaWNvbiIsICJfcmVmIiwgIlByb3BUeXBlcyIsICJfdHlwZW9mIiwgIm9iaiIsICJfZXhjbHVkZWQiLCAiX2V4Y2x1ZGVkMiIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX2NyZWF0ZUNsYXNzIiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAibyIsICJwIiwgIl9jcmVhdGVTdXBlciIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJzZWxmIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiRXVpQ29tYm9Cb3hPcHRpb25zTGlzdCIsICJfcmVmIiwgInJlbmRlciIsICJnZXRTZWxlY3RlZE9wdGlvbkZvclNlYXJjaFZhbHVlIiwgInBvc2l0aW9uIiwgImRlbGltaXRlciIsICJoaWdobGlnaHRTZWFyY2hWYWx1ZSIsICJzZWFyY2hWYWx1ZSIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJfdG9Db25zdW1hYmxlQXJyYXkiLCAiX2FycmF5V2l0aG91dEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXkiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVNwcmVhZCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJmbGF0dGVuT3B0aW9uR3JvdXBzIiwgImdldFNlbGVjdGVkT3B0aW9uRm9yU2VhcmNoVmFsdWUiLCAiY29sbGVjdE1hdGNoaW5nT3B0aW9uIiwgImdldE1hdGNoaW5nT3B0aW9ucyIsICJvYmplY3QiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfdHlwZW9mIiwgIm9iaiIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfY3JlYXRlQ2xhc3MiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJvIiwgInAiLCAiX2NyZWF0ZVN1cGVyIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgInNlbGYiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiRXVpQ29tYm9Cb3hQaWxsIiwgInJlbmRlciIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl90eXBlb2YiLCAib2JqIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfY3JlYXRlQ2xhc3MiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJvIiwgInAiLCAiX2NyZWF0ZVN1cGVyIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgInNlbGYiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiRXVpQ29tYm9Cb3hJbnB1dCIsICJyZW5kZXIiLCAiYXBwZW5kIiwgIm9uQ2xpY2siLCAiaWNvbiIsICJjbGFzc05hbWVzIiwgIkF1dG9zaXplSW5wdXQiLCAiUHJvcFR5cGVzIiwgIl90eXBlb2YiLCAib2JqIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAib3duS2V5cyIsICJvYmplY3QiLCAia2V5cyIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX2NyZWF0ZUNsYXNzIiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAibyIsICJwIiwgIl9jcmVhdGVTdXBlciIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJzZWxmIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiRXVpQ29tYm9Cb3giLCAiX3JlZiIsICJwb3NpdGlvbiIsICJfcmVmMiIsICJfcmVmMyIsICJkZWxpbWl0ZXIiLCAicmVuZGVyIiwgIm9uQmx1ciIsICJhcHBlbmQiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIm93bktleXMiLCAib2JqZWN0IiwgImtleXMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVBhZ2luYXRpb25CdXR0b24iLCAiX3JlZiIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX2V4dGVuZHMiLCAiVFlQRVMiLCAiRXVpUGFnaW5hdGlvbkJ1dHRvbkFycm93IiwgIl9yZWYiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiX2V4Y2x1ZGVkIiwgIm93bktleXMiLCAib2JqZWN0IiwgImtleXMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVBhZ2luYXRpb24iLCAiX3JlZiIsICJzYWZlQ2xpY2siLCAiY2xhc3NOYW1lcyIsICJhY2Nlc3NpYmxlUGFnZVN0cmluZyIsICJQcm9wVHlwZXMiLCAiUGFnaW5hdGlvbkJ1dHRvbldyYXBwZXIiLCAiX3JlZjIiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9zbGljZWRUb0FycmF5IiwgIl9hcnJheVdpdGhIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5TGltaXQiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVJlc3QiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVRhYmxlUGFnaW5hdGlvbiIsICJfcmVmIiwgIlJlYWN0IiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlUYWIiLCAiX3JlZiIsICJhcHBlbmQiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAic2l6ZVRvQ2xhc3NOYW1lTWFwIiwgIlNJWkVTIiwgIl9yZWYiLCAic2l6ZSIsICJjbGFzc05hbWVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJfdHlwZW9mIiwgIm9iaiIsICJfZXhjbHVkZWQiLCAiX2V4Y2x1ZGVkMiIsICJfZXh0ZW5kcyIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX2NyZWF0ZUNsYXNzIiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAibyIsICJwIiwgIl9jcmVhdGVTdXBlciIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJzZWxmIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiX2luaGVyaXRzIiwgIkV1aVRhYmJlZENvbnRlbnQiLCAiX2NyZWF0ZVN1cGVyIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydHkiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJfY3JlYXRlQ2xhc3MiLCAicmVuZGVyIiwgInNpemUiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJfcmVmIiwgIl9leHRlbmRzIiwgIl9leGNsdWRlZDIiLCAiX29iamVjdFNwcmVhZCIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIl90eXBlb2YiLCAib2JqIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfY3JlYXRlQ2xhc3MiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJvIiwgInAiLCAiX2NyZWF0ZVN1cGVyIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgInNlbGYiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiRXVpRGVsYXlSZW5kZXIiLCAiX3JlZiIsICJyZW5kZXIiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJfcmVmIiwgIl9yZWYyIiwgImV1aUhlYWx0aFN0eWxlcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUhlYWx0aCIsICJfcmVmIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfZXhjbHVkZWQiLCAic3R5bGVzIiwgImNsYXNzTmFtZXMiLCAiX2V4dGVuZHMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3QiLCAiRXVpVXRpbGl0eUNsYXNzZXMiLCAiaW1wb3J0X3JlYWN0IiwgIkV1aUNhY2hlUHJvdmlkZXIiLCAiX3JlZiIsICJSZWFjdCIsICJpc0Vtb3Rpb25DYWNoZU9iamVjdCIsICJFdWlQcm92aWRlciIsICJfcmVmIiwgIlJlYWN0IiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfdHlwZW9mIiwgIm9iaiIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl90b0NvbnN1bWFibGVBcnJheSIsICJfYXJyYXlXaXRob3V0SG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheSIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlU3ByZWFkIiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfY3JlYXRlQ2xhc3MiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJvIiwgInAiLCAiX2NyZWF0ZVN1cGVyIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgInNlbGYiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJfZGVmaW5lUHJvcGVydHkiLCAieCIsICJkaXNwbGF5VG9DbGFzc05hbWVNYXAiLCAiRXVpVHJlZVZpZXciLCAiX3JlZiIsICJfcmVmMiIsICJub2RlIiwgInJlbmRlciIsICJjbGFzc05hbWVzIiwgIlJlYWN0IiwgInJlZiIsICJfcmVmMyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJnZXRTZWFyY2hhYmxlTGFiZWwiLCAiZ2V0U2VsZWN0ZWRPcHRpb25Gb3JTZWFyY2hWYWx1ZSIsICJjb2xsZWN0TWF0Y2hpbmdPcHRpb24iLCAiZ2V0TWF0Y2hpbmdPcHRpb25zIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpU2VsZWN0YWJsZVNlYXJjaCIsICJfcmVmIiwgImdldE1hdGNoaW5nT3B0aW9ucyIsICJjbGFzc05hbWVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVNlbGVjdGFibGVNZXNzYWdlIiwgIl9yZWYiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9yZWFjdCIsICJfdHlwZW9mIiwgIm9iaiIsICJfZXhjbHVkZWQiLCAiX2V4Y2x1ZGVkMiIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl9jcmVhdGVDbGFzcyIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgIm8iLCAicCIsICJfY3JlYXRlU3VwZXIiLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAic2VsZiIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJyZXNvbHZlSWNvbkFuZENvbG9yIiwgInBhZGRpbmdTaXplVG9DbGFzc05hbWVNYXAiLCAiUEFERElOR19TSVpFUyIsICJFdWlTZWxlY3RhYmxlTGlzdEl0ZW0iLCAicmVuZGVyIiwgImFwcGVuZCIsICJjbGFzc05hbWVzIiwgImljb24iLCAiUHJvcFR5cGVzIiwgIl90eXBlb2YiLCAib2JqIiwgIl9leGNsdWRlZCIsICJfZXhjbHVkZWQyIiwgIl9leGNsdWRlZDMiLCAib3duS2V5cyIsICJvYmplY3QiLCAia2V5cyIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl9jcmVhdGVDbGFzcyIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgIm8iLCAicCIsICJfY3JlYXRlU3VwZXIiLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAic2VsZiIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIkV1aVNlbGVjdGFibGVMaXN0IiwgIl9yZWYiLCAiYXBwZW5kIiwgIm9wdGlvbiIsICJfcmVmMiIsICJyZW5kZXIiLCAiY2xhc3NOYW1lcyIsICJfcmVmMyIsICJSZWFjdCIsICJQcm9wVHlwZXMiLCAiX3R5cGVvZiIsICJvYmoiLCAiX2V4Y2x1ZGVkIiwgIl9leGNsdWRlZDIiLCAiX2V4Y2x1ZGVkMyIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIl9leHRlbmRzIiwgIm93bktleXMiLCAib2JqZWN0IiwgImtleXMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfY3JlYXRlQ2xhc3MiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJvIiwgInAiLCAiX2NyZWF0ZVN1cGVyIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgInNlbGYiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJFdWlTZWxlY3RhYmxlIiwgIl9yZWYiLCAiZ2V0TWF0Y2hpbmdPcHRpb25zIiwgImluaXRpYWxTZWFyY2hWYWx1ZSIsICJyZW5kZXIiLCAiX3JlZjIiLCAiX3JlZjMiLCAiY2xhc3NOYW1lcyIsICJSZWFjdCIsICJnZXRBY2Nlc3NpYmxlTmFtZSIsICJpbnB1dFJlZiIsICJub2RlIiwgIl9kZWZhdWx0IiwgIl9yZWY0IiwgInJlc3VsdHNMZW5ndGgiLCAiX3JlZjUiLCAiX3JlZjYiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgImNvbG9yVG9DbGFzc05hbWVNYXAiLCAiQ09MT1JTIiwgIkV1aVN1Z2dlc3RJdGVtIiwgIl9yZWYiLCAiY2xhc3NOYW1lcyIsICJSZWFjdCIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9zbGljZWRUb0FycmF5IiwgIl9hcnJheVdpdGhIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5TGltaXQiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVJlc3QiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVN1Z2dlc3QiLCAiX3JlZiIsICJvbkJsdXIiLCAib25Gb2N1cyIsICJhcHBlbmQiLCAib3BlblBvcG92ZXIiLCAiY2xvc2VQb3BvdmVyIiwgInNlYXJjaE9uRm9jdXMiLCAic2VhcmNoT25CbHVyIiwgInNlYXJjaE9uSW5wdXQiLCAic2VhcmNoT25DaGFuZ2UiLCAiaWNvbiIsICJjbGFzc05hbWVzIiwgIlJlYWN0IiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlUYWJsZSIsICJfcmVmIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVRhYmxlQm9keSIsICJfcmVmIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlUYWJsZUZvb3RlciIsICJfcmVmIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX2V4Y2x1ZGVkIiwgIm93bktleXMiLCAib2JqZWN0IiwgImtleXMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgInJlc29sdmVXaWR0aEFzU3R5bGUiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlUYWJsZUZvb3RlckNlbGwiLCAiX3JlZiIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlUYWJsZUhlYWRlciIsICJfcmVmIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJDZWxsQ29udGVudHMiLCAiX3JlZiIsICJFdWlUYWJsZUhlYWRlckNlbGwiLCAiX3JlZjIiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpVGFibGVIZWFkZXJDZWxsQ2hlY2tib3giLCAiX3JlZiIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlUYWJsZUhlYWRlck1vYmlsZSIsICJfcmVmIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlUYWJsZVNvcnRNb2JpbGVJdGVtIiwgIl9yZWYiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiX3R5cGVvZiIsICJvYmoiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX2NyZWF0ZUNsYXNzIiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAibyIsICJwIiwgIl9jcmVhdGVTdXBlciIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJzZWxmIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIkV1aVRhYmxlU29ydE1vYmlsZSIsICJyZW5kZXIiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpVGFibGVSb3ciLCAiX3JlZiIsICJjbGFzc05hbWVzIiwgIm9uS2V5RG93biIsICJvbktleVVwIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIm93bktleXMiLCAib2JqZWN0IiwgImtleXMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVRhYmxlUm93Q2VsbCIsICJfcmVmIiwgImNsYXNzTmFtZXMiLCAiY2hpbGRyZW4iLCAiUmVhY3QiLCAiRWxlbWVudCIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpVGFibGVSb3dDZWxsQ2hlY2tib3giLCAiX3JlZiIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIl90eXBlb2YiLCAib2JqIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfY3JlYXRlQ2xhc3MiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJvIiwgInAiLCAiX2NyZWF0ZVN1cGVyIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgInNlbGYiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiQ29sbGFwc2VkSXRlbUFjdGlvbnMiLCAicmVuZGVyIiwgIm9uRm9jdXMiLCAiY29udHJvbHMiLCAiaWNvbiIsICJpc1N0cmluZyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9yZWFjdCIsICJEZWZhdWx0SXRlbUFjdGlvbiIsICJfcmVmIiwgImlzU3RyaW5nIiwgImljb24iLCAiUmVhY3QiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIl90eXBlb2YiLCAib2JqIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfY3JlYXRlQ2xhc3MiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJvIiwgInAiLCAiX2NyZWF0ZVN1cGVyIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgInNlbGYiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiQ3VzdG9tSXRlbUFjdGlvbiIsICJyZW5kZXIiLCAiUHJvcFR5cGVzIiwgImlzQ3VzdG9tSXRlbUFjdGlvbiIsICJFeHBhbmRlZEl0ZW1BY3Rpb25zIiwgIl9yZWYiLCAiUmVhY3QiLCAiY2xhc3NOYW1lcyIsICJpbXBvcnRfcmVhY3QiLCAiZGVmYXVsdHMiLCAiUGFnaW5hdGlvbkJhciIsICJfcmVmIiwgIl90eXBlb2YiLCAib2JqIiwgIl9leGNsdWRlZCIsICJfZXhjbHVkZWQyIiwgIl90b0NvbnN1bWFibGVBcnJheSIsICJfYXJyYXlXaXRob3V0SG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheSIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlU3ByZWFkIiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfY3JlYXRlQ2xhc3MiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJvIiwgInAiLCAiX2NyZWF0ZVN1cGVyIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgInNlbGYiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJyZW5kZXIiLCAiaXNGdW5jdGlvbiIsICJjb2x1bW4iLCAiX3JlZiIsICJfcmVmMiIsICJ4IiwgIkV1aUJhc2ljVGFibGUiLCAibGlzdGVuZXIiLCAib25DaGFuZ2UiLCAiX3JlZjMiLCAiX3JlZjQiLCAic2l6ZSIsICJjbGFzc05hbWVzIiwgIl9yZWY1IiwgIl9yZWY2IiwgIl9yZWY3IiwgInNlbGVjdGlvbiIsICJhY3Rpb25FbmFibGVkIiwgIml0ZW0iLCAiX3JlZjgiLCAiUHJvcFR5cGVzIiwgIlN1YnNjcmliYWJsZSIsICJ4IiwgIm5vb3AiLCAiYXNBcnJheSIsICJpc1BsYWluT2JqZWN0IiwgImIiLCAiY29weSIsICJGb2N1c01hbmFnZXIiLCAib25Gb2N1cyIsICJsaXN0ZW5lciIsICJPbmxpbmVNYW5hZ2VyIiwgImxpc3RlbmVyIiwgIkNhbmNlbGxlZEVycm9yIiwgIlJldHJ5ZXIiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAicGF1c2UiLCAicnVuIiwgImNhbmNlbEZuIiwgIk5vdGlmeU1hbmFnZXIiLCAiUXVlcnkiLCAibm9vcCIsICJpc1N0YWxlIiwgIm9uRm9jdXMiLCAieCIsICJmZXRjaCIsICJnZXQiLCAiZmV0Y2hGbiIsICJnZXREZWZhdWx0U3RhdGUiLCAicmVkdWNlciIsICJRdWVyeUNhY2hlIiwgIngiLCAiZ2V0IiwgIm9uRm9jdXMiLCAiTXV0YXRpb24iLCAieCIsICJub29wIiwgIk11dGF0aW9uQ2FjaGUiLCAieCIsICJvbkZvY3VzIiwgIm5vb3AiLCAiYnVpbGROZXdQYWdlcyIsICJwYXJhbSIsICJmZXRjaFBhZ2UiLCAibWFudWFsIiwgInByb21pc2UiLCAiX2xvb3AiLCAiaSIsICJRdWVyeUNsaWVudCIsICJfcmVmIiwgIl9yZWYyIiwgIm5vb3AiLCAiX3JlZjMiLCAieCIsICJRdWVyeU9ic2VydmVyIiwgInRyYWNrUHJvcCIsICJnZXQiLCAiZmV0Y2giLCAibm9vcCIsICJ4IiwgImltcG9ydF9yZWFjdF9kb20iLCAidW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMiLCAiUmVhY3RET00iLCAidW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMiLCAibG9nZ2VyIiwgImxvZ2dlciIsICJpbXBvcnRfcmVhY3QiLCAiUmVhY3QiLCAidXNlUXVlcnlDbGllbnQiLCAiUXVlcnlDbGllbnRQcm92aWRlciIsICJfcmVmIiwgImltcG9ydF9yZWFjdCIsICJSZWFjdCIsICJ1c2VRdWVyeUVycm9yUmVzZXRCb3VuZGFyeSIsICJpbXBvcnRfcmVhY3QiLCAiUmVhY3QiLCAieCIsICJfcmVmIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3QiLCAiUmVhY3QiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJSZWFjdCIsICJSZWFjdERPTSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJSZWFjdCIsICJSZWFjdERPTSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0IiwgIlJlYWN0IiwgImltcG9ydF9yZWFjdF9kb20iLCAiUmVhY3QiLCAiUmVhY3RET00iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdCIsICJSZWFjdCIsICJpbXBvcnRfcmVhY3RfZG9tIiwgIlJlYWN0IiwgIlJlYWN0RE9NIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3QiLCAiUmVhY3QiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJSZWFjdCIsICJSZWFjdERPTSIsICJpbXBvcnRfcmVhY3QiLCAicmVxdWlyZV9vYmplY3RfYXNzaWduIiwgIl9fY29tbW9uSlNNaW4iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwgImhhc093blByb3BlcnR5IiwgInByb3BJc0VudW1lcmFibGUiLCAidG9PYmplY3QiLCAidmFsIiwgInNob3VsZFVzZU5hdGl2ZSIsICJ0ZXN0MSIsICJ0ZXN0MiIsICJpIiwgIm9yZGVyMiIsICJuIiwgInRlc3QzIiwgImxldHRlciIsICJ0YXJnZXQiLCAic291cmNlIiwgImZyb20iLCAidG8iLCAic3ltYm9scyIsICJzIiwgImtleSIsICJyZXF1aXJlX3JlYWN0X3Byb2R1Y3Rpb25fbWluIiwgImwiLCAicCIsICJxIiwgInIiLCAidCIsICJ1IiwgInYiLCAidyIsICJ4IiwgInkiLCAiYSIsICJ6IiwgImIiLCAiYyIsICJBIiwgIkIiLCAiQyIsICJEIiwgIkUiLCAiRiIsICJHIiwgIkgiLCAiSSIsICJKIiwgImUiLCAiZCIsICJrIiwgImgiLCAiZyIsICJmIiwgIm0iLCAiSyIsICJMIiwgImVzY2FwZSIsICJNIiwgIk4iLCAiTyIsICJQIiwgIlEiLCAiUiIsICJTIiwgIlQiLCAicmVxdWlyZV9yZWFjdCIsICJyZXF1aXJlX3NjaGVkdWxlcl9wcm9kdWN0aW9uX21pbiIsICJVIiwgIlYiLCAiVyIsICJyZXF1aXJlX3NjaGVkdWxlciIsICJyZXF1aXJlX3JlYWN0X2RvbV9wcm9kdWN0aW9uX21pbiIsICJhYSIsICJiYSIsICJjYSIsICJkYSIsICJlYSIsICJmYSIsICJoYSIsICJpYSIsICJqYSIsICJrYSIsICJsYSIsICJtYSIsICJuYSIsICJvYSIsICJwYSIsICJxYSIsICJyYSIsICJzYSIsICJ0YSIsICJ1YSIsICJ3YSIsICJ4YSIsICJ5YSIsICJ6YSIsICJBYSIsICJCYSIsICJDYSIsICJEYSIsICJFYSIsICJGYSIsICJHYSIsICJIYSIsICJJYSIsICJKYSIsICJLYSIsICJMYSIsICJNYSIsICJOYSIsICJPYSIsICJQYSIsICJRYSIsICJSYSIsICJTYSIsICJUYSIsICJVYSIsICJWYSIsICJXYSIsICJYYSIsICJZYSIsICJaYSIsICIkYSIsICJhYiIsICJiYiIsICJjYiIsICJkYiIsICJlYiIsICJmYiIsICJnYiIsICJoYiIsICJpYiIsICJqYiIsICJrYiIsICJsYiIsICJtYiIsICJuYiIsICJvYiIsICJwYiIsICJxYiIsICJyYiIsICJzYiIsICJ0YiIsICJ1YiIsICJ2YiIsICJ3YiIsICJ4YiIsICJ5YiIsICJ6YiIsICJBYiIsICJCYiIsICJDYiIsICJEYiIsICJFYiIsICJGYiIsICJHYiIsICJIYiIsICJJYiIsICJKYiIsICJLYiIsICJMYiIsICJNYiIsICJOYiIsICJPYiIsICJQYiIsICJRYiIsICJSYiIsICJTYiIsICJUYiIsICJVYiIsICJWYiIsICJXYiIsICJYYiIsICJZYiIsICJaYiIsICIkYiIsICJhYyIsICJiYyIsICJjYyIsICJkYyIsICJlYyIsICJmYyIsICJnYyIsICJoYyIsICJpYyIsICJqYyIsICJrYyIsICJsYyIsICJtYyIsICJuYyIsICJvYyIsICJwYyIsICJxYyIsICJyYyIsICJzYyIsICJ0YyIsICJ1YyIsICJ2YyIsICJ3YyIsICJ4YyIsICJ5YyIsICJ6YyIsICJBYyIsICJCYyIsICJDYyIsICJEYyIsICJFYyIsICJGYyIsICJHYyIsICJIYyIsICJJYyIsICJKYyIsICJLYyIsICJMYyIsICJNYyIsICJOYyIsICJPYyIsICJQYyIsICJRYyIsICJSYyIsICJTYyIsICJUYyIsICJVYyIsICJWYyIsICJXYyIsICJYYyIsICJZYyIsICJaYyIsICIkYyIsICJhZCIsICJiZCIsICJjZCIsICJkZCIsICJlZCIsICJmZCIsICJnZCIsICJoZCIsICJpZCIsICJqZCIsICJrZCIsICJsZCIsICJtZCIsICJuZCIsICJvZCIsICJwZCIsICJxZCIsICJyZCIsICJzZCIsICJ0ZCIsICJ1ZCIsICJ2ZCIsICJ3ZCIsICJ4ZCIsICJ5ZCIsICJBZCIsICJ6ZCIsICJCZCIsICJDZCIsICJEZCIsICJFZCIsICJGZCIsICJHZCIsICJIZCIsICJJZCIsICJKZCIsICJLZCIsICJMZCIsICJNZCIsICJOZCIsICJPZCIsICJQZCIsICJRZCIsICJSZCIsICJTZCIsICJUZCIsICJVZCIsICJWZCIsICJXZCIsICJYZCIsICJZZCIsICJaZCIsICIkZCIsICJhZSIsICJiZSIsICJjZSIsICJkZSIsICJlZSIsICJmZSIsICJnZSIsICJoZSIsICJpZSIsICJqZSIsICJrZSIsICJsZSIsICJtZSIsICJuZSIsICJvZSIsICJwZSIsICJxZSIsICJyZSIsICJzZSIsICJ0ZSIsICJ1ZSIsICJ2ZSIsICJ3ZSIsICJ5ZSIsICJ6ZSIsICJ4ZSIsICJBZSIsICJCZSIsICJDZSIsICJEZSIsICJFZSIsICJGZSIsICJHZSIsICJIZSIsICJJZSIsICJKZSIsICJLZSIsICJMZSIsICJNZSIsICJOZSIsICJPZSIsICJQZSIsICJRZSIsICJSZSIsICJTZSIsICJUZSIsICJVZSIsICJWZSIsICJXZSIsICJYZSIsICJZZSIsICJaZSIsICIkZSIsICJhZiIsICJiZiIsICJjZiIsICJkZiIsICJlZiIsICJmZiIsICJnZiIsICJoZiIsICJqZiIsICJrZiIsICJsZiIsICJtZiIsICJuZiIsICJvZiIsICJwZiIsICJxZiIsICJyZiIsICJzZiIsICJ0ZiIsICJ1ZiIsICJ2ZiIsICJ3ZiIsICJ4ZiIsICJ5ZiIsICJ6ZiIsICJBZiIsICJCZiIsICJDZiIsICJEZiIsICJFZiIsICJGZiIsICJHZiIsICJIZiIsICJJZiIsICJKZiIsICJLZiIsICJMZiIsICJNZiIsICJOZiIsICJPZiIsICJQZiIsICJRZiIsICJSZiIsICJTZiIsICJUZiIsICJVZiIsICJWZiIsICJXZiIsICJYZiIsICJZZiIsICJaZiIsICIkZiIsICJhZyIsICJiZyIsICJjZyIsICJkZyIsICJlZyIsICJmZyIsICJnZyIsICJoZyIsICJpZyIsICJqZyIsICJrZyIsICJsZyIsICJtZyIsICJuZyIsICJvZyIsICJwZyIsICJxZyIsICJyZyIsICJzZyIsICJ0ZyIsICJ1ZyIsICJ2ZyIsICJ3ZyIsICJ4ZyIsICJ5ZyIsICJ6ZyIsICJBZyIsICJCZyIsICJDZyIsICJEZyIsICJFZyIsICJGZyIsICJHZyIsICJLZyIsICJIZyIsICJJZyIsICJKZyIsICJMZyIsICJNZyIsICJOZyIsICJPZyIsICJQZyIsICJRZyIsICJSZyIsICJTZyIsICJUZyIsICJVZyIsICJWZyIsICJXZyIsICJYZyIsICJZZyIsICJaZyIsICIkZyIsICJhaCIsICJiaCIsICJjaCIsICJkaCIsICJlaCIsICJmaCIsICJnaCIsICJoaCIsICJpaCIsICJqaCIsICJraCIsICJsaCIsICJtaCIsICJuaCIsICJvaCIsICJwaCIsICJxaCIsICJyaCIsICJzaCIsICJ0aCIsICJ1aCIsICJ2aCIsICJ3aCIsICJ4aCIsICJ5aCIsICJ6aCIsICJBaCIsICJCaCIsICJDaCIsICJEaCIsICJFaCIsICJGaCIsICJHaCIsICJIaCIsICJJaCIsICJKaCIsICJLaCIsICJMaCIsICJNaCIsICJOaCIsICJPaCIsICJQaCIsICJRaCIsICJSaCIsICJTaCIsICJUaCIsICJVaCIsICJWaCIsICJXaCIsICJYaCIsICJZaCIsICJaaCIsICIkaCIsICJhaSIsICJiaSIsICJjaSIsICJkaSIsICJlaSIsICJmaSIsICJnaSIsICJoaSIsICJpaSIsICJqaSIsICJraSIsICJsaSIsICJtaSIsICJuaSIsICJvaSIsICJwaSIsICJxaSIsICJyaSIsICJzaSIsICJ0aSIsICJ1aSIsICJ2aSIsICJ3aSIsICJ4aSIsICJ5aSIsICJ6aSIsICJBaSIsICJCaSIsICJDaSIsICJEaSIsICJFaSIsICJGaSIsICJHaSIsICJIaSIsICJJaSIsICJKaSIsICJLaSIsICJMaSIsICJNaSIsICJOaSIsICJPaSIsICJQaSIsICJRaSIsICJSaSIsICJTaSIsICJUaSIsICJVaSIsICJWaSIsICJXaSIsICJYaSIsICJZaSIsICJaaSIsICIkaSIsICJhaiIsICJiaiIsICJjaiIsICJkaiIsICJlaiIsICJmaiIsICJnaiIsICJoaiIsICJpaiIsICJqaiIsICJraiIsICJsaiIsICJtaiIsICJuaiIsICJvaiIsICJwaiIsICJYIiwgIlkiLCAicWoiLCAicmoiLCAic2oiLCAidGoiLCAidWoiLCAidmoiLCAid2oiLCAiWiIsICJ4aiIsICJ5aiIsICJ6aiIsICJBaiIsICJCaiIsICJDaiIsICJEaiIsICJFaiIsICJGaiIsICJHaiIsICJIaiIsICJJaiIsICJKaiIsICJLaiIsICJMaiIsICJNaiIsICJOaiIsICJPaiIsICJQaiIsICJRaiIsICJSaiIsICJTaiIsICJUaiIsICJVaiIsICJWaiIsICJXaiIsICJYaiIsICJZaiIsICJaaiIsICJ2YSIsICJhayIsICJiayIsICJjayIsICJkayIsICJlayIsICJmayIsICJnayIsICJoayIsICJpayIsICJqayIsICJrayIsICJsayIsICJtayIsICJuayIsICJvayIsICJwayIsICJxayIsICJyayIsICJzayIsICJ0ayIsICJ1ayIsICJ2ayIsICJ3ayIsICJ4ayIsICJ5ayIsICJyZXF1aXJlX3JlYWN0X2RvbSIsICJjaGVja0RDRSIsICJlcnIiLCAicmVxdWlyZV91c2Vfc3luY19leHRlcm5hbF9zdG9yZV9zaGltX3Byb2R1Y3Rpb25fbWluIiwgInJlcXVpcmVfc2hpbSIsICJyZXF1aXJlX3dpdGhfc2VsZWN0b3JfcHJvZHVjdGlvbl9taW4iLCAicmVxdWlyZV93aXRoX3NlbGVjdG9yIiwgIl9leHRlbmRzIiwgImluaXRfZXh0ZW5kcyIsICJfX2VzbU1pbiIsICJyZXF1aXJlX3JlYWN0X2lzX3Byb2R1Y3Rpb25fbWluIiwgInJlcXVpcmVfcmVhY3RfaXMiLCAicmVxdWlyZV9ob2lzdF9ub25fcmVhY3Rfc3RhdGljc19janMiLCAicmVhY3RJcyIsICJSRUFDVF9TVEFUSUNTIiwgIktOT1dOX1NUQVRJQ1MiLCAiRk9SV0FSRF9SRUZfU1RBVElDUyIsICJNRU1PX1NUQVRJQ1MiLCAiVFlQRV9TVEFUSUNTIiwgImdldFN0YXRpY3MiLCAiY29tcG9uZW50IiwgImRlZmluZVByb3BlcnR5IiwgImdldE93blByb3BlcnR5TmFtZXMiLCAiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwgImdldFByb3RvdHlwZU9mIiwgIm9iamVjdFByb3RvdHlwZSIsICJob2lzdE5vblJlYWN0U3RhdGljcyIsICJ0YXJnZXRDb21wb25lbnQiLCAic291cmNlQ29tcG9uZW50IiwgImJsYWNrbGlzdCIsICJpbmhlcml0ZWRDb21wb25lbnQiLCAia2V5cyIsICJ0YXJnZXRTdGF0aWNzIiwgInNvdXJjZVN0YXRpY3MiLCAiZGVzY3JpcHRvciIsICJyZXF1aXJlX211bHRpbWFwIiwgIm1hcEVhY2giLCAibWFwIiwgIm9wZXJhdGlvbiIsICJuZXh0IiwgIk11bHRpbWFwIiwgIm1hcEN0b3IiLCAiaXRlbSIsICJpdGVyYWJsZSIsICJzZWxmIiwgImFyZ3MiLCAiZW50cnkiLCAiaWR4IiwgImhhc0tleSIsICJtYWtlSXRlcmF0b3IiLCAidmFscyIsICJpdGVyIiwgInRvdGFsIiwgInZhbHVlIiwgInNhZmFyaU5leHQiLCAiaXRlcmF0b3IiLCAibmV4dEluZGV4IiwgInNoZWV0Rm9yVGFnIiwgInRhZyIsICJjcmVhdGVTdHlsZUVsZW1lbnQiLCAib3B0aW9ucyIsICJTdHlsZVNoZWV0IiwgImluaXRfZW1vdGlvbl9zaGVldF9icm93c2VyX2VzbSIsICJfdGhpcyIsICJiZWZvcmUiLCAiX3Byb3RvIiwgIm5vZGVzIiwgInJ1bGUiLCAiaXNJbXBvcnRSdWxlIiwgInNoZWV0IiwgIk1TIiwgIk1PWiIsICJXRUJLSVQiLCAiQ09NTUVOVCIsICJSVUxFU0VUIiwgIkRFQ0xBUkFUSU9OIiwgIklNUE9SVCIsICJLRVlGUkFNRVMiLCAiTEFZRVIiLCAiaW5pdF9FbnVtIiwgImhhc2giLCAibGVuZ3RoIiwgImNoYXJhdCIsICJ0cmltIiwgIm1hdGNoIiwgInBhdHRlcm4iLCAicmVwbGFjZSIsICJyZXBsYWNlbWVudCIsICJpbmRleG9mIiwgInNlYXJjaCIsICJpbmRleCIsICJzdWJzdHIiLCAiYmVnaW4iLCAiZW5kIiwgInN0cmxlbiIsICJzaXplb2YiLCAiYXBwZW5kIiwgImFycmF5IiwgImNvbWJpbmUiLCAiY2FsbGJhY2siLCAiYWJzIiwgImFzc2lnbiIsICJpbml0X1V0aWxpdHkiLCAibm9kZSIsICJyb290IiwgInBhcmVudCIsICJ0eXBlIiwgInByb3BzIiwgImNoaWxkcmVuIiwgImxpbmUiLCAiY29sdW1uIiwgImNvcHkiLCAiY2hhciIsICJjaGFyYWN0ZXIiLCAicHJldiIsICJwb3NpdGlvbiIsICJjaGFyYWN0ZXJzIiwgInBlZWsiLCAiY2FyZXQiLCAic2xpY2UiLCAidG9rZW4iLCAiYWxsb2MiLCAiZGVhbGxvYyIsICJkZWxpbWl0IiwgImRlbGltaXRlciIsICJ3aGl0ZXNwYWNlIiwgImVzY2FwaW5nIiwgImNvdW50IiwgImNvbW1lbnRlciIsICJpZGVudGlmaWVyIiwgImluaXRfVG9rZW5pemVyIiwgImNvbXBpbGUiLCAicGFyc2UiLCAicnVsZXMiLCAicnVsZXNldHMiLCAicHNldWRvIiwgInBvaW50cyIsICJkZWNsYXJhdGlvbnMiLCAib2Zmc2V0IiwgImF0cnVsZSIsICJwcm9wZXJ0eSIsICJwcmV2aW91cyIsICJ2YXJpYWJsZSIsICJzY2FubmluZyIsICJhbXBlcnNhbmQiLCAicmVmZXJlbmNlIiwgImNvbW1lbnQiLCAiZGVjbGFyYXRpb24iLCAicnVsZXNldCIsICJwb3N0IiwgInNpemUiLCAiaiIsICJpbml0X1BhcnNlciIsICJpbml0X1ByZWZpeGVyIiwgInNlcmlhbGl6ZSIsICJvdXRwdXQiLCAic3RyaW5naWZ5IiwgImVsZW1lbnQiLCAiaW5pdF9TZXJpYWxpemVyIiwgIm1pZGRsZXdhcmUiLCAiY29sbGVjdGlvbiIsICJydWxlc2hlZXQiLCAiaW5pdF9NaWRkbGV3YXJlIiwgImluaXRfc3R5bGlzIiwgIndlYWtNZW1vaXplIiwgImluaXRfZW1vdGlvbl93ZWFrX21lbW9pemVfZXNtIiwgImZ1bmMiLCAiY2FjaGUiLCAiYXJnIiwgInJldCIsICJtZW1vaXplIiwgImZuIiwgImluaXRfZW1vdGlvbl9tZW1vaXplX2VzbSIsICJlbW90aW9uX2NhY2hlX2Jyb3dzZXJfZXNtX2V4cG9ydHMiLCAiX19leHBvcnQiLCAiY3JlYXRlQ2FjaGUiLCAicHJlZml4IiwgImlkZW50aWZpZXJXaXRoUG9pbnRUcmFja2luZyIsICJ0b1J1bGVzIiwgImdldFJ1bGVzIiwgImZpeGVkRWxlbWVudHMiLCAiY29tcGF0IiwgInJlbW92ZUxhYmVsIiwgInByZWZpeGVyIiwgImRlZmF1bHRTdHlsaXNQbHVnaW5zIiwgImluaXRfZW1vdGlvbl9jYWNoZV9icm93c2VyX2VzbSIsICJwYXJzZWQiLCAiaXNJbXBsaWNpdFJ1bGUiLCAicGFyZW50UnVsZXMiLCAic3NyU3R5bGVzIiwgImRhdGFFbW90aW9uQXR0cmlidXRlIiwgInN0eWxpc1BsdWdpbnMiLCAiaW5zZXJ0ZWQiLCAiY29udGFpbmVyIiwgIm5vZGVzVG9IeWRyYXRlIiwgImF0dHJpYiIsICJfaW5zZXJ0IiwgIm9tbmlwcmVzZW50UGx1Z2lucyIsICJjdXJyZW50U2hlZXQiLCAiZmluYWxpemluZ1BsdWdpbnMiLCAic2VyaWFsaXplciIsICJzdHlsaXMiLCAic3R5bGVzIiwgInNlbGVjdG9yIiwgInNlcmlhbGl6ZWQiLCAic2hvdWxkQ2FjaGUiLCAiaW1wb3J0X2hvaXN0X25vbl9yZWFjdF9zdGF0aWNzIiwgImluaXRfZW1vdGlvbl9yZWFjdF9pc29sYXRlZF9obnJzX2Jyb3dzZXJfZXNtIiwgImhvaXN0Tm9uUmVhY3RTdGF0aWNzJDEiLCAiZ2V0UmVnaXN0ZXJlZFN0eWxlcyIsICJyZWdpc3RlcmVkIiwgInJlZ2lzdGVyZWRTdHlsZXMiLCAiY2xhc3NOYW1lcyIsICJyYXdDbGFzc05hbWUiLCAiY2xhc3NOYW1lIiwgImlzQnJvd3NlciIsICJyZWdpc3RlclN0eWxlcyIsICJpbnNlcnRTdHlsZXMiLCAiaW5pdF9lbW90aW9uX3V0aWxzX2Jyb3dzZXJfZXNtIiwgImlzU3RyaW5nVGFnIiwgImN1cnJlbnQiLCAibXVybXVyMiIsICJzdHIiLCAibGVuIiwgImluaXRfZW1vdGlvbl9oYXNoX2VzbSIsICJ1bml0bGVzc0tleXMiLCAiaW5pdF9lbW90aW9uX3VuaXRsZXNzX2VzbSIsICJoYW5kbGVJbnRlcnBvbGF0aW9uIiwgIm1lcmdlZFByb3BzIiwgImludGVycG9sYXRpb24iLCAiY3Vyc29yIiwgImNyZWF0ZVN0cmluZ0Zyb21PYmplY3QiLCAicHJldmlvdXNDdXJzb3IiLCAicmVzdWx0IiwgIm1hdGNoZWQiLCAicmVwbGFjZWQiLCAiY2FjaGVkIiwgIm9iaiIsICJzdHJpbmciLCAiX2tleSIsICJpc1Byb2Nlc3NhYmxlVmFsdWUiLCAicHJvY2Vzc1N0eWxlTmFtZSIsICJwcm9jZXNzU3R5bGVWYWx1ZSIsICJfaSIsICJpbnRlcnBvbGF0ZWQiLCAiaHlwaGVuYXRlUmVnZXgiLCAiYW5pbWF0aW9uUmVnZXgiLCAiaXNDdXN0b21Qcm9wZXJ0eSIsICJsYWJlbFBhdHRlcm4iLCAic2VyaWFsaXplU3R5bGVzIiwgImluaXRfZW1vdGlvbl9zZXJpYWxpemVfYnJvd3Nlcl9lc20iLCAic3R5bGVOYW1lIiwgInAxIiwgInAyIiwgInN0cmluZ01vZGUiLCAic3RyaW5ncyIsICJzb3VyY2VNYXAiLCAiaWRlbnRpZmllck5hbWUiLCAibmFtZSIsICJSZWFjdCIsICJzeW5jRmFsbGJhY2siLCAidXNlSW5zZXJ0aW9uRWZmZWN0IiwgInVzZUluc2VydGlvbkVmZmVjdEFsd2F5c1dpdGhTeW5jRmFsbGJhY2siLCAidXNlSW5zZXJ0aW9uRWZmZWN0V2l0aExheW91dEZhbGxiYWNrIiwgImluaXRfZW1vdGlvbl91c2VfaW5zZXJ0aW9uX2VmZmVjdF93aXRoX2ZhbGxiYWNrc19icm93c2VyX2VzbSIsICJjcmVhdGUiLCAid2l0aFRoZW1lIiwgIkNvbXBvbmVudCIsICJjb21wb25lbnROYW1lIiwgInJlbmRlciIsICJyZWYiLCAidGhlbWUiLCAiVGhlbWVDb250ZXh0IiwgIldpdGhUaGVtZSIsICJpbXBvcnRfcmVhY3QiLCAiaGFzT3duIiwgIkVtb3Rpb25DYWNoZUNvbnRleHQiLCAiQ2FjaGVQcm92aWRlciIsICJfX3Vuc2FmZV91c2VFbW90aW9uQ2FjaGUiLCAid2l0aEVtb3Rpb25DYWNoZSIsICJ1c2VUaGVtZSIsICJnZXRUaGVtZSIsICJjcmVhdGVDYWNoZVdpdGhUaGVtZSIsICJUaGVtZVByb3ZpZGVyIiwgInR5cGVQcm9wTmFtZSIsICJjcmVhdGVFbW90aW9uUHJvcHMiLCAiSW5zZXJ0aW9uIiwgIkVtb3Rpb24iLCAiRW1vdGlvbiQxIiwgImluaXRfZW1vdGlvbl9lbGVtZW50XzQzYzZmZWEwX2Jyb3dzZXJfZXNtIiwgIm91dGVyVGhlbWUiLCAibWVyZ2VkVGhlbWUiLCAibmV3UHJvcHMiLCAibGFiZWwiLCAiX3JlZiIsICJjc3NQcm9wIiwgIldyYXBwZWRDb21wb25lbnQiLCAibGFiZWxGcm9tU3RhY2siLCAiZW1vdGlvbl9yZWFjdF9icm93c2VyX2VzbV9leHBvcnRzIiwgIkNsYXNzTmFtZXMiLCAiR2xvYmFsIiwgImpzeCIsICJjc3MiLCAia2V5ZnJhbWVzIiwgIl9sZW4iLCAibWVyZ2UiLCAiY2xhc3NuYW1lcyIsICJpbml0X2Vtb3Rpb25fcmVhY3RfYnJvd3Nlcl9lc20iLCAiYXJnc0xlbmd0aCIsICJjcmVhdGVFbGVtZW50QXJnQXJyYXkiLCAic2VyaWFsaXplZE5hbWVzIiwgInNlcmlhbGl6ZWRTdHlsZXMiLCAic2hlZXRSZWYiLCAicmVoeWRyYXRpbmciLCAic2hlZXRSZWZDdXJyZW50IiwgImluc2VydGFibGUiLCAiY2xzIiwgInRvQWRkIiwgInNlcmlhbGl6ZWRBcnIiLCAiaGFzUmVuZGVyZWQiLCAiY3giLCAiX2xlbjIiLCAiX2tleTIiLCAiY29udGVudCIsICJlbGUiLCAicmVxdWlyZV9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCAiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsICJyZXF1aXJlX2Zvcm1hdE11aUVycm9yTWVzc2FnZSIsICJmb3JtYXRNdWlFcnJvck1lc3NhZ2UiLCAiY29kZSIsICJ1cmwiLCAiX2Zvcm1hdE11aUVycm9yTWVzc2FnZSIsICJyZWFjdFByb3BzUmVnZXgiLCAiaXNQcm9wVmFsaWQiLCAiaW5pdF9lbW90aW9uX2lzX3Byb3BfdmFsaWRfZXNtIiwgInByb3AiLCAidGVzdE9taXRQcm9wc09uU3RyaW5nVGFnIiwgInRlc3RPbWl0UHJvcHNPbkNvbXBvbmVudCIsICJnZXREZWZhdWx0U2hvdWxkRm9yd2FyZFByb3AiLCAiY29tcG9zZVNob3VsZEZvcndhcmRQcm9wcyIsICJjcmVhdGVTdHlsZWQiLCAiaW5pdF9lbW90aW9uX3N0eWxlZF9iYXNlX2Jyb3dzZXJfZXNtIiwgImlzUmVhbCIsICJzaG91bGRGb3J3YXJkUHJvcCIsICJvcHRpb25zU2hvdWxkRm9yd2FyZFByb3AiLCAicHJvcE5hbWUiLCAiYmFzZVRhZyIsICJ0YXJnZXRDbGFzc05hbWUiLCAiZGVmYXVsdFNob3VsZEZvcndhcmRQcm9wIiwgInNob3VsZFVzZUFzIiwgIlN0eWxlZCIsICJGaW5hbFRhZyIsICJjbGFzc0ludGVycG9sYXRpb25zIiwgImZpbmFsU2hvdWxkRm9yd2FyZFByb3AiLCAibmV4dFRhZyIsICJuZXh0T3B0aW9ucyIsICJlbW90aW9uX3N0eWxlZF9icm93c2VyX2VzbV9leHBvcnRzIiwgIm5ld1N0eWxlZCIsICJ0YWdzIiwgImluaXRfZW1vdGlvbl9zdHlsZWRfYnJvd3Nlcl9lc20iLCAidGFnTmFtZSIsICJyZXF1aXJlX1JlYWN0UHJvcFR5cGVzU2VjcmV0IiwgIlJlYWN0UHJvcFR5cGVzU2VjcmV0IiwgInJlcXVpcmVfZmFjdG9yeVdpdGhUaHJvd2luZ1NoaW1zIiwgImVtcHR5RnVuY3Rpb24iLCAiZW1wdHlGdW5jdGlvbldpdGhSZXNldCIsICJzaGltIiwgImxvY2F0aW9uIiwgInByb3BGdWxsTmFtZSIsICJzZWNyZXQiLCAiZ2V0U2hpbSIsICJSZWFjdFByb3BUeXBlcyIsICJyZXF1aXJlX3Byb3BfdHlwZXMiLCAiUmVhY3RJcyIsICJ0aHJvd09uRGlyZWN0QWNjZXNzIiwgInJlcXVpcmVfcmVhY3RfanN4X3J1bnRpbWVfcHJvZHVjdGlvbl9taW4iLCAicmVxdWlyZV9qc3hfcnVudGltZSIsICJyZXF1aXJlX1N0eWxlZEVuZ2luZVByb3ZpZGVyIiwgIlN0eWxlZEVuZ2luZVByb3ZpZGVyIiwgIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwgIl9wcm9wVHlwZXMiLCAiX3JlYWN0MiIsICJfY2FjaGUiLCAiX2pzeFJ1bnRpbWUiLCAiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwgImluamVjdEZpcnN0IiwgIl9TdHlsZWRFbmdpbmVQcm92aWRlciIsICJyZXF1aXJlX0dsb2JhbFN0eWxlcyIsICJHbG9iYWxTdHlsZXMiLCAiaXNFbXB0eSIsICJkZWZhdWx0VGhlbWUiLCAiZ2xvYmFsU3R5bGVzIiwgInRoZW1lSW5wdXQiLCAiX0dsb2JhbFN0eWxlcyIsICJyZXF1aXJlX25vZGUiLCAiX3JlYWN0IiwgInN0eWxlZCIsICJfc3R5bGVkIiwgImludGVybmFsX3Byb2Nlc3NTdHlsZXMiLCAicHJvY2Vzc29yIiwgInJlcXVpcmVfZXh0ZW5kcyIsICJyZXF1aXJlX2RlZXBtZXJnZSIsICJkZWVwbWVyZ2UiLCAiaXNQbGFpbk9iamVjdCIsICJfZXh0ZW5kczIiLCAicHJvdG90eXBlIiwgImRlZXBDbG9uZSIsICJfZXhwb3J0TmFtZXMiLCAiX2RlZXBtZXJnZSIsICJ2MSIsICJyZXF1aXJlX2NhcGl0YWxpemUiLCAiY2FwaXRhbGl6ZSIsICJfZm9ybWF0TXVpRXJyb3JNZXNzYWdlMiIsICJfY2FwaXRhbGl6ZSIsICJyZXF1aXJlX2dldERpc3BsYXlOYW1lIiwgImdldERpc3BsYXlOYW1lIiwgImdldEZ1bmN0aW9uTmFtZSIsICJfcmVhY3RJcyIsICJmbk5hbWVNYXRjaFJlZ2V4IiwgImdldEZ1bmN0aW9uQ29tcG9uZW50TmFtZSIsICJmYWxsYmFjayIsICJnZXRXcmFwcGVkTmFtZSIsICJvdXRlclR5cGUiLCAiaW5uZXJUeXBlIiwgIndyYXBwZXJOYW1lIiwgImZ1bmN0aW9uTmFtZSIsICJfZ2V0RGlzcGxheU5hbWUiLCAicmVxdWlyZV9jbGFtcCIsICJjbGFtcCIsICJtaW4iLCAibWF4IiwgIl9kZWZhdWx0IiwgIl9jbGFtcCIsICJyZXF1aXJlX21lcmdlIiwgImFjYyIsICJyZXF1aXJlX3Jlc3BvbnNpdmVQcm9wVHlwZSIsICJyZXNwb25zaXZlUHJvcFR5cGUiLCAicmVxdWlyZV9icmVha3BvaW50cyIsICJjb21wdXRlQnJlYWtwb2ludHNCYXNlIiwgImNyZWF0ZUVtcHR5QnJlYWtwb2ludE9iamVjdCIsICJoYW5kbGVCcmVha3BvaW50cyIsICJtZXJnZUJyZWFrcG9pbnRzSW5PcmRlciIsICJyZW1vdmVVbnVzZWRCcmVha3BvaW50cyIsICJyZXNvbHZlQnJlYWtwb2ludFZhbHVlcyIsICJfbWVyZ2UiLCAidmFsdWVzIiwgImRlZmF1bHRCcmVha3BvaW50cyIsICJwcm9wVmFsdWUiLCAic3R5bGVGcm9tUHJvcFZhbHVlIiwgInRoZW1lQnJlYWtwb2ludHMiLCAiYnJlYWtwb2ludCIsICJtZWRpYUtleSIsICJjc3NLZXkiLCAiYnJlYWtwb2ludHMiLCAic3R5bGVGdW5jdGlvbiIsICJuZXdTdHlsZUZ1bmN0aW9uIiwgImJhc2UiLCAiZXh0ZW5kZWQiLCAiYnJlYWtwb2ludHNJbnB1dCIsICJfYnJlYWtwb2ludHNJbnB1dCRrZXkiLCAiYnJlYWtwb2ludFN0eWxlS2V5IiwgImJyZWFrcG9pbnRLZXlzIiwgInN0eWxlIiwgImJyZWFrcG9pbnRPdXRwdXQiLCAiZW1wdHlCcmVha3BvaW50cyIsICJtZXJnZWRPdXRwdXQiLCAiYnJlYWtwb2ludFZhbHVlcyIsICJicmVha3BvaW50c0tleXMiLCAiY3VzdG9tQmFzZSIsICJyZXF1aXJlX3N0eWxlIiwgImdldFBhdGgiLCAiZ2V0U3R5bGVWYWx1ZSIsICJfcmVzcG9uc2l2ZVByb3BUeXBlIiwgIl9icmVha3BvaW50cyIsICJwYXRoIiwgImNoZWNrVmFycyIsICJ0aGVtZU1hcHBpbmciLCAidHJhbnNmb3JtIiwgInByb3BWYWx1ZUZpbmFsIiwgInVzZXJWYWx1ZSIsICJjc3NQcm9wZXJ0eSIsICJ0aGVtZUtleSIsICJyZXF1aXJlX21lbW9pemUiLCAicmVxdWlyZV9zcGFjaW5nIiwgImNyZWF0ZVVuYXJ5U3BhY2luZyIsICJjcmVhdGVVbmFyeVVuaXQiLCAiZ2V0U3R5bGVGcm9tUHJvcFZhbHVlIiwgImdldFZhbHVlIiwgIm1hcmdpbiIsICJwYWRkaW5nIiwgIl9zdHlsZSIsICJfbWVtb2l6ZSIsICJwcm9wZXJ0aWVzIiwgImRpcmVjdGlvbnMiLCAiYWxpYXNlcyIsICJnZXRDc3NQcm9wZXJ0aWVzIiwgImRpcmVjdGlvbiIsICJkaXIiLCAibWFyZ2luS2V5cyIsICJwYWRkaW5nS2V5cyIsICJzcGFjaW5nS2V5cyIsICJkZWZhdWx0VmFsdWUiLCAiX2dldFBhdGgiLCAidGhlbWVTcGFjaW5nIiwgInRyYW5zZm9ybWVyIiwgInRyYW5zZm9ybWVkIiwgImNzc1Byb3BlcnRpZXMiLCAicmVzb2x2ZUNzc1Byb3BlcnR5IiwgInNwYWNpbmciLCAicmVxdWlyZV9jb21wb3NlIiwgImNvbXBvc2UiLCAiaGFuZGxlcnMiLCAicmVxdWlyZV9ib3JkZXJzIiwgImJvcmRlclRyYW5zZm9ybSIsICJfY29tcG9zZSIsICJfc3BhY2luZyIsICJjcmVhdGVCb3JkZXJTdHlsZSIsICJib3JkZXIiLCAiYm9yZGVyVG9wIiwgImJvcmRlclJpZ2h0IiwgImJvcmRlckJvdHRvbSIsICJib3JkZXJMZWZ0IiwgImJvcmRlckNvbG9yIiwgImJvcmRlclRvcENvbG9yIiwgImJvcmRlclJpZ2h0Q29sb3IiLCAiYm9yZGVyQm90dG9tQ29sb3IiLCAiYm9yZGVyTGVmdENvbG9yIiwgIm91dGxpbmUiLCAib3V0bGluZUNvbG9yIiwgImJvcmRlclJhZGl1cyIsICJib3JkZXJzIiwgInJlcXVpcmVfY3NzR3JpZCIsICJnYXAiLCAiY29sdW1uR2FwIiwgInJvd0dhcCIsICJncmlkQ29sdW1uIiwgImdyaWRSb3ciLCAiZ3JpZEF1dG9GbG93IiwgImdyaWRBdXRvQ29sdW1ucyIsICJncmlkQXV0b1Jvd3MiLCAiZ3JpZFRlbXBsYXRlQ29sdW1ucyIsICJncmlkVGVtcGxhdGVSb3dzIiwgImdyaWRUZW1wbGF0ZUFyZWFzIiwgImdyaWRBcmVhIiwgImdyaWQiLCAicmVxdWlyZV9wYWxldHRlIiwgInBhbGV0dGVUcmFuc2Zvcm0iLCAiY29sb3IiLCAiYmdjb2xvciIsICJiYWNrZ3JvdW5kQ29sb3IiLCAicGFsZXR0ZSIsICJyZXF1aXJlX3NpemluZyIsICJzaXppbmdUcmFuc2Zvcm0iLCAid2lkdGgiLCAibWF4V2lkdGgiLCAiX3Byb3BzJHRoZW1lIiwgIl9wcm9wcyR0aGVtZTIiLCAibWluV2lkdGgiLCAiaGVpZ2h0IiwgIm1heEhlaWdodCIsICJtaW5IZWlnaHQiLCAic2l6ZVdpZHRoIiwgInNpemVIZWlnaHQiLCAiYm94U2l6aW5nIiwgInNpemluZyIsICJyZXF1aXJlX2RlZmF1bHRTeENvbmZpZyIsICJfYm9yZGVycyIsICJfY3NzR3JpZCIsICJfcGFsZXR0ZSIsICJfc2l6aW5nIiwgImRlZmF1bHRTeENvbmZpZyIsICJyZXF1aXJlX3N0eWxlRnVuY3Rpb25TeCIsICJ1bnN0YWJsZV9jcmVhdGVTdHlsZUZ1bmN0aW9uU3giLCAiX2RlZmF1bHRTeENvbmZpZyIsICJvYmplY3RzSGF2ZVNhbWVLZXlzIiwgIm9iamVjdHMiLCAiYWxsS2V5cyIsICJvYmplY3QiLCAidW5pb24iLCAiY2FsbElmRm4iLCAibWF5YmVGbiIsICJnZXRUaGVtZVZhbHVlIiwgImNvbmZpZyIsICJzdHlsZUZ1bmN0aW9uU3giLCAiX3RoZW1lJHVuc3RhYmxlX3N4Q29uIiwgInN4IiwgInRyYXZlcnNlIiwgInN4SW5wdXQiLCAic3hPYmplY3QiLCAic3R5bGVLZXkiLCAiYnJlYWtwb2ludHNWYWx1ZXMiLCAicmVxdWlyZV9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgImV4Y2x1ZGVkIiwgInNvdXJjZUtleXMiLCAicmVxdWlyZV9leHRlbmRTeFByb3AiLCAiZXh0ZW5kU3hQcm9wIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlMiIsICJfZXhjbHVkZWQiLCAic3BsaXRQcm9wcyIsICJfcHJvcHMkdGhlbWUkdW5zdGFibGUiLCAiaW5TeCIsICJvdGhlciIsICJzeXN0ZW1Qcm9wcyIsICJvdGhlclByb3BzIiwgImZpbmFsU3giLCAiX3N0eWxlRnVuY3Rpb25TeCIsICJfZXh0ZW5kU3hQcm9wIiwgInJlcXVpcmVfY3JlYXRlQnJlYWtwb2ludHMiLCAiY3JlYXRlQnJlYWtwb2ludHMiLCAic29ydEJyZWFrcG9pbnRzVmFsdWVzIiwgImJyZWFrcG9pbnRzQXNBcnJheSIsICJicmVha3BvaW50MSIsICJicmVha3BvaW50MiIsICJ1bml0IiwgInN0ZXAiLCAic29ydGVkVmFsdWVzIiwgInVwIiwgImRvd24iLCAiYmV0d2VlbiIsICJzdGFydCIsICJlbmRJbmRleCIsICJvbmx5IiwgIm5vdCIsICJrZXlJbmRleCIsICJyZXF1aXJlX3NoYXBlIiwgInNoYXBlIiwgInJlcXVpcmVfY3JlYXRlU3BhY2luZyIsICJjcmVhdGVTcGFjaW5nIiwgInNwYWNpbmdJbnB1dCIsICJhcmdzSW5wdXQiLCAiYXJndW1lbnQiLCAicmVxdWlyZV9hcHBseVN0eWxlcyIsICJhcHBseVN0eWxlcyIsICJyZXF1aXJlX2NyZWF0ZVRoZW1lIiwgIl9jcmVhdGVCcmVha3BvaW50cyIsICJfc2hhcGUiLCAiX2NyZWF0ZVNwYWNpbmciLCAiX2FwcGx5U3R5bGVzIiwgImNyZWF0ZVRoZW1lIiwgInBhbGV0dGVJbnB1dCIsICJzaGFwZUlucHV0IiwgIm11aVRoZW1lIiwgIl9jcmVhdGVUaGVtZSIsICJyZXF1aXJlX2NvbG9yTWFuaXB1bGF0b3IiLCAiYWxwaGEiLCAiYmxlbmQiLCAiZGFya2VuIiwgImRlY29tcG9zZUNvbG9yIiwgImVtcGhhc2l6ZSIsICJnZXRDb250cmFzdFJhdGlvIiwgImdldEx1bWluYW5jZSIsICJoZXhUb1JnYiIsICJoc2xUb1JnYiIsICJsaWdodGVuIiwgInByaXZhdGVfc2FmZUFscGhhIiwgInByaXZhdGVfc2FmZURhcmtlbiIsICJwcml2YXRlX3NhZmVFbXBoYXNpemUiLCAicHJpdmF0ZV9zYWZlTGlnaHRlbiIsICJyZWNvbXBvc2VDb2xvciIsICJyZ2JUb0hleCIsICJjbGFtcFdyYXBwZXIiLCAiY29sb3JzIiwgImludFRvSGV4IiwgImludCIsICJoZXgiLCAibWFya2VyIiwgImNvbG9yU3BhY2UiLCAiY29sb3JDaGFubmVsIiwgImRlY29tcG9zZWRDb2xvciIsICJwcml2YXRlX3NhZmVDb2xvckNoYW5uZWwiLCAid2FybmluZyIsICJyZ2IiLCAiZm9yZWdyb3VuZCIsICJiYWNrZ3JvdW5kIiwgImx1bUEiLCAibHVtQiIsICJjb2VmZmljaWVudCIsICJvdmVybGF5IiwgIm9wYWNpdHkiLCAiZ2FtbWEiLCAiYmxlbmRDaGFubmVsIiwgIm8iLCAib3ZlcmxheUNvbG9yIiwgInJlcXVpcmVfY3JlYXRlU3R5bGVkIiwgIl9zdHlsZWRFbmdpbmUiLCAiX2V4Y2x1ZGVkMiIsICJfZXhjbHVkZWQzIiwgInN5c3RlbURlZmF1bHRUaGVtZSIsICJsb3dlcmNhc2VGaXJzdExldHRlciIsICJyZXNvbHZlVGhlbWUiLCAidGhlbWVJZCIsICJkZWZhdWx0T3ZlcnJpZGVzUmVzb2x2ZXIiLCAic2xvdCIsICJwcm9jZXNzU3R5bGVBcmciLCAiY2FsbGFibGVTdHlsZSIsICJvd25lclN0YXRlIiwgInJlc29sdmVkU3R5bGVzQXJnIiwgInJlc29sdmVkU3R5bGUiLCAidmFyaWFudHMiLCAidmFyaWFudCIsICJpc01hdGNoIiwgImlucHV0IiwgInJvb3RTaG91bGRGb3J3YXJkUHJvcCIsICJzbG90U2hvdWxkRm9yd2FyZFByb3AiLCAic3lzdGVtU3giLCAiaW5wdXRPcHRpb25zIiwgImNvbXBvbmVudFNsb3QiLCAiaW5wdXRTa2lwVmFyaWFudHNSZXNvbHZlciIsICJpbnB1dFNraXBTeCIsICJvdmVycmlkZXNSZXNvbHZlciIsICJza2lwVmFyaWFudHNSZXNvbHZlciIsICJza2lwU3giLCAic2hvdWxkRm9yd2FyZFByb3BPcHRpb24iLCAiZGVmYXVsdFN0eWxlZFJlc29sdmVyIiwgInRyYW5zZm9ybVN0eWxlQXJnIiwgInN0eWxlc0FyZyIsICJtdWlTdHlsZWRSZXNvbHZlciIsICJzdHlsZUFyZyIsICJleHByZXNzaW9ucyIsICJ0cmFuc2Zvcm1lZFN0eWxlQXJnIiwgImV4cHJlc3Npb25zV2l0aERlZmF1bHRUaGVtZSIsICJzdHlsZU92ZXJyaWRlcyIsICJyZXNvbHZlZFN0eWxlT3ZlcnJpZGVzIiwgInNsb3RLZXkiLCAic2xvdFN0eWxlIiwgIl90aGVtZSRjb21wb25lbnRzIiwgInRoZW1lVmFyaWFudHMiLCAibnVtT2ZDdXN0b21GbnNBcHBsaWVkIiwgInBsYWNlaG9sZGVycyIsICJpbXBvcnRfcmVhY3RfZG9tIiwgImltcG9ydF9zaGltIiwgImltcG9ydF93aXRoX3NlbGVjdG9yIiwgImRlZmF1bHROb29wQmF0Y2giLCAiYmF0Y2giLCAic2V0QmF0Y2giLCAibmV3QmF0Y2giLCAiZ2V0QmF0Y2giLCAiQ29udGV4dEtleSIsICJnVCIsICJnZXRDb250ZXh0IiwgIl9nVCRDb250ZXh0S2V5IiwgImNvbnRleHRNYXAiLCAicmVhbENvbnRleHQiLCAiUmVhY3RSZWR1eENvbnRleHQiLCAiY3JlYXRlUmVkdXhDb250ZXh0SG9vayIsICJjb250ZXh0IiwgInVzZVJlZHV4Q29udGV4dCIsICJub3RJbml0aWFsaXplZCIsICJ1c2VTeW5jRXh0ZXJuYWxTdG9yZVdpdGhTZWxlY3RvciIsICJpbml0aWFsaXplVXNlU2VsZWN0b3IiLCAicmVmRXF1YWxpdHkiLCAiY3JlYXRlU2VsZWN0b3JIb29rIiwgImVxdWFsaXR5Rm5Pck9wdGlvbnMiLCAiZXF1YWxpdHlGbiIsICJzdGFiaWxpdHlDaGVjayIsICJub29wQ2hlY2siLCAic3RvcmUiLCAic3Vic2NyaXB0aW9uIiwgImdldFNlcnZlclN0YXRlIiwgImdsb2JhbFN0YWJpbGl0eUNoZWNrIiwgImdsb2JhbE5vb3BDaGVjayIsICJmaXJzdFJ1biIsICJ3cmFwcGVkU2VsZWN0b3IiLCAic3RhdGUiLCAic2VsZWN0ZWQiLCAiZmluYWxTdGFiaWxpdHlDaGVjayIsICJ0b0NvbXBhcmUiLCAiZmluYWxOb29wQ2hlY2siLCAic2VsZWN0ZWRTdGF0ZSIsICJ1c2VTZWxlY3RvciIsICJpbXBvcnRfcmVhY3RfaXMiLCAiY3JlYXRlTGlzdGVuZXJDb2xsZWN0aW9uIiwgImZpcnN0IiwgImxhc3QiLCAibGlzdGVuZXIiLCAibGlzdGVuZXJzIiwgImlzU3Vic2NyaWJlZCIsICJudWxsTGlzdGVuZXJzIiwgImNyZWF0ZVN1YnNjcmlwdGlvbiIsICJwYXJlbnRTdWIiLCAidW5zdWJzY3JpYmUiLCAic3Vic2NyaXB0aW9uc0Ftb3VudCIsICJzZWxmU3Vic2NyaWJlZCIsICJhZGROZXN0ZWRTdWIiLCAidHJ5U3Vic2NyaWJlIiwgImNsZWFudXBMaXN0ZW5lciIsICJyZW1vdmVkIiwgInRyeVVuc3Vic2NyaWJlIiwgIm5vdGlmeU5lc3RlZFN1YnMiLCAiaGFuZGxlQ2hhbmdlV3JhcHBlciIsICJ0cnlTdWJzY3JpYmVTZWxmIiwgInRyeVVuc3Vic2NyaWJlU2VsZiIsICJjYW5Vc2VET00iLCAidXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCIsICJ1c2VTeW5jRXh0ZXJuYWxTdG9yZSIsICJpbml0aWFsaXplQ29ubmVjdCIsICJQcm92aWRlciIsICJzZXJ2ZXJTdGF0ZSIsICJjb250ZXh0VmFsdWUiLCAicHJldmlvdXNTdGF0ZSIsICJQcm92aWRlcl9kZWZhdWx0IiwgImNyZWF0ZVN0b3JlSG9vayIsICJ1c2VTdG9yZSIsICJjcmVhdGVEaXNwYXRjaEhvb2siLCAidXNlRGlzcGF0Y2giLCAidXNlQXBwRGlzcGF0Y2giLCAidXNlQXBwU2VsZWN0b3IiLCAiZGllIiwgImVycm9yIiwgIm1zZyIsICJFcnJvciIsICJqb2luIiwgImlzRHJhZnQiLCAiRFJBRlRfU1RBVEUiLCAiaXNEcmFmdGFibGUiLCAicHJvdG8iLCAiT2JqZWN0IiwgIkN0b3IiLCAiY2FsbCIsICJjb25zdHJ1Y3RvciIsICJGdW5jdGlvbiIsICJ0b1N0cmluZyIsICJvYmplY3RDdG9yU3RyaW5nIiwgIkFycmF5IiwgImlzQXJyYXkiLCAiRFJBRlRBQkxFIiwgIl92YWx1ZSRjb25zdHJ1Y3RvciIsICJpc01hcCIsICJpc1NldCIsICJlYWNoIiwgImVudW1lcmFibGVPbmx5IiwgImdldEFyY2h0eXBlIiwgIm93bktleXMiLCAiZm9yRWFjaCIsICJ0aGluZyIsICJ0eXBlXyIsICJoYXMiLCAiZ2V0IiwgInNldCIsICJwcm9wT3JPbGRWYWx1ZSIsICJhZGQiLCAiaXMiLCAiaGFzTWFwIiwgIk1hcCIsICJoYXNTZXQiLCAiU2V0IiwgImxhdGVzdCIsICJjb3B5XyIsICJiYXNlXyIsICJzaGFsbG93Q29weSIsICJkZXNjcmlwdG9ycyIsICJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwgImRlc2MiLCAid3JpdGFibGUiLCAiY29uZmlndXJhYmxlIiwgImVudW1lcmFibGUiLCAiZnJlZXplIiwgImRlZXAiLCAiaXNGcm96ZW4iLCAiY2xlYXIiLCAiZGVsZXRlIiwgImRvbnRNdXRhdGVGcm96ZW5Db2xsZWN0aW9ucyIsICJnZXRQbHVnaW4iLCAicGx1Z2luS2V5IiwgInBsdWdpbiIsICJwbHVnaW5zIiwgImxvYWRQbHVnaW4iLCAiaW1wbGVtZW50YXRpb24iLCAiZ2V0Q3VycmVudFNjb3BlIiwgImN1cnJlbnRTY29wZSIsICJ1c2VQYXRjaGVzSW5TY29wZSIsICJzY29wZSIsICJwYXRjaExpc3RlbmVyIiwgInBhdGNoZXNfIiwgImludmVyc2VQYXRjaGVzXyIsICJwYXRjaExpc3RlbmVyXyIsICJyZXZva2VTY29wZSIsICJsZWF2ZVNjb3BlIiwgImRyYWZ0c18iLCAicmV2b2tlRHJhZnQiLCAicGFyZW50XyIsICJlbnRlclNjb3BlIiwgImltbWVyIiwgImltbWVyXyIsICJjYW5BdXRvRnJlZXplXyIsICJ1bmZpbmFsaXplZERyYWZ0c18iLCAiZHJhZnQiLCAicmV2b2tlXyIsICJyZXZva2VkXyIsICJwcm9jZXNzUmVzdWx0IiwgImJhc2VEcmFmdCIsICJpc1JlcGxhY2VkIiwgInVzZVByb3hpZXNfIiwgIndpbGxGaW5hbGl6ZUVTNV8iLCAibW9kaWZpZWRfIiwgImZpbmFsaXplIiwgIm1heWJlRnJlZXplIiwgImdlbmVyYXRlUmVwbGFjZW1lbnRQYXRjaGVzXyIsICJOT1RISU5HIiwgInVuZGVmaW5lZCIsICJyb290U2NvcGUiLCAiY2hpbGRWYWx1ZSIsICJmaW5hbGl6ZVByb3BlcnR5IiwgInNjb3BlXyIsICJmaW5hbGl6ZWRfIiwgImRyYWZ0XyIsICJyZXN1bHRFYWNoIiwgImdlbmVyYXRlUGF0Y2hlc18iLCAicGFyZW50U3RhdGUiLCAidGFyZ2V0T2JqZWN0IiwgInJvb3RQYXRoIiwgInRhcmdldElzU2V0IiwgInJlcyIsICJhc3NpZ25lZF8iLCAiY29uY2F0IiwgImF1dG9GcmVlemVfIiwgImdldERlc2NyaXB0b3JGcm9tUHJvdG8iLCAibWFya0NoYW5nZWQiLCAicHJlcGFyZUNvcHkiLCAiY3JlYXRlUHJveHkiLCAicHJveHlNYXBfIiwgInByb3h5U2V0XyIsICJpc01hbnVhbF8iLCAidHJhcHMiLCAib2JqZWN0VHJhcHMiLCAiYXJyYXlUcmFwcyIsICJQcm94eSIsICJyZXZvY2FibGUiLCAicmV2b2tlIiwgInByb3h5IiwgImNyZWF0ZUVTNVByb3h5XyIsICJwdXNoIiwgImN1cnJlbnRJbXBsIiwgImFyY2hUeXBlIiwgImhhc0NoYW5nZXNfIiwgImNvcHlIZWxwZXIiLCAiZW5hYmxlRVM1IiwgInByb3h5UHJvcGVydHkiLCAidGhpcyIsICJtYXJrQ2hhbmdlc1N3ZWVwIiwgImRyYWZ0cyIsICJoYXNBcnJheUNoYW5nZXMiLCAiaGFzT2JqZWN0Q2hhbmdlcyIsICJiYXNlVmFsdWUiLCAiYmFzZUlzRHJhZnQiLCAiYXNzZXJ0VW5yZXZva2VkIiwgIkpTT04iLCAibWFya0NoYW5nZXNSZWN1cnNpdmVseSIsICJNYXRoIiwgImhhc1N5bWJvbCIsICJTeW1ib2wiLCAiaGFzUHJveGllcyIsICJSZWZsZWN0IiwgImZvciIsICJfZGVzYyRnZXQiLCAiY3VycmVudFN0YXRlIiwgIk51bWJlciIsICJpc05hTiIsICJkZWxldGVQcm9wZXJ0eSIsICJvd25lciIsICJzZXRQcm90b3R5cGVPZiIsICJhcmd1bWVudHMiLCAiYXBwbHkiLCAiSW1tZXIiLCAicmVjaXBlIiwgImRlZmF1bHRCYXNlIiwgInByb2R1Y2UiLCAiX3RoaXMyIiwgImhhc0Vycm9yIiwgIlByb21pc2UiLCAidGhlbiIsICJpcCIsICJwcm9kdWNlV2l0aFBhdGNoZXMiLCAicGF0Y2hlcyIsICJpbnZlcnNlUGF0Y2hlcyIsICJuZXh0U3RhdGUiLCAidXNlUHJveGllcyIsICJzZXRVc2VQcm94aWVzIiwgImF1dG9GcmVlemUiLCAic2V0QXV0b0ZyZWV6ZSIsICJjcmVhdGVEcmFmdCIsICJmaW5pc2hEcmFmdCIsICJhcHBseVBhdGNoZXMiLCAicGF0Y2giLCAib3AiLCAiYXBwbHlQYXRjaGVzSW1wbCIsICJhcHBseVBhdGNoZXNfIiwgImJpbmQiLCAiX3R5cGVvZiIsICJ0b1ByaW1pdGl2ZSIsICJ0b1Byb3BlcnR5S2V5IiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfb2JqZWN0U3ByZWFkMiIsICJmb3JtYXRQcm9kRXJyb3JNZXNzYWdlIiwgIiQkb2JzZXJ2YWJsZSIsICJyYW5kb21TdHJpbmciLCAiQWN0aW9uVHlwZXMiLCAiY3JlYXRlU3RvcmUiLCAicmVkdWNlciIsICJwcmVsb2FkZWRTdGF0ZSIsICJlbmhhbmNlciIsICJfcmVmMiIsICJjdXJyZW50UmVkdWNlciIsICJjdXJyZW50TGlzdGVuZXJzIiwgIm5leHRMaXN0ZW5lcnMiLCAiaXNEaXNwYXRjaGluZyIsICJlbnN1cmVDYW5NdXRhdGVOZXh0TGlzdGVuZXJzIiwgImdldFN0YXRlIiwgInN1YnNjcmliZSIsICJkaXNwYXRjaCIsICJhY3Rpb24iLCAicmVwbGFjZVJlZHVjZXIiLCAibmV4dFJlZHVjZXIiLCAib2JzZXJ2YWJsZSIsICJvdXRlclN1YnNjcmliZSIsICJvYnNlcnZlciIsICJvYnNlcnZlU3RhdGUiLCAiYXNzZXJ0UmVkdWNlclNoYXBlIiwgInJlZHVjZXJzIiwgImluaXRpYWxTdGF0ZSIsICJjb21iaW5lUmVkdWNlcnMiLCAicmVkdWNlcktleXMiLCAiZmluYWxSZWR1Y2VycyIsICJmaW5hbFJlZHVjZXJLZXlzIiwgInVuZXhwZWN0ZWRLZXlDYWNoZSIsICJzaGFwZUFzc2VydGlvbkVycm9yIiwgIndhcm5pbmdNZXNzYWdlIiwgImhhc0NoYW5nZWQiLCAicHJldmlvdXNTdGF0ZUZvcktleSIsICJuZXh0U3RhdGVGb3JLZXkiLCAiYWN0aW9uVHlwZSIsICJmdW5jcyIsICJhcHBseU1pZGRsZXdhcmUiLCAibWlkZGxld2FyZXMiLCAiX2Rpc3BhdGNoIiwgIm1pZGRsZXdhcmVBUEkiLCAiY2hhaW4iLCAiY3JlYXRlVGh1bmtNaWRkbGV3YXJlIiwgImV4dHJhQXJndW1lbnQiLCAidGh1bmsiLCAiZXNfZGVmYXVsdCIsICJjb21wb3NlV2l0aERldlRvb2xzIiwgImRldlRvb2xzRW5oYW5jZXIiLCAibm9vcDIiLCAiYmFzZVByb3RvIiwgImNyZWF0ZUFjdGlvbiIsICJwcmVwYXJlQWN0aW9uIiwgImFjdGlvbkNyZWF0b3IiLCAicHJlcGFyZWQiLCAiX19zcHJlYWRWYWx1ZXMiLCAiTWlkZGxld2FyZUFycmF5IiwgIl9zdXBlciIsICJfX2V4dGVuZHMiLCAiYXJyIiwgIl9fc3ByZWFkQXJyYXkiLCAiRW5oYW5jZXJBcnJheSIsICJmcmVlemVEcmFmdGFibGUiLCAiaW1tZXJfZXNtX2RlZmF1bHQiLCAiaXNCb29sZWFuIiwgImN1cnJ5R2V0RGVmYXVsdE1pZGRsZXdhcmUiLCAiZ2V0RGVmYXVsdE1pZGRsZXdhcmUiLCAiX2MiLCAiX2QiLCAiaW1tdXRhYmxlQ2hlY2siLCAiX2UiLCAic2VyaWFsaXphYmxlQ2hlY2siLCAiX2YiLCAiYWN0aW9uQ3JlYXRvckNoZWNrIiwgIm1pZGRsZXdhcmVBcnJheSIsICJpbW11dGFibGVPcHRpb25zIiwgInNlcmlhbGl6YWJsZU9wdGlvbnMiLCAiYWN0aW9uQ3JlYXRvck9wdGlvbnMiLCAiSVNfUFJPRFVDVElPTiIsICJjb25maWd1cmVTdG9yZSIsICJjdXJyaWVkR2V0RGVmYXVsdE1pZGRsZXdhcmUiLCAiZGV2VG9vbHMiLCAiX2ciLCAiX2giLCAiZW5oYW5jZXJzIiwgInJvb3RSZWR1Y2VyIiwgImZpbmFsTWlkZGxld2FyZSIsICJtaWRkbGV3YXJlRW5oYW5jZXIiLCAiZmluYWxDb21wb3NlIiwgImRlZmF1bHRFbmhhbmNlcnMiLCAic3RvcmVFbmhhbmNlcnMiLCAiY29tcG9zZWRFbmhhbmNlciIsICJleGVjdXRlUmVkdWNlckJ1aWxkZXJDYWxsYmFjayIsICJidWlsZGVyQ2FsbGJhY2siLCAiYWN0aW9uc01hcCIsICJhY3Rpb25NYXRjaGVycyIsICJkZWZhdWx0Q2FzZVJlZHVjZXIiLCAiYnVpbGRlciIsICJ0eXBlT3JBY3Rpb25DcmVhdG9yIiwgIm1hdGNoZXIiLCAiaXNTdGF0ZUZ1bmN0aW9uIiwgImNyZWF0ZVJlZHVjZXIiLCAibWFwT3JCdWlsZGVyQ2FsbGJhY2siLCAiZmluYWxBY3Rpb25NYXRjaGVycyIsICJmaW5hbERlZmF1bHRDYXNlUmVkdWNlciIsICJnZXRJbml0aWFsU3RhdGUiLCAiZnJvemVuSW5pdGlhbFN0YXRlXzEiLCAiY2FzZVJlZHVjZXJzIiwgInJlZHVjZXIyIiwgImNyIiwgImNhc2VSZWR1Y2VyIiwgImdldFR5cGUyIiwgImFjdGlvbktleSIsICJjcmVhdGVTbGljZSIsICJyZWR1Y2VyTmFtZXMiLCAic2xpY2VDYXNlUmVkdWNlcnNCeU5hbWUiLCAic2xpY2VDYXNlUmVkdWNlcnNCeVR5cGUiLCAiYWN0aW9uQ3JlYXRvcnMiLCAicmVkdWNlck5hbWUiLCAibWF5YmVSZWR1Y2VyV2l0aFByZXBhcmUiLCAicHJlcGFyZUNhbGxiYWNrIiwgImJ1aWxkUmVkdWNlciIsICJleHRyYVJlZHVjZXJzIiwgImZpbmFsQ2FzZVJlZHVjZXJzIiwgImFjdGlvbk1hdGNoZXJzXzEiLCAiX3JlZHVjZXIiLCAidXJsQWxwaGFiZXQiLCAibmFub2lkIiwgImNvbW1vblByb3BlcnRpZXMiLCAiUmVqZWN0V2l0aFZhbHVlIiwgInBheWxvYWQiLCAibWV0YSIsICJGdWxmaWxsV2l0aE1ldGEiLCAibWluaVNlcmlhbGl6ZUVycm9yIiwgInNpbXBsZUVycm9yIiwgImNvbW1vblByb3BlcnRpZXNfMSIsICJjcmVhdGVBc3luY1RodW5rIiwgImNyZWF0ZUFzeW5jVGh1bmsyIiwgInR5cGVQcmVmaXgiLCAicGF5bG9hZENyZWF0b3IiLCAiZnVsZmlsbGVkIiwgInJlcXVlc3RJZCIsICJfX3NwcmVhZFByb3BzIiwgInBlbmRpbmciLCAicmVqZWN0ZWQiLCAiZGlzcGxheWVkV2FybmluZyIsICJBQyIsICJjbGFzc18xIiwgImV4dHJhIiwgImFib3J0Q29udHJvbGxlciIsICJhYm9ydFJlYXNvbiIsICJzdGFydGVkIiwgImFib3J0IiwgInJlYXNvbiIsICJwcm9taXNlMiIsICJfX2FzeW5jIiwgImNvbmRpdGlvblJlc3VsdCIsICJfYSIsICJpc1RoZW5hYmxlIiwgImFib3J0ZWRQcm9taXNlIiwgIl8iLCAicmVqZWN0IiwgIl9iIiwgImZpbmFsQWN0aW9uIiwgImVycl8xIiwgInNraXBEaXNwYXRjaCIsICJ1bndyYXBSZXN1bHQiLCAidGFzayIsICJjb21wbGV0ZWQiLCAiY2FuY2VsbGVkIiwgInRhc2tDYW5jZWxsZWQiLCAidGFza0NvbXBsZXRlZCIsICJsaXN0ZW5lckNhbmNlbGxlZCIsICJsaXN0ZW5lckNvbXBsZXRlZCIsICJUYXNrQWJvcnRFcnJvciIsICJhbG0iLCAiYWRkTGlzdGVuZXIiLCAiY2xlYXJBbGxMaXN0ZW5lcnMiLCAicmVtb3ZlTGlzdGVuZXIiLCAicHJvbWlzZSIsICJxdWV1ZU1pY3JvdGFza1NoaW0iLCAiY3JlYXRlUXVldWVXaXRoVGltZXIiLCAidGltZW91dCIsICJub3RpZnkiLCAickFGIiwgInJlcXVlc3QiLCAicmVxUGFyYW1zIiwgImluaXQiLCAiYXBpVXJsIiwgIm1lc3NhZ2UiLCAiUGFnZSIsICJfUGFnZSIsICJwYWdlIiwgIm51bUVsZW1lbnRzIiwgInRvdGFsUGFnZXMiLCAidG90YWxFbGVtZW50cyIsICJlbGVtZW50cyIsICJmYWNldEZpZWxkc1RvQ291bnRzIiwgImdldFBhZ2luYXRlZCIsICJub3JtYWxpemUiLCAic3RyQXJyYXkiLCAicmVzdWx0QXJyYXkiLCAicGFydHMiLCAidXJsSm9pbiIsICJnZXRTdGF0cyIsICJyZWplY3RXaXRoVmFsdWUiLCAiZ2V0QmFubmVyVGV4dCIsICJob21lU2xpY2UiLCAiaG9tZVNsaWNlX2RlZmF1bHQiLCAiUmVpZmllZCIsICJfUmVpZmllZCIsICJheGlvbXMiLCAianNvbk5vZGUiLCAiYXhpb20iLCAiZXhpc3RpbmciLCAiTGlua2VkRW50aXRpZXMiLCAiX0xpbmtlZEVudGl0aWVzIiwgImxpbmtlZEVudGl0aWVzIiwgImlyaSIsICJsaW5rZWRFbnRpdHkiLCAiVGhpbmciLCAidHlwZXMiLCAiYXNBcnJheSIsICJsYWJlbHMiLCAiZGVmaW5pdGlvbiIsICJkZWYiLCAiRW50aXR5IiwgImRlZmluaXRpb25Qcm9wZXJ0aWVzIiwgInN5bm9ueW1Qcm9wZXJ0aWVzIiwgImhpZXJhcmNoaWNhbFByb3BlcnRpZXMiLCAiYW5ub3RhdGlvblByZWRpY2F0ZXMiLCAicHJlZGljYXRlIiwgInBhcmVudElyaSIsICJoaWVyYXJjaGljYWxQYXJlbnRzIiwgIkNsYXNzIiwgIkluZGl2aWR1YWwiLCAicmRmVHlwZXMiLCAiUHJvcGVydHkiLCAidGhpbmdGcm9tSnNvblByb3BlcnRpZXMiLCAibWFwVG9BcGlQYXJhbXMiLCAic2VhcmNoUGFyYW1zIiwgInNlYXJjaFBhcmFtc0NvcHkiLCAibmV3S2V5IiwgInRvQ2FtZWwiLCAiJDEiLCAiT250b2xvZ3kiLCAibmFtZXMiLCAiZGVzY3JpcHRpb25zIiwgInZlcnNpb25JcmkiLCAidmVyc2lvbkZyb21EYXRlIiwgInZlcnNpb25Gcm9tTnVtYmVyIiwgImltcG9ydF9tdWx0aW1hcCIsICJleHRyYWN0RW50aXR5SGllcmFyY2h5IiwgImVudGl0aWVzIiwgImNoaWxkVG9QYXJlbnRSZWxhdGlvbnMiLCAidXJpVG9Ob2RlIiwgImVudGl0eSIsICJpc1RvcCIsICJwYXJlbnRSZWxhdGlvbiIsICJwYXJlbnRFbnRpdHkiLCAicGFyZW50UmVsYXRpb25Ub0NoaWxkIiwgImNoaWxkUmVsYXRpb25Ub1BhcmVudCIsICJyZWxhdGlvbiIsICJicmVha0N5Y2xlcyIsICJjdXJyZW50SXJpIiwgInZpc2l0ZWRJcmlzIiwgInBhcmVudFJlbGF0aW9ucyIsICJwYXJlbnRUb0NoaWxkUmVsYXRpb25zIiwgImNoaWxkSXJpIiwgInJlbGF0aW9ucyIsICJjcmVhdGVUcmVlRnJvbUVudGl0aWVzIiwgInByZWZlcnJlZFJvb3RzIiwgIm9udG9sb2d5IiwgInJvb3RFbnRpdGllcyIsICJwcmVmZXJyZWQiLCAiYWxsTm9kZXMiLCAibm9kZUNoaWxkcmVuIiwgImF1dG9tYXRpY2FsbHlFeHBhbmRlZE5vZGVzIiwgInJvb3RFbnRpdHkiLCAiY3JlYXRlVHJlZU5vZGUiLCAiZGVidWdOdW1JdGVyYXRpb25zIiwgImNoaWxkTm9kZXMiLCAidHJlZU5vZGUiLCAiY2hpbGROb2RlIiwgInJlc2V0VHJlZUNvbnRlbnQiLCAicmVzZXRUcmVlU2V0dGluZ3MiLCAiZW5hYmxlUHJlZmVycmVkUm9vdHMiLCAiZGlzYWJsZVByZWZlcnJlZFJvb3RzIiwgIm9wZW5Ob2RlIiwgImNsb3NlTm9kZSIsICJzaG93T2Jzb2xldGUiLCAiaGlkZU9ic29sZXRlIiwgInNob3dTaWJsaW5ncyIsICJoaWRlU2libGluZ3MiLCAic2hvd0NvdW50cyIsICJoaWRlQ291bnRzIiwgImdldE9udG9sb2d5IiwgIm9udG9sb2d5SWQiLCAibGFuZyIsICJvbnRvbG9neVByb3BlcnRpZXMiLCAiZ2V0RW50aXR5V2l0aFR5cGUiLCAiZW50aXR5VHlwZSIsICJlbnRpdHlJcmkiLCAiYXBpU2VhcmNoUGFyYW1zIiwgImRvdWJsZUVuY29kZWRUZXJtVXJpIiwgImVudGl0eUpzb25Qcm9wZXJ0aWVzIiwgInJlc3VsdHMiLCAiZ2V0RW50aXR5IiwgImdldENsYXNzSW5zdGFuY2VzIiwgImNsYXNzSXJpIiwgImdldE9udG9sb2dpZXMiLCAicm93c1BlclBhZ2UiLCAiZ2V0RW50aXRpZXMiLCAiZ2V0QW5jZXN0b3JzIiwgInNob3dPYnNvbGV0ZUVuYWJsZWQiLCAiZG91YmxlRW5jb2RlZFVyaSIsICJhbmNlc3RvcnNQYWdlIiwgImdldFJvb3RFbnRpdGllcyIsICJjbGFzc2VzV2l0aEluZGl2aWR1YWxzIiwgIm9ycGhhbmVkSW5kaXZpZHVhbHMiLCAicm9vdHNQYWdlIiwgImdldE5vZGVDaGlsZHJlbiIsICJlbnRpdHlUeXBlUGx1cmFsIiwgImFic29sdXRlSWRlbnRpdHkiLCAiY2hpbGRyZW5QYWdlIiwgInRlcm0iLCAicGFyZW50aG9vZE1ldGFkYXRhIiwgIm9udG9sb2dpZXNTbGljZSIsICJyb290Tm9kZXMiLCAicm9vdFRlcm1zIiwgInNlbGVjdGVkSXNEZXNjZW5kYW50T2ZQcmVmZXJyZWRSb290cyIsICJhYnNJZCIsICJvbnRvbG9naWVzU2xpY2VfZGVmYXVsdCIsICJnZXRTZWFyY2hSZXN1bHRzIiwgInF1ZXJ5IiwgInBhcmFtIiwgInBhcnNlZFF1ZXJ5IiwgInNlYXJjaFNsaWNlIiwgInNlYXJjaFNsaWNlX2RlZmF1bHQiLCAiY29tbW9uIiwgImNvbW1vbl9kZWZhdWx0IiwgInJlZCIsICJyZWRfZGVmYXVsdCIsICJwdXJwbGUiLCAicHVycGxlX2RlZmF1bHQiLCAiYmx1ZSIsICJibHVlX2RlZmF1bHQiLCAibGlnaHRCbHVlIiwgImxpZ2h0Qmx1ZV9kZWZhdWx0IiwgImdyZWVuIiwgImdyZWVuX2RlZmF1bHQiLCAib3JhbmdlIiwgIm9yYW5nZV9kZWZhdWx0IiwgImdyZXkiLCAiZ3JleV9kZWZhdWx0IiwgImlkZW50aWZpZXJfZGVmYXVsdCIsICJpbXBvcnRfc3R5bGVkX2VuZ2luZSIsICJpbXBvcnRfZGVlcG1lcmdlIiwgInNoYXBlX2RlZmF1bHQiLCAibWVyZ2VfZGVmYXVsdCIsICJpbXBvcnRfY2FwaXRhbGl6ZSIsICJzdHlsZV9kZWZhdWx0IiwgImNvbXBvc2VfZGVmYXVsdCIsICJkZWZhdWx0U3hDb25maWdfZGVmYXVsdCIsICJzdHlsZUZ1bmN0aW9uU3hfZGVmYXVsdCIsICJjcmVhdGVUaGVtZV9kZWZhdWx0IiwgImlzT2JqZWN0RW1wdHkiLCAiY29udGV4dFRoZW1lIiwgInVzZVRoZW1lV2l0aG91dERlZmF1bHRfZGVmYXVsdCIsICJ1c2VUaGVtZV9kZWZhdWx0IiwgImRlZmF1bHRHZW5lcmF0b3IiLCAiY3JlYXRlQ2xhc3NOYW1lR2VuZXJhdG9yIiwgImdlbmVyYXRlIiwgImdlbmVyYXRvciIsICJDbGFzc05hbWVHZW5lcmF0b3IiLCAiQ2xhc3NOYW1lR2VuZXJhdG9yX2RlZmF1bHQiLCAiY2xzeCIsICJjbHN4X2RlZmF1bHQiLCAiZ2xvYmFsU3RhdGVDbGFzc2VzIiwgImdlbmVyYXRlVXRpbGl0eUNsYXNzIiwgImdsb2JhbFN0YXRlUHJlZml4IiwgImdsb2JhbFN0YXRlQ2xhc3MiLCAiZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyIsICJzbG90cyIsICJwcm9jZXNzU3R5bGVzIiwgInN0eWxlZEVuZ2luZVN0eWxlZCIsICJzdHlsZWRfZGVmYXVsdCIsICJyZXNvbHZlUHJvcHMiLCAiZGVmYXVsdFByb3BzIiwgImRlZmF1bHRTbG90UHJvcHMiLCAic2xvdFByb3BzIiwgInNsb3RQcm9wTmFtZSIsICJnZXRUaGVtZVByb3BzIiwgInBhcmFtcyIsICJ1c2VUaGVtZVByb3BzIiwgInVzZUVuaGFuY2VkRWZmZWN0IiwgInVzZUVuaGFuY2VkRWZmZWN0X2RlZmF1bHQiLCAiY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uIiwgImlzTXVpRWxlbWVudCIsICJtdWlOYW1lcyIsICJfbXVpTmFtZSIsICJfZWxlbWVudCR0eXBlIiwgInNldFJlZiIsICJnbG9iYWxJZCIsICJ1c2VHbG9iYWxJZCIsICJpZE92ZXJyaWRlIiwgImRlZmF1bHRJZCIsICJzZXREZWZhdWx0SWQiLCAibWF5YmVSZWFjdFVzZUlkIiwgInVzZUlkIiwgInJlYWN0SWQiLCAidXNlQ29udHJvbGxlZCIsICJjb250cm9sbGVkIiwgImRlZmF1bHRQcm9wIiwgImlzQ29udHJvbGxlZCIsICJ2YWx1ZVN0YXRlIiwgInNldFZhbHVlIiwgInNldFZhbHVlSWZVbmNvbnRyb2xsZWQiLCAibmV3VmFsdWUiLCAidXNlRXZlbnRDYWxsYmFjayIsICJ1c2VFdmVudENhbGxiYWNrX2RlZmF1bHQiLCAidXNlRm9ya1JlZiIsICJyZWZzIiwgImluc3RhbmNlIiwgIlVOSU5JVElBTElaRUQiLCAidXNlTGF6eVJlZiIsICJpbml0QXJnIiwgIkVNUFRZIiwgInVzZU9uTW91bnQiLCAiVGltZW91dCIsICJfVGltZW91dCIsICJkZWxheSIsICJ1c2VUaW1lb3V0IiwgImhhZEtleWJvYXJkRXZlbnQiLCAiaGFkRm9jdXNWaXNpYmxlUmVjZW50bHkiLCAiaGFkRm9jdXNWaXNpYmxlUmVjZW50bHlUaW1lb3V0IiwgImlucHV0VHlwZXNXaGl0ZWxpc3QiLCAiZm9jdXNUcmlnZ2Vyc0tleWJvYXJkTW9kYWxpdHkiLCAiaGFuZGxlS2V5RG93biIsICJldmVudCIsICJoYW5kbGVQb2ludGVyRG93biIsICJoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlIiwgInByZXBhcmUiLCAiZG9jIiwgImlzRm9jdXNWaXNpYmxlIiwgInVzZUlzRm9jdXNWaXNpYmxlIiwgImlzRm9jdXNWaXNpYmxlUmVmIiwgImhhbmRsZUJsdXJWaXNpYmxlIiwgImhhbmRsZUZvY3VzVmlzaWJsZSIsICJjb21wb3NlQ2xhc3NlcyIsICJnZXRVdGlsaXR5Q2xhc3MiLCAiY2xhc3NlcyIsICJ1dGlsaXR5Q2xhc3MiLCAiaW1wb3J0X2pzeF9ydW50aW1lIiwgImRlZmF1bHRDcmVhdGVTdHlsZWRDb21wb25lbnQiLCAidXNlVGhlbWVQcm9wc0RlZmF1bHQiLCAiam9pbkNoaWxkcmVuIiwgInNlcGFyYXRvciIsICJjaGlsZHJlbkFycmF5IiwgImNoaWxkIiwgImdldFNpZGVGcm9tRGlyZWN0aW9uIiwgImRpcmVjdGlvblZhbHVlcyIsICJzcGFjaW5nVmFsdWVzIiwgInByZXZpb3VzRGlyZWN0aW9uVmFsdWUiLCAiY3JlYXRlU3RhY2siLCAiY3JlYXRlU3R5bGVkQ29tcG9uZW50IiwgInVzZVV0aWxpdHlDbGFzc2VzIiwgIlN0YWNrUm9vdCIsICJpblByb3BzIiwgInRoZW1lUHJvcHMiLCAiZGl2aWRlciIsICJ1c2VGbGV4R2FwIiwgIl9qc3giLCAiaW1wb3J0X2Zvcm1hdE11aUVycm9yTWVzc2FnZSIsICJpbXBvcnRfc3R5bGVGdW5jdGlvblN4IiwgImltcG9ydF9jcmVhdGVUaGVtZSIsICJjcmVhdGVNaXhpbnMiLCAibWl4aW5zIiwgImltcG9ydF9jb2xvck1hbmlwdWxhdG9yIiwgImxpZ2h0IiwgImRhcmsiLCAiYWRkTGlnaHRPckRhcmsiLCAiaW50ZW50IiwgInNoYWRlIiwgInRvbmFsT2Zmc2V0IiwgInRvbmFsT2Zmc2V0TGlnaHQiLCAidG9uYWxPZmZzZXREYXJrIiwgImdldERlZmF1bHRQcmltYXJ5IiwgIm1vZGUiLCAiZ2V0RGVmYXVsdFNlY29uZGFyeSIsICJnZXREZWZhdWx0RXJyb3IiLCAiZ2V0RGVmYXVsdEluZm8iLCAiZ2V0RGVmYXVsdFN1Y2Nlc3MiLCAiZ2V0RGVmYXVsdFdhcm5pbmciLCAiY3JlYXRlUGFsZXR0ZSIsICJjb250cmFzdFRocmVzaG9sZCIsICJwcmltYXJ5IiwgInNlY29uZGFyeSIsICJpbmZvIiwgInN1Y2Nlc3MiLCAiZ2V0Q29udHJhc3RUZXh0IiwgImF1Z21lbnRDb2xvciIsICJtYWluU2hhZGUiLCAibGlnaHRTaGFkZSIsICJkYXJrU2hhZGUiLCAibW9kZXMiLCAicm91bmQiLCAiY2FzZUFsbENhcHMiLCAiZGVmYXVsdEZvbnRGYW1pbHkiLCAiY3JlYXRlVHlwb2dyYXBoeSIsICJ0eXBvZ3JhcGh5IiwgImZvbnRGYW1pbHkiLCAiZm9udFNpemUiLCAiZm9udFdlaWdodExpZ2h0IiwgImZvbnRXZWlnaHRSZWd1bGFyIiwgImZvbnRXZWlnaHRNZWRpdW0iLCAiZm9udFdlaWdodEJvbGQiLCAiaHRtbEZvbnRTaXplIiwgImFsbFZhcmlhbnRzIiwgInB4VG9SZW0yIiwgImNvZWYiLCAicHhUb1JlbSIsICJidWlsZFZhcmlhbnQiLCAiZm9udFdlaWdodCIsICJsaW5lSGVpZ2h0IiwgImxldHRlclNwYWNpbmciLCAiY2FzaW5nIiwgImNyZWF0ZVNoYWRvdyIsICJweCIsICJzaGFkb3dzIiwgInNoYWRvd3NfZGVmYXVsdCIsICJlYXNpbmciLCAiZHVyYXRpb24iLCAiZm9ybWF0TXMiLCAibWlsbGlzZWNvbmRzIiwgImdldEF1dG9IZWlnaHREdXJhdGlvbiIsICJjb25zdGFudCIsICJjcmVhdGVUcmFuc2l0aW9ucyIsICJpbnB1dFRyYW5zaXRpb25zIiwgIm1lcmdlZEVhc2luZyIsICJtZXJnZWREdXJhdGlvbiIsICJkdXJhdGlvbk9wdGlvbiIsICJlYXNpbmdPcHRpb24iLCAiYW5pbWF0ZWRQcm9wIiwgInpJbmRleCIsICJ6SW5kZXhfZGVmYXVsdCIsICJtaXhpbnNJbnB1dCIsICJ0cmFuc2l0aW9uc0lucHV0IiwgInR5cG9ncmFwaHlJbnB1dCIsICJzeXN0ZW1UaGVtZSIsICJzeXN0ZW1DcmVhdGVUaGVtZSIsICJkZWZhdWx0VGhlbWVfZGVmYXVsdCIsICJpbXBvcnRfY3JlYXRlU3R5bGVkIiwgImNhcGl0YWxpemVfZGVmYXVsdCIsICJjcmVhdGVDaGFpbmVkRnVuY3Rpb25fZGVmYXVsdCIsICJnZXRTdmdJY29uVXRpbGl0eUNsYXNzIiwgInN2Z0ljb25DbGFzc2VzIiwgIlN2Z0ljb25Sb290IiwgIl90aGVtZSR0cmFuc2l0aW9ucyIsICJfdGhlbWUkdHJhbnNpdGlvbnMkY3IiLCAiX3RoZW1lJHRyYW5zaXRpb25zMiIsICJfdGhlbWUkdHlwb2dyYXBoeSIsICJfdGhlbWUkdHlwb2dyYXBoeSRweFQiLCAiX3RoZW1lJHR5cG9ncmFwaHkyIiwgIl90aGVtZSR0eXBvZ3JhcGh5MiRweCIsICJfdGhlbWUkdHlwb2dyYXBoeTMiLCAiX3RoZW1lJHR5cG9ncmFwaHkzJHB4IiwgIl9wYWxldHRlJG93bmVyU3RhdGUkYyIsICJfcGFsZXR0ZTIiLCAiX3BhbGV0dGUzIiwgIlN2Z0ljb24iLCAiaHRtbENvbG9yIiwgImluaGVyaXRWaWV3Qm94IiwgInRpdGxlQWNjZXNzIiwgInZpZXdCb3giLCAiaGFzU3ZnQXNDaGlsZCIsICJtb3JlIiwgIl9qc3hzIiwgIlN2Z0ljb25fZGVmYXVsdCIsICJjcmVhdGVTdmdJY29uIiwgImRpc3BsYXlOYW1lIiwgImlzTXVpRWxlbWVudF9kZWZhdWx0IiwgInVzZUlkX2RlZmF1bHQiLCAidXNlQ29udHJvbGxlZF9kZWZhdWx0IiwgInVzZUZvcmtSZWZfZGVmYXVsdCIsICJ1c2VJc0ZvY3VzVmlzaWJsZV9kZWZhdWx0IiwgIl9zZXRQcm90b3R5cGVPZiIsICJfaW5oZXJpdHNMb29zZSIsICJzdWJDbGFzcyIsICJzdXBlckNsYXNzIiwgIlRyYW5zaXRpb25Hcm91cENvbnRleHRfZGVmYXVsdCIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgImdldENoaWxkTWFwcGluZyIsICJtYXBGbiIsICJtYXBwZXIiLCAibWVyZ2VDaGlsZE1hcHBpbmdzIiwgImdldFZhbHVlRm9yS2V5IiwgIm5leHRLZXlzUGVuZGluZyIsICJwZW5kaW5nS2V5cyIsICJwcmV2S2V5IiwgImNoaWxkTWFwcGluZyIsICJuZXh0S2V5IiwgInBlbmRpbmdOZXh0S2V5IiwgImdldFByb3AiLCAiZ2V0SW5pdGlhbENoaWxkTWFwcGluZyIsICJvbkV4aXRlZCIsICJnZXROZXh0Q2hpbGRNYXBwaW5nIiwgIm5leHRQcm9wcyIsICJwcmV2Q2hpbGRNYXBwaW5nIiwgIm5leHRDaGlsZE1hcHBpbmciLCAiaGFzUHJldiIsICJoYXNOZXh0IiwgInByZXZDaGlsZCIsICJpc0xlYXZpbmciLCAiVHJhbnNpdGlvbkdyb3VwIiwgIl9SZWFjdCRDb21wb25lbnQiLCAiaGFuZGxlRXhpdGVkIiwgImZpcnN0UmVuZGVyIiwgImN1cnJlbnRDaGlsZE1hcHBpbmciLCAiX3RoaXMkcHJvcHMiLCAiY2hpbGRGYWN0b3J5IiwgIlRyYW5zaXRpb25Hcm91cF9kZWZhdWx0IiwgIlJpcHBsZSIsICJwdWxzYXRlIiwgInJpcHBsZVgiLCAicmlwcGxlWSIsICJyaXBwbGVTaXplIiwgImluUHJvcCIsICJsZWF2aW5nIiwgInNldExlYXZpbmciLCAicmlwcGxlQ2xhc3NOYW1lIiwgInJpcHBsZVN0eWxlcyIsICJjaGlsZENsYXNzTmFtZSIsICJ0aW1lb3V0SWQiLCAiUmlwcGxlX2RlZmF1bHQiLCAidG91Y2hSaXBwbGVDbGFzc2VzIiwgInRvdWNoUmlwcGxlQ2xhc3Nlc19kZWZhdWx0IiwgIl90IiwgIl90MiIsICJfdDMiLCAiX3Q0IiwgIkRVUkFUSU9OIiwgIkRFTEFZX1JJUFBMRSIsICJlbnRlcktleWZyYW1lIiwgImV4aXRLZXlmcmFtZSIsICJwdWxzYXRlS2V5ZnJhbWUiLCAiVG91Y2hSaXBwbGVSb290IiwgIlRvdWNoUmlwcGxlUmlwcGxlIiwgIlRvdWNoUmlwcGxlIiwgImNlbnRlclByb3AiLCAicmlwcGxlcyIsICJzZXRSaXBwbGVzIiwgInJpcHBsZUNhbGxiYWNrIiwgImlnbm9yaW5nTW91c2VEb3duIiwgInN0YXJ0VGltZXIiLCAic3RhcnRUaW1lckNvbW1pdCIsICJzdGFydENvbW1pdCIsICJvbGRSaXBwbGVzIiwgImNlbnRlciIsICJmYWtlRWxlbWVudCIsICJyZWN0IiwgImNsaWVudFgiLCAiY2xpZW50WSIsICJzaXplWCIsICJzaXplWSIsICJzdG9wIiwgIlRvdWNoUmlwcGxlX2RlZmF1bHQiLCAiZ2V0QnV0dG9uQmFzZVV0aWxpdHlDbGFzcyIsICJidXR0b25CYXNlQ2xhc3NlcyIsICJidXR0b25CYXNlQ2xhc3Nlc19kZWZhdWx0IiwgImRpc2FibGVkIiwgImZvY3VzVmlzaWJsZSIsICJmb2N1c1Zpc2libGVDbGFzc05hbWUiLCAiY29tcG9zZWRDbGFzc2VzIiwgIkJ1dHRvbkJhc2VSb290IiwgIkJ1dHRvbkJhc2UiLCAiY2VudGVyUmlwcGxlIiwgImRpc2FibGVSaXBwbGUiLCAiZGlzYWJsZVRvdWNoUmlwcGxlIiwgImZvY3VzUmlwcGxlIiwgIkxpbmtDb21wb25lbnQiLCAib25CbHVyIiwgIm9uQ2xpY2siLCAib25Db250ZXh0TWVudSIsICJvbkRyYWdMZWF2ZSIsICJvbkZvY3VzIiwgIm9uRm9jdXNWaXNpYmxlIiwgIm9uS2V5RG93biIsICJvbktleVVwIiwgIm9uTW91c2VEb3duIiwgIm9uTW91c2VMZWF2ZSIsICJvbk1vdXNlVXAiLCAib25Ub3VjaEVuZCIsICJvblRvdWNoTW92ZSIsICJvblRvdWNoU3RhcnQiLCAidGFiSW5kZXgiLCAiVG91Y2hSaXBwbGVQcm9wcyIsICJ0b3VjaFJpcHBsZVJlZiIsICJidXR0b25SZWYiLCAicmlwcGxlUmVmIiwgImhhbmRsZVJpcHBsZVJlZiIsICJmb2N1c1Zpc2libGVSZWYiLCAic2V0Rm9jdXNWaXNpYmxlIiwgIm1vdW50ZWRTdGF0ZSIsICJzZXRNb3VudGVkU3RhdGUiLCAiZW5hYmxlVG91Y2hSaXBwbGUiLCAidXNlUmlwcGxlSGFuZGxlciIsICJyaXBwbGVBY3Rpb24iLCAiZXZlbnRDYWxsYmFjayIsICJza2lwUmlwcGxlQWN0aW9uIiwgImhhbmRsZU1vdXNlRG93biIsICJoYW5kbGVDb250ZXh0TWVudSIsICJoYW5kbGVEcmFnTGVhdmUiLCAiaGFuZGxlTW91c2VVcCIsICJoYW5kbGVNb3VzZUxlYXZlIiwgImhhbmRsZVRvdWNoU3RhcnQiLCAiaGFuZGxlVG91Y2hFbmQiLCAiaGFuZGxlVG91Y2hNb3ZlIiwgImhhbmRsZUJsdXIiLCAiaGFuZGxlRm9jdXMiLCAiaXNOb25OYXRpdmVCdXR0b24iLCAiYnV0dG9uIiwgImtleWRvd25SZWYiLCAiaGFuZGxlS2V5VXAiLCAiQ29tcG9uZW50UHJvcCIsICJidXR0b25Qcm9wcyIsICJoYW5kbGVSZWYiLCAiQnV0dG9uQmFzZV9kZWZhdWx0IiwgImdldFR5cG9ncmFwaHlVdGlsaXR5Q2xhc3MiLCAidHlwb2dyYXBoeUNsYXNzZXMiLCAiYWxpZ24iLCAiZ3V0dGVyQm90dG9tIiwgIm5vV3JhcCIsICJwYXJhZ3JhcGgiLCAiVHlwb2dyYXBoeVJvb3QiLCAiZGVmYXVsdFZhcmlhbnRNYXBwaW5nIiwgImNvbG9yVHJhbnNmb3JtYXRpb25zIiwgInRyYW5zZm9ybURlcHJlY2F0ZWRDb2xvcnMiLCAiVHlwb2dyYXBoeSIsICJ2YXJpYW50TWFwcGluZyIsICJUeXBvZ3JhcGh5X2RlZmF1bHQiLCAiZm9ybUNvbnRyb2xTdGF0ZSIsICJzdGF0ZXMiLCAibXVpRm9ybUNvbnRyb2wiLCAiRm9ybUNvbnRyb2xDb250ZXh0IiwgIkZvcm1Db250cm9sQ29udGV4dF9kZWZhdWx0IiwgInVzZUZvcm1Db250cm9sIiwgImhhc1ZhbHVlIiwgImlzRmlsbGVkIiwgIlNTUiIsICJpc0Fkb3JuZWRTdGFydCIsICJnZXRTd2l0Y2hCYXNlVXRpbGl0eUNsYXNzIiwgInN3aXRjaEJhc2VDbGFzc2VzIiwgImNoZWNrZWQiLCAiZWRnZSIsICJTd2l0Y2hCYXNlUm9vdCIsICJTd2l0Y2hCYXNlSW5wdXQiLCAiU3dpdGNoQmFzZSIsICJhdXRvRm9jdXMiLCAiY2hlY2tlZFByb3AiLCAiY2hlY2tlZEljb24iLCAiZGVmYXVsdENoZWNrZWQiLCAiZGlzYWJsZWRQcm9wIiwgImRpc2FibGVGb2N1c1JpcHBsZSIsICJpY29uIiwgImlucHV0UHJvcHMiLCAiaW5wdXRSZWYiLCAib25DaGFuZ2UiLCAicmVhZE9ubHkiLCAicmVxdWlyZWQiLCAic2V0Q2hlY2tlZFN0YXRlIiwgImhhbmRsZUlucHV0Q2hhbmdlIiwgIm5ld0NoZWNrZWQiLCAiaGFzTGFiZWxGb3IiLCAiU3dpdGNoQmFzZV9kZWZhdWx0IiwgIkNoZWNrQm94T3V0bGluZUJsYW5rX2RlZmF1bHQiLCAiQ2hlY2tCb3hfZGVmYXVsdCIsICJJbmRldGVybWluYXRlQ2hlY2tCb3hfZGVmYXVsdCIsICJnZXRDaGVja2JveFV0aWxpdHlDbGFzcyIsICJjaGVja2JveENsYXNzZXMiLCAiY2hlY2tib3hDbGFzc2VzX2RlZmF1bHQiLCAiaW5kZXRlcm1pbmF0ZSIsICJDaGVja2JveFJvb3QiLCAiZGVmYXVsdENoZWNrZWRJY29uIiwgImRlZmF1bHRJY29uIiwgImRlZmF1bHRJbmRldGVybWluYXRlSWNvbiIsICJDaGVja2JveCIsICJfaWNvbiRwcm9wcyRmb250U2l6ZSIsICJfaW5kZXRlcm1pbmF0ZUljb24kcHIiLCAiaWNvblByb3AiLCAiaW5kZXRlcm1pbmF0ZUljb25Qcm9wIiwgImluZGV0ZXJtaW5hdGVJY29uIiwgIkNoZWNrYm94X2RlZmF1bHQiLCAiZ2V0Q2lyY3VsYXJQcm9ncmVzc1V0aWxpdHlDbGFzcyIsICJjaXJjdWxhclByb2dyZXNzQ2xhc3NlcyIsICJTSVpFIiwgImNpcmN1bGFyUm90YXRlS2V5ZnJhbWUiLCAiY2lyY3VsYXJEYXNoS2V5ZnJhbWUiLCAiZGlzYWJsZVNocmluayIsICJDaXJjdWxhclByb2dyZXNzUm9vdCIsICJDaXJjdWxhclByb2dyZXNzU1ZHIiwgIkNpcmN1bGFyUHJvZ3Jlc3NDaXJjbGUiLCAiQ2lyY3VsYXJQcm9ncmVzcyIsICJ0aGlja25lc3MiLCAiY2lyY2xlU3R5bGUiLCAicm9vdFN0eWxlIiwgInJvb3RQcm9wcyIsICJjaXJjdW1mZXJlbmNlIiwgIkNpcmN1bGFyUHJvZ3Jlc3NfZGVmYXVsdCIsICJnZXRGb3JtQ29udHJvbFV0aWxpdHlDbGFzc2VzIiwgImZvcm1Db250cm9sQ2xhc3NlcyIsICJmdWxsV2lkdGgiLCAiRm9ybUNvbnRyb2xSb290IiwgIkZvcm1Db250cm9sIiwgInZpc3VhbGx5Rm9jdXNlZCIsICJoaWRkZW5MYWJlbCIsICJhZG9ybmVkU3RhcnQiLCAic2V0QWRvcm5lZFN0YXJ0IiwgImluaXRpYWxBZG9ybmVkU3RhcnQiLCAiZmlsbGVkIiwgInNldEZpbGxlZCIsICJpbml0aWFsRmlsbGVkIiwgImZvY3VzZWRTdGF0ZSIsICJzZXRGb2N1c2VkIiwgImZvY3VzZWQiLCAicmVnaXN0ZXJFZmZlY3QiLCAiY2hpbGRDb250ZXh0IiwgIkZvcm1Db250cm9sX2RlZmF1bHQiLCAiU3RhY2siLCAiU3RhY2tfZGVmYXVsdCIsICJnZXRGb3JtQ29udHJvbExhYmVsVXRpbGl0eUNsYXNzZXMiLCAiZm9ybUNvbnRyb2xMYWJlbENsYXNzZXMiLCAiZm9ybUNvbnRyb2xMYWJlbENsYXNzZXNfZGVmYXVsdCIsICJsYWJlbFBsYWNlbWVudCIsICJGb3JtQ29udHJvbExhYmVsUm9vdCIsICJBc3Rlcmlza0NvbXBvbmVudCIsICJGb3JtQ29udHJvbExhYmVsIiwgIl9zbG90UHJvcHMkdHlwb2dyYXBoeSIsICJjb21wb25lbnRzUHJvcHMiLCAiY29udHJvbCIsICJkaXNhYmxlVHlwb2dyYXBoeSIsICJsYWJlbFByb3AiLCAicmVxdWlyZWRQcm9wIiwgImNvbnRyb2xQcm9wcyIsICJmY3MiLCAidHlwb2dyYXBoeVNsb3RQcm9wcyIsICJGb3JtQ29udHJvbExhYmVsX2RlZmF1bHQiLCAiZ2V0Rm9ybUdyb3VwVXRpbGl0eUNsYXNzIiwgImZvcm1Hcm91cENsYXNzZXMiLCAicm93IiwgIkZvcm1Hcm91cFJvb3QiLCAiRm9ybUdyb3VwIiwgIkZvcm1Hcm91cF9kZWZhdWx0IiwgIlJhZGlvQnV0dG9uVW5jaGVja2VkX2RlZmF1bHQiLCAiUmFkaW9CdXR0b25DaGVja2VkX2RlZmF1bHQiLCAiUmFkaW9CdXR0b25JY29uUm9vdCIsICJSYWRpb0J1dHRvbkljb25CYWNrZ3JvdW5kIiwgIlJhZGlvQnV0dG9uSWNvbkRvdCIsICJSYWRpb0J1dHRvbkljb24iLCAiUmFkaW9CdXR0b25JY29uX2RlZmF1bHQiLCAiUmFkaW9Hcm91cENvbnRleHQiLCAiUmFkaW9Hcm91cENvbnRleHRfZGVmYXVsdCIsICJ1c2VSYWRpb0dyb3VwIiwgImdldFJhZGlvVXRpbGl0eUNsYXNzIiwgInJhZGlvQ2xhc3NlcyIsICJyYWRpb0NsYXNzZXNfZGVmYXVsdCIsICJSYWRpb1Jvb3QiLCAiYXJlRXF1YWxWYWx1ZXMiLCAiUmFkaW8iLCAiX2RlZmF1bHRJY29uJHByb3BzJGZvIiwgIl9kZWZhdWx0Q2hlY2tlZEljb24kcCIsICJuYW1lUHJvcCIsICJvbkNoYW5nZVByb3AiLCAicmFkaW9Hcm91cCIsICJSYWRpb19kZWZhdWx0IiwgIlJhZGlvR3JvdXAiLCAiYWN0aW9ucyIsICJ2YWx1ZVByb3AiLCAicm9vdFJlZiIsICJzZXRWYWx1ZVN0YXRlIiwgIlJhZGlvR3JvdXBfZGVmYXVsdCIsICJOb2RlIiwgImV4cGFuZGFibGUiLCAiZXhwYW5kZWQiLCAiaGlnaGxpZ2h0IiwgImlzTGFzdCIsICJFbnRpdHlUcmVlIiwgInNlbGVjdGVkRW50aXR5IiwgIm9uTmF2aWdhdGVUb0VudGl0eSIsICJvbk5hdmlnYXRlVG9PbnRvbG9neSIsICJub2Rlc1dpdGhDaGlsZHJlbkxvYWRlZCIsICJudW1QZW5kaW5nVHJlZVJlcXVlc3RzIiwgIm1hbnVhbGx5RXhwYW5kZWROb2RlcyIsICJzaG93U2libGluZ3NFbmFibGVkIiwgInNob3dDb3VudHNFbmFibGVkIiwgInRvZ2dsZU5vZGUiLCAiaXNFeHBhbmRlZCIsICJub2Rlc01pc3NpbmdDaGlsZHJlbiIsICJwcm9taXNlcyIsICJ0b2dnbGVTaG93T2Jzb2xldGUiLCAidG9nZ2xlU2hvd1NpYmxpbmdzIiwgInRvZ2dsZVNob3dDb3VudHMiLCAicmVuZGVyTm9kZUNoaWxkcmVuIiwgImNoaWxkcmVuQ29weSIsICJ0aXRsZUEiLCAidGl0bGVCIiwgImNoaWxkcmVuU29ydGVkIiwgIlRyZWVMaW5rIiwgInRpdGxlIiwgImRlZmluZWRCeSIsICJkZWZpbmluZ09udG9sb2d5IiwgIlN1YnNjcmliYWJsZSIsICJpc1NlcnZlciIsICJub29wIiwgImZ1bmN0aW9uYWxVcGRhdGUiLCAidXBkYXRlciIsICJpc1ZhbGlkVGltZW91dCIsICJlbnN1cmVRdWVyeUtleUFycmF5IiwgInRpbWVVbnRpbFN0YWxlIiwgInVwZGF0ZWRBdCIsICJzdGFsZVRpbWUiLCAicGFyc2VRdWVyeUFyZ3MiLCAiYXJnMSIsICJhcmcyIiwgImFyZzMiLCAiaXNRdWVyeUtleSIsICJwYXJzZUZpbHRlckFyZ3MiLCAibWFwUXVlcnlTdGF0dXNGaWx0ZXIiLCAiYWN0aXZlIiwgImluYWN0aXZlIiwgImlzQWN0aXZlIiwgIm1hdGNoUXVlcnkiLCAiZmlsdGVycyIsICJleGFjdCIsICJmZXRjaGluZyIsICJxdWVyeUtleSIsICJzdGFsZSIsICJoYXNoUXVlcnlLZXlCeU9wdGlvbnMiLCAicGFydGlhbE1hdGNoS2V5IiwgInF1ZXJ5U3RhdHVzRmlsdGVyIiwgIm1hdGNoTXV0YXRpb24iLCAibXV0YXRpb24iLCAibXV0YXRpb25LZXkiLCAiaGFzaFF1ZXJ5S2V5IiwgImhhc2hGbiIsICJzdGFibGVWYWx1ZUhhc2giLCAicGFydGlhbERlZXBFcXVhbCIsICJyZXBsYWNlRXF1YWxEZWVwIiwgImFTaXplIiwgImJJdGVtcyIsICJiU2l6ZSIsICJlcXVhbEl0ZW1zIiwgImhhc09iamVjdFByb3RvdHlwZSIsICJjdG9yIiwgInByb3QiLCAic2xlZXAiLCAicmVzb2x2ZSIsICJzY2hlZHVsZU1pY3JvdGFzayIsICJnZXRBYm9ydENvbnRyb2xsZXIiLCAiRm9jdXNNYW5hZ2VyIiwgIl9TdWJzY3JpYmFibGUiLCAiX3dpbmRvdyIsICJfdGhpcyRjbGVhbnVwIiwgInNldHVwIiwgIl90aGlzJGNsZWFudXAyIiwgImZvY3VzTWFuYWdlciIsICJPbmxpbmVNYW5hZ2VyIiwgIm9uT25saW5lIiwgIm9ubGluZSIsICJvbmxpbmVNYW5hZ2VyIiwgImRlZmF1bHRSZXRyeURlbGF5IiwgImZhaWx1cmVDb3VudCIsICJpc0NhbmNlbGFibGUiLCAiQ2FuY2VsbGVkRXJyb3IiLCAiaXNDYW5jZWxsZWRFcnJvciIsICJSZXRyeWVyIiwgImNhbmNlbFJldHJ5IiwgImNhbmNlbEZuIiwgImNvbnRpbnVlRm4iLCAicHJvbWlzZVJlc29sdmUiLCAicHJvbWlzZVJlamVjdCIsICJjYW5jZWxPcHRpb25zIiwgIm91dGVyUmVzb2x2ZSIsICJvdXRlclJlamVjdCIsICJwYXVzZSIsICJjb250aW51ZVJlc29sdmUiLCAicnVuIiwgInByb21pc2VPclZhbHVlIiwgIl9jb25maWckcmV0cnkiLCAiX2NvbmZpZyRyZXRyeURlbGF5IiwgInJldHJ5IiwgInJldHJ5RGVsYXkiLCAic2hvdWxkUmV0cnkiLCAiTm90aWZ5TWFuYWdlciIsICJfdGhpczMiLCAicXVldWUiLCAibm90aWZ5TWFuYWdlciIsICJsb2dnZXIiLCAiZ2V0TG9nZ2VyIiwgInNldExvZ2dlciIsICJuZXdMb2dnZXIiLCAiUXVlcnkiLCAiX3RoaXMkb3B0aW9ucyRjYWNoZVRpIiwgIl90aGlzJG9wdGlvbnMkaXNEYXRhRSIsICJfdGhpcyRvcHRpb25zIiwgInByZXZEYXRhIiwgImRhdGEiLCAic2V0U3RhdGVPcHRpb25zIiwgIl90aGlzJHJldHJ5ZXIiLCAiX3RoaXMkcmV0cnllcjIiLCAiX3RoaXMkcmV0cnllcjMiLCAiZmV0Y2hPcHRpb25zIiwgIl90aGlzJG9wdGlvbnMkYmVoYXZpbyIsICJfY29udGV4dCRmZXRjaE9wdGlvbnMiLCAiX2Fib3J0Q29udHJvbGxlciRhYm9yIiwgIl90aGlzJHJldHJ5ZXI0IiwgInF1ZXJ5Rm5Db250ZXh0IiwgImZldGNoRm4iLCAiX3RoaXMkb3B0aW9ucyRiZWhhdmlvMiIsICJfY29udGV4dCRmZXRjaE9wdGlvbnMyIiwgImhhc0luaXRpYWxEYXRhIiwgImluaXRpYWxEYXRhVXBkYXRlZEF0IiwgImhhc0RhdGEiLCAiX2FjdGlvbiRtZXRhIiwgIl9hY3Rpb24kZGF0YVVwZGF0ZWRBdCIsICJRdWVyeUNhY2hlIiwgImNsaWVudCIsICJfb3B0aW9ucyRxdWVyeUhhc2giLCAicXVlcnlIYXNoIiwgInF1ZXJ5SW5NYXAiLCAiX3BhcnNlRmlsdGVyQXJncyIsICJfcGFyc2VGaWx0ZXJBcmdzMiIsICJfdGhpczQiLCAiX3RoaXM1IiwgIk11dGF0aW9uIiwgImdldERlZmF1bHRTdGF0ZSIsICJyZXN0b3JlZCIsICJfdGhpcyRvcHRpb25zJHJldHJ5IiwgIk11dGF0aW9uQ2FjaGUiLCAicGF1c2VkTXV0YXRpb25zIiwgImluZmluaXRlUXVlcnlCZWhhdmlvciIsICJfY29udGV4dCRmZXRjaE9wdGlvbnMzIiwgIl9jb250ZXh0JGZldGNoT3B0aW9uczQiLCAiX2NvbnRleHQkc3RhdGUkZGF0YSIsICJfY29udGV4dCRzdGF0ZSRkYXRhMiIsICJyZWZldGNoUGFnZSIsICJmZXRjaE1vcmUiLCAicGFnZVBhcmFtIiwgImlzRmV0Y2hpbmdOZXh0UGFnZSIsICJpc0ZldGNoaW5nUHJldmlvdXNQYWdlIiwgIm9sZFBhZ2VzIiwgIm9sZFBhZ2VQYXJhbXMiLCAiYWJvcnRTaWduYWwiLCAibmV3UGFnZVBhcmFtcyIsICJxdWVyeUZuIiwgImJ1aWxkTmV3UGFnZXMiLCAicGFnZXMiLCAiZmV0Y2hQYWdlIiwgIm1hbnVhbCIsICJxdWVyeUZuUmVzdWx0IiwgInByb21pc2VBc0FueSIsICJnZXROZXh0UGFnZVBhcmFtIiwgIl9tYW51YWwiLCAiX3BhcmFtIiwgImdldFByZXZpb3VzUGFnZVBhcmFtIiwgInNob3VsZEZldGNoRmlyc3RQYWdlIiwgIl9sb29wIiwgInNob3VsZEZldGNoTmV4dFBhZ2UiLCAiX3BhcmFtMiIsICJmaW5hbFByb21pc2UiLCAiZmluYWxQcm9taXNlQXNBbnkiLCAiUXVlcnlDbGllbnQiLCAiX3RoaXMkdW5zdWJzY3JpYmVGb2N1IiwgIl90aGlzJHVuc3Vic2NyaWJlT25saSIsICJfdGhpcyRxdWVyeUNhY2hlJGZpbmQiLCAicXVlcnlLZXlPckZpbHRlcnMiLCAicGFyc2VkT3B0aW9ucyIsICJkZWZhdWx0ZWRPcHRpb25zIiwgIl90aGlzJHF1ZXJ5Q2FjaGUkZmluZDIiLCAicXVlcnlDYWNoZSIsICJfcGFyc2VGaWx0ZXJBcmdzMyIsICJyZWZldGNoRmlsdGVycyIsICJfcGFyc2VGaWx0ZXJBcmdzNCIsICJfcGFyc2VGaWx0ZXJBcmdzNCQiLCAiX3JlZjMiLCAiX2ZpbHRlcnMkcmVmZXRjaEFjdGl2IiwgIl9maWx0ZXJzJHJlZmV0Y2hJbmFjdCIsICJfcGFyc2VGaWx0ZXJBcmdzNSIsICJfdGhpczYiLCAiX3BhcnNlRmlsdGVyQXJnczYiLCAiX3RoaXM3IiwgIl90aGlzJHF1ZXJ5RGVmYXVsdHMkZiIsICJfdGhpcyRtdXRhdGlvbkRlZmF1bHQiLCAidW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMiLCAiUmVhY3RET00iLCAiZGVmYXVsdENvbnRleHQiLCAiUXVlcnlDbGllbnRTaGFyaW5nQ29udGV4dCIsICJnZXRRdWVyeUNsaWVudENvbnRleHQiLCAiY29udGV4dFNoYXJpbmciLCAiUXVlcnlDbGllbnRQcm92aWRlciIsICJfcmVmJGNvbnRleHRTaGFyaW5nIiwgIkNvbnRleHQiLCAiY3JlYXRlRW50aXR5VHJlZSIsICJFbnRpdHlUcmVlV2lkZ2V0IiwgInF1ZXJ5Q2xpZW50IiwgIkVudGl0eVRyZWVXaWRnZXRJbm5lciIsICJsb2FkaW5nT250b2xvZ3kiLCAibG9hZGluZ0VudGl0eSIsICJsb2FkaW5nQ2xhc3NJbnN0YW5jZXMiLCAiaGFuZGxlTmF2aWdhdGVUb0VudGl0eSIsICJoYW5kbGVOYXZpZ2F0ZVRvT250b2xvZ3kiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJSZWFjdCIsICJSZWFjdERPTSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3RfZG9tIiwgIlJlYWN0IiwgIngiLCAiUmVhY3RET00iLCAicmVuZGVyIiwgIlJlYWN0IiwgImltcG9ydF9yZWFjdF9kb20iLCAicmVuZGVyIiwgImRhdGEiLCAiUmVhY3QiLCAiUmVhY3RET00iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdCIsICJSZWFjdCIsICJpbXBvcnRfcmVhY3RfZG9tIiwgIlJlYWN0IiwgIlJlYWN0RE9NIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3RfZG9tIiwgInJlbmRlciIsICJkYXRhIiwgIlJlYWN0IiwgIlJlYWN0RE9NIiwgInZpc0NvbG9ycyIsICJzZWFyY2hWYWx1ZSIsICJSZWFjdCIsICJ4IiwgIm9wdGlvbnMiLCAiUmVhY3RET00iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdF9kb20iLCAiUmVhY3QiLCAiUmVhY3RET00iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdCIsICJSZWFjdCIsICJuIiwgIm1hdGNoIiwgImIiLCAibjIiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJlbnRpdHkiLCAiUmVhY3QiLCAia2V5cyIsICJwcm9wZXJ0eSIsICJkb21haW5zIiwgInJhbmdlcyIsICJpcmkiLCAidiIsICJSZWFjdERPTSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJSZWFjdCIsICJSZWFjdERPTSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJERUZBVUxUX0hBU19USVRMRSIsICJvbnRvbG9neSIsICJSZWFjdCIsICJSZWFjdERPTSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJSZWFjdCIsICJwYWdlSW5kZXgiLCAicGFnZVNpemUiLCAic29ydEZpZWxkIiwgInNvcnREaXJlY3Rpb24iLCAicGFnZU9mSXRlbXMiLCAiUmVhY3RET00iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdF9kb20iLCAiUmVhY3QiLCAiUmVhY3RET00iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdCIsICJSZWFjdCIsICJpbXBvcnRfcmVhY3RfZG9tIiwgIkRFRkFVTFRfUEFHRV9TSVpFX09QVElPTlMiLCAicmVuZGVyIiwgIm9wdGlvbiIsICJSZWFjdCIsICJSZWFjdERPTSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJERUZBVUxUX0hBU19USVRMRSIsICJSZWFjdCIsICJwcm9wZXJ0eSIsICJwcmVkaWNhdGVzIiwgIlJlYWN0RE9NIl0KfQo= diff --git a/dist_plainjs/semlookp_widgets.min.css b/dist_plainjs/terminology-service-suite.min.css similarity index 100% rename from dist_plainjs/semlookp_widgets.min.css rename to dist_plainjs/terminology-service-suite.min.css diff --git a/dist_plainjs/semlookp_widgets.min.js b/dist_plainjs/terminology-service-suite.min.js similarity index 54% rename from dist_plainjs/semlookp_widgets.min.js rename to dist_plainjs/terminology-service-suite.min.js index 9fd8443f..5b3f4d51 100644 --- a/dist_plainjs/semlookp_widgets.min.js +++ b/dist_plainjs/terminology-service-suite.min.js @@ -1,20 +1,20 @@ -"use strict";(()=>{var S8e=Object.create;var ez=Object.defineProperty;var j8e=Object.getOwnPropertyDescriptor;var I8e=Object.getOwnPropertyNames;var k8e=Object.getPrototypeOf,P8e=Object.prototype.hasOwnProperty;var qte=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,n)=>(typeof require<"u"?require:t)[n]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var ke=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),$=(e,t)=>{for(var n in t)ez(e,n,{get:t[n],enumerable:!0})},E8e=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of I8e(t))!P8e.call(e,o)&&o!==n&&ez(e,o,{get:()=>t[o],enumerable:!(r=j8e(t,o))||r.enumerable});return e};var P=(e,t,n)=>(n=e!=null?S8e(k8e(e)):{},E8e(t||!e||!e.__esModule?ez(n,"default",{value:e,enumerable:!0}):n,e));var tz=ke((wEt,$te)=>{"use strict";var Ute=Object.getOwnPropertySymbols,C8e=Object.prototype.hasOwnProperty,A8e=Object.prototype.propertyIsEnumerable;function M8e(e){if(e==null)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}function T8e(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de",Object.getOwnPropertyNames(e)[0]==="5")return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;var r=Object.getOwnPropertyNames(t).map(function(i){return t[i]});if(r.join("")!=="0123456789")return!1;var o={};return"abcdefghijklmnopqrst".split("").forEach(function(i){o[i]=i}),Object.keys(Object.assign({},o)).join("")==="abcdefghijklmnopqrst"}catch{return!1}}$te.exports=T8e()?Object.assign:function(e,t){for(var n,r=M8e(e),o,i=1;i{"use strict";var nz=tz(),cg=60103,Xte=60106;dn.Fragment=60107;dn.StrictMode=60108;dn.Profiler=60114;var Kte=60109,Yte=60110,Qte=60112;dn.Suspense=60113;var Zte=60115,ere=60116;typeof Symbol=="function"&&Symbol.for&&(es=Symbol.for,cg=es("react.element"),Xte=es("react.portal"),dn.Fragment=es("react.fragment"),dn.StrictMode=es("react.strict_mode"),dn.Profiler=es("react.profiler"),Kte=es("react.provider"),Yte=es("react.context"),Qte=es("react.forward_ref"),dn.Suspense=es("react.suspense"),Zte=es("react.memo"),ere=es("react.lazy"));var es,Jte=typeof Symbol=="function"&&Symbol.iterator;function R8e(e){return e===null||typeof e!="object"?null:(e=Jte&&e[Jte]||e["@@iterator"],typeof e=="function"?e:null)}function hb(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n{"use strict";ure.exports=sre()});var hre=ke(kn=>{"use strict";var dg,yb,Uj,mz;typeof performance=="object"&&typeof performance.now=="function"?(cre=performance,kn.unstable_now=function(){return cre.now()}):(sz=Date,pre=sz.now(),kn.unstable_now=function(){return sz.now()-pre});var cre,sz,pre;typeof window>"u"||typeof MessageChannel!="function"?(fg=null,uz=null,cz=function(){if(fg!==null)try{var e=kn.unstable_now();fg(!0,e),fg=null}catch(t){throw setTimeout(cz,0),t}},dg=function(e){fg!==null?setTimeout(dg,0,e):(fg=e,setTimeout(cz,0))},yb=function(e,t){uz=setTimeout(e,t)},Uj=function(){clearTimeout(uz)},kn.unstable_shouldYield=function(){return!1},mz=kn.unstable_forceFrameRate=function(){}):(fre=window.setTimeout,dre=window.clearTimeout,typeof console<"u"&&(mre=window.cancelAnimationFrame,typeof window.requestAnimationFrame!="function"&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills"),typeof mre!="function"&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills")),gb=!1,vb=null,Hj=-1,pz=5,fz=0,kn.unstable_shouldYield=function(){return kn.unstable_now()>=fz},mz=function(){},kn.unstable_forceFrameRate=function(e){0>e||125>>1,o=e[r];if(o!==void 0&&0qj(u,n))h!==void 0&&0>qj(h,u)?(e[r]=h,e[f]=n,r=f):(e[r]=u,e[i]=n,r=i);else if(h!==void 0&&0>qj(h,n))e[r]=h,e[f]=n,r=f;else break e}}return t}return null}function qj(e,t){var n=e.sortIndex-t.sortIndex;return n!==0?n:e.id-t.id}var Gu=[],Uf=[],F8e=1,ts=null,la=3,Jj=!1,h1=!1,bb=!1;function gz(e){for(var t=qs(Uf);t!==null;){if(t.callback===null)$j(Uf);else if(t.startTime<=e)$j(Uf),t.sortIndex=t.expirationTime,hz(Gu,t);else break;t=qs(Uf)}}function vz(e){if(bb=!1,gz(e),!h1)if(qs(Gu)!==null)h1=!0,dg(yz);else{var t=qs(Uf);t!==null&&yb(vz,t.startTime-e)}}function yz(e,t){h1=!1,bb&&(bb=!1,Uj()),Jj=!0;var n=la;try{for(gz(t),ts=qs(Gu);ts!==null&&(!(ts.expirationTime>t)||e&&!kn.unstable_shouldYield());){var r=ts.callback;if(typeof r=="function"){ts.callback=null,la=ts.priorityLevel;var o=r(ts.expirationTime<=t);t=kn.unstable_now(),typeof o=="function"?ts.callback=o:ts===qs(Gu)&&$j(Gu),gz(t)}else $j(Gu);ts=qs(Gu)}if(ts!==null)var i=!0;else{var u=qs(Uf);u!==null&&yb(vz,u.startTime-t),i=!1}return i}finally{ts=null,la=n,Jj=!1}}var W8e=mz;kn.unstable_IdlePriority=5;kn.unstable_ImmediatePriority=1;kn.unstable_LowPriority=4;kn.unstable_NormalPriority=3;kn.unstable_Profiling=null;kn.unstable_UserBlockingPriority=2;kn.unstable_cancelCallback=function(e){e.callback=null};kn.unstable_continueExecution=function(){h1||Jj||(h1=!0,dg(yz))};kn.unstable_getCurrentPriorityLevel=function(){return la};kn.unstable_getFirstCallbackNode=function(){return qs(Gu)};kn.unstable_next=function(e){switch(la){case 1:case 2:case 3:var t=3;break;default:t=la}var n=la;la=t;try{return e()}finally{la=n}};kn.unstable_pauseExecution=function(){};kn.unstable_requestPaint=W8e;kn.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=la;la=e;try{return t()}finally{la=n}};kn.unstable_scheduleCallback=function(e,t,n){var r=kn.unstable_now();switch(typeof n=="object"&&n!==null?(n=n.delay,n=typeof n=="number"&&0r?(e.sortIndex=n,hz(Uf,e),qs(Gu)===null&&e===qs(Uf)&&(bb?Uj():bb=!0,yb(vz,n-r))):(e.sortIndex=o,hz(Gu,e),h1||Jj||(h1=!0,dg(yz))),e};kn.unstable_wrapCallback=function(e){var t=la;return function(){var n=la;la=t;try{return e.apply(this,arguments)}finally{la=n}}}});var vre=ke((SEt,gre)=>{"use strict";gre.exports=hre()});var nie=ke(ls=>{"use strict";var WI=L(),bo=tz(),ji=vre();function mt(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),B8e=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,yre=Object.prototype.hasOwnProperty,bre={},wre={};function H8e(e){return yre.call(wre,e)?!0:yre.call(bre,e)?!1:B8e.test(e)?wre[e]=!0:(bre[e]=!0,!1)}function V8e(e,t,n,r){if(n!==null&&n.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return r?!1:n!==null?!n.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function q8e(e,t,n,r){if(t===null||typeof t>"u"||V8e(e,t,n,r))return!0;if(r)return!1;if(n!==null)switch(n.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function Ea(e,t,n,r,o,i,u){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=r,this.attributeNamespace=o,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=i,this.removeEmptyString=u}var Fi={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){Fi[e]=new Ea(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];Fi[t]=new Ea(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){Fi[e]=new Ea(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){Fi[e]=new Ea(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){Fi[e]=new Ea(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){Fi[e]=new Ea(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){Fi[e]=new Ea(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){Fi[e]=new Ea(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){Fi[e]=new Ea(e,5,!1,e.toLowerCase(),null,!1,!1)});var kL=/[\-:]([a-z])/g;function PL(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(kL,PL);Fi[t]=new Ea(t,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(kL,PL);Fi[t]=new Ea(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(kL,PL);Fi[t]=new Ea(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){Fi[e]=new Ea(e,1,!1,e.toLowerCase(),null,!1,!1)});Fi.xlinkHref=new Ea("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){Fi[e]=new Ea(e,1,!1,e.toLowerCase(),null,!0,!0)});function EL(e,t,n,r){var o=Fi.hasOwnProperty(t)?Fi[t]:null,i=o!==null?o.type===0:r?!1:!(!(2{var P8e=Object.create;var iz=Object.defineProperty;var k8e=Object.getOwnPropertyDescriptor;var E8e=Object.getOwnPropertyNames;var C8e=Object.getPrototypeOf,A8e=Object.prototype.hasOwnProperty;var Xte=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,n)=>(typeof require<"u"?require:t)[n]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var Ie=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),$=(e,t)=>{for(var n in t)iz(e,n,{get:t[n],enumerable:!0})},M8e=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of E8e(t))!A8e.call(e,o)&&o!==n&&iz(e,o,{get:()=>t[o],enumerable:!(r=k8e(t,o))||r.enumerable});return e};var k=(e,t,n)=>(n=e!=null?P8e(C8e(e)):{},M8e(t||!e||!e.__esModule?iz(n,"default",{value:e,enumerable:!0}):n,e));var az=Ie((_Et,Yte)=>{"use strict";var Kte=Object.getOwnPropertySymbols,T8e=Object.prototype.hasOwnProperty,R8e=Object.prototype.propertyIsEnumerable;function z8e(e){if(e==null)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}function L8e(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de",Object.getOwnPropertyNames(e)[0]==="5")return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;var r=Object.getOwnPropertyNames(t).map(function(i){return t[i]});if(r.join("")!=="0123456789")return!1;var o={};return"abcdefghijklmnopqrst".split("").forEach(function(i){o[i]=i}),Object.keys(Object.assign({},o)).join("")==="abcdefghijklmnopqrst"}catch{return!1}}Yte.exports=L8e()?Object.assign:function(e,t){for(var n,r=z8e(e),o,i=1;i{"use strict";var sz=az(),cg=60103,ere=60106;mn.Fragment=60107;mn.StrictMode=60108;mn.Profiler=60114;var tre=60109,rre=60110,nre=60112;mn.Suspense=60113;var ore=60115,ire=60116;typeof Symbol=="function"&&Symbol.for&&(ts=Symbol.for,cg=ts("react.element"),ere=ts("react.portal"),mn.Fragment=ts("react.fragment"),mn.StrictMode=ts("react.strict_mode"),mn.Profiler=ts("react.profiler"),tre=ts("react.provider"),rre=ts("react.context"),nre=ts("react.forward_ref"),mn.Suspense=ts("react.suspense"),ore=ts("react.memo"),ire=ts("react.lazy"));var ts,Qte=typeof Symbol=="function"&&Symbol.iterator;function D8e(e){return e===null||typeof e!="object"?null:(e=Qte&&e[Qte]||e["@@iterator"],typeof e=="function"?e:null)}function vb(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n{"use strict";mre.exports=dre()});var wre=Ie(En=>{"use strict";var dg,wb,Gj,bz;typeof performance=="object"&&typeof performance.now=="function"?(hre=performance,En.unstable_now=function(){return hre.now()}):(dz=Date,gre=dz.now(),En.unstable_now=function(){return dz.now()-gre});var hre,dz,gre;typeof window>"u"||typeof MessageChannel!="function"?(fg=null,mz=null,hz=function(){if(fg!==null)try{var e=En.unstable_now();fg(!0,e),fg=null}catch(t){throw setTimeout(hz,0),t}},dg=function(e){fg!==null?setTimeout(dg,0,e):(fg=e,setTimeout(hz,0))},wb=function(e,t){mz=setTimeout(e,t)},Gj=function(){clearTimeout(mz)},En.unstable_shouldYield=function(){return!1},bz=En.unstable_forceFrameRate=function(){}):(vre=window.setTimeout,yre=window.clearTimeout,typeof console<"u"&&(bre=window.cancelAnimationFrame,typeof window.requestAnimationFrame!="function"&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills"),typeof bre!="function"&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills")),yb=!1,bb=null,Uj=-1,gz=5,vz=0,En.unstable_shouldYield=function(){return En.unstable_now()>=vz},bz=function(){},En.unstable_forceFrameRate=function(e){0>e||125>>1,o=e[r];if(o!==void 0&&0Jj(u,n))h!==void 0&&0>Jj(h,u)?(e[r]=h,e[f]=n,r=f):(e[r]=u,e[i]=n,r=i);else if(h!==void 0&&0>Jj(h,n))e[r]=h,e[f]=n,r=f;else break e}}return t}return null}function Jj(e,t){var n=e.sortIndex-t.sortIndex;return n!==0?n:e.id-t.id}var Ku=[],Jf=[],H8e=1,rs=null,aa=3,Kj=!1,g1=!1,Ob=!1;function Oz(e){for(var t=Js(Jf);t!==null;){if(t.callback===null)Xj(Jf);else if(t.startTime<=e)Xj(Jf),t.sortIndex=t.expirationTime,wz(Ku,t);else break;t=Js(Jf)}}function xz(e){if(Ob=!1,Oz(e),!g1)if(Js(Ku)!==null)g1=!0,dg(_z);else{var t=Js(Jf);t!==null&&wb(xz,t.startTime-e)}}function _z(e,t){g1=!1,Ob&&(Ob=!1,Gj()),Kj=!0;var n=aa;try{for(Oz(t),rs=Js(Ku);rs!==null&&(!(rs.expirationTime>t)||e&&!En.unstable_shouldYield());){var r=rs.callback;if(typeof r=="function"){rs.callback=null,aa=rs.priorityLevel;var o=r(rs.expirationTime<=t);t=En.unstable_now(),typeof o=="function"?rs.callback=o:rs===Js(Ku)&&Xj(Ku),Oz(t)}else Xj(Ku);rs=Js(Ku)}if(rs!==null)var i=!0;else{var u=Js(Jf);u!==null&&wb(xz,u.startTime-t),i=!1}return i}finally{rs=null,aa=n,Kj=!1}}var V8e=bz;En.unstable_IdlePriority=5;En.unstable_ImmediatePriority=1;En.unstable_LowPriority=4;En.unstable_NormalPriority=3;En.unstable_Profiling=null;En.unstable_UserBlockingPriority=2;En.unstable_cancelCallback=function(e){e.callback=null};En.unstable_continueExecution=function(){g1||Kj||(g1=!0,dg(_z))};En.unstable_getCurrentPriorityLevel=function(){return aa};En.unstable_getFirstCallbackNode=function(){return Js(Ku)};En.unstable_next=function(e){switch(aa){case 1:case 2:case 3:var t=3;break;default:t=aa}var n=aa;aa=t;try{return e()}finally{aa=n}};En.unstable_pauseExecution=function(){};En.unstable_requestPaint=V8e;En.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=aa;aa=e;try{return t()}finally{aa=n}};En.unstable_scheduleCallback=function(e,t,n){var r=En.unstable_now();switch(typeof n=="object"&&n!==null?(n=n.delay,n=typeof n=="number"&&0r?(e.sortIndex=n,wz(Jf,e),Js(Ku)===null&&e===Js(Jf)&&(Ob?Gj():Ob=!0,wb(xz,n-r))):(e.sortIndex=o,wz(Ku,e),g1||Kj||(g1=!0,dg(_z))),e};En.unstable_wrapCallback=function(e){var t=aa;return function(){var n=aa;aa=t;try{return e.apply(this,arguments)}finally{aa=n}}}});var xre=Ie((PEt,Ore)=>{"use strict";Ore.exports=wre()});var sie=Ie(ss=>{"use strict";var VI=L(),wo=az(),Si=xre();function gt(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),q8e=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,_re=Object.prototype.hasOwnProperty,Sre={},jre={};function U8e(e){return _re.call(jre,e)?!0:_re.call(Sre,e)?!1:q8e.test(e)?jre[e]=!0:(Sre[e]=!0,!1)}function $8e(e,t,n,r){if(n!==null&&n.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return r?!1:n!==null?!n.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function J8e(e,t,n,r){if(t===null||typeof t>"u"||$8e(e,t,n,r))return!0;if(r)return!1;if(n!==null)switch(n.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function ka(e,t,n,r,o,i,u){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=r,this.attributeNamespace=o,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=i,this.removeEmptyString=u}var Ni={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){Ni[e]=new ka(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];Ni[t]=new ka(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){Ni[e]=new ka(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){Ni[e]=new ka(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){Ni[e]=new ka(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){Ni[e]=new ka(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){Ni[e]=new ka(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){Ni[e]=new ka(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){Ni[e]=new ka(e,5,!1,e.toLowerCase(),null,!1,!1)});var ML=/[\-:]([a-z])/g;function TL(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(ML,TL);Ni[t]=new ka(t,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(ML,TL);Ni[t]=new ka(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(ML,TL);Ni[t]=new ka(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){Ni[e]=new ka(e,1,!1,e.toLowerCase(),null,!1,!1)});Ni.xlinkHref=new ka("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){Ni[e]=new ka(e,1,!1,e.toLowerCase(),null,!0,!0)});function RL(e,t,n,r){var o=Ni.hasOwnProperty(t)?Ni[t]:null,i=o!==null?o.type===0:r?!1:!(!(2f||o[u]!==i[f])return` -`+o[u].replace(" at new "," at ");while(1<=u&&0<=f);break}}}finally{wz=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?Tb(e):""}function U8e(e){switch(e.tag){case 5:return Tb(e.type);case 16:return Tb("Lazy");case 13:return Tb("Suspense");case 19:return Tb("SuspenseList");case 0:case 2:case 15:return e=Gj(e.type,!1),e;case 11:return e=Gj(e.type.render,!1),e;case 22:return e=Gj(e.type._render,!1),e;case 1:return e=Gj(e.type,!0),e;default:return""}}function Sg(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case Jf:return"Fragment";case v1:return"Portal";case Db:return"Profiler";case CL:return"StrictMode";case Nb:return"Suspense";case vI:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case ML:return(e.displayName||"Context")+".Consumer";case AL:return(e._context.displayName||"Context")+".Provider";case BI:var t=e.render;return t=t.displayName||t.name||"",e.displayName||(t!==""?"ForwardRef("+t+")":"ForwardRef");case HI:return Sg(e.type);case RL:return Sg(e._render);case TL:t=e._payload,e=e._init;try{return Sg(e(t))}catch{}}return null}function id(e){switch(typeof e){case"boolean":case"number":case"object":case"string":case"undefined":return e;default:return""}}function Mne(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function $8e(e){var t=Mne(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var o=n.get,i=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return o.call(this)},set:function(u){r=""+u,i.call(this,u)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(u){r=""+u},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function Xj(e){e._valueTracker||(e._valueTracker=$8e(e))}function Tne(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=Mne(e)?e.checked?"true":"false":e.value),e=r,e!==n?(t.setValue(e),!0):!1}function yI(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function Hz(e,t){var n=t.checked;return bo({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??e._wrapperState.initialChecked})}function xre(e,t){var n=t.defaultValue==null?"":t.defaultValue,r=t.checked!=null?t.checked:t.defaultChecked;n=id(t.value!=null?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function Rne(e,t){t=t.checked,t!=null&&EL(e,"checked",t,!1)}function Vz(e,t){Rne(e,t);var n=id(t.value),r=t.type;if(n!=null)r==="number"?(n===0&&e.value===""||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if(r==="submit"||r==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?qz(e,t.type,n):t.hasOwnProperty("defaultValue")&&qz(e,t.type,id(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function _re(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!(r!=="submit"&&r!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}n=e.name,n!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,n!==""&&(e.name=n)}function qz(e,t,n){(t!=="number"||yI(e.ownerDocument)!==e)&&(n==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}function J8e(e){var t="";return WI.Children.forEach(e,function(n){n!=null&&(t+=n)}),t}function Uz(e,t){return e=bo({children:void 0},t),(t=J8e(t.children))&&(e.children=t),e}function jg(e,t,n,r){if(e=e.options,t){t={};for(var o=0;o=n.length))throw Error(mt(93));n=n[0]}t=n}t==null&&(t=""),n=t}e._wrapperState={initialValue:id(n)}}function zne(e,t){var n=id(t.value),r=id(t.defaultValue);n!=null&&(n=""+n,n!==e.value&&(e.value=n),t.defaultValue==null&&e.defaultValue!==n&&(e.defaultValue=n)),r!=null&&(e.defaultValue=""+r)}function jre(e){var t=e.textContent;t===e._wrapperState.initialValue&&t!==""&&t!==null&&(e.value=t)}var Jz={html:"http://www.w3.org/1999/xhtml",mathml:"http://www.w3.org/1998/Math/MathML",svg:"http://www.w3.org/2000/svg"};function Lne(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function Gz(e,t){return e==null||e==="http://www.w3.org/1999/xhtml"?Lne(t):e==="http://www.w3.org/2000/svg"&&t==="foreignObject"?"http://www.w3.org/1999/xhtml":e}var Kj,Dne=function(e){return typeof MSApp<"u"&&MSApp.execUnsafeLocalFunction?function(t,n,r,o){MSApp.execUnsafeLocalFunction(function(){return e(t,n,r,o)})}:e}(function(e,t){if(e.namespaceURI!==Jz.svg||"innerHTML"in e)e.innerHTML=t;else{for(Kj=Kj||document.createElement("div"),Kj.innerHTML=""+t.valueOf().toString()+"",t=Kj.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function Kb(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&n.nodeType===3){n.nodeValue=t;return}}e.textContent=t}var Fb={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},G8e=["Webkit","ms","Moz","O"];Object.keys(Fb).forEach(function(e){G8e.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),Fb[t]=Fb[e]})});function Nne(e,t,n){return t==null||typeof t=="boolean"||t===""?"":n||typeof t!="number"||t===0||Fb.hasOwnProperty(e)&&Fb[e]?(""+t).trim():t+"px"}function Fne(e,t){e=e.style;for(var n in t)if(t.hasOwnProperty(n)){var r=n.indexOf("--")===0,o=Nne(n,t[n],r);n==="float"&&(n="cssFloat"),r?e.setProperty(n,o):e[n]=o}}var X8e=bo({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function Xz(e,t){if(t){if(X8e[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(mt(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(mt(60));if(!(typeof t.dangerouslySetInnerHTML=="object"&&"__html"in t.dangerouslySetInnerHTML))throw Error(mt(61))}if(t.style!=null&&typeof t.style!="object")throw Error(mt(62))}}function Kz(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}function DL(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var Yz=null,Ig=null,kg=null;function Ire(e){if(e=c3(e)){if(typeof Yz!="function")throw Error(mt(280));var t=e.stateNode;t&&(t=GI(t),Yz(e.stateNode,e.type,t))}}function Wne(e){Ig?kg?kg.push(e):kg=[e]:Ig=e}function Bne(){if(Ig){var e=Ig,t=kg;if(kg=Ig=null,Ire(e),t)for(e=0;er?0:1<n;n++)t.push(e);return t}function qI(e,t,n){e.pendingLanes|=t;var r=t-1;e.suspendedLanes&=r,e.pingedLanes&=r,e=e.eventTimes,t=31-ad(t),e[t]=n}var ad=Math.clz32?Math.clz32:pxe,uxe=Math.log,cxe=Math.LN2;function pxe(e){return e===0?32:31-(uxe(e)/cxe|0)|0}var fxe=ji.unstable_UserBlockingPriority,dxe=ji.unstable_runWithPriority,sI=!0;function mxe(e,t,n,r){y1||FL();var o=qL,i=y1;y1=!0;try{Hne(o,e,t,n,r)}finally{(y1=i)||WL()}}function hxe(e,t,n,r){dxe(fxe,qL.bind(null,e,t,n,r))}function qL(e,t,n,r){if(sI){var o;if((o=(t&4)===0)&&0=Bb),Lre=String.fromCharCode(32),Dre=!1;function ioe(e,t){switch(e){case"keyup":return Nxe.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function aoe(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var bg=!1;function Wxe(e,t){switch(e){case"compositionend":return aoe(t);case"keypress":return t.which!==32?null:(Dre=!0,Lre);case"textInput":return e=t.data,e===Lre&&Dre?null:e;default:return null}}function Bxe(e,t){if(bg)return e==="compositionend"||!XL&&ioe(e,t)?(e=noe(),uI=$L=Gf=null,bg=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=r}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=Wre(n)}}function coe(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?coe(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function Hre(){for(var e=window,t=yI();t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch{n=!1}if(n)e=t.contentWindow;else break;t=yI(e.document)}return t}function rL(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}var Yxe=mp&&"documentMode"in document&&11>=document.documentMode,wg=null,nL=null,Vb=null,oL=!1;function Vre(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;oL||wg==null||wg!==yI(r)||(r=wg,"selectionStart"in r&&rL(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),Vb&&r3(Vb,r)||(Vb=r,r=xI(nL,"onSelect"),0xg||(e.current=aL[xg],aL[xg]=null,xg--)}function Mo(e,t){xg++,aL[xg]=e.current,e.current=t}var ld={},pa=cd(ld),il=cd(!1),_1=ld;function zg(e,t){var n=e.type.contextTypes;if(!n)return ld;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var o={},i;for(i in n)o[i]=t[i];return r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=o),o}function al(e){return e=e.childContextTypes,e!=null}function jI(){lo(il),lo(pa)}function Yre(e,t,n){if(pa.current!==ld)throw Error(mt(168));Mo(pa,t),Mo(il,n)}function yoe(e,t,n){var r=e.stateNode;if(e=t.childContextTypes,typeof r.getChildContext!="function")return n;r=r.getChildContext();for(var o in r)if(!(o in e))throw Error(mt(108,Sg(t)||"Unknown",o));return bo({},n,r)}function pI(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||ld,_1=pa.current,Mo(pa,e),Mo(il,il.current),!0}function Qre(e,t,n){var r=e.stateNode;if(!r)throw Error(mt(169));n?(e=yoe(e,t,_1),r.__reactInternalMemoizedMergedChildContext=e,lo(il),lo(pa),Mo(pa,e)):lo(il),Mo(il,n)}var YL=null,x1=null,e9e=ji.unstable_runWithPriority,QL=ji.unstable_scheduleCallback,lL=ji.unstable_cancelCallback,t9e=ji.unstable_shouldYield,Zre=ji.unstable_requestPaint,sL=ji.unstable_now,r9e=ji.unstable_getCurrentPriorityLevel,XI=ji.unstable_ImmediatePriority,boe=ji.unstable_UserBlockingPriority,woe=ji.unstable_NormalPriority,Ooe=ji.unstable_LowPriority,xoe=ji.unstable_IdlePriority,Mz={},n9e=Zre!==void 0?Zre:function(){},up=null,fI=null,Tz=!1,ene=sL(),ua=1e4>ene?sL:function(){return sL()-ene};function Lg(){switch(r9e()){case XI:return 99;case boe:return 98;case woe:return 97;case Ooe:return 96;case xoe:return 95;default:throw Error(mt(332))}}function _oe(e){switch(e){case 99:return XI;case 98:return boe;case 97:return woe;case 96:return Ooe;case 95:return xoe;default:throw Error(mt(332))}}function S1(e,t){return e=_oe(e),e9e(e,t)}function o3(e,t,n){return e=_oe(e),QL(e,t,n)}function ec(){if(fI!==null){var e=fI;fI=null,lL(e)}Soe()}function Soe(){if(!Tz&&up!==null){Tz=!0;var e=0;try{var t=up;S1(99,function(){for(;eK?(de=Z,Z=null):de=Z.sibling;var se=I(W,Z,B[K],Y);if(se===null){Z===null&&(Z=de);break}e&&Z&&se.alternate===null&&t(W,Z),R=i(se,R,K),ae===null?X=se:ae.sibling=se,ae=se,Z=de}if(K===B.length)return n(W,Z),X;if(Z===null){for(;KK?(de=Z,Z=null):de=Z.sibling;var Se=I(W,Z,se.value,Y);if(Se===null){Z===null&&(Z=de);break}e&&Z&&Se.alternate===null&&t(W,Z),R=i(Se,R,K),ae===null?X=Se:ae.sibling=Se,ae=Se,Z=de}if(se.done)return n(W,Z),X;if(Z===null){for(;!se.done;K++,se=B.next())se=S(W,se.value,Y),se!==null&&(R=i(se,R,K),ae===null?X=se:ae.sibling=se,ae=se);return X}for(Z=r(W,Z);!se.done;K++,se=B.next())se=A(Z,W,K,se.value,Y),se!==null&&(e&&se.alternate!==null&&Z.delete(se.key===null?K:se.key),R=i(se,R,K),ae===null?X=se:ae.sibling=se,ae=se);return e&&Z.forEach(function(Oe){return t(W,Oe)}),X}return function(W,R,B,Y){var X=typeof B=="object"&&B!==null&&B.type===Jf&&B.key===null;X&&(B=B.props.children);var ae=typeof B=="object"&&B!==null;if(ae)switch(B.$$typeof){case Mb:e:{for(ae=B.key,X=R;X!==null;){if(X.key===ae){switch(X.tag){case 7:if(B.type===Jf){n(W,X.sibling),R=o(X,B.props.children),R.return=W,W=R;break e}break;default:if(X.elementType===B.type){n(W,X.sibling),R=o(X,B.props),R.ref=jb(W,X,B),R.return=W,W=R;break e}}n(W,X);break}else t(W,X);X=X.sibling}B.type===Jf?(R=Tg(B.props.children,W.mode,Y,B.key),R.return=W,W=R):(Y=gI(B.type,B.key,B.props,null,W.mode,Y),Y.ref=jb(W,R,B),Y.return=W,W=Y)}return u(W);case v1:e:{for(X=B.key;R!==null;){if(R.key===X)if(R.tag===4&&R.stateNode.containerInfo===B.containerInfo&&R.stateNode.implementation===B.implementation){n(W,R.sibling),R=o(R,B.children||[]),R.return=W,W=R;break e}else{n(W,R);break}else t(W,R);R=R.sibling}R=Fz(B,W.mode,Y),R.return=W,W=R}return u(W)}if(typeof B=="string"||typeof B=="number")return B=""+B,R!==null&&R.tag===6?(n(W,R.sibling),R=o(R,B),R.return=W,W=R):(n(W,R),R=Nz(B,W.mode,Y),R.return=W,W=R),u(W);if(rI(B))return C(W,R,B,Y);if(wb(B))return M(W,R,B,Y);if(ae&&nI(W,B),typeof B>"u"&&!X)switch(W.tag){case 1:case 22:case 0:case 11:case 15:throw Error(mt(152,Sg(W.type)||"Component"))}return n(W,R)}}var CI=Eoe(!0),Coe=Eoe(!1),p3={},Qu=cd(p3),a3=cd(p3),l3=cd(p3);function w1(e){if(e===p3)throw Error(mt(174));return e}function cL(e,t){switch(Mo(l3,t),Mo(a3,e),Mo(Qu,p3),e=t.nodeType,e){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:Gz(null,"");break;default:e=e===8?t.parentNode:t,t=e.namespaceURI||null,e=e.tagName,t=Gz(t,e)}lo(Qu),Mo(Qu,t)}function Dg(){lo(Qu),lo(a3),lo(l3)}function ine(e){w1(l3.current);var t=w1(Qu.current),n=Gz(t,e.type);t!==n&&(Mo(a3,e),Mo(Qu,n))}function rD(e){a3.current===e&&(lo(Qu),lo(a3))}var Ao=cd(0);function AI(e){for(var t=e;t!==null;){if(t.tag===13){var n=t.memoizedState;if(n!==null&&(n=n.dehydrated,n===null||n.data==="$?"||n.data==="$!"))return t}else if(t.tag===19&&t.memoizedProps.revealOrder!==void 0){if(t.flags&64)return t}else if(t.child!==null){t.child.return=t,t=t.child;continue}if(t===e)break;for(;t.sibling===null;){if(t.return===null||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var pp=null,Kf=null,Zu=!1;function Aoe(e,t){var n=ns(5,null,null,0);n.elementType="DELETED",n.type="DELETED",n.stateNode=t,n.return=e,n.flags=8,e.lastEffect!==null?(e.lastEffect.nextEffect=n,e.lastEffect=n):e.firstEffect=e.lastEffect=n}function ane(e,t){switch(e.tag){case 5:var n=e.type;return t=t.nodeType!==1||n.toLowerCase()!==t.nodeName.toLowerCase()?null:t,t!==null?(e.stateNode=t,!0):!1;case 6:return t=e.pendingProps===""||t.nodeType!==3?null:t,t!==null?(e.stateNode=t,!0):!1;case 13:return!1;default:return!1}}function pL(e){if(Zu){var t=Kf;if(t){var n=t;if(!ane(e,t)){if(t=Pg(n.nextSibling),!t||!ane(e,t)){e.flags=e.flags&-1025|2,Zu=!1,pp=e;return}Aoe(pp,n)}pp=e,Kf=Pg(t.firstChild)}else e.flags=e.flags&-1025|2,Zu=!1,pp=e}}function lne(e){for(e=e.return;e!==null&&e.tag!==5&&e.tag!==3&&e.tag!==13;)e=e.return;pp=e}function oI(e){if(e!==pp)return!1;if(!Zu)return lne(e),Zu=!0,!1;var t=e.type;if(e.tag!==5||t!=="head"&&t!=="body"&&!iL(t,e.memoizedProps))for(t=Kf;t;)Aoe(e,t),t=Pg(t.nextSibling);if(lne(e),e.tag===13){if(e=e.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(mt(317));e:{for(e=e.nextSibling,t=0;e;){if(e.nodeType===8){var n=e.data;if(n==="/$"){if(t===0){Kf=Pg(e.nextSibling);break e}t--}else n!=="$"&&n!=="$!"&&n!=="$?"||t++}e=e.nextSibling}Kf=null}}else Kf=pp?Pg(e.stateNode.nextSibling):null;return!0}function Rz(){Kf=pp=null,Zu=!1}var Cg=[];function nD(){for(var e=0;ei))throw Error(mt(301));i+=1,Di=sa=null,t.updateQueue=null,qb.current=s9e,e=n(r,o)}while(Ub)}if(qb.current=LI,t=sa!==null&&sa.next!==null,s3=0,Di=sa=Ho=null,MI=!1,t)throw Error(mt(300));return e}function O1(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return Di===null?Ho.memoizedState=Di=e:Di=Di.next=e,Di}function E1(){if(sa===null){var e=Ho.alternate;e=e!==null?e.memoizedState:null}else e=sa.next;var t=Di===null?Ho.memoizedState:Di.next;if(t!==null)Di=t,sa=e;else{if(e===null)throw Error(mt(310));sa=e,e={memoizedState:sa.memoizedState,baseState:sa.baseState,baseQueue:sa.baseQueue,queue:sa.queue,next:null},Di===null?Ho.memoizedState=Di=e:Di=Di.next=e}return Di}function Ku(e,t){return typeof t=="function"?t(e):t}function Ib(e){var t=E1(),n=t.queue;if(n===null)throw Error(mt(311));n.lastRenderedReducer=e;var r=sa,o=r.baseQueue,i=n.pending;if(i!==null){if(o!==null){var u=o.next;o.next=i.next,i.next=u}r.baseQueue=o=i,n.pending=null}if(o!==null){o=o.next,r=r.baseState;var f=u=i=null,h=o;do{var y=h.lane;if((s3&y)===y)f!==null&&(f=f.next={lane:0,action:h.action,eagerReducer:h.eagerReducer,eagerState:h.eagerState,next:null}),r=h.eagerReducer===e?h.eagerState:e(r,h.action);else{var O={lane:y,action:h.action,eagerReducer:h.eagerReducer,eagerState:h.eagerState,next:null};f===null?(u=f=O,i=r):f=f.next=O,Ho.lanes|=y,f3|=y}h=h.next}while(h!==null&&h!==o);f===null?i=r:f.next=u,rs(r,t.memoizedState)||($s=!0),t.memoizedState=r,t.baseState=i,t.baseQueue=f,n.lastRenderedState=r}return[t.memoizedState,n.dispatch]}function kb(e){var t=E1(),n=t.queue;if(n===null)throw Error(mt(311));n.lastRenderedReducer=e;var r=n.dispatch,o=n.pending,i=t.memoizedState;if(o!==null){n.pending=null;var u=o=o.next;do i=e(i,u.action),u=u.next;while(u!==o);rs(i,t.memoizedState)||($s=!0),t.memoizedState=i,t.baseQueue===null&&(t.baseState=i),n.lastRenderedState=i}return[i,r]}function sne(e,t,n){var r=t._getVersion;r=r(t._source);var o=t._workInProgressVersionPrimary;if(o!==null?e=o===r:(e=e.mutableReadLanes,(e=(s3&e)===e)&&(t._workInProgressVersionPrimary=r,Cg.push(t))),e)return n(t._source);throw Cg.push(t),Error(mt(350))}function Moe(e,t,n,r){var o=Pa;if(o===null)throw Error(mt(349));var i=t._getVersion,u=i(t._source),f=qb.current,h=f.useState(function(){return sne(o,t,n)}),y=h[1],O=h[0];h=Di;var S=e.memoizedState,I=S.refs,A=I.getSnapshot,C=S.source;S=S.subscribe;var M=Ho;return e.memoizedState={refs:I,source:t,subscribe:r},f.useEffect(function(){I.getSnapshot=n,I.setSnapshot=y;var W=i(t._source);if(!rs(u,W)){W=n(t._source),rs(O,W)||(y(W),W=rd(M),o.mutableReadLanes|=W&o.pendingLanes),W=o.mutableReadLanes,o.entangledLanes|=W;for(var R=o.entanglements,B=W;0n?98:n,function(){e(!0)}),S1(97<\/script>",e=e.removeChild(e.firstChild)):typeof r.is=="string"?e=u.createElement(n,{is:r.is}):(e=u.createElement(n),n==="select"&&(u=e,r.multiple?u.multiple=!0:r.size&&(u.size=r.size))):e=u.createElementNS(e,n),e[Xf]=t,e[SI]=r,Boe(e,t,!1,!1),t.stateNode=e,u=Kz(n,r),n){case"dialog":ao("cancel",e),ao("close",e),o=r;break;case"iframe":case"object":case"embed":ao("load",e),o=r;break;case"video":case"audio":for(o=0;oOL&&(t.flags|=64,i=!0,Eb(r,!1),t.lanes=33554432)}else{if(!i)if(e=AI(u),e!==null){if(t.flags|=64,i=!0,n=e.updateQueue,n!==null&&(t.updateQueue=n,t.flags|=4),Eb(r,!0),r.tail===null&&r.tailMode==="hidden"&&!u.alternate&&!Zu)return t=t.lastEffect=r.lastEffect,t!==null&&(t.nextEffect=null),null}else 2*ua()-r.renderingStartTime>OL&&n!==1073741824&&(t.flags|=64,i=!0,Eb(r,!1),t.lanes=33554432);r.isBackwards?(u.sibling=t.child,t.child=u):(n=r.last,n!==null?n.sibling=u:t.child=u,r.last=u)}return r.tail!==null?(n=r.tail,r.rendering=n,r.tail=n.sibling,r.lastEffect=t.lastEffect,r.renderingStartTime=ua(),n.sibling=null,t=Ao.current,Mo(Ao,i?t&1|2:t&1),n):null;case 23:case 24:return dD(),e!==null&&e.memoizedState!==null!=(t.memoizedState!==null)&&r.mode!=="unstable-defer-without-hiding"&&(t.flags|=4),null}throw Error(mt(156,t.tag))}function p9e(e){switch(e.tag){case 1:al(e.type)&&jI();var t=e.flags;return t&4096?(e.flags=t&-4097|64,e):null;case 3:if(Dg(),lo(il),lo(pa),nD(),t=e.flags,t&64)throw Error(mt(285));return e.flags=t&-4097|64,e;case 5:return rD(e),null;case 13:return lo(Ao),t=e.flags,t&4096?(e.flags=t&-4097|64,e):null;case 19:return lo(Ao),null;case 4:return Dg(),null;case 10:return eD(e),null;case 23:case 24:return dD(),null;default:return null}}function uD(e,t){try{var n="",r=t;do n+=U8e(r),r=r.return;while(r);var o=n}catch(i){o=` +`+o[u].replace(" at new "," at ");while(1<=u&&0<=f);break}}}finally{jz=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?zb(e):""}function G8e(e){switch(e.tag){case 5:return zb(e.type);case 16:return zb("Lazy");case 13:return zb("Suspense");case 19:return zb("SuspenseList");case 0:case 2:case 15:return e=Yj(e.type,!1),e;case 11:return e=Yj(e.type.render,!1),e;case 22:return e=Yj(e.type._render,!1),e;case 1:return e=Yj(e.type,!0),e;default:return""}}function Sg(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case Xf:return"Fragment";case y1:return"Portal";case Fb:return"Profiler";case zL:return"StrictMode";case Wb:return"Suspense";case wI:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case DL:return(e.displayName||"Context")+".Consumer";case LL:return(e._context.displayName||"Context")+".Provider";case qI:var t=e.render;return t=t.displayName||t.name||"",e.displayName||(t!==""?"ForwardRef("+t+")":"ForwardRef");case UI:return Sg(e.type);case FL:return Sg(e._render);case NL:t=e._payload,e=e._init;try{return Sg(e(t))}catch{}}return null}function ld(e){switch(typeof e){case"boolean":case"number":case"object":case"string":case"undefined":return e;default:return""}}function Dne(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function X8e(e){var t=Dne(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var o=n.get,i=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return o.call(this)},set:function(u){r=""+u,i.call(this,u)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(u){r=""+u},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function Qj(e){e._valueTracker||(e._valueTracker=X8e(e))}function Nne(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=Dne(e)?e.checked?"true":"false":e.value),e=r,e!==n?(t.setValue(e),!0):!1}function OI(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function Jz(e,t){var n=t.checked;return wo({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??e._wrapperState.initialChecked})}function Pre(e,t){var n=t.defaultValue==null?"":t.defaultValue,r=t.checked!=null?t.checked:t.defaultChecked;n=ld(t.value!=null?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function Fne(e,t){t=t.checked,t!=null&&RL(e,"checked",t,!1)}function Gz(e,t){Fne(e,t);var n=ld(t.value),r=t.type;if(n!=null)r==="number"?(n===0&&e.value===""||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if(r==="submit"||r==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?Xz(e,t.type,n):t.hasOwnProperty("defaultValue")&&Xz(e,t.type,ld(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function kre(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!(r!=="submit"&&r!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}n=e.name,n!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,n!==""&&(e.name=n)}function Xz(e,t,n){(t!=="number"||OI(e.ownerDocument)!==e)&&(n==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}function K8e(e){var t="";return VI.Children.forEach(e,function(n){n!=null&&(t+=n)}),t}function Kz(e,t){return e=wo({children:void 0},t),(t=K8e(t.children))&&(e.children=t),e}function jg(e,t,n,r){if(e=e.options,t){t={};for(var o=0;o=n.length))throw Error(gt(93));n=n[0]}t=n}t==null&&(t=""),n=t}e._wrapperState={initialValue:ld(n)}}function Wne(e,t){var n=ld(t.value),r=ld(t.defaultValue);n!=null&&(n=""+n,n!==e.value&&(e.value=n),t.defaultValue==null&&e.defaultValue!==n&&(e.defaultValue=n)),r!=null&&(e.defaultValue=""+r)}function Cre(e){var t=e.textContent;t===e._wrapperState.initialValue&&t!==""&&t!==null&&(e.value=t)}var Qz={html:"http://www.w3.org/1999/xhtml",mathml:"http://www.w3.org/1998/Math/MathML",svg:"http://www.w3.org/2000/svg"};function Bne(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function Zz(e,t){return e==null||e==="http://www.w3.org/1999/xhtml"?Bne(t):e==="http://www.w3.org/2000/svg"&&t==="foreignObject"?"http://www.w3.org/1999/xhtml":e}var Zj,Hne=function(e){return typeof MSApp<"u"&&MSApp.execUnsafeLocalFunction?function(t,n,r,o){MSApp.execUnsafeLocalFunction(function(){return e(t,n,r,o)})}:e}(function(e,t){if(e.namespaceURI!==Qz.svg||"innerHTML"in e)e.innerHTML=t;else{for(Zj=Zj||document.createElement("div"),Zj.innerHTML=""+t.valueOf().toString()+"",t=Zj.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function Qb(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&n.nodeType===3){n.nodeValue=t;return}}e.textContent=t}var Bb={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},Y8e=["Webkit","ms","Moz","O"];Object.keys(Bb).forEach(function(e){Y8e.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),Bb[t]=Bb[e]})});function Vne(e,t,n){return t==null||typeof t=="boolean"||t===""?"":n||typeof t!="number"||t===0||Bb.hasOwnProperty(e)&&Bb[e]?(""+t).trim():t+"px"}function qne(e,t){e=e.style;for(var n in t)if(t.hasOwnProperty(n)){var r=n.indexOf("--")===0,o=Vne(n,t[n],r);n==="float"&&(n="cssFloat"),r?e.setProperty(n,o):e[n]=o}}var Q8e=wo({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function eL(e,t){if(t){if(Q8e[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(gt(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(gt(60));if(!(typeof t.dangerouslySetInnerHTML=="object"&&"__html"in t.dangerouslySetInnerHTML))throw Error(gt(61))}if(t.style!=null&&typeof t.style!="object")throw Error(gt(62))}}function tL(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}function HL(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var rL=null,Ig=null,Pg=null;function Are(e){if(e=f3(e)){if(typeof rL!="function")throw Error(gt(280));var t=e.stateNode;t&&(t=YI(t),rL(e.stateNode,e.type,t))}}function Une(e){Ig?Pg?Pg.push(e):Pg=[e]:Ig=e}function $ne(){if(Ig){var e=Ig,t=Pg;if(Pg=Ig=null,Are(e),t)for(e=0;er?0:1<n;n++)t.push(e);return t}function JI(e,t,n){e.pendingLanes|=t;var r=t-1;e.suspendedLanes&=r,e.pingedLanes&=r,e=e.eventTimes,t=31-sd(t),e[t]=n}var sd=Math.clz32?Math.clz32:mxe,fxe=Math.log,dxe=Math.LN2;function mxe(e){return e===0?32:31-(fxe(e)/dxe|0)|0}var hxe=Si.unstable_UserBlockingPriority,gxe=Si.unstable_runWithPriority,pI=!0;function vxe(e,t,n,r){b1||qL();var o=XL,i=b1;b1=!0;try{Jne(o,e,t,n,r)}finally{(b1=i)||UL()}}function yxe(e,t,n,r){gxe(hxe,XL.bind(null,e,t,n,r))}function XL(e,t,n,r){if(pI){var o;if((o=(t&4)===0)&&0=Vb),Bre=String.fromCharCode(32),Hre=!1;function coe(e,t){switch(e){case"keyup":return Bxe.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function poe(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var bg=!1;function Vxe(e,t){switch(e){case"compositionend":return poe(t);case"keypress":return t.which!==32?null:(Hre=!0,Bre);case"textInput":return e=t.data,e===Bre&&Hre?null:e;default:return null}}function qxe(e,t){if(bg)return e==="compositionend"||!eD&&coe(e,t)?(e=soe(),fI=YL=Kf=null,bg=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=r}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=Ure(n)}}function hoe(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?hoe(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function Jre(){for(var e=window,t=OI();t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch{n=!1}if(n)e=t.contentWindow;else break;t=OI(e.document)}return t}function lL(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}var e9e=gp&&"documentMode"in document&&11>=document.documentMode,wg=null,sL=null,Ub=null,uL=!1;function Gre(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;uL||wg==null||wg!==OI(r)||(r=wg,"selectionStart"in r&&lL(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),Ub&&o3(Ub,r)||(Ub=r,r=jI(sL,"onSelect"),0xg||(e.current=pL[xg],pL[xg]=null,xg--)}function Mo(e,t){xg++,pL[xg]=e.current,e.current=t}var ud={},ca=fd(ud),il=fd(!1),S1=ud;function zg(e,t){var n=e.type.contextTypes;if(!n)return ud;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var o={},i;for(i in n)o[i]=t[i];return r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=o),o}function al(e){return e=e.childContextTypes,e!=null}function kI(){so(il),so(ca)}function rne(e,t,n){if(ca.current!==ud)throw Error(gt(168));Mo(ca,t),Mo(il,n)}function _oe(e,t,n){var r=e.stateNode;if(e=t.childContextTypes,typeof r.getChildContext!="function")return n;r=r.getChildContext();for(var o in r)if(!(o in e))throw Error(gt(108,Sg(t)||"Unknown",o));return wo({},n,r)}function mI(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||ud,S1=ca.current,Mo(ca,e),Mo(il,il.current),!0}function nne(e,t,n){var r=e.stateNode;if(!r)throw Error(gt(169));n?(e=_oe(e,t,S1),r.__reactInternalMemoizedMergedChildContext=e,so(il),so(ca),Mo(ca,e)):so(il),Mo(il,n)}var rD=null,_1=null,n9e=Si.unstable_runWithPriority,nD=Si.unstable_scheduleCallback,fL=Si.unstable_cancelCallback,o9e=Si.unstable_shouldYield,one=Si.unstable_requestPaint,dL=Si.unstable_now,i9e=Si.unstable_getCurrentPriorityLevel,QI=Si.unstable_ImmediatePriority,Soe=Si.unstable_UserBlockingPriority,joe=Si.unstable_NormalPriority,Ioe=Si.unstable_LowPriority,Poe=Si.unstable_IdlePriority,Dz={},a9e=one!==void 0?one:function(){},pp=null,hI=null,Nz=!1,ine=dL(),sa=1e4>ine?dL:function(){return dL()-ine};function Lg(){switch(i9e()){case QI:return 99;case Soe:return 98;case joe:return 97;case Ioe:return 96;case Poe:return 95;default:throw Error(gt(332))}}function koe(e){switch(e){case 99:return QI;case 98:return Soe;case 97:return joe;case 96:return Ioe;case 95:return Poe;default:throw Error(gt(332))}}function j1(e,t){return e=koe(e),n9e(e,t)}function a3(e,t,n){return e=koe(e),nD(e,t,n)}function rc(){if(hI!==null){var e=hI;hI=null,fL(e)}Eoe()}function Eoe(){if(!Nz&&pp!==null){Nz=!0;var e=0;try{var t=pp;j1(99,function(){for(;eK?(de=Z,Z=null):de=Z.sibling;var se=I(F,Z,B[K],Y);if(se===null){Z===null&&(Z=de);break}e&&Z&&se.alternate===null&&t(F,Z),R=i(se,R,K),le===null?X=se:le.sibling=se,le=se,Z=de}if(K===B.length)return n(F,Z),X;if(Z===null){for(;KK?(de=Z,Z=null):de=Z.sibling;var _e=I(F,Z,se.value,Y);if(_e===null){Z===null&&(Z=de);break}e&&Z&&_e.alternate===null&&t(F,Z),R=i(_e,R,K),le===null?X=_e:le.sibling=_e,le=_e,Z=de}if(se.done)return n(F,Z),X;if(Z===null){for(;!se.done;K++,se=B.next())se=S(F,se.value,Y),se!==null&&(R=i(se,R,K),le===null?X=se:le.sibling=se,le=se);return X}for(Z=r(F,Z);!se.done;K++,se=B.next())se=A(Z,F,K,se.value,Y),se!==null&&(e&&se.alternate!==null&&Z.delete(se.key===null?K:se.key),R=i(se,R,K),le===null?X=se:le.sibling=se,le=se);return e&&Z.forEach(function(be){return t(F,be)}),X}return function(F,R,B,Y){var X=typeof B=="object"&&B!==null&&B.type===Xf&&B.key===null;X&&(B=B.props.children);var le=typeof B=="object"&&B!==null;if(le)switch(B.$$typeof){case Rb:e:{for(le=B.key,X=R;X!==null;){if(X.key===le){switch(X.tag){case 7:if(B.type===Xf){n(F,X.sibling),R=o(X,B.props.children),R.return=F,F=R;break e}break;default:if(X.elementType===B.type){n(F,X.sibling),R=o(X,B.props),R.ref=Pb(F,X,B),R.return=F,F=R;break e}}n(F,X);break}else t(F,X);X=X.sibling}B.type===Xf?(R=Tg(B.props.children,F.mode,Y,B.key),R.return=F,F=R):(Y=bI(B.type,B.key,B.props,null,F.mode,Y),Y.ref=Pb(F,R,B),Y.return=F,F=Y)}return u(F);case y1:e:{for(X=B.key;R!==null;){if(R.key===X)if(R.tag===4&&R.stateNode.containerInfo===B.containerInfo&&R.stateNode.implementation===B.implementation){n(F,R.sibling),R=o(R,B.children||[]),R.return=F,F=R;break e}else{n(F,R);break}else t(F,R);R=R.sibling}R=qz(B,F.mode,Y),R.return=F,F=R}return u(F)}if(typeof B=="string"||typeof B=="number")return B=""+B,R!==null&&R.tag===6?(n(F,R.sibling),R=o(R,B),R.return=F,F=R):(n(F,R),R=Vz(B,F.mode,Y),R.return=F,F=R),u(F);if(iI(B))return C(F,R,B,Y);if(xb(B))return M(F,R,B,Y);if(le&&aI(F,B),typeof B>"u"&&!X)switch(F.tag){case 1:case 22:case 0:case 11:case 15:throw Error(gt(152,Sg(F.type)||"Component"))}return n(F,R)}}var TI=Roe(!0),zoe=Roe(!1),d3={},ec=fd(d3),s3=fd(d3),u3=fd(d3);function O1(e){if(e===d3)throw Error(gt(174));return e}function hL(e,t){switch(Mo(u3,t),Mo(s3,e),Mo(ec,d3),e=t.nodeType,e){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:Zz(null,"");break;default:e=e===8?t.parentNode:t,t=e.namespaceURI||null,e=e.tagName,t=Zz(t,e)}so(ec),Mo(ec,t)}function Dg(){so(ec),so(s3),so(u3)}function cne(e){O1(u3.current);var t=O1(ec.current),n=Zz(t,e.type);t!==n&&(Mo(s3,e),Mo(ec,n))}function lD(e){s3.current===e&&(so(ec),so(s3))}var Ao=fd(0);function RI(e){for(var t=e;t!==null;){if(t.tag===13){var n=t.memoizedState;if(n!==null&&(n=n.dehydrated,n===null||n.data==="$?"||n.data==="$!"))return t}else if(t.tag===19&&t.memoizedProps.revealOrder!==void 0){if(t.flags&64)return t}else if(t.child!==null){t.child.return=t,t=t.child;continue}if(t===e)break;for(;t.sibling===null;){if(t.return===null||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var dp=null,Qf=null,tc=!1;function Loe(e,t){var n=os(5,null,null,0);n.elementType="DELETED",n.type="DELETED",n.stateNode=t,n.return=e,n.flags=8,e.lastEffect!==null?(e.lastEffect.nextEffect=n,e.lastEffect=n):e.firstEffect=e.lastEffect=n}function pne(e,t){switch(e.tag){case 5:var n=e.type;return t=t.nodeType!==1||n.toLowerCase()!==t.nodeName.toLowerCase()?null:t,t!==null?(e.stateNode=t,!0):!1;case 6:return t=e.pendingProps===""||t.nodeType!==3?null:t,t!==null?(e.stateNode=t,!0):!1;case 13:return!1;default:return!1}}function gL(e){if(tc){var t=Qf;if(t){var n=t;if(!pne(e,t)){if(t=kg(n.nextSibling),!t||!pne(e,t)){e.flags=e.flags&-1025|2,tc=!1,dp=e;return}Loe(dp,n)}dp=e,Qf=kg(t.firstChild)}else e.flags=e.flags&-1025|2,tc=!1,dp=e}}function fne(e){for(e=e.return;e!==null&&e.tag!==5&&e.tag!==3&&e.tag!==13;)e=e.return;dp=e}function lI(e){if(e!==dp)return!1;if(!tc)return fne(e),tc=!0,!1;var t=e.type;if(e.tag!==5||t!=="head"&&t!=="body"&&!cL(t,e.memoizedProps))for(t=Qf;t;)Loe(e,t),t=kg(t.nextSibling);if(fne(e),e.tag===13){if(e=e.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(gt(317));e:{for(e=e.nextSibling,t=0;e;){if(e.nodeType===8){var n=e.data;if(n==="/$"){if(t===0){Qf=kg(e.nextSibling);break e}t--}else n!=="$"&&n!=="$!"&&n!=="$?"||t++}e=e.nextSibling}Qf=null}}else Qf=dp?kg(e.stateNode.nextSibling):null;return!0}function Fz(){Qf=dp=null,tc=!1}var Cg=[];function sD(){for(var e=0;ei))throw Error(gt(301));i+=1,Li=la=null,t.updateQueue=null,$b.current=p9e,e=n(r,o)}while(Jb)}if($b.current=FI,t=la!==null&&la.next!==null,c3=0,Li=la=Ho=null,zI=!1,t)throw Error(gt(300));return e}function x1(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return Li===null?Ho.memoizedState=Li=e:Li=Li.next=e,Li}function C1(){if(la===null){var e=Ho.alternate;e=e!==null?e.memoizedState:null}else e=la.next;var t=Li===null?Ho.memoizedState:Li.next;if(t!==null)Li=t,la=e;else{if(e===null)throw Error(gt(310));la=e,e={memoizedState:la.memoizedState,baseState:la.baseState,baseQueue:la.baseQueue,queue:la.queue,next:null},Li===null?Ho.memoizedState=Li=e:Li=Li.next=e}return Li}function Qu(e,t){return typeof t=="function"?t(e):t}function kb(e){var t=C1(),n=t.queue;if(n===null)throw Error(gt(311));n.lastRenderedReducer=e;var r=la,o=r.baseQueue,i=n.pending;if(i!==null){if(o!==null){var u=o.next;o.next=i.next,i.next=u}r.baseQueue=o=i,n.pending=null}if(o!==null){o=o.next,r=r.baseState;var f=u=i=null,h=o;do{var y=h.lane;if((c3&y)===y)f!==null&&(f=f.next={lane:0,action:h.action,eagerReducer:h.eagerReducer,eagerState:h.eagerState,next:null}),r=h.eagerReducer===e?h.eagerState:e(r,h.action);else{var O={lane:y,action:h.action,eagerReducer:h.eagerReducer,eagerState:h.eagerState,next:null};f===null?(u=f=O,i=r):f=f.next=O,Ho.lanes|=y,m3|=y}h=h.next}while(h!==null&&h!==o);f===null?i=r:f.next=u,ns(r,t.memoizedState)||(Xs=!0),t.memoizedState=r,t.baseState=i,t.baseQueue=f,n.lastRenderedState=r}return[t.memoizedState,n.dispatch]}function Eb(e){var t=C1(),n=t.queue;if(n===null)throw Error(gt(311));n.lastRenderedReducer=e;var r=n.dispatch,o=n.pending,i=t.memoizedState;if(o!==null){n.pending=null;var u=o=o.next;do i=e(i,u.action),u=u.next;while(u!==o);ns(i,t.memoizedState)||(Xs=!0),t.memoizedState=i,t.baseQueue===null&&(t.baseState=i),n.lastRenderedState=i}return[i,r]}function dne(e,t,n){var r=t._getVersion;r=r(t._source);var o=t._workInProgressVersionPrimary;if(o!==null?e=o===r:(e=e.mutableReadLanes,(e=(c3&e)===e)&&(t._workInProgressVersionPrimary=r,Cg.push(t))),e)return n(t._source);throw Cg.push(t),Error(gt(350))}function Doe(e,t,n,r){var o=Pa;if(o===null)throw Error(gt(349));var i=t._getVersion,u=i(t._source),f=$b.current,h=f.useState(function(){return dne(o,t,n)}),y=h[1],O=h[0];h=Li;var S=e.memoizedState,I=S.refs,A=I.getSnapshot,C=S.source;S=S.subscribe;var M=Ho;return e.memoizedState={refs:I,source:t,subscribe:r},f.useEffect(function(){I.getSnapshot=n,I.setSnapshot=y;var F=i(t._source);if(!ns(u,F)){F=n(t._source),ns(O,F)||(y(F),F=od(M),o.mutableReadLanes|=F&o.pendingLanes),F=o.mutableReadLanes,o.entangledLanes|=F;for(var R=o.entanglements,B=F;0n?98:n,function(){e(!0)}),j1(97<\/script>",e=e.removeChild(e.firstChild)):typeof r.is=="string"?e=u.createElement(n,{is:r.is}):(e=u.createElement(n),n==="select"&&(u=e,r.multiple?u.multiple=!0:r.size&&(u.size=r.size))):e=u.createElementNS(e,n),e[Yf]=t,e[PI]=r,$oe(e,t,!1,!1),t.stateNode=e,u=tL(n,r),n){case"dialog":lo("cancel",e),lo("close",e),o=r;break;case"iframe":case"object":case"embed":lo("load",e),o=r;break;case"video":case"audio":for(o=0;oIL&&(t.flags|=64,i=!0,Ab(r,!1),t.lanes=33554432)}else{if(!i)if(e=RI(u),e!==null){if(t.flags|=64,i=!0,n=e.updateQueue,n!==null&&(t.updateQueue=n,t.flags|=4),Ab(r,!0),r.tail===null&&r.tailMode==="hidden"&&!u.alternate&&!tc)return t=t.lastEffect=r.lastEffect,t!==null&&(t.nextEffect=null),null}else 2*sa()-r.renderingStartTime>IL&&n!==1073741824&&(t.flags|=64,i=!0,Ab(r,!1),t.lanes=33554432);r.isBackwards?(u.sibling=t.child,t.child=u):(n=r.last,n!==null?n.sibling=u:t.child=u,r.last=u)}return r.tail!==null?(n=r.tail,r.rendering=n,r.tail=n.sibling,r.lastEffect=t.lastEffect,r.renderingStartTime=sa(),n.sibling=null,t=Ao.current,Mo(Ao,i?t&1|2:t&1),n):null;case 23:case 24:return yD(),e!==null&&e.memoizedState!==null!=(t.memoizedState!==null)&&r.mode!=="unstable-defer-without-hiding"&&(t.flags|=4),null}throw Error(gt(156,t.tag))}function m9e(e){switch(e.tag){case 1:al(e.type)&&kI();var t=e.flags;return t&4096?(e.flags=t&-4097|64,e):null;case 3:if(Dg(),so(il),so(ca),sD(),t=e.flags,t&64)throw Error(gt(285));return e.flags=t&-4097|64,e;case 5:return lD(e),null;case 13:return so(Ao),t=e.flags,t&4096?(e.flags=t&-4097|64,e):null;case 19:return so(Ao),null;case 4:return Dg(),null;case 10:return iD(e),null;case 23:case 24:return yD(),null;default:return null}}function mD(e,t){try{var n="",r=t;do n+=G8e(r),r=r.return;while(r);var o=n}catch(i){o=` Error generating stack: `+i.message+` -`+i.stack}return{value:e,source:t,stack:o}}function gL(e,t){try{console.error(t.value)}catch(n){setTimeout(function(){throw n})}}var f9e=typeof WeakMap=="function"?WeakMap:Map;function qoe(e,t,n){n=ed(-1,n),n.tag=3,n.payload={element:null};var r=t.value;return n.callback=function(){NI||(NI=!0,xL=r),gL(e,t)},n}function Uoe(e,t,n){n=ed(-1,n),n.tag=3;var r=e.type.getDerivedStateFromError;if(typeof r=="function"){var o=t.value;n.payload=function(){return gL(e,t),r(o)}}var i=e.stateNode;return i!==null&&typeof i.componentDidCatch=="function"&&(n.callback=function(){typeof r!="function"&&(Yu===null?Yu=new Set([this]):Yu.add(this),gL(e,t));var u=t.stack;this.componentDidCatch(t.value,{componentStack:u!==null?u:""})}),n}var d9e=typeof WeakSet=="function"?WeakSet:Set;function One(e){var t=e.ref;if(t!==null)if(typeof t=="function")try{t(null)}catch(n){od(e,n)}else t.current=null}function m9e(e,t){switch(t.tag){case 0:case 11:case 15:case 22:return;case 1:if(t.flags&256&&e!==null){var n=e.memoizedProps,r=e.memoizedState;e=t.stateNode,t=e.getSnapshotBeforeUpdate(t.elementType===t.type?n:Us(t.type,n),r),e.__reactInternalSnapshotBeforeUpdate=t}return;case 3:t.flags&256&&KL(t.stateNode.containerInfo);return;case 5:case 6:case 4:case 17:return}throw Error(mt(163))}function h9e(e,t,n){switch(n.tag){case 0:case 11:case 15:case 22:if(t=n.updateQueue,t=t!==null?t.lastEffect:null,t!==null){e=t=t.next;do{if((e.tag&3)===3){var r=e.create;e.destroy=r()}e=e.next}while(e!==t)}if(t=n.updateQueue,t=t!==null?t.lastEffect:null,t!==null){e=t=t.next;do{var o=e;r=o.next,o=o.tag,o&4&&o&1&&(eie(n,e),_9e(n,e)),e=r}while(e!==t)}return;case 1:e=n.stateNode,n.flags&4&&(t===null?e.componentDidMount():(r=n.elementType===n.type?t.memoizedProps:Us(n.type,t.memoizedProps),e.componentDidUpdate(r,t.memoizedState,e.__reactInternalSnapshotBeforeUpdate))),t=n.updateQueue,t!==null&&rne(n,t,e);return;case 3:if(t=n.updateQueue,t!==null){if(e=null,n.child!==null)switch(n.child.tag){case 5:e=n.child.stateNode;break;case 1:e=n.child.stateNode}rne(n,t,e)}return;case 5:e=n.stateNode,t===null&&n.flags&4&&goe(n.type,n.memoizedProps)&&e.focus();return;case 6:return;case 4:return;case 12:return;case 13:n.memoizedState===null&&(n=n.alternate,n!==null&&(n=n.memoizedState,n!==null&&(n=n.dehydrated,n!==null&&Xne(n))));return;case 19:case 17:case 20:case 21:case 23:case 24:return}throw Error(mt(163))}function xne(e,t){for(var n=e;;){if(n.tag===5){var r=n.stateNode;if(t)r=r.style,typeof r.setProperty=="function"?r.setProperty("display","none","important"):r.display="none";else{r=n.stateNode;var o=n.memoizedProps.style;o=o!=null&&o.hasOwnProperty("display")?o.display:null,r.style.display=Nne("display",o)}}else if(n.tag===6)n.stateNode.nodeValue=t?"":n.memoizedProps;else if((n.tag!==23&&n.tag!==24||n.memoizedState===null||n===e)&&n.child!==null){n.child.return=n,n=n.child;continue}if(n===e)break;for(;n.sibling===null;){if(n.return===null||n.return===e)return;n=n.return}n.sibling.return=n.return,n=n.sibling}}function _ne(e,t){if(x1&&typeof x1.onCommitFiberUnmount=="function")try{x1.onCommitFiberUnmount(YL,t)}catch{}switch(t.tag){case 0:case 11:case 14:case 15:case 22:if(e=t.updateQueue,e!==null&&(e=e.lastEffect,e!==null)){var n=e=e.next;do{var r=n,o=r.destroy;if(r=r.tag,o!==void 0)if(r&4)eie(t,n);else{r=t;try{o()}catch(i){od(r,i)}}n=n.next}while(n!==e)}break;case 1:if(One(t),e=t.stateNode,typeof e.componentWillUnmount=="function")try{e.props=t.memoizedProps,e.state=t.memoizedState,e.componentWillUnmount()}catch(i){od(t,i)}break;case 5:One(t);break;case 4:$oe(e,t)}}function Sne(e){e.alternate=null,e.child=null,e.dependencies=null,e.firstEffect=null,e.lastEffect=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.return=null,e.updateQueue=null}function jne(e){return e.tag===5||e.tag===3||e.tag===4}function Ine(e){e:{for(var t=e.return;t!==null;){if(jne(t))break e;t=t.return}throw Error(mt(160))}var n=t;switch(t=n.stateNode,n.tag){case 5:var r=!1;break;case 3:t=t.containerInfo,r=!0;break;case 4:t=t.containerInfo,r=!0;break;default:throw Error(mt(161))}n.flags&16&&(Kb(t,""),n.flags&=-17);e:t:for(n=e;;){for(;n.sibling===null;){if(n.return===null||jne(n.return)){n=null;break e}n=n.return}for(n.sibling.return=n.return,n=n.sibling;n.tag!==5&&n.tag!==6&&n.tag!==18;){if(n.flags&2||n.child===null||n.tag===4)continue t;n.child.return=n,n=n.child}if(!(n.flags&2)){n=n.stateNode;break e}}r?vL(e,n,t):yL(e,n,t)}function vL(e,t,n){var r=e.tag,o=r===5||r===6;if(o)e=o?e.stateNode:e.stateNode.instance,t?n.nodeType===8?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(n.nodeType===8?(t=n.parentNode,t.insertBefore(e,n)):(t=n,t.appendChild(e)),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=_I));else if(r!==4&&(e=e.child,e!==null))for(vL(e,t,n),e=e.sibling;e!==null;)vL(e,t,n),e=e.sibling}function yL(e,t,n){var r=e.tag,o=r===5||r===6;if(o)e=o?e.stateNode:e.stateNode.instance,t?n.insertBefore(e,t):n.appendChild(e);else if(r!==4&&(e=e.child,e!==null))for(yL(e,t,n),e=e.sibling;e!==null;)yL(e,t,n),e=e.sibling}function $oe(e,t){for(var n=t,r=!1,o,i;;){if(!r){r=n.return;e:for(;;){if(r===null)throw Error(mt(160));switch(o=r.stateNode,r.tag){case 5:i=!1;break e;case 3:o=o.containerInfo,i=!0;break e;case 4:o=o.containerInfo,i=!0;break e}r=r.return}r=!0}if(n.tag===5||n.tag===6){e:for(var u=e,f=n,h=f;;)if(_ne(u,h),h.child!==null&&h.tag!==4)h.child.return=h,h=h.child;else{if(h===f)break e;for(;h.sibling===null;){if(h.return===null||h.return===f)break e;h=h.return}h.sibling.return=h.return,h=h.sibling}i?(u=o,f=n.stateNode,u.nodeType===8?u.parentNode.removeChild(f):u.removeChild(f)):o.removeChild(n.stateNode)}else if(n.tag===4){if(n.child!==null){o=n.stateNode.containerInfo,i=!0,n.child.return=n,n=n.child;continue}}else if(_ne(e,n),n.child!==null){n.child.return=n,n=n.child;continue}if(n===t)break;for(;n.sibling===null;){if(n.return===null||n.return===t)return;n=n.return,n.tag===4&&(r=!1)}n.sibling.return=n.return,n=n.sibling}}function Dz(e,t){switch(t.tag){case 0:case 11:case 14:case 15:case 22:var n=t.updateQueue;if(n=n!==null?n.lastEffect:null,n!==null){var r=n=n.next;do(r.tag&3)===3&&(e=r.destroy,r.destroy=void 0,e!==void 0&&e()),r=r.next;while(r!==n)}return;case 1:return;case 5:if(n=t.stateNode,n!=null){r=t.memoizedProps;var o=e!==null?e.memoizedProps:r;e=t.type;var i=t.updateQueue;if(t.updateQueue=null,i!==null){for(n[SI]=r,e==="input"&&r.type==="radio"&&r.name!=null&&Rne(n,r),Kz(e,o),t=Kz(e,r),o=0;oo&&(o=u),n&=~i}if(n=o,n=ua()-n,n=(120>n?120:480>n?480:1080>n?1080:1920>n?1920:3e3>n?3e3:4320>n?4320:1960*v9e(n/1960))-n,10o&&(o=u),n&=~i}if(n=o,n=sa()-n,n=(120>n?120:480>n?480:1080>n?1080:1920>n?1920:3e3>n?3e3:4320>n?4320:1960*w9e(n/1960))-n,10 component higher in the tree to provide a loading indicator or placeholder to display.`)}Ni!==5&&(Ni=2),h=uD(h,f),I=u;do{switch(I.tag){case 3:i=h,I.flags|=4096,t&=-t,I.lanes|=t;var ae=qoe(I,i,t);tne(I,ae);break e;case 1:i=h;var Z=I.type,K=I.stateNode;if(!(I.flags&64)&&(typeof Z.getDerivedStateFromError=="function"||K!==null&&typeof K.componentDidCatch=="function"&&(Yu===null||!Yu.has(K)))){I.flags|=4096,t&=-t,I.lanes|=t;var de=Uoe(I,i,t);tne(I,de);break e}}I=I.return}while(I!==null)}Zoe(n)}catch(se){t=se,hi===n&&n!==null&&(hi=n=n.return);continue}break}while(1)}function Yoe(){var e=DI.current;return DI.current=LI,e===null?LI:e}function Lb(e,t){var n=pr;pr|=16;var r=Yoe();Pa===e&&ca===t||Mg(e,t);do try{b9e();break}catch(o){Koe(e,o)}while(1);if(ZL(),pr=n,DI.current=r,hi!==null)throw Error(mt(261));return Pa=null,ca=0,Ni}function b9e(){for(;hi!==null;)Qoe(hi)}function w9e(){for(;hi!==null&&!t9e();)Qoe(hi)}function Qoe(e){var t=tie(e.alternate,e,j1);e.memoizedProps=e.pendingProps,t===null?Zoe(e):hi=t,cD.current=null}function Zoe(e){var t=e;do{var n=t.alternate;if(e=t.return,t.flags&2048){if(n=p9e(t),n!==null){n.flags&=2047,hi=n;return}e!==null&&(e.firstEffect=e.lastEffect=null,e.flags|=2048)}else{if(n=c9e(n,t,j1),n!==null){hi=n;return}if(n=t,n.tag!==24&&n.tag!==23||n.memoizedState===null||j1&1073741824||!(n.mode&4)){for(var r=0,o=n.child;o!==null;)r|=o.lanes|o.childLanes,o=o.sibling;n.childLanes=r}e!==null&&!(e.flags&2048)&&(e.firstEffect===null&&(e.firstEffect=t.firstEffect),t.lastEffect!==null&&(e.lastEffect!==null&&(e.lastEffect.nextEffect=t.firstEffect),e.lastEffect=t.lastEffect),1u&&(f=u,u=ae,ae=f),f=Bre(B,ae),i=Bre(B,u),f&&i&&(X.rangeCount!==1||X.anchorNode!==f.node||X.anchorOffset!==f.offset||X.focusNode!==i.node||X.focusOffset!==i.offset)&&(Y=Y.createRange(),Y.setStart(f.node,f.offset),X.removeAllRanges(),ae>u?(X.addRange(Y),X.extend(i.node,i.offset)):(Y.setEnd(i.node,i.offset),X.addRange(Y)))))),Y=[],X=B;X=X.parentNode;)X.nodeType===1&&Y.push({element:X,left:X.scrollLeft,top:X.scrollTop});for(typeof B.focus=="function"&&B.focus(),B=0;Bua()-fD?Mg(e,0):pD|=n),as(e,t)}function I9e(e,t){var n=e.stateNode;n!==null&&n.delete(t),t=0,t===0&&(t=e.mode,t&2?t&4?(cp===0&&(cp=Wg),t=vg(62914560&~cp),t===0&&(t=4194304)):t=Lg()===99?1:2:t=1),n=Pl(),e=QI(e,t),e!==null&&(qI(e,t,n),as(e,n))}var tie;tie=function(e,t,n){var r=t.lanes;if(e!==null)if(e.memoizedProps!==t.pendingProps||il.current)$s=!0;else if(n&r)$s=!!(e.flags&16384);else{switch($s=!1,t.tag){case 3:mne(t),Rz();break;case 5:ine(t);break;case 1:al(t.type)&&pI(t);break;case 4:cL(t,t.stateNode.containerInfo);break;case 10:r=t.memoizedProps.value;var o=t.type._context;Mo(II,o._currentValue),o._currentValue=r;break;case 13:if(t.memoizedState!==null)return n&t.child.childLanes?hne(e,t,n):(Mo(Ao,Ao.current&1),t=fp(e,t,n),t!==null?t.sibling:null);Mo(Ao,Ao.current&1);break;case 19:if(r=(n&t.childLanes)!==0,e.flags&64){if(r)return wne(e,t,n);t.flags|=64}if(o=t.memoizedState,o!==null&&(o.rendering=null,o.tail=null,o.lastEffect=null),Mo(Ao,Ao.current),r)break;return null;case 23:case 24:return t.lanes=0,zz(e,t,n)}return fp(e,t,n)}else $s=!1;switch(t.lanes=0,t.tag){case 2:if(r=t.type,e!==null&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,o=zg(t,pa.current),Eg(t,n),o=iD(null,t,r,e,o,n),t.flags|=1,typeof o=="object"&&o!==null&&typeof o.render=="function"&&o.$$typeof===void 0){if(t.tag=1,t.memoizedState=null,t.updateQueue=null,al(r)){var i=!0;pI(t)}else i=!1;t.memoizedState=o.state!==null&&o.state!==void 0?o.state:null,tD(t);var u=r.getDerivedStateFromProps;typeof u=="function"&&EI(t,r,u,e),o.updater=KI,t.stateNode=o,o._reactInternals=t,uL(t,r,e,n),t=mL(null,t,r,!0,i,n)}else t.tag=0,ol(null,t,o,n),t=t.child;return t;case 16:o=t.elementType;e:{switch(e!==null&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,i=o._init,o=i(o._payload),t.type=o,i=t.tag=P9e(o),e=Us(o,e),i){case 0:t=dL(null,t,o,e,n);break e;case 1:t=dne(null,t,o,e,n);break e;case 11:t=pne(null,t,o,e,n);break e;case 14:t=fne(null,t,o,Us(o.type,e),r,n);break e}throw Error(mt(306,o,""))}return t;case 0:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:Us(r,o),dL(e,t,r,o,n);case 1:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:Us(r,o),dne(e,t,r,o,n);case 3:if(mne(t),r=t.updateQueue,e===null||r===null)throw Error(mt(282));if(r=t.pendingProps,o=t.memoizedState,o=o!==null?o.element:null,Ioe(e,t),i3(t,r,null,n),r=t.memoizedState.element,r===o)Rz(),t=fp(e,t,n);else{if(o=t.stateNode,(i=o.hydrate)&&(Kf=Pg(t.stateNode.containerInfo.firstChild),pp=t,i=Zu=!0),i){if(e=o.mutableSourceEagerHydrationData,e!=null)for(o=0;o{"use strict";function oie(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(oie)}catch(e){console.error(e)}}oie(),iie.exports=nie()});var Yie=ke((QTt,Kie)=>{"use strict";var W_e="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED";Kie.exports=W_e});var tae=ke((ZTt,eae)=>{"use strict";var B_e=Yie();function Qie(){}function Zie(){}Zie.resetWarningCache=Qie;eae.exports=function(){function e(r,o,i,u,f,h){if(h!==B_e){var y=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw y.name="Invariant Violation",y}}e.isRequired=e;function t(){return e}var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:Zie,resetWarningCache:Qie};return n.PropTypes=n,n}});var dt=ke((rRt,rae)=>{rae.exports=tae()();var eRt,tRt});var Ct=ke((nRt,vk)=>{(function(){"use strict";var e={}.hasOwnProperty;function t(){for(var o="",i=0;i{"use strict";var Ii=typeof Symbol=="function"&&Symbol.for,$D=Ii?Symbol.for("react.element"):60103,JD=Ii?Symbol.for("react.portal"):60106,jk=Ii?Symbol.for("react.fragment"):60107,Ik=Ii?Symbol.for("react.strict_mode"):60108,kk=Ii?Symbol.for("react.profiler"):60114,Pk=Ii?Symbol.for("react.provider"):60109,Ek=Ii?Symbol.for("react.context"):60110,GD=Ii?Symbol.for("react.async_mode"):60111,Ck=Ii?Symbol.for("react.concurrent_mode"):60111,Ak=Ii?Symbol.for("react.forward_ref"):60112,Mk=Ii?Symbol.for("react.suspense"):60113,Q_e=Ii?Symbol.for("react.suspense_list"):60120,Tk=Ii?Symbol.for("react.memo"):60115,Rk=Ii?Symbol.for("react.lazy"):60116,Z_e=Ii?Symbol.for("react.block"):60121,eSe=Ii?Symbol.for("react.fundamental"):60117,tSe=Ii?Symbol.for("react.responder"):60118,rSe=Ii?Symbol.for("react.scope"):60119;function Cl(e){if(typeof e=="object"&&e!==null){var t=e.$$typeof;switch(t){case $D:switch(e=e.type,e){case GD:case Ck:case jk:case kk:case Ik:case Mk:return e;default:switch(e=e&&e.$$typeof,e){case Ek:case Ak:case Rk:case Tk:case Pk:return e;default:return t}}case JD:return t}}}function jae(e){return Cl(e)===Ck}An.AsyncMode=GD;An.ConcurrentMode=Ck;An.ContextConsumer=Ek;An.ContextProvider=Pk;An.Element=$D;An.ForwardRef=Ak;An.Fragment=jk;An.Lazy=Rk;An.Memo=Tk;An.Portal=JD;An.Profiler=kk;An.StrictMode=Ik;An.Suspense=Mk;An.isAsyncMode=function(e){return jae(e)||Cl(e)===GD};An.isConcurrentMode=jae;An.isContextConsumer=function(e){return Cl(e)===Ek};An.isContextProvider=function(e){return Cl(e)===Pk};An.isElement=function(e){return typeof e=="object"&&e!==null&&e.$$typeof===$D};An.isForwardRef=function(e){return Cl(e)===Ak};An.isFragment=function(e){return Cl(e)===jk};An.isLazy=function(e){return Cl(e)===Rk};An.isMemo=function(e){return Cl(e)===Tk};An.isPortal=function(e){return Cl(e)===JD};An.isProfiler=function(e){return Cl(e)===kk};An.isStrictMode=function(e){return Cl(e)===Ik};An.isSuspense=function(e){return Cl(e)===Mk};An.isValidElementType=function(e){return typeof e=="string"||typeof e=="function"||e===jk||e===Ck||e===kk||e===Ik||e===Mk||e===Q_e||typeof e=="object"&&e!==null&&(e.$$typeof===Rk||e.$$typeof===Tk||e.$$typeof===Pk||e.$$typeof===Ek||e.$$typeof===Ak||e.$$typeof===eSe||e.$$typeof===tSe||e.$$typeof===rSe||e.$$typeof===Z_e)};An.typeOf=Cl});var Pae=ke((PRt,kae)=>{"use strict";kae.exports=Iae()});var zae=ke((ERt,Rae)=>{"use strict";var XD=Pae(),nSe={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},oSe={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},iSe={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},Mae={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},KD={};KD[XD.ForwardRef]=iSe;KD[XD.Memo]=Mae;function Eae(e){return XD.isMemo(e)?Mae:KD[e.$$typeof]||nSe}var aSe=Object.defineProperty,lSe=Object.getOwnPropertyNames,Cae=Object.getOwnPropertySymbols,sSe=Object.getOwnPropertyDescriptor,uSe=Object.getPrototypeOf,Aae=Object.prototype;function Tae(e,t,n){if(typeof t!="string"){if(Aae){var r=uSe(t);r&&r!==Aae&&Tae(e,r,n)}var o=lSe(t);Cae&&(o=o.concat(Cae(t)));for(var i=Eae(e),u=Eae(t),f=0;f{(function(e,t){typeof SN=="object"&&typeof jN<"u"?jN.exports=t():typeof define=="function"&&define.amd?define(t):(e=typeof globalThis<"u"?globalThis:e||self,e.chroma=t())})(SN,function(){"use strict";for(var e=function(D,U,Q){return U===void 0&&(U=0),Q===void 0&&(Q=1),DQ?Q:D},t=e,n=function(D){D._clipped=!1,D._unclipped=D.slice(0);for(var U=0;U<=3;U++)U<3?((D[U]<0||D[U]>255)&&(D._clipped=!0),D[U]=t(D[U],0,255)):U===3&&(D[U]=t(D[U],0,1));return D},r={},o=0,i=["Boolean","Number","String","Function","Array","Date","RegExp","Undefined","Null"];o=3?Array.prototype.slice.call(D):h(D[0])=="object"&&U?U.split("").filter(function(Q){return D[0][Q]!==void 0}).map(function(Q){return D[0][Q]}):D[0]},O=f,S=function(D){if(D.length<2)return null;var U=D.length-1;return O(D[U])=="string"?D[U].toLowerCase():null},I=Math.PI,A={clip_rgb:n,limit:e,type:f,unpack:y,last:S,PI:I,TWOPI:I*2,PITHIRD:I/3,DEG2RAD:I/180,RAD2DEG:180/I},C={format:{},autodetect:[]},M=A.last,W=A.clip_rgb,R=A.type,B=C,Y=function(){for(var U=[],Q=arguments.length;Q--;)U[Q]=arguments[Q];var fe=this;if(R(U[0])==="object"&&U[0].constructor&&U[0].constructor===this.constructor)return U[0];var ve=M(U),xe=!1;if(!ve){xe=!0,B.sorted||(B.autodetect=B.autodetect.sort(function(nt,_t){return _t.p-nt.p}),B.sorted=!0);for(var he=0,Ce=B.autodetect;he4?D[4]:1;return xe===1?[0,0,0,he]:[Q>=1?0:255*(1-Q)*(1-xe),fe>=1?0:255*(1-fe)*(1-xe),ve>=1?0:255*(1-ve)*(1-xe),he]},Ue=be,We=Z,Ge=X,Qe=C,ot=A.unpack,at=A.type,ht=Se;Ge.prototype.cmyk=function(){return ht(this._rgb)},We.cmyk=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];return new(Function.prototype.bind.apply(Ge,[null].concat(D,["cmyk"])))},Qe.format.cmyk=Ue,Qe.autodetect.push({p:2,test:function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];if(D=ot(D,"cmyk"),at(D)==="array"&&D.length===4)return"cmyk"}});var Mt=A.unpack,Ze=A.last,Kt=function(D){return Math.round(D*100)/100},it=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];var Q=Mt(D,"hsla"),fe=Ze(D)||"lsa";return Q[0]=Kt(Q[0]||0),Q[1]=Kt(Q[1]*100)+"%",Q[2]=Kt(Q[2]*100)+"%",fe==="hsla"||Q.length>3&&Q[3]<1?(Q[3]=Q.length>3?Q[3]:1,fe="hsla"):Q.length=3,fe+"("+Q.join(",")+")"},xt=it,wt=A.unpack,Ht=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];D=wt(D,"rgba");var Q=D[0],fe=D[1],ve=D[2];Q/=255,fe/=255,ve/=255;var xe=Math.min(Q,fe,ve),he=Math.max(Q,fe,ve),Ce=(he+xe)/2,Le,Xe;return he===xe?(Le=0,Xe=Number.NaN):Le=Ce<.5?(he-xe)/(he+xe):(he-xe)/(2-he-xe),Q==he?Xe=(fe-ve)/(he-xe):fe==he?Xe=2+(ve-Q)/(he-xe):ve==he&&(Xe=4+(Q-fe)/(he-xe)),Xe*=60,Xe<0&&(Xe+=360),D.length>3&&D[3]!==void 0?[Xe,Le,Ce,D[3]]:[Xe,Le,Ce]},sr=Ht,Er=A.unpack,_r=A.last,pn=xt,Dr=sr,Bt=Math.round,Dn=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];var Q=Er(D,"rgba"),fe=_r(D)||"rgb";return fe.substr(0,3)=="hsl"?pn(Dr(Q),fe):(Q[0]=Bt(Q[0]),Q[1]=Bt(Q[1]),Q[2]=Bt(Q[2]),(fe==="rgba"||Q.length>3&&Q[3]<1)&&(Q[3]=Q.length>3?Q[3]:1,fe="rgba"),fe+"("+Q.slice(0,fe==="rgb"?3:4).join(",")+")")},fn=Dn,ro=A.unpack,Gn=Math.round,co=function(){for(var D,U=[],Q=arguments.length;Q--;)U[Q]=arguments[Q];U=ro(U,"hsl");var fe=U[0],ve=U[1],xe=U[2],he,Ce,Le;if(ve===0)he=Ce=Le=xe*255;else{var Xe=[0,0,0],nt=[0,0,0],_t=xe<.5?xe*(1+ve):xe+ve-xe*ve,pt=2*xe-_t,zt=fe/360;Xe[0]=zt+1/3,Xe[1]=zt,Xe[2]=zt-1/3;for(var Lt=0;Lt<3;Lt++)Xe[Lt]<0&&(Xe[Lt]+=1),Xe[Lt]>1&&(Xe[Lt]-=1),6*Xe[Lt]<1?nt[Lt]=pt+(_t-pt)*6*Xe[Lt]:2*Xe[Lt]<1?nt[Lt]=_t:3*Xe[Lt]<2?nt[Lt]=pt+(_t-pt)*(2/3-Xe[Lt])*6:nt[Lt]=pt;D=[Gn(nt[0]*255),Gn(nt[1]*255),Gn(nt[2]*255)],he=D[0],Ce=D[1],Le=D[2]}return U.length>3?[he,Ce,Le,U[3]]:[he,Ce,Le,1]},So=co,En=So,Vr=C,hn=/^rgb\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*\)$/,zo=/^rgba\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*,\s*([01]|[01]?\.\d+)\)$/,gn=/^rgb\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,vn=/^rgba\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,Xo=/^hsl\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,jc=/^hsla\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,ws=Math.round,mr=function(D){D=D.toLowerCase().trim();var U;if(Vr.format.named)try{return Vr.format.named(D)}catch{}if(U=D.match(hn)){for(var Q=U.slice(1,4),fe=0;fe<3;fe++)Q[fe]=+Q[fe];return Q[3]=1,Q}if(U=D.match(zo)){for(var ve=U.slice(1,5),xe=0;xe<4;xe++)ve[xe]=+ve[xe];return ve}if(U=D.match(gn)){for(var he=U.slice(1,4),Ce=0;Ce<3;Ce++)he[Ce]=ws(he[Ce]*2.55);return he[3]=1,he}if(U=D.match(vn)){for(var Le=U.slice(1,5),Xe=0;Xe<3;Xe++)Le[Xe]=ws(Le[Xe]*2.55);return Le[3]=+Le[3],Le}if(U=D.match(Xo)){var nt=U.slice(1,4);nt[1]*=.01,nt[2]*=.01;var _t=En(nt);return _t[3]=1,_t}if(U=D.match(jc)){var pt=U.slice(1,4);pt[1]*=.01,pt[2]*=.01;var zt=En(pt);return zt[3]=+U[4],zt}};mr.test=function(D){return hn.test(D)||zo.test(D)||gn.test(D)||vn.test(D)||Xo.test(D)||jc.test(D)};var ba=mr,Ic=Z,dl=X,zl=C,kc=A.type,Os=fn,Ll=ba;dl.prototype.css=function(D){return Os(this._rgb,D)},Ic.css=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];return new(Function.prototype.bind.apply(dl,[null].concat(D,["css"])))},zl.format.css=Ll,zl.autodetect.push({p:5,test:function(D){for(var U=[],Q=arguments.length-1;Q-- >0;)U[Q]=arguments[Q+1];if(!U.length&&kc(D)==="string"&&Ll.test(D))return"css"}});var wm=X,Fp=Z,e0=C,Pc=A.unpack;e0.format.gl=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];var Q=Pc(D,"rgba");return Q[0]*=255,Q[1]*=255,Q[2]*=255,Q},Fp.gl=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];return new(Function.prototype.bind.apply(wm,[null].concat(D,["gl"])))},wm.prototype.gl=function(){var D=this._rgb;return[D[0]/255,D[1]/255,D[2]/255,D[3]]};var yu=A.unpack,xs=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];var Q=yu(D,"rgb"),fe=Q[0],ve=Q[1],xe=Q[2],he=Math.min(fe,ve,xe),Ce=Math.max(fe,ve,xe),Le=Ce-he,Xe=Le*100/255,nt=he/(255-Le)*100,_t;return Le===0?_t=Number.NaN:(fe===Ce&&(_t=(ve-xe)/Le),ve===Ce&&(_t=2+(xe-fe)/Le),xe===Ce&&(_t=4+(fe-ve)/Le),_t*=60,_t<0&&(_t+=360)),[_t,Xe,nt]},Ba=xs,St=A.unpack,li=Math.floor,no=function(){for(var D,U,Q,fe,ve,xe,he=[],Ce=arguments.length;Ce--;)he[Ce]=arguments[Ce];he=St(he,"hcg");var Le=he[0],Xe=he[1],nt=he[2],_t,pt,zt;nt=nt*255;var Lt=Xe*255;if(Xe===0)_t=pt=zt=nt;else{Le===360&&(Le=0),Le>360&&(Le-=360),Le<0&&(Le+=360),Le/=60;var jr=li(Le),Nr=Le-jr,nr=nt*(1-Xe),Kr=nr+Lt*(1-Nr),fi=nr+Lt*Nr,Io=nr+Lt;switch(jr){case 0:D=[Io,fi,nr],_t=D[0],pt=D[1],zt=D[2];break;case 1:U=[Kr,Io,nr],_t=U[0],pt=U[1],zt=U[2];break;case 2:Q=[nr,Io,fi],_t=Q[0],pt=Q[1],zt=Q[2];break;case 3:fe=[nr,Kr,Io],_t=fe[0],pt=fe[1],zt=fe[2];break;case 4:ve=[fi,nr,Io],_t=ve[0],pt=ve[1],zt=ve[2];break;case 5:xe=[Io,nr,Kr],_t=xe[0],pt=xe[1],zt=xe[2];break}}return[_t,pt,zt,he.length>3?he[3]:1]},si=no,Ci=A.unpack,Cr=A.type,bu=Z,an=X,wu=C,Om=Ba;an.prototype.hcg=function(){return Om(this._rgb)},bu.hcg=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];return new(Function.prototype.bind.apply(an,[null].concat(D,["hcg"])))},wu.format.hcg=si,wu.autodetect.push({p:1,test:function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];if(D=Ci(D,"hcg"),Cr(D)==="array"&&D.length===3)return"hcg"}});var Wp=A.unpack,Ko=A.last,Lo=Math.round,Ha=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];var Q=Wp(D,"rgba"),fe=Q[0],ve=Q[1],xe=Q[2],he=Q[3],Ce=Ko(D)||"auto";he===void 0&&(he=1),Ce==="auto"&&(Ce=he<1?"rgba":"rgb"),fe=Lo(fe),ve=Lo(ve),xe=Lo(xe);var Le=fe<<16|ve<<8|xe,Xe="000000"+Le.toString(16);Xe=Xe.substr(Xe.length-6);var nt="0"+Lo(he*255).toString(16);switch(nt=nt.substr(nt.length-2),Ce.toLowerCase()){case"rgba":return"#"+Xe+nt;case"argb":return"#"+nt+Xe;default:return"#"+Xe}},po=Ha,wa=/^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/,ml=/^#?([A-Fa-f0-9]{8}|[A-Fa-f0-9]{4})$/,_s=function(D){if(D.match(wa)){(D.length===4||D.length===7)&&(D=D.substr(1)),D.length===3&&(D=D.split(""),D=D[0]+D[0]+D[1]+D[1]+D[2]+D[2]);var U=parseInt(D,16),Q=U>>16,fe=U>>8&255,ve=U&255;return[Q,fe,ve,1]}if(D.match(ml)){(D.length===5||D.length===9)&&(D=D.substr(1)),D.length===4&&(D=D.split(""),D=D[0]+D[0]+D[1]+D[1]+D[2]+D[2]+D[3]+D[3]);var xe=parseInt(D,16),he=xe>>24&255,Ce=xe>>16&255,Le=xe>>8&255,Xe=Math.round((xe&255)/255*100)/100;return[he,Ce,Le,Xe]}throw new Error("unknown hex color: "+D)},xm=_s,t0=Z,Dl=X,r0=A.type,Bp=C,Ss=po;Dl.prototype.hex=function(D){return Ss(this._rgb,D)},t0.hex=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];return new(Function.prototype.bind.apply(Dl,[null].concat(D,["hex"])))},Bp.format.hex=xm,Bp.autodetect.push({p:4,test:function(D){for(var U=[],Q=arguments.length-1;Q-- >0;)U[Q]=arguments[Q+1];if(!U.length&&r0(D)==="string"&&[3,4,5,6,7,8,9].indexOf(D.length)>=0)return"hex"}});var Ou=A.unpack,Hp=A.TWOPI,_m=Math.min,Sm=Math.sqrt,n0=Math.acos,Xn=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];var Q=Ou(D,"rgb"),fe=Q[0],ve=Q[1],xe=Q[2];fe/=255,ve/=255,xe/=255;var he,Ce=_m(fe,ve,xe),Le=(fe+ve+xe)/3,Xe=Le>0?1-Ce/Le:0;return Xe===0?he=NaN:(he=(fe-ve+(fe-xe))/2,he/=Sm((fe-ve)*(fe-ve)+(fe-xe)*(ve-xe)),he=n0(he),xe>ve&&(he=Hp-he),he/=Hp),[he*360,Xe,Le]},Vp=Xn,jm=A.unpack,Ec=A.limit,Va=A.TWOPI,Cc=A.PITHIRD,js=Math.cos,Im=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];D=jm(D,"hsi");var Q=D[0],fe=D[1],ve=D[2],xe,he,Ce;return isNaN(Q)&&(Q=0),isNaN(fe)&&(fe=0),Q>360&&(Q-=360),Q<0&&(Q+=360),Q/=360,Q<1/3?(Ce=(1-fe)/3,xe=(1+fe*js(Va*Q)/js(Cc-Va*Q))/3,he=1-(Ce+xe)):Q<2/3?(Q-=1/3,xe=(1-fe)/3,he=(1+fe*js(Va*Q)/js(Cc-Va*Q))/3,Ce=1-(xe+he)):(Q-=2/3,he=(1-fe)/3,Ce=(1+fe*js(Va*Q)/js(Cc-Va*Q))/3,xe=1-(he+Ce)),xe=Ec(ve*xe*3),he=Ec(ve*he*3),Ce=Ec(ve*Ce*3),[xe*255,he*255,Ce*255,D.length>3?D[3]:1]},My=Im,o0=A.unpack,km=A.type,xu=Z,Is=X,Ac=C,Ty=Vp;Is.prototype.hsi=function(){return Ty(this._rgb)},xu.hsi=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];return new(Function.prototype.bind.apply(Is,[null].concat(D,["hsi"])))},Ac.format.hsi=My,Ac.autodetect.push({p:2,test:function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];if(D=o0(D,"hsi"),km(D)==="array"&&D.length===3)return"hsi"}});var Ry=A.unpack,i0=A.type,zy=Z,qa=X,Mc=C,a0=sr;qa.prototype.hsl=function(){return a0(this._rgb)},zy.hsl=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];return new(Function.prototype.bind.apply(qa,[null].concat(D,["hsl"])))},Mc.format.hsl=So,Mc.autodetect.push({p:2,test:function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];if(D=Ry(D,"hsl"),i0(D)==="array"&&D.length===3)return"hsl"}});var _u=A.unpack,Oa=Math.min,l0=Math.max,qp=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];D=_u(D,"rgb");var Q=D[0],fe=D[1],ve=D[2],xe=Oa(Q,fe,ve),he=l0(Q,fe,ve),Ce=he-xe,Le,Xe,nt;return nt=he/255,he===0?(Le=Number.NaN,Xe=0):(Xe=Ce/he,Q===he&&(Le=(fe-ve)/Ce),fe===he&&(Le=2+(ve-Q)/Ce),ve===he&&(Le=4+(Q-fe)/Ce),Le*=60,Le<0&&(Le+=360)),[Le,Xe,nt]},s0=qp,u0=A.unpack,Ua=Math.floor,Su=function(){for(var D,U,Q,fe,ve,xe,he=[],Ce=arguments.length;Ce--;)he[Ce]=arguments[Ce];he=u0(he,"hsv");var Le=he[0],Xe=he[1],nt=he[2],_t,pt,zt;if(nt*=255,Xe===0)_t=pt=zt=nt;else{Le===360&&(Le=0),Le>360&&(Le-=360),Le<0&&(Le+=360),Le/=60;var Lt=Ua(Le),jr=Le-Lt,Nr=nt*(1-Xe),nr=nt*(1-Xe*jr),Kr=nt*(1-Xe*(1-jr));switch(Lt){case 0:D=[nt,Kr,Nr],_t=D[0],pt=D[1],zt=D[2];break;case 1:U=[nr,nt,Nr],_t=U[0],pt=U[1],zt=U[2];break;case 2:Q=[Nr,nt,Kr],_t=Q[0],pt=Q[1],zt=Q[2];break;case 3:fe=[Nr,nr,nt],_t=fe[0],pt=fe[1],zt=fe[2];break;case 4:ve=[Kr,Nr,nt],_t=ve[0],pt=ve[1],zt=ve[2];break;case 5:xe=[nt,Nr,nr],_t=xe[0],pt=xe[1],zt=xe[2];break}}return[_t,pt,zt,he.length>3?he[3]:1]},Up=Su,$p=A.unpack,Jp=A.type,c0=Z,ju=X,Gp=C,Xp=s0;ju.prototype.hsv=function(){return Xp(this._rgb)},c0.hsv=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];return new(Function.prototype.bind.apply(ju,[null].concat(D,["hsv"])))},Gp.format.hsv=Up,Gp.autodetect.push({p:2,test:function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];if(D=$p(D,"hsv"),Jp(D)==="array"&&D.length===3)return"hsv"}});var Kp={Kn:18,Xn:.95047,Yn:1,Zn:1.08883,t0:.137931034,t1:.206896552,t2:.12841855,t3:.008856452},fo=Kp,Tc=A.unpack,Yp=Math.pow,Qp=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];var Q=Tc(D,"rgb"),fe=Q[0],ve=Q[1],xe=Q[2],he=Pm(fe,ve,xe),Ce=he[0],Le=he[1],Xe=he[2],nt=116*Le-16;return[nt<0?0:nt,500*(Ce-Le),200*(Le-Xe)]},Nl=function(D){return(D/=255)<=.04045?D/12.92:Yp((D+.055)/1.055,2.4)},Zp=function(D){return D>fo.t3?Yp(D,1/3):D/fo.t2+fo.t0},Pm=function(D,U,Q){D=Nl(D),U=Nl(U),Q=Nl(Q);var fe=Zp((.4124564*D+.3575761*U+.1804375*Q)/fo.Xn),ve=Zp((.2126729*D+.7151522*U+.072175*Q)/fo.Yn),xe=Zp((.0193339*D+.119192*U+.9503041*Q)/fo.Zn);return[fe,ve,xe]},Fl=Qp,ui=Kp,Em=A.unpack,Cm=Math.pow,Am=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];D=Em(D,"lab");var Q=D[0],fe=D[1],ve=D[2],xe,he,Ce,Le,Xe,nt;return he=(Q+16)/116,xe=isNaN(fe)?he:he+fe/500,Ce=isNaN(ve)?he:he-ve/200,he=ui.Yn*Wl(he),xe=ui.Xn*Wl(xe),Ce=ui.Zn*Wl(Ce),Le=ks(3.2404542*xe-1.5371385*he-.4985314*Ce),Xe=ks(-.969266*xe+1.8760108*he+.041556*Ce),nt=ks(.0556434*xe-.2040259*he+1.0572252*Ce),[Le,Xe,nt,D.length>3?D[3]:1]},ks=function(D){return 255*(D<=.00304?12.92*D:1.055*Cm(D,1/2.4)-.055)},Wl=function(D){return D>ui.t1?D*D*D:ui.t2*(D-ui.t0)},p0=Am,f0=A.unpack,d0=A.type,Mm=Z,m0=X,Rc=C,Tm=Fl;m0.prototype.lab=function(){return Tm(this._rgb)},Mm.lab=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];return new(Function.prototype.bind.apply(m0,[null].concat(D,["lab"])))},Rc.format.lab=p0,Rc.autodetect.push({p:2,test:function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];if(D=f0(D,"lab"),d0(D)==="array"&&D.length===3)return"lab"}});var Rm=A.unpack,Gr=A.RAD2DEG,zc=Math.sqrt,Ps=Math.atan2,zm=Math.round,h0=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];var Q=Rm(D,"lab"),fe=Q[0],ve=Q[1],xe=Q[2],he=zc(ve*ve+xe*xe),Ce=(Ps(xe,ve)*Gr+360)%360;return zm(he*1e4)===0&&(Ce=Number.NaN),[fe,he,Ce]},g0=h0,Lm=A.unpack,Lc=Fl,Yi=g0,ln=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];var Q=Lm(D,"rgb"),fe=Q[0],ve=Q[1],xe=Q[2],he=Lc(fe,ve,xe),Ce=he[0],Le=he[1],Xe=he[2];return Yi(Ce,Le,Xe)},Ly=ln,Qi=A.unpack,Dm=A.DEG2RAD,ef=Math.sin,Nm=Math.cos,Iu=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];var Q=Qi(D,"lch"),fe=Q[0],ve=Q[1],xe=Q[2];return isNaN(xe)&&(xe=0),xe=xe*Dm,[fe,Nm(xe)*ve,ef(xe)*ve]},v0=Iu,Dc=A.unpack,Nc=v0,y0=p0,Fm=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];D=Dc(D,"lch");var Q=D[0],fe=D[1],ve=D[2],xe=Nc(Q,fe,ve),he=xe[0],Ce=xe[1],Le=xe[2],Xe=y0(he,Ce,Le),nt=Xe[0],_t=Xe[1],pt=Xe[2];return[nt,_t,pt,D.length>3?D[3]:1]},b0=Fm,Wm=A.unpack,Bm=b0,Dy=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];var Q=Wm(D,"hcl").reverse();return Bm.apply(void 0,Q)},Hm=Dy,tf=A.unpack,Ny=A.type,w0=Z,rf=X,xa=C,Vm=Ly;rf.prototype.lch=function(){return Vm(this._rgb)},rf.prototype.hcl=function(){return Vm(this._rgb).reverse()},w0.lch=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];return new(Function.prototype.bind.apply(rf,[null].concat(D,["lch"])))},w0.hcl=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];return new(Function.prototype.bind.apply(rf,[null].concat(D,["hcl"])))},xa.format.lch=b0,xa.format.hcl=Hm,["lch","hcl"].forEach(function(D){return xa.autodetect.push({p:2,test:function(){for(var U=[],Q=arguments.length;Q--;)U[Q]=arguments[Q];if(U=tf(U,D),Ny(U)==="array"&&U.length===3)return D}})});var Xr={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflower:"#6495ed",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",laserlemon:"#ffff54",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrod:"#fafad2",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",maroon2:"#7f0000",maroon3:"#b03060",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",purple2:"#7f007f",purple3:"#a020f0",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},qm=Xr,O0=X,Um=C,Fy=A.type,Bl=qm,ku=xm,$m=po;O0.prototype.name=function(){for(var D=$m(this._rgb,"rgb"),U=0,Q=Object.keys(Bl);U0;)U[Q]=arguments[Q+1];if(!U.length&&Fy(D)==="string"&&Bl[D.toLowerCase()])return"named"}});var xi=A.unpack,Jm=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];var Q=xi(D,"rgb"),fe=Q[0],ve=Q[1],xe=Q[2];return(fe<<16)+(ve<<8)+xe},sn=Jm,Wy=A.type,By=function(D){if(Wy(D)=="number"&&D>=0&&D<=16777215){var U=D>>16,Q=D>>8&255,fe=D&255;return[U,Q,fe,1]}throw new Error("unknown num color: "+D)},Gm=By,Hy=Z,Fc=X,Wc=C,$a=A.type,Pu=sn;Fc.prototype.num=function(){return Pu(this._rgb)},Hy.num=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];return new(Function.prototype.bind.apply(Fc,[null].concat(D,["num"])))},Wc.format.num=Gm,Wc.autodetect.push({p:5,test:function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];if(D.length===1&&$a(D[0])==="number"&&D[0]>=0&&D[0]<=16777215)return"num"}});var Vy=Z,Eu=X,Hl=C,Bc=A.unpack,nf=A.type,Xm=Math.round;Eu.prototype.rgb=function(D){return D===void 0&&(D=!0),D===!1?this._rgb.slice(0,3):this._rgb.slice(0,3).map(Xm)},Eu.prototype.rgba=function(D){return D===void 0&&(D=!0),this._rgb.slice(0,4).map(function(U,Q){return Q<3?D===!1?U:Xm(U):U})},Vy.rgb=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];return new(Function.prototype.bind.apply(Eu,[null].concat(D,["rgb"])))},Hl.format.rgb=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];var Q=Bc(D,"rgba");return Q[3]===void 0&&(Q[3]=1),Q},Hl.autodetect.push({p:3,test:function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];if(D=Bc(D,"rgba"),nf(D)==="array"&&(D.length===3||D.length===4&&nf(D[3])=="number"&&D[3]>=0&&D[3]<=1))return"rgb"}});var Hc=Math.log,of=function(D){var U=D/100,Q,fe,ve;return U<66?(Q=255,fe=U<6?0:-155.25485562709179-.44596950469579133*(fe=U-2)+104.49216199393888*Hc(fe),ve=U<20?0:-254.76935184120902+.8274096064007395*(ve=U-10)+115.67994401066147*Hc(ve)):(Q=351.97690566805693+.114206453784165*(Q=U-55)-40.25366309332127*Hc(Q),fe=325.4494125711974+.07943456536662342*(fe=U-50)-28.0852963507957*Hc(fe),ve=255),[Q,fe,ve,1]},Vc=of,Cu=Vc,x0=A.unpack,_0=Math.round,Km=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];for(var Q=x0(D,"rgb"),fe=Q[0],ve=Q[2],xe=1e3,he=4e4,Ce=.4,Le;he-xe>Ce;){Le=(he+xe)*.5;var Xe=Cu(Le);Xe[2]/Xe[0]>=ve/fe?he=Le:xe=Le}return _0(Le)},qy=Km,S0=Z,qc=X,j0=C,Ym=qy;qc.prototype.temp=qc.prototype.kelvin=qc.prototype.temperature=function(){return Ym(this._rgb)},S0.temp=S0.kelvin=S0.temperature=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];return new(Function.prototype.bind.apply(qc,[null].concat(D,["temp"])))},j0.format.temp=j0.format.kelvin=j0.format.temperature=Vc;var I0=A.unpack,k0=Math.cbrt,af=Math.pow,Qm=Math.sign,Uy=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];var Q=I0(D,"rgb"),fe=Q[0],ve=Q[1],xe=Q[2],he=[Ai(fe/255),Ai(ve/255),Ai(xe/255)],Ce=he[0],Le=he[1],Xe=he[2],nt=k0(.4122214708*Ce+.5363325363*Le+.0514459929*Xe),_t=k0(.2119034982*Ce+.6806995451*Le+.1073969566*Xe),pt=k0(.0883024619*Ce+.2817188376*Le+.6299787005*Xe);return[.2104542553*nt+.793617785*_t-.0040720468*pt,1.9779984951*nt-2.428592205*_t+.4505937099*pt,.0259040371*nt+.7827717662*_t-.808675766*pt]},Zm=Uy;function Ai(D){var U=Math.abs(D);return U<.04045?D/12.92:(Qm(D)||1)*af((U+.055)/1.055,2.4)}var Es=A.unpack,Au=Math.pow,$y=Math.sign,eh=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];D=Es(D,"lab");var Q=D[0],fe=D[1],ve=D[2],xe=Au(Q+.3963377774*fe+.2158037573*ve,3),he=Au(Q-.1055613458*fe-.0638541728*ve,3),Ce=Au(Q-.0894841775*fe-1.291485548*ve,3);return[255*P0(4.0767416621*xe-3.3077115913*he+.2309699292*Ce),255*P0(-1.2684380046*xe+2.6097574011*he-.3413193965*Ce),255*P0(-.0041960863*xe-.7034186147*he+1.707614701*Ce),D.length>3?D[3]:1]},Uc=eh;function P0(D){var U=Math.abs(D);return U>.0031308?($y(D)||1)*(1.055*Au(U,1/2.4)-.055):D*12.92}var lf=A.unpack,E0=A.type,th=Z,rh=X,hl=C,C0=Zm;rh.prototype.oklab=function(){return C0(this._rgb)},th.oklab=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];return new(Function.prototype.bind.apply(rh,[null].concat(D,["oklab"])))},hl.format.oklab=Uc,hl.autodetect.push({p:3,test:function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];if(D=lf(D,"oklab"),E0(D)==="array"&&D.length===3)return"oklab"}});var nh=A.unpack,oh=Zm,ih=g0,Jy=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];var Q=nh(D,"rgb"),fe=Q[0],ve=Q[1],xe=Q[2],he=oh(fe,ve,xe),Ce=he[0],Le=he[1],Xe=he[2];return ih(Ce,Le,Xe)},Gy=Jy,Xy=A.unpack,Ky=v0,Nn=Uc,tS=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];D=Xy(D,"lch");var Q=D[0],fe=D[1],ve=D[2],xe=Ky(Q,fe,ve),he=xe[0],Ce=xe[1],Le=xe[2],Xe=Nn(he,Ce,Le),nt=Xe[0],_t=Xe[1],pt=Xe[2];return[nt,_t,pt,D.length>3?D[3]:1]},rS=tS,A0=A.unpack,Yy=A.type,ah=Z,lh=X,M0=C,Qy=Gy;lh.prototype.oklch=function(){return Qy(this._rgb)},ah.oklch=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];return new(Function.prototype.bind.apply(lh,[null].concat(D,["oklch"])))},M0.format.oklch=rS,M0.autodetect.push({p:3,test:function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];if(D=A0(D,"oklch"),Yy(D)==="array"&&D.length===3)return"oklch"}});var sh=X,Zy=A.type;sh.prototype.alpha=function(D,U){return U===void 0&&(U=!1),D!==void 0&&Zy(D)==="number"?U?(this._rgb[3]=D,this):new sh([this._rgb[0],this._rgb[1],this._rgb[2],D],"rgb"):this._rgb[3]};var e2=X;e2.prototype.clipped=function(){return this._rgb._clipped||!1};var Ja=X,uh=Kp;Ja.prototype.darken=function(D){D===void 0&&(D=1);var U=this,Q=U.lab();return Q[0]-=uh.Kn*D,new Ja(Q,"lab").alpha(U.alpha(),!0)},Ja.prototype.brighten=function(D){return D===void 0&&(D=1),this.darken(-D)},Ja.prototype.darker=Ja.prototype.darken,Ja.prototype.brighter=Ja.prototype.brighten;var ch=X;ch.prototype.get=function(D){var U=D.split("."),Q=U[0],fe=U[1],ve=this[Q]();if(fe){var xe=Q.indexOf(fe)-(Q.substr(0,2)==="ok"?2:0);if(xe>-1)return ve[xe];throw new Error("unknown channel "+fe+" in mode "+Q)}else return ve};var Ga=X,Mu=A.type,sf=Math.pow,ph=1e-7,Cs=20;Ga.prototype.luminance=function(D){if(D!==void 0&&Mu(D)==="number"){if(D===0)return new Ga([0,0,0,this._rgb[3]],"rgb");if(D===1)return new Ga([255,255,255,this._rgb[3]],"rgb");var U=this.luminance(),Q="rgb",fe=Cs,ve=function(he,Ce){var Le=he.interpolate(Ce,.5,Q),Xe=Le.luminance();return Math.abs(D-Xe)D?ve(he,Le):ve(Le,Ce)},xe=(U>D?ve(new Ga([0,0,0]),this):ve(this,new Ga([255,255,255]))).rgb();return new Ga(xe.concat([this._rgb[3]]))}return Yo.apply(void 0,this._rgb.slice(0,3))};var Yo=function(D,U,Q){return D=ci(D),U=ci(U),Q=ci(Q),.2126*D+.7152*U+.0722*Q},ci=function(D){return D/=255,D<=.03928?D/12.92:sf((D+.055)/1.055,2.4)},mo={},Xa=X,Vl=A.type,gl=mo,As=function(D,U,Q){Q===void 0&&(Q=.5);for(var fe=[],ve=arguments.length-3;ve-- >0;)fe[ve]=arguments[ve+3];var xe=fe[0]||"lrgb";if(!gl[xe]&&!fe.length&&(xe=Object.keys(gl)[0]),!gl[xe])throw new Error("interpolation mode "+xe+" is not defined");return Vl(D)!=="object"&&(D=new Xa(D)),Vl(U)!=="object"&&(U=new Xa(U)),gl[xe](D,U,Q).alpha(D.alpha()+Q*(U.alpha()-D.alpha()))},fh=X,dh=As;fh.prototype.mix=fh.prototype.interpolate=function(D,U){U===void 0&&(U=.5);for(var Q=[],fe=arguments.length-2;fe-- >0;)Q[fe]=arguments[fe+2];return dh.apply(void 0,[this,D,U].concat(Q))};var T0=X;T0.prototype.premultiply=function(D){D===void 0&&(D=!1);var U=this._rgb,Q=U[3];return D?(this._rgb=[U[0]*Q,U[1]*Q,U[2]*Q,Q],this):new T0([U[0]*Q,U[1]*Q,U[2]*Q,Q],"rgb")};var $c=X,R0=Kp;$c.prototype.saturate=function(D){D===void 0&&(D=1);var U=this,Q=U.lch();return Q[1]+=R0.Kn*D,Q[1]<0&&(Q[1]=0),new $c(Q,"lch").alpha(U.alpha(),!0)},$c.prototype.desaturate=function(D){return D===void 0&&(D=1),this.saturate(-D)};var vl=X,uf=A.type;vl.prototype.set=function(D,U,Q){Q===void 0&&(Q=!1);var fe=D.split("."),ve=fe[0],xe=fe[1],he=this[ve]();if(xe){var Ce=ve.indexOf(xe)-(ve.substr(0,2)==="ok"?2:0);if(Ce>-1){if(uf(U)=="string")switch(U.charAt(0)){case"+":he[Ce]+=+U;break;case"-":he[Ce]+=+U;break;case"*":he[Ce]*=+U.substr(1);break;case"/":he[Ce]/=+U.substr(1);break;default:he[Ce]=+U}else if(uf(U)==="number")he[Ce]=U;else throw new Error("unsupported value for Color.set");var Le=new vl(he,ve);return Q?(this._rgb=Le._rgb,this):Le}throw new Error("unknown channel "+xe+" in mode "+ve)}else return he};var z0=X,t2=function(D,U,Q){var fe=D._rgb,ve=U._rgb;return new z0(fe[0]+Q*(ve[0]-fe[0]),fe[1]+Q*(ve[1]-fe[1]),fe[2]+Q*(ve[2]-fe[2]),"rgb")};mo.rgb=t2;var L0=X,Zi=Math.sqrt,Tu=Math.pow,D0=function(D,U,Q){var fe=D._rgb,ve=fe[0],xe=fe[1],he=fe[2],Ce=U._rgb,Le=Ce[0],Xe=Ce[1],nt=Ce[2];return new L0(Zi(Tu(ve,2)*(1-Q)+Tu(Le,2)*Q),Zi(Tu(xe,2)*(1-Q)+Tu(Xe,2)*Q),Zi(Tu(he,2)*(1-Q)+Tu(nt,2)*Q),"rgb")};mo.lrgb=D0;var N0=X,cf=function(D,U,Q){var fe=D.lab(),ve=U.lab();return new N0(fe[0]+Q*(ve[0]-fe[0]),fe[1]+Q*(ve[1]-fe[1]),fe[2]+Q*(ve[2]-fe[2]),"lab")};mo.lab=cf;var pf=X,Ms=function(D,U,Q,fe){var ve,xe,he,Ce;fe==="hsl"?(he=D.hsl(),Ce=U.hsl()):fe==="hsv"?(he=D.hsv(),Ce=U.hsv()):fe==="hcg"?(he=D.hcg(),Ce=U.hcg()):fe==="hsi"?(he=D.hsi(),Ce=U.hsi()):fe==="lch"||fe==="hcl"?(fe="hcl",he=D.hcl(),Ce=U.hcl()):fe==="oklch"&&(he=D.oklch().reverse(),Ce=U.oklch().reverse());var Le,Xe,nt,_t,pt,zt;(fe.substr(0,1)==="h"||fe==="oklch")&&(ve=he,Le=ve[0],nt=ve[1],pt=ve[2],xe=Ce,Xe=xe[0],_t=xe[1],zt=xe[2]);var Lt,jr,Nr,nr;return!isNaN(Le)&&!isNaN(Xe)?(Xe>Le&&Xe-Le>180?nr=Xe-(Le+360):Xe180?nr=Xe+360-Le:nr=Xe-Le,jr=Le+Q*nr):isNaN(Le)?isNaN(Xe)?jr=Number.NaN:(jr=Xe,(pt==1||pt==0)&&fe!="hsv"&&(Lt=_t)):(jr=Le,(zt==1||zt==0)&&fe!="hsv"&&(Lt=nt)),Lt===void 0&&(Lt=nt+Q*(_t-nt)),Nr=pt+Q*(zt-pt),fe==="oklch"?new pf([Nr,Lt,jr],fe):new pf([jr,Lt,Nr],fe)},F0=Ms,ff=function(D,U,Q){return F0(D,U,Q,"lch")};mo.lch=ff,mo.hcl=ff;var df=X,mh=function(D,U,Q){var fe=D.num(),ve=U.num();return new df(fe+Q*(ve-fe),"num")};mo.num=mh;var Ru=Ms,zu=function(D,U,Q){return Ru(D,U,Q,"hcg")};mo.hcg=zu;var hh=Ms,ql=function(D,U,Q){return hh(D,U,Q,"hsi")};mo.hsi=ql;var W0=Ms,B0=function(D,U,Q){return W0(D,U,Q,"hsl")};mo.hsl=B0;var r2=Ms,gh=function(D,U,Q){return r2(D,U,Q,"hsv")};mo.hsv=gh;var vh=X,yh=function(D,U,Q){var fe=D.oklab(),ve=U.oklab();return new vh(fe[0]+Q*(ve[0]-fe[0]),fe[1]+Q*(ve[1]-fe[1]),fe[2]+Q*(ve[2]-fe[2]),"oklab")};mo.oklab=yh;var Jc=Ms,mf=function(D,U,Q){return Jc(D,U,Q,"oklch")};mo.oklch=mf;var H0=X,n2=A.clip_rgb,hf=Math.pow,_a=Math.sqrt,Gc=Math.PI,Cn=Math.cos,bh=Math.sin,Lu=Math.atan2,ut=function(D,U,Q){U===void 0&&(U="lrgb"),Q===void 0&&(Q=null);var fe=D.length;Q||(Q=Array.from(new Array(fe)).map(function(){return 1}));var ve=fe/Q.reduce(function(jr,Nr){return jr+Nr});if(Q.forEach(function(jr,Nr){Q[Nr]*=ve}),D=D.map(function(jr){return new H0(jr)}),U==="lrgb")return V0(D,Q);for(var xe=D.shift(),he=xe.get(U),Ce=[],Le=0,Xe=0,nt=0;nt=360;)Lt-=360;he[zt]=Lt}else he[zt]=he[zt]/Ce[zt];return pt/=fe,new H0(he,U).alpha(pt>.99999?1:pt,!0)},V0=function(D,U){for(var Q=D.length,fe=[0,0,0,0],ve=0;ve.9999999&&(fe[3]=1),new H0(n2(fe))},pi=Z,Sa=A.type,Zr=Math.pow,jo=function(D){var U="rgb",Q=pi("#ccc"),fe=0,ve=[0,1],xe=[],he=[0,0],Ce=!1,Le=[],Xe=!1,nt=0,_t=1,pt=!1,zt={},Lt=!0,jr=1,Nr=function(ct){if(ct=ct||["#fff","#000"],ct&&Sa(ct)==="string"&&pi.brewer&&pi.brewer[ct.toLowerCase()]&&(ct=pi.brewer[ct.toLowerCase()]),Sa(ct)==="array"){ct.length===1&&(ct=[ct[0],ct[0]]),ct=ct.slice(0);for(var Qt=0;Qt=Ce[Mr];)Mr++;return Mr-1}return 0},Kr=function(ct){return ct},fi=function(ct){return ct},Io=function(ct,Qt){var Mr,Tr;if(Qt==null&&(Qt=!1),isNaN(ct)||ct===null)return Q;if(Qt)Tr=ct;else if(Ce&&Ce.length>2){var Ir=nr(ct);Tr=Ir/(Ce.length-2)}else _t!==nt?Tr=(ct-nt)/(_t-nt):Tr=1;Tr=fi(Tr),Qt||(Tr=Kr(Tr)),jr!==1&&(Tr=Zr(Tr,jr)),Tr=he[0]+Tr*(1-he[0]-he[1]),Tr=Math.min(1,Math.max(0,Tr));var Fn=Math.floor(Tr*1e4);if(Lt&&zt[Fn])Mr=zt[Fn];else{if(Sa(Le)==="array")for(var Yr=0;Yr=nn&&Yr===xe.length-1){Mr=Le[Yr];break}if(Tr>nn&&Tr2){var Yr=ct.map(function(bn,_n){return _n/(ct.length-1)}),nn=ct.map(function(bn){return(bn-nt)/(_t-nt)});nn.every(function(bn,_n){return Yr[_n]===bn})||(fi=function(bn){if(bn<=0||bn>=1)return bn;for(var _n=0;bn>=nn[_n+1];)_n++;var wl=(bn-nn[_n])/(nn[_n+1]-nn[_n]),Wn=Yr[_n]+wl*(Yr[_n+1]-Yr[_n]);return Wn})}}return ve=[nt,_t],qr},qr.mode=function(ct){return arguments.length?(U=ct,_i(),qr):U},qr.range=function(ct,Qt){return Nr(ct),qr},qr.out=function(ct){return Xe=ct,qr},qr.spread=function(ct){return arguments.length?(fe=ct,qr):fe},qr.correctLightness=function(ct){return ct==null&&(ct=!0),pt=ct,_i(),pt?Kr=function(Qt){for(var Mr=Io(0,!0).lab()[0],Tr=Io(1,!0).lab()[0],Ir=Mr>Tr,Fn=Io(Qt,!0).lab()[0],Yr=Mr+(Tr-Mr)*Qt,nn=Fn-Yr,bn=0,_n=1,wl=20;Math.abs(nn)>.01&&wl-- >0;)(function(){return Ir&&(nn*=-1),nn<0?(bn=Qt,Qt+=(_n-Qt)*.5):(_n=Qt,Qt+=(bn-Qt)*.5),Fn=Io(Qt,!0).lab()[0],nn=Fn-Yr})();return Qt}:Kr=function(Qt){return Qt},qr},qr.padding=function(ct){return ct!=null?(Sa(ct)==="number"&&(ct=[ct,ct]),he=ct,qr):he},qr.colors=function(ct,Qt){arguments.length<2&&(Qt="hex");var Mr=[];if(arguments.length===0)Mr=Le.slice(0);else if(ct===1)Mr=[qr(.5)];else if(ct>1){var Tr=ve[0],Ir=ve[1]-Tr;Mr=wh(0,ct,!1).map(function(_n){return qr(Tr+_n/(ct-1)*Ir)})}else{D=[];var Fn=[];if(Ce&&Ce.length>2)for(var Yr=1,nn=Ce.length,bn=1<=nn;bn?Yrnn;bn?Yr++:Yr--)Fn.push((Ce[Yr-1]+Ce[Yr])*.5);else Fn=ve;Mr=Fn.map(function(_n){return qr(_n)})}return pi[Qt]&&(Mr=Mr.map(function(_n){return _n[Qt]()})),Mr},qr.cache=function(ct){return ct!=null?(Lt=ct,qr):Lt},qr.gamma=function(ct){return ct!=null?(jr=ct,qr):jr},qr.nodata=function(ct){return ct!=null?(Q=pi(ct),qr):Q},qr};function wh(D,U,Q){for(var fe=[],ve=Dxe;ve?he++:he--)fe.push(he);return fe}var Du=X,nS=jo,oS=function(D){for(var U=[1,1],Q=1;Q=5){var Xe,nt,_t;Xe=D.map(function(pt){return pt.lab()}),_t=D.length-1,nt=oS(_t),ve=function(pt){var zt=1-pt,Lt=[0,1,2].map(function(jr){return Xe.reduce(function(Nr,nr,Kr){return Nr+nt[Kr]*Math.pow(zt,_t-Kr)*Math.pow(pt,Kr)*nr[jr]},0)});return new Du(Lt,"lab")}}else throw new RangeError("No point in running bezier with only one color.");return ve},aS=function(D){var U=iS(D);return U.scale=function(){return nS(U)},U},Oh=Z,ho=function(D,U,Q){if(!ho[Q])throw new Error("unknown blend mode "+Q);return ho[Q](D,U)},ea=function(D){return function(U,Q){var fe=Oh(Q).rgb(),ve=Oh(U).rgb();return Oh.rgb(D(fe,ve))}},yl=function(D){return function(U,Q){var fe=[];return fe[0]=D(U[0],Q[0]),fe[1]=D(U[1],Q[1]),fe[2]=D(U[2],Q[2]),fe}},o2=function(D){return D},i2=function(D,U){return D*U/255},q0=function(D,U){return D>U?U:D},xh=function(D,U){return D>U?D:U},Do=function(D,U){return 255*(1-(1-D/255)*(1-U/255))},gf=function(D,U){return U<128?2*D*U/255:255*(1-2*(1-D/255)*(1-U/255))},U0=function(D,U){return 255*(1-(1-U/255)/(D/255))},ta=function(D,U){return D===255?255:(D=255*(U/255)/(1-D/255),D>255?255:D)};ho.normal=ea(yl(o2)),ho.multiply=ea(yl(i2)),ho.screen=ea(yl(Do)),ho.overlay=ea(yl(gf)),ho.darken=ea(yl(q0)),ho.lighten=ea(yl(xh)),ho.dodge=ea(yl(ta)),ho.burn=ea(yl(U0));for(var _h=ho,vf=A.type,a2=A.clip_rgb,l2=A.TWOPI,yf=Math.pow,s2=Math.sin,Sh=Math.cos,$0=Z,jh=function(D,U,Q,fe,ve){D===void 0&&(D=300),U===void 0&&(U=-1.5),Q===void 0&&(Q=1),fe===void 0&&(fe=1),ve===void 0&&(ve=[0,1]);var xe=0,he;vf(ve)==="array"?he=ve[1]-ve[0]:(he=0,ve=[ve,ve]);var Ce=function(Le){var Xe=l2*((D+120)/360+U*Le),nt=yf(ve[0]+he*Le,fe),_t=xe!==0?Q[0]+Le*xe:Q,pt=_t*nt*(1-nt)/2,zt=Sh(Xe),Lt=s2(Xe),jr=nt+pt*(-.14861*zt+1.78277*Lt),Nr=nt+pt*(-.29227*zt-.90649*Lt),nr=nt+pt*(1.97294*zt);return $0(a2([jr*255,Nr*255,nr*255,1]))};return Ce.start=function(Le){return Le==null?D:(D=Le,Ce)},Ce.rotations=function(Le){return Le==null?U:(U=Le,Ce)},Ce.gamma=function(Le){return Le==null?fe:(fe=Le,Ce)},Ce.hue=function(Le){return Le==null?Q:(Q=Le,vf(Q)==="array"?(xe=Q[1]-Q[0],xe===0&&(Q=Q[1])):xe=0,Ce)},Ce.lightness=function(Le){return Le==null?ve:(vf(Le)==="array"?(ve=Le,he=Le[1]-Le[0]):(ve=[Le,Le],he=0),Ce)},Ce.scale=function(){return $0.scale(Ce)},Ce.hue(Q),Ce},Ih=X,u2="0123456789abcdef",Nu=Math.floor,Ts=Math.random,c2=function(){for(var D="#",U=0;U<6;U++)D+=u2.charAt(Nu(Ts()*16));return new Ih(D,"hex")},J0=f,G0=Math.log,p2=Math.pow,f2=Math.floor,kh=Math.abs,bl=function(D,U){U===void 0&&(U=null);var Q={min:Number.MAX_VALUE,max:Number.MAX_VALUE*-1,sum:0,values:[],count:0};return J0(D)==="object"&&(D=Object.values(D)),D.forEach(function(fe){U&&J0(fe)==="object"&&(fe=fe[U]),fe!=null&&!isNaN(fe)&&(Q.values.push(fe),Q.sum+=fe,feQ.max&&(Q.max=fe),Q.count+=1)}),Q.domain=[Q.min,Q.max],Q.limits=function(fe,ve){return bf(Q,fe,ve)},Q},bf=function(D,U,Q){U===void 0&&(U="equal"),Q===void 0&&(Q=7),J0(D)=="array"&&(D=bl(D));var fe=D.min,ve=D.max,xe=D.values.sort(function(X0,Eh){return X0-Eh});if(Q===1)return[fe,ve];var he=[];if(U.substr(0,1)==="c"&&(he.push(fe),he.push(ve)),U.substr(0,1)==="e"){he.push(fe);for(var Ce=1;Ce 0");var Le=Math.LOG10E*G0(fe),Xe=Math.LOG10E*G0(ve);he.push(fe);for(var nt=1;nt200&&(fi=!1)}for(var Fu={},Si=0;Sife?(Q+.05)/(fe+.05):(fe+.05)/(Q+.05)},Ph=X,yn=Math.sqrt,go=Math.pow,d2=Math.min,Xc=Math.max,zs=Math.atan2,Kc=Math.abs,Sr=Math.cos,g=Math.sin,j=Math.exp,F=Math.PI,q=function(D,U,Q,fe,ve){Q===void 0&&(Q=1),fe===void 0&&(fe=1),ve===void 0&&(ve=1);var xe=function(Qc){return 360*Qc/(2*F)},he=function(Qc){return 2*F*Qc/360};D=new Ph(D),U=new Ph(U);var Ce=Array.from(D.lab()),Le=Ce[0],Xe=Ce[1],nt=Ce[2],_t=Array.from(U.lab()),pt=_t[0],zt=_t[1],Lt=_t[2],jr=(Le+pt)/2,Nr=yn(go(Xe,2)+go(nt,2)),nr=yn(go(zt,2)+go(Lt,2)),Kr=(Nr+nr)/2,fi=.5*(1-yn(go(Kr,7)/(go(Kr,7)+go(25,7)))),Io=Xe*(1+fi),_i=zt*(1+fi),qr=yn(go(Io,2)+go(nt,2)),ct=yn(go(_i,2)+go(Lt,2)),Qt=(qr+ct)/2,Mr=xe(zs(nt,Io)),Tr=xe(zs(Lt,_i)),Ir=Mr>=0?Mr:Mr+360,Fn=Tr>=0?Tr:Tr+360,Yr=Kc(Ir-Fn)>180?(Ir+Fn+360)/2:(Ir+Fn)/2,nn=1-.17*Sr(he(Yr-30))+.24*Sr(he(2*Yr))+.32*Sr(he(3*Yr+6))-.2*Sr(he(4*Yr-63)),bn=Fn-Ir;bn=Kc(bn)<=180?bn:Fn<=Ir?bn+360:bn-360,bn=2*yn(qr*ct)*g(he(bn)/2);var _n=pt-Le,wl=ct-qr,Wn=1+.015*go(jr-50,2)/yn(20+go(jr-50,2)),Fu=1+.045*Qt,Si=1+.015*Qt*nn,Yc=30*j(-go((Yr-275)/25,2)),Ls=2*yn(go(Qt,7)/(go(Qt,7)+go(25,7))),Wu=-Ls*g(2*he(Yc)),wf=yn(go(_n/(Q*Wn),2)+go(wl/(fe*Fu),2)+go(bn/(ve*Si),2)+Wu*(wl/(fe*Fu))*(bn/(ve*Si)));return Xc(0,d2(100,wf))},te=X,ge=function(D,U,Q){Q===void 0&&(Q="lab"),D=new te(D),U=new te(U);var fe=D.get(Q),ve=U.get(Q),xe=0;for(var he in fe){var Ce=(fe[he]||0)-(ve[he]||0);xe+=Ce*Ce}return Math.sqrt(xe)},He=X,jt=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];try{return new(Function.prototype.bind.apply(He,[null].concat(D))),!0}catch{return!1}},er=Z,Ar=jo,No={cool:function(){return Ar([er.hsl(180,1,.9),er.hsl(250,.7,.4)])},hot:function(){return Ar(["#000","#f00","#ff0","#fff"]).mode("rgb")}},Mi={OrRd:["#fff7ec","#fee8c8","#fdd49e","#fdbb84","#fc8d59","#ef6548","#d7301f","#b30000","#7f0000"],PuBu:["#fff7fb","#ece7f2","#d0d1e6","#a6bddb","#74a9cf","#3690c0","#0570b0","#045a8d","#023858"],BuPu:["#f7fcfd","#e0ecf4","#bfd3e6","#9ebcda","#8c96c6","#8c6bb1","#88419d","#810f7c","#4d004b"],Oranges:["#fff5eb","#fee6ce","#fdd0a2","#fdae6b","#fd8d3c","#f16913","#d94801","#a63603","#7f2704"],BuGn:["#f7fcfd","#e5f5f9","#ccece6","#99d8c9","#66c2a4","#41ae76","#238b45","#006d2c","#00441b"],YlOrBr:["#ffffe5","#fff7bc","#fee391","#fec44f","#fe9929","#ec7014","#cc4c02","#993404","#662506"],YlGn:["#ffffe5","#f7fcb9","#d9f0a3","#addd8e","#78c679","#41ab5d","#238443","#006837","#004529"],Reds:["#fff5f0","#fee0d2","#fcbba1","#fc9272","#fb6a4a","#ef3b2c","#cb181d","#a50f15","#67000d"],RdPu:["#fff7f3","#fde0dd","#fcc5c0","#fa9fb5","#f768a1","#dd3497","#ae017e","#7a0177","#49006a"],Greens:["#f7fcf5","#e5f5e0","#c7e9c0","#a1d99b","#74c476","#41ab5d","#238b45","#006d2c","#00441b"],YlGnBu:["#ffffd9","#edf8b1","#c7e9b4","#7fcdbb","#41b6c4","#1d91c0","#225ea8","#253494","#081d58"],Purples:["#fcfbfd","#efedf5","#dadaeb","#bcbddc","#9e9ac8","#807dba","#6a51a3","#54278f","#3f007d"],GnBu:["#f7fcf0","#e0f3db","#ccebc5","#a8ddb5","#7bccc4","#4eb3d3","#2b8cbe","#0868ac","#084081"],Greys:["#ffffff","#f0f0f0","#d9d9d9","#bdbdbd","#969696","#737373","#525252","#252525","#000000"],YlOrRd:["#ffffcc","#ffeda0","#fed976","#feb24c","#fd8d3c","#fc4e2a","#e31a1c","#bd0026","#800026"],PuRd:["#f7f4f9","#e7e1ef","#d4b9da","#c994c7","#df65b0","#e7298a","#ce1256","#980043","#67001f"],Blues:["#f7fbff","#deebf7","#c6dbef","#9ecae1","#6baed6","#4292c6","#2171b5","#08519c","#08306b"],PuBuGn:["#fff7fb","#ece2f0","#d0d1e6","#a6bddb","#67a9cf","#3690c0","#02818a","#016c59","#014636"],Viridis:["#440154","#482777","#3f4a8a","#31678e","#26838f","#1f9d8a","#6cce5a","#b6de2b","#fee825"],Spectral:["#9e0142","#d53e4f","#f46d43","#fdae61","#fee08b","#ffffbf","#e6f598","#abdda4","#66c2a5","#3288bd","#5e4fa2"],RdYlGn:["#a50026","#d73027","#f46d43","#fdae61","#fee08b","#ffffbf","#d9ef8b","#a6d96a","#66bd63","#1a9850","#006837"],RdBu:["#67001f","#b2182b","#d6604d","#f4a582","#fddbc7","#f7f7f7","#d1e5f0","#92c5de","#4393c3","#2166ac","#053061"],PiYG:["#8e0152","#c51b7d","#de77ae","#f1b6da","#fde0ef","#f7f7f7","#e6f5d0","#b8e186","#7fbc41","#4d9221","#276419"],PRGn:["#40004b","#762a83","#9970ab","#c2a5cf","#e7d4e8","#f7f7f7","#d9f0d3","#a6dba0","#5aae61","#1b7837","#00441b"],RdYlBu:["#a50026","#d73027","#f46d43","#fdae61","#fee090","#ffffbf","#e0f3f8","#abd9e9","#74add1","#4575b4","#313695"],BrBG:["#543005","#8c510a","#bf812d","#dfc27d","#f6e8c3","#f5f5f5","#c7eae5","#80cdc1","#35978f","#01665e","#003c30"],RdGy:["#67001f","#b2182b","#d6604d","#f4a582","#fddbc7","#ffffff","#e0e0e0","#bababa","#878787","#4d4d4d","#1a1a1a"],PuOr:["#7f3b08","#b35806","#e08214","#fdb863","#fee0b6","#f7f7f7","#d8daeb","#b2abd2","#8073ac","#542788","#2d004b"],Set2:["#66c2a5","#fc8d62","#8da0cb","#e78ac3","#a6d854","#ffd92f","#e5c494","#b3b3b3"],Accent:["#7fc97f","#beaed4","#fdc086","#ffff99","#386cb0","#f0027f","#bf5b17","#666666"],Set1:["#e41a1c","#377eb8","#4daf4a","#984ea3","#ff7f00","#ffff33","#a65628","#f781bf","#999999"],Set3:["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69","#fccde5","#d9d9d9","#bc80bd","#ccebc5","#ffed6f"],Dark2:["#1b9e77","#d95f02","#7570b3","#e7298a","#66a61e","#e6ab02","#a6761d","#666666"],Paired:["#a6cee3","#1f78b4","#b2df8a","#33a02c","#fb9a99","#e31a1c","#fdbf6f","#ff7f00","#cab2d6","#6a3d9a","#ffff99","#b15928"],Pastel2:["#b3e2cd","#fdcdac","#cbd5e8","#f4cae4","#e6f5c9","#fff2ae","#f1e2cc","#cccccc"],Pastel1:["#fbb4ae","#b3cde3","#ccebc5","#decbe4","#fed9a6","#ffffcc","#e5d8bd","#fddaec","#f2f2f2"]},Ya=0,ja=Object.keys(Mi);Ya{function uIe(){this.__data__=[],this.size=0}Nle.exports=uIe});var nP=ke((rDt,Wle)=>{function cIe(e,t){return e===t||e!==e&&t!==t}Wle.exports=cIe});var Z3=ke((nDt,Ble)=>{var pIe=nP();function fIe(e,t){for(var n=e.length;n--;)if(pIe(e[n][0],t))return n;return-1}Ble.exports=fIe});var Vle=ke((oDt,Hle)=>{var dIe=Z3(),mIe=Array.prototype,hIe=mIe.splice;function gIe(e){var t=this.__data__,n=dIe(t,e);if(n<0)return!1;var r=t.length-1;return n==r?t.pop():hIe.call(t,n,1),--this.size,!0}Hle.exports=gIe});var Ule=ke((iDt,qle)=>{var vIe=Z3();function yIe(e){var t=this.__data__,n=vIe(t,e);return n<0?void 0:t[n][1]}qle.exports=yIe});var Jle=ke((aDt,$le)=>{var bIe=Z3();function wIe(e){return bIe(this.__data__,e)>-1}$le.exports=wIe});var Xle=ke((lDt,Gle)=>{var OIe=Z3();function xIe(e,t){var n=this.__data__,r=OIe(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this}Gle.exports=xIe});var e5=ke((sDt,Kle)=>{var _Ie=Fle(),SIe=Vle(),jIe=Ule(),IIe=Jle(),kIe=Xle();function gv(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t{var PIe=e5();function EIe(){this.__data__=new PIe,this.size=0}Yle.exports=EIe});var ese=ke((cDt,Zle)=>{function CIe(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n}Zle.exports=CIe});var rse=ke((pDt,tse)=>{function AIe(e){return this.__data__.get(e)}tse.exports=AIe});var ose=ke((fDt,nse)=>{function MIe(e){return this.__data__.has(e)}nse.exports=MIe});var RN=ke((dDt,ise)=>{var TIe=typeof global=="object"&&global&&global.Object===Object&&global;ise.exports=TIe});var Ys=ke((mDt,ase)=>{var RIe=RN(),zIe=typeof self=="object"&&self&&self.Object===Object&&self,LIe=RIe||zIe||Function("return this")();ase.exports=LIe});var N1=ke((hDt,lse)=>{var DIe=Ys(),NIe=DIe.Symbol;lse.exports=NIe});var pse=ke((gDt,cse)=>{var sse=N1(),use=Object.prototype,FIe=use.hasOwnProperty,WIe=use.toString,t5=sse?sse.toStringTag:void 0;function BIe(e){var t=FIe.call(e,t5),n=e[t5];try{e[t5]=void 0;var r=!0}catch{}var o=WIe.call(e);return r&&(t?e[t5]=n:delete e[t5]),o}cse.exports=BIe});var dse=ke((vDt,fse)=>{var HIe=Object.prototype,VIe=HIe.toString;function qIe(e){return VIe.call(e)}fse.exports=qIe});var ac=ke((yDt,gse)=>{var mse=N1(),UIe=pse(),$Ie=dse(),JIe="[object Null]",GIe="[object Undefined]",hse=mse?mse.toStringTag:void 0;function XIe(e){return e==null?e===void 0?GIe:JIe:hse&&hse in Object(e)?UIe(e):$Ie(e)}gse.exports=XIe});var F1=ke((bDt,vse)=>{function KIe(e){var t=typeof e;return e!=null&&(t=="object"||t=="function")}vse.exports=KIe});var oP=ke((wDt,yse)=>{var YIe=ac(),QIe=F1(),ZIe="[object AsyncFunction]",eke="[object Function]",tke="[object GeneratorFunction]",rke="[object Proxy]";function nke(e){if(!QIe(e))return!1;var t=YIe(e);return t==eke||t==tke||t==ZIe||t==rke}yse.exports=nke});var wse=ke((ODt,bse)=>{var oke=Ys(),ike=oke["__core-js_shared__"];bse.exports=ike});var _se=ke((xDt,xse)=>{var zN=wse(),Ose=function(){var e=/[^.]+$/.exec(zN&&zN.keys&&zN.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}();function ake(e){return!!Ose&&Ose in e}xse.exports=ake});var LN=ke((_Dt,Sse)=>{var lke=Function.prototype,ske=lke.toString;function uke(e){if(e!=null){try{return ske.call(e)}catch{}try{return e+""}catch{}}return""}Sse.exports=uke});var Ise=ke((SDt,jse)=>{var cke=oP(),pke=_se(),fke=F1(),dke=LN(),mke=/[\\^$.*+?()[\]{}|]/g,hke=/^\[object .+?Constructor\]$/,gke=Function.prototype,vke=Object.prototype,yke=gke.toString,bke=vke.hasOwnProperty,wke=RegExp("^"+yke.call(bke).replace(mke,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function Oke(e){if(!fke(e)||pke(e))return!1;var t=cke(e)?wke:hke;return t.test(dke(e))}jse.exports=Oke});var Pse=ke((jDt,kse)=>{function xke(e,t){return e?.[t]}kse.exports=xke});var Sd=ke((IDt,Ese)=>{var _ke=Ise(),Ske=Pse();function jke(e,t){var n=Ske(e,t);return _ke(n)?n:void 0}Ese.exports=jke});var iP=ke((kDt,Cse)=>{var Ike=Sd(),kke=Ys(),Pke=Ike(kke,"Map");Cse.exports=Pke});var r5=ke((PDt,Ase)=>{var Eke=Sd(),Cke=Eke(Object,"create");Ase.exports=Cke});var Rse=ke((EDt,Tse)=>{var Mse=r5();function Ake(){this.__data__=Mse?Mse(null):{},this.size=0}Tse.exports=Ake});var Lse=ke((CDt,zse)=>{function Mke(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}zse.exports=Mke});var Nse=ke((ADt,Dse)=>{var Tke=r5(),Rke="__lodash_hash_undefined__",zke=Object.prototype,Lke=zke.hasOwnProperty;function Dke(e){var t=this.__data__;if(Tke){var n=t[e];return n===Rke?void 0:n}return Lke.call(t,e)?t[e]:void 0}Dse.exports=Dke});var Wse=ke((MDt,Fse)=>{var Nke=r5(),Fke=Object.prototype,Wke=Fke.hasOwnProperty;function Bke(e){var t=this.__data__;return Nke?t[e]!==void 0:Wke.call(t,e)}Fse.exports=Bke});var Hse=ke((TDt,Bse)=>{var Hke=r5(),Vke="__lodash_hash_undefined__";function qke(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=Hke&&t===void 0?Vke:t,this}Bse.exports=qke});var qse=ke((RDt,Vse)=>{var Uke=Rse(),$ke=Lse(),Jke=Nse(),Gke=Wse(),Xke=Hse();function vv(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t{var Use=qse(),Kke=e5(),Yke=iP();function Qke(){this.size=0,this.__data__={hash:new Use,map:new(Yke||Kke),string:new Use}}$se.exports=Qke});var Xse=ke((LDt,Gse)=>{function Zke(e){var t=typeof e;return t=="string"||t=="number"||t=="symbol"||t=="boolean"?e!=="__proto__":e===null}Gse.exports=Zke});var n5=ke((DDt,Kse)=>{var ePe=Xse();function tPe(e,t){var n=e.__data__;return ePe(t)?n[typeof t=="string"?"string":"hash"]:n.map}Kse.exports=tPe});var Qse=ke((NDt,Yse)=>{var rPe=n5();function nPe(e){var t=rPe(this,e).delete(e);return this.size-=t?1:0,t}Yse.exports=nPe});var eue=ke((FDt,Zse)=>{var oPe=n5();function iPe(e){return oPe(this,e).get(e)}Zse.exports=iPe});var rue=ke((WDt,tue)=>{var aPe=n5();function lPe(e){return aPe(this,e).has(e)}tue.exports=lPe});var oue=ke((BDt,nue)=>{var sPe=n5();function uPe(e,t){var n=sPe(this,e),r=n.size;return n.set(e,t),this.size+=n.size==r?0:1,this}nue.exports=uPe});var aP=ke((HDt,iue)=>{var cPe=Jse(),pPe=Qse(),fPe=eue(),dPe=rue(),mPe=oue();function yv(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t{var hPe=e5(),gPe=iP(),vPe=aP(),yPe=200;function bPe(e,t){var n=this.__data__;if(n instanceof hPe){var r=n.__data__;if(!gPe||r.length{var wPe=e5(),OPe=Qle(),xPe=ese(),_Pe=rse(),SPe=ose(),jPe=lue();function bv(e){var t=this.__data__=new wPe(e);this.size=t.size}bv.prototype.clear=OPe;bv.prototype.delete=xPe;bv.prototype.get=_Pe;bv.prototype.has=SPe;bv.prototype.set=jPe;sue.exports=bv});var cue=ke((UDt,uue)=>{var IPe="__lodash_hash_undefined__";function kPe(e){return this.__data__.set(e,IPe),this}uue.exports=kPe});var fue=ke(($Dt,pue)=>{function PPe(e){return this.__data__.has(e)}pue.exports=PPe});var mue=ke((JDt,due)=>{var EPe=aP(),CPe=cue(),APe=fue();function lP(e){var t=-1,n=e==null?0:e.length;for(this.__data__=new EPe;++t{function MPe(e,t){for(var n=-1,r=e==null?0:e.length;++n{function TPe(e,t){return e.has(t)}vue.exports=TPe});var NN=ke((KDt,bue)=>{var RPe=mue(),zPe=gue(),LPe=yue(),DPe=1,NPe=2;function FPe(e,t,n,r,o,i){var u=n&DPe,f=e.length,h=t.length;if(f!=h&&!(u&&h>f))return!1;var y=i.get(e),O=i.get(t);if(y&&O)return y==t&&O==e;var S=-1,I=!0,A=n&NPe?new RPe:void 0;for(i.set(e,t),i.set(t,e);++S{var WPe=Ys(),BPe=WPe.Uint8Array;wue.exports=BPe});var xue=ke((QDt,Oue)=>{function HPe(e){var t=-1,n=Array(e.size);return e.forEach(function(r,o){n[++t]=[o,r]}),n}Oue.exports=HPe});var Sue=ke((ZDt,_ue)=>{function VPe(e){var t=-1,n=Array(e.size);return e.forEach(function(r){n[++t]=r}),n}_ue.exports=VPe});var Eue=ke((eNt,Pue)=>{var jue=N1(),Iue=FN(),qPe=nP(),UPe=NN(),$Pe=xue(),JPe=Sue(),GPe=1,XPe=2,KPe="[object Boolean]",YPe="[object Date]",QPe="[object Error]",ZPe="[object Map]",eEe="[object Number]",tEe="[object RegExp]",rEe="[object Set]",nEe="[object String]",oEe="[object Symbol]",iEe="[object ArrayBuffer]",aEe="[object DataView]",kue=jue?jue.prototype:void 0,WN=kue?kue.valueOf:void 0;function lEe(e,t,n,r,o,i,u){switch(n){case aEe:if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case iEe:return!(e.byteLength!=t.byteLength||!i(new Iue(e),new Iue(t)));case KPe:case YPe:case eEe:return qPe(+e,+t);case QPe:return e.name==t.name&&e.message==t.message;case tEe:case nEe:return e==t+"";case ZPe:var f=$Pe;case rEe:var h=r&GPe;if(f||(f=JPe),e.size!=t.size&&!h)return!1;var y=u.get(e);if(y)return y==t;r|=XPe,u.set(e,t);var O=UPe(f(e),f(t),r,o,i,u);return u.delete(e),O;case oEe:if(WN)return WN.call(e)==WN.call(t)}return!1}Pue.exports=lEe});var sP=ke((tNt,Cue)=>{function sEe(e,t){for(var n=-1,r=t.length,o=e.length;++n{var uEe=Array.isArray;Aue.exports=uEe});var BN=ke((nNt,Mue)=>{var cEe=sP(),pEe=Qs();function fEe(e,t,n){var r=t(e);return pEe(e)?r:cEe(r,n(e))}Mue.exports=fEe});var Rue=ke((oNt,Tue)=>{function dEe(e,t){for(var n=-1,r=e==null?0:e.length,o=0,i=[];++n{function mEe(){return[]}zue.exports=mEe});var uP=ke((aNt,Due)=>{var hEe=Rue(),gEe=HN(),vEe=Object.prototype,yEe=vEe.propertyIsEnumerable,Lue=Object.getOwnPropertySymbols,bEe=Lue?function(e){return e==null?[]:(e=Object(e),hEe(Lue(e),function(t){return yEe.call(e,t)}))}:gEe;Due.exports=bEe});var Fue=ke((lNt,Nue)=>{function wEe(e,t){for(var n=-1,r=Array(e);++n{function OEe(e){return e!=null&&typeof e=="object"}Wue.exports=OEe});var Hue=ke((uNt,Bue)=>{var xEe=ac(),_Ee=ds(),SEe="[object Arguments]";function jEe(e){return _Ee(e)&&xEe(e)==SEe}Bue.exports=jEe});var VN=ke((cNt,Uue)=>{var Vue=Hue(),IEe=ds(),que=Object.prototype,kEe=que.hasOwnProperty,PEe=que.propertyIsEnumerable,EEe=Vue(function(){return arguments}())?Vue:function(e){return IEe(e)&&kEe.call(e,"callee")&&!PEe.call(e,"callee")};Uue.exports=EEe});var Jue=ke((pNt,$ue)=>{function CEe(){return!1}$ue.exports=CEe});var cP=ke((o5,wv)=>{var AEe=Ys(),MEe=Jue(),Kue=typeof o5=="object"&&o5&&!o5.nodeType&&o5,Gue=Kue&&typeof wv=="object"&&wv&&!wv.nodeType&&wv,TEe=Gue&&Gue.exports===Kue,Xue=TEe?AEe.Buffer:void 0,REe=Xue?Xue.isBuffer:void 0,zEe=REe||MEe;wv.exports=zEe});var Que=ke((fNt,Yue)=>{var LEe=9007199254740991,DEe=/^(?:0|[1-9]\d*)$/;function NEe(e,t){var n=typeof e;return t=t??LEe,!!t&&(n=="number"||n!="symbol"&&DEe.test(e))&&e>-1&&e%1==0&&e{var FEe=9007199254740991;function WEe(e){return typeof e=="number"&&e>-1&&e%1==0&&e<=FEe}Zue.exports=WEe});var tce=ke((mNt,ece)=>{var BEe=ac(),HEe=qN(),VEe=ds(),qEe="[object Arguments]",UEe="[object Array]",$Ee="[object Boolean]",JEe="[object Date]",GEe="[object Error]",XEe="[object Function]",KEe="[object Map]",YEe="[object Number]",QEe="[object Object]",ZEe="[object RegExp]",eCe="[object Set]",tCe="[object String]",rCe="[object WeakMap]",nCe="[object ArrayBuffer]",oCe="[object DataView]",iCe="[object Float32Array]",aCe="[object Float64Array]",lCe="[object Int8Array]",sCe="[object Int16Array]",uCe="[object Int32Array]",cCe="[object Uint8Array]",pCe="[object Uint8ClampedArray]",fCe="[object Uint16Array]",dCe="[object Uint32Array]",so={};so[iCe]=so[aCe]=so[lCe]=so[sCe]=so[uCe]=so[cCe]=so[pCe]=so[fCe]=so[dCe]=!0;so[qEe]=so[UEe]=so[nCe]=so[$Ee]=so[oCe]=so[JEe]=so[GEe]=so[XEe]=so[KEe]=so[YEe]=so[QEe]=so[ZEe]=so[eCe]=so[tCe]=so[rCe]=!1;function mCe(e){return VEe(e)&&HEe(e.length)&&!!so[BEe(e)]}ece.exports=mCe});var pP=ke((hNt,rce)=>{function hCe(e){return function(t){return e(t)}}rce.exports=hCe});var fP=ke((i5,Ov)=>{var gCe=RN(),nce=typeof i5=="object"&&i5&&!i5.nodeType&&i5,a5=nce&&typeof Ov=="object"&&Ov&&!Ov.nodeType&&Ov,vCe=a5&&a5.exports===nce,UN=vCe&&gCe.process,yCe=function(){try{var e=a5&&a5.require&&a5.require("util").types;return e||UN&&UN.binding&&UN.binding("util")}catch{}}();Ov.exports=yCe});var $N=ke((gNt,ace)=>{var bCe=tce(),wCe=pP(),oce=fP(),ice=oce&&oce.isTypedArray,OCe=ice?wCe(ice):bCe;ace.exports=OCe});var JN=ke((vNt,lce)=>{var xCe=Fue(),_Ce=VN(),SCe=Qs(),jCe=cP(),ICe=Que(),kCe=$N(),PCe=Object.prototype,ECe=PCe.hasOwnProperty;function CCe(e,t){var n=SCe(e),r=!n&&_Ce(e),o=!n&&!r&&jCe(e),i=!n&&!r&&!o&&kCe(e),u=n||r||o||i,f=u?xCe(e.length,String):[],h=f.length;for(var y in e)(t||ECe.call(e,y))&&!(u&&(y=="length"||o&&(y=="offset"||y=="parent")||i&&(y=="buffer"||y=="byteLength"||y=="byteOffset")||ICe(y,h)))&&f.push(y);return f}lce.exports=CCe});var dP=ke((yNt,sce)=>{var ACe=Object.prototype;function MCe(e){var t=e&&e.constructor,n=typeof t=="function"&&t.prototype||ACe;return e===n}sce.exports=MCe});var GN=ke((bNt,uce)=>{function TCe(e,t){return function(n){return e(t(n))}}uce.exports=TCe});var pce=ke((wNt,cce)=>{var RCe=GN(),zCe=RCe(Object.keys,Object);cce.exports=zCe});var dce=ke((ONt,fce)=>{var LCe=dP(),DCe=pce(),NCe=Object.prototype,FCe=NCe.hasOwnProperty;function WCe(e){if(!LCe(e))return DCe(e);var t=[];for(var n in Object(e))FCe.call(e,n)&&n!="constructor"&&t.push(n);return t}fce.exports=WCe});var XN=ke((xNt,mce)=>{var BCe=oP(),HCe=qN();function VCe(e){return e!=null&&HCe(e.length)&&!BCe(e)}mce.exports=VCe});var mP=ke((_Nt,hce)=>{var qCe=JN(),UCe=dce(),$Ce=XN();function JCe(e){return $Ce(e)?qCe(e):UCe(e)}hce.exports=JCe});var KN=ke((SNt,gce)=>{var GCe=BN(),XCe=uP(),KCe=mP();function YCe(e){return GCe(e,KCe,XCe)}gce.exports=YCe});var bce=ke((jNt,yce)=>{var vce=KN(),QCe=1,ZCe=Object.prototype,eAe=ZCe.hasOwnProperty;function tAe(e,t,n,r,o,i){var u=n&QCe,f=vce(e),h=f.length,y=vce(t),O=y.length;if(h!=O&&!u)return!1;for(var S=h;S--;){var I=f[S];if(!(u?I in t:eAe.call(t,I)))return!1}var A=i.get(e),C=i.get(t);if(A&&C)return A==t&&C==e;var M=!0;i.set(e,t),i.set(t,e);for(var W=u;++S{var rAe=Sd(),nAe=Ys(),oAe=rAe(nAe,"DataView");wce.exports=oAe});var _ce=ke((kNt,xce)=>{var iAe=Sd(),aAe=Ys(),lAe=iAe(aAe,"Promise");xce.exports=lAe});var jce=ke((PNt,Sce)=>{var sAe=Sd(),uAe=Ys(),cAe=sAe(uAe,"Set");Sce.exports=cAe});var kce=ke((ENt,Ice)=>{var pAe=Sd(),fAe=Ys(),dAe=pAe(fAe,"WeakMap");Ice.exports=dAe});var l5=ke((CNt,Rce)=>{var YN=Oce(),QN=iP(),ZN=_ce(),eF=jce(),tF=kce(),Tce=ac(),xv=LN(),Pce="[object Map]",mAe="[object Object]",Ece="[object Promise]",Cce="[object Set]",Ace="[object WeakMap]",Mce="[object DataView]",hAe=xv(YN),gAe=xv(QN),vAe=xv(ZN),yAe=xv(eF),bAe=xv(tF),W1=Tce;(YN&&W1(new YN(new ArrayBuffer(1)))!=Mce||QN&&W1(new QN)!=Pce||ZN&&W1(ZN.resolve())!=Ece||eF&&W1(new eF)!=Cce||tF&&W1(new tF)!=Ace)&&(W1=function(e){var t=Tce(e),n=t==mAe?e.constructor:void 0,r=n?xv(n):"";if(r)switch(r){case hAe:return Mce;case gAe:return Pce;case vAe:return Ece;case yAe:return Cce;case bAe:return Ace}return t});Rce.exports=W1});var Hce=ke((ANt,Bce)=>{var rF=DN(),wAe=NN(),OAe=Eue(),xAe=bce(),zce=l5(),Lce=Qs(),Dce=cP(),_Ae=$N(),SAe=1,Nce="[object Arguments]",Fce="[object Array]",hP="[object Object]",jAe=Object.prototype,Wce=jAe.hasOwnProperty;function IAe(e,t,n,r,o,i){var u=Lce(e),f=Lce(t),h=u?Fce:zce(e),y=f?Fce:zce(t);h=h==Nce?hP:h,y=y==Nce?hP:y;var O=h==hP,S=y==hP,I=h==y;if(I&&Dce(e)){if(!Dce(t))return!1;u=!0,O=!1}if(I&&!O)return i||(i=new rF),u||_Ae(e)?wAe(e,t,n,r,o,i):OAe(e,t,h,n,r,o,i);if(!(n&SAe)){var A=O&&Wce.call(e,"__wrapped__"),C=S&&Wce.call(t,"__wrapped__");if(A||C){var M=A?e.value():e,W=C?t.value():t;return i||(i=new rF),o(M,W,n,r,i)}}return I?(i||(i=new rF),xAe(e,t,n,r,o,i)):!1}Bce.exports=IAe});var $ce=ke((MNt,Uce)=>{var kAe=Hce(),Vce=ds();function qce(e,t,n,r,o){return e===t?!0:e==null||t==null||!Vce(e)&&!Vce(t)?e!==e&&t!==t:kAe(e,t,n,r,qce,o)}Uce.exports=qce});var Gce=ke((TNt,Jce)=>{var PAe=$ce();function EAe(e,t){return PAe(e,t)}Jce.exports=EAe});var lF=ke((aF,Sv)=>{(function(e,t){typeof aF=="object"&&typeof Sv<"u"?Sv.exports=t():typeof define=="function"&&define.amd?define(t):e.moment=t()})(aF,function(){"use strict";var e;function t(){return e.apply(null,arguments)}function n(g){e=g}function r(g){return g instanceof Array||Object.prototype.toString.call(g)==="[object Array]"}function o(g){return g!=null&&Object.prototype.toString.call(g)==="[object Object]"}function i(g,j){return Object.prototype.hasOwnProperty.call(g,j)}function u(g){if(Object.getOwnPropertyNames)return Object.getOwnPropertyNames(g).length===0;var j;for(j in g)if(i(g,j))return!1;return!0}function f(g){return g===void 0}function h(g){return typeof g=="number"||Object.prototype.toString.call(g)==="[object Number]"}function y(g){return g instanceof Date||Object.prototype.toString.call(g)==="[object Date]"}function O(g,j){var F=[],q,te=g.length;for(q=0;q>>0,q;for(q=0;q0)for(F=0;F component higher in the tree to provide a loading indicator or placeholder to display.`)}Di!==5&&(Di=2),h=mD(h,f),I=u;do{switch(I.tag){case 3:i=h,I.flags|=4096,t&=-t,I.lanes|=t;var le=Xoe(I,i,t);ane(I,le);break e;case 1:i=h;var Z=I.type,K=I.stateNode;if(!(I.flags&64)&&(typeof Z.getDerivedStateFromError=="function"||K!==null&&typeof K.componentDidCatch=="function"&&(Zu===null||!Zu.has(K)))){I.flags|=4096,t&=-t,I.lanes|=t;var de=Koe(I,i,t);ane(I,de);break e}}I=I.return}while(I!==null)}oie(n)}catch(se){t=se,hi===n&&n!==null&&(hi=n=n.return);continue}break}while(1)}function rie(){var e=WI.current;return WI.current=FI,e===null?FI:e}function Nb(e,t){var n=pr;pr|=16;var r=rie();Pa===e&&ua===t||Mg(e,t);do try{x9e();break}catch(o){tie(e,o)}while(1);if(oD(),pr=n,WI.current=r,hi!==null)throw Error(gt(261));return Pa=null,ua=0,Di}function x9e(){for(;hi!==null;)nie(hi)}function _9e(){for(;hi!==null&&!o9e();)nie(hi)}function nie(e){var t=aie(e.alternate,e,I1);e.memoizedProps=e.pendingProps,t===null?oie(e):hi=t,hD.current=null}function oie(e){var t=e;do{var n=t.alternate;if(e=t.return,t.flags&2048){if(n=m9e(t),n!==null){n.flags&=2047,hi=n;return}e!==null&&(e.firstEffect=e.lastEffect=null,e.flags|=2048)}else{if(n=d9e(n,t,I1),n!==null){hi=n;return}if(n=t,n.tag!==24&&n.tag!==23||n.memoizedState===null||I1&1073741824||!(n.mode&4)){for(var r=0,o=n.child;o!==null;)r|=o.lanes|o.childLanes,o=o.sibling;n.childLanes=r}e!==null&&!(e.flags&2048)&&(e.firstEffect===null&&(e.firstEffect=t.firstEffect),t.lastEffect!==null&&(e.lastEffect!==null&&(e.lastEffect.nextEffect=t.firstEffect),e.lastEffect=t.lastEffect),1u&&(f=u,u=le,le=f),f=$re(B,le),i=$re(B,u),f&&i&&(X.rangeCount!==1||X.anchorNode!==f.node||X.anchorOffset!==f.offset||X.focusNode!==i.node||X.focusOffset!==i.offset)&&(Y=Y.createRange(),Y.setStart(f.node,f.offset),X.removeAllRanges(),le>u?(X.addRange(Y),X.extend(i.node,i.offset)):(Y.setEnd(i.node,i.offset),X.addRange(Y)))))),Y=[],X=B;X=X.parentNode;)X.nodeType===1&&Y.push({element:X,left:X.scrollLeft,top:X.scrollTop});for(typeof B.focus=="function"&&B.focus(),B=0;Bsa()-vD?Mg(e,0):gD|=n),ls(e,t)}function E9e(e,t){var n=e.stateNode;n!==null&&n.delete(t),t=0,t===0&&(t=e.mode,t&2?t&4?(fp===0&&(fp=Wg),t=vg(62914560&~fp),t===0&&(t=4194304)):t=Lg()===99?1:2:t=1),n=El(),e=tP(e,t),e!==null&&(JI(e,t,n),ls(e,n))}var aie;aie=function(e,t,n){var r=t.lanes;if(e!==null)if(e.memoizedProps!==t.pendingProps||il.current)Xs=!0;else if(n&r)Xs=!!(e.flags&16384);else{switch(Xs=!1,t.tag){case 3:bne(t),Fz();break;case 5:cne(t);break;case 1:al(t.type)&&mI(t);break;case 4:hL(t,t.stateNode.containerInfo);break;case 10:r=t.memoizedProps.value;var o=t.type._context;Mo(EI,o._currentValue),o._currentValue=r;break;case 13:if(t.memoizedState!==null)return n&t.child.childLanes?wne(e,t,n):(Mo(Ao,Ao.current&1),t=mp(e,t,n),t!==null?t.sibling:null);Mo(Ao,Ao.current&1);break;case 19:if(r=(n&t.childLanes)!==0,e.flags&64){if(r)return jne(e,t,n);t.flags|=64}if(o=t.memoizedState,o!==null&&(o.rendering=null,o.tail=null,o.lastEffect=null),Mo(Ao,Ao.current),r)break;return null;case 23:case 24:return t.lanes=0,Wz(e,t,n)}return mp(e,t,n)}else Xs=!1;switch(t.lanes=0,t.tag){case 2:if(r=t.type,e!==null&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,o=zg(t,ca.current),Eg(t,n),o=cD(null,t,r,e,o,n),t.flags|=1,typeof o=="object"&&o!==null&&typeof o.render=="function"&&o.$$typeof===void 0){if(t.tag=1,t.memoizedState=null,t.updateQueue=null,al(r)){var i=!0;mI(t)}else i=!1;t.memoizedState=o.state!==null&&o.state!==void 0?o.state:null,aD(t);var u=r.getDerivedStateFromProps;typeof u=="function"&&MI(t,r,u,e),o.updater=ZI,t.stateNode=o,o._reactInternals=t,mL(t,r,e,n),t=bL(null,t,r,!0,i,n)}else t.tag=0,ol(null,t,o,n),t=t.child;return t;case 16:o=t.elementType;e:{switch(e!==null&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,i=o._init,o=i(o._payload),t.type=o,i=t.tag=A9e(o),e=Gs(o,e),i){case 0:t=yL(null,t,o,e,n);break e;case 1:t=yne(null,t,o,e,n);break e;case 11:t=gne(null,t,o,e,n);break e;case 14:t=vne(null,t,o,Gs(o.type,e),r,n);break e}throw Error(gt(306,o,""))}return t;case 0:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:Gs(r,o),yL(e,t,r,o,n);case 1:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:Gs(r,o),yne(e,t,r,o,n);case 3:if(bne(t),r=t.updateQueue,e===null||r===null)throw Error(gt(282));if(r=t.pendingProps,o=t.memoizedState,o=o!==null?o.element:null,Aoe(e,t),l3(t,r,null,n),r=t.memoizedState.element,r===o)Fz(),t=mp(e,t,n);else{if(o=t.stateNode,(i=o.hydrate)&&(Qf=kg(t.stateNode.containerInfo.firstChild),dp=t,i=tc=!0),i){if(e=o.mutableSourceEagerHydrationData,e!=null)for(o=0;o{"use strict";function uie(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(uie)}catch(e){console.error(e)}}uie(),cie.exports=sie()});var Zie=Ie((tRt,Qie)=>{"use strict";var V_e="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED";Qie.exports=V_e});var nae=Ie((rRt,rae)=>{"use strict";var q_e=Zie();function eae(){}function tae(){}tae.resetWarningCache=eae;rae.exports=function(){function e(r,o,i,u,f,h){if(h!==q_e){var y=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw y.name="Invariant Violation",y}}e.isRequired=e;function t(){return e}var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:tae,resetWarningCache:eae};return n.PropTypes=n,n}});var mt=Ie((iRt,oae)=>{oae.exports=nae()();var nRt,oRt});var Ct=Ie((aRt,_P)=>{(function(){"use strict";var e={}.hasOwnProperty;function t(){for(var o="",i=0;i{"use strict";var ji=typeof Symbol=="function"&&Symbol.for,YD=ji?Symbol.for("react.element"):60103,QD=ji?Symbol.for("react.portal"):60106,AP=ji?Symbol.for("react.fragment"):60107,MP=ji?Symbol.for("react.strict_mode"):60108,TP=ji?Symbol.for("react.profiler"):60114,RP=ji?Symbol.for("react.provider"):60109,zP=ji?Symbol.for("react.context"):60110,ZD=ji?Symbol.for("react.async_mode"):60111,LP=ji?Symbol.for("react.concurrent_mode"):60111,DP=ji?Symbol.for("react.forward_ref"):60112,NP=ji?Symbol.for("react.suspense"):60113,tSe=ji?Symbol.for("react.suspense_list"):60120,FP=ji?Symbol.for("react.memo"):60115,WP=ji?Symbol.for("react.lazy"):60116,rSe=ji?Symbol.for("react.block"):60121,nSe=ji?Symbol.for("react.fundamental"):60117,oSe=ji?Symbol.for("react.responder"):60118,iSe=ji?Symbol.for("react.scope"):60119;function Al(e){if(typeof e=="object"&&e!==null){var t=e.$$typeof;switch(t){case YD:switch(e=e.type,e){case ZD:case LP:case AP:case TP:case MP:case NP:return e;default:switch(e=e&&e.$$typeof,e){case zP:case DP:case WP:case FP:case RP:return e;default:return t}}case QD:return t}}}function Pae(e){return Al(e)===LP}Tn.AsyncMode=ZD;Tn.ConcurrentMode=LP;Tn.ContextConsumer=zP;Tn.ContextProvider=RP;Tn.Element=YD;Tn.ForwardRef=DP;Tn.Fragment=AP;Tn.Lazy=WP;Tn.Memo=FP;Tn.Portal=QD;Tn.Profiler=TP;Tn.StrictMode=MP;Tn.Suspense=NP;Tn.isAsyncMode=function(e){return Pae(e)||Al(e)===ZD};Tn.isConcurrentMode=Pae;Tn.isContextConsumer=function(e){return Al(e)===zP};Tn.isContextProvider=function(e){return Al(e)===RP};Tn.isElement=function(e){return typeof e=="object"&&e!==null&&e.$$typeof===YD};Tn.isForwardRef=function(e){return Al(e)===DP};Tn.isFragment=function(e){return Al(e)===AP};Tn.isLazy=function(e){return Al(e)===WP};Tn.isMemo=function(e){return Al(e)===FP};Tn.isPortal=function(e){return Al(e)===QD};Tn.isProfiler=function(e){return Al(e)===TP};Tn.isStrictMode=function(e){return Al(e)===MP};Tn.isSuspense=function(e){return Al(e)===NP};Tn.isValidElementType=function(e){return typeof e=="string"||typeof e=="function"||e===AP||e===LP||e===TP||e===MP||e===NP||e===tSe||typeof e=="object"&&e!==null&&(e.$$typeof===WP||e.$$typeof===FP||e.$$typeof===RP||e.$$typeof===zP||e.$$typeof===DP||e.$$typeof===nSe||e.$$typeof===oSe||e.$$typeof===iSe||e.$$typeof===rSe)};Tn.typeOf=Al});var Cae=Ie((ARt,Eae)=>{"use strict";Eae.exports=kae()});var Dae=Ie((MRt,Lae)=>{"use strict";var eN=Cae(),aSe={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},lSe={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},sSe={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},Rae={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},tN={};tN[eN.ForwardRef]=sSe;tN[eN.Memo]=Rae;function Aae(e){return eN.isMemo(e)?Rae:tN[e.$$typeof]||aSe}var uSe=Object.defineProperty,cSe=Object.getOwnPropertyNames,Mae=Object.getOwnPropertySymbols,pSe=Object.getOwnPropertyDescriptor,fSe=Object.getPrototypeOf,Tae=Object.prototype;function zae(e,t,n){if(typeof t!="string"){if(Tae){var r=fSe(t);r&&r!==Tae&&zae(e,r,n)}var o=cSe(t);Mae&&(o=o.concat(Mae(t)));for(var i=Aae(e),u=Aae(t),f=0;f{(function(e,t){typeof EN=="object"&&typeof CN<"u"?CN.exports=t():typeof define=="function"&&define.amd?define(t):(e=typeof globalThis<"u"?globalThis:e||self,e.chroma=t())})(EN,function(){"use strict";for(var e=function(D,U,Q){return U===void 0&&(U=0),Q===void 0&&(Q=1),DQ?Q:D},t=e,n=function(D){D._clipped=!1,D._unclipped=D.slice(0);for(var U=0;U<=3;U++)U<3?((D[U]<0||D[U]>255)&&(D._clipped=!0),D[U]=t(D[U],0,255)):U===3&&(D[U]=t(D[U],0,1));return D},r={},o=0,i=["Boolean","Number","String","Function","Array","Date","RegExp","Undefined","Null"];o=3?Array.prototype.slice.call(D):h(D[0])=="object"&&U?U.split("").filter(function(Q){return D[0][Q]!==void 0}).map(function(Q){return D[0][Q]}):D[0]},O=f,S=function(D){if(D.length<2)return null;var U=D.length-1;return O(D[U])=="string"?D[U].toLowerCase():null},I=Math.PI,A={clip_rgb:n,limit:e,type:f,unpack:y,last:S,PI:I,TWOPI:I*2,PITHIRD:I/3,DEG2RAD:I/180,RAD2DEG:180/I},C={format:{},autodetect:[]},M=A.last,F=A.clip_rgb,R=A.type,B=C,Y=function(){for(var U=[],Q=arguments.length;Q--;)U[Q]=arguments[Q];var fe=this;if(R(U[0])==="object"&&U[0].constructor&&U[0].constructor===this.constructor)return U[0];var ve=M(U),Oe=!1;if(!ve){Oe=!0,B.sorted||(B.autodetect=B.autodetect.sort(function(it,_t){return _t.p-it.p}),B.sorted=!0);for(var he=0,Ce=B.autodetect;he4?D[4]:1;return Oe===1?[0,0,0,he]:[Q>=1?0:255*(1-Q)*(1-Oe),fe>=1?0:255*(1-fe)*(1-Oe),ve>=1?0:255*(1-ve)*(1-Oe),he]},Ue=Pe,Le=Z,Ge=X,Ke=C,rt=A.unpack,ot=A.type,dt=_e;Ge.prototype.cmyk=function(){return dt(this._rgb)},Le.cmyk=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];return new(Function.prototype.bind.apply(Ge,[null].concat(D,["cmyk"])))},Ke.format.cmyk=Ue,Ke.autodetect.push({p:2,test:function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];if(D=rt(D,"cmyk"),ot(D)==="array"&&D.length===4)return"cmyk"}});var jt=A.unpack,Ze=A.last,Xt=function(D){return Math.round(D*100)/100},at=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];var Q=jt(D,"hsla"),fe=Ze(D)||"lsa";return Q[0]=Xt(Q[0]||0),Q[1]=Xt(Q[1]*100)+"%",Q[2]=Xt(Q[2]*100)+"%",fe==="hsla"||Q.length>3&&Q[3]<1?(Q[3]=Q.length>3?Q[3]:1,fe="hsla"):Q.length=3,fe+"("+Q.join(",")+")"},lr=at,ht=A.unpack,xt=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];D=ht(D,"rgba");var Q=D[0],fe=D[1],ve=D[2];Q/=255,fe/=255,ve/=255;var Oe=Math.min(Q,fe,ve),he=Math.max(Q,fe,ve),Ce=(he+Oe)/2,De,Xe;return he===Oe?(De=0,Xe=Number.NaN):De=Ce<.5?(he-Oe)/(he+Oe):(he-Oe)/(2-he-Oe),Q==he?Xe=(fe-ve)/(he-Oe):fe==he?Xe=2+(ve-Q)/(he-Oe):ve==he&&(Xe=4+(Q-fe)/(he-Oe)),Xe*=60,Xe<0&&(Xe+=360),D.length>3&&D[3]!==void 0?[Xe,De,Ce,D[3]]:[Xe,De,Ce]},dr=xt,yr=A.unpack,Hr=A.last,ln=lr,Sr=dr,Bt=Math.round,sn=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];var Q=yr(D,"rgba"),fe=Hr(D)||"rgb";return fe.substr(0,3)=="hsl"?ln(Sr(Q),fe):(Q[0]=Bt(Q[0]),Q[1]=Bt(Q[1]),Q[2]=Bt(Q[2]),(fe==="rgba"||Q.length>3&&Q[3]<1)&&(Q[3]=Q.length>3?Q[3]:1,fe="rgba"),fe+"("+Q.slice(0,fe==="rgb"?3:4).join(",")+")")},nn=sn,no=A.unpack,Xn=Math.round,po=function(){for(var D,U=[],Q=arguments.length;Q--;)U[Q]=arguments[Q];U=no(U,"hsl");var fe=U[0],ve=U[1],Oe=U[2],he,Ce,De;if(ve===0)he=Ce=De=Oe*255;else{var Xe=[0,0,0],it=[0,0,0],_t=Oe<.5?Oe*(1+ve):Oe+ve-Oe*ve,pt=2*Oe-_t,zt=fe/360;Xe[0]=zt+1/3,Xe[1]=zt,Xe[2]=zt-1/3;for(var Lt=0;Lt<3;Lt++)Xe[Lt]<0&&(Xe[Lt]+=1),Xe[Lt]>1&&(Xe[Lt]-=1),6*Xe[Lt]<1?it[Lt]=pt+(_t-pt)*6*Xe[Lt]:2*Xe[Lt]<1?it[Lt]=_t:3*Xe[Lt]<2?it[Lt]=pt+(_t-pt)*(2/3-Xe[Lt])*6:it[Lt]=pt;D=[Xn(it[0]*255),Xn(it[1]*255),Xn(it[2]*255)],he=D[0],Ce=D[1],De=D[2]}return U.length>3?[he,Ce,De,U[3]]:[he,Ce,De,1]},So=po,An=So,Vr=C,gn=/^rgb\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*\)$/,zo=/^rgba\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*,\s*([01]|[01]?\.\d+)\)$/,vn=/^rgb\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,yn=/^rgba\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,Xo=/^hsl\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,Pc=/^hsla\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,_s=Math.round,mr=function(D){D=D.toLowerCase().trim();var U;if(Vr.format.named)try{return Vr.format.named(D)}catch{}if(U=D.match(gn)){for(var Q=U.slice(1,4),fe=0;fe<3;fe++)Q[fe]=+Q[fe];return Q[3]=1,Q}if(U=D.match(zo)){for(var ve=U.slice(1,5),Oe=0;Oe<4;Oe++)ve[Oe]=+ve[Oe];return ve}if(U=D.match(vn)){for(var he=U.slice(1,4),Ce=0;Ce<3;Ce++)he[Ce]=_s(he[Ce]*2.55);return he[3]=1,he}if(U=D.match(yn)){for(var De=U.slice(1,5),Xe=0;Xe<3;Xe++)De[Xe]=_s(De[Xe]*2.55);return De[3]=+De[3],De}if(U=D.match(Xo)){var it=U.slice(1,4);it[1]*=.01,it[2]*=.01;var _t=An(it);return _t[3]=1,_t}if(U=D.match(Pc)){var pt=U.slice(1,4);pt[1]*=.01,pt[2]*=.01;var zt=An(pt);return zt[3]=+U[4],zt}};mr.test=function(D){return gn.test(D)||zo.test(D)||vn.test(D)||yn.test(D)||Xo.test(D)||Pc.test(D)};var ya=mr,kc=Z,ml=X,Ll=C,Ec=A.type,Ss=nn,Dl=ya;ml.prototype.css=function(D){return Ss(this._rgb,D)},kc.css=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];return new(Function.prototype.bind.apply(ml,[null].concat(D,["css"])))},Ll.format.css=Dl,Ll.autodetect.push({p:5,test:function(D){for(var U=[],Q=arguments.length-1;Q-- >0;)U[Q]=arguments[Q+1];if(!U.length&&Ec(D)==="string"&&Dl.test(D))return"css"}});var wm=X,Bp=Z,t0=C,Cc=A.unpack;t0.format.gl=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];var Q=Cc(D,"rgba");return Q[0]*=255,Q[1]*=255,Q[2]*=255,Q},Bp.gl=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];return new(Function.prototype.bind.apply(wm,[null].concat(D,["gl"])))},wm.prototype.gl=function(){var D=this._rgb;return[D[0]/255,D[1]/255,D[2]/255,D[3]]};var wu=A.unpack,js=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];var Q=wu(D,"rgb"),fe=Q[0],ve=Q[1],Oe=Q[2],he=Math.min(fe,ve,Oe),Ce=Math.max(fe,ve,Oe),De=Ce-he,Xe=De*100/255,it=he/(255-De)*100,_t;return De===0?_t=Number.NaN:(fe===Ce&&(_t=(ve-Oe)/De),ve===Ce&&(_t=2+(Oe-fe)/De),Oe===Ce&&(_t=4+(fe-ve)/De),_t*=60,_t<0&&(_t+=360)),[_t,Xe,it]},Ba=js,St=A.unpack,li=Math.floor,oo=function(){for(var D,U,Q,fe,ve,Oe,he=[],Ce=arguments.length;Ce--;)he[Ce]=arguments[Ce];he=St(he,"hcg");var De=he[0],Xe=he[1],it=he[2],_t,pt,zt;it=it*255;var Lt=Xe*255;if(Xe===0)_t=pt=zt=it;else{De===360&&(De=0),De>360&&(De-=360),De<0&&(De+=360),De/=60;var Ir=li(De),Dr=De-Ir,rr=it*(1-Xe),Kr=rr+Lt*(1-Dr),fi=rr+Lt*Dr,Io=rr+Lt;switch(Ir){case 0:D=[Io,fi,rr],_t=D[0],pt=D[1],zt=D[2];break;case 1:U=[Kr,Io,rr],_t=U[0],pt=U[1],zt=U[2];break;case 2:Q=[rr,Io,fi],_t=Q[0],pt=Q[1],zt=Q[2];break;case 3:fe=[rr,Kr,Io],_t=fe[0],pt=fe[1],zt=fe[2];break;case 4:ve=[fi,rr,Io],_t=ve[0],pt=ve[1],zt=ve[2];break;case 5:Oe=[Io,rr,Kr],_t=Oe[0],pt=Oe[1],zt=Oe[2];break}}return[_t,pt,zt,he.length>3?he[3]:1]},si=oo,Ei=A.unpack,Cr=A.type,Ou=Z,un=X,xu=C,Om=Ba;un.prototype.hcg=function(){return Om(this._rgb)},Ou.hcg=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];return new(Function.prototype.bind.apply(un,[null].concat(D,["hcg"])))},xu.format.hcg=si,xu.autodetect.push({p:1,test:function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];if(D=Ei(D,"hcg"),Cr(D)==="array"&&D.length===3)return"hcg"}});var Hp=A.unpack,Ko=A.last,Lo=Math.round,Ha=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];var Q=Hp(D,"rgba"),fe=Q[0],ve=Q[1],Oe=Q[2],he=Q[3],Ce=Ko(D)||"auto";he===void 0&&(he=1),Ce==="auto"&&(Ce=he<1?"rgba":"rgb"),fe=Lo(fe),ve=Lo(ve),Oe=Lo(Oe);var De=fe<<16|ve<<8|Oe,Xe="000000"+De.toString(16);Xe=Xe.substr(Xe.length-6);var it="0"+Lo(he*255).toString(16);switch(it=it.substr(it.length-2),Ce.toLowerCase()){case"rgba":return"#"+Xe+it;case"argb":return"#"+it+Xe;default:return"#"+Xe}},fo=Ha,ba=/^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/,hl=/^#?([A-Fa-f0-9]{8}|[A-Fa-f0-9]{4})$/,Is=function(D){if(D.match(ba)){(D.length===4||D.length===7)&&(D=D.substr(1)),D.length===3&&(D=D.split(""),D=D[0]+D[0]+D[1]+D[1]+D[2]+D[2]);var U=parseInt(D,16),Q=U>>16,fe=U>>8&255,ve=U&255;return[Q,fe,ve,1]}if(D.match(hl)){(D.length===5||D.length===9)&&(D=D.substr(1)),D.length===4&&(D=D.split(""),D=D[0]+D[0]+D[1]+D[1]+D[2]+D[2]+D[3]+D[3]);var Oe=parseInt(D,16),he=Oe>>24&255,Ce=Oe>>16&255,De=Oe>>8&255,Xe=Math.round((Oe&255)/255*100)/100;return[he,Ce,De,Xe]}throw new Error("unknown hex color: "+D)},xm=Is,r0=Z,Nl=X,n0=A.type,Vp=C,Ps=fo;Nl.prototype.hex=function(D){return Ps(this._rgb,D)},r0.hex=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];return new(Function.prototype.bind.apply(Nl,[null].concat(D,["hex"])))},Vp.format.hex=xm,Vp.autodetect.push({p:4,test:function(D){for(var U=[],Q=arguments.length-1;Q-- >0;)U[Q]=arguments[Q+1];if(!U.length&&n0(D)==="string"&&[3,4,5,6,7,8,9].indexOf(D.length)>=0)return"hex"}});var _u=A.unpack,qp=A.TWOPI,_m=Math.min,Sm=Math.sqrt,o0=Math.acos,Kn=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];var Q=_u(D,"rgb"),fe=Q[0],ve=Q[1],Oe=Q[2];fe/=255,ve/=255,Oe/=255;var he,Ce=_m(fe,ve,Oe),De=(fe+ve+Oe)/3,Xe=De>0?1-Ce/De:0;return Xe===0?he=NaN:(he=(fe-ve+(fe-Oe))/2,he/=Sm((fe-ve)*(fe-ve)+(fe-Oe)*(ve-Oe)),he=o0(he),Oe>ve&&(he=qp-he),he/=qp),[he*360,Xe,De]},Up=Kn,jm=A.unpack,Ac=A.limit,Va=A.TWOPI,Mc=A.PITHIRD,ks=Math.cos,Im=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];D=jm(D,"hsi");var Q=D[0],fe=D[1],ve=D[2],Oe,he,Ce;return isNaN(Q)&&(Q=0),isNaN(fe)&&(fe=0),Q>360&&(Q-=360),Q<0&&(Q+=360),Q/=360,Q<1/3?(Ce=(1-fe)/3,Oe=(1+fe*ks(Va*Q)/ks(Mc-Va*Q))/3,he=1-(Ce+Oe)):Q<2/3?(Q-=1/3,Oe=(1-fe)/3,he=(1+fe*ks(Va*Q)/ks(Mc-Va*Q))/3,Ce=1-(Oe+he)):(Q-=2/3,he=(1-fe)/3,Ce=(1+fe*ks(Va*Q)/ks(Mc-Va*Q))/3,Oe=1-(he+Ce)),Oe=Ac(ve*Oe*3),he=Ac(ve*he*3),Ce=Ac(ve*Ce*3),[Oe*255,he*255,Ce*255,D.length>3?D[3]:1]},Ry=Im,i0=A.unpack,Pm=A.type,Su=Z,Es=X,Tc=C,zy=Up;Es.prototype.hsi=function(){return zy(this._rgb)},Su.hsi=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];return new(Function.prototype.bind.apply(Es,[null].concat(D,["hsi"])))},Tc.format.hsi=Ry,Tc.autodetect.push({p:2,test:function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];if(D=i0(D,"hsi"),Pm(D)==="array"&&D.length===3)return"hsi"}});var Ly=A.unpack,a0=A.type,Dy=Z,qa=X,Rc=C,l0=dr;qa.prototype.hsl=function(){return l0(this._rgb)},Dy.hsl=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];return new(Function.prototype.bind.apply(qa,[null].concat(D,["hsl"])))},Rc.format.hsl=So,Rc.autodetect.push({p:2,test:function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];if(D=Ly(D,"hsl"),a0(D)==="array"&&D.length===3)return"hsl"}});var ju=A.unpack,wa=Math.min,s0=Math.max,$p=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];D=ju(D,"rgb");var Q=D[0],fe=D[1],ve=D[2],Oe=wa(Q,fe,ve),he=s0(Q,fe,ve),Ce=he-Oe,De,Xe,it;return it=he/255,he===0?(De=Number.NaN,Xe=0):(Xe=Ce/he,Q===he&&(De=(fe-ve)/Ce),fe===he&&(De=2+(ve-Q)/Ce),ve===he&&(De=4+(Q-fe)/Ce),De*=60,De<0&&(De+=360)),[De,Xe,it]},u0=$p,c0=A.unpack,Ua=Math.floor,Iu=function(){for(var D,U,Q,fe,ve,Oe,he=[],Ce=arguments.length;Ce--;)he[Ce]=arguments[Ce];he=c0(he,"hsv");var De=he[0],Xe=he[1],it=he[2],_t,pt,zt;if(it*=255,Xe===0)_t=pt=zt=it;else{De===360&&(De=0),De>360&&(De-=360),De<0&&(De+=360),De/=60;var Lt=Ua(De),Ir=De-Lt,Dr=it*(1-Xe),rr=it*(1-Xe*Ir),Kr=it*(1-Xe*(1-Ir));switch(Lt){case 0:D=[it,Kr,Dr],_t=D[0],pt=D[1],zt=D[2];break;case 1:U=[rr,it,Dr],_t=U[0],pt=U[1],zt=U[2];break;case 2:Q=[Dr,it,Kr],_t=Q[0],pt=Q[1],zt=Q[2];break;case 3:fe=[Dr,rr,it],_t=fe[0],pt=fe[1],zt=fe[2];break;case 4:ve=[Kr,Dr,it],_t=ve[0],pt=ve[1],zt=ve[2];break;case 5:Oe=[it,Dr,rr],_t=Oe[0],pt=Oe[1],zt=Oe[2];break}}return[_t,pt,zt,he.length>3?he[3]:1]},Jp=Iu,Gp=A.unpack,Xp=A.type,p0=Z,Pu=X,Kp=C,Yp=u0;Pu.prototype.hsv=function(){return Yp(this._rgb)},p0.hsv=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];return new(Function.prototype.bind.apply(Pu,[null].concat(D,["hsv"])))},Kp.format.hsv=Jp,Kp.autodetect.push({p:2,test:function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];if(D=Gp(D,"hsv"),Xp(D)==="array"&&D.length===3)return"hsv"}});var Qp={Kn:18,Xn:.95047,Yn:1,Zn:1.08883,t0:.137931034,t1:.206896552,t2:.12841855,t3:.008856452},mo=Qp,zc=A.unpack,Zp=Math.pow,ef=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];var Q=zc(D,"rgb"),fe=Q[0],ve=Q[1],Oe=Q[2],he=km(fe,ve,Oe),Ce=he[0],De=he[1],Xe=he[2],it=116*De-16;return[it<0?0:it,500*(Ce-De),200*(De-Xe)]},Fl=function(D){return(D/=255)<=.04045?D/12.92:Zp((D+.055)/1.055,2.4)},tf=function(D){return D>mo.t3?Zp(D,1/3):D/mo.t2+mo.t0},km=function(D,U,Q){D=Fl(D),U=Fl(U),Q=Fl(Q);var fe=tf((.4124564*D+.3575761*U+.1804375*Q)/mo.Xn),ve=tf((.2126729*D+.7151522*U+.072175*Q)/mo.Yn),Oe=tf((.0193339*D+.119192*U+.9503041*Q)/mo.Zn);return[fe,ve,Oe]},Wl=ef,ui=Qp,Em=A.unpack,Cm=Math.pow,Am=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];D=Em(D,"lab");var Q=D[0],fe=D[1],ve=D[2],Oe,he,Ce,De,Xe,it;return he=(Q+16)/116,Oe=isNaN(fe)?he:he+fe/500,Ce=isNaN(ve)?he:he-ve/200,he=ui.Yn*Bl(he),Oe=ui.Xn*Bl(Oe),Ce=ui.Zn*Bl(Ce),De=Cs(3.2404542*Oe-1.5371385*he-.4985314*Ce),Xe=Cs(-.969266*Oe+1.8760108*he+.041556*Ce),it=Cs(.0556434*Oe-.2040259*he+1.0572252*Ce),[De,Xe,it,D.length>3?D[3]:1]},Cs=function(D){return 255*(D<=.00304?12.92*D:1.055*Cm(D,1/2.4)-.055)},Bl=function(D){return D>ui.t1?D*D*D:ui.t2*(D-ui.t0)},f0=Am,d0=A.unpack,m0=A.type,Mm=Z,h0=X,Lc=C,Tm=Wl;h0.prototype.lab=function(){return Tm(this._rgb)},Mm.lab=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];return new(Function.prototype.bind.apply(h0,[null].concat(D,["lab"])))},Lc.format.lab=f0,Lc.autodetect.push({p:2,test:function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];if(D=d0(D,"lab"),m0(D)==="array"&&D.length===3)return"lab"}});var Rm=A.unpack,Gr=A.RAD2DEG,Dc=Math.sqrt,As=Math.atan2,zm=Math.round,g0=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];var Q=Rm(D,"lab"),fe=Q[0],ve=Q[1],Oe=Q[2],he=Dc(ve*ve+Oe*Oe),Ce=(As(Oe,ve)*Gr+360)%360;return zm(he*1e4)===0&&(Ce=Number.NaN),[fe,he,Ce]},v0=g0,Lm=A.unpack,Nc=Wl,Ki=v0,cn=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];var Q=Lm(D,"rgb"),fe=Q[0],ve=Q[1],Oe=Q[2],he=Nc(fe,ve,Oe),Ce=he[0],De=he[1],Xe=he[2];return Ki(Ce,De,Xe)},Ny=cn,Yi=A.unpack,Dm=A.DEG2RAD,rf=Math.sin,Nm=Math.cos,ku=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];var Q=Yi(D,"lch"),fe=Q[0],ve=Q[1],Oe=Q[2];return isNaN(Oe)&&(Oe=0),Oe=Oe*Dm,[fe,Nm(Oe)*ve,rf(Oe)*ve]},y0=ku,Fc=A.unpack,Wc=y0,b0=f0,Fm=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];D=Fc(D,"lch");var Q=D[0],fe=D[1],ve=D[2],Oe=Wc(Q,fe,ve),he=Oe[0],Ce=Oe[1],De=Oe[2],Xe=b0(he,Ce,De),it=Xe[0],_t=Xe[1],pt=Xe[2];return[it,_t,pt,D.length>3?D[3]:1]},w0=Fm,Wm=A.unpack,Bm=w0,Fy=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];var Q=Wm(D,"hcl").reverse();return Bm.apply(void 0,Q)},Hm=Fy,nf=A.unpack,Wy=A.type,O0=Z,of=X,Oa=C,Vm=Ny;of.prototype.lch=function(){return Vm(this._rgb)},of.prototype.hcl=function(){return Vm(this._rgb).reverse()},O0.lch=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];return new(Function.prototype.bind.apply(of,[null].concat(D,["lch"])))},O0.hcl=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];return new(Function.prototype.bind.apply(of,[null].concat(D,["hcl"])))},Oa.format.lch=w0,Oa.format.hcl=Hm,["lch","hcl"].forEach(function(D){return Oa.autodetect.push({p:2,test:function(){for(var U=[],Q=arguments.length;Q--;)U[Q]=arguments[Q];if(U=nf(U,D),Wy(U)==="array"&&U.length===3)return D}})});var Xr={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflower:"#6495ed",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",laserlemon:"#ffff54",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrod:"#fafad2",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",maroon2:"#7f0000",maroon3:"#b03060",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",purple2:"#7f007f",purple3:"#a020f0",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},qm=Xr,x0=X,Um=C,By=A.type,Hl=qm,Eu=xm,$m=fo;x0.prototype.name=function(){for(var D=$m(this._rgb,"rgb"),U=0,Q=Object.keys(Hl);U0;)U[Q]=arguments[Q+1];if(!U.length&&By(D)==="string"&&Hl[D.toLowerCase()])return"named"}});var Oi=A.unpack,Jm=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];var Q=Oi(D,"rgb"),fe=Q[0],ve=Q[1],Oe=Q[2];return(fe<<16)+(ve<<8)+Oe},pn=Jm,Hy=A.type,Vy=function(D){if(Hy(D)=="number"&&D>=0&&D<=16777215){var U=D>>16,Q=D>>8&255,fe=D&255;return[U,Q,fe,1]}throw new Error("unknown num color: "+D)},Gm=Vy,qy=Z,Bc=X,Hc=C,$a=A.type,Cu=pn;Bc.prototype.num=function(){return Cu(this._rgb)},qy.num=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];return new(Function.prototype.bind.apply(Bc,[null].concat(D,["num"])))},Hc.format.num=Gm,Hc.autodetect.push({p:5,test:function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];if(D.length===1&&$a(D[0])==="number"&&D[0]>=0&&D[0]<=16777215)return"num"}});var Uy=Z,Au=X,Vl=C,Vc=A.unpack,af=A.type,Xm=Math.round;Au.prototype.rgb=function(D){return D===void 0&&(D=!0),D===!1?this._rgb.slice(0,3):this._rgb.slice(0,3).map(Xm)},Au.prototype.rgba=function(D){return D===void 0&&(D=!0),this._rgb.slice(0,4).map(function(U,Q){return Q<3?D===!1?U:Xm(U):U})},Uy.rgb=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];return new(Function.prototype.bind.apply(Au,[null].concat(D,["rgb"])))},Vl.format.rgb=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];var Q=Vc(D,"rgba");return Q[3]===void 0&&(Q[3]=1),Q},Vl.autodetect.push({p:3,test:function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];if(D=Vc(D,"rgba"),af(D)==="array"&&(D.length===3||D.length===4&&af(D[3])=="number"&&D[3]>=0&&D[3]<=1))return"rgb"}});var qc=Math.log,lf=function(D){var U=D/100,Q,fe,ve;return U<66?(Q=255,fe=U<6?0:-155.25485562709179-.44596950469579133*(fe=U-2)+104.49216199393888*qc(fe),ve=U<20?0:-254.76935184120902+.8274096064007395*(ve=U-10)+115.67994401066147*qc(ve)):(Q=351.97690566805693+.114206453784165*(Q=U-55)-40.25366309332127*qc(Q),fe=325.4494125711974+.07943456536662342*(fe=U-50)-28.0852963507957*qc(fe),ve=255),[Q,fe,ve,1]},Uc=lf,Mu=Uc,_0=A.unpack,S0=Math.round,Km=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];for(var Q=_0(D,"rgb"),fe=Q[0],ve=Q[2],Oe=1e3,he=4e4,Ce=.4,De;he-Oe>Ce;){De=(he+Oe)*.5;var Xe=Mu(De);Xe[2]/Xe[0]>=ve/fe?he=De:Oe=De}return S0(De)},$y=Km,j0=Z,$c=X,I0=C,Ym=$y;$c.prototype.temp=$c.prototype.kelvin=$c.prototype.temperature=function(){return Ym(this._rgb)},j0.temp=j0.kelvin=j0.temperature=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];return new(Function.prototype.bind.apply($c,[null].concat(D,["temp"])))},I0.format.temp=I0.format.kelvin=I0.format.temperature=Uc;var P0=A.unpack,k0=Math.cbrt,sf=Math.pow,Qm=Math.sign,Jy=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];var Q=P0(D,"rgb"),fe=Q[0],ve=Q[1],Oe=Q[2],he=[Ci(fe/255),Ci(ve/255),Ci(Oe/255)],Ce=he[0],De=he[1],Xe=he[2],it=k0(.4122214708*Ce+.5363325363*De+.0514459929*Xe),_t=k0(.2119034982*Ce+.6806995451*De+.1073969566*Xe),pt=k0(.0883024619*Ce+.2817188376*De+.6299787005*Xe);return[.2104542553*it+.793617785*_t-.0040720468*pt,1.9779984951*it-2.428592205*_t+.4505937099*pt,.0259040371*it+.7827717662*_t-.808675766*pt]},Zm=Jy;function Ci(D){var U=Math.abs(D);return U<.04045?D/12.92:(Qm(D)||1)*sf((U+.055)/1.055,2.4)}var Ms=A.unpack,Tu=Math.pow,Gy=Math.sign,eh=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];D=Ms(D,"lab");var Q=D[0],fe=D[1],ve=D[2],Oe=Tu(Q+.3963377774*fe+.2158037573*ve,3),he=Tu(Q-.1055613458*fe-.0638541728*ve,3),Ce=Tu(Q-.0894841775*fe-1.291485548*ve,3);return[255*E0(4.0767416621*Oe-3.3077115913*he+.2309699292*Ce),255*E0(-1.2684380046*Oe+2.6097574011*he-.3413193965*Ce),255*E0(-.0041960863*Oe-.7034186147*he+1.707614701*Ce),D.length>3?D[3]:1]},Jc=eh;function E0(D){var U=Math.abs(D);return U>.0031308?(Gy(D)||1)*(1.055*Tu(U,1/2.4)-.055):D*12.92}var uf=A.unpack,C0=A.type,th=Z,rh=X,gl=C,A0=Zm;rh.prototype.oklab=function(){return A0(this._rgb)},th.oklab=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];return new(Function.prototype.bind.apply(rh,[null].concat(D,["oklab"])))},gl.format.oklab=Jc,gl.autodetect.push({p:3,test:function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];if(D=uf(D,"oklab"),C0(D)==="array"&&D.length===3)return"oklab"}});var nh=A.unpack,oh=Zm,ih=v0,Xy=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];var Q=nh(D,"rgb"),fe=Q[0],ve=Q[1],Oe=Q[2],he=oh(fe,ve,Oe),Ce=he[0],De=he[1],Xe=he[2];return ih(Ce,De,Xe)},Ky=Xy,Yy=A.unpack,Qy=y0,Nn=Jc,oS=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];D=Yy(D,"lch");var Q=D[0],fe=D[1],ve=D[2],Oe=Qy(Q,fe,ve),he=Oe[0],Ce=Oe[1],De=Oe[2],Xe=Nn(he,Ce,De),it=Xe[0],_t=Xe[1],pt=Xe[2];return[it,_t,pt,D.length>3?D[3]:1]},iS=oS,M0=A.unpack,Zy=A.type,ah=Z,lh=X,T0=C,e2=Ky;lh.prototype.oklch=function(){return e2(this._rgb)},ah.oklch=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];return new(Function.prototype.bind.apply(lh,[null].concat(D,["oklch"])))},T0.format.oklch=iS,T0.autodetect.push({p:3,test:function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];if(D=M0(D,"oklch"),Zy(D)==="array"&&D.length===3)return"oklch"}});var sh=X,t2=A.type;sh.prototype.alpha=function(D,U){return U===void 0&&(U=!1),D!==void 0&&t2(D)==="number"?U?(this._rgb[3]=D,this):new sh([this._rgb[0],this._rgb[1],this._rgb[2],D],"rgb"):this._rgb[3]};var r2=X;r2.prototype.clipped=function(){return this._rgb._clipped||!1};var Ja=X,uh=Qp;Ja.prototype.darken=function(D){D===void 0&&(D=1);var U=this,Q=U.lab();return Q[0]-=uh.Kn*D,new Ja(Q,"lab").alpha(U.alpha(),!0)},Ja.prototype.brighten=function(D){return D===void 0&&(D=1),this.darken(-D)},Ja.prototype.darker=Ja.prototype.darken,Ja.prototype.brighter=Ja.prototype.brighten;var ch=X;ch.prototype.get=function(D){var U=D.split("."),Q=U[0],fe=U[1],ve=this[Q]();if(fe){var Oe=Q.indexOf(fe)-(Q.substr(0,2)==="ok"?2:0);if(Oe>-1)return ve[Oe];throw new Error("unknown channel "+fe+" in mode "+Q)}else return ve};var Ga=X,Ru=A.type,cf=Math.pow,ph=1e-7,Ts=20;Ga.prototype.luminance=function(D){if(D!==void 0&&Ru(D)==="number"){if(D===0)return new Ga([0,0,0,this._rgb[3]],"rgb");if(D===1)return new Ga([255,255,255,this._rgb[3]],"rgb");var U=this.luminance(),Q="rgb",fe=Ts,ve=function(he,Ce){var De=he.interpolate(Ce,.5,Q),Xe=De.luminance();return Math.abs(D-Xe)D?ve(he,De):ve(De,Ce)},Oe=(U>D?ve(new Ga([0,0,0]),this):ve(this,new Ga([255,255,255]))).rgb();return new Ga(Oe.concat([this._rgb[3]]))}return Yo.apply(void 0,this._rgb.slice(0,3))};var Yo=function(D,U,Q){return D=ci(D),U=ci(U),Q=ci(Q),.2126*D+.7152*U+.0722*Q},ci=function(D){return D/=255,D<=.03928?D/12.92:cf((D+.055)/1.055,2.4)},ho={},Xa=X,ql=A.type,vl=ho,Rs=function(D,U,Q){Q===void 0&&(Q=.5);for(var fe=[],ve=arguments.length-3;ve-- >0;)fe[ve]=arguments[ve+3];var Oe=fe[0]||"lrgb";if(!vl[Oe]&&!fe.length&&(Oe=Object.keys(vl)[0]),!vl[Oe])throw new Error("interpolation mode "+Oe+" is not defined");return ql(D)!=="object"&&(D=new Xa(D)),ql(U)!=="object"&&(U=new Xa(U)),vl[Oe](D,U,Q).alpha(D.alpha()+Q*(U.alpha()-D.alpha()))},fh=X,dh=Rs;fh.prototype.mix=fh.prototype.interpolate=function(D,U){U===void 0&&(U=.5);for(var Q=[],fe=arguments.length-2;fe-- >0;)Q[fe]=arguments[fe+2];return dh.apply(void 0,[this,D,U].concat(Q))};var R0=X;R0.prototype.premultiply=function(D){D===void 0&&(D=!1);var U=this._rgb,Q=U[3];return D?(this._rgb=[U[0]*Q,U[1]*Q,U[2]*Q,Q],this):new R0([U[0]*Q,U[1]*Q,U[2]*Q,Q],"rgb")};var Gc=X,z0=Qp;Gc.prototype.saturate=function(D){D===void 0&&(D=1);var U=this,Q=U.lch();return Q[1]+=z0.Kn*D,Q[1]<0&&(Q[1]=0),new Gc(Q,"lch").alpha(U.alpha(),!0)},Gc.prototype.desaturate=function(D){return D===void 0&&(D=1),this.saturate(-D)};var yl=X,pf=A.type;yl.prototype.set=function(D,U,Q){Q===void 0&&(Q=!1);var fe=D.split("."),ve=fe[0],Oe=fe[1],he=this[ve]();if(Oe){var Ce=ve.indexOf(Oe)-(ve.substr(0,2)==="ok"?2:0);if(Ce>-1){if(pf(U)=="string")switch(U.charAt(0)){case"+":he[Ce]+=+U;break;case"-":he[Ce]+=+U;break;case"*":he[Ce]*=+U.substr(1);break;case"/":he[Ce]/=+U.substr(1);break;default:he[Ce]=+U}else if(pf(U)==="number")he[Ce]=U;else throw new Error("unsupported value for Color.set");var De=new yl(he,ve);return Q?(this._rgb=De._rgb,this):De}throw new Error("unknown channel "+Oe+" in mode "+ve)}else return he};var L0=X,n2=function(D,U,Q){var fe=D._rgb,ve=U._rgb;return new L0(fe[0]+Q*(ve[0]-fe[0]),fe[1]+Q*(ve[1]-fe[1]),fe[2]+Q*(ve[2]-fe[2]),"rgb")};ho.rgb=n2;var D0=X,Qi=Math.sqrt,zu=Math.pow,N0=function(D,U,Q){var fe=D._rgb,ve=fe[0],Oe=fe[1],he=fe[2],Ce=U._rgb,De=Ce[0],Xe=Ce[1],it=Ce[2];return new D0(Qi(zu(ve,2)*(1-Q)+zu(De,2)*Q),Qi(zu(Oe,2)*(1-Q)+zu(Xe,2)*Q),Qi(zu(he,2)*(1-Q)+zu(it,2)*Q),"rgb")};ho.lrgb=N0;var F0=X,ff=function(D,U,Q){var fe=D.lab(),ve=U.lab();return new F0(fe[0]+Q*(ve[0]-fe[0]),fe[1]+Q*(ve[1]-fe[1]),fe[2]+Q*(ve[2]-fe[2]),"lab")};ho.lab=ff;var df=X,zs=function(D,U,Q,fe){var ve,Oe,he,Ce;fe==="hsl"?(he=D.hsl(),Ce=U.hsl()):fe==="hsv"?(he=D.hsv(),Ce=U.hsv()):fe==="hcg"?(he=D.hcg(),Ce=U.hcg()):fe==="hsi"?(he=D.hsi(),Ce=U.hsi()):fe==="lch"||fe==="hcl"?(fe="hcl",he=D.hcl(),Ce=U.hcl()):fe==="oklch"&&(he=D.oklch().reverse(),Ce=U.oklch().reverse());var De,Xe,it,_t,pt,zt;(fe.substr(0,1)==="h"||fe==="oklch")&&(ve=he,De=ve[0],it=ve[1],pt=ve[2],Oe=Ce,Xe=Oe[0],_t=Oe[1],zt=Oe[2]);var Lt,Ir,Dr,rr;return!isNaN(De)&&!isNaN(Xe)?(Xe>De&&Xe-De>180?rr=Xe-(De+360):Xe180?rr=Xe+360-De:rr=Xe-De,Ir=De+Q*rr):isNaN(De)?isNaN(Xe)?Ir=Number.NaN:(Ir=Xe,(pt==1||pt==0)&&fe!="hsv"&&(Lt=_t)):(Ir=De,(zt==1||zt==0)&&fe!="hsv"&&(Lt=it)),Lt===void 0&&(Lt=it+Q*(_t-it)),Dr=pt+Q*(zt-pt),fe==="oklch"?new df([Dr,Lt,Ir],fe):new df([Ir,Lt,Dr],fe)},W0=zs,mf=function(D,U,Q){return W0(D,U,Q,"lch")};ho.lch=mf,ho.hcl=mf;var hf=X,mh=function(D,U,Q){var fe=D.num(),ve=U.num();return new hf(fe+Q*(ve-fe),"num")};ho.num=mh;var Lu=zs,Du=function(D,U,Q){return Lu(D,U,Q,"hcg")};ho.hcg=Du;var hh=zs,Ul=function(D,U,Q){return hh(D,U,Q,"hsi")};ho.hsi=Ul;var B0=zs,H0=function(D,U,Q){return B0(D,U,Q,"hsl")};ho.hsl=H0;var o2=zs,gh=function(D,U,Q){return o2(D,U,Q,"hsv")};ho.hsv=gh;var vh=X,yh=function(D,U,Q){var fe=D.oklab(),ve=U.oklab();return new vh(fe[0]+Q*(ve[0]-fe[0]),fe[1]+Q*(ve[1]-fe[1]),fe[2]+Q*(ve[2]-fe[2]),"oklab")};ho.oklab=yh;var Xc=zs,gf=function(D,U,Q){return Xc(D,U,Q,"oklch")};ho.oklch=gf;var V0=X,i2=A.clip_rgb,vf=Math.pow,xa=Math.sqrt,Kc=Math.PI,Mn=Math.cos,bh=Math.sin,Nu=Math.atan2,ut=function(D,U,Q){U===void 0&&(U="lrgb"),Q===void 0&&(Q=null);var fe=D.length;Q||(Q=Array.from(new Array(fe)).map(function(){return 1}));var ve=fe/Q.reduce(function(Ir,Dr){return Ir+Dr});if(Q.forEach(function(Ir,Dr){Q[Dr]*=ve}),D=D.map(function(Ir){return new V0(Ir)}),U==="lrgb")return q0(D,Q);for(var Oe=D.shift(),he=Oe.get(U),Ce=[],De=0,Xe=0,it=0;it=360;)Lt-=360;he[zt]=Lt}else he[zt]=he[zt]/Ce[zt];return pt/=fe,new V0(he,U).alpha(pt>.99999?1:pt,!0)},q0=function(D,U){for(var Q=D.length,fe=[0,0,0,0],ve=0;ve.9999999&&(fe[3]=1),new V0(i2(fe))},pi=Z,_a=A.type,Zr=Math.pow,jo=function(D){var U="rgb",Q=pi("#ccc"),fe=0,ve=[0,1],Oe=[],he=[0,0],Ce=!1,De=[],Xe=!1,it=0,_t=1,pt=!1,zt={},Lt=!0,Ir=1,Dr=function(ct){if(ct=ct||["#fff","#000"],ct&&_a(ct)==="string"&&pi.brewer&&pi.brewer[ct.toLowerCase()]&&(ct=pi.brewer[ct.toLowerCase()]),_a(ct)==="array"){ct.length===1&&(ct=[ct[0],ct[0]]),ct=ct.slice(0);for(var Yt=0;Yt=Ce[Mr];)Mr++;return Mr-1}return 0},Kr=function(ct){return ct},fi=function(ct){return ct},Io=function(ct,Yt){var Mr,Tr;if(Yt==null&&(Yt=!1),isNaN(ct)||ct===null)return Q;if(Yt)Tr=ct;else if(Ce&&Ce.length>2){var Pr=rr(ct);Tr=Pr/(Ce.length-2)}else _t!==it?Tr=(ct-it)/(_t-it):Tr=1;Tr=fi(Tr),Yt||(Tr=Kr(Tr)),Ir!==1&&(Tr=Zr(Tr,Ir)),Tr=he[0]+Tr*(1-he[0]-he[1]),Tr=Math.min(1,Math.max(0,Tr));var Fn=Math.floor(Tr*1e4);if(Lt&&zt[Fn])Mr=zt[Fn];else{if(_a(De)==="array")for(var Yr=0;Yr=on&&Yr===Oe.length-1){Mr=De[Yr];break}if(Tr>on&&Tr2){var Yr=ct.map(function(wn,jn){return jn/(ct.length-1)}),on=ct.map(function(wn){return(wn-it)/(_t-it)});on.every(function(wn,jn){return Yr[jn]===wn})||(fi=function(wn){if(wn<=0||wn>=1)return wn;for(var jn=0;wn>=on[jn+1];)jn++;var Ol=(wn-on[jn])/(on[jn+1]-on[jn]),Wn=Yr[jn]+Ol*(Yr[jn+1]-Yr[jn]);return Wn})}}return ve=[it,_t],qr},qr.mode=function(ct){return arguments.length?(U=ct,xi(),qr):U},qr.range=function(ct,Yt){return Dr(ct),qr},qr.out=function(ct){return Xe=ct,qr},qr.spread=function(ct){return arguments.length?(fe=ct,qr):fe},qr.correctLightness=function(ct){return ct==null&&(ct=!0),pt=ct,xi(),pt?Kr=function(Yt){for(var Mr=Io(0,!0).lab()[0],Tr=Io(1,!0).lab()[0],Pr=Mr>Tr,Fn=Io(Yt,!0).lab()[0],Yr=Mr+(Tr-Mr)*Yt,on=Fn-Yr,wn=0,jn=1,Ol=20;Math.abs(on)>.01&&Ol-- >0;)(function(){return Pr&&(on*=-1),on<0?(wn=Yt,Yt+=(jn-Yt)*.5):(jn=Yt,Yt+=(wn-Yt)*.5),Fn=Io(Yt,!0).lab()[0],on=Fn-Yr})();return Yt}:Kr=function(Yt){return Yt},qr},qr.padding=function(ct){return ct!=null?(_a(ct)==="number"&&(ct=[ct,ct]),he=ct,qr):he},qr.colors=function(ct,Yt){arguments.length<2&&(Yt="hex");var Mr=[];if(arguments.length===0)Mr=De.slice(0);else if(ct===1)Mr=[qr(.5)];else if(ct>1){var Tr=ve[0],Pr=ve[1]-Tr;Mr=wh(0,ct,!1).map(function(jn){return qr(Tr+jn/(ct-1)*Pr)})}else{D=[];var Fn=[];if(Ce&&Ce.length>2)for(var Yr=1,on=Ce.length,wn=1<=on;wn?Yron;wn?Yr++:Yr--)Fn.push((Ce[Yr-1]+Ce[Yr])*.5);else Fn=ve;Mr=Fn.map(function(jn){return qr(jn)})}return pi[Yt]&&(Mr=Mr.map(function(jn){return jn[Yt]()})),Mr},qr.cache=function(ct){return ct!=null?(Lt=ct,qr):Lt},qr.gamma=function(ct){return ct!=null?(Ir=ct,qr):Ir},qr.nodata=function(ct){return ct!=null?(Q=pi(ct),qr):Q},qr};function wh(D,U,Q){for(var fe=[],ve=DOe;ve?he++:he--)fe.push(he);return fe}var Fu=X,aS=jo,lS=function(D){for(var U=[1,1],Q=1;Q=5){var Xe,it,_t;Xe=D.map(function(pt){return pt.lab()}),_t=D.length-1,it=lS(_t),ve=function(pt){var zt=1-pt,Lt=[0,1,2].map(function(Ir){return Xe.reduce(function(Dr,rr,Kr){return Dr+it[Kr]*Math.pow(zt,_t-Kr)*Math.pow(pt,Kr)*rr[Ir]},0)});return new Fu(Lt,"lab")}}else throw new RangeError("No point in running bezier with only one color.");return ve},uS=function(D){var U=sS(D);return U.scale=function(){return aS(U)},U},Oh=Z,go=function(D,U,Q){if(!go[Q])throw new Error("unknown blend mode "+Q);return go[Q](D,U)},Zi=function(D){return function(U,Q){var fe=Oh(Q).rgb(),ve=Oh(U).rgb();return Oh.rgb(D(fe,ve))}},bl=function(D){return function(U,Q){var fe=[];return fe[0]=D(U[0],Q[0]),fe[1]=D(U[1],Q[1]),fe[2]=D(U[2],Q[2]),fe}},a2=function(D){return D},l2=function(D,U){return D*U/255},U0=function(D,U){return D>U?U:D},xh=function(D,U){return D>U?D:U},Do=function(D,U){return 255*(1-(1-D/255)*(1-U/255))},yf=function(D,U){return U<128?2*D*U/255:255*(1-2*(1-D/255)*(1-U/255))},$0=function(D,U){return 255*(1-(1-U/255)/(D/255))},ea=function(D,U){return D===255?255:(D=255*(U/255)/(1-D/255),D>255?255:D)};go.normal=Zi(bl(a2)),go.multiply=Zi(bl(l2)),go.screen=Zi(bl(Do)),go.overlay=Zi(bl(yf)),go.darken=Zi(bl(U0)),go.lighten=Zi(bl(xh)),go.dodge=Zi(bl(ea)),go.burn=Zi(bl($0));for(var _h=go,bf=A.type,s2=A.clip_rgb,u2=A.TWOPI,wf=Math.pow,c2=Math.sin,Sh=Math.cos,J0=Z,jh=function(D,U,Q,fe,ve){D===void 0&&(D=300),U===void 0&&(U=-1.5),Q===void 0&&(Q=1),fe===void 0&&(fe=1),ve===void 0&&(ve=[0,1]);var Oe=0,he;bf(ve)==="array"?he=ve[1]-ve[0]:(he=0,ve=[ve,ve]);var Ce=function(De){var Xe=u2*((D+120)/360+U*De),it=wf(ve[0]+he*De,fe),_t=Oe!==0?Q[0]+De*Oe:Q,pt=_t*it*(1-it)/2,zt=Sh(Xe),Lt=c2(Xe),Ir=it+pt*(-.14861*zt+1.78277*Lt),Dr=it+pt*(-.29227*zt-.90649*Lt),rr=it+pt*(1.97294*zt);return J0(s2([Ir*255,Dr*255,rr*255,1]))};return Ce.start=function(De){return De==null?D:(D=De,Ce)},Ce.rotations=function(De){return De==null?U:(U=De,Ce)},Ce.gamma=function(De){return De==null?fe:(fe=De,Ce)},Ce.hue=function(De){return De==null?Q:(Q=De,bf(Q)==="array"?(Oe=Q[1]-Q[0],Oe===0&&(Q=Q[1])):Oe=0,Ce)},Ce.lightness=function(De){return De==null?ve:(bf(De)==="array"?(ve=De,he=De[1]-De[0]):(ve=[De,De],he=0),Ce)},Ce.scale=function(){return J0.scale(Ce)},Ce.hue(Q),Ce},Ih=X,p2="0123456789abcdef",Wu=Math.floor,Ls=Math.random,f2=function(){for(var D="#",U=0;U<6;U++)D+=p2.charAt(Wu(Ls()*16));return new Ih(D,"hex")},G0=f,X0=Math.log,d2=Math.pow,m2=Math.floor,Ph=Math.abs,wl=function(D,U){U===void 0&&(U=null);var Q={min:Number.MAX_VALUE,max:Number.MAX_VALUE*-1,sum:0,values:[],count:0};return G0(D)==="object"&&(D=Object.values(D)),D.forEach(function(fe){U&&G0(fe)==="object"&&(fe=fe[U]),fe!=null&&!isNaN(fe)&&(Q.values.push(fe),Q.sum+=fe,feQ.max&&(Q.max=fe),Q.count+=1)}),Q.domain=[Q.min,Q.max],Q.limits=function(fe,ve){return Of(Q,fe,ve)},Q},Of=function(D,U,Q){U===void 0&&(U="equal"),Q===void 0&&(Q=7),G0(D)=="array"&&(D=wl(D));var fe=D.min,ve=D.max,Oe=D.values.sort(function(K0,Eh){return K0-Eh});if(Q===1)return[fe,ve];var he=[];if(U.substr(0,1)==="c"&&(he.push(fe),he.push(ve)),U.substr(0,1)==="e"){he.push(fe);for(var Ce=1;Ce 0");var De=Math.LOG10E*X0(fe),Xe=Math.LOG10E*X0(ve);he.push(fe);for(var it=1;it200&&(fi=!1)}for(var Bu={},_i=0;_ife?(Q+.05)/(fe+.05):(fe+.05)/(Q+.05)},kh=X,bn=Math.sqrt,vo=Math.pow,h2=Math.min,Yc=Math.max,Ns=Math.atan2,Qc=Math.abs,jr=Math.cos,g=Math.sin,j=Math.exp,W=Math.PI,q=function(D,U,Q,fe,ve){Q===void 0&&(Q=1),fe===void 0&&(fe=1),ve===void 0&&(ve=1);var Oe=function(ep){return 360*ep/(2*W)},he=function(ep){return 2*W*ep/360};D=new kh(D),U=new kh(U);var Ce=Array.from(D.lab()),De=Ce[0],Xe=Ce[1],it=Ce[2],_t=Array.from(U.lab()),pt=_t[0],zt=_t[1],Lt=_t[2],Ir=(De+pt)/2,Dr=bn(vo(Xe,2)+vo(it,2)),rr=bn(vo(zt,2)+vo(Lt,2)),Kr=(Dr+rr)/2,fi=.5*(1-bn(vo(Kr,7)/(vo(Kr,7)+vo(25,7)))),Io=Xe*(1+fi),xi=zt*(1+fi),qr=bn(vo(Io,2)+vo(it,2)),ct=bn(vo(xi,2)+vo(Lt,2)),Yt=(qr+ct)/2,Mr=Oe(Ns(it,Io)),Tr=Oe(Ns(Lt,xi)),Pr=Mr>=0?Mr:Mr+360,Fn=Tr>=0?Tr:Tr+360,Yr=Qc(Pr-Fn)>180?(Pr+Fn+360)/2:(Pr+Fn)/2,on=1-.17*jr(he(Yr-30))+.24*jr(he(2*Yr))+.32*jr(he(3*Yr+6))-.2*jr(he(4*Yr-63)),wn=Fn-Pr;wn=Qc(wn)<=180?wn:Fn<=Pr?wn+360:wn-360,wn=2*bn(qr*ct)*g(he(wn)/2);var jn=pt-De,Ol=ct-qr,Wn=1+.015*vo(Ir-50,2)/bn(20+vo(Ir-50,2)),Bu=1+.045*Yt,_i=1+.015*Yt*on,Zc=30*j(-vo((Yr-275)/25,2)),Fs=2*bn(vo(Yt,7)/(vo(Yt,7)+vo(25,7))),Hu=-Fs*g(2*he(Zc)),xf=bn(vo(jn/(Q*Wn),2)+vo(Ol/(fe*Bu),2)+vo(wn/(ve*_i),2)+Hu*(Ol/(fe*Bu))*(wn/(ve*_i)));return Yc(0,h2(100,xf))},te=X,ge=function(D,U,Q){Q===void 0&&(Q="lab"),D=new te(D),U=new te(U);var fe=D.get(Q),ve=U.get(Q),Oe=0;for(var he in fe){var Ce=(fe[he]||0)-(ve[he]||0);Oe+=Ce*Ce}return Math.sqrt(Oe)},He=X,It=function(){for(var D=[],U=arguments.length;U--;)D[U]=arguments[U];try{return new(Function.prototype.bind.apply(He,[null].concat(D))),!0}catch{return!1}},Zt=Z,Ar=jo,No={cool:function(){return Ar([Zt.hsl(180,1,.9),Zt.hsl(250,.7,.4)])},hot:function(){return Ar(["#000","#f00","#ff0","#fff"]).mode("rgb")}},Ai={OrRd:["#fff7ec","#fee8c8","#fdd49e","#fdbb84","#fc8d59","#ef6548","#d7301f","#b30000","#7f0000"],PuBu:["#fff7fb","#ece7f2","#d0d1e6","#a6bddb","#74a9cf","#3690c0","#0570b0","#045a8d","#023858"],BuPu:["#f7fcfd","#e0ecf4","#bfd3e6","#9ebcda","#8c96c6","#8c6bb1","#88419d","#810f7c","#4d004b"],Oranges:["#fff5eb","#fee6ce","#fdd0a2","#fdae6b","#fd8d3c","#f16913","#d94801","#a63603","#7f2704"],BuGn:["#f7fcfd","#e5f5f9","#ccece6","#99d8c9","#66c2a4","#41ae76","#238b45","#006d2c","#00441b"],YlOrBr:["#ffffe5","#fff7bc","#fee391","#fec44f","#fe9929","#ec7014","#cc4c02","#993404","#662506"],YlGn:["#ffffe5","#f7fcb9","#d9f0a3","#addd8e","#78c679","#41ab5d","#238443","#006837","#004529"],Reds:["#fff5f0","#fee0d2","#fcbba1","#fc9272","#fb6a4a","#ef3b2c","#cb181d","#a50f15","#67000d"],RdPu:["#fff7f3","#fde0dd","#fcc5c0","#fa9fb5","#f768a1","#dd3497","#ae017e","#7a0177","#49006a"],Greens:["#f7fcf5","#e5f5e0","#c7e9c0","#a1d99b","#74c476","#41ab5d","#238b45","#006d2c","#00441b"],YlGnBu:["#ffffd9","#edf8b1","#c7e9b4","#7fcdbb","#41b6c4","#1d91c0","#225ea8","#253494","#081d58"],Purples:["#fcfbfd","#efedf5","#dadaeb","#bcbddc","#9e9ac8","#807dba","#6a51a3","#54278f","#3f007d"],GnBu:["#f7fcf0","#e0f3db","#ccebc5","#a8ddb5","#7bccc4","#4eb3d3","#2b8cbe","#0868ac","#084081"],Greys:["#ffffff","#f0f0f0","#d9d9d9","#bdbdbd","#969696","#737373","#525252","#252525","#000000"],YlOrRd:["#ffffcc","#ffeda0","#fed976","#feb24c","#fd8d3c","#fc4e2a","#e31a1c","#bd0026","#800026"],PuRd:["#f7f4f9","#e7e1ef","#d4b9da","#c994c7","#df65b0","#e7298a","#ce1256","#980043","#67001f"],Blues:["#f7fbff","#deebf7","#c6dbef","#9ecae1","#6baed6","#4292c6","#2171b5","#08519c","#08306b"],PuBuGn:["#fff7fb","#ece2f0","#d0d1e6","#a6bddb","#67a9cf","#3690c0","#02818a","#016c59","#014636"],Viridis:["#440154","#482777","#3f4a8a","#31678e","#26838f","#1f9d8a","#6cce5a","#b6de2b","#fee825"],Spectral:["#9e0142","#d53e4f","#f46d43","#fdae61","#fee08b","#ffffbf","#e6f598","#abdda4","#66c2a5","#3288bd","#5e4fa2"],RdYlGn:["#a50026","#d73027","#f46d43","#fdae61","#fee08b","#ffffbf","#d9ef8b","#a6d96a","#66bd63","#1a9850","#006837"],RdBu:["#67001f","#b2182b","#d6604d","#f4a582","#fddbc7","#f7f7f7","#d1e5f0","#92c5de","#4393c3","#2166ac","#053061"],PiYG:["#8e0152","#c51b7d","#de77ae","#f1b6da","#fde0ef","#f7f7f7","#e6f5d0","#b8e186","#7fbc41","#4d9221","#276419"],PRGn:["#40004b","#762a83","#9970ab","#c2a5cf","#e7d4e8","#f7f7f7","#d9f0d3","#a6dba0","#5aae61","#1b7837","#00441b"],RdYlBu:["#a50026","#d73027","#f46d43","#fdae61","#fee090","#ffffbf","#e0f3f8","#abd9e9","#74add1","#4575b4","#313695"],BrBG:["#543005","#8c510a","#bf812d","#dfc27d","#f6e8c3","#f5f5f5","#c7eae5","#80cdc1","#35978f","#01665e","#003c30"],RdGy:["#67001f","#b2182b","#d6604d","#f4a582","#fddbc7","#ffffff","#e0e0e0","#bababa","#878787","#4d4d4d","#1a1a1a"],PuOr:["#7f3b08","#b35806","#e08214","#fdb863","#fee0b6","#f7f7f7","#d8daeb","#b2abd2","#8073ac","#542788","#2d004b"],Set2:["#66c2a5","#fc8d62","#8da0cb","#e78ac3","#a6d854","#ffd92f","#e5c494","#b3b3b3"],Accent:["#7fc97f","#beaed4","#fdc086","#ffff99","#386cb0","#f0027f","#bf5b17","#666666"],Set1:["#e41a1c","#377eb8","#4daf4a","#984ea3","#ff7f00","#ffff33","#a65628","#f781bf","#999999"],Set3:["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69","#fccde5","#d9d9d9","#bc80bd","#ccebc5","#ffed6f"],Dark2:["#1b9e77","#d95f02","#7570b3","#e7298a","#66a61e","#e6ab02","#a6761d","#666666"],Paired:["#a6cee3","#1f78b4","#b2df8a","#33a02c","#fb9a99","#e31a1c","#fdbf6f","#ff7f00","#cab2d6","#6a3d9a","#ffff99","#b15928"],Pastel2:["#b3e2cd","#fdcdac","#cbd5e8","#f4cae4","#e6f5c9","#fff2ae","#f1e2cc","#cccccc"],Pastel1:["#fbb4ae","#b3cde3","#ccebc5","#decbe4","#fed9a6","#ffffcc","#e5d8bd","#fddaec","#f2f2f2"]},Ya=0,Sa=Object.keys(Ai);Ya{function fIe(){this.__data__=[],this.size=0}Wle.exports=fIe});var uk=Ie((iDt,Hle)=>{function dIe(e,t){return e===t||e!==e&&t!==t}Hle.exports=dIe});var t5=Ie((aDt,Vle)=>{var mIe=uk();function hIe(e,t){for(var n=e.length;n--;)if(mIe(e[n][0],t))return n;return-1}Vle.exports=hIe});var Ule=Ie((lDt,qle)=>{var gIe=t5(),vIe=Array.prototype,yIe=vIe.splice;function bIe(e){var t=this.__data__,n=gIe(t,e);if(n<0)return!1;var r=t.length-1;return n==r?t.pop():yIe.call(t,n,1),--this.size,!0}qle.exports=bIe});var Jle=Ie((sDt,$le)=>{var wIe=t5();function OIe(e){var t=this.__data__,n=wIe(t,e);return n<0?void 0:t[n][1]}$le.exports=OIe});var Xle=Ie((uDt,Gle)=>{var xIe=t5();function _Ie(e){return xIe(this.__data__,e)>-1}Gle.exports=_Ie});var Yle=Ie((cDt,Kle)=>{var SIe=t5();function jIe(e,t){var n=this.__data__,r=SIe(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this}Kle.exports=jIe});var r5=Ie((pDt,Qle)=>{var IIe=Ble(),PIe=Ule(),kIe=Jle(),EIe=Xle(),CIe=Yle();function gv(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t{var AIe=r5();function MIe(){this.__data__=new AIe,this.size=0}Zle.exports=MIe});var rse=Ie((dDt,tse)=>{function TIe(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n}tse.exports=TIe});var ose=Ie((mDt,nse)=>{function RIe(e){return this.__data__.get(e)}nse.exports=RIe});var ase=Ie((hDt,ise)=>{function zIe(e){return this.__data__.has(e)}ise.exports=zIe});var FN=Ie((gDt,lse)=>{var LIe=typeof global=="object"&&global&&global.Object===Object&&global;lse.exports=LIe});var eu=Ie((vDt,sse)=>{var DIe=FN(),NIe=typeof self=="object"&&self&&self.Object===Object&&self,FIe=DIe||NIe||Function("return this")();sse.exports=FIe});var F1=Ie((yDt,use)=>{var WIe=eu(),BIe=WIe.Symbol;use.exports=BIe});var dse=Ie((bDt,fse)=>{var cse=F1(),pse=Object.prototype,HIe=pse.hasOwnProperty,VIe=pse.toString,n5=cse?cse.toStringTag:void 0;function qIe(e){var t=HIe.call(e,n5),n=e[n5];try{e[n5]=void 0;var r=!0}catch{}var o=VIe.call(e);return r&&(t?e[n5]=n:delete e[n5]),o}fse.exports=qIe});var hse=Ie((wDt,mse)=>{var UIe=Object.prototype,$Ie=UIe.toString;function JIe(e){return $Ie.call(e)}mse.exports=JIe});var sc=Ie((ODt,yse)=>{var gse=F1(),GIe=dse(),XIe=hse(),KIe="[object Null]",YIe="[object Undefined]",vse=gse?gse.toStringTag:void 0;function QIe(e){return e==null?e===void 0?YIe:KIe:vse&&vse in Object(e)?GIe(e):XIe(e)}yse.exports=QIe});var W1=Ie((xDt,bse)=>{function ZIe(e){var t=typeof e;return e!=null&&(t=="object"||t=="function")}bse.exports=ZIe});var ck=Ie((_Dt,wse)=>{var ePe=sc(),tPe=W1(),rPe="[object AsyncFunction]",nPe="[object Function]",oPe="[object GeneratorFunction]",iPe="[object Proxy]";function aPe(e){if(!tPe(e))return!1;var t=ePe(e);return t==nPe||t==oPe||t==rPe||t==iPe}wse.exports=aPe});var xse=Ie((SDt,Ose)=>{var lPe=eu(),sPe=lPe["__core-js_shared__"];Ose.exports=sPe});var jse=Ie((jDt,Sse)=>{var WN=xse(),_se=function(){var e=/[^.]+$/.exec(WN&&WN.keys&&WN.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}();function uPe(e){return!!_se&&_se in e}Sse.exports=uPe});var BN=Ie((IDt,Ise)=>{var cPe=Function.prototype,pPe=cPe.toString;function fPe(e){if(e!=null){try{return pPe.call(e)}catch{}try{return e+""}catch{}}return""}Ise.exports=fPe});var kse=Ie((PDt,Pse)=>{var dPe=ck(),mPe=jse(),hPe=W1(),gPe=BN(),vPe=/[\\^$.*+?()[\]{}|]/g,yPe=/^\[object .+?Constructor\]$/,bPe=Function.prototype,wPe=Object.prototype,OPe=bPe.toString,xPe=wPe.hasOwnProperty,_Pe=RegExp("^"+OPe.call(xPe).replace(vPe,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function SPe(e){if(!hPe(e)||mPe(e))return!1;var t=dPe(e)?_Pe:yPe;return t.test(gPe(e))}Pse.exports=SPe});var Cse=Ie((kDt,Ese)=>{function jPe(e,t){return e?.[t]}Ese.exports=jPe});var Id=Ie((EDt,Ase)=>{var IPe=kse(),PPe=Cse();function kPe(e,t){var n=PPe(e,t);return IPe(n)?n:void 0}Ase.exports=kPe});var pk=Ie((CDt,Mse)=>{var EPe=Id(),CPe=eu(),APe=EPe(CPe,"Map");Mse.exports=APe});var o5=Ie((ADt,Tse)=>{var MPe=Id(),TPe=MPe(Object,"create");Tse.exports=TPe});var Lse=Ie((MDt,zse)=>{var Rse=o5();function RPe(){this.__data__=Rse?Rse(null):{},this.size=0}zse.exports=RPe});var Nse=Ie((TDt,Dse)=>{function zPe(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}Dse.exports=zPe});var Wse=Ie((RDt,Fse)=>{var LPe=o5(),DPe="__lodash_hash_undefined__",NPe=Object.prototype,FPe=NPe.hasOwnProperty;function WPe(e){var t=this.__data__;if(LPe){var n=t[e];return n===DPe?void 0:n}return FPe.call(t,e)?t[e]:void 0}Fse.exports=WPe});var Hse=Ie((zDt,Bse)=>{var BPe=o5(),HPe=Object.prototype,VPe=HPe.hasOwnProperty;function qPe(e){var t=this.__data__;return BPe?t[e]!==void 0:VPe.call(t,e)}Bse.exports=qPe});var qse=Ie((LDt,Vse)=>{var UPe=o5(),$Pe="__lodash_hash_undefined__";function JPe(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=UPe&&t===void 0?$Pe:t,this}Vse.exports=JPe});var $se=Ie((DDt,Use)=>{var GPe=Lse(),XPe=Nse(),KPe=Wse(),YPe=Hse(),QPe=qse();function vv(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t{var Jse=$se(),ZPe=r5(),eke=pk();function tke(){this.size=0,this.__data__={hash:new Jse,map:new(eke||ZPe),string:new Jse}}Gse.exports=tke});var Yse=Ie((FDt,Kse)=>{function rke(e){var t=typeof e;return t=="string"||t=="number"||t=="symbol"||t=="boolean"?e!=="__proto__":e===null}Kse.exports=rke});var i5=Ie((WDt,Qse)=>{var nke=Yse();function oke(e,t){var n=e.__data__;return nke(t)?n[typeof t=="string"?"string":"hash"]:n.map}Qse.exports=oke});var eue=Ie((BDt,Zse)=>{var ike=i5();function ake(e){var t=ike(this,e).delete(e);return this.size-=t?1:0,t}Zse.exports=ake});var rue=Ie((HDt,tue)=>{var lke=i5();function ske(e){return lke(this,e).get(e)}tue.exports=ske});var oue=Ie((VDt,nue)=>{var uke=i5();function cke(e){return uke(this,e).has(e)}nue.exports=cke});var aue=Ie((qDt,iue)=>{var pke=i5();function fke(e,t){var n=pke(this,e),r=n.size;return n.set(e,t),this.size+=n.size==r?0:1,this}iue.exports=fke});var fk=Ie((UDt,lue)=>{var dke=Xse(),mke=eue(),hke=rue(),gke=oue(),vke=aue();function yv(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t{var yke=r5(),bke=pk(),wke=fk(),Oke=200;function xke(e,t){var n=this.__data__;if(n instanceof yke){var r=n.__data__;if(!bke||r.length{var _ke=r5(),Ske=ese(),jke=rse(),Ike=ose(),Pke=ase(),kke=uue();function bv(e){var t=this.__data__=new _ke(e);this.size=t.size}bv.prototype.clear=Ske;bv.prototype.delete=jke;bv.prototype.get=Ike;bv.prototype.has=Pke;bv.prototype.set=kke;cue.exports=bv});var fue=Ie((GDt,pue)=>{var Eke="__lodash_hash_undefined__";function Cke(e){return this.__data__.set(e,Eke),this}pue.exports=Cke});var mue=Ie((XDt,due)=>{function Ake(e){return this.__data__.has(e)}due.exports=Ake});var gue=Ie((KDt,hue)=>{var Mke=fk(),Tke=fue(),Rke=mue();function dk(e){var t=-1,n=e==null?0:e.length;for(this.__data__=new Mke;++t{function zke(e,t){for(var n=-1,r=e==null?0:e.length;++n{function Lke(e,t){return e.has(t)}bue.exports=Lke});var VN=Ie((ZDt,Oue)=>{var Dke=gue(),Nke=yue(),Fke=wue(),Wke=1,Bke=2;function Hke(e,t,n,r,o,i){var u=n&Wke,f=e.length,h=t.length;if(f!=h&&!(u&&h>f))return!1;var y=i.get(e),O=i.get(t);if(y&&O)return y==t&&O==e;var S=-1,I=!0,A=n&Bke?new Dke:void 0;for(i.set(e,t),i.set(t,e);++S{var Vke=eu(),qke=Vke.Uint8Array;xue.exports=qke});var Sue=Ie((tNt,_ue)=>{function Uke(e){var t=-1,n=Array(e.size);return e.forEach(function(r,o){n[++t]=[o,r]}),n}_ue.exports=Uke});var Iue=Ie((rNt,jue)=>{function $ke(e){var t=-1,n=Array(e.size);return e.forEach(function(r){n[++t]=r}),n}jue.exports=$ke});var Aue=Ie((nNt,Cue)=>{var Pue=F1(),kue=qN(),Jke=uk(),Gke=VN(),Xke=Sue(),Kke=Iue(),Yke=1,Qke=2,Zke="[object Boolean]",eEe="[object Date]",tEe="[object Error]",rEe="[object Map]",nEe="[object Number]",oEe="[object RegExp]",iEe="[object Set]",aEe="[object String]",lEe="[object Symbol]",sEe="[object ArrayBuffer]",uEe="[object DataView]",Eue=Pue?Pue.prototype:void 0,UN=Eue?Eue.valueOf:void 0;function cEe(e,t,n,r,o,i,u){switch(n){case uEe:if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case sEe:return!(e.byteLength!=t.byteLength||!i(new kue(e),new kue(t)));case Zke:case eEe:case nEe:return Jke(+e,+t);case tEe:return e.name==t.name&&e.message==t.message;case oEe:case aEe:return e==t+"";case rEe:var f=Xke;case iEe:var h=r&Yke;if(f||(f=Kke),e.size!=t.size&&!h)return!1;var y=u.get(e);if(y)return y==t;r|=Qke,u.set(e,t);var O=Gke(f(e),f(t),r,o,i,u);return u.delete(e),O;case lEe:if(UN)return UN.call(e)==UN.call(t)}return!1}Cue.exports=cEe});var mk=Ie((oNt,Mue)=>{function pEe(e,t){for(var n=-1,r=t.length,o=e.length;++n{var fEe=Array.isArray;Tue.exports=fEe});var $N=Ie((aNt,Rue)=>{var dEe=mk(),mEe=tu();function hEe(e,t,n){var r=t(e);return mEe(e)?r:dEe(r,n(e))}Rue.exports=hEe});var Lue=Ie((lNt,zue)=>{function gEe(e,t){for(var n=-1,r=e==null?0:e.length,o=0,i=[];++n{function vEe(){return[]}Due.exports=vEe});var hk=Ie((uNt,Fue)=>{var yEe=Lue(),bEe=JN(),wEe=Object.prototype,OEe=wEe.propertyIsEnumerable,Nue=Object.getOwnPropertySymbols,xEe=Nue?function(e){return e==null?[]:(e=Object(e),yEe(Nue(e),function(t){return OEe.call(e,t)}))}:bEe;Fue.exports=xEe});var Bue=Ie((cNt,Wue)=>{function _Ee(e,t){for(var n=-1,r=Array(e);++n{function SEe(e){return e!=null&&typeof e=="object"}Hue.exports=SEe});var que=Ie((fNt,Vue)=>{var jEe=sc(),IEe=ms(),PEe="[object Arguments]";function kEe(e){return IEe(e)&&jEe(e)==PEe}Vue.exports=kEe});var GN=Ie((dNt,Jue)=>{var Uue=que(),EEe=ms(),$ue=Object.prototype,CEe=$ue.hasOwnProperty,AEe=$ue.propertyIsEnumerable,MEe=Uue(function(){return arguments}())?Uue:function(e){return EEe(e)&&CEe.call(e,"callee")&&!AEe.call(e,"callee")};Jue.exports=MEe});var Xue=Ie((mNt,Gue)=>{function TEe(){return!1}Gue.exports=TEe});var gk=Ie((a5,wv)=>{var REe=eu(),zEe=Xue(),Que=typeof a5=="object"&&a5&&!a5.nodeType&&a5,Kue=Que&&typeof wv=="object"&&wv&&!wv.nodeType&&wv,LEe=Kue&&Kue.exports===Que,Yue=LEe?REe.Buffer:void 0,DEe=Yue?Yue.isBuffer:void 0,NEe=DEe||zEe;wv.exports=NEe});var ece=Ie((hNt,Zue)=>{var FEe=9007199254740991,WEe=/^(?:0|[1-9]\d*)$/;function BEe(e,t){var n=typeof e;return t=t??FEe,!!t&&(n=="number"||n!="symbol"&&WEe.test(e))&&e>-1&&e%1==0&&e{var HEe=9007199254740991;function VEe(e){return typeof e=="number"&&e>-1&&e%1==0&&e<=HEe}tce.exports=VEe});var nce=Ie((vNt,rce)=>{var qEe=sc(),UEe=XN(),$Ee=ms(),JEe="[object Arguments]",GEe="[object Array]",XEe="[object Boolean]",KEe="[object Date]",YEe="[object Error]",QEe="[object Function]",ZEe="[object Map]",eCe="[object Number]",tCe="[object Object]",rCe="[object RegExp]",nCe="[object Set]",oCe="[object String]",iCe="[object WeakMap]",aCe="[object ArrayBuffer]",lCe="[object DataView]",sCe="[object Float32Array]",uCe="[object Float64Array]",cCe="[object Int8Array]",pCe="[object Int16Array]",fCe="[object Int32Array]",dCe="[object Uint8Array]",mCe="[object Uint8ClampedArray]",hCe="[object Uint16Array]",gCe="[object Uint32Array]",uo={};uo[sCe]=uo[uCe]=uo[cCe]=uo[pCe]=uo[fCe]=uo[dCe]=uo[mCe]=uo[hCe]=uo[gCe]=!0;uo[JEe]=uo[GEe]=uo[aCe]=uo[XEe]=uo[lCe]=uo[KEe]=uo[YEe]=uo[QEe]=uo[ZEe]=uo[eCe]=uo[tCe]=uo[rCe]=uo[nCe]=uo[oCe]=uo[iCe]=!1;function vCe(e){return $Ee(e)&&UEe(e.length)&&!!uo[qEe(e)]}rce.exports=vCe});var vk=Ie((yNt,oce)=>{function yCe(e){return function(t){return e(t)}}oce.exports=yCe});var yk=Ie((l5,Ov)=>{var bCe=FN(),ice=typeof l5=="object"&&l5&&!l5.nodeType&&l5,s5=ice&&typeof Ov=="object"&&Ov&&!Ov.nodeType&&Ov,wCe=s5&&s5.exports===ice,KN=wCe&&bCe.process,OCe=function(){try{var e=s5&&s5.require&&s5.require("util").types;return e||KN&&KN.binding&&KN.binding("util")}catch{}}();Ov.exports=OCe});var YN=Ie((bNt,sce)=>{var xCe=nce(),_Ce=vk(),ace=yk(),lce=ace&&ace.isTypedArray,SCe=lce?_Ce(lce):xCe;sce.exports=SCe});var QN=Ie((wNt,uce)=>{var jCe=Bue(),ICe=GN(),PCe=tu(),kCe=gk(),ECe=ece(),CCe=YN(),ACe=Object.prototype,MCe=ACe.hasOwnProperty;function TCe(e,t){var n=PCe(e),r=!n&&ICe(e),o=!n&&!r&&kCe(e),i=!n&&!r&&!o&&CCe(e),u=n||r||o||i,f=u?jCe(e.length,String):[],h=f.length;for(var y in e)(t||MCe.call(e,y))&&!(u&&(y=="length"||o&&(y=="offset"||y=="parent")||i&&(y=="buffer"||y=="byteLength"||y=="byteOffset")||ECe(y,h)))&&f.push(y);return f}uce.exports=TCe});var bk=Ie((ONt,cce)=>{var RCe=Object.prototype;function zCe(e){var t=e&&e.constructor,n=typeof t=="function"&&t.prototype||RCe;return e===n}cce.exports=zCe});var ZN=Ie((xNt,pce)=>{function LCe(e,t){return function(n){return e(t(n))}}pce.exports=LCe});var dce=Ie((_Nt,fce)=>{var DCe=ZN(),NCe=DCe(Object.keys,Object);fce.exports=NCe});var hce=Ie((SNt,mce)=>{var FCe=bk(),WCe=dce(),BCe=Object.prototype,HCe=BCe.hasOwnProperty;function VCe(e){if(!FCe(e))return WCe(e);var t=[];for(var n in Object(e))HCe.call(e,n)&&n!="constructor"&&t.push(n);return t}mce.exports=VCe});var eF=Ie((jNt,gce)=>{var qCe=ck(),UCe=XN();function $Ce(e){return e!=null&&UCe(e.length)&&!qCe(e)}gce.exports=$Ce});var wk=Ie((INt,vce)=>{var JCe=QN(),GCe=hce(),XCe=eF();function KCe(e){return XCe(e)?JCe(e):GCe(e)}vce.exports=KCe});var tF=Ie((PNt,yce)=>{var YCe=$N(),QCe=hk(),ZCe=wk();function eAe(e){return YCe(e,ZCe,QCe)}yce.exports=eAe});var Oce=Ie((kNt,wce)=>{var bce=tF(),tAe=1,rAe=Object.prototype,nAe=rAe.hasOwnProperty;function oAe(e,t,n,r,o,i){var u=n&tAe,f=bce(e),h=f.length,y=bce(t),O=y.length;if(h!=O&&!u)return!1;for(var S=h;S--;){var I=f[S];if(!(u?I in t:nAe.call(t,I)))return!1}var A=i.get(e),C=i.get(t);if(A&&C)return A==t&&C==e;var M=!0;i.set(e,t),i.set(t,e);for(var F=u;++S{var iAe=Id(),aAe=eu(),lAe=iAe(aAe,"DataView");xce.exports=lAe});var jce=Ie((CNt,Sce)=>{var sAe=Id(),uAe=eu(),cAe=sAe(uAe,"Promise");Sce.exports=cAe});var Pce=Ie((ANt,Ice)=>{var pAe=Id(),fAe=eu(),dAe=pAe(fAe,"Set");Ice.exports=dAe});var Ece=Ie((MNt,kce)=>{var mAe=Id(),hAe=eu(),gAe=mAe(hAe,"WeakMap");kce.exports=gAe});var u5=Ie((TNt,Lce)=>{var rF=_ce(),nF=pk(),oF=jce(),iF=Pce(),aF=Ece(),zce=sc(),xv=BN(),Cce="[object Map]",vAe="[object Object]",Ace="[object Promise]",Mce="[object Set]",Tce="[object WeakMap]",Rce="[object DataView]",yAe=xv(rF),bAe=xv(nF),wAe=xv(oF),OAe=xv(iF),xAe=xv(aF),B1=zce;(rF&&B1(new rF(new ArrayBuffer(1)))!=Rce||nF&&B1(new nF)!=Cce||oF&&B1(oF.resolve())!=Ace||iF&&B1(new iF)!=Mce||aF&&B1(new aF)!=Tce)&&(B1=function(e){var t=zce(e),n=t==vAe?e.constructor:void 0,r=n?xv(n):"";if(r)switch(r){case yAe:return Rce;case bAe:return Cce;case wAe:return Ace;case OAe:return Mce;case xAe:return Tce}return t});Lce.exports=B1});var qce=Ie((RNt,Vce)=>{var lF=HN(),_Ae=VN(),SAe=Aue(),jAe=Oce(),Dce=u5(),Nce=tu(),Fce=gk(),IAe=YN(),PAe=1,Wce="[object Arguments]",Bce="[object Array]",Ok="[object Object]",kAe=Object.prototype,Hce=kAe.hasOwnProperty;function EAe(e,t,n,r,o,i){var u=Nce(e),f=Nce(t),h=u?Bce:Dce(e),y=f?Bce:Dce(t);h=h==Wce?Ok:h,y=y==Wce?Ok:y;var O=h==Ok,S=y==Ok,I=h==y;if(I&&Fce(e)){if(!Fce(t))return!1;u=!0,O=!1}if(I&&!O)return i||(i=new lF),u||IAe(e)?_Ae(e,t,n,r,o,i):SAe(e,t,h,n,r,o,i);if(!(n&PAe)){var A=O&&Hce.call(e,"__wrapped__"),C=S&&Hce.call(t,"__wrapped__");if(A||C){var M=A?e.value():e,F=C?t.value():t;return i||(i=new lF),o(M,F,n,r,i)}}return I?(i||(i=new lF),jAe(e,t,n,r,o,i)):!1}Vce.exports=EAe});var Gce=Ie((zNt,Jce)=>{var CAe=qce(),Uce=ms();function $ce(e,t,n,r,o){return e===t?!0:e==null||t==null||!Uce(e)&&!Uce(t)?e!==e&&t!==t:CAe(e,t,n,r,$ce,o)}Jce.exports=$ce});var Kce=Ie((LNt,Xce)=>{var AAe=Gce();function MAe(e,t){return AAe(e,t)}Xce.exports=MAe});var fF=Ie((pF,Sv)=>{(function(e,t){typeof pF=="object"&&typeof Sv<"u"?Sv.exports=t():typeof define=="function"&&define.amd?define(t):e.moment=t()})(pF,function(){"use strict";var e;function t(){return e.apply(null,arguments)}function n(g){e=g}function r(g){return g instanceof Array||Object.prototype.toString.call(g)==="[object Array]"}function o(g){return g!=null&&Object.prototype.toString.call(g)==="[object Object]"}function i(g,j){return Object.prototype.hasOwnProperty.call(g,j)}function u(g){if(Object.getOwnPropertyNames)return Object.getOwnPropertyNames(g).length===0;var j;for(j in g)if(i(g,j))return!1;return!0}function f(g){return g===void 0}function h(g){return typeof g=="number"||Object.prototype.toString.call(g)==="[object Number]"}function y(g){return g instanceof Date||Object.prototype.toString.call(g)==="[object Date]"}function O(g,j){var W=[],q,te=g.length;for(q=0;q>>0,q;for(q=0;q0)for(W=0;W=0;return(ge?F?"+":"":"-")+Math.pow(10,Math.max(0,te)).toString().substr(1)+q}var ht=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,Mt=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,Ze={},Kt={};function it(g,j,F,q){var te=q;typeof q=="string"&&(te=function(){return this[q]()}),g&&(Kt[g]=te),j&&(Kt[j[0]]=function(){return at(te.apply(this,arguments),j[1],j[2])}),F&&(Kt[F]=function(){return this.localeData().ordinal(te.apply(this,arguments),g)})}function xt(g){return g.match(/\[[\s\S]/)?g.replace(/^\[|\]$/g,""):g.replace(/\\/g,"")}function wt(g){var j=g.match(ht),F,q;for(F=0,q=j.length;F=0&&Mt.test(g);)g=g.replace(Mt,q),Mt.lastIndex=0,F-=1;return g}var Er={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"};function _r(g){var j=this._longDateFormat[g],F=this._longDateFormat[g.toUpperCase()];return j||!F?j:(this._longDateFormat[g]=F.match(ht).map(function(q){return q==="MMMM"||q==="MM"||q==="DD"||q==="dddd"?q.slice(1):q}).join(""),this._longDateFormat[g])}var pn="Invalid date";function Dr(){return this._invalidDate}var Bt="%d",Dn=/\d{1,2}/;function fn(g){return this._ordinal.replace("%d",g)}var ro={future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"};function Gn(g,j,F,q){var te=this._relativeTime[F];return Oe(te)?te(g,j,F,q):te.replace(/%d/i,g)}function co(g,j){var F=this._relativeTime[g>0?"future":"past"];return Oe(F)?F(j):F.replace(/%s/i,j)}var So={D:"date",dates:"date",date:"date",d:"day",days:"day",day:"day",e:"weekday",weekdays:"weekday",weekday:"weekday",E:"isoWeekday",isoweekdays:"isoWeekday",isoweekday:"isoWeekday",DDD:"dayOfYear",dayofyears:"dayOfYear",dayofyear:"dayOfYear",h:"hour",hours:"hour",hour:"hour",ms:"millisecond",milliseconds:"millisecond",millisecond:"millisecond",m:"minute",minutes:"minute",minute:"minute",M:"month",months:"month",month:"month",Q:"quarter",quarters:"quarter",quarter:"quarter",s:"second",seconds:"second",second:"second",gg:"weekYear",weekyears:"weekYear",weekyear:"weekYear",GG:"isoWeekYear",isoweekyears:"isoWeekYear",isoweekyear:"isoWeekYear",w:"week",weeks:"week",week:"week",W:"isoWeek",isoweeks:"isoWeek",isoweek:"isoWeek",y:"year",years:"year",year:"year"};function En(g){return typeof g=="string"?So[g]||So[g.toLowerCase()]:void 0}function Vr(g){var j={},F,q;for(q in g)i(g,q)&&(F=En(q),F&&(j[F]=g[q]));return j}var hn={date:9,day:11,weekday:11,isoWeekday:11,dayOfYear:4,hour:13,millisecond:16,minute:14,month:8,quarter:7,second:15,weekYear:1,isoWeekYear:1,week:5,isoWeek:5,year:1};function zo(g){var j=[],F;for(F in g)i(g,F)&&j.push({unit:F,priority:hn[F]});return j.sort(function(q,te){return q.priority-te.priority}),j}var gn=/\d/,vn=/\d\d/,Xo=/\d{3}/,jc=/\d{4}/,ws=/[+-]?\d{6}/,mr=/\d\d?/,ba=/\d\d\d\d?/,Ic=/\d\d\d\d\d\d?/,dl=/\d{1,3}/,zl=/\d{1,4}/,kc=/[+-]?\d{1,6}/,Os=/\d+/,Ll=/[+-]?\d+/,wm=/Z|[+-]\d\d:?\d\d/gi,Fp=/Z|[+-]\d\d(?::?\d\d)?/gi,e0=/[+-]?\d+(\.\d{1,3})?/,Pc=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,yu=/^[1-9]\d?/,xs=/^([1-9]\d|\d)/,Ba;Ba={};function St(g,j,F){Ba[g]=Oe(j)?j:function(q,te){return q&&F?F:j}}function li(g,j){return i(Ba,g)?Ba[g](j._strict,j._locale):new RegExp(no(g))}function no(g){return si(g.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(j,F,q,te,ge){return F||q||te||ge}))}function si(g){return g.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function Ci(g){return g<0?Math.ceil(g)||0:Math.floor(g)}function Cr(g){var j=+g,F=0;return j!==0&&isFinite(j)&&(F=Ci(j)),F}var bu={};function an(g,j){var F,q=j,te;for(typeof g=="string"&&(g=[g]),h(j)&&(q=function(ge,He){He[j]=Cr(ge)}),te=g.length,F=0;F68?1900:2e3)};var r0=Ss("FullYear",!0);function Bp(){return Wp(this.year())}function Ss(g,j){return function(F){return F!=null?(Hp(this,g,F),t.updateOffset(this,j),this):Ou(this,g)}}function Ou(g,j){if(!g.isValid())return NaN;var F=g._d,q=g._isUTC;switch(j){case"Milliseconds":return q?F.getUTCMilliseconds():F.getMilliseconds();case"Seconds":return q?F.getUTCSeconds():F.getSeconds();case"Minutes":return q?F.getUTCMinutes():F.getMinutes();case"Hours":return q?F.getUTCHours():F.getHours();case"Date":return q?F.getUTCDate():F.getDate();case"Day":return q?F.getUTCDay():F.getDay();case"Month":return q?F.getUTCMonth():F.getMonth();case"FullYear":return q?F.getUTCFullYear():F.getFullYear();default:return NaN}}function Hp(g,j,F){var q,te,ge,He,jt;if(!(!g.isValid()||isNaN(F))){switch(q=g._d,te=g._isUTC,j){case"Milliseconds":return void(te?q.setUTCMilliseconds(F):q.setMilliseconds(F));case"Seconds":return void(te?q.setUTCSeconds(F):q.setSeconds(F));case"Minutes":return void(te?q.setUTCMinutes(F):q.setMinutes(F));case"Hours":return void(te?q.setUTCHours(F):q.setHours(F));case"Date":return void(te?q.setUTCDate(F):q.setDate(F));case"FullYear":break;default:return}ge=F,He=g.month(),jt=g.date(),jt=jt===29&&He===1&&!Wp(ge)?28:jt,te?q.setUTCFullYear(ge,He,jt):q.setFullYear(ge,He,jt)}}function _m(g){return g=En(g),Oe(this[g])?this[g]():this}function Sm(g,j){if(typeof g=="object"){g=Vr(g);var F=zo(g),q,te=F.length;for(q=0;q=0?(jt=new Date(g+400,j,F,q,te,ge,He),isFinite(jt.getFullYear())&&jt.setFullYear(g)):jt=new Date(g,j,F,q,te,ge,He),jt}function qa(g){var j,F;return g<100&&g>=0?(F=Array.prototype.slice.call(arguments),F[0]=g+400,j=new Date(Date.UTC.apply(null,F)),isFinite(j.getUTCFullYear())&&j.setUTCFullYear(g)):j=new Date(Date.UTC.apply(null,arguments)),j}function Mc(g,j,F){var q=7+j-F,te=(7+qa(g,0,q).getUTCDay()-j)%7;return-te+q-1}function a0(g,j,F,q,te){var ge=(7+F-q)%7,He=Mc(g,q,te),jt=1+7*(j-1)+ge+He,er,Ar;return jt<=0?(er=g-1,Ar=Dl(er)+jt):jt>Dl(g)?(er=g+1,Ar=jt-Dl(g)):(er=g,Ar=jt),{year:er,dayOfYear:Ar}}function _u(g,j,F){var q=Mc(g.year(),j,F),te=Math.floor((g.dayOfYear()-q-1)/7)+1,ge,He;return te<1?(He=g.year()-1,ge=te+Oa(He,j,F)):te>Oa(g.year(),j,F)?(ge=te-Oa(g.year(),j,F),He=g.year()+1):(He=g.year(),ge=te),{week:ge,year:He}}function Oa(g,j,F){var q=Mc(g,j,F),te=Mc(g+1,j,F);return(Dl(g)-q+te)/7}it("w",["ww",2],"wo","week"),it("W",["WW",2],"Wo","isoWeek"),St("w",mr,yu),St("ww",mr,vn),St("W",mr,yu),St("WW",mr,vn),wu(["w","ww","W","WW"],function(g,j,F,q){j[q.substr(0,1)]=Cr(g)});function l0(g){return _u(g,this._week.dow,this._week.doy).week}var qp={dow:0,doy:6};function s0(){return this._week.dow}function u0(){return this._week.doy}function Ua(g){var j=this.localeData().week(this);return g==null?j:this.add((g-j)*7,"d")}function Su(g){var j=_u(this,1,4).week;return g==null?j:this.add((g-j)*7,"d")}it("d",0,"do","day"),it("dd",0,0,function(g){return this.localeData().weekdaysMin(this,g)}),it("ddd",0,0,function(g){return this.localeData().weekdaysShort(this,g)}),it("dddd",0,0,function(g){return this.localeData().weekdays(this,g)}),it("e",0,0,"weekday"),it("E",0,0,"isoWeekday"),St("d",mr),St("e",mr),St("E",mr),St("dd",function(g,j){return j.weekdaysMinRegex(g)}),St("ddd",function(g,j){return j.weekdaysShortRegex(g)}),St("dddd",function(g,j){return j.weekdaysRegex(g)}),wu(["dd","ddd","dddd"],function(g,j,F,q){var te=F._locale.weekdaysParse(g,q,F._strict);te!=null?j.d=te:C(F).invalidWeekday=g}),wu(["d","e","E"],function(g,j,F,q){j[q]=Cr(g)});function Up(g,j){return typeof g!="string"?g:isNaN(g)?(g=j.weekdaysParse(g),typeof g=="number"?g:null):parseInt(g,10)}function $p(g,j){return typeof g=="string"?j.weekdaysParse(g)%7||7:isNaN(g)?null:g}function Jp(g,j){return g.slice(j,7).concat(g.slice(0,j))}var c0="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),ju="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Gp="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),Xp=Pc,Kp=Pc,fo=Pc;function Tc(g,j){var F=r(this._weekdays)?this._weekdays:this._weekdays[g&&g!==!0&&this._weekdays.isFormat.test(j)?"format":"standalone"];return g===!0?Jp(F,this._week.dow):g?F[g.day()]:F}function Yp(g){return g===!0?Jp(this._weekdaysShort,this._week.dow):g?this._weekdaysShort[g.day()]:this._weekdaysShort}function Qp(g){return g===!0?Jp(this._weekdaysMin,this._week.dow):g?this._weekdaysMin[g.day()]:this._weekdaysMin}function Nl(g,j,F){var q,te,ge,He=g.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],q=0;q<7;++q)ge=I([2e3,1]).day(q),this._minWeekdaysParse[q]=this.weekdaysMin(ge,"").toLocaleLowerCase(),this._shortWeekdaysParse[q]=this.weekdaysShort(ge,"").toLocaleLowerCase(),this._weekdaysParse[q]=this.weekdays(ge,"").toLocaleLowerCase();return F?j==="dddd"?(te=Xn.call(this._weekdaysParse,He),te!==-1?te:null):j==="ddd"?(te=Xn.call(this._shortWeekdaysParse,He),te!==-1?te:null):(te=Xn.call(this._minWeekdaysParse,He),te!==-1?te:null):j==="dddd"?(te=Xn.call(this._weekdaysParse,He),te!==-1||(te=Xn.call(this._shortWeekdaysParse,He),te!==-1)?te:(te=Xn.call(this._minWeekdaysParse,He),te!==-1?te:null)):j==="ddd"?(te=Xn.call(this._shortWeekdaysParse,He),te!==-1||(te=Xn.call(this._weekdaysParse,He),te!==-1)?te:(te=Xn.call(this._minWeekdaysParse,He),te!==-1?te:null)):(te=Xn.call(this._minWeekdaysParse,He),te!==-1||(te=Xn.call(this._weekdaysParse,He),te!==-1)?te:(te=Xn.call(this._shortWeekdaysParse,He),te!==-1?te:null))}function Zp(g,j,F){var q,te,ge;if(this._weekdaysParseExact)return Nl.call(this,g,j,F);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),q=0;q<7;q++){if(te=I([2e3,1]).day(q),F&&!this._fullWeekdaysParse[q]&&(this._fullWeekdaysParse[q]=new RegExp("^"+this.weekdays(te,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[q]=new RegExp("^"+this.weekdaysShort(te,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[q]=new RegExp("^"+this.weekdaysMin(te,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[q]||(ge="^"+this.weekdays(te,"")+"|^"+this.weekdaysShort(te,"")+"|^"+this.weekdaysMin(te,""),this._weekdaysParse[q]=new RegExp(ge.replace(".",""),"i")),F&&j==="dddd"&&this._fullWeekdaysParse[q].test(g))return q;if(F&&j==="ddd"&&this._shortWeekdaysParse[q].test(g))return q;if(F&&j==="dd"&&this._minWeekdaysParse[q].test(g))return q;if(!F&&this._weekdaysParse[q].test(g))return q}}function Pm(g){if(!this.isValid())return g!=null?this:NaN;var j=Ou(this,"Day");return g!=null?(g=Up(g,this.localeData()),this.add(g-j,"d")):j}function Fl(g){if(!this.isValid())return g!=null?this:NaN;var j=(this.day()+7-this.localeData()._week.dow)%7;return g==null?j:this.add(g-j,"d")}function ui(g){if(!this.isValid())return g!=null?this:NaN;if(g!=null){var j=$p(g,this.localeData());return this.day(this.day()%7?j:j-7)}else return this.day()||7}function Em(g){return this._weekdaysParseExact?(i(this,"_weekdaysRegex")||ks.call(this),g?this._weekdaysStrictRegex:this._weekdaysRegex):(i(this,"_weekdaysRegex")||(this._weekdaysRegex=Xp),this._weekdaysStrictRegex&&g?this._weekdaysStrictRegex:this._weekdaysRegex)}function Cm(g){return this._weekdaysParseExact?(i(this,"_weekdaysRegex")||ks.call(this),g?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(i(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=Kp),this._weekdaysShortStrictRegex&&g?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function Am(g){return this._weekdaysParseExact?(i(this,"_weekdaysRegex")||ks.call(this),g?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(i(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=fo),this._weekdaysMinStrictRegex&&g?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function ks(){function g(No,Mi){return Mi.length-No.length}var j=[],F=[],q=[],te=[],ge,He,jt,er,Ar;for(ge=0;ge<7;ge++)He=I([2e3,1]).day(ge),jt=si(this.weekdaysMin(He,"")),er=si(this.weekdaysShort(He,"")),Ar=si(this.weekdays(He,"")),j.push(jt),F.push(er),q.push(Ar),te.push(jt),te.push(er),te.push(Ar);j.sort(g),F.sort(g),q.sort(g),te.sort(g),this._weekdaysRegex=new RegExp("^("+te.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+q.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+F.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+j.join("|")+")","i")}function Wl(){return this.hours()%12||12}function p0(){return this.hours()||24}it("H",["HH",2],0,"hour"),it("h",["hh",2],0,Wl),it("k",["kk",2],0,p0),it("hmm",0,0,function(){return""+Wl.apply(this)+at(this.minutes(),2)}),it("hmmss",0,0,function(){return""+Wl.apply(this)+at(this.minutes(),2)+at(this.seconds(),2)}),it("Hmm",0,0,function(){return""+this.hours()+at(this.minutes(),2)}),it("Hmmss",0,0,function(){return""+this.hours()+at(this.minutes(),2)+at(this.seconds(),2)});function f0(g,j){it(g,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),j)})}f0("a",!0),f0("A",!1);function d0(g,j){return j._meridiemParse}St("a",d0),St("A",d0),St("H",mr,xs),St("h",mr,yu),St("k",mr,yu),St("HH",mr,vn),St("hh",mr,vn),St("kk",mr,vn),St("hmm",ba),St("hmmss",Ic),St("Hmm",ba),St("Hmmss",Ic),an(["H","HH"],po),an(["k","kk"],function(g,j,F){var q=Cr(g);j[po]=q===24?0:q}),an(["a","A"],function(g,j,F){F._isPm=F._locale.isPM(g),F._meridiem=g}),an(["h","hh"],function(g,j,F){j[po]=Cr(g),C(F).bigHour=!0}),an("hmm",function(g,j,F){var q=g.length-2;j[po]=Cr(g.substr(0,q)),j[wa]=Cr(g.substr(q)),C(F).bigHour=!0}),an("hmmss",function(g,j,F){var q=g.length-4,te=g.length-2;j[po]=Cr(g.substr(0,q)),j[wa]=Cr(g.substr(q,2)),j[ml]=Cr(g.substr(te)),C(F).bigHour=!0}),an("Hmm",function(g,j,F){var q=g.length-2;j[po]=Cr(g.substr(0,q)),j[wa]=Cr(g.substr(q))}),an("Hmmss",function(g,j,F){var q=g.length-4,te=g.length-2;j[po]=Cr(g.substr(0,q)),j[wa]=Cr(g.substr(q,2)),j[ml]=Cr(g.substr(te))});function Mm(g){return(g+"").toLowerCase().charAt(0)==="p"}var m0=/[ap]\.?m?\.?/i,Rc=Ss("Hours",!0);function Tm(g,j,F){return g>11?F?"pm":"PM":F?"am":"AM"}var Rm={calendar:Qe,longDateFormat:Er,invalidDate:pn,ordinal:Bt,dayOfMonthOrdinalParse:Dn,relativeTime:ro,months:jm,monthsShort:Ec,week:qp,weekdays:c0,weekdaysMin:Gp,weekdaysShort:ju,meridiemParse:m0},Gr={},zc={},Ps;function zm(g,j){var F,q=Math.min(g.length,j.length);for(F=0;F0;){if(te=Lc(ge.slice(0,F).join("-")),te)return te;if(q&&q.length>=F&&zm(ge,q)>=F-1)break;F--}j++}return Ps}function Lm(g){return!!(g&&g.match("^[^/\\\\]*$"))}function Lc(g){var j=null,F;if(Gr[g]===void 0&&typeof Sv<"u"&&Sv&&Sv.exports&&Lm(g))try{j=Ps._abbr,F=qte,F("./locale/"+g),Yi(j)}catch{Gr[g]=null}return Gr[g]}function Yi(g,j){var F;return g&&(f(j)?F=Qi(g):F=ln(g,j),F?Ps=F:typeof console<"u"&&console.warn&&console.warn("Locale "+g+" not found. Did you forget to load it?")),Ps._abbr}function ln(g,j){if(j!==null){var F,q=Rm;if(j.abbr=g,Gr[g]!=null)Se("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),q=Gr[g]._config;else if(j.parentLocale!=null)if(Gr[j.parentLocale]!=null)q=Gr[j.parentLocale]._config;else if(F=Lc(j.parentLocale),F!=null)q=F._config;else return zc[j.parentLocale]||(zc[j.parentLocale]=[]),zc[j.parentLocale].push({name:g,config:j}),null;return Gr[g]=new We(Ue(q,j)),zc[g]&&zc[g].forEach(function(te){ln(te.name,te.config)}),Yi(g),Gr[g]}else return delete Gr[g],null}function Ly(g,j){if(j!=null){var F,q,te=Rm;Gr[g]!=null&&Gr[g].parentLocale!=null?Gr[g].set(Ue(Gr[g]._config,j)):(q=Lc(g),q!=null&&(te=q._config),j=Ue(te,j),q==null&&(j.abbr=g),F=new We(j),F.parentLocale=Gr[g],Gr[g]=F),Yi(g)}else Gr[g]!=null&&(Gr[g].parentLocale!=null?(Gr[g]=Gr[g].parentLocale,g===Yi()&&Yi(g)):Gr[g]!=null&&delete Gr[g]);return Gr[g]}function Qi(g){var j;if(g&&g._locale&&g._locale._abbr&&(g=g._locale._abbr),!g)return Ps;if(!r(g)){if(j=Lc(g),j)return j;g=[g]}return g0(g)}function Dm(){return Ge(Gr)}function ef(g){var j,F=g._a;return F&&C(g).overflow===-2&&(j=F[Lo]<0||F[Lo]>11?Lo:F[Ha]<1||F[Ha]>Vp(F[Ko],F[Lo])?Ha:F[po]<0||F[po]>24||F[po]===24&&(F[wa]!==0||F[ml]!==0||F[_s]!==0)?po:F[wa]<0||F[wa]>59?wa:F[ml]<0||F[ml]>59?ml:F[_s]<0||F[_s]>999?_s:-1,C(g)._overflowDayOfYear&&(jHa)&&(j=Ha),C(g)._overflowWeeks&&j===-1&&(j=xm),C(g)._overflowWeekday&&j===-1&&(j=t0),C(g).overflow=j),g}var Nm=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Iu=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,v0=/Z|[+-]\d\d(?::?\d\d)?/,Dc=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/],["YYYYMM",/\d{6}/,!1],["YYYY",/\d{4}/,!1]],Nc=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],y0=/^\/?Date\((-?\d+)/i,Fm=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,b0={UT:0,GMT:0,EDT:-4*60,EST:-5*60,CDT:-5*60,CST:-6*60,MDT:-6*60,MST:-7*60,PDT:-7*60,PST:-8*60};function Wm(g){var j,F,q=g._i,te=Nm.exec(q)||Iu.exec(q),ge,He,jt,er,Ar=Dc.length,No=Nc.length;if(te){for(C(g).iso=!0,j=0,F=Ar;jDl(He)||g._dayOfYear===0)&&(C(g)._overflowDayOfYear=!0),F=qa(He,0,g._dayOfYear),g._a[Lo]=F.getUTCMonth(),g._a[Ha]=F.getUTCDate()),j=0;j<3&&g._a[j]==null;++j)g._a[j]=q[j]=te[j];for(;j<7;j++)g._a[j]=q[j]=g._a[j]==null?j===2?1:0:g._a[j];g._a[po]===24&&g._a[wa]===0&&g._a[ml]===0&&g._a[_s]===0&&(g._nextDay=!0,g._a[po]=0),g._d=(g._useUTC?qa:zy).apply(null,q),ge=g._useUTC?g._d.getUTCDay():g._d.getDay(),g._tzm!=null&&g._d.setUTCMinutes(g._d.getUTCMinutes()-g._tzm),g._nextDay&&(g._a[po]=24),g._w&&typeof g._w.d<"u"&&g._w.d!==ge&&(C(g).weekdayMismatch=!0)}}function qm(g){var j,F,q,te,ge,He,jt,er,Ar;j=g._w,j.GG!=null||j.W!=null||j.E!=null?(ge=1,He=4,F=xa(j.GG,g._a[Ko],_u(sn(),1,4).year),q=xa(j.W,1),te=xa(j.E,1),(te<1||te>7)&&(er=!0)):(ge=g._locale._week.dow,He=g._locale._week.doy,Ar=_u(sn(),ge,He),F=xa(j.gg,g._a[Ko],Ar.year),q=xa(j.w,Ar.week),j.d!=null?(te=j.d,(te<0||te>6)&&(er=!0)):j.e!=null?(te=j.e+ge,(j.e<0||j.e>6)&&(er=!0)):te=ge),q<1||q>Oa(F,ge,He)?C(g)._overflowWeeks=!0:er!=null?C(g)._overflowWeekday=!0:(jt=a0(F,q,te,ge,He),g._a[Ko]=jt.year,g._dayOfYear=jt.dayOfYear)}t.ISO_8601=function(){},t.RFC_2822=function(){};function O0(g){if(g._f===t.ISO_8601){Wm(g);return}if(g._f===t.RFC_2822){w0(g);return}g._a=[],C(g).empty=!0;var j=""+g._i,F,q,te,ge,He,jt=j.length,er=0,Ar,No;for(te=sr(g._f,g._locale).match(ht)||[],No=te.length,F=0;F0&&C(g).unusedInput.push(He),j=j.slice(j.indexOf(q)+q.length),er+=q.length),Kt[ge]?(q?C(g).empty=!1:C(g).unusedTokens.push(ge),Om(ge,q,g)):g._strict&&!q&&C(g).unusedTokens.push(ge);C(g).charsLeftOver=jt-er,j.length>0&&C(g).unusedInput.push(j),g._a[po]<=12&&C(g).bigHour===!0&&g._a[po]>0&&(C(g).bigHour=void 0),C(g).parsedDateParts=g._a.slice(0),C(g).meridiem=g._meridiem,g._a[po]=Um(g._locale,g._a[po],g._meridiem),Ar=C(g).era,Ar!==null&&(g._a[Ko]=g._locale.erasConvertYear(Ar,g._a[Ko])),Xr(g),ef(g)}function Um(g,j,F){var q;return F==null?j:g.meridiemHour!=null?g.meridiemHour(j,F):(g.isPM!=null&&(q=g.isPM(F),q&&j<12&&(j+=12),!q&&j===12&&(j=0)),j)}function Fy(g){var j,F,q,te,ge,He,jt=!1,er=g._f.length;if(er===0){C(g).invalidFormat=!0,g._d=new Date(NaN);return}for(te=0;tethis?this:g:R()});function Gm(g,j){var F,q;if(j.length===1&&r(j[0])&&(j=j[0]),!j.length)return sn();for(F=j[0],q=1;qthis.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function I0(){if(!f(this._isDSTShifted))return this._isDSTShifted;var g={},j;return X(g,this),g=$m(g),g._a?(j=g._isUTC?I(g._a):sn(g._a),this._isDSTShifted=this.isValid()&&Xm(g._a,j.toArray())>0):this._isDSTShifted=!1,this._isDSTShifted}function k0(){return this.isValid()?!this._isUTC:!1}function af(){return this.isValid()?this._isUTC:!1}function Qm(){return this.isValid()?this._isUTC&&this._offset===0:!1}var Uy=/^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,Zm=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function Ai(g,j){var F=g,q=null,te,ge,He;return Bc(g)?F={ms:g._milliseconds,d:g._days,M:g._months}:h(g)||!isNaN(+g)?(F={},j?F[j]=+g:F.milliseconds=+g):(q=Uy.exec(g))?(te=q[1]==="-"?-1:1,F={y:0,d:Cr(q[Ha])*te,h:Cr(q[po])*te,m:Cr(q[wa])*te,s:Cr(q[ml])*te,ms:Cr(nf(q[_s]*1e3))*te}):(q=Zm.exec(g))?(te=q[1]==="-"?-1:1,F={y:Es(q[2],te),M:Es(q[3],te),w:Es(q[4],te),d:Es(q[5],te),h:Es(q[6],te),m:Es(q[7],te),s:Es(q[8],te)}):F==null?F={}:typeof F=="object"&&("from"in F||"to"in F)&&(He=$y(sn(F.from),sn(F.to)),F={},F.ms=He.milliseconds,F.M=He.months),ge=new Hl(F),Bc(g)&&i(g,"_locale")&&(ge._locale=g._locale),Bc(g)&&i(g,"_isValid")&&(ge._isValid=g._isValid),ge}Ai.fn=Hl.prototype,Ai.invalid=Eu;function Es(g,j){var F=g&&parseFloat(g.replace(",","."));return(isNaN(F)?0:F)*j}function Au(g,j){var F={};return F.months=j.month()-g.month()+(j.year()-g.year())*12,g.clone().add(F.months,"M").isAfter(j)&&--F.months,F.milliseconds=+j-+g.clone().add(F.months,"M"),F}function $y(g,j){var F;return g.isValid()&&j.isValid()?(j=Cu(j,g),g.isBefore(j)?F=Au(g,j):(F=Au(j,g),F.milliseconds=-F.milliseconds,F.months=-F.months),F):{milliseconds:0,months:0}}function eh(g,j){return function(F,q){var te,ge;return q!==null&&!isNaN(+q)&&(Se(j,"moment()."+j+"(period, number) is deprecated. Please use moment()."+j+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),ge=F,F=q,q=ge),te=Ai(F,q),Uc(this,te,g),this}}function Uc(g,j,F,q){var te=j._milliseconds,ge=nf(j._days),He=nf(j._months);g.isValid()&&(q=q??!0,He&&xu(g,Ou(g,"Month")+He*F),ge&&Hp(g,"Date",Ou(g,"Date")+ge*F),te&&g._d.setTime(g._d.valueOf()+te*F),q&&t.updateOffset(g,ge||He))}var P0=eh(1,"add"),lf=eh(-1,"subtract");function E0(g){return typeof g=="string"||g instanceof String}function th(g){return Z(g)||y(g)||E0(g)||h(g)||hl(g)||rh(g)||g===null||g===void 0}function rh(g){var j=o(g)&&!u(g),F=!1,q=["years","year","y","months","month","M","days","day","d","dates","date","D","hours","hour","h","minutes","minute","m","seconds","second","s","milliseconds","millisecond","ms"],te,ge,He=q.length;for(te=0;teF.valueOf():F.valueOf()9999?Ht(F,j?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):Oe(Date.prototype.toISOString)?j?this.toDate().toISOString():new Date(this.valueOf()+this.utcOffset()*60*1e3).toISOString().replace("Z",Ht(F,"Z")):Ht(F,j?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")}function lh(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var g="moment",j="",F,q,te,ge;return this.isLocal()||(g=this.utcOffset()===0?"moment.utc":"moment.parseZone",j="Z"),F="["+g+'("]',q=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",te="-MM-DD[T]HH:mm:ss.SSS",ge=j+'[")]',this.format(F+q+te+ge)}function M0(g){g||(g=this.isUtc()?t.defaultFormatUtc:t.defaultFormat);var j=Ht(this,g);return this.localeData().postformat(j)}function Qy(g,j){return this.isValid()&&(Z(g)&&g.isValid()||sn(g).isValid())?Ai({to:this,from:g}).locale(this.locale()).humanize(!j):this.localeData().invalidDate()}function sh(g){return this.from(sn(),g)}function Zy(g,j){return this.isValid()&&(Z(g)&&g.isValid()||sn(g).isValid())?Ai({from:this,to:g}).locale(this.locale()).humanize(!j):this.localeData().invalidDate()}function e2(g){return this.to(sn(),g)}function Ja(g){var j;return g===void 0?this._locale._abbr:(j=Qi(g),j!=null&&(this._locale=j),this)}var uh=de("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(g){return g===void 0?this.localeData():this.locale(g)});function ch(){return this._locale}var Ga=1e3,Mu=60*Ga,sf=60*Mu,ph=(365*400+97)*24*sf;function Cs(g,j){return(g%j+j)%j}function Yo(g,j,F){return g<100&&g>=0?new Date(g+400,j,F)-ph:new Date(g,j,F).valueOf()}function ci(g,j,F){return g<100&&g>=0?Date.UTC(g+400,j,F)-ph:Date.UTC(g,j,F)}function mo(g){var j,F;if(g=En(g),g===void 0||g==="millisecond"||!this.isValid())return this;switch(F=this._isUTC?ci:Yo,g){case"year":j=F(this.year(),0,1);break;case"quarter":j=F(this.year(),this.month()-this.month()%3,1);break;case"month":j=F(this.year(),this.month(),1);break;case"week":j=F(this.year(),this.month(),this.date()-this.weekday());break;case"isoWeek":j=F(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case"day":case"date":j=F(this.year(),this.month(),this.date());break;case"hour":j=this._d.valueOf(),j-=Cs(j+(this._isUTC?0:this.utcOffset()*Mu),sf);break;case"minute":j=this._d.valueOf(),j-=Cs(j,Mu);break;case"second":j=this._d.valueOf(),j-=Cs(j,Ga);break}return this._d.setTime(j),t.updateOffset(this,!0),this}function Xa(g){var j,F;if(g=En(g),g===void 0||g==="millisecond"||!this.isValid())return this;switch(F=this._isUTC?ci:Yo,g){case"year":j=F(this.year()+1,0,1)-1;break;case"quarter":j=F(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":j=F(this.year(),this.month()+1,1)-1;break;case"week":j=F(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":j=F(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":j=F(this.year(),this.month(),this.date()+1)-1;break;case"hour":j=this._d.valueOf(),j+=sf-Cs(j+(this._isUTC?0:this.utcOffset()*Mu),sf)-1;break;case"minute":j=this._d.valueOf(),j+=Mu-Cs(j,Mu)-1;break;case"second":j=this._d.valueOf(),j+=Ga-Cs(j,Ga)-1;break}return this._d.setTime(j),t.updateOffset(this,!0),this}function Vl(){return this._d.valueOf()-(this._offset||0)*6e4}function gl(){return Math.floor(this.valueOf()/1e3)}function As(){return new Date(this.valueOf())}function fh(){var g=this;return[g.year(),g.month(),g.date(),g.hour(),g.minute(),g.second(),g.millisecond()]}function dh(){var g=this;return{years:g.year(),months:g.month(),date:g.date(),hours:g.hours(),minutes:g.minutes(),seconds:g.seconds(),milliseconds:g.milliseconds()}}function T0(){return this.isValid()?this.toISOString():null}function $c(){return W(this)}function R0(){return S({},C(this))}function vl(){return C(this).overflow}function uf(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}it("N",0,0,"eraAbbr"),it("NN",0,0,"eraAbbr"),it("NNN",0,0,"eraAbbr"),it("NNNN",0,0,"eraName"),it("NNNNN",0,0,"eraNarrow"),it("y",["y",1],"yo","eraYear"),it("y",["yy",2],0,"eraYear"),it("y",["yyy",3],0,"eraYear"),it("y",["yyyy",4],0,"eraYear"),St("N",F0),St("NN",F0),St("NNN",F0),St("NNNN",ff),St("NNNNN",df),an(["N","NN","NNN","NNNN","NNNNN"],function(g,j,F,q){var te=F._locale.erasParse(g,q,F._strict);te?C(F).era=te:C(F).invalidEra=g}),St("y",Os),St("yy",Os),St("yyy",Os),St("yyyy",Os),St("yo",mh),an(["y","yy","yyy","yyyy"],Ko),an(["yo"],function(g,j,F,q){var te;F._locale._eraYearOrdinalRegex&&(te=g.match(F._locale._eraYearOrdinalRegex)),F._locale.eraYearOrdinalParse?j[Ko]=F._locale.eraYearOrdinalParse(g,te):j[Ko]=parseInt(g,10)});function z0(g,j){var F,q,te,ge=this._eras||Qi("en")._eras;for(F=0,q=ge.length;F=0)return ge[q]}function L0(g,j){var F=g.since<=g.until?1:-1;return j===void 0?t(g.since).year():t(g.since).year()+(j-g.offset)*F}function Zi(){var g,j,F,q=this.localeData().eras();for(g=0,j=q.length;gge&&(j=ge),yh.call(this,g,j,F,q,te))}function yh(g,j,F,q,te){var ge=a0(g,j,F,q,te),He=qa(ge.year,0,ge.dayOfYear);return this.year(He.getUTCFullYear()),this.month(He.getUTCMonth()),this.date(He.getUTCDate()),this}it("Q",0,"Qo","quarter"),St("Q",gn),an("Q",function(g,j){j[Lo]=(Cr(g)-1)*3});function Jc(g){return g==null?Math.ceil((this.month()+1)/3):this.month((g-1)*3+this.month()%3)}it("D",["DD",2],"Do","date"),St("D",mr,yu),St("DD",mr,vn),St("Do",function(g,j){return g?j._dayOfMonthOrdinalParse||j._ordinalParse:j._dayOfMonthOrdinalParseLenient}),an(["D","DD"],Ha),an("Do",function(g,j){j[Ha]=Cr(g.match(mr)[0])});var mf=Ss("Date",!0);it("DDD",["DDDD",3],"DDDo","dayOfYear"),St("DDD",dl),St("DDDD",Xo),an(["DDD","DDDD"],function(g,j,F){F._dayOfYear=Cr(g)});function H0(g){var j=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return g==null?j:this.add(g-j,"d")}it("m",["mm",2],0,"minute"),St("m",mr,xs),St("mm",mr,vn),an(["m","mm"],wa);var n2=Ss("Minutes",!1);it("s",["ss",2],0,"second"),St("s",mr,xs),St("ss",mr,vn),an(["s","ss"],ml);var hf=Ss("Seconds",!1);it("S",0,0,function(){return~~(this.millisecond()/100)}),it(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),it(0,["SSS",3],0,"millisecond"),it(0,["SSSS",4],0,function(){return this.millisecond()*10}),it(0,["SSSSS",5],0,function(){return this.millisecond()*100}),it(0,["SSSSSS",6],0,function(){return this.millisecond()*1e3}),it(0,["SSSSSSS",7],0,function(){return this.millisecond()*1e4}),it(0,["SSSSSSSS",8],0,function(){return this.millisecond()*1e5}),it(0,["SSSSSSSSS",9],0,function(){return this.millisecond()*1e6}),St("S",dl,gn),St("SS",dl,vn),St("SSS",dl,Xo);var _a,Gc;for(_a="SSSS";_a.length<=9;_a+="S")St(_a,Os);function Cn(g,j){j[_s]=Cr(("0."+g)*1e3)}for(_a="S";_a.length<=9;_a+="S")an(_a,Cn);Gc=Ss("Milliseconds",!1),it("z",0,0,"zoneAbbr"),it("zz",0,0,"zoneName");function bh(){return this._isUTC?"UTC":""}function Lu(){return this._isUTC?"Coordinated Universal Time":""}var ut=ae.prototype;ut.add=P0,ut.calendar=oh,ut.clone=ih,ut.diff=rS,ut.endOf=Xa,ut.format=M0,ut.from=Qy,ut.fromNow=sh,ut.to=Zy,ut.toNow=e2,ut.get=_m,ut.invalidAt=vl,ut.isAfter=Jy,ut.isBefore=Gy,ut.isBetween=Xy,ut.isSame=Ky,ut.isSameOrAfter=Nn,ut.isSameOrBefore=tS,ut.isValid=$c,ut.lang=uh,ut.locale=Ja,ut.localeData=ch,ut.max=By,ut.min=Wy,ut.parsingFlags=R0,ut.set=Sm,ut.startOf=mo,ut.subtract=lf,ut.toArray=fh,ut.toObject=dh,ut.toDate=As,ut.toISOString=ah,ut.inspect=lh,typeof Symbol<"u"&&Symbol.for!=null&&(ut[Symbol.for("nodejs.util.inspect.custom")]=function(){return"Moment<"+this.format()+">"}),ut.toJSON=T0,ut.toString=Yy,ut.unix=gl,ut.valueOf=Vl,ut.creationData=uf,ut.eraName=Zi,ut.eraNarrow=Tu,ut.eraAbbr=D0,ut.eraYear=N0,ut.year=r0,ut.isLeapYear=Bp,ut.weekYear=hh,ut.isoWeekYear=ql,ut.quarter=ut.quarters=Jc,ut.month=Is,ut.daysInMonth=Ac,ut.week=ut.weeks=Ua,ut.isoWeek=ut.isoWeeks=Su,ut.weeksInYear=r2,ut.weeksInWeekYear=gh,ut.isoWeeksInYear=W0,ut.isoWeeksInISOWeekYear=B0,ut.date=mf,ut.day=ut.days=Pm,ut.weekday=Fl,ut.isoWeekday=ui,ut.dayOfYear=H0,ut.hour=ut.hours=Rc,ut.minute=ut.minutes=n2,ut.second=ut.seconds=hf,ut.millisecond=ut.milliseconds=Gc,ut.utcOffset=_0,ut.utc=qy,ut.local=S0,ut.parseZone=qc,ut.hasAlignedHourOffset=j0,ut.isDST=Ym,ut.isLocal=k0,ut.isUtcOffset=af,ut.isUtc=Qm,ut.isUTC=Qm,ut.zoneAbbr=bh,ut.zoneName=Lu,ut.dates=de("dates accessor is deprecated. Use date instead.",mf),ut.months=de("months accessor is deprecated. Use month instead",Is),ut.years=de("years accessor is deprecated. Use year instead",r0),ut.zone=de("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",Km),ut.isDSTShifted=de("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",I0);function V0(g){return sn(g*1e3)}function pi(){return sn.apply(null,arguments).parseZone()}function Sa(g){return g}var Zr=We.prototype;Zr.calendar=ot,Zr.longDateFormat=_r,Zr.invalidDate=Dr,Zr.ordinal=fn,Zr.preparse=Sa,Zr.postformat=Sa,Zr.relativeTime=Gn,Zr.pastFuture=co,Zr.set=be,Zr.eras=z0,Zr.erasParse=t2,Zr.erasConvertYear=L0,Zr.erasAbbrRegex=pf,Zr.erasNameRegex=cf,Zr.erasNarrowRegex=Ms,Zr.months=Im,Zr.monthsShort=My,Zr.monthsParse=km,Zr.monthsRegex=Ry,Zr.monthsShortRegex=Ty,Zr.week=l0,Zr.firstDayOfYear=u0,Zr.firstDayOfWeek=s0,Zr.weekdays=Tc,Zr.weekdaysMin=Qp,Zr.weekdaysShort=Yp,Zr.weekdaysParse=Zp,Zr.weekdaysRegex=Em,Zr.weekdaysShortRegex=Cm,Zr.weekdaysMinRegex=Am,Zr.isPM=Mm,Zr.meridiem=Tm;function jo(g,j,F,q){var te=Qi(),ge=I().set(q,j);return te[F](ge,g)}function wh(g,j,F){if(h(g)&&(j=g,g=void 0),g=g||"",j!=null)return jo(g,j,F,"month");var q,te=[];for(q=0;q<12;q++)te[q]=jo(g,q,F,"month");return te}function Du(g,j,F,q){typeof g=="boolean"?(h(j)&&(F=j,j=void 0),j=j||""):(j=g,F=j,g=!1,h(j)&&(F=j,j=void 0),j=j||"");var te=Qi(),ge=g?te._week.dow:0,He,jt=[];if(F!=null)return jo(j,(F+ge)%7,q,"day");for(He=0;He<7;He++)jt[He]=jo(j,(He+ge)%7,q,"day");return jt}function nS(g,j){return wh(g,j,"months")}function oS(g,j){return wh(g,j,"monthsShort")}function iS(g,j,F){return Du(g,j,F,"weekdays")}function aS(g,j,F){return Du(g,j,F,"weekdaysShort")}function Oh(g,j,F){return Du(g,j,F,"weekdaysMin")}Yi("en",{eras:[{since:"0001-01-01",until:1/0,offset:1,name:"Anno Domini",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"Before Christ",narrow:"BC",abbr:"BC"}],dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(g){var j=g%10,F=Cr(g%100/10)===1?"th":j===1?"st":j===2?"nd":j===3?"rd":"th";return g+F}}),t.lang=de("moment.lang is deprecated. Use moment.locale instead.",Yi),t.langData=de("moment.langData is deprecated. Use moment.localeData instead.",Qi);var ho=Math.abs;function ea(){var g=this._data;return this._milliseconds=ho(this._milliseconds),this._days=ho(this._days),this._months=ho(this._months),g.milliseconds=ho(g.milliseconds),g.seconds=ho(g.seconds),g.minutes=ho(g.minutes),g.hours=ho(g.hours),g.months=ho(g.months),g.years=ho(g.years),this}function yl(g,j,F,q){var te=Ai(j,F);return g._milliseconds+=q*te._milliseconds,g._days+=q*te._days,g._months+=q*te._months,g._bubble()}function o2(g,j){return yl(this,g,j,1)}function i2(g,j){return yl(this,g,j,-1)}function q0(g){return g<0?Math.floor(g):Math.ceil(g)}function xh(){var g=this._milliseconds,j=this._days,F=this._months,q=this._data,te,ge,He,jt,er;return g>=0&&j>=0&&F>=0||g<=0&&j<=0&&F<=0||(g+=q0(gf(F)+j)*864e5,j=0,F=0),q.milliseconds=g%1e3,te=Ci(g/1e3),q.seconds=te%60,ge=Ci(te/60),q.minutes=ge%60,He=Ci(ge/60),q.hours=He%24,j+=Ci(He/24),er=Ci(Do(j)),F+=er,j-=q0(gf(er)),jt=Ci(F/12),F%=12,q.days=j,q.months=F,q.years=jt,this}function Do(g){return g*4800/146097}function gf(g){return g*146097/4800}function U0(g){if(!this.isValid())return NaN;var j,F,q=this._milliseconds;if(g=En(g),g==="month"||g==="quarter"||g==="year")switch(j=this._days+q/864e5,F=this._months+Do(j),g){case"month":return F;case"quarter":return F/3;case"year":return F/12}else switch(j=this._days+Math.round(gf(this._months)),g){case"week":return j/7+q/6048e5;case"day":return j+q/864e5;case"hour":return j*24+q/36e5;case"minute":return j*1440+q/6e4;case"second":return j*86400+q/1e3;case"millisecond":return Math.floor(j*864e5)+q;default:throw new Error("Unknown unit "+g)}}function ta(g){return function(){return this.as(g)}}var _h=ta("ms"),vf=ta("s"),a2=ta("m"),l2=ta("h"),yf=ta("d"),s2=ta("w"),Sh=ta("M"),$0=ta("Q"),jh=ta("y"),Ih=_h;function u2(){return Ai(this)}function Nu(g){return g=En(g),this.isValid()?this[g+"s"]():NaN}function Ts(g){return function(){return this.isValid()?this._data[g]:NaN}}var c2=Ts("milliseconds"),J0=Ts("seconds"),G0=Ts("minutes"),p2=Ts("hours"),f2=Ts("days"),kh=Ts("months"),bl=Ts("years");function bf(){return Ci(this.days()/7)}var Ka=Math.round,Rs={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function lS(g,j,F,q,te){return te.relativeTime(j||1,!!F,g,q)}function Ph(g,j,F,q){var te=Ai(g).abs(),ge=Ka(te.as("s")),He=Ka(te.as("m")),jt=Ka(te.as("h")),er=Ka(te.as("d")),Ar=Ka(te.as("M")),No=Ka(te.as("w")),Mi=Ka(te.as("y")),Ya=ge<=F.ss&&["s",ge]||ge0,Ya[4]=q,lS.apply(null,Ya)}function yn(g){return g===void 0?Ka:typeof g=="function"?(Ka=g,!0):!1}function go(g,j){return Rs[g]===void 0?!1:j===void 0?Rs[g]:(Rs[g]=j,g==="s"&&(Rs.ss=j-1),!0)}function d2(g,j){if(!this.isValid())return this.localeData().invalidDate();var F=!1,q=Rs,te,ge;return typeof g=="object"&&(j=g,g=!1),typeof g=="boolean"&&(F=g),typeof j=="object"&&(q=Object.assign({},Rs,j),j.s!=null&&j.ss==null&&(q.ss=j.s-1)),te=this.localeData(),ge=Ph(this,!F,q,te),F&&(ge=te.pastFuture(+this,ge)),te.postformat(ge)}var Xc=Math.abs;function zs(g){return(g>0)-(g<0)||+g}function Kc(){if(!this.isValid())return this.localeData().invalidDate();var g=Xc(this._milliseconds)/1e3,j=Xc(this._days),F=Xc(this._months),q,te,ge,He,jt=this.asSeconds(),er,Ar,No,Mi;return jt?(q=Ci(g/60),te=Ci(q/60),g%=60,q%=60,ge=Ci(F/12),F%=12,He=g?g.toFixed(3).replace(/\.?0+$/,""):"",er=jt<0?"-":"",Ar=zs(this._months)!==zs(jt)?"-":"",No=zs(this._days)!==zs(jt)?"-":"",Mi=zs(this._milliseconds)!==zs(jt)?"-":"",er+"P"+(ge?Ar+ge+"Y":"")+(F?Ar+F+"M":"")+(j?No+j+"D":"")+(te||q||g?"T":"")+(te?Mi+te+"H":"")+(q?Mi+q+"M":"")+(g?Mi+He+"S":"")):"P0D"}var Sr=Hl.prototype;Sr.isValid=Vy,Sr.abs=ea,Sr.add=o2,Sr.subtract=i2,Sr.as=U0,Sr.asMilliseconds=_h,Sr.asSeconds=vf,Sr.asMinutes=a2,Sr.asHours=l2,Sr.asDays=yf,Sr.asWeeks=s2,Sr.asMonths=Sh,Sr.asQuarters=$0,Sr.asYears=jh,Sr.valueOf=Ih,Sr._bubble=xh,Sr.clone=u2,Sr.get=Nu,Sr.milliseconds=c2,Sr.seconds=J0,Sr.minutes=G0,Sr.hours=p2,Sr.days=f2,Sr.weeks=bf,Sr.months=kh,Sr.years=bl,Sr.humanize=d2,Sr.toISOString=Kc,Sr.toString=Kc,Sr.toJSON=Kc,Sr.locale=Ja,Sr.localeData=ch,Sr.toIsoString=de("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",Kc),Sr.lang=uh,it("X",0,0,"unix"),it("x",0,0,"valueOf"),St("x",Ll),St("X",e0),an("X",function(g,j,F){F._d=new Date(parseFloat(g)*1e3)}),an("x",function(g,j,F){F._d=new Date(Cr(g))});return t.version="2.30.1",n(sn),t.fn=ut,t.min=Hy,t.max=Fc,t.now=Wc,t.utc=I,t.unix=V0,t.months=nS,t.isDate=y,t.locale=Yi,t.invalid=R,t.duration=Ai,t.isMoment=Z,t.weekdays=iS,t.parseZone=pi,t.localeData=Qi,t.isDuration=Bc,t.monthsShort=oS,t.weekdaysMin=Oh,t.defineLocale=ln,t.updateLocale=Ly,t.locales=Dm,t.weekdaysShort=aS,t.normalizeUnits=En,t.relativeTimeRounding=yn,t.relativeTimeThreshold=go,t.calendarFormat=nh,t.prototype=ut,t.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"GGGG-[W]WW",MONTH:"YYYY-MM"},t})});var npe=ke((rFt,rpe)=>{var WAe=ac(),BAe=Qs(),HAe=ds(),VAe="[object String]";function qAe(e){return typeof e=="string"||!BAe(e)&&HAe(e)&&WAe(e)==VAe}rpe.exports=qAe});var ipe=ke((nFt,ope)=>{var UAe=ac(),$Ae=ds(),JAe="[object Boolean]";function GAe(e){return e===!0||e===!1||$Ae(e)&&UAe(e)==JAe}ope.exports=GAe});var uF=ke((oFt,ape)=>{var XAe=ac(),KAe=ds(),YAe="[object Number]";function QAe(e){return typeof e=="number"||KAe(e)&&XAe(e)==YAe}ape.exports=QAe});var spe=ke((iFt,lpe)=>{var ZAe=uF();function eMe(e){return ZAe(e)&&e!=+e}lpe.exports=eMe});var wpe=ke((bpe,_P)=>{(function(e,t){typeof define=="function"&&define.amd?define(t):typeof _P=="object"&&_P.exports?_P.exports=t():e.numeral=t()})(bpe,function(){var e,t,n="2.0.6",r={},o={},i={currentLocale:"en",zeroFormat:null,nullFormat:null,defaultFormat:"0,0",scalePercentBy100:!0},u={currentLocale:i.currentLocale,zeroFormat:i.zeroFormat,nullFormat:i.nullFormat,defaultFormat:i.defaultFormat,scalePercentBy100:i.scalePercentBy100};function f(h,y){this._input=h,this._value=y}return e=function(h){var y,O,S,I;if(e.isNumeral(h))y=h.value();else if(h===0||typeof h>"u")y=0;else if(h===null||t.isNaN(h))y=null;else if(typeof h=="string")if(u.zeroFormat&&h===u.zeroFormat)y=0;else if(u.nullFormat&&h===u.nullFormat||!h.replace(/[^0-9]+/g,"").length)y=null;else{for(O in r)if(I=typeof r[O].regexps.unformat=="function"?r[O].regexps.unformat():r[O].regexps.unformat,I&&h.match(I)){S=r[O].unformat;break}S=S||e._.stringToNumber,y=S(h)}else y=Number(h)||null;return new f(h,y)},e.version=n,e.isNumeral=function(h){return h instanceof f},e._=t={numberToFormat:function(h,y,O){var S=o[e.options.currentLocale],I=!1,A=!1,C=0,M="",W=1e12,R=1e9,B=1e6,Y=1e3,X="",ae=!1,Z,K,de,se,Se,Oe,be,Ue,We,Ge;if(h=h||0,K=Math.abs(h),e._.includes(y,"(")?(I=!0,y=y.replace(/[\(|\)]/g,"")):(e._.includes(y,"+")||e._.includes(y,"-"))&&(Ue=e._.includes(y,"+")?y.indexOf("+"):h<0?y.indexOf("-"):-1,y=y.replace(/[\+|\-]/g,"")),e._.includes(y,"a")&&(Z=y.match(/a(k|m|b|t)?/),Z=Z?Z[1]:!1,e._.includes(y," a")&&(M=" "),y=y.replace(new RegExp(M+"a[kmbt]?"),""),K>=W&&!Z||Z==="t"?(M+=S.abbreviations.trillion,h=h/W):K=R&&!Z||Z==="b"?(M+=S.abbreviations.billion,h=h/R):K=B&&!Z||Z==="m"?(M+=S.abbreviations.million,h=h/B):(K=Y&&!Z||Z==="k")&&(M+=S.abbreviations.thousand,h=h/Y)),e._.includes(y,"[.]")&&(A=!0,y=y.replace("[.]",".")),Oe=h.toString().split(".")[0],be=y.split(".")[1],We=y.indexOf(","),C=(y.split(".")[0].split(",")[0].match(/0/g)||[]).length,be?(e._.includes(be,"[")?(be=be.replace("]",""),be=be.split("["),X=e._.toFixed(h,be[0].length+be[1].length,O,be[1].length)):X=e._.toFixed(h,be.length,O),Oe=X.split(".")[0],e._.includes(X,".")?X=S.delimiters.decimal+X.split(".")[1]:X="",A&&Number(X.slice(1))===0&&(X="")):Oe=e._.toFixed(h,0,O),M&&!Z&&Number(Oe)>=1e3&&M!==S.abbreviations.trillion)switch(Oe=String(Number(Oe)/1e3),M){case S.abbreviations.thousand:M=S.abbreviations.million;break;case S.abbreviations.million:M=S.abbreviations.billion;break;case S.abbreviations.billion:M=S.abbreviations.trillion;break}if(e._.includes(Oe,"-")&&(Oe=Oe.slice(1),ae=!0),Oe.length0;Qe--)Oe="0"+Oe;return We>-1&&(Oe=Oe.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1"+S.delimiters.thousands)),y.indexOf(".")===0&&(Oe=""),Ge=Oe+X+(M||""),I?Ge=(I&&ae?"(":"")+Ge+(I&&ae?")":""):Ue>=0?Ge=Ue===0?(ae?"-":"+")+Ge:Ge+(ae?"-":"+"):ae&&(Ge="-"+Ge),Ge},stringToNumber:function(h){var y=o[u.currentLocale],O=h,S={thousand:3,million:6,billion:9,trillion:12},I,A,C,M;if(u.zeroFormat&&h===u.zeroFormat)A=0;else if(u.nullFormat&&h===u.nullFormat||!h.replace(/[^0-9]+/g,"").length)A=null;else{A=1,y.delimiters.decimal!=="."&&(h=h.replace(/\./g,"").replace(y.delimiters.decimal,"."));for(I in S)if(M=new RegExp("[^a-zA-Z]"+y.abbreviations[I]+"(?:\\)|(\\"+y.currency.symbol+")?(?:\\))?)?$"),O.match(M)){A*=Math.pow(10,S[I]);break}A*=(h.split("-").length+Math.min(h.split("(").length-1,h.split(")").length-1))%2?1:-1,h=h.replace(/[^0-9\.]+/g,""),A*=Number(h)}return A},isNaN:function(h){return typeof h=="number"&&isNaN(h)},includes:function(h,y){return h.indexOf(y)!==-1},insert:function(h,y,O){return h.slice(0,O)+y+h.slice(O)},reduce:function(h,y){if(this===null)throw new TypeError("Array.prototype.reduce called on null or undefined");if(typeof y!="function")throw new TypeError(y+" is not a function");var O=Object(h),S=O.length>>>0,I=0,A;if(arguments.length===3)A=arguments[2];else{for(;I=S)throw new TypeError("Reduce of empty array with no initial value");A=O[I++]}for(;IS?y:S},1)},toFixed:function(h,y,O,S){var I=h.toString().split("."),A=y-(S||0),C,M,W,R;return I.length===2?C=Math.min(Math.max(I[1].length,A),y):C=A,W=Math.pow(10,C),R=(O(h+"e+"+C)/W).toFixed(C),S>y-C&&(M=new RegExp("\\.?0{1,"+(S-(y-C))+"}$"),R=R.replace(M,"")),R}},e.options=u,e.formats=r,e.locales=o,e.locale=function(h){return h&&(u.currentLocale=h.toLowerCase()),u.currentLocale},e.localeData=function(h){if(!h)return o[u.currentLocale];if(h=h.toLowerCase(),!o[h])throw new Error("Unknown locale : "+h);return o[h]},e.reset=function(){for(var h in i)u[h]=i[h]},e.zeroFormat=function(h){u.zeroFormat=typeof h=="string"?h:null},e.nullFormat=function(h){u.nullFormat=typeof h=="string"?h:null},e.defaultFormat=function(h){u.defaultFormat=typeof h=="string"?h:"0.0"},e.register=function(h,y,O){if(y=y.toLowerCase(),this[h+"s"][y])throw new TypeError(y+" "+h+" already registered.");return this[h+"s"][y]=O,O},e.validate=function(h,y){var O,S,I,A,C,M,W,R;if(typeof h!="string"&&(h+="",console.warn&&console.warn("Numeral.js: Value is not string. It has been co-erced to: ",h)),h=h.trim(),h.match(/^\d+$/))return!0;if(h==="")return!1;try{W=e.localeData(y)}catch{W=e.localeData(e.locale())}return I=W.currency.symbol,C=W.abbreviations,O=W.delimiters.decimal,W.delimiters.thousands==="."?S="\\.":S=W.delimiters.thousands,R=h.match(/^[^\d]+/),R!==null&&(h=h.substr(1),R[0]!==I)||(R=h.match(/[^\d]+$/),R!==null&&(h=h.slice(0,-1),R[0]!==C.thousand&&R[0]!==C.million&&R[0]!==C.billion&&R[0]!==C.trillion))?!1:(M=new RegExp(S+"{2}"),h.match(/[^\d.,]/g)?!1:(A=h.split(O),A.length>2?!1:A.length<2?!!A[0].match(/^\d+.*\d$/)&&!A[0].match(M):A[0].length===1?!!A[0].match(/^\d+$/)&&!A[0].match(M)&&!!A[1].match(/^\d+$/):!!A[0].match(/^\d+.*\d$/)&&!A[0].match(M)&&!!A[1].match(/^\d+$/)))},e.fn=f.prototype={clone:function(){return e(this)},format:function(h,y){var O=this._value,S=h||u.defaultFormat,I,A,C;if(y=y||Math.round,O===0&&u.zeroFormat!==null)A=u.zeroFormat;else if(O===null&&u.nullFormat!==null)A=u.nullFormat;else{for(I in r)if(S.match(r[I].regexps.format)){C=r[I].format;break}C=C||e._.numberToFormat,A=C(O,S,y)}return A},value:function(){return this._value},input:function(){return this._input},set:function(h){return this._value=Number(h),this},add:function(h){var y=t.correctionFactor.call(null,this._value,h);function O(S,I,A,C){return S+Math.round(y*I)}return this._value=t.reduce([this._value,h],O,0)/y,this},subtract:function(h){var y=t.correctionFactor.call(null,this._value,h);function O(S,I,A,C){return S-Math.round(y*I)}return this._value=t.reduce([h],O,Math.round(this._value*y))/y,this},multiply:function(h){function y(O,S,I,A){var C=t.correctionFactor(O,S);return Math.round(O*C)*Math.round(S*C)/Math.round(C*C)}return this._value=t.reduce([this._value,h],y,1),this},divide:function(h){function y(O,S,I,A){var C=t.correctionFactor(O,S);return Math.round(O*C)/Math.round(S*C)}return this._value=t.reduce([this._value,h],y),this},difference:function(h){return Math.abs(e(this._value).subtract(h).value())}},e.register("locale","en",{delimiters:{thousands:",",decimal:"."},abbreviations:{thousand:"k",million:"m",billion:"b",trillion:"t"},ordinal:function(h){var y=h%10;return~~(h%100/10)===1?"th":y===1?"st":y===2?"nd":y===3?"rd":"th"},currency:{symbol:"$"}}),function(){e.register("format","bps",{regexps:{format:/(BPS)/,unformat:/(BPS)/},format:function(h,y,O){var S=e._.includes(y," BPS")?" ":"",I;return h=h*1e4,y=y.replace(/\s?BPS/,""),I=e._.numberToFormat(h,y,O),e._.includes(I,")")?(I=I.split(""),I.splice(-1,0,S+"BPS"),I=I.join("")):I=I+S+"BPS",I},unformat:function(h){return+(e._.stringToNumber(h)*1e-4).toFixed(15)}})}(),function(){var h={base:1e3,suffixes:["B","KB","MB","GB","TB","PB","EB","ZB","YB"]},y={base:1024,suffixes:["B","KiB","MiB","GiB","TiB","PiB","EiB","ZiB","YiB"]},O=h.suffixes.concat(y.suffixes.filter(function(I){return h.suffixes.indexOf(I)<0})),S=O.join("|");S="("+S.replace("B","B(?!PS)")+")",e.register("format","bytes",{regexps:{format:/([0\s]i?b)/,unformat:new RegExp(S)},format:function(I,A,C){var M,W=e._.includes(A,"ib")?y:h,R=e._.includes(A," b")||e._.includes(A," ib")?" ":"",B,Y,X;for(A=A.replace(/\s?i?b/,""),B=0;B<=W.suffixes.length;B++)if(Y=Math.pow(W.base,B),X=Math.pow(W.base,B+1),I===null||I===0||I>=Y&&I0&&(I=I/Y);break}return M=e._.numberToFormat(I,A,C),M+R},unformat:function(I){var A=e._.stringToNumber(I),C,M;if(A){for(C=h.suffixes.length-1;C>=0;C--){if(e._.includes(I,h.suffixes[C])){M=Math.pow(h.base,C);break}if(e._.includes(I,y.suffixes[C])){M=Math.pow(y.base,C);break}}A*=M||1}return A}})}(),function(){e.register("format","currency",{regexps:{format:/(\$)/},format:function(h,y,O){var S=e.locales[e.options.currentLocale],I={before:y.match(/^([\+|\-|\(|\s|\$]*)/)[0],after:y.match(/([\+|\-|\)|\s|\$]*)$/)[0]},A,C,M;for(y=y.replace(/\s?\$\s?/,""),A=e._.numberToFormat(h,y,O),h>=0?(I.before=I.before.replace(/[\-\(]/,""),I.after=I.after.replace(/[\-\)]/,"")):h<0&&!e._.includes(I.before,"-")&&!e._.includes(I.before,"(")&&(I.before="-"+I.before),M=0;M=0;M--)switch(C=I.after[M],C){case"$":A=M===I.after.length-1?A+S.currency.symbol:e._.insert(A,S.currency.symbol,-(I.after.length-(1+M)));break;case" ":A=M===I.after.length-1?A+" ":e._.insert(A," ",-(I.after.length-(1+M)+S.currency.symbol.length-1));break}return A}})}(),function(){e.register("format","exponential",{regexps:{format:/(e\+|e-)/,unformat:/(e\+|e-)/},format:function(h,y,O){var S,I=typeof h=="number"&&!e._.isNaN(h)?h.toExponential():"0e+0",A=I.split("e");return y=y.replace(/e[\+|\-]{1}0/,""),S=e._.numberToFormat(Number(A[0]),y,O),S+"e"+A[1]},unformat:function(h){var y=e._.includes(h,"e+")?h.split("e+"):h.split("e-"),O=Number(y[0]),S=Number(y[1]);S=e._.includes(h,"e-")?S*=-1:S;function I(A,C,M,W){var R=e._.correctionFactor(A,C),B=A*R*(C*R)/(R*R);return B}return e._.reduce([O,Math.pow(10,S)],I,1)}})}(),function(){e.register("format","ordinal",{regexps:{format:/(o)/},format:function(h,y,O){var S=e.locales[e.options.currentLocale],I,A=e._.includes(y," o")?" ":"";return y=y.replace(/\s?o/,""),A+=S.ordinal(h),I=e._.numberToFormat(h,y,O),I+A}})}(),function(){e.register("format","percentage",{regexps:{format:/(%)/,unformat:/(%)/},format:function(h,y,O){var S=e._.includes(y," %")?" ":"",I;return e.options.scalePercentBy100&&(h=h*100),y=y.replace(/\s?\%/,""),I=e._.numberToFormat(h,y,O),e._.includes(I,")")?(I=I.split(""),I.splice(-1,0,S+"%"),I=I.join("")):I=I+S+"%",I},unformat:function(h){var y=e._.stringToNumber(h);return e.options.scalePercentBy100?y*.01:y}})}(),function(){e.register("format","time",{regexps:{format:/(:)/,unformat:/(:)/},format:function(h,y,O){var S=Math.floor(h/60/60),I=Math.floor((h-S*60*60)/60),A=Math.round(h-S*60*60-I*60);return S+":"+(I<10?"0"+I:I)+":"+(A<10?"0"+A:A)},unformat:function(h){var y=h.split(":"),O=0;return y.length===3?(O=O+Number(y[0])*60*60,O=O+Number(y[1])*60,O=O+Number(y[2])):y.length===2&&(O=O+Number(y[0])*60,O=O+Number(y[1])),Number(O)}})}(),e})});var Spe=ke((kFt,_pe)=>{var xpe=aP(),aMe="Expected a function";function pF(e,t){if(typeof e!="function"||t!=null&&typeof t!="function")throw new TypeError(aMe);var n=function(){var r=arguments,o=t?t.apply(this,r):r[0],i=n.cache;if(i.has(o))return i.get(o);var u=e.apply(this,r);return n.cache=i.set(o,u)||i,u};return n.cache=new(pF.Cache||xpe),n}pF.Cache=xpe;_pe.exports=pF});var IP=ke((RFt,Ppe)=>{var sMe=ac(),uMe=ds(),cMe="[object Symbol]";function pMe(e){return typeof e=="symbol"||uMe(e)&&sMe(e)==cMe}Ppe.exports=pMe});var Cpe=ke((zFt,Epe)=>{var fMe=Qs(),dMe=IP(),mMe=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,hMe=/^\w*$/;function gMe(e,t){if(fMe(e))return!1;var n=typeof e;return n=="number"||n=="symbol"||n=="boolean"||e==null||dMe(e)?!0:hMe.test(e)||!mMe.test(e)||t!=null&&e in Object(t)}Epe.exports=gMe});var Mpe=ke((LFt,Ape)=>{var vMe=Spe(),yMe=500;function bMe(e){var t=vMe(e,function(r){return n.size===yMe&&n.clear(),r}),n=t.cache;return t}Ape.exports=bMe});var Rpe=ke((DFt,Tpe)=>{var wMe=Mpe(),OMe=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,xMe=/\\(\\)?/g,_Me=wMe(function(e){var t=[];return e.charCodeAt(0)===46&&t.push(""),e.replace(OMe,function(n,r,o,i){t.push(o?i.replace(xMe,"$1"):r||n)}),t});Tpe.exports=_Me});var dF=ke((NFt,zpe)=>{function SMe(e,t){for(var n=-1,r=e==null?0:e.length,o=Array(r);++n{var Lpe=N1(),jMe=dF(),IMe=Qs(),kMe=IP(),PMe=1/0,Dpe=Lpe?Lpe.prototype:void 0,Npe=Dpe?Dpe.toString:void 0;function Fpe(e){if(typeof e=="string")return e;if(IMe(e))return jMe(e,Fpe)+"";if(kMe(e))return Npe?Npe.call(e):"";var t=e+"";return t=="0"&&1/e==-PMe?"-0":t}Wpe.exports=Fpe});var Vpe=ke((WFt,Hpe)=>{var EMe=Bpe();function CMe(e){return e==null?"":EMe(e)}Hpe.exports=CMe});var kP=ke((BFt,qpe)=>{var AMe=Qs(),MMe=Cpe(),TMe=Rpe(),RMe=Vpe();function zMe(e,t){return AMe(e)?e:MMe(e,t)?[e]:TMe(RMe(e))}qpe.exports=zMe});var mF=ke((HFt,Upe)=>{var LMe=IP(),DMe=1/0;function NMe(e){if(typeof e=="string"||LMe(e))return e;var t=e+"";return t=="0"&&1/e==-DMe?"-0":t}Upe.exports=NMe});var hF=ke((VFt,$pe)=>{var FMe=kP(),WMe=mF();function BMe(e,t){t=FMe(t,e);for(var n=0,r=t.length;e!=null&&n{var HMe=hF();function VMe(e,t,n){var r=e==null?void 0:HMe(e,t);return r===void 0?n:r}Jpe.exports=VMe});var Kpe=ke((UFt,Xpe)=>{function qMe(e,t){for(var n=-1,r=e==null?0:e.length;++n{var UMe=Sd(),$Me=function(){try{var e=UMe(Object,"defineProperty");return e({},"",{}),e}catch{}}();Ype.exports=$Me});var vF=ke((JFt,Zpe)=>{var Qpe=gF();function JMe(e,t,n){t=="__proto__"&&Qpe?Qpe(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}Zpe.exports=JMe});var yF=ke((GFt,efe)=>{var GMe=vF(),XMe=nP(),KMe=Object.prototype,YMe=KMe.hasOwnProperty;function QMe(e,t,n){var r=e[t];(!(YMe.call(e,t)&&XMe(r,n))||n===void 0&&!(t in e))&&GMe(e,t,n)}efe.exports=QMe});var Ev=ke((XFt,tfe)=>{var ZMe=yF(),eTe=vF();function tTe(e,t,n,r){var o=!n;n||(n={});for(var i=-1,u=t.length;++i{var rTe=Ev(),nTe=mP();function oTe(e,t){return e&&rTe(t,nTe(t),e)}rfe.exports=oTe});var ife=ke((YFt,ofe)=>{function iTe(e){var t=[];if(e!=null)for(var n in Object(e))t.push(n);return t}ofe.exports=iTe});var lfe=ke((QFt,afe)=>{var aTe=F1(),lTe=dP(),sTe=ife(),uTe=Object.prototype,cTe=uTe.hasOwnProperty;function pTe(e){if(!aTe(e))return sTe(e);var t=lTe(e),n=[];for(var r in e)r=="constructor"&&(t||!cTe.call(e,r))||n.push(r);return n}afe.exports=pTe});var PP=ke((ZFt,sfe)=>{var fTe=JN(),dTe=lfe(),mTe=XN();function hTe(e){return mTe(e)?fTe(e,!0):dTe(e)}sfe.exports=hTe});var cfe=ke((eWt,ufe)=>{var gTe=Ev(),vTe=PP();function yTe(e,t){return e&&gTe(t,vTe(t),e)}ufe.exports=yTe});var hfe=ke((c5,Cv)=>{var bTe=Ys(),mfe=typeof c5=="object"&&c5&&!c5.nodeType&&c5,pfe=mfe&&typeof Cv=="object"&&Cv&&!Cv.nodeType&&Cv,wTe=pfe&&pfe.exports===mfe,ffe=wTe?bTe.Buffer:void 0,dfe=ffe?ffe.allocUnsafe:void 0;function OTe(e,t){if(t)return e.slice();var n=e.length,r=dfe?dfe(n):new e.constructor(n);return e.copy(r),r}Cv.exports=OTe});var vfe=ke((tWt,gfe)=>{function xTe(e,t){var n=-1,r=e.length;for(t||(t=Array(r));++n{var _Te=Ev(),STe=uP();function jTe(e,t){return _Te(e,STe(e),t)}yfe.exports=jTe});var EP=ke((nWt,wfe)=>{var ITe=GN(),kTe=ITe(Object.getPrototypeOf,Object);wfe.exports=kTe});var bF=ke((oWt,Ofe)=>{var PTe=sP(),ETe=EP(),CTe=uP(),ATe=HN(),MTe=Object.getOwnPropertySymbols,TTe=MTe?function(e){for(var t=[];e;)PTe(t,CTe(e)),e=ETe(e);return t}:ATe;Ofe.exports=TTe});var _fe=ke((iWt,xfe)=>{var RTe=Ev(),zTe=bF();function LTe(e,t){return RTe(e,zTe(e),t)}xfe.exports=LTe});var wF=ke((aWt,Sfe)=>{var DTe=BN(),NTe=bF(),FTe=PP();function WTe(e){return DTe(e,FTe,NTe)}Sfe.exports=WTe});var Ife=ke((lWt,jfe)=>{var BTe=Object.prototype,HTe=BTe.hasOwnProperty;function VTe(e){var t=e.length,n=new e.constructor(t);return t&&typeof e[0]=="string"&&HTe.call(e,"index")&&(n.index=e.index,n.input=e.input),n}jfe.exports=VTe});var CP=ke((sWt,Pfe)=>{var kfe=FN();function qTe(e){var t=new e.constructor(e.byteLength);return new kfe(t).set(new kfe(e)),t}Pfe.exports=qTe});var Cfe=ke((uWt,Efe)=>{var UTe=CP();function $Te(e,t){var n=t?UTe(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)}Efe.exports=$Te});var Mfe=ke((cWt,Afe)=>{var JTe=/\w*$/;function GTe(e){var t=new e.constructor(e.source,JTe.exec(e));return t.lastIndex=e.lastIndex,t}Afe.exports=GTe});var Dfe=ke((pWt,Lfe)=>{var Tfe=N1(),Rfe=Tfe?Tfe.prototype:void 0,zfe=Rfe?Rfe.valueOf:void 0;function XTe(e){return zfe?Object(zfe.call(e)):{}}Lfe.exports=XTe});var Ffe=ke((fWt,Nfe)=>{var KTe=CP();function YTe(e,t){var n=t?KTe(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.length)}Nfe.exports=YTe});var Bfe=ke((dWt,Wfe)=>{var QTe=CP(),ZTe=Cfe(),eRe=Mfe(),tRe=Dfe(),rRe=Ffe(),nRe="[object Boolean]",oRe="[object Date]",iRe="[object Map]",aRe="[object Number]",lRe="[object RegExp]",sRe="[object Set]",uRe="[object String]",cRe="[object Symbol]",pRe="[object ArrayBuffer]",fRe="[object DataView]",dRe="[object Float32Array]",mRe="[object Float64Array]",hRe="[object Int8Array]",gRe="[object Int16Array]",vRe="[object Int32Array]",yRe="[object Uint8Array]",bRe="[object Uint8ClampedArray]",wRe="[object Uint16Array]",ORe="[object Uint32Array]";function xRe(e,t,n){var r=e.constructor;switch(t){case pRe:return QTe(e);case nRe:case oRe:return new r(+e);case fRe:return ZTe(e,n);case dRe:case mRe:case hRe:case gRe:case vRe:case yRe:case bRe:case wRe:case ORe:return rRe(e,n);case iRe:return new r;case aRe:case uRe:return new r(e);case lRe:return eRe(e);case sRe:return new r;case cRe:return tRe(e)}}Wfe.exports=xRe});var qfe=ke((mWt,Vfe)=>{var _Re=F1(),Hfe=Object.create,SRe=function(){function e(){}return function(t){if(!_Re(t))return{};if(Hfe)return Hfe(t);e.prototype=t;var n=new e;return e.prototype=void 0,n}}();Vfe.exports=SRe});var $fe=ke((hWt,Ufe)=>{var jRe=qfe(),IRe=EP(),kRe=dP();function PRe(e){return typeof e.constructor=="function"&&!kRe(e)?jRe(IRe(e)):{}}Ufe.exports=PRe});var Gfe=ke((gWt,Jfe)=>{var ERe=l5(),CRe=ds(),ARe="[object Map]";function MRe(e){return CRe(e)&&ERe(e)==ARe}Jfe.exports=MRe});var Qfe=ke((vWt,Yfe)=>{var TRe=Gfe(),RRe=pP(),Xfe=fP(),Kfe=Xfe&&Xfe.isMap,zRe=Kfe?RRe(Kfe):TRe;Yfe.exports=zRe});var ede=ke((yWt,Zfe)=>{var LRe=l5(),DRe=ds(),NRe="[object Set]";function FRe(e){return DRe(e)&&LRe(e)==NRe}Zfe.exports=FRe});var ode=ke((bWt,nde)=>{var WRe=ede(),BRe=pP(),tde=fP(),rde=tde&&tde.isSet,HRe=rde?BRe(rde):WRe;nde.exports=HRe});var ude=ke((wWt,sde)=>{var VRe=DN(),qRe=Kpe(),URe=yF(),$Re=nfe(),JRe=cfe(),GRe=hfe(),XRe=vfe(),KRe=bfe(),YRe=_fe(),QRe=KN(),ZRe=wF(),eze=l5(),tze=Ife(),rze=Bfe(),nze=$fe(),oze=Qs(),ize=cP(),aze=Qfe(),lze=F1(),sze=ode(),uze=mP(),cze=PP(),pze=1,fze=2,dze=4,ide="[object Arguments]",mze="[object Array]",hze="[object Boolean]",gze="[object Date]",vze="[object Error]",ade="[object Function]",yze="[object GeneratorFunction]",bze="[object Map]",wze="[object Number]",lde="[object Object]",Oze="[object RegExp]",xze="[object Set]",_ze="[object String]",Sze="[object Symbol]",jze="[object WeakMap]",Ize="[object ArrayBuffer]",kze="[object DataView]",Pze="[object Float32Array]",Eze="[object Float64Array]",Cze="[object Int8Array]",Aze="[object Int16Array]",Mze="[object Int32Array]",Tze="[object Uint8Array]",Rze="[object Uint8ClampedArray]",zze="[object Uint16Array]",Lze="[object Uint32Array]",Zn={};Zn[ide]=Zn[mze]=Zn[Ize]=Zn[kze]=Zn[hze]=Zn[gze]=Zn[Pze]=Zn[Eze]=Zn[Cze]=Zn[Aze]=Zn[Mze]=Zn[bze]=Zn[wze]=Zn[lde]=Zn[Oze]=Zn[xze]=Zn[_ze]=Zn[Sze]=Zn[Tze]=Zn[Rze]=Zn[zze]=Zn[Lze]=!0;Zn[vze]=Zn[ade]=Zn[jze]=!1;function AP(e,t,n,r,o,i){var u,f=t&pze,h=t&fze,y=t&dze;if(n&&(u=o?n(e,r,o,i):n(e)),u!==void 0)return u;if(!lze(e))return e;var O=oze(e);if(O){if(u=tze(e),!f)return XRe(e,u)}else{var S=eze(e),I=S==ade||S==yze;if(ize(e))return GRe(e,f);if(S==lde||S==ide||I&&!o){if(u=h||I?{}:nze(e),!f)return h?YRe(e,JRe(u,e)):KRe(e,$Re(u,e))}else{if(!Zn[S])return o?e:{};u=rze(e,S,f)}}i||(i=new VRe);var A=i.get(e);if(A)return A;i.set(e,u),sze(e)?e.forEach(function(W){u.add(AP(W,t,n,W,e,i))}):aze(e)&&e.forEach(function(W,R){u.set(R,AP(W,t,n,R,e,i))});var C=y?h?ZRe:QRe:h?cze:uze,M=O?void 0:C(e);return qRe(M||e,function(W,R){M&&(R=W,W=e[R]),URe(u,R,AP(W,t,n,R,e,i))}),u}sde.exports=AP});var pde=ke((OWt,cde)=>{function Dze(e){var t=e==null?0:e.length;return t?e[t-1]:void 0}cde.exports=Dze});var dde=ke((xWt,fde)=>{function Nze(e,t,n){var r=-1,o=e.length;t<0&&(t=-t>o?0:o+t),n=n>o?o:n,n<0&&(n+=o),o=t>n?0:n-t>>>0,t>>>=0;for(var i=Array(o);++r{var Fze=hF(),Wze=dde();function Bze(e,t){return t.length<2?e:Fze(e,Wze(t,0,-1))}mde.exports=Bze});var vde=ke((SWt,gde)=>{var Hze=kP(),Vze=pde(),qze=hde(),Uze=mF();function $ze(e,t){return t=Hze(t,e),e=qze(e,t),e==null||delete e[Uze(Vze(t))]}gde.exports=$ze});var wde=ke((jWt,bde)=>{var Jze=ac(),Gze=EP(),Xze=ds(),Kze="[object Object]",Yze=Function.prototype,Qze=Object.prototype,yde=Yze.toString,Zze=Qze.hasOwnProperty,eLe=yde.call(Object);function tLe(e){if(!Xze(e)||Jze(e)!=Kze)return!1;var t=Gze(e);if(t===null)return!0;var n=Zze.call(t,"constructor")&&t.constructor;return typeof n=="function"&&n instanceof n&&yde.call(n)==eLe}bde.exports=tLe});var xde=ke((IWt,Ode)=>{var rLe=wde();function nLe(e){return rLe(e)?void 0:e}Ode.exports=nLe});var Ide=ke((kWt,jde)=>{var _de=N1(),oLe=VN(),iLe=Qs(),Sde=_de?_de.isConcatSpreadable:void 0;function aLe(e){return iLe(e)||oLe(e)||!!(Sde&&e&&e[Sde])}jde.exports=aLe});var Ede=ke((PWt,Pde)=>{var lLe=sP(),sLe=Ide();function kde(e,t,n,r,o){var i=-1,u=e.length;for(n||(n=sLe),o||(o=[]);++i0&&n(f)?t>1?kde(f,t-1,n,r,o):lLe(o,f):r||(o[o.length]=f)}return o}Pde.exports=kde});var Ade=ke((EWt,Cde)=>{var uLe=Ede();function cLe(e){var t=e==null?0:e.length;return t?uLe(e,1):[]}Cde.exports=cLe});var Tde=ke((CWt,Mde)=>{function pLe(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}Mde.exports=pLe});var Lde=ke((AWt,zde)=>{var fLe=Tde(),Rde=Math.max;function dLe(e,t,n){return t=Rde(t===void 0?e.length-1:t,0),function(){for(var r=arguments,o=-1,i=Rde(r.length-t,0),u=Array(i);++o{function mLe(e){return function(){return e}}Dde.exports=mLe});var Wde=ke((TWt,Fde)=>{function hLe(e){return e}Fde.exports=hLe});var Vde=ke((RWt,Hde)=>{var gLe=Nde(),Bde=gF(),vLe=Wde(),yLe=Bde?function(e,t){return Bde(e,"toString",{configurable:!0,enumerable:!1,value:gLe(t),writable:!0})}:vLe;Hde.exports=yLe});var Ude=ke((zWt,qde)=>{var bLe=800,wLe=16,OLe=Date.now;function xLe(e){var t=0,n=0;return function(){var r=OLe(),o=wLe-(r-n);if(n=r,o>0){if(++t>=bLe)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}qde.exports=xLe});var Jde=ke((LWt,$de)=>{var _Le=Vde(),SLe=Ude(),jLe=SLe(_Le);$de.exports=jLe});var Xde=ke((DWt,Gde)=>{var ILe=Ade(),kLe=Lde(),PLe=Jde();function ELe(e){return PLe(kLe(e,void 0,ILe),e+"")}Gde.exports=ELe});var Yde=ke((NWt,Kde)=>{var CLe=dF(),ALe=ude(),MLe=vde(),TLe=kP(),RLe=Ev(),zLe=xde(),LLe=Xde(),DLe=wF(),NLe=1,FLe=2,WLe=4,BLe=LLe(function(e,t){var n={};if(e==null)return n;var r=!1;t=CLe(t,function(i){return i=TLe(i,e),r||(r=i.length>1),i}),RLe(e,DLe(e),n),r&&(n=ALe(n,NLe|FLe|WLe,zLe));for(var o=t.length;o--;)MLe(n,t[o]);return n});Kde.exports=BLe});var P0e=ke(Un=>{"use strict";var qP=60103,UP=60106,W9=60107,B9=60108,H9=60114,V9=60109,q9=60110,U9=60112,$9=60113,QJ=60120,J9=60115,G9=60116,_0e=60121,S0e=60122,j0e=60117,I0e=60129,k0e=60131;typeof Symbol=="function"&&Symbol.for&&(ki=Symbol.for,qP=ki("react.element"),UP=ki("react.portal"),W9=ki("react.fragment"),B9=ki("react.strict_mode"),H9=ki("react.profiler"),V9=ki("react.provider"),q9=ki("react.context"),U9=ki("react.forward_ref"),$9=ki("react.suspense"),QJ=ki("react.suspense_list"),J9=ki("react.memo"),G9=ki("react.lazy"),_0e=ki("react.block"),S0e=ki("react.server.block"),j0e=ki("react.fundamental"),I0e=ki("react.debug_trace_mode"),k0e=ki("react.legacy_hidden"));var ki;function Zs(e){if(typeof e=="object"&&e!==null){var t=e.$$typeof;switch(t){case qP:switch(e=e.type,e){case W9:case H9:case B9:case $9:case QJ:return e;default:switch(e=e&&e.$$typeof,e){case q9:case U9:case G9:case J9:case V9:return e;default:return t}}case UP:return t}}}var x4t=V9,_4t=qP,S4t=U9,j4t=W9,I4t=G9,k4t=J9,P4t=UP,E4t=H9,C4t=B9,A4t=$9;Un.ContextConsumer=q9;Un.ContextProvider=x4t;Un.Element=_4t;Un.ForwardRef=S4t;Un.Fragment=j4t;Un.Lazy=I4t;Un.Memo=k4t;Un.Portal=P4t;Un.Profiler=E4t;Un.StrictMode=C4t;Un.Suspense=A4t;Un.isAsyncMode=function(){return!1};Un.isConcurrentMode=function(){return!1};Un.isContextConsumer=function(e){return Zs(e)===q9};Un.isContextProvider=function(e){return Zs(e)===V9};Un.isElement=function(e){return typeof e=="object"&&e!==null&&e.$$typeof===qP};Un.isForwardRef=function(e){return Zs(e)===U9};Un.isFragment=function(e){return Zs(e)===W9};Un.isLazy=function(e){return Zs(e)===G9};Un.isMemo=function(e){return Zs(e)===J9};Un.isPortal=function(e){return Zs(e)===UP};Un.isProfiler=function(e){return Zs(e)===H9};Un.isStrictMode=function(e){return Zs(e)===B9};Un.isSuspense=function(e){return Zs(e)===$9};Un.isValidElementType=function(e){return typeof e=="string"||typeof e=="function"||e===W9||e===H9||e===I0e||e===B9||e===$9||e===QJ||e===k0e||typeof e=="object"&&e!==null&&(e.$$typeof===G9||e.$$typeof===J9||e.$$typeof===V9||e.$$typeof===q9||e.$$typeof===U9||e.$$typeof===j0e||e.$$typeof===_0e||e[0]===S0e)};Un.typeOf=Zs});var C0e=ke((Sir,E0e)=>{"use strict";E0e.exports=P0e()});var V0e=ke((rar,H0e)=>{"use strict";H0e.exports=function(t,n){if(n=n.split(":")[0],t=+t,!t)return!1;switch(n){case"http":case"ws":return t!==80;case"https":case"wss":return t!==443;case"ftp":return t!==21;case"gopher":return t!==70;case"file":return!1}return t!==0}});var $0e=ke(tG=>{"use strict";var X4t=Object.prototype.hasOwnProperty,K4t;function q0e(e){try{return decodeURIComponent(e.replace(/\+/g," "))}catch{return null}}function U0e(e){try{return encodeURIComponent(e)}catch{return null}}function Y4t(e){for(var t=/([^=?#&]+)=?([^&]*)/g,n={},r;r=t.exec(e);){var o=q0e(r[1]),i=q0e(r[2]);o===null||i===null||o in n||(n[o]=i)}return n}function Q4t(e,t){t=t||"";var n=[],r,o;typeof t!="string"&&(t="?");for(o in e)if(X4t.call(e,o)){if(r=e[o],!r&&(r===null||r===K4t||isNaN(r))&&(r=""),o=U0e(o),r=U0e(r),o===null||r===null)continue;n.push(o+"="+r)}return n.length?t+n.join("&"):""}tG.stringify=Q4t;tG.parse=Y4t});var e1e=ke((oar,Z0e)=>{"use strict";var G0e=V0e(),GP=$0e(),Z4t=/^[\x00-\x20\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]+/,X0e=/[\n\r\t]/g,e6t=/^[A-Za-z][A-Za-z0-9+-.]*:\/\//,K0e=/:\d+$/,t6t=/^([a-z][a-z0-9.+-]*:)?(\/\/)?([\\/]+)?([\S\s]*)/i,r6t=/^[a-zA-Z]:/;function nG(e){return(e||"").toString().replace(Z4t,"")}var rG=[["#","hash"],["?","query"],function(t,n){return uc(n.protocol)?t.replace(/\\/g,"/"):t},["/","pathname"],["@","auth",1],[NaN,"host",void 0,1,1],[/:(\d*)$/,"port",void 0,1],[NaN,"hostname",void 0,1,1]],J0e={hash:1,query:1};function Y0e(e){var t;typeof window<"u"?t=window:typeof global<"u"?t=global:typeof self<"u"?t=self:t={};var n=t.location||{};e=e||n;var r={},o=typeof e,i;if(e.protocol==="blob:")r=new cc(unescape(e.pathname),{});else if(o==="string"){r=new cc(e,{});for(i in J0e)delete r[i]}else if(o==="object"){for(i in e)i in J0e||(r[i]=e[i]);r.slashes===void 0&&(r.slashes=e6t.test(e.href))}return r}function uc(e){return e==="file:"||e==="ftp:"||e==="http:"||e==="https:"||e==="ws:"||e==="wss:"}function Q0e(e,t){e=nG(e),e=e.replace(X0e,""),t=t||{};var n=t6t.exec(e),r=n[1]?n[1].toLowerCase():"",o=!!n[2],i=!!n[3],u=0,f;return o?i?(f=n[2]+n[3]+n[4],u=n[2].length+n[3].length):(f=n[2]+n[4],u=n[2].length):i?(f=n[3]+n[4],u=n[3].length):f=n[4],r==="file:"?u>=2&&(f=f.slice(2)):uc(r)?f=n[4]:r?o&&(f=f.slice(2)):u>=2&&uc(t.protocol)&&(f=n[4]),{protocol:r,slashes:o||uc(r),slashesCount:u,rest:f}}function n6t(e,t){if(e==="")return t;for(var n=(t||"/").split("/").slice(0,-1).concat(e.split("/")),r=n.length,o=n[r-1],i=!1,u=0;r--;)n[r]==="."?n.splice(r,1):n[r]===".."?(n.splice(r,1),u++):u&&(r===0&&(i=!0),n.splice(r,1),u--);return i&&n.unshift(""),(o==="."||o==="..")&&n.push(""),n.join("/")}function cc(e,t,n){if(e=nG(e),e=e.replace(X0e,""),!(this instanceof cc))return new cc(e,t,n);var r,o,i,u,f,h,y=rG.slice(),O=typeof t,S=this,I=0;for(O!=="object"&&O!=="string"&&(n=t,t=null),n&&typeof n!="function"&&(n=GP.parse),t=Y0e(t),o=Q0e(e||"",t),r=!o.protocol&&!o.slashes,S.slashes=o.slashes||r&&t.slashes,S.protocol=o.protocol||t.protocol||"",e=o.rest,(o.protocol==="file:"&&(o.slashesCount!==2||r6t.test(e))||!o.slashes&&(o.protocol||o.slashesCount<2||!uc(S.protocol)))&&(y[3]=[/(.*)/,"pathname"]);I{"use strict";Object.defineProperty(xK,"__esModule",{value:!0});var wK=Object.assign||function(e){for(var t=1;t=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}function N_t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function F_t(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t&&(typeof t=="object"||typeof t=="function")?t:e}function W_t(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var Zge={position:"absolute",top:0,left:0,visibility:"hidden",height:0,overflow:"scroll",whiteSpace:"pre"},B_t=["extraWidth","injectStyles","inputClassName","inputRef","inputStyle","minWidth","onAutosize","placeholderIsMinWidth"],H_t=function(t){return B_t.forEach(function(n){return delete t[n]}),t},eve=function(t,n){n.style.fontSize=t.fontSize,n.style.fontFamily=t.fontFamily,n.style.fontWeight=t.fontWeight,n.style.fontStyle=t.fontStyle,n.style.letterSpacing=t.letterSpacing,n.style.textTransform=t.textTransform},ove=typeof window<"u"&&window.navigator?/MSIE |Trident\/|Edge\//.test(window.navigator.userAgent):!1,tve=function(){return ove?"_"+Math.random().toString(36).substr(2,12):void 0},OK=function(e){W_t(t,e),Qge(t,null,[{key:"getDerivedStateFromProps",value:function(r,o){var i=r.id;return i!==o.prevId?{inputId:i||tve(),prevId:i}:null}}]);function t(n){N_t(this,t);var r=F_t(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,n));return r.inputRef=function(o){r.input=o,typeof r.props.inputRef=="function"&&r.props.inputRef(o)},r.placeHolderSizerRef=function(o){r.placeHolderSizer=o},r.sizerRef=function(o){r.sizer=o},r.state={inputWidth:n.minWidth,inputId:n.id||tve(),prevId:n.id},r}return Qge(t,[{key:"componentDidMount",value:function(){this.mounted=!0,this.copyInputStyles(),this.updateInputWidth()}},{key:"componentDidUpdate",value:function(r,o){o.inputWidth!==this.state.inputWidth&&typeof this.props.onAutosize=="function"&&this.props.onAutosize(this.state.inputWidth),this.updateInputWidth()}},{key:"componentWillUnmount",value:function(){this.mounted=!1}},{key:"copyInputStyles",value:function(){if(!(!this.mounted||!window.getComputedStyle)){var r=this.input&&window.getComputedStyle(this.input);r&&(eve(r,this.sizer),this.placeHolderSizer&&eve(r,this.placeHolderSizer))}}},{key:"updateInputWidth",value:function(){if(!(!this.mounted||!this.sizer||typeof this.sizer.scrollWidth>"u")){var r=void 0;this.props.placeholder&&(!this.props.value||this.props.value&&this.props.placeholderIsMinWidth)?r=Math.max(this.sizer.scrollWidth,this.placeHolderSizer.scrollWidth)+2:r=this.sizer.scrollWidth+2;var o=this.props.type==="number"&&this.props.extraWidth===void 0?16:parseInt(this.props.extraWidth)||0;r+=o,rt=>{let n=z9e.call(t);return e[n]||(e[n]=n.slice(8,-1).toLowerCase())})(Object.create(null)),tc=e=>(e=e.toLowerCase(),t=>tk(t)===e),rk=e=>t=>typeof t===e,{isArray:Vg}=Array,h3=rk("undefined");function L9e(e){return e!==null&&!h3(e)&&e.constructor!==null&&!h3(e.constructor)&&ss(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}var sie=tc("ArrayBuffer");function D9e(e){let t;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?t=ArrayBuffer.isView(e):t=e&&e.buffer&&sie(e.buffer),t}var N9e=rk("string"),ss=rk("function"),uie=rk("number"),nk=e=>e!==null&&typeof e=="object",F9e=e=>e===!0||e===!1,ek=e=>{if(tk(e)!=="object")return!1;let t=wD(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(Symbol.toStringTag in e)&&!(Symbol.iterator in e)},W9e=tc("Date"),B9e=tc("File"),H9e=tc("Blob"),V9e=tc("FileList"),q9e=e=>nk(e)&&ss(e.pipe),U9e=e=>{let t;return e&&(typeof FormData=="function"&&e instanceof FormData||ss(e.append)&&((t=tk(e))==="formdata"||t==="object"&&ss(e.toString)&&e.toString()==="[object FormData]"))},$9e=tc("URLSearchParams"),J9e=e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function g3(e,t,{allOwnKeys:n=!1}={}){if(e===null||typeof e>"u")return;let r,o;if(typeof e!="object"&&(e=[e]),Vg(e))for(r=0,o=e.length;r0;)if(o=n[r],t===o.toLowerCase())return o;return null}var pie=(()=>typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global)(),fie=e=>!h3(e)&&e!==pie;function bD(){let{caseless:e}=fie(this)&&this||{},t={},n=(r,o)=>{let i=e&&cie(t,o)||o;ek(t[i])&&ek(r)?t[i]=bD(t[i],r):ek(r)?t[i]=bD({},r):Vg(r)?t[i]=r.slice():t[i]=r};for(let r=0,o=arguments.length;r(g3(t,(o,i)=>{n&&ss(o)?e[i]=m3(o,n):e[i]=o},{allOwnKeys:r}),e),X9e=e=>(e.charCodeAt(0)===65279&&(e=e.slice(1)),e),K9e=(e,t,n,r)=>{e.prototype=Object.create(t.prototype,r),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:t.prototype}),n&&Object.assign(e.prototype,n)},Y9e=(e,t,n,r)=>{let o,i,u,f={};if(t=t||{},e==null)return t;do{for(o=Object.getOwnPropertyNames(e),i=o.length;i-- >0;)u=o[i],(!r||r(u,e,t))&&!f[u]&&(t[u]=e[u],f[u]=!0);e=n!==!1&&wD(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},Q9e=(e,t,n)=>{e=String(e),(n===void 0||n>e.length)&&(n=e.length),n-=t.length;let r=e.indexOf(t,n);return r!==-1&&r===n},Z9e=e=>{if(!e)return null;if(Vg(e))return e;let t=e.length;if(!uie(t))return null;let n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},e_e=(e=>t=>e&&t instanceof e)(typeof Uint8Array<"u"&&wD(Uint8Array)),t_e=(e,t)=>{let r=(e&&e[Symbol.iterator]).call(e),o;for(;(o=r.next())&&!o.done;){let i=o.value;t.call(e,i[0],i[1])}},r_e=(e,t)=>{let n,r=[];for(;(n=e.exec(t))!==null;)r.push(n);return r},n_e=tc("HTMLFormElement"),o_e=e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(n,r,o){return r.toUpperCase()+o}),aie=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),i_e=tc("RegExp"),die=(e,t)=>{let n=Object.getOwnPropertyDescriptors(e),r={};g3(n,(o,i)=>{let u;(u=t(o,i,e))!==!1&&(r[i]=u||o)}),Object.defineProperties(e,r)},a_e=e=>{die(e,(t,n)=>{if(ss(e)&&["arguments","caller","callee"].indexOf(n)!==-1)return!1;let r=e[n];if(ss(r)){if(t.enumerable=!1,"writable"in t){t.writable=!1;return}t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")})}})},l_e=(e,t)=>{let n={},r=o=>{o.forEach(i=>{n[i]=!0})};return Vg(e)?r(e):r(String(e).split(t)),n},s_e=()=>{},u_e=(e,t)=>(e=+e,Number.isFinite(e)?e:t),yD="abcdefghijklmnopqrstuvwxyz",lie="0123456789",mie={DIGIT:lie,ALPHA:yD,ALPHA_DIGIT:yD+yD.toUpperCase()+lie},c_e=(e=16,t=mie.ALPHA_DIGIT)=>{let n="",{length:r}=t;for(;e--;)n+=t[Math.random()*r|0];return n};function p_e(e){return!!(e&&ss(e.append)&&e[Symbol.toStringTag]==="FormData"&&e[Symbol.iterator])}var f_e=e=>{let t=new Array(10),n=(r,o)=>{if(nk(r)){if(t.indexOf(r)>=0)return;if(!("toJSON"in r)){t[o]=r;let i=Vg(r)?[]:{};return g3(r,(u,f)=>{let h=n(u,o+1);!h3(h)&&(i[f]=h)}),t[o]=void 0,i}}return r};return n(e,0)},d_e=tc("AsyncFunction"),m_e=e=>e&&(nk(e)||ss(e))&&ss(e.then)&&ss(e.catch),qe={isArray:Vg,isArrayBuffer:sie,isBuffer:L9e,isFormData:U9e,isArrayBufferView:D9e,isString:N9e,isNumber:uie,isBoolean:F9e,isObject:nk,isPlainObject:ek,isUndefined:h3,isDate:W9e,isFile:B9e,isBlob:H9e,isRegExp:i_e,isFunction:ss,isStream:q9e,isURLSearchParams:$9e,isTypedArray:e_e,isFileList:V9e,forEach:g3,merge:bD,extend:G9e,trim:J9e,stripBOM:X9e,inherits:K9e,toFlatObject:Y9e,kindOf:tk,kindOfTest:tc,endsWith:Q9e,toArray:Z9e,forEachEntry:t_e,matchAll:r_e,isHTMLForm:n_e,hasOwnProperty:aie,hasOwnProp:aie,reduceDescriptors:die,freezeMethods:a_e,toObjectSet:l_e,toCamelCase:o_e,noop:s_e,toFiniteNumber:u_e,findKey:cie,global:pie,isContextDefined:fie,ALPHABET:mie,generateString:c_e,isSpecCompliantForm:p_e,toJSONObject:f_e,isAsyncFn:d_e,isThenable:m_e};function qg(e,t,n,r,o){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack,this.message=e,this.name="AxiosError",t&&(this.code=t),n&&(this.config=n),r&&(this.request=r),o&&(this.response=o)}qe.inherits(qg,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:qe.toJSONObject(this.config),code:this.code,status:this.response&&this.response.status?this.response.status:null}}});var hie=qg.prototype,gie={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(e=>{gie[e]={value:e}});Object.defineProperties(qg,gie);Object.defineProperty(hie,"isAxiosError",{value:!0});qg.from=(e,t,n,r,o,i)=>{let u=Object.create(hie);return qe.toFlatObject(e,u,function(h){return h!==Error.prototype},f=>f!=="isAxiosError"),qg.call(u,e.message,t,n,r,o),u.cause=e,u.name=e.name,i&&Object.assign(u,i),u};var Qr=qg;var ok=null;function OD(e){return qe.isPlainObject(e)||qe.isArray(e)}function yie(e){return qe.endsWith(e,"[]")?e.slice(0,-2):e}function vie(e,t,n){return e?e.concat(t).map(function(o,i){return o=yie(o),!n&&i?"["+o+"]":o}).join(n?".":""):t}function h_e(e){return qe.isArray(e)&&!e.some(OD)}var g_e=qe.toFlatObject(qe,{},null,function(t){return/^is[A-Z]/.test(t)});function v_e(e,t,n){if(!qe.isObject(e))throw new TypeError("target must be an object");t=t||new(ok||FormData),n=qe.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,function(M,W){return!qe.isUndefined(W[M])});let r=n.metaTokens,o=n.visitor||O,i=n.dots,u=n.indexes,h=(n.Blob||typeof Blob<"u"&&Blob)&&qe.isSpecCompliantForm(t);if(!qe.isFunction(o))throw new TypeError("visitor must be a function");function y(C){if(C===null)return"";if(qe.isDate(C))return C.toISOString();if(!h&&qe.isBlob(C))throw new Qr("Blob is not supported. Use a Buffer instead.");return qe.isArrayBuffer(C)||qe.isTypedArray(C)?h&&typeof Blob=="function"?new Blob([C]):Buffer.from(C):C}function O(C,M,W){let R=C;if(C&&!W&&typeof C=="object"){if(qe.endsWith(M,"{}"))M=r?M:M.slice(0,-2),C=JSON.stringify(C);else if(qe.isArray(C)&&h_e(C)||(qe.isFileList(C)||qe.endsWith(M,"[]"))&&(R=qe.toArray(C)))return M=yie(M),R.forEach(function(Y,X){!(qe.isUndefined(Y)||Y===null)&&t.append(u===!0?vie([M],X,i):u===null?M:M+"[]",y(Y))}),!1}return OD(C)?!0:(t.append(vie(W,M,i),y(C)),!1)}let S=[],I=Object.assign(g_e,{defaultVisitor:O,convertValue:y,isVisitable:OD});function A(C,M){if(!qe.isUndefined(C)){if(S.indexOf(C)!==-1)throw Error("Circular reference detected in "+M.join("."));S.push(C),qe.forEach(C,function(R,B){(!(qe.isUndefined(R)||R===null)&&o.call(t,R,qe.isString(B)?B.trim():B,M,I))===!0&&A(R,M?M.concat(B):[B])}),S.pop()}}if(!qe.isObject(e))throw new TypeError("data must be an object");return A(e),t}var fd=v_e;function bie(e){let t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,function(r){return t[r]})}function wie(e,t){this._pairs=[],e&&fd(e,this,t)}var Oie=wie.prototype;Oie.append=function(t,n){this._pairs.push([t,n])};Oie.toString=function(t){let n=t?function(r){return t.call(this,r,bie)}:bie;return this._pairs.map(function(o){return n(o[0])+"="+n(o[1])},"").join("&")};var ik=wie;function y_e(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function v3(e,t,n){if(!t)return e;let r=n&&n.encode||y_e,o=n&&n.serialize,i;if(o?i=o(t,n):i=qe.isURLSearchParams(t)?t.toString():new ik(t,n).toString(r),i){let u=e.indexOf("#");u!==-1&&(e=e.slice(0,u)),e+=(e.indexOf("?")===-1?"?":"&")+i}return e}var xD=class{constructor(){this.handlers=[]}use(t,n,r){return this.handlers.push({fulfilled:t,rejected:n,synchronous:r?r.synchronous:!1,runWhen:r?r.runWhen:null}),this.handlers.length-1}eject(t){this.handlers[t]&&(this.handlers[t]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(t){qe.forEach(this.handlers,function(r){r!==null&&t(r)})}},_D=xD;var ak={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1};var xie=typeof URLSearchParams<"u"?URLSearchParams:ik;var _ie=typeof FormData<"u"?FormData:null;var Sie=typeof Blob<"u"?Blob:null;var jie={isBrowser:!0,classes:{URLSearchParams:xie,FormData:_ie,Blob:Sie},protocols:["http","https","file","blob","url","data"]};var SD={};$(SD,{hasBrowserEnv:()=>Iie,hasStandardBrowserEnv:()=>b_e,hasStandardBrowserWebWorkerEnv:()=>w_e});var Iie=typeof window<"u"&&typeof document<"u",b_e=(e=>Iie&&["ReactNative","NativeScript","NS"].indexOf(e)<0)(typeof navigator<"u"&&navigator.product),w_e=(()=>typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function")();var Ca={...SD,...jie};function jD(e,t){return fd(e,new Ca.classes.URLSearchParams,Object.assign({visitor:function(n,r,o,i){return Ca.isNode&&qe.isBuffer(n)?(this.append(r,n.toString("base64")),!1):i.defaultVisitor.apply(this,arguments)}},t))}function O_e(e){return qe.matchAll(/\w+|\[(\w*)]/g,e).map(t=>t[0]==="[]"?"":t[1]||t[0])}function x_e(e){let t={},n=Object.keys(e),r,o=n.length,i;for(r=0;r=n.length;return u=!u&&qe.isArray(o)?o.length:u,h?(qe.hasOwnProp(o,u)?o[u]=[o[u],r]:o[u]=r,!f):((!o[u]||!qe.isObject(o[u]))&&(o[u]=[]),t(n,r,o[u],i)&&qe.isArray(o[u])&&(o[u]=x_e(o[u])),!f)}if(qe.isFormData(e)&&qe.isFunction(e.entries)){let n={};return qe.forEachEntry(e,(r,o)=>{t(O_e(r),o,n,0)}),n}return null}var lk=__e;function S_e(e,t,n){if(qe.isString(e))try{return(t||JSON.parse)(e),qe.trim(e)}catch(r){if(r.name!=="SyntaxError")throw r}return(n||JSON.stringify)(e)}var ID={transitional:ak,adapter:["xhr","http"],transformRequest:[function(t,n){let r=n.getContentType()||"",o=r.indexOf("application/json")>-1,i=qe.isObject(t);if(i&&qe.isHTMLForm(t)&&(t=new FormData(t)),qe.isFormData(t))return o?JSON.stringify(lk(t)):t;if(qe.isArrayBuffer(t)||qe.isBuffer(t)||qe.isStream(t)||qe.isFile(t)||qe.isBlob(t))return t;if(qe.isArrayBufferView(t))return t.buffer;if(qe.isURLSearchParams(t))return n.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),t.toString();let f;if(i){if(r.indexOf("application/x-www-form-urlencoded")>-1)return jD(t,this.formSerializer).toString();if((f=qe.isFileList(t))||r.indexOf("multipart/form-data")>-1){let h=this.env&&this.env.FormData;return fd(f?{"files[]":t}:t,h&&new h,this.formSerializer)}}return i||o?(n.setContentType("application/json",!1),S_e(t)):t}],transformResponse:[function(t){let n=this.transitional||ID.transitional,r=n&&n.forcedJSONParsing,o=this.responseType==="json";if(t&&qe.isString(t)&&(r&&!this.responseType||o)){let u=!(n&&n.silentJSONParsing)&&o;try{return JSON.parse(t)}catch(f){if(u)throw f.name==="SyntaxError"?Qr.from(f,Qr.ERR_BAD_RESPONSE,this,null,this.response):f}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:Ca.classes.FormData,Blob:Ca.classes.Blob},validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};qe.forEach(["delete","get","head","post","put","patch"],e=>{ID.headers[e]={}});var Ug=ID;var j_e=qe.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),kie=e=>{let t={},n,r,o;return e&&e.split(` -`).forEach(function(u){o=u.indexOf(":"),n=u.substring(0,o).trim().toLowerCase(),r=u.substring(o+1).trim(),!(!n||t[n]&&j_e[n])&&(n==="set-cookie"?t[n]?t[n].push(r):t[n]=[r]:t[n]=t[n]?t[n]+", "+r:r)}),t};var Pie=Symbol("internals");function y3(e){return e&&String(e).trim().toLowerCase()}function sk(e){return e===!1||e==null?e:qe.isArray(e)?e.map(sk):String(e)}function I_e(e){let t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g,r;for(;r=n.exec(e);)t[r[1]]=r[2];return t}var k_e=e=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim());function kD(e,t,n,r,o){if(qe.isFunction(r))return r.call(this,t,n);if(o&&(t=n),!!qe.isString(t)){if(qe.isString(r))return t.indexOf(r)!==-1;if(qe.isRegExp(r))return r.test(t)}}function P_e(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(t,n,r)=>n.toUpperCase()+r)}function E_e(e,t){let n=qe.toCamelCase(" "+t);["get","set","has"].forEach(r=>{Object.defineProperty(e,r+n,{value:function(o,i,u){return this[r].call(this,t,o,i,u)},configurable:!0})})}var $g=class{constructor(t){t&&this.set(t)}set(t,n,r){let o=this;function i(f,h,y){let O=y3(h);if(!O)throw new Error("header name must be a non-empty string");let S=qe.findKey(o,O);(!S||o[S]===void 0||y===!0||y===void 0&&o[S]!==!1)&&(o[S||h]=sk(f))}let u=(f,h)=>qe.forEach(f,(y,O)=>i(y,O,h));return qe.isPlainObject(t)||t instanceof this.constructor?u(t,n):qe.isString(t)&&(t=t.trim())&&!k_e(t)?u(kie(t),n):t!=null&&i(n,t,r),this}get(t,n){if(t=y3(t),t){let r=qe.findKey(this,t);if(r){let o=this[r];if(!n)return o;if(n===!0)return I_e(o);if(qe.isFunction(n))return n.call(this,o,r);if(qe.isRegExp(n))return n.exec(o);throw new TypeError("parser must be boolean|regexp|function")}}}has(t,n){if(t=y3(t),t){let r=qe.findKey(this,t);return!!(r&&this[r]!==void 0&&(!n||kD(this,this[r],r,n)))}return!1}delete(t,n){let r=this,o=!1;function i(u){if(u=y3(u),u){let f=qe.findKey(r,u);f&&(!n||kD(r,r[f],f,n))&&(delete r[f],o=!0)}}return qe.isArray(t)?t.forEach(i):i(t),o}clear(t){let n=Object.keys(this),r=n.length,o=!1;for(;r--;){let i=n[r];(!t||kD(this,this[i],i,t,!0))&&(delete this[i],o=!0)}return o}normalize(t){let n=this,r={};return qe.forEach(this,(o,i)=>{let u=qe.findKey(r,i);if(u){n[u]=sk(o),delete n[i];return}let f=t?P_e(i):String(i).trim();f!==i&&delete n[i],n[f]=sk(o),r[f]=!0}),this}concat(...t){return this.constructor.concat(this,...t)}toJSON(t){let n=Object.create(null);return qe.forEach(this,(r,o)=>{r!=null&&r!==!1&&(n[o]=t&&qe.isArray(r)?r.join(", "):r)}),n}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([t,n])=>t+": "+n).join(` -`)}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(t){return t instanceof this?t:new this(t)}static concat(t,...n){let r=new this(t);return n.forEach(o=>r.set(o)),r}static accessor(t){let r=(this[Pie]=this[Pie]={accessors:{}}).accessors,o=this.prototype;function i(u){let f=y3(u);r[f]||(E_e(o,u),r[f]=!0)}return qe.isArray(t)?t.forEach(i):i(t),this}};$g.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);qe.reduceDescriptors($g.prototype,({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(r){this[n]=r}}});qe.freezeMethods($g);var Aa=$g;function b3(e,t){let n=this||Ug,r=t||n,o=Aa.from(r.headers),i=r.data;return qe.forEach(e,function(f){i=f.call(n,i,o.normalize(),t?t.status:void 0)}),o.normalize(),i}function w3(e){return!!(e&&e.__CANCEL__)}function Eie(e,t,n){Qr.call(this,e??"canceled",Qr.ERR_CANCELED,t,n),this.name="CanceledError"}qe.inherits(Eie,Qr,{__CANCEL__:!0});var dd=Eie;function PD(e,t,n){let r=n.config.validateStatus;!n.status||!r||r(n.status)?e(n):t(new Qr("Request failed with status code "+n.status,[Qr.ERR_BAD_REQUEST,Qr.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n))}var Cie=Ca.hasStandardBrowserEnv?{write(e,t,n,r,o,i){let u=[e+"="+encodeURIComponent(t)];qe.isNumber(n)&&u.push("expires="+new Date(n).toGMTString()),qe.isString(r)&&u.push("path="+r),qe.isString(o)&&u.push("domain="+o),i===!0&&u.push("secure"),document.cookie=u.join("; ")},read(e){let t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove(e){this.write(e,"",Date.now()-864e5)}}:{write(){},read(){return null},remove(){}};function ED(e){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)}function CD(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}function O3(e,t){return e&&!ED(t)?CD(e,t):t}var Aie=Ca.hasStandardBrowserEnv?function(){let t=/(msie|trident)/i.test(navigator.userAgent),n=document.createElement("a"),r;function o(i){let u=i;return t&&(n.setAttribute("href",u),u=n.href),n.setAttribute("href",u),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,""):"",host:n.host,search:n.search?n.search.replace(/^\?/,""):"",hash:n.hash?n.hash.replace(/^#/,""):"",hostname:n.hostname,port:n.port,pathname:n.pathname.charAt(0)==="/"?n.pathname:"/"+n.pathname}}return r=o(window.location.href),function(u){let f=qe.isString(u)?o(u):u;return f.protocol===r.protocol&&f.host===r.host}}():function(){return function(){return!0}}();function AD(e){let t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}function C_e(e,t){e=e||10;let n=new Array(e),r=new Array(e),o=0,i=0,u;return t=t!==void 0?t:1e3,function(h){let y=Date.now(),O=r[i];u||(u=y),n[o]=h,r[o]=y;let S=i,I=0;for(;S!==o;)I+=n[S++],S=S%e;if(o=(o+1)%e,o===i&&(i=(i+1)%e),y-u{let i=o.loaded,u=o.lengthComputable?o.total:void 0,f=i-n,h=r(f),y=i<=u;n=i;let O={loaded:i,total:u,progress:u?i/u:void 0,bytes:f,rate:h||void 0,estimated:h&&u&&y?(u-i)/h:void 0,event:o};O[t?"download":"upload"]=!0,e(O)}}var A_e=typeof XMLHttpRequest<"u",Rie=A_e&&function(e){return new Promise(function(n,r){let o=e.data,i=Aa.from(e.headers).normalize(),{responseType:u,withXSRFToken:f}=e,h;function y(){e.cancelToken&&e.cancelToken.unsubscribe(h),e.signal&&e.signal.removeEventListener("abort",h)}let O;if(qe.isFormData(o)){if(Ca.hasStandardBrowserEnv||Ca.hasStandardBrowserWebWorkerEnv)i.setContentType(!1);else if((O=i.getContentType())!==!1){let[M,...W]=O?O.split(";").map(R=>R.trim()).filter(Boolean):[];i.setContentType([M||"multipart/form-data",...W].join("; "))}}let S=new XMLHttpRequest;if(e.auth){let M=e.auth.username||"",W=e.auth.password?unescape(encodeURIComponent(e.auth.password)):"";i.set("Authorization","Basic "+btoa(M+":"+W))}let I=O3(e.baseURL,e.url);S.open(e.method.toUpperCase(),v3(I,e.params,e.paramsSerializer),!0),S.timeout=e.timeout;function A(){if(!S)return;let M=Aa.from("getAllResponseHeaders"in S&&S.getAllResponseHeaders()),R={data:!u||u==="text"||u==="json"?S.responseText:S.response,status:S.status,statusText:S.statusText,headers:M,config:e,request:S};PD(function(Y){n(Y),y()},function(Y){r(Y),y()},R),S=null}if("onloadend"in S?S.onloadend=A:S.onreadystatechange=function(){!S||S.readyState!==4||S.status===0&&!(S.responseURL&&S.responseURL.indexOf("file:")===0)||setTimeout(A)},S.onabort=function(){S&&(r(new Qr("Request aborted",Qr.ECONNABORTED,e,S)),S=null)},S.onerror=function(){r(new Qr("Network Error",Qr.ERR_NETWORK,e,S)),S=null},S.ontimeout=function(){let W=e.timeout?"timeout of "+e.timeout+"ms exceeded":"timeout exceeded",R=e.transitional||ak;e.timeoutErrorMessage&&(W=e.timeoutErrorMessage),r(new Qr(W,R.clarifyTimeoutError?Qr.ETIMEDOUT:Qr.ECONNABORTED,e,S)),S=null},Ca.hasStandardBrowserEnv&&(f&&qe.isFunction(f)&&(f=f(e)),f||f!==!1&&Aie(I))){let M=e.xsrfHeaderName&&e.xsrfCookieName&&Cie.read(e.xsrfCookieName);M&&i.set(e.xsrfHeaderName,M)}o===void 0&&i.setContentType(null),"setRequestHeader"in S&&qe.forEach(i.toJSON(),function(W,R){S.setRequestHeader(R,W)}),qe.isUndefined(e.withCredentials)||(S.withCredentials=!!e.withCredentials),u&&u!=="json"&&(S.responseType=e.responseType),typeof e.onDownloadProgress=="function"&&S.addEventListener("progress",Tie(e.onDownloadProgress,!0)),typeof e.onUploadProgress=="function"&&S.upload&&S.upload.addEventListener("progress",Tie(e.onUploadProgress)),(e.cancelToken||e.signal)&&(h=M=>{S&&(r(!M||M.type?new dd(null,e,S):M),S.abort(),S=null)},e.cancelToken&&e.cancelToken.subscribe(h),e.signal&&(e.signal.aborted?h():e.signal.addEventListener("abort",h)));let C=AD(I);if(C&&Ca.protocols.indexOf(C)===-1){r(new Qr("Unsupported protocol "+C+":",Qr.ERR_BAD_REQUEST,e));return}S.send(o||null)})};var MD={http:ok,xhr:Rie};qe.forEach(MD,(e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch{}Object.defineProperty(e,"adapterName",{value:t})}});var zie=e=>`- ${e}`,M_e=e=>qe.isFunction(e)||e===null||e===!1,uk={getAdapter:e=>{e=qe.isArray(e)?e:[e];let{length:t}=e,n,r,o={};for(let i=0;i`adapter ${f} `+(h===!1?"is not supported by the environment":"is not available in the build")),u=t?i.length>1?`since : -`+i.map(zie).join(` -`):" "+zie(i[0]):"as no adapter specified";throw new Qr("There is no suitable adapter to dispatch the request "+u,"ERR_NOT_SUPPORT")}return r},adapters:MD};function TD(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new dd(null,e)}function ck(e){return TD(e),e.headers=Aa.from(e.headers),e.data=b3.call(e,e.transformRequest),["post","put","patch"].indexOf(e.method)!==-1&&e.headers.setContentType("application/x-www-form-urlencoded",!1),uk.getAdapter(e.adapter||Ug.adapter)(e).then(function(r){return TD(e),r.data=b3.call(e,e.transformResponse,r),r.headers=Aa.from(r.headers),r},function(r){return w3(r)||(TD(e),r&&r.response&&(r.response.data=b3.call(e,e.transformResponse,r.response),r.response.headers=Aa.from(r.response.headers))),Promise.reject(r)})}var Lie=e=>e instanceof Aa?{...e}:e;function hp(e,t){t=t||{};let n={};function r(y,O,S){return qe.isPlainObject(y)&&qe.isPlainObject(O)?qe.merge.call({caseless:S},y,O):qe.isPlainObject(O)?qe.merge({},O):qe.isArray(O)?O.slice():O}function o(y,O,S){if(qe.isUndefined(O)){if(!qe.isUndefined(y))return r(void 0,y,S)}else return r(y,O,S)}function i(y,O){if(!qe.isUndefined(O))return r(void 0,O)}function u(y,O){if(qe.isUndefined(O)){if(!qe.isUndefined(y))return r(void 0,y)}else return r(void 0,O)}function f(y,O,S){if(S in t)return r(y,O);if(S in e)return r(void 0,y)}let h={url:i,method:i,data:i,baseURL:u,transformRequest:u,transformResponse:u,paramsSerializer:u,timeout:u,timeoutMessage:u,withCredentials:u,withXSRFToken:u,adapter:u,responseType:u,xsrfCookieName:u,xsrfHeaderName:u,onUploadProgress:u,onDownloadProgress:u,decompress:u,maxContentLength:u,maxBodyLength:u,beforeRedirect:u,transport:u,httpAgent:u,httpsAgent:u,cancelToken:u,socketPath:u,responseEncoding:u,validateStatus:f,headers:(y,O)=>o(Lie(y),Lie(O),!0)};return qe.forEach(Object.keys(Object.assign({},e,t)),function(O){let S=h[O]||o,I=S(e[O],t[O],O);qe.isUndefined(I)&&S!==f||(n[O]=I)}),n}var pk="1.6.8";var RD={};["object","boolean","number","function","string","symbol"].forEach((e,t)=>{RD[e]=function(r){return typeof r===e||"a"+(t<1?"n ":" ")+e}});var Die={};RD.transitional=function(t,n,r){function o(i,u){return"[Axios v"+pk+"] Transitional option '"+i+"'"+u+(r?". "+r:"")}return(i,u,f)=>{if(t===!1)throw new Qr(o(u," has been removed"+(n?" in "+n:"")),Qr.ERR_DEPRECATED);return n&&!Die[u]&&(Die[u]=!0,console.warn(o(u," has been deprecated since v"+n+" and will be removed in the near future"))),t?t(i,u,f):!0}};function T_e(e,t,n){if(typeof e!="object")throw new Qr("options must be an object",Qr.ERR_BAD_OPTION_VALUE);let r=Object.keys(e),o=r.length;for(;o-- >0;){let i=r[o],u=t[i];if(u){let f=e[i],h=f===void 0||u(f,i,e);if(h!==!0)throw new Qr("option "+i+" must be "+h,Qr.ERR_BAD_OPTION_VALUE);continue}if(n!==!0)throw new Qr("Unknown option "+i,Qr.ERR_BAD_OPTION)}}var fk={assertOptions:T_e,validators:RD};var md=fk.validators,Jg=class{constructor(t){this.defaults=t,this.interceptors={request:new _D,response:new _D}}async request(t,n){try{return await this._request(t,n)}catch(r){if(r instanceof Error){let o;Error.captureStackTrace?Error.captureStackTrace(o={}):o=new Error;let i=o.stack?o.stack.replace(/^.+\n/,""):"";r.stack?i&&!String(r.stack).endsWith(i.replace(/^.+\n.+\n/,""))&&(r.stack+=` -`+i):r.stack=i}throw r}}_request(t,n){typeof t=="string"?(n=n||{},n.url=t):n=t||{},n=hp(this.defaults,n);let{transitional:r,paramsSerializer:o,headers:i}=n;r!==void 0&&fk.assertOptions(r,{silentJSONParsing:md.transitional(md.boolean),forcedJSONParsing:md.transitional(md.boolean),clarifyTimeoutError:md.transitional(md.boolean)},!1),o!=null&&(qe.isFunction(o)?n.paramsSerializer={serialize:o}:fk.assertOptions(o,{encode:md.function,serialize:md.function},!0)),n.method=(n.method||this.defaults.method||"get").toLowerCase();let u=i&&qe.merge(i.common,i[n.method]);i&&qe.forEach(["delete","get","head","post","put","patch","common"],C=>{delete i[C]}),n.headers=Aa.concat(u,i);let f=[],h=!0;this.interceptors.request.forEach(function(M){typeof M.runWhen=="function"&&M.runWhen(n)===!1||(h=h&&M.synchronous,f.unshift(M.fulfilled,M.rejected))});let y=[];this.interceptors.response.forEach(function(M){y.push(M.fulfilled,M.rejected)});let O,S=0,I;if(!h){let C=[ck.bind(this),void 0];for(C.unshift.apply(C,f),C.push.apply(C,y),I=C.length,O=Promise.resolve(n);S{if(!r._listeners)return;let i=r._listeners.length;for(;i-- >0;)r._listeners[i](o);r._listeners=null}),this.promise.then=o=>{let i,u=new Promise(f=>{r.subscribe(f),i=f}).then(o);return u.cancel=function(){r.unsubscribe(i)},u},t(function(i,u,f){r.reason||(r.reason=new dd(i,u,f),n(r.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(t){if(this.reason){t(this.reason);return}this._listeners?this._listeners.push(t):this._listeners=[t]}unsubscribe(t){if(!this._listeners)return;let n=this._listeners.indexOf(t);n!==-1&&this._listeners.splice(n,1)}static source(){let t;return{token:new e(function(o){t=o}),cancel:t}}},Nie=zD;function LD(e){return function(n){return e.apply(null,n)}}function DD(e){return qe.isObject(e)&&e.isAxiosError===!0}var ND={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(ND).forEach(([e,t])=>{ND[t]=e});var Fie=ND;function Wie(e){let t=new x3(e),n=m3(x3.prototype.request,t);return qe.extend(n,x3.prototype,t,{allOwnKeys:!0}),qe.extend(n,t,null,{allOwnKeys:!0}),n.create=function(o){return Wie(hp(e,o))},n}var ei=Wie(Ug);ei.Axios=x3;ei.CanceledError=dd;ei.CancelToken=Nie;ei.isCancel=w3;ei.VERSION=pk;ei.toFormData=fd;ei.AxiosError=Qr;ei.Cancel=ei.CanceledError;ei.all=function(t){return Promise.all(t)};ei.spread=LD;ei.isAxiosError=DD;ei.mergeConfig=hp;ei.AxiosHeaders=Aa;ei.formToJSON=e=>lk(qe.isHTMLForm(e)?new FormData(e):e);ei.getAdapter=uk.getAdapter;ei.HttpStatusCode=Fie;ei.default=ei;var dk=ei;var{Axios:rMt,AxiosError:nMt,CanceledError:oMt,isCancel:iMt,CancelToken:aMt,VERSION:lMt,all:sMt,Cancel:uMt,isAxiosError:cMt,spread:pMt,toFormData:fMt,AxiosHeaders:dMt,HttpStatusCode:mMt,formToJSON:hMt,getAdapter:gMt,mergeConfig:vMt}=dk;function vt(e){return Array.isArray(e)?e:e?[e]:[]}var R_e=!0;function ll(e){return e!==void 0?e:R_e}function mk(e){return e==="term"?"class":e}function Js(e){return e.charAt(0).toUpperCase()+e.slice(1)}function Gg(e){return Js(e).split(/(?=[A-Z][a-z])/).join(" ")}function Xg(e){return Js(e).replace("_"," ")}function Bie(e){return e.replace("/api/","").replace("/api","")}function hd(e,t,n){return"/ontologies/"+e+"/"+_3(n)+"?iri="+t}function _3(e,t){for(let n of vt(e))switch(n){case"class":case"term":return ll(t)?"terms":"classes";case"property":return"properties";case"individual":return"individuals"}}function zr(){return(Math.random()*Math.pow(2,54)).toString(36)}function Hie(e){return/^#[0-9A-F]{6}$/i.test(e)}function Vie(e){return/^(rgb|hsl)(a?)[(]\s*([\d.]+\s*%?)\s*,\s*([\d.]+\s*%?)\s*,\s*([\d.]+\s*%?)\s*(?:,\s*([\d.]+)\s*)?[)]$/i.test(e)}function qie(e){return["primary","subdued","success","accent","danger","warning","text","ghost"].includes(e)}function Vo(e,t="information"){return e.message==="Response contains 0 elements"?"No elements found":`No ${t} available`}var Rt=class e{value;axioms;constructor(t,n){this.value=t,this.axioms=n}static fromJson(t){return t?(Array.isArray(t)||(t=[t]),t.map(n=>typeof n=="object"&&Array.isArray(n.type)&&n.type.indexOf("reification")!==-1?new e(n.value,n.axioms):new e(n,null))):[]}hasMetadata(){return this.axioms!=null}getMetadata(){if(!this.axioms)return null;let t={};for(let n of this.axioms)for(let r of Object.keys(n)){let o=n[r],i=t[r];i!==void 0?i.push(o):t[r]=[o]}return t}};var C1=class e{linkedEntities;constructor(t){t?this.linkedEntities={...t}:this.linkedEntities={}}mergeWith(t){return t?new e({...this.linkedEntities,linkedEntities:t}):new e({...this.linkedEntities})}getLabelForIri(t){let n=this.linkedEntities[t];if(n){let r=Rt.fromJson(n.label);if(r&&r.length>0)return r[0].value}}get(t){return this.linkedEntities[t]}};var A1=class{properties;constructor(t){this.properties=t}getLabel(){return this.properties.label}getId(){return this.properties.id}getIri(){return this.properties.iri}getRdfTypes(){return[]}getName(){return this.getNames()[0]}getNames(){let t=Rt.fromJson(this.properties.label);return t&&t.length>0?t.map(n=>n.value):[this.getIri()]}getDescription(){let t=Rt.fromJson(this.properties.description);return t&&t.length>0?t.map(n=>n.value||"").join(" "):""}getOntologyId(){return this.properties.ontology_name}getLabelForIri(t){let n=this.properties.linkedEntities;return n&&Rt.fromJson(n[t]?.label)[0]?.value||t}getLinkedEntities(){return new C1(this.properties.linkedEntities||{})}};var gp=class extends A1{isCanonical(){return this.properties.is_defining_ontology===!0}isDeprecated(){return this.properties["http://www.w3.org/2002/07/owl#deprecated"]==="true"}getDeprecationVersion(){return this.properties["http://www.ebi.ac.uk/efo/obsoleted_in_version"]}getDeprecationReason(){return Rt.fromJson(this.properties["http://purl.obolibrary.org/obo/IAO_0000231"]).concat(Rt.fromJson(this.properties["http://www.ebi.ac.uk/efo/reason_for_obsolescence"]))}getDeprecationReplacement(){return this.properties["http://purl.obolibrary.org/obo/IAO_0100001"]}getRelatedFrom(){return Rt.fromJson(this.properties.relatedFrom)}getDescriptionAsArray(){return Rt.fromJson(this.properties.description)}hasDirectChildren(){return this.properties.hasDirectChildren==="true"}hasHierarchicalChildren(){return this.properties.hasHierarchicalChildren==="true"}hasChildren(){return this.properties.has_children}getAncestorIris(){return vt(this.properties.ancestor)}getHierarchicalAncestorIris(){return vt(this.properties.hierarchicalAncestor)}getSynonyms(){return Rt.fromJson(this.properties.synonyms)}getAppearsIn(){return this.properties.appearsIn||[]}getCrossReferences(){return this.properties.annotation.has_dbxref||[]}getDefinedBy(){return this.properties.definedBy||[]}getIsDefiningOntology(){return this.properties.is_defining_ontology||void 0}getShortForm(){return this.properties.obo_id||this.properties.shortForm}getDepictedBy(){return Rt.fromJson([...vt(this.properties["http://xmlns.com/foaf/0.1/depicted_by"]||[]),...vt(this.properties["http://xmlns.com/foaf/0.1/depiction"]||[])])}isPredicateFromInformalVocabulary(t){return t.startsWith("http://www.w3.org/2004/02/skos/core#")||t.startsWith("http://purl.org/dc/terms/")||t.startsWith("http://purl.org/dc/elements/1.1/")||t.startsWith("http://schema.org/")}getAnnotationPredicates(){return vt(Object.keys(this.properties.annotation))}getAnnotationTitleById(t){return Xg(t)}getAnnotationById(t){return Rt.fromJson(vt(this.properties.annotation[t]))}getNumHierarchicalDescendants(){return this.properties.numHierarchicalDescendants?parseInt(this.properties.numHierarchicalDescendants):0}getNumDescendants(){return this.properties.numDescendants?parseInt(this.properties.numDescendants):0}getHierarchicalParentReificationAxioms(t){let n=Rt.fromJson(this.properties.hierarchicalParent);for(let r of n)if(r.value===t)return r.getMetadata()}getTypePlural(){switch(this.getType()){case"class":return"classes";case"property":return"properties";case"individual":return"individuals";default:throw new Error("unknown type")}}};var S3=class extends gp{getType(){return"class"}getTypePlural(){return"classes"}getParents(){return Rt.fromJson(this.properties.hierarchicalParent)}getSuperEntities(){return Rt.fromJson(this.properties["http://www.w3.org/2000/01/rdf-schema#subClassOf"])}getEquivalents(){return Rt.fromJson(this.properties["http://www.w3.org/2002/07/owl#equivalentClass"])}getDisjointWith(){return vt(this.properties["http://www.w3.org/2002/07/owl#disjointWith"])}getHasKey(){return vt(this.properties["http://www.w3.org/2002/07/owl#hasKey"])}getSubsets(){return vt(this.properties.in_subset)||[]}};var j3=class extends gp{getType(){return"property"}getTypePlural(){return"properties"}getParents(){return Rt.fromJson(this.properties["http://www.w3.org/2000/01/rdf-schema#subPropertyOf"])}getSuperEntities(){return Rt.fromJson(this.properties["http://www.w3.org/2000/01/rdf-schema#subPropertyOf"])}getEquivalents(){return Rt.fromJson(this.properties["http://www.w3.org/2002/07/owl#equivalentProperty"])}getDisjointWith(){return vt(this.properties["http://www.w3.org/2002/07/owl#propertyDisjointWith"])}getInverseOf(){return vt(this.properties["http://www.w3.org/2002/07/owl#inverseOf"])}getDomain(){return vt(this.properties["http://www.w3.org/2000/01/rdf-schema#domain"])}getRange(){return vt(this.properties["http://www.w3.org/2000/01/rdf-schema#range"])}getPropertyChains(){return Rt.fromJson(this.properties["http://www.w3.org/2002/07/owl#propertyChainAxiom"])}};var I3=class extends gp{getType(){return"individual"}getTypePlural(){return"individuals"}getParents(){return Rt.fromJson(this.properties.directParent)}getEquivalents(){return[]}getSuperEntities(){return Rt.fromJson([])}getDifferentFrom(){return vt(this.properties["http://www.w3.org/2002/07/owl#differentFrom"])}getSameAs(){return vt(this.properties["http://www.w3.org/2002/07/owl#sameAs"])}getIndividualTypes(){let t=this.getRdfTypes();return!t||!Array.isArray(t)?[]:t.filter(n=>n!=="http://www.w3.org/2002/07/owl#NamedIndividual"&&(typeof n!="string"||!n.startsWith("http://www.w3.org/2000/01/rdf-schema#")))}};var k3=class extends A1{getType(){return"ontology"}getTypePlural(){return"ontologies"}getOntologyId(){return this.properties.ontologyId}getName(){let t=Rt.fromJson(this.properties.config.title||"");return t[0]&&t[0].value||this.getOntologyId()}getDescription(){let t=Rt.fromJson(this.properties.config.description||"");return t[0]&&t[0].value||""}getCreators(){return vt(this.properties.config.annotations.creator)}getSourceFileTimestamp(){return this.properties.updated}getNumEntities(){return parseInt(this.properties.numberOfEntities)}getNumClasses(){return parseInt(this.properties.numberOfTerms)}getNumProperties(){return parseInt(this.properties.numberOfProperties)}getNumIndividuals(){return parseInt(this.properties.numberOfIndividuals)}getLogoURL(){return this.properties.config.logo||void 0}getOntologyPurl(){return this.properties.config.id}getHomepage(){return this.properties.config.homepage}getMailingList(){return this.properties.config.mailingList}getTracker(){return this.properties.config.tracker}getVersionIri(){return this.properties.config.versionIri}getVersion(){return this.properties.config.version}getVersionFromIri(){let t=this.getVersionIri();if(!t)return"";let n=t.match(/\d{4}-\d{2}-\d{2}/);if(n&&n.length>0)return n[0];{let r=t.match(/\/v[d.].*\//);return r?r[0].replaceAll("/","").replace("v",""):""}}getLoaded(){return this.properties.loaded}getAnnotationPredicates(){return this.properties.config&&this.properties.config.annotations?vt(Object.keys(this.properties.config.annotations)):[]}getAnnotationTitleById(t){return Gg(t)}getAnnotationById(t){return Rt.fromJson(vt(this.properties.config.annotations[t]).filter(n=>typeof n!="string"||n!==""))}getPreferredRoots(){return vt(this.properties.hasPreferredRoot)}getLanguages(){return vt(this.properties.lang)}getImportsFrom(){return[]}getExportsTo(){return vt(this.properties.exportsTo)}getAllowDownload(){return this.properties.config.allowDownload}};var P3=class{properties;constructor(t){this.properties=t}getTotalOntologies(){return this.properties.length}getNumEntities(){return this.properties.reduce((t,n)=>t+n.getNumEntities(),0)}getNumClasses(){return this.properties.reduce((t,n)=>t+n.getNumClasses(),0)}getNumProperties(){return this.properties.reduce((t,n)=>t+n.getNumProperties(),0)}getNumIndividuals(){return this.properties.reduce((t,n)=>t+n.getNumIndividuals(),0)}};var M1=class{properties;constructor(t){this.properties=t}getLabel(){return this.properties.label}getId(){return this.properties.id}getIri(){return this.properties.iri}getType(){let t=this.properties.type;for(let n of t)if(["ontology","class","property","individual"].indexOf(n)!==-1)return n;throw new Error("unknown type")}getTypePlural(){switch(this.getType()){case"ontology":return"ontologies";case"class":return"classes";case"property":return"properties";case"individual":return"individuals";default:throw new Error("unknown type")}}getRdfTypes(){return vt(this.properties["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"])}getName(){return this.getNames()[0]}getNames(){let t=Rt.fromJson(this.properties.label);return t&&t.length>0?t.map(n=>n.value):[this.getIri()]}getDescription(){let t=Rt.fromJson(this.properties.definition);return t&&t.length>0?t.map(n=>n.value||"").join(" "):""}getOntologyId(){return this.properties.ontologyId}getLabelForIri(t){let n=this.properties.linkedEntities;return n&&Rt.fromJson(n[t]?.label)[0]?.value||t}getAnnotationById(t){return Rt.fromJson(vt(this.properties[t]))}getAnnotationTitleById(t){return this.getLabelForIri(t)}getLinkedEntities(){return new C1(this.properties.linkedEntities||{})}};var vp=class extends M1{isCanonical(){return this.properties.isDefiningOntology===!0}isDeprecated(){return this.properties["http://www.w3.org/2002/07/owl#deprecated"]==="true"}getDeprecationVersion(){return this.properties["http://www.ebi.ac.uk/efo/obsoleted_in_version"]}getDeprecationReason(){return Rt.fromJson(this.properties["http://purl.obolibrary.org/obo/IAO_0000231"]).concat(Rt.fromJson(this.properties["http://www.ebi.ac.uk/efo/reason_for_obsolescence"]))}getDeprecationReplacement(){return this.properties["http://purl.obolibrary.org/obo/IAO_0100001"]}getRelatedFrom(){return Rt.fromJson(this.properties.relatedFrom)}getDescriptionAsArray(){return Rt.fromJson(this.properties.definition)}hasDirectChildren(){return this.properties.hasDirectChildren==="true"}hasHierarchicalChildren(){return this.properties.hasHierarchicalChildren==="true"}hasChildren(){return this.hasDirectChildren()||this.hasHierarchicalChildren()}getAncestorIris(){return vt(this.properties.ancestor)}getHierarchicalAncestorIris(){return vt(this.properties.hierarchicalAncestor)}getSynonyms(){return Rt.fromJson(this.properties.synonym)}getAppearsIn(){return this.properties.appearsIn||[]}getCrossReferences(){return this.properties["http://www.geneontology.org/formats/oboInOwl#hasDbXref"]||[]}getDefinedBy(){return this.properties.definedBy||[]}getIsDefiningOntology(){return this.properties.is_defining_ontology||void 0}getShortForm(){return this.properties.curie||this.properties.shortForm}getDepictedBy(){return Rt.fromJson([...vt(this.properties["http://xmlns.com/foaf/0.1/depicted_by"]||[]),...vt(this.properties["http://xmlns.com/foaf/0.1/depiction"]||[])])}isPredicateFromInformalVocabulary(t){return t.startsWith("http://www.w3.org/2004/02/skos/core#")||t.startsWith("http://purl.org/dc/terms/")||t.startsWith("http://purl.org/dc/elements/1.1/")||t.startsWith("http://schema.org/")}getAnnotationPredicates(){let t=vt(this.properties.definitionProperty),n=vt(this.properties.synonymProperty),r=vt(this.properties.hierarchicalProperty),o=new Set;for(let i of Object.keys(this.properties))if(i.indexOf("://")!==-1&&!i.startsWith("negativePropertyAssertion+")&&i!=="http://xmlns.com/foaf/0.1/depicted_by"&&i!=="http://xmlns.com/foaf/0.1/depiction"){if(!this.isPredicateFromInformalVocabulary(i)){let u=this.getLinkedEntities().get(i);if(u!=null&&u.type.indexOf("objectProperty")!==-1||u!=null&&u.type.indexOf("dataProperty")!==-1)continue}t.indexOf(i)!==-1||n.indexOf(i)!==-1||r.indexOf(i)!==-1||(i.startsWith("http://www.w3.org/2000/01/rdf-schema#")||i.startsWith("http://www.w3.org/1999/02/22-rdf-syntax-ns#")||i.startsWith("http://www.w3.org/2002/07/owl#"))&&i!=="http://www.w3.org/2000/01/rdf-schema#comment"&&i!=="http://www.w3.org/2000/01/rdf-schema#seeAlso"&&i!=="http://www.w3.org/2002/07/owl#disjointUnionOf"||i==="http://www.geneontology.org/formats/oboInOwl#inSubset"||i==="http://www.geneontology.org/formats/oboInOwl#id"||o.add(i)}return Array.from(o)}getNumHierarchicalDescendants(){return this.properties.numHierarchicalDescendants?parseInt(this.properties.numHierarchicalDescendants):0}getNumDescendants(){return this.properties.numDescendants?parseInt(this.properties.numDescendants):0}getHierarchicalParentReificationAxioms(t){let n=Rt.fromJson(this.properties.hierarchicalParent);for(let r of n)if(r.value===t)return r.getMetadata()}getTypePlural(){switch(this.getType()){case"class":return"classes";case"property":return"properties";case"individual":return"individuals";default:throw new Error("unknown type")}}};var E3=class extends vp{getParents(){return Rt.fromJson(this.properties.hierarchicalParent)}getSuperEntities(){return Rt.fromJson(this.properties["http://www.w3.org/2000/01/rdf-schema#subClassOf"])}getEquivalents(){return Rt.fromJson(this.properties["http://www.w3.org/2002/07/owl#equivalentClass"])}getDisjointWith(){return vt(this.properties["http://www.w3.org/2002/07/owl#disjointWith"])}getHasKey(){return vt(this.properties["http://www.w3.org/2002/07/owl#hasKey"])}getSubsets(){return vt(this.properties["http://www.geneontology.org/formats/oboInOwl#inSubset"])||[]}};var C3=class extends vp{getParents(){return Rt.fromJson(this.properties["http://www.w3.org/2000/01/rdf-schema#subPropertyOf"])}getSuperEntities(){return Rt.fromJson(this.properties["http://www.w3.org/2000/01/rdf-schema#subPropertyOf"])}getEquivalents(){return Rt.fromJson(this.properties["http://www.w3.org/2002/07/owl#equivalentProperty"])}getDisjointWith(){return vt(this.properties["http://www.w3.org/2002/07/owl#propertyDisjointWith"])}getInverseOf(){return vt(this.properties["http://www.w3.org/2002/07/owl#inverseOf"])}getDomain(){return vt(this.properties["http://www.w3.org/2000/01/rdf-schema#domain"])}getRange(){return vt(this.properties["http://www.w3.org/2000/01/rdf-schema#range"])}getPropertyChains(){return Rt.fromJson(this.properties["http://www.w3.org/2002/07/owl#propertyChainAxiom"])}};var A3=class extends vp{getParents(){return Rt.fromJson(this.properties.directParent)}getEquivalents(){return[]}getSuperEntities(){return Rt.fromJson([])}getDifferentFrom(){return vt(this.properties["http://www.w3.org/2002/07/owl#differentFrom"])}getSameAs(){return vt(this.properties["http://www.w3.org/2002/07/owl#sameAs"])}getIndividualTypes(){let t=this.getRdfTypes();return!t||!Array.isArray(t)?[]:t.filter(n=>n!=="http://www.w3.org/2002/07/owl#NamedIndividual"&&(typeof n!="string"||!n.startsWith("http://www.w3.org/2000/01/rdf-schema#")))}};var M3=class extends M1{getOntologyId(){return this.properties.ontologyId}getName(){let t=Rt.fromJson(this.properties.label||this.properties.title||"");return t[0]&&t[0].value||this.getOntologyId()}getDescription(){let t=Rt.fromJson(this.properties.definition||this.properties.description||"");return t[0]&&t[0].value||""}getCreators(){return vt(this.properties["http://purl.org/dc/elements/1.1/creator"])}getSourceFileTimestamp(){return this.properties.sourceFileTimestamp}getNumEntities(){return parseInt(this.properties.numberOfEntities)}getNumClasses(){return parseInt(this.properties.numberOfClasses)}getNumProperties(){return parseInt(this.properties.numberOfProperties)}getNumIndividuals(){return parseInt(this.properties.numberOfIndividuals)}getLogoURL(){return this.properties.depicted_by||void 0}getOntologyPurl(){return this.properties.ontology_purl}getHomepage(){return this.properties.homepage}getMailingList(){return this.properties.mailing_list}getTracker(){return this.properties.tracker}getVersionIri(){return this.properties["http://www.w3.org/2002/07/owl#versionIRI"]}getVersion(){return this.properties["http://www.w3.org/2002/07/owl#versionInfo"]}getVersionFromIri(){let t=this.getVersionIri();if(!t)return"";let n=t.match(/\d{4}-\d{2}-\d{2}/);if(n&&n.length>0)return n[0];{let r=t.match(/\/v[d.].*\//);return r?r[0].replaceAll("/","").replace("v",""):""}}getLoaded(){return this.properties.loaded}getAnnotationPredicates(){let t=new Set;for(let n of Object.keys(this.properties))n.indexOf("://")!==-1&&n!=="http://purl.obolibrary.org/obo/IAO_0000700"&&(n.startsWith("http://www.w3.org/2000/01/rdf-schema#")||n.startsWith("http://www.w3.org/1999/02/22-rdf-syntax-ns#")||n.startsWith("http://www.w3.org/2002/07/owl#")||t.add(n));return Array.from(t)}getPreferredRoots(){return vt(this.properties.hasPreferredRoot)}getLanguages(){return vt(this.properties.language)}getImportsFrom(){return vt(this.properties.importsFrom)}getExportsTo(){return vt(this.properties.exportsTo)}getAllowDownload(){return this.properties.allowDownload}};var Uie=["class","term"],$ie=["property"],Jie=["individual"],hk=["ontology"],gk=[...Uie,...Jie,...$ie],FD=[...gk,...hk];function z_e(e){return Uie.includes(e)}function L_e(e){return $ie.includes(e)}function D_e(e){return Jie.includes(e)}function WD(e){return hk.includes(e)}function BD(e){return gk.includes(e)}function Gie(e){return FD.includes(e)}function T1(e){return z_e(e.getType())}function gd(e){return L_e(e.getType())}function Kg(e){return D_e(e.getType())}function us(e){return BD(e.getType())}function Xie(e){return WD(e.getType())}function Qg(e){let t;if(e._embedded!==void 0||e.numberOfTerms!==void 0)t=!0;else if(e.elements!==void 0||e.numberOfClasses!==void 0)t=!1;else throw Error("Response structure does not correlate to any of the featured response structures: \n ${response.toString()}");let n;if(t)e._embedded===void 0?n="ontology":e._embedded.terms!==void 0?n="term":e._embedded.properties!==void 0?n="property":e._embedded.individuals!==void 0&&(n="individual");else if(e.elements===void 0)n="ontology";else{let r=e.elements[0].type;r=r.filter(o=>Gie(o)),r=[...new Set(r)],r.length===1&&(n=r[0])}if(n===void 0)throw Error("Entity type could not be correctly inferred.");return N_e(e,n,t)}function N_e(e,t,n){switch(t){case"ontology":return n?new k3(e):new M3(e);case"term":case"class":return n?new S3(Yg(vt(e._embedded.terms),n)):new E3(Yg(vt(e.elements),n));case"property":return n?new j3(Yg(vt(e._embedded.properties),n)):new C3(Yg(vt(e.elements),n));case"individual":return n?new I3(Yg(vt(e._embedded.individuals),n)):new A3(Yg(vt(e.elements),n));default:throw Error('Invalid entity type "'+t+'". Must be one of {"term", "class", "ontology", "property", "individual"}')}}function Yg(e,t){let n=vt(e).filter(r=>t?r.is_defining_ontology:r.isDefiningOntology);return n.length>0?n[0]:e[0]}var F_e=10,un=class{axiosInstance;constructor(t){this.axiosInstance=dk.create({baseURL:t,headers:{Accept:"application/json",Content_Type:"application/json"}})}buildParamsForGet(t,n,r,o){return n?{...t,sort:`${n.sortField},${n.sortDir}`,...r,...this.buildOtherParams(o)}:{...t,...r,...this.buildOtherParams(o)}}buildPaginationParams(t){let n={rows:t?.size};return t?.page&&(t.size?n.start=(+t.page*+t.size).toString():n.start=(+t.page*F_e).toString()),n}buildParamsForSearch(t,n,r,o){let i={q:t.query,exact:t.exactMatch,obsoletes:t.showObsoleteTerms};return t.groupByIri&&(i.groupField=t.groupByIri),t.types&&(i.type=t.types),t.ontology&&(i.ontology=t.ontology),{...i,...this.buildPaginationParams(n),...r,...this.buildOtherParams(o)}}buildOtherParams(t){let n={};return t&&t.split("&").forEach(o=>{let i=o.split("=")[0],u=o.split("=")[1];n[i]=u}),n}buildParamsForSelect(t,n,r,o){return{...{q:t.query},...this.buildPaginationParams(n),...r,...this.buildOtherParams(o)}}buildParamsForSuggest(t,n,r,o){return{...{q:t.query},...this.buildPaginationParams(n),...r,...this.buildOtherParams(o)}}check_for_errors(t){if(t.error)throw Error(t.status+" "+t.error+" - "+t.message+" - "+t.exception+" at "+t.path);if(t.page!==void 0&&t.page.totalElements===0)throw Error("Response contains 0 elements");return t}async makeCall(t,n,r){let o=ll(r)?"":"v2/",i=(await this.axiosInstance.get(o+t,n)).data;return this.check_for_errors(i)}getOntologies=async(t,n,r,o)=>this.makeCall("ontologies",{params:this.buildParamsForGet(t,n,r,o)},!0);async getOntologiesData(t){let n,r=[],o=0,i=500;do{if(n=await this.getOntologies({size:i.toString(),page:o.toString()},void 0,void 0,t),!n||!n._embedded||!n._embedded.ontologies)throw new Error("Ontologies data not found");r=r.concat(n._embedded.ontologies.map(u=>Qg(u))),o+=1}while(o{let u=ll(i)?"terms":"classes";return this.makeCall(u,{params:this.buildParamsForGet(t,n,r)},ll(i))};getProperties=async(t,n,r,o,i)=>this.makeCall("properties",{params:this.buildParamsForGet(t,n,r)},ll(i));getIndividuals=async(t,n,r,o,i)=>this.makeCall("individuals",{params:this.buildParamsForGet(t,n,r)},ll(i));getOntology=async(t,n,r,o,i)=>{let u={...this.buildOtherParams(o)};return this.makeCall("ontologies/"+r?.ontologyId,u,ll(i))};getEntity=async(t,n,r,o,i)=>{let u=r?.ontologyId?"ontologies/"+r?.ontologyId+"/":"",f={iri:r?.termIri,...this.buildOtherParams(o)};return this.makeCall(u+"entities",{params:f},ll(i))};getTerm=async(t,n,r,o,i,u)=>{let f=r?.ontologyId?"ontologies/"+r?.ontologyId+"/":"",h=ll(i)?"terms":"classes",y={iri:r?.termIri,...this.buildOtherParams(o)};return this.makeCall(f+h,{params:y,signal:u},ll(i))};getProperty=async(t,n,r,o,i,u)=>{let f=r?.ontologyId?"ontologies/"+r?.ontologyId+"/":"",h={iri:r?.propertyIri,...this.buildOtherParams(o)};return this.makeCall(f+"properties",{params:h,signal:u},ll(i))};getIndividual=async(t,n,r,o,i,u)=>{let f=r?.ontologyId?"ontologies/"+r?.ontologyId+"/":"",h={iri:r?.individualIri,...this.buildOtherParams(o)};return this.makeCall(f+"individuals",{params:h,signal:u},ll(i))};search=async(t,n,r,o,i)=>this.makeCall("search",{params:this.buildParamsForSearch(t,n,r,o),signal:i},!0);select=async(t,n,r,o)=>this.makeCall("select",{params:this.buildParamsForSelect(t,n,r,o)},!0);suggest=async(t,n,r,o)=>this.makeCall("suggest",{params:this.buildParamsForSuggest(t,n,r,o)},!0);getTermTree=async(t,n,r,o)=>{let i="ontologies/"+t?.ontologyId+"/terms";return t.termIri?(i=i+"/"+encodeURIComponent(encodeURIComponent(t?.termIri))+"/jstree",n.child?(await this.axiosInstance.get(i+"/children/"+n.child)).data:(await this.axiosInstance.get(i,{params:n})).data):(await this.axiosInstance.get(i+"/roots")).data};getTermRelations=async(t,n,r)=>{let o="ontologies/"+t?.ontologyId+"/terms";if(!t.termIri)return(await this.axiosInstance.get(o+"/roots")).data;o=o+"/"+encodeURIComponent(encodeURIComponent(t?.termIri))+"/graph"};async getEntityObject(t,n,r,o,i){let u;return n?u=await this.getEntityWithEntityTypeProvided(t,n,r,o,i):ll(i)?u=await this.getEntityWithInferredEntityType(t,r,o):u=await this.getEntity(void 0,void 0,{ontologyId:r,termIri:t},o,i),Qg(u)}async getOntologyObject(t,n,r){let o=await this.getOntology(void 0,void 0,{ontologyId:t},n,r);return Qg(o)}async getThingObject(t,n,r,o,i){if(n)if(WD(n)){if(r)return await this.getOntologyObject(r,o,i);throw new Error(`ontologyId has to be provided if thingType in {"${hk.join('", "')}"}.`)}else if(BD(n)){if(t)return await this.getEntityObject(t,n,r,o,i);throw new Error(`iri has to be provided if thingType in {"${gk.join('", "')}"}.`)}else throw new Error(`Unsupported thingType "${n}" provided. Must be in {"${FD.join('", "')}"}.`);else{if(!t&&r)return await this.getOntologyObject(r,o,i);if(t)return await this.getEntityObject(t,n,r,o,i);throw new Error("iri or ontologyId has to be provided if thingType is not provided.")}}getClassInstances=async(t,n,r,o)=>{let i=r?.ontologyId?"ontologies/"+r?.ontologyId+"/":"";return this.makeCall(i+"classes/"+r?.termIri+"/instances",{params:{parameter:this.buildOtherParams(o)}},!1)};async getEntityWithEntityTypeProvided(t,n,r,o,i){switch(n){case"term":case"class":return await this.getTerm(void 0,void 0,{ontologyId:r,termIri:t},o,i);case"property":return await this.getProperty(void 0,void 0,{ontologyId:r,propertyIri:t},o,i);case"individual":return await this.getIndividual(void 0,void 0,{ontologyId:r,individualIri:t},o,i);default:throw Error('Invalid entity type "'+n+'". Must be one of {"term", "class", "property", "individual"}')}}async getEntityWithInferredEntityType(t,n,r){let o=new AbortController,i=o.signal,u;function f(h){h._embedded!==void 0&&(u=h,o.abort())}if(await Promise.allSettled([this.getTerm(void 0,void 0,{ontologyId:n,termIri:t},r,!0,i).then(h=>{f(h)}),this.getProperty(void 0,void 0,{ontologyId:n,propertyIri:t},r,!0,i).then(h=>{f(h)}),this.getIndividual(void 0,void 0,{ontologyId:n,individualIri:t},r,!0,i).then(h=>{f(h)})]),u!==void 0)return u;throw Error("Iri "+t+" could not be resolved.")}};var L1=P(L()),uv=P(dt());var Gae=P(Ct()),Hk=P(dt());var Al=P(L()),W3=P(L());function H_e(e){if(e.sheet)return e.sheet;for(var t=0;t0?qo(iv,--Ta):0,nv--,ti===10&&(nv=1,Ok--),ti}function Ra(){return ti=Ta2||ov(ti)>3?"":" "}function dae(e,t){for(;--t&&Ra()&&!(ti<48||ti>102||ti>57&&ti<65||ti>70&&ti<97););return lv(e,L3()+(t<6&&cs()==32&&Ra()==32))}function qD(e){for(;Ra();)switch(ti){case e:return Ta;case 34:case 39:e!==34&&e!==39&&qD(ti);break;case 40:e===41&&qD(e);break;case 92:Ra();break}return Ta}function mae(e,t){for(;Ra()&&e+ti!==47+10;)if(e+ti===42+42&&cs()===47)break;return"/*"+lv(t,Ta-1)+"*"+R1(e===47?e:Ra())}function hae(e){for(;!ov(cs());)Ra();return lv(e,Ta)}function yae(e){return _k(Sk("",null,null,null,[""],e=xk(e),0,[0],e))}function Sk(e,t,n,r,o,i,u,f,h){for(var y=0,O=0,S=u,I=0,A=0,C=0,M=1,W=1,R=1,B=0,Y="",X=o,ae=i,Z=r,K=Y;W;)switch(C=B,B=Ra()){case 40:if(C!=108&&qo(K,S-1)==58){R3(K+=cn(sv(B),"&","&\f"),"&\f")!=-1&&(R=-1);break}case 34:case 39:case 91:K+=sv(B);break;case 9:case 10:case 13:case 32:K+=fae(C);break;case 92:K+=dae(L3()-1,7);continue;case 47:switch(cs()){case 42:case 47:rv(q_e(mae(Ra(),L3()),t,n),h);break;default:K+="/"}break;case 123*M:f[y++]=Ma(K)*R;case 125*M:case 59:case 0:switch(B){case 0:case 125:W=0;case 59+O:R==-1&&(K=cn(K,/\f/g,"")),A>0&&Ma(K)-S&&rv(A>32?vae(K+";",r,n,S-1):vae(cn(K," ","")+";",r,n,S-2),h);break;case 59:K+=";";default:if(rv(Z=gae(K,t,n,y,O,o,f,Y,X=[],ae=[],S),i),B===123)if(O===0)Sk(K,t,Z,Z,X,i,S,f,ae);else switch(I===99&&qo(K,3)===110?100:I){case 100:case 108:case 109:case 115:Sk(e,Z,Z,r&&rv(gae(e,Z,Z,0,0,o,f,Y,o,X=[],S),ae),o,ae,S,f,r?X:ae);break;default:Sk(K,Z,Z,Z,[""],ae,0,f,ae)}}y=O=A=0,M=R=1,Y=K="",S=u;break;case 58:S=1+Ma(K),A=C;default:if(M<1){if(B==123)--M;else if(B==125&&M++==0&&pae()==125)continue}switch(K+=R1(B),B*M){case 38:R=O>0?1:(K+="\f",-1);break;case 44:f[y++]=(Ma(K)-1)*R,R=1;break;case 64:cs()===45&&(K+=sv(Ra())),I=cs(),O=S=Ma(Y=K+=hae(L3())),B++;break;case 45:C===45&&Ma(K)==2&&(M=0)}}return i}function gae(e,t,n,r,o,i,u,f,h,y,O){for(var S=o-1,I=o===0?i:[""],A=tv(I),C=0,M=0,W=0;C0?I[R]+" "+B:cn(B,/&\f/g,I[R])))&&(h[W++]=Y);return z3(e,t,n,o===0?Zg:f,h,y,O)}function q_e(e,t,n){return z3(e,t,n,yk,R1(cae()),vd(e,2,-2),0)}function vae(e,t,n,r){return z3(e,t,n,ev,vd(e,0,r),vd(e,r+1,-1),r)}function z1(e,t){for(var n="",r=tv(e),o=0;o6)switch(qo(e,t+1)){case 109:if(qo(e,t+4)!==45)break;case 102:return cn(e,/(.+:)(.+)-([^]+)/,"$1"+wn+"$2-$3$1"+T3+(qo(e,t+3)==108?"$3":"$2-$3"))+e;case 115:return~R3(e,"stretch")?Sae(cn(e,"stretch","fill-available"),t)+e:e}break;case 4949:if(qo(e,t+1)!==115)break;case 6444:switch(qo(e,Ma(e)-3-(~R3(e,"!important")&&10))){case 107:return cn(e,":",":"+wn)+e;case 101:return cn(e,/(.+:)([^;!]+)(;|!.+)?/,"$1"+wn+(qo(e,14)===45?"inline-":"")+"box$3$1"+wn+"$2$3$1"+Wi+"$2box$3")+e}break;case 5936:switch(qo(e,t+11)){case 114:return wn+e+Wi+cn(e,/[svh]\w+-[tblr]{2}/,"tb")+e;case 108:return wn+e+Wi+cn(e,/[svh]\w+-[tblr]{2}/,"tb-rl")+e;case 45:return wn+e+Wi+cn(e,/[svh]\w+-[tblr]{2}/,"lr")+e}return wn+e+Wi+e+e}return e}var K_e=function(t,n,r,o){if(t.length>-1&&!t.return)switch(t.type){case ev:t.return=Sae(t.value,t.length);break;case bk:return z1([av(t,{value:cn(t.value,"@","@"+wn)})],o);case Zg:if(t.length)return VD(t.props,function(i){switch(HD(i,/(::plac\w+|:read-\w+)/)){case":read-only":case":read-write":return z1([av(t,{props:[cn(i,/:(read-\w+)/,":"+T3+"$1")]})],o);case"::placeholder":return z1([av(t,{props:[cn(i,/:(plac\w+)/,":"+wn+"input-$1")]}),av(t,{props:[cn(i,/:(plac\w+)/,":"+T3+"$1")]}),av(t,{props:[cn(i,/:(plac\w+)/,Wi+"input-$1")]})],o)}return""})}},Y_e=[K_e],UD=function(t){var n=t.key;if(n==="css"){var r=document.querySelectorAll("style[data-emotion]:not([data-s])");Array.prototype.forEach.call(r,function(M){var W=M.getAttribute("data-emotion");W.indexOf(" ")!==-1&&(document.head.appendChild(M),M.setAttribute("data-s",""))})}var o=t.stylisPlugins||Y_e,i={},u,f=[];u=t.container||document.head,Array.prototype.forEach.call(document.querySelectorAll('style[data-emotion^="'+n+' "]'),function(M){for(var W=M.getAttribute("data-emotion").split(" "),R=1;R=4;++r,o-=4)n=e.charCodeAt(r)&255|(e.charCodeAt(++r)&255)<<8|(e.charCodeAt(++r)&255)<<16|(e.charCodeAt(++r)&255)<<24,n=(n&65535)*1540483477+((n>>>16)*59797<<16),n^=n>>>24,t=(n&65535)*1540483477+((n>>>16)*59797<<16)^(t&65535)*1540483477+((t>>>16)*59797<<16);switch(o){case 3:t^=(e.charCodeAt(r+2)&255)<<16;case 2:t^=(e.charCodeAt(r+1)&255)<<8;case 1:t^=e.charCodeAt(r)&255,t=(t&65535)*1540483477+((t>>>16)*59797<<16)}return t^=t>>>13,t=(t&65535)*1540483477+((t>>>16)*59797<<16),((t^t>>>15)>>>0).toString(36)}var Dae={animationIterationCount:1,aspectRatio:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1};var pSe=/[A-Z]|^ms/g,fSe=/_EMO_([^_]+?)_([^]*?)_EMO_/g,Bae=function(t){return t.charCodeAt(1)===45},Nae=function(t){return t!=null&&typeof t!="boolean"},QD=xae(function(e){return Bae(e)?e:e.replace(pSe,"-$&").toLowerCase()}),Fae=function(t,n){switch(t){case"animation":case"animationName":if(typeof n=="string")return n.replace(fSe,function(r,o,i){return rc={name:o,styles:i,next:rc},o})}return Dae[t]!==1&&!Bae(t)&&typeof n=="number"&&n!==0?n+"px":n};function D3(e,t,n){if(n==null)return"";if(n.__emotion_styles!==void 0)return n;switch(typeof n){case"boolean":return"";case"object":{if(n.anim===1)return rc={name:n.name,styles:n.styles,next:rc},n.name;if(n.styles!==void 0){var r=n.next;if(r!==void 0)for(;r!==void 0;)rc={name:r.name,styles:r.styles,next:rc},r=r.next;var o=n.styles+";";return o}return dSe(e,t,n)}case"function":{if(e!==void 0){var i=rc,u=n(e);return rc=i,D3(e,t,u)}break}case"string":if(!1)var f,h;break}if(t==null)return n;var y=t[n];return y!==void 0?y:n}function dSe(e,t,n){var r="";if(Array.isArray(n))for(var o=0;o=0;return(ge?W?"+":"":"-")+Math.pow(10,Math.max(0,te)).toString().substr(1)+q}var dt=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,jt=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,Ze={},Xt={};function at(g,j,W,q){var te=q;typeof q=="string"&&(te=function(){return this[q]()}),g&&(Xt[g]=te),j&&(Xt[j[0]]=function(){return ot(te.apply(this,arguments),j[1],j[2])}),W&&(Xt[W]=function(){return this.localeData().ordinal(te.apply(this,arguments),g)})}function lr(g){return g.match(/\[[\s\S]/)?g.replace(/^\[|\]$/g,""):g.replace(/\\/g,"")}function ht(g){var j=g.match(dt),W,q;for(W=0,q=j.length;W=0&&jt.test(g);)g=g.replace(jt,q),jt.lastIndex=0,W-=1;return g}var yr={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"};function Hr(g){var j=this._longDateFormat[g],W=this._longDateFormat[g.toUpperCase()];return j||!W?j:(this._longDateFormat[g]=W.match(dt).map(function(q){return q==="MMMM"||q==="MM"||q==="DD"||q==="dddd"?q.slice(1):q}).join(""),this._longDateFormat[g])}var ln="Invalid date";function Sr(){return this._invalidDate}var Bt="%d",sn=/\d{1,2}/;function nn(g){return this._ordinal.replace("%d",g)}var no={future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"};function Xn(g,j,W,q){var te=this._relativeTime[W];return be(te)?te(g,j,W,q):te.replace(/%d/i,g)}function po(g,j){var W=this._relativeTime[g>0?"future":"past"];return be(W)?W(j):W.replace(/%s/i,j)}var So={D:"date",dates:"date",date:"date",d:"day",days:"day",day:"day",e:"weekday",weekdays:"weekday",weekday:"weekday",E:"isoWeekday",isoweekdays:"isoWeekday",isoweekday:"isoWeekday",DDD:"dayOfYear",dayofyears:"dayOfYear",dayofyear:"dayOfYear",h:"hour",hours:"hour",hour:"hour",ms:"millisecond",milliseconds:"millisecond",millisecond:"millisecond",m:"minute",minutes:"minute",minute:"minute",M:"month",months:"month",month:"month",Q:"quarter",quarters:"quarter",quarter:"quarter",s:"second",seconds:"second",second:"second",gg:"weekYear",weekyears:"weekYear",weekyear:"weekYear",GG:"isoWeekYear",isoweekyears:"isoWeekYear",isoweekyear:"isoWeekYear",w:"week",weeks:"week",week:"week",W:"isoWeek",isoweeks:"isoWeek",isoweek:"isoWeek",y:"year",years:"year",year:"year"};function An(g){return typeof g=="string"?So[g]||So[g.toLowerCase()]:void 0}function Vr(g){var j={},W,q;for(q in g)i(g,q)&&(W=An(q),W&&(j[W]=g[q]));return j}var gn={date:9,day:11,weekday:11,isoWeekday:11,dayOfYear:4,hour:13,millisecond:16,minute:14,month:8,quarter:7,second:15,weekYear:1,isoWeekYear:1,week:5,isoWeek:5,year:1};function zo(g){var j=[],W;for(W in g)i(g,W)&&j.push({unit:W,priority:gn[W]});return j.sort(function(q,te){return q.priority-te.priority}),j}var vn=/\d/,yn=/\d\d/,Xo=/\d{3}/,Pc=/\d{4}/,_s=/[+-]?\d{6}/,mr=/\d\d?/,ya=/\d\d\d\d?/,kc=/\d\d\d\d\d\d?/,ml=/\d{1,3}/,Ll=/\d{1,4}/,Ec=/[+-]?\d{1,6}/,Ss=/\d+/,Dl=/[+-]?\d+/,wm=/Z|[+-]\d\d:?\d\d/gi,Bp=/Z|[+-]\d\d(?::?\d\d)?/gi,t0=/[+-]?\d+(\.\d{1,3})?/,Cc=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,wu=/^[1-9]\d?/,js=/^([1-9]\d|\d)/,Ba;Ba={};function St(g,j,W){Ba[g]=be(j)?j:function(q,te){return q&&W?W:j}}function li(g,j){return i(Ba,g)?Ba[g](j._strict,j._locale):new RegExp(oo(g))}function oo(g){return si(g.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(j,W,q,te,ge){return W||q||te||ge}))}function si(g){return g.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function Ei(g){return g<0?Math.ceil(g)||0:Math.floor(g)}function Cr(g){var j=+g,W=0;return j!==0&&isFinite(j)&&(W=Ei(j)),W}var Ou={};function un(g,j){var W,q=j,te;for(typeof g=="string"&&(g=[g]),h(j)&&(q=function(ge,He){He[j]=Cr(ge)}),te=g.length,W=0;W68?1900:2e3)};var n0=Ps("FullYear",!0);function Vp(){return Hp(this.year())}function Ps(g,j){return function(W){return W!=null?(qp(this,g,W),t.updateOffset(this,j),this):_u(this,g)}}function _u(g,j){if(!g.isValid())return NaN;var W=g._d,q=g._isUTC;switch(j){case"Milliseconds":return q?W.getUTCMilliseconds():W.getMilliseconds();case"Seconds":return q?W.getUTCSeconds():W.getSeconds();case"Minutes":return q?W.getUTCMinutes():W.getMinutes();case"Hours":return q?W.getUTCHours():W.getHours();case"Date":return q?W.getUTCDate():W.getDate();case"Day":return q?W.getUTCDay():W.getDay();case"Month":return q?W.getUTCMonth():W.getMonth();case"FullYear":return q?W.getUTCFullYear():W.getFullYear();default:return NaN}}function qp(g,j,W){var q,te,ge,He,It;if(!(!g.isValid()||isNaN(W))){switch(q=g._d,te=g._isUTC,j){case"Milliseconds":return void(te?q.setUTCMilliseconds(W):q.setMilliseconds(W));case"Seconds":return void(te?q.setUTCSeconds(W):q.setSeconds(W));case"Minutes":return void(te?q.setUTCMinutes(W):q.setMinutes(W));case"Hours":return void(te?q.setUTCHours(W):q.setHours(W));case"Date":return void(te?q.setUTCDate(W):q.setDate(W));case"FullYear":break;default:return}ge=W,He=g.month(),It=g.date(),It=It===29&&He===1&&!Hp(ge)?28:It,te?q.setUTCFullYear(ge,He,It):q.setFullYear(ge,He,It)}}function _m(g){return g=An(g),be(this[g])?this[g]():this}function Sm(g,j){if(typeof g=="object"){g=Vr(g);var W=zo(g),q,te=W.length;for(q=0;q=0?(It=new Date(g+400,j,W,q,te,ge,He),isFinite(It.getFullYear())&&It.setFullYear(g)):It=new Date(g,j,W,q,te,ge,He),It}function qa(g){var j,W;return g<100&&g>=0?(W=Array.prototype.slice.call(arguments),W[0]=g+400,j=new Date(Date.UTC.apply(null,W)),isFinite(j.getUTCFullYear())&&j.setUTCFullYear(g)):j=new Date(Date.UTC.apply(null,arguments)),j}function Rc(g,j,W){var q=7+j-W,te=(7+qa(g,0,q).getUTCDay()-j)%7;return-te+q-1}function l0(g,j,W,q,te){var ge=(7+W-q)%7,He=Rc(g,q,te),It=1+7*(j-1)+ge+He,Zt,Ar;return It<=0?(Zt=g-1,Ar=Nl(Zt)+It):It>Nl(g)?(Zt=g+1,Ar=It-Nl(g)):(Zt=g,Ar=It),{year:Zt,dayOfYear:Ar}}function ju(g,j,W){var q=Rc(g.year(),j,W),te=Math.floor((g.dayOfYear()-q-1)/7)+1,ge,He;return te<1?(He=g.year()-1,ge=te+wa(He,j,W)):te>wa(g.year(),j,W)?(ge=te-wa(g.year(),j,W),He=g.year()+1):(He=g.year(),ge=te),{week:ge,year:He}}function wa(g,j,W){var q=Rc(g,j,W),te=Rc(g+1,j,W);return(Nl(g)-q+te)/7}at("w",["ww",2],"wo","week"),at("W",["WW",2],"Wo","isoWeek"),St("w",mr,wu),St("ww",mr,yn),St("W",mr,wu),St("WW",mr,yn),xu(["w","ww","W","WW"],function(g,j,W,q){j[q.substr(0,1)]=Cr(g)});function s0(g){return ju(g,this._week.dow,this._week.doy).week}var $p={dow:0,doy:6};function u0(){return this._week.dow}function c0(){return this._week.doy}function Ua(g){var j=this.localeData().week(this);return g==null?j:this.add((g-j)*7,"d")}function Iu(g){var j=ju(this,1,4).week;return g==null?j:this.add((g-j)*7,"d")}at("d",0,"do","day"),at("dd",0,0,function(g){return this.localeData().weekdaysMin(this,g)}),at("ddd",0,0,function(g){return this.localeData().weekdaysShort(this,g)}),at("dddd",0,0,function(g){return this.localeData().weekdays(this,g)}),at("e",0,0,"weekday"),at("E",0,0,"isoWeekday"),St("d",mr),St("e",mr),St("E",mr),St("dd",function(g,j){return j.weekdaysMinRegex(g)}),St("ddd",function(g,j){return j.weekdaysShortRegex(g)}),St("dddd",function(g,j){return j.weekdaysRegex(g)}),xu(["dd","ddd","dddd"],function(g,j,W,q){var te=W._locale.weekdaysParse(g,q,W._strict);te!=null?j.d=te:C(W).invalidWeekday=g}),xu(["d","e","E"],function(g,j,W,q){j[q]=Cr(g)});function Jp(g,j){return typeof g!="string"?g:isNaN(g)?(g=j.weekdaysParse(g),typeof g=="number"?g:null):parseInt(g,10)}function Gp(g,j){return typeof g=="string"?j.weekdaysParse(g)%7||7:isNaN(g)?null:g}function Xp(g,j){return g.slice(j,7).concat(g.slice(0,j))}var p0="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),Pu="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Kp="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),Yp=Cc,Qp=Cc,mo=Cc;function zc(g,j){var W=r(this._weekdays)?this._weekdays:this._weekdays[g&&g!==!0&&this._weekdays.isFormat.test(j)?"format":"standalone"];return g===!0?Xp(W,this._week.dow):g?W[g.day()]:W}function Zp(g){return g===!0?Xp(this._weekdaysShort,this._week.dow):g?this._weekdaysShort[g.day()]:this._weekdaysShort}function ef(g){return g===!0?Xp(this._weekdaysMin,this._week.dow):g?this._weekdaysMin[g.day()]:this._weekdaysMin}function Fl(g,j,W){var q,te,ge,He=g.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],q=0;q<7;++q)ge=I([2e3,1]).day(q),this._minWeekdaysParse[q]=this.weekdaysMin(ge,"").toLocaleLowerCase(),this._shortWeekdaysParse[q]=this.weekdaysShort(ge,"").toLocaleLowerCase(),this._weekdaysParse[q]=this.weekdays(ge,"").toLocaleLowerCase();return W?j==="dddd"?(te=Kn.call(this._weekdaysParse,He),te!==-1?te:null):j==="ddd"?(te=Kn.call(this._shortWeekdaysParse,He),te!==-1?te:null):(te=Kn.call(this._minWeekdaysParse,He),te!==-1?te:null):j==="dddd"?(te=Kn.call(this._weekdaysParse,He),te!==-1||(te=Kn.call(this._shortWeekdaysParse,He),te!==-1)?te:(te=Kn.call(this._minWeekdaysParse,He),te!==-1?te:null)):j==="ddd"?(te=Kn.call(this._shortWeekdaysParse,He),te!==-1||(te=Kn.call(this._weekdaysParse,He),te!==-1)?te:(te=Kn.call(this._minWeekdaysParse,He),te!==-1?te:null)):(te=Kn.call(this._minWeekdaysParse,He),te!==-1||(te=Kn.call(this._weekdaysParse,He),te!==-1)?te:(te=Kn.call(this._shortWeekdaysParse,He),te!==-1?te:null))}function tf(g,j,W){var q,te,ge;if(this._weekdaysParseExact)return Fl.call(this,g,j,W);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),q=0;q<7;q++){if(te=I([2e3,1]).day(q),W&&!this._fullWeekdaysParse[q]&&(this._fullWeekdaysParse[q]=new RegExp("^"+this.weekdays(te,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[q]=new RegExp("^"+this.weekdaysShort(te,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[q]=new RegExp("^"+this.weekdaysMin(te,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[q]||(ge="^"+this.weekdays(te,"")+"|^"+this.weekdaysShort(te,"")+"|^"+this.weekdaysMin(te,""),this._weekdaysParse[q]=new RegExp(ge.replace(".",""),"i")),W&&j==="dddd"&&this._fullWeekdaysParse[q].test(g))return q;if(W&&j==="ddd"&&this._shortWeekdaysParse[q].test(g))return q;if(W&&j==="dd"&&this._minWeekdaysParse[q].test(g))return q;if(!W&&this._weekdaysParse[q].test(g))return q}}function km(g){if(!this.isValid())return g!=null?this:NaN;var j=_u(this,"Day");return g!=null?(g=Jp(g,this.localeData()),this.add(g-j,"d")):j}function Wl(g){if(!this.isValid())return g!=null?this:NaN;var j=(this.day()+7-this.localeData()._week.dow)%7;return g==null?j:this.add(g-j,"d")}function ui(g){if(!this.isValid())return g!=null?this:NaN;if(g!=null){var j=Gp(g,this.localeData());return this.day(this.day()%7?j:j-7)}else return this.day()||7}function Em(g){return this._weekdaysParseExact?(i(this,"_weekdaysRegex")||Cs.call(this),g?this._weekdaysStrictRegex:this._weekdaysRegex):(i(this,"_weekdaysRegex")||(this._weekdaysRegex=Yp),this._weekdaysStrictRegex&&g?this._weekdaysStrictRegex:this._weekdaysRegex)}function Cm(g){return this._weekdaysParseExact?(i(this,"_weekdaysRegex")||Cs.call(this),g?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(i(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=Qp),this._weekdaysShortStrictRegex&&g?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function Am(g){return this._weekdaysParseExact?(i(this,"_weekdaysRegex")||Cs.call(this),g?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(i(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=mo),this._weekdaysMinStrictRegex&&g?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function Cs(){function g(No,Ai){return Ai.length-No.length}var j=[],W=[],q=[],te=[],ge,He,It,Zt,Ar;for(ge=0;ge<7;ge++)He=I([2e3,1]).day(ge),It=si(this.weekdaysMin(He,"")),Zt=si(this.weekdaysShort(He,"")),Ar=si(this.weekdays(He,"")),j.push(It),W.push(Zt),q.push(Ar),te.push(It),te.push(Zt),te.push(Ar);j.sort(g),W.sort(g),q.sort(g),te.sort(g),this._weekdaysRegex=new RegExp("^("+te.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+q.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+W.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+j.join("|")+")","i")}function Bl(){return this.hours()%12||12}function f0(){return this.hours()||24}at("H",["HH",2],0,"hour"),at("h",["hh",2],0,Bl),at("k",["kk",2],0,f0),at("hmm",0,0,function(){return""+Bl.apply(this)+ot(this.minutes(),2)}),at("hmmss",0,0,function(){return""+Bl.apply(this)+ot(this.minutes(),2)+ot(this.seconds(),2)}),at("Hmm",0,0,function(){return""+this.hours()+ot(this.minutes(),2)}),at("Hmmss",0,0,function(){return""+this.hours()+ot(this.minutes(),2)+ot(this.seconds(),2)});function d0(g,j){at(g,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),j)})}d0("a",!0),d0("A",!1);function m0(g,j){return j._meridiemParse}St("a",m0),St("A",m0),St("H",mr,js),St("h",mr,wu),St("k",mr,wu),St("HH",mr,yn),St("hh",mr,yn),St("kk",mr,yn),St("hmm",ya),St("hmmss",kc),St("Hmm",ya),St("Hmmss",kc),un(["H","HH"],fo),un(["k","kk"],function(g,j,W){var q=Cr(g);j[fo]=q===24?0:q}),un(["a","A"],function(g,j,W){W._isPm=W._locale.isPM(g),W._meridiem=g}),un(["h","hh"],function(g,j,W){j[fo]=Cr(g),C(W).bigHour=!0}),un("hmm",function(g,j,W){var q=g.length-2;j[fo]=Cr(g.substr(0,q)),j[ba]=Cr(g.substr(q)),C(W).bigHour=!0}),un("hmmss",function(g,j,W){var q=g.length-4,te=g.length-2;j[fo]=Cr(g.substr(0,q)),j[ba]=Cr(g.substr(q,2)),j[hl]=Cr(g.substr(te)),C(W).bigHour=!0}),un("Hmm",function(g,j,W){var q=g.length-2;j[fo]=Cr(g.substr(0,q)),j[ba]=Cr(g.substr(q))}),un("Hmmss",function(g,j,W){var q=g.length-4,te=g.length-2;j[fo]=Cr(g.substr(0,q)),j[ba]=Cr(g.substr(q,2)),j[hl]=Cr(g.substr(te))});function Mm(g){return(g+"").toLowerCase().charAt(0)==="p"}var h0=/[ap]\.?m?\.?/i,Lc=Ps("Hours",!0);function Tm(g,j,W){return g>11?W?"pm":"PM":W?"am":"AM"}var Rm={calendar:Ke,longDateFormat:yr,invalidDate:ln,ordinal:Bt,dayOfMonthOrdinalParse:sn,relativeTime:no,months:jm,monthsShort:Ac,week:$p,weekdays:p0,weekdaysMin:Kp,weekdaysShort:Pu,meridiemParse:h0},Gr={},Dc={},As;function zm(g,j){var W,q=Math.min(g.length,j.length);for(W=0;W0;){if(te=Nc(ge.slice(0,W).join("-")),te)return te;if(q&&q.length>=W&&zm(ge,q)>=W-1)break;W--}j++}return As}function Lm(g){return!!(g&&g.match("^[^/\\\\]*$"))}function Nc(g){var j=null,W;if(Gr[g]===void 0&&typeof Sv<"u"&&Sv&&Sv.exports&&Lm(g))try{j=As._abbr,W=Xte,W("./locale/"+g),Ki(j)}catch{Gr[g]=null}return Gr[g]}function Ki(g,j){var W;return g&&(f(j)?W=Yi(g):W=cn(g,j),W?As=W:typeof console<"u"&&console.warn&&console.warn("Locale "+g+" not found. Did you forget to load it?")),As._abbr}function cn(g,j){if(j!==null){var W,q=Rm;if(j.abbr=g,Gr[g]!=null)_e("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),q=Gr[g]._config;else if(j.parentLocale!=null)if(Gr[j.parentLocale]!=null)q=Gr[j.parentLocale]._config;else if(W=Nc(j.parentLocale),W!=null)q=W._config;else return Dc[j.parentLocale]||(Dc[j.parentLocale]=[]),Dc[j.parentLocale].push({name:g,config:j}),null;return Gr[g]=new Le(Ue(q,j)),Dc[g]&&Dc[g].forEach(function(te){cn(te.name,te.config)}),Ki(g),Gr[g]}else return delete Gr[g],null}function Ny(g,j){if(j!=null){var W,q,te=Rm;Gr[g]!=null&&Gr[g].parentLocale!=null?Gr[g].set(Ue(Gr[g]._config,j)):(q=Nc(g),q!=null&&(te=q._config),j=Ue(te,j),q==null&&(j.abbr=g),W=new Le(j),W.parentLocale=Gr[g],Gr[g]=W),Ki(g)}else Gr[g]!=null&&(Gr[g].parentLocale!=null?(Gr[g]=Gr[g].parentLocale,g===Ki()&&Ki(g)):Gr[g]!=null&&delete Gr[g]);return Gr[g]}function Yi(g){var j;if(g&&g._locale&&g._locale._abbr&&(g=g._locale._abbr),!g)return As;if(!r(g)){if(j=Nc(g),j)return j;g=[g]}return v0(g)}function Dm(){return Ge(Gr)}function rf(g){var j,W=g._a;return W&&C(g).overflow===-2&&(j=W[Lo]<0||W[Lo]>11?Lo:W[Ha]<1||W[Ha]>Up(W[Ko],W[Lo])?Ha:W[fo]<0||W[fo]>24||W[fo]===24&&(W[ba]!==0||W[hl]!==0||W[Is]!==0)?fo:W[ba]<0||W[ba]>59?ba:W[hl]<0||W[hl]>59?hl:W[Is]<0||W[Is]>999?Is:-1,C(g)._overflowDayOfYear&&(jHa)&&(j=Ha),C(g)._overflowWeeks&&j===-1&&(j=xm),C(g)._overflowWeekday&&j===-1&&(j=r0),C(g).overflow=j),g}var Nm=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,ku=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,y0=/Z|[+-]\d\d(?::?\d\d)?/,Fc=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/],["YYYYMM",/\d{6}/,!1],["YYYY",/\d{4}/,!1]],Wc=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],b0=/^\/?Date\((-?\d+)/i,Fm=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,w0={UT:0,GMT:0,EDT:-4*60,EST:-5*60,CDT:-5*60,CST:-6*60,MDT:-6*60,MST:-7*60,PDT:-7*60,PST:-8*60};function Wm(g){var j,W,q=g._i,te=Nm.exec(q)||ku.exec(q),ge,He,It,Zt,Ar=Fc.length,No=Wc.length;if(te){for(C(g).iso=!0,j=0,W=Ar;jNl(He)||g._dayOfYear===0)&&(C(g)._overflowDayOfYear=!0),W=qa(He,0,g._dayOfYear),g._a[Lo]=W.getUTCMonth(),g._a[Ha]=W.getUTCDate()),j=0;j<3&&g._a[j]==null;++j)g._a[j]=q[j]=te[j];for(;j<7;j++)g._a[j]=q[j]=g._a[j]==null?j===2?1:0:g._a[j];g._a[fo]===24&&g._a[ba]===0&&g._a[hl]===0&&g._a[Is]===0&&(g._nextDay=!0,g._a[fo]=0),g._d=(g._useUTC?qa:Dy).apply(null,q),ge=g._useUTC?g._d.getUTCDay():g._d.getDay(),g._tzm!=null&&g._d.setUTCMinutes(g._d.getUTCMinutes()-g._tzm),g._nextDay&&(g._a[fo]=24),g._w&&typeof g._w.d<"u"&&g._w.d!==ge&&(C(g).weekdayMismatch=!0)}}function qm(g){var j,W,q,te,ge,He,It,Zt,Ar;j=g._w,j.GG!=null||j.W!=null||j.E!=null?(ge=1,He=4,W=Oa(j.GG,g._a[Ko],ju(pn(),1,4).year),q=Oa(j.W,1),te=Oa(j.E,1),(te<1||te>7)&&(Zt=!0)):(ge=g._locale._week.dow,He=g._locale._week.doy,Ar=ju(pn(),ge,He),W=Oa(j.gg,g._a[Ko],Ar.year),q=Oa(j.w,Ar.week),j.d!=null?(te=j.d,(te<0||te>6)&&(Zt=!0)):j.e!=null?(te=j.e+ge,(j.e<0||j.e>6)&&(Zt=!0)):te=ge),q<1||q>wa(W,ge,He)?C(g)._overflowWeeks=!0:Zt!=null?C(g)._overflowWeekday=!0:(It=l0(W,q,te,ge,He),g._a[Ko]=It.year,g._dayOfYear=It.dayOfYear)}t.ISO_8601=function(){},t.RFC_2822=function(){};function x0(g){if(g._f===t.ISO_8601){Wm(g);return}if(g._f===t.RFC_2822){O0(g);return}g._a=[],C(g).empty=!0;var j=""+g._i,W,q,te,ge,He,It=j.length,Zt=0,Ar,No;for(te=dr(g._f,g._locale).match(dt)||[],No=te.length,W=0;W0&&C(g).unusedInput.push(He),j=j.slice(j.indexOf(q)+q.length),Zt+=q.length),Xt[ge]?(q?C(g).empty=!1:C(g).unusedTokens.push(ge),Om(ge,q,g)):g._strict&&!q&&C(g).unusedTokens.push(ge);C(g).charsLeftOver=It-Zt,j.length>0&&C(g).unusedInput.push(j),g._a[fo]<=12&&C(g).bigHour===!0&&g._a[fo]>0&&(C(g).bigHour=void 0),C(g).parsedDateParts=g._a.slice(0),C(g).meridiem=g._meridiem,g._a[fo]=Um(g._locale,g._a[fo],g._meridiem),Ar=C(g).era,Ar!==null&&(g._a[Ko]=g._locale.erasConvertYear(Ar,g._a[Ko])),Xr(g),rf(g)}function Um(g,j,W){var q;return W==null?j:g.meridiemHour!=null?g.meridiemHour(j,W):(g.isPM!=null&&(q=g.isPM(W),q&&j<12&&(j+=12),!q&&j===12&&(j=0)),j)}function By(g){var j,W,q,te,ge,He,It=!1,Zt=g._f.length;if(Zt===0){C(g).invalidFormat=!0,g._d=new Date(NaN);return}for(te=0;tethis?this:g:R()});function Gm(g,j){var W,q;if(j.length===1&&r(j[0])&&(j=j[0]),!j.length)return pn();for(W=j[0],q=1;qthis.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function P0(){if(!f(this._isDSTShifted))return this._isDSTShifted;var g={},j;return X(g,this),g=$m(g),g._a?(j=g._isUTC?I(g._a):pn(g._a),this._isDSTShifted=this.isValid()&&Xm(g._a,j.toArray())>0):this._isDSTShifted=!1,this._isDSTShifted}function k0(){return this.isValid()?!this._isUTC:!1}function sf(){return this.isValid()?this._isUTC:!1}function Qm(){return this.isValid()?this._isUTC&&this._offset===0:!1}var Jy=/^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,Zm=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function Ci(g,j){var W=g,q=null,te,ge,He;return Vc(g)?W={ms:g._milliseconds,d:g._days,M:g._months}:h(g)||!isNaN(+g)?(W={},j?W[j]=+g:W.milliseconds=+g):(q=Jy.exec(g))?(te=q[1]==="-"?-1:1,W={y:0,d:Cr(q[Ha])*te,h:Cr(q[fo])*te,m:Cr(q[ba])*te,s:Cr(q[hl])*te,ms:Cr(af(q[Is]*1e3))*te}):(q=Zm.exec(g))?(te=q[1]==="-"?-1:1,W={y:Ms(q[2],te),M:Ms(q[3],te),w:Ms(q[4],te),d:Ms(q[5],te),h:Ms(q[6],te),m:Ms(q[7],te),s:Ms(q[8],te)}):W==null?W={}:typeof W=="object"&&("from"in W||"to"in W)&&(He=Gy(pn(W.from),pn(W.to)),W={},W.ms=He.milliseconds,W.M=He.months),ge=new Vl(W),Vc(g)&&i(g,"_locale")&&(ge._locale=g._locale),Vc(g)&&i(g,"_isValid")&&(ge._isValid=g._isValid),ge}Ci.fn=Vl.prototype,Ci.invalid=Au;function Ms(g,j){var W=g&&parseFloat(g.replace(",","."));return(isNaN(W)?0:W)*j}function Tu(g,j){var W={};return W.months=j.month()-g.month()+(j.year()-g.year())*12,g.clone().add(W.months,"M").isAfter(j)&&--W.months,W.milliseconds=+j-+g.clone().add(W.months,"M"),W}function Gy(g,j){var W;return g.isValid()&&j.isValid()?(j=Mu(j,g),g.isBefore(j)?W=Tu(g,j):(W=Tu(j,g),W.milliseconds=-W.milliseconds,W.months=-W.months),W):{milliseconds:0,months:0}}function eh(g,j){return function(W,q){var te,ge;return q!==null&&!isNaN(+q)&&(_e(j,"moment()."+j+"(period, number) is deprecated. Please use moment()."+j+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),ge=W,W=q,q=ge),te=Ci(W,q),Jc(this,te,g),this}}function Jc(g,j,W,q){var te=j._milliseconds,ge=af(j._days),He=af(j._months);g.isValid()&&(q=q??!0,He&&Su(g,_u(g,"Month")+He*W),ge&&qp(g,"Date",_u(g,"Date")+ge*W),te&&g._d.setTime(g._d.valueOf()+te*W),q&&t.updateOffset(g,ge||He))}var E0=eh(1,"add"),uf=eh(-1,"subtract");function C0(g){return typeof g=="string"||g instanceof String}function th(g){return Z(g)||y(g)||C0(g)||h(g)||gl(g)||rh(g)||g===null||g===void 0}function rh(g){var j=o(g)&&!u(g),W=!1,q=["years","year","y","months","month","M","days","day","d","dates","date","D","hours","hour","h","minutes","minute","m","seconds","second","s","milliseconds","millisecond","ms"],te,ge,He=q.length;for(te=0;teW.valueOf():W.valueOf()9999?xt(W,j?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):be(Date.prototype.toISOString)?j?this.toDate().toISOString():new Date(this.valueOf()+this.utcOffset()*60*1e3).toISOString().replace("Z",xt(W,"Z")):xt(W,j?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")}function lh(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var g="moment",j="",W,q,te,ge;return this.isLocal()||(g=this.utcOffset()===0?"moment.utc":"moment.parseZone",j="Z"),W="["+g+'("]',q=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",te="-MM-DD[T]HH:mm:ss.SSS",ge=j+'[")]',this.format(W+q+te+ge)}function T0(g){g||(g=this.isUtc()?t.defaultFormatUtc:t.defaultFormat);var j=xt(this,g);return this.localeData().postformat(j)}function e2(g,j){return this.isValid()&&(Z(g)&&g.isValid()||pn(g).isValid())?Ci({to:this,from:g}).locale(this.locale()).humanize(!j):this.localeData().invalidDate()}function sh(g){return this.from(pn(),g)}function t2(g,j){return this.isValid()&&(Z(g)&&g.isValid()||pn(g).isValid())?Ci({from:this,to:g}).locale(this.locale()).humanize(!j):this.localeData().invalidDate()}function r2(g){return this.to(pn(),g)}function Ja(g){var j;return g===void 0?this._locale._abbr:(j=Yi(g),j!=null&&(this._locale=j),this)}var uh=de("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(g){return g===void 0?this.localeData():this.locale(g)});function ch(){return this._locale}var Ga=1e3,Ru=60*Ga,cf=60*Ru,ph=(365*400+97)*24*cf;function Ts(g,j){return(g%j+j)%j}function Yo(g,j,W){return g<100&&g>=0?new Date(g+400,j,W)-ph:new Date(g,j,W).valueOf()}function ci(g,j,W){return g<100&&g>=0?Date.UTC(g+400,j,W)-ph:Date.UTC(g,j,W)}function ho(g){var j,W;if(g=An(g),g===void 0||g==="millisecond"||!this.isValid())return this;switch(W=this._isUTC?ci:Yo,g){case"year":j=W(this.year(),0,1);break;case"quarter":j=W(this.year(),this.month()-this.month()%3,1);break;case"month":j=W(this.year(),this.month(),1);break;case"week":j=W(this.year(),this.month(),this.date()-this.weekday());break;case"isoWeek":j=W(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case"day":case"date":j=W(this.year(),this.month(),this.date());break;case"hour":j=this._d.valueOf(),j-=Ts(j+(this._isUTC?0:this.utcOffset()*Ru),cf);break;case"minute":j=this._d.valueOf(),j-=Ts(j,Ru);break;case"second":j=this._d.valueOf(),j-=Ts(j,Ga);break}return this._d.setTime(j),t.updateOffset(this,!0),this}function Xa(g){var j,W;if(g=An(g),g===void 0||g==="millisecond"||!this.isValid())return this;switch(W=this._isUTC?ci:Yo,g){case"year":j=W(this.year()+1,0,1)-1;break;case"quarter":j=W(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":j=W(this.year(),this.month()+1,1)-1;break;case"week":j=W(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":j=W(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":j=W(this.year(),this.month(),this.date()+1)-1;break;case"hour":j=this._d.valueOf(),j+=cf-Ts(j+(this._isUTC?0:this.utcOffset()*Ru),cf)-1;break;case"minute":j=this._d.valueOf(),j+=Ru-Ts(j,Ru)-1;break;case"second":j=this._d.valueOf(),j+=Ga-Ts(j,Ga)-1;break}return this._d.setTime(j),t.updateOffset(this,!0),this}function ql(){return this._d.valueOf()-(this._offset||0)*6e4}function vl(){return Math.floor(this.valueOf()/1e3)}function Rs(){return new Date(this.valueOf())}function fh(){var g=this;return[g.year(),g.month(),g.date(),g.hour(),g.minute(),g.second(),g.millisecond()]}function dh(){var g=this;return{years:g.year(),months:g.month(),date:g.date(),hours:g.hours(),minutes:g.minutes(),seconds:g.seconds(),milliseconds:g.milliseconds()}}function R0(){return this.isValid()?this.toISOString():null}function Gc(){return F(this)}function z0(){return S({},C(this))}function yl(){return C(this).overflow}function pf(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}at("N",0,0,"eraAbbr"),at("NN",0,0,"eraAbbr"),at("NNN",0,0,"eraAbbr"),at("NNNN",0,0,"eraName"),at("NNNNN",0,0,"eraNarrow"),at("y",["y",1],"yo","eraYear"),at("y",["yy",2],0,"eraYear"),at("y",["yyy",3],0,"eraYear"),at("y",["yyyy",4],0,"eraYear"),St("N",W0),St("NN",W0),St("NNN",W0),St("NNNN",mf),St("NNNNN",hf),un(["N","NN","NNN","NNNN","NNNNN"],function(g,j,W,q){var te=W._locale.erasParse(g,q,W._strict);te?C(W).era=te:C(W).invalidEra=g}),St("y",Ss),St("yy",Ss),St("yyy",Ss),St("yyyy",Ss),St("yo",mh),un(["y","yy","yyy","yyyy"],Ko),un(["yo"],function(g,j,W,q){var te;W._locale._eraYearOrdinalRegex&&(te=g.match(W._locale._eraYearOrdinalRegex)),W._locale.eraYearOrdinalParse?j[Ko]=W._locale.eraYearOrdinalParse(g,te):j[Ko]=parseInt(g,10)});function L0(g,j){var W,q,te,ge=this._eras||Yi("en")._eras;for(W=0,q=ge.length;W=0)return ge[q]}function D0(g,j){var W=g.since<=g.until?1:-1;return j===void 0?t(g.since).year():t(g.since).year()+(j-g.offset)*W}function Qi(){var g,j,W,q=this.localeData().eras();for(g=0,j=q.length;gge&&(j=ge),yh.call(this,g,j,W,q,te))}function yh(g,j,W,q,te){var ge=l0(g,j,W,q,te),He=qa(ge.year,0,ge.dayOfYear);return this.year(He.getUTCFullYear()),this.month(He.getUTCMonth()),this.date(He.getUTCDate()),this}at("Q",0,"Qo","quarter"),St("Q",vn),un("Q",function(g,j){j[Lo]=(Cr(g)-1)*3});function Xc(g){return g==null?Math.ceil((this.month()+1)/3):this.month((g-1)*3+this.month()%3)}at("D",["DD",2],"Do","date"),St("D",mr,wu),St("DD",mr,yn),St("Do",function(g,j){return g?j._dayOfMonthOrdinalParse||j._ordinalParse:j._dayOfMonthOrdinalParseLenient}),un(["D","DD"],Ha),un("Do",function(g,j){j[Ha]=Cr(g.match(mr)[0])});var gf=Ps("Date",!0);at("DDD",["DDDD",3],"DDDo","dayOfYear"),St("DDD",ml),St("DDDD",Xo),un(["DDD","DDDD"],function(g,j,W){W._dayOfYear=Cr(g)});function V0(g){var j=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return g==null?j:this.add(g-j,"d")}at("m",["mm",2],0,"minute"),St("m",mr,js),St("mm",mr,yn),un(["m","mm"],ba);var i2=Ps("Minutes",!1);at("s",["ss",2],0,"second"),St("s",mr,js),St("ss",mr,yn),un(["s","ss"],hl);var vf=Ps("Seconds",!1);at("S",0,0,function(){return~~(this.millisecond()/100)}),at(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),at(0,["SSS",3],0,"millisecond"),at(0,["SSSS",4],0,function(){return this.millisecond()*10}),at(0,["SSSSS",5],0,function(){return this.millisecond()*100}),at(0,["SSSSSS",6],0,function(){return this.millisecond()*1e3}),at(0,["SSSSSSS",7],0,function(){return this.millisecond()*1e4}),at(0,["SSSSSSSS",8],0,function(){return this.millisecond()*1e5}),at(0,["SSSSSSSSS",9],0,function(){return this.millisecond()*1e6}),St("S",ml,vn),St("SS",ml,yn),St("SSS",ml,Xo);var xa,Kc;for(xa="SSSS";xa.length<=9;xa+="S")St(xa,Ss);function Mn(g,j){j[Is]=Cr(("0."+g)*1e3)}for(xa="S";xa.length<=9;xa+="S")un(xa,Mn);Kc=Ps("Milliseconds",!1),at("z",0,0,"zoneAbbr"),at("zz",0,0,"zoneName");function bh(){return this._isUTC?"UTC":""}function Nu(){return this._isUTC?"Coordinated Universal Time":""}var ut=le.prototype;ut.add=E0,ut.calendar=oh,ut.clone=ih,ut.diff=iS,ut.endOf=Xa,ut.format=T0,ut.from=e2,ut.fromNow=sh,ut.to=t2,ut.toNow=r2,ut.get=_m,ut.invalidAt=yl,ut.isAfter=Xy,ut.isBefore=Ky,ut.isBetween=Yy,ut.isSame=Qy,ut.isSameOrAfter=Nn,ut.isSameOrBefore=oS,ut.isValid=Gc,ut.lang=uh,ut.locale=Ja,ut.localeData=ch,ut.max=Vy,ut.min=Hy,ut.parsingFlags=z0,ut.set=Sm,ut.startOf=ho,ut.subtract=uf,ut.toArray=fh,ut.toObject=dh,ut.toDate=Rs,ut.toISOString=ah,ut.inspect=lh,typeof Symbol<"u"&&Symbol.for!=null&&(ut[Symbol.for("nodejs.util.inspect.custom")]=function(){return"Moment<"+this.format()+">"}),ut.toJSON=R0,ut.toString=Zy,ut.unix=vl,ut.valueOf=ql,ut.creationData=pf,ut.eraName=Qi,ut.eraNarrow=zu,ut.eraAbbr=N0,ut.eraYear=F0,ut.year=n0,ut.isLeapYear=Vp,ut.weekYear=hh,ut.isoWeekYear=Ul,ut.quarter=ut.quarters=Xc,ut.month=Es,ut.daysInMonth=Tc,ut.week=ut.weeks=Ua,ut.isoWeek=ut.isoWeeks=Iu,ut.weeksInYear=o2,ut.weeksInWeekYear=gh,ut.isoWeeksInYear=B0,ut.isoWeeksInISOWeekYear=H0,ut.date=gf,ut.day=ut.days=km,ut.weekday=Wl,ut.isoWeekday=ui,ut.dayOfYear=V0,ut.hour=ut.hours=Lc,ut.minute=ut.minutes=i2,ut.second=ut.seconds=vf,ut.millisecond=ut.milliseconds=Kc,ut.utcOffset=S0,ut.utc=$y,ut.local=j0,ut.parseZone=$c,ut.hasAlignedHourOffset=I0,ut.isDST=Ym,ut.isLocal=k0,ut.isUtcOffset=sf,ut.isUtc=Qm,ut.isUTC=Qm,ut.zoneAbbr=bh,ut.zoneName=Nu,ut.dates=de("dates accessor is deprecated. Use date instead.",gf),ut.months=de("months accessor is deprecated. Use month instead",Es),ut.years=de("years accessor is deprecated. Use year instead",n0),ut.zone=de("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",Km),ut.isDSTShifted=de("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",P0);function q0(g){return pn(g*1e3)}function pi(){return pn.apply(null,arguments).parseZone()}function _a(g){return g}var Zr=Le.prototype;Zr.calendar=rt,Zr.longDateFormat=Hr,Zr.invalidDate=Sr,Zr.ordinal=nn,Zr.preparse=_a,Zr.postformat=_a,Zr.relativeTime=Xn,Zr.pastFuture=po,Zr.set=Pe,Zr.eras=L0,Zr.erasParse=n2,Zr.erasConvertYear=D0,Zr.erasAbbrRegex=df,Zr.erasNameRegex=ff,Zr.erasNarrowRegex=zs,Zr.months=Im,Zr.monthsShort=Ry,Zr.monthsParse=Pm,Zr.monthsRegex=Ly,Zr.monthsShortRegex=zy,Zr.week=s0,Zr.firstDayOfYear=c0,Zr.firstDayOfWeek=u0,Zr.weekdays=zc,Zr.weekdaysMin=ef,Zr.weekdaysShort=Zp,Zr.weekdaysParse=tf,Zr.weekdaysRegex=Em,Zr.weekdaysShortRegex=Cm,Zr.weekdaysMinRegex=Am,Zr.isPM=Mm,Zr.meridiem=Tm;function jo(g,j,W,q){var te=Yi(),ge=I().set(q,j);return te[W](ge,g)}function wh(g,j,W){if(h(g)&&(j=g,g=void 0),g=g||"",j!=null)return jo(g,j,W,"month");var q,te=[];for(q=0;q<12;q++)te[q]=jo(g,q,W,"month");return te}function Fu(g,j,W,q){typeof g=="boolean"?(h(j)&&(W=j,j=void 0),j=j||""):(j=g,W=j,g=!1,h(j)&&(W=j,j=void 0),j=j||"");var te=Yi(),ge=g?te._week.dow:0,He,It=[];if(W!=null)return jo(j,(W+ge)%7,q,"day");for(He=0;He<7;He++)It[He]=jo(j,(He+ge)%7,q,"day");return It}function aS(g,j){return wh(g,j,"months")}function lS(g,j){return wh(g,j,"monthsShort")}function sS(g,j,W){return Fu(g,j,W,"weekdays")}function uS(g,j,W){return Fu(g,j,W,"weekdaysShort")}function Oh(g,j,W){return Fu(g,j,W,"weekdaysMin")}Ki("en",{eras:[{since:"0001-01-01",until:1/0,offset:1,name:"Anno Domini",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"Before Christ",narrow:"BC",abbr:"BC"}],dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(g){var j=g%10,W=Cr(g%100/10)===1?"th":j===1?"st":j===2?"nd":j===3?"rd":"th";return g+W}}),t.lang=de("moment.lang is deprecated. Use moment.locale instead.",Ki),t.langData=de("moment.langData is deprecated. Use moment.localeData instead.",Yi);var go=Math.abs;function Zi(){var g=this._data;return this._milliseconds=go(this._milliseconds),this._days=go(this._days),this._months=go(this._months),g.milliseconds=go(g.milliseconds),g.seconds=go(g.seconds),g.minutes=go(g.minutes),g.hours=go(g.hours),g.months=go(g.months),g.years=go(g.years),this}function bl(g,j,W,q){var te=Ci(j,W);return g._milliseconds+=q*te._milliseconds,g._days+=q*te._days,g._months+=q*te._months,g._bubble()}function a2(g,j){return bl(this,g,j,1)}function l2(g,j){return bl(this,g,j,-1)}function U0(g){return g<0?Math.floor(g):Math.ceil(g)}function xh(){var g=this._milliseconds,j=this._days,W=this._months,q=this._data,te,ge,He,It,Zt;return g>=0&&j>=0&&W>=0||g<=0&&j<=0&&W<=0||(g+=U0(yf(W)+j)*864e5,j=0,W=0),q.milliseconds=g%1e3,te=Ei(g/1e3),q.seconds=te%60,ge=Ei(te/60),q.minutes=ge%60,He=Ei(ge/60),q.hours=He%24,j+=Ei(He/24),Zt=Ei(Do(j)),W+=Zt,j-=U0(yf(Zt)),It=Ei(W/12),W%=12,q.days=j,q.months=W,q.years=It,this}function Do(g){return g*4800/146097}function yf(g){return g*146097/4800}function $0(g){if(!this.isValid())return NaN;var j,W,q=this._milliseconds;if(g=An(g),g==="month"||g==="quarter"||g==="year")switch(j=this._days+q/864e5,W=this._months+Do(j),g){case"month":return W;case"quarter":return W/3;case"year":return W/12}else switch(j=this._days+Math.round(yf(this._months)),g){case"week":return j/7+q/6048e5;case"day":return j+q/864e5;case"hour":return j*24+q/36e5;case"minute":return j*1440+q/6e4;case"second":return j*86400+q/1e3;case"millisecond":return Math.floor(j*864e5)+q;default:throw new Error("Unknown unit "+g)}}function ea(g){return function(){return this.as(g)}}var _h=ea("ms"),bf=ea("s"),s2=ea("m"),u2=ea("h"),wf=ea("d"),c2=ea("w"),Sh=ea("M"),J0=ea("Q"),jh=ea("y"),Ih=_h;function p2(){return Ci(this)}function Wu(g){return g=An(g),this.isValid()?this[g+"s"]():NaN}function Ls(g){return function(){return this.isValid()?this._data[g]:NaN}}var f2=Ls("milliseconds"),G0=Ls("seconds"),X0=Ls("minutes"),d2=Ls("hours"),m2=Ls("days"),Ph=Ls("months"),wl=Ls("years");function Of(){return Ei(this.days()/7)}var Ka=Math.round,Ds={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function cS(g,j,W,q,te){return te.relativeTime(j||1,!!W,g,q)}function kh(g,j,W,q){var te=Ci(g).abs(),ge=Ka(te.as("s")),He=Ka(te.as("m")),It=Ka(te.as("h")),Zt=Ka(te.as("d")),Ar=Ka(te.as("M")),No=Ka(te.as("w")),Ai=Ka(te.as("y")),Ya=ge<=W.ss&&["s",ge]||ge0,Ya[4]=q,cS.apply(null,Ya)}function bn(g){return g===void 0?Ka:typeof g=="function"?(Ka=g,!0):!1}function vo(g,j){return Ds[g]===void 0?!1:j===void 0?Ds[g]:(Ds[g]=j,g==="s"&&(Ds.ss=j-1),!0)}function h2(g,j){if(!this.isValid())return this.localeData().invalidDate();var W=!1,q=Ds,te,ge;return typeof g=="object"&&(j=g,g=!1),typeof g=="boolean"&&(W=g),typeof j=="object"&&(q=Object.assign({},Ds,j),j.s!=null&&j.ss==null&&(q.ss=j.s-1)),te=this.localeData(),ge=kh(this,!W,q,te),W&&(ge=te.pastFuture(+this,ge)),te.postformat(ge)}var Yc=Math.abs;function Ns(g){return(g>0)-(g<0)||+g}function Qc(){if(!this.isValid())return this.localeData().invalidDate();var g=Yc(this._milliseconds)/1e3,j=Yc(this._days),W=Yc(this._months),q,te,ge,He,It=this.asSeconds(),Zt,Ar,No,Ai;return It?(q=Ei(g/60),te=Ei(q/60),g%=60,q%=60,ge=Ei(W/12),W%=12,He=g?g.toFixed(3).replace(/\.?0+$/,""):"",Zt=It<0?"-":"",Ar=Ns(this._months)!==Ns(It)?"-":"",No=Ns(this._days)!==Ns(It)?"-":"",Ai=Ns(this._milliseconds)!==Ns(It)?"-":"",Zt+"P"+(ge?Ar+ge+"Y":"")+(W?Ar+W+"M":"")+(j?No+j+"D":"")+(te||q||g?"T":"")+(te?Ai+te+"H":"")+(q?Ai+q+"M":"")+(g?Ai+He+"S":"")):"P0D"}var jr=Vl.prototype;jr.isValid=Uy,jr.abs=Zi,jr.add=a2,jr.subtract=l2,jr.as=$0,jr.asMilliseconds=_h,jr.asSeconds=bf,jr.asMinutes=s2,jr.asHours=u2,jr.asDays=wf,jr.asWeeks=c2,jr.asMonths=Sh,jr.asQuarters=J0,jr.asYears=jh,jr.valueOf=Ih,jr._bubble=xh,jr.clone=p2,jr.get=Wu,jr.milliseconds=f2,jr.seconds=G0,jr.minutes=X0,jr.hours=d2,jr.days=m2,jr.weeks=Of,jr.months=Ph,jr.years=wl,jr.humanize=h2,jr.toISOString=Qc,jr.toString=Qc,jr.toJSON=Qc,jr.locale=Ja,jr.localeData=ch,jr.toIsoString=de("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",Qc),jr.lang=uh,at("X",0,0,"unix"),at("x",0,0,"valueOf"),St("x",Dl),St("X",t0),un("X",function(g,j,W){W._d=new Date(parseFloat(g)*1e3)}),un("x",function(g,j,W){W._d=new Date(Cr(g))});return t.version="2.30.1",n(pn),t.fn=ut,t.min=qy,t.max=Bc,t.now=Hc,t.utc=I,t.unix=q0,t.months=aS,t.isDate=y,t.locale=Ki,t.invalid=R,t.duration=Ci,t.isMoment=Z,t.weekdays=sS,t.parseZone=pi,t.localeData=Yi,t.isDuration=Vc,t.monthsShort=lS,t.weekdaysMin=Oh,t.defineLocale=cn,t.updateLocale=Ny,t.locales=Dm,t.weekdaysShort=uS,t.normalizeUnits=An,t.relativeTimeRounding=bn,t.relativeTimeThreshold=vo,t.calendarFormat=nh,t.prototype=ut,t.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"GGGG-[W]WW",MONTH:"YYYY-MM"},t})});var ipe=Ie((iFt,ope)=>{var VAe=sc(),qAe=tu(),UAe=ms(),$Ae="[object String]";function JAe(e){return typeof e=="string"||!qAe(e)&&UAe(e)&&VAe(e)==$Ae}ope.exports=JAe});var lpe=Ie((aFt,ape)=>{var GAe=sc(),XAe=ms(),KAe="[object Boolean]";function YAe(e){return e===!0||e===!1||XAe(e)&&GAe(e)==KAe}ape.exports=YAe});var mF=Ie((lFt,spe)=>{var QAe=sc(),ZAe=ms(),eMe="[object Number]";function tMe(e){return typeof e=="number"||ZAe(e)&&QAe(e)==eMe}spe.exports=tMe});var cpe=Ie((sFt,upe)=>{var rMe=mF();function nMe(e){return rMe(e)&&e!=+e}upe.exports=nMe});var xpe=Ie((Ope,Ek)=>{(function(e,t){typeof define=="function"&&define.amd?define(t):typeof Ek=="object"&&Ek.exports?Ek.exports=t():e.numeral=t()})(Ope,function(){var e,t,n="2.0.6",r={},o={},i={currentLocale:"en",zeroFormat:null,nullFormat:null,defaultFormat:"0,0",scalePercentBy100:!0},u={currentLocale:i.currentLocale,zeroFormat:i.zeroFormat,nullFormat:i.nullFormat,defaultFormat:i.defaultFormat,scalePercentBy100:i.scalePercentBy100};function f(h,y){this._input=h,this._value=y}return e=function(h){var y,O,S,I;if(e.isNumeral(h))y=h.value();else if(h===0||typeof h>"u")y=0;else if(h===null||t.isNaN(h))y=null;else if(typeof h=="string")if(u.zeroFormat&&h===u.zeroFormat)y=0;else if(u.nullFormat&&h===u.nullFormat||!h.replace(/[^0-9]+/g,"").length)y=null;else{for(O in r)if(I=typeof r[O].regexps.unformat=="function"?r[O].regexps.unformat():r[O].regexps.unformat,I&&h.match(I)){S=r[O].unformat;break}S=S||e._.stringToNumber,y=S(h)}else y=Number(h)||null;return new f(h,y)},e.version=n,e.isNumeral=function(h){return h instanceof f},e._=t={numberToFormat:function(h,y,O){var S=o[e.options.currentLocale],I=!1,A=!1,C=0,M="",F=1e12,R=1e9,B=1e6,Y=1e3,X="",le=!1,Z,K,de,se,_e,be,Pe,Ue,Le,Ge;if(h=h||0,K=Math.abs(h),e._.includes(y,"(")?(I=!0,y=y.replace(/[\(|\)]/g,"")):(e._.includes(y,"+")||e._.includes(y,"-"))&&(Ue=e._.includes(y,"+")?y.indexOf("+"):h<0?y.indexOf("-"):-1,y=y.replace(/[\+|\-]/g,"")),e._.includes(y,"a")&&(Z=y.match(/a(k|m|b|t)?/),Z=Z?Z[1]:!1,e._.includes(y," a")&&(M=" "),y=y.replace(new RegExp(M+"a[kmbt]?"),""),K>=F&&!Z||Z==="t"?(M+=S.abbreviations.trillion,h=h/F):K=R&&!Z||Z==="b"?(M+=S.abbreviations.billion,h=h/R):K=B&&!Z||Z==="m"?(M+=S.abbreviations.million,h=h/B):(K=Y&&!Z||Z==="k")&&(M+=S.abbreviations.thousand,h=h/Y)),e._.includes(y,"[.]")&&(A=!0,y=y.replace("[.]",".")),be=h.toString().split(".")[0],Pe=y.split(".")[1],Le=y.indexOf(","),C=(y.split(".")[0].split(",")[0].match(/0/g)||[]).length,Pe?(e._.includes(Pe,"[")?(Pe=Pe.replace("]",""),Pe=Pe.split("["),X=e._.toFixed(h,Pe[0].length+Pe[1].length,O,Pe[1].length)):X=e._.toFixed(h,Pe.length,O),be=X.split(".")[0],e._.includes(X,".")?X=S.delimiters.decimal+X.split(".")[1]:X="",A&&Number(X.slice(1))===0&&(X="")):be=e._.toFixed(h,0,O),M&&!Z&&Number(be)>=1e3&&M!==S.abbreviations.trillion)switch(be=String(Number(be)/1e3),M){case S.abbreviations.thousand:M=S.abbreviations.million;break;case S.abbreviations.million:M=S.abbreviations.billion;break;case S.abbreviations.billion:M=S.abbreviations.trillion;break}if(e._.includes(be,"-")&&(be=be.slice(1),le=!0),be.length0;Ke--)be="0"+be;return Le>-1&&(be=be.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1"+S.delimiters.thousands)),y.indexOf(".")===0&&(be=""),Ge=be+X+(M||""),I?Ge=(I&&le?"(":"")+Ge+(I&&le?")":""):Ue>=0?Ge=Ue===0?(le?"-":"+")+Ge:Ge+(le?"-":"+"):le&&(Ge="-"+Ge),Ge},stringToNumber:function(h){var y=o[u.currentLocale],O=h,S={thousand:3,million:6,billion:9,trillion:12},I,A,C,M;if(u.zeroFormat&&h===u.zeroFormat)A=0;else if(u.nullFormat&&h===u.nullFormat||!h.replace(/[^0-9]+/g,"").length)A=null;else{A=1,y.delimiters.decimal!=="."&&(h=h.replace(/\./g,"").replace(y.delimiters.decimal,"."));for(I in S)if(M=new RegExp("[^a-zA-Z]"+y.abbreviations[I]+"(?:\\)|(\\"+y.currency.symbol+")?(?:\\))?)?$"),O.match(M)){A*=Math.pow(10,S[I]);break}A*=(h.split("-").length+Math.min(h.split("(").length-1,h.split(")").length-1))%2?1:-1,h=h.replace(/[^0-9\.]+/g,""),A*=Number(h)}return A},isNaN:function(h){return typeof h=="number"&&isNaN(h)},includes:function(h,y){return h.indexOf(y)!==-1},insert:function(h,y,O){return h.slice(0,O)+y+h.slice(O)},reduce:function(h,y){if(this===null)throw new TypeError("Array.prototype.reduce called on null or undefined");if(typeof y!="function")throw new TypeError(y+" is not a function");var O=Object(h),S=O.length>>>0,I=0,A;if(arguments.length===3)A=arguments[2];else{for(;I=S)throw new TypeError("Reduce of empty array with no initial value");A=O[I++]}for(;IS?y:S},1)},toFixed:function(h,y,O,S){var I=h.toString().split("."),A=y-(S||0),C,M,F,R;return I.length===2?C=Math.min(Math.max(I[1].length,A),y):C=A,F=Math.pow(10,C),R=(O(h+"e+"+C)/F).toFixed(C),S>y-C&&(M=new RegExp("\\.?0{1,"+(S-(y-C))+"}$"),R=R.replace(M,"")),R}},e.options=u,e.formats=r,e.locales=o,e.locale=function(h){return h&&(u.currentLocale=h.toLowerCase()),u.currentLocale},e.localeData=function(h){if(!h)return o[u.currentLocale];if(h=h.toLowerCase(),!o[h])throw new Error("Unknown locale : "+h);return o[h]},e.reset=function(){for(var h in i)u[h]=i[h]},e.zeroFormat=function(h){u.zeroFormat=typeof h=="string"?h:null},e.nullFormat=function(h){u.nullFormat=typeof h=="string"?h:null},e.defaultFormat=function(h){u.defaultFormat=typeof h=="string"?h:"0.0"},e.register=function(h,y,O){if(y=y.toLowerCase(),this[h+"s"][y])throw new TypeError(y+" "+h+" already registered.");return this[h+"s"][y]=O,O},e.validate=function(h,y){var O,S,I,A,C,M,F,R;if(typeof h!="string"&&(h+="",console.warn&&console.warn("Numeral.js: Value is not string. It has been co-erced to: ",h)),h=h.trim(),h.match(/^\d+$/))return!0;if(h==="")return!1;try{F=e.localeData(y)}catch{F=e.localeData(e.locale())}return I=F.currency.symbol,C=F.abbreviations,O=F.delimiters.decimal,F.delimiters.thousands==="."?S="\\.":S=F.delimiters.thousands,R=h.match(/^[^\d]+/),R!==null&&(h=h.substr(1),R[0]!==I)||(R=h.match(/[^\d]+$/),R!==null&&(h=h.slice(0,-1),R[0]!==C.thousand&&R[0]!==C.million&&R[0]!==C.billion&&R[0]!==C.trillion))?!1:(M=new RegExp(S+"{2}"),h.match(/[^\d.,]/g)?!1:(A=h.split(O),A.length>2?!1:A.length<2?!!A[0].match(/^\d+.*\d$/)&&!A[0].match(M):A[0].length===1?!!A[0].match(/^\d+$/)&&!A[0].match(M)&&!!A[1].match(/^\d+$/):!!A[0].match(/^\d+.*\d$/)&&!A[0].match(M)&&!!A[1].match(/^\d+$/)))},e.fn=f.prototype={clone:function(){return e(this)},format:function(h,y){var O=this._value,S=h||u.defaultFormat,I,A,C;if(y=y||Math.round,O===0&&u.zeroFormat!==null)A=u.zeroFormat;else if(O===null&&u.nullFormat!==null)A=u.nullFormat;else{for(I in r)if(S.match(r[I].regexps.format)){C=r[I].format;break}C=C||e._.numberToFormat,A=C(O,S,y)}return A},value:function(){return this._value},input:function(){return this._input},set:function(h){return this._value=Number(h),this},add:function(h){var y=t.correctionFactor.call(null,this._value,h);function O(S,I,A,C){return S+Math.round(y*I)}return this._value=t.reduce([this._value,h],O,0)/y,this},subtract:function(h){var y=t.correctionFactor.call(null,this._value,h);function O(S,I,A,C){return S-Math.round(y*I)}return this._value=t.reduce([h],O,Math.round(this._value*y))/y,this},multiply:function(h){function y(O,S,I,A){var C=t.correctionFactor(O,S);return Math.round(O*C)*Math.round(S*C)/Math.round(C*C)}return this._value=t.reduce([this._value,h],y,1),this},divide:function(h){function y(O,S,I,A){var C=t.correctionFactor(O,S);return Math.round(O*C)/Math.round(S*C)}return this._value=t.reduce([this._value,h],y),this},difference:function(h){return Math.abs(e(this._value).subtract(h).value())}},e.register("locale","en",{delimiters:{thousands:",",decimal:"."},abbreviations:{thousand:"k",million:"m",billion:"b",trillion:"t"},ordinal:function(h){var y=h%10;return~~(h%100/10)===1?"th":y===1?"st":y===2?"nd":y===3?"rd":"th"},currency:{symbol:"$"}}),function(){e.register("format","bps",{regexps:{format:/(BPS)/,unformat:/(BPS)/},format:function(h,y,O){var S=e._.includes(y," BPS")?" ":"",I;return h=h*1e4,y=y.replace(/\s?BPS/,""),I=e._.numberToFormat(h,y,O),e._.includes(I,")")?(I=I.split(""),I.splice(-1,0,S+"BPS"),I=I.join("")):I=I+S+"BPS",I},unformat:function(h){return+(e._.stringToNumber(h)*1e-4).toFixed(15)}})}(),function(){var h={base:1e3,suffixes:["B","KB","MB","GB","TB","PB","EB","ZB","YB"]},y={base:1024,suffixes:["B","KiB","MiB","GiB","TiB","PiB","EiB","ZiB","YiB"]},O=h.suffixes.concat(y.suffixes.filter(function(I){return h.suffixes.indexOf(I)<0})),S=O.join("|");S="("+S.replace("B","B(?!PS)")+")",e.register("format","bytes",{regexps:{format:/([0\s]i?b)/,unformat:new RegExp(S)},format:function(I,A,C){var M,F=e._.includes(A,"ib")?y:h,R=e._.includes(A," b")||e._.includes(A," ib")?" ":"",B,Y,X;for(A=A.replace(/\s?i?b/,""),B=0;B<=F.suffixes.length;B++)if(Y=Math.pow(F.base,B),X=Math.pow(F.base,B+1),I===null||I===0||I>=Y&&I0&&(I=I/Y);break}return M=e._.numberToFormat(I,A,C),M+R},unformat:function(I){var A=e._.stringToNumber(I),C,M;if(A){for(C=h.suffixes.length-1;C>=0;C--){if(e._.includes(I,h.suffixes[C])){M=Math.pow(h.base,C);break}if(e._.includes(I,y.suffixes[C])){M=Math.pow(y.base,C);break}}A*=M||1}return A}})}(),function(){e.register("format","currency",{regexps:{format:/(\$)/},format:function(h,y,O){var S=e.locales[e.options.currentLocale],I={before:y.match(/^([\+|\-|\(|\s|\$]*)/)[0],after:y.match(/([\+|\-|\)|\s|\$]*)$/)[0]},A,C,M;for(y=y.replace(/\s?\$\s?/,""),A=e._.numberToFormat(h,y,O),h>=0?(I.before=I.before.replace(/[\-\(]/,""),I.after=I.after.replace(/[\-\)]/,"")):h<0&&!e._.includes(I.before,"-")&&!e._.includes(I.before,"(")&&(I.before="-"+I.before),M=0;M=0;M--)switch(C=I.after[M],C){case"$":A=M===I.after.length-1?A+S.currency.symbol:e._.insert(A,S.currency.symbol,-(I.after.length-(1+M)));break;case" ":A=M===I.after.length-1?A+" ":e._.insert(A," ",-(I.after.length-(1+M)+S.currency.symbol.length-1));break}return A}})}(),function(){e.register("format","exponential",{regexps:{format:/(e\+|e-)/,unformat:/(e\+|e-)/},format:function(h,y,O){var S,I=typeof h=="number"&&!e._.isNaN(h)?h.toExponential():"0e+0",A=I.split("e");return y=y.replace(/e[\+|\-]{1}0/,""),S=e._.numberToFormat(Number(A[0]),y,O),S+"e"+A[1]},unformat:function(h){var y=e._.includes(h,"e+")?h.split("e+"):h.split("e-"),O=Number(y[0]),S=Number(y[1]);S=e._.includes(h,"e-")?S*=-1:S;function I(A,C,M,F){var R=e._.correctionFactor(A,C),B=A*R*(C*R)/(R*R);return B}return e._.reduce([O,Math.pow(10,S)],I,1)}})}(),function(){e.register("format","ordinal",{regexps:{format:/(o)/},format:function(h,y,O){var S=e.locales[e.options.currentLocale],I,A=e._.includes(y," o")?" ":"";return y=y.replace(/\s?o/,""),A+=S.ordinal(h),I=e._.numberToFormat(h,y,O),I+A}})}(),function(){e.register("format","percentage",{regexps:{format:/(%)/,unformat:/(%)/},format:function(h,y,O){var S=e._.includes(y," %")?" ":"",I;return e.options.scalePercentBy100&&(h=h*100),y=y.replace(/\s?\%/,""),I=e._.numberToFormat(h,y,O),e._.includes(I,")")?(I=I.split(""),I.splice(-1,0,S+"%"),I=I.join("")):I=I+S+"%",I},unformat:function(h){var y=e._.stringToNumber(h);return e.options.scalePercentBy100?y*.01:y}})}(),function(){e.register("format","time",{regexps:{format:/(:)/,unformat:/(:)/},format:function(h,y,O){var S=Math.floor(h/60/60),I=Math.floor((h-S*60*60)/60),A=Math.round(h-S*60*60-I*60);return S+":"+(I<10?"0"+I:I)+":"+(A<10?"0"+A:A)},unformat:function(h){var y=h.split(":"),O=0;return y.length===3?(O=O+Number(y[0])*60*60,O=O+Number(y[1])*60,O=O+Number(y[2])):y.length===2&&(O=O+Number(y[0])*60,O=O+Number(y[1])),Number(O)}})}(),e})});var Ipe=Ie((CFt,jpe)=>{var Spe=fk(),uMe="Expected a function";function gF(e,t){if(typeof e!="function"||t!=null&&typeof t!="function")throw new TypeError(uMe);var n=function(){var r=arguments,o=t?t.apply(this,r):r[0],i=n.cache;if(i.has(o))return i.get(o);var u=e.apply(this,r);return n.cache=i.set(o,u)||i,u};return n.cache=new(gF.Cache||Spe),n}gF.Cache=Spe;jpe.exports=gF});var Mk=Ie((DFt,Cpe)=>{var pMe=sc(),fMe=ms(),dMe="[object Symbol]";function mMe(e){return typeof e=="symbol"||fMe(e)&&pMe(e)==dMe}Cpe.exports=mMe});var Mpe=Ie((NFt,Ape)=>{var hMe=tu(),gMe=Mk(),vMe=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,yMe=/^\w*$/;function bMe(e,t){if(hMe(e))return!1;var n=typeof e;return n=="number"||n=="symbol"||n=="boolean"||e==null||gMe(e)?!0:yMe.test(e)||!vMe.test(e)||t!=null&&e in Object(t)}Ape.exports=bMe});var Rpe=Ie((FFt,Tpe)=>{var wMe=Ipe(),OMe=500;function xMe(e){var t=wMe(e,function(r){return n.size===OMe&&n.clear(),r}),n=t.cache;return t}Tpe.exports=xMe});var Lpe=Ie((WFt,zpe)=>{var _Me=Rpe(),SMe=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,jMe=/\\(\\)?/g,IMe=_Me(function(e){var t=[];return e.charCodeAt(0)===46&&t.push(""),e.replace(SMe,function(n,r,o,i){t.push(o?i.replace(jMe,"$1"):r||n)}),t});zpe.exports=IMe});var yF=Ie((BFt,Dpe)=>{function PMe(e,t){for(var n=-1,r=e==null?0:e.length,o=Array(r);++n{var Npe=F1(),kMe=yF(),EMe=tu(),CMe=Mk(),AMe=1/0,Fpe=Npe?Npe.prototype:void 0,Wpe=Fpe?Fpe.toString:void 0;function Bpe(e){if(typeof e=="string")return e;if(EMe(e))return kMe(e,Bpe)+"";if(CMe(e))return Wpe?Wpe.call(e):"";var t=e+"";return t=="0"&&1/e==-AMe?"-0":t}Hpe.exports=Bpe});var Upe=Ie((VFt,qpe)=>{var MMe=Vpe();function TMe(e){return e==null?"":MMe(e)}qpe.exports=TMe});var Tk=Ie((qFt,$pe)=>{var RMe=tu(),zMe=Mpe(),LMe=Lpe(),DMe=Upe();function NMe(e,t){return RMe(e)?e:zMe(e,t)?[e]:LMe(DMe(e))}$pe.exports=NMe});var bF=Ie((UFt,Jpe)=>{var FMe=Mk(),WMe=1/0;function BMe(e){if(typeof e=="string"||FMe(e))return e;var t=e+"";return t=="0"&&1/e==-WMe?"-0":t}Jpe.exports=BMe});var wF=Ie(($Ft,Gpe)=>{var HMe=Tk(),VMe=bF();function qMe(e,t){t=HMe(t,e);for(var n=0,r=t.length;e!=null&&n{var UMe=wF();function $Me(e,t,n){var r=e==null?void 0:UMe(e,t);return r===void 0?n:r}Xpe.exports=$Me});var Qpe=Ie((GFt,Ype)=>{function JMe(e,t){for(var n=-1,r=e==null?0:e.length;++n{var GMe=Id(),XMe=function(){try{var e=GMe(Object,"defineProperty");return e({},"",{}),e}catch{}}();Zpe.exports=XMe});var xF=Ie((KFt,tfe)=>{var efe=OF();function KMe(e,t,n){t=="__proto__"&&efe?efe(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}tfe.exports=KMe});var _F=Ie((YFt,rfe)=>{var YMe=xF(),QMe=uk(),ZMe=Object.prototype,eTe=ZMe.hasOwnProperty;function tTe(e,t,n){var r=e[t];(!(eTe.call(e,t)&&QMe(r,n))||n===void 0&&!(t in e))&&YMe(e,t,n)}rfe.exports=tTe});var Ev=Ie((QFt,nfe)=>{var rTe=_F(),nTe=xF();function oTe(e,t,n,r){var o=!n;n||(n={});for(var i=-1,u=t.length;++i{var iTe=Ev(),aTe=wk();function lTe(e,t){return e&&iTe(t,aTe(t),e)}ofe.exports=lTe});var lfe=Ie((eWt,afe)=>{function sTe(e){var t=[];if(e!=null)for(var n in Object(e))t.push(n);return t}afe.exports=sTe});var ufe=Ie((tWt,sfe)=>{var uTe=W1(),cTe=bk(),pTe=lfe(),fTe=Object.prototype,dTe=fTe.hasOwnProperty;function mTe(e){if(!uTe(e))return pTe(e);var t=cTe(e),n=[];for(var r in e)r=="constructor"&&(t||!dTe.call(e,r))||n.push(r);return n}sfe.exports=mTe});var Rk=Ie((rWt,cfe)=>{var hTe=QN(),gTe=ufe(),vTe=eF();function yTe(e){return vTe(e)?hTe(e,!0):gTe(e)}cfe.exports=yTe});var ffe=Ie((nWt,pfe)=>{var bTe=Ev(),wTe=Rk();function OTe(e,t){return e&&bTe(t,wTe(t),e)}pfe.exports=OTe});var vfe=Ie((f5,Cv)=>{var xTe=eu(),gfe=typeof f5=="object"&&f5&&!f5.nodeType&&f5,dfe=gfe&&typeof Cv=="object"&&Cv&&!Cv.nodeType&&Cv,_Te=dfe&&dfe.exports===gfe,mfe=_Te?xTe.Buffer:void 0,hfe=mfe?mfe.allocUnsafe:void 0;function STe(e,t){if(t)return e.slice();var n=e.length,r=hfe?hfe(n):new e.constructor(n);return e.copy(r),r}Cv.exports=STe});var bfe=Ie((oWt,yfe)=>{function jTe(e,t){var n=-1,r=e.length;for(t||(t=Array(r));++n{var ITe=Ev(),PTe=hk();function kTe(e,t){return ITe(e,PTe(e),t)}wfe.exports=kTe});var zk=Ie((aWt,xfe)=>{var ETe=ZN(),CTe=ETe(Object.getPrototypeOf,Object);xfe.exports=CTe});var SF=Ie((lWt,_fe)=>{var ATe=mk(),MTe=zk(),TTe=hk(),RTe=JN(),zTe=Object.getOwnPropertySymbols,LTe=zTe?function(e){for(var t=[];e;)ATe(t,TTe(e)),e=MTe(e);return t}:RTe;_fe.exports=LTe});var jfe=Ie((sWt,Sfe)=>{var DTe=Ev(),NTe=SF();function FTe(e,t){return DTe(e,NTe(e),t)}Sfe.exports=FTe});var jF=Ie((uWt,Ife)=>{var WTe=$N(),BTe=SF(),HTe=Rk();function VTe(e){return WTe(e,HTe,BTe)}Ife.exports=VTe});var kfe=Ie((cWt,Pfe)=>{var qTe=Object.prototype,UTe=qTe.hasOwnProperty;function $Te(e){var t=e.length,n=new e.constructor(t);return t&&typeof e[0]=="string"&&UTe.call(e,"index")&&(n.index=e.index,n.input=e.input),n}Pfe.exports=$Te});var Lk=Ie((pWt,Cfe)=>{var Efe=qN();function JTe(e){var t=new e.constructor(e.byteLength);return new Efe(t).set(new Efe(e)),t}Cfe.exports=JTe});var Mfe=Ie((fWt,Afe)=>{var GTe=Lk();function XTe(e,t){var n=t?GTe(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)}Afe.exports=XTe});var Rfe=Ie((dWt,Tfe)=>{var KTe=/\w*$/;function YTe(e){var t=new e.constructor(e.source,KTe.exec(e));return t.lastIndex=e.lastIndex,t}Tfe.exports=YTe});var Ffe=Ie((mWt,Nfe)=>{var zfe=F1(),Lfe=zfe?zfe.prototype:void 0,Dfe=Lfe?Lfe.valueOf:void 0;function QTe(e){return Dfe?Object(Dfe.call(e)):{}}Nfe.exports=QTe});var Bfe=Ie((hWt,Wfe)=>{var ZTe=Lk();function eRe(e,t){var n=t?ZTe(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.length)}Wfe.exports=eRe});var Vfe=Ie((gWt,Hfe)=>{var tRe=Lk(),rRe=Mfe(),nRe=Rfe(),oRe=Ffe(),iRe=Bfe(),aRe="[object Boolean]",lRe="[object Date]",sRe="[object Map]",uRe="[object Number]",cRe="[object RegExp]",pRe="[object Set]",fRe="[object String]",dRe="[object Symbol]",mRe="[object ArrayBuffer]",hRe="[object DataView]",gRe="[object Float32Array]",vRe="[object Float64Array]",yRe="[object Int8Array]",bRe="[object Int16Array]",wRe="[object Int32Array]",ORe="[object Uint8Array]",xRe="[object Uint8ClampedArray]",_Re="[object Uint16Array]",SRe="[object Uint32Array]";function jRe(e,t,n){var r=e.constructor;switch(t){case mRe:return tRe(e);case aRe:case lRe:return new r(+e);case hRe:return rRe(e,n);case gRe:case vRe:case yRe:case bRe:case wRe:case ORe:case xRe:case _Re:case SRe:return iRe(e,n);case sRe:return new r;case uRe:case fRe:return new r(e);case cRe:return nRe(e);case pRe:return new r;case dRe:return oRe(e)}}Hfe.exports=jRe});var $fe=Ie((vWt,Ufe)=>{var IRe=W1(),qfe=Object.create,PRe=function(){function e(){}return function(t){if(!IRe(t))return{};if(qfe)return qfe(t);e.prototype=t;var n=new e;return e.prototype=void 0,n}}();Ufe.exports=PRe});var Gfe=Ie((yWt,Jfe)=>{var kRe=$fe(),ERe=zk(),CRe=bk();function ARe(e){return typeof e.constructor=="function"&&!CRe(e)?kRe(ERe(e)):{}}Jfe.exports=ARe});var Kfe=Ie((bWt,Xfe)=>{var MRe=u5(),TRe=ms(),RRe="[object Map]";function zRe(e){return TRe(e)&&MRe(e)==RRe}Xfe.exports=zRe});var ede=Ie((wWt,Zfe)=>{var LRe=Kfe(),DRe=vk(),Yfe=yk(),Qfe=Yfe&&Yfe.isMap,NRe=Qfe?DRe(Qfe):LRe;Zfe.exports=NRe});var rde=Ie((OWt,tde)=>{var FRe=u5(),WRe=ms(),BRe="[object Set]";function HRe(e){return WRe(e)&&FRe(e)==BRe}tde.exports=HRe});var ade=Ie((xWt,ide)=>{var VRe=rde(),qRe=vk(),nde=yk(),ode=nde&&nde.isSet,URe=ode?qRe(ode):VRe;ide.exports=URe});var pde=Ie((_Wt,cde)=>{var $Re=HN(),JRe=Qpe(),GRe=_F(),XRe=ife(),KRe=ffe(),YRe=vfe(),QRe=bfe(),ZRe=Ofe(),eze=jfe(),tze=tF(),rze=jF(),nze=u5(),oze=kfe(),ize=Vfe(),aze=Gfe(),lze=tu(),sze=gk(),uze=ede(),cze=W1(),pze=ade(),fze=wk(),dze=Rk(),mze=1,hze=2,gze=4,lde="[object Arguments]",vze="[object Array]",yze="[object Boolean]",bze="[object Date]",wze="[object Error]",sde="[object Function]",Oze="[object GeneratorFunction]",xze="[object Map]",_ze="[object Number]",ude="[object Object]",Sze="[object RegExp]",jze="[object Set]",Ize="[object String]",Pze="[object Symbol]",kze="[object WeakMap]",Eze="[object ArrayBuffer]",Cze="[object DataView]",Aze="[object Float32Array]",Mze="[object Float64Array]",Tze="[object Int8Array]",Rze="[object Int16Array]",zze="[object Int32Array]",Lze="[object Uint8Array]",Dze="[object Uint8ClampedArray]",Nze="[object Uint16Array]",Fze="[object Uint32Array]",eo={};eo[lde]=eo[vze]=eo[Eze]=eo[Cze]=eo[yze]=eo[bze]=eo[Aze]=eo[Mze]=eo[Tze]=eo[Rze]=eo[zze]=eo[xze]=eo[_ze]=eo[ude]=eo[Sze]=eo[jze]=eo[Ize]=eo[Pze]=eo[Lze]=eo[Dze]=eo[Nze]=eo[Fze]=!0;eo[wze]=eo[sde]=eo[kze]=!1;function Dk(e,t,n,r,o,i){var u,f=t&mze,h=t&hze,y=t&gze;if(n&&(u=o?n(e,r,o,i):n(e)),u!==void 0)return u;if(!cze(e))return e;var O=lze(e);if(O){if(u=oze(e),!f)return QRe(e,u)}else{var S=nze(e),I=S==sde||S==Oze;if(sze(e))return YRe(e,f);if(S==ude||S==lde||I&&!o){if(u=h||I?{}:aze(e),!f)return h?eze(e,KRe(u,e)):ZRe(e,XRe(u,e))}else{if(!eo[S])return o?e:{};u=ize(e,S,f)}}i||(i=new $Re);var A=i.get(e);if(A)return A;i.set(e,u),pze(e)?e.forEach(function(F){u.add(Dk(F,t,n,F,e,i))}):uze(e)&&e.forEach(function(F,R){u.set(R,Dk(F,t,n,R,e,i))});var C=y?h?rze:tze:h?dze:fze,M=O?void 0:C(e);return JRe(M||e,function(F,R){M&&(R=F,F=e[R]),GRe(u,R,Dk(F,t,n,R,e,i))}),u}cde.exports=Dk});var dde=Ie((SWt,fde)=>{function Wze(e){var t=e==null?0:e.length;return t?e[t-1]:void 0}fde.exports=Wze});var hde=Ie((jWt,mde)=>{function Bze(e,t,n){var r=-1,o=e.length;t<0&&(t=-t>o?0:o+t),n=n>o?o:n,n<0&&(n+=o),o=t>n?0:n-t>>>0,t>>>=0;for(var i=Array(o);++r{var Hze=wF(),Vze=hde();function qze(e,t){return t.length<2?e:Hze(e,Vze(t,0,-1))}gde.exports=qze});var bde=Ie((PWt,yde)=>{var Uze=Tk(),$ze=dde(),Jze=vde(),Gze=bF();function Xze(e,t){return t=Uze(t,e),e=Jze(e,t),e==null||delete e[Gze($ze(t))]}yde.exports=Xze});var xde=Ie((kWt,Ode)=>{var Kze=sc(),Yze=zk(),Qze=ms(),Zze="[object Object]",eLe=Function.prototype,tLe=Object.prototype,wde=eLe.toString,rLe=tLe.hasOwnProperty,nLe=wde.call(Object);function oLe(e){if(!Qze(e)||Kze(e)!=Zze)return!1;var t=Yze(e);if(t===null)return!0;var n=rLe.call(t,"constructor")&&t.constructor;return typeof n=="function"&&n instanceof n&&wde.call(n)==nLe}Ode.exports=oLe});var Sde=Ie((EWt,_de)=>{var iLe=xde();function aLe(e){return iLe(e)?void 0:e}_de.exports=aLe});var kde=Ie((CWt,Pde)=>{var jde=F1(),lLe=GN(),sLe=tu(),Ide=jde?jde.isConcatSpreadable:void 0;function uLe(e){return sLe(e)||lLe(e)||!!(Ide&&e&&e[Ide])}Pde.exports=uLe});var Ade=Ie((AWt,Cde)=>{var cLe=mk(),pLe=kde();function Ede(e,t,n,r,o){var i=-1,u=e.length;for(n||(n=pLe),o||(o=[]);++i0&&n(f)?t>1?Ede(f,t-1,n,r,o):cLe(o,f):r||(o[o.length]=f)}return o}Cde.exports=Ede});var Tde=Ie((MWt,Mde)=>{var fLe=Ade();function dLe(e){var t=e==null?0:e.length;return t?fLe(e,1):[]}Mde.exports=dLe});var zde=Ie((TWt,Rde)=>{function mLe(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}Rde.exports=mLe});var Nde=Ie((RWt,Dde)=>{var hLe=zde(),Lde=Math.max;function gLe(e,t,n){return t=Lde(t===void 0?e.length-1:t,0),function(){for(var r=arguments,o=-1,i=Lde(r.length-t,0),u=Array(i);++o{function vLe(e){return function(){return e}}Fde.exports=vLe});var Hde=Ie((LWt,Bde)=>{function yLe(e){return e}Bde.exports=yLe});var Ude=Ie((DWt,qde)=>{var bLe=Wde(),Vde=OF(),wLe=Hde(),OLe=Vde?function(e,t){return Vde(e,"toString",{configurable:!0,enumerable:!1,value:bLe(t),writable:!0})}:wLe;qde.exports=OLe});var Jde=Ie((NWt,$de)=>{var xLe=800,_Le=16,SLe=Date.now;function jLe(e){var t=0,n=0;return function(){var r=SLe(),o=_Le-(r-n);if(n=r,o>0){if(++t>=xLe)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}$de.exports=jLe});var Xde=Ie((FWt,Gde)=>{var ILe=Ude(),PLe=Jde(),kLe=PLe(ILe);Gde.exports=kLe});var Yde=Ie((WWt,Kde)=>{var ELe=Tde(),CLe=Nde(),ALe=Xde();function MLe(e){return ALe(CLe(e,void 0,ELe),e+"")}Kde.exports=MLe});var Zde=Ie((BWt,Qde)=>{var TLe=yF(),RLe=pde(),zLe=bde(),LLe=Tk(),DLe=Ev(),NLe=Sde(),FLe=Yde(),WLe=jF(),BLe=1,HLe=2,VLe=4,qLe=FLe(function(e,t){var n={};if(e==null)return n;var r=!1;t=TLe(t,function(i){return i=LLe(i,e),r||(r=i.length>1),i}),DLe(e,WLe(e),n),r&&(n=RLe(n,BLe|HLe|VLe,NLe));for(var o=t.length;o--;)zLe(n,t[o]);return n});Qde.exports=qLe});var C0e=Ie($n=>{"use strict";var Kk=60103,Yk=60106,H9=60107,V9=60108,q9=60114,U9=60109,$9=60110,J9=60112,G9=60113,nG=60120,X9=60115,K9=60116,j0e=60121,I0e=60122,P0e=60117,k0e=60129,E0e=60131;typeof Symbol=="function"&&Symbol.for&&(Ii=Symbol.for,Kk=Ii("react.element"),Yk=Ii("react.portal"),H9=Ii("react.fragment"),V9=Ii("react.strict_mode"),q9=Ii("react.profiler"),U9=Ii("react.provider"),$9=Ii("react.context"),J9=Ii("react.forward_ref"),G9=Ii("react.suspense"),nG=Ii("react.suspense_list"),X9=Ii("react.memo"),K9=Ii("react.lazy"),j0e=Ii("react.block"),I0e=Ii("react.server.block"),P0e=Ii("react.fundamental"),k0e=Ii("react.debug_trace_mode"),E0e=Ii("react.legacy_hidden"));var Ii;function ru(e){if(typeof e=="object"&&e!==null){var t=e.$$typeof;switch(t){case Kk:switch(e=e.type,e){case H9:case q9:case V9:case G9:case nG:return e;default:switch(e=e&&e.$$typeof,e){case $9:case J9:case K9:case X9:case U9:return e;default:return t}}case Yk:return t}}}var j4t=U9,I4t=Kk,P4t=J9,k4t=H9,E4t=K9,C4t=X9,A4t=Yk,M4t=q9,T4t=V9,R4t=G9;$n.ContextConsumer=$9;$n.ContextProvider=j4t;$n.Element=I4t;$n.ForwardRef=P4t;$n.Fragment=k4t;$n.Lazy=E4t;$n.Memo=C4t;$n.Portal=A4t;$n.Profiler=M4t;$n.StrictMode=T4t;$n.Suspense=R4t;$n.isAsyncMode=function(){return!1};$n.isConcurrentMode=function(){return!1};$n.isContextConsumer=function(e){return ru(e)===$9};$n.isContextProvider=function(e){return ru(e)===U9};$n.isElement=function(e){return typeof e=="object"&&e!==null&&e.$$typeof===Kk};$n.isForwardRef=function(e){return ru(e)===J9};$n.isFragment=function(e){return ru(e)===H9};$n.isLazy=function(e){return ru(e)===K9};$n.isMemo=function(e){return ru(e)===X9};$n.isPortal=function(e){return ru(e)===Yk};$n.isProfiler=function(e){return ru(e)===q9};$n.isStrictMode=function(e){return ru(e)===V9};$n.isSuspense=function(e){return ru(e)===G9};$n.isValidElementType=function(e){return typeof e=="string"||typeof e=="function"||e===H9||e===q9||e===k0e||e===V9||e===G9||e===nG||e===E0e||typeof e=="object"&&e!==null&&(e.$$typeof===K9||e.$$typeof===X9||e.$$typeof===U9||e.$$typeof===$9||e.$$typeof===J9||e.$$typeof===P0e||e.$$typeof===j0e||e[0]===I0e)};$n.typeOf=ru});var M0e=Ie((Cir,A0e)=>{"use strict";A0e.exports=C0e()});var U0e=Ie((sar,q0e)=>{"use strict";q0e.exports=function(t,n){if(n=n.split(":")[0],t=+t,!t)return!1;switch(n){case"http":case"ws":return t!==80;case"https":case"wss":return t!==443;case"ftp":return t!==21;case"gopher":return t!==70;case"file":return!1}return t!==0}});var G0e=Ie(aG=>{"use strict";var Q4t=Object.prototype.hasOwnProperty,Z4t;function $0e(e){try{return decodeURIComponent(e.replace(/\+/g," "))}catch{return null}}function J0e(e){try{return encodeURIComponent(e)}catch{return null}}function e6t(e){for(var t=/([^=?#&]+)=?([^&]*)/g,n={},r;r=t.exec(e);){var o=$0e(r[1]),i=$0e(r[2]);o===null||i===null||o in n||(n[o]=i)}return n}function t6t(e,t){t=t||"";var n=[],r,o;typeof t!="string"&&(t="?");for(o in e)if(Q4t.call(e,o)){if(r=e[o],!r&&(r===null||r===Z4t||isNaN(r))&&(r=""),o=J0e(o),r=J0e(r),o===null||r===null)continue;n.push(o+"="+r)}return n.length?t+n.join("&"):""}aG.stringify=t6t;aG.parse=e6t});var r1e=Ie((car,t1e)=>{"use strict";var K0e=U0e(),eE=G0e(),r6t=/^[\x00-\x20\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]+/,Y0e=/[\n\r\t]/g,n6t=/^[A-Za-z][A-Za-z0-9+-.]*:\/\//,Q0e=/:\d+$/,o6t=/^([a-z][a-z0-9.+-]*:)?(\/\/)?([\\/]+)?([\S\s]*)/i,i6t=/^[a-zA-Z]:/;function sG(e){return(e||"").toString().replace(r6t,"")}var lG=[["#","hash"],["?","query"],function(t,n){return pc(n.protocol)?t.replace(/\\/g,"/"):t},["/","pathname"],["@","auth",1],[NaN,"host",void 0,1,1],[/:(\d*)$/,"port",void 0,1],[NaN,"hostname",void 0,1,1]],X0e={hash:1,query:1};function Z0e(e){var t;typeof window<"u"?t=window:typeof global<"u"?t=global:typeof self<"u"?t=self:t={};var n=t.location||{};e=e||n;var r={},o=typeof e,i;if(e.protocol==="blob:")r=new fc(unescape(e.pathname),{});else if(o==="string"){r=new fc(e,{});for(i in X0e)delete r[i]}else if(o==="object"){for(i in e)i in X0e||(r[i]=e[i]);r.slashes===void 0&&(r.slashes=n6t.test(e.href))}return r}function pc(e){return e==="file:"||e==="ftp:"||e==="http:"||e==="https:"||e==="ws:"||e==="wss:"}function e1e(e,t){e=sG(e),e=e.replace(Y0e,""),t=t||{};var n=o6t.exec(e),r=n[1]?n[1].toLowerCase():"",o=!!n[2],i=!!n[3],u=0,f;return o?i?(f=n[2]+n[3]+n[4],u=n[2].length+n[3].length):(f=n[2]+n[4],u=n[2].length):i?(f=n[3]+n[4],u=n[3].length):f=n[4],r==="file:"?u>=2&&(f=f.slice(2)):pc(r)?f=n[4]:r?o&&(f=f.slice(2)):u>=2&&pc(t.protocol)&&(f=n[4]),{protocol:r,slashes:o||pc(r),slashesCount:u,rest:f}}function a6t(e,t){if(e==="")return t;for(var n=(t||"/").split("/").slice(0,-1).concat(e.split("/")),r=n.length,o=n[r-1],i=!1,u=0;r--;)n[r]==="."?n.splice(r,1):n[r]===".."?(n.splice(r,1),u++):u&&(r===0&&(i=!0),n.splice(r,1),u--);return i&&n.unshift(""),(o==="."||o==="..")&&n.push(""),n.join("/")}function fc(e,t,n){if(e=sG(e),e=e.replace(Y0e,""),!(this instanceof fc))return new fc(e,t,n);var r,o,i,u,f,h,y=lG.slice(),O=typeof t,S=this,I=0;for(O!=="object"&&O!=="string"&&(n=t,t=null),n&&typeof n!="function"&&(n=eE.parse),t=Z0e(t),o=e1e(e||"",t),r=!o.protocol&&!o.slashes,S.slashes=o.slashes||r&&t.slashes,S.protocol=o.protocol||t.protocol||"",e=o.rest,(o.protocol==="file:"&&(o.slashesCount!==2||i6t.test(e))||!o.slashes&&(o.protocol||o.slashesCount<2||!pc(S.protocol)))&&(y[3]=[/(.*)/,"pathname"]);I{"use strict";Object.defineProperty(PK,"__esModule",{value:!0});var jK=Object.assign||function(e){for(var t=1;t=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}function B_t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function H_t(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t&&(typeof t=="object"||typeof t=="function")?t:e}function V_t(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var rve={position:"absolute",top:0,left:0,visibility:"hidden",height:0,overflow:"scroll",whiteSpace:"pre"},q_t=["extraWidth","injectStyles","inputClassName","inputRef","inputStyle","minWidth","onAutosize","placeholderIsMinWidth"],U_t=function(t){return q_t.forEach(function(n){return delete t[n]}),t},nve=function(t,n){n.style.fontSize=t.fontSize,n.style.fontFamily=t.fontFamily,n.style.fontWeight=t.fontWeight,n.style.fontStyle=t.fontStyle,n.style.letterSpacing=t.letterSpacing,n.style.textTransform=t.textTransform},lve=typeof window<"u"&&window.navigator?/MSIE |Trident\/|Edge\//.test(window.navigator.userAgent):!1,ove=function(){return lve?"_"+Math.random().toString(36).substr(2,12):void 0},IK=function(e){V_t(t,e),tve(t,null,[{key:"getDerivedStateFromProps",value:function(r,o){var i=r.id;return i!==o.prevId?{inputId:i||ove(),prevId:i}:null}}]);function t(n){B_t(this,t);var r=H_t(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,n));return r.inputRef=function(o){r.input=o,typeof r.props.inputRef=="function"&&r.props.inputRef(o)},r.placeHolderSizerRef=function(o){r.placeHolderSizer=o},r.sizerRef=function(o){r.sizer=o},r.state={inputWidth:n.minWidth,inputId:n.id||ove(),prevId:n.id},r}return tve(t,[{key:"componentDidMount",value:function(){this.mounted=!0,this.copyInputStyles(),this.updateInputWidth()}},{key:"componentDidUpdate",value:function(r,o){o.inputWidth!==this.state.inputWidth&&typeof this.props.onAutosize=="function"&&this.props.onAutosize(this.state.inputWidth),this.updateInputWidth()}},{key:"componentWillUnmount",value:function(){this.mounted=!1}},{key:"copyInputStyles",value:function(){if(!(!this.mounted||!window.getComputedStyle)){var r=this.input&&window.getComputedStyle(this.input);r&&(nve(r,this.sizer),this.placeHolderSizer&&nve(r,this.placeHolderSizer))}}},{key:"updateInputWidth",value:function(){if(!(!this.mounted||!this.sizer||typeof this.sizer.scrollWidth>"u")){var r=void 0;this.props.placeholder&&(!this.props.value||this.props.value&&this.props.placeholderIsMinWidth)?r=Math.max(this.sizer.scrollWidth,this.placeHolderSizer.scrollWidth)+2:r=this.sizer.scrollWidth+2;var o=this.props.type==="number"&&this.props.extraWidth===void 0?16:parseInt(this.props.extraWidth)||0;r+=o,rt=>{let n=N9e.call(t);return e[n]||(e[n]=n.slice(8,-1).toLowerCase())})(Object.create(null)),nc=e=>(e=e.toLowerCase(),t=>oP(t)===e),iP=e=>t=>typeof t===e,{isArray:Vg}=Array,v3=iP("undefined");function F9e(e){return e!==null&&!v3(e)&&e.constructor!==null&&!v3(e.constructor)&&us(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}var die=nc("ArrayBuffer");function W9e(e){let t;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?t=ArrayBuffer.isView(e):t=e&&e.buffer&&die(e.buffer),t}var B9e=iP("string"),us=iP("function"),mie=iP("number"),aP=e=>e!==null&&typeof e=="object",H9e=e=>e===!0||e===!1,nP=e=>{if(oP(e)!=="object")return!1;let t=jD(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(Symbol.toStringTag in e)&&!(Symbol.iterator in e)},V9e=nc("Date"),q9e=nc("File"),U9e=nc("Blob"),$9e=nc("FileList"),J9e=e=>aP(e)&&us(e.pipe),G9e=e=>{let t;return e&&(typeof FormData=="function"&&e instanceof FormData||us(e.append)&&((t=oP(e))==="formdata"||t==="object"&&us(e.toString)&&e.toString()==="[object FormData]"))},X9e=nc("URLSearchParams"),K9e=e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function y3(e,t,{allOwnKeys:n=!1}={}){if(e===null||typeof e>"u")return;let r,o;if(typeof e!="object"&&(e=[e]),Vg(e))for(r=0,o=e.length;r0;)if(o=n[r],t===o.toLowerCase())return o;return null}var gie=(()=>typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global)(),vie=e=>!v3(e)&&e!==gie;function SD(){let{caseless:e}=vie(this)&&this||{},t={},n=(r,o)=>{let i=e&&hie(t,o)||o;nP(t[i])&&nP(r)?t[i]=SD(t[i],r):nP(r)?t[i]=SD({},r):Vg(r)?t[i]=r.slice():t[i]=r};for(let r=0,o=arguments.length;r(y3(t,(o,i)=>{n&&us(o)?e[i]=g3(o,n):e[i]=o},{allOwnKeys:r}),e),Q9e=e=>(e.charCodeAt(0)===65279&&(e=e.slice(1)),e),Z9e=(e,t,n,r)=>{e.prototype=Object.create(t.prototype,r),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:t.prototype}),n&&Object.assign(e.prototype,n)},e_e=(e,t,n,r)=>{let o,i,u,f={};if(t=t||{},e==null)return t;do{for(o=Object.getOwnPropertyNames(e),i=o.length;i-- >0;)u=o[i],(!r||r(u,e,t))&&!f[u]&&(t[u]=e[u],f[u]=!0);e=n!==!1&&jD(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},t_e=(e,t,n)=>{e=String(e),(n===void 0||n>e.length)&&(n=e.length),n-=t.length;let r=e.indexOf(t,n);return r!==-1&&r===n},r_e=e=>{if(!e)return null;if(Vg(e))return e;let t=e.length;if(!mie(t))return null;let n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},n_e=(e=>t=>e&&t instanceof e)(typeof Uint8Array<"u"&&jD(Uint8Array)),o_e=(e,t)=>{let r=(e&&e[Symbol.iterator]).call(e),o;for(;(o=r.next())&&!o.done;){let i=o.value;t.call(e,i[0],i[1])}},i_e=(e,t)=>{let n,r=[];for(;(n=e.exec(t))!==null;)r.push(n);return r},a_e=nc("HTMLFormElement"),l_e=e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(n,r,o){return r.toUpperCase()+o}),pie=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),s_e=nc("RegExp"),yie=(e,t)=>{let n=Object.getOwnPropertyDescriptors(e),r={};y3(n,(o,i)=>{let u;(u=t(o,i,e))!==!1&&(r[i]=u||o)}),Object.defineProperties(e,r)},u_e=e=>{yie(e,(t,n)=>{if(us(e)&&["arguments","caller","callee"].indexOf(n)!==-1)return!1;let r=e[n];if(us(r)){if(t.enumerable=!1,"writable"in t){t.writable=!1;return}t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")})}})},c_e=(e,t)=>{let n={},r=o=>{o.forEach(i=>{n[i]=!0})};return Vg(e)?r(e):r(String(e).split(t)),n},p_e=()=>{},f_e=(e,t)=>(e=+e,Number.isFinite(e)?e:t),_D="abcdefghijklmnopqrstuvwxyz",fie="0123456789",bie={DIGIT:fie,ALPHA:_D,ALPHA_DIGIT:_D+_D.toUpperCase()+fie},d_e=(e=16,t=bie.ALPHA_DIGIT)=>{let n="",{length:r}=t;for(;e--;)n+=t[Math.random()*r|0];return n};function m_e(e){return!!(e&&us(e.append)&&e[Symbol.toStringTag]==="FormData"&&e[Symbol.iterator])}var h_e=e=>{let t=new Array(10),n=(r,o)=>{if(aP(r)){if(t.indexOf(r)>=0)return;if(!("toJSON"in r)){t[o]=r;let i=Vg(r)?[]:{};return y3(r,(u,f)=>{let h=n(u,o+1);!v3(h)&&(i[f]=h)}),t[o]=void 0,i}}return r};return n(e,0)},g_e=nc("AsyncFunction"),v_e=e=>e&&(aP(e)||us(e))&&us(e.then)&&us(e.catch),qe={isArray:Vg,isArrayBuffer:die,isBuffer:F9e,isFormData:G9e,isArrayBufferView:W9e,isString:B9e,isNumber:mie,isBoolean:H9e,isObject:aP,isPlainObject:nP,isUndefined:v3,isDate:V9e,isFile:q9e,isBlob:U9e,isRegExp:s_e,isFunction:us,isStream:J9e,isURLSearchParams:X9e,isTypedArray:n_e,isFileList:$9e,forEach:y3,merge:SD,extend:Y9e,trim:K9e,stripBOM:Q9e,inherits:Z9e,toFlatObject:e_e,kindOf:oP,kindOfTest:nc,endsWith:t_e,toArray:r_e,forEachEntry:o_e,matchAll:i_e,isHTMLForm:a_e,hasOwnProperty:pie,hasOwnProp:pie,reduceDescriptors:yie,freezeMethods:u_e,toObjectSet:c_e,toCamelCase:l_e,noop:p_e,toFiniteNumber:f_e,findKey:hie,global:gie,isContextDefined:vie,ALPHABET:bie,generateString:d_e,isSpecCompliantForm:m_e,toJSONObject:h_e,isAsyncFn:g_e,isThenable:v_e};function qg(e,t,n,r,o){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack,this.message=e,this.name="AxiosError",t&&(this.code=t),n&&(this.config=n),r&&(this.request=r),o&&(this.response=o)}qe.inherits(qg,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:qe.toJSONObject(this.config),code:this.code,status:this.response&&this.response.status?this.response.status:null}}});var wie=qg.prototype,Oie={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(e=>{Oie[e]={value:e}});Object.defineProperties(qg,Oie);Object.defineProperty(wie,"isAxiosError",{value:!0});qg.from=(e,t,n,r,o,i)=>{let u=Object.create(wie);return qe.toFlatObject(e,u,function(h){return h!==Error.prototype},f=>f!=="isAxiosError"),qg.call(u,e.message,t,n,r,o),u.cause=e,u.name=e.name,i&&Object.assign(u,i),u};var Qr=qg;var lP=null;function ID(e){return qe.isPlainObject(e)||qe.isArray(e)}function _ie(e){return qe.endsWith(e,"[]")?e.slice(0,-2):e}function xie(e,t,n){return e?e.concat(t).map(function(o,i){return o=_ie(o),!n&&i?"["+o+"]":o}).join(n?".":""):t}function y_e(e){return qe.isArray(e)&&!e.some(ID)}var b_e=qe.toFlatObject(qe,{},null,function(t){return/^is[A-Z]/.test(t)});function w_e(e,t,n){if(!qe.isObject(e))throw new TypeError("target must be an object");t=t||new(lP||FormData),n=qe.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,function(M,F){return!qe.isUndefined(F[M])});let r=n.metaTokens,o=n.visitor||O,i=n.dots,u=n.indexes,h=(n.Blob||typeof Blob<"u"&&Blob)&&qe.isSpecCompliantForm(t);if(!qe.isFunction(o))throw new TypeError("visitor must be a function");function y(C){if(C===null)return"";if(qe.isDate(C))return C.toISOString();if(!h&&qe.isBlob(C))throw new Qr("Blob is not supported. Use a Buffer instead.");return qe.isArrayBuffer(C)||qe.isTypedArray(C)?h&&typeof Blob=="function"?new Blob([C]):Buffer.from(C):C}function O(C,M,F){let R=C;if(C&&!F&&typeof C=="object"){if(qe.endsWith(M,"{}"))M=r?M:M.slice(0,-2),C=JSON.stringify(C);else if(qe.isArray(C)&&y_e(C)||(qe.isFileList(C)||qe.endsWith(M,"[]"))&&(R=qe.toArray(C)))return M=_ie(M),R.forEach(function(Y,X){!(qe.isUndefined(Y)||Y===null)&&t.append(u===!0?xie([M],X,i):u===null?M:M+"[]",y(Y))}),!1}return ID(C)?!0:(t.append(xie(F,M,i),y(C)),!1)}let S=[],I=Object.assign(b_e,{defaultVisitor:O,convertValue:y,isVisitable:ID});function A(C,M){if(!qe.isUndefined(C)){if(S.indexOf(C)!==-1)throw Error("Circular reference detected in "+M.join("."));S.push(C),qe.forEach(C,function(R,B){(!(qe.isUndefined(R)||R===null)&&o.call(t,R,qe.isString(B)?B.trim():B,M,I))===!0&&A(R,M?M.concat(B):[B])}),S.pop()}}if(!qe.isObject(e))throw new TypeError("data must be an object");return A(e),t}var md=w_e;function Sie(e){let t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,function(r){return t[r]})}function jie(e,t){this._pairs=[],e&&md(e,this,t)}var Iie=jie.prototype;Iie.append=function(t,n){this._pairs.push([t,n])};Iie.toString=function(t){let n=t?function(r){return t.call(this,r,Sie)}:Sie;return this._pairs.map(function(o){return n(o[0])+"="+n(o[1])},"").join("&")};var sP=jie;function O_e(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function b3(e,t,n){if(!t)return e;let r=n&&n.encode||O_e,o=n&&n.serialize,i;if(o?i=o(t,n):i=qe.isURLSearchParams(t)?t.toString():new sP(t,n).toString(r),i){let u=e.indexOf("#");u!==-1&&(e=e.slice(0,u)),e+=(e.indexOf("?")===-1?"?":"&")+i}return e}var PD=class{constructor(){this.handlers=[]}use(t,n,r){return this.handlers.push({fulfilled:t,rejected:n,synchronous:r?r.synchronous:!1,runWhen:r?r.runWhen:null}),this.handlers.length-1}eject(t){this.handlers[t]&&(this.handlers[t]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(t){qe.forEach(this.handlers,function(r){r!==null&&t(r)})}},kD=PD;var uP={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1};var Pie=typeof URLSearchParams<"u"?URLSearchParams:sP;var kie=typeof FormData<"u"?FormData:null;var Eie=typeof Blob<"u"?Blob:null;var Cie={isBrowser:!0,classes:{URLSearchParams:Pie,FormData:kie,Blob:Eie},protocols:["http","https","file","blob","url","data"]};var ED={};$(ED,{hasBrowserEnv:()=>Aie,hasStandardBrowserEnv:()=>x_e,hasStandardBrowserWebWorkerEnv:()=>__e});var Aie=typeof window<"u"&&typeof document<"u",x_e=(e=>Aie&&["ReactNative","NativeScript","NS"].indexOf(e)<0)(typeof navigator<"u"&&navigator.product),__e=(()=>typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function")();var Ea={...ED,...Cie};function CD(e,t){return md(e,new Ea.classes.URLSearchParams,Object.assign({visitor:function(n,r,o,i){return Ea.isNode&&qe.isBuffer(n)?(this.append(r,n.toString("base64")),!1):i.defaultVisitor.apply(this,arguments)}},t))}function S_e(e){return qe.matchAll(/\w+|\[(\w*)]/g,e).map(t=>t[0]==="[]"?"":t[1]||t[0])}function j_e(e){let t={},n=Object.keys(e),r,o=n.length,i;for(r=0;r=n.length;return u=!u&&qe.isArray(o)?o.length:u,h?(qe.hasOwnProp(o,u)?o[u]=[o[u],r]:o[u]=r,!f):((!o[u]||!qe.isObject(o[u]))&&(o[u]=[]),t(n,r,o[u],i)&&qe.isArray(o[u])&&(o[u]=j_e(o[u])),!f)}if(qe.isFormData(e)&&qe.isFunction(e.entries)){let n={};return qe.forEachEntry(e,(r,o)=>{t(S_e(r),o,n,0)}),n}return null}var cP=I_e;function P_e(e,t,n){if(qe.isString(e))try{return(t||JSON.parse)(e),qe.trim(e)}catch(r){if(r.name!=="SyntaxError")throw r}return(n||JSON.stringify)(e)}var AD={transitional:uP,adapter:["xhr","http"],transformRequest:[function(t,n){let r=n.getContentType()||"",o=r.indexOf("application/json")>-1,i=qe.isObject(t);if(i&&qe.isHTMLForm(t)&&(t=new FormData(t)),qe.isFormData(t))return o?JSON.stringify(cP(t)):t;if(qe.isArrayBuffer(t)||qe.isBuffer(t)||qe.isStream(t)||qe.isFile(t)||qe.isBlob(t))return t;if(qe.isArrayBufferView(t))return t.buffer;if(qe.isURLSearchParams(t))return n.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),t.toString();let f;if(i){if(r.indexOf("application/x-www-form-urlencoded")>-1)return CD(t,this.formSerializer).toString();if((f=qe.isFileList(t))||r.indexOf("multipart/form-data")>-1){let h=this.env&&this.env.FormData;return md(f?{"files[]":t}:t,h&&new h,this.formSerializer)}}return i||o?(n.setContentType("application/json",!1),P_e(t)):t}],transformResponse:[function(t){let n=this.transitional||AD.transitional,r=n&&n.forcedJSONParsing,o=this.responseType==="json";if(t&&qe.isString(t)&&(r&&!this.responseType||o)){let u=!(n&&n.silentJSONParsing)&&o;try{return JSON.parse(t)}catch(f){if(u)throw f.name==="SyntaxError"?Qr.from(f,Qr.ERR_BAD_RESPONSE,this,null,this.response):f}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:Ea.classes.FormData,Blob:Ea.classes.Blob},validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};qe.forEach(["delete","get","head","post","put","patch"],e=>{AD.headers[e]={}});var Ug=AD;var k_e=qe.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),Mie=e=>{let t={},n,r,o;return e&&e.split(` +`).forEach(function(u){o=u.indexOf(":"),n=u.substring(0,o).trim().toLowerCase(),r=u.substring(o+1).trim(),!(!n||t[n]&&k_e[n])&&(n==="set-cookie"?t[n]?t[n].push(r):t[n]=[r]:t[n]=t[n]?t[n]+", "+r:r)}),t};var Tie=Symbol("internals");function w3(e){return e&&String(e).trim().toLowerCase()}function pP(e){return e===!1||e==null?e:qe.isArray(e)?e.map(pP):String(e)}function E_e(e){let t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g,r;for(;r=n.exec(e);)t[r[1]]=r[2];return t}var C_e=e=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim());function MD(e,t,n,r,o){if(qe.isFunction(r))return r.call(this,t,n);if(o&&(t=n),!!qe.isString(t)){if(qe.isString(r))return t.indexOf(r)!==-1;if(qe.isRegExp(r))return r.test(t)}}function A_e(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(t,n,r)=>n.toUpperCase()+r)}function M_e(e,t){let n=qe.toCamelCase(" "+t);["get","set","has"].forEach(r=>{Object.defineProperty(e,r+n,{value:function(o,i,u){return this[r].call(this,t,o,i,u)},configurable:!0})})}var $g=class{constructor(t){t&&this.set(t)}set(t,n,r){let o=this;function i(f,h,y){let O=w3(h);if(!O)throw new Error("header name must be a non-empty string");let S=qe.findKey(o,O);(!S||o[S]===void 0||y===!0||y===void 0&&o[S]!==!1)&&(o[S||h]=pP(f))}let u=(f,h)=>qe.forEach(f,(y,O)=>i(y,O,h));return qe.isPlainObject(t)||t instanceof this.constructor?u(t,n):qe.isString(t)&&(t=t.trim())&&!C_e(t)?u(Mie(t),n):t!=null&&i(n,t,r),this}get(t,n){if(t=w3(t),t){let r=qe.findKey(this,t);if(r){let o=this[r];if(!n)return o;if(n===!0)return E_e(o);if(qe.isFunction(n))return n.call(this,o,r);if(qe.isRegExp(n))return n.exec(o);throw new TypeError("parser must be boolean|regexp|function")}}}has(t,n){if(t=w3(t),t){let r=qe.findKey(this,t);return!!(r&&this[r]!==void 0&&(!n||MD(this,this[r],r,n)))}return!1}delete(t,n){let r=this,o=!1;function i(u){if(u=w3(u),u){let f=qe.findKey(r,u);f&&(!n||MD(r,r[f],f,n))&&(delete r[f],o=!0)}}return qe.isArray(t)?t.forEach(i):i(t),o}clear(t){let n=Object.keys(this),r=n.length,o=!1;for(;r--;){let i=n[r];(!t||MD(this,this[i],i,t,!0))&&(delete this[i],o=!0)}return o}normalize(t){let n=this,r={};return qe.forEach(this,(o,i)=>{let u=qe.findKey(r,i);if(u){n[u]=pP(o),delete n[i];return}let f=t?A_e(i):String(i).trim();f!==i&&delete n[i],n[f]=pP(o),r[f]=!0}),this}concat(...t){return this.constructor.concat(this,...t)}toJSON(t){let n=Object.create(null);return qe.forEach(this,(r,o)=>{r!=null&&r!==!1&&(n[o]=t&&qe.isArray(r)?r.join(", "):r)}),n}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([t,n])=>t+": "+n).join(` +`)}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(t){return t instanceof this?t:new this(t)}static concat(t,...n){let r=new this(t);return n.forEach(o=>r.set(o)),r}static accessor(t){let r=(this[Tie]=this[Tie]={accessors:{}}).accessors,o=this.prototype;function i(u){let f=w3(u);r[f]||(M_e(o,u),r[f]=!0)}return qe.isArray(t)?t.forEach(i):i(t),this}};$g.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);qe.reduceDescriptors($g.prototype,({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(r){this[n]=r}}});qe.freezeMethods($g);var Ca=$g;function O3(e,t){let n=this||Ug,r=t||n,o=Ca.from(r.headers),i=r.data;return qe.forEach(e,function(f){i=f.call(n,i,o.normalize(),t?t.status:void 0)}),o.normalize(),i}function x3(e){return!!(e&&e.__CANCEL__)}function Rie(e,t,n){Qr.call(this,e??"canceled",Qr.ERR_CANCELED,t,n),this.name="CanceledError"}qe.inherits(Rie,Qr,{__CANCEL__:!0});var hd=Rie;function TD(e,t,n){let r=n.config.validateStatus;!n.status||!r||r(n.status)?e(n):t(new Qr("Request failed with status code "+n.status,[Qr.ERR_BAD_REQUEST,Qr.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n))}var zie=Ea.hasStandardBrowserEnv?{write(e,t,n,r,o,i){let u=[e+"="+encodeURIComponent(t)];qe.isNumber(n)&&u.push("expires="+new Date(n).toGMTString()),qe.isString(r)&&u.push("path="+r),qe.isString(o)&&u.push("domain="+o),i===!0&&u.push("secure"),document.cookie=u.join("; ")},read(e){let t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove(e){this.write(e,"",Date.now()-864e5)}}:{write(){},read(){return null},remove(){}};function RD(e){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)}function zD(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}function _3(e,t){return e&&!RD(t)?zD(e,t):t}var Lie=Ea.hasStandardBrowserEnv?function(){let t=/(msie|trident)/i.test(navigator.userAgent),n=document.createElement("a"),r;function o(i){let u=i;return t&&(n.setAttribute("href",u),u=n.href),n.setAttribute("href",u),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,""):"",host:n.host,search:n.search?n.search.replace(/^\?/,""):"",hash:n.hash?n.hash.replace(/^#/,""):"",hostname:n.hostname,port:n.port,pathname:n.pathname.charAt(0)==="/"?n.pathname:"/"+n.pathname}}return r=o(window.location.href),function(u){let f=qe.isString(u)?o(u):u;return f.protocol===r.protocol&&f.host===r.host}}():function(){return function(){return!0}}();function LD(e){let t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}function T_e(e,t){e=e||10;let n=new Array(e),r=new Array(e),o=0,i=0,u;return t=t!==void 0?t:1e3,function(h){let y=Date.now(),O=r[i];u||(u=y),n[o]=h,r[o]=y;let S=i,I=0;for(;S!==o;)I+=n[S++],S=S%e;if(o=(o+1)%e,o===i&&(i=(i+1)%e),y-u{let i=o.loaded,u=o.lengthComputable?o.total:void 0,f=i-n,h=r(f),y=i<=u;n=i;let O={loaded:i,total:u,progress:u?i/u:void 0,bytes:f,rate:h||void 0,estimated:h&&u&&y?(u-i)/h:void 0,event:o};O[t?"download":"upload"]=!0,e(O)}}var R_e=typeof XMLHttpRequest<"u",Fie=R_e&&function(e){return new Promise(function(n,r){let o=e.data,i=Ca.from(e.headers).normalize(),{responseType:u,withXSRFToken:f}=e,h;function y(){e.cancelToken&&e.cancelToken.unsubscribe(h),e.signal&&e.signal.removeEventListener("abort",h)}let O;if(qe.isFormData(o)){if(Ea.hasStandardBrowserEnv||Ea.hasStandardBrowserWebWorkerEnv)i.setContentType(!1);else if((O=i.getContentType())!==!1){let[M,...F]=O?O.split(";").map(R=>R.trim()).filter(Boolean):[];i.setContentType([M||"multipart/form-data",...F].join("; "))}}let S=new XMLHttpRequest;if(e.auth){let M=e.auth.username||"",F=e.auth.password?unescape(encodeURIComponent(e.auth.password)):"";i.set("Authorization","Basic "+btoa(M+":"+F))}let I=_3(e.baseURL,e.url);S.open(e.method.toUpperCase(),b3(I,e.params,e.paramsSerializer),!0),S.timeout=e.timeout;function A(){if(!S)return;let M=Ca.from("getAllResponseHeaders"in S&&S.getAllResponseHeaders()),R={data:!u||u==="text"||u==="json"?S.responseText:S.response,status:S.status,statusText:S.statusText,headers:M,config:e,request:S};TD(function(Y){n(Y),y()},function(Y){r(Y),y()},R),S=null}if("onloadend"in S?S.onloadend=A:S.onreadystatechange=function(){!S||S.readyState!==4||S.status===0&&!(S.responseURL&&S.responseURL.indexOf("file:")===0)||setTimeout(A)},S.onabort=function(){S&&(r(new Qr("Request aborted",Qr.ECONNABORTED,e,S)),S=null)},S.onerror=function(){r(new Qr("Network Error",Qr.ERR_NETWORK,e,S)),S=null},S.ontimeout=function(){let F=e.timeout?"timeout of "+e.timeout+"ms exceeded":"timeout exceeded",R=e.transitional||uP;e.timeoutErrorMessage&&(F=e.timeoutErrorMessage),r(new Qr(F,R.clarifyTimeoutError?Qr.ETIMEDOUT:Qr.ECONNABORTED,e,S)),S=null},Ea.hasStandardBrowserEnv&&(f&&qe.isFunction(f)&&(f=f(e)),f||f!==!1&&Lie(I))){let M=e.xsrfHeaderName&&e.xsrfCookieName&&zie.read(e.xsrfCookieName);M&&i.set(e.xsrfHeaderName,M)}o===void 0&&i.setContentType(null),"setRequestHeader"in S&&qe.forEach(i.toJSON(),function(F,R){S.setRequestHeader(R,F)}),qe.isUndefined(e.withCredentials)||(S.withCredentials=!!e.withCredentials),u&&u!=="json"&&(S.responseType=e.responseType),typeof e.onDownloadProgress=="function"&&S.addEventListener("progress",Nie(e.onDownloadProgress,!0)),typeof e.onUploadProgress=="function"&&S.upload&&S.upload.addEventListener("progress",Nie(e.onUploadProgress)),(e.cancelToken||e.signal)&&(h=M=>{S&&(r(!M||M.type?new hd(null,e,S):M),S.abort(),S=null)},e.cancelToken&&e.cancelToken.subscribe(h),e.signal&&(e.signal.aborted?h():e.signal.addEventListener("abort",h)));let C=LD(I);if(C&&Ea.protocols.indexOf(C)===-1){r(new Qr("Unsupported protocol "+C+":",Qr.ERR_BAD_REQUEST,e));return}S.send(o||null)})};var DD={http:lP,xhr:Fie};qe.forEach(DD,(e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch{}Object.defineProperty(e,"adapterName",{value:t})}});var Wie=e=>`- ${e}`,z_e=e=>qe.isFunction(e)||e===null||e===!1,fP={getAdapter:e=>{e=qe.isArray(e)?e:[e];let{length:t}=e,n,r,o={};for(let i=0;i`adapter ${f} `+(h===!1?"is not supported by the environment":"is not available in the build")),u=t?i.length>1?`since : +`+i.map(Wie).join(` +`):" "+Wie(i[0]):"as no adapter specified";throw new Qr("There is no suitable adapter to dispatch the request "+u,"ERR_NOT_SUPPORT")}return r},adapters:DD};function ND(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new hd(null,e)}function dP(e){return ND(e),e.headers=Ca.from(e.headers),e.data=O3.call(e,e.transformRequest),["post","put","patch"].indexOf(e.method)!==-1&&e.headers.setContentType("application/x-www-form-urlencoded",!1),fP.getAdapter(e.adapter||Ug.adapter)(e).then(function(r){return ND(e),r.data=O3.call(e,e.transformResponse,r),r.headers=Ca.from(r.headers),r},function(r){return x3(r)||(ND(e),r&&r.response&&(r.response.data=O3.call(e,e.transformResponse,r.response),r.response.headers=Ca.from(r.response.headers))),Promise.reject(r)})}var Bie=e=>e instanceof Ca?{...e}:e;function vp(e,t){t=t||{};let n={};function r(y,O,S){return qe.isPlainObject(y)&&qe.isPlainObject(O)?qe.merge.call({caseless:S},y,O):qe.isPlainObject(O)?qe.merge({},O):qe.isArray(O)?O.slice():O}function o(y,O,S){if(qe.isUndefined(O)){if(!qe.isUndefined(y))return r(void 0,y,S)}else return r(y,O,S)}function i(y,O){if(!qe.isUndefined(O))return r(void 0,O)}function u(y,O){if(qe.isUndefined(O)){if(!qe.isUndefined(y))return r(void 0,y)}else return r(void 0,O)}function f(y,O,S){if(S in t)return r(y,O);if(S in e)return r(void 0,y)}let h={url:i,method:i,data:i,baseURL:u,transformRequest:u,transformResponse:u,paramsSerializer:u,timeout:u,timeoutMessage:u,withCredentials:u,withXSRFToken:u,adapter:u,responseType:u,xsrfCookieName:u,xsrfHeaderName:u,onUploadProgress:u,onDownloadProgress:u,decompress:u,maxContentLength:u,maxBodyLength:u,beforeRedirect:u,transport:u,httpAgent:u,httpsAgent:u,cancelToken:u,socketPath:u,responseEncoding:u,validateStatus:f,headers:(y,O)=>o(Bie(y),Bie(O),!0)};return qe.forEach(Object.keys(Object.assign({},e,t)),function(O){let S=h[O]||o,I=S(e[O],t[O],O);qe.isUndefined(I)&&S!==f||(n[O]=I)}),n}var mP="1.6.8";var FD={};["object","boolean","number","function","string","symbol"].forEach((e,t)=>{FD[e]=function(r){return typeof r===e||"a"+(t<1?"n ":" ")+e}});var Hie={};FD.transitional=function(t,n,r){function o(i,u){return"[Axios v"+mP+"] Transitional option '"+i+"'"+u+(r?". "+r:"")}return(i,u,f)=>{if(t===!1)throw new Qr(o(u," has been removed"+(n?" in "+n:"")),Qr.ERR_DEPRECATED);return n&&!Hie[u]&&(Hie[u]=!0,console.warn(o(u," has been deprecated since v"+n+" and will be removed in the near future"))),t?t(i,u,f):!0}};function L_e(e,t,n){if(typeof e!="object")throw new Qr("options must be an object",Qr.ERR_BAD_OPTION_VALUE);let r=Object.keys(e),o=r.length;for(;o-- >0;){let i=r[o],u=t[i];if(u){let f=e[i],h=f===void 0||u(f,i,e);if(h!==!0)throw new Qr("option "+i+" must be "+h,Qr.ERR_BAD_OPTION_VALUE);continue}if(n!==!0)throw new Qr("Unknown option "+i,Qr.ERR_BAD_OPTION)}}var hP={assertOptions:L_e,validators:FD};var gd=hP.validators,Jg=class{constructor(t){this.defaults=t,this.interceptors={request:new kD,response:new kD}}async request(t,n){try{return await this._request(t,n)}catch(r){if(r instanceof Error){let o;Error.captureStackTrace?Error.captureStackTrace(o={}):o=new Error;let i=o.stack?o.stack.replace(/^.+\n/,""):"";r.stack?i&&!String(r.stack).endsWith(i.replace(/^.+\n.+\n/,""))&&(r.stack+=` +`+i):r.stack=i}throw r}}_request(t,n){typeof t=="string"?(n=n||{},n.url=t):n=t||{},n=vp(this.defaults,n);let{transitional:r,paramsSerializer:o,headers:i}=n;r!==void 0&&hP.assertOptions(r,{silentJSONParsing:gd.transitional(gd.boolean),forcedJSONParsing:gd.transitional(gd.boolean),clarifyTimeoutError:gd.transitional(gd.boolean)},!1),o!=null&&(qe.isFunction(o)?n.paramsSerializer={serialize:o}:hP.assertOptions(o,{encode:gd.function,serialize:gd.function},!0)),n.method=(n.method||this.defaults.method||"get").toLowerCase();let u=i&&qe.merge(i.common,i[n.method]);i&&qe.forEach(["delete","get","head","post","put","patch","common"],C=>{delete i[C]}),n.headers=Ca.concat(u,i);let f=[],h=!0;this.interceptors.request.forEach(function(M){typeof M.runWhen=="function"&&M.runWhen(n)===!1||(h=h&&M.synchronous,f.unshift(M.fulfilled,M.rejected))});let y=[];this.interceptors.response.forEach(function(M){y.push(M.fulfilled,M.rejected)});let O,S=0,I;if(!h){let C=[dP.bind(this),void 0];for(C.unshift.apply(C,f),C.push.apply(C,y),I=C.length,O=Promise.resolve(n);S{if(!r._listeners)return;let i=r._listeners.length;for(;i-- >0;)r._listeners[i](o);r._listeners=null}),this.promise.then=o=>{let i,u=new Promise(f=>{r.subscribe(f),i=f}).then(o);return u.cancel=function(){r.unsubscribe(i)},u},t(function(i,u,f){r.reason||(r.reason=new hd(i,u,f),n(r.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(t){if(this.reason){t(this.reason);return}this._listeners?this._listeners.push(t):this._listeners=[t]}unsubscribe(t){if(!this._listeners)return;let n=this._listeners.indexOf(t);n!==-1&&this._listeners.splice(n,1)}static source(){let t;return{token:new e(function(o){t=o}),cancel:t}}},Vie=WD;function BD(e){return function(n){return e.apply(null,n)}}function HD(e){return qe.isObject(e)&&e.isAxiosError===!0}var VD={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(VD).forEach(([e,t])=>{VD[t]=e});var qie=VD;function Uie(e){let t=new S3(e),n=g3(S3.prototype.request,t);return qe.extend(n,S3.prototype,t,{allOwnKeys:!0}),qe.extend(n,t,null,{allOwnKeys:!0}),n.create=function(o){return Uie(vp(e,o))},n}var ei=Uie(Ug);ei.Axios=S3;ei.CanceledError=hd;ei.CancelToken=Vie;ei.isCancel=x3;ei.VERSION=mP;ei.toFormData=md;ei.AxiosError=Qr;ei.Cancel=ei.CanceledError;ei.all=function(t){return Promise.all(t)};ei.spread=BD;ei.isAxiosError=HD;ei.mergeConfig=vp;ei.AxiosHeaders=Ca;ei.formToJSON=e=>cP(qe.isHTMLForm(e)?new FormData(e):e);ei.getAdapter=fP.getAdapter;ei.HttpStatusCode=qie;ei.default=ei;var gP=ei;var{Axios:iMt,AxiosError:aMt,CanceledError:lMt,isCancel:sMt,CancelToken:uMt,VERSION:cMt,all:pMt,Cancel:fMt,isAxiosError:dMt,spread:mMt,toFormData:hMt,AxiosHeaders:gMt,HttpStatusCode:vMt,formToJSON:yMt,getAdapter:bMt,mergeConfig:wMt}=gP;function yt(e){return Array.isArray(e)?e:e?[e]:[]}var D_e=!0;function ll(e){return e!==void 0?e:D_e}function vP(e){return e==="term"?"class":e}function Ks(e){return e.charAt(0).toUpperCase()+e.slice(1)}function Gg(e){return Ks(e).split(/(?=[A-Z][a-z])/).join(" ")}function Xg(e){return Ks(e).replace("_"," ")}function $ie(e){return e.replace("/api/","").replace("/api","")}function vd(e,t,n){return"/ontologies/"+e+"/"+j3(n)+"?iri="+t}function j3(e,t){for(let n of yt(e))switch(n){case"class":case"term":return ll(t)?"terms":"classes";case"property":return"properties";case"individual":return"individuals"}}function zr(){return(Math.random()*Math.pow(2,54)).toString(36)}function yP(e){return/^#[0-9A-F]{6}$/i.test(e)}function bP(e){return/^(rgb|hsl)(a?)[(]\s*([\d.]+\s*%?)\s*,\s*([\d.]+\s*%?)\s*,\s*([\d.]+\s*%?)\s*(?:,\s*([\d.]+)\s*)?[)]$/i.test(e)}function wP(e){return["primary","subdued","success","accent","danger","warning","text","ghost"].includes(e)}function gi(e,t="information"){return e.message==="Response contains 0 elements"?"No elements found":`No ${t} available`}var Rt=class e{value;axioms;constructor(t,n){this.value=t,this.axioms=n}static fromJson(t){return t?(Array.isArray(t)||(t=[t]),t.map(n=>typeof n=="object"&&Array.isArray(n.type)&&n.type.indexOf("reification")!==-1?new e(n.value,n.axioms):new e(n,null))):[]}hasMetadata(){return this.axioms!=null}getMetadata(){if(!this.axioms)return null;let t={};for(let n of this.axioms)for(let r of Object.keys(n)){let o=n[r],i=t[r];i!==void 0?i.push(o):t[r]=[o]}return t}};var A1=class e{linkedEntities;constructor(t){t?this.linkedEntities={...t}:this.linkedEntities={}}mergeWith(t){return t?new e({...this.linkedEntities,linkedEntities:t}):new e({...this.linkedEntities})}getLabelForIri(t){let n=this.linkedEntities[t];if(n){let r=Rt.fromJson(n.label);if(r&&r.length>0)return r[0].value}}get(t){return this.linkedEntities[t]}};var M1=class{properties;constructor(t){this.properties=t}getLabel(){return this.properties.label}getId(){return this.properties.id}getIri(){return this.properties.iri}getRdfTypes(){return[]}getName(){return this.getNames()[0]}getNames(){let t=Rt.fromJson(this.properties.label);return t&&t.length>0?t.map(n=>n.value):[this.getIri()]}getDescription(){let t=Rt.fromJson(this.properties.description);return t&&t.length>0?t.map(n=>n.value||"").join(" "):""}getOntologyId(){return this.properties.ontology_name}getLabelForIri(t){let n=this.properties.linkedEntities;return n&&Rt.fromJson(n[t]?.label)[0]?.value||t}getLinkedEntities(){return new A1(this.properties.linkedEntities||{})}};var yp=class extends M1{isCanonical(){return this.properties.is_defining_ontology===!0}isDeprecated(){return this.properties["http://www.w3.org/2002/07/owl#deprecated"]==="true"}getDeprecationVersion(){return this.properties["http://www.ebi.ac.uk/efo/obsoleted_in_version"]}getDeprecationReason(){return Rt.fromJson(this.properties["http://purl.obolibrary.org/obo/IAO_0000231"]).concat(Rt.fromJson(this.properties["http://www.ebi.ac.uk/efo/reason_for_obsolescence"]))}getDeprecationReplacement(){return this.properties["http://purl.obolibrary.org/obo/IAO_0100001"]}getRelatedFrom(){return Rt.fromJson(this.properties.relatedFrom)}getDescriptionAsArray(){return Rt.fromJson(this.properties.description)}hasDirectChildren(){return this.properties.hasDirectChildren==="true"}hasHierarchicalChildren(){return this.properties.hasHierarchicalChildren==="true"}hasChildren(){return this.properties.has_children}getAncestorIris(){return yt(this.properties.ancestor)}getHierarchicalAncestorIris(){return yt(this.properties.hierarchicalAncestor)}getSynonyms(){return Rt.fromJson(this.properties.synonyms)}getAppearsIn(){return this.properties.appearsIn||[]}getCrossReferences(){return this.properties.annotation.has_dbxref||[]}getDefinedBy(){return this.properties.definedBy||[]}getIsDefiningOntology(){return this.properties.is_defining_ontology||void 0}getShortForm(){return this.properties.obo_id||this.properties.short_form}getDepictedBy(){return Rt.fromJson([...yt(this.properties["http://xmlns.com/foaf/0.1/depicted_by"]||[]),...yt(this.properties["http://xmlns.com/foaf/0.1/depiction"]||[])])}isPredicateFromInformalVocabulary(t){return t.startsWith("http://www.w3.org/2004/02/skos/core#")||t.startsWith("http://purl.org/dc/terms/")||t.startsWith("http://purl.org/dc/elements/1.1/")||t.startsWith("http://schema.org/")}getAnnotationPredicates(){return yt(Object.keys(this.properties.annotation))}getAnnotationTitleById(t){return Xg(t)}getAnnotationById(t){return Rt.fromJson(yt(this.properties.annotation[t]))}getNumHierarchicalDescendants(){return this.properties.numHierarchicalDescendants?parseInt(this.properties.numHierarchicalDescendants):0}getNumDescendants(){return this.properties.numDescendants?parseInt(this.properties.numDescendants):0}getHierarchicalParentReificationAxioms(t){let n=Rt.fromJson(this.properties.hierarchicalParent);for(let r of n)if(r.value===t)return r.getMetadata()}getTypePlural(){switch(this.getType()){case"class":return"classes";case"property":return"properties";case"individual":return"individuals";default:throw new Error("unknown type")}}};var I3=class extends yp{getType(){return"class"}getTypePlural(){return"classes"}getParents(){return Rt.fromJson(this.properties.hierarchicalParent)}getSuperEntities(){return Rt.fromJson(this.properties["http://www.w3.org/2000/01/rdf-schema#subClassOf"])}getEquivalents(){return Rt.fromJson(this.properties["http://www.w3.org/2002/07/owl#equivalentClass"])}getDisjointWith(){return yt(this.properties["http://www.w3.org/2002/07/owl#disjointWith"])}getHasKey(){return yt(this.properties["http://www.w3.org/2002/07/owl#hasKey"])}getSubsets(){return yt(this.properties.in_subset)||[]}};var P3=class extends yp{getType(){return"property"}getTypePlural(){return"properties"}getParents(){return Rt.fromJson(this.properties["http://www.w3.org/2000/01/rdf-schema#subPropertyOf"])}getSuperEntities(){return Rt.fromJson(this.properties["http://www.w3.org/2000/01/rdf-schema#subPropertyOf"])}getEquivalents(){return Rt.fromJson(this.properties["http://www.w3.org/2002/07/owl#equivalentProperty"])}getDisjointWith(){return yt(this.properties["http://www.w3.org/2002/07/owl#propertyDisjointWith"])}getInverseOf(){return yt(this.properties["http://www.w3.org/2002/07/owl#inverseOf"])}getDomain(){return yt(this.properties["http://www.w3.org/2000/01/rdf-schema#domain"])}getRange(){return yt(this.properties["http://www.w3.org/2000/01/rdf-schema#range"])}getPropertyChains(){return Rt.fromJson(this.properties["http://www.w3.org/2002/07/owl#propertyChainAxiom"])}};var k3=class extends yp{getType(){return"individual"}getTypePlural(){return"individuals"}getParents(){return Rt.fromJson(this.properties.directParent)}getEquivalents(){return[]}getSuperEntities(){return Rt.fromJson([])}getDifferentFrom(){return yt(this.properties["http://www.w3.org/2002/07/owl#differentFrom"])}getSameAs(){return yt(this.properties["http://www.w3.org/2002/07/owl#sameAs"])}getIndividualTypes(){let t=this.getRdfTypes();return!t||!Array.isArray(t)?[]:t.filter(n=>n!=="http://www.w3.org/2002/07/owl#NamedIndividual"&&(typeof n!="string"||!n.startsWith("http://www.w3.org/2000/01/rdf-schema#")))}};var E3=class extends M1{getType(){return"ontology"}getTypePlural(){return"ontologies"}getOntologyId(){return this.properties.ontologyId}getName(){let t=Rt.fromJson(this.properties.config.title||"");return t[0]&&t[0].value||this.getOntologyId()}getDescription(){let t=Rt.fromJson(this.properties.config.description||"");return t[0]&&t[0].value||""}getCreators(){return yt(this.properties.config.annotations.creator)}getSourceFileTimestamp(){return this.properties.updated}getNumEntities(){return parseInt(this.properties.numberOfEntities)}getNumClasses(){return parseInt(this.properties.numberOfTerms)}getNumProperties(){return parseInt(this.properties.numberOfProperties)}getNumIndividuals(){return parseInt(this.properties.numberOfIndividuals)}getLogoURL(){return this.properties.config.logo||void 0}getOntologyPurl(){return this.properties.config.id}getHomepage(){return this.properties.config.homepage}getMailingList(){return this.properties.config.mailingList}getTracker(){return this.properties.config.tracker}getVersionIri(){return this.properties.config.versionIri}getVersion(){return this.properties.config.version}getVersionFromIri(){let t=this.getVersionIri();if(!t)return"";let n=t.match(/\d{4}-\d{2}-\d{2}/);if(n&&n.length>0)return n[0];{let r=t.match(/\/v[d.].*\//);return r?r[0].replaceAll("/","").replace("v",""):""}}getLoaded(){return this.properties.loaded}getAnnotationPredicates(){return this.properties.config&&this.properties.config.annotations?yt(Object.keys(this.properties.config.annotations)):[]}getAnnotationTitleById(t){return Gg(t)}getAnnotationById(t){return Rt.fromJson(yt(this.properties.config.annotations[t]).filter(n=>typeof n!="string"||n!==""))}getPreferredRoots(){return yt(this.properties.hasPreferredRoot)}getLanguages(){return yt(this.properties.lang)}getImportsFrom(){return[]}getExportsTo(){return yt(this.properties.exportsTo)}getAllowDownload(){return this.properties.config.allowDownload}};var C3=class{properties;constructor(t){this.properties=t}getTotalOntologies(){return this.properties.length}getNumEntities(){return this.properties.reduce((t,n)=>t+n.getNumEntities(),0)}getNumClasses(){return this.properties.reduce((t,n)=>t+n.getNumClasses(),0)}getNumProperties(){return this.properties.reduce((t,n)=>t+n.getNumProperties(),0)}getNumIndividuals(){return this.properties.reduce((t,n)=>t+n.getNumIndividuals(),0)}};var T1=class{properties;constructor(t){this.properties=t}getLabel(){return this.properties.label}getId(){return this.properties.id}getIri(){return this.properties.iri}getType(){let t=this.properties.type;for(let n of t)if(["ontology","class","property","individual"].indexOf(n)!==-1)return n;throw new Error("unknown type")}getTypePlural(){switch(this.getType()){case"ontology":return"ontologies";case"class":return"classes";case"property":return"properties";case"individual":return"individuals";default:throw new Error("unknown type")}}getRdfTypes(){return yt(this.properties["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"])}getName(){return this.getNames()[0]}getNames(){let t=Rt.fromJson(this.properties.label);return t&&t.length>0?t.map(n=>n.value):[this.getIri()]}getDescription(){let t=Rt.fromJson(this.properties.definition);return t&&t.length>0?t.map(n=>n.value||"").join(" "):""}getOntologyId(){return this.properties.ontologyId}getLabelForIri(t){let n=this.properties.linkedEntities;return n&&Rt.fromJson(n[t]?.label)[0]?.value||t}getAnnotationById(t){return Rt.fromJson(yt(this.properties[t]))}getAnnotationTitleById(t){return this.getLabelForIri(t)}getLinkedEntities(){return new A1(this.properties.linkedEntities||{})}};var bp=class extends T1{isCanonical(){return this.properties.isDefiningOntology===!0}isDeprecated(){return this.properties["http://www.w3.org/2002/07/owl#deprecated"]==="true"}getDeprecationVersion(){return this.properties["http://www.ebi.ac.uk/efo/obsoleted_in_version"]}getDeprecationReason(){return Rt.fromJson(this.properties["http://purl.obolibrary.org/obo/IAO_0000231"]).concat(Rt.fromJson(this.properties["http://www.ebi.ac.uk/efo/reason_for_obsolescence"]))}getDeprecationReplacement(){return this.properties["http://purl.obolibrary.org/obo/IAO_0100001"]}getRelatedFrom(){return Rt.fromJson(this.properties.relatedFrom)}getDescriptionAsArray(){return Rt.fromJson(this.properties.definition)}hasDirectChildren(){return this.properties.hasDirectChildren==="true"}hasHierarchicalChildren(){return this.properties.hasHierarchicalChildren==="true"}hasChildren(){return this.hasDirectChildren()||this.hasHierarchicalChildren()}getAncestorIris(){return yt(this.properties.ancestor)}getHierarchicalAncestorIris(){return yt(this.properties.hierarchicalAncestor)}getSynonyms(){return Rt.fromJson(this.properties.synonym)}getAppearsIn(){return this.properties.appearsIn||[]}getCrossReferences(){return this.properties["http://www.geneontology.org/formats/oboInOwl#hasDbXref"]||[]}getDefinedBy(){return this.properties.definedBy||[]}getIsDefiningOntology(){return this.properties.is_defining_ontology||void 0}getShortForm(){return this.properties.curie||this.properties.shortForm}getDepictedBy(){return Rt.fromJson([...yt(this.properties["http://xmlns.com/foaf/0.1/depicted_by"]||[]),...yt(this.properties["http://xmlns.com/foaf/0.1/depiction"]||[])])}isPredicateFromInformalVocabulary(t){return t.startsWith("http://www.w3.org/2004/02/skos/core#")||t.startsWith("http://purl.org/dc/terms/")||t.startsWith("http://purl.org/dc/elements/1.1/")||t.startsWith("http://schema.org/")}getAnnotationPredicates(){let t=yt(this.properties.definitionProperty),n=yt(this.properties.synonymProperty),r=yt(this.properties.hierarchicalProperty),o=new Set;for(let i of Object.keys(this.properties))if(i.indexOf("://")!==-1&&!i.startsWith("negativePropertyAssertion+")&&i!=="http://xmlns.com/foaf/0.1/depicted_by"&&i!=="http://xmlns.com/foaf/0.1/depiction"){if(!this.isPredicateFromInformalVocabulary(i)){let u=this.getLinkedEntities().get(i);if(u!=null&&u.type.indexOf("objectProperty")!==-1||u!=null&&u.type.indexOf("dataProperty")!==-1)continue}t.indexOf(i)!==-1||n.indexOf(i)!==-1||r.indexOf(i)!==-1||(i.startsWith("http://www.w3.org/2000/01/rdf-schema#")||i.startsWith("http://www.w3.org/1999/02/22-rdf-syntax-ns#")||i.startsWith("http://www.w3.org/2002/07/owl#"))&&i!=="http://www.w3.org/2000/01/rdf-schema#comment"&&i!=="http://www.w3.org/2000/01/rdf-schema#seeAlso"&&i!=="http://www.w3.org/2002/07/owl#disjointUnionOf"||i==="http://www.geneontology.org/formats/oboInOwl#inSubset"||i==="http://www.geneontology.org/formats/oboInOwl#id"||o.add(i)}return Array.from(o)}getNumHierarchicalDescendants(){return this.properties.numHierarchicalDescendants?parseInt(this.properties.numHierarchicalDescendants):0}getNumDescendants(){return this.properties.numDescendants?parseInt(this.properties.numDescendants):0}getHierarchicalParentReificationAxioms(t){let n=Rt.fromJson(this.properties.hierarchicalParent);for(let r of n)if(r.value===t)return r.getMetadata()}getTypePlural(){switch(this.getType()){case"class":return"classes";case"property":return"properties";case"individual":return"individuals";default:throw new Error("unknown type")}}};var A3=class extends bp{getParents(){return Rt.fromJson(this.properties.hierarchicalParent)}getSuperEntities(){return Rt.fromJson(this.properties["http://www.w3.org/2000/01/rdf-schema#subClassOf"])}getEquivalents(){return Rt.fromJson(this.properties["http://www.w3.org/2002/07/owl#equivalentClass"])}getDisjointWith(){return yt(this.properties["http://www.w3.org/2002/07/owl#disjointWith"])}getHasKey(){return yt(this.properties["http://www.w3.org/2002/07/owl#hasKey"])}getSubsets(){return yt(this.properties["http://www.geneontology.org/formats/oboInOwl#inSubset"])||[]}};var M3=class extends bp{getParents(){return Rt.fromJson(this.properties["http://www.w3.org/2000/01/rdf-schema#subPropertyOf"])}getSuperEntities(){return Rt.fromJson(this.properties["http://www.w3.org/2000/01/rdf-schema#subPropertyOf"])}getEquivalents(){return Rt.fromJson(this.properties["http://www.w3.org/2002/07/owl#equivalentProperty"])}getDisjointWith(){return yt(this.properties["http://www.w3.org/2002/07/owl#propertyDisjointWith"])}getInverseOf(){return yt(this.properties["http://www.w3.org/2002/07/owl#inverseOf"])}getDomain(){return yt(this.properties["http://www.w3.org/2000/01/rdf-schema#domain"])}getRange(){return yt(this.properties["http://www.w3.org/2000/01/rdf-schema#range"])}getPropertyChains(){return Rt.fromJson(this.properties["http://www.w3.org/2002/07/owl#propertyChainAxiom"])}};var T3=class extends bp{getParents(){return Rt.fromJson(this.properties.directParent)}getEquivalents(){return[]}getSuperEntities(){return Rt.fromJson([])}getDifferentFrom(){return yt(this.properties["http://www.w3.org/2002/07/owl#differentFrom"])}getSameAs(){return yt(this.properties["http://www.w3.org/2002/07/owl#sameAs"])}getIndividualTypes(){let t=this.getRdfTypes();return!t||!Array.isArray(t)?[]:t.filter(n=>n!=="http://www.w3.org/2002/07/owl#NamedIndividual"&&(typeof n!="string"||!n.startsWith("http://www.w3.org/2000/01/rdf-schema#")))}};var R3=class extends T1{getOntologyId(){return this.properties.ontologyId}getName(){let t=Rt.fromJson(this.properties.label||this.properties.title||"");return t[0]&&t[0].value||this.getOntologyId()}getDescription(){let t=Rt.fromJson(this.properties.definition||this.properties.description||"");return t[0]&&t[0].value||""}getCreators(){return yt(this.properties["http://purl.org/dc/elements/1.1/creator"])}getSourceFileTimestamp(){return this.properties.sourceFileTimestamp}getNumEntities(){return parseInt(this.properties.numberOfEntities)}getNumClasses(){return parseInt(this.properties.numberOfClasses)}getNumProperties(){return parseInt(this.properties.numberOfProperties)}getNumIndividuals(){return parseInt(this.properties.numberOfIndividuals)}getLogoURL(){return this.properties.depicted_by||void 0}getOntologyPurl(){return this.properties.ontology_purl}getHomepage(){return this.properties.homepage}getMailingList(){return this.properties.mailing_list}getTracker(){return this.properties.tracker}getVersionIri(){return this.properties["http://www.w3.org/2002/07/owl#versionIRI"]}getVersion(){return this.properties["http://www.w3.org/2002/07/owl#versionInfo"]}getVersionFromIri(){let t=this.getVersionIri();if(!t)return"";let n=t.match(/\d{4}-\d{2}-\d{2}/);if(n&&n.length>0)return n[0];{let r=t.match(/\/v[d.].*\//);return r?r[0].replaceAll("/","").replace("v",""):""}}getLoaded(){return this.properties.loaded}getAnnotationPredicates(){let t=new Set;for(let n of Object.keys(this.properties))n.indexOf("://")!==-1&&n!=="http://purl.obolibrary.org/obo/IAO_0000700"&&(n.startsWith("http://www.w3.org/2000/01/rdf-schema#")||n.startsWith("http://www.w3.org/1999/02/22-rdf-syntax-ns#")||n.startsWith("http://www.w3.org/2002/07/owl#")||t.add(n));return Array.from(t)}getPreferredRoots(){return yt(this.properties.hasPreferredRoot)}getLanguages(){return yt(this.properties.language)}getImportsFrom(){return yt(this.properties.importsFrom)}getExportsTo(){return yt(this.properties.exportsTo)}getAllowDownload(){return this.properties.allowDownload}};var Jie=["class","term"],Gie=["property"],Xie=["individual"],OP=["ontology"],xP=[...Jie,...Xie,...Gie],qD=[...xP,...OP];function N_e(e){return Jie.includes(e)}function F_e(e){return Gie.includes(e)}function W_e(e){return Xie.includes(e)}function UD(e){return OP.includes(e)}function $D(e){return xP.includes(e)}function Kie(e){return qD.includes(e)}function R1(e){return N_e(e.getType())}function yd(e){return F_e(e.getType())}function Kg(e){return W_e(e.getType())}function cs(e){return $D(e.getType())}function Yie(e){return UD(e.getType())}function Qg(e){let t;if(e._embedded!==void 0||e.numberOfTerms!==void 0)t=!0;else if(e.elements!==void 0||e.numberOfClasses!==void 0)t=!1;else throw Error("Response structure does not correlate to any of the featured response structures: \n ${response.toString()}");let n;if(t)e._embedded===void 0?n="ontology":e._embedded.terms!==void 0?n="term":e._embedded.properties!==void 0?n="property":e._embedded.individuals!==void 0&&(n="individual");else if(e.elements===void 0)n="ontology";else{let r=e.elements[0].type;r=r.filter(o=>Kie(o)),r=[...new Set(r)],r.length===1&&(n=r[0])}if(n===void 0)throw Error("Entity type could not be correctly inferred.");return B_e(e,n,t)}function B_e(e,t,n){switch(t){case"ontology":return n?new E3(e):new R3(e);case"term":case"class":return n?new I3(Yg(yt(e._embedded.terms),n)):new A3(Yg(yt(e.elements),n));case"property":return n?new P3(Yg(yt(e._embedded.properties),n)):new M3(Yg(yt(e.elements),n));case"individual":return n?new k3(Yg(yt(e._embedded.individuals),n)):new T3(Yg(yt(e.elements),n));default:throw Error('Invalid entity type "'+t+'". Must be one of {"term", "class", "ontology", "property", "individual"}')}}function Yg(e,t){let n=yt(e).filter(r=>t?r.is_defining_ontology:r.isDefiningOntology);return n.length>0?n[0]:e[0]}var H_e=10,fn=class{axiosInstance;constructor(t){this.axiosInstance=gP.create({baseURL:t,headers:{Accept:"application/json",Content_Type:"application/json"}})}buildParamsForGet(t,n,r,o){return n?{...t,sort:`${n.sortField},${n.sortDir}`,...r,...this.buildOtherParams(o)}:{...t,...r,...this.buildOtherParams(o)}}buildPaginationParams(t){let n={rows:t?.size};return t?.page&&(t.size?n.start=(+t.page*+t.size).toString():n.start=(+t.page*H_e).toString()),n}buildParamsForSearch(t,n,r,o){let i={q:t.query,exact:t.exactMatch,obsoletes:t.showObsoleteTerms};return t.groupByIri&&(i.groupField=t.groupByIri),t.types&&(i.type=t.types),t.ontology&&(i.ontology=t.ontology),{...i,...this.buildPaginationParams(n),...r,...this.buildOtherParams(o)}}buildOtherParams(t){let n={};return t&&t.split("&").forEach(o=>{let i=o.split("=")[0],u=o.split("=")[1];n[i]=u}),n}buildParamsForSelect(t,n,r,o){return{...{q:t.query},...this.buildPaginationParams(n),...r,...this.buildOtherParams(o)}}buildParamsForSuggest(t,n,r,o){return{...{q:t.query},...this.buildPaginationParams(n),...r,...this.buildOtherParams(o)}}check_for_errors(t){if(t.error)throw Error(t.status+" "+t.error+" - "+t.message+" - "+t.exception+" at "+t.path);if(t.page!==void 0&&t.page.totalElements===0)throw Error("Response contains 0 elements");return t}async makeCall(t,n,r){let o=ll(r)?"":"v2/",i=(await this.axiosInstance.get(o+t,n)).data;return this.check_for_errors(i)}getOntologies=async(t,n,r,o)=>this.makeCall("ontologies",{params:this.buildParamsForGet(t,n,r,o)},!0);async getOntologiesData(t){let n,r=[],o=0,i=500;do{if(n=await this.getOntologies({size:i.toString(),page:o.toString()},void 0,void 0,t),!n||!n._embedded||!n._embedded.ontologies)throw new Error("Ontologies data not found");r=r.concat(n._embedded.ontologies.map(u=>Qg(u))),o+=1}while(o{let u=ll(i)?"terms":"classes";return this.makeCall(u,{params:this.buildParamsForGet(t,n,r)},ll(i))};getProperties=async(t,n,r,o,i)=>this.makeCall("properties",{params:this.buildParamsForGet(t,n,r)},ll(i));getIndividuals=async(t,n,r,o,i)=>this.makeCall("individuals",{params:this.buildParamsForGet(t,n,r)},ll(i));getOntology=async(t,n,r,o,i)=>{let u={...this.buildOtherParams(o)};return this.makeCall("ontologies/"+r?.ontologyId,u,ll(i))};getEntity=async(t,n,r,o,i)=>{let u=r?.ontologyId?"ontologies/"+r?.ontologyId+"/":"",f={iri:r?.termIri,...this.buildOtherParams(o)};return this.makeCall(u+"entities",{params:f},ll(i))};getTerm=async(t,n,r,o,i,u)=>{let f=r?.ontologyId?"ontologies/"+r?.ontologyId+"/":"",h=ll(i)?"terms":"classes",y={iri:r?.termIri,...this.buildOtherParams(o)};return this.makeCall(f+h,{params:y,signal:u},ll(i))};getProperty=async(t,n,r,o,i,u)=>{let f=r?.ontologyId?"ontologies/"+r?.ontologyId+"/":"",h={iri:r?.propertyIri,...this.buildOtherParams(o)};return this.makeCall(f+"properties",{params:h,signal:u},ll(i))};getIndividual=async(t,n,r,o,i,u)=>{let f=r?.ontologyId?"ontologies/"+r?.ontologyId+"/":"",h={iri:r?.individualIri,...this.buildOtherParams(o)};return this.makeCall(f+"individuals",{params:h,signal:u},ll(i))};search=async(t,n,r,o,i)=>this.makeCall("search",{params:this.buildParamsForSearch(t,n,r,o),signal:i},!0);select=async(t,n,r,o)=>this.makeCall("select",{params:this.buildParamsForSelect(t,n,r,o)},!0);suggest=async(t,n,r,o)=>this.makeCall("suggest",{params:this.buildParamsForSuggest(t,n,r,o)},!0);getTermTree=async(t,n,r,o)=>{let i="ontologies/"+t?.ontologyId+"/terms";return t.termIri?(i=i+"/"+encodeURIComponent(encodeURIComponent(t?.termIri))+"/jstree",n.child?(await this.axiosInstance.get(i+"/children/"+n.child)).data:(await this.axiosInstance.get(i,{params:n})).data):(await this.axiosInstance.get(i+"/roots")).data};getTermRelations=async(t,n,r)=>{let o="ontologies/"+t?.ontologyId+"/terms";if(!t.termIri)return(await this.axiosInstance.get(o+"/roots")).data;o=o+"/"+encodeURIComponent(encodeURIComponent(t?.termIri))+"/graph"};async getEntityObject(t,n,r,o,i){let u;if(!t)throw Error("No IRI provided");return n?u=await this.getEntityWithEntityTypeProvided(t,n,r,o,i):ll(i)?u=await this.getEntityWithInferredEntityType(t,r,o):u=await this.getEntity(void 0,void 0,{ontologyId:r,termIri:t},o,i),Qg(u)}async getOntologyObject(t,n,r){let o=await this.getOntology(void 0,void 0,{ontologyId:t},n,r);return Qg(o)}async getThingObject(t,n,r,o,i){if(n)if(UD(n)){if(r)return await this.getOntologyObject(r,o,i);throw new Error(`ontologyId has to be provided if thingType in {"${OP.join('", "')}"}.`)}else if($D(n)){if(t)return await this.getEntityObject(t,n,r,o,i);throw new Error(`iri has to be provided if thingType in {"${xP.join('", "')}"}.`)}else throw new Error(`Unsupported thingType "${n}" provided. Must be in {"${qD.join('", "')}"}.`);else{if(!t&&r)return await this.getOntologyObject(r,o,i);if(t)return await this.getEntityObject(t,n,r,o,i);throw new Error("iri or ontologyId has to be provided if thingType is not provided.")}}getClassInstances=async(t,n,r,o)=>{let i=r?.ontologyId?"ontologies/"+r?.ontologyId+"/":"";return this.makeCall(i+"classes/"+r?.termIri+"/instances",{params:{parameter:this.buildOtherParams(o)}},!1)};async getEntityWithEntityTypeProvided(t,n,r,o,i){switch(n){case"term":case"class":return await this.getTerm(void 0,void 0,{ontologyId:r,termIri:t},o,i);case"property":return await this.getProperty(void 0,void 0,{ontologyId:r,propertyIri:t},o,i);case"individual":return await this.getIndividual(void 0,void 0,{ontologyId:r,individualIri:t},o,i);default:throw Error('Invalid entity type "'+n+'". Must be one of {"term", "class", "property", "individual"}')}}async getEntityWithInferredEntityType(t,n,r){let o=new AbortController,i=o.signal,u;function f(h){h._embedded!==void 0&&(u=h,o.abort())}if(await Promise.allSettled([this.getTerm(void 0,void 0,{ontologyId:n,termIri:t},r,!0,i).then(h=>{f(h)}),this.getProperty(void 0,void 0,{ontologyId:n,propertyIri:t},r,!0,i).then(h=>{f(h)}),this.getIndividual(void 0,void 0,{ontologyId:n,individualIri:t},r,!0,i).then(h=>{f(h)})]),u!==void 0)return u;throw Error("Iri "+t+" could not be resolved.")}};var D1=k(L()),uv=k(mt());var Kae=k(Ct()),GP=k(mt());var Ml=k(L()),H3=k(L());function U_e(e){if(e.sheet)return e.sheet;for(var t=0;t0?Vo(iv,--Ma):0,nv--,ti===10&&(nv=1,PP--),ti}function Ta(){return ti=Ma2||ov(ti)>3?"":" "}function hae(e,t){for(;--t&&Ta()&&!(ti<48||ti>102||ti>57&&ti<65||ti>70&&ti<97););return lv(e,N3()+(t<6&&ps()==32&&Ta()==32))}function XD(e){for(;Ta();)switch(ti){case e:return Ma;case 34:case 39:e!==34&&e!==39&&XD(ti);break;case 40:e===41&&XD(e);break;case 92:Ta();break}return Ma}function gae(e,t){for(;Ta()&&e+ti!==47+10;)if(e+ti===42+42&&ps()===47)break;return"/*"+lv(t,Ma-1)+"*"+z1(e===47?e:Ta())}function vae(e){for(;!ov(ps());)Ta();return lv(e,Ma)}function wae(e){return EP(CP("",null,null,null,[""],e=kP(e),0,[0],e))}function CP(e,t,n,r,o,i,u,f,h){for(var y=0,O=0,S=u,I=0,A=0,C=0,M=1,F=1,R=1,B=0,Y="",X=o,le=i,Z=r,K=Y;F;)switch(C=B,B=Ta()){case 40:if(C!=108&&Vo(K,S-1)==58){L3(K+=dn(sv(B),"&","&\f"),"&\f")!=-1&&(R=-1);break}case 34:case 39:case 91:K+=sv(B);break;case 9:case 10:case 13:case 32:K+=mae(C);break;case 92:K+=hae(N3()-1,7);continue;case 47:switch(ps()){case 42:case 47:rv(J_e(gae(Ta(),N3()),t,n),h);break;default:K+="/"}break;case 123*M:f[y++]=Aa(K)*R;case 125*M:case 59:case 0:switch(B){case 0:case 125:F=0;case 59+O:R==-1&&(K=dn(K,/\f/g,"")),A>0&&Aa(K)-S&&rv(A>32?bae(K+";",r,n,S-1):bae(dn(K," ","")+";",r,n,S-2),h);break;case 59:K+=";";default:if(rv(Z=yae(K,t,n,y,O,o,f,Y,X=[],le=[],S),i),B===123)if(O===0)CP(K,t,Z,Z,X,i,S,f,le);else switch(I===99&&Vo(K,3)===110?100:I){case 100:case 108:case 109:case 115:CP(e,Z,Z,r&&rv(yae(e,Z,Z,0,0,o,f,Y,o,X=[],S),le),o,le,S,f,r?X:le);break;default:CP(K,Z,Z,Z,[""],le,0,f,le)}}y=O=A=0,M=R=1,Y=K="",S=u;break;case 58:S=1+Aa(K),A=C;default:if(M<1){if(B==123)--M;else if(B==125&&M++==0&&dae()==125)continue}switch(K+=z1(B),B*M){case 38:R=O>0?1:(K+="\f",-1);break;case 44:f[y++]=(Aa(K)-1)*R,R=1;break;case 64:ps()===45&&(K+=sv(Ta())),I=ps(),O=S=Aa(Y=K+=vae(N3())),B++;break;case 45:C===45&&Aa(K)==2&&(M=0)}}return i}function yae(e,t,n,r,o,i,u,f,h,y,O){for(var S=o-1,I=o===0?i:[""],A=tv(I),C=0,M=0,F=0;C0?I[R]+" "+B:dn(B,/&\f/g,I[R])))&&(h[F++]=Y);return D3(e,t,n,o===0?Zg:f,h,y,O)}function J_e(e,t,n){return D3(e,t,n,SP,z1(fae()),bd(e,2,-2),0)}function bae(e,t,n,r){return D3(e,t,n,ev,bd(e,0,r),bd(e,r+1,-1),r)}function L1(e,t){for(var n="",r=tv(e),o=0;o6)switch(Vo(e,t+1)){case 109:if(Vo(e,t+4)!==45)break;case 102:return dn(e,/(.+:)(.+)-([^]+)/,"$1"+On+"$2-$3$1"+z3+(Vo(e,t+3)==108?"$3":"$2-$3"))+e;case 115:return~L3(e,"stretch")?Iae(dn(e,"stretch","fill-available"),t)+e:e}break;case 4949:if(Vo(e,t+1)!==115)break;case 6444:switch(Vo(e,Aa(e)-3-(~L3(e,"!important")&&10))){case 107:return dn(e,":",":"+On)+e;case 101:return dn(e,/(.+:)([^;!]+)(;|!.+)?/,"$1"+On+(Vo(e,14)===45?"inline-":"")+"box$3$1"+On+"$2$3$1"+Fi+"$2box$3")+e}break;case 5936:switch(Vo(e,t+11)){case 114:return On+e+Fi+dn(e,/[svh]\w+-[tblr]{2}/,"tb")+e;case 108:return On+e+Fi+dn(e,/[svh]\w+-[tblr]{2}/,"tb-rl")+e;case 45:return On+e+Fi+dn(e,/[svh]\w+-[tblr]{2}/,"lr")+e}return On+e+Fi+e+e}return e}var Z_e=function(t,n,r,o){if(t.length>-1&&!t.return)switch(t.type){case ev:t.return=Iae(t.value,t.length);break;case jP:return L1([av(t,{value:dn(t.value,"@","@"+On)})],o);case Zg:if(t.length)return GD(t.props,function(i){switch(JD(i,/(::plac\w+|:read-\w+)/)){case":read-only":case":read-write":return L1([av(t,{props:[dn(i,/:(read-\w+)/,":"+z3+"$1")]})],o);case"::placeholder":return L1([av(t,{props:[dn(i,/:(plac\w+)/,":"+On+"input-$1")]}),av(t,{props:[dn(i,/:(plac\w+)/,":"+z3+"$1")]}),av(t,{props:[dn(i,/:(plac\w+)/,Fi+"input-$1")]})],o)}return""})}},eSe=[Z_e],KD=function(t){var n=t.key;if(n==="css"){var r=document.querySelectorAll("style[data-emotion]:not([data-s])");Array.prototype.forEach.call(r,function(M){var F=M.getAttribute("data-emotion");F.indexOf(" ")!==-1&&(document.head.appendChild(M),M.setAttribute("data-s",""))})}var o=t.stylisPlugins||eSe,i={},u,f=[];u=t.container||document.head,Array.prototype.forEach.call(document.querySelectorAll('style[data-emotion^="'+n+' "]'),function(M){for(var F=M.getAttribute("data-emotion").split(" "),R=1;R=4;++r,o-=4)n=e.charCodeAt(r)&255|(e.charCodeAt(++r)&255)<<8|(e.charCodeAt(++r)&255)<<16|(e.charCodeAt(++r)&255)<<24,n=(n&65535)*1540483477+((n>>>16)*59797<<16),n^=n>>>24,t=(n&65535)*1540483477+((n>>>16)*59797<<16)^(t&65535)*1540483477+((t>>>16)*59797<<16);switch(o){case 3:t^=(e.charCodeAt(r+2)&255)<<16;case 2:t^=(e.charCodeAt(r+1)&255)<<8;case 1:t^=e.charCodeAt(r)&255,t=(t&65535)*1540483477+((t>>>16)*59797<<16)}return t^=t>>>13,t=(t&65535)*1540483477+((t>>>16)*59797<<16),((t^t>>>15)>>>0).toString(36)}var Fae={animationIterationCount:1,aspectRatio:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1};var mSe=/[A-Z]|^ms/g,hSe=/_EMO_([^_]+?)_([^]*?)_EMO_/g,Vae=function(t){return t.charCodeAt(1)===45},Wae=function(t){return t!=null&&typeof t!="boolean"},nN=Sae(function(e){return Vae(e)?e:e.replace(mSe,"-$&").toLowerCase()}),Bae=function(t,n){switch(t){case"animation":case"animationName":if(typeof n=="string")return n.replace(hSe,function(r,o,i){return oc={name:o,styles:i,next:oc},o})}return Fae[t]!==1&&!Vae(t)&&typeof n=="number"&&n!==0?n+"px":n};function F3(e,t,n){if(n==null)return"";if(n.__emotion_styles!==void 0)return n;switch(typeof n){case"boolean":return"";case"object":{if(n.anim===1)return oc={name:n.name,styles:n.styles,next:oc},n.name;if(n.styles!==void 0){var r=n.next;if(r!==void 0)for(;r!==void 0;)oc={name:r.name,styles:r.styles,next:oc},r=r.next;var o=n.styles+";";return o}return gSe(e,t,n)}case"function":{if(e!==void 0){var i=oc,u=n(e);return oc=i,F3(e,t,u)}break}case"string":if(!1)var f,h;break}if(t==null)return n;var y=t[n];return y!==void 0?y:n}function gSe(e,t,n){var r="";if(Array.isArray(n))for(var o=0;oe.length)&&(t=e.length);for(var n=0,r=new Array(t);nsummary:first-of-type","details"],oN=_Se.join(","),Qae=typeof Element>"u",V3=Qae?function(){}:Element.prototype.matches||Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector,iN=!Qae&&Element.prototype.getRootNode?function(e){return e.getRootNode()}:function(e){return e.ownerDocument},Zae=function(t,n,r){var o=Array.prototype.slice.apply(t.querySelectorAll(oN));return n&&V3.call(t,oN)&&o.unshift(t),o=o.filter(r),o},ele=function e(t,n,r){for(var o=[],i=Array.from(t);i.length;){var u=i.shift();if(u.tagName==="SLOT"){var f=u.assignedElements(),h=f.length?f:u.children,y=e(h,!0,r);r.flatten?o.push.apply(o,y):o.push({scope:u,candidates:y})}else{var O=V3.call(u,oN);O&&r.filter(u)&&(n||!t.includes(u))&&o.push(u);var S=u.shadowRoot||typeof r.getShadowRoot=="function"&&r.getShadowRoot(u),I=!r.shadowRootFilter||r.shadowRootFilter(u);if(S&&I){var A=e(S===!0?u.children:S.children,!0,r);r.flatten?o.push.apply(o,A):o.push({scope:u,candidates:A})}else i.unshift.apply(i,u.children)}}return o},tle=function(t,n){return t.tabIndex<0&&(n||/^(AUDIO|VIDEO|DETAILS)$/.test(t.tagName)||t.isContentEditable)&&isNaN(parseInt(t.getAttribute("tabindex"),10))?0:t.tabIndex},SSe=function(t,n){return t.tabIndex===n.tabIndex?t.documentOrder-n.documentOrder:t.tabIndex-n.tabIndex},rle=function(t){return t.tagName==="INPUT"},jSe=function(t){return rle(t)&&t.type==="hidden"},ISe=function(t){var n=t.tagName==="DETAILS"&&Array.prototype.slice.apply(t.children).some(function(r){return r.tagName==="SUMMARY"});return n},kSe=function(t,n){for(var r=0;rsummary:first-of-type"),u=i?t.parentElement:t;if(V3.call(u,"details:not([open]) *"))return!0;var f=iN(t).host,h=f?.ownerDocument.contains(f)||t.ownerDocument.contains(t);if(!r||r==="full"){if(typeof o=="function"){for(var y=t;t;){var O=t.parentElement,S=iN(t);if(O&&!O.shadowRoot&&o(O)===!0)return Kae(t);t.assignedSlot?t=t.assignedSlot:!O&&S!==t.ownerDocument?t=S.host:t=O}t=y}if(h)return!t.getClientRects().length}else if(r==="non-zero-area")return Kae(t);return!1},MSe=function(t){if(/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(t.tagName))for(var n=t.parentElement;n;){if(n.tagName==="FIELDSET"&&n.disabled){for(var r=0;r=0)},RSe=function e(t){var n=[],r=[];return t.forEach(function(o,i){var u=!!o.scope,f=u?o.scope:o,h=tle(f,u),y=u?e(o.candidates):f;h===0?u?n.push.apply(n,y):n.push(f):r.push({documentOrder:i,tabIndex:h,item:o,isScope:u,content:y})}),r.sort(SSe).reduce(function(o,i){return i.isScope?o.push.apply(o,i.content):o.push(i.content),o},[]).concat(n)},Vk=function(t,n){n=n||{};var r;return n.getShadowRoot?r=ele([t],n.includeContainer,{filter:Yae.bind(null,n),flatten:!1,getShadowRoot:n.getShadowRoot,shadowRootFilter:TSe}):r=Zae(t,n.includeContainer,Yae.bind(null,n)),RSe(r)},nle=function(t,n){n=n||{};var r;return n.getShadowRoot?r=ele([t],n.includeContainer,{filter:aN.bind(null,n),flatten:!0,getShadowRoot:n.getShadowRoot}):r=Zae(t,n.includeContainer,aN.bind(null,n)),r};var On={};$(On,{ALT:()=>FSe,ARROW_DOWN:()=>cN,ARROW_LEFT:()=>fN,ARROW_RIGHT:()=>dN,ARROW_UP:()=>pN,BACKSPACE:()=>DSe,CTRL:()=>BSe,END:()=>USe,ENTER:()=>zSe,ESCAPE:()=>sN,F2:()=>NSe,HOME:()=>$Se,META:()=>HSe,PAGE_DOWN:()=>qSe,PAGE_UP:()=>VSe,SHIFT:()=>WSe,SPACE:()=>LSe,TAB:()=>uN,keys:()=>lN});var zSe="Enter",LSe=" ",sN="Escape",uN="Tab",DSe="Backspace",NSe="F2",FSe="Alt",WSe="Shift",BSe="Control",HSe="Meta",cN="ArrowDown",pN="ArrowUp",fN="ArrowLeft",dN="ArrowRight",VSe="PageUp",qSe="PageDown",USe="End",$Se="Home",lN;(function(e){e.ENTER="Enter",e.SPACE=" ",e.ESCAPE="Escape",e.TAB="Tab",e.BACKSPACE="Backspace",e.F2="F2",e.ALT="Alt",e.SHIFT="Shift",e.CTRL="Control",e.META="Meta",e.ARROW_DOWN="ArrowDown",e.ARROW_UP="ArrowUp",e.ARROW_LEFT="ArrowLeft",e.ARROW_RIGHT="ArrowRight",e.PAGE_UP="PageUp",e.PAGE_DOWN="PageDown",e.END="End",e.HOME="Home"})(lN||(lN={}));var ps={ARROW_DOWN:cN,ARROW_LEFT:fN,ARROW_RIGHT:dN,ARROW_UP:pN,ESCAPE:sN,TAB:uN};var qk,JSe=new Uint8Array(16);function mN(){if(!qk&&(qk=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||typeof msCrypto<"u"&&typeof msCrypto.getRandomValues=="function"&&msCrypto.getRandomValues.bind(msCrypto),!qk))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return qk(JSe)}var ole=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function GSe(e){return typeof e=="string"&&ole.test(e)}var ile=GSe;var Bi=[];for(Uk=0;Uk<256;++Uk)Bi.push((Uk+256).toString(16).substr(1));var Uk;function XSe(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,n=(Bi[e[t+0]]+Bi[e[t+1]]+Bi[e[t+2]]+Bi[e[t+3]]+"-"+Bi[e[t+4]]+Bi[e[t+5]]+"-"+Bi[e[t+6]]+Bi[e[t+7]]+"-"+Bi[e[t+8]]+Bi[e[t+9]]+"-"+Bi[e[t+10]]+Bi[e[t+11]]+Bi[e[t+12]]+Bi[e[t+13]]+Bi[e[t+14]]+Bi[e[t+15]]).toLowerCase();if(!ile(n))throw TypeError("Stringified UUID is invalid");return n}var ale=XSe;var lle,hN,gN=0,vN=0;function KSe(e,t,n){var r=t&&n||0,o=t||new Array(16);e=e||{};var i=e.node||lle,u=e.clockseq!==void 0?e.clockseq:hN;if(i==null||u==null){var f=e.random||(e.rng||mN)();i==null&&(i=lle=[f[0]|1,f[1],f[2],f[3],f[4],f[5]]),u==null&&(u=hN=(f[6]<<8|f[7])&16383)}var h=e.msecs!==void 0?e.msecs:Date.now(),y=e.nsecs!==void 0?e.nsecs:vN+1,O=h-gN+(y-vN)/1e4;if(O<0&&e.clockseq===void 0&&(u=u+1&16383),(O<0||h>gN)&&e.nsecs===void 0&&(y=0),y>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");gN=h,vN=y,hN=u,h+=122192928e5;var S=((h&268435455)*1e4+y)%4294967296;o[r++]=S>>>24&255,o[r++]=S>>>16&255,o[r++]=S>>>8&255,o[r++]=S&255;var I=h/4294967296*1e4&268435455;o[r++]=I>>>8&255,o[r++]=I&255,o[r++]=I>>>24&15|16,o[r++]=I>>>16&255,o[r++]=u>>>8|128,o[r++]=u&255;for(var A=0;A<6;++A)o[r+A]=i[A];return t||ale(o)}var $k=KSe;var sle=P(L());function Lr(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"",t=$k();return function(){var n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"",r="".concat(e).concat(e!==""?"_":"i"),o=n?"_".concat(n):"";return"".concat(r).concat(o?t:$k()).concat(o)}}var Gs=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},n=t.prefix,r=t.suffix,o=t.conditionalId;return(0,sle.useMemo)(function(){return o||Lr(n)(r)},[o,n,r])};var fs="left",Xs="right",bp="center";function Vt(e){return Object.keys(e)}var Jk={xl:1200,l:992,m:768,s:575,xs:0};var yN=Jk,ule=Vt(yN);function Gk(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:yN;return ule.find(function(n){return t[n]<=e})}var _v=P(L());var X3=P(L());var wd={light:"LIGHT",dark:"DARK"},cle="INVERSE";function ple(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function bN(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n1&&arguments[1]!==void 0?arguments[1]:[];nje(this,e),this.computer=t,this.dependencies=n}return oje(e,[{key:"getValue",value:function(n){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},o=arguments.length>2?arguments[2]:void 0,i=arguments.length>3?arguments[3]:void 0;if(!this.dependencies.length)return this.computer(o);if(!Array.isArray(this.dependencies)){var u,f;return this.computer((u=(f=wp(o,this.dependencies))!==null&&f!==void 0?f:wp(r,this.dependencies,i))!==null&&u!==void 0?u:wp(n,this.dependencies,i))}return this.computer(this.dependencies.map(function(h){var y,O;return(y=(O=wp(o,h))!==null&&O!==void 0?O:wp(r,h,i))!==null&&y!==void 0?y:wp(n,h,i)}))}}]),e}();function wr(e,t){return new q3(e,t)}var U3=function(t,n,r){var o={themeName:t.key};function i(u,f){var h=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,y=arguments.length>3?arguments[3]:void 0;Object.keys(u).forEach(function(O){var S=y?"".concat(y,".").concat(O):"".concat(O);if([].concat(QSe(Object.values(wd)),[r]).includes(O)){if(O!==r)return;var I=new RegExp("(\\.".concat(r,"\\b)|(\\b").concat(r,"\\.)"));S=S.replace(I,"")}var A=h&&wp(o,S);if(!A||D1(A)){var C=u[O]instanceof q3?u[O].getValue(u.root,f.root,o,r):u[O],M=f[O]instanceof q3?f[O].getValue(u.root,f.root,o,r):f[O];D1(C)&&!Array.isArray(C)?i(C,M??{},h,S):aje(o,S,M??C)}})}return i(t,n),i(n,{},!0),o},$3=function(t,n){var r={getPrototypeOf:function(u){return Reflect.getPrototypeOf(u.model)},setPrototypeOf:function(u,f){return Reflect.setPrototypeOf(u.model,f)},isExtensible:function(u){return Reflect.isExtensible(u)},preventExtensions:function(u){return Reflect.preventExtensions(u.model)},getOwnPropertyDescriptor:function(u,f){return Reflect.getOwnPropertyDescriptor(u.model,f)},defineProperty:function(u,f,h){return Reflect.defineProperty(u.model,f,h)},has:function(u,f){return Reflect.has(u.model,f)},get:function(u,f){if(f==="key")return u[f];if(f==="__proto__")return{};var h=f==="root"?u:u.model||u,y=h[f];return D1(y)&&!Array.isArray(y)?new Proxy({model:y,root:u.root,key:"_".concat(u.key)},r):y},set:function(u){return u},deleteProperty:function(u){return u},ownKeys:function(u){return Reflect.ownKeys(u.model)},apply:function(u){return u},construct:function(u){return u}},o=new Proxy({model:t,root:t,key:n},r);return o},xN=function e(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=bN({},t);return!D1(r)||!D1(n)?n:(Object.keys(n).forEach(function(o){var i=r[o],u=n[o];D1(i)&&D1(u)?r[o]=e(bN({},i),bN({},u)):r[o]=u}),r)};function lje(e,t){return pje(e)||cje(e,t)||uje(e,t)||sje()}function sje(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function uje(e,t){if(e){if(typeof e=="string")return dle(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return dle(e,t)}}function dle(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n1&&arguments[1]!==void 0?arguments[1]:10,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,r=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1,o=e.slice(),i=[],u=t%2===0,f=n?Math.ceil(t/2)+(u?1:0):t,h=n?Math.ceil(t/2)+(u?1:0):0;if(o.length===1&&o.unshift(mle),n){o.length<3&&(o[2]=o[1],o[1]=mle);var y=Math.ceil(o.length/2),O=o.filter(function(M,W){if(We.length)&&(t=e.length);for(var n=0,r=new Array(t);n0&&arguments[0]!==void 0?arguments[0]:{},n=t.rotations,r=n===void 0?1:n,o=t.order,i=o===void 0?"append":o,u=t.direction,f=u===void 0?"lighter":u,h=t.sortBy,y=h===void 0?"default":h,O=t.sortShift,S=O===void 0?"-100":O,I=[],A=["#54B399","#6092C0","#D36086","#9170B8","#CA8EAE","#D6BF57","#B9A888","#DA8B45","#AA6556","#E7664C"];if(y==="natural"&&(A=kN(A).sort(function(R,B){return(0,Qk.default)(R).set("hsl.h",S).hsl()[0]-(0,Qk.default)(B).set("hsl.h",S).hsl()[0]})),r>1){var C=A.map(function(R){var B=cv(["black",R,"white"],5,!1,!0);switch(B.pop(),B.shift(),f){case"lighter":return cv([B[1],B[2]],r,!1,!0);case"darker":return cv([B[1],B[0]],r,!1,!0);case"both":return cv(B,r,!1,!0)}});if(i==="group")I=gje(C);else for(var M=function(B){var Y,X=C.map(function(ae){return ae[B]});(Y=I).push.apply(Y,kN(X))},W=0;W0&&arguments[0]!==void 0?arguments[0]:{},n=Op(t),r=n.map(function(o){return(0,Qk.default)(o).brighten(.5).hex()});return r};var eLt=Op()[9],tLt=[Op()[1],"#6092C0"],rLt=[Op()[7],Op()[9]];var J3=P(Od());var hle=function(t,n){return _N(t)?n.hex():n.css()},Ks=function(t,n){return(0,J3.default)(t).alpha(n).css()},nc=function(t,n){var r=J3.default.mix(t,"#fff",n,"rgb");return hle(t,r)},oc=function(t,n){var r=J3.default.mix(t,"#000",n,"rgb");return hle(t,r)};var Zk=function(t){return(0,J3.default)(t).get("hsl.l")*100};var fv=P(Od());function G3(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?G3=function(n){return typeof n}:G3=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},G3(e)}var ic=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:4.85;return function(r){var o,i=G3(r)==="object"&&(o=wp(r,t))!==null&&o!==void 0?o:t,u=G3(r)==="object"?r.colors.body:r;((0,fv.default)(i).alpha()<1||(0,fv.default)(u).alpha()<1)&&console.warn(`Contrast cannot be accurately calculated when colors have alpha channel opacity. Make sure the provided foreground and background colors have no transparency: +`},Xae=function(t){return{euiScreenReaderOnly:t?Fe("&:not(:focus):not(:active){",Od(),";};label:euiScreenReaderOnly;"):Fe(Od(),";label:euiScreenReaderOnly;")}};var Un=function(t){var n=t.children,r=t.className,o=t.showOnFocus,i=(0,Kae.default)(r,n.props.className),u=Xae(o),f=[u.euiScreenReaderOnly],h={className:i.length?i:void 0,css:f};return wd(n,h)};Un.propTypes={children:GP.default.element.isRequired,showOnFocus:GP.default.bool,className:GP.default.string};function OSe(e,t){return jSe(e)||SSe(e,t)||_Se(e,t)||xSe()}function xSe(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function _Se(e,t){if(e){if(typeof e=="string")return Yae(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Yae(e,t)}}function Yae(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);nsummary:first-of-type","details"],uN=ISe.join(","),ele=typeof Element>"u",U3=ele?function(){}:Element.prototype.matches||Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector,cN=!ele&&Element.prototype.getRootNode?function(e){return e.getRootNode()}:function(e){return e.ownerDocument},tle=function(t,n,r){var o=Array.prototype.slice.apply(t.querySelectorAll(uN));return n&&U3.call(t,uN)&&o.unshift(t),o=o.filter(r),o},rle=function e(t,n,r){for(var o=[],i=Array.from(t);i.length;){var u=i.shift();if(u.tagName==="SLOT"){var f=u.assignedElements(),h=f.length?f:u.children,y=e(h,!0,r);r.flatten?o.push.apply(o,y):o.push({scope:u,candidates:y})}else{var O=U3.call(u,uN);O&&r.filter(u)&&(n||!t.includes(u))&&o.push(u);var S=u.shadowRoot||typeof r.getShadowRoot=="function"&&r.getShadowRoot(u),I=!r.shadowRootFilter||r.shadowRootFilter(u);if(S&&I){var A=e(S===!0?u.children:S.children,!0,r);r.flatten?o.push.apply(o,A):o.push({scope:u,candidates:A})}else i.unshift.apply(i,u.children)}}return o},nle=function(t,n){return t.tabIndex<0&&(n||/^(AUDIO|VIDEO|DETAILS)$/.test(t.tagName)||t.isContentEditable)&&isNaN(parseInt(t.getAttribute("tabindex"),10))?0:t.tabIndex},PSe=function(t,n){return t.tabIndex===n.tabIndex?t.documentOrder-n.documentOrder:t.tabIndex-n.tabIndex},ole=function(t){return t.tagName==="INPUT"},kSe=function(t){return ole(t)&&t.type==="hidden"},ESe=function(t){var n=t.tagName==="DETAILS"&&Array.prototype.slice.apply(t.children).some(function(r){return r.tagName==="SUMMARY"});return n},CSe=function(t,n){for(var r=0;rsummary:first-of-type"),u=i?t.parentElement:t;if(U3.call(u,"details:not([open]) *"))return!0;var f=cN(t).host,h=f?.ownerDocument.contains(f)||t.ownerDocument.contains(t);if(!r||r==="full"){if(typeof o=="function"){for(var y=t;t;){var O=t.parentElement,S=cN(t);if(O&&!O.shadowRoot&&o(O)===!0)return Qae(t);t.assignedSlot?t=t.assignedSlot:!O&&S!==t.ownerDocument?t=S.host:t=O}t=y}if(h)return!t.getClientRects().length}else if(r==="non-zero-area")return Qae(t);return!1},zSe=function(t){if(/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(t.tagName))for(var n=t.parentElement;n;){if(n.tagName==="FIELDSET"&&n.disabled){for(var r=0;r=0)},DSe=function e(t){var n=[],r=[];return t.forEach(function(o,i){var u=!!o.scope,f=u?o.scope:o,h=nle(f,u),y=u?e(o.candidates):f;h===0?u?n.push.apply(n,y):n.push(f):r.push({documentOrder:i,tabIndex:h,item:o,isScope:u,content:y})}),r.sort(PSe).reduce(function(o,i){return i.isScope?o.push.apply(o,i.content):o.push(i.content),o},[]).concat(n)},XP=function(t,n){n=n||{};var r;return n.getShadowRoot?r=rle([t],n.includeContainer,{filter:Zae.bind(null,n),flatten:!1,getShadowRoot:n.getShadowRoot,shadowRootFilter:LSe}):r=tle(t,n.includeContainer,Zae.bind(null,n)),DSe(r)},ile=function(t,n){n=n||{};var r;return n.getShadowRoot?r=rle([t],n.includeContainer,{filter:pN.bind(null,n),flatten:!0,getShadowRoot:n.getShadowRoot}):r=tle(t,n.includeContainer,pN.bind(null,n)),r};var xn={};$(xn,{ALT:()=>HSe,ARROW_DOWN:()=>hN,ARROW_LEFT:()=>vN,ARROW_RIGHT:()=>yN,ARROW_UP:()=>gN,BACKSPACE:()=>WSe,CTRL:()=>qSe,END:()=>GSe,ENTER:()=>NSe,ESCAPE:()=>dN,F2:()=>BSe,HOME:()=>XSe,META:()=>USe,PAGE_DOWN:()=>JSe,PAGE_UP:()=>$Se,SHIFT:()=>VSe,SPACE:()=>FSe,TAB:()=>mN,keys:()=>fN});var NSe="Enter",FSe=" ",dN="Escape",mN="Tab",WSe="Backspace",BSe="F2",HSe="Alt",VSe="Shift",qSe="Control",USe="Meta",hN="ArrowDown",gN="ArrowUp",vN="ArrowLeft",yN="ArrowRight",$Se="PageUp",JSe="PageDown",GSe="End",XSe="Home",fN;(function(e){e.ENTER="Enter",e.SPACE=" ",e.ESCAPE="Escape",e.TAB="Tab",e.BACKSPACE="Backspace",e.F2="F2",e.ALT="Alt",e.SHIFT="Shift",e.CTRL="Control",e.META="Meta",e.ARROW_DOWN="ArrowDown",e.ARROW_UP="ArrowUp",e.ARROW_LEFT="ArrowLeft",e.ARROW_RIGHT="ArrowRight",e.PAGE_UP="PageUp",e.PAGE_DOWN="PageDown",e.END="End",e.HOME="Home"})(fN||(fN={}));var fs={ARROW_DOWN:hN,ARROW_LEFT:vN,ARROW_RIGHT:yN,ARROW_UP:gN,ESCAPE:dN,TAB:mN};var KP,KSe=new Uint8Array(16);function bN(){if(!KP&&(KP=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||typeof msCrypto<"u"&&typeof msCrypto.getRandomValues=="function"&&msCrypto.getRandomValues.bind(msCrypto),!KP))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return KP(KSe)}var ale=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function YSe(e){return typeof e=="string"&&ale.test(e)}var lle=YSe;var Wi=[];for(YP=0;YP<256;++YP)Wi.push((YP+256).toString(16).substr(1));var YP;function QSe(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,n=(Wi[e[t+0]]+Wi[e[t+1]]+Wi[e[t+2]]+Wi[e[t+3]]+"-"+Wi[e[t+4]]+Wi[e[t+5]]+"-"+Wi[e[t+6]]+Wi[e[t+7]]+"-"+Wi[e[t+8]]+Wi[e[t+9]]+"-"+Wi[e[t+10]]+Wi[e[t+11]]+Wi[e[t+12]]+Wi[e[t+13]]+Wi[e[t+14]]+Wi[e[t+15]]).toLowerCase();if(!lle(n))throw TypeError("Stringified UUID is invalid");return n}var sle=QSe;var ule,wN,ON=0,xN=0;function ZSe(e,t,n){var r=t&&n||0,o=t||new Array(16);e=e||{};var i=e.node||ule,u=e.clockseq!==void 0?e.clockseq:wN;if(i==null||u==null){var f=e.random||(e.rng||bN)();i==null&&(i=ule=[f[0]|1,f[1],f[2],f[3],f[4],f[5]]),u==null&&(u=wN=(f[6]<<8|f[7])&16383)}var h=e.msecs!==void 0?e.msecs:Date.now(),y=e.nsecs!==void 0?e.nsecs:xN+1,O=h-ON+(y-xN)/1e4;if(O<0&&e.clockseq===void 0&&(u=u+1&16383),(O<0||h>ON)&&e.nsecs===void 0&&(y=0),y>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");ON=h,xN=y,wN=u,h+=122192928e5;var S=((h&268435455)*1e4+y)%4294967296;o[r++]=S>>>24&255,o[r++]=S>>>16&255,o[r++]=S>>>8&255,o[r++]=S&255;var I=h/4294967296*1e4&268435455;o[r++]=I>>>8&255,o[r++]=I&255,o[r++]=I>>>24&15|16,o[r++]=I>>>16&255,o[r++]=u>>>8|128,o[r++]=u&255;for(var A=0;A<6;++A)o[r+A]=i[A];return t||sle(o)}var QP=ZSe;var cle=k(L());function Lr(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"",t=QP();return function(){var n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"",r="".concat(e).concat(e!==""?"_":"i"),o=n?"_".concat(n):"";return"".concat(r).concat(o?t:QP()).concat(o)}}var Ys=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},n=t.prefix,r=t.suffix,o=t.conditionalId;return(0,cle.useMemo)(function(){return o||Lr(n)(r)},[o,n,r])};var ds="left",Qs="right",Op="center";function Ht(e){return Object.keys(e)}var ZP={xl:1200,l:992,m:768,s:575,xs:0};var _N=ZP,ple=Ht(_N);function ek(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:_N;return ple.find(function(n){return t[n]<=e})}var _v=k(L());var Y3=k(L());var xd={light:"LIGHT",dark:"DARK"},fle="INVERSE";function dle(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function SN(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n1&&arguments[1]!==void 0?arguments[1]:[];aje(this,e),this.computer=t,this.dependencies=n}return lje(e,[{key:"getValue",value:function(n){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},o=arguments.length>2?arguments[2]:void 0,i=arguments.length>3?arguments[3]:void 0;if(!this.dependencies.length)return this.computer(o);if(!Array.isArray(this.dependencies)){var u,f;return this.computer((u=(f=xp(o,this.dependencies))!==null&&f!==void 0?f:xp(r,this.dependencies,i))!==null&&u!==void 0?u:xp(n,this.dependencies,i))}return this.computer(this.dependencies.map(function(h){var y,O;return(y=(O=xp(o,h))!==null&&O!==void 0?O:xp(r,h,i))!==null&&y!==void 0?y:xp(n,h,i)}))}}]),e}();function Or(e,t){return new $3(e,t)}var J3=function(t,n,r){var o={themeName:t.key};function i(u,f){var h=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,y=arguments.length>3?arguments[3]:void 0;Object.keys(u).forEach(function(O){var S=y?"".concat(y,".").concat(O):"".concat(O);if([].concat(tje(Object.values(xd)),[r]).includes(O)){if(O!==r)return;var I=new RegExp("(\\.".concat(r,"\\b)|(\\b").concat(r,"\\.)"));S=S.replace(I,"")}var A=h&&xp(o,S);if(!A||N1(A)){var C=u[O]instanceof $3?u[O].getValue(u.root,f.root,o,r):u[O],M=f[O]instanceof $3?f[O].getValue(u.root,f.root,o,r):f[O];N1(C)&&!Array.isArray(C)?i(C,M??{},h,S):uje(o,S,M??C)}})}return i(t,n),i(n,{},!0),o},G3=function(t,n){var r={getPrototypeOf:function(u){return Reflect.getPrototypeOf(u.model)},setPrototypeOf:function(u,f){return Reflect.setPrototypeOf(u.model,f)},isExtensible:function(u){return Reflect.isExtensible(u)},preventExtensions:function(u){return Reflect.preventExtensions(u.model)},getOwnPropertyDescriptor:function(u,f){return Reflect.getOwnPropertyDescriptor(u.model,f)},defineProperty:function(u,f,h){return Reflect.defineProperty(u.model,f,h)},has:function(u,f){return Reflect.has(u.model,f)},get:function(u,f){if(f==="key")return u[f];if(f==="__proto__")return{};var h=f==="root"?u:u.model||u,y=h[f];return N1(y)&&!Array.isArray(y)?new Proxy({model:y,root:u.root,key:"_".concat(u.key)},r):y},set:function(u){return u},deleteProperty:function(u){return u},ownKeys:function(u){return Reflect.ownKeys(u.model)},apply:function(u){return u},construct:function(u){return u}},o=new Proxy({model:t,root:t,key:n},r);return o},PN=function e(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=SN({},t);return!N1(r)||!N1(n)?n:(Object.keys(n).forEach(function(o){var i=r[o],u=n[o];N1(i)&&N1(u)?r[o]=e(SN({},i),SN({},u)):r[o]=u}),r)};function cje(e,t){return mje(e)||dje(e,t)||fje(e,t)||pje()}function pje(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function fje(e,t){if(e){if(typeof e=="string")return hle(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return hle(e,t)}}function hle(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n1&&arguments[1]!==void 0?arguments[1]:10,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,r=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1,o=e.slice(),i=[],u=t%2===0,f=n?Math.ceil(t/2)+(u?1:0):t,h=n?Math.ceil(t/2)+(u?1:0):0;if(o.length===1&&o.unshift(gle),n){o.length<3&&(o[2]=o[1],o[1]=gle);var y=Math.ceil(o.length/2),O=o.filter(function(M,F){if(Fe.length)&&(t=e.length);for(var n=0,r=new Array(t);n0&&arguments[0]!==void 0?arguments[0]:{},n=t.rotations,r=n===void 0?1:n,o=t.order,i=o===void 0?"append":o,u=t.direction,f=u===void 0?"lighter":u,h=t.sortBy,y=h===void 0?"default":h,O=t.sortShift,S=O===void 0?"-100":O,I=[],A=["#54B399","#6092C0","#D36086","#9170B8","#CA8EAE","#D6BF57","#B9A888","#DA8B45","#AA6556","#E7664C"];if(y==="natural"&&(A=MN(A).sort(function(R,B){return(0,ok.default)(R).set("hsl.h",S).hsl()[0]-(0,ok.default)(B).set("hsl.h",S).hsl()[0]})),r>1){var C=A.map(function(R){var B=cv(["black",R,"white"],5,!1,!0);switch(B.pop(),B.shift(),f){case"lighter":return cv([B[1],B[2]],r,!1,!0);case"darker":return cv([B[1],B[0]],r,!1,!0);case"both":return cv(B,r,!1,!0)}});if(i==="group")I=bje(C);else for(var M=function(B){var Y,X=C.map(function(le){return le[B]});(Y=I).push.apply(Y,MN(X))},F=0;F0&&arguments[0]!==void 0?arguments[0]:{},n=_p(t),r=n.map(function(o){return(0,ok.default)(o).brighten(.5).hex()});return r};var nLt=_p()[9],oLt=[_p()[1],"#6092C0"],iLt=[_p()[7],_p()[9]];var X3=k(_d());var vle=function(t,n){return kN(t)?n.hex():n.css()},Zs=function(t,n){return(0,X3.default)(t).alpha(n).css()},ic=function(t,n){var r=X3.default.mix(t,"#fff",n,"rgb");return vle(t,r)},ac=function(t,n){var r=X3.default.mix(t,"#000",n,"rgb");return vle(t,r)};var ik=function(t){return(0,X3.default)(t).get("hsl.l")*100};var fv=k(_d());function K3(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?K3=function(n){return typeof n}:K3=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},K3(e)}var lc=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:4.85;return function(r){var o,i=K3(r)==="object"&&(o=xp(r,t))!==null&&o!==void 0?o:t,u=K3(r)==="object"?r.colors.body:r;((0,fv.default)(i).alpha()<1||(0,fv.default)(u).alpha()<1)&&console.warn(`Contrast cannot be accurately calculated when colors have alpha channel opacity. Make sure the provided foreground and background colors have no transparency: Foreground: `.concat(i,` -Background: `).concat(u));for(var f=fv.default.contrast(i,u),h=Zk(u),y=i;f50?y=oc(y,.05):y=nc(y,.05),f=fv.default.contrast(y,u);var O=Zk(y);if(O<5)return console.warn("High enough contrast could not be determined. Most likely your background color does not adjust for light mode."),y;if(O>95)return console.warn("High enough contrast could not be determined. Most likely your background color does not adjust for dark mode."),y}return(0,fv.default)(y).hex()}},eP=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:2;return function(r){return ic(t,n)(r)}};function gle(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function xd(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n0&&arguments[0]!==void 0?arguments[0]:1;return function(n){var r=tP(n)==="object"?n.base:n;return"".concat(r*t,"px")}};function jle(e,t){var n=t.base,r=t.font,o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},i=o.measurement,u=i===void 0?"rem":i,f=o.customScale;if(u==="em")return"".concat(r.scale[e],"em");var h=n*r.scale[e];f&&(h*=r.scale[f]);var y=n*r.scale[r.body.scale];return u==="px"?"".concat(h,"px"):"".concat((h/y).toFixed(4),"rem")}function Ile(e,t){var n=t.base,r=t.font,o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},i=o.measurement,u=i===void 0?"rem":i,f=o.customScale,h=r.baseline,y=r.lineHeightMultiplier,O=n*r.scale[e];f&&(O*=r.scale[f]);var S=n*r.scale[r.body.scale],I=O<=n?y:y*.833;if(u==="em")return I.toFixed(4).toString();var A=Math.floor(Math.round(O*I)/h)*h;return u==="px"?"".concat(A,"px"):"".concat((A/S).toFixed(4),"rem")}var kle=16,Ple={xxs:wr(fa(.125)),xs:wr(fa(.25)),s:wr(fa(.5)),m:wr(fa(.75)),base:wr(fa()),l:wr(fa(1.5)),xl:wr(fa(2)),xxl:wr(fa(2.5)),xxxl:wr(fa(3)),xxxxl:wr(fa(4))};function rP(e,t){return Qje(e)||Yje(e,t)||Kje(e,t)||Xje()}function Xje(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function Kje(e,t){if(e){if(typeof e=="string")return Ele(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Ele(e,t)}}function Ele(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n1&&arguments[1]!==void 0?arguments[1]:50,r=Date.now();return function(){r+n-Date.now()<0&&(t.apply(void 0,arguments),r=Date.now())}};function RAe(e,t){return NAe(e)||DAe(e,t)||LAe(e,t)||zAe()}function zAe(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function LAe(e,t){if(e){if(typeof e=="string")return Yce(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Yce(e,t)}}function Yce(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n1&&arguments[1]!==void 0?arguments[1]:!0,r=iF();return r&&n?t.includes(r):!1};var Zce=function(t){var n=t instanceof HTMLElement?t:null;return typeof t=="string"?n=document.querySelector(t):typeof t=="function"&&(n=t()),n};var epe=P(lF());var sF=function(t){return t===void 0},FAe=function(t){return t===null},ms=function(t){return sF(t)||FAe(t)};var tpe=function(t){return epe.default.isDate(t)};var upe=P(oP()),cpe=P(Qs()),ppe=P(npe()),fpe=P(ipe()),dpe=P(uF()),mpe=P(spe()),tMe=P(F1()),jd=function(t){return(0,upe.default)(t)},hpe=function(t){return(0,cpe.default)(t)},za=function(t){return(0,ppe.default)(t)},bP=function(t){return(0,fpe.default)(t)},wP=function(t){return(0,dpe.default)(t)},gpe=function(t){return(0,mpe.default)(t)};var jv=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=n.yes,o=r===void 0?"Yes":r,i=n.no,u=i===void 0?"No":i,f=n.nil,h=f===void 0?"":f;return ms(t)?h:t?o:u};var xP=P(lF());function OP(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?OP=function(n){return typeof n}:OP=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},OP(e)}function vpe(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function ype(e){for(var t=1;t1&&arguments[1]!==void 0?arguments[1]:{},r=n.refTime;return(0,xP.default)(t).calendar(r,n)},u5={date:"D MMM YYYY",longDate:"DD MMMM YYYY",shortDate:"D MMM YY",dateTime:"D MMM YYYY HH:mm",longDateTime:"DD MMMM YYYY HH:mm:ss",shortDateTime:"D MMM YY HH:mm",dobShort:"Do MMM YY",dobLong:"Do MMMM YYYY",iso8601:"YYYY-MM-DDTHH:mm:ss.SSSZ",calendar:cF,calendarDateTime:function(t,n){return cF(t,ype({sameDay:"[Today at] H:mmA",nextDay:"[Tomorrow at] H:mmA",nextWeek:"dddd [at] H:mmA",lastDay:"[Yesterday at] H:mmA",lastWeek:"[Last] dddd [at] H:mmA",sameElse:"Do MMM YYYY [at] H:mmA"},n))},calendarDate:function(t,n){return cF(t,ype({sameDay:"[Today]",nextDay:"[Tomorrow]",nextWeek:"dddd",lastDay:"[Yesterday]",lastWeek:"[Last] dddd",sameElse:"Do MMM YYYY"},n))}};function nMe(e){return u5.hasOwnProperty(e)}function oMe(e){return OP(e)==="object"&&(e.hasOwnProperty("format")||e.hasOwnProperty("nil")||e.hasOwnProperty("options"))}var Iv=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"dateTime";if(za(n)){if(ms(t))return"";var r=nMe(n)?u5[n]:n;if(jd(r))return r(t,{});if(za(r))return(0,xP.default)(t).format(r)}if(oMe(n)){var o=n.format,i=o===void 0?"dateTime":o,u=n.nil,f=u===void 0?"":u,h=n.options,y=u5[i]||i;if(ms(t))return f;if(jd(y))return y(t,h);if(za(y))return(0,xP.default)(t).format(y)}throw new Error("Failed to format value using dateFormatKeyOrConfig: ".concat(n))};var Ope=P(wpe());var iMe={decimal1:"0,0.0",decimal2:"0,0.00",decimal3:"0,0.000",ordinal:"0o",integer:"0,0"},kv=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r,o="",i;if(za(n)?r=n:(r=n.format,o=n.nil||"",i=n.round),!r)return ms(t)?o:t.toString();var u=i?Math.round:Math.floor,f=iMe[r]||r;return ms(t)?o:(0,Ope.default)(t).format(f,u)};var Pv=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{nil:""};return ms(t)?n.nil:t.toString()};var SP=function e(t){return ms(t)||gpe(t)?"":za(t)?Pv(t):tpe(t)?Iv(t):bP(t)?jv(t):wP(t)?kv(t):hpe(t)?Array.isArray(t)?t.map(function(n){return e(n)}).join(", "):e(t):JSON.stringify(t)};var lMe=/^([a-zA-Z0-9]+\.)*elastic\.co$/,jpe=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"";try{var n=new URL(t),r=n.protocol==="http:"||n.protocol==="https:",o=!!n.host.match(lMe);return r&&o}catch{return!1}};var ni=function(t){var n=t.href,r=t.target,o=r===void 0?"":r,i=t.rel,u=!!n&&jpe(n),f=i?i.split(" ").filter(function(h){return!!h.length&&h!=="noreferrer"}):[];return u||f.push("noreferrer"),o.includes("_blank")&&f.indexOf("noopener")===-1&&f.push("noopener"),f.sort().join(" ").trim()};var Ipe=P(dt()),jP="asc",fF="desc",Id=Object.freeze({ASC:jP,DESC:fF,isAsc:function(t){return t===jP},reverse:function(t){return this.isAsc(t)?fF:jP}}),kpe=Ipe.default.oneOf([jP,fF]);var Qde=P(Gpe()),HLe=P(Yde()),p5=function(t,n,r){return(0,Qde.default)(t,n,r)};function MP(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function SF(e,t){return $Le(e)||ULe(e,t)||qLe(e,t)||VLe()}function VLe(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function qLe(e,t){if(e){if(typeof e=="string")return Zde(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Zde(e,t)}}function Zde(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);nK)&&(K=Oe.fit,de={fit:Oe.fit,position:Se,top:Oe.top+window.pageYOffset,left:Oe.left+window.pageXOffset,arrow:Oe.arrow},K===1))break}if(de==null)throw new Error("Failed to calculate bestPosition");return C&&(de.anchorBoundingBox=M),de}function JLe(e){var t,n,r=e.position,o=e.align,i=e.anchorBoundingBox,u=e.popoverBoundingBox,f=e.windowBoundingBox,h=e.containerBoundingBox,y=e.arrowConfig,O=e.offset,S=O===void 0?0:O,I=e.buffer,A=I===void 0?0:I,C=_F[r],M=Av[C],W=xF[C],R=t0e(A),B=SF(R,4),Y=B[0],X=B[1],ae=B[2],Z=B[3],K=GLe({crossAxisFirstSide:C,crossAxisSecondSide:M,crossAxisDimension:W,position:r,align:o,buffer:A,offset:S,windowBoundingBox:f,containerBoundingBox:h,popoverBoundingBox:u,anchorBoundingBox:i,arrowConfig:y}),de=K.crossAxisPosition,se=K.crossAxisArrowPosition,Se=xF[r],Oe=e0e[Se],be=XLe({position:r,offset:S,popoverBoundingBox:u,anchorBoundingBox:i,arrowConfig:y}),Ue=be.primaryAxisPosition,We=be.primaryAxisArrowPosition,Ge=(t={},MP(t,C,de),MP(t,Oe,Ue),t),Qe=jF(f,h);Qe.top+=Y,Qe.right-=X,Qe.bottom-=ae,Qe.left+=Z;var ot=YLe({top:Ge.top,right:Ge.left+u.width,bottom:Ge.top+u.height,left:Ge.left,width:u.width,height:u.height},Qe),at=y?(n={},MP(n,C,se-Ge[C]),MP(n,Oe,We),n):void 0;return{fit:ot,top:Ge.top,left:Ge.left,arrow:at?{left:at.left,top:at.top}:void 0}}function GLe(e){var t=e.crossAxisFirstSide,n=e.crossAxisSecondSide,r=e.crossAxisDimension,o=e.position,i=e.align,u=e.buffer,f=e.offset,h=e.windowBoundingBox,y=e.containerBoundingBox,O=e.popoverBoundingBox,S=e.anchorBoundingBox,I=e.arrowConfig,A=O[r],C=S[r],M=C/2,W=S[t]+M-A/2,R=jF(h,y),B=KLe(S,R,u,f,o),Y=I?I.arrowBuffer:0,X=(A-C)/2,ae=0,Z=1,K=0,de=1;if(i!=null){Z=i==="top"||i==="left"?1:-1,ae=X;var se=X+ae,Se=se>B[Av[i]];K=Se?se-B[Av[i]]:0,de=-1*Z}else{var Oe=B[t],be=B[n],Ue=Oe>be;de=Ue?-1:1;var We=Math.min(Oe,be),Ge=X>We;K=Ge?X-We:0}var Qe=K*de,ot=W+Qe+ae*Z,at;if(I){var ht=I.arrowWidth;if(at=S[t]+M-ht/2,atot+A){var Ze=ot+A,Kt=at-(Ze-Y-ht);ot+=Kt}}return{crossAxisPosition:ot,crossAxisArrowPosition:at}}function XLe(e){var t=e.position,n=e.offset,r=e.popoverBoundingBox,o=e.anchorBoundingBox,i=e.arrowConfig,u=t==="top"||t==="left",f=xF[t],h=r[f],y=e0e[f],O=o[y],S=o[f],I=u?h:S,A=(n+I)*(u?-1:1),C=O+A,M;return i&&(M=u?h:0),{primaryAxisPosition:C,primaryAxisArrowPosition:M}}function OF(e){var t=e.getBoundingClientRect();return{top:t.top,right:t.right,bottom:t.bottom,left:t.left,height:t.height,width:t.width}}function KLe(e,t,n,r,o){var i=t0e(n),u=SF(i,4),f=u[0],h=u[1],y=u[2],O=u[3];return{top:e.top-t.top-f-(o==="top"?r:0),right:t.right-e.right-h-(o==="right"?r:0),bottom:t.bottom-e.bottom-y-(o==="bottom"?r:0),left:e.left-t.left-O-(o==="left"?r:0)}}function YLe(e,t){var n=jF(e,t);if(n.left>n.right||n.top>n.top)return 0;var r=(n.right-n.left)*(n.bottom-n.top),o=(e.right-e.left)*(e.bottom-e.top);return r/o}function jF(e,t){var n=Math.max(e.top,t.top),r=Math.min(e.right,t.right),o=Math.min(e.bottom,t.bottom),i=Math.max(e.left,t.left),u=Math.max(o-n,0),f=Math.max(r-i,0);return{top:n,right:r,bottom:o,left:i,height:u,width:f}}function f5(e,t){for(var n=[];n.push(e),e=e.offsetParent,!(e==null||e.contains(t)););n.reverse();for(var r=0,o=n;r0){var r=Date.now(),o=r+t,i=function u(){n(),o>Date.now()&&requestAnimationFrame(u)};requestAnimationFrame(i)}};var o0e=P(L()),IF=function(t){return(0,o0e.useCallback)(function(n){return t.forEach(function(r){r&&(typeof r=="function"?r(n):r.current=n)})},[t])};var QP=P(L()),$t=P(dt()),XP=P(Ct());var Gir=P(L()),Hi=P(dt()),W0e=P(Ct());var m5={};$(m5,{icon:()=>oDe});var TBt=P(L());var eDe=["title","titleId"];function kF(){return kF=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function rDe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var nDe=function(t){var n=t.title,r=t.titleId,o=tDe(t,eDe);return a("svg",kF({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 0a8 8 0 110 16A8 8 0 018 0zm0 1a7 7 0 100 14A7 7 0 008 1zm3.974 4.342a.5.5 0 01-.233.596l-.083.036L9 6.86v2.559l.974 2.923a.5.5 0 01-.233.596l-.083.036a.5.5 0 01-.596-.233l-.036-.083-1-3L8 9.5l-.026.158-1 3a.5.5 0 01-.97-.228l.022-.088L7 9.416V6.86l-2.658-.886a.5.5 0 01.228-.97l.088.022L7.583 6h.833l2.926-.974a.5.5 0 01.632.316zM8 3a1 1 0 110 2 1 1 0 010-2z"}))},oDe=nDe;var h5={};$(h5,{icon:()=>uDe});var zBt=P(L());var iDe=["title","titleId"];function PF(){return PF=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function lDe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var sDe=function(t){var n=t.title,r=t.titleId,o=aDe(t,iDe);return a("svg",PF({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M2.5 2a.5.5 0 100 1 .5.5 0 000-1zm0-1a1.5 1.5 0 011.415 1h1.908a1.5 1.5 0 011.393.943L8.839 7H12.5a.5.5 0 010 1H8.839l-1.623 4.057A1.5 1.5 0 015.823 13H3.915a1.5 1.5 0 110-1h1.908a.5.5 0 00.464-.314L7.761 8H3.915a1.5 1.5 0 110-1H7.76L6.287 3.314A.5.5 0 005.823 3H3.915A1.5 1.5 0 112.5 1zm0 11a.5.5 0 110 1 .5.5 0 010-1zM3 7.5a.5.5 0 10-1 0 .5.5 0 001 0zm9.354-3.354a.5.5 0 00-.708.708L13.793 7a.707.707 0 010 1l-2.147 2.146a.5.5 0 00.708.708L14.5 8.707a1.707 1.707 0 000-2.414l-2.146-2.147z"}))},uDe=sDe;var g5={};$(g5,{icon:()=>mDe});var DBt=P(L());var cDe=["title","titleId"];function EF(){return EF=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function fDe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var dDe=function(t){var n=t.title,r=t.titleId,o=pDe(t,cDe);return a("svg",EF({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M7.59 10.059L7.35 5.18h1.3L8.4 10.06h-.81zm.394 1.901a.61.61 0 01-.448-.186.606.606 0 01-.186-.444c0-.174.062-.323.186-.446a.614.614 0 01.448-.184c.169 0 .315.06.44.182.124.122.186.27.186.448a.6.6 0 01-.189.446.607.607 0 01-.437.184zM2 14a1 1 0 01-.878-1.479l6-11a1 1 0 011.756 0l6 11A1 1 0 0114 14H2zm0-1h12L8 2 2 13z"}))},mDe=dDe;var v5={};$(v5,{icon:()=>bDe});var FBt=P(L());var hDe=["title","titleId"];function CF(){return CF=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function vDe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var yDe=function(t){var n=t.title,r=t.titleId,o=gDe(t,hDe);return a("svg",CF({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M8 9.169L2 5.25v6.17l6 3.428 6-3.428V5.25L8 9.17zM15 4v8l-7 4-7-4V4l7-4 7 4zm-1.428.336L8 1.152 2.428 4.336 8 7.974l5.572-3.638z"}))},bDe=yDe;var y5={};$(y5,{icon:()=>SDe});var BBt=P(L());var wDe=["title","titleId"];function AF(){return AF=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function xDe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var _De=function(t){var n=t.title,r=t.titleId,o=ODe(t,wDe);return a("svg",AF({xmlns:"http://www.w3.org/2000/svg",width:14,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M13.924 4.013a.605.605 0 00-.228-.236L7.304.082a.607.607 0 00-.608 0L.304 3.777A.62.62 0 000 4.304v7.392c0 .217.116.418.304.527l6.392 3.695c.188.11.42.11.608 0l6.392-3.695a.609.609 0 00.304-.527V4.304a.607.607 0 00-.076-.291zM1 5.079v6.391l6 3.47 6-3.47V5.08L7.252 8.432 7 8.579l-.252-.147L1 5.079zm11.476-.852L7 1.06 1.524 4.227 7 7.42l5.476-3.194z"}))},SDe=_De;var b5={};$(b5,{icon:()=>EDe});var VBt=P(L());var jDe=["title","titleId"];function MF(){return MF=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function kDe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var PDe=function(t){var n=t.title,r=t.titleId,o=IDe(t,jDe);return a("svg",MF({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M3 6.5a4.5 4.5 0 115 4.473V16H7v-5.027A4.5 4.5 0 013 6.5z"}))},EDe=PDe;var w5={};$(w5,{icon:()=>RDe});var UBt=P(L());var CDe=["title","titleId"];function TF(){return TF=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function MDe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var TDe=function(t){var n=t.title,r=t.titleId,o=ADe(t,CDe);return a("svg",TF({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M2 0h12a2 2 0 012 2v12a2 2 0 01-2 2H2a2 2 0 01-2-2V2a2 2 0 012-2zm0 1a1 1 0 00-1 1v12a1 1 0 001 1h12a1 1 0 001-1V2a1 1 0 00-1-1H2zm.5 2h10a.5.5 0 110 1h-10a.5.5 0 010-1zm1 3h6a.5.5 0 010 1h-6a.5.5 0 010-1zm2 3h4a.5.5 0 010 1h-4a.5.5 0 010-1zm3 3h5a.5.5 0 110 1h-5a.5.5 0 110-1z"}))},RDe=TDe;var O5={};$(O5,{icon:()=>FDe});var JBt=P(L());var zDe=["title","titleId"];function RF(){return RF=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function DDe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var NDe=function(t){var n=t.title,r=t.titleId,o=LDe(t,zDe);return a("svg",RF({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M32 30H0V3h12.57l3 5H32v22zM2 28h28V10H14.43l-3-5H2v23z"}),a("path",{className:"euiIcon__fillSecondary",d:"M21 18h-4v-4h-2v4h-4v2h4v4h2v-4h4z"}))},FDe=NDe;var x5={};$(x5,{icon:()=>qDe});var XBt=P(L());var WDe=["title","titleId"];function zF(){return zF=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function HDe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var VDe=function(t){var n=t.title,r=t.titleId,o=BDe(t,WDe);return a("svg",zF({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M2.909 26.182h1.939v4.848H2.909z"}),a("path",{d:"M4.848 16.62V0H2.91v16.62a3.879 3.879 0 101.94 0zm-.97 5.683a1.94 1.94 0 110-3.879 1.94 1.94 0 010 3.879z"}),a("path",{className:"euiIcon__fillSecondary",d:"M14.545 16.485h1.939V31.03h-1.939z"}),a("path",{d:"M16.485 6.924V0h-1.94v6.924a3.879 3.879 0 101.94 0zm-.97 5.682a1.94 1.94 0 110-3.879 1.94 1.94 0 010 3.88z"}),a("path",{className:"euiIcon__fillSecondary",d:"M26.182 26.182h1.939v4.848h-1.939z"}),a("path",{d:"M28.121 16.62V0h-1.94v16.62a3.879 3.879 0 101.94 0zm-.97 5.683a1.94 1.94 0 110-3.879 1.94 1.94 0 010 3.879z"}))},qDe=VDe;var _5={};$(_5,{icon:()=>XDe});var YBt=P(L());var UDe=["title","titleId"];function LF(){return LF=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function JDe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var GDe=function(t){var n=t.title,r=t.titleId,o=$De(t,UDe);return a("svg",LF({width:32,height:32,viewBox:"0 0 32 32",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M21 2.82L16 .038 11 2.82v2.289l5-2.782 5 2.782v-2.29z"}),a("path",{className:"euiIcon__fillSecondary",d:"M21 7.282L16 4.5l-5 2.782V9.57l5-2.781 5 2.781V7.282z"}),a("path",{d:"M7 5.045L2 7.827v15.577l14 7.788 14-7.788V7.827l-5-2.782v2.289l3 1.669v13.225l-12 6.676-12-6.676V9.003l3-1.669V5.045z"}),a("path",{className:"euiIcon__fillSecondary",fillRule:"evenodd",clipRule:"evenodd",d:"M22 12.5L16 9l-6 3.5v7l6 3.5 6-3.5v-7zm-9.974 1.205L16 11.387l3.974 2.318v4.59L16 20.613l-3.974-2.318v-4.59z"}))},XDe=GDe;var S5={};$(S5,{icon:()=>eNe});var ZBt=P(L());var KDe=["title","titleId"];function DF(){return DF=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function QDe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ZDe=function(t){var n=t.title,r=t.titleId,o=YDe(t,KDe);return a("svg",DF({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M3 10h4v2H1V1h30v6h-2V3H3v7zm26 19v-6h2v8H18v-8h2v6h9z"}),a("path",{className:"euiIcon__fillSecondary",d:"M31 10H9v11h12c5.523 0 10-4.477 10-10v-1zm-10 9H11v-7h17.938A8.001 8.001 0 0121 19z"}))},eNe=ZDe;var j5={};$(j5,{icon:()=>iNe});var tHt=P(L());var tNe=["title","titleId"];function NF(){return NF=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function nNe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var oNe=function(t){var n=t.title,r=t.titleId,o=rNe(t,tNe);return a("svg",NF({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M15.5 11.915L27 5.279 19.5.938a7.002 7.002 0 00-7 0l-8 4.62A7 7 0 001 11.62v9.237a7 7 0 003.5 6.061l7.5 4.33V17.98a7 7 0 013.5-6.063zM10 27.785v-9.808a9 9 0 014.5-7.793l8.503-4.91L18.5 2.672a5.003 5.003 0 00-5 0l-8 4.619A5 5 0 003 11.62v9.238a5 5 0 002.5 4.33l4.5 2.598z"}),a("path",{fillRule:"evenodd",className:"euiIcon__fillSecondary",d:"M18.409 13.55a7.089 7.089 0 011.035 1.711A6.93 6.93 0 0120 17.98v13.27l7.5-4.33a7 7 0 003.5-6.061v-9.239a6.992 6.992 0 00-1.587-4.421L18.409 13.55zm2.777.705A8.933 8.933 0 0122 17.979v9.807l4.5-2.598a5 5 0 002.5-4.33V11.62c0-.588-.106-1.161-.303-1.7l-7.511 4.335z"}))},iNe=oNe;var I5={};$(I5,{icon:()=>cNe});var nHt=P(L());var aNe=["title","titleId"];function FF(){return FF=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function sNe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var uNe=function(t){var n=t.title,r=t.titleId,o=lNe(t,aNe);return a("svg",FF({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M15 0h2v32h-2z"}),a("path",{d:"M0 32h13v-2H2V2h11V0H0zM19 0v2h11v28H19v2h13V0z"}))},cNe=uNe;var k5={};$(k5,{icon:()=>hNe});var iHt=P(L());var pNe=["title","titleId"];function WF(){return WF=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function dNe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var mNe=function(t){var n=t.title,r=t.titleId,o=fNe(t,pNe);return a("svg",WF({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M7 17h2v7H7zM12 14h2v10h-2zM17 16h2v8h-2zM22 14h3v2h-3zM22 18h3v2h-3zM22 22h3v2h-3z"}),a("path",{d:"M30.73 24a6.47 6.47 0 01.45-2.19c.337-.9.52-1.85.54-2.81a8.55 8.55 0 00-.54-2.81 6.47 6.47 0 01-.45-2.19 9.2 9.2 0 01.62-2.49c.53-1.57 1.08-3.19.08-4.2-1-1.01-2.41-.44-3.52.05a5.59 5.59 0 01-2.09.64 5.3 5.3 0 01-.59 0L16 .28 6.77 8a5.3 5.3 0 01-.59 0 5.59 5.59 0 01-2.09-.65C3 6.87 1.6 6.25.57 7.31c-1.03 1.06-.45 2.63.08 4.2A9.2 9.2 0 011.27 14a6.47 6.47 0 01-.45 2.19A8.55 8.55 0 00.28 19c.02.96.203 1.91.54 2.81A6.47 6.47 0 011.27 24a9.2 9.2 0 01-.62 2.49c-.53 1.57-1.08 3.19-.08 4.2.353.38.852.59 1.37.58a5.67 5.67 0 002.15-.63A5.59 5.59 0 016.18 30a7.13 7.13 0 012.29.47 8 8 0 002.62.53 7.37 7.37 0 002.47-.51A7.14 7.14 0 0116 30a6.24 6.24 0 012.14.45 8 8 0 002.77.55 8.08 8.08 0 002.77-.55 6.24 6.24 0 012.14-.45 5.59 5.59 0 012.09.65c1.11.49 2.49 1.11 3.52.05 1.03-1.06.45-2.63-.08-4.2a9.2 9.2 0 01-.62-2.5zM21.17 7h-.26a8 8 0 00-2.77.55A6.24 6.24 0 0116 8a6.24 6.24 0 01-2.14-.45A8 8 0 0011.09 7h-.26L16 2.72 21.17 7zm8.89 22.27a4.42 4.42 0 01-1.34-.46 7.08 7.08 0 00-2.9-.82 8.14 8.14 0 00-2.78.55 6.13 6.13 0 01-2.13.45 6.24 6.24 0 01-2.14-.45A8 8 0 0016 28a9 9 0 00-3.08.6 5.74 5.74 0 01-1.83.4 6.36 6.36 0 01-2-.43A8.72 8.72 0 006.18 28a7.08 7.08 0 00-2.9.82 9.65 9.65 0 01-1.28.52 6.08 6.08 0 01.52-2.21c.403-1 .65-2.055.73-3.13a8.55 8.55 0 00-.54-2.81A6.47 6.47 0 012.27 19a6.47 6.47 0 01.44-2.19c.337-.9.52-1.85.54-2.81a10.48 10.48 0 00-.72-3.13 9 9 0 01-.59-2.16H2c.447.1.88.255 1.29.46a7.08 7.08 0 002.9.82A8.14 8.14 0 009 9.44 6.13 6.13 0 0111.09 9a6.13 6.13 0 012.13.45A8.14 8.14 0 0016 10a8.14 8.14 0 002.78-.55A6.13 6.13 0 0120.91 9a6.13 6.13 0 012.09.44 8.14 8.14 0 002.78.55 7.08 7.08 0 002.9-.82A9.65 9.65 0 0130 8.66a6.08 6.08 0 01-.52 2.21c-.403 1-.65 2.055-.73 3.13.02.96.203 1.91.54 2.81a6.47 6.47 0 01.44 2.19 6.47 6.47 0 01-.44 2.19 8.55 8.55 0 00-.54 2.81c.078 1.074.32 2.13.72 3.13a9 9 0 01.59 2.16v-.02z"}))},hNe=mNe;var P5={};$(P5,{icon:()=>wNe});var lHt=P(L());var gNe=["title","titleId"];function BF(){return BF=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function yNe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var bNe=function(t){var n=t.title,r=t.titleId,o=vNe(t,gNe);return a("svg",BF({width:32,height:32,viewBox:"0 0 32 32",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M22.5 24a5.5 5.5 0 100-11 5.5 5.5 0 000 11zm0 2a7.5 7.5 0 100-15 7.5 7.5 0 000 15z"}),a("path",{d:"M30.293 27.707l-4-4 1.414-1.414 4 4-1.414 1.414zM6 4H2v27h25v-3h-2v1H4V6h2V4zm19 6h2V4h-4v2h2v4z"}),a("path",{className:"euiIcon__fillSecondary",fillRule:"evenodd",clipRule:"evenodd",d:"M16.381 3.024l.538 1.158h2.274l.636 2.545H9.68l.637-2.545h2.558l.538-1.158c.292-.63.955-1.024 1.484-1.024.53 0 1.193.394 1.485 1.024zm6.01 5.703l-1.636-6.545h-2.56C17.6.898 16.262 0 14.897 0c-1.364 0-2.703.898-3.299 2.182H8.755L7.118 8.727h15.273zM7 15h6v-2H7v2zm6 5H7v-2h6v2zm-6 5h6v-2H7v2z"}))},wNe=bNe;var E5={};$(E5,{icon:()=>jNe});var uHt=P(L());var ONe=["title","titleId"];function HF(){return HF=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function _Ne(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var SNe=function(t){var n=t.title,r=t.titleId,o=xNe(t,ONe);return a("svg",HF({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M11.276 29l.594 2H0l7.621-14.29.811 2.73L3.333 29h7.943zM28.92 31l-4.987-16.598A16 16 0 008.688 3l1.8 6H8.4L6 1h2.607a18 18 0 0117.241 12.828L31 31h-2.08z"}),a("path",{className:"euiIcon__fillSecondary",d:"M12.037 14.02L16.492 29h6.827l-2.333-7.849a10 10 0 00-8.949-7.13zM9.35 12h2.05a12 12 0 0111.503 8.581L26 31H15L9.35 12z"}))},jNe=SNe;var C5={};$(C5,{icon:()=>CNe});var pHt=P(L());var INe=["title","titleId"];function VF(){return VF=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function PNe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ENe=function(t){var n=t.title,r=t.titleId,o=kNe(t,INe);return a("svg",VF({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M29 9H3a3 3 0 01-3-3V3a3 3 0 013-3h26a3 3 0 013 3v3a3 3 0 01-3 3zM3 2a1 1 0 00-1 1v3a1 1 0 001 1h26a1 1 0 001-1V3a1 1 0 00-1-1H3z"}),a("path",{className:"euiIcon__fillSecondary",d:"M29 32H3a3 3 0 01-3-3V14a3 3 0 013-3h26a3 3 0 013 3v15a3 3 0 01-3 3zM3 13a1 1 0 00-1 1v15a1 1 0 001 1h26a1 1 0 001-1V14a1 1 0 00-1-1H3z"}),a("path",{d:"M7.29 17.71l3.3 3.29-3.3 3.29 1.42 1.42 4.7-4.71-4.7-4.71zM15 24h9v2h-9z"}))},CNe=ENe;var A5={};$(A5,{icon:()=>zNe});var dHt=P(L());var ANe=["title","titleId"];function qF(){return qF=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function TNe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var RNe=function(t){var n=t.title,r=t.titleId,o=MNe(t,ANe);return a("svg",qF({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M0 0v16h8.7l5.3-6V0H0zm2 2h10v7H7v5H2V2zm8.45 9L9 12.64V11h1.45zM18 16v16h8.7l5.3-6V16H18zm2 2h10v7h-5v5h-5V18zm8.45 9L27 28.64V27h1.45z"}),a("path",{className:"euiIcon__fillSecondary",d:"M5 18H3c0 6.075 4.925 11 11 11h2v-2h-2a9 9 0 01-9-9zM18 3h-2v2h2a9 9 0 019 9h2c0-6.075-4.925-11-11-11z"}))},zNe=RNe;var M5={};$(M5,{icon:()=>WNe});var hHt=P(L());var LNe=["title","titleId"];function UF(){return UF=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function NNe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var FNe=function(t){var n=t.title,r=t.titleId,o=DNe(t,LNe);return a("svg",UF({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M29 9H3a3 3 0 01-3-3V3a3 3 0 013-3h26a3 3 0 013 3v3a3 3 0 01-3 3zM3 2a1 1 0 00-1 1v3a1 1 0 001 1h26a1 1 0 001-1V3a1 1 0 00-1-1H3z"}),a("path",{className:"euiIcon__fillSecondary",d:"M12 20H3a3 3 0 01-3-3v-3a3 3 0 013-3h9a3 3 0 013 3v3a3 3 0 01-3 3zm-9-7a1 1 0 00-1 1v3a1 1 0 001 1h9a1 1 0 001-1v-3a1 1 0 00-1-1H3z"}),a("path",{d:"M12 31H3a3 3 0 01-3-3v-3a3 3 0 013-3h9a3 3 0 013 3v3a3 3 0 01-3 3zm-9-7a1 1 0 00-1 1v3a1 1 0 001 1h9a1 1 0 001-1v-3a1 1 0 00-1-1H3z"}),a("path",{className:"euiIcon__fillSecondary",d:"M29 31h-9a3 3 0 01-3-3V14a3 3 0 013-3h9a3 3 0 013 3v14a3 3 0 01-3 3zm-9-18a1 1 0 00-1 1v14a1 1 0 001 1h9a1 1 0 001-1V14a1 1 0 00-1-1h-9z"}))},WNe=FNe;var T5={};$(T5,{icon:()=>UNe});var vHt=P(L());var BNe=["title","titleId"];function $F(){return $F=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function VNe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var qNe=function(t){var n=t.title,r=t.titleId,o=HNe(t,BNe);return a("svg",$F({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M21 28h-2v-8.49l.6-.26A9 9 0 0021 3.52V11H11V3.52a9 9 0 001.4 15.73l.6.26V28h-2v-7.21A11 11 0 0111.6.92L13 .31V9h6V.31l1.4.61a11 11 0 01.6 19.87V28z"}),a("path",{className:"euiIcon__fillSecondary",d:"M11 30h10v2H11z"}))},UNe=qNe;var R5={};$(R5,{icon:()=>KNe});var bHt=P(L());var $Ne=["title","titleId"];function JF(){return JF=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function GNe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var XNe=function(t){var n=t.title,r=t.titleId,o=JNe(t,$Ne);return a("svg",JF({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M8.33 23.67l4.79-10.55 10.55-4.79-4.79 10.55-10.55 4.79zm6.3-9l-2.28 5 5-2.28 2.28-5-5 2.28z"}),a("path",{d:"M16 0C7.163 0 0 7.163 0 16s7.163 16 16 16 16-7.163 16-16A16 16 0 0016 0zm1 29.95V28h-2v1.95A14 14 0 012.05 17H4v-2H2.05A14 14 0 0115 2.05V4h2V2.05A14 14 0 0129.95 15H28v2h1.95A14 14 0 0117 29.95z"}))},KNe=XNe;var z5={};$(z5,{icon:()=>tFe});var OHt=P(L());var YNe=["title","titleId"];function GF(){return GF=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ZNe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var eFe=function(t){var n=t.title,r=t.titleId,o=QNe(t,YNe);return a("svg",GF({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M3 22h3v2H1V1h23v5h-2V3H3z"}),a("path",{d:"M15.228 29c1.492-1.678 1.353-2.859.009-5.654-.049-.1-.049-.1-.097-.203-1.369-2.855-1.626-4.491-.325-6.582 2.796-4.498 9.514-2.642 14.185 2.317V10H10v19h5.228zm2.47 0H29v-6.983c-3.88-5.406-10.376-7.795-12.487-4.4-.83 1.336-.669 2.37.43 4.662l.097.2c1.352 2.814 1.731 4.63.659 6.521zM31 8v23H8V8h23z"}))},tFe=eFe;var L5={};$(L5,{icon:()=>aFe});var _Ht=P(L());var rFe=["title","titleId"];function XF(){return XF=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function oFe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var iFe=function(t){var n=t.title,r=t.titleId,o=nFe(t,rFe);return a("svg",XF({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M8 18h16v2H8zM8 13h9v2H8zM8 23h16v2H8z"}),a("path",{d:"M21.41 0H5a3 3 0 00-3 3v26a3 3 0 003 3h22a3 3 0 003-3V8.59L21.41 0zM22 3.41L26.59 8H22V3.41zM27 30H5a1 1 0 01-1-1V3a1 1 0 011-1h15v8h8v19a1 1 0 01-1 1z"}))},aFe=iFe;var D5={};$(D5,{icon:()=>pFe});var jHt=P(L());var lFe=["title","titleId"];function KF(){return KF=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function uFe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var cFe=function(t){var n=t.title,r=t.titleId,o=sFe(t,lFe);return a("svg",KF({width:32,height:32,viewBox:"0 0 32 32",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M2.996 18.636L0 20.434v6.132l6 3.6 5-3 5 3 5-3 5 3 6-3.6v-6.132l-5-3v-5l-5-3v-5l-6-3.6-6 3.6v2.832l2 .033V5.566l4-2.4 4 2.4v3.868l-1.996 1.197 1 1.733L21 11.166l4 2.4v3.868l-4 2.4-2.257-1.354-.971 1.75L20 21.565v3.868l-4 2.4-4-2.4v-1.7l-2-.033v1.733l-4 2.4-4-2.4v-3.868l1.996-1.197-1-1.733zM22 25.434v-3.868l4-2.4 4 2.4v3.868l-4 2.4-4-2.4z"}),a("path",{className:"euiIcon__fillSecondary",d:"M11 22.166l-6-3.6v-6.132l6-3.6 6 3.6v6.132l-6 3.6zm4-4.732v-3.868l-4-2.4-4 2.4v3.868l4 2.4 4-2.4z"}))},pFe=cFe;var N5={};$(N5,{icon:()=>gFe});var kHt=P(L());var fFe=["title","titleId"];function YF(){return YF=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function mFe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var hFe=function(t){var n=t.title,r=t.titleId,o=dFe(t,fFe);return a("svg",YF({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M29.014 23.89l2.296 1.145L16 32.101.53 24.961l2.49-1.056 2.453 1.132-.003.002L16 29.899l10.69-4.934-.003-.001 2.327-1.074zm-4.972-7.482l7.268 3.627L16 27.101.53 19.961l7.668-3.252c.392.486.838 1.02 1.34 1.604L5.47 20.039 16 24.899l10.69-4.934-3.954-1.973c.493-.58.928-1.107 1.306-1.584z"}),a("path",{d:"M18 9a2 2 0 10-4 0 2 2 0 004 0zm2 0a4 4 0 11-8 0 4 4 0 018 0zm-3.268 12.681l-.732.787-.732-.787c-3.557-3.824-5.817-6.462-6.81-7.96A8.746 8.746 0 017 8.875C7 3.97 11.033 0 16 0s9 3.97 9 8.875a8.746 8.746 0 01-1.459 4.846c-.992 1.498-3.252 4.136-6.809 7.96zm5.142-9.064A6.747 6.747 0 0023 8.875C23 5.081 19.87 2 16 2S9 5.081 9 8.875c0 1.349.394 2.636 1.126 3.742.846 1.277 2.812 3.593 5.874 6.912 3.062-3.32 5.028-5.635 5.874-6.912z"}))},gFe=hFe;var F5={};$(F5,{icon:()=>OFe});var EHt=P(L());var vFe=["title","titleId"];function QF(){return QF=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function bFe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var wFe=function(t){var n=t.title,r=t.titleId,o=yFe(t,vFe);return a("svg",QF({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M24 20a4 4 0 110-8 4 4 0 010 8zm0-6a2 2 0 100 4 2 2 0 000-4zm-8.2-5.62A4 4 0 1118 1.06a4 4 0 01-2.2 7.32zm0-6a2 2 0 10.01 0h-.01zm.01 29.24a4 4 0 11-.083-8 4 4 0 01.083 8zm0-6a2 2 0 10.39 0 2 2 0 00-.4 0h.01z"}),a("path",{d:"M18 17v-2h-6.14a4 4 0 00-.86-1.64l2.31-3.44-1.68-1.12-2.31 3.44A4 4 0 008 12a4 4 0 100 8 4 4 0 001.32-.24l2.31 3.44 1.66-1.12L11 18.64a4 4 0 00.86-1.64H18zM6 16a2 2 0 114 0 2 2 0 01-4 0z"}))},OFe=wFe;var W5={};$(W5,{icon:()=>IFe});var AHt=P(L());var xFe=["title","titleId"];function ZF(){return ZF=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function SFe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var jFe=function(t){var n=t.title,r=t.titleId,o=_Fe(t,xFe);return a("svg",ZF({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M9.727 2.91V.97c-1.357 0-4.18 0-5.818 1.94-.97 1.182-1.328 2.908-.97 4.983.563 3.307.97 6.332.301 7.157-.3.31-.97.465-2.24.465v1.94c1.27 0 1.94.155 2.25.494.698.824.262 3.879-.3 7.156-.35 2.124-.01 3.802.96 4.956C5.527 32 8.35 32 9.726 32v-1.94c-1.144 0-3.287 0-4.315-1.221a4.112 4.112 0 01-.533-3.414c.843-5.042.97-7.37-.136-8.727-.068-.077-.145-.136-.213-.203-.068-.068.145-.127.213-.204 1.144-1.367.97-3.695.136-8.727a4.112 4.112 0 01.543-3.414C6.44 2.91 8.583 2.91 9.727 2.91zM32.03 17.454v-1.94c-1.27 0-1.94-.155-2.25-.494-.698-.825-.261-3.88.301-7.157.35-2.123 0-3.801-.97-4.984C27.493.94 24.672.94 23.294.94v1.97c1.145 0 3.288 0 4.315 1.22a4.112 4.112 0 01.544 3.414c-.844 5.043-.97 7.37.135 8.728.068.077.146.135.214.203.067.068-.146.126-.214.204-1.144 1.367-.97 3.694-.135 8.727.329 1.162.13 2.41-.544 3.413-1.018 1.242-3.16 1.242-4.305 1.242V32c1.358 0 4.18 0 5.818-1.94.97-1.182 1.329-2.908.97-4.984-.563-3.306-.97-6.332-.3-7.156.3-.31.969-.465 2.24-.465z"}),a("path",{className:"euiIcon__fillSecondary",d:"M26.212 15.515h-2.007a7.758 7.758 0 00-6.72-6.72V6.788h-1.94v2.007a7.758 7.758 0 00-6.72 6.72H6.818v1.94h2.007a7.758 7.758 0 006.72 6.72v2.007h1.94v-2.007a7.758 7.758 0 006.72-6.72h2.007v-1.94zm-8.727 6.7v-1.851h-1.94v1.852a5.818 5.818 0 01-4.76-4.761h1.851v-1.94h-1.852a5.818 5.818 0 014.761-4.761v1.852h1.94v-1.852a5.818 5.818 0 014.761 4.761h-1.852v1.94h1.852a5.818 5.818 0 01-4.761 4.76z"}))},IFe=jFe;var B5={};$(B5,{icon:()=>AFe});var THt=P(L());var kFe=["title","titleId"];function eW(){return eW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function EFe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var CFe=function(t){var n=t.title,r=t.titleId,o=PFe(t,kFe);return a("svg",eW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M4.14 15.39a8.058 8.058 0 01-2.2-4.043A6.788 6.788 0 014.198 5.47a6.73 6.73 0 018.727-.213l1.26-1.464a8.65 8.65 0 00-11.277.232A8.727 8.727 0 00.068 11.6a10.172 10.172 0 002.793 5.275l1.28-1.484z"}),a("path",{d:"M15.515 31.274L4.548 18.454 15.855 4.763a8.67 8.67 0 0112.266-.746 8.727 8.727 0 012.91 7.205c-.243 2.695-2.037 4.732-3.482 6.37L15.515 31.275zm-8.427-12.82l8.427 9.862 10.55-11.995c1.32-1.503 2.822-3.21 3.007-5.265a6.788 6.788 0 00-2.24-5.586 6.73 6.73 0 00-9.504.563L7.088 18.455z"}))},AFe=CFe;var H5={};$(H5,{icon:()=>LFe});var zHt=P(L());var MFe=["title","titleId"];function tW(){return tW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function RFe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var zFe=function(t){var n=t.title,r=t.titleId,o=TFe(t,MFe);return a("svg",tW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M17 18v-2h-2v2H3v6h2v-4h10v4h2v-4h10v4h2v-6z"}),a("path",{className:"euiIcon__fillSecondary",d:"M4 32a3 3 0 110-6 3 3 0 010 6zm0-4a1 1 0 100 2 1 1 0 000-2zm12 4a3 3 0 110-6 3 3 0 010 6zm0-4a1 1 0 100 2 1 1 0 000-2zm12 4a3 3 0 110-6 3 3 0 010 6zm0-4a1 1 0 100 2 1 1 0 000-2zM23 8V6h-2.1a5 5 0 00-.73-1.75l1.49-1.49-1.42-1.42-1.49 1.49A5 5 0 0017 2.1V0h-2v2.1a5 5 0 00-1.75.73l-1.49-1.49-1.42 1.42 1.49 1.49A5 5 0 0011.1 6H9v2h2.1a5 5 0 00.73 1.75l-1.49 1.49 1.41 1.41 1.49-1.49a5 5 0 001.76.74V14h2v-2.1a5 5 0 001.75-.73l1.49 1.49 1.41-1.41-1.48-1.5A5 5 0 0020.9 8H23zm-7 2a3 3 0 110-6 3 3 0 010 6z"}),a("path",{d:"M16 8a1 1 0 01-1-1 1.39 1.39 0 010-.2.65.65 0 01.06-.18.74.74 0 01.09-.18 1.61 1.61 0 01.12-.15.93.93 0 01.33-.21 1 1 0 011.09.21l.12.15a.78.78 0 01.09.18.62.62 0 01.1.18 1.27 1.27 0 010 .2 1 1 0 01-1 1z"}))},LFe=zFe;var V5={};$(V5,{icon:()=>BFe});var DHt=P(L());var DFe=["title","titleId"];function rW(){return rW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function FFe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var WFe=function(t){var n=t.title,r=t.titleId,o=NFe(t,DFe);return a("svg",rW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M20 14h-8a3 3 0 01-3-3V3a3 3 0 013-3h8a3 3 0 013 3v8a3 3 0 01-3 3zM12 2a1 1 0 00-1 1v8a1 1 0 001 1h8a1 1 0 001-1V3a1 1 0 00-1-1h-8zM17 18v-2h-2v2H3v6h2v-4h10v4h2v-4h10v4h2v-6z"}),a("path",{className:"euiIcon__fillSecondary",d:"M4 32a3 3 0 110-6 3 3 0 010 6zm0-4a1 1 0 100 2 1 1 0 000-2zm12 4a3 3 0 110-6 3 3 0 010 6zm0-4a1 1 0 100 2 1 1 0 000-2zm12 4a3 3 0 110-6 3 3 0 010 6zm0-4a1 1 0 100 2 1 1 0 000-2zM13 4h6v2h-6zM13 8h6v2h-6z"}))},BFe=WFe;var q5={};$(q5,{icon:()=>$Fe});var FHt=P(L());var HFe=["title","titleId"];function nW(){return nW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function qFe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var UFe=function(t){var n=t.title,r=t.titleId,o=VFe(t,HFe);return a("svg",nW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M32 26v-2h-2.1a5 5 0 00-.73-1.75l1.49-1.49-1.41-1.41-1.49 1.49A5 5 0 0026 20.1V18h-2v2.1a5 5 0 00-1.75.73l-1.49-1.49-1.41 1.41 1.49 1.49A5 5 0 0020.1 24H18v2h2.1a5 5 0 00.73 1.75l-1.49 1.49 1.41 1.41 1.49-1.49a5 5 0 001.76.74V32h2v-2.1a5 5 0 001.75-.73l1.49 1.49 1.41-1.41-1.49-1.49A5 5 0 0029.9 26H32zm-7 2a3 3 0 110-6 3 3 0 010 6z"}),a("path",{d:"M25.71 24.29a1 1 0 00-1.09-.21 1.15 1.15 0 00-.33.21.93.93 0 00-.21.33 1 1 0 001.3 1.3 1.15 1.15 0 00.33-.21 1 1 0 00.21-1.09.94.94 0 00-.21-.33z"}),a("path",{className:"euiIcon__fillSecondary",d:"M5 6h16v2H5zM5 12h16v2H5zM5 18h10v2H5zM5 24h8v2H5z"}),a("path",{d:"M16 32H3a3 3 0 01-3-3V3a3 3 0 013-3h20a3 3 0 013 3v13h-2V3a1 1 0 00-1-1H3a1 1 0 00-1 1v26a1 1 0 001 1h13v2z"}))},$Fe=UFe;var U5={};$(U5,{icon:()=>YFe});var BHt=P(L());var JFe=["title","titleId"];function oW(){return oW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function XFe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var KFe=function(t){var n=t.title,r=t.titleId,o=GFe(t,JFe);return a("svg",oW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M23.793 14.293l1.414 1.414-6.408 6.409-3.75-3.25-4.342 4.341-1.414-1.414 5.658-5.659 3.75 3.25 5.092-5.091zM12 11v5l-2 2v-7h2zm10-6v8l-2 2V5h2zm-5 3v7l-2-2V8h2z"}),a("path",{d:"M17 0c8.284 0 15 6.716 15 15 0 8.284-6.716 15-15 15-3.782 0-7.238-1.4-9.876-3.71l-5.417 5.417-1.414-1.414 5.417-5.417A14.943 14.943 0 012 15c0-1.05.108-2.074.313-3.062l1.906.672C4.075 13.385 4 14.184 4 15c0 7.18 5.82 13 13 13s13-5.82 13-13S24.18 2 17 2c-1.002 0-1.978.113-2.915.328l-.75-1.877A15.031 15.031 0 0117 0zM9.621 1.937l.75 1.877a13.062 13.062 0 00-4.82 5.024l-1.907-.673a15.068 15.068 0 015.977-6.228z"}))},YFe=KFe;var $5={};$($5,{icon:()=>rWe});var VHt=P(L());var QFe=["title","titleId"];function iW(){return iW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function eWe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var tWe=function(t){var n=t.title,r=t.titleId,o=ZFe(t,QFe);return a("svg",iW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M1 8c3.983 0 7.732 1.013 11.001 2.797v2.312A20.887 20.887 0 002 10.023v11.025c4.85.462 9.27 4.183 9.955 8.691l.035.261H12v2h-1.938l-.018-1.236c-.116-4.015-4.336-7.631-8.793-7.76L0 22.986V8h1zm13-8h1c9.28 0 16.825 7.437 16.997 16.677L32 17v15h-2V17c0-7.84-6.014-14.274-13.68-14.943L16 2.033v7.681l-2-1.143V0h1-1z"}),a("path",{className:"euiIcon__fillSecondary",d:"M26.997 30.636L27.009 32H14V11.305l1.483.82c6.994 3.861 11.382 10.735 11.514 18.51zm-2.048-1.04C24.505 23.556 21.205 18.2 16 14.771V30h8.974l-.025-.404z"}))},rWe=tWe;var J5={};$(J5,{icon:()=>lWe});var UHt=P(L());var nWe=["title","titleId"];function aW(){return aW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function iWe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var aWe=function(t){var n=t.title,r=t.titleId,o=oWe(t,nWe);return a("svg",aW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M16 21a5 5 0 110-10 5 5 0 010 10zm0-8a3 3 0 100 6 3 3 0 000-6z"}),a("path",{d:"M20 32h-8v-4.06a1 1 0 00-1.61-.67l-2.88 2.87-5.65-5.65 2.87-2.87a.92.92 0 00.2-1 .93.93 0 00-.86-.6H0V12h4.06a.92.92 0 00.85-.58.94.94 0 00-.19-1L1.86 7.51l5.65-5.65 2.87 2.87A1 1 0 0012 4.06V0h8v4.06a1 1 0 001.61.67l2.87-2.87 5.66 5.66-2.87 2.87a.92.92 0 00-.2 1 .93.93 0 00.86.6H32v8h-4.06a.92.92 0 00-.85.58.94.94 0 00.19 1l2.87 2.87-5.66 5.66-2.87-2.87a1 1 0 00-1.61.67L20 32zm-6-2h4v-2.06a3 3 0 015-2.08l1.46 1.46 2.83-2.83L25.86 23a3 3 0 012.08-5H30v-4h-2.06a3 3 0 01-2.08-5l1.46-1.46-2.83-2.85L23 6.14a3 3 0 01-5-2.08V2h-4v2.06a3 3 0 01-5 2.08L7.51 4.69 4.69 7.51 6.14 9a3 3 0 01-2.08 5H2v4h2.06a3 3 0 012.08 5l-1.45 1.49 2.83 2.83L9 25.86a3 3 0 015 2.08V30z"}))},lWe=aWe;var G5={};$(G5,{icon:()=>fWe});var JHt=P(L());var sWe=["title","titleId"];function lW(){return lW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function cWe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var pWe=function(t){var n=t.title,r=t.titleId,o=uWe(t,sWe);return a("svg",lW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M16 32C7.163 32 0 24.837 0 16S7.163 0 16 0s16 7.163 16 16a16 16 0 01-16 16zm0-30C8.268 2 2 8.268 2 16s6.268 14 14 14 14-6.268 14-14A14 14 0 0016 2z"}),a("path",{className:"euiIcon__fillSecondary",d:"M28 16h-2c0-5.523-4.477-10-10-10S6 10.477 6 16H4C4 9.373 9.373 4 16 4s12 5.373 12 12z"}),a("path",{d:"M21.71 11.71L20.3 10.3 18 12.57a4 4 0 00-2-.57 4 4 0 104 4 4 4 0 00-.57-2l2.28-2.29zM16 18a2 2 0 110-4 2 2 0 010 4z"}))},fWe=pWe;var X5={};$(X5,{icon:()=>vWe});var XHt=P(L());var dWe=["title","titleId"];function sW(){return sW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function hWe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var gWe=function(t){var n=t.title,r=t.titleId,o=mWe(t,dWe);return a("svg",sW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M30 19.092v12.88H2v-5.386l6.747-6.747.708.708c.236.236.48.463.733.68L4 27.414v2.558h24v-8.91c.186-.166.369-.339.546-.516L30 19.092zm-20.85-3.19A10.955 10.955 0 018 11C8 4.925 12.925 0 19 0s11 4.925 11 11c0 1.76-.414 3.425-1.15 4.9l-1.51-1.51A8.973 8.973 0 0028 11a9 9 0 10-17.34 3.391l-1.51 1.51z"}),a("path",{className:"euiIcon__fillSecondary",d:"M19 20a8.96 8.96 0 005.618-1.968l-4.202-4.204a2 2 0 00-2.828 0l-4.205 4.205A8.96 8.96 0 0019 20zm-2.826-7.586a4 4 0 015.656 0l5.656 5.657-.707.707A10.967 10.967 0 0119 22a10.967 10.967 0 01-7.778-3.221l-.707-.707 5.659-5.658z"}))},vWe=gWe;var K5={};$(K5,{icon:()=>xWe});var YHt=P(L());var yWe=["title","titleId"];function uW(){return uW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function wWe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var OWe=function(t){var n=t.title,r=t.titleId,o=bWe(t,yWe);return a("svg",uW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M10 18v.56a1 1 0 01-.68.95L3 21.61V10a1 1 0 01.4-.8l3.2-2.4-1.2-1.6-3.2 2.4A3 3 0 001 10v12a3 3 0 001.2 2.4l3.2 2.4 1.2-1.6-2.47-1.85 5.82-1.95A3 3 0 0012 18.56V18h-2zM29.8 7.6l-3.2-2.4-1.2 1.6 3.2 2.4a1 1 0 01.4.8v11.61l-6.32-2.11a1 1 0 01-.68-.95V18h-2v.56a3 3 0 002.05 2.85l5.82 1.94-2.47 1.85 1.2 1.6 3.2-2.4A3 3 0 0031 22V10a3 3 0 00-1.2-2.4z"}),a("path",{d:"M11 6A3 3 0 018.88.88a3.07 3.07 0 014.24 0A3 3 0 0111 6zm0-4a1 1 0 10-.012 2A1 1 0 0011 2zm0 30a3 3 0 01-2.12-5.12 3.07 3.07 0 014.24 0A3 3 0 0111 32zm0-4a1 1 0 10-.012 2A1 1 0 0011 28zm0-12a3 3 0 01-2.12-5.12 3.07 3.07 0 014.24 0A3 3 0 0111 16zm0-4a1 1 0 10-.012 2A1 1 0 0011 12zm10-6A3 3 0 0118.88.88a3.07 3.07 0 014.24 0A3 3 0 0121 6zm0-4a1 1 0 10-.012 2A1 1 0 0021 2zm0 30a3 3 0 01-2.12-5.12 3.07 3.07 0 014.24 0A3 3 0 0121 32zm0-4a1 1 0 10-.012 2A1 1 0 0021 28zm0-12a3 3 0 01-2.12-5.12 3.07 3.07 0 014.24 0A3 3 0 0121 16zm0-4a1 1 0 10-.012 2A1 1 0 0021 12z"}))},xWe=OWe;var Y5={};$(Y5,{icon:()=>kWe});var ZHt=P(L());var _We=["title","titleId"];function cW(){return cW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function jWe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var IWe=function(t){var n=t.title,r=t.titleId,o=SWe(t,_We);return a("svg",cW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M1.81 15.19A8.94 8.94 0 0115.62 3.86l.38.42.38-.42a8.94 8.94 0 0114.26 10.68l-1.7-1.07a6.94 6.94 0 00-11.07-8.28L16 7.29l-1.87-2.1A6.94 6.94 0 003.41 14l-1.6 1.19zM16 31.18l-7.74-8.51 1.48-1.34L16 28.21l6.26-6.88 1.48 1.34z"}),a("path",{className:"euiIcon__fillSecondary",d:"M16.16 23.29l-4.1-7.17L10.62 19H0v-2h9.38l2.56-5.12 3.9 6.83 4.13-10.32L23.66 17H32v2h-9.66l-2.31-5.39z"}))},kWe=IWe;var Q5={};$(Q5,{icon:()=>MWe});var tVt=P(L());var PWe=["title","titleId"];function pW(){return pW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function CWe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var AWe=function(t){var n=t.title,r=t.titleId,o=EWe(t,PWe);return a("svg",pW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M25 2h-5V0h-2v2h-3V0h-2v2h-3V0H8v2H3v26h22V2zm-2 24H5V4h3v2h2V4h3v2h2V4h3v2h2V4h3v22z"}),a("path",{d:"M27 7v23H8v2h21V7z"}),a("path",{className:"euiIcon__fillSecondary",d:"M8 12h12v2H8zM8 17h12v2H8z"}))},MWe=AWe;var Z5={};$(Z5,{icon:()=>DWe});var nVt=P(L());var TWe=["title","titleId"];function fW(){return fW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function zWe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var LWe=function(t){var n=t.title,r=t.titleId,o=RWe(t,TWe);return a("svg",fW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M16 20a4 4 0 110-8 4 4 0 010 8zm0-6a2 2 0 100 4 2 2 0 000-4z"}),a("path",{d:"M8 4a4 4 0 10-4 4 4 4 0 002-.57l5.27 5.27 1.41-1.41L7.43 6A4 4 0 008 4zM4 6a2 2 0 110-4 2 2 0 010 4zm16.71 6.71L26 7.43A4 4 0 0028 8a4 4 0 10-4-4 4 4 0 00.57 2l-5.27 5.27 1.41 1.44zM28 2a2 2 0 110 4 2 2 0 010-4zM11.29 19.29L6 24.57A4 4 0 004 24a4 4 0 104 4 4 4 0 00-.57-2l5.27-5.27-1.41-1.44zM4 30a2 2 0 110-4 2 2 0 010 4zm24-6a4 4 0 00-2 .57l-5.27-5.27-1.41 1.41L24.57 26a4 4 0 00-.57 2 4 4 0 104-4zm0 6a2 2 0 110-4 2 2 0 010 4z"}))},DWe=LWe;var e4={};$(e4,{icon:()=>HWe});var iVt=P(L());var NWe=["title","titleId"];function dW(){return dW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function WWe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var BWe=function(t){var n=t.title,r=t.titleId,o=FWe(t,NWe);return a("svg",dW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M29 12a3 3 0 00-3 3h-4a3 3 0 00-3-3h-6a3 3 0 00-3 3H6a3 3 0 00-3-3H0v14h3a3 3 0 003-3h4a3 3 0 003 3h6a3 3 0 003-3h4a3 3 0 003 3h3V12h-3zM3 24H2V14h1a1 1 0 011 1v8a1 1 0 01-1 1zm17-3v2a1 1 0 01-1 1h-6a1 1 0 01-1-1v-2H6v-4h6v-2a1 1 0 011-1h6a1 1 0 011 1v2h6v4h-6zm10 3h-1a1 1 0 01-1-1v-8a1 1 0 011-1h1v10z"}),a("path",{className:"euiIcon__fillSecondary",d:"M22 6H10v2h5v2h2V8h5z"}))},HWe=BWe;var t4={};$(t4,{icon:()=>JWe});var lVt=P(L());var VWe=["title","titleId"];function mW(){return mW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function UWe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var $We=function(t){var n=t.title,r=t.titleId,o=qWe(t,VWe);return a("svg",mW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M16 32C7.163 32 0 24.837 0 16S7.163 0 16 0s16 7.163 16 16a16 16 0 01-16 16zm0-30C8.268 2 2 8.268 2 16s6.268 14 14 14 14-6.268 14-14A14 14 0 0016 2z"}),a("path",{className:"euiIcon__fillSecondary",d:"M15 4h2v9.17A3.009 3.009 0 0118.83 15H26v2h-7.17A3.001 3.001 0 1115 13.17V4zm1 13a1 1 0 100-2 1 1 0 000 2z"}))},JWe=$We;var r4={};$(r4,{icon:()=>QWe});var uVt=P(L());var GWe=["title","titleId"];function hW(){return hW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function KWe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var YWe=function(t){var n=t.title,r=t.titleId,o=XWe(t,GWe);return a("svg",hW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M25 5h-.17v2H25a1 1 0 011 1v20a1 1 0 01-1 1H7a1 1 0 01-1-1V8a1 1 0 011-1h.17V5H7a3 3 0 00-3 3v20a3 3 0 003 3h18a3 3 0 003-3V8a3 3 0 00-3-3z"}),a("path",{d:"M23 3h-3V0h-8v3H9v6h14V3zm-2 4H11V5h3V2h4v3h3v2z"}),a("path",{className:"euiIcon__fillSecondary",d:"M10 13h12v2H10zM10 18h12v2H10zM10 23h12v2H10z"}))},QWe=YWe;var n4={};$(n4,{icon:()=>nBe});var pVt=P(L());var ZWe=["title","titleId"];function gW(){return gW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function tBe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var rBe=function(t){var n=t.title,r=t.titleId,o=eBe(t,ZWe);return a("svg",gW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M20.38 7.001L17 9.619V0h-2v9.619l-3.37-2.618-1.25 1.513L16 12.878l5.63-4.364z"}),a("path",{d:"M21.06.165l-1.11 1.61 9.25 5.983L16 16.29 2.8 7.758l9.25-5.983-1.1-1.61L0 7.234v13.653l16 10.337 16-10.337V7.234L21.06.164zM2 9.57l13 8.407v10.279L2 19.84V9.57zm15 18.676V17.978l13-8.407V19.85l-13 8.397z"}))},nBe=rBe;var o4={};$(o4,{icon:()=>sBe});var dVt=P(L());var oBe=["title","titleId"];function vW(){return vW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function aBe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var lBe=function(t){var n=t.title,r=t.titleId,o=iBe(t,oBe);return a("svg",vW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M11.63 8h7.38v2h-7.38z"}),a("path",{d:"M7 8h3.19v2H7z"}),a("path",{className:"euiIcon__fillSecondary",d:"M7 16h7.38v2H7z"}),a("path",{d:"M15.81 16H19v2h-3.19zM7 12h9v2H7z"}),a("path",{d:"M13 0C5.82 0 0 5.82 0 13s5.82 13 13 13 13-5.82 13-13A13 13 0 0013 0zm0 24C6.925 24 2 19.075 2 13S6.925 2 13 2s11 4.925 11 11-4.925 11-11 11zM22.581 23.993l1.414-1.414 7.708 7.708-1.414 1.414z"}))},sBe=lBe;var i4={};$(i4,{icon:()=>dBe});var hVt=P(L());var uBe=["title","titleId"];function yW(){return yW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function pBe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var fBe=function(t){var n=t.title,r=t.titleId,o=cBe(t,uBe);return a("svg",yW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M14 32l-.36-.14A21.07 21.07 0 010 12.07V5.44L14 .06l14 5.38v6.63a21.07 21.07 0 01-13.64 19.78L14 32zM2 6.82v5.25a19.08 19.08 0 0012 17.77 19.08 19.08 0 0012-17.77V6.82L14 2.2 2 6.82z"}),a("path",{className:"euiIcon__fillSecondary",d:"M9 17.83h2V23H9zM11 10.18V7H9v3.18a3 3 0 102 0zM10 14a1 1 0 110-2 1 1 0 010 2zM17 7h2v5.17h-2zM21 17a3 3 0 10-4 2.82V23h2v-3.18A3 3 0 0021 17zm-3 1a1 1 0 110-2 1 1 0 010 2z"}))},dBe=fBe;var a4={};$(a4,{icon:()=>yBe});var vVt=P(L());var mBe=["title","titleId"];function bW(){return bW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function gBe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var vBe=function(t){var n=t.title,r=t.titleId,o=hBe(t,mBe);return a("svg",bW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M3 10h4v2H5v7.928c0 1.299.808 2.795 2.88 4.48 1.83 1.489 4.524 3.02 8.12 4.584V26h2v5.992l-1.38-.567c-4.372-1.797-7.724-3.613-10-5.465C4.358 24.122 3 22.114 3 19.928V10z"}),a("path",{className:"euiIcon__fillSecondary",d:"M9 10h9v14l-1.272-.458c-1.367-.494-3.23-1.314-4.768-2.39C10.484 20.118 9 18.636 9 16.761V10zm1.895 1.876v4.887c0 .877.744 1.867 2.158 2.856.937.656 2.038 1.219 3.052 1.657v-9.4h-5.21z"}),a("path",{d:"M29 1H9v7h2V2.966h16V16.73c0 .558-.245 1.128-.756 1.72-.515.596-1.256 1.158-2.12 1.668-1.381.818-2.961 1.434-4.124 1.817V24c1.26-.378 3.334-1.12 5.155-2.197.965-.57 1.905-1.261 2.612-2.08.712-.822 1.233-1.827 1.233-2.992V1z"}))},yBe=vBe;var l4={};$(l4,{icon:()=>_Be});var bVt=P(L());var bBe=["title","titleId"];function wW(){return wW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function OBe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var xBe=function(t){var n=t.title,r=t.titleId,o=wBe(t,bBe);return a("svg",wW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M4 4h6v2H4zM22 4h6v2h-6zM4 22h6v2H4z"}),a("path",{d:"M0 14h14V0H0v14zM2 2h10v10H2V2zm16-2v14h14V0H18zm12 12H20V2h10v10zM0 32h14V18H0v14zm2-12h10v10H2V20zm16 12h14V18H18v14zm2-12h10v10H20V20z"}),a("path",{className:"euiIcon__fillSecondary",d:"M22 22h6v2h-6z"}))},_Be=xBe;var s4={};$(s4,{icon:()=>PBe});var OVt=P(L());var SBe=["title","titleId"];function OW(){return OW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function IBe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var kBe=function(t){var n=t.title,r=t.titleId,o=jBe(t,SBe);return a("svg",OW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M18 6h9v2h-9zM5 6h9v2H5zM5 12h9v2H5zM18 12h9v2h-9zM5 18h9v2H5zM18 18h9v2h-9zM18 24h9v2h-9zM5 24h9v2H5z"}),a("path",{d:"M29 32H3a3 3 0 01-3-3V3a3 3 0 013-3h26a3 3 0 013 3v26a3 3 0 01-3 3zM3 2a1 1 0 00-1 1v26a1 1 0 001 1h26a1 1 0 001-1V3a1 1 0 00-1-1H3z"}))},PBe=kBe;var u4={};$(u4,{icon:()=>TBe});var _Vt=P(L());var EBe=["title","titleId"];function xW(){return xW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ABe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var MBe=function(t){var n=t.title,r=t.titleId,o=CBe(t,EBe);return a("svg",xW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M4 4v20.34L16 32l12-7.64V4H4zm22 2v4h-4a3 3 0 00-3 3v5h-6v-5a3 3 0 00-3-3H6V6h20zm-7.87 14L16 22.52 13.87 20h4.26zM6 12h4a1 1 0 011 1v6.7l3.69 4.37-2.58 3.06L6 23.24V12zm7.81 16.22l2.19-2.6 2.19 2.6L16 29.61l-2.19-1.39zm6.08-1.09l-2.58-3.06L21 19.7V13a1 1 0 011-1h4v11.24l-6.11 3.89z"}),a("path",{className:"euiIcon__fillSecondary",d:"M4 0h24v2H4z"}))},TBe=MBe;var c4={};$(c4,{icon:()=>NBe});var jVt=P(L());var RBe=["title","titleId"];function _W(){return _W=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function LBe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var DBe=function(t){var n=t.title,r=t.titleId,o=zBe(t,RBe);return a("svg",_W({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M16 21a5 5 0 110-10 5 5 0 010 10zm0-8a3 3 0 100 6 3 3 0 000-6z"}),a("path",{d:"M27.42 19.69a12 12 0 01-23.11-1l2.27-.45-4.32-4.47L0 19.55l2.39-.47a14 14 0 0027 1.23l-1.97-.62zm2.23-6.77a14 14 0 00-27-1.23l1.9.62a12 12 0 0123.11 1l-2.27.45 4.32 4.46L32 12.45l-2.35.47z"}))},NBe=DBe;var p4={};$(p4,{icon:()=>VBe});var kVt=P(L());var FBe=["title","titleId"];function SW(){return SW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function BBe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var HBe=function(t){var n=t.title,r=t.titleId,o=WBe(t,FBe);return a("svg",SW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M4.216 12.377A10.948 10.948 0 002.181 17H.153a12.941 12.941 0 012.693-6.118l1.37 1.495zm2.948-2.703l-1.37-1.495A12.94 12.94 0 0113 6v2c-2.144 0-4.144.613-5.836 1.674z"}),a("path",{d:"M26 4.414V19c0 7.18-5.82 13-13 13C6.5 32 1.115 27.23.153 21H2.18c.94 5.12 5.427 9 10.819 9 6.075 0 11-4.925 11-11V4.414l-4.293 4.293-1.414-1.414L25 .586l6.707 6.707-1.414 1.414L26 4.414zm-7.836 9.909l1.472 1.354-7.577 8.235-4.835-4.442 1.353-1.473 3.364 3.09 6.223-6.764z"}))},VBe=HBe;var f4={};$(f4,{icon:()=>GBe});var EVt=P(L());var qBe=["title","titleId"];function jW(){return jW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function $Be(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var JBe=function(t){var n=t.title,r=t.titleId,o=UBe(t,qBe);return a("svg",jW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M19.307 3.21a2.91 2.91 0 10-.223 1.94 11.636 11.636 0 018.232 7.049l1.775-.698a13.576 13.576 0 00-9.784-8.291zm-2.822 1.638a.97.97 0 110-1.939.97.97 0 010 1.94zm-4.267.805l-.717-1.774a13.576 13.576 0 00-8.291 9.784 2.91 2.91 0 101.94.223 11.636 11.636 0 017.068-8.233zm-8.34 11.802a.97.97 0 110-1.94.97.97 0 010 1.94zm12.607 8.727a2.91 2.91 0 00-2.599 1.62 11.636 11.636 0 01-8.233-7.05l-1.774.717a13.576 13.576 0 009.813 8.291 2.91 2.91 0 102.793-3.578zm0 3.879a.97.97 0 110-1.94.97.97 0 010 1.94zM32 16.485a2.91 2.91 0 10-4.199 2.599 11.636 11.636 0 01-7.05 8.232l.718 1.775a13.576 13.576 0 008.291-9.813A2.91 2.91 0 0032 16.485zm-2.91.97a.97.97 0 110-1.94.97.97 0 010 1.94z"}),a("path",{className:"euiIcon__fillSecondary",d:"M19.19 16.35a3.879 3.879 0 10-5.42 0 4.848 4.848 0 00-2.134 4.014v1.939h9.697v-1.94a4.848 4.848 0 00-2.143-4.014zm-4.645-2.774a1.94 1.94 0 113.88 0 1.94 1.94 0 01-3.88 0zm-.97 6.788a2.91 2.91 0 115.819 0h-5.818z"}))},GBe=JBe;var d4={};$(d4,{icon:()=>ZBe});var AVt=P(L());var XBe=["title","titleId"];function IW(){return IW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function YBe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var QBe=function(t){var n=t.title,r=t.titleId,o=KBe(t,XBe);return a("svg",IW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M32 32H4a4 4 0 01-4-4V0h2v28a2 2 0 002 2h28v2z"}),a("path",{d:"M6 20h2v7H6zM16 12h2v15h-2zM26 17h2v10h-2z"}),a("path",{d:"M27 6a3 3 0 00-2.08.84L20 4.36A2.2 2.2 0 0020 4a3 3 0 00-6 0c.001.341.062.68.18 1l-5.6 4.46A3 3 0 007 9a3 3 0 103 3 2.93 2.93 0 00-.18-1l5.6-4.48A3 3 0 0017 7a3 3 0 002.08-.84l5 2.48A2.2 2.2 0 0024 9a3 3 0 103-3zM7 13a1 1 0 110-2 1 1 0 010 2zm10-8a1 1 0 110-2 1 1 0 010 2zm10 5a1 1 0 110-2 1 1 0 010 2z"}))},ZBe=QBe;var m4={};$(m4,{icon:()=>oHe});var TVt=P(L());var eHe=["title","titleId"];function kW(){return kW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function rHe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var nHe=function(t){var n=t.title,r=t.titleId,o=tHe(t,eHe);return a("svg",kW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M9.74 7.73l-1.5-1.32a13 13 0 000 17.19l1.5-1.32a11 11 0 010-14.54v-.01z"}),a("path",{d:"M6.51 3.66L5 2.34c-6.377 7.24-6.377 18.09 0 25.33l1.5-1.32C.792 19.867.792 10.153 6.5 3.67l.01-.01zm17.25 2.75l-1.5 1.32a11 11 0 010 14.54l1.5 1.32a13 13 0 000-17.19v.01z"}),a("path",{d:"M27 2.34l-1.5 1.32c5.708 6.483 5.708 16.197 0 22.68l1.5 1.33c6.377-7.24 6.377-18.09 0-25.33z"}),a("path",{className:"euiIcon__fillSecondary",d:"M21 15a5 5 0 10-6 4.9V31h2V19.9a5 5 0 004-4.9zm-5 3a3 3 0 110-6 3 3 0 010 6z"}))},oHe=nHe;var h4={};$(h4,{icon:()=>uHe});var zVt=P(L());var iHe=["title","titleId"];function PW(){return PW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function lHe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var sHe=function(t){var n=t.title,r=t.titleId,o=aHe(t,iHe);return a("svg",PW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M7.81 1H2v30h5.815c1.705 0 3.343-.783 4.38-2.094l3.182-4.023.006.006 2.607-3.137.01-.014a9.42 9.42 0 001.953-4.826 9.112 9.112 0 00-1.891-6.522l-.01-.012-2.603-3.156L12.197 3.1C11.16 1.786 9.52 1 7.81 1zm6.118 7.523l-3.31-4.195C9.968 3.512 8.917 3 7.81 3H4v26h3.815c1.1 0 2.15-.508 2.8-1.32l3.33-4.21-1.796-1.77-.027-.033c-2.84-3.317-2.83-8.195.028-11.287l.004-.004a98.893 98.893 0 011.774-1.853zm4.043 8.099c-.12 1.279-.616 2.537-1.49 3.64l-1.288 1.63-1.578-1.556c-2.19-2.59-2.118-6.3.001-8.596.6-.64 1.119-1.183 1.561-1.635l1.293 1.638v.002l.014.016c.942 1.192 1.446 2.564 1.51 3.949a7.09 7.09 0 01-.023.912z"}),a("path",{fillRule:"evenodd",className:"euiIcon__fillSecondary",d:"M23.801 3c-.382 0-1.052.231-1.925.812-.636.422-1.228.928-1.677 1.357l1.771 2.245.005.007.024.03.008.01c4.003 5.099 3.99 12.057-.035 17.145l-1.793 2.267a8.206 8.206 0 001.769 1.498c.698.427 1.337.629 1.852.629H28V3h-4.199zm-6.148 23.842l.765 1.053.023.027c.717.851 1.566 1.607 2.464 2.156.89.544 1.89.922 2.895.922H30V1h-6.199c-.987 0-2.066.505-3.032 1.146a14.934 14.934 0 00-2.352 1.974l-.276.288-.595.628 2.855 3.619.006.006c3.459 4.375 3.457 10.329-.004 14.704l-2.75 3.477z"}))},uHe=sHe;var g4={};$(g4,{icon:()=>mHe});var DVt=P(L());var cHe=["title","titleId"];function EW(){return EW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function fHe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var dHe=function(t){var n=t.title,r=t.titleId,o=pHe(t,cHe);return a("svg",EW({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M2 4V2h2v2H2zm5 0V2h2v2H7zm5 0V2h2v2h-2zM2 9V7h2v2H2zm5 0V7h2v2H7zm5 0V7h2v2h-2zM2 14v-2h2v2H2zm5 0v-2h2v2H7zm5 0v-2h2v2h-2z"}))},mHe=dHe;var v4={};$(v4,{icon:()=>bHe});var FVt=P(L());var hHe=["title","titleId"];function CW(){return CW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function vHe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var yHe=function(t){var n=t.title,r=t.titleId,o=gHe(t,hHe);return a("svg",CW({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M2.857 14.043a.75.75 0 01-.025-1.06l4.591-4.81a.25.25 0 000-.346l-4.59-4.81a.75.75 0 011.085-1.035l4.59 4.81a1.75 1.75 0 010 2.416l-4.59 4.81a.75.75 0 01-1.06.024z"}),a("path",{d:"M10.5 2.75a.75.75 0 011.5 0v10.5a.75.75 0 01-1.5 0V2.75z"}))},bHe=yHe;var y4={};$(y4,{icon:()=>SHe});var BVt=P(L());var wHe=["title","titleId"];function AW(){return AW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function xHe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var _He=function(t){var n=t.title,r=t.titleId,o=OHe(t,wHe);return a("svg",AW({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M4 2.75a.75.75 0 011.5 0v10.5a.75.75 0 01-1.5 0V2.75z"}),a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M13.135 14.043a.75.75 0 00.025-1.06l-4.59-4.81a.25.25 0 010-.346l4.59-4.81a.75.75 0 00-1.085-1.035l-4.59 4.81a1.75 1.75 0 000 2.416l4.59 4.81c.286.3.76.31 1.06.024z"}))},SHe=_He;var b4={};$(b4,{icon:()=>EHe});var VVt=P(L());var jHe=["title","titleId"];function MW(){return MW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function kHe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var PHe=function(t){var n=t.title,r=t.titleId,o=IHe(t,jHe);return a("svg",MW({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M1.957 4.982a.75.75 0 011.06-.025l4.81 4.591a.25.25 0 00.346 0l4.81-4.59a.75.75 0 011.035 1.085l-4.81 4.59a1.75 1.75 0 01-2.416 0l-4.81-4.59a.75.75 0 01-.025-1.06z"}))},EHe=PHe;var w4={};$(w4,{icon:()=>RHe});var UVt=P(L());var CHe=["title","titleId"];function TW(){return TW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function MHe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var THe=function(t){var n=t.title,r=t.titleId,o=AHe(t,CHe);return a("svg",TW({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M11.018 14.043a.75.75 0 00.024-1.06l-4.59-4.81a.25.25 0 010-.346l4.59-4.81a.75.75 0 10-1.085-1.035l-4.59 4.81a1.75 1.75 0 000 2.416l4.59 4.81c.286.3.761.31 1.06.024z"}))},RHe=THe;var O4={};$(O4,{icon:()=>FHe});var JVt=P(L());var zHe=["title","titleId"];function RW(){return RW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function DHe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var NHe=function(t){var n=t.title,r=t.titleId,o=LHe(t,zHe);return a("svg",RW({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M4.982 14.043a.75.75 0 01-.025-1.06l4.591-4.81a.25.25 0 000-.346l-4.59-4.81a.75.75 0 011.085-1.035l4.59 4.81a1.75 1.75 0 010 2.416l-4.59 4.81a.75.75 0 01-1.06.024z"}))},FHe=NHe;var x4={};$(x4,{icon:()=>qHe});var XVt=P(L());var WHe=["title","titleId"];function zW(){return zW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function HHe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var VHe=function(t){var n=t.title,r=t.titleId,o=BHe(t,WHe);return a("svg",zW({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M1.957 11.018c.286.3.761.31 1.06.024l4.81-4.59a.25.25 0 01.346 0l4.81 4.59a.75.75 0 001.035-1.085l-4.81-4.59a1.75 1.75 0 00-2.416 0l-4.81 4.59a.75.75 0 00-.025 1.06z"}))},qHe=VHe;var _4={};$(_4,{icon:()=>XHe});var YVt=P(L());var UHe=["title","titleId"];function LW(){return LW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function JHe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var GHe=function(t){var n=t.title,r=t.titleId,o=$He(t,UHe);return a("svg",LW({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6.928 8.468L4 7.618l.446-1.427L7.375 7.25 7.287 4h1.484l-.097 3.296 2.88-1.039L12 7.693l-2.977.86 1.92 2.56L9.741 12 7.937 9.28l-1.745 2.654-1.213-.86z"}))},XHe=GHe;var S4={};$(S4,{icon:()=>eVe});var ZVt=P(L());var KHe=["title","titleId"];function DW(){return DW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function QHe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ZHe=function(t){var n=t.title,r=t.titleId,o=YHe(t,KHe);return a("svg",DW({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5.277 10.088c.02.014.04.03.057.047.582.55 1.134.812 1.666.812.586 0 1.84-.293 3.713-.88L9 6.212V2H7v4.212l-1.723 3.876zm-.438.987L3.539 14h8.922l-1.32-2.969C9.096 11.677 7.733 12 7 12c-.74 0-1.463-.315-2.161-.925zM6 2H5V1h6v1h-1v4l3.375 7.594A1 1 0 0112.461 15H3.54a1 1 0 01-.914-1.406L6 6V2z"}))},eVe=ZHe;var j4={};$(j4,{icon:()=>iVe});var tqt=P(L());var tVe=["title","titleId"];function NW(){return NW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function nVe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var oVe=function(t){var n=t.title,r=t.titleId,o=rVe(t,tVe);return a("svg",NW({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M2.316 12h10.368c-.188-.704-.28-1.691-.348-3.037-.07-1.382-.103-1.888-.19-2.612-.028-.236-.06-.462-.096-.68-.31-1.892-1.506-2.923-3.708-3.131a1 1 0 10-1.684 0c-2.202.208-3.397 1.24-3.708 3.13a16.01 16.01 0 00-.096.68c-.087.725-.12 1.23-.19 2.613-.068 1.346-.16 2.333-.348 3.037zm10.843 1H1.84c-.308.353-.737.5-1.341.5a.5.5 0 110-1c.786 0 1.024-.783 1.166-3.587.07-1.407.105-1.926.196-2.681.03-.25.063-.49.102-.724.334-2.041 1.546-3.313 3.556-3.792a2 2 0 013.96 0c2.01.479 3.222 1.75 3.557 3.792a17 17 0 01.102.724c.09.755.125 1.274.196 2.681.14 2.804.379 3.587 1.165 3.587a.5.5 0 110 1c-.604 0-1.033-.147-1.341-.5zM5.5 14h4a2 2 0 11-4 0z"}))},iVe=oVe;var I4={};$(I4,{icon:()=>cVe});var nqt=P(L());var aVe=["title","titleId"];function FW(){return FW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function sVe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var uVe=function(t){var n=t.title,r=t.titleId,o=lVe(t,aVe);return a("svg",FW({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M9.5 14l-.005.15a2 2 0 01-3.972.153l-.018-.154L5.5 14h4zm5.38-12.825a.5.5 0 01.008.64l-.063.065-14 12a.5.5 0 01-.713-.695l.063-.065 14-12a.5.5 0 01.705.055zM13.036 5.51l.055.353.048.368c.066.554.103.98.145 1.724l.08 1.491c.146 2.371.402 3.053 1.136 3.053a.5.5 0 110 1c-.603 0-1.031-.146-1.34-.499H4.185l1.182-1h7.317c-.172-.644-.264-1.528-.33-2.708l-.09-1.638c-.033-.514-.066-.87-.118-1.304l-.011-.077.901-.763zM7.5 0a2 2 0 011.98 1.717c.476.113.907.27 1.292.472l-.838.71a5.728 5.728 0 00-1.591-.36 1 1 0 10-1.684 0C4.455 2.75 3.26 3.78 2.95 5.671l-.05.334-.046.347c-.08.676-.115 1.161-.176 2.347l-.014.265-.005.09-1.058.897c.018-.234.035-.488.05-.763l.077-1.427c.038-.626.073-1.025.134-1.528.03-.25.063-.49.102-.724.334-2.04 1.546-3.313 3.555-3.792l.004-.019A2 2 0 017.5 0z"}))},cVe=uVe;var k4={};$(k4,{icon:()=>hVe});var iqt=P(L());var pVe=["title","titleId"];function WW(){return WW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function dVe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var mVe=function(t){var n=t.title,r=t.titleId,o=fVe(t,pVe);return a("svg",WW({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.04 13.274a.5.5 0 10.892.453l3.014-5.931a.5.5 0 00-.445-.727H5.316L8.03 1.727a.5.5 0 10-.892-.453L4.055 7.343a.5.5 0 00.446.726h5.185L7.04 13.274z"}))},hVe=mVe;var P4={};$(P4,{icon:()=>wVe});var lqt=P(L());var gVe=["title","titleId"];function BW(){return BW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function yVe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var bVe=function(t){var n=t.title,r=t.titleId,o=vVe(t,gVe);return a("svg",BW({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M0 6h4v4H0V6zm1 1v2h2V7H1zm5-1h4v4H6V6zm1 1v2h2V7H7zm5-1h4v4h-4V6zm1 3h2V7h-2v2z"}))},wVe=bVe;var E4={};$(E4,{icon:()=>jVe});var uqt=P(L());var OVe=["title","titleId"];function HW(){return HW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function _Ve(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var SVe=function(t){var n=t.title,r=t.titleId,o=xVe(t,OVe);return a("svg",HW({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7 1v2h2V1H7zM6 0h4v4H6V0zm0 6h4v4H6V6zm1 1v2h2V7H7zm-1 5h4v4H6v-4zm1 1v2h2v-2H7z"}))},jVe=SVe;var C4={};$(C4,{icon:()=>CVe});var pqt=P(L());var IVe=["title","titleId"];function VW(){return VW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function PVe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var EVe=function(t){var n=t.title,r=t.titleId,o=kVe(t,IVe);return a("svg",VW({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5 10.038a3.49 3.49 0 012.5-1.05h2a2.5 2.5 0 002.462-2.061 2 2 0 111.008.017A3.5 3.5 0 019.5 9.987h-2a2.5 2.5 0 00-2.466 2.085A2 2 0 114 12.063V3.937a2 2 0 111 0v6.1zM4.5 3a1 1 0 100-2 1 1 0 000 2zm0 12a1 1 0 100-2 1 1 0 000 2zm8-9a1 1 0 100-2 1 1 0 000 2z"}))},CVe=EVe;var A4={};$(A4,{icon:()=>zVe});var dqt=P(L());var AVe=["title","titleId"];function qW(){return qW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function TVe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var RVe=function(t){var n=t.title,r=t.titleId,o=MVe(t,AVe);return a("svg",qW({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M6 7.987a3.49 3.49 0 00-2.5 1.05v-4.1a2 2 0 10-1 0v6.126a2 2 0 101.034.01A2.5 2.5 0 016 8.986h1a3.5 3.5 0 003.47-3.043 2 2 0 10-1.009-.017A2.5 2.5 0 017 7.987H6zM4 3a1 1 0 11-2 0 1 1 0 012 0zm0 10a1 1 0 11-2 0 1 1 0 012 0zm7-9a1 1 0 11-2 0 1 1 0 012 0z",clipRule:"evenodd"}),a("path",{d:"M13.5 10.5a1.5 1.5 0 11-3 0 1.5 1.5 0 013 0zM9 15c.284-1.223 1.519-2.143 3-2.143s2.716.92 3 2.143H9z"}))},zVe=RVe;var M4={};$(M4,{icon:()=>WVe});var hqt=P(L());var LVe=["title","titleId"];function UW(){return UW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function NVe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var FVe=function(t){var n=t.title,r=t.titleId,o=DVe(t,LVe);return a("svg",UW({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M3.732 13.096l-.197-.197 2.83-2.828.706.707-2.829 2.828.708.708 2.828-2.828a1 1 0 000-1.414L5.658 7.95a.993.993 0 00-.708-.293.994.994 0 00-.708.293l-2.828 2.829.707.707 2.829-2.83.707.708-2.829 2.829.904.903zm1.218-6.44c.512 0 1.023.196 1.414.587l2.121 2.12a2 2 0 010 2.83L4.95 15.728 0 10.778l3.535-3.535a1.993 1.993 0 011.415-.586zM14.02 1l.708.707-6.95 6.95-.707-.707L14.021 1z"}))},WVe=FVe;var T4={};$(T4,{icon:()=>UVe});var vqt=P(L());var BVe=["title","titleId"];function $W(){return $W=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function VVe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var qVe=function(t){var n=t.title,r=t.titleId,o=HVe(t,BVe);return a("svg",$W({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M11.993 8.17c0 .83-.673 1.507-1.499 1.507H5.498A1.505 1.505 0 013.999 8.17V6.662h7.994V8.17zm-2.998 5.998c0 .455-.448.827-.999.827-.55 0-1-.372-1-.827v-3.486h2v3.486zM4 5.658V1.005h1.262v4.653H4zm2.261 0V1.005h1.244v4.653H6.26zm2.244 0V1.005h1.235v4.653H8.504zm2.234 0V1.005h1.254v4.653h-1.254zM3.008 0L3 8.17a2.509 2.509 0 002.498 2.512h.5v3.486c0 1.01.896 1.832 1.998 1.832 1.102 0 1.998-.822 1.998-1.832v-3.486h.5a2.509 2.509 0 002.498-2.512L13 0H3.008z"}))},UVe=qVe;var R4={};$(R4,{icon:()=>KVe});var bqt=P(L());var $Ve=["title","titleId"];function JW(){return JW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function GVe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var XVe=function(t){var n=t.title,r=t.titleId,o=JVe(t,$Ve);return a("svg",JW({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M10.651 5.126l.922-.455.884-2.343a.5.5 0 01.939.344L12.374 5.39l-1.45.717A5.3 5.3 0 0111 7h1.043l2.3 2.198a.5.5 0 01-.692.723L11.642 8h-.737c-.09.466-.24.899-.441 1.283l.892.49 1.278 3.554a.5.5 0 01-.94.342l-1.15-3.2-.655-.36C9.373 10.665 8.716 11 8 11s-1.374-.335-1.89-.893l-.658.361-1.15 3.201a.5.5 0 11-.94-.342l1.279-3.554.895-.491A4.7 4.7 0 015.095 8h-.74l-2.01 1.92a.5.5 0 01-.69-.722L3.952 7H5a5.3 5.3 0 01.075-.892L3.623 5.39 2.6 2.672a.5.5 0 11.939-.344l.884 2.343.924.457c.17-.428.397-.81.668-1.128h.57a1.5 1.5 0 112.83 0h.568c.27.318.497.699.667 1.126zM8 4a.5.5 0 100-1 .5.5 0 000 1zm1.751 1.571A3.326 3.326 0 009.476 5H6.524c-.107.175-.2.367-.276.573-.11.295-.186.618-.223.957a4.354 4.354 0 00.09 1.465c.071.294.172.565.295.806.168.328.38.601.616.803.295.253.631.396.974.396.342 0 .678-.142.973-.394.237-.203.448-.476.616-.803a3.62 3.62 0 00.296-.807 4.263 4.263 0 00.09-1.466 3.988 3.988 0 00-.224-.959z"}))},KVe=XVe;var z4={};$(z4,{icon:()=>tqe});var Oqt=P(L());var YVe=["title","titleId"];function GW(){return GW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ZVe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var eqe=function(t){var n=t.title,r=t.titleId,o=QVe(t,YVe);return a("svg",GW({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 14A6 6 0 108 2a6 6 0 000 12zm0 1A7 7 0 118 1a7 7 0 010 14zm0-3a4 4 0 100-8 4 4 0 000 8zm0-1a3 3 0 110-6 3 3 0 010 6zm0-2a1 1 0 100-2 1 1 0 000 2z"}))},tqe=eqe;var L4={};$(L4,{icon:()=>aqe});var _qt=P(L());var rqe=["title","titleId"];function XW(){return XW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function oqe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var iqe=function(t){var n=t.title,r=t.titleId,o=nqe(t,rqe);return a("svg",XW({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M14 4v-.994C14 2.45 13.55 2 12.994 2H11v1h-1V2H6v1H5V2H3.006C2.45 2 2 2.45 2 3.006v9.988C2 13.55 2.45 14 3.006 14h9.988C13.55 14 14 13.55 14 12.994V5H2V4h12zm-3-3h1.994C14.102 1 15 1.897 15 3.006v9.988A2.005 2.005 0 0112.994 15H3.006A2.005 2.005 0 011 12.994V3.006C1 1.898 1.897 1 3.006 1H5V0h1v1h4V0h1v1zM4 7h2v1H4V7zm3 0h2v1H7V7zm3 0h2v1h-2V7zM4 9h2v1H4V9zm3 0h2v1H7V9zm3 0h2v1h-2V9zm-6 2h2v1H4v-1zm3 0h2v1H7v-1zm3 0h2v1h-2v-1z",fillRule:"evenodd"}))},aqe=iqe;var D4={};$(D4,{icon:()=>pqe});var jqt=P(L());var lqe=["title","titleId"];function KW(){return KW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function uqe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var cqe=function(t){var n=t.title,r=t.titleId,o=sqe(t,lqe);return a("svg",KW({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M6.5 12a.502.502 0 01-.354-.146l-4-4a.502.502 0 01.708-.708L6.5 10.793l6.646-6.647a.502.502 0 01.708.708l-7 7A.502.502 0 016.5 12"}))},pqe=cqe;var N4={};$(N4,{icon:()=>gqe});var kqt=P(L());var fqe=["title","titleId"];function YW(){return YW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function mqe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var hqe=function(t){var n=t.title,r=t.titleId,o=dqe(t,fqe);return a("svg",YW({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M8 16A8 8 0 118 0a8 8 0 010 16zm3.65-10.857L6.91 9.8 4.35 7.286a.5.5 0 00-.7.714l2.909 2.857a.5.5 0 00.7 0l5.091-5a.5.5 0 10-.7-.714z"}))},gqe=hqe;var F4={};$(F4,{icon:()=>Oqe});var Eqt=P(L());var vqe=["title","titleId"];function QW(){return QW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function bqe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var wqe=function(t){var n=t.title,r=t.titleId,o=yqe(t,vqe);return a("svg",QW({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M4.934 3.063a1.5 1.5 0 01.547.321l.112.115 6.07 6.915a1.5 1.5 0 01-.646 2.41l-.142.04-9.031 2.097A1.5 1.5 0 01.037 13.19l.043-.159L3.04 4.02a1.5 1.5 0 011.893-.957zM4.027 4.25l-.036.083-2.961 9.011a.5.5 0 00.498.656l.09-.013 2.937-.681-1.399-1.508a.5.5 0 01.666-.74l.067.06 1.788 1.927 2.634-.611-3.198-3.601a.5.5 0 01.682-.726l.066.062 3.559 4.007 1.229-.284a.5.5 0 00.15-.063l.067-.049a.5.5 0 00.099-.632l-.053-.073-6.07-6.916a.5.5 0 00-.138-.11l-.082-.035-.088-.02a.5.5 0 00-.507.256zm11.66 5.039a2.5 2.5 0 01-.975 3.399.5.5 0 01-.485-.875 1.5 1.5 0 00-1.454-2.624.5.5 0 01-.485-.875 2.5 2.5 0 013.399.975zm-5.03-6.206a.5.5 0 01.338.544l-.02.088-.677 2.035 2.068-.721a.5.5 0 01.6.225l.036.082a.5.5 0 01-.225.6l-.082.037L9.67 7.028a.5.5 0 01-.659-.55l.02-.08.995-3a.5.5 0 01.632-.316zM14.5 4a.5.5 0 110 1 .5.5 0 010-1zM7.862.403a2.5 2.5 0 01.735 3.459.5.5 0 01-.839-.545 1.5 1.5 0 10-2.516-1.634.5.5 0 01-.839-.545A2.5 2.5 0 017.862.403zM13.5 2a.5.5 0 110 1 .5.5 0 010-1zm-3-1a.5.5 0 110 1 .5.5 0 010-1zm4-1a.5.5 0 110 1 .5.5 0 010-1z"}))},Oqe=wqe;var W4={};$(W4,{icon:()=>Iqe});var Aqt=P(L());var xqe=["title","titleId"];function ZW(){return ZW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Sqe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var jqe=function(t){var n=t.title,r=t.titleId,o=_qe(t,xqe);return a("svg",ZW({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M7.5 13A5.506 5.506 0 012 7.5C2 4.467 4.467 2 7.5 2S13 4.467 13 7.5 10.533 13 7.5 13m0-12a6.5 6.5 0 100 13 6.5 6.5 0 000-13m3 6H8V3.5a.5.5 0 00-1 0v4a.5.5 0 00.5.5h3a.5.5 0 000-1"}))},Iqe=jqe;var B4={};$(B4,{icon:()=>Aqe});var Tqt=P(L());var kqe=["title","titleId"];function eB(){return eB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Eqe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Cqe=function(t){var n=t.title,r=t.titleId,o=Pqe(t,kqe);return a("svg",eB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6.348 3.761A3.995 3.995 0 018 7a.5.5 0 01-1 0 3 3 0 10-4.878 2.34.5.5 0 01-.627.779 4 4 0 013.973-6.84 5.502 5.502 0 0110.096 4.37.5.5 0 11-.92-.39 4.5 4.5 0 10-8.296-3.497zm-1.61 4.935a.5.5 0 11.775.633l-1.466 1.792a.5.5 0 11-.774-.633l1.466-1.792zm-3.12 3.647a.5.5 0 01.774.634l-1.505 1.84a.5.5 0 01-.774-.634l1.505-1.84zm7.62-3.647a.5.5 0 01.775.633l-1.466 1.792a.5.5 0 11-.774-.633l1.466-1.792zm-3.12 3.647a.5.5 0 01.774.634l-1.505 1.84a.5.5 0 01-.774-.634l1.505-1.84zm7.62-3.647a.5.5 0 11.775.633l-1.466 1.792a.5.5 0 11-.774-.633l1.466-1.792zm-3.12 3.647a.5.5 0 01.774.634l-1.505 1.84a.5.5 0 01-.774-.634l1.505-1.84z"}))},Aqe=Cqe;var H4={};$(H4,{icon:()=>Lqe});var zqt=P(L());var Mqe=["title","titleId"];function tB(){return tB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Rqe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var zqe=function(t){var n=t.title,r=t.titleId,o=Tqe(t,Mqe);return a("svg",tB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.421 4.93a.5.5 0 11-.87.49 3 3 0 10-4.43 3.918.5.5 0 01-.626.78 4 4 0 013.973-6.84l.032.018V3.28a5.5 5.5 0 117.003 7.357.5.5 0 11-.36-.934 4.5 4.5 0 10-5.77-5.923c.42.31.778.701 1.05 1.15h-.002zM9.6 11c.669.002.794.67.36 1.003l-4.68 3.882c-.457.378-1.053-.26-.643-.689l3.08-3.193A5411.7 5411.7 0 015.113 12c-.668-.001-.793-.669-.36-1.003l4.68-3.881c.458-.379 1.053.26.643.688l-3.08 3.193L9.6 11z"}))},Lqe=zqe;var V4={};$(V4,{icon:()=>Bqe});var Dqt=P(L());var Dqe=["title","titleId"];function rB(){return rB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Fqe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Wqe=function(t){var n=t.title,r=t.titleId,o=Nqe(t,Dqe);return a("svg",rB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M10.746 5.005A5.5 5.5 0 0110.5 16H4a4 4 0 01-1.61-7.663A4.473 4.473 0 012.029 7H.5a.5.5 0 010-1h1.527a4.479 4.479 0 01.957-2.309L1.646 2.354a.5.5 0 11.708-.708L3.69 2.984A4.479 4.479 0 016 2.027V.5a.5.5 0 011 0v1.528a4.493 4.493 0 012.309.956l1.337-1.338a.5.5 0 01.708.708L10.016 3.69c.311.388.56.831.73 1.314zM4 15h6.5a4.5 4.5 0 10-4.152-6.239A3.995 3.995 0 018 12a.5.5 0 11-1 0 3 3 0 10-3 3zm5.691-9.94a3.5 3.5 0 10-6.33 2.991 4.029 4.029 0 012.106.227 5.505 5.505 0 014.224-3.219z"}))},Bqe=Wqe;var q4={};$(q4,{icon:()=>$qe});var Fqt=P(L());var Hqe=["title","titleId"];function nB(){return nB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function qqe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Uqe=function(t){var n=t.title,r=t.titleId,o=Vqe(t,Hqe);return a("svg",nB({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M4.5 7a2.5 2.5 0 100-5 2.5 2.5 0 000 5zm0-6a3.5 3.5 0 013.465 3h3.12a1.5 1.5 0 110 1h-3.12a3.482 3.482 0 01-.662 1.596l2.1 2.1A3.5 3.5 0 118.036 12h-3.12a1.5 1.5 0 110-.999h3.12a3.482 3.482 0 01.662-1.596l-2.1-2.1A3.5 3.5 0 114.5 1zM12 4.5a.5.5 0 101 0 .5.5 0 00-1 0zm-.5 9.5a2.5 2.5 0 110-5 2.5 2.5 0 010 5zM4 11.5a.5.5 0 11-1 0 .5.5 0 011 0z"}))},$qe=Uqe;var U4={};$(U4,{icon:()=>Yqe});var Bqt=P(L());var Jqe=["title","titleId"];function oB(){return oB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Xqe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Kqe=function(t){var n=t.title,r=t.titleId,o=Gqe(t,Jqe);return a("svg",oB({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M13 11c1.334 1.393 2 2.435 2 3.125C15 15.161 14.105 16 13 16c-1.104 0-2-.84-2-1.875 0-.69.667-1.732 2-3.125zM5.857.15l6.34 6.45.016.02.324.321a1.5 1.5 0 01.11 2.006l-.103.114-4.474 4.513a1.5 1.5 0 01-2.123.008L1.464 9.06a1.5 1.5 0 01.007-2.12l4.472-4.45c.145-.146.313-.254.492-.327L5.144.85a.5.5 0 01.713-.7zm1.496 3.049a.5.5 0 00-.705 0L2.177 7.65a.498.498 0 00-.148.35h9.95a.498.498 0 00-.148-.35L7.353 3.2z"}))},Yqe=Kqe;var $4={};$($4,{icon:()=>rUe});var Vqt=P(L());var Qqe=["title","titleId"];function iB(){return iB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function eUe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var tUe=function(t){var n=t.title,r=t.titleId,o=Zqe(t,Qqe);return a("svg",iB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M4 3a1 1 0 00-1 1v8a1 1 0 001 1h8a1 1 0 001-1V4a1 1 0 00-1-1H4zm10 8v1a2 2 0 01-2 2h-1v2h-1v-2H8.5v2h-1v-2H6v2H5v-2H4a2 2 0 01-2-2v-1H0v-1h2V8.5H0v-1h2V6H0V5h2V4a2 2 0 012-2h1V0h1v2h1.5V0h1v2H10V0h1v2h1a2 2 0 012 2v1h2v1h-2v1.5h2v1h-2V10h2v1h-2z"}),a("rect",{width:6,height:6,x:5,y:5,rx:1}))},rUe=tUe;var J4={};$(J4,{icon:()=>lUe});var Uqt=P(L());var nUe=["title","titleId"];function aB(){return aB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function iUe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var aUe=function(t){var n=t.title,r=t.titleId,o=oUe(t,nUe);return a("svg",aB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M1.157 12.224L5.768 8.32a.404.404 0 000-.64l-4.61-3.904a.407.407 0 010-.643.608.608 0 01.759 0l4.61 3.904c.631.534.63 1.393 0 1.926l-4.61 3.904a.608.608 0 01-.76 0 .407.407 0 010-.643zM9 12h6v1H9v-1z"}))},lUe=aUe;var G4={};$(G4,{icon:()=>fUe});var Jqt=P(L());var sUe=["title","titleId"];function lB(){return lB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function cUe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var pUe=function(t){var n=t.title,r=t.titleId,o=uUe(t,sUe);return a("svg",lB({fill:"none",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M0 2.5A.5.5 0 01.5 2h15a.5.5 0 010 1H15v10h.5a.5.5 0 010 1H.5a.5.5 0 010-1H1V3H.5a.5.5 0 01-.5-.5zM2 3h12v10H2V3zm3 2a.5.5 0 00-.5.5v5a.5.5 0 001 0v-5A.5.5 0 005 5zm5.5.5a.5.5 0 011 0v5a.5.5 0 01-1 0v-5zM8 5a.5.5 0 00-.5.5v5a.5.5 0 001 0v-5A.5.5 0 008 5z"}))},fUe=pUe;var X4={};$(X4,{icon:()=>vUe});var Xqt=P(L());var dUe=["title","titleId"];function sB(){return sB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function hUe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var gUe=function(t){var n=t.title,r=t.titleId,o=mUe(t,dUe);return a("svg",sB({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M1.5 3a.5.5 0 00-.5.5v9a.5.5 0 001 0v-9a.5.5 0 00-.5-.5zm3 0a.5.5 0 00-.5.5v9a.5.5 0 001 0V9h6v1.5a.5.5 0 00.82.384l3-2.5a.5.5 0 000-.768l-3-2.5A.5.5 0 0011 5.5V7H5V3.5a.5.5 0 00-.5-.5z"}))},vUe=gUe;var K4={};$(K4,{icon:()=>xUe});var Yqt=P(L());var yUe=["title","titleId"];function uB(){return uB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function wUe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var OUe=function(t){var n=t.title,r=t.titleId,o=bUe(t,yUe);return a("svg",uB({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6.5 3a.5.5 0 01.5.5v9a.5.5 0 01-1 0V9H4v1.5a.5.5 0 01-.82.384l-3-2.5a.5.5 0 010-.768l3-2.5A.5.5 0 014 5.5V7h2V3.5a.5.5 0 01.5-.5zm3 0a.5.5 0 00-.5.5v9a.5.5 0 001 0V9h2v1.5a.5.5 0 00.82.384l3-2.5a.5.5 0 000-.768l-3-2.5A.5.5 0 0012 5.5V7h-2V3.5a.5.5 0 00-.5-.5z"}))},xUe=OUe;var Y4={};$(Y4,{icon:()=>kUe});var Zqt=P(L());var _Ue=["title","titleId"];function cB(){return cB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function jUe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var IUe=function(t){var n=t.title,r=t.titleId,o=SUe(t,_Ue);return a("svg",cB({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M11.5 3a.5.5 0 01.5.5v9a.5.5 0 01-1 0V9H5v1.5a.5.5 0 01-.82.384l-3-2.5a.5.5 0 010-.768l3-2.5A.5.5 0 015 5.5V7h6V3.5a.5.5 0 01.5-.5zm3 0a.5.5 0 01.5.5v9a.5.5 0 01-1 0v-9a.5.5 0 01.5-.5z"}))},kUe=IUe;var Q4={};$(Q4,{icon:()=>MUe});var tUt=P(L());var PUe=["title","titleId"];function pB(){return pB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function CUe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var AUe=function(t){var n=t.title,r=t.titleId,o=EUe(t,PUe);return a("svg",pB({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M.5 3a.5.5 0 00-.5.5v9a.5.5 0 001 0v-9A.5.5 0 00.5 3zm14.5.5a.5.5 0 011 0v9a.5.5 0 01-1 0v-9zm-4.712 1.547a.5.5 0 01.532.069l3 2.5a.5.5 0 010 .768l-3 2.5A.5.5 0 0110 10.5V9H6v1.5a.5.5 0 01-.82.384l-3-2.5a.5.5 0 010-.768l3-2.5A.5.5 0 016 5.5V7h4V5.5a.5.5 0 01.288-.453z"}))},MUe=AUe;var Z4={};$(Z4,{icon:()=>DUe});var nUt=P(L());var TUe=["title","titleId"];function fB(){return fB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function zUe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var LUe=function(t){var n=t.title,r=t.titleId,o=RUe(t,TUe);return a("svg",fB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M8.05 10a2.5 2.5 0 014.9 0h1.55a.5.5 0 110 1h-1.55a2.5 2.5 0 01-4.9 0H1.5a.5.5 0 110-1h6.55zm-.1-4a2.5 2.5 0 01-4.9 0H1.5a.5.5 0 010-1h1.55a2.5 2.5 0 014.9 0h6.55a.5.5 0 110 1H7.95zM4 5.5a1.5 1.5 0 103 0 1.5 1.5 0 00-3 0zm8 5a1.5 1.5 0 10-3 0 1.5 1.5 0 003 0z"}))},DUe=LUe;var e6={};$(e6,{icon:()=>HUe});var iUt=P(L());var NUe=["title","titleId"];function dB(){return dB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function WUe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var BUe=function(t){var n=t.title,r=t.titleId,o=FUe(t,NUe);return a("svg",dB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M10 7.95a2.5 2.5 0 010-4.9V1.5a.5.5 0 111 0v1.55a2.5 2.5 0 010 4.9v6.55a.5.5 0 11-1 0V7.95zm-4 .1a2.5 2.5 0 010 4.9v1.55a.5.5 0 11-1 0v-1.55a2.5 2.5 0 010-4.9V1.5a.5.5 0 011 0v6.55zM5.5 12a1.5 1.5 0 100-3 1.5 1.5 0 000 3zm5-8a1.5 1.5 0 100 3 1.5 1.5 0 000-3z"}))},HUe=BUe;var t6={};$(t6,{icon:()=>JUe});var lUt=P(L());var VUe=["title","titleId"];function mB(){return mB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function UUe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var $Ue=function(t){var n=t.title,r=t.titleId,o=qUe(t,VUe);return a("svg",mB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M11.4 0c.235 0 .46.099.622.273l2.743 3c.151.162.235.378.235.602v9.25a.867.867 0 01-.857.875H3.857A.867.867 0 013 13.125V.875C3 .392 3.384 0 3.857 0H11.4zM14 4h-2.6a.4.4 0 01-.4-.4V1H4v12h10V4z"}),a("path",{d:"M3 1H2a1 1 0 00-1 1v13a1 1 0 001 1h10a1 1 0 001-1v-1h-1v1H2V2h1V1z"}))},JUe=$Ue;var r6={};$(r6,{icon:()=>QUe});var uUt=P(L());var GUe=["title","titleId"];function hB(){return hB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function KUe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var YUe=function(t){var n=t.title,r=t.titleId,o=XUe(t,GUe);return a("svg",hB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M2 2.729V2a1 1 0 011-1h2v1H3v12h4v1H3a1 1 0 01-1-1V2.729zM14 5V2a1 1 0 00-1-1h-2v1h2v3h1zm-1 1h2v9H8V6h5V5H8a1 1 0 00-1 1v9a1 1 0 001 1h7a1 1 0 001-1V6a1 1 0 00-1-1h-2v1z"}),a("path",{d:"M9 10h5V9H9v1zm0-2h5V7H9v1zm0 4h5v-1H9v1zm0 2h5v-1H9v1zm2-12V1a1 1 0 00-1-1H6a1 1 0 00-1 1v1h1V1h4v1h1zM5 3h6V2H5v1z"}))},QUe=YUe;var n6={};$(n6,{icon:()=>n$e});var pUt=P(L());var ZUe=["title","titleId"];function gB(){return gB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function t$e(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var r$e=function(t){var n=t.title,r=t.titleId,o=e$e(t,ZUe);return a("svg",gB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.293 8L3.146 3.854a.5.5 0 11.708-.708L8 7.293l4.146-4.147a.5.5 0 01.708.708L8.707 8l4.147 4.146a.5.5 0 01-.708.708L8 8.707l-4.146 4.147a.5.5 0 01-.708-.708L7.293 8z"}))},n$e=r$e;var o6={};$(o6,{icon:()=>s$e});var dUt=P(L());var o$e=["title","titleId"];function vB(){return vB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function a$e(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var l$e=function(t){var n=t.title,r=t.titleId,o=i$e(t,o$e);return a("svg",vB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8.746 8l3.1-3.1a.527.527 0 10-.746-.746L8 7.254l-3.1-3.1a.527.527 0 10-.746.746l3.1 3.1-3.1 3.1a.527.527 0 10.746.746l3.1-3.1 3.1 3.1a.527.527 0 10.746-.746L8.746 8zM8 16A8 8 0 118 0a8 8 0 010 16z"}))},s$e=l$e;var i6={};$(i6,{icon:()=>d$e});var hUt=P(L());var u$e=["title","titleId"];function yB(){return yB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function p$e(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var f$e=function(t){var n=t.title,r=t.titleId,o=c$e(t,u$e);return a("svg",yB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5.822 1.874a.5.5 0 11.335.942 5.517 5.517 0 00-3.34 3.341.5.5 0 11-.943-.335 6.517 6.517 0 013.948-3.948zM1.864 10.15a.5.5 0 11.944-.33 5.517 5.517 0 003.365 3.37.5.5 0 01-.333.943 6.517 6.517 0 01-3.976-3.983zm8.302 3.981a.5.5 0 11-.333-.943 5.517 5.517 0 003.347-3.332.5.5 0 11.941.337 6.517 6.517 0 01-3.955 3.938zm3.968-8.285a.5.5 0 11-.943.331A5.517 5.517 0 009.85 2.82a.5.5 0 01.337-.942 6.517 6.517 0 013.946 3.968zM8.5 3.5a.5.5 0 01-1 0V.997a.5.5 0 011 0V3.5zm-4.997 4a.5.5 0 010 1H1a.5.5 0 010-1h2.503zM7.5 12.497a.5.5 0 011 0V15a.5.5 0 11-1 0v-2.503zM12.497 8.5a.5.5 0 010-1H15a.5.5 0 110 1h-2.503zM8 9a1 1 0 110-2 1 1 0 010 2z"}))},d$e=f$e;var a6={};$(a6,{icon:()=>y$e});var vUt=P(L());var m$e=["title","titleId"];function bB(){return bB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function g$e(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var v$e=function(t){var n=t.title,r=t.titleId,o=h$e(t,m$e);return a("svg",bB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M12.95 1.636l1.414 1.414-2.192 2.193C12.695 6.033 13 6.98 13 8c0 1.02-.305 1.967-.828 2.757l2.192 2.193-1.414 1.414-2.193-2.192A4.977 4.977 0 018 13a4.977 4.977 0 01-2.757-.828L3.05 14.364 1.636 12.95l2.192-2.193A4.977 4.977 0 013 8c0-1.02.305-1.967.828-2.757L1.636 3.05 3.05 1.636l2.193 2.192A4.977 4.977 0 018 3c1.02 0 1.967.305 2.757.828l2.193-2.192zM8 5a2.99 2.99 0 00-1.168.236l-.126.057-.218.116-.132.081-.073.05a3.013 3.013 0 00-.241.187l-.113.103-.147.15c-.05.054-.097.11-.142.168l-.1.135-.05.073-.06.097c-.05.082-.096.166-.137.253l-.057.126A2.99 2.99 0 005 8c0 .414.084.809.236 1.168l.057.126.116.218.081.132c.059.089.121.175.189.257l.15.17.151.147c.056.051.114.1.174.147l.142.105c.054.037.109.072.165.106l-.124-.079.092.06.094.055c.436.247.94.388 1.477.388a2.99 2.99 0 001.168-.236l.125-.056.213-.113.151-.094.05-.034a3.011 3.011 0 00.323-.258l-.15.129.09-.075.168-.159.08-.084c.051-.056.1-.114.147-.174l.105-.142.106-.165c.047-.08.091-.161.131-.245l.057-.126A2.99 2.99 0 0011 8a2.99 2.99 0 00-.236-1.168l-.056-.125-.112-.211-.096-.155-.033-.049a3.011 3.011 0 00-.258-.322l.129.15-.075-.09-.159-.168-.084-.08a3.015 3.015 0 00-.174-.147l-.183-.132-.124-.079a2.993 2.993 0 00-.245-.131l-.126-.057A2.99 2.99 0 008 5z"}))},y$e=v$e;var l6={};$(l6,{icon:()=>_$e});var bUt=P(L());var b$e=["title","titleId"];function wB(){return wB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function O$e(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var x$e=function(t){var n=t.title,r=t.titleId,o=w$e(t,b$e);return a("svg",wB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M5.142 11.074l-1.912.548a2.532 2.532 0 11-1.395-4.867l1.947-.559a2.532 2.532 0 012.555.713l1.53-5.335c.139-.485.6-.897 1.159-1.238.27-.164.52-.278.779-.32.814-.132 1.503.558 1.261 1.422L9.574 6.643l4.988-1.43c.864-.242 1.554.447 1.422 1.26-.042.26-.156.51-.32.78-.341.56-.753 1.02-1.238 1.16L9.523 9.817a2.53 2.53 0 01.56 2.4l-.56 1.947a2.532 2.532 0 11-4.867-1.395l.486-1.696zm.33-1.148l.48-1.673a1.52 1.52 0 00-1.89-1.083l-1.948.558a1.52 1.52 0 00.837 2.92l2.52-.722zm3.773-2.135l-.33 1.148 5.232-1.5c.324-.093 1.182-1.39.694-1.253L9.245 7.791zM5.63 13.049a1.52 1.52 0 002.92.837l.559-1.947a1.52 1.52 0 00-1.553-1.935l2.537-8.845c.136-.488-1.16.37-1.253.694L5.63 13.05zm.973.279l.559-1.947a.506.506 0 11.973.279l-.558 1.947a.506.506 0 11-.974-.28zm-3.93-3.653a.506.506 0 11-.28-.973l1.947-.558a.506.506 0 01.28.973l-1.948.558z"}))},_$e=x$e;var s6={};$(s6,{icon:()=>P$e});var OUt=P(L());var S$e=["title","titleId"];function OB(){return OB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function I$e(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var k$e=function(t){var n=t.title,r=t.titleId,o=j$e(t,S$e);return a("svg",OB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M2 12h12v-1.97c-1.225.582-3.454.97-6 .97s-4.775-.388-6-.97V12zm-1 0V3c0-1.105 3.134-2 7-2s7 .895 7 2v9c0 1.105-3.134 2-7 2s-7-.895-7-2zm1-3h12V7.03c-1.225.582-3.454.97-6 .97s-4.775-.388-6-.97V9zm0-4.97V6h12V4.03c-1.225.582-3.454.97-6 .97s-4.775-.388-6-.97zm10.675-1.483C11.467 2.202 9.795 2 8 2c-1.794 0-3.467.202-4.675.547-.492.14-.88.298-1.136.453.256.155.644.312 1.136.453C4.533 3.798 6.205 4 8 4c1.794 0 3.467-.202 4.675-.547.492-.14.88-.298 1.136-.453-.256-.155-.644-.312-1.136-.453zM2 6c.257.155.833.312 1.325.453C4.533 6.798 6.205 7 8 7c1.794 0 3.467-.202 4.675-.547.492-.14 1.07-.298 1.327-.453H2zm0 3c.257.155.833.312 1.325.453C4.533 9.798 6.205 10 8 10c1.794 0 3.467-.202 4.675-.547.492-.14 1.07-.298 1.327-.453H2zm0 3c.257.155.833.312 1.325.453C4.533 12.798 6.205 13 8 13c1.794 0 3.467-.202 4.675-.547.492-.14 1.07-.298 1.327-.453H2z"}))},P$e=k$e;var u6={};$(u6,{icon:()=>T$e});var _Ut=P(L());var E$e=["title","titleId"];function xB(){return xB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function A$e(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var M$e=function(t){var n=t.title,r=t.titleId,o=C$e(t,E$e);return a("svg",xB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M2 2a1 1 0 00-1 1v7a1 1 0 001 1h4l-1 3H3.5a.5.5 0 000 1h9a.5.5 0 000-1H11l-1-3h4a1 1 0 001-1V3a1 1 0 00-1-1H2zm0 8V3h12v7H2zm5 1h2l1 3H6l1-3z",clipRule:"evenodd"}),a("path",{d:"M4.5 6a.5.5 0 000 1h1a.5.5 0 000-1h-1zm3 0a.5.5 0 000 1h1a.5.5 0 000-1h-1zm2.5.5a.5.5 0 01.5-.5h1a.5.5 0 010 1h-1a.5.5 0 01-.5-.5z"}))},T$e=M$e;var c6={};$(c6,{icon:()=>N$e});var jUt=P(L());var R$e=["title","titleId"];function _B(){return _B=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function L$e(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var D$e=function(t){var n=t.title,r=t.titleId,o=z$e(t,R$e);return a("svg",_B({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M10.8 0c.274 0 .537.113.726.312l3.2 3.428c.176.186.274.433.274.689V15a1 1 0 01-1 1H2a1 1 0 01-1-1V1a1 1 0 011-1h8.8zM14 5h-3.5a.5.5 0 01-.5-.5V1H2v14h12V5zm-8.5 7a.5.5 0 110-1h5a.5.5 0 110 1h-5zm0-3a.5.5 0 010-1h5a.5.5 0 110 1h-5z"}))},N$e=D$e;var p6={};$(p6,{icon:()=>V$e});var kUt=P(L());var F$e=["title","titleId"];function SB(){return SB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function B$e(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var H$e=function(t){var n=t.title,r=t.titleId,o=W$e(t,F$e);return a("svg",SB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8.505 8.995l6.453-6.44-1.5-1.5-6.453 6.44 1.5 1.5zM12.968.19c.258-.238.657-.26.91 0l1.928 1.929a.642.642 0 010 .909l-6.78 6.784A.641.641 0 018.57 10H6.643A.643.643 0 016 9.357V7.43c0-.17.067-.335.188-.455L12.968.19zM4.5 13a.5.5 0 110-1h7a.5.5 0 110 1h-7zm4-12a.5.5 0 010 1H2v13h12V7.5a.5.5 0 111 0V15a1 1 0 01-1 1H2a1 1 0 01-1-1V2a1 1 0 011-1h6.5z"}))},V$e=H$e;var f6={};$(f6,{icon:()=>G$e});var EUt=P(L());var q$e=["title","titleId"];function jB(){return jB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function $$e(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var J$e=function(t){var n=t.title,r=t.titleId,o=U$e(t,q$e);return a("svg",jB({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M9 3.5a.5.5 0 11-1 0 .5.5 0 011 0zM9 5v3h1v1H8V6H7V5h2z"}),a("path",{d:"M13.855 14.147a1.34 1.34 0 01-.158-.246A1.998 1.998 0 0113.5 13c0-.414.103-.713.197-.901a1.34 1.34 0 01.158-.246l.003-.005A.5.5 0 0014 11.5V.5a.5.5 0 00-.5-.5H3.461l-.083.005a2.957 2.957 0 00-1.102.298 2.257 2.257 0 00-.88.763C1.148 1.44 1 1.913 1 2.5V13c0 .463.117.843.318 1.145.2.298.462.491.708.615a2.344 2.344 0 00.94.24H3v-1c-.005 0-.015 0-.029-.002a1.344 1.344 0 01-.498-.133.817.817 0 01-.323-.275C2.07 13.47 2 13.287 2 13s.07-.47.15-.59a.817.817 0 01.324-.275A1.344 1.344 0 013 12h9.658c-.091.27-.158.605-.158 1s.067.73.158 1H8v1h5.5a.5.5 0 00.359-.848l-.004-.005zm-.001 0l.002.002-.002-.002zM2.724 1.197c.092-.046.186-.082.276-.11C3 2.918 3.001 11 2.999 11h-.033a1.977 1.977 0 00-.283.03 2.344 2.344 0 00-.657.21L2 11.254V2.5c0-.413.102-.689.229-.879.128-.193.304-.328.495-.424zM4 11V1h9v10H4z"}),a("path",{d:"M7 13H4v2.5a.5.5 0 00.854.354l.646-.647.646.647A.5.5 0 007 15.5V13z"}))},G$e=J$e;var d6={};$(d6,{icon:()=>Z$e});var AUt=P(L());var X$e=["title","titleId"];function IB(){return IB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Y$e(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Q$e=function(t){var n=t.title,r=t.titleId,o=K$e(t,X$e);return a("svg",IB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8.8 0c.274 0 .537.113.726.312l3.2 3.428c.176.186.274.433.274.689V13a1 1 0 01-1 1H2a1 1 0 01-1-1V1a1 1 0 011-1h6.8zM12 5H8.5a.5.5 0 01-.5-.5V1H2v12h10V5zm-7.5 6a.5.5 0 110-1h5a.5.5 0 110 1h-5zm0-3a.5.5 0 010-1h5a.5.5 0 110 1h-5zm1 8a.5.5 0 110-1H14V6.5a.5.5 0 111 0V15a1 1 0 01-1 1H5.5z"}))},Z$e=Q$e;var m6={};$(m6,{icon:()=>oJe});var TUt=P(L());var eJe=["title","titleId"];function kB(){return kB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function rJe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var nJe=function(t){var n=t.title,r=t.titleId,o=tJe(t,eJe);return a("svg",kB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("circle",{cx:8,cy:8,r:4}))},oJe=nJe;var h6={};$(h6,{icon:()=>uJe});var zUt=P(L());var iJe=["title","titleId"];function PB(){return PB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function lJe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var sJe=function(t){var n=t.title,r=t.titleId,o=aJe(t,iJe);return a("svg",PB({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M8.135 14.043a.75.75 0 00.025-1.06l-4.591-4.81a.25.25 0 010-.346l4.59-4.81a.75.75 0 10-1.084-1.035l-4.591 4.81a1.75 1.75 0 000 2.416l4.59 4.81c.287.3.761.31 1.061.024z"}),a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M14.135 14.043a.75.75 0 00.025-1.06l-4.591-4.81a.25.25 0 010-.346l4.59-4.81a.75.75 0 10-1.084-1.035l-4.591 4.81a1.75 1.75 0 000 2.416l4.59 4.81c.287.3.761.31 1.061.024z"}))},uJe=sJe;var g6={};$(g6,{icon:()=>mJe});var DUt=P(L());var cJe=["title","titleId"];function EB(){return EB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function fJe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var dJe=function(t){var n=t.title,r=t.titleId,o=pJe(t,cJe);return a("svg",EB({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M2.232 14.043a.75.75 0 01-.025-1.06l4.591-4.81a.25.25 0 000-.346l-4.59-4.81a.75.75 0 011.085-1.035l4.59 4.81a1.75 1.75 0 010 2.416l-4.59 4.81a.75.75 0 01-1.06.024z"}),a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M8.232 14.043a.75.75 0 01-.025-1.06l4.591-4.81a.25.25 0 000-.346l-4.59-4.81a.75.75 0 011.085-1.035l4.59 4.81a1.75 1.75 0 010 2.416l-4.59 4.81a.75.75 0 01-1.06.024z"}))},mJe=dJe;var v6={};$(v6,{icon:()=>bJe});var FUt=P(L());var hJe=["title","titleId"];function CB(){return CB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function vJe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var yJe=function(t){var n=t.title,r=t.titleId,o=gJe(t,hJe);return a("svg",CB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M9 9.114l1.85-1.943a.52.52 0 01.77 0c.214.228.214.6 0 .829l-1.95 2.05a1.552 1.552 0 01-2.31 0L5.41 8a.617.617 0 010-.829.52.52 0 01.77 0L8 9.082V.556C8 .249 8.224 0 8.5 0s.5.249.5.556v8.558z"}),a("path",{d:"M16 13.006V10h-1v3.006a.995.995 0 01-.994.994H3.01a.995.995 0 01-.994-.994V10h-1v3.006c0 1.1.892 1.994 1.994 1.994h10.996c1.1 0 1.994-.893 1.994-1.994z"}))},bJe=yJe;var y6={};$(y6,{icon:()=>SJe});var BUt=P(L());var wJe=["title","titleId"];function AB(){return AB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function xJe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var _Je=function(t){var n=t.title,r=t.titleId,o=OJe(t,wJe);return a("svg",AB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7 2h2a2 2 0 012 2v8a2 2 0 01-2 2H7a2 2 0 01-2-2V4a2 2 0 012-2zM1.5 1a.5.5 0 01.5.5v13a.5.5 0 11-1 0v-13a.5.5 0 01.5-.5zm13 0a.5.5 0 01.5.5v13a.5.5 0 11-1 0v-13a.5.5 0 01.5-.5z"}))},SJe=_Je;var b6={};$(b6,{icon:()=>EJe});var VUt=P(L());var jJe=["title","titleId"];function MB(){return MB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function kJe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var PJe=function(t){var n=t.title,r=t.titleId,o=IJe(t,jJe);return a("svg",MB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M4 5h8a2 2 0 012 2v2a2 2 0 01-2 2H4a2 2 0 01-2-2V7a2 2 0 012-2zM1.5 1h13a.5.5 0 110 1h-13a.5.5 0 010-1zm0 13h13a.5.5 0 110 1h-13a.5.5 0 110-1z"}))},EJe=PJe;var w6={};$(w6,{icon:()=>RJe});var UUt=P(L());var CJe=["title","titleId"];function TB(){return TB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function MJe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var TJe=function(t){var n=t.title,r=t.titleId,o=AJe(t,CJe);return a("svg",TB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7 1h2a2 2 0 012 2v8a2 2 0 01-2 2H7a2 2 0 01-2-2V3a2 2 0 012-2zM1.5 14h13a.5.5 0 110 1h-13a.5.5 0 110-1z"}))},RJe=TJe;var O6={};$(O6,{icon:()=>FJe});var JUt=P(L());var zJe=["title","titleId"];function RB(){return RB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function DJe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var NJe=function(t){var n=t.title,r=t.titleId,o=LJe(t,zJe);return a("svg",RB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 4H7V1.5a.5.5 0 011 0V4zm0 8v2.5a.5.5 0 11-1 0V12h1zM3 5h9a2 2 0 012 2v2a2 2 0 01-2 2H3a2 2 0 01-2-2V7a2 2 0 012-2z"}))},FJe=NJe;var x6={};$(x6,{icon:()=>qJe});var XUt=P(L());var WJe=["title","titleId"];function zB(){return zB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function HJe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var VJe=function(t){var n=t.title,r=t.titleId,o=BJe(t,WJe);return a("svg",zB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5 5h8a2 2 0 012 2v2a2 2 0 01-2 2H5a2 2 0 01-2-2V7a2 2 0 012-2zM1.5 1a.5.5 0 01.5.5v13a.5.5 0 11-1 0v-13a.5.5 0 01.5-.5z"}))},qJe=VJe;var _6={};$(_6,{icon:()=>XJe});var YUt=P(L());var UJe=["title","titleId"];function LB(){return LB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function JJe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var GJe=function(t){var n=t.title,r=t.titleId,o=$Je(t,UJe);return a("svg",LB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M4 7v1H1.5a.5.5 0 010-1H4zm8 0h2.5a.5.5 0 110 1H12V7zM7 1h2a2 2 0 012 2v9a2 2 0 01-2 2H7a2 2 0 01-2-2V3a2 2 0 012-2z"}))},XJe=GJe;var S6={};$(S6,{icon:()=>eGe});var ZUt=P(L());var KJe=["title","titleId"];function DB(){return DB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function QJe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ZJe=function(t){var n=t.title,r=t.titleId,o=YJe(t,KJe);return a("svg",DB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M3 5h8a2 2 0 012 2v2a2 2 0 01-2 2H3a2 2 0 01-2-2V7a2 2 0 012-2zm11.5-4a.5.5 0 01.5.5v13a.5.5 0 11-1 0v-13a.5.5 0 01.5-.5z"}))},eGe=ZJe;var j6={};$(j6,{icon:()=>iGe});var t$t=P(L());var tGe=["title","titleId"];function NB(){return NB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function nGe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var oGe=function(t){var n=t.title,r=t.titleId,o=rGe(t,tGe);return a("svg",NB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7 3h2a2 2 0 012 2v8a2 2 0 01-2 2H7a2 2 0 01-2-2V5a2 2 0 012-2zM1.5 1h13a.5.5 0 110 1h-13a.5.5 0 010-1z"}))},iGe=oGe;var I6={};$(I6,{icon:()=>cGe});var n$t=P(L());var aGe=["title","titleId"];function FB(){return FB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function sGe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var uGe=function(t){var n=t.title,r=t.titleId,o=lGe(t,aGe);return a("svg",FB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M2 8h5a1 1 0 011 1v5H3a1 1 0 01-1-1V8zm1-7h10a2 2 0 012 2v10a2 2 0 01-2 2H3a2 2 0 01-2-2V3a2 2 0 012-2zm0 1a1 1 0 00-1 1v10a1 1 0 001 1h10a1 1 0 001-1V3a1 1 0 00-1-1H3z"}))},cGe=uGe;var k6={};$(k6,{icon:()=>hGe});var i$t=P(L());var pGe=["title","titleId"];function WB(){return WB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function dGe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var mGe=function(t){var n=t.title,r=t.titleId,o=fGe(t,pGe);return a("svg",WB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M9 8h5v5a1 1 0 01-1 1H8V9a1 1 0 011-1zM3 1h10a2 2 0 012 2v10a2 2 0 01-2 2H3a2 2 0 01-2-2V3a2 2 0 012-2zm0 1a1 1 0 00-1 1v10a1 1 0 001 1h10a1 1 0 001-1V3a1 1 0 00-1-1H3z"}))},hGe=mGe;var P6={};$(P6,{icon:()=>wGe});var l$t=P(L());var gGe=["title","titleId"];function BB(){return BB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function yGe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var bGe=function(t){var n=t.title,r=t.titleId,o=vGe(t,gGe);return a("svg",BB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M3 2h5v5a1 1 0 01-1 1H2V3a1 1 0 011-1zm0-1h10a2 2 0 012 2v10a2 2 0 01-2 2H3a2 2 0 01-2-2V3a2 2 0 012-2zm0 1a1 1 0 00-1 1v10a1 1 0 001 1h10a1 1 0 001-1V3a1 1 0 00-1-1H3z"}))},wGe=bGe;var E6={};$(E6,{icon:()=>jGe});var u$t=P(L());var OGe=["title","titleId"];function HB(){return HB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function _Ge(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var SGe=function(t){var n=t.title,r=t.titleId,o=xGe(t,OGe);return a("svg",HB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 2h5a1 1 0 011 1v5H9a1 1 0 01-1-1V2zM3 1h10a2 2 0 012 2v10a2 2 0 01-2 2H3a2 2 0 01-2-2V3a2 2 0 012-2zm0 1a1 1 0 00-1 1v10a1 1 0 001 1h10a1 1 0 001-1V3a1 1 0 00-1-1H3z"}))},jGe=SGe;var C6={};$(C6,{icon:()=>CGe});var p$t=P(L());var IGe=["title","titleId"];function VB(){return VB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function PGe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var EGe=function(t){var n=t.title,r=t.titleId,o=kGe(t,IGe);return a("svg",VB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5 4V3h6v1H5zM3 7V6h10v1H3zm2 3V9h6v1H5zm-2 3v-1h10v1H3z"}))},CGe=EGe;var A6={};$(A6,{icon:()=>zGe});var d$t=P(L());var AGe=["title","titleId"];function qB(){return qB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function TGe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var RGe=function(t){var n=t.title,r=t.titleId,o=MGe(t,AGe);return a("svg",qB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M2 4V3h6v1H2zm0 3V6h10v1H2zm0 3V9h6v1H2zm0 3v-1h10v1H2z"}))},zGe=RGe;var M6={};$(M6,{icon:()=>WGe});var h$t=P(L());var LGe=["title","titleId"];function UB(){return UB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function NGe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var FGe=function(t){var n=t.title,r=t.titleId,o=DGe(t,LGe);return a("svg",UB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 4V3h6v1H8zM4 7V6h10v1H4zm4 3V9h6v1H8zm-4 3v-1h10v1H4z"}))},WGe=FGe;var T6={};$(T6,{icon:()=>UGe});var v$t=P(L());var BGe=["title","titleId"];function $B(){return $B=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function VGe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var qGe=function(t){var n=t.title,r=t.titleId,o=HGe(t,BGe);return a("svg",$B({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8.193 13H4V3h4.151c1.816 0 2.987.977 2.987 2.495 0 1.074-.797 2.01-1.823 2.176v.055c1.359.132 2.308 1.11 2.308 2.433 0 1.76-1.296 2.841-3.43 2.841zM5.788 4.393v2.82h1.635c1.248 0 1.948-.526 1.948-1.455 0-.873-.603-1.365-1.67-1.365H5.788zm0 7.214h1.996c1.316 0 2.016-.547 2.016-1.573 0-1.019-.72-1.552-2.092-1.552h-1.92v3.125z"}))},UGe=qGe;var R6={};$(R6,{icon:()=>KGe});var b$t=P(L());var $Ge=["title","titleId"];function JB(){return JB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function GGe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var XGe=function(t){var n=t.title,r=t.titleId,o=JGe(t,$Ge);return a("svg",JB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M4.597 3a.411.411 0 00-.299.132l-1.85 1.993-.756-.7a.412.412 0 00-.28-.124.42.42 0 00-.292.098.333.333 0 00-.12.257.335.335 0 00.127.254l1.064.982A.418.418 0 002.488 6a.411.411 0 00.288-.126L4.904 3.58a.328.328 0 00.095-.25.337.337 0 00-.126-.238A.421.421 0 004.597 3zm-.299 4.132A.411.411 0 014.597 7a.421.421 0 01.276.093c.076.062.12.147.126.238a.328.328 0 01-.095.25L2.776 9.874a.411.411 0 01-.288.126.418.418 0 01-.297-.108L1.127 8.91A.335.335 0 011 8.656a.333.333 0 01.12-.257.42.42 0 01.292-.098c.108.005.21.05.28.123l.757.701 1.849-1.993zM4.597 11a.411.411 0 00-.299.132l-1.85 1.993-.756-.7a.412.412 0 00-.28-.124.421.421 0 00-.292.098.333.333 0 00-.12.257.335.335 0 00.127.254l1.064.982a.418.418 0 00.297.108.411.411 0 00.288-.126l2.128-2.293a.328.328 0 00.095-.25.337.337 0 00-.126-.238.421.421 0 00-.276-.093zM6.5 4a.5.5 0 000 1h7a.5.5 0 000-1h-7zM6 8.5a.5.5 0 01.5-.5h7a.5.5 0 010 1h-7a.5.5 0 01-.5-.5zm.5 3.5a.5.5 0 000 1h7a.5.5 0 000-1h-7z"}))},KGe=XGe;var z6={};$(z6,{icon:()=>tXe});var O$t=P(L());var YGe=["title","titleId"];function GB(){return GB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ZGe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var eXe=function(t){var n=t.title,r=t.titleId,o=QGe(t,YGe);return a("svg",GB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M2.414 8.036L4.89 10.51a.5.5 0 01-.707.708L1.354 8.389a.5.5 0 010-.707l2.828-2.828a.5.5 0 11.707.707L2.414 8.036zm8.768 2.474l2.475-2.474-2.475-2.475a.5.5 0 01.707-.707l2.829 2.828a.5.5 0 010 .707l-2.829 2.829a.5.5 0 11-.707-.708zM8.559 2.506a.5.5 0 01.981.19L7.441 13.494a.5.5 0 01-.981-.19L8.559 2.506z"}))},tXe=eXe;var L6={};$(L6,{icon:()=>aXe});var _$t=P(L());var rXe=["title","titleId"];function XB(){return XB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function oXe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var iXe=function(t){var n=t.title,r=t.titleId,o=nXe(t,rXe);return a("svg",XB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6.111 10H12a1 1 0 001-1V5a1 1 0 00-1-1H4a1 1 0 00-1 1v4a1 1 0 001 1h1v1.297L6.111 10zm.46 1L4 14v-3a2 2 0 01-2-2V5a2 2 0 012-2h8a2 2 0 012 2v4a2 2 0 01-2 2H6.571z"}))},aXe=iXe;var D6={};$(D6,{icon:()=>pXe});var j$t=P(L());var lXe=["title","titleId"];function KB(){return KB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function uXe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var cXe=function(t){var n=t.title,r=t.titleId,o=sXe(t,lXe);return a("svg",KB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6 11a1 1 0 010 2H4a1 1 0 010-2V5a1 1 0 110-2h2a1 1 0 110 2v2h4V5a1 1 0 110-2h2a1 1 0 010 2v6a1 1 0 010 2h-2a1 1 0 010-2V9H6v2z"}))},pXe=cXe;var N6={};$(N6,{icon:()=>gXe});var k$t=P(L());var fXe=["title","titleId"];function YB(){return YB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function mXe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var hXe=function(t){var n=t.title,r=t.titleId,o=dXe(t,fXe);return a("svg",YB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8.16 12H9.5a.5.5 0 110 1h-4a.5.5 0 110-1h1.639l1.7-8H7.5a.5.5 0 010-1h4a.5.5 0 110 1H9.861l-1.7 8z"}))},gXe=hXe;var F6={};$(F6,{icon:()=>OXe});var E$t=P(L());var vXe=["title","titleId"];function QB(){return QB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function bXe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var wXe=function(t){var n=t.title,r=t.titleId,o=yXe(t,vXe);return a("svg",QB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.556 5.051a.45.45 0 00.637.637l1.503-1.504c.432-.431 1.278-.382 1.89.23.612.612.662 1.458.23 1.89L9.519 8.6c-.432.432-1.278.383-1.89-.23a.45.45 0 10-.636.637c.914.914 2.33 1.063 3.162.23l2.297-2.297c.833-.833.684-2.248-.23-3.162-.914-.915-2.33-1.063-3.162-.23L7.556 5.051zm.888 5.261a.45.45 0 00-.637 0l-1.503 1.504c-.432.431-1.278.382-1.89-.23-.612-.612-.661-1.458-.23-1.89L6.481 7.4c.432-.432 1.278-.383 1.89.23a.45.45 0 00.636-.637c-.914-.914-2.33-1.063-3.162-.23L3.548 9.06c-.833.833-.685 2.248.23 3.162.914.915 2.33 1.063 3.162.23l1.504-1.503a.45.45 0 000-.637zM7.877 5.76a.39.39 0 00.274-.114l1.503-1.504-1.503 1.504a.39.39 0 01-.274.114zm.912 3.183c-.4.003-.843-.172-1.202-.53.359.358.802.533 1.202.53zM12.18 3.82c-.502-.503-1.155-.766-1.773-.76.618-.006 1.27.257 1.773.76.898.898 1.034 2.275.23 3.078l-2.297 2.297 2.297-2.297c.804-.803.668-2.18-.23-3.078zm-4.062 6.42a.39.39 0 01.284.667L6.898 12.41l1.504-1.503a.39.39 0 00-.284-.667zm-.926-3.965c.618-.006 1.27.257 1.773.76-.502-.503-1.155-.766-1.773-.76zM5.414 12.15a1.762 1.762 0 01-1.042-.522c-.626-.627-.692-1.511-.23-1.974L6.44 7.358 4.142 9.654c-.462.463-.396 1.348.23 1.974.311.311.687.484 1.042.522z"}))},OXe=wXe;var W6={};$(W6,{icon:()=>IXe});var A$t=P(L());var xXe=["title","titleId"];function ZB(){return ZB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function SXe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var jXe=function(t){var n=t.title,r=t.titleId,o=_Xe(t,xXe);return a("svg",ZB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M3 8v1h1v1H1V9h1V8H1V7h3v1H3zm1 4v2H1v-1h1v-1H1v-1h3v1zM3 5h1v1H1V5h1V4H1V3h2v2zm2.5-1h8a.5.5 0 110 1h-8a.5.5 0 010-1zm0 4h8a.5.5 0 110 1h-8a.5.5 0 010-1zm0 4h8a.5.5 0 110 1h-8a.5.5 0 110-1z"}))},IXe=jXe;var B6={};$(B6,{icon:()=>AXe});var T$t=P(L());var kXe=["title","titleId"];function eH(){return eH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function EXe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var CXe=function(t){var n=t.title,r=t.titleId,o=PXe(t,kXe);return a("svg",eH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M10 6H5C3.057 6 2 7.057 2 9s1.057 3 3 3h1.5v-1H5c-1.39 0-2-.61-2-2 0-1.39.61-2 2-2h5v3l3.5-3.5L10 3v3z"}))},AXe=CXe;var H6={};$(H6,{icon:()=>LXe});var z$t=P(L());var MXe=["title","titleId"];function tH(){return tH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function RXe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var zXe=function(t){var n=t.title,r=t.titleId,o=TXe(t,MXe);return a("svg",tH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M10.023 10h1.274c.006.08.01.164.01.25a2.557 2.557 0 01-.883 1.949c-.284.25-.627.446-1.03.588A4.087 4.087 0 018.028 13a4.616 4.616 0 01-3.382-1.426c-.193-.259-.193-.5 0-.724.193-.223.438-.266.735-.13.343.363.748.655 1.213.876.466.22.949.33 1.449.33.637 0 1.132-.144 1.485-.433.353-.29.53-.67.53-1.14a1.72 1.72 0 00-.034-.353zM5.586 7a2.49 2.49 0 01-.294-.507 2.316 2.316 0 01-.177-.934c0-.363.076-.701.228-1.015.152-.314.363-.586.633-.816.27-.23.588-.41.955-.537A3.683 3.683 0 018.145 3c.578 0 1.112.11 1.603.33.49.221.907.508 1.25.861.16.282.16.512 0 .692-.16.18-.38.214-.662.102a3.438 3.438 0 00-.978-.669 2.914 2.914 0 00-1.213-.242c-.54 0-.973.125-1.302.375-.328.25-.492.595-.492 1.036 0 .236.046.434.14.596.092.162.217.304.374.426.157.123.329.23.515.324.119.06.24.116.362.169H5.586zM2.5 8h11a.5.5 0 110 1h-11a.5.5 0 010-1z"}))},LXe=zXe;var V6={};$(V6,{icon:()=>BXe});var D$t=P(L());var DXe=["title","titleId"];function rH(){return rH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function FXe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var WXe=function(t){var n=t.title,r=t.titleId,o=NXe(t,DXe);return a("svg",rH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M14 3v2H2V3v10h12V3zM2 2h12c.552 0 1 .413 1 .923v10.154c0 .51-.448.923-1 .923H2c-.552 0-1-.413-1-.923V2.923C1 2.413 1.448 2 2 2zm0 5h12v1H2V7zm0 3h12v1H2v-1z"}))},BXe=WXe;var q6={};$(q6,{icon:()=>$Xe});var F$t=P(L());var HXe=["title","titleId"];function nH(){return nH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function qXe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var UXe=function(t){var n=t.title,r=t.titleId,o=VXe(t,HXe);return a("svg",nH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5 3.536V7.8c0 1.628 1.224 2.6 3 2.6 1.783 0 3-.972 3-2.6V3.536c0-.357.167-.536.5-.536.333 0 .5.179.5.536v4.318c0 2.093-1.665 3.546-4 3.546S4 9.893 4 7.8V3.536C4 3.179 4.167 3 4.5 3c.333 0 .5.179.5.536zM2.5 13h11a.5.5 0 110 1h-11a.5.5 0 110-1z"}))},$Xe=UXe;var U6={};$(U6,{icon:()=>YXe});var B$t=P(L());var JXe=["title","titleId"];function oH(){return oH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function XXe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var KXe=function(t){var n=t.title,r=t.titleId,o=GXe(t,JXe);return a("svg",oH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5.5 6h5c1.943 0 3 1.057 3 3s-1.057 3-3 3H9v-1h1.5c1.39 0 2-.61 2-2 0-1.39-.61-2-2-2h-5v3L2 6.5 5.5 3v3z"}))},YXe=KXe;var $6={};$($6,{icon:()=>rKe});var V$t=P(L());var QXe=["title","titleId"];function iH(){return iH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function eKe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var tKe=function(t){var n=t.title,r=t.titleId,o=ZXe(t,QXe);return a("svg",iH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5.5 4h8a.5.5 0 110 1h-8a.5.5 0 010-1zm0 4h8a.5.5 0 110 1h-8a.5.5 0 010-1zm0 4h8a.5.5 0 110 1h-8a.5.5 0 110-1zm-3-7a.5.5 0 110-1 .5.5 0 010 1zm0 4a.5.5 0 110-1 .5.5 0 010 1zm0 4a.5.5 0 110-1 .5.5 0 010 1z"}))},rKe=tKe;var J6={};$(J6,{icon:()=>lKe});var U$t=P(L());var nKe=["title","titleId"];function aH(){return aH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function iKe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var aKe=function(t){var n=t.title,r=t.titleId,o=oKe(t,nKe);return a("svg",aH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M14.95 3.684L8.637 8.912a1 1 0 01-1.276 0L1.051 3.684A.999.999 0 001 4v8a1 1 0 001 1h12a1 1 0 001-1V4a.999.999 0 00-.05-.316zM2 2h12a2 2 0 012 2v8a2 2 0 01-2 2H2a2 2 0 01-2-2V4a2 2 0 012-2zm-.21 1l5.576 4.603a1 1 0 001.27.003L14.268 3H1.79z"}))},lKe=aKe;var G6={};$(G6,{icon:()=>zP});var J$t=P(L());var sKe=["title","titleId"];function lH(){return lH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function cKe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var pKe=function(t){var n=t.title,r=t.titleId,o=uKe(t,sKe);return a("svg",lH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o))},zP=pKe;var X6={};$(X6,{icon:()=>gKe});var X$t=P(L());var fKe=["title","titleId"];function sH(){return sH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function mKe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var hKe=function(t){var n=t.title,r=t.titleId,o=dKe(t,fKe);return a("svg",sH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M15.862 14.18v.001a.482.482 0 01.1.521.5.5 0 01-.447.299h-3.149c-.07 0-.136 0-.2-.003a.664.664 0 01-.414-.14c-.35-.31-.684-.637-1.001-.981l-1.772-1.738a5.941 5.941 0 01-3.802.14l-.045-.012a5.89 5.89 0 01-2.682-1.712A5.715 5.715 0 011.08 7.72a5.66 5.66 0 01.348-3.118A5.78 5.78 0 013.39 2.124a5.979 5.979 0 016.136-.505 5.836 5.836 0 012.356 2.123 5.67 5.67 0 01.873 3.017l.001.003c0 .128-.051.25-.143.34a.495.495 0 01-.694 0 .476.476 0 01-.143-.34c0-.95-.288-1.878-.826-2.668a4.88 4.88 0 00-2.198-1.769 4.99 4.99 0 00-2.83-.273 4.93 4.93 0 00-2.509 1.314 4.774 4.774 0 00-1.34 2.46A4.715 4.715 0 002.352 8.6a4.82 4.82 0 001.804 2.155c.805.528 1.752.81 2.721.81a4.899 4.899 0 001.296-.194l.032-.009.717-.211a.506.506 0 01.483.111l1.11 1.026 1.788 1.752h2.03l-3.657-3.583a.475.475 0 01.014-.666.495.495 0 01.679-.013l4.493 4.402z"}),a("path",{d:"M7.097 3.468L9.679 4.93a.433.433 0 01.218.37v2.924a.422.422 0 01-.218.37l-2.582 1.461a.438.438 0 01-.437 0L4.077 8.594a.433.433 0 01-.218-.37V5.3a.422.422 0 01.218-.37L6.66 3.467a.446.446 0 01.437 0zm1.845 4.27V5.784a.328.328 0 00-.17-.287L7.047 4.52a.342.342 0 00-.338 0l-1.726.977a.336.336 0 00-.168.287v1.953a.326.326 0 00.17.287l1.724.977a.342.342 0 00.338 0l1.726-.978a.334.334 0 00.169-.287z"}))},gKe=hKe;var K6={};$(K6,{icon:()=>OKe});var Y$t=P(L());var vKe=["title","titleId"];function uH(){return uH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function bKe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var wKe=function(t){var n=t.title,r=t.titleId,o=yKe(t,vKe);return a("svg",uH({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M2.648 9.937l7.29-7.288a2.21 2.21 0 013.124 0l2.29 2.288a2.21 2.21 0 010 3.126L10.413 13H12.5a.5.5 0 010 1H4.501a2.21 2.21 0 01-1.563-.647l.707-.707c.227.226.535.354.856.354h4.005a1.21 1.21 0 00.848-.354l1.292-1.293-4-4-3.29 3.291a1.21 1.21 0 000 1.712l.29.29-.708.707-.29-.29a2.21 2.21 0 010-3.126zM8 6h6.89a1.208 1.208 0 00-.246-.356L14 5H9L8 6zm2-2h3l-.645-.644a1.21 1.21 0 00-1.71 0L10 4zm4.89 3H7.708l1 1H14l.644-.644A1.22 1.22 0 0014.891 7zM9.708 9l1.646 1.646L13 9H9.707z"}),a("path",{d:"M14 11.5a.5.5 0 11-1 0 .5.5 0 011 0zm1.5-.5a.5.5 0 100-1 .5.5 0 000 1zm-1 2a.5.5 0 000 1h1a.5.5 0 000-1h-1z"}))},OKe=wKe;var Y6={};$(Y6,{icon:()=>IKe});var Z$t=P(L());var xKe=["title","titleId"];function cH(){return cH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function SKe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var jKe=function(t){var n=t.title,r=t.titleId,o=_Ke(t,xKe);return a("svg",cH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M12.535 12.493a.47.47 0 01.468.468v2.564a.473.473 0 01-.466.475H3V0H12.595a.45.45 0 01.398.463v2.565a.469.469 0 01-.468.467h-.065a.468.468 0 01-.467-.467V1H4v14h8.01l-.007-2.04c0-.257.21-.467.467-.467h.065zm-1.096-7.59l2.121 2.122a1.5 1.5 0 010 2.121l-2.12 2.122a.5.5 0 11-.708-.708l2.121-2.12a.5.5 0 000-.708l-2.121-2.121a.5.5 0 01.707-.707z"}))},IKe=jKe;var Q6={};$(Q6,{icon:()=>AKe});var tJt=P(L());var kKe=["title","titleId"];function pH(){return pH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function EKe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var CKe=function(t){var n=t.title,r=t.titleId,o=PKe(t,kKe);return a("svg",pH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M4.354 12.354l8-8a.5.5 0 00-.708-.708l-8 8a.5.5 0 00.708.708zM1 10.5a.5.5 0 111 0v3a.5.5 0 00.5.5h3a.5.5 0 110 1h-3A1.5 1.5 0 011 13.5v-3zm14-5a.5.5 0 11-1 0v-3a.5.5 0 00-.5-.5h-3a.5.5 0 110-1h3A1.5 1.5 0 0115 2.5v3z"}))},AKe=CKe;var Z6={};$(Z6,{icon:()=>LKe});var nJt=P(L());var MKe=["title","titleId"];function fH(){return fH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function RKe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var zKe=function(t){var n=t.title,r=t.titleId,o=TKe(t,MKe);return a("svg",fH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M6.707 10L10 6.707A.5.5 0 009.293 6L6 9.293a.5.5 0 10.707.707zM4 9.5a.5.5 0 011 0v1a.5.5 0 00.5.5h1a.5.5 0 110 1h-1A1.5 1.5 0 014 10.5v-1zm8-3a.5.5 0 11-1 0v-1a.5.5 0 00-.5-.5h-1a.5.5 0 010-1h1A1.5 1.5 0 0112 5.5v1z"}))},LKe=zKe;var ew={};$(ew,{icon:()=>BKe});var iJt=P(L());var DKe=["title","titleId"];function dH(){return dH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function FKe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var WKe=function(t){var n=t.title,r=t.titleId,o=NKe(t,DKe);return a("svg",dH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8.505 1c.422-.003.844.17 1.166.516l1.95 2.05c.213.228.213.6 0 .828a.52.52 0 01-.771 0L9 2.451v7.993c0 .307-.224.556-.5.556s-.5-.249-.5-.556v-7.96l-1.82 1.91a.52.52 0 01-.77 0 .617.617 0 010-.829l1.95-2.05A1.575 1.575 0 018.5 1h.005zM4.18 7c-.473 0-.88.294-.972.703l-1.189 5.25a.776.776 0 00-.019.172c0 .483.444.875.99.875H14.01c.065 0 .13-.006.194-.017.537-.095.885-.556.778-1.03l-1.19-5.25C13.7 7.294 13.293 7 12.822 7H4.18zM6 6v1h5V6h1.825c.946 0 1.76.606 1.946 1.447l1.19 5.4c.215.975-.482 1.923-1.556 2.118a2.18 2.18 0 01-.39.035H2.985C1.888 15 1 14.194 1 13.2c0-.119.013-.237.039-.353l1.19-5.4C2.414 6.606 3.229 6 4.174 6H6z"}))},BKe=WKe;var tw={};$(tw,{icon:()=>$Ke});var lJt=P(L());var HKe=["title","titleId"];function mH(){return mH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function qKe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var UKe=function(t){var n=t.title,r=t.titleId,o=VKe(t,HKe);return a("svg",mH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M15.98 7.873c.013.03.02.064.02.098v.06a.24.24 0 01-.02.097C15.952 8.188 13.291 14 8 14S.047 8.188.02 8.128A.24.24 0 010 8.03v-.059c0-.034.007-.068.02-.098C.048 7.813 2.709 2 8 2s7.953 5.813 7.98 5.873zm-1.37-.424a12.097 12.097 0 00-1.385-1.862C11.739 3.956 9.999 3 8 3c-2 0-3.74.956-5.225 2.587a12.098 12.098 0 00-1.701 2.414 12.095 12.095 0 001.7 2.413C4.26 12.043 6.002 13 8 13s3.74-.956 5.225-2.587A12.097 12.097 0 0014.926 8c-.08-.15-.189-.343-.315-.551zM8 4.75A3.253 3.253 0 0111.25 8 3.254 3.254 0 018 11.25 3.253 3.253 0 014.75 8 3.252 3.252 0 018 4.75zm0 1C6.76 5.75 5.75 6.76 5.75 8S6.76 10.25 8 10.25 10.25 9.24 10.25 8 9.24 5.75 8 5.75zm0 1.5a.75.75 0 100 1.5.75.75 0 000-1.5z"}))},$Ke=UKe;var rw={};$(rw,{icon:()=>YKe});var uJt=P(L());var JKe=["title","titleId"];function hH(){return hH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function XKe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var KKe=function(t){var n=t.title,r=t.titleId,o=GKe(t,JKe);return a("svg",hH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5.318 13.47l.776-.776A6.04 6.04 0 008 13c1.999 0 3.74-.956 5.225-2.587A12.097 12.097 0 0014.926 8a12.097 12.097 0 00-1.701-2.413l-.011-.012.707-.708c1.359 1.476 2.045 2.976 2.058 3.006.014.03.021.064.021.098v.06a.24.24 0 01-.02.097C15.952 8.188 13.291 14 8 14a7.03 7.03 0 01-2.682-.53zM2.04 11.092C.707 9.629.034 8.158.02 8.128A.24.24 0 010 8.03v-.059c0-.034.007-.068.02-.098C.048 7.813 2.709 2 8 2c.962 0 1.837.192 2.625.507l-.78.78A6.039 6.039 0 008 3c-2 0-3.74.956-5.225 2.587a12.098 12.098 0 00-1.701 2.414 12.11 12.11 0 001.674 2.383l-.708.708zM8.362 4.77L7.255 5.877a2.262 2.262 0 00-1.378 1.378L4.77 8.362A3.252 3.252 0 018.362 4.77zm2.86 2.797a3.254 3.254 0 01-3.654 3.654l1.06-1.06a2.262 2.262 0 001.533-1.533l1.06-1.06zm-9.368 7.287a.5.5 0 01-.708-.708l13-13a.5.5 0 01.708.708l-13 13z"}))},YKe=KKe;var nw={};$(nw,{icon:()=>rYe});var pJt=P(L());var QKe=["title","titleId"];function gH(){return gH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function eYe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var tYe=function(t){var n=t.title,r=t.titleId,o=ZKe(t,QKe);return a("svg",gH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 16A8 8 0 118 0a8 8 0 010 16zm0-1.067A6.933 6.933 0 108 1.067a6.933 6.933 0 000 13.866zM5.333 6.4a1.067 1.067 0 110-2.133 1.067 1.067 0 010 2.133zm5.334 0a1.067 1.067 0 110-2.133 1.067 1.067 0 010 2.133zM2.739 8.802a.533.533 0 01.922-.537C4.815 10.245 6.249 11.2 8 11.2c1.75 0 3.185-.956 4.34-2.935a.533.533 0 01.92.537c-1.333 2.287-3.1 3.465-5.26 3.465-2.16 0-3.927-1.178-5.26-3.465z"}))},rYe=tYe;var ow={};$(ow,{icon:()=>lYe});var dJt=P(L());var nYe=["title","titleId"];function vH(){return vH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function iYe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var aYe=function(t){var n=t.title,r=t.titleId,o=oYe(t,nYe);return a("svg",vH({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 16A8 8 0 118 0a8 8 0 010 16zm0-1.067A6.933 6.933 0 108 1.067a6.933 6.933 0 000 13.866zM5.333 6.4a1.067 1.067 0 110-2.133 1.067 1.067 0 010 2.133zm5.334 0a1.067 1.067 0 110-2.133 1.067 1.067 0 010 2.133zM3.2 10.667a.533.533 0 010-1.067h9.6a.533.533 0 110 1.067H3.2z",fillRule:"evenodd"}))},lYe=aYe;var iw={};$(iw,{icon:()=>fYe});var hJt=P(L());var sYe=["title","titleId"];function yH(){return yH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function cYe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var pYe=function(t){var n=t.title,r=t.titleId,o=uYe(t,sYe);return a("svg",yH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 16A8 8 0 118 0a8 8 0 010 16zm0-1.067A6.933 6.933 0 108 1.067a6.933 6.933 0 000 13.866zM5.333 6.4a1.067 1.067 0 110-2.133 1.067 1.067 0 010 2.133zm5.334 0a1.067 1.067 0 110-2.133 1.067 1.067 0 010 2.133zm2.487 3.868a.533.533 0 11-.708.797C10.936 9.725 9.458 9.067 8 9.067c-1.458 0-2.937.657-4.446 1.998a.533.533 0 11-.708-.797C4.536 8.765 6.258 8 8 8s3.463.765 5.154 2.268z"}))},fYe=pYe;var aw={};$(aw,{icon:()=>vYe});var vJt=P(L());var dYe=["title","titleId"];function bH(){return bH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function hYe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var gYe=function(t){var n=t.title,r=t.titleId,o=mYe(t,dYe);return a("svg",bH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M7.999 15.999a8 8 0 110-16 8 8 0 010 16zM8 15A7 7 0 108 1a7 7 0 000 14zM3.5 5h9a.5.5 0 110 1h-9a.5.5 0 010-1zm2 3h5a.5.5 0 110 1h-5a.5.5 0 010-1zm2 3h1a.5.5 0 110 1h-1a.5.5 0 110-1z"}))},vYe=gYe;var lw={};$(lw,{icon:()=>xYe});var bJt=P(L());var yYe=["title","titleId"];function wH(){return wH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function wYe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var OYe=function(t){var n=t.title,r=t.titleId,o=bYe(t,yYe);return a("svg",wH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.686 8.464c1.547-.619 3.08-.619 4.628 0A.5.5 0 0013 8V2a.5.5 0 00-.276-.447C11.259.82 9.458.82 7.342 1.526c-1.884.628-3.417.628-4.618.027A.5.5 0 002 2v12.5a.5.5 0 101 0V8.553c1.411.627 2.983.592 4.686-.089zM3 2.741c1.322.42 2.878.327 4.658-.267C9.4 1.894 10.843 1.85 12 2.322v4.975c-1.56-.464-3.128-.384-4.686.239-1.54.616-2.892.616-4.09.017A.498.498 0 003 7.5V2.74z"}))},xYe=OYe;var sw={};$(sw,{icon:()=>kYe});var OJt=P(L());var _Ye=["title","titleId"];function OH(){return OH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function jYe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var IYe=function(t){var n=t.title,r=t.titleId,o=SYe(t,_Ye);return a("svg",OH({viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5.14.192L7.53 2.49a.67.67 0 00.942 0L10.86.192a.677.677 0 01.944 0 .65.65 0 010 .93l-2.388 2.3a2.02 2.02 0 01-2.832 0l-2.388-2.3a.65.65 0 010-.93.677.677 0 01.944 0zm0 15.616l2.39-2.298a.67.67 0 01.942 0l2.389 2.298c.26.256.685.256.944 0a.65.65 0 000-.93l-2.388-2.3a2.02 2.02 0 00-2.832 0l-2.388 2.3a.65.65 0 000 .93c.26.256.683.256.944 0zM16 6H0v4h16V6zM1 9V7h14v2H1z"}))},kYe=IYe;var uw={};$(uw,{icon:()=>MYe});var _Jt=P(L());var PYe=["title","titleId"];function xH(){return xH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function CYe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var AYe=function(t){var n=t.title,r=t.titleId,o=EYe(t,PYe);return a("svg",xH({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M6 2H1v11h6.1c.07.348.177.682.316 1H1a1 1 0 01-1-1V2a1 1 0 011-1h5.25a.75.75 0 01.75.75v1.125c0 .069.056.125.125.125H13a1 1 0 011 1v3.416a4.962 4.962 0 00-1-.316V4H7.125A1.125 1.125 0 016 2.875V2zm10 10a4 4 0 11-8 0 4 4 0 018 0zm-1.646-1.354a.5.5 0 010 .708l-2.5 2.5a.5.5 0 01-.708 0l-1-1a.5.5 0 01.708-.708l.646.647 2.146-2.147a.5.5 0 01.708 0z"}))},MYe=AYe;var cw={};$(cw,{icon:()=>DYe});var jJt=P(L());var TYe=["title","titleId"];function _H(){return _H=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function zYe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var LYe=function(t){var n=t.title,r=t.titleId,o=RYe(t,TYe);return a("svg",_H({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7 2H2v11h12V4H8.125A1.125 1.125 0 017 2.875V2zm.25-1a.75.75 0 01.75.75v1.125c0 .069.056.125.125.125H14a1 1 0 011 1v9a1 1 0 01-1 1H2a1 1 0 01-1-1V2a1 1 0 011-1h5.25z"}))},DYe=LYe;var pw={};$(pw,{icon:()=>HYe});var kJt=P(L());var NYe=["title","titleId"];function SH(){return SH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function WYe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var BYe=function(t){var n=t.title,r=t.titleId,o=FYe(t,NYe);return a("svg",SH({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M1 9.5l.826-3.717A1 1 0 012.802 5H13V4H7.125A1.125 1.125 0 016 2.875V2H1v7.5zm.247 3.5H7.1c.07.348.177.682.316 1H1a1 1 0 01-1-1V2a1 1 0 011-1h5.25a.75.75 0 01.75.75v1.125c0 .069.056.125.125.125H13a1 1 0 011 1v1h.753a1 1 0 01.977 1.217l-.447 2.011a5.015 5.015 0 00-.887-.618L14.753 6H2.803l-1.556 7zM16 12a4 4 0 11-8 0 4 4 0 018 0zm-4 .5a.577.577 0 01-.57-.495l-.29-2.015a.867.867 0 111.718 0l-.288 2.015a.577.577 0 01-.57.495zm0 2.5a1 1 0 100-2 1 1 0 000 2z"}))},HYe=BYe;var fw={};$(fw,{icon:()=>JYe});var EJt=P(L());var VYe=["title","titleId"];function jH(){return jH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function UYe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var $Ye=function(t){var n=t.title,r=t.titleId,o=qYe(t,VYe);return a("svg",jH({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M1 9.5l.826-3.717A1 1 0 012.802 5H13V4H7.125A1.125 1.125 0 016 2.875V2H1v7.5zm.247 3.5h11.95l1.556-7H2.803l-1.556 7zM13 14H1a1 1 0 01-1-1V2a1 1 0 011-1h5.25a.75.75 0 01.75.75v1.125c0 .069.056.125.125.125H13a1 1 0 011 1v1h.753a1 1 0 01.977 1.217l-1.556 7a1 1 0 01-.976.783H13z"}))},JYe=$Ye;var dw={};$(dw,{icon:()=>QYe});var AJt=P(L());var GYe=["title","titleId"];function IH(){return IH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function KYe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var YYe=function(t){var n=t.title,r=t.titleId,o=XYe(t,GYe);return a("svg",IH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M3 2a1 1 0 00-1 1v10a1 1 0 102 0V3a1 1 0 00-1-1zm5.146.22l7.2 4.581a1.425 1.425 0 010 2.398l-7.2 4.581C7.21 14.375 6 13.692 6 12.581V3.42c0-1.112 1.21-1.795 2.146-1.2z",clipRule:"evenodd"}))},QYe=YYe;var mw={};$(mw,{icon:()=>nQe});var TJt=P(L());var ZYe=["title","titleId"];function kH(){return kH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function tQe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var rQe=function(t){var n=t.title,r=t.titleId,o=eQe(t,ZYe);return a("svg",kH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M13 2a1 1 0 011 1v10a1 1 0 11-2 0V3a1 1 0 011-1zm-5.146.22l-7.2 4.581a1.425 1.425 0 000 2.398l7.2 4.581c.936.595 2.146-.088 2.146-1.199V3.42c0-1.111-1.21-1.794-2.146-1.199z",clipRule:"evenodd"}))},nQe=rQe;var hw={};$(hw,{icon:()=>sQe});var zJt=P(L());var oQe=["title","titleId"];function PH(){return PH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function aQe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var lQe=function(t){var n=t.title,r=t.titleId,o=iQe(t,oQe);return a("svg",PH({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M9 7V3h1v3h3v1H9zM7 7H3V6h3V3h1v4zm2 2h4v1h-3v3H9V9zM7 9v4H6v-3H3V9h4zM0 1.994C0 .893.895 0 1.994 0h12.012C15.107 0 16 .895 16 1.994v12.012A1.995 1.995 0 0114.006 16H1.994A1.995 1.995 0 010 14.006V1.994zm1 0v12.012c0 .548.446.994.994.994h12.012a.995.995 0 00.994-.994V1.994A.995.995 0 0014.006 1H1.994A.995.995 0 001 1.994z"}))},sQe=lQe;var gw={};$(gw,{icon:()=>dQe});var DJt=P(L());var uQe=["title","titleId"];function EH(){return EH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function pQe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var fQe=function(t){var n=t.title,r=t.titleId,o=cQe(t,uQe);return a("svg",EH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M13 3v4h-1V4H9V3h4zM3 3h4v1H4v3H3V3zm10 10H9v-1h3V9h1v4zM3 13V9h1v3h3v1H3zM0 1.994C0 .893.895 0 1.994 0h12.012C15.107 0 16 .895 16 1.994v12.012A1.995 1.995 0 0114.006 16H1.994A1.995 1.995 0 010 14.006V1.994zm1 0v12.012c0 .548.446.994.994.994h12.012a.995.995 0 00.994-.994V1.994A.995.995 0 0014.006 1H1.994A.995.995 0 001 1.994z",fillRule:"evenodd"}))},dQe=fQe;var vw={};$(vw,{icon:()=>yQe});var FJt=P(L());var mQe=["title","titleId"];function CH(){return CH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function gQe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var vQe=function(t){var n=t.title,r=t.titleId,o=hQe(t,mQe);return a("svg",CH({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M13 2.226v2.218c-.359-.143-.845-.218-1.315-.218-1.059 0-1.631.519-1.802 1.565l-.168.937h2.798v2.159H9.41l-.313 1.674C8.696 12.987 7.261 14 4.785 14c-.718 0-1.35-.092-1.785-.251v-2.243c.418.176.905.268 1.383.268 1.008 0 1.546-.435 1.725-1.523l.24-1.364H3.787V6.728h2.812l.288-1.264C7.286 3.071 8.662 2 11.352 2c.598 0 1.306.1 1.648.226z"}))},yQe=vQe;var yw={};$(yw,{icon:()=>_Qe});var BJt=P(L());var bQe=["title","titleId"];function AH(){return AH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function OQe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var xQe=function(t){var n=t.title,r=t.titleId,o=wQe(t,bQe);return a("svg",AH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M.164 10.329L1.87 8 .163 5.67c.18-.601.43-1.19.758-1.757a8.197 8.197 0 011.142-1.535l2.872.313L6.099.05a8.166 8.166 0 013.8-.003l1.166 2.644 2.872-.313a8.166 8.166 0 011.899 3.293L14.13 8l1.706 2.33c-.18.601-.43 1.19-.758 1.757a8.197 8.197 0 01-1.142 1.535l-2.872-.313-1.164 2.641a8.166 8.166 0 01-3.8.003l-1.166-2.644-2.872.313a8.166 8.166 0 01-1.899-3.293zm4.663 1.986a1 1 0 011.023.591l.957 2.17c.79.134 1.597.132 2.387-.001l.956-2.169a1 1 0 011.023-.59l2.358.256a7.23 7.23 0 001.194-2.068l-1.401-1.913a1 1 0 010-1.182l1.4-1.912a7.165 7.165 0 00-1.192-2.069l-2.359.257a1 1 0 01-1.023-.591L9.193.924a7.165 7.165 0 00-2.387.001L5.85 3.094a1 1 0 01-1.023.59l-2.358-.256a7.23 7.23 0 00-1.194 2.068l1.401 1.913a1 1 0 010 1.182l-1.4 1.912c.28.751.681 1.45 1.192 2.069l2.359-.257zM8 11a3 3 0 110-6 3 3 0 010 6zm0-1a2 2 0 100-4 2 2 0 000 4z"}))},_Qe=xQe;var bw={};$(bw,{icon:()=>PQe});var VJt=P(L());var SQe=["title","titleId"];function MH(){return MH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function IQe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var kQe=function(t){var n=t.title,r=t.titleId,o=jQe(t,SQe);return a("svg",MH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M9.035 9A3.5 3.5 0 0115 7.05V4.5c0-1.072-.648-1.72-2.098-2.01a.5.5 0 01.196-.98C14.981 1.886 16 2.905 16 4.5v4.25c0 .072-.015.14-.043.202A3.5 3.5 0 119.035 10h-2.07A3.5 3.5 0 11.043 8.952.498.498 0 010 8.75V4.5c0-1.595 1.019-2.614 2.902-2.99a.5.5 0 01.196.98C1.648 2.78 1 3.428 1 4.5v2.55A3.5 3.5 0 016.965 9h2.07zM3.5 12a2.5 2.5 0 100-5 2.5 2.5 0 000 5zm9 0a2.5 2.5 0 100-5 2.5 2.5 0 000 5z"}))},PQe=kQe;var ww={};$(ww,{icon:()=>TQe});var UJt=P(L());var EQe=["title","titleId"];function TH(){return TH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function AQe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var MQe=function(t){var n=t.title,r=t.titleId,o=CQe(t,EQe);return a("svg",TH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M1.019 8a6.462 6.462 0 001.003 3h2.382a14.469 14.469 0 01-.396-3h-2.99zm0-1h2.989c.033-1.078.172-2.094.396-3H2.022a6.462 6.462 0 00-1.003 3zM13.98 8h-2.989a14.469 14.469 0 01-.396 3h2.382a6.462 6.462 0 001.003-3zm0-1a6.462 6.462 0 00-1.003-3h-2.382c.224.906.363 1.922.396 3h2.99zM5.008 8c.037 1.107.195 2.127.429 3h4.126c.234-.873.392-1.893.429-3H5.008zm0-1h4.984a13.422 13.422 0 00-.429-3H5.437a13.422 13.422 0 00-.429 3zM.016 8H0V7h.016a7.5 7.5 0 0114.968 0H15v1h-.016A7.5 7.5 0 01.016 8zm2.794 4a6.501 6.501 0 002.717 1.695A7.315 7.315 0 014.7 12H2.81zm9.38 0H10.3c-.23.657-.51 1.23-.827 1.695A6.501 6.501 0 0012.19 12zm-6.428 0c.484 1.24 1.132 2 1.738 2 .606 0 1.254-.76 1.738-2H5.762zM2.81 3H4.7c.23-.657.51-1.23.827-1.695A6.501 6.501 0 002.81 3zm9.38 0a6.501 6.501 0 00-2.717-1.695c.317.465.597 1.038.827 1.695h1.89zM5.762 3h3.476C8.754 1.76 8.106 1 7.5 1c-.606 0-1.254.76-1.738 2z"}))},TQe=MQe;var Ow={};$(Ow,{icon:()=>NQe});var JJt=P(L());var RQe=["title","titleId"];function RH(){return RH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function LQe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var DQe=function(t){var n=t.title,r=t.titleId,o=zQe(t,RQe);return a("svg",RH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M13.5 6c.276 0 .5.232.5.5 0 .276-.229.5-.5.5h-11a.505.505 0 01-.5-.5c0-.276.229-.5.5-.5h11zm0 3c.276 0 .5.232.5.5 0 .276-.229.5-.5.5h-11a.505.505 0 01-.5-.5c0-.276.229-.5.5-.5h11z"}))},NQe=DQe;var xw={};$(xw,{icon:()=>VQe});var XJt=P(L());var FQe=["title","titleId"];function zH(){return zH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function BQe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var HQe=function(t){var n=t.title,r=t.titleId,o=WQe(t,FQe);return a("svg",zH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M6 2.5c0-.276.232-.5.5-.5.276 0 .5.229.5.5v11c0 .276-.232.5-.5.5a.503.503 0 01-.5-.5v-11zm3 0c0-.276.232-.5.5-.5.276 0 .5.229.5.5v11c0 .276-.232.5-.5.5a.503.503 0 01-.5-.5v-11z"}))},VQe=HQe;var _w={};$(_w,{icon:()=>GQe});var YJt=P(L());var qQe=["title","titleId"];function LH(){return LH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function $Qe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var JQe=function(t){var n=t.title,r=t.titleId,o=UQe(t,qQe);return a("svg",LH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M1 5V1h4v4H1zm3-1V2H2v2h2zm2 1V1h4v4H6zm3-1V2H7v2h2zm2 1V1h4v4h-4zm1-1h2V2h-2v2zM1 10V6h4v4H1zm3-1V7H2v2h2zm2 1V6h4v4H6zm3-1V7H7v2h2zm2 1V6h4v4h-4zm3-1V7h-2v2h2zM1 15v-4h4v4H1zm1-1h2v-2H2v2zm4 1v-4h4v4H6zm1-1h2v-2H7v2zm4 1v-4h4v4h-4zm1-1h2v-2h-2v2z"}))},GQe=JQe;var Sw={};$(Sw,{icon:()=>ZQe});var ZJt=P(L());var XQe=["title","titleId"];function DH(){return DH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function YQe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var QQe=function(t){var n=t.title,r=t.titleId,o=KQe(t,XQe);return a("svg",DH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.402 3.098a3.75 3.75 0 00-5.304 5.304l5.558 5.27L8 14l5.892-5.588a3.75 3.75 0 10-5.294-5.313L8 3.697l-.598-.599zM2.796 7.685a2.747 2.747 0 01.01-3.88 2.75 2.75 0 013.889 0L8 5.111l1.305-1.306a2.75 2.75 0 113.89 3.89L8 12.62 2.796 7.685z"}))},ZQe=QQe;var jw={};$(jw,{icon:()=>oZe});var tGt=P(L());var eZe=["title","titleId"];function NH(){return NH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function rZe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var nZe=function(t){var n=t.title,r=t.titleId,o=tZe(t,eZe);return a("svg",NH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M12 9a3 3 0 110 6 3 3 0 010-6zm0 1a2 2 0 100 4 2 2 0 000-4zM4 2a2 2 0 110 4 2 2 0 010-4zm0 1a1 1 0 100 2 1 1 0 000-2zm0 5a4 4 0 110 8 4 4 0 010-8zm0 1a3 3 0 100 6 3 3 0 000-6zm8-9a4 4 0 110 8 4 4 0 010-8zm0 1a3 3 0 100 6 3 3 0 000-6z"}))},oZe=nZe;var Iw={};$(Iw,{icon:()=>uZe});var nGt=P(L());var iZe=["title","titleId"];function FH(){return FH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function lZe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var sZe=function(t){var n=t.title,r=t.titleId,o=aZe(t,iZe);return a("svg",FH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M13.6 12.186l-1.357-1.358c-.025-.025-.058-.034-.084-.056.53-.794.84-1.746.84-2.773a4.977 4.977 0 00-.84-2.772c.026-.02.059-.03.084-.056L13.6 3.813a6.96 6.96 0 010 8.373zM8 15A6.956 6.956 0 013.814 13.6l1.358-1.358c.025-.025.034-.057.055-.084C6.02 12.688 6.974 13 8 13a4.978 4.978 0 002.773-.84c.02.026.03.058.056.083l1.357 1.358A6.956 6.956 0 018 15zm-5.601-2.813a6.963 6.963 0 010-8.373l1.359 1.358c.024.025.057.035.084.056A4.97 4.97 0 003 8c0 1.027.31 1.98.842 2.773-.027.022-.06.031-.084.056l-1.36 1.358zm5.6-.187A4 4 0 118 4a4 4 0 010 8zM8 1c1.573 0 3.019.525 4.187 1.4l-1.357 1.358c-.025.025-.035.057-.056.084A4.979 4.979 0 008 3a4.979 4.979 0 00-2.773.842c-.021-.027-.03-.059-.055-.084L3.814 2.4A6.957 6.957 0 018 1zm0-1a8.001 8.001 0 10.003 16.002A8.001 8.001 0 008 0z"}))},uZe=sZe;var kw={};$(kw,{icon:()=>mZe});var iGt=P(L());var cZe=["title","titleId"];function WH(){return WH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function fZe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var dZe=function(t){var n=t.title,r=t.titleId,o=pZe(t,cZe);return a("svg",WH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8.13 1.229l5.5 4.47a1 1 0 01.37.777V14a1 1 0 01-1 1H2a1 1 0 01-1-1V6.476a1 1 0 01.37-.776l5.5-4.471a1 1 0 011.26 0zM13 6.476L7.5 2.005 2 6.475V14h11V6.476z"}))},mZe=dZe;var Pw={};$(Pw,{icon:()=>bZe});var lGt=P(L());var hZe=["title","titleId"];function BH(){return BH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function vZe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var yZe=function(t){var n=t.title,r=t.titleId,o=gZe(t,hZe);return a("svg",BH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M7.5 11.508L7.468 8H6.25V7h2.401l.03 3.508H9.8v1H7.5zm-.25-6.202a.83.83 0 01.207-.577c.137-.153.334-.229.59-.229.256 0 .454.076.594.23.14.152.209.345.209.576 0 .228-.07.417-.21.568-.14.15-.337.226-.593.226-.256 0-.453-.075-.59-.226a.81.81 0 01-.207-.568zM8 13A5 5 0 108 3a5 5 0 000 10zm0 1A6 6 0 118 2a6 6 0 010 12z"}))},bZe=yZe;var Ew={};$(Ew,{icon:()=>SZe});var uGt=P(L());var wZe=["title","titleId"];function HH(){return HH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function xZe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var _Ze=function(t){var n=t.title,r=t.titleId,o=OZe(t,wZe);return a("svg",HH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6 5a2 2 0 11-4 0 2 2 0 014 0zm9-4a1 1 0 011 1v12a1 1 0 01-1 1H1a1 1 0 01-1-1V2a1 1 0 011-1zm-3.448 6.134l-3.76 2.769a.5.5 0 01-.436.077l-.087-.034-1.713-.87L1 11.8V14h14V9.751l-3.448-2.617zM15 2H1v8.635l4.28-2.558a.5.5 0 01.389-.054l.094.037 1.684.855 3.813-2.807a.5.5 0 01.52-.045l.079.05L15 8.495V2z"}))},SZe=_Ze;var Cw={};$(Cw,{icon:()=>EZe});var pGt=P(L());var jZe=["title","titleId"];function VH(){return VH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function kZe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var PZe=function(t){var n=t.title,r=t.titleId,o=IZe(t,jZe);return a("svg",VH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M9 10.114l1.85-1.943a.52.52 0 01.77 0c.214.228.214.6 0 .829l-1.95 2.05a1.552 1.552 0 01-2.31 0L5.41 9a.617.617 0 010-.829.52.52 0 01.77 0L8 10.082V1.556C8 1.249 8.224 1 8.5 1s.5.249.5.556v8.558zM4.18 6a.993.993 0 00-.972.804l-1.189 6A.995.995 0 002.991 14h11.018a1 1 0 00.972-1.196l-1.19-6a.993.993 0 00-.97-.804H4.18zM6 5v1h5V5h1.825c.946 0 1.76.673 1.946 1.608l1.19 6A2 2 0 0114.016 15H2.984a1.992 1.992 0 01-1.945-2.392l1.19-6C2.414 5.673 3.229 5 4.174 5H6z"}))},EZe=PZe;var Aw={};$(Aw,{icon:()=>RZe});var dGt=P(L());var CZe=["title","titleId"];function qH(){return qH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function MZe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var TZe=function(t){var n=t.title,r=t.titleId,o=AZe(t,CZe);return a("svg",qH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M12 2H2v11h6v1H1V1h12v6h-1V2zM5 5h5.999V4H5v1zM3 5V4h1v1H3zm2 3V7h3v1H5zM3 8V7h1v1H3zm2 3v-1h2v1H5zm5.5-1.207L9.086 8.379l-.707.707L9.793 10.5l-1.414 1.414.707.707 1.414-1.414 1.414 1.414.707-.707-1.414-1.414 1.414-1.414-.707-.707L10.5 9.793zM3 11v-1h1v1H3zm7.5-5a4.5 4.5 0 110 9 4.5 4.5 0 010-9z"}))},RZe=TZe;var Mw={};$(Mw,{icon:()=>FZe});var hGt=P(L());var zZe=["title","titleId"];function UH(){return UH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function DZe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var NZe=function(t){var n=t.title,r=t.titleId,o=LZe(t,zZe);return a("svg",UH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M12 2H2v11h4v1H1V1h12v5h-1V2zM5 5h5.999V4H5v1zM3 5V4h1v1H3zm2 3V7h6v1H5zM3 8V7h1v1H3zm2 3v-1h3v1H5zm-2 0v-1h1v1H3zm4.502 1.41L12.913 7 15 9.087l-5.41 5.41L7 15l.502-2.59z"}))},FZe=NZe;var Tw={};$(Tw,{icon:()=>qZe});var vGt=P(L());var WZe=["title","titleId"];function $H(){return $H=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function HZe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var VZe=function(t){var n=t.title,r=t.titleId,o=BZe(t,WZe);return a("svg",$H({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M14.516 9H10.5a.5.5 0 010-1h4.016L13.11 5.948c-.171-.252-.137-.62.079-.821.217-.2.531-.159.703.092l2 2.916a.648.648 0 01.108.397.643.643 0 01-.108.332l-2 2.918A.478.478 0 0113.5 12a.457.457 0 01-.312-.127c-.216-.202-.25-.57-.079-.82L14.516 9zM3 15H1a1 1 0 01-1-1V2a1 1 0 011-1h7.8c.274 0 .537.113.726.312l2.2 2.428c.176.186.274.433.274.689V7h-1V5H8.5a.5.5 0 01-.5-.5V2H3v12h8v-4h1v4a1 1 0 01-1 1H3zm-1-1V2H1v12h1z"}))},qZe=VZe;var Rw={};$(Rw,{icon:()=>XZe});var bGt=P(L());var UZe=["title","titleId"];function JH(){return JH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function JZe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var GZe=function(t){var n=t.title,r=t.titleId,o=$Ze(t,UZe);return a("svg",JH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 8H4.915a1.5 1.5 0 110-1H8V2.5A1.5 1.5 0 019.5 1h2.585a1.5 1.5 0 110 1H9.5a.5.5 0 00-.5.5v10a.5.5 0 00.5.5h2.585a1.5 1.5 0 110 1H9.5A1.5 1.5 0 018 12.5V8zM3.5 3a1.5 1.5 0 110-3 1.5 1.5 0 010 3zm0 12a1.5 1.5 0 110-3 1.5 1.5 0 010 3zm10-6a1.5 1.5 0 110-3 1.5 1.5 0 010 3z"}))},XZe=GZe;var zw={};$(zw,{icon:()=>eet});var OGt=P(L());var KZe=["title","titleId"];function GH(){return GH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function QZe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ZZe=function(t){var n=t.title,r=t.titleId,o=YZe(t,KZe);return a("svg",GH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M12 2H2v11h6v1H1V1h12v6h-1V2zM5 5h5.999V4H5v1zM3 5V4h1v1H3zm2 3V7h3v1H5zM3 8V7h1v1H3zm2 3v-1h2v1H5zm5-1H8v1h2v2h1v-2h2v-1h-2V8h-1v2zm-7 1v-1h1v1H3zm7.5-5a4.5 4.5 0 110 9 4.5 4.5 0 010-9z"}))},eet=ZZe;var Lw={};$(Lw,{icon:()=>iet});var _Gt=P(L());var tet=["title","titleId"];function XH(){return XH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function net(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var oet=function(t){var n=t.title,r=t.titleId,o=ret(t,tet);return a("svg",XH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M12 2H2v11h6v1H1V1h12v6.839l-1-.707V2z"}),a("path",{d:"M8 11v-1H5v1h3zm0-3.055c0-.342.082-.664.23-.945H5v1h3v-.055zM5 5h5.999V4H5v1zM3 4v1h1V4H3zm0 3v1h1V7H3zm0 3v1h1v-1H3zm11.607.2l-4.32-3.055C9.727 6.75 9 7.204 9 7.945v6.108c0 .74.726 1.196 1.287.8l4.32-3.055c.524-.37.524-1.228 0-1.598z"}))},iet=oet;var Dw={};$(Dw,{icon:()=>pet});var jGt=P(L());var aet=["title","titleId"];function KH(){return KH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function uet(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var cet=function(t){var n=t.title,r=t.titleId,o=set(t,aet);return a("svg",KH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5 5h5.999V4H5v1zM3 5h1V4H3v1zm0 3h1V7H3v1zm6.022-1l-.15.333-.737-.078-.467-.05-.33.342A5.13 5.13 0 006.948 8H5V7h4.022zm-3.005 3L6 10.056l.306.411.399.533H5v-1h1.017zM3 11h1v-1H3v1z"}),a("path",{d:"M13 7.05l-.162-.359-.2-.447-.47-.11A5.019 5.019 0 0012 6.098V2H2v11h4.36c.157.354.355.69.59 1H1V1h12v6.05z"}),a("path",{d:"M11.004 7c.322 0 .646.036.966.109l.595 1.293 1.465-.152c.457.462.786 1.016.969 1.61l-.87 1.14.871 1.141a3.94 3.94 0 01-.387.859 4.058 4.058 0 01-.583.75l-1.465-.152-.594 1.292a4.37 4.37 0 01-1.941.001l-.594-1.293-1.466.152a3.954 3.954 0 01-.969-1.61l.87-1.14L7 9.86a3.947 3.947 0 01.97-1.61l1.466.152.593-1.292a4.37 4.37 0 01.975-.11zM11 12a1 1 0 10.002-1.998A1 1 0 0011 12z"}))},pet=cet;var Nw={};$(Nw,{icon:()=>get});var kGt=P(L());var fet=["title","titleId"];function YH(){return YH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function met(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var het=function(t){var n=t.title,r=t.titleId,o=det(t,fet);return a("svg",YH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M10 13.999v-2.99h1V15H0V1h11v3.999h-1V2.001H1v11.998z"}),a("path",{d:"M4.5 10V9H11v1zM13 9.5l3-3-3-3z"}),a("path",{d:"M5.5 6.5v6l-3-3zM7 7V6h6.5v1z"}))},get=het;var Fw={};$(Fw,{icon:()=>Oet});var EGt=P(L());var vet=["title","titleId"];function QH(){return QH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function bet(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var wet=function(t){var n=t.title,r=t.titleId,o=yet(t,vet);return a("svg",QH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M15.363 14.658a.5.5 0 11-.713.7l-2.97-3.023a.5.5 0 01.001-.7A3.9 3.9 0 108.9 12.8a.5.5 0 110 .999 4.9 4.9 0 113.821-1.833l2.642 2.691zM3.094 13a.5.5 0 110 1H2.5A2.5 2.5 0 010 11.5v-9A2.5 2.5 0 012.5 0h9A2.5 2.5 0 0114 2.5v.599a.5.5 0 11-1 0V2.5A1.5 1.5 0 0011.5 1h-9A1.5 1.5 0 001 2.5v9A1.5 1.5 0 002.5 13h.594zM2.5 3a.5.5 0 110-1 .5.5 0 010 1zm2 0a.5.5 0 110-1 .5.5 0 010 1zm2 0a.5.5 0 110-1 .5.5 0 010 1zm-4 2a.5.5 0 110-1 .5.5 0 010 1zm2 0a.5.5 0 110-1 .5.5 0 010 1zm-2 1a.5.5 0 110 1 .5.5 0 010-1zm0 3a.5.5 0 110-1 .5.5 0 010 1zm6-6a.5.5 0 110-1 .5.5 0 010 1zm2 0a.5.5 0 110-1 .5.5 0 010 1zm-8 8a.5.5 0 110-1 .5.5 0 010 1z"}))},Oet=wet;var Ww={};$(Ww,{icon:()=>ket});var AGt=P(L());var xet=["title","titleId"];function ZH(){return ZH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function jet(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Iet=function(t){var n=t.title,r=t.titleId,o=_et(t,xet);return a("svg",ZH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 13.25a5.25 5.25 0 100-10.5 5.25 5.25 0 000 10.5zM8 14A6 6 0 118 2a6 6 0 010 12z"}),a("path",{d:"M8 2a6 6 0 100 12V2z"}))},ket=Iet;var Bw={};$(Bw,{icon:()=>Met});var TGt=P(L());var Pet=["title","titleId"];function eV(){return eV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Cet(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Aet=function(t){var n=t.title,r=t.titleId,o=Eet(t,Pet);return a("svg",eV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M12 2a2 2 0 012 2v8a2 2 0 01-2 2H4a2 2 0 01-2-2V4a2 2 0 012-2h8zm-2 3H8v6h1V9.014h1c.298-.013 2 0 2-2.018 0-1.74-1.314-1.952-1.825-1.987L10 5zM6 5H5v6h1V5zm4 .984c.667 0 1 .336 1 1.008C11 7.664 10.667 8 10 8H9V5.984z"}))},Met=Aet;var Hw={};$(Hw,{icon:()=>Det});var zGt=P(L());var Tet=["title","titleId"];function tV(){return tV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function zet(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Let=function(t){var n=t.title,r=t.titleId,o=Ret(t,Tet);return a("svg",tV({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M0 3h16v11H0V3zm15 10V4H1v9h14zM2 5h2v1H2V5zm2 7v-1H2v1h2zm10-1v1h-2v-1h2zm-3 1v-1H5v1h6zM5 5h1v1H5V5zM3 7H2v1h1V7zm3 0h1v1H6V7zM3 9H2v1h1V9zm3 0h1v1H6V9zm2-4H7v1h1V5zM4 7h1v1H4V7zm5 0H8v1h1V7zm1 0h1v1h-1V7zM5 9H4v1h1V9zm3 0h1v1H8V9zm3 0h-1v1h1V9zM9 5h1v1H9V5zm3 0h-1v1h1V5zm1 0h1v1h-1V5zm1 2h-2v3h2V7z"}))},Det=Let;var Vw={};$(Vw,{icon:()=>Het});var DGt=P(L());var Net=["title","titleId"];function rV(){return rV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Wet(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Bet=function(t){var n=t.title,r=t.titleId,o=Fet(t,Net);return a("svg",rV({xmlns:"http://www.w3.org/2000/svg",width:16,height:10,viewBox:"0 0 16 10","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 9a5 5 0 110-8 5 5 0 110 8zm.75-.692a4 4 0 100-6.615A4.981 4.981 0 0110 5a4.981 4.981 0 01-1.25 3.308zM4.133 8V5.559h2.496v-.625H4.133V2.996h2.719v-.633H3.43V8h.703z"}))},Het=Bet;var qw={};$(qw,{icon:()=>Jet});var FGt=P(L());var Vet=["title","titleId"];function nV(){return nV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Uet(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var $et=function(t){var n=t.title,r=t.titleId,o=qet(t,Vet);return a("svg",nV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7 7H3v2h4v2l3-3-3-3v2zM6 6V5a1 1 0 011.707-.707l3 3a1 1 0 010 1.414l-3 3A1 1 0 016 11v-1H3a1 1 0 01-1-1V7a1 1 0 011-1h3zm7.5-3a.5.5 0 01.5.5v9a.5.5 0 11-1 0v-9a.5.5 0 01.5-.5z"}))},Jet=$et;var Uw={};$(Uw,{icon:()=>Qet});var BGt=P(L());var Get=["title","titleId"];function oV(){return oV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ket(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Yet=function(t){var n=t.title,r=t.titleId,o=Xet(t,Get);return a("svg",oV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M11.192 10.145l2.298-1.792c.259-.196.259-.509 0-.706l-2.298-1.792c-.256-.196-.256-.513 0-.708a.81.81 0 01.93 0l2.3 1.791c.772.59.77 1.537 0 2.124l-2.3 1.791a.81.81 0 01-.93 0c-.256-.195-.256-.512 0-.708zm-6.384-4.29L2.51 7.647c-.259.196-.259.509 0 .706l2.298 1.792c.256.196.256.513 0 .708a.81.81 0 01-.93 0l-2.3-1.791c-.772-.59-.77-1.537 0-2.124l2.3-1.791a.81.81 0 01.93 0c.256.195.256.512 0 .708zM6.5 6h3a.5.5 0 010 1h-3a.5.5 0 010-1zm0 3h3a.5.5 0 010 1h-3a.5.5 0 010-1z"}))},Qet=Yet;var $w={};$($w,{icon:()=>ntt});var VGt=P(L());var Zet=["title","titleId"];function iV(){return iV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ttt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var rtt=function(t){var n=t.title,r=t.titleId,o=ett(t,Zet);return a("svg",iV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5 12a4 4 0 100-8 4 4 0 000 8zm0 1A5 5 0 115 3a5 5 0 010 10zm6-1a4 4 0 100-8 4 4 0 000 8zm0 1a5 5 0 110-10 5 5 0 010 10z"}))},ntt=rtt;var Jw={};$(Jw,{icon:()=>stt});var UGt=P(L());var ott=["title","titleId"];function aV(){return aV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function att(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ltt=function(t){var n=t.title,r=t.titleId,o=itt(t,ott);return a("svg",aV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 4a5 5 0 110 8 5 5 0 110-8zm-.75.692a4 4 0 100 6.615A4.981 4.981 0 016 8c0-1.268.472-2.426 1.25-3.308zM11.348 11l2.078-5.637h-.739l-1.656 4.727h-.062L9.313 5.363h-.739L10.652 11h.696z"}))},stt=ltt;var Gw={};$(Gw,{icon:()=>dtt});var JGt=P(L());var utt=["title","titleId"];function lV(){return lV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ptt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ftt=function(t){var n=t.title,r=t.titleId,o=ctt(t,utt);return a("svg",lV({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M14 11.42V4.58L8 1.152 2 4.58v6.84l6 3.428 6-3.428zM8 16l7-4V4L8 0 1 4v8l7 4zM8 4.607l3 1.714V9.68l-3 1.714-3-1.714V6.32l3-1.714zm4 1.134v4.518l-4 2.286-4-2.286V5.741l4-2.286 4 2.286z"}))},dtt=ftt;var Xw={};$(Xw,{icon:()=>ytt});var XGt=P(L());var mtt=["title","titleId"];function sV(){return sV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function gtt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var vtt=function(t){var n=t.title,r=t.titleId,o=htt(t,mtt);return a("svg",sV({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M14 5.151v6.269l-5.5 3.142V8.29L14 5.151zm-.508-.861L8 1.152 2.508 4.29 8 7.424l5.492-3.134zM2 5.151l5.5 3.14v6.272L2 11.42V5.15zM15 12l-7 4-7-4V4l7-4 7 4v8z"}))},ytt=vtt;var Kw={};$(Kw,{icon:()=>_tt});var YGt=P(L());var btt=["title","titleId"];function uV(){return uV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ott(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var xtt=function(t){var n=t.title,r=t.titleId,o=wtt(t,btt);return a("svg",uV({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.276 1.053a.5.5 0 01.448 0l6 3a.5.5 0 010 .894l-6 3a.5.5 0 01-.448 0l-6-3a.5.5 0 010-.894l6-3zM2.618 4.5L7.5 6.941 12.382 4.5 7.5 2.059 2.618 4.5z"}),a("path",{d:"M1.053 7.276a.5.5 0 01.67-.223L7.5 9.94l5.776-2.888a.5.5 0 11.448.894l-6 3a.5.5 0 01-.448 0l-6-3a.5.5 0 01-.223-.67z"}),a("path",{d:"M1.724 10.053a.5.5 0 10-.448.894l6 3a.5.5 0 00.448 0l6-3a.5.5 0 10-.448-.894L7.5 12.94l-5.776-2.888z"}))},_tt=xtt;var Yw={};$(Yw,{icon:()=>Ptt});var ZGt=P(L());var Stt=["title","titleId"];function cV(){return cV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Itt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ktt=function(t){var n=t.title,r=t.titleId,o=jtt(t,Stt);return a("svg",cV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M5 3l3 9H7L6 9H3l-1 3H1l3-9h1zm-.5 1.5L5.667 8H3.333L4.5 4.5zm7.99 1.647C12.16 6.005 11.76 6 11.5 6c-.359 0-1.022.175-1.632.838l-.736-.676C9.929 5.294 10.859 5 11.5 5h.016c.25 0 .836 0 1.369.228.281.12.568.313.782.617.216.307.333.693.333 1.155v5h-1v-.354a2.101 2.101 0 01-.064.038c-.554.317-1.166.316-1.42.316h-.032c-.25 0-.836 0-1.368-.228a1.81 1.81 0 01-.783-.617C9.117 10.848 9 10.462 9 10c0-.462.117-.848.333-1.155.214-.304.5-.496.783-.617C10.648 8 11.233 8 11.484 8h.016c.258 0 .69-.003 1.05-.106a.889.889 0 00.364-.179c.053-.05.086-.108.086-.215V7c0-.288-.07-.465-.151-.58a.814.814 0 00-.358-.273zM13 8.8c-.06.022-.118.04-.175.057C12.32 9 11.762 9 11.513 9H11.5c-.259 0-.66.005-.99.147a.814.814 0 00-.359.274c-.08.114-.151.291-.151.579s.07.465.151.58a.813.813 0 00.358.273c.331.142.732.147.991.147.257 0 .63-.008.94-.184.255-.146.56-.463.56-1.316v-.701z"}))},Ptt=ktt;var Qw={};$(Qw,{icon:()=>Ttt});var tXt=P(L());var Ett=["title","titleId"];function pV(){return pV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Att(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Mtt=function(t){var n=t.title,r=t.titleId,o=Ctt(t,Ett);return a("svg",pV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M12.707 4.707a1 1 0 11-1.414-1.414l2-2a1 1 0 111.414 1.414l-2 2zm-6.414 5a1 1 0 001.414 0l2-2a1 1 0 10-1.414-1.414l-2 2a1 1 0 000 1.414zm-5 5a1 1 0 001.414 0l2-2a1 1 0 10-1.414-1.414l-2 2a1 1 0 000 1.414z"}))},Ttt=Mtt;var Zw={};$(Zw,{icon:()=>Ntt});var nXt=P(L());var Rtt=["title","titleId"];function fV(){return fV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ltt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Dtt=function(t){var n=t.title,r=t.titleId,o=ztt(t,Rtt);return a("svg",fV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M13.5 3a1.5 1.5 0 100-3 1.5 1.5 0 000 3zM11 5.5a1.5 1.5 0 11-3 0 1.5 1.5 0 013 0zM5.5 11a1.5 1.5 0 100-3 1.5 1.5 0 000 3zm-4 4a1.5 1.5 0 100-3 1.5 1.5 0 000 3z"}))},Ntt=Dtt;var eO={};$(eO,{icon:()=>Vtt});var iXt=P(L());var Ftt=["title","titleId"];function dV(){return dV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Btt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Htt=function(t){var n=t.title,r=t.titleId,o=Wtt(t,Ftt);return a("svg",dV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M1.293 14.707a1 1 0 001.414 0l12-12a1 1 0 10-1.414-1.414l-12 12a1 1 0 000 1.414z"}))},Vtt=Htt;var tO={};$(tO,{icon:()=>Gtt});var lXt=P(L());var qtt=["title","titleId"];function mV(){return mV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function $tt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Jtt=function(t){var n=t.title,r=t.titleId,o=Utt(t,qtt);return a("svg",mV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.66 3.803a.5.5 0 11-.706-.707L9.268.78c1.187-1.187 3.242-1 4.596.354s1.54 3.409.354 4.596l-3.536 3.536c-1.187 1.187-3.242 1-4.596-.354a.5.5 0 11.707-.707c.99.99 2.417 1.119 3.182.354l3.536-3.536c.765-.765.635-2.193-.354-3.182-.99-.99-2.417-1.119-3.182-.354L7.661 3.803zm-.32 7.392a.5.5 0 11.707.707l-2.315 2.314c-1.187 1.188-3.242 1-4.596-.353-1.354-1.354-1.54-3.41-.353-4.596L4.318 5.73c1.187-1.187 3.242-1 4.596.354a.5.5 0 01-.707.707c-.989-.99-2.416-1.12-3.182-.354L1.49 9.974c-.766.765-.636 2.193.353 3.182.99.989 2.417 1.119 3.182.353l2.315-2.314z"}))},Gtt=Jtt;var rO={};$(rO,{icon:()=>Ztt});var uXt=P(L());var Xtt=["title","titleId"];function hV(){return hV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ytt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Qtt=function(t){var n=t.title,r=t.titleId,o=Ktt(t,Xtt);return a("svg",hV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M2 4V3h2v1H2zm4 0V3h8v1H6zm0 3V6h8v1H6zm0 3V9h8v1H6zM2 7V6h2v1H2zm0 3V9h2v1H2zm4 3v-1h8v1H6zm-4 0v-1h2v1H2z"}))},Ztt=Qtt;var nO={};$(nO,{icon:()=>ort});var pXt=P(L());var ert=["title","titleId"];function gV(){return gV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function rrt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var nrt=function(t){var n=t.title,r=t.titleId,o=trt(t,ert);return a("svg",gV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M11 11H9v1h2v2h1v-2h2v-1h-2V9h-1v2zM7.758 9a4.5 4.5 0 11-.502 4H6v-1h1.027a4.548 4.548 0 01.23-2H6V9h1.758zM2 4V3h2v1H2zm4 0V3h8v1H6zm0 3V6h8v1H6zM2 7V6h2v1H2zm0 3V9h2v1H2zm0 3v-1h2v1H2z"}))},ort=nrt;var oO={};$(oO,{icon:()=>urt});var dXt=P(L());var irt=["title","titleId"];function vV(){return vV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function lrt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var srt=function(t){var n=t.title,r=t.titleId,o=art(t,irt);return a("svg",vV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M4 5v-.8C4 1.88 5.79 0 8 0s4 1.88 4 4.2V5h1.143c.473 0 .857.448.857 1v9c0 .552-.384 1-.857 1H2.857C2.384 16 2 15.552 2 15V6c0-.552.384-1 .857-1H4zM3 15h10V6H3v9zm5.998-3.706L9.5 12.5h-3l.502-1.206A1.644 1.644 0 016.5 10.1c0-.883.672-1.6 1.5-1.6s1.5.717 1.5 1.6c0 .475-.194.901-.502 1.194zM11 4.36C11 2.504 9.657 1 8 1S5 2.504 5 4.36V5h6v-.64z"}))},urt=srt;var iO={};$(iO,{icon:()=>mrt});var hXt=P(L());var crt=["title","titleId"];function yV(){return yV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function frt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var drt=function(t){var n=t.title,r=t.titleId,o=prt(t,crt);return a("svg",yV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M11.143 5c.473 0 .857.448.857 1v9c0 .552-.384 1-.857 1H.857C.384 16 0 15.552 0 15V6c0-.552.384-1 .857-1H8v-.8C8 1.88 9.79 0 12 0s4 1.88 4 4.2V5h-1v-.64C15 2.504 13.657 1 12 1S9 2.504 9 4.36V5h2.143zM1 15h10V6H1v9zm5.998-3.706L7.5 12.5h-3l.502-1.206A1.644 1.644 0 014.5 10.1c0-.883.672-1.6 1.5-1.6s1.5.717 1.5 1.6c0 .475-.194.901-.502 1.194z"}))},mrt=drt;var aO={};$(aO,{icon:()=>brt});var vXt=P(L());var hrt=["title","titleId"];function bV(){return bV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function vrt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var yrt=function(t){var n=t.title,r=t.titleId,o=grt(t,hrt);return a("svg",bV({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"none"},a("path",{fill:"#C4373A",d:"M0 31.806h32V.776H0z"}),a("path",{fill:"#FFF",d:"M19.448 12.508l-8.986 3.86 8.986 3.883v-7.743zm-11.304 4.73l-2.094-.863 2.094-.931 17.749-7.741v2.062l-4.654 1.99v9.25l4.654 2.01v1.968L8.143 17.24z"})))},brt=yrt;var lO={};$(lO,{icon:()=>Srt});var bXt=P(L());var wrt=["title","titleId"];function wV(){return wV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function xrt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var _rt=function(t){var n=t.title,r=t.titleId,o=Ort(t,wrt),i=Lr("logo_apache");return a("svg",wV({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("defs",null,a("linearGradient",{id:i("a"),x1:"21.902%",x2:"141.879%",y1:"63.905%",y2:"20.213%"},a("stop",{offset:"0%",stopColor:"#F69923"}),a("stop",{offset:"31.23%",stopColor:"#F79A23"}),a("stop",{offset:"83.83%",stopColor:"#E97826"})),a("linearGradient",{id:i("b"),x1:"-217.651%",x2:"74.743%",y1:"177.127%",y2:"36.665%"},a("stop",{offset:"32.33%",stopColor:"#9E2064"}),a("stop",{offset:"63.02%",stopColor:"#C92037"}),a("stop",{offset:"75.14%",stopColor:"#CD2335"}),a("stop",{offset:"100%",stopColor:"#E97826"})),a("linearGradient",{id:i("c"),x1:"-80.044%",x2:"146.24%",y1:"73.574%",y2:"31.539%"},a("stop",{offset:"32.33%",stopColor:"#9E2064"}),a("stop",{offset:"63.02%",stopColor:"#C92037"}),a("stop",{offset:"75.14%",stopColor:"#CD2335"}),a("stop",{offset:"100%",stopColor:"#E97826"})),a("linearGradient",{id:i("d"),x1:"-18.316%",x2:"165.002%",y1:"52.497%",y2:"41.656%"},a("stop",{offset:"0%",stopColor:"#282662"}),a("stop",{offset:"9.548%",stopColor:"#662E8D"}),a("stop",{offset:"78.82%",stopColor:"#9F2064"}),a("stop",{offset:"94.87%",stopColor:"#CD2032"})),a("linearGradient",{id:i("e"),x1:"-109.701%",x2:"64.617%",y1:"463.715%",y2:"17.19%"},a("stop",{offset:"32.33%",stopColor:"#9E2064"}),a("stop",{offset:"63.02%",stopColor:"#C92037"}),a("stop",{offset:"75.14%",stopColor:"#CD2335"}),a("stop",{offset:"100%",stopColor:"#E97826"})),a("linearGradient",{id:i("f"),x1:"-34.88%",x2:"110.599%",y1:"130.522%",y2:"-9.118%"},a("stop",{offset:"32.33%",stopColor:"#9E2064"}),a("stop",{offset:"63.02%",stopColor:"#C92037"}),a("stop",{offset:"75.14%",stopColor:"#CD2335"}),a("stop",{offset:"100%",stopColor:"#E97826"})),a("linearGradient",{id:i("g"),x1:"-13.673%",x2:"117.858%",y1:"192.564%",y2:"-136.906%"},a("stop",{offset:"0%",stopColor:"#282662"}),a("stop",{offset:"9.548%",stopColor:"#662E8D"}),a("stop",{offset:"78.82%",stopColor:"#9F2064"}),a("stop",{offset:"94.87%",stopColor:"#CD2032"}))),a("g",{fill:"none"},a("path",{fill:"url(#".concat(i("a"),")"),d:"M13.628.18c-.498.293-1.332 1.134-2.328 2.348v.074l.871 1.613.044.03c.641-.914 1.289-1.742 1.948-2.446.05-.056.075-.08.075-.08-.025.024-.05.055-.075.08-.211.237-.859.984-1.83 2.478l.112.025s2.273-.224 3.368-.41l.062-.057c.35-1.955-.342-2.851-.342-2.851S14.661-.423 13.628.18z",transform:"translate(8)"}),a("path",{fill:"url(#".concat(i("b"),")"),d:"M9.525 8.697c.28-.516.56-1.027.84-1.519.293-.51.592-1.008.897-1.488a.397.397 0 00.05-.087c.299-.473.598-.921.903-1.357L11.3 2.52c-.069.081-.137.168-.206.256-.261.33-.535.678-.815 1.052a51.783 51.783 0 00-1.893 2.708c-.261.405-.53.816-.79 1.245l-.032.05V7.9l1.14 2.26.05.019c.255-.498.51-.996.771-1.482z",transform:"translate(8)"}),a("path",{fill:"url(#".concat(i("c"),")"),d:"M4.563 19.76c.206-.535.424-1.077.642-1.625.211-.523.423-1.052.647-1.58.218-.53.448-1.06.679-1.595.236-.541.473-1.083.716-1.618.242-.53.485-1.059.734-1.582.087-.186.18-.38.274-.566.156-.324.318-.648.473-.965.007-.019.02-.031.025-.05L7.564 7.832l-.056.093c-.274.455-.554.915-.822 1.389a54.535 54.535 0 00-1.45 2.714c-.044.087-.081.168-.125.255a32.15 32.15 0 00-.703 1.544c-.237.56-.448 1.096-.635 1.606-.125.337-.23.654-.336.965-.081.262-.162.53-.237.791-.18.623-.33 1.239-.454 1.862l.018.074 1.14 2.266.037.02c.155-.424.317-.848.485-1.283.044-.125.094-.243.137-.368z",transform:"translate(8)"}),a("path",{fill:"url(#".concat(i("d"),")"),d:"M2.733 19.132a18.84 18.84 0 00-.311 2.253c0 .025-.006.05-.006.081-.374-.598-1.37-1.177-1.37-1.177.716 1.034 1.258 2.061 1.338 3.07-.38.08-.902-.038-1.512-.255.628.578 1.102.74 1.288.784-.579.037-1.183.436-1.793.89.89-.36 1.607-.504 2.123-.392-.815 2.31-1.63 4.862-2.453 7.564.25-.075.399-.243.486-.473.143-.492 1.114-3.704 2.627-7.931.044-.119.087-.243.13-.362.013-.03.026-.068.038-.1.162-.441.324-.896.498-1.356.038-.106.081-.212.119-.318v-.006l-1.19-2.353c0 .03-.006.056-.012.08z",transform:"translate(8)"}),a("path",{fill:"url(#".concat(i("e"),")"),d:"M12.333 4.283c-.268.411-.56.878-.878 1.407-.018.025-.03.056-.05.081a62.538 62.538 0 00-1.687 3.05c-.249.48-.504.984-.765 1.526l.056.025 2.895-.311.068-.05c.878-.405 1.27-.772 1.65-1.301.1-.143.205-.3.305-.455.311-.485.616-1.015.884-1.544.261-.51.492-1.02.672-1.475a6.56 6.56 0 00.398-1.395c-1.17.206-2.608.399-3.548.442z",transform:"translate(8)"}),a("path",{fill:"url(#".concat(i("f"),")"),d:"M8.84 10.59c-.1.212-.205.43-.31.647-.113.237-.231.486-.343.735-.056.124-.119.255-.175.38-.18.386-.354.784-.541 1.195a107.035 107.035 0 00-1.357 3.194c-.218.529-.436 1.077-.654 1.637-.2.504-.399 1.015-.598 1.55-.012.025-.018.05-.03.075-.2.53-.394 1.068-.6 1.622-.006.012-.017.045-.023.057l.043.01.866-.094.048-.02c-.018-.006-.03-.03-.048-.037 1.145-.143 2.67-1.002 3.66-2.06.455-.486.866-1.065 1.252-1.738.286-.504.547-1.058.803-1.675.224-.535.435-1.12.64-1.749a3.457 3.457 0 01-.896.311 8.977 8.977 0 01-.18.038c-.062.012-.125.018-.18.03 1.07-.41 1.743-1.207 2.234-2.178-.28.193-.74.442-1.288.566a2.52 2.52 0 01-.23.044c-.02 0-.038.006-.057.006.374-.155.685-.33.959-.535.056-.044.112-.087.168-.137.081-.075.162-.15.237-.224.05-.05.093-.1.143-.156.106-.124.205-.261.299-.41.03-.044.056-.094.087-.138.037-.068.068-.137.1-.205.149-.3.267-.567.36-.803.05-.119.088-.224.125-.33.013-.038.025-.081.044-.119.037-.112.068-.211.093-.305.037-.13.056-.236.069-.311a1.077 1.077 0 01-.125.087c-.324.193-.878.368-1.326.448l.884-.1-.884.1c-.062.013-.106.02-.156.032.004-.005-.994.101-2.995.316a2.313 2.313 0 00-.118.244z",transform:"translate(8)"}),a("path",{fill:"url(#".concat(i("g"),")"),d:"M4.115 21.914c-.155.43-.317.872-.473 1.32 0 .006-.006.013-.006.019-.025.062-.044.124-.069.193-.106.305-.199.573-.41 1.195.348.162.628.58.896 1.059a1.876 1.876 0 00-.623-1.314c1.725.075 3.213-.361 3.979-1.619.068-.112.13-.23.186-.355-.348.442-.784.63-1.593.586h-.007.007c1.201-.536 1.799-1.052 2.334-1.905.125-.206.25-.424.374-.667-1.052 1.078-2.266 1.383-3.543 1.152l-.958.106c-.032.069-.063.15-.094.23z",transform:"translate(8)"})))},Srt=_rt;var sO={};$(sO,{icon:()=>Ert});var xXt=P(L());var jrt=["title","titleId"];function OV(){return OV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function krt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Prt=function(t){var n=t.title,r=t.titleId,o=Irt(t,jrt);return a("svg",OV({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fill:"#0080D5",d:"M19.5.938a7.002 7.002 0 00-7 0l-8 4.619A7 7 0 001 11.62v9.237a7 7 0 003.5 6.062l7.5 4.33V17.979a7 7 0 013.5-6.062L27 5.276 19.5.939z"}),a("path",{className:"euiIcon__fillNegative",d:"M19.5.938a7.002 7.002 0 00-7 0L5 5.277l11 6.35 11-6.35-7.5-4.34z"}),a("path",{fill:"#FA744E",d:"M28.435 7.76l-10.026 5.79a6.994 6.994 0 011.59 4.428v13.27l7.5-4.33a7 7 0 003.5-6.061v-9.238a6.992 6.992 0 00-1.586-4.422l-.978.564z"}))},Ert=Prt;var uO={};$(uO,{icon:()=>Rrt});var SXt=P(L());var Crt=["title","titleId"];function xV(){return xV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Mrt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Trt=function(t){var n=t.title,r=t.titleId,o=Art(t,Crt);return a("svg",xV({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"none",fillRule:"evenodd"},a("path",{className:"euiIcon__fillNegative",d:"M9.019 13.878c0 .39.042.705.117.936.085.232.191.484.34.758a.454.454 0 01.075.242c0 .105-.064.21-.202.315l-.67.442a.514.514 0 01-.277.095c-.107 0-.213-.053-.32-.148a3.258 3.258 0 01-.383-.494 8.109 8.109 0 01-.33-.62c-.83.967-1.873 1.45-3.128 1.45-.894 0-1.607-.252-2.129-.756-.521-.505-.787-1.178-.787-2.02 0-.894.319-1.62.968-2.166.65-.547 1.511-.82 2.607-.82.362 0 .735.03 1.128.083.394.053.799.137 1.224.232v-.768c0-.8-.17-1.357-.5-1.683-.34-.326-.915-.484-1.735-.484-.372 0-.755.043-1.149.137-.394.095-.777.21-1.15.358-.17.073-.297.115-.372.136a.66.66 0 01-.17.032c-.149 0-.223-.105-.223-.326v-.515c0-.169.02-.295.074-.368a.796.796 0 01.298-.221c.373-.19.82-.347 1.34-.474a6.524 6.524 0 011.661-.2c1.266 0 2.192.285 2.788.852.586.568.884 1.43.884 2.588v3.407h.02zm-4.32 1.6c.35 0 .712-.064 1.095-.19a2.373 2.373 0 001.011-.673c.17-.2.298-.421.362-.673.064-.253.107-.558.107-.916v-.441a8.982 8.982 0 00-.98-.179 8.113 8.113 0 00-1-.063c-.713 0-1.234.137-1.586.42-.35.285-.521.684-.521 1.21 0 .494.128.862.394 1.115.255.263.628.39 1.117.39zm8.545 1.135c-.192 0-.32-.032-.405-.105-.085-.063-.16-.21-.223-.41l-2.501-8.13c-.064-.21-.096-.347-.096-.421 0-.168.085-.263.256-.263h1.043c.202 0 .34.032.415.105.085.063.149.21.212.41l1.788 6.963 1.66-6.963c.054-.21.117-.347.203-.41.085-.063.234-.105.425-.105h.852c.202 0 .34.032.425.105.085.063.16.21.203.41l1.681 7.047 1.841-7.047c.064-.21.138-.347.213-.41.085-.063.223-.105.415-.105h.99c.17 0 .266.084.266.263 0 .052-.011.105-.022.168-.01.063-.032.147-.074.263l-2.565 8.13c-.064.21-.138.347-.223.41-.085.063-.224.105-.405.105h-.915c-.202 0-.34-.031-.426-.105-.085-.073-.16-.21-.202-.42l-1.65-6.784-1.638 6.773c-.053.21-.117.347-.202.42-.086.074-.235.106-.426.106h-.915zm13.675.284a7.122 7.122 0 01-1.64-.19c-.531-.126-.946-.262-1.223-.42-.17-.095-.287-.2-.33-.295a.735.735 0 01-.064-.294v-.536c0-.221.085-.327.245-.327a.61.61 0 01.192.032c.063.021.16.063.266.105.361.158.755.284 1.17.368.426.084.84.127 1.267.127.67 0 1.192-.116 1.553-.348a1.13 1.13 0 00.554-.999c0-.294-.096-.536-.288-.736-.191-.2-.553-.379-1.074-.547l-1.544-.473c-.776-.242-1.351-.6-1.702-1.073a2.487 2.487 0 01-.532-1.525c0-.442.095-.83.287-1.167.192-.337.447-.631.766-.863.32-.242.681-.42 1.107-.547a4.69 4.69 0 011.34-.178c.235 0 .48.01.714.042.245.031.468.073.692.115.212.053.415.105.606.169.192.063.34.126.447.189a.918.918 0 01.32.263c.063.084.095.2.095.347v.494c0 .221-.085.337-.245.337-.085 0-.223-.042-.404-.126-.607-.274-1.288-.41-2.043-.41-.607 0-1.086.094-1.416.294-.33.2-.5.505-.5.936 0 .294.107.547.32.747.212.2.606.4 1.17.578l1.511.473c.766.242 1.32.579 1.65 1.01.33.431.49.926.49 1.473 0 .452-.096.862-.277 1.22a2.836 2.836 0 01-.777.925c-.33.263-.724.452-1.182.59-.478.146-.979.22-1.521.22z"}),a("g",{fill:"#F90"},a("path",{d:"M28.93 22.009c-3.501 2.556-8.588 3.912-12.962 3.912-6.13 0-11.653-2.24-15.825-5.963-.33-.295-.032-.694.362-.463 4.512 2.587 10.078 4.155 15.836 4.155 3.884 0 8.151-.8 12.078-2.44.586-.263 1.086.378.511.799z"}),a("path",{d:"M30.388 20.368c-.447-.568-2.958-.273-4.097-.137-.34.042-.394-.252-.085-.473 2-1.388 5.289-.989 5.672-.526.383.474-.107 3.723-1.98 5.28-.287.242-.564.116-.436-.2.426-1.041 1.373-3.386.926-3.944z"}))))},Rrt=Trt;var cO={};$(cO,{icon:()=>Frt});var IXt=P(L());var zrt=["title","titleId"];function _V(){return _V=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Drt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Nrt=function(t){var n=t.title,r=t.titleId,o=Lrt(t,zrt);return a("svg",_V({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fillRule:"evenodd"},a("path",{fillRule:"nonzero",d:"M9.019 13.878c0 .39.042.705.117.936.085.232.191.484.34.758a.454.454 0 01.075.242c0 .105-.064.21-.202.315l-.67.442a.514.514 0 01-.277.095c-.107 0-.213-.053-.32-.148a3.258 3.258 0 01-.383-.494 8.109 8.109 0 01-.33-.62c-.83.967-1.873 1.45-3.128 1.45-.894 0-1.607-.252-2.129-.756-.521-.505-.787-1.178-.787-2.02 0-.894.319-1.62.968-2.166.65-.547 1.511-.82 2.607-.82.362 0 .735.03 1.128.083.394.053.799.137 1.224.232v-.768c0-.8-.17-1.357-.5-1.683-.34-.326-.915-.484-1.735-.484-.372 0-.755.043-1.149.137-.394.095-.777.21-1.15.358-.17.073-.297.115-.372.136a.66.66 0 01-.17.032c-.149 0-.223-.105-.223-.326v-.515c0-.169.02-.295.074-.368a.796.796 0 01.298-.221c.373-.19.82-.347 1.34-.474a6.524 6.524 0 011.661-.2c1.266 0 2.192.285 2.788.852.586.568.884 1.43.884 2.588v3.407h.02zm-4.32 1.6c.35 0 .712-.064 1.095-.19a2.373 2.373 0 001.011-.673c.17-.2.298-.421.362-.673.064-.253.107-.558.107-.916v-.441a8.982 8.982 0 00-.98-.179 8.113 8.113 0 00-1-.063c-.713 0-1.234.137-1.586.42-.35.285-.521.684-.521 1.21 0 .494.128.862.394 1.115.255.263.628.39 1.117.39zm8.545 1.135c-.192 0-.32-.032-.405-.105-.085-.063-.16-.21-.223-.41l-2.501-8.13c-.064-.21-.096-.347-.096-.421 0-.168.085-.263.256-.263h1.043c.202 0 .34.032.415.105.085.063.149.21.212.41l1.788 6.963 1.66-6.963c.054-.21.117-.347.203-.41.085-.063.234-.105.425-.105h.852c.202 0 .34.032.425.105.085.063.16.21.203.41l1.681 7.047 1.841-7.047c.064-.21.138-.347.213-.41.085-.063.223-.105.415-.105h.99c.17 0 .266.084.266.263 0 .052-.011.105-.022.168-.01.063-.032.147-.074.263l-2.565 8.13c-.064.21-.138.347-.223.41-.085.063-.224.105-.405.105h-.915c-.202 0-.34-.031-.426-.105-.085-.073-.16-.21-.202-.42l-1.65-6.784-1.638 6.773c-.053.21-.117.347-.202.42-.086.074-.235.106-.426.106h-.915zm13.675.284a7.122 7.122 0 01-1.64-.19c-.531-.126-.946-.262-1.223-.42-.17-.095-.287-.2-.33-.295a.735.735 0 01-.064-.294v-.536c0-.221.085-.327.245-.327a.61.61 0 01.192.032c.063.021.16.063.266.105.361.158.755.284 1.17.368.426.084.84.127 1.267.127.67 0 1.192-.116 1.553-.348a1.13 1.13 0 00.554-.999c0-.294-.096-.536-.288-.736-.191-.2-.553-.379-1.074-.547l-1.544-.473c-.776-.242-1.351-.6-1.702-1.073a2.487 2.487 0 01-.532-1.525c0-.442.095-.83.287-1.167.192-.337.447-.631.766-.863.32-.242.681-.42 1.107-.547a4.69 4.69 0 011.34-.178c.235 0 .48.01.714.042.245.031.468.073.692.115.212.053.415.105.606.169.192.063.34.126.447.189a.918.918 0 01.32.263c.063.084.095.2.095.347v.494c0 .221-.085.337-.245.337-.085 0-.223-.042-.404-.126-.607-.274-1.288-.41-2.043-.41-.607 0-1.086.094-1.416.294-.33.2-.5.505-.5.936 0 .294.107.547.32.747.212.2.606.4 1.17.578l1.511.473c.766.242 1.32.579 1.65 1.01.33.431.49.926.49 1.473 0 .452-.096.862-.277 1.22a2.836 2.836 0 01-.777.925c-.33.263-.724.452-1.182.59-.478.146-.979.22-1.521.22z"}),a("path",{d:"M28.93 22.009c-3.501 2.556-8.588 3.912-12.962 3.912-6.13 0-11.653-2.24-15.825-5.963-.33-.295-.032-.694.362-.463 4.512 2.587 10.078 4.155 15.836 4.155 3.884 0 8.151-.8 12.078-2.44.586-.263 1.086.378.511.799z"}),a("path",{d:"M30.388 20.368c-.447-.568-2.958-.273-4.097-.137-.34.042-.394-.252-.085-.473 2-1.388 5.289-.989 5.672-.526.383.474-.107 3.723-1.98 5.28-.287.242-.564.116-.436-.2.426-1.041 1.373-3.386.926-3.944z"})))},Frt=Nrt;var pO={};$(pO,{icon:()=>qrt});var PXt=P(L());var Wrt=["title","titleId"];function SV(){return SV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Hrt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Vrt=function(t){var n=t.title,r=t.titleId,o=Brt(t,Wrt);return a("svg",SV({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fill:"#0072C6",d:"M17.448 4l-9.414 8.01L0 26.157h7.243L17.448 4zM18.7 5.874l-4.018 11.11 7.704 9.497L7.441 29h24.494L18.7 5.874z"}))},qrt=Vrt;var fO={};$(fO,{icon:()=>Xrt});var CXt=P(L());var Urt=["title","titleId"];function jV(){return jV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Jrt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Grt=function(t){var n=t.title,r=t.titleId,o=$rt(t,Urt);return a("svg",jV({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M17.448 4l-9.414 8.01L0 26.157h7.243L17.448 4zM18.7 5.874l-4.018 11.11 7.704 9.497L7.441 29h24.494L18.7 5.874z"}))},Xrt=Grt;var dO={};$(dO,{icon:()=>ent});var MXt=P(L());var Krt=["title","titleId"];function IV(){return IV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Qrt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Zrt=function(t){var n=t.title,r=t.titleId,o=Yrt(t,Krt);return a("svg",IV({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fill:"#0080D5",d:"M15 20H4V0h11c5.522 0 10 4.478 10 10s-4.478 10-10 10"}),a("path",{fill:"#00C2B3",d:"M26.702 15.624C24.6 19.979 20.152 23 15 23H4v9h15c5.522 0 10-4.478 10-10a9.952 9.952 0 00-2.298-6.376"}),a("path",{className:"euiIcon__fillNegative",d:"M24.338 13.554A9.942 9.942 0 0019 12H4v8h11c4.27 0 7.903-2.68 9.338-6.446"}))},ent=Zrt;var mO={};$(mO,{icon:()=>int});var RXt=P(L());var tnt=["title","titleId"];function kV(){return kV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function nnt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ont=function(t){var n=t.title,r=t.titleId,o=rnt(t,tnt);return a("svg",kV({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"none",fillRule:"evenodd"},a("path",{fill:"#00BFB3",d:"M0 22c0 5.522 4.478 10 10 10V12C4.478 12 0 16.478 0 22"}),a("path",{className:"euiIcon__fillNegative",d:"M10 12v10h10c0-5.522-4.478-10-10-10"}),a("path",{fill:"#F04E98",d:"M10 0v9c7.168 0 13 5.832 13 13h9C32 9.85 22.15 0 10 0"})))},int=ont;var hO={};$(hO,{icon:()=>cnt});var LXt=P(L());var ant=["title","titleId"];function PV(){return PV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function snt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var unt=function(t){var n=t.title,r=t.titleId,o=lnt(t,ant);return a("svg",PV({width:32,height:32,viewBox:"0 0 32 32",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M25.471 27.56c-1.06-.567-1.676-1.206-1.811-1.902-.13-.673.17-1.421.918-2.288a11.29 11.29 0 002.773-7.42A11.324 11.324 0 0016.042 4.64l-.05.001h-.05A11.324 11.324 0 004.632 15.949a11.291 11.291 0 002.774 7.422c.753.872 1.047 1.591.928 2.257-.13.694-.74 1.342-1.817 1.93-1.657-1.375-3.116-3.212-4.01-5.056a14.943 14.943 0 01-1.117-3.139A14.997 14.997 0 011 15.95a14.901 14.901 0 014.378-10.57 14.924 14.924 0 014.752-3.204C11.97 1.395 13.95.996 15.948 1h.101a14.888 14.888 0 0110.57 4.378 14.912 14.912 0 013.982 13.985 14.871 14.871 0 01-1.118 3.14c-.9 1.843-2.358 3.681-4.01 5.057h-.003zm-5.523 2.798c-.173-.11-.767-.55-1.345-1.353a6.122 6.122 0 01-1.174-3.738 8.26 8.26 0 01.611-2.964 8.42 8.42 0 011.627-2.54l.004-.008.154-.178c.263-.305.536-.622.753-.99.268-.454.462-.931.578-1.42.178-.758.188-1.547.029-2.31a5.3 5.3 0 00-.858-1.956 5.264 5.264 0 00-4.29-2.217h-.108a5.25 5.25 0 00-4.29 2.216 5.31 5.31 0 00-.856 1.956c-.16.763-.15 1.552.03 2.311.115.488.31.965.576 1.419.219.37.49.684.753.99l.155.179.003.007a8.384 8.384 0 011.628 2.54 8.24 8.24 0 01.61 2.964 6.123 6.123 0 01-1.173 3.738c-.58.795-1.174 1.243-1.346 1.352l-.867-.26a15.434 15.434 0 01-2.49-1.098 4.245 4.245 0 002.234-3.736c0-1.034-.403-2.028-1.195-2.95l-.034-.034-.237-.26-.636-.746a8.924 8.924 0 01-1.525-3.26 8.983 8.983 0 01-.05-3.905 8.906 8.906 0 011.46-3.313A8.993 8.993 0 0111.23 8.39a8.937 8.937 0 014.702-1.344h.112c.42 0 .84.029 1.255.088a8.938 8.938 0 013.448 1.256 9.003 9.003 0 012.554 2.404 9.093 9.093 0 011.459 3.313 9.043 9.043 0 01-.05 3.912 8.925 8.925 0 01-1.526 3.26c-.2.265-.409.495-.637.745l-.23.254c-.017.016-.03.027-.04.043-.804.961-1.195 1.927-1.195 2.948a4.25 4.25 0 002.237 3.735c-.795.441-1.63.809-2.491 1.098l-.862.26-.018-.004zm-3.956-11.314a2.957 2.957 0 01-2.952-2.952 2.957 2.957 0 012.952-2.952 2.956 2.956 0 012.95 2.952 2.957 2.957 0 01-2.95 2.952",fill:"#F05C56"}))},cnt=unt;var gO={};$(gO,{icon:()=>hnt});var NXt=P(L());var pnt=["title","titleId"];function EV(){return EV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function dnt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var mnt=function(t){var n=t.title,r=t.titleId,o=fnt(t,pnt);return a("svg",EV({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"none",fillRule:"evenodd"},a("path",{className:"euiIcon__fillNegative",d:"M12.37 18.352c.032-.01.066-.014.1-.023A6 6 0 0118 10V0C9.163 0 2 7.164 2 16c0 2.793.72 5.417 1.976 7.702a18.947 18.947 0 018.393-5.349"}),a("path",{fill:"#0080D5",d:"M18 0A15.959 15.959 0 005.717 5.75a16.006 16.006 0 007.541 5.032c.71.22 1.477.135 2.146-.188A5.94 5.94 0 0118 10a5.94 5.94 0 012.596.594c.669.323 1.436.408 2.146.188a16.01 16.01 0 007.541-5.032A15.959 15.959 0 0018 0"}),a("path",{fill:"#00BFB3",d:"M22.742 21.218c-.71-.22-1.478-.135-2.146.188A5.947 5.947 0 0118 22a5.94 5.94 0 01-2.596-.594c-.669-.323-1.436-.408-2.146-.188a16.006 16.006 0 00-7.54 5.032A15.959 15.959 0 0018 32c4.936 0 9.348-2.236 12.283-5.75a16.016 16.016 0 00-7.54-5.032"})))},hnt=mnt;var vO={};$(vO,{icon:()=>wnt});var WXt=P(L());var gnt=["title","titleId"];function CV(){return CV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ynt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var bnt=function(t){var n=t.title,r=t.titleId,o=vnt(t,gnt);return a("svg",CV({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillNegative",d:"M18 0v10a6 6 0 00-5.53 8.33c-.034.009-.068.012-.1.023A18.947 18.947 0 003.975 23.7 15.934 15.934 0 012 16C2 7.164 9.163 0 18 0zm0 13a3 3 0 110 6 3 3 0 010-6z"}),a("path",{fill:"#00AEFA",d:"M22.742 21.218c-.71-.22-1.478-.135-2.146.188A5.947 5.947 0 0118 22a5.94 5.94 0 01-2.596-.594c-.669-.323-1.436-.408-2.146-.188a16.006 16.006 0 00-7.54 5.032A15.959 15.959 0 0018 32c4.936 0 9.348-2.236 12.283-5.75a16.016 16.016 0 00-7.54-5.032"}),a("path",{fill:"#0080D5",d:"M18 0A15.959 15.959 0 005.717 5.75a16.006 16.006 0 007.541 5.032c.71.22 1.477.135 2.146-.188A5.94 5.94 0 0118 10a5.94 5.94 0 012.596.594c.669.323 1.436.408 2.146.188a16.01 16.01 0 007.541-5.032A15.959 15.959 0 0018 0"}))},wnt=bnt;var yO={};$(yO,{icon:()=>jnt});var HXt=P(L());var Ont=["title","titleId"];function AV(){return AV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function _nt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Snt=function(t){var n=t.title,r=t.titleId,o=xnt(t,Ont);return a("svg",AV({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillNegative",d:"M9.75 12L16 32h10l-3.4-10.88A13 13 0 0010.19 12h-.44z"}),a("path",{fill:"#22A7F3",d:"M25.725 11.93A17 17 0 009.5 0H6l3.75 12h.44a13 13 0 0112.41 9.12L26 32h6l-6.275-20.07z"}),a("path",{fill:"#0377CA",d:"M7.91 16.175L0 32h12.855z"}))},jnt=Snt;var bO={};$(bO,{icon:()=>Cnt});var qXt=P(L());var Int=["title","titleId"];function MV(){return MV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Pnt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Ent=function(t){var n=t.title,r=t.titleId,o=knt(t,Int);return a("svg",MV({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M14.738 28.044V16.681L3.172 10.919v6.46l5.32 2.67v4.889l6.246 3.106zm2.344.066l6.357-3.17v-5.002l5.353-2.686V10.87l-11.71 5.854V28.11zM27.306 8.993l-6.003-3.012-5.286 2.656-5.325-2.659L4.637 9.03l11.317 5.638 11.352-5.675zM.828 23.744V8.324L15.981.689l15.155 7.604V23.72L15.98 31.28.828 23.743z"}))},Cnt=Ent;var wO={};$(wO,{icon:()=>znt});var $Xt=P(L());var Ant=["title","titleId"];function TV(){return TV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Tnt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Rnt=function(t){var n=t.title,r=t.titleId,o=Mnt(t,Ant);return a("svg",TV({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fill:"#ED2226",d:"M16.072.024C7.29.024.144 7.146.144 15.952c0 8.782 7.122 15.928 15.928 15.928C24.854 31.88 32 24.758 32 15.952 32 7.146 24.854.024 16.072.024zm10.755 18.719c0 .962-.553 1.804-1.636 1.997-1.877.336-5.823.53-9.119.53-3.296 0-7.242-.194-9.119-.53-1.082-.193-1.636-1.035-1.636-1.997v-6.208c0-.962.746-1.852 1.636-1.997.554-.096 1.853-.192 2.864-.192.385 0 .697.289.697.746v4.355l5.582-.12 5.582.12v-4.355c0-.457.313-.746.698-.746 1.01 0 2.31.096 2.863.192.914.145 1.636 1.035 1.636 1.997-.048 2.045-.048 4.139-.048 6.208z"}))},znt=Rnt;var OO={};$(OO,{icon:()=>Wnt});var GXt=P(L());var Lnt=["title","titleId"];function RV(){return RV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Nnt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Fnt=function(t){var n=t.title,r=t.titleId,o=Dnt(t,Lnt);return a("svg",RV({width:32,height:32,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M18.099 15.108h3.304v-2.973H18.1v2.973zm-3.905 0h3.304v-2.973h-3.304v2.973zm-3.905 0h3.304v-2.973H10.29v2.973zm-3.905 0H9.69v-2.973H6.384v2.973zm-3.904 0h3.304v-2.973H2.48v2.973zm3.904-3.568H9.69V8.568H6.384v2.972zm3.905 0h3.304V8.568H10.29v2.972zm3.905 0h3.304V8.568h-3.304v2.972zm0-3.567h3.304V5h-3.304v2.973zm17.139 5.402c-.722-.478-2.38-.653-3.656-.415-.164-1.19-.834-2.221-2.052-3.153l-.7-.463-.468.694c-.598.893-.897 2.13-.8 3.317.045.418.183 1.164.617 1.82-.433.231-1.29.549-2.42.528H.124l-.043.247c-.204 1.193-.2 4.914 2.24 7.774C4.178 25.898 6.96 27 10.59 27c7.87 0 13.693-3.586 16.42-10.104 1.073.02 3.381.006 4.567-2.237.031-.051.102-.186.31-.61l.113-.234-.667-.44z",fill:"#136EA3",fillRule:"evenodd"}))},Wnt=Fnt;var xO={};$(xO,{icon:()=>Unt});var KXt=P(L());var Bnt=["title","titleId"];function zV(){return zV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Vnt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var qnt=function(t){var n=t.title,r=t.titleId,o=Hnt(t,Bnt),i=Lr("logo_dropwizard");return a("svg",zV({width:32,height:32,viewBox:"0 0 32 32",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 29.61s9.55 4.74 16.856-.893c-1.905-5.114-5.25-19.867-7.226-26.383-.422-1.389-.49-1.527-.663-1.909-.964-2.134-1.978 4.142-3.628 10.459C12.749 13.148 8 29.61 8 29.61",fill:"url(#".concat(i("a"),")")}),a("path",{d:"M9.926 28.563s8.17 4.794 14.93.154c-.18-.807-.642-2.103-.955-3.311-1.664-6.416-4.676-17.248-6.144-22.626-1.59-5.822-2.105.986-3.961 8.23-.564 2.204-3.87 17.553-3.87 17.553",fill:"url(#".concat(i("b"),")")}),a("path",{d:"M12.14 24.41l.85-1.466.793 1.544-.908 1.99-.735-2.069zm6.934-5.545l.85-1.465.793 1.543-.908 1.99-.735-2.068zm-4.747-5.851l.85-1.465.792 1.543-.908 1.99-.734-2.068",fill:"#F9A72B"}),a("path",{d:"M12.14 24.41l.85-1.716.793 1.794-.907 1.468-.736-1.546zm6.934-5.545l.851-1.716.792 1.794-.906 1.468-.737-1.546zm-4.747-5.851l.85-1.716.792 1.794-.906 1.468-.736-1.546",fill:"#FFF200"}),a("path",{d:"M12.987 28.422s6.082 1.015 10.086-1.549c-.502 1.55-4.991 3.314-10.086 1.55",fill:"#24265D"}),a("defs",null,a("linearGradient",{id:i("a"),x1:33.473,y1:7.674,x2:7.751,y2:21.331,gradientUnits:"userSpaceOnUse"},a("stop",{stopColor:"#3871C1"}),a("stop",{offset:.515,stopColor:"#2C3792"}),a("stop",{offset:.865,stopColor:"#24265D"}),a("stop",{offset:1,stopColor:"#252761"})),a("linearGradient",{id:i("b"),x1:21.028,y1:14.928,x2:6.017,y2:18.844,gradientUnits:"userSpaceOnUse"},a("stop",{stopColor:"#3871C1"}),a("stop",{offset:.515,stopColor:"#2C3792"}),a("stop",{offset:.865,stopColor:"#24265D"}),a("stop",{offset:1,stopColor:"#252761"}))))},Unt=qnt;var _O={};$(_O,{icon:()=>Knt});var ZXt=P(L());var $nt=["title","titleId"];function LV(){return LV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Gnt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Xnt=function(t){var n=t.title,r=t.titleId,o=Jnt(t,$nt);return a("svg",LV({"data-type":"logoElastic",xmlns:"http://www.w3.org/2000/svg",width:32,height:32,fill:"none",viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"outline",fillRule:"evenodd",clipRule:"evenodd",d:"M30.86 13.129A6.333 6.333 0 0132 16.77a6.419 6.419 0 01-1.162 3.652 6.382 6.382 0 01-3.032 2.331 4.833 4.833 0 01-1.672 5.542 4.789 4.789 0 01-5.77-.074 9.016 9.016 0 01-4.5 3.322 8.982 8.982 0 01-5.587.023 9.014 9.014 0 01-4.526-3.287 9.067 9.067 0 01-1.727-5.333c0-.579.053-1.156.16-1.725A6.305 6.305 0 011.145 18.9 6.341 6.341 0 010 15.242a6.42 6.42 0 011.163-3.652 6.384 6.384 0 013.035-2.33 4.833 4.833 0 011.658-5.557 4.789 4.789 0 015.78.07 9.037 9.037 0 014.93-3.446 9.007 9.007 0 015.994.419 9.05 9.05 0 014.407 4.098 9.097 9.097 0 01.873 5.965 6.298 6.298 0 013.02 2.32zm-18.28.658l7.002 3.211 7.066-6.213a7.85 7.85 0 00.152-1.557c0-1.692-.539-3.34-1.54-4.704a7.897 7.897 0 00-4.02-2.869 7.87 7.87 0 00-4.932.086 7.9 7.9 0 00-3.92 3.007l-1.174 6.118 1.367 2.92-.001.001zm-7.247 7.441A7.964 7.964 0 006.72 27.53a7.918 7.918 0 004.04 2.874 7.89 7.89 0 004.95-.097 7.92 7.92 0 003.926-3.03l1.166-6.102-1.555-2.985-7.03-3.211-6.885 6.248.001.001zm4.755-11.024l-4.8-1.137.002-.002a3.82 3.82 0 011.312-4.358 3.785 3.785 0 014.538.023l-1.052 5.474zm-5.216.01a5.294 5.294 0 00-2.595 1.882 5.324 5.324 0 00-.142 6.124 5.287 5.287 0 002.505 2l6.733-6.101-1.235-2.65-5.266-1.255zm18.286 17.848a3.737 3.737 0 01-2.285-.785l1.037-5.454 4.8 1.125a3.812 3.812 0 01-1.801 4.68c-.54.283-1.14.432-1.751.434zm-1.31-7.499l5.28 1.238a5.34 5.34 0 002.622-1.938 5.37 5.37 0 001.013-3.106 5.311 5.311 0 00-.936-3.01 5.282 5.282 0 00-2.475-1.944l-6.904 6.07 1.4 2.69z",fill:"#fff"}),a("path",{d:"M12.58 13.787l7.002 3.211 7.066-6.213a7.849 7.849 0 00.152-1.557c0-1.692-.539-3.34-1.54-4.704a7.897 7.897 0 00-4.02-2.869 7.87 7.87 0 00-4.932.086 7.9 7.9 0 00-3.92 3.007l-1.174 6.118 1.367 2.92-.001.001z",fill:"#FEC514"}),a("path",{d:"M5.333 21.228A7.964 7.964 0 006.72 27.53a7.918 7.918 0 004.04 2.874 7.89 7.89 0 004.95-.097 7.92 7.92 0 003.926-3.03l1.166-6.102-1.555-2.985-7.03-3.211-6.885 6.248.001.001z",fill:"#00BFB3"}),a("path",{d:"M5.288 9.067l4.8 1.137L11.14 4.73a3.785 3.785 0 00-5.914 1.94 3.82 3.82 0 00.064 2.395",fill:"#F04E98"}),a("path",{d:"M4.872 10.214a5.294 5.294 0 00-2.595 1.882 5.324 5.324 0 00-.142 6.124 5.287 5.287 0 002.505 2l6.733-6.101-1.235-2.65-5.266-1.255z",fill:"#1BA9F5"}),a("path",{d:"M20.873 27.277a3.736 3.736 0 002.285.785 3.783 3.783 0 003.101-1.63 3.812 3.812 0 00.451-3.484l-4.8-1.125-1.037 5.454z",fill:"#93C90E"}),a("path",{d:"M21.848 20.563l5.28 1.238a5.34 5.34 0 002.622-1.938 5.37 5.37 0 001.013-3.106 5.312 5.312 0 00-.936-3.01 5.283 5.283 0 00-2.475-1.944l-6.904 6.07 1.4 2.69z",fill:"#07C"}))},Knt=Xnt;var SO={};$(SO,{icon:()=>tot});var tKt=P(L());var Ynt=["title","titleId"];function DV(){return DV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Znt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var eot=function(t){var n=t.title,r=t.titleId,o=Qnt(t,Ynt);return a("svg",DV({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"none",fillRule:"evenodd"},a("path",{fill:"#F04E98",d:"M32 9V2.5A2.5 2.5 0 0029.5 0h-27A2.5 2.5 0 000 2.5V9h32z"}),a("path",{fill:"#00BFB3",d:"M0 20h32v-8H0z"}),a("path",{fill:"#0080D5",d:"M14.5 23H0v6.5A2.5 2.5 0 002.5 32h12v-9z"}),a("path",{fill:"#FEC514",d:"M17.5 23v9h12a2.5 2.5 0 002.5-2.5V23H17.5z"})))},tot=eot;var jO={};$(jO,{icon:()=>aot});var nKt=P(L());var rot=["title","titleId"];function NV(){return NV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function oot(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var iot=function(t){var n=t.title,r=t.titleId,o=not(t,rot);return a("svg",NV({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"none",fillRule:"evenodd"},a("path",{className:"euiIcon__fillNegative",d:"M2 16c0 1.384.194 2.72.524 4H22a4 4 0 000-8H2.524A15.984 15.984 0 002 16"}),a("path",{fill:"#FEC514",d:"M28.924 7.662A15.381 15.381 0 0030.48 6C27.547 2.346 23.05 0 18 0 11.679 0 6.239 3.678 3.644 9H25.51a5.039 5.039 0 003.413-1.338"}),a("path",{fill:"#00BFB3",d:"M25.51 23H3.645C6.24 28.323 11.679 32 18 32c5.05 0 9.547-2.346 12.48-6a15.381 15.381 0 00-1.556-1.662A5.034 5.034 0 0025.51 23"})))},aot=iot;var IO={};$(IO,{icon:()=>pot});var iKt=P(L());var lot=["title","titleId"];function FV(){return FV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function uot(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var cot=function(t){var n=t.title,r=t.titleId,o=sot(t,lot);return a("svg",FV({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fill:"#00BFB3",fillRule:"evenodd",d:"M16 0c-2.918 0-5.645.794-8 2.158 4.777 2.768 8 7.923 8 13.842 0 5.919-3.223 11.074-8 13.842A15.907 15.907 0 0016 32c8.837 0 16-7.163 16-16S24.837 0 16 0z",clipRule:"evenodd"}),a("path",{fill:"#FEC514",fillRule:"evenodd",d:"M8 24h2.222A12.996 12.996 0 0013 16c0-2.935-1.012-5.744-2.778-8H8a8 8 0 000 16z",clipRule:"evenodd"}),a("path",{className:"euiIcon__fillNegative",fillRule:"evenodd",d:"M16 8h-2.152A15.877 15.877 0 0116 16c0 2.918-.786 5.647-2.152 8H16a8 8 0 000-16z",clipRule:"evenodd"}))},pot=cot;var kO={};$(kO,{icon:()=>got});var lKt=P(L());var fot=["title","titleId"];function WV(){return WV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function mot(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var hot=function(t){var n=t.title,r=t.titleId,o=dot(t,fot);return a("svg",WV({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"#419EDA"},a("path",{d:"M14.65 14.164c0 1.189-.933 2.15-2.083 2.15-1.152 0-2.082-.961-2.082-2.15 0-1.185.93-2.15 2.082-2.15 1.15 0 2.083.965 2.083 2.15zm2.693 0c0 1.189.934 2.15 2.084 2.15s2.083-.961 2.083-2.15c0-1.185-.933-2.15-2.083-2.15-1.15 0-2.084.965-2.084 2.15z"}),a("path",{d:"M31.522 16.495a5.845 5.845 0 01-3.105-.618c.272-1.603.387-3.218.357-4.827a24.896 24.896 0 00-3.027-3.703 6.137 6.137 0 012.133-2.36l.391-.25-.304-.354c-1.57-1.825-3.444-3.235-5.568-4.193L21.975 0l-.107.462a6.248 6.248 0 01-1.51 2.829 23.77 23.77 0 00-4.362-1.855 23.79 23.79 0 00-4.355 1.851A6.246 6.246 0 0110.137.465l-.108-.462-.423.189c-2.097.943-4.022 2.392-5.566 4.19l-.306.355.39.25a6.125 6.125 0 012.129 2.347 25.001 25.001 0 00-3.022 3.689 26.068 26.068 0 00.347 4.86 5.832 5.832 0 01-3.09.612L.03 16.46l.043.473a16.723 16.723 0 002.14 6.765l.234.41.35-.308a5.914 5.914 0 012.837-1.372 25.255 25.255 0 002.429 4.083c1.475.533 3.013.93 4.601 1.167a6.359 6.359 0 01-.383 3.243l-.175.439.45.102c1.15.261 2.31.394 3.447.394l3.447-.394.45-.102-.175-.44a6.376 6.376 0 01-.383-3.244 23.905 23.905 0 004.585-1.165 25.286 25.286 0 002.43-4.086 5.94 5.94 0 012.851 1.373l.35.306.233-.408a16.661 16.661 0 002.14-6.764l.042-.472-.45.036zM20.93 22.278c-1.63.458-3.287.689-4.933.689-1.65 0-3.304-.231-4.936-.69a20.028 20.028 0 01-2.113-4.594 20.072 20.072 0 01-.89-5.04 19.076 19.076 0 013.576-3.516 18.867 18.867 0 014.363-2.448 18.944 18.944 0 014.355 2.443 19.19 19.19 0 013.592 3.538c-.09 1.73-.39 3.41-.899 5.019a19.965 19.965 0 01-2.115 4.599z"})))},got=hot;var PO={};$(PO,{icon:()=>Oot});var uKt=P(L());var vot=["title","titleId"];function BV(){return BV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function bot(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var wot=function(t){var n=t.title,r=t.titleId,o=yot(t,vot),i=Lr("logo_gcp");return a("svg",BV({xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("defs",null,a("path",{id:i("a"),d:"M.085.1h4.549v6.291H.085z"})),a("g",{fill:"none",fillRule:"evenodd"},a("path",{fill:"#DB4437",fillRule:"nonzero",d:"M22.57 29.982h-5.749c.527 0 .987-.282 1.233-.7L25.857 16 20.93 7.61l5.748.001c.492 0 .97.251 1.232.7l3.698 6.291c.49.837.526 1.9 0 2.797l-6.572 11.185a2.853 2.853 0 01-2.464 1.398zm-.71-2.796c0 .386.318.7.71.7a.705.705 0 00.712-.7c0-.386-.318-.7-.711-.7a.705.705 0 00-.712.7zm6.927-10.58c.34.193.775.078.971-.256a.692.692 0 00-.26-.955.718.718 0 00-.972.256.692.692 0 00.26.955z"}),a("path",{fill:"#4285F4",fillRule:"nonzero",d:"M25.036 3.416l2.873 4.894a1.427 1.427 0 00-1.232-.699H11.071l-4.928 8.388-2.874-4.892a1.377 1.377 0 010-1.399l3.696-6.292a2.853 2.853 0 012.464-1.398h13.143c.982 0 1.937.502 2.464 1.398zM10.14 4.814c0-.386-.318-.7-.71-.7a.705.705 0 00-.712.7c0 .386.318.7.711.7a.705.705 0 00.711-.7zm12.787.606a.692.692 0 00.26-.955.718.718 0 00-.971-.256.692.692 0 00-.26.955.718.718 0 00.971.256z"}),a("path",{fill:"#F4B400",fillRule:"nonzero",d:"M.394 14.601l2.875-4.893c-.263.449-.245.98 0 1.399L11.07 24.39h9.857l-2.874 4.892c-.246.418-.706.7-1.233.7H9.428a2.854 2.854 0 01-2.464-1.398L.394 17.398a2.754 2.754 0 010-2.797zm2.82.793a.718.718 0 00-.972.256.693.693 0 00.26.955c.34.193.775.078.971-.256a.692.692 0 00-.26-.955zM9.072 26.58a.692.692 0 00-.26.955.718.718 0 00.971.256.692.692 0 00.26-.955.718.718 0 00-.971-.256z"}),a("path",{fill:"#000",d:"M18.054 29.282l2.875-4.892H17.96l-1.138 5.591c.526 0 .986-.28 1.232-.699M26.678 7.611h-5.749l1.484 2.527L27.91 8.31a1.427 1.427 0 00-1.232-.7",opacity:.1}),a("g",{opacity:.1,transform:"translate(2.994 9.609)"},a("mask",{id:i("b"),fill:"#fff"},a("use",{xlinkHref:"#".concat(i("a"))})),a("path",{fill:"#000",d:"M.275 1.498L3.15 6.391l1.485-2.527L.275.1c-.263.448-.245.98 0 1.398",mask:"url(#".concat(i("b"),")")})),a("path",{fill:"#CCC",fillRule:"nonzero",d:"M11.071 24.39L6.143 16l4.928-8.39h9.858L25.857 16l-4.928 8.39H11.07zM20.268 16c0-2.317-1.91-4.194-4.268-4.194-2.357 0-4.268 1.877-4.268 4.194 0 2.316 1.91 4.194 4.268 4.194 2.357 0 4.268-1.878 4.268-4.194z"})))},Oot=wot;var EO={};$(EO,{icon:()=>Iot});var fKt=P(L());var xot=["title","titleId"];function HV(){return HV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Sot(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var jot=function(t){var n=t.title,r=t.titleId,o=_ot(t,xot);return a("svg",HV({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M20.256 15.982c0-2.316-1.91-4.194-4.268-4.194-2.357 0-4.268 1.878-4.268 4.194 0 2.317 1.911 4.195 4.268 4.195 2.357 0 4.268-1.878 4.268-4.195"}),a("path",{d:"M29.87 16.543a.862.862 0 01-1.167.308.832.832 0 01-.312-1.147.862.862 0 011.167-.308.832.832 0 01.312 1.147M22.56 28.15a.847.847 0 01-.855-.84c0-.464.383-.84.855-.84s.854.376.854.84c0 .464-.382.84-.854.84m-12.715-.113a.863.863 0 01-1.167-.308.832.832 0 01.312-1.147.862.862 0 011.167.308.832.832 0 01-.312 1.147M3.586 16.542a.863.863 0 01-1.167.308.832.832 0 01-.313-1.147.862.862 0 011.167-.308.832.832 0 01.313 1.147M22.987 5.665a.862.862 0 01-1.167-.308.832.832 0 01.312-1.147.863.863 0 011.168.308.832.832 0 01-.313 1.147m-13.57.112a.847.847 0 01-.854-.84c0-.464.382-.84.854-.84s.855.376.855.84c0 .464-.383.84-.855.84m22.178 8.797l-3.697-6.292c-.014-.023-.03-.043-.045-.065l-2.83-4.818A2.854 2.854 0 0022.56 2H9.417a2.853 2.853 0 00-2.464 1.398L3.257 9.69l3.284 5.59 4.519-7.69h15.605c.491 0 .969.251 1.232.699h-6.565l4.513 7.682-4.935 8.4-2.87 4.883a1.426 1.426 0 01-1.23.699l3.279-5.582h-9.03l-4.544-7.738-.384-.653-2.874-4.893a1.377 1.377 0 01-.003-1.391L.382 14.584a2.754 2.754 0 000 2.796l6.57 11.186a2.854 2.854 0 002.465 1.398h7.392c.054 0 .107-.005.16-.011h5.59a2.853 2.853 0 002.464-1.397l6.572-11.186c.526-.896.49-1.96 0-2.796"}))},Iot=jot;var CO={};$(CO,{icon:()=>Aot});var mKt=P(L());var kot=["title","titleId"];function VV(){return VV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Eot(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Cot=function(t){var n=t.title,r=t.titleId,o=Pot(t,kot);return a("svg",VV({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M16 0C7.164 0 0 7.343 0 16.4c0 7.248 4.584 13.394 10.942 15.562.8.15 1.092-.356 1.092-.789 0-.39-.014-1.684-.022-3.053-4.45.991-5.39-1.934-5.39-1.934-.728-1.894-1.776-2.398-1.776-2.398-1.454-1.017.11-.997.11-.997 1.606.114 2.452 1.69 2.452 1.69 1.428 2.506 3.746 1.781 4.656 1.36.146-1.056.56-1.78 1.016-2.19-3.552-.414-7.288-1.821-7.288-8.105 0-1.792.624-3.254 1.646-4.402-.164-.416-.714-2.085.158-4.342 0 0 1.341-.44 4.4 1.681A14.882 14.882 0 0116 7.932c1.36.006 2.728.188 4.006.553 3.053-2.124 4.396-1.681 4.396-1.681.875 2.259.325 3.926.16 4.34 1.026 1.148 1.645 2.61 1.645 4.402 0 6.3-3.742 7.687-7.307 8.094.577.508 1.086 1.505 1.086 3.035 0 2.192-.021 3.96-.021 4.5 0 .437.29.947 1.101.787C27.42 29.79 32 23.644 32 16.4 32 7.343 24.836 0 16 0z"}))},Aot=Cot;var AO={};$(AO,{icon:()=>Lot});var gKt=P(L());var Mot=["title","titleId"];function qV(){return qV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Rot(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var zot=function(t){var n=t.title,r=t.titleId,o=Tot(t,Mot);return a("svg",qV({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"none"},a("path",{fill:"#E65A4D",d:"M29.162 4.149c.29-.175.588-.078.873 0a2.616 2.616 0 011.907 2.476c.006.29-.007.581-.007.866-.084 0-.135.052-.2.097-.815.582-1.642 1.164-2.45 1.752-.33.239-.692.426-.97.73-.116 0-.2.078-.284.136-2.69 1.855-5.379 3.704-8.062 5.56-1.331.918-2.663 1.849-3.995 2.773h-.11c-.058-.045-.11-.103-.168-.142L5.863 11.55c-.672-.466-1.344-.938-2.017-1.403-.077-.052-.148-.162-.245-.104-.09.052-.033.175-.045.272-.007.032 0 .065 0 .097v16.194c0 .116.006.24.012.355 0 .065-.006.123-.006.188-1.228.149-2.347-.02-3.116-1.131a2.381 2.381 0 01-.44-1.364c0-6.032-.006-12.057.007-18.089 0-1.228.995-2.314 2.217-2.488.194-.026.388-.052.556.077.04.039.071.078.117.11 4.273 3.168 8.546 6.335 12.819 9.51.168.122.278.116.446-.007 3.413-2.521 6.833-5.036 10.247-7.55.905-.692 1.823-1.384 2.747-2.07z"}),a("path",{fill:"#F6F4EC",d:"M29.162 4.149c-.924.685-1.842 1.377-2.767 2.062-3.413 2.521-6.833 5.03-10.246 7.55-.168.123-.272.13-.446.007-4.267-3.174-8.54-6.335-12.813-9.51-.046-.032-.078-.07-.117-.11.078-.129.214-.083.324-.083h25.742c.11 0 .239-.046.323.084z"}),a("path",{fill:"#E6E3D6",d:"M3.556 26.95a6.533 6.533 0 01-.013-.356V10.4c0-.032-.007-.065 0-.097.013-.09-.046-.213.045-.271.097-.059.174.051.246.103.672.465 1.344.937 2.017 1.403l9.832 6.846c.058.045.117.097.168.142-.026.026-.058.045-.084.071l-.064.065c-.052 0-.104.013-.13.064l-.064.065c-.007.013-.02.02-.026.032.013-.006.02-.019.032-.025l.065-.065c.052 0 .103-.013.13-.065.018-.02.044-.045.064-.064.064 0 .129-.007.194-.007.898.627 1.803 1.248 2.702 1.875 2.676 1.855 5.353 3.704 8.023 5.572.478.337 1.002.628 1.428 1.035-.116.11-.258.039-.388.058.007-.149-.122-.188-.22-.252-.49-.343-.995-.672-1.473-1.028-.802-.588-1.617-1.15-2.431-1.72-.679-.472-1.351-.963-2.05-1.409-.607-.388-1.17-.853-1.777-1.248-.685-.44-1.332-.93-2.01-1.377-.563-.368-1.113-.762-1.662-1.15-.11-.078-.207-.11-.323-.033-.233.168-.53.278-.724.46-.556.51-1.235.84-1.817 1.305-.743.589-1.545 1.112-2.34 1.636-1.319.873-2.599 1.816-3.911 2.696a43.697 43.697 0 00-2.308 1.629c-.207.155-.485.226-.614.485-.13-.013-.272.038-.395-.046 2.315-1.616 4.63-3.226 6.937-4.842.304-.213.646-.381.899-.666.045-.013.103-.019.097-.084 0-.006-.013-.02-.02-.02-.065-.006-.077.046-.09.091-.233.013-.375.194-.55.31-2.463 1.7-4.932 3.388-7.395 5.075zm11.119-7.564l.064-.065c.052 0 .104-.013.13-.064l.064-.065c.052 0 .104-.013.13-.065.006-.013.019-.02.025-.032-.012.006-.019.02-.032.026-.052 0-.103.013-.13.064l-.064.065c-.051 0-.103.013-.13.065-.018.026-.038.045-.057.07-.013.007-.026.014-.033.027.013-.007.026-.013.033-.026zm-.84.575c-.052 0-.104.013-.13.065-.039.006-.09.006-.097.065 0 .012.026.038.039.038.052-.006.058-.051.065-.09.051-.007.096-.013.122-.078a.311.311 0 00.071-.058c.052 0 .104-.013.13-.065l.064-.064c.052 0 .104-.013.13-.065.006-.013.02-.02.026-.032-.013.006-.02.02-.033.026-.051 0-.103.013-.13.064-.018.02-.044.046-.064.065-.051 0-.103.013-.129.065l-.065.064zm-.841.588c-.052 0-.103.013-.13.065-.051.007-.103.013-.096.084 0 .007.013.02.02.02.07.006.077-.046.083-.097.052-.007.097-.02.123-.072.026-.012.045-.038.071-.058.052 0 .103-.013.13-.064l.064-.065c.052 0 .103-.013.13-.065.006-.013.019-.019.025-.032-.013.007-.02.02-.032.026-.052 0-.104.013-.13.065l-.064.064c-.052 0-.104.013-.13.065a.306.306 0 00-.064.064zm-.647.46c.052-.007.104-.013.097-.085 0-.006-.012-.019-.019-.019-.071-.006-.078.045-.084.097-.052 0-.097.013-.13.065a.223.223 0 00-.193.129c-.045.013-.104.013-.097.084 0 .006.013.02.02.02.064.006.077-.046.083-.098.09 0 .181-.006.194-.129.058-.006.104-.02.13-.065zm2.128-1.533c-.008.027-.025.054-.033.072.025.009.05.035.067.027.016-.01.025-.045.033-.072a.55.55 0 01-.067-.027zm-1.81 1.35c-.008-.024-.015-.056-.03-.056-.015-.008-.052.008-.06.024-.022.033-.007.074.03.074.022 0 .037-.025.06-.041zM15.355 19a.185.185 0 01.034-.072c-.025-.009-.05-.035-.067-.026-.016.008-.025.044-.033.07.017.01.042.019.067.028zm-3.526 2.402c-.016-.024-.031-.05-.04-.057-.015 0-.055.016-.055.033-.016.04.008.074.048.065.016 0 .031-.024.047-.04z"}),a("path",{fill:"#B6B5AC",d:"M28.121 27.085c-.426-.413-.944-.698-1.428-1.034-2.67-1.862-5.347-3.717-8.023-5.573-.899-.627-1.804-1.247-2.702-1.874 0-.02-.007-.046-.007-.065l3.995-2.773c2.69-1.856 5.379-3.705 8.062-5.56.084-.058.168-.136.284-.136v17.073c-.051-.019-.116-.038-.18-.058z"}),a("path",{fill:"#E6E3D6",d:"M4.073 27.143c.123-.258.407-.33.614-.484a47.845 47.845 0 012.308-1.63c1.312-.885 2.592-1.823 3.91-2.695.796-.524 1.598-1.048 2.341-1.636.588-.465 1.26-.795 1.817-1.306.2-.18.49-.29.724-.459.11-.084.207-.051.323.033.55.388 1.099.782 1.661 1.15.68.446 1.326.944 2.01 1.377.608.388 1.17.854 1.779 1.248.698.446 1.37.937 2.049 1.41.814.568 1.635 1.13 2.43 1.719.485.355.983.685 1.475 1.028.09.064.226.103.22.252-7.888-.007-15.774-.007-23.661-.007z"}),a("path",{fill:"#B1392F",d:"M28.315 27.143V10.07c.278-.304.64-.491.97-.73.814-.595 1.635-1.17 2.45-1.752.058-.045.116-.097.2-.097.007.11.013.213.013.323 0 5.502 0 11.01.007 16.51 0 .376-.013.75-.104 1.126-.161.691-.575 1.17-1.247 1.409-.744.259-1.513.33-2.289.284z"}),a("path",{fill:"#BEBDB3",d:"M11.514 21.59c-.253.285-.595.453-.9.666a2650.078 2650.078 0 01-6.936 4.842l-.129.039c0-.065.007-.123.007-.188 2.47-1.687 4.932-3.374 7.402-5.061.174-.117.31-.304.55-.31l.006.012z"})))},Lot=zot;var MO={};$(MO,{icon:()=>Bot});var yKt=P(L());var Dot=["title","titleId"];function UV(){return UV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Fot(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Wot=function(t){var n=t.title,r=t.titleId,o=Not(t,Dot);return a("svg",UV({width:32,height:32,viewBox:"0 0 32 32",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M4.315 17.301c.045.946 1 .5 1.416.21.415-.29.5-.045.56-.6a9.07 9.07 0 00.045-1.09 2.676 2.676 0 00-1.786.455c-.26.19-.745.79-.24 1",fill:"#F6D2A2"}),a("path",{d:"M4.805 17.987a.6.6 0 01-.27-.06.62.62 0 01-.31-.55A.41.41 0 014 17.05a1.15 1.15 0 01.5-.83 2.752 2.752 0 011.846-.47h.075v.074c.01.286.003.572-.025.856v.25c-.025.39-.1.45-.3.5a1.118 1.118 0 00-.3.145c-.288.223-.63.364-.99.41zm1.271-2.067a2.502 2.502 0 00-1.47.45 1 1 0 00-.42.671.25.25 0 00.17.205h.05v.055a.5.5 0 00.21.45 1.31 1.31 0 001.065-.31 1.29 1.29 0 01.34-.17c.13-.045.16-.055.18-.365v-.25c.024-.25.034-.5.03-.75h-.155v.014z",fill:"#010101"}),a("path",{d:"M4.315 17.3a.745.745 0 00.376-.21z",fill:"#C7B199"}),a("path",{d:"M4.315 17.391a.092.092 0 11-.055-.175h.06a.54.54 0 00.275-.16.092.092 0 01.06-.035.09.09 0 01.068.017.09.09 0 01.035.06.091.091 0 01-.018.068.7.7 0 01-.36.22h-.065v.005z",fill:"#010101"}),a("path",{d:"M6.496 6.05C2.88 5.049 5.571.43 8.498 2.322L6.496 6.05z",fill:"#74CDDD"}),a("path",{d:"M6.541 6.154h-.07c-1.03-.29-1.666-.9-1.786-1.716a2.396 2.396 0 011.116-2.26 2.421 2.421 0 012.722.09l.07.044L6.54 6.154zm.5-4.192c-.41 0-.811.12-1.155.345A2.211 2.211 0 004.85 4.393c.11.726.67 1.276 1.586 1.551l1.901-3.587a2.501 2.501 0 00-1.28-.38l-.015-.015z",fill:"#010101"}),a("path",{d:"M22.566 1.977c2.862-2.001 5.448 2.502 2.121 3.667l-2.121-3.667z",fill:"#74CDDD"}),a("path",{d:"M24.647 5.754l-2.201-3.802.065-.045a2.362 2.362 0 012.626-.22 2.427 2.427 0 011.196 2.241c-.05.5-.32 1.356-1.616 1.801l-.07.025zm-1.961-3.752l2.041 3.532a1.956 1.956 0 001.426-1.62 2.24 2.24 0 00-1.106-2.077 2.126 2.126 0 00-2.361.165z",fill:"#010101"}),a("path",{d:"M23.181 28.928c.726.45 2.056 1.811.966 2.471-1.046.961-1.636-1.055-2.557-1.33a2.549 2.549 0 011.591-1.141z",fill:"#F6D2A2"}),a("path",{d:"M23.592 31.745h-.04c-.416-.025-.756-.43-1.086-.816a2.33 2.33 0 00-.9-.775l-.12-.035.074-.125a2.656 2.656 0 011.646-1.176h.065c.466.29 1.426 1.13 1.421 1.891a.835.835 0 01-.45.725.905.905 0 01-.61.31zm-1.861-1.721c.339.2.633.467.865.785.219.36.56.628.96.755a.716.716 0 00.5-.235.661.661 0 00.371-.58c0-.61-.77-1.376-1.306-1.721a2.351 2.351 0 00-1.386.996h-.005z",fill:"#010101"}),a("path",{d:"M24.147 31.494a.09.09 0 01-.08-.05c-.053-.11-.1-.224-.14-.34a1.5 1.5 0 00-.33-.61.091.091 0 01-.022-.098.09.09 0 01.147-.032c.172.188.3.414.37.66.039.11.084.216.135.32a.09.09 0 01-.04.12l-.04.03z",fill:"#010101"}),a("path",{d:"M10.189 30.464c-.856.13-1.336.9-2.046 1.29a.62.62 0 01-1.001-.235.325.325 0 01-.26-.12c-.62-1 .645-1.696 1.31-2.186.936-.18 1.511.615 1.997 1.25z",fill:"#F6D2A2"}),a("path",{d:"M7.692 31.995a.613.613 0 01-.16 0 .74.74 0 01-.435-.375.301.301 0 01-.245-.13c-.6-.946.42-1.662 1.096-2.137l.235-.17c.945-.19 1.546.59 2.026 1.22l.135.181h-.15a2.586 2.586 0 00-1.266.725c-.23.212-.482.4-.75.56a1.001 1.001 0 01-.486.126zm-.6-.58a.245.245 0 01.105 0h.025l.04.08a.58.58 0 00.335.305.686.686 0 00.5-.12c.26-.155.503-.337.726-.54a3 3 0 011.206-.736c-.46-.6-1-1.25-1.786-1.1l-.225.16c-.69.5-1.546 1.09-1.051 1.885a.146.146 0 00.105.07l.02-.005z",fill:"#010101"}),a("path",{d:"M7.157 31.614a.09.09 0 01-.09-.12c.037-.24.137-.466.29-.655.072-.1.136-.205.19-.315a.09.09 0 11.165.075c-.058.12-.127.236-.205.345-.132.17-.217.372-.245.585a.09.09 0 01-.067.084.09.09 0 01-.038.002zM6.647 4.78c-.5-.25-.826-.596-.536-1.146.29-.55.77-.455 1.251-.205l-.715 1.35zm17.285-.48c.5-.25.825-.596.535-1.146-.29-.55-.77-.456-1.25-.205l.715 1.35z",fill:"#010101"}),a("path",{d:"M27.219 17.181c-.045.946-1.001.5-1.416.21-.416-.29-.5-.045-.56-.6a9.068 9.068 0 01-.046-1.09 2.677 2.677 0 011.787.454c.26.19.745.79.24 1.001",fill:"#F6D2A2"}),a("path",{d:"M26.728 17.846a2.046 2.046 0 01-.955-.36 1.117 1.117 0 00-.3-.145c-.2-.07-.275-.13-.3-.5v-.25a6.516 6.516 0 01-.026-.856v-.12h.076a2.751 2.751 0 011.846.47 1.15 1.15 0 01.5.83.412.412 0 01-.225.326.62.62 0 01-.31.55.605.605 0 01-.306.055zm-1.456-2.06c-.003.25.007.5.03.75v.25c0 .305.046.315.18.365.122.04.236.097.34.17a1.307 1.307 0 001.067.31.502.502 0 00.21-.45v-.06h.05a.25.25 0 00.17-.205 1.002 1.002 0 00-.42-.67 2.552 2.552 0 00-1.627-.46z",fill:"#010101"}),a("path",{d:"M27.218 17.181a.746.746 0 01-.375-.195z",fill:"#C7B199"}),a("path",{d:"M27.219 17.271h-.095a.7.7 0 01-.35-.25.09.09 0 01-.007-.101.091.091 0 01.152-.01.54.54 0 00.275.16h.06a.101.101 0 11-.035.201z",fill:"#010101"}),a("path",{d:"M15.407.066c3.622 0 7.004.5 8.785 4.002 1.586 3.898 1 8.105 1.266 12.223.21 3.537.67 7.624-.97 10.906-1.717 3.442-6.05 4.297-9.601 4.182-2.792-.1-6.164-1-7.74-3.562-1.851-3.002-.976-7.444-.84-10.771.16-3.942-1.071-7.9.225-11.762C7.877 1.282 11.5.376 15.402.066",fill:"#74CDDD"}),a("path",{d:"M15.502 31.494h-.62a13.202 13.202 0 01-4.358-.87 6.969 6.969 0 01-3.457-2.737c-1.501-2.421-1.23-5.763-1-8.715.06-.74.114-1.446.14-2.106.026-1.4-.034-2.8-.18-4.192-.211-2.502-.431-5.089.41-7.595a6.644 6.644 0 013.501-4.047C11.29.572 12.94.19 15.367 0c3.572-.025 7.094.475 8.905 4.022 1.16 2.852 1.176 5.914 1.196 8.876 0 1.11 0 2.256.08 3.377 0 .34.04.685.065 1.03.21 3.247.45 6.934-1.046 9.916-1.871 3.732-6.574 4.272-9.065 4.272zM15.407.156c-3.768.32-7.44 1.13-8.79 5.158-.831 2.471-.61 5.038-.406 7.504.147 1.4.207 2.806.18 4.213-.025.665-.085 1.37-.14 2.116-.23 2.922-.5 6.239.966 8.605.615 1 2.596 3.337 7.67 3.502 2.196.08 7.504-.17 9.505-4.142 1.47-2.942 1.236-6.599 1.026-9.826 0-.35-.045-.695-.065-1.03a67.451 67.451 0 01-.08-3.353c0-2.941-.03-6.003-1.181-8.805A6.438 6.438 0 0020.445.841a14.96 14.96 0 00-5.038-.685z",fill:"#010101"}),a("path",{d:"M16.042 4.924c.65 3.777 6.824 2.781 5.938-1.03-.795-3.418-6.153-2.472-5.938 1.03z",fill:"#fff"}),a("path",{d:"M18.979 7.39a3.457 3.457 0 01-1.13-.185 2.797 2.797 0 01-1.892-2.266 2.882 2.882 0 01.78-2.222 3.407 3.407 0 012.002-1 3.202 3.202 0 012.031.35 2.727 2.727 0 011.296 1.806 2.643 2.643 0 01-.77 2.682 3.502 3.502 0 01-2.317.835zm-2.847-2.476a2.626 2.626 0 001.776 2.126 3.417 3.417 0 003.277-.62 2.502 2.502 0 00.716-2.502 2.672 2.672 0 00-3.132-2.031 2.887 2.887 0 00-2.637 3.027z",fill:"#010101"}),a("path",{d:"M8.663 5.539c.84 3.287 6.103 2.441 5.908-.855-.235-3.953-6.714-3.207-5.908.855z",fill:"#fff"}),a("path",{d:"M11.474 7.705a3.232 3.232 0 01-1.536-.375 2.727 2.727 0 01-1.355-1.776 2.757 2.757 0 01.94-2.827 3.552 3.552 0 013.532-.45 2.672 2.672 0 011.601 2.402c.105 1.75-1.286 2.771-2.617 3.001a3.657 3.657 0 01-.565.025zM8.763 5.52A2.732 2.732 0 0012.03 7.52c1.26-.2 2.576-1.16 2.476-2.806a2.501 2.501 0 00-1.5-2.262 3.377 3.377 0 00-3.358.43 2.597 2.597 0 00-.885 2.637z",fill:"#010101"}),a("path",{d:"M16.767 9.481c.049.521.049 1.046 0 1.566a1 1 0 01-.585.36.861.861 0 01-.655-.5c-.032-.59-.017-1.183.045-1.77l1.195.344z",fill:"#fff"}),a("path",{d:"M16.237 11.483h-.025a.944.944 0 01-.725-.566 5.95 5.95 0 010-1.215c0-.185.03-.38.035-.57v-.15l1.35.414v.085c0 .16 0 .33.026.5.045.358.045.72 0 1.076v.025a.75.75 0 01-.476.34l-.155.06h-.03zm-.58-.63a.766.766 0 00.56.445l.14-.056a.6.6 0 00.366-.26c.04-.332.04-.668 0-1 0-.155 0-.305-.026-.455l-1-.306c0 .155 0 .31-.03.46-.044.388-.05.778-.015 1.166l.005.005zM10.114 5.964c.491 0 .89-.432.89-.965 0-.534-.399-.966-.89-.966-.492 0-.89.432-.89.966 0 .533.398.965.89.965z",fill:"#010101"}),a("path",{d:"M10.519 5.464c.116 0 .21-.11.21-.245s-.094-.245-.21-.245c-.116 0-.21.11-.21.245s.094.245.21.245z",fill:"#fff"}),a("path",{d:"M17.568 5.724c.483 0 .875-.432.875-.965 0-.533-.392-.966-.875-.966-.484 0-.876.433-.876.966 0 .533.392.965.876.965z",fill:"#010101"}),a("path",{d:"M17.963 5.224c.114 0 .206-.11.206-.245 0-.136-.092-.245-.206-.245-.113 0-.205.11-.205.245s.092.245.205.245zM14.266 9.406c-.39.941.215 2.822 1.27 1.436a11.12 11.12 0 01.046-1.77l-1.316.334z",fill:"#fff"}),a("path",{d:"M14.812 11.428a.5.5 0 01-.26-.07c-.426-.246-.691-1.251-.39-2.002v-.04l1.5-.38v.12c0 .195 0 .39-.035.575a5.71 5.71 0 000 1.181v.065a1.056 1.056 0 01-.815.55zm-.496-1.947c-.215.586-.045 1.501.33 1.716.27.155.57-.115.78-.385a6.128 6.128 0 010-1.18c0-.146 0-.3.031-.45l-1.14.3z",fill:"#010101"}),a("path",{d:"M14.38 7.595a1.146 1.146 0 00-.94 1.601c.5.9 1.611-.08 2.302 0 .795 0 1.45.84 2.09.15.711-.77-.304-1.5-1.1-1.856l-2.351.105z",fill:"#F6D2A2"}),a("path",{d:"M17.268 9.727a2 2 0 01-.73-.206 2.207 2.207 0 00-.791-.22c-.287 0-.57.062-.83.18-.561.195-1.196.416-1.557-.23a1.08 1.08 0 010-1.05 1.281 1.281 0 011.001-.686l2.406-.105c.59.25 1.266.706 1.381 1.236a.955.955 0 01-.88 1.08zm-1.501-.606c.296.024.584.104.85.235.45.19.806.335 1.166-.055a.664.664 0 00.205-.605c-.1-.46-.735-.88-1.256-1.1l-2.326.094a1.11 1.11 0 00-.85.59.906.906 0 000 .876c.285.5.795.335 1.34.15.274-.122.57-.185.87-.185z",fill:"#231F20"}),a("path",{d:"M14.266 7.56c-.055-1.25 2.336-1.41 2.617-.36.28 1.05-2.502 1.29-2.617.36z",fill:"#010101"}))},Bot=Wot;var TO={};$(TO,{icon:()=>$ot});var wKt=P(L());var Hot=["title","titleId"];function $V(){return $V=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function qot(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Uot=function(t){var n=t.title,r=t.titleId,o=Vot(t,Hot),i=Lr("logo_google_g");return a("svg",$V({xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",viewBox:"0 0 32 32",width:32,height:32,"aria-labelledby":r},o),n?a("title",{id:r},n):null,a("defs",null,a("path",{id:i("a"),d:"M15.319 3.278c0-1.131-.102-2.22-.29-3.264H0v6.172h8.587c-.37 1.995-1.494 3.685-3.184 4.816v4.004h5.157c3.017-2.778 4.758-6.869 4.758-11.728z"}),a("path",{id:i("c"),d:"M14.343 12.956c4.308 0 7.92-1.43 10.56-3.866l-5.157-4.004c-1.429.958-3.256 1.523-5.403 1.523-4.156 0-7.674-2.806-8.928-6.578H.084v4.134c2.625 5.215 8.021 8.79 14.259 8.79z"}),a("path",{id:i("e"),d:"M7.028 10.25a9.59 9.59 0 01-.5-3.032 9.59 9.59 0 01.5-3.032V.052h-5.33A15.95 15.95 0 000 7.218c0 2.575.617 5.012 1.697 7.166l5.331-4.134z"}),a("path",{id:i("g"),d:"M14.343 6.392c2.342 0 4.446.805 6.1 2.386l4.576-4.576C22.256 1.627 18.644.046 14.343.046 8.105.046 2.709 3.622.083 8.836l5.332 4.134c1.254-3.77 4.772-6.578 8.928-6.578z"})),a("g",{fill:"none",fillRule:"evenodd"},a("g",{transform:"translate(15.955 13.087)"},a("mask",{id:i("b"),fill:"#fff"},a("use",{xlinkHref:"#".concat(i("a"))})),a("path",{fill:"#4285F4",fillRule:"nonzero",mask:"url(#".concat(i("b"),")"),d:"M.001 15.006h15.318V.014H.001z"})),a("g",{transform:"translate(1.613 19.003)"},a("mask",{id:i("d"),fill:"#fff"},a("use",{xlinkHref:"#".concat(i("c"))})),a("path",{fill:"#34A853",fillRule:"nonzero",mask:"url(#".concat(i("d"),")"),d:"M.084 12.956h24.819V.031H.084z"})),a("g",{transform:"translate(0 8.784)"},a("mask",{id:i("f"),fill:"#fff"},a("use",{xlinkHref:"#".concat(i("e"))})),a("path",{fill:"#FBBC04",fillRule:"nonzero",mask:"url(#".concat(i("f"),")"),d:"M0 14.384h7.028V.052H0z"})),a("g",{transform:"translate(1.613)"},a("mask",{id:i("h"),fill:"#fff"},a("use",{xlinkHref:"#".concat(i("g"))})),a("path",{fill:"#EA4335",fillRule:"nonzero",mask:"url(#".concat(i("h"),")"),d:"M.084 12.97h24.935V.046H.084z"}))))},$ot=Uot;var RO={};$(RO,{icon:()=>Yot});var _Kt=P(L());var Jot=["title","titleId"];function JV(){return JV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Xot(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Kot=function(t){var n=t.title,r=t.titleId,o=Got(t,Jot),i=Lr("logo_haproxy");return a("svg",JV({width:32,height:32,viewBox:"0 0 32 32",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{clipPath:"url(#".concat(i("clip0"),")")},a("path",{d:"M16.05 13.237l-3.11-3.612",stroke:"#05486D",strokeWidth:.12,strokeMiterlimit:10}),a("path",{d:"M6.117 10.528l2.509 3.512",stroke:"#05486D",strokeWidth:.06,strokeMiterlimit:10}),a("path",{d:"M16.05 13.237l3.11-3.612M19.863 17.15l3.712-3.11M19.863 17.15l3.712 3.311M19.16 24.575l-3.11-3.511M12.94 24.575l3.11-3.511M8.625 20.26l3.512-3.11M8.625 14.04l3.512 3.11M16.05 13.238l-7.425.802M16.05 13.238l7.525.802M19.863 17.15l-.702-7.525M19.863 17.15l-.702 7.425M23.575 20.461l-7.525.602M8.625 20.261l7.425.803M12.94 24.575l-.803-7.425M12.94 9.625l-.803 7.525",stroke:"#05486D",strokeWidth:.12,strokeMiterlimit:10}),a("path",{d:"M5.114 15.043l3.511-1.003M9.328 7.117l3.612 2.509M13.743 5.512l-.803 4.113M13.743 5.512l5.418 4.113M18.358 5.512l.803 4.113M22.773 7.117L19.16 9.626M25.983 10.528l-6.822-.903M23.575 14.04l2.408-3.512M23.575 14.04l3.412 1.003M23.575 14.04l3.412 5.217M18.358 5.512L12.94 9.625M23.576 14.04l-.803-6.923M23.575 20.462l3.412-1.204M23.575 20.462l3.412-5.418M23.575 20.461l2.408 3.312M23.576 20.461l-.803 6.723M19.16 24.575l3.613 2.609M19.16 24.575l6.823-.802M19.16 24.575l-.802 4.214M19.16 24.575l-5.417 4.214M12.94 24.575l.803 4.214M12.94 24.575l5.418 4.214M12.94 24.575l-3.612 2.609M12.94 24.575l-6.823-.802M8.626 20.261l-2.509 3.512M8.625 20.261l.703 6.923M8.625 20.26l-3.511-1.002M8.625 14.04l-3.511 5.217M8.625 20.26l-3.511-5.217M9.328 7.117l-.703 6.923M6.117 10.528l6.823-.903",stroke:"#05486D",strokeWidth:.06,strokeMiterlimit:10}),a("path",{d:"M9.327 7.117L6.72 5.813M9.328 7.117l-.201-2.91M13.742 5.512L9.127 4.207M13.742 5.512l-2.006-2.509M13.743 5.512l.802-2.91M9.328 7.117l2.408-4.114M18.358 5.512l-3.813-2.91M18.358 5.512l-.803-3.01M13.743 5.512l3.812-3.01M18.358 5.512l2.007-2.509M22.773 7.117l-2.408-4.114M22.773 7.117l.301-2.91M18.358 5.512l4.716-1.305M22.773 7.117l2.709-1.405M22.773 7.117l4.716.703M25.983 10.528l1.505-2.709M25.984 10.528l-.502-4.816M25.983 10.528l3.11-.3M25.983 10.528l4.214 2.308M26.987 15.044l2.107-4.817M26.987 15.043l3.21-2.207M26.987 15.043l3.612.703M26.987 19.258l3.612-3.512M26.987 19.258l3.712-.703M26.987 15.043l3.712 3.512M26.987 19.258l3.11 2.107M25.983 23.773l4.114-2.409M25.983 23.773l3.11.3M26.987 19.258l2.107 4.816M25.983 23.773l1.505 2.709M25.984 23.773l-.502 4.715M25.482 28.488l-2.71-1.304M22.773 27.184l.2 2.91M22.773 27.184l4.716-.703M22.773 27.184l-2.408 4.114M18.358 28.79l2.007 2.508M18.358 28.79l4.615 1.304M18.358 28.79l-.803 3.01M18.358 28.79l-3.813 3.01M13.743 28.79l.802 3.01M13.743 28.79l3.812 3.01M13.742 28.79l-2.006 2.508M9.328 27.184l2.408 4.114M13.742 28.79l-4.615 1.404M9.328 27.184l-.201 3.01M9.328 27.184l-2.71 1.404M6.117 23.773l.502 4.816M9.328 27.184l-4.716-.703M6.117 23.773l-1.505 2.709M6.117 23.773l-3.11.3M6.117 23.773l-4.214-2.409M5.114 19.258l-3.21 2.107M5.114 19.258L1.4 18.555M5.114 19.258l-2.107 4.816M5.114 15.043L1.4 18.555M5.114 19.258L1.4 15.746M5.114 15.043l-3.11-2.106M5.114 15.043l-3.713.703M5.114 15.044l-2.007-4.817M6.117 10.528l-3.01-.3M6.117 10.528l-4.114 2.408M6.117 10.528L4.712 7.92M6.117 10.528l.602-4.715M9.328 7.117l-4.616.803",stroke:"#083D5F",strokeWidth:.05,strokeMiterlimit:10}),a("path",{d:"M13.943 15.244h-3.612v3.592h3.612v-3.592zM17.756 11.331h-3.612v3.592h3.612v-3.592zM17.756 19.157h-3.612v3.592h3.612v-3.592zM21.669 15.244h-3.612v3.592h3.612v-3.592z",fill:"#006DA8"}),a("path",{d:"M20.365 8.421h-2.509V10.9h2.509V8.42zM14.144 8.321h-2.509v2.478h2.509V8.321zM9.83 12.836H7.32v2.478H9.83v-2.478zM9.83 18.956H7.32v2.479H9.83v-2.479zM24.679 18.956H22.17v2.479h2.509v-2.479zM24.679 12.736H22.17v2.478h2.509v-2.478z",fill:"#2F77BC"}),a("path",{d:"M6.92 9.625H5.314v1.676H6.92V9.625zM10.13 6.214H8.526v1.675h1.606V6.214zM14.445 4.609h-1.606v1.675h1.606V4.61zM5.916 14.14H4.311v1.676h1.605V14.14zM26.786 9.826H25.08v1.646h1.706V9.826zM23.575 6.415H21.87V8.06h1.705V6.415zM19.26 4.81h-1.705v1.645h1.706V4.809zM27.689 14.441h-1.605v1.646h1.605V14.44z",fill:"#139BD7"}),a("path",{d:"M14.144 23.27h-2.509v2.479h2.509v-2.478zM20.264 23.27h-2.508v2.479h2.508v-2.478z",fill:"#2F77BC"}),a("path",{d:"M26.685 22.77H25.08v1.675h1.605v-1.676zM23.375 26.08H21.77v1.676h1.605V26.08zM19.06 27.686h-1.605v1.675h1.605v-1.675zM27.589 18.254h-1.606v1.676h1.606v-1.676zM6.92 22.97H5.214v1.646H6.92V22.97zM10.03 26.381H8.325v1.646h1.705V26.38zM14.445 27.987h-1.706v1.645h1.706v-1.645zM5.816 18.355H4.21V20h1.606v-1.645z",fill:"#139BD7"}),a("path",{d:"M7.12 5.311h-.903v.933h.903v-.933zM1.903 15.244H1v.933h.903v-.933zM25.782 5.21h-.903v.934h.903V5.21zM2.505 12.335h-.903v.933h.903v-.934zM12.137 2.502h-.903v.933h.903v-.933zM3.508 9.726h-.903v.933h.903v-.933zM5.113 7.318H4.21v.933h.903v-.933zM9.629 3.806h-.903v.903h.903v-.903zM15.047 2.1h-.903v.903h.903V2.1zM23.374 3.605h-.903v.933h.903v-.933zM29.295 9.726h-.903v.933h.903v-.933zM30.498 12.335h-.903v.933h.903v-.934zM27.69 7.318h-.904v.933h.903v-.933zM30.9 15.144h-.903v.933h.903v-.933zM17.856 2h-.903v.933h.903V2zM20.665 2.602h-.903v.933h.903v-.933z",fill:"#03A9DA"}),a("path",{d:"M7.12 5.311h-.903v.933h.903v-.933zM1.903 15.244H1v.933h.903v-.933zM25.782 5.21h-.903v.934h.903V5.21zM2.505 12.335h-.903v.933h.903v-.934zM12.137 2.502h-.903v.933h.903v-.933zM3.508 9.726h-.903v.933h.903v-.933zM5.113 7.318H4.21v.933h.903v-.933zM9.629 3.806h-.903v.903h.903v-.903zM15.047 2.1h-.903v.903h.903V2.1zM23.374 3.605h-.903v.933h.903v-.933zM29.295 9.726h-.903v.933h.903v-.933zM30.498 12.335h-.903v.933h.903v-.934zM27.69 7.318h-.904v.933h.903v-.933zM30.9 15.144h-.903v.933h.903v-.933zM17.856 2h-.903v.933h.903V2zM20.665 2.602h-.903v.933h.903v-.933zM25.682 27.886h-.903v.933h.903v-.933zM31 17.953h-.903v.933H31v-.933zM7.12 27.987h-.903v.933h.903v-.933zM30.398 20.763h-.903v.933h.903v-.933zM20.665 30.596h-.903v.933h.903v-.933zM29.295 23.371h-.903v.933h.903v-.933zM27.69 25.78h-.904v.932h.903v-.933zM23.274 29.793h-.903v.902h.903v-.902zM17.756 31.498h-.903v.903h.903v-.903zM9.428 29.492h-.903v.933h.903v-.933zM3.508 23.472h-.903v.933h.903v-.933zM2.304 20.863h-.903v.933h.903v-.933zM5.013 25.88H4.11v.933h.903v-.933zM1.903 17.953H1v.933h.903v-.933zM14.947 31.498h-.903v.933h.902v-.933zM12.137 30.596h-.903v.933h.903v-.933z",fill:"#03A9DA"})),a("defs",null,a("clipPath",{id:i("clip0")},a("path",{d:"M0 0h32v32H0V0z",fill:"#fff"}))))},Yot=Kot;var zO={};$(zO,{icon:()=>rit});var IKt=P(L());var Qot=["title","titleId"];function GV(){return GV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function eit(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var tit=function(t){var n=t.title,r=t.titleId,o=Zot(t,Qot),i=Lr("logo_ibm");return a("svg",GV({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("defs",null,a("linearGradient",{id:i("a"),x1:"8.005%",x2:"53.33%",y1:"79.323%",y2:"79.324%"},a("stop",{offset:"0%",stopColor:"#3BDADE",stopOpacity:0}),a("stop",{offset:"30.476%",stopColor:"#36CEE1",stopOpacity:.383}),a("stop",{offset:"100%",stopColor:"#21A2EF"})),a("linearGradient",{id:i("b"),x1:"19.496%",x2:"71.309%",y1:"83.344%",y2:"17.638%"},a("stop",{offset:"0%",stopColor:"#207FFA"}),a("stop",{offset:"100%",stopColor:"#6EAFF1",stopOpacity:0})),a("linearGradient",{id:i("c"),x1:"21.909%",x2:"21.909%",y1:"96.314%",y2:"29.454%"},a("stop",{offset:"0%",stopColor:"#42C1E6",stopOpacity:0}),a("stop",{offset:"57.076%",stopColor:"#6FB9EF"}),a("stop",{offset:"86.716%",stopColor:"#60CBE7"}),a("stop",{offset:"100%",stopColor:"#5CCFE5",stopOpacity:0})),a("linearGradient",{id:i("d"),x1:"96.205%",x2:"-1.172%",y1:"12.667%",y2:"-22.252%"},a("stop",{offset:"0%",stopColor:"#6FB9EF",stopOpacity:0}),a("stop",{offset:"22.427%",stopColor:"#38D2E0"}),a("stop",{offset:"91.203%",stopColor:"#6ABFEC"}),a("stop",{offset:"100%",stopColor:"#5CCFE5",stopOpacity:0})),a("linearGradient",{id:i("e"),x1:"9.408%",x2:"80.589%",y1:"87.764%",y2:"83.138%"},a("stop",{offset:"0%",stopColor:"#126CFD"}),a("stop",{offset:"100%",stopColor:"#21A1EF"}))),a("g",{fill:"none",fillRule:"evenodd"},a("path",{fill:"#38D2E0",d:"M4.262 13.122a.604.604 0 01-.3-.08l-2.844-1.625a.617.617 0 01-.295-.734.608.608 0 01.868-.315l2.843 1.625c.29.159.405.514.261.81a.603.603 0 01-.533.32zm4.914-4.864a.603.603 0 01-.522-.298L7.012 5.144a.615.615 0 01.115-.782.606.606 0 01.91.157l1.64 2.813a.617.617 0 01-.158.819c-.1.07-.22.107-.343.107zm6.107-2.416V2.635a.624.624 0 01.575-.634.605.605 0 01.443.164.593.593 0 01.186.431v3.285a.593.593 0 01-.186.43.605.605 0 01-.443.165.624.624 0 01-.575-.634zm7.312 2.416a.604.604 0 01-.343-.107.617.617 0 01-.159-.82l1.64-2.812a.602.602 0 01.911-.157c.223.2.271.528.115.782L23.117 7.96a.603.603 0 01-.522.298zm4.914 4.864a.602.602 0 01-.534-.319.616.616 0 01.262-.81l2.818-1.611a.626.626 0 01.783.112.592.592 0 01-.156.906l-2.873 1.643a.604.604 0 01-.3.08z"}),a("path",{fill:"url(#".concat(i("a"),")"),d:"M16.536 19.645l-1.204-.009c.026-3.377 2.146-6.391 5.337-7.585a8.308 8.308 0 019.068 2.197l-.897.795a7.097 7.097 0 00-7.745-1.876c-2.726 1.019-4.537 3.593-4.559 6.478z",transform:"translate(0 2)"}),a("path",{fill:"url(#".concat(i("b"),")"),d:"M.029 20.909c.022-3.354 2.475-6.208 5.815-6.764l.201 1.176c-2.764.46-4.794 2.82-4.812 5.596L.029 20.91z",transform:"translate(0 2)"}),a("path",{fill:"url(#".concat(i("c"),")"),d:"M8.246 24.737a10.625 10.625 0 010-15.131c4.219-4.178 11.06-4.178 15.279 0a10.89 10.89 0 011.384 1.678l-1.004.657a9.517 9.517 0 00-1.231-1.492c-3.75-3.713-9.828-3.713-13.577 0a9.442 9.442 0 000 13.445l-.851.843z",transform:"translate(0 2)"}),a("path",{fill:"url(#".concat(i("d"),")"),d:"M5.836 13.234c.404-1.332 1.33-2.56 2.41-3.628 4.219-4.178 11.06-4.178 15.279 0a10.89 10.89 0 011.384 1.678l-1.004.657a9.517 9.517 0 00-1.231-1.492c-3.75-3.713-9.828-3.713-13.577 0a9.474 9.474 0 00-2.074 3.06c-1.452 3.45-2.358 3.593-1.187-.275z",transform:"translate(0 2)"}),a("path",{fill:"url(#".concat(i("e"),")"),d:"M23.524 27.87H6.96a7.012 7.012 0 01-4.922-2.059A6.876 6.876 0 01.029 20.91l1.204.009a5.69 5.69 0 001.66 4.055 5.802 5.802 0 004.071 1.705h16.618c2.78.002 5.302-1.616 6.438-4.13a6.929 6.929 0 00-1.18-7.505l.897-.795a8.112 8.112 0 011.384 8.785c-1.329 2.943-4.279 4.837-7.534 4.838h-.063z",transform:"translate(0 2)"})))},rit=tit;var LO={};$(LO,{icon:()=>lit});var EKt=P(L());var nit=["title","titleId"];function XV(){return XV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function iit(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ait=function(t){var n=t.title,r=t.titleId,o=oit(t,nit);return a("svg",XV({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M.047 22.909l1.186.009a5.69 5.69 0 001.66 4.055 5.802 5.802 0 004.071 1.705h16.618c2.78.002 5.302-1.616 6.438-4.13a6.929 6.929 0 00-1.18-7.505l.897-.795a8.112 8.112 0 011.384 8.785c-1.329 2.943-4.279 4.837-7.534 4.838H6.96a7.012 7.012 0 01-4.922-2.06A6.876 6.876 0 01.029 22.91h.018-.018c.017-2.71 1.62-5.091 3.997-6.2.114-.054.32.29.619 1.03a5.71 5.71 0 00-3.412 5.18l-1.186-.01zm4.215-9.787a.604.604 0 01-.3-.08l-2.844-1.625a.617.617 0 01-.295-.734.608.608 0 01.868-.315l2.843 1.625c.29.159.405.514.261.81a.603.603 0 01-.533.32zm4.914-4.864a.603.603 0 01-.522-.298L7.012 5.144a.615.615 0 01.115-.782.606.606 0 01.91.157l1.64 2.813a.617.617 0 01-.158.819c-.1.07-.22.107-.343.107zm6.107-2.416V2.635a.624.624 0 01.575-.634.605.605 0 01.443.164.593.593 0 01.186.431v3.285a.593.593 0 01-.186.43.605.605 0 01-.443.165.624.624 0 01-.575-.634zm7.312 2.416a.604.604 0 01-.343-.107.617.617 0 01-.159-.82l1.64-2.812a.602.602 0 01.911-.157c.223.2.271.528.115.782L23.117 7.96a.603.603 0 01-.522.298zm4.914 4.864a.602.602 0 01-.534-.319.616.616 0 01.262-.81l2.818-1.611a.626.626 0 01.783.112.592.592 0 01-.156.906l-2.873 1.643a.604.604 0 01-.3.08zM16.366 19.78H16a2.322 2.322 0 01-.302 0c-.09-.011-.152.05-.086-.196a8.204 8.204 0 015.057-5.533 8.308 8.308 0 019.068 2.197l-.897.795a7.097 7.097 0 00-7.745-1.876 7.009 7.009 0 00-4.288 4.613c-.115.399-.115.399 0 0h-.44zM6.154 23.826a10.626 10.626 0 012.092-12.22c4.219-4.178 11.06-4.178 15.279 0l-.851.843c-3.75-3.713-9.828-3.713-13.577 0A9.442 9.442 0 007.264 23.36a6.99 6.99 0 00-.418.172l-.212.094-.162.077-.094.03-.09.039c.648-.282.965-.42.95-.412-.026.015-1.073.489-1.084.466z"}))},lit=ait;var DO={};$(DO,{icon:()=>fit});var AKt=P(L());var sit=["title","titleId"];function KV(){return KV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function cit(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var pit=function(t){var n=t.title,r=t.titleId,o=uit(t,sit);return a("svg",KV({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M21.565 17.623c-1.173 0-2.225.52-2.945 1.337l-1.845-1.306c.196-.54.309-1.118.309-1.724 0-.596-.109-1.165-.298-1.696l1.84-1.293a3.914 3.914 0 002.939 1.331 3.93 3.93 0 003.926-3.926 3.93 3.93 0 00-3.926-3.926 3.93 3.93 0 00-3.926 3.926c0 .387.058.761.163 1.115l-1.842 1.293a5.068 5.068 0 00-3.14-1.825V8.71a3.932 3.932 0 003.119-3.842A3.93 3.93 0 0012.012.941a3.93 3.93 0 00-3.926 3.926 3.93 3.93 0 003.048 3.824v2.249a5.075 5.075 0 00-4.193 4.99 5.075 5.075 0 004.229 4.995V23.3a3.931 3.931 0 00-3.084 3.833 3.93 3.93 0 003.926 3.926 3.93 3.93 0 003.927-3.926 3.931 3.931 0 00-3.084-3.833v-2.375a5.07 5.07 0 003.087-1.795l1.857 1.314c-.103.351-.16.721-.16 1.105a3.93 3.93 0 003.926 3.926 3.93 3.93 0 003.926-3.926 3.93 3.93 0 00-3.926-3.926zm0-9.18c1.05 0 1.903.853 1.903 1.903s-.854 1.903-1.903 1.903a1.906 1.906 0 01-1.904-1.903c0-1.05.854-1.904 1.904-1.904zM10.109 4.866c0-1.05.854-1.903 1.903-1.903 1.05 0 1.904.854 1.904 1.903 0 1.05-.854 1.904-1.904 1.904a1.906 1.906 0 01-1.903-1.904zm3.807 22.266c0 1.05-.854 1.903-1.904 1.903a1.906 1.906 0 01-1.903-1.903c0-1.05.854-1.904 1.903-1.904 1.05 0 1.904.854 1.904 1.904zm-1.904-8.548a2.658 2.658 0 01-2.655-2.655 2.658 2.658 0 012.655-2.655 2.658 2.658 0 012.655 2.655 2.658 2.658 0 01-2.655 2.655zm9.553 4.867a1.906 1.906 0 01-1.904-1.903c0-1.05.854-1.904 1.904-1.904 1.05 0 1.903.854 1.903 1.904 0 1.05-.854 1.903-1.903 1.903z"}))},fit=pit;var NO={};$(NO,{icon:()=>vit});var TKt=P(L());var dit=["title","titleId"];function YV(){return YV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function hit(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var git=function(t){var n=t.title,r=t.titleId,o=mit(t,dit);return a("svg",YV({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"none",fillRule:"evenodd"},a("path",{fill:"#F04E98",d:"M4 0v28.789L28.935.017z"}),a("path",{className:"euiIcon__fillNegative",d:"M4 12v16.789l11.906-13.738A24.721 24.721 0 004 12"}),a("path",{fill:"#00BFB3",d:"M18.479 16.664L6.268 30.754l-1.073 1.237h23.191c-1.252-6.292-4.883-11.719-9.908-15.327"})))},vit=git;var FO={};$(FO,{icon:()=>xit});var zKt=P(L());var yit=["title","titleId"];function QV(){return QV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function wit(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Oit=function(t){var n=t.title,r=t.titleId,o=bit(t,yit);return a("svg",QV({width:32,height:32,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M15.89.003a2.14 2.14 0 011.03.206l11.127 5.304a2.11 2.11 0 011.15 1.429l2.75 11.921a2.09 2.09 0 01-.412 1.783l-7.697 9.56c-.404.5-1.016.792-1.663.791L9.827 31c-.648 0-1.26-.292-1.664-.793l-7.7-9.558a2.107 2.107 0 01-.41-1.783L2.798 6.945a2.11 2.11 0 011.151-1.43L15.074.21c.255-.122.532-.192.815-.206zM16 4.06c-.368 0-.667.33-.667.738l.002.019c0 .055-.003.122-.002.17.01.236.06.416.091.632.057.464.103.849.074 1.206-.028.135-.127.258-.216.344l-.015.281a8.569 8.569 0 00-5.555 2.666 9.98 9.98 0 01-.24-.17c-.12.016-.24.053-.396-.038-.298-.2-.57-.477-.898-.81-.15-.16-.26-.31-.438-.464-.04-.035-.103-.082-.148-.118a.793.793 0 00-.464-.175.642.642 0 00-.53.234c-.23.288-.156.726.163.98l.01.008c.044.035.098.08.138.11.19.14.363.212.552.323.398.246.729.45.99.695.103.108.12.3.134.383l.214.19a8.592 8.592 0 00-1.36 5.998l-.278.08c-.074.096-.177.245-.286.29-.343.107-.728.147-1.194.195-.218.018-.407.008-.639.051-.05.01-.122.029-.177.042l-.006.001-.01.003c-.393.095-.645.455-.564.81.082.355.465.57.86.485l.01-.001.013-.004c.055-.012.124-.026.172-.039.228-.06.393-.15.597-.228.44-.158.806-.29 1.161-.341.149-.012.305.091.383.135l.29-.05a8.654 8.654 0 003.84 4.787l-.12.29c.043.113.091.265.059.376-.13.334-.35.688-.603 1.081-.122.182-.247.324-.357.532-.026.05-.06.126-.086.179-.17.365-.045.786.284.944.33.16.741-.008.919-.375l.001-.001v-.002c.025-.051.061-.12.083-.169.094-.215.125-.4.192-.609.176-.442.273-.905.515-1.194.067-.08.175-.11.287-.14l.151-.273a8.616 8.616 0 006.145.016l.142.256c.114.037.239.056.34.206.182.31.306.675.457 1.118.066.208.1.393.194.61.021.048.057.117.082.17.177.367.59.535.92.376.33-.158.455-.58.284-.945-.026-.052-.06-.129-.087-.179-.11-.208-.235-.348-.357-.53-.252-.393-.461-.72-.59-1.055-.055-.173.009-.28.05-.392-.025-.029-.079-.192-.11-.268a8.654 8.654 0 003.838-4.822c.086.014.236.04.285.05.1-.066.192-.152.373-.138.355.052.72.183 1.16.341.205.078.37.17.598.23.048.013.117.025.172.037l.013.004.01.002c.395.085.778-.131.86-.486.08-.355-.171-.715-.564-.81-.057-.013-.138-.035-.193-.045-.232-.044-.42-.033-.64-.051-.465-.049-.85-.089-1.193-.196-.14-.054-.239-.22-.287-.289l-.27-.078a8.572 8.572 0 00-.139-3.104 8.599 8.599 0 00-1.247-2.88c.068-.062.199-.177.236-.21.01-.12.001-.245.125-.377.262-.246.592-.45.99-.695.19-.11.364-.182.554-.322.043-.032.101-.082.146-.118.32-.255.393-.693.164-.98-.23-.287-.674-.314-.993-.06-.046.036-.107.083-.148.118-.179.153-.29.305-.44.464-.328.333-.6.611-.898.812-.129.075-.318.049-.404.044l-.253.18a8.732 8.732 0 00-5.528-2.666 16.036 16.036 0 01-.015-.297c-.087-.083-.192-.154-.218-.333-.029-.357.02-.742.076-1.206.03-.216.082-.396.09-.632.003-.053 0-.13 0-.189 0-.408-.299-.738-.667-.738zm-.834 5.156l-.198 3.488-.014.007a.587.587 0 01-.932.449l-.006.002-2.864-2.027a6.862 6.862 0 014.014-1.919zm1.668 0a6.922 6.922 0 013.99 1.92l-2.846 2.015-.01-.004a.588.588 0 01-.933-.448l-.003-.001-.198-3.482zm-6.72 3.222l2.614 2.335-.003.014a.585.585 0 01-.23 1.008l-.003.01-3.352.967a6.838 6.838 0 01.973-4.334zm11.753.001c.388.63.683 1.331.858 2.093a6.91 6.91 0 01.145 2.229l-3.37-.97-.002-.013a.586.586 0 01-.23-1.008l-.002-.007 2.6-2.324zm-6.404 2.515h1.071l.666.83-.239 1.038-.962.461-.964-.463-.24-1.037.668-.83zm3.435 2.844a.585.585 0 01.135.01l.005-.008 3.468.586a6.858 6.858 0 01-2.776 3.481l-1.346-3.246.004-.005a.586.586 0 01.51-.818zm-5.824.014a.587.587 0 01.53.817l.01.012-1.331 3.214a6.886 6.886 0 01-2.767-3.458l3.437-.582.006.007a.595.595 0 01.115-.01zm2.904 1.407a.582.582 0 01.275.059.583.583 0 01.263.25h.013l1.694 3.057c-.22.073-.446.136-.677.189a6.896 6.896 0 01-3.758-.194l1.69-3.05h.003a.588.588 0 01.497-.31z",fill:"#326CE5"}))},xit=Oit;var WO={};$(WO,{icon:()=>kit});var DKt=P(L());var _it=["title","titleId"];function ZV(){return ZV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function jit(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Iit=function(t){var n=t.title,r=t.titleId,o=Sit(t,_it);return a("svg",ZV({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fill:"#0080D5",d:"M2 10v13a9 9 0 019 9h13c0-12.15-9.85-22-22-22"}),a("path",{className:"euiIcon__fillNegative",d:"M14 13.565V32h10c0-7.722-3.981-14.51-10-18.436"}),a("path",{fill:"#00BFB3",d:"M14 0v10.226C21.666 14.468 26.869 22.636 26.869 32H30V16c0-8.837-7.163-16-16-16"}))},kit=Iit;var BO={};$(BO,{icon:()=>Mit});var FKt=P(L());var Pit=["title","titleId"];function eq(){return eq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Cit(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Ait=function(t){var n=t.title,r=t.titleId,o=Eit(t,Pit);return a("svg",eq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fill:"#3EBEB0",d:"M19 32h11V20H19z"}),a("path",{fill:"#FEC514",d:"M4 0H3v20h13v-8C16 5.373 10.627 0 4 0"}),a("path",{className:"euiIcon__fillNegative",d:"M3 20c0 6.627 5.373 12 12 12h1V20H3z"}))},Mit=Ait;var HO={};$(HO,{icon:()=>Dit});var BKt=P(L());var Tit=["title","titleId"];function tq(){return tq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function zit(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Lit=function(t){var n=t.title,r=t.titleId,o=Rit(t,Tit);return a("svg",tq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fill:"#22A7F3",d:"M25.5 9.5c0 6.65-9.5 11.425-9.5 11.425S6.5 16.15 6.5 9.5A9.5 9.5 0 0116 0a9.5 9.5 0 019.5 9.5"}),a("path",{className:"euiIcon__fillNegative",d:"M16 20.925s4.326-2.183 7.141-5.645l-2.505-1.878a7.725 7.725 0 00-9.272 0L8.859 15.28C11.674 18.742 16 20.925 16 20.925"}),a("path",{fill:"#FA744E",d:"M25.53 17.073a21.124 21.124 0 01-2.834 2.916c-2.62 2.235-5.239 3.561-5.349 3.616L16 24.282l-1.348-.677c-.109-.055-2.728-1.381-5.349-3.616a21.182 21.182 0 01-2.834-2.916L0 21.925l11.364 8.523a7.724 7.724 0 009.271 0L32 21.925l-6.47-4.852z"}))},Dit=Lit;var VO={};$(VO,{icon:()=>Hit});var VKt=P(L());var Nit=["title","titleId"];function rq(){return rq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Wit(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Bit=function(t){var n=t.title,r=t.titleId,o=Fit(t,Nit),i=Lr("logo_memcached");return a("svg",rq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("defs",null,a("radialGradient",{id:i("c"),cx:"41.406%",cy:"42.708%",r:"0%",fx:"41.406%",fy:"42.708%"},a("stop",{offset:"0%",stopColor:"#DB7C7C"}),a("stop",{offset:"100%",stopColor:"#C83737"})),a("radialGradient",{id:i("d"),cx:"44.271%",cy:"42.708%",r:"0%",fx:"44.271%",fy:"42.708%"},a("stop",{offset:"0%",stopColor:"#DB7C7C"}),a("stop",{offset:"100%",stopColor:"#C83737"})),a("linearGradient",{id:i("a"),x1:"50%",x2:"50%",y1:"100%",y2:"0%"},a("stop",{offset:"0%",stopColor:"#574C4A"}),a("stop",{offset:"100%",stopColor:"#80716D"})),a("linearGradient",{id:i("b"),x1:"88.778%",x2:"30.149%",y1:"98.342%",y2:"-8.68%"},a("stop",{offset:"0%",stopColor:"#268D83"}),a("stop",{offset:"100%",stopColor:"#2EA19E"}))),a("g",{fill:"none"},a("path",{fill:"url(#".concat(i("a"),")"),d:"M0 21.567V10.352C0 1.294 1.293 0 10.342 0h11.236c9.049 0 10.341 1.294 10.341 10.352v11.215c0 9.059-1.292 10.352-10.341 10.352H10.342C1.292 31.92 0 30.626 0 21.567z"}),a("path",{fill:"url(#".concat(i("b"),")"),d:"M6.889 6.016C5.32 15.96 6.14 25.27 6.14 25.27h4.904c-.466-2.483-2.14-13.824-.748-13.861.746.118 4.156 9.621 4.156 9.621s.751-.093 1.507-.093c.755 0 1.506.093 1.506.093s3.41-9.503 4.157-9.621c1.392.037-.282 11.378-.748 13.86h4.904s.82-9.31-.748-19.253h-4.54c-.865.01-4.153 5.777-4.531 5.777-.378 0-3.666-5.767-4.53-5.777H6.889z"}),a("path",{fill:"url(#".concat(i("c"),")"),d:"M14.993 24.109a1.16 1.16 0 11-2.322 0 1.16 1.16 0 012.322 0z"}),a("path",{fill:"url(#".concat(i("d"),")"),d:"M19.249 24.109a1.16 1.16 0 11-2.322 0 1.16 1.16 0 012.322 0z"}),a("path",{fill:"#000",d:"M24.8 6.345c.707 4.79.873 9.388.86 12.813-.013 3.503-.214 5.78-.214 5.78h-4.128l-.443.332h4.904s.82-9.31-.748-19.254l-.232.329zm-12.996-.121c1.288 1.433 3.516 5.237 3.823 5.237-.817-1.045-2.823-4.378-3.823-5.237zm-1.84 4.852c-1.392.038.282 11.379.749 13.861H6.43l-.29.333h4.904c-.464-2.47-2.123-13.71-.769-13.861-.126-.19-.235-.32-.311-.333zm11.326 0c-.746.119-4.156 9.622-4.156 9.622s-.751-.094-1.507-.094c-.447 0-.832.028-1.092.052l-.082.374s.751-.093 1.507-.093c.755 0 1.506.093 1.506.093s3.385-9.44 4.146-9.621c-.082-.208-.183-.33-.322-.333z",opacity:.1}),a("path",{fill:"#FFF",d:"M6.889 6.016C5.32 15.96 6.14 25.27 6.14 25.27l.289-.325c-.148-2.197-.543-10.14.791-18.597h4.541c.096.002.225.08.374.208-.297-.33-.544-.538-.706-.54H6.889zm13.601 0c-.864.01-4.152 5.777-4.53 5.777.154.197.279.333.332.333.378 0 3.666-5.767 4.53-5.777h4.008l.2-.333h-4.54zm-9.881 5.725c1.103 1.657 3.844 9.29 3.844 9.29l.08-.373c-.676-1.856-3.256-8.814-3.903-8.917h-.021zm11.346 0c.74 1.887-.66 11.295-1.08 13.529l.444-.348c.568-3.331 1.936-13.146.636-13.18z",opacity:.3})))},Hit=Bit;var qO={};$(qO,{icon:()=>Jit});var $Kt=P(L());var Vit=["title","titleId"];function nq(){return nq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Uit(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var $it=function(t){var n=t.title,r=t.titleId,o=qit(t,Vit);return a("svg",nq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"none",fillRule:"evenodd"},a("path",{fill:"#F04E98",d:"M2 32h28V20l-6.465-6.465a5 5 0 00-7.07 0L2 28v4z"}),a("path",{className:"euiIcon__fillNegative",d:"M16.465 13.535l-3.536 3.536a9.965 9.965 0 007.07 2.93 9.965 9.965 0 007.072-2.93l-3.536-3.536a5 5 0 00-7.07 0"}),a("path",{fill:"#FEC514",d:"M14.343 11.414A7.951 7.951 0 0120 9.071c2.137 0 4.146.832 5.657 2.343l3.207 3.207A9.955 9.955 0 0030 10.001c0-5.524-4.477-10-10-10-5.522 0-10 4.476-10 10 0 1.667.414 3.237 1.137 4.62l3.206-3.207z"})))},Jit=$it;var UO={};$(UO,{icon:()=>Qit});var GKt=P(L());var Git=["title","titleId"];function oq(){return oq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Kit(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Yit=function(t){var n=t.title,r=t.titleId,o=Xit(t,Git);return a("svg",oq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"none"},a("path",{fill:"#FFF",d:"M16.844 31.847l-.847-.29s.104-4.315-1.445-4.625c-1.032-1.198.165-50.8 3.882-.165 0 0-1.28.64-1.507 1.735-.248 1.074-.083 3.345-.083 3.345z"}),a("path",{fill:"#A6A385",d:"M16.844 31.847l-.847-.29s.104-4.315-1.445-4.625c-1.032-1.198.165-50.8 3.882-.165 0 0-1.28.64-1.507 1.735-.248 1.074-.083 3.345-.083 3.345z"}),a("path",{fill:"#FFF",d:"M17.299 27.676s7.413-4.874 5.678-15.013c-1.672-7.372-5.616-9.788-6.05-10.718-.475-.66-.93-1.817-.93-1.817l.31 20.506c0 .02-.64 6.278.992 7.042"}),a("path",{fill:"#499D4A",d:"M17.299 27.676s7.413-4.874 5.678-15.013c-1.672-7.372-5.616-9.788-6.05-10.718-.475-.66-.93-1.817-.93-1.817l.31 20.506c0 .02-.64 6.278.992 7.042"}),a("path",{fill:"#FFF",d:"M15.564 27.944s-6.96-4.75-6.546-13.113c.392-8.363 5.307-12.473 6.257-13.216.62-.66.64-.909.681-1.57.434.93.351 13.898.413 15.426.186 5.886-.33 11.358-.805 12.473z"}),a("path",{fill:"#58AA50",d:"M15.564 27.944s-6.96-4.75-6.546-13.113c.392-8.363 5.307-12.473 6.257-13.216.62-.66.64-.909.681-1.57.434.93.351 13.898.413 15.426.186 5.886-.33 11.358-.805 12.473z"})))},Qit=Yit;var $O={};$($O,{icon:()=>nat});var KKt=P(L());var Zit=["title","titleId"];function iq(){return iq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function tat(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var rat=function(t){var n=t.title,r=t.titleId,o=eat(t,Zit);return a("svg",iq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"#00546B"},a("path",{d:"M29.456 24.276c-1.74-.043-3.088.131-4.219.61-.326.13-.848.13-.892.543.174.174.196.457.348.696.261.435.718 1.022 1.131 1.327.457.348.914.696 1.392 1 .848.522 1.805.827 2.631 1.349.48.304.957.695 1.436 1.022.24.173.391.456.696.565v-.065c-.153-.196-.196-.479-.348-.696-.218-.218-.435-.413-.653-.63a10.316 10.316 0 00-2.261-2.197c-.696-.479-2.219-1.131-2.501-1.936l-.044-.043c.479-.044 1.044-.218 1.5-.348.74-.196 1.414-.153 2.175-.348.348-.087.696-.196 1.044-.305v-.195c-.391-.392-.674-.914-1.087-1.284-1.11-.957-2.327-1.892-3.588-2.674-.675-.435-1.545-.718-2.262-1.088-.261-.13-.696-.196-.848-.413-.392-.479-.61-1.11-.892-1.675a54.922 54.922 0 01-1.783-3.784c-.392-.848-.63-1.696-1.11-2.479-2.24-3.697-4.675-5.937-8.416-8.134-.804-.456-1.761-.652-2.783-.891-.544-.022-1.088-.065-1.631-.087-.348-.152-.696-.566-1-.761-1.24-.783-4.437-2.48-5.35-.24-.588 1.414.87 2.806 1.37 3.524.37.5.848 1.065 1.109 1.63.152.37.195.762.347 1.153.348.957.675 2.023 1.131 2.914.24.457.5.936.805 1.349.174.239.478.348.544.74-.305.434-.327 1.087-.5 1.63-.783 2.458-.479 5.502.63 7.307.348.544 1.175 1.74 2.284 1.284.978-.392.76-1.632 1.043-2.719.066-.261.022-.435.153-.609v.044c.304.609.609 1.196.891 1.805.675 1.065 1.849 2.174 2.828 2.914.522.391.935 1.065 1.587 1.305v-.066h-.043c-.13-.195-.327-.282-.5-.435-.392-.39-.827-.87-1.131-1.304-.914-1.218-1.719-2.567-2.436-3.958-.348-.675-.653-1.414-.935-2.088-.13-.261-.13-.653-.348-.783-.327.478-.805.892-1.044 1.479-.413.935-.457 2.088-.61 3.284-.086.021-.043 0-.086.043-.696-.174-.935-.891-1.196-1.5-.653-1.545-.761-4.024-.196-5.807.152-.457.805-1.892.544-2.327-.13-.413-.566-.652-.805-.979a8.764 8.764 0 01-.783-1.392c-.522-1.217-.783-2.566-1.348-3.784-.261-.565-.718-1.152-1.087-1.674-.414-.587-.87-1-1.197-1.697-.108-.239-.26-.63-.087-.891.044-.174.13-.24.305-.283.283-.24 1.087.065 1.37.196.805.326 1.479.63 2.153 1.087.304.218.63.631 1.022.74h.457c.696.152 1.479.043 2.131.239 1.153.37 2.196.913 3.132 1.5a19.294 19.294 0 016.785 7.438c.261.5.37.957.609 1.479.457 1.066 1.022 2.153 1.479 3.197.456 1.022.891 2.066 1.544 2.914.326.457 1.63.696 2.218.935.435.196 1.11.37 1.5.61.74.456 1.48.978 2.175 1.478.348.26 1.436.805 1.501 1.24z"}),a("path",{d:"M7.273 5.378c-.37 0-.63.043-.891.109v.043h.043c.174.348.479.587.696.892.174.348.326.696.5 1.044l.044-.044c.304-.217.457-.565.457-1.087-.131-.152-.153-.305-.261-.457-.13-.218-.414-.326-.588-.5z"})))},nat=rat;var JO={};$(JO,{icon:()=>sat});var QKt=P(L());var oat=["title","titleId"];function aq(){return aq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function aat(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var lat=function(t){var n=t.title,r=t.titleId,o=iat(t,oat);return a("svg",aq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"none",fillRule:"evenodd"},a("path",{fill:"#119639",d:"M16 0l13.856 8v16L16 32 2.144 24V8z"}),a("path",{fill:"#FFF",fillRule:"nonzero",d:"M11.17 13.512v8.376a1.607 1.607 0 11-3.215 0V9.632c0-1.432 1.731-2.149 2.744-1.136l9.51 9.512V9.632a1.607 1.607 0 013.215 0v12.256c0 1.432-1.731 2.149-2.744 1.136l-9.51-9.512z"})))},sat=lat;var GO={};$(GO,{icon:()=>dat});var eYt=P(L());var uat=["title","titleId"];function lq(){return lq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function pat(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var fat=function(t){var n=t.title,r=t.titleId,o=cat(t,uat);return a("svg",lq({width:32,height:32,viewBox:"0 0 32 32",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M10 32H7.238C3.793 32 1 28.865 1 24.998V15h9v17z",fill:"#F04E98"}),a("path",{className:"euiIcon__fillNegative",d:"M10 32h9V8h-9z"}),a("path",{d:"M31 32h-9V0l1.973.024C27.866.072 31 3.731 31 8.228V32z",fill:"#07C"}))},dat=fat;var XO={};$(XO,{icon:()=>yat});var rYt=P(L());var mat=["title","titleId"];function sq(){return sq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function gat(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var vat=function(t){var n=t.title,r=t.titleId,o=hat(t,mat);return a("svg",sq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"none"},a("path",{fill:"#A596FF",d:"M31.907.032v7.969l-7.952 7.951V7.967L31.907.032"}),a("path",{fill:"#333",d:"M16.003.032v7.969l7.952 7.951V7.967L16.003.032"}),a("path",{fill:"#A596FF",d:"M31.923 31.855h-7.968l-7.952-7.951h7.985l7.935 7.951"}),a("path",{fill:"#333",d:"M31.923 15.952h-7.968l-7.952 7.952h7.985l7.935-7.952"}),a("path",{fill:"#A596FF",d:"M.1 31.872v-7.968l7.952-7.952v7.985L.1 31.872"}),a("path",{fill:"#333",d:"M16.004 31.872v-7.968l-7.952-7.952v7.985l7.952 7.935"}),a("path",{fill:"#A596FF",d:"M.084.048h7.968L16.004 8H8.019L.084.048"}),a("path",{fill:"#333",d:"M.084 15.952h7.968L16.004 8H8.019L.084 15.952"})))},yat=vat;var KO={};$(KO,{icon:()=>_at});var oYt=P(L());var bat=["title","titleId"];function uq(){return uq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Oat(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var xat=function(t){var n=t.title,r=t.titleId,o=wat(t,bat),i=Lr("logo_php");return a("svg",uq({xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("defs",null,a("path",{id:i("a"),d:"M.028 7.854C.028 3.534 6.688.03 14.902.03s14.874 3.503 14.874 7.824c0 4.322-6.66 7.825-14.874 7.825-8.215 0-14.874-3.503-14.874-7.825"}),a("path",{id:i("d"),d:"M0 17.43h30.987V0H0z"}),a("path",{id:i("f"),d:"M0 17.43h30.987V0H0z"}),a("radialGradient",{id:i("b"),cx:"30.02%",cy:"82.422%",r:"124.814%",fx:"30.02%",fy:"82.422%",gradientTransform:"matrix(.52604 0 0 1 .142 0)"},a("stop",{offset:"0%",stopColor:"#AEB2D5"}),a("stop",{offset:"30%",stopColor:"#AEB2D5"}),a("stop",{offset:"75%",stopColor:"#484C89"}),a("stop",{offset:"100%",stopColor:"#484C89"}))),a("g",{fill:"none",fillRule:"evenodd",transform:"matrix(1 0 0 -1 .026 25.413)"},a("g",{transform:"translate(.592 .86)"},a("mask",{id:i("c"),fill:"#fff"},a("use",{xlinkHref:"#".concat(i("a"))})),a("g",{fill:"url(#".concat(i("b"),")"),fillRule:"nonzero",mask:"url(#".concat(i("c"),")")},a("path",{d:"M.028 7.854C.028 3.534 6.688.03 14.902.03s14.874 3.503 14.874 7.824c0 4.322-6.66 7.825-14.874 7.825-8.215 0-14.874-3.503-14.874-7.825"}))),a("mask",{id:i("e"),fill:"#fff"},a("use",{xlinkHref:"#".concat(i("d"))})),a("g",{mask:"url(#".concat(i("e"),")")},a("path",{fill:"#777BB3",fillRule:"nonzero",d:"M15.494 1.472c7.894 0 14.293 3.243 14.293 7.243s-6.4 7.244-14.293 7.244c-7.894 0-14.293-3.243-14.293-7.244 0-4 6.4-7.243 14.293-7.243"})),a("mask",{id:i("g"),fill:"#fff"},a("use",{xlinkHref:"#".concat(i("f"))})),a("g",{fillRule:"nonzero",mask:"url(#".concat(i("g"),")")},a("path",{fill:"#000",d:"M8.701 7.817c.65 0 1.134.12 1.44.356.304.233.513.638.623 1.202.103.528.064.896-.116 1.095-.183.203-.58.306-1.177.306H8.433l-.575-2.959h.843zM5.31 4.172a.161.161 0 00-.159.193l1.524 7.84c.015.076.082.131.159.131h3.284c1.033 0 1.801-.28 2.284-.833.485-.556.635-1.333.446-2.309a3.686 3.686 0 00-.395-1.098 3.676 3.676 0 00-.727-.91 3.189 3.189 0 00-1.197-.718c-.43-.14-.983-.21-1.643-.21h-1.33l-.38-1.955a.161.161 0 00-.158-.13H5.309z"}),a("path",{fill:"#FFF",d:"M8.566 10.615h.905c.722 0 .972-.158 1.058-.253.141-.157.168-.487.077-.956-.102-.524-.291-.896-.563-1.105-.277-.214-.729-.322-1.341-.322h-.648l.512 2.636zm1.551 1.883H6.833a.323.323 0 01-.317-.261L4.992 4.396a.323.323 0 01.317-.385h1.708c.155 0 .287.11.317.262l.354 1.823h1.197c.677 0 1.247.074 1.694.22.46.149.882.402 1.256.752.31.284.564.604.758.95.193.345.331.731.412 1.146.2 1.027.038 1.85-.482 2.446-.515.59-1.325.888-2.406.888zM7.663 7.656h1.039c.688 0 1.201.13 1.538.39.337.259.565.692.683 1.299.113.583.061.994-.155 1.233-.216.24-.648.36-1.297.36H8.3l-.638-3.282zm2.454 4.52c.989 0 1.71-.26 2.162-.779.453-.518.59-1.242.41-2.172a3.51 3.51 0 00-.378-1.05 3.502 3.502 0 00-.695-.87 3.017 3.017 0 00-1.137-.683c-.417-.135-.948-.203-1.594-.203H7.422l-.405-2.085H5.309l1.524 7.841h3.284z"}),a("path",{fill:"#000",d:"M16.763 6.257a.161.161 0 00-.159.192l.674 3.47c.064.33.049.566-.044.666-.057.061-.228.164-.732.164H15.28l-.847-4.361a.161.161 0 00-.159-.131H12.58a.161.161 0 00-.159.192l1.524 7.841c.015.076.082.13.159.13h1.694a.161.161 0 00.159-.191l-.368-1.893h1.314c1 0 1.68-.176 2.075-.54.403-.37.529-.962.374-1.76l-.71-3.648a.161.161 0 00-.158-.131h-1.721z"}),a("path",{fill:"#FFF",d:"M15.799 14.582h-1.695a.323.323 0 01-.317-.261L12.263 6.48a.323.323 0 01.317-.385h1.695c.154 0 .287.11.317.262l.822 4.23h1.088c.504 0 .61-.107.614-.112.03-.033.07-.185.004-.526l-.674-3.47a.323.323 0 01.317-.384h1.721c.155 0 .288.11.317.262l.71 3.648c.166.857.023 1.5-.424 1.91-.426.392-1.14.582-2.184.582h-1.118l.33 1.7a.323.323 0 01-.316.385m0-.323l-.406-2.084h1.51c.95 0 1.605-.166 1.966-.497.36-.332.468-.869.324-1.611l-.709-3.649h-1.721l.674 3.47c.077.394.048.663-.085.807-.133.143-.416.215-.85.215h-1.354l-.873-4.492H12.58l1.524 7.841h1.695"}),a("path",{fill:"#000",d:"M22.033 7.817c.65 0 1.134.12 1.44.356.304.233.513.638.623 1.202.103.528.064.896-.116 1.095-.183.203-.58.306-1.177.306h-1.038l-.575-2.959h.843zm-3.392-3.645a.161.161 0 00-.159.193l1.524 7.84c.015.076.082.131.159.131h3.284c1.033 0 1.801-.28 2.284-.833.485-.556.635-1.333.446-2.309a3.689 3.689 0 00-.395-1.098 3.676 3.676 0 00-.727-.91 3.189 3.189 0 00-1.197-.718c-.43-.14-.983-.21-1.643-.21h-1.33l-.38-1.955a.161.161 0 00-.158-.13H18.64z"}),a("path",{fill:"#FFF",d:"M21.898 10.615h.905c.722 0 .972-.158 1.058-.253.141-.157.168-.487.077-.956-.102-.524-.292-.896-.563-1.105-.277-.214-.729-.322-1.341-.322h-.648l.512 2.636zm1.551 1.883h-3.284a.323.323 0 01-.317-.261l-1.524-7.841a.323.323 0 01.317-.385h1.708c.155 0 .287.11.317.262l.354 1.823h1.197c.677 0 1.247.074 1.694.22.46.149.882.402 1.256.752.31.284.564.604.758.95.193.345.331.731.412 1.146.2 1.027.038 1.85-.482 2.446-.515.59-1.325.888-2.406.888zm-2.454-4.842h1.039c.688 0 1.201.13 1.538.39.337.259.565.692.683 1.299.113.583.061.994-.155 1.233-.216.24-.648.36-1.297.36h-1.17l-.638-3.282zm2.454 4.52c.989 0 1.71-.26 2.162-.779.454-.518.59-1.242.41-2.172a3.51 3.51 0 00-.378-1.05 3.502 3.502 0 00-.695-.87 3.017 3.017 0 00-1.137-.683c-.417-.135-.948-.203-1.594-.203h-1.463l-.405-2.085h-1.708l1.524 7.841h3.284z"}))))},_at=xat;var YO={};$(YO,{icon:()=>Pat});var lYt=P(L());var Sat=["title","titleId"];function cq(){return cq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Iat(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var kat=function(t){var n=t.title,r=t.titleId,o=jat(t,Sat);return a("svg",cq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"none"},a("path",{fill:"#000",d:"M31.876 19.162c-.192-.564-.695-.956-1.345-1.05-.306-.045-.657-.026-1.072.057-.724.145-1.261.2-1.654.211 1.48-2.422 2.683-5.185 3.376-7.785 1.12-4.205.521-6.12-.178-6.987-1.85-2.293-4.551-3.525-7.809-3.563a14.239 14.239 0 00-4.06.551 15.573 15.573 0 00-2.373-.21c-1.567-.024-2.952.307-4.135.988a19.334 19.334 0 00-2.92-.711C6.85.208 4.549.563 2.866 1.716.828 3.112-.117 5.537.058 8.926.113 10 .734 13.273 1.71 16.376c.561 1.784 1.16 3.266 1.78 4.404.878 1.614 1.818 2.564 2.873 2.906.591.19 1.666.325 2.796-.588.143.168.334.335.588.49.322.198.716.359 1.109.454 1.418.344 2.745.258 3.878-.224.007.195.013.382.017.543.008.262.015.518.025.758.067 1.62.181 2.881.518 3.763l.07.201c.168.5.449 1.335 1.164 1.99.74.677 1.637.885 2.457.885.412 0 .804-.052 1.149-.124 1.227-.255 2.621-.643 3.63-2.036.953-1.316 1.417-3.299 1.5-6.423l.031-.253.02-.165.225.019.058.004c1.25.055 2.779-.202 3.718-.625.741-.334 3.119-1.55 2.559-3.194"}),a("path",{fill:"#336791",d:"M29.738 19.481c-3.717.744-3.973-.476-3.973-.476 3.925-5.648 5.566-12.817 4.15-14.571C26.052-.352 19.365 1.91 19.254 1.97l-.036.006a13.657 13.657 0 00-2.48-.25c-1.682-.027-2.958.427-3.927 1.14 0 0-11.928-4.766-11.374 5.992.118 2.289 3.383 17.318 7.278 12.779a70.443 70.443 0 012.798-3.064c.683.44 1.501.665 2.358.584l.067-.055c-.02.206-.011.408.027.647-1.004 1.087-.709 1.277-2.714 1.678-2.03.405-.837 1.127-.06 1.316.944.229 3.127.553 4.602-1.45l-.058.23c.393.304.669 1.985.623 3.508-.047 1.524-.078 2.57.232 3.387.31.817.619 2.655 3.255 2.107 2.203-.458 3.345-1.644 3.503-3.623.113-1.407.368-1.199.384-2.457l.205-.595c.236-1.907.037-2.522 1.394-2.236l.33.028c1 .044 2.307-.156 3.074-.502 1.652-.743 2.632-1.985 1.003-1.659"}),a("path",{fill:"#FFF",d:"M13.51 9.882c-.335-.045-.639-.004-.792.11a.28.28 0 00-.12.187c-.02.133.077.282.136.358.169.216.414.365.658.398.035.004.07.007.105.007.405 0 .774-.307.807-.533.04-.283-.383-.472-.795-.527m11.099.009c-.032-.222-.44-.285-.826-.233-.386.052-.76.22-.73.443.026.173.348.468.73.468a.718.718 0 00.097-.006.947.947 0 00.53-.281c.135-.138.213-.291.199-.391"}),a("path",{fill:"#FFF",d:"M30.975 19.397c-.142-.416-.598-.55-1.356-.398-2.25.45-3.056.139-3.321-.05 1.75-2.584 3.189-5.708 3.965-8.623.368-1.38.57-2.663.587-3.708.019-1.147-.183-1.99-.598-2.505-1.675-2.075-4.134-3.189-7.11-3.22-2.047-.022-3.775.486-4.11.629a10.549 10.549 0 00-2.313-.288c-1.536-.024-2.864.332-3.963 1.06a18.131 18.131 0 00-3.22-.82c-2.61-.407-4.683-.098-6.163.918C1.608 3.605.793 5.773.951 8.836c.053 1.03.658 4.2 1.614 7.236 1.258 3.996 2.625 6.257 4.063 6.723.169.054.363.092.577.092.525 0 1.168-.23 1.838-1.01a64.894 64.894 0 012.532-2.778 4.18 4.18 0 001.822.475l.005.048c-.11.127-.217.255-.321.385-.44.542-.532.655-1.95.938-.403.08-1.473.294-1.489 1.022-.017.795 1.266 1.13 1.412 1.165.509.123 1 .184 1.467.184 1.138 0 2.14-.363 2.94-1.064-.025 2.834.097 5.628.448 6.479.288.696.99 2.4 3.208 2.399a5.3 5.3 0 001.078-.119c2.315-.48 3.32-1.473 3.71-3.66.208-1.17.565-3.961.733-5.459.354.107.81.156 1.304.156 1.029 0 2.216-.212 2.961-.547.837-.377 2.346-1.3 2.072-2.104zM25.462 9.278c-.008.442-.07.844-.137 1.262-.072.451-.145.917-.164 1.482-.019.55.052 1.123.12 1.676.14 1.118.282 2.268-.269 3.403a4.37 4.37 0 01-.243-.485c-.069-.161-.217-.42-.423-.777-.8-1.39-2.673-4.648-1.714-5.977.286-.396 1.01-.803 2.83-.584zm-2.206-7.49c2.667.058 4.777 1.025 6.27 2.876 1.146 1.42-.116 7.879-3.767 13.45l-.111-.135-.046-.056c.943-1.51.759-3.006.595-4.331-.068-.544-.132-1.058-.115-1.541.016-.511.086-.95.154-1.375.082-.522.167-1.063.144-1.701a.684.684 0 00.015-.24c-.06-.611-.78-2.441-2.247-4.098a10.094 10.094 0 00-3.572-2.604 12.407 12.407 0 012.68-.244zM8.334 21.307c-.737.86-1.246.695-1.414.641-1.091-.353-2.357-2.59-3.474-6.136-.966-3.069-1.53-6.155-1.575-7.02-.141-2.737.543-4.644 2.033-5.669 2.426-1.668 6.414-.67 8.016-.163-.023.022-.047.042-.07.065-2.63 2.575-2.567 6.974-2.56 7.243 0 .104.008.251.02.453.046.74.13 2.117-.095 3.677-.209 1.45.252 2.868 1.264 3.892.104.105.213.205.327.3-.45.467-1.43 1.502-2.472 2.717zm2.81-3.635c-.816-.826-1.186-1.974-1.017-3.15.238-1.648.15-3.083.103-3.854l-.016-.277c.384-.33 2.165-1.255 3.434-.973.58.129.932.511 1.08 1.17.759 3.406.1 4.825-.43 5.966-.109.235-.212.458-.3.687l-.068.178c-.173.45-.334.867-.434 1.264a3.325 3.325 0 01-2.352-1.011zm.133 4.594a2.07 2.07 0 01-.614-.256c.111-.051.31-.12.654-.19 1.668-.332 1.925-.567 2.487-1.26.13-.158.275-.338.478-.557.301-.328.44-.272.69-.172.202.082.4.328.48.599.037.128.08.37-.06.56-1.174 1.595-2.886 1.574-4.115 1.276zm8.725 7.873c-2.04.424-2.761-.586-3.237-1.74-.308-.744-.459-4.102-.351-7.81a.434.434 0 00-.02-.143 1.823 1.823 0 00-.057-.262c-.16-.54-.548-.99-1.013-1.178-.185-.074-.525-.21-.933-.11.087-.347.238-.74.402-1.165l.068-.178c.078-.202.175-.41.277-.632.554-1.194 1.313-2.829.49-6.522-.309-1.384-1.34-2.06-2.901-1.903-.936.094-1.793.46-2.22.67a7.255 7.255 0 00-.255.132c.12-1.394.57-4 2.255-5.647 1.062-1.038 2.475-1.55 4.196-1.523 3.393.054 5.569 1.742 6.796 3.15 1.058 1.211 1.631 2.433 1.86 3.091-1.72-.17-2.889.16-3.482.982-1.29 1.787.706 5.257 1.665 6.924.175.306.327.57.375.682.312.734.716 1.224 1.012 1.582.09.11.178.215.245.308-.521.146-1.456.482-1.371 2.164-.069.843-.558 4.793-.806 6.189-.328 1.843-1.028 2.53-2.995 2.939zm8.513-9.447c-.532.24-1.424.42-2.27.458-.935.043-1.411-.101-1.523-.19-.053-1.048.35-1.157.775-1.273a3.35 3.35 0 00.195-.058c.04.031.082.062.13.092.75.481 2.091.533 3.984.154l.02-.004c-.255.232-.692.542-1.31.821z"})))},Pat=kat;var QO={};$(QO,{icon:()=>Tat});var uYt=P(L());var Eat=["title","titleId"];function pq(){return pq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Aat(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Mat=function(t){var n=t.title,r=t.titleId,o=Cat(t,Eat);return a("svg",pq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fill:"#E6522C",d:"M15.907.187C7.122.187 0 7.308 0 16.093S7.122 32 15.907 32c8.784 0 15.906-7.121 15.906-15.906S24.69.187 15.907.187zm0 29.77c-2.5 0-4.526-1.67-4.526-3.729h9.051c0 2.06-2.026 3.73-4.525 3.73zm7.475-4.963H8.43v-2.711h14.95v2.71zm-.054-4.107H8.473c-.05-.057-.1-.113-.147-.17-1.53-1.859-1.891-2.829-2.241-3.818-.006-.032 1.855.38 3.176.678 0 0 .679.157 1.672.338-.953-1.118-1.52-2.539-1.52-3.991 0-3.189 2.446-5.975 1.564-8.227.858.07 1.777 1.812 1.839 4.537.913-1.262 1.295-3.566 1.295-4.978 0-1.463.963-3.161 1.927-3.22-.86 1.417.223 2.63 1.184 5.642.361 1.132.315 3.035.594 4.243.092-2.508.523-6.167 2.114-7.43-.702 1.591.104 3.581.655 4.538.889 1.544 1.428 2.714 1.428 4.926 0 1.483-.548 2.88-1.472 3.971 1.05-.197 1.776-.374 1.776-.374l3.411-.666s-.495 2.038-2.4 4.001z"}))},Tat=Mat;var ZO={};$(ZO,{icon:()=>Nat});var pYt=P(L());var Rat=["title","titleId"];function fq(){return fq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Lat(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Dat=function(t){var n=t.title,r=t.titleId,o=zat(t,Rat);return a("svg",fq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fill:"#F60",d:"M30.083 13.197h-9.878c-.79-.088-1.391-.74-1.391-1.508V1.97c0-.83-.718-1.495-1.595-1.495h-3.456c-.885 0-1.595.672-1.595 1.495v9.82c-.043.74-.696 1.338-1.478 1.406H8.102c-.76-.088-1.348-.686-1.398-1.406V1.97c0-.83-.718-1.495-1.595-1.495H1.652C.768.476.058 1.148.058 1.97v28.358c0 .83.717 1.495 1.594 1.495h28.439c.884 0 1.594-.673 1.594-1.495V14.692c-.007-.829-.718-1.495-1.602-1.495zm-4.55 10.724c0 .829-.718 1.495-1.595 1.495H20.48c-.884 0-1.595-.673-1.595-1.495v-3.058c0-.83.718-1.495 1.595-1.495h3.457c.884 0 1.594.672 1.594 1.495v3.058z"}))},Nat=Dat;var e7={};$(e7,{icon:()=>Vat});var dYt=P(L());var Fat=["title","titleId"];function dq(){return dq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Bat(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Hat=function(t){var n=t.title,r=t.titleId,o=Wat(t,Fat);return a("svg",dq({width:32,height:32,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{transform:"translate(0 3)",fill:"none"},a("path",{d:"M30.594 20.791c-1.689.875-10.438 4.451-12.3 5.416-1.863.966-2.898.956-4.37.257-1.471-.699-10.782-4.437-12.46-5.234-.838-.399-1.278-.735-1.278-1.052v-3.18s12.121-2.623 14.078-3.32c1.957-.699 2.636-.724 4.301-.118 1.666.607 11.623 2.393 13.27 2.992l-.001 3.135c0 .314-.38.659-1.24 1.104z",fill:"#A41E11"}),a("path",{d:"M30.594 17.61c-1.689.875-10.438 4.451-12.3 5.417-1.863.965-2.898.956-4.37.256-1.471-.698-10.782-4.438-12.46-5.234-1.676-.797-1.712-1.345-.064-1.987 1.647-.641 10.907-4.252 12.864-4.95 1.957-.698 2.636-.723 4.301-.117 1.666.607 10.363 4.048 12.009 4.647 1.646.6 1.71 1.093.02 1.968z",fill:"#D82C20"}),a("path",{d:"M30.594 15.606c-1.689.875-10.438 4.45-12.3 5.416-1.863.965-2.898.956-4.37.257-1.471-.7-10.782-4.438-12.46-5.235-.838-.398-1.278-.734-1.278-1.051v-3.18S12.307 9.19 14.264 8.492c1.957-.698 2.636-.723 4.301-.117 1.666.606 11.623 2.392 13.27 2.991l-.001 3.135c0 .315-.38.66-1.24 1.105z",fill:"#A41E11"}),a("path",{d:"M30.594 12.425c-1.689.875-10.438 4.45-12.3 5.416-1.863.966-2.898.956-4.37.257-1.471-.699-10.782-4.438-12.46-5.235-1.676-.796-1.712-1.345-.064-1.986 1.647-.641 10.907-4.253 12.864-4.95 1.957-.698 2.636-.724 4.301-.117 1.666.606 10.363 4.047 12.009 4.646 1.646.6 1.71 1.094.02 1.969z",fill:"#D82C20"}),a("path",{d:"M30.594 10.228c-1.689.875-10.438 4.451-12.3 5.417-1.863.965-2.898.955-4.37.256-1.471-.699-10.782-4.438-12.46-5.234C.627 10.268.187 9.932.187 9.615v-3.18s12.121-2.623 14.078-3.32c1.957-.699 2.636-.724 4.301-.117 1.666.606 11.623 2.391 13.27 2.99l-.001 3.136c0 .314-.38.659-1.24 1.104z",fill:"#A41E11"}),a("path",{d:"M30.594 7.047c-1.689.875-10.438 4.451-12.3 5.417-1.863.965-2.898.955-4.37.256-1.471-.699-10.782-4.437-12.46-5.234C-.211 6.689-.247 6.14 1.4 5.499S12.307 1.247 14.264.55c1.957-.7 2.636-.724 4.301-.118 1.666.607 10.363 4.048 12.009 4.647 1.646.6 1.71 1.093.02 1.968z",fill:"#D82C20"}),a("path",{fill:"#FFF",d:"M20.157 3.985l-2.742.283-.614 1.468-.992-1.638-3.166-.283 2.362-.847-.708-1.3 2.212.86 2.085-.68-.563 1.345zm-3.52 7.123l-5.118-2.11 7.334-1.119z"}),a("ellipse",{fill:"#FFF",cx:9.541,cy:6.311,rx:3.92,ry:1.51}),a("path",{fill:"#7A0C00",d:"M23.398 4.386l4.34 1.705-4.336 1.703z"}),a("path",{fill:"#AD2115",d:"M18.596 6.274l4.802-1.888.004 3.408-.471.183z"})))},Vat=Hat;var t7={};$(t7,{icon:()=>Gat});var hYt=P(L());var qat=["title","titleId"];function mq(){return mq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function $at(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Jat=function(t){var n=t.title,r=t.titleId,o=Uat(t,qat);return a("svg",mq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M9 7.008V0h20v16.744c0 3.913-6.378 6.477-9.015 7.256V7.008H9z",fill:"#FA744E"}),a("path",{d:"M3 20.073V10h14v22C7.667 27.98 3 24.004 3 20.073z",fill:"#1DBAB0"}),a("path",{d:"M9 10h8v14c-2.983-1.14-8-3.756-8-7.043V10z",className:"euiIcon__fillNegative"}))},Gat=Jat;var r7={};$(r7,{icon:()=>Zat});var vYt=P(L());var Xat=["title","titleId"];function hq(){return hq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Yat(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Qat=function(t){var n=t.title,r=t.titleId,o=Kat(t,Xat);return a("svg",hq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"none",fillRule:"evenodd"},a("path",{fill:"#FA744E",d:"M27.05 10h-7.34l-11 22s15.696-4.96 21.855-16.076C32.037 13.266 30.088 10 27.05 10"}),a("path",{fill:"#00BFB3",d:"M21.355 0H7.533L.427 14.211C-.903 16.871 1.032 20 4.004 20h7.351l10-20z"}),a("path",{className:"euiIcon__fillNegative",d:"M2.533 10L.428 14.211C-.903 16.871 1.032 20 4.005 20h7.35l5-10H2.533z"})))},Zat=Qat;var n7={};$(n7,{icon:()=>olt});var bYt=P(L());var elt=["title","titleId"];function gq(){return gq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function rlt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var nlt=function(t){var n=t.title,r=t.titleId,o=tlt(t,elt);return a("svg",gq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"none"},a("path",{fill:"#FFAE00",d:"M16 32L0 11.454l6.931-10.38L16 0l9.069 1.074L32 11.454z"}),a("path",{fill:"#EC6C00",d:"M16 32L0 11.454h32z"}),a("path",{fill:"#FFAE00",d:"M16 32L6.477 11.454h19.045z"}),a("path",{fill:"#FFEFB4",d:"M16 0L6.477 11.454h19.045z"}),a("path",{fill:"#FFAE00",d:"M6.932 1.074L3.369 6.3.001 11.454h6.542zM25.069 1.074L28.632 6.3 32 11.454h-6.542z"}),a("path",{fill:"#FED305",d:"M6.931 1.074l-.453 10.38L16 0zM25.069 1.074l.453 10.38L16 0z"})))},olt=nlt;var o7={};$(o7,{icon:()=>ult});var OYt=P(L());var ilt=["title","titleId"];function vq(){return vq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function llt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var slt=function(t){var n=t.title,r=t.titleId,o=alt(t,ilt);return a("svg",vq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"none"},a("path",{fill:"#E01E5A",d:"M6.813 20.18a3.337 3.337 0 01-3.33 3.33 3.337 3.337 0 01-3.328-3.33 3.337 3.337 0 013.329-3.329h3.329v3.33zm1.677 0a3.337 3.337 0 013.33-3.329 3.337 3.337 0 013.328 3.33v8.335a3.337 3.337 0 01-3.329 3.329 3.337 3.337 0 01-3.329-3.33V20.18z"}),a("path",{fill:"#36C5F0",d:"M11.82 6.813a3.337 3.337 0 01-3.33-3.33A3.337 3.337 0 0111.82.156a3.337 3.337 0 013.328 3.329v3.329H11.82zm0 1.677a3.337 3.337 0 013.328 3.33 3.337 3.337 0 01-3.329 3.328H3.484a3.337 3.337 0 01-3.33-3.329 3.337 3.337 0 013.33-3.329h8.335z"}),a("path",{fill:"#2EB67D",d:"M25.187 11.82a3.337 3.337 0 013.329-3.33 3.337 3.337 0 013.329 3.33 3.337 3.337 0 01-3.33 3.328h-3.328V11.82zm-1.678 0a3.337 3.337 0 01-3.329 3.328 3.337 3.337 0 01-3.329-3.329V3.484a3.337 3.337 0 013.33-3.33 3.337 3.337 0 013.328 3.33v8.335z"}),a("path",{fill:"#ECB22E",d:"M20.18 25.187a3.337 3.337 0 013.33 3.329 3.337 3.337 0 01-3.33 3.329 3.337 3.337 0 01-3.329-3.33v-3.328h3.33zm0-1.678a3.337 3.337 0 01-3.329-3.329 3.337 3.337 0 013.33-3.329h8.335a3.337 3.337 0 013.329 3.33 3.337 3.337 0 01-3.33 3.328H20.18z"})))},ult=slt;var i7={};$(i7,{icon:()=>mlt});var _Yt=P(L());var clt=["title","titleId"];function yq(){return yq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function flt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var dlt=function(t){var n=t.title,r=t.titleId,o=plt(t,clt);return a("svg",yq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fill:"#3EBEB0",d:"M19 15c0 7.062-4.888 12.969-11.46 14.563A15.914 15.914 0 0016 32c8.836 0 16-7.163 16-16v-3l-6.5-6-6.5 6v2z"}),a("path",{fill:"#07C",d:"M6.833 26.646a11.954 11.954 0 008.544-7.834A12.43 12.43 0 0113 11.5V.292C5.6 1.696 0 8.19 0 16.002c0 4.358 1.75 8.306 4.577 11.192l2.256-.547z"}),a("path",{className:"euiIcon__fillNegative",d:"M30.362 23.02c-1.494.63-3.137.98-4.861.98a12.443 12.443 0 01-7.852-2.78 15.042 15.042 0 01-10.11 8.343A15.91 15.91 0 0016.002 32c6.314 0 11.758-3.669 14.36-8.98"}))},mlt=dlt;var a7={};$(a7,{icon:()=>blt});var jYt=P(L());var hlt=["title","titleId"];function bq(){return bq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function vlt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ylt=function(t){var n=t.title,r=t.titleId,o=glt(t,hlt);return a("svg",bq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"none"},a("path",{fill:"#C73A63",d:"M14.943 13.563c-1.327 2.23-2.597 4.388-3.894 6.531-.334.55-.498.998-.232 1.698.734 1.931-.302 3.811-2.25 4.321-1.837.482-3.627-.726-3.992-2.692-.323-1.741 1.028-3.448 2.948-3.72.16-.023.325-.026.595-.046l2.92-4.896C9.2 12.933 8.108 10.8 8.35 8.154c.171-1.87.907-3.486 2.25-4.81a7.639 7.639 0 019.531-1c2.91 1.87 4.244 5.512 3.107 8.629l-2.668-.724c.357-1.733.093-3.29-1.076-4.623-.772-.88-1.763-1.341-2.89-1.511-2.258-.341-4.476 1.11-5.134 3.327-.748 2.516.383 4.572 3.473 6.121z"}),a("path",{fill:"#4B4B4B",d:"M18.73 10.926l2.823 4.98c4.753-1.47 8.336 1.16 9.622 3.977 1.552 3.402.491 7.432-2.558 9.531-3.13 2.155-7.089 1.787-9.862-.981l2.176-1.821c2.739 1.774 5.135 1.69 6.913-.41a4.766 4.766 0 00-.077-6.219c-1.8-2.025-4.213-2.086-7.13-.143-1.209-2.146-2.44-4.275-3.61-6.436-.396-.729-.832-1.152-1.722-1.306-1.487-.257-2.446-1.534-2.504-2.964a3.258 3.258 0 012.08-3.192 3.243 3.243 0 013.671 1.002c.71.896.935 1.905.562 3.01-.104.309-.238.607-.384.972z"}),a("path",{fill:"#4A4A4A",d:"M20.963 24.401h-5.72c-.55 2.256-1.734 4.077-3.775 5.235-1.586.9-3.296 1.205-5.116.911C3 30.007.26 26.99.019 23.593c-.273-3.848 2.372-7.268 5.898-8.036l.732 2.658c-3.234 1.65-4.353 3.73-3.448 6.33.797 2.287 3.06 3.541 5.518 3.056 2.51-.495 3.776-2.581 3.621-5.929 2.38 0 4.761-.024 7.14.012.93.015 1.648-.081 2.348-.9 1.152-1.349 3.273-1.227 4.515.046 1.268 1.301 1.207 3.395-.135 4.641a3.236 3.236 0 01-4.553-.157c-.249-.267-.445-.585-.692-.913z"})))},blt=ylt;var l7={};$(l7,{icon:()=>Slt});var kYt=P(L());var wlt=["title","titleId"];function wq(){return wq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function xlt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var _lt=function(t){var n=t.title,r=t.titleId,o=Olt(t,wlt);return a("svg",wq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fill:"#00ADEF",d:"M0 4.51l12.977-1.768.006 12.518-12.971.074L0 4.51zm12.97 12.192l.011 12.529-12.97-1.784-.002-10.829 12.962.084zm1.574-14.19L31.751 0v15.1l-17.207.137V2.511zm17.21 14.308l-.003 15.033-17.207-2.429-.024-12.632 17.235.028z"}))},Slt=_lt;var s7={};$(s7,{icon:()=>Elt});var EYt=P(L());var jlt=["title","titleId"];function Oq(){return Oq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function klt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Plt=function(t){var n=t.title,r=t.titleId,o=Ilt(t,jlt);return a("svg",Oq({width:32,height:32,viewBox:"0 0 32 32",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M17.557 5.05c.17-.202.457-.512.86-.93C19.483 3.017 21.828 1 23.801 1H30v30h-6.2c-1.972 0-3.995-1.449-5.383-3.106l-.764-1.052 2.75-3.477c3.462-4.376 3.463-10.332.001-14.707L17.557 5.05z",fill:"#FEC514"}),a("path",{d:"M2 31V1h5.81c1.71 0 3.35.786 4.387 2.1l5.855 7.42c2.598 3.283 2.598 7.698-.002 10.983l-5.855 7.403C11.158 30.217 9.52 31 7.815 31H2z",fill:"#F04E98"}),a("path",{d:"M15.384 24.89L12.15 21.7c-2.868-3.318-2.868-8.22.002-11.322 1.535-1.639 2.611-2.718 3.23-3.238l2.67 3.238c2.637 3.385 2.575 7.987-.062 11.374l-2.607 3.137z",className:"euiIcon__fillNegative"}))},Elt=Plt;var u7={};$(u7,{icon:()=>Rlt});var AYt=P(L());var Clt=["title","titleId"];function xq(){return xq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Mlt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Tlt=function(t){var n=t.title,r=t.titleId,o=Alt(t,Clt);return a("svg",xq({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.914 1c-3.6 0-5.897 1.111-5.897 1.876 0 .766 2.297 1.877 5.897 1.877s5.897-1.111 5.897-1.877C13.811 2.111 11.514 1 7.914 1m3.98 7.988c-1.187.331-2.601.502-3.98.502-1.383 0-2.801-.172-3.991-.505l2.863 3.242v2.515c.136.08.515.214 1.128.214.61 0 .989-.133 1.126-.213v-2.515l2.854-3.24zm2.394-1.206l-4.248 4.823v2.246h.004c0 .763-1.069 1.105-2.13 1.105-1.06 0-2.13-.342-2.13-1.105h.002v-2.245L1.321 7.55l.01-.008A1.53 1.53 0 011 6.607V2.78h.02C1.14.973 4.627 0 7.913 0c3.286 0 6.774.973 6.894 2.78h.02v3.827c0 .343-.12.657-.335.941l-.003.004c-.06.079-.128.155-.202.23zm-.578-.856a.56.56 0 00.118-.319V4.411c-1.288.879-3.649 1.342-5.914 1.342C5.65 5.753 3.288 5.29 2 4.411v2.196C2 7.375 4.304 8.49 7.914 8.49c2.879 0 4.927-.709 5.639-1.385l.157-.18z"}))},Rlt=Tlt;var c7={};$(c7,{icon:()=>Flt});var TYt=P(L());var zlt=["title","titleId"];function _q(){return _q=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Dlt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Nlt=function(t){var n=t.title,r=t.titleId,o=Llt(t,zlt);return a("svg",_q({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6.918 9.799l-4.82 4.819 2.88-.43.148.987L0 15.943l.768-5.126.988.148-.453 3.033 4.936-4.935a2.003 2.003 0 011.265-2.885V0h1v6.178a2.003 2.003 0 011.263 2.884l4.865 4.866-.443-2.963.988-.147.768 5.126-5.127-.769.15-.988 2.95.441-4.83-4.83c-.312.203-.685.32-1.085.32-.4 0-.773-.117-1.085-.32z"}))},Flt=Nlt;var p7={};$(p7,{icon:()=>qlt});var zYt=P(L());var Wlt=["title","titleId"];function Sq(){return Sq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Hlt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Vlt=function(t){var n=t.title,r=t.titleId,o=Blt(t,Wlt);return a("svg",Sq({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M1.747 10.992h13.1a.123.123 0 00.122-.123V8.51a.122.122 0 00-.122-.122H1.122A.122.122 0 001 8.51v2.36c0 .066.055.122.122.122h.625zm12.011 1H2.21V16h-1v-4.008h-.088A1.124 1.124 0 010 10.87V8.51c0-.62.503-1.122 1.122-1.122h13.725c.62 0 1.122.502 1.122 1.122v2.36c0 .618-.503 1.122-1.122 1.122h-.089V16h-1v-4.008zm-6.27-7.487V0h1v4.529l2.407-2.262.685.73L8 6.356 4.42 2.995l.685-.729 2.383 2.24z"}))},qlt=Vlt;var f7={};$(f7,{icon:()=>Xlt});var DYt=P(L());var Ult=["title","titleId"];function jq(){return jq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Jlt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Glt=function(t){var n=t.title,r=t.titleId,o=$lt(t,Ult);return a("svg",jq({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M2.21 4.008H13.76V0h1v4.008h.088c.619 0 1.122.504 1.122 1.123V7.49c0 .62-.503 1.122-1.122 1.122H1.122A1.122 1.122 0 010 7.49V5.13c0-.618.503-1.122 1.122-1.122h.089V0h1v4.008zm11.549 1H1.12A.123.123 0 001 5.13V7.49c0 .068.055.122.122.122h13.725a.122.122 0 00.122-.122V5.13a.123.123 0 00-.122-.122h-1.088zm-5.301 9.097l2.405-2.26.686.728-3.58 3.363-3.58-3.363.686-.728 2.383 2.24V9.577h1v4.528z"}))},Xlt=Glt;var d7={};$(d7,{icon:()=>est});var FYt=P(L());var Klt=["title","titleId"];function Iq(){return Iq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Qlt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Zlt=function(t){var n=t.title,r=t.titleId,o=Ylt(t,Klt);return a("svg",Iq({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M11.339 15.464H4.77a3.248 3.248 0 01-3.245-3.244V4.549H0v-1h2.526v8.67a2.247 2.247 0 002.245 2.245h6.568a2.247 2.247 0 002.244-2.244V3.549h2.455v1h-1.455v7.67a3.247 3.247 0 01-3.244 3.245zm.513-5.962v1.095l-3.848 1.72-3.85-1.72V9.502l3.85 1.72 3.848-1.72zm0-4.251v1.095l-3.848 1.72-3.85-1.72V5.25l3.85 1.72 3.848-1.72zm0-4.251v1.095l-3.848 1.72-3.85-1.72V1l3.85 1.72L11.852 1z"}))},est=Zlt;var m7={};$(m7,{icon:()=>ist});var BYt=P(L());var tst=["title","titleId"];function kq(){return kq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function nst(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ost=function(t){var n=t.title,r=t.titleId,o=rst(t,tst);return a("svg",kq({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M4.552 10.71a3.008 3.008 0 004.19.738l1.642-1.15 1.15 1.642-1.643 1.15a5.013 5.013 0 11-5.75-8.212l1.642-1.15 1.15 1.643-1.642 1.15a3.007 3.007 0 00-.739 4.189zm8.296-2.137l1.15 1.643-1.643 1.149-1.15-1.642 1.643-1.15zm-4.6-6.571l1.15 1.643-1.643 1.15-1.15-1.642 1.642-1.151zm1.97 1.068L9.07 1.428a1.003 1.003 0 00-1.397-.246L3.566 4.057A5.995 5.995 0 001.092 7.94a5.993 5.993 0 00.996 4.495 5.99 5.99 0 003.883 2.473 5.991 5.991 0 004.495-.996l4.107-2.875c.454-.318.563-.943.246-1.396l-1.15-1.643a1.002 1.002 0 00-1.396-.246l-4.107 2.875a2.002 2.002 0 01-1.498.332 2 2 0 01-1.627-2.323c.09-.505.371-.976.824-1.294l4.107-2.876c.454-.317.564-.942.246-1.396z"}))},ist=ost;var h7={};$(h7,{icon:()=>cst});var VYt=P(L());var ast=["title","titleId"];function Pq(){return Pq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function sst(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ust=function(t){var n=t.title,r=t.titleId,o=lst(t,ast);return a("svg",Pq({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M15.143 15.85l-3.872-3.872a.5.5 0 01-.034-.738 6.01 6.01 0 000-8.486 6.004 6.004 0 00-8.484 0 6.01 6.01 0 000 8.486 5.96 5.96 0 004.242 1.757.5.5 0 010 1 6.955 6.955 0 01-4.949-2.05c-2.728-2.73-2.728-7.171 0-9.9 2.728-2.73 7.168-2.73 9.898 0 2.609 2.61 2.723 6.785.342 9.532l3.565 3.564a.502.502 0 01-.708.708zM6.254 3l.277 5.063h.935L7.754 3h-1.5zm.222 7.548a.727.727 0 00.533.222.717.717 0 00.52-.22.715.715 0 00.225-.53.716.716 0 00-.222-.534.724.724 0 00-.523-.216.731.731 0 00-.533.219.719.719 0 00-.222.53c0 .205.074.38.222.529z"}))},cst=ust;var g7={};$(g7,{icon:()=>hst});var UYt=P(L());var pst=["title","titleId"];function Eq(){return Eq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function dst(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var mst=function(t){var n=t.title,r=t.titleId,o=fst(t,pst);return a("svg",Eq({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M9.5 6a.5.5 0 010 1h-6a.5.5 0 010-1h6zm.74 4.74c0-.117.04-.225.107-.31A5.478 5.478 0 0012 6.5 5.5 5.5 0 106.5 12a.5.5 0 110 1 6.5 6.5 0 114.936-2.27l4.419 4.418a.5.5 0 01-.707.707l-4.768-4.768a.499.499 0 01-.14-.347z"}))},hst=mst;var v7={};$(v7,{icon:()=>wst});var JYt=P(L());var gst=["title","titleId"];function Cq(){return Cq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function yst(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var bst=function(t){var n=t.title,r=t.titleId,o=vst(t,gst);return a("svg",Cq({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7 6h2.5a.5.5 0 010 1H7v2.5a.5.5 0 01-1 0V7H3.5a.5.5 0 010-1H6V3.5a.5.5 0 011 0V6zm3.24 4.74c0-.117.04-.225.107-.31A5.478 5.478 0 0012 6.5 5.5 5.5 0 106.5 12a.5.5 0 110 1 6.5 6.5 0 114.936-2.27l4.419 4.418a.5.5 0 01-.707.707l-4.768-4.768a.499.499 0 01-.14-.347z"}))},wst=bst;var y7={};$(y7,{icon:()=>jst});var XYt=P(L());var Ost=["title","titleId"];function Aq(){return Aq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function _st(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Sst=function(t){var n=t.title,r=t.titleId,o=xst(t,Ost);return a("svg",Aq({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.55 14.224a.502.502 0 00.897 0l4-8a.5.5 0 00.053-.235 4.672 4.672 0 00-.084-.705 5.538 5.538 0 00-.505-1.512C11.189 2.362 9.906 1.5 8 1.5c-1.906 0-3.19.862-3.91 2.272-.248.485-.41.998-.506 1.512-.058.31-.08.554-.084.705a.5.5 0 00.053.235l3.997 8zM8 5a1 1 0 100 2 1 1 0 000-2zm-3.493.895c.009-.106.027-.253.06-.429.079-.424.213-.848.413-1.238C5.537 3.138 6.487 2.5 8 2.5c1.513 0 2.463.638 3.02 1.728.2.39.334.814.413 1.238.033.176.051.323.06.43L8 12.881 4.507 5.895z"}))},jst=Sst;var b7={};$(b7,{icon:()=>Cst});var YYt=P(L());var Ist=["title","titleId"];function Mq(){return Mq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Pst(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Est=function(t){var n=t.title,r=t.titleId,o=kst(t,Ist);return a("svg",Mq({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7 10h2V6H7zM3 10h2V6H3zM11.025 10h2V6h-2zM3.5 13.75h1v-2.4h-1zM6.175 13.75h1.001v-2.4H6.175zM8.85 13.75h1v-2.4h-1zM11.525 13.75h1v-2.4h-1z"}),a("path",{d:"M0 3v7.05h1v3.698h1v-3.699h12v3.699h1v-3.699h1V3H0zm1 6h14V4H1v5z"}))},Cst=Est;var w7={};$(w7,{icon:()=>zst});var ZYt=P(L());var Ast=["title","titleId"];function Tq(){return Tq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Tst(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Rst=function(t){var n=t.title,r=t.titleId,o=Mst(t,Ast);return a("svg",Tq({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M0 2h16v2H0V2zm0 5h16v2H0V7zm16 5H0v2h16v-2z"}))},zst=Rst;var O7={};$(O7,{icon:()=>Wst});var tQt=P(L());var Lst=["title","titleId"];function Rq(){return Rq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Nst(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Fst=function(t){var n=t.title,r=t.titleId,o=Dst(t,Lst);return a("svg",Rq({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6 7.5c0 .276-.216.5-.495.5h-2.01a.503.503 0 01-.487-.412L3 7.5c0-.276.216-.5.495-.5h2.01c.243 0 .445.183.487.412L6 7.5zM3.51 4a.513.513 0 01-.502-.412L3 3.5c0-.276.228-.5.51-.5h8.98c.25 0 .459.183.502.412L13 3.5c0 .276-.228.5-.51.5H8.493v7.792l2.06-2.06a.5.5 0 11.707.707L9.14 12.56A1.496 1.496 0 018.026 13L7.993 13a.501.501 0 01-.118-.014 1.493 1.493 0 01-.857-.426l-2.122-2.12a.5.5 0 01.708-.708l1.889 1.89V4H3.51zM13 7.5c0 .276-.216.5-.495.5h-2.01a.503.503 0 01-.487-.412L10 7.5c0-.276.216-.5.495-.5h2.01c.243 0 .445.183.487.412L13 7.5z"}))},Wst=Fst;var x7={};$(x7,{icon:()=>Ust});var nQt=P(L());var Bst=["title","titleId"];function zq(){return zq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Vst(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var qst=function(t){var n=t.title,r=t.titleId,o=Hst(t,Bst);return a("svg",zq({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M1.014 7.382a.501.501 0 00-.013.152c-.014.4.133.806.439 1.112l2.12 2.122a.5.5 0 10.708-.708L2.208 8H14.5a.5.5 0 000-1H2.379l1.889-1.89a.5.5 0 00-.707-.706L1.44 6.524c-.241.242-.383.544-.426.858zM14.5 3h-7a.5.5 0 000 1h7a.5.5 0 000-1zm0 8h-7a.5.5 0 100 1h7a.5.5 0 100-1z"}))},Ust=qst;var _7={};$(_7,{icon:()=>Kst});var iQt=P(L());var $st=["title","titleId"];function Lq(){return Lq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Gst(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Xst=function(t){var n=t.title,r=t.titleId,o=Jst(t,$st);return a("svg",Lq({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M14.986 7.382a.501.501 0 01.013.152c.014.4-.133.806-.439 1.112l-2.12 2.122a.5.5 0 11-.708-.708L13.792 8H1.5a.5.5 0 010-1h12.121l-1.889-1.89a.5.5 0 01.707-.706l2.121 2.12c.241.242.383.544.426.858zM1.5 3h7a.5.5 0 010 1h-7a.5.5 0 010-1zm0 8h7a.5.5 0 110 1h-7a.5.5 0 110-1z"}))},Kst=Xst;var S7={};$(S7,{icon:()=>tut});var lQt=P(L());var Yst=["title","titleId"];function Dq(){return Dq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Zst(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var eut=function(t){var n=t.title,r=t.titleId,o=Qst(t,Yst);return a("svg",Dq({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M10.01 8.5c0-.276.216-.5.495-.5h2.01c.243 0 .445.183.487.412l.008.088c0 .276-.216.5-.495.5h-2.01a.503.503 0 01-.487-.412L10.01 8.5zM12.5 12c.25 0 .459.183.502.412l.008.088c0 .276-.228.5-.51.5H3.52a.513.513 0 01-.502-.412L3.01 12.5c0-.276.228-.5.51-.5h3.987V4.208l-2.06 2.06a.5.5 0 11-.707-.707L6.86 3.44A1.496 1.496 0 017.974 3L8.007 3c.04 0 .08.005.118.014.314.043.616.185.857.426l2.122 2.12a.5.5 0 01-.708.708l-1.889-1.89V12H12.5zM3 8.5c0-.276.216-.5.495-.5h2.01c.243 0 .445.183.487.412L6 8.5c0 .276-.216.5-.495.5h-2.01a.503.503 0 01-.487-.412L3 8.5z"}))},tut=eut;var j7={};$(j7,{icon:()=>aut});var uQt=P(L());var rut=["title","titleId"];function Nq(){return Nq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function out(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var iut=function(t){var n=t.title,r=t.titleId,o=nut(t,rut);return a("svg",Nq({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.352 6H2.5a.5.5 0 010-1h4.852L5.12 2.721c-.18-.183-.155-.46.055-.616a.551.551 0 01.705.048l3 3.062c.16.164.16.405 0 .57l-3 3.062A.532.532 0 015.5 9a.54.54 0 01-.325-.106c-.21-.157-.235-.433-.055-.616L7.352 6zm1.296 4H13.5a.5.5 0 010 1H8.648l2.232 2.278c.18.183.155.46-.055.617A.54.54 0 0110.5 14a.532.532 0 01-.38-.153l-3-3.063a.397.397 0 010-.568l3-3.063a.551.551 0 01.705-.047c.21.156.235.433.055.616L8.648 10z"}))},aut=iut;var I7={};$(I7,{icon:()=>put});var pQt=P(L());var lut=["title","titleId"];function Fq(){return Fq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function uut(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var cut=function(t){var n=t.title,r=t.titleId,o=sut(t,lut);return a("svg",Fq({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M1.146 14.146l4-4a.5.5 0 01.765.638l-.057.07-4 4a.5.5 0 01-.765-.638l.057-.07 4-4-4 4zM6.5 8A1.5 1.5 0 018 9.5v3a.5.5 0 11-1 0v-3a.5.5 0 00-.5-.5h-3a.5.5 0 010-1h3zm2-5a.5.5 0 01.5.5v3a.5.5 0 00.5.5h3a.5.5 0 110 1h-3A1.5 1.5 0 018 6.5v-3a.5.5 0 01.5-.5zm1.651 2.146l4-4a.5.5 0 01.765.638l-.057.07-4 4a.5.5 0 01-.765-.638l.057-.07 4-4-4 4z"}))},put=cut;var k7={};$(k7,{icon:()=>gut});var dQt=P(L());var fut=["title","titleId"];function Wq(){return Wq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function mut(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var hut=function(t){var n=t.title,r=t.titleId,o=dut(t,fut);return a("svg",Wq({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("rect",{width:10,height:1.5,x:3,y:7.25,rx:.5}))},gut=hut;var P7={};$(P7,{icon:()=>Out});var hQt=P(L());var vut=["title","titleId"];function Bq(){return Bq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function but(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var wut=function(t){var n=t.title,r=t.titleId,o=yut(t,vut);return a("svg",Bq({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M7.5 0C11.636 0 15 3.364 15 7.5S11.636 15 7.5 15 0 11.636 0 7.5 3.364 0 7.5 0zm0 .882a6.618 6.618 0 100 13.236A6.618 6.618 0 007.5.882zM3.5 7h8a.5.5 0 110 1h-8a.5.5 0 010-1z"}))},Out=wut;var E7={};$(E7,{icon:()=>Iut});var vQt=P(L());var xut=["title","titleId"];function Hq(){return Hq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Sut(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var jut=function(t){var n=t.title,r=t.titleId,o=_ut(t,xut);return a("svg",Hq({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M7.5 0C11.636 0 15 3.364 15 7.5S11.636 15 7.5 15 0 11.636 0 7.5 3.364 0 7.5 0zm-4 7a.5.5 0 000 1h8a.5.5 0 100-1h-8z"}))},Iut=jut;var C7={};$(C7,{icon:()=>Aut});var bQt=P(L());var kut=["title","titleId"];function Vq(){return Vq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Eut(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Cut=function(t){var n=t.title,r=t.titleId,o=Put(t,kut);return a("svg",Vq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7 16v5h2.038a13.179 13.179 0 000 2H7v5H5v-5H0v-2h5v-5h2zM7 0v5h5v2H7v5H5V7H0V5h5V0h2zm16 0v5h5v2h-5v2.038a13.179 13.179 0 00-2 0V7h-5V5h5V0h2z"}),a("path",{className:"euiIcon__fillSecondary",d:"M22 10c3.073 0 5.877 1.155 8 3.056v3.252A9.82 9.82 0 1016.307 30h-3.251A11.955 11.955 0 0110 22c0-6.627 5.373-12 12-12zm1 8v3h3v2h-3v3h-2v-3h-3v-2h3v-3h2z"}))},Aut=Cut;var A7={};$(A7,{icon:()=>Lut});var OQt=P(L());var Mut=["title","titleId"];function qq(){return qq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Rut(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var zut=function(t){var n=t.title,r=t.titleId,o=Tut(t,Mut);return a("svg",qq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M16 32C7.163 32 0 24.837 0 16S7.163 0 16 0s16 7.163 16 16h-2c0-7.732-6.268-14-14-14S2 8.268 2 16s6.268 14 14 14v2z"}),a("path",{className:"euiIcon__fillSecondary",d:"M27 20v12h-2V20h2zm-5 4v8h-2v-8h2zm10-2v10h-2V22h2zM17 9v6h6v2h-6v6h-2v-6H9v-2h6V9h2z"}))},Lut=zut;var M7={};$(M7,{icon:()=>But});var _Qt=P(L());var Dut=["title","titleId"];function Uq(){return Uq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Fut(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Wut=function(t){var n=t.title,r=t.titleId,o=Nut(t,Dut);return a("svg",Uq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M4 24a4 4 0 110 8 4 4 0 010-8zm24 0a4 4 0 110 8 4 4 0 010-8zM4 26a2 2 0 100 4 2 2 0 000-4zm24 0a2 2 0 100 4 2 2 0 000-4zM17 9v6h6v2h-6v6h-2v-6H9v-2h6V9h2zM4 0a4 4 0 110 8 4 4 0 010-8zm24 0a4 4 0 110 8 4 4 0 010-8zm0 2a2 2 0 100 4 2 2 0 000-4zM4 2a2 2 0 100 4 2 2 0 000-4z"}),a("path",{d:"M21.078 29.05c.102.677.3 1.322.582 1.92A15.963 15.963 0 0116 32c-1.993 0-3.9-.364-5.66-1.03.281-.598.48-1.243.582-1.92 1.574.614 3.287.95 5.078.95 1.791 0 3.504-.336 5.078-.95zm9.892-18.71A15.963 15.963 0 0132 16c0 1.993-.364 3.9-1.03 5.66a6.948 6.948 0 00-1.92-.582c.614-1.574.95-3.287.95-5.078 0-1.791-.336-3.504-.95-5.078a6.948 6.948 0 001.92-.582zm-29.94 0c.598.281 1.243.48 1.92.582A13.965 13.965 0 002 16c0 1.791.336 3.504.95 5.078-.677.102-1.322.3-1.92.582A15.964 15.964 0 010 16c0-1.993.364-3.9 1.03-5.66zM16 0c1.993 0 3.9.364 5.66 1.03a6.948 6.948 0 00-.582 1.92A13.965 13.965 0 0016 2c-1.791 0-3.504.336-5.078.95a6.948 6.948 0 00-.582-1.92A15.964 15.964 0 0116 0z"}))},But=Wut;var T7={};$(T7,{icon:()=>$ut});var jQt=P(L());var Hut=["title","titleId"];function $q(){return $q=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function qut(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Uut=function(t){var n=t.title,r=t.titleId,o=Vut(t,Hut);return a("svg",$q({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M16 0c5.523 0 10 4.477 10 10s-4.477 10-10 10S6 15.523 6 10 10.477 0 16 0zm0 2a8 8 0 100 16 8 8 0 000-16z"}),a("path",{className:"euiIcon__fillSecondary",d:"M8.4 19.288c.492.402 1.015.766 1.566 1.087L7.26 23.682a4 4 0 11-1.437-1.243l2.578-3.151zm15.2 0l2.577 3.15a4 4 0 11-1.437 1.243l-2.706-3.306a12.032 12.032 0 001.565-1.087zM4 24a2 2 0 100 4 2 2 0 000-4zm24 0a2 2 0 100 4 2 2 0 000-4zM17 6v3h3v2h-3v3h-2v-3h-3V9h3V6h2z"}))},$ut=Uut;var R7={};$(R7,{icon:()=>Yut});var kQt=P(L());var Jut=["title","titleId"];function Jq(){return Jq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Xut(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Kut=function(t){var n=t.title,r=t.titleId,o=Gut(t,Jut);return a("svg",Jq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M16 32C7.163 32 0 24.837 0 16S7.163 0 16 0s16 7.163 16 16a16 16 0 01-16 16zm0-30C8.268 2 2 8.268 2 16s6.268 14 14 14 14-6.268 14-14A14 14 0 0016 2z"}),a("path",{className:"euiIcon__fillSecondary",d:"M23 15h-6V9h-2v6H9v2h6v6h2v-6h6z"}))},Yut=Kut;var z7={};$(z7,{icon:()=>rct});var EQt=P(L());var Qut=["title","titleId"];function Gq(){return Gq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ect(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var tct=function(t){var n=t.title,r=t.titleId,o=Zut(t,Qut);return a("svg",Gq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M2 20v10h10v2H0V20h2zm30 0v12H20v-2h10V20h2zM12 4a8 8 0 110 16 8 8 0 010-16zm0 2a6 6 0 100 12 6 6 0 000-12zm0-6v2H2v10H0V0h12zm20 0v12h-2V2H20V0h12z"}),a("path",{className:"euiIcon__fillSecondary",d:"M21.997 12.251c-.017.689-.104 1.36-.253 2.006a6 6 0 11-7.487 7.487c-.646.15-1.317.236-2.006.253a8 8 0 109.746-9.746z"}))},rct=tct;var L7={};$(L7,{icon:()=>lct});var AQt=P(L());var nct=["title","titleId"];function Xq(){return Xq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ict(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var act=function(t){var n=t.title,r=t.titleId,o=oct(t,nct);return a("svg",Xq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M2 12v6h6v2H0v-8h2zm18 0v8h-8v-2h6v-6h2zM8 0v2H2v6H0V0h8zm12 0v8h-2V2h-6V0h8z"}),a("path",{className:"euiIcon__fillSecondary",d:"M16 24a4 4 0 110 8 4 4 0 010-8zm12 0a4 4 0 110 8 4 4 0 010-8zm-12 1.75a2.25 2.25 0 100 4.5 2.25 2.25 0 000-4.5zm12 0a2.25 2.25 0 100 4.5 2.25 2.25 0 000-4.5zM28 12a4 4 0 110 8 4 4 0 010-8zm0 1.75a2.25 2.25 0 100 4.5 2.25 2.25 0 000-4.5zM10 6a4 4 0 110 8 4 4 0 010-8zm0 1.75a2.25 2.25 0 100 4.5 2.25 2.25 0 000-4.5z"}))},lct=act;var D7={};$(D7,{icon:()=>fct});var TQt=P(L());var sct=["title","titleId"];function Kq(){return Kq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function cct(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var pct=function(t){var n=t.title,r=t.titleId,o=uct(t,sct);return a("svg",Kq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M24 0a8 8 0 11-4.906 14.32l-4.774 4.774a8 8 0 11-1.414-1.414l4.774-4.774A8 8 0 0124 0zM8 18a6 6 0 100 12 6 6 0 000-12zM24 2a6 6 0 100 12 6 6 0 000-12z"}),a("path",{className:"euiIcon__fillSecondary",d:"M32 20v12H20V20h12zm-2 2h-8v8h8v-8zM12 0v12H0V0h12zm-2 2H2v8h8V2z"}))},fct=pct;var N7={};$(N7,{icon:()=>vct});var zQt=P(L());var dct=["title","titleId"];function Yq(){return Yq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function hct(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var gct=function(t){var n=t.title,r=t.titleId,o=mct(t,dct);return a("svg",Yq({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6 2.5a.5.5 0 01.5-.5h3a.5.5 0 010 1h-3a.5.5 0 01-.5-.5z"}),a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M4.5 0A1.5 1.5 0 003 1.5v13A1.5 1.5 0 004.5 16h7a1.5 1.5 0 001.5-1.5v-13A1.5 1.5 0 0011.5 0h-7zM4 1.5a.5.5 0 01.5-.5h7a.5.5 0 01.5.5V4H4V1.5zM4 13v1.5a.5.5 0 00.5.5h7a.5.5 0 00.5-.5V13H4zm0-1h8V5H4v7z"}))},vct=gct;var F7={};$(F7,{icon:()=>xct});var DQt=P(L());var yct=["title","titleId"];function Qq(){return Qq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function wct(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Oct=function(t){var n=t.title,r=t.titleId,o=bct(t,yct);return a("svg",Qq({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8.796 9.048c-1.552-2.238-1.199-5.323.61-8.1-3.47-.12-6.6 2.232-7.269 5.672-.742 3.82 1.83 7.533 5.749 8.294a7.226 7.226 0 007.526-3.218c-2.794.177-5.27-.711-6.616-2.648z"}))},xct=Oct;var W7={};$(W7,{icon:()=>kct});var FQt=P(L());var _ct=["title","titleId"];function Zq(){return Zq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function jct(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Ict=function(t){var n=t.title,r=t.titleId,o=Sct(t,_ct);return a("svg",Zq({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M1 1h14v14H1V1zm13 12v1H2V2h12v11zM6 6h4v4H6V6zm-1 5V5h6v6H5z"}))},kct=Ict;var B7={};$(B7,{icon:()=>Mct});var BQt=P(L());var Pct=["title","titleId"];function eU(){return eU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Cct(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Act=function(t){var n=t.title,r=t.titleId,o=Ect(t,Pct);return a("svg",eU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5.5 1a.5.5 0 010 1H3.006C2.45 2 2 2.45 2 3.006v9.988C2 13.55 2.45 14 3.006 14H5.5a.5.5 0 110 1H3.006A2.005 2.005 0 011 12.994V3.006C1 1.898 1.897 1 3.006 1H5.5zm7.494 0c1.059 0 1.924.818 2 1.856l.006.15v9.988a2.005 2.005 0 01-1.856 2l-.15.006H10.5a.5.5 0 01-.09-.992L10.5 14h2.494c.516 0 .941-.388 1-.888l.006-.118V3.006c0-.516-.388-.941-.888-1L12.994 2H10.5a.5.5 0 01-.09-.992L10.5 1h2.494zM5 7a1 1 0 110 2 1 1 0 010-2zm3 0a1 1 0 110 2 1 1 0 010-2zm3 0a1 1 0 110 2 1 1 0 010-2z"}))},Mct=Act;var H7={};$(H7,{icon:()=>Dct});var VQt=P(L());var Tct=["title","titleId"];function tU(){return tU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function zct(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Lct=function(t){var n=t.title,r=t.titleId,o=Rct(t,Tct);return a("svg",tU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8.5 1.443a1 1 0 00-1 0L2.572 4.29a1 1 0 00-.5.866v5.69a1 1 0 00.5.866L7.5 14.557a1 1 0 001 0l4.928-2.846a1 1 0 00.5-.866v-5.69a1 1 0 00-.5-.866L8.5 1.443zM9 .577l4.928 2.846a2 2 0 011 1.732v5.69a2 2 0 01-1 1.732L9 15.423a2 2 0 01-2 0l-4.928-2.846a2 2 0 01-1-1.732v-5.69a2 2 0 011-1.732L7 .577a2 2 0 012 0z"}))},Dct=Lct;var V7={};$(V7,{icon:()=>Hct});var UQt=P(L());var Nct=["title","titleId"];function rU(){return rU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Wct(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Bct=function(t){var n=t.title,r=t.titleId,o=Fct(t,Nct);return a("svg",rU({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.808 10.197H6.796L5.859 13H4.485l.937-2.803H3.966l.219-1.25h1.647l.608-1.805H4.991l.226-1.251h1.64l.95-2.844h1.368l-.95 2.844h1.018l.95-2.844h1.374l-.95 2.844h1.51l-.218 1.25h-1.702l-.608 1.805h1.497l-.219 1.251H9.182L8.252 13H6.878l.93-2.803zm-.602-1.25h1.012l.615-1.805H7.814l-.608 1.804z",fillRule:"evenodd"}))},Hct=Bct;var q7={};$(q7,{icon:()=>Jct});var JQt=P(L());var Vct=["title","titleId"];function nU(){return nU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Uct(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var $ct=function(t){var n=t.title,r=t.titleId,o=qct(t,Vct);return a("svg",nU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6.517 12.271l1.254-1.254a1.5 1.5 0 11-1.254 1.254zm2.945-2.944l.74-.74c.361.208.694.467.987.772a.5.5 0 01-.721.693 3.424 3.424 0 00-1.006-.725zm2.162-2.163l.716-.715c.308.232.599.49.87.772a.5.5 0 11-.722.692 6.26 6.26 0 00-.864-.749zM7.061 6.07A6.198 6.198 0 003.54 7.885a.5.5 0 01-.717-.697 7.199 7.199 0 015.309-2.187l-1.07 1.07zm6.672-1.014l.71-.71c.274.23.536.476.786.736a.5.5 0 01-.721.692 9.1 9.1 0 00-.775-.718zm-3.807-1.85A9.06 9.06 0 008 3a8.99 8.99 0 00-6.469 2.734.5.5 0 11-.717-.697A9.99 9.99 0 018 2c.944 0 1.868.131 2.75.382l-.824.824zM8 13a.5.5 0 100-1 .5.5 0 000 1zm-5.424 1a.5.5 0 01-.707-.707L14.146 1.146a.5.5 0 01.708.708L2.576 14z"}))},Jct=$ct;var U7={};$(U7,{icon:()=>Qct});var XQt=P(L());var Gct=["title","titleId"];function oU(){return oU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Kct(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Yct=function(t){var n=t.title,r=t.titleId,o=Xct(t,Gct);return a("svg",oU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 14a1.5 1.5 0 110-3 1.5 1.5 0 010 3zm0-1a.5.5 0 100-1 .5.5 0 000 1zm3.189-3.64a.5.5 0 01-.721.692A3.408 3.408 0 008 9c-.937 0-1.813.378-2.453 1.037a.5.5 0 01-.717-.697A4.408 4.408 0 018 8c1.22 0 2.361.497 3.189 1.36zm2.02-2.14a.5.5 0 11-.721.693A6.2 6.2 0 008 6a6.199 6.199 0 00-4.46 1.885.5.5 0 01-.718-.697A7.199 7.199 0 018 5a7.2 7.2 0 015.21 2.22zm2.02-2.138a.5.5 0 01-.721.692A8.99 8.99 0 008 3a8.99 8.99 0 00-6.469 2.734.5.5 0 11-.717-.697A9.99 9.99 0 018 2a9.99 9.99 0 017.23 3.082z"}))},Qct=Yct;var $7={};$($7,{icon:()=>npt});var YQt=P(L());var Zct=["title","titleId"];function iU(){return iU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function tpt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var rpt=function(t){var n=t.title,r=t.titleId,o=ept(t,Zct);return a("svg",iU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M14.447 3.724l-6-3a1 1 0 00-.894 0l-6 3A1 1 0 001 4.618v6.764a1 1 0 00.553.894l6 3a1 1 0 00.894 0l6-3a1 1 0 00.553-.894V4.618a1 1 0 00-.553-.894zM5.871 5.897l5.343-2.672 2.158 1.079L8 6.943zM8 1.618l2.096 1.048-5.353 2.677-2.115-1.039zM2 5.11l2.25 1.105V9a.5.5 0 001 0V6.706L7.5 7.811v6.321L2 11.382zm6.5 9.022v-6.32L14 5.11v6.272z"}))},npt=rpt;var J7={};$(J7,{icon:()=>spt});var ZQt=P(L());var opt=["title","titleId"];function aU(){return aU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function apt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var lpt=function(t){var n=t.title,r=t.titleId,o=ipt(t,opt);return a("svg",aU({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M3 1a1 1 0 00-1 1v12a1 1 0 001 1h5a4.995 4.995 0 01-.584-1H3V2h7v2a1 1 0 001 1h2v2.1c.348.07.682.177 1 .316V4a1 1 0 00-.293-.707l-2-2A1 1 0 0011 1H3zm13 11a4 4 0 11-8 0 4 4 0 018 0zm-1.646-1.354a.5.5 0 010 .708l-2.5 2.5a.5.5 0 01-.708 0l-1-1a.5.5 0 01.708-.708l.646.647 2.146-2.147a.5.5 0 01.708 0z"}))},spt=lpt;var G7={};$(G7,{icon:()=>dpt});var tZt=P(L());var upt=["title","titleId"];function lU(){return lU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ppt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var fpt=function(t){var n=t.title,r=t.titleId,o=cpt(t,upt);return a("svg",lU({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M3 1a1 1 0 011-1h8a1 1 0 01.707.293l2 2A1 1 0 0115 3v5a4.995 4.995 0 00-1-.584V4h-2a1 1 0 01-1-1V1H4v12h3.1c.07.348.177.682.316 1H4a1 1 0 01-1-1V1zm5 14H2V2a1 1 0 00-1 1v12a1 1 0 001 1h7a5.029 5.029 0 01-1-1zm8-3a4 4 0 11-8 0 4 4 0 018 0zm-1.646-1.354a.5.5 0 010 .708l-2.5 2.5a.5.5 0 01-.708 0l-1-1a.5.5 0 01.708-.708l.646.647 2.146-2.147a.5.5 0 01.708 0z"}))},dpt=fpt;var X7={};$(X7,{icon:()=>ypt});var nZt=P(L());var mpt=["title","titleId"];function sU(){return sU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function gpt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var vpt=function(t){var n=t.title,r=t.titleId,o=hpt(t,mpt);return a("svg",sU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M11.993 8.17c0 .83-.673 1.507-1.499 1.507H5.498A1.505 1.505 0 013.999 8.17V6.662h7.994V8.17zm-2.998 5.998c0 .455-.448.827-.999.827-.55 0-1-.372-1-.827v-3.486h2v3.486zM4 5.658h1.262V1.005H4v4.653zm2.261 0h1.244V1.005H6.26v4.653zm2.244 0h1.235V1.005H8.504v4.653zm2.234 0h1.254V1.005h-1.254v4.653zM3.008 0L3 8.17a2.509 2.509 0 002.498 2.512h.5v3.486c0 1.01.896 1.832 1.998 1.832 1.102 0 1.998-.822 1.998-1.832v-3.486h.5a2.509 2.509 0 002.498-2.512L13 0H3.008z"}))},ypt=vpt;var K7={};$(K7,{icon:()=>_pt});var iZt=P(L());var bpt=["title","titleId"];function uU(){return uU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Opt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var xpt=function(t){var n=t.title,r=t.titleId,o=wpt(t,bpt);return a("svg",uU({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M9.84 2.019L3.046 8.57c-.987.952-1.133 2.517-.199 3.516.951 1.021 2.58 1.106 3.64.19.034-.03.068-.061.1-.092l5.655-5.452a.484.484 0 000-.703.53.53 0 00-.729 0L5.92 11.421c-.572.551-1.505.657-2.131.163a1.455 1.455 0 01-.118-2.211l6.899-6.651a2.646 2.646 0 013.644 0 2.422 2.422 0 010 3.513L7.3 12.901c-1.333 1.285-3.497 1.493-4.95.336-1.54-1.22-1.764-3.411-.5-4.897a3.33 3.33 0 01.238-.252l5.78-5.572a.484.484 0 000-.703.53.53 0 00-.73 0l-5.78 5.572a4.36 4.36 0 000 6.324c2.188 2.109 5.202 1.31 6.66-.095l6.925-6.676a3.39 3.39 0 000-4.92C13.534.66 11.25.66 9.841 2.019z"}))},_pt=xpt;var Y7={};$(Y7,{icon:()=>Ppt});var lZt=P(L());var Spt=["title","titleId"];function cU(){return cU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ipt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var kpt=function(t){var n=t.title,r=t.titleId,o=jpt(t,Spt);return a("svg",cU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6.664 14.871a7 7 0 01-2.42-12.778.5.5 0 01.612.06c.456.431 8.216 8.212 8.98 9.002a.5.5 0 01.063.618 7.002 7.002 0 01-7.235 3.098zm6.168-3.312a1961.733 1961.733 0 00-8.377-8.4 6 6 0 108.378 8.4zm2.095-2.548a.5.5 0 11-.99-.144c.01-.066.01-.066.018-.133a6.007 6.007 0 00-.034-1.714.5.5 0 11.987-.163c.108.655.122 1.326.04 1.999l-.021.155zm-1.273-5.138a.5.5 0 11-.808.59 6.026 6.026 0 00-1.304-1.308.5.5 0 01.59-.806 7.026 7.026 0 011.522 1.524zM9.169 1.098a.5.5 0 11-.166.986 6.105 6.105 0 00-1.849-.026.5.5 0 01-.14-.99 7.02 7.02 0 012.155.03z"}))},Ppt=kpt;var Q7={};$(Q7,{icon:()=>Tpt});var uZt=P(L());var Ept=["title","titleId"];function pU(){return pU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Apt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Mpt=function(t){var n=t.title,r=t.titleId,o=Cpt(t,Ept);return a("svg",pU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5 2a1 1 0 00-1 1v10a1 1 0 102 0V3a1 1 0 00-1-1zm6 0a1 1 0 00-1 1v10a1 1 0 102 0V3a1 1 0 00-1-1z"}))},Tpt=Mpt;var Z7={};$(Z7,{icon:()=>Npt});var pZt=P(L());var Rpt=["title","titleId"];function fU(){return fU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Lpt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Dpt=function(t){var n=t.title,r=t.titleId,o=zpt(t,Rpt);return a("svg",fU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M.586 2.586A2 2 0 000 4h1a1 1 0 011-1V2a2 2 0 00-1.414.586zM2 2h10.5a.5.5 0 010 1H2V2zM0 4h1v6.5a.5.5 0 01-1 0V4zm2.586.586A2 2 0 002 6h1a1 1 0 011-1V4a2 2 0 00-1.414.586zm0 8.828A2 2 0 012 12h1a1 1 0 001 1v1a2 2 0 01-1.414-.586zm12.828-8.828A2 2 0 0116 6h-1a1 1 0 00-1-1V4a2 2 0 011.414.586zm0 8.828A2 2 0 0016 12h-1a1 1 0 01-1 1v1a2 2 0 001.414-.586zM4 4h10v1H4zM3 7h12v1H3zm1 6h10v1H4zM2 6h1v6H2zm13 0h1v6h-1zm-5.5 4a.5.5 0 010 1H7.496a.5.5 0 010-1H9.5zm4 0a.5.5 0 010 1h-2.004a.5.5 0 010-1H13.5z"}))},Npt=Dpt;var e8={};$(e8,{icon:()=>Vpt});var dZt=P(L());var Fpt=["title","titleId"];function dU(){return dU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Bpt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Hpt=function(t){var n=t.title,r=t.titleId,o=Wpt(t,Fpt);return a("svg",dU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M12.148 3.148L11 2l-9 9v3h3l9-9-1.144-1.144-8.002 7.998a.502.502 0 01-.708 0 .502.502 0 010-.708l8.002-7.998zM11 1c.256 0 .512.098.707.293l3 3a.999.999 0 010 1.414l-9 9A.997.997 0 015 15H2a1 1 0 01-1-1v-3c0-.265.105-.52.293-.707l9-9A.997.997 0 0111 1zM5 14H2v-3l3 3z"}))},Vpt=Hpt;var t8={};$(t8,{icon:()=>Gpt});var hZt=P(L());var qpt=["title","titleId"];function mU(){return mU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function $pt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Jpt=function(t){var n=t.title,r=t.titleId,o=Upt(t,qpt);return a("svg",mU({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M5 8c1.105 0 2-1.12 2-2.5S6.105 3 5 3 3 4.12 3 5.5 3.895 8 5 8zm0-1c.356 0 1-.452 1-1.5S5.356 4 5 4s-1 .452-1 1.5S4.644 7 5 7z"}),a("path",{d:"M10.5 3H12L5.5 13H4l6.5-10z"}),a("path",{fillRule:"evenodd",d:"M13 10.5c0 1.38-.895 2.5-2 2.5s-2-1.12-2-2.5S9.895 8 11 8s2 1.12 2 2.5zm-1 0c0 1.048-.644 1.5-1 1.5s-1-.452-1-1.5.644-1.5 1-1.5 1 .452 1 1.5z"}))},Gpt=Jpt;var r8={};$(r8,{icon:()=>Zpt});var vZt=P(L());var Xpt=["title","titleId"];function hU(){return hU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ypt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Qpt=function(t){var n=t.title,r=t.titleId,o=Kpt(t,Xpt);return a("svg",hU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M8 11h4.5a.5.5 0 100-1h-10a.5.5 0 000 1H7v4.25c0 .414.224.75.5.75s.5-.336.5-.75V11zM4 4h1v6H4V4zm6 0h1v6h-1V4zM4.286 2C4.08 2 4 2.063 4 2v1c0-.063.08 0 .286 0h6.428C10.92 3 11 2.937 11 3V2c0 .063-.08 0-.286 0H4.286zm0-1h6.428C11.424 1 12 1.448 12 2v1c0 .552-.576 1-1.286 1H4.286C3.576 4 3 3.552 3 3V2c0-.552.576-1 1.286-1z"}))},Zpt=Qpt;var n8={};$(n8,{icon:()=>oft});var bZt=P(L());var eft=["title","titleId"];function gU(){return gU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function rft(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var nft=function(t){var n=t.title,r=t.titleId,o=tft(t,eft);return a("svg",gU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M9 11h4.5a.5.5 0 100-1h-10a.5.5 0 100 1H8v4.25c0 .414.224.75.5.75s.5-.336.5-.75V11zM5 4h7v6H5V4zm.286-3h6.428C12.424 1 13 1.448 13 2v1c0 .552-.576 1-1.286 1H5.286C4.576 4 4 3.552 4 3V2c0-.552.576-1 1.286-1z"}))},oft=nft;var o8={};$(o8,{icon:()=>uft});var OZt=P(L());var ift=["title","titleId"];function vU(){return vU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function lft(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var sft=function(t){var n=t.title,r=t.titleId,o=aft(t,ift);return a("svg",vU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M4.608 3.063C4.345 2.895 4 3.089 4 3.418v9.167c0 .329.345.523.608.356l7.2-4.584a.426.426 0 000-.711l-7.2-4.583zm.538-.844l7.2 4.583a1.426 1.426 0 010 2.399l-7.2 4.583C4.21 14.38 3 13.696 3 12.585V3.418C3 2.307 4.21 1.624 5.146 2.22z"}))},uft=sft;var i8={};$(i8,{icon:()=>mft});var _Zt=P(L());var cft=["title","titleId"];function yU(){return yU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function fft(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var dft=function(t){var n=t.title,r=t.titleId,o=pft(t,cft);return a("svg",yU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M12.345 6.801l-7.2-4.581C4.21 1.625 3 2.308 3 3.419v9.162c0 1.111 1.21 1.794 2.146 1.199l7.2-4.581a1.425 1.425 0 000-2.398z"}))},mft=dft;var a8={};$(a8,{icon:()=>bft});var jZt=P(L());var hft=["title","titleId"];function bU(){return bU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function vft(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var yft=function(t){var n=t.title,r=t.titleId,o=gft(t,hft);return a("svg",bU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8.25 3a.5.5 0 01.5.5v3.75h3.75a.5.5 0 01.5.5v.5a.5.5 0 01-.5.5H8.75v3.75a.5.5 0 01-.5.5h-.5a.5.5 0 01-.5-.5V8.75H3.5a.5.5 0 01-.5-.5v-.5a.5.5 0 01.5-.5h3.75V3.5a.5.5 0 01.5-.5h.5z"}))},bft=yft;var l8={};$(l8,{icon:()=>Sft});var kZt=P(L());var wft=["title","titleId"];function wU(){return wU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function xft(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var _ft=function(t){var n=t.title,r=t.titleId,o=Oft(t,wft);return a("svg",wU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M8 7h3.5a.5.5 0 110 1H8v3.5a.5.5 0 11-1 0V8H3.5a.5.5 0 010-1H7V3.5a.5.5 0 011 0V7zm-.5-7C11.636 0 15 3.364 15 7.5S11.636 15 7.5 15 0 11.636 0 7.5 3.364 0 7.5 0zm0 .882a6.618 6.618 0 100 13.236A6.618 6.618 0 007.5.882z"}))},Sft=_ft;var s8={};$(s8,{icon:()=>Eft});var EZt=P(L());var jft=["title","titleId"];function OU(){return OU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function kft(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Pft=function(t){var n=t.title,r=t.titleId,o=Ift(t,jft);return a("svg",OU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 7V3.5a.5.5 0 00-1 0V7H3.5a.5.5 0 000 1H7v3.5a.5.5 0 101 0V8h3.5a.5.5 0 100-1H8zm-.5 8a7.5 7.5 0 110-15 7.5 7.5 0 010 15z"}))},Eft=Pft;var u8={};$(u8,{icon:()=>Rft});var AZt=P(L());var Cft=["title","titleId"];function xU(){return xU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Mft(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Tft=function(t){var n=t.title,r=t.titleId,o=Aft(t,Cft);return a("svg",xU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M13 8.5a.5.5 0 111 0V12a2 2 0 01-2 2H4a2 2 0 01-2-2V4a2 2 0 012-2h3.5a.5.5 0 010 1H4a1 1 0 00-1 1v8a1 1 0 001 1h8a1 1 0 001-1V8.5zm-5.12.339a.5.5 0 11-.706-.707L13.305 2H10.5a.5.5 0 110-1H14a1 1 0 011 1v3.5a.5.5 0 11-1 0V2.72L7.88 8.838z"}))},Rft=Tft;var c8={};$(c8,{icon:()=>Fft});var TZt=P(L());var zft=["title","titleId"];function _U(){return _U=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Dft(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Nft=function(t){var n=t.title,r=t.titleId,o=Lft(t,zft);return a("svg",_U({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8.171 5.15L10.114 7H1.556C1.249 7 1 7.224 1 7.5s.249.5.556.5h8.526l-1.91 1.82a.52.52 0 000 .77c.227.213.6.213.828 0l2.05-1.95a1.552 1.552 0 000-2.31L9 4.38a.617.617 0 00-.829 0 .52.52 0 000 .77z"}),a("path",{d:"M6.804 12.792A.993.993 0 016 11.82V10H5v1.826c0 .945.673 1.76 1.608 1.945l6 1.19A1.992 1.992 0 0015 13.016V1.984A2 2 0 0012.608.04l-6 1.19C5.673 1.415 5 2.23 5 3.175V5h1V3.18c0-.472.336-.879.804-.972l6-1.189A1 1 0 0114 1.991v11.018a.995.995 0 01-1.196.972l-6-1.19z"}))},Fft=Nft;var p8={};$(p8,{icon:()=>qft});var zZt=P(L());var Wft=["title","titleId"];function SU(){return SU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Hft(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Vft=function(t){var n=t.title,r=t.titleId,o=Bft(t,Wft);return a("svg",SU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 14A6 6 0 118 2a6 6 0 010 12zm0-1A5 5 0 108 3a5 5 0 000 10zm-.186-1.065A.785.785 0 017 11.12c0-.48.34-.82.814-.82.475 0 .809.34.809.82 0 .475-.334.815-.809.815zM5.9 6.317C5.96 5.168 6.755 4.4 8.048 4.4c1.218 0 2.091.759 2.091 1.8 0 .736-.36 1.304-1.03 1.707-.56.33-.717.56-.717 1.022v.305l-.1.1H7.47l-.1-.1v-.431c-.005-.646.302-1.104.987-1.514.527-.322.708-.59.708-1.047 0-.536-.416-.91-1.05-.91-.652 0-1.064.374-1.112.998l-.1.092H6l-.1-.105z"}))},qft=Vft;var f8={};$(f8,{icon:()=>Xft});var DZt=P(L());var Uft=["title","titleId"];function jU(){return jU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Jft(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Gft=function(t){var n=t.title,r=t.titleId,o=$ft(t,Uft);return a("svg",jU({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6.848 2.47a1 1 0 01-.318 1.378A7.284 7.284 0 003.75 7.01 3 3 0 111 10v-.027a3.521 3.521 0 01.01-.232c.009-.15.027-.36.062-.618.07-.513.207-1.22.484-2.014.552-1.59 1.67-3.555 3.914-4.957a1 1 0 011.378.318zm7 0a1 1 0 01-.318 1.378 7.283 7.283 0 00-2.78 3.162A3 3 0 118 10v-.027a3.521 3.521 0 01.01-.232c.009-.15.027-.36.062-.618.07-.513.207-1.22.484-2.014.552-1.59 1.67-3.555 3.914-4.957a1 1 0 011.378.318z"}))},Xft=Gft;var d8={};$(d8,{icon:()=>edt});var FZt=P(L());var Kft=["title","titleId"];function IU(){return IU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Qft(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Zft=function(t){var n=t.title,r=t.titleId,o=Yft(t,Kft);return a("svg",IU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M11.228 2.942a.5.5 0 11-.538.842A5 5 0 1013 8a.5.5 0 111 0 6 6 0 11-2.772-5.058zM14 1.5v3A1.5 1.5 0 0112.5 6h-3a.5.5 0 010-1h3a.5.5 0 00.5-.5v-3a.5.5 0 111 0z"}))},edt=Zft;var m8={};$(m8,{icon:()=>idt});var BZt=P(L());var tdt=["title","titleId"];function kU(){return kU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ndt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var odt=function(t){var n=t.title,r=t.titleId,o=rdt(t,tdt);return a("svg",kU({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M7.684.895L6.074.358a1 1 0 00-1.296.753L4.2 4H2.5a.5.5 0 000 1h1.626a4.007 4.007 0 00.11 2.359l-2.072-.345A1 1 0 001 8v1c.364 0 .706.097 1 .268V8l1 .167 1.859.31 2.163.36.478.08v6L2 14v-1.268A1.99 1.99 0 011 13v1a1 1 0 00.836.986l6 1c.108.018.22.018.328 0l6-1A1 1 0 0015 14v-1a1.99 1.99 0 01-1-.268V14l-5.5.917v-6l.478-.08 2.163-.36L13 8.166 14 8v1.268A1.99 1.99 0 0115 9V8a1 1 0 00-1.164-.986l-2.073.345A3.991 3.991 0 0011.874 5H13.5a.5.5 0 000-1h-1.7l-.578-2.89A1 1 0 009.925.359L8.316.895a1 1 0 01-.632 0zm2.88 6.664A3.013 3.013 0 0010.83 5H5.17a3.013 3.013 0 00.266 2.559L8 7.986l2.564-.427zM10.8 4H9.2L9 3l1.5-.5.3 1.5zM1 12a1 1 0 100-2 1 1 0 000 2zm14 0a1 1 0 100-2 1 1 0 000 2z"}))},idt=odt;var h8={};$(h8,{icon:()=>cdt});var VZt=P(L());var adt=["title","titleId"];function PU(){return PU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function sdt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var udt=function(t){var n=t.title,r=t.titleId,o=ldt(t,adt);return a("svg",PU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M11.994 4c1.059 0 1.924.818 2 1.856l.006.15v1.988a2.005 2.005 0 01-1.856 2L12 10H3.484l1.91 1.82a.52.52 0 010 .77.616.616 0 01-.829 0l-2.05-1.95a1.551 1.551 0 010-2.31l2.05-1.95a.617.617 0 01.83 0 .52.52 0 010 .77L3.45 9H12c.514-.003.935-.39.993-.888L13 7.994V6.006c0-.516-.388-.941-.888-1L11.994 5H9.5a.5.5 0 01-.09-.992L9.5 4h2.494z"}))},cdt=udt;var g8={};$(g8,{icon:()=>hdt});var UZt=P(L());var pdt=["title","titleId"];function EU(){return EU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ddt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var mdt=function(t){var n=t.title,r=t.titleId,o=fdt(t,pdt);return a("svg",EU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5.008 2H2.282c-.181 0-.245.002-.275.007-.005.03-.007.094-.007.275v11.436c0 .181.002.245.007.275.03.005.094.007.275.007h11.436c.181 0 .245-.002.275-.007.005-.03.007-.094.007-.275V4.62c0-.13-.001-.18-.004-.204a2.654 2.654 0 00-.141-.147L11.73 2.145a2.654 2.654 0 00-.147-.141A2.654 2.654 0 0011.38 2h-.388c.005.08.008.172.008.282v2.436c0 .446-.046.607-.134.77a.909.909 0 01-.378.378c-.163.088-.324.134-.77.134H6.282c-.446 0-.607-.046-.77-.134a.909.909 0 01-.378-.378C5.046 5.325 5 5.164 5 4.718V2.282c0-.11.003-.202.008-.282zM2.282 1h9.098c.259 0 .348.01.447.032a.87.87 0 01.273.113c.086.054.156.11.338.293l2.124 2.124c.182.182.239.252.293.338a.87.87 0 01.113.273c.023.1.032.188.032.447v9.098c0 .446-.046.607-.134.77a.909.909 0 01-.378.378c-.163.088-.324.134-.77.134H2.282c-.446 0-.607-.046-.77-.134a.909.909 0 01-.378-.378c-.088-.163-.134-.324-.134-.77V2.282c0-.446.046-.607.134-.77a.909.909 0 01.378-.378c.163-.088.324-.134.77-.134zM6 2.282v2.436c0 .181.002.245.007.275.03.005.094.007.275.007h3.436c.181 0 .245-.002.275-.007.005-.03.007-.094.007-.275V2.282c0-.181-.002-.245-.007-.275A2.248 2.248 0 009.718 2H6.282c-.181 0-.245.002-.275.007-.005.03-.007.094-.007.275zM8 12a2 2 0 110-4 2 2 0 010 4zm0-1a1 1 0 100-2 1 1 0 000 2z"}))},hdt=mdt;var v8={};$(v8,{icon:()=>wdt});var JZt=P(L());var gdt=["title","titleId"];function CU(){return CU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ydt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var bdt=function(t){var n=t.title,r=t.titleId,o=vdt(t,gdt);return a("svg",CU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M12.5 12a.5.5 0 110 1 .5.5 0 010-1zm-2 0a.5.5 0 110 1 .5.5 0 010-1zm-2 0a.5.5 0 110 1 .5.5 0 010-1zm4-2a.5.5 0 110 1 .5.5 0 010-1zm-2 0a.5.5 0 110 1 .5.5 0 010-1zm2-1a.5.5 0 110-1 .5.5 0 010 1zm0-3a.5.5 0 110 1 .5.5 0 010-1zm-2 2a.5.5 0 110 1 .5.5 0 010-1zm-2 0a.5.5 0 110 1 .5.5 0 010-1zm0 2a.5.5 0 110 1 .5.5 0 010-1zm-2 2a.5.5 0 110 1 .5.5 0 010-1zm-2 0a.5.5 0 110 1 .5.5 0 010-1zm2-2a.5.5 0 110 1 .5.5 0 010-1zm6-6a.5.5 0 110 1 .5.5 0 010-1zm-2 2a.5.5 0 110 1 .5.5 0 010-1z"}))},wdt=bdt;var y8={};$(y8,{icon:()=>jdt});var XZt=P(L());var Odt=["title","titleId"];function AU(){return AU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function _dt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Sdt=function(t){var n=t.title,r=t.titleId,o=xdt(t,Odt);return a("svg",AU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M11.271 11.978l3.872 3.873a.502.502 0 00.708 0 .502.502 0 000-.708l-3.565-3.564c2.38-2.747 2.267-6.923-.342-9.532-2.73-2.73-7.17-2.73-9.898 0-2.728 2.729-2.728 7.17 0 9.9a6.955 6.955 0 004.949 2.05.5.5 0 000-1 5.96 5.96 0 01-4.242-1.757 6.01 6.01 0 010-8.486c2.337-2.34 6.143-2.34 8.484 0a6.01 6.01 0 010 8.486.5.5 0 00.034.738z"}))},jdt=Sdt;var b8={};$(b8,{icon:()=>Cdt});var YZt=P(L());var Idt=["title","titleId"];function MU(){return MU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Pdt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Edt=function(t){var n=t.title,r=t.titleId,o=kdt(t,Idt);return a("svg",MU({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M11.875 3.418a6 6 0 10.707.707l-2.46 2.46-1.156 1.156a1 1 0 11-.707-.707l.757-.757a2 2 0 00-2.43 3.137.5.5 0 11-.707.707 3 3 0 013.86-4.567l.714-.714A4 4 0 108 12a.5.5 0 110 1 5 5 0 113.164-8.871l.71-.71zm.709-.709a7 7 0 10.707.707l.366-.366a.5.5 0 10-.707-.707l-.366.366z"}))},Cdt=Edt;var w8={};$(w8,{icon:()=>zdt});var ZZt=P(L());var Adt=["title","titleId"];function TU(){return TU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Tdt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Rdt=function(t){var n=t.title,r=t.titleId,o=Mdt(t,Adt);return a("svg",TU({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M13.657 3.05a.5.5 0 00-.707-.707l-.366.366A7 7 0 108 15a4.994 4.994 0 01-.597-1.03 6 6 0 114.471-10.552l-.71.71a5 5 0 10-4.08 8.788 5.027 5.027 0 01-.082-1.042A4.002 4.002 0 018 4a3.98 3.98 0 012.453.84l-.715.714a3 3 0 00-3.86 4.567.5.5 0 10.708-.707 2 2 0 012.43-3.137l-.757.757a1 1 0 10.707.707l1.155-1.155 2.46-2.46a5.972 5.972 0 011.39 3.277c.367.158.713.36 1.029.597 0-1.636-.57-3.271-1.71-4.584l.367-.366zM16 12a4 4 0 11-8 0 4 4 0 018 0zm-4 .5a.577.577 0 01-.57-.495l-.29-2.015a.867.867 0 111.718 0l-.288 2.015a.577.577 0 01-.57.495zm0 2.5a1 1 0 100-2 1 1 0 000 2z"}))},zdt=Rdt;var O8={};$(O8,{icon:()=>Wdt});var ter=P(L());var Ldt=["title","titleId"];function RU(){return RU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ndt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Fdt=function(t){var n=t.title,r=t.titleId,o=Ddt(t,Ldt);return a("svg",RU({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M13.657 3.05a.5.5 0 10-.707-.707l-.366.366A7 7 0 108 15a4.994 4.994 0 01-.597-1.03 6 6 0 114.471-10.552l-.71.71a5 5 0 10-4.08 8.788 5.028 5.028 0 01-.082-1.042A4.002 4.002 0 018 4a3.98 3.98 0 012.453.84l-.715.714a3 3 0 00-3.86 4.567.5.5 0 10.708-.707 2 2 0 012.43-3.137l-.757.757a1 1 0 10.707.707l1.155-1.155 2.46-2.46a5.972 5.972 0 011.39 3.277c.367.158.713.36 1.029.597 0-1.636-.57-3.271-1.71-4.584l.367-.366zM16 12a4 4 0 11-8 0 4 4 0 018 0zm-1.646-1.354a.5.5 0 010 .707l-2.5 2.5a.5.5 0 01-.708 0l-1-1a.5.5 0 01.708-.707l.646.647 2.146-2.147a.5.5 0 01.708 0z"}))},Wdt=Fdt;var x8={};$(x8,{icon:()=>Udt});var ner=P(L());var Bdt=["title","titleId"];function zU(){return zU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Vdt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var qdt=function(t){var n=t.title,r=t.titleId,o=Hdt(t,Bdt);return a("svg",zU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M4 6h1v1H4V6zm2 2H5V7h1v1zm0 1V8h1v1H6zm-1 1V9h1v1H5zm0 0v1H4v-1h1zm2 0h4v1H7v-1z"}),a("path",{fillRule:"evenodd",d:"M1 3a1 1 0 011-1h12a1 1 0 011 1v10a1 1 0 01-1 1H2a1 1 0 01-1-1V3zm1 1h12v9H2V4z",clipRule:"evenodd"}))},Udt=qdt;var _8={};$(_8,{icon:()=>Kdt});var ier=P(L());var $dt=["title","titleId"];function LU(){return LU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Gdt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Xdt=function(t){var n=t.title,r=t.titleId,o=Jdt(t,$dt);return a("svg",LU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5.134 7.031L8 12.764l2.866-5.733L8 2.016 5.134 7.03zM8 0l4 7-4 8-4-8 4-7z"}))},Kdt=Xdt;var S8={};$(S8,{icon:()=>t0t});var ler=P(L());var Ydt=["title","titleId"];function DU(){return DU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Zdt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var e0t=function(t){var n=t.title,r=t.titleId,o=Qdt(t,Ydt);return a("svg",DU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M3 6.81v6.38c0 .493.448.9.992.9h7.016c.543 0 .992-.406.992-.9V6.81c0-.493-.448-.9-.992-.9H3.992c-.543 0-.992.406-.992.9zM6 5v.91h3V5h2.008C12.108 5 13 5.818 13 6.81v6.38c0 1-.9 1.81-1.992 1.81H3.992C2.892 15 2 14.182 2 13.19V6.81C2 5.81 2.9 5 3.992 5H6zm1.997-3.552A.506.506 0 018 1.5v8a.5.5 0 01-1 0v-8a.51.51 0 010-.017L5.18 3.394a.52.52 0 01-.77 0 .617.617 0 010-.829L6.36.515a1.552 1.552 0 012.31 0l1.95 2.05c.214.229.214.601 0 .83a.52.52 0 01-.77 0L7.997 1.447z"}))},t0t=e0t;var j8={};$(j8,{icon:()=>a0t});var uer=P(L());var r0t=["title","titleId"];function NU(){return NU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function o0t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var i0t=function(t){var n=t.title,r=t.titleId,o=n0t(t,r0t);return a("svg",NU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M7.007.5a.5.5 0 011 0v2.024a.999.999 0 00.268-.227l1.027-1.233a.5.5 0 01.769.64L8.275 3.86a.999.999 0 01-.268.227v2.548l2.207-1.274c0-.114.02-.231.062-.346l.968-2.632a.5.5 0 11.938.345l-.554 1.506a.998.998 0 00-.062.346l1.753-1.012a.5.5 0 11.5.866l-1.753 1.012c.1.057.21.098.33.119l1.582.273a.5.5 0 11-.17.986l-2.764-.478a1 1 0 01-.33-.12L8.506 7.5l2.207 1.274a1 1 0 01.33-.119l2.764-.478a.5.5 0 11.17.986l-1.582.273a.999.999 0 00-.33.12l1.753 1.011a.5.5 0 11-.5.866l-1.753-1.012c0 .115.02.231.062.346l.554 1.506a.5.5 0 01-.938.345l-.968-2.632a.999.999 0 01-.062-.346L8.007 8.366v2.548c.098.058.19.133.268.227l1.796 2.155a.5.5 0 01-.769.64l-1.027-1.233a.999.999 0 00-.268-.226V14.5a.5.5 0 01-1 0v-2.024a.999.999 0 00-.269.227l-1.027 1.233a.5.5 0 01-.768-.64l1.795-2.155a.999.999 0 01.269-.227V8.366L4.8 9.64c0 .114-.02.231-.062.346l-.969 2.632a.5.5 0 11-.938-.345l.554-1.506a1 1 0 00.062-.346l-1.753 1.012a.5.5 0 01-.5-.866l1.753-1.012a.999.999 0 00-.33-.119l-1.582-.273a.5.5 0 01.17-.986l2.764.478c.12.02.232.062.33.12L6.508 7.5 4.3 6.226a.999.999 0 01-.33.119l-2.765.478a.5.5 0 11-.17-.986l1.582-.273a.999.999 0 00.33-.12L1.194 4.434a.5.5 0 11.5-.866l1.753 1.012c0-.114-.02-.231-.062-.346L2.83 2.727a.5.5 0 11.938-.345l.969 2.632a.999.999 0 01.062.346l2.207 1.274V4.086a1 1 0 01-.269-.227L4.943 1.704a.5.5 0 01.768-.64l1.027 1.233c.079.094.17.17.269.227V.5z"}))},a0t=i0t;var I8={};$(I8,{icon:()=>p0t});var per=P(L());var l0t=["title","titleId"];function FU(){return FU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function u0t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var c0t=function(t){var n=t.title,r=t.titleId,o=s0t(t,l0t);return a("svg",FU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M4.308 7h8.136c.307 0 .556.224.556.5s-.249.5-.556.5H4.308l4.096 4.096a.5.5 0 01-.707.707L3.454 8.561a1.494 1.494 0 01-.433-.925.454.454 0 010-.272c.03-.338.175-.666.433-.925l4.243-4.242a.5.5 0 11.707.707L4.308 7z",fillRule:"evenodd"}))},p0t=c0t;var k8={};$(k8,{icon:()=>g0t});var der=P(L());var f0t=["title","titleId"];function WU(){return WU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function m0t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var h0t=function(t){var n=t.title,r=t.titleId,o=d0t(t,f0t);return a("svg",WU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M11.692 7H3.556C3.249 7 3 7.224 3 7.5s.249.5.556.5h8.136l-4.096 4.096a.5.5 0 00.707.707l4.243-4.242c.258-.259.403-.587.433-.925a.454.454 0 000-.272 1.494 1.494 0 00-.433-.925L8.303 2.197a.5.5 0 10-.707.707L11.692 7z"}))},g0t=h0t;var P8={};$(P8,{icon:()=>O0t});var her=P(L());var v0t=["title","titleId"];function BU(){return BU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function b0t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var w0t=function(t){var n=t.title,r=t.titleId,o=y0t(t,v0t);return a("svg",BU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7 11.692V3.556C7 3.249 7.224 3 7.5 3s.5.249.5.556v8.136l4.096-4.096a.5.5 0 01.707.707l-4.242 4.243a1.494 1.494 0 01-.925.433.454.454 0 01-.272 0 1.494 1.494 0 01-.925-.433L2.197 8.303a.5.5 0 11.707-.707L7 11.692z"}))},O0t=w0t;var E8={};$(E8,{icon:()=>I0t});var ver=P(L());var x0t=["title","titleId"];function HU(){return HU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function S0t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var j0t=function(t){var n=t.title,r=t.titleId,o=_0t(t,x0t);return a("svg",HU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 4.207v8.237c0 .307-.224.556-.5.556s-.5-.249-.5-.556V4.207L2.904 8.303a.5.5 0 01-.707-.707l4.242-4.242a1.5 1.5 0 012.122 0l4.242 4.242a.5.5 0 11-.707.707L8 4.207z"}))},I0t=j0t;var C8={};$(C8,{icon:()=>A0t});var ber=P(L());var k0t=["title","titleId"];function VU(){return VU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function E0t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var C0t=function(t){var n=t.title,r=t.titleId,o=P0t(t,k0t);return a("svg",VU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7 12.786V3.2L3.604 6.596a.5.5 0 01-.708-.707l3.536-3.535a1.5 1.5 0 012.121 0l3.536 3.535a.5.5 0 01-.707.707L8 3.214v9.557l3.382-3.382a.5.5 0 01.707.707l-3.536 3.536a1.5 1.5 0 01-2.121 0l-3.536-3.536a.5.5 0 01.708-.707L7 12.786z"}))},A0t=C0t;var A8={};$(A8,{icon:()=>L0t});var Oer=P(L());var M0t=["title","titleId"];function qU(){return qU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function R0t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var z0t=function(t){var n=t.title,r=t.titleId,o=T0t(t,M0t);return a("svg",qU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M6 2a.86.86 0 00-.792.511l-1.33 2.924-3.128.446c-.71.102-1.001.976-.496 1.487l2.313 2.336-.563 3.268A.877.877 0 002.864 14c.142 0 .289-.036.429-.116L6 12.342l2.707 1.542c.14.08.287.116.43.116a.877.877 0 00.859-1.027l-.563-3.269 2.313-2.336c.505-.511.214-1.385-.496-1.487l-3.128-.446-1.33-2.923A.86.86 0 006 2m8 8h2v1h-2v2h-1v-2h-2v-1h2V8h1v2zM6 3c.073 0 .095.049.104.07l1.267 2.783.162.356.387.055 2.978.425c.017.002.071.01.095.08a.116.116 0 01-.029.126L8.762 9.121l-.259.261.063.362.535 3.112c.007.04 0 .07-.023.098a.127.127 0 01-.091.046.106.106 0 01-.055-.016l-2.578-1.469L6 11.314l-.354.201-2.579 1.469a.103.103 0 01-.054.016.127.127 0 01-.091-.046c-.023-.028-.03-.058-.024-.098l.536-3.112.063-.362-.259-.261-2.202-2.226a.116.116 0 01-.029-.126.108.108 0 01.094-.08l2.98-.425.386-.055.162-.356 1.267-2.786C5.905 3.05 5.927 3 6 3z"}))},L0t=z0t;var M8={};$(M8,{icon:()=>B0t});var _er=P(L());var D0t=["title","titleId"];function UU(){return UU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function F0t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var W0t=function(t){var n=t.title,r=t.titleId,o=N0t(t,D0t);return a("svg",UU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M14 10h2v1h-2v2h-1v-2h-2v-1h2V8h1v2zM6 2a.86.86 0 00-.792.511l-1.33 2.924-3.128.446c-.71.102-1.001.976-.496 1.487l2.313 2.336-.563 3.268A.877.877 0 002.864 14c.142 0 .289-.036.429-.116L6 12.342l2.707 1.542c.14.08.287.116.43.116a.877.877 0 00.859-1.027l-.563-3.269 2.313-2.336c.505-.511.214-1.385-.496-1.487l-3.128-.446-1.33-2.923A.86.86 0 006 2"}))},B0t=W0t;var T8={};$(T8,{icon:()=>$0t});var jer=P(L());var H0t=["title","titleId"];function $U(){return $U=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function q0t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var U0t=function(t){var n=t.title,r=t.titleId,o=V0t(t,H0t);return a("svg",$U({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M8 2a.86.86 0 00-.792.511l-1.33 2.924-3.128.446c-.71.102-1.001.976-.496 1.487l2.313 2.336-.563 3.268A.877.877 0 004.864 14c.142 0 .289-.036.429-.116L8 12.342l2.707 1.542c.14.08.287.116.43.116a.877.877 0 00.859-1.027l-.563-3.269 2.313-2.336c.505-.511.214-1.385-.496-1.487l-3.128-.446-1.33-2.923A.86.86 0 008 2m0 1c.073 0 .095.049.104.07l1.267 2.783.162.356.387.055 2.978.425c.017.002.071.01.095.08a.116.116 0 01-.029.126l-2.202 2.226-.259.261.063.362.535 3.112c.007.04 0 .07-.023.098a.127.127 0 01-.091.046.106.106 0 01-.055-.016l-2.578-1.469L8 11.314l-.354.201-2.579 1.469a.103.103 0 01-.054.016.127.127 0 01-.091-.046c-.023-.028-.03-.058-.024-.098l.536-3.112.063-.362-.259-.261-2.202-2.226a.116.116 0 01-.029-.126.108.108 0 01.094-.08l2.98-.425.386-.055.162-.356 1.267-2.786C7.905 3.05 7.927 3 8 3"}))},$0t=U0t;var R8={};$(R8,{icon:()=>Y0t});var ker=P(L());var J0t=["title","titleId"];function JU(){return JU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function X0t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var K0t=function(t){var n=t.title,r=t.titleId,o=G0t(t,J0t);return a("svg",JU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M6 2a.86.86 0 00-.792.511l-1.33 2.924-3.128.446c-.71.102-1.001.976-.496 1.487l2.313 2.336-.563 3.268A.877.877 0 002.864 14c.142 0 .289-.036.429-.116L6 12.342l2.707 1.542c.14.08.287.116.43.116a.877.877 0 00.859-1.027l-.563-3.269 2.313-2.336c.505-.511.214-1.385-.496-1.487l-3.128-.446-1.33-2.923A.86.86 0 006 2m0 1c.073 0 .095.049.104.07l1.267 2.783.162.356.387.055 2.978.425c.017.002.071.01.095.08a.116.116 0 01-.029.126L8.762 9.121l-.259.261.063.362.535 3.112c.007.04 0 .07-.023.098a.127.127 0 01-.091.046.106.106 0 01-.055-.016l-2.578-1.469L6 11.314l-.354.201-2.579 1.469a.103.103 0 01-.054.016.127.127 0 01-.091-.046c-.023-.028-.03-.058-.024-.098l.536-3.112.063-.362-.259-.261-2.202-2.226a.116.116 0 01-.029-.126.108.108 0 01.094-.08l2.98-.425.386-.055.162-.356 1.267-2.786C5.905 3.05 5.927 3 6 3"}))},Y0t=K0t;var z8={};$(z8,{icon:()=>r1t});var Eer=P(L());var Q0t=["title","titleId"];function GU(){return GU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function e1t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var t1t=function(t){var n=t.title,r=t.titleId,o=Z0t(t,Q0t);return a("svg",GU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M8 2a.86.86 0 00-.792.511l-1.33 2.924-3.128.446c-.71.102-1.001.976-.496 1.487l2.313 2.336-.563 3.268A.877.877 0 004.864 14c.142 0 .289-.036.429-.116L8 12.342l2.707 1.542c.14.08.287.116.43.116a.877.877 0 00.859-1.027l-.563-3.269 2.313-2.336c.505-.511.214-1.385-.496-1.487l-3.128-.446-1.33-2.923A.86.86 0 008 2"}))},r1t=t1t;var L8={};$(L8,{icon:()=>l1t});var Aer=P(L());var n1t=["title","titleId"];function XU(){return XU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function i1t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var a1t=function(t){var n=t.title,r=t.titleId,o=o1t(t,n1t);return a("svg",XU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M6 2a.86.86 0 00-.792.511l-1.33 2.924-3.128.446c-.71.102-1.001.976-.496 1.487l2.313 2.336-.563 3.268A.877.877 0 002.864 14c.142 0 .289-.036.429-.116L6 12.342l2.707 1.542c.14.08.287.116.43.116a.877.877 0 00.859-1.027l-.563-3.269 2.313-2.336c.505-.511.214-1.385-.496-1.487l-3.128-.446-1.33-2.923A.86.86 0 006 2"}))},l1t=a1t;var D8={};$(D8,{icon:()=>f1t});var Ter=P(L());var s1t=["title","titleId"];function KU(){return KU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function c1t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var p1t=function(t){var n=t.title,r=t.titleId,o=u1t(t,s1t);return a("svg",KU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M6 2a.86.86 0 00-.792.511l-1.33 2.924-3.128.446c-.71.102-1.001.976-.496 1.487l2.313 2.336-.563 3.268A.877.877 0 002.864 14c.142 0 .289-.036.429-.116L6 12.342l2.707 1.542c.14.08.287.116.43.116a.877.877 0 00.859-1.027l-.563-3.269 2.313-2.336c.505-.511.214-1.385-.496-1.487l-3.128-.446-1.33-2.923A.86.86 0 006 2m0 1c.073 0 .095.049.104.07l1.267 2.783.162.356.387.055 2.978.425c.017.002.071.01.095.08a.116.116 0 01-.029.126L8.762 9.121l-.259.261.063.362.535 3.112c.007.04 0 .07-.023.098a.127.127 0 01-.091.046.106.106 0 01-.055-.016l-2.578-1.469L6 11.314l-.354.201-2.579 1.469a.103.103 0 01-.054.016.127.127 0 01-.091-.046c-.023-.028-.03-.058-.024-.098l.536-3.112.063-.362-.259-.261-2.202-2.226a.116.116 0 01-.029-.126.108.108 0 01.094-.08l2.98-.425.386-.055.162-.356 1.267-2.786C5.905 3.05 5.927 3 6 3zm10 7v1h-5v-1h5z"}))},f1t=p1t;var N8={};$(N8,{icon:()=>v1t});var zer=P(L());var d1t=["title","titleId"];function YU(){return YU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function h1t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var g1t=function(t){var n=t.title,r=t.titleId,o=m1t(t,d1t);return a("svg",YU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M6 2a.86.86 0 01.792.511l1.33 2.924 3.128.446c.71.102 1.001.976.496 1.487L9.433 9.704l.563 3.268A.877.877 0 019.136 14a.862.862 0 01-.429-.116L6 12.342l-2.707 1.542a.862.862 0 01-.43.116.877.877 0 01-.859-1.027l.563-3.269L.254 7.368C-.25 6.857.04 5.983.75 5.88l3.128-.446 1.33-2.923A.86.86 0 016 2zm10 8v1h-5v-1h5z"}))},v1t=g1t;var F8={};$(F8,{icon:()=>x1t});var Der=P(L());var y1t=["title","titleId"];function QU(){return QU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function w1t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var O1t=function(t){var n=t.title,r=t.titleId,o=b1t(t,y1t);return a("svg",QU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M8 14v-4h1v4h5V5h1v9a1 1 0 01-1 1H2a1 1 0 01-1-1v-2h1v2h6zm4.853-10.146l-2.999 3a1.5 1.5 0 01-2.538 1.568l-2.714.904L4 9.527a1.5 1.5 0 11-.316-.948L7 7.473a1.5 1.5 0 012.146-1.327l3-3a1.5 1.5 0 11.707.707z"}))},x1t=O1t;var W8={};$(W8,{icon:()=>k1t});var Fer=P(L());var _1t=["title","titleId"];function ZU(){return ZU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function j1t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var I1t=function(t){var n=t.title,r=t.titleId,o=S1t(t,_1t);return a("svg",ZU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M4 2h8a2 2 0 012 2v8a2 2 0 01-2 2H4a2 2 0 01-2-2V4a2 2 0 012-2zm0 1a1 1 0 00-1 1v8a1 1 0 001 1h8a1 1 0 001-1V4a1 1 0 00-1-1H4z",fillRule:"evenodd"}))},k1t=I1t;var B8={};$(B8,{icon:()=>M1t});var Ber=P(L());var P1t=["title","titleId"];function e$(){return e$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function C1t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var A1t=function(t){var n=t.title,r=t.titleId,o=E1t(t,P1t);return a("svg",e$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("rect",{width:12,height:12,x:2,y:2,rx:2,fillRule:"evenodd"}))},M1t=A1t;var H8={};$(H8,{icon:()=>D1t});var Ver=P(L());var T1t=["title","titleId"];function t$(){return t$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function z1t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var L1t=function(t){var n=t.title,r=t.titleId,o=R1t(t,T1t);return a("svg",t$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M12.259 3.034A1.001 1.001 0 0012 3H4a1 1 0 00-1 1v8c0 .09.012.176.034.259l9.225-9.225zm.707.707l-9.225 9.225c.083.022.17.034.259.034h8a1 1 0 001-1V4c0-.09-.012-.176-.034-.259zM4 2h8a2 2 0 012 2v8a2 2 0 01-2 2H4a2 2 0 01-2-2V4a2 2 0 012-2z"}))},D1t=L1t;var V8={};$(V8,{icon:()=>H1t});var Uer=P(L());var N1t=["title","titleId"];function r$(){return r$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function W1t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var B1t=function(t){var n=t.title,r=t.titleId,o=F1t(t,N1t);return a("svg",r$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fillRule:"evenodd",transform:"translate(0 2)"},a("path",{fillRule:"nonzero",d:"M2 6a1 1 0 01-1-1V2a1 1 0 011-1h12a1 1 0 011 1v3a1 1 0 01-1 1H2zm13 2v3a1 1 0 01-1 1H2a1 1 0 01-1-1V8a1 1 0 011-1h12a1 1 0 011 1zm1-3V2a2 2 0 00-2-2H2a2 2 0 00-2 2v3c0 .601.271 1.133.69 1.5C.271 6.867 0 7.399 0 8v3a2 2 0 002 2h12a2 2 0 002-2V8c0-.601-.271-1.133-.689-1.5.418-.367.689-.899.689-1.5z"}),a("circle",{cx:4.5,cy:9.5,r:1.5}),a("circle",{cx:4.5,cy:3.5,r:1.5}),a("path",{d:"M12 8h1v3h-1zM10 8h1v3h-1zM12 2h1v3h-1zM10 2h1v3h-1z"})))},H1t=B1t;var q8={};$(q8,{icon:()=>J1t});var Jer=P(L());var V1t=["title","titleId"];function n$(){return n$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function U1t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var $1t=function(t){var n=t.title,r=t.titleId,o=q1t(t,V1t);return a("svg",n$({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M9.297 3L8.93 5.102h1.351l-.32 1.828H8.609l-.656 3.883c-.036.265-.02.466.05.601.071.135.247.208.528.219.11.005.334-.008.672-.04L9.016 13.5a4.16 4.16 0 01-1.383.195c-.797-.01-1.393-.244-1.79-.703-.395-.458-.557-1.08-.484-1.867l.688-4.195H5l.313-1.828h1.046L6.727 3h2.57z"}))},J1t=$1t;var U8={};$(U8,{icon:()=>Q1t});var Xer=P(L());var G1t=["title","titleId"];function o$(){return o$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function K1t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Y1t=function(t){var n=t.title,r=t.titleId,o=X1t(t,G1t);return a("svg",o$({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M6 2H1v12h3V7a1 1 0 011-1h5a1 1 0 011 1v1h4V4H7c-.621 0-1-.379-1-1V2zm10 6v6a1 1 0 01-1 1H1a1 1 0 01-1-1V2a1 1 0 011-1h5.25a.75.75 0 01.75.75l-.004.206C6.99 2.317 6.974 3 7 3h8a1 1 0 011 1v4zm-1 1h-4a1 1 0 01-1-1V7H5v7h10V9zM2 4.5a.5.5 0 01.5-.5h2a.5.5 0 010 1h-2a.5.5 0 01-.5-.5zM6.5 9a.5.5 0 000 1h2a.5.5 0 000-1h-2z"}))},Q1t=Y1t;var $8={};$($8,{icon:()=>nmt});var Yer=P(L());var Z1t=["title","titleId"];function i$(){return i$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function tmt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var rmt=function(t){var n=t.title,r=t.titleId,o=emt(t,Z1t);return a("svg",i$({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M12 8a4 4 0 11-8 0 4 4 0 018 0zM7.25.75a.75.75 0 011.5 0v1.5a.75.75 0 11-1.5 0V.75zm0 13a.75.75 0 011.5 0v1.5a.75.75 0 01-1.5 0v-1.5zm5.346-11.407a.75.75 0 011.06 1.06l-1.06 1.061a.75.75 0 01-1.06-1.06l1.06-1.06zm-9.192 9.193a.75.75 0 111.06 1.06l-1.06 1.06a.75.75 0 01-1.06-1.06l1.06-1.06zM.75 8.75a.75.75 0 010-1.5h1.5a.75.75 0 110 1.5H.75zm13 0a.75.75 0 010-1.5h1.5a.75.75 0 010 1.5h-1.5zM2.343 3.404a.75.75 0 111.06-1.06l1.061 1.06a.75.75 0 01-1.06 1.06l-1.06-1.06zm9.193 9.192a.75.75 0 011.06-1.06l1.06 1.06a.75.75 0 01-1.06 1.06l-1.06-1.06z"}))},nmt=rmt;var J8={};$(J8,{icon:()=>smt});var Zer=P(L());var omt=["title","titleId"];function a$(){return a$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function amt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var lmt=function(t){var n=t.title,r=t.titleId,o=imt(t,omt);return a("svg",a$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("rect",{x:2,y:2,width:12,height:12,rx:3}),a("rect",{className:"euiSwatchInput__stroke",x:2.5,y:2.5,width:11,height:11,rx:2}))},smt=lmt;var G8={};$(G8,{icon:()=>dmt});var ttr=P(L());var umt=["title","titleId"];function l$(){return l$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function pmt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var fmt=function(t){var n=t.title,r=t.titleId,o=cmt(t,umt);return a("svg",l$({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M10.8 0H2a1 1 0 00-1 1v8l1-1V1h8v3.5a.5.5 0 00.5.5H14v10H2v-1a3.5 3.5 0 013.5-3.5H8V13l3-3-3-3v2.5H5.5A4.5 4.5 0 001 14v1a1 1 0 001 1h12a1 1 0 001-1V4.429c0-.256-.098-.503-.274-.689l-3.2-3.428A1.002 1.002 0 0010.8 0z"}))},dmt=fmt;var X8={};$(X8,{icon:()=>ymt});var ntr=P(L());var mmt=["title","titleId"];function s$(){return s$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function gmt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var vmt=function(t){var n=t.title,r=t.titleId,o=hmt(t,mmt);return a("svg",s$({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M1 1v14h14V1H1zM0 0h16v16H0V0zm9 1v14h1V1H9zM3 3.5h4v-1H3v1zm0 3h4v-1H3v1zm0 3h4v-1H3v1z"}))},ymt=vmt;var K8={};$(K8,{icon:()=>_mt});var itr=P(L());var bmt=["title","titleId"];function u$(){return u$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Omt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var xmt=function(t){var n=t.title,r=t.titleId,o=wmt(t,bmt);return a("svg",u$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M16 3v11a2 2 0 01-2 2H2a2 2 0 01-2-2V2a2 2 0 012-2h12a2 2 0 012 2v1zm-1 0V2a1 1 0 00-1-1H2a1 1 0 00-1 1v1h14zm0 1H1v10a1 1 0 001 1h12a1 1 0 001-1V4zM4.496 7a.5.5 0 010 1H2.495a.5.5 0 010-1h2.001zm5.218 0c.158 0 .286.224.286.5s-.128.5-.286.5H6.286C6.128 8 6 7.776 6 7.5s.128-.5.286-.5h3.428zM4.496 5a.5.5 0 010 1H2.495a.5.5 0 010-1h2.001zm5.218 0c.158 0 .286.224.286.5s-.128.5-.286.5H6.286C6.128 6 6 5.776 6 5.5s.128-.5.286-.5h3.428zM4.496 9a.5.5 0 010 1H2.495a.5.5 0 010-1h2.001zm5.218 0c.158 0 .286.224.286.5s-.128.5-.286.5H6.286C6.128 10 6 9.776 6 9.5s.128-.5.286-.5h3.428zm-5.218 2a.5.5 0 010 1H2.495a.5.5 0 010-1h2.001zm5.218 0c.158 0 .286.224.286.5s-.128.5-.286.5H6.286C6.128 12 6 11.776 6 11.5s.128-.5.286-.5h3.428zm-5.218 2a.5.5 0 010 1H2.495a.5.5 0 010-1h2.001zm9-6a.5.5 0 010 1h-2.001a.5.5 0 010-1h2.001zm0-2a.5.5 0 010 1h-2.001a.5.5 0 010-1h2.001zm0 4a.5.5 0 010 1h-2.001a.5.5 0 010-1h2.001zm0 2a.5.5 0 010 1h-2.001a.5.5 0 010-1h2.001zm0 2a.5.5 0 010 1h-2.001a.5.5 0 010-1h2.001zm-3.782 0c.158 0 .286.224.286.5s-.128.5-.286.5H6.286C6.128 14 6 13.776 6 13.5s.128-.5.286-.5h3.428z"}))},_mt=xmt;var Y8={};$(Y8,{icon:()=>Pmt});var ltr=P(L());var Smt=["title","titleId"];function c$(){return c$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Imt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var kmt=function(t){var n=t.title,r=t.titleId,o=jmt(t,Smt);return a("svg",c$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M16 3v11a2 2 0 01-2 2H2a2 2 0 01-2-2V2a2 2 0 012-2h12a2 2 0 012 2v1zm-1 0V2a1 1 0 00-1-1H2a1 1 0 00-1 1v1h14zm0 1H1v10a1 1 0 001 1h12a1 1 0 001-1V4zM4.5 7a.5.5 0 010 1H2.496a.5.5 0 110-1H4.5zm9 0a.5.5 0 110 1h-6a.5.5 0 010-1h6zm-9 4a.5.5 0 110 1H2.496a.5.5 0 110-1H4.5zm9 0a.5.5 0 110 1h-6a.5.5 0 110-1h6z"}))},Pmt=kmt;var Q8={};$(Q8,{icon:()=>Tmt});var utr=P(L());var Emt=["title","titleId"];function p$(){return p$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Amt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Mmt=function(t){var n=t.title,r=t.titleId,o=Cmt(t,Emt);return a("svg",p$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M16 3v11a2 2 0 01-2 2H2a2 2 0 01-2-2V2a2 2 0 012-2h12a2 2 0 012 2v1zm-1 0V2a1 1 0 00-1-1H2a1 1 0 00-1 1v1h14zm0 1H1v10a1 1 0 001 1h12a1 1 0 001-1V4zM4.5 6a.5.5 0 010 1H2.496a.5.5 0 110-1H4.5zm5.214 0c.158 0 .286.224.286.5s-.128.5-.286.5H6.286C6.128 7 6 6.776 6 6.5s.128-.5.286-.5h3.428zM4.5 9a.5.5 0 010 1H2.496a.5.5 0 110-1H4.5zm5.214 0c.158 0 .286.224.286.5s-.128.5-.286.5H6.286C6.128 10 6 9.776 6 9.5s.128-.5.286-.5h3.428zM4.5 12a.5.5 0 110 1H2.496a.5.5 0 110-1H4.5zm9-6a.5.5 0 110 1h-2.004a.5.5 0 010-1H13.5zm0 3a.5.5 0 110 1h-2.004a.5.5 0 010-1H13.5zm0 3a.5.5 0 110 1h-2.004a.5.5 0 010-1H13.5zm-3.786 0c.158 0 .286.224.286.5s-.128.5-.286.5H6.286C6.128 13 6 12.776 6 12.5s.128-.5.286-.5h3.428z"}))},Tmt=Mmt;var Z8={};$(Z8,{icon:()=>Nmt});var ptr=P(L());var Rmt=["title","titleId"];function f$(){return f$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Lmt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Dmt=function(t){var n=t.title,r=t.titleId,o=zmt(t,Rmt);return a("svg",f$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6.254 14.97L.996 9.712c-.315-.316-.397-.463-.45-.64a.909.909 0 010-.534c.053-.177.135-.324.45-.64L7.43 1.466c.182-.183.252-.24.338-.293a.87.87 0 01.273-.113c.099-.023.188-.032.446-.032h5.173c.445 0 .607.046.77.133.162.087.29.214.377.377.088.162.134.324.136.769l.015 5.15c0 .259-.009.348-.032.448a.87.87 0 01-.112.273c-.054.087-.111.157-.294.34L8.067 14.97c-.315.315-.462.396-.639.45a.909.909 0 01-.535 0c-.176-.054-.324-.135-.639-.45zm1.106-.707l6.453-6.453c.092-.092.126-.128.141-.147.003-.025.004-.074.004-.204l-.015-5.15c0-.181-.003-.245-.009-.275a2.247 2.247 0 00-.274-.007H8.487c-.13 0-.179.001-.203.004-.02.015-.055.05-.147.141L1.703 8.606a2.248 2.248 0 00-.189.2c.017.024.061.07.19.198l5.257 5.259c.128.128.175.171.2.188.024-.017.071-.06.2-.188zm4.972-10.607a2 2 0 11-2.828 2.828 2 2 0 012.828-2.828zm-.707.707a1 1 0 10-1.414 1.414 1 1 0 001.414-1.414zM6.807 11.28L4.686 9.159a.5.5 0 11.707-.707l2.121 2.12a.5.5 0 11-.707.708zm1.414-1.414l-2.12-2.122a.5.5 0 11.706-.707L8.928 9.16a.5.5 0 11-.707.707z"}))},Nmt=Dmt;var ex={};$(ex,{icon:()=>Vmt});var dtr=P(L());var Fmt=["title","titleId"];function d$(){return d$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Bmt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Hmt=function(t){var n=t.title,r=t.titleId,o=Wmt(t,Fmt);return a("svg",d$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.553 1.776a.5.5 0 01.894 0l4 8a.5.5 0 01.053.235c-.004.15-.026.396-.084.705a5.538 5.538 0 01-.505 1.512C11.189 13.638 9.906 14.5 8 14.5c-1.906 0-3.19-.862-3.91-2.272a5.538 5.538 0 01-.506-1.512 4.672 4.672 0 01-.084-.705.5.5 0 01.053-.235l4-8zm-3.046 8.329c.009.106.027.253.06.429.079.424.213.848.413 1.238C5.537 12.862 6.487 13.5 8 13.5c1.513 0 2.463-.638 3.02-1.728.2-.39.334-.814.413-1.238.033-.176.051-.323.06-.43L8 3.119l-3.493 6.987z"}))},Vmt=Hmt;var tx={};$(tx,{icon:()=>Gmt});var htr=P(L());var qmt=["title","titleId"];function m$(){return m$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function $mt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Jmt=function(t){var n=t.title,r=t.titleId,o=Umt(t,qmt);return a("svg",m$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8.5 15a3.5 3.5 0 01-1.75-6.532L7 8.324V2.5A1.496 1.496 0 019.908 2H8.5v1H10v1H8.5v1H10v1H8.5v1H10v1.324l.25.144A3.5 3.5 0 018.5 15M11 7.758V2.5a2.5 2.5 0 10-5 0v5.258a4.5 4.5 0 105 0"}),a("path",{d:"M8.5 9a2.5 2.5 0 110 5 2.5 2.5 0 010-5"}))},Gmt=Jmt;var rx={};$(rx,{icon:()=>Zmt});var vtr=P(L());var Xmt=["title","titleId"];function h$(){return h$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ymt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Qmt=function(t){var n=t.title,r=t.titleId,o=Kmt(t,Xmt);return a("svg",h$({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M12.809 8.807a4.5 4.5 0 01-5.572-5.75A5 5 0 003.04 9.31a.5.5 0 01-.966.259 6 6 0 015.672-7.553 4.5 4.5 0 116.117 6.313 6.002 6.002 0 01-7.803 5.409.5.5 0 11.303-.954 5.001 5.001 0 006.445-3.979zM11.859 5H13.5a.5.5 0 000-1H12V1.5a.5.5 0 00-1 0v3a.5.5 0 00.5.5h.36z"}),a("path",{d:"M3.757 15.848l-.776-2.897a1.5 1.5 0 011.06-1.838l2.898-.776a.5.5 0 11.259.966l-2.898.776a.5.5 0 00-.353.613l.776 2.898a.5.5 0 01-.966.258z"}))},Zmt=Qmt;var nx={};$(nx,{icon:()=>oht});var btr=P(L());var eht=["title","titleId"];function g$(){return g$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function rht(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var nht=function(t){var n=t.title,r=t.titleId,o=tht(t,eht);return a("svg",g$({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M7 4.5a.5.5 0 001 0V4h1a1 1 0 001-1V1a1 1 0 00-1-1H6a1 1 0 00-1 1v2a1 1 0 001 1h1v.5zM9 1H6v2h3V1zM2 7.5a.5.5 0 111 0 .5.5 0 01-1 0zM2.5 9a1.5 1.5 0 01-1.415-1H.5a.5.5 0 010-1h.585a1.5 1.5 0 012.83 0h2.17a1.5 1.5 0 012.83 0h2.17a1.5 1.5 0 012.83 0h.585a.5.5 0 010 1h-.585a1.5 1.5 0 01-2.83 0h-2.17a1.5 1.5 0 01-2.83 0h-2.17A1.5 1.5 0 012.5 9zM13 7.5a.5.5 0 10-1 0 .5.5 0 001 0zm-5 0a.5.5 0 10-1 0 .5.5 0 001 0zM2.5 10a.5.5 0 00-.5.5v.5H1a1 1 0 00-1 1v2a1 1 0 001 1h3a1 1 0 001-1v-2a1 1 0 00-1-1H3v-.5a.5.5 0 00-.5-.5zM4 14v-2H1v2h3zm8-3.5a.5.5 0 011 0v.5h1a1 1 0 011 1v2a1 1 0 01-1 1h-3a1 1 0 01-1-1v-2a1 1 0 011-1h1v-.5zm2 2.5v1h-3v-2h3v1z"}))},oht=nht;var ox={};$(ox,{icon:()=>uht});var Otr=P(L());var iht=["title","titleId"];function v$(){return v$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function lht(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var sht=function(t){var n=t.title,r=t.titleId,o=aht(t,iht);return a("svg",v$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M13.923 8A5.93 5.93 0 008 2.077 5.93 5.93 0 002.077 8a5.93 5.93 0 006.296 5.912c.328-.021.625.227.625.556a.504.504 0 01-.458.511 7 7 0 116.43-6.333c-.036.398-.487.58-.817.354a.595.595 0 01-.248-.54c.012-.152.018-.305.018-.46zm1.684 3.2l-4.32-3.055c-.56-.396-1.287.059-1.287.8v6.108c0 .74.726 1.196 1.287.8l4.32-3.055c.524-.37.524-1.228 0-1.598zM7.462 7.462H4.769a.539.539 0 000 1.076H8A.539.539 0 008.538 8V3.692a.539.539 0 00-1.076 0v3.77z",clipRule:"evenodd"}))},uht=sht;var ix={};$(ix,{icon:()=>mht});var _tr=P(L());var cht=["title","titleId"];function y$(){return y$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function fht(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var dht=function(t){var n=t.title,r=t.titleId,o=pht(t,cht);return a("svg",y$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M9.075 6.953a.5.5 0 11-.707.707 1.5 1.5 0 00-2.122 0L4.125 9.782a1.5 1.5 0 102.121 2.121l1.145-1.144a.5.5 0 01.707.707L6.953 12.61a2.5 2.5 0 11-3.535-3.535l2.121-2.122a2.5 2.5 0 013.536 0zm3.535-3.535a2.5 2.5 0 010 3.535L10.49 9.075a2.5 2.5 0 01-3.536 0 .5.5 0 11.707-.708 1.5 1.5 0 002.122 0l2.121-2.12a1.5 1.5 0 10-2.121-2.122L8.637 5.269a.5.5 0 11-.707-.707l1.145-1.144a2.5 2.5 0 013.535 0z"}))},mht=dht;var ax={};$(ax,{icon:()=>bht});var jtr=P(L());var hht=["title","titleId"];function b$(){return b$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function vht(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var yht=function(t){var n=t.title,r=t.titleId,o=ght(t,hht);return a("svg",b$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M8.15 3.392c2.797 0 4.524 1.644 4.517 4.289.007 1.816-.708 2.893-2.21 3.004-.908.076-1.081-.287-1.157-.725h-.041c-.163.42-.964.732-1.744.683-1.053-.065-2.082-.842-2.09-2.572.008-1.72 1.071-2.441 1.959-2.586.804-.135 1.598.158 1.723.462h.051v-.386h1.195v3.452c.007.3.128.425.304.425.4 0 .677-.583.673-1.861.004-2.376-1.705-2.914-3.187-2.914-2.34 0-3.415 1.522-3.422 3.387.007 2.127 1.22 3.277 3.433 3.277.808 0 1.598-.176 2.006-.349l.393 1.122c-.435.27-1.419.508-2.493.508-2.98 0-4.723-1.66-4.727-4.496.004-2.804 1.748-4.72 4.817-4.72zM7.964 6.79c-.76 0-1.185.459-1.188 1.24.003.683.3 1.332 1.202 1.332.821 0 1.094-.473 1.077-1.343-.004-.718-.204-1.23-1.091-1.23z"}))},bht=yht;var lx={};$(lx,{icon:()=>Sht});var ktr=P(L());var wht=["title","titleId"];function w$(){return w$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function xht(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var _ht=function(t){var n=t.title,r=t.titleId,o=Oht(t,wht);return a("svg",w$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M4.392 12V4h2.713v1.14h-1.21v5.72h1.21V12H4.392zm7.692-8v8H9.37v-1.14h1.209V5.14H9.37V4h2.714z"}))},Sht=_ht;var sx={};$(sx,{icon:()=>Eht});var Etr=P(L());var jht=["title","titleId"];function O$(){return O$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function kht(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Pht=function(t){var n=t.title,r=t.titleId,o=Iht(t,jht);return a("svg",O$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M12 4H4v8h8V4zM8.5 5.5h-3v5h3v-5z"}))},Eht=Pht;var ux={};$(ux,{icon:()=>Rht});var Atr=P(L());var Cht=["title","titleId"];function x$(){return x$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Mht(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Tht=function(t){var n=t.title,r=t.titleId,o=Aht(t,Cht);return a("svg",x$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M8 13A5 5 0 118 3a5 5 0 010 10zm-2.828-2.172a4 4 0 015.656-5.656c.004.013-5.645 5.674-5.656 5.656z"}))},Rht=Tht;var cx={};$(cx,{icon:()=>Fht});var Ttr=P(L());var zht=["title","titleId"];function _$(){return _$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Dht(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Nht=function(t){var n=t.title,r=t.titleId,o=Lht(t,zht);return a("svg",_$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M11.333 7.027H9.375c-.056-.708-.48-1.187-1.222-1.187-.972 0-1.5.806-1.5 2.16 0 1.43.545 2.16 1.486 2.16.708 0 1.139-.415 1.236-1.08l1.958.015C11.236 10.418 10.181 12 8.097 12c-1.958 0-3.43-1.41-3.43-4 0-2.6 1.514-4 3.43-4 1.792 0 3.084 1.095 3.236 3.027z"}))},Fht=Nht;var px={};$(px,{icon:()=>qht});var ztr=P(L());var Wht=["title","titleId"];function S$(){return S$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Hht(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Vht=function(t){var n=t.title,r=t.titleId,o=Bht(t,Wht);return a("svg",S$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M3 4a1 1 0 011-1h8a1 1 0 011 1v5.996a1 1 0 01-1 1h-1.661L7.4 13.2A.25.25 0 017 13v-2.004H4a1 1 0 01-1-1V4zm1.5 1a.5.5 0 01.5-.5h6a.5.5 0 01.5.5v4a.5.5 0 01-.5.5h-.9L8 11V9.5H5a.5.5 0 01-.5-.5V5z",clipRule:"evenodd"}),a("path",{d:"M6.75 6a1 1 0 100 2 1 1 0 000-2zm2.5 0a1 1 0 100 2 1 1 0 000-2z"}))},qht=Vht;var fx={};$(fx,{icon:()=>Xht});var Dtr=P(L());var Uht=["title","titleId"];function j$(){return j$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Jht(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Ght=function(t){var n=t.title,r=t.titleId,o=$ht(t,Uht);return a("svg",j$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M9.414 3.757l2.829 2.829a2 2 0 010 2.828l-2.829 2.829a2 2 0 01-2.828 0L3.757 9.414a2 2 0 010-2.828l2.829-2.829a2 2 0 012.828 0zm-1.747 2.91a1 1 0 00-1 1v.666a1 1 0 001 1h.666a1 1 0 001-1v-.666a1 1 0 00-1-1h-.666z"}))},Xht=Ght;var dx={};$(dx,{icon:()=>egt});var Ftr=P(L());var Kht=["title","titleId"];function I$(){return I$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Qht(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Zht=function(t){var n=t.title,r=t.titleId,o=Yht(t,Kht);return a("svg",I$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M13 11.567C13 12.36 12.36 13 11.567 13H4.433C3.64 13 3 12.36 3 11.567V4.433C3 3.64 3.64 3 4.433 3H6v-.495a.51.51 0 01.412-.497L6.5 2c.276 0 .5.214.5.505V3h2v-.495a.51.51 0 01.412-.497L9.5 2c.276 0 .5.214.5.505V3h1.567C12.36 3 13 3.64 13 4.433v7.134zM4 6v5.33c0 .37.3.67.67.67h6.66c.37 0 .67-.3.67-.67V6H4zm1.5 4c.245 0 .45.183.492.412L6 10.5c0 .245-.183.45-.412.492L5.5 11a.505.505 0 01-.5-.5c0-.245.183-.45.412-.492L5.5 10zM8 10c.245 0 .45.183.492.412l.008.088c0 .245-.183.45-.412.492L8 11a.505.505 0 01-.5-.5c0-.245.183-.45.412-.492L8 10zm2.5 0c.245 0 .45.183.492.412L11 10.5c0 .245-.183.45-.412.492L10.5 11a.505.505 0 01-.5-.5c0-.245.183-.45.412-.492L10.5 10zm-5-1.5c.245 0 .45.183.492.412L6 9c0 .245-.183.45-.412.492L5.5 9.5A.505.505 0 015 9c0-.245.183-.45.412-.492L5.5 8.5zm2.5 0c.245 0 .45.183.492.412L8.5 9c0 .245-.183.45-.412.492L8 9.5a.505.505 0 01-.5-.5c0-.245.183-.45.412-.492L8 8.5zm2.5 0c.245 0 .45.183.492.412L11 9c0 .245-.183.45-.412.492L10.5 9.5A.505.505 0 0110 9c0-.245.183-.45.412-.492L10.5 8.5zM5.5 7c.245 0 .45.183.492.412L6 7.5c0 .245-.183.45-.412.492L5.5 8a.505.505 0 01-.5-.5c0-.245.183-.45.412-.492L5.5 7zM8 7c.245 0 .45.183.492.412L8.5 7.5c0 .245-.183.45-.412.492L8 8a.505.505 0 01-.5-.5c0-.245.183-.45.412-.492L8 7zm2.5 0c.245 0 .45.183.492.412L11 7.5c0 .245-.183.45-.412.492L10.5 8a.505.505 0 01-.5-.5c0-.245.183-.45.412-.492L10.5 7zM4 5h8v-.33c0-.37-.3-.67-.67-.67H4.67C4.3 4 4 4.3 4 4.67V5z"}))},egt=Zht;var mx={};$(mx,{icon:()=>igt});var Btr=P(L());var tgt=["title","titleId"];function k$(){return k$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ngt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ogt=function(t){var n=t.title,r=t.titleId,o=rgt(t,tgt);return a("svg",k$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M4.154 12V4h2.713v1.14H5.658v5.72h1.21V12H4.153zm7.692-8v8H9.133v-1.14h1.209V5.14h-1.21V4h2.714z"}))},igt=ogt;var hx={};$(hx,{icon:()=>cgt});var Vtr=P(L());var agt=["title","titleId"];function P$(){return P$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function sgt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ugt=function(t){var n=t.title,r=t.titleId,o=lgt(t,agt);return a("svg",P$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M7.39 9.736l-1.041.94L3.258 8l3.09-2.677 1.041.94-2.032 1.722v.03l2.032 1.721zm2.777.94l-1.04-.94 2.032-1.721v-.03L9.126 6.264l1.04-.94L13.259 8l-3.091 2.677z"}))},cgt=ugt;var gx={};$(gx,{icon:()=>hgt});var Utr=P(L());var pgt=["title","titleId"];function E$(){return E$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function dgt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var mgt=function(t){var n=t.title,r=t.titleId,o=fgt(t,pgt);return a("svg",E$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M5.211 12V4h5.578v1.57H7.145v1.641h3.359v1.574H7.145v1.645h3.644V12z"}))},hgt=mgt;var vx={};$(vx,{icon:()=>wgt});var Jtr=P(L());var ggt=["title","titleId"];function C$(){return C$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ygt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var bgt=function(t){var n=t.title,r=t.titleId,o=vgt(t,ggt);return a("svg",C$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M7.682 12V9.247l1.023-.861a.5.5 0 00-.003-.768l-1.02-.844V4h5.578v1.57H9.615v1.64h3.36v1.575h-3.36v1.645h3.645V12H7.682zm.743-4.103a.138.138 0 010 .206L6.158 9.97a.133.133 0 01-.218-.103v-.934H2.873A.133.133 0 012.74 8.8V7.2c0-.074.06-.133.133-.133H5.94v-.934a.133.133 0 01.218-.103l2.267 1.867z"}))},wgt=bgt;var yx={};$(yx,{icon:()=>jgt});var Xtr=P(L());var Ogt=["title","titleId"];function A$(){return A$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function _gt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Sgt=function(t){var n=t.title,r=t.titleId,o=xgt(t,Ogt);return a("svg",A$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M11.225 5.656c0 .423-.106.79-.318 1.102-.211.311-.51.57-.898.775a5.435 5.435 0 01-1.392.485c-.54.117-1.14.193-1.798.229a6.047 6.047 0 00-.035.67c0 .258.02.51.062.757.04.247.114.464.22.652s.25.34.432.458.414.176.696.176c.211 0 .467-.044.766-.132.3-.088.62-.244.96-.467.106-.07.192-.129.256-.176a.365.365 0 01.22-.07c.118 0 .197.061.238.185a.99.99 0 01.062.255 7.1 7.1 0 01-.573.467 4.93 4.93 0 01-.775.467c-.288.141-.6.261-.934.361-.335.1-.678.15-1.03.15-.541 0-.982-.088-1.322-.264a2.072 2.072 0 01-.793-.688 2.626 2.626 0 01-.388-.933 4.949 4.949 0 01-.106-1.005c0-.634.103-1.257.309-1.868.205-.61.499-1.157.88-1.638.383-.482.838-.87 1.366-1.163A3.567 3.567 0 019.093 4c.599 0 1.104.126 1.515.379.411.252.617.678.617 1.277zm-2.467-.951c-.223 0-.435.08-.635.238-.2.158-.381.373-.546.643-.164.27-.305.578-.423.925a6.42 6.42 0 00-.264 1.101c.47-.047.863-.135 1.18-.264.318-.13.57-.285.758-.467.188-.182.323-.388.405-.617.083-.229.124-.467.124-.713 0-.27-.056-.479-.168-.626a.519.519 0 00-.431-.22z"}))},jgt=Sgt;var bx={};$(bx,{icon:()=>Cgt});var Ytr=P(L());var Igt=["title","titleId"];function M$(){return M$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Pgt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Egt=function(t){var n=t.title,r=t.titleId,o=kgt(t,Igt);return a("svg",M$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.461 7.31h3.055a.74.74 0 01.66 1.074l-2.141 4.211a.74.74 0 11-1.319-.67L9.31 8.79H6.256a.74.74 0 01-.66-1.075l2.19-4.31a.74.74 0 011.319.67L7.461 7.31z"}))},Cgt=Egt;var wx={};$(wx,{icon:()=>zgt});var Ztr=P(L());var Agt=["title","titleId"];function T$(){return T$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Tgt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Rgt=function(t){var n=t.title,r=t.titleId,o=Mgt(t,Agt);return a("svg",T$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M5.27 12V4h5.46v1.57H7.203v1.641h3.18v1.574h-3.18V12z"}))},zgt=Rgt;var Ox={};$(Ox,{icon:()=>Wgt});var trr=P(L());var Lgt=["title","titleId"];function R$(){return R$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ngt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Fgt=function(t){var n=t.title,r=t.titleId,o=Dgt(t,Lgt);return a("svg",R$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M9.867 2.667H4a.667.667 0 00-.667.666v9.334c0 .368.299.666.667.666h8a.667.667 0 00.667-.666V5.619a.669.669 0 00-.183-.459l-2.133-2.285a.668.668 0 00-.484-.208m1.466 4V12H4.667V4h4v2.333c0 .184.149.334.333.334h2.333z"}))},Wgt=Fgt;var xx={};$(xx,{icon:()=>Ugt});var nrr=P(L());var Bgt=["title","titleId"];function z$(){return z$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Vgt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var qgt=function(t){var n=t.title,r=t.titleId,o=Hgt(t,Bgt);return a("svg",z$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M3.25 3a.25.25 0 00-.25.25v2c0 .138.112.25.25.25h9.5a.25.25 0 00.25-.25v-2a.25.25 0 00-.25-.25h-9.5zm0 3.75A.25.25 0 003 7v2c0 .138.112.25.25.25H5.5A.25.25 0 005.75 9V7a.25.25 0 00-.25-.25H3.25zm-.25 4a.25.25 0 01.25-.25H5.5a.25.25 0 01.25.25v2a.25.25 0 01-.25.25H3.25a.25.25 0 01-.25-.25v-2zm3.31-.727c-.082-.073-.082-.224 0-.296l3.054-2.683a.17.17 0 01.19-.026c.064.032.104.1.104.174v1.341l3.161-.016c.1 0 .18.086.18.192v2.3c0 .105-.08.191-.18.191l-3.161.017v1.341c0 .074-.04.142-.103.174a.17.17 0 01-.19-.025L6.31 10.023z"}))},Ugt=qgt;var _x={};$(_x,{icon:()=>Kgt});var irr=P(L());var $gt=["title","titleId"];function L$(){return L$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ggt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Xgt=function(t){var n=t.title,r=t.titleId,o=Jgt(t,$gt);return a("svg",L$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M11.266 4.15V5.63a2.41 2.41 0 00-.859-.145c-.692 0-1.065.346-1.177 1.043l-.11.625h1.828v1.44H8.921l-.204 1.115C8.455 11.325 7.517 12 5.9 12c-.469 0-.882-.061-1.166-.167v-1.495c.273.117.591.178.903.178.659 0 1.01-.29 1.127-1.015l.157-.91H5.247V7.152h1.837l.188-.842C7.534 4.714 8.432 4 10.19 4c.39 0 .853.067 1.076.15z"}))},Kgt=Xgt;var Sx={};$(Sx,{icon:()=>tvt});var lrr=P(L());var Ygt=["title","titleId"];function D$(){return D$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Zgt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var evt=function(t){var n=t.title,r=t.titleId,o=Qgt(t,Ygt);return a("svg",D$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M8 3c1.636 0 3.088.785 4 2 .628.836 1 1.875 1 3a4.978 4.978 0 01-.999 3H12a4.992 4.992 0 01-4 2 4.992 4.992 0 01-4-1.999V11a5 5 0 014-8zm.948 8H7.052c.277.626.623 1 .948 1 .325 0 .67-.374.948-1zM6 11l-.645.001c.274.242.581.446.914.606A5.445 5.445 0 016 11.001zm4.645.001H10a5.51 5.51 0 01-.269.606c.333-.16.64-.364.914-.606zm-5.133-2.5H4.031c.068.54.243 1.048.505 1.5h1.172a9.186 9.186 0 01-.196-1.5zm3.975 0H6.513c.03.544.104 1.05.21 1.5h2.553c.107-.45.182-.956.21-1.5zm2.482 0h-1.481a9.186 9.186 0 01-.196 1.5h1.172c.262-.452.437-.96.505-1.5zM5.708 6L4.535 6c-.261.452-.437.96-.504 1.5h1.481A9.187 9.187 0 015.708 6zm3.568 0H6.724c-.107.449-.182.955-.21 1.499h2.973a8.479 8.479 0 00-.21-1.5zM11.465 6h-1.173c.102.467.17.972.196 1.5h1.481a3.974 3.974 0 00-.504-1.5zM6.269 4.393l-.124.062c-.286.15-.551.333-.79.545H6a5.51 5.51 0 01.269-.607zM8 4c-.326 0-.671.375-.948 1h1.896C8.671 4.376 8.326 4 8 4zm1.73.393l.038.071c.083.168.161.347.232.536h.646a4.006 4.006 0 00-.915-.607z"}))},tvt=evt;var jx={};$(jx,{icon:()=>avt});var urr=P(L());var rvt=["title","titleId"];function N$(){return N$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ovt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ivt=function(t){var n=t.title,r=t.titleId,o=nvt(t,rvt);return a("svg",N$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M3 3h4v5h2V5.5h4V13H3.001v-1H3V3zm1 9h2V4H4v8zm3 0h2V9H7v3zm3 0h2V6.5h-2V12z"}))},avt=ivt;var Ix={};$(Ix,{icon:()=>pvt});var prr=P(L());var lvt=["title","titleId"];function F$(){return F$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function uvt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var cvt=function(t){var n=t.title,r=t.titleId,o=svt(t,lvt);return a("svg",F$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M11 3a2 2 0 012 2v6a2 2 0 01-2 2H5a2 2 0 01-2-2V5a2 2 0 012-2h6zm-1 2H8v6h1V9.014h1c.298-.013 2 0 2-2.018 0-1.74-1.314-1.952-1.825-1.987L10 5zM6 5H5v6h1V5zm4 .984c.667 0 1 .336 1 1.008C11 7.664 10.667 8 10 8H9V5.984z"}))},pvt=cvt;var kx={};$(kx,{icon:()=>gvt});var drr=P(L());var fvt=["title","titleId"];function W$(){return W$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function mvt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var hvt=function(t){var n=t.title,r=t.titleId,o=dvt(t,fvt);return a("svg",W$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M8.967 10.653h1.727V12H5.306v-1.347h1.727V5.347H5.306V4h5.388v1.347H8.967v5.306z"}))},gvt=hvt;var Px={};$(Px,{icon:()=>Ovt});var hrr=P(L());var vvt=["title","titleId"];function B$(){return B$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function bvt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var wvt=function(t){var n=t.title,r=t.titleId,o=yvt(t,vvt);return a("svg",B$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M7.5 4.5v1.025c0 1.269-1.185 1.908-2.112 1.737a.75.75 0 100 1.475c.927-.17 2.112.47 2.112 1.739v1.023h4v-1.005a2.5 2.5 0 010-4.988V4.5h-4zM13 4a1 1 0 00-1-1H7a1 1 0 00-1 1v1.525c0 .172-.172.293-.341.262a2.25 2.25 0 100 4.426c.17-.031.341.09.341.262V12a1 1 0 001 1h5a1 1 0 001-1V9.004a.16.16 0 00-.04-.105c-.109-.125-.594-.16-.732-.068a1 1 0 110-1.662c.138.092.623.057.732-.068a.16.16 0 00.04-.105V4z"}))},Ovt=wvt;var Ex={};$(Ex,{icon:()=>Ivt});var vrr=P(L());var xvt=["title","titleId"];function H$(){return H$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Svt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var jvt=function(t){var n=t.title,r=t.titleId,o=_vt(t,xvt);return a("svg",H$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M12.667 6.542A3.208 3.208 0 018.86 9.694l-.438.492a.437.437 0 01-.327.147h-.678v.73a.437.437 0 01-.438.437H6.25v.73a.437.437 0 01-.438.437H3.772a.437.437 0 01-.438-.438v-1.423c0-.116.046-.227.128-.31l2.95-2.949a3.208 3.208 0 013.047-4.214 3.202 3.202 0 013.209 3.209zm-3.209-.875a.875.875 0 101.75 0 .875.875 0 00-1.75 0z"}))},Ivt=jvt;var Cx={};$(Cx,{icon:()=>Avt});var brr=P(L());var kvt=["title","titleId"];function V$(){return V$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Evt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Cvt=function(t){var n=t.title,r=t.titleId,o=Pvt(t,kvt);return a("svg",V$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M10.33 10.28c-.12.04-.29.07-.42.07-.23 0-.43-.08-.53-.3l-.63-1.34 2.32-2.81H9.3L7.76 7.93h-.09L8.22 4H6.59l-1.05 7.5h1.63l.27-1.94h.1l.43 1.12c.27.71.74.92 1.33.92.23 0 .6-.04.86-.11l.17-1.21z"}))},Avt=Cvt;var Ax={};$(Ax,{icon:()=>Lvt});var Orr=P(L());var Mvt=["title","titleId"];function q$(){return q$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Rvt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var zvt=function(t){var n=t.title,r=t.titleId,o=Tvt(t,Mvt);return a("svg",q$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M3.333 11.027V5.05h2.059v1.136h.063c.25-.747.891-1.214 1.728-1.214.848 0 1.524.483 1.65 1.214h.063c.204-.731.927-1.214 1.822-1.214 1.155 0 1.949.798 1.949 2.023v4.03h-2.169V7.542c0-.521-.29-.84-.738-.84s-.723.319-.723.84v3.486H6.963V7.54c0-.521-.29-.84-.739-.84-.447 0-.722.319-.722.84v3.486H3.333z"}))},Lvt=zvt;var Mx={};$(Mx,{icon:()=>Bvt});var _rr=P(L());var Dvt=["title","titleId"];function U$(){return U$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Fvt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Wvt=function(t){var n=t.title,r=t.titleId,o=Nvt(t,Dvt);return a("svg",U$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M11 3a1 1 0 00-1 1v1H9a1 1 0 000 2h1v1a1 1 0 102 0V7h1a1 1 0 100-2h-1V4a1 1 0 00-1-1zM5 7a1 1 0 00-1 1v1H3a1 1 0 000 2h1v1a1 1 0 102 0v-1h1a1 1 0 100-2H6V8a1 1 0 00-1-1z"}))},Bvt=Wvt;var Tx={};$(Tx,{icon:()=>$vt});var jrr=P(L());var Hvt=["title","titleId"];function $$(){return $$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function qvt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Uvt=function(t){var n=t.title,r=t.titleId,o=Vvt(t,Hvt);return a("svg",$$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5 4h-.5a.5.5 0 010-1h1a.5.5 0 01.5.5v9a.5.5 0 01-.5.5h-1a.5.5 0 010-1H5v-2h-.5a.5.5 0 010-1H5V7h-.5a.5.5 0 010-1H5V4zm3 1a1 1 0 00-1 1v6a1 1 0 001 1h2a1 1 0 001-1V6a1 1 0 00-1-1H8z"}))},$vt=Uvt;var Rx={};$(Rx,{icon:()=>Yvt});var krr=P(L());var Jvt=["title","titleId"];function J$(){return J$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Xvt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Kvt=function(t){var n=t.title,r=t.titleId,o=Gvt(t,Jvt);return a("svg",J$({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 2l5.196 3v.178l-.866.468V5.5L8 3 3.67 5.5v5L8 13l4.33-2.5V5.77l.866-.474V11L8 14l-5.196-3V5L8 2z"}),a("path",{d:"M5.243 4.429L9.597 7.04 8 7.928 3.743 5.563a.5.5 0 10-.486.874L7.5 8.794V13.5h1V8.794l4.243-2.357a.508.508 0 00.06-.04l.392-.202V5.047l-.917.505a.573.573 0 00-.02.01l-.106.06-.191.105-1.355.753-4.849-2.909-.514.858z"}))},Yvt=Kvt;var zx={};$(zx,{icon:()=>ryt});var Err=P(L());var Qvt=["title","titleId"];function G$(){return G$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function eyt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var tyt=function(t){var n=t.title,r=t.titleId,o=Zvt(t,Qvt);return a("svg",G$({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.556 8.416l-.804-1.68h-.036v5.64H5V4h1.992l2.292 3.96.804 1.68h.036V4h1.716v8.376H9.848l-2.292-3.96z"}))},ryt=tyt;var Lx={};$(Lx,{icon:()=>lyt});var Arr=P(L());var nyt=["title","titleId"];function X$(){return X$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function iyt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ayt=function(t){var n=t.title,r=t.titleId,o=oyt(t,nyt);return a("svg",X$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fillRule:"evenodd"},a("path",{d:"M11 3c1.044 0 1.913.757 1.994 1.736l.006.149v6.23c0 1-.82 1.805-1.845 1.88L11 13H9.501a.5.5 0 01-.09-.992l.09-.008H11c.52 0 .937-.35.993-.783l.007-.102v-6.23c0-.445-.379-.827-.882-.879L11 4H9.5a.5.5 0 01-.09-.992L9.5 3H11zM6.5 3a.5.5 0 01.09.992L6.5 4H5c-.52 0-.937.35-.993.783L4 4.885v6.23c0 .445.379.827.882.879L5 12h1.5a.5.5 0 01.09.992L6.5 13H5c-1.044 0-1.913-.757-1.994-1.736L3 11.115v-6.23c0-1 .82-1.805 1.845-1.88L5 3h1.5z"}),a("path",{d:"M5.864 7.25a.714.714 0 110 1.429.714.714 0 010-1.429zm2.143 0a.714.714 0 110 1.429.714.714 0 010-1.429zm2.143 0a.714.714 0 110 1.429.714.714 0 010-1.429z"})))},lyt=ayt;var Dx={};$(Dx,{icon:()=>fyt});var Trr=P(L());var syt=["title","titleId"];function K$(){return K$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function cyt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var pyt=function(t){var n=t.title,r=t.titleId,o=uyt(t,syt);return a("svg",K$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5.002 12.412l-.962.962a1 1 0 01-1.414-1.414l.962-.962a5.333 5.333 0 017.41-7.41l.962-.962a1 1 0 111.414 1.414l-.962.962a5.333 5.333 0 01-7.41 7.41zm.966-.966a4 4 0 005.478-5.478l-5.478 5.478zm-1.414-1.414l5.478-5.478a4 4 0 00-5.478 5.478z"}))},fyt=pyt;var Nx={};$(Nx,{icon:()=>vyt});var zrr=P(L());var dyt=["title","titleId"];function Y$(){return Y$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function hyt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var gyt=function(t){var n=t.title,r=t.titleId,o=myt(t,dyt);return a("svg",Y$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.8 9.812h-.842l-.78 2.335H5.031l.78-2.335H4.6l.182-1.043h1.373l.507-1.504H5.454l.188-1.042h1.367l.792-2.37H8.94l-.792 2.37h.849l.792-2.37h1.145l-.792 2.37H11.4l-.182 1.042H9.8L9.293 8.77h1.248l-.183 1.043H8.946l-.775 2.335H7.026L7.8 9.812zm-.5-1.043h.842l.513-1.504h-.849L7.3 8.77z"}))},vyt=gyt;var Fx={};$(Fx,{icon:()=>xyt});var Drr=P(L());var yyt=["title","titleId"];function Q$(){return Q$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function wyt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Oyt=function(t){var n=t.title,r=t.titleId,o=byt(t,yyt);return a("svg",Q$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M6.63 12c-1.294 0-2.383-.105-2.383-1.802V9.6c0-.638-.247-.914-.98-.914v-1.37c.733 0 .98-.28.98-.915v-.6C4.247 4.105 5.336 4 6.631 4v1.14c-.759 0-.886.272-.886.843v.813c0 .479-.225.936-1.212 1.133v.142c.987.197 1.212.654 1.212 1.133v.813c0 .57.127.844.886.844V12zm2.266-8c1.295 0 2.384.105 2.384 1.802V6.4c0 .638.247.914.98.914v1.37c-.733 0-.98.28-.98.915v.6C11.28 11.895 10.19 12 8.896 12v-1.14c.759 0 .886-.272.886-.843v-.813c0-.479.225-.936 1.212-1.133V7.93c-.987-.197-1.212-.654-1.212-1.133v-.813c0-.57-.127-.844-.886-.844V4z"}))},xyt=Oyt;var Wx={};$(Wx,{icon:()=>kyt});var Frr=P(L());var _yt=["title","titleId"];function Z$(){return Z$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function jyt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Iyt=function(t){var n=t.title,r=t.titleId,o=Syt(t,_yt);return a("svg",Z$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M2.667 8.002c0-1.5.394-2.743 1.248-3.822h1.437c-.652.8-1.14 2.388-1.14 3.822 0 1.43.488 3.018 1.14 3.818H3.915c-.854-1.08-1.248-2.322-1.248-3.818zM6.77 9.998l-.818-.803 1.23-1.197-1.23-1.203.83-.793 1.221 1.193L9.23 6.002l.818.793-1.227 1.2 1.227 1.2-.818.803L8 8.795 6.77 9.998zm6.563-2c0 1.5-.394 2.743-1.248 3.822h-1.437c.652-.8 1.14-2.388 1.14-3.822 0-1.43-.488-3.018-1.14-3.818h1.437c.854 1.08 1.248 2.322 1.248 3.818z"}))},kyt=Iyt;var Bx={};$(Bx,{icon:()=>Myt});var Brr=P(L());var Pyt=["title","titleId"];function eJ(){return eJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Cyt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Ayt=function(t){var n=t.title,r=t.titleId,o=Eyt(t,Pyt);return a("svg",eJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M8.049 3.785l3.852 1.006-4.049 1.103L4 4.791l3.951-1.006a.19.19 0 01.098 0zm.073 2.654l4.545-1.306v5.45l-.131.184-4.414 1.455V6.439zm-4.789 4.145V5.188L7.498 6.41v5.81l-4.034-1.453-.13-.183z"}))},Myt=Ayt;var Hx={};$(Hx,{icon:()=>Dyt});var Vrr=P(L());var Tyt=["title","titleId"];function tJ(){return tJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function zyt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Lyt=function(t){var n=t.title,r=t.titleId,o=Ryt(t,Tyt);return a("svg",tJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M4.889 12V4h3.304c1.797 0 2.922 1.117 2.918 2.77.004 1.652-1.144 2.746-2.976 2.746H6.822V12H4.89zm1.933-4.008h.953c.868 0 1.336-.472 1.332-1.222.004-.73-.464-1.211-1.332-1.211h-.953v2.433z"}))},Dyt=Lyt;var Vx={};$(Vx,{icon:()=>Hyt});var Urr=P(L());var Nyt=["title","titleId"];function rJ(){return rJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Wyt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Byt=function(t){var n=t.title,r=t.titleId,o=Fyt(t,Nyt);return a("svg",rJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M5.5 7a1.5 1.5 0 100-3 1.5 1.5 0 000 3zm0 1a2.5 2.5 0 100-5 2.5 2.5 0 000 5zM11 9a1 1 0 100-2 1 1 0 000 2zm0 1a2 2 0 100-4 2 2 0 000 4zm-2.5 1.5a.5.5 0 11-1 0 .5.5 0 011 0zm1 0a1.5 1.5 0 11-3 0 1.5 1.5 0 013 0z"}))},Hyt=Byt;var qx={};$(qx,{icon:()=>Jyt});var Jrr=P(L());var Vyt=["title","titleId"];function nJ(){return nJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Uyt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var $yt=function(t){var n=t.title,r=t.titleId,o=qyt(t,Vyt);return a("svg",nJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M4.889 12V4h3.304c1.797 0 2.922 1.117 2.918 2.77.004 1.652-1.144 2.746-2.976 2.746H6.822V12H4.89zm1.933-4.008h.953c.868 0 1.336-.472 1.332-1.222.004-.73-.464-1.211-1.332-1.211h-.953v2.433z"}))},Jyt=$yt;var Ux={};$(Ux,{icon:()=>Qyt});var Xrr=P(L());var Gyt=["title","titleId"];function oJ(){return oJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Kyt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Yyt=function(t){var n=t.title,r=t.titleId,o=Xyt(t,Gyt);return a("svg",oJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fillRule:"evenodd"},a("path",{d:"M9.82 5.116a.5.5 0 00-.704.704l.064.064L11.719 8l-2.54 2.116a.5.5 0 00-.114.63l.05.074a.5.5 0 00.63.115l.075-.05 3-2.5a.5.5 0 00.071-.697l-.07-.072-3-2.5zM6.18 5.116a.5.5 0 01.704.704l-.064.064L4.281 8l2.54 2.116a.5.5 0 01.114.63l-.05.074a.5.5 0 01-.63.115l-.075-.05-3-2.5a.5.5 0 01-.071-.697l.07-.072 3-2.5z"})))},Qyt=Yyt;var $x={};$($x,{icon:()=>n2t});var Yrr=P(L());var Zyt=["title","titleId"];function iJ(){return iJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function t2t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var r2t=function(t){var n=t.title,r=t.titleId,o=e2t(t,Zyt);return a("svg",iJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M13 4v8h-2V6H9v4H5v2H3V8h4V4h6z"}))},n2t=r2t;var Jx={};$(Jx,{icon:()=>s2t});var Zrr=P(L());var o2t=["title","titleId"];function aJ(){return aJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function a2t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var l2t=function(t){var n=t.title,r=t.titleId,o=i2t(t,o2t);return a("svg",aJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M13 4v8h-2V6H9v4H5v2H3V8h4V4h6z"}))},s2t=l2t;var Gx={};$(Gx,{icon:()=>d2t});var tnr=P(L());var u2t=["title","titleId"];function lJ(){return lJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function p2t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var f2t=function(t){var n=t.title,r=t.titleId,o=c2t(t,u2t);return a("svg",lJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M8.533 9.067c-1.792 0-2.378.72-2.57 1.194a1.601 1.601 0 11-1.163-.037V5.776a1.595 1.595 0 01-1.067-1.51c0-.885.715-1.6 1.6-1.6.886 0 1.6.715 1.6 1.6 0 .7-.442 1.291-1.066 1.51v2.821C6.336 8.251 7.019 8 8 8c1.424 0 1.899-.715 2.053-1.19a1.603 1.603 0 01-.986-1.477c0-.885.714-1.6 1.6-1.6.885 0 1.6.715 1.6 1.6a1.59 1.59 0 01-1.115 1.526c-.139.762-.656 2.208-2.619 2.208zm-3.2 2.133a.535.535 0 00-.533.533c0 .294.24.534.533.534a.535.535 0 000-1.067zm0-7.467a.535.535 0 00-.533.534c0 .293.24.533.533.533.294 0 .534-.24.534-.533a.535.535 0 00-.534-.534zM10.667 4.8a.535.535 0 00-.534.533.535.535 0 001.067 0 .535.535 0 00-.533-.533z"}))},d2t=f2t;var Xx={};$(Xx,{icon:()=>y2t});var nnr=P(L());var m2t=["title","titleId"];function sJ(){return sJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function g2t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var v2t=function(t){var n=t.title,r=t.titleId,o=h2t(t,m2t);return a("svg",sJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6.27 7.5a1 1 0 112 0 1 1 0 01-2 0zM8.77 7.5a1 1 0 112 0 1 1 0 01-2 0z"}),a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M11.702 10.682a4.501 4.501 0 01-5.796.482L4.28 12.789a.75.75 0 01-1.06-1.06L4.847 10.1a4.501 4.501 0 116.855.581zm-5.304-1.06a3 3 0 104.243-4.243A3 3 0 006.398 9.62z"}))},y2t=v2t;var Kx={};$(Kx,{icon:()=>_2t});var inr=P(L());var b2t=["title","titleId"];function uJ(){return uJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function O2t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var x2t=function(t){var n=t.title,r=t.titleId,o=w2t(t,b2t);return a("svg",uJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M13 10v3h-3v-1H6v1H3v-3h1V6H3V3h3v1h4V3h3v3h-1v4h1zm-8 1H4v1h1v-1zm7 0h-1v1h1v-1zM5 4H4v1h1V4zm7 0h-1v1h1V4zm-1 2h-1V5H6v1H5v4h1v1h4v-1h1V6z"}))},_2t=x2t;var Yx={};$(Yx,{icon:()=>P2t});var lnr=P(L());var S2t=["title","titleId"];function cJ(){return cJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function I2t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var k2t=function(t){var n=t.title,r=t.titleId,o=j2t(t,S2t);return a("svg",cJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M9.147 4.297l-.255 1.455h.936l-.222 1.266h-.935l-.455 2.688c-.025.184-.013.323.036.417.048.093.17.144.365.151.075.004.23-.005.465-.027l-.13 1.32c-.3.097-.618.142-.957.135-.552-.007-.965-.17-1.239-.487-.274-.317-.386-.748-.335-1.293l.476-2.904h-.725l.216-1.266h.725l.254-1.455h1.78z"}))},P2t=k2t;var Qx={};$(Qx,{icon:()=>T2t});var unr=P(L());var E2t=["title","titleId"];function pJ(){return pJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function A2t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var M2t=function(t){var n=t.title,r=t.titleId,o=C2t(t,E2t);return a("svg",pJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M4.667 4.667h2.666v2.666H4.667V4.667zm0 4h2.666v2.666H4.667V8.667zm4-4h2.666v2.666H8.667V4.667zm0 4h2.666v2.666H8.667V8.667zM3.333 3.333v9.334h9.334V3.333H3.333zm0-1.333h9.334C13.403 2 14 2.597 14 3.333v9.334c0 .736-.597 1.333-1.333 1.333H3.333A1.333 1.333 0 012 12.667V3.333C2 2.597 2.597 2 3.333 2z"}))},T2t=M2t;var Zx={};$(Zx,{icon:()=>N2t});var pnr=P(L());var R2t=["title","titleId"];function fJ(){return fJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function L2t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var D2t=function(t){var n=t.title,r=t.titleId,o=z2t(t,R2t);return a("svg",fJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8.316 14a6 6 0 110-12 6 6 0 010 12zm0-1.333a4.667 4.667 0 100-9.334 4.667 4.667 0 000 9.334zm2.19-5.72h1.143c.019 1.448-.793 2.338-1.922 2.338-.632 0-1.194-.267-1.706-.811-.36-.397-.636-.576-1-.576-.517 0-.849.355-.885 1.083H4.983c.014-1.47.858-2.314 1.95-2.314.595 0 1.125.249 1.678.802.392.382.641.595 1.038.595.484 0 .857-.323.857-1.116z"}))},N2t=D2t;var e9={};$(e9,{icon:()=>V2t});var dnr=P(L());var F2t=["title","titleId"];function dJ(){return dJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function B2t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var H2t=function(t){var n=t.title,r=t.titleId,o=W2t(t,F2t);return a("svg",dJ({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M10 8a1 1 0 11-2 0 1 1 0 012 0z"}),a("path",{fillRule:"evenodd",d:"M4 4a1 1 0 00-1 1v6a1 1 0 001 1h6.989a1 1 0 00.825-.436l2.05-3a1 1 0 000-1.128l-2.05-3A1 1 0 0010.99 4H4zm.75 1.25a.5.5 0 00-.5.5v4.5a.5.5 0 00.5.5h5.745a.5.5 0 00.405-.206l1.636-2.25a.5.5 0 000-.588L10.9 5.456a.5.5 0 00-.405-.206H4.75z"}))},V2t=H2t;var t9={};$(t9,{icon:()=>G2t});var hnr=P(L());var q2t=["title","titleId"];function mJ(){return mJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function $2t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var J2t=function(t){var n=t.title,r=t.titleId,o=U2t(t,q2t);return a("svg",mJ({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M9.147 4.297l-.255 1.455h.936l-.222 1.266h-.935l-.455 2.688c-.025.184-.013.323.036.417.048.093.17.144.365.151.075.004.23-.005.465-.027l-.13 1.32c-.3.097-.618.142-.957.135-.552-.007-.965-.17-1.239-.487-.274-.317-.386-.748-.335-1.293l.476-2.904h-.725l.216-1.266h.725l.254-1.455h1.78z"}))},G2t=J2t;var r9={};$(r9,{icon:()=>Z2t});var vnr=P(L());var X2t=["title","titleId"];function hJ(){return hJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Y2t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Q2t=function(t){var n=t.title,r=t.titleId,o=K2t(t,X2t);return a("svg",hJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 4H3v3h5V4zM13 9H8v3h5V9zM10 4h3v3h-3V4zM6 9H3v3h3V9z"}))},Z2t=Q2t;var n9={};$(n9,{icon:()=>obt});var bnr=P(L());var ebt=["title","titleId"];function gJ(){return gJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function rbt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var nbt=function(t){var n=t.title,r=t.titleId,o=tbt(t,ebt);return a("svg",gJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M6.649 4.667l1.326 4.7h.05l1.326-4.7h1.982l-2.134 6.666H6.801L4.667 4.667z"}))},obt=nbt;var o9={};$(o9,{icon:()=>ubt});var Onr=P(L());var ibt=["title","titleId"];function vJ(){return vJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function lbt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var sbt=function(t){var n=t.title,r=t.titleId,o=abt(t,ibt);return a("svg",vJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M10.386 9.836a2.5 2.5 0 113.611.667C15.212 11.173 16 12.46 16 14v1.5a.5.5 0 11-1 0V14c0-1.724-1.276-3-3-3-.91 0-1.298-.02-1.805-.122-1.25-.254-2.333-1-3.585-2.566a.5.5 0 11.78-.624c.9 1.124 1.653 1.74 2.434 2.043.155.052.345.083.562.105zm1.785.128c.083.01.167.021.251.034L12.5 10a1.5 1.5 0 10-.33-.036zM9.78 11.97a.5.5 0 01.5.5c0 .076-.047.226-.05.231-.179.38-.23.774-.23 1.302v1.5a.5.5 0 11-1 0v-1.5c0-.657.072-1.186.307-1.696a.5.5 0 01.473-.337zM5.958 5.772a.5.5 0 01-.78.625L3.11 3.812a.5.5 0 11.78-.624l2.068 2.584zM1 11h5.5a.5.5 0 110 1h-6a.5.5 0 01-.5-.5V.5A.5.5 0 01.5 0h12a.5.5 0 01.5.5v3a.5.5 0 11-1 0V1H1v10z"}))},ubt=sbt;var i9={};$(i9,{icon:()=>mbt});var _nr=P(L());var cbt=["title","titleId"];function yJ(){return yJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function fbt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var dbt=function(t){var n=t.title,r=t.titleId,o=pbt(t,cbt);return a("svg",yJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M11 3h5v1H0V3h5V1a1 1 0 011-1h4a1 1 0 011 1v2zm-7.056 8H7v1H4.1l.392 2.519c.042.269.254.458.493.458h6.03c.239 0 .451-.189.493-.458l1.498-9.576H14l-1.504 9.73c-.116.747-.74 1.304-1.481 1.304h-6.03c-.741 0-1.365-.557-1.481-1.304l-1.511-9.73H9V5.95H3.157L3.476 8H8v1H3.632l.312 2zM6 3h4V1H6v2z"}))},mbt=dbt;var a9={};$(a9,{icon:()=>bbt});var jnr=P(L());var hbt=["title","titleId"];function bJ(){return bJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function vbt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ybt=function(t){var n=t.title,r=t.titleId,o=gbt(t,hbt);return a("svg",bJ({viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5.14 3.808L7.53 1.51a.67.67 0 01.942 0l2.389 2.298c.26.256.685.256.944 0a.65.65 0 000-.93L9.416.578a2.02 2.02 0 00-2.832 0l-2.388 2.3a.65.65 0 000 .93c.26.256.683.256.944 0zm0 8.384l2.39 2.298a.67.67 0 00.942 0l2.389-2.298a.677.677 0 01.944 0 .65.65 0 010 .93l-2.388 2.3a2.02 2.02 0 01-2.832 0l-2.388-2.3a.65.65 0 010-.93.677.677 0 01.944 0zM16 6H0v4h16V6zM1 9V7h14v2H1z"}))},bbt=ybt;var l9={};$(l9,{icon:()=>Sbt});var knr=P(L());var wbt=["title","titleId"];function wJ(){return wJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function xbt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var _bt=function(t){var n=t.title,r=t.titleId,o=Obt(t,wbt);return a("svg",wJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.565 10.83a.5.5 0 11.819.573l-1.877 2.68c-.963 1.376-3.02 1.55-4.588.45C.35 13.436-.191 11.445.773 10.07L3.64 5.973c.963-1.375 3.019-1.548 4.587-.45a.5.5 0 11-.573.82C6.509 5.54 5.08 5.66 4.46 6.546l-2.868 4.095c-.621.887-.245 2.27.9 3.073 1.146.802 2.575.682 3.196-.205l1.877-2.68z"}),a("path",{d:"M7.892 3.43a.5.5 0 11-.574-.819L10 .734c1.376-.963 3.367-.422 4.465 1.146 1.098 1.569.926 3.625-.45 4.588L9.918 9.336c-1.375.963-3.366.422-4.464-1.146a.5.5 0 11.819-.574c.802 1.146 2.185 1.522 3.072.9L13.44 5.65c.886-.621 1.006-2.05.204-3.195-.802-1.146-2.186-1.522-3.072-.9L7.892 3.43zM6 .5v3a.5.5 0 01-1 0v-3a.5.5 0 011 0zM1.058 2.23l2.458 1.72a.5.5 0 01-.574.82L.484 3.05a.5.5 0 11.574-.82zm12 7.093l2.457 1.72a.5.5 0 11-.573.82l-2.457-1.72a.5.5 0 11.573-.82zm-2.099 1.181v3a.5.5 0 11-1 0v-3a.5.5 0 111 0z"}))},Sbt=_bt;var s9={};$(s9,{icon:()=>Ebt});var Enr=P(L());var jbt=["title","titleId"];function OJ(){return OJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function kbt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Pbt=function(t){var n=t.title,r=t.titleId,o=Ibt(t,jbt);return a("svg",OJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M8 9a4 4 0 100-8 4 4 0 000 8zm0-1a3 3 0 100-6 3 3 0 000 6z",clipRule:"evenodd"}),a("path",{d:"M15 14.291A9.053 9.053 0 008 11a9.053 9.053 0 00-7 3.291l.715.71A8.047 8.047 0 018 11.996 8.047 8.047 0 0114.286 15l.714-.71z"}))},Ebt=Pbt;var u9={};$(u9,{icon:()=>Rbt});var Anr=P(L());var Cbt=["title","titleId"];function xJ(){return xJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Mbt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Tbt=function(t){var n=t.title,r=t.titleId,o=Abt(t,Cbt);return a("svg",xJ({xmlns:"http://www.w3.org/2000/svg",width:18,height:18,viewBox:"0 0 18 18","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fillRule:"evenodd"},a("path",{d:"M13.689 11.132c1.155 1.222 1.953 2.879 2.183 4.748a1.007 1.007 0 01-1 1.12H3.007a1.005 1.005 0 01-1-1.12c.23-1.87 1.028-3.526 2.183-4.748.247.228.505.442.782.633-1.038 1.069-1.765 2.55-1.972 4.237L14.872 16c-.204-1.686-.93-3.166-1.966-4.235a7.01 7.01 0 00.783-.633zM8.939 1c1.9 0 3 2 4.38 2.633a2.483 2.483 0 01-1.88.867c-.298 0-.579-.06-.844-.157A3.726 3.726 0 017.69 5.75c-1.395 0-3.75.25-3.245-1.903C5.94 3 6.952 1 8.94 1z"}),a("path",{d:"M8.94 2c2.205 0 4 1.794 4 4s-1.795 4-4 4c-2.207 0-4-1.794-4-4s1.793-4 4-4m0 9A5 5 0 108.937.999 5 5 0 008.94 11"})))},Rbt=Tbt;var c9={};$(c9,{icon:()=>Fbt});var Tnr=P(L());var zbt=["title","titleId"];function _J(){return _J=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Dbt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Nbt=function(t){var n=t.title,r=t.titleId,o=Lbt(t,zbt);return a("svg",_J({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M5.482 4.344a2 2 0 10-2.963 0c-.08.042-.156.087-.23.136-.457.305-.75.704-.933 1.073A3.457 3.457 0 001 6.978V9a1 1 0 001 1h2.5a3.69 3.69 0 01.684-.962L5.171 9H2V7s0-2 2-2c1.007 0 1.507.507 1.755 1.01.225-.254.493-.47.793-.636a2.717 2.717 0 00-1.066-1.03zM4 4a1 1 0 100-2 1 1 0 000 2zm10 6h-2.5a3.684 3.684 0 00-.684-.962L10.829 9H14V7s0-2-2-2c-1.007 0-1.507.507-1.755 1.01a3.012 3.012 0 00-.793-.636 2.716 2.716 0 011.066-1.03 2 2 0 112.963 0c.08.042.156.087.23.136.457.305.75.704.933 1.073A3.453 3.453 0 0115 6.944V9a1 1 0 01-1 1zm-2-6a1 1 0 100-2 1 1 0 000 2z"}),a("path",{fillRule:"evenodd",d:"M10 8c0 .517-.196.989-.518 1.344a2.755 2.755 0 011.163 1.21A3.453 3.453 0 0111 11.977V14a1 1 0 01-1 1H6a1 1 0 01-1-1v-2.022a2.005 2.005 0 01.006-.135 3.456 3.456 0 01.35-1.29 2.755 2.755 0 011.162-1.21A2 2 0 1110 8zm-4 4v2h4v-2s0-2-2-2-2 2-2 2zm3-4a1 1 0 11-2 0 1 1 0 012 0z"}))},Fbt=Nbt;var p9={};$(p9,{icon:()=>qbt});var znr=P(L());var Wbt=["title","titleId"];function SJ(){return SJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Hbt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Vbt=function(t){var n=t.title,r=t.titleId,o=Bbt(t,Wbt);return a("svg",SJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M12.5 11V5H11V3.5H5V5H3.5v6H5v1.5h6V11h1.5zm1 0H15v4h-4v-1.5H5V15H1v-4h1.5V5H1V1h4v1.5h6V1h4v4h-1.5v6zM4 4V2H2v2h2zm8 0h2V2h-2v2zM2 14h2v-2H2v2zm10 0h2v-2h-2v2z"}))},qbt=Vbt;var f9={};$(f9,{icon:()=>Xbt});var Dnr=P(L());var Ubt=["title","titleId"];function jJ(){return jJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Jbt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Gbt=function(t){var n=t.title,r=t.titleId,o=$bt(t,Ubt);return a("svg",jJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M0 1.994C0 .893.895 0 1.994 0h12.012C15.107 0 16 .895 16 1.994v12.012A1.995 1.995 0 0114.006 16H1.994A1.995 1.995 0 010 14.006V1.994zm1 0v12.012c0 .548.446.994.994.994h12.012a.995.995 0 00.994-.994V1.994A.995.995 0 0014.006 1H1.994A.995.995 0 001 1.994zM1 4h14v1H1V4zm1.5-1a.5.5 0 010-1h1a.5.5 0 010 1h-1zm3 0a.5.5 0 010-1h1a.5.5 0 010 1h-1zm4.947 6.106a1 1 0 010 1.788l-3 2A1 1 0 016 12V8a1 1 0 011.447-.894l3 2zM10 10L7 8v4l3-2z"}))},Xbt=Gbt;var d9={};$(d9,{icon:()=>e3t});var Fnr=P(L());var Kbt=["title","titleId"];function IJ(){return IJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Qbt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Zbt=function(t){var n=t.title,r=t.titleId,o=Ybt(t,Kbt);return a("svg",IJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M3 13h10V9.913l-2.571-2.826L8.56 8.753a.5.5 0 01-.728-.067L4.448 4.317 3 6.191V13zm5.295-5.35l1.837-1.64a.5.5 0 01.703.037l3.035 3.336a.5.5 0 01.13.337v3.78a.5.5 0 01-.5.5h-11a.5.5 0 01-.5-.5V6.02a.5.5 0 01.104-.305l1.947-2.52a.5.5 0 01.791-.001L8.295 7.65zM1 15h13.5a.5.5 0 110 1H.5a.5.5 0 01-.5-.5v-14a.5.5 0 011 0V15z"}))},e3t=Zbt;var m9={};$(m9,{icon:()=>i3t});var Bnr=P(L());var t3t=["title","titleId"];function kJ(){return kJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function n3t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var o3t=function(t){var n=t.title,r=t.titleId,o=r3t(t,t3t);return a("svg",kJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M.5 1a.5.5 0 01.5.5V15h13.5a.5.5 0 110 1H.5a.5.5 0 01-.5-.5v-14A.5.5 0 01.5 1zm4.342 2.194L8.295 7.65l1.837-1.64a.5.5 0 01.703.037l3.035 3.336a.5.5 0 01.13.337v3.78a.5.5 0 01-.5.5h-11a.5.5 0 01-.5-.5V6.02a.5.5 0 01.104-.305l1.947-2.52a.5.5 0 01.791-.001zm-.394 1.123L3 6.191v4.101l1.146-1.146a.5.5 0 01.493-.126l.085.033L8.5 10.94l1.776-.888a.5.5 0 01.36-.034l.088.034L13 11.19V9.913l-2.571-2.826L8.56 8.753a.5.5 0 01-.728-.067L4.448 4.317z"}))},i3t=o3t;var h9={};$(h9,{icon:()=>c3t});var Vnr=P(L());var a3t=["title","titleId"];function PJ(){return PJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function s3t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var u3t=function(t){var n=t.title,r=t.titleId,o=l3t(t,a3t);return a("svg",PJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8.5 10h-6a.5.5 0 010-1H8V6H2.5a.5.5 0 010-1H13V2H2.5a.5.5 0 010-1h11a.5.5 0 01.5.5v4a.5.5 0 01-.5.5H9v3h2.5a.5.5 0 01.5.5v4a.5.5 0 01-.5.5h-9a.5.5 0 110-1H11v-3H8.5zM0 .5a.5.5 0 111 0v14a.5.5 0 11-1 0V.5z"}))},c3t=u3t;var g9={};$(g9,{icon:()=>h3t});var Unr=P(L());var p3t=["title","titleId"];function EJ(){return EJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function d3t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var m3t=function(t){var n=t.title,r=t.titleId,o=f3t(t,p3t);return a("svg",EJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M.5 0a.5.5 0 01.5.5v14a.5.5 0 11-1 0V.5A.5.5 0 01.5 0zm13 1a.5.5 0 01.5.5v4a.5.5 0 01-.5.5H9v3h2.5a.5.5 0 01.5.5v4a.5.5 0 01-.5.5h-9a.5.5 0 110-1H9v-3H2.5a.5.5 0 010-1H6V6H2.5a.5.5 0 010-1H10V2H2.5a.5.5 0 010-1h11z"}))},h3t=m3t;var v9={};$(v9,{icon:()=>w3t});var Jnr=P(L());var g3t=["title","titleId"];function CJ(){return CJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function y3t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var b3t=function(t){var n=t.title,r=t.titleId,o=v3t(t,g3t);return a("svg",CJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M10 7.5v6a.5.5 0 11-1 0V8H6v5.5a.5.5 0 11-1 0V3H2v10.5a.5.5 0 11-1 0v-11a.5.5 0 01.5-.5h4a.5.5 0 01.5.5V7h3V4.5a.5.5 0 01.5-.5h4a.5.5 0 01.5.5v9a.5.5 0 11-1 0V5h-3v2.5zM.5 16a.5.5 0 110-1h14a.5.5 0 110 1H.5z"}))},w3t=b3t;var y9={};$(y9,{icon:()=>j3t});var Xnr=P(L());var O3t=["title","titleId"];function AJ(){return AJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function _3t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var S3t=function(t){var n=t.title,r=t.titleId,o=x3t(t,O3t);return a("svg",AJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M14.5 15a.5.5 0 110 1H.5a.5.5 0 110-1h14zm-9-13a.5.5 0 01.5.5L5.999 7H9V4.5a.5.5 0 01.5-.5h4a.5.5 0 01.5.5v9a.5.5 0 11-1 0V7h-3v6.5a.5.5 0 01-.41.492L9.5 14a.5.5 0 01-.5-.5V10H6v3.5a.5.5 0 01-.992.09L5 13.5V6H2v7.5a.5.5 0 11-1 0v-11a.5.5 0 01.5-.5h4z"}))},j3t=S3t;var b9={};$(b9,{icon:()=>C3t});var Ynr=P(L());var I3t=["title","titleId"];function MJ(){return MJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function P3t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var E3t=function(t){var n=t.title,r=t.titleId,o=k3t(t,I3t);return a("svg",MJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M12.877 5.847l-1.02 1.02a.5.5 0 01-.708-.707l1.1-1.099c-.05-.053-.1-.106-.152-.157A6.471 6.471 0 008 3.019V4.5a.5.5 0 01-1 0V3.019a6.47 6.47 0 00-4.261 2.055l1.07 1.071a.5.5 0 01-.706.707l-.99-.99A6.46 6.46 0 001.018 10H2.5a.5.5 0 110 1H1.174c.083.353.196.697.337 1.03a.5.5 0 11-.922.39A7.487 7.487 0 010 9.5a7.483 7.483 0 012.197-5.304A7.487 7.487 0 017.5 2a7.487 7.487 0 015.304 2.197A7.483 7.483 0 0115 9.5a7.487 7.487 0 01-.59 2.92.5.5 0 01-.92-.39c.14-.333.253-.677.336-1.03H12.5a.5.5 0 110-1h1.481a6.483 6.483 0 00-1.104-4.153zm-6.041 5.317a.993.993 0 01-.01-1.404c.384-.385 2.882-2.002 3.149-1.735.267.267-1.35 2.765-1.735 3.15a.993.993 0 01-1.404-.01z"}))},C3t=E3t;var w9={};$(w9,{icon:()=>z3t});var Znr=P(L());var A3t=["title","titleId"];function TJ(){return TJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function T3t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var R3t=function(t){var n=t.title,r=t.titleId,o=M3t(t,A3t);return a("svg",TJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M10.725 3.653a6 6 0 012.847 7.576.5.5 0 01-.928-.372 5 5 0 10-9.293-.014.5.5 0 01-.218.619L1.39 12.47a.5.5 0 01-.708-.23A7.99 7.99 0 010 9a8 8 0 0111.212-7.329.5.5 0 01.234.704l-.721 1.278zm-.933-.38l.5-.889a7 7 0 00-8.902 8.93l.886-.511a6 6 0 017.516-7.53zM6.73 9.467a1.75 1.75 0 112.539 0 2 2 0 11-2.539 0zM8 12.013a1 1 0 100-2 1 1 0 000 2zm0-3a.75.75 0 100-1.5.75.75 0 000 1.5z"}))},z3t=R3t;var O9={};$(O9,{icon:()=>W3t});var tor=P(L());var L3t=["title","titleId"];function RJ(){return RJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function N3t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var F3t=function(t){var n=t.title,r=t.titleId,o=D3t(t,L3t);return a("svg",RJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M12.654 3.48c.248.225.552.389.888.467L11.24 9.43a1.99 1.99 0 00-.915-.404l2.33-5.547zM9.146 9.19a2.008 2.008 0 00-.769.64l-1.572-2c.311-.136.581-.35.785-.618l1.556 1.978zM5.581 7.956l-2.134 4.268a.5.5 0 01-.894-.448l2.134-4.268c.25.22.557.376.894.448zM1 15h13.5a.5.5 0 110 1H.5a.5.5 0 01-.5-.5v-14a.5.5 0 011 0V15zm5-8a1 1 0 110-2 1 1 0 010 2zm4 5a1 1 0 110-2 1 1 0 010 2zm4-9a1 1 0 110-2 1 1 0 010 2z"}))},W3t=F3t;var x9={};$(x9,{icon:()=>U3t});var nor=P(L());var B3t=["title","titleId"];function zJ(){return zJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function V3t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var q3t=function(t){var n=t.title,r=t.titleId,o=H3t(t,B3t);return a("svg",zJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.5 15C5.77 15 2 9.97 2 6.595 2 3.507 4.46 1 7.5 1S13 3.507 13 6.595C13 9.97 9.23 15 7.5 15zm0-1c.286 0 1.48-1.044 2.459-2.35C11.219 9.969 12 8.153 12 6.596 12 4.055 9.983 2 7.5 2S3 4.055 3 6.595c0 1.557.78 3.373 2.041 5.056C6.02 12.956 7.214 14 7.5 14zm0-4.996a2.5 2.5 0 110-5 2.5 2.5 0 010 5zm0-1a1.5 1.5 0 100-3 1.5 1.5 0 000 3z"}))},U3t=q3t;var _9={};$(_9,{icon:()=>K3t});var ior=P(L());var $3t=["title","titleId"];function LJ(){return LJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function G3t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var X3t=function(t){var n=t.title,r=t.titleId,o=J3t(t,$3t);return a("svg",LJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6.5 2.309v8.69a.499.499 0 01-.032.176L9.5 12.691V3.809l-3-1.5zm-1-.04L2 3.825v8.906l3.527-1.568a.5.5 0 01-.027-.164V2.27zm.274-1.216a.498.498 0 01.471.01l3.768 1.884 4.284-1.904A.5.5 0 0115 1.5v10a.5.5 0 01-.297.457l-4.5 2a.5.5 0 01-.427-.01l-3.789-1.894-4.283 1.904a.5.5 0 01-.703-.457v-10a.5.5 0 01.297-.457l4.476-1.99zM10.5 3.825v8.906l3.5-1.556V2.27l-3.5 1.556z"}))},K3t=X3t;var S9={};$(S9,{icon:()=>t5t});var lor=P(L());var Y3t=["title","titleId"];function DJ(){return DJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Z3t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var e5t=function(t){var n=t.title,r=t.titleId,o=Q3t(t,Y3t);return a("svg",DJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6.532 7.34a2.161 2.161 0 112.936 0 2.746 2.746 0 11-2.936 0zM2 0h12a2 2 0 012 2v12a2 2 0 01-2 2H2a2 2 0 01-2-2V2a2 2 0 012-2zm0 1a1 1 0 00-1 1v12a1 1 0 001 1h12a1 1 0 001-1V2a1 1 0 00-1-1H2zm6 5.915a1.161 1.161 0 100-2.322 1.161 1.161 0 000 2.322zm0 4.492a1.746 1.746 0 100-3.492 1.746 1.746 0 000 3.492z"}))},t5t=e5t;var j9={};$(j9,{icon:()=>a5t});var uor=P(L());var r5t=["title","titleId"];function NJ(){return NJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function o5t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var i5t=function(t){var n=t.title,r=t.titleId,o=n5t(t,r5t);return a("svg",NJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6.5 9a.5.5 0 01-.5-.5V3.023A5.5 5.5 0 1011.978 9H6.5zM7 8h5.5a.5.5 0 01.5.5A6.5 6.5 0 116.5 2a.5.5 0 01.5.5V8zm2-6.972V6h4.972C13.696 3.552 11.448 1.304 9 1.028zM14.5 7h-6a.5.5 0 01-.5-.5v-6a.5.5 0 01.5-.5C11.853 0 15 3.147 15 6.5a.5.5 0 01-.5.5zM6.146 8.854a.5.5 0 11.708-.708l4 4a.5.5 0 01-.708.708l-4-4z"}))},a5t=i5t;var I9={};$(I9,{icon:()=>p5t});var por=P(L());var l5t=["title","titleId"];function FJ(){return FJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function u5t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var c5t=function(t){var n=t.title,r=t.titleId,o=s5t(t,l5t);return a("svg",FJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M16 3v11a2 2 0 01-2 2H2a2 2 0 01-2-2V2a2 2 0 012-2h12a2 2 0 012 2v1zm-1 0V2a1 1 0 00-1-1H2a1 1 0 00-1 1v1h14zm0 1H1v10a1 1 0 001 1h12a1 1 0 001-1V4zM4.5 6a.5.5 0 010 1H2.496a.5.5 0 110-1H4.5zm9 0a.5.5 0 110 1h-6a.5.5 0 010-1h6zm-9 3a.5.5 0 010 1H2.496a.5.5 0 110-1H4.5zm9 0a.5.5 0 110 1h-6a.5.5 0 010-1h6zm-9 3a.5.5 0 110 1H2.496a.5.5 0 110-1H4.5zm9 0a.5.5 0 110 1h-6a.5.5 0 110-1h6z"}))},p5t=c5t;var k9={};$(k9,{icon:()=>g5t});var mor=P(L());var f5t=["title","titleId"];function WJ(){return WJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function m5t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var h5t=function(t){var n=t.title,r=t.titleId,o=d5t(t,f5t);return a("svg",WJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M1.5 9.047a.5.5 0 100 1h13a.5.5 0 000-1h-13zm0-1h13a1.5 1.5 0 010 3h-13a1.5 1.5 0 010-3zM10 13a.5.5 0 110 1H4a.5.5 0 110-1h6zM8.001 2.015a.5.5 0 11-.002 1l-5-.015a.5.5 0 11.003-1l5 .015zM14 5a.5.5 0 110 1H6a.5.5 0 010-1h8z"}))},g5t=h5t;var P9={};$(P9,{icon:()=>O5t});var gor=P(L());var v5t=["title","titleId"];function BJ(){return BJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function b5t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var w5t=function(t){var n=t.title,r=t.titleId,o=y5t(t,v5t);return a("svg",BJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8.5 5v6h2a.5.5 0 110 1h-5a.5.5 0 110-1h2V5H5v.5a.5.5 0 01-1 0v-1a.5.5 0 01.5-.5h7a.5.5 0 01.5.51l-.021 1a.5.5 0 11-1-.02l.01-.49H8.5zM1 15h1.5a.5.5 0 110 1h-2a.5.5 0 01-.5-.5v-1.996a.5.5 0 011 0V15zM1 1v1.497a.5.5 0 11-1 0V.5A.5.5 0 01.5 0h2a.5.5 0 010 1H1zm14 0h-1.495a.5.5 0 010-1H15.5a.5.5 0 01.5.5v2a.5.5 0 11-1 0V1zm0 14v-1.5a.5.5 0 111 0v2a.5.5 0 01-.5.5h-2a.5.5 0 110-1H15zM0 6.5a.5.5 0 011 0v3a.5.5 0 01-1 0v-3zM9.5 0a.5.5 0 010 1h-3a.5.5 0 010-1h3zM15 6.5a.5.5 0 111 0v3a.5.5 0 11-1 0v-3zM9.5 15a.5.5 0 110 1h-3a.5.5 0 110-1h3z"}))},O5t=w5t;var E9={};$(E9,{icon:()=>I5t});var yor=P(L());var x5t=["title","titleId"];function HJ(){return HJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function S5t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var j5t=function(t){var n=t.title,r=t.titleId,o=_5t(t,x5t);return a("svg",HJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M10.884 1.802c1.171-.309 2.22-.24 3.103.07.295.104.507.212.631.292l.164.106.048.188c.278 1.066.2 2.175-.091 3.23a6.728 6.728 0 01-.194.598c.035.12.074.273.112.454.227 1.065.247 2.193-.08 3.267a4.855 4.855 0 01-.534 1.175c-.324.514-.7.954-1.117 1.323-.806.712-1.616 1.071-2.235 1.206-.14.179-.346.381-.629.578-.643.447-1.493.711-2.561.711-1.07 0-1.92-.264-2.563-.711a2.874 2.874 0 01-.629-.578c-.618-.134-1.428-.493-2.232-1.203-.419-.37-.796-.81-1.12-1.326a4.855 4.855 0 01-.534-1.175C.096 8.933.116 7.805.343 6.74a6.74 6.74 0 01.112-.454 6.728 6.728 0 01-.194-.598C-.03 4.633-.108 3.524.17 2.458l.048-.188.164-.106c.124-.08.336-.188.63-.291.885-.31 1.933-.38 3.104-.07.184-.108.434-.23.748-.348C5.616 1.17 6.497 1 7.501 1c1.002 0 1.883.17 2.634.455.315.119.565.24.75.347zm3.027 1.116a3.13 3.13 0 00-.255-.102c-.749-.263-1.66-.309-2.708.007l-.238.072-.201-.147c-.11-.08-.354-.217-.728-.358C9.14 2.147 8.38 2 7.501 2c-.88 0-1.641.147-2.283.39-.373.141-.617.278-.727.358l-.2.147-.24-.072c-1.048-.316-1.958-.27-2.707-.007a3.13 3.13 0 00-.255.102c-.167.812-.094 1.674.136 2.503.084.303.166.524.217.637l.082.182-.066.19c-.032.09-.084.27-.137.518-.195.914-.212 1.88.059 2.767.1.333.241.645.423.935.273.434.588.801.936 1.108.434.383.898.655 1.36.834.27.105.474.155.575.17l.248.034.12.22c.051.091.199.266.466.452.476.33 1.127.532 1.993.532.865 0 1.516-.202 1.99-.532.268-.186.416-.36.466-.452l.121-.22.248-.034c.101-.015.305-.065.576-.17.462-.18.927-.452 1.362-.836.347-.307.66-.674.933-1.107.182-.29.322-.601.423-.934.271-.887.254-1.853.06-2.767a4.597 4.597 0 00-.138-.519l-.066-.189.082-.182c.05-.113.133-.334.217-.637.23-.829.303-1.691.136-2.503zM5 5.008c.004.181-.048.364-.264.616-.428.498-.985.488-1.431.049-.326-.321-.325-.732-.29-1.047.085-.76.748-.722 1.262-.44.486.27.717.616.723.823zm5 0c.006-.206.237-.553.724-.821.514-.283 1.176-.321 1.26.44.036.314.038.725-.288 1.046-.446.44-1.005.449-1.433-.05-.217-.25-.267-.434-.263-.614zM7.5 8c-.503 0-.976-.24-1.375-.672-.398-.432-.592-1.126 0-1.528.384-.259 1.082-.3 1.375-.3.294 0 .991.041 1.375.3.593.402.397 1.096 0 1.528C8.477 7.76 8.002 8 7.5 8zm0 1c.808 0 2.656.994 2.49 2.074-.153.993-2.114.925-2.49.925-.374 0-2.336.068-2.49-.925C4.845 9.994 6.693 9 7.5 9z"}))},I5t=j5t;var C9={};$(C9,{icon:()=>A5t});var wor=P(L());var k5t=["title","titleId"];function VJ(){return VJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function E5t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var C5t=function(t){var n=t.title,r=t.titleId,o=P5t(t,k5t);return a("svg",VJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M2.414 8.036L4.89 10.51a.5.5 0 01-.707.708L1.354 8.389a.5.5 0 010-.707l2.828-2.828a.5.5 0 11.707.707L2.414 8.036zm8.768 2.474l2.475-2.474-2.475-2.475a.5.5 0 01.707-.707l2.829 2.828a.5.5 0 010 .707l-2.829 2.829a.5.5 0 11-.707-.708zM8.559 2.506a.5.5 0 01.981.19L7.441 13.494a.5.5 0 01-.981-.19L8.559 2.506z"}))},A5t=C5t;var A9={};$(A9,{icon:()=>L5t});var xor=P(L());var M5t=["title","titleId"];function qJ(){return qJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function R5t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var z5t=function(t){var n=t.title,r=t.titleId,o=T5t(t,M5t);return a("svg",qJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M9.837 7c.11.93.165 1.886.165 2.869V13.5a.5.5 0 11-1 0V9.869A23.3 23.3 0 008.83 7H7.29c-.195 1.04-.292 1.985-.292 2.835V13.5a.5.5 0 11-1 0V9.835c0-.864.092-1.809.276-2.835H2.5a.5.5 0 01-.495-.57c.285-2.023 1.626-3.358 3.931-3.96 1.967-.514 4.22-.606 6.756-.278A1.5 1.5 0 0114 3.679V5.5A1.5 1.5 0 0112.5 7H9.837zm-.569-1H12.5a.5.5 0 00.5-.5V3.68a.5.5 0 00-.436-.497c-2.416-.311-4.54-.225-6.375.254C4.494 3.88 3.491 4.724 3.117 6H9.268zM2 10v3.5a.5.5 0 11-1 0v-4a.5.5 0 01.5-.5h3a.5.5 0 01.5.5v4a.5.5 0 11-1 0V10H2zm10 3.5a.5.5 0 11-1 0v-2a.5.5 0 01.5-.5h3a.5.5 0 01.5.5v2a.5.5 0 11-1 0V12h-2v1.5zM1.016 16.026a.5.5 0 010-1H15a.5.5 0 110 1H1.016z"}))},L5t=z5t;var M9={};$(M9,{icon:()=>B5t});var Sor=P(L());var D5t=["title","titleId"];function UJ(){return UJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function F5t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var W5t=function(t){var n=t.title,r=t.titleId,o=N5t(t,D5t);return a("svg",UJ({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M2 3h12v1H2V3zm0 8h6v1H2v-1z"}),a("path",{d:"M2 7h9.5v.5V7h.039l.083.005a2.958 2.958 0 011.102.298c.309.154.633.394.88.763.248.373.396.847.396 1.434 0 .588-.148 1.061-.396 1.434a2.257 2.257 0 01-.88.763 2.957 2.957 0 01-1.185.302h-.025l-.009.001h-.003s-.002 0-.002-.5v.5H11v1l-2-1.5 2-1.5v1h.506l.044-.003a1.959 1.959 0 00.726-.195c.191-.095.367-.23.495-.423.127-.19.229-.466.229-.879s-.102-.689-.229-.879a1.256 1.256 0 00-.495-.424 1.958 1.958 0 00-.77-.197H2V7z"}))},B5t=W5t;var T9={};$(T9,{icon:()=>$5t});var Ior=P(L());var H5t=["title","titleId"];function $J(){return $J=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function q5t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var U5t=function(t){var n=t.title,r=t.titleId,o=V5t(t,H5t);return a("svg",$J({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M14 3.5L12 2v1H2v1h10v1l2-1.5zM12 9V8H2V7h10V6l2 1.5L12 9zm0 3v1l2-1.5-2-1.5v1H2v1h10z"}))},$5t=U5t;var R9={};$(R9,{icon:()=>Y5t});var Por=P(L());var J5t=["title","titleId"];function JJ(){return JJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function X5t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var K5t=function(t){var n=t.title,r=t.titleId,o=G5t(t,J5t);return a("svg",JJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6.918 9.746l4.537 4.537a2 2 0 102.828-2.829l-3.157-3.156a.5.5 0 01.708-.708l3.156 3.157a3 3 0 11-4.243 4.243l-4.949-4.95a5.001 5.001 0 01-5.22-7.106.5.5 0 01.805-.138L3.676 5.09a1 1 0 101.415-1.414L2.797 1.382a.5.5 0 01.138-.805 5.001 5.001 0 113.983 9.169zM1.226 4.054a4.002 4.002 0 006.693 3.865 4 4 0 00-3.865-6.693l1.744 1.743a2 2 0 11-2.829 2.828L1.226 4.054zm10.229 8.814a1 1 0 111.414-1.414 1 1 0 01-1.414 1.414z"}))},Y5t=K5t;var y0e=P(L()),da=P(dt()),b0e=P(Ct());var LP={accessibility:"accessibility",addDataApp:"app_add_data",advancedSettingsApp:"app_advanced_settings",agentApp:"app_fleet",aggregate:"aggregate",alert:"alert",analyzeEvent:"analyzeEvent",annotation:"annotation",apmApp:"app_apm",apmTrace:"apm_trace",appSearchApp:"app_app_search",apps:"apps",arrowDown:"arrow_down",arrowLeft:"arrow_left",arrowRight:"arrow_right",arrowUp:"arrow_up",arrowStart:"arrowStart",arrowEnd:"arrowEnd",asterisk:"asterisk",auditbeatApp:"app_auditbeat",beaker:"beaker",bell:"bell",bellSlash:"bellSlash",bolt:"bolt",boxesHorizontal:"boxes_horizontal",boxesVertical:"boxes_vertical",branch:"branch",branchUser:"branchUser",broom:"broom",brush:"brush",bug:"bug",bullseye:"bullseye",calendar:"calendar",canvasApp:"app_canvas",casesApp:"app_cases",check:"check",checkInCircleFilled:"checkInCircleFilled",cheer:"cheer",classificationJob:"ml_classification_job",clock:"clock",cloudDrizzle:"cloudDrizzle",cloudStormy:"cloudStormy",cloudSunny:"cloudSunny",cluster:"cluster",codeApp:"app_code",color:"color",compute:"compute",console:"console",consoleApp:"app_console",container:"container",continuityAbove:"continuityAbove",continuityAboveBelow:"continuityAboveBelow",continuityBelow:"continuityBelow",continuityWithin:"continuityWithin",controlsHorizontal:"controls_horizontal",controlsVertical:"controls_vertical",copy:"copy",copyClipboard:"copy_clipboard",createAdvancedJob:"ml_create_advanced_job",createMultiMetricJob:"ml_create_multi_metric_job",createPopulationJob:"ml_create_population_job",createSingleMetricJob:"ml_create_single_metric_job",cross:"cross",crossClusterReplicationApp:"app_cross_cluster_replication",crossInACircleFilled:"crossInACircleFilled",crosshairs:"crosshairs",currency:"currency",cut:"cut",dashboardApp:"app_dashboard",dataVisualizer:"ml_data_visualizer",database:"database",desktop:"desktop",devToolsApp:"app_devtools",discoverApp:"app_discover",document:"document",documentEdit:"documentEdit",documentation:"documentation",documents:"documents",dot:"dot",doubleArrowLeft:"doubleArrowLeft",doubleArrowRight:"doubleArrowRight",download:"download",editorAlignCenter:"editor_align_center",editorAlignLeft:"editor_align_left",editorAlignRight:"editor_align_right",editorBold:"editor_bold",editorChecklist:"editor_checklist",editorCodeBlock:"editor_code_block",editorComment:"editor_comment",editorDistributeHorizontal:"editorDistributeHorizontal",editorDistributeVertical:"editorDistributeVertical",editorHeading:"editor_heading",editorItalic:"editor_italic",editorItemAlignBottom:"editorItemAlignBottom",editorItemAlignCenter:"editorItemAlignCenter",editorItemAlignLeft:"editorItemAlignLeft",editorItemAlignMiddle:"editorItemAlignMiddle",editorItemAlignRight:"editorItemAlignRight",editorItemAlignTop:"editorItemAlignTop",editorLink:"editor_link",editorOrderedList:"editor_ordered_list",editorPositionBottomLeft:"editorPositionBottomLeft",editorPositionBottomRight:"editorPositionBottomRight",editorPositionTopLeft:"editorPositionTopLeft",editorPositionTopRight:"editorPositionTopRight",editorRedo:"editor_redo",editorStrike:"editor_strike",editorTable:"editor_table",editorUnderline:"editor_underline",editorUndo:"editor_undo",editorUnorderedList:"editor_unordered_list",email:"email",empty:"empty",emsApp:"app_ems",eql:"eql",eraser:"eraser",exit:"exit",expand:"expand",expandMini:"expandMini",exportAction:"export",eye:"eye",eyeClosed:"eye_closed",faceHappy:"face_happy",faceNeutral:"face_neutral",faceSad:"face_sad",filebeatApp:"app_filebeat",filter:"filter",flag:"flag",fleetApp:"app_agent",fold:"fold",folderCheck:"folder_check",folderClosed:"folder_closed",folderExclamation:"folder_exclamation",folderOpen:"folder_open",frameNext:"frameNext",framePrevious:"framePrevious",fullScreen:"full_screen",fullScreenExit:"fullScreenExit",function:"function",gear:"gear",gisApp:"app_gis",glasses:"glasses",globe:"globe",grab:"grab",grabHorizontal:"grab_horizontal",graphApp:"app_graph",grid:"grid",grokApp:"app_grok",heart:"heart",heartbeatApp:"app_heartbeat",heatmap:"heatmap",help:"help",home:"home",iInCircle:"iInCircle",image:"image",importAction:"import",indexClose:"index_close",indexEdit:"index_edit",indexFlush:"index_flush",indexManagementApp:"app_index_management",indexMapping:"index_mapping",indexOpen:"index_open",indexPatternApp:"app_index_pattern",indexRollupApp:"app_index_rollup",indexRuntime:"index_runtime",indexSettings:"index_settings",inputOutput:"inputOutput",inspect:"inspect",invert:"invert",ip:"ip",keyboard:"keyboard",kqlField:"kql_field",kqlFunction:"kql_function",kqlOperand:"kql_operand",kqlSelector:"kql_selector",kqlValue:"kql_value",kubernetesNode:"kubernetesNode",kubernetesPod:"kubernetesPod",layers:"layers",lensApp:"app_lens",lettering:"lettering",lineDashed:"lineDashed",lineDotted:"lineDotted",lineSolid:"lineSolid",link:"link",list:"list",listAdd:"list_add",lock:"lock",lockOpen:"lockOpen",logoAWS:"logo_aws",logoAWSMono:"logo_aws_mono",logoAerospike:"logo_aerospike",logoApache:"logo_apache",logoAppSearch:"logo_app_search",logoAzure:"logo_azure",logoAzureMono:"logo_azure_mono",logoBeats:"logo_beats",logoBusinessAnalytics:"logo_business_analytics",logoCeph:"logo_ceph",logoCloud:"logo_cloud",logoCloudEnterprise:"logo_cloud_ece",logoCode:"logo_code",logoCodesandbox:"logo_codesandbox",logoCouchbase:"logo_couchbase",logoDocker:"logo_docker",logoDropwizard:"logo_dropwizard",logoElastic:"logo_elastic",logoElasticStack:"logo_elastic_stack",logoElasticsearch:"logo_elasticsearch",logoEnterpriseSearch:"logo_enterprise_search",logoEtcd:"logo_etcd",logoGCP:"logo_gcp",logoGCPMono:"logo_gcp_mono",logoGithub:"logo_github",logoGmail:"logo_gmail",logoGolang:"logo_golang",logoGoogleG:"logo_google_g",logoHAproxy:"logo_haproxy",logoIBM:"logo_ibm",logoIBMMono:"logo_ibm_mono",logoKafka:"logo_kafka",logoKibana:"logo_kibana",logoKubernetes:"logo_kubernetes",logoLogging:"logo_logging",logoLogstash:"logo_logstash",logoMaps:"logo_maps",logoMemcached:"logo_memcached",logoMetrics:"logo_metrics",logoMongodb:"logo_mongodb",logoMySQL:"logo_mysql",logoNginx:"logo_nginx",logoObservability:"logo_observability",logoOsquery:"logo_osquery",logoPhp:"logo_php",logoPostgres:"logo_postgres",logoPrometheus:"logo_prometheus",logoRabbitmq:"logo_rabbitmq",logoRedis:"logo_redis",logoSecurity:"logo_security",logoSiteSearch:"logo_site_search",logoSketch:"logo_sketch",logoSlack:"logo_slack",logoUptime:"logo_uptime",logoWebhook:"logo_webhook",logoWindows:"logo_windows",logoWorkplaceSearch:"logo_workplace_search",logsApp:"app_logs",logstashFilter:"logstash_filter",logstashIf:"logstash_if",logstashInput:"logstash_input",logstashOutput:"logstash_output",logstashQueue:"logstash_queue",machineLearningApp:"app_ml",magnet:"magnet",magnifyWithExclamation:"magnifyWithExclamation",magnifyWithMinus:"magnifyWithMinus",magnifyWithPlus:"magnifyWithPlus",managementApp:"app_management",mapMarker:"map_marker",memory:"memory",menu:"menu",menuDown:"menuDown",menuLeft:"menuLeft",menuRight:"menuRight",menuUp:"menuUp",merge:"merge",metricbeatApp:"app_metricbeat",metricsApp:"app_metrics",minimize:"minimize",minus:"minus",minusInCircle:"minus_in_circle",minusInCircleFilled:"minus_in_circle_filled",mobile:"mobile",monitoringApp:"app_monitoring",moon:"moon",namespace:"namespace",nested:"nested",node:"node",notebookApp:"app_notebook",number:"number",offline:"offline",online:"online",outlierDetectionJob:"ml_outlier_detection_job",package:"package",packetbeatApp:"app_packetbeat",pageSelect:"pageSelect",pagesSelect:"pagesSelect",paperClip:"paper_clip",partial:"partial",pause:"pause",payment:"payment",pencil:"pencil",percent:"percent",pin:"pin",pinFilled:"pin_filled",pipelineApp:"app_pipeline",play:"play",playFilled:"playFilled",plus:"plus",plusInCircle:"plus_in_circle",plusInCircleFilled:"plus_in_circle_filled",popout:"popout",push:"push",questionInCircle:"question_in_circle",quote:"quote",recentlyViewedApp:"app_recently_viewed",refresh:"refresh",regressionJob:"ml_regression_job",reporter:"reporter",reportingApp:"app_reporting",returnKey:"return_key",save:"save",savedObjectsApp:"app_saved_objects",scale:"scale",search:"search",searchProfilerApp:"app_search_profiler",securityAnalyticsApp:"app_security_analytics",securityApp:"app_security",securitySignal:"securitySignal",securitySignalDetected:"securitySignalDetected",securitySignalResolved:"securitySignalResolved",sessionViewer:"sessionViewer",shard:"shard",share:"share",snowflake:"snowflake",sortDown:"sort_down",sortLeft:"sortLeft",sortRight:"sortRight",sortUp:"sort_up",sortable:"sortable",spacesApp:"app_spaces",sqlApp:"app_sql",starEmpty:"star_empty",starEmptySpace:"star_empty_space",starFilled:"star_filled",starFilledSpace:"star_filled_space",starMinusEmpty:"star_minus_empty",starMinusFilled:"star_minus_filled",starPlusEmpty:"starPlusEmpty",starPlusFilled:"starPlusFilled",stats:"stats",stop:"stop",stopFilled:"stop_filled",stopSlash:"stop_slash",storage:"storage",string:"string",submodule:"submodule",sun:"sun",swatchInput:"swatch_input",symlink:"symlink",tableDensityCompact:"table_density_compact",tableDensityExpanded:"table_density_expanded",tableDensityNormal:"table_density_normal",tableOfContents:"tableOfContents",tag:"tag",tear:"tear",temperature:"temperature",timeline:"timeline",timelionApp:"app_timelion",timeRefresh:"timeRefresh",timeslider:"timeslider",training:"training",trash:"trash",unfold:"unfold",unlink:"unlink",upgradeAssistantApp:"app_upgrade_assistant",uptimeApp:"app_uptime",user:"user",userAvatar:"userAvatar",users:"users",usersRolesApp:"app_users_roles",vector:"vector",videoPlayer:"videoPlayer",visArea:"vis_area",visAreaStacked:"vis_area_stacked",visBarHorizontal:"vis_bar_horizontal",visBarHorizontalStacked:"vis_bar_horizontal_stacked",visBarVertical:"vis_bar_vertical",visBarVerticalStacked:"vis_bar_vertical_stacked",visGauge:"vis_gauge",visGoal:"vis_goal",visLine:"vis_line",visMapCoordinate:"vis_map_coordinate",visMapRegion:"vis_map_region",visMetric:"vis_metric",visPie:"vis_pie",visTable:"vis_table",visTagCloud:"vis_tag_cloud",visText:"vis_text",visTimelion:"vis_timelion",visVega:"vis_vega",visVisualBuilder:"vis_visual_builder",visualizeApp:"app_visualize",watchesApp:"app_watches",wordWrap:"wordWrap",wordWrapDisabled:"wordWrapDisabled",workplaceSearchApp:"app_workplace_search",wrench:"wrench",tokenAlias:"tokenAlias",tokenAnnotation:"tokenAnnotation",tokenArray:"tokenArray",tokenBinary:"tokenBinary",tokenBoolean:"tokenBoolean",tokenClass:"tokenClass",tokenCompletionSuggester:"tokenCompletionSuggester",tokenConstant:"tokenConstant",tokenDate:"tokenDate",tokenDenseVector:"tokenDenseVector",tokenElement:"tokenElement",tokenEnum:"tokenEnum",tokenEnumMember:"tokenEnumMember",tokenEvent:"tokenEvent",tokenException:"tokenException",tokenField:"tokenField",tokenFile:"tokenFile",tokenFlattened:"tokenFlattened",tokenFunction:"tokenFunction",tokenGeo:"tokenGeo",tokenHistogram:"tokenHistogram",tokenInterface:"tokenInterface",tokenIP:"tokenIP",tokenJoin:"tokenJoin",tokenKey:"tokenKey",tokenKeyword:"tokenKeyword",tokenMethod:"tokenMethod",tokenMetricCounter:"tokenMetricCounter",tokenMetricGauge:"tokenMetricGauge",tokenModule:"tokenModule",tokenNamespace:"tokenNamespace",tokenNested:"tokenNested",tokenNull:"tokenNull",tokenNumber:"tokenNumber",tokenObject:"tokenObject",tokenOperator:"tokenOperator",tokenPackage:"tokenPackage",tokenParameter:"tokenParameter",tokenPercolator:"tokenPercolator",tokenProperty:"tokenProperty",tokenRange:"tokenRange",tokenRankFeature:"tokenRankFeature",tokenRankFeatures:"tokenRankFeatures",tokenRepo:"tokenRepo",tokenSearchType:"tokenSearchType",tokenShape:"tokenShape",tokenString:"tokenString",tokenStruct:"tokenStruct",tokenSymbol:"tokenSymbol",tokenTag:"tokenTag",tokenText:"tokenText",tokenTokenCount:"tokenTokenCount",tokenVariable:"tokenVariable"};var i0e=P(xo()),z9=[];function Q5t(){(0,i0e.unstable_batchedUpdates)(function(){for(var e=0;e2&&arguments[2]!==void 0?arguments[2]:{},u=i.method;if(n==="transparent")return"transparent";if(u==="transparent")return n==="plain"?Ks(r.colors.ghost,.2):n==="subdued"?Ks(r.colors.lightShade,.2):Ks(r.colors[n],.1);var f=function(y){return o==="DARK"?oc(y,.8):nc(y,.9)};switch(n){case"plain":return r.colors.emptyShade;case"subdued":return r.colors.body;default:return f(r.colors[n])}},Pd=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=n.method,o=en();return D9(o,t,{method:r})},l0e=function(){return{transparent:Ne("background-color:",Pd("transparent"),";;label:transparent;"),plain:Ne("background-color:",Pd("plain"),";;label:plain;"),subdued:Ne("background-color:",Pd("subdued"),";;label:subdued;"),accent:Ne("background-color:",Pd("accent"),";;label:accent;"),primary:Ne("background-color:",Pd("primary"),";;label:primary;"),success:Ne("background-color:",Pd("success"),";;label:success;"),warning:Ne("background-color:",Pd("warning"),";;label:warning;"),danger:Ne("background-color:",Pd("danger"),";;label:danger;")}};var s0e=function(t){var n=t.euiTheme,r=n.colors,o=n.size,i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},u=i.thumbColor,f=i.trackColor,h=f===void 0?"transparent":f,y=i.width,O=y===void 0?"thin":y,S=i.size,I=i.corner,A=u||Ks(r.darkShade,.5),C=S||o.base,M=I||O==="thin"?"calc(".concat(o.s," * 0.75)"):o.xs,W="scrollbar-color: ".concat(A," ").concat(h,";");return"scrollbar-width: ".concat(O,`; +Background: `).concat(u));for(var f=fv.default.contrast(i,u),h=ik(u),y=i;f50?y=ac(y,.05):y=ic(y,.05),f=fv.default.contrast(y,u);var O=ik(y);if(O<5)return console.warn("High enough contrast could not be determined. Most likely your background color does not adjust for light mode."),y;if(O>95)return console.warn("High enough contrast could not be determined. Most likely your background color does not adjust for dark mode."),y}return(0,fv.default)(y).hex()}},ak=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:2;return function(r){return lc(t,n)(r)}};function yle(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function Sd(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n0&&arguments[0]!==void 0?arguments[0]:1;return function(n){var r=lk(n)==="object"?n.base:n;return"".concat(r*t,"px")}};function Ple(e,t){var n=t.base,r=t.font,o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},i=o.measurement,u=i===void 0?"rem":i,f=o.customScale;if(u==="em")return"".concat(r.scale[e],"em");var h=n*r.scale[e];f&&(h*=r.scale[f]);var y=n*r.scale[r.body.scale];return u==="px"?"".concat(h,"px"):"".concat((h/y).toFixed(4),"rem")}function kle(e,t){var n=t.base,r=t.font,o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},i=o.measurement,u=i===void 0?"rem":i,f=o.customScale,h=r.baseline,y=r.lineHeightMultiplier,O=n*r.scale[e];f&&(O*=r.scale[f]);var S=n*r.scale[r.body.scale],I=O<=n?y:y*.833;if(u==="em")return I.toFixed(4).toString();var A=Math.floor(Math.round(O*I)/h)*h;return u==="px"?"".concat(A,"px"):"".concat((A/S).toFixed(4),"rem")}var Ele=16,Cle={xxs:Or(pa(.125)),xs:Or(pa(.25)),s:Or(pa(.5)),m:Or(pa(.75)),base:Or(pa()),l:Or(pa(1.5)),xl:Or(pa(2)),xxl:Or(pa(2.5)),xxxl:Or(pa(3)),xxxxl:Or(pa(4))};function sk(e,t){return tIe(e)||eIe(e,t)||Zje(e,t)||Qje()}function Qje(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function Zje(e,t){if(e){if(typeof e=="string")return Ale(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Ale(e,t)}}function Ale(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n1&&arguments[1]!==void 0?arguments[1]:50,r=Date.now();return function(){r+n-Date.now()<0&&(t.apply(void 0,arguments),r=Date.now())}};function DAe(e,t){return BAe(e)||WAe(e,t)||FAe(e,t)||NAe()}function NAe(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function FAe(e,t){if(e){if(typeof e=="string")return Zce(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Zce(e,t)}}function Zce(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n1&&arguments[1]!==void 0?arguments[1]:!0,r=cF();return r&&n?t.includes(r):!1};var tpe=function(t){var n=t instanceof HTMLElement?t:null;return typeof t=="string"?n=document.querySelector(t):typeof t=="function"&&(n=t()),n};var rpe=k(fF());var dF=function(t){return t===void 0},HAe=function(t){return t===null},hs=function(t){return dF(t)||HAe(t)};var npe=function(t){return rpe.default.isDate(t)};var ppe=k(ck()),fpe=k(tu()),dpe=k(ipe()),mpe=k(lpe()),hpe=k(mF()),gpe=k(cpe()),oMe=k(W1()),Pd=function(t){return(0,ppe.default)(t)},vpe=function(t){return(0,fpe.default)(t)},Ra=function(t){return(0,dpe.default)(t)},jk=function(t){return(0,mpe.default)(t)},Ik=function(t){return(0,hpe.default)(t)},ype=function(t){return(0,gpe.default)(t)};var jv=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=n.yes,o=r===void 0?"Yes":r,i=n.no,u=i===void 0?"No":i,f=n.nil,h=f===void 0?"":f;return hs(t)?h:t?o:u};var kk=k(fF());function Pk(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?Pk=function(n){return typeof n}:Pk=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},Pk(e)}function bpe(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function wpe(e){for(var t=1;t1&&arguments[1]!==void 0?arguments[1]:{},r=n.refTime;return(0,kk.default)(t).calendar(r,n)},p5={date:"D MMM YYYY",longDate:"DD MMMM YYYY",shortDate:"D MMM YY",dateTime:"D MMM YYYY HH:mm",longDateTime:"DD MMMM YYYY HH:mm:ss",shortDateTime:"D MMM YY HH:mm",dobShort:"Do MMM YY",dobLong:"Do MMMM YYYY",iso8601:"YYYY-MM-DDTHH:mm:ss.SSSZ",calendar:hF,calendarDateTime:function(t,n){return hF(t,wpe({sameDay:"[Today at] H:mmA",nextDay:"[Tomorrow at] H:mmA",nextWeek:"dddd [at] H:mmA",lastDay:"[Yesterday at] H:mmA",lastWeek:"[Last] dddd [at] H:mmA",sameElse:"Do MMM YYYY [at] H:mmA"},n))},calendarDate:function(t,n){return hF(t,wpe({sameDay:"[Today]",nextDay:"[Tomorrow]",nextWeek:"dddd",lastDay:"[Yesterday]",lastWeek:"[Last] dddd",sameElse:"Do MMM YYYY"},n))}};function aMe(e){return p5.hasOwnProperty(e)}function lMe(e){return Pk(e)==="object"&&(e.hasOwnProperty("format")||e.hasOwnProperty("nil")||e.hasOwnProperty("options"))}var Iv=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"dateTime";if(Ra(n)){if(hs(t))return"";var r=aMe(n)?p5[n]:n;if(Pd(r))return r(t,{});if(Ra(r))return(0,kk.default)(t).format(r)}if(lMe(n)){var o=n.format,i=o===void 0?"dateTime":o,u=n.nil,f=u===void 0?"":u,h=n.options,y=p5[i]||i;if(hs(t))return f;if(Pd(y))return y(t,h);if(Ra(y))return(0,kk.default)(t).format(y)}throw new Error("Failed to format value using dateFormatKeyOrConfig: ".concat(n))};var _pe=k(xpe());var sMe={decimal1:"0,0.0",decimal2:"0,0.00",decimal3:"0,0.000",ordinal:"0o",integer:"0,0"},Pv=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r,o="",i;if(Ra(n)?r=n:(r=n.format,o=n.nil||"",i=n.round),!r)return hs(t)?o:t.toString();var u=i?Math.round:Math.floor,f=sMe[r]||r;return hs(t)?o:(0,_pe.default)(t).format(f,u)};var kv=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{nil:""};return hs(t)?n.nil:t.toString()};var Ck=function e(t){return hs(t)||ype(t)?"":Ra(t)?kv(t):npe(t)?Iv(t):jk(t)?jv(t):Ik(t)?Pv(t):vpe(t)?Array.isArray(t)?t.map(function(n){return e(n)}).join(", "):e(t):JSON.stringify(t)};var cMe=/^([a-zA-Z0-9]+\.)*elastic\.co$/,Ppe=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"";try{var n=new URL(t),r=n.protocol==="http:"||n.protocol==="https:",o=!!n.host.match(cMe);return r&&o}catch{return!1}};var ni=function(t){var n=t.href,r=t.target,o=r===void 0?"":r,i=t.rel,u=!!n&&Ppe(n),f=i?i.split(" ").filter(function(h){return!!h.length&&h!=="noreferrer"}):[];return u||f.push("noreferrer"),o.includes("_blank")&&f.indexOf("noopener")===-1&&f.push("noopener"),f.sort().join(" ").trim()};var kpe=k(mt()),Ak="asc",vF="desc",gs=Object.freeze({ASC:Ak,DESC:vF,isAsc:function(t){return t===Ak},reverse:function(t){return this.isAsc(t)?vF:Ak}}),Epe=kpe.default.oneOf([Ak,vF]);var e0e=k(Kpe()),ULe=k(Zde()),H1=function(t,n,r){return(0,e0e.default)(t,n,r)};var d5=Object.freeze({default:function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:gs.ASC;return function(n,r){var o=n!=null,i=r!=null;if(o&&!i)return-1;if(!o&&i)return 1;if(!o&&!i||n===r)return 0;var u=n>r?1:-1;return gs.isAsc(t)?u:-1*u}},reverse:function(t){return function(n,r){return t(r,n)}},value:function(e){function t(n,r){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}(function(e,t){return t||(t=this.default(gs.ASC)),function(n,r){return t(e(n),e(r))}}),property:function(t,n){return this.value(function(r){return H1(r,t)},n)}});function Nk(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function EF(e,t){return XLe(e)||GLe(e,t)||JLe(e,t)||$Le()}function $Le(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function JLe(e,t){if(e){if(typeof e=="string")return t0e(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return t0e(e,t)}}function t0e(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);nK)&&(K=be.fit,de={fit:be.fit,position:_e,top:be.top+window.pageYOffset,left:be.left+window.pageXOffset,arrow:be.arrow},K===1))break}if(de==null)throw new Error("Failed to calculate bestPosition");return C&&(de.anchorBoundingBox=M),de}function KLe(e){var t,n,r=e.position,o=e.align,i=e.anchorBoundingBox,u=e.popoverBoundingBox,f=e.windowBoundingBox,h=e.containerBoundingBox,y=e.arrowConfig,O=e.offset,S=O===void 0?0:O,I=e.buffer,A=I===void 0?0:I,C=kF[r],M=Av[C],F=PF[C],R=n0e(A),B=EF(R,4),Y=B[0],X=B[1],le=B[2],Z=B[3],K=YLe({crossAxisFirstSide:C,crossAxisSecondSide:M,crossAxisDimension:F,position:r,align:o,buffer:A,offset:S,windowBoundingBox:f,containerBoundingBox:h,popoverBoundingBox:u,anchorBoundingBox:i,arrowConfig:y}),de=K.crossAxisPosition,se=K.crossAxisArrowPosition,_e=PF[r],be=r0e[_e],Pe=QLe({position:r,offset:S,popoverBoundingBox:u,anchorBoundingBox:i,arrowConfig:y}),Ue=Pe.primaryAxisPosition,Le=Pe.primaryAxisArrowPosition,Ge=(t={},Nk(t,C,de),Nk(t,be,Ue),t),Ke=CF(f,h);Ke.top+=Y,Ke.right-=X,Ke.bottom-=le,Ke.left+=Z;var rt=eDe({top:Ge.top,right:Ge.left+u.width,bottom:Ge.top+u.height,left:Ge.left,width:u.width,height:u.height},Ke),ot=y?(n={},Nk(n,C,se-Ge[C]),Nk(n,be,Le),n):void 0;return{fit:rt,top:Ge.top,left:Ge.left,arrow:ot?{left:ot.left,top:ot.top}:void 0}}function YLe(e){var t=e.crossAxisFirstSide,n=e.crossAxisSecondSide,r=e.crossAxisDimension,o=e.position,i=e.align,u=e.buffer,f=e.offset,h=e.windowBoundingBox,y=e.containerBoundingBox,O=e.popoverBoundingBox,S=e.anchorBoundingBox,I=e.arrowConfig,A=O[r],C=S[r],M=C/2,F=S[t]+M-A/2,R=CF(h,y),B=ZLe(S,R,u,f,o),Y=I?I.arrowBuffer:0,X=(A-C)/2,le=0,Z=1,K=0,de=1;if(i!=null){Z=i==="top"||i==="left"?1:-1,le=X;var se=X+le,_e=se>B[Av[i]];K=_e?se-B[Av[i]]:0,de=-1*Z}else{var be=B[t],Pe=B[n],Ue=be>Pe;de=Ue?-1:1;var Le=Math.min(be,Pe),Ge=X>Le;K=Ge?X-Le:0}var Ke=K*de,rt=F+Ke+le*Z,ot;if(I){var dt=I.arrowWidth;if(ot=S[t]+M-dt/2,otrt+A){var Ze=rt+A,Xt=ot-(Ze-Y-dt);rt+=Xt}}return{crossAxisPosition:rt,crossAxisArrowPosition:ot}}function QLe(e){var t=e.position,n=e.offset,r=e.popoverBoundingBox,o=e.anchorBoundingBox,i=e.arrowConfig,u=t==="top"||t==="left",f=PF[t],h=r[f],y=r0e[f],O=o[y],S=o[f],I=u?h:S,A=(n+I)*(u?-1:1),C=O+A,M;return i&&(M=u?h:0),{primaryAxisPosition:C,primaryAxisArrowPosition:M}}function IF(e){var t=e.getBoundingClientRect();return{top:t.top,right:t.right,bottom:t.bottom,left:t.left,height:t.height,width:t.width}}function ZLe(e,t,n,r,o){var i=n0e(n),u=EF(i,4),f=u[0],h=u[1],y=u[2],O=u[3];return{top:e.top-t.top-f-(o==="top"?r:0),right:t.right-e.right-h-(o==="right"?r:0),bottom:t.bottom-e.bottom-y-(o==="bottom"?r:0),left:e.left-t.left-O-(o==="left"?r:0)}}function eDe(e,t){var n=CF(e,t);if(n.left>n.right||n.top>n.top)return 0;var r=(n.right-n.left)*(n.bottom-n.top),o=(e.right-e.left)*(e.bottom-e.top);return r/o}function CF(e,t){var n=Math.max(e.top,t.top),r=Math.min(e.right,t.right),o=Math.min(e.bottom,t.bottom),i=Math.max(e.left,t.left),u=Math.max(o-n,0),f=Math.max(r-i,0);return{top:n,right:r,bottom:o,left:i,height:u,width:f}}function m5(e,t){for(var n=[];n.push(e),e=e.offsetParent,!(e==null||e.contains(t)););n.reverse();for(var r=0,o=n;r0){var r=Date.now(),o=r+t,i=function u(){n(),o>Date.now()&&requestAnimationFrame(u)};requestAnimationFrame(i)}};var a0e=k(L()),AF=function(t){return(0,a0e.useCallback)(function(n){return t.forEach(function(r){r&&(typeof r=="function"?r(n):r.current=n)})},[t])};var oE=k(L()),Ut=k(mt()),tE=k(Ct());var ear=k(L()),Bi=k(mt()),H0e=k(Ct());var g5={};$(g5,{icon:()=>lDe});var FBt=k(L());var nDe=["title","titleId"];function MF(){return MF=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function iDe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var aDe=function(t){var n=t.title,r=t.titleId,o=oDe(t,nDe);return a("svg",MF({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 0a8 8 0 110 16A8 8 0 018 0zm0 1a7 7 0 100 14A7 7 0 008 1zm3.974 4.342a.5.5 0 01-.233.596l-.083.036L9 6.86v2.559l.974 2.923a.5.5 0 01-.233.596l-.083.036a.5.5 0 01-.596-.233l-.036-.083-1-3L8 9.5l-.026.158-1 3a.5.5 0 01-.97-.228l.022-.088L7 9.416V6.86l-2.658-.886a.5.5 0 01.228-.97l.088.022L7.583 6h.833l2.926-.974a.5.5 0 01.632.316zM8 3a1 1 0 110 2 1 1 0 010-2z"}))},lDe=aDe;var v5={};$(v5,{icon:()=>fDe});var BBt=k(L());var sDe=["title","titleId"];function TF(){return TF=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function cDe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var pDe=function(t){var n=t.title,r=t.titleId,o=uDe(t,sDe);return a("svg",TF({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M2.5 2a.5.5 0 100 1 .5.5 0 000-1zm0-1a1.5 1.5 0 011.415 1h1.908a1.5 1.5 0 011.393.943L8.839 7H12.5a.5.5 0 010 1H8.839l-1.623 4.057A1.5 1.5 0 015.823 13H3.915a1.5 1.5 0 110-1h1.908a.5.5 0 00.464-.314L7.761 8H3.915a1.5 1.5 0 110-1H7.76L6.287 3.314A.5.5 0 005.823 3H3.915A1.5 1.5 0 112.5 1zm0 11a.5.5 0 110 1 .5.5 0 010-1zM3 7.5a.5.5 0 10-1 0 .5.5 0 001 0zm9.354-3.354a.5.5 0 00-.708.708L13.793 7a.707.707 0 010 1l-2.147 2.146a.5.5 0 00.708.708L14.5 8.707a1.707 1.707 0 000-2.414l-2.146-2.147z"}))},fDe=pDe;var y5={};$(y5,{icon:()=>vDe});var VBt=k(L());var dDe=["title","titleId"];function RF(){return RF=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function hDe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var gDe=function(t){var n=t.title,r=t.titleId,o=mDe(t,dDe);return a("svg",RF({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M7.59 10.059L7.35 5.18h1.3L8.4 10.06h-.81zm.394 1.901a.61.61 0 01-.448-.186.606.606 0 01-.186-.444c0-.174.062-.323.186-.446a.614.614 0 01.448-.184c.169 0 .315.06.44.182.124.122.186.27.186.448a.6.6 0 01-.189.446.607.607 0 01-.437.184zM2 14a1 1 0 01-.878-1.479l6-11a1 1 0 011.756 0l6 11A1 1 0 0114 14H2zm0-1h12L8 2 2 13z"}))},vDe=gDe;var b5={};$(b5,{icon:()=>xDe});var UBt=k(L());var yDe=["title","titleId"];function zF(){return zF=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function wDe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ODe=function(t){var n=t.title,r=t.titleId,o=bDe(t,yDe);return a("svg",zF({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M8 9.169L2 5.25v6.17l6 3.428 6-3.428V5.25L8 9.17zM15 4v8l-7 4-7-4V4l7-4 7 4zm-1.428.336L8 1.152 2.428 4.336 8 7.974l5.572-3.638z"}))},xDe=ODe;var w5={};$(w5,{icon:()=>PDe});var JBt=k(L());var _De=["title","titleId"];function LF(){return LF=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function jDe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var IDe=function(t){var n=t.title,r=t.titleId,o=SDe(t,_De);return a("svg",LF({xmlns:"http://www.w3.org/2000/svg",width:14,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M13.924 4.013a.605.605 0 00-.228-.236L7.304.082a.607.607 0 00-.608 0L.304 3.777A.62.62 0 000 4.304v7.392c0 .217.116.418.304.527l6.392 3.695c.188.11.42.11.608 0l6.392-3.695a.609.609 0 00.304-.527V4.304a.607.607 0 00-.076-.291zM1 5.079v6.391l6 3.47 6-3.47V5.08L7.252 8.432 7 8.579l-.252-.147L1 5.079zm11.476-.852L7 1.06 1.524 4.227 7 7.42l5.476-3.194z"}))},PDe=IDe;var O5={};$(O5,{icon:()=>MDe});var XBt=k(L());var kDe=["title","titleId"];function DF(){return DF=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function CDe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ADe=function(t){var n=t.title,r=t.titleId,o=EDe(t,kDe);return a("svg",DF({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M3 6.5a4.5 4.5 0 115 4.473V16H7v-5.027A4.5 4.5 0 013 6.5z"}))},MDe=ADe;var x5={};$(x5,{icon:()=>DDe});var YBt=k(L());var TDe=["title","titleId"];function NF(){return NF=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function zDe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var LDe=function(t){var n=t.title,r=t.titleId,o=RDe(t,TDe);return a("svg",NF({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M2 0h12a2 2 0 012 2v12a2 2 0 01-2 2H2a2 2 0 01-2-2V2a2 2 0 012-2zm0 1a1 1 0 00-1 1v12a1 1 0 001 1h12a1 1 0 001-1V2a1 1 0 00-1-1H2zm.5 2h10a.5.5 0 110 1h-10a.5.5 0 010-1zm1 3h6a.5.5 0 010 1h-6a.5.5 0 010-1zm2 3h4a.5.5 0 010 1h-4a.5.5 0 010-1zm3 3h5a.5.5 0 110 1h-5a.5.5 0 110-1z"}))},DDe=LDe;var _5={};$(_5,{icon:()=>HDe});var ZBt=k(L());var NDe=["title","titleId"];function FF(){return FF=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function WDe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var BDe=function(t){var n=t.title,r=t.titleId,o=FDe(t,NDe);return a("svg",FF({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M32 30H0V3h12.57l3 5H32v22zM2 28h28V10H14.43l-3-5H2v23z"}),a("path",{className:"euiIcon__fillSecondary",d:"M21 18h-4v-4h-2v4h-4v2h4v4h2v-4h4z"}))},HDe=BDe;var S5={};$(S5,{icon:()=>JDe});var tHt=k(L());var VDe=["title","titleId"];function WF(){return WF=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function UDe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var $De=function(t){var n=t.title,r=t.titleId,o=qDe(t,VDe);return a("svg",WF({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M2.909 26.182h1.939v4.848H2.909z"}),a("path",{d:"M4.848 16.62V0H2.91v16.62a3.879 3.879 0 101.94 0zm-.97 5.683a1.94 1.94 0 110-3.879 1.94 1.94 0 010 3.879z"}),a("path",{className:"euiIcon__fillSecondary",d:"M14.545 16.485h1.939V31.03h-1.939z"}),a("path",{d:"M16.485 6.924V0h-1.94v6.924a3.879 3.879 0 101.94 0zm-.97 5.682a1.94 1.94 0 110-3.879 1.94 1.94 0 010 3.88z"}),a("path",{className:"euiIcon__fillSecondary",d:"M26.182 26.182h1.939v4.848h-1.939z"}),a("path",{d:"M28.121 16.62V0h-1.94v16.62a3.879 3.879 0 101.94 0zm-.97 5.683a1.94 1.94 0 110-3.879 1.94 1.94 0 010 3.879z"}))},JDe=$De;var j5={};$(j5,{icon:()=>QDe});var nHt=k(L());var GDe=["title","titleId"];function BF(){return BF=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function KDe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var YDe=function(t){var n=t.title,r=t.titleId,o=XDe(t,GDe);return a("svg",BF({width:32,height:32,viewBox:"0 0 32 32",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M21 2.82L16 .038 11 2.82v2.289l5-2.782 5 2.782v-2.29z"}),a("path",{className:"euiIcon__fillSecondary",d:"M21 7.282L16 4.5l-5 2.782V9.57l5-2.781 5 2.781V7.282z"}),a("path",{d:"M7 5.045L2 7.827v15.577l14 7.788 14-7.788V7.827l-5-2.782v2.289l3 1.669v13.225l-12 6.676-12-6.676V9.003l3-1.669V5.045z"}),a("path",{className:"euiIcon__fillSecondary",fillRule:"evenodd",clipRule:"evenodd",d:"M22 12.5L16 9l-6 3.5v7l6 3.5 6-3.5v-7zm-9.974 1.205L16 11.387l3.974 2.318v4.59L16 20.613l-3.974-2.318v-4.59z"}))},QDe=YDe;var I5={};$(I5,{icon:()=>nNe});var iHt=k(L());var ZDe=["title","titleId"];function HF(){return HF=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function tNe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var rNe=function(t){var n=t.title,r=t.titleId,o=eNe(t,ZDe);return a("svg",HF({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M3 10h4v2H1V1h30v6h-2V3H3v7zm26 19v-6h2v8H18v-8h2v6h9z"}),a("path",{className:"euiIcon__fillSecondary",d:"M31 10H9v11h12c5.523 0 10-4.477 10-10v-1zm-10 9H11v-7h17.938A8.001 8.001 0 0121 19z"}))},nNe=rNe;var P5={};$(P5,{icon:()=>sNe});var lHt=k(L());var oNe=["title","titleId"];function VF(){return VF=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function aNe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var lNe=function(t){var n=t.title,r=t.titleId,o=iNe(t,oNe);return a("svg",VF({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M15.5 11.915L27 5.279 19.5.938a7.002 7.002 0 00-7 0l-8 4.62A7 7 0 001 11.62v9.237a7 7 0 003.5 6.061l7.5 4.33V17.98a7 7 0 013.5-6.063zM10 27.785v-9.808a9 9 0 014.5-7.793l8.503-4.91L18.5 2.672a5.003 5.003 0 00-5 0l-8 4.619A5 5 0 003 11.62v9.238a5 5 0 002.5 4.33l4.5 2.598z"}),a("path",{fillRule:"evenodd",className:"euiIcon__fillSecondary",d:"M18.409 13.55a7.089 7.089 0 011.035 1.711A6.93 6.93 0 0120 17.98v13.27l7.5-4.33a7 7 0 003.5-6.061v-9.239a6.992 6.992 0 00-1.587-4.421L18.409 13.55zm2.777.705A8.933 8.933 0 0122 17.979v9.807l4.5-2.598a5 5 0 002.5-4.33V11.62c0-.588-.106-1.161-.303-1.7l-7.511 4.335z"}))},sNe=lNe;var k5={};$(k5,{icon:()=>dNe});var uHt=k(L());var uNe=["title","titleId"];function qF(){return qF=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function pNe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var fNe=function(t){var n=t.title,r=t.titleId,o=cNe(t,uNe);return a("svg",qF({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M15 0h2v32h-2z"}),a("path",{d:"M0 32h13v-2H2V2h11V0H0zM19 0v2h11v28H19v2h13V0z"}))},dNe=fNe;var E5={};$(E5,{icon:()=>yNe});var pHt=k(L());var mNe=["title","titleId"];function UF(){return UF=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function gNe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var vNe=function(t){var n=t.title,r=t.titleId,o=hNe(t,mNe);return a("svg",UF({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M7 17h2v7H7zM12 14h2v10h-2zM17 16h2v8h-2zM22 14h3v2h-3zM22 18h3v2h-3zM22 22h3v2h-3z"}),a("path",{d:"M30.73 24a6.47 6.47 0 01.45-2.19c.337-.9.52-1.85.54-2.81a8.55 8.55 0 00-.54-2.81 6.47 6.47 0 01-.45-2.19 9.2 9.2 0 01.62-2.49c.53-1.57 1.08-3.19.08-4.2-1-1.01-2.41-.44-3.52.05a5.59 5.59 0 01-2.09.64 5.3 5.3 0 01-.59 0L16 .28 6.77 8a5.3 5.3 0 01-.59 0 5.59 5.59 0 01-2.09-.65C3 6.87 1.6 6.25.57 7.31c-1.03 1.06-.45 2.63.08 4.2A9.2 9.2 0 011.27 14a6.47 6.47 0 01-.45 2.19A8.55 8.55 0 00.28 19c.02.96.203 1.91.54 2.81A6.47 6.47 0 011.27 24a9.2 9.2 0 01-.62 2.49c-.53 1.57-1.08 3.19-.08 4.2.353.38.852.59 1.37.58a5.67 5.67 0 002.15-.63A5.59 5.59 0 016.18 30a7.13 7.13 0 012.29.47 8 8 0 002.62.53 7.37 7.37 0 002.47-.51A7.14 7.14 0 0116 30a6.24 6.24 0 012.14.45 8 8 0 002.77.55 8.08 8.08 0 002.77-.55 6.24 6.24 0 012.14-.45 5.59 5.59 0 012.09.65c1.11.49 2.49 1.11 3.52.05 1.03-1.06.45-2.63-.08-4.2a9.2 9.2 0 01-.62-2.5zM21.17 7h-.26a8 8 0 00-2.77.55A6.24 6.24 0 0116 8a6.24 6.24 0 01-2.14-.45A8 8 0 0011.09 7h-.26L16 2.72 21.17 7zm8.89 22.27a4.42 4.42 0 01-1.34-.46 7.08 7.08 0 00-2.9-.82 8.14 8.14 0 00-2.78.55 6.13 6.13 0 01-2.13.45 6.24 6.24 0 01-2.14-.45A8 8 0 0016 28a9 9 0 00-3.08.6 5.74 5.74 0 01-1.83.4 6.36 6.36 0 01-2-.43A8.72 8.72 0 006.18 28a7.08 7.08 0 00-2.9.82 9.65 9.65 0 01-1.28.52 6.08 6.08 0 01.52-2.21c.403-1 .65-2.055.73-3.13a8.55 8.55 0 00-.54-2.81A6.47 6.47 0 012.27 19a6.47 6.47 0 01.44-2.19c.337-.9.52-1.85.54-2.81a10.48 10.48 0 00-.72-3.13 9 9 0 01-.59-2.16H2c.447.1.88.255 1.29.46a7.08 7.08 0 002.9.82A8.14 8.14 0 009 9.44 6.13 6.13 0 0111.09 9a6.13 6.13 0 012.13.45A8.14 8.14 0 0016 10a8.14 8.14 0 002.78-.55A6.13 6.13 0 0120.91 9a6.13 6.13 0 012.09.44 8.14 8.14 0 002.78.55 7.08 7.08 0 002.9-.82A9.65 9.65 0 0130 8.66a6.08 6.08 0 01-.52 2.21c-.403 1-.65 2.055-.73 3.13.02.96.203 1.91.54 2.81a6.47 6.47 0 01.44 2.19 6.47 6.47 0 01-.44 2.19 8.55 8.55 0 00-.54 2.81c.078 1.074.32 2.13.72 3.13a9 9 0 01.59 2.16v-.02z"}))},yNe=vNe;var C5={};$(C5,{icon:()=>_Ne});var dHt=k(L());var bNe=["title","titleId"];function $F(){return $F=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ONe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var xNe=function(t){var n=t.title,r=t.titleId,o=wNe(t,bNe);return a("svg",$F({width:32,height:32,viewBox:"0 0 32 32",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M22.5 24a5.5 5.5 0 100-11 5.5 5.5 0 000 11zm0 2a7.5 7.5 0 100-15 7.5 7.5 0 000 15z"}),a("path",{d:"M30.293 27.707l-4-4 1.414-1.414 4 4-1.414 1.414zM6 4H2v27h25v-3h-2v1H4V6h2V4zm19 6h2V4h-4v2h2v4z"}),a("path",{className:"euiIcon__fillSecondary",fillRule:"evenodd",clipRule:"evenodd",d:"M16.381 3.024l.538 1.158h2.274l.636 2.545H9.68l.637-2.545h2.558l.538-1.158c.292-.63.955-1.024 1.484-1.024.53 0 1.193.394 1.485 1.024zm6.01 5.703l-1.636-6.545h-2.56C17.6.898 16.262 0 14.897 0c-1.364 0-2.703.898-3.299 2.182H8.755L7.118 8.727h15.273zM7 15h6v-2H7v2zm6 5H7v-2h6v2zm-6 5h6v-2H7v2z"}))},_Ne=xNe;var A5={};$(A5,{icon:()=>kNe});var hHt=k(L());var SNe=["title","titleId"];function JF(){return JF=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function INe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var PNe=function(t){var n=t.title,r=t.titleId,o=jNe(t,SNe);return a("svg",JF({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M11.276 29l.594 2H0l7.621-14.29.811 2.73L3.333 29h7.943zM28.92 31l-4.987-16.598A16 16 0 008.688 3l1.8 6H8.4L6 1h2.607a18 18 0 0117.241 12.828L31 31h-2.08z"}),a("path",{className:"euiIcon__fillSecondary",d:"M12.037 14.02L16.492 29h6.827l-2.333-7.849a10 10 0 00-8.949-7.13zM9.35 12h2.05a12 12 0 0111.503 8.581L26 31H15L9.35 12z"}))},kNe=PNe;var M5={};$(M5,{icon:()=>TNe});var vHt=k(L());var ENe=["title","titleId"];function GF(){return GF=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ANe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var MNe=function(t){var n=t.title,r=t.titleId,o=CNe(t,ENe);return a("svg",GF({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M29 9H3a3 3 0 01-3-3V3a3 3 0 013-3h26a3 3 0 013 3v3a3 3 0 01-3 3zM3 2a1 1 0 00-1 1v3a1 1 0 001 1h26a1 1 0 001-1V3a1 1 0 00-1-1H3z"}),a("path",{className:"euiIcon__fillSecondary",d:"M29 32H3a3 3 0 01-3-3V14a3 3 0 013-3h26a3 3 0 013 3v15a3 3 0 01-3 3zM3 13a1 1 0 00-1 1v15a1 1 0 001 1h26a1 1 0 001-1V14a1 1 0 00-1-1H3z"}),a("path",{d:"M7.29 17.71l3.3 3.29-3.3 3.29 1.42 1.42 4.7-4.71-4.7-4.71zM15 24h9v2h-9z"}))},TNe=MNe;var T5={};$(T5,{icon:()=>NNe});var bHt=k(L());var RNe=["title","titleId"];function XF(){return XF=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function LNe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var DNe=function(t){var n=t.title,r=t.titleId,o=zNe(t,RNe);return a("svg",XF({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M0 0v16h8.7l5.3-6V0H0zm2 2h10v7H7v5H2V2zm8.45 9L9 12.64V11h1.45zM18 16v16h8.7l5.3-6V16H18zm2 2h10v7h-5v5h-5V18zm8.45 9L27 28.64V27h1.45z"}),a("path",{className:"euiIcon__fillSecondary",d:"M5 18H3c0 6.075 4.925 11 11 11h2v-2h-2a9 9 0 01-9-9zM18 3h-2v2h2a9 9 0 019 9h2c0-6.075-4.925-11-11-11z"}))},NNe=DNe;var R5={};$(R5,{icon:()=>VNe});var OHt=k(L());var FNe=["title","titleId"];function KF(){return KF=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function BNe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var HNe=function(t){var n=t.title,r=t.titleId,o=WNe(t,FNe);return a("svg",KF({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M29 9H3a3 3 0 01-3-3V3a3 3 0 013-3h26a3 3 0 013 3v3a3 3 0 01-3 3zM3 2a1 1 0 00-1 1v3a1 1 0 001 1h26a1 1 0 001-1V3a1 1 0 00-1-1H3z"}),a("path",{className:"euiIcon__fillSecondary",d:"M12 20H3a3 3 0 01-3-3v-3a3 3 0 013-3h9a3 3 0 013 3v3a3 3 0 01-3 3zm-9-7a1 1 0 00-1 1v3a1 1 0 001 1h9a1 1 0 001-1v-3a1 1 0 00-1-1H3z"}),a("path",{d:"M12 31H3a3 3 0 01-3-3v-3a3 3 0 013-3h9a3 3 0 013 3v3a3 3 0 01-3 3zm-9-7a1 1 0 00-1 1v3a1 1 0 001 1h9a1 1 0 001-1v-3a1 1 0 00-1-1H3z"}),a("path",{className:"euiIcon__fillSecondary",d:"M29 31h-9a3 3 0 01-3-3V14a3 3 0 013-3h9a3 3 0 013 3v14a3 3 0 01-3 3zm-9-18a1 1 0 00-1 1v14a1 1 0 001 1h9a1 1 0 001-1V14a1 1 0 00-1-1h-9z"}))},VNe=HNe;var z5={};$(z5,{icon:()=>GNe});var _Ht=k(L());var qNe=["title","titleId"];function YF(){return YF=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function $Ne(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var JNe=function(t){var n=t.title,r=t.titleId,o=UNe(t,qNe);return a("svg",YF({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M21 28h-2v-8.49l.6-.26A9 9 0 0021 3.52V11H11V3.52a9 9 0 001.4 15.73l.6.26V28h-2v-7.21A11 11 0 0111.6.92L13 .31V9h6V.31l1.4.61a11 11 0 01.6 19.87V28z"}),a("path",{className:"euiIcon__fillSecondary",d:"M11 30h10v2H11z"}))},GNe=JNe;var L5={};$(L5,{icon:()=>ZNe});var jHt=k(L());var XNe=["title","titleId"];function QF(){return QF=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function YNe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var QNe=function(t){var n=t.title,r=t.titleId,o=KNe(t,XNe);return a("svg",QF({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M8.33 23.67l4.79-10.55 10.55-4.79-4.79 10.55-10.55 4.79zm6.3-9l-2.28 5 5-2.28 2.28-5-5 2.28z"}),a("path",{d:"M16 0C7.163 0 0 7.163 0 16s7.163 16 16 16 16-7.163 16-16A16 16 0 0016 0zm1 29.95V28h-2v1.95A14 14 0 012.05 17H4v-2H2.05A14 14 0 0115 2.05V4h2V2.05A14 14 0 0129.95 15H28v2h1.95A14 14 0 0117 29.95z"}))},ZNe=QNe;var D5={};$(D5,{icon:()=>oFe});var PHt=k(L());var eFe=["title","titleId"];function ZF(){return ZF=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function rFe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var nFe=function(t){var n=t.title,r=t.titleId,o=tFe(t,eFe);return a("svg",ZF({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M3 22h3v2H1V1h23v5h-2V3H3z"}),a("path",{d:"M15.228 29c1.492-1.678 1.353-2.859.009-5.654-.049-.1-.049-.1-.097-.203-1.369-2.855-1.626-4.491-.325-6.582 2.796-4.498 9.514-2.642 14.185 2.317V10H10v19h5.228zm2.47 0H29v-6.983c-3.88-5.406-10.376-7.795-12.487-4.4-.83 1.336-.669 2.37.43 4.662l.097.2c1.352 2.814 1.731 4.63.659 6.521zM31 8v23H8V8h23z"}))},oFe=nFe;var N5={};$(N5,{icon:()=>uFe});var EHt=k(L());var iFe=["title","titleId"];function eW(){return eW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function lFe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var sFe=function(t){var n=t.title,r=t.titleId,o=aFe(t,iFe);return a("svg",eW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M8 18h16v2H8zM8 13h9v2H8zM8 23h16v2H8z"}),a("path",{d:"M21.41 0H5a3 3 0 00-3 3v26a3 3 0 003 3h22a3 3 0 003-3V8.59L21.41 0zM22 3.41L26.59 8H22V3.41zM27 30H5a1 1 0 01-1-1V3a1 1 0 011-1h15v8h8v19a1 1 0 01-1 1z"}))},uFe=sFe;var F5={};$(F5,{icon:()=>mFe});var AHt=k(L());var cFe=["title","titleId"];function tW(){return tW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function fFe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var dFe=function(t){var n=t.title,r=t.titleId,o=pFe(t,cFe);return a("svg",tW({width:32,height:32,viewBox:"0 0 32 32",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M2.996 18.636L0 20.434v6.132l6 3.6 5-3 5 3 5-3 5 3 6-3.6v-6.132l-5-3v-5l-5-3v-5l-6-3.6-6 3.6v2.832l2 .033V5.566l4-2.4 4 2.4v3.868l-1.996 1.197 1 1.733L21 11.166l4 2.4v3.868l-4 2.4-2.257-1.354-.971 1.75L20 21.565v3.868l-4 2.4-4-2.4v-1.7l-2-.033v1.733l-4 2.4-4-2.4v-3.868l1.996-1.197-1-1.733zM22 25.434v-3.868l4-2.4 4 2.4v3.868l-4 2.4-4-2.4z"}),a("path",{className:"euiIcon__fillSecondary",d:"M11 22.166l-6-3.6v-6.132l6-3.6 6 3.6v6.132l-6 3.6zm4-4.732v-3.868l-4-2.4-4 2.4v3.868l4 2.4 4-2.4z"}))},mFe=dFe;var W5={};$(W5,{icon:()=>bFe});var THt=k(L());var hFe=["title","titleId"];function rW(){return rW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function vFe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var yFe=function(t){var n=t.title,r=t.titleId,o=gFe(t,hFe);return a("svg",rW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M29.014 23.89l2.296 1.145L16 32.101.53 24.961l2.49-1.056 2.453 1.132-.003.002L16 29.899l10.69-4.934-.003-.001 2.327-1.074zm-4.972-7.482l7.268 3.627L16 27.101.53 19.961l7.668-3.252c.392.486.838 1.02 1.34 1.604L5.47 20.039 16 24.899l10.69-4.934-3.954-1.973c.493-.58.928-1.107 1.306-1.584z"}),a("path",{d:"M18 9a2 2 0 10-4 0 2 2 0 004 0zm2 0a4 4 0 11-8 0 4 4 0 018 0zm-3.268 12.681l-.732.787-.732-.787c-3.557-3.824-5.817-6.462-6.81-7.96A8.746 8.746 0 017 8.875C7 3.97 11.033 0 16 0s9 3.97 9 8.875a8.746 8.746 0 01-1.459 4.846c-.992 1.498-3.252 4.136-6.809 7.96zm5.142-9.064A6.747 6.747 0 0023 8.875C23 5.081 19.87 2 16 2S9 5.081 9 8.875c0 1.349.394 2.636 1.126 3.742.846 1.277 2.812 3.593 5.874 6.912 3.062-3.32 5.028-5.635 5.874-6.912z"}))},bFe=yFe;var B5={};$(B5,{icon:()=>SFe});var zHt=k(L());var wFe=["title","titleId"];function nW(){return nW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function xFe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var _Fe=function(t){var n=t.title,r=t.titleId,o=OFe(t,wFe);return a("svg",nW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M24 20a4 4 0 110-8 4 4 0 010 8zm0-6a2 2 0 100 4 2 2 0 000-4zm-8.2-5.62A4 4 0 1118 1.06a4 4 0 01-2.2 7.32zm0-6a2 2 0 10.01 0h-.01zm.01 29.24a4 4 0 11-.083-8 4 4 0 01.083 8zm0-6a2 2 0 10.39 0 2 2 0 00-.4 0h.01z"}),a("path",{d:"M18 17v-2h-6.14a4 4 0 00-.86-1.64l2.31-3.44-1.68-1.12-2.31 3.44A4 4 0 008 12a4 4 0 100 8 4 4 0 001.32-.24l2.31 3.44 1.66-1.12L11 18.64a4 4 0 00.86-1.64H18zM6 16a2 2 0 114 0 2 2 0 01-4 0z"}))},SFe=_Fe;var H5={};$(H5,{icon:()=>EFe});var DHt=k(L());var jFe=["title","titleId"];function oW(){return oW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function PFe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var kFe=function(t){var n=t.title,r=t.titleId,o=IFe(t,jFe);return a("svg",oW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M9.727 2.91V.97c-1.357 0-4.18 0-5.818 1.94-.97 1.182-1.328 2.908-.97 4.983.563 3.307.97 6.332.301 7.157-.3.31-.97.465-2.24.465v1.94c1.27 0 1.94.155 2.25.494.698.824.262 3.879-.3 7.156-.35 2.124-.01 3.802.96 4.956C5.527 32 8.35 32 9.726 32v-1.94c-1.144 0-3.287 0-4.315-1.221a4.112 4.112 0 01-.533-3.414c.843-5.042.97-7.37-.136-8.727-.068-.077-.145-.136-.213-.203-.068-.068.145-.127.213-.204 1.144-1.367.97-3.695.136-8.727a4.112 4.112 0 01.543-3.414C6.44 2.91 8.583 2.91 9.727 2.91zM32.03 17.454v-1.94c-1.27 0-1.94-.155-2.25-.494-.698-.825-.261-3.88.301-7.157.35-2.123 0-3.801-.97-4.984C27.493.94 24.672.94 23.294.94v1.97c1.145 0 3.288 0 4.315 1.22a4.112 4.112 0 01.544 3.414c-.844 5.043-.97 7.37.135 8.728.068.077.146.135.214.203.067.068-.146.126-.214.204-1.144 1.367-.97 3.694-.135 8.727.329 1.162.13 2.41-.544 3.413-1.018 1.242-3.16 1.242-4.305 1.242V32c1.358 0 4.18 0 5.818-1.94.97-1.182 1.329-2.908.97-4.984-.563-3.306-.97-6.332-.3-7.156.3-.31.969-.465 2.24-.465z"}),a("path",{className:"euiIcon__fillSecondary",d:"M26.212 15.515h-2.007a7.758 7.758 0 00-6.72-6.72V6.788h-1.94v2.007a7.758 7.758 0 00-6.72 6.72H6.818v1.94h2.007a7.758 7.758 0 006.72 6.72v2.007h1.94v-2.007a7.758 7.758 0 006.72-6.72h2.007v-1.94zm-8.727 6.7v-1.851h-1.94v1.852a5.818 5.818 0 01-4.76-4.761h1.851v-1.94h-1.852a5.818 5.818 0 014.761-4.761v1.852h1.94v-1.852a5.818 5.818 0 014.761 4.761h-1.852v1.94h1.852a5.818 5.818 0 01-4.761 4.76z"}))},EFe=kFe;var V5={};$(V5,{icon:()=>RFe});var FHt=k(L());var CFe=["title","titleId"];function iW(){return iW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function MFe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var TFe=function(t){var n=t.title,r=t.titleId,o=AFe(t,CFe);return a("svg",iW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M4.14 15.39a8.058 8.058 0 01-2.2-4.043A6.788 6.788 0 014.198 5.47a6.73 6.73 0 018.727-.213l1.26-1.464a8.65 8.65 0 00-11.277.232A8.727 8.727 0 00.068 11.6a10.172 10.172 0 002.793 5.275l1.28-1.484z"}),a("path",{d:"M15.515 31.274L4.548 18.454 15.855 4.763a8.67 8.67 0 0112.266-.746 8.727 8.727 0 012.91 7.205c-.243 2.695-2.037 4.732-3.482 6.37L15.515 31.275zm-8.427-12.82l8.427 9.862 10.55-11.995c1.32-1.503 2.822-3.21 3.007-5.265a6.788 6.788 0 00-2.24-5.586 6.73 6.73 0 00-9.504.563L7.088 18.455z"}))},RFe=TFe;var q5={};$(q5,{icon:()=>FFe});var BHt=k(L());var zFe=["title","titleId"];function aW(){return aW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function DFe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var NFe=function(t){var n=t.title,r=t.titleId,o=LFe(t,zFe);return a("svg",aW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M17 18v-2h-2v2H3v6h2v-4h10v4h2v-4h10v4h2v-6z"}),a("path",{className:"euiIcon__fillSecondary",d:"M4 32a3 3 0 110-6 3 3 0 010 6zm0-4a1 1 0 100 2 1 1 0 000-2zm12 4a3 3 0 110-6 3 3 0 010 6zm0-4a1 1 0 100 2 1 1 0 000-2zm12 4a3 3 0 110-6 3 3 0 010 6zm0-4a1 1 0 100 2 1 1 0 000-2zM23 8V6h-2.1a5 5 0 00-.73-1.75l1.49-1.49-1.42-1.42-1.49 1.49A5 5 0 0017 2.1V0h-2v2.1a5 5 0 00-1.75.73l-1.49-1.49-1.42 1.42 1.49 1.49A5 5 0 0011.1 6H9v2h2.1a5 5 0 00.73 1.75l-1.49 1.49 1.41 1.41 1.49-1.49a5 5 0 001.76.74V14h2v-2.1a5 5 0 001.75-.73l1.49 1.49 1.41-1.41-1.48-1.5A5 5 0 0020.9 8H23zm-7 2a3 3 0 110-6 3 3 0 010 6z"}),a("path",{d:"M16 8a1 1 0 01-1-1 1.39 1.39 0 010-.2.65.65 0 01.06-.18.74.74 0 01.09-.18 1.61 1.61 0 01.12-.15.93.93 0 01.33-.21 1 1 0 011.09.21l.12.15a.78.78 0 01.09.18.62.62 0 01.1.18 1.27 1.27 0 010 .2 1 1 0 01-1 1z"}))},FFe=NFe;var U5={};$(U5,{icon:()=>qFe});var VHt=k(L());var WFe=["title","titleId"];function lW(){return lW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function HFe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var VFe=function(t){var n=t.title,r=t.titleId,o=BFe(t,WFe);return a("svg",lW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M20 14h-8a3 3 0 01-3-3V3a3 3 0 013-3h8a3 3 0 013 3v8a3 3 0 01-3 3zM12 2a1 1 0 00-1 1v8a1 1 0 001 1h8a1 1 0 001-1V3a1 1 0 00-1-1h-8zM17 18v-2h-2v2H3v6h2v-4h10v4h2v-4h10v4h2v-6z"}),a("path",{className:"euiIcon__fillSecondary",d:"M4 32a3 3 0 110-6 3 3 0 010 6zm0-4a1 1 0 100 2 1 1 0 000-2zm12 4a3 3 0 110-6 3 3 0 010 6zm0-4a1 1 0 100 2 1 1 0 000-2zm12 4a3 3 0 110-6 3 3 0 010 6zm0-4a1 1 0 100 2 1 1 0 000-2zM13 4h6v2h-6zM13 8h6v2h-6z"}))},qFe=VFe;var $5={};$($5,{icon:()=>XFe});var UHt=k(L());var UFe=["title","titleId"];function sW(){return sW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function JFe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var GFe=function(t){var n=t.title,r=t.titleId,o=$Fe(t,UFe);return a("svg",sW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M32 26v-2h-2.1a5 5 0 00-.73-1.75l1.49-1.49-1.41-1.41-1.49 1.49A5 5 0 0026 20.1V18h-2v2.1a5 5 0 00-1.75.73l-1.49-1.49-1.41 1.41 1.49 1.49A5 5 0 0020.1 24H18v2h2.1a5 5 0 00.73 1.75l-1.49 1.49 1.41 1.41 1.49-1.49a5 5 0 001.76.74V32h2v-2.1a5 5 0 001.75-.73l1.49 1.49 1.41-1.41-1.49-1.49A5 5 0 0029.9 26H32zm-7 2a3 3 0 110-6 3 3 0 010 6z"}),a("path",{d:"M25.71 24.29a1 1 0 00-1.09-.21 1.15 1.15 0 00-.33.21.93.93 0 00-.21.33 1 1 0 001.3 1.3 1.15 1.15 0 00.33-.21 1 1 0 00.21-1.09.94.94 0 00-.21-.33z"}),a("path",{className:"euiIcon__fillSecondary",d:"M5 6h16v2H5zM5 12h16v2H5zM5 18h10v2H5zM5 24h8v2H5z"}),a("path",{d:"M16 32H3a3 3 0 01-3-3V3a3 3 0 013-3h20a3 3 0 013 3v13h-2V3a1 1 0 00-1-1H3a1 1 0 00-1 1v26a1 1 0 001 1h13v2z"}))},XFe=GFe;var J5={};$(J5,{icon:()=>eWe});var JHt=k(L());var KFe=["title","titleId"];function uW(){return uW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function QFe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ZFe=function(t){var n=t.title,r=t.titleId,o=YFe(t,KFe);return a("svg",uW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M23.793 14.293l1.414 1.414-6.408 6.409-3.75-3.25-4.342 4.341-1.414-1.414 5.658-5.659 3.75 3.25 5.092-5.091zM12 11v5l-2 2v-7h2zm10-6v8l-2 2V5h2zm-5 3v7l-2-2V8h2z"}),a("path",{d:"M17 0c8.284 0 15 6.716 15 15 0 8.284-6.716 15-15 15-3.782 0-7.238-1.4-9.876-3.71l-5.417 5.417-1.414-1.414 5.417-5.417A14.943 14.943 0 012 15c0-1.05.108-2.074.313-3.062l1.906.672C4.075 13.385 4 14.184 4 15c0 7.18 5.82 13 13 13s13-5.82 13-13S24.18 2 17 2c-1.002 0-1.978.113-2.915.328l-.75-1.877A15.031 15.031 0 0117 0zM9.621 1.937l.75 1.877a13.062 13.062 0 00-4.82 5.024l-1.907-.673a15.068 15.068 0 015.977-6.228z"}))},eWe=ZFe;var G5={};$(G5,{icon:()=>iWe});var XHt=k(L());var tWe=["title","titleId"];function cW(){return cW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function nWe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var oWe=function(t){var n=t.title,r=t.titleId,o=rWe(t,tWe);return a("svg",cW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M1 8c3.983 0 7.732 1.013 11.001 2.797v2.312A20.887 20.887 0 002 10.023v11.025c4.85.462 9.27 4.183 9.955 8.691l.035.261H12v2h-1.938l-.018-1.236c-.116-4.015-4.336-7.631-8.793-7.76L0 22.986V8h1zm13-8h1c9.28 0 16.825 7.437 16.997 16.677L32 17v15h-2V17c0-7.84-6.014-14.274-13.68-14.943L16 2.033v7.681l-2-1.143V0h1-1z"}),a("path",{className:"euiIcon__fillSecondary",d:"M26.997 30.636L27.009 32H14V11.305l1.483.82c6.994 3.861 11.382 10.735 11.514 18.51zm-2.048-1.04C24.505 23.556 21.205 18.2 16 14.771V30h8.974l-.025-.404z"}))},iWe=oWe;var X5={};$(X5,{icon:()=>cWe});var YHt=k(L());var aWe=["title","titleId"];function pW(){return pW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function sWe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var uWe=function(t){var n=t.title,r=t.titleId,o=lWe(t,aWe);return a("svg",pW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M16 21a5 5 0 110-10 5 5 0 010 10zm0-8a3 3 0 100 6 3 3 0 000-6z"}),a("path",{d:"M20 32h-8v-4.06a1 1 0 00-1.61-.67l-2.88 2.87-5.65-5.65 2.87-2.87a.92.92 0 00.2-1 .93.93 0 00-.86-.6H0V12h4.06a.92.92 0 00.85-.58.94.94 0 00-.19-1L1.86 7.51l5.65-5.65 2.87 2.87A1 1 0 0012 4.06V0h8v4.06a1 1 0 001.61.67l2.87-2.87 5.66 5.66-2.87 2.87a.92.92 0 00-.2 1 .93.93 0 00.86.6H32v8h-4.06a.92.92 0 00-.85.58.94.94 0 00.19 1l2.87 2.87-5.66 5.66-2.87-2.87a1 1 0 00-1.61.67L20 32zm-6-2h4v-2.06a3 3 0 015-2.08l1.46 1.46 2.83-2.83L25.86 23a3 3 0 012.08-5H30v-4h-2.06a3 3 0 01-2.08-5l1.46-1.46-2.83-2.85L23 6.14a3 3 0 01-5-2.08V2h-4v2.06a3 3 0 01-5 2.08L7.51 4.69 4.69 7.51 6.14 9a3 3 0 01-2.08 5H2v4h2.06a3 3 0 012.08 5l-1.45 1.49 2.83 2.83L9 25.86a3 3 0 015 2.08V30z"}))},cWe=uWe;var K5={};$(K5,{icon:()=>hWe});var ZHt=k(L());var pWe=["title","titleId"];function fW(){return fW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function dWe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var mWe=function(t){var n=t.title,r=t.titleId,o=fWe(t,pWe);return a("svg",fW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M16 32C7.163 32 0 24.837 0 16S7.163 0 16 0s16 7.163 16 16a16 16 0 01-16 16zm0-30C8.268 2 2 8.268 2 16s6.268 14 14 14 14-6.268 14-14A14 14 0 0016 2z"}),a("path",{className:"euiIcon__fillSecondary",d:"M28 16h-2c0-5.523-4.477-10-10-10S6 10.477 6 16H4C4 9.373 9.373 4 16 4s12 5.373 12 12z"}),a("path",{d:"M21.71 11.71L20.3 10.3 18 12.57a4 4 0 00-2-.57 4 4 0 104 4 4 4 0 00-.57-2l2.28-2.29zM16 18a2 2 0 110-4 2 2 0 010 4z"}))},hWe=mWe;var Y5={};$(Y5,{icon:()=>wWe});var tVt=k(L());var gWe=["title","titleId"];function dW(){return dW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function yWe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var bWe=function(t){var n=t.title,r=t.titleId,o=vWe(t,gWe);return a("svg",dW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M30 19.092v12.88H2v-5.386l6.747-6.747.708.708c.236.236.48.463.733.68L4 27.414v2.558h24v-8.91c.186-.166.369-.339.546-.516L30 19.092zm-20.85-3.19A10.955 10.955 0 018 11C8 4.925 12.925 0 19 0s11 4.925 11 11c0 1.76-.414 3.425-1.15 4.9l-1.51-1.51A8.973 8.973 0 0028 11a9 9 0 10-17.34 3.391l-1.51 1.51z"}),a("path",{className:"euiIcon__fillSecondary",d:"M19 20a8.96 8.96 0 005.618-1.968l-4.202-4.204a2 2 0 00-2.828 0l-4.205 4.205A8.96 8.96 0 0019 20zm-2.826-7.586a4 4 0 015.656 0l5.656 5.657-.707.707A10.967 10.967 0 0119 22a10.967 10.967 0 01-7.778-3.221l-.707-.707 5.659-5.658z"}))},wWe=bWe;var Q5={};$(Q5,{icon:()=>jWe});var nVt=k(L());var OWe=["title","titleId"];function mW(){return mW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function _We(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var SWe=function(t){var n=t.title,r=t.titleId,o=xWe(t,OWe);return a("svg",mW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M10 18v.56a1 1 0 01-.68.95L3 21.61V10a1 1 0 01.4-.8l3.2-2.4-1.2-1.6-3.2 2.4A3 3 0 001 10v12a3 3 0 001.2 2.4l3.2 2.4 1.2-1.6-2.47-1.85 5.82-1.95A3 3 0 0012 18.56V18h-2zM29.8 7.6l-3.2-2.4-1.2 1.6 3.2 2.4a1 1 0 01.4.8v11.61l-6.32-2.11a1 1 0 01-.68-.95V18h-2v.56a3 3 0 002.05 2.85l5.82 1.94-2.47 1.85 1.2 1.6 3.2-2.4A3 3 0 0031 22V10a3 3 0 00-1.2-2.4z"}),a("path",{d:"M11 6A3 3 0 018.88.88a3.07 3.07 0 014.24 0A3 3 0 0111 6zm0-4a1 1 0 10-.012 2A1 1 0 0011 2zm0 30a3 3 0 01-2.12-5.12 3.07 3.07 0 014.24 0A3 3 0 0111 32zm0-4a1 1 0 10-.012 2A1 1 0 0011 28zm0-12a3 3 0 01-2.12-5.12 3.07 3.07 0 014.24 0A3 3 0 0111 16zm0-4a1 1 0 10-.012 2A1 1 0 0011 12zm10-6A3 3 0 0118.88.88a3.07 3.07 0 014.24 0A3 3 0 0121 6zm0-4a1 1 0 10-.012 2A1 1 0 0021 2zm0 30a3 3 0 01-2.12-5.12 3.07 3.07 0 014.24 0A3 3 0 0121 32zm0-4a1 1 0 10-.012 2A1 1 0 0021 28zm0-12a3 3 0 01-2.12-5.12 3.07 3.07 0 014.24 0A3 3 0 0121 16zm0-4a1 1 0 10-.012 2A1 1 0 0021 12z"}))},jWe=SWe;var Z5={};$(Z5,{icon:()=>CWe});var iVt=k(L());var IWe=["title","titleId"];function hW(){return hW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function kWe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var EWe=function(t){var n=t.title,r=t.titleId,o=PWe(t,IWe);return a("svg",hW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M1.81 15.19A8.94 8.94 0 0115.62 3.86l.38.42.38-.42a8.94 8.94 0 0114.26 10.68l-1.7-1.07a6.94 6.94 0 00-11.07-8.28L16 7.29l-1.87-2.1A6.94 6.94 0 003.41 14l-1.6 1.19zM16 31.18l-7.74-8.51 1.48-1.34L16 28.21l6.26-6.88 1.48 1.34z"}),a("path",{className:"euiIcon__fillSecondary",d:"M16.16 23.29l-4.1-7.17L10.62 19H0v-2h9.38l2.56-5.12 3.9 6.83 4.13-10.32L23.66 17H32v2h-9.66l-2.31-5.39z"}))},CWe=EWe;var e4={};$(e4,{icon:()=>zWe});var lVt=k(L());var AWe=["title","titleId"];function gW(){return gW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function TWe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var RWe=function(t){var n=t.title,r=t.titleId,o=MWe(t,AWe);return a("svg",gW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M25 2h-5V0h-2v2h-3V0h-2v2h-3V0H8v2H3v26h22V2zm-2 24H5V4h3v2h2V4h3v2h2V4h3v2h2V4h3v22z"}),a("path",{d:"M27 7v23H8v2h21V7z"}),a("path",{className:"euiIcon__fillSecondary",d:"M8 12h12v2H8zM8 17h12v2H8z"}))},zWe=RWe;var t4={};$(t4,{icon:()=>WWe});var uVt=k(L());var LWe=["title","titleId"];function vW(){return vW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function NWe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var FWe=function(t){var n=t.title,r=t.titleId,o=DWe(t,LWe);return a("svg",vW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M16 20a4 4 0 110-8 4 4 0 010 8zm0-6a2 2 0 100 4 2 2 0 000-4z"}),a("path",{d:"M8 4a4 4 0 10-4 4 4 4 0 002-.57l5.27 5.27 1.41-1.41L7.43 6A4 4 0 008 4zM4 6a2 2 0 110-4 2 2 0 010 4zm16.71 6.71L26 7.43A4 4 0 0028 8a4 4 0 10-4-4 4 4 0 00.57 2l-5.27 5.27 1.41 1.44zM28 2a2 2 0 110 4 2 2 0 010-4zM11.29 19.29L6 24.57A4 4 0 004 24a4 4 0 104 4 4 4 0 00-.57-2l5.27-5.27-1.41-1.44zM4 30a2 2 0 110-4 2 2 0 010 4zm24-6a4 4 0 00-2 .57l-5.27-5.27-1.41 1.41L24.57 26a4 4 0 00-.57 2 4 4 0 104-4zm0 6a2 2 0 110-4 2 2 0 010 4z"}))},WWe=FWe;var r4={};$(r4,{icon:()=>UWe});var pVt=k(L());var BWe=["title","titleId"];function yW(){return yW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function VWe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var qWe=function(t){var n=t.title,r=t.titleId,o=HWe(t,BWe);return a("svg",yW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M29 12a3 3 0 00-3 3h-4a3 3 0 00-3-3h-6a3 3 0 00-3 3H6a3 3 0 00-3-3H0v14h3a3 3 0 003-3h4a3 3 0 003 3h6a3 3 0 003-3h4a3 3 0 003 3h3V12h-3zM3 24H2V14h1a1 1 0 011 1v8a1 1 0 01-1 1zm17-3v2a1 1 0 01-1 1h-6a1 1 0 01-1-1v-2H6v-4h6v-2a1 1 0 011-1h6a1 1 0 011 1v2h6v4h-6zm10 3h-1a1 1 0 01-1-1v-8a1 1 0 011-1h1v10z"}),a("path",{className:"euiIcon__fillSecondary",d:"M22 6H10v2h5v2h2V8h5z"}))},UWe=qWe;var n4={};$(n4,{icon:()=>KWe});var dVt=k(L());var $We=["title","titleId"];function bW(){return bW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function GWe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var XWe=function(t){var n=t.title,r=t.titleId,o=JWe(t,$We);return a("svg",bW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M16 32C7.163 32 0 24.837 0 16S7.163 0 16 0s16 7.163 16 16a16 16 0 01-16 16zm0-30C8.268 2 2 8.268 2 16s6.268 14 14 14 14-6.268 14-14A14 14 0 0016 2z"}),a("path",{className:"euiIcon__fillSecondary",d:"M15 4h2v9.17A3.009 3.009 0 0118.83 15H26v2h-7.17A3.001 3.001 0 1115 13.17V4zm1 13a1 1 0 100-2 1 1 0 000 2z"}))},KWe=XWe;var o4={};$(o4,{icon:()=>tBe});var hVt=k(L());var YWe=["title","titleId"];function wW(){return wW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ZWe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var eBe=function(t){var n=t.title,r=t.titleId,o=QWe(t,YWe);return a("svg",wW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M25 5h-.17v2H25a1 1 0 011 1v20a1 1 0 01-1 1H7a1 1 0 01-1-1V8a1 1 0 011-1h.17V5H7a3 3 0 00-3 3v20a3 3 0 003 3h18a3 3 0 003-3V8a3 3 0 00-3-3z"}),a("path",{d:"M23 3h-3V0h-8v3H9v6h14V3zm-2 4H11V5h3V2h4v3h3v2z"}),a("path",{className:"euiIcon__fillSecondary",d:"M10 13h12v2H10zM10 18h12v2H10zM10 23h12v2H10z"}))},tBe=eBe;var i4={};$(i4,{icon:()=>aBe});var vVt=k(L());var rBe=["title","titleId"];function OW(){return OW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function oBe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var iBe=function(t){var n=t.title,r=t.titleId,o=nBe(t,rBe);return a("svg",OW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M20.38 7.001L17 9.619V0h-2v9.619l-3.37-2.618-1.25 1.513L16 12.878l5.63-4.364z"}),a("path",{d:"M21.06.165l-1.11 1.61 9.25 5.983L16 16.29 2.8 7.758l9.25-5.983-1.1-1.61L0 7.234v13.653l16 10.337 16-10.337V7.234L21.06.164zM2 9.57l13 8.407v10.279L2 19.84V9.57zm15 18.676V17.978l13-8.407V19.85l-13 8.397z"}))},aBe=iBe;var a4={};$(a4,{icon:()=>pBe});var bVt=k(L());var lBe=["title","titleId"];function xW(){return xW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function uBe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var cBe=function(t){var n=t.title,r=t.titleId,o=sBe(t,lBe);return a("svg",xW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M11.63 8h7.38v2h-7.38z"}),a("path",{d:"M7 8h3.19v2H7z"}),a("path",{className:"euiIcon__fillSecondary",d:"M7 16h7.38v2H7z"}),a("path",{d:"M15.81 16H19v2h-3.19zM7 12h9v2H7z"}),a("path",{d:"M13 0C5.82 0 0 5.82 0 13s5.82 13 13 13 13-5.82 13-13A13 13 0 0013 0zm0 24C6.925 24 2 19.075 2 13S6.925 2 13 2s11 4.925 11 11-4.925 11-11 11zM22.581 23.993l1.414-1.414 7.708 7.708-1.414 1.414z"}))},pBe=cBe;var l4={};$(l4,{icon:()=>gBe});var OVt=k(L());var fBe=["title","titleId"];function _W(){return _W=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function mBe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var hBe=function(t){var n=t.title,r=t.titleId,o=dBe(t,fBe);return a("svg",_W({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M14 32l-.36-.14A21.07 21.07 0 010 12.07V5.44L14 .06l14 5.38v6.63a21.07 21.07 0 01-13.64 19.78L14 32zM2 6.82v5.25a19.08 19.08 0 0012 17.77 19.08 19.08 0 0012-17.77V6.82L14 2.2 2 6.82z"}),a("path",{className:"euiIcon__fillSecondary",d:"M9 17.83h2V23H9zM11 10.18V7H9v3.18a3 3 0 102 0zM10 14a1 1 0 110-2 1 1 0 010 2zM17 7h2v5.17h-2zM21 17a3 3 0 10-4 2.82V23h2v-3.18A3 3 0 0021 17zm-3 1a1 1 0 110-2 1 1 0 010 2z"}))},gBe=hBe;var s4={};$(s4,{icon:()=>OBe});var _Vt=k(L());var vBe=["title","titleId"];function SW(){return SW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function bBe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var wBe=function(t){var n=t.title,r=t.titleId,o=yBe(t,vBe);return a("svg",SW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M3 10h4v2H5v7.928c0 1.299.808 2.795 2.88 4.48 1.83 1.489 4.524 3.02 8.12 4.584V26h2v5.992l-1.38-.567c-4.372-1.797-7.724-3.613-10-5.465C4.358 24.122 3 22.114 3 19.928V10z"}),a("path",{className:"euiIcon__fillSecondary",d:"M9 10h9v14l-1.272-.458c-1.367-.494-3.23-1.314-4.768-2.39C10.484 20.118 9 18.636 9 16.761V10zm1.895 1.876v4.887c0 .877.744 1.867 2.158 2.856.937.656 2.038 1.219 3.052 1.657v-9.4h-5.21z"}),a("path",{d:"M29 1H9v7h2V2.966h16V16.73c0 .558-.245 1.128-.756 1.72-.515.596-1.256 1.158-2.12 1.668-1.381.818-2.961 1.434-4.124 1.817V24c1.26-.378 3.334-1.12 5.155-2.197.965-.57 1.905-1.261 2.612-2.08.712-.822 1.233-1.827 1.233-2.992V1z"}))},OBe=wBe;var u4={};$(u4,{icon:()=>IBe});var jVt=k(L());var xBe=["title","titleId"];function jW(){return jW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function SBe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var jBe=function(t){var n=t.title,r=t.titleId,o=_Be(t,xBe);return a("svg",jW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M4 4h6v2H4zM22 4h6v2h-6zM4 22h6v2H4z"}),a("path",{d:"M0 14h14V0H0v14zM2 2h10v10H2V2zm16-2v14h14V0H18zm12 12H20V2h10v10zM0 32h14V18H0v14zm2-12h10v10H2V20zm16 12h14V18H18v14zm2-12h10v10H20V20z"}),a("path",{className:"euiIcon__fillSecondary",d:"M22 22h6v2h-6z"}))},IBe=jBe;var c4={};$(c4,{icon:()=>ABe});var PVt=k(L());var PBe=["title","titleId"];function IW(){return IW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function EBe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var CBe=function(t){var n=t.title,r=t.titleId,o=kBe(t,PBe);return a("svg",IW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M18 6h9v2h-9zM5 6h9v2H5zM5 12h9v2H5zM18 12h9v2h-9zM5 18h9v2H5zM18 18h9v2h-9zM18 24h9v2h-9zM5 24h9v2H5z"}),a("path",{d:"M29 32H3a3 3 0 01-3-3V3a3 3 0 013-3h26a3 3 0 013 3v26a3 3 0 01-3 3zM3 2a1 1 0 00-1 1v26a1 1 0 001 1h26a1 1 0 001-1V3a1 1 0 00-1-1H3z"}))},ABe=CBe;var p4={};$(p4,{icon:()=>LBe});var EVt=k(L());var MBe=["title","titleId"];function PW(){return PW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function RBe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var zBe=function(t){var n=t.title,r=t.titleId,o=TBe(t,MBe);return a("svg",PW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M4 4v20.34L16 32l12-7.64V4H4zm22 2v4h-4a3 3 0 00-3 3v5h-6v-5a3 3 0 00-3-3H6V6h20zm-7.87 14L16 22.52 13.87 20h4.26zM6 12h4a1 1 0 011 1v6.7l3.69 4.37-2.58 3.06L6 23.24V12zm7.81 16.22l2.19-2.6 2.19 2.6L16 29.61l-2.19-1.39zm6.08-1.09l-2.58-3.06L21 19.7V13a1 1 0 011-1h4v11.24l-6.11 3.89z"}),a("path",{className:"euiIcon__fillSecondary",d:"M4 0h24v2H4z"}))},LBe=zBe;var f4={};$(f4,{icon:()=>BBe});var AVt=k(L());var DBe=["title","titleId"];function kW(){return kW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function FBe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var WBe=function(t){var n=t.title,r=t.titleId,o=NBe(t,DBe);return a("svg",kW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M16 21a5 5 0 110-10 5 5 0 010 10zm0-8a3 3 0 100 6 3 3 0 000-6z"}),a("path",{d:"M27.42 19.69a12 12 0 01-23.11-1l2.27-.45-4.32-4.47L0 19.55l2.39-.47a14 14 0 0027 1.23l-1.97-.62zm2.23-6.77a14 14 0 00-27-1.23l1.9.62a12 12 0 0123.11 1l-2.27.45 4.32 4.46L32 12.45l-2.35.47z"}))},BBe=WBe;var d4={};$(d4,{icon:()=>$Be});var TVt=k(L());var HBe=["title","titleId"];function EW(){return EW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function qBe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var UBe=function(t){var n=t.title,r=t.titleId,o=VBe(t,HBe);return a("svg",EW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M4.216 12.377A10.948 10.948 0 002.181 17H.153a12.941 12.941 0 012.693-6.118l1.37 1.495zm2.948-2.703l-1.37-1.495A12.94 12.94 0 0113 6v2c-2.144 0-4.144.613-5.836 1.674z"}),a("path",{d:"M26 4.414V19c0 7.18-5.82 13-13 13C6.5 32 1.115 27.23.153 21H2.18c.94 5.12 5.427 9 10.819 9 6.075 0 11-4.925 11-11V4.414l-4.293 4.293-1.414-1.414L25 .586l6.707 6.707-1.414 1.414L26 4.414zm-7.836 9.909l1.472 1.354-7.577 8.235-4.835-4.442 1.353-1.473 3.364 3.09 6.223-6.764z"}))},$Be=UBe;var m4={};$(m4,{icon:()=>YBe});var zVt=k(L());var JBe=["title","titleId"];function CW(){return CW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function XBe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var KBe=function(t){var n=t.title,r=t.titleId,o=GBe(t,JBe);return a("svg",CW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M19.307 3.21a2.91 2.91 0 10-.223 1.94 11.636 11.636 0 018.232 7.049l1.775-.698a13.576 13.576 0 00-9.784-8.291zm-2.822 1.638a.97.97 0 110-1.939.97.97 0 010 1.94zm-4.267.805l-.717-1.774a13.576 13.576 0 00-8.291 9.784 2.91 2.91 0 101.94.223 11.636 11.636 0 017.068-8.233zm-8.34 11.802a.97.97 0 110-1.94.97.97 0 010 1.94zm12.607 8.727a2.91 2.91 0 00-2.599 1.62 11.636 11.636 0 01-8.233-7.05l-1.774.717a13.576 13.576 0 009.813 8.291 2.91 2.91 0 102.793-3.578zm0 3.879a.97.97 0 110-1.94.97.97 0 010 1.94zM32 16.485a2.91 2.91 0 10-4.199 2.599 11.636 11.636 0 01-7.05 8.232l.718 1.775a13.576 13.576 0 008.291-9.813A2.91 2.91 0 0032 16.485zm-2.91.97a.97.97 0 110-1.94.97.97 0 010 1.94z"}),a("path",{className:"euiIcon__fillSecondary",d:"M19.19 16.35a3.879 3.879 0 10-5.42 0 4.848 4.848 0 00-2.134 4.014v1.939h9.697v-1.94a4.848 4.848 0 00-2.143-4.014zm-4.645-2.774a1.94 1.94 0 113.88 0 1.94 1.94 0 01-3.88 0zm-.97 6.788a2.91 2.91 0 115.819 0h-5.818z"}))},YBe=KBe;var h4={};$(h4,{icon:()=>rHe});var DVt=k(L());var QBe=["title","titleId"];function AW(){return AW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function eHe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var tHe=function(t){var n=t.title,r=t.titleId,o=ZBe(t,QBe);return a("svg",AW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M32 32H4a4 4 0 01-4-4V0h2v28a2 2 0 002 2h28v2z"}),a("path",{d:"M6 20h2v7H6zM16 12h2v15h-2zM26 17h2v10h-2z"}),a("path",{d:"M27 6a3 3 0 00-2.08.84L20 4.36A2.2 2.2 0 0020 4a3 3 0 00-6 0c.001.341.062.68.18 1l-5.6 4.46A3 3 0 007 9a3 3 0 103 3 2.93 2.93 0 00-.18-1l5.6-4.48A3 3 0 0017 7a3 3 0 002.08-.84l5 2.48A2.2 2.2 0 0024 9a3 3 0 103-3zM7 13a1 1 0 110-2 1 1 0 010 2zm10-8a1 1 0 110-2 1 1 0 010 2zm10 5a1 1 0 110-2 1 1 0 010 2z"}))},rHe=tHe;var g4={};$(g4,{icon:()=>lHe});var FVt=k(L());var nHe=["title","titleId"];function MW(){return MW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function iHe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var aHe=function(t){var n=t.title,r=t.titleId,o=oHe(t,nHe);return a("svg",MW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M9.74 7.73l-1.5-1.32a13 13 0 000 17.19l1.5-1.32a11 11 0 010-14.54v-.01z"}),a("path",{d:"M6.51 3.66L5 2.34c-6.377 7.24-6.377 18.09 0 25.33l1.5-1.32C.792 19.867.792 10.153 6.5 3.67l.01-.01zm17.25 2.75l-1.5 1.32a11 11 0 010 14.54l1.5 1.32a13 13 0 000-17.19v.01z"}),a("path",{d:"M27 2.34l-1.5 1.32c5.708 6.483 5.708 16.197 0 22.68l1.5 1.33c6.377-7.24 6.377-18.09 0-25.33z"}),a("path",{className:"euiIcon__fillSecondary",d:"M21 15a5 5 0 10-6 4.9V31h2V19.9a5 5 0 004-4.9zm-5 3a3 3 0 110-6 3 3 0 010 6z"}))},lHe=aHe;var v4={};$(v4,{icon:()=>fHe});var BVt=k(L());var sHe=["title","titleId"];function TW(){return TW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function cHe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var pHe=function(t){var n=t.title,r=t.titleId,o=uHe(t,sHe);return a("svg",TW({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M7.81 1H2v30h5.815c1.705 0 3.343-.783 4.38-2.094l3.182-4.023.006.006 2.607-3.137.01-.014a9.42 9.42 0 001.953-4.826 9.112 9.112 0 00-1.891-6.522l-.01-.012-2.603-3.156L12.197 3.1C11.16 1.786 9.52 1 7.81 1zm6.118 7.523l-3.31-4.195C9.968 3.512 8.917 3 7.81 3H4v26h3.815c1.1 0 2.15-.508 2.8-1.32l3.33-4.21-1.796-1.77-.027-.033c-2.84-3.317-2.83-8.195.028-11.287l.004-.004a98.893 98.893 0 011.774-1.853zm4.043 8.099c-.12 1.279-.616 2.537-1.49 3.64l-1.288 1.63-1.578-1.556c-2.19-2.59-2.118-6.3.001-8.596.6-.64 1.119-1.183 1.561-1.635l1.293 1.638v.002l.014.016c.942 1.192 1.446 2.564 1.51 3.949a7.09 7.09 0 01-.023.912z"}),a("path",{fillRule:"evenodd",className:"euiIcon__fillSecondary",d:"M23.801 3c-.382 0-1.052.231-1.925.812-.636.422-1.228.928-1.677 1.357l1.771 2.245.005.007.024.03.008.01c4.003 5.099 3.99 12.057-.035 17.145l-1.793 2.267a8.206 8.206 0 001.769 1.498c.698.427 1.337.629 1.852.629H28V3h-4.199zm-6.148 23.842l.765 1.053.023.027c.717.851 1.566 1.607 2.464 2.156.89.544 1.89.922 2.895.922H30V1h-6.199c-.987 0-2.066.505-3.032 1.146a14.934 14.934 0 00-2.352 1.974l-.276.288-.595.628 2.855 3.619.006.006c3.459 4.375 3.457 10.329-.004 14.704l-2.75 3.477z"}))},fHe=pHe;var y4={};$(y4,{icon:()=>vHe});var VVt=k(L());var dHe=["title","titleId"];function RW(){return RW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function hHe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var gHe=function(t){var n=t.title,r=t.titleId,o=mHe(t,dHe);return a("svg",RW({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M2 4V2h2v2H2zm5 0V2h2v2H7zm5 0V2h2v2h-2zM2 9V7h2v2H2zm5 0V7h2v2H7zm5 0V7h2v2h-2zM2 14v-2h2v2H2zm5 0v-2h2v2H7zm5 0v-2h2v2h-2z"}))},vHe=gHe;var b4={};$(b4,{icon:()=>xHe});var UVt=k(L());var yHe=["title","titleId"];function zW(){return zW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function wHe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var OHe=function(t){var n=t.title,r=t.titleId,o=bHe(t,yHe);return a("svg",zW({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M2.857 14.043a.75.75 0 01-.025-1.06l4.591-4.81a.25.25 0 000-.346l-4.59-4.81a.75.75 0 011.085-1.035l4.59 4.81a1.75 1.75 0 010 2.416l-4.59 4.81a.75.75 0 01-1.06.024z"}),a("path",{d:"M10.5 2.75a.75.75 0 011.5 0v10.5a.75.75 0 01-1.5 0V2.75z"}))},xHe=OHe;var w4={};$(w4,{icon:()=>PHe});var JVt=k(L());var _He=["title","titleId"];function LW(){return LW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function jHe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var IHe=function(t){var n=t.title,r=t.titleId,o=SHe(t,_He);return a("svg",LW({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M4 2.75a.75.75 0 011.5 0v10.5a.75.75 0 01-1.5 0V2.75z"}),a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M13.135 14.043a.75.75 0 00.025-1.06l-4.59-4.81a.25.25 0 010-.346l4.59-4.81a.75.75 0 00-1.085-1.035l-4.59 4.81a1.75 1.75 0 000 2.416l4.59 4.81c.286.3.76.31 1.06.024z"}))},PHe=IHe;var O4={};$(O4,{icon:()=>MHe});var XVt=k(L());var kHe=["title","titleId"];function DW(){return DW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function CHe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var AHe=function(t){var n=t.title,r=t.titleId,o=EHe(t,kHe);return a("svg",DW({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M1.957 4.982a.75.75 0 011.06-.025l4.81 4.591a.25.25 0 00.346 0l4.81-4.59a.75.75 0 011.035 1.085l-4.81 4.59a1.75 1.75 0 01-2.416 0l-4.81-4.59a.75.75 0 01-.025-1.06z"}))},MHe=AHe;var x4={};$(x4,{icon:()=>DHe});var YVt=k(L());var THe=["title","titleId"];function NW(){return NW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function zHe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var LHe=function(t){var n=t.title,r=t.titleId,o=RHe(t,THe);return a("svg",NW({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M11.018 14.043a.75.75 0 00.024-1.06l-4.59-4.81a.25.25 0 010-.346l4.59-4.81a.75.75 0 10-1.085-1.035l-4.59 4.81a1.75 1.75 0 000 2.416l4.59 4.81c.286.3.761.31 1.06.024z"}))},DHe=LHe;var _4={};$(_4,{icon:()=>HHe});var ZVt=k(L());var NHe=["title","titleId"];function FW(){return FW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function WHe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var BHe=function(t){var n=t.title,r=t.titleId,o=FHe(t,NHe);return a("svg",FW({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M4.982 14.043a.75.75 0 01-.025-1.06l4.591-4.81a.25.25 0 000-.346l-4.59-4.81a.75.75 0 011.085-1.035l4.59 4.81a1.75 1.75 0 010 2.416l-4.59 4.81a.75.75 0 01-1.06.024z"}))},HHe=BHe;var S4={};$(S4,{icon:()=>JHe});var tqt=k(L());var VHe=["title","titleId"];function WW(){return WW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function UHe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var $He=function(t){var n=t.title,r=t.titleId,o=qHe(t,VHe);return a("svg",WW({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M1.957 11.018c.286.3.761.31 1.06.024l4.81-4.59a.25.25 0 01.346 0l4.81 4.59a.75.75 0 001.035-1.085l-4.81-4.59a1.75 1.75 0 00-2.416 0l-4.81 4.59a.75.75 0 00-.025 1.06z"}))},JHe=$He;var j4={};$(j4,{icon:()=>QHe});var nqt=k(L());var GHe=["title","titleId"];function BW(){return BW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function KHe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var YHe=function(t){var n=t.title,r=t.titleId,o=XHe(t,GHe);return a("svg",BW({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6.928 8.468L4 7.618l.446-1.427L7.375 7.25 7.287 4h1.484l-.097 3.296 2.88-1.039L12 7.693l-2.977.86 1.92 2.56L9.741 12 7.937 9.28l-1.745 2.654-1.213-.86z"}))},QHe=YHe;var I4={};$(I4,{icon:()=>nVe});var iqt=k(L());var ZHe=["title","titleId"];function HW(){return HW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function tVe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var rVe=function(t){var n=t.title,r=t.titleId,o=eVe(t,ZHe);return a("svg",HW({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5.277 10.088c.02.014.04.03.057.047.582.55 1.134.812 1.666.812.586 0 1.84-.293 3.713-.88L9 6.212V2H7v4.212l-1.723 3.876zm-.438.987L3.539 14h8.922l-1.32-2.969C9.096 11.677 7.733 12 7 12c-.74 0-1.463-.315-2.161-.925zM6 2H5V1h6v1h-1v4l3.375 7.594A1 1 0 0112.461 15H3.54a1 1 0 01-.914-1.406L6 6V2z"}))},nVe=rVe;var P4={};$(P4,{icon:()=>sVe});var lqt=k(L());var oVe=["title","titleId"];function VW(){return VW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function aVe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var lVe=function(t){var n=t.title,r=t.titleId,o=iVe(t,oVe);return a("svg",VW({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M2.316 12h10.368c-.188-.704-.28-1.691-.348-3.037-.07-1.382-.103-1.888-.19-2.612-.028-.236-.06-.462-.096-.68-.31-1.892-1.506-2.923-3.708-3.131a1 1 0 10-1.684 0c-2.202.208-3.397 1.24-3.708 3.13a16.01 16.01 0 00-.096.68c-.087.725-.12 1.23-.19 2.613-.068 1.346-.16 2.333-.348 3.037zm10.843 1H1.84c-.308.353-.737.5-1.341.5a.5.5 0 110-1c.786 0 1.024-.783 1.166-3.587.07-1.407.105-1.926.196-2.681.03-.25.063-.49.102-.724.334-2.041 1.546-3.313 3.556-3.792a2 2 0 013.96 0c2.01.479 3.222 1.75 3.557 3.792a17 17 0 01.102.724c.09.755.125 1.274.196 2.681.14 2.804.379 3.587 1.165 3.587a.5.5 0 110 1c-.604 0-1.033-.147-1.341-.5zM5.5 14h4a2 2 0 11-4 0z"}))},sVe=lVe;var k4={};$(k4,{icon:()=>dVe});var uqt=k(L());var uVe=["title","titleId"];function qW(){return qW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function pVe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var fVe=function(t){var n=t.title,r=t.titleId,o=cVe(t,uVe);return a("svg",qW({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M9.5 14l-.005.15a2 2 0 01-3.972.153l-.018-.154L5.5 14h4zm5.38-12.825a.5.5 0 01.008.64l-.063.065-14 12a.5.5 0 01-.713-.695l.063-.065 14-12a.5.5 0 01.705.055zM13.036 5.51l.055.353.048.368c.066.554.103.98.145 1.724l.08 1.491c.146 2.371.402 3.053 1.136 3.053a.5.5 0 110 1c-.603 0-1.031-.146-1.34-.499H4.185l1.182-1h7.317c-.172-.644-.264-1.528-.33-2.708l-.09-1.638c-.033-.514-.066-.87-.118-1.304l-.011-.077.901-.763zM7.5 0a2 2 0 011.98 1.717c.476.113.907.27 1.292.472l-.838.71a5.728 5.728 0 00-1.591-.36 1 1 0 10-1.684 0C4.455 2.75 3.26 3.78 2.95 5.671l-.05.334-.046.347c-.08.676-.115 1.161-.176 2.347l-.014.265-.005.09-1.058.897c.018-.234.035-.488.05-.763l.077-1.427c.038-.626.073-1.025.134-1.528.03-.25.063-.49.102-.724.334-2.04 1.546-3.313 3.555-3.792l.004-.019A2 2 0 017.5 0z"}))},dVe=fVe;var E4={};$(E4,{icon:()=>yVe});var pqt=k(L());var mVe=["title","titleId"];function UW(){return UW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function gVe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var vVe=function(t){var n=t.title,r=t.titleId,o=hVe(t,mVe);return a("svg",UW({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.04 13.274a.5.5 0 10.892.453l3.014-5.931a.5.5 0 00-.445-.727H5.316L8.03 1.727a.5.5 0 10-.892-.453L4.055 7.343a.5.5 0 00.446.726h5.185L7.04 13.274z"}))},yVe=vVe;var C4={};$(C4,{icon:()=>_Ve});var dqt=k(L());var bVe=["title","titleId"];function $W(){return $W=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function OVe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var xVe=function(t){var n=t.title,r=t.titleId,o=wVe(t,bVe);return a("svg",$W({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M0 6h4v4H0V6zm1 1v2h2V7H1zm5-1h4v4H6V6zm1 1v2h2V7H7zm5-1h4v4h-4V6zm1 3h2V7h-2v2z"}))},_Ve=xVe;var A4={};$(A4,{icon:()=>kVe});var hqt=k(L());var SVe=["title","titleId"];function JW(){return JW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function IVe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var PVe=function(t){var n=t.title,r=t.titleId,o=jVe(t,SVe);return a("svg",JW({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7 1v2h2V1H7zM6 0h4v4H6V0zm0 6h4v4H6V6zm1 1v2h2V7H7zm-1 5h4v4H6v-4zm1 1v2h2v-2H7z"}))},kVe=PVe;var M4={};$(M4,{icon:()=>TVe});var vqt=k(L());var EVe=["title","titleId"];function GW(){return GW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function AVe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var MVe=function(t){var n=t.title,r=t.titleId,o=CVe(t,EVe);return a("svg",GW({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5 10.038a3.49 3.49 0 012.5-1.05h2a2.5 2.5 0 002.462-2.061 2 2 0 111.008.017A3.5 3.5 0 019.5 9.987h-2a2.5 2.5 0 00-2.466 2.085A2 2 0 114 12.063V3.937a2 2 0 111 0v6.1zM4.5 3a1 1 0 100-2 1 1 0 000 2zm0 12a1 1 0 100-2 1 1 0 000 2zm8-9a1 1 0 100-2 1 1 0 000 2z"}))},TVe=MVe;var T4={};$(T4,{icon:()=>NVe});var bqt=k(L());var RVe=["title","titleId"];function XW(){return XW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function LVe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var DVe=function(t){var n=t.title,r=t.titleId,o=zVe(t,RVe);return a("svg",XW({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M6 7.987a3.49 3.49 0 00-2.5 1.05v-4.1a2 2 0 10-1 0v6.126a2 2 0 101.034.01A2.5 2.5 0 016 8.986h1a3.5 3.5 0 003.47-3.043 2 2 0 10-1.009-.017A2.5 2.5 0 017 7.987H6zM4 3a1 1 0 11-2 0 1 1 0 012 0zm0 10a1 1 0 11-2 0 1 1 0 012 0zm7-9a1 1 0 11-2 0 1 1 0 012 0z",clipRule:"evenodd"}),a("path",{d:"M13.5 10.5a1.5 1.5 0 11-3 0 1.5 1.5 0 013 0zM9 15c.284-1.223 1.519-2.143 3-2.143s2.716.92 3 2.143H9z"}))},NVe=DVe;var R4={};$(R4,{icon:()=>VVe});var Oqt=k(L());var FVe=["title","titleId"];function KW(){return KW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function BVe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var HVe=function(t){var n=t.title,r=t.titleId,o=WVe(t,FVe);return a("svg",KW({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M3.732 13.096l-.197-.197 2.83-2.828.706.707-2.829 2.828.708.708 2.828-2.828a1 1 0 000-1.414L5.658 7.95a.993.993 0 00-.708-.293.994.994 0 00-.708.293l-2.828 2.829.707.707 2.829-2.83.707.708-2.829 2.829.904.903zm1.218-6.44c.512 0 1.023.196 1.414.587l2.121 2.12a2 2 0 010 2.83L4.95 15.728 0 10.778l3.535-3.535a1.993 1.993 0 011.415-.586zM14.02 1l.708.707-6.95 6.95-.707-.707L14.021 1z"}))},VVe=HVe;var z4={};$(z4,{icon:()=>GVe});var _qt=k(L());var qVe=["title","titleId"];function YW(){return YW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function $Ve(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var JVe=function(t){var n=t.title,r=t.titleId,o=UVe(t,qVe);return a("svg",YW({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M11.993 8.17c0 .83-.673 1.507-1.499 1.507H5.498A1.505 1.505 0 013.999 8.17V6.662h7.994V8.17zm-2.998 5.998c0 .455-.448.827-.999.827-.55 0-1-.372-1-.827v-3.486h2v3.486zM4 5.658V1.005h1.262v4.653H4zm2.261 0V1.005h1.244v4.653H6.26zm2.244 0V1.005h1.235v4.653H8.504zm2.234 0V1.005h1.254v4.653h-1.254zM3.008 0L3 8.17a2.509 2.509 0 002.498 2.512h.5v3.486c0 1.01.896 1.832 1.998 1.832 1.102 0 1.998-.822 1.998-1.832v-3.486h.5a2.509 2.509 0 002.498-2.512L13 0H3.008z"}))},GVe=JVe;var L4={};$(L4,{icon:()=>ZVe});var jqt=k(L());var XVe=["title","titleId"];function QW(){return QW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function YVe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var QVe=function(t){var n=t.title,r=t.titleId,o=KVe(t,XVe);return a("svg",QW({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M10.651 5.126l.922-.455.884-2.343a.5.5 0 01.939.344L12.374 5.39l-1.45.717A5.3 5.3 0 0111 7h1.043l2.3 2.198a.5.5 0 01-.692.723L11.642 8h-.737c-.09.466-.24.899-.441 1.283l.892.49 1.278 3.554a.5.5 0 01-.94.342l-1.15-3.2-.655-.36C9.373 10.665 8.716 11 8 11s-1.374-.335-1.89-.893l-.658.361-1.15 3.201a.5.5 0 11-.94-.342l1.279-3.554.895-.491A4.7 4.7 0 015.095 8h-.74l-2.01 1.92a.5.5 0 01-.69-.722L3.952 7H5a5.3 5.3 0 01.075-.892L3.623 5.39 2.6 2.672a.5.5 0 11.939-.344l.884 2.343.924.457c.17-.428.397-.81.668-1.128h.57a1.5 1.5 0 112.83 0h.568c.27.318.497.699.667 1.126zM8 4a.5.5 0 100-1 .5.5 0 000 1zm1.751 1.571A3.326 3.326 0 009.476 5H6.524c-.107.175-.2.367-.276.573-.11.295-.186.618-.223.957a4.354 4.354 0 00.09 1.465c.071.294.172.565.295.806.168.328.38.601.616.803.295.253.631.396.974.396.342 0 .678-.142.973-.394.237-.203.448-.476.616-.803a3.62 3.62 0 00.296-.807 4.263 4.263 0 00.09-1.466 3.988 3.988 0 00-.224-.959z"}))},ZVe=QVe;var D4={};$(D4,{icon:()=>oqe});var Pqt=k(L());var eqe=["title","titleId"];function ZW(){return ZW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function rqe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var nqe=function(t){var n=t.title,r=t.titleId,o=tqe(t,eqe);return a("svg",ZW({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 14A6 6 0 108 2a6 6 0 000 12zm0 1A7 7 0 118 1a7 7 0 010 14zm0-3a4 4 0 100-8 4 4 0 000 8zm0-1a3 3 0 110-6 3 3 0 010 6zm0-2a1 1 0 100-2 1 1 0 000 2z"}))},oqe=nqe;var N4={};$(N4,{icon:()=>uqe});var Eqt=k(L());var iqe=["title","titleId"];function eB(){return eB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function lqe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var sqe=function(t){var n=t.title,r=t.titleId,o=aqe(t,iqe);return a("svg",eB({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M14 4v-.994C14 2.45 13.55 2 12.994 2H11v1h-1V2H6v1H5V2H3.006C2.45 2 2 2.45 2 3.006v9.988C2 13.55 2.45 14 3.006 14h9.988C13.55 14 14 13.55 14 12.994V5H2V4h12zm-3-3h1.994C14.102 1 15 1.897 15 3.006v9.988A2.005 2.005 0 0112.994 15H3.006A2.005 2.005 0 011 12.994V3.006C1 1.898 1.897 1 3.006 1H5V0h1v1h4V0h1v1zM4 7h2v1H4V7zm3 0h2v1H7V7zm3 0h2v1h-2V7zM4 9h2v1H4V9zm3 0h2v1H7V9zm3 0h2v1h-2V9zm-6 2h2v1H4v-1zm3 0h2v1H7v-1zm3 0h2v1h-2v-1z",fillRule:"evenodd"}))},uqe=sqe;var F4={};$(F4,{icon:()=>mqe});var Aqt=k(L());var cqe=["title","titleId"];function tB(){return tB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function fqe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var dqe=function(t){var n=t.title,r=t.titleId,o=pqe(t,cqe);return a("svg",tB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M6.5 12a.502.502 0 01-.354-.146l-4-4a.502.502 0 01.708-.708L6.5 10.793l6.646-6.647a.502.502 0 01.708.708l-7 7A.502.502 0 016.5 12"}))},mqe=dqe;var W4={};$(W4,{icon:()=>bqe});var Tqt=k(L());var hqe=["title","titleId"];function rB(){return rB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function vqe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var yqe=function(t){var n=t.title,r=t.titleId,o=gqe(t,hqe);return a("svg",rB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M8 16A8 8 0 118 0a8 8 0 010 16zm3.65-10.857L6.91 9.8 4.35 7.286a.5.5 0 00-.7.714l2.909 2.857a.5.5 0 00.7 0l5.091-5a.5.5 0 10-.7-.714z"}))},bqe=yqe;var B4={};$(B4,{icon:()=>Sqe});var zqt=k(L());var wqe=["title","titleId"];function nB(){return nB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function xqe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var _qe=function(t){var n=t.title,r=t.titleId,o=Oqe(t,wqe);return a("svg",nB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M4.934 3.063a1.5 1.5 0 01.547.321l.112.115 6.07 6.915a1.5 1.5 0 01-.646 2.41l-.142.04-9.031 2.097A1.5 1.5 0 01.037 13.19l.043-.159L3.04 4.02a1.5 1.5 0 011.893-.957zM4.027 4.25l-.036.083-2.961 9.011a.5.5 0 00.498.656l.09-.013 2.937-.681-1.399-1.508a.5.5 0 01.666-.74l.067.06 1.788 1.927 2.634-.611-3.198-3.601a.5.5 0 01.682-.726l.066.062 3.559 4.007 1.229-.284a.5.5 0 00.15-.063l.067-.049a.5.5 0 00.099-.632l-.053-.073-6.07-6.916a.5.5 0 00-.138-.11l-.082-.035-.088-.02a.5.5 0 00-.507.256zm11.66 5.039a2.5 2.5 0 01-.975 3.399.5.5 0 01-.485-.875 1.5 1.5 0 00-1.454-2.624.5.5 0 01-.485-.875 2.5 2.5 0 013.399.975zm-5.03-6.206a.5.5 0 01.338.544l-.02.088-.677 2.035 2.068-.721a.5.5 0 01.6.225l.036.082a.5.5 0 01-.225.6l-.082.037L9.67 7.028a.5.5 0 01-.659-.55l.02-.08.995-3a.5.5 0 01.632-.316zM14.5 4a.5.5 0 110 1 .5.5 0 010-1zM7.862.403a2.5 2.5 0 01.735 3.459.5.5 0 01-.839-.545 1.5 1.5 0 10-2.516-1.634.5.5 0 01-.839-.545A2.5 2.5 0 017.862.403zM13.5 2a.5.5 0 110 1 .5.5 0 010-1zm-3-1a.5.5 0 110 1 .5.5 0 010-1zm4-1a.5.5 0 110 1 .5.5 0 010-1z"}))},Sqe=_qe;var H4={};$(H4,{icon:()=>Eqe});var Dqt=k(L());var jqe=["title","titleId"];function oB(){return oB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Pqe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var kqe=function(t){var n=t.title,r=t.titleId,o=Iqe(t,jqe);return a("svg",oB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M7.5 13A5.506 5.506 0 012 7.5C2 4.467 4.467 2 7.5 2S13 4.467 13 7.5 10.533 13 7.5 13m0-12a6.5 6.5 0 100 13 6.5 6.5 0 000-13m3 6H8V3.5a.5.5 0 00-1 0v4a.5.5 0 00.5.5h3a.5.5 0 000-1"}))},Eqe=kqe;var V4={};$(V4,{icon:()=>Rqe});var Fqt=k(L());var Cqe=["title","titleId"];function iB(){return iB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Mqe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Tqe=function(t){var n=t.title,r=t.titleId,o=Aqe(t,Cqe);return a("svg",iB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6.348 3.761A3.995 3.995 0 018 7a.5.5 0 01-1 0 3 3 0 10-4.878 2.34.5.5 0 01-.627.779 4 4 0 013.973-6.84 5.502 5.502 0 0110.096 4.37.5.5 0 11-.92-.39 4.5 4.5 0 10-8.296-3.497zm-1.61 4.935a.5.5 0 11.775.633l-1.466 1.792a.5.5 0 11-.774-.633l1.466-1.792zm-3.12 3.647a.5.5 0 01.774.634l-1.505 1.84a.5.5 0 01-.774-.634l1.505-1.84zm7.62-3.647a.5.5 0 01.775.633l-1.466 1.792a.5.5 0 11-.774-.633l1.466-1.792zm-3.12 3.647a.5.5 0 01.774.634l-1.505 1.84a.5.5 0 01-.774-.634l1.505-1.84zm7.62-3.647a.5.5 0 11.775.633l-1.466 1.792a.5.5 0 11-.774-.633l1.466-1.792zm-3.12 3.647a.5.5 0 01.774.634l-1.505 1.84a.5.5 0 01-.774-.634l1.505-1.84z"}))},Rqe=Tqe;var q4={};$(q4,{icon:()=>Fqe});var Bqt=k(L());var zqe=["title","titleId"];function aB(){return aB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Dqe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Nqe=function(t){var n=t.title,r=t.titleId,o=Lqe(t,zqe);return a("svg",aB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.421 4.93a.5.5 0 11-.87.49 3 3 0 10-4.43 3.918.5.5 0 01-.626.78 4 4 0 013.973-6.84l.032.018V3.28a5.5 5.5 0 117.003 7.357.5.5 0 11-.36-.934 4.5 4.5 0 10-5.77-5.923c.42.31.778.701 1.05 1.15h-.002zM9.6 11c.669.002.794.67.36 1.003l-4.68 3.882c-.457.378-1.053-.26-.643-.689l3.08-3.193A5411.7 5411.7 0 015.113 12c-.668-.001-.793-.669-.36-1.003l4.68-3.881c.458-.379 1.053.26.643.688l-3.08 3.193L9.6 11z"}))},Fqe=Nqe;var U4={};$(U4,{icon:()=>qqe});var Vqt=k(L());var Wqe=["title","titleId"];function lB(){return lB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Hqe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Vqe=function(t){var n=t.title,r=t.titleId,o=Bqe(t,Wqe);return a("svg",lB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M10.746 5.005A5.5 5.5 0 0110.5 16H4a4 4 0 01-1.61-7.663A4.473 4.473 0 012.029 7H.5a.5.5 0 010-1h1.527a4.479 4.479 0 01.957-2.309L1.646 2.354a.5.5 0 11.708-.708L3.69 2.984A4.479 4.479 0 016 2.027V.5a.5.5 0 011 0v1.528a4.493 4.493 0 012.309.956l1.337-1.338a.5.5 0 01.708.708L10.016 3.69c.311.388.56.831.73 1.314zM4 15h6.5a4.5 4.5 0 10-4.152-6.239A3.995 3.995 0 018 12a.5.5 0 11-1 0 3 3 0 10-3 3zm5.691-9.94a3.5 3.5 0 10-6.33 2.991 4.029 4.029 0 012.106.227 5.505 5.505 0 014.224-3.219z"}))},qqe=Vqe;var $4={};$($4,{icon:()=>Xqe});var Uqt=k(L());var Uqe=["title","titleId"];function sB(){return sB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Jqe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Gqe=function(t){var n=t.title,r=t.titleId,o=$qe(t,Uqe);return a("svg",sB({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M4.5 7a2.5 2.5 0 100-5 2.5 2.5 0 000 5zm0-6a3.5 3.5 0 013.465 3h3.12a1.5 1.5 0 110 1h-3.12a3.482 3.482 0 01-.662 1.596l2.1 2.1A3.5 3.5 0 118.036 12h-3.12a1.5 1.5 0 110-.999h3.12a3.482 3.482 0 01.662-1.596l-2.1-2.1A3.5 3.5 0 114.5 1zM12 4.5a.5.5 0 101 0 .5.5 0 00-1 0zm-.5 9.5a2.5 2.5 0 110-5 2.5 2.5 0 010 5zM4 11.5a.5.5 0 11-1 0 .5.5 0 011 0z"}))},Xqe=Gqe;var J4={};$(J4,{icon:()=>eUe});var Jqt=k(L());var Kqe=["title","titleId"];function uB(){return uB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Qqe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Zqe=function(t){var n=t.title,r=t.titleId,o=Yqe(t,Kqe);return a("svg",uB({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M13 11c1.334 1.393 2 2.435 2 3.125C15 15.161 14.105 16 13 16c-1.104 0-2-.84-2-1.875 0-.69.667-1.732 2-3.125zM5.857.15l6.34 6.45.016.02.324.321a1.5 1.5 0 01.11 2.006l-.103.114-4.474 4.513a1.5 1.5 0 01-2.123.008L1.464 9.06a1.5 1.5 0 01.007-2.12l4.472-4.45c.145-.146.313-.254.492-.327L5.144.85a.5.5 0 01.713-.7zm1.496 3.049a.5.5 0 00-.705 0L2.177 7.65a.498.498 0 00-.148.35h9.95a.498.498 0 00-.148-.35L7.353 3.2z"}))},eUe=Zqe;var G4={};$(G4,{icon:()=>iUe});var Xqt=k(L());var tUe=["title","titleId"];function cB(){return cB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function nUe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var oUe=function(t){var n=t.title,r=t.titleId,o=rUe(t,tUe);return a("svg",cB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M4 3a1 1 0 00-1 1v8a1 1 0 001 1h8a1 1 0 001-1V4a1 1 0 00-1-1H4zm10 8v1a2 2 0 01-2 2h-1v2h-1v-2H8.5v2h-1v-2H6v2H5v-2H4a2 2 0 01-2-2v-1H0v-1h2V8.5H0v-1h2V6H0V5h2V4a2 2 0 012-2h1V0h1v2h1.5V0h1v2H10V0h1v2h1a2 2 0 012 2v1h2v1h-2v1.5h2v1h-2V10h2v1h-2z"}),a("rect",{width:6,height:6,x:5,y:5,rx:1}))},iUe=oUe;var X4={};$(X4,{icon:()=>cUe});var Yqt=k(L());var aUe=["title","titleId"];function pB(){return pB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function sUe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var uUe=function(t){var n=t.title,r=t.titleId,o=lUe(t,aUe);return a("svg",pB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M1.157 12.224L5.768 8.32a.404.404 0 000-.64l-4.61-3.904a.407.407 0 010-.643.608.608 0 01.759 0l4.61 3.904c.631.534.63 1.393 0 1.926l-4.61 3.904a.608.608 0 01-.76 0 .407.407 0 010-.643zM9 12h6v1H9v-1z"}))},cUe=uUe;var K4={};$(K4,{icon:()=>hUe});var Zqt=k(L());var pUe=["title","titleId"];function fB(){return fB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function dUe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var mUe=function(t){var n=t.title,r=t.titleId,o=fUe(t,pUe);return a("svg",fB({fill:"none",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M0 2.5A.5.5 0 01.5 2h15a.5.5 0 010 1H15v10h.5a.5.5 0 010 1H.5a.5.5 0 010-1H1V3H.5a.5.5 0 01-.5-.5zM2 3h12v10H2V3zm3 2a.5.5 0 00-.5.5v5a.5.5 0 001 0v-5A.5.5 0 005 5zm5.5.5a.5.5 0 011 0v5a.5.5 0 01-1 0v-5zM8 5a.5.5 0 00-.5.5v5a.5.5 0 001 0v-5A.5.5 0 008 5z"}))},hUe=mUe;var Y4={};$(Y4,{icon:()=>wUe});var tUt=k(L());var gUe=["title","titleId"];function dB(){return dB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function yUe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var bUe=function(t){var n=t.title,r=t.titleId,o=vUe(t,gUe);return a("svg",dB({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M1.5 3a.5.5 0 00-.5.5v9a.5.5 0 001 0v-9a.5.5 0 00-.5-.5zm3 0a.5.5 0 00-.5.5v9a.5.5 0 001 0V9h6v1.5a.5.5 0 00.82.384l3-2.5a.5.5 0 000-.768l-3-2.5A.5.5 0 0011 5.5V7H5V3.5a.5.5 0 00-.5-.5z"}))},wUe=bUe;var Q4={};$(Q4,{icon:()=>jUe});var nUt=k(L());var OUe=["title","titleId"];function mB(){return mB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function _Ue(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var SUe=function(t){var n=t.title,r=t.titleId,o=xUe(t,OUe);return a("svg",mB({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6.5 3a.5.5 0 01.5.5v9a.5.5 0 01-1 0V9H4v1.5a.5.5 0 01-.82.384l-3-2.5a.5.5 0 010-.768l3-2.5A.5.5 0 014 5.5V7h2V3.5a.5.5 0 01.5-.5zm3 0a.5.5 0 00-.5.5v9a.5.5 0 001 0V9h2v1.5a.5.5 0 00.82.384l3-2.5a.5.5 0 000-.768l-3-2.5A.5.5 0 0012 5.5V7h-2V3.5a.5.5 0 00-.5-.5z"}))},jUe=SUe;var Z4={};$(Z4,{icon:()=>CUe});var iUt=k(L());var IUe=["title","titleId"];function hB(){return hB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function kUe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var EUe=function(t){var n=t.title,r=t.titleId,o=PUe(t,IUe);return a("svg",hB({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M11.5 3a.5.5 0 01.5.5v9a.5.5 0 01-1 0V9H5v1.5a.5.5 0 01-.82.384l-3-2.5a.5.5 0 010-.768l3-2.5A.5.5 0 015 5.5V7h6V3.5a.5.5 0 01.5-.5zm3 0a.5.5 0 01.5.5v9a.5.5 0 01-1 0v-9a.5.5 0 01.5-.5z"}))},CUe=EUe;var e6={};$(e6,{icon:()=>zUe});var lUt=k(L());var AUe=["title","titleId"];function gB(){return gB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function TUe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var RUe=function(t){var n=t.title,r=t.titleId,o=MUe(t,AUe);return a("svg",gB({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M.5 3a.5.5 0 00-.5.5v9a.5.5 0 001 0v-9A.5.5 0 00.5 3zm14.5.5a.5.5 0 011 0v9a.5.5 0 01-1 0v-9zm-4.712 1.547a.5.5 0 01.532.069l3 2.5a.5.5 0 010 .768l-3 2.5A.5.5 0 0110 10.5V9H6v1.5a.5.5 0 01-.82.384l-3-2.5a.5.5 0 010-.768l3-2.5A.5.5 0 016 5.5V7h4V5.5a.5.5 0 01.288-.453z"}))},zUe=RUe;var t6={};$(t6,{icon:()=>WUe});var uUt=k(L());var LUe=["title","titleId"];function vB(){return vB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function NUe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var FUe=function(t){var n=t.title,r=t.titleId,o=DUe(t,LUe);return a("svg",vB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M8.05 10a2.5 2.5 0 014.9 0h1.55a.5.5 0 110 1h-1.55a2.5 2.5 0 01-4.9 0H1.5a.5.5 0 110-1h6.55zm-.1-4a2.5 2.5 0 01-4.9 0H1.5a.5.5 0 010-1h1.55a2.5 2.5 0 014.9 0h6.55a.5.5 0 110 1H7.95zM4 5.5a1.5 1.5 0 103 0 1.5 1.5 0 00-3 0zm8 5a1.5 1.5 0 10-3 0 1.5 1.5 0 003 0z"}))},WUe=FUe;var r6={};$(r6,{icon:()=>UUe});var pUt=k(L());var BUe=["title","titleId"];function yB(){return yB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function VUe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var qUe=function(t){var n=t.title,r=t.titleId,o=HUe(t,BUe);return a("svg",yB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M10 7.95a2.5 2.5 0 010-4.9V1.5a.5.5 0 111 0v1.55a2.5 2.5 0 010 4.9v6.55a.5.5 0 11-1 0V7.95zm-4 .1a2.5 2.5 0 010 4.9v1.55a.5.5 0 11-1 0v-1.55a2.5 2.5 0 010-4.9V1.5a.5.5 0 011 0v6.55zM5.5 12a1.5 1.5 0 100-3 1.5 1.5 0 000 3zm5-8a1.5 1.5 0 100 3 1.5 1.5 0 000-3z"}))},UUe=qUe;var n6={};$(n6,{icon:()=>KUe});var dUt=k(L());var $Ue=["title","titleId"];function bB(){return bB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function GUe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var XUe=function(t){var n=t.title,r=t.titleId,o=JUe(t,$Ue);return a("svg",bB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M11.4 0c.235 0 .46.099.622.273l2.743 3c.151.162.235.378.235.602v9.25a.867.867 0 01-.857.875H3.857A.867.867 0 013 13.125V.875C3 .392 3.384 0 3.857 0H11.4zM14 4h-2.6a.4.4 0 01-.4-.4V1H4v12h10V4z"}),a("path",{d:"M3 1H2a1 1 0 00-1 1v13a1 1 0 001 1h10a1 1 0 001-1v-1h-1v1H2V2h1V1z"}))},KUe=XUe;var o6={};$(o6,{icon:()=>t$e});var hUt=k(L());var YUe=["title","titleId"];function wB(){return wB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ZUe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var e$e=function(t){var n=t.title,r=t.titleId,o=QUe(t,YUe);return a("svg",wB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M2 2.729V2a1 1 0 011-1h2v1H3v12h4v1H3a1 1 0 01-1-1V2.729zM14 5V2a1 1 0 00-1-1h-2v1h2v3h1zm-1 1h2v9H8V6h5V5H8a1 1 0 00-1 1v9a1 1 0 001 1h7a1 1 0 001-1V6a1 1 0 00-1-1h-2v1z"}),a("path",{d:"M9 10h5V9H9v1zm0-2h5V7H9v1zm0 4h5v-1H9v1zm0 2h5v-1H9v1zm2-12V1a1 1 0 00-1-1H6a1 1 0 00-1 1v1h1V1h4v1h1zM5 3h6V2H5v1z"}))},t$e=e$e;var i6={};$(i6,{icon:()=>a$e});var vUt=k(L());var r$e=["title","titleId"];function OB(){return OB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function o$e(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var i$e=function(t){var n=t.title,r=t.titleId,o=n$e(t,r$e);return a("svg",OB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.293 8L3.146 3.854a.5.5 0 11.708-.708L8 7.293l4.146-4.147a.5.5 0 01.708.708L8.707 8l4.147 4.146a.5.5 0 01-.708.708L8 8.707l-4.146 4.147a.5.5 0 01-.708-.708L7.293 8z"}))},a$e=i$e;var a6={};$(a6,{icon:()=>p$e});var bUt=k(L());var l$e=["title","titleId"];function xB(){return xB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function u$e(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var c$e=function(t){var n=t.title,r=t.titleId,o=s$e(t,l$e);return a("svg",xB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8.746 8l3.1-3.1a.527.527 0 10-.746-.746L8 7.254l-3.1-3.1a.527.527 0 10-.746.746l3.1 3.1-3.1 3.1a.527.527 0 10.746.746l3.1-3.1 3.1 3.1a.527.527 0 10.746-.746L8.746 8zM8 16A8 8 0 118 0a8 8 0 010 16z"}))},p$e=c$e;var l6={};$(l6,{icon:()=>g$e});var OUt=k(L());var f$e=["title","titleId"];function _B(){return _B=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function m$e(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var h$e=function(t){var n=t.title,r=t.titleId,o=d$e(t,f$e);return a("svg",_B({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5.822 1.874a.5.5 0 11.335.942 5.517 5.517 0 00-3.34 3.341.5.5 0 11-.943-.335 6.517 6.517 0 013.948-3.948zM1.864 10.15a.5.5 0 11.944-.33 5.517 5.517 0 003.365 3.37.5.5 0 01-.333.943 6.517 6.517 0 01-3.976-3.983zm8.302 3.981a.5.5 0 11-.333-.943 5.517 5.517 0 003.347-3.332.5.5 0 11.941.337 6.517 6.517 0 01-3.955 3.938zm3.968-8.285a.5.5 0 11-.943.331A5.517 5.517 0 009.85 2.82a.5.5 0 01.337-.942 6.517 6.517 0 013.946 3.968zM8.5 3.5a.5.5 0 01-1 0V.997a.5.5 0 011 0V3.5zm-4.997 4a.5.5 0 010 1H1a.5.5 0 010-1h2.503zM7.5 12.497a.5.5 0 011 0V15a.5.5 0 11-1 0v-2.503zM12.497 8.5a.5.5 0 010-1H15a.5.5 0 110 1h-2.503zM8 9a1 1 0 110-2 1 1 0 010 2z"}))},g$e=h$e;var s6={};$(s6,{icon:()=>O$e});var _Ut=k(L());var v$e=["title","titleId"];function SB(){return SB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function b$e(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var w$e=function(t){var n=t.title,r=t.titleId,o=y$e(t,v$e);return a("svg",SB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M12.95 1.636l1.414 1.414-2.192 2.193C12.695 6.033 13 6.98 13 8c0 1.02-.305 1.967-.828 2.757l2.192 2.193-1.414 1.414-2.193-2.192A4.977 4.977 0 018 13a4.977 4.977 0 01-2.757-.828L3.05 14.364 1.636 12.95l2.192-2.193A4.977 4.977 0 013 8c0-1.02.305-1.967.828-2.757L1.636 3.05 3.05 1.636l2.193 2.192A4.977 4.977 0 018 3c1.02 0 1.967.305 2.757.828l2.193-2.192zM8 5a2.99 2.99 0 00-1.168.236l-.126.057-.218.116-.132.081-.073.05a3.013 3.013 0 00-.241.187l-.113.103-.147.15c-.05.054-.097.11-.142.168l-.1.135-.05.073-.06.097c-.05.082-.096.166-.137.253l-.057.126A2.99 2.99 0 005 8c0 .414.084.809.236 1.168l.057.126.116.218.081.132c.059.089.121.175.189.257l.15.17.151.147c.056.051.114.1.174.147l.142.105c.054.037.109.072.165.106l-.124-.079.092.06.094.055c.436.247.94.388 1.477.388a2.99 2.99 0 001.168-.236l.125-.056.213-.113.151-.094.05-.034a3.011 3.011 0 00.323-.258l-.15.129.09-.075.168-.159.08-.084c.051-.056.1-.114.147-.174l.105-.142.106-.165c.047-.08.091-.161.131-.245l.057-.126A2.99 2.99 0 0011 8a2.99 2.99 0 00-.236-1.168l-.056-.125-.112-.211-.096-.155-.033-.049a3.011 3.011 0 00-.258-.322l.129.15-.075-.09-.159-.168-.084-.08a3.015 3.015 0 00-.174-.147l-.183-.132-.124-.079a2.993 2.993 0 00-.245-.131l-.126-.057A2.99 2.99 0 008 5z"}))},O$e=w$e;var u6={};$(u6,{icon:()=>I$e});var jUt=k(L());var x$e=["title","titleId"];function jB(){return jB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function S$e(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var j$e=function(t){var n=t.title,r=t.titleId,o=_$e(t,x$e);return a("svg",jB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M5.142 11.074l-1.912.548a2.532 2.532 0 11-1.395-4.867l1.947-.559a2.532 2.532 0 012.555.713l1.53-5.335c.139-.485.6-.897 1.159-1.238.27-.164.52-.278.779-.32.814-.132 1.503.558 1.261 1.422L9.574 6.643l4.988-1.43c.864-.242 1.554.447 1.422 1.26-.042.26-.156.51-.32.78-.341.56-.753 1.02-1.238 1.16L9.523 9.817a2.53 2.53 0 01.56 2.4l-.56 1.947a2.532 2.532 0 11-4.867-1.395l.486-1.696zm.33-1.148l.48-1.673a1.52 1.52 0 00-1.89-1.083l-1.948.558a1.52 1.52 0 00.837 2.92l2.52-.722zm3.773-2.135l-.33 1.148 5.232-1.5c.324-.093 1.182-1.39.694-1.253L9.245 7.791zM5.63 13.049a1.52 1.52 0 002.92.837l.559-1.947a1.52 1.52 0 00-1.553-1.935l2.537-8.845c.136-.488-1.16.37-1.253.694L5.63 13.05zm.973.279l.559-1.947a.506.506 0 11.973.279l-.558 1.947a.506.506 0 11-.974-.28zm-3.93-3.653a.506.506 0 11-.28-.973l1.947-.558a.506.506 0 01.28.973l-1.948.558z"}))},I$e=j$e;var c6={};$(c6,{icon:()=>A$e});var PUt=k(L());var P$e=["title","titleId"];function IB(){return IB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function E$e(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var C$e=function(t){var n=t.title,r=t.titleId,o=k$e(t,P$e);return a("svg",IB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M2 12h12v-1.97c-1.225.582-3.454.97-6 .97s-4.775-.388-6-.97V12zm-1 0V3c0-1.105 3.134-2 7-2s7 .895 7 2v9c0 1.105-3.134 2-7 2s-7-.895-7-2zm1-3h12V7.03c-1.225.582-3.454.97-6 .97s-4.775-.388-6-.97V9zm0-4.97V6h12V4.03c-1.225.582-3.454.97-6 .97s-4.775-.388-6-.97zm10.675-1.483C11.467 2.202 9.795 2 8 2c-1.794 0-3.467.202-4.675.547-.492.14-.88.298-1.136.453.256.155.644.312 1.136.453C4.533 3.798 6.205 4 8 4c1.794 0 3.467-.202 4.675-.547.492-.14.88-.298 1.136-.453-.256-.155-.644-.312-1.136-.453zM2 6c.257.155.833.312 1.325.453C4.533 6.798 6.205 7 8 7c1.794 0 3.467-.202 4.675-.547.492-.14 1.07-.298 1.327-.453H2zm0 3c.257.155.833.312 1.325.453C4.533 9.798 6.205 10 8 10c1.794 0 3.467-.202 4.675-.547.492-.14 1.07-.298 1.327-.453H2zm0 3c.257.155.833.312 1.325.453C4.533 12.798 6.205 13 8 13c1.794 0 3.467-.202 4.675-.547.492-.14 1.07-.298 1.327-.453H2z"}))},A$e=C$e;var p6={};$(p6,{icon:()=>L$e});var EUt=k(L());var M$e=["title","titleId"];function PB(){return PB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function R$e(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var z$e=function(t){var n=t.title,r=t.titleId,o=T$e(t,M$e);return a("svg",PB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M2 2a1 1 0 00-1 1v7a1 1 0 001 1h4l-1 3H3.5a.5.5 0 000 1h9a.5.5 0 000-1H11l-1-3h4a1 1 0 001-1V3a1 1 0 00-1-1H2zm0 8V3h12v7H2zm5 1h2l1 3H6l1-3z",clipRule:"evenodd"}),a("path",{d:"M4.5 6a.5.5 0 000 1h1a.5.5 0 000-1h-1zm3 0a.5.5 0 000 1h1a.5.5 0 000-1h-1zm2.5.5a.5.5 0 01.5-.5h1a.5.5 0 010 1h-1a.5.5 0 01-.5-.5z"}))},L$e=z$e;var f6={};$(f6,{icon:()=>B$e});var AUt=k(L());var D$e=["title","titleId"];function kB(){return kB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function F$e(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var W$e=function(t){var n=t.title,r=t.titleId,o=N$e(t,D$e);return a("svg",kB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M10.8 0c.274 0 .537.113.726.312l3.2 3.428c.176.186.274.433.274.689V15a1 1 0 01-1 1H2a1 1 0 01-1-1V1a1 1 0 011-1h8.8zM14 5h-3.5a.5.5 0 01-.5-.5V1H2v14h12V5zm-8.5 7a.5.5 0 110-1h5a.5.5 0 110 1h-5zm0-3a.5.5 0 010-1h5a.5.5 0 110 1h-5z"}))},B$e=W$e;var d6={};$(d6,{icon:()=>$$e});var TUt=k(L());var H$e=["title","titleId"];function EB(){return EB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function q$e(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var U$e=function(t){var n=t.title,r=t.titleId,o=V$e(t,H$e);return a("svg",EB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8.505 8.995l6.453-6.44-1.5-1.5-6.453 6.44 1.5 1.5zM12.968.19c.258-.238.657-.26.91 0l1.928 1.929a.642.642 0 010 .909l-6.78 6.784A.641.641 0 018.57 10H6.643A.643.643 0 016 9.357V7.43c0-.17.067-.335.188-.455L12.968.19zM4.5 13a.5.5 0 110-1h7a.5.5 0 110 1h-7zm4-12a.5.5 0 010 1H2v13h12V7.5a.5.5 0 111 0V15a1 1 0 01-1 1H2a1 1 0 01-1-1V2a1 1 0 011-1h6.5z"}))},$$e=U$e;var m6={};$(m6,{icon:()=>Y$e});var zUt=k(L());var J$e=["title","titleId"];function CB(){return CB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function X$e(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var K$e=function(t){var n=t.title,r=t.titleId,o=G$e(t,J$e);return a("svg",CB({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M9 3.5a.5.5 0 11-1 0 .5.5 0 011 0zM9 5v3h1v1H8V6H7V5h2z"}),a("path",{d:"M13.855 14.147a1.34 1.34 0 01-.158-.246A1.998 1.998 0 0113.5 13c0-.414.103-.713.197-.901a1.34 1.34 0 01.158-.246l.003-.005A.5.5 0 0014 11.5V.5a.5.5 0 00-.5-.5H3.461l-.083.005a2.957 2.957 0 00-1.102.298 2.257 2.257 0 00-.88.763C1.148 1.44 1 1.913 1 2.5V13c0 .463.117.843.318 1.145.2.298.462.491.708.615a2.344 2.344 0 00.94.24H3v-1c-.005 0-.015 0-.029-.002a1.344 1.344 0 01-.498-.133.817.817 0 01-.323-.275C2.07 13.47 2 13.287 2 13s.07-.47.15-.59a.817.817 0 01.324-.275A1.344 1.344 0 013 12h9.658c-.091.27-.158.605-.158 1s.067.73.158 1H8v1h5.5a.5.5 0 00.359-.848l-.004-.005zm-.001 0l.002.002-.002-.002zM2.724 1.197c.092-.046.186-.082.276-.11C3 2.918 3.001 11 2.999 11h-.033a1.977 1.977 0 00-.283.03 2.344 2.344 0 00-.657.21L2 11.254V2.5c0-.413.102-.689.229-.879.128-.193.304-.328.495-.424zM4 11V1h9v10H4z"}),a("path",{d:"M7 13H4v2.5a.5.5 0 00.854.354l.646-.647.646.647A.5.5 0 007 15.5V13z"}))},Y$e=K$e;var h6={};$(h6,{icon:()=>rJe});var DUt=k(L());var Q$e=["title","titleId"];function AB(){return AB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function eJe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var tJe=function(t){var n=t.title,r=t.titleId,o=Z$e(t,Q$e);return a("svg",AB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8.8 0c.274 0 .537.113.726.312l3.2 3.428c.176.186.274.433.274.689V13a1 1 0 01-1 1H2a1 1 0 01-1-1V1a1 1 0 011-1h6.8zM12 5H8.5a.5.5 0 01-.5-.5V1H2v12h10V5zm-7.5 6a.5.5 0 110-1h5a.5.5 0 110 1h-5zm0-3a.5.5 0 010-1h5a.5.5 0 110 1h-5zm1 8a.5.5 0 110-1H14V6.5a.5.5 0 111 0V15a1 1 0 01-1 1H5.5z"}))},rJe=tJe;var g6={};$(g6,{icon:()=>lJe});var FUt=k(L());var nJe=["title","titleId"];function MB(){return MB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function iJe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var aJe=function(t){var n=t.title,r=t.titleId,o=oJe(t,nJe);return a("svg",MB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("circle",{cx:8,cy:8,r:4}))},lJe=aJe;var v6={};$(v6,{icon:()=>fJe});var BUt=k(L());var sJe=["title","titleId"];function TB(){return TB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function cJe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var pJe=function(t){var n=t.title,r=t.titleId,o=uJe(t,sJe);return a("svg",TB({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M8.135 14.043a.75.75 0 00.025-1.06l-4.591-4.81a.25.25 0 010-.346l4.59-4.81a.75.75 0 10-1.084-1.035l-4.591 4.81a1.75 1.75 0 000 2.416l4.59 4.81c.287.3.761.31 1.061.024z"}),a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M14.135 14.043a.75.75 0 00.025-1.06l-4.591-4.81a.25.25 0 010-.346l4.59-4.81a.75.75 0 10-1.084-1.035l-4.591 4.81a1.75 1.75 0 000 2.416l4.59 4.81c.287.3.761.31 1.061.024z"}))},fJe=pJe;var y6={};$(y6,{icon:()=>vJe});var VUt=k(L());var dJe=["title","titleId"];function RB(){return RB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function hJe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var gJe=function(t){var n=t.title,r=t.titleId,o=mJe(t,dJe);return a("svg",RB({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M2.232 14.043a.75.75 0 01-.025-1.06l4.591-4.81a.25.25 0 000-.346l-4.59-4.81a.75.75 0 011.085-1.035l4.59 4.81a1.75 1.75 0 010 2.416l-4.59 4.81a.75.75 0 01-1.06.024z"}),a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M8.232 14.043a.75.75 0 01-.025-1.06l4.591-4.81a.25.25 0 000-.346l-4.59-4.81a.75.75 0 011.085-1.035l4.59 4.81a1.75 1.75 0 010 2.416l-4.59 4.81a.75.75 0 01-1.06.024z"}))},vJe=gJe;var b6={};$(b6,{icon:()=>xJe});var UUt=k(L());var yJe=["title","titleId"];function zB(){return zB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function wJe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var OJe=function(t){var n=t.title,r=t.titleId,o=bJe(t,yJe);return a("svg",zB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M9 9.114l1.85-1.943a.52.52 0 01.77 0c.214.228.214.6 0 .829l-1.95 2.05a1.552 1.552 0 01-2.31 0L5.41 8a.617.617 0 010-.829.52.52 0 01.77 0L8 9.082V.556C8 .249 8.224 0 8.5 0s.5.249.5.556v8.558z"}),a("path",{d:"M16 13.006V10h-1v3.006a.995.995 0 01-.994.994H3.01a.995.995 0 01-.994-.994V10h-1v3.006c0 1.1.892 1.994 1.994 1.994h10.996c1.1 0 1.994-.893 1.994-1.994z"}))},xJe=OJe;var w6={};$(w6,{icon:()=>PJe});var JUt=k(L());var _Je=["title","titleId"];function LB(){return LB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function jJe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var IJe=function(t){var n=t.title,r=t.titleId,o=SJe(t,_Je);return a("svg",LB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7 2h2a2 2 0 012 2v8a2 2 0 01-2 2H7a2 2 0 01-2-2V4a2 2 0 012-2zM1.5 1a.5.5 0 01.5.5v13a.5.5 0 11-1 0v-13a.5.5 0 01.5-.5zm13 0a.5.5 0 01.5.5v13a.5.5 0 11-1 0v-13a.5.5 0 01.5-.5z"}))},PJe=IJe;var O6={};$(O6,{icon:()=>MJe});var XUt=k(L());var kJe=["title","titleId"];function DB(){return DB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function CJe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var AJe=function(t){var n=t.title,r=t.titleId,o=EJe(t,kJe);return a("svg",DB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M4 5h8a2 2 0 012 2v2a2 2 0 01-2 2H4a2 2 0 01-2-2V7a2 2 0 012-2zM1.5 1h13a.5.5 0 110 1h-13a.5.5 0 010-1zm0 13h13a.5.5 0 110 1h-13a.5.5 0 110-1z"}))},MJe=AJe;var x6={};$(x6,{icon:()=>DJe});var YUt=k(L());var TJe=["title","titleId"];function NB(){return NB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function zJe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var LJe=function(t){var n=t.title,r=t.titleId,o=RJe(t,TJe);return a("svg",NB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7 1h2a2 2 0 012 2v8a2 2 0 01-2 2H7a2 2 0 01-2-2V3a2 2 0 012-2zM1.5 14h13a.5.5 0 110 1h-13a.5.5 0 110-1z"}))},DJe=LJe;var _6={};$(_6,{icon:()=>HJe});var ZUt=k(L());var NJe=["title","titleId"];function FB(){return FB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function WJe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var BJe=function(t){var n=t.title,r=t.titleId,o=FJe(t,NJe);return a("svg",FB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 4H7V1.5a.5.5 0 011 0V4zm0 8v2.5a.5.5 0 11-1 0V12h1zM3 5h9a2 2 0 012 2v2a2 2 0 01-2 2H3a2 2 0 01-2-2V7a2 2 0 012-2z"}))},HJe=BJe;var S6={};$(S6,{icon:()=>JJe});var t$t=k(L());var VJe=["title","titleId"];function WB(){return WB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function UJe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var $Je=function(t){var n=t.title,r=t.titleId,o=qJe(t,VJe);return a("svg",WB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5 5h8a2 2 0 012 2v2a2 2 0 01-2 2H5a2 2 0 01-2-2V7a2 2 0 012-2zM1.5 1a.5.5 0 01.5.5v13a.5.5 0 11-1 0v-13a.5.5 0 01.5-.5z"}))},JJe=$Je;var j6={};$(j6,{icon:()=>QJe});var n$t=k(L());var GJe=["title","titleId"];function BB(){return BB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function KJe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var YJe=function(t){var n=t.title,r=t.titleId,o=XJe(t,GJe);return a("svg",BB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M4 7v1H1.5a.5.5 0 010-1H4zm8 0h2.5a.5.5 0 110 1H12V7zM7 1h2a2 2 0 012 2v9a2 2 0 01-2 2H7a2 2 0 01-2-2V3a2 2 0 012-2z"}))},QJe=YJe;var I6={};$(I6,{icon:()=>nGe});var i$t=k(L());var ZJe=["title","titleId"];function HB(){return HB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function tGe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var rGe=function(t){var n=t.title,r=t.titleId,o=eGe(t,ZJe);return a("svg",HB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M3 5h8a2 2 0 012 2v2a2 2 0 01-2 2H3a2 2 0 01-2-2V7a2 2 0 012-2zm11.5-4a.5.5 0 01.5.5v13a.5.5 0 11-1 0v-13a.5.5 0 01.5-.5z"}))},nGe=rGe;var P6={};$(P6,{icon:()=>sGe});var l$t=k(L());var oGe=["title","titleId"];function VB(){return VB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function aGe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var lGe=function(t){var n=t.title,r=t.titleId,o=iGe(t,oGe);return a("svg",VB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7 3h2a2 2 0 012 2v8a2 2 0 01-2 2H7a2 2 0 01-2-2V5a2 2 0 012-2zM1.5 1h13a.5.5 0 110 1h-13a.5.5 0 010-1z"}))},sGe=lGe;var k6={};$(k6,{icon:()=>dGe});var u$t=k(L());var uGe=["title","titleId"];function qB(){return qB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function pGe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var fGe=function(t){var n=t.title,r=t.titleId,o=cGe(t,uGe);return a("svg",qB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M2 8h5a1 1 0 011 1v5H3a1 1 0 01-1-1V8zm1-7h10a2 2 0 012 2v10a2 2 0 01-2 2H3a2 2 0 01-2-2V3a2 2 0 012-2zm0 1a1 1 0 00-1 1v10a1 1 0 001 1h10a1 1 0 001-1V3a1 1 0 00-1-1H3z"}))},dGe=fGe;var E6={};$(E6,{icon:()=>yGe});var p$t=k(L());var mGe=["title","titleId"];function UB(){return UB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function gGe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var vGe=function(t){var n=t.title,r=t.titleId,o=hGe(t,mGe);return a("svg",UB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M9 8h5v5a1 1 0 01-1 1H8V9a1 1 0 011-1zM3 1h10a2 2 0 012 2v10a2 2 0 01-2 2H3a2 2 0 01-2-2V3a2 2 0 012-2zm0 1a1 1 0 00-1 1v10a1 1 0 001 1h10a1 1 0 001-1V3a1 1 0 00-1-1H3z"}))},yGe=vGe;var C6={};$(C6,{icon:()=>_Ge});var d$t=k(L());var bGe=["title","titleId"];function $B(){return $B=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function OGe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var xGe=function(t){var n=t.title,r=t.titleId,o=wGe(t,bGe);return a("svg",$B({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M3 2h5v5a1 1 0 01-1 1H2V3a1 1 0 011-1zm0-1h10a2 2 0 012 2v10a2 2 0 01-2 2H3a2 2 0 01-2-2V3a2 2 0 012-2zm0 1a1 1 0 00-1 1v10a1 1 0 001 1h10a1 1 0 001-1V3a1 1 0 00-1-1H3z"}))},_Ge=xGe;var A6={};$(A6,{icon:()=>kGe});var h$t=k(L());var SGe=["title","titleId"];function JB(){return JB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function IGe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var PGe=function(t){var n=t.title,r=t.titleId,o=jGe(t,SGe);return a("svg",JB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 2h5a1 1 0 011 1v5H9a1 1 0 01-1-1V2zM3 1h10a2 2 0 012 2v10a2 2 0 01-2 2H3a2 2 0 01-2-2V3a2 2 0 012-2zm0 1a1 1 0 00-1 1v10a1 1 0 001 1h10a1 1 0 001-1V3a1 1 0 00-1-1H3z"}))},kGe=PGe;var M6={};$(M6,{icon:()=>TGe});var v$t=k(L());var EGe=["title","titleId"];function GB(){return GB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function AGe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var MGe=function(t){var n=t.title,r=t.titleId,o=CGe(t,EGe);return a("svg",GB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5 4V3h6v1H5zM3 7V6h10v1H3zm2 3V9h6v1H5zm-2 3v-1h10v1H3z"}))},TGe=MGe;var T6={};$(T6,{icon:()=>NGe});var b$t=k(L());var RGe=["title","titleId"];function XB(){return XB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function LGe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var DGe=function(t){var n=t.title,r=t.titleId,o=zGe(t,RGe);return a("svg",XB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M2 4V3h6v1H2zm0 3V6h10v1H2zm0 3V9h6v1H2zm0 3v-1h10v1H2z"}))},NGe=DGe;var R6={};$(R6,{icon:()=>VGe});var O$t=k(L());var FGe=["title","titleId"];function KB(){return KB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function BGe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var HGe=function(t){var n=t.title,r=t.titleId,o=WGe(t,FGe);return a("svg",KB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 4V3h6v1H8zM4 7V6h10v1H4zm4 3V9h6v1H8zm-4 3v-1h10v1H4z"}))},VGe=HGe;var z6={};$(z6,{icon:()=>GGe});var _$t=k(L());var qGe=["title","titleId"];function YB(){return YB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function $Ge(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var JGe=function(t){var n=t.title,r=t.titleId,o=UGe(t,qGe);return a("svg",YB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8.193 13H4V3h4.151c1.816 0 2.987.977 2.987 2.495 0 1.074-.797 2.01-1.823 2.176v.055c1.359.132 2.308 1.11 2.308 2.433 0 1.76-1.296 2.841-3.43 2.841zM5.788 4.393v2.82h1.635c1.248 0 1.948-.526 1.948-1.455 0-.873-.603-1.365-1.67-1.365H5.788zm0 7.214h1.996c1.316 0 2.016-.547 2.016-1.573 0-1.019-.72-1.552-2.092-1.552h-1.92v3.125z"}))},GGe=JGe;var L6={};$(L6,{icon:()=>ZGe});var j$t=k(L());var XGe=["title","titleId"];function QB(){return QB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function YGe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var QGe=function(t){var n=t.title,r=t.titleId,o=KGe(t,XGe);return a("svg",QB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M4.597 3a.411.411 0 00-.299.132l-1.85 1.993-.756-.7a.412.412 0 00-.28-.124.42.42 0 00-.292.098.333.333 0 00-.12.257.335.335 0 00.127.254l1.064.982A.418.418 0 002.488 6a.411.411 0 00.288-.126L4.904 3.58a.328.328 0 00.095-.25.337.337 0 00-.126-.238A.421.421 0 004.597 3zm-.299 4.132A.411.411 0 014.597 7a.421.421 0 01.276.093c.076.062.12.147.126.238a.328.328 0 01-.095.25L2.776 9.874a.411.411 0 01-.288.126.418.418 0 01-.297-.108L1.127 8.91A.335.335 0 011 8.656a.333.333 0 01.12-.257.42.42 0 01.292-.098c.108.005.21.05.28.123l.757.701 1.849-1.993zM4.597 11a.411.411 0 00-.299.132l-1.85 1.993-.756-.7a.412.412 0 00-.28-.124.421.421 0 00-.292.098.333.333 0 00-.12.257.335.335 0 00.127.254l1.064.982a.418.418 0 00.297.108.411.411 0 00.288-.126l2.128-2.293a.328.328 0 00.095-.25.337.337 0 00-.126-.238.421.421 0 00-.276-.093zM6.5 4a.5.5 0 000 1h7a.5.5 0 000-1h-7zM6 8.5a.5.5 0 01.5-.5h7a.5.5 0 010 1h-7a.5.5 0 01-.5-.5zm.5 3.5a.5.5 0 000 1h7a.5.5 0 000-1h-7z"}))},ZGe=QGe;var D6={};$(D6,{icon:()=>oXe});var P$t=k(L());var eXe=["title","titleId"];function ZB(){return ZB=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function rXe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var nXe=function(t){var n=t.title,r=t.titleId,o=tXe(t,eXe);return a("svg",ZB({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M2.414 8.036L4.89 10.51a.5.5 0 01-.707.708L1.354 8.389a.5.5 0 010-.707l2.828-2.828a.5.5 0 11.707.707L2.414 8.036zm8.768 2.474l2.475-2.474-2.475-2.475a.5.5 0 01.707-.707l2.829 2.828a.5.5 0 010 .707l-2.829 2.829a.5.5 0 11-.707-.708zM8.559 2.506a.5.5 0 01.981.19L7.441 13.494a.5.5 0 01-.981-.19L8.559 2.506z"}))},oXe=nXe;var N6={};$(N6,{icon:()=>uXe});var E$t=k(L());var iXe=["title","titleId"];function eH(){return eH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function lXe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var sXe=function(t){var n=t.title,r=t.titleId,o=aXe(t,iXe);return a("svg",eH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6.111 10H12a1 1 0 001-1V5a1 1 0 00-1-1H4a1 1 0 00-1 1v4a1 1 0 001 1h1v1.297L6.111 10zm.46 1L4 14v-3a2 2 0 01-2-2V5a2 2 0 012-2h8a2 2 0 012 2v4a2 2 0 01-2 2H6.571z"}))},uXe=sXe;var F6={};$(F6,{icon:()=>mXe});var A$t=k(L());var cXe=["title","titleId"];function tH(){return tH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function fXe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var dXe=function(t){var n=t.title,r=t.titleId,o=pXe(t,cXe);return a("svg",tH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6 11a1 1 0 010 2H4a1 1 0 010-2V5a1 1 0 110-2h2a1 1 0 110 2v2h4V5a1 1 0 110-2h2a1 1 0 010 2v6a1 1 0 010 2h-2a1 1 0 010-2V9H6v2z"}))},mXe=dXe;var W6={};$(W6,{icon:()=>bXe});var T$t=k(L());var hXe=["title","titleId"];function rH(){return rH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function vXe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var yXe=function(t){var n=t.title,r=t.titleId,o=gXe(t,hXe);return a("svg",rH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8.16 12H9.5a.5.5 0 110 1h-4a.5.5 0 110-1h1.639l1.7-8H7.5a.5.5 0 010-1h4a.5.5 0 110 1H9.861l-1.7 8z"}))},bXe=yXe;var B6={};$(B6,{icon:()=>SXe});var z$t=k(L());var wXe=["title","titleId"];function nH(){return nH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function xXe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var _Xe=function(t){var n=t.title,r=t.titleId,o=OXe(t,wXe);return a("svg",nH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.556 5.051a.45.45 0 00.637.637l1.503-1.504c.432-.431 1.278-.382 1.89.23.612.612.662 1.458.23 1.89L9.519 8.6c-.432.432-1.278.383-1.89-.23a.45.45 0 10-.636.637c.914.914 2.33 1.063 3.162.23l2.297-2.297c.833-.833.684-2.248-.23-3.162-.914-.915-2.33-1.063-3.162-.23L7.556 5.051zm.888 5.261a.45.45 0 00-.637 0l-1.503 1.504c-.432.431-1.278.382-1.89-.23-.612-.612-.661-1.458-.23-1.89L6.481 7.4c.432-.432 1.278-.383 1.89.23a.45.45 0 00.636-.637c-.914-.914-2.33-1.063-3.162-.23L3.548 9.06c-.833.833-.685 2.248.23 3.162.914.915 2.33 1.063 3.162.23l1.504-1.503a.45.45 0 000-.637zM7.877 5.76a.39.39 0 00.274-.114l1.503-1.504-1.503 1.504a.39.39 0 01-.274.114zm.912 3.183c-.4.003-.843-.172-1.202-.53.359.358.802.533 1.202.53zM12.18 3.82c-.502-.503-1.155-.766-1.773-.76.618-.006 1.27.257 1.773.76.898.898 1.034 2.275.23 3.078l-2.297 2.297 2.297-2.297c.804-.803.668-2.18-.23-3.078zm-4.062 6.42a.39.39 0 01.284.667L6.898 12.41l1.504-1.503a.39.39 0 00-.284-.667zm-.926-3.965c.618-.006 1.27.257 1.773.76-.502-.503-1.155-.766-1.773-.76zM5.414 12.15a1.762 1.762 0 01-1.042-.522c-.626-.627-.692-1.511-.23-1.974L6.44 7.358 4.142 9.654c-.462.463-.396 1.348.23 1.974.311.311.687.484 1.042.522z"}))},SXe=_Xe;var H6={};$(H6,{icon:()=>EXe});var D$t=k(L());var jXe=["title","titleId"];function oH(){return oH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function PXe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var kXe=function(t){var n=t.title,r=t.titleId,o=IXe(t,jXe);return a("svg",oH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M3 8v1h1v1H1V9h1V8H1V7h3v1H3zm1 4v2H1v-1h1v-1H1v-1h3v1zM3 5h1v1H1V5h1V4H1V3h2v2zm2.5-1h8a.5.5 0 110 1h-8a.5.5 0 010-1zm0 4h8a.5.5 0 110 1h-8a.5.5 0 010-1zm0 4h8a.5.5 0 110 1h-8a.5.5 0 110-1z"}))},EXe=kXe;var V6={};$(V6,{icon:()=>RXe});var F$t=k(L());var CXe=["title","titleId"];function iH(){return iH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function MXe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var TXe=function(t){var n=t.title,r=t.titleId,o=AXe(t,CXe);return a("svg",iH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M10 6H5C3.057 6 2 7.057 2 9s1.057 3 3 3h1.5v-1H5c-1.39 0-2-.61-2-2 0-1.39.61-2 2-2h5v3l3.5-3.5L10 3v3z"}))},RXe=TXe;var q6={};$(q6,{icon:()=>FXe});var B$t=k(L());var zXe=["title","titleId"];function aH(){return aH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function DXe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var NXe=function(t){var n=t.title,r=t.titleId,o=LXe(t,zXe);return a("svg",aH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M10.023 10h1.274c.006.08.01.164.01.25a2.557 2.557 0 01-.883 1.949c-.284.25-.627.446-1.03.588A4.087 4.087 0 018.028 13a4.616 4.616 0 01-3.382-1.426c-.193-.259-.193-.5 0-.724.193-.223.438-.266.735-.13.343.363.748.655 1.213.876.466.22.949.33 1.449.33.637 0 1.132-.144 1.485-.433.353-.29.53-.67.53-1.14a1.72 1.72 0 00-.034-.353zM5.586 7a2.49 2.49 0 01-.294-.507 2.316 2.316 0 01-.177-.934c0-.363.076-.701.228-1.015.152-.314.363-.586.633-.816.27-.23.588-.41.955-.537A3.683 3.683 0 018.145 3c.578 0 1.112.11 1.603.33.49.221.907.508 1.25.861.16.282.16.512 0 .692-.16.18-.38.214-.662.102a3.438 3.438 0 00-.978-.669 2.914 2.914 0 00-1.213-.242c-.54 0-.973.125-1.302.375-.328.25-.492.595-.492 1.036 0 .236.046.434.14.596.092.162.217.304.374.426.157.123.329.23.515.324.119.06.24.116.362.169H5.586zM2.5 8h11a.5.5 0 110 1h-11a.5.5 0 010-1z"}))},FXe=NXe;var U6={};$(U6,{icon:()=>qXe});var V$t=k(L());var WXe=["title","titleId"];function lH(){return lH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function HXe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var VXe=function(t){var n=t.title,r=t.titleId,o=BXe(t,WXe);return a("svg",lH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M14 3v2H2V3v10h12V3zM2 2h12c.552 0 1 .413 1 .923v10.154c0 .51-.448.923-1 .923H2c-.552 0-1-.413-1-.923V2.923C1 2.413 1.448 2 2 2zm0 5h12v1H2V7zm0 3h12v1H2v-1z"}))},qXe=VXe;var $6={};$($6,{icon:()=>XXe});var U$t=k(L());var UXe=["title","titleId"];function sH(){return sH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function JXe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var GXe=function(t){var n=t.title,r=t.titleId,o=$Xe(t,UXe);return a("svg",sH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5 3.536V7.8c0 1.628 1.224 2.6 3 2.6 1.783 0 3-.972 3-2.6V3.536c0-.357.167-.536.5-.536.333 0 .5.179.5.536v4.318c0 2.093-1.665 3.546-4 3.546S4 9.893 4 7.8V3.536C4 3.179 4.167 3 4.5 3c.333 0 .5.179.5.536zM2.5 13h11a.5.5 0 110 1h-11a.5.5 0 110-1z"}))},XXe=GXe;var J6={};$(J6,{icon:()=>eKe});var J$t=k(L());var KXe=["title","titleId"];function uH(){return uH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function QXe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ZXe=function(t){var n=t.title,r=t.titleId,o=YXe(t,KXe);return a("svg",uH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5.5 6h5c1.943 0 3 1.057 3 3s-1.057 3-3 3H9v-1h1.5c1.39 0 2-.61 2-2 0-1.39-.61-2-2-2h-5v3L2 6.5 5.5 3v3z"}))},eKe=ZXe;var G6={};$(G6,{icon:()=>iKe});var X$t=k(L());var tKe=["title","titleId"];function cH(){return cH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function nKe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var oKe=function(t){var n=t.title,r=t.titleId,o=rKe(t,tKe);return a("svg",cH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5.5 4h8a.5.5 0 110 1h-8a.5.5 0 010-1zm0 4h8a.5.5 0 110 1h-8a.5.5 0 010-1zm0 4h8a.5.5 0 110 1h-8a.5.5 0 110-1zm-3-7a.5.5 0 110-1 .5.5 0 010 1zm0 4a.5.5 0 110-1 .5.5 0 010 1zm0 4a.5.5 0 110-1 .5.5 0 010 1z"}))},iKe=oKe;var X6={};$(X6,{icon:()=>cKe});var Y$t=k(L());var aKe=["title","titleId"];function pH(){return pH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function sKe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var uKe=function(t){var n=t.title,r=t.titleId,o=lKe(t,aKe);return a("svg",pH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M14.95 3.684L8.637 8.912a1 1 0 01-1.276 0L1.051 3.684A.999.999 0 001 4v8a1 1 0 001 1h12a1 1 0 001-1V4a.999.999 0 00-.05-.316zM2 2h12a2 2 0 012 2v8a2 2 0 01-2 2H2a2 2 0 01-2-2V4a2 2 0 012-2zm-.21 1l5.576 4.603a1 1 0 001.27.003L14.268 3H1.79z"}))},cKe=uKe;var K6={};$(K6,{icon:()=>Bk});var Z$t=k(L());var pKe=["title","titleId"];function fH(){return fH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function dKe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var mKe=function(t){var n=t.title,r=t.titleId,o=fKe(t,pKe);return a("svg",fH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o))},Bk=mKe;var Y6={};$(Y6,{icon:()=>bKe});var tJt=k(L());var hKe=["title","titleId"];function dH(){return dH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function vKe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var yKe=function(t){var n=t.title,r=t.titleId,o=gKe(t,hKe);return a("svg",dH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M15.862 14.18v.001a.482.482 0 01.1.521.5.5 0 01-.447.299h-3.149c-.07 0-.136 0-.2-.003a.664.664 0 01-.414-.14c-.35-.31-.684-.637-1.001-.981l-1.772-1.738a5.941 5.941 0 01-3.802.14l-.045-.012a5.89 5.89 0 01-2.682-1.712A5.715 5.715 0 011.08 7.72a5.66 5.66 0 01.348-3.118A5.78 5.78 0 013.39 2.124a5.979 5.979 0 016.136-.505 5.836 5.836 0 012.356 2.123 5.67 5.67 0 01.873 3.017l.001.003c0 .128-.051.25-.143.34a.495.495 0 01-.694 0 .476.476 0 01-.143-.34c0-.95-.288-1.878-.826-2.668a4.88 4.88 0 00-2.198-1.769 4.99 4.99 0 00-2.83-.273 4.93 4.93 0 00-2.509 1.314 4.774 4.774 0 00-1.34 2.46A4.715 4.715 0 002.352 8.6a4.82 4.82 0 001.804 2.155c.805.528 1.752.81 2.721.81a4.899 4.899 0 001.296-.194l.032-.009.717-.211a.506.506 0 01.483.111l1.11 1.026 1.788 1.752h2.03l-3.657-3.583a.475.475 0 01.014-.666.495.495 0 01.679-.013l4.493 4.402z"}),a("path",{d:"M7.097 3.468L9.679 4.93a.433.433 0 01.218.37v2.924a.422.422 0 01-.218.37l-2.582 1.461a.438.438 0 01-.437 0L4.077 8.594a.433.433 0 01-.218-.37V5.3a.422.422 0 01.218-.37L6.66 3.467a.446.446 0 01.437 0zm1.845 4.27V5.784a.328.328 0 00-.17-.287L7.047 4.52a.342.342 0 00-.338 0l-1.726.977a.336.336 0 00-.168.287v1.953a.326.326 0 00.17.287l1.724.977a.342.342 0 00.338 0l1.726-.978a.334.334 0 00.169-.287z"}))},bKe=yKe;var Q6={};$(Q6,{icon:()=>SKe});var nJt=k(L());var wKe=["title","titleId"];function mH(){return mH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function xKe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var _Ke=function(t){var n=t.title,r=t.titleId,o=OKe(t,wKe);return a("svg",mH({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M2.648 9.937l7.29-7.288a2.21 2.21 0 013.124 0l2.29 2.288a2.21 2.21 0 010 3.126L10.413 13H12.5a.5.5 0 010 1H4.501a2.21 2.21 0 01-1.563-.647l.707-.707c.227.226.535.354.856.354h4.005a1.21 1.21 0 00.848-.354l1.292-1.293-4-4-3.29 3.291a1.21 1.21 0 000 1.712l.29.29-.708.707-.29-.29a2.21 2.21 0 010-3.126zM8 6h6.89a1.208 1.208 0 00-.246-.356L14 5H9L8 6zm2-2h3l-.645-.644a1.21 1.21 0 00-1.71 0L10 4zm4.89 3H7.708l1 1H14l.644-.644A1.22 1.22 0 0014.891 7zM9.708 9l1.646 1.646L13 9H9.707z"}),a("path",{d:"M14 11.5a.5.5 0 11-1 0 .5.5 0 011 0zm1.5-.5a.5.5 0 100-1 .5.5 0 000 1zm-1 2a.5.5 0 000 1h1a.5.5 0 000-1h-1z"}))},SKe=_Ke;var Z6={};$(Z6,{icon:()=>EKe});var iJt=k(L());var jKe=["title","titleId"];function hH(){return hH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function PKe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var kKe=function(t){var n=t.title,r=t.titleId,o=IKe(t,jKe);return a("svg",hH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M12.535 12.493a.47.47 0 01.468.468v2.564a.473.473 0 01-.466.475H3V0H12.595a.45.45 0 01.398.463v2.565a.469.469 0 01-.468.467h-.065a.468.468 0 01-.467-.467V1H4v14h8.01l-.007-2.04c0-.257.21-.467.467-.467h.065zm-1.096-7.59l2.121 2.122a1.5 1.5 0 010 2.121l-2.12 2.122a.5.5 0 11-.708-.708l2.121-2.12a.5.5 0 000-.708l-2.121-2.121a.5.5 0 01.707-.707z"}))},EKe=kKe;var ew={};$(ew,{icon:()=>RKe});var lJt=k(L());var CKe=["title","titleId"];function gH(){return gH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function MKe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var TKe=function(t){var n=t.title,r=t.titleId,o=AKe(t,CKe);return a("svg",gH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M4.354 12.354l8-8a.5.5 0 00-.708-.708l-8 8a.5.5 0 00.708.708zM1 10.5a.5.5 0 111 0v3a.5.5 0 00.5.5h3a.5.5 0 110 1h-3A1.5 1.5 0 011 13.5v-3zm14-5a.5.5 0 11-1 0v-3a.5.5 0 00-.5-.5h-3a.5.5 0 110-1h3A1.5 1.5 0 0115 2.5v3z"}))},RKe=TKe;var tw={};$(tw,{icon:()=>FKe});var uJt=k(L());var zKe=["title","titleId"];function vH(){return vH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function DKe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var NKe=function(t){var n=t.title,r=t.titleId,o=LKe(t,zKe);return a("svg",vH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M6.707 10L10 6.707A.5.5 0 009.293 6L6 9.293a.5.5 0 10.707.707zM4 9.5a.5.5 0 011 0v1a.5.5 0 00.5.5h1a.5.5 0 110 1h-1A1.5 1.5 0 014 10.5v-1zm8-3a.5.5 0 11-1 0v-1a.5.5 0 00-.5-.5h-1a.5.5 0 010-1h1A1.5 1.5 0 0112 5.5v1z"}))},FKe=NKe;var rw={};$(rw,{icon:()=>qKe});var pJt=k(L());var WKe=["title","titleId"];function yH(){return yH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function HKe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var VKe=function(t){var n=t.title,r=t.titleId,o=BKe(t,WKe);return a("svg",yH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8.505 1c.422-.003.844.17 1.166.516l1.95 2.05c.213.228.213.6 0 .828a.52.52 0 01-.771 0L9 2.451v7.993c0 .307-.224.556-.5.556s-.5-.249-.5-.556v-7.96l-1.82 1.91a.52.52 0 01-.77 0 .617.617 0 010-.829l1.95-2.05A1.575 1.575 0 018.5 1h.005zM4.18 7c-.473 0-.88.294-.972.703l-1.189 5.25a.776.776 0 00-.019.172c0 .483.444.875.99.875H14.01c.065 0 .13-.006.194-.017.537-.095.885-.556.778-1.03l-1.19-5.25C13.7 7.294 13.293 7 12.822 7H4.18zM6 6v1h5V6h1.825c.946 0 1.76.606 1.946 1.447l1.19 5.4c.215.975-.482 1.923-1.556 2.118a2.18 2.18 0 01-.39.035H2.985C1.888 15 1 14.194 1 13.2c0-.119.013-.237.039-.353l1.19-5.4C2.414 6.606 3.229 6 4.174 6H6z"}))},qKe=VKe;var nw={};$(nw,{icon:()=>XKe});var dJt=k(L());var UKe=["title","titleId"];function bH(){return bH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function JKe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var GKe=function(t){var n=t.title,r=t.titleId,o=$Ke(t,UKe);return a("svg",bH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M15.98 7.873c.013.03.02.064.02.098v.06a.24.24 0 01-.02.097C15.952 8.188 13.291 14 8 14S.047 8.188.02 8.128A.24.24 0 010 8.03v-.059c0-.034.007-.068.02-.098C.048 7.813 2.709 2 8 2s7.953 5.813 7.98 5.873zm-1.37-.424a12.097 12.097 0 00-1.385-1.862C11.739 3.956 9.999 3 8 3c-2 0-3.74.956-5.225 2.587a12.098 12.098 0 00-1.701 2.414 12.095 12.095 0 001.7 2.413C4.26 12.043 6.002 13 8 13s3.74-.956 5.225-2.587A12.097 12.097 0 0014.926 8c-.08-.15-.189-.343-.315-.551zM8 4.75A3.253 3.253 0 0111.25 8 3.254 3.254 0 018 11.25 3.253 3.253 0 014.75 8 3.252 3.252 0 018 4.75zm0 1C6.76 5.75 5.75 6.76 5.75 8S6.76 10.25 8 10.25 10.25 9.24 10.25 8 9.24 5.75 8 5.75zm0 1.5a.75.75 0 100 1.5.75.75 0 000-1.5z"}))},XKe=GKe;var ow={};$(ow,{icon:()=>eYe});var hJt=k(L());var KKe=["title","titleId"];function wH(){return wH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function QKe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ZKe=function(t){var n=t.title,r=t.titleId,o=YKe(t,KKe);return a("svg",wH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5.318 13.47l.776-.776A6.04 6.04 0 008 13c1.999 0 3.74-.956 5.225-2.587A12.097 12.097 0 0014.926 8a12.097 12.097 0 00-1.701-2.413l-.011-.012.707-.708c1.359 1.476 2.045 2.976 2.058 3.006.014.03.021.064.021.098v.06a.24.24 0 01-.02.097C15.952 8.188 13.291 14 8 14a7.03 7.03 0 01-2.682-.53zM2.04 11.092C.707 9.629.034 8.158.02 8.128A.24.24 0 010 8.03v-.059c0-.034.007-.068.02-.098C.048 7.813 2.709 2 8 2c.962 0 1.837.192 2.625.507l-.78.78A6.039 6.039 0 008 3c-2 0-3.74.956-5.225 2.587a12.098 12.098 0 00-1.701 2.414 12.11 12.11 0 001.674 2.383l-.708.708zM8.362 4.77L7.255 5.877a2.262 2.262 0 00-1.378 1.378L4.77 8.362A3.252 3.252 0 018.362 4.77zm2.86 2.797a3.254 3.254 0 01-3.654 3.654l1.06-1.06a2.262 2.262 0 001.533-1.533l1.06-1.06zm-9.368 7.287a.5.5 0 01-.708-.708l13-13a.5.5 0 01.708.708l-13 13z"}))},eYe=ZKe;var iw={};$(iw,{icon:()=>iYe});var vJt=k(L());var tYe=["title","titleId"];function OH(){return OH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function nYe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var oYe=function(t){var n=t.title,r=t.titleId,o=rYe(t,tYe);return a("svg",OH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 16A8 8 0 118 0a8 8 0 010 16zm0-1.067A6.933 6.933 0 108 1.067a6.933 6.933 0 000 13.866zM5.333 6.4a1.067 1.067 0 110-2.133 1.067 1.067 0 010 2.133zm5.334 0a1.067 1.067 0 110-2.133 1.067 1.067 0 010 2.133zM2.739 8.802a.533.533 0 01.922-.537C4.815 10.245 6.249 11.2 8 11.2c1.75 0 3.185-.956 4.34-2.935a.533.533 0 01.92.537c-1.333 2.287-3.1 3.465-5.26 3.465-2.16 0-3.927-1.178-5.26-3.465z"}))},iYe=oYe;var aw={};$(aw,{icon:()=>cYe});var bJt=k(L());var aYe=["title","titleId"];function xH(){return xH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function sYe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var uYe=function(t){var n=t.title,r=t.titleId,o=lYe(t,aYe);return a("svg",xH({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 16A8 8 0 118 0a8 8 0 010 16zm0-1.067A6.933 6.933 0 108 1.067a6.933 6.933 0 000 13.866zM5.333 6.4a1.067 1.067 0 110-2.133 1.067 1.067 0 010 2.133zm5.334 0a1.067 1.067 0 110-2.133 1.067 1.067 0 010 2.133zM3.2 10.667a.533.533 0 010-1.067h9.6a.533.533 0 110 1.067H3.2z",fillRule:"evenodd"}))},cYe=uYe;var lw={};$(lw,{icon:()=>hYe});var OJt=k(L());var pYe=["title","titleId"];function _H(){return _H=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function dYe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var mYe=function(t){var n=t.title,r=t.titleId,o=fYe(t,pYe);return a("svg",_H({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 16A8 8 0 118 0a8 8 0 010 16zm0-1.067A6.933 6.933 0 108 1.067a6.933 6.933 0 000 13.866zM5.333 6.4a1.067 1.067 0 110-2.133 1.067 1.067 0 010 2.133zm5.334 0a1.067 1.067 0 110-2.133 1.067 1.067 0 010 2.133zm2.487 3.868a.533.533 0 11-.708.797C10.936 9.725 9.458 9.067 8 9.067c-1.458 0-2.937.657-4.446 1.998a.533.533 0 11-.708-.797C4.536 8.765 6.258 8 8 8s3.463.765 5.154 2.268z"}))},hYe=mYe;var sw={};$(sw,{icon:()=>wYe});var _Jt=k(L());var gYe=["title","titleId"];function SH(){return SH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function yYe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var bYe=function(t){var n=t.title,r=t.titleId,o=vYe(t,gYe);return a("svg",SH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M7.999 15.999a8 8 0 110-16 8 8 0 010 16zM8 15A7 7 0 108 1a7 7 0 000 14zM3.5 5h9a.5.5 0 110 1h-9a.5.5 0 010-1zm2 3h5a.5.5 0 110 1h-5a.5.5 0 010-1zm2 3h1a.5.5 0 110 1h-1a.5.5 0 110-1z"}))},wYe=bYe;var uw={};$(uw,{icon:()=>jYe});var jJt=k(L());var OYe=["title","titleId"];function jH(){return jH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function _Ye(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var SYe=function(t){var n=t.title,r=t.titleId,o=xYe(t,OYe);return a("svg",jH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.686 8.464c1.547-.619 3.08-.619 4.628 0A.5.5 0 0013 8V2a.5.5 0 00-.276-.447C11.259.82 9.458.82 7.342 1.526c-1.884.628-3.417.628-4.618.027A.5.5 0 002 2v12.5a.5.5 0 101 0V8.553c1.411.627 2.983.592 4.686-.089zM3 2.741c1.322.42 2.878.327 4.658-.267C9.4 1.894 10.843 1.85 12 2.322v4.975c-1.56-.464-3.128-.384-4.686.239-1.54.616-2.892.616-4.09.017A.498.498 0 003 7.5V2.74z"}))},jYe=SYe;var cw={};$(cw,{icon:()=>CYe});var PJt=k(L());var IYe=["title","titleId"];function IH(){return IH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function kYe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var EYe=function(t){var n=t.title,r=t.titleId,o=PYe(t,IYe);return a("svg",IH({viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5.14.192L7.53 2.49a.67.67 0 00.942 0L10.86.192a.677.677 0 01.944 0 .65.65 0 010 .93l-2.388 2.3a2.02 2.02 0 01-2.832 0l-2.388-2.3a.65.65 0 010-.93.677.677 0 01.944 0zm0 15.616l2.39-2.298a.67.67 0 01.942 0l2.389 2.298c.26.256.685.256.944 0a.65.65 0 000-.93l-2.388-2.3a2.02 2.02 0 00-2.832 0l-2.388 2.3a.65.65 0 000 .93c.26.256.683.256.944 0zM16 6H0v4h16V6zM1 9V7h14v2H1z"}))},CYe=EYe;var pw={};$(pw,{icon:()=>zYe});var EJt=k(L());var AYe=["title","titleId"];function PH(){return PH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function TYe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var RYe=function(t){var n=t.title,r=t.titleId,o=MYe(t,AYe);return a("svg",PH({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M6 2H1v11h6.1c.07.348.177.682.316 1H1a1 1 0 01-1-1V2a1 1 0 011-1h5.25a.75.75 0 01.75.75v1.125c0 .069.056.125.125.125H13a1 1 0 011 1v3.416a4.962 4.962 0 00-1-.316V4H7.125A1.125 1.125 0 016 2.875V2zm10 10a4 4 0 11-8 0 4 4 0 018 0zm-1.646-1.354a.5.5 0 010 .708l-2.5 2.5a.5.5 0 01-.708 0l-1-1a.5.5 0 01.708-.708l.646.647 2.146-2.147a.5.5 0 01.708 0z"}))},zYe=RYe;var fw={};$(fw,{icon:()=>WYe});var AJt=k(L());var LYe=["title","titleId"];function kH(){return kH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function NYe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var FYe=function(t){var n=t.title,r=t.titleId,o=DYe(t,LYe);return a("svg",kH({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7 2H2v11h12V4H8.125A1.125 1.125 0 017 2.875V2zm.25-1a.75.75 0 01.75.75v1.125c0 .069.056.125.125.125H14a1 1 0 011 1v9a1 1 0 01-1 1H2a1 1 0 01-1-1V2a1 1 0 011-1h5.25z"}))},WYe=FYe;var dw={};$(dw,{icon:()=>UYe});var TJt=k(L());var BYe=["title","titleId"];function EH(){return EH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function VYe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var qYe=function(t){var n=t.title,r=t.titleId,o=HYe(t,BYe);return a("svg",EH({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M1 9.5l.826-3.717A1 1 0 012.802 5H13V4H7.125A1.125 1.125 0 016 2.875V2H1v7.5zm.247 3.5H7.1c.07.348.177.682.316 1H1a1 1 0 01-1-1V2a1 1 0 011-1h5.25a.75.75 0 01.75.75v1.125c0 .069.056.125.125.125H13a1 1 0 011 1v1h.753a1 1 0 01.977 1.217l-.447 2.011a5.015 5.015 0 00-.887-.618L14.753 6H2.803l-1.556 7zM16 12a4 4 0 11-8 0 4 4 0 018 0zm-4 .5a.577.577 0 01-.57-.495l-.29-2.015a.867.867 0 111.718 0l-.288 2.015a.577.577 0 01-.57.495zm0 2.5a1 1 0 100-2 1 1 0 000 2z"}))},UYe=qYe;var mw={};$(mw,{icon:()=>KYe});var zJt=k(L());var $Ye=["title","titleId"];function CH(){return CH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function GYe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var XYe=function(t){var n=t.title,r=t.titleId,o=JYe(t,$Ye);return a("svg",CH({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M1 9.5l.826-3.717A1 1 0 012.802 5H13V4H7.125A1.125 1.125 0 016 2.875V2H1v7.5zm.247 3.5h11.95l1.556-7H2.803l-1.556 7zM13 14H1a1 1 0 01-1-1V2a1 1 0 011-1h5.25a.75.75 0 01.75.75v1.125c0 .069.056.125.125.125H13a1 1 0 011 1v1h.753a1 1 0 01.977 1.217l-1.556 7a1 1 0 01-.976.783H13z"}))},KYe=XYe;var hw={};$(hw,{icon:()=>tQe});var DJt=k(L());var YYe=["title","titleId"];function AH(){return AH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ZYe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var eQe=function(t){var n=t.title,r=t.titleId,o=QYe(t,YYe);return a("svg",AH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M3 2a1 1 0 00-1 1v10a1 1 0 102 0V3a1 1 0 00-1-1zm5.146.22l7.2 4.581a1.425 1.425 0 010 2.398l-7.2 4.581C7.21 14.375 6 13.692 6 12.581V3.42c0-1.112 1.21-1.795 2.146-1.2z",clipRule:"evenodd"}))},tQe=eQe;var gw={};$(gw,{icon:()=>aQe});var FJt=k(L());var rQe=["title","titleId"];function MH(){return MH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function oQe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var iQe=function(t){var n=t.title,r=t.titleId,o=nQe(t,rQe);return a("svg",MH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M13 2a1 1 0 011 1v10a1 1 0 11-2 0V3a1 1 0 011-1zm-5.146.22l-7.2 4.581a1.425 1.425 0 000 2.398l7.2 4.581c.936.595 2.146-.088 2.146-1.199V3.42c0-1.111-1.21-1.794-2.146-1.199z",clipRule:"evenodd"}))},aQe=iQe;var vw={};$(vw,{icon:()=>pQe});var BJt=k(L());var lQe=["title","titleId"];function TH(){return TH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function uQe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var cQe=function(t){var n=t.title,r=t.titleId,o=sQe(t,lQe);return a("svg",TH({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M9 7V3h1v3h3v1H9zM7 7H3V6h3V3h1v4zm2 2h4v1h-3v3H9V9zM7 9v4H6v-3H3V9h4zM0 1.994C0 .893.895 0 1.994 0h12.012C15.107 0 16 .895 16 1.994v12.012A1.995 1.995 0 0114.006 16H1.994A1.995 1.995 0 010 14.006V1.994zm1 0v12.012c0 .548.446.994.994.994h12.012a.995.995 0 00.994-.994V1.994A.995.995 0 0014.006 1H1.994A.995.995 0 001 1.994z"}))},pQe=cQe;var yw={};$(yw,{icon:()=>gQe});var VJt=k(L());var fQe=["title","titleId"];function RH(){return RH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function mQe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var hQe=function(t){var n=t.title,r=t.titleId,o=dQe(t,fQe);return a("svg",RH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M13 3v4h-1V4H9V3h4zM3 3h4v1H4v3H3V3zm10 10H9v-1h3V9h1v4zM3 13V9h1v3h3v1H3zM0 1.994C0 .893.895 0 1.994 0h12.012C15.107 0 16 .895 16 1.994v12.012A1.995 1.995 0 0114.006 16H1.994A1.995 1.995 0 010 14.006V1.994zm1 0v12.012c0 .548.446.994.994.994h12.012a.995.995 0 00.994-.994V1.994A.995.995 0 0014.006 1H1.994A.995.995 0 001 1.994z",fillRule:"evenodd"}))},gQe=hQe;var bw={};$(bw,{icon:()=>OQe});var UJt=k(L());var vQe=["title","titleId"];function zH(){return zH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function bQe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var wQe=function(t){var n=t.title,r=t.titleId,o=yQe(t,vQe);return a("svg",zH({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M13 2.226v2.218c-.359-.143-.845-.218-1.315-.218-1.059 0-1.631.519-1.802 1.565l-.168.937h2.798v2.159H9.41l-.313 1.674C8.696 12.987 7.261 14 4.785 14c-.718 0-1.35-.092-1.785-.251v-2.243c.418.176.905.268 1.383.268 1.008 0 1.546-.435 1.725-1.523l.24-1.364H3.787V6.728h2.812l.288-1.264C7.286 3.071 8.662 2 11.352 2c.598 0 1.306.1 1.648.226z"}))},OQe=wQe;var ww={};$(ww,{icon:()=>IQe});var JJt=k(L());var xQe=["title","titleId"];function LH(){return LH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function SQe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var jQe=function(t){var n=t.title,r=t.titleId,o=_Qe(t,xQe);return a("svg",LH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M.164 10.329L1.87 8 .163 5.67c.18-.601.43-1.19.758-1.757a8.197 8.197 0 011.142-1.535l2.872.313L6.099.05a8.166 8.166 0 013.8-.003l1.166 2.644 2.872-.313a8.166 8.166 0 011.899 3.293L14.13 8l1.706 2.33c-.18.601-.43 1.19-.758 1.757a8.197 8.197 0 01-1.142 1.535l-2.872-.313-1.164 2.641a8.166 8.166 0 01-3.8.003l-1.166-2.644-2.872.313a8.166 8.166 0 01-1.899-3.293zm4.663 1.986a1 1 0 011.023.591l.957 2.17c.79.134 1.597.132 2.387-.001l.956-2.169a1 1 0 011.023-.59l2.358.256a7.23 7.23 0 001.194-2.068l-1.401-1.913a1 1 0 010-1.182l1.4-1.912a7.165 7.165 0 00-1.192-2.069l-2.359.257a1 1 0 01-1.023-.591L9.193.924a7.165 7.165 0 00-2.387.001L5.85 3.094a1 1 0 01-1.023.59l-2.358-.256a7.23 7.23 0 00-1.194 2.068l1.401 1.913a1 1 0 010 1.182l-1.4 1.912c.28.751.681 1.45 1.192 2.069l2.359-.257zM8 11a3 3 0 110-6 3 3 0 010 6zm0-1a2 2 0 100-4 2 2 0 000 4z"}))},IQe=jQe;var Ow={};$(Ow,{icon:()=>AQe});var XJt=k(L());var PQe=["title","titleId"];function DH(){return DH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function EQe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var CQe=function(t){var n=t.title,r=t.titleId,o=kQe(t,PQe);return a("svg",DH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M9.035 9A3.5 3.5 0 0115 7.05V4.5c0-1.072-.648-1.72-2.098-2.01a.5.5 0 01.196-.98C14.981 1.886 16 2.905 16 4.5v4.25c0 .072-.015.14-.043.202A3.5 3.5 0 119.035 10h-2.07A3.5 3.5 0 11.043 8.952.498.498 0 010 8.75V4.5c0-1.595 1.019-2.614 2.902-2.99a.5.5 0 01.196.98C1.648 2.78 1 3.428 1 4.5v2.55A3.5 3.5 0 016.965 9h2.07zM3.5 12a2.5 2.5 0 100-5 2.5 2.5 0 000 5zm9 0a2.5 2.5 0 100-5 2.5 2.5 0 000 5z"}))},AQe=CQe;var xw={};$(xw,{icon:()=>LQe});var YJt=k(L());var MQe=["title","titleId"];function NH(){return NH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function RQe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var zQe=function(t){var n=t.title,r=t.titleId,o=TQe(t,MQe);return a("svg",NH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M1.019 8a6.462 6.462 0 001.003 3h2.382a14.469 14.469 0 01-.396-3h-2.99zm0-1h2.989c.033-1.078.172-2.094.396-3H2.022a6.462 6.462 0 00-1.003 3zM13.98 8h-2.989a14.469 14.469 0 01-.396 3h2.382a6.462 6.462 0 001.003-3zm0-1a6.462 6.462 0 00-1.003-3h-2.382c.224.906.363 1.922.396 3h2.99zM5.008 8c.037 1.107.195 2.127.429 3h4.126c.234-.873.392-1.893.429-3H5.008zm0-1h4.984a13.422 13.422 0 00-.429-3H5.437a13.422 13.422 0 00-.429 3zM.016 8H0V7h.016a7.5 7.5 0 0114.968 0H15v1h-.016A7.5 7.5 0 01.016 8zm2.794 4a6.501 6.501 0 002.717 1.695A7.315 7.315 0 014.7 12H2.81zm9.38 0H10.3c-.23.657-.51 1.23-.827 1.695A6.501 6.501 0 0012.19 12zm-6.428 0c.484 1.24 1.132 2 1.738 2 .606 0 1.254-.76 1.738-2H5.762zM2.81 3H4.7c.23-.657.51-1.23.827-1.695A6.501 6.501 0 002.81 3zm9.38 0a6.501 6.501 0 00-2.717-1.695c.317.465.597 1.038.827 1.695h1.89zM5.762 3h3.476C8.754 1.76 8.106 1 7.5 1c-.606 0-1.254.76-1.738 2z"}))},LQe=zQe;var _w={};$(_w,{icon:()=>BQe});var ZJt=k(L());var DQe=["title","titleId"];function FH(){return FH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function FQe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var WQe=function(t){var n=t.title,r=t.titleId,o=NQe(t,DQe);return a("svg",FH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M13.5 6c.276 0 .5.232.5.5 0 .276-.229.5-.5.5h-11a.505.505 0 01-.5-.5c0-.276.229-.5.5-.5h11zm0 3c.276 0 .5.232.5.5 0 .276-.229.5-.5.5h-11a.505.505 0 01-.5-.5c0-.276.229-.5.5-.5h11z"}))},BQe=WQe;var Sw={};$(Sw,{icon:()=>$Qe});var tGt=k(L());var HQe=["title","titleId"];function WH(){return WH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function qQe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var UQe=function(t){var n=t.title,r=t.titleId,o=VQe(t,HQe);return a("svg",WH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M6 2.5c0-.276.232-.5.5-.5.276 0 .5.229.5.5v11c0 .276-.232.5-.5.5a.503.503 0 01-.5-.5v-11zm3 0c0-.276.232-.5.5-.5.276 0 .5.229.5.5v11c0 .276-.232.5-.5.5a.503.503 0 01-.5-.5v-11z"}))},$Qe=UQe;var jw={};$(jw,{icon:()=>YQe});var nGt=k(L());var JQe=["title","titleId"];function BH(){return BH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function XQe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var KQe=function(t){var n=t.title,r=t.titleId,o=GQe(t,JQe);return a("svg",BH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M1 5V1h4v4H1zm3-1V2H2v2h2zm2 1V1h4v4H6zm3-1V2H7v2h2zm2 1V1h4v4h-4zm1-1h2V2h-2v2zM1 10V6h4v4H1zm3-1V7H2v2h2zm2 1V6h4v4H6zm3-1V7H7v2h2zm2 1V6h4v4h-4zm3-1V7h-2v2h2zM1 15v-4h4v4H1zm1-1h2v-2H2v2zm4 1v-4h4v4H6zm1-1h2v-2H7v2zm4 1v-4h4v4h-4zm1-1h2v-2h-2v2z"}))},YQe=KQe;var Iw={};$(Iw,{icon:()=>rZe});var iGt=k(L());var QQe=["title","titleId"];function HH(){return HH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function eZe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var tZe=function(t){var n=t.title,r=t.titleId,o=ZQe(t,QQe);return a("svg",HH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.402 3.098a3.75 3.75 0 00-5.304 5.304l5.558 5.27L8 14l5.892-5.588a3.75 3.75 0 10-5.294-5.313L8 3.697l-.598-.599zM2.796 7.685a2.747 2.747 0 01.01-3.88 2.75 2.75 0 013.889 0L8 5.111l1.305-1.306a2.75 2.75 0 113.89 3.89L8 12.62 2.796 7.685z"}))},rZe=tZe;var Pw={};$(Pw,{icon:()=>lZe});var lGt=k(L());var nZe=["title","titleId"];function VH(){return VH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function iZe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var aZe=function(t){var n=t.title,r=t.titleId,o=oZe(t,nZe);return a("svg",VH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M12 9a3 3 0 110 6 3 3 0 010-6zm0 1a2 2 0 100 4 2 2 0 000-4zM4 2a2 2 0 110 4 2 2 0 010-4zm0 1a1 1 0 100 2 1 1 0 000-2zm0 5a4 4 0 110 8 4 4 0 010-8zm0 1a3 3 0 100 6 3 3 0 000-6zm8-9a4 4 0 110 8 4 4 0 010-8zm0 1a3 3 0 100 6 3 3 0 000-6z"}))},lZe=aZe;var kw={};$(kw,{icon:()=>fZe});var uGt=k(L());var sZe=["title","titleId"];function qH(){return qH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function cZe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var pZe=function(t){var n=t.title,r=t.titleId,o=uZe(t,sZe);return a("svg",qH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M13.6 12.186l-1.357-1.358c-.025-.025-.058-.034-.084-.056.53-.794.84-1.746.84-2.773a4.977 4.977 0 00-.84-2.772c.026-.02.059-.03.084-.056L13.6 3.813a6.96 6.96 0 010 8.373zM8 15A6.956 6.956 0 013.814 13.6l1.358-1.358c.025-.025.034-.057.055-.084C6.02 12.688 6.974 13 8 13a4.978 4.978 0 002.773-.84c.02.026.03.058.056.083l1.357 1.358A6.956 6.956 0 018 15zm-5.601-2.813a6.963 6.963 0 010-8.373l1.359 1.358c.024.025.057.035.084.056A4.97 4.97 0 003 8c0 1.027.31 1.98.842 2.773-.027.022-.06.031-.084.056l-1.36 1.358zm5.6-.187A4 4 0 118 4a4 4 0 010 8zM8 1c1.573 0 3.019.525 4.187 1.4l-1.357 1.358c-.025.025-.035.057-.056.084A4.979 4.979 0 008 3a4.979 4.979 0 00-2.773.842c-.021-.027-.03-.059-.055-.084L3.814 2.4A6.957 6.957 0 018 1zm0-1a8.001 8.001 0 10.003 16.002A8.001 8.001 0 008 0z"}))},fZe=pZe;var Ew={};$(Ew,{icon:()=>vZe});var pGt=k(L());var dZe=["title","titleId"];function UH(){return UH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function hZe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var gZe=function(t){var n=t.title,r=t.titleId,o=mZe(t,dZe);return a("svg",UH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8.13 1.229l5.5 4.47a1 1 0 01.37.777V14a1 1 0 01-1 1H2a1 1 0 01-1-1V6.476a1 1 0 01.37-.776l5.5-4.471a1 1 0 011.26 0zM13 6.476L7.5 2.005 2 6.475V14h11V6.476z"}))},vZe=gZe;var Cw={};$(Cw,{icon:()=>xZe});var dGt=k(L());var yZe=["title","titleId"];function $H(){return $H=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function wZe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var OZe=function(t){var n=t.title,r=t.titleId,o=bZe(t,yZe);return a("svg",$H({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M7.5 11.508L7.468 8H6.25V7h2.401l.03 3.508H9.8v1H7.5zm-.25-6.202a.83.83 0 01.207-.577c.137-.153.334-.229.59-.229.256 0 .454.076.594.23.14.152.209.345.209.576 0 .228-.07.417-.21.568-.14.15-.337.226-.593.226-.256 0-.453-.075-.59-.226a.81.81 0 01-.207-.568zM8 13A5 5 0 108 3a5 5 0 000 10zm0 1A6 6 0 118 2a6 6 0 010 12z"}))},xZe=OZe;var Aw={};$(Aw,{icon:()=>PZe});var hGt=k(L());var _Ze=["title","titleId"];function JH(){return JH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function jZe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var IZe=function(t){var n=t.title,r=t.titleId,o=SZe(t,_Ze);return a("svg",JH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6 5a2 2 0 11-4 0 2 2 0 014 0zm9-4a1 1 0 011 1v12a1 1 0 01-1 1H1a1 1 0 01-1-1V2a1 1 0 011-1zm-3.448 6.134l-3.76 2.769a.5.5 0 01-.436.077l-.087-.034-1.713-.87L1 11.8V14h14V9.751l-3.448-2.617zM15 2H1v8.635l4.28-2.558a.5.5 0 01.389-.054l.094.037 1.684.855 3.813-2.807a.5.5 0 01.52-.045l.079.05L15 8.495V2z"}))},PZe=IZe;var Mw={};$(Mw,{icon:()=>MZe});var vGt=k(L());var kZe=["title","titleId"];function GH(){return GH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function CZe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var AZe=function(t){var n=t.title,r=t.titleId,o=EZe(t,kZe);return a("svg",GH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M9 10.114l1.85-1.943a.52.52 0 01.77 0c.214.228.214.6 0 .829l-1.95 2.05a1.552 1.552 0 01-2.31 0L5.41 9a.617.617 0 010-.829.52.52 0 01.77 0L8 10.082V1.556C8 1.249 8.224 1 8.5 1s.5.249.5.556v8.558zM4.18 6a.993.993 0 00-.972.804l-1.189 6A.995.995 0 002.991 14h11.018a1 1 0 00.972-1.196l-1.19-6a.993.993 0 00-.97-.804H4.18zM6 5v1h5V5h1.825c.946 0 1.76.673 1.946 1.608l1.19 6A2 2 0 0114.016 15H2.984a1.992 1.992 0 01-1.945-2.392l1.19-6C2.414 5.673 3.229 5 4.174 5H6z"}))},MZe=AZe;var Tw={};$(Tw,{icon:()=>DZe});var bGt=k(L());var TZe=["title","titleId"];function XH(){return XH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function zZe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var LZe=function(t){var n=t.title,r=t.titleId,o=RZe(t,TZe);return a("svg",XH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M12 2H2v11h6v1H1V1h12v6h-1V2zM5 5h5.999V4H5v1zM3 5V4h1v1H3zm2 3V7h3v1H5zM3 8V7h1v1H3zm2 3v-1h2v1H5zm5.5-1.207L9.086 8.379l-.707.707L9.793 10.5l-1.414 1.414.707.707 1.414-1.414 1.414 1.414.707-.707-1.414-1.414 1.414-1.414-.707-.707L10.5 9.793zM3 11v-1h1v1H3zm7.5-5a4.5 4.5 0 110 9 4.5 4.5 0 010-9z"}))},DZe=LZe;var Rw={};$(Rw,{icon:()=>HZe});var OGt=k(L());var NZe=["title","titleId"];function KH(){return KH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function WZe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var BZe=function(t){var n=t.title,r=t.titleId,o=FZe(t,NZe);return a("svg",KH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M12 2H2v11h4v1H1V1h12v5h-1V2zM5 5h5.999V4H5v1zM3 5V4h1v1H3zm2 3V7h6v1H5zM3 8V7h1v1H3zm2 3v-1h3v1H5zm-2 0v-1h1v1H3zm4.502 1.41L12.913 7 15 9.087l-5.41 5.41L7 15l.502-2.59z"}))},HZe=BZe;var zw={};$(zw,{icon:()=>JZe});var _Gt=k(L());var VZe=["title","titleId"];function YH(){return YH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function UZe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var $Ze=function(t){var n=t.title,r=t.titleId,o=qZe(t,VZe);return a("svg",YH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M14.516 9H10.5a.5.5 0 010-1h4.016L13.11 5.948c-.171-.252-.137-.62.079-.821.217-.2.531-.159.703.092l2 2.916a.648.648 0 01.108.397.643.643 0 01-.108.332l-2 2.918A.478.478 0 0113.5 12a.457.457 0 01-.312-.127c-.216-.202-.25-.57-.079-.82L14.516 9zM3 15H1a1 1 0 01-1-1V2a1 1 0 011-1h7.8c.274 0 .537.113.726.312l2.2 2.428c.176.186.274.433.274.689V7h-1V5H8.5a.5.5 0 01-.5-.5V2H3v12h8v-4h1v4a1 1 0 01-1 1H3zm-1-1V2H1v12h1z"}))},JZe=$Ze;var Lw={};$(Lw,{icon:()=>QZe});var jGt=k(L());var GZe=["title","titleId"];function QH(){return QH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function KZe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var YZe=function(t){var n=t.title,r=t.titleId,o=XZe(t,GZe);return a("svg",QH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 8H4.915a1.5 1.5 0 110-1H8V2.5A1.5 1.5 0 019.5 1h2.585a1.5 1.5 0 110 1H9.5a.5.5 0 00-.5.5v10a.5.5 0 00.5.5h2.585a1.5 1.5 0 110 1H9.5A1.5 1.5 0 018 12.5V8zM3.5 3a1.5 1.5 0 110-3 1.5 1.5 0 010 3zm0 12a1.5 1.5 0 110-3 1.5 1.5 0 010 3zm10-6a1.5 1.5 0 110-3 1.5 1.5 0 010 3z"}))},QZe=YZe;var Dw={};$(Dw,{icon:()=>net});var PGt=k(L());var ZZe=["title","titleId"];function ZH(){return ZH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function tet(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ret=function(t){var n=t.title,r=t.titleId,o=eet(t,ZZe);return a("svg",ZH({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M12 2H2v11h6v1H1V1h12v6h-1V2zM5 5h5.999V4H5v1zM3 5V4h1v1H3zm2 3V7h3v1H5zM3 8V7h1v1H3zm2 3v-1h2v1H5zm5-1H8v1h2v2h1v-2h2v-1h-2V8h-1v2zm-7 1v-1h1v1H3zm7.5-5a4.5 4.5 0 110 9 4.5 4.5 0 010-9z"}))},net=ret;var Nw={};$(Nw,{icon:()=>uet});var EGt=k(L());var oet=["title","titleId"];function eV(){return eV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function aet(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var set=function(t){var n=t.title,r=t.titleId,o=iet(t,oet);return a("svg",eV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M12 2H2v11h6v1H1V1h12v6.839l-1-.707V2z"}),a("path",{d:"M8 11v-1H5v1h3zm0-3.055c0-.342.082-.664.23-.945H5v1h3v-.055zM5 5h5.999V4H5v1zM3 4v1h1V4H3zm0 3v1h1V7H3zm0 3v1h1v-1H3zm11.607.2l-4.32-3.055C9.727 6.75 9 7.204 9 7.945v6.108c0 .74.726 1.196 1.287.8l4.32-3.055c.524-.37.524-1.228 0-1.598z"}))},uet=set;var Fw={};$(Fw,{icon:()=>met});var AGt=k(L());var cet=["title","titleId"];function tV(){return tV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function fet(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var det=function(t){var n=t.title,r=t.titleId,o=pet(t,cet);return a("svg",tV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5 5h5.999V4H5v1zM3 5h1V4H3v1zm0 3h1V7H3v1zm6.022-1l-.15.333-.737-.078-.467-.05-.33.342A5.13 5.13 0 006.948 8H5V7h4.022zm-3.005 3L6 10.056l.306.411.399.533H5v-1h1.017zM3 11h1v-1H3v1z"}),a("path",{d:"M13 7.05l-.162-.359-.2-.447-.47-.11A5.019 5.019 0 0012 6.098V2H2v11h4.36c.157.354.355.69.59 1H1V1h12v6.05z"}),a("path",{d:"M11.004 7c.322 0 .646.036.966.109l.595 1.293 1.465-.152c.457.462.786 1.016.969 1.61l-.87 1.14.871 1.141a3.94 3.94 0 01-.387.859 4.058 4.058 0 01-.583.75l-1.465-.152-.594 1.292a4.37 4.37 0 01-1.941.001l-.594-1.293-1.466.152a3.954 3.954 0 01-.969-1.61l.87-1.14L7 9.86a3.947 3.947 0 01.97-1.61l1.466.152.593-1.292a4.37 4.37 0 01.975-.11zM11 12a1 1 0 10.002-1.998A1 1 0 0011 12z"}))},met=det;var Ww={};$(Ww,{icon:()=>bet});var TGt=k(L());var het=["title","titleId"];function rV(){return rV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function vet(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var yet=function(t){var n=t.title,r=t.titleId,o=get(t,het);return a("svg",rV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M10 13.999v-2.99h1V15H0V1h11v3.999h-1V2.001H1v11.998z"}),a("path",{d:"M4.5 10V9H11v1zM13 9.5l3-3-3-3z"}),a("path",{d:"M5.5 6.5v6l-3-3zM7 7V6h6.5v1z"}))},bet=yet;var Bw={};$(Bw,{icon:()=>jet});var zGt=k(L());var wet=["title","titleId"];function nV(){return nV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function xet(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var _et=function(t){var n=t.title,r=t.titleId,o=Oet(t,wet);return a("svg",nV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M15.363 14.658a.5.5 0 11-.713.7l-2.97-3.023a.5.5 0 01.001-.7A3.9 3.9 0 108.9 12.8a.5.5 0 110 .999 4.9 4.9 0 113.821-1.833l2.642 2.691zM3.094 13a.5.5 0 110 1H2.5A2.5 2.5 0 010 11.5v-9A2.5 2.5 0 012.5 0h9A2.5 2.5 0 0114 2.5v.599a.5.5 0 11-1 0V2.5A1.5 1.5 0 0011.5 1h-9A1.5 1.5 0 001 2.5v9A1.5 1.5 0 002.5 13h.594zM2.5 3a.5.5 0 110-1 .5.5 0 010 1zm2 0a.5.5 0 110-1 .5.5 0 010 1zm2 0a.5.5 0 110-1 .5.5 0 010 1zm-4 2a.5.5 0 110-1 .5.5 0 010 1zm2 0a.5.5 0 110-1 .5.5 0 010 1zm-2 1a.5.5 0 110 1 .5.5 0 010-1zm0 3a.5.5 0 110-1 .5.5 0 010 1zm6-6a.5.5 0 110-1 .5.5 0 010 1zm2 0a.5.5 0 110-1 .5.5 0 010 1zm-8 8a.5.5 0 110-1 .5.5 0 010 1z"}))},jet=_et;var Hw={};$(Hw,{icon:()=>Cet});var DGt=k(L());var Iet=["title","titleId"];function oV(){return oV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ket(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Eet=function(t){var n=t.title,r=t.titleId,o=Pet(t,Iet);return a("svg",oV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 13.25a5.25 5.25 0 100-10.5 5.25 5.25 0 000 10.5zM8 14A6 6 0 118 2a6 6 0 010 12z"}),a("path",{d:"M8 2a6 6 0 100 12V2z"}))},Cet=Eet;var Vw={};$(Vw,{icon:()=>zet});var FGt=k(L());var Aet=["title","titleId"];function iV(){return iV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Tet(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Ret=function(t){var n=t.title,r=t.titleId,o=Met(t,Aet);return a("svg",iV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M12 2a2 2 0 012 2v8a2 2 0 01-2 2H4a2 2 0 01-2-2V4a2 2 0 012-2h8zm-2 3H8v6h1V9.014h1c.298-.013 2 0 2-2.018 0-1.74-1.314-1.952-1.825-1.987L10 5zM6 5H5v6h1V5zm4 .984c.667 0 1 .336 1 1.008C11 7.664 10.667 8 10 8H9V5.984z"}))},zet=Ret;var qw={};$(qw,{icon:()=>Wet});var BGt=k(L());var Let=["title","titleId"];function aV(){return aV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Net(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Fet=function(t){var n=t.title,r=t.titleId,o=Det(t,Let);return a("svg",aV({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M0 3h16v11H0V3zm15 10V4H1v9h14zM2 5h2v1H2V5zm2 7v-1H2v1h2zm10-1v1h-2v-1h2zm-3 1v-1H5v1h6zM5 5h1v1H5V5zM3 7H2v1h1V7zm3 0h1v1H6V7zM3 9H2v1h1V9zm3 0h1v1H6V9zm2-4H7v1h1V5zM4 7h1v1H4V7zm5 0H8v1h1V7zm1 0h1v1h-1V7zM5 9H4v1h1V9zm3 0h1v1H8V9zm3 0h-1v1h1V9zM9 5h1v1H9V5zm3 0h-1v1h1V5zm1 0h1v1h-1V5zm1 2h-2v3h2V7z"}))},Wet=Fet;var Uw={};$(Uw,{icon:()=>Uet});var VGt=k(L());var Bet=["title","titleId"];function lV(){return lV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Vet(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var qet=function(t){var n=t.title,r=t.titleId,o=Het(t,Bet);return a("svg",lV({xmlns:"http://www.w3.org/2000/svg",width:16,height:10,viewBox:"0 0 16 10","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 9a5 5 0 110-8 5 5 0 110 8zm.75-.692a4 4 0 100-6.615A4.981 4.981 0 0110 5a4.981 4.981 0 01-1.25 3.308zM4.133 8V5.559h2.496v-.625H4.133V2.996h2.719v-.633H3.43V8h.703z"}))},Uet=qet;var $w={};$($w,{icon:()=>Ket});var UGt=k(L());var $et=["title","titleId"];function sV(){return sV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Get(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Xet=function(t){var n=t.title,r=t.titleId,o=Jet(t,$et);return a("svg",sV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7 7H3v2h4v2l3-3-3-3v2zM6 6V5a1 1 0 011.707-.707l3 3a1 1 0 010 1.414l-3 3A1 1 0 016 11v-1H3a1 1 0 01-1-1V7a1 1 0 011-1h3zm7.5-3a.5.5 0 01.5.5v9a.5.5 0 11-1 0v-9a.5.5 0 01.5-.5z"}))},Ket=Xet;var Jw={};$(Jw,{icon:()=>ttt});var JGt=k(L());var Yet=["title","titleId"];function uV(){return uV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Zet(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ett=function(t){var n=t.title,r=t.titleId,o=Qet(t,Yet);return a("svg",uV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M11.192 10.145l2.298-1.792c.259-.196.259-.509 0-.706l-2.298-1.792c-.256-.196-.256-.513 0-.708a.81.81 0 01.93 0l2.3 1.791c.772.59.77 1.537 0 2.124l-2.3 1.791a.81.81 0 01-.93 0c-.256-.195-.256-.512 0-.708zm-6.384-4.29L2.51 7.647c-.259.196-.259.509 0 .706l2.298 1.792c.256.196.256.513 0 .708a.81.81 0 01-.93 0l-2.3-1.791c-.772-.59-.77-1.537 0-2.124l2.3-1.791a.81.81 0 01.93 0c.256.195.256.512 0 .708zM6.5 6h3a.5.5 0 010 1h-3a.5.5 0 010-1zm0 3h3a.5.5 0 010 1h-3a.5.5 0 010-1z"}))},ttt=ett;var Gw={};$(Gw,{icon:()=>att});var XGt=k(L());var rtt=["title","titleId"];function cV(){return cV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ott(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var itt=function(t){var n=t.title,r=t.titleId,o=ntt(t,rtt);return a("svg",cV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5 12a4 4 0 100-8 4 4 0 000 8zm0 1A5 5 0 115 3a5 5 0 010 10zm6-1a4 4 0 100-8 4 4 0 000 8zm0 1a5 5 0 110-10 5 5 0 010 10z"}))},att=itt;var Xw={};$(Xw,{icon:()=>ptt});var YGt=k(L());var ltt=["title","titleId"];function pV(){return pV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function utt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ctt=function(t){var n=t.title,r=t.titleId,o=stt(t,ltt);return a("svg",pV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 4a5 5 0 110 8 5 5 0 110-8zm-.75.692a4 4 0 100 6.615A4.981 4.981 0 016 8c0-1.268.472-2.426 1.25-3.308zM11.348 11l2.078-5.637h-.739l-1.656 4.727h-.062L9.313 5.363h-.739L10.652 11h.696z"}))},ptt=ctt;var Kw={};$(Kw,{icon:()=>gtt});var ZGt=k(L());var ftt=["title","titleId"];function fV(){return fV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function mtt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var htt=function(t){var n=t.title,r=t.titleId,o=dtt(t,ftt);return a("svg",fV({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M14 11.42V4.58L8 1.152 2 4.58v6.84l6 3.428 6-3.428zM8 16l7-4V4L8 0 1 4v8l7 4zM8 4.607l3 1.714V9.68l-3 1.714-3-1.714V6.32l3-1.714zm4 1.134v4.518l-4 2.286-4-2.286V5.741l4-2.286 4 2.286z"}))},gtt=htt;var Yw={};$(Yw,{icon:()=>Ott});var tXt=k(L());var vtt=["title","titleId"];function dV(){return dV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function btt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var wtt=function(t){var n=t.title,r=t.titleId,o=ytt(t,vtt);return a("svg",dV({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M14 5.151v6.269l-5.5 3.142V8.29L14 5.151zm-.508-.861L8 1.152 2.508 4.29 8 7.424l5.492-3.134zM2 5.151l5.5 3.14v6.272L2 11.42V5.15zM15 12l-7 4-7-4V4l7-4 7 4v8z"}))},Ott=wtt;var Qw={};$(Qw,{icon:()=>Itt});var nXt=k(L());var xtt=["title","titleId"];function mV(){return mV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Stt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var jtt=function(t){var n=t.title,r=t.titleId,o=_tt(t,xtt);return a("svg",mV({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.276 1.053a.5.5 0 01.448 0l6 3a.5.5 0 010 .894l-6 3a.5.5 0 01-.448 0l-6-3a.5.5 0 010-.894l6-3zM2.618 4.5L7.5 6.941 12.382 4.5 7.5 2.059 2.618 4.5z"}),a("path",{d:"M1.053 7.276a.5.5 0 01.67-.223L7.5 9.94l5.776-2.888a.5.5 0 11.448.894l-6 3a.5.5 0 01-.448 0l-6-3a.5.5 0 01-.223-.67z"}),a("path",{d:"M1.724 10.053a.5.5 0 10-.448.894l6 3a.5.5 0 00.448 0l6-3a.5.5 0 10-.448-.894L7.5 12.94l-5.776-2.888z"}))},Itt=jtt;var Zw={};$(Zw,{icon:()=>Att});var iXt=k(L());var Ptt=["title","titleId"];function hV(){return hV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ett(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Ctt=function(t){var n=t.title,r=t.titleId,o=ktt(t,Ptt);return a("svg",hV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M5 3l3 9H7L6 9H3l-1 3H1l3-9h1zm-.5 1.5L5.667 8H3.333L4.5 4.5zm7.99 1.647C12.16 6.005 11.76 6 11.5 6c-.359 0-1.022.175-1.632.838l-.736-.676C9.929 5.294 10.859 5 11.5 5h.016c.25 0 .836 0 1.369.228.281.12.568.313.782.617.216.307.333.693.333 1.155v5h-1v-.354a2.101 2.101 0 01-.064.038c-.554.317-1.166.316-1.42.316h-.032c-.25 0-.836 0-1.368-.228a1.81 1.81 0 01-.783-.617C9.117 10.848 9 10.462 9 10c0-.462.117-.848.333-1.155.214-.304.5-.496.783-.617C10.648 8 11.233 8 11.484 8h.016c.258 0 .69-.003 1.05-.106a.889.889 0 00.364-.179c.053-.05.086-.108.086-.215V7c0-.288-.07-.465-.151-.58a.814.814 0 00-.358-.273zM13 8.8c-.06.022-.118.04-.175.057C12.32 9 11.762 9 11.513 9H11.5c-.259 0-.66.005-.99.147a.814.814 0 00-.359.274c-.08.114-.151.291-.151.579s.07.465.151.58a.813.813 0 00.358.273c.331.142.732.147.991.147.257 0 .63-.008.94-.184.255-.146.56-.463.56-1.316v-.701z"}))},Att=Ctt;var eO={};$(eO,{icon:()=>Ltt});var lXt=k(L());var Mtt=["title","titleId"];function gV(){return gV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Rtt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ztt=function(t){var n=t.title,r=t.titleId,o=Ttt(t,Mtt);return a("svg",gV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M12.707 4.707a1 1 0 11-1.414-1.414l2-2a1 1 0 111.414 1.414l-2 2zm-6.414 5a1 1 0 001.414 0l2-2a1 1 0 10-1.414-1.414l-2 2a1 1 0 000 1.414zm-5 5a1 1 0 001.414 0l2-2a1 1 0 10-1.414-1.414l-2 2a1 1 0 000 1.414z"}))},Ltt=ztt;var tO={};$(tO,{icon:()=>Btt});var uXt=k(L());var Dtt=["title","titleId"];function vV(){return vV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ftt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Wtt=function(t){var n=t.title,r=t.titleId,o=Ntt(t,Dtt);return a("svg",vV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M13.5 3a1.5 1.5 0 100-3 1.5 1.5 0 000 3zM11 5.5a1.5 1.5 0 11-3 0 1.5 1.5 0 013 0zM5.5 11a1.5 1.5 0 100-3 1.5 1.5 0 000 3zm-4 4a1.5 1.5 0 100-3 1.5 1.5 0 000 3z"}))},Btt=Wtt;var rO={};$(rO,{icon:()=>$tt});var pXt=k(L());var Htt=["title","titleId"];function yV(){return yV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function qtt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Utt=function(t){var n=t.title,r=t.titleId,o=Vtt(t,Htt);return a("svg",yV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M1.293 14.707a1 1 0 001.414 0l12-12a1 1 0 10-1.414-1.414l-12 12a1 1 0 000 1.414z"}))},$tt=Utt;var nO={};$(nO,{icon:()=>Ytt});var dXt=k(L());var Jtt=["title","titleId"];function bV(){return bV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Xtt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Ktt=function(t){var n=t.title,r=t.titleId,o=Gtt(t,Jtt);return a("svg",bV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.66 3.803a.5.5 0 11-.706-.707L9.268.78c1.187-1.187 3.242-1 4.596.354s1.54 3.409.354 4.596l-3.536 3.536c-1.187 1.187-3.242 1-4.596-.354a.5.5 0 11.707-.707c.99.99 2.417 1.119 3.182.354l3.536-3.536c.765-.765.635-2.193-.354-3.182-.99-.99-2.417-1.119-3.182-.354L7.661 3.803zm-.32 7.392a.5.5 0 11.707.707l-2.315 2.314c-1.187 1.188-3.242 1-4.596-.353-1.354-1.354-1.54-3.41-.353-4.596L4.318 5.73c1.187-1.187 3.242-1 4.596.354a.5.5 0 01-.707.707c-.989-.99-2.416-1.12-3.182-.354L1.49 9.974c-.766.765-.636 2.193.353 3.182.99.989 2.417 1.119 3.182.353l2.315-2.314z"}))},Ytt=Ktt;var oO={};$(oO,{icon:()=>rrt});var hXt=k(L());var Qtt=["title","titleId"];function wV(){return wV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ert(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var trt=function(t){var n=t.title,r=t.titleId,o=Ztt(t,Qtt);return a("svg",wV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M2 4V3h2v1H2zm4 0V3h8v1H6zm0 3V6h8v1H6zm0 3V9h8v1H6zM2 7V6h2v1H2zm0 3V9h2v1H2zm4 3v-1h8v1H6zm-4 0v-1h2v1H2z"}))},rrt=trt;var iO={};$(iO,{icon:()=>lrt});var vXt=k(L());var nrt=["title","titleId"];function OV(){return OV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function irt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var art=function(t){var n=t.title,r=t.titleId,o=ort(t,nrt);return a("svg",OV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M11 11H9v1h2v2h1v-2h2v-1h-2V9h-1v2zM7.758 9a4.5 4.5 0 11-.502 4H6v-1h1.027a4.548 4.548 0 01.23-2H6V9h1.758zM2 4V3h2v1H2zm4 0V3h8v1H6zm0 3V6h8v1H6zM2 7V6h2v1H2zm0 3V9h2v1H2zm0 3v-1h2v1H2z"}))},lrt=art;var aO={};$(aO,{icon:()=>frt});var bXt=k(L());var srt=["title","titleId"];function xV(){return xV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function crt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var prt=function(t){var n=t.title,r=t.titleId,o=urt(t,srt);return a("svg",xV({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M4 5v-.8C4 1.88 5.79 0 8 0s4 1.88 4 4.2V5h1.143c.473 0 .857.448.857 1v9c0 .552-.384 1-.857 1H2.857C2.384 16 2 15.552 2 15V6c0-.552.384-1 .857-1H4zM3 15h10V6H3v9zm5.998-3.706L9.5 12.5h-3l.502-1.206A1.644 1.644 0 016.5 10.1c0-.883.672-1.6 1.5-1.6s1.5.717 1.5 1.6c0 .475-.194.901-.502 1.194zM11 4.36C11 2.504 9.657 1 8 1S5 2.504 5 4.36V5h6v-.64z"}))},frt=prt;var lO={};$(lO,{icon:()=>vrt});var OXt=k(L());var drt=["title","titleId"];function _V(){return _V=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function hrt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var grt=function(t){var n=t.title,r=t.titleId,o=mrt(t,drt);return a("svg",_V({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M11.143 5c.473 0 .857.448.857 1v9c0 .552-.384 1-.857 1H.857C.384 16 0 15.552 0 15V6c0-.552.384-1 .857-1H8v-.8C8 1.88 9.79 0 12 0s4 1.88 4 4.2V5h-1v-.64C15 2.504 13.657 1 12 1S9 2.504 9 4.36V5h2.143zM1 15h10V6H1v9zm5.998-3.706L7.5 12.5h-3l.502-1.206A1.644 1.644 0 014.5 10.1c0-.883.672-1.6 1.5-1.6s1.5.717 1.5 1.6c0 .475-.194.901-.502 1.194z"}))},vrt=grt;var sO={};$(sO,{icon:()=>xrt});var _Xt=k(L());var yrt=["title","titleId"];function SV(){return SV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function wrt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Ort=function(t){var n=t.title,r=t.titleId,o=brt(t,yrt);return a("svg",SV({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"none"},a("path",{fill:"#C4373A",d:"M0 31.806h32V.776H0z"}),a("path",{fill:"#FFF",d:"M19.448 12.508l-8.986 3.86 8.986 3.883v-7.743zm-11.304 4.73l-2.094-.863 2.094-.931 17.749-7.741v2.062l-4.654 1.99v9.25l4.654 2.01v1.968L8.143 17.24z"})))},xrt=Ort;var uO={};$(uO,{icon:()=>Prt});var jXt=k(L());var _rt=["title","titleId"];function jV(){return jV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function jrt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Irt=function(t){var n=t.title,r=t.titleId,o=Srt(t,_rt),i=Lr("logo_apache");return a("svg",jV({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("defs",null,a("linearGradient",{id:i("a"),x1:"21.902%",x2:"141.879%",y1:"63.905%",y2:"20.213%"},a("stop",{offset:"0%",stopColor:"#F69923"}),a("stop",{offset:"31.23%",stopColor:"#F79A23"}),a("stop",{offset:"83.83%",stopColor:"#E97826"})),a("linearGradient",{id:i("b"),x1:"-217.651%",x2:"74.743%",y1:"177.127%",y2:"36.665%"},a("stop",{offset:"32.33%",stopColor:"#9E2064"}),a("stop",{offset:"63.02%",stopColor:"#C92037"}),a("stop",{offset:"75.14%",stopColor:"#CD2335"}),a("stop",{offset:"100%",stopColor:"#E97826"})),a("linearGradient",{id:i("c"),x1:"-80.044%",x2:"146.24%",y1:"73.574%",y2:"31.539%"},a("stop",{offset:"32.33%",stopColor:"#9E2064"}),a("stop",{offset:"63.02%",stopColor:"#C92037"}),a("stop",{offset:"75.14%",stopColor:"#CD2335"}),a("stop",{offset:"100%",stopColor:"#E97826"})),a("linearGradient",{id:i("d"),x1:"-18.316%",x2:"165.002%",y1:"52.497%",y2:"41.656%"},a("stop",{offset:"0%",stopColor:"#282662"}),a("stop",{offset:"9.548%",stopColor:"#662E8D"}),a("stop",{offset:"78.82%",stopColor:"#9F2064"}),a("stop",{offset:"94.87%",stopColor:"#CD2032"})),a("linearGradient",{id:i("e"),x1:"-109.701%",x2:"64.617%",y1:"463.715%",y2:"17.19%"},a("stop",{offset:"32.33%",stopColor:"#9E2064"}),a("stop",{offset:"63.02%",stopColor:"#C92037"}),a("stop",{offset:"75.14%",stopColor:"#CD2335"}),a("stop",{offset:"100%",stopColor:"#E97826"})),a("linearGradient",{id:i("f"),x1:"-34.88%",x2:"110.599%",y1:"130.522%",y2:"-9.118%"},a("stop",{offset:"32.33%",stopColor:"#9E2064"}),a("stop",{offset:"63.02%",stopColor:"#C92037"}),a("stop",{offset:"75.14%",stopColor:"#CD2335"}),a("stop",{offset:"100%",stopColor:"#E97826"})),a("linearGradient",{id:i("g"),x1:"-13.673%",x2:"117.858%",y1:"192.564%",y2:"-136.906%"},a("stop",{offset:"0%",stopColor:"#282662"}),a("stop",{offset:"9.548%",stopColor:"#662E8D"}),a("stop",{offset:"78.82%",stopColor:"#9F2064"}),a("stop",{offset:"94.87%",stopColor:"#CD2032"}))),a("g",{fill:"none"},a("path",{fill:"url(#".concat(i("a"),")"),d:"M13.628.18c-.498.293-1.332 1.134-2.328 2.348v.074l.871 1.613.044.03c.641-.914 1.289-1.742 1.948-2.446.05-.056.075-.08.075-.08-.025.024-.05.055-.075.08-.211.237-.859.984-1.83 2.478l.112.025s2.273-.224 3.368-.41l.062-.057c.35-1.955-.342-2.851-.342-2.851S14.661-.423 13.628.18z",transform:"translate(8)"}),a("path",{fill:"url(#".concat(i("b"),")"),d:"M9.525 8.697c.28-.516.56-1.027.84-1.519.293-.51.592-1.008.897-1.488a.397.397 0 00.05-.087c.299-.473.598-.921.903-1.357L11.3 2.52c-.069.081-.137.168-.206.256-.261.33-.535.678-.815 1.052a51.783 51.783 0 00-1.893 2.708c-.261.405-.53.816-.79 1.245l-.032.05V7.9l1.14 2.26.05.019c.255-.498.51-.996.771-1.482z",transform:"translate(8)"}),a("path",{fill:"url(#".concat(i("c"),")"),d:"M4.563 19.76c.206-.535.424-1.077.642-1.625.211-.523.423-1.052.647-1.58.218-.53.448-1.06.679-1.595.236-.541.473-1.083.716-1.618.242-.53.485-1.059.734-1.582.087-.186.18-.38.274-.566.156-.324.318-.648.473-.965.007-.019.02-.031.025-.05L7.564 7.832l-.056.093c-.274.455-.554.915-.822 1.389a54.535 54.535 0 00-1.45 2.714c-.044.087-.081.168-.125.255a32.15 32.15 0 00-.703 1.544c-.237.56-.448 1.096-.635 1.606-.125.337-.23.654-.336.965-.081.262-.162.53-.237.791-.18.623-.33 1.239-.454 1.862l.018.074 1.14 2.266.037.02c.155-.424.317-.848.485-1.283.044-.125.094-.243.137-.368z",transform:"translate(8)"}),a("path",{fill:"url(#".concat(i("d"),")"),d:"M2.733 19.132a18.84 18.84 0 00-.311 2.253c0 .025-.006.05-.006.081-.374-.598-1.37-1.177-1.37-1.177.716 1.034 1.258 2.061 1.338 3.07-.38.08-.902-.038-1.512-.255.628.578 1.102.74 1.288.784-.579.037-1.183.436-1.793.89.89-.36 1.607-.504 2.123-.392-.815 2.31-1.63 4.862-2.453 7.564.25-.075.399-.243.486-.473.143-.492 1.114-3.704 2.627-7.931.044-.119.087-.243.13-.362.013-.03.026-.068.038-.1.162-.441.324-.896.498-1.356.038-.106.081-.212.119-.318v-.006l-1.19-2.353c0 .03-.006.056-.012.08z",transform:"translate(8)"}),a("path",{fill:"url(#".concat(i("e"),")"),d:"M12.333 4.283c-.268.411-.56.878-.878 1.407-.018.025-.03.056-.05.081a62.538 62.538 0 00-1.687 3.05c-.249.48-.504.984-.765 1.526l.056.025 2.895-.311.068-.05c.878-.405 1.27-.772 1.65-1.301.1-.143.205-.3.305-.455.311-.485.616-1.015.884-1.544.261-.51.492-1.02.672-1.475a6.56 6.56 0 00.398-1.395c-1.17.206-2.608.399-3.548.442z",transform:"translate(8)"}),a("path",{fill:"url(#".concat(i("f"),")"),d:"M8.84 10.59c-.1.212-.205.43-.31.647-.113.237-.231.486-.343.735-.056.124-.119.255-.175.38-.18.386-.354.784-.541 1.195a107.035 107.035 0 00-1.357 3.194c-.218.529-.436 1.077-.654 1.637-.2.504-.399 1.015-.598 1.55-.012.025-.018.05-.03.075-.2.53-.394 1.068-.6 1.622-.006.012-.017.045-.023.057l.043.01.866-.094.048-.02c-.018-.006-.03-.03-.048-.037 1.145-.143 2.67-1.002 3.66-2.06.455-.486.866-1.065 1.252-1.738.286-.504.547-1.058.803-1.675.224-.535.435-1.12.64-1.749a3.457 3.457 0 01-.896.311 8.977 8.977 0 01-.18.038c-.062.012-.125.018-.18.03 1.07-.41 1.743-1.207 2.234-2.178-.28.193-.74.442-1.288.566a2.52 2.52 0 01-.23.044c-.02 0-.038.006-.057.006.374-.155.685-.33.959-.535.056-.044.112-.087.168-.137.081-.075.162-.15.237-.224.05-.05.093-.1.143-.156.106-.124.205-.261.299-.41.03-.044.056-.094.087-.138.037-.068.068-.137.1-.205.149-.3.267-.567.36-.803.05-.119.088-.224.125-.33.013-.038.025-.081.044-.119.037-.112.068-.211.093-.305.037-.13.056-.236.069-.311a1.077 1.077 0 01-.125.087c-.324.193-.878.368-1.326.448l.884-.1-.884.1c-.062.013-.106.02-.156.032.004-.005-.994.101-2.995.316a2.313 2.313 0 00-.118.244z",transform:"translate(8)"}),a("path",{fill:"url(#".concat(i("g"),")"),d:"M4.115 21.914c-.155.43-.317.872-.473 1.32 0 .006-.006.013-.006.019-.025.062-.044.124-.069.193-.106.305-.199.573-.41 1.195.348.162.628.58.896 1.059a1.876 1.876 0 00-.623-1.314c1.725.075 3.213-.361 3.979-1.619.068-.112.13-.23.186-.355-.348.442-.784.63-1.593.586h-.007.007c1.201-.536 1.799-1.052 2.334-1.905.125-.206.25-.424.374-.667-1.052 1.078-2.266 1.383-3.543 1.152l-.958.106c-.032.069-.063.15-.094.23z",transform:"translate(8)"})))},Prt=Irt;var cO={};$(cO,{icon:()=>Mrt});var kXt=k(L());var krt=["title","titleId"];function IV(){return IV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Crt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Art=function(t){var n=t.title,r=t.titleId,o=Ert(t,krt);return a("svg",IV({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fill:"#0080D5",d:"M19.5.938a7.002 7.002 0 00-7 0l-8 4.619A7 7 0 001 11.62v9.237a7 7 0 003.5 6.062l7.5 4.33V17.979a7 7 0 013.5-6.062L27 5.276 19.5.939z"}),a("path",{className:"euiIcon__fillNegative",d:"M19.5.938a7.002 7.002 0 00-7 0L5 5.277l11 6.35 11-6.35-7.5-4.34z"}),a("path",{fill:"#FA744E",d:"M28.435 7.76l-10.026 5.79a6.994 6.994 0 011.59 4.428v13.27l7.5-4.33a7 7 0 003.5-6.061v-9.238a6.992 6.992 0 00-1.586-4.422l-.978.564z"}))},Mrt=Art;var pO={};$(pO,{icon:()=>Drt});var CXt=k(L());var Trt=["title","titleId"];function PV(){return PV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function zrt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Lrt=function(t){var n=t.title,r=t.titleId,o=Rrt(t,Trt);return a("svg",PV({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"none",fillRule:"evenodd"},a("path",{className:"euiIcon__fillNegative",d:"M9.019 13.878c0 .39.042.705.117.936.085.232.191.484.34.758a.454.454 0 01.075.242c0 .105-.064.21-.202.315l-.67.442a.514.514 0 01-.277.095c-.107 0-.213-.053-.32-.148a3.258 3.258 0 01-.383-.494 8.109 8.109 0 01-.33-.62c-.83.967-1.873 1.45-3.128 1.45-.894 0-1.607-.252-2.129-.756-.521-.505-.787-1.178-.787-2.02 0-.894.319-1.62.968-2.166.65-.547 1.511-.82 2.607-.82.362 0 .735.03 1.128.083.394.053.799.137 1.224.232v-.768c0-.8-.17-1.357-.5-1.683-.34-.326-.915-.484-1.735-.484-.372 0-.755.043-1.149.137-.394.095-.777.21-1.15.358-.17.073-.297.115-.372.136a.66.66 0 01-.17.032c-.149 0-.223-.105-.223-.326v-.515c0-.169.02-.295.074-.368a.796.796 0 01.298-.221c.373-.19.82-.347 1.34-.474a6.524 6.524 0 011.661-.2c1.266 0 2.192.285 2.788.852.586.568.884 1.43.884 2.588v3.407h.02zm-4.32 1.6c.35 0 .712-.064 1.095-.19a2.373 2.373 0 001.011-.673c.17-.2.298-.421.362-.673.064-.253.107-.558.107-.916v-.441a8.982 8.982 0 00-.98-.179 8.113 8.113 0 00-1-.063c-.713 0-1.234.137-1.586.42-.35.285-.521.684-.521 1.21 0 .494.128.862.394 1.115.255.263.628.39 1.117.39zm8.545 1.135c-.192 0-.32-.032-.405-.105-.085-.063-.16-.21-.223-.41l-2.501-8.13c-.064-.21-.096-.347-.096-.421 0-.168.085-.263.256-.263h1.043c.202 0 .34.032.415.105.085.063.149.21.212.41l1.788 6.963 1.66-6.963c.054-.21.117-.347.203-.41.085-.063.234-.105.425-.105h.852c.202 0 .34.032.425.105.085.063.16.21.203.41l1.681 7.047 1.841-7.047c.064-.21.138-.347.213-.41.085-.063.223-.105.415-.105h.99c.17 0 .266.084.266.263 0 .052-.011.105-.022.168-.01.063-.032.147-.074.263l-2.565 8.13c-.064.21-.138.347-.223.41-.085.063-.224.105-.405.105h-.915c-.202 0-.34-.031-.426-.105-.085-.073-.16-.21-.202-.42l-1.65-6.784-1.638 6.773c-.053.21-.117.347-.202.42-.086.074-.235.106-.426.106h-.915zm13.675.284a7.122 7.122 0 01-1.64-.19c-.531-.126-.946-.262-1.223-.42-.17-.095-.287-.2-.33-.295a.735.735 0 01-.064-.294v-.536c0-.221.085-.327.245-.327a.61.61 0 01.192.032c.063.021.16.063.266.105.361.158.755.284 1.17.368.426.084.84.127 1.267.127.67 0 1.192-.116 1.553-.348a1.13 1.13 0 00.554-.999c0-.294-.096-.536-.288-.736-.191-.2-.553-.379-1.074-.547l-1.544-.473c-.776-.242-1.351-.6-1.702-1.073a2.487 2.487 0 01-.532-1.525c0-.442.095-.83.287-1.167.192-.337.447-.631.766-.863.32-.242.681-.42 1.107-.547a4.69 4.69 0 011.34-.178c.235 0 .48.01.714.042.245.031.468.073.692.115.212.053.415.105.606.169.192.063.34.126.447.189a.918.918 0 01.32.263c.063.084.095.2.095.347v.494c0 .221-.085.337-.245.337-.085 0-.223-.042-.404-.126-.607-.274-1.288-.41-2.043-.41-.607 0-1.086.094-1.416.294-.33.2-.5.505-.5.936 0 .294.107.547.32.747.212.2.606.4 1.17.578l1.511.473c.766.242 1.32.579 1.65 1.01.33.431.49.926.49 1.473 0 .452-.096.862-.277 1.22a2.836 2.836 0 01-.777.925c-.33.263-.724.452-1.182.59-.478.146-.979.22-1.521.22z"}),a("g",{fill:"#F90"},a("path",{d:"M28.93 22.009c-3.501 2.556-8.588 3.912-12.962 3.912-6.13 0-11.653-2.24-15.825-5.963-.33-.295-.032-.694.362-.463 4.512 2.587 10.078 4.155 15.836 4.155 3.884 0 8.151-.8 12.078-2.44.586-.263 1.086.378.511.799z"}),a("path",{d:"M30.388 20.368c-.447-.568-2.958-.273-4.097-.137-.34.042-.394-.252-.085-.473 2-1.388 5.289-.989 5.672-.526.383.474-.107 3.723-1.98 5.28-.287.242-.564.116-.436-.2.426-1.041 1.373-3.386.926-3.944z"}))))},Drt=Lrt;var fO={};$(fO,{icon:()=>Hrt});var MXt=k(L());var Nrt=["title","titleId"];function kV(){return kV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Wrt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Brt=function(t){var n=t.title,r=t.titleId,o=Frt(t,Nrt);return a("svg",kV({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fillRule:"evenodd"},a("path",{fillRule:"nonzero",d:"M9.019 13.878c0 .39.042.705.117.936.085.232.191.484.34.758a.454.454 0 01.075.242c0 .105-.064.21-.202.315l-.67.442a.514.514 0 01-.277.095c-.107 0-.213-.053-.32-.148a3.258 3.258 0 01-.383-.494 8.109 8.109 0 01-.33-.62c-.83.967-1.873 1.45-3.128 1.45-.894 0-1.607-.252-2.129-.756-.521-.505-.787-1.178-.787-2.02 0-.894.319-1.62.968-2.166.65-.547 1.511-.82 2.607-.82.362 0 .735.03 1.128.083.394.053.799.137 1.224.232v-.768c0-.8-.17-1.357-.5-1.683-.34-.326-.915-.484-1.735-.484-.372 0-.755.043-1.149.137-.394.095-.777.21-1.15.358-.17.073-.297.115-.372.136a.66.66 0 01-.17.032c-.149 0-.223-.105-.223-.326v-.515c0-.169.02-.295.074-.368a.796.796 0 01.298-.221c.373-.19.82-.347 1.34-.474a6.524 6.524 0 011.661-.2c1.266 0 2.192.285 2.788.852.586.568.884 1.43.884 2.588v3.407h.02zm-4.32 1.6c.35 0 .712-.064 1.095-.19a2.373 2.373 0 001.011-.673c.17-.2.298-.421.362-.673.064-.253.107-.558.107-.916v-.441a8.982 8.982 0 00-.98-.179 8.113 8.113 0 00-1-.063c-.713 0-1.234.137-1.586.42-.35.285-.521.684-.521 1.21 0 .494.128.862.394 1.115.255.263.628.39 1.117.39zm8.545 1.135c-.192 0-.32-.032-.405-.105-.085-.063-.16-.21-.223-.41l-2.501-8.13c-.064-.21-.096-.347-.096-.421 0-.168.085-.263.256-.263h1.043c.202 0 .34.032.415.105.085.063.149.21.212.41l1.788 6.963 1.66-6.963c.054-.21.117-.347.203-.41.085-.063.234-.105.425-.105h.852c.202 0 .34.032.425.105.085.063.16.21.203.41l1.681 7.047 1.841-7.047c.064-.21.138-.347.213-.41.085-.063.223-.105.415-.105h.99c.17 0 .266.084.266.263 0 .052-.011.105-.022.168-.01.063-.032.147-.074.263l-2.565 8.13c-.064.21-.138.347-.223.41-.085.063-.224.105-.405.105h-.915c-.202 0-.34-.031-.426-.105-.085-.073-.16-.21-.202-.42l-1.65-6.784-1.638 6.773c-.053.21-.117.347-.202.42-.086.074-.235.106-.426.106h-.915zm13.675.284a7.122 7.122 0 01-1.64-.19c-.531-.126-.946-.262-1.223-.42-.17-.095-.287-.2-.33-.295a.735.735 0 01-.064-.294v-.536c0-.221.085-.327.245-.327a.61.61 0 01.192.032c.063.021.16.063.266.105.361.158.755.284 1.17.368.426.084.84.127 1.267.127.67 0 1.192-.116 1.553-.348a1.13 1.13 0 00.554-.999c0-.294-.096-.536-.288-.736-.191-.2-.553-.379-1.074-.547l-1.544-.473c-.776-.242-1.351-.6-1.702-1.073a2.487 2.487 0 01-.532-1.525c0-.442.095-.83.287-1.167.192-.337.447-.631.766-.863.32-.242.681-.42 1.107-.547a4.69 4.69 0 011.34-.178c.235 0 .48.01.714.042.245.031.468.073.692.115.212.053.415.105.606.169.192.063.34.126.447.189a.918.918 0 01.32.263c.063.084.095.2.095.347v.494c0 .221-.085.337-.245.337-.085 0-.223-.042-.404-.126-.607-.274-1.288-.41-2.043-.41-.607 0-1.086.094-1.416.294-.33.2-.5.505-.5.936 0 .294.107.547.32.747.212.2.606.4 1.17.578l1.511.473c.766.242 1.32.579 1.65 1.01.33.431.49.926.49 1.473 0 .452-.096.862-.277 1.22a2.836 2.836 0 01-.777.925c-.33.263-.724.452-1.182.59-.478.146-.979.22-1.521.22z"}),a("path",{d:"M28.93 22.009c-3.501 2.556-8.588 3.912-12.962 3.912-6.13 0-11.653-2.24-15.825-5.963-.33-.295-.032-.694.362-.463 4.512 2.587 10.078 4.155 15.836 4.155 3.884 0 8.151-.8 12.078-2.44.586-.263 1.086.378.511.799z"}),a("path",{d:"M30.388 20.368c-.447-.568-2.958-.273-4.097-.137-.34.042-.394-.252-.085-.473 2-1.388 5.289-.989 5.672-.526.383.474-.107 3.723-1.98 5.28-.287.242-.564.116-.436-.2.426-1.041 1.373-3.386.926-3.944z"})))},Hrt=Brt;var dO={};$(dO,{icon:()=>Jrt});var RXt=k(L());var Vrt=["title","titleId"];function EV(){return EV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Urt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var $rt=function(t){var n=t.title,r=t.titleId,o=qrt(t,Vrt);return a("svg",EV({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fill:"#0072C6",d:"M17.448 4l-9.414 8.01L0 26.157h7.243L17.448 4zM18.7 5.874l-4.018 11.11 7.704 9.497L7.441 29h24.494L18.7 5.874z"}))},Jrt=$rt;var mO={};$(mO,{icon:()=>Qrt});var LXt=k(L());var Grt=["title","titleId"];function CV(){return CV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Krt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Yrt=function(t){var n=t.title,r=t.titleId,o=Xrt(t,Grt);return a("svg",CV({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M17.448 4l-9.414 8.01L0 26.157h7.243L17.448 4zM18.7 5.874l-4.018 11.11 7.704 9.497L7.441 29h24.494L18.7 5.874z"}))},Qrt=Yrt;var hO={};$(hO,{icon:()=>nnt});var NXt=k(L());var Zrt=["title","titleId"];function AV(){return AV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function tnt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var rnt=function(t){var n=t.title,r=t.titleId,o=ent(t,Zrt);return a("svg",AV({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fill:"#0080D5",d:"M15 20H4V0h11c5.522 0 10 4.478 10 10s-4.478 10-10 10"}),a("path",{fill:"#00C2B3",d:"M26.702 15.624C24.6 19.979 20.152 23 15 23H4v9h15c5.522 0 10-4.478 10-10a9.952 9.952 0 00-2.298-6.376"}),a("path",{className:"euiIcon__fillNegative",d:"M24.338 13.554A9.942 9.942 0 0019 12H4v8h11c4.27 0 7.903-2.68 9.338-6.446"}))},nnt=rnt;var gO={};$(gO,{icon:()=>snt});var WXt=k(L());var ont=["title","titleId"];function MV(){return MV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ant(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var lnt=function(t){var n=t.title,r=t.titleId,o=int(t,ont);return a("svg",MV({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"none",fillRule:"evenodd"},a("path",{fill:"#00BFB3",d:"M0 22c0 5.522 4.478 10 10 10V12C4.478 12 0 16.478 0 22"}),a("path",{className:"euiIcon__fillNegative",d:"M10 12v10h10c0-5.522-4.478-10-10-10"}),a("path",{fill:"#F04E98",d:"M10 0v9c7.168 0 13 5.832 13 13h9C32 9.85 22.15 0 10 0"})))},snt=lnt;var vO={};$(vO,{icon:()=>dnt});var HXt=k(L());var unt=["title","titleId"];function TV(){return TV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function pnt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var fnt=function(t){var n=t.title,r=t.titleId,o=cnt(t,unt);return a("svg",TV({width:32,height:32,viewBox:"0 0 32 32",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M25.471 27.56c-1.06-.567-1.676-1.206-1.811-1.902-.13-.673.17-1.421.918-2.288a11.29 11.29 0 002.773-7.42A11.324 11.324 0 0016.042 4.64l-.05.001h-.05A11.324 11.324 0 004.632 15.949a11.291 11.291 0 002.774 7.422c.753.872 1.047 1.591.928 2.257-.13.694-.74 1.342-1.817 1.93-1.657-1.375-3.116-3.212-4.01-5.056a14.943 14.943 0 01-1.117-3.139A14.997 14.997 0 011 15.95a14.901 14.901 0 014.378-10.57 14.924 14.924 0 014.752-3.204C11.97 1.395 13.95.996 15.948 1h.101a14.888 14.888 0 0110.57 4.378 14.912 14.912 0 013.982 13.985 14.871 14.871 0 01-1.118 3.14c-.9 1.843-2.358 3.681-4.01 5.057h-.003zm-5.523 2.798c-.173-.11-.767-.55-1.345-1.353a6.122 6.122 0 01-1.174-3.738 8.26 8.26 0 01.611-2.964 8.42 8.42 0 011.627-2.54l.004-.008.154-.178c.263-.305.536-.622.753-.99.268-.454.462-.931.578-1.42.178-.758.188-1.547.029-2.31a5.3 5.3 0 00-.858-1.956 5.264 5.264 0 00-4.29-2.217h-.108a5.25 5.25 0 00-4.29 2.216 5.31 5.31 0 00-.856 1.956c-.16.763-.15 1.552.03 2.311.115.488.31.965.576 1.419.219.37.49.684.753.99l.155.179.003.007a8.384 8.384 0 011.628 2.54 8.24 8.24 0 01.61 2.964 6.123 6.123 0 01-1.173 3.738c-.58.795-1.174 1.243-1.346 1.352l-.867-.26a15.434 15.434 0 01-2.49-1.098 4.245 4.245 0 002.234-3.736c0-1.034-.403-2.028-1.195-2.95l-.034-.034-.237-.26-.636-.746a8.924 8.924 0 01-1.525-3.26 8.983 8.983 0 01-.05-3.905 8.906 8.906 0 011.46-3.313A8.993 8.993 0 0111.23 8.39a8.937 8.937 0 014.702-1.344h.112c.42 0 .84.029 1.255.088a8.938 8.938 0 013.448 1.256 9.003 9.003 0 012.554 2.404 9.093 9.093 0 011.459 3.313 9.043 9.043 0 01-.05 3.912 8.925 8.925 0 01-1.526 3.26c-.2.265-.409.495-.637.745l-.23.254c-.017.016-.03.027-.04.043-.804.961-1.195 1.927-1.195 2.948a4.25 4.25 0 002.237 3.735c-.795.441-1.63.809-2.491 1.098l-.862.26-.018-.004zm-3.956-11.314a2.957 2.957 0 01-2.952-2.952 2.957 2.957 0 012.952-2.952 2.956 2.956 0 012.95 2.952 2.957 2.957 0 01-2.95 2.952",fill:"#F05C56"}))},dnt=fnt;var yO={};$(yO,{icon:()=>ynt});var qXt=k(L());var mnt=["title","titleId"];function RV(){return RV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function gnt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var vnt=function(t){var n=t.title,r=t.titleId,o=hnt(t,mnt);return a("svg",RV({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"none",fillRule:"evenodd"},a("path",{className:"euiIcon__fillNegative",d:"M12.37 18.352c.032-.01.066-.014.1-.023A6 6 0 0118 10V0C9.163 0 2 7.164 2 16c0 2.793.72 5.417 1.976 7.702a18.947 18.947 0 018.393-5.349"}),a("path",{fill:"#0080D5",d:"M18 0A15.959 15.959 0 005.717 5.75a16.006 16.006 0 007.541 5.032c.71.22 1.477.135 2.146-.188A5.94 5.94 0 0118 10a5.94 5.94 0 012.596.594c.669.323 1.436.408 2.146.188a16.01 16.01 0 007.541-5.032A15.959 15.959 0 0018 0"}),a("path",{fill:"#00BFB3",d:"M22.742 21.218c-.71-.22-1.478-.135-2.146.188A5.947 5.947 0 0118 22a5.94 5.94 0 01-2.596-.594c-.669-.323-1.436-.408-2.146-.188a16.006 16.006 0 00-7.54 5.032A15.959 15.959 0 0018 32c4.936 0 9.348-2.236 12.283-5.75a16.016 16.016 0 00-7.54-5.032"})))},ynt=vnt;var bO={};$(bO,{icon:()=>_nt});var $Xt=k(L());var bnt=["title","titleId"];function zV(){return zV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ont(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var xnt=function(t){var n=t.title,r=t.titleId,o=wnt(t,bnt);return a("svg",zV({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillNegative",d:"M18 0v10a6 6 0 00-5.53 8.33c-.034.009-.068.012-.1.023A18.947 18.947 0 003.975 23.7 15.934 15.934 0 012 16C2 7.164 9.163 0 18 0zm0 13a3 3 0 110 6 3 3 0 010-6z"}),a("path",{fill:"#00AEFA",d:"M22.742 21.218c-.71-.22-1.478-.135-2.146.188A5.947 5.947 0 0118 22a5.94 5.94 0 01-2.596-.594c-.669-.323-1.436-.408-2.146-.188a16.006 16.006 0 00-7.54 5.032A15.959 15.959 0 0018 32c4.936 0 9.348-2.236 12.283-5.75a16.016 16.016 0 00-7.54-5.032"}),a("path",{fill:"#0080D5",d:"M18 0A15.959 15.959 0 005.717 5.75a16.006 16.006 0 007.541 5.032c.71.22 1.477.135 2.146-.188A5.94 5.94 0 0118 10a5.94 5.94 0 012.596.594c.669.323 1.436.408 2.146.188a16.01 16.01 0 007.541-5.032A15.959 15.959 0 0018 0"}))},_nt=xnt;var wO={};$(wO,{icon:()=>knt});var GXt=k(L());var Snt=["title","titleId"];function LV(){return LV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Int(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Pnt=function(t){var n=t.title,r=t.titleId,o=jnt(t,Snt);return a("svg",LV({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillNegative",d:"M9.75 12L16 32h10l-3.4-10.88A13 13 0 0010.19 12h-.44z"}),a("path",{fill:"#22A7F3",d:"M25.725 11.93A17 17 0 009.5 0H6l3.75 12h.44a13 13 0 0112.41 9.12L26 32h6l-6.275-20.07z"}),a("path",{fill:"#0377CA",d:"M7.91 16.175L0 32h12.855z"}))},knt=Pnt;var OO={};$(OO,{icon:()=>Tnt});var KXt=k(L());var Ent=["title","titleId"];function DV(){return DV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ant(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Mnt=function(t){var n=t.title,r=t.titleId,o=Cnt(t,Ent);return a("svg",DV({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M14.738 28.044V16.681L3.172 10.919v6.46l5.32 2.67v4.889l6.246 3.106zm2.344.066l6.357-3.17v-5.002l5.353-2.686V10.87l-11.71 5.854V28.11zM27.306 8.993l-6.003-3.012-5.286 2.656-5.325-2.659L4.637 9.03l11.317 5.638 11.352-5.675zM.828 23.744V8.324L15.981.689l15.155 7.604V23.72L15.98 31.28.828 23.743z"}))},Tnt=Mnt;var xO={};$(xO,{icon:()=>Nnt});var QXt=k(L());var Rnt=["title","titleId"];function NV(){return NV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Lnt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Dnt=function(t){var n=t.title,r=t.titleId,o=znt(t,Rnt);return a("svg",NV({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fill:"#ED2226",d:"M16.072.024C7.29.024.144 7.146.144 15.952c0 8.782 7.122 15.928 15.928 15.928C24.854 31.88 32 24.758 32 15.952 32 7.146 24.854.024 16.072.024zm10.755 18.719c0 .962-.553 1.804-1.636 1.997-1.877.336-5.823.53-9.119.53-3.296 0-7.242-.194-9.119-.53-1.082-.193-1.636-1.035-1.636-1.997v-6.208c0-.962.746-1.852 1.636-1.997.554-.096 1.853-.192 2.864-.192.385 0 .697.289.697.746v4.355l5.582-.12 5.582.12v-4.355c0-.457.313-.746.698-.746 1.01 0 2.31.096 2.863.192.914.145 1.636 1.035 1.636 1.997-.048 2.045-.048 4.139-.048 6.208z"}))},Nnt=Dnt;var _O={};$(_O,{icon:()=>Vnt});var eKt=k(L());var Fnt=["title","titleId"];function FV(){return FV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Bnt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Hnt=function(t){var n=t.title,r=t.titleId,o=Wnt(t,Fnt);return a("svg",FV({width:32,height:32,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M18.099 15.108h3.304v-2.973H18.1v2.973zm-3.905 0h3.304v-2.973h-3.304v2.973zm-3.905 0h3.304v-2.973H10.29v2.973zm-3.905 0H9.69v-2.973H6.384v2.973zm-3.904 0h3.304v-2.973H2.48v2.973zm3.904-3.568H9.69V8.568H6.384v2.972zm3.905 0h3.304V8.568H10.29v2.972zm3.905 0h3.304V8.568h-3.304v2.972zm0-3.567h3.304V5h-3.304v2.973zm17.139 5.402c-.722-.478-2.38-.653-3.656-.415-.164-1.19-.834-2.221-2.052-3.153l-.7-.463-.468.694c-.598.893-.897 2.13-.8 3.317.045.418.183 1.164.617 1.82-.433.231-1.29.549-2.42.528H.124l-.043.247c-.204 1.193-.2 4.914 2.24 7.774C4.178 25.898 6.96 27 10.59 27c7.87 0 13.693-3.586 16.42-10.104 1.073.02 3.381.006 4.567-2.237.031-.051.102-.186.31-.61l.113-.234-.667-.44z",fill:"#136EA3",fillRule:"evenodd"}))},Vnt=Hnt;var SO={};$(SO,{icon:()=>Gnt});var rKt=k(L());var qnt=["title","titleId"];function WV(){return WV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function $nt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Jnt=function(t){var n=t.title,r=t.titleId,o=Unt(t,qnt),i=Lr("logo_dropwizard");return a("svg",WV({width:32,height:32,viewBox:"0 0 32 32",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 29.61s9.55 4.74 16.856-.893c-1.905-5.114-5.25-19.867-7.226-26.383-.422-1.389-.49-1.527-.663-1.909-.964-2.134-1.978 4.142-3.628 10.459C12.749 13.148 8 29.61 8 29.61",fill:"url(#".concat(i("a"),")")}),a("path",{d:"M9.926 28.563s8.17 4.794 14.93.154c-.18-.807-.642-2.103-.955-3.311-1.664-6.416-4.676-17.248-6.144-22.626-1.59-5.822-2.105.986-3.961 8.23-.564 2.204-3.87 17.553-3.87 17.553",fill:"url(#".concat(i("b"),")")}),a("path",{d:"M12.14 24.41l.85-1.466.793 1.544-.908 1.99-.735-2.069zm6.934-5.545l.85-1.465.793 1.543-.908 1.99-.735-2.068zm-4.747-5.851l.85-1.465.792 1.543-.908 1.99-.734-2.068",fill:"#F9A72B"}),a("path",{d:"M12.14 24.41l.85-1.716.793 1.794-.907 1.468-.736-1.546zm6.934-5.545l.851-1.716.792 1.794-.906 1.468-.737-1.546zm-4.747-5.851l.85-1.716.792 1.794-.906 1.468-.736-1.546",fill:"#FFF200"}),a("path",{d:"M12.987 28.422s6.082 1.015 10.086-1.549c-.502 1.55-4.991 3.314-10.086 1.55",fill:"#24265D"}),a("defs",null,a("linearGradient",{id:i("a"),x1:33.473,y1:7.674,x2:7.751,y2:21.331,gradientUnits:"userSpaceOnUse"},a("stop",{stopColor:"#3871C1"}),a("stop",{offset:.515,stopColor:"#2C3792"}),a("stop",{offset:.865,stopColor:"#24265D"}),a("stop",{offset:1,stopColor:"#252761"})),a("linearGradient",{id:i("b"),x1:21.028,y1:14.928,x2:6.017,y2:18.844,gradientUnits:"userSpaceOnUse"},a("stop",{stopColor:"#3871C1"}),a("stop",{offset:.515,stopColor:"#2C3792"}),a("stop",{offset:.865,stopColor:"#24265D"}),a("stop",{offset:1,stopColor:"#252761"}))))},Gnt=Jnt;var jO={};$(jO,{icon:()=>Znt});var iKt=k(L());var Xnt=["title","titleId"];function BV(){return BV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ynt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Qnt=function(t){var n=t.title,r=t.titleId,o=Knt(t,Xnt);return a("svg",BV({"data-type":"logoElastic",xmlns:"http://www.w3.org/2000/svg",width:32,height:32,fill:"none",viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"outline",fillRule:"evenodd",clipRule:"evenodd",d:"M30.86 13.129A6.333 6.333 0 0132 16.77a6.419 6.419 0 01-1.162 3.652 6.382 6.382 0 01-3.032 2.331 4.833 4.833 0 01-1.672 5.542 4.789 4.789 0 01-5.77-.074 9.016 9.016 0 01-4.5 3.322 8.982 8.982 0 01-5.587.023 9.014 9.014 0 01-4.526-3.287 9.067 9.067 0 01-1.727-5.333c0-.579.053-1.156.16-1.725A6.305 6.305 0 011.145 18.9 6.341 6.341 0 010 15.242a6.42 6.42 0 011.163-3.652 6.384 6.384 0 013.035-2.33 4.833 4.833 0 011.658-5.557 4.789 4.789 0 015.78.07 9.037 9.037 0 014.93-3.446 9.007 9.007 0 015.994.419 9.05 9.05 0 014.407 4.098 9.097 9.097 0 01.873 5.965 6.298 6.298 0 013.02 2.32zm-18.28.658l7.002 3.211 7.066-6.213a7.85 7.85 0 00.152-1.557c0-1.692-.539-3.34-1.54-4.704a7.897 7.897 0 00-4.02-2.869 7.87 7.87 0 00-4.932.086 7.9 7.9 0 00-3.92 3.007l-1.174 6.118 1.367 2.92-.001.001zm-7.247 7.441A7.964 7.964 0 006.72 27.53a7.918 7.918 0 004.04 2.874 7.89 7.89 0 004.95-.097 7.92 7.92 0 003.926-3.03l1.166-6.102-1.555-2.985-7.03-3.211-6.885 6.248.001.001zm4.755-11.024l-4.8-1.137.002-.002a3.82 3.82 0 011.312-4.358 3.785 3.785 0 014.538.023l-1.052 5.474zm-5.216.01a5.294 5.294 0 00-2.595 1.882 5.324 5.324 0 00-.142 6.124 5.287 5.287 0 002.505 2l6.733-6.101-1.235-2.65-5.266-1.255zm18.286 17.848a3.737 3.737 0 01-2.285-.785l1.037-5.454 4.8 1.125a3.812 3.812 0 01-1.801 4.68c-.54.283-1.14.432-1.751.434zm-1.31-7.499l5.28 1.238a5.34 5.34 0 002.622-1.938 5.37 5.37 0 001.013-3.106 5.311 5.311 0 00-.936-3.01 5.282 5.282 0 00-2.475-1.944l-6.904 6.07 1.4 2.69z",fill:"#fff"}),a("path",{d:"M12.58 13.787l7.002 3.211 7.066-6.213a7.849 7.849 0 00.152-1.557c0-1.692-.539-3.34-1.54-4.704a7.897 7.897 0 00-4.02-2.869 7.87 7.87 0 00-4.932.086 7.9 7.9 0 00-3.92 3.007l-1.174 6.118 1.367 2.92-.001.001z",fill:"#FEC514"}),a("path",{d:"M5.333 21.228A7.964 7.964 0 006.72 27.53a7.918 7.918 0 004.04 2.874 7.89 7.89 0 004.95-.097 7.92 7.92 0 003.926-3.03l1.166-6.102-1.555-2.985-7.03-3.211-6.885 6.248.001.001z",fill:"#00BFB3"}),a("path",{d:"M5.288 9.067l4.8 1.137L11.14 4.73a3.785 3.785 0 00-5.914 1.94 3.82 3.82 0 00.064 2.395",fill:"#F04E98"}),a("path",{d:"M4.872 10.214a5.294 5.294 0 00-2.595 1.882 5.324 5.324 0 00-.142 6.124 5.287 5.287 0 002.505 2l6.733-6.101-1.235-2.65-5.266-1.255z",fill:"#1BA9F5"}),a("path",{d:"M20.873 27.277a3.736 3.736 0 002.285.785 3.783 3.783 0 003.101-1.63 3.812 3.812 0 00.451-3.484l-4.8-1.125-1.037 5.454z",fill:"#93C90E"}),a("path",{d:"M21.848 20.563l5.28 1.238a5.34 5.34 0 002.622-1.938 5.37 5.37 0 001.013-3.106 5.312 5.312 0 00-.936-3.01 5.283 5.283 0 00-2.475-1.944l-6.904 6.07 1.4 2.69z",fill:"#07C"}))},Znt=Qnt;var IO={};$(IO,{icon:()=>oot});var lKt=k(L());var eot=["title","titleId"];function HV(){return HV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function rot(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var not=function(t){var n=t.title,r=t.titleId,o=tot(t,eot);return a("svg",HV({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"none",fillRule:"evenodd"},a("path",{fill:"#F04E98",d:"M32 9V2.5A2.5 2.5 0 0029.5 0h-27A2.5 2.5 0 000 2.5V9h32z"}),a("path",{fill:"#00BFB3",d:"M0 20h32v-8H0z"}),a("path",{fill:"#0080D5",d:"M14.5 23H0v6.5A2.5 2.5 0 002.5 32h12v-9z"}),a("path",{fill:"#FEC514",d:"M17.5 23v9h12a2.5 2.5 0 002.5-2.5V23H17.5z"})))},oot=not;var PO={};$(PO,{icon:()=>uot});var uKt=k(L());var iot=["title","titleId"];function VV(){return VV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function lot(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var sot=function(t){var n=t.title,r=t.titleId,o=aot(t,iot);return a("svg",VV({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"none",fillRule:"evenodd"},a("path",{className:"euiIcon__fillNegative",d:"M2 16c0 1.384.194 2.72.524 4H22a4 4 0 000-8H2.524A15.984 15.984 0 002 16"}),a("path",{fill:"#FEC514",d:"M28.924 7.662A15.381 15.381 0 0030.48 6C27.547 2.346 23.05 0 18 0 11.679 0 6.239 3.678 3.644 9H25.51a5.039 5.039 0 003.413-1.338"}),a("path",{fill:"#00BFB3",d:"M25.51 23H3.645C6.24 28.323 11.679 32 18 32c5.05 0 9.547-2.346 12.48-6a15.381 15.381 0 00-1.556-1.662A5.034 5.034 0 0025.51 23"})))},uot=sot;var kO={};$(kO,{icon:()=>mot});var pKt=k(L());var cot=["title","titleId"];function qV(){return qV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function fot(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var dot=function(t){var n=t.title,r=t.titleId,o=pot(t,cot);return a("svg",qV({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fill:"#00BFB3",fillRule:"evenodd",d:"M16 0c-2.918 0-5.645.794-8 2.158 4.777 2.768 8 7.923 8 13.842 0 5.919-3.223 11.074-8 13.842A15.907 15.907 0 0016 32c8.837 0 16-7.163 16-16S24.837 0 16 0z",clipRule:"evenodd"}),a("path",{fill:"#FEC514",fillRule:"evenodd",d:"M8 24h2.222A12.996 12.996 0 0013 16c0-2.935-1.012-5.744-2.778-8H8a8 8 0 000 16z",clipRule:"evenodd"}),a("path",{className:"euiIcon__fillNegative",fillRule:"evenodd",d:"M16 8h-2.152A15.877 15.877 0 0116 16c0 2.918-.786 5.647-2.152 8H16a8 8 0 000-16z",clipRule:"evenodd"}))},mot=dot;var EO={};$(EO,{icon:()=>bot});var dKt=k(L());var hot=["title","titleId"];function UV(){return UV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function vot(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var yot=function(t){var n=t.title,r=t.titleId,o=got(t,hot);return a("svg",UV({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"#419EDA"},a("path",{d:"M14.65 14.164c0 1.189-.933 2.15-2.083 2.15-1.152 0-2.082-.961-2.082-2.15 0-1.185.93-2.15 2.082-2.15 1.15 0 2.083.965 2.083 2.15zm2.693 0c0 1.189.934 2.15 2.084 2.15s2.083-.961 2.083-2.15c0-1.185-.933-2.15-2.083-2.15-1.15 0-2.084.965-2.084 2.15z"}),a("path",{d:"M31.522 16.495a5.845 5.845 0 01-3.105-.618c.272-1.603.387-3.218.357-4.827a24.896 24.896 0 00-3.027-3.703 6.137 6.137 0 012.133-2.36l.391-.25-.304-.354c-1.57-1.825-3.444-3.235-5.568-4.193L21.975 0l-.107.462a6.248 6.248 0 01-1.51 2.829 23.77 23.77 0 00-4.362-1.855 23.79 23.79 0 00-4.355 1.851A6.246 6.246 0 0110.137.465l-.108-.462-.423.189c-2.097.943-4.022 2.392-5.566 4.19l-.306.355.39.25a6.125 6.125 0 012.129 2.347 25.001 25.001 0 00-3.022 3.689 26.068 26.068 0 00.347 4.86 5.832 5.832 0 01-3.09.612L.03 16.46l.043.473a16.723 16.723 0 002.14 6.765l.234.41.35-.308a5.914 5.914 0 012.837-1.372 25.255 25.255 0 002.429 4.083c1.475.533 3.013.93 4.601 1.167a6.359 6.359 0 01-.383 3.243l-.175.439.45.102c1.15.261 2.31.394 3.447.394l3.447-.394.45-.102-.175-.44a6.376 6.376 0 01-.383-3.244 23.905 23.905 0 004.585-1.165 25.286 25.286 0 002.43-4.086 5.94 5.94 0 012.851 1.373l.35.306.233-.408a16.661 16.661 0 002.14-6.764l.042-.472-.45.036zM20.93 22.278c-1.63.458-3.287.689-4.933.689-1.65 0-3.304-.231-4.936-.69a20.028 20.028 0 01-2.113-4.594 20.072 20.072 0 01-.89-5.04 19.076 19.076 0 013.576-3.516 18.867 18.867 0 014.363-2.448 18.944 18.944 0 014.355 2.443 19.19 19.19 0 013.592 3.538c-.09 1.73-.39 3.41-.899 5.019a19.965 19.965 0 01-2.115 4.599z"})))},bot=yot;var CO={};$(CO,{icon:()=>Sot});var hKt=k(L());var wot=["title","titleId"];function $V(){return $V=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function xot(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var _ot=function(t){var n=t.title,r=t.titleId,o=Oot(t,wot),i=Lr("logo_gcp");return a("svg",$V({xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("defs",null,a("path",{id:i("a"),d:"M.085.1h4.549v6.291H.085z"})),a("g",{fill:"none",fillRule:"evenodd"},a("path",{fill:"#DB4437",fillRule:"nonzero",d:"M22.57 29.982h-5.749c.527 0 .987-.282 1.233-.7L25.857 16 20.93 7.61l5.748.001c.492 0 .97.251 1.232.7l3.698 6.291c.49.837.526 1.9 0 2.797l-6.572 11.185a2.853 2.853 0 01-2.464 1.398zm-.71-2.796c0 .386.318.7.71.7a.705.705 0 00.712-.7c0-.386-.318-.7-.711-.7a.705.705 0 00-.712.7zm6.927-10.58c.34.193.775.078.971-.256a.692.692 0 00-.26-.955.718.718 0 00-.972.256.692.692 0 00.26.955z"}),a("path",{fill:"#4285F4",fillRule:"nonzero",d:"M25.036 3.416l2.873 4.894a1.427 1.427 0 00-1.232-.699H11.071l-4.928 8.388-2.874-4.892a1.377 1.377 0 010-1.399l3.696-6.292a2.853 2.853 0 012.464-1.398h13.143c.982 0 1.937.502 2.464 1.398zM10.14 4.814c0-.386-.318-.7-.71-.7a.705.705 0 00-.712.7c0 .386.318.7.711.7a.705.705 0 00.711-.7zm12.787.606a.692.692 0 00.26-.955.718.718 0 00-.971-.256.692.692 0 00-.26.955.718.718 0 00.971.256z"}),a("path",{fill:"#F4B400",fillRule:"nonzero",d:"M.394 14.601l2.875-4.893c-.263.449-.245.98 0 1.399L11.07 24.39h9.857l-2.874 4.892c-.246.418-.706.7-1.233.7H9.428a2.854 2.854 0 01-2.464-1.398L.394 17.398a2.754 2.754 0 010-2.797zm2.82.793a.718.718 0 00-.972.256.693.693 0 00.26.955c.34.193.775.078.971-.256a.692.692 0 00-.26-.955zM9.072 26.58a.692.692 0 00-.26.955.718.718 0 00.971.256.692.692 0 00.26-.955.718.718 0 00-.971-.256z"}),a("path",{fill:"#000",d:"M18.054 29.282l2.875-4.892H17.96l-1.138 5.591c.526 0 .986-.28 1.232-.699M26.678 7.611h-5.749l1.484 2.527L27.91 8.31a1.427 1.427 0 00-1.232-.7",opacity:.1}),a("g",{opacity:.1,transform:"translate(2.994 9.609)"},a("mask",{id:i("b"),fill:"#fff"},a("use",{xlinkHref:"#".concat(i("a"))})),a("path",{fill:"#000",d:"M.275 1.498L3.15 6.391l1.485-2.527L.275.1c-.263.448-.245.98 0 1.398",mask:"url(#".concat(i("b"),")")})),a("path",{fill:"#CCC",fillRule:"nonzero",d:"M11.071 24.39L6.143 16l4.928-8.39h9.858L25.857 16l-4.928 8.39H11.07zM20.268 16c0-2.317-1.91-4.194-4.268-4.194-2.357 0-4.268 1.877-4.268 4.194 0 2.316 1.91 4.194 4.268 4.194 2.357 0 4.268-1.878 4.268-4.194z"})))},Sot=_ot;var AO={};$(AO,{icon:()=>Eot});var yKt=k(L());var jot=["title","titleId"];function JV(){return JV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Pot(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var kot=function(t){var n=t.title,r=t.titleId,o=Iot(t,jot);return a("svg",JV({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M20.256 15.982c0-2.316-1.91-4.194-4.268-4.194-2.357 0-4.268 1.878-4.268 4.194 0 2.317 1.911 4.195 4.268 4.195 2.357 0 4.268-1.878 4.268-4.195"}),a("path",{d:"M29.87 16.543a.862.862 0 01-1.167.308.832.832 0 01-.312-1.147.862.862 0 011.167-.308.832.832 0 01.312 1.147M22.56 28.15a.847.847 0 01-.855-.84c0-.464.383-.84.855-.84s.854.376.854.84c0 .464-.382.84-.854.84m-12.715-.113a.863.863 0 01-1.167-.308.832.832 0 01.312-1.147.862.862 0 011.167.308.832.832 0 01-.312 1.147M3.586 16.542a.863.863 0 01-1.167.308.832.832 0 01-.313-1.147.862.862 0 011.167-.308.832.832 0 01.313 1.147M22.987 5.665a.862.862 0 01-1.167-.308.832.832 0 01.312-1.147.863.863 0 011.168.308.832.832 0 01-.313 1.147m-13.57.112a.847.847 0 01-.854-.84c0-.464.382-.84.854-.84s.855.376.855.84c0 .464-.383.84-.855.84m22.178 8.797l-3.697-6.292c-.014-.023-.03-.043-.045-.065l-2.83-4.818A2.854 2.854 0 0022.56 2H9.417a2.853 2.853 0 00-2.464 1.398L3.257 9.69l3.284 5.59 4.519-7.69h15.605c.491 0 .969.251 1.232.699h-6.565l4.513 7.682-4.935 8.4-2.87 4.883a1.426 1.426 0 01-1.23.699l3.279-5.582h-9.03l-4.544-7.738-.384-.653-2.874-4.893a1.377 1.377 0 01-.003-1.391L.382 14.584a2.754 2.754 0 000 2.796l6.57 11.186a2.854 2.854 0 002.465 1.398h7.392c.054 0 .107-.005.16-.011h5.59a2.853 2.853 0 002.464-1.397l6.572-11.186c.526-.896.49-1.96 0-2.796"}))},Eot=kot;var MO={};$(MO,{icon:()=>Rot});var wKt=k(L());var Cot=["title","titleId"];function GV(){return GV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Mot(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Tot=function(t){var n=t.title,r=t.titleId,o=Aot(t,Cot);return a("svg",GV({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M16 0C7.164 0 0 7.343 0 16.4c0 7.248 4.584 13.394 10.942 15.562.8.15 1.092-.356 1.092-.789 0-.39-.014-1.684-.022-3.053-4.45.991-5.39-1.934-5.39-1.934-.728-1.894-1.776-2.398-1.776-2.398-1.454-1.017.11-.997.11-.997 1.606.114 2.452 1.69 2.452 1.69 1.428 2.506 3.746 1.781 4.656 1.36.146-1.056.56-1.78 1.016-2.19-3.552-.414-7.288-1.821-7.288-8.105 0-1.792.624-3.254 1.646-4.402-.164-.416-.714-2.085.158-4.342 0 0 1.341-.44 4.4 1.681A14.882 14.882 0 0116 7.932c1.36.006 2.728.188 4.006.553 3.053-2.124 4.396-1.681 4.396-1.681.875 2.259.325 3.926.16 4.34 1.026 1.148 1.645 2.61 1.645 4.402 0 6.3-3.742 7.687-7.307 8.094.577.508 1.086 1.505 1.086 3.035 0 2.192-.021 3.96-.021 4.5 0 .437.29.947 1.101.787C27.42 29.79 32 23.644 32 16.4 32 7.343 24.836 0 16 0z"}))},Rot=Tot;var TO={};$(TO,{icon:()=>Fot});var xKt=k(L());var zot=["title","titleId"];function XV(){return XV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Dot(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Not=function(t){var n=t.title,r=t.titleId,o=Lot(t,zot);return a("svg",XV({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"none"},a("path",{fill:"#E65A4D",d:"M29.162 4.149c.29-.175.588-.078.873 0a2.616 2.616 0 011.907 2.476c.006.29-.007.581-.007.866-.084 0-.135.052-.2.097-.815.582-1.642 1.164-2.45 1.752-.33.239-.692.426-.97.73-.116 0-.2.078-.284.136-2.69 1.855-5.379 3.704-8.062 5.56-1.331.918-2.663 1.849-3.995 2.773h-.11c-.058-.045-.11-.103-.168-.142L5.863 11.55c-.672-.466-1.344-.938-2.017-1.403-.077-.052-.148-.162-.245-.104-.09.052-.033.175-.045.272-.007.032 0 .065 0 .097v16.194c0 .116.006.24.012.355 0 .065-.006.123-.006.188-1.228.149-2.347-.02-3.116-1.131a2.381 2.381 0 01-.44-1.364c0-6.032-.006-12.057.007-18.089 0-1.228.995-2.314 2.217-2.488.194-.026.388-.052.556.077.04.039.071.078.117.11 4.273 3.168 8.546 6.335 12.819 9.51.168.122.278.116.446-.007 3.413-2.521 6.833-5.036 10.247-7.55.905-.692 1.823-1.384 2.747-2.07z"}),a("path",{fill:"#F6F4EC",d:"M29.162 4.149c-.924.685-1.842 1.377-2.767 2.062-3.413 2.521-6.833 5.03-10.246 7.55-.168.123-.272.13-.446.007-4.267-3.174-8.54-6.335-12.813-9.51-.046-.032-.078-.07-.117-.11.078-.129.214-.083.324-.083h25.742c.11 0 .239-.046.323.084z"}),a("path",{fill:"#E6E3D6",d:"M3.556 26.95a6.533 6.533 0 01-.013-.356V10.4c0-.032-.007-.065 0-.097.013-.09-.046-.213.045-.271.097-.059.174.051.246.103.672.465 1.344.937 2.017 1.403l9.832 6.846c.058.045.117.097.168.142-.026.026-.058.045-.084.071l-.064.065c-.052 0-.104.013-.13.064l-.064.065c-.007.013-.02.02-.026.032.013-.006.02-.019.032-.025l.065-.065c.052 0 .103-.013.13-.065.018-.02.044-.045.064-.064.064 0 .129-.007.194-.007.898.627 1.803 1.248 2.702 1.875 2.676 1.855 5.353 3.704 8.023 5.572.478.337 1.002.628 1.428 1.035-.116.11-.258.039-.388.058.007-.149-.122-.188-.22-.252-.49-.343-.995-.672-1.473-1.028-.802-.588-1.617-1.15-2.431-1.72-.679-.472-1.351-.963-2.05-1.409-.607-.388-1.17-.853-1.777-1.248-.685-.44-1.332-.93-2.01-1.377-.563-.368-1.113-.762-1.662-1.15-.11-.078-.207-.11-.323-.033-.233.168-.53.278-.724.46-.556.51-1.235.84-1.817 1.305-.743.589-1.545 1.112-2.34 1.636-1.319.873-2.599 1.816-3.911 2.696a43.697 43.697 0 00-2.308 1.629c-.207.155-.485.226-.614.485-.13-.013-.272.038-.395-.046 2.315-1.616 4.63-3.226 6.937-4.842.304-.213.646-.381.899-.666.045-.013.103-.019.097-.084 0-.006-.013-.02-.02-.02-.065-.006-.077.046-.09.091-.233.013-.375.194-.55.31-2.463 1.7-4.932 3.388-7.395 5.075zm11.119-7.564l.064-.065c.052 0 .104-.013.13-.064l.064-.065c.052 0 .104-.013.13-.065.006-.013.019-.02.025-.032-.012.006-.019.02-.032.026-.052 0-.103.013-.13.064l-.064.065c-.051 0-.103.013-.13.065-.018.026-.038.045-.057.07-.013.007-.026.014-.033.027.013-.007.026-.013.033-.026zm-.84.575c-.052 0-.104.013-.13.065-.039.006-.09.006-.097.065 0 .012.026.038.039.038.052-.006.058-.051.065-.09.051-.007.096-.013.122-.078a.311.311 0 00.071-.058c.052 0 .104-.013.13-.065l.064-.064c.052 0 .104-.013.13-.065.006-.013.02-.02.026-.032-.013.006-.02.02-.033.026-.051 0-.103.013-.13.064-.018.02-.044.046-.064.065-.051 0-.103.013-.129.065l-.065.064zm-.841.588c-.052 0-.103.013-.13.065-.051.007-.103.013-.096.084 0 .007.013.02.02.02.07.006.077-.046.083-.097.052-.007.097-.02.123-.072.026-.012.045-.038.071-.058.052 0 .103-.013.13-.064l.064-.065c.052 0 .103-.013.13-.065.006-.013.019-.019.025-.032-.013.007-.02.02-.032.026-.052 0-.104.013-.13.065l-.064.064c-.052 0-.104.013-.13.065a.306.306 0 00-.064.064zm-.647.46c.052-.007.104-.013.097-.085 0-.006-.012-.019-.019-.019-.071-.006-.078.045-.084.097-.052 0-.097.013-.13.065a.223.223 0 00-.193.129c-.045.013-.104.013-.097.084 0 .006.013.02.02.02.064.006.077-.046.083-.098.09 0 .181-.006.194-.129.058-.006.104-.02.13-.065zm2.128-1.533c-.008.027-.025.054-.033.072.025.009.05.035.067.027.016-.01.025-.045.033-.072a.55.55 0 01-.067-.027zm-1.81 1.35c-.008-.024-.015-.056-.03-.056-.015-.008-.052.008-.06.024-.022.033-.007.074.03.074.022 0 .037-.025.06-.041zM15.355 19a.185.185 0 01.034-.072c-.025-.009-.05-.035-.067-.026-.016.008-.025.044-.033.07.017.01.042.019.067.028zm-3.526 2.402c-.016-.024-.031-.05-.04-.057-.015 0-.055.016-.055.033-.016.04.008.074.048.065.016 0 .031-.024.047-.04z"}),a("path",{fill:"#B6B5AC",d:"M28.121 27.085c-.426-.413-.944-.698-1.428-1.034-2.67-1.862-5.347-3.717-8.023-5.573-.899-.627-1.804-1.247-2.702-1.874 0-.02-.007-.046-.007-.065l3.995-2.773c2.69-1.856 5.379-3.705 8.062-5.56.084-.058.168-.136.284-.136v17.073c-.051-.019-.116-.038-.18-.058z"}),a("path",{fill:"#E6E3D6",d:"M4.073 27.143c.123-.258.407-.33.614-.484a47.845 47.845 0 012.308-1.63c1.312-.885 2.592-1.823 3.91-2.695.796-.524 1.598-1.048 2.341-1.636.588-.465 1.26-.795 1.817-1.306.2-.18.49-.29.724-.459.11-.084.207-.051.323.033.55.388 1.099.782 1.661 1.15.68.446 1.326.944 2.01 1.377.608.388 1.17.854 1.779 1.248.698.446 1.37.937 2.049 1.41.814.568 1.635 1.13 2.43 1.719.485.355.983.685 1.475 1.028.09.064.226.103.22.252-7.888-.007-15.774-.007-23.661-.007z"}),a("path",{fill:"#B1392F",d:"M28.315 27.143V10.07c.278-.304.64-.491.97-.73.814-.595 1.635-1.17 2.45-1.752.058-.045.116-.097.2-.097.007.11.013.213.013.323 0 5.502 0 11.01.007 16.51 0 .376-.013.75-.104 1.126-.161.691-.575 1.17-1.247 1.409-.744.259-1.513.33-2.289.284z"}),a("path",{fill:"#BEBDB3",d:"M11.514 21.59c-.253.285-.595.453-.9.666a2650.078 2650.078 0 01-6.936 4.842l-.129.039c0-.065.007-.123.007-.188 2.47-1.687 4.932-3.374 7.402-5.061.174-.117.31-.304.55-.31l.006.012z"})))},Fot=Not;var RO={};$(RO,{icon:()=>qot});var SKt=k(L());var Wot=["title","titleId"];function KV(){return KV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Hot(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Vot=function(t){var n=t.title,r=t.titleId,o=Bot(t,Wot);return a("svg",KV({width:32,height:32,viewBox:"0 0 32 32",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M4.315 17.301c.045.946 1 .5 1.416.21.415-.29.5-.045.56-.6a9.07 9.07 0 00.045-1.09 2.676 2.676 0 00-1.786.455c-.26.19-.745.79-.24 1",fill:"#F6D2A2"}),a("path",{d:"M4.805 17.987a.6.6 0 01-.27-.06.62.62 0 01-.31-.55A.41.41 0 014 17.05a1.15 1.15 0 01.5-.83 2.752 2.752 0 011.846-.47h.075v.074c.01.286.003.572-.025.856v.25c-.025.39-.1.45-.3.5a1.118 1.118 0 00-.3.145c-.288.223-.63.364-.99.41zm1.271-2.067a2.502 2.502 0 00-1.47.45 1 1 0 00-.42.671.25.25 0 00.17.205h.05v.055a.5.5 0 00.21.45 1.31 1.31 0 001.065-.31 1.29 1.29 0 01.34-.17c.13-.045.16-.055.18-.365v-.25c.024-.25.034-.5.03-.75h-.155v.014z",fill:"#010101"}),a("path",{d:"M4.315 17.3a.745.745 0 00.376-.21z",fill:"#C7B199"}),a("path",{d:"M4.315 17.391a.092.092 0 11-.055-.175h.06a.54.54 0 00.275-.16.092.092 0 01.06-.035.09.09 0 01.068.017.09.09 0 01.035.06.091.091 0 01-.018.068.7.7 0 01-.36.22h-.065v.005z",fill:"#010101"}),a("path",{d:"M6.496 6.05C2.88 5.049 5.571.43 8.498 2.322L6.496 6.05z",fill:"#74CDDD"}),a("path",{d:"M6.541 6.154h-.07c-1.03-.29-1.666-.9-1.786-1.716a2.396 2.396 0 011.116-2.26 2.421 2.421 0 012.722.09l.07.044L6.54 6.154zm.5-4.192c-.41 0-.811.12-1.155.345A2.211 2.211 0 004.85 4.393c.11.726.67 1.276 1.586 1.551l1.901-3.587a2.501 2.501 0 00-1.28-.38l-.015-.015z",fill:"#010101"}),a("path",{d:"M22.566 1.977c2.862-2.001 5.448 2.502 2.121 3.667l-2.121-3.667z",fill:"#74CDDD"}),a("path",{d:"M24.647 5.754l-2.201-3.802.065-.045a2.362 2.362 0 012.626-.22 2.427 2.427 0 011.196 2.241c-.05.5-.32 1.356-1.616 1.801l-.07.025zm-1.961-3.752l2.041 3.532a1.956 1.956 0 001.426-1.62 2.24 2.24 0 00-1.106-2.077 2.126 2.126 0 00-2.361.165z",fill:"#010101"}),a("path",{d:"M23.181 28.928c.726.45 2.056 1.811.966 2.471-1.046.961-1.636-1.055-2.557-1.33a2.549 2.549 0 011.591-1.141z",fill:"#F6D2A2"}),a("path",{d:"M23.592 31.745h-.04c-.416-.025-.756-.43-1.086-.816a2.33 2.33 0 00-.9-.775l-.12-.035.074-.125a2.656 2.656 0 011.646-1.176h.065c.466.29 1.426 1.13 1.421 1.891a.835.835 0 01-.45.725.905.905 0 01-.61.31zm-1.861-1.721c.339.2.633.467.865.785.219.36.56.628.96.755a.716.716 0 00.5-.235.661.661 0 00.371-.58c0-.61-.77-1.376-1.306-1.721a2.351 2.351 0 00-1.386.996h-.005z",fill:"#010101"}),a("path",{d:"M24.147 31.494a.09.09 0 01-.08-.05c-.053-.11-.1-.224-.14-.34a1.5 1.5 0 00-.33-.61.091.091 0 01-.022-.098.09.09 0 01.147-.032c.172.188.3.414.37.66.039.11.084.216.135.32a.09.09 0 01-.04.12l-.04.03z",fill:"#010101"}),a("path",{d:"M10.189 30.464c-.856.13-1.336.9-2.046 1.29a.62.62 0 01-1.001-.235.325.325 0 01-.26-.12c-.62-1 .645-1.696 1.31-2.186.936-.18 1.511.615 1.997 1.25z",fill:"#F6D2A2"}),a("path",{d:"M7.692 31.995a.613.613 0 01-.16 0 .74.74 0 01-.435-.375.301.301 0 01-.245-.13c-.6-.946.42-1.662 1.096-2.137l.235-.17c.945-.19 1.546.59 2.026 1.22l.135.181h-.15a2.586 2.586 0 00-1.266.725c-.23.212-.482.4-.75.56a1.001 1.001 0 01-.486.126zm-.6-.58a.245.245 0 01.105 0h.025l.04.08a.58.58 0 00.335.305.686.686 0 00.5-.12c.26-.155.503-.337.726-.54a3 3 0 011.206-.736c-.46-.6-1-1.25-1.786-1.1l-.225.16c-.69.5-1.546 1.09-1.051 1.885a.146.146 0 00.105.07l.02-.005z",fill:"#010101"}),a("path",{d:"M7.157 31.614a.09.09 0 01-.09-.12c.037-.24.137-.466.29-.655.072-.1.136-.205.19-.315a.09.09 0 11.165.075c-.058.12-.127.236-.205.345-.132.17-.217.372-.245.585a.09.09 0 01-.067.084.09.09 0 01-.038.002zM6.647 4.78c-.5-.25-.826-.596-.536-1.146.29-.55.77-.455 1.251-.205l-.715 1.35zm17.285-.48c.5-.25.825-.596.535-1.146-.29-.55-.77-.456-1.25-.205l.715 1.35z",fill:"#010101"}),a("path",{d:"M27.219 17.181c-.045.946-1.001.5-1.416.21-.416-.29-.5-.045-.56-.6a9.068 9.068 0 01-.046-1.09 2.677 2.677 0 011.787.454c.26.19.745.79.24 1.001",fill:"#F6D2A2"}),a("path",{d:"M26.728 17.846a2.046 2.046 0 01-.955-.36 1.117 1.117 0 00-.3-.145c-.2-.07-.275-.13-.3-.5v-.25a6.516 6.516 0 01-.026-.856v-.12h.076a2.751 2.751 0 011.846.47 1.15 1.15 0 01.5.83.412.412 0 01-.225.326.62.62 0 01-.31.55.605.605 0 01-.306.055zm-1.456-2.06c-.003.25.007.5.03.75v.25c0 .305.046.315.18.365.122.04.236.097.34.17a1.307 1.307 0 001.067.31.502.502 0 00.21-.45v-.06h.05a.25.25 0 00.17-.205 1.002 1.002 0 00-.42-.67 2.552 2.552 0 00-1.627-.46z",fill:"#010101"}),a("path",{d:"M27.218 17.181a.746.746 0 01-.375-.195z",fill:"#C7B199"}),a("path",{d:"M27.219 17.271h-.095a.7.7 0 01-.35-.25.09.09 0 01-.007-.101.091.091 0 01.152-.01.54.54 0 00.275.16h.06a.101.101 0 11-.035.201z",fill:"#010101"}),a("path",{d:"M15.407.066c3.622 0 7.004.5 8.785 4.002 1.586 3.898 1 8.105 1.266 12.223.21 3.537.67 7.624-.97 10.906-1.717 3.442-6.05 4.297-9.601 4.182-2.792-.1-6.164-1-7.74-3.562-1.851-3.002-.976-7.444-.84-10.771.16-3.942-1.071-7.9.225-11.762C7.877 1.282 11.5.376 15.402.066",fill:"#74CDDD"}),a("path",{d:"M15.502 31.494h-.62a13.202 13.202 0 01-4.358-.87 6.969 6.969 0 01-3.457-2.737c-1.501-2.421-1.23-5.763-1-8.715.06-.74.114-1.446.14-2.106.026-1.4-.034-2.8-.18-4.192-.211-2.502-.431-5.089.41-7.595a6.644 6.644 0 013.501-4.047C11.29.572 12.94.19 15.367 0c3.572-.025 7.094.475 8.905 4.022 1.16 2.852 1.176 5.914 1.196 8.876 0 1.11 0 2.256.08 3.377 0 .34.04.685.065 1.03.21 3.247.45 6.934-1.046 9.916-1.871 3.732-6.574 4.272-9.065 4.272zM15.407.156c-3.768.32-7.44 1.13-8.79 5.158-.831 2.471-.61 5.038-.406 7.504.147 1.4.207 2.806.18 4.213-.025.665-.085 1.37-.14 2.116-.23 2.922-.5 6.239.966 8.605.615 1 2.596 3.337 7.67 3.502 2.196.08 7.504-.17 9.505-4.142 1.47-2.942 1.236-6.599 1.026-9.826 0-.35-.045-.695-.065-1.03a67.451 67.451 0 01-.08-3.353c0-2.941-.03-6.003-1.181-8.805A6.438 6.438 0 0020.445.841a14.96 14.96 0 00-5.038-.685z",fill:"#010101"}),a("path",{d:"M16.042 4.924c.65 3.777 6.824 2.781 5.938-1.03-.795-3.418-6.153-2.472-5.938 1.03z",fill:"#fff"}),a("path",{d:"M18.979 7.39a3.457 3.457 0 01-1.13-.185 2.797 2.797 0 01-1.892-2.266 2.882 2.882 0 01.78-2.222 3.407 3.407 0 012.002-1 3.202 3.202 0 012.031.35 2.727 2.727 0 011.296 1.806 2.643 2.643 0 01-.77 2.682 3.502 3.502 0 01-2.317.835zm-2.847-2.476a2.626 2.626 0 001.776 2.126 3.417 3.417 0 003.277-.62 2.502 2.502 0 00.716-2.502 2.672 2.672 0 00-3.132-2.031 2.887 2.887 0 00-2.637 3.027z",fill:"#010101"}),a("path",{d:"M8.663 5.539c.84 3.287 6.103 2.441 5.908-.855-.235-3.953-6.714-3.207-5.908.855z",fill:"#fff"}),a("path",{d:"M11.474 7.705a3.232 3.232 0 01-1.536-.375 2.727 2.727 0 01-1.355-1.776 2.757 2.757 0 01.94-2.827 3.552 3.552 0 013.532-.45 2.672 2.672 0 011.601 2.402c.105 1.75-1.286 2.771-2.617 3.001a3.657 3.657 0 01-.565.025zM8.763 5.52A2.732 2.732 0 0012.03 7.52c1.26-.2 2.576-1.16 2.476-2.806a2.501 2.501 0 00-1.5-2.262 3.377 3.377 0 00-3.358.43 2.597 2.597 0 00-.885 2.637z",fill:"#010101"}),a("path",{d:"M16.767 9.481c.049.521.049 1.046 0 1.566a1 1 0 01-.585.36.861.861 0 01-.655-.5c-.032-.59-.017-1.183.045-1.77l1.195.344z",fill:"#fff"}),a("path",{d:"M16.237 11.483h-.025a.944.944 0 01-.725-.566 5.95 5.95 0 010-1.215c0-.185.03-.38.035-.57v-.15l1.35.414v.085c0 .16 0 .33.026.5.045.358.045.72 0 1.076v.025a.75.75 0 01-.476.34l-.155.06h-.03zm-.58-.63a.766.766 0 00.56.445l.14-.056a.6.6 0 00.366-.26c.04-.332.04-.668 0-1 0-.155 0-.305-.026-.455l-1-.306c0 .155 0 .31-.03.46-.044.388-.05.778-.015 1.166l.005.005zM10.114 5.964c.491 0 .89-.432.89-.965 0-.534-.399-.966-.89-.966-.492 0-.89.432-.89.966 0 .533.398.965.89.965z",fill:"#010101"}),a("path",{d:"M10.519 5.464c.116 0 .21-.11.21-.245s-.094-.245-.21-.245c-.116 0-.21.11-.21.245s.094.245.21.245z",fill:"#fff"}),a("path",{d:"M17.568 5.724c.483 0 .875-.432.875-.965 0-.533-.392-.966-.875-.966-.484 0-.876.433-.876.966 0 .533.392.965.876.965z",fill:"#010101"}),a("path",{d:"M17.963 5.224c.114 0 .206-.11.206-.245 0-.136-.092-.245-.206-.245-.113 0-.205.11-.205.245s.092.245.205.245zM14.266 9.406c-.39.941.215 2.822 1.27 1.436a11.12 11.12 0 01.046-1.77l-1.316.334z",fill:"#fff"}),a("path",{d:"M14.812 11.428a.5.5 0 01-.26-.07c-.426-.246-.691-1.251-.39-2.002v-.04l1.5-.38v.12c0 .195 0 .39-.035.575a5.71 5.71 0 000 1.181v.065a1.056 1.056 0 01-.815.55zm-.496-1.947c-.215.586-.045 1.501.33 1.716.27.155.57-.115.78-.385a6.128 6.128 0 010-1.18c0-.146 0-.3.031-.45l-1.14.3z",fill:"#010101"}),a("path",{d:"M14.38 7.595a1.146 1.146 0 00-.94 1.601c.5.9 1.611-.08 2.302 0 .795 0 1.45.84 2.09.15.711-.77-.304-1.5-1.1-1.856l-2.351.105z",fill:"#F6D2A2"}),a("path",{d:"M17.268 9.727a2 2 0 01-.73-.206 2.207 2.207 0 00-.791-.22c-.287 0-.57.062-.83.18-.561.195-1.196.416-1.557-.23a1.08 1.08 0 010-1.05 1.281 1.281 0 011.001-.686l2.406-.105c.59.25 1.266.706 1.381 1.236a.955.955 0 01-.88 1.08zm-1.501-.606c.296.024.584.104.85.235.45.19.806.335 1.166-.055a.664.664 0 00.205-.605c-.1-.46-.735-.88-1.256-1.1l-2.326.094a1.11 1.11 0 00-.85.59.906.906 0 000 .876c.285.5.795.335 1.34.15.274-.122.57-.185.87-.185z",fill:"#231F20"}),a("path",{d:"M14.266 7.56c-.055-1.25 2.336-1.41 2.617-.36.28 1.05-2.502 1.29-2.617.36z",fill:"#010101"}))},qot=Vot;var zO={};$(zO,{icon:()=>Xot});var IKt=k(L());var Uot=["title","titleId"];function YV(){return YV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Jot(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Got=function(t){var n=t.title,r=t.titleId,o=$ot(t,Uot),i=Lr("logo_google_g");return a("svg",YV({xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",viewBox:"0 0 32 32",width:32,height:32,"aria-labelledby":r},o),n?a("title",{id:r},n):null,a("defs",null,a("path",{id:i("a"),d:"M15.319 3.278c0-1.131-.102-2.22-.29-3.264H0v6.172h8.587c-.37 1.995-1.494 3.685-3.184 4.816v4.004h5.157c3.017-2.778 4.758-6.869 4.758-11.728z"}),a("path",{id:i("c"),d:"M14.343 12.956c4.308 0 7.92-1.43 10.56-3.866l-5.157-4.004c-1.429.958-3.256 1.523-5.403 1.523-4.156 0-7.674-2.806-8.928-6.578H.084v4.134c2.625 5.215 8.021 8.79 14.259 8.79z"}),a("path",{id:i("e"),d:"M7.028 10.25a9.59 9.59 0 01-.5-3.032 9.59 9.59 0 01.5-3.032V.052h-5.33A15.95 15.95 0 000 7.218c0 2.575.617 5.012 1.697 7.166l5.331-4.134z"}),a("path",{id:i("g"),d:"M14.343 6.392c2.342 0 4.446.805 6.1 2.386l4.576-4.576C22.256 1.627 18.644.046 14.343.046 8.105.046 2.709 3.622.083 8.836l5.332 4.134c1.254-3.77 4.772-6.578 8.928-6.578z"})),a("g",{fill:"none",fillRule:"evenodd"},a("g",{transform:"translate(15.955 13.087)"},a("mask",{id:i("b"),fill:"#fff"},a("use",{xlinkHref:"#".concat(i("a"))})),a("path",{fill:"#4285F4",fillRule:"nonzero",mask:"url(#".concat(i("b"),")"),d:"M.001 15.006h15.318V.014H.001z"})),a("g",{transform:"translate(1.613 19.003)"},a("mask",{id:i("d"),fill:"#fff"},a("use",{xlinkHref:"#".concat(i("c"))})),a("path",{fill:"#34A853",fillRule:"nonzero",mask:"url(#".concat(i("d"),")"),d:"M.084 12.956h24.819V.031H.084z"})),a("g",{transform:"translate(0 8.784)"},a("mask",{id:i("f"),fill:"#fff"},a("use",{xlinkHref:"#".concat(i("e"))})),a("path",{fill:"#FBBC04",fillRule:"nonzero",mask:"url(#".concat(i("f"),")"),d:"M0 14.384h7.028V.052H0z"})),a("g",{transform:"translate(1.613)"},a("mask",{id:i("h"),fill:"#fff"},a("use",{xlinkHref:"#".concat(i("g"))})),a("path",{fill:"#EA4335",fillRule:"nonzero",mask:"url(#".concat(i("h"),")"),d:"M.084 12.97h24.935V.046H.084z"}))))},Xot=Got;var LO={};$(LO,{icon:()=>eit});var EKt=k(L());var Kot=["title","titleId"];function QV(){return QV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Qot(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Zot=function(t){var n=t.title,r=t.titleId,o=Yot(t,Kot),i=Lr("logo_haproxy");return a("svg",QV({width:32,height:32,viewBox:"0 0 32 32",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{clipPath:"url(#".concat(i("clip0"),")")},a("path",{d:"M16.05 13.237l-3.11-3.612",stroke:"#05486D",strokeWidth:.12,strokeMiterlimit:10}),a("path",{d:"M6.117 10.528l2.509 3.512",stroke:"#05486D",strokeWidth:.06,strokeMiterlimit:10}),a("path",{d:"M16.05 13.237l3.11-3.612M19.863 17.15l3.712-3.11M19.863 17.15l3.712 3.311M19.16 24.575l-3.11-3.511M12.94 24.575l3.11-3.511M8.625 20.26l3.512-3.11M8.625 14.04l3.512 3.11M16.05 13.238l-7.425.802M16.05 13.238l7.525.802M19.863 17.15l-.702-7.525M19.863 17.15l-.702 7.425M23.575 20.461l-7.525.602M8.625 20.261l7.425.803M12.94 24.575l-.803-7.425M12.94 9.625l-.803 7.525",stroke:"#05486D",strokeWidth:.12,strokeMiterlimit:10}),a("path",{d:"M5.114 15.043l3.511-1.003M9.328 7.117l3.612 2.509M13.743 5.512l-.803 4.113M13.743 5.512l5.418 4.113M18.358 5.512l.803 4.113M22.773 7.117L19.16 9.626M25.983 10.528l-6.822-.903M23.575 14.04l2.408-3.512M23.575 14.04l3.412 1.003M23.575 14.04l3.412 5.217M18.358 5.512L12.94 9.625M23.576 14.04l-.803-6.923M23.575 20.462l3.412-1.204M23.575 20.462l3.412-5.418M23.575 20.461l2.408 3.312M23.576 20.461l-.803 6.723M19.16 24.575l3.613 2.609M19.16 24.575l6.823-.802M19.16 24.575l-.802 4.214M19.16 24.575l-5.417 4.214M12.94 24.575l.803 4.214M12.94 24.575l5.418 4.214M12.94 24.575l-3.612 2.609M12.94 24.575l-6.823-.802M8.626 20.261l-2.509 3.512M8.625 20.261l.703 6.923M8.625 20.26l-3.511-1.002M8.625 14.04l-3.511 5.217M8.625 20.26l-3.511-5.217M9.328 7.117l-.703 6.923M6.117 10.528l6.823-.903",stroke:"#05486D",strokeWidth:.06,strokeMiterlimit:10}),a("path",{d:"M9.327 7.117L6.72 5.813M9.328 7.117l-.201-2.91M13.742 5.512L9.127 4.207M13.742 5.512l-2.006-2.509M13.743 5.512l.802-2.91M9.328 7.117l2.408-4.114M18.358 5.512l-3.813-2.91M18.358 5.512l-.803-3.01M13.743 5.512l3.812-3.01M18.358 5.512l2.007-2.509M22.773 7.117l-2.408-4.114M22.773 7.117l.301-2.91M18.358 5.512l4.716-1.305M22.773 7.117l2.709-1.405M22.773 7.117l4.716.703M25.983 10.528l1.505-2.709M25.984 10.528l-.502-4.816M25.983 10.528l3.11-.3M25.983 10.528l4.214 2.308M26.987 15.044l2.107-4.817M26.987 15.043l3.21-2.207M26.987 15.043l3.612.703M26.987 19.258l3.612-3.512M26.987 19.258l3.712-.703M26.987 15.043l3.712 3.512M26.987 19.258l3.11 2.107M25.983 23.773l4.114-2.409M25.983 23.773l3.11.3M26.987 19.258l2.107 4.816M25.983 23.773l1.505 2.709M25.984 23.773l-.502 4.715M25.482 28.488l-2.71-1.304M22.773 27.184l.2 2.91M22.773 27.184l4.716-.703M22.773 27.184l-2.408 4.114M18.358 28.79l2.007 2.508M18.358 28.79l4.615 1.304M18.358 28.79l-.803 3.01M18.358 28.79l-3.813 3.01M13.743 28.79l.802 3.01M13.743 28.79l3.812 3.01M13.742 28.79l-2.006 2.508M9.328 27.184l2.408 4.114M13.742 28.79l-4.615 1.404M9.328 27.184l-.201 3.01M9.328 27.184l-2.71 1.404M6.117 23.773l.502 4.816M9.328 27.184l-4.716-.703M6.117 23.773l-1.505 2.709M6.117 23.773l-3.11.3M6.117 23.773l-4.214-2.409M5.114 19.258l-3.21 2.107M5.114 19.258L1.4 18.555M5.114 19.258l-2.107 4.816M5.114 15.043L1.4 18.555M5.114 19.258L1.4 15.746M5.114 15.043l-3.11-2.106M5.114 15.043l-3.713.703M5.114 15.044l-2.007-4.817M6.117 10.528l-3.01-.3M6.117 10.528l-4.114 2.408M6.117 10.528L4.712 7.92M6.117 10.528l.602-4.715M9.328 7.117l-4.616.803",stroke:"#083D5F",strokeWidth:.05,strokeMiterlimit:10}),a("path",{d:"M13.943 15.244h-3.612v3.592h3.612v-3.592zM17.756 11.331h-3.612v3.592h3.612v-3.592zM17.756 19.157h-3.612v3.592h3.612v-3.592zM21.669 15.244h-3.612v3.592h3.612v-3.592z",fill:"#006DA8"}),a("path",{d:"M20.365 8.421h-2.509V10.9h2.509V8.42zM14.144 8.321h-2.509v2.478h2.509V8.321zM9.83 12.836H7.32v2.478H9.83v-2.478zM9.83 18.956H7.32v2.479H9.83v-2.479zM24.679 18.956H22.17v2.479h2.509v-2.479zM24.679 12.736H22.17v2.478h2.509v-2.478z",fill:"#2F77BC"}),a("path",{d:"M6.92 9.625H5.314v1.676H6.92V9.625zM10.13 6.214H8.526v1.675h1.606V6.214zM14.445 4.609h-1.606v1.675h1.606V4.61zM5.916 14.14H4.311v1.676h1.605V14.14zM26.786 9.826H25.08v1.646h1.706V9.826zM23.575 6.415H21.87V8.06h1.705V6.415zM19.26 4.81h-1.705v1.645h1.706V4.809zM27.689 14.441h-1.605v1.646h1.605V14.44z",fill:"#139BD7"}),a("path",{d:"M14.144 23.27h-2.509v2.479h2.509v-2.478zM20.264 23.27h-2.508v2.479h2.508v-2.478z",fill:"#2F77BC"}),a("path",{d:"M26.685 22.77H25.08v1.675h1.605v-1.676zM23.375 26.08H21.77v1.676h1.605V26.08zM19.06 27.686h-1.605v1.675h1.605v-1.675zM27.589 18.254h-1.606v1.676h1.606v-1.676zM6.92 22.97H5.214v1.646H6.92V22.97zM10.03 26.381H8.325v1.646h1.705V26.38zM14.445 27.987h-1.706v1.645h1.706v-1.645zM5.816 18.355H4.21V20h1.606v-1.645z",fill:"#139BD7"}),a("path",{d:"M7.12 5.311h-.903v.933h.903v-.933zM1.903 15.244H1v.933h.903v-.933zM25.782 5.21h-.903v.934h.903V5.21zM2.505 12.335h-.903v.933h.903v-.934zM12.137 2.502h-.903v.933h.903v-.933zM3.508 9.726h-.903v.933h.903v-.933zM5.113 7.318H4.21v.933h.903v-.933zM9.629 3.806h-.903v.903h.903v-.903zM15.047 2.1h-.903v.903h.903V2.1zM23.374 3.605h-.903v.933h.903v-.933zM29.295 9.726h-.903v.933h.903v-.933zM30.498 12.335h-.903v.933h.903v-.934zM27.69 7.318h-.904v.933h.903v-.933zM30.9 15.144h-.903v.933h.903v-.933zM17.856 2h-.903v.933h.903V2zM20.665 2.602h-.903v.933h.903v-.933z",fill:"#03A9DA"}),a("path",{d:"M7.12 5.311h-.903v.933h.903v-.933zM1.903 15.244H1v.933h.903v-.933zM25.782 5.21h-.903v.934h.903V5.21zM2.505 12.335h-.903v.933h.903v-.934zM12.137 2.502h-.903v.933h.903v-.933zM3.508 9.726h-.903v.933h.903v-.933zM5.113 7.318H4.21v.933h.903v-.933zM9.629 3.806h-.903v.903h.903v-.903zM15.047 2.1h-.903v.903h.903V2.1zM23.374 3.605h-.903v.933h.903v-.933zM29.295 9.726h-.903v.933h.903v-.933zM30.498 12.335h-.903v.933h.903v-.934zM27.69 7.318h-.904v.933h.903v-.933zM30.9 15.144h-.903v.933h.903v-.933zM17.856 2h-.903v.933h.903V2zM20.665 2.602h-.903v.933h.903v-.933zM25.682 27.886h-.903v.933h.903v-.933zM31 17.953h-.903v.933H31v-.933zM7.12 27.987h-.903v.933h.903v-.933zM30.398 20.763h-.903v.933h.903v-.933zM20.665 30.596h-.903v.933h.903v-.933zM29.295 23.371h-.903v.933h.903v-.933zM27.69 25.78h-.904v.932h.903v-.933zM23.274 29.793h-.903v.902h.903v-.902zM17.756 31.498h-.903v.903h.903v-.903zM9.428 29.492h-.903v.933h.903v-.933zM3.508 23.472h-.903v.933h.903v-.933zM2.304 20.863h-.903v.933h.903v-.933zM5.013 25.88H4.11v.933h.903v-.933zM1.903 17.953H1v.933h.903v-.933zM14.947 31.498h-.903v.933h.902v-.933zM12.137 30.596h-.903v.933h.903v-.933z",fill:"#03A9DA"})),a("defs",null,a("clipPath",{id:i("clip0")},a("path",{d:"M0 0h32v32H0V0z",fill:"#fff"}))))},eit=Zot;var DO={};$(DO,{icon:()=>iit});var MKt=k(L());var tit=["title","titleId"];function ZV(){return ZV=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function nit(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var oit=function(t){var n=t.title,r=t.titleId,o=rit(t,tit),i=Lr("logo_ibm");return a("svg",ZV({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("defs",null,a("linearGradient",{id:i("a"),x1:"8.005%",x2:"53.33%",y1:"79.323%",y2:"79.324%"},a("stop",{offset:"0%",stopColor:"#3BDADE",stopOpacity:0}),a("stop",{offset:"30.476%",stopColor:"#36CEE1",stopOpacity:.383}),a("stop",{offset:"100%",stopColor:"#21A2EF"})),a("linearGradient",{id:i("b"),x1:"19.496%",x2:"71.309%",y1:"83.344%",y2:"17.638%"},a("stop",{offset:"0%",stopColor:"#207FFA"}),a("stop",{offset:"100%",stopColor:"#6EAFF1",stopOpacity:0})),a("linearGradient",{id:i("c"),x1:"21.909%",x2:"21.909%",y1:"96.314%",y2:"29.454%"},a("stop",{offset:"0%",stopColor:"#42C1E6",stopOpacity:0}),a("stop",{offset:"57.076%",stopColor:"#6FB9EF"}),a("stop",{offset:"86.716%",stopColor:"#60CBE7"}),a("stop",{offset:"100%",stopColor:"#5CCFE5",stopOpacity:0})),a("linearGradient",{id:i("d"),x1:"96.205%",x2:"-1.172%",y1:"12.667%",y2:"-22.252%"},a("stop",{offset:"0%",stopColor:"#6FB9EF",stopOpacity:0}),a("stop",{offset:"22.427%",stopColor:"#38D2E0"}),a("stop",{offset:"91.203%",stopColor:"#6ABFEC"}),a("stop",{offset:"100%",stopColor:"#5CCFE5",stopOpacity:0})),a("linearGradient",{id:i("e"),x1:"9.408%",x2:"80.589%",y1:"87.764%",y2:"83.138%"},a("stop",{offset:"0%",stopColor:"#126CFD"}),a("stop",{offset:"100%",stopColor:"#21A1EF"}))),a("g",{fill:"none",fillRule:"evenodd"},a("path",{fill:"#38D2E0",d:"M4.262 13.122a.604.604 0 01-.3-.08l-2.844-1.625a.617.617 0 01-.295-.734.608.608 0 01.868-.315l2.843 1.625c.29.159.405.514.261.81a.603.603 0 01-.533.32zm4.914-4.864a.603.603 0 01-.522-.298L7.012 5.144a.615.615 0 01.115-.782.606.606 0 01.91.157l1.64 2.813a.617.617 0 01-.158.819c-.1.07-.22.107-.343.107zm6.107-2.416V2.635a.624.624 0 01.575-.634.605.605 0 01.443.164.593.593 0 01.186.431v3.285a.593.593 0 01-.186.43.605.605 0 01-.443.165.624.624 0 01-.575-.634zm7.312 2.416a.604.604 0 01-.343-.107.617.617 0 01-.159-.82l1.64-2.812a.602.602 0 01.911-.157c.223.2.271.528.115.782L23.117 7.96a.603.603 0 01-.522.298zm4.914 4.864a.602.602 0 01-.534-.319.616.616 0 01.262-.81l2.818-1.611a.626.626 0 01.783.112.592.592 0 01-.156.906l-2.873 1.643a.604.604 0 01-.3.08z"}),a("path",{fill:"url(#".concat(i("a"),")"),d:"M16.536 19.645l-1.204-.009c.026-3.377 2.146-6.391 5.337-7.585a8.308 8.308 0 019.068 2.197l-.897.795a7.097 7.097 0 00-7.745-1.876c-2.726 1.019-4.537 3.593-4.559 6.478z",transform:"translate(0 2)"}),a("path",{fill:"url(#".concat(i("b"),")"),d:"M.029 20.909c.022-3.354 2.475-6.208 5.815-6.764l.201 1.176c-2.764.46-4.794 2.82-4.812 5.596L.029 20.91z",transform:"translate(0 2)"}),a("path",{fill:"url(#".concat(i("c"),")"),d:"M8.246 24.737a10.625 10.625 0 010-15.131c4.219-4.178 11.06-4.178 15.279 0a10.89 10.89 0 011.384 1.678l-1.004.657a9.517 9.517 0 00-1.231-1.492c-3.75-3.713-9.828-3.713-13.577 0a9.442 9.442 0 000 13.445l-.851.843z",transform:"translate(0 2)"}),a("path",{fill:"url(#".concat(i("d"),")"),d:"M5.836 13.234c.404-1.332 1.33-2.56 2.41-3.628 4.219-4.178 11.06-4.178 15.279 0a10.89 10.89 0 011.384 1.678l-1.004.657a9.517 9.517 0 00-1.231-1.492c-3.75-3.713-9.828-3.713-13.577 0a9.474 9.474 0 00-2.074 3.06c-1.452 3.45-2.358 3.593-1.187-.275z",transform:"translate(0 2)"}),a("path",{fill:"url(#".concat(i("e"),")"),d:"M23.524 27.87H6.96a7.012 7.012 0 01-4.922-2.059A6.876 6.876 0 01.029 20.91l1.204.009a5.69 5.69 0 001.66 4.055 5.802 5.802 0 004.071 1.705h16.618c2.78.002 5.302-1.616 6.438-4.13a6.929 6.929 0 00-1.18-7.505l.897-.795a8.112 8.112 0 011.384 8.785c-1.329 2.943-4.279 4.837-7.534 4.838h-.063z",transform:"translate(0 2)"})))},iit=oit;var NO={};$(NO,{icon:()=>cit});var zKt=k(L());var ait=["title","titleId"];function eq(){return eq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function sit(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var uit=function(t){var n=t.title,r=t.titleId,o=lit(t,ait);return a("svg",eq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M.047 22.909l1.186.009a5.69 5.69 0 001.66 4.055 5.802 5.802 0 004.071 1.705h16.618c2.78.002 5.302-1.616 6.438-4.13a6.929 6.929 0 00-1.18-7.505l.897-.795a8.112 8.112 0 011.384 8.785c-1.329 2.943-4.279 4.837-7.534 4.838H6.96a7.012 7.012 0 01-4.922-2.06A6.876 6.876 0 01.029 22.91h.018-.018c.017-2.71 1.62-5.091 3.997-6.2.114-.054.32.29.619 1.03a5.71 5.71 0 00-3.412 5.18l-1.186-.01zm4.215-9.787a.604.604 0 01-.3-.08l-2.844-1.625a.617.617 0 01-.295-.734.608.608 0 01.868-.315l2.843 1.625c.29.159.405.514.261.81a.603.603 0 01-.533.32zm4.914-4.864a.603.603 0 01-.522-.298L7.012 5.144a.615.615 0 01.115-.782.606.606 0 01.91.157l1.64 2.813a.617.617 0 01-.158.819c-.1.07-.22.107-.343.107zm6.107-2.416V2.635a.624.624 0 01.575-.634.605.605 0 01.443.164.593.593 0 01.186.431v3.285a.593.593 0 01-.186.43.605.605 0 01-.443.165.624.624 0 01-.575-.634zm7.312 2.416a.604.604 0 01-.343-.107.617.617 0 01-.159-.82l1.64-2.812a.602.602 0 01.911-.157c.223.2.271.528.115.782L23.117 7.96a.603.603 0 01-.522.298zm4.914 4.864a.602.602 0 01-.534-.319.616.616 0 01.262-.81l2.818-1.611a.626.626 0 01.783.112.592.592 0 01-.156.906l-2.873 1.643a.604.604 0 01-.3.08zM16.366 19.78H16a2.322 2.322 0 01-.302 0c-.09-.011-.152.05-.086-.196a8.204 8.204 0 015.057-5.533 8.308 8.308 0 019.068 2.197l-.897.795a7.097 7.097 0 00-7.745-1.876 7.009 7.009 0 00-4.288 4.613c-.115.399-.115.399 0 0h-.44zM6.154 23.826a10.626 10.626 0 012.092-12.22c4.219-4.178 11.06-4.178 15.279 0l-.851.843c-3.75-3.713-9.828-3.713-13.577 0A9.442 9.442 0 007.264 23.36a6.99 6.99 0 00-.418.172l-.212.094-.162.077-.094.03-.09.039c.648-.282.965-.42.95-.412-.026.015-1.073.489-1.084.466z"}))},cit=uit;var FO={};$(FO,{icon:()=>hit});var DKt=k(L());var pit=["title","titleId"];function tq(){return tq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function dit(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var mit=function(t){var n=t.title,r=t.titleId,o=fit(t,pit);return a("svg",tq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M21.565 17.623c-1.173 0-2.225.52-2.945 1.337l-1.845-1.306c.196-.54.309-1.118.309-1.724 0-.596-.109-1.165-.298-1.696l1.84-1.293a3.914 3.914 0 002.939 1.331 3.93 3.93 0 003.926-3.926 3.93 3.93 0 00-3.926-3.926 3.93 3.93 0 00-3.926 3.926c0 .387.058.761.163 1.115l-1.842 1.293a5.068 5.068 0 00-3.14-1.825V8.71a3.932 3.932 0 003.119-3.842A3.93 3.93 0 0012.012.941a3.93 3.93 0 00-3.926 3.926 3.93 3.93 0 003.048 3.824v2.249a5.075 5.075 0 00-4.193 4.99 5.075 5.075 0 004.229 4.995V23.3a3.931 3.931 0 00-3.084 3.833 3.93 3.93 0 003.926 3.926 3.93 3.93 0 003.927-3.926 3.931 3.931 0 00-3.084-3.833v-2.375a5.07 5.07 0 003.087-1.795l1.857 1.314c-.103.351-.16.721-.16 1.105a3.93 3.93 0 003.926 3.926 3.93 3.93 0 003.926-3.926 3.93 3.93 0 00-3.926-3.926zm0-9.18c1.05 0 1.903.853 1.903 1.903s-.854 1.903-1.903 1.903a1.906 1.906 0 01-1.904-1.903c0-1.05.854-1.904 1.904-1.904zM10.109 4.866c0-1.05.854-1.903 1.903-1.903 1.05 0 1.904.854 1.904 1.903 0 1.05-.854 1.904-1.904 1.904a1.906 1.906 0 01-1.903-1.904zm3.807 22.266c0 1.05-.854 1.903-1.904 1.903a1.906 1.906 0 01-1.903-1.903c0-1.05.854-1.904 1.903-1.904 1.05 0 1.904.854 1.904 1.904zm-1.904-8.548a2.658 2.658 0 01-2.655-2.655 2.658 2.658 0 012.655-2.655 2.658 2.658 0 012.655 2.655 2.658 2.658 0 01-2.655 2.655zm9.553 4.867a1.906 1.906 0 01-1.904-1.903c0-1.05.854-1.904 1.904-1.904 1.05 0 1.903.854 1.903 1.904 0 1.05-.854 1.903-1.903 1.903z"}))},hit=mit;var WO={};$(WO,{icon:()=>wit});var FKt=k(L());var git=["title","titleId"];function rq(){return rq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function yit(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var bit=function(t){var n=t.title,r=t.titleId,o=vit(t,git);return a("svg",rq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"none",fillRule:"evenodd"},a("path",{fill:"#F04E98",d:"M4 0v28.789L28.935.017z"}),a("path",{className:"euiIcon__fillNegative",d:"M4 12v16.789l11.906-13.738A24.721 24.721 0 004 12"}),a("path",{fill:"#00BFB3",d:"M18.479 16.664L6.268 30.754l-1.073 1.237h23.191c-1.252-6.292-4.883-11.719-9.908-15.327"})))},wit=bit;var BO={};$(BO,{icon:()=>jit});var BKt=k(L());var Oit=["title","titleId"];function nq(){return nq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function _it(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Sit=function(t){var n=t.title,r=t.titleId,o=xit(t,Oit);return a("svg",nq({width:32,height:32,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M15.89.003a2.14 2.14 0 011.03.206l11.127 5.304a2.11 2.11 0 011.15 1.429l2.75 11.921a2.09 2.09 0 01-.412 1.783l-7.697 9.56c-.404.5-1.016.792-1.663.791L9.827 31c-.648 0-1.26-.292-1.664-.793l-7.7-9.558a2.107 2.107 0 01-.41-1.783L2.798 6.945a2.11 2.11 0 011.151-1.43L15.074.21c.255-.122.532-.192.815-.206zM16 4.06c-.368 0-.667.33-.667.738l.002.019c0 .055-.003.122-.002.17.01.236.06.416.091.632.057.464.103.849.074 1.206-.028.135-.127.258-.216.344l-.015.281a8.569 8.569 0 00-5.555 2.666 9.98 9.98 0 01-.24-.17c-.12.016-.24.053-.396-.038-.298-.2-.57-.477-.898-.81-.15-.16-.26-.31-.438-.464-.04-.035-.103-.082-.148-.118a.793.793 0 00-.464-.175.642.642 0 00-.53.234c-.23.288-.156.726.163.98l.01.008c.044.035.098.08.138.11.19.14.363.212.552.323.398.246.729.45.99.695.103.108.12.3.134.383l.214.19a8.592 8.592 0 00-1.36 5.998l-.278.08c-.074.096-.177.245-.286.29-.343.107-.728.147-1.194.195-.218.018-.407.008-.639.051-.05.01-.122.029-.177.042l-.006.001-.01.003c-.393.095-.645.455-.564.81.082.355.465.57.86.485l.01-.001.013-.004c.055-.012.124-.026.172-.039.228-.06.393-.15.597-.228.44-.158.806-.29 1.161-.341.149-.012.305.091.383.135l.29-.05a8.654 8.654 0 003.84 4.787l-.12.29c.043.113.091.265.059.376-.13.334-.35.688-.603 1.081-.122.182-.247.324-.357.532-.026.05-.06.126-.086.179-.17.365-.045.786.284.944.33.16.741-.008.919-.375l.001-.001v-.002c.025-.051.061-.12.083-.169.094-.215.125-.4.192-.609.176-.442.273-.905.515-1.194.067-.08.175-.11.287-.14l.151-.273a8.616 8.616 0 006.145.016l.142.256c.114.037.239.056.34.206.182.31.306.675.457 1.118.066.208.1.393.194.61.021.048.057.117.082.17.177.367.59.535.92.376.33-.158.455-.58.284-.945-.026-.052-.06-.129-.087-.179-.11-.208-.235-.348-.357-.53-.252-.393-.461-.72-.59-1.055-.055-.173.009-.28.05-.392-.025-.029-.079-.192-.11-.268a8.654 8.654 0 003.838-4.822c.086.014.236.04.285.05.1-.066.192-.152.373-.138.355.052.72.183 1.16.341.205.078.37.17.598.23.048.013.117.025.172.037l.013.004.01.002c.395.085.778-.131.86-.486.08-.355-.171-.715-.564-.81-.057-.013-.138-.035-.193-.045-.232-.044-.42-.033-.64-.051-.465-.049-.85-.089-1.193-.196-.14-.054-.239-.22-.287-.289l-.27-.078a8.572 8.572 0 00-.139-3.104 8.599 8.599 0 00-1.247-2.88c.068-.062.199-.177.236-.21.01-.12.001-.245.125-.377.262-.246.592-.45.99-.695.19-.11.364-.182.554-.322.043-.032.101-.082.146-.118.32-.255.393-.693.164-.98-.23-.287-.674-.314-.993-.06-.046.036-.107.083-.148.118-.179.153-.29.305-.44.464-.328.333-.6.611-.898.812-.129.075-.318.049-.404.044l-.253.18a8.732 8.732 0 00-5.528-2.666 16.036 16.036 0 01-.015-.297c-.087-.083-.192-.154-.218-.333-.029-.357.02-.742.076-1.206.03-.216.082-.396.09-.632.003-.053 0-.13 0-.189 0-.408-.299-.738-.667-.738zm-.834 5.156l-.198 3.488-.014.007a.587.587 0 01-.932.449l-.006.002-2.864-2.027a6.862 6.862 0 014.014-1.919zm1.668 0a6.922 6.922 0 013.99 1.92l-2.846 2.015-.01-.004a.588.588 0 01-.933-.448l-.003-.001-.198-3.482zm-6.72 3.222l2.614 2.335-.003.014a.585.585 0 01-.23 1.008l-.003.01-3.352.967a6.838 6.838 0 01.973-4.334zm11.753.001c.388.63.683 1.331.858 2.093a6.91 6.91 0 01.145 2.229l-3.37-.97-.002-.013a.586.586 0 01-.23-1.008l-.002-.007 2.6-2.324zm-6.404 2.515h1.071l.666.83-.239 1.038-.962.461-.964-.463-.24-1.037.668-.83zm3.435 2.844a.585.585 0 01.135.01l.005-.008 3.468.586a6.858 6.858 0 01-2.776 3.481l-1.346-3.246.004-.005a.586.586 0 01.51-.818zm-5.824.014a.587.587 0 01.53.817l.01.012-1.331 3.214a6.886 6.886 0 01-2.767-3.458l3.437-.582.006.007a.595.595 0 01.115-.01zm2.904 1.407a.582.582 0 01.275.059.583.583 0 01.263.25h.013l1.694 3.057c-.22.073-.446.136-.677.189a6.896 6.896 0 01-3.758-.194l1.69-3.05h.003a.588.588 0 01.497-.31z",fill:"#326CE5"}))},jit=Sit;var HO={};$(HO,{icon:()=>Cit});var VKt=k(L());var Iit=["title","titleId"];function oq(){return oq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function kit(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Eit=function(t){var n=t.title,r=t.titleId,o=Pit(t,Iit);return a("svg",oq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fill:"#0080D5",d:"M2 10v13a9 9 0 019 9h13c0-12.15-9.85-22-22-22"}),a("path",{className:"euiIcon__fillNegative",d:"M14 13.565V32h10c0-7.722-3.981-14.51-10-18.436"}),a("path",{fill:"#00BFB3",d:"M14 0v10.226C21.666 14.468 26.869 22.636 26.869 32H30V16c0-8.837-7.163-16-16-16"}))},Cit=Eit;var VO={};$(VO,{icon:()=>zit});var UKt=k(L());var Ait=["title","titleId"];function iq(){return iq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Tit(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Rit=function(t){var n=t.title,r=t.titleId,o=Mit(t,Ait);return a("svg",iq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fill:"#3EBEB0",d:"M19 32h11V20H19z"}),a("path",{fill:"#FEC514",d:"M4 0H3v20h13v-8C16 5.373 10.627 0 4 0"}),a("path",{className:"euiIcon__fillNegative",d:"M3 20c0 6.627 5.373 12 12 12h1V20H3z"}))},zit=Rit;var qO={};$(qO,{icon:()=>Wit});var JKt=k(L());var Lit=["title","titleId"];function aq(){return aq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Nit(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Fit=function(t){var n=t.title,r=t.titleId,o=Dit(t,Lit);return a("svg",aq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fill:"#22A7F3",d:"M25.5 9.5c0 6.65-9.5 11.425-9.5 11.425S6.5 16.15 6.5 9.5A9.5 9.5 0 0116 0a9.5 9.5 0 019.5 9.5"}),a("path",{className:"euiIcon__fillNegative",d:"M16 20.925s4.326-2.183 7.141-5.645l-2.505-1.878a7.725 7.725 0 00-9.272 0L8.859 15.28C11.674 18.742 16 20.925 16 20.925"}),a("path",{fill:"#FA744E",d:"M25.53 17.073a21.124 21.124 0 01-2.834 2.916c-2.62 2.235-5.239 3.561-5.349 3.616L16 24.282l-1.348-.677c-.109-.055-2.728-1.381-5.349-3.616a21.182 21.182 0 01-2.834-2.916L0 21.925l11.364 8.523a7.724 7.724 0 009.271 0L32 21.925l-6.47-4.852z"}))},Wit=Fit;var UO={};$(UO,{icon:()=>Uit});var XKt=k(L());var Bit=["title","titleId"];function lq(){return lq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Vit(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var qit=function(t){var n=t.title,r=t.titleId,o=Hit(t,Bit),i=Lr("logo_memcached");return a("svg",lq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("defs",null,a("radialGradient",{id:i("c"),cx:"41.406%",cy:"42.708%",r:"0%",fx:"41.406%",fy:"42.708%"},a("stop",{offset:"0%",stopColor:"#DB7C7C"}),a("stop",{offset:"100%",stopColor:"#C83737"})),a("radialGradient",{id:i("d"),cx:"44.271%",cy:"42.708%",r:"0%",fx:"44.271%",fy:"42.708%"},a("stop",{offset:"0%",stopColor:"#DB7C7C"}),a("stop",{offset:"100%",stopColor:"#C83737"})),a("linearGradient",{id:i("a"),x1:"50%",x2:"50%",y1:"100%",y2:"0%"},a("stop",{offset:"0%",stopColor:"#574C4A"}),a("stop",{offset:"100%",stopColor:"#80716D"})),a("linearGradient",{id:i("b"),x1:"88.778%",x2:"30.149%",y1:"98.342%",y2:"-8.68%"},a("stop",{offset:"0%",stopColor:"#268D83"}),a("stop",{offset:"100%",stopColor:"#2EA19E"}))),a("g",{fill:"none"},a("path",{fill:"url(#".concat(i("a"),")"),d:"M0 21.567V10.352C0 1.294 1.293 0 10.342 0h11.236c9.049 0 10.341 1.294 10.341 10.352v11.215c0 9.059-1.292 10.352-10.341 10.352H10.342C1.292 31.92 0 30.626 0 21.567z"}),a("path",{fill:"url(#".concat(i("b"),")"),d:"M6.889 6.016C5.32 15.96 6.14 25.27 6.14 25.27h4.904c-.466-2.483-2.14-13.824-.748-13.861.746.118 4.156 9.621 4.156 9.621s.751-.093 1.507-.093c.755 0 1.506.093 1.506.093s3.41-9.503 4.157-9.621c1.392.037-.282 11.378-.748 13.86h4.904s.82-9.31-.748-19.253h-4.54c-.865.01-4.153 5.777-4.531 5.777-.378 0-3.666-5.767-4.53-5.777H6.889z"}),a("path",{fill:"url(#".concat(i("c"),")"),d:"M14.993 24.109a1.16 1.16 0 11-2.322 0 1.16 1.16 0 012.322 0z"}),a("path",{fill:"url(#".concat(i("d"),")"),d:"M19.249 24.109a1.16 1.16 0 11-2.322 0 1.16 1.16 0 012.322 0z"}),a("path",{fill:"#000",d:"M24.8 6.345c.707 4.79.873 9.388.86 12.813-.013 3.503-.214 5.78-.214 5.78h-4.128l-.443.332h4.904s.82-9.31-.748-19.254l-.232.329zm-12.996-.121c1.288 1.433 3.516 5.237 3.823 5.237-.817-1.045-2.823-4.378-3.823-5.237zm-1.84 4.852c-1.392.038.282 11.379.749 13.861H6.43l-.29.333h4.904c-.464-2.47-2.123-13.71-.769-13.861-.126-.19-.235-.32-.311-.333zm11.326 0c-.746.119-4.156 9.622-4.156 9.622s-.751-.094-1.507-.094c-.447 0-.832.028-1.092.052l-.082.374s.751-.093 1.507-.093c.755 0 1.506.093 1.506.093s3.385-9.44 4.146-9.621c-.082-.208-.183-.33-.322-.333z",opacity:.1}),a("path",{fill:"#FFF",d:"M6.889 6.016C5.32 15.96 6.14 25.27 6.14 25.27l.289-.325c-.148-2.197-.543-10.14.791-18.597h4.541c.096.002.225.08.374.208-.297-.33-.544-.538-.706-.54H6.889zm13.601 0c-.864.01-4.152 5.777-4.53 5.777.154.197.279.333.332.333.378 0 3.666-5.767 4.53-5.777h4.008l.2-.333h-4.54zm-9.881 5.725c1.103 1.657 3.844 9.29 3.844 9.29l.08-.373c-.676-1.856-3.256-8.814-3.903-8.917h-.021zm11.346 0c.74 1.887-.66 11.295-1.08 13.529l.444-.348c.568-3.331 1.936-13.146.636-13.18z",opacity:.3})))},Uit=qit;var $O={};$($O,{icon:()=>Kit});var QKt=k(L());var $it=["title","titleId"];function sq(){return sq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Git(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Xit=function(t){var n=t.title,r=t.titleId,o=Jit(t,$it);return a("svg",sq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"none",fillRule:"evenodd"},a("path",{fill:"#F04E98",d:"M2 32h28V20l-6.465-6.465a5 5 0 00-7.07 0L2 28v4z"}),a("path",{className:"euiIcon__fillNegative",d:"M16.465 13.535l-3.536 3.536a9.965 9.965 0 007.07 2.93 9.965 9.965 0 007.072-2.93l-3.536-3.536a5 5 0 00-7.07 0"}),a("path",{fill:"#FEC514",d:"M14.343 11.414A7.951 7.951 0 0120 9.071c2.137 0 4.146.832 5.657 2.343l3.207 3.207A9.955 9.955 0 0030 10.001c0-5.524-4.477-10-10-10-5.522 0-10 4.476-10 10 0 1.667.414 3.237 1.137 4.62l3.206-3.207z"})))},Kit=Xit;var JO={};$(JO,{icon:()=>tat});var eYt=k(L());var Yit=["title","titleId"];function uq(){return uq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Zit(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var eat=function(t){var n=t.title,r=t.titleId,o=Qit(t,Yit);return a("svg",uq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"none"},a("path",{fill:"#FFF",d:"M16.844 31.847l-.847-.29s.104-4.315-1.445-4.625c-1.032-1.198.165-50.8 3.882-.165 0 0-1.28.64-1.507 1.735-.248 1.074-.083 3.345-.083 3.345z"}),a("path",{fill:"#A6A385",d:"M16.844 31.847l-.847-.29s.104-4.315-1.445-4.625c-1.032-1.198.165-50.8 3.882-.165 0 0-1.28.64-1.507 1.735-.248 1.074-.083 3.345-.083 3.345z"}),a("path",{fill:"#FFF",d:"M17.299 27.676s7.413-4.874 5.678-15.013c-1.672-7.372-5.616-9.788-6.05-10.718-.475-.66-.93-1.817-.93-1.817l.31 20.506c0 .02-.64 6.278.992 7.042"}),a("path",{fill:"#499D4A",d:"M17.299 27.676s7.413-4.874 5.678-15.013c-1.672-7.372-5.616-9.788-6.05-10.718-.475-.66-.93-1.817-.93-1.817l.31 20.506c0 .02-.64 6.278.992 7.042"}),a("path",{fill:"#FFF",d:"M15.564 27.944s-6.96-4.75-6.546-13.113c.392-8.363 5.307-12.473 6.257-13.216.62-.66.64-.909.681-1.57.434.93.351 13.898.413 15.426.186 5.886-.33 11.358-.805 12.473z"}),a("path",{fill:"#58AA50",d:"M15.564 27.944s-6.96-4.75-6.546-13.113c.392-8.363 5.307-12.473 6.257-13.216.62-.66.64-.909.681-1.57.434.93.351 13.898.413 15.426.186 5.886-.33 11.358-.805 12.473z"})))},tat=eat;var GO={};$(GO,{icon:()=>aat});var rYt=k(L());var rat=["title","titleId"];function cq(){return cq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function oat(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var iat=function(t){var n=t.title,r=t.titleId,o=nat(t,rat);return a("svg",cq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"#00546B"},a("path",{d:"M29.456 24.276c-1.74-.043-3.088.131-4.219.61-.326.13-.848.13-.892.543.174.174.196.457.348.696.261.435.718 1.022 1.131 1.327.457.348.914.696 1.392 1 .848.522 1.805.827 2.631 1.349.48.304.957.695 1.436 1.022.24.173.391.456.696.565v-.065c-.153-.196-.196-.479-.348-.696-.218-.218-.435-.413-.653-.63a10.316 10.316 0 00-2.261-2.197c-.696-.479-2.219-1.131-2.501-1.936l-.044-.043c.479-.044 1.044-.218 1.5-.348.74-.196 1.414-.153 2.175-.348.348-.087.696-.196 1.044-.305v-.195c-.391-.392-.674-.914-1.087-1.284-1.11-.957-2.327-1.892-3.588-2.674-.675-.435-1.545-.718-2.262-1.088-.261-.13-.696-.196-.848-.413-.392-.479-.61-1.11-.892-1.675a54.922 54.922 0 01-1.783-3.784c-.392-.848-.63-1.696-1.11-2.479-2.24-3.697-4.675-5.937-8.416-8.134-.804-.456-1.761-.652-2.783-.891-.544-.022-1.088-.065-1.631-.087-.348-.152-.696-.566-1-.761-1.24-.783-4.437-2.48-5.35-.24-.588 1.414.87 2.806 1.37 3.524.37.5.848 1.065 1.109 1.63.152.37.195.762.347 1.153.348.957.675 2.023 1.131 2.914.24.457.5.936.805 1.349.174.239.478.348.544.74-.305.434-.327 1.087-.5 1.63-.783 2.458-.479 5.502.63 7.307.348.544 1.175 1.74 2.284 1.284.978-.392.76-1.632 1.043-2.719.066-.261.022-.435.153-.609v.044c.304.609.609 1.196.891 1.805.675 1.065 1.849 2.174 2.828 2.914.522.391.935 1.065 1.587 1.305v-.066h-.043c-.13-.195-.327-.282-.5-.435-.392-.39-.827-.87-1.131-1.304-.914-1.218-1.719-2.567-2.436-3.958-.348-.675-.653-1.414-.935-2.088-.13-.261-.13-.653-.348-.783-.327.478-.805.892-1.044 1.479-.413.935-.457 2.088-.61 3.284-.086.021-.043 0-.086.043-.696-.174-.935-.891-1.196-1.5-.653-1.545-.761-4.024-.196-5.807.152-.457.805-1.892.544-2.327-.13-.413-.566-.652-.805-.979a8.764 8.764 0 01-.783-1.392c-.522-1.217-.783-2.566-1.348-3.784-.261-.565-.718-1.152-1.087-1.674-.414-.587-.87-1-1.197-1.697-.108-.239-.26-.63-.087-.891.044-.174.13-.24.305-.283.283-.24 1.087.065 1.37.196.805.326 1.479.63 2.153 1.087.304.218.63.631 1.022.74h.457c.696.152 1.479.043 2.131.239 1.153.37 2.196.913 3.132 1.5a19.294 19.294 0 016.785 7.438c.261.5.37.957.609 1.479.457 1.066 1.022 2.153 1.479 3.197.456 1.022.891 2.066 1.544 2.914.326.457 1.63.696 2.218.935.435.196 1.11.37 1.5.61.74.456 1.48.978 2.175 1.478.348.26 1.436.805 1.501 1.24z"}),a("path",{d:"M7.273 5.378c-.37 0-.63.043-.891.109v.043h.043c.174.348.479.587.696.892.174.348.326.696.5 1.044l.044-.044c.304-.217.457-.565.457-1.087-.131-.152-.153-.305-.261-.457-.13-.218-.414-.326-.588-.5z"})))},aat=iat;var XO={};$(XO,{icon:()=>pat});var oYt=k(L());var lat=["title","titleId"];function pq(){return pq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function uat(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var cat=function(t){var n=t.title,r=t.titleId,o=sat(t,lat);return a("svg",pq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"none",fillRule:"evenodd"},a("path",{fill:"#119639",d:"M16 0l13.856 8v16L16 32 2.144 24V8z"}),a("path",{fill:"#FFF",fillRule:"nonzero",d:"M11.17 13.512v8.376a1.607 1.607 0 11-3.215 0V9.632c0-1.432 1.731-2.149 2.744-1.136l9.51 9.512V9.632a1.607 1.607 0 013.215 0v12.256c0 1.432-1.731 2.149-2.744 1.136l-9.51-9.512z"})))},pat=cat;var KO={};$(KO,{icon:()=>gat});var aYt=k(L());var fat=["title","titleId"];function fq(){return fq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function mat(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var hat=function(t){var n=t.title,r=t.titleId,o=dat(t,fat);return a("svg",fq({width:32,height:32,viewBox:"0 0 32 32",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M10 32H7.238C3.793 32 1 28.865 1 24.998V15h9v17z",fill:"#F04E98"}),a("path",{className:"euiIcon__fillNegative",d:"M10 32h9V8h-9z"}),a("path",{d:"M31 32h-9V0l1.973.024C27.866.072 31 3.731 31 8.228V32z",fill:"#07C"}))},gat=hat;var YO={};$(YO,{icon:()=>Oat});var sYt=k(L());var vat=["title","titleId"];function dq(){return dq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function bat(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var wat=function(t){var n=t.title,r=t.titleId,o=yat(t,vat);return a("svg",dq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"none"},a("path",{fill:"#A596FF",d:"M31.907.032v7.969l-7.952 7.951V7.967L31.907.032"}),a("path",{fill:"#333",d:"M16.003.032v7.969l7.952 7.951V7.967L16.003.032"}),a("path",{fill:"#A596FF",d:"M31.923 31.855h-7.968l-7.952-7.951h7.985l7.935 7.951"}),a("path",{fill:"#333",d:"M31.923 15.952h-7.968l-7.952 7.952h7.985l7.935-7.952"}),a("path",{fill:"#A596FF",d:"M.1 31.872v-7.968l7.952-7.952v7.985L.1 31.872"}),a("path",{fill:"#333",d:"M16.004 31.872v-7.968l-7.952-7.952v7.985l7.952 7.935"}),a("path",{fill:"#A596FF",d:"M.084.048h7.968L16.004 8H8.019L.084.048"}),a("path",{fill:"#333",d:"M.084 15.952h7.968L16.004 8H8.019L.084 15.952"})))},Oat=wat;var QO={};$(QO,{icon:()=>Iat});var cYt=k(L());var xat=["title","titleId"];function mq(){return mq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Sat(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var jat=function(t){var n=t.title,r=t.titleId,o=_at(t,xat),i=Lr("logo_php");return a("svg",mq({xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("defs",null,a("path",{id:i("a"),d:"M.028 7.854C.028 3.534 6.688.03 14.902.03s14.874 3.503 14.874 7.824c0 4.322-6.66 7.825-14.874 7.825-8.215 0-14.874-3.503-14.874-7.825"}),a("path",{id:i("d"),d:"M0 17.43h30.987V0H0z"}),a("path",{id:i("f"),d:"M0 17.43h30.987V0H0z"}),a("radialGradient",{id:i("b"),cx:"30.02%",cy:"82.422%",r:"124.814%",fx:"30.02%",fy:"82.422%",gradientTransform:"matrix(.52604 0 0 1 .142 0)"},a("stop",{offset:"0%",stopColor:"#AEB2D5"}),a("stop",{offset:"30%",stopColor:"#AEB2D5"}),a("stop",{offset:"75%",stopColor:"#484C89"}),a("stop",{offset:"100%",stopColor:"#484C89"}))),a("g",{fill:"none",fillRule:"evenodd",transform:"matrix(1 0 0 -1 .026 25.413)"},a("g",{transform:"translate(.592 .86)"},a("mask",{id:i("c"),fill:"#fff"},a("use",{xlinkHref:"#".concat(i("a"))})),a("g",{fill:"url(#".concat(i("b"),")"),fillRule:"nonzero",mask:"url(#".concat(i("c"),")")},a("path",{d:"M.028 7.854C.028 3.534 6.688.03 14.902.03s14.874 3.503 14.874 7.824c0 4.322-6.66 7.825-14.874 7.825-8.215 0-14.874-3.503-14.874-7.825"}))),a("mask",{id:i("e"),fill:"#fff"},a("use",{xlinkHref:"#".concat(i("d"))})),a("g",{mask:"url(#".concat(i("e"),")")},a("path",{fill:"#777BB3",fillRule:"nonzero",d:"M15.494 1.472c7.894 0 14.293 3.243 14.293 7.243s-6.4 7.244-14.293 7.244c-7.894 0-14.293-3.243-14.293-7.244 0-4 6.4-7.243 14.293-7.243"})),a("mask",{id:i("g"),fill:"#fff"},a("use",{xlinkHref:"#".concat(i("f"))})),a("g",{fillRule:"nonzero",mask:"url(#".concat(i("g"),")")},a("path",{fill:"#000",d:"M8.701 7.817c.65 0 1.134.12 1.44.356.304.233.513.638.623 1.202.103.528.064.896-.116 1.095-.183.203-.58.306-1.177.306H8.433l-.575-2.959h.843zM5.31 4.172a.161.161 0 00-.159.193l1.524 7.84c.015.076.082.131.159.131h3.284c1.033 0 1.801-.28 2.284-.833.485-.556.635-1.333.446-2.309a3.686 3.686 0 00-.395-1.098 3.676 3.676 0 00-.727-.91 3.189 3.189 0 00-1.197-.718c-.43-.14-.983-.21-1.643-.21h-1.33l-.38-1.955a.161.161 0 00-.158-.13H5.309z"}),a("path",{fill:"#FFF",d:"M8.566 10.615h.905c.722 0 .972-.158 1.058-.253.141-.157.168-.487.077-.956-.102-.524-.291-.896-.563-1.105-.277-.214-.729-.322-1.341-.322h-.648l.512 2.636zm1.551 1.883H6.833a.323.323 0 01-.317-.261L4.992 4.396a.323.323 0 01.317-.385h1.708c.155 0 .287.11.317.262l.354 1.823h1.197c.677 0 1.247.074 1.694.22.46.149.882.402 1.256.752.31.284.564.604.758.95.193.345.331.731.412 1.146.2 1.027.038 1.85-.482 2.446-.515.59-1.325.888-2.406.888zM7.663 7.656h1.039c.688 0 1.201.13 1.538.39.337.259.565.692.683 1.299.113.583.061.994-.155 1.233-.216.24-.648.36-1.297.36H8.3l-.638-3.282zm2.454 4.52c.989 0 1.71-.26 2.162-.779.453-.518.59-1.242.41-2.172a3.51 3.51 0 00-.378-1.05 3.502 3.502 0 00-.695-.87 3.017 3.017 0 00-1.137-.683c-.417-.135-.948-.203-1.594-.203H7.422l-.405-2.085H5.309l1.524 7.841h3.284z"}),a("path",{fill:"#000",d:"M16.763 6.257a.161.161 0 00-.159.192l.674 3.47c.064.33.049.566-.044.666-.057.061-.228.164-.732.164H15.28l-.847-4.361a.161.161 0 00-.159-.131H12.58a.161.161 0 00-.159.192l1.524 7.841c.015.076.082.13.159.13h1.694a.161.161 0 00.159-.191l-.368-1.893h1.314c1 0 1.68-.176 2.075-.54.403-.37.529-.962.374-1.76l-.71-3.648a.161.161 0 00-.158-.131h-1.721z"}),a("path",{fill:"#FFF",d:"M15.799 14.582h-1.695a.323.323 0 01-.317-.261L12.263 6.48a.323.323 0 01.317-.385h1.695c.154 0 .287.11.317.262l.822 4.23h1.088c.504 0 .61-.107.614-.112.03-.033.07-.185.004-.526l-.674-3.47a.323.323 0 01.317-.384h1.721c.155 0 .288.11.317.262l.71 3.648c.166.857.023 1.5-.424 1.91-.426.392-1.14.582-2.184.582h-1.118l.33 1.7a.323.323 0 01-.316.385m0-.323l-.406-2.084h1.51c.95 0 1.605-.166 1.966-.497.36-.332.468-.869.324-1.611l-.709-3.649h-1.721l.674 3.47c.077.394.048.663-.085.807-.133.143-.416.215-.85.215h-1.354l-.873-4.492H12.58l1.524 7.841h1.695"}),a("path",{fill:"#000",d:"M22.033 7.817c.65 0 1.134.12 1.44.356.304.233.513.638.623 1.202.103.528.064.896-.116 1.095-.183.203-.58.306-1.177.306h-1.038l-.575-2.959h.843zm-3.392-3.645a.161.161 0 00-.159.193l1.524 7.84c.015.076.082.131.159.131h3.284c1.033 0 1.801-.28 2.284-.833.485-.556.635-1.333.446-2.309a3.689 3.689 0 00-.395-1.098 3.676 3.676 0 00-.727-.91 3.189 3.189 0 00-1.197-.718c-.43-.14-.983-.21-1.643-.21h-1.33l-.38-1.955a.161.161 0 00-.158-.13H18.64z"}),a("path",{fill:"#FFF",d:"M21.898 10.615h.905c.722 0 .972-.158 1.058-.253.141-.157.168-.487.077-.956-.102-.524-.292-.896-.563-1.105-.277-.214-.729-.322-1.341-.322h-.648l.512 2.636zm1.551 1.883h-3.284a.323.323 0 01-.317-.261l-1.524-7.841a.323.323 0 01.317-.385h1.708c.155 0 .287.11.317.262l.354 1.823h1.197c.677 0 1.247.074 1.694.22.46.149.882.402 1.256.752.31.284.564.604.758.95.193.345.331.731.412 1.146.2 1.027.038 1.85-.482 2.446-.515.59-1.325.888-2.406.888zm-2.454-4.842h1.039c.688 0 1.201.13 1.538.39.337.259.565.692.683 1.299.113.583.061.994-.155 1.233-.216.24-.648.36-1.297.36h-1.17l-.638-3.282zm2.454 4.52c.989 0 1.71-.26 2.162-.779.454-.518.59-1.242.41-2.172a3.51 3.51 0 00-.378-1.05 3.502 3.502 0 00-.695-.87 3.017 3.017 0 00-1.137-.683c-.417-.135-.948-.203-1.594-.203h-1.463l-.405-2.085h-1.708l1.524 7.841h3.284z"}))))},Iat=jat;var ZO={};$(ZO,{icon:()=>Aat});var dYt=k(L());var Pat=["title","titleId"];function hq(){return hq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Eat(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Cat=function(t){var n=t.title,r=t.titleId,o=kat(t,Pat);return a("svg",hq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"none"},a("path",{fill:"#000",d:"M31.876 19.162c-.192-.564-.695-.956-1.345-1.05-.306-.045-.657-.026-1.072.057-.724.145-1.261.2-1.654.211 1.48-2.422 2.683-5.185 3.376-7.785 1.12-4.205.521-6.12-.178-6.987-1.85-2.293-4.551-3.525-7.809-3.563a14.239 14.239 0 00-4.06.551 15.573 15.573 0 00-2.373-.21c-1.567-.024-2.952.307-4.135.988a19.334 19.334 0 00-2.92-.711C6.85.208 4.549.563 2.866 1.716.828 3.112-.117 5.537.058 8.926.113 10 .734 13.273 1.71 16.376c.561 1.784 1.16 3.266 1.78 4.404.878 1.614 1.818 2.564 2.873 2.906.591.19 1.666.325 2.796-.588.143.168.334.335.588.49.322.198.716.359 1.109.454 1.418.344 2.745.258 3.878-.224.007.195.013.382.017.543.008.262.015.518.025.758.067 1.62.181 2.881.518 3.763l.07.201c.168.5.449 1.335 1.164 1.99.74.677 1.637.885 2.457.885.412 0 .804-.052 1.149-.124 1.227-.255 2.621-.643 3.63-2.036.953-1.316 1.417-3.299 1.5-6.423l.031-.253.02-.165.225.019.058.004c1.25.055 2.779-.202 3.718-.625.741-.334 3.119-1.55 2.559-3.194"}),a("path",{fill:"#336791",d:"M29.738 19.481c-3.717.744-3.973-.476-3.973-.476 3.925-5.648 5.566-12.817 4.15-14.571C26.052-.352 19.365 1.91 19.254 1.97l-.036.006a13.657 13.657 0 00-2.48-.25c-1.682-.027-2.958.427-3.927 1.14 0 0-11.928-4.766-11.374 5.992.118 2.289 3.383 17.318 7.278 12.779a70.443 70.443 0 012.798-3.064c.683.44 1.501.665 2.358.584l.067-.055c-.02.206-.011.408.027.647-1.004 1.087-.709 1.277-2.714 1.678-2.03.405-.837 1.127-.06 1.316.944.229 3.127.553 4.602-1.45l-.058.23c.393.304.669 1.985.623 3.508-.047 1.524-.078 2.57.232 3.387.31.817.619 2.655 3.255 2.107 2.203-.458 3.345-1.644 3.503-3.623.113-1.407.368-1.199.384-2.457l.205-.595c.236-1.907.037-2.522 1.394-2.236l.33.028c1 .044 2.307-.156 3.074-.502 1.652-.743 2.632-1.985 1.003-1.659"}),a("path",{fill:"#FFF",d:"M13.51 9.882c-.335-.045-.639-.004-.792.11a.28.28 0 00-.12.187c-.02.133.077.282.136.358.169.216.414.365.658.398.035.004.07.007.105.007.405 0 .774-.307.807-.533.04-.283-.383-.472-.795-.527m11.099.009c-.032-.222-.44-.285-.826-.233-.386.052-.76.22-.73.443.026.173.348.468.73.468a.718.718 0 00.097-.006.947.947 0 00.53-.281c.135-.138.213-.291.199-.391"}),a("path",{fill:"#FFF",d:"M30.975 19.397c-.142-.416-.598-.55-1.356-.398-2.25.45-3.056.139-3.321-.05 1.75-2.584 3.189-5.708 3.965-8.623.368-1.38.57-2.663.587-3.708.019-1.147-.183-1.99-.598-2.505-1.675-2.075-4.134-3.189-7.11-3.22-2.047-.022-3.775.486-4.11.629a10.549 10.549 0 00-2.313-.288c-1.536-.024-2.864.332-3.963 1.06a18.131 18.131 0 00-3.22-.82c-2.61-.407-4.683-.098-6.163.918C1.608 3.605.793 5.773.951 8.836c.053 1.03.658 4.2 1.614 7.236 1.258 3.996 2.625 6.257 4.063 6.723.169.054.363.092.577.092.525 0 1.168-.23 1.838-1.01a64.894 64.894 0 012.532-2.778 4.18 4.18 0 001.822.475l.005.048c-.11.127-.217.255-.321.385-.44.542-.532.655-1.95.938-.403.08-1.473.294-1.489 1.022-.017.795 1.266 1.13 1.412 1.165.509.123 1 .184 1.467.184 1.138 0 2.14-.363 2.94-1.064-.025 2.834.097 5.628.448 6.479.288.696.99 2.4 3.208 2.399a5.3 5.3 0 001.078-.119c2.315-.48 3.32-1.473 3.71-3.66.208-1.17.565-3.961.733-5.459.354.107.81.156 1.304.156 1.029 0 2.216-.212 2.961-.547.837-.377 2.346-1.3 2.072-2.104zM25.462 9.278c-.008.442-.07.844-.137 1.262-.072.451-.145.917-.164 1.482-.019.55.052 1.123.12 1.676.14 1.118.282 2.268-.269 3.403a4.37 4.37 0 01-.243-.485c-.069-.161-.217-.42-.423-.777-.8-1.39-2.673-4.648-1.714-5.977.286-.396 1.01-.803 2.83-.584zm-2.206-7.49c2.667.058 4.777 1.025 6.27 2.876 1.146 1.42-.116 7.879-3.767 13.45l-.111-.135-.046-.056c.943-1.51.759-3.006.595-4.331-.068-.544-.132-1.058-.115-1.541.016-.511.086-.95.154-1.375.082-.522.167-1.063.144-1.701a.684.684 0 00.015-.24c-.06-.611-.78-2.441-2.247-4.098a10.094 10.094 0 00-3.572-2.604 12.407 12.407 0 012.68-.244zM8.334 21.307c-.737.86-1.246.695-1.414.641-1.091-.353-2.357-2.59-3.474-6.136-.966-3.069-1.53-6.155-1.575-7.02-.141-2.737.543-4.644 2.033-5.669 2.426-1.668 6.414-.67 8.016-.163-.023.022-.047.042-.07.065-2.63 2.575-2.567 6.974-2.56 7.243 0 .104.008.251.02.453.046.74.13 2.117-.095 3.677-.209 1.45.252 2.868 1.264 3.892.104.105.213.205.327.3-.45.467-1.43 1.502-2.472 2.717zm2.81-3.635c-.816-.826-1.186-1.974-1.017-3.15.238-1.648.15-3.083.103-3.854l-.016-.277c.384-.33 2.165-1.255 3.434-.973.58.129.932.511 1.08 1.17.759 3.406.1 4.825-.43 5.966-.109.235-.212.458-.3.687l-.068.178c-.173.45-.334.867-.434 1.264a3.325 3.325 0 01-2.352-1.011zm.133 4.594a2.07 2.07 0 01-.614-.256c.111-.051.31-.12.654-.19 1.668-.332 1.925-.567 2.487-1.26.13-.158.275-.338.478-.557.301-.328.44-.272.69-.172.202.082.4.328.48.599.037.128.08.37-.06.56-1.174 1.595-2.886 1.574-4.115 1.276zm8.725 7.873c-2.04.424-2.761-.586-3.237-1.74-.308-.744-.459-4.102-.351-7.81a.434.434 0 00-.02-.143 1.823 1.823 0 00-.057-.262c-.16-.54-.548-.99-1.013-1.178-.185-.074-.525-.21-.933-.11.087-.347.238-.74.402-1.165l.068-.178c.078-.202.175-.41.277-.632.554-1.194 1.313-2.829.49-6.522-.309-1.384-1.34-2.06-2.901-1.903-.936.094-1.793.46-2.22.67a7.255 7.255 0 00-.255.132c.12-1.394.57-4 2.255-5.647 1.062-1.038 2.475-1.55 4.196-1.523 3.393.054 5.569 1.742 6.796 3.15 1.058 1.211 1.631 2.433 1.86 3.091-1.72-.17-2.889.16-3.482.982-1.29 1.787.706 5.257 1.665 6.924.175.306.327.57.375.682.312.734.716 1.224 1.012 1.582.09.11.178.215.245.308-.521.146-1.456.482-1.371 2.164-.069.843-.558 4.793-.806 6.189-.328 1.843-1.028 2.53-2.995 2.939zm8.513-9.447c-.532.24-1.424.42-2.27.458-.935.043-1.411-.101-1.523-.19-.053-1.048.35-1.157.775-1.273a3.35 3.35 0 00.195-.058c.04.031.082.062.13.092.75.481 2.091.533 3.984.154l.02-.004c-.255.232-.692.542-1.31.821z"})))},Aat=Cat;var e7={};$(e7,{icon:()=>Lat});var hYt=k(L());var Mat=["title","titleId"];function gq(){return gq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Rat(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var zat=function(t){var n=t.title,r=t.titleId,o=Tat(t,Mat);return a("svg",gq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fill:"#E6522C",d:"M15.907.187C7.122.187 0 7.308 0 16.093S7.122 32 15.907 32c8.784 0 15.906-7.121 15.906-15.906S24.69.187 15.907.187zm0 29.77c-2.5 0-4.526-1.67-4.526-3.729h9.051c0 2.06-2.026 3.73-4.525 3.73zm7.475-4.963H8.43v-2.711h14.95v2.71zm-.054-4.107H8.473c-.05-.057-.1-.113-.147-.17-1.53-1.859-1.891-2.829-2.241-3.818-.006-.032 1.855.38 3.176.678 0 0 .679.157 1.672.338-.953-1.118-1.52-2.539-1.52-3.991 0-3.189 2.446-5.975 1.564-8.227.858.07 1.777 1.812 1.839 4.537.913-1.262 1.295-3.566 1.295-4.978 0-1.463.963-3.161 1.927-3.22-.86 1.417.223 2.63 1.184 5.642.361 1.132.315 3.035.594 4.243.092-2.508.523-6.167 2.114-7.43-.702 1.591.104 3.581.655 4.538.889 1.544 1.428 2.714 1.428 4.926 0 1.483-.548 2.88-1.472 3.971 1.05-.197 1.776-.374 1.776-.374l3.411-.666s-.495 2.038-2.4 4.001z"}))},Lat=zat;var t7={};$(t7,{icon:()=>Bat});var vYt=k(L());var Dat=["title","titleId"];function vq(){return vq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Fat(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Wat=function(t){var n=t.title,r=t.titleId,o=Nat(t,Dat);return a("svg",vq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fill:"#F60",d:"M30.083 13.197h-9.878c-.79-.088-1.391-.74-1.391-1.508V1.97c0-.83-.718-1.495-1.595-1.495h-3.456c-.885 0-1.595.672-1.595 1.495v9.82c-.043.74-.696 1.338-1.478 1.406H8.102c-.76-.088-1.348-.686-1.398-1.406V1.97c0-.83-.718-1.495-1.595-1.495H1.652C.768.476.058 1.148.058 1.97v28.358c0 .83.717 1.495 1.594 1.495h28.439c.884 0 1.594-.673 1.594-1.495V14.692c-.007-.829-.718-1.495-1.602-1.495zm-4.55 10.724c0 .829-.718 1.495-1.595 1.495H20.48c-.884 0-1.595-.673-1.595-1.495v-3.058c0-.83.718-1.495 1.595-1.495h3.457c.884 0 1.594.672 1.594 1.495v3.058z"}))},Bat=Wat;var r7={};$(r7,{icon:()=>$at});var bYt=k(L());var Hat=["title","titleId"];function yq(){return yq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function qat(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Uat=function(t){var n=t.title,r=t.titleId,o=Vat(t,Hat);return a("svg",yq({width:32,height:32,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{transform:"translate(0 3)",fill:"none"},a("path",{d:"M30.594 20.791c-1.689.875-10.438 4.451-12.3 5.416-1.863.966-2.898.956-4.37.257-1.471-.699-10.782-4.437-12.46-5.234-.838-.399-1.278-.735-1.278-1.052v-3.18s12.121-2.623 14.078-3.32c1.957-.699 2.636-.724 4.301-.118 1.666.607 11.623 2.393 13.27 2.992l-.001 3.135c0 .314-.38.659-1.24 1.104z",fill:"#A41E11"}),a("path",{d:"M30.594 17.61c-1.689.875-10.438 4.451-12.3 5.417-1.863.965-2.898.956-4.37.256-1.471-.698-10.782-4.438-12.46-5.234-1.676-.797-1.712-1.345-.064-1.987 1.647-.641 10.907-4.252 12.864-4.95 1.957-.698 2.636-.723 4.301-.117 1.666.607 10.363 4.048 12.009 4.647 1.646.6 1.71 1.093.02 1.968z",fill:"#D82C20"}),a("path",{d:"M30.594 15.606c-1.689.875-10.438 4.45-12.3 5.416-1.863.965-2.898.956-4.37.257-1.471-.7-10.782-4.438-12.46-5.235-.838-.398-1.278-.734-1.278-1.051v-3.18S12.307 9.19 14.264 8.492c1.957-.698 2.636-.723 4.301-.117 1.666.606 11.623 2.392 13.27 2.991l-.001 3.135c0 .315-.38.66-1.24 1.105z",fill:"#A41E11"}),a("path",{d:"M30.594 12.425c-1.689.875-10.438 4.45-12.3 5.416-1.863.966-2.898.956-4.37.257-1.471-.699-10.782-4.438-12.46-5.235-1.676-.796-1.712-1.345-.064-1.986 1.647-.641 10.907-4.253 12.864-4.95 1.957-.698 2.636-.724 4.301-.117 1.666.606 10.363 4.047 12.009 4.646 1.646.6 1.71 1.094.02 1.969z",fill:"#D82C20"}),a("path",{d:"M30.594 10.228c-1.689.875-10.438 4.451-12.3 5.417-1.863.965-2.898.955-4.37.256-1.471-.699-10.782-4.438-12.46-5.234C.627 10.268.187 9.932.187 9.615v-3.18s12.121-2.623 14.078-3.32c1.957-.699 2.636-.724 4.301-.117 1.666.606 11.623 2.391 13.27 2.99l-.001 3.136c0 .314-.38.659-1.24 1.104z",fill:"#A41E11"}),a("path",{d:"M30.594 7.047c-1.689.875-10.438 4.451-12.3 5.417-1.863.965-2.898.955-4.37.256-1.471-.699-10.782-4.437-12.46-5.234C-.211 6.689-.247 6.14 1.4 5.499S12.307 1.247 14.264.55c1.957-.7 2.636-.724 4.301-.118 1.666.607 10.363 4.048 12.009 4.647 1.646.6 1.71 1.093.02 1.968z",fill:"#D82C20"}),a("path",{fill:"#FFF",d:"M20.157 3.985l-2.742.283-.614 1.468-.992-1.638-3.166-.283 2.362-.847-.708-1.3 2.212.86 2.085-.68-.563 1.345zm-3.52 7.123l-5.118-2.11 7.334-1.119z"}),a("ellipse",{fill:"#FFF",cx:9.541,cy:6.311,rx:3.92,ry:1.51}),a("path",{fill:"#7A0C00",d:"M23.398 4.386l4.34 1.705-4.336 1.703z"}),a("path",{fill:"#AD2115",d:"M18.596 6.274l4.802-1.888.004 3.408-.471.183z"})))},$at=Uat;var n7={};$(n7,{icon:()=>Yat});var OYt=k(L());var Jat=["title","titleId"];function bq(){return bq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Xat(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Kat=function(t){var n=t.title,r=t.titleId,o=Gat(t,Jat);return a("svg",bq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M9 7.008V0h20v16.744c0 3.913-6.378 6.477-9.015 7.256V7.008H9z",fill:"#FA744E"}),a("path",{d:"M3 20.073V10h14v22C7.667 27.98 3 24.004 3 20.073z",fill:"#1DBAB0"}),a("path",{d:"M9 10h8v14c-2.983-1.14-8-3.756-8-7.043V10z",className:"euiIcon__fillNegative"}))},Yat=Kat;var o7={};$(o7,{icon:()=>rlt});var _Yt=k(L());var Qat=["title","titleId"];function wq(){return wq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function elt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var tlt=function(t){var n=t.title,r=t.titleId,o=Zat(t,Qat);return a("svg",wq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"none",fillRule:"evenodd"},a("path",{fill:"#FA744E",d:"M27.05 10h-7.34l-11 22s15.696-4.96 21.855-16.076C32.037 13.266 30.088 10 27.05 10"}),a("path",{fill:"#00BFB3",d:"M21.355 0H7.533L.427 14.211C-.903 16.871 1.032 20 4.004 20h7.351l10-20z"}),a("path",{className:"euiIcon__fillNegative",d:"M2.533 10L.428 14.211C-.903 16.871 1.032 20 4.005 20h7.35l5-10H2.533z"})))},rlt=tlt;var i7={};$(i7,{icon:()=>llt});var jYt=k(L());var nlt=["title","titleId"];function Oq(){return Oq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ilt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var alt=function(t){var n=t.title,r=t.titleId,o=olt(t,nlt);return a("svg",Oq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"none"},a("path",{fill:"#FFAE00",d:"M16 32L0 11.454l6.931-10.38L16 0l9.069 1.074L32 11.454z"}),a("path",{fill:"#EC6C00",d:"M16 32L0 11.454h32z"}),a("path",{fill:"#FFAE00",d:"M16 32L6.477 11.454h19.045z"}),a("path",{fill:"#FFEFB4",d:"M16 0L6.477 11.454h19.045z"}),a("path",{fill:"#FFAE00",d:"M6.932 1.074L3.369 6.3.001 11.454h6.542zM25.069 1.074L28.632 6.3 32 11.454h-6.542z"}),a("path",{fill:"#FED305",d:"M6.931 1.074l-.453 10.38L16 0zM25.069 1.074l.453 10.38L16 0z"})))},llt=alt;var a7={};$(a7,{icon:()=>flt});var PYt=k(L());var slt=["title","titleId"];function xq(){return xq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function clt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var plt=function(t){var n=t.title,r=t.titleId,o=ult(t,slt);return a("svg",xq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"none"},a("path",{fill:"#E01E5A",d:"M6.813 20.18a3.337 3.337 0 01-3.33 3.33 3.337 3.337 0 01-3.328-3.33 3.337 3.337 0 013.329-3.329h3.329v3.33zm1.677 0a3.337 3.337 0 013.33-3.329 3.337 3.337 0 013.328 3.33v8.335a3.337 3.337 0 01-3.329 3.329 3.337 3.337 0 01-3.329-3.33V20.18z"}),a("path",{fill:"#36C5F0",d:"M11.82 6.813a3.337 3.337 0 01-3.33-3.33A3.337 3.337 0 0111.82.156a3.337 3.337 0 013.328 3.329v3.329H11.82zm0 1.677a3.337 3.337 0 013.328 3.33 3.337 3.337 0 01-3.329 3.328H3.484a3.337 3.337 0 01-3.33-3.329 3.337 3.337 0 013.33-3.329h8.335z"}),a("path",{fill:"#2EB67D",d:"M25.187 11.82a3.337 3.337 0 013.329-3.33 3.337 3.337 0 013.329 3.33 3.337 3.337 0 01-3.33 3.328h-3.328V11.82zm-1.678 0a3.337 3.337 0 01-3.329 3.328 3.337 3.337 0 01-3.329-3.329V3.484a3.337 3.337 0 013.33-3.33 3.337 3.337 0 013.328 3.33v8.335z"}),a("path",{fill:"#ECB22E",d:"M20.18 25.187a3.337 3.337 0 013.33 3.329 3.337 3.337 0 01-3.33 3.329 3.337 3.337 0 01-3.329-3.33v-3.328h3.33zm0-1.678a3.337 3.337 0 01-3.329-3.329 3.337 3.337 0 013.33-3.329h8.335a3.337 3.337 0 013.329 3.33 3.337 3.337 0 01-3.33 3.328H20.18z"})))},flt=plt;var l7={};$(l7,{icon:()=>vlt});var EYt=k(L());var dlt=["title","titleId"];function _q(){return _q=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function hlt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var glt=function(t){var n=t.title,r=t.titleId,o=mlt(t,dlt);return a("svg",_q({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fill:"#3EBEB0",d:"M19 15c0 7.062-4.888 12.969-11.46 14.563A15.914 15.914 0 0016 32c8.836 0 16-7.163 16-16v-3l-6.5-6-6.5 6v2z"}),a("path",{fill:"#07C",d:"M6.833 26.646a11.954 11.954 0 008.544-7.834A12.43 12.43 0 0113 11.5V.292C5.6 1.696 0 8.19 0 16.002c0 4.358 1.75 8.306 4.577 11.192l2.256-.547z"}),a("path",{className:"euiIcon__fillNegative",d:"M30.362 23.02c-1.494.63-3.137.98-4.861.98a12.443 12.443 0 01-7.852-2.78 15.042 15.042 0 01-10.11 8.343A15.91 15.91 0 0016.002 32c6.314 0 11.758-3.669 14.36-8.98"}))},vlt=glt;var s7={};$(s7,{icon:()=>xlt});var AYt=k(L());var ylt=["title","titleId"];function Sq(){return Sq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function wlt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Olt=function(t){var n=t.title,r=t.titleId,o=blt(t,ylt);return a("svg",Sq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fill:"none"},a("path",{fill:"#C73A63",d:"M14.943 13.563c-1.327 2.23-2.597 4.388-3.894 6.531-.334.55-.498.998-.232 1.698.734 1.931-.302 3.811-2.25 4.321-1.837.482-3.627-.726-3.992-2.692-.323-1.741 1.028-3.448 2.948-3.72.16-.023.325-.026.595-.046l2.92-4.896C9.2 12.933 8.108 10.8 8.35 8.154c.171-1.87.907-3.486 2.25-4.81a7.639 7.639 0 019.531-1c2.91 1.87 4.244 5.512 3.107 8.629l-2.668-.724c.357-1.733.093-3.29-1.076-4.623-.772-.88-1.763-1.341-2.89-1.511-2.258-.341-4.476 1.11-5.134 3.327-.748 2.516.383 4.572 3.473 6.121z"}),a("path",{fill:"#4B4B4B",d:"M18.73 10.926l2.823 4.98c4.753-1.47 8.336 1.16 9.622 3.977 1.552 3.402.491 7.432-2.558 9.531-3.13 2.155-7.089 1.787-9.862-.981l2.176-1.821c2.739 1.774 5.135 1.69 6.913-.41a4.766 4.766 0 00-.077-6.219c-1.8-2.025-4.213-2.086-7.13-.143-1.209-2.146-2.44-4.275-3.61-6.436-.396-.729-.832-1.152-1.722-1.306-1.487-.257-2.446-1.534-2.504-2.964a3.258 3.258 0 012.08-3.192 3.243 3.243 0 013.671 1.002c.71.896.935 1.905.562 3.01-.104.309-.238.607-.384.972z"}),a("path",{fill:"#4A4A4A",d:"M20.963 24.401h-5.72c-.55 2.256-1.734 4.077-3.775 5.235-1.586.9-3.296 1.205-5.116.911C3 30.007.26 26.99.019 23.593c-.273-3.848 2.372-7.268 5.898-8.036l.732 2.658c-3.234 1.65-4.353 3.73-3.448 6.33.797 2.287 3.06 3.541 5.518 3.056 2.51-.495 3.776-2.581 3.621-5.929 2.38 0 4.761-.024 7.14.012.93.015 1.648-.081 2.348-.9 1.152-1.349 3.273-1.227 4.515.046 1.268 1.301 1.207 3.395-.135 4.641a3.236 3.236 0 01-4.553-.157c-.249-.267-.445-.585-.692-.913z"})))},xlt=Olt;var u7={};$(u7,{icon:()=>Plt});var TYt=k(L());var _lt=["title","titleId"];function jq(){return jq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function jlt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Ilt=function(t){var n=t.title,r=t.titleId,o=Slt(t,_lt);return a("svg",jq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fill:"#00ADEF",d:"M0 4.51l12.977-1.768.006 12.518-12.971.074L0 4.51zm12.97 12.192l.011 12.529-12.97-1.784-.002-10.829 12.962.084zm1.574-14.19L31.751 0v15.1l-17.207.137V2.511zm17.21 14.308l-.003 15.033-17.207-2.429-.024-12.632 17.235.028z"}))},Plt=Ilt;var c7={};$(c7,{icon:()=>Mlt});var zYt=k(L());var klt=["title","titleId"];function Iq(){return Iq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Clt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Alt=function(t){var n=t.title,r=t.titleId,o=Elt(t,klt);return a("svg",Iq({width:32,height:32,viewBox:"0 0 32 32",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M17.557 5.05c.17-.202.457-.512.86-.93C19.483 3.017 21.828 1 23.801 1H30v30h-6.2c-1.972 0-3.995-1.449-5.383-3.106l-.764-1.052 2.75-3.477c3.462-4.376 3.463-10.332.001-14.707L17.557 5.05z",fill:"#FEC514"}),a("path",{d:"M2 31V1h5.81c1.71 0 3.35.786 4.387 2.1l5.855 7.42c2.598 3.283 2.598 7.698-.002 10.983l-5.855 7.403C11.158 30.217 9.52 31 7.815 31H2z",fill:"#F04E98"}),a("path",{d:"M15.384 24.89L12.15 21.7c-2.868-3.318-2.868-8.22.002-11.322 1.535-1.639 2.611-2.718 3.23-3.238l2.67 3.238c2.637 3.385 2.575 7.987-.062 11.374l-2.607 3.137z",className:"euiIcon__fillNegative"}))},Mlt=Alt;var p7={};$(p7,{icon:()=>Dlt});var DYt=k(L());var Tlt=["title","titleId"];function Pq(){return Pq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function zlt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Llt=function(t){var n=t.title,r=t.titleId,o=Rlt(t,Tlt);return a("svg",Pq({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.914 1c-3.6 0-5.897 1.111-5.897 1.876 0 .766 2.297 1.877 5.897 1.877s5.897-1.111 5.897-1.877C13.811 2.111 11.514 1 7.914 1m3.98 7.988c-1.187.331-2.601.502-3.98.502-1.383 0-2.801-.172-3.991-.505l2.863 3.242v2.515c.136.08.515.214 1.128.214.61 0 .989-.133 1.126-.213v-2.515l2.854-3.24zm2.394-1.206l-4.248 4.823v2.246h.004c0 .763-1.069 1.105-2.13 1.105-1.06 0-2.13-.342-2.13-1.105h.002v-2.245L1.321 7.55l.01-.008A1.53 1.53 0 011 6.607V2.78h.02C1.14.973 4.627 0 7.913 0c3.286 0 6.774.973 6.894 2.78h.02v3.827c0 .343-.12.657-.335.941l-.003.004c-.06.079-.128.155-.202.23zm-.578-.856a.56.56 0 00.118-.319V4.411c-1.288.879-3.649 1.342-5.914 1.342C5.65 5.753 3.288 5.29 2 4.411v2.196C2 7.375 4.304 8.49 7.914 8.49c2.879 0 4.927-.709 5.639-1.385l.157-.18z"}))},Dlt=Llt;var f7={};$(f7,{icon:()=>Hlt});var FYt=k(L());var Nlt=["title","titleId"];function kq(){return kq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Wlt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Blt=function(t){var n=t.title,r=t.titleId,o=Flt(t,Nlt);return a("svg",kq({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6.918 9.799l-4.82 4.819 2.88-.43.148.987L0 15.943l.768-5.126.988.148-.453 3.033 4.936-4.935a2.003 2.003 0 011.265-2.885V0h1v6.178a2.003 2.003 0 011.263 2.884l4.865 4.866-.443-2.963.988-.147.768 5.126-5.127-.769.15-.988 2.95.441-4.83-4.83c-.312.203-.685.32-1.085.32-.4 0-.773-.117-1.085-.32z"}))},Hlt=Blt;var d7={};$(d7,{icon:()=>Jlt});var BYt=k(L());var Vlt=["title","titleId"];function Eq(){return Eq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ult(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var $lt=function(t){var n=t.title,r=t.titleId,o=qlt(t,Vlt);return a("svg",Eq({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M1.747 10.992h13.1a.123.123 0 00.122-.123V8.51a.122.122 0 00-.122-.122H1.122A.122.122 0 001 8.51v2.36c0 .066.055.122.122.122h.625zm12.011 1H2.21V16h-1v-4.008h-.088A1.124 1.124 0 010 10.87V8.51c0-.62.503-1.122 1.122-1.122h13.725c.62 0 1.122.502 1.122 1.122v2.36c0 .618-.503 1.122-1.122 1.122h-.089V16h-1v-4.008zm-6.27-7.487V0h1v4.529l2.407-2.262.685.73L8 6.356 4.42 2.995l.685-.729 2.383 2.24z"}))},Jlt=$lt;var m7={};$(m7,{icon:()=>Qlt});var VYt=k(L());var Glt=["title","titleId"];function Cq(){return Cq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Klt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Ylt=function(t){var n=t.title,r=t.titleId,o=Xlt(t,Glt);return a("svg",Cq({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M2.21 4.008H13.76V0h1v4.008h.088c.619 0 1.122.504 1.122 1.123V7.49c0 .62-.503 1.122-1.122 1.122H1.122A1.122 1.122 0 010 7.49V5.13c0-.618.503-1.122 1.122-1.122h.089V0h1v4.008zm11.549 1H1.12A.123.123 0 001 5.13V7.49c0 .068.055.122.122.122h13.725a.122.122 0 00.122-.122V5.13a.123.123 0 00-.122-.122h-1.088zm-5.301 9.097l2.405-2.26.686.728-3.58 3.363-3.58-3.363.686-.728 2.383 2.24V9.577h1v4.528z"}))},Qlt=Ylt;var h7={};$(h7,{icon:()=>nst});var UYt=k(L());var Zlt=["title","titleId"];function Aq(){return Aq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function tst(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var rst=function(t){var n=t.title,r=t.titleId,o=est(t,Zlt);return a("svg",Aq({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M11.339 15.464H4.77a3.248 3.248 0 01-3.245-3.244V4.549H0v-1h2.526v8.67a2.247 2.247 0 002.245 2.245h6.568a2.247 2.247 0 002.244-2.244V3.549h2.455v1h-1.455v7.67a3.247 3.247 0 01-3.244 3.245zm.513-5.962v1.095l-3.848 1.72-3.85-1.72V9.502l3.85 1.72 3.848-1.72zm0-4.251v1.095l-3.848 1.72-3.85-1.72V5.25l3.85 1.72 3.848-1.72zm0-4.251v1.095l-3.848 1.72-3.85-1.72V1l3.85 1.72L11.852 1z"}))},nst=rst;var g7={};$(g7,{icon:()=>sst});var JYt=k(L());var ost=["title","titleId"];function Mq(){return Mq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ast(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var lst=function(t){var n=t.title,r=t.titleId,o=ist(t,ost);return a("svg",Mq({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M4.552 10.71a3.008 3.008 0 004.19.738l1.642-1.15 1.15 1.642-1.643 1.15a5.013 5.013 0 11-5.75-8.212l1.642-1.15 1.15 1.643-1.642 1.15a3.007 3.007 0 00-.739 4.189zm8.296-2.137l1.15 1.643-1.643 1.149-1.15-1.642 1.643-1.15zm-4.6-6.571l1.15 1.643-1.643 1.15-1.15-1.642 1.642-1.151zm1.97 1.068L9.07 1.428a1.003 1.003 0 00-1.397-.246L3.566 4.057A5.995 5.995 0 001.092 7.94a5.993 5.993 0 00.996 4.495 5.99 5.99 0 003.883 2.473 5.991 5.991 0 004.495-.996l4.107-2.875c.454-.318.563-.943.246-1.396l-1.15-1.643a1.002 1.002 0 00-1.396-.246l-4.107 2.875a2.002 2.002 0 01-1.498.332 2 2 0 01-1.627-2.323c.09-.505.371-.976.824-1.294l4.107-2.876c.454-.317.564-.942.246-1.396z"}))},sst=lst;var v7={};$(v7,{icon:()=>dst});var XYt=k(L());var ust=["title","titleId"];function Tq(){return Tq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function pst(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var fst=function(t){var n=t.title,r=t.titleId,o=cst(t,ust);return a("svg",Tq({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M15.143 15.85l-3.872-3.872a.5.5 0 01-.034-.738 6.01 6.01 0 000-8.486 6.004 6.004 0 00-8.484 0 6.01 6.01 0 000 8.486 5.96 5.96 0 004.242 1.757.5.5 0 010 1 6.955 6.955 0 01-4.949-2.05c-2.728-2.73-2.728-7.171 0-9.9 2.728-2.73 7.168-2.73 9.898 0 2.609 2.61 2.723 6.785.342 9.532l3.565 3.564a.502.502 0 01-.708.708zM6.254 3l.277 5.063h.935L7.754 3h-1.5zm.222 7.548a.727.727 0 00.533.222.717.717 0 00.52-.22.715.715 0 00.225-.53.716.716 0 00-.222-.534.724.724 0 00-.523-.216.731.731 0 00-.533.219.719.719 0 00-.222.53c0 .205.074.38.222.529z"}))},dst=fst;var y7={};$(y7,{icon:()=>yst});var YYt=k(L());var mst=["title","titleId"];function Rq(){return Rq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function gst(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var vst=function(t){var n=t.title,r=t.titleId,o=hst(t,mst);return a("svg",Rq({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M9.5 6a.5.5 0 010 1h-6a.5.5 0 010-1h6zm.74 4.74c0-.117.04-.225.107-.31A5.478 5.478 0 0012 6.5 5.5 5.5 0 106.5 12a.5.5 0 110 1 6.5 6.5 0 114.936-2.27l4.419 4.418a.5.5 0 01-.707.707l-4.768-4.768a.499.499 0 01-.14-.347z"}))},yst=vst;var b7={};$(b7,{icon:()=>_st});var ZYt=k(L());var bst=["title","titleId"];function zq(){return zq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ost(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var xst=function(t){var n=t.title,r=t.titleId,o=wst(t,bst);return a("svg",zq({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7 6h2.5a.5.5 0 010 1H7v2.5a.5.5 0 01-1 0V7H3.5a.5.5 0 010-1H6V3.5a.5.5 0 011 0V6zm3.24 4.74c0-.117.04-.225.107-.31A5.478 5.478 0 0012 6.5 5.5 5.5 0 106.5 12a.5.5 0 110 1 6.5 6.5 0 114.936-2.27l4.419 4.418a.5.5 0 01-.707.707l-4.768-4.768a.499.499 0 01-.14-.347z"}))},_st=xst;var w7={};$(w7,{icon:()=>kst});var tQt=k(L());var Sst=["title","titleId"];function Lq(){return Lq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ist(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Pst=function(t){var n=t.title,r=t.titleId,o=jst(t,Sst);return a("svg",Lq({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.55 14.224a.502.502 0 00.897 0l4-8a.5.5 0 00.053-.235 4.672 4.672 0 00-.084-.705 5.538 5.538 0 00-.505-1.512C11.189 2.362 9.906 1.5 8 1.5c-1.906 0-3.19.862-3.91 2.272-.248.485-.41.998-.506 1.512-.058.31-.08.554-.084.705a.5.5 0 00.053.235l3.997 8zM8 5a1 1 0 100 2 1 1 0 000-2zm-3.493.895c.009-.106.027-.253.06-.429.079-.424.213-.848.413-1.238C5.537 3.138 6.487 2.5 8 2.5c1.513 0 2.463.638 3.02 1.728.2.39.334.814.413 1.238.033.176.051.323.06.43L8 12.881 4.507 5.895z"}))},kst=Pst;var O7={};$(O7,{icon:()=>Tst});var nQt=k(L());var Est=["title","titleId"];function Dq(){return Dq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ast(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Mst=function(t){var n=t.title,r=t.titleId,o=Cst(t,Est);return a("svg",Dq({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7 10h2V6H7zM3 10h2V6H3zM11.025 10h2V6h-2zM3.5 13.75h1v-2.4h-1zM6.175 13.75h1.001v-2.4H6.175zM8.85 13.75h1v-2.4h-1zM11.525 13.75h1v-2.4h-1z"}),a("path",{d:"M0 3v7.05h1v3.698h1v-3.699h12v3.699h1v-3.699h1V3H0zm1 6h14V4H1v5z"}))},Tst=Mst;var x7={};$(x7,{icon:()=>Nst});var iQt=k(L());var Rst=["title","titleId"];function Nq(){return Nq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Lst(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Dst=function(t){var n=t.title,r=t.titleId,o=zst(t,Rst);return a("svg",Nq({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M0 2h16v2H0V2zm0 5h16v2H0V7zm16 5H0v2h16v-2z"}))},Nst=Dst;var _7={};$(_7,{icon:()=>Vst});var lQt=k(L());var Fst=["title","titleId"];function Fq(){return Fq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Bst(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Hst=function(t){var n=t.title,r=t.titleId,o=Wst(t,Fst);return a("svg",Fq({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6 7.5c0 .276-.216.5-.495.5h-2.01a.503.503 0 01-.487-.412L3 7.5c0-.276.216-.5.495-.5h2.01c.243 0 .445.183.487.412L6 7.5zM3.51 4a.513.513 0 01-.502-.412L3 3.5c0-.276.228-.5.51-.5h8.98c.25 0 .459.183.502.412L13 3.5c0 .276-.228.5-.51.5H8.493v7.792l2.06-2.06a.5.5 0 11.707.707L9.14 12.56A1.496 1.496 0 018.026 13L7.993 13a.501.501 0 01-.118-.014 1.493 1.493 0 01-.857-.426l-2.122-2.12a.5.5 0 01.708-.708l1.889 1.89V4H3.51zM13 7.5c0 .276-.216.5-.495.5h-2.01a.503.503 0 01-.487-.412L10 7.5c0-.276.216-.5.495-.5h2.01c.243 0 .445.183.487.412L13 7.5z"}))},Vst=Hst;var S7={};$(S7,{icon:()=>Gst});var uQt=k(L());var qst=["title","titleId"];function Wq(){return Wq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function $st(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Jst=function(t){var n=t.title,r=t.titleId,o=Ust(t,qst);return a("svg",Wq({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M1.014 7.382a.501.501 0 00-.013.152c-.014.4.133.806.439 1.112l2.12 2.122a.5.5 0 10.708-.708L2.208 8H14.5a.5.5 0 000-1H2.379l1.889-1.89a.5.5 0 00-.707-.706L1.44 6.524c-.241.242-.383.544-.426.858zM14.5 3h-7a.5.5 0 000 1h7a.5.5 0 000-1zm0 8h-7a.5.5 0 100 1h7a.5.5 0 100-1z"}))},Gst=Jst;var j7={};$(j7,{icon:()=>Zst});var pQt=k(L());var Xst=["title","titleId"];function Bq(){return Bq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Yst(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Qst=function(t){var n=t.title,r=t.titleId,o=Kst(t,Xst);return a("svg",Bq({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M14.986 7.382a.501.501 0 01.013.152c.014.4-.133.806-.439 1.112l-2.12 2.122a.5.5 0 11-.708-.708L13.792 8H1.5a.5.5 0 010-1h12.121l-1.889-1.89a.5.5 0 01.707-.706l2.121 2.12c.241.242.383.544.426.858zM1.5 3h7a.5.5 0 010 1h-7a.5.5 0 010-1zm0 8h7a.5.5 0 110 1h-7a.5.5 0 110-1z"}))},Zst=Qst;var I7={};$(I7,{icon:()=>out});var dQt=k(L());var eut=["title","titleId"];function Hq(){return Hq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function rut(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var nut=function(t){var n=t.title,r=t.titleId,o=tut(t,eut);return a("svg",Hq({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M10.01 8.5c0-.276.216-.5.495-.5h2.01c.243 0 .445.183.487.412l.008.088c0 .276-.216.5-.495.5h-2.01a.503.503 0 01-.487-.412L10.01 8.5zM12.5 12c.25 0 .459.183.502.412l.008.088c0 .276-.228.5-.51.5H3.52a.513.513 0 01-.502-.412L3.01 12.5c0-.276.228-.5.51-.5h3.987V4.208l-2.06 2.06a.5.5 0 11-.707-.707L6.86 3.44A1.496 1.496 0 017.974 3L8.007 3c.04 0 .08.005.118.014.314.043.616.185.857.426l2.122 2.12a.5.5 0 01-.708.708l-1.889-1.89V12H12.5zM3 8.5c0-.276.216-.5.495-.5h2.01c.243 0 .445.183.487.412L6 8.5c0 .276-.216.5-.495.5h-2.01a.503.503 0 01-.487-.412L3 8.5z"}))},out=nut;var P7={};$(P7,{icon:()=>uut});var hQt=k(L());var iut=["title","titleId"];function Vq(){return Vq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function lut(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var sut=function(t){var n=t.title,r=t.titleId,o=aut(t,iut);return a("svg",Vq({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.352 6H2.5a.5.5 0 010-1h4.852L5.12 2.721c-.18-.183-.155-.46.055-.616a.551.551 0 01.705.048l3 3.062c.16.164.16.405 0 .57l-3 3.062A.532.532 0 015.5 9a.54.54 0 01-.325-.106c-.21-.157-.235-.433-.055-.616L7.352 6zm1.296 4H13.5a.5.5 0 010 1H8.648l2.232 2.278c.18.183.155.46-.055.617A.54.54 0 0110.5 14a.532.532 0 01-.38-.153l-3-3.063a.397.397 0 010-.568l3-3.063a.551.551 0 01.705-.047c.21.156.235.433.055.616L8.648 10z"}))},uut=sut;var k7={};$(k7,{icon:()=>mut});var vQt=k(L());var cut=["title","titleId"];function qq(){return qq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function fut(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var dut=function(t){var n=t.title,r=t.titleId,o=put(t,cut);return a("svg",qq({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M1.146 14.146l4-4a.5.5 0 01.765.638l-.057.07-4 4a.5.5 0 01-.765-.638l.057-.07 4-4-4 4zM6.5 8A1.5 1.5 0 018 9.5v3a.5.5 0 11-1 0v-3a.5.5 0 00-.5-.5h-3a.5.5 0 010-1h3zm2-5a.5.5 0 01.5.5v3a.5.5 0 00.5.5h3a.5.5 0 110 1h-3A1.5 1.5 0 018 6.5v-3a.5.5 0 01.5-.5zm1.651 2.146l4-4a.5.5 0 01.765.638l-.057.07-4 4a.5.5 0 01-.765-.638l.057-.07 4-4-4 4z"}))},mut=dut;var E7={};$(E7,{icon:()=>but});var bQt=k(L());var hut=["title","titleId"];function Uq(){return Uq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function vut(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var yut=function(t){var n=t.title,r=t.titleId,o=gut(t,hut);return a("svg",Uq({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("rect",{width:10,height:1.5,x:3,y:7.25,rx:.5}))},but=yut;var C7={};$(C7,{icon:()=>Sut});var OQt=k(L());var wut=["title","titleId"];function $q(){return $q=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function xut(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var _ut=function(t){var n=t.title,r=t.titleId,o=Out(t,wut);return a("svg",$q({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M7.5 0C11.636 0 15 3.364 15 7.5S11.636 15 7.5 15 0 11.636 0 7.5 3.364 0 7.5 0zm0 .882a6.618 6.618 0 100 13.236A6.618 6.618 0 007.5.882zM3.5 7h8a.5.5 0 110 1h-8a.5.5 0 010-1z"}))},Sut=_ut;var A7={};$(A7,{icon:()=>Eut});var _Qt=k(L());var jut=["title","titleId"];function Jq(){return Jq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Put(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var kut=function(t){var n=t.title,r=t.titleId,o=Iut(t,jut);return a("svg",Jq({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M7.5 0C11.636 0 15 3.364 15 7.5S11.636 15 7.5 15 0 11.636 0 7.5 3.364 0 7.5 0zm-4 7a.5.5 0 000 1h8a.5.5 0 100-1h-8z"}))},Eut=kut;var M7={};$(M7,{icon:()=>Rut});var jQt=k(L());var Cut=["title","titleId"];function Gq(){return Gq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Mut(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Tut=function(t){var n=t.title,r=t.titleId,o=Aut(t,Cut);return a("svg",Gq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7 16v5h2.038a13.179 13.179 0 000 2H7v5H5v-5H0v-2h5v-5h2zM7 0v5h5v2H7v5H5V7H0V5h5V0h2zm16 0v5h5v2h-5v2.038a13.179 13.179 0 00-2 0V7h-5V5h5V0h2z"}),a("path",{className:"euiIcon__fillSecondary",d:"M22 10c3.073 0 5.877 1.155 8 3.056v3.252A9.82 9.82 0 1016.307 30h-3.251A11.955 11.955 0 0110 22c0-6.627 5.373-12 12-12zm1 8v3h3v2h-3v3h-2v-3h-3v-2h3v-3h2z"}))},Rut=Tut;var T7={};$(T7,{icon:()=>Fut});var PQt=k(L());var zut=["title","titleId"];function Xq(){return Xq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Dut(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Nut=function(t){var n=t.title,r=t.titleId,o=Lut(t,zut);return a("svg",Xq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M16 32C7.163 32 0 24.837 0 16S7.163 0 16 0s16 7.163 16 16h-2c0-7.732-6.268-14-14-14S2 8.268 2 16s6.268 14 14 14v2z"}),a("path",{className:"euiIcon__fillSecondary",d:"M27 20v12h-2V20h2zm-5 4v8h-2v-8h2zm10-2v10h-2V22h2zM17 9v6h6v2h-6v6h-2v-6H9v-2h6V9h2z"}))},Fut=Nut;var R7={};$(R7,{icon:()=>qut});var EQt=k(L());var Wut=["title","titleId"];function Kq(){return Kq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Hut(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Vut=function(t){var n=t.title,r=t.titleId,o=But(t,Wut);return a("svg",Kq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{className:"euiIcon__fillSecondary",d:"M4 24a4 4 0 110 8 4 4 0 010-8zm24 0a4 4 0 110 8 4 4 0 010-8zM4 26a2 2 0 100 4 2 2 0 000-4zm24 0a2 2 0 100 4 2 2 0 000-4zM17 9v6h6v2h-6v6h-2v-6H9v-2h6V9h2zM4 0a4 4 0 110 8 4 4 0 010-8zm24 0a4 4 0 110 8 4 4 0 010-8zm0 2a2 2 0 100 4 2 2 0 000-4zM4 2a2 2 0 100 4 2 2 0 000-4z"}),a("path",{d:"M21.078 29.05c.102.677.3 1.322.582 1.92A15.963 15.963 0 0116 32c-1.993 0-3.9-.364-5.66-1.03.281-.598.48-1.243.582-1.92 1.574.614 3.287.95 5.078.95 1.791 0 3.504-.336 5.078-.95zm9.892-18.71A15.963 15.963 0 0132 16c0 1.993-.364 3.9-1.03 5.66a6.948 6.948 0 00-1.92-.582c.614-1.574.95-3.287.95-5.078 0-1.791-.336-3.504-.95-5.078a6.948 6.948 0 001.92-.582zm-29.94 0c.598.281 1.243.48 1.92.582A13.965 13.965 0 002 16c0 1.791.336 3.504.95 5.078-.677.102-1.322.3-1.92.582A15.964 15.964 0 010 16c0-1.993.364-3.9 1.03-5.66zM16 0c1.993 0 3.9.364 5.66 1.03a6.948 6.948 0 00-.582 1.92A13.965 13.965 0 0016 2c-1.791 0-3.504.336-5.078.95a6.948 6.948 0 00-.582-1.92A15.964 15.964 0 0116 0z"}))},qut=Vut;var z7={};$(z7,{icon:()=>Xut});var AQt=k(L());var Uut=["title","titleId"];function Yq(){return Yq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Jut(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Gut=function(t){var n=t.title,r=t.titleId,o=$ut(t,Uut);return a("svg",Yq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M16 0c5.523 0 10 4.477 10 10s-4.477 10-10 10S6 15.523 6 10 10.477 0 16 0zm0 2a8 8 0 100 16 8 8 0 000-16z"}),a("path",{className:"euiIcon__fillSecondary",d:"M8.4 19.288c.492.402 1.015.766 1.566 1.087L7.26 23.682a4 4 0 11-1.437-1.243l2.578-3.151zm15.2 0l2.577 3.15a4 4 0 11-1.437 1.243l-2.706-3.306a12.032 12.032 0 001.565-1.087zM4 24a2 2 0 100 4 2 2 0 000-4zm24 0a2 2 0 100 4 2 2 0 000-4zM17 6v3h3v2h-3v3h-2v-3h-3V9h3V6h2z"}))},Xut=Gut;var L7={};$(L7,{icon:()=>ect});var TQt=k(L());var Kut=["title","titleId"];function Qq(){return Qq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Qut(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Zut=function(t){var n=t.title,r=t.titleId,o=Yut(t,Kut);return a("svg",Qq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M16 32C7.163 32 0 24.837 0 16S7.163 0 16 0s16 7.163 16 16a16 16 0 01-16 16zm0-30C8.268 2 2 8.268 2 16s6.268 14 14 14 14-6.268 14-14A14 14 0 0016 2z"}),a("path",{className:"euiIcon__fillSecondary",d:"M23 15h-6V9h-2v6H9v2h6v6h2v-6h6z"}))},ect=Zut;var D7={};$(D7,{icon:()=>ict});var zQt=k(L());var tct=["title","titleId"];function Zq(){return Zq=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function nct(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var oct=function(t){var n=t.title,r=t.titleId,o=rct(t,tct);return a("svg",Zq({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M2 20v10h10v2H0V20h2zm30 0v12H20v-2h10V20h2zM12 4a8 8 0 110 16 8 8 0 010-16zm0 2a6 6 0 100 12 6 6 0 000-12zm0-6v2H2v10H0V0h12zm20 0v12h-2V2H20V0h12z"}),a("path",{className:"euiIcon__fillSecondary",d:"M21.997 12.251c-.017.689-.104 1.36-.253 2.006a6 6 0 11-7.487 7.487c-.646.15-1.317.236-2.006.253a8 8 0 109.746-9.746z"}))},ict=oct;var N7={};$(N7,{icon:()=>cct});var DQt=k(L());var act=["title","titleId"];function eU(){return eU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function sct(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var uct=function(t){var n=t.title,r=t.titleId,o=lct(t,act);return a("svg",eU({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M2 12v6h6v2H0v-8h2zm18 0v8h-8v-2h6v-6h2zM8 0v2H2v6H0V0h8zm12 0v8h-2V2h-6V0h8z"}),a("path",{className:"euiIcon__fillSecondary",d:"M16 24a4 4 0 110 8 4 4 0 010-8zm12 0a4 4 0 110 8 4 4 0 010-8zm-12 1.75a2.25 2.25 0 100 4.5 2.25 2.25 0 000-4.5zm12 0a2.25 2.25 0 100 4.5 2.25 2.25 0 000-4.5zM28 12a4 4 0 110 8 4 4 0 010-8zm0 1.75a2.25 2.25 0 100 4.5 2.25 2.25 0 000-4.5zM10 6a4 4 0 110 8 4 4 0 010-8zm0 1.75a2.25 2.25 0 100 4.5 2.25 2.25 0 000-4.5z"}))},cct=uct;var F7={};$(F7,{icon:()=>hct});var FQt=k(L());var pct=["title","titleId"];function tU(){return tU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function dct(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var mct=function(t){var n=t.title,r=t.titleId,o=fct(t,pct);return a("svg",tU({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M24 0a8 8 0 11-4.906 14.32l-4.774 4.774a8 8 0 11-1.414-1.414l4.774-4.774A8 8 0 0124 0zM8 18a6 6 0 100 12 6 6 0 000-12zM24 2a6 6 0 100 12 6 6 0 000-12z"}),a("path",{className:"euiIcon__fillSecondary",d:"M32 20v12H20V20h12zm-2 2h-8v8h8v-8zM12 0v12H0V0h12zm-2 2H2v8h8V2z"}))},hct=mct;var W7={};$(W7,{icon:()=>wct});var BQt=k(L());var gct=["title","titleId"];function rU(){return rU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function yct(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var bct=function(t){var n=t.title,r=t.titleId,o=vct(t,gct);return a("svg",rU({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6 2.5a.5.5 0 01.5-.5h3a.5.5 0 010 1h-3a.5.5 0 01-.5-.5z"}),a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M4.5 0A1.5 1.5 0 003 1.5v13A1.5 1.5 0 004.5 16h7a1.5 1.5 0 001.5-1.5v-13A1.5 1.5 0 0011.5 0h-7zM4 1.5a.5.5 0 01.5-.5h7a.5.5 0 01.5.5V4H4V1.5zM4 13v1.5a.5.5 0 00.5.5h7a.5.5 0 00.5-.5V13H4zm0-1h8V5H4v7z"}))},wct=bct;var B7={};$(B7,{icon:()=>jct});var VQt=k(L());var Oct=["title","titleId"];function nU(){return nU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function _ct(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Sct=function(t){var n=t.title,r=t.titleId,o=xct(t,Oct);return a("svg",nU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8.796 9.048c-1.552-2.238-1.199-5.323.61-8.1-3.47-.12-6.6 2.232-7.269 5.672-.742 3.82 1.83 7.533 5.749 8.294a7.226 7.226 0 007.526-3.218c-2.794.177-5.27-.711-6.616-2.648z"}))},jct=Sct;var H7={};$(H7,{icon:()=>Cct});var UQt=k(L());var Ict=["title","titleId"];function oU(){return oU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function kct(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Ect=function(t){var n=t.title,r=t.titleId,o=Pct(t,Ict);return a("svg",oU({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M1 1h14v14H1V1zm13 12v1H2V2h12v11zM6 6h4v4H6V6zm-1 5V5h6v6H5z"}))},Cct=Ect;var V7={};$(V7,{icon:()=>zct});var JQt=k(L());var Act=["title","titleId"];function iU(){return iU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Tct(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Rct=function(t){var n=t.title,r=t.titleId,o=Mct(t,Act);return a("svg",iU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5.5 1a.5.5 0 010 1H3.006C2.45 2 2 2.45 2 3.006v9.988C2 13.55 2.45 14 3.006 14H5.5a.5.5 0 110 1H3.006A2.005 2.005 0 011 12.994V3.006C1 1.898 1.897 1 3.006 1H5.5zm7.494 0c1.059 0 1.924.818 2 1.856l.006.15v9.988a2.005 2.005 0 01-1.856 2l-.15.006H10.5a.5.5 0 01-.09-.992L10.5 14h2.494c.516 0 .941-.388 1-.888l.006-.118V3.006c0-.516-.388-.941-.888-1L12.994 2H10.5a.5.5 0 01-.09-.992L10.5 1h2.494zM5 7a1 1 0 110 2 1 1 0 010-2zm3 0a1 1 0 110 2 1 1 0 010-2zm3 0a1 1 0 110 2 1 1 0 010-2z"}))},zct=Rct;var q7={};$(q7,{icon:()=>Wct});var XQt=k(L());var Lct=["title","titleId"];function aU(){return aU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Nct(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Fct=function(t){var n=t.title,r=t.titleId,o=Dct(t,Lct);return a("svg",aU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8.5 1.443a1 1 0 00-1 0L2.572 4.29a1 1 0 00-.5.866v5.69a1 1 0 00.5.866L7.5 14.557a1 1 0 001 0l4.928-2.846a1 1 0 00.5-.866v-5.69a1 1 0 00-.5-.866L8.5 1.443zM9 .577l4.928 2.846a2 2 0 011 1.732v5.69a2 2 0 01-1 1.732L9 15.423a2 2 0 01-2 0l-4.928-2.846a2 2 0 01-1-1.732v-5.69a2 2 0 011-1.732L7 .577a2 2 0 012 0z"}))},Wct=Fct;var U7={};$(U7,{icon:()=>Uct});var YQt=k(L());var Bct=["title","titleId"];function lU(){return lU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Vct(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var qct=function(t){var n=t.title,r=t.titleId,o=Hct(t,Bct);return a("svg",lU({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.808 10.197H6.796L5.859 13H4.485l.937-2.803H3.966l.219-1.25h1.647l.608-1.805H4.991l.226-1.251h1.64l.95-2.844h1.368l-.95 2.844h1.018l.95-2.844h1.374l-.95 2.844h1.51l-.218 1.25h-1.702l-.608 1.805h1.497l-.219 1.251H9.182L8.252 13H6.878l.93-2.803zm-.602-1.25h1.012l.615-1.805H7.814l-.608 1.804z",fillRule:"evenodd"}))},Uct=qct;var $7={};$($7,{icon:()=>Kct});var ZQt=k(L());var $ct=["title","titleId"];function sU(){return sU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Gct(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Xct=function(t){var n=t.title,r=t.titleId,o=Jct(t,$ct);return a("svg",sU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6.517 12.271l1.254-1.254a1.5 1.5 0 11-1.254 1.254zm2.945-2.944l.74-.74c.361.208.694.467.987.772a.5.5 0 01-.721.693 3.424 3.424 0 00-1.006-.725zm2.162-2.163l.716-.715c.308.232.599.49.87.772a.5.5 0 11-.722.692 6.26 6.26 0 00-.864-.749zM7.061 6.07A6.198 6.198 0 003.54 7.885a.5.5 0 01-.717-.697 7.199 7.199 0 015.309-2.187l-1.07 1.07zm6.672-1.014l.71-.71c.274.23.536.476.786.736a.5.5 0 01-.721.692 9.1 9.1 0 00-.775-.718zm-3.807-1.85A9.06 9.06 0 008 3a8.99 8.99 0 00-6.469 2.734.5.5 0 11-.717-.697A9.99 9.99 0 018 2c.944 0 1.868.131 2.75.382l-.824.824zM8 13a.5.5 0 100-1 .5.5 0 000 1zm-5.424 1a.5.5 0 01-.707-.707L14.146 1.146a.5.5 0 01.708.708L2.576 14z"}))},Kct=Xct;var J7={};$(J7,{icon:()=>tpt});var tZt=k(L());var Yct=["title","titleId"];function uU(){return uU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Zct(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ept=function(t){var n=t.title,r=t.titleId,o=Qct(t,Yct);return a("svg",uU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 14a1.5 1.5 0 110-3 1.5 1.5 0 010 3zm0-1a.5.5 0 100-1 .5.5 0 000 1zm3.189-3.64a.5.5 0 01-.721.692A3.408 3.408 0 008 9c-.937 0-1.813.378-2.453 1.037a.5.5 0 01-.717-.697A4.408 4.408 0 018 8c1.22 0 2.361.497 3.189 1.36zm2.02-2.14a.5.5 0 11-.721.693A6.2 6.2 0 008 6a6.199 6.199 0 00-4.46 1.885.5.5 0 01-.718-.697A7.199 7.199 0 018 5a7.2 7.2 0 015.21 2.22zm2.02-2.138a.5.5 0 01-.721.692A8.99 8.99 0 008 3a8.99 8.99 0 00-6.469 2.734.5.5 0 11-.717-.697A9.99 9.99 0 018 2a9.99 9.99 0 017.23 3.082z"}))},tpt=ept;var G7={};$(G7,{icon:()=>apt});var nZt=k(L());var rpt=["title","titleId"];function cU(){return cU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function opt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ipt=function(t){var n=t.title,r=t.titleId,o=npt(t,rpt);return a("svg",cU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M14.447 3.724l-6-3a1 1 0 00-.894 0l-6 3A1 1 0 001 4.618v6.764a1 1 0 00.553.894l6 3a1 1 0 00.894 0l6-3a1 1 0 00.553-.894V4.618a1 1 0 00-.553-.894zM5.871 5.897l5.343-2.672 2.158 1.079L8 6.943zM8 1.618l2.096 1.048-5.353 2.677-2.115-1.039zM2 5.11l2.25 1.105V9a.5.5 0 001 0V6.706L7.5 7.811v6.321L2 11.382zm6.5 9.022v-6.32L14 5.11v6.272z"}))},apt=ipt;var X7={};$(X7,{icon:()=>ppt});var iZt=k(L());var lpt=["title","titleId"];function pU(){return pU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function upt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var cpt=function(t){var n=t.title,r=t.titleId,o=spt(t,lpt);return a("svg",pU({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M3 1a1 1 0 00-1 1v12a1 1 0 001 1h5a4.995 4.995 0 01-.584-1H3V2h7v2a1 1 0 001 1h2v2.1c.348.07.682.177 1 .316V4a1 1 0 00-.293-.707l-2-2A1 1 0 0011 1H3zm13 11a4 4 0 11-8 0 4 4 0 018 0zm-1.646-1.354a.5.5 0 010 .708l-2.5 2.5a.5.5 0 01-.708 0l-1-1a.5.5 0 01.708-.708l.646.647 2.146-2.147a.5.5 0 01.708 0z"}))},ppt=cpt;var K7={};$(K7,{icon:()=>gpt});var lZt=k(L());var fpt=["title","titleId"];function fU(){return fU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function mpt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var hpt=function(t){var n=t.title,r=t.titleId,o=dpt(t,fpt);return a("svg",fU({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M3 1a1 1 0 011-1h8a1 1 0 01.707.293l2 2A1 1 0 0115 3v5a4.995 4.995 0 00-1-.584V4h-2a1 1 0 01-1-1V1H4v12h3.1c.07.348.177.682.316 1H4a1 1 0 01-1-1V1zm5 14H2V2a1 1 0 00-1 1v12a1 1 0 001 1h7a5.029 5.029 0 01-1-1zm8-3a4 4 0 11-8 0 4 4 0 018 0zm-1.646-1.354a.5.5 0 010 .708l-2.5 2.5a.5.5 0 01-.708 0l-1-1a.5.5 0 01.708-.708l.646.647 2.146-2.147a.5.5 0 01.708 0z"}))},gpt=hpt;var Y7={};$(Y7,{icon:()=>Opt});var uZt=k(L());var vpt=["title","titleId"];function dU(){return dU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function bpt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var wpt=function(t){var n=t.title,r=t.titleId,o=ypt(t,vpt);return a("svg",dU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M11.993 8.17c0 .83-.673 1.507-1.499 1.507H5.498A1.505 1.505 0 013.999 8.17V6.662h7.994V8.17zm-2.998 5.998c0 .455-.448.827-.999.827-.55 0-1-.372-1-.827v-3.486h2v3.486zM4 5.658h1.262V1.005H4v4.653zm2.261 0h1.244V1.005H6.26v4.653zm2.244 0h1.235V1.005H8.504v4.653zm2.234 0h1.254V1.005h-1.254v4.653zM3.008 0L3 8.17a2.509 2.509 0 002.498 2.512h.5v3.486c0 1.01.896 1.832 1.998 1.832 1.102 0 1.998-.822 1.998-1.832v-3.486h.5a2.509 2.509 0 002.498-2.512L13 0H3.008z"}))},Opt=wpt;var Q7={};$(Q7,{icon:()=>Ipt});var pZt=k(L());var xpt=["title","titleId"];function mU(){return mU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Spt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var jpt=function(t){var n=t.title,r=t.titleId,o=_pt(t,xpt);return a("svg",mU({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M9.84 2.019L3.046 8.57c-.987.952-1.133 2.517-.199 3.516.951 1.021 2.58 1.106 3.64.19.034-.03.068-.061.1-.092l5.655-5.452a.484.484 0 000-.703.53.53 0 00-.729 0L5.92 11.421c-.572.551-1.505.657-2.131.163a1.455 1.455 0 01-.118-2.211l6.899-6.651a2.646 2.646 0 013.644 0 2.422 2.422 0 010 3.513L7.3 12.901c-1.333 1.285-3.497 1.493-4.95.336-1.54-1.22-1.764-3.411-.5-4.897a3.33 3.33 0 01.238-.252l5.78-5.572a.484.484 0 000-.703.53.53 0 00-.73 0l-5.78 5.572a4.36 4.36 0 000 6.324c2.188 2.109 5.202 1.31 6.66-.095l6.925-6.676a3.39 3.39 0 000-4.92C13.534.66 11.25.66 9.841 2.019z"}))},Ipt=jpt;var Z7={};$(Z7,{icon:()=>Apt});var dZt=k(L());var Ppt=["title","titleId"];function hU(){return hU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ept(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Cpt=function(t){var n=t.title,r=t.titleId,o=kpt(t,Ppt);return a("svg",hU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6.664 14.871a7 7 0 01-2.42-12.778.5.5 0 01.612.06c.456.431 8.216 8.212 8.98 9.002a.5.5 0 01.063.618 7.002 7.002 0 01-7.235 3.098zm6.168-3.312a1961.733 1961.733 0 00-8.377-8.4 6 6 0 108.378 8.4zm2.095-2.548a.5.5 0 11-.99-.144c.01-.066.01-.066.018-.133a6.007 6.007 0 00-.034-1.714.5.5 0 11.987-.163c.108.655.122 1.326.04 1.999l-.021.155zm-1.273-5.138a.5.5 0 11-.808.59 6.026 6.026 0 00-1.304-1.308.5.5 0 01.59-.806 7.026 7.026 0 011.522 1.524zM9.169 1.098a.5.5 0 11-.166.986 6.105 6.105 0 00-1.849-.026.5.5 0 01-.14-.99 7.02 7.02 0 012.155.03z"}))},Apt=Cpt;var e8={};$(e8,{icon:()=>Lpt});var hZt=k(L());var Mpt=["title","titleId"];function gU(){return gU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Rpt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var zpt=function(t){var n=t.title,r=t.titleId,o=Tpt(t,Mpt);return a("svg",gU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5 2a1 1 0 00-1 1v10a1 1 0 102 0V3a1 1 0 00-1-1zm6 0a1 1 0 00-1 1v10a1 1 0 102 0V3a1 1 0 00-1-1z"}))},Lpt=zpt;var t8={};$(t8,{icon:()=>Bpt});var vZt=k(L());var Dpt=["title","titleId"];function vU(){return vU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Fpt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Wpt=function(t){var n=t.title,r=t.titleId,o=Npt(t,Dpt);return a("svg",vU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M.586 2.586A2 2 0 000 4h1a1 1 0 011-1V2a2 2 0 00-1.414.586zM2 2h10.5a.5.5 0 010 1H2V2zM0 4h1v6.5a.5.5 0 01-1 0V4zm2.586.586A2 2 0 002 6h1a1 1 0 011-1V4a2 2 0 00-1.414.586zm0 8.828A2 2 0 012 12h1a1 1 0 001 1v1a2 2 0 01-1.414-.586zm12.828-8.828A2 2 0 0116 6h-1a1 1 0 00-1-1V4a2 2 0 011.414.586zm0 8.828A2 2 0 0016 12h-1a1 1 0 01-1 1v1a2 2 0 001.414-.586zM4 4h10v1H4zM3 7h12v1H3zm1 6h10v1H4zM2 6h1v6H2zm13 0h1v6h-1zm-5.5 4a.5.5 0 010 1H7.496a.5.5 0 010-1H9.5zm4 0a.5.5 0 010 1h-2.004a.5.5 0 010-1H13.5z"}))},Bpt=Wpt;var r8={};$(r8,{icon:()=>$pt});var bZt=k(L());var Hpt=["title","titleId"];function yU(){return yU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function qpt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Upt=function(t){var n=t.title,r=t.titleId,o=Vpt(t,Hpt);return a("svg",yU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M12.148 3.148L11 2l-9 9v3h3l9-9-1.144-1.144-8.002 7.998a.502.502 0 01-.708 0 .502.502 0 010-.708l8.002-7.998zM11 1c.256 0 .512.098.707.293l3 3a.999.999 0 010 1.414l-9 9A.997.997 0 015 15H2a1 1 0 01-1-1v-3c0-.265.105-.52.293-.707l9-9A.997.997 0 0111 1zM5 14H2v-3l3 3z"}))},$pt=Upt;var n8={};$(n8,{icon:()=>Ypt});var OZt=k(L());var Jpt=["title","titleId"];function bU(){return bU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Xpt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Kpt=function(t){var n=t.title,r=t.titleId,o=Gpt(t,Jpt);return a("svg",bU({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M5 8c1.105 0 2-1.12 2-2.5S6.105 3 5 3 3 4.12 3 5.5 3.895 8 5 8zm0-1c.356 0 1-.452 1-1.5S5.356 4 5 4s-1 .452-1 1.5S4.644 7 5 7z"}),a("path",{d:"M10.5 3H12L5.5 13H4l6.5-10z"}),a("path",{fillRule:"evenodd",d:"M13 10.5c0 1.38-.895 2.5-2 2.5s-2-1.12-2-2.5S9.895 8 11 8s2 1.12 2 2.5zm-1 0c0 1.048-.644 1.5-1 1.5s-1-.452-1-1.5.644-1.5 1-1.5 1 .452 1 1.5z"}))},Ypt=Kpt;var o8={};$(o8,{icon:()=>rft});var _Zt=k(L());var Qpt=["title","titleId"];function wU(){return wU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function eft(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var tft=function(t){var n=t.title,r=t.titleId,o=Zpt(t,Qpt);return a("svg",wU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M8 11h4.5a.5.5 0 100-1h-10a.5.5 0 000 1H7v4.25c0 .414.224.75.5.75s.5-.336.5-.75V11zM4 4h1v6H4V4zm6 0h1v6h-1V4zM4.286 2C4.08 2 4 2.063 4 2v1c0-.063.08 0 .286 0h6.428C10.92 3 11 2.937 11 3V2c0 .063-.08 0-.286 0H4.286zm0-1h6.428C11.424 1 12 1.448 12 2v1c0 .552-.576 1-1.286 1H4.286C3.576 4 3 3.552 3 3V2c0-.552.576-1 1.286-1z"}))},rft=tft;var i8={};$(i8,{icon:()=>lft});var jZt=k(L());var nft=["title","titleId"];function OU(){return OU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ift(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var aft=function(t){var n=t.title,r=t.titleId,o=oft(t,nft);return a("svg",OU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M9 11h4.5a.5.5 0 100-1h-10a.5.5 0 100 1H8v4.25c0 .414.224.75.5.75s.5-.336.5-.75V11zM5 4h7v6H5V4zm.286-3h6.428C12.424 1 13 1.448 13 2v1c0 .552-.576 1-1.286 1H5.286C4.576 4 4 3.552 4 3V2c0-.552.576-1 1.286-1z"}))},lft=aft;var a8={};$(a8,{icon:()=>fft});var PZt=k(L());var sft=["title","titleId"];function xU(){return xU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function cft(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var pft=function(t){var n=t.title,r=t.titleId,o=uft(t,sft);return a("svg",xU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M4.608 3.063C4.345 2.895 4 3.089 4 3.418v9.167c0 .329.345.523.608.356l7.2-4.584a.426.426 0 000-.711l-7.2-4.583zm.538-.844l7.2 4.583a1.426 1.426 0 010 2.399l-7.2 4.583C4.21 14.38 3 13.696 3 12.585V3.418C3 2.307 4.21 1.624 5.146 2.22z"}))},fft=pft;var l8={};$(l8,{icon:()=>vft});var EZt=k(L());var dft=["title","titleId"];function _U(){return _U=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function hft(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var gft=function(t){var n=t.title,r=t.titleId,o=mft(t,dft);return a("svg",_U({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M12.345 6.801l-7.2-4.581C4.21 1.625 3 2.308 3 3.419v9.162c0 1.111 1.21 1.794 2.146 1.199l7.2-4.581a1.425 1.425 0 000-2.398z"}))},vft=gft;var s8={};$(s8,{icon:()=>xft});var AZt=k(L());var yft=["title","titleId"];function SU(){return SU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function wft(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Oft=function(t){var n=t.title,r=t.titleId,o=bft(t,yft);return a("svg",SU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8.25 3a.5.5 0 01.5.5v3.75h3.75a.5.5 0 01.5.5v.5a.5.5 0 01-.5.5H8.75v3.75a.5.5 0 01-.5.5h-.5a.5.5 0 01-.5-.5V8.75H3.5a.5.5 0 01-.5-.5v-.5a.5.5 0 01.5-.5h3.75V3.5a.5.5 0 01.5-.5h.5z"}))},xft=Oft;var u8={};$(u8,{icon:()=>Pft});var TZt=k(L());var _ft=["title","titleId"];function jU(){return jU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function jft(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Ift=function(t){var n=t.title,r=t.titleId,o=Sft(t,_ft);return a("svg",jU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M8 7h3.5a.5.5 0 110 1H8v3.5a.5.5 0 11-1 0V8H3.5a.5.5 0 010-1H7V3.5a.5.5 0 011 0V7zm-.5-7C11.636 0 15 3.364 15 7.5S11.636 15 7.5 15 0 11.636 0 7.5 3.364 0 7.5 0zm0 .882a6.618 6.618 0 100 13.236A6.618 6.618 0 007.5.882z"}))},Pft=Ift;var c8={};$(c8,{icon:()=>Mft});var zZt=k(L());var kft=["title","titleId"];function IU(){return IU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Cft(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Aft=function(t){var n=t.title,r=t.titleId,o=Eft(t,kft);return a("svg",IU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 7V3.5a.5.5 0 00-1 0V7H3.5a.5.5 0 000 1H7v3.5a.5.5 0 101 0V8h3.5a.5.5 0 100-1H8zm-.5 8a7.5 7.5 0 110-15 7.5 7.5 0 010 15z"}))},Mft=Aft;var p8={};$(p8,{icon:()=>Dft});var DZt=k(L());var Tft=["title","titleId"];function PU(){return PU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function zft(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Lft=function(t){var n=t.title,r=t.titleId,o=Rft(t,Tft);return a("svg",PU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M13 8.5a.5.5 0 111 0V12a2 2 0 01-2 2H4a2 2 0 01-2-2V4a2 2 0 012-2h3.5a.5.5 0 010 1H4a1 1 0 00-1 1v8a1 1 0 001 1h8a1 1 0 001-1V8.5zm-5.12.339a.5.5 0 11-.706-.707L13.305 2H10.5a.5.5 0 110-1H14a1 1 0 011 1v3.5a.5.5 0 11-1 0V2.72L7.88 8.838z"}))},Dft=Lft;var f8={};$(f8,{icon:()=>Hft});var FZt=k(L());var Nft=["title","titleId"];function kU(){return kU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Wft(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Bft=function(t){var n=t.title,r=t.titleId,o=Fft(t,Nft);return a("svg",kU({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8.171 5.15L10.114 7H1.556C1.249 7 1 7.224 1 7.5s.249.5.556.5h8.526l-1.91 1.82a.52.52 0 000 .77c.227.213.6.213.828 0l2.05-1.95a1.552 1.552 0 000-2.31L9 4.38a.617.617 0 00-.829 0 .52.52 0 000 .77z"}),a("path",{d:"M6.804 12.792A.993.993 0 016 11.82V10H5v1.826c0 .945.673 1.76 1.608 1.945l6 1.19A1.992 1.992 0 0015 13.016V1.984A2 2 0 0012.608.04l-6 1.19C5.673 1.415 5 2.23 5 3.175V5h1V3.18c0-.472.336-.879.804-.972l6-1.189A1 1 0 0114 1.991v11.018a.995.995 0 01-1.196.972l-6-1.19z"}))},Hft=Bft;var d8={};$(d8,{icon:()=>Jft});var BZt=k(L());var Vft=["title","titleId"];function EU(){return EU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Uft(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var $ft=function(t){var n=t.title,r=t.titleId,o=qft(t,Vft);return a("svg",EU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 14A6 6 0 118 2a6 6 0 010 12zm0-1A5 5 0 108 3a5 5 0 000 10zm-.186-1.065A.785.785 0 017 11.12c0-.48.34-.82.814-.82.475 0 .809.34.809.82 0 .475-.334.815-.809.815zM5.9 6.317C5.96 5.168 6.755 4.4 8.048 4.4c1.218 0 2.091.759 2.091 1.8 0 .736-.36 1.304-1.03 1.707-.56.33-.717.56-.717 1.022v.305l-.1.1H7.47l-.1-.1v-.431c-.005-.646.302-1.104.987-1.514.527-.322.708-.59.708-1.047 0-.536-.416-.91-1.05-.91-.652 0-1.064.374-1.112.998l-.1.092H6l-.1-.105z"}))},Jft=$ft;var m8={};$(m8,{icon:()=>Qft});var VZt=k(L());var Gft=["title","titleId"];function CU(){return CU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Kft(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Yft=function(t){var n=t.title,r=t.titleId,o=Xft(t,Gft);return a("svg",CU({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6.848 2.47a1 1 0 01-.318 1.378A7.284 7.284 0 003.75 7.01 3 3 0 111 10v-.027a3.521 3.521 0 01.01-.232c.009-.15.027-.36.062-.618.07-.513.207-1.22.484-2.014.552-1.59 1.67-3.555 3.914-4.957a1 1 0 011.378.318zm7 0a1 1 0 01-.318 1.378 7.283 7.283 0 00-2.78 3.162A3 3 0 118 10v-.027a3.521 3.521 0 01.01-.232c.009-.15.027-.36.062-.618.07-.513.207-1.22.484-2.014.552-1.59 1.67-3.555 3.914-4.957a1 1 0 011.378.318z"}))},Qft=Yft;var h8={};$(h8,{icon:()=>ndt});var UZt=k(L());var Zft=["title","titleId"];function AU(){return AU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function tdt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var rdt=function(t){var n=t.title,r=t.titleId,o=edt(t,Zft);return a("svg",AU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M11.228 2.942a.5.5 0 11-.538.842A5 5 0 1013 8a.5.5 0 111 0 6 6 0 11-2.772-5.058zM14 1.5v3A1.5 1.5 0 0112.5 6h-3a.5.5 0 010-1h3a.5.5 0 00.5-.5v-3a.5.5 0 111 0z"}))},ndt=rdt;var g8={};$(g8,{icon:()=>sdt});var JZt=k(L());var odt=["title","titleId"];function MU(){return MU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function adt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ldt=function(t){var n=t.title,r=t.titleId,o=idt(t,odt);return a("svg",MU({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M7.684.895L6.074.358a1 1 0 00-1.296.753L4.2 4H2.5a.5.5 0 000 1h1.626a4.007 4.007 0 00.11 2.359l-2.072-.345A1 1 0 001 8v1c.364 0 .706.097 1 .268V8l1 .167 1.859.31 2.163.36.478.08v6L2 14v-1.268A1.99 1.99 0 011 13v1a1 1 0 00.836.986l6 1c.108.018.22.018.328 0l6-1A1 1 0 0015 14v-1a1.99 1.99 0 01-1-.268V14l-5.5.917v-6l.478-.08 2.163-.36L13 8.166 14 8v1.268A1.99 1.99 0 0115 9V8a1 1 0 00-1.164-.986l-2.073.345A3.991 3.991 0 0011.874 5H13.5a.5.5 0 000-1h-1.7l-.578-2.89A1 1 0 009.925.359L8.316.895a1 1 0 01-.632 0zm2.88 6.664A3.013 3.013 0 0010.83 5H5.17a3.013 3.013 0 00.266 2.559L8 7.986l2.564-.427zM10.8 4H9.2L9 3l1.5-.5.3 1.5zM1 12a1 1 0 100-2 1 1 0 000 2zm14 0a1 1 0 100-2 1 1 0 000 2z"}))},sdt=ldt;var v8={};$(v8,{icon:()=>ddt});var XZt=k(L());var udt=["title","titleId"];function TU(){return TU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function pdt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var fdt=function(t){var n=t.title,r=t.titleId,o=cdt(t,udt);return a("svg",TU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M11.994 4c1.059 0 1.924.818 2 1.856l.006.15v1.988a2.005 2.005 0 01-1.856 2L12 10H3.484l1.91 1.82a.52.52 0 010 .77.616.616 0 01-.829 0l-2.05-1.95a1.551 1.551 0 010-2.31l2.05-1.95a.617.617 0 01.83 0 .52.52 0 010 .77L3.45 9H12c.514-.003.935-.39.993-.888L13 7.994V6.006c0-.516-.388-.941-.888-1L11.994 5H9.5a.5.5 0 01-.09-.992L9.5 4h2.494z"}))},ddt=fdt;var y8={};$(y8,{icon:()=>ydt});var YZt=k(L());var mdt=["title","titleId"];function RU(){return RU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function gdt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var vdt=function(t){var n=t.title,r=t.titleId,o=hdt(t,mdt);return a("svg",RU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5.008 2H2.282c-.181 0-.245.002-.275.007-.005.03-.007.094-.007.275v11.436c0 .181.002.245.007.275.03.005.094.007.275.007h11.436c.181 0 .245-.002.275-.007.005-.03.007-.094.007-.275V4.62c0-.13-.001-.18-.004-.204a2.654 2.654 0 00-.141-.147L11.73 2.145a2.654 2.654 0 00-.147-.141A2.654 2.654 0 0011.38 2h-.388c.005.08.008.172.008.282v2.436c0 .446-.046.607-.134.77a.909.909 0 01-.378.378c-.163.088-.324.134-.77.134H6.282c-.446 0-.607-.046-.77-.134a.909.909 0 01-.378-.378C5.046 5.325 5 5.164 5 4.718V2.282c0-.11.003-.202.008-.282zM2.282 1h9.098c.259 0 .348.01.447.032a.87.87 0 01.273.113c.086.054.156.11.338.293l2.124 2.124c.182.182.239.252.293.338a.87.87 0 01.113.273c.023.1.032.188.032.447v9.098c0 .446-.046.607-.134.77a.909.909 0 01-.378.378c-.163.088-.324.134-.77.134H2.282c-.446 0-.607-.046-.77-.134a.909.909 0 01-.378-.378c-.088-.163-.134-.324-.134-.77V2.282c0-.446.046-.607.134-.77a.909.909 0 01.378-.378c.163-.088.324-.134.77-.134zM6 2.282v2.436c0 .181.002.245.007.275.03.005.094.007.275.007h3.436c.181 0 .245-.002.275-.007.005-.03.007-.094.007-.275V2.282c0-.181-.002-.245-.007-.275A2.248 2.248 0 009.718 2H6.282c-.181 0-.245.002-.275.007-.005.03-.007.094-.007.275zM8 12a2 2 0 110-4 2 2 0 010 4zm0-1a1 1 0 100-2 1 1 0 000 2z"}))},ydt=vdt;var b8={};$(b8,{icon:()=>_dt});var ZZt=k(L());var bdt=["title","titleId"];function zU(){return zU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Odt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var xdt=function(t){var n=t.title,r=t.titleId,o=wdt(t,bdt);return a("svg",zU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M12.5 12a.5.5 0 110 1 .5.5 0 010-1zm-2 0a.5.5 0 110 1 .5.5 0 010-1zm-2 0a.5.5 0 110 1 .5.5 0 010-1zm4-2a.5.5 0 110 1 .5.5 0 010-1zm-2 0a.5.5 0 110 1 .5.5 0 010-1zm2-1a.5.5 0 110-1 .5.5 0 010 1zm0-3a.5.5 0 110 1 .5.5 0 010-1zm-2 2a.5.5 0 110 1 .5.5 0 010-1zm-2 0a.5.5 0 110 1 .5.5 0 010-1zm0 2a.5.5 0 110 1 .5.5 0 010-1zm-2 2a.5.5 0 110 1 .5.5 0 010-1zm-2 0a.5.5 0 110 1 .5.5 0 010-1zm2-2a.5.5 0 110 1 .5.5 0 010-1zm6-6a.5.5 0 110 1 .5.5 0 010-1zm-2 2a.5.5 0 110 1 .5.5 0 010-1z"}))},_dt=xdt;var w8={};$(w8,{icon:()=>kdt});var ter=k(L());var Sdt=["title","titleId"];function LU(){return LU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Idt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Pdt=function(t){var n=t.title,r=t.titleId,o=jdt(t,Sdt);return a("svg",LU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M11.271 11.978l3.872 3.873a.502.502 0 00.708 0 .502.502 0 000-.708l-3.565-3.564c2.38-2.747 2.267-6.923-.342-9.532-2.73-2.73-7.17-2.73-9.898 0-2.728 2.729-2.728 7.17 0 9.9a6.955 6.955 0 004.949 2.05.5.5 0 000-1 5.96 5.96 0 01-4.242-1.757 6.01 6.01 0 010-8.486c2.337-2.34 6.143-2.34 8.484 0a6.01 6.01 0 010 8.486.5.5 0 00.034.738z"}))},kdt=Pdt;var O8={};$(O8,{icon:()=>Tdt});var ner=k(L());var Edt=["title","titleId"];function DU(){return DU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Adt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Mdt=function(t){var n=t.title,r=t.titleId,o=Cdt(t,Edt);return a("svg",DU({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M11.875 3.418a6 6 0 10.707.707l-2.46 2.46-1.156 1.156a1 1 0 11-.707-.707l.757-.757a2 2 0 00-2.43 3.137.5.5 0 11-.707.707 3 3 0 013.86-4.567l.714-.714A4 4 0 108 12a.5.5 0 110 1 5 5 0 113.164-8.871l.71-.71zm.709-.709a7 7 0 10.707.707l.366-.366a.5.5 0 10-.707-.707l-.366.366z"}))},Tdt=Mdt;var x8={};$(x8,{icon:()=>Ndt});var ier=k(L());var Rdt=["title","titleId"];function NU(){return NU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ldt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Ddt=function(t){var n=t.title,r=t.titleId,o=zdt(t,Rdt);return a("svg",NU({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M13.657 3.05a.5.5 0 00-.707-.707l-.366.366A7 7 0 108 15a4.994 4.994 0 01-.597-1.03 6 6 0 114.471-10.552l-.71.71a5 5 0 10-4.08 8.788 5.027 5.027 0 01-.082-1.042A4.002 4.002 0 018 4a3.98 3.98 0 012.453.84l-.715.714a3 3 0 00-3.86 4.567.5.5 0 10.708-.707 2 2 0 012.43-3.137l-.757.757a1 1 0 10.707.707l1.155-1.155 2.46-2.46a5.972 5.972 0 011.39 3.277c.367.158.713.36 1.029.597 0-1.636-.57-3.271-1.71-4.584l.367-.366zM16 12a4 4 0 11-8 0 4 4 0 018 0zm-4 .5a.577.577 0 01-.57-.495l-.29-2.015a.867.867 0 111.718 0l-.288 2.015a.577.577 0 01-.57.495zm0 2.5a1 1 0 100-2 1 1 0 000 2z"}))},Ndt=Ddt;var _8={};$(_8,{icon:()=>Vdt});var ler=k(L());var Fdt=["title","titleId"];function FU(){return FU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Bdt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Hdt=function(t){var n=t.title,r=t.titleId,o=Wdt(t,Fdt);return a("svg",FU({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M13.657 3.05a.5.5 0 10-.707-.707l-.366.366A7 7 0 108 15a4.994 4.994 0 01-.597-1.03 6 6 0 114.471-10.552l-.71.71a5 5 0 10-4.08 8.788 5.028 5.028 0 01-.082-1.042A4.002 4.002 0 018 4a3.98 3.98 0 012.453.84l-.715.714a3 3 0 00-3.86 4.567.5.5 0 10.708-.707 2 2 0 012.43-3.137l-.757.757a1 1 0 10.707.707l1.155-1.155 2.46-2.46a5.972 5.972 0 011.39 3.277c.367.158.713.36 1.029.597 0-1.636-.57-3.271-1.71-4.584l.367-.366zM16 12a4 4 0 11-8 0 4 4 0 018 0zm-1.646-1.354a.5.5 0 010 .707l-2.5 2.5a.5.5 0 01-.708 0l-1-1a.5.5 0 01.708-.707l.646.647 2.146-2.147a.5.5 0 01.708 0z"}))},Vdt=Hdt;var S8={};$(S8,{icon:()=>Gdt});var uer=k(L());var qdt=["title","titleId"];function WU(){return WU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function $dt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Jdt=function(t){var n=t.title,r=t.titleId,o=Udt(t,qdt);return a("svg",WU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M4 6h1v1H4V6zm2 2H5V7h1v1zm0 1V8h1v1H6zm-1 1V9h1v1H5zm0 0v1H4v-1h1zm2 0h4v1H7v-1z"}),a("path",{fillRule:"evenodd",d:"M1 3a1 1 0 011-1h12a1 1 0 011 1v10a1 1 0 01-1 1H2a1 1 0 01-1-1V3zm1 1h12v9H2V4z",clipRule:"evenodd"}))},Gdt=Jdt;var j8={};$(j8,{icon:()=>Zdt});var per=k(L());var Xdt=["title","titleId"];function BU(){return BU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ydt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Qdt=function(t){var n=t.title,r=t.titleId,o=Kdt(t,Xdt);return a("svg",BU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5.134 7.031L8 12.764l2.866-5.733L8 2.016 5.134 7.03zM8 0l4 7-4 8-4-8 4-7z"}))},Zdt=Qdt;var I8={};$(I8,{icon:()=>o0t});var der=k(L());var e0t=["title","titleId"];function HU(){return HU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function r0t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var n0t=function(t){var n=t.title,r=t.titleId,o=t0t(t,e0t);return a("svg",HU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M3 6.81v6.38c0 .493.448.9.992.9h7.016c.543 0 .992-.406.992-.9V6.81c0-.493-.448-.9-.992-.9H3.992c-.543 0-.992.406-.992.9zM6 5v.91h3V5h2.008C12.108 5 13 5.818 13 6.81v6.38c0 1-.9 1.81-1.992 1.81H3.992C2.892 15 2 14.182 2 13.19V6.81C2 5.81 2.9 5 3.992 5H6zm1.997-3.552A.506.506 0 018 1.5v8a.5.5 0 01-1 0v-8a.51.51 0 010-.017L5.18 3.394a.52.52 0 01-.77 0 .617.617 0 010-.829L6.36.515a1.552 1.552 0 012.31 0l1.95 2.05c.214.229.214.601 0 .83a.52.52 0 01-.77 0L7.997 1.447z"}))},o0t=n0t;var P8={};$(P8,{icon:()=>u0t});var her=k(L());var i0t=["title","titleId"];function VU(){return VU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function l0t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var s0t=function(t){var n=t.title,r=t.titleId,o=a0t(t,i0t);return a("svg",VU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M7.007.5a.5.5 0 011 0v2.024a.999.999 0 00.268-.227l1.027-1.233a.5.5 0 01.769.64L8.275 3.86a.999.999 0 01-.268.227v2.548l2.207-1.274c0-.114.02-.231.062-.346l.968-2.632a.5.5 0 11.938.345l-.554 1.506a.998.998 0 00-.062.346l1.753-1.012a.5.5 0 11.5.866l-1.753 1.012c.1.057.21.098.33.119l1.582.273a.5.5 0 11-.17.986l-2.764-.478a1 1 0 01-.33-.12L8.506 7.5l2.207 1.274a1 1 0 01.33-.119l2.764-.478a.5.5 0 11.17.986l-1.582.273a.999.999 0 00-.33.12l1.753 1.011a.5.5 0 11-.5.866l-1.753-1.012c0 .115.02.231.062.346l.554 1.506a.5.5 0 01-.938.345l-.968-2.632a.999.999 0 01-.062-.346L8.007 8.366v2.548c.098.058.19.133.268.227l1.796 2.155a.5.5 0 01-.769.64l-1.027-1.233a.999.999 0 00-.268-.226V14.5a.5.5 0 01-1 0v-2.024a.999.999 0 00-.269.227l-1.027 1.233a.5.5 0 01-.768-.64l1.795-2.155a.999.999 0 01.269-.227V8.366L4.8 9.64c0 .114-.02.231-.062.346l-.969 2.632a.5.5 0 11-.938-.345l.554-1.506a1 1 0 00.062-.346l-1.753 1.012a.5.5 0 01-.5-.866l1.753-1.012a.999.999 0 00-.33-.119l-1.582-.273a.5.5 0 01.17-.986l2.764.478c.12.02.232.062.33.12L6.508 7.5 4.3 6.226a.999.999 0 01-.33.119l-2.765.478a.5.5 0 11-.17-.986l1.582-.273a.999.999 0 00.33-.12L1.194 4.434a.5.5 0 11.5-.866l1.753 1.012c0-.114-.02-.231-.062-.346L2.83 2.727a.5.5 0 11.938-.345l.969 2.632a.999.999 0 01.062.346l2.207 1.274V4.086a1 1 0 01-.269-.227L4.943 1.704a.5.5 0 01.768-.64l1.027 1.233c.079.094.17.17.269.227V.5z"}))},u0t=s0t;var k8={};$(k8,{icon:()=>m0t});var ver=k(L());var c0t=["title","titleId"];function qU(){return qU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function f0t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var d0t=function(t){var n=t.title,r=t.titleId,o=p0t(t,c0t);return a("svg",qU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M4.308 7h8.136c.307 0 .556.224.556.5s-.249.5-.556.5H4.308l4.096 4.096a.5.5 0 01-.707.707L3.454 8.561a1.494 1.494 0 01-.433-.925.454.454 0 010-.272c.03-.338.175-.666.433-.925l4.243-4.242a.5.5 0 11.707.707L4.308 7z",fillRule:"evenodd"}))},m0t=d0t;var E8={};$(E8,{icon:()=>b0t});var ber=k(L());var h0t=["title","titleId"];function UU(){return UU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function v0t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var y0t=function(t){var n=t.title,r=t.titleId,o=g0t(t,h0t);return a("svg",UU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M11.692 7H3.556C3.249 7 3 7.224 3 7.5s.249.5.556.5h8.136l-4.096 4.096a.5.5 0 00.707.707l4.243-4.242c.258-.259.403-.587.433-.925a.454.454 0 000-.272 1.494 1.494 0 00-.433-.925L8.303 2.197a.5.5 0 10-.707.707L11.692 7z"}))},b0t=y0t;var C8={};$(C8,{icon:()=>S0t});var Oer=k(L());var w0t=["title","titleId"];function $U(){return $U=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function x0t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var _0t=function(t){var n=t.title,r=t.titleId,o=O0t(t,w0t);return a("svg",$U({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7 11.692V3.556C7 3.249 7.224 3 7.5 3s.5.249.5.556v8.136l4.096-4.096a.5.5 0 01.707.707l-4.242 4.243a1.494 1.494 0 01-.925.433.454.454 0 01-.272 0 1.494 1.494 0 01-.925-.433L2.197 8.303a.5.5 0 11.707-.707L7 11.692z"}))},S0t=_0t;var A8={};$(A8,{icon:()=>E0t});var _er=k(L());var j0t=["title","titleId"];function JU(){return JU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function P0t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var k0t=function(t){var n=t.title,r=t.titleId,o=I0t(t,j0t);return a("svg",JU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 4.207v8.237c0 .307-.224.556-.5.556s-.5-.249-.5-.556V4.207L2.904 8.303a.5.5 0 01-.707-.707l4.242-4.242a1.5 1.5 0 012.122 0l4.242 4.242a.5.5 0 11-.707.707L8 4.207z"}))},E0t=k0t;var M8={};$(M8,{icon:()=>R0t});var jer=k(L());var C0t=["title","titleId"];function GU(){return GU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function M0t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var T0t=function(t){var n=t.title,r=t.titleId,o=A0t(t,C0t);return a("svg",GU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7 12.786V3.2L3.604 6.596a.5.5 0 01-.708-.707l3.536-3.535a1.5 1.5 0 012.121 0l3.536 3.535a.5.5 0 01-.707.707L8 3.214v9.557l3.382-3.382a.5.5 0 01.707.707l-3.536 3.536a1.5 1.5 0 01-2.121 0l-3.536-3.536a.5.5 0 01.708-.707L7 12.786z"}))},R0t=T0t;var T8={};$(T8,{icon:()=>F0t});var Per=k(L());var z0t=["title","titleId"];function XU(){return XU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function D0t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var N0t=function(t){var n=t.title,r=t.titleId,o=L0t(t,z0t);return a("svg",XU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M6 2a.86.86 0 00-.792.511l-1.33 2.924-3.128.446c-.71.102-1.001.976-.496 1.487l2.313 2.336-.563 3.268A.877.877 0 002.864 14c.142 0 .289-.036.429-.116L6 12.342l2.707 1.542c.14.08.287.116.43.116a.877.877 0 00.859-1.027l-.563-3.269 2.313-2.336c.505-.511.214-1.385-.496-1.487l-3.128-.446-1.33-2.923A.86.86 0 006 2m8 8h2v1h-2v2h-1v-2h-2v-1h2V8h1v2zM6 3c.073 0 .095.049.104.07l1.267 2.783.162.356.387.055 2.978.425c.017.002.071.01.095.08a.116.116 0 01-.029.126L8.762 9.121l-.259.261.063.362.535 3.112c.007.04 0 .07-.023.098a.127.127 0 01-.091.046.106.106 0 01-.055-.016l-2.578-1.469L6 11.314l-.354.201-2.579 1.469a.103.103 0 01-.054.016.127.127 0 01-.091-.046c-.023-.028-.03-.058-.024-.098l.536-3.112.063-.362-.259-.261-2.202-2.226a.116.116 0 01-.029-.126.108.108 0 01.094-.08l2.98-.425.386-.055.162-.356 1.267-2.786C5.905 3.05 5.927 3 6 3z"}))},F0t=N0t;var R8={};$(R8,{icon:()=>q0t});var Eer=k(L());var W0t=["title","titleId"];function KU(){return KU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function H0t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var V0t=function(t){var n=t.title,r=t.titleId,o=B0t(t,W0t);return a("svg",KU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M14 10h2v1h-2v2h-1v-2h-2v-1h2V8h1v2zM6 2a.86.86 0 00-.792.511l-1.33 2.924-3.128.446c-.71.102-1.001.976-.496 1.487l2.313 2.336-.563 3.268A.877.877 0 002.864 14c.142 0 .289-.036.429-.116L6 12.342l2.707 1.542c.14.08.287.116.43.116a.877.877 0 00.859-1.027l-.563-3.269 2.313-2.336c.505-.511.214-1.385-.496-1.487l-3.128-.446-1.33-2.923A.86.86 0 006 2"}))},q0t=V0t;var z8={};$(z8,{icon:()=>X0t});var Aer=k(L());var U0t=["title","titleId"];function YU(){return YU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function J0t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var G0t=function(t){var n=t.title,r=t.titleId,o=$0t(t,U0t);return a("svg",YU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M8 2a.86.86 0 00-.792.511l-1.33 2.924-3.128.446c-.71.102-1.001.976-.496 1.487l2.313 2.336-.563 3.268A.877.877 0 004.864 14c.142 0 .289-.036.429-.116L8 12.342l2.707 1.542c.14.08.287.116.43.116a.877.877 0 00.859-1.027l-.563-3.269 2.313-2.336c.505-.511.214-1.385-.496-1.487l-3.128-.446-1.33-2.923A.86.86 0 008 2m0 1c.073 0 .095.049.104.07l1.267 2.783.162.356.387.055 2.978.425c.017.002.071.01.095.08a.116.116 0 01-.029.126l-2.202 2.226-.259.261.063.362.535 3.112c.007.04 0 .07-.023.098a.127.127 0 01-.091.046.106.106 0 01-.055-.016l-2.578-1.469L8 11.314l-.354.201-2.579 1.469a.103.103 0 01-.054.016.127.127 0 01-.091-.046c-.023-.028-.03-.058-.024-.098l.536-3.112.063-.362-.259-.261-2.202-2.226a.116.116 0 01-.029-.126.108.108 0 01.094-.08l2.98-.425.386-.055.162-.356 1.267-2.786C7.905 3.05 7.927 3 8 3"}))},X0t=G0t;var L8={};$(L8,{icon:()=>e1t});var Ter=k(L());var K0t=["title","titleId"];function QU(){return QU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Q0t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Z0t=function(t){var n=t.title,r=t.titleId,o=Y0t(t,K0t);return a("svg",QU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M6 2a.86.86 0 00-.792.511l-1.33 2.924-3.128.446c-.71.102-1.001.976-.496 1.487l2.313 2.336-.563 3.268A.877.877 0 002.864 14c.142 0 .289-.036.429-.116L6 12.342l2.707 1.542c.14.08.287.116.43.116a.877.877 0 00.859-1.027l-.563-3.269 2.313-2.336c.505-.511.214-1.385-.496-1.487l-3.128-.446-1.33-2.923A.86.86 0 006 2m0 1c.073 0 .095.049.104.07l1.267 2.783.162.356.387.055 2.978.425c.017.002.071.01.095.08a.116.116 0 01-.029.126L8.762 9.121l-.259.261.063.362.535 3.112c.007.04 0 .07-.023.098a.127.127 0 01-.091.046.106.106 0 01-.055-.016l-2.578-1.469L6 11.314l-.354.201-2.579 1.469a.103.103 0 01-.054.016.127.127 0 01-.091-.046c-.023-.028-.03-.058-.024-.098l.536-3.112.063-.362-.259-.261-2.202-2.226a.116.116 0 01-.029-.126.108.108 0 01.094-.08l2.98-.425.386-.055.162-.356 1.267-2.786C5.905 3.05 5.927 3 6 3"}))},e1t=Z0t;var D8={};$(D8,{icon:()=>i1t});var zer=k(L());var t1t=["title","titleId"];function ZU(){return ZU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function n1t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var o1t=function(t){var n=t.title,r=t.titleId,o=r1t(t,t1t);return a("svg",ZU({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M8 2a.86.86 0 00-.792.511l-1.33 2.924-3.128.446c-.71.102-1.001.976-.496 1.487l2.313 2.336-.563 3.268A.877.877 0 004.864 14c.142 0 .289-.036.429-.116L8 12.342l2.707 1.542c.14.08.287.116.43.116a.877.877 0 00.859-1.027l-.563-3.269 2.313-2.336c.505-.511.214-1.385-.496-1.487l-3.128-.446-1.33-2.923A.86.86 0 008 2"}))},i1t=o1t;var N8={};$(N8,{icon:()=>c1t});var Der=k(L());var a1t=["title","titleId"];function e$(){return e$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function s1t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var u1t=function(t){var n=t.title,r=t.titleId,o=l1t(t,a1t);return a("svg",e$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M6 2a.86.86 0 00-.792.511l-1.33 2.924-3.128.446c-.71.102-1.001.976-.496 1.487l2.313 2.336-.563 3.268A.877.877 0 002.864 14c.142 0 .289-.036.429-.116L6 12.342l2.707 1.542c.14.08.287.116.43.116a.877.877 0 00.859-1.027l-.563-3.269 2.313-2.336c.505-.511.214-1.385-.496-1.487l-3.128-.446-1.33-2.923A.86.86 0 006 2"}))},c1t=u1t;var F8={};$(F8,{icon:()=>h1t});var Fer=k(L());var p1t=["title","titleId"];function t$(){return t$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function d1t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var m1t=function(t){var n=t.title,r=t.titleId,o=f1t(t,p1t);return a("svg",t$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M6 2a.86.86 0 00-.792.511l-1.33 2.924-3.128.446c-.71.102-1.001.976-.496 1.487l2.313 2.336-.563 3.268A.877.877 0 002.864 14c.142 0 .289-.036.429-.116L6 12.342l2.707 1.542c.14.08.287.116.43.116a.877.877 0 00.859-1.027l-.563-3.269 2.313-2.336c.505-.511.214-1.385-.496-1.487l-3.128-.446-1.33-2.923A.86.86 0 006 2m0 1c.073 0 .095.049.104.07l1.267 2.783.162.356.387.055 2.978.425c.017.002.071.01.095.08a.116.116 0 01-.029.126L8.762 9.121l-.259.261.063.362.535 3.112c.007.04 0 .07-.023.098a.127.127 0 01-.091.046.106.106 0 01-.055-.016l-2.578-1.469L6 11.314l-.354.201-2.579 1.469a.103.103 0 01-.054.016.127.127 0 01-.091-.046c-.023-.028-.03-.058-.024-.098l.536-3.112.063-.362-.259-.261-2.202-2.226a.116.116 0 01-.029-.126.108.108 0 01.094-.08l2.98-.425.386-.055.162-.356 1.267-2.786C5.905 3.05 5.927 3 6 3zm10 7v1h-5v-1h5z"}))},h1t=m1t;var W8={};$(W8,{icon:()=>w1t});var Ber=k(L());var g1t=["title","titleId"];function r$(){return r$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function y1t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var b1t=function(t){var n=t.title,r=t.titleId,o=v1t(t,g1t);return a("svg",r$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M6 2a.86.86 0 01.792.511l1.33 2.924 3.128.446c.71.102 1.001.976.496 1.487L9.433 9.704l.563 3.268A.877.877 0 019.136 14a.862.862 0 01-.429-.116L6 12.342l-2.707 1.542a.862.862 0 01-.43.116.877.877 0 01-.859-1.027l.563-3.269L.254 7.368C-.25 6.857.04 5.983.75 5.88l3.128-.446 1.33-2.923A.86.86 0 016 2zm10 8v1h-5v-1h5z"}))},w1t=b1t;var B8={};$(B8,{icon:()=>j1t});var Ver=k(L());var O1t=["title","titleId"];function n$(){return n$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function _1t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var S1t=function(t){var n=t.title,r=t.titleId,o=x1t(t,O1t);return a("svg",n$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M8 14v-4h1v4h5V5h1v9a1 1 0 01-1 1H2a1 1 0 01-1-1v-2h1v2h6zm4.853-10.146l-2.999 3a1.5 1.5 0 01-2.538 1.568l-2.714.904L4 9.527a1.5 1.5 0 11-.316-.948L7 7.473a1.5 1.5 0 012.146-1.327l3-3a1.5 1.5 0 11.707.707z"}))},j1t=S1t;var H8={};$(H8,{icon:()=>C1t});var Uer=k(L());var I1t=["title","titleId"];function o$(){return o$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function k1t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var E1t=function(t){var n=t.title,r=t.titleId,o=P1t(t,I1t);return a("svg",o$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M4 2h8a2 2 0 012 2v8a2 2 0 01-2 2H4a2 2 0 01-2-2V4a2 2 0 012-2zm0 1a1 1 0 00-1 1v8a1 1 0 001 1h8a1 1 0 001-1V4a1 1 0 00-1-1H4z",fillRule:"evenodd"}))},C1t=E1t;var V8={};$(V8,{icon:()=>z1t});var Jer=k(L());var A1t=["title","titleId"];function i$(){return i$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function T1t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var R1t=function(t){var n=t.title,r=t.titleId,o=M1t(t,A1t);return a("svg",i$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("rect",{width:12,height:12,x:2,y:2,rx:2,fillRule:"evenodd"}))},z1t=R1t;var q8={};$(q8,{icon:()=>W1t});var Xer=k(L());var L1t=["title","titleId"];function a$(){return a$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function N1t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var F1t=function(t){var n=t.title,r=t.titleId,o=D1t(t,L1t);return a("svg",a$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M12.259 3.034A1.001 1.001 0 0012 3H4a1 1 0 00-1 1v8c0 .09.012.176.034.259l9.225-9.225zm.707.707l-9.225 9.225c.083.022.17.034.259.034h8a1 1 0 001-1V4c0-.09-.012-.176-.034-.259zM4 2h8a2 2 0 012 2v8a2 2 0 01-2 2H4a2 2 0 01-2-2V4a2 2 0 012-2z"}))},W1t=F1t;var U8={};$(U8,{icon:()=>U1t});var Yer=k(L());var B1t=["title","titleId"];function l$(){return l$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function V1t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var q1t=function(t){var n=t.title,r=t.titleId,o=H1t(t,B1t);return a("svg",l$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fillRule:"evenodd",transform:"translate(0 2)"},a("path",{fillRule:"nonzero",d:"M2 6a1 1 0 01-1-1V2a1 1 0 011-1h12a1 1 0 011 1v3a1 1 0 01-1 1H2zm13 2v3a1 1 0 01-1 1H2a1 1 0 01-1-1V8a1 1 0 011-1h12a1 1 0 011 1zm1-3V2a2 2 0 00-2-2H2a2 2 0 00-2 2v3c0 .601.271 1.133.69 1.5C.271 6.867 0 7.399 0 8v3a2 2 0 002 2h12a2 2 0 002-2V8c0-.601-.271-1.133-.689-1.5.418-.367.689-.899.689-1.5z"}),a("circle",{cx:4.5,cy:9.5,r:1.5}),a("circle",{cx:4.5,cy:3.5,r:1.5}),a("path",{d:"M12 8h1v3h-1zM10 8h1v3h-1zM12 2h1v3h-1zM10 2h1v3h-1z"})))},U1t=q1t;var $8={};$($8,{icon:()=>K1t});var Zer=k(L());var $1t=["title","titleId"];function s$(){return s$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function G1t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var X1t=function(t){var n=t.title,r=t.titleId,o=J1t(t,$1t);return a("svg",s$({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M9.297 3L8.93 5.102h1.351l-.32 1.828H8.609l-.656 3.883c-.036.265-.02.466.05.601.071.135.247.208.528.219.11.005.334-.008.672-.04L9.016 13.5a4.16 4.16 0 01-1.383.195c-.797-.01-1.393-.244-1.79-.703-.395-.458-.557-1.08-.484-1.867l.688-4.195H5l.313-1.828h1.046L6.727 3h2.57z"}))},K1t=X1t;var J8={};$(J8,{icon:()=>tmt});var ttr=k(L());var Y1t=["title","titleId"];function u$(){return u$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Z1t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var emt=function(t){var n=t.title,r=t.titleId,o=Q1t(t,Y1t);return a("svg",u$({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M6 2H1v12h3V7a1 1 0 011-1h5a1 1 0 011 1v1h4V4H7c-.621 0-1-.379-1-1V2zm10 6v6a1 1 0 01-1 1H1a1 1 0 01-1-1V2a1 1 0 011-1h5.25a.75.75 0 01.75.75l-.004.206C6.99 2.317 6.974 3 7 3h8a1 1 0 011 1v4zm-1 1h-4a1 1 0 01-1-1V7H5v7h10V9zM2 4.5a.5.5 0 01.5-.5h2a.5.5 0 010 1h-2a.5.5 0 01-.5-.5zM6.5 9a.5.5 0 000 1h2a.5.5 0 000-1h-2z"}))},tmt=emt;var G8={};$(G8,{icon:()=>amt});var ntr=k(L());var rmt=["title","titleId"];function c$(){return c$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function omt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var imt=function(t){var n=t.title,r=t.titleId,o=nmt(t,rmt);return a("svg",c$({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M12 8a4 4 0 11-8 0 4 4 0 018 0zM7.25.75a.75.75 0 011.5 0v1.5a.75.75 0 11-1.5 0V.75zm0 13a.75.75 0 011.5 0v1.5a.75.75 0 01-1.5 0v-1.5zm5.346-11.407a.75.75 0 011.06 1.06l-1.06 1.061a.75.75 0 01-1.06-1.06l1.06-1.06zm-9.192 9.193a.75.75 0 111.06 1.06l-1.06 1.06a.75.75 0 01-1.06-1.06l1.06-1.06zM.75 8.75a.75.75 0 010-1.5h1.5a.75.75 0 110 1.5H.75zm13 0a.75.75 0 010-1.5h1.5a.75.75 0 010 1.5h-1.5zM2.343 3.404a.75.75 0 111.06-1.06l1.061 1.06a.75.75 0 01-1.06 1.06l-1.06-1.06zm9.193 9.192a.75.75 0 011.06-1.06l1.06 1.06a.75.75 0 01-1.06 1.06l-1.06-1.06z"}))},amt=imt;var X8={};$(X8,{icon:()=>pmt});var itr=k(L());var lmt=["title","titleId"];function p$(){return p$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function umt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var cmt=function(t){var n=t.title,r=t.titleId,o=smt(t,lmt);return a("svg",p$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("rect",{x:2,y:2,width:12,height:12,rx:3}),a("rect",{className:"euiSwatchInput__stroke",x:2.5,y:2.5,width:11,height:11,rx:2}))},pmt=cmt;var K8={};$(K8,{icon:()=>gmt});var ltr=k(L());var fmt=["title","titleId"];function f$(){return f$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function mmt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var hmt=function(t){var n=t.title,r=t.titleId,o=dmt(t,fmt);return a("svg",f$({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M10.8 0H2a1 1 0 00-1 1v8l1-1V1h8v3.5a.5.5 0 00.5.5H14v10H2v-1a3.5 3.5 0 013.5-3.5H8V13l3-3-3-3v2.5H5.5A4.5 4.5 0 001 14v1a1 1 0 001 1h12a1 1 0 001-1V4.429c0-.256-.098-.503-.274-.689l-3.2-3.428A1.002 1.002 0 0010.8 0z"}))},gmt=hmt;var Y8={};$(Y8,{icon:()=>Omt});var utr=k(L());var vmt=["title","titleId"];function d$(){return d$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function bmt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var wmt=function(t){var n=t.title,r=t.titleId,o=ymt(t,vmt);return a("svg",d$({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M1 1v14h14V1H1zM0 0h16v16H0V0zm9 1v14h1V1H9zM3 3.5h4v-1H3v1zm0 3h4v-1H3v1zm0 3h4v-1H3v1z"}))},Omt=wmt;var Q8={};$(Q8,{icon:()=>Imt});var ptr=k(L());var xmt=["title","titleId"];function m$(){return m$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Smt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var jmt=function(t){var n=t.title,r=t.titleId,o=_mt(t,xmt);return a("svg",m$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M16 3v11a2 2 0 01-2 2H2a2 2 0 01-2-2V2a2 2 0 012-2h12a2 2 0 012 2v1zm-1 0V2a1 1 0 00-1-1H2a1 1 0 00-1 1v1h14zm0 1H1v10a1 1 0 001 1h12a1 1 0 001-1V4zM4.496 7a.5.5 0 010 1H2.495a.5.5 0 010-1h2.001zm5.218 0c.158 0 .286.224.286.5s-.128.5-.286.5H6.286C6.128 8 6 7.776 6 7.5s.128-.5.286-.5h3.428zM4.496 5a.5.5 0 010 1H2.495a.5.5 0 010-1h2.001zm5.218 0c.158 0 .286.224.286.5s-.128.5-.286.5H6.286C6.128 6 6 5.776 6 5.5s.128-.5.286-.5h3.428zM4.496 9a.5.5 0 010 1H2.495a.5.5 0 010-1h2.001zm5.218 0c.158 0 .286.224.286.5s-.128.5-.286.5H6.286C6.128 10 6 9.776 6 9.5s.128-.5.286-.5h3.428zm-5.218 2a.5.5 0 010 1H2.495a.5.5 0 010-1h2.001zm5.218 0c.158 0 .286.224.286.5s-.128.5-.286.5H6.286C6.128 12 6 11.776 6 11.5s.128-.5.286-.5h3.428zm-5.218 2a.5.5 0 010 1H2.495a.5.5 0 010-1h2.001zm9-6a.5.5 0 010 1h-2.001a.5.5 0 010-1h2.001zm0-2a.5.5 0 010 1h-2.001a.5.5 0 010-1h2.001zm0 4a.5.5 0 010 1h-2.001a.5.5 0 010-1h2.001zm0 2a.5.5 0 010 1h-2.001a.5.5 0 010-1h2.001zm0 2a.5.5 0 010 1h-2.001a.5.5 0 010-1h2.001zm-3.782 0c.158 0 .286.224.286.5s-.128.5-.286.5H6.286C6.128 14 6 13.776 6 13.5s.128-.5.286-.5h3.428z"}))},Imt=jmt;var Z8={};$(Z8,{icon:()=>Amt});var dtr=k(L());var Pmt=["title","titleId"];function h$(){return h$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Emt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Cmt=function(t){var n=t.title,r=t.titleId,o=kmt(t,Pmt);return a("svg",h$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M16 3v11a2 2 0 01-2 2H2a2 2 0 01-2-2V2a2 2 0 012-2h12a2 2 0 012 2v1zm-1 0V2a1 1 0 00-1-1H2a1 1 0 00-1 1v1h14zm0 1H1v10a1 1 0 001 1h12a1 1 0 001-1V4zM4.5 7a.5.5 0 010 1H2.496a.5.5 0 110-1H4.5zm9 0a.5.5 0 110 1h-6a.5.5 0 010-1h6zm-9 4a.5.5 0 110 1H2.496a.5.5 0 110-1H4.5zm9 0a.5.5 0 110 1h-6a.5.5 0 110-1h6z"}))},Amt=Cmt;var ex={};$(ex,{icon:()=>Lmt});var htr=k(L());var Mmt=["title","titleId"];function g$(){return g$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Rmt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var zmt=function(t){var n=t.title,r=t.titleId,o=Tmt(t,Mmt);return a("svg",g$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M16 3v11a2 2 0 01-2 2H2a2 2 0 01-2-2V2a2 2 0 012-2h12a2 2 0 012 2v1zm-1 0V2a1 1 0 00-1-1H2a1 1 0 00-1 1v1h14zm0 1H1v10a1 1 0 001 1h12a1 1 0 001-1V4zM4.5 6a.5.5 0 010 1H2.496a.5.5 0 110-1H4.5zm5.214 0c.158 0 .286.224.286.5s-.128.5-.286.5H6.286C6.128 7 6 6.776 6 6.5s.128-.5.286-.5h3.428zM4.5 9a.5.5 0 010 1H2.496a.5.5 0 110-1H4.5zm5.214 0c.158 0 .286.224.286.5s-.128.5-.286.5H6.286C6.128 10 6 9.776 6 9.5s.128-.5.286-.5h3.428zM4.5 12a.5.5 0 110 1H2.496a.5.5 0 110-1H4.5zm9-6a.5.5 0 110 1h-2.004a.5.5 0 010-1H13.5zm0 3a.5.5 0 110 1h-2.004a.5.5 0 010-1H13.5zm0 3a.5.5 0 110 1h-2.004a.5.5 0 010-1H13.5zm-3.786 0c.158 0 .286.224.286.5s-.128.5-.286.5H6.286C6.128 13 6 12.776 6 12.5s.128-.5.286-.5h3.428z"}))},Lmt=zmt;var tx={};$(tx,{icon:()=>Bmt});var vtr=k(L());var Dmt=["title","titleId"];function v$(){return v$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Fmt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Wmt=function(t){var n=t.title,r=t.titleId,o=Nmt(t,Dmt);return a("svg",v$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6.254 14.97L.996 9.712c-.315-.316-.397-.463-.45-.64a.909.909 0 010-.534c.053-.177.135-.324.45-.64L7.43 1.466c.182-.183.252-.24.338-.293a.87.87 0 01.273-.113c.099-.023.188-.032.446-.032h5.173c.445 0 .607.046.77.133.162.087.29.214.377.377.088.162.134.324.136.769l.015 5.15c0 .259-.009.348-.032.448a.87.87 0 01-.112.273c-.054.087-.111.157-.294.34L8.067 14.97c-.315.315-.462.396-.639.45a.909.909 0 01-.535 0c-.176-.054-.324-.135-.639-.45zm1.106-.707l6.453-6.453c.092-.092.126-.128.141-.147.003-.025.004-.074.004-.204l-.015-5.15c0-.181-.003-.245-.009-.275a2.247 2.247 0 00-.274-.007H8.487c-.13 0-.179.001-.203.004-.02.015-.055.05-.147.141L1.703 8.606a2.248 2.248 0 00-.189.2c.017.024.061.07.19.198l5.257 5.259c.128.128.175.171.2.188.024-.017.071-.06.2-.188zm4.972-10.607a2 2 0 11-2.828 2.828 2 2 0 012.828-2.828zm-.707.707a1 1 0 10-1.414 1.414 1 1 0 001.414-1.414zM6.807 11.28L4.686 9.159a.5.5 0 11.707-.707l2.121 2.12a.5.5 0 11-.707.708zm1.414-1.414l-2.12-2.122a.5.5 0 11.706-.707L8.928 9.16a.5.5 0 11-.707.707z"}))},Bmt=Wmt;var rx={};$(rx,{icon:()=>$mt});var btr=k(L());var Hmt=["title","titleId"];function y$(){return y$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function qmt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Umt=function(t){var n=t.title,r=t.titleId,o=Vmt(t,Hmt);return a("svg",y$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.553 1.776a.5.5 0 01.894 0l4 8a.5.5 0 01.053.235c-.004.15-.026.396-.084.705a5.538 5.538 0 01-.505 1.512C11.189 13.638 9.906 14.5 8 14.5c-1.906 0-3.19-.862-3.91-2.272a5.538 5.538 0 01-.506-1.512 4.672 4.672 0 01-.084-.705.5.5 0 01.053-.235l4-8zm-3.046 8.329c.009.106.027.253.06.429.079.424.213.848.413 1.238C5.537 12.862 6.487 13.5 8 13.5c1.513 0 2.463-.638 3.02-1.728.2-.39.334-.814.413-1.238.033-.176.051-.323.06-.43L8 3.119l-3.493 6.987z"}))},$mt=Umt;var nx={};$(nx,{icon:()=>Ymt});var Otr=k(L());var Jmt=["title","titleId"];function b$(){return b$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Xmt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Kmt=function(t){var n=t.title,r=t.titleId,o=Gmt(t,Jmt);return a("svg",b$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8.5 15a3.5 3.5 0 01-1.75-6.532L7 8.324V2.5A1.496 1.496 0 019.908 2H8.5v1H10v1H8.5v1H10v1H8.5v1H10v1.324l.25.144A3.5 3.5 0 018.5 15M11 7.758V2.5a2.5 2.5 0 10-5 0v5.258a4.5 4.5 0 105 0"}),a("path",{d:"M8.5 9a2.5 2.5 0 110 5 2.5 2.5 0 010-5"}))},Ymt=Kmt;var ox={};$(ox,{icon:()=>rht});var _tr=k(L());var Qmt=["title","titleId"];function w$(){return w$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function eht(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var tht=function(t){var n=t.title,r=t.titleId,o=Zmt(t,Qmt);return a("svg",w$({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M12.809 8.807a4.5 4.5 0 01-5.572-5.75A5 5 0 003.04 9.31a.5.5 0 01-.966.259 6 6 0 015.672-7.553 4.5 4.5 0 116.117 6.313 6.002 6.002 0 01-7.803 5.409.5.5 0 11.303-.954 5.001 5.001 0 006.445-3.979zM11.859 5H13.5a.5.5 0 000-1H12V1.5a.5.5 0 00-1 0v3a.5.5 0 00.5.5h.36z"}),a("path",{d:"M3.757 15.848l-.776-2.897a1.5 1.5 0 011.06-1.838l2.898-.776a.5.5 0 11.259.966l-2.898.776a.5.5 0 00-.353.613l.776 2.898a.5.5 0 01-.966.258z"}))},rht=tht;var ix={};$(ix,{icon:()=>lht});var jtr=k(L());var nht=["title","titleId"];function O$(){return O$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function iht(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var aht=function(t){var n=t.title,r=t.titleId,o=oht(t,nht);return a("svg",O$({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M7 4.5a.5.5 0 001 0V4h1a1 1 0 001-1V1a1 1 0 00-1-1H6a1 1 0 00-1 1v2a1 1 0 001 1h1v.5zM9 1H6v2h3V1zM2 7.5a.5.5 0 111 0 .5.5 0 01-1 0zM2.5 9a1.5 1.5 0 01-1.415-1H.5a.5.5 0 010-1h.585a1.5 1.5 0 012.83 0h2.17a1.5 1.5 0 012.83 0h2.17a1.5 1.5 0 012.83 0h.585a.5.5 0 010 1h-.585a1.5 1.5 0 01-2.83 0h-2.17a1.5 1.5 0 01-2.83 0h-2.17A1.5 1.5 0 012.5 9zM13 7.5a.5.5 0 10-1 0 .5.5 0 001 0zm-5 0a.5.5 0 10-1 0 .5.5 0 001 0zM2.5 10a.5.5 0 00-.5.5v.5H1a1 1 0 00-1 1v2a1 1 0 001 1h3a1 1 0 001-1v-2a1 1 0 00-1-1H3v-.5a.5.5 0 00-.5-.5zM4 14v-2H1v2h3zm8-3.5a.5.5 0 011 0v.5h1a1 1 0 011 1v2a1 1 0 01-1 1h-3a1 1 0 01-1-1v-2a1 1 0 011-1h1v-.5zm2 2.5v1h-3v-2h3v1z"}))},lht=aht;var ax={};$(ax,{icon:()=>fht});var Ptr=k(L());var sht=["title","titleId"];function x$(){return x$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function cht(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var pht=function(t){var n=t.title,r=t.titleId,o=uht(t,sht);return a("svg",x$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M13.923 8A5.93 5.93 0 008 2.077 5.93 5.93 0 002.077 8a5.93 5.93 0 006.296 5.912c.328-.021.625.227.625.556a.504.504 0 01-.458.511 7 7 0 116.43-6.333c-.036.398-.487.58-.817.354a.595.595 0 01-.248-.54c.012-.152.018-.305.018-.46zm1.684 3.2l-4.32-3.055c-.56-.396-1.287.059-1.287.8v6.108c0 .74.726 1.196 1.287.8l4.32-3.055c.524-.37.524-1.228 0-1.598zM7.462 7.462H4.769a.539.539 0 000 1.076H8A.539.539 0 008.538 8V3.692a.539.539 0 00-1.076 0v3.77z",clipRule:"evenodd"}))},fht=pht;var lx={};$(lx,{icon:()=>vht});var Etr=k(L());var dht=["title","titleId"];function _$(){return _$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function hht(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ght=function(t){var n=t.title,r=t.titleId,o=mht(t,dht);return a("svg",_$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M9.075 6.953a.5.5 0 11-.707.707 1.5 1.5 0 00-2.122 0L4.125 9.782a1.5 1.5 0 102.121 2.121l1.145-1.144a.5.5 0 01.707.707L6.953 12.61a2.5 2.5 0 11-3.535-3.535l2.121-2.122a2.5 2.5 0 013.536 0zm3.535-3.535a2.5 2.5 0 010 3.535L10.49 9.075a2.5 2.5 0 01-3.536 0 .5.5 0 11.707-.708 1.5 1.5 0 002.122 0l2.121-2.12a1.5 1.5 0 10-2.121-2.122L8.637 5.269a.5.5 0 11-.707-.707l1.145-1.144a2.5 2.5 0 013.535 0z"}))},vht=ght;var sx={};$(sx,{icon:()=>xht});var Atr=k(L());var yht=["title","titleId"];function S$(){return S$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function wht(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Oht=function(t){var n=t.title,r=t.titleId,o=bht(t,yht);return a("svg",S$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M8.15 3.392c2.797 0 4.524 1.644 4.517 4.289.007 1.816-.708 2.893-2.21 3.004-.908.076-1.081-.287-1.157-.725h-.041c-.163.42-.964.732-1.744.683-1.053-.065-2.082-.842-2.09-2.572.008-1.72 1.071-2.441 1.959-2.586.804-.135 1.598.158 1.723.462h.051v-.386h1.195v3.452c.007.3.128.425.304.425.4 0 .677-.583.673-1.861.004-2.376-1.705-2.914-3.187-2.914-2.34 0-3.415 1.522-3.422 3.387.007 2.127 1.22 3.277 3.433 3.277.808 0 1.598-.176 2.006-.349l.393 1.122c-.435.27-1.419.508-2.493.508-2.98 0-4.723-1.66-4.727-4.496.004-2.804 1.748-4.72 4.817-4.72zM7.964 6.79c-.76 0-1.185.459-1.188 1.24.003.683.3 1.332 1.202 1.332.821 0 1.094-.473 1.077-1.343-.004-.718-.204-1.23-1.091-1.23z"}))},xht=Oht;var ux={};$(ux,{icon:()=>Pht});var Ttr=k(L());var _ht=["title","titleId"];function j$(){return j$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function jht(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Iht=function(t){var n=t.title,r=t.titleId,o=Sht(t,_ht);return a("svg",j$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M4.392 12V4h2.713v1.14h-1.21v5.72h1.21V12H4.392zm7.692-8v8H9.37v-1.14h1.209V5.14H9.37V4h2.714z"}))},Pht=Iht;var cx={};$(cx,{icon:()=>Mht});var ztr=k(L());var kht=["title","titleId"];function I$(){return I$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Cht(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Aht=function(t){var n=t.title,r=t.titleId,o=Eht(t,kht);return a("svg",I$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M12 4H4v8h8V4zM8.5 5.5h-3v5h3v-5z"}))},Mht=Aht;var px={};$(px,{icon:()=>Dht});var Dtr=k(L());var Tht=["title","titleId"];function P$(){return P$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function zht(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Lht=function(t){var n=t.title,r=t.titleId,o=Rht(t,Tht);return a("svg",P$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M8 13A5 5 0 118 3a5 5 0 010 10zm-2.828-2.172a4 4 0 015.656-5.656c.004.013-5.645 5.674-5.656 5.656z"}))},Dht=Lht;var fx={};$(fx,{icon:()=>Hht});var Ftr=k(L());var Nht=["title","titleId"];function k$(){return k$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Wht(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Bht=function(t){var n=t.title,r=t.titleId,o=Fht(t,Nht);return a("svg",k$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M11.333 7.027H9.375c-.056-.708-.48-1.187-1.222-1.187-.972 0-1.5.806-1.5 2.16 0 1.43.545 2.16 1.486 2.16.708 0 1.139-.415 1.236-1.08l1.958.015C11.236 10.418 10.181 12 8.097 12c-1.958 0-3.43-1.41-3.43-4 0-2.6 1.514-4 3.43-4 1.792 0 3.084 1.095 3.236 3.027z"}))},Hht=Bht;var dx={};$(dx,{icon:()=>Jht});var Btr=k(L());var Vht=["title","titleId"];function E$(){return E$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Uht(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var $ht=function(t){var n=t.title,r=t.titleId,o=qht(t,Vht);return a("svg",E$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M3 4a1 1 0 011-1h8a1 1 0 011 1v5.996a1 1 0 01-1 1h-1.661L7.4 13.2A.25.25 0 017 13v-2.004H4a1 1 0 01-1-1V4zm1.5 1a.5.5 0 01.5-.5h6a.5.5 0 01.5.5v4a.5.5 0 01-.5.5h-.9L8 11V9.5H5a.5.5 0 01-.5-.5V5z",clipRule:"evenodd"}),a("path",{d:"M6.75 6a1 1 0 100 2 1 1 0 000-2zm2.5 0a1 1 0 100 2 1 1 0 000-2z"}))},Jht=$ht;var mx={};$(mx,{icon:()=>Qht});var Vtr=k(L());var Ght=["title","titleId"];function C$(){return C$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Kht(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Yht=function(t){var n=t.title,r=t.titleId,o=Xht(t,Ght);return a("svg",C$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M9.414 3.757l2.829 2.829a2 2 0 010 2.828l-2.829 2.829a2 2 0 01-2.828 0L3.757 9.414a2 2 0 010-2.828l2.829-2.829a2 2 0 012.828 0zm-1.747 2.91a1 1 0 00-1 1v.666a1 1 0 001 1h.666a1 1 0 001-1v-.666a1 1 0 00-1-1h-.666z"}))},Qht=Yht;var hx={};$(hx,{icon:()=>ngt});var Utr=k(L());var Zht=["title","titleId"];function A$(){return A$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function tgt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var rgt=function(t){var n=t.title,r=t.titleId,o=egt(t,Zht);return a("svg",A$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M13 11.567C13 12.36 12.36 13 11.567 13H4.433C3.64 13 3 12.36 3 11.567V4.433C3 3.64 3.64 3 4.433 3H6v-.495a.51.51 0 01.412-.497L6.5 2c.276 0 .5.214.5.505V3h2v-.495a.51.51 0 01.412-.497L9.5 2c.276 0 .5.214.5.505V3h1.567C12.36 3 13 3.64 13 4.433v7.134zM4 6v5.33c0 .37.3.67.67.67h6.66c.37 0 .67-.3.67-.67V6H4zm1.5 4c.245 0 .45.183.492.412L6 10.5c0 .245-.183.45-.412.492L5.5 11a.505.505 0 01-.5-.5c0-.245.183-.45.412-.492L5.5 10zM8 10c.245 0 .45.183.492.412l.008.088c0 .245-.183.45-.412.492L8 11a.505.505 0 01-.5-.5c0-.245.183-.45.412-.492L8 10zm2.5 0c.245 0 .45.183.492.412L11 10.5c0 .245-.183.45-.412.492L10.5 11a.505.505 0 01-.5-.5c0-.245.183-.45.412-.492L10.5 10zm-5-1.5c.245 0 .45.183.492.412L6 9c0 .245-.183.45-.412.492L5.5 9.5A.505.505 0 015 9c0-.245.183-.45.412-.492L5.5 8.5zm2.5 0c.245 0 .45.183.492.412L8.5 9c0 .245-.183.45-.412.492L8 9.5a.505.505 0 01-.5-.5c0-.245.183-.45.412-.492L8 8.5zm2.5 0c.245 0 .45.183.492.412L11 9c0 .245-.183.45-.412.492L10.5 9.5A.505.505 0 0110 9c0-.245.183-.45.412-.492L10.5 8.5zM5.5 7c.245 0 .45.183.492.412L6 7.5c0 .245-.183.45-.412.492L5.5 8a.505.505 0 01-.5-.5c0-.245.183-.45.412-.492L5.5 7zM8 7c.245 0 .45.183.492.412L8.5 7.5c0 .245-.183.45-.412.492L8 8a.505.505 0 01-.5-.5c0-.245.183-.45.412-.492L8 7zm2.5 0c.245 0 .45.183.492.412L11 7.5c0 .245-.183.45-.412.492L10.5 8a.505.505 0 01-.5-.5c0-.245.183-.45.412-.492L10.5 7zM4 5h8v-.33c0-.37-.3-.67-.67-.67H4.67C4.3 4 4 4.3 4 4.67V5z"}))},ngt=rgt;var gx={};$(gx,{icon:()=>sgt});var Jtr=k(L());var ogt=["title","titleId"];function M$(){return M$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function agt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var lgt=function(t){var n=t.title,r=t.titleId,o=igt(t,ogt);return a("svg",M$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M4.154 12V4h2.713v1.14H5.658v5.72h1.21V12H4.153zm7.692-8v8H9.133v-1.14h1.209V5.14h-1.21V4h2.714z"}))},sgt=lgt;var vx={};$(vx,{icon:()=>dgt});var Xtr=k(L());var ugt=["title","titleId"];function T$(){return T$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function pgt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var fgt=function(t){var n=t.title,r=t.titleId,o=cgt(t,ugt);return a("svg",T$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M7.39 9.736l-1.041.94L3.258 8l3.09-2.677 1.041.94-2.032 1.722v.03l2.032 1.721zm2.777.94l-1.04-.94 2.032-1.721v-.03L9.126 6.264l1.04-.94L13.259 8l-3.091 2.677z"}))},dgt=fgt;var yx={};$(yx,{icon:()=>ygt});var Ytr=k(L());var mgt=["title","titleId"];function R$(){return R$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ggt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var vgt=function(t){var n=t.title,r=t.titleId,o=hgt(t,mgt);return a("svg",R$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M5.211 12V4h5.578v1.57H7.145v1.641h3.359v1.574H7.145v1.645h3.644V12z"}))},ygt=vgt;var bx={};$(bx,{icon:()=>_gt});var Ztr=k(L());var bgt=["title","titleId"];function z$(){return z$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ogt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var xgt=function(t){var n=t.title,r=t.titleId,o=wgt(t,bgt);return a("svg",z$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M7.682 12V9.247l1.023-.861a.5.5 0 00-.003-.768l-1.02-.844V4h5.578v1.57H9.615v1.64h3.36v1.575h-3.36v1.645h3.645V12H7.682zm.743-4.103a.138.138 0 010 .206L6.158 9.97a.133.133 0 01-.218-.103v-.934H2.873A.133.133 0 012.74 8.8V7.2c0-.074.06-.133.133-.133H5.94v-.934a.133.133 0 01.218-.103l2.267 1.867z"}))},_gt=xgt;var wx={};$(wx,{icon:()=>kgt});var trr=k(L());var Sgt=["title","titleId"];function L$(){return L$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Igt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Pgt=function(t){var n=t.title,r=t.titleId,o=jgt(t,Sgt);return a("svg",L$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M11.225 5.656c0 .423-.106.79-.318 1.102-.211.311-.51.57-.898.775a5.435 5.435 0 01-1.392.485c-.54.117-1.14.193-1.798.229a6.047 6.047 0 00-.035.67c0 .258.02.51.062.757.04.247.114.464.22.652s.25.34.432.458.414.176.696.176c.211 0 .467-.044.766-.132.3-.088.62-.244.96-.467.106-.07.192-.129.256-.176a.365.365 0 01.22-.07c.118 0 .197.061.238.185a.99.99 0 01.062.255 7.1 7.1 0 01-.573.467 4.93 4.93 0 01-.775.467c-.288.141-.6.261-.934.361-.335.1-.678.15-1.03.15-.541 0-.982-.088-1.322-.264a2.072 2.072 0 01-.793-.688 2.626 2.626 0 01-.388-.933 4.949 4.949 0 01-.106-1.005c0-.634.103-1.257.309-1.868.205-.61.499-1.157.88-1.638.383-.482.838-.87 1.366-1.163A3.567 3.567 0 019.093 4c.599 0 1.104.126 1.515.379.411.252.617.678.617 1.277zm-2.467-.951c-.223 0-.435.08-.635.238-.2.158-.381.373-.546.643-.164.27-.305.578-.423.925a6.42 6.42 0 00-.264 1.101c.47-.047.863-.135 1.18-.264.318-.13.57-.285.758-.467.188-.182.323-.388.405-.617.083-.229.124-.467.124-.713 0-.27-.056-.479-.168-.626a.519.519 0 00-.431-.22z"}))},kgt=Pgt;var Ox={};$(Ox,{icon:()=>Tgt});var nrr=k(L());var Egt=["title","titleId"];function D$(){return D$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Agt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Mgt=function(t){var n=t.title,r=t.titleId,o=Cgt(t,Egt);return a("svg",D$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.461 7.31h3.055a.74.74 0 01.66 1.074l-2.141 4.211a.74.74 0 11-1.319-.67L9.31 8.79H6.256a.74.74 0 01-.66-1.075l2.19-4.31a.74.74 0 011.319.67L7.461 7.31z"}))},Tgt=Mgt;var xx={};$(xx,{icon:()=>Ngt});var irr=k(L());var Rgt=["title","titleId"];function N$(){return N$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Lgt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Dgt=function(t){var n=t.title,r=t.titleId,o=zgt(t,Rgt);return a("svg",N$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M5.27 12V4h5.46v1.57H7.203v1.641h3.18v1.574h-3.18V12z"}))},Ngt=Dgt;var _x={};$(_x,{icon:()=>Vgt});var lrr=k(L());var Fgt=["title","titleId"];function F$(){return F$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Bgt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Hgt=function(t){var n=t.title,r=t.titleId,o=Wgt(t,Fgt);return a("svg",F$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M9.867 2.667H4a.667.667 0 00-.667.666v9.334c0 .368.299.666.667.666h8a.667.667 0 00.667-.666V5.619a.669.669 0 00-.183-.459l-2.133-2.285a.668.668 0 00-.484-.208m1.466 4V12H4.667V4h4v2.333c0 .184.149.334.333.334h2.333z"}))},Vgt=Hgt;var Sx={};$(Sx,{icon:()=>Ggt});var urr=k(L());var qgt=["title","titleId"];function W$(){return W$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function $gt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Jgt=function(t){var n=t.title,r=t.titleId,o=Ugt(t,qgt);return a("svg",W$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M3.25 3a.25.25 0 00-.25.25v2c0 .138.112.25.25.25h9.5a.25.25 0 00.25-.25v-2a.25.25 0 00-.25-.25h-9.5zm0 3.75A.25.25 0 003 7v2c0 .138.112.25.25.25H5.5A.25.25 0 005.75 9V7a.25.25 0 00-.25-.25H3.25zm-.25 4a.25.25 0 01.25-.25H5.5a.25.25 0 01.25.25v2a.25.25 0 01-.25.25H3.25a.25.25 0 01-.25-.25v-2zm3.31-.727c-.082-.073-.082-.224 0-.296l3.054-2.683a.17.17 0 01.19-.026c.064.032.104.1.104.174v1.341l3.161-.016c.1 0 .18.086.18.192v2.3c0 .105-.08.191-.18.191l-3.161.017v1.341c0 .074-.04.142-.103.174a.17.17 0 01-.19-.025L6.31 10.023z"}))},Ggt=Jgt;var jx={};$(jx,{icon:()=>Zgt});var prr=k(L());var Xgt=["title","titleId"];function B$(){return B$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ygt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Qgt=function(t){var n=t.title,r=t.titleId,o=Kgt(t,Xgt);return a("svg",B$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M11.266 4.15V5.63a2.41 2.41 0 00-.859-.145c-.692 0-1.065.346-1.177 1.043l-.11.625h1.828v1.44H8.921l-.204 1.115C8.455 11.325 7.517 12 5.9 12c-.469 0-.882-.061-1.166-.167v-1.495c.273.117.591.178.903.178.659 0 1.01-.29 1.127-1.015l.157-.91H5.247V7.152h1.837l.188-.842C7.534 4.714 8.432 4 10.19 4c.39 0 .853.067 1.076.15z"}))},Zgt=Qgt;var Ix={};$(Ix,{icon:()=>ovt});var drr=k(L());var evt=["title","titleId"];function H$(){return H$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function rvt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var nvt=function(t){var n=t.title,r=t.titleId,o=tvt(t,evt);return a("svg",H$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M8 3c1.636 0 3.088.785 4 2 .628.836 1 1.875 1 3a4.978 4.978 0 01-.999 3H12a4.992 4.992 0 01-4 2 4.992 4.992 0 01-4-1.999V11a5 5 0 014-8zm.948 8H7.052c.277.626.623 1 .948 1 .325 0 .67-.374.948-1zM6 11l-.645.001c.274.242.581.446.914.606A5.445 5.445 0 016 11.001zm4.645.001H10a5.51 5.51 0 01-.269.606c.333-.16.64-.364.914-.606zm-5.133-2.5H4.031c.068.54.243 1.048.505 1.5h1.172a9.186 9.186 0 01-.196-1.5zm3.975 0H6.513c.03.544.104 1.05.21 1.5h2.553c.107-.45.182-.956.21-1.5zm2.482 0h-1.481a9.186 9.186 0 01-.196 1.5h1.172c.262-.452.437-.96.505-1.5zM5.708 6L4.535 6c-.261.452-.437.96-.504 1.5h1.481A9.187 9.187 0 015.708 6zm3.568 0H6.724c-.107.449-.182.955-.21 1.499h2.973a8.479 8.479 0 00-.21-1.5zM11.465 6h-1.173c.102.467.17.972.196 1.5h1.481a3.974 3.974 0 00-.504-1.5zM6.269 4.393l-.124.062c-.286.15-.551.333-.79.545H6a5.51 5.51 0 01.269-.607zM8 4c-.326 0-.671.375-.948 1h1.896C8.671 4.376 8.326 4 8 4zm1.73.393l.038.071c.083.168.161.347.232.536h.646a4.006 4.006 0 00-.915-.607z"}))},ovt=nvt;var Px={};$(Px,{icon:()=>uvt});var hrr=k(L());var ivt=["title","titleId"];function V$(){return V$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function lvt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var svt=function(t){var n=t.title,r=t.titleId,o=avt(t,ivt);return a("svg",V$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M3 3h4v5h2V5.5h4V13H3.001v-1H3V3zm1 9h2V4H4v8zm3 0h2V9H7v3zm3 0h2V6.5h-2V12z"}))},uvt=svt;var kx={};$(kx,{icon:()=>mvt});var vrr=k(L());var cvt=["title","titleId"];function q$(){return q$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function fvt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var dvt=function(t){var n=t.title,r=t.titleId,o=pvt(t,cvt);return a("svg",q$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M11 3a2 2 0 012 2v6a2 2 0 01-2 2H5a2 2 0 01-2-2V5a2 2 0 012-2h6zm-1 2H8v6h1V9.014h1c.298-.013 2 0 2-2.018 0-1.74-1.314-1.952-1.825-1.987L10 5zM6 5H5v6h1V5zm4 .984c.667 0 1 .336 1 1.008C11 7.664 10.667 8 10 8H9V5.984z"}))},mvt=dvt;var Ex={};$(Ex,{icon:()=>bvt});var brr=k(L());var hvt=["title","titleId"];function U$(){return U$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function vvt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var yvt=function(t){var n=t.title,r=t.titleId,o=gvt(t,hvt);return a("svg",U$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M8.967 10.653h1.727V12H5.306v-1.347h1.727V5.347H5.306V4h5.388v1.347H8.967v5.306z"}))},bvt=yvt;var Cx={};$(Cx,{icon:()=>Svt});var Orr=k(L());var wvt=["title","titleId"];function $$(){return $$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function xvt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var _vt=function(t){var n=t.title,r=t.titleId,o=Ovt(t,wvt);return a("svg",$$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M7.5 4.5v1.025c0 1.269-1.185 1.908-2.112 1.737a.75.75 0 100 1.475c.927-.17 2.112.47 2.112 1.739v1.023h4v-1.005a2.5 2.5 0 010-4.988V4.5h-4zM13 4a1 1 0 00-1-1H7a1 1 0 00-1 1v1.525c0 .172-.172.293-.341.262a2.25 2.25 0 100 4.426c.17-.031.341.09.341.262V12a1 1 0 001 1h5a1 1 0 001-1V9.004a.16.16 0 00-.04-.105c-.109-.125-.594-.16-.732-.068a1 1 0 110-1.662c.138.092.623.057.732-.068a.16.16 0 00.04-.105V4z"}))},Svt=_vt;var Ax={};$(Ax,{icon:()=>Evt});var _rr=k(L());var jvt=["title","titleId"];function J$(){return J$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Pvt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var kvt=function(t){var n=t.title,r=t.titleId,o=Ivt(t,jvt);return a("svg",J$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M12.667 6.542A3.208 3.208 0 018.86 9.694l-.438.492a.437.437 0 01-.327.147h-.678v.73a.437.437 0 01-.438.437H6.25v.73a.437.437 0 01-.438.437H3.772a.437.437 0 01-.438-.438v-1.423c0-.116.046-.227.128-.31l2.95-2.949a3.208 3.208 0 013.047-4.214 3.202 3.202 0 013.209 3.209zm-3.209-.875a.875.875 0 101.75 0 .875.875 0 00-1.75 0z"}))},Evt=kvt;var Mx={};$(Mx,{icon:()=>Rvt});var jrr=k(L());var Cvt=["title","titleId"];function G$(){return G$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Mvt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Tvt=function(t){var n=t.title,r=t.titleId,o=Avt(t,Cvt);return a("svg",G$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M10.33 10.28c-.12.04-.29.07-.42.07-.23 0-.43-.08-.53-.3l-.63-1.34 2.32-2.81H9.3L7.76 7.93h-.09L8.22 4H6.59l-1.05 7.5h1.63l.27-1.94h.1l.43 1.12c.27.71.74.92 1.33.92.23 0 .6-.04.86-.11l.17-1.21z"}))},Rvt=Tvt;var Tx={};$(Tx,{icon:()=>Fvt});var Prr=k(L());var zvt=["title","titleId"];function X$(){return X$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Dvt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Nvt=function(t){var n=t.title,r=t.titleId,o=Lvt(t,zvt);return a("svg",X$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M3.333 11.027V5.05h2.059v1.136h.063c.25-.747.891-1.214 1.728-1.214.848 0 1.524.483 1.65 1.214h.063c.204-.731.927-1.214 1.822-1.214 1.155 0 1.949.798 1.949 2.023v4.03h-2.169V7.542c0-.521-.29-.84-.738-.84s-.723.319-.723.84v3.486H6.963V7.54c0-.521-.29-.84-.739-.84-.447 0-.722.319-.722.84v3.486H3.333z"}))},Fvt=Nvt;var Rx={};$(Rx,{icon:()=>qvt});var Err=k(L());var Wvt=["title","titleId"];function K$(){return K$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Hvt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Vvt=function(t){var n=t.title,r=t.titleId,o=Bvt(t,Wvt);return a("svg",K$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M11 3a1 1 0 00-1 1v1H9a1 1 0 000 2h1v1a1 1 0 102 0V7h1a1 1 0 100-2h-1V4a1 1 0 00-1-1zM5 7a1 1 0 00-1 1v1H3a1 1 0 000 2h1v1a1 1 0 102 0v-1h1a1 1 0 100-2H6V8a1 1 0 00-1-1z"}))},qvt=Vvt;var zx={};$(zx,{icon:()=>Xvt});var Arr=k(L());var Uvt=["title","titleId"];function Y$(){return Y$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Jvt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Gvt=function(t){var n=t.title,r=t.titleId,o=$vt(t,Uvt);return a("svg",Y$({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5 4h-.5a.5.5 0 010-1h1a.5.5 0 01.5.5v9a.5.5 0 01-.5.5h-1a.5.5 0 010-1H5v-2h-.5a.5.5 0 010-1H5V7h-.5a.5.5 0 010-1H5V4zm3 1a1 1 0 00-1 1v6a1 1 0 001 1h2a1 1 0 001-1V6a1 1 0 00-1-1H8z"}))},Xvt=Gvt;var Lx={};$(Lx,{icon:()=>eyt});var Trr=k(L());var Kvt=["title","titleId"];function Q$(){return Q$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Qvt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Zvt=function(t){var n=t.title,r=t.titleId,o=Yvt(t,Kvt);return a("svg",Q$({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 2l5.196 3v.178l-.866.468V5.5L8 3 3.67 5.5v5L8 13l4.33-2.5V5.77l.866-.474V11L8 14l-5.196-3V5L8 2z"}),a("path",{d:"M5.243 4.429L9.597 7.04 8 7.928 3.743 5.563a.5.5 0 10-.486.874L7.5 8.794V13.5h1V8.794l4.243-2.357a.508.508 0 00.06-.04l.392-.202V5.047l-.917.505a.573.573 0 00-.02.01l-.106.06-.191.105-1.355.753-4.849-2.909-.514.858z"}))},eyt=Zvt;var Dx={};$(Dx,{icon:()=>iyt});var zrr=k(L());var tyt=["title","titleId"];function Z$(){return Z$=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function nyt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var oyt=function(t){var n=t.title,r=t.titleId,o=ryt(t,tyt);return a("svg",Z$({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.556 8.416l-.804-1.68h-.036v5.64H5V4h1.992l2.292 3.96.804 1.68h.036V4h1.716v8.376H9.848l-2.292-3.96z"}))},iyt=oyt;var Nx={};$(Nx,{icon:()=>cyt});var Drr=k(L());var ayt=["title","titleId"];function eJ(){return eJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function syt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var uyt=function(t){var n=t.title,r=t.titleId,o=lyt(t,ayt);return a("svg",eJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fillRule:"evenodd"},a("path",{d:"M11 3c1.044 0 1.913.757 1.994 1.736l.006.149v6.23c0 1-.82 1.805-1.845 1.88L11 13H9.501a.5.5 0 01-.09-.992l.09-.008H11c.52 0 .937-.35.993-.783l.007-.102v-6.23c0-.445-.379-.827-.882-.879L11 4H9.5a.5.5 0 01-.09-.992L9.5 3H11zM6.5 3a.5.5 0 01.09.992L6.5 4H5c-.52 0-.937.35-.993.783L4 4.885v6.23c0 .445.379.827.882.879L5 12h1.5a.5.5 0 01.09.992L6.5 13H5c-1.044 0-1.913-.757-1.994-1.736L3 11.115v-6.23c0-1 .82-1.805 1.845-1.88L5 3h1.5z"}),a("path",{d:"M5.864 7.25a.714.714 0 110 1.429.714.714 0 010-1.429zm2.143 0a.714.714 0 110 1.429.714.714 0 010-1.429zm2.143 0a.714.714 0 110 1.429.714.714 0 010-1.429z"})))},cyt=uyt;var Fx={};$(Fx,{icon:()=>hyt});var Frr=k(L());var pyt=["title","titleId"];function tJ(){return tJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function dyt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var myt=function(t){var n=t.title,r=t.titleId,o=fyt(t,pyt);return a("svg",tJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5.002 12.412l-.962.962a1 1 0 01-1.414-1.414l.962-.962a5.333 5.333 0 017.41-7.41l.962-.962a1 1 0 111.414 1.414l-.962.962a5.333 5.333 0 01-7.41 7.41zm.966-.966a4 4 0 005.478-5.478l-5.478 5.478zm-1.414-1.414l5.478-5.478a4 4 0 00-5.478 5.478z"}))},hyt=myt;var Wx={};$(Wx,{icon:()=>wyt});var Brr=k(L());var gyt=["title","titleId"];function rJ(){return rJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function yyt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var byt=function(t){var n=t.title,r=t.titleId,o=vyt(t,gyt);return a("svg",rJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.8 9.812h-.842l-.78 2.335H5.031l.78-2.335H4.6l.182-1.043h1.373l.507-1.504H5.454l.188-1.042h1.367l.792-2.37H8.94l-.792 2.37h.849l.792-2.37h1.145l-.792 2.37H11.4l-.182 1.042H9.8L9.293 8.77h1.248l-.183 1.043H8.946l-.775 2.335H7.026L7.8 9.812zm-.5-1.043h.842l.513-1.504h-.849L7.3 8.77z"}))},wyt=byt;var Bx={};$(Bx,{icon:()=>jyt});var Vrr=k(L());var Oyt=["title","titleId"];function nJ(){return nJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function _yt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Syt=function(t){var n=t.title,r=t.titleId,o=xyt(t,Oyt);return a("svg",nJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M6.63 12c-1.294 0-2.383-.105-2.383-1.802V9.6c0-.638-.247-.914-.98-.914v-1.37c.733 0 .98-.28.98-.915v-.6C4.247 4.105 5.336 4 6.631 4v1.14c-.759 0-.886.272-.886.843v.813c0 .479-.225.936-1.212 1.133v.142c.987.197 1.212.654 1.212 1.133v.813c0 .57.127.844.886.844V12zm2.266-8c1.295 0 2.384.105 2.384 1.802V6.4c0 .638.247.914.98.914v1.37c-.733 0-.98.28-.98.915v.6C11.28 11.895 10.19 12 8.896 12v-1.14c.759 0 .886-.272.886-.843v-.813c0-.479.225-.936 1.212-1.133V7.93c-.987-.197-1.212-.654-1.212-1.133v-.813c0-.57-.127-.844-.886-.844V4z"}))},jyt=Syt;var Hx={};$(Hx,{icon:()=>Cyt});var Urr=k(L());var Iyt=["title","titleId"];function oJ(){return oJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function kyt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Eyt=function(t){var n=t.title,r=t.titleId,o=Pyt(t,Iyt);return a("svg",oJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M2.667 8.002c0-1.5.394-2.743 1.248-3.822h1.437c-.652.8-1.14 2.388-1.14 3.822 0 1.43.488 3.018 1.14 3.818H3.915c-.854-1.08-1.248-2.322-1.248-3.818zM6.77 9.998l-.818-.803 1.23-1.197-1.23-1.203.83-.793 1.221 1.193L9.23 6.002l.818.793-1.227 1.2 1.227 1.2-.818.803L8 8.795 6.77 9.998zm6.563-2c0 1.5-.394 2.743-1.248 3.822h-1.437c.652-.8 1.14-2.388 1.14-3.822 0-1.43-.488-3.018-1.14-3.818h1.437c.854 1.08 1.248 2.322 1.248 3.818z"}))},Cyt=Eyt;var Vx={};$(Vx,{icon:()=>zyt});var Jrr=k(L());var Ayt=["title","titleId"];function iJ(){return iJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Tyt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Ryt=function(t){var n=t.title,r=t.titleId,o=Myt(t,Ayt);return a("svg",iJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M8.049 3.785l3.852 1.006-4.049 1.103L4 4.791l3.951-1.006a.19.19 0 01.098 0zm.073 2.654l4.545-1.306v5.45l-.131.184-4.414 1.455V6.439zm-4.789 4.145V5.188L7.498 6.41v5.81l-4.034-1.453-.13-.183z"}))},zyt=Ryt;var qx={};$(qx,{icon:()=>Wyt});var Xrr=k(L());var Lyt=["title","titleId"];function aJ(){return aJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Nyt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Fyt=function(t){var n=t.title,r=t.titleId,o=Dyt(t,Lyt);return a("svg",aJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M4.889 12V4h3.304c1.797 0 2.922 1.117 2.918 2.77.004 1.652-1.144 2.746-2.976 2.746H6.822V12H4.89zm1.933-4.008h.953c.868 0 1.336-.472 1.332-1.222.004-.73-.464-1.211-1.332-1.211h-.953v2.433z"}))},Wyt=Fyt;var Ux={};$(Ux,{icon:()=>Uyt});var Yrr=k(L());var Byt=["title","titleId"];function lJ(){return lJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Vyt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var qyt=function(t){var n=t.title,r=t.titleId,o=Hyt(t,Byt);return a("svg",lJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M5.5 7a1.5 1.5 0 100-3 1.5 1.5 0 000 3zm0 1a2.5 2.5 0 100-5 2.5 2.5 0 000 5zM11 9a1 1 0 100-2 1 1 0 000 2zm0 1a2 2 0 100-4 2 2 0 000 4zm-2.5 1.5a.5.5 0 11-1 0 .5.5 0 011 0zm1 0a1.5 1.5 0 11-3 0 1.5 1.5 0 013 0z"}))},Uyt=qyt;var $x={};$($x,{icon:()=>Kyt});var Zrr=k(L());var $yt=["title","titleId"];function sJ(){return sJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Gyt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Xyt=function(t){var n=t.title,r=t.titleId,o=Jyt(t,$yt);return a("svg",sJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M4.889 12V4h3.304c1.797 0 2.922 1.117 2.918 2.77.004 1.652-1.144 2.746-2.976 2.746H6.822V12H4.89zm1.933-4.008h.953c.868 0 1.336-.472 1.332-1.222.004-.73-.464-1.211-1.332-1.211h-.953v2.433z"}))},Kyt=Xyt;var Jx={};$(Jx,{icon:()=>t2t});var tnr=k(L());var Yyt=["title","titleId"];function uJ(){return uJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Zyt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var e2t=function(t){var n=t.title,r=t.titleId,o=Qyt(t,Yyt);return a("svg",uJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fillRule:"evenodd"},a("path",{d:"M9.82 5.116a.5.5 0 00-.704.704l.064.064L11.719 8l-2.54 2.116a.5.5 0 00-.114.63l.05.074a.5.5 0 00.63.115l.075-.05 3-2.5a.5.5 0 00.071-.697l-.07-.072-3-2.5zM6.18 5.116a.5.5 0 01.704.704l-.064.064L4.281 8l2.54 2.116a.5.5 0 01.114.63l-.05.074a.5.5 0 01-.63.115l-.075-.05-3-2.5a.5.5 0 01-.071-.697l.07-.072 3-2.5z"})))},t2t=e2t;var Gx={};$(Gx,{icon:()=>a2t});var nnr=k(L());var r2t=["title","titleId"];function cJ(){return cJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function o2t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var i2t=function(t){var n=t.title,r=t.titleId,o=n2t(t,r2t);return a("svg",cJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M13 4v8h-2V6H9v4H5v2H3V8h4V4h6z"}))},a2t=i2t;var Xx={};$(Xx,{icon:()=>p2t});var inr=k(L());var l2t=["title","titleId"];function pJ(){return pJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function u2t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var c2t=function(t){var n=t.title,r=t.titleId,o=s2t(t,l2t);return a("svg",pJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M13 4v8h-2V6H9v4H5v2H3V8h4V4h6z"}))},p2t=c2t;var Kx={};$(Kx,{icon:()=>g2t});var lnr=k(L());var f2t=["title","titleId"];function fJ(){return fJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function m2t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var h2t=function(t){var n=t.title,r=t.titleId,o=d2t(t,f2t);return a("svg",fJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M8.533 9.067c-1.792 0-2.378.72-2.57 1.194a1.601 1.601 0 11-1.163-.037V5.776a1.595 1.595 0 01-1.067-1.51c0-.885.715-1.6 1.6-1.6.886 0 1.6.715 1.6 1.6 0 .7-.442 1.291-1.066 1.51v2.821C6.336 8.251 7.019 8 8 8c1.424 0 1.899-.715 2.053-1.19a1.603 1.603 0 01-.986-1.477c0-.885.714-1.6 1.6-1.6.885 0 1.6.715 1.6 1.6a1.59 1.59 0 01-1.115 1.526c-.139.762-.656 2.208-2.619 2.208zm-3.2 2.133a.535.535 0 00-.533.533c0 .294.24.534.533.534a.535.535 0 000-1.067zm0-7.467a.535.535 0 00-.533.534c0 .293.24.533.533.533.294 0 .534-.24.534-.533a.535.535 0 00-.534-.534zM10.667 4.8a.535.535 0 00-.534.533.535.535 0 001.067 0 .535.535 0 00-.533-.533z"}))},g2t=h2t;var Yx={};$(Yx,{icon:()=>O2t});var unr=k(L());var v2t=["title","titleId"];function dJ(){return dJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function b2t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var w2t=function(t){var n=t.title,r=t.titleId,o=y2t(t,v2t);return a("svg",dJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6.27 7.5a1 1 0 112 0 1 1 0 01-2 0zM8.77 7.5a1 1 0 112 0 1 1 0 01-2 0z"}),a("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M11.702 10.682a4.501 4.501 0 01-5.796.482L4.28 12.789a.75.75 0 01-1.06-1.06L4.847 10.1a4.501 4.501 0 116.855.581zm-5.304-1.06a3 3 0 104.243-4.243A3 3 0 006.398 9.62z"}))},O2t=w2t;var Qx={};$(Qx,{icon:()=>I2t});var pnr=k(L());var x2t=["title","titleId"];function mJ(){return mJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function S2t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var j2t=function(t){var n=t.title,r=t.titleId,o=_2t(t,x2t);return a("svg",mJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M13 10v3h-3v-1H6v1H3v-3h1V6H3V3h3v1h4V3h3v3h-1v4h1zm-8 1H4v1h1v-1zm7 0h-1v1h1v-1zM5 4H4v1h1V4zm7 0h-1v1h1V4zm-1 2h-1V5H6v1H5v4h1v1h4v-1h1V6z"}))},I2t=j2t;var Zx={};$(Zx,{icon:()=>A2t});var dnr=k(L());var P2t=["title","titleId"];function hJ(){return hJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function E2t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var C2t=function(t){var n=t.title,r=t.titleId,o=k2t(t,P2t);return a("svg",hJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M9.147 4.297l-.255 1.455h.936l-.222 1.266h-.935l-.455 2.688c-.025.184-.013.323.036.417.048.093.17.144.365.151.075.004.23-.005.465-.027l-.13 1.32c-.3.097-.618.142-.957.135-.552-.007-.965-.17-1.239-.487-.274-.317-.386-.748-.335-1.293l.476-2.904h-.725l.216-1.266h.725l.254-1.455h1.78z"}))},A2t=C2t;var e9={};$(e9,{icon:()=>L2t});var hnr=k(L());var M2t=["title","titleId"];function gJ(){return gJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function R2t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var z2t=function(t){var n=t.title,r=t.titleId,o=T2t(t,M2t);return a("svg",gJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M4.667 4.667h2.666v2.666H4.667V4.667zm0 4h2.666v2.666H4.667V8.667zm4-4h2.666v2.666H8.667V4.667zm0 4h2.666v2.666H8.667V8.667zM3.333 3.333v9.334h9.334V3.333H3.333zm0-1.333h9.334C13.403 2 14 2.597 14 3.333v9.334c0 .736-.597 1.333-1.333 1.333H3.333A1.333 1.333 0 012 12.667V3.333C2 2.597 2.597 2 3.333 2z"}))},L2t=z2t;var t9={};$(t9,{icon:()=>B2t});var vnr=k(L());var D2t=["title","titleId"];function vJ(){return vJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function F2t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var W2t=function(t){var n=t.title,r=t.titleId,o=N2t(t,D2t);return a("svg",vJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8.316 14a6 6 0 110-12 6 6 0 010 12zm0-1.333a4.667 4.667 0 100-9.334 4.667 4.667 0 000 9.334zm2.19-5.72h1.143c.019 1.448-.793 2.338-1.922 2.338-.632 0-1.194-.267-1.706-.811-.36-.397-.636-.576-1-.576-.517 0-.849.355-.885 1.083H4.983c.014-1.47.858-2.314 1.95-2.314.595 0 1.125.249 1.678.802.392.382.641.595 1.038.595.484 0 .857-.323.857-1.116z"}))},B2t=W2t;var r9={};$(r9,{icon:()=>$2t});var bnr=k(L());var H2t=["title","titleId"];function yJ(){return yJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function q2t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var U2t=function(t){var n=t.title,r=t.titleId,o=V2t(t,H2t);return a("svg",yJ({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M10 8a1 1 0 11-2 0 1 1 0 012 0z"}),a("path",{fillRule:"evenodd",d:"M4 4a1 1 0 00-1 1v6a1 1 0 001 1h6.989a1 1 0 00.825-.436l2.05-3a1 1 0 000-1.128l-2.05-3A1 1 0 0010.99 4H4zm.75 1.25a.5.5 0 00-.5.5v4.5a.5.5 0 00.5.5h5.745a.5.5 0 00.405-.206l1.636-2.25a.5.5 0 000-.588L10.9 5.456a.5.5 0 00-.405-.206H4.75z"}))},$2t=U2t;var n9={};$(n9,{icon:()=>Y2t});var Onr=k(L());var J2t=["title","titleId"];function bJ(){return bJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function X2t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var K2t=function(t){var n=t.title,r=t.titleId,o=G2t(t,J2t);return a("svg",bJ({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M9.147 4.297l-.255 1.455h.936l-.222 1.266h-.935l-.455 2.688c-.025.184-.013.323.036.417.048.093.17.144.365.151.075.004.23-.005.465-.027l-.13 1.32c-.3.097-.618.142-.957.135-.552-.007-.965-.17-1.239-.487-.274-.317-.386-.748-.335-1.293l.476-2.904h-.725l.216-1.266h.725l.254-1.455h1.78z"}))},Y2t=K2t;var o9={};$(o9,{icon:()=>rbt});var _nr=k(L());var Q2t=["title","titleId"];function wJ(){return wJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ebt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var tbt=function(t){var n=t.title,r=t.titleId,o=Z2t(t,Q2t);return a("svg",wJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8 4H3v3h5V4zM13 9H8v3h5V9zM10 4h3v3h-3V4zM6 9H3v3h3V9z"}))},rbt=tbt;var i9={};$(i9,{icon:()=>lbt});var jnr=k(L());var nbt=["title","titleId"];function OJ(){return OJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ibt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var abt=function(t){var n=t.title,r=t.titleId,o=obt(t,nbt);return a("svg",OJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M6.649 4.667l1.326 4.7h.05l1.326-4.7h1.982l-2.134 6.666H6.801L4.667 4.667z"}))},lbt=abt;var a9={};$(a9,{icon:()=>fbt});var Pnr=k(L());var sbt=["title","titleId"];function xJ(){return xJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function cbt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var pbt=function(t){var n=t.title,r=t.titleId,o=ubt(t,sbt);return a("svg",xJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M10.386 9.836a2.5 2.5 0 113.611.667C15.212 11.173 16 12.46 16 14v1.5a.5.5 0 11-1 0V14c0-1.724-1.276-3-3-3-.91 0-1.298-.02-1.805-.122-1.25-.254-2.333-1-3.585-2.566a.5.5 0 11.78-.624c.9 1.124 1.653 1.74 2.434 2.043.155.052.345.083.562.105zm1.785.128c.083.01.167.021.251.034L12.5 10a1.5 1.5 0 10-.33-.036zM9.78 11.97a.5.5 0 01.5.5c0 .076-.047.226-.05.231-.179.38-.23.774-.23 1.302v1.5a.5.5 0 11-1 0v-1.5c0-.657.072-1.186.307-1.696a.5.5 0 01.473-.337zM5.958 5.772a.5.5 0 01-.78.625L3.11 3.812a.5.5 0 11.78-.624l2.068 2.584zM1 11h5.5a.5.5 0 110 1h-6a.5.5 0 01-.5-.5V.5A.5.5 0 01.5 0h12a.5.5 0 01.5.5v3a.5.5 0 11-1 0V1H1v10z"}))},fbt=pbt;var l9={};$(l9,{icon:()=>vbt});var Enr=k(L());var dbt=["title","titleId"];function _J(){return _J=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function hbt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var gbt=function(t){var n=t.title,r=t.titleId,o=mbt(t,dbt);return a("svg",_J({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M11 3h5v1H0V3h5V1a1 1 0 011-1h4a1 1 0 011 1v2zm-7.056 8H7v1H4.1l.392 2.519c.042.269.254.458.493.458h6.03c.239 0 .451-.189.493-.458l1.498-9.576H14l-1.504 9.73c-.116.747-.74 1.304-1.481 1.304h-6.03c-.741 0-1.365-.557-1.481-1.304l-1.511-9.73H9V5.95H3.157L3.476 8H8v1H3.632l.312 2zM6 3h4V1H6v2z"}))},vbt=gbt;var s9={};$(s9,{icon:()=>xbt});var Anr=k(L());var ybt=["title","titleId"];function SJ(){return SJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function wbt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Obt=function(t){var n=t.title,r=t.titleId,o=bbt(t,ybt);return a("svg",SJ({viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M5.14 3.808L7.53 1.51a.67.67 0 01.942 0l2.389 2.298c.26.256.685.256.944 0a.65.65 0 000-.93L9.416.578a2.02 2.02 0 00-2.832 0l-2.388 2.3a.65.65 0 000 .93c.26.256.683.256.944 0zm0 8.384l2.39 2.298a.67.67 0 00.942 0l2.389-2.298a.677.677 0 01.944 0 .65.65 0 010 .93l-2.388 2.3a2.02 2.02 0 01-2.832 0l-2.388-2.3a.65.65 0 010-.93.677.677 0 01.944 0zM16 6H0v4h16V6zM1 9V7h14v2H1z"}))},xbt=Obt;var u9={};$(u9,{icon:()=>Pbt});var Tnr=k(L());var _bt=["title","titleId"];function jJ(){return jJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function jbt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Ibt=function(t){var n=t.title,r=t.titleId,o=Sbt(t,_bt);return a("svg",jJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.565 10.83a.5.5 0 11.819.573l-1.877 2.68c-.963 1.376-3.02 1.55-4.588.45C.35 13.436-.191 11.445.773 10.07L3.64 5.973c.963-1.375 3.019-1.548 4.587-.45a.5.5 0 11-.573.82C6.509 5.54 5.08 5.66 4.46 6.546l-2.868 4.095c-.621.887-.245 2.27.9 3.073 1.146.802 2.575.682 3.196-.205l1.877-2.68z"}),a("path",{d:"M7.892 3.43a.5.5 0 11-.574-.819L10 .734c1.376-.963 3.367-.422 4.465 1.146 1.098 1.569.926 3.625-.45 4.588L9.918 9.336c-1.375.963-3.366.422-4.464-1.146a.5.5 0 11.819-.574c.802 1.146 2.185 1.522 3.072.9L13.44 5.65c.886-.621 1.006-2.05.204-3.195-.802-1.146-2.186-1.522-3.072-.9L7.892 3.43zM6 .5v3a.5.5 0 01-1 0v-3a.5.5 0 011 0zM1.058 2.23l2.458 1.72a.5.5 0 01-.574.82L.484 3.05a.5.5 0 11.574-.82zm12 7.093l2.457 1.72a.5.5 0 11-.573.82l-2.457-1.72a.5.5 0 11.573-.82zm-2.099 1.181v3a.5.5 0 11-1 0v-3a.5.5 0 111 0z"}))},Pbt=Ibt;var c9={};$(c9,{icon:()=>Mbt});var znr=k(L());var kbt=["title","titleId"];function IJ(){return IJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Cbt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Abt=function(t){var n=t.title,r=t.titleId,o=Ebt(t,kbt);return a("svg",IJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M8 9a4 4 0 100-8 4 4 0 000 8zm0-1a3 3 0 100-6 3 3 0 000 6z",clipRule:"evenodd"}),a("path",{d:"M15 14.291A9.053 9.053 0 008 11a9.053 9.053 0 00-7 3.291l.715.71A8.047 8.047 0 018 11.996 8.047 8.047 0 0114.286 15l.714-.71z"}))},Mbt=Abt;var p9={};$(p9,{icon:()=>Dbt});var Dnr=k(L());var Tbt=["title","titleId"];function PJ(){return PJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function zbt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Lbt=function(t){var n=t.title,r=t.titleId,o=Rbt(t,Tbt);return a("svg",PJ({xmlns:"http://www.w3.org/2000/svg",width:18,height:18,viewBox:"0 0 18 18","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("g",{fillRule:"evenodd"},a("path",{d:"M13.689 11.132c1.155 1.222 1.953 2.879 2.183 4.748a1.007 1.007 0 01-1 1.12H3.007a1.005 1.005 0 01-1-1.12c.23-1.87 1.028-3.526 2.183-4.748.247.228.505.442.782.633-1.038 1.069-1.765 2.55-1.972 4.237L14.872 16c-.204-1.686-.93-3.166-1.966-4.235a7.01 7.01 0 00.783-.633zM8.939 1c1.9 0 3 2 4.38 2.633a2.483 2.483 0 01-1.88.867c-.298 0-.579-.06-.844-.157A3.726 3.726 0 017.69 5.75c-1.395 0-3.75.25-3.245-1.903C5.94 3 6.952 1 8.94 1z"}),a("path",{d:"M8.94 2c2.205 0 4 1.794 4 4s-1.795 4-4 4c-2.207 0-4-1.794-4-4s1.793-4 4-4m0 9A5 5 0 108.937.999 5 5 0 008.94 11"})))},Dbt=Lbt;var f9={};$(f9,{icon:()=>Hbt});var Fnr=k(L());var Nbt=["title","titleId"];function kJ(){return kJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Wbt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Bbt=function(t){var n=t.title,r=t.titleId,o=Fbt(t,Nbt);return a("svg",kJ({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{fillRule:"evenodd",d:"M5.482 4.344a2 2 0 10-2.963 0c-.08.042-.156.087-.23.136-.457.305-.75.704-.933 1.073A3.457 3.457 0 001 6.978V9a1 1 0 001 1h2.5a3.69 3.69 0 01.684-.962L5.171 9H2V7s0-2 2-2c1.007 0 1.507.507 1.755 1.01.225-.254.493-.47.793-.636a2.717 2.717 0 00-1.066-1.03zM4 4a1 1 0 100-2 1 1 0 000 2zm10 6h-2.5a3.684 3.684 0 00-.684-.962L10.829 9H14V7s0-2-2-2c-1.007 0-1.507.507-1.755 1.01a3.012 3.012 0 00-.793-.636 2.716 2.716 0 011.066-1.03 2 2 0 112.963 0c.08.042.156.087.23.136.457.305.75.704.933 1.073A3.453 3.453 0 0115 6.944V9a1 1 0 01-1 1zm-2-6a1 1 0 100-2 1 1 0 000 2z"}),a("path",{fillRule:"evenodd",d:"M10 8c0 .517-.196.989-.518 1.344a2.755 2.755 0 011.163 1.21A3.453 3.453 0 0111 11.977V14a1 1 0 01-1 1H6a1 1 0 01-1-1v-2.022a2.005 2.005 0 01.006-.135 3.456 3.456 0 01.35-1.29 2.755 2.755 0 011.162-1.21A2 2 0 1110 8zm-4 4v2h4v-2s0-2-2-2-2 2-2 2zm3-4a1 1 0 11-2 0 1 1 0 012 0z"}))},Hbt=Bbt;var d9={};$(d9,{icon:()=>Jbt});var Bnr=k(L());var Vbt=["title","titleId"];function EJ(){return EJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ubt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var $bt=function(t){var n=t.title,r=t.titleId,o=qbt(t,Vbt);return a("svg",EJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M12.5 11V5H11V3.5H5V5H3.5v6H5v1.5h6V11h1.5zm1 0H15v4h-4v-1.5H5V15H1v-4h1.5V5H1V1h4v1.5h6V1h4v4h-1.5v6zM4 4V2H2v2h2zm8 0h2V2h-2v2zM2 14h2v-2H2v2zm10 0h2v-2h-2v2z"}))},Jbt=$bt;var m9={};$(m9,{icon:()=>Qbt});var Vnr=k(L());var Gbt=["title","titleId"];function CJ(){return CJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Kbt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Ybt=function(t){var n=t.title,r=t.titleId,o=Xbt(t,Gbt);return a("svg",CJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M0 1.994C0 .893.895 0 1.994 0h12.012C15.107 0 16 .895 16 1.994v12.012A1.995 1.995 0 0114.006 16H1.994A1.995 1.995 0 010 14.006V1.994zm1 0v12.012c0 .548.446.994.994.994h12.012a.995.995 0 00.994-.994V1.994A.995.995 0 0014.006 1H1.994A.995.995 0 001 1.994zM1 4h14v1H1V4zm1.5-1a.5.5 0 010-1h1a.5.5 0 010 1h-1zm3 0a.5.5 0 010-1h1a.5.5 0 010 1h-1zm4.947 6.106a1 1 0 010 1.788l-3 2A1 1 0 016 12V8a1 1 0 011.447-.894l3 2zM10 10L7 8v4l3-2z"}))},Qbt=Ybt;var h9={};$(h9,{icon:()=>n3t});var Unr=k(L());var Zbt=["title","titleId"];function AJ(){return AJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function t3t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var r3t=function(t){var n=t.title,r=t.titleId,o=e3t(t,Zbt);return a("svg",AJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M3 13h10V9.913l-2.571-2.826L8.56 8.753a.5.5 0 01-.728-.067L4.448 4.317 3 6.191V13zm5.295-5.35l1.837-1.64a.5.5 0 01.703.037l3.035 3.336a.5.5 0 01.13.337v3.78a.5.5 0 01-.5.5h-11a.5.5 0 01-.5-.5V6.02a.5.5 0 01.104-.305l1.947-2.52a.5.5 0 01.791-.001L8.295 7.65zM1 15h13.5a.5.5 0 110 1H.5a.5.5 0 01-.5-.5v-14a.5.5 0 011 0V15z"}))},n3t=r3t;var g9={};$(g9,{icon:()=>s3t});var Jnr=k(L());var o3t=["title","titleId"];function MJ(){return MJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function a3t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var l3t=function(t){var n=t.title,r=t.titleId,o=i3t(t,o3t);return a("svg",MJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M.5 1a.5.5 0 01.5.5V15h13.5a.5.5 0 110 1H.5a.5.5 0 01-.5-.5v-14A.5.5 0 01.5 1zm4.342 2.194L8.295 7.65l1.837-1.64a.5.5 0 01.703.037l3.035 3.336a.5.5 0 01.13.337v3.78a.5.5 0 01-.5.5h-11a.5.5 0 01-.5-.5V6.02a.5.5 0 01.104-.305l1.947-2.52a.5.5 0 01.791-.001zm-.394 1.123L3 6.191v4.101l1.146-1.146a.5.5 0 01.493-.126l.085.033L8.5 10.94l1.776-.888a.5.5 0 01.36-.034l.088.034L13 11.19V9.913l-2.571-2.826L8.56 8.753a.5.5 0 01-.728-.067L4.448 4.317z"}))},s3t=l3t;var v9={};$(v9,{icon:()=>d3t});var Xnr=k(L());var u3t=["title","titleId"];function TJ(){return TJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function p3t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var f3t=function(t){var n=t.title,r=t.titleId,o=c3t(t,u3t);return a("svg",TJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8.5 10h-6a.5.5 0 010-1H8V6H2.5a.5.5 0 010-1H13V2H2.5a.5.5 0 010-1h11a.5.5 0 01.5.5v4a.5.5 0 01-.5.5H9v3h2.5a.5.5 0 01.5.5v4a.5.5 0 01-.5.5h-9a.5.5 0 110-1H11v-3H8.5zM0 .5a.5.5 0 111 0v14a.5.5 0 11-1 0V.5z"}))},d3t=f3t;var y9={};$(y9,{icon:()=>y3t});var Ynr=k(L());var m3t=["title","titleId"];function RJ(){return RJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function g3t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var v3t=function(t){var n=t.title,r=t.titleId,o=h3t(t,m3t);return a("svg",RJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M.5 0a.5.5 0 01.5.5v14a.5.5 0 11-1 0V.5A.5.5 0 01.5 0zm13 1a.5.5 0 01.5.5v4a.5.5 0 01-.5.5H9v3h2.5a.5.5 0 01.5.5v4a.5.5 0 01-.5.5h-9a.5.5 0 110-1H9v-3H2.5a.5.5 0 010-1H6V6H2.5a.5.5 0 010-1H10V2H2.5a.5.5 0 010-1h11z"}))},y3t=v3t;var b9={};$(b9,{icon:()=>_3t});var Znr=k(L());var b3t=["title","titleId"];function zJ(){return zJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function O3t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var x3t=function(t){var n=t.title,r=t.titleId,o=w3t(t,b3t);return a("svg",zJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M10 7.5v6a.5.5 0 11-1 0V8H6v5.5a.5.5 0 11-1 0V3H2v10.5a.5.5 0 11-1 0v-11a.5.5 0 01.5-.5h4a.5.5 0 01.5.5V7h3V4.5a.5.5 0 01.5-.5h4a.5.5 0 01.5.5v9a.5.5 0 11-1 0V5h-3v2.5zM.5 16a.5.5 0 110-1h14a.5.5 0 110 1H.5z"}))},_3t=x3t;var w9={};$(w9,{icon:()=>k3t});var tor=k(L());var S3t=["title","titleId"];function LJ(){return LJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function I3t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var P3t=function(t){var n=t.title,r=t.titleId,o=j3t(t,S3t);return a("svg",LJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M14.5 15a.5.5 0 110 1H.5a.5.5 0 110-1h14zm-9-13a.5.5 0 01.5.5L5.999 7H9V4.5a.5.5 0 01.5-.5h4a.5.5 0 01.5.5v9a.5.5 0 11-1 0V7h-3v6.5a.5.5 0 01-.41.492L9.5 14a.5.5 0 01-.5-.5V10H6v3.5a.5.5 0 01-.992.09L5 13.5V6H2v7.5a.5.5 0 11-1 0v-11a.5.5 0 01.5-.5h4z"}))},k3t=P3t;var O9={};$(O9,{icon:()=>T3t});var nor=k(L());var E3t=["title","titleId"];function DJ(){return DJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function A3t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var M3t=function(t){var n=t.title,r=t.titleId,o=C3t(t,E3t);return a("svg",DJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M12.877 5.847l-1.02 1.02a.5.5 0 01-.708-.707l1.1-1.099c-.05-.053-.1-.106-.152-.157A6.471 6.471 0 008 3.019V4.5a.5.5 0 01-1 0V3.019a6.47 6.47 0 00-4.261 2.055l1.07 1.071a.5.5 0 01-.706.707l-.99-.99A6.46 6.46 0 001.018 10H2.5a.5.5 0 110 1H1.174c.083.353.196.697.337 1.03a.5.5 0 11-.922.39A7.487 7.487 0 010 9.5a7.483 7.483 0 012.197-5.304A7.487 7.487 0 017.5 2a7.487 7.487 0 015.304 2.197A7.483 7.483 0 0115 9.5a7.487 7.487 0 01-.59 2.92.5.5 0 01-.92-.39c.14-.333.253-.677.336-1.03H12.5a.5.5 0 110-1h1.481a6.483 6.483 0 00-1.104-4.153zm-6.041 5.317a.993.993 0 01-.01-1.404c.384-.385 2.882-2.002 3.149-1.735.267.267-1.35 2.765-1.735 3.15a.993.993 0 01-1.404-.01z"}))},T3t=M3t;var x9={};$(x9,{icon:()=>N3t});var ior=k(L());var R3t=["title","titleId"];function NJ(){return NJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function L3t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var D3t=function(t){var n=t.title,r=t.titleId,o=z3t(t,R3t);return a("svg",NJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M10.725 3.653a6 6 0 012.847 7.576.5.5 0 01-.928-.372 5 5 0 10-9.293-.014.5.5 0 01-.218.619L1.39 12.47a.5.5 0 01-.708-.23A7.99 7.99 0 010 9a8 8 0 0111.212-7.329.5.5 0 01.234.704l-.721 1.278zm-.933-.38l.5-.889a7 7 0 00-8.902 8.93l.886-.511a6 6 0 017.516-7.53zM6.73 9.467a1.75 1.75 0 112.539 0 2 2 0 11-2.539 0zM8 12.013a1 1 0 100-2 1 1 0 000 2zm0-3a.75.75 0 100-1.5.75.75 0 000 1.5z"}))},N3t=D3t;var _9={};$(_9,{icon:()=>V3t});var lor=k(L());var F3t=["title","titleId"];function FJ(){return FJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function B3t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var H3t=function(t){var n=t.title,r=t.titleId,o=W3t(t,F3t);return a("svg",FJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M12.654 3.48c.248.225.552.389.888.467L11.24 9.43a1.99 1.99 0 00-.915-.404l2.33-5.547zM9.146 9.19a2.008 2.008 0 00-.769.64l-1.572-2c.311-.136.581-.35.785-.618l1.556 1.978zM5.581 7.956l-2.134 4.268a.5.5 0 01-.894-.448l2.134-4.268c.25.22.557.376.894.448zM1 15h13.5a.5.5 0 110 1H.5a.5.5 0 01-.5-.5v-14a.5.5 0 011 0V15zm5-8a1 1 0 110-2 1 1 0 010 2zm4 5a1 1 0 110-2 1 1 0 010 2zm4-9a1 1 0 110-2 1 1 0 010 2z"}))},V3t=H3t;var S9={};$(S9,{icon:()=>G3t});var uor=k(L());var q3t=["title","titleId"];function WJ(){return WJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function $3t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var J3t=function(t){var n=t.title,r=t.titleId,o=U3t(t,q3t);return a("svg",WJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M7.5 15C5.77 15 2 9.97 2 6.595 2 3.507 4.46 1 7.5 1S13 3.507 13 6.595C13 9.97 9.23 15 7.5 15zm0-1c.286 0 1.48-1.044 2.459-2.35C11.219 9.969 12 8.153 12 6.596 12 4.055 9.983 2 7.5 2S3 4.055 3 6.595c0 1.557.78 3.373 2.041 5.056C6.02 12.956 7.214 14 7.5 14zm0-4.996a2.5 2.5 0 110-5 2.5 2.5 0 010 5zm0-1a1.5 1.5 0 100-3 1.5 1.5 0 000 3z"}))},G3t=J3t;var j9={};$(j9,{icon:()=>Z3t});var por=k(L());var X3t=["title","titleId"];function BJ(){return BJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Y3t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Q3t=function(t){var n=t.title,r=t.titleId,o=K3t(t,X3t);return a("svg",BJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6.5 2.309v8.69a.499.499 0 01-.032.176L9.5 12.691V3.809l-3-1.5zm-1-.04L2 3.825v8.906l3.527-1.568a.5.5 0 01-.027-.164V2.27zm.274-1.216a.498.498 0 01.471.01l3.768 1.884 4.284-1.904A.5.5 0 0115 1.5v10a.5.5 0 01-.297.457l-4.5 2a.5.5 0 01-.427-.01l-3.789-1.894-4.283 1.904a.5.5 0 01-.703-.457v-10a.5.5 0 01.297-.457l4.476-1.99zM10.5 3.825v8.906l3.5-1.556V2.27l-3.5 1.556z"}))},Z3t=Q3t;var I9={};$(I9,{icon:()=>o5t});var mor=k(L());var e5t=["title","titleId"];function HJ(){return HJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function r5t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var n5t=function(t){var n=t.title,r=t.titleId,o=t5t(t,e5t);return a("svg",HJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6.532 7.34a2.161 2.161 0 112.936 0 2.746 2.746 0 11-2.936 0zM2 0h12a2 2 0 012 2v12a2 2 0 01-2 2H2a2 2 0 01-2-2V2a2 2 0 012-2zm0 1a1 1 0 00-1 1v12a1 1 0 001 1h12a1 1 0 001-1V2a1 1 0 00-1-1H2zm6 5.915a1.161 1.161 0 100-2.322 1.161 1.161 0 000 2.322zm0 4.492a1.746 1.746 0 100-3.492 1.746 1.746 0 000 3.492z"}))},o5t=n5t;var P9={};$(P9,{icon:()=>u5t});var gor=k(L());var i5t=["title","titleId"];function VJ(){return VJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function l5t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var s5t=function(t){var n=t.title,r=t.titleId,o=a5t(t,i5t);return a("svg",VJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6.5 9a.5.5 0 01-.5-.5V3.023A5.5 5.5 0 1011.978 9H6.5zM7 8h5.5a.5.5 0 01.5.5A6.5 6.5 0 116.5 2a.5.5 0 01.5.5V8zm2-6.972V6h4.972C13.696 3.552 11.448 1.304 9 1.028zM14.5 7h-6a.5.5 0 01-.5-.5v-6a.5.5 0 01.5-.5C11.853 0 15 3.147 15 6.5a.5.5 0 01-.5.5zM6.146 8.854a.5.5 0 11.708-.708l4 4a.5.5 0 01-.708.708l-4-4z"}))},u5t=s5t;var k9={};$(k9,{icon:()=>m5t});var yor=k(L());var c5t=["title","titleId"];function qJ(){return qJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function f5t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var d5t=function(t){var n=t.title,r=t.titleId,o=p5t(t,c5t);return a("svg",qJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M16 3v11a2 2 0 01-2 2H2a2 2 0 01-2-2V2a2 2 0 012-2h12a2 2 0 012 2v1zm-1 0V2a1 1 0 00-1-1H2a1 1 0 00-1 1v1h14zm0 1H1v10a1 1 0 001 1h12a1 1 0 001-1V4zM4.5 6a.5.5 0 010 1H2.496a.5.5 0 110-1H4.5zm9 0a.5.5 0 110 1h-6a.5.5 0 010-1h6zm-9 3a.5.5 0 010 1H2.496a.5.5 0 110-1H4.5zm9 0a.5.5 0 110 1h-6a.5.5 0 010-1h6zm-9 3a.5.5 0 110 1H2.496a.5.5 0 110-1H4.5zm9 0a.5.5 0 110 1h-6a.5.5 0 110-1h6z"}))},m5t=d5t;var E9={};$(E9,{icon:()=>b5t});var wor=k(L());var h5t=["title","titleId"];function UJ(){return UJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function v5t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var y5t=function(t){var n=t.title,r=t.titleId,o=g5t(t,h5t);return a("svg",UJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M1.5 9.047a.5.5 0 100 1h13a.5.5 0 000-1h-13zm0-1h13a1.5 1.5 0 010 3h-13a1.5 1.5 0 010-3zM10 13a.5.5 0 110 1H4a.5.5 0 110-1h6zM8.001 2.015a.5.5 0 11-.002 1l-5-.015a.5.5 0 11.003-1l5 .015zM14 5a.5.5 0 110 1H6a.5.5 0 010-1h8z"}))},b5t=y5t;var C9={};$(C9,{icon:()=>S5t});var xor=k(L());var w5t=["title","titleId"];function $J(){return $J=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function x5t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var _5t=function(t){var n=t.title,r=t.titleId,o=O5t(t,w5t);return a("svg",$J({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M8.5 5v6h2a.5.5 0 110 1h-5a.5.5 0 110-1h2V5H5v.5a.5.5 0 01-1 0v-1a.5.5 0 01.5-.5h7a.5.5 0 01.5.51l-.021 1a.5.5 0 11-1-.02l.01-.49H8.5zM1 15h1.5a.5.5 0 110 1h-2a.5.5 0 01-.5-.5v-1.996a.5.5 0 011 0V15zM1 1v1.497a.5.5 0 11-1 0V.5A.5.5 0 01.5 0h2a.5.5 0 010 1H1zm14 0h-1.495a.5.5 0 010-1H15.5a.5.5 0 01.5.5v2a.5.5 0 11-1 0V1zm0 14v-1.5a.5.5 0 111 0v2a.5.5 0 01-.5.5h-2a.5.5 0 110-1H15zM0 6.5a.5.5 0 011 0v3a.5.5 0 01-1 0v-3zM9.5 0a.5.5 0 010 1h-3a.5.5 0 010-1h3zM15 6.5a.5.5 0 111 0v3a.5.5 0 11-1 0v-3zM9.5 15a.5.5 0 110 1h-3a.5.5 0 110-1h3z"}))},S5t=_5t;var A9={};$(A9,{icon:()=>E5t});var Sor=k(L());var j5t=["title","titleId"];function JJ(){return JJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function P5t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var k5t=function(t){var n=t.title,r=t.titleId,o=I5t(t,j5t);return a("svg",JJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M10.884 1.802c1.171-.309 2.22-.24 3.103.07.295.104.507.212.631.292l.164.106.048.188c.278 1.066.2 2.175-.091 3.23a6.728 6.728 0 01-.194.598c.035.12.074.273.112.454.227 1.065.247 2.193-.08 3.267a4.855 4.855 0 01-.534 1.175c-.324.514-.7.954-1.117 1.323-.806.712-1.616 1.071-2.235 1.206-.14.179-.346.381-.629.578-.643.447-1.493.711-2.561.711-1.07 0-1.92-.264-2.563-.711a2.874 2.874 0 01-.629-.578c-.618-.134-1.428-.493-2.232-1.203-.419-.37-.796-.81-1.12-1.326a4.855 4.855 0 01-.534-1.175C.096 8.933.116 7.805.343 6.74a6.74 6.74 0 01.112-.454 6.728 6.728 0 01-.194-.598C-.03 4.633-.108 3.524.17 2.458l.048-.188.164-.106c.124-.08.336-.188.63-.291.885-.31 1.933-.38 3.104-.07.184-.108.434-.23.748-.348C5.616 1.17 6.497 1 7.501 1c1.002 0 1.883.17 2.634.455.315.119.565.24.75.347zm3.027 1.116a3.13 3.13 0 00-.255-.102c-.749-.263-1.66-.309-2.708.007l-.238.072-.201-.147c-.11-.08-.354-.217-.728-.358C9.14 2.147 8.38 2 7.501 2c-.88 0-1.641.147-2.283.39-.373.141-.617.278-.727.358l-.2.147-.24-.072c-1.048-.316-1.958-.27-2.707-.007a3.13 3.13 0 00-.255.102c-.167.812-.094 1.674.136 2.503.084.303.166.524.217.637l.082.182-.066.19c-.032.09-.084.27-.137.518-.195.914-.212 1.88.059 2.767.1.333.241.645.423.935.273.434.588.801.936 1.108.434.383.898.655 1.36.834.27.105.474.155.575.17l.248.034.12.22c.051.091.199.266.466.452.476.33 1.127.532 1.993.532.865 0 1.516-.202 1.99-.532.268-.186.416-.36.466-.452l.121-.22.248-.034c.101-.015.305-.065.576-.17.462-.18.927-.452 1.362-.836.347-.307.66-.674.933-1.107.182-.29.322-.601.423-.934.271-.887.254-1.853.06-2.767a4.597 4.597 0 00-.138-.519l-.066-.189.082-.182c.05-.113.133-.334.217-.637.23-.829.303-1.691.136-2.503zM5 5.008c.004.181-.048.364-.264.616-.428.498-.985.488-1.431.049-.326-.321-.325-.732-.29-1.047.085-.76.748-.722 1.262-.44.486.27.717.616.723.823zm5 0c.006-.206.237-.553.724-.821.514-.283 1.176-.321 1.26.44.036.314.038.725-.288 1.046-.446.44-1.005.449-1.433-.05-.217-.25-.267-.434-.263-.614zM7.5 8c-.503 0-.976-.24-1.375-.672-.398-.432-.592-1.126 0-1.528.384-.259 1.082-.3 1.375-.3.294 0 .991.041 1.375.3.593.402.397 1.096 0 1.528C8.477 7.76 8.002 8 7.5 8zm0 1c.808 0 2.656.994 2.49 2.074-.153.993-2.114.925-2.49.925-.374 0-2.336.068-2.49-.925C4.845 9.994 6.693 9 7.5 9z"}))},E5t=k5t;var M9={};$(M9,{icon:()=>R5t});var Ior=k(L());var C5t=["title","titleId"];function GJ(){return GJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function M5t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var T5t=function(t){var n=t.title,r=t.titleId,o=A5t(t,C5t);return a("svg",GJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M2.414 8.036L4.89 10.51a.5.5 0 01-.707.708L1.354 8.389a.5.5 0 010-.707l2.828-2.828a.5.5 0 11.707.707L2.414 8.036zm8.768 2.474l2.475-2.474-2.475-2.475a.5.5 0 01.707-.707l2.829 2.828a.5.5 0 010 .707l-2.829 2.829a.5.5 0 11-.707-.708zM8.559 2.506a.5.5 0 01.981.19L7.441 13.494a.5.5 0 01-.981-.19L8.559 2.506z"}))},R5t=T5t;var T9={};$(T9,{icon:()=>F5t});var kor=k(L());var z5t=["title","titleId"];function XJ(){return XJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function D5t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var N5t=function(t){var n=t.title,r=t.titleId,o=L5t(t,z5t);return a("svg",XJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M9.837 7c.11.93.165 1.886.165 2.869V13.5a.5.5 0 11-1 0V9.869A23.3 23.3 0 008.83 7H7.29c-.195 1.04-.292 1.985-.292 2.835V13.5a.5.5 0 11-1 0V9.835c0-.864.092-1.809.276-2.835H2.5a.5.5 0 01-.495-.57c.285-2.023 1.626-3.358 3.931-3.96 1.967-.514 4.22-.606 6.756-.278A1.5 1.5 0 0114 3.679V5.5A1.5 1.5 0 0112.5 7H9.837zm-.569-1H12.5a.5.5 0 00.5-.5V3.68a.5.5 0 00-.436-.497c-2.416-.311-4.54-.225-6.375.254C4.494 3.88 3.491 4.724 3.117 6H9.268zM2 10v3.5a.5.5 0 11-1 0v-4a.5.5 0 01.5-.5h3a.5.5 0 01.5.5v4a.5.5 0 11-1 0V10H2zm10 3.5a.5.5 0 11-1 0v-2a.5.5 0 01.5-.5h3a.5.5 0 01.5.5v2a.5.5 0 11-1 0V12h-2v1.5zM1.016 16.026a.5.5 0 010-1H15a.5.5 0 110 1H1.016z"}))},F5t=N5t;var R9={};$(R9,{icon:()=>q5t});var Cor=k(L());var W5t=["title","titleId"];function KJ(){return KJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function H5t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var V5t=function(t){var n=t.title,r=t.titleId,o=B5t(t,W5t);return a("svg",KJ({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M2 3h12v1H2V3zm0 8h6v1H2v-1z"}),a("path",{d:"M2 7h9.5v.5V7h.039l.083.005a2.958 2.958 0 011.102.298c.309.154.633.394.88.763.248.373.396.847.396 1.434 0 .588-.148 1.061-.396 1.434a2.257 2.257 0 01-.88.763 2.957 2.957 0 01-1.185.302h-.025l-.009.001h-.003s-.002 0-.002-.5v.5H11v1l-2-1.5 2-1.5v1h.506l.044-.003a1.959 1.959 0 00.726-.195c.191-.095.367-.23.495-.423.127-.19.229-.466.229-.879s-.102-.689-.229-.879a1.256 1.256 0 00-.495-.424 1.958 1.958 0 00-.77-.197H2V7z"}))},q5t=V5t;var z9={};$(z9,{icon:()=>X5t});var Mor=k(L());var U5t=["title","titleId"];function YJ(){return YJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function J5t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var G5t=function(t){var n=t.title,r=t.titleId,o=$5t(t,U5t);return a("svg",YJ({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M14 3.5L12 2v1H2v1h10v1l2-1.5zM12 9V8H2V7h10V6l2 1.5L12 9zm0 3v1l2-1.5-2-1.5v1H2v1h10z"}))},X5t=G5t;var L9={};$(L9,{icon:()=>e4t});var Ror=k(L());var K5t=["title","titleId"];function QJ(){return QJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Q5t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Z5t=function(t){var n=t.title,r=t.titleId,o=Y5t(t,K5t);return a("svg",QJ({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?a("title",{id:r},n):null,a("path",{d:"M6.918 9.746l4.537 4.537a2 2 0 102.828-2.829l-3.157-3.156a.5.5 0 01.708-.708l3.156 3.157a3 3 0 11-4.243 4.243l-4.949-4.95a5.001 5.001 0 01-5.22-7.106.5.5 0 01.805-.138L3.676 5.09a1 1 0 101.415-1.414L2.797 1.382a.5.5 0 01.138-.805 5.001 5.001 0 113.983 9.169zM1.226 4.054a4.002 4.002 0 006.693 3.865 4 4 0 00-3.865-6.693l1.744 1.743a2 2 0 11-2.829 2.828L1.226 4.054zm10.229 8.814a1 1 0 111.414-1.414 1 1 0 01-1.414 1.414z"}))},e4t=Z5t;var w0e=k(L()),fa=k(mt()),O0e=k(Ct());var Hk={accessibility:"accessibility",addDataApp:"app_add_data",advancedSettingsApp:"app_advanced_settings",agentApp:"app_fleet",aggregate:"aggregate",alert:"alert",analyzeEvent:"analyzeEvent",annotation:"annotation",apmApp:"app_apm",apmTrace:"apm_trace",appSearchApp:"app_app_search",apps:"apps",arrowDown:"arrow_down",arrowLeft:"arrow_left",arrowRight:"arrow_right",arrowUp:"arrow_up",arrowStart:"arrowStart",arrowEnd:"arrowEnd",asterisk:"asterisk",auditbeatApp:"app_auditbeat",beaker:"beaker",bell:"bell",bellSlash:"bellSlash",bolt:"bolt",boxesHorizontal:"boxes_horizontal",boxesVertical:"boxes_vertical",branch:"branch",branchUser:"branchUser",broom:"broom",brush:"brush",bug:"bug",bullseye:"bullseye",calendar:"calendar",canvasApp:"app_canvas",casesApp:"app_cases",check:"check",checkInCircleFilled:"checkInCircleFilled",cheer:"cheer",classificationJob:"ml_classification_job",clock:"clock",cloudDrizzle:"cloudDrizzle",cloudStormy:"cloudStormy",cloudSunny:"cloudSunny",cluster:"cluster",codeApp:"app_code",color:"color",compute:"compute",console:"console",consoleApp:"app_console",container:"container",continuityAbove:"continuityAbove",continuityAboveBelow:"continuityAboveBelow",continuityBelow:"continuityBelow",continuityWithin:"continuityWithin",controlsHorizontal:"controls_horizontal",controlsVertical:"controls_vertical",copy:"copy",copyClipboard:"copy_clipboard",createAdvancedJob:"ml_create_advanced_job",createMultiMetricJob:"ml_create_multi_metric_job",createPopulationJob:"ml_create_population_job",createSingleMetricJob:"ml_create_single_metric_job",cross:"cross",crossClusterReplicationApp:"app_cross_cluster_replication",crossInACircleFilled:"crossInACircleFilled",crosshairs:"crosshairs",currency:"currency",cut:"cut",dashboardApp:"app_dashboard",dataVisualizer:"ml_data_visualizer",database:"database",desktop:"desktop",devToolsApp:"app_devtools",discoverApp:"app_discover",document:"document",documentEdit:"documentEdit",documentation:"documentation",documents:"documents",dot:"dot",doubleArrowLeft:"doubleArrowLeft",doubleArrowRight:"doubleArrowRight",download:"download",editorAlignCenter:"editor_align_center",editorAlignLeft:"editor_align_left",editorAlignRight:"editor_align_right",editorBold:"editor_bold",editorChecklist:"editor_checklist",editorCodeBlock:"editor_code_block",editorComment:"editor_comment",editorDistributeHorizontal:"editorDistributeHorizontal",editorDistributeVertical:"editorDistributeVertical",editorHeading:"editor_heading",editorItalic:"editor_italic",editorItemAlignBottom:"editorItemAlignBottom",editorItemAlignCenter:"editorItemAlignCenter",editorItemAlignLeft:"editorItemAlignLeft",editorItemAlignMiddle:"editorItemAlignMiddle",editorItemAlignRight:"editorItemAlignRight",editorItemAlignTop:"editorItemAlignTop",editorLink:"editor_link",editorOrderedList:"editor_ordered_list",editorPositionBottomLeft:"editorPositionBottomLeft",editorPositionBottomRight:"editorPositionBottomRight",editorPositionTopLeft:"editorPositionTopLeft",editorPositionTopRight:"editorPositionTopRight",editorRedo:"editor_redo",editorStrike:"editor_strike",editorTable:"editor_table",editorUnderline:"editor_underline",editorUndo:"editor_undo",editorUnorderedList:"editor_unordered_list",email:"email",empty:"empty",emsApp:"app_ems",eql:"eql",eraser:"eraser",exit:"exit",expand:"expand",expandMini:"expandMini",exportAction:"export",eye:"eye",eyeClosed:"eye_closed",faceHappy:"face_happy",faceNeutral:"face_neutral",faceSad:"face_sad",filebeatApp:"app_filebeat",filter:"filter",flag:"flag",fleetApp:"app_agent",fold:"fold",folderCheck:"folder_check",folderClosed:"folder_closed",folderExclamation:"folder_exclamation",folderOpen:"folder_open",frameNext:"frameNext",framePrevious:"framePrevious",fullScreen:"full_screen",fullScreenExit:"fullScreenExit",function:"function",gear:"gear",gisApp:"app_gis",glasses:"glasses",globe:"globe",grab:"grab",grabHorizontal:"grab_horizontal",graphApp:"app_graph",grid:"grid",grokApp:"app_grok",heart:"heart",heartbeatApp:"app_heartbeat",heatmap:"heatmap",help:"help",home:"home",iInCircle:"iInCircle",image:"image",importAction:"import",indexClose:"index_close",indexEdit:"index_edit",indexFlush:"index_flush",indexManagementApp:"app_index_management",indexMapping:"index_mapping",indexOpen:"index_open",indexPatternApp:"app_index_pattern",indexRollupApp:"app_index_rollup",indexRuntime:"index_runtime",indexSettings:"index_settings",inputOutput:"inputOutput",inspect:"inspect",invert:"invert",ip:"ip",keyboard:"keyboard",kqlField:"kql_field",kqlFunction:"kql_function",kqlOperand:"kql_operand",kqlSelector:"kql_selector",kqlValue:"kql_value",kubernetesNode:"kubernetesNode",kubernetesPod:"kubernetesPod",layers:"layers",lensApp:"app_lens",lettering:"lettering",lineDashed:"lineDashed",lineDotted:"lineDotted",lineSolid:"lineSolid",link:"link",list:"list",listAdd:"list_add",lock:"lock",lockOpen:"lockOpen",logoAWS:"logo_aws",logoAWSMono:"logo_aws_mono",logoAerospike:"logo_aerospike",logoApache:"logo_apache",logoAppSearch:"logo_app_search",logoAzure:"logo_azure",logoAzureMono:"logo_azure_mono",logoBeats:"logo_beats",logoBusinessAnalytics:"logo_business_analytics",logoCeph:"logo_ceph",logoCloud:"logo_cloud",logoCloudEnterprise:"logo_cloud_ece",logoCode:"logo_code",logoCodesandbox:"logo_codesandbox",logoCouchbase:"logo_couchbase",logoDocker:"logo_docker",logoDropwizard:"logo_dropwizard",logoElastic:"logo_elastic",logoElasticStack:"logo_elastic_stack",logoElasticsearch:"logo_elasticsearch",logoEnterpriseSearch:"logo_enterprise_search",logoEtcd:"logo_etcd",logoGCP:"logo_gcp",logoGCPMono:"logo_gcp_mono",logoGithub:"logo_github",logoGmail:"logo_gmail",logoGolang:"logo_golang",logoGoogleG:"logo_google_g",logoHAproxy:"logo_haproxy",logoIBM:"logo_ibm",logoIBMMono:"logo_ibm_mono",logoKafka:"logo_kafka",logoKibana:"logo_kibana",logoKubernetes:"logo_kubernetes",logoLogging:"logo_logging",logoLogstash:"logo_logstash",logoMaps:"logo_maps",logoMemcached:"logo_memcached",logoMetrics:"logo_metrics",logoMongodb:"logo_mongodb",logoMySQL:"logo_mysql",logoNginx:"logo_nginx",logoObservability:"logo_observability",logoOsquery:"logo_osquery",logoPhp:"logo_php",logoPostgres:"logo_postgres",logoPrometheus:"logo_prometheus",logoRabbitmq:"logo_rabbitmq",logoRedis:"logo_redis",logoSecurity:"logo_security",logoSiteSearch:"logo_site_search",logoSketch:"logo_sketch",logoSlack:"logo_slack",logoUptime:"logo_uptime",logoWebhook:"logo_webhook",logoWindows:"logo_windows",logoWorkplaceSearch:"logo_workplace_search",logsApp:"app_logs",logstashFilter:"logstash_filter",logstashIf:"logstash_if",logstashInput:"logstash_input",logstashOutput:"logstash_output",logstashQueue:"logstash_queue",machineLearningApp:"app_ml",magnet:"magnet",magnifyWithExclamation:"magnifyWithExclamation",magnifyWithMinus:"magnifyWithMinus",magnifyWithPlus:"magnifyWithPlus",managementApp:"app_management",mapMarker:"map_marker",memory:"memory",menu:"menu",menuDown:"menuDown",menuLeft:"menuLeft",menuRight:"menuRight",menuUp:"menuUp",merge:"merge",metricbeatApp:"app_metricbeat",metricsApp:"app_metrics",minimize:"minimize",minus:"minus",minusInCircle:"minus_in_circle",minusInCircleFilled:"minus_in_circle_filled",mobile:"mobile",monitoringApp:"app_monitoring",moon:"moon",namespace:"namespace",nested:"nested",node:"node",notebookApp:"app_notebook",number:"number",offline:"offline",online:"online",outlierDetectionJob:"ml_outlier_detection_job",package:"package",packetbeatApp:"app_packetbeat",pageSelect:"pageSelect",pagesSelect:"pagesSelect",paperClip:"paper_clip",partial:"partial",pause:"pause",payment:"payment",pencil:"pencil",percent:"percent",pin:"pin",pinFilled:"pin_filled",pipelineApp:"app_pipeline",play:"play",playFilled:"playFilled",plus:"plus",plusInCircle:"plus_in_circle",plusInCircleFilled:"plus_in_circle_filled",popout:"popout",push:"push",questionInCircle:"question_in_circle",quote:"quote",recentlyViewedApp:"app_recently_viewed",refresh:"refresh",regressionJob:"ml_regression_job",reporter:"reporter",reportingApp:"app_reporting",returnKey:"return_key",save:"save",savedObjectsApp:"app_saved_objects",scale:"scale",search:"search",searchProfilerApp:"app_search_profiler",securityAnalyticsApp:"app_security_analytics",securityApp:"app_security",securitySignal:"securitySignal",securitySignalDetected:"securitySignalDetected",securitySignalResolved:"securitySignalResolved",sessionViewer:"sessionViewer",shard:"shard",share:"share",snowflake:"snowflake",sortDown:"sort_down",sortLeft:"sortLeft",sortRight:"sortRight",sortUp:"sort_up",sortable:"sortable",spacesApp:"app_spaces",sqlApp:"app_sql",starEmpty:"star_empty",starEmptySpace:"star_empty_space",starFilled:"star_filled",starFilledSpace:"star_filled_space",starMinusEmpty:"star_minus_empty",starMinusFilled:"star_minus_filled",starPlusEmpty:"starPlusEmpty",starPlusFilled:"starPlusFilled",stats:"stats",stop:"stop",stopFilled:"stop_filled",stopSlash:"stop_slash",storage:"storage",string:"string",submodule:"submodule",sun:"sun",swatchInput:"swatch_input",symlink:"symlink",tableDensityCompact:"table_density_compact",tableDensityExpanded:"table_density_expanded",tableDensityNormal:"table_density_normal",tableOfContents:"tableOfContents",tag:"tag",tear:"tear",temperature:"temperature",timeline:"timeline",timelionApp:"app_timelion",timeRefresh:"timeRefresh",timeslider:"timeslider",training:"training",trash:"trash",unfold:"unfold",unlink:"unlink",upgradeAssistantApp:"app_upgrade_assistant",uptimeApp:"app_uptime",user:"user",userAvatar:"userAvatar",users:"users",usersRolesApp:"app_users_roles",vector:"vector",videoPlayer:"videoPlayer",visArea:"vis_area",visAreaStacked:"vis_area_stacked",visBarHorizontal:"vis_bar_horizontal",visBarHorizontalStacked:"vis_bar_horizontal_stacked",visBarVertical:"vis_bar_vertical",visBarVerticalStacked:"vis_bar_vertical_stacked",visGauge:"vis_gauge",visGoal:"vis_goal",visLine:"vis_line",visMapCoordinate:"vis_map_coordinate",visMapRegion:"vis_map_region",visMetric:"vis_metric",visPie:"vis_pie",visTable:"vis_table",visTagCloud:"vis_tag_cloud",visText:"vis_text",visTimelion:"vis_timelion",visVega:"vis_vega",visVisualBuilder:"vis_visual_builder",visualizeApp:"app_visualize",watchesApp:"app_watches",wordWrap:"wordWrap",wordWrapDisabled:"wordWrapDisabled",workplaceSearchApp:"app_workplace_search",wrench:"wrench",tokenAlias:"tokenAlias",tokenAnnotation:"tokenAnnotation",tokenArray:"tokenArray",tokenBinary:"tokenBinary",tokenBoolean:"tokenBoolean",tokenClass:"tokenClass",tokenCompletionSuggester:"tokenCompletionSuggester",tokenConstant:"tokenConstant",tokenDate:"tokenDate",tokenDenseVector:"tokenDenseVector",tokenElement:"tokenElement",tokenEnum:"tokenEnum",tokenEnumMember:"tokenEnumMember",tokenEvent:"tokenEvent",tokenException:"tokenException",tokenField:"tokenField",tokenFile:"tokenFile",tokenFlattened:"tokenFlattened",tokenFunction:"tokenFunction",tokenGeo:"tokenGeo",tokenHistogram:"tokenHistogram",tokenInterface:"tokenInterface",tokenIP:"tokenIP",tokenJoin:"tokenJoin",tokenKey:"tokenKey",tokenKeyword:"tokenKeyword",tokenMethod:"tokenMethod",tokenMetricCounter:"tokenMetricCounter",tokenMetricGauge:"tokenMetricGauge",tokenModule:"tokenModule",tokenNamespace:"tokenNamespace",tokenNested:"tokenNested",tokenNull:"tokenNull",tokenNumber:"tokenNumber",tokenObject:"tokenObject",tokenOperator:"tokenOperator",tokenPackage:"tokenPackage",tokenParameter:"tokenParameter",tokenPercolator:"tokenPercolator",tokenProperty:"tokenProperty",tokenRange:"tokenRange",tokenRankFeature:"tokenRankFeature",tokenRankFeatures:"tokenRankFeatures",tokenRepo:"tokenRepo",tokenSearchType:"tokenSearchType",tokenShape:"tokenShape",tokenString:"tokenString",tokenStruct:"tokenStruct",tokenSymbol:"tokenSymbol",tokenTag:"tokenTag",tokenText:"tokenText",tokenTokenCount:"tokenTokenCount",tokenVariable:"tokenVariable"};var l0e=k(_o()),D9=[];function t4t(){(0,l0e.unstable_batchedUpdates)(function(){for(var e=0;e2&&arguments[2]!==void 0?arguments[2]:{},u=i.method;if(n==="transparent")return"transparent";if(u==="transparent")return n==="plain"?Zs(r.colors.ghost,.2):n==="subdued"?Zs(r.colors.lightShade,.2):Zs(r.colors[n],.1);var f=function(y){return o==="DARK"?ac(y,.8):ic(y,.9)};switch(n){case"plain":return r.colors.emptyShade;case"subdued":return r.colors.body;default:return f(r.colors[n])}},Ed=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=n.method,o=en();return F9(o,t,{method:r})},u0e=function(){return{transparent:Fe("background-color:",Ed("transparent"),";;label:transparent;"),plain:Fe("background-color:",Ed("plain"),";;label:plain;"),subdued:Fe("background-color:",Ed("subdued"),";;label:subdued;"),accent:Fe("background-color:",Ed("accent"),";;label:accent;"),primary:Fe("background-color:",Ed("primary"),";;label:primary;"),success:Fe("background-color:",Ed("success"),";;label:success;"),warning:Fe("background-color:",Ed("warning"),";;label:warning;"),danger:Fe("background-color:",Ed("danger"),";;label:danger;")}};var c0e=function(t){var n=t.euiTheme,r=n.colors,o=n.size,i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},u=i.thumbColor,f=i.trackColor,h=f===void 0?"transparent":f,y=i.width,O=y===void 0?"thin":y,S=i.size,I=i.corner,A=u||Zs(r.darkShade,.5),C=S||o.base,M=I||O==="thin"?"calc(".concat(o.s," * 0.75)"):o.xs,F="scrollbar-color: ".concat(A," ").concat(h,";");return"scrollbar-width: ".concat(O,`; &::-webkit-scrollbar { width: `).concat(C,`; @@ -66,8 +66,8 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho background-color: `).concat(h,`; } - `).concat(W,` - `)};var Z5t=function(t,n){var r=t.euiTheme;switch(n){case"none":return null;case"m":return r.size.base;default:return r.size[n]}},N9=function(t){var n=en();return Z5t(n,t)},u0e=function(t){var n=t?"padding-".concat(EN[t]):"padding";return{none:null,xs:Ne(n,":",N9("xs"),";;label:xs;"),s:Ne(n,":",N9("s"),";;label:s;"),m:Ne(n,":",N9("m"),";;label:m;"),l:Ne(n,":",N9("l"),";;label:l;"),xl:Ne(n,":",N9("xl"),";;label:xl;")}};var DP=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"center",r=arguments.length>2?arguments[2]:void 0,o=t.focus.width,i=r?.color||t.focus.color,u=n;return n==="inset"?u="-".concat(o):n==="outset"?u="".concat(o):n==="center"&&(u="calc(".concat(o," / -2);")),` + `).concat(F,` + `)};var r4t=function(t,n){var r=t.euiTheme;switch(n){case"none":return null;case"m":return r.size.base;default:return r.size[n]}},W9=function(t){var n=en();return r4t(n,t)},p0e=function(t){var n=t?"padding-".concat(RN[t]):"padding";return{none:null,xs:Fe(n,":",W9("xs"),";;label:xs;"),s:Fe(n,":",W9("s"),";;label:s;"),m:Fe(n,":",W9("m"),";;label:m;"),l:Fe(n,":",W9("l"),";;label:l;"),xl:Fe(n,":",W9("xl"),";;label:xl;")}};var Vk=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"center",r=arguments.length>2?arguments[2]:void 0,o=t.focus.width,i=r?.color||t.focus.color,u=n;return n==="inset"?u="-".concat(o):n==="outset"?u="".concat(o):n==="center"&&(u="calc(".concat(o," / -2);")),` outline: `.concat(o," solid ").concat(i,`; outline-offset: `).concat(u,`; @@ -80,11 +80,11 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho &:not(:focus-visible) { outline: none; } - `)};var lc=function(t,n,r){var o=t.euiTheme;return{fontSize:jle(n,o,r),lineHeight:Ile(n,o,r)}};var c0e=function(){return` + `)};var uc=function(t,n,r){var o=t.euiTheme;return{fontSize:Ple(n,o,r),lineHeight:kle(n,o,r)}};var f0e=function(){return` overflow-wrap: break-word !important; // makes sure the long string will wrap and not bust out of the container word-wrap: break-word !important; // spec says, they are literally just alternate names for each other but some browsers support one and not the other word-break: break-word; // IE doesn't understand but that's ok -`};var _p="@media screen and (prefers-reduced-motion: no-preference)";var p0e=` +`};var jp="@media screen and (prefers-reduced-motion: no-preference)";var d0e=` /* // Adapted from Eric Meyer's reset (http://meyerweb.com/eric/tools/css/reset/, v2.0 | 20110126). */ @@ -183,15 +183,15 @@ fieldset { */ svg text { letter-spacing: normal !important; -}`;function e4t(e){if(e==null)throw new TypeError("Cannot destructure undefined")}var f0e=function(t){e4t(t);var n=en(),r=n.euiTheme,o=n.colorMode,i=r.base,u=r.colors,f=r.font,h=s0e(n,{trackColor:o==="LIGHT"?oc(u.body,.03):nc(u.body,.07),width:"auto"}),y=` +}`;function n4t(e){if(e==null)throw new TypeError("Cannot destructure undefined")}var m0e=function(t){n4t(t);var n=en(),r=n.euiTheme,o=n.colorMode,i=r.base,u=r.colors,f=r.font,h=c0e(n,{trackColor:o==="LIGHT"?ac(u.body,.03):ic(u.body,.07),width:"auto"}),y=` font-family: `.concat(f.family,`; font-size: `,"".concat(f.scale[f.body.scale]*i,"px"),`; line-height: `).concat(i/(f.scale[f.body.scale]*i),`; font-weight: `).concat(f.weight[f.body.weight],`; - `),O=Ne(p0e," html{",h," ",y," text-size-adjust:100%;font-kerning:normal;height:100%;background-color:",u.body,";color:",u.text,";}code,pre,kbd,samp{font-family:",f.familyCode,";}input,textarea,select{",y,";}button{font-family:",f.family,";}em{font-style:italic;}strong{font-weight:",f.weight.bold,";}*:focus{",DP(r),";}::selection{background:",Ks(u.primary,o==="LIGHT"?.1:.2),";}a{color:",u.primaryText,";&,&:hover,&:focus{text-decoration:none;}}.euiBody-hasPortalContent{position:relative;};label:styles;");return a(Wk,{styles:O})};var d0e;function t4t(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}var F9=function(t){return` - `.concat(Yt("width",t),`; - `).concat(Yt("height",t),`; - `)},m0e=.05,r4t=Bk(d0e||(d0e=t4t([` + `),O=Fe(d0e," html{",h," ",y," text-size-adjust:100%;font-kerning:normal;height:100%;background-color:",u.body,";color:",u.text,";}code,pre,kbd,samp{font-family:",f.familyCode,";}input,textarea,select{",y,";}button{font-family:",f.family,";}em{font-style:italic;}strong{font-weight:",f.weight.bold,";}*:focus{",Vk(r),";}::selection{background:",Zs(u.primary,o==="LIGHT"?.1:.2),";}a{color:",u.primaryText,";&,&:hover,&:focus{text-decoration:none;}}.euiBody-hasPortalContent{position:relative;};label:styles;");return a($P,{styles:O})};var h0e;function o4t(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}var B9=function(t){return` + `.concat(Kt("width",t),`; + `).concat(Kt("height",t),`; + `)},g0e=.05,i4t=JP(h0e||(h0e=o4t([` 0% { opacity: `,`; } @@ -199,8 +199,8 @@ svg text { 100% { opacity: 1; } -`])),m0e),n4t={name:"njd749-logoElasticOutline",styles:"*[fill]{fill:none!important;}.outline{fill:currentColor!important;};label:logoElasticOutline;"},o4t={name:"uacjc5-inherit",styles:"color:inherit;label:inherit;"},h0e=function(t){var n=t.euiTheme;return{euiIcon:Ne("flex-shrink:0;display:inline-block;vertical-align:middle;fill:currentColor;transform:translate(0, 0);.euiIcon__fillNegative{fill:",n.colors.darkestShade,";};label:euiIcon;"),accent:Ne("color:",n.colors.accentText,";;label:accent;"),danger:Ne("color:",n.colors.dangerText,";;label:danger;"),ghost:Ne("color:",n.colors.ghost,";*[fill],.euiIcon__fillNegative{fill:currentColor!important;};label:ghost;"),primary:Ne("color:",n.colors.primaryText,";;label:primary;"),success:Ne("color:",n.colors.successText,";;label:success;"),subdued:Ne("color:",n.colors.subduedText,";;label:subdued;"),text:Ne("color:",n.colors.title,";*[fill],.euiIcon__fillNegative{fill:currentColor!important;};label:text;"),warning:Ne("color:",n.colors.warningText,";;label:warning;"),inherit:o4t,default:Ne(";label:default;"),customColor:Ne(";label:customColor;"),logoElasticOutline:n4t,original:Ne(";label:original;"),s:Ne(F9(n.size.m),";label:s;"),m:Ne(F9(n.size.base),";label:m;"),l:Ne(F9(n.size.l),";label:l;"),xl:Ne(F9(n.size.xl),";label:xl;"),xxl:Ne(F9(n.size.xxl),";label:xxl;"),app:Ne("fill:",n.colors.text,";.euiIcon__fillSecondary{fill:",n.colors.successText,";};label:app;"),logo:Ne(";label:logo;"),isLoading:Ne("opacity:",m0e,";background-color:currentColor;border-radius:",n.border.radius.small,";;label:isLoading;"),isLoaded:Ne(_p,"{animation:",r4t," ",n.animation.normal," ease-in 0s 1 forwards;};label:isLoaded;")}};var i4t={"./assets/accessibility.js":m5,"./assets/aggregate.js":h5,"./assets/alert.js":g5,"./assets/analyzeEvent.js":v5,"./assets/analyze_event.js":y5,"./assets/annotation.js":b5,"./assets/apm_trace.js":w5,"./assets/app_add_data.js":O5,"./assets/app_advanced_settings.js":x5,"./assets/app_agent.js":_5,"./assets/app_apm.js":S5,"./assets/app_app_search.js":j5,"./assets/app_auditbeat.js":I5,"./assets/app_canvas.js":k5,"./assets/app_cases.js":P5,"./assets/app_code.js":E5,"./assets/app_console.js":C5,"./assets/app_cross_cluster_replication.js":A5,"./assets/app_dashboard.js":M5,"./assets/app_devtools.js":T5,"./assets/app_discover.js":R5,"./assets/app_ems.js":z5,"./assets/app_filebeat.js":L5,"./assets/app_fleet.js":D5,"./assets/app_gis.js":N5,"./assets/app_graph.js":F5,"./assets/app_grok.js":W5,"./assets/app_heartbeat.js":B5,"./assets/app_index_management.js":H5,"./assets/app_index_pattern.js":V5,"./assets/app_index_rollup.js":q5,"./assets/app_lens.js":U5,"./assets/app_logs.js":$5,"./assets/app_management.js":J5,"./assets/app_metricbeat.js":G5,"./assets/app_metrics.js":X5,"./assets/app_ml.js":K5,"./assets/app_monitoring.js":Y5,"./assets/app_notebook.js":Q5,"./assets/app_packetbeat.js":Z5,"./assets/app_pipeline.js":e4,"./assets/app_recently_viewed.js":t4,"./assets/app_reporting.js":r4,"./assets/app_saved_objects.js":n4,"./assets/app_search_profiler.js":o4,"./assets/app_security.js":i4,"./assets/app_security_analytics.js":a4,"./assets/app_spaces.js":l4,"./assets/app_sql.js":s4,"./assets/app_timelion.js":u4,"./assets/app_upgrade_assistant.js":c4,"./assets/app_uptime.js":p4,"./assets/app_users_roles.js":f4,"./assets/app_visualize.js":d4,"./assets/app_watches.js":m4,"./assets/app_workplace_search.js":h4,"./assets/apps.js":g4,"./assets/arrowEnd.js":v4,"./assets/arrowStart.js":y4,"./assets/arrow_down.js":b4,"./assets/arrow_left.js":w4,"./assets/arrow_right.js":O4,"./assets/arrow_up.js":x4,"./assets/asterisk.js":_4,"./assets/beaker.js":S4,"./assets/bell.js":j4,"./assets/bellSlash.js":I4,"./assets/bolt.js":k4,"./assets/boxes_horizontal.js":P4,"./assets/boxes_vertical.js":E4,"./assets/branch.js":C4,"./assets/branchUser.js":A4,"./assets/broom.js":M4,"./assets/brush.js":T4,"./assets/bug.js":R4,"./assets/bullseye.js":z4,"./assets/calendar.js":L4,"./assets/check.js":D4,"./assets/checkInCircleFilled.js":N4,"./assets/cheer.js":F4,"./assets/clock.js":W4,"./assets/cloudDrizzle.js":B4,"./assets/cloudStormy.js":H4,"./assets/cloudSunny.js":V4,"./assets/cluster.js":q4,"./assets/color.js":U4,"./assets/compute.js":$4,"./assets/console.js":J4,"./assets/container.js":G4,"./assets/continuityAbove.js":X4,"./assets/continuityAboveBelow.js":K4,"./assets/continuityBelow.js":Y4,"./assets/continuityWithin.js":Q4,"./assets/controls_horizontal.js":Z4,"./assets/controls_vertical.js":e6,"./assets/copy.js":t6,"./assets/copy_clipboard.js":r6,"./assets/cross.js":n6,"./assets/crossInACircleFilled.js":o6,"./assets/crosshairs.js":i6,"./assets/currency.js":a6,"./assets/cut.js":l6,"./assets/database.js":s6,"./assets/desktop.js":u6,"./assets/document.js":c6,"./assets/documentEdit.js":p6,"./assets/documentation.js":f6,"./assets/documents.js":d6,"./assets/dot.js":m6,"./assets/doubleArrowLeft.js":h6,"./assets/doubleArrowRight.js":g6,"./assets/download.js":v6,"./assets/editorDistributeHorizontal.js":y6,"./assets/editorDistributeVertical.js":b6,"./assets/editorItemAlignBottom.js":w6,"./assets/editorItemAlignCenter.js":O6,"./assets/editorItemAlignLeft.js":x6,"./assets/editorItemAlignMiddle.js":_6,"./assets/editorItemAlignRight.js":S6,"./assets/editorItemAlignTop.js":j6,"./assets/editorPositionBottomLeft.js":I6,"./assets/editorPositionBottomRight.js":k6,"./assets/editorPositionTopLeft.js":P6,"./assets/editorPositionTopRight.js":E6,"./assets/editor_align_center.js":C6,"./assets/editor_align_left.js":A6,"./assets/editor_align_right.js":M6,"./assets/editor_bold.js":T6,"./assets/editor_checklist.js":R6,"./assets/editor_code_block.js":z6,"./assets/editor_comment.js":L6,"./assets/editor_heading.js":D6,"./assets/editor_italic.js":N6,"./assets/editor_link.js":F6,"./assets/editor_ordered_list.js":W6,"./assets/editor_redo.js":B6,"./assets/editor_strike.js":H6,"./assets/editor_table.js":V6,"./assets/editor_underline.js":q6,"./assets/editor_undo.js":U6,"./assets/editor_unordered_list.js":$6,"./assets/email.js":J6,"./assets/empty.js":G6,"./assets/eql.js":X6,"./assets/eraser.js":K6,"./assets/exit.js":Y6,"./assets/expand.js":Q6,"./assets/expandMini.js":Z6,"./assets/export.js":ew,"./assets/eye.js":tw,"./assets/eye_closed.js":rw,"./assets/face_happy.js":nw,"./assets/face_neutral.js":ow,"./assets/face_sad.js":iw,"./assets/filter.js":aw,"./assets/flag.js":lw,"./assets/fold.js":sw,"./assets/folder_check.js":uw,"./assets/folder_closed.js":cw,"./assets/folder_exclamation.js":pw,"./assets/folder_open.js":fw,"./assets/frameNext.js":dw,"./assets/framePrevious.js":mw,"./assets/fullScreenExit.js":hw,"./assets/full_screen.js":gw,"./assets/function.js":vw,"./assets/gear.js":yw,"./assets/glasses.js":bw,"./assets/globe.js":ww,"./assets/grab.js":Ow,"./assets/grab_horizontal.js":xw,"./assets/grid.js":_w,"./assets/heart.js":Sw,"./assets/heatmap.js":jw,"./assets/help.js":Iw,"./assets/home.js":kw,"./assets/iInCircle.js":Pw,"./assets/image.js":Ew,"./assets/import.js":Cw,"./assets/index_close.js":Aw,"./assets/index_edit.js":Mw,"./assets/index_flush.js":Tw,"./assets/index_mapping.js":Rw,"./assets/index_open.js":zw,"./assets/index_runtime.js":Lw,"./assets/index_settings.js":Dw,"./assets/inputOutput.js":Nw,"./assets/inspect.js":Fw,"./assets/invert.js":Ww,"./assets/ip.js":Bw,"./assets/keyboard.js":Hw,"./assets/kql_field.js":Vw,"./assets/kql_function.js":qw,"./assets/kql_operand.js":Uw,"./assets/kql_selector.js":$w,"./assets/kql_value.js":Jw,"./assets/kubernetesNode.js":Gw,"./assets/kubernetesPod.js":Xw,"./assets/layers.js":Kw,"./assets/lettering.js":Yw,"./assets/lineDashed.js":Qw,"./assets/lineDotted.js":Zw,"./assets/lineSolid.js":eO,"./assets/link.js":tO,"./assets/list.js":rO,"./assets/list_add.js":nO,"./assets/lock.js":oO,"./assets/lockOpen.js":iO,"./assets/logo_aerospike.js":aO,"./assets/logo_apache.js":lO,"./assets/logo_app_search.js":sO,"./assets/logo_aws.js":uO,"./assets/logo_aws_mono.js":cO,"./assets/logo_azure.js":pO,"./assets/logo_azure_mono.js":fO,"./assets/logo_beats.js":dO,"./assets/logo_business_analytics.js":mO,"./assets/logo_ceph.js":hO,"./assets/logo_cloud.js":gO,"./assets/logo_cloud_ece.js":vO,"./assets/logo_code.js":yO,"./assets/logo_codesandbox.js":bO,"./assets/logo_couchbase.js":wO,"./assets/logo_docker.js":OO,"./assets/logo_dropwizard.js":xO,"./assets/logo_elastic.js":_O,"./assets/logo_elastic_stack.js":SO,"./assets/logo_elasticsearch.js":jO,"./assets/logo_enterprise_search.js":IO,"./assets/logo_etcd.js":kO,"./assets/logo_gcp.js":PO,"./assets/logo_gcp_mono.js":EO,"./assets/logo_github.js":CO,"./assets/logo_gmail.js":AO,"./assets/logo_golang.js":MO,"./assets/logo_google_g.js":TO,"./assets/logo_haproxy.js":RO,"./assets/logo_ibm.js":zO,"./assets/logo_ibm_mono.js":LO,"./assets/logo_kafka.js":DO,"./assets/logo_kibana.js":NO,"./assets/logo_kubernetes.js":FO,"./assets/logo_logging.js":WO,"./assets/logo_logstash.js":BO,"./assets/logo_maps.js":HO,"./assets/logo_memcached.js":VO,"./assets/logo_metrics.js":qO,"./assets/logo_mongodb.js":UO,"./assets/logo_mysql.js":$O,"./assets/logo_nginx.js":JO,"./assets/logo_observability.js":GO,"./assets/logo_osquery.js":XO,"./assets/logo_php.js":KO,"./assets/logo_postgres.js":YO,"./assets/logo_prometheus.js":QO,"./assets/logo_rabbitmq.js":ZO,"./assets/logo_redis.js":e7,"./assets/logo_security.js":t7,"./assets/logo_site_search.js":r7,"./assets/logo_sketch.js":n7,"./assets/logo_slack.js":o7,"./assets/logo_uptime.js":i7,"./assets/logo_webhook.js":a7,"./assets/logo_windows.js":l7,"./assets/logo_workplace_search.js":s7,"./assets/logstash_filter.js":u7,"./assets/logstash_if.js":c7,"./assets/logstash_input.js":p7,"./assets/logstash_output.js":f7,"./assets/logstash_queue.js":d7,"./assets/magnet.js":m7,"./assets/magnifyWithExclamation.js":h7,"./assets/magnifyWithMinus.js":g7,"./assets/magnifyWithPlus.js":v7,"./assets/map_marker.js":y7,"./assets/memory.js":b7,"./assets/menu.js":w7,"./assets/menuDown.js":O7,"./assets/menuLeft.js":x7,"./assets/menuRight.js":_7,"./assets/menuUp.js":S7,"./assets/merge.js":j7,"./assets/minimize.js":I7,"./assets/minus.js":k7,"./assets/minus_in_circle.js":P7,"./assets/minus_in_circle_filled.js":E7,"./assets/ml_classification_job.js":C7,"./assets/ml_create_advanced_job.js":A7,"./assets/ml_create_multi_metric_job.js":M7,"./assets/ml_create_population_job.js":T7,"./assets/ml_create_single_metric_job.js":R7,"./assets/ml_data_visualizer.js":z7,"./assets/ml_outlier_detection_job.js":L7,"./assets/ml_regression_job.js":D7,"./assets/mobile.js":N7,"./assets/moon.js":F7,"./assets/namespace.js":W7,"./assets/nested.js":B7,"./assets/node.js":H7,"./assets/number.js":V7,"./assets/offline.js":q7,"./assets/online.js":U7,"./assets/package.js":$7,"./assets/pageSelect.js":J7,"./assets/pagesSelect.js":G7,"./assets/paint.js":X7,"./assets/paper_clip.js":K7,"./assets/partial.js":Y7,"./assets/pause.js":Q7,"./assets/payment.js":Z7,"./assets/pencil.js":e8,"./assets/percent.js":t8,"./assets/pin.js":r8,"./assets/pin_filled.js":n8,"./assets/play.js":o8,"./assets/playFilled.js":i8,"./assets/plus.js":a8,"./assets/plus_in_circle.js":l8,"./assets/plus_in_circle_filled.js":s8,"./assets/popout.js":u8,"./assets/push.js":c8,"./assets/question_in_circle.js":p8,"./assets/quote.js":f8,"./assets/refresh.js":d8,"./assets/reporter.js":m8,"./assets/return_key.js":h8,"./assets/save.js":g8,"./assets/scale.js":v8,"./assets/search.js":y8,"./assets/securitySignal.js":b8,"./assets/securitySignalDetected.js":w8,"./assets/securitySignalResolved.js":O8,"./assets/sessionViewer.js":x8,"./assets/shard.js":_8,"./assets/share.js":S8,"./assets/snowflake.js":j8,"./assets/sortLeft.js":I8,"./assets/sortRight.js":k8,"./assets/sort_down.js":P8,"./assets/sort_up.js":E8,"./assets/sortable.js":C8,"./assets/starPlusEmpty.js":A8,"./assets/starPlusFilled.js":M8,"./assets/star_empty.js":T8,"./assets/star_empty_space.js":R8,"./assets/star_filled.js":z8,"./assets/star_filled_space.js":L8,"./assets/star_minus_empty.js":D8,"./assets/star_minus_filled.js":N8,"./assets/stats.js":F8,"./assets/stop.js":W8,"./assets/stop_filled.js":B8,"./assets/stop_slash.js":H8,"./assets/storage.js":V8,"./assets/string.js":q8,"./assets/submodule.js":U8,"./assets/sun.js":$8,"./assets/swatch_input.js":J8,"./assets/symlink.js":G8,"./assets/tableOfContents.js":X8,"./assets/table_density_compact.js":K8,"./assets/table_density_expanded.js":Y8,"./assets/table_density_normal.js":Q8,"./assets/tag.js":Z8,"./assets/tear.js":ex,"./assets/temperature.js":tx,"./assets/timeRefresh.js":rx,"./assets/timeline.js":nx,"./assets/timeslider.js":ox,"./assets/tokenAlias.js":ix,"./assets/tokenAnnotation.js":ax,"./assets/tokenArray.js":lx,"./assets/tokenBinary.js":sx,"./assets/tokenBoolean.js":ux,"./assets/tokenClass.js":cx,"./assets/tokenCompletionSuggester.js":px,"./assets/tokenConstant.js":fx,"./assets/tokenDate.js":dx,"./assets/tokenDenseVector.js":mx,"./assets/tokenElement.js":hx,"./assets/tokenEnum.js":gx,"./assets/tokenEnumMember.js":vx,"./assets/tokenEvent.js":yx,"./assets/tokenException.js":bx,"./assets/tokenField.js":wx,"./assets/tokenFile.js":Ox,"./assets/tokenFlattened.js":xx,"./assets/tokenFunction.js":_x,"./assets/tokenGeo.js":Sx,"./assets/tokenHistogram.js":jx,"./assets/tokenIP.js":Ix,"./assets/tokenInterface.js":kx,"./assets/tokenJoin.js":Px,"./assets/tokenKey.js":Ex,"./assets/tokenKeyword.js":Cx,"./assets/tokenMethod.js":Ax,"./assets/tokenMetricCounter.js":Mx,"./assets/tokenMetricGauge.js":Tx,"./assets/tokenModule.js":Rx,"./assets/tokenNamespace.js":zx,"./assets/tokenNested.js":Lx,"./assets/tokenNull.js":Dx,"./assets/tokenNumber.js":Nx,"./assets/tokenObject.js":Fx,"./assets/tokenOperator.js":Wx,"./assets/tokenPackage.js":Bx,"./assets/tokenParameter.js":Hx,"./assets/tokenPercolator.js":Vx,"./assets/tokenProperty.js":qx,"./assets/tokenRange.js":Ux,"./assets/tokenRankFeature.js":$x,"./assets/tokenRankFeatures.js":Jx,"./assets/tokenRepo.js":Gx,"./assets/tokenSearchType.js":Xx,"./assets/tokenShape.js":Kx,"./assets/tokenString.js":Yx,"./assets/tokenStruct.js":Qx,"./assets/tokenSymbol.js":Zx,"./assets/tokenTag.js":e9,"./assets/tokenText.js":t9,"./assets/tokenTokenCount.js":r9,"./assets/tokenVariable.js":n9,"./assets/training.js":o9,"./assets/trash.js":i9,"./assets/unfold.js":a9,"./assets/unlink.js":l9,"./assets/user.js":s9,"./assets/userAvatar.js":u9,"./assets/users.js":c9,"./assets/vector.js":p9,"./assets/videoPlayer.js":f9,"./assets/vis_area.js":d9,"./assets/vis_area_stacked.js":m9,"./assets/vis_bar_horizontal.js":h9,"./assets/vis_bar_horizontal_stacked.js":g9,"./assets/vis_bar_vertical.js":v9,"./assets/vis_bar_vertical_stacked.js":y9,"./assets/vis_gauge.js":b9,"./assets/vis_goal.js":w9,"./assets/vis_line.js":O9,"./assets/vis_map_coordinate.js":x9,"./assets/vis_map_region.js":_9,"./assets/vis_metric.js":S9,"./assets/vis_pie.js":j9,"./assets/vis_table.js":I9,"./assets/vis_tag_cloud.js":k9,"./assets/vis_text.js":P9,"./assets/vis_timelion.js":E9,"./assets/vis_vega.js":C9,"./assets/vis_visual_builder.js":A9,"./assets/wordWrap.js":M9,"./assets/wordWrapDisabled.js":T9,"./assets/wrench.js":R9,"./assets/accessibility":m5,"./assets/aggregate":h5,"./assets/alert":g5,"./assets/analyzeEvent":v5,"./assets/analyze_event":y5,"./assets/annotation":b5,"./assets/apm_trace":w5,"./assets/app_add_data":O5,"./assets/app_advanced_settings":x5,"./assets/app_agent":_5,"./assets/app_apm":S5,"./assets/app_app_search":j5,"./assets/app_auditbeat":I5,"./assets/app_canvas":k5,"./assets/app_cases":P5,"./assets/app_code":E5,"./assets/app_console":C5,"./assets/app_cross_cluster_replication":A5,"./assets/app_dashboard":M5,"./assets/app_devtools":T5,"./assets/app_discover":R5,"./assets/app_ems":z5,"./assets/app_filebeat":L5,"./assets/app_fleet":D5,"./assets/app_gis":N5,"./assets/app_graph":F5,"./assets/app_grok":W5,"./assets/app_heartbeat":B5,"./assets/app_index_management":H5,"./assets/app_index_pattern":V5,"./assets/app_index_rollup":q5,"./assets/app_lens":U5,"./assets/app_logs":$5,"./assets/app_management":J5,"./assets/app_metricbeat":G5,"./assets/app_metrics":X5,"./assets/app_ml":K5,"./assets/app_monitoring":Y5,"./assets/app_notebook":Q5,"./assets/app_packetbeat":Z5,"./assets/app_pipeline":e4,"./assets/app_recently_viewed":t4,"./assets/app_reporting":r4,"./assets/app_saved_objects":n4,"./assets/app_search_profiler":o4,"./assets/app_security":i4,"./assets/app_security_analytics":a4,"./assets/app_spaces":l4,"./assets/app_sql":s4,"./assets/app_timelion":u4,"./assets/app_upgrade_assistant":c4,"./assets/app_uptime":p4,"./assets/app_users_roles":f4,"./assets/app_visualize":d4,"./assets/app_watches":m4,"./assets/app_workplace_search":h4,"./assets/apps":g4,"./assets/arrowEnd":v4,"./assets/arrowStart":y4,"./assets/arrow_down":b4,"./assets/arrow_left":w4,"./assets/arrow_right":O4,"./assets/arrow_up":x4,"./assets/asterisk":_4,"./assets/beaker":S4,"./assets/bell":j4,"./assets/bellSlash":I4,"./assets/bolt":k4,"./assets/boxes_horizontal":P4,"./assets/boxes_vertical":E4,"./assets/branch":C4,"./assets/branchUser":A4,"./assets/broom":M4,"./assets/brush":T4,"./assets/bug":R4,"./assets/bullseye":z4,"./assets/calendar":L4,"./assets/check":D4,"./assets/checkInCircleFilled":N4,"./assets/cheer":F4,"./assets/clock":W4,"./assets/cloudDrizzle":B4,"./assets/cloudStormy":H4,"./assets/cloudSunny":V4,"./assets/cluster":q4,"./assets/color":U4,"./assets/compute":$4,"./assets/console":J4,"./assets/container":G4,"./assets/continuityAbove":X4,"./assets/continuityAboveBelow":K4,"./assets/continuityBelow":Y4,"./assets/continuityWithin":Q4,"./assets/controls_horizontal":Z4,"./assets/controls_vertical":e6,"./assets/copy":t6,"./assets/copy_clipboard":r6,"./assets/cross":n6,"./assets/crossInACircleFilled":o6,"./assets/crosshairs":i6,"./assets/currency":a6,"./assets/cut":l6,"./assets/database":s6,"./assets/desktop":u6,"./assets/document":c6,"./assets/documentEdit":p6,"./assets/documentation":f6,"./assets/documents":d6,"./assets/dot":m6,"./assets/doubleArrowLeft":h6,"./assets/doubleArrowRight":g6,"./assets/download":v6,"./assets/editorDistributeHorizontal":y6,"./assets/editorDistributeVertical":b6,"./assets/editorItemAlignBottom":w6,"./assets/editorItemAlignCenter":O6,"./assets/editorItemAlignLeft":x6,"./assets/editorItemAlignMiddle":_6,"./assets/editorItemAlignRight":S6,"./assets/editorItemAlignTop":j6,"./assets/editorPositionBottomLeft":I6,"./assets/editorPositionBottomRight":k6,"./assets/editorPositionTopLeft":P6,"./assets/editorPositionTopRight":E6,"./assets/editor_align_center":C6,"./assets/editor_align_left":A6,"./assets/editor_align_right":M6,"./assets/editor_bold":T6,"./assets/editor_checklist":R6,"./assets/editor_code_block":z6,"./assets/editor_comment":L6,"./assets/editor_heading":D6,"./assets/editor_italic":N6,"./assets/editor_link":F6,"./assets/editor_ordered_list":W6,"./assets/editor_redo":B6,"./assets/editor_strike":H6,"./assets/editor_table":V6,"./assets/editor_underline":q6,"./assets/editor_undo":U6,"./assets/editor_unordered_list":$6,"./assets/email":J6,"./assets/empty":G6,"./assets/eql":X6,"./assets/eraser":K6,"./assets/exit":Y6,"./assets/expand":Q6,"./assets/expandMini":Z6,"./assets/export":ew,"./assets/eye":tw,"./assets/eye_closed":rw,"./assets/face_happy":nw,"./assets/face_neutral":ow,"./assets/face_sad":iw,"./assets/filter":aw,"./assets/flag":lw,"./assets/fold":sw,"./assets/folder_check":uw,"./assets/folder_closed":cw,"./assets/folder_exclamation":pw,"./assets/folder_open":fw,"./assets/frameNext":dw,"./assets/framePrevious":mw,"./assets/fullScreenExit":hw,"./assets/full_screen":gw,"./assets/function":vw,"./assets/gear":yw,"./assets/glasses":bw,"./assets/globe":ww,"./assets/grab":Ow,"./assets/grab_horizontal":xw,"./assets/grid":_w,"./assets/heart":Sw,"./assets/heatmap":jw,"./assets/help":Iw,"./assets/home":kw,"./assets/iInCircle":Pw,"./assets/image":Ew,"./assets/import":Cw,"./assets/index_close":Aw,"./assets/index_edit":Mw,"./assets/index_flush":Tw,"./assets/index_mapping":Rw,"./assets/index_open":zw,"./assets/index_runtime":Lw,"./assets/index_settings":Dw,"./assets/inputOutput":Nw,"./assets/inspect":Fw,"./assets/invert":Ww,"./assets/ip":Bw,"./assets/keyboard":Hw,"./assets/kql_field":Vw,"./assets/kql_function":qw,"./assets/kql_operand":Uw,"./assets/kql_selector":$w,"./assets/kql_value":Jw,"./assets/kubernetesNode":Gw,"./assets/kubernetesPod":Xw,"./assets/layers":Kw,"./assets/lettering":Yw,"./assets/lineDashed":Qw,"./assets/lineDotted":Zw,"./assets/lineSolid":eO,"./assets/link":tO,"./assets/list":rO,"./assets/list_add":nO,"./assets/lock":oO,"./assets/lockOpen":iO,"./assets/logo_aerospike":aO,"./assets/logo_apache":lO,"./assets/logo_app_search":sO,"./assets/logo_aws":uO,"./assets/logo_aws_mono":cO,"./assets/logo_azure":pO,"./assets/logo_azure_mono":fO,"./assets/logo_beats":dO,"./assets/logo_business_analytics":mO,"./assets/logo_ceph":hO,"./assets/logo_cloud":gO,"./assets/logo_cloud_ece":vO,"./assets/logo_code":yO,"./assets/logo_codesandbox":bO,"./assets/logo_couchbase":wO,"./assets/logo_docker":OO,"./assets/logo_dropwizard":xO,"./assets/logo_elastic":_O,"./assets/logo_elastic_stack":SO,"./assets/logo_elasticsearch":jO,"./assets/logo_enterprise_search":IO,"./assets/logo_etcd":kO,"./assets/logo_gcp":PO,"./assets/logo_gcp_mono":EO,"./assets/logo_github":CO,"./assets/logo_gmail":AO,"./assets/logo_golang":MO,"./assets/logo_google_g":TO,"./assets/logo_haproxy":RO,"./assets/logo_ibm":zO,"./assets/logo_ibm_mono":LO,"./assets/logo_kafka":DO,"./assets/logo_kibana":NO,"./assets/logo_kubernetes":FO,"./assets/logo_logging":WO,"./assets/logo_logstash":BO,"./assets/logo_maps":HO,"./assets/logo_memcached":VO,"./assets/logo_metrics":qO,"./assets/logo_mongodb":UO,"./assets/logo_mysql":$O,"./assets/logo_nginx":JO,"./assets/logo_observability":GO,"./assets/logo_osquery":XO,"./assets/logo_php":KO,"./assets/logo_postgres":YO,"./assets/logo_prometheus":QO,"./assets/logo_rabbitmq":ZO,"./assets/logo_redis":e7,"./assets/logo_security":t7,"./assets/logo_site_search":r7,"./assets/logo_sketch":n7,"./assets/logo_slack":o7,"./assets/logo_uptime":i7,"./assets/logo_webhook":a7,"./assets/logo_windows":l7,"./assets/logo_workplace_search":s7,"./assets/logstash_filter":u7,"./assets/logstash_if":c7,"./assets/logstash_input":p7,"./assets/logstash_output":f7,"./assets/logstash_queue":d7,"./assets/magnet":m7,"./assets/magnifyWithExclamation":h7,"./assets/magnifyWithMinus":g7,"./assets/magnifyWithPlus":v7,"./assets/map_marker":y7,"./assets/memory":b7,"./assets/menu":w7,"./assets/menuDown":O7,"./assets/menuLeft":x7,"./assets/menuRight":_7,"./assets/menuUp":S7,"./assets/merge":j7,"./assets/minimize":I7,"./assets/minus":k7,"./assets/minus_in_circle":P7,"./assets/minus_in_circle_filled":E7,"./assets/ml_classification_job":C7,"./assets/ml_create_advanced_job":A7,"./assets/ml_create_multi_metric_job":M7,"./assets/ml_create_population_job":T7,"./assets/ml_create_single_metric_job":R7,"./assets/ml_data_visualizer":z7,"./assets/ml_outlier_detection_job":L7,"./assets/ml_regression_job":D7,"./assets/mobile":N7,"./assets/moon":F7,"./assets/namespace":W7,"./assets/nested":B7,"./assets/node":H7,"./assets/number":V7,"./assets/offline":q7,"./assets/online":U7,"./assets/package":$7,"./assets/pageSelect":J7,"./assets/pagesSelect":G7,"./assets/paint":X7,"./assets/paper_clip":K7,"./assets/partial":Y7,"./assets/pause":Q7,"./assets/payment":Z7,"./assets/pencil":e8,"./assets/percent":t8,"./assets/pin":r8,"./assets/pin_filled":n8,"./assets/play":o8,"./assets/playFilled":i8,"./assets/plus":a8,"./assets/plus_in_circle":l8,"./assets/plus_in_circle_filled":s8,"./assets/popout":u8,"./assets/push":c8,"./assets/question_in_circle":p8,"./assets/quote":f8,"./assets/refresh":d8,"./assets/reporter":m8,"./assets/return_key":h8,"./assets/save":g8,"./assets/scale":v8,"./assets/search":y8,"./assets/securitySignal":b8,"./assets/securitySignalDetected":w8,"./assets/securitySignalResolved":O8,"./assets/sessionViewer":x8,"./assets/shard":_8,"./assets/share":S8,"./assets/snowflake":j8,"./assets/sortLeft":I8,"./assets/sortRight":k8,"./assets/sort_down":P8,"./assets/sort_up":E8,"./assets/sortable":C8,"./assets/starPlusEmpty":A8,"./assets/starPlusFilled":M8,"./assets/star_empty":T8,"./assets/star_empty_space":R8,"./assets/star_filled":z8,"./assets/star_filled_space":L8,"./assets/star_minus_empty":D8,"./assets/star_minus_filled":N8,"./assets/stats":F8,"./assets/stop":W8,"./assets/stop_filled":B8,"./assets/stop_slash":H8,"./assets/storage":V8,"./assets/string":q8,"./assets/submodule":U8,"./assets/sun":$8,"./assets/swatch_input":J8,"./assets/symlink":G8,"./assets/tableOfContents":X8,"./assets/table_density_compact":K8,"./assets/table_density_expanded":Y8,"./assets/table_density_normal":Q8,"./assets/tag":Z8,"./assets/tear":ex,"./assets/temperature":tx,"./assets/timeRefresh":rx,"./assets/timeline":nx,"./assets/timeslider":ox,"./assets/tokenAlias":ix,"./assets/tokenAnnotation":ax,"./assets/tokenArray":lx,"./assets/tokenBinary":sx,"./assets/tokenBoolean":ux,"./assets/tokenClass":cx,"./assets/tokenCompletionSuggester":px,"./assets/tokenConstant":fx,"./assets/tokenDate":dx,"./assets/tokenDenseVector":mx,"./assets/tokenElement":hx,"./assets/tokenEnum":gx,"./assets/tokenEnumMember":vx,"./assets/tokenEvent":yx,"./assets/tokenException":bx,"./assets/tokenField":wx,"./assets/tokenFile":Ox,"./assets/tokenFlattened":xx,"./assets/tokenFunction":_x,"./assets/tokenGeo":Sx,"./assets/tokenHistogram":jx,"./assets/tokenIP":Ix,"./assets/tokenInterface":kx,"./assets/tokenJoin":Px,"./assets/tokenKey":Ex,"./assets/tokenKeyword":Cx,"./assets/tokenMethod":Ax,"./assets/tokenMetricCounter":Mx,"./assets/tokenMetricGauge":Tx,"./assets/tokenModule":Rx,"./assets/tokenNamespace":zx,"./assets/tokenNested":Lx,"./assets/tokenNull":Dx,"./assets/tokenNumber":Nx,"./assets/tokenObject":Fx,"./assets/tokenOperator":Wx,"./assets/tokenPackage":Bx,"./assets/tokenParameter":Hx,"./assets/tokenPercolator":Vx,"./assets/tokenProperty":qx,"./assets/tokenRange":Ux,"./assets/tokenRankFeature":$x,"./assets/tokenRankFeatures":Jx,"./assets/tokenRepo":Gx,"./assets/tokenSearchType":Xx,"./assets/tokenShape":Kx,"./assets/tokenString":Yx,"./assets/tokenStruct":Qx,"./assets/tokenSymbol":Zx,"./assets/tokenTag":e9,"./assets/tokenText":t9,"./assets/tokenTokenCount":r9,"./assets/tokenVariable":n9,"./assets/training":o9,"./assets/trash":i9,"./assets/unfold":a9,"./assets/unlink":l9,"./assets/user":s9,"./assets/userAvatar":u9,"./assets/users":c9,"./assets/vector":p9,"./assets/videoPlayer":f9,"./assets/vis_area":d9,"./assets/vis_area_stacked":m9,"./assets/vis_bar_horizontal":h9,"./assets/vis_bar_horizontal_stacked":g9,"./assets/vis_bar_vertical":v9,"./assets/vis_bar_vertical_stacked":y9,"./assets/vis_gauge":b9,"./assets/vis_goal":w9,"./assets/vis_line":O9,"./assets/vis_map_coordinate":x9,"./assets/vis_map_region":_9,"./assets/vis_metric":S9,"./assets/vis_pie":j9,"./assets/vis_table":I9,"./assets/vis_tag_cloud":k9,"./assets/vis_text":P9,"./assets/vis_timelion":E9,"./assets/vis_vega":C9,"./assets/vis_visual_builder":A9,"./assets/wordWrap":M9,"./assets/wordWrapDisabled":T9,"./assets/wrench":R9};function a4t(e){let t=i4t[e];return t[Symbol.toStringTag]||(t[Symbol.toStringTag]="Module"),Promise.resolve(t)}function NP(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?NP=function(n){return typeof n}:NP=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},NP(e)}var l4t=["type","size","color","className","tabIndex","title","onIconLoad","theme","style"];function BP(){return BP=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function c4t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function p4t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function v0e(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function HP(e){return HP=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},HP(e)}function WP(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var v4t=function(t){return typeof t!="string"?!1:t==="dataVisualizer"?!0:t.indexOf("data:")===0?!1:t.endsWith("App")||t.endsWith("Job")},y4t=Vt(LP);function KJ(e){return typeof e=="string"&&LP.hasOwnProperty(e)}function b4t(e){if(e!=null)return KJ(e)?Mv.hasOwnProperty(e)?Mv[e]:void 0:e}var w4t=Lr(),Mv={};var w0e=function(e){d4t(n,e);var t=m4t(n);function n(r){var o;p4t(this,n),o=t.call(this,r),WP(FP(o),"isMounted",!0),WP(FP(o),"loadIconComponent",function(f){if(Mv.hasOwnProperty(f)){o.setState({isLoading:!1,neededLoading:!1,icon:Mv[f]}),o.onIconLoad();return}a4t(`./assets/${LP[f]}`).then(function(h){var y=h.icon;Mv[f]=y,L9(function(){o.isMounted&&o.props.type===f&&o.setState({icon:y,iconTitle:f,isLoading:!1},o.onIconLoad)})})}),WP(FP(o),"onIconLoad",function(){var f=o.props.onIconLoad;f&&f()});var i=r.type,u=b4t(i);return o.state={icon:u,iconTitle:void 0,isLoading:!1,neededLoading:!1},o}return f4t(n,[{key:"componentDidMount",value:function(){var o=this.props.type;KJ(o)&&this.state.icon==null?(this.setState({neededLoading:!0,isLoading:!0}),this.loadIconComponent(o)):this.onIconLoad()}},{key:"componentDidUpdate",value:function(o){var i=this.props.type;i!==o.type&&(KJ(i)?(this.setState({neededLoading:Mv.hasOwnProperty(i),isLoading:!0}),this.loadIconComponent(i)):this.setState({icon:i,neededLoading:!0,isLoading:!1}))}},{key:"componentWillUnmount",value:function(){this.isMounted=!1}},{key:"render",value:function(){var o=this.props,i=o.type,u=o.size,f=u===void 0?"m":u,h=o.color,y=o.className,O=o.tabIndex,S=o.title,I=o.onIconLoad,A=o.theme,C=o.style,M=u4t(o,l4t),W=this.state,R=W.isLoading,B=W.neededLoading,Y=W.iconTitle,X=!R&&B,ae=h&&!GJ(h),Z=ae?s4t({color:h},C):C,K=v4t(i),de=h&&h!=="default",se=i==="logoElastic"&&(h==="ghost"||h==="text"),Se=(0,b0e.default)("euiIcon",y),Oe=h0e(A),be=[Oe.euiIcon,Oe[f],h&&GJ(h)&&Oe[h],ae&&Oe.customColor,se&&Oe.logoElasticOutline,K&&!de&&Oe.app,R&&Oe.isLoading,!R&&B&&Oe.isLoaded],Ue=this.state.icon||zP,We=O==null||O===-1?"false":"true";if(typeof Ue=="string")return a("img",BP({alt:S||"",src:Ue,className:Se,css:be,tabIndex:O},M));var Ge=Ue,Qe=Ue===zP||!(this.props["aria-label"]||this.props["aria-labelledby"]||this.props.title),ot=Qe&&{"aria-hidden":!0},at;return!this.props["aria-label"]&&!this.props["aria-labelledby"]&&S&&(at={titleId:w4t()}),a(Ge,BP({className:Se,style:Z,css:be,tabIndex:O,focusable:We,role:"img",title:S,"data-icon-type":Y,"data-is-loaded":X||void 0,"data-is-loading":R||void 0},at,M,ot))}}]),n}(y0e.PureComponent);w0e.propTypes={className:da.default.string,"aria-label":da.default.string,"data-test-subj":da.default.string,type:da.default.oneOfType([da.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,da.default.string.isRequired,da.default.elementType.isRequired]).isRequired,color:da.default.oneOfType([da.default.string.isRequired,da.default.any.isRequired]),size:da.default.any,title:da.default.string,titleId:da.default.string,"aria-labelledby":da.default.string,onIconLoad:da.default.func};var ar=TN(w0e);var Tv=P(L());var O0e=P(L()),Sp=P(dt());var VP=(0,O0e.createContext)({}),O4t=VP.Provider,YJ=VP.Consumer,x0e=function(t){var n=t.i18n,r=n===void 0?{}:n,o=t.children;return a(O4t,{value:r},o)};x0e.propTypes={i18n:Sp.default.shape({mapping:Sp.default.shape({}),mappingFunc:Sp.default.func,render:Sp.default.func,formatNumber:Sp.default.func,formatDateTime:Sp.default.func,locale:Sp.default.string}).isRequired,children:Sp.default.node.isRequired};var M0e=P(L());var T0e=P(C0e());function $P(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?$P=function(n){return typeof n}:$P=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},$P(e)}function M4t(e){return bP(e)||za(e)||wP(e)||sF(e)}function A0e(e){return e?$P(e)==="object"&&e.hasOwnProperty("propName"):!1}function R0e(e,t,n){var r=[],o;function i(C){o===void 0?o=C:typeof o=="string"?o=o+C:A0e(o)&&(o.propName=o.propName+C)}function u(C){C!==void 0&&((0,T0e.isElement)(C)?r.push((0,M0e.cloneElement)(C,{key:r.length})):A0e(C)||(n!==void 0&&typeof C=="string"&&(C=n(C)),r.push(C)))}for(var f=!1,h=0;he.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function d4t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function m4t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function b0e(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Gk(e){return Gk=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},Gk(e)}function $k(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var w4t=function(t){return typeof t!="string"?!1:t==="dataVisualizer"?!0:t.indexOf("data:")===0?!1:t.endsWith("App")||t.endsWith("Job")},O4t=Ht(Hk);function tG(e){return typeof e=="string"&&Hk.hasOwnProperty(e)}function x4t(e){if(e!=null)return tG(e)?Mv.hasOwnProperty(e)?Mv[e]:void 0:e}var _4t=Lr(),Mv={};var x0e=function(e){g4t(n,e);var t=v4t(n);function n(r){var o;m4t(this,n),o=t.call(this,r),$k(Uk(o),"isMounted",!0),$k(Uk(o),"loadIconComponent",function(f){if(Mv.hasOwnProperty(f)){o.setState({isLoading:!1,neededLoading:!1,icon:Mv[f]}),o.onIconLoad();return}u4t(`./assets/${Hk[f]}`).then(function(h){var y=h.icon;Mv[f]=y,N9(function(){o.isMounted&&o.props.type===f&&o.setState({icon:y,iconTitle:f,isLoading:!1},o.onIconLoad)})})}),$k(Uk(o),"onIconLoad",function(){var f=o.props.onIconLoad;f&&f()});var i=r.type,u=x4t(i);return o.state={icon:u,iconTitle:void 0,isLoading:!1,neededLoading:!1},o}return h4t(n,[{key:"componentDidMount",value:function(){var o=this.props.type;tG(o)&&this.state.icon==null?(this.setState({neededLoading:!0,isLoading:!0}),this.loadIconComponent(o)):this.onIconLoad()}},{key:"componentDidUpdate",value:function(o){var i=this.props.type;i!==o.type&&(tG(i)?(this.setState({neededLoading:Mv.hasOwnProperty(i),isLoading:!0}),this.loadIconComponent(i)):this.setState({icon:i,neededLoading:!0,isLoading:!1}))}},{key:"componentWillUnmount",value:function(){this.isMounted=!1}},{key:"render",value:function(){var o=this.props,i=o.type,u=o.size,f=u===void 0?"m":u,h=o.color,y=o.className,O=o.tabIndex,S=o.title,I=o.onIconLoad,A=o.theme,C=o.style,M=f4t(o,c4t),F=this.state,R=F.isLoading,B=F.neededLoading,Y=F.iconTitle,X=!R&&B,le=h&&!ZJ(h),Z=le?p4t({color:h},C):C,K=w4t(i),de=h&&h!=="default",se=i==="logoElastic"&&(h==="ghost"||h==="text"),_e=(0,O0e.default)("euiIcon",y),be=v0e(A),Pe=[be.euiIcon,be[f],h&&ZJ(h)&&be[h],le&&be.customColor,se&&be.logoElasticOutline,K&&!de&&be.app,R&&be.isLoading,!R&&B&&be.isLoaded],Ue=this.state.icon||Bk,Le=O==null||O===-1?"false":"true";if(typeof Ue=="string")return a("img",Jk({alt:S||"",src:Ue,className:_e,css:Pe,tabIndex:O},M));var Ge=Ue,Ke=Ue===Bk||!(this.props["aria-label"]||this.props["aria-labelledby"]||this.props.title),rt=Ke&&{"aria-hidden":!0},ot;return!this.props["aria-label"]&&!this.props["aria-labelledby"]&&S&&(ot={titleId:_4t()}),a(Ge,Jk({className:_e,style:Z,css:Pe,tabIndex:O,focusable:Le,role:"img",title:S,"data-icon-type":Y,"data-is-loaded":X||void 0,"data-is-loading":R||void 0},ot,M,rt))}}]),n}(w0e.PureComponent);x0e.propTypes={className:fa.default.string,"aria-label":fa.default.string,"data-test-subj":fa.default.string,type:fa.default.oneOfType([fa.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,fa.default.string.isRequired,fa.default.elementType.isRequired]).isRequired,color:fa.default.oneOfType([fa.default.string.isRequired,fa.default.any.isRequired]),size:fa.default.any,title:fa.default.string,titleId:fa.default.string,"aria-labelledby":fa.default.string,onIconLoad:fa.default.func};var ir=NN(x0e);var Tv=k(L());var _0e=k(L()),Ip=k(mt());var Xk=(0,_0e.createContext)({}),S4t=Xk.Provider,rG=Xk.Consumer,S0e=function(t){var n=t.i18n,r=n===void 0?{}:n,o=t.children;return a(S4t,{value:r},o)};S0e.propTypes={i18n:Ip.default.shape({mapping:Ip.default.shape({}),mappingFunc:Ip.default.func,render:Ip.default.func,formatNumber:Ip.default.func,formatDateTime:Ip.default.func,locale:Ip.default.string}).isRequired,children:Ip.default.node.isRequired};var R0e=k(L());var z0e=k(M0e());function Qk(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?Qk=function(n){return typeof n}:Qk=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},Qk(e)}function z4t(e){return jk(e)||Ra(e)||Ik(e)||dF(e)}function T0e(e){return e?Qk(e)==="object"&&e.hasOwnProperty("propName"):!1}function L0e(e,t,n){var r=[],o;function i(C){o===void 0?o=C:typeof o=="string"?o=o+C:T0e(o)&&(o.propName=o.propName+C)}function u(C){C!==void 0&&((0,z0e.isElement)(C)?r.push((0,R0e.cloneElement)(C,{key:r.length})):T0e(C)||(n!==void 0&&typeof C=="string"&&(C=n(C)),r.push(C)))}for(var f=!1,h=0;he.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function U4t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var $r=function(t){var n=t.size,r=n===void 0?"m":n,o=t.className,i=t["aria-label"],u=t.color,f=q4t(t,V4t),h=en(),y=N0e(h,u),O=[y.euiLoadingSpinner,y[r]],S=(0,F0e.default)("euiLoadingSpinner",o),I=L0e();return a("span",ZJ({className:S,css:O,role:"progressbar","aria-label":i||I},f))};$r.propTypes={className:Ed.default.string,"aria-label":Ed.default.string,"data-test-subj":Ed.default.string,size:Ed.default.any,color:Ed.default.shape({border:Ed.default.any,highlight:Ed.default.any})};var $4t=["children","textProps","isLoading","iconType","iconSize","iconSide"];function eG(){return eG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function G4t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var B0e={left:null,right:"euiButtonContent--iconRight"},ear=Vt(B0e),X9=function(t){var n=t.children,r=t.textProps,o=t.isLoading,i=o===void 0?!1:o,u=t.iconType,f=t.iconSize,h=f===void 0?"m":f,y=t.iconSide,O=y===void 0?"left":y,S=J4t(t,$4t),I;i?I=a($r,{className:"euiButtonContent__spinner",size:h}):u&&(I=a(ar,{className:"euiButtonContent__icon",type:u,size:h,color:"inherit"}));var A=(0,W0e.default)("euiButtonContent",O?B0e[O]:null,S&&S.className);return a("span",eG({},S,{className:A}),I,a("span",r,n))};X9.propTypes={iconType:Hi.default.oneOfType([Hi.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,Hi.default.string.isRequired,Hi.default.elementType.isRequired]),iconSide:Hi.default.oneOf(["left","right"]),isLoading:Hi.default.bool,textProps:Hi.default.shape({className:Hi.default.string,"aria-label":Hi.default.string,"data-test-subj":Hi.default.string,ref:Hi.default.any,"data-text":Hi.default.string}),iconSize:Hi.default.oneOf(["s","m"]),className:Hi.default.string,"aria-label":Hi.default.string,"data-test-subj":Hi.default.string};var t1e=P(e1e());function ma(e){var t=new t1e.default(e);return t.protocol!=="javascript:"}var a6t=["isDisabled","disabled","href","target","rel","type","buttonRef"],l6t=["element","baseClassName","children","className","iconType","iconSide","color","size","fill","isDisabled","isLoading","isSelected","contentProps","textProps","fullWidth","minWidth","style"];function YP(){return YP=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function u6t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var KP={primary:"--primary",accent:"--accent",success:"--success",warning:"--warning",danger:"--danger",ghost:"--ghost",text:"--text"},c6t=Vt(KP),oG={s:"--small",m:null},par=Vt(oG),K9=function(t){var n=t.isDisabled,r=t.disabled,o=t.href,i=t.target,u=t.rel,f=t.type,h=f===void 0?"button":f,y=t.buttonRef,O=n1e(t,a6t),S=!o||ma(o),I=r||!S,A=n||!S,C=O.isLoading||A||I,M=o&&!A?"a":"button",W={};W=jp(jp({},W),{},{isDisabled:C}),M==="button"&&(W=jp(jp({},W),{},{disabled:C}));var R={};return o&&!C?(R.href=o,R.rel=ni({href:o,target:i,rel:u}),R.target=i):R.type=h,a(iG,YP({element:M,baseClassName:"euiButton",ref:y},W,R,O))};K9.propTypes={href:$t.default.string,onClick:$t.default.func,children:$t.default.node,fill:$t.default.bool,color:$t.default.oneOf(["primary","accent","success","warning","danger","ghost","text"]),size:$t.default.oneOf(["s","m"]),isDisabled:$t.default.bool,isSelected:$t.default.bool,fullWidth:$t.default.bool,minWidth:$t.default.any,isLoading:$t.default.bool,contentProps:$t.default.any,style:$t.default.any,iconType:$t.default.oneOfType([$t.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,$t.default.string.isRequired,$t.default.elementType.isRequired]),iconSide:$t.default.oneOf(["left","right"]),textProps:$t.default.shape({className:$t.default.string,"aria-label":$t.default.string,"data-test-subj":$t.default.string,ref:$t.default.any,"data-text":$t.default.string}),iconSize:$t.default.oneOf(["s","m"]),className:$t.default.string,"aria-label":$t.default.string,"data-test-subj":$t.default.string,buttonRef:$t.default.any};K9.displayName="EuiButton";var iG=(0,QP.forwardRef)(function(e,t){var n=e.element,r=n===void 0?"button":n,o=e.baseClassName,i=e.children,u=e.className,f=e.iconType,h=e.iconSide,y=h===void 0?"left":h,O=e.color,S=O===void 0?"primary":O,I=e.size,A=I===void 0?"m":I,C=e.fill,M=C===void 0?!1:C,W=e.isDisabled,R=e.isLoading,B=e.isSelected,Y=e.contentProps,X=e.textProps,ae=e.fullWidth,Z=e.minWidth,K=e.style,de=n1e(e,l6t),se=R||W,Se=(0,XP.default)(o,S&&KP[S]?"".concat(o).concat(KP[S]):"".concat(o).concat(KP.primary),A&&oG[A]?"".concat(o).concat(oG[A]):null,M&&"".concat(o,"--fill"),ae&&"".concat(o,"--fullWidth"),se&&"".concat(o,"-isDisabled"),u),Oe=(0,XP.default)("euiButton__content",Y&&Y.className),be=(0,XP.default)("euiButton__text",X&&X.className),Ue=a(X9,YP({isLoading:R,iconType:f,iconSide:y,textProps:jp(jp({},X),{},{className:be})},Y,{className:Oe}),i),We=K;return(Z!==void 0||Z!==null)&&(We=jp(jp({},We),{},{minWidth:Z})),QP.default.createElement(r,jp({className:Se,style:We,disabled:r==="button"&&se,"aria-pressed":r==="button"?B:void 0,ref:t},de),Ue)});iG.propTypes={children:$t.default.node,fill:$t.default.bool,color:$t.default.oneOf(["primary","accent","success","warning","danger","ghost","text"]),size:$t.default.oneOf(["s","m"]),isDisabled:$t.default.bool,isSelected:$t.default.bool,fullWidth:$t.default.bool,minWidth:$t.default.any,isLoading:$t.default.bool,contentProps:$t.default.any,style:$t.default.any,iconType:$t.default.oneOfType([$t.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,$t.default.string.isRequired,$t.default.elementType.isRequired]),iconSide:$t.default.oneOf(["left","right"]),textProps:$t.default.shape({className:$t.default.string,"aria-label":$t.default.string,"data-test-subj":$t.default.string,ref:$t.default.any,"data-text":$t.default.string}),iconSize:$t.default.oneOf(["s","m"]),className:$t.default.string,"aria-label":$t.default.string,"data-test-subj":$t.default.string,element:$t.default.oneOf(["a","button","span","label"]).isRequired,baseClassName:$t.default.string.isRequired};iG.displayName="EuiButtonDisplay";var iE=P(L());var i1e=P(L());function ZP(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?ZP=function(n){return typeof n}:ZP=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},ZP(e)}function p6t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o1e(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function eE(e){return eE=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},eE(e)}function Y9(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var tE=function(e){d6t(n,e);var t=m6t(n);function n(){var r;p6t(this,n);for(var o=arguments.length,i=new Array(o),u=0;u"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function oE(e){return oE=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},oE(e)}function rE(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var x6t=typeof window<"u"&&typeof window.ResizeObserver<"u",B1=function(e){y6t(n,e);var t=b6t(n);function n(){var r;v6t(this,n);for(var o=arguments.length,i=new Array(o),u=0;u=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function G4t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var $r=function(t){var n=t.size,r=n===void 0?"m":n,o=t.className,i=t["aria-label"],u=t.color,f=J4t(t,$4t),h=en(),y=W0e(h,u),O=[y.euiLoadingSpinner,y[r]],S=(0,B0e.default)("euiLoadingSpinner",o),I=N0e();return a("span",oG({className:S,css:O,role:"progressbar","aria-label":i||I},f))};$r.propTypes={className:Cd.default.string,"aria-label":Cd.default.string,"data-test-subj":Cd.default.string,size:Cd.default.any,color:Cd.default.shape({border:Cd.default.any,highlight:Cd.default.any})};var X4t=["children","textProps","isLoading","iconType","iconSize","iconSide"];function iG(){return iG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Y4t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var V0e={left:null,right:"euiButtonContent--iconRight"},aar=Ht(V0e),Y9=function(t){var n=t.children,r=t.textProps,o=t.isLoading,i=o===void 0?!1:o,u=t.iconType,f=t.iconSize,h=f===void 0?"m":f,y=t.iconSide,O=y===void 0?"left":y,S=K4t(t,X4t),I;i?I=a($r,{className:"euiButtonContent__spinner",size:h}):u&&(I=a(ir,{className:"euiButtonContent__icon",type:u,size:h,color:"inherit"}));var A=(0,H0e.default)("euiButtonContent",O?V0e[O]:null,S&&S.className);return a("span",iG({},S,{className:A}),I,a("span",r,n))};Y9.propTypes={iconType:Bi.default.oneOfType([Bi.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,Bi.default.string.isRequired,Bi.default.elementType.isRequired]),iconSide:Bi.default.oneOf(["left","right"]),isLoading:Bi.default.bool,textProps:Bi.default.shape({className:Bi.default.string,"aria-label":Bi.default.string,"data-test-subj":Bi.default.string,ref:Bi.default.any,"data-text":Bi.default.string}),iconSize:Bi.default.oneOf(["s","m"]),className:Bi.default.string,"aria-label":Bi.default.string,"data-test-subj":Bi.default.string};var n1e=k(r1e());function da(e){var t=new n1e.default(e);return t.protocol!=="javascript:"}var u6t=["isDisabled","disabled","href","target","rel","type","buttonRef"],c6t=["element","baseClassName","children","className","iconType","iconSide","color","size","fill","isDisabled","isLoading","isSelected","contentProps","textProps","fullWidth","minWidth","style"];function nE(){return nE=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function f6t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var rE={primary:"--primary",accent:"--accent",success:"--success",warning:"--warning",danger:"--danger",ghost:"--ghost",text:"--text"},d6t=Ht(rE),uG={s:"--small",m:null},yar=Ht(uG),Q9=function(t){var n=t.isDisabled,r=t.disabled,o=t.href,i=t.target,u=t.rel,f=t.type,h=f===void 0?"button":f,y=t.buttonRef,O=i1e(t,u6t),S=!o||da(o),I=r||!S,A=n||!S,C=O.isLoading||A||I,M=o&&!A?"a":"button",F={};F=Pp(Pp({},F),{},{isDisabled:C}),M==="button"&&(F=Pp(Pp({},F),{},{disabled:C}));var R={};return o&&!C?(R.href=o,R.rel=ni({href:o,target:i,rel:u}),R.target=i):R.type=h,a(cG,nE({element:M,baseClassName:"euiButton",ref:y},F,R,O))};Q9.propTypes={href:Ut.default.string,onClick:Ut.default.func,children:Ut.default.node,fill:Ut.default.bool,color:Ut.default.oneOf(["primary","accent","success","warning","danger","ghost","text"]),size:Ut.default.oneOf(["s","m"]),isDisabled:Ut.default.bool,isSelected:Ut.default.bool,fullWidth:Ut.default.bool,minWidth:Ut.default.any,isLoading:Ut.default.bool,contentProps:Ut.default.any,style:Ut.default.any,iconType:Ut.default.oneOfType([Ut.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,Ut.default.string.isRequired,Ut.default.elementType.isRequired]),iconSide:Ut.default.oneOf(["left","right"]),textProps:Ut.default.shape({className:Ut.default.string,"aria-label":Ut.default.string,"data-test-subj":Ut.default.string,ref:Ut.default.any,"data-text":Ut.default.string}),iconSize:Ut.default.oneOf(["s","m"]),className:Ut.default.string,"aria-label":Ut.default.string,"data-test-subj":Ut.default.string,buttonRef:Ut.default.any};Q9.displayName="EuiButton";var cG=(0,oE.forwardRef)(function(e,t){var n=e.element,r=n===void 0?"button":n,o=e.baseClassName,i=e.children,u=e.className,f=e.iconType,h=e.iconSide,y=h===void 0?"left":h,O=e.color,S=O===void 0?"primary":O,I=e.size,A=I===void 0?"m":I,C=e.fill,M=C===void 0?!1:C,F=e.isDisabled,R=e.isLoading,B=e.isSelected,Y=e.contentProps,X=e.textProps,le=e.fullWidth,Z=e.minWidth,K=e.style,de=i1e(e,c6t),se=R||F,_e=(0,tE.default)(o,S&&rE[S]?"".concat(o).concat(rE[S]):"".concat(o).concat(rE.primary),A&&uG[A]?"".concat(o).concat(uG[A]):null,M&&"".concat(o,"--fill"),le&&"".concat(o,"--fullWidth"),se&&"".concat(o,"-isDisabled"),u),be=(0,tE.default)("euiButton__content",Y&&Y.className),Pe=(0,tE.default)("euiButton__text",X&&X.className),Ue=a(Y9,nE({isLoading:R,iconType:f,iconSide:y,textProps:Pp(Pp({},X),{},{className:Pe})},Y,{className:be}),i),Le=K;return(Z!==void 0||Z!==null)&&(Le=Pp(Pp({},Le),{},{minWidth:Z})),oE.default.createElement(r,Pp({className:_e,style:Le,disabled:r==="button"&&se,"aria-pressed":r==="button"?B:void 0,ref:t},de),Ue)});cG.propTypes={children:Ut.default.node,fill:Ut.default.bool,color:Ut.default.oneOf(["primary","accent","success","warning","danger","ghost","text"]),size:Ut.default.oneOf(["s","m"]),isDisabled:Ut.default.bool,isSelected:Ut.default.bool,fullWidth:Ut.default.bool,minWidth:Ut.default.any,isLoading:Ut.default.bool,contentProps:Ut.default.any,style:Ut.default.any,iconType:Ut.default.oneOfType([Ut.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,Ut.default.string.isRequired,Ut.default.elementType.isRequired]),iconSide:Ut.default.oneOf(["left","right"]),textProps:Ut.default.shape({className:Ut.default.string,"aria-label":Ut.default.string,"data-test-subj":Ut.default.string,ref:Ut.default.any,"data-text":Ut.default.string}),iconSize:Ut.default.oneOf(["s","m"]),className:Ut.default.string,"aria-label":Ut.default.string,"data-test-subj":Ut.default.string,element:Ut.default.oneOf(["a","button","span","label"]).isRequired,baseClassName:Ut.default.string.isRequired};cG.displayName="EuiButtonDisplay";var pE=k(L());var l1e=k(L());function iE(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?iE=function(n){return typeof n}:iE=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},iE(e)}function m6t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a1e(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function aE(e){return aE=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},aE(e)}function Z9(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var lE=function(e){g6t(n,e);var t=v6t(n);function n(){var r;m6t(this,n);for(var o=arguments.length,i=new Array(o),u=0;u"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function cE(e){return cE=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},cE(e)}function sE(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var j6t=typeof window<"u"&&typeof window.ResizeObserver<"u",V1=function(e){O6t(n,e);var t=x6t(n);function n(){var r;w6t(this,n);for(var o=arguments.length,i=new Array(o),u=0;u1&&arguments[1]!==void 0?arguments[1]:"m",r=arguments.length>2?arguments[2]:void 0,o=t.euiTheme,i={xxxs:"xs",xxs:"s",xs:"m",s:"l",m:"xl",l:"xxl"};return s1e(s1e({},lc(t,i[n],r)),{},{fontWeight:o.font.weight[o.font.title.weight],color:o.colors.title})};var P6t={name:"1x2qsb1-uppercase",styles:"text-transform:uppercase;label:uppercase;"},u1e=function(t){return{euiTitle:Ne(c0e()," &+&{margin-top:",t.euiTheme.size.l,";};label:euiTitle;"),uppercase:P6t,xxxs:Ne(gi(t,"xxxs"),";;label:xxxs;"),xxs:Ne(gi(t,"xxs"),";;label:xxs;"),xs:Ne(gi(t,"xs"),";;label:xs;"),s:Ne(gi(t,"s"),";;label:s;"),m:Ne(gi(t,"m"),";;label:m;"),l:Ne(gi(t,"l"),";;label:l;")}};var E6t="max(64ch, 75%)",C6t=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;return{color:n?"inherit":t.colors.text,fontWeight:t.font.weight.regular}},aE=function(t,n){var r=lc(t,"m",n),o=r.fontSize,i=r.lineHeight,u=t.euiTheme,f=n.measurement,h=n.customScale,y=f==="em"?"".concat(i,"em"):i,O={h1:gi(t,"l",n),h2:gi(t,"m",n),h3:gi(t,"s",n),h4:gi(t,"xs",n),h5:gi(t,"xxs",n),h6:gi(t,"xxxs",n)},S=h==="xxxs"?"xxs":h||"m",I="".concat(parseFloat(u.size[S])*2,"px"),A=u.size[S];return` + `)},E6t={name:"9njbi5-disabled",styles:"font-weight:inherit;&:hover{cursor:auto;}&:hover,&:focus,&:target{text-decoration:none;};label:disabled;"},s1e=function(t){var n=t.euiTheme;return{euiLink:Fe(dG(n)," user-select:text;&[target='_blank']{position:relative;};label:euiLink;"),disabled:E6t,primary:Fe(Ad(n.colors.primaryText),";label:primary;"),subdued:Fe(Ad(n.colors.subduedText),";label:subdued;"),success:Fe(Ad(n.colors.successText),";label:success;"),accent:Fe(Ad(n.colors.accentText),";label:accent;"),danger:Fe(Ad(n.colors.dangerText),";label:danger;"),warning:Fe(Ad(n.colors.warningText),";label:warning;"),ghost:Fe(Ad(n.colors.ghost),";label:ghost;"),text:Fe(Ad(n.colors.text),";label:text;"),euiLink__screenReaderText:Fe(Kt("left","0px"),";;label:euiLink__screenReaderText;"),euiLink__externalIcon:Fe(Kt("margin-left",n.size.xs),";;label:euiLink__externalIcon;")}};function u1e(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function c1e(e){for(var t=1;t1&&arguments[1]!==void 0?arguments[1]:"m",r=arguments.length>2?arguments[2]:void 0,o=t.euiTheme,i={xxxs:"xs",xxs:"s",xs:"m",s:"l",m:"xl",l:"xxl"};return c1e(c1e({},uc(t,i[n],r)),{},{fontWeight:o.font.weight[o.font.title.weight],color:o.colors.title})};var A6t={name:"1x2qsb1-uppercase",styles:"text-transform:uppercase;label:uppercase;"},p1e=function(t){return{euiTitle:Fe(f0e()," &+&{margin-top:",t.euiTheme.size.l,";};label:euiTitle;"),uppercase:A6t,xxxs:Fe(yi(t,"xxxs"),";;label:xxxs;"),xxs:Fe(yi(t,"xxs"),";;label:xxs;"),xs:Fe(yi(t,"xs"),";;label:xs;"),s:Fe(yi(t,"s"),";;label:s;"),m:Fe(yi(t,"m"),";;label:m;"),l:Fe(yi(t,"l"),";;label:l;")}};var M6t="max(64ch, 75%)",T6t=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;return{color:n?"inherit":t.colors.text,fontWeight:t.font.weight.regular}},fE=function(t,n){var r=uc(t,"m",n),o=r.fontSize,i=r.lineHeight,u=t.euiTheme,f=n.measurement,h=n.customScale,y=f==="em"?"".concat(i,"em"):i,O={h1:yi(t,"l",n),h2:yi(t,"m",n),h3:yi(t,"s",n),h4:yi(t,"xs",n),h5:yi(t,"xxs",n),h6:yi(t,"xxxs",n)},S=h==="xxxs"?"xxs":h||"m",I="".concat(parseFloat(u.size[S])*2,"px"),A=u.size[S];return` font-size: `.concat(o,`; line-height: `).concat(i,`; @@ -248,7 +248,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho line-height: `).concat(O.h1.lineHeight,`; } h1:not(:last-child) { - `).concat(Yt("margin-bottom",A),` + `).concat(Kt("margin-bottom",A),` } h2 { @@ -256,11 +256,11 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho line-height: `).concat(O.h2.lineHeight,`; &:not(:first-child) { - `).concat(Yt("margin-top",I),` + `).concat(Kt("margin-top",I),` } &:not(:last-child) { - `).concat(Yt("margin-bottom",A),` + `).concat(Kt("margin-bottom",A),` } } @@ -269,11 +269,11 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho line-height: `).concat(O.h3.lineHeight,`; &:not(:first-child) { - `).concat(Yt("margin-top",I),` + `).concat(Kt("margin-top",I),` } &:not(:last-child) { - `).concat(Yt("margin-bottom",A),` + `).concat(Kt("margin-bottom",A),` } } @@ -282,11 +282,11 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho line-height: `).concat(O.h4.lineHeight,`; &:not(:first-child) { - `).concat(Yt("margin-top",I),` + `).concat(Kt("margin-top",I),` } &:not(:last-child) { - `).concat(Yt("margin-bottom",A),` + `).concat(Kt("margin-bottom",A),` } } @@ -295,11 +295,11 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho line-height: `).concat(O.h5.lineHeight,`; &:not(:first-child) { - `).concat(Yt("margin-top",I),` + `).concat(Kt("margin-top",I),` } &:not(:last-child) { - `).concat(Yt("margin-bottom",A),` + `).concat(Kt("margin-bottom",A),` } } @@ -308,11 +308,11 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho line-height: `).concat(O.h6.lineHeight,`; &:not(:first-child) { - `).concat(Yt("margin-top",I),` + `).concat(Kt("margin-top",I),` } &:not(:last-child) { - `).concat(Yt("margin-bottom",A),` + `).concat(Kt("margin-bottom",A),` } } @@ -323,12 +323,12 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho blockquote, img, pre { - `).concat(Yt("margin-bottom",y),` + `).concat(Kt("margin-bottom",y),` } ul, ol { - `).concat(Yt("margin-left",y),` + `).concat(Kt("margin-left",y),` } blockquote { @@ -337,7 +337,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho } dd + dt { - `).concat(Yt("margin-top",o),` + `).concat(Kt("margin-top",o),` } dt, @@ -347,12 +347,12 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho } .eui-definitionListReverse dt { - font-size: `).concat(lc(t,"xs",n).fontSize,`; + font-size: `).concat(uc(t,"xs",n).fontSize,`; color: `).concat(u.colors.text,`; } small { - font-size: `).concat(lc(t,"s",n).fontSize,`; + font-size: `).concat(uc(t,"s",n).fontSize,`; } pre:not(.euiCodeBlock__pre) { @@ -364,55 +364,55 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho } `).concat(h==="m"?` kbd { - `.concat(Yt("padding-bottom",u.size.xs),` + `.concat(Kt("padding-bottom",u.size.xs),` // ensures when only one character the shape looks like a square - `).concat(Yt("min-width",u.size.l),` - `).concat(xp("center"),` + `).concat(Kt("min-width",u.size.l),` + `).concat(Sp("center"),` } kbd::after { content: ''; - `).concat(Yt("border-bottom","".concat(u.border.width.thin," solid ").concat(u.colors.text)),` + `).concat(Kt("border-bottom","".concat(u.border.width.thin," solid ").concat(u.colors.text)),` position: absolute; - `).concat(Yt("bottom",u.size.xxs),` - `).concat(Yt("left",0),` - `).concat(Yt("width","100%"),` + `).concat(Kt("bottom",u.size.xxs),` + `).concat(Kt("left",0),` + `).concat(Kt("width","100%"),` }`):"",` - `)},c1e=function(t){var n=t.euiTheme;return{euiText:Ne(C6t(n,!0),";clear:both;a:not([class]){",sG(n),";}img{display:block;",Yt("max-width","100%"),";}ul{list-style:disc;}ol{list-style:decimal;}blockquote:not(.euiMarkdownFormat__blockquote){position:relative;",xp("center")," ",Yt("margin-horizontal","auto")," font-family:",n.font.familySerif,";font-style:italic;letter-spacing:normal;p:last-child{",Yt("margin-bottom","0"),";}&:before,&:after{position:absolute;content:'';",Yt("height",n.border.width.thick)," ",Yt("width","50%")," ",Yt("left","25%")," ",Yt("right","25%")," background:",n.colors.darkShade,";}&:before{",Yt("top","0"),";}&:after{",Yt("bottom","0"),";}}h1{",gi(t,"l"),";}h2{",gi(t,"m"),";}h3{",gi(t,"s"),";}h4,dt{",gi(t,"xs"),";}h5{",gi(t,"xxs"),";}h6{",gi(t,"xxxs")," text-transform:uppercase;}h1,h2,h3,h4,h5,h6,dt{color:inherit;}pre:not(.euiCodeBlock__pre){white-space:pre-wrap;background:",D9(t,"subdued"),";color:",n.colors.text,";}pre:not(.euiCodeBlock__pre),pre:not(.euiCodeBlock__pre) code{display:block;}>:last-child{",Yt("margin-bottom","0 !important"),";}kbd{position:relative;display:inline-block;",Yt("padding-vertical",n.size.xxs)," ",Yt("padding-horizontal",n.size.xs)," line-height:1;border:",n.border.width.thin," solid ",n.colors.text,";border-radius:calc(",n.border.radius.small," / 2);};label:euiText;"),constrainedWidth:Ne(Yt("max-width",E6t),";;label:constrainedWidth;"),m:Ne(aE(t,{measurement:"rem",customScale:"m"}),";;label:m;"),s:Ne(aE(t,{measurement:"rem",customScale:"s"}),";;label:s;"),xs:Ne(aE(t,{measurement:"rem",customScale:"xs"}),";;label:xs;"),relative:Ne(aE(t,{measurement:"em"}),";;label:relative;")}};var d1e=P(L()),Ip=P(dt());var A6t={name:"uacjc5-inherit",styles:"color:inherit;label:inherit;"},p1e=function(t){var n=t.euiTheme;return{euiTextColor:Ne(";label:euiTextColor;"),default:Ne("color:",n.colors.text,";;label:default;"),subdued:Ne("color:",n.colors.subduedText,";;label:subdued;"),success:Ne("color:",n.colors.successText,";;label:success;"),accent:Ne("color:",n.colors.accentText,";;label:accent;"),danger:Ne("color:",n.colors.dangerText,";;label:danger;"),warning:Ne("color:",n.colors.warningText,";;label:warning;"),ghost:Ne("color:",n.colors.ghost,"!important;;label:ghost;"),inherit:A6t,customColor:Ne(";label:customColor;")}};var M6t=["children","color","component","cloneElement","style"];function f1e(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function H1(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function z6t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var L6t=["default","subdued","success","accent","danger","warning","ghost","inherit"],uG=function(t){var n=t.children,r=t.color,o=r===void 0?"default":r,i=t.component,u=i===void 0?"span":i,f=t.cloneElement,h=f===void 0?!1:f,y=t.style,O=R6t(t,M6t),S=L6t.includes(o),I=en(),A=p1e(I),C=[A.euiTextColor,S?A[o]:A.customColor],M=H1(S?{}:{color:o},y),W=H1({css:C,style:M},O);if((0,d1e.isValidElement)(n)&&h){var R=H1(H1({},n.props.style),M);return yd(n,H1(H1({},W),{},{style:R}))}else{var B=u;return a(B,W,n)}};uG.propTypes={className:Ip.default.string,"aria-label":Ip.default.string,"data-test-subj":Ip.default.string,color:Ip.default.oneOfType([Ip.default.any.isRequired,Ip.default.any.isRequired]),component:Ip.default.oneOf(["div","span"]),cloneElement:Ip.default.bool};var g1e=P(L()),zv=P(dt());var m1e=function(){return{euiTextAlign:Ne(";label:euiTextAlign;"),left:Ne(xp("left"),";;label:left;"),right:Ne(xp("right"),";;label:right;"),center:Ne(xp("center"),";;label:center;")}};var D6t=["children","textAlign","cloneElement"];function h1e(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function N6t(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function B6t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var cG=function(t){var n=t.children,r=t.textAlign,o=r===void 0?"left":r,i=t.cloneElement,u=i===void 0?!1:i,f=W6t(t,D6t),h=m1e(),y=[h.euiTextAlign,h[o]],O=N6t({css:y},f);return(0,g1e.isValidElement)(n)&&u?yd(n,O):a("div",O,n)};cG.propTypes={className:zv.default.string,"aria-label":zv.default.string,"data-test-subj":zv.default.string,textAlign:zv.default.any,cloneElement:zv.default.bool};var H6t=["size","color","grow","textAlign","children","className"];function pG(){return pG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function q6t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var fr=function(t){var n=t.size,r=n===void 0?"m":n,o=t.color,i=t.grow,u=i===void 0?!0:i,f=t.textAlign,h=t.children,y=t.className,O=V6t(t,H6t),S=en(),I=c1e(S),A=[I.euiText,u?void 0:I.constrainedWidth,I[r]],C=(0,v1e.default)("euiText",y),M=a("div",pG({css:A,className:C},O),h);return o&&(M=a(uG,{color:o,className:C,cloneElement:!0},M)),f&&(M=a(cG,{textAlign:f,className:C,cloneElement:!0},M)),M};fr.propTypes={className:pc.default.string,"aria-label":pc.default.string,"data-test-subj":pc.default.string,textAlign:pc.default.any,size:pc.default.any,color:pc.default.oneOfType([pc.default.any.isRequired,pc.default.any.isRequired]),grow:pc.default.bool};var alr=P(L()),Mn=P(dt()),lE=P(Ct());var U6t=["children","className","iconType","iconSide","iconSize","color","size","flush","isDisabled","disabled","isLoading","href","target","rel","type","buttonRef","contentProps","textProps","isSelected"];function Z9(){return Z9=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function G6t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var w1e={primary:"euiButtonEmpty--primary",danger:"euiButtonEmpty--danger",text:"euiButtonEmpty--text",ghost:"euiButtonEmpty--ghost",success:"euiButtonEmpty--success",warning:"euiButtonEmpty--warning"},X6t=Vt(w1e),O1e={xs:"euiButtonEmpty--xSmall",s:"euiButtonEmpty--small",m:null},dlr=Vt(O1e),x1e={left:"euiButtonEmpty--flushLeft",right:"euiButtonEmpty--flushRight",both:"euiButtonEmpty--flushBoth"},mlr=Vt(x1e),La=function(t){var n=t.children,r=t.className,o=t.iconType,i=t.iconSide,u=i===void 0?"left":i,f=t.iconSize,h=f===void 0?"m":f,y=t.color,O=y===void 0?"primary":y,S=t.size,I=S===void 0?"m":S,A=t.flush,C=t.isDisabled,M=t.disabled,W=t.isLoading,R=t.href,B=t.target,Y=t.rel,X=t.type,ae=X===void 0?"button":X,Z=t.buttonRef,K=t.contentProps,de=t.textProps,se=t.isSelected,Se=J6t(t,U6t),Oe=!R||ma(R),be=M||!Oe,Ue=C||!Oe,We=W||Ue||be,Ge=(0,lE.default)("euiButtonEmpty",w1e[O],I?O1e[I]:null,A?x1e[A]:null,{"euiButtonEmpty-isDisabled":We},r),Qe=(0,lE.default)("euiButtonEmpty__content",K&&K.className),ot=(0,lE.default)("euiButtonEmpty__text",de&&de.className),at=a(X9,Z9({isLoading:W,iconType:o,iconSide:u,iconSize:I==="xs"?"s":h,textProps:b1e(b1e({},de),{},{className:ot})},K,{className:Qe}),n);if(R&&!We){var ht=ni({href:R,target:B,rel:Y});return a("a",Z9({className:Ge,href:R,target:B,rel:ht,ref:Z},Se),at)}return a("button",Z9({disabled:We,className:Ge,type:ae,ref:Z,"aria-pressed":se},Se),at)};La.propTypes={href:Mn.default.string,onClick:Mn.default.func,color:Mn.default.oneOf(["primary","danger","text","ghost","success","warning"]),size:Mn.default.oneOf(["xs","s","m"]),flush:Mn.default.oneOf(["left","right","both"]),isDisabled:Mn.default.bool,isLoading:Mn.default.bool,isSelected:Mn.default.bool,target:Mn.default.string,rel:Mn.default.string,type:Mn.default.oneOf(["button","submit"]),buttonRef:Mn.default.any,contentProps:Mn.default.any,iconType:Mn.default.oneOfType([Mn.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,Mn.default.string.isRequired,Mn.default.elementType.isRequired]),iconSide:Mn.default.oneOf(["left","right"]),textProps:Mn.default.shape({className:Mn.default.string,"aria-label":Mn.default.string,"data-test-subj":Mn.default.string,ref:Mn.default.any,"data-text":Mn.default.string}),iconSize:Mn.default.oneOf(["s","m"]),className:Mn.default.string,"aria-label":Mn.default.string,"data-test-subj":Mn.default.string};var ylr=P(L()),Ro=P(dt()),_1e=P(Ct());var K6t=["className","iconType","iconSize","color","isDisabled","disabled","href","type","display","target","rel","size","buttonRef","isSelected","isLoading"];function sE(){return sE=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Q6t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var S1e={base:null,empty:"euiButtonIcon--empty",fill:"euiButtonIcon--fill"},Ilr=Vt(S1e),j1e={accent:"euiButtonIcon--accent",danger:"euiButtonIcon--danger",ghost:"euiButtonIcon--ghost",primary:"euiButtonIcon--primary",success:"euiButtonIcon--success",text:"euiButtonIcon--text",warning:"euiButtonIcon--warning"},klr=Vt(j1e),I1e={xs:"euiButtonIcon--xSmall",s:"euiButtonIcon--small",m:"euiButtonIcon--medium"},Plr=Vt(I1e),eu=function(t){var n=t.className,r=t.iconType,o=t.iconSize,i=o===void 0?"m":o,u=t.color,f=u===void 0?"primary":u,h=t.isDisabled,y=t.disabled,O=t.href,S=t.type,I=S===void 0?"button":S,A=t.display,C=A===void 0?"empty":A,M=t.target,W=t.rel,R=t.size,B=R===void 0?"xs":R,Y=t.buttonRef,X=t.isSelected,ae=t.isLoading,Z=Y6t(t,K6t),K=!O||ma(O),de=h||y||!K||ae,se=Z["aria-hidden"],Se=se==="true"||se===!0;!Z["aria-label"]&&!Z["aria-labelledby"]&&!Se&&console.warn(`EuiButtonIcon requires aria-label or aria-labelledby to be specified because icon-only - buttons are screen-reader-inaccessible without them.`);var Oe=(0,_1e.default)("euiButtonIcon",{"euiButtonIcon-isDisabled":de},j1e[f],C&&S1e[C],B&&I1e[B],n),be;r&&!ae&&(be=a(ar,{className:"euiButtonIcon__icon",type:r,size:i,"aria-hidden":"true",color:"inherit"}));var Ue=i==="original"?void 0:i;if(r&&ae&&(be=a($r,{size:Ue})),O&&!de){var We=ni({href:O,target:M,rel:W});return a("a",sE({tabIndex:Se?-1:void 0,className:Oe,href:O,target:M,rel:We,ref:Y},Z),be)}var Ge;return a("button",sE({tabIndex:Se?-1:void 0,disabled:de,className:Oe,"aria-pressed":X,type:I,ref:Y},Z),be)};eu.propTypes={type:Ro.default.oneOfType([Ro.default.string,Ro.default.oneOf(["submit","reset","button"])]),href:Ro.default.string,onClick:Ro.default.func,iconType:Ro.default.oneOfType([Ro.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,Ro.default.string.isRequired,Ro.default.elementType.isRequired]).isRequired,color:Ro.default.oneOf(["primary","accent","success","warning","danger","ghost","text"]),"aria-label":Ro.default.string,"aria-labelledby":Ro.default.string,isDisabled:Ro.default.bool,size:Ro.default.oneOf(["xs","s","m"]),iconSize:Ro.default.any,isSelected:Ro.default.bool,display:Ro.default.oneOf(["base","empty","fill"]),isLoading:Ro.default.bool,className:Ro.default.string,"data-test-subj":Ro.default.string,buttonRef:Ro.default.any};var dG=P(dt()),V1=P(L());function fG(e,t){return rwt(e)||twt(e,t)||ewt(e,t)||Z6t()}function Z6t(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function ewt(e,t){if(e){if(typeof e=="string")return k1e(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return k1e(e,t)}}function k1e(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n div, .contract-trigger:before { content: " "; display: block; position: absolute; top: 0; left: 0; height: 100%; width: 100%; overflow: hidden; z-index: -1; } .resize-triggers > div { background: #eee; overflow: auto; } .contract-trigger:before { width: 200%; height: 200%; }',C=I.head||I.getElementsByTagName("head")[0],M=I.createElement("style");M.id="detectElementResize",M.type="text/css",e!=null&&M.setAttribute("nonce",e),M.styleSheet?M.styleSheet.cssText=A:M.appendChild(I.createTextNode(A)),C.appendChild(M)}};return{addResizeListener:function(I,A){if(h)I.attachEvent("onresize",A);else{if(!I.__resizeTriggers__){let C=I.ownerDocument,M=hs.getComputedStyle(I);M&&M.position==="static"&&(I.style.position="relative"),y(C),I.__resizeLast__={},I.__resizeListeners__=[],(I.__resizeTriggers__=C.createElement("div")).className="resize-triggers";let W=C.createElement("div");W.className="expand-trigger",W.appendChild(C.createElement("div"));let R=C.createElement("div");R.className="contract-trigger",I.__resizeTriggers__.appendChild(W),I.__resizeTriggers__.appendChild(R),I.appendChild(I.__resizeTriggers__),u(I),I.addEventListener("scroll",f,!0),r&&(I.__resizeTriggers__.__animationListener__=function(Y){Y.animationName===n&&u(I)},I.__resizeTriggers__.addEventListener(r,I.__resizeTriggers__.__animationListener__))}I.__resizeListeners__.push(A)}},removeResizeListener:function(I,A){if(h)I.detachEvent("onresize",A);else if(I.__resizeListeners__.splice(I.__resizeListeners__.indexOf(A),1),!I.__resizeListeners__.length){I.removeEventListener("scroll",f,!0),I.__resizeTriggers__.__animationListener__&&(I.__resizeTriggers__.removeEventListener(r,I.__resizeTriggers__.__animationListener__),I.__resizeTriggers__.__animationListener__=null);try{I.__resizeTriggers__=!I.removeChild(I.__resizeTriggers__)}catch{}}}}}var uE=class extends cE.Component{constructor(...t){super(...t),this.state={height:this.props.defaultHeight||0,scaledHeight:this.props.defaultHeight||0,scaledWidth:this.props.defaultWidth||0,width:this.props.defaultWidth||0},this._autoSizer=null,this._detectElementResize=null,this._parentNode=null,this._resizeObserver=null,this._timeoutId=null,this._onResize=()=>{this._timeoutId=null;let{disableHeight:n,disableWidth:r,onResize:o}=this.props;if(this._parentNode){let i=window.getComputedStyle(this._parentNode)||{},u=parseFloat(i.paddingLeft||"0"),f=parseFloat(i.paddingRight||"0"),h=parseFloat(i.paddingTop||"0"),y=parseFloat(i.paddingBottom||"0"),O=this._parentNode.getBoundingClientRect(),S=O.height-h-y,I=O.width-u-f,A=this._parentNode.offsetHeight-h-y,C=this._parentNode.offsetWidth-u-f;(!n&&(this.state.height!==A||this.state.scaledHeight!==S)||!r&&(this.state.width!==C||this.state.scaledWidth!==I))&&(this.setState({height:A,width:C,scaledHeight:S,scaledWidth:I}),typeof o=="function"&&o({height:A,scaledHeight:S,scaledWidth:I,width:C}))}},this._setRef=n=>{this._autoSizer=n}}componentDidMount(){let{nonce:t}=this.props,n=this._autoSizer?this._autoSizer.parentNode:null;if(n!=null&&n.ownerDocument&&n.ownerDocument.defaultView&&n instanceof n.ownerDocument.defaultView.HTMLElement){this._parentNode=n;let r=n.ownerDocument.defaultView.ResizeObserver;r!=null?(this._resizeObserver=new r(()=>{this._timeoutId=setTimeout(this._onResize,0)}),this._resizeObserver.observe(n)):(this._detectElementResize=nwt(t),this._detectElementResize.addResizeListener(n,this._onResize)),this._onResize()}}componentWillUnmount(){this._parentNode&&(this._detectElementResize&&this._detectElementResize.removeResizeListener(this._parentNode,this._onResize),this._timeoutId!==null&&clearTimeout(this._timeoutId),this._resizeObserver&&this._resizeObserver.disconnect())}render(){let{children:t,defaultHeight:n,defaultWidth:r,disableHeight:o=!1,disableWidth:i=!1,doNotBailOutOnEmptyChildren:u=!1,nonce:f,onResize:h,style:y={},tagName:O="div",...S}=this.props,{height:I,scaledHeight:A,scaledWidth:C,width:M}=this.state,W={overflow:"visible"},R={},B=!1;return o||(I===0&&(B=!0),W.height=0,R.height=I,R.scaledHeight=A),i||(M===0&&(B=!0),W.width=0,R.width=M,R.scaledWidth=C),u&&(B=!1),(0,cE.createElement)(O,{ref:this._setRef,style:{...W,...y},...S},!B&&t(R))}};function pE(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?pE=function(n){return typeof n}:pE=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},pE(e)}function owt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function iwt(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&yG(e,t)}function yG(e,t){return yG=Object.setPrototypeOf||function(r,o){return r.__proto__=o,r},yG(e,t)}function awt(e){var t=uwt();return function(){var r=fE(e),o;if(t){var i=fE(this).constructor;o=Reflect.construct(r,arguments,i)}else o=r.apply(this,arguments);return lwt(this,o)}}function lwt(e,t){if(t&&(pE(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return swt(e)}function swt(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function uwt(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function fE(e){return fE=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},fE(e)}var bG=function(e){iwt(n,e);var t=awt(n);function n(){return owt(this,n),t.apply(this,arguments)}return n}(uE);var Ulr=P(L()),Uo=P(dt()),xG=P(Ct()),SG=P(Od());var mE=P(Od());function dE(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?dE=function(n){return typeof n}:dE=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},dE(e)}var cwt="";var wG=function(t){var n;if(!t)return null;if(t.indexOf(",")>0){if(!/^[\s,.0-9]*$/.test(t))return null;var r=t.trim().split(",").filter(function(o){return o!==""}).map(Number);n=r.length>2&&r.length<5?r:cwt}else n=t;return n},M1e=function(t){var n=t;return typeof t=="string"&&(n=wG(t)),n?dE(n)==="object"?mE.default.valid(n,"rgb")||mE.default.valid(n,"rgba"):mE.default.valid(t,"hex"):!1};var pwt=["children","color","iconType","iconSide","className","isDisabled","onClick","iconOnClick","onClickAriaLabel","iconOnClickAriaLabel","closeButtonProps","href","rel","target","style"];function fwt(e){return gwt(e)||hwt(e)||mwt(e)||dwt()}function dwt(){throw new TypeError(`Invalid attempt to spread non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function mwt(e,t){if(e){if(typeof e=="string")return OG(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return OG(e,t)}}function hwt(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function gwt(e){if(Array.isArray(e))return OG(e)}function OG(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function bwt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var wwt="#000",Owt="#fff",e_=pv(),L1e={default:"#d3dae6",primary:e_[1],success:e_[0],accent:e_[2],warning:e_[5],danger:e_[9]},_G=Vt(L1e),D1e={left:"euiBadge--iconLeft",right:"euiBadge--iconRight"},esr=Vt(D1e),wo=function(t){var n=t.children,r=t.color,o=r===void 0?"default":r,i=t.iconType,u=t.iconSide,f=u===void 0?"left":u,h=t.className,y=t.isDisabled,O=t.onClick,S=t.iconOnClick,I=t.onClickAriaLabel,A=t.iconOnClickAriaLabel,C=t.closeButtonProps,M=t.href,W=t.rel,R=t.target,B=t.style,Y=ywt(t,pwt),X=!M||ma(M),ae=y||!X,Z=B,K=null,de=4.5,se=null,Se=null;try{_G.indexOf(o)>-1?(Se=L1e[o],K=z1e(Se),Z=R1e({backgroundColor:Se,color:K},Z)):o!=="hollow"&&(K=z1e(o),se=xwt(K,o),se"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function gE(e){return gE=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},gE(e)}function Ewt(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var V1e={after:"afterend",before:"beforebegin"},nsr=Vt(V1e),Ad=function(e){Iwt(n,e);var t=kwt(n);function n(r){var o;if(Swt(this,n),o=t.call(this,r),Ewt(W1e(o),"portalNode",null),typeof window>"u")return F1e(o);var i=o.props.insert;if(o.portalNode=document.createElement("div"),o.portalNode.dataset.euiportal="true",i==null)document.body.appendChild(o.portalNode);else{var u=i.sibling,f=i.position;u.insertAdjacentElement(V1e[f],o.portalNode)}return o}return jwt(n,[{key:"componentDidMount",value:function(){this.updatePortalRef(this.portalNode)}},{key:"componentWillUnmount",value:function(){var o;(o=this.portalNode)!==null&&o!==void 0&&o.parentNode&&this.portalNode.parentNode.removeChild(this.portalNode),this.updatePortalRef(null)}},{key:"updatePortalRef",value:function(o){this.props.portalRef&&this.props.portalRef(o)}},{key:"render",value:function(){return this.portalNode?(0,H1e.createPortal)(this.props.children,this.portalNode):null}}]),n}(B1e.Component);Ad.propTypes={children:Lv.default.node.isRequired,insert:Lv.default.shape({sibling:Lv.default.any.isRequired,position:Lv.default.oneOf(["before","after"]).isRequired}),portalRef:Lv.default.func};var U1e=P(L()),Md=P(dt()),$1e=P(Ct());function vE(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?vE=function(n){return typeof n}:vE=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},vE(e)}var Cwt=["children","title","className","positionToolTip","popoverRef"];function kG(){return kG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Mwt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function Twt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function q1e(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function bE(e){return bE=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},bE(e)}function IG(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var EG=function(e){zwt(n,e);var t=Lwt(n);function n(){var r;Twt(this,n);for(var o=arguments.length,i=new Array(o),u=0;u=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Hwt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function Vwt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function G1e(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function OE(e){return OE=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},OE(e)}function ha(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var K1e={top:"euiToolTip--top",right:"euiToolTip--right",bottom:"euiToolTip--bottom",left:"euiToolTip--left"},ysr=Vt(K1e),Xwt={regular:250,long:250*5},Kwt={inlineBlock:void 0,block:"euiToolTipAnchor--displayBlock"},X1e={top:50,left:50,opacity:0,visibility:"hidden"},ga=function(e){Uwt(n,e);var t=$wt(n);function n(){var r;Vwt(this,n);for(var o=arguments.length,i=new Array(o),u=0;u=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Zwt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var _E=function(t){var n=t.type,r=n===void 0?"questionInCircle":n,o=t["aria-label"],i=o===void 0?"Info":o,u=t.color,f=t.size,h=t.iconProps,y=t.position,O=y===void 0?"top":y,S=t.delay,I=S===void 0?"regular":S,A=Qwt(t,Ywt);return a(ga,xE({position:O,delay:I},A),a(ar,xE({tabIndex:0,type:r,color:u,size:f,"aria-label":i},h)))};_E.propTypes={anchorClassName:Pi.default.string,className:Pi.default.string,content:Pi.default.node,display:Pi.default.oneOf(["inlineBlock","block"]),title:Pi.default.node,id:Pi.default.string,onMouseOut:Pi.default.func,color:Pi.default.string,type:Pi.default.oneOfType([Pi.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,Pi.default.string.isRequired,Pi.default.elementType.isRequired]),size:Pi.default.any,"aria-label":Pi.default.string,iconProps:Pi.default.any,delay:Pi.default.any,position:Pi.default.any};var eOt=["className","label","color","tooltipContent","tooltipPosition","title","iconType","onClick","onClickAriaLabel","href","rel","target","size"];function SE(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?SE=function(n){return typeof n}:SE=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},SE(e)}function t_(){return t_=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function rOt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Z1e={accent:"euiBetaBadge--accent",subdued:"euiBetaBadge--subdued",hollow:"euiBetaBadge--hollow"},zsr=Vt(Z1e),eme={s:"euiBetaBadge--small",m:null},Lsr=Vt(eme),jE=function(t){var n=t.className,r=t.label,o=t.color,i=o===void 0?"hollow":o,u=t.tooltipContent,f=t.tooltipPosition,h=f===void 0?"top":f,y=t.title,O=t.iconType,S=t.onClick,I=t.onClickAriaLabel,A=t.href,C=t.rel,M=t.target,W=t.size,R=W===void 0?"m":W,B=tOt(t,eOt),Y=!1;typeof r=="string"&&r.length===1&&(Y=!0);var X=(0,Q1e.default)("euiBetaBadge",{"euiBetaBadge--iconOnly":O,"euiBetaBadge--singleLetter":Y,"euiBetaBadge-isClickable":S||A},Z1e[i],eme[R],n),ae;O&&(ae=a(ar,{className:"euiBetaBadge__icon",type:O,size:R==="m"?"m":"s","aria-hidden":"true",color:"inherit"}));var Z=A?"a":"button",K={};A&&(K.href=A,K.target=M,K.rel=ni({href:A,target:M,rel:C})),S&&(K.onClick=S);var de;if(S||A)return de=a(Z,t_({"aria-label":I,className:X,title:typeof r=="string"?r:y},K,B),ae||r),u?a(ga,{position:h,content:u,title:y||r},de):a(Y1e.Fragment,null,de);if(u)return a(ga,{position:h,content:u,title:y||r},a("span",t_({tabIndex:0,className:X,role:"button"},B),ae||r));var se=y||r;return se&&typeof se!="string"&&console.warn("Only string titles are permitted on badges that do not use tooltips. Found: ".concat(SE(se))),a("span",t_({className:X,title:se},B),ae||r)};jE.propTypes={className:Sn.default.string,"aria-label":Sn.default.string,"data-test-subj":Sn.default.string,onClick:Sn.default.func,onClickAriaLabel:Sn.default.any,href:Sn.default.string,target:Sn.default.string,rel:Sn.default.string,iconType:Sn.default.oneOfType([Sn.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,Sn.default.string.isRequired,Sn.default.elementType.isRequired]),label:Sn.default.oneOfType([Sn.default.node.isRequired,Sn.default.oneOfType([Sn.default.node.isRequired,Sn.default.string.isRequired]).isRequired]).isRequired,tooltipContent:Sn.default.oneOfType([Sn.default.node,Sn.default.oneOfType([Sn.default.node,Sn.default.node.isRequired])]),tooltipPosition:Sn.default.oneOf(["top","right","bottom","left"]),title:Sn.default.oneOfType([Sn.default.string,Sn.default.oneOfType([Sn.default.string.isRequired,Sn.default.string])]),color:Sn.default.oneOf(["accent","subdued","hollow"]),size:Sn.default.oneOf(["s","m"])};var tme=P(Od());var $o=function(t,n,r){var o=r===wd.dark?n*3.5:n*1;return(0,tme.default)(t).alpha(o).css()};var nOt=function(t){var n=t.euiTheme,r=t.colorMode,o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=o.color,u=i||n.colors.shadow;return` + `)},f1e=function(t){var n=t.euiTheme;return{euiText:Fe(T6t(n,!0),";clear:both;a:not([class]){",dG(n),";}img{display:block;",Kt("max-width","100%"),";}ul{list-style:disc;}ol{list-style:decimal;}blockquote:not(.euiMarkdownFormat__blockquote){position:relative;",Sp("center")," ",Kt("margin-horizontal","auto")," font-family:",n.font.familySerif,";font-style:italic;letter-spacing:normal;p:last-child{",Kt("margin-bottom","0"),";}&:before,&:after{position:absolute;content:'';",Kt("height",n.border.width.thick)," ",Kt("width","50%")," ",Kt("left","25%")," ",Kt("right","25%")," background:",n.colors.darkShade,";}&:before{",Kt("top","0"),";}&:after{",Kt("bottom","0"),";}}h1{",yi(t,"l"),";}h2{",yi(t,"m"),";}h3{",yi(t,"s"),";}h4,dt{",yi(t,"xs"),";}h5{",yi(t,"xxs"),";}h6{",yi(t,"xxxs")," text-transform:uppercase;}h1,h2,h3,h4,h5,h6,dt{color:inherit;}pre:not(.euiCodeBlock__pre){white-space:pre-wrap;background:",F9(t,"subdued"),";color:",n.colors.text,";}pre:not(.euiCodeBlock__pre),pre:not(.euiCodeBlock__pre) code{display:block;}>:last-child{",Kt("margin-bottom","0 !important"),";}kbd{position:relative;display:inline-block;",Kt("padding-vertical",n.size.xxs)," ",Kt("padding-horizontal",n.size.xs)," line-height:1;border:",n.border.width.thin," solid ",n.colors.text,";border-radius:calc(",n.border.radius.small," / 2);};label:euiText;"),constrainedWidth:Fe(Kt("max-width",M6t),";;label:constrainedWidth;"),m:Fe(fE(t,{measurement:"rem",customScale:"m"}),";;label:m;"),s:Fe(fE(t,{measurement:"rem",customScale:"s"}),";;label:s;"),xs:Fe(fE(t,{measurement:"rem",customScale:"xs"}),";;label:xs;"),relative:Fe(fE(t,{measurement:"em"}),";;label:relative;")}};var h1e=k(L()),kp=k(mt());var R6t={name:"uacjc5-inherit",styles:"color:inherit;label:inherit;"},d1e=function(t){var n=t.euiTheme;return{euiTextColor:Fe(";label:euiTextColor;"),default:Fe("color:",n.colors.text,";;label:default;"),subdued:Fe("color:",n.colors.subduedText,";;label:subdued;"),success:Fe("color:",n.colors.successText,";;label:success;"),accent:Fe("color:",n.colors.accentText,";;label:accent;"),danger:Fe("color:",n.colors.dangerText,";;label:danger;"),warning:Fe("color:",n.colors.warningText,";;label:warning;"),ghost:Fe("color:",n.colors.ghost,"!important;;label:ghost;"),inherit:R6t,customColor:Fe(";label:customColor;")}};var z6t=["children","color","component","cloneElement","style"];function m1e(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function q1(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function N6t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var F6t=["default","subdued","success","accent","danger","warning","ghost","inherit"],mG=function(t){var n=t.children,r=t.color,o=r===void 0?"default":r,i=t.component,u=i===void 0?"span":i,f=t.cloneElement,h=f===void 0?!1:f,y=t.style,O=D6t(t,z6t),S=F6t.includes(o),I=en(),A=d1e(I),C=[A.euiTextColor,S?A[o]:A.customColor],M=q1(S?{}:{color:o},y),F=q1({css:C,style:M},O);if((0,h1e.isValidElement)(n)&&h){var R=q1(q1({},n.props.style),M);return wd(n,q1(q1({},F),{},{style:R}))}else{var B=u;return a(B,F,n)}};mG.propTypes={className:kp.default.string,"aria-label":kp.default.string,"data-test-subj":kp.default.string,color:kp.default.oneOfType([kp.default.any.isRequired,kp.default.any.isRequired]),component:kp.default.oneOf(["div","span"]),cloneElement:kp.default.bool};var y1e=k(L()),zv=k(mt());var g1e=function(){return{euiTextAlign:Fe(";label:euiTextAlign;"),left:Fe(Sp("left"),";;label:left;"),right:Fe(Sp("right"),";;label:right;"),center:Fe(Sp("center"),";;label:center;")}};var W6t=["children","textAlign","cloneElement"];function v1e(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function B6t(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function q6t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var hG=function(t){var n=t.children,r=t.textAlign,o=r===void 0?"left":r,i=t.cloneElement,u=i===void 0?!1:i,f=V6t(t,W6t),h=g1e(),y=[h.euiTextAlign,h[o]],O=B6t({css:y},f);return(0,y1e.isValidElement)(n)&&u?wd(n,O):a("div",O,n)};hG.propTypes={className:zv.default.string,"aria-label":zv.default.string,"data-test-subj":zv.default.string,textAlign:zv.default.any,cloneElement:zv.default.bool};var U6t=["size","color","grow","textAlign","children","className"];function gG(){return gG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function J6t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ar=function(t){var n=t.size,r=n===void 0?"m":n,o=t.color,i=t.grow,u=i===void 0?!0:i,f=t.textAlign,h=t.children,y=t.className,O=$6t(t,U6t),S=en(),I=f1e(S),A=[I.euiText,u?void 0:I.constrainedWidth,I[r]],C=(0,b1e.default)("euiText",y),M=a("div",gG({css:A,className:C},O),h);return o&&(M=a(mG,{color:o,className:C,cloneElement:!0},M)),f&&(M=a(hG,{textAlign:f,className:C,cloneElement:!0},M)),M};ar.propTypes={className:dc.default.string,"aria-label":dc.default.string,"data-test-subj":dc.default.string,textAlign:dc.default.any,size:dc.default.any,color:dc.default.oneOfType([dc.default.any.isRequired,dc.default.any.isRequired]),grow:dc.default.bool};var flr=k(L()),Rn=k(mt()),dE=k(Ct());var G6t=["children","className","iconType","iconSide","iconSize","color","size","flush","isDisabled","disabled","isLoading","href","target","rel","type","buttonRef","contentProps","textProps","isSelected"];function t_(){return t_=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Y6t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var x1e={primary:"euiButtonEmpty--primary",danger:"euiButtonEmpty--danger",text:"euiButtonEmpty--text",ghost:"euiButtonEmpty--ghost",success:"euiButtonEmpty--success",warning:"euiButtonEmpty--warning"},Q6t=Ht(x1e),_1e={xs:"euiButtonEmpty--xSmall",s:"euiButtonEmpty--small",m:null},blr=Ht(_1e),S1e={left:"euiButtonEmpty--flushLeft",right:"euiButtonEmpty--flushRight",both:"euiButtonEmpty--flushBoth"},wlr=Ht(S1e),za=function(t){var n=t.children,r=t.className,o=t.iconType,i=t.iconSide,u=i===void 0?"left":i,f=t.iconSize,h=f===void 0?"m":f,y=t.color,O=y===void 0?"primary":y,S=t.size,I=S===void 0?"m":S,A=t.flush,C=t.isDisabled,M=t.disabled,F=t.isLoading,R=t.href,B=t.target,Y=t.rel,X=t.type,le=X===void 0?"button":X,Z=t.buttonRef,K=t.contentProps,de=t.textProps,se=t.isSelected,_e=K6t(t,G6t),be=!R||da(R),Pe=M||!be,Ue=C||!be,Le=F||Ue||Pe,Ge=(0,dE.default)("euiButtonEmpty",x1e[O],I?_1e[I]:null,A?S1e[A]:null,{"euiButtonEmpty-isDisabled":Le},r),Ke=(0,dE.default)("euiButtonEmpty__content",K&&K.className),rt=(0,dE.default)("euiButtonEmpty__text",de&&de.className),ot=a(Y9,t_({isLoading:F,iconType:o,iconSide:u,iconSize:I==="xs"?"s":h,textProps:O1e(O1e({},de),{},{className:rt})},K,{className:Ke}),n);if(R&&!Le){var dt=ni({href:R,target:B,rel:Y});return a("a",t_({className:Ge,href:R,target:B,rel:dt,ref:Z},_e),ot)}return a("button",t_({disabled:Le,className:Ge,type:le,ref:Z,"aria-pressed":se},_e),ot)};za.propTypes={href:Rn.default.string,onClick:Rn.default.func,color:Rn.default.oneOf(["primary","danger","text","ghost","success","warning"]),size:Rn.default.oneOf(["xs","s","m"]),flush:Rn.default.oneOf(["left","right","both"]),isDisabled:Rn.default.bool,isLoading:Rn.default.bool,isSelected:Rn.default.bool,target:Rn.default.string,rel:Rn.default.string,type:Rn.default.oneOf(["button","submit"]),buttonRef:Rn.default.any,contentProps:Rn.default.any,iconType:Rn.default.oneOfType([Rn.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,Rn.default.string.isRequired,Rn.default.elementType.isRequired]),iconSide:Rn.default.oneOf(["left","right"]),textProps:Rn.default.shape({className:Rn.default.string,"aria-label":Rn.default.string,"data-test-subj":Rn.default.string,ref:Rn.default.any,"data-text":Rn.default.string}),iconSize:Rn.default.oneOf(["s","m"]),className:Rn.default.string,"aria-label":Rn.default.string,"data-test-subj":Rn.default.string};var Slr=k(L()),Ro=k(mt()),j1e=k(Ct());var Z6t=["className","iconType","iconSize","color","isDisabled","disabled","href","type","display","target","rel","size","buttonRef","isSelected","isLoading"];function mE(){return mE=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function twt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var I1e={base:null,empty:"euiButtonIcon--empty",fill:"euiButtonIcon--fill"},Mlr=Ht(I1e),P1e={accent:"euiButtonIcon--accent",danger:"euiButtonIcon--danger",ghost:"euiButtonIcon--ghost",primary:"euiButtonIcon--primary",success:"euiButtonIcon--success",text:"euiButtonIcon--text",warning:"euiButtonIcon--warning"},Tlr=Ht(P1e),k1e={xs:"euiButtonIcon--xSmall",s:"euiButtonIcon--small",m:"euiButtonIcon--medium"},Rlr=Ht(k1e),sl=function(t){var n=t.className,r=t.iconType,o=t.iconSize,i=o===void 0?"m":o,u=t.color,f=u===void 0?"primary":u,h=t.isDisabled,y=t.disabled,O=t.href,S=t.type,I=S===void 0?"button":S,A=t.display,C=A===void 0?"empty":A,M=t.target,F=t.rel,R=t.size,B=R===void 0?"xs":R,Y=t.buttonRef,X=t.isSelected,le=t.isLoading,Z=ewt(t,Z6t),K=!O||da(O),de=h||y||!K||le,se=Z["aria-hidden"],_e=se==="true"||se===!0;!Z["aria-label"]&&!Z["aria-labelledby"]&&!_e&&console.warn(`EuiButtonIcon requires aria-label or aria-labelledby to be specified because icon-only + buttons are screen-reader-inaccessible without them.`);var be=(0,j1e.default)("euiButtonIcon",{"euiButtonIcon-isDisabled":de},P1e[f],C&&I1e[C],B&&k1e[B],n),Pe;r&&!le&&(Pe=a(ir,{className:"euiButtonIcon__icon",type:r,size:i,"aria-hidden":"true",color:"inherit"}));var Ue=i==="original"?void 0:i;if(r&&le&&(Pe=a($r,{size:Ue})),O&&!de){var Le=ni({href:O,target:M,rel:F});return a("a",mE({tabIndex:_e?-1:void 0,className:be,href:O,target:M,rel:Le,ref:Y},Z),Pe)}var Ge;return a("button",mE({tabIndex:_e?-1:void 0,disabled:de,className:be,"aria-pressed":X,type:I,ref:Y},Z),Pe)};sl.propTypes={type:Ro.default.oneOfType([Ro.default.string,Ro.default.oneOf(["submit","reset","button"])]),href:Ro.default.string,onClick:Ro.default.func,iconType:Ro.default.oneOfType([Ro.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,Ro.default.string.isRequired,Ro.default.elementType.isRequired]).isRequired,color:Ro.default.oneOf(["primary","accent","success","warning","danger","ghost","text"]),"aria-label":Ro.default.string,"aria-labelledby":Ro.default.string,isDisabled:Ro.default.bool,size:Ro.default.oneOf(["xs","s","m"]),iconSize:Ro.default.any,isSelected:Ro.default.bool,display:Ro.default.oneOf(["base","empty","fill"]),isLoading:Ro.default.bool,className:Ro.default.string,"data-test-subj":Ro.default.string,buttonRef:Ro.default.any};var yG=k(mt()),U1=k(L());function vG(e,t){return iwt(e)||owt(e,t)||nwt(e,t)||rwt()}function rwt(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function nwt(e,t){if(e){if(typeof e=="string")return E1e(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return E1e(e,t)}}function E1e(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n div, .contract-trigger:before { content: " "; display: block; position: absolute; top: 0; left: 0; height: 100%; width: 100%; overflow: hidden; z-index: -1; } .resize-triggers > div { background: #eee; overflow: auto; } .contract-trigger:before { width: 200%; height: 200%; }',C=I.head||I.getElementsByTagName("head")[0],M=I.createElement("style");M.id="detectElementResize",M.type="text/css",e!=null&&M.setAttribute("nonce",e),M.styleSheet?M.styleSheet.cssText=A:M.appendChild(I.createTextNode(A)),C.appendChild(M)}};return{addResizeListener:function(I,A){if(h)I.attachEvent("onresize",A);else{if(!I.__resizeTriggers__){let C=I.ownerDocument,M=vs.getComputedStyle(I);M&&M.position==="static"&&(I.style.position="relative"),y(C),I.__resizeLast__={},I.__resizeListeners__=[],(I.__resizeTriggers__=C.createElement("div")).className="resize-triggers";let F=C.createElement("div");F.className="expand-trigger",F.appendChild(C.createElement("div"));let R=C.createElement("div");R.className="contract-trigger",I.__resizeTriggers__.appendChild(F),I.__resizeTriggers__.appendChild(R),I.appendChild(I.__resizeTriggers__),u(I),I.addEventListener("scroll",f,!0),r&&(I.__resizeTriggers__.__animationListener__=function(Y){Y.animationName===n&&u(I)},I.__resizeTriggers__.addEventListener(r,I.__resizeTriggers__.__animationListener__))}I.__resizeListeners__.push(A)}},removeResizeListener:function(I,A){if(h)I.detachEvent("onresize",A);else if(I.__resizeListeners__.splice(I.__resizeListeners__.indexOf(A),1),!I.__resizeListeners__.length){I.removeEventListener("scroll",f,!0),I.__resizeTriggers__.__animationListener__&&(I.__resizeTriggers__.removeEventListener(r,I.__resizeTriggers__.__animationListener__),I.__resizeTriggers__.__animationListener__=null);try{I.__resizeTriggers__=!I.removeChild(I.__resizeTriggers__)}catch{}}}}}var hE=class extends gE.Component{constructor(...t){super(...t),this.state={height:this.props.defaultHeight||0,scaledHeight:this.props.defaultHeight||0,scaledWidth:this.props.defaultWidth||0,width:this.props.defaultWidth||0},this._autoSizer=null,this._detectElementResize=null,this._parentNode=null,this._resizeObserver=null,this._timeoutId=null,this._onResize=()=>{this._timeoutId=null;let{disableHeight:n,disableWidth:r,onResize:o}=this.props;if(this._parentNode){let i=window.getComputedStyle(this._parentNode)||{},u=parseFloat(i.paddingLeft||"0"),f=parseFloat(i.paddingRight||"0"),h=parseFloat(i.paddingTop||"0"),y=parseFloat(i.paddingBottom||"0"),O=this._parentNode.getBoundingClientRect(),S=O.height-h-y,I=O.width-u-f,A=this._parentNode.offsetHeight-h-y,C=this._parentNode.offsetWidth-u-f;(!n&&(this.state.height!==A||this.state.scaledHeight!==S)||!r&&(this.state.width!==C||this.state.scaledWidth!==I))&&(this.setState({height:A,width:C,scaledHeight:S,scaledWidth:I}),typeof o=="function"&&o({height:A,scaledHeight:S,scaledWidth:I,width:C}))}},this._setRef=n=>{this._autoSizer=n}}componentDidMount(){let{nonce:t}=this.props,n=this._autoSizer?this._autoSizer.parentNode:null;if(n!=null&&n.ownerDocument&&n.ownerDocument.defaultView&&n instanceof n.ownerDocument.defaultView.HTMLElement){this._parentNode=n;let r=n.ownerDocument.defaultView.ResizeObserver;r!=null?(this._resizeObserver=new r(()=>{this._timeoutId=setTimeout(this._onResize,0)}),this._resizeObserver.observe(n)):(this._detectElementResize=awt(t),this._detectElementResize.addResizeListener(n,this._onResize)),this._onResize()}}componentWillUnmount(){this._parentNode&&(this._detectElementResize&&this._detectElementResize.removeResizeListener(this._parentNode,this._onResize),this._timeoutId!==null&&clearTimeout(this._timeoutId),this._resizeObserver&&this._resizeObserver.disconnect())}render(){let{children:t,defaultHeight:n,defaultWidth:r,disableHeight:o=!1,disableWidth:i=!1,doNotBailOutOnEmptyChildren:u=!1,nonce:f,onResize:h,style:y={},tagName:O="div",...S}=this.props,{height:I,scaledHeight:A,scaledWidth:C,width:M}=this.state,F={overflow:"visible"},R={},B=!1;return o||(I===0&&(B=!0),F.height=0,R.height=I,R.scaledHeight=A),i||(M===0&&(B=!0),F.width=0,R.width=M,R.scaledWidth=C),u&&(B=!1),(0,gE.createElement)(O,{ref:this._setRef,style:{...F,...y},...S},!B&&t(R))}};function vE(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?vE=function(n){return typeof n}:vE=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},vE(e)}function lwt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function swt(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&_G(e,t)}function _G(e,t){return _G=Object.setPrototypeOf||function(r,o){return r.__proto__=o,r},_G(e,t)}function uwt(e){var t=fwt();return function(){var r=yE(e),o;if(t){var i=yE(this).constructor;o=Reflect.construct(r,arguments,i)}else o=r.apply(this,arguments);return cwt(this,o)}}function cwt(e,t){if(t&&(vE(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return pwt(e)}function pwt(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function fwt(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function yE(e){return yE=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},yE(e)}var SG=function(e){swt(n,e);var t=uwt(n);function n(){return lwt(this,n),t.apply(this,arguments)}return n}(hE);var Ylr=k(L()),qo=k(mt()),PG=k(Ct()),EG=k(_d());var wE=k(_d());function bE(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?bE=function(n){return typeof n}:bE=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},bE(e)}var dwt="";var jG=function(t){var n;if(!t)return null;if(t.indexOf(",")>0){if(!/^[\s,.0-9]*$/.test(t))return null;var r=t.trim().split(",").filter(function(o){return o!==""}).map(Number);n=r.length>2&&r.length<5?r:dwt}else n=t;return n},R1e=function(t){var n=t;return typeof t=="string"&&(n=jG(t)),n?bE(n)==="object"?wE.default.valid(n,"rgb")||wE.default.valid(n,"rgba"):wE.default.valid(t,"hex"):!1};var mwt=["children","color","iconType","iconSide","className","isDisabled","onClick","iconOnClick","onClickAriaLabel","iconOnClickAriaLabel","closeButtonProps","href","rel","target","style"];function hwt(e){return bwt(e)||ywt(e)||vwt(e)||gwt()}function gwt(){throw new TypeError(`Invalid attempt to spread non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function vwt(e,t){if(e){if(typeof e=="string")return IG(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return IG(e,t)}}function ywt(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function bwt(e){if(Array.isArray(e))return IG(e)}function IG(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function xwt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var _wt="#000",Swt="#fff",r_=pv(),N1e={default:"#d3dae6",primary:r_[1],success:r_[0],accent:r_[2],warning:r_[5],danger:r_[9]},kG=Ht(N1e),F1e={left:"euiBadge--iconLeft",right:"euiBadge--iconRight"},asr=Ht(F1e),Oo=function(t){var n=t.children,r=t.color,o=r===void 0?"default":r,i=t.iconType,u=t.iconSide,f=u===void 0?"left":u,h=t.className,y=t.isDisabled,O=t.onClick,S=t.iconOnClick,I=t.onClickAriaLabel,A=t.iconOnClickAriaLabel,C=t.closeButtonProps,M=t.href,F=t.rel,R=t.target,B=t.style,Y=Owt(t,mwt),X=!M||da(M),le=y||!X,Z=B,K=null,de=4.5,se=null,_e=null;try{kG.indexOf(o)>-1?(_e=N1e[o],K=D1e(_e),Z=L1e({backgroundColor:_e,color:K},Z)):o!=="hollow"&&(K=D1e(o),se=jwt(K,o),se"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function xE(e){return xE=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},xE(e)}function Mwt(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var U1e={after:"afterend",before:"beforebegin"},usr=Ht(U1e),Md=function(e){Ewt(n,e);var t=Cwt(n);function n(r){var o;if(Pwt(this,n),o=t.call(this,r),Mwt(H1e(o),"portalNode",null),typeof window>"u")return B1e(o);var i=o.props.insert;if(o.portalNode=document.createElement("div"),o.portalNode.dataset.euiportal="true",i==null)document.body.appendChild(o.portalNode);else{var u=i.sibling,f=i.position;u.insertAdjacentElement(U1e[f],o.portalNode)}return o}return kwt(n,[{key:"componentDidMount",value:function(){this.updatePortalRef(this.portalNode)}},{key:"componentWillUnmount",value:function(){var o;(o=this.portalNode)!==null&&o!==void 0&&o.parentNode&&this.portalNode.parentNode.removeChild(this.portalNode),this.updatePortalRef(null)}},{key:"updatePortalRef",value:function(o){this.props.portalRef&&this.props.portalRef(o)}},{key:"render",value:function(){return this.portalNode?(0,q1e.createPortal)(this.props.children,this.portalNode):null}}]),n}(V1e.Component);Md.propTypes={children:Lv.default.node.isRequired,insert:Lv.default.shape({sibling:Lv.default.any.isRequired,position:Lv.default.oneOf(["before","after"]).isRequired}),portalRef:Lv.default.func};var J1e=k(L()),Td=k(mt()),G1e=k(Ct());function _E(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?_E=function(n){return typeof n}:_E=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},_E(e)}var Twt=["children","title","className","positionToolTip","popoverRef"];function MG(){return MG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function zwt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function Lwt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function $1e(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function jE(e){return jE=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},jE(e)}function AG(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var RG=function(e){Nwt(n,e);var t=Fwt(n);function n(){var r;Lwt(this,n);for(var o=arguments.length,i=new Array(o),u=0;u=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Uwt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function $wt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function K1e(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function PE(e){return PE=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},PE(e)}function ma(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Q1e={top:"euiToolTip--top",right:"euiToolTip--right",bottom:"euiToolTip--bottom",left:"euiToolTip--left"},Ssr=Ht(Q1e),Qwt={regular:250,long:250*5},Zwt={inlineBlock:void 0,block:"euiToolTipAnchor--displayBlock"},Y1e={top:50,left:50,opacity:0,visibility:"hidden"},ha=function(e){Gwt(n,e);var t=Xwt(n);function n(){var r;$wt(this,n);for(var o=arguments.length,i=new Array(o),u=0;u=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function rOt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var EE=function(t){var n=t.type,r=n===void 0?"questionInCircle":n,o=t["aria-label"],i=o===void 0?"Info":o,u=t.color,f=t.size,h=t.iconProps,y=t.position,O=y===void 0?"top":y,S=t.delay,I=S===void 0?"regular":S,A=tOt(t,eOt);return a(ha,kE({position:O,delay:I},A),a(ir,kE({tabIndex:0,type:r,color:u,size:f,"aria-label":i},h)))};EE.propTypes={anchorClassName:Pi.default.string,className:Pi.default.string,content:Pi.default.node,display:Pi.default.oneOf(["inlineBlock","block"]),title:Pi.default.node,id:Pi.default.string,onMouseOut:Pi.default.func,color:Pi.default.string,type:Pi.default.oneOfType([Pi.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,Pi.default.string.isRequired,Pi.default.elementType.isRequired]),size:Pi.default.any,"aria-label":Pi.default.string,iconProps:Pi.default.any,delay:Pi.default.any,position:Pi.default.any};var nOt=["className","label","color","tooltipContent","tooltipPosition","title","iconType","onClick","onClickAriaLabel","href","rel","target","size"];function CE(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?CE=function(n){return typeof n}:CE=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},CE(e)}function n_(){return n_=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function iOt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var tme={accent:"euiBetaBadge--accent",subdued:"euiBetaBadge--subdued",hollow:"euiBetaBadge--hollow"},Bsr=Ht(tme),rme={s:"euiBetaBadge--small",m:null},Hsr=Ht(rme),AE=function(t){var n=t.className,r=t.label,o=t.color,i=o===void 0?"hollow":o,u=t.tooltipContent,f=t.tooltipPosition,h=f===void 0?"top":f,y=t.title,O=t.iconType,S=t.onClick,I=t.onClickAriaLabel,A=t.href,C=t.rel,M=t.target,F=t.size,R=F===void 0?"m":F,B=oOt(t,nOt),Y=!1;typeof r=="string"&&r.length===1&&(Y=!0);var X=(0,eme.default)("euiBetaBadge",{"euiBetaBadge--iconOnly":O,"euiBetaBadge--singleLetter":Y,"euiBetaBadge-isClickable":S||A},tme[i],rme[R],n),le;O&&(le=a(ir,{className:"euiBetaBadge__icon",type:O,size:R==="m"?"m":"s","aria-hidden":"true",color:"inherit"}));var Z=A?"a":"button",K={};A&&(K.href=A,K.target=M,K.rel=ni({href:A,target:M,rel:C})),S&&(K.onClick=S);var de;if(S||A)return de=a(Z,n_({"aria-label":I,className:X,title:typeof r=="string"?r:y},K,B),le||r),u?a(ha,{position:h,content:u,title:y||r},de):a(Z1e.Fragment,null,de);if(u)return a(ha,{position:h,content:u,title:y||r},a("span",n_({tabIndex:0,className:X,role:"button"},B),le||r));var se=y||r;return se&&typeof se!="string"&&console.warn("Only string titles are permitted on badges that do not use tooltips. Found: ".concat(CE(se))),a("span",n_({className:X,title:se},B),le||r)};AE.propTypes={className:In.default.string,"aria-label":In.default.string,"data-test-subj":In.default.string,onClick:In.default.func,onClickAriaLabel:In.default.any,href:In.default.string,target:In.default.string,rel:In.default.string,iconType:In.default.oneOfType([In.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,In.default.string.isRequired,In.default.elementType.isRequired]),label:In.default.oneOfType([In.default.node.isRequired,In.default.oneOfType([In.default.node.isRequired,In.default.string.isRequired]).isRequired]).isRequired,tooltipContent:In.default.oneOfType([In.default.node,In.default.oneOfType([In.default.node,In.default.node.isRequired])]),tooltipPosition:In.default.oneOf(["top","right","bottom","left"]),title:In.default.oneOfType([In.default.string,In.default.oneOfType([In.default.string.isRequired,In.default.string])]),color:In.default.oneOf(["accent","subdued","hollow"]),size:In.default.oneOf(["s","m"])};var nme=k(_d());var Uo=function(t,n,r){var o=r===xd.dark?n*3.5:n*1;return(0,nme.default)(t).alpha(o).css()};var aOt=function(t){var n=t.euiTheme,r=t.colorMode,o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=o.color,u=i||n.colors.shadow;return` box-shadow: - 0 .8px .8px `.concat($o(u,.04,r),`, - 0 2.3px 2px `).concat($o(u,.03,r),`; -`)},oOt=function(t){var n=t.euiTheme,r=t.colorMode,o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=o.color,u=i||n.colors.shadow;return` + 0 .8px .8px `.concat(Uo(u,.04,r),`, + 0 2.3px 2px `).concat(Uo(u,.03,r),`; +`)},lOt=function(t){var n=t.euiTheme,r=t.colorMode,o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=o.color,u=i||n.colors.shadow;return` box-shadow: - 0 .7px 1.4px `.concat($o(u,.07,r),`, - 0 1.9px 4px `).concat($o(u,.05,r),`, - 0 4.5px 10px `).concat($o(u,.05,r),`; -`)},TG=function(t){var n=t.euiTheme,r=t.colorMode,o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=o.color,u=o.property,f=i||n.colors.shadow,h=["0 .9px 4px ".concat($o(f,.08,r)),"0 2.6px 8px ".concat($o(f,.06,r)),"0 5.7px 12px ".concat($o(f,.05,r)),"0 15px 15px ".concat($o(f,.04,r))];return u==="filter"?"filter: ".concat(h.reduce(function(y,O){return"".concat(y," drop-shadow(").concat(O,")")},""),";"):"box-shadow: ".concat(h.map(function(y){return y}),";")},iOt=function(t){var n=t.euiTheme,r=t.colorMode,o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=o.color,u=i||n.colors.shadow;return` + 0 .7px 1.4px `.concat(Uo(u,.07,r),`, + 0 1.9px 4px `).concat(Uo(u,.05,r),`, + 0 4.5px 10px `).concat(Uo(u,.05,r),`; +`)},NG=function(t){var n=t.euiTheme,r=t.colorMode,o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=o.color,u=o.property,f=i||n.colors.shadow,h=["0 .9px 4px ".concat(Uo(f,.08,r)),"0 2.6px 8px ".concat(Uo(f,.06,r)),"0 5.7px 12px ".concat(Uo(f,.05,r)),"0 15px 15px ".concat(Uo(f,.04,r))];return u==="filter"?"filter: ".concat(h.reduce(function(y,O){return"".concat(y," drop-shadow(").concat(O,")")},""),";"):"box-shadow: ".concat(h.map(function(y){return y}),";")},sOt=function(t){var n=t.euiTheme,r=t.colorMode,o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=o.color,u=i||n.colors.shadow;return` box-shadow: - 0 1px 5px `.concat($o(u,.1,r),`, - 0 3.6px 13px `).concat($o(u,.07,r),`, - 0 8.4px 23px `).concat($o(u,.06,r),`, - 0 23px 35px `).concat($o(u,.05,r),`; -`)},aOt=function(t){var n=t.euiTheme,r=t.colorMode,o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=o.color,u=o.reverse,f=i||n.colors.shadow;return` + 0 1px 5px `.concat(Uo(u,.1,r),`, + 0 3.6px 13px `).concat(Uo(u,.07,r),`, + 0 8.4px 23px `).concat(Uo(u,.06,r),`, + 0 23px 35px `).concat(Uo(u,.05,r),`; +`)},uOt=function(t){var n=t.euiTheme,r=t.colorMode,o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=o.color,u=o.reverse,f=i||n.colors.shadow;return` box-shadow: - 0 `.concat(u?"-":"","2.7px 9px ").concat($o(f,.13,r),`, - 0 `).concat(u?"-":"","9.4px 24px ").concat($o(f,.09,r),`, - 0 `).concat(u?"-":"","21.8px 43px ").concat($o(f,.08,r),`; -`)};var rme=function(t){var n=t.euiTheme,r=t.colorMode,o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=o.color,u=i||n.colors.shadow;return` + 0 `.concat(u?"-":"","2.7px 9px ").concat(Uo(f,.13,r),`, + 0 `).concat(u?"-":"","9.4px 24px ").concat(Uo(f,.09,r),`, + 0 `).concat(u?"-":"","21.8px 43px ").concat(Uo(f,.08,r),`; +`)};var ome=function(t){var n=t.euiTheme,r=t.colorMode,o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=o.color,u=i||n.colors.shadow;return` box-shadow: - 0 0 .8px `.concat($o(u,.06,r),`, - 0 0 2px `).concat($o(u,.04,r),`, - 0 0 5px `).concat($o(u,.04,r),`, - 0 0 17px `).concat($o(u,.03,r),`; -`)};var r_=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"l",r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},o=r.color;switch(n){case"xs":return nOt(t,{color:o});case"s":return oOt(t,{color:o});case"m":return TG(t,{color:o});case"l":return iOt(t,{color:o});case"xl":return aOt(t,{color:o});default:return console.warn("Please provide a valid size option to useEuiShadow"),""}};var ime=P(L()),Td=P(dt()),RG=P(Ct());var lOt=["children","color","className","href","external","target","rel","type","onClick","disabled"];function IE(){return IE=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function cOt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var U1=(0,ime.forwardRef)(function(e,t){var n=e.children,r=e.color,o=r===void 0?"primary":r,i=e.className,u=e.href,f=e.external,h=e.target,y=e.rel,O=e.type,S=O===void 0?"button":O,I=e.onClick,A=e.disabled,C=uOt(e,lOt),M=en(),W=a1e(M),R=[W.euiLink],B=[W.euiLink__screenReaderText],Y=[W.euiLink__externalIcon],X=!u||ma(u),ae=A||!X,Z=a(qn,{css:B},a("span",null,a(At,{token:"euiLink.newTarget.screenReaderOnlyText",default:"(opens in a new tab or window)"}))),K=a(ar,{"aria-label":To("euiLink.external.ariaLabel","External link"),size:"s",css:Y,type:"popout"});if(u===void 0||!X){var de=ome({className:(0,RG.default)("euiLink",i),css:[R,ae?[W.disabled]:W[o]],type:S,onClick:I,disabled:ae},C);return a("button",IE({ref:t},de),n)}var se=ni({href:u,target:h,rel:y}),Se=ome({className:(0,RG.default)("euiLink",i),css:[R,W[o]],href:u,target:h,rel:se,onClick:I},C),Oe=h==="_blank"&&f!==!1||f===!0;return a("a",IE({ref:t},Se),n,Oe&&K,h==="_blank"&&Z)});U1.propTypes={className:Td.default.string,"aria-label":Td.default.string,"data-test-subj":Td.default.string,type:Td.default.oneOf(["button","reset","submit"]),color:Td.default.any,onClick:Td.default.func,external:Td.default.bool};U1.displayName="EuiLink";var mc=P(L()),Ep=P(dt()),Bhe=P(Ct());var yhe=P(L()),Pp=P(dt());var yi=function(){return yi=Object.assign||function(t){for(var n,r=1,o=arguments.length;r=0}).sort(_Ot)};var Mme=["button:enabled","select:enabled","textarea:enabled","input:enabled","a[href]","area[href]","summary","iframe","object","embed","audio[controls]","video[controls]","[tabindex]","[contenteditable]","[autofocus]"];var UG=Mme.join(","),jOt="".concat(UG,", [data-focus-guard]"),Tme=function(e,t){return ya((e.shadowRoot||e).children).reduce(function(n,r){return n.concat(r.matches(t?jOt:UG)?[r]:[],Tme(r))},[])},IOt=function(e,t){var n;return e instanceof HTMLIFrameElement&&(!((n=e.contentDocument)===null||n===void 0)&&n.body)?zd([e.contentDocument.body],t):[e]},zd=function(e,t){return e.reduce(function(n,r){var o,i=Tme(r,t),u=(o=[]).concat.apply(o,i.map(function(f){return IOt(f,t)}));return n.concat(u,r.parentNode?ya(r.parentNode.querySelectorAll(UG)).filter(function(f){return f===r}):[])},[])},Rme=function(e){var t=e.querySelectorAll("[".concat(gme,"]"));return ya(t).map(function(n){return zd([n])}).reduce(function(n,r){return n.concat(r)},[])};var $G=function(e,t){return ya(e).filter(function(n){return BG(t,n)}).filter(function(n){return Cme(n)})},JG=function(e,t){return t===void 0&&(t=new Map),ya(e).filter(function(n){return HG(t,n)})},c_=function(e,t,n){return u_($G(zd(e,n),t),!0,n)},Wv=function(e,t){return u_($G(zd(e),t),!1)},zme=function(e,t){return $G(Rme(e),t)},ou=function(e,t){return e.shadowRoot?ou(e.shadowRoot,t):Object.getPrototypeOf(e).contains!==void 0&&Object.getPrototypeOf(e).contains.call(e,t)?!0:ya(e.children).some(function(n){var r;if(n instanceof HTMLIFrameElement){var o=(r=n.contentDocument)===null||r===void 0?void 0:r.body;return o?ou(o,t):!1}return ou(n,t)})};var kOt=function(e){for(var t=new Set,n=e.length,r=0;r0&&t.add(o),(i&Node.DOCUMENT_POSITION_CONTAINS)>0&&t.add(r)}return e.filter(function(u,f){return!t.has(f)})},Lme=function(e){return e.parentNode?Lme(e.parentNode):e},Bv=function(e){var t=nu(e);return t.filter(Boolean).reduce(function(n,r){var o=r.getAttribute(i_);return n.push.apply(n,o?kOt(ya(Lme(r).querySelectorAll("[".concat(i_,'="').concat(o,'"]:not([').concat(AE,'="disabled"])')))):[r]),n},[])};var Dme=function(e){try{return e()}catch{return}};var Ld=function(e){if(e===void 0&&(e=document),!(!e||!e.activeElement)){var t=e.activeElement;return t.shadowRoot?Ld(t.shadowRoot):t instanceof HTMLIFrameElement&&Dme(function(){return t.contentWindow.document})?Ld(t.contentWindow.document):t}};var POt=function(e,t){return e===t},EOt=function(e,t){return!!ya(e.querySelectorAll("iframe")).some(function(n){return POt(n,t)})},WE=function(e,t){return t===void 0&&(t=Ld(FE(e).ownerDocument)),!t||t.dataset&&t.dataset.focusGuard?!1:Bv(e).some(function(n){return ou(n,t)||EOt(n,t)})};var GG=function(e){e===void 0&&(e=document);var t=Ld(e);return t?ya(e.querySelectorAll("[".concat(hme,"]"))).some(function(n){return ou(n,t)}):!1};var COt=function(e,t){return t.filter(qG).filter(function(n){return n.name===e.name}).filter(function(n){return n.checked})[0]||e},BE=function(e,t){return qG(e)&&e.name?COt(e,t):e},Nme=function(e){var t=new Set;return e.forEach(function(n){return t.add(BE(n,e))}),e.filter(function(n){return t.has(n)})};var XG=function(e){return e[0]&&e.length>1?BE(e[0],e):e[0]},KG=function(e,t){return e.indexOf(BE(t,e))};var HE="NEW_FOCUS",Fme=function(e,t,n,r,o){var i=e.length,u=e[0],f=e[i-1],h=l_(r);if(!(r&&e.indexOf(r)>=0)){var y=r!==void 0?n.indexOf(r):-1,O=o?n.indexOf(o):y,S=o?e.indexOf(o):-1;if(y===-1)return S!==-1?S:HE;if(S===-1)return HE;var I=y-O,A=n.indexOf(u),C=n.indexOf(f),M=Nme(n),W=r!==void 0?M.indexOf(r):-1,R=W-(o?M.indexOf(o):y);if(!I&&S>=0||t.length===0)return S;var B=KG(e,t[0]),Y=KG(e,t[t.length-1]);if(y<=A&&h&&Math.abs(I)>1)return Y;if(y>=C&&h&&Math.abs(I)>1)return B;if(I&&Math.abs(R)>1)return S;if(y<=A)return Y;if(y>C)return B;if(I)return Math.abs(I)>1?S:(i+S+I)%i}};var AOt=function(e){return function(t){var n,r=(n=VG(t))===null||n===void 0?void 0:n.autofocus;return t.autofocus||r!==void 0&&r!=="false"||e.indexOf(t)>=0}},YG=function(e,t,n){var r=e.map(function(i){var u=i.node;return u}),o=JG(r.filter(AOt(n)));return o&&o.length?XG(o):XG(JG(t))};var ZG=function(e,t){return t===void 0&&(t=[]),t.push(e),e.parentNode&&ZG(e.parentNode.host||e.parentNode,t),t},QG=function(e,t){for(var n=ZG(e),r=ZG(t),o=0;o=0)return i}return!1},VE=function(e,t,n){var r=nu(e),o=nu(t),i=r[0],u=!1;return o.filter(Boolean).forEach(function(f){u=QG(u||f,f)||u,n.filter(Boolean).forEach(function(h){var y=QG(i,h);y&&(!u||ou(y,u)?u=y:u=QG(y,u))})}),u},eX=function(e,t){return e.reduce(function(n,r){return n.concat(zme(r,t))},[])};var MOt=function(e,t){var n=new Map;return t.forEach(function(r){return n.set(r.node,r)}),e.map(function(r){return n.get(r)}).filter(Ame)},Wme=function(e,t){var n=Ld(nu(e).length>0?document:FE(e).ownerDocument),r=Bv(e).filter(s_),o=VE(n||e,e,r),i=new Map,u=Wv(r,i),f=u.filter(function(C){var M=C.node;return s_(M)});if(f[0]){var h=Wv([o],i).map(function(C){var M=C.node;return M}),y=MOt(h,f),O=y.map(function(C){var M=C.node;return M}),S=y.filter(function(C){var M=C.tabIndex;return M>=0}).map(function(C){var M=C.node;return M}),I=Fme(O,S,h,n,t);if(I===HE){var A=YG(u,S,eX(r,i))||YG(u,O,eX(r,i));if(A)return{node:A};console.warn("focus-lock: cannot find any node to move focus into");return}return I===void 0?I:y[I]}};var tX=function(e){var t=Bv(e).filter(s_),n=VE(e,e,t),r=u_(zd([n],!0),!0,!0),o=zd(t,!1);return r.map(function(i){var u=i.node,f=i.index;return{node:u,index:f,lockItem:o.indexOf(u)>=0,guard:l_(u)}})};var p_=function(e,t){e&&("focus"in e&&e.focus(t),"contentWindow"in e&&e.contentWindow&&e.contentWindow.focus())};var rX=0,nX=!1,qE=function(e,t,n){n===void 0&&(n={});var r=Wme(e,t);if(!nX&&r){if(rX>2){console.error("FocusLock: focus-fighting detected. Only one focus management system could be active. See https://github.com/theKashey/focus-lock/#focus-fighting"),nX=!0,setTimeout(function(){nX=!1},1);return}rX++,p_(r.node,n.focusOptions),rX--}};function f_(e){if(!e)return null;var t=e?new WeakRef(e):null;return function(){return t?.deref()||null}}var TOt=function(e){if(!e)return null;for(var t=[],n=e;n&&n!==document.body;)t.push({current:f_(n),parent:f_(n.parentElement),left:f_(n.previousElementSibling),right:f_(n.nextElementSibling)}),n=n.parentElement;return{element:f_(e),stack:t,ownerDocument:e.ownerDocument}},ROt=function(e){var t,n,r,o,i;if(e)for(var u=e.stack,f=e.ownerDocument,h=new Map,y=0,O=u;y-1&&(A.filter(function(M){var W=M.guard,R=M.node;return W&&R.dataset.focusAutoGuard}).forEach(function(M){var W=M.node;return W.removeAttribute("tabIndex")}),qme(C,A.length,1,A),qme(C,-1,-1,A))}}}return t},$me=function(t){UE()&&t&&(t.stopPropagation(),t.preventDefault())},$E=function(){return zE(UE)},Jme=function(t){var n=t.target,r=t.currentTarget;r.contains(n)||BOt(r,n)},$Ot=function(){return null},JOt=function(t){var n=t.children;return Ume.createElement("div",{onBlur:$E,onFocus:Jme},n)};JOt.propTypes={};var Gme=function(){d_="just",zE(function(){d_="meanwhile"})},GOt=function(){document.addEventListener("focusin",$me),document.addEventListener("focusout",$E),window.addEventListener("blur",Gme)},XOt=function(){document.removeEventListener("focusin",$me),document.removeEventListener("focusout",$E),window.removeEventListener("blur",Gme)};function KOt(e){return e.filter(function(t){var n=t.disabled;return!n})}var Xme={moveFocusInside:qE,focusInside:WE,focusNextElement:iX,focusPrevElement:aX,focusFirstElement:lX,focusLastElement:sX,captureFocusRestore:oX};function YOt(e){var t=e.slice(-1)[0];t&&!Vv&&GOt();var n=Vv,r=n&&t&&t.id===n.id;Vv=t,n&&!r&&(n.onDeactivation(),e.filter(function(o){var i=o.id;return i===n.id}).length||n.returnFocus(!t)),t?(Hv=null,(!r||n.observed!==t.observed)&&t.onActivation(Xme),UE(!0),zE(UE)):(XOt(),Hv=null)}ME.assignSyncMedium(Jme);TE.assignMedium($E);yme.assignMedium(function(e){return e(Xme)});var Kme=Ime(KOt,YOt)($Ot);var Wpr=K1(RE,Kme);var uo=P(L());var $v=P(L());var Zme=P(L());var Yme;var Qme=function(){if(Yme)return Yme;if(typeof __webpack_nonce__<"u")return __webpack_nonce__};function QOt(){if(!document)return null;var e=document.createElement("style");e.type="text/css";var t=Qme();return t&&e.setAttribute("nonce",t),e}function ZOt(e,t){e.styleSheet?e.styleSheet.cssText=t:e.appendChild(document.createTextNode(t))}function e7t(e){var t=document.head||document.getElementsByTagName("head")[0];t.appendChild(e)}var uX=function(){var e=0,t=null;return{add:function(n){e==0&&(t=QOt())&&(ZOt(t,n),e7t(t)),e++},remove:function(){e--,!e&&t&&(t.parentNode&&t.parentNode.removeChild(t),t=null)}}};var cX=function(){var e=uX();return function(t,n){Zme.useEffect(function(){return e.add(t),function(){e.remove()}},[t&&n])}};var Y1=function(){var e=cX(),t=function(n){var r=n.styles,o=n.dynamic;return e(r,o),null};return t};var t7t={left:0,top:0,right:0,gap:0},pX=function(e){return parseInt(e||"",10)||0},r7t=function(e){var t=window.getComputedStyle(document.body),n=t[e==="padding"?"paddingLeft":"marginLeft"],r=t[e==="padding"?"paddingTop":"marginTop"],o=t[e==="padding"?"paddingRight":"marginRight"];return[pX(n),pX(r),pX(o)]},fX=function(e){if(e===void 0&&(e="margin"),typeof window>"u")return t7t;var t=r7t(e),n=document.documentElement.clientWidth,r=window.innerWidth;return{left:t[0],top:t[1],right:t[2],gap:Math.max(0,r-n+t[2]-t[0])}};var n7t=Y1(),Uv="data-scroll-locked",o7t=function(e,t,n,r){var o=e.left,i=e.top,u=e.right,f=e.gap;return n===void 0&&(n="margin"),` - .`.concat(zG,` { + 0 0 .8px `.concat(Uo(u,.06,r),`, + 0 0 2px `).concat(Uo(u,.04,r),`, + 0 0 5px `).concat(Uo(u,.04,r),`, + 0 0 17px `).concat(Uo(u,.03,r),`; +`)};var o_=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"l",r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},o=r.color;switch(n){case"xs":return aOt(t,{color:o});case"s":return lOt(t,{color:o});case"m":return NG(t,{color:o});case"l":return sOt(t,{color:o});case"xl":return uOt(t,{color:o});default:return console.warn("Please provide a valid size option to useEuiShadow"),""}};var lme=k(L()),Rd=k(mt()),FG=k(Ct());var cOt=["children","color","className","href","external","target","rel","type","onClick","disabled"];function ME(){return ME=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function dOt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var J1=(0,lme.forwardRef)(function(e,t){var n=e.children,r=e.color,o=r===void 0?"primary":r,i=e.className,u=e.href,f=e.external,h=e.target,y=e.rel,O=e.type,S=O===void 0?"button":O,I=e.onClick,A=e.disabled,C=fOt(e,cOt),M=en(),F=s1e(M),R=[F.euiLink],B=[F.euiLink__screenReaderText],Y=[F.euiLink__externalIcon],X=!u||da(u),le=A||!X,Z=a(Un,{css:B},a("span",null,a(At,{token:"euiLink.newTarget.screenReaderOnlyText",default:"(opens in a new tab or window)"}))),K=a(ir,{"aria-label":To("euiLink.external.ariaLabel","External link"),size:"s",css:Y,type:"popout"});if(u===void 0||!X){var de=ame({className:(0,FG.default)("euiLink",i),css:[R,le?[F.disabled]:F[o]],type:S,onClick:I,disabled:le},C);return a("button",ME({ref:t},de),n)}var se=ni({href:u,target:h,rel:y}),_e=ame({className:(0,FG.default)("euiLink",i),css:[R,F[o]],href:u,target:h,rel:se,onClick:I},C),be=h==="_blank"&&f!==!1||f===!0;return a("a",ME({ref:t},_e),n,be&&K,h==="_blank"&&Z)});J1.propTypes={className:Rd.default.string,"aria-label":Rd.default.string,"data-test-subj":Rd.default.string,type:Rd.default.oneOf(["button","reset","submit"]),color:Rd.default.any,onClick:Rd.default.func,external:Rd.default.bool};J1.displayName="EuiLink";var gc=k(L()),Ap=k(mt()),qhe=k(Ct());var Ohe=k(L()),Cp=k(mt());var Da=function(){return Da=Object.assign||function(t){for(var n,r=1,o=arguments.length;r=0}).sort(IOt)};var zme=["button:enabled","select:enabled","textarea:enabled","input:enabled","a[href]","area[href]","summary","iframe","object","embed","audio[controls]","video[controls]","[tabindex]","[contenteditable]","[autofocus]"];var KG=zme.join(","),kOt="".concat(KG,", [data-focus-guard]"),Lme=function(e,t){return va((e.shadowRoot||e).children).reduce(function(n,r){return n.concat(r.matches(t?kOt:KG)?[r]:[],Lme(r))},[])},EOt=function(e,t){var n;return e instanceof HTMLIFrameElement&&(!((n=e.contentDocument)===null||n===void 0)&&n.body)?Ld([e.contentDocument.body],t):[e]},Ld=function(e,t){return e.reduce(function(n,r){var o,i=Lme(r,t),u=(o=[]).concat.apply(o,i.map(function(f){return EOt(f,t)}));return n.concat(u,r.parentNode?va(r.parentNode.querySelectorAll(KG)).filter(function(f){return f===r}):[])},[])},Dme=function(e){var t=e.querySelectorAll("[".concat(bme,"]"));return va(t).map(function(n){return Ld([n])}).reduce(function(n,r){return n.concat(r)},[])};var YG=function(e,t){return va(e).filter(function(n){return $G(t,n)}).filter(function(n){return Tme(n)})},QG=function(e,t){return t===void 0&&(t=new Map),va(e).filter(function(n){return JG(t,n)})},d_=function(e,t,n){return f_(YG(Ld(e,n),t),!0,n)},Bv=function(e,t){return f_(YG(Ld(e),t),!1)},Nme=function(e,t){return YG(Dme(e),t)},au=function(e,t){return e.shadowRoot?au(e.shadowRoot,t):Object.getPrototypeOf(e).contains!==void 0&&Object.getPrototypeOf(e).contains.call(e,t)?!0:va(e.children).some(function(n){var r;if(n instanceof HTMLIFrameElement){var o=(r=n.contentDocument)===null||r===void 0?void 0:r.body;return o?au(o,t):!1}return au(n,t)})};var COt=function(e){for(var t=new Set,n=e.length,r=0;r0&&t.add(o),(i&Node.DOCUMENT_POSITION_CONTAINS)>0&&t.add(r)}return e.filter(function(u,f){return!t.has(f)})},Fme=function(e){return e.parentNode?Fme(e.parentNode):e},Hv=function(e){var t=iu(e);return t.filter(Boolean).reduce(function(n,r){var o=r.getAttribute(s_);return n.push.apply(n,o?COt(va(Fme(r).querySelectorAll("[".concat(s_,'="').concat(o,'"]:not([').concat(DE,'="disabled"])')))):[r]),n},[])};var Wme=function(e){try{return e()}catch{return}};var Dd=function(e){if(e===void 0&&(e=document),!(!e||!e.activeElement)){var t=e.activeElement;return t.shadowRoot?Dd(t.shadowRoot):t instanceof HTMLIFrameElement&&Wme(function(){return t.contentWindow.document})?Dd(t.contentWindow.document):t}};var AOt=function(e,t){return e===t},MOt=function(e,t){return!!va(e.querySelectorAll("iframe")).some(function(n){return AOt(n,t)})},$E=function(e,t){return t===void 0&&(t=Dd(UE(e).ownerDocument)),!t||t.dataset&&t.dataset.focusGuard?!1:Hv(e).some(function(n){return au(n,t)||MOt(n,t)})};var ZG=function(e){e===void 0&&(e=document);var t=Dd(e);return t?va(e.querySelectorAll("[".concat(yme,"]"))).some(function(n){return au(n,t)}):!1};var TOt=function(e,t){return t.filter(XG).filter(function(n){return n.name===e.name}).filter(function(n){return n.checked})[0]||e},JE=function(e,t){return XG(e)&&e.name?TOt(e,t):e},Bme=function(e){var t=new Set;return e.forEach(function(n){return t.add(JE(n,e))}),e.filter(function(n){return t.has(n)})};var eX=function(e){return e[0]&&e.length>1?JE(e[0],e):e[0]},tX=function(e,t){return e.indexOf(JE(t,e))};var GE="NEW_FOCUS",Hme=function(e,t,n,r,o){var i=e.length,u=e[0],f=e[i-1],h=c_(r);if(!(r&&e.indexOf(r)>=0)){var y=r!==void 0?n.indexOf(r):-1,O=o?n.indexOf(o):y,S=o?e.indexOf(o):-1;if(y===-1)return S!==-1?S:GE;if(S===-1)return GE;var I=y-O,A=n.indexOf(u),C=n.indexOf(f),M=Bme(n),F=r!==void 0?M.indexOf(r):-1,R=F-(o?M.indexOf(o):y);if(!I&&S>=0||t.length===0)return S;var B=tX(e,t[0]),Y=tX(e,t[t.length-1]);if(y<=A&&h&&Math.abs(I)>1)return Y;if(y>=C&&h&&Math.abs(I)>1)return B;if(I&&Math.abs(R)>1)return S;if(y<=A)return Y;if(y>C)return B;if(I)return Math.abs(I)>1?S:(i+S+I)%i}};var ROt=function(e){return function(t){var n,r=(n=GG(t))===null||n===void 0?void 0:n.autofocus;return t.autofocus||r!==void 0&&r!=="false"||e.indexOf(t)>=0}},rX=function(e,t,n){var r=e.map(function(i){var u=i.node;return u}),o=QG(r.filter(ROt(n)));return o&&o.length?eX(o):eX(QG(t))};var oX=function(e,t){return t===void 0&&(t=[]),t.push(e),e.parentNode&&oX(e.parentNode.host||e.parentNode,t),t},nX=function(e,t){for(var n=oX(e),r=oX(t),o=0;o=0)return i}return!1},XE=function(e,t,n){var r=iu(e),o=iu(t),i=r[0],u=!1;return o.filter(Boolean).forEach(function(f){u=nX(u||f,f)||u,n.filter(Boolean).forEach(function(h){var y=nX(i,h);y&&(!u||au(y,u)?u=y:u=nX(y,u))})}),u},iX=function(e,t){return e.reduce(function(n,r){return n.concat(Nme(r,t))},[])};var zOt=function(e,t){var n=new Map;return t.forEach(function(r){return n.set(r.node,r)}),e.map(function(r){return n.get(r)}).filter(Rme)},Vme=function(e,t){var n=Dd(iu(e).length>0?document:UE(e).ownerDocument),r=Hv(e).filter(p_),o=XE(n||e,e,r),i=new Map,u=Bv(r,i),f=u.filter(function(C){var M=C.node;return p_(M)});if(f[0]){var h=Bv([o],i).map(function(C){var M=C.node;return M}),y=zOt(h,f),O=y.map(function(C){var M=C.node;return M}),S=y.filter(function(C){var M=C.tabIndex;return M>=0}).map(function(C){var M=C.node;return M}),I=Hme(O,S,h,n,t);if(I===GE){var A=rX(u,S,iX(r,i))||rX(u,O,iX(r,i));if(A)return{node:A};console.warn("focus-lock: cannot find any node to move focus into");return}return I===void 0?I:y[I]}};var aX=function(e){var t=Hv(e).filter(p_),n=XE(e,e,t),r=f_(Ld([n],!0),!0,!0),o=Ld(t,!1);return r.map(function(i){var u=i.node,f=i.index;return{node:u,index:f,lockItem:o.indexOf(u)>=0,guard:c_(u)}})};var m_=function(e,t){e&&("focus"in e&&e.focus(t),"contentWindow"in e&&e.contentWindow&&e.contentWindow.focus())};var lX=0,sX=!1,KE=function(e,t,n){n===void 0&&(n={});var r=Vme(e,t);if(!sX&&r){if(lX>2){console.error("FocusLock: focus-fighting detected. Only one focus management system could be active. See https://github.com/theKashey/focus-lock/#focus-fighting"),sX=!0,setTimeout(function(){sX=!1},1);return}lX++,m_(r.node,n.focusOptions),lX--}};function h_(e){if(!e)return null;if(typeof WeakRef>"u")return function(){return e||null};var t=e?new WeakRef(e):null;return function(){return t?.deref()||null}}var LOt=function(e){if(!e)return null;for(var t=[],n=e;n&&n!==document.body;)t.push({current:h_(n),parent:h_(n.parentElement),left:h_(n.previousElementSibling),right:h_(n.nextElementSibling)}),n=n.parentElement;return{element:h_(e),stack:t,ownerDocument:e.ownerDocument}},DOt=function(e){var t,n,r,o,i;if(e)for(var u=e.stack,f=e.ownerDocument,h=new Map,y=0,O=u;y-1&&(A.filter(function(M){var F=M.guard,R=M.node;return F&&R.dataset.focusAutoGuard}).forEach(function(M){var F=M.node;return F.removeAttribute("tabIndex")}),Jme(C,A.length,1,A),Jme(C,-1,-1,A))}}}return t},Xme=function(t){YE()&&t&&(t.stopPropagation(),t.preventDefault())},QE=function(){return BE(YE)},Kme=function(t){var n=t.target,r=t.currentTarget;r.contains(n)||qOt(r,n)},XOt=function(){return null},KOt=function(t){var n=t.children;return Gme.createElement("div",{onBlur:QE,onFocus:Kme},n)};KOt.propTypes={};var Yme=function(){g_="just",BE(function(){g_="meanwhile"})},YOt=function(){document.addEventListener("focusin",Xme),document.addEventListener("focusout",QE),window.addEventListener("blur",Yme)},QOt=function(){document.removeEventListener("focusin",Xme),document.removeEventListener("focusout",QE),window.removeEventListener("blur",Yme)};function ZOt(e){return e.filter(function(t){var n=t.disabled;return!n})}var Qme={moveFocusInside:KE,focusInside:$E,focusNextElement:cX,focusPrevElement:pX,focusFirstElement:fX,focusLastElement:dX,captureFocusRestore:uX};function e7t(e){var t=e.slice(-1)[0];t&&!qv&&YOt();var n=qv,r=n&&t&&t.id===n.id;qv=t,n&&!r&&(n.onDeactivation(),e.filter(function(o){var i=o.id;return i===n.id}).length||n.returnFocus(!t)),t?(Vv=null,(!r||n.observed!==t.observed)&&t.onActivation(Qme),YE(!0),BE(YE)):(QOt(),Vv=null)}NE.assignSyncMedium(Kme);FE.assignMedium(QE);Ome.assignMedium(function(e){return e(Qme)});var Zme=Eme(ZOt,e7t)(XOt);var Jpr=Y1(WE,Zme);var co=k(L());var Jv=k(L());var rhe=k(L());var ehe;var the=function(){if(ehe)return ehe;if(typeof __webpack_nonce__<"u")return __webpack_nonce__};function t7t(){if(!document)return null;var e=document.createElement("style");e.type="text/css";var t=the();return t&&e.setAttribute("nonce",t),e}function r7t(e,t){e.styleSheet?e.styleSheet.cssText=t:e.appendChild(document.createTextNode(t))}function n7t(e){var t=document.head||document.getElementsByTagName("head")[0];t.appendChild(e)}var mX=function(){var e=0,t=null;return{add:function(n){e==0&&(t=t7t())&&(r7t(t,n),n7t(t)),e++},remove:function(){e--,!e&&t&&(t.parentNode&&t.parentNode.removeChild(t),t=null)}}};var hX=function(){var e=mX();return function(t,n){rhe.useEffect(function(){return e.add(t),function(){e.remove()}},[t&&n])}};var Q1=function(){var e=hX(),t=function(n){var r=n.styles,o=n.dynamic;return e(r,o),null};return t};var o7t={left:0,top:0,right:0,gap:0},gX=function(e){return parseInt(e||"",10)||0},i7t=function(e){var t=window.getComputedStyle(document.body),n=t[e==="padding"?"paddingLeft":"marginLeft"],r=t[e==="padding"?"paddingTop":"marginTop"],o=t[e==="padding"?"paddingRight":"marginRight"];return[gX(n),gX(r),gX(o)]},vX=function(e){if(e===void 0&&(e="margin"),typeof window>"u")return o7t;var t=i7t(e),n=document.documentElement.clientWidth,r=window.innerWidth;return{left:t[0],top:t[1],right:t[2],gap:Math.max(0,r-n+t[2]-t[0])}};var a7t=Q1(),$v="data-scroll-locked",l7t=function(e,t,n,r){var o=e.left,i=e.top,u=e.right,f=e.gap;return n===void 0&&(n="margin"),` + .`.concat(WG,` { overflow: hidden `).concat(r,`; padding-right: `).concat(f,"px ").concat(r,`; } - body[`).concat(Uv,`] { + body[`).concat($v,`] { overflow: hidden `).concat(r,`; overscroll-behavior: contain; `).concat([t&&"position: relative ".concat(r,";"),n==="margin"&&` @@ -425,41 +425,41 @@ box-shadow: `),n==="padding"&&"padding-right: ".concat(f,"px ").concat(r,";")].filter(Boolean).join(""),` } - .`).concat(J1,` { + .`).concat(G1,` { right: `).concat(f,"px ").concat(r,`; } - .`).concat(G1,` { + .`).concat(X1,` { margin-right: `).concat(f,"px ").concat(r,`; } - .`).concat(J1," .").concat(J1,` { + .`).concat(G1," .").concat(G1,` { right: 0 `).concat(r,`; } - .`).concat(G1," .").concat(G1,` { + .`).concat(X1," .").concat(X1,` { margin-right: 0 `).concat(r,`; } - body[`).concat(Uv,`] { - `).concat(LG,": ").concat(f,`px; + body[`).concat($v,`] { + `).concat(BG,": ").concat(f,`px; } -`)},ehe=function(){var e=parseInt(document.body.getAttribute(Uv)||"0",10);return isFinite(e)?e:0},i7t=function(){$v.useEffect(function(){return document.body.setAttribute(Uv,(ehe()+1).toString()),function(){var e=ehe()-1;e<=0?document.body.removeAttribute(Uv):document.body.setAttribute(Uv,e.toString())}},[])},dX=function(e){var t=e.noRelative,n=e.noImportant,r=e.gapMode,o=r===void 0?"margin":r;i7t();var i=$v.useMemo(function(){return fX(o)},[o]);return $v.createElement(n7t,{styles:o7t(i,!t,o,n?"":"!important")})};var mX=!1;if(typeof window<"u")try{m_=Object.defineProperty({},"passive",{get:function(){return mX=!0,!0}}),window.addEventListener("test",m_,m_),window.removeEventListener("test",m_,m_)}catch{mX=!1}var m_,Q1=mX?{passive:!1}:!1;var a7t=function(e){return e.tagName==="TEXTAREA"},the=function(e,t){var n=window.getComputedStyle(e);return n[t]!=="hidden"&&!(n.overflowY===n.overflowX&&!a7t(e)&&n[t]==="visible")},l7t=function(e){return the(e,"overflowY")},s7t=function(e){return the(e,"overflowX")},hX=function(e,t){var n=t.ownerDocument,r=t;do{typeof ShadowRoot<"u"&&r instanceof ShadowRoot&&(r=r.host);var o=rhe(e,r);if(o){var i=nhe(e,r),u=i[1],f=i[2];if(u>f)return!0}r=r.parentNode}while(r&&r!==n.body);return!1},u7t=function(e){var t=e.scrollTop,n=e.scrollHeight,r=e.clientHeight;return[t,n,r]},c7t=function(e){var t=e.scrollLeft,n=e.scrollWidth,r=e.clientWidth;return[t,n,r]},rhe=function(e,t){return e==="v"?l7t(t):s7t(t)},nhe=function(e,t){return e==="v"?u7t(t):c7t(t)},p7t=function(e,t){return e==="h"&&t==="rtl"?-1:1},ohe=function(e,t,n,r,o){var i=p7t(e,window.getComputedStyle(t).direction),u=i*r,f=n.target,h=t.contains(f),y=!1,O=u>0,S=0,I=0;do{var A=nhe(e,f),C=A[0],M=A[1],W=A[2],R=M-W-i*C;(C||R)&&rhe(e,f)&&(S+=R,I+=C),f instanceof ShadowRoot?f=f.host:f=f.parentNode}while(!h&&f!==document.body||h&&(t.contains(f)||t===f));return(O&&(o&&Math.abs(S)<1||!o&&u>S)||!O&&(o&&Math.abs(I)<1||!o&&-u>I))&&(y=!0),y};var JE=function(e){return"changedTouches"in e?[e.changedTouches[0].clientX,e.changedTouches[0].clientY]:[0,0]},ihe=function(e){return[e.deltaX,e.deltaY]},ahe=function(e){return e&&"current"in e?e.current:e},f7t=function(e,t){return e[0]===t[0]&&e[1]===t[1]},d7t=function(e){return` +`)},nhe=function(){var e=parseInt(document.body.getAttribute($v)||"0",10);return isFinite(e)?e:0},s7t=function(){Jv.useEffect(function(){return document.body.setAttribute($v,(nhe()+1).toString()),function(){var e=nhe()-1;e<=0?document.body.removeAttribute($v):document.body.setAttribute($v,e.toString())}},[])},yX=function(e){var t=e.noRelative,n=e.noImportant,r=e.gapMode,o=r===void 0?"margin":r;s7t();var i=Jv.useMemo(function(){return vX(o)},[o]);return Jv.createElement(a7t,{styles:l7t(i,!t,o,n?"":"!important")})};var bX=!1;if(typeof window<"u")try{v_=Object.defineProperty({},"passive",{get:function(){return bX=!0,!0}}),window.addEventListener("test",v_,v_),window.removeEventListener("test",v_,v_)}catch{bX=!1}var v_,Z1=bX?{passive:!1}:!1;var u7t=function(e){return e.tagName==="TEXTAREA"},ohe=function(e,t){var n=window.getComputedStyle(e);return n[t]!=="hidden"&&!(n.overflowY===n.overflowX&&!u7t(e)&&n[t]==="visible")},c7t=function(e){return ohe(e,"overflowY")},p7t=function(e){return ohe(e,"overflowX")},wX=function(e,t){var n=t.ownerDocument,r=t;do{typeof ShadowRoot<"u"&&r instanceof ShadowRoot&&(r=r.host);var o=ihe(e,r);if(o){var i=ahe(e,r),u=i[1],f=i[2];if(u>f)return!0}r=r.parentNode}while(r&&r!==n.body);return!1},f7t=function(e){var t=e.scrollTop,n=e.scrollHeight,r=e.clientHeight;return[t,n,r]},d7t=function(e){var t=e.scrollLeft,n=e.scrollWidth,r=e.clientWidth;return[t,n,r]},ihe=function(e,t){return e==="v"?c7t(t):p7t(t)},ahe=function(e,t){return e==="v"?f7t(t):d7t(t)},m7t=function(e,t){return e==="h"&&t==="rtl"?-1:1},lhe=function(e,t,n,r,o){var i=m7t(e,window.getComputedStyle(t).direction),u=i*r,f=n.target,h=t.contains(f),y=!1,O=u>0,S=0,I=0;do{var A=ahe(e,f),C=A[0],M=A[1],F=A[2],R=M-F-i*C;(C||R)&&ihe(e,f)&&(S+=R,I+=C),f instanceof ShadowRoot?f=f.host:f=f.parentNode}while(!h&&f!==document.body||h&&(t.contains(f)||t===f));return(O&&(o&&Math.abs(S)<1||!o&&u>S)||!O&&(o&&Math.abs(I)<1||!o&&-u>I))&&(y=!0),y};var ZE=function(e){return"changedTouches"in e?[e.changedTouches[0].clientX,e.changedTouches[0].clientY]:[0,0]},she=function(e){return[e.deltaX,e.deltaY]},uhe=function(e){return e&&"current"in e?e.current:e},h7t=function(e,t){return e[0]===t[0]&&e[1]===t[1]},g7t=function(e){return` .block-interactivity-`.concat(e,` {pointer-events: none;} .allow-interactivity-`).concat(e,` {pointer-events: all;} -`)},m7t=0,Jv=[];function lhe(e){var t=uo.useRef([]),n=uo.useRef([0,0]),r=uo.useRef(),o=uo.useState(m7t++)[0],i=uo.useState(Y1)[0],u=uo.useRef(e);uo.useEffect(function(){u.current=e},[e]),uo.useEffect(function(){if(e.inert){document.body.classList.add("block-interactivity-".concat(o));var M=lme([e.lockRef.current],(e.shards||[]).map(ahe),!0).filter(Boolean);return M.forEach(function(W){return W.classList.add("allow-interactivity-".concat(o))}),function(){document.body.classList.remove("block-interactivity-".concat(o)),M.forEach(function(W){return W.classList.remove("allow-interactivity-".concat(o))})}}},[e.inert,e.lockRef.current,e.shards]);var f=uo.useCallback(function(M,W){if("touches"in M&&M.touches.length===2)return!u.current.allowPinchZoom;var R=JE(M),B=n.current,Y="deltaX"in M?M.deltaX:B[0]-R[0],X="deltaY"in M?M.deltaY:B[1]-R[1],ae,Z=M.target,K=Math.abs(Y)>Math.abs(X)?"h":"v";if("touches"in M&&K==="h"&&Z.type==="range")return!1;var de=hX(K,Z);if(!de)return!0;if(de?ae=K:(ae=K==="v"?"h":"v",de=hX(K,Z)),!de)return!1;if(!r.current&&"changedTouches"in M&&(Y||X)&&(r.current=ae),!ae)return!0;var se=r.current||ae;return ohe(se,W,M,se==="h"?Y:X,!0)},[]),h=uo.useCallback(function(M){var W=M;if(!(!Jv.length||Jv[Jv.length-1]!==i)){var R="deltaY"in W?ihe(W):JE(W),B=t.current.filter(function(ae){return ae.name===W.type&&(ae.target===W.target||W.target===ae.shadowParent)&&f7t(ae.delta,R)})[0];if(B&&B.should){W.cancelable&&W.preventDefault();return}if(!B){var Y=(u.current.shards||[]).map(ahe).filter(Boolean).filter(function(ae){return ae.contains(W.target)}),X=Y.length>0?f(W,Y[0]):!u.current.noIsolation;X&&W.cancelable&&W.preventDefault()}}},[]),y=uo.useCallback(function(M,W,R,B){var Y={name:M,delta:W,target:R,should:B,shadowParent:h7t(R)};t.current.push(Y),setTimeout(function(){t.current=t.current.filter(function(X){return X!==Y})},1)},[]),O=uo.useCallback(function(M){n.current=JE(M),r.current=void 0},[]),S=uo.useCallback(function(M){y(M.type,ihe(M),M.target,f(M,e.lockRef.current))},[]),I=uo.useCallback(function(M){y(M.type,JE(M),M.target,f(M,e.lockRef.current))},[]);uo.useEffect(function(){return Jv.push(i),e.setCallbacks({onScrollCapture:S,onWheelCapture:S,onTouchMoveCapture:I}),document.addEventListener("wheel",h,Q1),document.addEventListener("touchmove",h,Q1),document.addEventListener("touchstart",O,Q1),function(){Jv=Jv.filter(function(M){return M!==i}),document.removeEventListener("wheel",h,Q1),document.removeEventListener("touchmove",h,Q1),document.removeEventListener("touchstart",O,Q1)}},[]);var A=e.removeScrollBar,C=e.inert;return uo.createElement(uo.Fragment,null,C?uo.createElement(i,{styles:d7t(o)}):null,A?uo.createElement(dX,{gapMode:e.gapMode}):null)}function h7t(e){for(var t=null;e!==null;)e instanceof ShadowRoot&&(t=e.host,e=e.host),e=e.parentNode;return t}var bfr=K1(EE,lhe);var KE=P(L());var g7t=function(e){if(typeof document>"u")return null;var t=Array.isArray(e)?e[0]:e;return t.ownerDocument.body},Gv=new WeakMap,GE=new WeakMap,XE={},gX=0,she=function(e){return e&&(e.host||she(e.parentNode))},v7t=function(e,t){return t.map(function(n){if(e.contains(n))return n;var r=she(n);return r&&e.contains(r)?r:(console.error("aria-hidden",n,"in not contained inside",e,". Doing nothing"),null)}).filter(function(n){return!!n})},y7t=function(e,t,n,r){var o=v7t(t,Array.isArray(e)?e:[e]);XE[n]||(XE[n]=new WeakMap);var i=XE[n],u=[],f=new Set,h=new Set(o),y=function(S){!S||f.has(S)||(f.add(S),y(S.parentNode))};o.forEach(y);var O=function(S){!S||h.has(S)||Array.prototype.forEach.call(S.children,function(I){if(f.has(I))O(I);else try{var A=I.getAttribute(r),C=A!==null&&A!=="false",M=(Gv.get(I)||0)+1,W=(i.get(I)||0)+1;Gv.set(I,M),i.set(I,W),u.push(I),M===1&&C&&GE.set(I,!0),W===1&&I.setAttribute(n,"true"),C||I.setAttribute(r,"true")}catch(R){console.error("aria-hidden: cannot operate on ",I,R)}})};return O(t),f.clear(),gX++,function(){u.forEach(function(S){var I=Gv.get(S)-1,A=i.get(S)-1;Gv.set(S,I),i.set(S,A),I||(GE.has(S)||S.removeAttribute(r),GE.delete(S)),A||S.removeAttribute(n)}),gX--,gX||(Gv=new WeakMap,Gv=new WeakMap,GE=new WeakMap,XE={})}},uhe=function(e,t,n){n===void 0&&(n="data-aria-hidden");var r=Array.from(Array.isArray(e)?e:[e]),o=t||g7t(e);return o?(r.push.apply(r,Array.from(o.querySelectorAll("[aria-live]"))),y7t(r,o,n,"aria-hidden")):function(){return null}};var che=P(L());var b7t=Y1(),w7t=` - [`+DE+`] { +`)},v7t=0,Gv=[];function che(e){var t=co.useRef([]),n=co.useRef([0,0]),r=co.useRef(),o=co.useState(v7t++)[0],i=co.useState(Q1)[0],u=co.useRef(e);co.useEffect(function(){u.current=e},[e]),co.useEffect(function(){if(e.inert){document.body.classList.add("block-interactivity-".concat(o));var M=ume([e.lockRef.current],(e.shards||[]).map(uhe),!0).filter(Boolean);return M.forEach(function(F){return F.classList.add("allow-interactivity-".concat(o))}),function(){document.body.classList.remove("block-interactivity-".concat(o)),M.forEach(function(F){return F.classList.remove("allow-interactivity-".concat(o))})}}},[e.inert,e.lockRef.current,e.shards]);var f=co.useCallback(function(M,F){if("touches"in M&&M.touches.length===2)return!u.current.allowPinchZoom;var R=ZE(M),B=n.current,Y="deltaX"in M?M.deltaX:B[0]-R[0],X="deltaY"in M?M.deltaY:B[1]-R[1],le,Z=M.target,K=Math.abs(Y)>Math.abs(X)?"h":"v";if("touches"in M&&K==="h"&&Z.type==="range")return!1;var de=wX(K,Z);if(!de)return!0;if(de?le=K:(le=K==="v"?"h":"v",de=wX(K,Z)),!de)return!1;if(!r.current&&"changedTouches"in M&&(Y||X)&&(r.current=le),!le)return!0;var se=r.current||le;return lhe(se,F,M,se==="h"?Y:X,!0)},[]),h=co.useCallback(function(M){var F=M;if(!(!Gv.length||Gv[Gv.length-1]!==i)){var R="deltaY"in F?she(F):ZE(F),B=t.current.filter(function(le){return le.name===F.type&&(le.target===F.target||F.target===le.shadowParent)&&h7t(le.delta,R)})[0];if(B&&B.should){F.cancelable&&F.preventDefault();return}if(!B){var Y=(u.current.shards||[]).map(uhe).filter(Boolean).filter(function(le){return le.contains(F.target)}),X=Y.length>0?f(F,Y[0]):!u.current.noIsolation;X&&F.cancelable&&F.preventDefault()}}},[]),y=co.useCallback(function(M,F,R,B){var Y={name:M,delta:F,target:R,should:B,shadowParent:y7t(R)};t.current.push(Y),setTimeout(function(){t.current=t.current.filter(function(X){return X!==Y})},1)},[]),O=co.useCallback(function(M){n.current=ZE(M),r.current=void 0},[]),S=co.useCallback(function(M){y(M.type,she(M),M.target,f(M,e.lockRef.current))},[]),I=co.useCallback(function(M){y(M.type,ZE(M),M.target,f(M,e.lockRef.current))},[]);co.useEffect(function(){return Gv.push(i),e.setCallbacks({onScrollCapture:S,onWheelCapture:S,onTouchMoveCapture:I}),document.addEventListener("wheel",h,Z1),document.addEventListener("touchmove",h,Z1),document.addEventListener("touchstart",O,Z1),function(){Gv=Gv.filter(function(M){return M!==i}),document.removeEventListener("wheel",h,Z1),document.removeEventListener("touchmove",h,Z1),document.removeEventListener("touchstart",O,Z1)}},[]);var A=e.removeScrollBar,C=e.inert;return co.createElement(co.Fragment,null,C?co.createElement(i,{styles:g7t(o)}):null,A?co.createElement(yX,{gapMode:e.gapMode}):null)}function y7t(e){for(var t=null;e!==null;)e instanceof ShadowRoot&&(t=e.host,e=e.host),e=e.parentNode;return t}var Ifr=Y1(zE,che);var rC=k(L());var b7t=function(e){if(typeof document>"u")return null;var t=Array.isArray(e)?e[0]:e;return t.ownerDocument.body},Xv=new WeakMap,eC=new WeakMap,tC={},OX=0,phe=function(e){return e&&(e.host||phe(e.parentNode))},w7t=function(e,t){return t.map(function(n){if(e.contains(n))return n;var r=phe(n);return r&&e.contains(r)?r:(console.error("aria-hidden",n,"in not contained inside",e,". Doing nothing"),null)}).filter(function(n){return!!n})},O7t=function(e,t,n,r){var o=w7t(t,Array.isArray(e)?e:[e]);tC[n]||(tC[n]=new WeakMap);var i=tC[n],u=[],f=new Set,h=new Set(o),y=function(S){!S||f.has(S)||(f.add(S),y(S.parentNode))};o.forEach(y);var O=function(S){!S||h.has(S)||Array.prototype.forEach.call(S.children,function(I){if(f.has(I))O(I);else try{var A=I.getAttribute(r),C=A!==null&&A!=="false",M=(Xv.get(I)||0)+1,F=(i.get(I)||0)+1;Xv.set(I,M),i.set(I,F),u.push(I),M===1&&C&&eC.set(I,!0),F===1&&I.setAttribute(n,"true"),C||I.setAttribute(r,"true")}catch(R){console.error("aria-hidden: cannot operate on ",I,R)}})};return O(t),f.clear(),OX++,function(){u.forEach(function(S){var I=Xv.get(S)-1,A=i.get(S)-1;Xv.set(S,I),i.set(S,A),I||(eC.has(S)||S.removeAttribute(r),eC.delete(S)),A||S.removeAttribute(n)}),OX--,OX||(Xv=new WeakMap,Xv=new WeakMap,eC=new WeakMap,tC={})}},fhe=function(e,t,n){n===void 0&&(n="data-aria-hidden");var r=Array.from(Array.isArray(e)?e:[e]),o=t||b7t(e);return o?(r.push.apply(r,Array.from(o.querySelectorAll("[aria-live]"))),O7t(r,o,n,"aria-hidden")):function(){return null}};var dhe=k(L());var x7t=Q1(),_7t=` + [`+VE+`] { pointer-events: none !important; } -`,phe=function(){return che.createElement(b7t,{styles:w7t})};var Dd=P(L()),fhe=function(e){return"current"in e?e.current:e};function dhe(e){var t=e.setLockProps,n=e.onEscapeKey,r=e.onClickOutside,o=e.shards,i=e.onActivation,u=e.onDeactivation,f=e.noIsolation,h=(0,Dd.useState)(void 0),y=h[0],O=h[1],S=(0,Dd.useRef)(null),I=(0,Dd.useRef)(0);return KE.useEffect(function(){var A=function(R){R.defaultPrevented||(R.code==="Escape"||R.key==="Escape"||R.keyCode===27)&&n&&n(R)},C=function(R){R.defaultPrevented||R.target===S.current||R instanceof MouseEvent&&R.button!==0||o&&o.map(fhe).some(function(B){return B&&B.contains(R.target)||B===R.target})||r&&r(R)},M=function(R){C(R),I.current=R.touches.length},W=function(R){I.current=R.touches.length};if(y)return document.addEventListener("keydown",A),document.addEventListener("mousedown",C),document.addEventListener("touchstart",M),document.addEventListener("touchend",W),function(){document.removeEventListener("keydown",A),document.removeEventListener("mousedown",C),document.removeEventListener("touchstart",M),document.removeEventListener("touchend",W)}},[y,r,n]),(0,Dd.useEffect)(function(){if(y)return i&&i(y),function(){u&&u()}},[!!y]),(0,Dd.useEffect)(function(){var A=function(){return null},C=!1,M=function(R){f||(A=uhe(ame([R],(o||[]).map(fhe)),document.body,DE)),O(function(){return R})},W=function(){A(),C||O(null)};return t({onMouseDown:function(R){S.current=R.target},onTouchStart:function(R){S.current=R.target},onActivation:M,onDeactivation:W}),function(){C=!0,t(!1)}},[]),KE.createElement(phe,null)}var mhe=K1(LE,dhe);var O7t=function(e){return h_.createElement(mhe,yi({},e))},vX=h_.forwardRef(function(e,t){return h_.createElement(jme,yi({},e,{ref:t,sideCar:O7t}))});function YE(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?YE=function(n){return typeof n}:YE=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},YE(e)}var x7t=["children","clickOutsideDisables","disabled","returnFocus","noIsolation","scrollLock"];function hhe(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function ghe(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function S7t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function j7t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function vhe(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function QE(e){return QE=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},QE(e)}function dc(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Z1=function(e){k7t(n,e);var t=P7t(n);function n(){var r;j7t(this,n);for(var o=arguments.length,i=new Array(o),u=0;u"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function rC(e){return rC=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},rC(e)}function tC(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var wX=function(e){T7t(n,e);var t=R7t(n);function n(){var r;M7t(this,n);for(var o=arguments.length,i=new Array(o),u=0;u"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function oC(e){return oC=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},oC(e)}function tm(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var iC=function(e){B7t(n,e);var t=H7t(n);function n(r){var o;return F7t(this,n),o=t.call(this,r),tm(em(o),"id",void 0),tm(em(o),"capturedDownIds",void 0),tm(em(o),"onClickOutside",function(i){var u=o.props,f=u.isDisabled,h=u.onOutsideClick;if(f){o.capturedDownIds=[];return}var y=i;if(y.euiGeneratedBy&&y.euiGeneratedBy.includes(o.id)||o.capturedDownIds.includes(o.id)){o.capturedDownIds=[];return}return o.capturedDownIds=[],h(y)}),tm(em(o),"onChildClick",function(i,u){i.nativeEvent.hasOwnProperty("euiGeneratedBy")?i.nativeEvent.euiGeneratedBy.push(o.id):i.nativeEvent.euiGeneratedBy=[o.id],u&&u(i)}),tm(em(o),"onChildMouseDown",function(i){o.onChildClick(i,function(u){var f=u.nativeEvent;o.capturedDownIds=f.euiGeneratedBy,o.props.onMouseDown&&o.props.onMouseDown(u),o.props.onTouchStart&&o.props.onTouchStart(u)})}),tm(em(o),"onChildMouseUp",function(i){o.onChildClick(i,function(u){o.props.onMouseUp&&o.props.onMouseUp(u),o.props.onTouchEnd&&o.props.onTouchEnd(u)})}),o.id=Lr()(),o.capturedDownIds=[],o}return W7t(n,[{key:"componentDidMount",value:function(){document.addEventListener("mouseup",this.onClickOutside),document.addEventListener("touchend",this.onClickOutside)}},{key:"componentWillUnmount",value:function(){document.removeEventListener("mouseup",this.onClickOutside),document.removeEventListener("touchend",this.onClickOutside)}},{key:"render",value:function(){var o=Ohe(Ohe({},this.props.children.props),{onMouseDown:this.onChildMouseDown,onTouchStart:this.onChildMouseDown,onMouseUp:this.onChildMouseUp,onTouchEnd:this.onChildMouseUp}),i=Xv.Children.only(this.props.children);return(0,Xv.cloneElement)(i,o)}}]),n}(Xv.Component);iC.propTypes={children:Nd.default.element.isRequired,onOutsideClick:Nd.default.func.isRequired,isDisabled:Nd.default.bool,onMouseDown:Nd.default.func,onMouseUp:Nd.default.func,onTouchStart:Nd.default.func,onTouchEnd:Nd.default.func};var sdr=P(L()),g_=P(dt());var U7t="m",_he=function(t){var n=t.euiTheme,r=D9(t,"plain"),o=n.size[U7t];return{euiPopoverArrow:Ne("position:absolute;",CN(0,0),"&:before{content:'';position:absolute;",CN(0,0),";};label:euiPopoverArrow;"),top:Ne("&:before{",Pn.bottom,":-",o,";",Pn["border-left"],":",o," solid transparent;",Pn["border-right"],":",o," solid transparent;",Pn["border-top"],":",o," solid ",r,";};label:top;"),bottom:Ne("&:before{",Pn.top,":-",o,";",Pn["border-left"],":",o," solid transparent;",Pn["border-right"],":",o," solid transparent;",Pn["border-bottom"],":",o," solid ",r,";};label:bottom;"),left:Ne("&:before{",Pn.top,":50%;",Pn.right,":-",o,";",Pn["border-top"],":",o," solid transparent;",Pn["border-bottom"],":",o," solid transparent;",Pn["border-left"],":",o," solid ",r,";};label:left;"),right:Ne("&:before{",Pn.top,":50%;",Pn.left,":-",o,";",Pn["border-top"],":",o," solid transparent;",Pn["border-bottom"],":",o," solid transparent;",Pn["border-right"],":",o," solid ",r,";};label:right;")}};var $7t=["children","position"];function xX(){return xX=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function G7t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var aC=function(t){var n=t.children,r=t.position,o=J7t(t,$7t),i=en(),u=_he(i),f=[u.euiPopoverArrow,u[r]];return a("div",xX({"data-popover-arrow":r,css:f},o),n)};aC.propTypes={className:g_.default.string,"aria-label":g_.default.string,"data-test-subj":g_.default.string,position:g_.default.any.isRequired};var She=function(){return{euiPopover:Ne("position:relative;vertical-align:middle;",Yt("max-width","100%"),";;label:euiPopover;")}};var uC=P(L()),qi=P(dt()),Ehe=P(Ct());var jdr=P(L()),sl=P(dt()),Ihe=P(Ct());var X7t={name:"122lw0e-grow",styles:"flex-grow:1;label:grow;"},K7t={name:"1kk7odi-euiPanel",styles:"flex-grow:0;label:euiPanel;"},jhe=function(t){var n=t.euiTheme;return{euiPanel:K7t,grow:X7t,hasShadow:Ne(r_(t,"m"),";;label:hasShadow;"),hasBorder:Ne("border:",n.border.thin,";;label:hasBorder;"),radius:{none:Ne(";label:none;"),m:Ne("border-radius:",n.border.radius.medium,";;label:m;")},isClickable:Ne(_p,"{transition:box-shadow ",n.animation.fast," ",n.animation.resistance,",transform ",n.animation.fast," ",n.animation.resistance,";}&:enabled{display:block;width:100%;",xp("left"),";}&:hover,&:focus{",r_(t,"l"),";transform:translateY(-2px);cursor:pointer;};label:isClickable;")}};var Y7t=["children","className","paddingSize","borderRadius","color","hasShadow","hasBorder","grow","panelRef","element"];function lC(){return lC=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function e8t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var _X={none:null,s:"paddingSmall",m:"paddingMedium",l:"paddingLarge"},Mdr=Vt(_X);var Vi=function(t){var n=t.children,r=t.className,o=t.paddingSize,i=o===void 0?"m":o,u=t.borderRadius,f=u===void 0?"m":u,h=t.color,y=h===void 0?"plain":h,O=t.hasShadow,S=O===void 0?!0:O,I=t.hasBorder,A=I===void 0?!1:I,C=t.grow,M=C===void 0?!0:C,W=t.panelRef,R=t.element,B=Z7t(t,Y7t),Y=en(),X=!A&&y==="plain",ae=y==="plain"||y==="transparent",Z=jhe(Y),K=[Z.euiPanel,M&&Z.grow,Z.radius[f],u0e()[i],l0e()[y],X&&S===!0&&Z.hasShadow,ae&&A===!0&&Z.hasBorder,B.onClick&&Z.isClickable],de=(0,Ihe.default)("euiPanel","euiPanel--".concat(y),Q7t({},"euiPanel--".concat(_X[i]),_X[i]),r);return B.onClick&&R!=="div"?a("button",lC({ref:W,className:de,css:K},B),n):a("div",lC({ref:W,className:de,css:K},B),n)};Vi.propTypes={element:sl.default.oneOfType([sl.default.oneOf(["button"]),sl.default.oneOf(["div"])]),hasShadow:sl.default.bool,hasBorder:sl.default.bool,paddingSize:sl.default.any,borderRadius:sl.default.any,grow:sl.default.bool,panelRef:sl.default.any,color:sl.default.any,className:sl.default.string,"aria-label":sl.default.string,"data-test-subj":sl.default.string};var sC="s",khe=function(t){var n=t.euiTheme;return{euiPopover__panel:Ne("position:absolute;",Yt("min-width","".concat(n.base*7,"px")),";",Yt("max-width","calc(100vw - ".concat(n.size.xl,")")),";backface-visibility:hidden;pointer-events:none;opacity:0;transform:translateY(0) translateX(0) translateZ(0);",TG(t,{property:"filter"})," &:focus{outline-offset:0;};label:euiPopover__panel;"),isOpen:Ne("opacity:1;pointer-events:auto;",_p,"{transition:opacity ",n.animation.bounce," ",n.animation.slow,",transform ",n.animation.bounce," calc(",n.animation.slow," + 100ms);};label:isOpen;"),top:Ne("transform:translateY(",n.size[sC],") translateZ(0);;label:top;"),bottom:Ne("transform:translateY(-",n.size[sC],") translateZ(0);;label:bottom;"),left:Ne("transform:translateX(",n.size[sC],") translateZ(0);;label:left;"),right:Ne("transform:translateX(-",n.size[sC],") translateZ(0);;label:right;"),attached:{isOpen:Ne("filter:none;",_p,"{transition:opacity ",n.animation.bounce," ",n.animation.slow,";};label:isOpen;"),top:Ne(rme(t),";;label:top;"),bottom:Ne(r_(t,"m"),";;label:bottom;"),left:Ne(";label:left;"),right:Ne(";label:right;")}}};var t8t=["children","className","isOpen","isAttached","position"];function SX(){return SX=Object.assign||function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function s8t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Phe=(0,uC.createContext)({paddingSize:"l"}),Kv=function(t){var n=t.children,r=t.className,o=t.isOpen,i=t.isAttached,u=t.position,f=l8t(t,t8t),h=(0,uC.useContext)(Phe);f.paddingSize&&(h.paddingSize=f.paddingSize);var y=en(),O=(0,Ehe.default)("euiPopover__panel",r),S=khe(y),I=[S.euiPopover__panel,o&&S.isOpen,o&&u&&S[u]];return i&&(I=[].concat(r8t(I),[o&&S.attached.isOpen,u&&S.attached[u]])),a(Phe.Provider,{value:h},a(Vi,SX({className:O,css:I,"data-popover-panel":!0,"data-popover-open":o||void 0},f),n))};Kv.propTypes={element:qi.default.oneOf(["div"]),hasShadow:qi.default.bool,hasBorder:qi.default.bool,paddingSize:qi.default.any,borderRadius:qi.default.any,grow:qi.default.bool,panelRef:qi.default.any,color:qi.default.any,className:qi.default.string,"aria-label":qi.default.string,"data-test-subj":qi.default.string,isOpen:qi.default.bool,isAttached:qi.default.bool,position:qi.default.oneOfType([qi.default.any.isRequired,qi.default.oneOf([null])])};function pC(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?pC=function(n){return typeof n}:pC=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},pC(e)}var u8t=["anchorClassName","anchorPosition","button","buttonRef","insert","isOpen","ownFocus","children","className","closePopover","panelClassName","panelPaddingSize","panelProps","panelRef","panelStyle","popoverScreenReaderText","popoverRef","hasArrow","arrowChildren","repositionOnScroll","zIndex","attachToAnchor","display","offset","onTrapDeactivation","buffer","aria-label","aria-labelledby","container","focusTrapProps","initialFocus","tabIndex"];function Yv(){return Yv=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function p8t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function Che(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function cC(e){for(var t=1;t"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function dC(e){return dC=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},dC(e)}function Jo(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function zhe(e,t){return S8t(e)||_8t(e,t)||Lhe(e,t)||x8t()}function x8t(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function Lhe(e,t){if(e){if(typeof e=="string")return kX(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return kX(e,t)}}function kX(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function T8t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var v_=function(t){var n=t.children,r=t.className,o=t.disableFocusTrap,i=o===void 0?!1:o,u=t.input,f=t.fullWidth,h=f===void 0?!1:f,y=t.onPanelResize,O=t.inputRef,S=t.panelRef,I=M8t(t,k8t),A=en(),C=(0,mc.useState)(null),M=PX(C,2),W=M[0],R=M[1],B=(0,mc.useState)(),Y=PX(B,2),X=Y[0],ae=Y[1],Z=(0,mc.useState)(null),K=PX(Z,2),de=K[0],se=K[1],Se=IF([R,O]),Oe=IF([se,S]),be=(0,mc.useCallback)(function(Qe){if(de&&(X||Qe)){var ot=Qe||X;de.style.width="".concat(ot,"px"),y&&y(ot)}},[de,X,y]),Ue=(0,mc.useCallback)(function(){if(W){var Qe=W.getBoundingClientRect().width;ae(Qe),be(Qe)}},[W,be]);(0,mc.useEffect)(function(){Ue()},[Ue]),(0,mc.useEffect)(function(){be()},[be]);var We=function(ot){if(de&&ot.key===ps.TAB){var at=Vk(de).filter(function(ht){return Array.from(ht.attributes).map(function(Mt){return Mt.name}).indexOf("data-focus-guard")<0});(i||at.length&&at[at.length-1]===document.activeElement)&&I.closePopover()}},Ge=(0,Bhe.default)("euiInputPopover",r);return a(iu,EX({css:Ne(h?void 0:Yt("max-width",Fhe(A)),";label:EuiInputPopover;"),ownFocus:!1,button:a(B1,{onResize:Ue},function(Qe){return a("div",{ref:Qe},u)}),buttonRef:Se,panelRef:Oe,className:Ge},I),a(Z1,{clickOutsideDisables:!0,disabled:i},a("div",{onKeyDown:We},n)))};v_.propTypes={className:Ep.default.string,"aria-label":Ep.default.string,"data-test-subj":Ep.default.string,disableFocusTrap:Ep.default.bool,fullWidth:Ep.default.bool,input:Ep.default.any.isRequired,inputRef:Ep.default.any,onPanelResize:Ep.default.func};v_.defaultProps={anchorPosition:"downLeft",attachToAnchor:!0,display:"block",panelPaddingSize:"s"};var Vhe=P(Ct()),Fd=P(dt());var R8t=["size","children","className","textTransform"];function Hhe(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function z8t(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function N8t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Qv=function(t){var n=t.size,r=n===void 0?"m":n,o=t.children,i=t.className,u=t.textTransform,f=D8t(t,R8t),h=en(),y=u1e(h),O=[y.euiTitle,u?y[u]:void 0,y[r]],S=(0,Vhe.default)("euiTitle",i,o.props.className),I=z8t({css:O,className:S},f);return yd(o,I)};Qv.propTypes={className:Fd.default.string,"aria-label":Fd.default.string,"data-test-subj":Fd.default.string,children:Fd.default.element.isRequired,size:Fd.default.any,textTransform:Fd.default.any,id:Fd.default.string};var b_=P(L()),Xt=P(dt()),mC=P(Ct());var M0r=P(L()),Rn=P(dt()),qhe=P(Ct());var F8t=["className","isSelected","isDisabled","color","children"];function CX(){return CX=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function B8t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var AX=function(t){var n=t.className,r=t.isSelected,o=r===void 0?!1:r,i=t.isDisabled,u=t.color,f=t.children,h=W8t(t,F8t),y=H8t(o,i,f),O=(0,qhe.default)("euiCardSelect","euiCardSelect--".concat(MX(u,o)),n);return a(La,CX({className:O,color:u||"text",size:"xs",isDisabled:i,iconType:o?"check":void 0,role:"switch","aria-checked":o},h),y)};AX.propTypes={href:Rn.default.string,onClick:Rn.default.func,color:Rn.default.oneOf(["primary","danger","text","ghost","success","warning"]),size:Rn.default.oneOf(["xs","s","m"]),flush:Rn.default.oneOf(["left","right","both"]),isDisabled:Rn.default.bool,isLoading:Rn.default.bool,isSelected:Rn.default.bool,target:Rn.default.string,rel:Rn.default.string,type:Rn.default.oneOf(["button","submit"]),buttonRef:Rn.default.any,contentProps:Rn.default.any,iconType:Rn.default.oneOfType([Rn.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,Rn.default.string.isRequired,Rn.default.elementType.isRequired]),iconSide:Rn.default.oneOf(["left","right"]),textProps:Rn.default.shape({className:Rn.default.string,"aria-label":Rn.default.string,"data-test-subj":Rn.default.string,ref:Rn.default.any,"data-text":Rn.default.string}),iconSize:Rn.default.oneOf(["s","m"]),className:Rn.default.string,"aria-label":Rn.default.string,"data-test-subj":Rn.default.string};function H8t(e,t,n){if(n)return n;var r;return e?r=a(At,{token:"euiCardSelect.selected",default:"Selected"}):t?r=a(At,{token:"euiCardSelect.unavailable",default:"Unavailable"}):r=a(At,{token:"euiCardSelect.select",default:"Select"}),r}function MX(e,t){var n;return e?n=e:t?n="success":n="text",n}var V8t=["className","description","isDisabled","title","titleElement","titleSize","icon","image","children","footer","onClick","href","rel","target","textAlign","betaBadgeProps","layout","selectable","display","paddingSize"];function y_(){return y_=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function U8t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Uhe={left:"euiCard--leftAligned",center:"euiCard--centerAligned",right:"euiCard--rightAligned"},G0r=Vt(Uhe),$he={vertical:"",horizontal:"euiCard--horizontal"},X0r=Vt($he),gs=function(t){var n=t.className,r=t.description,o=t.isDisabled,i=t.title,u=t.titleElement,f=u===void 0?"span":u,h=t.titleSize,y=h===void 0?"s":h,O=t.icon,S=t.image,I=t.children,A=t.footer,C=t.onClick,M=t.href,W=t.rel,R=t.target,B=t.textAlign,Y=B===void 0?"center":B,X=t.betaBadgeProps,ae=t.layout,Z=ae===void 0?"vertical":ae,K=t.selectable,de=t.display,se=t.paddingSize,Se=q8t(t,V8t),Oe=!M||ma(M),be=o||!Oe,Ue=!be&&(C||M||K&&!K.isDisabled),We=null,Ge=function(_r){We&&We!==_r.target&&We.click()};if(Z==="horizontal"&&(S||A||Y!=="center"))throw new Error('EuiCard: `layout="horizontal"` cannot be used in conjunction with `image`, `footer`, or `textAlign`.');var Qe=K?"euiCard--isSelectable--".concat(MX(K.color,K.isSelected)):void 0,ot=(0,mC.default)("euiCard",Uhe[Y],$he[Z],{"euiCard--isClickable":Ue,"euiCard--hasBetaBadge":X?.label,"euiCard--hasIcon":O,"euiCard--isSelectable":K,"euiCard-isSelected":K?.isSelected,"euiCard-isDisabled":be},Qe,n),at=Gs(),ht=r?"".concat(at,"Description"):"",Mt;S&&Z==="vertical"&&((0,b_.isValidElement)(S)||typeof S=="string"?Mt=a("div",{className:"euiCard__image"},(0,b_.isValidElement)(S)?S:a("img",{src:S,alt:""})):Mt=null);var Ze;O&&(Ze=b_.default.cloneElement(O,{className:(0,mC.default)(O.props.className,"euiCard__icon")}));var Kt;(Mt||Ze)&&(Kt=a("div",{className:"euiCard__top"},Mt,Ze));var it,xt="";X!=null&&X.label&&(xt="".concat(at,"BetaBadge"),it=a("span",{className:"euiCard__betaBadgeWrapper"},a(jE,y_({id:xt},X,{className:(0,mC.default)("euiCard__betaBadge",X?.className)}))),se=se||"l"),K&&be&&K.isDisabled===void 0&&(K.isDisabled=be);var wt;K&&(wt=a(AX,y_({"aria-describedby":"".concat(at,"Title ").concat(ht)},K,{buttonRef:function(_r){We=_r}})));var Ht;!be&&M?Ht=a("a",{className:"euiCard__titleAnchor",onClick:C,href:M,target:R,"aria-describedby":ht,rel:ni({href:M,target:R,rel:W}),ref:function(_r){We=_r}},i):be||C?Ht=a("button",{className:"euiCard__titleButton",onClick:C,disabled:be,"aria-describedby":"".concat(xt," ").concat(ht),ref:function(_r){We=_r}},i):Ht=i;var sr=f;return a(Vi,y_({element:"div",className:ot,onClick:Ue?Ge:void 0,color:be?"subdued":de,hasShadow:!(be||de),hasBorder:de?!1:void 0,paddingSize:se},Se),Kt,a("div",{className:"euiCard__content"},a(Qv,{id:"".concat(at,"Title"),className:"euiCard__title",size:y},a(sr,null,Ht)),r&&a(fr,{id:ht,size:"s",className:"euiCard__description"},a("p",null,r)),I&&a("div",{className:"euiCard__children"},I)),it,Z==="vertical"&&A&&a("div",{className:"euiCard__footer"},A),wt)};gs.propTypes={layout:Xt.default.oneOfType([Xt.default.oneOf(["vertical"]),Xt.default.oneOf(["horizontal"]).isRequired]),textAlign:Xt.default.oneOf(["left","center","right"]),footer:Xt.default.node,image:Xt.default.oneOfType([Xt.default.string.isRequired,Xt.default.element.isRequired]),title:Xt.default.any.isRequired,titleElement:Xt.default.oneOf(["h2","h3","h4","h5","h6","span"]),titleSize:Xt.default.oneOf(["s","xs"]),description:Xt.default.any,icon:Xt.default.oneOfType([Xt.default.element.isRequired,Xt.default.oneOf([null])]),children:Xt.default.node,onClick:Xt.default.oneOfType([Xt.default.func.isRequired,Xt.default.func.isRequired]),isDisabled:Xt.default.bool,href:Xt.default.string,target:Xt.default.string,rel:Xt.default.string,betaBadgeProps:Xt.default.any,display:Xt.default.any,paddingSize:Xt.default.any,selectable:Xt.default.shape({href:Xt.default.string,onClick:Xt.default.func,color:Xt.default.oneOf(["primary","danger","text","ghost","success","warning"]),size:Xt.default.oneOf(["xs","s","m"]),flush:Xt.default.oneOf(["left","right","both"]),isDisabled:Xt.default.bool,isLoading:Xt.default.bool,isSelected:Xt.default.bool,target:Xt.default.string,rel:Xt.default.string,type:Xt.default.oneOf(["button","submit"]),buttonRef:Xt.default.any,contentProps:Xt.default.any,iconType:Xt.default.oneOfType([Xt.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,Xt.default.string.isRequired,Xt.default.elementType.isRequired]),iconSide:Xt.default.oneOf(["left","right"]),textProps:Xt.default.shape({className:Xt.default.string,"aria-label":Xt.default.string,"data-test-subj":Xt.default.string,ref:Xt.default.any,"data-text":Xt.default.string}),iconSize:Xt.default.oneOf(["s","m"]),className:Xt.default.string,"aria-label":Xt.default.string,"data-test-subj":Xt.default.string}),hasBorder:Xt.default.bool};var Ghe=P(L()),Ui=P(dt()),LX=P(Ct());function hC(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?hC=function(n){return typeof n}:hC=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},hC(e)}var $8t=["className","id","checked","label","onChange","type","disabled","compressed","indeterminate","inputRef","labelProps"];function gC(){return gC=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function G8t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function X8t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Jhe(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function vC(e){return vC=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},vC(e)}function zX(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Xhe={inList:"euiCheckbox--inList"},e1r=Vt(Xhe),Zv=function(e){Y8t(n,e);var t=Q8t(n);function n(){var r;X8t(this,n);for(var o=arguments.length,i=new Array(o),u=0;u=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function nxt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Qhe={none:null,xs:"euiFlexGroup--gutterExtraSmall",s:"euiFlexGroup--gutterSmall",m:"euiFlexGroup--gutterMedium",l:"euiFlexGroup--gutterLarge",xl:"euiFlexGroup--gutterExtraLarge"},l1r=Vt(Qhe),Zhe={stretch:null,flexStart:"euiFlexGroup--alignItemsFlexStart",flexEnd:"euiFlexGroup--alignItemsFlexEnd",center:"euiFlexGroup--alignItemsCenter",baseline:"euiFlexGroup--alignItemsBaseline"},s1r=Vt(Zhe),ege={flexStart:null,flexEnd:"euiFlexGroup--justifyContentFlexEnd",center:"euiFlexGroup--justifyContentCenter",spaceBetween:"euiFlexGroup--justifyContentSpaceBetween",spaceAround:"euiFlexGroup--justifyContentSpaceAround",spaceEvenly:"euiFlexGroup--justifyContentSpaceEvenly"},u1r=Vt(ege),tge={row:"euiFlexGroup--directionRow",rowReverse:"euiFlexGroup--directionRowReverse",column:"euiFlexGroup--directionColumn",columnReverse:"euiFlexGroup--directionColumnReverse"},c1r=Vt(tge),oxt=function(t){return["div","span"].includes(t)},eo=(0,Khe.forwardRef)(function(e,t){var n=e.children,r=e.className,o=e.gutterSize,i=o===void 0?"l":o,u=e.alignItems,f=u===void 0?"stretch":u,h=e.responsive,y=h===void 0?!0:h,O=e.justifyContent,S=O===void 0?"flexStart":O,I=e.direction,A=I===void 0?"row":I,C=e.wrap,M=C===void 0?!1:C,W=e.component,R=W===void 0?"div":W,B=rxt(e,txt),Y=(0,Yhe.default)("euiFlexGroup",Qhe[i],Zhe[f],ege[S],tge[A],{"euiFlexGroup--responsive":y,"euiFlexGroup--wrap":M},r);if(!oxt(R))throw new Error("".concat(R," is not a valid element type. Use `div` or `span`."));return R==="span"?a("span",yC({className:Y,ref:t},B),n):a("div",yC({className:Y,ref:t},B),n)});eo.propTypes={alignItems:au.default.oneOf(["stretch","flexStart","flexEnd","center","baseline"]),component:au.default.oneOf(["div","span"]),direction:au.default.oneOf(["row","rowReverse","column","columnReverse"]),gutterSize:au.default.oneOf(["none","xs","s","m","l","xl"]),justifyContent:au.default.oneOf(["flexStart","flexEnd","center","spaceBetween","spaceAround","spaceEvenly"]),responsive:au.default.bool,wrap:au.default.bool,className:au.default.string,"aria-label":au.default.string,"data-test-subj":au.default.string};eo.displayName="EuiFlexGroup";var f1r=P(L()),ey=P(dt()),rge=P(Ct());var ixt=["children","className","grow","component"];function DX(){return DX=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function sxt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var nge=[1,2,3,4,5,6,7,8,9,10],kt=function(t){var n=t.children,r=t.className,o=t.grow,i=o===void 0?!0:o,u=t.component,f=u===void 0?"div":u,h=lxt(t,ixt);uxt(i);var y=(0,rge.default)("euiFlexItem",axt({"euiFlexItem--flexGrowZero":!i},"euiFlexItem--flexGrow".concat(i),typeof i=="number"?nge.indexOf(i)>=0:void 0),r);return a(f,DX({className:y},h),n)};kt.propTypes={className:ey.default.string,"aria-label":ey.default.string,"data-test-subj":ey.default.string,grow:ey.default.oneOf([1,2,3,4,5,6,7,8,9,10,!0,!1,null]),component:ey.default.any};function uxt(e){var t=[null,void 0,!0,!1].concat(nge);if(t.indexOf(e)===-1)throw new Error("Prop `grow` passed to `EuiFlexItem` must be a boolean or an integer between 1 and 10, received `".concat(e,"`"))}var ry=P(L()),tr=P(dt()),qX=P(Ct());var SC=P(L()),$n=P(dt());var b1r=P(L()),w_=P(dt()),oge=P(Ct());var cxt=["className","onClick","size"];function NX(){return NX=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function fxt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ige={s:"euiFormControlLayoutClearButton--small",m:null},j1r=Vt(ige),FX=function(t){var n=t.className,r=t.onClick,o=t.size,i=o===void 0?"m":o,u=pxt(t,cxt),f=(0,oge.default)("euiFormControlLayoutClearButton",ige[i],n);return a(At,{token:"euiFormControlLayoutClearButton.label",default:"Clear input"},function(h){return a("button",NX({type:"button",className:f,onClick:r,"aria-label":h},u),a(ar,{className:"euiFormControlLayoutClearButton__icon",type:"cross"}))})};FX.propTypes={className:w_.default.string,"aria-label":w_.default.string,"data-test-subj":w_.default.string,size:w_.default.any};var k1r=P(L()),vs=P(dt()),age=P(Ct());var dxt=["className","onClick","type","iconRef","size","color"];function bC(){return bC=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function hxt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var wC=function(t){var n=t.className,r=t.onClick,o=t.type,i=t.iconRef,u=t.size,f=t.color,h=mxt(t,dxt),y=(0,age.default)("euiFormControlLayoutCustomIcon",n,{"euiFormControlLayoutCustomIcon--clickable":r});return r?a("button",bC({type:"button",onClick:r,className:y,ref:i},h),a(ar,{className:"euiFormControlLayoutCustomIcon__icon","aria-hidden":"true",size:u,type:o,color:f})):a("span",bC({className:y,ref:i},h),a(ar,{className:"euiFormControlLayoutCustomIcon__icon","aria-hidden":"true",size:u,type:o,color:f}))};wC.propTypes={className:vs.default.string,"aria-label":vs.default.string,"data-test-subj":vs.default.string,type:vs.default.oneOfType([vs.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,vs.default.string.isRequired,vs.default.elementType.isRequired]).isRequired,size:vs.default.any,iconRef:vs.default.oneOfType([vs.default.string.isRequired,vs.default.func.isRequired])};function OC(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?OC=function(n){return typeof n}:OC=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},OC(e)}var gxt=["ref","side"];function xC(){return xC=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function yxt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function bxt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function lge(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function _C(e){return _C=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},_C(e)}function sge(e){return!!e&&e.hasOwnProperty("type")}var BX=function(e){Oxt(n,e);var t=xxt(n);function n(){return bxt(this,n),t.apply(this,arguments)}return wxt(n,[{key:"render",value:function(){var o=this.props,i=o.icon,u=o.isInvalid,f=o.isDropdown,h=sge(i)&&i.side?i.side:"left",y=this.renderCustomIcon(),O=this.renderLoadingSpinner(),S=this.renderClearButton(),I=this.renderInvalidIcon(),A=this.renderDropdownIcon(),C;y&&h==="left"&&(C=a("div",{className:"euiFormControlLayoutIcons"},y));var M;return(S||O||u||f||y&&h==="right")&&(M=a("div",{className:"euiFormControlLayoutIcons euiFormControlLayoutIcons--right"},S,O,I,h==="right"?y:void 0,A)),a(SC.Fragment,null,C,M)}},{key:"renderCustomIcon",value:function(){var o=this.props,i=o.icon,u=o.compressed;if(!i)return null;var f=sge(i)?i:{type:i},h=f.ref,y=f.side,O=vxt(f,gxt);return a(wC,xC({size:u?"s":"m",iconRef:h},O))}},{key:"renderDropdownIcon",value:function(){var o=this.props,i=o.isDropdown,u=o.compressed;return i?a(wC,{size:u?"s":"m",type:"arrowDown"}):null}},{key:"renderLoadingSpinner",value:function(){var o=this.props,i=o.isLoading,u=o.compressed;return i?a($r,{size:u?"s":"m"}):null}},{key:"renderClearButton",value:function(){var o=this.props,i=o.clear,u=o.compressed;return i?a(FX,xC({size:u?"s":"m"},i)):null}},{key:"renderInvalidIcon",value:function(){var o=this.props,i=o.isInvalid,u=o.compressed;return i?a(ar,{size:u?"s":"m",color:"danger",type:"alert"}):null}}]),n}(SC.Component);BX.propTypes={icon:$n.default.oneOfType([$n.default.oneOfType([$n.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,$n.default.string.isRequired,$n.default.elementType.isRequired]).isRequired,$n.default.shape({type:$n.default.oneOfType([$n.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,$n.default.string.isRequired,$n.default.elementType.isRequired]).isRequired,side:$n.default.any,color:$n.default.oneOfType([$n.default.string.isRequired,$n.default.any.isRequired]),ref:$n.default.oneOfType([$n.default.string.isRequired,$n.default.func.isRequired])}).isRequired]),clear:$n.default.shape({className:$n.default.string,"aria-label":$n.default.string,"data-test-subj":$n.default.string,size:$n.default.any}),isLoading:$n.default.bool,isInvalid:$n.default.bool,isDropdown:$n.default.bool,compressed:$n.default.bool};var F1r=P(L()),ul=P(dt()),uge=P(Ct());var Ixt=["type","isFocused","isInvalid","isDisabled","children","className"];function jC(){return jC=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Pxt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ty=function(t){var n=t.type,r=n===void 0?"label":n,o=t.isFocused,i=t.isInvalid,u=t.isDisabled,f=t.children,h=t.className,y=kxt(t,Ixt),O=(0,uge.default)("euiFormLabel",h,{"euiFormLabel-isFocused":o,"euiFormLabel-isInvalid":i,"euiFormLabel-isDisabled":u});return r==="legend"?a("legend",jC({className:O},y),f):a("label",jC({className:O},y),f)};ty.propTypes={type:ul.default.oneOfType([ul.default.oneOfType([ul.default.oneOf(["label"]),ul.default.oneOf(["label","legend"])]),ul.default.oneOfType([ul.default.oneOf(["legend"]).isRequired,ul.default.oneOf(["label","legend"])])]),isFocused:ul.default.bool,isInvalid:ul.default.bool,isDisabled:ul.default.bool,className:ul.default.string,"aria-label":ul.default.string,"data-test-subj":ul.default.string};function IC(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?IC=function(n){return typeof n}:IC=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},IC(e)}var Ext=["children","icon","clear","fullWidth","isLoading","isDisabled","compressed","className","prepend","append","readOnly","isInvalid","isDropdown","inputId"];function HX(){return HX=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Axt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function Mxt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function cge(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function kC(e){return kC=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},kC(e)}var ny=function(e){Rxt(n,e);var t=zxt(n);function n(){return Mxt(this,n),t.apply(this,arguments)}return Txt(n,[{key:"render",value:function(){var o=this.props,i=o.children,u=o.icon,f=o.clear,h=o.fullWidth,y=o.isLoading,O=o.isDisabled,S=o.compressed,I=o.className,A=o.prepend,C=o.append,M=o.readOnly,W=o.isInvalid,R=o.isDropdown,B=o.inputId,Y=Cxt(o,Ext),X=(0,qX.default)("euiFormControlLayout",{"euiFormControlLayout--fullWidth":h,"euiFormControlLayout--compressed":S,"euiFormControlLayout--readOnly":M,"euiFormControlLayout--group":A||C,"euiFormControlLayout-isDisabled":O},I),ae=this.renderSideNode("prepend",A,B),Z=this.renderSideNode("append",C,B);return a("div",HX({className:X},Y),ae,a("div",{className:"euiFormControlLayout__childrenWrapper"},i,a(BX,{icon:u,clear:f,compressed:S,isLoading:y,isInvalid:W,isDropdown:!M&&!O&&R})),Z)}},{key:"renderSideNode",value:function(o,i,u){var f=this;if(i){if(typeof i=="string")return this.createFormLabel(o,i,u);var h=ry.default.Children.map(i,function(y,O){return typeof y=="string"?f.createFormLabel(o,y,u):f.createSideNode(o,y,O)});return h}}},{key:"createFormLabel",value:function(o,i,u){return a(ty,{htmlFor:u,className:"euiFormControlLayout__".concat(o)},i)}},{key:"createSideNode",value:function(o,i,u){return(0,ry.cloneElement)(i,{className:(0,qX.default)("euiFormControlLayout__".concat(o),i.props.className),key:u})}}]),n}(ry.Component);ny.propTypes={className:tr.default.string,"aria-label":tr.default.string,"data-test-subj":tr.default.string,prepend:tr.default.oneOfType([tr.default.oneOfType([tr.default.string.isRequired,tr.default.element.isRequired]).isRequired,tr.default.arrayOf(tr.default.oneOfType([tr.default.string.isRequired,tr.default.element.isRequired]).isRequired).isRequired]),append:tr.default.oneOfType([tr.default.oneOfType([tr.default.string.isRequired,tr.default.element.isRequired]).isRequired,tr.default.arrayOf(tr.default.oneOfType([tr.default.string.isRequired,tr.default.element.isRequired]).isRequired).isRequired]),children:tr.default.node,icon:tr.default.oneOfType([tr.default.oneOfType([tr.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,tr.default.string.isRequired,tr.default.elementType.isRequired]).isRequired,tr.default.shape({type:tr.default.oneOfType([tr.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,tr.default.string.isRequired,tr.default.elementType.isRequired]).isRequired,side:tr.default.any,color:tr.default.oneOfType([tr.default.string.isRequired,tr.default.any.isRequired]),ref:tr.default.oneOfType([tr.default.string.isRequired,tr.default.func.isRequired])}).isRequired]),clear:tr.default.shape({className:tr.default.string,"aria-label":tr.default.string,"data-test-subj":tr.default.string,size:tr.default.any}),fullWidth:tr.default.bool,isLoading:tr.default.bool,isDisabled:tr.default.bool,compressed:tr.default.bool,readOnly:tr.default.bool,isInvalid:tr.default.bool,isDropdown:tr.default.bool,inputId:tr.default.string};var hc=P(L()),rm=P(dt());function Fxt(e){return e!=null&&e.hasOwnProperty("current")}var PC=function(t){var n=t.isInvalid,r=t.children,o=(0,hc.useRef)(null),i=hc.Children.only(r),u=i.ref,f=(0,hc.useCallback)(function(h){o.current=h,typeof u=="function"?u(h):Fxt(u)&&(u.current=h)},[u]);return(0,hc.useEffect)(function(){o.current===null||typeof o.current.setCustomValidity!="function"||(n?o.current.setCustomValidity("Invalid"):o.current.setCustomValidity(""))}),(0,hc.cloneElement)(i,{ref:f,"aria-invalid":n})};PC.propTypes={className:rm.default.string,"aria-label":rm.default.string,"data-test-subj":rm.default.string,isInvalid:rm.default.bool,children:rm.default.shape({ref:rm.default.any}).isRequired};function pge(e){var t=e.icon,n=e.clear,r=e.isLoading,o=e.isInvalid,i=e.isDropdown,u=[t,n,o,r,i].filter(function(f){return f===!0}).length;return u>0?"euiFormControlLayout--".concat(u,"icons"):void 0}var dge=P(L()),xn=P(dt()),mge=P(Ct());var Wxt={isEventSupported:function(t,n){return"on".concat(t)in n}},UX=Object.freeze(Wxt);function EC(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?EC=function(n){return typeof n}:EC=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},EC(e)}var Bxt=["className","id","name","placeholder","isInvalid","fullWidth","isLoading","inputRef","incremental","compressed","onSearch","isClearable","append","prepend"];function JX(){return JX=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Vxt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function qxt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function fge(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function CC(e){return CC=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},CC(e)}function om(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var $X=!1,O_=function(e){$xt(n,e);var t=Jxt(n);function n(){var r;qxt(this,n);for(var o=arguments.length,i=new Array(o),u=0;u=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Qxt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var MC=function(t){var n=t.children,r=t.className,o=Yxt(t,Kxt),i=(0,hge.default)("euiFormErrorText",r);return a("div",XX({className:i,"aria-live":"polite"},o),n)};MC.propTypes={className:AC.default.string,"aria-label":AC.default.string,"data-test-subj":AC.default.string};var wmr=P(L()),TC=P(dt()),gge=P(Ct());var Zxt=["children","className"];function KX(){return KX=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function t9t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var RC=function(t){var n=t.children,r=t.className,o=e9t(t,Zxt),i=(0,gge.default)("euiFormHelpText",r);return a("div",KX({className:i},o),n)};RC.propTypes={className:TC.default.string,"aria-label":TC.default.string,"data-test-subj":TC.default.string};var Wd=P(L()),Jn=P(dt()),eK=P(Ct());function zC(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?zC=function(n){return typeof n}:zC=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},zC(e)}var r9t=["children","helpText","isInvalid","error","label","labelType","labelAppend","hasEmptyLabelSpace","fullWidth","className","describedByIds","display","hasChildLabel","id","isDisabled"];function n9t(e){return l9t(e)||a9t(e)||i9t(e)||o9t()}function o9t(){throw new TypeError(`Invalid attempt to spread non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function i9t(e,t){if(e){if(typeof e=="string")return QX(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return QX(e,t)}}function a9t(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function l9t(e){if(Array.isArray(e))return QX(e)}function QX(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function u9t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function c9t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function yge(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function DC(e){return DC=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},DC(e)}function __(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var bge={row:null,rowCompressed:"euiFormRow--compressed",columnCompressed:"euiFormRow--compressed euiFormRow--horizontal",center:null,centerCompressed:"euiFormRow--compressed",columnCompressedSwitch:"euiFormRow--compressed euiFormRow--horizontal euiFormRow--hasSwitch"},Tmr=Vt(bge),gc=function(e){f9t(n,e);var t=d9t(n);function n(){var r;c9t(this,n);for(var o=arguments.length,i=new Array(o),u=0;u0&&(at["aria-describedby"]=ht.join(" "));var Mt=Wd.Children.only(f),Ze=(0,Wd.cloneElement)(Mt,YX({id:K,disabled:(o=(i=Mt.props.disabled)!==null&&i!==void 0?i:Mt.props.isDisabled)!==null&&o!==void 0?o:ae,onFocus:this.onFocus,onBlur:this.onBlur},at)),Kt=(0,eK.default)("euiFormRow__fieldWrapper",{euiFormRow__fieldWrapperDisplayOnly:B.startsWith("center")}),it={className:se,id:"".concat(K,"-row")},xt=a(Wd.default.Fragment,null,We,a("div",{className:Kt},Ze,be,Se));return I==="legend"?a("fieldset",x_({},it,Z),xt):a("div",x_({},it,Z),xt)}}]),n}(Wd.Component);__(gc,"defaultProps",{display:"row",hasEmptyLabelSpace:!1,fullWidth:!1,describedByIds:[],labelType:"label",hasChildLabel:!0});gc.propTypes={labelType:Jn.default.oneOfType([Jn.default.oneOf(["label"]),Jn.default.oneOf(["legend"])]),className:Jn.default.string,"aria-label":Jn.default.string,"data-test-subj":Jn.default.string,display:Jn.default.oneOf(["row","rowCompressed","columnCompressed","center","centerCompressed","columnCompressedSwitch"]),hasEmptyLabelSpace:Jn.default.bool,fullWidth:Jn.default.bool,describedByIds:Jn.default.arrayOf(Jn.default.string.isRequired),hasChildLabel:Jn.default.bool,children:Jn.default.element.isRequired,label:Jn.default.node,labelAppend:Jn.default.any,id:Jn.default.string,isInvalid:Jn.default.bool,error:Jn.default.oneOfType([Jn.default.node.isRequired,Jn.default.arrayOf(Jn.default.node.isRequired).isRequired]),helpText:Jn.default.oneOfType([Jn.default.node.isRequired,Jn.default.arrayOf(Jn.default.node.isRequired).isRequired]),isDisabled:Jn.default.bool};var VC=P(L()),$i=P(dt()),iK=P(Ct());var WC=P(L()),ii=P(dt()),rK=P(Ct());var g9t=["children","className","hasPanel","icon","buttonRef","disabled","layoutAlign","toolTipTitle","toolTipContent","toolTipPosition","href","target","rel","size"];function NC(){return NC=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function y9t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function b9t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function wge(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function FC(e){return FC=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},FC(e)}var Oge={s:"euiContextMenuItem--small",m:null},qmr=Vt(Oge),xge={center:null,top:"euiContextMenu__itemLayout--top",bottom:"euiContextMenu__itemLayout--bottom"},Umr=Vt(xge),lu=function(e){O9t(n,e);var t=x9t(n);function n(){return b9t(this,n),t.apply(this,arguments)}return w9t(n,[{key:"render",value:function(){var o=this.props,i=o.children,u=o.className,f=o.hasPanel,h=o.icon,y=o.buttonRef,O=o.disabled,S=o.layoutAlign,I=S===void 0?"center":S,A=o.toolTipTitle,C=o.toolTipContent,M=o.toolTipPosition,W=M===void 0?"right":M,R=o.href,B=o.target,Y=o.rel,X=o.size,ae=v9t(o,g9t),Z,K=!R||ma(R),de=O||!K;if(h)switch(S_(h)){case"string":Z=a(ar,{type:h,size:"m",className:"euiContextMenu__icon",color:"inherit"});break;default:Z=(0,WC.cloneElement)(h,{className:"euiContextMenu__icon"})}var se;f&&(se=a(ar,{type:"arrowRight",size:"m",className:"euiContextMenu__arrow"}));var Se=(0,rK.default)("euiContextMenuItem",X&&Oge[X],u,{"euiContextMenuItem-isDisabled":de}),Oe=(0,rK.default)("euiContextMenu__itemLayout",xge[I]),be=a("span",{className:Oe},Z,a("span",{className:"euiContextMenuItem__text"},i),se),Ue;if(R&&!de){var We=ni({href:R,target:B,rel:Y});Ue=a("a",NC({className:Se,href:R,target:B,rel:We,ref:y},ae),be)}else Ue=a("button",NC({disabled:de,className:Se,type:"button",ref:y},ae),be);return C?a(ga,{title:A||null,content:C,anchorClassName:"eui-displayBlock",position:W},Ue):Ue}}]),n}(WC.Component);lu.propTypes={className:ii.default.string,"aria-label":ii.default.string,"data-test-subj":ii.default.string,icon:ii.default.oneOfType([ii.default.element.isRequired,ii.default.string.isRequired,ii.default.any.isRequired]),hasPanel:ii.default.bool,disabled:ii.default.bool,onClick:ii.default.func,buttonRef:ii.default.any,toolTipContent:ii.default.node,toolTipTitle:ii.default.node,toolTipPosition:ii.default.oneOf(["top","right","bottom","left"]),href:ii.default.string,target:ii.default.string,rel:ii.default.string,layoutAlign:ii.default.oneOf(["center","top","bottom"]),size:ii.default.oneOf(["s","m"])};function BC(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?BC=function(n){return typeof n}:BC=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},BC(e)}var I9t=["children","className","onClose","title","onHeightChange","transitionType","transitionDirection","onTransitionComplete","onUseKeyboardToNavigate","items","initialFocusedItemIndex","showNextPanel","showPreviousPanel","size"];function nK(){return nK=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function P9t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function E9t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _ge(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function HC(e){return HC=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},HC(e)}function uu(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var jge={s:"euiContextMenuPanelTitle--small",m:null},thr=Vt(jge),Sge={next:{in:"euiContextMenuPanel-txInLeft",out:"euiContextMenuPanel-txOutLeft"},previous:{in:"euiContextMenuPanel-txInRight",out:"euiContextMenuPanel-txOutRight"}},Cp=function(e){A9t(n,e);var t=M9t(n);function n(r){var o;return E9t(this,n),o=t.call(this,r),uu(su(o),"_isMounted",!1),uu(su(o),"backButton",null),uu(su(o),"panel",null),uu(su(o),"initialPopoverParent",null),uu(su(o),"findMenuItems",function(){var i;if(o.panel&&(i=o.props.items)!==null&&i!==void 0&&i.length&&!o.state.menuItems.length){var u=Vk(o.panel);u.length&&o.setState({menuItems:u})}}),uu(su(o),"focusMenuItem",function(i){var u,f=i==="up"?-1:1,h;o.state.focusedItemIndex===void 0?h=i==="up"?o.state.menuItems.length-1:0:(h=o.state.focusedItemIndex+f,h<0?h=o.state.menuItems.length-1:h===o.state.menuItems.length&&(h=0)),o.setState({focusedItemIndex:h}),(u=o.state.menuItems[h])===null||u===void 0||u.focus()}),uu(su(o),"onKeyDown",function(i){var u=o.props,f=u.items,h=u.onClose,y=u.showPreviousPanel;if(h&&(f!=null&&f.length||document.activeElement===o.backButton||document.activeElement===o.panel)&&i.key===ps.ARROW_LEFT&&y&&(i.preventDefault(),i.stopPropagation(),y(),o.props.onUseKeyboardToNavigate&&o.props.onUseKeyboardToNavigate()),f!=null&&f.length)switch(i.key){case ps.TAB:requestAnimationFrame(function(){var O=o.state.menuItems.indexOf(document.activeElement);o.setState({focusedItemIndex:O>=0&&O=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function D9t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var N9t={none:null,xs:"marginXSmall",s:"marginSmall",m:"marginMedium",l:"marginLarge",xl:"marginXLarge",xxl:"marginXXLarge"},qC=function(t){var n,r=t.className,o=t.size,i=o===void 0?"full":o,u=t.margin,f=u===void 0?"l":u,h=L9t(t,z9t),y=en(),O=Ige(y),S=(0,Pge.default)("euiHorizontalRule",(n={},kge(n,"euiHorizontalRule--".concat(i),i),kge(n,"euiHorizontalRule--".concat(N9t[f]),f&&f!=="none"),n),r),I=[O.euiHorizontalRule,O[i],O[f]];return a("hr",aK({css:I,className:S},h))};qC.propTypes={size:oy.default.any,margin:oy.default.any,className:oy.default.string,"aria-label":oy.default.string,"data-test-subj":oy.default.string};var $C=P(L()),Ji=P(dt()),lK=P(Ct());var F9t=["label","id","checked","disabled","compressed","onChange","className","showLabel","type","labelProps"];function UC(){return UC=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function B9t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var j_=function(t){var n=t.label,r=t.id,o=t.checked,i=t.disabled,u=t.compressed,f=t.onChange,h=t.className,y=t.showLabel,O=y===void 0?!0:y,S=t.type,I=S===void 0?"button":S,A=t.labelProps,C=W9t(t,F9t),M=Gs({conditionalId:r}),W=Gs({conditionalId:A?.id}),R=(0,$C.useCallback)(function(X){if(!i){var ae=X;ae.target.checked=!o,f(ae)}},[o,i,f]),B=(0,lK.default)("euiSwitch",{"euiSwitch--compressed":u},h),Y=(0,lK.default)("euiSwitch__label",A?.className);return O===!1&&typeof n!="string"&&console.warn("EuiSwitch `label` must be a string when `showLabel` is false."),a("div",{className:B},a("button",UC({id:M,"aria-checked":o||!1,className:"euiSwitch__button",role:"switch",type:I,disabled:i,onClick:R,"aria-label":O?void 0:n,"aria-labelledby":O?W:void 0},C),a("span",{className:"euiSwitch__body"},a("span",{className:"euiSwitch__thumb"}),a("span",{className:"euiSwitch__track"},!u&&a($C.default.Fragment,null,a(ar,{type:"cross",size:"m",className:"euiSwitch__icon"}),a(ar,{type:"check",size:"m",className:"euiSwitch__icon euiSwitch__icon--checked"}))))),O&&a("span",UC({},A,{className:Y,id:W,onClick:R}),n))};j_.propTypes={className:Ji.default.string,"aria-label":Ji.default.string,"data-test-subj":Ji.default.string,showLabel:Ji.default.bool,label:Ji.default.oneOfType([Ji.default.node.isRequired,Ji.default.string.isRequired]).isRequired,checked:Ji.default.bool.isRequired,onChange:Ji.default.func.isRequired,disabled:Ji.default.bool,compressed:Ji.default.bool,type:Ji.default.oneOf(["submit","reset","button"]),labelProps:Ji.default.shape({className:Ji.default.string,"aria-label":Ji.default.string,"data-test-subj":Ji.default.string})};function JC(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}var Ege=Number.isNaN||function(t){return typeof t=="number"&&t!==t};function H9t(e,t){return!!(e===t||Ege(e)&&Ege(t))}function V9t(e,t){if(e.length!==t.length)return!1;for(var n=0;n=0)&&(n[o]=e[o]);return n}var U9t=typeof performance=="object"&&typeof performance.now=="function",Cge=U9t?function(){return performance.now()}:function(){return Date.now()};function Age(e){cancelAnimationFrame(e.id)}function $9t(e,t){var n=Cge();function r(){Cge()-n>=t?e.call(null):o.id=requestAnimationFrame(r)}var o={id:requestAnimationFrame(r)};return o}var sK=-1;function Mge(e){if(e===void 0&&(e=!1),sK===-1||e){var t=document.createElement("div"),n=t.style;n.width="50px",n.height="50px",n.overflow="scroll",document.body.appendChild(t),sK=t.offsetWidth-t.clientWidth,document.body.removeChild(t)}return sK}var iy=null;function Tge(e){if(e===void 0&&(e=!1),iy===null||e){var t=document.createElement("div"),n=t.style;n.width="50px",n.height="50px",n.overflow="scroll",n.direction="rtl";var r=document.createElement("div"),o=r.style;return o.width="100px",o.height="100px",t.appendChild(r),document.body.appendChild(t),t.scrollLeft>0?iy="positive-descending":(t.scrollLeft=1,t.scrollLeft===0?iy="negative":iy="positive-ascending"),document.body.removeChild(t),iy}return iy}var J9t=150,G9t=function(t,n){return t};function X9t(e){var t,n=e.getItemOffset,r=e.getEstimatedTotalSize,o=e.getItemSize,i=e.getOffsetForIndexAndAlignment,u=e.getStartIndexForOffset,f=e.getStopIndexForStartIndex,h=e.initInstanceProps,y=e.shouldResetStyleCacheOnItemSizeChange,O=e.validateProps;return t=function(S){Na(I,S);function I(C){var M;return M=S.call(this,C)||this,M._instanceProps=h(M.props,JC(M)),M._outerRef=void 0,M._resetIsScrollingTimeoutId=null,M.state={instance:JC(M),isScrolling:!1,scrollDirection:"forward",scrollOffset:typeof M.props.initialScrollOffset=="number"?M.props.initialScrollOffset:0,scrollUpdateWasRequested:!1},M._callOnItemsRendered=void 0,M._callOnItemsRendered=GC(function(W,R,B,Y){return M.props.onItemsRendered({overscanStartIndex:W,overscanStopIndex:R,visibleStartIndex:B,visibleStopIndex:Y})}),M._callOnScroll=void 0,M._callOnScroll=GC(function(W,R,B){return M.props.onScroll({scrollDirection:W,scrollOffset:R,scrollUpdateWasRequested:B})}),M._getItemStyle=void 0,M._getItemStyle=function(W){var R=M.props,B=R.direction,Y=R.itemSize,X=R.layout,ae=M._getItemStyleCache(y&&Y,y&&X,y&&B),Z;if(ae.hasOwnProperty(W))Z=ae[W];else{var K=n(M.props,W,M._instanceProps),de=o(M.props,W,M._instanceProps),se=B==="horizontal"||X==="horizontal",Se=B==="rtl",Oe=se?K:0;ae[W]=Z={position:"absolute",left:Se?void 0:Oe,right:Se?Oe:void 0,top:se?0:K,height:se?"100%":de,width:se?de:"100%"}}return Z},M._getItemStyleCache=void 0,M._getItemStyleCache=GC(function(W,R,B){return{}}),M._onScrollHorizontal=function(W){var R=W.currentTarget,B=R.clientWidth,Y=R.scrollLeft,X=R.scrollWidth;M.setState(function(ae){if(ae.scrollOffset===Y)return null;var Z=M.props.direction,K=Y;if(Z==="rtl")switch(Tge()){case"negative":K=-Y;break;case"positive-descending":K=X-B-Y;break}return K=Math.max(0,Math.min(K,X-B)),{isScrolling:!0,scrollDirection:ae.scrollOffsetZ.clientWidth?Mge():0:ae=Z.scrollHeight>Z.clientHeight?Mge():0}this.scrollTo(i(this.props,M,W,X,this._instanceProps,ae))},A.componentDidMount=function(){var M=this.props,W=M.direction,R=M.initialScrollOffset,B=M.layout;if(typeof R=="number"&&this._outerRef!=null){var Y=this._outerRef;W==="horizontal"||B==="horizontal"?Y.scrollLeft=R:Y.scrollTop=R}this._callPropsCallbacks()},A.componentDidUpdate=function(){var M=this.props,W=M.direction,R=M.layout,B=this.state,Y=B.scrollOffset,X=B.scrollUpdateWasRequested;if(X&&this._outerRef!=null){var ae=this._outerRef;if(W==="horizontal"||R==="horizontal")if(W==="rtl")switch(Tge()){case"negative":ae.scrollLeft=-Y;break;case"positive-ascending":ae.scrollLeft=Y;break;default:var Z=ae.clientWidth,K=ae.scrollWidth;ae.scrollLeft=K-Z-Y;break}else ae.scrollLeft=Y;else ae.scrollTop=Y}this._callPropsCallbacks()},A.componentWillUnmount=function(){this._resetIsScrollingTimeoutId!==null&&Age(this._resetIsScrollingTimeoutId)},A.render=function(){var M=this.props,W=M.children,R=M.className,B=M.direction,Y=M.height,X=M.innerRef,ae=M.innerElementType,Z=M.innerTagName,K=M.itemCount,de=M.itemData,se=M.itemKey,Se=se===void 0?G9t:se,Oe=M.layout,be=M.outerElementType,Ue=M.outerTagName,We=M.style,Ge=M.useIsScrolling,Qe=M.width,ot=this.state.isScrolling,at=B==="horizontal"||Oe==="horizontal",ht=at?this._onScrollHorizontal:this._onScrollVertical,Mt=this._getRangeToRender(),Ze=Mt[0],Kt=Mt[1],it=[];if(K>0)for(var xt=Ze;xt<=Kt;xt++)it.push((0,ay.createElement)(W,{data:de,key:Se(xt,de),index:xt,isScrolling:Ge?ot:void 0,style:this._getItemStyle(xt)}));var wt=r(this.props,this._instanceProps);return(0,ay.createElement)(be||Ue||"div",{className:R,onScroll:ht,ref:this._outerRefSetter,style:yr({position:"relative",height:Y,width:Qe,overflow:"auto",WebkitOverflowScrolling:"touch",willChange:"transform",direction:B},We)},(0,ay.createElement)(ae||Z||"div",{children:it,ref:X,style:{height:at?"100%":wt,pointerEvents:ot?"none":void 0,width:at?wt:"100%"}}))},A._callPropsCallbacks=function(){if(typeof this.props.onItemsRendered=="function"){var M=this.props.itemCount;if(M>0){var W=this._getRangeToRender(),R=W[0],B=W[1],Y=W[2],X=W[3];this._callOnItemsRendered(R,B,Y,X)}}if(typeof this.props.onScroll=="function"){var ae=this.state,Z=ae.scrollDirection,K=ae.scrollOffset,de=ae.scrollUpdateWasRequested;this._callOnScroll(Z,K,de)}},A._getRangeToRender=function(){var M=this.props,W=M.itemCount,R=M.overscanCount,B=this.state,Y=B.isScrolling,X=B.scrollDirection,ae=B.scrollOffset;if(W===0)return[0,0,0,0];var Z=u(this.props,ae,this._instanceProps),K=f(this.props,Z,ae,this._instanceProps),de=!Y||X==="backward"?Math.max(1,R):1,se=!Y||X==="forward"?Math.max(1,R):1;return[Math.max(0,Z-de),Math.max(0,Math.min(W-1,K+se)),Z,K]},I}(ay.PureComponent),t.defaultProps={direction:"ltr",itemData:void 0,layout:"vertical",overscanCount:2,useIsScrolling:!1},t}var K9t=function(t,n){var r=t.children,o=t.direction,i=t.height,u=t.layout,f=t.innerTagName,h=t.outerTagName,y=t.width,O=n.instance;if(!1){var S;switch(o){case"horizontal":case"vertical":case"ltr":case"rtl":default:}switch(u){case"horizontal":case"vertical":default:}}};var KC=X9t({getItemOffset:function(t,n){var r=t.itemSize;return n*r},getItemSize:function(t,n){var r=t.itemSize;return r},getEstimatedTotalSize:function(t){var n=t.itemCount,r=t.itemSize;return r*n},getOffsetForIndexAndAlignment:function(t,n,r,o,i,u){var f=t.direction,h=t.height,y=t.itemCount,O=t.itemSize,S=t.layout,I=t.width,A=f==="horizontal"||S==="horizontal",C=A?I:h,M=Math.max(0,y*O-C),W=Math.min(M,n*O),R=Math.max(0,n*O-C+O+u);switch(r==="smart"&&(o>=R-C&&o<=W+C?r="auto":r="center"),r){case"start":return W;case"end":return R;case"center":{var B=Math.round(R+(W-R)/2);return BM+Math.floor(C/2)?M:B}case"auto":default:return o>=R&&o<=W?o:o=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function n_t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var bi=function(t){var n=t.className,r=t.size,o=r===void 0?"l":r,i=r_t(t,e_t),u=en(),f=Lge(u),h=(0,Dge.default)("euiSpacer",t_t({},"euiSpacer--".concat(o),o),n),y=[f.euiSpacer,f[o]];return a("div",uK({className:h,css:y},i))};bi.propTypes={className:I_.default.string,"aria-label":I_.default.string,"data-test-subj":I_.default.string,size:I_.default.any};var bve=P(L()),jn=P(dt()),wve=P(Ct());var Gge=P(L()),ft=P(dt()),Xge=P(Ct());var fK=P(L()),Bd=P(dt());var Xhr=P(L()),ly=P(dt()),Fge=P(Ct());var Nge=function(t,n){var r=t.euiTheme,o=t.colorMode,i=n.hasScreenReaderHelpText,u=n.highlightStart,f=n.highlightEnd,h={LIGHT:.1,DARK:.3};return Ne("background-color:",Ks(r.colors.primary,h[o]),";font-weight:",r.font.weight.bold,";color:",r.colors.text,";",i===!0&&` +`,mhe=function(){return dhe.createElement(x7t,{styles:_7t})};var Nd=k(L()),hhe=function(e){return"current"in e?e.current:e};function ghe(e){var t=e.setLockProps,n=e.onEscapeKey,r=e.onClickOutside,o=e.shards,i=e.onActivation,u=e.onDeactivation,f=e.noIsolation,h=(0,Nd.useState)(void 0),y=h[0],O=h[1],S=(0,Nd.useRef)(null),I=(0,Nd.useRef)(0);return rC.useEffect(function(){var A=function(R){R.defaultPrevented||(R.code==="Escape"||R.key==="Escape"||R.keyCode===27)&&n&&n(R)},C=function(R){R.defaultPrevented||R.target===S.current||R instanceof MouseEvent&&R.button!==0||o&&o.map(hhe).some(function(B){return B&&B.contains(R.target)||B===R.target})||r&&r(R)},M=function(R){C(R),I.current=R.touches.length},F=function(R){I.current=R.touches.length};if(y)return document.addEventListener("keydown",A),document.addEventListener("mousedown",C),document.addEventListener("touchstart",M),document.addEventListener("touchend",F),function(){document.removeEventListener("keydown",A),document.removeEventListener("mousedown",C),document.removeEventListener("touchstart",M),document.removeEventListener("touchend",F)}},[y,r,n]),(0,Nd.useEffect)(function(){if(y)return i&&i(y),function(){u&&u()}},[!!y]),(0,Nd.useEffect)(function(){var A=function(){return null},C=!1,M=function(R){f||(A=fhe(sme([R],(o||[]).map(hhe)),document.body,VE)),O(function(){return R})},F=function(){A(),C||O(null)};return t({onMouseDown:function(R){S.current=R.target},onTouchStart:function(R){S.current=R.target},onActivation:M,onDeactivation:F}),function(){C=!0,t(!1)}},[]),rC.createElement(mhe,null)}var vhe=Y1(HE,ghe);var S7t=function(e){return y_.createElement(vhe,Da({},e))},xX=y_.forwardRef(function(e,t){return y_.createElement(kme,Da({},e,{ref:t,sideCar:S7t}))});function nC(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?nC=function(n){return typeof n}:nC=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},nC(e)}var j7t=["children","clickOutsideDisables","disabled","returnFocus","noIsolation","scrollLock"];function yhe(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function bhe(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function P7t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function k7t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function whe(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function oC(e){return oC=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},oC(e)}function hc(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var em=function(e){C7t(n,e);var t=A7t(n);function n(){var r;k7t(this,n);for(var o=arguments.length,i=new Array(o),u=0;u"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function sC(e){return sC=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},sC(e)}function lC(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var jX=function(e){L7t(n,e);var t=D7t(n);function n(){var r;z7t(this,n);for(var o=arguments.length,i=new Array(o),u=0;u"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function cC(e){return cC=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},cC(e)}function rm(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var pC=function(e){q7t(n,e);var t=U7t(n);function n(r){var o;return H7t(this,n),o=t.call(this,r),rm(tm(o),"id",void 0),rm(tm(o),"capturedDownIds",void 0),rm(tm(o),"onClickOutside",function(i){var u=o.props,f=u.isDisabled,h=u.onOutsideClick;if(f){o.capturedDownIds=[];return}var y=i;if(y.euiGeneratedBy&&y.euiGeneratedBy.includes(o.id)||o.capturedDownIds.includes(o.id)){o.capturedDownIds=[];return}return o.capturedDownIds=[],h(y)}),rm(tm(o),"onChildClick",function(i,u){i.nativeEvent.hasOwnProperty("euiGeneratedBy")?i.nativeEvent.euiGeneratedBy.push(o.id):i.nativeEvent.euiGeneratedBy=[o.id],u&&u(i)}),rm(tm(o),"onChildMouseDown",function(i){o.onChildClick(i,function(u){var f=u.nativeEvent;o.capturedDownIds=f.euiGeneratedBy,o.props.onMouseDown&&o.props.onMouseDown(u),o.props.onTouchStart&&o.props.onTouchStart(u)})}),rm(tm(o),"onChildMouseUp",function(i){o.onChildClick(i,function(u){o.props.onMouseUp&&o.props.onMouseUp(u),o.props.onTouchEnd&&o.props.onTouchEnd(u)})}),o.id=Lr()(),o.capturedDownIds=[],o}return V7t(n,[{key:"componentDidMount",value:function(){document.addEventListener("mouseup",this.onClickOutside),document.addEventListener("touchend",this.onClickOutside)}},{key:"componentWillUnmount",value:function(){document.removeEventListener("mouseup",this.onClickOutside),document.removeEventListener("touchend",this.onClickOutside)}},{key:"render",value:function(){var o=She(She({},this.props.children.props),{onMouseDown:this.onChildMouseDown,onTouchStart:this.onChildMouseDown,onMouseUp:this.onChildMouseUp,onTouchEnd:this.onChildMouseUp}),i=Kv.Children.only(this.props.children);return(0,Kv.cloneElement)(i,o)}}]),n}(Kv.Component);pC.propTypes={children:Fd.default.element.isRequired,onOutsideClick:Fd.default.func.isRequired,isDisabled:Fd.default.bool,onMouseDown:Fd.default.func,onMouseUp:Fd.default.func,onTouchStart:Fd.default.func,onTouchEnd:Fd.default.func};var hdr=k(L()),b_=k(mt());var G7t="m",Ihe=function(t){var n=t.euiTheme,r=F9(t,"plain"),o=n.size[G7t];return{euiPopoverArrow:Fe("position:absolute;",zN(0,0),"&:before{content:'';position:absolute;",zN(0,0),";};label:euiPopoverArrow;"),top:Fe("&:before{",Cn.bottom,":-",o,";",Cn["border-left"],":",o," solid transparent;",Cn["border-right"],":",o," solid transparent;",Cn["border-top"],":",o," solid ",r,";};label:top;"),bottom:Fe("&:before{",Cn.top,":-",o,";",Cn["border-left"],":",o," solid transparent;",Cn["border-right"],":",o," solid transparent;",Cn["border-bottom"],":",o," solid ",r,";};label:bottom;"),left:Fe("&:before{",Cn.top,":50%;",Cn.right,":-",o,";",Cn["border-top"],":",o," solid transparent;",Cn["border-bottom"],":",o," solid transparent;",Cn["border-left"],":",o," solid ",r,";};label:left;"),right:Fe("&:before{",Cn.top,":50%;",Cn.left,":-",o,";",Cn["border-top"],":",o," solid transparent;",Cn["border-bottom"],":",o," solid transparent;",Cn["border-right"],":",o," solid ",r,";};label:right;")}};var X7t=["children","position"];function PX(){return PX=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Y7t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var fC=function(t){var n=t.children,r=t.position,o=K7t(t,X7t),i=en(),u=Ihe(i),f=[u.euiPopoverArrow,u[r]];return a("div",PX({"data-popover-arrow":r,css:f},o),n)};fC.propTypes={className:b_.default.string,"aria-label":b_.default.string,"data-test-subj":b_.default.string,position:b_.default.any.isRequired};var Phe=function(){return{euiPopover:Fe("position:relative;vertical-align:middle;",Kt("max-width","100%"),";;label:euiPopover;")}};var hC=k(L()),Vi=k(mt()),Mhe=k(Ct());var Mdr=k(L()),ul=k(mt()),Ehe=k(Ct());var Q7t={name:"122lw0e-grow",styles:"flex-grow:1;label:grow;"},Z7t={name:"1kk7odi-euiPanel",styles:"flex-grow:0;label:euiPanel;"},khe=function(t){var n=t.euiTheme;return{euiPanel:Z7t,grow:Q7t,hasShadow:Fe(o_(t,"m"),";;label:hasShadow;"),hasBorder:Fe("border:",n.border.thin,";;label:hasBorder;"),radius:{none:Fe(";label:none;"),m:Fe("border-radius:",n.border.radius.medium,";;label:m;")},isClickable:Fe(jp,"{transition:box-shadow ",n.animation.fast," ",n.animation.resistance,",transform ",n.animation.fast," ",n.animation.resistance,";}&:enabled{display:block;width:100%;",Sp("left"),";}&:hover,&:focus{",o_(t,"l"),";transform:translateY(-2px);cursor:pointer;};label:isClickable;")}};var e8t=["children","className","paddingSize","borderRadius","color","hasShadow","hasBorder","grow","panelRef","element"];function dC(){return dC=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function n8t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var kX={none:null,s:"paddingSmall",m:"paddingMedium",l:"paddingLarge"},Fdr=Ht(kX);var Hi=function(t){var n=t.children,r=t.className,o=t.paddingSize,i=o===void 0?"m":o,u=t.borderRadius,f=u===void 0?"m":u,h=t.color,y=h===void 0?"plain":h,O=t.hasShadow,S=O===void 0?!0:O,I=t.hasBorder,A=I===void 0?!1:I,C=t.grow,M=C===void 0?!0:C,F=t.panelRef,R=t.element,B=r8t(t,e8t),Y=en(),X=!A&&y==="plain",le=y==="plain"||y==="transparent",Z=khe(Y),K=[Z.euiPanel,M&&Z.grow,Z.radius[f],p0e()[i],u0e()[y],X&&S===!0&&Z.hasShadow,le&&A===!0&&Z.hasBorder,B.onClick&&Z.isClickable],de=(0,Ehe.default)("euiPanel","euiPanel--".concat(y),t8t({},"euiPanel--".concat(kX[i]),kX[i]),r);return B.onClick&&R!=="div"?a("button",dC({ref:F,className:de,css:K},B),n):a("div",dC({ref:F,className:de,css:K},B),n)};Hi.propTypes={element:ul.default.oneOfType([ul.default.oneOf(["button"]),ul.default.oneOf(["div"])]),hasShadow:ul.default.bool,hasBorder:ul.default.bool,paddingSize:ul.default.any,borderRadius:ul.default.any,grow:ul.default.bool,panelRef:ul.default.any,color:ul.default.any,className:ul.default.string,"aria-label":ul.default.string,"data-test-subj":ul.default.string};var mC="s",Che=function(t){var n=t.euiTheme;return{euiPopover__panel:Fe("position:absolute;",Kt("min-width","".concat(n.base*7,"px")),";",Kt("max-width","calc(100vw - ".concat(n.size.xl,")")),";backface-visibility:hidden;pointer-events:none;opacity:0;transform:translateY(0) translateX(0) translateZ(0);",NG(t,{property:"filter"})," &:focus{outline-offset:0;};label:euiPopover__panel;"),isOpen:Fe("opacity:1;pointer-events:auto;",jp,"{transition:opacity ",n.animation.bounce," ",n.animation.slow,",transform ",n.animation.bounce," calc(",n.animation.slow," + 100ms);};label:isOpen;"),top:Fe("transform:translateY(",n.size[mC],") translateZ(0);;label:top;"),bottom:Fe("transform:translateY(-",n.size[mC],") translateZ(0);;label:bottom;"),left:Fe("transform:translateX(",n.size[mC],") translateZ(0);;label:left;"),right:Fe("transform:translateX(-",n.size[mC],") translateZ(0);;label:right;"),attached:{isOpen:Fe("filter:none;",jp,"{transition:opacity ",n.animation.bounce," ",n.animation.slow,";};label:isOpen;"),top:Fe(ome(t),";;label:top;"),bottom:Fe(o_(t,"m"),";;label:bottom;"),left:Fe(";label:left;"),right:Fe(";label:right;")}}};var o8t=["children","className","isOpen","isAttached","position"];function EX(){return EX=Object.assign||function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function p8t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Ahe=(0,hC.createContext)({paddingSize:"l"}),Yv=function(t){var n=t.children,r=t.className,o=t.isOpen,i=t.isAttached,u=t.position,f=c8t(t,o8t),h=(0,hC.useContext)(Ahe);f.paddingSize&&(h.paddingSize=f.paddingSize);var y=en(),O=(0,Mhe.default)("euiPopover__panel",r),S=Che(y),I=[S.euiPopover__panel,o&&S.isOpen,o&&u&&S[u]];return i&&(I=[].concat(i8t(I),[o&&S.attached.isOpen,u&&S.attached[u]])),a(Ahe.Provider,{value:h},a(Hi,EX({className:O,css:I,"data-popover-panel":!0,"data-popover-open":o||void 0},f),n))};Yv.propTypes={element:Vi.default.oneOf(["div"]),hasShadow:Vi.default.bool,hasBorder:Vi.default.bool,paddingSize:Vi.default.any,borderRadius:Vi.default.any,grow:Vi.default.bool,panelRef:Vi.default.any,color:Vi.default.any,className:Vi.default.string,"aria-label":Vi.default.string,"data-test-subj":Vi.default.string,isOpen:Vi.default.bool,isAttached:Vi.default.bool,position:Vi.default.oneOfType([Vi.default.any.isRequired,Vi.default.oneOf([null])])};function vC(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?vC=function(n){return typeof n}:vC=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},vC(e)}var f8t=["anchorClassName","anchorPosition","button","buttonRef","insert","isOpen","ownFocus","children","className","closePopover","panelClassName","panelPaddingSize","panelProps","panelRef","panelStyle","popoverScreenReaderText","popoverRef","hasArrow","arrowChildren","repositionOnScroll","zIndex","attachToAnchor","display","offset","onTrapDeactivation","buffer","aria-label","aria-labelledby","container","focusTrapProps","initialFocus","tabIndex"];function Qv(){return Qv=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function m8t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function The(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function gC(e){for(var t=1;t"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function bC(e){return bC=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},bC(e)}function $o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Nhe(e,t){return P8t(e)||I8t(e,t)||Fhe(e,t)||j8t()}function j8t(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function Fhe(e,t){if(e){if(typeof e=="string")return MX(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return MX(e,t)}}function MX(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function L8t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var w_=function(t){var n=t.children,r=t.className,o=t.disableFocusTrap,i=o===void 0?!1:o,u=t.input,f=t.fullWidth,h=f===void 0?!1:f,y=t.onPanelResize,O=t.inputRef,S=t.panelRef,I=z8t(t,C8t),A=en(),C=(0,gc.useState)(null),M=TX(C,2),F=M[0],R=M[1],B=(0,gc.useState)(),Y=TX(B,2),X=Y[0],le=Y[1],Z=(0,gc.useState)(null),K=TX(Z,2),de=K[0],se=K[1],_e=AF([R,O]),be=AF([se,S]),Pe=(0,gc.useCallback)(function(Ke){if(de&&(X||Ke)){var rt=Ke||X;de.style.width="".concat(rt,"px"),y&&y(rt)}},[de,X,y]),Ue=(0,gc.useCallback)(function(){if(F){var Ke=F.getBoundingClientRect().width;le(Ke),Pe(Ke)}},[F,Pe]);(0,gc.useEffect)(function(){Ue()},[Ue]),(0,gc.useEffect)(function(){Pe()},[Pe]);var Le=function(rt){if(de&&rt.key===fs.TAB){var ot=XP(de).filter(function(dt){return Array.from(dt.attributes).map(function(jt){return jt.name}).indexOf("data-focus-guard")<0});(i||ot.length&&ot[ot.length-1]===document.activeElement)&&I.closePopover()}},Ge=(0,qhe.default)("euiInputPopover",r);return a(lu,RX({css:Fe(h?void 0:Kt("max-width",Hhe(A)),";label:EuiInputPopover;"),ownFocus:!1,button:a(V1,{onResize:Ue},function(Ke){return a("div",{ref:Ke},u)}),buttonRef:_e,panelRef:be,className:Ge},I),a(em,{clickOutsideDisables:!0,disabled:i},a("div",{onKeyDown:Le},n)))};w_.propTypes={className:Ap.default.string,"aria-label":Ap.default.string,"data-test-subj":Ap.default.string,disableFocusTrap:Ap.default.bool,fullWidth:Ap.default.bool,input:Ap.default.any.isRequired,inputRef:Ap.default.any,onPanelResize:Ap.default.func};w_.defaultProps={anchorPosition:"downLeft",attachToAnchor:!0,display:"block",panelPaddingSize:"s"};var $he=k(Ct()),Wd=k(mt());var D8t=["size","children","className","textTransform"];function Uhe(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function N8t(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function B8t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Zv=function(t){var n=t.size,r=n===void 0?"m":n,o=t.children,i=t.className,u=t.textTransform,f=W8t(t,D8t),h=en(),y=p1e(h),O=[y.euiTitle,u?y[u]:void 0,y[r]],S=(0,$he.default)("euiTitle",i,o.props.className),I=N8t({css:O,className:S},f);return wd(o,I)};Zv.propTypes={className:Wd.default.string,"aria-label":Wd.default.string,"data-test-subj":Wd.default.string,children:Wd.default.element.isRequired,size:Wd.default.any,textTransform:Wd.default.any,id:Wd.default.string};var x_=k(L()),Gt=k(mt()),wC=k(Ct());var F0r=k(L()),Ln=k(mt()),Jhe=k(Ct());var H8t=["className","isSelected","isDisabled","color","children"];function zX(){return zX=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function q8t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var LX=function(t){var n=t.className,r=t.isSelected,o=r===void 0?!1:r,i=t.isDisabled,u=t.color,f=t.children,h=V8t(t,H8t),y=U8t(o,i,f),O=(0,Jhe.default)("euiCardSelect","euiCardSelect--".concat(DX(u,o)),n);return a(za,zX({className:O,color:u||"text",size:"xs",isDisabled:i,iconType:o?"check":void 0,role:"switch","aria-checked":o},h),y)};LX.propTypes={href:Ln.default.string,onClick:Ln.default.func,color:Ln.default.oneOf(["primary","danger","text","ghost","success","warning"]),size:Ln.default.oneOf(["xs","s","m"]),flush:Ln.default.oneOf(["left","right","both"]),isDisabled:Ln.default.bool,isLoading:Ln.default.bool,isSelected:Ln.default.bool,target:Ln.default.string,rel:Ln.default.string,type:Ln.default.oneOf(["button","submit"]),buttonRef:Ln.default.any,contentProps:Ln.default.any,iconType:Ln.default.oneOfType([Ln.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,Ln.default.string.isRequired,Ln.default.elementType.isRequired]),iconSide:Ln.default.oneOf(["left","right"]),textProps:Ln.default.shape({className:Ln.default.string,"aria-label":Ln.default.string,"data-test-subj":Ln.default.string,ref:Ln.default.any,"data-text":Ln.default.string}),iconSize:Ln.default.oneOf(["s","m"]),className:Ln.default.string,"aria-label":Ln.default.string,"data-test-subj":Ln.default.string};function U8t(e,t,n){if(n)return n;var r;return e?r=a(At,{token:"euiCardSelect.selected",default:"Selected"}):t?r=a(At,{token:"euiCardSelect.unavailable",default:"Unavailable"}):r=a(At,{token:"euiCardSelect.select",default:"Select"}),r}function DX(e,t){var n;return e?n=e:t?n="success":n="text",n}var $8t=["className","description","isDisabled","title","titleElement","titleSize","icon","image","children","footer","onClick","href","rel","target","textAlign","betaBadgeProps","layout","selectable","display","paddingSize"];function O_(){return O_=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function G8t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Ghe={left:"euiCard--leftAligned",center:"euiCard--centerAligned",right:"euiCard--rightAligned"},t1r=Ht(Ghe),Xhe={vertical:"",horizontal:"euiCard--horizontal"},r1r=Ht(Xhe),ys=function(t){var n=t.className,r=t.description,o=t.isDisabled,i=t.title,u=t.titleElement,f=u===void 0?"span":u,h=t.titleSize,y=h===void 0?"s":h,O=t.icon,S=t.image,I=t.children,A=t.footer,C=t.onClick,M=t.href,F=t.rel,R=t.target,B=t.textAlign,Y=B===void 0?"center":B,X=t.betaBadgeProps,le=t.layout,Z=le===void 0?"vertical":le,K=t.selectable,de=t.display,se=t.paddingSize,_e=J8t(t,$8t),be=!M||da(M),Pe=o||!be,Ue=!Pe&&(C||M||K&&!K.isDisabled),Le=null,Ge=function(Hr){Le&&Le!==Hr.target&&Le.click()};if(Z==="horizontal"&&(S||A||Y!=="center"))throw new Error('EuiCard: `layout="horizontal"` cannot be used in conjunction with `image`, `footer`, or `textAlign`.');var Ke=K?"euiCard--isSelectable--".concat(DX(K.color,K.isSelected)):void 0,rt=(0,wC.default)("euiCard",Ghe[Y],Xhe[Z],{"euiCard--isClickable":Ue,"euiCard--hasBetaBadge":X?.label,"euiCard--hasIcon":O,"euiCard--isSelectable":K,"euiCard-isSelected":K?.isSelected,"euiCard-isDisabled":Pe},Ke,n),ot=Ys(),dt=r?"".concat(ot,"Description"):"",jt;S&&Z==="vertical"&&((0,x_.isValidElement)(S)||typeof S=="string"?jt=a("div",{className:"euiCard__image"},(0,x_.isValidElement)(S)?S:a("img",{src:S,alt:""})):jt=null);var Ze;O&&(Ze=x_.default.cloneElement(O,{className:(0,wC.default)(O.props.className,"euiCard__icon")}));var Xt;(jt||Ze)&&(Xt=a("div",{className:"euiCard__top"},jt,Ze));var at,lr="";X!=null&&X.label&&(lr="".concat(ot,"BetaBadge"),at=a("span",{className:"euiCard__betaBadgeWrapper"},a(AE,O_({id:lr},X,{className:(0,wC.default)("euiCard__betaBadge",X?.className)}))),se=se||"l"),K&&Pe&&K.isDisabled===void 0&&(K.isDisabled=Pe);var ht;K&&(ht=a(LX,O_({"aria-describedby":"".concat(ot,"Title ").concat(dt)},K,{buttonRef:function(Hr){Le=Hr}})));var xt;!Pe&&M?xt=a("a",{className:"euiCard__titleAnchor",onClick:C,href:M,target:R,"aria-describedby":dt,rel:ni({href:M,target:R,rel:F}),ref:function(Hr){Le=Hr}},i):Pe||C?xt=a("button",{className:"euiCard__titleButton",onClick:C,disabled:Pe,"aria-describedby":"".concat(lr," ").concat(dt),ref:function(Hr){Le=Hr}},i):xt=i;var dr=f;return a(Hi,O_({element:"div",className:rt,onClick:Ue?Ge:void 0,color:Pe?"subdued":de,hasShadow:!(Pe||de),hasBorder:de?!1:void 0,paddingSize:se},_e),Xt,a("div",{className:"euiCard__content"},a(Zv,{id:"".concat(ot,"Title"),className:"euiCard__title",size:y},a(dr,null,xt)),r&&a(ar,{id:dt,size:"s",className:"euiCard__description"},a("p",null,r)),I&&a("div",{className:"euiCard__children"},I)),at,Z==="vertical"&&A&&a("div",{className:"euiCard__footer"},A),ht)};ys.propTypes={layout:Gt.default.oneOfType([Gt.default.oneOf(["vertical"]),Gt.default.oneOf(["horizontal"]).isRequired]),textAlign:Gt.default.oneOf(["left","center","right"]),footer:Gt.default.node,image:Gt.default.oneOfType([Gt.default.string.isRequired,Gt.default.element.isRequired]),title:Gt.default.any.isRequired,titleElement:Gt.default.oneOf(["h2","h3","h4","h5","h6","span"]),titleSize:Gt.default.oneOf(["s","xs"]),description:Gt.default.any,icon:Gt.default.oneOfType([Gt.default.element.isRequired,Gt.default.oneOf([null])]),children:Gt.default.node,onClick:Gt.default.oneOfType([Gt.default.func.isRequired,Gt.default.func.isRequired]),isDisabled:Gt.default.bool,href:Gt.default.string,target:Gt.default.string,rel:Gt.default.string,betaBadgeProps:Gt.default.any,display:Gt.default.any,paddingSize:Gt.default.any,selectable:Gt.default.shape({href:Gt.default.string,onClick:Gt.default.func,color:Gt.default.oneOf(["primary","danger","text","ghost","success","warning"]),size:Gt.default.oneOf(["xs","s","m"]),flush:Gt.default.oneOf(["left","right","both"]),isDisabled:Gt.default.bool,isLoading:Gt.default.bool,isSelected:Gt.default.bool,target:Gt.default.string,rel:Gt.default.string,type:Gt.default.oneOf(["button","submit"]),buttonRef:Gt.default.any,contentProps:Gt.default.any,iconType:Gt.default.oneOfType([Gt.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,Gt.default.string.isRequired,Gt.default.elementType.isRequired]),iconSide:Gt.default.oneOf(["left","right"]),textProps:Gt.default.shape({className:Gt.default.string,"aria-label":Gt.default.string,"data-test-subj":Gt.default.string,ref:Gt.default.any,"data-text":Gt.default.string}),iconSize:Gt.default.oneOf(["s","m"]),className:Gt.default.string,"aria-label":Gt.default.string,"data-test-subj":Gt.default.string}),hasBorder:Gt.default.bool};var Yhe=k(L()),qi=k(mt()),BX=k(Ct());function OC(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?OC=function(n){return typeof n}:OC=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},OC(e)}var X8t=["className","id","checked","label","onChange","type","disabled","compressed","indeterminate","inputRef","labelProps"];function xC(){return xC=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Y8t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function Q8t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Khe(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function _C(e){return _C=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},_C(e)}function WX(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Qhe={inList:"euiCheckbox--inList"},l1r=Ht(Qhe),ey=function(e){ext(n,e);var t=txt(n);function n(){var r;Q8t(this,n);for(var o=arguments.length,i=new Array(o),u=0;u=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function axt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var tge={none:null,xs:"euiFlexGroup--gutterExtraSmall",s:"euiFlexGroup--gutterSmall",m:"euiFlexGroup--gutterMedium",l:"euiFlexGroup--gutterLarge",xl:"euiFlexGroup--gutterExtraLarge"},m1r=Ht(tge),rge={stretch:null,flexStart:"euiFlexGroup--alignItemsFlexStart",flexEnd:"euiFlexGroup--alignItemsFlexEnd",center:"euiFlexGroup--alignItemsCenter",baseline:"euiFlexGroup--alignItemsBaseline"},h1r=Ht(rge),nge={flexStart:null,flexEnd:"euiFlexGroup--justifyContentFlexEnd",center:"euiFlexGroup--justifyContentCenter",spaceBetween:"euiFlexGroup--justifyContentSpaceBetween",spaceAround:"euiFlexGroup--justifyContentSpaceAround",spaceEvenly:"euiFlexGroup--justifyContentSpaceEvenly"},g1r=Ht(nge),oge={row:"euiFlexGroup--directionRow",rowReverse:"euiFlexGroup--directionRowReverse",column:"euiFlexGroup--directionColumn",columnReverse:"euiFlexGroup--directionColumnReverse"},v1r=Ht(oge),lxt=function(t){return["div","span"].includes(t)},to=(0,Zhe.forwardRef)(function(e,t){var n=e.children,r=e.className,o=e.gutterSize,i=o===void 0?"l":o,u=e.alignItems,f=u===void 0?"stretch":u,h=e.responsive,y=h===void 0?!0:h,O=e.justifyContent,S=O===void 0?"flexStart":O,I=e.direction,A=I===void 0?"row":I,C=e.wrap,M=C===void 0?!1:C,F=e.component,R=F===void 0?"div":F,B=ixt(e,oxt),Y=(0,ege.default)("euiFlexGroup",tge[i],rge[f],nge[S],oge[A],{"euiFlexGroup--responsive":y,"euiFlexGroup--wrap":M},r);if(!lxt(R))throw new Error("".concat(R," is not a valid element type. Use `div` or `span`."));return R==="span"?a("span",SC({className:Y,ref:t},B),n):a("div",SC({className:Y,ref:t},B),n)});to.propTypes={alignItems:su.default.oneOf(["stretch","flexStart","flexEnd","center","baseline"]),component:su.default.oneOf(["div","span"]),direction:su.default.oneOf(["row","rowReverse","column","columnReverse"]),gutterSize:su.default.oneOf(["none","xs","s","m","l","xl"]),justifyContent:su.default.oneOf(["flexStart","flexEnd","center","spaceBetween","spaceAround","spaceEvenly"]),responsive:su.default.bool,wrap:su.default.bool,className:su.default.string,"aria-label":su.default.string,"data-test-subj":su.default.string};to.displayName="EuiFlexGroup";var b1r=k(L()),ty=k(mt()),ige=k(Ct());var sxt=["children","className","grow","component"];function HX(){return HX=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function pxt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var age=[1,2,3,4,5,6,7,8,9,10],Mt=function(t){var n=t.children,r=t.className,o=t.grow,i=o===void 0?!0:o,u=t.component,f=u===void 0?"div":u,h=cxt(t,sxt);fxt(i);var y=(0,ige.default)("euiFlexItem",uxt({"euiFlexItem--flexGrowZero":!i},"euiFlexItem--flexGrow".concat(i),typeof i=="number"?age.indexOf(i)>=0:void 0),r);return a(f,HX({className:y},h),n)};Mt.propTypes={className:ty.default.string,"aria-label":ty.default.string,"data-test-subj":ty.default.string,grow:ty.default.oneOf([1,2,3,4,5,6,7,8,9,10,!0,!1,null]),component:ty.default.any};function fxt(e){var t=[null,void 0,!0,!1].concat(age);if(t.indexOf(e)===-1)throw new Error("Prop `grow` passed to `EuiFlexItem` must be a boolean or an integer between 1 and 10, received `".concat(e,"`"))}var ny=k(L()),er=k(mt()),XX=k(Ct());var CC=k(L()),Jn=k(mt());var I1r=k(L()),__=k(mt()),lge=k(Ct());var dxt=["className","onClick","size"];function VX(){return VX=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function hxt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var sge={s:"euiFormControlLayoutClearButton--small",m:null},M1r=Ht(sge),qX=function(t){var n=t.className,r=t.onClick,o=t.size,i=o===void 0?"m":o,u=mxt(t,dxt),f=(0,lge.default)("euiFormControlLayoutClearButton",sge[i],n);return a(At,{token:"euiFormControlLayoutClearButton.label",default:"Clear input"},function(h){return a("button",VX({type:"button",className:f,onClick:r,"aria-label":h},u),a(ir,{className:"euiFormControlLayoutClearButton__icon",type:"cross"}))})};qX.propTypes={className:__.default.string,"aria-label":__.default.string,"data-test-subj":__.default.string,size:__.default.any};var R1r=k(L()),bs=k(mt()),uge=k(Ct());var gxt=["className","onClick","type","iconRef","size","color"];function jC(){return jC=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function yxt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var IC=function(t){var n=t.className,r=t.onClick,o=t.type,i=t.iconRef,u=t.size,f=t.color,h=vxt(t,gxt),y=(0,uge.default)("euiFormControlLayoutCustomIcon",n,{"euiFormControlLayoutCustomIcon--clickable":r});return r?a("button",jC({type:"button",onClick:r,className:y,ref:i},h),a(ir,{className:"euiFormControlLayoutCustomIcon__icon","aria-hidden":"true",size:u,type:o,color:f})):a("span",jC({className:y,ref:i},h),a(ir,{className:"euiFormControlLayoutCustomIcon__icon","aria-hidden":"true",size:u,type:o,color:f}))};IC.propTypes={className:bs.default.string,"aria-label":bs.default.string,"data-test-subj":bs.default.string,type:bs.default.oneOfType([bs.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,bs.default.string.isRequired,bs.default.elementType.isRequired]).isRequired,size:bs.default.any,iconRef:bs.default.oneOfType([bs.default.string.isRequired,bs.default.func.isRequired])};function PC(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?PC=function(n){return typeof n}:PC=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},PC(e)}var bxt=["ref","side"];function kC(){return kC=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Oxt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function xxt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function cge(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function EC(e){return EC=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},EC(e)}function pge(e){return!!e&&e.hasOwnProperty("type")}var $X=function(e){Sxt(n,e);var t=jxt(n);function n(){return xxt(this,n),t.apply(this,arguments)}return _xt(n,[{key:"render",value:function(){var o=this.props,i=o.icon,u=o.isInvalid,f=o.isDropdown,h=pge(i)&&i.side?i.side:"left",y=this.renderCustomIcon(),O=this.renderLoadingSpinner(),S=this.renderClearButton(),I=this.renderInvalidIcon(),A=this.renderDropdownIcon(),C;y&&h==="left"&&(C=a("div",{className:"euiFormControlLayoutIcons"},y));var M;return(S||O||u||f||y&&h==="right")&&(M=a("div",{className:"euiFormControlLayoutIcons euiFormControlLayoutIcons--right"},S,O,I,h==="right"?y:void 0,A)),a(CC.Fragment,null,C,M)}},{key:"renderCustomIcon",value:function(){var o=this.props,i=o.icon,u=o.compressed;if(!i)return null;var f=pge(i)?i:{type:i},h=f.ref,y=f.side,O=wxt(f,bxt);return a(IC,kC({size:u?"s":"m",iconRef:h},O))}},{key:"renderDropdownIcon",value:function(){var o=this.props,i=o.isDropdown,u=o.compressed;return i?a(IC,{size:u?"s":"m",type:"arrowDown"}):null}},{key:"renderLoadingSpinner",value:function(){var o=this.props,i=o.isLoading,u=o.compressed;return i?a($r,{size:u?"s":"m"}):null}},{key:"renderClearButton",value:function(){var o=this.props,i=o.clear,u=o.compressed;return i?a(qX,kC({size:u?"s":"m"},i)):null}},{key:"renderInvalidIcon",value:function(){var o=this.props,i=o.isInvalid,u=o.compressed;return i?a(ir,{size:u?"s":"m",color:"danger",type:"alert"}):null}}]),n}(CC.Component);$X.propTypes={icon:Jn.default.oneOfType([Jn.default.oneOfType([Jn.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,Jn.default.string.isRequired,Jn.default.elementType.isRequired]).isRequired,Jn.default.shape({type:Jn.default.oneOfType([Jn.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,Jn.default.string.isRequired,Jn.default.elementType.isRequired]).isRequired,side:Jn.default.any,color:Jn.default.oneOfType([Jn.default.string.isRequired,Jn.default.any.isRequired]),ref:Jn.default.oneOfType([Jn.default.string.isRequired,Jn.default.func.isRequired])}).isRequired]),clear:Jn.default.shape({className:Jn.default.string,"aria-label":Jn.default.string,"data-test-subj":Jn.default.string,size:Jn.default.any}),isLoading:Jn.default.bool,isInvalid:Jn.default.bool,isDropdown:Jn.default.bool,compressed:Jn.default.bool};var $1r=k(L()),cl=k(mt()),fge=k(Ct());var Ext=["type","isFocused","isInvalid","isDisabled","children","className"];function AC(){return AC=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Axt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ry=function(t){var n=t.type,r=n===void 0?"label":n,o=t.isFocused,i=t.isInvalid,u=t.isDisabled,f=t.children,h=t.className,y=Cxt(t,Ext),O=(0,fge.default)("euiFormLabel",h,{"euiFormLabel-isFocused":o,"euiFormLabel-isInvalid":i,"euiFormLabel-isDisabled":u});return r==="legend"?a("legend",AC({className:O},y),f):a("label",AC({className:O},y),f)};ry.propTypes={type:cl.default.oneOfType([cl.default.oneOfType([cl.default.oneOf(["label"]),cl.default.oneOf(["label","legend"])]),cl.default.oneOfType([cl.default.oneOf(["legend"]).isRequired,cl.default.oneOf(["label","legend"])])]),isFocused:cl.default.bool,isInvalid:cl.default.bool,isDisabled:cl.default.bool,className:cl.default.string,"aria-label":cl.default.string,"data-test-subj":cl.default.string};function MC(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?MC=function(n){return typeof n}:MC=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},MC(e)}var Mxt=["children","icon","clear","fullWidth","isLoading","isDisabled","compressed","className","prepend","append","readOnly","isInvalid","isDropdown","inputId"];function JX(){return JX=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Rxt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function zxt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function dge(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function TC(e){return TC=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},TC(e)}var oy=function(e){Dxt(n,e);var t=Nxt(n);function n(){return zxt(this,n),t.apply(this,arguments)}return Lxt(n,[{key:"render",value:function(){var o=this.props,i=o.children,u=o.icon,f=o.clear,h=o.fullWidth,y=o.isLoading,O=o.isDisabled,S=o.compressed,I=o.className,A=o.prepend,C=o.append,M=o.readOnly,F=o.isInvalid,R=o.isDropdown,B=o.inputId,Y=Txt(o,Mxt),X=(0,XX.default)("euiFormControlLayout",{"euiFormControlLayout--fullWidth":h,"euiFormControlLayout--compressed":S,"euiFormControlLayout--readOnly":M,"euiFormControlLayout--group":A||C,"euiFormControlLayout-isDisabled":O},I),le=this.renderSideNode("prepend",A,B),Z=this.renderSideNode("append",C,B);return a("div",JX({className:X},Y),le,a("div",{className:"euiFormControlLayout__childrenWrapper"},i,a($X,{icon:u,clear:f,compressed:S,isLoading:y,isInvalid:F,isDropdown:!M&&!O&&R})),Z)}},{key:"renderSideNode",value:function(o,i,u){var f=this;if(i){if(typeof i=="string")return this.createFormLabel(o,i,u);var h=ny.default.Children.map(i,function(y,O){return typeof y=="string"?f.createFormLabel(o,y,u):f.createSideNode(o,y,O)});return h}}},{key:"createFormLabel",value:function(o,i,u){return a(ry,{htmlFor:u,className:"euiFormControlLayout__".concat(o)},i)}},{key:"createSideNode",value:function(o,i,u){return(0,ny.cloneElement)(i,{className:(0,XX.default)("euiFormControlLayout__".concat(o),i.props.className),key:u})}}]),n}(ny.Component);oy.propTypes={className:er.default.string,"aria-label":er.default.string,"data-test-subj":er.default.string,prepend:er.default.oneOfType([er.default.oneOfType([er.default.string.isRequired,er.default.element.isRequired]).isRequired,er.default.arrayOf(er.default.oneOfType([er.default.string.isRequired,er.default.element.isRequired]).isRequired).isRequired]),append:er.default.oneOfType([er.default.oneOfType([er.default.string.isRequired,er.default.element.isRequired]).isRequired,er.default.arrayOf(er.default.oneOfType([er.default.string.isRequired,er.default.element.isRequired]).isRequired).isRequired]),children:er.default.node,icon:er.default.oneOfType([er.default.oneOfType([er.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,er.default.string.isRequired,er.default.elementType.isRequired]).isRequired,er.default.shape({type:er.default.oneOfType([er.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,er.default.string.isRequired,er.default.elementType.isRequired]).isRequired,side:er.default.any,color:er.default.oneOfType([er.default.string.isRequired,er.default.any.isRequired]),ref:er.default.oneOfType([er.default.string.isRequired,er.default.func.isRequired])}).isRequired]),clear:er.default.shape({className:er.default.string,"aria-label":er.default.string,"data-test-subj":er.default.string,size:er.default.any}),fullWidth:er.default.bool,isLoading:er.default.bool,isDisabled:er.default.bool,compressed:er.default.bool,readOnly:er.default.bool,isInvalid:er.default.bool,isDropdown:er.default.bool,inputId:er.default.string};var vc=k(L()),nm=k(mt());function Hxt(e){return e!=null&&e.hasOwnProperty("current")}var RC=function(t){var n=t.isInvalid,r=t.children,o=(0,vc.useRef)(null),i=vc.Children.only(r),u=i.ref,f=(0,vc.useCallback)(function(h){o.current=h,typeof u=="function"?u(h):Hxt(u)&&(u.current=h)},[u]);return(0,vc.useEffect)(function(){o.current===null||typeof o.current.setCustomValidity!="function"||(n?o.current.setCustomValidity("Invalid"):o.current.setCustomValidity(""))}),(0,vc.cloneElement)(i,{ref:f,"aria-invalid":n})};RC.propTypes={className:nm.default.string,"aria-label":nm.default.string,"data-test-subj":nm.default.string,isInvalid:nm.default.bool,children:nm.default.shape({ref:nm.default.any}).isRequired};function mge(e){var t=e.icon,n=e.clear,r=e.isLoading,o=e.isInvalid,i=e.isDropdown,u=[t,n,o,r,i].filter(function(f){return f===!0}).length;return u>0?"euiFormControlLayout--".concat(u,"icons"):void 0}var gge=k(L()),_n=k(mt()),vge=k(Ct());var Vxt={isEventSupported:function(t,n){return"on".concat(t)in n}},KX=Object.freeze(Vxt);function zC(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?zC=function(n){return typeof n}:zC=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},zC(e)}var qxt=["className","id","name","placeholder","isInvalid","fullWidth","isLoading","inputRef","incremental","compressed","onSearch","isClearable","append","prepend"];function QX(){return QX=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function $xt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function Jxt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function hge(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function LC(e){return LC=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},LC(e)}function im(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var YX=!1,S_=function(e){Xxt(n,e);var t=Kxt(n);function n(){var r;Jxt(this,n);for(var o=arguments.length,i=new Array(o),u=0;u=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function t9t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var NC=function(t){var n=t.children,r=t.className,o=e9t(t,Zxt),i=(0,yge.default)("euiFormErrorText",r);return a("div",eK({className:i,"aria-live":"polite"},o),n)};NC.propTypes={className:DC.default.string,"aria-label":DC.default.string,"data-test-subj":DC.default.string};var Pmr=k(L()),FC=k(mt()),bge=k(Ct());var r9t=["children","className"];function tK(){return tK=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function o9t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var WC=function(t){var n=t.children,r=t.className,o=n9t(t,r9t),i=(0,bge.default)("euiFormHelpText",r);return a("div",tK({className:i},o),n)};WC.propTypes={className:FC.default.string,"aria-label":FC.default.string,"data-test-subj":FC.default.string};var Bd=k(L()),Gn=k(mt()),iK=k(Ct());function BC(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?BC=function(n){return typeof n}:BC=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},BC(e)}var i9t=["children","helpText","isInvalid","error","label","labelType","labelAppend","hasEmptyLabelSpace","fullWidth","className","describedByIds","display","hasChildLabel","id","isDisabled"];function a9t(e){return c9t(e)||u9t(e)||s9t(e)||l9t()}function l9t(){throw new TypeError(`Invalid attempt to spread non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function s9t(e,t){if(e){if(typeof e=="string")return nK(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return nK(e,t)}}function u9t(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function c9t(e){if(Array.isArray(e))return nK(e)}function nK(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function f9t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function d9t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Oge(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function VC(e){return VC=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},VC(e)}function I_(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var xge={row:null,rowCompressed:"euiFormRow--compressed",columnCompressed:"euiFormRow--compressed euiFormRow--horizontal",center:null,centerCompressed:"euiFormRow--compressed",columnCompressedSwitch:"euiFormRow--compressed euiFormRow--horizontal euiFormRow--hasSwitch"},Wmr=Ht(xge),yc=function(e){h9t(n,e);var t=g9t(n);function n(){var r;d9t(this,n);for(var o=arguments.length,i=new Array(o),u=0;u0&&(ot["aria-describedby"]=dt.join(" "));var jt=Bd.Children.only(f),Ze=(0,Bd.cloneElement)(jt,rK({id:K,disabled:(o=(i=jt.props.disabled)!==null&&i!==void 0?i:jt.props.isDisabled)!==null&&o!==void 0?o:le,onFocus:this.onFocus,onBlur:this.onBlur},ot)),Xt=(0,iK.default)("euiFormRow__fieldWrapper",{euiFormRow__fieldWrapperDisplayOnly:B.startsWith("center")}),at={className:se,id:"".concat(K,"-row")},lr=a(Bd.default.Fragment,null,Le,a("div",{className:Xt},Ze,Pe,_e));return I==="legend"?a("fieldset",j_({},at,Z),lr):a("div",j_({},at,Z),lr)}}]),n}(Bd.Component);I_(yc,"defaultProps",{display:"row",hasEmptyLabelSpace:!1,fullWidth:!1,describedByIds:[],labelType:"label",hasChildLabel:!0});yc.propTypes={labelType:Gn.default.oneOfType([Gn.default.oneOf(["label"]),Gn.default.oneOf(["legend"])]),className:Gn.default.string,"aria-label":Gn.default.string,"data-test-subj":Gn.default.string,display:Gn.default.oneOf(["row","rowCompressed","columnCompressed","center","centerCompressed","columnCompressedSwitch"]),hasEmptyLabelSpace:Gn.default.bool,fullWidth:Gn.default.bool,describedByIds:Gn.default.arrayOf(Gn.default.string.isRequired),hasChildLabel:Gn.default.bool,children:Gn.default.element.isRequired,label:Gn.default.node,labelAppend:Gn.default.any,id:Gn.default.string,isInvalid:Gn.default.bool,error:Gn.default.oneOfType([Gn.default.node.isRequired,Gn.default.arrayOf(Gn.default.node.isRequired).isRequired]),helpText:Gn.default.oneOfType([Gn.default.node.isRequired,Gn.default.arrayOf(Gn.default.node.isRequired).isRequired]),isDisabled:Gn.default.bool};var XC=k(L()),Ui=k(mt()),cK=k(Ct());var $C=k(L()),ii=k(mt()),lK=k(Ct());var b9t=["children","className","hasPanel","icon","buttonRef","disabled","layoutAlign","toolTipTitle","toolTipContent","toolTipPosition","href","target","rel","size"];function qC(){return qC=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function O9t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function x9t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _ge(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function UC(e){return UC=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},UC(e)}var Sge={s:"euiContextMenuItem--small",m:null},Ymr=Ht(Sge),jge={center:null,top:"euiContextMenu__itemLayout--top",bottom:"euiContextMenu__itemLayout--bottom"},Qmr=Ht(jge),uu=function(e){S9t(n,e);var t=j9t(n);function n(){return x9t(this,n),t.apply(this,arguments)}return _9t(n,[{key:"render",value:function(){var o=this.props,i=o.children,u=o.className,f=o.hasPanel,h=o.icon,y=o.buttonRef,O=o.disabled,S=o.layoutAlign,I=S===void 0?"center":S,A=o.toolTipTitle,C=o.toolTipContent,M=o.toolTipPosition,F=M===void 0?"right":M,R=o.href,B=o.target,Y=o.rel,X=o.size,le=w9t(o,b9t),Z,K=!R||da(R),de=O||!K;if(h)switch(P_(h)){case"string":Z=a(ir,{type:h,size:"m",className:"euiContextMenu__icon",color:"inherit"});break;default:Z=(0,$C.cloneElement)(h,{className:"euiContextMenu__icon"})}var se;f&&(se=a(ir,{type:"arrowRight",size:"m",className:"euiContextMenu__arrow"}));var _e=(0,lK.default)("euiContextMenuItem",X&&Sge[X],u,{"euiContextMenuItem-isDisabled":de}),be=(0,lK.default)("euiContextMenu__itemLayout",jge[I]),Pe=a("span",{className:be},Z,a("span",{className:"euiContextMenuItem__text"},i),se),Ue;if(R&&!de){var Le=ni({href:R,target:B,rel:Y});Ue=a("a",qC({className:_e,href:R,target:B,rel:Le,ref:y},le),Pe)}else Ue=a("button",qC({disabled:de,className:_e,type:"button",ref:y},le),Pe);return C?a(ha,{title:A||null,content:C,anchorClassName:"eui-displayBlock",position:F},Ue):Ue}}]),n}($C.Component);uu.propTypes={className:ii.default.string,"aria-label":ii.default.string,"data-test-subj":ii.default.string,icon:ii.default.oneOfType([ii.default.element.isRequired,ii.default.string.isRequired,ii.default.any.isRequired]),hasPanel:ii.default.bool,disabled:ii.default.bool,onClick:ii.default.func,buttonRef:ii.default.any,toolTipContent:ii.default.node,toolTipTitle:ii.default.node,toolTipPosition:ii.default.oneOf(["top","right","bottom","left"]),href:ii.default.string,target:ii.default.string,rel:ii.default.string,layoutAlign:ii.default.oneOf(["center","top","bottom"]),size:ii.default.oneOf(["s","m"])};function JC(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?JC=function(n){return typeof n}:JC=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},JC(e)}var E9t=["children","className","onClose","title","onHeightChange","transitionType","transitionDirection","onTransitionComplete","onUseKeyboardToNavigate","items","initialFocusedItemIndex","showNextPanel","showPreviousPanel","size"];function sK(){return sK=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function A9t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function M9t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Ige(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function GC(e){return GC=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},GC(e)}function pu(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var kge={s:"euiContextMenuPanelTitle--small",m:null},shr=Ht(kge),Pge={next:{in:"euiContextMenuPanel-txInLeft",out:"euiContextMenuPanel-txOutLeft"},previous:{in:"euiContextMenuPanel-txInRight",out:"euiContextMenuPanel-txOutRight"}},Mp=function(e){R9t(n,e);var t=z9t(n);function n(r){var o;return M9t(this,n),o=t.call(this,r),pu(cu(o),"_isMounted",!1),pu(cu(o),"backButton",null),pu(cu(o),"panel",null),pu(cu(o),"initialPopoverParent",null),pu(cu(o),"findMenuItems",function(){var i;if(o.panel&&(i=o.props.items)!==null&&i!==void 0&&i.length&&!o.state.menuItems.length){var u=XP(o.panel);u.length&&o.setState({menuItems:u})}}),pu(cu(o),"focusMenuItem",function(i){var u,f=i==="up"?-1:1,h;o.state.focusedItemIndex===void 0?h=i==="up"?o.state.menuItems.length-1:0:(h=o.state.focusedItemIndex+f,h<0?h=o.state.menuItems.length-1:h===o.state.menuItems.length&&(h=0)),o.setState({focusedItemIndex:h}),(u=o.state.menuItems[h])===null||u===void 0||u.focus()}),pu(cu(o),"onKeyDown",function(i){var u=o.props,f=u.items,h=u.onClose,y=u.showPreviousPanel;if(h&&(f!=null&&f.length||document.activeElement===o.backButton||document.activeElement===o.panel)&&i.key===fs.ARROW_LEFT&&y&&(i.preventDefault(),i.stopPropagation(),y(),o.props.onUseKeyboardToNavigate&&o.props.onUseKeyboardToNavigate()),f!=null&&f.length)switch(i.key){case fs.TAB:requestAnimationFrame(function(){var O=o.state.menuItems.indexOf(document.activeElement);o.setState({focusedItemIndex:O>=0&&O=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function W9t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var B9t={none:null,xs:"marginXSmall",s:"marginSmall",m:"marginMedium",l:"marginLarge",xl:"marginXLarge",xxl:"marginXXLarge"},ay=function(t){var n,r=t.className,o=t.size,i=o===void 0?"full":o,u=t.margin,f=u===void 0?"l":u,h=F9t(t,N9t),y=en(),O=Ege(y),S=(0,Age.default)("euiHorizontalRule",(n={},Cge(n,"euiHorizontalRule--".concat(i),i),Cge(n,"euiHorizontalRule--".concat(B9t[f]),f&&f!=="none"),n),r),I=[O.euiHorizontalRule,O[i],O[f]];return a("hr",pK({css:I,className:S},h))};ay.propTypes={size:iy.default.any,margin:iy.default.any,className:iy.default.string,"aria-label":iy.default.string,"data-test-subj":iy.default.string};var YC=k(L()),$i=k(mt()),fK=k(Ct());var H9t=["label","id","checked","disabled","compressed","onChange","className","showLabel","type","labelProps"];function KC(){return KC=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function q9t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var k_=function(t){var n=t.label,r=t.id,o=t.checked,i=t.disabled,u=t.compressed,f=t.onChange,h=t.className,y=t.showLabel,O=y===void 0?!0:y,S=t.type,I=S===void 0?"button":S,A=t.labelProps,C=V9t(t,H9t),M=Ys({conditionalId:r}),F=Ys({conditionalId:A?.id}),R=(0,YC.useCallback)(function(X){if(!i){var le=X;le.target.checked=!o,f(le)}},[o,i,f]),B=(0,fK.default)("euiSwitch",{"euiSwitch--compressed":u},h),Y=(0,fK.default)("euiSwitch__label",A?.className);return O===!1&&typeof n!="string"&&console.warn("EuiSwitch `label` must be a string when `showLabel` is false."),a("div",{className:B},a("button",KC({id:M,"aria-checked":o||!1,className:"euiSwitch__button",role:"switch",type:I,disabled:i,onClick:R,"aria-label":O?void 0:n,"aria-labelledby":O?F:void 0},C),a("span",{className:"euiSwitch__body"},a("span",{className:"euiSwitch__thumb"}),a("span",{className:"euiSwitch__track"},!u&&a(YC.default.Fragment,null,a(ir,{type:"cross",size:"m",className:"euiSwitch__icon"}),a(ir,{type:"check",size:"m",className:"euiSwitch__icon euiSwitch__icon--checked"}))))),O&&a("span",KC({},A,{className:Y,id:F,onClick:R}),n))};k_.propTypes={className:$i.default.string,"aria-label":$i.default.string,"data-test-subj":$i.default.string,showLabel:$i.default.bool,label:$i.default.oneOfType([$i.default.node.isRequired,$i.default.string.isRequired]).isRequired,checked:$i.default.bool.isRequired,onChange:$i.default.func.isRequired,disabled:$i.default.bool,compressed:$i.default.bool,type:$i.default.oneOf(["submit","reset","button"]),labelProps:$i.default.shape({className:$i.default.string,"aria-label":$i.default.string,"data-test-subj":$i.default.string})};function QC(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}var Mge=Number.isNaN||function(t){return typeof t=="number"&&t!==t};function U9t(e,t){return!!(e===t||Mge(e)&&Mge(t))}function $9t(e,t){if(e.length!==t.length)return!1;for(var n=0;n=0)continue;n[r]=e[r]}return n}var G9t=typeof performance=="object"&&typeof performance.now=="function",Tge=G9t?function(){return performance.now()}:function(){return Date.now()};function Rge(e){cancelAnimationFrame(e.id)}function X9t(e,t){var n=Tge();function r(){Tge()-n>=t?e.call(null):o.id=requestAnimationFrame(r)}var o={id:requestAnimationFrame(r)};return o}var dK=-1;function zge(e){if(e===void 0&&(e=!1),dK===-1||e){var t=document.createElement("div"),n=t.style;n.width="50px",n.height="50px",n.overflow="scroll",document.body.appendChild(t),dK=t.offsetWidth-t.clientWidth,document.body.removeChild(t)}return dK}var ly=null;function Lge(e){if(e===void 0&&(e=!1),ly===null||e){var t=document.createElement("div"),n=t.style;n.width="50px",n.height="50px",n.overflow="scroll",n.direction="rtl";var r=document.createElement("div"),o=r.style;return o.width="100px",o.height="100px",t.appendChild(r),document.body.appendChild(t),t.scrollLeft>0?ly="positive-descending":(t.scrollLeft=1,t.scrollLeft===0?ly="negative":ly="positive-ascending"),document.body.removeChild(t),ly}return ly}var K9t=150,Y9t=function(t,n){return t};function Q9t(e){var t,n=e.getItemOffset,r=e.getEstimatedTotalSize,o=e.getItemSize,i=e.getOffsetForIndexAndAlignment,u=e.getStartIndexForOffset,f=e.getStopIndexForStartIndex,h=e.initInstanceProps,y=e.shouldResetStyleCacheOnItemSizeChange,O=e.validateProps;return t=function(S){Na(I,S);function I(C){var M;return M=S.call(this,C)||this,M._instanceProps=h(M.props,QC(M)),M._outerRef=void 0,M._resetIsScrollingTimeoutId=null,M.state={instance:QC(M),isScrolling:!1,scrollDirection:"forward",scrollOffset:typeof M.props.initialScrollOffset=="number"?M.props.initialScrollOffset:0,scrollUpdateWasRequested:!1},M._callOnItemsRendered=void 0,M._callOnItemsRendered=ZC(function(F,R,B,Y){return M.props.onItemsRendered({overscanStartIndex:F,overscanStopIndex:R,visibleStartIndex:B,visibleStopIndex:Y})}),M._callOnScroll=void 0,M._callOnScroll=ZC(function(F,R,B){return M.props.onScroll({scrollDirection:F,scrollOffset:R,scrollUpdateWasRequested:B})}),M._getItemStyle=void 0,M._getItemStyle=function(F){var R=M.props,B=R.direction,Y=R.itemSize,X=R.layout,le=M._getItemStyleCache(y&&Y,y&&X,y&&B),Z;if(le.hasOwnProperty(F))Z=le[F];else{var K=n(M.props,F,M._instanceProps),de=o(M.props,F,M._instanceProps),se=B==="horizontal"||X==="horizontal",_e=B==="rtl",be=se?K:0;le[F]=Z={position:"absolute",left:_e?void 0:be,right:_e?be:void 0,top:se?0:K,height:se?"100%":de,width:se?de:"100%"}}return Z},M._getItemStyleCache=void 0,M._getItemStyleCache=ZC(function(F,R,B){return{}}),M._onScrollHorizontal=function(F){var R=F.currentTarget,B=R.clientWidth,Y=R.scrollLeft,X=R.scrollWidth;M.setState(function(le){if(le.scrollOffset===Y)return null;var Z=M.props.direction,K=Y;if(Z==="rtl")switch(Lge()){case"negative":K=-Y;break;case"positive-descending":K=X-B-Y;break}return K=Math.max(0,Math.min(K,X-B)),{isScrolling:!0,scrollDirection:le.scrollOffsetZ.clientWidth?zge():0:le=Z.scrollHeight>Z.clientHeight?zge():0}this.scrollTo(i(this.props,M,F,X,this._instanceProps,le))},A.componentDidMount=function(){var M=this.props,F=M.direction,R=M.initialScrollOffset,B=M.layout;if(typeof R=="number"&&this._outerRef!=null){var Y=this._outerRef;F==="horizontal"||B==="horizontal"?Y.scrollLeft=R:Y.scrollTop=R}this._callPropsCallbacks()},A.componentDidUpdate=function(){var M=this.props,F=M.direction,R=M.layout,B=this.state,Y=B.scrollOffset,X=B.scrollUpdateWasRequested;if(X&&this._outerRef!=null){var le=this._outerRef;if(F==="horizontal"||R==="horizontal")if(F==="rtl")switch(Lge()){case"negative":le.scrollLeft=-Y;break;case"positive-ascending":le.scrollLeft=Y;break;default:var Z=le.clientWidth,K=le.scrollWidth;le.scrollLeft=K-Z-Y;break}else le.scrollLeft=Y;else le.scrollTop=Y}this._callPropsCallbacks()},A.componentWillUnmount=function(){this._resetIsScrollingTimeoutId!==null&&Rge(this._resetIsScrollingTimeoutId)},A.render=function(){var M=this.props,F=M.children,R=M.className,B=M.direction,Y=M.height,X=M.innerRef,le=M.innerElementType,Z=M.innerTagName,K=M.itemCount,de=M.itemData,se=M.itemKey,_e=se===void 0?Y9t:se,be=M.layout,Pe=M.outerElementType,Ue=M.outerTagName,Le=M.style,Ge=M.useIsScrolling,Ke=M.width,rt=this.state.isScrolling,ot=B==="horizontal"||be==="horizontal",dt=ot?this._onScrollHorizontal:this._onScrollVertical,jt=this._getRangeToRender(),Ze=jt[0],Xt=jt[1],at=[];if(K>0)for(var lr=Ze;lr<=Xt;lr++)at.push((0,sy.createElement)(F,{data:de,key:_e(lr,de),index:lr,isScrolling:Ge?rt:void 0,style:this._getItemStyle(lr)}));var ht=r(this.props,this._instanceProps);return(0,sy.createElement)(Pe||Ue||"div",{className:R,onScroll:dt,ref:this._outerRefSetter,style:br({position:"relative",height:Y,width:Ke,overflow:"auto",WebkitOverflowScrolling:"touch",willChange:"transform",direction:B},Le)},(0,sy.createElement)(le||Z||"div",{children:at,ref:X,style:{height:ot?"100%":ht,pointerEvents:rt?"none":void 0,width:ot?ht:"100%"}}))},A._callPropsCallbacks=function(){if(typeof this.props.onItemsRendered=="function"){var M=this.props.itemCount;if(M>0){var F=this._getRangeToRender(),R=F[0],B=F[1],Y=F[2],X=F[3];this._callOnItemsRendered(R,B,Y,X)}}if(typeof this.props.onScroll=="function"){var le=this.state,Z=le.scrollDirection,K=le.scrollOffset,de=le.scrollUpdateWasRequested;this._callOnScroll(Z,K,de)}},A._getRangeToRender=function(){var M=this.props,F=M.itemCount,R=M.overscanCount,B=this.state,Y=B.isScrolling,X=B.scrollDirection,le=B.scrollOffset;if(F===0)return[0,0,0,0];var Z=u(this.props,le,this._instanceProps),K=f(this.props,Z,le,this._instanceProps),de=!Y||X==="backward"?Math.max(1,R):1,se=!Y||X==="forward"?Math.max(1,R):1;return[Math.max(0,Z-de),Math.max(0,Math.min(F-1,K+se)),Z,K]},I}(sy.PureComponent),t.defaultProps={direction:"ltr",itemData:void 0,layout:"vertical",overscanCount:2,useIsScrolling:!1},t}var Z9t=function(t,n){var r=t.children,o=t.direction,i=t.height,u=t.layout,f=t.innerTagName,h=t.outerTagName,y=t.width,O=n.instance;if(!1){var S;switch(o){case"horizontal":case"vertical":case"ltr":case"rtl":default:}switch(u){case"horizontal":case"vertical":default:}}};var tA=Q9t({getItemOffset:function(t,n){var r=t.itemSize;return n*r},getItemSize:function(t,n){var r=t.itemSize;return r},getEstimatedTotalSize:function(t){var n=t.itemCount,r=t.itemSize;return r*n},getOffsetForIndexAndAlignment:function(t,n,r,o,i,u){var f=t.direction,h=t.height,y=t.itemCount,O=t.itemSize,S=t.layout,I=t.width,A=f==="horizontal"||S==="horizontal",C=A?I:h,M=Math.max(0,y*O-C),F=Math.min(M,n*O),R=Math.max(0,n*O-C+O+u);switch(r==="smart"&&(o>=R-C&&o<=F+C?r="auto":r="center"),r){case"start":return F;case"end":return R;case"center":{var B=Math.round(R+(F-R)/2);return BM+Math.floor(C/2)?M:B}case"auto":default:return o>=R&&o<=F?o:o=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function a_t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Jo=function(t){var n=t.className,r=t.size,o=r===void 0?"l":r,i=i_t(t,n_t),u=en(),f=Fge(u),h=(0,Wge.default)("euiSpacer",o_t({},"euiSpacer--".concat(o),o),n),y=[f.euiSpacer,f[o]];return a("div",mK({className:h,css:y},i))};Jo.propTypes={className:E_.default.string,"aria-label":E_.default.string,"data-test-subj":E_.default.string,size:E_.default.any};var xve=k(L()),Pn=k(mt()),_ve=k(Ct());var Yge=k(L()),ft=k(mt()),Qge=k(Ct());var vK=k(L()),Hd=k(mt());var rgr=k(L()),uy=k(mt()),Hge=k(Ct());var Bge=function(t,n){var r=t.euiTheme,o=t.colorMode,i=n.hasScreenReaderHelpText,u=n.highlightStart,f=n.highlightEnd,h={LIGHT:.1,DARK:.3};return Fe("background-color:",Zs(r.colors.primary,h[o]),";font-weight:",r.font.weight.bold,";color:",r.colors.text,";",i===!0&&` &:before, &:after { - `.concat(bd(),` + `.concat(Od(),` } &:before { @@ -469,25 +469,25 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho &:after { content: ' [`).concat(f,`] '; } - `),";;label:euiMarkStyles;")};var o_t=["children","className","hasScreenReaderHelpText"];function cK(){return cK=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function a_t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var k_=function(t){var n=t.children,r=t.className,o=t.hasScreenReaderHelpText,i=o===void 0?!0:o,u=i_t(t,o_t),f=en(),h=To("euiMark.highlightStart","highlight start"),y=To("euiMark.highlightEnd","highlight end"),O=Nge(f,{hasScreenReaderHelpText:i,highlightStart:h,highlightEnd:y}),S=(0,Fge.default)("euiMark",r);return a("mark",cK({css:[O,";label:EuiMark;"],className:S},u),n)};k_.propTypes={className:ly.default.string,"aria-label":ly.default.string,"data-test-subj":ly.default.string,hasScreenReaderHelpText:ly.default.bool,children:ly.default.node.isRequired};var l_t=["children","className","search","strict","highlightAll","hasScreenReaderHelpText"];function pK(){return pK=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function u_t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var c_t=function(t,n,r,o,i){if(!n)return t;if(!t)return null;if(o){var u=p_t(t,n,r);return a(fK.Fragment,null,u.map(function(A){var C=A.end,M=A.highlight,W=A.start,R=t.substr(W,C-W);return M?a(k_,{key:W,hasScreenReaderHelpText:i},R):R}))}var f=r?t:t.toLowerCase(),h=r?n:n.toLowerCase(),y=f.indexOf(h);if(y===-1)return t;var O=t.substr(0,y),S=t.substr(y,n.length),I=t.substr(y+n.length);return a(fK.Fragment,null,O,a(k_,{hasScreenReaderHelpText:i},S),I)},p_t=function(t,n,r){for(var o=new RegExp(n,r?"g":"gi"),i=[],u;(u=o.exec(t))!==null;)i.push({start:u.index,end:(u.index||0)+u[0].length});return f_t(i,t.length)},f_t=function(t,n){var r=[],o=function(f,h,y){h-f>0&&r.push({start:f,end:h,highlight:y})};if(t.length===0)o(0,n,!1);else{var i=0;t.forEach(function(u){o(i,u.start,!1),o(u.start,u.end,!0),i=u.end}),o(i,n,!1)}return r},cu=function(t){var n=t.children,r=t.className,o=t.search,i=t.strict,u=i===void 0?!1:i,f=t.highlightAll,h=f===void 0?!1:f,y=t.hasScreenReaderHelpText,O=y===void 0?!0:y,S=s_t(t,l_t);return a("span",pK({className:r},S),c_t(n,o,u,h,O))};cu.propTypes={className:Bd.default.string,"aria-label":Bd.default.string,"data-test-subj":Bd.default.string,children:Bd.default.string.isRequired,search:Bd.default.string.isRequired,strict:Bd.default.bool,highlightAll:Bd.default.bool};var cgr=P(L());var dK=function(t){var n=t.children;return a("div",{className:"euiComboBoxTitle"},n)};dK.propTypes={};var Bge=P(L()),im=P(dt()),Hge=P(Ct());function YC(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?YC=function(n){return typeof n}:YC=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},YC(e)}var d_t=["children","className","disabled","checked","isFocused","showIcons"];function mK(){return mK=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function h_t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function g_t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Wge(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function QC(e){return QC=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},QC(e)}function E_(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var x_t=function(t){return t?t==="on"?{icon:"check",color:"text"}:{icon:"cross",color:"text"}:{icon:"empty"}},ZC=function(e){y_t(n,e);var t=b_t(n);function n(){var r;g_t(this,n);for(var o=arguments.length,i=new Array(o),u=0;u=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function j_t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function I_t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function $ge(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function rA(e){return rA=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},rA(e)}function fu(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Jge="euiComboBoxOption__content",gK=a(wo,{className:"euiComboBoxOption__enterBadge",color:"hollow",iconType:"returnKey","aria-hidden":"true"}),C_=function(e){P_t(n,e);var t=E_t(n);function n(){var r;I_t(this,n);for(var o=arguments.length,i=new Array(o),u=0;u200?200:Ht,Er=a(KC,{height:sr,onScroll:B,itemCount:A.length,itemSize:se,itemData:A,ref:this.setListRef,innerRef:this.setListBoxRef,width:Ge},this.ListRow),_r=(0,Xge.default)("euiComboBoxOptionsList");return a(Kv,tA({paddingSize:"none",hasShadow:!1,className:_r,panelRef:this.listRefCallback,"data-test-subj":"comboBoxOptionsList ".concat(i),style:qge(qge({},at),{},{zIndex:ot}),isOpen:!0,isAttached:!0,position:Z},Mt),a("div",{className:"euiComboBoxOptionsList__rowWrap"},xt||Er))}}]),n}(Gge.Component);fu(C_,"defaultProps",{"data-test-subj":"",rowHeight:29});C_.propTypes={className:ft.default.string,"aria-label":ft.default.string,"data-test-subj":ft.default.oneOfType([ft.default.string,ft.default.string.isRequired]),activeOptionIndex:ft.default.number,areAllOptionsSelected:ft.default.bool,listboxAriaLabel:ft.default.string.isRequired,customOptionText:ft.default.string,fullWidth:ft.default.bool,getSelectedOptionForSearchValue:ft.default.func,isLoading:ft.default.bool,listRef:ft.default.any.isRequired,matchingOptions:ft.default.arrayOf(ft.default.shape({isGroupLabelOption:ft.default.bool,label:ft.default.string.isRequired,key:ft.default.string,options:ft.default.arrayOf(ft.default.shape({isGroupLabelOption:ft.default.bool,label:ft.default.string.isRequired,key:ft.default.string,options:ft.default.arrayOf(ft.default.any.isRequired),value:ft.default.any,className:ft.default.string,"aria-label":ft.default.string,"data-test-subj":ft.default.string}).isRequired),value:ft.default.any,className:ft.default.string,"aria-label":ft.default.string,"data-test-subj":ft.default.string}).isRequired).isRequired,onCloseList:ft.default.func.isRequired,onCreateOption:ft.default.func,onOptionClick:ft.default.func,onOptionEnterKey:ft.default.func,onScroll:ft.default.any,optionRef:ft.default.func.isRequired,options:ft.default.arrayOf(ft.default.shape({isGroupLabelOption:ft.default.bool,label:ft.default.string.isRequired,key:ft.default.string,options:ft.default.arrayOf(ft.default.shape({isGroupLabelOption:ft.default.bool,label:ft.default.string.isRequired,key:ft.default.string,options:ft.default.arrayOf(ft.default.any.isRequired),value:ft.default.any,className:ft.default.string,"aria-label":ft.default.string,"data-test-subj":ft.default.string}).isRequired),value:ft.default.any,className:ft.default.string,"aria-label":ft.default.string,"data-test-subj":ft.default.string}).isRequired).isRequired,position:ft.default.oneOf(["top","bottom"]),renderOption:ft.default.func,rootId:ft.default.any.isRequired,rowHeight:ft.default.number.isRequired,scrollToIndex:ft.default.number,searchValue:ft.default.string.isRequired,selectedOptions:ft.default.arrayOf(ft.default.shape({isGroupLabelOption:ft.default.bool,label:ft.default.string.isRequired,key:ft.default.string,options:ft.default.arrayOf(ft.default.shape({isGroupLabelOption:ft.default.bool,label:ft.default.string.isRequired,key:ft.default.string,options:ft.default.arrayOf(ft.default.any.isRequired),value:ft.default.any,className:ft.default.string,"aria-label":ft.default.string,"data-test-subj":ft.default.string}).isRequired),value:ft.default.any,className:ft.default.string,"aria-label":ft.default.string,"data-test-subj":ft.default.string}).isRequired).isRequired,updatePosition:ft.default.func.isRequired,width:ft.default.number.isRequired,singleSelection:ft.default.oneOfType([ft.default.bool.isRequired,ft.default.shape({asPlainText:ft.default.bool}).isRequired]),delimiter:ft.default.string,zIndex:ft.default.number};function Kge(e){return z_t(e)||R_t(e)||T_t(e)||M_t()}function M_t(){throw new TypeError(`Invalid attempt to spread non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function T_t(e,t){if(e){if(typeof e=="string")return yK(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return yK(e,t)}}function R_t(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function z_t(e){if(Array.isArray(e))return yK(e)}function yK(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n0&&(h.push({key:O.key,label:O.label,isGroupLabelOption:!0}),h=h.concat(S))}else Yge(h,O,n,f,o,i)}),u==="startsWith"){var y={startWith:[],others:[]};return h.forEach(function(O){O.label.toLowerCase().startsWith(f)?y.startWith.push(O):y.others.push(O)}),[].concat(Kge(y.startWith),Kge(y.others))}return h};var fve=P(L()),Pt=P(dt()),dve=P(Ct()),mve=P(ive());var uve=P(L()),zn=P(dt()),cve=P(Ct());function iA(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?iA=function(n){return typeof n}:iA=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},iA(e)}var V_t=["asPlainText","children","className","color","onClick","onClickAriaLabel","onClose","option"];function M_(){return M_=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function U_t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function $_t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function ave(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function aA(e){return aA=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},aA(e)}function sve(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var lA=function(e){G_t(n,e);var t=X_t(n);function n(){var r;$_t(this,n);for(var o=arguments.length,i=new Array(o),u=0;u=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function eSt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function T_(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?T_=function(n){return typeof n}:T_=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},T_(e)}function tSt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function pve(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function uA(e){return uA=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},uA(e)}function sy(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var jK=function(e){nSt(n,e);var t=oSt(n);function n(){var r;tSt(this,n);for(var o=arguments.length,i=new Array(o),u=0;u0?"".concat(se,". Press Backspace to delete ").concat(Z[Z.length-1].label,". "):"","Combo box input. ").concat(Ze," Type some text or, to display a list of choices, press Down Arrow. ")+"To exit the list of choices, press Escape.";Mt=X("removeOptionMessage"),ht=a(qn,null,a("span",{"aria-live":"polite",id:Mt},Kt))}var it;Y&&Z&&!Z.length&&!ae&&(it=a("p",{className:"euiComboBoxPlaceholder"},Y));var xt={};!S&&C&&h&&(xt.clear={"data-test-subj":"comboBoxClearButton",onClick:C});var wt;A||(wt={"aria-label":I?"Close list of options":"Open list of options","data-test-subj":"comboBoxToggleListButton",disabled:S,onClick:I&&!S?W:R,ref:de,side:"right",tabIndex:-1,type:"arrowDown"});var Ht=(0,dve.default)("euiComboBox__inputWrap",{"euiComboBox__inputWrap--compressed":i,"euiComboBox__inputWrap--fullWidth":f,"euiComboBox__inputWrap--noWrap":Qe,"euiComboBox__inputWrap-isLoading":be,"euiComboBox__inputWrap-isClearable":C,"euiComboBox__inputWrap--inGroup":Se||Oe});return a(ny,sA({icon:wt},xt,{inputId:y,isLoading:be,compressed:i,fullWidth:f,prepend:Se,append:Oe}),a("div",{className:Ht,"data-test-subj":"comboBoxInput",onClick:M,tabIndex:-1},!Qe||!ae?at:null,it,a(mve.default,{"aria-activedescendant":u,"aria-autocomplete":"list","aria-controls":I?X("listbox"):"","aria-expanded":I,"aria-label":We,"aria-labelledby":Ge,className:"euiComboBox__input","data-test-subj":"comboBoxSearchInput",disabled:S,id:y,inputRef:O,onBlur:this.onBlur,onChange:this.inputOnChange,onFocus:this.onFocus,ref:this.inputRefCallback,role:"combobox",style:{fontSize:14},value:ae,autoFocus:Ue}),ht))}}]),n}(fve.Component);jK.propTypes={autoSizeInputRef:Pt.default.any,compressed:Pt.default.bool.isRequired,focusedOptionId:Pt.default.string,fullWidth:Pt.default.bool,hasSelectedOptions:Pt.default.bool.isRequired,id:Pt.default.string,inputRef:Pt.default.any,isDisabled:Pt.default.bool,isListOpen:Pt.default.bool.isRequired,noIcon:Pt.default.bool.isRequired,onBlur:Pt.default.any,onChange:Pt.default.func,onClear:Pt.default.func,onClick:Pt.default.func,onCloseListClick:Pt.default.func.isRequired,onFocus:Pt.default.any.isRequired,onOpenListClick:Pt.default.func.isRequired,onRemoveOption:Pt.default.func,placeholder:Pt.default.string,rootId:Pt.default.any.isRequired,searchValue:Pt.default.string.isRequired,selectedOptions:Pt.default.arrayOf(Pt.default.shape({isGroupLabelOption:Pt.default.bool,label:Pt.default.string.isRequired,key:Pt.default.string,options:Pt.default.arrayOf(Pt.default.shape({isGroupLabelOption:Pt.default.bool,label:Pt.default.string.isRequired,key:Pt.default.string,options:Pt.default.arrayOf(Pt.default.any.isRequired),value:Pt.default.any,className:Pt.default.string,"aria-label":Pt.default.string,"data-test-subj":Pt.default.string}).isRequired),value:Pt.default.any,className:Pt.default.string,"aria-label":Pt.default.string,"data-test-subj":Pt.default.string}).isRequired),singleSelection:Pt.default.oneOfType([Pt.default.bool.isRequired,Pt.default.shape({asPlainText:Pt.default.bool}).isRequired]),toggleButtonRef:Pt.default.any,updatePosition:Pt.default.func.isRequired,value:Pt.default.string,prepend:Pt.default.oneOfType([Pt.default.oneOfType([Pt.default.string.isRequired,Pt.default.element.isRequired]).isRequired,Pt.default.arrayOf(Pt.default.oneOfType([Pt.default.string.isRequired,Pt.default.element.isRequired]).isRequired).isRequired]),append:Pt.default.oneOfType([Pt.default.oneOfType([Pt.default.string.isRequired,Pt.default.element.isRequired]).isRequired,Pt.default.arrayOf(Pt.default.oneOfType([Pt.default.string.isRequired,Pt.default.element.isRequired]).isRequired).isRequired]),isLoading:Pt.default.bool,autoFocus:Pt.default.bool,"aria-label":Pt.default.string,"aria-labelledby":Pt.default.string,className:Pt.default.string,"data-test-subj":Pt.default.string};function cA(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?cA=function(n){return typeof n}:cA=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},cA(e)}var lSt=["data-test-subj","async","className","compressed","customOptionText","fullWidth","id","inputRef","isClearable","isDisabled","isInvalid","isLoading","noSuggestions","onBlur","onChange","onCreateOption","onSearchChange","options","placeholder","renderOption","rowHeight","selectedOptions","singleSelection","prepend","sortMatchesBy","delimiter","append","autoFocus","aria-label","aria-labelledby"];function IK(){return IK=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function uSt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function hve(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function gve(e){for(var t=1;t"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function pA(e){return pA=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},pA(e)}function br(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var yve="",R_=function(e){fSt(n,e);var t=dSt(n);function n(){var r;cSt(this,n);for(var o=arguments.length,i=new Array(o),u=0;u0&&arguments[0]!==void 0?arguments[0]:r.state.listElement;if(r._isMounted&&r.state.isListOpen&&f){var h=f.getBoundingClientRect();if(!(h.width===0||h.height===0)&&r.comboBoxRefInstance){var y=r.comboBoxRefInstance.getBoundingClientRect(),O=kd({allowCrossAxis:!1,anchor:r.comboBoxRefInstance,popover:f,position:"bottom"}),S=O.position,I=O.top;r.listRefInstance&&(r.listRefInstance.style.top="".concat(I,"px"),r.listRefInstance.style.left="".concat(y.left+window.pageXOffset,"px"),r.listRefInstance.style.width="".concat(y.width,"px")),r.setState({listElement:f,listPosition:S,width:y.width})}}}),br(Or(r),"incrementActiveOptionIndex",function(f){r.state.matchingOptions.length&&r.setState(function(h){var y=h.activeOptionIndex,O=h.matchingOptions,S;y<0?S=f<0?O.length-1:0:(S=y+f,S<0?S=O.length-1:S===O.length&&(S=0));for(var I=f>0?1:-1;O[S].isGroupLabelOption;)S=S+I,S<0?S=O.length-1:S===O.length&&(S=0);return{activeOptionIndex:S}})}),br(Or(r),"hasActiveOption",function(){return r.state.activeOptionIndex>-1&&r.state.activeOptionIndex0&&r.addCustomOption(f,O)}):r.addCustomOption(f,h)}),br(Or(r),"onContainerBlur",function(f){var h=f,y=h.relatedTarget||h.explicitOriginalTarget,O=y&&r.listRefInstance&&r.listRefInstance.contains(y),S=y&&r.comboBoxRefInstance&&r.comboBoxRefInstance.contains(y);!O&&!S?(r.closeList(),r.props.onBlur&&r.props.onBlur(f),r.setState({hasFocus:!1}),r.hasActiveOption()||r.setCustomOptions(!0)):O&&requestAnimationFrame(function(){var I;(I=r.searchInputRefInstance)===null||I===void 0||I.focus()})}),br(Or(r),"onKeyDown",function(f){if(!r.props.isDisabled)switch(f.key){case On.ARROW_UP:f.preventDefault(),f.stopPropagation(),r.state.isListOpen?r.incrementActiveOptionIndex(-1):r.openList();break;case On.ARROW_DOWN:f.preventDefault(),f.stopPropagation(),r.state.isListOpen?r.incrementActiveOptionIndex(1):r.openList();break;case On.BACKSPACE:f.stopPropagation(),r.removeLastOption();break;case On.ESCAPE:r.state.isListOpen&&(f.preventDefault(),f.stopPropagation(),r.closeList());break;case On.ENTER:f.preventDefault(),f.stopPropagation(),r.hasActiveOption()?r.onAddOption(r.state.matchingOptions[r.state.activeOptionIndex]):r.setCustomOptions(!1);break;case On.TAB:r.hasActiveOption()&&r.state.isListOpen&&(f.preventDefault(),f.stopPropagation());break;default:r.props.onKeyDown&&r.props.onKeyDown(f)}}),br(Or(r),"onOptionEnterKey",function(f){r.onAddOption(f)}),br(Or(r),"onOptionClick",function(f){r.onAddOption(f)}),br(Or(r),"onAddOption",function(f,h){if(!f.disabled){var y=r.props,O=y.onChange,S=y.selectedOptions,I=y.singleSelection,A=!!I,C=A?[f]:S.concat(f);O&&O(C),r.clearSearchValue(),r.clearActiveOption(),h||r.searchInputRefInstance&&r.searchInputRefInstance.focus(),A?requestAnimationFrame(function(){return r.closeList()}):r.setState({activeOptionIndex:r.state.matchingOptions.indexOf(f)})}}),br(Or(r),"onRemoveOption",function(f){var h=r.props,y=h.onChange,O=h.selectedOptions;y&&y(O.filter(function(S){return S!==f})),r.clearActiveOption()}),br(Or(r),"clearSelectedOptions",function(){var f=r.props.onChange;f&&f([]),r.searchInputRefInstance&&r.searchInputRefInstance.focus(),r.state.isListOpen||r.openList()}),br(Or(r),"onComboBoxClick",function(){if(r.searchInputRefInstance&&r.searchInputRefInstance.focus(),r.props.singleSelection&&r.props.selectedOptions.length===1){var f=r.state.matchingOptions.findIndex(function(h){return h.label===r.props.selectedOptions[0].label&&h.key===r.props.selectedOptions[0].key});r.setState({activeOptionIndex:f})}else r.clearActiveOption()}),br(Or(r),"onOpenListClick",function(){r.searchInputRefInstance&&r.searchInputRefInstance.focus(),r.state.isListOpen||r.openList()}),br(Or(r),"onOptionListScroll",function(){r.searchInputRefInstance&&r.searchInputRefInstance.focus()}),br(Or(r),"onCloseListClick",function(){r.closeList()}),br(Or(r),"onSearchChange",function(f){var h=r.props,y=h.onSearchChange,O=h.delimiter;if(y){var S=r.state.matchingOptions.length>0;y(f,S)}r.setState({searchValue:f},function(){f&&r.state.isListOpen===!1&&r.openList()}),O&&f.endsWith(O)&&r.setCustomOptions(!1)}),br(Or(r),"updateMatchingOptionsIfDifferent",function(f){var h=r.state,y=h.matchingOptions,O=h.activeOptionIndex,S=r.props,I=S.singleSelection,A=S.selectedOptions,C=!1;if(y.length!==f.length)C=!0;else for(var M=0;M0,id:_r,inputRef:this.searchInputRefCallback,isDisabled:M,isListOpen:xt,noIcon:!!B,onChange:this.onSearchChange,onClear:C&&!M?this.clearSelectedOptions:void 0,onClick:this.onComboBoxClick,onCloseListClick:this.onCloseListClick,onFocus:this.onComboBoxFocus,onOpenListClick:this.onOpenListClick,onRemoveOption:this.onRemoveOption,placeholder:de,rootId:this.rootId,searchValue:Ht,selectedOptions:Oe,singleSelection:be,toggleButtonRef:this.toggleButtonRefCallback,updatePosition:this.updatePosition,value:Bt,append:be?Qe:void 0,prepend:be?Ue:void 0,isLoading:R,autoFocus:ot,"aria-label":at,"aria-labelledby":ht}),Dn)}}],[{key:"getDerivedStateFromProps",value:function(o,i){var u=o.options,f=o.selectedOptions,h=o.singleSelection,y=o.sortMatchesBy,O=i.activeOptionIndex,S=i.searchValue,I=oA(u,f,S,o.async,!!h,y),A={matchingOptions:I};return O>=I.length&&(A.activeOptionIndex=-1),A}}]),n}(bve.Component);br(R_,"defaultProps",{async:!1,compressed:!1,fullWidth:!1,isClearable:!0,options:[],selectedOptions:[],singleSelection:!1,prepend:void 0,append:void 0,sortMatchesBy:"none"});R_.propTypes={"data-test-subj":jn.default.string,async:jn.default.bool.isRequired,className:jn.default.string,compressed:jn.default.bool.isRequired,fullWidth:jn.default.bool.isRequired,id:jn.default.string,inputRef:jn.default.any,isClearable:jn.default.bool.isRequired,isDisabled:jn.default.bool,isInvalid:jn.default.bool,isLoading:jn.default.bool,noSuggestions:jn.default.bool,onBlur:jn.default.any,onChange:jn.default.func,onFocus:jn.default.any,onKeyDown:jn.default.any,onSearchChange:jn.default.func,placeholder:jn.default.string,rowHeight:jn.default.number,singleSelection:jn.default.oneOfType([jn.default.bool.isRequired,jn.default.shape({asPlainText:jn.default.bool}).isRequired]).isRequired,sortMatchesBy:jn.default.oneOf(["none","startsWith"]).isRequired,prepend:jn.default.any,append:jn.default.any,delimiter:jn.default.string,autoFocus:jn.default.bool,"aria-label":jn.default.string,"aria-labelledby":jn.default.string};var Tp=P(L()),Mp=P(dt());var Ovr=P(L()),Ml=P(dt()),kve=P(Ct());var lvr=P(L()),mn=P(dt()),xve=P(Ct());var gSt=["className","isActive","isPlaceholder","pageIndex","totalPages"];function EK(){return EK=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function bSt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var CK=function(t){var n=t.className,r=t.isActive,o=t.isPlaceholder,i=t.pageIndex,u=t.totalPages,f=ySt(t,gSt),h=(0,xve.default)("euiPaginationButton",n,{"euiPaginationButton-isActive":r,"euiPaginationButton-isPlaceholder":o}),y=PK(PK(PK({className:h,size:"s",color:"text","data-test-subj":"pagination-button-".concat(i),isDisabled:o||r},r&&{"aria-current":!0}),f["aria-controls"]&&{href:"#".concat(f["aria-controls"])}),f),O=i+1;return a(At,{token:"euiPaginationButton.longPageString",default:"Page {page} of {totalPages}",values:{page:O,totalPages:u}},function(S){return a(At,{token:"euiPaginationButton.shortPageString",default:"Page {page}",values:{page:O}},function(I){return a(La,EK({"aria-label":u?S:I},y),O)})})};CK.propTypes={href:mn.default.string,onClick:mn.default.func,color:mn.default.oneOf(["primary","danger","text","ghost","success","warning"]),size:mn.default.oneOf(["xs","s","m"]),flush:mn.default.oneOf(["left","right","both"]),isDisabled:mn.default.bool,isLoading:mn.default.bool,isSelected:mn.default.bool,target:mn.default.string,rel:mn.default.string,type:mn.default.oneOf(["button","submit"]),buttonRef:mn.default.any,contentProps:mn.default.any,iconType:mn.default.oneOfType([mn.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,mn.default.string.isRequired,mn.default.elementType.isRequired]),iconSide:mn.default.oneOf(["left","right"]),textProps:mn.default.shape({className:mn.default.string,"aria-label":mn.default.string,"data-test-subj":mn.default.string,ref:mn.default.any,"data-text":mn.default.string}),iconSize:mn.default.oneOf(["s","m"]),className:mn.default.string,"aria-label":mn.default.string,"data-test-subj":mn.default.string,isActive:mn.default.bool,isPlaceholder:mn.default.bool,pageIndex:mn.default.number.isRequired,totalPages:mn.default.number};var dvr=P(L()),fA=P(dt()),_ve=P(Ct());function AK(){return AK=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function _St(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var MK=5,SSt=Math.floor(MK*.5),dA=function(t){var n=t.className,r=t.pageCount,o=r===void 0?1:r,i=t.activePage,u=i===void 0?0:i,f=t.onPageClick,h=f===void 0?function(){}:f,y=t.compressed,O=t["aria-controls"],S=t.responsive,I=S===void 0?["xs","s"]:S,A=xSt(t,wSt),C=s5(I,!!I),M=y||C,W=function(Ht,sr){if(Ht.preventDefault(),O){var Er=document.getElementById(O);Er&&Er.focus()}h(sr)},R=(0,kve.default)("euiPagination",n),B=(o<1||M)&&a(uy,{type:"first",ariaControls:O,onClick:function(Ht){return W(Ht,0)},disabled:u===0}),Y=a(uy,{type:"previous",ariaControls:O,onClick:function(Ht){return W(Ht,u-1)},disabled:u===0}),X=a(uy,{type:"next",ariaControls:O,onClick:function(Ht){return W(Ht,u+1)},disabled:u===-1||u===o-1}),ae=(o<1||M)&&a(uy,{type:"last",ariaControls:O,onClick:function(Ht){return W(Ht,o?o-1:-1)},disabled:u===-1||u===o-1}),Z;if(o){var K={activePage:u,ariaControls:O,safeClick:W,pageCount:o};if(M)Z=a(fr,{size:"s",className:"euiPagination__compressedText"},a(At,{token:"euiPagination.pageOfTotalCompressed",default:"{page} of {total}",values:{page:a("span",null,u+1),total:a("span",null,o)}}));else{for(var de=[],se=Math.max(0,Math.min(u-SSt,o-MK)),Se=Math.min(o,se+MK),Oe=se,be=0;Oe0&&(Ue.push(a(z_,Ap({pageIndex:0,key:0},K))),se>1&&se!==2?Ue.push(a(At,{key:"startingEllipses",token:"euiPagination.firstRangeAriaLabel",default:"Skipping pages 2 to {lastPage}",values:{lastPage:se}},function(wt){return a("li",{"aria-label":wt,className:"euiPaginationButton-isPlaceholder euiPagination__item"},"\u2026")})):se===2&&Ue.push(a(z_,Ap({pageIndex:1,key:1},K))));var We=[];See.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function MSt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var lm=function(t){var n=t.activePage,r=t.itemsPerPage,o=r===void 0?50:r,i=t.itemsPerPageOptions,u=i===void 0?[10,20,50,100]:i,f=t.showPerPageOptions,h=f===void 0?!0:f,y=t.onChangeItemsPerPage,O=y===void 0?function(){}:y,S=t.onChangePage,I=t.pageCount,A=ASt(t,jSt),C=(0,Tp.useState)(!1),M=ISt(C,2),W=M[0],R=M[1],B=(0,Tp.useCallback)(function(){R(function(K){return!K})},[]),Y=(0,Tp.useCallback)(function(){R(!1)},[]),X=a(La,{size:"xs",color:"text",iconType:"arrowDown",iconSide:"right","data-test-subj":"tablePaginationPopoverButton",onClick:B},o===0?a(At,{token:"euiTablePagination.allRows",default:"Showing all rows"}):a(Tp.default.Fragment,null,a(At,{token:"euiTablePagination.rowsPerPage",default:"Rows per page"}),": ",o)),ae=(0,Tp.useMemo)(function(){return u.map(function(K){return a(lu,{key:K,icon:K===o?"check":"empty",onClick:function(){Y(),O(K)},"data-test-subj":"tablePagination-".concat(K,"-rows")},K===0?a(At,{token:"euiTablePagination.rowsPerPageOptionShowAllRows",default:"Show all rows"}):a(At,{token:"euiTablePagination.rowsPerPageOption",values:{rowsPerPage:K},default:"{rowsPerPage} rows"}))})},[u,o,O,Y]),Z=a(iu,{button:X,isOpen:W,closePopover:Y,panelPaddingSize:"none",anchorPosition:"upRight"},a(Cp,{items:ae}));return a(eo,{justifyContent:"spaceBetween",alignItems:"center",responsive:!1,wrap:!0,gutterSize:"s",className:"eui-xScroll"},a(kt,{grow:!1},h&&Z),a(kt,{grow:!1},o>0&&a(dA,TK({pageCount:I,activePage:n,onPageClick:S},A))))};lm.propTypes={showPerPageOptions:Mp.default.bool,itemsPerPage:Mp.default.number,itemsPerPageOptions:Mp.default.arrayOf(Mp.default.number.isRequired),onChangeItemsPerPage:Mp.default.func,onChangePage:Mp.default.func,"aria-controls":Mp.default.string,"aria-label":Mp.default.string};var Vvr=P(L()),vc=P(dt()),Eve=P(Ct());var TSt=["isSelected","children","className","disabled","href","target","rel","prepend","append"];function mA(){return mA=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function zSt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var RK=function(t){var n=t.isSelected,r=t.children,o=t.className,i=t.disabled,u=t.href,f=t.target,h=t.rel,y=t.prepend,O=t.append,S=RSt(t,TSt),I=!u||ma(u),A=i||!I,C=(0,Eve.default)("euiTab",o,{"euiTab-isSelected":n,"euiTab-isDisabled":A}),M=y&&a("span",{className:"euiTab__prepend"},y),W=O&&a("span",{className:"euiTab__append"},O);if(u&&!A){var R=ni({href:u,target:f,rel:h});return a("a",mA({role:"tab","aria-selected":!!n,className:C,href:u,target:f,rel:R},S),M,a("span",{className:"euiTab__content"},r),W)}return a("button",mA({role:"tab","aria-selected":!!n,type:"button",className:C,disabled:A},S),M,a("span",{className:"euiTab__content"},r),W)};RK.propTypes={isSelected:vc.default.bool,disabled:vc.default.bool,prepend:vc.default.node,append:vc.default.node,className:vc.default.string,"aria-label":vc.default.string,"data-test-subj":vc.default.string,href:vc.default.string,onClick:vc.default.func};var Cve=P(L()),Ave=P(Ct());var LSt=["children","className","bottomBorder","expand","size"];function zK(){return zK=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function NSt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Mve={s:"euiTabs--small",m:null,l:"euiTabs--large",xl:"euiTabs--xlarge"},Qvr=Vt(Mve),LK=(0,Cve.forwardRef)(function(e,t){var n=e.children,r=e.className,o=e.bottomBorder,i=o===void 0?!0:o,u=e.expand,f=u===void 0?!1:u,h=e.size,y=h===void 0?"m":h,O=DSt(e,LSt),S=(0,Ave.default)("euiTabs",Mve[y],{"euiTabs--expand":f,"euiTabs--bottomBorder":i},r);return a("div",zK({ref:t,className:S},n&&{role:"tablist"},O),n)});LK.displayName="EuiTabs";var vA=P(L()),xr=P(dt());function hA(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?hA=function(n){return typeof n}:hA=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},hA(e)}var FSt=["className","expand","initialSelectedTab","onTabClick","selectedTab","size","tabs","autoFocus"],WSt=["id","name","content"];function DK(){return DK=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function BSt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function HSt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Lve(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function gA(e){return gA=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},gA(e)}function Hd(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var cy=function(e){qSt(n,e);var t=USt(n);function n(r){var o;HSt(this,n),o=t.call(this,r),Hd(sm(o),"rootId",Lr()()),Hd(sm(o),"tabsRef",(0,vA.createRef)()),Hd(sm(o),"focusTab",function(){var y=o.tabsRef.current.querySelector("#".concat(o.state.selectedTabId));y.focus()}),Hd(sm(o),"initializeFocus",function(){!o.state.inFocus&&o.props.autoFocus==="selected"&&o.setState({inFocus:!0},function(){o.focusTab()})}),Hd(sm(o),"removeFocus",function(y){var O=y.currentTarget,S=y.relatedTarget;O.contains(S)===!1&&o.setState({inFocus:!1})}),Hd(sm(o),"onTabClick",function(y){var O=o.props,S=O.onTabClick,I=O.selectedTab;S&&S(y),I||o.setState({selectedTabId:y.id},function(){o.focusTab()})});var i=r.initialSelectedTab,u=r.selectedTab,f=r.tabs,h;return u||(h=i&&i.id||f[0].id),o.state={selectedTabId:h,inFocus:!1},o}return VSt(n,[{key:"componentDidMount",value:function(){this.tabsRef.current&&this.tabsRef.current.addEventListener("focusout",this.removeFocus)}},{key:"componentWillUnmount",value:function(){this.tabsRef.current&&this.tabsRef.current.removeEventListener("focusout",this.removeFocus)}},{key:"render",value:function(){var o=this,i=this.props,u=i.className,f=i.expand,h=i.initialSelectedTab,y=i.onTabClick,O=i.selectedTab,S=i.size,I=i.tabs,A=i.autoFocus,C=zve(i,FSt),M=O||I.find(function(Y){return Y.id===o.state.selectedTabId}),W=M,R=W.content,B=W.id;return a("div",DK({className:u},C),a(LK,{ref:this.tabsRef,expand:f,size:S,onFocus:this.initializeFocus},I.map(function(Y){var X=Y.id,ae=Y.name,Z=Y.content,K=zve(Y,WSt),de=Rve(Rve({key:X,id:X},K),{},{onClick:function(){return o.onTabClick(Y)},isSelected:Y===M,"aria-controls":"".concat(o.rootId)});return a(RK,de,ae)})),a("div",{role:"tabpanel",id:"".concat(this.rootId),"aria-labelledby":B},R))}}]),n}(vA.Component);Hd(cy,"defaultProps",{autoFocus:"initial"});cy.propTypes={className:xr.default.string,"aria-label":xr.default.string,"data-test-subj":xr.default.string,autoFocus:xr.default.oneOf(["initial","selected"]),expand:xr.default.bool,initialSelectedTab:xr.default.shape({id:xr.default.string.isRequired,name:xr.default.node.isRequired,content:xr.default.node.isRequired,isSelected:xr.default.bool,disabled:xr.default.bool,prepend:xr.default.node,append:xr.default.node,className:xr.default.string,"aria-label":xr.default.string,"data-test-subj":xr.default.string}),onTabClick:xr.default.func,selectedTab:xr.default.shape({id:xr.default.string.isRequired,name:xr.default.node.isRequired,content:xr.default.node.isRequired,isSelected:xr.default.bool,disabled:xr.default.bool,prepend:xr.default.node,append:xr.default.node,className:xr.default.string,"aria-label":xr.default.string,"data-test-subj":xr.default.string}),size:xr.default.oneOf(["s","m","l","xl"]),tabs:xr.default.arrayOf(xr.default.shape({id:xr.default.string.isRequired,name:xr.default.node.isRequired,content:xr.default.node.isRequired,isSelected:xr.default.bool,disabled:xr.default.bool,prepend:xr.default.node,append:xr.default.node,className:xr.default.string,"aria-label":xr.default.string,"data-test-subj":xr.default.string}).isRequired).isRequired};var Nve=P(L()),Fve=P(dt());function yA(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?yA=function(n){return typeof n}:yA=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},yA(e)}function GSt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Dve(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function bA(e){return bA=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},bA(e)}function D_(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var N_=function(e){KSt(n,e);var t=YSt(n);function n(r){var o;return GSt(this,n),o=t.call(this,r),D_(L_(o),"delayID",void 0),D_(L_(o),"toBeDelayed",!0),D_(L_(o),"startDelaying",function(){window.clearTimeout(o.delayID),o.toBeDelayed=!0,o.delayID=window.setTimeout(o.stopDelaying,o.props.delay)}),D_(L_(o),"stopDelaying",function(){window.clearTimeout(o.delayID),o.toBeDelayed=!1,o.shouldUpdate()}),o.state={toggle:!1},o}return XSt(n,[{key:"shouldUpdate",value:function(){this.setState(function(o){var i=o.toggle;return{toggle:!i}})}},{key:"componentDidMount",value:function(){this.startDelaying()}},{key:"shouldComponentUpdate",value:function(){return this.toBeDelayed&&this.startDelaying(),!0}},{key:"componentWillUnmount",value:function(){this.stopDelaying()}},{key:"componentDidUpdate",value:function(){this.toBeDelayed=!0}},{key:"render",value:function(){return this.toBeDelayed?null:this.props.children}}]),n}(Nve.Component);D_(N_,"defaultProps",{delay:500});N_.propTypes={delay:Fve.default.number.isRequired};var gyr=P(L()),Vd=P(dt()),Bve=P(Ct());var ejt={name:"1qhojri-inherit",styles:"font-size:inherit;label:inherit;"},tjt={name:"j8uhck-euiHealth",styles:"display:inline-block;label:euiHealth;"},Wve=function(t){return{euiHealth:tjt,xs:Ne(lc(t,"xs"),";;label:xs;"),s:Ne(lc(t,"s"),";;label:s;"),m:Ne(lc(t,"m"),";;label:m;"),inherit:ejt}};var rjt=["children","className","color","textSize"];function WK(){return WK=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ojt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var um=function(t){var n=t.children,r=t.className,o=t.color,i=t.textSize,u=i===void 0?"s":i,f=njt(t,rjt),h=en(),y=Wve(h),O=[y.euiHealth,y[u]],S=(0,Bve.default)("euiHealth",r);return a("div",WK({css:O,className:S},f),a(eo,{gutterSize:"xs",alignItems:"center",responsive:!1},a(kt,{grow:!1},a(ar,{type:"dot",color:o})),a(kt,{grow:!1},n)))};um.propTypes={className:Vd.default.string,"aria-label":Vd.default.string,"data-test-subj":Vd.default.string,color:Vd.default.oneOfType([Vd.default.string.isRequired,Vd.default.any.isRequired]),textSize:Vd.default.any};var qve=P(L());var Iyr=P(L());var ijt=Ne(".euiScreenReaderOnly{",bd(),";};label:globalStyles;"),Hve=function(){return a(Wk,{styles:ijt})};var Vve=P(L());var wA=function(t){var n=t.cache,r=t.children;return r&&n?a(nN,{value:n},r):a(Vve.default.Fragment,null,r)};var ajt=function(t){return t.hasOwnProperty("key")},Fr=function(t){var n=t.cache,r=t.theme,o=r===void 0?mv:r,i=t.globalStyles,u=i===void 0?f0e:i,f=t.utilityClasses,h=f===void 0?Hve:f,y=t.colorMode,O=t.modify,S=t.children,I,A,C;return n&&(ajt(n)?I=n:(I=n.default,A=n.global,C=n.utility)),a(wA,{cache:I},a(nF,{theme:o??void 0,colorMode:y,modify:O},o&&a(qve.default.Fragment,null,a(wA,{cache:A,children:u&&a(u,null)}),a(wA,{cache:C,children:h&&a(h,null)})),a(oF,null,S)))};var py=P(L()),ai=P(dt()),xA=P(Ct());function OA(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?OA=function(n){return typeof n}:OA=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},OA(e)}var ljt=["children","className","items","display","expandByDefault","showExpansionArrows"];function _A(){return _A=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ujt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function cjt(e){return mjt(e)||djt(e)||fjt(e)||pjt()}function pjt(){throw new TypeError(`Invalid attempt to spread non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function fjt(e,t){if(e){if(typeof e=="string")return BK(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return BK(e,t)}}function djt(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function mjt(e){if(Array.isArray(e))return BK(e)}function BK(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function SA(e){return SA=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},SA(e)}function bc(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Xve=(0,py.createContext)("");function $ve(e){return e.hasOwnProperty("aria-label")}function Jve(e,t,n){return e??(t===""?n():t)}var Gve={default:null,compressed:"euiTreeView--compressed"},F_=function(e){vjt(n,e);var t=yjt(n);function n(){var r;hjt(this,n);for(var o=arguments.length,i=new Array(o),u=0;u1&&arguments[1]!==void 0?arguments[1]:!1,y=r.state.openItems.indexOf(f.id);r.setState({expandChildNodes:!1}),f.isExpanded=!f.isExpanded,!h&&f.callback!==void 0&&f.callback(),r.isNodeOpen(f)?r.setState({openItems:r.state.openItems.filter(function(O,S){return S!==y})}):r.setState(function(O){return{openItems:[].concat(cjt(O.openItems),[f.id]),activeItem:f.id}})}),bc(yc(r),"isNodeOpen",function(f){return r.state.openItems.includes(f.id)}),bc(yc(r),"onKeyDown",function(f,h){switch(f.key){case On.ARROW_DOWN:{var y=Array.from(document.querySelectorAll('[data-test-subj="euiTreeViewButton-'.concat(r.state.treeID,'"]'))),O=y.indexOf(f.currentTarget);if(O>-1){var S=y[O+1];S&&(f.preventDefault(),f.stopPropagation(),S.focus())}break}case On.ARROW_UP:{var I=Array.from(document.querySelectorAll('[data-test-subj="euiTreeViewButton-'.concat(r.state.treeID,'"]'))),A=I.indexOf(f.currentTarget);if(A>-1){var C=I[A+-1];C&&(f.preventDefault(),f.stopPropagation(),C.focus())}break}case On.ARROW_RIGHT:{r.isNodeOpen(h)||(f.preventDefault(),f.stopPropagation(),r.handleNodeClick(h,!0));break}case On.ARROW_LEFT:r.isNodeOpen(h)&&(f.preventDefault(),f.stopPropagation(),r.handleNodeClick(h,!0));default:break}}),bc(yc(r),"onChildrenKeydown",function(f,h){f.key===On.ARROW_LEFT&&(f.preventDefault(),f.stopPropagation(),r.buttonRef[h].focus())}),r}return gjt(n,[{key:"componentDidUpdate",value:function(o){this.props.id!==o.id&&this.setState({treeID:Jve(this.props.id,this.context,this.treeIdGenerator)})}},{key:"render",value:function(){var o=this,i=this.props,u=i.children,f=i.className,h=i.items,y=i.display,O=y===void 0?"default":y,S=i.expandByDefault,I=i.showExpansionArrows,A=sjt(i,ljt),C=(0,xA.default)("euiTreeView",O?Gve[O]:null,{"euiTreeView--withArrows":I},f),M="".concat(this.state.treeID,"--instruction");return a(Xve.Provider,{value:this.state.treeID},a(fr,{size:O==="compressed"?"s":"m",className:"euiTreeView__wrapper"},!this.isNested&&a(At,{token:"euiTreeView.listNavigationInstructions",default:"You can quickly navigate this list using arrow keys."},function(W){return a(qn,null,a("p",{id:M},W))}),a("ul",_A({className:C,id:this.isNested?void 0:this.state.treeID,"aria-describedby":this.isNested?void 0:M},A),h.map(function(W,R){var B=W.id,Y=o.treeIdGenerator(B);return a(tu,{key:W.id+R,fallback:typeof W.label=="string"?W.label:""},function(X,ae){return a(At,{key:W.id+R,token:"euiTreeView.ariaLabel",default:"{nodeLabel} child of {ariaLabel}",values:{nodeLabel:ae,ariaLabel:$ve(A)?A["aria-label"]:""}},function(Z){var K=$ve(A)?{"aria-label":Z}:{"aria-labelledby":"".concat(B," ").concat(A["aria-labelledby"])},de=(0,xA.default)("euiTreeView__node",O?Gve[O]:null,{"euiTreeView__node--expanded":o.isNodeOpen(W)}),se=(0,xA.default)("euiTreeView__nodeInner",I&&W.children?"euiTreeView__nodeInner--withArrows":null,o.state.activeItem===W.id?"euiTreeView__node--active":null,W.className?W.className:null);return a(py.default.Fragment,null,a("li",{className:de},a("button",{id:B,"aria-controls":Y,"aria-expanded":o.isNodeOpen(W),ref:function(Oe){return o.setButtonRef(Oe,R)},"data-test-subj":"euiTreeViewButton-".concat(o.state.treeID),onKeyDown:function(Oe){return o.onKeyDown(Oe,W)},onClick:function(){return o.handleNodeClick(W)},className:se},I&&W.children?a(ar,{className:"euiTreeView__expansionArrow",size:O==="compressed"?"s":"m",type:o.isNodeOpen(W)?"arrowDown":"arrowRight"}):null,W.icon&&!W.useEmptyIcon?a("span",{className:"euiTreeView__iconWrapper"},o.isNodeOpen(W)&&W.iconWhenExpanded?W.iconWhenExpanded:W.icon):null,W.useEmptyIcon&&!W.icon?a("span",{className:"euiTreeView__iconPlaceholder"}):null,a("span",{ref:X,className:"euiTreeView__nodeLabel"},W.label)),a("div",{id:Y,onKeyDown:function(Oe){return o.onChildrenKeydown(Oe,R)}},W.children&&o.isNodeOpen(W)?a(n,_A({items:W.children,display:O,showExpansionArrows:I,expandByDefault:o.state.expandChildNodes},K)):null)))})})}))))}}]),n}(py.Component);bc(F_,"contextType",Xve);F_.propTypes={className:ai.default.string,"data-test-subj":ai.default.string,items:ai.default.arrayOf(ai.default.shape({children:ai.default.arrayOf(ai.default.any.isRequired),label:ai.default.node.isRequired,id:ai.default.string.isRequired,icon:ai.default.element,iconWhenExpanded:ai.default.element,useEmptyIcon:ai.default.bool,isExpanded:ai.default.bool,className:ai.default.string,callback:ai.default.func}).isRequired).isRequired,display:ai.default.oneOf(["default","compressed"]),expandByDefault:ai.default.bool,showExpansionArrows:ai.default.bool,"aria-label":ai.default.string,"aria-labelledby":ai.default.string};var mu=P(L()),Zt=P(dt()),cye=P(Ct());var Kve=P(L()),Yve=P(Ct());var VK=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,r=t.searchableLabel||t.label;return n?r.trim().toLowerCase():r},Ojt=function(t,n){var r=t.toLowerCase();return n.find(function(o){return VK(o)===r})},xjt=function(t,n,r,o,i){if(i){var u=Ojt(VK(n,!1),i);if(u)return!1}if(o){t.push(n);return}if(!r){t.push(n);return}var f=VK(n);f.includes(r)&&t.push(n)},fy=function(t,n,r,o){var i=n.toLowerCase(),u=[];return t.forEach(function(f){xjt(u,f,i,r,o)}),u};var _jt=["onChange","options","value","placeholder","isPreFiltered","listId","className"];function qK(){return qK=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function jjt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var UK=function(t){var n=t.onChange,r=t.options,o=t.value,i=t.placeholder,u=t.isPreFiltered,f=t.listId,h=t.className,y=Sjt(t,_jt),O=(0,Kve.useCallback)(function(A){var C=A.target.value,M=fy(r,C,u);n(C,M)},[r,u,n]),S=(0,Yve.default)("euiSelectableSearch",h),I=f?{role:"combobox","aria-autocomplete":"list","aria-expanded":!0,"aria-controls":f,"aria-owns":f}:void 0;return a(O_,qK({className:S,placeholder:i,value:o,onChange:O,incremental:!0,fullWidth:!0,autoComplete:"off","aria-haspopup":"listbox"},I,y))};var p2r=P(L()),W_=P(dt()),Qve=P(Ct());var Ijt=["children","className","bordered"];function $K(){return $K=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Pjt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var jA=function(t){var n=t.children,r=t.className,o=t.bordered,i=o===void 0?!1:o,u=kjt(t,Ijt),f=(0,Qve.default)("euiSelectableMessage",{"euiSelectableMessage--bordered":i},r);return a(fr,$K({color:"subdued",size:"xs",className:f},u),n)};jA.propTypes={className:W_.default.string,"aria-label":W_.default.string,"data-test-subj":W_.default.string,bordered:W_.default.bool};var my=P(L()),yt=P(dt()),aye=P(Ct());var kA=P(Ct()),Wr=P(dt()),rye=P(L());function IA(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?IA=function(n){return typeof n}:IA=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},IA(e)}var Ejt=["children","className","disabled","checked","isFocused","showIcons","prepend","append","allowExclusions","onFocusBadge","paddingSize","role","searchable","textWrap"],Cjt=["children","className"];function B_(){return B_=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ajt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function Mjt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function eye(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function PA(e){return PA=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},PA(e)}function tye(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Fjt(e){return e?e==="on"?{icon:"check",color:"text"}:{icon:"cross",color:"text"}:{icon:"empty"}}var nye={none:null,s:"euiSelectableListItem--paddingSmall"},j2r=Vt(nye),EA=function(e){Rjt(n,e);var t=zjt(n);function n(r){return Mjt(this,n),t.call(this,r)}return Tjt(n,[{key:"render",value:function(){var o=this.props,i=o.children,u=o.className,f=o.disabled,h=o.checked,y=o.isFocused,O=o.showIcons,S=o.prepend,I=o.append,A=o.allowExclusions,C=o.onFocusBadge,M=o.paddingSize,W=M===void 0?"s":M,R=o.role,B=R===void 0?"option":R,Y=o.searchable,X=o.textWrap,ae=Zve(o,Ejt),Z=(0,kA.default)("euiSelectableListItem",{"euiSelectableListItem-isFocused":y},nye[W],u),K=(0,kA.default)("euiSelectableListItem__text",tye({},"euiSelectableListItem__text--".concat(X),X)),de;if(O){var se=Fjt(h),Se=se.icon,Oe=se.color;de=a(ar,{className:"euiSelectableListItem__icon",color:Oe,type:Se})}var be,Ue;A&&h==="on"?(be=a(At,{token:"euiSelectableListItem.includedOption",default:"Selected option."}),Ue=a(At,{token:"euiSelectableListItem.includedOptionInstructions",default:"To exclude this option, press enter."})):A&&h==="off"?(be=a(At,{token:"euiSelectableListItem.excludedOption",default:"Excluded option."}),Ue=a(At,{token:"euiSelectableListItem.excludedOptionInstructions",default:"To uncheck this option, press enter."})):A&&!h&&(Ue=a(At,{token:"euiSelectableListItem.unckeckedOptionInstructions",default:"To select this option, press enter."}));var We=!f&&typeof h=="string";!A&&We&&(be=a(At,{token:"euiSelectableListItem.checkedOption",default:"Checked option."}),Ue=Y?a(At,{token:"euiSelectableListItem.checkedOptionInstructions",default:"To uncheck this option, press enter."}):void 0);var Ge;S&&(Ge=a("span",{className:"euiSelectableListItem__prepend"},S));var Qe;if(I||C){var ot,at={"aria-hidden":!0,iconType:"returnKey",iconSide:"left",color:"hollow"};if(C===!0)ot=a(wo,B_({className:"euiSelectableListItem__onFocusBadge"},at));else if(C&&C!==!1){var ht=C.children,Mt=C.className,Ze=Zve(C,Cjt);ot=a(wo,B_({className:(0,kA.default)("euiSelectableListItem__onFocusBadge",Mt)},at,Ze),ht)}(I||y&&!f)&&(Qe=a("span",{className:"euiSelectableListItem__append"},I," ",y&&!f?ot:null))}var Kt=(Ue||be)&&a(qn,null,a("div",null,be||Ue?" - ":null,be,be&&Ue?" ":null,Ue));return a("li",B_({role:B,"data-test-selected":We,"aria-checked":B==="option"?We:void 0,"aria-selected":!f&&y,className:Z,"aria-disabled":f},ae),a("span",{className:"euiSelectableListItem__content"},de,Ge,a("span",{className:K},i,Kt),Qe))}}]),n}(rye.Component);tye(EA,"defaultProps",{showIcons:!0,onFocusBadge:!0,textWrap:"truncate"});EA.propTypes={className:Wr.default.string,"aria-label":Wr.default.string,"data-test-subj":Wr.default.string,children:Wr.default.node,checked:Wr.default.oneOf(["on","off",void 0]),showIcons:Wr.default.bool,isFocused:Wr.default.bool,disabled:Wr.default.bool,prepend:Wr.default.node,append:Wr.default.node,allowExclusions:Wr.default.bool,onFocusBadge:Wr.default.oneOfType([Wr.default.bool.isRequired,Wr.default.shape({iconType:Wr.default.oneOfType([Wr.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,Wr.default.string.isRequired,Wr.default.elementType.isRequired]),iconSide:Wr.default.oneOf(["left","right"]),color:Wr.default.oneOfType([Wr.default.string.isRequired,Wr.default.any.isRequired]),isDisabled:Wr.default.bool,closeButtonProps:Wr.default.any,className:Wr.default.string,"aria-label":Wr.default.string,"data-test-subj":Wr.default.string,iconOnClick:Wr.default.func,iconOnClickAriaLabel:Wr.default.any,onClick:Wr.default.func,onClickAriaLabel:Wr.default.any,href:Wr.default.string,target:Wr.default.string,rel:Wr.default.string}).isRequired]),paddingSize:Wr.default.any,searchable:Wr.default.bool,role:Wr.default.any,textWrap:Wr.default.oneOf(["truncate","wrap"])};function CA(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?CA=function(n){return typeof n}:CA=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},CA(e)}var Wjt=["data"],Bjt=["label","isGroupLabel","checked","disabled","prepend","append","ref","key","searchableLabel","data"],Hjt=["className","options","searchValue","onOptionClick","renderOption","height","windowProps","rowHeight","activeOptionIndex","makeOptionId","showIcons","singleSelection","visibleOptions","allowExclusions","bordered","paddingSize","searchable","onFocusBadge","listId","setActiveOptionIndex","aria-label","aria-labelledby","aria-describedby","role","isVirtualized","textWrap"];function oye(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function H_(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Vjt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function qjt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function iye(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function AA(e){return AA=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},AA(e)}function ys(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var V_=function(e){$jt(n,e);var t=Jjt(n);function n(r){var o;return qjt(this,n),o=t.call(this,r),ys(du(o),"listRef",null),ys(du(o),"listBoxRef",null),ys(du(o),"setListRef",function(i){o.listRef=i,i&&o.props.activeOptionIndex&&i.scrollToItem(o.props.activeOptionIndex,"auto")}),ys(du(o),"removeScrollableTabStop",function(i){i&&i.setAttribute("tabindex","-1")}),ys(du(o),"setListBoxRef",function(i){o.listBoxRef=i;var u=o.props,f=u.listId,h=u.searchable,y=u.singleSelection,O=u["aria-label"],S=u["aria-labelledby"],I=u["aria-describedby"];i&&(i.setAttribute("id",f),i.setAttribute("role","listbox"),h!==!0&&(i.setAttribute("tabindex","0"),y!=="always"&&y!==!0&&i.setAttribute("aria-multiselectable","true")),typeof O=="string"?i.setAttribute("aria-label",O):typeof S=="string"&&i.setAttribute("aria-labelledby",S),typeof I=="string"&&i.setAttribute("aria-labelledby",I))}),ys(du(o),"ListRow",(0,my.memo)(function(i){var u=i.data,f=i.index,h=i.style,y=u[f],O=y.data,S=GK(y,Wjt),I=y.label,A=y.isGroupLabel,C=y.checked,M=y.disabled,W=y.prepend,R=y.append,B=y.ref,Y=y.key,X=y.searchableLabel,ae=y.data,Z=GK(y,Bjt),K=o.props,de=K.activeOptionIndex,se=K.allowExclusions,Se=K.onFocusBadge,Oe=K.paddingSize,be=K.searchValue,Ue=K.showIcons,We=K.makeOptionId,Ge=K.renderOption,Qe=K.setActiveOptionIndex,ot=K.searchable,at=K.textWrap;if(A)return a("li",dy({role:"presentation",className:"euiSelectableList__groupLabel",style:h},Z),W,I,R);var ht=u.filter(function(Ze){return Ze.isGroupLabel}).length,Mt=We(f);return a(EA,dy({key:Mt,id:Mt,style:h,onMouseDown:function(){Qe(f)},onClick:function(Kt){Kt.persist(),o.onAddOrRemoveOption(y,Kt)},ref:B?B.bind(null,f):void 0,isFocused:de===f,title:X||I,checked:C,disabled:M,prepend:W,append:R,"aria-posinset":f+1-ht,"aria-setsize":u.length-ht,onFocusBadge:Se,allowExclusions:se,showIcons:Ue,paddingSize:Oe,searchable:ot,textWrap:at},Z),Ge?Ge(H_(H_({},S),O),o.props.searchValue):a(cu,{search:be},I))},zge)),ys(du(o),"onAddOrRemoveOption",function(i,u){if(!i.disabled){var f=o.props,h=f.allowExclusions,y=f.options,O=f.visibleOptions,S=O===void 0?y:O;o.props.setActiveOptionIndex(S.findIndex(function(I){var A=I.label;return A===i.label}),function(){i.checked==="on"&&h?o.onExcludeOption(i,u):i.checked==="on"||i.checked==="off"?o.onRemoveOption(i,u):o.onAddOption(i,u)})}}),ys(du(o),"onAddOption",function(i,u){var f=o.props,h=f.onOptionClick,y=f.options,O=f.singleSelection,S=y.map(function(I){var A=H_({},I);return O&&delete A.checked,I===i&&(A.checked="on"),A});h(S,u)}),ys(du(o),"onRemoveOption",function(i,u){var f=o.props,h=f.onOptionClick,y=f.singleSelection,O=f.options,S=O.map(function(I){var A=H_({},I);return I===i&&y!=="always"&&delete A.checked,A});h(S,u)}),ys(du(o),"onExcludeOption",function(i,u){var f=o.props,h=f.onOptionClick,y=f.options;i.checked="off";var O=y.map(function(S){var I=H_({},S);return S===i&&(I.checked="off"),I});h(O,u)}),o}return Ujt(n,[{key:"componentDidUpdate",value:function(){var o=this.props.activeOptionIndex;this.listBoxRef&&this.props.searchable!==!0&&this.listBoxRef.setAttribute("aria-activedescendant","".concat(this.props.makeOptionId(o))),this.listRef&&typeof this.props.activeOptionIndex<"u"&&this.listRef.scrollToItem(this.props.activeOptionIndex,"auto")}},{key:"render",value:function(){var o=this,i=this.props,u=i.className,f=i.options,h=i.searchValue,y=i.onOptionClick,O=i.renderOption,S=i.height,I=i.windowProps,A=i.rowHeight,C=i.activeOptionIndex,M=i.makeOptionId,W=i.showIcons,R=i.singleSelection,B=i.visibleOptions,Y=i.allowExclusions,X=i.bordered,ae=i.paddingSize,Z=i.searchable,K=i.onFocusBadge,de=i.listId,se=i.setActiveOptionIndex,Se=i["aria-label"],Oe=i["aria-labelledby"],be=i["aria-describedby"],Ue=i.role,We=i.isVirtualized,Ge=i.textWrap,Qe=GK(i,Hjt),ot=B||f,at=S==="full",ht=at?!1:S;if(ht===void 0){var Mt=7,Ze=ot.length,Kt=ot.length>Mt;Kt?ht=(Mt-.5)*A:ht=Ze*A}var it=(0,aye.default)("euiSelectableList",{"euiSelectableList-fullHeight":at,"euiSelectableList-bordered":X},u);return a("div",dy({className:it},Qe),We?a(bG,{disableHeight:!at},function(xt){var wt=xt.width,Ht=xt.height;return a(KC,dy({ref:o.setListRef,outerRef:o.removeScrollableTabStop,className:"euiSelectableList__list","data-skip-axe":"scrollable-region-focusable",width:wt,height:ht||Ht,itemCount:ot.length,itemData:ot,itemSize:A,innerElementType:"ul",innerRef:o.setListBoxRef},I),o.ListRow)}):a("div",{className:"euiSelectableList__list",ref:this.removeScrollableTabStop},a("ul",{ref:this.setListBoxRef},ot.map(function(xt,wt){return my.default.createElement(o.ListRow,{key:wt,data:ot,index:wt},null)}))))}}]),n}(my.Component);ys(V_,"defaultProps",{rowHeight:32,searchValue:"",isVirtualized:!0});V_.propTypes={className:yt.default.string,"aria-label":yt.default.string,"data-test-subj":yt.default.string,activeOptionIndex:yt.default.number,showIcons:yt.default.bool,singleSelection:yt.default.oneOfType([yt.default.oneOf(["always"]),yt.default.bool.isRequired]),windowProps:yt.default.any,bordered:yt.default.bool,onFocusBadge:yt.default.oneOfType([yt.default.bool.isRequired,yt.default.shape({iconType:yt.default.oneOfType([yt.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,yt.default.string.isRequired,yt.default.elementType.isRequired]),iconSide:yt.default.oneOf(["left","right"]),color:yt.default.oneOfType([yt.default.string.isRequired,yt.default.any.isRequired]),isDisabled:yt.default.bool,closeButtonProps:yt.default.any,className:yt.default.string,"aria-label":yt.default.string,"data-test-subj":yt.default.string,iconOnClick:yt.default.func,iconOnClickAriaLabel:yt.default.any,onClick:yt.default.func,onClickAriaLabel:yt.default.any,href:yt.default.string,target:yt.default.string,rel:yt.default.string}).isRequired]),paddingSize:yt.default.any,textWrap:yt.default.oneOf(["truncate","wrap"]),isVirtualized:yt.default.oneOfType([yt.default.oneOf([!0]),yt.default.oneOf([!1]).isRequired]),rowHeight:yt.default.number,options:yt.default.arrayOf(yt.default.shape({isGroupLabel:yt.default.oneOfType([yt.default.oneOf([!0]).isRequired,yt.default.oneOf([!1])]),className:yt.default.string,"aria-label":yt.default.string,"data-test-subj":yt.default.string,label:yt.default.string,searchableLabel:yt.default.string,key:yt.default.string,checked:yt.default.oneOf(["on","off",void 0]),disabled:yt.default.bool,prepend:yt.default.node,append:yt.default.node,ref:yt.default.func,data:yt.default.shape({})}).isRequired).isRequired,visibleOptions:yt.default.arrayOf(yt.default.shape({isGroupLabel:yt.default.oneOfType([yt.default.oneOf([!0]).isRequired,yt.default.oneOf([!1])]),className:yt.default.string,"aria-label":yt.default.string,"data-test-subj":yt.default.string,label:yt.default.string,searchableLabel:yt.default.string,key:yt.default.string,checked:yt.default.oneOf(["on","off",void 0]),disabled:yt.default.bool,prepend:yt.default.node,append:yt.default.node,ref:yt.default.func,data:yt.default.shape({})}).isRequired),searchValue:yt.default.string.isRequired,onOptionClick:yt.default.func.isRequired,renderOption:yt.default.func,height:yt.default.oneOfType([yt.default.number.isRequired,yt.default.oneOf(["full"])]),allowExclusions:yt.default.bool,searchable:yt.default.bool,makeOptionId:yt.default.func.isRequired,listId:yt.default.string.isRequired,setActiveOptionIndex:yt.default.func.isRequired};function MA(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?MA=function(n){return typeof n}:MA=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},MA(e)}var Kjt=["children","className","options","onChange","onActiveOptionChange","searchable","searchProps","singleSelection","isLoading","listProps","renderOption","height","allowExclusions","aria-label","aria-describedby","loadingMessage","noMatchesMessage","emptyMessage","errorMessage","isPreFiltered"],Yjt=["aria-label","aria-describedby","onChange","defaultValue","inputRef"],Qjt=["aria-label","aria-describedby","isVirtualized","rowHeight"];function Zjt(e,t){return nIt(e)||rIt(e,t)||tIt(e,t)||eIt()}function eIt(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function tIt(e,t){if(e){if(typeof e=="string")return lye(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return lye(e,t)}}function lye(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function oIt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function iIt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function uye(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function TA(e){return TA=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},TA(e)}function Ei(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var wc=function(e){lIt(n,e);var t=sIt(n);function n(r){var o,i;iIt(this,n),i=t.call(this,r),Ei(Gi(i),"inputRef",null),Ei(Gi(i),"containerRef",(0,mu.createRef)()),Ei(Gi(i),"optionsListRef",(0,mu.createRef)()),Ei(Gi(i),"preventOnFocus",!1),Ei(Gi(i),"rootId",void 0),Ei(Gi(i),"messageContentId",void 0),Ei(Gi(i),"listId",void 0),Ei(Gi(i),"onMouseDown",function(){i.preventOnFocus=!0}),Ei(Gi(i),"onFocus",function(){if(i.preventOnFocus){i.preventOnFocus=!1;return}if(!(!i.state.visibleOptions.length||i.state.activeOptionIndex!=null)){var C=i.state.visibleOptions.findIndex(function(M){return M.checked&&!M.disabled&&!M.isGroupLabel});C>-1?i.setState({activeOptionIndex:C,isFocused:!0}):i.setState({activeOptionIndex:i.state.visibleOptions.findIndex(function(M){return!M.disabled&&!M.isGroupLabel}),isFocused:!0})}}),Ei(Gi(i),"onKeyDown",function(C){var M=i.optionsListRef.current;switch(C.key){case On.ARROW_UP:C.preventDefault(),C.stopPropagation(),i.incrementActiveOptionIndex(-1);break;case On.ARROW_DOWN:C.preventDefault(),C.stopPropagation(),i.incrementActiveOptionIndex(1);break;case On.ENTER:case On.SPACE:if(i.props.searchable){var W,R;if(C.target===i.inputRef&&C.key===On.SPACE||!(C.target===i.inputRef||C.target===((W=i.optionsListRef.current)===null||W===void 0||(R=W.listBoxRef)===null||R===void 0?void 0:R.parentElement)))return}C.preventDefault(),C.stopPropagation(),i.state.activeOptionIndex!=null&&M&&(C.persist(),M.onAddOrRemoveOption(i.state.visibleOptions[i.state.activeOptionIndex],C));break;case On.ALT:case On.SHIFT:case On.CTRL:case On.META:break;default:i.setState({activeOptionIndex:void 0},i.onFocus);break}}),Ei(Gi(i),"incrementActiveOptionIndex",function(C){i.state.visibleOptions.length&&i.setState(function(M){var W=M.activeOptionIndex,R=M.visibleOptions,B;W==null?B=C<0?R.length-1:0:(B=W+C,B<0?B=R.length-1:B===R.length&&(B=0));for(var Y=C>0?1:-1;R[B].isGroupLabel||R[B].disabled;)B=B+Y,B<0?B=R.length-1:B===R.length&&(B=0);return{activeOptionIndex:B}})}),Ei(Gi(i),"onSearchChange",function(C,M){var W,R;i.setState({searchValue:C,visibleOptions:M,activeOptionIndex:void 0},function(){i.state.isFocused&&i.onFocus()}),(W=i.props.searchProps)===null||W===void 0||(R=W.onChange)===null||R===void 0||R.call(W,C,M)}),Ei(Gi(i),"onContainerBlur",function(C){var M,W;((M=C.relatedTarget)===null||M===void 0||(W=M.firstChild)===null||W===void 0?void 0:W.id)!==i.listId&&i.setState({activeOptionIndex:void 0,isFocused:!1})}),Ei(Gi(i),"onOptionClick",function(C,M){var W=i.props,R=W.isPreFiltered,B=W.onChange,Y=i.state.searchValue,X=fy(C,Y,R);i.setState({visibleOptions:X}),B&&B(C,M)}),Ei(Gi(i),"scrollToItem",function(C,M){var W,R;(W=i.optionsListRef.current)===null||W===void 0||(R=W.listRef)===null||R===void 0||R.scrollToItem(C,M)}),Ei(Gi(i),"makeOptionId",function(C){return C!=null?"".concat(i.listId,"_option-").concat(C):""}),i.rootId=r.id?function(C){return"".concat(r.id).concat(C?"_".concat(C):"")}:Lr(),i.listId=i.rootId("listbox"),i.messageContentId=i.rootId("messageContent");var u=r.options,f=r.singleSelection,h=r.isPreFiltered,y=r.searchProps,O=y?.value||String(y?.defaultValue||""),S=fy(u,O,h);y==null||(o=y.onChange)===null||o===void 0||o.call(y,O,S);var I=u.filter(function(C){return C.checked}),A;return f&&I.length===1&&S.includes(I[0])&&(A=S.indexOf(I[0])),i.state={activeOptionIndex:A,searchValue:O,visibleOptions:S,isFocused:!1},i}return aIt(n,[{key:"componentDidUpdate",value:function(o,i){if(i.activeOptionIndex!==this.state.activeOptionIndex){var u,f,h=this.state.activeOptionIndex!=null?this.state.visibleOptions[this.state.activeOptionIndex]:null;(u=(f=this.props).onActiveOptionChange)===null||u===void 0||u.call(f,h)}}},{key:"render",value:function(){var o=this,i=this.props,u=i.children,f=i.className,h=i.options,y=i.onChange,O=i.onActiveOptionChange,S=i.searchable,I=i.searchProps,A=i.singleSelection,C=i.isLoading,M=i.listProps,W=i.renderOption,R=i.height,B=i.allowExclusions,Y=i["aria-label"],X=i["aria-describedby"],ae=i.loadingMessage,Z=i.noMatchesMessage,K=i.emptyMessage,de=i.errorMessage,se=i.isPreFiltered,Se=YK(i,Kjt),Oe=this.state,be=Oe.searchValue,Ue=Oe.visibleOptions,We=Oe.activeOptionIndex,Ge={"aria-label":void 0,"aria-describedby":void 0},Qe=I||Ge,ot=Qe["aria-label"],at=Qe["aria-describedby"],ht=Qe.onChange,Mt=Qe.defaultValue,Ze=Qe.inputRef,Kt=YK(Qe,Yjt),it=M||Ge,xt=it["aria-label"],wt=it["aria-describedby"],Ht=it.isVirtualized,sr=it.rowHeight,Er=YK(it,Qjt),_r;Ht===!1?_r={isVirtualized:Ht}:sr!=null&&(_r={rowHeight:sr});var pn=(0,cye.default)("euiSelectable",{"euiSelectable-fullHeight":R==="full"},f),Dr;de!=null?Dr=typeof de=="string"?a("p",null,de):de:C?ae===void 0||typeof ae=="string"?Dr=a(mu.default.Fragment,null,a($r,{size:"m"}),a(bi,{size:"xs"}),a("p",null,ae||a(At,{token:"euiSelectable.loadingOptions",default:"Loading options"}))):Dr=mu.default.cloneElement(ae,KK({id:this.messageContentId},ae.props)):be&&Ue.length===0?Z===void 0||typeof Z=="string"?Dr=a("p",null,Z||a(At,{token:"euiSelectable.noMatchingOptions",default:"{searchValue} doesn't match any options",values:{searchValue:a("strong",null,be)}})):Dr=mu.default.cloneElement(Z,KK({id:this.messageContentId},Z.props)):h.length||(K===void 0||typeof K=="string"?Dr=a("p",null,K||a(At,{token:"euiSelectable.noAvailableOptions",default:"No options available"})):Dr=mu.default.cloneElement(K,KK({id:this.messageContentId},K.props)));var Bt=function(gn,vn){if(gn&&gn["aria-label"])return{"aria-label":gn["aria-label"]};var Xo=vn?" ".concat(vn):"";return gn&&gn["aria-describedby"]?{"aria-describedby":"".concat(gn["aria-describedby"]).concat(Xo)}:Y?{"aria-label":Y}:X?{"aria-describedby":"".concat(X).concat(Xo)}:{}},Dn=Bt(I,this.messageContentId),fn=!!Object.keys(Dn).length,ro=S?a(At,{token:"euiSelectable.placeholderName",default:"Filter options"},function(zo){return a(UK,q_({key:"listSearch",options:h,value:be,onChange:o.onSearchChange,listId:o.optionsListRef.current?o.listId:void 0,"aria-activedescendant":o.makeOptionId(We),placeholder:zo,isPreFiltered:se??!1,inputRef:function(vn){var Xo;o.inputRef=vn,I==null||(Xo=I.inputRef)===null||Xo===void 0||Xo.call(I,vn)}},fn?Dn:{"aria-label":zo},Kt))}):void 0,Gn=Ue.filter(function(zo){return!zo.disabled}).length,co=S&&a(At,{token:"euiSelectable.searchResults",default:function(gn){var vn=gn.resultsLength;return"".concat(vn," result").concat(vn===1?"":"s"," available")},values:{resultsLength:Gn}}),So=this.rootId("instructions"),En=Bt(M,So),Vr=!!Object.keys(En).length,hn=a(At,{tokens:["euiSelectable.screenReaderInstructions","euiSelectable.placeholderName"],defaults:["Use up and down arrows to move focus over options. Enter to select. Escape to collapse options.","Filter options"]},function(zo){var gn=Zjt(zo,2),vn=gn[0],Xo=gn[1];return a(mu.default.Fragment,null,S&&a(H3,{isActive:Dr!=null||We!=null},Dr||co),a(qn,null,a("p",{id:So},Xo)),Dr?a(jA,{"data-test-subj":"euiSelectableMessage",id:o.messageContentId,bordered:M&&M.bordered},Dr):a(V_,q_({"data-test-subj":"euiSelectableList",key:"list",options:h,visibleOptions:Ue,searchValue:be,activeOptionIndex:We,setActiveOptionIndex:function(ws,mr){o.setState({activeOptionIndex:ws},mr)},onOptionClick:o.onOptionClick,singleSelection:A,ref:o.optionsListRef,renderOption:W,height:R,allowExclusions:B,searchable:S,makeOptionId:o.makeOptionId,listId:o.listId},Vr?En:S&&{"aria-label":vn},Er,_r)))});return a("div",q_({ref:this.containerRef,className:pn,onKeyDown:this.onKeyDown,onBlur:this.onContainerBlur,onFocus:this.onFocus,onMouseDown:this.onMouseDown},Se),u&&u(hn,ro))}}],[{key:"getDerivedStateFromProps",value:function(o,i){var u=o.options,f=o.isPreFiltered,h=o.searchProps,y=i.activeOptionIndex,O=i.searchValue,S=fy(u,O,f),I={visibleOptions:S,activeOptionIndex:y};return y!=null&&y>=S.length&&(I.activeOptionIndex=-1),h?.value!=null&&h.value!==O&&(I.searchValue=h.value),I}}]),n}(mu.Component);Ei(wc,"defaultProps",{options:[],singleSelection:!1,searchable:!1,isPreFiltered:!1});wc.propTypes={className:Zt.default.string,"aria-label":Zt.default.string,"data-test-subj":Zt.default.string,searchable:Zt.default.oneOfType([Zt.default.oneOf([!1]).isRequired,Zt.default.oneOf([!0]).isRequired]).isRequired,searchProps:Zt.default.any,children:Zt.default.func,options:Zt.default.arrayOf(Zt.default.shape({isGroupLabel:Zt.default.oneOfType([Zt.default.oneOf([!0]).isRequired,Zt.default.oneOf([!1])]),className:Zt.default.string,"aria-label":Zt.default.string,"data-test-subj":Zt.default.string,label:Zt.default.string,searchableLabel:Zt.default.string,key:Zt.default.string,checked:Zt.default.oneOf(["on","off",void 0]),disabled:Zt.default.bool,prepend:Zt.default.node,append:Zt.default.node,ref:Zt.default.func,data:Zt.default.shape({})}).isRequired).isRequired,onChange:Zt.default.func,onActiveOptionChange:Zt.default.func,singleSelection:Zt.default.oneOfType([Zt.default.oneOf(["always"]),Zt.default.bool.isRequired]),allowExclusions:Zt.default.bool,isLoading:Zt.default.bool,height:Zt.default.oneOfType([Zt.default.number.isRequired,Zt.default.oneOf(["full"])]),listProps:Zt.default.any,renderOption:Zt.default.func,loadingMessage:Zt.default.oneOfType([Zt.default.element.isRequired,Zt.default.string.isRequired]),noMatchesMessage:Zt.default.oneOfType([Zt.default.element.isRequired,Zt.default.string.isRequired]),emptyMessage:Zt.default.oneOfType([Zt.default.element.isRequired,Zt.default.string.isRequired]),errorMessage:Zt.default.oneOfType([Zt.default.element.isRequired,Zt.default.string.isRequired,Zt.default.oneOf([null])]),isPreFiltered:Zt.default.bool};var pye=P(L()),Xi=P(dt());var RA=P(Ct());var pIt=["className","label","type","labelWidth","description","truncate","onClick"];function zA(){return zA=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function dIt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var fye={tint0:"euiSuggestItem__type--tint0",tint1:"euiSuggestItem__type--tint1",tint2:"euiSuggestItem__type--tint2",tint3:"euiSuggestItem__type--tint3",tint4:"euiSuggestItem__type--tint4",tint5:"euiSuggestItem__type--tint5",tint6:"euiSuggestItem__type--tint6",tint7:"euiSuggestItem__type--tint7",tint8:"euiSuggestItem__type--tint8",tint9:"euiSuggestItem__type--tint9",tint10:"euiSuggestItem__type--tint10"},mIt=Vt(fye),ZK=function(t){var n=t.className,r=t.label,o=t.type,i=t.labelWidth,u=i===void 0?"50":i,f=t.description,h=t.truncate,y=h===void 0?!0:h,O=t.onClick,S=fIt(t,pIt),I=(0,RA.default)("euiSuggestItem",{"euiSuggestItem--truncate":y},n),A=(0,RA.default)("euiSuggestItem__label","euiSuggestItem__label--width".concat(u)),C=(0,RA.default)("euiSuggestItem__description",{"euiSuggestItem__description--wrap":!y}),M="";o&&o.color&&mIt.indexOf(o.color)>-1&&(M=fye[o.color]);var W=a(pye.default.Fragment,null,a("span",{className:"euiSuggestItem__type ".concat(M)},a(ar,{type:o.iconType,color:"inherit"})),a("span",{className:A,title:r},r),f&&a("span",{className:C,title:f},f));return O?a("button",zA({onClick:O,className:I},S),W):a("span",zA({className:I},S),W)};ZK.propTypes={className:Xi.default.string,"aria-label":Xi.default.string,"data-test-subj":Xi.default.string,type:Xi.default.shape({iconType:Xi.default.oneOfType([Xi.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,Xi.default.string.isRequired,Xi.default.elementType.isRequired]).isRequired,color:Xi.default.oneOfType([Xi.default.string.isRequired,Xi.default.oneOf(["tint0","tint1","tint2","tint3","tint4","tint5","tint6","tint7","tint8","tint9","tint10"]).isRequired]).isRequired}).isRequired,label:Xi.default.string.isRequired,description:Xi.default.string,labelWidth:Xi.default.oneOf(["20","30","40","50","60","70","80","90",20,30,40,50,60,70,80,90]),truncate:Xi.default.bool,onClick:Xi.default.func};var Rp=P(L()),tn=P(dt()),hye=P(Ct());var hIt=["onItemClick","onBlur","onFocus","onInput","onSearch","status","append","tooltipContent","suggestions","id","aria-label","aria-labelledby","isVirtualized","fullWidth","maxHeight"];function dye(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function eY(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function xIt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var hy={unsaved:{icon:"dot",color:"accent"},saved:{icon:"checkInCircleFilled",color:"success"},unchanged:{icon:"",color:"success"},loading:{}},_It=["label","type","description","labelDisplay","labelWidth","descriptionDisplay"],DA=function(t){var n=t.onItemClick,r=t.onBlur,o=t.onFocus,i=t.onInput,u=t.onSearch,f=t.status,h=f===void 0?"unchanged":f,y=t.append,O=t.tooltipContent,S=t.suggestions,I=t.id,A=t["aria-label"],C=t["aria-labelledby"],M=t.isVirtualized,W=M===void 0?!1:M,R=t.fullWidth,B=R===void 0?!0:R,Y=t.maxHeight,X=Y===void 0?"60vh":Y,ae=OIt(t,hIt),Z=(0,Rp.useState)(null),K=LA(Z,2),de=K[0],se=K[1],Se=(0,Rp.useState)(!1),Oe=LA(Se,2),be=Oe[0],Ue=Oe[1],We=function(){return Ue(!0)},Ge=function(){return Ue(!1)},Qe=function(hn){o?.(hn),We()},ot=function(hn){r?.(hn),de!=null&&de.contains(hn.relatedTarget)||Ge()},at=function(hn){i?.(hn.target),We()},ht=function(hn){u?.(hn)},Mt=Gs({prefix:I}),Ze="",Kt="";hy[h]&&(Ze=hy[h].icon||"",Kt=hy[h].color||"");var it=[],xt=To(["euiSuggest.stateSavedTooltip","euiSuggest.stateUnsavedTooltip"],["Saved.","Changes have not been saved."]),wt=LA(xt,2),Ht=wt[0],sr=wt[1];hy.saved.tooltip=Ht,hy.unsaved.tooltip=sr;var Er=(h==="saved"||h==="unsaved")&&a(ga,{position:"left",content:O||hy[h].tooltip},a(ar,{className:"euiSuggestInput__statusIcon",color:Kt,type:Ze}));Er&&it.push(Er),y&&it.push(y);var _r=To(["euiSuggest.stateLoading","euiSuggest.stateSaved","euiSuggest.stateUnsaved","euiSuggest.stateUnchanged"],["State: loading.","State: saved.","State: unsaved.","State: unchanged."]),pn=LA(_r,4),Dr=pn[0],Bt=pn[1],Dn=pn[2],fn=pn[3],ro={loading:Dr,saved:Bt,unsaved:Dn,unchanged:fn},Gn=ro[h],co=S.map(function(Vr){var hn={},zo={label:Vr.label};return Object.keys(Vr).forEach(function(gn){_It.includes(gn)?hn[gn]=Vr[gn]:zo[gn]=Vr[gn]}),eY(eY({},zo),{},{data:hn,className:(0,hye.default)(Vr.className,"euiSuggestItemOption"),truncate:W?!0:Vr.truncate})}),So=(0,Rp.useCallback)(function(Vr){return a(ZK,Vr)},[]),En=(0,Rp.useCallback)(function(Vr){if(n){var hn=Vr.findIndex(function(gn){return gn.checked==="on"});if(hn>=0){var zo=S[hn];n(zo)}}},[n,S]);return a(Rp.default.Fragment,null,a(wc,{singleSelection:!0,height:W?void 0:"full",options:co,renderOption:So,onChange:En,listProps:{bordered:!1,showIcons:!1,onFocusBadge:!1,paddingSize:"none",textWrap:W?"truncate":"wrap",isVirtualized:W},searchable:!0,searchProps:eY({id:I,append:it.length?it:void 0,fullWidth:B,isLoading:h==="loading",onFocus:Qe,onBlur:ot,onInput:at,onChange:ht,"aria-describedby":Mt,"aria-label":A,"aria-labelledby":C},ae)},function(Vr,hn){return a(v_,{disableFocusTrap:!0,input:a(Rp.default.Fragment,null,hn),isOpen:be,panelPaddingSize:"none",fullWidth:B,closePopover:Ge,panelRef:se,panelProps:{"aria-live":void 0,"aria-modal":!1,role:void 0}},a("div",{style:{maxHeight:X},className:"eui-yScroll"},Vr))}),a(qn,null,a("p",{id:Mt},Gn)))};DA.propTypes={className:tn.default.string,"aria-label":tn.default.oneOfType([tn.default.string,tn.default.oneOfType([tn.default.string.isRequired,tn.default.string])]),"data-test-subj":tn.default.string,suggestions:tn.default.arrayOf(tn.default.shape({className:tn.default.string,"aria-label":tn.default.string,"data-test-subj":tn.default.string,type:tn.default.shape({iconType:tn.default.oneOfType([tn.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,tn.default.string.isRequired,tn.default.elementType.isRequired]).isRequired,color:tn.default.oneOfType([tn.default.string.isRequired,tn.default.oneOf(["tint0","tint1","tint2","tint3","tint4","tint5","tint6","tint7","tint8","tint9","tint10"]).isRequired]).isRequired}).isRequired,label:tn.default.string.isRequired,description:tn.default.string,labelWidth:tn.default.oneOf(["20","30","40","50","60","70","80","90",20,30,40,50,60,70,80,90]),truncate:tn.default.bool}).isRequired).isRequired,tooltipContent:tn.default.string,status:tn.default.any,append:tn.default.any,onItemClick:tn.default.func,onInput:tn.default.func,onSearch:tn.default.func,isVirtualized:tn.default.bool,maxHeight:tn.default.any,"aria-labelledby":tn.default.oneOfType([tn.default.string,tn.default.string.isRequired])};var cbr=P(L()),cm=P(dt()),gye=P(Ct());var SIt=["children","className","compressed","tableLayout","responsive"];function tY(){return tY=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function IIt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var kIt={fixed:null,auto:"euiTable--auto"},NA=function(t){var n=t.children,r=t.className,o=t.compressed,i=t.tableLayout,u=i===void 0?"fixed":i,f=t.responsive,h=f===void 0?!0:f,y=jIt(t,SIt),O=(0,gye.default)("euiTable",r,{"euiTable--compressed":o,"euiTable--responsive":h},kIt[u]);return a("table",tY({tabIndex:-1,className:O},y),n)};NA.propTypes={compressed:cm.default.bool,responsive:cm.default.bool,tableLayout:cm.default.oneOf(["fixed","auto"]),className:cm.default.string,"aria-label":cm.default.string,"data-test-subj":cm.default.string};var mbr=P(L()),U_=P(dt());var PIt=["children","className","bodyRef"];function rY(){return rY=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function CIt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var gy=function(t){var n=t.children,r=t.className,o=t.bodyRef,i=EIt(t,PIt);return a("tbody",rY({className:r,ref:o},i),n)};gy.propTypes={className:U_.default.string,"aria-label":U_.default.string,"data-test-subj":U_.default.string,bodyRef:U_.default.any};var ybr=P(L()),FA=P(dt());var AIt=["children","className"];function nY(){return nY=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function TIt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var WA=function(t){var n=t.children,r=t.className,o=MIt(t,AIt);return a("tfoot",nY({className:r},o),a("tr",null,n))};WA.propTypes={className:FA.default.string,"aria-label":FA.default.string,"data-test-subj":FA.default.string};var _br=P(L()),Ud=P(dt()),iY=P(Ct());var RIt=["width"];function vye(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function yye(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function DIt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var NIt="Two `width` properties were provided. Provide only one of `style.width` or `width` to avoid conflicts.",qd=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=t.width,o=LIt(t,RIt),i=n;return i!=null&&(typeof i=="number"||!isNaN(Number(i)))&&(i="".concat(i,"px")),r&&i&&console.warn(NIt),yye(yye({},o),{},{width:i||r})};var FIt=["children","align","className","width","style"];function oY(){return oY=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function BIt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var vy=function(t){var n=t.children,r=t.align,o=r===void 0?fs:r,i=t.className,u=t.width,f=t.style,h=WIt(t,FIt),y=(0,iY.default)("euiTableFooterCell",i),O=(0,iY.default)("euiTableCellContent",i,{"euiTableCellContent--alignRight":o===Xs,"euiTableCellContent--alignCenter":o===bp}),S=qd(f,u);return a("td",oY({className:y,style:S},h),a("div",{className:O},a("span",{className:"euiTableCellContent__text"},n)))};vy.propTypes={className:Ud.default.string,"aria-label":Ud.default.string,"data-test-subj":Ud.default.string,align:Ud.default.oneOf(["left","right","center"]),width:Ud.default.oneOfType([Ud.default.string.isRequired,Ud.default.number.isRequired])};var Ebr=P(L()),yy=P(dt());var HIt=["children","className","wrapWithTableRow"];function aY(){return aY=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function qIt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var BA=function(t){var n=t.children,r=t.className,o=t.wrapWithTableRow,i=o===void 0?!0:o,u=VIt(t,HIt);return a("thead",aY({className:r},u),i?a("tr",null,n):n)};BA.propTypes={className:yy.default.string,"aria-label":yy.default.string,"data-test-subj":yy.default.string,children:yy.default.node,wrapWithTableRow:yy.default.bool};var Tbr=P(L()),Ki=P(dt()),HA=P(Ct());var UIt=["children","align","onSort","isSorted","isSortAscending","className","scope","mobileOptions","width","style","readOnly","description"];function VA(){return VA=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function JIt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var bye=function(t){var n=t.className,r=t.description,o=t.children,i=t.isSorted,u=t.isSortAscending,f=t.showSortMsg;return a("span",{className:n},a(tu,null,function(h,y){return a(At,{token:"euiTableHeaderCell.titleTextWithDesc",default:"{innerText}; {description}",values:{innerText:y,description:r}},function(O){return a("span",{title:r?O:y,ref:h,className:"euiTableCellContent__text"},o)})}),r&&a(qn,null,a("span",null,r)),f&&i&&a(ar,{className:"euiTableSortIcon",type:u?"sortUp":"sortDown",size:"m"}))},by=function(t){var n=t.children,r=t.align,o=r===void 0?fs:r,i=t.onSort,u=t.isSorted,f=t.isSortAscending,h=t.className,y=t.scope,O=t.mobileOptions,S=O===void 0?{show:!0}:O,I=t.width,A=t.style,C=t.readOnly,M=t.description,W=$It(t,UIt),R=(0,HA.default)("euiTableHeaderCell",h,{"euiTableHeaderCell--hideForDesktop":S.only,"euiTableHeaderCell--hideForMobile":!S.show}),B=(0,HA.default)("euiTableCellContent",h,{"euiTableCellContent--alignRight":o===Xs,"euiTableCellContent--alignCenter":o===bp}),Y=qd(A,I),X=n?"th":"td",ae=X==="th"?y??"col":void 0;if(i||u){var Z=(0,HA.default)("euiTableHeaderButton",{"euiTableHeaderButton-isSorted":u}),K="none";u&&(K=f?"ascending":"descending");var de=a(bye,{className:B,description:M,showSortMsg:!0,children:n,isSorted:u,isSortAscending:f});return a(X,VA({className:R,scope:ae,role:"columnheader","aria-sort":K,"aria-live":"polite",style:Y},W),i&&!C?a("button",{type:"button",className:Z,onClick:i,"data-test-subj":"tableHeaderSortButton"},de):de)}return a(X,VA({className:R,scope:ae,role:"columnheader",style:Y},W),a(bye,{className:B,description:M,showSortMsg:!1,children:n,isSorted:u,isSortAscending:f}))};by.propTypes={className:Ki.default.string,"aria-label":Ki.default.string,"data-test-subj":Ki.default.string,align:Ki.default.oneOf(["left","right","center"]),isSortAscending:Ki.default.bool,isSorted:Ki.default.bool,mobileOptions:Ki.default.shape({show:Ki.default.bool,only:Ki.default.bool}),onSort:Ki.default.func,scope:Ki.default.oneOf(["col","row","colgroup","rowgroup"]),width:Ki.default.oneOfType([Ki.default.string.isRequired,Ki.default.number.isRequired]),description:Ki.default.string,readOnly:Ki.default.bool};var Vbr=P(L()),$d=P(dt()),wye=P(Ct());var GIt=["children","className","scope","style","width"];function lY(){return lY=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function KIt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var qA=function(t){var n=t.children,r=t.className,o=t.scope,i=o===void 0?"col":o,u=t.style,f=t.width,h=XIt(t,GIt),y=(0,wye.default)("euiTableHeaderCellCheckbox",r),O=qd(u,f);return a("th",lY({className:y,scope:i,style:O},h),a("div",{className:"euiTableCellContent"},n))};qA.propTypes={className:$d.default.string,"aria-label":$d.default.string,"data-test-subj":$d.default.string,width:$d.default.oneOfType([$d.default.string.isRequired,$d.default.number.isRequired]),scope:$d.default.oneOf(["col","row","colgroup","rowgroup"])};var Gbr=P(L()),UA=P(dt()),Oye=P(Ct());var YIt=["children","className"];function sY(){return sY=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ZIt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var $A=function(t){var n=t.children,r=t.className,o=QIt(t,YIt),i=(0,Oye.default)("euiTableHeaderMobile",r);return a("div",sY({className:i},o),n)};$A.propTypes={className:UA.default.string,"aria-label":UA.default.string,"data-test-subj":UA.default.string};var Sye=P(L()),Oc=P(dt()),jye=P(Ct());var Qbr=P(L()),Jd=P(dt()),xye=P(Ct());var ekt=["children","onSort","isSorted","isSortAscending","className","ariaLabel"];function uY(){return uY=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function rkt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var cY=function(t){var n=t.children,r=t.onSort,o=t.isSorted,i=t.isSortAscending,u=t.className,f=t.ariaLabel,h=tkt(t,ekt),y="empty";o&&(y=i?"sortUp":"sortDown");var O=(0,xye.default)("euiTableSortMobileItem",u,{"euiTableSortMobileItem-isSorted":o}),S=f||n,I="Sort ".concat(S," ").concat(i?"descending":"ascending");return a(lu,uY({className:O,icon:y,onClick:r,"aria-label":I},h),n)};cY.propTypes={onSort:Jd.default.func,isSorted:Jd.default.bool,isSortAscending:Jd.default.bool,ariaLabel:Jd.default.string,className:Jd.default.string,"aria-label":Jd.default.string,"data-test-subj":Jd.default.string};function JA(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?JA=function(n){return typeof n}:JA=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},JA(e)}var nkt=["className","anchorPosition","items"];function fY(){return fY=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ikt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function akt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _ye(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function XA(e){return XA=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},XA(e)}function pY(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var KA=function(e){skt(n,e);var t=ukt(n);function n(){var r;akt(this,n);for(var o=arguments.length,i=new Array(o),u=0;u=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function mkt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var pm=function(t){var n=t.children,r=t.className,o=t.isSelected,i=t.isSelectable,u=t.hasActions,f=t.isExpandedRow,h=t.isExpandable,y=t.onClick,O=dkt(t,fkt),S=(0,Iye.default)("euiTableRow",r,{"euiTableRow-isSelectable":i,"euiTableRow-isSelected":o,"euiTableRow-hasActions":u,"euiTableRow-isExpandedRow":f,"euiTableRow-isExpandable":h,"euiTableRow-isClickable":y});if(!y)return a("tr",YA({className:S},O),n);var I=function(M){M.key===On.SPACE&&M.preventDefault()},A=function(M){(M.key===On.ENTER||M.key===On.SPACE)&&y(M)};return a("tr",YA({className:S,onClick:y,onKeyDown:I,onKeyUp:A,tabIndex:0},O),n)};pm.propTypes={className:xc.default.string,"aria-label":xc.default.string,"data-test-subj":xc.default.string,isSelectable:xc.default.bool,isSelected:xc.default.bool,hasActions:xc.default.bool,isExpandable:xc.default.bool,isExpandedRow:xc.default.bool,onClick:xc.default.any};var Oy=P(L()),to=P(dt()),wy=P(Ct());var hkt=["align","children","className","truncateText","setScopeRow","showOnHover","textOnly","hasActions","isExpander","style","width","valign","mobileOptions"];function QA(){return QA=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ykt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Gd=function(t){var n,r,o=t.align,i=o===void 0?fs:o,u=t.children,f=t.className,h=t.truncateText,y=t.setScopeRow,O=t.showOnHover,S=t.textOnly,I=S===void 0?!0:S,A=t.hasActions,C=t.isExpander,M=t.style,W=t.width,R=t.valign,B=R===void 0?"middle":R,Y=t.mobileOptions,X=Y===void 0?{show:!0}:Y,ae=vkt(t,hkt),Z=(0,wy.default)("euiTableRowCell",Pye({"euiTableRowCell--hasActions":A,"euiTableRowCell--isExpander":C,"euiTableRowCell--hideForDesktop":X.only,"euiTableRowCell--enlargeForMobile":X.enlarge},"euiTableRowCell--".concat(B),B)),K=(0,wy.default)("euiTableCellContent",f,{"euiTableCellContent--alignRight":i===Xs,"euiTableCellContent--alignCenter":i===bp,"euiTableCellContent--showOnHover":O,"euiTableCellContent--truncateText":h,"euiTableCellContent--overflowingContent":I!==!0}),de=(0,wy.default)("euiTableCellContent",f,{"euiTableCellContent--alignRight":X.align===Xs||i===Xs,"euiTableCellContent--alignCenter":X.align===bp||i===bp,"euiTableCellContent--showOnHover":(n=X.showOnHover)!==null&&n!==void 0?n:O,"euiTableCellContent--truncateText":(r=X.truncateText)!==null&&r!==void 0?r:h,"euiTableCellContent--overflowingContent":X.textOnly!==!0||I!==!0}),se=(0,wy.default)({euiTableCellContent__text:I===!0,euiTableCellContent__hoverItem:O}),Se=s5(["xs","s"])&&X.width?X.width:W,Oe=qd(M,Se);function be(at){var ht=at;return I===!0?ht=a("span",{className:se},at):Oy.default.isValidElement(at)&&(ht=Oy.default.Children.map(at,function(Mt){return Oy.default.cloneElement(Mt,{className:(0,wy.default)(Mt.props.className,se)})})),ht}var Ue=be(u),We="euiTableRowCell--hideForMobile",Ge="euiTableRowCell--hideForDesktop",Qe=y?"th":"td",ot=gkt({scope:y?"row":void 0,style:Oe},ae);return X.show===!1?a(Qe,QA({className:"".concat(Z," ").concat(We)},ot),a("div",{className:K},Ue)):a(Qe,QA({className:Z},ot),X.header&&a("div",{className:"euiTableRowCell__mobileHeader ".concat(Ge)},X.header),X.render?a(Oy.Fragment,null,a("div",{className:"".concat(de," ").concat(Ge)},be(X.render)),a("div",{className:"".concat(K," ").concat(We)},Ue)):a("div",{className:K},Ue))};Gd.propTypes={className:to.default.string,"aria-label":to.default.string,"data-test-subj":to.default.string,valign:to.default.any,setScopeRow:to.default.bool,hasActions:to.default.bool,isExpander:to.default.bool,mobileOptions:to.default.shape({show:to.default.bool,only:to.default.bool,render:to.default.node,header:to.default.oneOfType([to.default.node.isRequired,to.default.bool.isRequired]),enlarge:to.default.bool,width:to.default.any,align:to.default.oneOf(["left","right","center"]),showOnHover:to.default.bool,textOnly:to.default.bool,truncateText:to.default.bool}),align:to.default.oneOf(["left","right","center"]),showOnHover:to.default.bool,textOnly:to.default.bool,truncateText:to.default.bool,width:to.default.any};var w3r=P(L()),ZA=P(dt()),Eye=P(Ct());var bkt=["children","className"];function mY(){return mY=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Okt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var eM=function(t){var n=t.children,r=t.className,o=wkt(t,bkt),i=(0,Eye.default)("euiTableRowCellCheckbox",r);return a("td",mY({className:i},o),a("div",{className:"euiTableCellContent"},n))};eM.propTypes={className:ZA.default.string,"aria-label":ZA.default.string,"data-test-subj":ZA.default.string};var uM=P(L()),$e=P(dt()),$ye=P(Ct());var Aye=P(L()),Pr=P(dt());function tM(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?tM=function(n){return typeof n}:tM=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},tM(e)}function xkt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Cye(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function rM(e){return rM=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},rM(e)}function fm(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Pkt(e){return e.hasOwnProperty("render")}var gY=function(e){Skt(n,e);var t=jkt(n);function n(){var r;xkt(this,n);for(var o=arguments.length,i=new Array(o),u=0;u"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function iM(e){return iM=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},iM(e)}function nM(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var yY=function(e){Akt(n,e);var t=Mkt(n);function n(r){var o;return Ekt(this,n),o=t.call(this,r),nM($_(o),"mounted",void 0),nM($_(o),"onFocus",function(){o.mounted&&o.setState({hasFocus:!0})}),nM($_(o),"onBlur",function(){o.mounted&&o.setState({hasFocus:!1})}),nM($_(o),"hasFocus",function(){return o.state.hasFocus}),o.state={hasFocus:!1},o.mounted=!1,o}return Ckt(n,[{key:"componentDidMount",value:function(){this.mounted=!0}},{key:"componentWillUnmount",value:function(){this.mounted=!1}},{key:"render",value:function(){var o=this.props,i=o.action,u=o.enabled,f=o.item,h=o.className,y=i.render(f,u),O=(0,aM.cloneElement)(y,{onFocus:this.onFocus,onBlur:this.onBlur}),S=this.hasFocus()?{opacity:1}:void 0;return a("div",{style:S,className:h},O)}}]),n}(aM.Component);yY.propTypes={action:xy.default.any.isRequired,enabled:xy.default.bool.isRequired,item:xy.default.any.isRequired,className:xy.default.string.isRequired,index:xy.default.number};var zye=function(t){return t.hasOwnProperty("render")};var Nye=function(t){var n=t.actions,r=t.itemId,o=t.item,i=t.actionEnabled,u=t.className,f=n.length>2;return a(Lye.default.Fragment,null,n.reduce(function(h,y,O){var S=y.available?y.available(o):!0;if(!S)return h;var I=i(y),A="item_action_".concat(r,"_").concat(O),C=(0,Dye.default)(u,{expandedItemActions__completelyHide:f&&O<2});return zye(y)?h.push(a(yY,{key:A,className:C,index:O,action:y,enabled:I,item:o})):h.push(a(Tye,{key:A,className:C,action:y,enabled:I,item:o})),h},[]))};var Fye=P(L());var zkt={pageSizeOptions:[10,25,50]},Wye=function(t){var n=t.pagination,r=t.onPageSizeChange,o=t.onPageChange,i=t["aria-controls"],u=t["aria-label"],f=n.pageSizeOptions?n.pageSizeOptions:zkt.pageSizeOptions,h=n.pageSize?Math.ceil(n.totalItemCount/n.pageSize):1;return(0,Fye.useEffect)(function(){he.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Vkt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function Hye(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function cl(e){for(var t=1;t"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function sM(e){return sM=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},sM(e)}function bs(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var OY={auto:{align:fs,render:function(t){return SP(t)}},string:{align:fs,render:function(t){return Pv(t)}},number:{align:Xs,render:function(t){return kv(t)}},boolean:{align:fs,render:function(t){return jv(t)}},date:{align:fs,render:function(t){return Iv(t)}}},qye=Object.keys(OY);function _y(e,t){if(t)return jd(t)?t(e):e[t]}function Kkt(e,t){return t?jd(t)?t(e):t:{}}function Ykt(e,t,n){return n?jd(n)?n(e,t):n:{}}function Qkt(e,t){var n=t.items,r=t.pagination,o=e,i=o.footer;if(i)return jd(i)?i({items:n,pagination:r}):i}function Uye(e){return e.hasOwnProperty("pagination")&&!!e.pagination}var mm=function(e){$kt(n,e);var t=Jkt(n);function n(r){var o;return qkt(this,n),o=t.call(this,r),bs(hu(o),"cleanups",[]),bs(hu(o),"tbody",null),bs(hu(o),"setTbody",function(i){o.removeLoadingListeners(),o.tbody=i,o.props.loading===!0&&i&&o.addLoadingListeners(i)}),bs(hu(o),"addLoadingListeners",function(i){var u=function(h){h.stopPropagation(),h.preventDefault()};["mousedown","mouseup","mouseover","mouseout","mouseenter","mouseleave","click","dblclick","keydown","keyup","keypress"].forEach(function(f){i.addEventListener(f,u,!0),o.cleanups.push(function(){i.removeEventListener(f,u,!0)})})}),bs(hu(o),"removeLoadingListeners",function(){o.cleanups.forEach(function(i){return i()}),o.cleanups.length=0}),bs(hu(o),"tableId",Lr("__table")()),bs(hu(o),"selectAllIdGenerator",Lr("_selection_column-checkbox")),bs(hu(o),"renderSelectAll",function(i){var u=o.props,f=u.items,h=u.selection;if(h){var y=f.filter(function(A){return!h.selectable||h.selectable(A)}),O=o.state.selection&&y.length>0&&o.state.selection.length===y.length,S=y.length===0,I=function(C){C.target.checked?o.changeSelection(y):o.changeSelection([])};return a(At,{token:"euiBasicTable.selectAllRows",default:"Select all rows"},function(A){return a(Zv,{id:o.selectAllIdGenerator(i?"mobile":"desktop"),type:i?void 0:"inList",checked:O,disabled:S,onChange:I,"data-test-subj":i?void 0:"checkboxSelectAll","aria-label":A,label:i?A:null})})}}),bs(hu(o),"resolveColumnSortDirection",function(i){var u=o.props.sorting,f=i,h=f.sortable,y=f.field,O=f.name;if(!(!u||!u.sort||!h)&&(u.sort.field===y||u.sort.field===O))return u.sort.direction}),bs(hu(o),"resolveColumnOnSort",function(i){var u=o.props.sorting,f=i,h=f.sortable,y=f.name;if(!(!u||!h)){if(!o.props.onChange)throw new Error("BasicTable is configured to be sortable on column [".concat(y,`] but - [onChange] is not configured. This callback must be implemented to handle the sort requests`));return function(){return o.onColumnSortChange(i)}}}),o.state={initialSelectionRendered:!1,selection:[]},o}return Ukt(n,[{key:"componentDidMount",value:function(){this.props.loading&&this.tbody&&this.addLoadingListeners(this.tbody),this.getInitialSelection()}},{key:"componentDidUpdate",value:function(o){o.loading!==this.props.loading&&(this.props.loading&&this.tbody?this.addLoadingListeners(this.tbody):this.removeLoadingListeners()),this.getInitialSelection()}},{key:"componentWillUnmount",value:function(){this.removeLoadingListeners()}},{key:"getInitialSelection",value:function(){this.props.selection&&this.props.selection.initialSelected&&!this.state.initialSelectionRendered&&this.props.items.length>0&&(this.setState({selection:this.props.selection.initialSelected}),this.setState({initialSelectionRendered:!0}))}},{key:"setSelection",value:function(o){this.changeSelection(o)}},{key:"buildCriteria",value:function(o){var i={};return Uye(o)&&(i.page={index:o.pagination.pageIndex,size:o.pagination.pageSize}),o.sorting&&(i.sort=o.sorting.sort),i}},{key:"changeSelection",value:function(o){this.props.selection&&(this.setState({selection:o}),this.props.selection.onSelectionChange&&this.props.selection.onSelectionChange(o))}},{key:"clearSelection",value:function(){this.changeSelection([])}},{key:"onPageSizeChange",value:function(o){this.clearSelection();var i=this.buildCriteria(this.props),u=cl(cl({},i),{},{page:{index:0,size:o}});this.props.onChange&&this.props.onChange(u)}},{key:"onPageChange",value:function(o){this.clearSelection();var i=this.buildCriteria(this.props),u=cl(cl({},i),{},{page:cl(cl({},i.page),{},{index:o})});this.props.onChange&&this.props.onChange(u)}},{key:"onColumnSortChange",value:function(o){this.clearSelection();var i=this.buildCriteria(this.props),u=Id.ASC;i&&i.sort&&(i.sort.field===o.field||i.sort.field===o.name)&&(u=Id.reverse(i.sort.direction));var f=cl(cl({},i),{},{page:i.page?{index:0,size:i.page.size}:void 0,sort:{field:o.field||o.name,direction:u}});this.props.onChange&&this.props.onChange(f)}},{key:"render",value:function(){var o=this.props,i=o.className,u=o.loading,f=o.items,h=o.itemId,y=o.columns,O=o.pagination,S=o.sorting,I=o.selection,A=o.onChange,C=o.error,M=o.noItemsMessage,W=o.compressed,R=o.itemIdToExpandedRowMap,B=o.responsive,Y=o.isSelectable,X=o.isExpandable,ae=o.hasActions,Z=o.rowProps,K=o.cellProps,de=o.tableCaption,se=o.rowHeader,Se=o.tableLayout,Oe=Bye(o,Lkt),be=(0,$ye.default)("euiBasicTable",{"euiBasicTable-loading":u},i),Ue=this.renderTable(),We=this.renderPaginationBar();return a("div",dm({className:be},Oe),Ue,We)}},{key:"renderTable",value:function(){var o=this.props,i=o.compressed,u=o.responsive,f=o.tableLayout,h=u?a($A,null,a(eo,{responsive:!1,justifyContent:"spaceBetween",alignItems:"baseline"},a(kt,{grow:!1},this.renderSelectAll(!0)),a(kt,{grow:!1},this.renderTableMobileSort()))):void 0,y=this.renderTableCaption(),O=this.renderTableHead(),S=this.renderTableBody(),I=this.renderTableFooter();return a("div",null,h,a(NA,{id:this.tableId,tableLayout:f,responsive:u,compressed:i},y,O,S,I))}},{key:"renderTableMobileSort",value:function(){var o=this,i=this.props,u=i.columns,f=i.sorting,h=[];return f?(u.forEach(function(y,O){var S,I;if(y.field&&f.sort&&f.enableAllColumns&&y.sortable==null&&(y=cl(cl({},y),{},{sortable:!0})),!(!y.sortable||((S=y)===null||S===void 0||(I=S.mobileOptions)===null||I===void 0?void 0:I.show)===!1)){var A=o.resolveColumnSortDirection(y);h.push({name:y.name,key:"_data_s_".concat(y.field,"_").concat(O),onSort:o.resolveColumnOnSort(y),isSorted:!!A,isSortAscending:A?Id.isAsc(A):void 0})}}),h.length?a(KA,{items:h}):null):null}},{key:"renderTableCaption",value:function(){var o=this.props,i=o.items,u=o.pagination,f=o.tableCaption,h=i.length,y=u?u.totalItemCount:h,O=u?u.pageIndex+1:1,S=u!=null&&u.pageSize?Math.ceil(u.totalItemCount/u.pageSize):1,I;return f?u?I=a(At,{token:"euiBasicTable.tableCaptionWithPagination",default:"{tableCaption}; Page {page} of {pageCount}.",values:{tableCaption:f,page:O,pageCount:S}}):I=f:u?u.totalItemCount>0?I=a(At,{token:"euiBasicTable.tableAutoCaptionWithPagination",default:"This table contains {itemCount} rows out of {totalItemCount} rows; Page {page} of {pageCount}.",values:{totalItemCount:y,itemCount:h,page:O,pageCount:S}}):I=a(At,{token:"euiBasicTable.tableSimpleAutoCaptionWithPagination",default:"This table contains {itemCount} rows; Page {page} of {pageCount}.",values:{itemCount:h,page:O,pageCount:S}}):I=a(At,{token:"euiBasicTable.tableAutoCaptionWithoutPagination",default:"This table contains {itemCount} rows.",values:{itemCount:h}}),a(qn,null,a("caption",{className:"euiTableCaption"},a(N_,null,I)))}},{key:"renderTableHead",value:function(){var o=this,i=this.props,u=i.columns,f=i.selection,h=[];return f&&h.push(a(qA,{key:"_selection_column_h"},this.renderSelectAll(!1))),u.forEach(function(y,O){var S=y,I=S.field,A=S.width,C=S.name,M=S.align,W=S.dataType,R=S.sortable,B=S.mobileOptions,Y=S.readOnly,X=S.description,ae=M||o.getAlignForDataType(W);if(y.actions){h.push(a(by,{key:"_actions_h_".concat(O),align:"right",width:A,description:X,mobileOptions:B},C));return}if(!y.field){var Z={};if(o.props.sorting&&typeof R=="function"){var K=o.resolveColumnSortDirection(y);Z.isSorted=!!K,Z.isSortAscending=K?Id.isAsc(K):void 0,Z.onSort=o.resolveColumnOnSort(y),Z.readOnly=o.props.sorting.readOnly||Y}h.push(a(by,dm({key:"_computed_column_h_".concat(O),align:ae,width:A,mobileOptions:B,"data-test-subj":"tableHeaderCell_".concat(typeof C=="string"?C:"","_").concat(O),description:X},Z),C));return}var de={};if(o.props.sorting){o.props.sorting.sort&&o.props.sorting.enableAllColumns&&y.sortable==null&&(y=cl(cl({},y),{},{sortable:!0}));var se=y,Se=se.sortable;if(Se){var Oe=o.resolveColumnSortDirection(y);de.isSorted=!!Oe,de.isSortAscending=Oe?Id.isAsc(Oe):void 0,de.onSort=o.resolveColumnOnSort(y),de.readOnly=o.props.sorting.readOnly||Y}}h.push(a(by,dm({key:"_data_h_".concat(I,"_").concat(O),align:ae,width:A,mobileOptions:B,"data-test-subj":"tableHeaderCell_".concat(I,"_").concat(O),description:X},de),C))}),a(BA,null,h)}},{key:"renderTableFooter",value:function(){var o=this.props,i=o.items,u=o.columns,f=o.pagination,h=o.selection,y=[],O=!1;return h&&y.push(a(vy,{key:"_selection_column_f"},void 0)),u.forEach(function(S){var I=Qkt(S,{items:i,pagination:f}),A=S,C=A.mobileOptions,M=A.field,W=A.align;C!=null&&C.only||(I?(y.push(a(vy,{key:"footer_".concat(M,"_").concat(y.length-1),align:W},I)),O=!0):y.push(a(vy,{key:"footer_empty_".concat(y.length-1),align:W},void 0)))}),y.length&&O?a(WA,null,y):null}},{key:"renderTableBody",value:function(){var o=this;if(this.props.error)return this.renderErrorBody(this.props.error);var i=this.props.items;if(i.length===0)return this.renderEmptyBody();var u=i.map(function(f,h){var y=Uye(o.props)&&o.props.pagination.pageSize>0?o.props.pagination.pageIndex*o.props.pagination.pageSize+h:h;return o.renderItemRow(f,y)});return a(gy,{bodyRef:this.setTbody},u)}},{key:"renderErrorBody",value:function(o){var i=this.props.columns.length+(this.props.selection?1:0);return a(gy,null,a(pm,null,a(Gd,{align:"center",colSpan:i,mobileOptions:{width:"100%"}},a(ar,{type:"minusInCircle",color:"danger"})," ",o)))}},{key:"renderEmptyBody",value:function(){var o=this.props,i=o.columns,u=o.selection,f=o.noItemsMessage,h=i.length+(u?1:0);return a(gy,null,a(pm,null,a(Gd,{align:"center",colSpan:h,mobileOptions:{width:"100%"}},f)))}},{key:"renderItemRow",value:function(o,i){var u=this,f=this.props,h=f.columns,y=f.selection,O=f.isSelectable,S=f.hasActions,I=f.rowHeader,A=f.itemIdToExpandedRowMap,C=A===void 0?{}:A,M=f.isExpandable,W=[],R=this.props.itemId,B=_y(o,R)!=null?_y(o,R):i,Y=y?this.state.selection&&!!this.state.selection.find(function(We){return _y(We,R)===B}):!1,X;y&&(W.push(this.renderItemSelectionCell(B,o,Y)),X=!0);var ae;h.forEach(function(We,Ge){if(We.actions)W.push(u.renderItemActionsCell(B,o,We,Ge)),ae=!0;else if(We.field){var Qe=We;W.push(u.renderItemFieldDataCell(B,o,We,Ge,Qe.field===I))}else W.push(u.renderItemComputedCell(B,o,We,Ge))});var Z=y?h.length+1:h.length,K=h.reduce(function(We,Ge){var Qe;return Ge!=null&&(Qe=Ge.mobileOptions)!==null&&Qe!==void 0&&Qe.only?We+1:We+0},0);Z=Z-K;var de=C.hasOwnProperty(B),se=de?"row_".concat(B,"_expansion"):void 0,Se=de?a(pm,{id:se,isExpandedRow:!0,isSelectable:O},a(Gd,{colSpan:Z,textOnly:!1},C[B])):void 0,Oe=this.props.rowProps,be=Kkt(o,Oe),Ue=a(pm,dm({"aria-owns":se,isSelectable:O??X,isSelected:Y,hasActions:S??ae,isExpandable:M},be),W);return a(uM.Fragment,{key:"row_".concat(B)},Ue,Se)}},{key:"renderItemSelectionCell",value:function(o,i,u){var f=this,h=this.props.selection,y="_selection_column_".concat(o),O=u,S=h.selectable&&!h.selectable(i),I=h.selectableMessage&&h.selectableMessage(!S,i),A=function(M){if(M.target.checked)f.changeSelection([].concat(Nkt(f.state.selection),[i]));else{var W=f.props.itemId;f.changeSelection(f.state.selection.reduce(function(R,B){return _y(B,W)!==o&&R.push(B),R},[]))}};return a(eM,{key:y},a(At,{token:"euiBasicTable.selectThisRow",default:"Select this row"},function(C){return a(Zv,{id:"".concat(f.tableId).concat(y,"-checkbox"),type:"inList",disabled:S,checked:O,onChange:A,title:I||C,"aria-label":I||C,"data-test-subj":"checkboxSelectRow-".concat(o)})}))}},{key:"renderItemActionsCell",value:function(o,i,u,f){var h=this,y=function(M){return h.state.selection.length===0&&(!M.enabled||M.enabled(i))},O=u.actions.filter(function(C){return!C.available||C.available(i)});if(O.length>2){var S=O.filter(function(C){return C.isPrimary});O=S.slice(0,2),O.push({name:"All actions",render:function(M){return a(gY,{actions:u.actions,itemId:o,item:M,actionEnabled:y})}})}var I=a(Nye,{actions:O,itemId:o,item:i,actionEnabled:y}),A="record_actions_".concat(o,"_").concat(f);return a(Gd,{showOnHover:!0,key:A,align:"right",textOnly:!1,hasActions:!0},I)}},{key:"renderItemFieldDataCell",value:function(o,i,u,f,h){var y=u.field,O=u.render,S=u.dataType,I="_data_column_".concat(y,"_").concat(o,"_").concat(f),A=O||this.getRendererForDataType(S),C=p5(i,y),M=A(C,i);return this.renderItemCell(i,u,I,M,h)}},{key:"renderItemComputedCell",value:function(o,i,u,f){var h=u.render,y="_computed_column_".concat(o,"_").concat(f),O=h||this.getRendererForDataType(),S=O(i);return this.renderItemCell(i,u,y,S,!1)}},{key:"renderItemCell",value:function(o,i,u,f,h){var y=i,O=y.align,S=y.render,I=y.dataType,A=y.isExpander,C=y.textOnly,M=y.name,W=y.field,R=y.description,B=y.sortable,Y=y.footer,X=y.mobileOptions,ae=Bye(y,Dkt),Z=O||this.getAlignForDataType(I),K=this.props.cellProps,de=Ykt(o,i,K);return a(Gd,dm({key:u,align:Z,isExpander:A,textOnly:C||!S,setScopeRow:h,mobileOptions:cl(cl({},X),{},{render:X&&X.render&&X.render(o),header:X&&X.header===!1?!1:M})},de,ae),f)}},{key:"getRendererForDataType",value:function(){var o=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"auto",i=OY[o];if(!i)throw new Error("Unknown dataType [".concat(o,"]. The supported data types are [").concat(qye.join(", "),"]"));return i.render}},{key:"getAlignForDataType",value:function(){var o=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"auto",i=OY[o];if(!i)throw new Error("Unknown dataType [".concat(o,"]. The supported data types are [").concat(qye.join(", "),"]"));return i.align}},{key:"renderPaginationBar",value:function(){var o=this,i=this.props,u=i.error,f=i.pagination,h=i.tableCaption,y=i.onChange;if(!u&&f&&f.totalItemCount>0){if(!y)throw new Error(`The Basic Table is configured with pagination but [onChange] is - not configured. This callback must be implemented to handle pagination changes`);return a(At,{token:"euiBasicTable.tablePagination",default:"Pagination for table: {tableCaption}",values:{tableCaption:h}},function(O){return a(Wye,{pagination:f,onPageSizeChange:o.onPageSizeChange.bind(o),onPageChange:o.onPageChange.bind(o),"aria-controls":o.tableId,"aria-label":O})})}}}],[{key:"getDerivedStateFromProps",value:function(o,i){if(!o.selection)return{selection:[]};var u=o.itemId,f=i.selection.filter(function(h){return o.items.findIndex(function(y){return _y(y,u)===_y(h,u)})!==-1});return f.length!==i.selection.length?(o.selection.onSelectionChange&&o.selection.onSelectionChange(f),{selection:f}):null}}]),n}(uM.Component);bs(mm,"defaultProps",{responsive:!0,tableLayout:"fixed",noItemsMessage:a(At,{token:"euiBasicTable.noItemsMessage",default:"No items found"})});mm.propTypes={className:$e.default.string,"aria-label":$e.default.string,"data-test-subj":$e.default.string,itemId:$e.default.oneOfType([$e.default.string.isRequired,$e.default.number.isRequired,$e.default.func.isRequired]),itemIdToExpandedRowMap:$e.default.shape({}),items:$e.default.arrayOf($e.default.any.isRequired),cellProps:$e.default.oneOfType([$e.default.any.isRequired,$e.default.func.isRequired]),columns:$e.default.arrayOf($e.default.oneOfType([$e.default.shape({field:$e.default.oneOfType([$e.default.any.isRequired,$e.default.any.isRequired]).isRequired,name:$e.default.node.isRequired,description:$e.default.string,dataType:$e.default.oneOf(["auto","string","number","boolean","date"]),width:$e.default.string,sortable:$e.default.oneOfType([$e.default.bool.isRequired,$e.default.func.isRequired]),isExpander:$e.default.bool,textOnly:$e.default.bool,align:$e.default.oneOf(["left","right","center"]),truncateText:$e.default.bool,mobileOptions:$e.default.shape({render:$e.default.func}),render:$e.default.func,footer:$e.default.oneOfType([$e.default.string.isRequired,$e.default.element.isRequired,$e.default.func.isRequired]),readOnly:$e.default.bool,className:$e.default.string,"aria-label":$e.default.string,"data-test-subj":$e.default.string}).isRequired,$e.default.shape({render:$e.default.func.isRequired,name:$e.default.node,description:$e.default.string,sortable:$e.default.func,width:$e.default.string,truncateText:$e.default.bool,isExpander:$e.default.bool,align:$e.default.oneOf(["left","right","center"]),readOnly:$e.default.bool,className:$e.default.string,"aria-label":$e.default.string,"data-test-subj":$e.default.string}).isRequired,$e.default.shape({actions:$e.default.arrayOf($e.default.oneOfType([$e.default.shape({type:$e.default.oneOfType([$e.default.oneOf(["button"]),$e.default.oneOf(["icon"]).isRequired]),color:$e.default.oneOfType([$e.default.oneOfType([$e.default.oneOf(["primary","danger","text","ghost","success","warning"]).isRequired,$e.default.func.isRequired]),$e.default.oneOfType([$e.default.oneOf(["primary","accent","success","warning","danger","ghost","text"]).isRequired,$e.default.func.isRequired])]),name:$e.default.oneOfType([$e.default.node.isRequired,$e.default.func.isRequired]).isRequired,description:$e.default.string.isRequired,onClick:$e.default.func,href:$e.default.string,target:$e.default.string,available:$e.default.func,enabled:$e.default.func,isPrimary:$e.default.bool,"data-test-subj":$e.default.string,icon:$e.default.oneOfType([$e.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,$e.default.func.isRequired])}).isRequired,$e.default.shape({render:$e.default.func.isRequired,available:$e.default.func,enabled:$e.default.func,isPrimary:$e.default.bool}).isRequired]).isRequired).isRequired,name:$e.default.node,description:$e.default.string,width:$e.default.string}).isRequired]).isRequired),error:$e.default.string,tableCaption:$e.default.string,rowHeader:$e.default.string,hasActions:$e.default.bool,isExpandable:$e.default.bool,isSelectable:$e.default.bool,loading:$e.default.bool,noItemsMessage:$e.default.node,onChange:$e.default.func,pagination:$e.default.oneOfType([$e.default.oneOf([void 0]),$e.default.shape({pageIndex:$e.default.number.isRequired,pageSize:$e.default.number.isRequired,totalItemCount:$e.default.number.isRequired,pageSizeOptions:$e.default.arrayOf($e.default.number.isRequired),showPerPageOptions:$e.default.bool})]),responsive:$e.default.bool,rowProps:$e.default.oneOfType([$e.default.any.isRequired,$e.default.func.isRequired]),selection:$e.default.shape({onSelectionChange:$e.default.func,selectable:$e.default.func,selectableMessage:$e.default.func,initialSelected:$e.default.arrayOf($e.default.any.isRequired)}),sorting:$e.default.shape({sort:$e.default.shape({field:$e.default.any.isRequired,direction:$e.default.oneOf(["asc","desc"]).isRequired}),allowNeutralSort:$e.default.bool,enableAllColumns:$e.default.bool,readOnly:$e.default.bool}),tableLayout:$e.default.oneOf(["fixed","auto"]),textOnly:$e.default.bool};var _c=function(){function e(){this.listeners=[]}var t=e.prototype;return t.subscribe=function(r){var o=this,i=r||function(){};return this.listeners.push(i),this.onSubscribe(),function(){o.listeners=o.listeners.filter(function(u){return u!==i}),o.onUnsubscribe()}},t.hasListeners=function(){return this.listeners.length>0},t.onSubscribe=function(){},t.onUnsubscribe=function(){},e}();var hm=typeof window>"u";function Go(){}function Gye(e,t){return typeof e=="function"?e(t):e}function G_(e){return typeof e=="number"&&e>=0&&e!==1/0}function J_(e){return Array.isArray(e)?e:[e]}function cM(e,t){return Math.max(e+(t||0)-Date.now(),0)}function Sy(e,t,n){return pM(e)?typeof t=="function"?yr({},n,{queryKey:e,queryFn:t}):yr({},t,{queryKey:e}):e}function Sc(e,t,n){return pM(e)?[yr({},t,{queryKey:e}),n]:[e||{},t]}function Zkt(e,t){if(e===!0&&t===!0||e==null&&t==null)return"all";if(e===!1&&t===!1)return"none";var n=e??!t;return n?"active":"inactive"}function _Y(e,t){var n=e.active,r=e.exact,o=e.fetching,i=e.inactive,u=e.predicate,f=e.queryKey,h=e.stale;if(pM(f)){if(r){if(t.queryHash!==X_(f,t.options))return!1}else if(!K_(t.queryKey,f))return!1}var y=Zkt(n,i);if(y==="none")return!1;if(y!=="all"){var O=t.isActive();if(y==="active"&&!O||y==="inactive"&&O)return!1}return!(typeof h=="boolean"&&t.isStale()!==h||typeof o=="boolean"&&t.isFetching()!==o||u&&!u(t))}function SY(e,t){var n=e.exact,r=e.fetching,o=e.predicate,i=e.mutationKey;if(pM(i)){if(!t.options.mutationKey)return!1;if(n){if(Kd(t.options.mutationKey)!==Kd(i))return!1}else if(!K_(t.options.mutationKey,i))return!1}return!(typeof r=="boolean"&&t.state.status==="loading"!==r||o&&!o(t))}function X_(e,t){var n=t?.queryKeyHashFn||Kd;return n(e)}function Kd(e){var t=J_(e);return ePt(t)}function ePt(e){return JSON.stringify(e,function(t,n){return xY(n)?Object.keys(n).sort().reduce(function(r,o){return r[o]=n[o],r},{}):n})}function K_(e,t){return Xye(J_(e),J_(t))}function Xye(e,t){return e===t?!0:typeof e!=typeof t?!1:e&&t&&typeof e=="object"&&typeof t=="object"?!Object.keys(t).some(function(n){return!Xye(e[n],t[n])}):!1}function jy(e,t){if(e===t)return e;var n=Array.isArray(e)&&Array.isArray(t);if(n||xY(e)&&xY(t)){for(var r=n?e.length:Object.keys(e).length,o=n?t:Object.keys(t),i=o.length,u=n?[]:{},f=0,h=0;h"u")return!0;var n=t.prototype;return!(!Jye(n)||!n.hasOwnProperty("isPrototypeOf"))}function Jye(e){return Object.prototype.toString.call(e)==="[object Object]"}function pM(e){return typeof e=="string"||Array.isArray(e)}function Yye(e){return new Promise(function(t){setTimeout(t,e)})}function jY(e){Promise.resolve().then(e).catch(function(t){return setTimeout(function(){throw t})})}function fM(){if(typeof AbortController=="function")return new AbortController}var tPt=function(e){Na(t,e);function t(){var r;return r=e.call(this)||this,r.setup=function(o){var i;if(!hm&&((i=window)!=null&&i.addEventListener)){var u=function(){return o()};return window.addEventListener("visibilitychange",u,!1),window.addEventListener("focus",u,!1),function(){window.removeEventListener("visibilitychange",u),window.removeEventListener("focus",u)}}},r}var n=t.prototype;return n.onSubscribe=function(){this.cleanup||this.setEventListener(this.setup)},n.onUnsubscribe=function(){if(!this.hasListeners()){var o;(o=this.cleanup)==null||o.call(this),this.cleanup=void 0}},n.setEventListener=function(o){var i,u=this;this.setup=o,(i=this.cleanup)==null||i.call(this),this.cleanup=o(function(f){typeof f=="boolean"?u.setFocused(f):u.onFocus()})},n.setFocused=function(o){this.focused=o,o&&this.onFocus()},n.onFocus=function(){this.listeners.forEach(function(o){o()})},n.isFocused=function(){return typeof this.focused=="boolean"?this.focused:typeof document>"u"?!0:[void 0,"visible","prerender"].includes(document.visibilityState)},t}(_c),Yd=new tPt;var rPt=function(e){Na(t,e);function t(){var r;return r=e.call(this)||this,r.setup=function(o){var i;if(!hm&&((i=window)!=null&&i.addEventListener)){var u=function(){return o()};return window.addEventListener("online",u,!1),window.addEventListener("offline",u,!1),function(){window.removeEventListener("online",u),window.removeEventListener("offline",u)}}},r}var n=t.prototype;return n.onSubscribe=function(){this.cleanup||this.setEventListener(this.setup)},n.onUnsubscribe=function(){if(!this.hasListeners()){var o;(o=this.cleanup)==null||o.call(this),this.cleanup=void 0}},n.setEventListener=function(o){var i,u=this;this.setup=o,(i=this.cleanup)==null||i.call(this),this.cleanup=o(function(f){typeof f=="boolean"?u.setOnline(f):u.onOnline()})},n.setOnline=function(o){this.online=o,o&&this.onOnline()},n.onOnline=function(){this.listeners.forEach(function(o){o()})},n.isOnline=function(){return typeof this.online=="boolean"?this.online:typeof navigator>"u"||typeof navigator.onLine>"u"?!0:navigator.onLine},t}(_c),Iy=new rPt;function nPt(e){return Math.min(1e3*Math.pow(2,e),3e4)}function Y_(e){return typeof e?.cancel=="function"}var Qye=function(t){this.revert=t?.revert,this.silent=t?.silent};function ky(e){return e instanceof Qye}var dM=function(t){var n=this,r=!1,o,i,u,f;this.abort=t.abort,this.cancel=function(I){return o?.(I)},this.cancelRetry=function(){r=!0},this.continueRetry=function(){r=!1},this.continue=function(){return i?.()},this.failureCount=0,this.isPaused=!1,this.isResolved=!1,this.isTransportCancelable=!1,this.promise=new Promise(function(I,A){u=I,f=A});var h=function(A){n.isResolved||(n.isResolved=!0,t.onSuccess==null||t.onSuccess(A),i?.(),u(A))},y=function(A){n.isResolved||(n.isResolved=!0,t.onError==null||t.onError(A),i?.(),f(A))},O=function(){return new Promise(function(A){i=A,n.isPaused=!0,t.onPause==null||t.onPause()}).then(function(){i=void 0,n.isPaused=!1,t.onContinue==null||t.onContinue()})},S=function I(){if(!n.isResolved){var A;try{A=t.fn()}catch(C){A=Promise.reject(C)}o=function(M){if(!n.isResolved&&(y(new Qye(M)),n.abort==null||n.abort(),Y_(A)))try{A.cancel()}catch{}},n.isTransportCancelable=Y_(A),Promise.resolve(A).then(h).catch(function(C){var M,W;if(!n.isResolved){var R=(M=t.retry)!=null?M:3,B=(W=t.retryDelay)!=null?W:nPt,Y=typeof B=="function"?B(n.failureCount,C):B,X=R===!0||typeof R=="number"&&n.failureCount"u"&&(f.exact=!0),this.queries.find(function(h){return _Y(f,h)})},n.findAll=function(o,i){var u=Sc(o,i),f=u[0];return Object.keys(f).length>0?this.queries.filter(function(h){return _Y(f,h)}):this.queries},n.notify=function(o){var i=this;In.batch(function(){i.listeners.forEach(function(u){u(o)})})},n.onFocus=function(){var o=this;In.batch(function(){o.queries.forEach(function(i){i.onFocus()})})},n.onOnline=function(){var o=this;In.batch(function(){o.queries.forEach(function(i){i.onOnline()})})},t}(_c);var r2e=function(){function e(n){this.options=yr({},n.defaultOptions,n.options),this.mutationId=n.mutationId,this.mutationCache=n.mutationCache,this.observers=[],this.state=n.state||iPt(),this.meta=n.meta}var t=e.prototype;return t.setState=function(r){this.dispatch({type:"setState",state:r})},t.addObserver=function(r){this.observers.indexOf(r)===-1&&this.observers.push(r)},t.removeObserver=function(r){this.observers=this.observers.filter(function(o){return o!==r})},t.cancel=function(){return this.retryer?(this.retryer.cancel(),this.retryer.promise.then(Go).catch(Go)):Promise.resolve()},t.continue=function(){return this.retryer?(this.retryer.continue(),this.retryer.promise):this.execute()},t.execute=function(){var r=this,o,i=this.state.status==="loading",u=Promise.resolve();return i||(this.dispatch({type:"loading",variables:this.options.variables}),u=u.then(function(){r.mutationCache.config.onMutate==null||r.mutationCache.config.onMutate(r.state.variables,r)}).then(function(){return r.options.onMutate==null?void 0:r.options.onMutate(r.state.variables)}).then(function(f){f!==r.state.context&&r.dispatch({type:"loading",context:f,variables:r.state.variables})})),u.then(function(){return r.executeMutation()}).then(function(f){o=f,r.mutationCache.config.onSuccess==null||r.mutationCache.config.onSuccess(o,r.state.variables,r.state.context,r)}).then(function(){return r.options.onSuccess==null?void 0:r.options.onSuccess(o,r.state.variables,r.state.context)}).then(function(){return r.options.onSettled==null?void 0:r.options.onSettled(o,null,r.state.variables,r.state.context)}).then(function(){return r.dispatch({type:"success",data:o}),o}).catch(function(f){return r.mutationCache.config.onError==null||r.mutationCache.config.onError(f,r.state.variables,r.state.context,r),gm().error(f),Promise.resolve().then(function(){return r.options.onError==null?void 0:r.options.onError(f,r.state.variables,r.state.context)}).then(function(){return r.options.onSettled==null?void 0:r.options.onSettled(void 0,f,r.state.variables,r.state.context)}).then(function(){throw r.dispatch({type:"error",error:f}),f})})},t.executeMutation=function(){var r=this,o;return this.retryer=new dM({fn:function(){return r.options.mutationFn?r.options.mutationFn(r.state.variables):Promise.reject("No mutationFn found")},onFail:function(){r.dispatch({type:"failed"})},onPause:function(){r.dispatch({type:"pause"})},onContinue:function(){r.dispatch({type:"continue"})},retry:(o=this.options.retry)!=null?o:0,retryDelay:this.options.retryDelay}),this.retryer.promise},t.dispatch=function(r){var o=this;this.state=aPt(this.state,r),In.batch(function(){o.observers.forEach(function(i){i.onMutationUpdate(r)}),o.mutationCache.notify(o)})},e}();function iPt(){return{context:void 0,data:void 0,error:null,failureCount:0,isPaused:!1,status:"idle",variables:void 0}}function aPt(e,t){switch(t.type){case"failed":return yr({},e,{failureCount:e.failureCount+1});case"pause":return yr({},e,{isPaused:!0});case"continue":return yr({},e,{isPaused:!1});case"loading":return yr({},e,{context:t.context,data:void 0,error:null,isPaused:!1,status:"loading",variables:t.variables});case"success":return yr({},e,{data:t.data,error:null,status:"success",isPaused:!1});case"error":return yr({},e,{data:void 0,error:t.error,failureCount:e.failureCount+1,isPaused:!1,status:"error"});case"setState":return yr({},e,t.state);default:return e}}var n2e=function(e){Na(t,e);function t(r){var o;return o=e.call(this)||this,o.config=r||{},o.mutations=[],o.mutationId=0,o}var n=t.prototype;return n.build=function(o,i,u){var f=new r2e({mutationCache:this,mutationId:++this.mutationId,options:o.defaultMutationOptions(i),state:u,defaultOptions:i.mutationKey?o.getMutationDefaults(i.mutationKey):void 0,meta:i.meta});return this.add(f),f},n.add=function(o){this.mutations.push(o),this.notify(o)},n.remove=function(o){this.mutations=this.mutations.filter(function(i){return i!==o}),o.cancel(),this.notify(o)},n.clear=function(){var o=this;In.batch(function(){o.mutations.forEach(function(i){o.remove(i)})})},n.getAll=function(){return this.mutations},n.find=function(o){return typeof o.exact>"u"&&(o.exact=!0),this.mutations.find(function(i){return SY(o,i)})},n.findAll=function(o){return this.mutations.filter(function(i){return SY(o,i)})},n.notify=function(o){var i=this;In.batch(function(){i.listeners.forEach(function(u){u(o)})})},n.onFocus=function(){this.resumePausedMutations()},n.onOnline=function(){this.resumePausedMutations()},n.resumePausedMutations=function(){var o=this.mutations.filter(function(i){return i.state.isPaused});return In.batch(function(){return o.reduce(function(i,u){return i.then(function(){return u.continue().catch(Go)})},Promise.resolve())})},t}(_c);function i2e(){return{onFetch:function(t){t.fetchFn=function(){var n,r,o,i,u,f,h=(n=t.fetchOptions)==null||(r=n.meta)==null?void 0:r.refetchPage,y=(o=t.fetchOptions)==null||(i=o.meta)==null?void 0:i.fetchMore,O=y?.pageParam,S=y?.direction==="forward",I=y?.direction==="backward",A=((u=t.state.data)==null?void 0:u.pages)||[],C=((f=t.state.data)==null?void 0:f.pageParams)||[],M=fM(),W=M?.signal,R=C,B=!1,Y=t.options.queryFn||function(){return Promise.reject("Missing queryFn")},X=function(We,Ge,Qe,ot){return R=ot?[Ge].concat(R):[].concat(R,[Ge]),ot?[Qe].concat(We):[].concat(We,[Qe])},ae=function(We,Ge,Qe,ot){if(B)return Promise.reject("Cancelled");if(typeof Qe>"u"&&!Ge&&We.length)return Promise.resolve(We);var at={queryKey:t.queryKey,signal:W,pageParam:Qe,meta:t.meta},ht=Y(at),Mt=Promise.resolve(ht).then(function(Kt){return X(We,Qe,Kt,ot)});if(Y_(ht)){var Ze=Mt;Ze.cancel=ht.cancel}return Mt},Z;if(!A.length)Z=ae([]);else if(S){var K=typeof O<"u",de=K?O:o2e(t.options,A);Z=ae(A,K,de)}else if(I){var se=typeof O<"u",Se=se?O:lPt(t.options,A);Z=ae(A,se,Se,!0)}else(function(){R=[];var Ue=typeof t.options.getNextPageParam>"u",We=h&&A[0]?h(A[0],0,A):!0;Z=We?ae([],Ue,C[0]):Promise.resolve(X([],C[0],A[0]));for(var Ge=function(at){Z=Z.then(function(ht){var Mt=h&&A[at]?h(A[at],at,A):!0;if(Mt){var Ze=Ue?C[at]:o2e(t.options,ht);return ae(ht,Ue,Ze)}return Promise.resolve(X(ht,C[at],A[at]))})},Qe=1;Qe"u"&&(O.revert=!0);var S=In.batch(function(){return u.queryCache.findAll(h).map(function(I){return I.cancel(O)})});return Promise.all(S).then(Go).catch(Go)},t.invalidateQueries=function(r,o,i){var u,f,h,y=this,O=Sc(r,o,i),S=O[0],I=O[1],A=yr({},S,{active:(u=(f=S.refetchActive)!=null?f:S.active)!=null?u:!0,inactive:(h=S.refetchInactive)!=null?h:!1});return In.batch(function(){return y.queryCache.findAll(S).forEach(function(C){C.invalidate()}),y.refetchQueries(A,I)})},t.refetchQueries=function(r,o,i){var u=this,f=Sc(r,o,i),h=f[0],y=f[1],O=In.batch(function(){return u.queryCache.findAll(h).map(function(I){return I.fetch(void 0,yr({},y,{meta:{refetchPage:h?.refetchPage}}))})}),S=Promise.all(O).then(Go);return y?.throwOnError||(S=S.catch(Go)),S},t.fetchQuery=function(r,o,i){var u=Sy(r,o,i),f=this.defaultQueryOptions(u);typeof f.retry>"u"&&(f.retry=!1);var h=this.queryCache.build(this,f);return h.isStaleByTime(f.staleTime)?h.fetch(f):Promise.resolve(h.state.data)},t.prefetchQuery=function(r,o,i){return this.fetchQuery(r,o,i).then(Go).catch(Go)},t.fetchInfiniteQuery=function(r,o,i){var u=Sy(r,o,i);return u.behavior=i2e(),this.fetchQuery(u)},t.prefetchInfiniteQuery=function(r,o,i){return this.fetchInfiniteQuery(r,o,i).then(Go).catch(Go)},t.cancelMutations=function(){var r=this,o=In.batch(function(){return r.mutationCache.getAll().map(function(i){return i.cancel()})});return Promise.all(o).then(Go).catch(Go)},t.resumePausedMutations=function(){return this.getMutationCache().resumePausedMutations()},t.executeMutation=function(r){return this.mutationCache.build(this,r).execute()},t.getQueryCache=function(){return this.queryCache},t.getMutationCache=function(){return this.mutationCache},t.getDefaultOptions=function(){return this.defaultOptions},t.setDefaultOptions=function(r){this.defaultOptions=r},t.setQueryDefaults=function(r,o){var i=this.queryDefaults.find(function(u){return Kd(r)===Kd(u.queryKey)});i?i.defaultOptions=o:this.queryDefaults.push({queryKey:r,defaultOptions:o})},t.getQueryDefaults=function(r){var o;return r?(o=this.queryDefaults.find(function(i){return K_(r,i.queryKey)}))==null?void 0:o.defaultOptions:void 0},t.setMutationDefaults=function(r,o){var i=this.mutationDefaults.find(function(u){return Kd(r)===Kd(u.mutationKey)});i?i.defaultOptions=o:this.mutationDefaults.push({mutationKey:r,defaultOptions:o})},t.getMutationDefaults=function(r){var o;return r?(o=this.mutationDefaults.find(function(i){return K_(r,i.mutationKey)}))==null?void 0:o.defaultOptions:void 0},t.defaultQueryOptions=function(r){if(r?._defaulted)return r;var o=yr({},this.defaultOptions.queries,this.getQueryDefaults(r?.queryKey),r,{_defaulted:!0});return!o.queryHash&&o.queryKey&&(o.queryHash=X_(o.queryKey,o)),o},t.defaultQueryObserverOptions=function(r){return this.defaultQueryOptions(r)},t.defaultMutationOptions=function(r){return r?._defaulted?r:yr({},this.defaultOptions.mutations,this.getMutationDefaults(r?.mutationKey),r,{_defaulted:!0})},t.clear=function(){this.queryCache.clear(),this.mutationCache.clear()},e}();var PY=function(e){Na(t,e);function t(r,o){var i;return i=e.call(this)||this,i.client=r,i.options=o,i.trackedProps=[],i.selectError=null,i.bindMethods(),i.setOptions(o),i}var n=t.prototype;return n.bindMethods=function(){this.remove=this.remove.bind(this),this.refetch=this.refetch.bind(this)},n.onSubscribe=function(){this.listeners.length===1&&(this.currentQuery.addObserver(this),a2e(this.currentQuery,this.options)&&this.executeFetch(),this.updateTimers())},n.onUnsubscribe=function(){this.listeners.length||this.destroy()},n.shouldFetchOnReconnect=function(){return kY(this.currentQuery,this.options,this.options.refetchOnReconnect)},n.shouldFetchOnWindowFocus=function(){return kY(this.currentQuery,this.options,this.options.refetchOnWindowFocus)},n.destroy=function(){this.listeners=[],this.clearTimers(),this.currentQuery.removeObserver(this)},n.setOptions=function(o,i){var u=this.options,f=this.currentQuery;if(this.options=this.client.defaultQueryObserverOptions(o),typeof this.options.enabled<"u"&&typeof this.options.enabled!="boolean")throw new Error("Expected enabled to be a boolean");this.options.queryKey||(this.options.queryKey=u.queryKey),this.updateQuery();var h=this.hasListeners();h&&l2e(this.currentQuery,f,this.options,u)&&this.executeFetch(),this.updateResult(i),h&&(this.currentQuery!==f||this.options.enabled!==u.enabled||this.options.staleTime!==u.staleTime)&&this.updateStaleTimeout();var y=this.computeRefetchInterval();h&&(this.currentQuery!==f||this.options.enabled!==u.enabled||y!==this.currentRefetchInterval)&&this.updateRefetchInterval(y)},n.getOptimisticResult=function(o){var i=this.client.defaultQueryObserverOptions(o),u=this.client.getQueryCache().build(this.client,i);return this.createResult(u,i)},n.getCurrentResult=function(){return this.currentResult},n.trackResult=function(o,i){var u=this,f={},h=function(O){u.trackedProps.includes(O)||u.trackedProps.push(O)};return Object.keys(o).forEach(function(y){Object.defineProperty(f,y,{configurable:!1,enumerable:!0,get:function(){return h(y),o[y]}})}),(i.useErrorBoundary||i.suspense)&&h("error"),f},n.getNextResult=function(o){var i=this;return new Promise(function(u,f){var h=i.subscribe(function(y){y.isFetching||(h(),y.isError&&o?.throwOnError?f(y.error):u(y))})})},n.getCurrentQuery=function(){return this.currentQuery},n.remove=function(){this.client.getQueryCache().remove(this.currentQuery)},n.refetch=function(o){return this.fetch(yr({},o,{meta:{refetchPage:o?.refetchPage}}))},n.fetchOptimistic=function(o){var i=this,u=this.client.defaultQueryObserverOptions(o),f=this.client.getQueryCache().build(this.client,u);return f.fetch().then(function(){return i.createResult(f,u)})},n.fetch=function(o){var i=this;return this.executeFetch(o).then(function(){return i.updateResult(),i.currentResult})},n.executeFetch=function(o){this.updateQuery();var i=this.currentQuery.fetch(this.options,o);return o?.throwOnError||(i=i.catch(Go)),i},n.updateStaleTimeout=function(){var o=this;if(this.clearStaleTimeout(),!(hm||this.currentResult.isStale||!G_(this.options.staleTime))){var i=cM(this.currentResult.dataUpdatedAt,this.options.staleTime),u=i+1;this.staleTimeoutId=setTimeout(function(){o.currentResult.isStale||o.updateResult()},u)}},n.computeRefetchInterval=function(){var o;return typeof this.options.refetchInterval=="function"?this.options.refetchInterval(this.currentResult.data,this.currentQuery):(o=this.options.refetchInterval)!=null?o:!1},n.updateRefetchInterval=function(o){var i=this;this.clearRefetchInterval(),this.currentRefetchInterval=o,!(hm||this.options.enabled===!1||!G_(this.currentRefetchInterval)||this.currentRefetchInterval===0)&&(this.refetchIntervalId=setInterval(function(){(i.options.refetchIntervalInBackground||Yd.isFocused())&&i.executeFetch()},this.currentRefetchInterval))},n.updateTimers=function(){this.updateStaleTimeout(),this.updateRefetchInterval(this.computeRefetchInterval())},n.clearTimers=function(){this.clearStaleTimeout(),this.clearRefetchInterval()},n.clearStaleTimeout=function(){this.staleTimeoutId&&(clearTimeout(this.staleTimeoutId),this.staleTimeoutId=void 0)},n.clearRefetchInterval=function(){this.refetchIntervalId&&(clearInterval(this.refetchIntervalId),this.refetchIntervalId=void 0)},n.createResult=function(o,i){var u=this.currentQuery,f=this.options,h=this.currentResult,y=this.currentResultState,O=this.currentResultOptions,S=o!==u,I=S?o.state:this.currentQueryInitialState,A=S?this.currentResult:this.previousQueryResult,C=o.state,M=C.dataUpdatedAt,W=C.error,R=C.errorUpdatedAt,B=C.isFetching,Y=C.status,X=!1,ae=!1,Z;if(i.optimisticResults){var K=this.hasListeners(),de=!K&&a2e(o,i),se=K&&l2e(o,u,i,f);(de||se)&&(B=!0,M||(Y="loading"))}if(i.keepPreviousData&&!C.dataUpdateCount&&A?.isSuccess&&Y!=="error")Z=A.data,M=A.dataUpdatedAt,Y=A.status,X=!0;else if(i.select&&typeof C.data<"u")if(h&&C.data===y?.data&&i.select===this.selectFn)Z=this.selectResult;else try{this.selectFn=i.select,Z=i.select(C.data),i.structuralSharing!==!1&&(Z=jy(h?.data,Z)),this.selectResult=Z,this.selectError=null}catch(be){gm().error(be),this.selectError=be}else Z=C.data;if(typeof i.placeholderData<"u"&&typeof Z>"u"&&(Y==="loading"||Y==="idle")){var Se;if(h?.isPlaceholderData&&i.placeholderData===O?.placeholderData)Se=h.data;else if(Se=typeof i.placeholderData=="function"?i.placeholderData():i.placeholderData,i.select&&typeof Se<"u")try{Se=i.select(Se),i.structuralSharing!==!1&&(Se=jy(h?.data,Se)),this.selectError=null}catch(be){gm().error(be),this.selectError=be}typeof Se<"u"&&(Y="success",Z=Se,ae=!0)}this.selectError&&(W=this.selectError,Z=this.selectResult,R=Date.now(),Y="error");var Oe={status:Y,isLoading:Y==="loading",isSuccess:Y==="success",isError:Y==="error",isIdle:Y==="idle",data:Z,dataUpdatedAt:M,error:W,errorUpdatedAt:R,failureCount:C.fetchFailureCount,errorUpdateCount:C.errorUpdateCount,isFetched:C.dataUpdateCount>0||C.errorUpdateCount>0,isFetchedAfterMount:C.dataUpdateCount>I.dataUpdateCount||C.errorUpdateCount>I.errorUpdateCount,isFetching:B,isRefetching:B&&Y!=="loading",isLoadingError:Y==="error"&&C.dataUpdatedAt===0,isPlaceholderData:ae,isPreviousData:X,isRefetchError:Y==="error"&&C.dataUpdatedAt!==0,isStale:EY(o,i),refetch:this.refetch,remove:this.remove};return Oe},n.shouldNotifyListeners=function(o,i){if(!i)return!0;var u=this.options,f=u.notifyOnChangeProps,h=u.notifyOnChangePropsExclusions;if(!f&&!h||f==="tracked"&&!this.trackedProps.length)return!0;var y=f==="tracked"?this.trackedProps:f;return Object.keys(o).some(function(O){var S=O,I=o[S]!==i[S],A=y?.some(function(M){return M===O}),C=h?.some(function(M){return M===O});return I&&!C&&(!y||A)})},n.updateResult=function(o){var i=this.currentResult;if(this.currentResult=this.createResult(this.currentQuery,this.options),this.currentResultState=this.currentQuery.state,this.currentResultOptions=this.options,!Kye(this.currentResult,i)){var u={cache:!0};o?.listeners!==!1&&this.shouldNotifyListeners(this.currentResult,i)&&(u.listeners=!0),this.notify(yr({},u,o))}},n.updateQuery=function(){var o=this.client.getQueryCache().build(this.client,this.options);if(o!==this.currentQuery){var i=this.currentQuery;this.currentQuery=o,this.currentQueryInitialState=o.state,this.previousQueryResult=this.currentResult,this.hasListeners()&&(i?.removeObserver(this),o.addObserver(this))}},n.onQueryUpdate=function(o){var i={};o.type==="success"?i.onSuccess=!0:o.type==="error"&&!ky(o.error)&&(i.onError=!0),this.updateResult(i),this.hasListeners()&&this.updateTimers()},n.notify=function(o){var i=this;In.batch(function(){o.onSuccess?(i.options.onSuccess==null||i.options.onSuccess(i.currentResult.data),i.options.onSettled==null||i.options.onSettled(i.currentResult.data,null)):o.onError&&(i.options.onError==null||i.options.onError(i.currentResult.error),i.options.onSettled==null||i.options.onSettled(void 0,i.currentResult.error)),o.listeners&&i.listeners.forEach(function(u){u(i.currentResult)}),o.cache&&i.client.getQueryCache().notify({query:i.currentQuery,type:"observerResultsUpdated"})})},t}(_c);function sPt(e,t){return t.enabled!==!1&&!e.state.dataUpdatedAt&&!(e.state.status==="error"&&t.retryOnMount===!1)}function a2e(e,t){return sPt(e,t)||e.state.dataUpdatedAt>0&&kY(e,t,t.refetchOnMount)}function kY(e,t,n){if(t.enabled!==!1){var r=typeof n=="function"?n(e):n;return r==="always"||r!==!1&&EY(e,t)}return!1}function l2e(e,t,n,r){return n.enabled!==!1&&(e!==t||r.enabled===!1)&&(!n.suspense||e.state.status!=="error")&&EY(e,n)}function EY(e,t){return e.isStaleByTime(t.staleTime)}var s2e=P(xo()),u2e=s2e.default.unstable_batchedUpdates;In.setBatchNotifyFunction(u2e);var c2e=console;IY(c2e);var Qd=P(L()),p2e=Qd.default.createContext(void 0),f2e=Qd.default.createContext(!1);function d2e(e){return e&&typeof window<"u"?(window.ReactQueryClientContext||(window.ReactQueryClientContext=p2e),window.ReactQueryClientContext):p2e}var CY=function(){var t=Qd.default.useContext(d2e(Qd.default.useContext(f2e)));if(!t)throw new Error("No QueryClient set, use QueryClientProvider to set one");return t},Hr=function(t){var n=t.client,r=t.contextSharing,o=r===void 0?!1:r,i=t.children;Qd.default.useEffect(function(){return n.mount(),function(){n.unmount()}},[n]);var u=d2e(o);return Qd.default.createElement(f2e.Provider,{value:o},Qd.default.createElement(u.Provider,{value:n},i))};var AY=P(L());function uPt(){var e=!1;return{clearReset:function(){e=!1},reset:function(){e=!0},isReset:function(){return e}}}var cPt=AY.default.createContext(uPt()),m2e=function(){return AY.default.useContext(cPt)};function h2e(e,t,n){return typeof t=="function"?t.apply(void 0,n):typeof t=="boolean"?t:!!e}var Py=P(L());function g2e(e,t){var n=Py.default.useRef(!1),r=Py.default.useState(0),o=r[1],i=CY(),u=m2e(),f=i.defaultQueryObserverOptions(e);f.optimisticResults=!0,f.onError&&(f.onError=In.batchCalls(f.onError)),f.onSuccess&&(f.onSuccess=In.batchCalls(f.onSuccess)),f.onSettled&&(f.onSettled=In.batchCalls(f.onSettled)),f.suspense&&(typeof f.staleTime!="number"&&(f.staleTime=1e3),f.cacheTime===0&&(f.cacheTime=1)),(f.suspense||f.useErrorBoundary)&&(u.isReset()||(f.retryOnMount=!1));var h=Py.default.useState(function(){return new t(i,f)}),y=h[0],O=y.getOptimisticResult(f);if(Py.default.useEffect(function(){n.current=!0,u.clearReset();var S=y.subscribe(In.batchCalls(function(){n.current&&o(function(I){return I+1})}));return y.updateResult(),function(){n.current=!1,S()}},[u,y]),Py.default.useEffect(function(){y.setOptions(f,{listeners:!1})},[f,y]),f.suspense&&O.isLoading)throw y.fetchOptimistic(f).then(function(S){var I=S.data;f.onSuccess==null||f.onSuccess(I),f.onSettled==null||f.onSettled(I,null)}).catch(function(S){u.clearReset(),f.onError==null||f.onError(S),f.onSettled==null||f.onSettled(void 0,S)});if(O.isError&&!u.isReset()&&!O.isFetching&&h2e(f.suspense,f.useErrorBoundary,[O.error,y.getCurrentQuery()]))throw O.error;return f.notifyOnChangeProps==="tracked"&&(O=y.trackResult(O,f)),O}function on(e,t,n){var r=Sy(e,t,n);return g2e(r,PY)}var zp=P(L(),1);var mM=P(L(),1);function hM(e){let{descText:t,description:n,...r}=e;return mM.default.createElement(mM.default.Fragment,null,mM.default.createElement(fr,{...r},t||n))}var v2e=P(xo(),1),pPt="No description available.";function gM(e){let{api:t,ontologyId:n,iri:r,descText:o,thingType:i,parameter:u,useLegacy:f,...h}=e,y=new un(t),{data:O,isLoading:S,isSuccess:I,isError:A,error:C}=on(["metadata",t,u,i,r,n,f],async()=>y.getThingObject(r,i,n,u,f));return zp.default.createElement(zp.default.Fragment,null,S&&zp.default.createElement($r,{size:"s"}),I&&O&&zp.default.createElement(hM,{description:O.getDescription()||pPt,descText:o,...h}),A&&zp.default.createElement(fr,null,Vo(C,"description")))}function y2e(e,t,n){v2e.default.render(fPt(e),t,n)}function fPt(e){let t=new Br;return zp.default.createElement(Fr,{colorMode:"light"},zp.default.createElement(Hr,{client:t},zp.default.createElement(gM,{api:e.api,ontologyId:e.ontologyId,iri:e.iri,descText:e.descText,thingType:e.thingType,parameter:e.parameter,color:e.color,useLegacy:e.useLegacy})))}var vm=P(L(),1);var b2e=P(xo(),1);function Ey(e){let{iri:t,iriText:n,color:r}=e;return vm.default.createElement(kt,{grow:!1},vm.default.createElement("div",null,vm.default.createElement(U1,{href:t,target:"_blank",style:{color:r&&(Hie(r)||Vie(r))?r:""},color:r&&qie(r)?r:void 0},n||t)))}function w2e(e,t,n){b2e.default.render(dPt(e),t,n)}function dPt(e){let t=new Br;return vm.default.createElement(Fr,{colorMode:"light"},vm.default.createElement(Hr,{client:t},vm.default.createElement(Ey,{iri:e.iri,iriText:e.iriText,color:e.color,parameter:e.parameter})))}var Fa=P(L(),1);var Cy=P(L(),1);function vM(e){return Cy.default.createElement(Cy.default.Fragment,null,Cy.default.createElement("span",null,Cy.default.createElement(wo,{color:e.colorFirst||"primary"},e.ontologyName.toUpperCase())," > ",Cy.default.createElement(wo,{color:e.colorSecond||"success"},e.shortForm?e.shortForm.toUpperCase():"No short form available")))}var O2e=P(xo(),1);function ym(e){let{api:t,ontologyId:n,iri:r,entityType:o,colorFirst:i,colorSecond:u,parameter:f,useLegacy:h}=e,y=new un(t),{data:O,isLoading:S,isSuccess:I,isError:A,error:C}=on(["metadata",t,f,o,r,n,h],async()=>y.getEntityObject(r,o,n,f,h));return Fa.default.createElement(Fa.default.Fragment,null,S&&Fa.default.createElement("span",null,Fa.default.createElement(wo,{color:i||(e.ontologyId?"primary":"warning")},e.ontologyId?.toUpperCase()||Fa.default.createElement($r,{size:"s"}))," > ",Fa.default.createElement(wo,{color:u||"warning"},Fa.default.createElement($r,{size:"s"}))),I&&O&&us(O)&&Fa.default.createElement(vM,{isDefiningOntology:O.getIsDefiningOntology(),ontologyName:O.getOntologyId(),shortForm:O.getShortForm(),ontologyId:n}),A&&Fa.default.createElement("span",null,Fa.default.createElement(wo,{color:i||(e.ontologyId||O&&O.getOntologyId()?"primary":"danger")},e.ontologyId?.toUpperCase()||O&&O.getOntologyId().toUpperCase()||Vo(C,"ontology"))," > ",Fa.default.createElement(wo,{color:u||(O&&O.getShortForm()?"success":"danger")},O&&O.getShortForm()?O.getShortForm().toUpperCase():Vo(C,"short form"))))}function x2e(e,t,n){O2e.default.render(mPt(e),t,n)}function mPt(e){let t=new Br;return Fa.default.createElement(Fr,{colorMode:"light"},Fa.default.createElement(Hr,{client:t},Fa.default.createElement(ym,{api:e.api,entityType:e.entityType,iri:e.iri,ontologyId:e.ontologyId,colorFirst:e.colorFirst,colorSecond:e.colorSecond,parameter:e.parameter,useLegacy:e.useLegacy})))}var Lp=P(L(),1);var Q_=P(L(),1);function yM(e){function t(){return e.synonyms&&e.synonyms.length>0?e.synonyms.map((n,r)=>Q_.default.createElement(kt,{key:n+r},n)):Q_.default.createElement(fr,null,"No alternative names exist.")}return Q_.default.createElement(Vi,null,Q_.default.createElement(eo,{style:{padding:10},direction:"column"},t()))}var _2e=P(xo(),1);function S2e(e){let{iri:t,api:n,parameter:r,entityType:o,ontologyId:i,useLegacy:u}=e,f=new un(n),{data:h,isLoading:y,isSuccess:O,isError:S,error:I}=on(["metadata",n,r,o,t,i,u],async()=>f.getEntityObject(t,o,i,r,u));return Lp.default.createElement(Lp.default.Fragment,null,O&&h&&us(h)&&Lp.default.createElement(yM,{synonyms:h.getSynonyms().map(A=>A.value)}),y&&Lp.default.createElement($r,null),S&&Lp.default.createElement(fr,null,Vo(I,"alternative names")))}function j2e(e,t,n){_2e.default.render(hPt(e),t,n)}function hPt(e){let t=new Br;return Lp.default.createElement(Fr,{colorMode:"light"},Lp.default.createElement(Hr,{client:t},Lp.default.createElement(S2e,{iri:e.iri,api:e.api,ontologyId:e.ontologyId,entityType:e.entityType,parameter:e.parameter})))}var Dp=P(L(),1);var bm=P(L(),1);function bM(e){function t(n){return n&&n.length>0?n?.map((r,o)=>bm.default.createElement(kt,{key:o},r)):bm.default.createElement(fr,null,"No cross references exist.")}return bm.default.createElement(Vi,null,bm.default.createElement(bm.default.Fragment,null,bm.default.createElement(eo,{style:{padding:7},direction:"column"},t(e.crossrefs))))}var I2e=P(xo(),1);function k2e(e){let{iri:t,api:n,parameter:r,entityType:o,ontologyId:i,useLegacy:u}=e,f=new un(n),{data:h,isLoading:y,isSuccess:O,isError:S,error:I}=on(["metadata",n,r,o,t,i,u],async()=>f.getEntityObject(t,o,i,r,u));return Dp.default.createElement(Dp.default.Fragment,null,O&&h&&us(h)&&Dp.default.createElement(bM,{crossrefs:Rt.fromJson(h.getCrossReferences()).map(A=>A.value)}),y&&Dp.default.createElement($r,null),S&&Dp.default.createElement(fr,null,Vo(I,"cross references")))}function P2e(e,t,n){I2e.default.render(gPt(e),t,n)}function gPt(e){let t=new Br;return Dp.default.createElement(Fr,{colorMode:"light"},Dp.default.createElement(Hr,{client:t},Dp.default.createElement(k2e,{iri:e.iri,api:e.api,ontologyId:e.ontologyId,entityType:e.entityType,parameter:e.parameter,useLegacy:e.useLegacy})))}var Zd=P(L(),1);(()=>{var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,o=Object.getPrototypeOf,i=Object.prototype.hasOwnProperty,u=(s,p)=>()=>(s&&(p=s(s=0)),p),f=(s,p)=>()=>(p||s((p={exports:{}}).exports,p),p.exports),h=(s,p)=>{for(var d in p)t(s,d,{get:p[d],enumerable:!0})},y=(s,p,d,w)=>{if(p&&typeof p=="object"||typeof p=="function")for(let _ of r(p))!i.call(s,_)&&_!==d&&t(s,_,{get:()=>p[_],enumerable:!(w=n(p,_))||w.enumerable});return s},O=(s,p,d)=>(d=s!=null?e(o(s)):{},y(p||!s||!s.__esModule?t(d,"default",{value:s,enumerable:!0}):d,s)),S=s=>y(t({},"__esModule",{value:!0}),s),I=f((s,p)=>{"use strict";var d=Object.getOwnPropertySymbols,w=Object.prototype.hasOwnProperty,_=Object.prototype.propertyIsEnumerable;function E(z){if(z==null)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(z)}function T(){try{if(!Object.assign)return!1;var z=new String("abc");if(z[5]="de",Object.getOwnPropertyNames(z)[0]==="5")return!1;for(var V={},H=0;H<10;H++)V["_"+String.fromCharCode(H)]=H;var G=Object.getOwnPropertyNames(V).map(function(ne){return V[ne]});if(G.join("")!=="0123456789")return!1;var ee={};return"abcdefghijklmnopqrst".split("").forEach(function(ne){ee[ne]=ne}),Object.keys(Object.assign({},ee)).join("")==="abcdefghijklmnopqrst"}catch{return!1}}p.exports=T()?Object.assign:function(z,V){for(var H,G=E(z),ee,ne=1;ne{"use strict";var p=I(),d=60103,w=60106;s.Fragment=60107,s.StrictMode=60108,s.Profiler=60114;var _=60109,E=60110,T=60112;s.Suspense=60113;var z=60115,V=60116;typeof Symbol=="function"&&Symbol.for&&(H=Symbol.for,d=H("react.element"),w=H("react.portal"),s.Fragment=H("react.fragment"),s.StrictMode=H("react.strict_mode"),s.Profiler=H("react.profiler"),_=H("react.provider"),E=H("react.context"),T=H("react.forward_ref"),s.Suspense=H("react.suspense"),z=H("react.memo"),V=H("react.lazy"));var H,G=typeof Symbol=="function"&&Symbol.iterator;function ee(Me){return Me===null||typeof Me!="object"?null:(Me=G&&Me[G]||Me["@@iterator"],typeof Me=="function"?Me:null)}function ne(Me){for(var st="https://reactjs.org/docs/error-decoder.html?invariant="+Me,lr=1;lr{"use strict";p.exports=A()}),M=f(s=>{"use strict";var p,d,w,_;typeof performance=="object"&&typeof performance.now=="function"?(E=performance,s.unstable_now=function(){return E.now()}):(T=Date,z=T.now(),s.unstable_now=function(){return T.now()-z});var E,T,z;typeof window>"u"||typeof MessageChannel!="function"?(V=null,H=null,G=function(){if(V!==null)try{var rt=s.unstable_now();V(!0,rt),V=null}catch(Ot){throw setTimeout(G,0),Ot}},p=function(rt){V!==null?setTimeout(p,0,rt):(V=rt,setTimeout(G,0))},d=function(rt,Ot){H=setTimeout(rt,Ot)},w=function(){clearTimeout(H)},s.unstable_shouldYield=function(){return!1},_=s.unstable_forceFrameRate=function(){}):(ee=window.setTimeout,ne=window.clearTimeout,typeof console<"u"&&(ie=window.cancelAnimationFrame,typeof window.requestAnimationFrame!="function"&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills"),typeof ie!="function"&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills")),oe=!1,ce=null,me=-1,le=5,Te=0,s.unstable_shouldYield=function(){return s.unstable_now()>=Te},_=function(){},s.unstable_forceFrameRate=function(rt){0>rt||125>>1,rr=rt[Tt];if(rr!==void 0&&0ue(Hn,It))Kn!==void 0&&0>ue(Kn,Hn)?(rt[Tt]=Kn,rt[yo]=It,Tt=yo):(rt[Tt]=Hn,rt[kr]=It,Tt=kr);else if(Kn!==void 0&&0>ue(Kn,It))rt[Tt]=Kn,rt[yo]=It,Tt=yo;else break e}}return Ot}return null}function ue(rt,Ot){var It=rt.sortIndex-Ot.sortIndex;return It!==0?It:rt.id-Ot.id}var je=[],ze=[],Fe=1,Je=null,tt=3,gt=!1,Ut=!1,Gt=!1;function or(rt){for(var Ot=we(ze);Ot!==null;){if(Ot.callback===null)Ae(ze);else if(Ot.startTime<=rt)Ae(ze),Ot.sortIndex=Ot.expirationTime,Pe(je,Ot);else break;Ot=we(ze)}}function Me(rt){if(Gt=!1,or(rt),!Ut)if(we(je)!==null)Ut=!0,p(st);else{var Ot=we(ze);Ot!==null&&d(Me,Ot.startTime-rt)}}function st(rt,Ot){Ut=!1,Gt&&(Gt=!1,w()),gt=!0;var It=tt;try{for(or(Ot),Je=we(je);Je!==null&&(!(Je.expirationTime>Ot)||rt&&!s.unstable_shouldYield());){var Tt=Je.callback;if(typeof Tt=="function"){Je.callback=null,tt=Je.priorityLevel;var rr=Tt(Je.expirationTime<=Ot);Ot=s.unstable_now(),typeof rr=="function"?Je.callback=rr:Je===we(je)&&Ae(je),or(Ot)}else Ae(je);Je=we(je)}if(Je!==null)var kr=!0;else{var Hn=we(ze);Hn!==null&&d(Me,Hn.startTime-Ot),kr=!1}return kr}finally{Je=null,tt=It,gt=!1}}var lr=_;s.unstable_IdlePriority=5,s.unstable_ImmediatePriority=1,s.unstable_LowPriority=4,s.unstable_NormalPriority=3,s.unstable_Profiling=null,s.unstable_UserBlockingPriority=2,s.unstable_cancelCallback=function(rt){rt.callback=null},s.unstable_continueExecution=function(){Ut||gt||(Ut=!0,p(st))},s.unstable_getCurrentPriorityLevel=function(){return tt},s.unstable_getFirstCallbackNode=function(){return we(je)},s.unstable_next=function(rt){switch(tt){case 1:case 2:case 3:var Ot=3;break;default:Ot=tt}var It=tt;tt=Ot;try{return rt()}finally{tt=It}},s.unstable_pauseExecution=function(){},s.unstable_requestPaint=lr,s.unstable_runWithPriority=function(rt,Ot){switch(rt){case 1:case 2:case 3:case 4:case 5:break;default:rt=3}var It=tt;tt=rt;try{return Ot()}finally{tt=It}},s.unstable_scheduleCallback=function(rt,Ot,It){var Tt=s.unstable_now();switch(typeof It=="object"&&It!==null?(It=It.delay,It=typeof It=="number"&&0Tt?(rt.sortIndex=It,Pe(ze,rt),we(je)===null&&rt===we(ze)&&(Gt?w():Gt=!0,d(Me,It-Tt))):(rt.sortIndex=rr,Pe(je,rt),Ut||gt||(Ut=!0,p(st))),rt},s.unstable_wrapCallback=function(rt){var Ot=tt;return function(){var It=tt;tt=Ot;try{return rt.apply(this,arguments)}finally{tt=It}}}}),W=f((s,p)=>{"use strict";p.exports=M()}),R=f(s=>{"use strict";var p=C(),d=I(),w=W();function _(l){for(var c="https://reactjs.org/docs/error-decoder.html?invariant="+l,m=1;m"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),G=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,ee=Object.prototype.hasOwnProperty,ne={},ie={};function oe(l){return ee.call(ie,l)?!0:ee.call(ne,l)?!1:G.test(l)?ie[l]=!0:(ne[l]=!0,!1)}function ce(l,c,m,k){if(m!==null&&m.type===0)return!1;switch(typeof c){case"function":case"symbol":return!0;case"boolean":return k?!1:m!==null?!m.acceptsBooleans:(l=l.toLowerCase().slice(0,5),l!=="data-"&&l!=="aria-");default:return!1}}function me(l,c,m,k){if(c===null||typeof c>"u"||ce(l,c,m,k))return!0;if(k)return!1;if(m!==null)switch(m.type){case 3:return!c;case 4:return c===!1;case 5:return isNaN(c);case 6:return isNaN(c)||1>c}return!1}function le(l,c,m,k,N,J,re){this.acceptsBooleans=c===2||c===3||c===4,this.attributeName=k,this.attributeNamespace=N,this.mustUseProperty=m,this.propertyName=l,this.type=c,this.sanitizeURL=J,this.removeEmptyString=re}var Te={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(l){Te[l]=new le(l,0,!1,l,null,!1,!1)}),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(l){var c=l[0];Te[c]=new le(c,1,!1,l[1],null,!1,!1)}),["contentEditable","draggable","spellCheck","value"].forEach(function(l){Te[l]=new le(l,2,!1,l.toLowerCase(),null,!1,!1)}),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(l){Te[l]=new le(l,2,!1,l,null,!1,!1)}),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(l){Te[l]=new le(l,3,!1,l.toLowerCase(),null,!1,!1)}),["checked","multiple","muted","selected"].forEach(function(l){Te[l]=new le(l,3,!0,l,null,!1,!1)}),["capture","download"].forEach(function(l){Te[l]=new le(l,4,!1,l,null,!1,!1)}),["cols","rows","size","span"].forEach(function(l){Te[l]=new le(l,6,!1,l,null,!1,!1)}),["rowSpan","start"].forEach(function(l){Te[l]=new le(l,5,!1,l.toLowerCase(),null,!1,!1)});var De=/[\-:]([a-z])/g;function Ie(l){return l[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(l){var c=l.replace(De,Ie);Te[c]=new le(c,1,!1,l,null,!1,!1)}),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(l){var c=l.replace(De,Ie);Te[c]=new le(c,1,!1,l,"http://www.w3.org/1999/xlink",!1,!1)}),["xml:base","xml:lang","xml:space"].forEach(function(l){var c=l.replace(De,Ie);Te[c]=new le(c,1,!1,l,"http://www.w3.org/XML/1998/namespace",!1,!1)}),["tabIndex","crossOrigin"].forEach(function(l){Te[l]=new le(l,1,!1,l.toLowerCase(),null,!1,!1)}),Te.xlinkHref=new le("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach(function(l){Te[l]=new le(l,1,!1,l.toLowerCase(),null,!0,!0)});function Pe(l,c,m,k){var N=Te.hasOwnProperty(c)?Te[c]:null,J=N!==null?N.type===0:k?!1:!(!(2=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function u_t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var C_=function(t){var n=t.children,r=t.className,o=t.hasScreenReaderHelpText,i=o===void 0?!0:o,u=s_t(t,l_t),f=en(),h=To("euiMark.highlightStart","highlight start"),y=To("euiMark.highlightEnd","highlight end"),O=Bge(f,{hasScreenReaderHelpText:i,highlightStart:h,highlightEnd:y}),S=(0,Hge.default)("euiMark",r);return a("mark",hK({css:[O,";label:EuiMark;"],className:S},u),n)};C_.propTypes={className:uy.default.string,"aria-label":uy.default.string,"data-test-subj":uy.default.string,hasScreenReaderHelpText:uy.default.bool,children:uy.default.node.isRequired};var c_t=["children","className","search","strict","highlightAll","hasScreenReaderHelpText"];function gK(){return gK=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function f_t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var d_t=function(t,n,r,o,i){if(!n)return t;if(!t)return null;if(o){var u=m_t(t,n,r);return a(vK.Fragment,null,u.map(function(A){var C=A.end,M=A.highlight,F=A.start,R=t.substr(F,C-F);return M?a(C_,{key:F,hasScreenReaderHelpText:i},R):R}))}var f=r?t:t.toLowerCase(),h=r?n:n.toLowerCase(),y=f.indexOf(h);if(y===-1)return t;var O=t.substr(0,y),S=t.substr(y,n.length),I=t.substr(y+n.length);return a(vK.Fragment,null,O,a(C_,{hasScreenReaderHelpText:i},S),I)},m_t=function(t,n,r){for(var o=new RegExp(n,r?"g":"gi"),i=[],u;(u=o.exec(t))!==null;)i.push({start:u.index,end:(u.index||0)+u[0].length});return h_t(i,t.length)},h_t=function(t,n){var r=[],o=function(f,h,y){h-f>0&&r.push({start:f,end:h,highlight:y})};if(t.length===0)o(0,n,!1);else{var i=0;t.forEach(function(u){o(i,u.start,!1),o(u.start,u.end,!0),i=u.end}),o(i,n,!1)}return r},fu=function(t){var n=t.children,r=t.className,o=t.search,i=t.strict,u=i===void 0?!1:i,f=t.highlightAll,h=f===void 0?!1:f,y=t.hasScreenReaderHelpText,O=y===void 0?!0:y,S=p_t(t,c_t);return a("span",gK({className:r},S),d_t(n,o,u,h,O))};fu.propTypes={className:Hd.default.string,"aria-label":Hd.default.string,"data-test-subj":Hd.default.string,children:Hd.default.string.isRequired,search:Hd.default.string.isRequired,strict:Hd.default.bool,highlightAll:Hd.default.bool};var vgr=k(L());var yK=function(t){var n=t.children;return a("div",{className:"euiComboBoxTitle"},n)};yK.propTypes={};var qge=k(L()),am=k(mt()),Uge=k(Ct());function rA(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?rA=function(n){return typeof n}:rA=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},rA(e)}var g_t=["children","className","disabled","checked","isFocused","showIcons"];function bK(){return bK=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function y_t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function b_t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Vge(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function nA(e){return nA=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},nA(e)}function M_(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var j_t=function(t){return t?t==="on"?{icon:"check",color:"text"}:{icon:"cross",color:"text"}:{icon:"empty"}},oA=function(e){O_t(n,e);var t=x_t(n);function n(){var r;b_t(this,n);for(var o=arguments.length,i=new Array(o),u=0;u=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function k_t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function E_t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Xge(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function lA(e){return lA=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},lA(e)}function mu(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Kge="euiComboBoxOption__content",OK=a(Oo,{className:"euiComboBoxOption__enterBadge",color:"hollow",iconType:"returnKey","aria-hidden":"true"}),T_=function(e){A_t(n,e);var t=M_t(n);function n(){var r;E_t(this,n);for(var o=arguments.length,i=new Array(o),u=0;u200?200:xt,yr=a(tA,{height:dr,onScroll:B,itemCount:A.length,itemSize:se,itemData:A,ref:this.setListRef,innerRef:this.setListBoxRef,width:Ge},this.ListRow),Hr=(0,Qge.default)("euiComboBoxOptionsList");return a(Yv,aA({paddingSize:"none",hasShadow:!1,className:Hr,panelRef:this.listRefCallback,"data-test-subj":"comboBoxOptionsList ".concat(i),style:Jge(Jge({},ot),{},{zIndex:rt}),isOpen:!0,isAttached:!0,position:Z},jt),a("div",{className:"euiComboBoxOptionsList__rowWrap"},lr||yr))}}]),n}(Yge.Component);mu(T_,"defaultProps",{"data-test-subj":"",rowHeight:29});T_.propTypes={className:ft.default.string,"aria-label":ft.default.string,"data-test-subj":ft.default.oneOfType([ft.default.string,ft.default.string.isRequired]),activeOptionIndex:ft.default.number,areAllOptionsSelected:ft.default.bool,listboxAriaLabel:ft.default.string.isRequired,customOptionText:ft.default.string,fullWidth:ft.default.bool,getSelectedOptionForSearchValue:ft.default.func,isLoading:ft.default.bool,listRef:ft.default.any.isRequired,matchingOptions:ft.default.arrayOf(ft.default.shape({isGroupLabelOption:ft.default.bool,label:ft.default.string.isRequired,key:ft.default.string,options:ft.default.arrayOf(ft.default.shape({isGroupLabelOption:ft.default.bool,label:ft.default.string.isRequired,key:ft.default.string,options:ft.default.arrayOf(ft.default.any.isRequired),value:ft.default.any,className:ft.default.string,"aria-label":ft.default.string,"data-test-subj":ft.default.string}).isRequired),value:ft.default.any,className:ft.default.string,"aria-label":ft.default.string,"data-test-subj":ft.default.string}).isRequired).isRequired,onCloseList:ft.default.func.isRequired,onCreateOption:ft.default.func,onOptionClick:ft.default.func,onOptionEnterKey:ft.default.func,onScroll:ft.default.any,optionRef:ft.default.func.isRequired,options:ft.default.arrayOf(ft.default.shape({isGroupLabelOption:ft.default.bool,label:ft.default.string.isRequired,key:ft.default.string,options:ft.default.arrayOf(ft.default.shape({isGroupLabelOption:ft.default.bool,label:ft.default.string.isRequired,key:ft.default.string,options:ft.default.arrayOf(ft.default.any.isRequired),value:ft.default.any,className:ft.default.string,"aria-label":ft.default.string,"data-test-subj":ft.default.string}).isRequired),value:ft.default.any,className:ft.default.string,"aria-label":ft.default.string,"data-test-subj":ft.default.string}).isRequired).isRequired,position:ft.default.oneOf(["top","bottom"]),renderOption:ft.default.func,rootId:ft.default.any.isRequired,rowHeight:ft.default.number.isRequired,scrollToIndex:ft.default.number,searchValue:ft.default.string.isRequired,selectedOptions:ft.default.arrayOf(ft.default.shape({isGroupLabelOption:ft.default.bool,label:ft.default.string.isRequired,key:ft.default.string,options:ft.default.arrayOf(ft.default.shape({isGroupLabelOption:ft.default.bool,label:ft.default.string.isRequired,key:ft.default.string,options:ft.default.arrayOf(ft.default.any.isRequired),value:ft.default.any,className:ft.default.string,"aria-label":ft.default.string,"data-test-subj":ft.default.string}).isRequired),value:ft.default.any,className:ft.default.string,"aria-label":ft.default.string,"data-test-subj":ft.default.string}).isRequired).isRequired,updatePosition:ft.default.func.isRequired,width:ft.default.number.isRequired,singleSelection:ft.default.oneOfType([ft.default.bool.isRequired,ft.default.shape({asPlainText:ft.default.bool}).isRequired]),delimiter:ft.default.string,zIndex:ft.default.number};function Zge(e){return N_t(e)||D_t(e)||L_t(e)||z_t()}function z_t(){throw new TypeError(`Invalid attempt to spread non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function L_t(e,t){if(e){if(typeof e=="string")return _K(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _K(e,t)}}function D_t(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function N_t(e){if(Array.isArray(e))return _K(e)}function _K(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n0&&(h.push({key:O.key,label:O.label,isGroupLabelOption:!0}),h=h.concat(S))}else eve(h,O,n,f,o,i)}),u==="startsWith"){var y={startWith:[],others:[]};return h.forEach(function(O){O.label.toLowerCase().startsWith(f)?y.startWith.push(O):y.others.push(O)}),[].concat(Zge(y.startWith),Zge(y.others))}return h};var hve=k(L()),kt=k(mt()),gve=k(Ct()),vve=k(sve());var fve=k(L()),Dn=k(mt()),dve=k(Ct());function cA(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?cA=function(n){return typeof n}:cA=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},cA(e)}var $_t=["asPlainText","children","className","color","onClick","onClickAriaLabel","onClose","option"];function z_(){return z_=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function G_t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function X_t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function uve(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function pA(e){return pA=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},pA(e)}function pve(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var fA=function(e){Y_t(n,e);var t=Q_t(n);function n(){var r;X_t(this,n);for(var o=arguments.length,i=new Array(o),u=0;u=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function nSt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function L_(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?L_=function(n){return typeof n}:L_=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},L_(e)}function oSt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function mve(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function mA(e){return mA=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},mA(e)}function cy(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var CK=function(e){aSt(n,e);var t=lSt(n);function n(){var r;oSt(this,n);for(var o=arguments.length,i=new Array(o),u=0;u0?"".concat(se,". Press Backspace to delete ").concat(Z[Z.length-1].label,". "):"","Combo box input. ").concat(Ze," Type some text or, to display a list of choices, press Down Arrow. ")+"To exit the list of choices, press Escape.";jt=X("removeOptionMessage"),dt=a(Un,null,a("span",{"aria-live":"polite",id:jt},Xt))}var at;Y&&Z&&!Z.length&&!le&&(at=a("p",{className:"euiComboBoxPlaceholder"},Y));var lr={};!S&&C&&h&&(lr.clear={"data-test-subj":"comboBoxClearButton",onClick:C});var ht;A||(ht={"aria-label":I?"Close list of options":"Open list of options","data-test-subj":"comboBoxToggleListButton",disabled:S,onClick:I&&!S?F:R,ref:de,side:"right",tabIndex:-1,type:"arrowDown"});var xt=(0,gve.default)("euiComboBox__inputWrap",{"euiComboBox__inputWrap--compressed":i,"euiComboBox__inputWrap--fullWidth":f,"euiComboBox__inputWrap--noWrap":Ke,"euiComboBox__inputWrap-isLoading":Pe,"euiComboBox__inputWrap-isClearable":C,"euiComboBox__inputWrap--inGroup":_e||be});return a(oy,dA({icon:ht},lr,{inputId:y,isLoading:Pe,compressed:i,fullWidth:f,prepend:_e,append:be}),a("div",{className:xt,"data-test-subj":"comboBoxInput",onClick:M,tabIndex:-1},!Ke||!le?ot:null,at,a(vve.default,{"aria-activedescendant":u,"aria-autocomplete":"list","aria-controls":I?X("listbox"):"","aria-expanded":I,"aria-label":Le,"aria-labelledby":Ge,className:"euiComboBox__input","data-test-subj":"comboBoxSearchInput",disabled:S,id:y,inputRef:O,onBlur:this.onBlur,onChange:this.inputOnChange,onFocus:this.onFocus,ref:this.inputRefCallback,role:"combobox",style:{fontSize:14},value:le,autoFocus:Ue}),dt))}}]),n}(hve.Component);CK.propTypes={autoSizeInputRef:kt.default.any,compressed:kt.default.bool.isRequired,focusedOptionId:kt.default.string,fullWidth:kt.default.bool,hasSelectedOptions:kt.default.bool.isRequired,id:kt.default.string,inputRef:kt.default.any,isDisabled:kt.default.bool,isListOpen:kt.default.bool.isRequired,noIcon:kt.default.bool.isRequired,onBlur:kt.default.any,onChange:kt.default.func,onClear:kt.default.func,onClick:kt.default.func,onCloseListClick:kt.default.func.isRequired,onFocus:kt.default.any.isRequired,onOpenListClick:kt.default.func.isRequired,onRemoveOption:kt.default.func,placeholder:kt.default.string,rootId:kt.default.any.isRequired,searchValue:kt.default.string.isRequired,selectedOptions:kt.default.arrayOf(kt.default.shape({isGroupLabelOption:kt.default.bool,label:kt.default.string.isRequired,key:kt.default.string,options:kt.default.arrayOf(kt.default.shape({isGroupLabelOption:kt.default.bool,label:kt.default.string.isRequired,key:kt.default.string,options:kt.default.arrayOf(kt.default.any.isRequired),value:kt.default.any,className:kt.default.string,"aria-label":kt.default.string,"data-test-subj":kt.default.string}).isRequired),value:kt.default.any,className:kt.default.string,"aria-label":kt.default.string,"data-test-subj":kt.default.string}).isRequired),singleSelection:kt.default.oneOfType([kt.default.bool.isRequired,kt.default.shape({asPlainText:kt.default.bool}).isRequired]),toggleButtonRef:kt.default.any,updatePosition:kt.default.func.isRequired,value:kt.default.string,prepend:kt.default.oneOfType([kt.default.oneOfType([kt.default.string.isRequired,kt.default.element.isRequired]).isRequired,kt.default.arrayOf(kt.default.oneOfType([kt.default.string.isRequired,kt.default.element.isRequired]).isRequired).isRequired]),append:kt.default.oneOfType([kt.default.oneOfType([kt.default.string.isRequired,kt.default.element.isRequired]).isRequired,kt.default.arrayOf(kt.default.oneOfType([kt.default.string.isRequired,kt.default.element.isRequired]).isRequired).isRequired]),isLoading:kt.default.bool,autoFocus:kt.default.bool,"aria-label":kt.default.string,"aria-labelledby":kt.default.string,className:kt.default.string,"data-test-subj":kt.default.string};function hA(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?hA=function(n){return typeof n}:hA=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},hA(e)}var cSt=["data-test-subj","async","className","compressed","customOptionText","fullWidth","id","inputRef","isClearable","isDisabled","isInvalid","isLoading","noSuggestions","onBlur","onChange","onCreateOption","onSearchChange","options","placeholder","renderOption","rowHeight","selectedOptions","singleSelection","prepend","sortMatchesBy","delimiter","append","autoFocus","aria-label","aria-labelledby"];function AK(){return AK=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function fSt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function yve(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function bve(e){for(var t=1;t"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function gA(e){return gA=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},gA(e)}function wr(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Ove="",D_=function(e){hSt(n,e);var t=gSt(n);function n(){var r;dSt(this,n);for(var o=arguments.length,i=new Array(o),u=0;u0&&arguments[0]!==void 0?arguments[0]:r.state.listElement;if(r._isMounted&&r.state.isListOpen&&f){var h=f.getBoundingClientRect();if(!(h.width===0||h.height===0)&&r.comboBoxRefInstance){var y=r.comboBoxRefInstance.getBoundingClientRect(),O=kd({allowCrossAxis:!1,anchor:r.comboBoxRefInstance,popover:f,position:"bottom"}),S=O.position,I=O.top;r.listRefInstance&&(r.listRefInstance.style.top="".concat(I,"px"),r.listRefInstance.style.left="".concat(y.left+window.pageXOffset,"px"),r.listRefInstance.style.width="".concat(y.width,"px")),r.setState({listElement:f,listPosition:S,width:y.width})}}}),wr(xr(r),"incrementActiveOptionIndex",function(f){r.state.matchingOptions.length&&r.setState(function(h){var y=h.activeOptionIndex,O=h.matchingOptions,S;y<0?S=f<0?O.length-1:0:(S=y+f,S<0?S=O.length-1:S===O.length&&(S=0));for(var I=f>0?1:-1;O[S].isGroupLabelOption;)S=S+I,S<0?S=O.length-1:S===O.length&&(S=0);return{activeOptionIndex:S}})}),wr(xr(r),"hasActiveOption",function(){return r.state.activeOptionIndex>-1&&r.state.activeOptionIndex0&&r.addCustomOption(f,O)}):r.addCustomOption(f,h)}),wr(xr(r),"onContainerBlur",function(f){var h=f,y=h.relatedTarget||h.explicitOriginalTarget,O=y&&r.listRefInstance&&r.listRefInstance.contains(y),S=y&&r.comboBoxRefInstance&&r.comboBoxRefInstance.contains(y);!O&&!S?(r.closeList(),r.props.onBlur&&r.props.onBlur(f),r.setState({hasFocus:!1}),r.hasActiveOption()||r.setCustomOptions(!0)):O&&requestAnimationFrame(function(){var I;(I=r.searchInputRefInstance)===null||I===void 0||I.focus()})}),wr(xr(r),"onKeyDown",function(f){if(!r.props.isDisabled)switch(f.key){case xn.ARROW_UP:f.preventDefault(),f.stopPropagation(),r.state.isListOpen?r.incrementActiveOptionIndex(-1):r.openList();break;case xn.ARROW_DOWN:f.preventDefault(),f.stopPropagation(),r.state.isListOpen?r.incrementActiveOptionIndex(1):r.openList();break;case xn.BACKSPACE:f.stopPropagation(),r.removeLastOption();break;case xn.ESCAPE:r.state.isListOpen&&(f.preventDefault(),f.stopPropagation(),r.closeList());break;case xn.ENTER:f.preventDefault(),f.stopPropagation(),r.hasActiveOption()?r.onAddOption(r.state.matchingOptions[r.state.activeOptionIndex]):r.setCustomOptions(!1);break;case xn.TAB:r.hasActiveOption()&&r.state.isListOpen&&(f.preventDefault(),f.stopPropagation());break;default:r.props.onKeyDown&&r.props.onKeyDown(f)}}),wr(xr(r),"onOptionEnterKey",function(f){r.onAddOption(f)}),wr(xr(r),"onOptionClick",function(f){r.onAddOption(f)}),wr(xr(r),"onAddOption",function(f,h){if(!f.disabled){var y=r.props,O=y.onChange,S=y.selectedOptions,I=y.singleSelection,A=!!I,C=A?[f]:S.concat(f);O&&O(C),r.clearSearchValue(),r.clearActiveOption(),h||r.searchInputRefInstance&&r.searchInputRefInstance.focus(),A?requestAnimationFrame(function(){return r.closeList()}):r.setState({activeOptionIndex:r.state.matchingOptions.indexOf(f)})}}),wr(xr(r),"onRemoveOption",function(f){var h=r.props,y=h.onChange,O=h.selectedOptions;y&&y(O.filter(function(S){return S!==f})),r.clearActiveOption()}),wr(xr(r),"clearSelectedOptions",function(){var f=r.props.onChange;f&&f([]),r.searchInputRefInstance&&r.searchInputRefInstance.focus(),r.state.isListOpen||r.openList()}),wr(xr(r),"onComboBoxClick",function(){if(r.searchInputRefInstance&&r.searchInputRefInstance.focus(),r.props.singleSelection&&r.props.selectedOptions.length===1){var f=r.state.matchingOptions.findIndex(function(h){return h.label===r.props.selectedOptions[0].label&&h.key===r.props.selectedOptions[0].key});r.setState({activeOptionIndex:f})}else r.clearActiveOption()}),wr(xr(r),"onOpenListClick",function(){r.searchInputRefInstance&&r.searchInputRefInstance.focus(),r.state.isListOpen||r.openList()}),wr(xr(r),"onOptionListScroll",function(){r.searchInputRefInstance&&r.searchInputRefInstance.focus()}),wr(xr(r),"onCloseListClick",function(){r.closeList()}),wr(xr(r),"onSearchChange",function(f){var h=r.props,y=h.onSearchChange,O=h.delimiter;if(y){var S=r.state.matchingOptions.length>0;y(f,S)}r.setState({searchValue:f},function(){f&&r.state.isListOpen===!1&&r.openList()}),O&&f.endsWith(O)&&r.setCustomOptions(!1)}),wr(xr(r),"updateMatchingOptionsIfDifferent",function(f){var h=r.state,y=h.matchingOptions,O=h.activeOptionIndex,S=r.props,I=S.singleSelection,A=S.selectedOptions,C=!1;if(y.length!==f.length)C=!0;else for(var M=0;M0,id:Hr,inputRef:this.searchInputRefCallback,isDisabled:M,isListOpen:lr,noIcon:!!B,onChange:this.onSearchChange,onClear:C&&!M?this.clearSelectedOptions:void 0,onClick:this.onComboBoxClick,onCloseListClick:this.onCloseListClick,onFocus:this.onComboBoxFocus,onOpenListClick:this.onOpenListClick,onRemoveOption:this.onRemoveOption,placeholder:de,rootId:this.rootId,searchValue:xt,selectedOptions:be,singleSelection:Pe,toggleButtonRef:this.toggleButtonRefCallback,updatePosition:this.updatePosition,value:Bt,append:Pe?Ke:void 0,prepend:Pe?Ue:void 0,isLoading:R,autoFocus:rt,"aria-label":ot,"aria-labelledby":dt}),sn)}}],[{key:"getDerivedStateFromProps",value:function(o,i){var u=o.options,f=o.selectedOptions,h=o.singleSelection,y=o.sortMatchesBy,O=i.activeOptionIndex,S=i.searchValue,I=uA(u,f,S,o.async,!!h,y),A={matchingOptions:I};return O>=I.length&&(A.activeOptionIndex=-1),A}}]),n}(xve.Component);wr(D_,"defaultProps",{async:!1,compressed:!1,fullWidth:!1,isClearable:!0,options:[],selectedOptions:[],singleSelection:!1,prepend:void 0,append:void 0,sortMatchesBy:"none"});D_.propTypes={"data-test-subj":Pn.default.string,async:Pn.default.bool.isRequired,className:Pn.default.string,compressed:Pn.default.bool.isRequired,fullWidth:Pn.default.bool.isRequired,id:Pn.default.string,inputRef:Pn.default.any,isClearable:Pn.default.bool.isRequired,isDisabled:Pn.default.bool,isInvalid:Pn.default.bool,isLoading:Pn.default.bool,noSuggestions:Pn.default.bool,onBlur:Pn.default.any,onChange:Pn.default.func,onFocus:Pn.default.any,onKeyDown:Pn.default.any,onSearchChange:Pn.default.func,placeholder:Pn.default.string,rowHeight:Pn.default.number,singleSelection:Pn.default.oneOfType([Pn.default.bool.isRequired,Pn.default.shape({asPlainText:Pn.default.bool}).isRequired]).isRequired,sortMatchesBy:Pn.default.oneOf(["none","startsWith"]).isRequired,prepend:Pn.default.any,append:Pn.default.any,delimiter:Pn.default.string,autoFocus:Pn.default.bool,"aria-label":Pn.default.string,"aria-labelledby":Pn.default.string};var zp=k(L()),Rp=k(mt());var kvr=k(L()),Tl=k(mt()),Cve=k(Ct());var mvr=k(L()),hn=k(mt()),jve=k(Ct());var bSt=["className","isActive","isPlaceholder","pageIndex","totalPages"];function RK(){return RK=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function xSt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var zK=function(t){var n=t.className,r=t.isActive,o=t.isPlaceholder,i=t.pageIndex,u=t.totalPages,f=OSt(t,bSt),h=(0,jve.default)("euiPaginationButton",n,{"euiPaginationButton-isActive":r,"euiPaginationButton-isPlaceholder":o}),y=TK(TK(TK({className:h,size:"s",color:"text","data-test-subj":"pagination-button-".concat(i),isDisabled:o||r},r&&{"aria-current":!0}),f["aria-controls"]&&{href:"#".concat(f["aria-controls"])}),f),O=i+1;return a(At,{token:"euiPaginationButton.longPageString",default:"Page {page} of {totalPages}",values:{page:O,totalPages:u}},function(S){return a(At,{token:"euiPaginationButton.shortPageString",default:"Page {page}",values:{page:O}},function(I){return a(za,RK({"aria-label":u?S:I},y),O)})})};zK.propTypes={href:hn.default.string,onClick:hn.default.func,color:hn.default.oneOf(["primary","danger","text","ghost","success","warning"]),size:hn.default.oneOf(["xs","s","m"]),flush:hn.default.oneOf(["left","right","both"]),isDisabled:hn.default.bool,isLoading:hn.default.bool,isSelected:hn.default.bool,target:hn.default.string,rel:hn.default.string,type:hn.default.oneOf(["button","submit"]),buttonRef:hn.default.any,contentProps:hn.default.any,iconType:hn.default.oneOfType([hn.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,hn.default.string.isRequired,hn.default.elementType.isRequired]),iconSide:hn.default.oneOf(["left","right"]),textProps:hn.default.shape({className:hn.default.string,"aria-label":hn.default.string,"data-test-subj":hn.default.string,ref:hn.default.any,"data-text":hn.default.string}),iconSize:hn.default.oneOf(["s","m"]),className:hn.default.string,"aria-label":hn.default.string,"data-test-subj":hn.default.string,isActive:hn.default.bool,isPlaceholder:hn.default.bool,pageIndex:hn.default.number.isRequired,totalPages:hn.default.number};var wvr=k(L()),vA=k(mt()),Ive=k(Ct());function LK(){return LK=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ISt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var DK=5,PSt=Math.floor(DK*.5),yA=function(t){var n=t.className,r=t.pageCount,o=r===void 0?1:r,i=t.activePage,u=i===void 0?0:i,f=t.onPageClick,h=f===void 0?function(){}:f,y=t.compressed,O=t["aria-controls"],S=t.responsive,I=S===void 0?["xs","s"]:S,A=jSt(t,_St),C=c5(I,!!I),M=y||C,F=function(xt,dr){if(xt.preventDefault(),O){var yr=document.getElementById(O);yr&&yr.focus()}h(dr)},R=(0,Cve.default)("euiPagination",n),B=(o<1||M)&&a(py,{type:"first",ariaControls:O,onClick:function(xt){return F(xt,0)},disabled:u===0}),Y=a(py,{type:"previous",ariaControls:O,onClick:function(xt){return F(xt,u-1)},disabled:u===0}),X=a(py,{type:"next",ariaControls:O,onClick:function(xt){return F(xt,u+1)},disabled:u===-1||u===o-1}),le=(o<1||M)&&a(py,{type:"last",ariaControls:O,onClick:function(xt){return F(xt,o?o-1:-1)},disabled:u===-1||u===o-1}),Z;if(o){var K={activePage:u,ariaControls:O,safeClick:F,pageCount:o};if(M)Z=a(ar,{size:"s",className:"euiPagination__compressedText"},a(At,{token:"euiPagination.pageOfTotalCompressed",default:"{page} of {total}",values:{page:a("span",null,u+1),total:a("span",null,o)}}));else{for(var de=[],se=Math.max(0,Math.min(u-PSt,o-DK)),_e=Math.min(o,se+DK),be=se,Pe=0;be<_e;be++,Pe++)de.push(a(N_,Tp({pageIndex:be,key:be},K)));var Ue=[];se>0&&(Ue.push(a(N_,Tp({pageIndex:0,key:0},K))),se>1&&se!==2?Ue.push(a(At,{key:"startingEllipses",token:"euiPagination.firstRangeAriaLabel",default:"Skipping pages 2 to {lastPage}",values:{lastPage:se}},function(ht){return a("li",{"aria-label":ht,className:"euiPaginationButton-isPlaceholder euiPagination__item"},"\u2026")})):se===2&&Ue.push(a(N_,Tp({pageIndex:1,key:1},K))));var Le=[];_ee.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function zSt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var sm=function(t){var n=t.activePage,r=t.itemsPerPage,o=r===void 0?50:r,i=t.itemsPerPageOptions,u=i===void 0?[10,20,50,100]:i,f=t.showPerPageOptions,h=f===void 0?!0:f,y=t.onChangeItemsPerPage,O=y===void 0?function(){}:y,S=t.onChangePage,I=t.pageCount,A=RSt(t,kSt),C=(0,zp.useState)(!1),M=ESt(C,2),F=M[0],R=M[1],B=(0,zp.useCallback)(function(){R(function(K){return!K})},[]),Y=(0,zp.useCallback)(function(){R(!1)},[]),X=a(za,{size:"xs",color:"text",iconType:"arrowDown",iconSide:"right","data-test-subj":"tablePaginationPopoverButton",onClick:B},o===0?a(At,{token:"euiTablePagination.allRows",default:"Showing all rows"}):a(zp.default.Fragment,null,a(At,{token:"euiTablePagination.rowsPerPage",default:"Rows per page"}),": ",o)),le=(0,zp.useMemo)(function(){return u.map(function(K){return a(uu,{key:K,icon:K===o?"check":"empty",onClick:function(){Y(),O(K)},"data-test-subj":"tablePagination-".concat(K,"-rows")},K===0?a(At,{token:"euiTablePagination.rowsPerPageOptionShowAllRows",default:"Show all rows"}):a(At,{token:"euiTablePagination.rowsPerPageOption",values:{rowsPerPage:K},default:"{rowsPerPage} rows"}))})},[u,o,O,Y]),Z=a(lu,{button:X,isOpen:F,closePopover:Y,panelPaddingSize:"none",anchorPosition:"upRight"},a(Mp,{items:le}));return a(to,{justifyContent:"spaceBetween",alignItems:"center",responsive:!1,wrap:!0,gutterSize:"s",className:"eui-xScroll"},a(Mt,{grow:!1},h&&Z),a(Mt,{grow:!1},o>0&&a(yA,NK({pageCount:I,activePage:n,onPageClick:S},A))))};sm.propTypes={showPerPageOptions:Rp.default.bool,itemsPerPage:Rp.default.number,itemsPerPageOptions:Rp.default.arrayOf(Rp.default.number.isRequired),onChangeItemsPerPage:Rp.default.func,onChangePage:Rp.default.func,"aria-controls":Rp.default.string,"aria-label":Rp.default.string};var Kvr=k(L()),bc=k(mt()),Mve=k(Ct());var LSt=["isSelected","children","className","disabled","href","target","rel","prepend","append"];function bA(){return bA=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function NSt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var FK=function(t){var n=t.isSelected,r=t.children,o=t.className,i=t.disabled,u=t.href,f=t.target,h=t.rel,y=t.prepend,O=t.append,S=DSt(t,LSt),I=!u||da(u),A=i||!I,C=(0,Mve.default)("euiTab",o,{"euiTab-isSelected":n,"euiTab-isDisabled":A}),M=y&&a("span",{className:"euiTab__prepend"},y),F=O&&a("span",{className:"euiTab__append"},O);if(u&&!A){var R=ni({href:u,target:f,rel:h});return a("a",bA({role:"tab","aria-selected":!!n,className:C,href:u,target:f,rel:R},S),M,a("span",{className:"euiTab__content"},r),F)}return a("button",bA({role:"tab","aria-selected":!!n,type:"button",className:C,disabled:A},S),M,a("span",{className:"euiTab__content"},r),F)};FK.propTypes={isSelected:bc.default.bool,disabled:bc.default.bool,prepend:bc.default.node,append:bc.default.node,className:bc.default.string,"aria-label":bc.default.string,"data-test-subj":bc.default.string,href:bc.default.string,onClick:bc.default.func};var Tve=k(L()),Rve=k(Ct());var FSt=["children","className","bottomBorder","expand","size"];function WK(){return WK=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function BSt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var zve={s:"euiTabs--small",m:null,l:"euiTabs--large",xl:"euiTabs--xlarge"},iyr=Ht(zve),BK=(0,Tve.forwardRef)(function(e,t){var n=e.children,r=e.className,o=e.bottomBorder,i=o===void 0?!0:o,u=e.expand,f=u===void 0?!1:u,h=e.size,y=h===void 0?"m":h,O=WSt(e,FSt),S=(0,Rve.default)("euiTabs",zve[y],{"euiTabs--expand":f,"euiTabs--bottomBorder":i},r);return a("div",WK({ref:t,className:S},n&&{role:"tablist"},O),n)});BK.displayName="EuiTabs";var xA=k(L()),_r=k(mt());function wA(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?wA=function(n){return typeof n}:wA=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},wA(e)}var HSt=["className","expand","initialSelectedTab","onTabClick","selectedTab","size","tabs","autoFocus"],VSt=["id","name","content"];function HK(){return HK=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function qSt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function USt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Fve(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function OA(e){return OA=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},OA(e)}function Vd(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var fy=function(e){JSt(n,e);var t=GSt(n);function n(r){var o;USt(this,n),o=t.call(this,r),Vd(um(o),"rootId",Lr()()),Vd(um(o),"tabsRef",(0,xA.createRef)()),Vd(um(o),"focusTab",function(){var y=o.tabsRef.current.querySelector("#".concat(o.state.selectedTabId));y.focus()}),Vd(um(o),"initializeFocus",function(){!o.state.inFocus&&o.props.autoFocus==="selected"&&o.setState({inFocus:!0},function(){o.focusTab()})}),Vd(um(o),"removeFocus",function(y){var O=y.currentTarget,S=y.relatedTarget;O.contains(S)===!1&&o.setState({inFocus:!1})}),Vd(um(o),"onTabClick",function(y){var O=o.props,S=O.onTabClick,I=O.selectedTab;S&&S(y),I||o.setState({selectedTabId:y.id},function(){o.focusTab()})});var i=r.initialSelectedTab,u=r.selectedTab,f=r.tabs,h;return u||(h=i&&i.id||f[0].id),o.state={selectedTabId:h,inFocus:!1},o}return $St(n,[{key:"componentDidMount",value:function(){this.tabsRef.current&&this.tabsRef.current.addEventListener("focusout",this.removeFocus)}},{key:"componentWillUnmount",value:function(){this.tabsRef.current&&this.tabsRef.current.removeEventListener("focusout",this.removeFocus)}},{key:"render",value:function(){var o=this,i=this.props,u=i.className,f=i.expand,h=i.initialSelectedTab,y=i.onTabClick,O=i.selectedTab,S=i.size,I=i.tabs,A=i.autoFocus,C=Nve(i,HSt),M=O||I.find(function(Y){return Y.id===o.state.selectedTabId}),F=M,R=F.content,B=F.id;return a("div",HK({className:u},C),a(BK,{ref:this.tabsRef,expand:f,size:S,onFocus:this.initializeFocus},I.map(function(Y){var X=Y.id,le=Y.name,Z=Y.content,K=Nve(Y,VSt),de=Dve(Dve({key:X,id:X},K),{},{onClick:function(){return o.onTabClick(Y)},isSelected:Y===M,"aria-controls":"".concat(o.rootId)});return a(FK,de,le)})),a("div",{role:"tabpanel",id:"".concat(this.rootId),"aria-labelledby":B},R))}}]),n}(xA.Component);Vd(fy,"defaultProps",{autoFocus:"initial"});fy.propTypes={className:_r.default.string,"aria-label":_r.default.string,"data-test-subj":_r.default.string,autoFocus:_r.default.oneOf(["initial","selected"]),expand:_r.default.bool,initialSelectedTab:_r.default.shape({id:_r.default.string.isRequired,name:_r.default.node.isRequired,content:_r.default.node.isRequired,isSelected:_r.default.bool,disabled:_r.default.bool,prepend:_r.default.node,append:_r.default.node,className:_r.default.string,"aria-label":_r.default.string,"data-test-subj":_r.default.string}),onTabClick:_r.default.func,selectedTab:_r.default.shape({id:_r.default.string.isRequired,name:_r.default.node.isRequired,content:_r.default.node.isRequired,isSelected:_r.default.bool,disabled:_r.default.bool,prepend:_r.default.node,append:_r.default.node,className:_r.default.string,"aria-label":_r.default.string,"data-test-subj":_r.default.string}),size:_r.default.oneOf(["s","m","l","xl"]),tabs:_r.default.arrayOf(_r.default.shape({id:_r.default.string.isRequired,name:_r.default.node.isRequired,content:_r.default.node.isRequired,isSelected:_r.default.bool,disabled:_r.default.bool,prepend:_r.default.node,append:_r.default.node,className:_r.default.string,"aria-label":_r.default.string,"data-test-subj":_r.default.string}).isRequired).isRequired};var Bve=k(L()),Hve=k(mt());function _A(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?_A=function(n){return typeof n}:_A=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},_A(e)}function YSt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Wve(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function SA(e){return SA=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},SA(e)}function W_(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var B_=function(e){ZSt(n,e);var t=ejt(n);function n(r){var o;return YSt(this,n),o=t.call(this,r),W_(F_(o),"delayID",void 0),W_(F_(o),"toBeDelayed",!0),W_(F_(o),"startDelaying",function(){window.clearTimeout(o.delayID),o.toBeDelayed=!0,o.delayID=window.setTimeout(o.stopDelaying,o.props.delay)}),W_(F_(o),"stopDelaying",function(){window.clearTimeout(o.delayID),o.toBeDelayed=!1,o.shouldUpdate()}),o.state={toggle:!1},o}return QSt(n,[{key:"shouldUpdate",value:function(){this.setState(function(o){var i=o.toggle;return{toggle:!i}})}},{key:"componentDidMount",value:function(){this.startDelaying()}},{key:"shouldComponentUpdate",value:function(){return this.toBeDelayed&&this.startDelaying(),!0}},{key:"componentWillUnmount",value:function(){this.stopDelaying()}},{key:"componentDidUpdate",value:function(){this.toBeDelayed=!0}},{key:"render",value:function(){return this.toBeDelayed?null:this.props.children}}]),n}(Bve.Component);W_(B_,"defaultProps",{delay:500});B_.propTypes={delay:Hve.default.number.isRequired};var _yr=k(L()),qd=k(mt()),qve=k(Ct());var njt={name:"1qhojri-inherit",styles:"font-size:inherit;label:inherit;"},ojt={name:"j8uhck-euiHealth",styles:"display:inline-block;label:euiHealth;"},Vve=function(t){return{euiHealth:ojt,xs:Fe(uc(t,"xs"),";;label:xs;"),s:Fe(uc(t,"s"),";;label:s;"),m:Fe(uc(t,"m"),";;label:m;"),inherit:njt}};var ijt=["children","className","color","textSize"];function UK(){return UK=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ljt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var cm=function(t){var n=t.children,r=t.className,o=t.color,i=t.textSize,u=i===void 0?"s":i,f=ajt(t,ijt),h=en(),y=Vve(h),O=[y.euiHealth,y[u]],S=(0,qve.default)("euiHealth",r);return a("div",UK({css:O,className:S},f),a(to,{gutterSize:"xs",alignItems:"center",responsive:!1},a(Mt,{grow:!1},a(ir,{type:"dot",color:o})),a(Mt,{grow:!1},n)))};cm.propTypes={className:qd.default.string,"aria-label":qd.default.string,"data-test-subj":qd.default.string,color:qd.default.oneOfType([qd.default.string.isRequired,qd.default.any.isRequired]),textSize:qd.default.any};var Jve=k(L());var Tyr=k(L());var sjt=Fe(".euiScreenReaderOnly{",Od(),";};label:globalStyles;"),Uve=function(){return a($P,{styles:sjt})};var $ve=k(L());var jA=function(t){var n=t.cache,r=t.children;return r&&n?a(sN,{value:n},r):a($ve.default.Fragment,null,r)};var ujt=function(t){return t.hasOwnProperty("key")},Nr=function(t){var n=t.cache,r=t.theme,o=r===void 0?mv:r,i=t.globalStyles,u=i===void 0?m0e:i,f=t.utilityClasses,h=f===void 0?Uve:f,y=t.colorMode,O=t.modify,S=t.children,I,A,C;return n&&(ujt(n)?I=n:(I=n.default,A=n.global,C=n.utility)),a(jA,{cache:I},a(sF,{theme:o??void 0,colorMode:y,modify:O},o&&a(Jve.default.Fragment,null,a(jA,{cache:A,children:u&&a(u,null)}),a(jA,{cache:C,children:h&&a(h,null)})),a(uF,null,S)))};var dy=k(L()),ai=k(mt()),PA=k(Ct());function IA(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?IA=function(n){return typeof n}:IA=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},IA(e)}var cjt=["children","className","items","display","expandByDefault","showExpansionArrows"];function kA(){return kA=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function fjt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function djt(e){return vjt(e)||gjt(e)||hjt(e)||mjt()}function mjt(){throw new TypeError(`Invalid attempt to spread non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function hjt(e,t){if(e){if(typeof e=="string")return $K(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return $K(e,t)}}function gjt(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function vjt(e){if(Array.isArray(e))return $K(e)}function $K(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function EA(e){return EA=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},EA(e)}function Oc(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Qve=(0,dy.createContext)("");function Xve(e){return e.hasOwnProperty("aria-label")}function Kve(e,t,n){return e??(t===""?n():t)}var Yve={default:null,compressed:"euiTreeView--compressed"},H_=function(e){wjt(n,e);var t=Ojt(n);function n(){var r;yjt(this,n);for(var o=arguments.length,i=new Array(o),u=0;u1&&arguments[1]!==void 0?arguments[1]:!1,y=r.state.openItems.indexOf(f.id);r.setState({expandChildNodes:!1}),f.isExpanded=!f.isExpanded,!h&&f.callback!==void 0&&f.callback(),r.isNodeOpen(f)?r.setState({openItems:r.state.openItems.filter(function(O,S){return S!==y})}):r.setState(function(O){return{openItems:[].concat(djt(O.openItems),[f.id]),activeItem:f.id}})}),Oc(wc(r),"isNodeOpen",function(f){return r.state.openItems.includes(f.id)}),Oc(wc(r),"onKeyDown",function(f,h){switch(f.key){case xn.ARROW_DOWN:{var y=Array.from(document.querySelectorAll('[data-test-subj="euiTreeViewButton-'.concat(r.state.treeID,'"]'))),O=y.indexOf(f.currentTarget);if(O>-1){var S=y[O+1];S&&(f.preventDefault(),f.stopPropagation(),S.focus())}break}case xn.ARROW_UP:{var I=Array.from(document.querySelectorAll('[data-test-subj="euiTreeViewButton-'.concat(r.state.treeID,'"]'))),A=I.indexOf(f.currentTarget);if(A>-1){var C=I[A+-1];C&&(f.preventDefault(),f.stopPropagation(),C.focus())}break}case xn.ARROW_RIGHT:{r.isNodeOpen(h)||(f.preventDefault(),f.stopPropagation(),r.handleNodeClick(h,!0));break}case xn.ARROW_LEFT:r.isNodeOpen(h)&&(f.preventDefault(),f.stopPropagation(),r.handleNodeClick(h,!0));default:break}}),Oc(wc(r),"onChildrenKeydown",function(f,h){f.key===xn.ARROW_LEFT&&(f.preventDefault(),f.stopPropagation(),r.buttonRef[h].focus())}),r}return bjt(n,[{key:"componentDidUpdate",value:function(o){this.props.id!==o.id&&this.setState({treeID:Kve(this.props.id,this.context,this.treeIdGenerator)})}},{key:"render",value:function(){var o=this,i=this.props,u=i.children,f=i.className,h=i.items,y=i.display,O=y===void 0?"default":y,S=i.expandByDefault,I=i.showExpansionArrows,A=pjt(i,cjt),C=(0,PA.default)("euiTreeView",O?Yve[O]:null,{"euiTreeView--withArrows":I},f),M="".concat(this.state.treeID,"--instruction");return a(Qve.Provider,{value:this.state.treeID},a(ar,{size:O==="compressed"?"s":"m",className:"euiTreeView__wrapper"},!this.isNested&&a(At,{token:"euiTreeView.listNavigationInstructions",default:"You can quickly navigate this list using arrow keys."},function(F){return a(Un,null,a("p",{id:M},F))}),a("ul",kA({className:C,id:this.isNested?void 0:this.state.treeID,"aria-describedby":this.isNested?void 0:M},A),h.map(function(F,R){var B=F.id,Y=o.treeIdGenerator(B);return a(nu,{key:F.id+R,fallback:typeof F.label=="string"?F.label:""},function(X,le){return a(At,{key:F.id+R,token:"euiTreeView.ariaLabel",default:"{nodeLabel} child of {ariaLabel}",values:{nodeLabel:le,ariaLabel:Xve(A)?A["aria-label"]:""}},function(Z){var K=Xve(A)?{"aria-label":Z}:{"aria-labelledby":"".concat(B," ").concat(A["aria-labelledby"])},de=(0,PA.default)("euiTreeView__node",O?Yve[O]:null,{"euiTreeView__node--expanded":o.isNodeOpen(F)}),se=(0,PA.default)("euiTreeView__nodeInner",I&&F.children?"euiTreeView__nodeInner--withArrows":null,o.state.activeItem===F.id?"euiTreeView__node--active":null,F.className?F.className:null);return a(dy.default.Fragment,null,a("li",{className:de},a("button",{id:B,"aria-controls":Y,"aria-expanded":o.isNodeOpen(F),ref:function(be){return o.setButtonRef(be,R)},"data-test-subj":"euiTreeViewButton-".concat(o.state.treeID),onKeyDown:function(be){return o.onKeyDown(be,F)},onClick:function(){return o.handleNodeClick(F)},className:se},I&&F.children?a(ir,{className:"euiTreeView__expansionArrow",size:O==="compressed"?"s":"m",type:o.isNodeOpen(F)?"arrowDown":"arrowRight"}):null,F.icon&&!F.useEmptyIcon?a("span",{className:"euiTreeView__iconWrapper"},o.isNodeOpen(F)&&F.iconWhenExpanded?F.iconWhenExpanded:F.icon):null,F.useEmptyIcon&&!F.icon?a("span",{className:"euiTreeView__iconPlaceholder"}):null,a("span",{ref:X,className:"euiTreeView__nodeLabel"},F.label)),a("div",{id:Y,onKeyDown:function(be){return o.onChildrenKeydown(be,R)}},F.children&&o.isNodeOpen(F)?a(n,kA({items:F.children,display:O,showExpansionArrows:I,expandByDefault:o.state.expandChildNodes},K)):null)))})})}))))}}]),n}(dy.Component);Oc(H_,"contextType",Qve);H_.propTypes={className:ai.default.string,"data-test-subj":ai.default.string,items:ai.default.arrayOf(ai.default.shape({children:ai.default.arrayOf(ai.default.any.isRequired),label:ai.default.node.isRequired,id:ai.default.string.isRequired,icon:ai.default.element,iconWhenExpanded:ai.default.element,useEmptyIcon:ai.default.bool,isExpanded:ai.default.bool,className:ai.default.string,callback:ai.default.func}).isRequired).isRequired,display:ai.default.oneOf(["default","compressed"]),expandByDefault:ai.default.bool,showExpansionArrows:ai.default.bool,"aria-label":ai.default.string,"aria-labelledby":ai.default.string};var gu=k(L()),Qt=k(mt()),dye=k(Ct());var Zve=k(L()),eye=k(Ct());var GK=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,r=t.searchableLabel||t.label;return n?r.trim().toLowerCase():r},Sjt=function(t,n){var r=t.toLowerCase();return n.find(function(o){return GK(o)===r})},jjt=function(t,n,r,o,i){if(i){var u=Sjt(GK(n,!1),i);if(u)return!1}if(o){t.push(n);return}if(!r){t.push(n);return}var f=GK(n);f.includes(r)&&t.push(n)},my=function(t,n,r,o){var i=n.toLowerCase(),u=[];return t.forEach(function(f){jjt(u,f,i,r,o)}),u};var Ijt=["onChange","options","value","placeholder","isPreFiltered","listId","className"];function XK(){return XK=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function kjt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var KK=function(t){var n=t.onChange,r=t.options,o=t.value,i=t.placeholder,u=t.isPreFiltered,f=t.listId,h=t.className,y=Pjt(t,Ijt),O=(0,Zve.useCallback)(function(A){var C=A.target.value,M=my(r,C,u);n(C,M)},[r,u,n]),S=(0,eye.default)("euiSelectableSearch",h),I=f?{role:"combobox","aria-autocomplete":"list","aria-expanded":!0,"aria-controls":f,"aria-owns":f}:void 0;return a(S_,XK({className:S,placeholder:i,value:o,onChange:O,incremental:!0,fullWidth:!0,autoComplete:"off","aria-haspopup":"listbox"},I,y))};var y2r=k(L()),V_=k(mt()),tye=k(Ct());var Ejt=["children","className","bordered"];function YK(){return YK=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ajt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var CA=function(t){var n=t.children,r=t.className,o=t.bordered,i=o===void 0?!1:o,u=Cjt(t,Ejt),f=(0,tye.default)("euiSelectableMessage",{"euiSelectableMessage--bordered":i},r);return a(ar,YK({color:"subdued",size:"xs",className:f},u),n)};CA.propTypes={className:V_.default.string,"aria-label":V_.default.string,"data-test-subj":V_.default.string,bordered:V_.default.bool};var gy=k(L()),bt=k(mt()),uye=k(Ct());var MA=k(Ct()),Fr=k(mt()),iye=k(L());function AA(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?AA=function(n){return typeof n}:AA=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},AA(e)}var Mjt=["children","className","disabled","checked","isFocused","showIcons","prepend","append","allowExclusions","onFocusBadge","paddingSize","role","searchable","textWrap"],Tjt=["children","className"];function q_(){return q_=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Rjt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function zjt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function nye(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function TA(e){return TA=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},TA(e)}function oye(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Hjt(e){return e?e==="on"?{icon:"check",color:"text"}:{icon:"cross",color:"text"}:{icon:"empty"}}var aye={none:null,s:"euiSelectableListItem--paddingSmall"},M2r=Ht(aye),RA=function(e){Djt(n,e);var t=Njt(n);function n(r){return zjt(this,n),t.call(this,r)}return Ljt(n,[{key:"render",value:function(){var o=this.props,i=o.children,u=o.className,f=o.disabled,h=o.checked,y=o.isFocused,O=o.showIcons,S=o.prepend,I=o.append,A=o.allowExclusions,C=o.onFocusBadge,M=o.paddingSize,F=M===void 0?"s":M,R=o.role,B=R===void 0?"option":R,Y=o.searchable,X=o.textWrap,le=rye(o,Mjt),Z=(0,MA.default)("euiSelectableListItem",{"euiSelectableListItem-isFocused":y},aye[F],u),K=(0,MA.default)("euiSelectableListItem__text",oye({},"euiSelectableListItem__text--".concat(X),X)),de;if(O){var se=Hjt(h),_e=se.icon,be=se.color;de=a(ir,{className:"euiSelectableListItem__icon",color:be,type:_e})}var Pe,Ue;A&&h==="on"?(Pe=a(At,{token:"euiSelectableListItem.includedOption",default:"Selected option."}),Ue=a(At,{token:"euiSelectableListItem.includedOptionInstructions",default:"To exclude this option, press enter."})):A&&h==="off"?(Pe=a(At,{token:"euiSelectableListItem.excludedOption",default:"Excluded option."}),Ue=a(At,{token:"euiSelectableListItem.excludedOptionInstructions",default:"To uncheck this option, press enter."})):A&&!h&&(Ue=a(At,{token:"euiSelectableListItem.unckeckedOptionInstructions",default:"To select this option, press enter."}));var Le=!f&&typeof h=="string";!A&&Le&&(Pe=a(At,{token:"euiSelectableListItem.checkedOption",default:"Checked option."}),Ue=Y?a(At,{token:"euiSelectableListItem.checkedOptionInstructions",default:"To uncheck this option, press enter."}):void 0);var Ge;S&&(Ge=a("span",{className:"euiSelectableListItem__prepend"},S));var Ke;if(I||C){var rt,ot={"aria-hidden":!0,iconType:"returnKey",iconSide:"left",color:"hollow"};if(C===!0)rt=a(Oo,q_({className:"euiSelectableListItem__onFocusBadge"},ot));else if(C&&C!==!1){var dt=C.children,jt=C.className,Ze=rye(C,Tjt);rt=a(Oo,q_({className:(0,MA.default)("euiSelectableListItem__onFocusBadge",jt)},ot,Ze),dt)}(I||y&&!f)&&(Ke=a("span",{className:"euiSelectableListItem__append"},I," ",y&&!f?rt:null))}var Xt=(Ue||Pe)&&a(Un,null,a("div",null,Pe||Ue?" - ":null,Pe,Pe&&Ue?" ":null,Ue));return a("li",q_({role:B,"data-test-selected":Le,"aria-checked":B==="option"?Le:void 0,"aria-selected":!f&&y,className:Z,"aria-disabled":f},le),a("span",{className:"euiSelectableListItem__content"},de,Ge,a("span",{className:K},i,Xt),Ke))}}]),n}(iye.Component);oye(RA,"defaultProps",{showIcons:!0,onFocusBadge:!0,textWrap:"truncate"});RA.propTypes={className:Fr.default.string,"aria-label":Fr.default.string,"data-test-subj":Fr.default.string,children:Fr.default.node,checked:Fr.default.oneOf(["on","off",void 0]),showIcons:Fr.default.bool,isFocused:Fr.default.bool,disabled:Fr.default.bool,prepend:Fr.default.node,append:Fr.default.node,allowExclusions:Fr.default.bool,onFocusBadge:Fr.default.oneOfType([Fr.default.bool.isRequired,Fr.default.shape({iconType:Fr.default.oneOfType([Fr.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,Fr.default.string.isRequired,Fr.default.elementType.isRequired]),iconSide:Fr.default.oneOf(["left","right"]),color:Fr.default.oneOfType([Fr.default.string.isRequired,Fr.default.any.isRequired]),isDisabled:Fr.default.bool,closeButtonProps:Fr.default.any,className:Fr.default.string,"aria-label":Fr.default.string,"data-test-subj":Fr.default.string,iconOnClick:Fr.default.func,iconOnClickAriaLabel:Fr.default.any,onClick:Fr.default.func,onClickAriaLabel:Fr.default.any,href:Fr.default.string,target:Fr.default.string,rel:Fr.default.string}).isRequired]),paddingSize:Fr.default.any,searchable:Fr.default.bool,role:Fr.default.any,textWrap:Fr.default.oneOf(["truncate","wrap"])};function zA(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?zA=function(n){return typeof n}:zA=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},zA(e)}var Vjt=["data"],qjt=["label","isGroupLabel","checked","disabled","prepend","append","ref","key","searchableLabel","data"],Ujt=["className","options","searchValue","onOptionClick","renderOption","height","windowProps","rowHeight","activeOptionIndex","makeOptionId","showIcons","singleSelection","visibleOptions","allowExclusions","bordered","paddingSize","searchable","onFocusBadge","listId","setActiveOptionIndex","aria-label","aria-labelledby","aria-describedby","role","isVirtualized","textWrap"];function lye(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function U_(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function $jt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function Jjt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function sye(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function LA(e){return LA=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},LA(e)}function ws(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var $_=function(e){Xjt(n,e);var t=Kjt(n);function n(r){var o;return Jjt(this,n),o=t.call(this,r),ws(hu(o),"listRef",null),ws(hu(o),"listBoxRef",null),ws(hu(o),"setListRef",function(i){o.listRef=i,i&&o.props.activeOptionIndex&&i.scrollToItem(o.props.activeOptionIndex,"auto")}),ws(hu(o),"removeScrollableTabStop",function(i){i&&i.setAttribute("tabindex","-1")}),ws(hu(o),"setListBoxRef",function(i){o.listBoxRef=i;var u=o.props,f=u.listId,h=u.searchable,y=u.singleSelection,O=u["aria-label"],S=u["aria-labelledby"],I=u["aria-describedby"];i&&(i.setAttribute("id",f),i.setAttribute("role","listbox"),h!==!0&&(i.setAttribute("tabindex","0"),y!=="always"&&y!==!0&&i.setAttribute("aria-multiselectable","true")),typeof O=="string"?i.setAttribute("aria-label",O):typeof S=="string"&&i.setAttribute("aria-labelledby",S),typeof I=="string"&&i.setAttribute("aria-labelledby",I))}),ws(hu(o),"ListRow",(0,gy.memo)(function(i){var u=i.data,f=i.index,h=i.style,y=u[f],O=y.data,S=ZK(y,Vjt),I=y.label,A=y.isGroupLabel,C=y.checked,M=y.disabled,F=y.prepend,R=y.append,B=y.ref,Y=y.key,X=y.searchableLabel,le=y.data,Z=ZK(y,qjt),K=o.props,de=K.activeOptionIndex,se=K.allowExclusions,_e=K.onFocusBadge,be=K.paddingSize,Pe=K.searchValue,Ue=K.showIcons,Le=K.makeOptionId,Ge=K.renderOption,Ke=K.setActiveOptionIndex,rt=K.searchable,ot=K.textWrap;if(A)return a("li",hy({role:"presentation",className:"euiSelectableList__groupLabel",style:h},Z),F,I,R);var dt=u.filter(function(Ze){return Ze.isGroupLabel}).length,jt=Le(f);return a(RA,hy({key:jt,id:jt,style:h,onMouseDown:function(){Ke(f)},onClick:function(Xt){Xt.persist(),o.onAddOrRemoveOption(y,Xt)},ref:B?B.bind(null,f):void 0,isFocused:de===f,title:X||I,checked:C,disabled:M,prepend:F,append:R,"aria-posinset":f+1-dt,"aria-setsize":u.length-dt,onFocusBadge:_e,allowExclusions:se,showIcons:Ue,paddingSize:be,searchable:rt,textWrap:ot},Z),Ge?Ge(U_(U_({},S),O),o.props.searchValue):a(fu,{search:Pe},I))},Nge)),ws(hu(o),"onAddOrRemoveOption",function(i,u){if(!i.disabled){var f=o.props,h=f.allowExclusions,y=f.options,O=f.visibleOptions,S=O===void 0?y:O;o.props.setActiveOptionIndex(S.findIndex(function(I){var A=I.label;return A===i.label}),function(){i.checked==="on"&&h?o.onExcludeOption(i,u):i.checked==="on"||i.checked==="off"?o.onRemoveOption(i,u):o.onAddOption(i,u)})}}),ws(hu(o),"onAddOption",function(i,u){var f=o.props,h=f.onOptionClick,y=f.options,O=f.singleSelection,S=y.map(function(I){var A=U_({},I);return O&&delete A.checked,I===i&&(A.checked="on"),A});h(S,u)}),ws(hu(o),"onRemoveOption",function(i,u){var f=o.props,h=f.onOptionClick,y=f.singleSelection,O=f.options,S=O.map(function(I){var A=U_({},I);return I===i&&y!=="always"&&delete A.checked,A});h(S,u)}),ws(hu(o),"onExcludeOption",function(i,u){var f=o.props,h=f.onOptionClick,y=f.options;i.checked="off";var O=y.map(function(S){var I=U_({},S);return S===i&&(I.checked="off"),I});h(O,u)}),o}return Gjt(n,[{key:"componentDidUpdate",value:function(){var o=this.props.activeOptionIndex;this.listBoxRef&&this.props.searchable!==!0&&this.listBoxRef.setAttribute("aria-activedescendant","".concat(this.props.makeOptionId(o))),this.listRef&&typeof this.props.activeOptionIndex<"u"&&this.listRef.scrollToItem(this.props.activeOptionIndex,"auto")}},{key:"render",value:function(){var o=this,i=this.props,u=i.className,f=i.options,h=i.searchValue,y=i.onOptionClick,O=i.renderOption,S=i.height,I=i.windowProps,A=i.rowHeight,C=i.activeOptionIndex,M=i.makeOptionId,F=i.showIcons,R=i.singleSelection,B=i.visibleOptions,Y=i.allowExclusions,X=i.bordered,le=i.paddingSize,Z=i.searchable,K=i.onFocusBadge,de=i.listId,se=i.setActiveOptionIndex,_e=i["aria-label"],be=i["aria-labelledby"],Pe=i["aria-describedby"],Ue=i.role,Le=i.isVirtualized,Ge=i.textWrap,Ke=ZK(i,Ujt),rt=B||f,ot=S==="full",dt=ot?!1:S;if(dt===void 0){var jt=7,Ze=rt.length,Xt=rt.length>jt;Xt?dt=(jt-.5)*A:dt=Ze*A}var at=(0,uye.default)("euiSelectableList",{"euiSelectableList-fullHeight":ot,"euiSelectableList-bordered":X},u);return a("div",hy({className:at},Ke),Le?a(SG,{disableHeight:!ot},function(lr){var ht=lr.width,xt=lr.height;return a(tA,hy({ref:o.setListRef,outerRef:o.removeScrollableTabStop,className:"euiSelectableList__list","data-skip-axe":"scrollable-region-focusable",width:ht,height:dt||xt,itemCount:rt.length,itemData:rt,itemSize:A,innerElementType:"ul",innerRef:o.setListBoxRef},I),o.ListRow)}):a("div",{className:"euiSelectableList__list",ref:this.removeScrollableTabStop},a("ul",{ref:this.setListBoxRef},rt.map(function(lr,ht){return gy.default.createElement(o.ListRow,{key:ht,data:rt,index:ht},null)}))))}}]),n}(gy.Component);ws($_,"defaultProps",{rowHeight:32,searchValue:"",isVirtualized:!0});$_.propTypes={className:bt.default.string,"aria-label":bt.default.string,"data-test-subj":bt.default.string,activeOptionIndex:bt.default.number,showIcons:bt.default.bool,singleSelection:bt.default.oneOfType([bt.default.oneOf(["always"]),bt.default.bool.isRequired]),windowProps:bt.default.any,bordered:bt.default.bool,onFocusBadge:bt.default.oneOfType([bt.default.bool.isRequired,bt.default.shape({iconType:bt.default.oneOfType([bt.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,bt.default.string.isRequired,bt.default.elementType.isRequired]),iconSide:bt.default.oneOf(["left","right"]),color:bt.default.oneOfType([bt.default.string.isRequired,bt.default.any.isRequired]),isDisabled:bt.default.bool,closeButtonProps:bt.default.any,className:bt.default.string,"aria-label":bt.default.string,"data-test-subj":bt.default.string,iconOnClick:bt.default.func,iconOnClickAriaLabel:bt.default.any,onClick:bt.default.func,onClickAriaLabel:bt.default.any,href:bt.default.string,target:bt.default.string,rel:bt.default.string}).isRequired]),paddingSize:bt.default.any,textWrap:bt.default.oneOf(["truncate","wrap"]),isVirtualized:bt.default.oneOfType([bt.default.oneOf([!0]),bt.default.oneOf([!1]).isRequired]),rowHeight:bt.default.number,options:bt.default.arrayOf(bt.default.shape({isGroupLabel:bt.default.oneOfType([bt.default.oneOf([!0]).isRequired,bt.default.oneOf([!1])]),className:bt.default.string,"aria-label":bt.default.string,"data-test-subj":bt.default.string,label:bt.default.string,searchableLabel:bt.default.string,key:bt.default.string,checked:bt.default.oneOf(["on","off",void 0]),disabled:bt.default.bool,prepend:bt.default.node,append:bt.default.node,ref:bt.default.func,data:bt.default.shape({})}).isRequired).isRequired,visibleOptions:bt.default.arrayOf(bt.default.shape({isGroupLabel:bt.default.oneOfType([bt.default.oneOf([!0]).isRequired,bt.default.oneOf([!1])]),className:bt.default.string,"aria-label":bt.default.string,"data-test-subj":bt.default.string,label:bt.default.string,searchableLabel:bt.default.string,key:bt.default.string,checked:bt.default.oneOf(["on","off",void 0]),disabled:bt.default.bool,prepend:bt.default.node,append:bt.default.node,ref:bt.default.func,data:bt.default.shape({})}).isRequired),searchValue:bt.default.string.isRequired,onOptionClick:bt.default.func.isRequired,renderOption:bt.default.func,height:bt.default.oneOfType([bt.default.number.isRequired,bt.default.oneOf(["full"])]),allowExclusions:bt.default.bool,searchable:bt.default.bool,makeOptionId:bt.default.func.isRequired,listId:bt.default.string.isRequired,setActiveOptionIndex:bt.default.func.isRequired};function DA(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?DA=function(n){return typeof n}:DA=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},DA(e)}var Zjt=["children","className","options","onChange","onActiveOptionChange","searchable","searchProps","singleSelection","isLoading","listProps","renderOption","height","allowExclusions","aria-label","aria-describedby","loadingMessage","noMatchesMessage","emptyMessage","errorMessage","isPreFiltered"],eIt=["aria-label","aria-describedby","onChange","defaultValue","inputRef"],tIt=["aria-label","aria-describedby","isVirtualized","rowHeight"];function rIt(e,t){return aIt(e)||iIt(e,t)||oIt(e,t)||nIt()}function nIt(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function oIt(e,t){if(e){if(typeof e=="string")return cye(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return cye(e,t)}}function cye(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function lIt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function sIt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function fye(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function NA(e){return NA=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},NA(e)}function ki(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var xc=function(e){cIt(n,e);var t=pIt(n);function n(r){var o,i;sIt(this,n),i=t.call(this,r),ki(Ji(i),"inputRef",null),ki(Ji(i),"containerRef",(0,gu.createRef)()),ki(Ji(i),"optionsListRef",(0,gu.createRef)()),ki(Ji(i),"preventOnFocus",!1),ki(Ji(i),"rootId",void 0),ki(Ji(i),"messageContentId",void 0),ki(Ji(i),"listId",void 0),ki(Ji(i),"onMouseDown",function(){i.preventOnFocus=!0}),ki(Ji(i),"onFocus",function(){if(i.preventOnFocus){i.preventOnFocus=!1;return}if(!(!i.state.visibleOptions.length||i.state.activeOptionIndex!=null)){var C=i.state.visibleOptions.findIndex(function(M){return M.checked&&!M.disabled&&!M.isGroupLabel});C>-1?i.setState({activeOptionIndex:C,isFocused:!0}):i.setState({activeOptionIndex:i.state.visibleOptions.findIndex(function(M){return!M.disabled&&!M.isGroupLabel}),isFocused:!0})}}),ki(Ji(i),"onKeyDown",function(C){var M=i.optionsListRef.current;switch(C.key){case xn.ARROW_UP:C.preventDefault(),C.stopPropagation(),i.incrementActiveOptionIndex(-1);break;case xn.ARROW_DOWN:C.preventDefault(),C.stopPropagation(),i.incrementActiveOptionIndex(1);break;case xn.ENTER:case xn.SPACE:if(i.props.searchable){var F,R;if(C.target===i.inputRef&&C.key===xn.SPACE||!(C.target===i.inputRef||C.target===((F=i.optionsListRef.current)===null||F===void 0||(R=F.listBoxRef)===null||R===void 0?void 0:R.parentElement)))return}C.preventDefault(),C.stopPropagation(),i.state.activeOptionIndex!=null&&M&&(C.persist(),M.onAddOrRemoveOption(i.state.visibleOptions[i.state.activeOptionIndex],C));break;case xn.ALT:case xn.SHIFT:case xn.CTRL:case xn.META:break;default:i.setState({activeOptionIndex:void 0},i.onFocus);break}}),ki(Ji(i),"incrementActiveOptionIndex",function(C){i.state.visibleOptions.length&&i.setState(function(M){var F=M.activeOptionIndex,R=M.visibleOptions,B;F==null?B=C<0?R.length-1:0:(B=F+C,B<0?B=R.length-1:B===R.length&&(B=0));for(var Y=C>0?1:-1;R[B].isGroupLabel||R[B].disabled;)B=B+Y,B<0?B=R.length-1:B===R.length&&(B=0);return{activeOptionIndex:B}})}),ki(Ji(i),"onSearchChange",function(C,M){var F,R;i.setState({searchValue:C,visibleOptions:M,activeOptionIndex:void 0},function(){i.state.isFocused&&i.onFocus()}),(F=i.props.searchProps)===null||F===void 0||(R=F.onChange)===null||R===void 0||R.call(F,C,M)}),ki(Ji(i),"onContainerBlur",function(C){var M,F;((M=C.relatedTarget)===null||M===void 0||(F=M.firstChild)===null||F===void 0?void 0:F.id)!==i.listId&&i.setState({activeOptionIndex:void 0,isFocused:!1})}),ki(Ji(i),"onOptionClick",function(C,M){var F=i.props,R=F.isPreFiltered,B=F.onChange,Y=i.state.searchValue,X=my(C,Y,R);i.setState({visibleOptions:X}),B&&B(C,M)}),ki(Ji(i),"scrollToItem",function(C,M){var F,R;(F=i.optionsListRef.current)===null||F===void 0||(R=F.listRef)===null||R===void 0||R.scrollToItem(C,M)}),ki(Ji(i),"makeOptionId",function(C){return C!=null?"".concat(i.listId,"_option-").concat(C):""}),i.rootId=r.id?function(C){return"".concat(r.id).concat(C?"_".concat(C):"")}:Lr(),i.listId=i.rootId("listbox"),i.messageContentId=i.rootId("messageContent");var u=r.options,f=r.singleSelection,h=r.isPreFiltered,y=r.searchProps,O=y?.value||String(y?.defaultValue||""),S=my(u,O,h);y==null||(o=y.onChange)===null||o===void 0||o.call(y,O,S);var I=u.filter(function(C){return C.checked}),A;return f&&I.length===1&&S.includes(I[0])&&(A=S.indexOf(I[0])),i.state={activeOptionIndex:A,searchValue:O,visibleOptions:S,isFocused:!1},i}return uIt(n,[{key:"componentDidUpdate",value:function(o,i){if(i.activeOptionIndex!==this.state.activeOptionIndex){var u,f,h=this.state.activeOptionIndex!=null?this.state.visibleOptions[this.state.activeOptionIndex]:null;(u=(f=this.props).onActiveOptionChange)===null||u===void 0||u.call(f,h)}}},{key:"render",value:function(){var o=this,i=this.props,u=i.children,f=i.className,h=i.options,y=i.onChange,O=i.onActiveOptionChange,S=i.searchable,I=i.searchProps,A=i.singleSelection,C=i.isLoading,M=i.listProps,F=i.renderOption,R=i.height,B=i.allowExclusions,Y=i["aria-label"],X=i["aria-describedby"],le=i.loadingMessage,Z=i.noMatchesMessage,K=i.emptyMessage,de=i.errorMessage,se=i.isPreFiltered,_e=rY(i,Zjt),be=this.state,Pe=be.searchValue,Ue=be.visibleOptions,Le=be.activeOptionIndex,Ge={"aria-label":void 0,"aria-describedby":void 0},Ke=I||Ge,rt=Ke["aria-label"],ot=Ke["aria-describedby"],dt=Ke.onChange,jt=Ke.defaultValue,Ze=Ke.inputRef,Xt=rY(Ke,eIt),at=M||Ge,lr=at["aria-label"],ht=at["aria-describedby"],xt=at.isVirtualized,dr=at.rowHeight,yr=rY(at,tIt),Hr;xt===!1?Hr={isVirtualized:xt}:dr!=null&&(Hr={rowHeight:dr});var ln=(0,dye.default)("euiSelectable",{"euiSelectable-fullHeight":R==="full"},f),Sr;de!=null?Sr=typeof de=="string"?a("p",null,de):de:C?le===void 0||typeof le=="string"?Sr=a(gu.default.Fragment,null,a($r,{size:"m"}),a(Jo,{size:"xs"}),a("p",null,le||a(At,{token:"euiSelectable.loadingOptions",default:"Loading options"}))):Sr=gu.default.cloneElement(le,tY({id:this.messageContentId},le.props)):Pe&&Ue.length===0?Z===void 0||typeof Z=="string"?Sr=a("p",null,Z||a(At,{token:"euiSelectable.noMatchingOptions",default:"{searchValue} doesn't match any options",values:{searchValue:a("strong",null,Pe)}})):Sr=gu.default.cloneElement(Z,tY({id:this.messageContentId},Z.props)):h.length||(K===void 0||typeof K=="string"?Sr=a("p",null,K||a(At,{token:"euiSelectable.noAvailableOptions",default:"No options available"})):Sr=gu.default.cloneElement(K,tY({id:this.messageContentId},K.props)));var Bt=function(vn,yn){if(vn&&vn["aria-label"])return{"aria-label":vn["aria-label"]};var Xo=yn?" ".concat(yn):"";return vn&&vn["aria-describedby"]?{"aria-describedby":"".concat(vn["aria-describedby"]).concat(Xo)}:Y?{"aria-label":Y}:X?{"aria-describedby":"".concat(X).concat(Xo)}:{}},sn=Bt(I,this.messageContentId),nn=!!Object.keys(sn).length,no=S?a(At,{token:"euiSelectable.placeholderName",default:"Filter options"},function(zo){return a(KK,J_({key:"listSearch",options:h,value:Pe,onChange:o.onSearchChange,listId:o.optionsListRef.current?o.listId:void 0,"aria-activedescendant":o.makeOptionId(Le),placeholder:zo,isPreFiltered:se??!1,inputRef:function(yn){var Xo;o.inputRef=yn,I==null||(Xo=I.inputRef)===null||Xo===void 0||Xo.call(I,yn)}},nn?sn:{"aria-label":zo},Xt))}):void 0,Xn=Ue.filter(function(zo){return!zo.disabled}).length,po=S&&a(At,{token:"euiSelectable.searchResults",default:function(vn){var yn=vn.resultsLength;return"".concat(yn," result").concat(yn===1?"":"s"," available")},values:{resultsLength:Xn}}),So=this.rootId("instructions"),An=Bt(M,So),Vr=!!Object.keys(An).length,gn=a(At,{tokens:["euiSelectable.screenReaderInstructions","euiSelectable.placeholderName"],defaults:["Use up and down arrows to move focus over options. Enter to select. Escape to collapse options.","Filter options"]},function(zo){var vn=rIt(zo,2),yn=vn[0],Xo=vn[1];return a(gu.default.Fragment,null,S&&a(q3,{isActive:Sr!=null||Le!=null},Sr||po),a(Un,null,a("p",{id:So},Xo)),Sr?a(CA,{"data-test-subj":"euiSelectableMessage",id:o.messageContentId,bordered:M&&M.bordered},Sr):a($_,J_({"data-test-subj":"euiSelectableList",key:"list",options:h,visibleOptions:Ue,searchValue:Pe,activeOptionIndex:Le,setActiveOptionIndex:function(_s,mr){o.setState({activeOptionIndex:_s},mr)},onOptionClick:o.onOptionClick,singleSelection:A,ref:o.optionsListRef,renderOption:F,height:R,allowExclusions:B,searchable:S,makeOptionId:o.makeOptionId,listId:o.listId},Vr?An:S&&{"aria-label":yn},yr,Hr)))});return a("div",J_({ref:this.containerRef,className:ln,onKeyDown:this.onKeyDown,onBlur:this.onContainerBlur,onFocus:this.onFocus,onMouseDown:this.onMouseDown},_e),u&&u(gn,no))}}],[{key:"getDerivedStateFromProps",value:function(o,i){var u=o.options,f=o.isPreFiltered,h=o.searchProps,y=i.activeOptionIndex,O=i.searchValue,S=my(u,O,f),I={visibleOptions:S,activeOptionIndex:y};return y!=null&&y>=S.length&&(I.activeOptionIndex=-1),h?.value!=null&&h.value!==O&&(I.searchValue=h.value),I}}]),n}(gu.Component);ki(xc,"defaultProps",{options:[],singleSelection:!1,searchable:!1,isPreFiltered:!1});xc.propTypes={className:Qt.default.string,"aria-label":Qt.default.string,"data-test-subj":Qt.default.string,searchable:Qt.default.oneOfType([Qt.default.oneOf([!1]).isRequired,Qt.default.oneOf([!0]).isRequired]).isRequired,searchProps:Qt.default.any,children:Qt.default.func,options:Qt.default.arrayOf(Qt.default.shape({isGroupLabel:Qt.default.oneOfType([Qt.default.oneOf([!0]).isRequired,Qt.default.oneOf([!1])]),className:Qt.default.string,"aria-label":Qt.default.string,"data-test-subj":Qt.default.string,label:Qt.default.string,searchableLabel:Qt.default.string,key:Qt.default.string,checked:Qt.default.oneOf(["on","off",void 0]),disabled:Qt.default.bool,prepend:Qt.default.node,append:Qt.default.node,ref:Qt.default.func,data:Qt.default.shape({})}).isRequired).isRequired,onChange:Qt.default.func,onActiveOptionChange:Qt.default.func,singleSelection:Qt.default.oneOfType([Qt.default.oneOf(["always"]),Qt.default.bool.isRequired]),allowExclusions:Qt.default.bool,isLoading:Qt.default.bool,height:Qt.default.oneOfType([Qt.default.number.isRequired,Qt.default.oneOf(["full"])]),listProps:Qt.default.any,renderOption:Qt.default.func,loadingMessage:Qt.default.oneOfType([Qt.default.element.isRequired,Qt.default.string.isRequired]),noMatchesMessage:Qt.default.oneOfType([Qt.default.element.isRequired,Qt.default.string.isRequired]),emptyMessage:Qt.default.oneOfType([Qt.default.element.isRequired,Qt.default.string.isRequired]),errorMessage:Qt.default.oneOfType([Qt.default.element.isRequired,Qt.default.string.isRequired,Qt.default.oneOf([null])]),isPreFiltered:Qt.default.bool};var mye=k(L()),Gi=k(mt());var FA=k(Ct());var mIt=["className","label","type","labelWidth","description","truncate","onClick"];function WA(){return WA=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function gIt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var hye={tint0:"euiSuggestItem__type--tint0",tint1:"euiSuggestItem__type--tint1",tint2:"euiSuggestItem__type--tint2",tint3:"euiSuggestItem__type--tint3",tint4:"euiSuggestItem__type--tint4",tint5:"euiSuggestItem__type--tint5",tint6:"euiSuggestItem__type--tint6",tint7:"euiSuggestItem__type--tint7",tint8:"euiSuggestItem__type--tint8",tint9:"euiSuggestItem__type--tint9",tint10:"euiSuggestItem__type--tint10"},vIt=Ht(hye),oY=function(t){var n=t.className,r=t.label,o=t.type,i=t.labelWidth,u=i===void 0?"50":i,f=t.description,h=t.truncate,y=h===void 0?!0:h,O=t.onClick,S=hIt(t,mIt),I=(0,FA.default)("euiSuggestItem",{"euiSuggestItem--truncate":y},n),A=(0,FA.default)("euiSuggestItem__label","euiSuggestItem__label--width".concat(u)),C=(0,FA.default)("euiSuggestItem__description",{"euiSuggestItem__description--wrap":!y}),M="";o&&o.color&&vIt.indexOf(o.color)>-1&&(M=hye[o.color]);var F=a(mye.default.Fragment,null,a("span",{className:"euiSuggestItem__type ".concat(M)},a(ir,{type:o.iconType,color:"inherit"})),a("span",{className:A,title:r},r),f&&a("span",{className:C,title:f},f));return O?a("button",WA({onClick:O,className:I},S),F):a("span",WA({className:I},S),F)};oY.propTypes={className:Gi.default.string,"aria-label":Gi.default.string,"data-test-subj":Gi.default.string,type:Gi.default.shape({iconType:Gi.default.oneOfType([Gi.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,Gi.default.string.isRequired,Gi.default.elementType.isRequired]).isRequired,color:Gi.default.oneOfType([Gi.default.string.isRequired,Gi.default.oneOf(["tint0","tint1","tint2","tint3","tint4","tint5","tint6","tint7","tint8","tint9","tint10"]).isRequired]).isRequired}).isRequired,label:Gi.default.string.isRequired,description:Gi.default.string,labelWidth:Gi.default.oneOf(["20","30","40","50","60","70","80","90",20,30,40,50,60,70,80,90]),truncate:Gi.default.bool,onClick:Gi.default.func};var Lp=k(L()),tn=k(mt()),yye=k(Ct());var yIt=["onItemClick","onBlur","onFocus","onInput","onSearch","status","append","tooltipContent","suggestions","id","aria-label","aria-labelledby","isVirtualized","fullWidth","maxHeight"];function gye(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function iY(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function jIt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var vy={unsaved:{icon:"dot",color:"accent"},saved:{icon:"checkInCircleFilled",color:"success"},unchanged:{icon:"",color:"success"},loading:{}},IIt=["label","type","description","labelDisplay","labelWidth","descriptionDisplay"],HA=function(t){var n=t.onItemClick,r=t.onBlur,o=t.onFocus,i=t.onInput,u=t.onSearch,f=t.status,h=f===void 0?"unchanged":f,y=t.append,O=t.tooltipContent,S=t.suggestions,I=t.id,A=t["aria-label"],C=t["aria-labelledby"],M=t.isVirtualized,F=M===void 0?!1:M,R=t.fullWidth,B=R===void 0?!0:R,Y=t.maxHeight,X=Y===void 0?"60vh":Y,le=SIt(t,yIt),Z=(0,Lp.useState)(null),K=BA(Z,2),de=K[0],se=K[1],_e=(0,Lp.useState)(!1),be=BA(_e,2),Pe=be[0],Ue=be[1],Le=function(){return Ue(!0)},Ge=function(){return Ue(!1)},Ke=function(gn){o?.(gn),Le()},rt=function(gn){r?.(gn),de!=null&&de.contains(gn.relatedTarget)||Ge()},ot=function(gn){i?.(gn.target),Le()},dt=function(gn){u?.(gn)},jt=Ys({prefix:I}),Ze="",Xt="";vy[h]&&(Ze=vy[h].icon||"",Xt=vy[h].color||"");var at=[],lr=To(["euiSuggest.stateSavedTooltip","euiSuggest.stateUnsavedTooltip"],["Saved.","Changes have not been saved."]),ht=BA(lr,2),xt=ht[0],dr=ht[1];vy.saved.tooltip=xt,vy.unsaved.tooltip=dr;var yr=(h==="saved"||h==="unsaved")&&a(ha,{position:"left",content:O||vy[h].tooltip},a(ir,{className:"euiSuggestInput__statusIcon",color:Xt,type:Ze}));yr&&at.push(yr),y&&at.push(y);var Hr=To(["euiSuggest.stateLoading","euiSuggest.stateSaved","euiSuggest.stateUnsaved","euiSuggest.stateUnchanged"],["State: loading.","State: saved.","State: unsaved.","State: unchanged."]),ln=BA(Hr,4),Sr=ln[0],Bt=ln[1],sn=ln[2],nn=ln[3],no={loading:Sr,saved:Bt,unsaved:sn,unchanged:nn},Xn=no[h],po=S.map(function(Vr){var gn={},zo={label:Vr.label};return Object.keys(Vr).forEach(function(vn){IIt.includes(vn)?gn[vn]=Vr[vn]:zo[vn]=Vr[vn]}),iY(iY({},zo),{},{data:gn,className:(0,yye.default)(Vr.className,"euiSuggestItemOption"),truncate:F?!0:Vr.truncate})}),So=(0,Lp.useCallback)(function(Vr){return a(oY,Vr)},[]),An=(0,Lp.useCallback)(function(Vr){if(n){var gn=Vr.findIndex(function(vn){return vn.checked==="on"});if(gn>=0){var zo=S[gn];n(zo)}}},[n,S]);return a(Lp.default.Fragment,null,a(xc,{singleSelection:!0,height:F?void 0:"full",options:po,renderOption:So,onChange:An,listProps:{bordered:!1,showIcons:!1,onFocusBadge:!1,paddingSize:"none",textWrap:F?"truncate":"wrap",isVirtualized:F},searchable:!0,searchProps:iY({id:I,append:at.length?at:void 0,fullWidth:B,isLoading:h==="loading",onFocus:Ke,onBlur:rt,onInput:ot,onChange:dt,"aria-describedby":jt,"aria-label":A,"aria-labelledby":C},le)},function(Vr,gn){return a(w_,{disableFocusTrap:!0,input:a(Lp.default.Fragment,null,gn),isOpen:Pe,panelPaddingSize:"none",fullWidth:B,closePopover:Ge,panelRef:se,panelProps:{"aria-live":void 0,"aria-modal":!1,role:void 0}},a("div",{style:{maxHeight:X},className:"eui-yScroll"},Vr))}),a(Un,null,a("p",{id:jt},Xn)))};HA.propTypes={className:tn.default.string,"aria-label":tn.default.oneOfType([tn.default.string,tn.default.oneOfType([tn.default.string.isRequired,tn.default.string])]),"data-test-subj":tn.default.string,suggestions:tn.default.arrayOf(tn.default.shape({className:tn.default.string,"aria-label":tn.default.string,"data-test-subj":tn.default.string,type:tn.default.shape({iconType:tn.default.oneOfType([tn.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,tn.default.string.isRequired,tn.default.elementType.isRequired]).isRequired,color:tn.default.oneOfType([tn.default.string.isRequired,tn.default.oneOf(["tint0","tint1","tint2","tint3","tint4","tint5","tint6","tint7","tint8","tint9","tint10"]).isRequired]).isRequired}).isRequired,label:tn.default.string.isRequired,description:tn.default.string,labelWidth:tn.default.oneOf(["20","30","40","50","60","70","80","90",20,30,40,50,60,70,80,90]),truncate:tn.default.bool}).isRequired).isRequired,tooltipContent:tn.default.string,status:tn.default.any,append:tn.default.any,onItemClick:tn.default.func,onInput:tn.default.func,onSearch:tn.default.func,isVirtualized:tn.default.bool,maxHeight:tn.default.any,"aria-labelledby":tn.default.oneOfType([tn.default.string,tn.default.string.isRequired])};var vbr=k(L()),pm=k(mt()),bye=k(Ct());var PIt=["children","className","compressed","tableLayout","responsive"];function aY(){return aY=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function EIt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var CIt={fixed:null,auto:"euiTable--auto"},VA=function(t){var n=t.children,r=t.className,o=t.compressed,i=t.tableLayout,u=i===void 0?"fixed":i,f=t.responsive,h=f===void 0?!0:f,y=kIt(t,PIt),O=(0,bye.default)("euiTable",r,{"euiTable--compressed":o,"euiTable--responsive":h},CIt[u]);return a("table",aY({tabIndex:-1,className:O},y),n)};VA.propTypes={compressed:pm.default.bool,responsive:pm.default.bool,tableLayout:pm.default.oneOf(["fixed","auto"]),className:pm.default.string,"aria-label":pm.default.string,"data-test-subj":pm.default.string};var Obr=k(L()),G_=k(mt());var AIt=["children","className","bodyRef"];function lY(){return lY=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function TIt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var yy=function(t){var n=t.children,r=t.className,o=t.bodyRef,i=MIt(t,AIt);return a("tbody",lY({className:r,ref:o},i),n)};yy.propTypes={className:G_.default.string,"aria-label":G_.default.string,"data-test-subj":G_.default.string,bodyRef:G_.default.any};var jbr=k(L()),qA=k(mt());var RIt=["children","className"];function sY(){return sY=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function LIt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var UA=function(t){var n=t.children,r=t.className,o=zIt(t,RIt);return a("tfoot",sY({className:r},o),a("tr",null,n))};UA.propTypes={className:qA.default.string,"aria-label":qA.default.string,"data-test-subj":qA.default.string};var Cbr=k(L()),$d=k(mt()),cY=k(Ct());var DIt=["width"];function wye(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function Oye(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function WIt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var BIt="Two `width` properties were provided. Provide only one of `style.width` or `width` to avoid conflicts.",Ud=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=t.width,o=FIt(t,DIt),i=n;return i!=null&&(typeof i=="number"||!isNaN(Number(i)))&&(i="".concat(i,"px")),r&&i&&console.warn(BIt),Oye(Oye({},o),{},{width:i||r})};var HIt=["children","align","className","width","style"];function uY(){return uY=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function qIt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var by=function(t){var n=t.children,r=t.align,o=r===void 0?ds:r,i=t.className,u=t.width,f=t.style,h=VIt(t,HIt),y=(0,cY.default)("euiTableFooterCell",i),O=(0,cY.default)("euiTableCellContent",i,{"euiTableCellContent--alignRight":o===Qs,"euiTableCellContent--alignCenter":o===Op}),S=Ud(f,u);return a("td",uY({className:y,style:S},h),a("div",{className:O},a("span",{className:"euiTableCellContent__text"},n)))};by.propTypes={className:$d.default.string,"aria-label":$d.default.string,"data-test-subj":$d.default.string,align:$d.default.oneOf(["left","right","center"]),width:$d.default.oneOfType([$d.default.string.isRequired,$d.default.number.isRequired])};var Lbr=k(L()),wy=k(mt());var UIt=["children","className","wrapWithTableRow"];function pY(){return pY=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function JIt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var $A=function(t){var n=t.children,r=t.className,o=t.wrapWithTableRow,i=o===void 0?!0:o,u=$It(t,UIt);return a("thead",pY({className:r},u),i?a("tr",null,n):n)};$A.propTypes={className:wy.default.string,"aria-label":wy.default.string,"data-test-subj":wy.default.string,children:wy.default.node,wrapWithTableRow:wy.default.bool};var Wbr=k(L()),Xi=k(mt()),JA=k(Ct());var GIt=["children","align","onSort","isSorted","isSortAscending","className","scope","mobileOptions","width","style","readOnly","description"];function GA(){return GA=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function KIt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var xye=function(t){var n=t.className,r=t.description,o=t.children,i=t.isSorted,u=t.isSortAscending,f=t.showSortMsg;return a("span",{className:n},a(nu,null,function(h,y){return a(At,{token:"euiTableHeaderCell.titleTextWithDesc",default:"{innerText}; {description}",values:{innerText:y,description:r}},function(O){return a("span",{title:r?O:y,ref:h,className:"euiTableCellContent__text"},o)})}),r&&a(Un,null,a("span",null,r)),f&&i&&a(ir,{className:"euiTableSortIcon",type:u?"sortUp":"sortDown",size:"m"}))},Oy=function(t){var n=t.children,r=t.align,o=r===void 0?ds:r,i=t.onSort,u=t.isSorted,f=t.isSortAscending,h=t.className,y=t.scope,O=t.mobileOptions,S=O===void 0?{show:!0}:O,I=t.width,A=t.style,C=t.readOnly,M=t.description,F=XIt(t,GIt),R=(0,JA.default)("euiTableHeaderCell",h,{"euiTableHeaderCell--hideForDesktop":S.only,"euiTableHeaderCell--hideForMobile":!S.show}),B=(0,JA.default)("euiTableCellContent",h,{"euiTableCellContent--alignRight":o===Qs,"euiTableCellContent--alignCenter":o===Op}),Y=Ud(A,I),X=n?"th":"td",le=X==="th"?y??"col":void 0;if(i||u){var Z=(0,JA.default)("euiTableHeaderButton",{"euiTableHeaderButton-isSorted":u}),K="none";u&&(K=f?"ascending":"descending");var de=a(xye,{className:B,description:M,showSortMsg:!0,children:n,isSorted:u,isSortAscending:f});return a(X,GA({className:R,scope:le,role:"columnheader","aria-sort":K,"aria-live":"polite",style:Y},F),i&&!C?a("button",{type:"button",className:Z,onClick:i,"data-test-subj":"tableHeaderSortButton"},de):de)}return a(X,GA({className:R,scope:le,role:"columnheader",style:Y},F),a(xye,{className:B,description:M,showSortMsg:!1,children:n,isSorted:u,isSortAscending:f}))};Oy.propTypes={className:Xi.default.string,"aria-label":Xi.default.string,"data-test-subj":Xi.default.string,align:Xi.default.oneOf(["left","right","center"]),isSortAscending:Xi.default.bool,isSorted:Xi.default.bool,mobileOptions:Xi.default.shape({show:Xi.default.bool,only:Xi.default.bool}),onSort:Xi.default.func,scope:Xi.default.oneOf(["col","row","colgroup","rowgroup"]),width:Xi.default.oneOfType([Xi.default.string.isRequired,Xi.default.number.isRequired]),description:Xi.default.string,readOnly:Xi.default.bool};var Kbr=k(L()),Jd=k(mt()),_ye=k(Ct());var YIt=["children","className","scope","style","width"];function fY(){return fY=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ZIt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var XA=function(t){var n=t.children,r=t.className,o=t.scope,i=o===void 0?"col":o,u=t.style,f=t.width,h=QIt(t,YIt),y=(0,_ye.default)("euiTableHeaderCellCheckbox",r),O=Ud(u,f);return a("th",fY({className:y,scope:i,style:O},h),a("div",{className:"euiTableCellContent"},n))};XA.propTypes={className:Jd.default.string,"aria-label":Jd.default.string,"data-test-subj":Jd.default.string,width:Jd.default.oneOfType([Jd.default.string.isRequired,Jd.default.number.isRequired]),scope:Jd.default.oneOf(["col","row","colgroup","rowgroup"])};var t3r=k(L()),KA=k(mt()),Sye=k(Ct());var ePt=["children","className"];function dY(){return dY=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function rPt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var YA=function(t){var n=t.children,r=t.className,o=tPt(t,ePt),i=(0,Sye.default)("euiTableHeaderMobile",r);return a("div",dY({className:i},o),n)};YA.propTypes={className:KA.default.string,"aria-label":KA.default.string,"data-test-subj":KA.default.string};var Pye=k(L()),_c=k(mt()),kye=k(Ct());var i3r=k(L()),Gd=k(mt()),jye=k(Ct());var nPt=["children","onSort","isSorted","isSortAscending","className","ariaLabel"];function mY(){return mY=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function iPt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var hY=function(t){var n=t.children,r=t.onSort,o=t.isSorted,i=t.isSortAscending,u=t.className,f=t.ariaLabel,h=oPt(t,nPt),y="empty";o&&(y=i?"sortUp":"sortDown");var O=(0,jye.default)("euiTableSortMobileItem",u,{"euiTableSortMobileItem-isSorted":o}),S=f||n,I="Sort ".concat(S," ").concat(i?"descending":"ascending");return a(uu,mY({className:O,icon:y,onClick:r,"aria-label":I},h),n)};hY.propTypes={onSort:Gd.default.func,isSorted:Gd.default.bool,isSortAscending:Gd.default.bool,ariaLabel:Gd.default.string,className:Gd.default.string,"aria-label":Gd.default.string,"data-test-subj":Gd.default.string};function QA(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?QA=function(n){return typeof n}:QA=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},QA(e)}var aPt=["className","anchorPosition","items"];function vY(){return vY=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function sPt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function uPt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Iye(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function eM(e){return eM=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},eM(e)}function gY(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var tM=function(e){pPt(n,e);var t=fPt(n);function n(){var r;uPt(this,n);for(var o=arguments.length,i=new Array(o),u=0;u=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function vPt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var fm=function(t){var n=t.children,r=t.className,o=t.isSelected,i=t.isSelectable,u=t.hasActions,f=t.isExpandedRow,h=t.isExpandable,y=t.onClick,O=gPt(t,hPt),S=(0,Eye.default)("euiTableRow",r,{"euiTableRow-isSelectable":i,"euiTableRow-isSelected":o,"euiTableRow-hasActions":u,"euiTableRow-isExpandedRow":f,"euiTableRow-isExpandable":h,"euiTableRow-isClickable":y});if(!y)return a("tr",rM({className:S},O),n);var I=function(M){M.key===xn.SPACE&&M.preventDefault()},A=function(M){(M.key===xn.ENTER||M.key===xn.SPACE)&&y(M)};return a("tr",rM({className:S,onClick:y,onKeyDown:I,onKeyUp:A,tabIndex:0},O),n)};fm.propTypes={className:Sc.default.string,"aria-label":Sc.default.string,"data-test-subj":Sc.default.string,isSelectable:Sc.default.bool,isSelected:Sc.default.bool,hasActions:Sc.default.bool,isExpandable:Sc.default.bool,isExpandedRow:Sc.default.bool,onClick:Sc.default.any};var _y=k(L()),ro=k(mt()),xy=k(Ct());var yPt=["align","children","className","truncateText","setScopeRow","showOnHover","textOnly","hasActions","isExpander","style","width","valign","mobileOptions"];function nM(){return nM=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function OPt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Xd=function(t){var n,r,o=t.align,i=o===void 0?ds:o,u=t.children,f=t.className,h=t.truncateText,y=t.setScopeRow,O=t.showOnHover,S=t.textOnly,I=S===void 0?!0:S,A=t.hasActions,C=t.isExpander,M=t.style,F=t.width,R=t.valign,B=R===void 0?"middle":R,Y=t.mobileOptions,X=Y===void 0?{show:!0}:Y,le=wPt(t,yPt),Z=(0,xy.default)("euiTableRowCell",Aye({"euiTableRowCell--hasActions":A,"euiTableRowCell--isExpander":C,"euiTableRowCell--hideForDesktop":X.only,"euiTableRowCell--enlargeForMobile":X.enlarge},"euiTableRowCell--".concat(B),B)),K=(0,xy.default)("euiTableCellContent",f,{"euiTableCellContent--alignRight":i===Qs,"euiTableCellContent--alignCenter":i===Op,"euiTableCellContent--showOnHover":O,"euiTableCellContent--truncateText":h,"euiTableCellContent--overflowingContent":I!==!0}),de=(0,xy.default)("euiTableCellContent",f,{"euiTableCellContent--alignRight":X.align===Qs||i===Qs,"euiTableCellContent--alignCenter":X.align===Op||i===Op,"euiTableCellContent--showOnHover":(n=X.showOnHover)!==null&&n!==void 0?n:O,"euiTableCellContent--truncateText":(r=X.truncateText)!==null&&r!==void 0?r:h,"euiTableCellContent--overflowingContent":X.textOnly!==!0||I!==!0}),se=(0,xy.default)({euiTableCellContent__text:I===!0,euiTableCellContent__hoverItem:O}),_e=c5(["xs","s"])&&X.width?X.width:F,be=Ud(M,_e);function Pe(ot){var dt=ot;return I===!0?dt=a("span",{className:se},ot):_y.default.isValidElement(ot)&&(dt=_y.default.Children.map(ot,function(jt){return _y.default.cloneElement(jt,{className:(0,xy.default)(jt.props.className,se)})})),dt}var Ue=Pe(u),Le="euiTableRowCell--hideForMobile",Ge="euiTableRowCell--hideForDesktop",Ke=y?"th":"td",rt=bPt({scope:y?"row":void 0,style:be},le);return X.show===!1?a(Ke,nM({className:"".concat(Z," ").concat(Le)},rt),a("div",{className:K},Ue)):a(Ke,nM({className:Z},rt),X.header&&a("div",{className:"euiTableRowCell__mobileHeader ".concat(Ge)},X.header),X.render?a(_y.Fragment,null,a("div",{className:"".concat(de," ").concat(Ge)},Pe(X.render)),a("div",{className:"".concat(K," ").concat(Le)},Ue)):a("div",{className:K},Ue))};Xd.propTypes={className:ro.default.string,"aria-label":ro.default.string,"data-test-subj":ro.default.string,valign:ro.default.any,setScopeRow:ro.default.bool,hasActions:ro.default.bool,isExpander:ro.default.bool,mobileOptions:ro.default.shape({show:ro.default.bool,only:ro.default.bool,render:ro.default.node,header:ro.default.oneOfType([ro.default.node.isRequired,ro.default.bool.isRequired]),enlarge:ro.default.bool,width:ro.default.any,align:ro.default.oneOf(["left","right","center"]),showOnHover:ro.default.bool,textOnly:ro.default.bool,truncateText:ro.default.bool}),align:ro.default.oneOf(["left","right","center"]),showOnHover:ro.default.bool,textOnly:ro.default.bool,truncateText:ro.default.bool,width:ro.default.any};var P3r=k(L()),oM=k(mt()),Mye=k(Ct());var xPt=["children","className"];function bY(){return bY=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function SPt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var iM=function(t){var n=t.children,r=t.className,o=_Pt(t,xPt),i=(0,Mye.default)("euiTableRowCellCheckbox",r);return a("td",bY({className:i},o),a("div",{className:"euiTableCellContent"},n))};iM.propTypes={className:oM.default.string,"aria-label":oM.default.string,"data-test-subj":oM.default.string};var mM=k(L()),$e=k(mt()),Xye=k(Ct());var Rye=k(L()),Er=k(mt());function aM(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?aM=function(n){return typeof n}:aM=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},aM(e)}function jPt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Tye(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function lM(e){return lM=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},lM(e)}function dm(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function APt(e){return e.hasOwnProperty("render")}var OY=function(e){PPt(n,e);var t=kPt(n);function n(){var r;jPt(this,n);for(var o=arguments.length,i=new Array(o),u=0;u"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function cM(e){return cM=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},cM(e)}function sM(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var _Y=function(e){RPt(n,e);var t=zPt(n);function n(r){var o;return MPt(this,n),o=t.call(this,r),sM(X_(o),"mounted",void 0),sM(X_(o),"onFocus",function(){o.mounted&&o.setState({hasFocus:!0})}),sM(X_(o),"onBlur",function(){o.mounted&&o.setState({hasFocus:!1})}),sM(X_(o),"hasFocus",function(){return o.state.hasFocus}),o.state={hasFocus:!1},o.mounted=!1,o}return TPt(n,[{key:"componentDidMount",value:function(){this.mounted=!0}},{key:"componentWillUnmount",value:function(){this.mounted=!1}},{key:"render",value:function(){var o=this.props,i=o.action,u=o.enabled,f=o.item,h=o.className,y=i.render(f,u),O=(0,pM.cloneElement)(y,{onFocus:this.onFocus,onBlur:this.onBlur}),S=this.hasFocus()?{opacity:1}:void 0;return a("div",{style:S,className:h},O)}}]),n}(pM.Component);_Y.propTypes={action:Sy.default.any.isRequired,enabled:Sy.default.bool.isRequired,item:Sy.default.any.isRequired,className:Sy.default.string.isRequired,index:Sy.default.number};var Nye=function(t){return t.hasOwnProperty("render")};var Bye=function(t){var n=t.actions,r=t.itemId,o=t.item,i=t.actionEnabled,u=t.className,f=n.length>2;return a(Fye.default.Fragment,null,n.reduce(function(h,y,O){var S=y.available?y.available(o):!0;if(!S)return h;var I=i(y),A="item_action_".concat(r,"_").concat(O),C=(0,Wye.default)(u,{expandedItemActions__completelyHide:f&&O<2});return Nye(y)?h.push(a(_Y,{key:A,className:C,index:O,action:y,enabled:I,item:o})):h.push(a(Lye,{key:A,className:C,action:y,enabled:I,item:o})),h},[]))};var Hye=k(L());var NPt={pageSizeOptions:[10,25,50]},Vye=function(t){var n=t.pagination,r=t.onPageSizeChange,o=t.onPageChange,i=t["aria-controls"],u=t["aria-label"],f=n.pageSizeOptions?n.pageSizeOptions:NPt.pageSizeOptions,h=n.pageSize?Math.ceil(n.totalItemCount/n.pageSize):1;return(0,Hye.useEffect)(function(){he.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function $Pt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function Uye(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function pl(e){for(var t=1;t"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function dM(e){return dM=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},dM(e)}function Os(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var IY={auto:{align:ds,render:function(t){return Ck(t)}},string:{align:ds,render:function(t){return kv(t)}},number:{align:Qs,render:function(t){return Pv(t)}},boolean:{align:ds,render:function(t){return jv(t)}},date:{align:ds,render:function(t){return Iv(t)}}},Jye=Object.keys(IY);function jy(e,t){if(t)return Pd(t)?t(e):e[t]}function ZPt(e,t){return t?Pd(t)?t(e):t:{}}function ekt(e,t,n){return n?Pd(n)?n(e,t):n:{}}function tkt(e,t){var n=t.items,r=t.pagination,o=e,i=o.footer;if(i)return Pd(i)?i({items:n,pagination:r}):i}function Gye(e){return e.hasOwnProperty("pagination")&&!!e.pagination}var hm=function(e){XPt(n,e);var t=KPt(n);function n(r){var o;return JPt(this,n),o=t.call(this,r),Os(vu(o),"cleanups",[]),Os(vu(o),"tbody",null),Os(vu(o),"setTbody",function(i){o.removeLoadingListeners(),o.tbody=i,o.props.loading===!0&&i&&o.addLoadingListeners(i)}),Os(vu(o),"addLoadingListeners",function(i){var u=function(h){h.stopPropagation(),h.preventDefault()};["mousedown","mouseup","mouseover","mouseout","mouseenter","mouseleave","click","dblclick","keydown","keyup","keypress"].forEach(function(f){i.addEventListener(f,u,!0),o.cleanups.push(function(){i.removeEventListener(f,u,!0)})})}),Os(vu(o),"removeLoadingListeners",function(){o.cleanups.forEach(function(i){return i()}),o.cleanups.length=0}),Os(vu(o),"tableId",Lr("__table")()),Os(vu(o),"selectAllIdGenerator",Lr("_selection_column-checkbox")),Os(vu(o),"renderSelectAll",function(i){var u=o.props,f=u.items,h=u.selection;if(h){var y=f.filter(function(A){return!h.selectable||h.selectable(A)}),O=o.state.selection&&y.length>0&&o.state.selection.length===y.length,S=y.length===0,I=function(C){C.target.checked?o.changeSelection(y):o.changeSelection([])};return a(At,{token:"euiBasicTable.selectAllRows",default:"Select all rows"},function(A){return a(ey,{id:o.selectAllIdGenerator(i?"mobile":"desktop"),type:i?void 0:"inList",checked:O,disabled:S,onChange:I,"data-test-subj":i?void 0:"checkboxSelectAll","aria-label":A,label:i?A:null})})}}),Os(vu(o),"resolveColumnSortDirection",function(i){var u=o.props.sorting,f=i,h=f.sortable,y=f.field,O=f.name;if(!(!u||!u.sort||!h)&&(u.sort.field===y||u.sort.field===O))return u.sort.direction}),Os(vu(o),"resolveColumnOnSort",function(i){var u=o.props.sorting,f=i,h=f.sortable,y=f.name;if(!(!u||!h)){if(!o.props.onChange)throw new Error("BasicTable is configured to be sortable on column [".concat(y,`] but + [onChange] is not configured. This callback must be implemented to handle the sort requests`));return function(){return o.onColumnSortChange(i)}}}),o.state={initialSelectionRendered:!1,selection:[]},o}return GPt(n,[{key:"componentDidMount",value:function(){this.props.loading&&this.tbody&&this.addLoadingListeners(this.tbody),this.getInitialSelection()}},{key:"componentDidUpdate",value:function(o){o.loading!==this.props.loading&&(this.props.loading&&this.tbody?this.addLoadingListeners(this.tbody):this.removeLoadingListeners()),this.getInitialSelection()}},{key:"componentWillUnmount",value:function(){this.removeLoadingListeners()}},{key:"getInitialSelection",value:function(){this.props.selection&&this.props.selection.initialSelected&&!this.state.initialSelectionRendered&&this.props.items.length>0&&(this.setState({selection:this.props.selection.initialSelected}),this.setState({initialSelectionRendered:!0}))}},{key:"setSelection",value:function(o){this.changeSelection(o)}},{key:"buildCriteria",value:function(o){var i={};return Gye(o)&&(i.page={index:o.pagination.pageIndex,size:o.pagination.pageSize}),o.sorting&&(i.sort=o.sorting.sort),i}},{key:"changeSelection",value:function(o){this.props.selection&&(this.setState({selection:o}),this.props.selection.onSelectionChange&&this.props.selection.onSelectionChange(o))}},{key:"clearSelection",value:function(){this.changeSelection([])}},{key:"onPageSizeChange",value:function(o){this.clearSelection();var i=this.buildCriteria(this.props),u=pl(pl({},i),{},{page:{index:0,size:o}});this.props.onChange&&this.props.onChange(u)}},{key:"onPageChange",value:function(o){this.clearSelection();var i=this.buildCriteria(this.props),u=pl(pl({},i),{},{page:pl(pl({},i.page),{},{index:o})});this.props.onChange&&this.props.onChange(u)}},{key:"onColumnSortChange",value:function(o){this.clearSelection();var i=this.buildCriteria(this.props),u=gs.ASC;i&&i.sort&&(i.sort.field===o.field||i.sort.field===o.name)&&(u=gs.reverse(i.sort.direction));var f=pl(pl({},i),{},{page:i.page?{index:0,size:i.page.size}:void 0,sort:{field:o.field||o.name,direction:u}});this.props.onChange&&this.props.onChange(f)}},{key:"render",value:function(){var o=this.props,i=o.className,u=o.loading,f=o.items,h=o.itemId,y=o.columns,O=o.pagination,S=o.sorting,I=o.selection,A=o.onChange,C=o.error,M=o.noItemsMessage,F=o.compressed,R=o.itemIdToExpandedRowMap,B=o.responsive,Y=o.isSelectable,X=o.isExpandable,le=o.hasActions,Z=o.rowProps,K=o.cellProps,de=o.tableCaption,se=o.rowHeader,_e=o.tableLayout,be=qye(o,FPt),Pe=(0,Xye.default)("euiBasicTable",{"euiBasicTable-loading":u},i),Ue=this.renderTable(),Le=this.renderPaginationBar();return a("div",mm({className:Pe},be),Ue,Le)}},{key:"renderTable",value:function(){var o=this.props,i=o.compressed,u=o.responsive,f=o.tableLayout,h=u?a(YA,null,a(to,{responsive:!1,justifyContent:"spaceBetween",alignItems:"baseline"},a(Mt,{grow:!1},this.renderSelectAll(!0)),a(Mt,{grow:!1},this.renderTableMobileSort()))):void 0,y=this.renderTableCaption(),O=this.renderTableHead(),S=this.renderTableBody(),I=this.renderTableFooter();return a("div",null,h,a(VA,{id:this.tableId,tableLayout:f,responsive:u,compressed:i},y,O,S,I))}},{key:"renderTableMobileSort",value:function(){var o=this,i=this.props,u=i.columns,f=i.sorting,h=[];return f?(u.forEach(function(y,O){var S,I;if(y.field&&f.sort&&f.enableAllColumns&&y.sortable==null&&(y=pl(pl({},y),{},{sortable:!0})),!(!y.sortable||((S=y)===null||S===void 0||(I=S.mobileOptions)===null||I===void 0?void 0:I.show)===!1)){var A=o.resolveColumnSortDirection(y);h.push({name:y.name,key:"_data_s_".concat(y.field,"_").concat(O),onSort:o.resolveColumnOnSort(y),isSorted:!!A,isSortAscending:A?gs.isAsc(A):void 0})}}),h.length?a(tM,{items:h}):null):null}},{key:"renderTableCaption",value:function(){var o=this.props,i=o.items,u=o.pagination,f=o.tableCaption,h=i.length,y=u?u.totalItemCount:h,O=u?u.pageIndex+1:1,S=u!=null&&u.pageSize?Math.ceil(u.totalItemCount/u.pageSize):1,I;return f?u?I=a(At,{token:"euiBasicTable.tableCaptionWithPagination",default:"{tableCaption}; Page {page} of {pageCount}.",values:{tableCaption:f,page:O,pageCount:S}}):I=f:u?u.totalItemCount>0?I=a(At,{token:"euiBasicTable.tableAutoCaptionWithPagination",default:"This table contains {itemCount} rows out of {totalItemCount} rows; Page {page} of {pageCount}.",values:{totalItemCount:y,itemCount:h,page:O,pageCount:S}}):I=a(At,{token:"euiBasicTable.tableSimpleAutoCaptionWithPagination",default:"This table contains {itemCount} rows; Page {page} of {pageCount}.",values:{itemCount:h,page:O,pageCount:S}}):I=a(At,{token:"euiBasicTable.tableAutoCaptionWithoutPagination",default:"This table contains {itemCount} rows.",values:{itemCount:h}}),a(Un,null,a("caption",{className:"euiTableCaption"},a(B_,null,I)))}},{key:"renderTableHead",value:function(){var o=this,i=this.props,u=i.columns,f=i.selection,h=[];return f&&h.push(a(XA,{key:"_selection_column_h"},this.renderSelectAll(!1))),u.forEach(function(y,O){var S=y,I=S.field,A=S.width,C=S.name,M=S.align,F=S.dataType,R=S.sortable,B=S.mobileOptions,Y=S.readOnly,X=S.description,le=M||o.getAlignForDataType(F);if(y.actions){h.push(a(Oy,{key:"_actions_h_".concat(O),align:"right",width:A,description:X,mobileOptions:B},C));return}if(!y.field){var Z={};if(o.props.sorting&&typeof R=="function"){var K=o.resolveColumnSortDirection(y);Z.isSorted=!!K,Z.isSortAscending=K?gs.isAsc(K):void 0,Z.onSort=o.resolveColumnOnSort(y),Z.readOnly=o.props.sorting.readOnly||Y}h.push(a(Oy,mm({key:"_computed_column_h_".concat(O),align:le,width:A,mobileOptions:B,"data-test-subj":"tableHeaderCell_".concat(typeof C=="string"?C:"","_").concat(O),description:X},Z),C));return}var de={};if(o.props.sorting){o.props.sorting.sort&&o.props.sorting.enableAllColumns&&y.sortable==null&&(y=pl(pl({},y),{},{sortable:!0}));var se=y,_e=se.sortable;if(_e){var be=o.resolveColumnSortDirection(y);de.isSorted=!!be,de.isSortAscending=be?gs.isAsc(be):void 0,de.onSort=o.resolveColumnOnSort(y),de.readOnly=o.props.sorting.readOnly||Y}}h.push(a(Oy,mm({key:"_data_h_".concat(I,"_").concat(O),align:le,width:A,mobileOptions:B,"data-test-subj":"tableHeaderCell_".concat(I,"_").concat(O),description:X},de),C))}),a($A,null,h)}},{key:"renderTableFooter",value:function(){var o=this.props,i=o.items,u=o.columns,f=o.pagination,h=o.selection,y=[],O=!1;return h&&y.push(a(by,{key:"_selection_column_f"},void 0)),u.forEach(function(S){var I=tkt(S,{items:i,pagination:f}),A=S,C=A.mobileOptions,M=A.field,F=A.align;C!=null&&C.only||(I?(y.push(a(by,{key:"footer_".concat(M,"_").concat(y.length-1),align:F},I)),O=!0):y.push(a(by,{key:"footer_empty_".concat(y.length-1),align:F},void 0)))}),y.length&&O?a(UA,null,y):null}},{key:"renderTableBody",value:function(){var o=this;if(this.props.error)return this.renderErrorBody(this.props.error);var i=this.props.items;if(i.length===0)return this.renderEmptyBody();var u=i.map(function(f,h){var y=Gye(o.props)&&o.props.pagination.pageSize>0?o.props.pagination.pageIndex*o.props.pagination.pageSize+h:h;return o.renderItemRow(f,y)});return a(yy,{bodyRef:this.setTbody},u)}},{key:"renderErrorBody",value:function(o){var i=this.props.columns.length+(this.props.selection?1:0);return a(yy,null,a(fm,null,a(Xd,{align:"center",colSpan:i,mobileOptions:{width:"100%"}},a(ir,{type:"minusInCircle",color:"danger"})," ",o)))}},{key:"renderEmptyBody",value:function(){var o=this.props,i=o.columns,u=o.selection,f=o.noItemsMessage,h=i.length+(u?1:0);return a(yy,null,a(fm,null,a(Xd,{align:"center",colSpan:h,mobileOptions:{width:"100%"}},f)))}},{key:"renderItemRow",value:function(o,i){var u=this,f=this.props,h=f.columns,y=f.selection,O=f.isSelectable,S=f.hasActions,I=f.rowHeader,A=f.itemIdToExpandedRowMap,C=A===void 0?{}:A,M=f.isExpandable,F=[],R=this.props.itemId,B=jy(o,R)!=null?jy(o,R):i,Y=y?this.state.selection&&!!this.state.selection.find(function(Le){return jy(Le,R)===B}):!1,X;y&&(F.push(this.renderItemSelectionCell(B,o,Y)),X=!0);var le;h.forEach(function(Le,Ge){if(Le.actions)F.push(u.renderItemActionsCell(B,o,Le,Ge)),le=!0;else if(Le.field){var Ke=Le;F.push(u.renderItemFieldDataCell(B,o,Le,Ge,Ke.field===I))}else F.push(u.renderItemComputedCell(B,o,Le,Ge))});var Z=y?h.length+1:h.length,K=h.reduce(function(Le,Ge){var Ke;return Ge!=null&&(Ke=Ge.mobileOptions)!==null&&Ke!==void 0&&Ke.only?Le+1:Le+0},0);Z=Z-K;var de=C.hasOwnProperty(B),se=de?"row_".concat(B,"_expansion"):void 0,_e=de?a(fm,{id:se,isExpandedRow:!0,isSelectable:O},a(Xd,{colSpan:Z,textOnly:!1},C[B])):void 0,be=this.props.rowProps,Pe=ZPt(o,be),Ue=a(fm,mm({"aria-owns":se,isSelectable:O??X,isSelected:Y,hasActions:S??le,isExpandable:M},Pe),F);return a(mM.Fragment,{key:"row_".concat(B)},Ue,_e)}},{key:"renderItemSelectionCell",value:function(o,i,u){var f=this,h=this.props.selection,y="_selection_column_".concat(o),O=u,S=h.selectable&&!h.selectable(i),I=h.selectableMessage&&h.selectableMessage(!S,i),A=function(M){if(M.target.checked)f.changeSelection([].concat(BPt(f.state.selection),[i]));else{var F=f.props.itemId;f.changeSelection(f.state.selection.reduce(function(R,B){return jy(B,F)!==o&&R.push(B),R},[]))}};return a(iM,{key:y},a(At,{token:"euiBasicTable.selectThisRow",default:"Select this row"},function(C){return a(ey,{id:"".concat(f.tableId).concat(y,"-checkbox"),type:"inList",disabled:S,checked:O,onChange:A,title:I||C,"aria-label":I||C,"data-test-subj":"checkboxSelectRow-".concat(o)})}))}},{key:"renderItemActionsCell",value:function(o,i,u,f){var h=this,y=function(M){return h.state.selection.length===0&&(!M.enabled||M.enabled(i))},O=u.actions.filter(function(C){return!C.available||C.available(i)});if(O.length>2){var S=O.filter(function(C){return C.isPrimary});O=S.slice(0,2),O.push({name:"All actions",render:function(M){return a(OY,{actions:u.actions,itemId:o,item:M,actionEnabled:y})}})}var I=a(Bye,{actions:O,itemId:o,item:i,actionEnabled:y}),A="record_actions_".concat(o,"_").concat(f);return a(Xd,{showOnHover:!0,key:A,align:"right",textOnly:!1,hasActions:!0},I)}},{key:"renderItemFieldDataCell",value:function(o,i,u,f,h){var y=u.field,O=u.render,S=u.dataType,I="_data_column_".concat(y,"_").concat(o,"_").concat(f),A=O||this.getRendererForDataType(S),C=H1(i,y),M=A(C,i);return this.renderItemCell(i,u,I,M,h)}},{key:"renderItemComputedCell",value:function(o,i,u,f){var h=u.render,y="_computed_column_".concat(o,"_").concat(f),O=h||this.getRendererForDataType(),S=O(i);return this.renderItemCell(i,u,y,S,!1)}},{key:"renderItemCell",value:function(o,i,u,f,h){var y=i,O=y.align,S=y.render,I=y.dataType,A=y.isExpander,C=y.textOnly,M=y.name,F=y.field,R=y.description,B=y.sortable,Y=y.footer,X=y.mobileOptions,le=qye(y,WPt),Z=O||this.getAlignForDataType(I),K=this.props.cellProps,de=ekt(o,i,K);return a(Xd,mm({key:u,align:Z,isExpander:A,textOnly:C||!S,setScopeRow:h,mobileOptions:pl(pl({},X),{},{render:X&&X.render&&X.render(o),header:X&&X.header===!1?!1:M})},de,le),f)}},{key:"getRendererForDataType",value:function(){var o=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"auto",i=IY[o];if(!i)throw new Error("Unknown dataType [".concat(o,"]. The supported data types are [").concat(Jye.join(", "),"]"));return i.render}},{key:"getAlignForDataType",value:function(){var o=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"auto",i=IY[o];if(!i)throw new Error("Unknown dataType [".concat(o,"]. The supported data types are [").concat(Jye.join(", "),"]"));return i.align}},{key:"renderPaginationBar",value:function(){var o=this,i=this.props,u=i.error,f=i.pagination,h=i.tableCaption,y=i.onChange;if(!u&&f&&f.totalItemCount>0){if(!y)throw new Error(`The Basic Table is configured with pagination but [onChange] is + not configured. This callback must be implemented to handle pagination changes`);return a(At,{token:"euiBasicTable.tablePagination",default:"Pagination for table: {tableCaption}",values:{tableCaption:h}},function(O){return a(Vye,{pagination:f,onPageSizeChange:o.onPageSizeChange.bind(o),onPageChange:o.onPageChange.bind(o),"aria-controls":o.tableId,"aria-label":O})})}}}],[{key:"getDerivedStateFromProps",value:function(o,i){if(!o.selection)return{selection:[]};var u=o.itemId,f=i.selection.filter(function(h){return o.items.findIndex(function(y){return jy(y,u)===jy(h,u)})!==-1});return f.length!==i.selection.length?(o.selection.onSelectionChange&&o.selection.onSelectionChange(f),{selection:f}):null}}]),n}(mM.Component);Os(hm,"defaultProps",{responsive:!0,tableLayout:"fixed",noItemsMessage:a(At,{token:"euiBasicTable.noItemsMessage",default:"No items found"})});hm.propTypes={className:$e.default.string,"aria-label":$e.default.string,"data-test-subj":$e.default.string,itemId:$e.default.oneOfType([$e.default.string.isRequired,$e.default.number.isRequired,$e.default.func.isRequired]),itemIdToExpandedRowMap:$e.default.shape({}),items:$e.default.arrayOf($e.default.any.isRequired),cellProps:$e.default.oneOfType([$e.default.any.isRequired,$e.default.func.isRequired]),columns:$e.default.arrayOf($e.default.oneOfType([$e.default.shape({field:$e.default.oneOfType([$e.default.any.isRequired,$e.default.any.isRequired]).isRequired,name:$e.default.node.isRequired,description:$e.default.string,dataType:$e.default.oneOf(["auto","string","number","boolean","date"]),width:$e.default.string,sortable:$e.default.oneOfType([$e.default.bool.isRequired,$e.default.func.isRequired]),isExpander:$e.default.bool,textOnly:$e.default.bool,align:$e.default.oneOf(["left","right","center"]),truncateText:$e.default.bool,mobileOptions:$e.default.shape({render:$e.default.func}),render:$e.default.func,footer:$e.default.oneOfType([$e.default.string.isRequired,$e.default.element.isRequired,$e.default.func.isRequired]),readOnly:$e.default.bool,className:$e.default.string,"aria-label":$e.default.string,"data-test-subj":$e.default.string}).isRequired,$e.default.shape({render:$e.default.func.isRequired,name:$e.default.node,description:$e.default.string,sortable:$e.default.func,width:$e.default.string,truncateText:$e.default.bool,isExpander:$e.default.bool,align:$e.default.oneOf(["left","right","center"]),readOnly:$e.default.bool,className:$e.default.string,"aria-label":$e.default.string,"data-test-subj":$e.default.string}).isRequired,$e.default.shape({actions:$e.default.arrayOf($e.default.oneOfType([$e.default.shape({type:$e.default.oneOfType([$e.default.oneOf(["button"]),$e.default.oneOf(["icon"]).isRequired]),color:$e.default.oneOfType([$e.default.oneOfType([$e.default.oneOf(["primary","danger","text","ghost","success","warning"]).isRequired,$e.default.func.isRequired]),$e.default.oneOfType([$e.default.oneOf(["primary","accent","success","warning","danger","ghost","text"]).isRequired,$e.default.func.isRequired])]),name:$e.default.oneOfType([$e.default.node.isRequired,$e.default.func.isRequired]).isRequired,description:$e.default.string.isRequired,onClick:$e.default.func,href:$e.default.string,target:$e.default.string,available:$e.default.func,enabled:$e.default.func,isPrimary:$e.default.bool,"data-test-subj":$e.default.string,icon:$e.default.oneOfType([$e.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,$e.default.func.isRequired])}).isRequired,$e.default.shape({render:$e.default.func.isRequired,available:$e.default.func,enabled:$e.default.func,isPrimary:$e.default.bool}).isRequired]).isRequired).isRequired,name:$e.default.node,description:$e.default.string,width:$e.default.string}).isRequired]).isRequired),error:$e.default.string,tableCaption:$e.default.string,rowHeader:$e.default.string,hasActions:$e.default.bool,isExpandable:$e.default.bool,isSelectable:$e.default.bool,loading:$e.default.bool,noItemsMessage:$e.default.node,onChange:$e.default.func,pagination:$e.default.oneOfType([$e.default.oneOf([void 0]),$e.default.shape({pageIndex:$e.default.number.isRequired,pageSize:$e.default.number.isRequired,totalItemCount:$e.default.number.isRequired,pageSizeOptions:$e.default.arrayOf($e.default.number.isRequired),showPerPageOptions:$e.default.bool})]),responsive:$e.default.bool,rowProps:$e.default.oneOfType([$e.default.any.isRequired,$e.default.func.isRequired]),selection:$e.default.shape({onSelectionChange:$e.default.func,selectable:$e.default.func,selectableMessage:$e.default.func,initialSelected:$e.default.arrayOf($e.default.any.isRequired)}),sorting:$e.default.shape({sort:$e.default.shape({field:$e.default.any.isRequired,direction:$e.default.oneOf(["asc","desc"]).isRequired}),allowNeutralSort:$e.default.bool,enableAllColumns:$e.default.bool,readOnly:$e.default.bool}),tableLayout:$e.default.oneOf(["fixed","auto"]),textOnly:$e.default.bool};var jc=function(){function e(){this.listeners=[]}var t=e.prototype;return t.subscribe=function(r){var o=this,i=r||function(){};return this.listeners.push(i),this.onSubscribe(),function(){o.listeners=o.listeners.filter(function(u){return u!==i}),o.onUnsubscribe()}},t.hasListeners=function(){return this.listeners.length>0},t.onSubscribe=function(){},t.onUnsubscribe=function(){},e}();var gm=typeof window>"u";function Go(){}function Yye(e,t){return typeof e=="function"?e(t):e}function Y_(e){return typeof e=="number"&&e>=0&&e!==1/0}function K_(e){return Array.isArray(e)?e:[e]}function hM(e,t){return Math.max(e+(t||0)-Date.now(),0)}function Iy(e,t,n){return gM(e)?typeof t=="function"?br({},n,{queryKey:e,queryFn:t}):br({},t,{queryKey:e}):e}function Ic(e,t,n){return gM(e)?[br({},t,{queryKey:e}),n]:[e||{},t]}function rkt(e,t){if(e===!0&&t===!0||e==null&&t==null)return"all";if(e===!1&&t===!1)return"none";var n=e??!t;return n?"active":"inactive"}function kY(e,t){var n=e.active,r=e.exact,o=e.fetching,i=e.inactive,u=e.predicate,f=e.queryKey,h=e.stale;if(gM(f)){if(r){if(t.queryHash!==Q_(f,t.options))return!1}else if(!Z_(t.queryKey,f))return!1}var y=rkt(n,i);if(y==="none")return!1;if(y!=="all"){var O=t.isActive();if(y==="active"&&!O||y==="inactive"&&O)return!1}return!(typeof h=="boolean"&&t.isStale()!==h||typeof o=="boolean"&&t.isFetching()!==o||u&&!u(t))}function EY(e,t){var n=e.exact,r=e.fetching,o=e.predicate,i=e.mutationKey;if(gM(i)){if(!t.options.mutationKey)return!1;if(n){if(Yd(t.options.mutationKey)!==Yd(i))return!1}else if(!Z_(t.options.mutationKey,i))return!1}return!(typeof r=="boolean"&&t.state.status==="loading"!==r||o&&!o(t))}function Q_(e,t){var n=t?.queryKeyHashFn||Yd;return n(e)}function Yd(e){var t=K_(e);return nkt(t)}function nkt(e){return JSON.stringify(e,function(t,n){return PY(n)?Object.keys(n).sort().reduce(function(r,o){return r[o]=n[o],r},{}):n})}function Z_(e,t){return Qye(K_(e),K_(t))}function Qye(e,t){return e===t?!0:typeof e!=typeof t?!1:e&&t&&typeof e=="object"&&typeof t=="object"?!Object.keys(t).some(function(n){return!Qye(e[n],t[n])}):!1}function Py(e,t){if(e===t)return e;var n=Array.isArray(e)&&Array.isArray(t);if(n||PY(e)&&PY(t)){for(var r=n?e.length:Object.keys(e).length,o=n?t:Object.keys(t),i=o.length,u=n?[]:{},f=0,h=0;h"u")return!0;var n=t.prototype;return!(!Kye(n)||!n.hasOwnProperty("isPrototypeOf"))}function Kye(e){return Object.prototype.toString.call(e)==="[object Object]"}function gM(e){return typeof e=="string"||Array.isArray(e)}function e2e(e){return new Promise(function(t){setTimeout(t,e)})}function CY(e){Promise.resolve().then(e).catch(function(t){return setTimeout(function(){throw t})})}function vM(){if(typeof AbortController=="function")return new AbortController}var okt=function(e){Na(t,e);function t(){var r;return r=e.call(this)||this,r.setup=function(o){var i;if(!gm&&((i=window)!=null&&i.addEventListener)){var u=function(){return o()};return window.addEventListener("visibilitychange",u,!1),window.addEventListener("focus",u,!1),function(){window.removeEventListener("visibilitychange",u),window.removeEventListener("focus",u)}}},r}var n=t.prototype;return n.onSubscribe=function(){this.cleanup||this.setEventListener(this.setup)},n.onUnsubscribe=function(){if(!this.hasListeners()){var o;(o=this.cleanup)==null||o.call(this),this.cleanup=void 0}},n.setEventListener=function(o){var i,u=this;this.setup=o,(i=this.cleanup)==null||i.call(this),this.cleanup=o(function(f){typeof f=="boolean"?u.setFocused(f):u.onFocus()})},n.setFocused=function(o){this.focused=o,o&&this.onFocus()},n.onFocus=function(){this.listeners.forEach(function(o){o()})},n.isFocused=function(){return typeof this.focused=="boolean"?this.focused:typeof document>"u"?!0:[void 0,"visible","prerender"].includes(document.visibilityState)},t}(jc),Qd=new okt;var ikt=function(e){Na(t,e);function t(){var r;return r=e.call(this)||this,r.setup=function(o){var i;if(!gm&&((i=window)!=null&&i.addEventListener)){var u=function(){return o()};return window.addEventListener("online",u,!1),window.addEventListener("offline",u,!1),function(){window.removeEventListener("online",u),window.removeEventListener("offline",u)}}},r}var n=t.prototype;return n.onSubscribe=function(){this.cleanup||this.setEventListener(this.setup)},n.onUnsubscribe=function(){if(!this.hasListeners()){var o;(o=this.cleanup)==null||o.call(this),this.cleanup=void 0}},n.setEventListener=function(o){var i,u=this;this.setup=o,(i=this.cleanup)==null||i.call(this),this.cleanup=o(function(f){typeof f=="boolean"?u.setOnline(f):u.onOnline()})},n.setOnline=function(o){this.online=o,o&&this.onOnline()},n.onOnline=function(){this.listeners.forEach(function(o){o()})},n.isOnline=function(){return typeof this.online=="boolean"?this.online:typeof navigator>"u"||typeof navigator.onLine>"u"?!0:navigator.onLine},t}(jc),ky=new ikt;function akt(e){return Math.min(1e3*Math.pow(2,e),3e4)}function eS(e){return typeof e?.cancel=="function"}var t2e=function(t){this.revert=t?.revert,this.silent=t?.silent};function Ey(e){return e instanceof t2e}var yM=function(t){var n=this,r=!1,o,i,u,f;this.abort=t.abort,this.cancel=function(I){return o?.(I)},this.cancelRetry=function(){r=!0},this.continueRetry=function(){r=!1},this.continue=function(){return i?.()},this.failureCount=0,this.isPaused=!1,this.isResolved=!1,this.isTransportCancelable=!1,this.promise=new Promise(function(I,A){u=I,f=A});var h=function(A){n.isResolved||(n.isResolved=!0,t.onSuccess==null||t.onSuccess(A),i?.(),u(A))},y=function(A){n.isResolved||(n.isResolved=!0,t.onError==null||t.onError(A),i?.(),f(A))},O=function(){return new Promise(function(A){i=A,n.isPaused=!0,t.onPause==null||t.onPause()}).then(function(){i=void 0,n.isPaused=!1,t.onContinue==null||t.onContinue()})},S=function I(){if(!n.isResolved){var A;try{A=t.fn()}catch(C){A=Promise.reject(C)}o=function(M){if(!n.isResolved&&(y(new t2e(M)),n.abort==null||n.abort(),eS(A)))try{A.cancel()}catch{}},n.isTransportCancelable=eS(A),Promise.resolve(A).then(h).catch(function(C){var M,F;if(!n.isResolved){var R=(M=t.retry)!=null?M:3,B=(F=t.retryDelay)!=null?F:akt,Y=typeof B=="function"?B(n.failureCount,C):B,X=R===!0||typeof R=="number"&&n.failureCount"u"&&(f.exact=!0),this.queries.find(function(h){return kY(f,h)})},n.findAll=function(o,i){var u=Ic(o,i),f=u[0];return Object.keys(f).length>0?this.queries.filter(function(h){return kY(f,h)}):this.queries},n.notify=function(o){var i=this;kn.batch(function(){i.listeners.forEach(function(u){u(o)})})},n.onFocus=function(){var o=this;kn.batch(function(){o.queries.forEach(function(i){i.onFocus()})})},n.onOnline=function(){var o=this;kn.batch(function(){o.queries.forEach(function(i){i.onOnline()})})},t}(jc);var i2e=function(){function e(n){this.options=br({},n.defaultOptions,n.options),this.mutationId=n.mutationId,this.mutationCache=n.mutationCache,this.observers=[],this.state=n.state||skt(),this.meta=n.meta}var t=e.prototype;return t.setState=function(r){this.dispatch({type:"setState",state:r})},t.addObserver=function(r){this.observers.indexOf(r)===-1&&this.observers.push(r)},t.removeObserver=function(r){this.observers=this.observers.filter(function(o){return o!==r})},t.cancel=function(){return this.retryer?(this.retryer.cancel(),this.retryer.promise.then(Go).catch(Go)):Promise.resolve()},t.continue=function(){return this.retryer?(this.retryer.continue(),this.retryer.promise):this.execute()},t.execute=function(){var r=this,o,i=this.state.status==="loading",u=Promise.resolve();return i||(this.dispatch({type:"loading",variables:this.options.variables}),u=u.then(function(){r.mutationCache.config.onMutate==null||r.mutationCache.config.onMutate(r.state.variables,r)}).then(function(){return r.options.onMutate==null?void 0:r.options.onMutate(r.state.variables)}).then(function(f){f!==r.state.context&&r.dispatch({type:"loading",context:f,variables:r.state.variables})})),u.then(function(){return r.executeMutation()}).then(function(f){o=f,r.mutationCache.config.onSuccess==null||r.mutationCache.config.onSuccess(o,r.state.variables,r.state.context,r)}).then(function(){return r.options.onSuccess==null?void 0:r.options.onSuccess(o,r.state.variables,r.state.context)}).then(function(){return r.options.onSettled==null?void 0:r.options.onSettled(o,null,r.state.variables,r.state.context)}).then(function(){return r.dispatch({type:"success",data:o}),o}).catch(function(f){return r.mutationCache.config.onError==null||r.mutationCache.config.onError(f,r.state.variables,r.state.context,r),vm().error(f),Promise.resolve().then(function(){return r.options.onError==null?void 0:r.options.onError(f,r.state.variables,r.state.context)}).then(function(){return r.options.onSettled==null?void 0:r.options.onSettled(void 0,f,r.state.variables,r.state.context)}).then(function(){throw r.dispatch({type:"error",error:f}),f})})},t.executeMutation=function(){var r=this,o;return this.retryer=new yM({fn:function(){return r.options.mutationFn?r.options.mutationFn(r.state.variables):Promise.reject("No mutationFn found")},onFail:function(){r.dispatch({type:"failed"})},onPause:function(){r.dispatch({type:"pause"})},onContinue:function(){r.dispatch({type:"continue"})},retry:(o=this.options.retry)!=null?o:0,retryDelay:this.options.retryDelay}),this.retryer.promise},t.dispatch=function(r){var o=this;this.state=ukt(this.state,r),kn.batch(function(){o.observers.forEach(function(i){i.onMutationUpdate(r)}),o.mutationCache.notify(o)})},e}();function skt(){return{context:void 0,data:void 0,error:null,failureCount:0,isPaused:!1,status:"idle",variables:void 0}}function ukt(e,t){switch(t.type){case"failed":return br({},e,{failureCount:e.failureCount+1});case"pause":return br({},e,{isPaused:!0});case"continue":return br({},e,{isPaused:!1});case"loading":return br({},e,{context:t.context,data:void 0,error:null,isPaused:!1,status:"loading",variables:t.variables});case"success":return br({},e,{data:t.data,error:null,status:"success",isPaused:!1});case"error":return br({},e,{data:void 0,error:t.error,failureCount:e.failureCount+1,isPaused:!1,status:"error"});case"setState":return br({},e,t.state);default:return e}}var a2e=function(e){Na(t,e);function t(r){var o;return o=e.call(this)||this,o.config=r||{},o.mutations=[],o.mutationId=0,o}var n=t.prototype;return n.build=function(o,i,u){var f=new i2e({mutationCache:this,mutationId:++this.mutationId,options:o.defaultMutationOptions(i),state:u,defaultOptions:i.mutationKey?o.getMutationDefaults(i.mutationKey):void 0,meta:i.meta});return this.add(f),f},n.add=function(o){this.mutations.push(o),this.notify(o)},n.remove=function(o){this.mutations=this.mutations.filter(function(i){return i!==o}),o.cancel(),this.notify(o)},n.clear=function(){var o=this;kn.batch(function(){o.mutations.forEach(function(i){o.remove(i)})})},n.getAll=function(){return this.mutations},n.find=function(o){return typeof o.exact>"u"&&(o.exact=!0),this.mutations.find(function(i){return EY(o,i)})},n.findAll=function(o){return this.mutations.filter(function(i){return EY(o,i)})},n.notify=function(o){var i=this;kn.batch(function(){i.listeners.forEach(function(u){u(o)})})},n.onFocus=function(){this.resumePausedMutations()},n.onOnline=function(){this.resumePausedMutations()},n.resumePausedMutations=function(){var o=this.mutations.filter(function(i){return i.state.isPaused});return kn.batch(function(){return o.reduce(function(i,u){return i.then(function(){return u.continue().catch(Go)})},Promise.resolve())})},t}(jc);function s2e(){return{onFetch:function(t){t.fetchFn=function(){var n,r,o,i,u,f,h=(n=t.fetchOptions)==null||(r=n.meta)==null?void 0:r.refetchPage,y=(o=t.fetchOptions)==null||(i=o.meta)==null?void 0:i.fetchMore,O=y?.pageParam,S=y?.direction==="forward",I=y?.direction==="backward",A=((u=t.state.data)==null?void 0:u.pages)||[],C=((f=t.state.data)==null?void 0:f.pageParams)||[],M=vM(),F=M?.signal,R=C,B=!1,Y=t.options.queryFn||function(){return Promise.reject("Missing queryFn")},X=function(Le,Ge,Ke,rt){return R=rt?[Ge].concat(R):[].concat(R,[Ge]),rt?[Ke].concat(Le):[].concat(Le,[Ke])},le=function(Le,Ge,Ke,rt){if(B)return Promise.reject("Cancelled");if(typeof Ke>"u"&&!Ge&&Le.length)return Promise.resolve(Le);var ot={queryKey:t.queryKey,signal:F,pageParam:Ke,meta:t.meta},dt=Y(ot),jt=Promise.resolve(dt).then(function(Xt){return X(Le,Ke,Xt,rt)});if(eS(dt)){var Ze=jt;Ze.cancel=dt.cancel}return jt},Z;if(!A.length)Z=le([]);else if(S){var K=typeof O<"u",de=K?O:l2e(t.options,A);Z=le(A,K,de)}else if(I){var se=typeof O<"u",_e=se?O:ckt(t.options,A);Z=le(A,se,_e,!0)}else(function(){R=[];var Ue=typeof t.options.getNextPageParam>"u",Le=h&&A[0]?h(A[0],0,A):!0;Z=Le?le([],Ue,C[0]):Promise.resolve(X([],C[0],A[0]));for(var Ge=function(ot){Z=Z.then(function(dt){var jt=h&&A[ot]?h(A[ot],ot,A):!0;if(jt){var Ze=Ue?C[ot]:l2e(t.options,dt);return le(dt,Ue,Ze)}return Promise.resolve(X(dt,C[ot],A[ot]))})},Ke=1;Ke"u"&&(O.revert=!0);var S=kn.batch(function(){return u.queryCache.findAll(h).map(function(I){return I.cancel(O)})});return Promise.all(S).then(Go).catch(Go)},t.invalidateQueries=function(r,o,i){var u,f,h,y=this,O=Ic(r,o,i),S=O[0],I=O[1],A=br({},S,{active:(u=(f=S.refetchActive)!=null?f:S.active)!=null?u:!0,inactive:(h=S.refetchInactive)!=null?h:!1});return kn.batch(function(){return y.queryCache.findAll(S).forEach(function(C){C.invalidate()}),y.refetchQueries(A,I)})},t.refetchQueries=function(r,o,i){var u=this,f=Ic(r,o,i),h=f[0],y=f[1],O=kn.batch(function(){return u.queryCache.findAll(h).map(function(I){return I.fetch(void 0,br({},y,{meta:{refetchPage:h?.refetchPage}}))})}),S=Promise.all(O).then(Go);return y?.throwOnError||(S=S.catch(Go)),S},t.fetchQuery=function(r,o,i){var u=Iy(r,o,i),f=this.defaultQueryOptions(u);typeof f.retry>"u"&&(f.retry=!1);var h=this.queryCache.build(this,f);return h.isStaleByTime(f.staleTime)?h.fetch(f):Promise.resolve(h.state.data)},t.prefetchQuery=function(r,o,i){return this.fetchQuery(r,o,i).then(Go).catch(Go)},t.fetchInfiniteQuery=function(r,o,i){var u=Iy(r,o,i);return u.behavior=s2e(),this.fetchQuery(u)},t.prefetchInfiniteQuery=function(r,o,i){return this.fetchInfiniteQuery(r,o,i).then(Go).catch(Go)},t.cancelMutations=function(){var r=this,o=kn.batch(function(){return r.mutationCache.getAll().map(function(i){return i.cancel()})});return Promise.all(o).then(Go).catch(Go)},t.resumePausedMutations=function(){return this.getMutationCache().resumePausedMutations()},t.executeMutation=function(r){return this.mutationCache.build(this,r).execute()},t.getQueryCache=function(){return this.queryCache},t.getMutationCache=function(){return this.mutationCache},t.getDefaultOptions=function(){return this.defaultOptions},t.setDefaultOptions=function(r){this.defaultOptions=r},t.setQueryDefaults=function(r,o){var i=this.queryDefaults.find(function(u){return Yd(r)===Yd(u.queryKey)});i?i.defaultOptions=o:this.queryDefaults.push({queryKey:r,defaultOptions:o})},t.getQueryDefaults=function(r){var o;return r?(o=this.queryDefaults.find(function(i){return Z_(r,i.queryKey)}))==null?void 0:o.defaultOptions:void 0},t.setMutationDefaults=function(r,o){var i=this.mutationDefaults.find(function(u){return Yd(r)===Yd(u.mutationKey)});i?i.defaultOptions=o:this.mutationDefaults.push({mutationKey:r,defaultOptions:o})},t.getMutationDefaults=function(r){var o;return r?(o=this.mutationDefaults.find(function(i){return Z_(r,i.mutationKey)}))==null?void 0:o.defaultOptions:void 0},t.defaultQueryOptions=function(r){if(r?._defaulted)return r;var o=br({},this.defaultOptions.queries,this.getQueryDefaults(r?.queryKey),r,{_defaulted:!0});return!o.queryHash&&o.queryKey&&(o.queryHash=Q_(o.queryKey,o)),o},t.defaultQueryObserverOptions=function(r){return this.defaultQueryOptions(r)},t.defaultMutationOptions=function(r){return r?._defaulted?r:br({},this.defaultOptions.mutations,this.getMutationDefaults(r?.mutationKey),r,{_defaulted:!0})},t.clear=function(){this.queryCache.clear(),this.mutationCache.clear()},e}();var TY=function(e){Na(t,e);function t(r,o){var i;return i=e.call(this)||this,i.client=r,i.options=o,i.trackedProps=[],i.selectError=null,i.bindMethods(),i.setOptions(o),i}var n=t.prototype;return n.bindMethods=function(){this.remove=this.remove.bind(this),this.refetch=this.refetch.bind(this)},n.onSubscribe=function(){this.listeners.length===1&&(this.currentQuery.addObserver(this),u2e(this.currentQuery,this.options)&&this.executeFetch(),this.updateTimers())},n.onUnsubscribe=function(){this.listeners.length||this.destroy()},n.shouldFetchOnReconnect=function(){return MY(this.currentQuery,this.options,this.options.refetchOnReconnect)},n.shouldFetchOnWindowFocus=function(){return MY(this.currentQuery,this.options,this.options.refetchOnWindowFocus)},n.destroy=function(){this.listeners=[],this.clearTimers(),this.currentQuery.removeObserver(this)},n.setOptions=function(o,i){var u=this.options,f=this.currentQuery;if(this.options=this.client.defaultQueryObserverOptions(o),typeof this.options.enabled<"u"&&typeof this.options.enabled!="boolean")throw new Error("Expected enabled to be a boolean");this.options.queryKey||(this.options.queryKey=u.queryKey),this.updateQuery();var h=this.hasListeners();h&&c2e(this.currentQuery,f,this.options,u)&&this.executeFetch(),this.updateResult(i),h&&(this.currentQuery!==f||this.options.enabled!==u.enabled||this.options.staleTime!==u.staleTime)&&this.updateStaleTimeout();var y=this.computeRefetchInterval();h&&(this.currentQuery!==f||this.options.enabled!==u.enabled||y!==this.currentRefetchInterval)&&this.updateRefetchInterval(y)},n.getOptimisticResult=function(o){var i=this.client.defaultQueryObserverOptions(o),u=this.client.getQueryCache().build(this.client,i);return this.createResult(u,i)},n.getCurrentResult=function(){return this.currentResult},n.trackResult=function(o,i){var u=this,f={},h=function(O){u.trackedProps.includes(O)||u.trackedProps.push(O)};return Object.keys(o).forEach(function(y){Object.defineProperty(f,y,{configurable:!1,enumerable:!0,get:function(){return h(y),o[y]}})}),(i.useErrorBoundary||i.suspense)&&h("error"),f},n.getNextResult=function(o){var i=this;return new Promise(function(u,f){var h=i.subscribe(function(y){y.isFetching||(h(),y.isError&&o?.throwOnError?f(y.error):u(y))})})},n.getCurrentQuery=function(){return this.currentQuery},n.remove=function(){this.client.getQueryCache().remove(this.currentQuery)},n.refetch=function(o){return this.fetch(br({},o,{meta:{refetchPage:o?.refetchPage}}))},n.fetchOptimistic=function(o){var i=this,u=this.client.defaultQueryObserverOptions(o),f=this.client.getQueryCache().build(this.client,u);return f.fetch().then(function(){return i.createResult(f,u)})},n.fetch=function(o){var i=this;return this.executeFetch(o).then(function(){return i.updateResult(),i.currentResult})},n.executeFetch=function(o){this.updateQuery();var i=this.currentQuery.fetch(this.options,o);return o?.throwOnError||(i=i.catch(Go)),i},n.updateStaleTimeout=function(){var o=this;if(this.clearStaleTimeout(),!(gm||this.currentResult.isStale||!Y_(this.options.staleTime))){var i=hM(this.currentResult.dataUpdatedAt,this.options.staleTime),u=i+1;this.staleTimeoutId=setTimeout(function(){o.currentResult.isStale||o.updateResult()},u)}},n.computeRefetchInterval=function(){var o;return typeof this.options.refetchInterval=="function"?this.options.refetchInterval(this.currentResult.data,this.currentQuery):(o=this.options.refetchInterval)!=null?o:!1},n.updateRefetchInterval=function(o){var i=this;this.clearRefetchInterval(),this.currentRefetchInterval=o,!(gm||this.options.enabled===!1||!Y_(this.currentRefetchInterval)||this.currentRefetchInterval===0)&&(this.refetchIntervalId=setInterval(function(){(i.options.refetchIntervalInBackground||Qd.isFocused())&&i.executeFetch()},this.currentRefetchInterval))},n.updateTimers=function(){this.updateStaleTimeout(),this.updateRefetchInterval(this.computeRefetchInterval())},n.clearTimers=function(){this.clearStaleTimeout(),this.clearRefetchInterval()},n.clearStaleTimeout=function(){this.staleTimeoutId&&(clearTimeout(this.staleTimeoutId),this.staleTimeoutId=void 0)},n.clearRefetchInterval=function(){this.refetchIntervalId&&(clearInterval(this.refetchIntervalId),this.refetchIntervalId=void 0)},n.createResult=function(o,i){var u=this.currentQuery,f=this.options,h=this.currentResult,y=this.currentResultState,O=this.currentResultOptions,S=o!==u,I=S?o.state:this.currentQueryInitialState,A=S?this.currentResult:this.previousQueryResult,C=o.state,M=C.dataUpdatedAt,F=C.error,R=C.errorUpdatedAt,B=C.isFetching,Y=C.status,X=!1,le=!1,Z;if(i.optimisticResults){var K=this.hasListeners(),de=!K&&u2e(o,i),se=K&&c2e(o,u,i,f);(de||se)&&(B=!0,M||(Y="loading"))}if(i.keepPreviousData&&!C.dataUpdateCount&&A?.isSuccess&&Y!=="error")Z=A.data,M=A.dataUpdatedAt,Y=A.status,X=!0;else if(i.select&&typeof C.data<"u")if(h&&C.data===y?.data&&i.select===this.selectFn)Z=this.selectResult;else try{this.selectFn=i.select,Z=i.select(C.data),i.structuralSharing!==!1&&(Z=Py(h?.data,Z)),this.selectResult=Z,this.selectError=null}catch(Pe){vm().error(Pe),this.selectError=Pe}else Z=C.data;if(typeof i.placeholderData<"u"&&typeof Z>"u"&&(Y==="loading"||Y==="idle")){var _e;if(h?.isPlaceholderData&&i.placeholderData===O?.placeholderData)_e=h.data;else if(_e=typeof i.placeholderData=="function"?i.placeholderData():i.placeholderData,i.select&&typeof _e<"u")try{_e=i.select(_e),i.structuralSharing!==!1&&(_e=Py(h?.data,_e)),this.selectError=null}catch(Pe){vm().error(Pe),this.selectError=Pe}typeof _e<"u"&&(Y="success",Z=_e,le=!0)}this.selectError&&(F=this.selectError,Z=this.selectResult,R=Date.now(),Y="error");var be={status:Y,isLoading:Y==="loading",isSuccess:Y==="success",isError:Y==="error",isIdle:Y==="idle",data:Z,dataUpdatedAt:M,error:F,errorUpdatedAt:R,failureCount:C.fetchFailureCount,errorUpdateCount:C.errorUpdateCount,isFetched:C.dataUpdateCount>0||C.errorUpdateCount>0,isFetchedAfterMount:C.dataUpdateCount>I.dataUpdateCount||C.errorUpdateCount>I.errorUpdateCount,isFetching:B,isRefetching:B&&Y!=="loading",isLoadingError:Y==="error"&&C.dataUpdatedAt===0,isPlaceholderData:le,isPreviousData:X,isRefetchError:Y==="error"&&C.dataUpdatedAt!==0,isStale:RY(o,i),refetch:this.refetch,remove:this.remove};return be},n.shouldNotifyListeners=function(o,i){if(!i)return!0;var u=this.options,f=u.notifyOnChangeProps,h=u.notifyOnChangePropsExclusions;if(!f&&!h||f==="tracked"&&!this.trackedProps.length)return!0;var y=f==="tracked"?this.trackedProps:f;return Object.keys(o).some(function(O){var S=O,I=o[S]!==i[S],A=y?.some(function(M){return M===O}),C=h?.some(function(M){return M===O});return I&&!C&&(!y||A)})},n.updateResult=function(o){var i=this.currentResult;if(this.currentResult=this.createResult(this.currentQuery,this.options),this.currentResultState=this.currentQuery.state,this.currentResultOptions=this.options,!Zye(this.currentResult,i)){var u={cache:!0};o?.listeners!==!1&&this.shouldNotifyListeners(this.currentResult,i)&&(u.listeners=!0),this.notify(br({},u,o))}},n.updateQuery=function(){var o=this.client.getQueryCache().build(this.client,this.options);if(o!==this.currentQuery){var i=this.currentQuery;this.currentQuery=o,this.currentQueryInitialState=o.state,this.previousQueryResult=this.currentResult,this.hasListeners()&&(i?.removeObserver(this),o.addObserver(this))}},n.onQueryUpdate=function(o){var i={};o.type==="success"?i.onSuccess=!0:o.type==="error"&&!Ey(o.error)&&(i.onError=!0),this.updateResult(i),this.hasListeners()&&this.updateTimers()},n.notify=function(o){var i=this;kn.batch(function(){o.onSuccess?(i.options.onSuccess==null||i.options.onSuccess(i.currentResult.data),i.options.onSettled==null||i.options.onSettled(i.currentResult.data,null)):o.onError&&(i.options.onError==null||i.options.onError(i.currentResult.error),i.options.onSettled==null||i.options.onSettled(void 0,i.currentResult.error)),o.listeners&&i.listeners.forEach(function(u){u(i.currentResult)}),o.cache&&i.client.getQueryCache().notify({query:i.currentQuery,type:"observerResultsUpdated"})})},t}(jc);function pkt(e,t){return t.enabled!==!1&&!e.state.dataUpdatedAt&&!(e.state.status==="error"&&t.retryOnMount===!1)}function u2e(e,t){return pkt(e,t)||e.state.dataUpdatedAt>0&&MY(e,t,t.refetchOnMount)}function MY(e,t,n){if(t.enabled!==!1){var r=typeof n=="function"?n(e):n;return r==="always"||r!==!1&&RY(e,t)}return!1}function c2e(e,t,n,r){return n.enabled!==!1&&(e!==t||r.enabled===!1)&&(!n.suspense||e.state.status!=="error")&&RY(e,n)}function RY(e,t){return e.isStaleByTime(t.staleTime)}var p2e=k(_o()),f2e=p2e.default.unstable_batchedUpdates;kn.setBatchNotifyFunction(f2e);var d2e=console;AY(d2e);var Zd=k(L()),m2e=Zd.default.createContext(void 0),h2e=Zd.default.createContext(!1);function g2e(e){return e&&typeof window<"u"?(window.ReactQueryClientContext||(window.ReactQueryClientContext=m2e),window.ReactQueryClientContext):m2e}var zY=function(){var t=Zd.default.useContext(g2e(Zd.default.useContext(h2e)));if(!t)throw new Error("No QueryClient set, use QueryClientProvider to set one");return t},Br=function(t){var n=t.client,r=t.contextSharing,o=r===void 0?!1:r,i=t.children;Zd.default.useEffect(function(){return n.mount(),function(){n.unmount()}},[n]);var u=g2e(o);return Zd.default.createElement(h2e.Provider,{value:o},Zd.default.createElement(u.Provider,{value:n},i))};var LY=k(L());function fkt(){var e=!1;return{clearReset:function(){e=!1},reset:function(){e=!0},isReset:function(){return e}}}var dkt=LY.default.createContext(fkt()),v2e=function(){return LY.default.useContext(dkt)};function y2e(e,t,n){return typeof t=="function"?t.apply(void 0,n):typeof t=="boolean"?t:!!e}var Cy=k(L());function b2e(e,t){var n=Cy.default.useRef(!1),r=Cy.default.useState(0),o=r[1],i=zY(),u=v2e(),f=i.defaultQueryObserverOptions(e);f.optimisticResults=!0,f.onError&&(f.onError=kn.batchCalls(f.onError)),f.onSuccess&&(f.onSuccess=kn.batchCalls(f.onSuccess)),f.onSettled&&(f.onSettled=kn.batchCalls(f.onSettled)),f.suspense&&(typeof f.staleTime!="number"&&(f.staleTime=1e3),f.cacheTime===0&&(f.cacheTime=1)),(f.suspense||f.useErrorBoundary)&&(u.isReset()||(f.retryOnMount=!1));var h=Cy.default.useState(function(){return new t(i,f)}),y=h[0],O=y.getOptimisticResult(f);if(Cy.default.useEffect(function(){n.current=!0,u.clearReset();var S=y.subscribe(kn.batchCalls(function(){n.current&&o(function(I){return I+1})}));return y.updateResult(),function(){n.current=!1,S()}},[u,y]),Cy.default.useEffect(function(){y.setOptions(f,{listeners:!1})},[f,y]),f.suspense&&O.isLoading)throw y.fetchOptimistic(f).then(function(S){var I=S.data;f.onSuccess==null||f.onSuccess(I),f.onSettled==null||f.onSettled(I,null)}).catch(function(S){u.clearReset(),f.onError==null||f.onError(S),f.onSettled==null||f.onSettled(void 0,S)});if(O.isError&&!u.isReset()&&!O.isFetching&&y2e(f.suspense,f.useErrorBoundary,[O.error,y.getCurrentQuery()]))throw O.error;return f.notifyOnChangeProps==="tracked"&&(O=y.trackResult(O,f)),O}function an(e,t,n){var r=Iy(e,t,n);return b2e(r,TY)}var Dp=k(L());var bM=k(L());function wM(e){let{descText:t,description:n,...r}=e;return bM.default.createElement(bM.default.Fragment,null,bM.default.createElement(ar,{...r},t||n))}var w2e=k(_o()),mkt="No description available.";function OM(e){let{api:t,ontologyId:n,iri:r,descText:o,thingType:i,parameter:u,useLegacy:f,...h}=e,y=new fn(t),{data:O,isLoading:S,isSuccess:I,isError:A,error:C}=an(["metadata",t,u,i,r,n,f],async()=>y.getThingObject(r,i,n,u,f));return Dp.default.createElement(Dp.default.Fragment,null,S&&Dp.default.createElement($r,{size:"s"}),I&&O&&Dp.default.createElement(wM,{description:O.getDescription()||mkt,descText:o,...h}),A&&Dp.default.createElement(ar,null,gi(C,"description")))}function O2e(e,t,n){w2e.default.render(hkt(e),t,n)}function hkt(e){let t=new Wr;return Dp.default.createElement(Nr,{colorMode:"light"},Dp.default.createElement(Br,{client:t},Dp.default.createElement(OM,{api:e.api,ontologyId:e.ontologyId,iri:e.iri,descText:e.descText,thingType:e.thingType,parameter:e.parameter,color:e.color,useLegacy:e.useLegacy})))}var xs=k(L());var x2e=k(_o());function Ay(e){let{iri:t,iriText:n,color:r,externalIcon:o,urlPrefix:i,copyButton:u}=e,[f,h]=(0,xs.useState)(!1),O=typeof i<"u"&&i!==""?i+encodeURIComponent(t):t,S=()=>f?xs.default.createElement(sl,{style:{marginLeft:"5px",color:r&&(yP(r)||bP(r))?r:""},display:"base",iconType:"check",key:"copy-btn",color:r&&wP(r)?r:void 0}):xs.default.createElement(sl,{display:"base",iconType:"copy",key:"copy-btn",style:{marginLeft:"5px",color:r&&(yP(r)||bP(r))?r:""},color:r&&wP(r)?r:void 0,onClick:()=>{navigator.clipboard.writeText(O),h(!0),setTimeout(()=>{h(!1)},2e3)}});return xs.default.createElement(Mt,{grow:!1},xs.default.createElement("div",null,xs.default.createElement(J1,{href:O,target:"_blank",style:{color:r&&(yP(r)||bP(r))?r:""},color:r&&wP(r)?r:void 0,external:o},n||t),u&&xs.default.createElement(S,null)))}function _2e(e,t,n){x2e.default.render(gkt(e),t,n)}function gkt(e){let t=new Wr;return xs.default.createElement(Nr,{colorMode:"light"},xs.default.createElement(Br,{client:t},xs.default.createElement(Ay,{iri:e.iri,iriText:e.iriText,color:e.color,externalIcon:e.externalIcon,urlPrefix:e.urlPrefix,copyButton:e.copyButton})))}var Fa=k(L());var My=k(L());function xM(e){return My.default.createElement(My.default.Fragment,null,My.default.createElement("span",null,My.default.createElement(Oo,{color:e.colorFirst||"primary"},e.ontologyName.toUpperCase())," > ",My.default.createElement(Oo,{color:e.colorSecond||"success"},e.shortForm?e.shortForm.toUpperCase():"No short form available")))}var S2e=k(_o());function ym(e){let{api:t,ontologyId:n,iri:r,entityType:o,colorFirst:i,colorSecond:u,parameter:f,useLegacy:h}=e,y=new fn(t),{data:O,isLoading:S,isSuccess:I,isError:A,error:C}=an(["metadata",t,f,o,r,n,h],async()=>y.getEntityObject(r,o,n,f,h));return Fa.default.createElement(Fa.default.Fragment,null,S&&Fa.default.createElement("span",null,Fa.default.createElement(Oo,{color:i||(e.ontologyId?"primary":"warning")},e.ontologyId?.toUpperCase()||Fa.default.createElement($r,{size:"s"}))," > ",Fa.default.createElement(Oo,{color:u||"warning"},Fa.default.createElement($r,{size:"s"}))),I&&O&&cs(O)&&Fa.default.createElement(xM,{isDefiningOntology:O.getIsDefiningOntology(),ontologyName:O.getOntologyId(),shortForm:O.getShortForm(),ontologyId:n}),A&&Fa.default.createElement("span",null,Fa.default.createElement(Oo,{color:i||(e.ontologyId||O&&O.getOntologyId()?"primary":"danger")},e.ontologyId?.toUpperCase()||O&&O.getOntologyId().toUpperCase()||gi(C,"ontology"))," > ",Fa.default.createElement(Oo,{color:u||(O&&O.getShortForm()?"success":"danger")},O&&O.getShortForm()?O.getShortForm().toUpperCase():gi(C,"short form"))))}function j2e(e,t,n){S2e.default.render(vkt(e),t,n)}function vkt(e){let t=new Wr;return Fa.default.createElement(Nr,{colorMode:"light"},Fa.default.createElement(Br,{client:t},Fa.default.createElement(ym,{api:e.api,entityType:e.entityType,iri:e.iri,ontologyId:e.ontologyId,colorFirst:e.colorFirst,colorSecond:e.colorSecond,parameter:e.parameter,useLegacy:e.useLegacy})))}var Np=k(L());var tS=k(L());function _M(e){function t(){return e.synonyms&&e.synonyms.length>0?e.synonyms.map((n,r)=>tS.default.createElement(Mt,{key:n+r},n)):tS.default.createElement(ar,null,"No alternative names exist.")}return tS.default.createElement(Hi,null,tS.default.createElement(to,{style:{padding:10},direction:"column"},t()))}var I2e=k(_o());function P2e(e){let{iri:t,api:n,parameter:r,entityType:o,ontologyId:i,useLegacy:u}=e,f=new fn(n),{data:h,isLoading:y,isSuccess:O,isError:S,error:I}=an(["metadata",n,r,o,t,i,u],async()=>f.getEntityObject(t,o,i,r,u));return Np.default.createElement(Np.default.Fragment,null,O&&h&&cs(h)&&Np.default.createElement(_M,{synonyms:h.getSynonyms().map(A=>A.value)}),y&&Np.default.createElement($r,null),S&&Np.default.createElement(ar,null,gi(I,"alternative names")))}function k2e(e,t,n){I2e.default.render(ykt(e),t,n)}function ykt(e){let t=new Wr;return Np.default.createElement(Nr,{colorMode:"light"},Np.default.createElement(Br,{client:t},Np.default.createElement(P2e,{iri:e.iri,api:e.api,ontologyId:e.ontologyId,entityType:e.entityType,parameter:e.parameter})))}var Fp=k(L());var bm=k(L());function SM(e){function t(n){return n&&n.length>0?n?.map((r,o)=>bm.default.createElement(Mt,{key:o},r)):bm.default.createElement(ar,null,"No cross references exist.")}return bm.default.createElement(Hi,null,bm.default.createElement(bm.default.Fragment,null,bm.default.createElement(to,{style:{padding:7},direction:"column"},t(e.crossrefs))))}var E2e=k(_o());function C2e(e){let{iri:t,api:n,parameter:r,entityType:o,ontologyId:i,useLegacy:u}=e,f=new fn(n),{data:h,isLoading:y,isSuccess:O,isError:S,error:I}=an(["metadata",n,r,o,t,i,u],async()=>f.getEntityObject(t,o,i,r,u));return Fp.default.createElement(Fp.default.Fragment,null,O&&h&&cs(h)&&Fp.default.createElement(SM,{crossrefs:Rt.fromJson(h.getCrossReferences()).map(A=>A.value)}),y&&Fp.default.createElement($r,null),S&&Fp.default.createElement(ar,null,gi(I,"cross references")))}function A2e(e,t,n){E2e.default.render(bkt(e),t,n)}function bkt(e){let t=new Wr;return Fp.default.createElement(Nr,{colorMode:"light"},Fp.default.createElement(Br,{client:t},Fp.default.createElement(C2e,{iri:e.iri,api:e.api,ontologyId:e.ontologyId,entityType:e.entityType,parameter:e.parameter,useLegacy:e.useLegacy})))}var e0=k(L());(()=>{var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,o=Object.getPrototypeOf,i=Object.prototype.hasOwnProperty,u=(s,p)=>()=>(s&&(p=s(s=0)),p),f=(s,p)=>()=>(p||s((p={exports:{}}).exports,p),p.exports),h=(s,p)=>{for(var d in p)t(s,d,{get:p[d],enumerable:!0})},y=(s,p,d,w)=>{if(p&&typeof p=="object"||typeof p=="function")for(let _ of r(p))!i.call(s,_)&&_!==d&&t(s,_,{get:()=>p[_],enumerable:!(w=n(p,_))||w.enumerable});return s},O=(s,p,d)=>(d=s!=null?e(o(s)):{},y(p||!s||!s.__esModule?t(d,"default",{value:s,enumerable:!0}):d,s)),S=s=>y(t({},"__esModule",{value:!0}),s),I=f((s,p)=>{"use strict";var d=Object.getOwnPropertySymbols,w=Object.prototype.hasOwnProperty,_=Object.prototype.propertyIsEnumerable;function E(z){if(z==null)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(z)}function T(){try{if(!Object.assign)return!1;var z=new String("abc");if(z[5]="de",Object.getOwnPropertyNames(z)[0]==="5")return!1;for(var V={},H=0;H<10;H++)V["_"+String.fromCharCode(H)]=H;var G=Object.getOwnPropertyNames(V).map(function(ne){return V[ne]});if(G.join("")!=="0123456789")return!1;var ee={};return"abcdefghijklmnopqrst".split("").forEach(function(ne){ee[ne]=ne}),Object.keys(Object.assign({},ee)).join("")==="abcdefghijklmnopqrst"}catch{return!1}}p.exports=T()?Object.assign:function(z,V){for(var H,G=E(z),ee,ne=1;ne{"use strict";var p=I(),d=60103,w=60106;s.Fragment=60107,s.StrictMode=60108,s.Profiler=60114;var _=60109,E=60110,T=60112;s.Suspense=60113;var z=60115,V=60116;typeof Symbol=="function"&&Symbol.for&&(H=Symbol.for,d=H("react.element"),w=H("react.portal"),s.Fragment=H("react.fragment"),s.StrictMode=H("react.strict_mode"),s.Profiler=H("react.profiler"),_=H("react.provider"),E=H("react.context"),T=H("react.forward_ref"),s.Suspense=H("react.suspense"),z=H("react.memo"),V=H("react.lazy"));var H,G=typeof Symbol=="function"&&Symbol.iterator;function ee(Me){return Me===null||typeof Me!="object"?null:(Me=G&&Me[G]||Me["@@iterator"],typeof Me=="function"?Me:null)}function ne(Me){for(var st="https://reactjs.org/docs/error-decoder.html?invariant="+Me,sr=1;sr{"use strict";p.exports=A()}),M=f(s=>{"use strict";var p,d,w,_;typeof performance=="object"&&typeof performance.now=="function"?(E=performance,s.unstable_now=function(){return E.now()}):(T=Date,z=T.now(),s.unstable_now=function(){return T.now()-z});var E,T,z;typeof window>"u"||typeof MessageChannel!="function"?(V=null,H=null,G=function(){if(V!==null)try{var nt=s.unstable_now();V(!0,nt),V=null}catch(Ot){throw setTimeout(G,0),Ot}},p=function(nt){V!==null?setTimeout(p,0,nt):(V=nt,setTimeout(G,0))},d=function(nt,Ot){H=setTimeout(nt,Ot)},w=function(){clearTimeout(H)},s.unstable_shouldYield=function(){return!1},_=s.unstable_forceFrameRate=function(){}):(ee=window.setTimeout,ne=window.clearTimeout,typeof console<"u"&&(ie=window.cancelAnimationFrame,typeof window.requestAnimationFrame!="function"&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills"),typeof ie!="function"&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills")),oe=!1,ce=null,me=-1,ae=5,Te=0,s.unstable_shouldYield=function(){return s.unstable_now()>=Te},_=function(){},s.unstable_forceFrameRate=function(nt){0>nt||125>>1,tr=nt[Tt];if(tr!==void 0&&0ue(Hn,Pt))Yn!==void 0&&0>ue(Yn,Hn)?(nt[Tt]=Yn,nt[bo]=Pt,Tt=bo):(nt[Tt]=Hn,nt[kr]=Pt,Tt=kr);else if(Yn!==void 0&&0>ue(Yn,Pt))nt[Tt]=Yn,nt[bo]=Pt,Tt=bo;else break e}}return Ot}return null}function ue(nt,Ot){var Pt=nt.sortIndex-Ot.sortIndex;return Pt!==0?Pt:nt.id-Ot.id}var Se=[],ze=[],We=1,Je=null,tt=3,vt=!1,qt=!1,Jt=!1;function nr(nt){for(var Ot=we(ze);Ot!==null;){if(Ot.callback===null)Ae(ze);else if(Ot.startTime<=nt)Ae(ze),Ot.sortIndex=Ot.expirationTime,ke(Se,Ot);else break;Ot=we(ze)}}function Me(nt){if(Jt=!1,nr(nt),!qt)if(we(Se)!==null)qt=!0,p(st);else{var Ot=we(ze);Ot!==null&&d(Me,Ot.startTime-nt)}}function st(nt,Ot){qt=!1,Jt&&(Jt=!1,w()),vt=!0;var Pt=tt;try{for(nr(Ot),Je=we(Se);Je!==null&&(!(Je.expirationTime>Ot)||nt&&!s.unstable_shouldYield());){var Tt=Je.callback;if(typeof Tt=="function"){Je.callback=null,tt=Je.priorityLevel;var tr=Tt(Je.expirationTime<=Ot);Ot=s.unstable_now(),typeof tr=="function"?Je.callback=tr:Je===we(Se)&&Ae(Se),nr(Ot)}else Ae(Se);Je=we(Se)}if(Je!==null)var kr=!0;else{var Hn=we(ze);Hn!==null&&d(Me,Hn.startTime-Ot),kr=!1}return kr}finally{Je=null,tt=Pt,vt=!1}}var sr=_;s.unstable_IdlePriority=5,s.unstable_ImmediatePriority=1,s.unstable_LowPriority=4,s.unstable_NormalPriority=3,s.unstable_Profiling=null,s.unstable_UserBlockingPriority=2,s.unstable_cancelCallback=function(nt){nt.callback=null},s.unstable_continueExecution=function(){qt||vt||(qt=!0,p(st))},s.unstable_getCurrentPriorityLevel=function(){return tt},s.unstable_getFirstCallbackNode=function(){return we(Se)},s.unstable_next=function(nt){switch(tt){case 1:case 2:case 3:var Ot=3;break;default:Ot=tt}var Pt=tt;tt=Ot;try{return nt()}finally{tt=Pt}},s.unstable_pauseExecution=function(){},s.unstable_requestPaint=sr,s.unstable_runWithPriority=function(nt,Ot){switch(nt){case 1:case 2:case 3:case 4:case 5:break;default:nt=3}var Pt=tt;tt=nt;try{return Ot()}finally{tt=Pt}},s.unstable_scheduleCallback=function(nt,Ot,Pt){var Tt=s.unstable_now();switch(typeof Pt=="object"&&Pt!==null?(Pt=Pt.delay,Pt=typeof Pt=="number"&&0Tt?(nt.sortIndex=Pt,ke(ze,nt),we(Se)===null&&nt===we(ze)&&(Jt?w():Jt=!0,d(Me,Pt-Tt))):(nt.sortIndex=tr,ke(Se,nt),qt||vt||(qt=!0,p(st))),nt},s.unstable_wrapCallback=function(nt){var Ot=tt;return function(){var Pt=tt;tt=Ot;try{return nt.apply(this,arguments)}finally{tt=Pt}}}}),F=f((s,p)=>{"use strict";p.exports=M()}),R=f(s=>{"use strict";var p=C(),d=I(),w=F();function _(l){for(var c="https://reactjs.org/docs/error-decoder.html?invariant="+l,m=1;m"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),G=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,ee=Object.prototype.hasOwnProperty,ne={},ie={};function oe(l){return ee.call(ie,l)?!0:ee.call(ne,l)?!1:G.test(l)?ie[l]=!0:(ne[l]=!0,!1)}function ce(l,c,m,P){if(m!==null&&m.type===0)return!1;switch(typeof c){case"function":case"symbol":return!0;case"boolean":return P?!1:m!==null?!m.acceptsBooleans:(l=l.toLowerCase().slice(0,5),l!=="data-"&&l!=="aria-");default:return!1}}function me(l,c,m,P){if(c===null||typeof c>"u"||ce(l,c,m,P))return!0;if(P)return!1;if(m!==null)switch(m.type){case 3:return!c;case 4:return c===!1;case 5:return isNaN(c);case 6:return isNaN(c)||1>c}return!1}function ae(l,c,m,P,N,J,re){this.acceptsBooleans=c===2||c===3||c===4,this.attributeName=P,this.attributeNamespace=N,this.mustUseProperty=m,this.propertyName=l,this.type=c,this.sanitizeURL=J,this.removeEmptyString=re}var Te={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(l){Te[l]=new ae(l,0,!1,l,null,!1,!1)}),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(l){var c=l[0];Te[c]=new ae(c,1,!1,l[1],null,!1,!1)}),["contentEditable","draggable","spellCheck","value"].forEach(function(l){Te[l]=new ae(l,2,!1,l.toLowerCase(),null,!1,!1)}),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(l){Te[l]=new ae(l,2,!1,l,null,!1,!1)}),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(l){Te[l]=new ae(l,3,!1,l.toLowerCase(),null,!1,!1)}),["checked","multiple","muted","selected"].forEach(function(l){Te[l]=new ae(l,3,!0,l,null,!1,!1)}),["capture","download"].forEach(function(l){Te[l]=new ae(l,4,!1,l,null,!1,!1)}),["cols","rows","size","span"].forEach(function(l){Te[l]=new ae(l,6,!1,l,null,!1,!1)}),["rowSpan","start"].forEach(function(l){Te[l]=new ae(l,5,!1,l.toLowerCase(),null,!1,!1)});var Ne=/[\-:]([a-z])/g;function je(l){return l[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(l){var c=l.replace(Ne,je);Te[c]=new ae(c,1,!1,l,null,!1,!1)}),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(l){var c=l.replace(Ne,je);Te[c]=new ae(c,1,!1,l,"http://www.w3.org/1999/xlink",!1,!1)}),["xml:base","xml:lang","xml:space"].forEach(function(l){var c=l.replace(Ne,je);Te[c]=new ae(c,1,!1,l,"http://www.w3.org/XML/1998/namespace",!1,!1)}),["tabIndex","crossOrigin"].forEach(function(l){Te[l]=new ae(l,1,!1,l.toLowerCase(),null,!1,!1)}),Te.xlinkHref=new ae("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach(function(l){Te[l]=new ae(l,1,!1,l.toLowerCase(),null,!0,!0)});function ke(l,c,m,P){var N=Te.hasOwnProperty(c)?Te[c]:null,J=N!==null?N.type===0:P?!1:!(!(2pe||N[re]!==J[pe])return` -`+N[re].replace(" at new "," at ");while(1<=re&&0<=pe);break}}}finally{Kn=!1,Error.prepareStackTrace=m}return(l=l?l.displayName||l.name:"")?yo(l):""}function t1(l){switch(l.tag){case 5:return yo(l.type);case 16:return yo("Lazy");case 13:return yo("Suspense");case 19:return yo("SuspenseList");case 0:case 2:case 15:return l=ra(l.type,!1),l;case 11:return l=ra(l.type.render,!1),l;case 22:return l=ra(l.type._render,!1),l;case 1:return l=ra(l.type,!0),l;default:return""}}function Qa(l){if(l==null)return null;if(typeof l=="function")return l.displayName||l.name||null;if(typeof l=="string")return l;switch(l){case je:return"Fragment";case ue:return"Portal";case Fe:return"Profiler";case ze:return"StrictMode";case Ut:return"Suspense";case Gt:return"SuspenseList"}if(typeof l=="object")switch(l.$$typeof){case tt:return(l.displayName||"Context")+".Consumer";case Je:return(l._context.displayName||"Context")+".Provider";case gt:var c=l.render;return c=c.displayName||c.name||"",l.displayName||(c!==""?"ForwardRef("+c+")":"ForwardRef");case or:return Qa(l.type);case st:return Qa(l._render);case Me:c=l._payload,l=l._init;try{return Qa(l(c))}catch{}}return null}function Sl(l){switch(typeof l){case"boolean":case"number":case"object":case"string":case"undefined":return l;default:return""}}function r1(l){var c=l.type;return(l=l.nodeName)&&l.toLowerCase()==="input"&&(c==="checkbox"||c==="radio")}function jl(l){var c=r1(l)?"checked":"value",m=Object.getOwnPropertyDescriptor(l.constructor.prototype,c),k=""+l[c];if(!l.hasOwnProperty(c)&&typeof m<"u"&&typeof m.get=="function"&&typeof m.set=="function"){var N=m.get,J=m.set;return Object.defineProperty(l,c,{configurable:!0,get:function(){return N.call(this)},set:function(re){k=""+re,J.call(this,re)}}),Object.defineProperty(l,c,{enumerable:m.enumerable}),{getValue:function(){return k},setValue:function(re){k=""+re},stopTracking:function(){l._valueTracker=null,delete l[c]}}}}function Ri(l){l._valueTracker||(l._valueTracker=jl(l))}function Bu(l){if(!l)return!1;var c=l._valueTracker;if(!c)return!0;var m=c.getValue(),k="";return l&&(k=r1(l)?l.checked?"true":"false":l.value),l=k,l!==m?(c.setValue(l),!0):!1}function Bs(l){if(l=l||(typeof document<"u"?document:void 0),typeof l>"u")return null;try{return l.activeElement||l.body}catch{return l.body}}function tp(l,c){var m=c.checked;return d({},c,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:m??l._wrapperState.initialChecked})}function Sf(l,c){var m=c.defaultValue==null?"":c.defaultValue,k=c.checked!=null?c.checked:c.defaultChecked;m=Sl(c.value!=null?c.value:m),l._wrapperState={initialChecked:k,initialValue:m,controlled:c.type==="checkbox"||c.type==="radio"?c.checked!=null:c.value!=null}}function WS(l,c){c=c.checked,c!=null&&Pe(l,"checked",c,!1)}function S2(l,c){WS(l,c);var m=Sl(c.value),k=c.type;if(m!=null)k==="number"?(m===0&&l.value===""||l.value!=m)&&(l.value=""+m):l.value!==""+m&&(l.value=""+m);else if(k==="submit"||k==="reset"){l.removeAttribute("value");return}c.hasOwnProperty("value")?rp(l,c.type,m):c.hasOwnProperty("defaultValue")&&rp(l,c.type,Sl(c.defaultValue)),c.checked==null&&c.defaultChecked!=null&&(l.defaultChecked=!!c.defaultChecked)}function n1(l,c,m){if(c.hasOwnProperty("value")||c.hasOwnProperty("defaultValue")){var k=c.type;if(!(k!=="submit"&&k!=="reset"||c.value!==void 0&&c.value!==null))return;c=""+l._wrapperState.initialValue,m||c===l.value||(l.value=c),l.defaultValue=c}m=l.name,m!==""&&(l.name=""),l.defaultChecked=!!l._wrapperState.initialChecked,m!==""&&(l.name=m)}function rp(l,c,m){(c!=="number"||Bs(l.ownerDocument)!==l)&&(m==null?l.defaultValue=""+l._wrapperState.initialValue:l.defaultValue!==""+m&&(l.defaultValue=""+m))}function vT(l){var c="";return p.Children.forEach(l,function(m){m!=null&&(c+=m)}),c}function Dh(l,c){return l=d({children:void 0},c),(c=vT(c.children))&&(l.children=c),l}function jf(l,c,m,k){if(l=l.options,c){c={};for(var N=0;N=m.length))throw Error(_(93));m=m[0]}c=m}c==null&&(c=""),m=c}l._wrapperState={initialValue:Sl(m)}}function BS(l,c){var m=Sl(c.value),k=Sl(c.defaultValue);m!=null&&(m=""+m,m!==l.value&&(l.value=m),c.defaultValue==null&&l.defaultValue!==m&&(l.defaultValue=m)),k!=null&&(l.defaultValue=""+k)}function I2(l){var c=l.textContent;c===l._wrapperState.initialValue&&c!==""&&c!==null&&(l.value=c)}var yT={html:"http://www.w3.org/1999/xhtml",mathml:"http://www.w3.org/1998/Math/MathML",svg:"http://www.w3.org/2000/svg"};function bZ(l){switch(l){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function bT(l,c){return l==null||l==="http://www.w3.org/1999/xhtml"?bZ(c):l==="http://www.w3.org/2000/svg"&&c==="foreignObject"?"http://www.w3.org/1999/xhtml":l}var HS,wZ=function(l){return typeof MSApp<"u"&&MSApp.execUnsafeLocalFunction?function(c,m,k,N){MSApp.execUnsafeLocalFunction(function(){return l(c,m,k,N)})}:l}(function(l,c){if(l.namespaceURI!==yT.svg||"innerHTML"in l)l.innerHTML=c;else{for(HS=HS||document.createElement("div"),HS.innerHTML=""+c.valueOf().toString()+"",c=HS.firstChild;l.firstChild;)l.removeChild(l.firstChild);for(;c.firstChild;)l.appendChild(c.firstChild)}});function k2(l,c){if(c){var m=l.firstChild;if(m&&m===l.lastChild&&m.nodeType===3){m.nodeValue=c;return}}l.textContent=c}var P2={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},LOe=["Webkit","ms","Moz","O"];Object.keys(P2).forEach(function(l){LOe.forEach(function(c){c=c+l.charAt(0).toUpperCase()+l.substring(1),P2[c]=P2[l]})});function OZ(l,c,m){return c==null||typeof c=="boolean"||c===""?"":m||typeof c!="number"||c===0||P2.hasOwnProperty(l)&&P2[l]?(""+c).trim():c+"px"}function xZ(l,c){l=l.style;for(var m in c)if(c.hasOwnProperty(m)){var k=m.indexOf("--")===0,N=OZ(m,c[m],k);m==="float"&&(m="cssFloat"),k?l.setProperty(m,N):l[m]=N}}var DOe=d({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function wT(l,c){if(c){if(DOe[l]&&(c.children!=null||c.dangerouslySetInnerHTML!=null))throw Error(_(137,l));if(c.dangerouslySetInnerHTML!=null){if(c.children!=null)throw Error(_(60));if(!(typeof c.dangerouslySetInnerHTML=="object"&&"__html"in c.dangerouslySetInnerHTML))throw Error(_(61))}if(c.style!=null&&typeof c.style!="object")throw Error(_(62))}}function OT(l,c){if(l.indexOf("-")===-1)return typeof c.is=="string";switch(l){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}function xT(l){return l=l.target||l.srcElement||window,l.correspondingUseElement&&(l=l.correspondingUseElement),l.nodeType===3?l.parentNode:l}var _T=null,Nh=null,Fh=null;function _Z(l){if(l=$2(l)){if(typeof _T!="function")throw Error(_(280));var c=l.stateNode;c&&(c=sj(c),_T(l.stateNode,l.type,c))}}function SZ(l){Nh?Fh?Fh.push(l):Fh=[l]:Nh=l}function jZ(){if(Nh){var l=Nh,c=Fh;if(Fh=Nh=null,_Z(l),c)for(l=0;lk?0:1<m;m++)c.push(l);return c}function XS(l,c,m){l.pendingLanes|=c;var k=c-1;l.suspendedLanes&=k,l.pingedLanes&=k,l=l.eventTimes,c=31-Ef(c),l[c]=m}var Ef=Math.clz32?Math.clz32:ZOe,YOe=Math.log,QOe=Math.LN2;function ZOe(l){return l===0?32:31-(YOe(l)/QOe|0)|0}var e7e=w.unstable_UserBlockingPriority,t7e=w.unstable_runWithPriority,KS=!0;function r7e(l,c,m,k){o1||jT();var N=DT,J=o1;o1=!0;try{IZ(N,l,c,m,k)}finally{(o1=J)||kT()}}function n7e(l,c,m,k){t7e(e7e,DT.bind(null,l,c,m,k))}function DT(l,c,m,k){if(KS){var N;if((N=(c&4)===0)&&0=F2),QZ=String.fromCharCode(32),ZZ=!1;function eee(l,c){switch(l){case"keyup":return I7e.indexOf(c.keyCode)!==-1;case"keydown":return c.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function tee(l){return l=l.detail,typeof l=="object"&&"data"in l?l.data:null}var Uh=!1;function P7e(l,c){switch(l){case"compositionend":return tee(c);case"keypress":return c.which!==32?null:(ZZ=!0,QZ);case"textInput":return l=c.data,l===QZ&&ZZ?null:l;default:return null}}function E7e(l,c){if(Uh)return l==="compositionend"||!UT&&eee(l,c)?(l=$Z(),YS=FT=Cf=null,Uh=!1,l):null;switch(l){case"paste":return null;case"keypress":if(!(c.ctrlKey||c.altKey||c.metaKey)||c.ctrlKey&&c.altKey){if(c.char&&1=c)return{node:m,offset:c-l};l=k}e:{for(;m;){if(m.nextSibling){m=m.nextSibling;break e}m=m.parentNode}m=void 0}m=lee(m)}}function uee(l,c){return l&&c?l===c?!0:l&&l.nodeType===3?!1:c&&c.nodeType===3?uee(l,c.parentNode):"contains"in l?l.contains(c):l.compareDocumentPosition?!!(l.compareDocumentPosition(c)&16):!1:!1}function cee(){for(var l=window,c=Bs();c instanceof l.HTMLIFrameElement;){try{var m=typeof c.contentWindow.location.href=="string"}catch{m=!1}if(m)l=c.contentWindow;else break;c=Bs(l.document)}return c}function GT(l){var c=l&&l.nodeName&&l.nodeName.toLowerCase();return c&&(c==="input"&&(l.type==="text"||l.type==="search"||l.type==="tel"||l.type==="url"||l.type==="password")||c==="textarea"||l.contentEditable==="true")}var F7e=H&&"documentMode"in document&&11>=document.documentMode,$h=null,XT=null,V2=null,KT=!1;function pee(l,c,m){var k=m.window===m?m.document:m.nodeType===9?m:m.ownerDocument;KT||$h==null||$h!==Bs(k)||(k=$h,"selectionStart"in k&>(k)?k={start:k.selectionStart,end:k.selectionEnd}:(k=(k.ownerDocument&&k.ownerDocument.defaultView||window).getSelection(),k={anchorNode:k.anchorNode,anchorOffset:k.anchorOffset,focusNode:k.focusNode,focusOffset:k.focusOffset}),V2&&H2(V2,k)||(V2=k,k=oj(XT,"onSelect"),0Yh||(l.current=nR[Yh],nR[Yh]=null,Yh--)}function Eo(l,c){Yh++,nR[Yh]=l.current,l.current=c}var Tf={},na=Mf(Tf),Za=Mf(!1),l1=Tf;function Qh(l,c){var m=l.type.contextTypes;if(!m)return Tf;var k=l.stateNode;if(k&&k.__reactInternalMemoizedUnmaskedChildContext===c)return k.__reactInternalMemoizedMaskedChildContext;var N={},J;for(J in m)N[J]=c[J];return k&&(l=l.stateNode,l.__reactInternalMemoizedUnmaskedChildContext=c,l.__reactInternalMemoizedMaskedChildContext=N),N}function el(l){return l=l.childContextTypes,l!=null}function uj(){io(Za),io(na)}function Iee(l,c,m){if(na.current!==Tf)throw Error(_(168));Eo(na,c),Eo(Za,m)}function kee(l,c,m){var k=l.stateNode;if(l=c.childContextTypes,typeof k.getChildContext!="function")return m;k=k.getChildContext();for(var N in k)if(!(N in l))throw Error(_(108,Qa(c)||"Unknown",N));return d({},m,k)}function cj(l){return l=(l=l.stateNode)&&l.__reactInternalMemoizedMergedChildContext||Tf,l1=na.current,Eo(na,l),Eo(Za,Za.current),!0}function Pee(l,c,m){var k=l.stateNode;if(!k)throw Error(_(169));m?(l=kee(l,c,l1),k.__reactInternalMemoizedMergedChildContext=l,io(Za),io(na),Eo(na,l)):io(Za),Eo(Za,m)}var oR=null,s1=null,H7e=w.unstable_runWithPriority,iR=w.unstable_scheduleCallback,aR=w.unstable_cancelCallback,V7e=w.unstable_shouldYield,Eee=w.unstable_requestPaint,lR=w.unstable_now,q7e=w.unstable_getCurrentPriorityLevel,pj=w.unstable_ImmediatePriority,Cee=w.unstable_UserBlockingPriority,Aee=w.unstable_NormalPriority,Mee=w.unstable_LowPriority,Tee=w.unstable_IdlePriority,sR={},U7e=Eee!==void 0?Eee:function(){},np=null,fj=null,uR=!1,Ree=lR(),oa=1e4>Ree?lR:function(){return lR()-Ree};function Zh(){switch(q7e()){case pj:return 99;case Cee:return 98;case Aee:return 97;case Mee:return 96;case Tee:return 95;default:throw Error(_(332))}}function zee(l){switch(l){case 99:return pj;case 98:return Cee;case 97:return Aee;case 96:return Mee;case 95:return Tee;default:throw Error(_(332))}}function u1(l,c){return l=zee(l),H7e(l,c)}function J2(l,c,m){return l=zee(l),iR(l,c,m)}function Vu(){if(fj!==null){var l=fj;fj=null,aR(l)}Lee()}function Lee(){if(!uR&&np!==null){uR=!0;var l=0;try{var c=np;u1(99,function(){for(;lvr?(Ur=Ft,Ft=null):Ur=Ft.sibling;var Rr=lt(Re,Ft,Ee[vr],Ke);if(Rr===null){Ft===null&&(Ft=Ur);break}l&&Ft&&Rr.alternate===null&&c(Re,Ft),_e=J(Rr,_e,vr),gr===null?et=Rr:gr.sibling=Rr,gr=Rr,Ft=Ur}if(vr===Ee.length)return m(Re,Ft),et;if(Ft===null){for(;vrvr?(Ur=Ft,Ft=null):Ur=Ft.sibling;var qf=lt(Re,Ft,Rr.value,Ke);if(qf===null){Ft===null&&(Ft=Ur);break}l&&Ft&&qf.alternate===null&&c(Re,Ft),_e=J(qf,_e,vr),gr===null?et=qf:gr.sibling=qf,gr=qf,Ft=Ur}if(Rr.done)return m(Re,Ft),et;if(Ft===null){for(;!Rr.done;vr++,Rr=Ee.next())Rr=dr(Re,Rr.value,Ke),Rr!==null&&(_e=J(Rr,_e,vr),gr===null?et=Rr:gr.sibling=Rr,gr=Rr);return et}for(Ft=k(Re,Ft);!Rr.done;vr++,Rr=Ee.next())Rr=qt(Ft,Re,vr,Rr.value,Ke),Rr!==null&&(l&&Rr.alternate!==null&&Ft.delete(Rr.key===null?vr:Rr.key),_e=J(Rr,_e,vr),gr===null?et=Rr:gr.sibling=Rr,gr=Rr);return l&&Ft.forEach(function(_8e){return c(Re,_8e)}),et}return function(Re,_e,Ee,Ke){var et=typeof Ee=="object"&&Ee!==null&&Ee.type===je&&Ee.key===null;et&&(Ee=Ee.props.children);var gr=typeof Ee=="object"&&Ee!==null;if(gr)switch(Ee.$$typeof){case Ae:e:{for(gr=Ee.key,et=_e;et!==null;){if(et.key===gr){switch(et.tag){case 7:if(Ee.type===je){m(Re,et.sibling),_e=N(et,Ee.props.children),_e.return=Re,Re=_e;break e}break;default:if(et.elementType===Ee.type){m(Re,et.sibling),_e=N(et,Ee.props),_e.ref=X2(Re,et,Ee),_e.return=Re,Re=_e;break e}}m(Re,et);break}else c(Re,et);et=et.sibling}Ee.type===je?(_e=ug(Ee.props.children,Re.mode,Ke,Ee.key),_e.return=Re,Re=_e):(Ke=Dj(Ee.type,Ee.key,Ee.props,null,Re.mode,Ke),Ke.ref=X2(Re,_e,Ee),Ke.return=Re,Re=Ke)}return re(Re);case ue:e:{for(et=Ee.key;_e!==null;){if(_e.key===et)if(_e.tag===4&&_e.stateNode.containerInfo===Ee.containerInfo&&_e.stateNode.implementation===Ee.implementation){m(Re,_e.sibling),_e=N(_e,Ee.children||[]),_e.return=Re,Re=_e;break e}else{m(Re,_e);break}else c(Re,_e);_e=_e.sibling}_e=KR(Ee,Re.mode,Ke),_e.return=Re,Re=_e}return re(Re)}if(typeof Ee=="string"||typeof Ee=="number")return Ee=""+Ee,_e!==null&&_e.tag===6?(m(Re,_e.sibling),_e=N(_e,Ee),_e.return=Re,Re=_e):(m(Re,_e),_e=XR(Ee,Re.mode,Ke),_e.return=Re,Re=_e),re(Re);if(yj(Ee))return cr(Re,_e,Ee,Ke);if(kr(Ee))return ir(Re,_e,Ee,Ke);if(gr&&bj(Re,Ee),typeof Ee>"u"&&!et)switch(Re.tag){case 1:case 22:case 0:case 11:case 15:throw Error(_(152,Qa(Re.type)||"Component"))}return m(Re,_e)}}var wj=Uee(!0),$ee=Uee(!1),K2={},qu=Mf(K2),Y2=Mf(K2),Q2=Mf(K2);function c1(l){if(l===K2)throw Error(_(174));return l}function mR(l,c){switch(Eo(Q2,c),Eo(Y2,l),Eo(qu,K2),l=c.nodeType,l){case 9:case 11:c=(c=c.documentElement)?c.namespaceURI:bT(null,"");break;default:l=l===8?c.parentNode:c,c=l.namespaceURI||null,l=l.tagName,c=bT(c,l)}io(qu),Eo(qu,c)}function rg(){io(qu),io(Y2),io(Q2)}function Jee(l){c1(Q2.current);var c=c1(qu.current),m=bT(c,l.type);c!==m&&(Eo(Y2,l),Eo(qu,m))}function hR(l){Y2.current===l&&(io(qu),io(Y2))}var Co=Mf(0);function Oj(l){for(var c=l;c!==null;){if(c.tag===13){var m=c.memoizedState;if(m!==null&&(m=m.dehydrated,m===null||m.data==="$?"||m.data==="$!"))return c}else if(c.tag===19&&c.memoizedProps.revealOrder!==void 0){if(c.flags&64)return c}else if(c.child!==null){c.child.return=c,c=c.child;continue}if(c===l)break;for(;c.sibling===null;){if(c.return===null||c.return===l)return null;c=c.return}c.sibling.return=c.return,c=c.sibling}return null}var op=null,Df=null,Uu=!1;function Gee(l,c){var m=Zl(5,null,null,0);m.elementType="DELETED",m.type="DELETED",m.stateNode=c,m.return=l,m.flags=8,l.lastEffect!==null?(l.lastEffect.nextEffect=m,l.lastEffect=m):l.firstEffect=l.lastEffect=m}function Xee(l,c){switch(l.tag){case 5:var m=l.type;return c=c.nodeType!==1||m.toLowerCase()!==c.nodeName.toLowerCase()?null:c,c!==null?(l.stateNode=c,!0):!1;case 6:return c=l.pendingProps===""||c.nodeType!==3?null:c,c!==null?(l.stateNode=c,!0):!1;case 13:return!1;default:return!1}}function gR(l){if(Uu){var c=Df;if(c){var m=c;if(!Xee(l,c)){if(c=Gh(m.nextSibling),!c||!Xee(l,c)){l.flags=l.flags&-1025|2,Uu=!1,op=l;return}Gee(op,m)}op=l,Df=Gh(c.firstChild)}else l.flags=l.flags&-1025|2,Uu=!1,op=l}}function Kee(l){for(l=l.return;l!==null&&l.tag!==5&&l.tag!==3&&l.tag!==13;)l=l.return;op=l}function xj(l){if(l!==op)return!1;if(!Uu)return Kee(l),Uu=!0,!1;var c=l.type;if(l.tag!==5||c!=="head"&&c!=="body"&&!eR(c,l.memoizedProps))for(c=Df;c;)Gee(l,c),c=Gh(c.nextSibling);if(Kee(l),l.tag===13){if(l=l.memoizedState,l=l!==null?l.dehydrated:null,!l)throw Error(_(317));e:{for(l=l.nextSibling,c=0;l;){if(l.nodeType===8){var m=l.data;if(m==="/$"){if(c===0){Df=Gh(l.nextSibling);break e}c--}else m!=="$"&&m!=="$!"&&m!=="$?"||c++}l=l.nextSibling}Df=null}}else Df=op?Gh(l.stateNode.nextSibling):null;return!0}function vR(){Df=op=null,Uu=!1}var ng=[];function yR(){for(var l=0;lJ))throw Error(_(301));J+=1,zi=ia=null,c.updateQueue=null,Z2.current=K7e,l=m(k,N)}while(tb)}if(Z2.current=kj,c=ia!==null&&ia.next!==null,eb=0,zi=ia=Bo=null,_j=!1,c)throw Error(_(300));return l}function p1(){var l={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return zi===null?Bo.memoizedState=zi=l:zi=zi.next=l,zi}function f1(){if(ia===null){var l=Bo.alternate;l=l!==null?l.memoizedState:null}else l=ia.next;var c=zi===null?Bo.memoizedState:zi.next;if(c!==null)zi=c,ia=l;else{if(l===null)throw Error(_(310));ia=l,l={memoizedState:ia.memoizedState,baseState:ia.baseState,baseQueue:ia.baseQueue,queue:ia.queue,next:null},zi===null?Bo.memoizedState=zi=l:zi=zi.next=l}return zi}function $u(l,c){return typeof c=="function"?c(l):c}function rb(l){var c=f1(),m=c.queue;if(m===null)throw Error(_(311));m.lastRenderedReducer=l;var k=ia,N=k.baseQueue,J=m.pending;if(J!==null){if(N!==null){var re=N.next;N.next=J.next,J.next=re}k.baseQueue=N=J,m.pending=null}if(N!==null){N=N.next,k=k.baseState;var pe=re=J=null,ye=N;do{var Ve=ye.lane;if((eb&Ve)===Ve)pe!==null&&(pe=pe.next={lane:0,action:ye.action,eagerReducer:ye.eagerReducer,eagerState:ye.eagerState,next:null}),k=ye.eagerReducer===l?ye.eagerState:l(k,ye.action);else{var Et={lane:Ve,action:ye.action,eagerReducer:ye.eagerReducer,eagerState:ye.eagerState,next:null};pe===null?(re=pe=Et,J=k):pe=pe.next=Et,Bo.lanes|=Ve,ab|=Ve}ye=ye.next}while(ye!==null&&ye!==N);pe===null?J=k:pe.next=re,Xl(k,c.memoizedState)||(Vs=!0),c.memoizedState=k,c.baseState=J,c.baseQueue=pe,m.lastRenderedState=k}return[c.memoizedState,m.dispatch]}function nb(l){var c=f1(),m=c.queue;if(m===null)throw Error(_(311));m.lastRenderedReducer=l;var k=m.dispatch,N=m.pending,J=c.memoizedState;if(N!==null){m.pending=null;var re=N=N.next;do J=l(J,re.action),re=re.next;while(re!==N);Xl(J,c.memoizedState)||(Vs=!0),c.memoizedState=J,c.baseQueue===null&&(c.baseState=J),m.lastRenderedState=J}return[J,k]}function Yee(l,c,m){var k=c._getVersion;k=k(c._source);var N=c._workInProgressVersionPrimary;if(N!==null?l=N===k:(l=l.mutableReadLanes,(l=(eb&l)===l)&&(c._workInProgressVersionPrimary=k,ng.push(c))),l)return m(c._source);throw ng.push(c),Error(_(350))}function Qee(l,c,m,k){var N=ka;if(N===null)throw Error(_(349));var J=c._getVersion,re=J(c._source),pe=Z2.current,ye=pe.useState(function(){return Yee(N,c,m)}),Ve=ye[1],Et=ye[0];ye=zi;var dr=l.memoizedState,lt=dr.refs,qt=lt.getSnapshot,cr=dr.source;dr=dr.subscribe;var ir=Bo;return l.memoizedState={refs:lt,source:c,subscribe:k},pe.useEffect(function(){lt.getSnapshot=m,lt.setSnapshot=Ve;var Re=J(c._source);if(!Xl(re,Re)){Re=m(c._source),Xl(Et,Re)||(Ve(Re),Re=Ff(ir),N.mutableReadLanes|=Re&N.pendingLanes),Re=N.mutableReadLanes,N.entangledLanes|=Re;for(var _e=N.entanglements,Ee=Re;0m?98:m,function(){l(!0)}),u1(97<\/script>",l=l.removeChild(l.firstChild)):typeof k.is=="string"?l=re.createElement(m,{is:k.is}):(l=re.createElement(m),m==="select"&&(re=l,k.multiple?re.multiple=!0:k.size&&(re.size=k.size))):l=re.createElementNS(l,m),l[Af]=c,l[lj]=k,bte(l,c,!1,!1),c.stateNode=l,re=OT(m,k),m){case"dialog":oo("cancel",l),oo("close",l),N=k;break;case"iframe":case"object":case"embed":oo("load",l),N=k;break;case"video":case"audio":for(N=0;NWR&&(c.flags|=64,J=!0,ib(k,!1),c.lanes=33554432)}else{if(!J)if(l=Oj(re),l!==null){if(c.flags|=64,J=!0,m=l.updateQueue,m!==null&&(c.updateQueue=m,c.flags|=4),ib(k,!0),k.tail===null&&k.tailMode==="hidden"&&!re.alternate&&!Uu)return c=c.lastEffect=k.lastEffect,c!==null&&(c.nextEffect=null),null}else 2*oa()-k.renderingStartTime>WR&&m!==1073741824&&(c.flags|=64,J=!0,ib(k,!1),c.lanes=33554432);k.isBackwards?(re.sibling=c.child,c.child=re):(m=k.last,m!==null?m.sibling=re:c.child=re,k.last=re)}return k.tail!==null?(m=k.tail,k.rendering=m,k.tail=m.sibling,k.lastEffect=c.lastEffect,k.renderingStartTime=oa(),m.sibling=null,c=Co.current,Eo(Co,J?c&1|2:c&1),m):null;case 23:case 24:return $R(),l!==null&&l.memoizedState!==null!=(c.memoizedState!==null)&&k.mode!=="unstable-defer-without-hiding"&&(c.flags|=4),null}throw Error(_(156,c.tag))}function Z7e(l){switch(l.tag){case 1:el(l.type)&&uj();var c=l.flags;return c&4096?(l.flags=c&-4097|64,l):null;case 3:if(rg(),io(Za),io(na),yR(),c=l.flags,c&64)throw Error(_(285));return l.flags=c&-4097|64,l;case 5:return hR(l),null;case 13:return io(Co),c=l.flags,c&4096?(l.flags=c&-4097|64,l):null;case 19:return io(Co),null;case 4:return rg(),null;case 10:return pR(l),null;case 23:case 24:return $R(),null;default:return null}}function CR(l,c){try{var m="",k=c;do m+=t1(k),k=k.return;while(k);var N=m}catch(J){N=` +`+N[re].replace(" at new "," at ");while(1<=re&&0<=pe);break}}}finally{Yn=!1,Error.prepareStackTrace=m}return(l=l?l.displayName||l.name:"")?bo(l):""}function r1(l){switch(l.tag){case 5:return bo(l.type);case 16:return bo("Lazy");case 13:return bo("Suspense");case 19:return bo("SuspenseList");case 0:case 2:case 15:return l=ta(l.type,!1),l;case 11:return l=ta(l.type.render,!1),l;case 22:return l=ta(l.type._render,!1),l;case 1:return l=ta(l.type,!0),l;default:return""}}function Qa(l){if(l==null)return null;if(typeof l=="function")return l.displayName||l.name||null;if(typeof l=="string")return l;switch(l){case Se:return"Fragment";case ue:return"Portal";case We:return"Profiler";case ze:return"StrictMode";case qt:return"Suspense";case Jt:return"SuspenseList"}if(typeof l=="object")switch(l.$$typeof){case tt:return(l.displayName||"Context")+".Consumer";case Je:return(l._context.displayName||"Context")+".Provider";case vt:var c=l.render;return c=c.displayName||c.name||"",l.displayName||(c!==""?"ForwardRef("+c+")":"ForwardRef");case nr:return Qa(l.type);case st:return Qa(l._render);case Me:c=l._payload,l=l._init;try{return Qa(l(c))}catch{}}return null}function jl(l){switch(typeof l){case"boolean":case"number":case"object":case"string":case"undefined":return l;default:return""}}function n1(l){var c=l.type;return(l=l.nodeName)&&l.toLowerCase()==="input"&&(c==="checkbox"||c==="radio")}function Il(l){var c=n1(l)?"checked":"value",m=Object.getOwnPropertyDescriptor(l.constructor.prototype,c),P=""+l[c];if(!l.hasOwnProperty(c)&&typeof m<"u"&&typeof m.get=="function"&&typeof m.set=="function"){var N=m.get,J=m.set;return Object.defineProperty(l,c,{configurable:!0,get:function(){return N.call(this)},set:function(re){P=""+re,J.call(this,re)}}),Object.defineProperty(l,c,{enumerable:m.enumerable}),{getValue:function(){return P},setValue:function(re){P=""+re},stopTracking:function(){l._valueTracker=null,delete l[c]}}}}function Ti(l){l._valueTracker||(l._valueTracker=Il(l))}function Vu(l){if(!l)return!1;var c=l._valueTracker;if(!c)return!0;var m=c.getValue(),P="";return l&&(P=n1(l)?l.checked?"true":"false":l.value),l=P,l!==m?(c.setValue(l),!0):!1}function qs(l){if(l=l||(typeof document<"u"?document:void 0),typeof l>"u")return null;try{return l.activeElement||l.body}catch{return l.body}}function np(l,c){var m=c.checked;return d({},c,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:m??l._wrapperState.initialChecked})}function If(l,c){var m=c.defaultValue==null?"":c.defaultValue,P=c.checked!=null?c.checked:c.defaultChecked;m=jl(c.value!=null?c.value:m),l._wrapperState={initialChecked:P,initialValue:m,controlled:c.type==="checkbox"||c.type==="radio"?c.checked!=null:c.value!=null}}function VS(l,c){c=c.checked,c!=null&&ke(l,"checked",c,!1)}function I2(l,c){VS(l,c);var m=jl(c.value),P=c.type;if(m!=null)P==="number"?(m===0&&l.value===""||l.value!=m)&&(l.value=""+m):l.value!==""+m&&(l.value=""+m);else if(P==="submit"||P==="reset"){l.removeAttribute("value");return}c.hasOwnProperty("value")?op(l,c.type,m):c.hasOwnProperty("defaultValue")&&op(l,c.type,jl(c.defaultValue)),c.checked==null&&c.defaultChecked!=null&&(l.defaultChecked=!!c.defaultChecked)}function o1(l,c,m){if(c.hasOwnProperty("value")||c.hasOwnProperty("defaultValue")){var P=c.type;if(!(P!=="submit"&&P!=="reset"||c.value!==void 0&&c.value!==null))return;c=""+l._wrapperState.initialValue,m||c===l.value||(l.value=c),l.defaultValue=c}m=l.name,m!==""&&(l.name=""),l.defaultChecked=!!l._wrapperState.initialChecked,m!==""&&(l.name=m)}function op(l,c,m){(c!=="number"||qs(l.ownerDocument)!==l)&&(m==null?l.defaultValue=""+l._wrapperState.initialValue:l.defaultValue!==""+m&&(l.defaultValue=""+m))}function xT(l){var c="";return p.Children.forEach(l,function(m){m!=null&&(c+=m)}),c}function Dh(l,c){return l=d({children:void 0},c),(c=xT(c.children))&&(l.children=c),l}function Pf(l,c,m,P){if(l=l.options,c){c={};for(var N=0;N=m.length))throw Error(_(93));m=m[0]}c=m}c==null&&(c=""),m=c}l._wrapperState={initialValue:jl(m)}}function qS(l,c){var m=jl(c.value),P=jl(c.defaultValue);m!=null&&(m=""+m,m!==l.value&&(l.value=m),c.defaultValue==null&&l.defaultValue!==m&&(l.defaultValue=m)),P!=null&&(l.defaultValue=""+P)}function k2(l){var c=l.textContent;c===l._wrapperState.initialValue&&c!==""&&c!==null&&(l.value=c)}var _T={html:"http://www.w3.org/1999/xhtml",mathml:"http://www.w3.org/1998/Math/MathML",svg:"http://www.w3.org/2000/svg"};function SZ(l){switch(l){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function ST(l,c){return l==null||l==="http://www.w3.org/1999/xhtml"?SZ(c):l==="http://www.w3.org/2000/svg"&&c==="foreignObject"?"http://www.w3.org/1999/xhtml":l}var US,jZ=function(l){return typeof MSApp<"u"&&MSApp.execUnsafeLocalFunction?function(c,m,P,N){MSApp.execUnsafeLocalFunction(function(){return l(c,m,P,N)})}:l}(function(l,c){if(l.namespaceURI!==_T.svg||"innerHTML"in l)l.innerHTML=c;else{for(US=US||document.createElement("div"),US.innerHTML=""+c.valueOf().toString()+"",c=US.firstChild;l.firstChild;)l.removeChild(l.firstChild);for(;c.firstChild;)l.appendChild(c.firstChild)}});function E2(l,c){if(c){var m=l.firstChild;if(m&&m===l.lastChild&&m.nodeType===3){m.nodeValue=c;return}}l.textContent=c}var C2={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},FOe=["Webkit","ms","Moz","O"];Object.keys(C2).forEach(function(l){FOe.forEach(function(c){c=c+l.charAt(0).toUpperCase()+l.substring(1),C2[c]=C2[l]})});function IZ(l,c,m){return c==null||typeof c=="boolean"||c===""?"":m||typeof c!="number"||c===0||C2.hasOwnProperty(l)&&C2[l]?(""+c).trim():c+"px"}function PZ(l,c){l=l.style;for(var m in c)if(c.hasOwnProperty(m)){var P=m.indexOf("--")===0,N=IZ(m,c[m],P);m==="float"&&(m="cssFloat"),P?l.setProperty(m,N):l[m]=N}}var WOe=d({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function jT(l,c){if(c){if(WOe[l]&&(c.children!=null||c.dangerouslySetInnerHTML!=null))throw Error(_(137,l));if(c.dangerouslySetInnerHTML!=null){if(c.children!=null)throw Error(_(60));if(!(typeof c.dangerouslySetInnerHTML=="object"&&"__html"in c.dangerouslySetInnerHTML))throw Error(_(61))}if(c.style!=null&&typeof c.style!="object")throw Error(_(62))}}function IT(l,c){if(l.indexOf("-")===-1)return typeof c.is=="string";switch(l){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}function PT(l){return l=l.target||l.srcElement||window,l.correspondingUseElement&&(l=l.correspondingUseElement),l.nodeType===3?l.parentNode:l}var kT=null,Nh=null,Fh=null;function kZ(l){if(l=G2(l)){if(typeof kT!="function")throw Error(_(280));var c=l.stateNode;c&&(c=pj(c),kT(l.stateNode,l.type,c))}}function EZ(l){Nh?Fh?Fh.push(l):Fh=[l]:Nh=l}function CZ(){if(Nh){var l=Nh,c=Fh;if(Fh=Nh=null,kZ(l),c)for(l=0;lP?0:1<m;m++)c.push(l);return c}function QS(l,c,m){l.pendingLanes|=c;var P=c-1;l.suspendedLanes&=P,l.pingedLanes&=P,l=l.eventTimes,c=31-Af(c),l[c]=m}var Af=Math.clz32?Math.clz32:r7e,e7e=Math.log,t7e=Math.LN2;function r7e(l){return l===0?32:31-(e7e(l)/t7e|0)|0}var n7e=w.unstable_UserBlockingPriority,o7e=w.unstable_runWithPriority,ZS=!0;function i7e(l,c,m,P){i1||CT();var N=HT,J=i1;i1=!0;try{AZ(N,l,c,m,P)}finally{(i1=J)||MT()}}function a7e(l,c,m,P){o7e(n7e,HT.bind(null,l,c,m,P))}function HT(l,c,m,P){if(ZS){var N;if((N=(c&4)===0)&&0=B2),nee=String.fromCharCode(32),oee=!1;function iee(l,c){switch(l){case"keyup":return E7e.indexOf(c.keyCode)!==-1;case"keydown":return c.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function aee(l){return l=l.detail,typeof l=="object"&&"data"in l?l.data:null}var Uh=!1;function A7e(l,c){switch(l){case"compositionend":return aee(c);case"keypress":return c.which!==32?null:(oee=!0,nee);case"textInput":return l=c.data,l===nee&&oee?null:l;default:return null}}function M7e(l,c){if(Uh)return l==="compositionend"||!KT&&iee(l,c)?(l=YZ(),ej=qT=Mf=null,Uh=!1,l):null;switch(l){case"paste":return null;case"keypress":if(!(c.ctrlKey||c.altKey||c.metaKey)||c.ctrlKey&&c.altKey){if(c.char&&1=c)return{node:m,offset:c-l};l=P}e:{for(;m;){if(m.nextSibling){m=m.nextSibling;break e}m=m.parentNode}m=void 0}m=fee(m)}}function mee(l,c){return l&&c?l===c?!0:l&&l.nodeType===3?!1:c&&c.nodeType===3?mee(l,c.parentNode):"contains"in l?l.contains(c):l.compareDocumentPosition?!!(l.compareDocumentPosition(c)&16):!1:!1}function hee(){for(var l=window,c=qs();c instanceof l.HTMLIFrameElement;){try{var m=typeof c.contentWindow.location.href=="string"}catch{m=!1}if(m)l=c.contentWindow;else break;c=qs(l.document)}return c}function ZT(l){var c=l&&l.nodeName&&l.nodeName.toLowerCase();return c&&(c==="input"&&(l.type==="text"||l.type==="search"||l.type==="tel"||l.type==="url"||l.type==="password")||c==="textarea"||l.contentEditable==="true")}var H7e=H&&"documentMode"in document&&11>=document.documentMode,$h=null,eR=null,U2=null,tR=!1;function gee(l,c,m){var P=m.window===m?m.document:m.nodeType===9?m:m.ownerDocument;tR||$h==null||$h!==qs(P)||(P=$h,"selectionStart"in P&&ZT(P)?P={start:P.selectionStart,end:P.selectionEnd}:(P=(P.ownerDocument&&P.ownerDocument.defaultView||window).getSelection(),P={anchorNode:P.anchorNode,anchorOffset:P.anchorOffset,focusNode:P.focusNode,focusOffset:P.focusOffset}),U2&&q2(U2,P)||(U2=P,P=lj(eR,"onSelect"),0Yh||(l.current=sR[Yh],sR[Yh]=null,Yh--)}function Eo(l,c){Yh++,sR[Yh]=l.current,l.current=c}var zf={},ra=Rf(zf),Za=Rf(!1),s1=zf;function Qh(l,c){var m=l.type.contextTypes;if(!m)return zf;var P=l.stateNode;if(P&&P.__reactInternalMemoizedUnmaskedChildContext===c)return P.__reactInternalMemoizedMaskedChildContext;var N={},J;for(J in m)N[J]=c[J];return P&&(l=l.stateNode,l.__reactInternalMemoizedUnmaskedChildContext=c,l.__reactInternalMemoizedMaskedChildContext=N),N}function el(l){return l=l.childContextTypes,l!=null}function fj(){ao(Za),ao(ra)}function Aee(l,c,m){if(ra.current!==zf)throw Error(_(168));Eo(ra,c),Eo(Za,m)}function Mee(l,c,m){var P=l.stateNode;if(l=c.childContextTypes,typeof P.getChildContext!="function")return m;P=P.getChildContext();for(var N in P)if(!(N in l))throw Error(_(108,Qa(c)||"Unknown",N));return d({},m,P)}function dj(l){return l=(l=l.stateNode)&&l.__reactInternalMemoizedMergedChildContext||zf,s1=ra.current,Eo(ra,l),Eo(Za,Za.current),!0}function Tee(l,c,m){var P=l.stateNode;if(!P)throw Error(_(169));m?(l=Mee(l,c,s1),P.__reactInternalMemoizedMergedChildContext=l,ao(Za),ao(ra),Eo(ra,l)):ao(Za),Eo(Za,m)}var uR=null,u1=null,U7e=w.unstable_runWithPriority,cR=w.unstable_scheduleCallback,pR=w.unstable_cancelCallback,$7e=w.unstable_shouldYield,Ree=w.unstable_requestPaint,fR=w.unstable_now,J7e=w.unstable_getCurrentPriorityLevel,mj=w.unstable_ImmediatePriority,zee=w.unstable_UserBlockingPriority,Lee=w.unstable_NormalPriority,Dee=w.unstable_LowPriority,Nee=w.unstable_IdlePriority,dR={},G7e=Ree!==void 0?Ree:function(){},ip=null,hj=null,mR=!1,Fee=fR(),na=1e4>Fee?fR:function(){return fR()-Fee};function Zh(){switch(J7e()){case mj:return 99;case zee:return 98;case Lee:return 97;case Dee:return 96;case Nee:return 95;default:throw Error(_(332))}}function Wee(l){switch(l){case 99:return mj;case 98:return zee;case 97:return Lee;case 96:return Dee;case 95:return Nee;default:throw Error(_(332))}}function c1(l,c){return l=Wee(l),U7e(l,c)}function X2(l,c,m){return l=Wee(l),cR(l,c,m)}function Uu(){if(hj!==null){var l=hj;hj=null,pR(l)}Bee()}function Bee(){if(!mR&&ip!==null){mR=!0;var l=0;try{var c=ip;c1(99,function(){for(;lvr?(Ur=Ft,Ft=null):Ur=Ft.sibling;var Rr=lt(Re,Ft,Ee[vr],Ye);if(Rr===null){Ft===null&&(Ft=Ur);break}l&&Ft&&Rr.alternate===null&&c(Re,Ft),xe=J(Rr,xe,vr),gr===null?et=Rr:gr.sibling=Rr,gr=Rr,Ft=Ur}if(vr===Ee.length)return m(Re,Ft),et;if(Ft===null){for(;vrvr?(Ur=Ft,Ft=null):Ur=Ft.sibling;var $f=lt(Re,Ft,Rr.value,Ye);if($f===null){Ft===null&&(Ft=Ur);break}l&&Ft&&$f.alternate===null&&c(Re,Ft),xe=J($f,xe,vr),gr===null?et=$f:gr.sibling=$f,gr=$f,Ft=Ur}if(Rr.done)return m(Re,Ft),et;if(Ft===null){for(;!Rr.done;vr++,Rr=Ee.next())Rr=fr(Re,Rr.value,Ye),Rr!==null&&(xe=J(Rr,xe,vr),gr===null?et=Rr:gr.sibling=Rr,gr=Rr);return et}for(Ft=P(Re,Ft);!Rr.done;vr++,Rr=Ee.next())Rr=Vt(Ft,Re,vr,Rr.value,Ye),Rr!==null&&(l&&Rr.alternate!==null&&Ft.delete(Rr.key===null?vr:Rr.key),xe=J(Rr,xe,vr),gr===null?et=Rr:gr.sibling=Rr,gr=Rr);return l&&Ft.forEach(function(I8e){return c(Re,I8e)}),et}return function(Re,xe,Ee,Ye){var et=typeof Ee=="object"&&Ee!==null&&Ee.type===Se&&Ee.key===null;et&&(Ee=Ee.props.children);var gr=typeof Ee=="object"&&Ee!==null;if(gr)switch(Ee.$$typeof){case Ae:e:{for(gr=Ee.key,et=xe;et!==null;){if(et.key===gr){switch(et.tag){case 7:if(Ee.type===Se){m(Re,et.sibling),xe=N(et,Ee.props.children),xe.return=Re,Re=xe;break e}break;default:if(et.elementType===Ee.type){m(Re,et.sibling),xe=N(et,Ee.props),xe.ref=Y2(Re,et,Ee),xe.return=Re,Re=xe;break e}}m(Re,et);break}else c(Re,et);et=et.sibling}Ee.type===Se?(xe=ug(Ee.props.children,Re.mode,Ye,Ee.key),xe.return=Re,Re=xe):(Ye=Wj(Ee.type,Ee.key,Ee.props,null,Re.mode,Ye),Ye.ref=Y2(Re,xe,Ee),Ye.return=Re,Re=Ye)}return re(Re);case ue:e:{for(et=Ee.key;xe!==null;){if(xe.key===et)if(xe.tag===4&&xe.stateNode.containerInfo===Ee.containerInfo&&xe.stateNode.implementation===Ee.implementation){m(Re,xe.sibling),xe=N(xe,Ee.children||[]),xe.return=Re,Re=xe;break e}else{m(Re,xe);break}else c(Re,xe);xe=xe.sibling}xe=tz(Ee,Re.mode,Ye),xe.return=Re,Re=xe}return re(Re)}if(typeof Ee=="string"||typeof Ee=="number")return Ee=""+Ee,xe!==null&&xe.tag===6?(m(Re,xe.sibling),xe=N(xe,Ee),xe.return=Re,Re=xe):(m(Re,xe),xe=ez(Ee,Re.mode,Ye),xe.return=Re,Re=xe),re(Re);if(Oj(Ee))return cr(Re,xe,Ee,Ye);if(kr(Ee))return or(Re,xe,Ee,Ye);if(gr&&xj(Re,Ee),typeof Ee>"u"&&!et)switch(Re.tag){case 1:case 22:case 0:case 11:case 15:throw Error(_(152,Qa(Re.type)||"Component"))}return m(Re,xe)}}var _j=Kee(!0),Yee=Kee(!1),Q2={},$u=Rf(Q2),Z2=Rf(Q2),eb=Rf(Q2);function p1(l){if(l===Q2)throw Error(_(174));return l}function bR(l,c){switch(Eo(eb,c),Eo(Z2,l),Eo($u,Q2),l=c.nodeType,l){case 9:case 11:c=(c=c.documentElement)?c.namespaceURI:ST(null,"");break;default:l=l===8?c.parentNode:c,c=l.namespaceURI||null,l=l.tagName,c=ST(c,l)}ao($u),Eo($u,c)}function rg(){ao($u),ao(Z2),ao(eb)}function Qee(l){p1(eb.current);var c=p1($u.current),m=ST(c,l.type);c!==m&&(Eo(Z2,l),Eo($u,m))}function wR(l){Z2.current===l&&(ao($u),ao(Z2))}var Co=Rf(0);function Sj(l){for(var c=l;c!==null;){if(c.tag===13){var m=c.memoizedState;if(m!==null&&(m=m.dehydrated,m===null||m.data==="$?"||m.data==="$!"))return c}else if(c.tag===19&&c.memoizedProps.revealOrder!==void 0){if(c.flags&64)return c}else if(c.child!==null){c.child.return=c,c=c.child;continue}if(c===l)break;for(;c.sibling===null;){if(c.return===null||c.return===l)return null;c=c.return}c.sibling.return=c.return,c=c.sibling}return null}var ap=null,Ff=null,Ju=!1;function Zee(l,c){var m=es(5,null,null,0);m.elementType="DELETED",m.type="DELETED",m.stateNode=c,m.return=l,m.flags=8,l.lastEffect!==null?(l.lastEffect.nextEffect=m,l.lastEffect=m):l.firstEffect=l.lastEffect=m}function ete(l,c){switch(l.tag){case 5:var m=l.type;return c=c.nodeType!==1||m.toLowerCase()!==c.nodeName.toLowerCase()?null:c,c!==null?(l.stateNode=c,!0):!1;case 6:return c=l.pendingProps===""||c.nodeType!==3?null:c,c!==null?(l.stateNode=c,!0):!1;case 13:return!1;default:return!1}}function OR(l){if(Ju){var c=Ff;if(c){var m=c;if(!ete(l,c)){if(c=Gh(m.nextSibling),!c||!ete(l,c)){l.flags=l.flags&-1025|2,Ju=!1,ap=l;return}Zee(ap,m)}ap=l,Ff=Gh(c.firstChild)}else l.flags=l.flags&-1025|2,Ju=!1,ap=l}}function tte(l){for(l=l.return;l!==null&&l.tag!==5&&l.tag!==3&&l.tag!==13;)l=l.return;ap=l}function jj(l){if(l!==ap)return!1;if(!Ju)return tte(l),Ju=!0,!1;var c=l.type;if(l.tag!==5||c!=="head"&&c!=="body"&&!iR(c,l.memoizedProps))for(c=Ff;c;)Zee(l,c),c=Gh(c.nextSibling);if(tte(l),l.tag===13){if(l=l.memoizedState,l=l!==null?l.dehydrated:null,!l)throw Error(_(317));e:{for(l=l.nextSibling,c=0;l;){if(l.nodeType===8){var m=l.data;if(m==="/$"){if(c===0){Ff=Gh(l.nextSibling);break e}c--}else m!=="$"&&m!=="$!"&&m!=="$?"||c++}l=l.nextSibling}Ff=null}}else Ff=ap?Gh(l.stateNode.nextSibling):null;return!0}function xR(){Ff=ap=null,Ju=!1}var ng=[];function _R(){for(var l=0;lJ))throw Error(_(301));J+=1,Ri=oa=null,c.updateQueue=null,tb.current=Z7e,l=m(P,N)}while(nb)}if(tb.current=Cj,c=oa!==null&&oa.next!==null,rb=0,Ri=oa=Bo=null,Ij=!1,c)throw Error(_(300));return l}function f1(){var l={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return Ri===null?Bo.memoizedState=Ri=l:Ri=Ri.next=l,Ri}function d1(){if(oa===null){var l=Bo.alternate;l=l!==null?l.memoizedState:null}else l=oa.next;var c=Ri===null?Bo.memoizedState:Ri.next;if(c!==null)Ri=c,oa=l;else{if(l===null)throw Error(_(310));oa=l,l={memoizedState:oa.memoizedState,baseState:oa.baseState,baseQueue:oa.baseQueue,queue:oa.queue,next:null},Ri===null?Bo.memoizedState=Ri=l:Ri=Ri.next=l}return Ri}function Gu(l,c){return typeof c=="function"?c(l):c}function ob(l){var c=d1(),m=c.queue;if(m===null)throw Error(_(311));m.lastRenderedReducer=l;var P=oa,N=P.baseQueue,J=m.pending;if(J!==null){if(N!==null){var re=N.next;N.next=J.next,J.next=re}P.baseQueue=N=J,m.pending=null}if(N!==null){N=N.next,P=P.baseState;var pe=re=J=null,ye=N;do{var Ve=ye.lane;if((rb&Ve)===Ve)pe!==null&&(pe=pe.next={lane:0,action:ye.action,eagerReducer:ye.eagerReducer,eagerState:ye.eagerState,next:null}),P=ye.eagerReducer===l?ye.eagerState:l(P,ye.action);else{var Et={lane:Ve,action:ye.action,eagerReducer:ye.eagerReducer,eagerState:ye.eagerState,next:null};pe===null?(re=pe=Et,J=P):pe=pe.next=Et,Bo.lanes|=Ve,sb|=Ve}ye=ye.next}while(ye!==null&&ye!==N);pe===null?J=P:pe.next=re,Kl(P,c.memoizedState)||($s=!0),c.memoizedState=P,c.baseState=J,c.baseQueue=pe,m.lastRenderedState=P}return[c.memoizedState,m.dispatch]}function ib(l){var c=d1(),m=c.queue;if(m===null)throw Error(_(311));m.lastRenderedReducer=l;var P=m.dispatch,N=m.pending,J=c.memoizedState;if(N!==null){m.pending=null;var re=N=N.next;do J=l(J,re.action),re=re.next;while(re!==N);Kl(J,c.memoizedState)||($s=!0),c.memoizedState=J,c.baseQueue===null&&(c.baseState=J),m.lastRenderedState=J}return[J,P]}function rte(l,c,m){var P=c._getVersion;P=P(c._source);var N=c._workInProgressVersionPrimary;if(N!==null?l=N===P:(l=l.mutableReadLanes,(l=(rb&l)===l)&&(c._workInProgressVersionPrimary=P,ng.push(c))),l)return m(c._source);throw ng.push(c),Error(_(350))}function nte(l,c,m,P){var N=Ia;if(N===null)throw Error(_(349));var J=c._getVersion,re=J(c._source),pe=tb.current,ye=pe.useState(function(){return rte(N,c,m)}),Ve=ye[1],Et=ye[0];ye=Ri;var fr=l.memoizedState,lt=fr.refs,Vt=lt.getSnapshot,cr=fr.source;fr=fr.subscribe;var or=Bo;return l.memoizedState={refs:lt,source:c,subscribe:P},pe.useEffect(function(){lt.getSnapshot=m,lt.setSnapshot=Ve;var Re=J(c._source);if(!Kl(re,Re)){Re=m(c._source),Kl(Et,Re)||(Ve(Re),Re=Bf(or),N.mutableReadLanes|=Re&N.pendingLanes),Re=N.mutableReadLanes,N.entangledLanes|=Re;for(var xe=N.entanglements,Ee=Re;0m?98:m,function(){l(!0)}),c1(97<\/script>",l=l.removeChild(l.firstChild)):typeof P.is=="string"?l=re.createElement(m,{is:P.is}):(l=re.createElement(m),m==="select"&&(re=l,P.multiple?re.multiple=!0:P.size&&(re.size=P.size))):l=re.createElementNS(l,m),l[Tf]=c,l[cj]=P,Ste(l,c,!1,!1),c.stateNode=l,re=IT(m,P),m){case"dialog":io("cancel",l),io("close",l),N=P;break;case"iframe":case"object":case"embed":io("load",l),N=P;break;case"video":case"audio":for(N=0;N<$2.length;N++)io($2[N],l);N=P;break;case"source":io("error",l),N=P;break;case"img":case"image":case"link":io("error",l),io("load",l),N=P;break;case"details":io("toggle",l),N=P;break;case"input":If(l,P),N=np(l,P),io("invalid",l);break;case"option":N=Dh(l,P);break;case"select":l._wrapperState={wasMultiple:!!P.multiple},N=d({},P,{value:void 0}),io("invalid",l);break;case"textarea":P2(l,P),N=hr(l,P),io("invalid",l);break;default:N=P}jT(m,N);var pe=N;for(J in pe)if(pe.hasOwnProperty(J)){var ye=pe[J];J==="style"?PZ(l,ye):J==="dangerouslySetInnerHTML"?(ye=ye?ye.__html:void 0,ye!=null&&jZ(l,ye)):J==="children"?typeof ye=="string"?(m!=="textarea"||ye!=="")&&E2(l,ye):typeof ye=="number"&&E2(l,""+ye):J!=="suppressContentEditableWarning"&&J!=="suppressHydrationWarning"&&J!=="autoFocus"&&(T.hasOwnProperty(J)?ye!=null&&J==="onScroll"&&io("scroll",l):ye!=null&&ke(l,J,ye,re))}switch(m){case"input":Ti(l),o1(l,P,!1);break;case"textarea":Ti(l),k2(l);break;case"option":P.value!=null&&l.setAttribute("value",""+jl(P.value));break;case"select":l.multiple=!!P.multiple,J=P.value,J!=null?Pf(l,!!P.multiple,J,!1):P.defaultValue!=null&&Pf(l,!!P.multiple,P.defaultValue,!0);break;default:typeof N.onClick=="function"&&(l.onclick=sj)}Iee(m,P)&&(c.flags|=4)}c.ref!==null&&(c.flags|=128)}return null;case 6:if(l&&c.stateNode!=null)Ite(l,c,l.memoizedProps,P);else{if(typeof P!="string"&&c.stateNode===null)throw Error(_(166));m=p1(eb.current),p1($u.current),jj(c)?(P=c.stateNode,m=c.memoizedProps,P[Tf]=c,P.nodeValue!==m&&(c.flags|=4)):(P=(m.nodeType===9?m:m.ownerDocument).createTextNode(P),P[Tf]=c,c.stateNode=P)}return null;case 13:return ao(Co),P=c.memoizedState,c.flags&64?(c.lanes=m,c):(P=P!==null,m=!1,l===null?c.memoizedProps.fallback!==void 0&&jj(c):m=l.memoizedState!==null,P&&!m&&c.mode&2&&(l===null&&c.memoizedProps.unstable_avoidThisFallback!==!0||Co.current&1?zi===0&&(zi=3):((zi===0||zi===3)&&(zi=4),Ia===null||!(sb&134217727)&&!(ig&134217727)||lg(Ia,ia))),(P||m)&&(c.flags|=4),null);case 4:return rg(),RR(c),l===null&&Oee(c.stateNode.containerInfo),null;case 10:return gR(c),null;case 17:return el(c.type)&&fj(),null;case 19:if(ao(Co),P=c.memoizedState,P===null)return null;if(J=(c.flags&64)!==0,re=P.rendering,re===null)if(J)lb(P,!1);else{if(zi!==0||l!==null&&l.flags&64)for(l=c.child;l!==null;){if(re=Sj(l),re!==null){for(c.flags|=64,lb(P,!1),J=re.updateQueue,J!==null&&(c.updateQueue=J,c.flags|=4),P.lastEffect===null&&(c.firstEffect=null),c.lastEffect=P.lastEffect,P=m,m=c.child;m!==null;)J=m,l=P,J.flags&=2,J.nextEffect=null,J.firstEffect=null,J.lastEffect=null,re=J.alternate,re===null?(J.childLanes=0,J.lanes=l,J.child=null,J.memoizedProps=null,J.memoizedState=null,J.updateQueue=null,J.dependencies=null,J.stateNode=null):(J.childLanes=re.childLanes,J.lanes=re.lanes,J.child=re.child,J.memoizedProps=re.memoizedProps,J.memoizedState=re.memoizedState,J.updateQueue=re.updateQueue,J.type=re.type,l=re.dependencies,J.dependencies=l===null?null:{lanes:l.lanes,firstContext:l.firstContext}),m=m.sibling;return Eo(Co,Co.current&1|2),c.child}l=l.sibling}P.tail!==null&&na()>UR&&(c.flags|=64,J=!0,lb(P,!1),c.lanes=33554432)}else{if(!J)if(l=Sj(re),l!==null){if(c.flags|=64,J=!0,m=l.updateQueue,m!==null&&(c.updateQueue=m,c.flags|=4),lb(P,!0),P.tail===null&&P.tailMode==="hidden"&&!re.alternate&&!Ju)return c=c.lastEffect=P.lastEffect,c!==null&&(c.nextEffect=null),null}else 2*na()-P.renderingStartTime>UR&&m!==1073741824&&(c.flags|=64,J=!0,lb(P,!1),c.lanes=33554432);P.isBackwards?(re.sibling=c.child,c.child=re):(m=P.last,m!==null?m.sibling=re:c.child=re,P.last=re)}return P.tail!==null?(m=P.tail,P.rendering=m,P.tail=m.sibling,P.lastEffect=c.lastEffect,P.renderingStartTime=na(),m.sibling=null,c=Co.current,Eo(Co,J?c&1|2:c&1),m):null;case 23:case 24:return YR(),l!==null&&l.memoizedState!==null!=(c.memoizedState!==null)&&P.mode!=="unstable-defer-without-hiding"&&(c.flags|=4),null}throw Error(_(156,c.tag))}function r8e(l){switch(l.tag){case 1:el(l.type)&&fj();var c=l.flags;return c&4096?(l.flags=c&-4097|64,l):null;case 3:if(rg(),ao(Za),ao(ra),_R(),c=l.flags,c&64)throw Error(_(285));return l.flags=c&-4097|64,l;case 5:return wR(l),null;case 13:return ao(Co),c=l.flags,c&4096?(l.flags=c&-4097|64,l):null;case 19:return ao(Co),null;case 4:return rg(),null;case 10:return gR(l),null;case 23:case 24:return YR(),null;default:return null}}function zR(l,c){try{var m="",P=c;do m+=r1(P),P=P.return;while(P);var N=m}catch(J){N=` Error generating stack: `+J.message+` -`+J.stack}return{value:l,source:c,stack:N}}function AR(l,c){try{console.error(c.value)}catch(m){setTimeout(function(){throw m})}}var e8e=typeof WeakMap=="function"?WeakMap:Map;function xte(l,c,m){m=zf(-1,m),m.tag=3,m.payload={element:null};var k=c.value;return m.callback=function(){Aj||(Aj=!0,BR=k),AR(l,c)},m}function _te(l,c,m){m=zf(-1,m),m.tag=3;var k=l.type.getDerivedStateFromError;if(typeof k=="function"){var N=c.value;m.payload=function(){return AR(l,c),k(N)}}var J=l.stateNode;return J!==null&&typeof J.componentDidCatch=="function"&&(m.callback=function(){typeof k!="function"&&(Ju===null?Ju=new Set([this]):Ju.add(this),AR(l,c));var re=c.stack;this.componentDidCatch(c.value,{componentStack:re!==null?re:""})}),m}var t8e=typeof WeakSet=="function"?WeakSet:Set;function Ste(l){var c=l.ref;if(c!==null)if(typeof c=="function")try{c(null)}catch(m){Hf(l,m)}else c.current=null}function r8e(l,c){switch(c.tag){case 0:case 11:case 15:case 22:return;case 1:if(c.flags&256&&l!==null){var m=l.memoizedProps,k=l.memoizedState;l=c.stateNode,c=l.getSnapshotBeforeUpdate(c.elementType===c.type?m:Hs(c.type,m),k),l.__reactInternalSnapshotBeforeUpdate=c}return;case 3:c.flags&256&&tR(c.stateNode.containerInfo);return;case 5:case 6:case 4:case 17:return}throw Error(_(163))}function n8e(l,c,m){switch(m.tag){case 0:case 11:case 15:case 22:if(c=m.updateQueue,c=c!==null?c.lastEffect:null,c!==null){l=c=c.next;do{if((l.tag&3)===3){var k=l.create;l.destroy=k()}l=l.next}while(l!==c)}if(c=m.updateQueue,c=c!==null?c.lastEffect:null,c!==null){l=c=c.next;do{var N=l;k=N.next,N=N.tag,N&4&&N&1&&(Fte(m,l),p8e(m,l)),l=k}while(l!==c)}return;case 1:l=m.stateNode,m.flags&4&&(c===null?l.componentDidMount():(k=m.elementType===m.type?c.memoizedProps:Hs(m.type,c.memoizedProps),l.componentDidUpdate(k,c.memoizedState,l.__reactInternalSnapshotBeforeUpdate))),c=m.updateQueue,c!==null&&Wee(m,c,l);return;case 3:if(c=m.updateQueue,c!==null){if(l=null,m.child!==null)switch(m.child.tag){case 5:l=m.child.stateNode;break;case 1:l=m.child.stateNode}Wee(m,c,l)}return;case 5:l=m.stateNode,c===null&&m.flags&4&&Oee(m.type,m.memoizedProps)&&l.focus();return;case 6:return;case 4:return;case 12:return;case 13:m.memoizedState===null&&(m=m.alternate,m!==null&&(m=m.memoizedState,m!==null&&(m=m.dehydrated,m!==null&&NZ(m))));return;case 19:case 17:case 20:case 21:case 23:case 24:return}throw Error(_(163))}function jte(l,c){for(var m=l;;){if(m.tag===5){var k=m.stateNode;if(c)k=k.style,typeof k.setProperty=="function"?k.setProperty("display","none","important"):k.display="none";else{k=m.stateNode;var N=m.memoizedProps.style;N=N!=null&&N.hasOwnProperty("display")?N.display:null,k.style.display=OZ("display",N)}}else if(m.tag===6)m.stateNode.nodeValue=c?"":m.memoizedProps;else if((m.tag!==23&&m.tag!==24||m.memoizedState===null||m===l)&&m.child!==null){m.child.return=m,m=m.child;continue}if(m===l)break;for(;m.sibling===null;){if(m.return===null||m.return===l)return;m=m.return}m.sibling.return=m.return,m=m.sibling}}function Ite(l,c){if(s1&&typeof s1.onCommitFiberUnmount=="function")try{s1.onCommitFiberUnmount(oR,c)}catch{}switch(c.tag){case 0:case 11:case 14:case 15:case 22:if(l=c.updateQueue,l!==null&&(l=l.lastEffect,l!==null)){var m=l=l.next;do{var k=m,N=k.destroy;if(k=k.tag,N!==void 0)if(k&4)Fte(c,m);else{k=c;try{N()}catch(J){Hf(k,J)}}m=m.next}while(m!==l)}break;case 1:if(Ste(c),l=c.stateNode,typeof l.componentWillUnmount=="function")try{l.props=c.memoizedProps,l.state=c.memoizedState,l.componentWillUnmount()}catch(J){Hf(c,J)}break;case 5:Ste(c);break;case 4:Cte(l,c)}}function kte(l){l.alternate=null,l.child=null,l.dependencies=null,l.firstEffect=null,l.lastEffect=null,l.memoizedProps=null,l.memoizedState=null,l.pendingProps=null,l.return=null,l.updateQueue=null}function Pte(l){return l.tag===5||l.tag===3||l.tag===4}function Ete(l){e:{for(var c=l.return;c!==null;){if(Pte(c))break e;c=c.return}throw Error(_(160))}var m=c;switch(c=m.stateNode,m.tag){case 5:var k=!1;break;case 3:c=c.containerInfo,k=!0;break;case 4:c=c.containerInfo,k=!0;break;default:throw Error(_(161))}m.flags&16&&(k2(c,""),m.flags&=-17);e:t:for(m=l;;){for(;m.sibling===null;){if(m.return===null||Pte(m.return)){m=null;break e}m=m.return}for(m.sibling.return=m.return,m=m.sibling;m.tag!==5&&m.tag!==6&&m.tag!==18;){if(m.flags&2||m.child===null||m.tag===4)continue t;m.child.return=m,m=m.child}if(!(m.flags&2)){m=m.stateNode;break e}}k?MR(l,m,c):TR(l,m,c)}function MR(l,c,m){var k=l.tag,N=k===5||k===6;if(N)l=N?l.stateNode:l.stateNode.instance,c?m.nodeType===8?m.parentNode.insertBefore(l,c):m.insertBefore(l,c):(m.nodeType===8?(c=m.parentNode,c.insertBefore(l,m)):(c=m,c.appendChild(l)),m=m._reactRootContainer,m!=null||c.onclick!==null||(c.onclick=ij));else if(k!==4&&(l=l.child,l!==null))for(MR(l,c,m),l=l.sibling;l!==null;)MR(l,c,m),l=l.sibling}function TR(l,c,m){var k=l.tag,N=k===5||k===6;if(N)l=N?l.stateNode:l.stateNode.instance,c?m.insertBefore(l,c):m.appendChild(l);else if(k!==4&&(l=l.child,l!==null))for(TR(l,c,m),l=l.sibling;l!==null;)TR(l,c,m),l=l.sibling}function Cte(l,c){for(var m=c,k=!1,N,J;;){if(!k){k=m.return;e:for(;;){if(k===null)throw Error(_(160));switch(N=k.stateNode,k.tag){case 5:J=!1;break e;case 3:N=N.containerInfo,J=!0;break e;case 4:N=N.containerInfo,J=!0;break e}k=k.return}k=!0}if(m.tag===5||m.tag===6){e:for(var re=l,pe=m,ye=pe;;)if(Ite(re,ye),ye.child!==null&&ye.tag!==4)ye.child.return=ye,ye=ye.child;else{if(ye===pe)break e;for(;ye.sibling===null;){if(ye.return===null||ye.return===pe)break e;ye=ye.return}ye.sibling.return=ye.return,ye=ye.sibling}J?(re=N,pe=m.stateNode,re.nodeType===8?re.parentNode.removeChild(pe):re.removeChild(pe)):N.removeChild(m.stateNode)}else if(m.tag===4){if(m.child!==null){N=m.stateNode.containerInfo,J=!0,m.child.return=m,m=m.child;continue}}else if(Ite(l,m),m.child!==null){m.child.return=m,m=m.child;continue}if(m===c)break;for(;m.sibling===null;){if(m.return===null||m.return===c)return;m=m.return,m.tag===4&&(k=!1)}m.sibling.return=m.return,m=m.sibling}}function RR(l,c){switch(c.tag){case 0:case 11:case 14:case 15:case 22:var m=c.updateQueue;if(m=m!==null?m.lastEffect:null,m!==null){var k=m=m.next;do(k.tag&3)===3&&(l=k.destroy,k.destroy=void 0,l!==void 0&&l()),k=k.next;while(k!==m)}return;case 1:return;case 5:if(m=c.stateNode,m!=null){k=c.memoizedProps;var N=l!==null?l.memoizedProps:k;l=c.type;var J=c.updateQueue;if(c.updateQueue=null,J!==null){for(m[lj]=k,l==="input"&&k.type==="radio"&&k.name!=null&&WS(m,k),OT(l,N),c=OT(l,k),N=0;NN&&(N=re),m&=~J}if(m=N,m=oa()-m,m=(120>m?120:480>m?480:1080>m?1080:1920>m?1920:3e3>m?3e3:4320>m?4320:1960*i8e(m/1960))-m,10N&&(N=re),m&=~J}if(m=N,m=na()-m,m=(120>m?120:480>m?480:1080>m?1080:1920>m?1920:3e3>m?3e3:4320>m?4320:1960*s8e(m/1960))-m,10 component higher in the tree to provide a loading indicator or placeholder to display.`)}Li!==5&&(Li=2),ye=CR(ye,pe),lt=re;do{switch(lt.tag){case 3:J=ye,lt.flags|=4096,c&=-c,lt.lanes|=c;var gr=xte(lt,J,c);Fee(lt,gr);break e;case 1:J=ye;var Ft=lt.type,vr=lt.stateNode;if(!(lt.flags&64)&&(typeof Ft.getDerivedStateFromError=="function"||vr!==null&&typeof vr.componentDidCatch=="function"&&(Ju===null||!Ju.has(vr)))){lt.flags|=4096,c&=-c,lt.lanes|=c;var Ur=_te(lt,J,c);Fee(lt,Ur);break e}}lt=lt.return}while(lt!==null)}Nte(m)}catch(Rr){c=Rr,di===m&&m!==null&&(di=m=m.return);continue}break}while(1)}function Lte(){var l=Ej.current;return Ej.current=kj,l===null?kj:l}function pb(l,c){var m=ur;ur|=16;var k=Lte();ka===l&&aa===c||sg(l,c);do try{l8e();break}catch(N){zte(l,N)}while(1);if(cR(),ur=m,Ej.current=k,di!==null)throw Error(_(261));return ka=null,aa=0,Li}function l8e(){for(;di!==null;)Dte(di)}function s8e(){for(;di!==null&&!V7e();)Dte(di)}function Dte(l){var c=Bte(l.alternate,l,d1);l.memoizedProps=l.pendingProps,c===null?Nte(l):di=c,zR.current=null}function Nte(l){var c=l;do{var m=c.alternate;if(l=c.return,c.flags&2048){if(m=Z7e(c),m!==null){m.flags&=2047,di=m;return}l!==null&&(l.firstEffect=l.lastEffect=null,l.flags|=2048)}else{if(m=Q7e(m,c,d1),m!==null){di=m;return}if(m=c,m.tag!==24&&m.tag!==23||m.memoizedState===null||d1&1073741824||!(m.mode&4)){for(var k=0,N=m.child;N!==null;)k|=N.lanes|N.childLanes,N=N.sibling;m.childLanes=k}l!==null&&!(l.flags&2048)&&(l.firstEffect===null&&(l.firstEffect=c.firstEffect),c.lastEffect!==null&&(l.lastEffect!==null&&(l.lastEffect.nextEffect=c.firstEffect),l.lastEffect=c.lastEffect),1re&&(pe=re,re=gr,gr=pe),pe=see(Ee,gr),J=see(Ee,re),pe&&J&&(et.rangeCount!==1||et.anchorNode!==pe.node||et.anchorOffset!==pe.offset||et.focusNode!==J.node||et.focusOffset!==J.offset)&&(Ke=Ke.createRange(),Ke.setStart(pe.node,pe.offset),et.removeAllRanges(),gr>re?(et.addRange(Ke),et.extend(J.node,J.offset)):(Ke.setEnd(J.node,J.offset),et.addRange(Ke)))))),Ke=[],et=Ee;et=et.parentNode;)et.nodeType===1&&Ke.push({element:et,left:et.scrollLeft,top:et.scrollTop});for(typeof Ee.focus=="function"&&Ee.focus(),Ee=0;Eeoa()-FR?sg(l,0):DR|=m),Ql(l,c)}function m8e(l,c){var m=l.stateNode;m!==null&&m.delete(c),c=0,c===0&&(c=l.mode,c&2?c&4?(lp===0&&(lp=og),c=Vh(62914560&~lp),c===0&&(c=4194304)):c=Zh()===99?1:2:c=1),m=kl(),l=zj(l,c),l!==null&&(XS(l,c,m),Ql(l,m))}var Bte;Bte=function(l,c,m){var k=c.lanes;if(l!==null)if(l.memoizedProps!==c.pendingProps||Za.current)Vs=!0;else if(m&k)Vs=!!(l.flags&16384);else{switch(Vs=!1,c.tag){case 3:fte(c),vR();break;case 5:Jee(c);break;case 1:el(c.type)&&cj(c);break;case 4:mR(c,c.stateNode.containerInfo);break;case 10:k=c.memoizedProps.value;var N=c.type._context;Eo(dj,N._currentValue),N._currentValue=k;break;case 13:if(c.memoizedState!==null)return m&c.child.childLanes?dte(l,c,m):(Eo(Co,Co.current&1),c=ip(l,c,m),c!==null?c.sibling:null);Eo(Co,Co.current&1);break;case 19:if(k=(m&c.childLanes)!==0,l.flags&64){if(k)return yte(l,c,m);c.flags|=64}if(N=c.memoizedState,N!==null&&(N.rendering=null,N.tail=null,N.lastEffect=null),Eo(Co,Co.current),k)break;return null;case 23:case 24:return c.lanes=0,jR(l,c,m)}return ip(l,c,m)}else Vs=!1;switch(c.lanes=0,c.tag){case 2:if(k=c.type,l!==null&&(l.alternate=null,c.alternate=null,c.flags|=2),l=c.pendingProps,N=Qh(c,na.current),tg(c,m),N=wR(null,c,k,l,N,m),c.flags|=1,typeof N=="object"&&N!==null&&typeof N.render=="function"&&N.$$typeof===void 0){if(c.tag=1,c.memoizedState=null,c.updateQueue=null,el(k)){var J=!0;cj(c)}else J=!1;c.memoizedState=N.state!==null&&N.state!==void 0?N.state:null,fR(c);var re=k.getDerivedStateFromProps;typeof re=="function"&&gj(c,k,re,l),N.updater=vj,c.stateNode=N,N._reactInternals=c,dR(c,k,l,m),c=kR(null,c,k,!0,J,m)}else c.tag=0,rl(null,c,N,m),c=c.child;return c;case 16:N=c.elementType;e:{switch(l!==null&&(l.alternate=null,c.alternate=null,c.flags|=2),l=c.pendingProps,J=N._init,N=J(N._payload),c.type=N,J=c.tag=g8e(N),l=Hs(N,l),J){case 0:c=IR(null,c,N,l,m);break e;case 1:c=pte(null,c,N,l,m);break e;case 11:c=lte(null,c,N,l,m);break e;case 14:c=ste(null,c,N,Hs(N.type,l),k,m);break e}throw Error(_(306,N,""))}return c;case 0:return k=c.type,N=c.pendingProps,N=c.elementType===k?N:Hs(k,N),IR(l,c,k,N,m);case 1:return k=c.type,N=c.pendingProps,N=c.elementType===k?N:Hs(k,N),pte(l,c,k,N,m);case 3:if(fte(c),k=c.updateQueue,l===null||k===null)throw Error(_(282));if(k=c.pendingProps,N=c.memoizedState,N=N!==null?N.element:null,Nee(l,c),G2(c,k,null,m),k=c.memoizedState.element,k===N)vR(),c=ip(l,c,m);else{if(N=c.stateNode,(J=N.hydrate)&&(Df=Gh(c.stateNode.containerInfo.firstChild),op=c,J=Uu=!0),J){if(l=N.mutableSourceEagerHydrationData,l!=null)for(N=0;N{"use strict";function d(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(d)}catch(w){console.error(w)}}d(),p.exports=R()}),Y=f(s=>{"use strict";var p=C();function d(ne,ie){return ne===ie&&(ne!==0||1/ne===1/ie)||ne!==ne&&ie!==ie}var w=typeof Object.is=="function"?Object.is:d,_=p.useState,E=p.useEffect,T=p.useLayoutEffect,z=p.useDebugValue;function V(ne,ie){var oe=ie(),ce=_({inst:{value:oe,getSnapshot:ie}}),me=ce[0].inst,le=ce[1];return T(function(){me.value=oe,me.getSnapshot=ie,H(me)&&le({inst:me})},[ne,oe,ie]),E(function(){return H(me)&&le({inst:me}),ne(function(){H(me)&&le({inst:me})})},[ne]),z(oe),oe}function H(ne){var ie=ne.getSnapshot;ne=ne.value;try{var oe=ie();return!w(ne,oe)}catch{return!0}}function G(ne,ie){return ie()}var ee=typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?G:V;s.useSyncExternalStore=p.useSyncExternalStore!==void 0?p.useSyncExternalStore:ee}),X=f((s,p)=>{"use strict";p.exports=Y()}),ae=f(s=>{"use strict";var p=C(),d=X();function w(G,ee){return G===ee&&(G!==0||1/G===1/ee)||G!==G&&ee!==ee}var _=typeof Object.is=="function"?Object.is:w,E=d.useSyncExternalStore,T=p.useRef,z=p.useEffect,V=p.useMemo,H=p.useDebugValue;s.useSyncExternalStoreWithSelector=function(G,ee,ne,ie,oe){var ce=T(null);if(ce.current===null){var me={hasValue:!1,value:null};ce.current=me}else me=ce.current;ce=V(function(){function Te(Ae){if(!De){if(De=!0,Ie=Ae,Ae=ie(Ae),oe!==void 0&&me.hasValue){var ue=me.value;if(oe(ue,Ae))return Pe=ue}return Pe=Ae}if(ue=Pe,_(Ie,Ae))return ue;var je=ie(Ae);return oe!==void 0&&oe(ue,je)?ue:(Ie=Ae,Pe=je)}var De=!1,Ie,Pe,we=ne===void 0?null:ne;return[function(){return Te(ee())},we===null?void 0:function(){return Te(we())}]},[ee,ne,ie,oe]);var le=E(G,ce[0],ce[1]);return z(function(){me.hasValue=!0,me.value=le},[le]),H(le),le}}),Z=f((s,p)=>{"use strict";p.exports=ae()});function K(){return K=Object.assign?Object.assign.bind():function(s){for(var p=1;p{}),se=f(s=>{"use strict";var p=typeof Symbol=="function"&&Symbol.for,d=p?Symbol.for("react.element"):60103,w=p?Symbol.for("react.portal"):60106,_=p?Symbol.for("react.fragment"):60107,E=p?Symbol.for("react.strict_mode"):60108,T=p?Symbol.for("react.profiler"):60114,z=p?Symbol.for("react.provider"):60109,V=p?Symbol.for("react.context"):60110,H=p?Symbol.for("react.async_mode"):60111,G=p?Symbol.for("react.concurrent_mode"):60111,ee=p?Symbol.for("react.forward_ref"):60112,ne=p?Symbol.for("react.suspense"):60113,ie=p?Symbol.for("react.suspense_list"):60120,oe=p?Symbol.for("react.memo"):60115,ce=p?Symbol.for("react.lazy"):60116,me=p?Symbol.for("react.block"):60121,le=p?Symbol.for("react.fundamental"):60117,Te=p?Symbol.for("react.responder"):60118,De=p?Symbol.for("react.scope"):60119;function Ie(we){if(typeof we=="object"&&we!==null){var Ae=we.$$typeof;switch(Ae){case d:switch(we=we.type,we){case H:case G:case _:case T:case E:case ne:return we;default:switch(we=we&&we.$$typeof,we){case V:case ee:case ce:case oe:case z:return we;default:return Ae}}case w:return Ae}}}function Pe(we){return Ie(we)===G}s.AsyncMode=H,s.ConcurrentMode=G,s.ContextConsumer=V,s.ContextProvider=z,s.Element=d,s.ForwardRef=ee,s.Fragment=_,s.Lazy=ce,s.Memo=oe,s.Portal=w,s.Profiler=T,s.StrictMode=E,s.Suspense=ne,s.isAsyncMode=function(we){return Pe(we)||Ie(we)===H},s.isConcurrentMode=Pe,s.isContextConsumer=function(we){return Ie(we)===V},s.isContextProvider=function(we){return Ie(we)===z},s.isElement=function(we){return typeof we=="object"&&we!==null&&we.$$typeof===d},s.isForwardRef=function(we){return Ie(we)===ee},s.isFragment=function(we){return Ie(we)===_},s.isLazy=function(we){return Ie(we)===ce},s.isMemo=function(we){return Ie(we)===oe},s.isPortal=function(we){return Ie(we)===w},s.isProfiler=function(we){return Ie(we)===T},s.isStrictMode=function(we){return Ie(we)===E},s.isSuspense=function(we){return Ie(we)===ne},s.isValidElementType=function(we){return typeof we=="string"||typeof we=="function"||we===_||we===G||we===T||we===E||we===ne||we===ie||typeof we=="object"&&we!==null&&(we.$$typeof===ce||we.$$typeof===oe||we.$$typeof===z||we.$$typeof===V||we.$$typeof===ee||we.$$typeof===le||we.$$typeof===Te||we.$$typeof===De||we.$$typeof===me)},s.typeOf=Ie}),Se=f((s,p)=>{"use strict";p.exports=se()}),Oe=f((s,p)=>{"use strict";var d=Se(),w={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},_={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},E={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},T={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},z={};z[d.ForwardRef]=E,z[d.Memo]=T;function V(me){return d.isMemo(me)?T:z[me.$$typeof]||w}var H=Object.defineProperty,G=Object.getOwnPropertyNames,ee=Object.getOwnPropertySymbols,ne=Object.getOwnPropertyDescriptor,ie=Object.getPrototypeOf,oe=Object.prototype;function ce(me,le,Te){if(typeof le!="string"){if(oe){var De=ie(le);De&&De!==oe&&ce(me,De,Te)}var Ie=G(le);ee&&(Ie=Ie.concat(ee(le)));for(var Pe=V(me),we=V(le),Ae=0;Ae{"use strict";var p=Symbol.for("react.element"),d=Symbol.for("react.portal"),w=Symbol.for("react.fragment"),_=Symbol.for("react.strict_mode"),E=Symbol.for("react.profiler"),T=Symbol.for("react.provider"),z=Symbol.for("react.context"),V=Symbol.for("react.server_context"),H=Symbol.for("react.forward_ref"),G=Symbol.for("react.suspense"),ee=Symbol.for("react.suspense_list"),ne=Symbol.for("react.memo"),ie=Symbol.for("react.lazy"),oe=Symbol.for("react.offscreen"),ce;ce=Symbol.for("react.module.reference");function me(le){if(typeof le=="object"&&le!==null){var Te=le.$$typeof;switch(Te){case p:switch(le=le.type,le){case w:case E:case _:case G:case ee:return le;default:switch(le=le&&le.$$typeof,le){case V:case z:case H:case ie:case ne:case T:return le;default:return Te}}case d:return Te}}}s.ContextConsumer=z,s.ContextProvider=T,s.Element=p,s.ForwardRef=H,s.Fragment=w,s.Lazy=ie,s.Memo=ne,s.Portal=d,s.Profiler=E,s.StrictMode=_,s.Suspense=G,s.SuspenseList=ee,s.isAsyncMode=function(){return!1},s.isConcurrentMode=function(){return!1},s.isContextConsumer=function(le){return me(le)===z},s.isContextProvider=function(le){return me(le)===T},s.isElement=function(le){return typeof le=="object"&&le!==null&&le.$$typeof===p},s.isForwardRef=function(le){return me(le)===H},s.isFragment=function(le){return me(le)===w},s.isLazy=function(le){return me(le)===ie},s.isMemo=function(le){return me(le)===ne},s.isPortal=function(le){return me(le)===d},s.isProfiler=function(le){return me(le)===E},s.isStrictMode=function(le){return me(le)===_},s.isSuspense=function(le){return me(le)===G},s.isSuspenseList=function(le){return me(le)===ee},s.isValidElementType=function(le){return typeof le=="string"||typeof le=="function"||le===w||le===E||le===_||le===G||le===ee||le===oe||typeof le=="object"&&le!==null&&(le.$$typeof===ie||le.$$typeof===ne||le.$$typeof===T||le.$$typeof===z||le.$$typeof===H||le.$$typeof===ce||le.getModuleId!==void 0)},s.typeOf=me}),Ue=f((s,p)=>{"use strict";p.exports=be()}),We=f((s,p)=>{"use strict";function d(_,E){for(var T=_.keys(),z;!(z=T.next()).done;)E(_.get(z.value),z.value,_)}var w=function(){var _;typeof Map<"u"&&(_=Map,Map.prototype.keys||(Map.prototype.keys=function(){var V=[];return this.forEach(function(H,G){V.push(G)}),V}));function E(V){var H=this;H._map=_,E.Map&&(H._map=E.Map),H._=H._map?new H._map:{},V&&V.forEach(function(G){H.set(G[0],G[1])})}E.prototype.get=function(V){return this._map?this._.get(V):this._[V]},E.prototype.set=function(V,H){var G=Array.prototype.slice.call(arguments);V=G.shift();var ee=this.get(V);return ee||(ee=[],this._map?this._.set(V,ee):this._[V]=ee),Array.prototype.push.apply(ee,G),this},E.prototype.delete=function(V,H){if(!this.has(V))return!1;if(arguments.length==1)return this._map?this._.delete(V):delete this._[V],!0;var G=this.get(V),ee=G.indexOf(H);return ee!=-1?(G.splice(ee,1),!0):!1},E.prototype.has=function(V,H){var G=this._map?this._.has(V):this._.hasOwnProperty(V);if(arguments.length==1||!G)return G;var ee=this.get(V)||[];return ee.indexOf(H)!=-1},E.prototype.keys=function(){return this._map?z(this._.keys()):z(Object.keys(this._))},E.prototype.values=function(){var V=[];return this.forEachEntry(function(H){Array.prototype.push.apply(V,H)}),z(V)},E.prototype.forEachEntry=function(V){d(this,V)},E.prototype.forEach=function(V){var H=this;H.forEachEntry(function(G,ee){G.forEach(function(ne){V(ne,ee,H)})})},E.prototype.clear=function(){this._map?this._.clear():this._={}},Object.defineProperty(E.prototype,"size",{configurable:!1,enumerable:!0,get:function(){var V=0;return d(this,function(H){V+=H.length}),V}}),Object.defineProperty(E.prototype,"count",{configurable:!1,enumerable:!0,get:function(){return this._.size}});var T;try{T=new Function("iterator","makeIterator","var keysArray = []; for(var key of iterator){keysArray.push(key);} return makeIterator(keysArray).next;")}catch{}function z(V){if(Array.isArray(V)){var H=0;return{next:function(){return H{ot=function(){function s(d){var w=this;this._insertTag=function(_){var E;w.tags.length===0?w.insertionPoint?E=w.insertionPoint.nextSibling:w.prepend?E=w.container.firstChild:E=w.before:E=w.tags[w.tags.length-1].nextSibling,w.container.insertBefore(_,E),w.tags.push(_)},this.isSpeedy=d.speedy===void 0?!0:d.speedy,this.tags=[],this.ctr=0,this.nonce=d.nonce,this.key=d.key,this.container=d.container,this.prepend=d.prepend,this.insertionPoint=d.insertionPoint,this.before=null}var p=s.prototype;return p.hydrate=function(d){d.forEach(this._insertTag)},p.insert=function(d){this.ctr%(this.isSpeedy?65e3:1)===0&&this._insertTag(Qe(this));var w=this.tags[this.tags.length-1];if(!1)var _;if(this.isSpeedy){var E=Ge(w);try{E.insertRule(d,E.cssRules.length)}catch{}}else w.appendChild(document.createTextNode(d));this.ctr++},p.flush=function(){this.tags.forEach(function(d){return d.parentNode&&d.parentNode.removeChild(d)}),this.tags=[],this.ctr=0},s}()}),ht,Mt,Ze,Kt,it,xt,wt,Ht,sr,Er=u(()=>{ht="-ms-",Mt="-moz-",Ze="-webkit-",Kt="comm",it="rule",xt="decl",wt="@import",Ht="@keyframes",sr="@layer"});function _r(s,p){return fn(s,0)^45?(((p<<2^fn(s,0))<<2^fn(s,1))<<2^fn(s,2))<<2^fn(s,3):0}function pn(s){return s.trim()}function Dr(s,p){return(s=p.exec(s))?s[0]:s}function Bt(s,p,d){return s.replace(p,d)}function Dn(s,p){return s.indexOf(p)}function fn(s,p){return s.charCodeAt(p)|0}function ro(s,p,d){return s.slice(p,d)}function Gn(s){return s.length}function co(s){return s.length}function So(s,p){return p.push(s),s}function En(s,p){return s.map(p).join("")}var Vr,hn,zo,gn=u(()=>{Vr=Math.abs,hn=String.fromCharCode,zo=Object.assign});function vn(s,p,d,w,_,E,T){return{value:s,root:p,parent:d,type:w,props:_,children:E,line:xs,column:Ba,length:T,return:""}}function Xo(s,p){return zo(vn("",null,null,"",null,null,0),s,{length:-s.length},p)}function jc(){return no}function ws(){return no=li>0?fn(si,--li):0,Ba--,no===10&&(Ba=1,xs--),no}function mr(){return no=li2||zl(no)>3?"":" "}function Fp(s,p){for(;--p&&mr()&&!(no<48||no>102||no>57&&no<65||no>70&&no<97););return dl(s,Ic()+(p<6&&ba()==32&&mr()==32))}function e0(s){for(;mr();)switch(no){case s:return li;case 34:case 39:s!==34&&s!==39&&e0(no);break;case 40:s===41&&e0(s);break;case 92:mr();break}return li}function Pc(s,p){for(;mr()&&s+no!==47+10&&!(s+no===42+42&&ba()===47););return"/*"+dl(p,li-1)+"*"+hn(s===47?s:mr())}function yu(s){for(;!zl(ba());)mr();return dl(s,li)}var xs,Ba,St,li,no,si,Ci=u(()=>{gn(),xs=1,Ba=1,St=0,li=0,no=0,si=""});function Cr(s){return Os(bu("",null,null,null,[""],s=kc(s),0,[0],s))}function bu(s,p,d,w,_,E,T,z,V){for(var H=0,G=0,ee=T,ne=0,ie=0,oe=0,ce=1,me=1,le=1,Te=0,De="",Ie=_,Pe=E,we=w,Ae=De;me;)switch(oe=Te,Te=mr()){case 40:if(oe!=108&&fn(Ae,ee-1)==58){Dn(Ae+=Bt(Ll(Te),"&","&\f"),"&\f")!=-1&&(le=-1);break}case 34:case 39:case 91:Ae+=Ll(Te);break;case 9:case 10:case 13:case 32:Ae+=wm(oe);break;case 92:Ae+=Fp(Ic()-1,7);continue;case 47:switch(ba()){case 42:case 47:So(wu(Pc(mr(),Ic()),p,d),V);break;default:Ae+="/"}break;case 123*ce:z[H++]=Gn(Ae)*le;case 125*ce:case 59:case 0:switch(Te){case 0:case 125:me=0;case 59+G:le==-1&&(Ae=Bt(Ae,/\f/g,"")),ie>0&&Gn(Ae)-ee&&So(ie>32?Om(Ae+";",w,d,ee-1):Om(Bt(Ae," ","")+";",w,d,ee-2),V);break;case 59:Ae+=";";default:if(So(we=an(Ae,p,d,H,G,_,z,De,Ie=[],Pe=[],ee),E),Te===123)if(G===0)bu(Ae,p,we,we,Ie,E,ee,z,Pe);else switch(ne===99&&fn(Ae,3)===110?100:ne){case 100:case 108:case 109:case 115:bu(s,we,we,w&&So(an(s,we,we,0,0,_,z,De,_,Ie=[],ee),Pe),_,Pe,ee,z,w?Ie:Pe);break;default:bu(Ae,we,we,we,[""],Pe,0,z,Pe)}}H=G=ie=0,ce=le=1,De=Ae="",ee=T;break;case 58:ee=1+Gn(Ae),ie=oe;default:if(ce<1){if(Te==123)--ce;else if(Te==125&&ce++==0&&ws()==125)continue}switch(Ae+=hn(Te),Te*ce){case 38:le=G>0?1:(Ae+="\f",-1);break;case 44:z[H++]=(Gn(Ae)-1)*le,le=1;break;case 64:ba()===45&&(Ae+=Ll(mr())),ne=ba(),G=ee=Gn(De=Ae+=yu(Ic())),Te++;break;case 45:oe===45&&Gn(Ae)==2&&(ce=0)}}return E}function an(s,p,d,w,_,E,T,z,V,H,G){for(var ee=_-1,ne=_===0?E:[""],ie=co(ne),oe=0,ce=0,me=0;oe0?ne[le]+" "+Te:Bt(Te,/&\f/g,ne[le])))&&(V[me++]=De);return vn(s,p,d,_===0?it:z,V,H,G)}function wu(s,p,d){return vn(s,p,d,Kt,hn(jc()),ro(s,2,-2),0)}function Om(s,p,d,w){return vn(s,p,d,xt,ro(s,0,w),ro(s,w+1,-1),w)}var Wp=u(()=>{Er(),gn(),Ci()}),Ko=u(()=>{});function Lo(s,p){for(var d="",w=co(s),_=0;_{Er(),gn()});function wa(s){var p=co(s);return function(d,w,_,E){for(var T="",z=0;z{gn()}),xm=u(()=>{Er(),gn(),Wp(),Ko(),Ci(),po(),_s()}),t0,Dl=u(()=>{t0=function(s){var p=new WeakMap;return function(d){if(p.has(d))return p.get(d);var w=s(d);return p.set(d,w),w}}});function r0(s){var p=Object.create(null);return function(d){return p[d]===void 0&&(p[d]=s(d)),p[d]}}var Bp=u(()=>{}),Ss={};h(Ss,{default:()=>Va});function Ou(s,p){switch(_r(s,p)){case 5103:return Ze+"print-"+s+s;case 5737:case 4201:case 3177:case 3433:case 1641:case 4457:case 2921:case 5572:case 6356:case 5844:case 3191:case 6645:case 3005:case 6391:case 5879:case 5623:case 6135:case 4599:case 4855:case 4215:case 6389:case 5109:case 5365:case 5621:case 3829:return Ze+s+s;case 5349:case 4246:case 4810:case 6968:case 2756:return Ze+s+Mt+s+ht+s+s;case 6828:case 4268:return Ze+s+ht+s+s;case 6165:return Ze+s+ht+"flex-"+s+s;case 5187:return Ze+s+Bt(s,/(\w+).+(:[^]+)/,Ze+"box-$1$2"+ht+"flex-$1$2")+s;case 5443:return Ze+s+ht+"flex-item-"+Bt(s,/flex-|-self/,"")+s;case 4675:return Ze+s+ht+"flex-line-pack"+Bt(s,/align-content|flex-|-self/,"")+s;case 5548:return Ze+s+ht+Bt(s,"shrink","negative")+s;case 5292:return Ze+s+ht+Bt(s,"basis","preferred-size")+s;case 6060:return Ze+"box-"+Bt(s,"-grow","")+Ze+s+ht+Bt(s,"grow","positive")+s;case 4554:return Ze+Bt(s,/([^-])(transform)/g,"$1"+Ze+"$2")+s;case 6187:return Bt(Bt(Bt(s,/(zoom-|grab)/,Ze+"$1"),/(image-set)/,Ze+"$1"),s,"")+s;case 5495:case 3959:return Bt(s,/(image-set\([^]*)/,Ze+"$1$`$1");case 4968:return Bt(Bt(s,/(.+:)(flex-)?(.*)/,Ze+"box-pack:$3"+ht+"flex-pack:$3"),/s.+-b[^;]+/,"justify")+Ze+s+s;case 4095:case 3583:case 4068:case 2532:return Bt(s,/(.+)-inline(.+)/,Ze+"$1$2")+s;case 8116:case 7059:case 5753:case 5535:case 5445:case 5701:case 4933:case 4677:case 5533:case 5789:case 5021:case 4765:if(Gn(s)-1-p>6)switch(fn(s,p+1)){case 109:if(fn(s,p+4)!==45)break;case 102:return Bt(s,/(.+:)(.+)-([^]+)/,"$1"+Ze+"$2-$3$1"+Mt+(fn(s,p+3)==108?"$3":"$2-$3"))+s;case 115:return~Dn(s,"stretch")?Ou(Bt(s,"stretch","fill-available"),p)+s:s}break;case 4949:if(fn(s,p+1)!==115)break;case 6444:switch(fn(s,Gn(s)-3-(~Dn(s,"!important")&&10))){case 107:return Bt(s,":",":"+Ze)+s;case 101:return Bt(s,/(.+:)([^;!]+)(;|!.+)?/,"$1"+Ze+(fn(s,14)===45?"inline-":"")+"box$3$1"+Ze+"$2$3$1"+ht+"$2box$3")+s}break;case 5936:switch(fn(s,p+11)){case 114:return Ze+s+ht+Bt(s,/[svh]\w+-[tblr]{2}/,"tb")+s;case 108:return Ze+s+ht+Bt(s,/[svh]\w+-[tblr]{2}/,"tb-rl")+s;case 45:return Ze+s+ht+Bt(s,/[svh]\w+-[tblr]{2}/,"lr")+s}return Ze+s+ht+s+s}return s}var Hp,_m,Sm,n0,Xn,Vp,jm,Ec,Va,Cc=u(()=>{at(),xm(),Dl(),Bp(),Hp=function(s,p,d){for(var w=0,_=0;w=_,_=ba(),w===38&&_===12&&(p[d]=1),!zl(_);)mr();return dl(s,li)},_m=function(s,p){var d=-1,w=44;do switch(zl(w)){case 0:w===38&&ba()===12&&(p[d]=1),s[d]+=Hp(li-1,p,d);break;case 2:s[d]+=Ll(w);break;case 4:if(w===44){s[++d]=ba()===58?"&\f":"",p[d]=s[d].length;break}default:s[d]+=hn(w)}while(w=mr());return s},Sm=function(s,p){return Os(_m(kc(s),p))},n0=new WeakMap,Xn=function(s){if(!(s.type!=="rule"||!s.parent||s.length<1)){for(var p=s.value,d=s.parent,w=s.column===d.column&&s.line===d.line;d.type!=="rule";)if(d=d.parent,!d)return;if(!(s.props.length===1&&p.charCodeAt(0)!==58&&!n0.get(d))&&!w){n0.set(s,!0);for(var _=[],E=Sm(p,_),T=d.props,z=0,V=0;z-1&&!s.return)switch(s.type){case xt:s.return=Ou(s.value,s.length);break;case Ht:return Lo([Xo(s,{value:Bt(s.value,"@","@"+Ze)})],w);case it:if(s.length)return En(s.props,function(_){switch(Dr(_,/(::plac\w+|:read-\w+)/)){case":read-only":case":read-write":return Lo([Xo(s,{props:[Bt(_,/:(read-\w+)/,":"+Mt+"$1")]})],w);case"::placeholder":return Lo([Xo(s,{props:[Bt(_,/:(plac\w+)/,":"+Ze+"input-$1")]}),Xo(s,{props:[Bt(_,/:(plac\w+)/,":"+Mt+"$1")]}),Xo(s,{props:[Bt(_,/:(plac\w+)/,ht+"input-$1")]})],w)}return""})}},Ec=[jm],Va=function(s){var p=s.key;if(p==="css"){var d=document.querySelectorAll("style[data-emotion]:not([data-s])");Array.prototype.forEach.call(d,function(oe){var ce=oe.getAttribute("data-emotion");ce.indexOf(" ")!==-1&&(document.head.appendChild(oe),oe.setAttribute("data-s",""))})}var w=s.stylisPlugins||Ec,_={},E,T=[];E=s.container||document.head,Array.prototype.forEach.call(document.querySelectorAll('style[data-emotion^="'+p+' "]'),function(oe){for(var ce=oe.getAttribute("data-emotion").split(" "),me=1;me{js=O(Oe()),Im=function(s,p){return(0,js.default)(s,p)}});function o0(s,p,d){var w="";return d.split(" ").forEach(function(_){s[_]!==void 0?p.push(s[_]+";"):w+=_+" "}),w}var km,xu,Is,Ac=u(()=>{km=!0,xu=function(s,p,d){var w=s.key+"-"+p.name;(d===!1||km===!1)&&s.registered[w]===void 0&&(s.registered[w]=p.styles)},Is=function(s,p,d){xu(s,p,d);var w=s.key+"-"+p.name;if(s.inserted[p.name]===void 0){var _=p;do s.insert(p===_?"."+w:"",_,s.sheet,!0),_=_.next;while(_!==void 0)}}});function Ty(s){for(var p=0,d,w=0,_=s.length;_>=4;++w,_-=4)d=s.charCodeAt(w)&255|(s.charCodeAt(++w)&255)<<8|(s.charCodeAt(++w)&255)<<16|(s.charCodeAt(++w)&255)<<24,d=(d&65535)*1540483477+((d>>>16)*59797<<16),d^=d>>>24,p=(d&65535)*1540483477+((d>>>16)*59797<<16)^(p&65535)*1540483477+((p>>>16)*59797<<16);switch(_){case 3:p^=(s.charCodeAt(w+2)&255)<<16;case 2:p^=(s.charCodeAt(w+1)&255)<<8;case 1:p^=s.charCodeAt(w)&255,p=(p&65535)*1540483477+((p>>>16)*59797<<16)}return p^=p>>>13,p=(p&65535)*1540483477+((p>>>16)*59797<<16),((p^p>>>15)>>>0).toString(36)}var Ry=u(()=>{}),i0,zy=u(()=>{i0={animationIterationCount:1,aspectRatio:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1}});function qa(s,p,d){if(d==null)return"";if(d.__emotion_styles!==void 0)return d;switch(typeof d){case"boolean":return"";case"object":{if(d.anim===1)return Ua={name:d.name,styles:d.styles,next:Ua},d.name;if(d.styles!==void 0){var w=d.next;if(w!==void 0)for(;w!==void 0;)Ua={name:w.name,styles:w.styles,next:Ua},w=w.next;var _=d.styles+";";return _}return Mc(s,p,d)}case"function":{if(s!==void 0){var E=Ua,T=d(s);return Ua=E,qa(s,p,T)}break}case"string":if(!1)var z,V;break}if(p==null)return d;var H=p[d];return H!==void 0?H:d}function Mc(s,p,d){var w="";if(Array.isArray(d))for(var _=0;_{Ry(),zy(),Bp(),a0=/[A-Z]|^ms/g,_u=/_EMO_([^_]+?)_([^]*?)_EMO_/g,Oa=function(s){return s.charCodeAt(1)===45},l0=function(s){return s!=null&&typeof s!="boolean"},qp=r0(function(s){return Oa(s)?s:s.replace(a0,"-$&").toLowerCase()}),s0=function(s,p){switch(s){case"animation":case"animationName":if(typeof p=="string")return p.replace(_u,function(d,w,_){return Ua={name:w,styles:_,next:Ua},w})}return i0[s]!==1&&!Oa(s)&&typeof p=="number"&&p!==0?p+"px":p},u0=/label:\s*([^\s;\n{]+)\s*(;|$)/g,Su=function(s,p,d){if(s.length===1&&typeof s[0]=="object"&&s[0]!==null&&s[0].styles!==void 0)return s[0];var w=!0,_="";Ua=void 0;var E=s[0];E==null||E.raw===void 0?(w=!1,_+=qa(d,p,E)):_+=E[0];for(var T=1;T{$p=O(C()),Jp=function(s){return s()},c0=$p.useInsertionEffect?$p.useInsertionEffect:!1,ju=c0||Jp,Gp=c0||$p.useLayoutEffect});function Kp(s){var p=s.displayName||s.name||"Component",d=function(_,E){var T=fo.useContext(ui);return fo.createElement(s,K({theme:T,ref:E},_))},w=fo.forwardRef(d);return w.displayName="WithTheme("+p+")",Im(w,s)}var fo,Tc,Yp,Qp,Nl,Zp,Pm,Fl,ui,Em,Cm,Am,ks,Wl,p0,f0,d0,Mm,m0=u(()=>{fo=O(C()),Tc=O(C()),Cc(),de(),Dl(),My(),Ac(),Up(),Xp(),Yp=!0,Qp={}.hasOwnProperty,Nl=fo.createContext(typeof HTMLElement<"u"?Va({key:"css"}):null),Zp=Nl.Provider,Pm=function(){return(0,Tc.useContext)(Nl)},Fl=function(s){return(0,Tc.forwardRef)(function(p,d){var w=(0,Tc.useContext)(Nl);return s(p,w,d)})},Yp||(Fl=function(s){return function(p){var d=(0,Tc.useContext)(Nl);return d===null?(d=Va({key:"css"}),fo.createElement(Nl.Provider,{value:d},s(p,d))):s(p,d)}}),ui=fo.createContext({}),Em=function(){return fo.useContext(ui)},Cm=function(s,p){if(typeof p=="function"){var d=p(s);return d}return K({},s,p)},Am=t0(function(s){return t0(function(p){return Cm(s,p)})}),ks=function(s){var p=fo.useContext(ui);return s.theme!==p&&(p=Am(p)(s.theme)),fo.createElement(ui.Provider,{value:p},s.children)},Wl="__EMOTION_TYPE_PLEASE_DO_NOT_USE__",p0=function(s,p){var d={};for(var w in p)Qp.call(p,w)&&(d[w]=p[w]);if(d[Wl]=s,!1)var _;return d},f0=function(s){var p=s.cache,d=s.serialized,w=s.isStringTag;return xu(p,d,w),ju(function(){return Is(p,d,w)}),null},d0=Fl(function(s,p,d){var w=s.css;typeof w=="string"&&p.registered[w]!==void 0&&(w=p.registered[w]);var _=s[Wl],E=[w],T="";typeof s.className=="string"?T=o0(p.registered,E,s.className):s.className!=null&&(T=s.className+" ");var z=Su(E,void 0,fo.useContext(ui));if(!1)var V;T+=p.key+"-"+z.name;var H={};for(var G in s)Qp.call(s,G)&&G!=="css"&&G!==Wl&&(H[G]=s[G]);return H.ref=d,H.className=T,fo.createElement(fo.Fragment,null,fo.createElement(f0,{cache:p,serialized:z,isStringTag:typeof _=="string"}),fo.createElement(_,H))}),Mm=d0}),Rc={};h(Rc,{CacheProvider:()=>Zp,ClassNames:()=>Lc,Global:()=>zm,ThemeContext:()=>ui,ThemeProvider:()=>ks,__unsafe_useEmotionCache:()=>Pm,createElement:()=>Ps,css:()=>Tm,jsx:()=>Ps,keyframes:()=>h0,useTheme:()=>Em,withEmotionCache:()=>Fl,withTheme:()=>Kp});function Tm(){for(var s=arguments.length,p=new Array(s),d=0;d{m0(),m0(),Gr=O(C()),Ac(),Xp(),Up(),Cc(),de(),Dl(),zc=O(Oe()),Ps=function(s,p){var d=arguments;if(p==null||!Qp.call(p,"css"))return Gr.createElement.apply(void 0,d);var w=d.length,_=new Array(w);_[0]=Mm,_[1]=p0(s,p);for(var E=2;E{function d(w){return w&&w.__esModule?w:{default:w}}p.exports=d,p.exports.__esModule=!0,p.exports.default=p.exports}),Ly=f(s=>{"use strict";Object.defineProperty(s,"__esModule",{value:!0}),s.default=p;function p(d){let w="https://mui.com/production-error/?code="+d;for(let _=1;_{"use strict";var p=ln();Object.defineProperty(s,"__esModule",{value:!0}),Object.defineProperty(s,"default",{enumerable:!0,get:function(){return d.default}});var d=p(Ly())}),Dm,ef,Nm=u(()=>{Bp(),Dm=/^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|abbr|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|disableRemotePlayback|download|draggable|encType|enterKeyHint|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|translate|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|incremental|fallback|inert|itemProp|itemScope|itemType|itemID|itemRef|on|option|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/,ef=r0(function(s){return Dm.test(s)||s.charCodeAt(0)===111&&s.charCodeAt(1)===110&&s.charCodeAt(2)<91})}),Iu,v0,Dc,Nc,y0,Fm,b0,Wm=u(()=>{de(),Iu=O(C()),Nm(),Yi(),Ac(),Up(),Xp(),v0=ef,Dc=function(s){return s!=="theme"},Nc=function(s){return typeof s=="string"&&s.charCodeAt(0)>96?v0:Dc},y0=function(s,p,d){var w;if(p){var _=p.shouldForwardProp;w=s.__emotion_forwardProp&&_?function(E){return s.__emotion_forwardProp(E)&&_(E)}:_}return typeof w!="function"&&d&&(w=s.__emotion_forwardProp),w},Fm=function(s){var p=s.cache,d=s.serialized,w=s.isStringTag;return xu(p,d,w),ju(function(){return Is(p,d,w)}),null},b0=function s(p,d){var w=p.__emotion_real===p,_=w&&p.__emotion_base||p,E,T;d!==void 0&&(E=d.label,T=d.target);var z=y0(p,d,w),V=z||Nc(_),H=!V("as");return function(){var G=arguments,ee=w&&p.__emotion_styles!==void 0?p.__emotion_styles.slice(0):[];if(E!==void 0&&ee.push("label:"+E+";"),G[0]==null||G[0].raw===void 0)ee.push.apply(ee,G);else{ee.push(G[0][0]);for(var ne=G.length,ie=1;ietf});var Dy,Hm,tf,Ny=u(()=>{Wm(),de(),Dy=O(C()),Nm(),Ac(),Up(),Xp(),Hm=["a","abbr","address","area","article","aside","audio","b","base","bdi","bdo","big","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","dialog","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","iframe","img","input","ins","kbd","keygen","label","legend","li","link","main","map","mark","marquee","menu","menuitem","meta","meter","nav","noscript","object","ol","optgroup","option","output","p","param","picture","pre","progress","q","rp","rt","ruby","s","samp","script","section","select","small","source","span","strong","style","sub","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","title","tr","track","u","ul","var","video","wbr","circle","clipPath","defs","ellipse","foreignObject","g","image","line","linearGradient","mask","path","pattern","polygon","polyline","radialGradient","rect","stop","svg","text","tspan"],tf=b0.bind(),Hm.forEach(function(s){tf[s]=tf(s)})}),w0=f((s,p)=>{"use strict";var d="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED";p.exports=d}),rf=f((s,p)=>{"use strict";var d=w0();function w(){}function _(){}_.resetWarningCache=w,p.exports=function(){function E(V,H,G,ee,ne,ie){if(ie!==d){var oe=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw oe.name="Invariant Violation",oe}}E.isRequired=E;function T(){return E}var z={array:E,bigint:E,bool:E,func:E,number:E,object:E,string:E,symbol:E,any:E,arrayOf:T,element:E,elementType:E,instanceOf:T,node:E,objectOf:T,oneOf:T,oneOfType:T,shape:T,exact:T,checkPropTypes:_,resetWarningCache:w};return z.PropTypes=z,z}}),xa=f((s,p)=>{p.exports=rf()();var d,w}),Vm=f(s=>{"use strict";I();var p=C(),d=60103;s.Fragment=60107,typeof Symbol=="function"&&Symbol.for&&(w=Symbol.for,d=w("react.element"),s.Fragment=w("react.fragment"));var w,_=p.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,E=Object.prototype.hasOwnProperty,T={key:!0,ref:!0,__self:!0,__source:!0};function z(V,H,G){var ee,ne={},ie=null,oe=null;G!==void 0&&(ie=""+G),H.key!==void 0&&(ie=""+H.key),H.ref!==void 0&&(oe=H.ref);for(ee in H)E.call(H,ee)&&!T.hasOwnProperty(ee)&&(ne[ee]=H[ee]);if(V&&V.defaultProps)for(ee in H=V.defaultProps,H)ne[ee]===void 0&&(ne[ee]=H[ee]);return{$$typeof:d,type:V,key:ie,ref:oe,props:ne,_owner:_.current}}s.jsx=z,s.jsxs=z}),Xr=f((s,p)=>{"use strict";p.exports=Vm()}),qm=f(s=>{"use strict";"use client";var p=ln();Object.defineProperty(s,"__esModule",{value:!0}),s.default=G;var d=V(C()),w=p(xa()),_=(Yi(),S(Rc)),E=p((Cc(),S(Ss))),T=Xr();function z(ee){if(typeof WeakMap!="function")return null;var ne=new WeakMap,ie=new WeakMap;return(z=function(oe){return oe?ie:ne})(ee)}function V(ee,ne){if(!ne&&ee&&ee.__esModule)return ee;if(ee===null||typeof ee!="object"&&typeof ee!="function")return{default:ee};var ie=z(ne);if(ie&&ie.has(ee))return ie.get(ee);var oe={__proto__:null},ce=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var me in ee)if(me!=="default"&&Object.prototype.hasOwnProperty.call(ee,me)){var le=ce?Object.getOwnPropertyDescriptor(ee,me):null;le&&(le.get||le.set)?Object.defineProperty(oe,me,le):oe[me]=ee[me]}return oe.default=ee,ie&&ie.set(ee,oe),oe}var H;typeof document=="object"&&(H=(0,E.default)({key:"css",prepend:!0}));function G(ee){let{injectFirst:ne,children:ie}=ee;return ne&&H?(0,T.jsx)(_.CacheProvider,{value:H,children:ie}):ie}}),O0=f(s=>{"use strict";"use client";var p=ln();Object.defineProperty(s,"__esModule",{value:!0}),Object.defineProperty(s,"default",{enumerable:!0,get:function(){return d.default}});var d=p(qm())}),Um=f(s=>{"use strict";"use client";var p=ln();Object.defineProperty(s,"__esModule",{value:!0}),s.default=H;var d=z(C()),w=p(xa()),_=(Yi(),S(Rc)),E=Xr();function T(G){if(typeof WeakMap!="function")return null;var ee=new WeakMap,ne=new WeakMap;return(T=function(ie){return ie?ne:ee})(G)}function z(G,ee){if(!ee&&G&&G.__esModule)return G;if(G===null||typeof G!="object"&&typeof G!="function")return{default:G};var ne=T(ee);if(ne&&ne.has(G))return ne.get(G);var ie={__proto__:null},oe=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var ce in G)if(ce!=="default"&&Object.prototype.hasOwnProperty.call(G,ce)){var me=oe?Object.getOwnPropertyDescriptor(G,ce):null;me&&(me.get||me.set)?Object.defineProperty(ie,ce,me):ie[ce]=G[ce]}return ie.default=G,ne&&ne.set(G,ie),ie}function V(G){return G==null||Object.keys(G).length===0}function H(G){let{styles:ee,defaultTheme:ne={}}=G,ie=typeof ee=="function"?oe=>ee(V(oe)?ne:oe):ee;return(0,E.jsx)(_.Global,{styles:ie})}}),Fy=f(s=>{"use strict";"use client";var p=ln();Object.defineProperty(s,"__esModule",{value:!0}),Object.defineProperty(s,"default",{enumerable:!0,get:function(){return d.default}});var d=p(Um())}),Bl=f(s=>{"use strict";"use client";var p=ln();Object.defineProperty(s,"__esModule",{value:!0}),Object.defineProperty(s,"GlobalStyles",{enumerable:!0,get:function(){return E.default}}),Object.defineProperty(s,"StyledEngineProvider",{enumerable:!0,get:function(){return _.default}}),Object.defineProperty(s,"ThemeContext",{enumerable:!0,get:function(){return w.ThemeContext}}),Object.defineProperty(s,"css",{enumerable:!0,get:function(){return w.css}}),s.default=T,s.internal_processStyles=void 0,Object.defineProperty(s,"keyframes",{enumerable:!0,get:function(){return w.keyframes}});var d=p((Ny(),S(Bm))),w=(Yi(),S(Rc)),_=p(O0()),E=p(Fy());function T(V,H){return(0,d.default)(V,H)}var z=(V,H)=>{Array.isArray(V.__emotion_styles)&&(V.__emotion_styles=H(V.__emotion_styles))};s.internal_processStyles=z}),ku=f((s,p)=>{function d(){return p.exports=d=Object.assign?Object.assign.bind():function(w){for(var _=1;_{"use strict";var p=ln();Object.defineProperty(s,"__esModule",{value:!0}),s.default=E,s.isPlainObject=w;var d=p(ku());function w(T){if(typeof T!="object"||T===null)return!1;let z=Object.getPrototypeOf(T);return(z===null||z===Object.prototype||Object.getPrototypeOf(z)===null)&&!(Symbol.toStringTag in T)&&!(Symbol.iterator in T)}function _(T){if(!w(T))return T;let z={};return Object.keys(T).forEach(V=>{z[V]=_(T[V])}),z}function E(T,z,V={clone:!0}){let H=V.clone?(0,d.default)({},T):T;return w(T)&&w(z)&&Object.keys(z).forEach(G=>{G!=="__proto__"&&(w(z[G])&&G in T&&w(T[G])?H[G]=E(T[G],z[G],V):V.clone?H[G]=w(z[G])?_(z[G]):z[G]:H[G]=z[G])}),H}}),xi=f(s=>{"use strict";Object.defineProperty(s,"__esModule",{value:!0});var p={};Object.defineProperty(s,"default",{enumerable:!0,get:function(){return d.default}});var d=_($m());Object.keys(d).forEach(function(E){E==="default"||E==="__esModule"||Object.prototype.hasOwnProperty.call(p,E)||E in s&&s[E]===d[E]||Object.defineProperty(s,E,{enumerable:!0,get:function(){return d[E]}})});function w(E){if(typeof WeakMap!="function")return null;var T=new WeakMap,z=new WeakMap;return(w=function(V){return V?z:T})(E)}function _(E,T){if(!T&&E&&E.__esModule)return E;if(E===null||typeof E!="object"&&typeof E!="function")return{default:E};var z=w(T);if(z&&z.has(E))return z.get(E);var V={__proto__:null},H=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var G in E)if(G!=="default"&&Object.prototype.hasOwnProperty.call(E,G)){var ee=H?Object.getOwnPropertyDescriptor(E,G):null;ee&&(ee.get||ee.set)?Object.defineProperty(V,G,ee):V[G]=E[G]}return V.default=E,z&&z.set(E,V),V}}),Jm=f(s=>{"use strict";var p=ln();Object.defineProperty(s,"__esModule",{value:!0}),s.default=w;var d=p(Qi());function w(_){if(typeof _!="string")throw new Error((0,d.default)(7));return _.charAt(0).toUpperCase()+_.slice(1)}}),sn=f(s=>{"use strict";var p=ln();Object.defineProperty(s,"__esModule",{value:!0}),Object.defineProperty(s,"default",{enumerable:!0,get:function(){return d.default}});var d=p(Jm())}),Wy=f(s=>{"use strict";Object.defineProperty(s,"__esModule",{value:!0}),s.default=T,s.getFunctionName=w;var p=Ue(),d=/^\s*function(?:\s|\s*\/\*.*\*\/\s*)+([^(\s/]*)\s*/;function w(z){let V=`${z}`.match(d);return V&&V[1]||""}function _(z,V=""){return z.displayName||z.name||w(z)||V}function E(z,V,H){let G=_(V);return z.displayName||(G!==""?`${H}(${G})`:H)}function T(z){if(z!=null){if(typeof z=="string")return z;if(typeof z=="function")return _(z,"Component");if(typeof z=="object")switch(z.$$typeof){case p.ForwardRef:return E(z,z.render,"ForwardRef");case p.Memo:return E(z,z.type,"memo");default:return}}}}),By=f(s=>{"use strict";Object.defineProperty(s,"__esModule",{value:!0});var p={};Object.defineProperty(s,"default",{enumerable:!0,get:function(){return d.default}});var d=_(Wy());Object.keys(d).forEach(function(E){E==="default"||E==="__esModule"||Object.prototype.hasOwnProperty.call(p,E)||E in s&&s[E]===d[E]||Object.defineProperty(s,E,{enumerable:!0,get:function(){return d[E]}})});function w(E){if(typeof WeakMap!="function")return null;var T=new WeakMap,z=new WeakMap;return(w=function(V){return V?z:T})(E)}function _(E,T){if(!T&&E&&E.__esModule)return E;if(E===null||typeof E!="object"&&typeof E!="function")return{default:E};var z=w(T);if(z&&z.has(E))return z.get(E);var V={__proto__:null},H=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var G in E)if(G!=="default"&&Object.prototype.hasOwnProperty.call(E,G)){var ee=H?Object.getOwnPropertyDescriptor(E,G):null;ee&&(ee.get||ee.set)?Object.defineProperty(V,G,ee):V[G]=E[G]}return V.default=E,z&&z.set(E,V),V}}),Gm=f(s=>{"use strict";Object.defineProperty(s,"__esModule",{value:!0}),s.default=void 0;function p(w,_=Number.MIN_SAFE_INTEGER,E=Number.MAX_SAFE_INTEGER){return Math.max(_,Math.min(w,E))}var d=s.default=p}),Hy=f(s=>{"use strict";var p=ln();Object.defineProperty(s,"__esModule",{value:!0}),Object.defineProperty(s,"default",{enumerable:!0,get:function(){return d.default}});var d=p(Gm())}),Fc=f(s=>{"use strict";var p=ln();Object.defineProperty(s,"__esModule",{value:!0}),s.default=void 0;var d=p(xi());function w(E,T){return T?(0,d.default)(E,T,{clone:!1}):E}var _=s.default=w}),Wc=f(s=>{"use strict";var p=ln();Object.defineProperty(s,"__esModule",{value:!0}),s.default=void 0;var d=p(xa()),w={},_=s.default=w}),$a=f(s=>{"use strict";var p=ln();Object.defineProperty(s,"__esModule",{value:!0}),s.computeBreakpointsBase=ie,s.createEmptyBreakpointObject=G,s.default=void 0,s.handleBreakpoints=V,s.mergeBreakpointsInOrder=ne,s.removeUnusedBreakpoints=ee,s.resolveBreakpointValues=oe,s.values=void 0;var d=p(ku()),w=p(xa()),_=p(xi()),E=p(Fc()),T=s.values={xs:0,sm:600,md:900,lg:1200,xl:1536},z={keys:["xs","sm","md","lg","xl"],up:me=>`@media (min-width:${T[me]}px)`};function V(me,le,Te){let De=me.theme||{};if(Array.isArray(le)){let Ie=De.breakpoints||z;return le.reduce((Pe,we,Ae)=>(Pe[Ie.up(Ie.keys[Ae])]=Te(le[Ae]),Pe),{})}if(typeof le=="object"){let Ie=De.breakpoints||z;return Object.keys(le).reduce((Pe,we)=>{if(Object.keys(Ie.values||T).indexOf(we)!==-1){let Ae=Ie.up(we);Pe[Ae]=Te(le[we],we)}else{let Ae=we;Pe[Ae]=le[Ae]}return Pe},{})}return Te(le)}function H(me){let le=Te=>{let De=Te.theme||{},Ie=me(Te),Pe=De.breakpoints||z,we=Pe.keys.reduce((Ae,ue)=>(Te[ue]&&(Ae=Ae||{},Ae[Pe.up(ue)]=me((0,d.default)({theme:De},Te[ue]))),Ae),null);return(0,E.default)(Ie,we)};return le.propTypes={},le.filterProps=["xs","sm","md","lg","xl",...me.filterProps],le}function G(me={}){var le;return((le=me.keys)==null?void 0:le.reduce((Te,De)=>{let Ie=me.up(De);return Te[Ie]={},Te},{}))||{}}function ee(me,le){return me.reduce((Te,De)=>{let Ie=Te[De];return(!Ie||Object.keys(Ie).length===0)&&delete Te[De],Te},le)}function ne(me,...le){let Te=G(me),De=[Te,...le].reduce((Ie,Pe)=>(0,_.default)(Ie,Pe),{});return ee(Object.keys(Te),De)}function ie(me,le){if(typeof me!="object")return{};let Te={},De=Object.keys(le);return Array.isArray(me)?De.forEach((Ie,Pe)=>{Pe{me[Ie]!=null&&(Te[Ie]=!0)}),Te}function oe({values:me,breakpoints:le,base:Te}){let De=Te||ie(me,le),Ie=Object.keys(De);if(Ie.length===0)return me;let Pe;return Ie.reduce((we,Ae,ue)=>(Array.isArray(me)?(we[Ae]=me[ue]!=null?me[ue]:me[Pe],Pe=ue):typeof me=="object"?(we[Ae]=me[Ae]!=null?me[Ae]:me[Pe],Pe=Ae):we[Ae]=me,we),{})}var ce=s.default=H}),Pu=f(s=>{"use strict";var p=ln();Object.defineProperty(s,"__esModule",{value:!0}),s.default=void 0,s.getPath=E,s.getStyleValue=T;var d=p(sn()),w=p(Wc()),_=$a();function E(H,G,ee=!0){if(!G||typeof G!="string")return null;if(H&&H.vars&&ee){let ne=`vars.${G}`.split(".").reduce((ie,oe)=>ie&&ie[oe]?ie[oe]:null,H);if(ne!=null)return ne}return G.split(".").reduce((ne,ie)=>ne&&ne[ie]!=null?ne[ie]:null,H)}function T(H,G,ee,ne=ee){let ie;return typeof H=="function"?ie=H(ee):Array.isArray(H)?ie=H[ee]||ne:ie=E(H,ee)||ne,G&&(ie=G(ie,ne,H)),ie}function z(H){let{prop:G,cssProperty:ee=H.prop,themeKey:ne,transform:ie}=H,oe=ce=>{if(ce[G]==null)return null;let me=ce[G],le=ce.theme,Te=E(le,ne)||{},De=Ie=>{let Pe=T(Te,ie,Ie);return Ie===Pe&&typeof Ie=="string"&&(Pe=T(Te,ie,`${G}${Ie==="default"?"":(0,d.default)(Ie)}`,Ie)),ee===!1?Pe:{[ee]:Pe}};return(0,_.handleBreakpoints)(ce,me,De)};return oe.propTypes={},oe.filterProps=[G],oe}var V=s.default=z}),Vy=f(s=>{"use strict";Object.defineProperty(s,"__esModule",{value:!0}),s.default=p;function p(d){let w={};return _=>(w[_]===void 0&&(w[_]=d(_)),w[_])}}),Eu=f(s=>{"use strict";var p=ln();Object.defineProperty(s,"__esModule",{value:!0}),s.createUnarySpacing=ce,s.createUnaryUnit=oe,s.default=void 0,s.getStyleFromPropValue=le,s.getValue=me,s.margin=Ie,s.marginKeys=void 0,s.padding=Pe,s.paddingKeys=void 0;var d=p(Wc()),w=$a(),_=Pu(),E=p(Fc()),T=p(Vy()),z={m:"margin",p:"padding"},V={t:"Top",r:"Right",b:"Bottom",l:"Left",x:["Left","Right"],y:["Top","Bottom"]},H={marginX:"mx",marginY:"my",paddingX:"px",paddingY:"py"},G=(0,T.default)(ue=>{if(ue.length>2)if(H[ue])ue=H[ue];else return[ue];let[je,ze]=ue.split(""),Fe=z[je],Je=V[ze]||"";return Array.isArray(Je)?Je.map(tt=>Fe+tt):[Fe+Je]}),ee=s.marginKeys=["m","mt","mr","mb","ml","mx","my","margin","marginTop","marginRight","marginBottom","marginLeft","marginX","marginY","marginInline","marginInlineStart","marginInlineEnd","marginBlock","marginBlockStart","marginBlockEnd"],ne=s.paddingKeys=["p","pt","pr","pb","pl","px","py","padding","paddingTop","paddingRight","paddingBottom","paddingLeft","paddingX","paddingY","paddingInline","paddingInlineStart","paddingInlineEnd","paddingBlock","paddingBlockStart","paddingBlockEnd"],ie=[...ee,...ne];function oe(ue,je,ze,Fe){var Je;let tt=(Je=(0,_.getPath)(ue,je,!1))!=null?Je:ze;return typeof tt=="number"?gt=>typeof gt=="string"?gt:tt*gt:Array.isArray(tt)?gt=>typeof gt=="string"?gt:tt[gt]:typeof tt=="function"?tt:()=>{}}function ce(ue){return oe(ue,"spacing",8,"spacing")}function me(ue,je){if(typeof je=="string"||je==null)return je;let ze=Math.abs(je),Fe=ue(ze);return je>=0?Fe:typeof Fe=="number"?-Fe:`-${Fe}`}function le(ue,je){return ze=>ue.reduce((Fe,Je)=>(Fe[Je]=me(je,ze),Fe),{})}function Te(ue,je,ze,Fe){if(je.indexOf(ze)===-1)return null;let Je=G(ze),tt=le(Je,Fe),gt=ue[ze];return(0,w.handleBreakpoints)(ue,gt,tt)}function De(ue,je){let ze=ce(ue.theme);return Object.keys(ue).map(Fe=>Te(ue,je,Fe,ze)).reduce(E.default,{})}function Ie(ue){return De(ue,ee)}Ie.propTypes={},Ie.filterProps=ee;function Pe(ue){return De(ue,ne)}Pe.propTypes={},Pe.filterProps=ne;function we(ue){return De(ue,ie)}we.propTypes={},we.filterProps=ie;var Ae=s.default=we}),Hl=f(s=>{"use strict";var p=ln();Object.defineProperty(s,"__esModule",{value:!0}),s.default=void 0;var d=p(Fc());function w(...E){let T=E.reduce((V,H)=>(H.filterProps.forEach(G=>{V[G]=H}),V),{}),z=V=>Object.keys(V).reduce((H,G)=>T[G]?(0,d.default)(H,T[G](V)):H,{});return z.propTypes={},z.filterProps=E.reduce((V,H)=>V.concat(H.filterProps),[]),z}var _=s.default=w}),Bc=f(s=>{"use strict";var p=ln();Object.defineProperty(s,"__esModule",{value:!0}),s.borderTopColor=s.borderTop=s.borderRightColor=s.borderRight=s.borderRadius=s.borderLeftColor=s.borderLeft=s.borderColor=s.borderBottomColor=s.borderBottom=s.border=void 0,s.borderTransform=z,s.outlineColor=s.outline=s.default=void 0;var d=p(Wc()),w=p(Pu()),_=p(Hl()),E=Eu(),T=$a();function z(ue){return typeof ue!="number"?ue:`${ue}px solid`}function V(ue,je){return(0,w.default)({prop:ue,themeKey:"borders",transform:je})}var H=s.border=V("border",z),G=s.borderTop=V("borderTop",z),ee=s.borderRight=V("borderRight",z),ne=s.borderBottom=V("borderBottom",z),ie=s.borderLeft=V("borderLeft",z),oe=s.borderColor=V("borderColor"),ce=s.borderTopColor=V("borderTopColor"),me=s.borderRightColor=V("borderRightColor"),le=s.borderBottomColor=V("borderBottomColor"),Te=s.borderLeftColor=V("borderLeftColor"),De=s.outline=V("outline",z),Ie=s.outlineColor=V("outlineColor"),Pe=ue=>{if(ue.borderRadius!==void 0&&ue.borderRadius!==null){let je=(0,E.createUnaryUnit)(ue.theme,"shape.borderRadius",4,"borderRadius"),ze=Fe=>({borderRadius:(0,E.getValue)(je,Fe)});return(0,T.handleBreakpoints)(ue,ue.borderRadius,ze)}return null};s.borderRadius=Pe,Pe.propTypes={},Pe.filterProps=["borderRadius"];var we=(0,_.default)(H,G,ee,ne,ie,oe,ce,me,le,Te,Pe,De,Ie),Ae=s.default=we}),nf=f(s=>{"use strict";var p=ln();Object.defineProperty(s,"__esModule",{value:!0}),s.rowGap=s.gridTemplateRows=s.gridTemplateColumns=s.gridTemplateAreas=s.gridRow=s.gridColumn=s.gridAutoRows=s.gridAutoFlow=s.gridAutoColumns=s.gridArea=s.gap=s.default=s.columnGap=void 0;var d=p(Pu()),w=p(Hl()),_=Eu(),E=$a(),T=p(Wc()),z=Pe=>{if(Pe.gap!==void 0&&Pe.gap!==null){let we=(0,_.createUnaryUnit)(Pe.theme,"spacing",8,"gap"),Ae=ue=>({gap:(0,_.getValue)(we,ue)});return(0,E.handleBreakpoints)(Pe,Pe.gap,Ae)}return null};s.gap=z,z.propTypes={},z.filterProps=["gap"];var V=Pe=>{if(Pe.columnGap!==void 0&&Pe.columnGap!==null){let we=(0,_.createUnaryUnit)(Pe.theme,"spacing",8,"columnGap"),Ae=ue=>({columnGap:(0,_.getValue)(we,ue)});return(0,E.handleBreakpoints)(Pe,Pe.columnGap,Ae)}return null};s.columnGap=V,V.propTypes={},V.filterProps=["columnGap"];var H=Pe=>{if(Pe.rowGap!==void 0&&Pe.rowGap!==null){let we=(0,_.createUnaryUnit)(Pe.theme,"spacing",8,"rowGap"),Ae=ue=>({rowGap:(0,_.getValue)(we,ue)});return(0,E.handleBreakpoints)(Pe,Pe.rowGap,Ae)}return null};s.rowGap=H,H.propTypes={},H.filterProps=["rowGap"];var G=s.gridColumn=(0,d.default)({prop:"gridColumn"}),ee=s.gridRow=(0,d.default)({prop:"gridRow"}),ne=s.gridAutoFlow=(0,d.default)({prop:"gridAutoFlow"}),ie=s.gridAutoColumns=(0,d.default)({prop:"gridAutoColumns"}),oe=s.gridAutoRows=(0,d.default)({prop:"gridAutoRows"}),ce=s.gridTemplateColumns=(0,d.default)({prop:"gridTemplateColumns"}),me=s.gridTemplateRows=(0,d.default)({prop:"gridTemplateRows"}),le=s.gridTemplateAreas=(0,d.default)({prop:"gridTemplateAreas"}),Te=s.gridArea=(0,d.default)({prop:"gridArea"}),De=(0,w.default)(z,V,H,G,ee,ne,ie,oe,ce,me,le,Te),Ie=s.default=De}),Xm=f(s=>{"use strict";var p=ln();Object.defineProperty(s,"__esModule",{value:!0}),s.default=s.color=s.bgcolor=s.backgroundColor=void 0,s.paletteTransform=_;var d=p(Pu()),w=p(Hl());function _(G,ee){return ee==="grey"?ee:G}var E=s.color=(0,d.default)({prop:"color",themeKey:"palette",transform:_}),T=s.bgcolor=(0,d.default)({prop:"bgcolor",cssProperty:"backgroundColor",themeKey:"palette",transform:_}),z=s.backgroundColor=(0,d.default)({prop:"backgroundColor",themeKey:"palette",transform:_}),V=(0,w.default)(E,T,z),H=s.default=V}),Hc=f(s=>{"use strict";var p=ln();Object.defineProperty(s,"__esModule",{value:!0}),s.sizeWidth=s.sizeHeight=s.minWidth=s.minHeight=s.maxWidth=s.maxHeight=s.height=s.default=s.boxSizing=void 0,s.sizingTransform=E,s.width=void 0;var d=p(Pu()),w=p(Hl()),_=$a();function E(le){return le<=1&&le!==0?`${le*100}%`:le}var T=s.width=(0,d.default)({prop:"width",transform:E}),z=le=>{if(le.maxWidth!==void 0&&le.maxWidth!==null){let Te=De=>{var Ie,Pe;let we=((Ie=le.theme)==null||(Ie=Ie.breakpoints)==null||(Ie=Ie.values)==null?void 0:Ie[De])||_.values[De];return we?((Pe=le.theme)==null||(Pe=Pe.breakpoints)==null?void 0:Pe.unit)!=="px"?{maxWidth:`${we}${le.theme.breakpoints.unit}`}:{maxWidth:we}:{maxWidth:E(De)}};return(0,_.handleBreakpoints)(le,le.maxWidth,Te)}return null};s.maxWidth=z,z.filterProps=["maxWidth"];var V=s.minWidth=(0,d.default)({prop:"minWidth",transform:E}),H=s.height=(0,d.default)({prop:"height",transform:E}),G=s.maxHeight=(0,d.default)({prop:"maxHeight",transform:E}),ee=s.minHeight=(0,d.default)({prop:"minHeight",transform:E}),ne=s.sizeWidth=(0,d.default)({prop:"size",cssProperty:"width",transform:E}),ie=s.sizeHeight=(0,d.default)({prop:"size",cssProperty:"height",transform:E}),oe=s.boxSizing=(0,d.default)({prop:"boxSizing"}),ce=(0,w.default)(T,z,V,H,G,ee,oe),me=s.default=ce}),of=f(s=>{"use strict";Object.defineProperty(s,"__esModule",{value:!0}),s.default=void 0;var p=Eu(),d=Bc(),w=nf(),_=Xm(),E=Hc(),T={border:{themeKey:"borders",transform:d.borderTransform},borderTop:{themeKey:"borders",transform:d.borderTransform},borderRight:{themeKey:"borders",transform:d.borderTransform},borderBottom:{themeKey:"borders",transform:d.borderTransform},borderLeft:{themeKey:"borders",transform:d.borderTransform},borderColor:{themeKey:"palette"},borderTopColor:{themeKey:"palette"},borderRightColor:{themeKey:"palette"},borderBottomColor:{themeKey:"palette"},borderLeftColor:{themeKey:"palette"},outline:{themeKey:"borders",transform:d.borderTransform},outlineColor:{themeKey:"palette"},borderRadius:{themeKey:"shape.borderRadius",style:d.borderRadius},color:{themeKey:"palette",transform:_.paletteTransform},bgcolor:{themeKey:"palette",cssProperty:"backgroundColor",transform:_.paletteTransform},backgroundColor:{themeKey:"palette",transform:_.paletteTransform},p:{style:p.padding},pt:{style:p.padding},pr:{style:p.padding},pb:{style:p.padding},pl:{style:p.padding},px:{style:p.padding},py:{style:p.padding},padding:{style:p.padding},paddingTop:{style:p.padding},paddingRight:{style:p.padding},paddingBottom:{style:p.padding},paddingLeft:{style:p.padding},paddingX:{style:p.padding},paddingY:{style:p.padding},paddingInline:{style:p.padding},paddingInlineStart:{style:p.padding},paddingInlineEnd:{style:p.padding},paddingBlock:{style:p.padding},paddingBlockStart:{style:p.padding},paddingBlockEnd:{style:p.padding},m:{style:p.margin},mt:{style:p.margin},mr:{style:p.margin},mb:{style:p.margin},ml:{style:p.margin},mx:{style:p.margin},my:{style:p.margin},margin:{style:p.margin},marginTop:{style:p.margin},marginRight:{style:p.margin},marginBottom:{style:p.margin},marginLeft:{style:p.margin},marginX:{style:p.margin},marginY:{style:p.margin},marginInline:{style:p.margin},marginInlineStart:{style:p.margin},marginInlineEnd:{style:p.margin},marginBlock:{style:p.margin},marginBlockStart:{style:p.margin},marginBlockEnd:{style:p.margin},displayPrint:{cssProperty:!1,transform:V=>({"@media print":{display:V}})},display:{},overflow:{},textOverflow:{},visibility:{},whiteSpace:{},flexBasis:{},flexDirection:{},flexWrap:{},justifyContent:{},alignItems:{},alignContent:{},order:{},flex:{},flexGrow:{},flexShrink:{},alignSelf:{},justifyItems:{},justifySelf:{},gap:{style:w.gap},rowGap:{style:w.rowGap},columnGap:{style:w.columnGap},gridColumn:{},gridRow:{},gridAutoFlow:{},gridAutoColumns:{},gridAutoRows:{},gridTemplateColumns:{},gridTemplateRows:{},gridTemplateAreas:{},gridArea:{},position:{},zIndex:{themeKey:"zIndex"},top:{},right:{},bottom:{},left:{},boxShadow:{themeKey:"shadows"},width:{transform:E.sizingTransform},maxWidth:{style:E.maxWidth},minWidth:{transform:E.sizingTransform},height:{transform:E.sizingTransform},maxHeight:{transform:E.sizingTransform},minHeight:{transform:E.sizingTransform},boxSizing:{},fontFamily:{themeKey:"typography"},fontSize:{themeKey:"typography"},fontStyle:{themeKey:"typography"},fontWeight:{themeKey:"typography"},letterSpacing:{},textTransform:{},lineHeight:{},textAlign:{},typography:{cssProperty:!1,themeKey:"typography"}},z=s.default=T}),Vc=f(s=>{"use strict";var p=ln();Object.defineProperty(s,"__esModule",{value:!0}),s.default=void 0,s.unstable_createStyleFunctionSx=H;var d=p(sn()),w=p(Fc()),_=Pu(),E=$a(),T=p(of());function z(...ne){let ie=ne.reduce((ce,me)=>ce.concat(Object.keys(me)),[]),oe=new Set(ie);return ne.every(ce=>oe.size===Object.keys(ce).length)}function V(ne,ie){return typeof ne=="function"?ne(ie):ne}function H(){function ne(oe,ce,me,le){let Te={[oe]:ce,theme:me},De=le[oe];if(!De)return{[oe]:ce};let{cssProperty:Ie=oe,themeKey:Pe,transform:we,style:Ae}=De;if(ce==null)return null;if(Pe==="typography"&&ce==="inherit")return{[oe]:ce};let ue=(0,_.getPath)(me,Pe)||{};if(Ae)return Ae(Te);let je=ze=>{let Fe=(0,_.getStyleValue)(ue,we,ze);return ze===Fe&&typeof ze=="string"&&(Fe=(0,_.getStyleValue)(ue,we,`${oe}${ze==="default"?"":(0,d.default)(ze)}`,ze)),Ie===!1?Fe:{[Ie]:Fe}};return(0,E.handleBreakpoints)(Te,ce,je)}function ie(oe){var ce;let{sx:me,theme:le={}}=oe||{};if(!me)return null;let Te=(ce=le.unstable_sxConfig)!=null?ce:T.default;function De(Ie){let Pe=Ie;if(typeof Ie=="function")Pe=Ie(le);else if(typeof Ie!="object")return Ie;if(!Pe)return null;let we=(0,E.createEmptyBreakpointObject)(le.breakpoints),Ae=Object.keys(we),ue=we;return Object.keys(Pe).forEach(je=>{let ze=V(Pe[je],le);if(ze!=null)if(typeof ze=="object")if(Te[je])ue=(0,w.default)(ue,ne(je,ze,le,Te));else{let Fe=(0,E.handleBreakpoints)({theme:le},ze,Je=>({[je]:Je}));z(Fe,ze)?ue[je]=ie({sx:ze,theme:le}):ue=(0,w.default)(ue,Fe)}else ue=(0,w.default)(ue,ne(je,ze,le,Te))}),(0,E.removeUnusedBreakpoints)(Ae,ue)}return Array.isArray(me)?me.map(De):De(me)}return ie}var G=H();G.filterProps=["sx"];var ee=s.default=G}),Cu=f((s,p)=>{function d(w,_){if(w==null)return{};var E={},T=Object.keys(w),z,V;for(V=0;V=0)&&(E[z]=w[z]);return E}p.exports=d,p.exports.__esModule=!0,p.exports.default=p.exports}),x0=f(s=>{"use strict";var p=ln();Object.defineProperty(s,"__esModule",{value:!0}),s.default=V;var d=p(ku()),w=p(Cu()),_=xi(),E=p(of()),T=["sx"],z=H=>{var G,ee;let ne={systemProps:{},otherProps:{}},ie=(G=H==null||(ee=H.theme)==null?void 0:ee.unstable_sxConfig)!=null?G:E.default;return Object.keys(H).forEach(oe=>{ie[oe]?ne.systemProps[oe]=H[oe]:ne.otherProps[oe]=H[oe]}),ne};function V(H){let{sx:G}=H,ee=(0,w.default)(H,T),{systemProps:ne,otherProps:ie}=z(ee),oe;return Array.isArray(G)?oe=[ne,...G]:typeof G=="function"?oe=(...ce)=>{let me=G(...ce);return(0,_.isPlainObject)(me)?(0,d.default)({},ne,me):ne}:oe=(0,d.default)({},ne,G),(0,d.default)({},ie,{sx:oe})}}),_0=f(s=>{"use strict";var p=ln();Object.defineProperty(s,"__esModule",{value:!0}),Object.defineProperty(s,"default",{enumerable:!0,get:function(){return d.default}}),Object.defineProperty(s,"extendSxProp",{enumerable:!0,get:function(){return w.default}}),Object.defineProperty(s,"unstable_createStyleFunctionSx",{enumerable:!0,get:function(){return d.unstable_createStyleFunctionSx}}),Object.defineProperty(s,"unstable_defaultSxConfig",{enumerable:!0,get:function(){return _.default}});var d=T(Vc()),w=p(x0()),_=p(of());function E(z){if(typeof WeakMap!="function")return null;var V=new WeakMap,H=new WeakMap;return(E=function(G){return G?H:V})(z)}function T(z,V){if(!V&&z&&z.__esModule)return z;if(z===null||typeof z!="object"&&typeof z!="function")return{default:z};var H=E(V);if(H&&H.has(z))return H.get(z);var G={__proto__:null},ee=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var ne in z)if(ne!=="default"&&Object.prototype.hasOwnProperty.call(z,ne)){var ie=ee?Object.getOwnPropertyDescriptor(z,ne):null;ie&&(ie.get||ie.set)?Object.defineProperty(G,ne,ie):G[ne]=z[ne]}return G.default=z,H&&H.set(z,G),G}}),Km=f(s=>{"use strict";var p=ln();Object.defineProperty(s,"__esModule",{value:!0}),s.breakpointKeys=void 0,s.default=z;var d=p(Cu()),w=p(ku()),_=["values","unit","step"],E=s.breakpointKeys=["xs","sm","md","lg","xl"],T=V=>{let H=Object.keys(V).map(G=>({key:G,val:V[G]}))||[];return H.sort((G,ee)=>G.val-ee.val),H.reduce((G,ee)=>(0,w.default)({},G,{[ee.key]:ee.val}),{})};function z(V){let{values:H={xs:0,sm:600,md:900,lg:1200,xl:1536},unit:G="px",step:ee=5}=V,ne=(0,d.default)(V,_),ie=T(H),oe=Object.keys(ie);function ce(Ie){return`@media (min-width:${typeof H[Ie]=="number"?H[Ie]:Ie}${G})`}function me(Ie){return`@media (max-width:${(typeof H[Ie]=="number"?H[Ie]:Ie)-ee/100}${G})`}function le(Ie,Pe){let we=oe.indexOf(Pe);return`@media (min-width:${typeof H[Ie]=="number"?H[Ie]:Ie}${G}) and (max-width:${(we!==-1&&typeof H[oe[we]]=="number"?H[oe[we]]:Pe)-ee/100}${G})`}function Te(Ie){return oe.indexOf(Ie)+1{"use strict";Object.defineProperty(s,"__esModule",{value:!0}),s.default=void 0;var p={borderRadius:4},d=s.default=p}),S0=f(s=>{"use strict";Object.defineProperty(s,"__esModule",{value:!0}),s.default=d;var p=Eu();function d(w=8){if(w.mui)return w;let _=(0,p.createUnarySpacing)({spacing:w}),E=(...T)=>(T.length===0?[1]:T).map(z=>{let V=_(z);return typeof V=="number"?`${V}px`:V}).join(" ");return E.mui=!0,E}}),qc=f(s=>{"use strict";Object.defineProperty(s,"__esModule",{value:!0}),s.default=p;function p(d,w){let _=this;return _.vars&&typeof _.getColorSchemeSelector=="function"?{[_.getColorSchemeSelector(d).replace(/(\[[^\]]+\])/,"*:where($1)")]:w}:_.palette.mode===d?w:{}}}),j0=f(s=>{"use strict";var p=ln();Object.defineProperty(s,"__esModule",{value:!0}),s.default=void 0;var d=p(ku()),w=p(Cu()),_=p(xi()),E=p(Km()),T=p(qy()),z=p(S0()),V=p(Vc()),H=p(of()),G=p(qc()),ee=["breakpoints","palette","spacing","shape"];function ne(oe={},...ce){let{breakpoints:me={},palette:le={},spacing:Te,shape:De={}}=oe,Ie=(0,w.default)(oe,ee),Pe=(0,E.default)(me),we=(0,z.default)(Te),Ae=(0,_.default)({breakpoints:Pe,direction:"ltr",components:{},palette:(0,d.default)({mode:"light"},le),spacing:we,shape:(0,d.default)({},T.default,De)},Ie);return Ae.applyStyles=G.default,Ae=ce.reduce((ue,je)=>(0,_.default)(ue,je),Ae),Ae.unstable_sxConfig=(0,d.default)({},H.default,Ie?.unstable_sxConfig),Ae.unstable_sx=function(ue){return(0,V.default)({sx:ue,theme:this})},Ae}var ie=s.default=ne}),Ym=f(s=>{"use strict";var p=ln();Object.defineProperty(s,"__esModule",{value:!0}),Object.defineProperty(s,"default",{enumerable:!0,get:function(){return d.default}}),Object.defineProperty(s,"private_createBreakpoints",{enumerable:!0,get:function(){return w.default}}),Object.defineProperty(s,"unstable_applyStyles",{enumerable:!0,get:function(){return _.default}});var d=p(j0()),w=p(Km()),_=p(qc())}),I0=f(s=>{"use strict";var p=ln();Object.defineProperty(s,"__esModule",{value:!0}),s.alpha=ce,s.blend=Ae,s.colorChannel=void 0,s.darken=le,s.decomposeColor=z,s.emphasize=Pe,s.getContrastRatio=oe,s.getLuminance=ie,s.hexToRgb=E,s.hslToRgb=ne,s.lighten=De,s.private_safeAlpha=me,s.private_safeColorChannel=void 0,s.private_safeDarken=Te,s.private_safeEmphasize=we,s.private_safeLighten=Ie,s.recomposeColor=G,s.rgbToHex=ee;var d=p(Qi()),w=p(Hy());function _(ue,je=0,ze=1){return(0,w.default)(ue,je,ze)}function E(ue){ue=ue.slice(1);let je=new RegExp(`.{1,${ue.length>=6?2:1}}`,"g"),ze=ue.match(je);return ze&&ze[0].length===1&&(ze=ze.map(Fe=>Fe+Fe)),ze?`rgb${ze.length===4?"a":""}(${ze.map((Fe,Je)=>Je<3?parseInt(Fe,16):Math.round(parseInt(Fe,16)/255*1e3)/1e3).join(", ")})`:""}function T(ue){let je=ue.toString(16);return je.length===1?`0${je}`:je}function z(ue){if(ue.type)return ue;if(ue.charAt(0)==="#")return z(E(ue));let je=ue.indexOf("("),ze=ue.substring(0,je);if(["rgb","rgba","hsl","hsla","color"].indexOf(ze)===-1)throw new Error((0,d.default)(9,ue));let Fe=ue.substring(je+1,ue.length-1),Je;if(ze==="color"){if(Fe=Fe.split(" "),Je=Fe.shift(),Fe.length===4&&Fe[3].charAt(0)==="/"&&(Fe[3]=Fe[3].slice(1)),["srgb","display-p3","a98-rgb","prophoto-rgb","rec-2020"].indexOf(Je)===-1)throw new Error((0,d.default)(10,Je))}else Fe=Fe.split(",");return Fe=Fe.map(tt=>parseFloat(tt)),{type:ze,values:Fe,colorSpace:Je}}var V=ue=>{let je=z(ue);return je.values.slice(0,3).map((ze,Fe)=>je.type.indexOf("hsl")!==-1&&Fe!==0?`${ze}%`:ze).join(" ")};s.colorChannel=V;var H=(ue,je)=>{try{return V(ue)}catch{return ue}};s.private_safeColorChannel=H;function G(ue){let{type:je,colorSpace:ze}=ue,{values:Fe}=ue;return je.indexOf("rgb")!==-1?Fe=Fe.map((Je,tt)=>tt<3?parseInt(Je,10):Je):je.indexOf("hsl")!==-1&&(Fe[1]=`${Fe[1]}%`,Fe[2]=`${Fe[2]}%`),je.indexOf("color")!==-1?Fe=`${ze} ${Fe.join(" ")}`:Fe=`${Fe.join(", ")}`,`${je}(${Fe})`}function ee(ue){if(ue.indexOf("#")===0)return ue;let{values:je}=z(ue);return`#${je.map((ze,Fe)=>T(Fe===3?Math.round(255*ze):ze)).join("")}`}function ne(ue){ue=z(ue);let{values:je}=ue,ze=je[0],Fe=je[1]/100,Je=je[2]/100,tt=Fe*Math.min(Je,1-Je),gt=(or,Me=(or+ze/30)%12)=>Je-tt*Math.max(Math.min(Me-3,9-Me,1),-1),Ut="rgb",Gt=[Math.round(gt(0)*255),Math.round(gt(8)*255),Math.round(gt(4)*255)];return ue.type==="hsla"&&(Ut+="a",Gt.push(je[3])),G({type:Ut,values:Gt})}function ie(ue){ue=z(ue);let je=ue.type==="hsl"||ue.type==="hsla"?z(ne(ue)).values:ue.values;return je=je.map(ze=>(ue.type!=="color"&&(ze/=255),ze<=.03928?ze/12.92:((ze+.055)/1.055)**2.4)),Number((.2126*je[0]+.7152*je[1]+.0722*je[2]).toFixed(3))}function oe(ue,je){let ze=ie(ue),Fe=ie(je);return(Math.max(ze,Fe)+.05)/(Math.min(ze,Fe)+.05)}function ce(ue,je){return ue=z(ue),je=_(je),(ue.type==="rgb"||ue.type==="hsl")&&(ue.type+="a"),ue.type==="color"?ue.values[3]=`/${je}`:ue.values[3]=je,G(ue)}function me(ue,je,ze){try{return ce(ue,je)}catch{return ue}}function le(ue,je){if(ue=z(ue),je=_(je),ue.type.indexOf("hsl")!==-1)ue.values[2]*=1-je;else if(ue.type.indexOf("rgb")!==-1||ue.type.indexOf("color")!==-1)for(let ze=0;ze<3;ze+=1)ue.values[ze]*=1-je;return G(ue)}function Te(ue,je,ze){try{return le(ue,je)}catch{return ue}}function De(ue,je){if(ue=z(ue),je=_(je),ue.type.indexOf("hsl")!==-1)ue.values[2]+=(100-ue.values[2])*je;else if(ue.type.indexOf("rgb")!==-1)for(let ze=0;ze<3;ze+=1)ue.values[ze]+=(255-ue.values[ze])*je;else if(ue.type.indexOf("color")!==-1)for(let ze=0;ze<3;ze+=1)ue.values[ze]+=(1-ue.values[ze])*je;return G(ue)}function Ie(ue,je,ze){try{return De(ue,je)}catch{return ue}}function Pe(ue,je=.15){return ie(ue)>.5?le(ue,je):De(ue,je)}function we(ue,je,ze){try{return we(ue,je)}catch{return ue}}function Ae(ue,je,ze,Fe=1){let Je=(Gt,or)=>Math.round((Gt**(1/Fe)*(1-ze)+or**(1/Fe)*ze)**Fe),tt=z(ue),gt=z(je),Ut=[Je(tt.values[0],gt.values[0]),Je(tt.values[1],gt.values[1]),Je(tt.values[2],gt.values[2])];return G({type:"rgb",values:Ut})}}),k0=f(s=>{"use strict";var p=ln();Object.defineProperty(s,"__esModule",{value:!0}),s.default=Ae,s.shouldForwardProp=le,s.systemDefaultTheme=void 0;var d=p(ku()),w=p(Cu()),_=oe(Bl()),E=xi(),T=p(sn()),z=p(By()),V=p(Ym()),H=p(_0()),G=["ownerState"],ee=["variants"],ne=["name","slot","skipVariantsResolver","skipSx","overridesResolver"];function ie(ue){if(typeof WeakMap!="function")return null;var je=new WeakMap,ze=new WeakMap;return(ie=function(Fe){return Fe?ze:je})(ue)}function oe(ue,je){if(!je&&ue&&ue.__esModule)return ue;if(ue===null||typeof ue!="object"&&typeof ue!="function")return{default:ue};var ze=ie(je);if(ze&&ze.has(ue))return ze.get(ue);var Fe={__proto__:null},Je=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var tt in ue)if(tt!=="default"&&Object.prototype.hasOwnProperty.call(ue,tt)){var gt=Je?Object.getOwnPropertyDescriptor(ue,tt):null;gt&&(gt.get||gt.set)?Object.defineProperty(Fe,tt,gt):Fe[tt]=ue[tt]}return Fe.default=ue,ze&&ze.set(ue,Fe),Fe}function ce(ue){return Object.keys(ue).length===0}function me(ue){return typeof ue=="string"&&ue.charCodeAt(0)>96}function le(ue){return ue!=="ownerState"&&ue!=="theme"&&ue!=="sx"&&ue!=="as"}var Te=s.systemDefaultTheme=(0,V.default)(),De=ue=>ue&&ue.charAt(0).toLowerCase()+ue.slice(1);function Ie({defaultTheme:ue,theme:je,themeId:ze}){return ce(je)?ue:je[ze]||je}function Pe(ue){return ue?(je,ze)=>ze[ue]:null}function we(ue,je){let{ownerState:ze}=je,Fe=(0,w.default)(je,G),Je=typeof ue=="function"?ue((0,d.default)({ownerState:ze},Fe)):ue;if(Array.isArray(Je))return Je.flatMap(tt=>we(tt,(0,d.default)({ownerState:ze},Fe)));if(Je&&typeof Je=="object"&&Array.isArray(Je.variants)){let{variants:tt=[]}=Je,gt=(0,w.default)(Je,ee);return tt.forEach(Ut=>{let Gt=!0;typeof Ut.props=="function"?Gt=Ut.props((0,d.default)({ownerState:ze},Fe,ze)):Object.keys(Ut.props).forEach(or=>{ze?.[or]!==Ut.props[or]&&Fe[or]!==Ut.props[or]&&(Gt=!1)}),Gt&&(Array.isArray(gt)||(gt=[gt]),gt.push(typeof Ut.style=="function"?Ut.style((0,d.default)({ownerState:ze},Fe,ze)):Ut.style))}),gt}return Je}function Ae(ue={}){let{themeId:je,defaultTheme:ze=Te,rootShouldForwardProp:Fe=le,slotShouldForwardProp:Je=le}=ue,tt=gt=>(0,H.default)((0,d.default)({},gt,{theme:Ie((0,d.default)({},gt,{defaultTheme:ze,themeId:je}))}));return tt.__mui_systemSx=!0,(gt,Ut={})=>{(0,_.internal_processStyles)(gt,Kn=>Kn.filter(ra=>!(ra!=null&&ra.__mui_systemSx)));let{name:Gt,slot:or,skipVariantsResolver:Me,skipSx:st,overridesResolver:lr=Pe(De(or))}=Ut,rt=(0,w.default)(Ut,ne),Ot=Me!==void 0?Me:or&&or!=="Root"&&or!=="root"||!1,It=st||!1,Tt,rr=le;or==="Root"||or==="root"?rr=Fe:or?rr=Je:me(gt)&&(rr=void 0);let kr=(0,_.default)(gt,(0,d.default)({shouldForwardProp:rr,label:Tt},rt)),Hn=Kn=>typeof Kn=="function"&&Kn.__emotion_real!==Kn||(0,E.isPlainObject)(Kn)?ra=>we(Kn,(0,d.default)({},ra,{theme:Ie({theme:ra.theme,defaultTheme:ze,themeId:je})})):Kn,yo=(Kn,...ra)=>{let t1=Hn(Kn),Qa=ra?ra.map(Hn):[];Gt&&lr&&Qa.push(jl=>{let Ri=Ie((0,d.default)({},jl,{defaultTheme:ze,themeId:je}));if(!Ri.components||!Ri.components[Gt]||!Ri.components[Gt].styleOverrides)return null;let Bu=Ri.components[Gt].styleOverrides,Bs={};return Object.entries(Bu).forEach(([tp,Sf])=>{Bs[tp]=we(Sf,(0,d.default)({},jl,{theme:Ri}))}),lr(jl,Bs)}),Gt&&!Ot&&Qa.push(jl=>{var Ri;let Bu=Ie((0,d.default)({},jl,{defaultTheme:ze,themeId:je})),Bs=Bu==null||(Ri=Bu.components)==null||(Ri=Ri[Gt])==null?void 0:Ri.variants;return we({variants:Bs},(0,d.default)({},jl,{theme:Bu}))}),It||Qa.push(tt);let Sl=Qa.length-ra.length;if(Array.isArray(Kn)&&Sl>0){let jl=new Array(Sl).fill("");t1=[...Kn,...jl],t1.raw=[...Kn.raw,...jl]}let r1=kr(t1,...Qa);return gt.muiName&&(r1.muiName=gt.muiName),r1};return kr.withConfig&&(yo.withConfig=kr.withConfig),yo}}}),af=O(C()),Qm=O(B()),Uy=O(X()),Zm=O(Z()),Ai=O(B());function Es(s){s()}var Au=Es,$y=s=>Au=s,eh=()=>Au,Uc=O(C()),P0=O(C()),lf=O(C()),E0=Symbol.for("react-redux-context"),th=typeof globalThis<"u"?globalThis:{};function rh(){var s;if(!lf.createContext)return{};let p=(s=th[E0])!=null?s:th[E0]=new Map,d=p.get(lf.createContext);return d||(d=lf.createContext(null),p.set(lf.createContext,d)),d}var hl=rh();function C0(s=hl){return function(){return(0,P0.useContext)(s)}}var nh=C0(),oh=()=>{throw new Error("uSES not initialized!")},ih=oh,Jy=s=>{ih=s},Gy=(s,p)=>s===p;function Xy(s=hl){let p=s===hl?nh:C0(s);return function(d,w={}){let{equalityFn:_=Gy,stabilityCheck:E=void 0,noopCheck:T=void 0}=typeof w=="function"?{equalityFn:w}:w,{store:z,subscription:V,getServerState:H,stabilityCheck:G,noopCheck:ee}=p(),ne=(0,Uc.useRef)(!0),ie=(0,Uc.useCallback)({[d.name](ce){let me=d(ce);if(!1){if((v==="always"||v==="once"&&ne.current)&&!_(me,b))try{}catch(le){}if((x==="always"||x==="once"&&ne.current)&&me===ce)try{}catch(le){}}return me}}[d.name],[d,G,E]),oe=ih(V.addNestedSub,z.getState,H||z.getState,ie,_);return(0,Uc.useDebugValue)(oe),oe}}var Ky=Xy();de();function Nn(s,p){if(s==null)return{};var d={},w=Object.keys(s),_,E;for(E=0;E=0)&&(d[_]=s[_]);return d}var tS=O(Oe()),rS=O(C()),A0=O(Ue());de();function Yy(){let s=eh(),p=null,d=null;return{clear(){p=null,d=null},notify(){s(()=>{let w=p;for(;w;)w.callback(),w=w.next})},get(){let w=[],_=p;for(;_;)w.push(_),_=_.next;return w},subscribe(w){let _=!0,E=d={callback:w,next:null,prev:d};return E.prev?E.prev.next=E:p=E,function(){!_||p===null||(_=!1,E.next?E.next.prev=E.prev:d=E.prev,E.prev?E.prev.next=E.next:p=E.next)}}}}var ah={notify(){},get:()=>[]};function lh(s,p){let d,w=ah,_=0,E=!1;function T(ce){G();let me=w.subscribe(ce),le=!1;return()=>{le||(le=!0,me(),ee())}}function z(){w.notify()}function V(){oe.onStateChange&&oe.onStateChange()}function H(){return E}function G(){_++,d||(d=p?p.addNestedSub(V):s.subscribe(V),w=Yy())}function ee(){_--,d&&_===0&&(d(),d=void 0,w.clear(),w=ah)}function ne(){E||(E=!0,G())}function ie(){E&&(E=!1,ee())}let oe={addNestedSub:T,notifyNestedSubs:z,handleChangeWrapper:V,isSubscribed:H,trySubscribe:ne,tryUnsubscribe:ie,getListeners:()=>w};return oe}var M0=O(C()),Qy=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",sh=Qy?M0.useLayoutEffect:M0.useEffect,Zy=oh,e2=s=>{Zy=s},Ja=O(C());function uh({store:s,context:p,children:d,serverState:w,stabilityCheck:_="once",noopCheck:E="once"}){let T=Ja.useMemo(()=>{let V=lh(s);return{store:s,subscription:V,getServerState:w?()=>w:void 0,stabilityCheck:_,noopCheck:E}},[s,w,_,E]),z=Ja.useMemo(()=>s.getState(),[s]);return sh(()=>{let{subscription:V}=T;return V.onStateChange=V.notifyNestedSubs,V.trySubscribe(),z!==s.getState()&&V.notifyNestedSubs(),()=>{V.tryUnsubscribe(),V.onStateChange=void 0}},[T,z]),Ja.createElement((p||hl).Provider,{value:T},d)}var ch=uh;function Ga(s=hl){let p=s===hl?nh:C0(s);return function(){let{store:d}=p();return d}}var Mu=Ga();function sf(s=hl){let p=s===hl?Mu:Ga(s);return function(){return p().dispatch}}var ph=sf();Jy(Zm.useSyncExternalStoreWithSelector),e2(Uy.useSyncExternalStore),$y(Ai.unstable_batchedUpdates);var Cs=()=>ph(),Yo=Ky;function ci(s){for(var p=arguments.length,d=Array(p>1?p-1:0),w=1;w3?p.i-4:p.i:Array.isArray(s)?1:$c(s)?2:R0(s)?3:0}function As(s,p){return gl(s)===2?s.has(p):Object.prototype.hasOwnProperty.call(s,p)}function fh(s,p){return gl(s)===2?s.get(p):s[p]}function dh(s,p,d){var w=gl(s);w===2?s.set(p,d):w===3?s.add(d):s[p]=d}function T0(s,p){return s===p?s!==0||1/s==1/p:s!=s&&p!=p}function $c(s){return H0&&s instanceof Map}function R0(s){return n2&&s instanceof Set}function vl(s){return s.o||s.t}function uf(s){if(Array.isArray(s))return Array.prototype.slice.call(s);var p=ut(s);delete p[Cn];for(var d=Lu(p),w=0;w1&&(s.set=s.add=s.clear=s.delete=t2),Object.freeze(s),p&&Vl(s,function(d,w){return z0(w,!0)},!0)),s}function t2(){ci(2)}function L0(s){return s==null||typeof s!="object"||Object.isFrozen(s)}function Zi(s){var p=V0[s];return p||ci(18,s),p}function Tu(s,p){V0[s]||(V0[s]=p)}function D0(){return Jc}function N0(s,p){p&&(Zi("Patches"),s.u=[],s.s=[],s.v=p)}function cf(s){pf(s),s.p.forEach(F0),s.p=null}function pf(s){s===Jc&&(Jc=s.l)}function Ms(s){return Jc={p:[],l:Jc,h:s,m:!0,_:0}}function F0(s){var p=s[Cn];p.i===0||p.i===1?p.j():p.g=!0}function ff(s,p){p._=p.p.length;var d=p.p[0],w=s!==void 0&&s!==d;return p.h.O||Zi("ES5").S(p,s,w),w?(d[Cn].P&&(cf(p),ci(4)),Xa(s)&&(s=df(p,s),p.l||Ru(p,s)),p.u&&Zi("Patches").M(d[Cn].t,s,p.u,p.s)):s=df(p,d,[]),cf(p),p.u&&p.v(p.u,p.s),s!==_a?s:void 0}function df(s,p,d){if(L0(p))return p;var w=p[Cn];if(!w)return Vl(p,function(z,V){return mh(s,w,p,z,V,d)},!0),p;if(w.A!==s)return p;if(!w.P)return Ru(s,w.t,!0),w.t;if(!w.I){w.I=!0,w.A._--;var _=w.i===4||w.i===5?w.o=uf(w.k):w.o,E=_,T=!1;w.i===3&&(E=new Set(_),_.clear(),T=!0),Vl(E,function(z,V){return mh(s,w,_,z,V,d,T)}),Ru(s,_,!1),d&&s.u&&Zi("Patches").N(w,d,s.u,s.s)}return w.o}function mh(s,p,d,w,_,E,T){if(mo(_)){var z=df(s,_,E&&p&&p.i!==3&&!As(p.R,w)?E.concat(w):void 0);if(dh(d,w,z),!mo(z))return;s.m=!1}else T&&d.add(_);if(Xa(_)&&!L0(_)){if(!s.h.D&&s._<1)return;df(s,_),p&&p.A.l||Ru(s,_)}}function Ru(s,p,d){d===void 0&&(d=!1),!s.l&&s.h.D&&s.m&&z0(p,d)}function zu(s,p){var d=s[Cn];return(d?vl(d):s)[p]}function hh(s,p){if(p in s)for(var d=Object.getPrototypeOf(s);d;){var w=Object.getOwnPropertyDescriptor(d,p);if(w)return w;d=Object.getPrototypeOf(d)}}function ql(s){s.P||(s.P=!0,s.l&&ql(s.l))}function W0(s){s.o||(s.o=uf(s.t))}function B0(s,p,d){var w=$c(p)?Zi("MapSet").F(p,d):R0(p)?Zi("MapSet").T(p,d):s.O?function(_,E){var T=Array.isArray(_),z={i:T?1:0,A:E?E.A:D0(),P:!1,I:!1,R:{},l:E,t:_,k:null,o:null,j:null,C:!1},V=z,H=pi;T&&(V=[z],H=Sa);var G=Proxy.revocable(V,H),ee=G.revoke,ne=G.proxy;return z.k=ne,z.j=ee,ne}(p,d):Zi("ES5").J(p,d);return(d?d.A:D0()).p.push(w),w}function r2(s){return mo(s)||ci(22,s),function p(d){if(!Xa(d))return d;var w,_=d[Cn],E=gl(d);if(_){if(!_.P&&(_.i<4||!Zi("ES5").K(_)))return _.t;_.I=!0,w=gh(d,E),_.I=!1}else w=gh(d,E);return Vl(w,function(T,z){_&&fh(_.t,T)===z||dh(w,T,p(z))}),E===3?new Set(w):w}(s)}function gh(s,p){switch(p){case 2:return new Map(s);case 3:return Array.from(s)}return uf(s)}function vh(){function s(T,z){var V=E[T];return V?V.enumerable=z:E[T]=V={configurable:!0,enumerable:z,get:function(){var H=this[Cn];return pi.get(H,T)},set:function(H){var G=this[Cn];pi.set(G,T,H)}},V}function p(T){for(var z=T.length-1;z>=0;z--){var V=T[z][Cn];if(!V.P)switch(V.i){case 5:w(V)&&ql(V);break;case 4:d(V)&&ql(V)}}}function d(T){for(var z=T.t,V=T.k,H=Lu(V),G=H.length-1;G>=0;G--){var ee=H[G];if(ee!==Cn){var ne=z[ee];if(ne===void 0&&!As(z,ee))return!0;var ie=V[ee],oe=ie&&ie[Cn];if(oe?oe.t!==ne:!T0(ie,ne))return!0}}var ce=!!z[Cn];return H.length!==Lu(z).length+(ce?0:1)}function w(T){var z=T.k;if(z.length!==T.t.length)return!0;var V=Object.getOwnPropertyDescriptor(z,z.length-1);if(V&&!V.get)return!0;for(var H=0;H1?le-1:0),De=1;De1?G-1:0),ne=1;ne=0;_--){var E=w[_];if(E.path.length===0&&E.op==="replace"){d=E.value;break}}_>-1&&(w=w.slice(_+1));var T=Zi("Patches").$;return mo(d)?T(d,w):this.produce(d,function(z){return T(z,w)})},s}(),jo=new Zr,wh=jo.produce,Du=jo.produceWithPatches.bind(jo),nS=jo.setAutoFreeze.bind(jo),oS=jo.setUseProxies.bind(jo),iS=jo.applyPatches.bind(jo),aS=jo.createDraft.bind(jo),Oh=jo.finishDraft.bind(jo),ho=wh;function ea(s){"@babel/helpers - typeof";return ea=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(p){return typeof p}:function(p){return p&&typeof Symbol=="function"&&p.constructor===Symbol&&p!==Symbol.prototype?"symbol":typeof p},ea(s)}function yl(s,p){if(ea(s)!="object"||!s)return s;var d=s[Symbol.toPrimitive];if(d!==void 0){var w=d.call(s,p||"default");if(ea(w)!="object")return w;throw new TypeError("@@toPrimitive must return a primitive value.")}return(p==="string"?String:Number)(s)}function o2(s){var p=yl(s,"string");return ea(p)=="symbol"?p:String(p)}function i2(s,p,d){return p=o2(p),p in s?Object.defineProperty(s,p,{value:d,enumerable:!0,configurable:!0,writable:!0}):s[p]=d,s}function q0(s,p){var d=Object.keys(s);if(Object.getOwnPropertySymbols){var w=Object.getOwnPropertySymbols(s);p&&(w=w.filter(function(_){return Object.getOwnPropertyDescriptor(s,_).enumerable})),d.push.apply(d,w)}return d}function xh(s){for(var p=1;p"u"&&(d=p,p=void 0),typeof d<"u"){if(typeof d!="function")throw new Error(Do(1));return d(vf)(s,p)}if(typeof s!="function")throw new Error(Do(2));var _=s,E=p,T=[],z=T,V=!1;function H(){z===T&&(z=T.slice())}function G(){if(V)throw new Error(Do(3));return E}function ee(ce){if(typeof ce!="function")throw new Error(Do(4));if(V)throw new Error(Do(5));var me=!0;return H(),z.push(ce),function(){if(me){if(V)throw new Error(Do(6));me=!1,H();var le=z.indexOf(ce);z.splice(le,1),T=null}}}function ne(ce){if(!_h(ce))throw new Error(Do(7));if(typeof ce.type>"u")throw new Error(Do(8));if(V)throw new Error(Do(9));try{V=!0,E=_(E,ce)}finally{V=!1}for(var me=T=z,le=0;le"u")throw new Error(Do(12));if(typeof d(void 0,{type:ta.PROBE_UNKNOWN_ACTION()})>"u")throw new Error(Do(13))})}function l2(s){for(var p=Object.keys(s),d={},w=0;w"u"){var Te=H&&H.type;throw new Error(Do(14))}ne[oe]=le,ee=ee||le!==me}return ee=ee||E.length!==Object.keys(V).length,ee?ne:V}}function yf(){for(var s=arguments.length,p=new Array(s),d=0;d0&&E[E.length-1])&&(H[0]===6||H[0]===2)){d=0;continue}if(H[0]===3&&(!E||H[1]>E[0]&&H[1]1){var d=s.shift();s[0]=d+s[0]}s[0].match(/^file:\/\/\//)?s[0]=s[0].replace(/^([^/:]+):\/*/,"$1:///"):s[0]=s[0].replace(/^([^/:]+):\/*/,"$1://");for(var w=0;w0&&(_=_.replace(/^[\/]+/,"")),w0?"?":"")+T.join("&"),E}function Io(){var s;return typeof arguments[0]=="object"?s=arguments[0]:s=[].slice.call(arguments),fi(s)}var _i={stats:void 0,bannerText:""},qr=ja("home_stats",async(s,{rejectWithValue:p})=>{try{return await Kr("api/v2/stats")}catch(d){return p(d.message)}}),ct=ja("home_banner",async(s,{rejectWithValue:p})=>{try{return(await fetch(Io("/","banner.txt"))).text()}catch(d){return p(d.message)}}),Qt=He({name:"home",initialState:_i,reducers:{},extraReducers:s=>{s.addCase(qr.fulfilled,(p,d)=>{p.stats=d.payload}),s.addCase(qr.rejected,p=>{p.stats=_i.stats}),s.addCase(ct.fulfilled,(p,d)=>{p.bannerText=d.payload}),s.addCase(ct.rejected,p=>{p.bannerText=_i.bannerText})}}),Mr=Qt.reducer,Tr=O(C()),Ir=class MY{constructor(p,d){this.value=p,this.axioms=d}static fromJson(p){return p?(Array.isArray(p)||(p=[p]),p.map(d=>typeof d=="object"&&Array.isArray(d.type)&&d.type.indexOf("reification")!==-1?new MY(d.value,d.axioms):new MY(d,null))):[]}hasMetadata(){return this.axioms!=null}getMetadata(){if(!this.axioms)return null;let p={};for(let d of this.axioms)for(let w of Object.keys(d)){let _=d[w],E=p[w];E!==void 0?E.push(_):p[w]=[_]}return p}},Fn=class TY{constructor(p){p?this.linkedEntities={...p}:this.linkedEntities={}}mergeWith(p){return p?new TY({...this.linkedEntities,linkedEntities:p}):new TY({...this.linkedEntities})}getLabelForIri(p){let d=this.linkedEntities[p];if(d){let w=Ir.fromJson(d.label);if(w&&w.length>0)return w[0].value}}get(p){return this.linkedEntities[p]}},Yr=class{constructor(s){this.properties=s}getId(){return this.properties.id}getIri(){return this.properties.iri}getType(){let s=this.properties.type;for(let p of s)if(["ontology","class","property","individual"].indexOf(p)!==-1)return p;throw new Error("unknown type")}getTypePlural(){switch(this.getType()){case"ontology":return"ontologies";case"class":return"classes";case"property":return"properties";case"individual":return"individuals";default:throw new Error("unknown type")}}getRdfTypes(){return Wn(this.properties["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"])}getName(){return this.getNames()[0]}getNames(){let s=Ir.fromJson(this.properties.label);return s&&s.length>0?s.map(p=>p.value):[this.getIri()]}getDescription(){let s=Ir.fromJson(this.properties.definition);return s&&s.length>0?s.map(p=>p.value||"").join(" "):""}getOntologyId(){return this.properties.ontologyId}getLabelForIri(s){let p=this.properties.linkedEntities;return p&&Ir.fromJson(p[s]?.label)[0]?.value||s}getAnnotationById(s){return Ir.fromJson(Wn(this.properties[s]))}getLinkedEntities(){return new Fn(this.properties.linkedEntities||{})}},nn=class extends Yr{isCanonical(){return this.properties.isDefiningOntology===!0}isDeprecated(){return this.properties["http://www.w3.org/2002/07/owl#deprecated"]==="true"}getDeprecationVersion(){return this.properties["http://www.ebi.ac.uk/efo/obsoleted_in_version"]}getDeprecationReason(){return Ir.fromJson(this.properties["http://purl.obolibrary.org/obo/IAO_0000231"]).concat(Ir.fromJson(this.properties["http://www.ebi.ac.uk/efo/reason_for_obsolescence"]))}getDeprecationReplacement(){return this.properties["http://purl.obolibrary.org/obo/IAO_0100001"]}getRelatedFrom(){return Ir.fromJson(this.properties.relatedFrom)}getDescriptionAsArray(){return Ir.fromJson(this.properties.definition)}hasDirectChildren(){return this.properties.hasDirectChildren==="true"}hasHierarchicalChildren(){return this.properties.hasHierarchicalChildren==="true"}hasChildren(){return this.hasDirectChildren()||this.hasHierarchicalChildren()}getAncestorIris(){return Wn(this.properties.ancestor)}getHierarchicalAncestorIris(){return Wn(this.properties.hierarchicalAncestor)}getSynonyms(){return Ir.fromJson(this.properties.synonym)}getAppearsIn(){return this.properties.appearsIn||[]}getDefinedBy(){return this.properties.definedBy||[]}getShortForm(){return this.properties.curie||this.properties.shortForm}getDepictedBy(){return Ir.fromJson(this.properties["http://xmlns.com/foaf/0.1/depicted_by"])}getAnnotationPredicates(){let s=Wn(this.properties.definitionProperty),p=Wn(this.properties.synonymProperty),d=Wn(this.properties.hierarchicalProperty),w=new Set;for(let _ of Object.keys(this.properties)){if(_.indexOf("://")===-1||_.startsWith("negativePropertyAssertion+")||_==="http://xmlns.com/foaf/0.1/depicted_by")continue;let E=this.getLinkedEntities().get(_);E!=null&&E.type.indexOf("objectProperty")!==-1||E!=null&&E.type.indexOf("dataProperty")!==-1||s.indexOf(_)!==-1||p.indexOf(_)!==-1||d.indexOf(_)!==-1||(_.startsWith("http://www.w3.org/2000/01/rdf-schema#")||_.startsWith("http://www.w3.org/1999/02/22-rdf-syntax-ns#")||_.startsWith("http://www.w3.org/2002/07/owl#"))&&_!=="http://www.w3.org/2000/01/rdf-schema#comment"&&_!=="http://www.w3.org/2000/01/rdf-schema#seeAlso"&&_!=="http://www.w3.org/2002/07/owl#disjointUnionOf"||_!=="http://www.geneontology.org/formats/oboInOwl#id"&&w.add(_)}return Array.from(w)}getNumHierarchicalDescendants(){return this.properties.numHierarchicalDescendants?parseInt(this.properties.numHierarchicalDescendants):0}getNumDescendants(){return this.properties.numDescendants?parseInt(this.properties.numDescendants):0}getHierarchicalParentReificationAxioms(s){let p=Ir.fromJson(this.properties.hierarchicalParent);for(let d of p)if(d.value===s)return d.getMetadata()}},bn=class extends nn{getParents(){return Ir.fromJson(this.properties.hierarchicalParent)}getSuperEntities(){return Ir.fromJson(this.properties["http://www.w3.org/2000/01/rdf-schema#subClassOf"])}getEquivalents(){return Ir.fromJson(this.properties["http://www.w3.org/2002/07/owl#equivalentClass"])}getDisjointWith(){return Wn(this.properties["http://www.w3.org/2002/07/owl#disjointWith"])}getHasKey(){return Wn(this.properties["http://www.w3.org/2002/07/owl#hasKey"])}},_n=class extends nn{getParents(){return Ir.fromJson(this.properties.directParent)}getEquivalents(){return[]}getSuperEntities(){return Ir.fromJson([])}getDifferentFrom(){return Wn(this.properties["http://www.w3.org/2002/07/owl#differentFrom"])}getSameAs(){return Wn(this.properties["http://www.w3.org/2002/07/owl#sameAs"])}getIndividualTypes(){let s=this.getRdfTypes();return!s||!Array.isArray(s)?[]:s.filter(p=>p!=="http://www.w3.org/2002/07/owl#NamedIndividual"&&(typeof p!="string"||!p.startsWith("http://www.w3.org/2000/01/rdf-schema#")))}},wl=class extends nn{getParents(){return Ir.fromJson(this.properties["http://www.w3.org/2000/01/rdf-schema#subPropertyOf"])}getSuperEntities(){return Ir.fromJson(this.properties["http://www.w3.org/2000/01/rdf-schema#subPropertyOf"])}getEquivalents(){return Ir.fromJson(this.properties["http://www.w3.org/2002/07/owl#equivalentProperty"])}getDisjointWith(){return Wn(this.properties["http://www.w3.org/2002/07/owl#propertyDisjointWith"])}getInverseOf(){return Wn(this.properties["http://www.w3.org/2002/07/owl#inverseOf"])}getDomain(){return Wn(this.properties["http://www.w3.org/2000/01/rdf-schema#domain"])}getRange(){return Wn(this.properties["http://www.w3.org/2000/01/rdf-schema#range"])}getPropertyChains(){return Ir.fromJson(this.properties["http://www.w3.org/2002/07/owl#propertyChainAxiom"])}};function Wn(s){return Array.isArray(s)?s:s?[s]:[]}function Fu(){return(Math.random()*Math.pow(2,54)).toString(36)}function Si(s){let p=s.type||[];if(p.indexOf("class")!==-1)return new bn(s);if(p.indexOf("property")!==-1)return new wl(s);if(p.indexOf("individual")!==-1)return new _n(s);throw new Error("Unknown entity type: "+JSON.stringify(s))}function Yc(s){let p=new URLSearchParams;return s.forEach((d,w)=>{let _=w.includes("_")?Ls(w):w;_==="oboId"&&(_="curie"),p.append(_,d)}),p}function Ls(s){return s.replace(/([-_][a-z])/gi,p=>p.toUpperCase().replace("-","").replace("_",""))}var Wu=class extends Yr{getOntologyId(){return this.properties.ontologyId}getName(){let s=Ir.fromJson(this.properties.label||this.properties.title||"");return s[0]&&s[0].value||this.getOntologyId()}getDescription(){let s=Ir.fromJson(this.properties.definition||this.properties.description||"");return s[0]&&s[0].value||""}getSourceFileTimestamp(){return this.properties.sourceFileTimestamp}getNumEntities(){return parseInt(this.properties.numberOfEntities)}getNumClasses(){return parseInt(this.properties.numberOfClasses)}getNumProperties(){return parseInt(this.properties.numberOfProperties)}getNumIndividuals(){return parseInt(this.properties.numberOfIndividuals)}getLogoURL(){return this.properties.depicted_by||void 0}getOntologyPurl(){return this.properties.ontology_purl}getHomepage(){return this.properties.homepage}getMailingList(){return this.properties.mailing_list}getTracker(){return this.properties.tracker}getVersionIri(){return this.properties["http://www.w3.org/2002/07/owl#versionIRI"]}getVersion(){return this.properties["http://www.w3.org/2002/07/owl#versionInfo"]}getVersionFromIri(){let s=this.properties["http://www.w3.org/2002/07/owl#versionIRI"];if(!s)return"";let p=s.match(/\d{4}-\d{2}-\d{2}/);if(p&&p.length>0)return p[0];{let d=s.match(/\/v[d.].*\//);return d?d[0].replaceAll("/","").replace("v",""):""}}getLoaded(){return this.properties.loaded}getAnnotationPredicates(){let s=new Set;for(let p of Object.keys(this.properties))p.indexOf("://")!==-1&&p!=="http://purl.obolibrary.org/obo/IAO_0000700"&&(p.startsWith("http://www.w3.org/2000/01/rdf-schema#")||p.startsWith("http://www.w3.org/1999/02/22-rdf-syntax-ns#")||p.startsWith("http://www.w3.org/2002/07/owl#")||s.add(p));return Array.from(s)}getPreferredRoots(){return Wn(this.properties.hasPreferredRoot)}getLanguages(){return Wn(this.properties.language)}getImportsFrom(){return Wn(this.properties.importsFrom)}getExportsTo(){return Wn(this.properties.exportsTo)}},wf=O(We());function Qc(s){let p=new wf.default,d=new Map;for(let z of s)d.set(z.getIri(),z);for(let z of s)if(!X0(z.getIri()))for(let V of z.getParents()){let H=V.value,G=d.get(H);if(X0(H)||!(G instanceof nn))continue;var w,_;z.getType()==="individual"?(_="http://www.w3.org/1999/02/22-rdf-syntax-ns#type",w=null):z.getType()=="class"&&(w=V.getMetadata()&&V.getMetadata().parentRelationToChild&&V.getMetadata().parentRelationToChild[0],_=V.getMetadata()&&V.getMetadata().childRelationToParent&&V.getMetadata().childRelationToParent[0]);let ee={parent:G,child:z,parentRelationToChild:w,childRelationToParent:_};p.set(z.getIri(),ee)}var E=function(z,V){V.add(z);let H=p.get(z);if(H)for(let G of H)V.has(G.parent.getIri())?p.delete(z,G):E(G.parent.getIri(),new Set(V))};for(let z of s)E(z.getIri(),new Set);let T=new wf.default;for(let z of Array.from(p.keys())){let V=p.get(z);for(let H of V)T.set(H.parent.getIri(),H)}return{rootEntities:s.filter(z=>X0(z.getIri())?!1:(p.get(z.getIri())||[]).length===0),parentToChildRelations:T}}function X0(s){return s==="http://www.w3.org/2002/07/owl#Thing"||s==="http://www.w3.org/2002/07/owl#TopObjectProperty"}function Eh(s,p,d){let{rootEntities:w,parentToChildRelations:_}=Qc(s);if(console.log("rootEntities"),console.dir(w),console.log("parentToChildRelations"),console.dir(_),p){let H=d.getPreferredRoots();H.length>0&&(w=H.map(G=>s.filter(ee=>ee.getIri()===G)[0]).filter(G=>!!G))}let E=[],T={},z=new Set;return{allNodes:E,rootNodes:w.map(H=>V(H,void 0,0,null,null)),nodeChildren:T,automaticallyExpandedNodes:z};function V(H,G,ee,ne,ie){if(ee>100)throw new Error("probable cyclic tree (createTreeNode)");let oe=_.get(H.getIri())||[],ce={absoluteIdentity:G?G.absoluteIdentity+";"+H.getIri():H.getIri(),iri:H.getIri(),title:H.getName(),expandable:H.hasChildren(),entity:H,numDescendants:H.getNumHierarchicalDescendants()||H.getNumDescendants(),parentRelationToChild:ne,childRelationToParent:ie};return E.push(ce),T[ce.absoluteIdentity]=oe.map(me=>V(me.child,ce,ee+1,me.parentRelationToChild,me.childRelationToParent)),H.hasChildren()&&oe.length>0&&z.add(ce.absoluteIdentity),ce}}var Ol={ontology:void 0,entity:void 0,nodesWithChildrenLoaded:[],nodeChildren:{},rootNodes:[],ontologies:[],totalOntologies:0,entities:[],totalEntities:0,loadingOntologies:!1,loadingEntities:!1,numPendingTreeRequests:0,loadingOntology:!1,loadingEntity:!1,classInstances:null,loadingClassInstances:!1,automaticallyExpandedNodes:[],manuallyExpandedNodes:[],preferredRoots:!1,displayObsolete:!1,displaySiblings:!1,displayCounts:!0,errorMessage:""},LY=yn("ontologies_tree_reset_content"),DY=yn("ontologies_tree_reset_settings"),NY=yn("ontologies_preferred_enabled"),FY=yn("ontologies_preferred_disabled"),WY=yn("ontologies_node_open"),BY=yn("ontologies_node_close"),HY=yn("ontologies_show_obsolete"),VY=yn("ontologies_hide_obsolete"),qY=yn("ontologies_show_siblings"),UY=yn("ontologies_hide_siblings"),$Y=yn("ontologies_show_counts"),JY=yn("ontologies_hide_counts"),cS=ja("ontologies_ontology",async({ontologyId:s,lang:p,apiUrl:d},{rejectWithValue:w})=>{let _=`api/v2/ontologies/${s}`;try{let E=await Kr(_,{lang:p},d);return new Wu(E)}catch(E){return w(`Error accessing: ${_}; ${E.message}`)}}),pS=ja("ontologies_entity_type",async({ontologyId:s,entityType:p,entityIri:d,searchParams:w},{rejectWithValue:_})=>{let E=Yc(w),T=encodeURIComponent(encodeURIComponent(d)),z="";try{let V=null;if(d)z=`api/v2/ontologies/${s}/${p}/${T}?${new URLSearchParams(E)}`,V=await Kr(z);else{z=`api/v2/ontologies/${s}/${p}?${new URLSearchParams(E)}`;let H=await nr(z);if(H.elements.length===1&&H.totalElements===1)V=H.elements[0];else return _(`Error accessing: ${z}; Retrieved nondistinct entity: ${JSON.stringify(H)}`)}return Si(V)}catch(V){return _(`Error accessing: ${z}; ${V.message}`)}}),fS=ja("ontologies_entity",async({ontologyId:s,entityIri:p},{rejectWithValue:d})=>{let w=encodeURIComponent(encodeURIComponent(p)),_="";try{_=`api/v2/ontologies/${s}/entities/${w}`;let E=await Kr(_);return Si(E)}catch(E){return d(`Error accessing: ${_}; ${E.message}`)}}),dS=ja("ontologies_entity_class_instances",async({ontologyId:s,classIri:p,searchParams:d},{rejectWithValue:w})=>{let _="";try{if(p){let E=Yc(d),T=encodeURIComponent(encodeURIComponent(p));return _=`api/v2/ontologies/${s}/classes/${T}/instances?${new URLSearchParams(E)}`,(await nr(_)).map(z=>Si(z))}else return w(`Warning accessing: ${_}; Class IRI not provided`)}catch(E){return w(`Error accessing: ${_}; ${E.message}`)}}),EM=ja("ontologies_ontologies",async({page:s,rowsPerPage:p,search:d},{rejectWithValue:w})=>{d.length>1&&!d.includes(" ")&&(d="*"+d+"*");let _=`api/v2/ontologies?page=${s}&size=${p}${d?"&search="+d:""}`;try{return(await nr(_)).map(E=>new Wu(E))}catch(E){return w(`Error accessing: ${_}; ${E.message}`)}}),CM=ja("ontologies_entities",async({ontologyId:s,entityType:p,page:d,rowsPerPage:w,search:_},{rejectWithValue:E})=>{let T=`api/v2/ontologies/${s}/${p}?page=${d}&size=${w}${_?"&search="+_:""}`;try{return(await nr(T)).map(z=>Si(z))}catch(z){return E(`Error accessing: ${T}; ${z.message}`)}}),mS=ja("ontologies_ancestors",async({ontologyId:s,entityType:p,entityIri:d,lang:w,showObsoleteEnabled:_,apiUrl:E})=>{let T=encodeURIComponent(encodeURIComponent(d));var z;return p==="classes"?z=await nr(`api/v2/ontologies/${s}/classes/${T}/hierarchicalAncestors?${new URLSearchParams({size:"1000",lang:w,includeObsoleteEntities:_})}`,void 0,E):z=await nr(`api/v2/ontologies/${s}/${p}/${T}/ancestors?${new URLSearchParams({size:"1000",lang:w,includeObsoleteEntities:_})}`,void 0,E),z.elements.map(V=>Si(V))}),hS=ja("ontologies_roots",async({ontologyId:s,entityType:p,preferredRoots:d,lang:w,showObsoleteEnabled:_,apiUrl:E})=>{if(p==="individuals"){let[T,z]=await Promise.all([nr(`api/v2/ontologies/${s}/classes?${new URLSearchParams({hasIndividuals:"true",size:"1000",lang:w,includeObsoleteEntities:_})}`,void 0,E),nr(`api/v2/ontologies/${s}/individuals?${new URLSearchParams({hasDirectParent:"false",size:"1000",lang:w,includeObsoleteEntities:_})}`,void 0,E)]);return{entityType:p,rootTerms:null,classesWithIndividuals:T.elements.map(V=>Si(V)),orphanedIndividuals:z.elements.map(V=>Si(V))}}else if(p==="classes"&&d){let T=await nr(`api/v2/ontologies/${s}/${p}?${new URLSearchParams({isPreferredRoot:"true",size:"1000",lang:w,includeObsoleteEntities:_})}`,void 0,E);return{entityType:p,rootTerms:T.elements.map(z=>Si(z)),classesWithIndividuals:null,orphanedIndividuals:null}}else{let T=await nr(`api/v2/ontologies/${s}/${p}?${new URLSearchParams({hasDirectParent:"false",size:"1000",lang:w,includeObsoleteEntities:_})}`,void 0,E);return{entityType:p,rootTerms:T.elements.map(z=>Si(z)),classesWithIndividuals:null,orphanedIndividuals:null}}}),gS=ja("ontologies_node_children",async({ontologyId:s,entityTypePlural:p,entityIri:d,absoluteIdentity:w,lang:_,apiUrl:E,includeObsoleteEntities:T})=>{let z=encodeURIComponent(encodeURIComponent(d));var V;return p==="classes"?V=await nr(`api/v2/ontologies/${s}/classes/${z}/hierarchicalChildren?${new URLSearchParams({size:"1000",lang:_,includeObsoleteEntities:T})}`,void 0,E):p==="individuals"?V=await nr(`api/v2/ontologies/${s}/classes/${z}/instances?${new URLSearchParams({size:"1000",lang:_,includeObsoleteEntities:T})}`,void 0,E):V=await nr(`api/v2/ontologies/${s}/${p}/${z}/children?${new URLSearchParams({size:"1000",lang:_,includeObsoleteEntities:T})}`,void 0,E),{absoluteIdentity:w,children:V.elements.map(H=>Si(H)).map(H=>{let G=H.getHierarchicalParentReificationAxioms(d);return{iri:H.getIri(),absoluteIdentity:w+";"+H.getIri(),title:H.getName(),expandable:H.hasChildren(),entity:H,numDescendants:H.getNumHierarchicalDescendants()||H.getNumDescendants(),parentRelationToChild:G&&G.parentRelationToChild?.[0]||null,childRelationToParent:G&&G.childRelationToParent?.[0]||null}})}}),wbe=He({name:"ontologies",initialState:Ol,reducers:{},extraReducers:s=>{s.addCase(cS.fulfilled,(p,d)=>{p.ontology=d.payload,p.loadingOntology=!1}),s.addCase(cS.pending,p=>{p.loadingOntology=!0,p.errorMessage=Ol.errorMessage}),s.addCase(cS.rejected,(p,d)=>{p.ontology=Ol.ontology,p.loadingOntology=!1,p.errorMessage=d.payload}),s.addCase(pS.fulfilled,(p,d)=>{p.entity=d.payload,p.loadingEntity=!1}),s.addCase(pS.pending,p=>{p.loadingEntity=!0,p.errorMessage=Ol.errorMessage}),s.addCase(pS.rejected,(p,d)=>{p.loadingEntity=!1,p.entity=Ol.entity,p.errorMessage=d.payload}),s.addCase(fS.fulfilled,(p,d)=>{p.entity=d.payload,p.loadingEntity=!1}),s.addCase(fS.pending,p=>{p.loadingEntity=!0,p.errorMessage=Ol.errorMessage}),s.addCase(fS.rejected,(p,d)=>{p.loadingEntity=!1,p.entity=Ol.entity,p.errorMessage=d.payload}),s.addCase(dS.fulfilled,(p,d)=>{p.classInstances=d.payload,p.loadingClassInstances=!1}),s.addCase(dS.pending,p=>{p.loadingClassInstances=!0,p.errorMessage=Ol.errorMessage}),s.addCase(dS.rejected,(p,d)=>{p.loadingClassInstances=!1,p.classInstances=Ol.classInstances,p.errorMessage=d.payload}),s.addCase(mS.pending,p=>{++p.numPendingTreeRequests}),s.addCase(mS.fulfilled,(p,d)=>{let{rootNodes:w,nodeChildren:_,automaticallyExpandedNodes:E}=Eh([p.entity,...d.payload],p.preferredRoots,p.ontology);p.rootNodes=w,p.nodeChildren=_,p.automaticallyExpandedNodes=Array.from(new Set([...p.automaticallyExpandedNodes,...Array.from(E)])),--p.numPendingTreeRequests}),s.addCase(mS.rejected,p=>{--p.numPendingTreeRequests}),s.addCase(gS.pending,p=>{++p.numPendingTreeRequests}),s.addCase(gS.fulfilled,(p,d)=>{p.nodeChildren={...p.nodeChildren,[d.payload.absoluteIdentity]:d.payload.children},p.nodesWithChildrenLoaded.push(d.payload.absoluteIdentity),--p.numPendingTreeRequests}),s.addCase(gS.rejected,p=>{--p.numPendingTreeRequests}),s.addCase(hS.pending,p=>{++p.numPendingTreeRequests}),s.addCase(hS.fulfilled,(p,d)=>{let{rootTerms:w,classesWithIndividuals:_,orphanedIndividuals:E}=d.payload,{rootNodes:T,nodeChildren:z,automaticallyExpandedNodes:V}=Eh([...w||[],..._||[],...E||[]],p.preferredRoots,p.ontology);p.rootNodes=T,p.nodeChildren=z,p.automaticallyExpandedNodes=Array.from(new Set([...p.automaticallyExpandedNodes,...Array.from(V)])),--p.numPendingTreeRequests}),s.addCase(hS.rejected,p=>{--p.numPendingTreeRequests}),s.addCase(EM.fulfilled,(p,d)=>{p.ontologies=d.payload.elements,p.totalOntologies=d.payload.totalElements,p.loadingOntologies=!1}),s.addCase(EM.pending,p=>{p.loadingOntologies=!0,p.errorMessage=Ol.errorMessage}),s.addCase(EM.rejected,(p,d)=>{p.ontologies=Ol.ontologies,p.loadingOntologies=!1,p.errorMessage=d.payload}),s.addCase(CM.fulfilled,(p,d)=>{p.entities=d.payload.elements,p.totalEntities=d.payload.totalElements,p.loadingEntities=!1}),s.addCase(CM.pending,p=>{p.loadingEntities=!0,p.errorMessage=Ol.errorMessage}),s.addCase(CM.rejected,(p,d)=>{p.entities=Ol.entities,p.loadingEntities=!1,p.errorMessage=d.payload}),s.addCase(LY,p=>{p.nodesWithChildrenLoaded=[],p.nodeChildren={},p.rootNodes=[],p.automaticallyExpandedNodes=[]}),s.addCase(DY,(p,d)=>{if(p.preferredRoots=d.payload.entityType==="classes"&&p.ontology.getPreferredRoots().length>0,d.payload.selectedEntity){let w=!1;for(let _ of p.ontology.getPreferredRoots())if(d.payload.selectedEntity.getHierarchicalAncestorIris().indexOf(_)!==-1){w=!0;break}w||(p.preferredRoots=!1)}p.displayObsolete=!1,p.displaySiblings=!1,p.displayCounts=!0,p.manuallyExpandedNodes=[]}),s.addCase(NY,p=>{p.preferredRoots=!0}),s.addCase(FY,p=>{p.preferredRoots=!1}),s.addCase(HY,p=>{p.displayObsolete=!0}),s.addCase(VY,p=>{p.displayObsolete=!1}),s.addCase(qY,p=>{p.displaySiblings=!0}),s.addCase(UY,p=>{p.displaySiblings=!1}),s.addCase($Y,p=>{p.displayCounts=!0}),s.addCase(JY,p=>{p.displayCounts=!1}),s.addCase(WY,(p,d)=>{p.manuallyExpandedNodes=Array.from(new Set([...p.manuallyExpandedNodes,d.payload.absoluteIdentity]))}),s.addCase(BY,(p,d)=>{p.manuallyExpandedNodes=p.manuallyExpandedNodes.filter(w=>w!==d.payload.absoluteIdentity),p.automaticallyExpandedNodes=p.automaticallyExpandedNodes.filter(w=>w!==d.payload.absoluteIdentity),delete p.nodeChildren[d.payload.absoluteIdentity],p.nodesWithChildrenLoaded=p.nodesWithChildrenLoaded.filter(w=>w!==d.payload.absoluteIdentity)})}}),Obe=wbe.reducer,AM={searchResults:[],loadingSearchResults:!1,totalSearchResults:0,facets:Object.create(null)},MM=ja("search_results",async({page:s,rowsPerPage:p,search:d,ontologyId:w,type:_,searchParams:E},{rejectWithValue:T})=>{try{let z={search:d,size:p,page:s,facetFields:"ontologyId type",ontologyId:w.length>0?w[0]:null,type:_.length>0?_[0]:null,...Object.fromEntries(E)};for(let H in z)(z[H]===void 0||z[H]===null||z[H]==="")&&delete z[H];let V=new URLSearchParams(z);return E.get("ontology")&&(V.set("ontologyId",E.get("ontology")),V.delete("ontology")),E.get("q")&&V.delete("q"),(await nr(`api/v2/entities?${V}`)).map(H=>Si(H))}catch(z){return T(z.message)}}),xbe=He({name:"search",initialState:AM,reducers:{},extraReducers:s=>{s.addCase(MM.fulfilled,(p,d)=>{p.searchResults=d.payload.elements,p.totalSearchResults=d.payload.totalElements,p.facets=d.payload.facetFieldsToCounts,p.loadingSearchResults=!1}),s.addCase(MM.pending,p=>{p.loadingSearchResults=!0}),s.addCase(MM.rejected,p=>{p.loadingSearchResults=!1,p.searchResults=AM.searchResults,p.facets=AM.facets})}}),_be=xbe.reducer,Sbe=j({reducer:{home:Mr,search:_be,ontologies:Obe},middleware:s=>s({serializableCheck:!1})});Yi();var jbe={black:"#000",white:"#fff"},m2=jbe,Ibe={50:"#ffebee",100:"#ffcdd2",200:"#ef9a9a",300:"#e57373",400:"#ef5350",500:"#f44336",600:"#e53935",700:"#d32f2f",800:"#c62828",900:"#b71c1c",A100:"#ff8a80",A200:"#ff5252",A400:"#ff1744",A700:"#d50000"},Ch=Ibe,kbe={50:"#f3e5f5",100:"#e1bee7",200:"#ce93d8",300:"#ba68c8",400:"#ab47bc",500:"#9c27b0",600:"#8e24aa",700:"#7b1fa2",800:"#6a1b9a",900:"#4a148c",A100:"#ea80fc",A200:"#e040fb",A400:"#d500f9",A700:"#aa00ff"},Ah=kbe,Pbe={50:"#e3f2fd",100:"#bbdefb",200:"#90caf9",300:"#64b5f6",400:"#42a5f5",500:"#2196f3",600:"#1e88e5",700:"#1976d2",800:"#1565c0",900:"#0d47a1",A100:"#82b1ff",A200:"#448aff",A400:"#2979ff",A700:"#2962ff"},Mh=Pbe,Ebe={50:"#e1f5fe",100:"#b3e5fc",200:"#81d4fa",300:"#4fc3f7",400:"#29b6f6",500:"#03a9f4",600:"#039be5",700:"#0288d1",800:"#0277bd",900:"#01579b",A100:"#80d8ff",A200:"#40c4ff",A400:"#00b0ff",A700:"#0091ea"},Th=Ebe,Cbe={50:"#e8f5e9",100:"#c8e6c9",200:"#a5d6a7",300:"#81c784",400:"#66bb6a",500:"#4caf50",600:"#43a047",700:"#388e3c",800:"#2e7d32",900:"#1b5e20",A100:"#b9f6ca",A200:"#69f0ae",A400:"#00e676",A700:"#00c853"},Rh=Cbe,Abe={50:"#fff3e0",100:"#ffe0b2",200:"#ffcc80",300:"#ffb74d",400:"#ffa726",500:"#ff9800",600:"#fb8c00",700:"#f57c00",800:"#ef6c00",900:"#e65100",A100:"#ffd180",A200:"#ffab40",A400:"#ff9100",A700:"#ff6d00"},h2=Abe,Mbe={50:"#fafafa",100:"#f5f5f5",200:"#eeeeee",300:"#e0e0e0",400:"#bdbdbd",500:"#9e9e9e",600:"#757575",700:"#616161",800:"#424242",900:"#212121",A100:"#f5f5f5",A200:"#eeeeee",A400:"#bdbdbd",A700:"#616161"},Tbe=Mbe,GY="$$material",K0=O(Bl());de();var XY=O(xi());de();var Rbe=["values","unit","step"],zbe=s=>{let p=Object.keys(s).map(d=>({key:d,val:s[d]}))||[];return p.sort((d,w)=>d.val-w.val),p.reduce((d,w)=>K({},d,{[w.key]:w.val}),{})};function Lbe(s){let{values:p={xs:0,sm:600,md:900,lg:1200,xl:1536},unit:d="px",step:w=5}=s,_=Nn(s,Rbe),E=zbe(p),T=Object.keys(E);function z(ne){return`@media (min-width:${typeof p[ne]=="number"?p[ne]:ne}${d})`}function V(ne){return`@media (max-width:${(typeof p[ne]=="number"?p[ne]:ne)-w/100}${d})`}function H(ne,ie){let oe=T.indexOf(ie);return`@media (min-width:${typeof p[ne]=="number"?p[ne]:ne}${d}) and (max-width:${(oe!==-1&&typeof p[T[oe]]=="number"?p[T[oe]]:ie)-w/100}${d})`}function G(ne){return T.indexOf(ne)+1`@media (min-width:${TM[s]}px)`};function Ds(s,p,d){let w=s.theme||{};if(Array.isArray(p)){let _=w.breakpoints||KY;return p.reduce((E,T,z)=>(E[_.up(_.keys[z])]=d(p[z]),E),{})}if(typeof p=="object"){let _=w.breakpoints||KY;return Object.keys(p).reduce((E,T)=>{if(Object.keys(_.values||TM).indexOf(T)!==-1){let z=_.up(T);E[z]=d(p[T],T)}else{let z=T;E[z]=p[z]}return E},{})}return d(p)}function YY(s={}){var p;return((p=s.keys)==null?void 0:p.reduce((d,w)=>{let _=s.up(w);return d[_]={},d},{}))||{}}function QY(s,p){return s.reduce((d,w)=>{let _=d[w];return(!_||Object.keys(_).length===0)&&delete d[w],d},p)}function Hbe(s,...p){let d=YY(s),w=[d,...p].reduce((_,E)=>(0,Fbe.default)(_,E),{});return QY(Object.keys(d),w)}function Vbe(s,p){if(typeof s!="object")return{};let d={},w=Object.keys(p);return Array.isArray(s)?w.forEach((_,E)=>{E{s[_]!=null&&(d[_]=!0)}),d}function RM({values:s,breakpoints:p,base:d}){let w=d||Vbe(s,p),_=Object.keys(w);if(_.length===0)return s;let E;return _.reduce((T,z,V)=>(Array.isArray(s)?(T[z]=s[V]!=null?s[V]:s[E],E=V):typeof s=="object"?(T[z]=s[z]!=null?s[z]:s[E],E=z):T[z]=s,T),{})}var qbe=O(sn());function vS(s,p,d=!0){if(!p||typeof p!="string")return null;if(s&&s.vars&&d){let w=`vars.${p}`.split(".").reduce((_,E)=>_&&_[E]?_[E]:null,s);if(w!=null)return w}return p.split(".").reduce((w,_)=>w&&w[_]!=null?w[_]:null,s)}function yS(s,p,d,w=d){let _;return typeof s=="function"?_=s(d):Array.isArray(s)?_=s[d]||w:_=vS(s,d)||w,p&&(_=p(_,w,s)),_}function Ube(s){let{prop:p,cssProperty:d=s.prop,themeKey:w,transform:_}=s,E=T=>{if(T[p]==null)return null;let z=T[p],V=T.theme,H=vS(V,w)||{};return Ds(T,z,G=>{let ee=yS(H,_,G);return G===ee&&typeof G=="string"&&(ee=yS(H,_,`${p}${G==="default"?"":(0,qbe.default)(G)}`,G)),d===!1?ee:{[d]:ee}})};return E.propTypes={},E.filterProps=[p],E}var Fo=Ube;function $be(s){let p={};return d=>(p[d]===void 0&&(p[d]=s(d)),p[d])}var Jbe={m:"margin",p:"padding"},Gbe={t:"Top",r:"Right",b:"Bottom",l:"Left",x:["Left","Right"],y:["Top","Bottom"]},ZY={marginX:"mx",marginY:"my",paddingX:"px",paddingY:"py"},Xbe=$be(s=>{if(s.length>2)if(ZY[s])s=ZY[s];else return[s];let[p,d]=s.split(""),w=Jbe[p],_=Gbe[d]||"";return Array.isArray(_)?_.map(E=>w+E):[w+_]}),zM=["m","mt","mr","mb","ml","mx","my","margin","marginTop","marginRight","marginBottom","marginLeft","marginX","marginY","marginInline","marginInlineStart","marginInlineEnd","marginBlock","marginBlockStart","marginBlockEnd"],LM=["p","pt","pr","pb","pl","px","py","padding","paddingTop","paddingRight","paddingBottom","paddingLeft","paddingX","paddingY","paddingInline","paddingInlineStart","paddingInlineEnd","paddingBlock","paddingBlockStart","paddingBlockEnd"],eQ=[...zM,...LM];function v2(s,p,d,w){var _;let E=(_=vS(s,p,!1))!=null?_:d;return typeof E=="number"?T=>typeof T=="string"?T:E*T:Array.isArray(E)?T=>typeof T=="string"?T:E[T]:typeof E=="function"?E:()=>{}}function DM(s){return v2(s,"spacing",8,"spacing")}function Y0(s,p){if(typeof p=="string"||p==null)return p;let d=Math.abs(p),w=s(d);return p>=0?w:typeof w=="number"?-w:`-${w}`}function Kbe(s,p){return d=>s.reduce((w,_)=>(w[_]=Y0(p,d),w),{})}function Ybe(s,p,d,w){if(p.indexOf(d)===-1)return null;let _=Xbe(d),E=Kbe(_,w),T=s[d];return Ds(s,T,E)}function NM(s,p){let d=DM(s.theme);return Object.keys(s).map(w=>Ybe(s,p,w,d)).reduce(g2,{})}function ko(s){return NM(s,zM)}ko.propTypes={},ko.filterProps=zM;function Po(s){return NM(s,LM)}Po.propTypes={},Po.filterProps=LM;function tQ(s){return NM(s,eQ)}tQ.propTypes={},tQ.filterProps=eQ;function Qbe(s=8){if(s.mui)return s;let p=DM({spacing:s}),d=(...w)=>(w.length===0?[1]:w).map(_=>{let E=p(_);return typeof E=="number"?`${E}px`:E}).join(" ");return d.mui=!0,d}var Zbe=O(sn());function e3e(...s){let p=s.reduce((w,_)=>(_.filterProps.forEach(E=>{w[E]=_}),w),{}),d=w=>Object.keys(w).reduce((_,E)=>p[E]?g2(_,p[E](w)):_,{});return d.propTypes={},d.filterProps=s.reduce((w,_)=>w.concat(_.filterProps),[]),d}var bS=e3e;function Ul(s){return typeof s!="number"?s:`${s}px solid`}function $l(s,p){return Fo({prop:s,themeKey:"borders",transform:p})}var t3e=$l("border",Ul),r3e=$l("borderTop",Ul),n3e=$l("borderRight",Ul),o3e=$l("borderBottom",Ul),i3e=$l("borderLeft",Ul),a3e=$l("borderColor"),l3e=$l("borderTopColor"),s3e=$l("borderRightColor"),u3e=$l("borderBottomColor"),c3e=$l("borderLeftColor"),p3e=$l("outline",Ul),f3e=$l("outlineColor"),wS=s=>{if(s.borderRadius!==void 0&&s.borderRadius!==null){let p=v2(s.theme,"shape.borderRadius",4,"borderRadius"),d=w=>({borderRadius:Y0(p,w)});return Ds(s,s.borderRadius,d)}return null};wS.propTypes={},wS.filterProps=["borderRadius"];var tEt=bS(t3e,r3e,n3e,o3e,i3e,a3e,l3e,s3e,u3e,c3e,wS,p3e,f3e),OS=s=>{if(s.gap!==void 0&&s.gap!==null){let p=v2(s.theme,"spacing",8,"gap"),d=w=>({gap:Y0(p,w)});return Ds(s,s.gap,d)}return null};OS.propTypes={},OS.filterProps=["gap"];var xS=s=>{if(s.columnGap!==void 0&&s.columnGap!==null){let p=v2(s.theme,"spacing",8,"columnGap"),d=w=>({columnGap:Y0(p,w)});return Ds(s,s.columnGap,d)}return null};xS.propTypes={},xS.filterProps=["columnGap"];var _S=s=>{if(s.rowGap!==void 0&&s.rowGap!==null){let p=v2(s.theme,"spacing",8,"rowGap"),d=w=>({rowGap:Y0(p,w)});return Ds(s,s.rowGap,d)}return null};_S.propTypes={},_S.filterProps=["rowGap"];var d3e=Fo({prop:"gridColumn"}),m3e=Fo({prop:"gridRow"}),h3e=Fo({prop:"gridAutoFlow"}),g3e=Fo({prop:"gridAutoColumns"}),v3e=Fo({prop:"gridAutoRows"}),y3e=Fo({prop:"gridTemplateColumns"}),b3e=Fo({prop:"gridTemplateRows"}),w3e=Fo({prop:"gridTemplateAreas"}),O3e=Fo({prop:"gridArea"}),rEt=bS(OS,xS,_S,d3e,m3e,h3e,g3e,v3e,y3e,b3e,w3e,O3e);function zh(s,p){return p==="grey"?p:s}var x3e=Fo({prop:"color",themeKey:"palette",transform:zh}),_3e=Fo({prop:"bgcolor",cssProperty:"backgroundColor",themeKey:"palette",transform:zh}),S3e=Fo({prop:"backgroundColor",themeKey:"palette",transform:zh}),nEt=bS(x3e,_3e,S3e);function xl(s){return s<=1&&s!==0?`${s*100}%`:s}var j3e=Fo({prop:"width",transform:xl}),FM=s=>{if(s.maxWidth!==void 0&&s.maxWidth!==null){let p=d=>{var w,_;let E=((w=s.theme)==null||(w=w.breakpoints)==null||(w=w.values)==null?void 0:w[d])||TM[d];return E?((_=s.theme)==null||(_=_.breakpoints)==null?void 0:_.unit)!=="px"?{maxWidth:`${E}${s.theme.breakpoints.unit}`}:{maxWidth:E}:{maxWidth:xl(d)}};return Ds(s,s.maxWidth,p)}return null};FM.filterProps=["maxWidth"];var I3e=Fo({prop:"minWidth",transform:xl}),k3e=Fo({prop:"height",transform:xl}),P3e=Fo({prop:"maxHeight",transform:xl}),E3e=Fo({prop:"minHeight",transform:xl}),oEt=Fo({prop:"size",cssProperty:"width",transform:xl}),iEt=Fo({prop:"size",cssProperty:"height",transform:xl}),C3e=Fo({prop:"boxSizing"}),aEt=bS(j3e,FM,I3e,k3e,P3e,E3e,C3e),A3e={border:{themeKey:"borders",transform:Ul},borderTop:{themeKey:"borders",transform:Ul},borderRight:{themeKey:"borders",transform:Ul},borderBottom:{themeKey:"borders",transform:Ul},borderLeft:{themeKey:"borders",transform:Ul},borderColor:{themeKey:"palette"},borderTopColor:{themeKey:"palette"},borderRightColor:{themeKey:"palette"},borderBottomColor:{themeKey:"palette"},borderLeftColor:{themeKey:"palette"},outline:{themeKey:"borders",transform:Ul},outlineColor:{themeKey:"palette"},borderRadius:{themeKey:"shape.borderRadius",style:wS},color:{themeKey:"palette",transform:zh},bgcolor:{themeKey:"palette",cssProperty:"backgroundColor",transform:zh},backgroundColor:{themeKey:"palette",transform:zh},p:{style:Po},pt:{style:Po},pr:{style:Po},pb:{style:Po},pl:{style:Po},px:{style:Po},py:{style:Po},padding:{style:Po},paddingTop:{style:Po},paddingRight:{style:Po},paddingBottom:{style:Po},paddingLeft:{style:Po},paddingX:{style:Po},paddingY:{style:Po},paddingInline:{style:Po},paddingInlineStart:{style:Po},paddingInlineEnd:{style:Po},paddingBlock:{style:Po},paddingBlockStart:{style:Po},paddingBlockEnd:{style:Po},m:{style:ko},mt:{style:ko},mr:{style:ko},mb:{style:ko},ml:{style:ko},mx:{style:ko},my:{style:ko},margin:{style:ko},marginTop:{style:ko},marginRight:{style:ko},marginBottom:{style:ko},marginLeft:{style:ko},marginX:{style:ko},marginY:{style:ko},marginInline:{style:ko},marginInlineStart:{style:ko},marginInlineEnd:{style:ko},marginBlock:{style:ko},marginBlockStart:{style:ko},marginBlockEnd:{style:ko},displayPrint:{cssProperty:!1,transform:s=>({"@media print":{display:s}})},display:{},overflow:{},textOverflow:{},visibility:{},whiteSpace:{},flexBasis:{},flexDirection:{},flexWrap:{},justifyContent:{},alignItems:{},alignContent:{},order:{},flex:{},flexGrow:{},flexShrink:{},alignSelf:{},justifyItems:{},justifySelf:{},gap:{style:OS},rowGap:{style:_S},columnGap:{style:xS},gridColumn:{},gridRow:{},gridAutoFlow:{},gridAutoColumns:{},gridAutoRows:{},gridTemplateColumns:{},gridTemplateRows:{},gridTemplateAreas:{},gridArea:{},position:{},zIndex:{themeKey:"zIndex"},top:{},right:{},bottom:{},left:{},boxShadow:{themeKey:"shadows"},width:{transform:xl},maxWidth:{style:FM},minWidth:{transform:xl},height:{transform:xl},maxHeight:{transform:xl},minHeight:{transform:xl},boxSizing:{},fontFamily:{themeKey:"typography"},fontSize:{themeKey:"typography"},fontStyle:{themeKey:"typography"},fontWeight:{themeKey:"typography"},letterSpacing:{},textTransform:{},lineHeight:{},textAlign:{},typography:{cssProperty:!1,themeKey:"typography"}},WM=A3e;function M3e(...s){let p=s.reduce((w,_)=>w.concat(Object.keys(_)),[]),d=new Set(p);return s.every(w=>d.size===Object.keys(w).length)}function T3e(s,p){return typeof s=="function"?s(p):s}function R3e(){function s(d,w,_,E){let T={[d]:w,theme:_},z=E[d];if(!z)return{[d]:w};let{cssProperty:V=d,themeKey:H,transform:G,style:ee}=z;if(w==null)return null;if(H==="typography"&&w==="inherit")return{[d]:w};let ne=vS(_,H)||{};return ee?ee(T):Ds(T,w,ie=>{let oe=yS(ne,G,ie);return ie===oe&&typeof ie=="string"&&(oe=yS(ne,G,`${d}${ie==="default"?"":(0,Zbe.default)(ie)}`,ie)),V===!1?oe:{[V]:oe}})}function p(d){var w;let{sx:_,theme:E={}}=d||{};if(!_)return null;let T=(w=E.unstable_sxConfig)!=null?w:WM;function z(V){let H=V;if(typeof V=="function")H=V(E);else if(typeof V!="object")return V;if(!H)return null;let G=YY(E.breakpoints),ee=Object.keys(G),ne=G;return Object.keys(H).forEach(ie=>{let oe=T3e(H[ie],E);if(oe!=null)if(typeof oe=="object")if(T[ie])ne=g2(ne,s(ie,oe,E,T));else{let ce=Ds({theme:E},oe,me=>({[ie]:me}));M3e(ce,oe)?ne[ie]=p({sx:oe,theme:E}):ne=g2(ne,ce)}else ne=g2(ne,s(ie,oe,E,T))}),QY(ee,ne)}return Array.isArray(_)?_.map(z):z(_)}return p}var rQ=R3e();rQ.filterProps=["sx"];var nQ=rQ;function z3e(s,p){let d=this;return d.vars&&typeof d.getColorSchemeSelector=="function"?{[d.getColorSchemeSelector(s).replace(/(\[[^\]]+\])/,"*:where($1)")]:p}:d.palette.mode===s?p:{}}var L3e=["breakpoints","palette","spacing","shape"];function D3e(s={},...p){let{breakpoints:d={},palette:w={},spacing:_,shape:E={}}=s,T=Nn(s,L3e),z=Lbe(d),V=Qbe(_),H=(0,XY.default)({breakpoints:z,direction:"ltr",components:{},palette:K({mode:"light"},w),spacing:V,shape:K({},Nbe,E)},T);return H.applyStyles=z3e,H=p.reduce((G,ee)=>(0,XY.default)(G,ee),H),H.unstable_sxConfig=K({},WM,T?.unstable_sxConfig),H.unstable_sx=function(G){return nQ({sx:G,theme:this})},H}var BM=D3e,N3e=O(C()),F3e=O(Bl());function W3e(s){return Object.keys(s).length===0}function B3e(s=null){let p=N3e.useContext(F3e.ThemeContext);return!p||W3e(p)?s:p}var H3e=B3e,V3e=BM();function q3e(s=V3e){return H3e(s)}var U3e=q3e;de();var $3e=O(xi()),J3e=["sx"],G3e=s=>{var p,d;let w={systemProps:{},otherProps:{}},_=(p=s==null||(d=s.theme)==null?void 0:d.unstable_sxConfig)!=null?p:WM;return Object.keys(s).forEach(E=>{_[E]?w.systemProps[E]=s[E]:w.otherProps[E]=s[E]}),w};function X3e(s){let{sx:p}=s,d=Nn(s,J3e),{systemProps:w,otherProps:_}=G3e(d),E;return Array.isArray(p)?E=[w,...p]:typeof p=="function"?E=(...T)=>{let z=p(...T);return(0,$3e.isPlainObject)(z)?K({},w,z):w}:E=K({},w,p),K({},_,{sx:E})}var oQ=s=>s,K3e=()=>{let s=oQ;return{configure(p){s=p},generate(p){return s(p)},reset(){s=oQ}}},Y3e=K3e(),Q3e=Y3e;function iQ(s){var p,d,w="";if(typeof s=="string"||typeof s=="number")w+=s;else if(typeof s=="object")if(Array.isArray(s)){var _=s.length;for(p=0;p<_;p++)s[p]&&(d=iQ(s[p]))&&(w&&(w+=" "),w+=d)}else for(d in s)s[d]&&(w&&(w+=" "),w+=d);return w}function Z3e(){for(var s,p,d=0,w="",_=arguments.length;d<_;d++)(s=arguments[d])&&(p=iQ(s))&&(w&&(w+=" "),w+=p);return w}var Wo=Z3e,e5e={active:"active",checked:"checked",completed:"completed",disabled:"disabled",error:"error",expanded:"expanded",focused:"focused",focusVisible:"focusVisible",open:"open",readOnly:"readOnly",required:"required",selected:"selected"};function Jl(s,p,d="Mui"){let w=e5e[p];return w?`${d}-${w}`:`${Q3e.generate(s)}-${p}`}function Ns(s,p,d="Mui"){let w={};return p.forEach(_=>{w[_]=Jl(s,_,d)}),w}de();var aQ=O(Bl()),t5e=O(xi()),r5e=["ownerState"],n5e=["variants"],o5e=["name","slot","skipVariantsResolver","skipSx","overridesResolver"];function i5e(s){return Object.keys(s).length===0}function a5e(s){return typeof s=="string"&&s.charCodeAt(0)>96}function HM(s){return s!=="ownerState"&&s!=="theme"&&s!=="sx"&&s!=="as"}var l5e=BM(),s5e=s=>s&&s.charAt(0).toLowerCase()+s.slice(1);function SS({defaultTheme:s,theme:p,themeId:d}){return i5e(p)?s:p[d]||p}function u5e(s){return s?(p,d)=>d[s]:null}function jS(s,p){let{ownerState:d}=p,w=Nn(p,r5e),_=typeof s=="function"?s(K({ownerState:d},w)):s;if(Array.isArray(_))return _.flatMap(E=>jS(E,K({ownerState:d},w)));if(_&&typeof _=="object"&&Array.isArray(_.variants)){let{variants:E=[]}=_,T=Nn(_,n5e);return E.forEach(z=>{let V=!0;typeof z.props=="function"?V=z.props(K({ownerState:d},w,d)):Object.keys(z.props).forEach(H=>{d?.[H]!==z.props[H]&&w[H]!==z.props[H]&&(V=!1)}),V&&(Array.isArray(T)||(T=[T]),T.push(typeof z.style=="function"?z.style(K({ownerState:d},w,d)):z.style))}),T}return _}function c5e(s={}){let{themeId:p,defaultTheme:d=l5e,rootShouldForwardProp:w=HM,slotShouldForwardProp:_=HM}=s,E=T=>nQ(K({},T,{theme:SS(K({},T,{defaultTheme:d,themeId:p}))}));return E.__mui_systemSx=!0,(T,z={})=>{(0,aQ.internal_processStyles)(T,Pe=>Pe.filter(we=>!(we!=null&&we.__mui_systemSx)));let{name:V,slot:H,skipVariantsResolver:G,skipSx:ee,overridesResolver:ne=u5e(s5e(H))}=z,ie=Nn(z,o5e),oe=G!==void 0?G:H&&H!=="Root"&&H!=="root"||!1,ce=ee||!1,me,le=HM;H==="Root"||H==="root"?le=w:H?le=_:a5e(T)&&(le=void 0);let Te=(0,aQ.default)(T,K({shouldForwardProp:le,label:me},ie)),De=Pe=>typeof Pe=="function"&&Pe.__emotion_real!==Pe||(0,t5e.isPlainObject)(Pe)?we=>jS(Pe,K({},we,{theme:SS({theme:we.theme,defaultTheme:d,themeId:p})})):Pe,Ie=(Pe,...we)=>{let Ae=De(Pe),ue=we?we.map(De):[];V&&ne&&ue.push(Fe=>{let Je=SS(K({},Fe,{defaultTheme:d,themeId:p}));if(!Je.components||!Je.components[V]||!Je.components[V].styleOverrides)return null;let tt=Je.components[V].styleOverrides,gt={};return Object.entries(tt).forEach(([Ut,Gt])=>{gt[Ut]=jS(Gt,K({},Fe,{theme:Je}))}),ne(Fe,gt)}),V&&!oe&&ue.push(Fe=>{var Je;let tt=SS(K({},Fe,{defaultTheme:d,themeId:p})),gt=tt==null||(Je=tt.components)==null||(Je=Je[V])==null?void 0:Je.variants;return jS({variants:gt},K({},Fe,{theme:tt}))}),ce||ue.push(E);let je=ue.length-we.length;if(Array.isArray(Pe)&&je>0){let Fe=new Array(je).fill("");Ae=[...Pe,...Fe],Ae.raw=[...Pe.raw,...Fe]}let ze=Te(Ae,...ue);return T.muiName&&(ze.muiName=T.muiName),ze};return Te.withConfig&&(Ie.withConfig=Te.withConfig),Ie}}var p5e=c5e(),f5e=p5e;de();function lQ(s,p){let d=K({},p);return Object.keys(s).forEach(w=>{if(w.toString().match(/^(components|slots)$/))d[w]=K({},s[w],d[w]);else if(w.toString().match(/^(componentsProps|slotProps)$/)){let _=s[w]||{},E=p[w];d[w]={},!E||!Object.keys(E)?d[w]=_:!_||!Object.keys(_)?d[w]=E:(d[w]=K({},E),Object.keys(_).forEach(T=>{d[w][T]=lQ(_[T],E[T])}))}else d[w]===void 0&&(d[w]=s[w])}),d}function d5e(s){let{theme:p,name:d,props:w}=s;return!p||!p.components||!p.components[d]||!p.components[d].defaultProps?w:lQ(p.components[d].defaultProps,w)}function sQ({props:s,name:p,defaultTheme:d,themeId:w}){let _=U3e(d);return w&&(_=_[w]||_),d5e({theme:_,name:p,props:s})}var uQ=O(C()),m5e=typeof window<"u"?uQ.useLayoutEffect:uQ.useEffect,h5e=m5e;function g5e(...s){return s.reduce((p,d)=>d==null?p:function(...w){p.apply(this,w),d.apply(this,w)},()=>{})}var v5e=O(C());function y5e(s,p){var d,w;return v5e.isValidElement(s)&&p.indexOf((d=s.type.muiName)!=null?d:(w=s.type)==null||(w=w._payload)==null||(w=w.value)==null?void 0:w.muiName)!==-1}function b5e(s,p){typeof s=="function"?s(p):s&&(s.current=p)}var VM=O(C()),cQ=0;function w5e(s){let[p,d]=VM.useState(s),w=s||p;return VM.useEffect(()=>{p==null&&(cQ+=1,d(`mui-${cQ}`))},[p]),w}var pQ=VM["useId".toString()];function O5e(s){if(pQ!==void 0){let p=pQ();return s??p}return w5e(s)}var qM=O(C());function x5e({controlled:s,default:p,name:d,state:w="value"}){let{current:_}=qM.useRef(s!==void 0),[E,T]=qM.useState(p),z=_?s:E,V=qM.useCallback(H=>{_||T(H)},[]);return[z,V]}var fQ=O(C());function _5e(s){let p=fQ.useRef(s);return h5e(()=>{p.current=s}),fQ.useRef((...d)=>(0,p.current)(...d)).current}var S5e=_5e,j5e=O(C());function I5e(...s){return j5e.useMemo(()=>s.every(p=>p==null)?null:p=>{s.forEach(d=>{b5e(d,p)})},s)}var k5e=O(C()),dQ={};function P5e(s,p){let d=k5e.useRef(dQ);return d.current===dQ&&(d.current=s(p)),d}var E5e=O(C()),C5e=[];function A5e(s){E5e.useEffect(s,C5e)}var mQ=class C2e{constructor(){this.currentId=null,this.clear=()=>{this.currentId!==null&&(clearTimeout(this.currentId),this.currentId=null)},this.disposeEffect=()=>this.clear}static create(){return new C2e}start(p,d){this.clear(),this.currentId=setTimeout(()=>{this.currentId=null,d()},p)}};function M5e(){let s=P5e(mQ.create).current;return A5e(s.disposeEffect),s}var hQ=O(C()),IS=!0,UM=!1,T5e=new mQ,R5e={text:!0,search:!0,url:!0,tel:!0,email:!0,password:!0,number:!0,date:!0,month:!0,week:!0,time:!0,datetime:!0,"datetime-local":!0};function z5e(s){let{type:p,tagName:d}=s;return!!(d==="INPUT"&&R5e[p]&&!s.readOnly||d==="TEXTAREA"&&!s.readOnly||s.isContentEditable)}function L5e(s){s.metaKey||s.altKey||s.ctrlKey||(IS=!0)}function $M(){IS=!1}function D5e(){this.visibilityState==="hidden"&&UM&&(IS=!0)}function N5e(s){s.addEventListener("keydown",L5e,!0),s.addEventListener("mousedown",$M,!0),s.addEventListener("pointerdown",$M,!0),s.addEventListener("touchstart",$M,!0),s.addEventListener("visibilitychange",D5e,!0)}function F5e(s){let{target:p}=s;try{return p.matches(":focus-visible")}catch{}return IS||z5e(p)}function W5e(){let s=hQ.useCallback(_=>{_!=null&&N5e(_.ownerDocument)},[]),p=hQ.useRef(!1);function d(){return p.current?(UM=!0,T5e.start(100,()=>{UM=!1}),p.current=!1,!0):!1}function w(_){return F5e(_)?(p.current=!0,!0):!1}return{isFocusVisibleRef:p,onFocus:w,onBlur:d,ref:s}}function Fs(s,p,d=void 0){let w={};return Object.keys(s).forEach(_=>{w[_]=s[_].reduce((E,T)=>{if(T){let z=p(T);z!==""&&E.push(z),d&&d[T]&&E.push(d[T])}return E},[]).join(" ")}),w}de();var JM=O(C()),B5e=O(xi()),H5e=O(Xr()),V5e=["component","direction","spacing","divider","children","className","useFlexGap"],q5e=BM(),U5e=f5e("div",{name:"MuiStack",slot:"Root",overridesResolver:(s,p)=>p.root});function $5e(s){return sQ({props:s,name:"MuiStack",defaultTheme:q5e})}function J5e(s,p){let d=JM.Children.toArray(s).filter(Boolean);return d.reduce((w,_,E)=>(w.push(_),E({row:"Left","row-reverse":"Right",column:"Top","column-reverse":"Bottom"})[s],X5e=({ownerState:s,theme:p})=>{let d=K({display:"flex",flexDirection:"column"},Ds({theme:p},RM({values:s.direction,breakpoints:p.breakpoints.values}),w=>({flexDirection:w})));if(s.spacing){let w=DM(p),_=Object.keys(p.breakpoints.values).reduce((z,V)=>((typeof s.spacing=="object"&&s.spacing[V]!=null||typeof s.direction=="object"&&s.direction[V]!=null)&&(z[V]=!0),z),{}),E=RM({values:s.direction,base:_}),T=RM({values:s.spacing,base:_});typeof E=="object"&&Object.keys(E).forEach((z,V,H)=>{if(!E[z]){let G=V>0?E[H[V-1]]:"column";E[z]=G}}),d=(0,B5e.default)(d,Ds({theme:p},T,(z,V)=>s.useFlexGap?{gap:Y0(w,z)}:{"& > :not(style):not(style)":{margin:0},"& > :not(style) ~ :not(style)":{[`margin${G5e(V?E[V]:s.direction)}`]:Y0(w,z)}}))}return d=Hbe(p.breakpoints,d),d};function K5e(s={}){let{createStyledComponent:p=U5e,useThemeProps:d=$5e,componentName:w="MuiStack"}=s,_=()=>Fs({root:["root"]},T=>Jl(w,T),{}),E=p(X5e);return JM.forwardRef(function(T,z){let V=d(T),H=X3e(V),{component:G="div",direction:ee="column",spacing:ne=0,divider:ie,children:oe,className:ce,useFlexGap:me=!1}=H,le=Nn(H,V5e),Te={direction:ee,spacing:ne,useFlexGap:me},De=_();return(0,H5e.jsx)(E,K({as:G,ownerState:Te,ref:z,className:Wo(De.root,ce)},le,{children:ie?J5e(oe,ie):oe}))})}de();var Y5e=O(Qi()),GM=O(xi()),gQ=O(_0()),Q5e=O(Ym());de();function Z5e(s,p){return K({toolbar:{minHeight:56,[s.up("xs")]:{"@media (orientation: landscape)":{minHeight:48}},[s.up("sm")]:{minHeight:64}}},p)}de();var vQ=O(Qi()),e4e=O(xi()),XM=O(I0()),t4e=["mode","contrastThreshold","tonalOffset"],yQ={text:{primary:"rgba(0, 0, 0, 0.87)",secondary:"rgba(0, 0, 0, 0.6)",disabled:"rgba(0, 0, 0, 0.38)"},divider:"rgba(0, 0, 0, 0.12)",background:{paper:m2.white,default:m2.white},action:{active:"rgba(0, 0, 0, 0.54)",hover:"rgba(0, 0, 0, 0.04)",hoverOpacity:.04,selected:"rgba(0, 0, 0, 0.08)",selectedOpacity:.08,disabled:"rgba(0, 0, 0, 0.26)",disabledBackground:"rgba(0, 0, 0, 0.12)",disabledOpacity:.38,focus:"rgba(0, 0, 0, 0.12)",focusOpacity:.12,activatedOpacity:.12}},KM={text:{primary:m2.white,secondary:"rgba(255, 255, 255, 0.7)",disabled:"rgba(255, 255, 255, 0.5)",icon:"rgba(255, 255, 255, 0.5)"},divider:"rgba(255, 255, 255, 0.12)",background:{paper:"#121212",default:"#121212"},action:{active:m2.white,hover:"rgba(255, 255, 255, 0.08)",hoverOpacity:.08,selected:"rgba(255, 255, 255, 0.16)",selectedOpacity:.16,disabled:"rgba(255, 255, 255, 0.3)",disabledBackground:"rgba(255, 255, 255, 0.12)",disabledOpacity:.38,focus:"rgba(255, 255, 255, 0.12)",focusOpacity:.12,activatedOpacity:.24}};function bQ(s,p,d,w){let _=w.light||w,E=w.dark||w*1.5;s[p]||(s.hasOwnProperty(d)?s[p]=s[d]:p==="light"?s.light=(0,XM.lighten)(s.main,_):p==="dark"&&(s.dark=(0,XM.darken)(s.main,E)))}function r4e(s="light"){return s==="dark"?{main:Mh[200],light:Mh[50],dark:Mh[400]}:{main:Mh[700],light:Mh[400],dark:Mh[800]}}function n4e(s="light"){return s==="dark"?{main:Ah[200],light:Ah[50],dark:Ah[400]}:{main:Ah[500],light:Ah[300],dark:Ah[700]}}function o4e(s="light"){return s==="dark"?{main:Ch[500],light:Ch[300],dark:Ch[700]}:{main:Ch[700],light:Ch[400],dark:Ch[800]}}function i4e(s="light"){return s==="dark"?{main:Th[400],light:Th[300],dark:Th[700]}:{main:Th[700],light:Th[500],dark:Th[900]}}function a4e(s="light"){return s==="dark"?{main:Rh[400],light:Rh[300],dark:Rh[700]}:{main:Rh[800],light:Rh[500],dark:Rh[900]}}function l4e(s="light"){return s==="dark"?{main:h2[400],light:h2[300],dark:h2[700]}:{main:"#ed6c02",light:h2[500],dark:h2[900]}}function s4e(s){let{mode:p="light",contrastThreshold:d=3,tonalOffset:w=.2}=s,_=Nn(s,t4e),E=s.primary||r4e(p),T=s.secondary||n4e(p),z=s.error||o4e(p),V=s.info||i4e(p),H=s.success||a4e(p),G=s.warning||l4e(p);function ee(oe){return(0,XM.getContrastRatio)(oe,KM.text.primary)>=d?KM.text.primary:yQ.text.primary}let ne=({color:oe,name:ce,mainShade:me=500,lightShade:le=300,darkShade:Te=700})=>{if(oe=K({},oe),!oe.main&&oe[me]&&(oe.main=oe[me]),!oe.hasOwnProperty("main"))throw new Error((0,vQ.default)(11,ce?` (${ce})`:"",me));if(typeof oe.main!="string")throw new Error((0,vQ.default)(12,ce?` (${ce})`:"",JSON.stringify(oe.main)));return bQ(oe,"light",le,w),bQ(oe,"dark",Te,w),oe.contrastText||(oe.contrastText=ee(oe.main)),oe},ie={dark:KM,light:yQ};return(0,e4e.default)(K({common:K({},m2),mode:p,primary:ne({color:E,name:"primary"}),secondary:ne({color:T,name:"secondary",mainShade:"A400",lightShade:"A200",darkShade:"A700"}),error:ne({color:z,name:"error"}),warning:ne({color:G,name:"warning"}),info:ne({color:V,name:"info"}),success:ne({color:H,name:"success"}),grey:Tbe,contrastThreshold:d,getContrastText:ee,augmentColor:ne,tonalOffset:w},ie[p]),_)}de();var u4e=O(xi()),c4e=["fontFamily","fontSize","fontWeightLight","fontWeightRegular","fontWeightMedium","fontWeightBold","htmlFontSize","allVariants","pxToRem"];function p4e(s){return Math.round(s*1e5)/1e5}var wQ={textTransform:"uppercase"},OQ='"Roboto", "Helvetica", "Arial", sans-serif';function f4e(s,p){let d=typeof p=="function"?p(s):p,{fontFamily:w=OQ,fontSize:_=14,fontWeightLight:E=300,fontWeightRegular:T=400,fontWeightMedium:z=500,fontWeightBold:V=700,htmlFontSize:H=16,allVariants:G,pxToRem:ee}=d,ne=Nn(d,c4e),ie=_/14,oe=ee||(le=>`${le/H*ie}rem`),ce=(le,Te,De,Ie,Pe)=>K({fontFamily:w,fontWeight:le,fontSize:oe(Te),lineHeight:De},w===OQ?{letterSpacing:`${p4e(Ie/Te)}em`}:{},Pe,G),me={h1:ce(E,96,1.167,-1.5),h2:ce(E,60,1.2,-.5),h3:ce(T,48,1.167,0),h4:ce(T,34,1.235,.25),h5:ce(T,24,1.334,0),h6:ce(z,20,1.6,.15),subtitle1:ce(T,16,1.75,.15),subtitle2:ce(z,14,1.57,.1),body1:ce(T,16,1.5,.15),body2:ce(T,14,1.43,.15),button:ce(z,14,1.75,.4,wQ),caption:ce(T,12,1.66,.4),overline:ce(T,12,2.66,1,wQ),inherit:{fontFamily:"inherit",fontWeight:"inherit",fontSize:"inherit",lineHeight:"inherit",letterSpacing:"inherit"}};return(0,u4e.default)(K({htmlFontSize:H,pxToRem:oe,fontFamily:w,fontSize:_,fontWeightLight:E,fontWeightRegular:T,fontWeightMedium:z,fontWeightBold:V},me),ne,{clone:!1})}function vo(...s){return[`${s[0]}px ${s[1]}px ${s[2]}px ${s[3]}px rgba(0,0,0,${.2})`,`${s[4]}px ${s[5]}px ${s[6]}px ${s[7]}px rgba(0,0,0,${.14})`,`${s[8]}px ${s[9]}px ${s[10]}px ${s[11]}px rgba(0,0,0,${.12})`].join(",")}var d4e=["none",vo(0,2,1,-1,0,1,1,0,0,1,3,0),vo(0,3,1,-2,0,2,2,0,0,1,5,0),vo(0,3,3,-2,0,3,4,0,0,1,8,0),vo(0,2,4,-1,0,4,5,0,0,1,10,0),vo(0,3,5,-1,0,5,8,0,0,1,14,0),vo(0,3,5,-1,0,6,10,0,0,1,18,0),vo(0,4,5,-2,0,7,10,1,0,2,16,1),vo(0,5,5,-3,0,8,10,1,0,3,14,2),vo(0,5,6,-3,0,9,12,1,0,3,16,2),vo(0,6,6,-3,0,10,14,1,0,4,18,3),vo(0,6,7,-4,0,11,15,1,0,4,20,3),vo(0,7,8,-4,0,12,17,2,0,5,22,4),vo(0,7,8,-4,0,13,19,2,0,5,24,4),vo(0,7,9,-4,0,14,21,2,0,5,26,4),vo(0,8,9,-5,0,15,22,2,0,6,28,5),vo(0,8,10,-5,0,16,24,2,0,6,30,5),vo(0,8,11,-5,0,17,26,2,0,6,32,5),vo(0,9,11,-5,0,18,28,2,0,7,34,6),vo(0,9,12,-6,0,19,29,2,0,7,36,6),vo(0,10,13,-6,0,20,31,3,0,8,38,7),vo(0,10,13,-6,0,21,33,3,0,8,40,7),vo(0,10,14,-6,0,22,35,3,0,8,42,7),vo(0,11,14,-7,0,23,36,3,0,9,44,8),vo(0,11,15,-7,0,24,38,3,0,9,46,8)],m4e=d4e;de();var h4e=["duration","easing","delay"],g4e={easeInOut:"cubic-bezier(0.4, 0, 0.2, 1)",easeOut:"cubic-bezier(0.0, 0, 0.2, 1)",easeIn:"cubic-bezier(0.4, 0, 1, 1)",sharp:"cubic-bezier(0.4, 0, 0.6, 1)"},v4e={shortest:150,shorter:200,short:250,standard:300,complex:375,enteringScreen:225,leavingScreen:195};function xQ(s){return`${Math.round(s)}ms`}function y4e(s){if(!s)return 0;let p=s/36;return Math.round((4+15*p**.25+p/5)*10)}function b4e(s){let p=K({},g4e,s.easing),d=K({},v4e,s.duration);return K({getAutoHeightDuration:y4e,create:(w=["all"],_={})=>{let{duration:E=d.standard,easing:T=p.easeInOut,delay:z=0}=_,V=Nn(_,h4e);return(Array.isArray(w)?w:[w]).map(H=>`${H} ${typeof E=="string"?E:xQ(E)} ${T} ${typeof z=="string"?z:xQ(z)}`).join(",")}},s,{easing:p,duration:d})}var w4e={mobileStepper:1e3,fab:1050,speedDial:1050,appBar:1100,drawer:1200,modal:1300,snackbar:1400,tooltip:1500},O4e=w4e,x4e=["breakpoints","mixins","spacing","palette","transitions","typography","shape"];function _4e(s={},...p){let{mixins:d={},palette:w={},transitions:_={},typography:E={}}=s,T=Nn(s,x4e);if(s.vars)throw new Error((0,Y5e.default)(18));let z=s4e(w),V=(0,Q5e.default)(s),H=(0,GM.default)(V,{mixins:Z5e(V.breakpoints,d),palette:z,shadows:m4e.slice(),typography:f4e(z,E),transitions:b4e(_),zIndex:K({},O4e)});return H=(0,GM.default)(H,T),H=p.reduce((G,ee)=>(0,GM.default)(G,ee),H),H.unstable_sxConfig=K({},gQ.unstable_defaultSxConfig,T?.unstable_sxConfig),H.unstable_sx=function(G){return(0,gQ.default)({sx:G,theme:this})},H}var _Q=_4e,S4e=_Q(),SQ=S4e;function Ws({props:s,name:p}){return sQ({props:s,name:p,defaultTheme:SQ,themeId:GY})}var jQ=O(k0()),y2=s=>(0,jQ.shouldForwardProp)(s)&&s!=="classes",j4e=(0,jQ.default)({themeId:GY,defaultTheme:SQ,rootShouldForwardProp:y2}),Zo=j4e,I4e=O(sn()),Oo=I4e.default,k4e=g5e;de();var IQ=O(C());de();var kQ=O(C());function P4e(s){return Jl("MuiSvgIcon",s)}var lEt=Ns("MuiSvgIcon",["root","colorPrimary","colorSecondary","colorAction","colorError","colorDisabled","fontSizeInherit","fontSizeSmall","fontSizeMedium","fontSizeLarge"]),E4e=O(Xr()),C4e=O(Xr()),A4e=["children","className","color","component","fontSize","htmlColor","inheritViewBox","titleAccess","viewBox"],M4e=s=>{let{color:p,fontSize:d,classes:w}=s,_={root:["root",p!=="inherit"&&`color${Oo(p)}`,`fontSize${Oo(d)}`]};return Fs(_,P4e,w)},T4e=Zo("svg",{name:"MuiSvgIcon",slot:"Root",overridesResolver:(s,p)=>{let{ownerState:d}=s;return[p.root,d.color!=="inherit"&&p[`color${Oo(d.color)}`],p[`fontSize${Oo(d.fontSize)}`]]}})(({theme:s,ownerState:p})=>{var d,w,_,E,T,z,V,H,G,ee,ne,ie,oe;return{userSelect:"none",width:"1em",height:"1em",display:"inline-block",fill:p.hasSvgAsChild?void 0:"currentColor",flexShrink:0,transition:(d=s.transitions)==null||(w=d.create)==null?void 0:w.call(d,"fill",{duration:(_=s.transitions)==null||(_=_.duration)==null?void 0:_.shorter}),fontSize:{inherit:"inherit",small:((E=s.typography)==null||(T=E.pxToRem)==null?void 0:T.call(E,20))||"1.25rem",medium:((z=s.typography)==null||(V=z.pxToRem)==null?void 0:V.call(z,24))||"1.5rem",large:((H=s.typography)==null||(G=H.pxToRem)==null?void 0:G.call(H,35))||"2.1875rem"}[p.fontSize],color:(ee=(ne=(s.vars||s).palette)==null||(ne=ne[p.color])==null?void 0:ne.main)!=null?ee:{action:(ie=(s.vars||s).palette)==null||(ie=ie.action)==null?void 0:ie.active,disabled:(oe=(s.vars||s).palette)==null||(oe=oe.action)==null?void 0:oe.disabled,inherit:void 0}[p.color]}}),PQ=kQ.forwardRef(function(s,p){let d=Ws({props:s,name:"MuiSvgIcon"}),{children:w,className:_,color:E="inherit",component:T="svg",fontSize:z="medium",htmlColor:V,inheritViewBox:H=!1,titleAccess:G,viewBox:ee="0 0 24 24"}=d,ne=Nn(d,A4e),ie=kQ.isValidElement(w)&&w.type==="svg",oe=K({},d,{color:E,component:T,fontSize:z,instanceFontSize:s.fontSize,inheritViewBox:H,viewBox:ee,hasSvgAsChild:ie}),ce={};H||(ce.viewBox=ee);let me=M4e(oe);return(0,C4e.jsxs)(T4e,K({as:T,className:Wo(me.root,_),focusable:"false",color:V,"aria-hidden":G?void 0:!0,role:G?"img":void 0,ref:p},ce,ne,ie&&w.props,{ownerState:oe,children:[ie?w.props.children:w,G?(0,E4e.jsx)("title",{children:G}):null]}))});PQ.muiName="SvgIcon";var EQ=PQ,R4e=O(Xr());function b2(s,p){function d(w,_){return(0,R4e.jsx)(EQ,K({"data-testid":`${p}Icon`,ref:_},w,{children:s}))}return d.muiName=EQ.muiName,IQ.memo(IQ.forwardRef(d))}var YM=y5e,z4e=O5e,CQ=x5e,kS=S5e,QM=I5e,L4e=W5e;function ZM(s,p){return ZM=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(d,w){return d.__proto__=w,d},ZM(s,p)}function w2(s,p){s.prototype=Object.create(p.prototype),s.prototype.constructor=s,ZM(s,p)}var D4e=O(C()),AQ=D4e.default.createContext(null);de();function N4e(s){if(s===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return s}var PS=O(C()),Zc=O(C());function eT(s,p){var d=function(_){return p&&(0,Zc.isValidElement)(_)?p(_):_},w=Object.create(null);return s&&Zc.Children.map(s,function(_){return _}).forEach(function(_){w[_.key]=d(_)}),w}function F4e(s,p){s=s||{},p=p||{};function d(G){return G in p?p[G]:s[G]}var w=Object.create(null),_=[];for(var E in s)E in p?_.length&&(w[E]=_,_=[]):_.push(E);var T,z={};for(var V in p){if(w[V])for(T=0;T{if(!z&&V!=null){let ce=setTimeout(V,H);return()=>{clearTimeout(ce)}}},[V,z,H]),(0,TQ.jsx)("span",{className:ne,style:ie,children:(0,TQ.jsx)("span",{className:oe})})}var $4e=U4e,J4e=Ns("MuiTouchRipple",["root","ripple","rippleVisible","ripplePulsate","child","childLeaving","childPulsate"]),Gl=J4e,rT=O(Xr()),G4e=["center","classes","className"],ES=s=>s,RQ,zQ,LQ,DQ,nT=550,X4e=80,K4e=(0,K0.keyframes)(RQ||(RQ=ES` +Add a component higher in the tree to provide a loading indicator or placeholder to display.`)}zi!==5&&(zi=2),ye=zR(ye,pe),lt=re;do{switch(lt.tag){case 3:J=ye,lt.flags|=4096,c&=-c,lt.lanes|=c;var gr=Pte(lt,J,c);qee(lt,gr);break e;case 1:J=ye;var Ft=lt.type,vr=lt.stateNode;if(!(lt.flags&64)&&(typeof Ft.getDerivedStateFromError=="function"||vr!==null&&typeof vr.componentDidCatch=="function"&&(Xu===null||!Xu.has(vr)))){lt.flags|=4096,c&=-c,lt.lanes|=c;var Ur=kte(lt,J,c);qee(lt,Ur);break e}}lt=lt.return}while(lt!==null)}Vte(m)}catch(Rr){c=Rr,di===m&&m!==null&&(di=m=m.return);continue}break}while(1)}function Bte(){var l=Mj.current;return Mj.current=Cj,l===null?Cj:l}function db(l,c){var m=ur;ur|=16;var P=Bte();Ia===l&&ia===c||sg(l,c);do try{c8e();break}catch(N){Wte(l,N)}while(1);if(hR(),ur=m,Mj.current=P,di!==null)throw Error(_(261));return Ia=null,ia=0,zi}function c8e(){for(;di!==null;)Hte(di)}function p8e(){for(;di!==null&&!$7e();)Hte(di)}function Hte(l){var c=$te(l.alternate,l,m1);l.memoizedProps=l.pendingProps,c===null?Vte(l):di=c,WR.current=null}function Vte(l){var c=l;do{var m=c.alternate;if(l=c.return,c.flags&2048){if(m=r8e(c),m!==null){m.flags&=2047,di=m;return}l!==null&&(l.firstEffect=l.lastEffect=null,l.flags|=2048)}else{if(m=t8e(m,c,m1),m!==null){di=m;return}if(m=c,m.tag!==24&&m.tag!==23||m.memoizedState===null||m1&1073741824||!(m.mode&4)){for(var P=0,N=m.child;N!==null;)P|=N.lanes|N.childLanes,N=N.sibling;m.childLanes=P}l!==null&&!(l.flags&2048)&&(l.firstEffect===null&&(l.firstEffect=c.firstEffect),c.lastEffect!==null&&(l.lastEffect!==null&&(l.lastEffect.nextEffect=c.firstEffect),l.lastEffect=c.lastEffect),1re&&(pe=re,re=gr,gr=pe),pe=dee(Ee,gr),J=dee(Ee,re),pe&&J&&(et.rangeCount!==1||et.anchorNode!==pe.node||et.anchorOffset!==pe.offset||et.focusNode!==J.node||et.focusOffset!==J.offset)&&(Ye=Ye.createRange(),Ye.setStart(pe.node,pe.offset),et.removeAllRanges(),gr>re?(et.addRange(Ye),et.extend(J.node,J.offset)):(Ye.setEnd(J.node,J.offset),et.addRange(Ye)))))),Ye=[],et=Ee;et=et.parentNode;)et.nodeType===1&&Ye.push({element:et,left:et.scrollLeft,top:et.scrollTop});for(typeof Ee.focus=="function"&&Ee.focus(),Ee=0;Eena()-qR?sg(l,0):HR|=m),Zl(l,c)}function v8e(l,c){var m=l.stateNode;m!==null&&m.delete(c),c=0,c===0&&(c=l.mode,c&2?c&4?(up===0&&(up=og),c=Vh(62914560&~up),c===0&&(c=4194304)):c=Zh()===99?1:2:c=1),m=kl(),l=Nj(l,c),l!==null&&(QS(l,c,m),Zl(l,m))}var $te;$te=function(l,c,m){var P=c.lanes;if(l!==null)if(l.memoizedProps!==c.pendingProps||Za.current)$s=!0;else if(m&P)$s=!!(l.flags&16384);else{switch($s=!1,c.tag){case 3:vte(c),xR();break;case 5:Qee(c);break;case 1:el(c.type)&&dj(c);break;case 4:bR(c,c.stateNode.containerInfo);break;case 10:P=c.memoizedProps.value;var N=c.type._context;Eo(gj,N._currentValue),N._currentValue=P;break;case 13:if(c.memoizedState!==null)return m&c.child.childLanes?yte(l,c,m):(Eo(Co,Co.current&1),c=lp(l,c,m),c!==null?c.sibling:null);Eo(Co,Co.current&1);break;case 19:if(P=(m&c.childLanes)!==0,l.flags&64){if(P)return _te(l,c,m);c.flags|=64}if(N=c.memoizedState,N!==null&&(N.rendering=null,N.tail=null,N.lastEffect=null),Eo(Co,Co.current),P)break;return null;case 23:case 24:return c.lanes=0,CR(l,c,m)}return lp(l,c,m)}else $s=!1;switch(c.lanes=0,c.tag){case 2:if(P=c.type,l!==null&&(l.alternate=null,c.alternate=null,c.flags|=2),l=c.pendingProps,N=Qh(c,ra.current),tg(c,m),N=jR(null,c,P,l,N,m),c.flags|=1,typeof N=="object"&&N!==null&&typeof N.render=="function"&&N.$$typeof===void 0){if(c.tag=1,c.memoizedState=null,c.updateQueue=null,el(P)){var J=!0;dj(c)}else J=!1;c.memoizedState=N.state!==null&&N.state!==void 0?N.state:null,vR(c);var re=P.getDerivedStateFromProps;typeof re=="function"&&bj(c,P,re,l),N.updater=wj,c.stateNode=N,N._reactInternals=c,yR(c,P,l,m),c=MR(null,c,P,!0,J,m)}else c.tag=0,rl(null,c,N,m),c=c.child;return c;case 16:N=c.elementType;e:{switch(l!==null&&(l.alternate=null,c.alternate=null,c.flags|=2),l=c.pendingProps,J=N._init,N=J(N._payload),c.type=N,J=c.tag=b8e(N),l=Us(N,l),J){case 0:c=AR(null,c,N,l,m);break e;case 1:c=gte(null,c,N,l,m);break e;case 11:c=fte(null,c,N,l,m);break e;case 14:c=dte(null,c,N,Us(N.type,l),P,m);break e}throw Error(_(306,N,""))}return c;case 0:return P=c.type,N=c.pendingProps,N=c.elementType===P?N:Us(P,N),AR(l,c,P,N,m);case 1:return P=c.type,N=c.pendingProps,N=c.elementType===P?N:Us(P,N),gte(l,c,P,N,m);case 3:if(vte(c),P=c.updateQueue,l===null||P===null)throw Error(_(282));if(P=c.pendingProps,N=c.memoizedState,N=N!==null?N.element:null,Vee(l,c),K2(c,P,null,m),P=c.memoizedState.element,P===N)xR(),c=lp(l,c,m);else{if(N=c.stateNode,(J=N.hydrate)&&(Ff=Gh(c.stateNode.containerInfo.firstChild),ap=c,J=Ju=!0),J){if(l=N.mutableSourceEagerHydrationData,l!=null)for(N=0;N{"use strict";function d(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(d)}catch(w){console.error(w)}}d(),p.exports=R()}),Y=f(s=>{"use strict";var p=C();function d(ne,ie){return ne===ie&&(ne!==0||1/ne===1/ie)||ne!==ne&&ie!==ie}var w=typeof Object.is=="function"?Object.is:d,_=p.useState,E=p.useEffect,T=p.useLayoutEffect,z=p.useDebugValue;function V(ne,ie){var oe=ie(),ce=_({inst:{value:oe,getSnapshot:ie}}),me=ce[0].inst,ae=ce[1];return T(function(){me.value=oe,me.getSnapshot=ie,H(me)&&ae({inst:me})},[ne,oe,ie]),E(function(){return H(me)&&ae({inst:me}),ne(function(){H(me)&&ae({inst:me})})},[ne]),z(oe),oe}function H(ne){var ie=ne.getSnapshot;ne=ne.value;try{var oe=ie();return!w(ne,oe)}catch{return!0}}function G(ne,ie){return ie()}var ee=typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?G:V;s.useSyncExternalStore=p.useSyncExternalStore!==void 0?p.useSyncExternalStore:ee}),X=f((s,p)=>{"use strict";p.exports=Y()}),le=f(s=>{"use strict";var p=C(),d=X();function w(G,ee){return G===ee&&(G!==0||1/G===1/ee)||G!==G&&ee!==ee}var _=typeof Object.is=="function"?Object.is:w,E=d.useSyncExternalStore,T=p.useRef,z=p.useEffect,V=p.useMemo,H=p.useDebugValue;s.useSyncExternalStoreWithSelector=function(G,ee,ne,ie,oe){var ce=T(null);if(ce.current===null){var me={hasValue:!1,value:null};ce.current=me}else me=ce.current;ce=V(function(){function Te(Ae){if(!Ne){if(Ne=!0,je=Ae,Ae=ie(Ae),oe!==void 0&&me.hasValue){var ue=me.value;if(oe(ue,Ae))return ke=ue}return ke=Ae}if(ue=ke,_(je,Ae))return ue;var Se=ie(Ae);return oe!==void 0&&oe(ue,Se)?ue:(je=Ae,ke=Se)}var Ne=!1,je,ke,we=ne===void 0?null:ne;return[function(){return Te(ee())},we===null?void 0:function(){return Te(we())}]},[ee,ne,ie,oe]);var ae=E(G,ce[0],ce[1]);return z(function(){me.hasValue=!0,me.value=ae},[ae]),H(ae),ae}}),Z=f((s,p)=>{"use strict";p.exports=le()});function K(){return K=Object.assign?Object.assign.bind():function(s){for(var p=1;p{}),se=f(s=>{"use strict";var p=typeof Symbol=="function"&&Symbol.for,d=p?Symbol.for("react.element"):60103,w=p?Symbol.for("react.portal"):60106,_=p?Symbol.for("react.fragment"):60107,E=p?Symbol.for("react.strict_mode"):60108,T=p?Symbol.for("react.profiler"):60114,z=p?Symbol.for("react.provider"):60109,V=p?Symbol.for("react.context"):60110,H=p?Symbol.for("react.async_mode"):60111,G=p?Symbol.for("react.concurrent_mode"):60111,ee=p?Symbol.for("react.forward_ref"):60112,ne=p?Symbol.for("react.suspense"):60113,ie=p?Symbol.for("react.suspense_list"):60120,oe=p?Symbol.for("react.memo"):60115,ce=p?Symbol.for("react.lazy"):60116,me=p?Symbol.for("react.block"):60121,ae=p?Symbol.for("react.fundamental"):60117,Te=p?Symbol.for("react.responder"):60118,Ne=p?Symbol.for("react.scope"):60119;function je(we){if(typeof we=="object"&&we!==null){var Ae=we.$$typeof;switch(Ae){case d:switch(we=we.type,we){case H:case G:case _:case T:case E:case ne:return we;default:switch(we=we&&we.$$typeof,we){case V:case ee:case ce:case oe:case z:return we;default:return Ae}}case w:return Ae}}}function ke(we){return je(we)===G}s.AsyncMode=H,s.ConcurrentMode=G,s.ContextConsumer=V,s.ContextProvider=z,s.Element=d,s.ForwardRef=ee,s.Fragment=_,s.Lazy=ce,s.Memo=oe,s.Portal=w,s.Profiler=T,s.StrictMode=E,s.Suspense=ne,s.isAsyncMode=function(we){return ke(we)||je(we)===H},s.isConcurrentMode=ke,s.isContextConsumer=function(we){return je(we)===V},s.isContextProvider=function(we){return je(we)===z},s.isElement=function(we){return typeof we=="object"&&we!==null&&we.$$typeof===d},s.isForwardRef=function(we){return je(we)===ee},s.isFragment=function(we){return je(we)===_},s.isLazy=function(we){return je(we)===ce},s.isMemo=function(we){return je(we)===oe},s.isPortal=function(we){return je(we)===w},s.isProfiler=function(we){return je(we)===T},s.isStrictMode=function(we){return je(we)===E},s.isSuspense=function(we){return je(we)===ne},s.isValidElementType=function(we){return typeof we=="string"||typeof we=="function"||we===_||we===G||we===T||we===E||we===ne||we===ie||typeof we=="object"&&we!==null&&(we.$$typeof===ce||we.$$typeof===oe||we.$$typeof===z||we.$$typeof===V||we.$$typeof===ee||we.$$typeof===ae||we.$$typeof===Te||we.$$typeof===Ne||we.$$typeof===me)},s.typeOf=je}),_e=f((s,p)=>{"use strict";p.exports=se()}),be=f((s,p)=>{"use strict";var d=_e(),w={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},_={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},E={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},T={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},z={};z[d.ForwardRef]=E,z[d.Memo]=T;function V(me){return d.isMemo(me)?T:z[me.$$typeof]||w}var H=Object.defineProperty,G=Object.getOwnPropertyNames,ee=Object.getOwnPropertySymbols,ne=Object.getOwnPropertyDescriptor,ie=Object.getPrototypeOf,oe=Object.prototype;function ce(me,ae,Te){if(typeof ae!="string"){if(oe){var Ne=ie(ae);Ne&&Ne!==oe&&ce(me,Ne,Te)}var je=G(ae);ee&&(je=je.concat(ee(ae)));for(var ke=V(me),we=V(ae),Ae=0;Ae{"use strict";var p=Symbol.for("react.element"),d=Symbol.for("react.portal"),w=Symbol.for("react.fragment"),_=Symbol.for("react.strict_mode"),E=Symbol.for("react.profiler"),T=Symbol.for("react.provider"),z=Symbol.for("react.context"),V=Symbol.for("react.server_context"),H=Symbol.for("react.forward_ref"),G=Symbol.for("react.suspense"),ee=Symbol.for("react.suspense_list"),ne=Symbol.for("react.memo"),ie=Symbol.for("react.lazy"),oe=Symbol.for("react.offscreen"),ce;ce=Symbol.for("react.module.reference");function me(ae){if(typeof ae=="object"&&ae!==null){var Te=ae.$$typeof;switch(Te){case p:switch(ae=ae.type,ae){case w:case E:case _:case G:case ee:return ae;default:switch(ae=ae&&ae.$$typeof,ae){case V:case z:case H:case ie:case ne:case T:return ae;default:return Te}}case d:return Te}}}s.ContextConsumer=z,s.ContextProvider=T,s.Element=p,s.ForwardRef=H,s.Fragment=w,s.Lazy=ie,s.Memo=ne,s.Portal=d,s.Profiler=E,s.StrictMode=_,s.Suspense=G,s.SuspenseList=ee,s.isAsyncMode=function(){return!1},s.isConcurrentMode=function(){return!1},s.isContextConsumer=function(ae){return me(ae)===z},s.isContextProvider=function(ae){return me(ae)===T},s.isElement=function(ae){return typeof ae=="object"&&ae!==null&&ae.$$typeof===p},s.isForwardRef=function(ae){return me(ae)===H},s.isFragment=function(ae){return me(ae)===w},s.isLazy=function(ae){return me(ae)===ie},s.isMemo=function(ae){return me(ae)===ne},s.isPortal=function(ae){return me(ae)===d},s.isProfiler=function(ae){return me(ae)===E},s.isStrictMode=function(ae){return me(ae)===_},s.isSuspense=function(ae){return me(ae)===G},s.isSuspenseList=function(ae){return me(ae)===ee},s.isValidElementType=function(ae){return typeof ae=="string"||typeof ae=="function"||ae===w||ae===E||ae===_||ae===G||ae===ee||ae===oe||typeof ae=="object"&&ae!==null&&(ae.$$typeof===ie||ae.$$typeof===ne||ae.$$typeof===T||ae.$$typeof===z||ae.$$typeof===H||ae.$$typeof===ce||ae.getModuleId!==void 0)},s.typeOf=me}),Ue=f((s,p)=>{"use strict";p.exports=Pe()}),Le=f((s,p)=>{"use strict";function d(_,E){for(var T=_.keys(),z;!(z=T.next()).done;)E(_.get(z.value),z.value,_)}var w=function(){var _;typeof Map<"u"&&(_=Map,Map.prototype.keys||(Map.prototype.keys=function(){var V=[];return this.forEach(function(H,G){V.push(G)}),V}));function E(V){var H=this;H._map=_,E.Map&&(H._map=E.Map),H._=H._map?new H._map:{},V&&V.forEach(function(G){H.set(G[0],G[1])})}E.prototype.get=function(V){return this._map?this._.get(V):this._[V]},E.prototype.set=function(V,H){var G=Array.prototype.slice.call(arguments);V=G.shift();var ee=this.get(V);return ee||(ee=[],this._map?this._.set(V,ee):this._[V]=ee),Array.prototype.push.apply(ee,G),this},E.prototype.delete=function(V,H){if(!this.has(V))return!1;if(arguments.length==1)return this._map?this._.delete(V):delete this._[V],!0;var G=this.get(V),ee=G.indexOf(H);return ee!=-1?(G.splice(ee,1),!0):!1},E.prototype.has=function(V,H){var G=this._map?this._.has(V):this._.hasOwnProperty(V);if(arguments.length==1||!G)return G;var ee=this.get(V)||[];return ee.indexOf(H)!=-1},E.prototype.keys=function(){return this._map?z(this._.keys()):z(Object.keys(this._))},E.prototype.values=function(){var V=[];return this.forEachEntry(function(H){Array.prototype.push.apply(V,H)}),z(V)},E.prototype.forEachEntry=function(V){d(this,V)},E.prototype.forEach=function(V){var H=this;H.forEachEntry(function(G,ee){G.forEach(function(ne){V(ne,ee,H)})})},E.prototype.clear=function(){this._map?this._.clear():this._={}},Object.defineProperty(E.prototype,"size",{configurable:!1,enumerable:!0,get:function(){var V=0;return d(this,function(H){V+=H.length}),V}}),Object.defineProperty(E.prototype,"count",{configurable:!1,enumerable:!0,get:function(){return this._.size}});var T;try{T=new Function("iterator","makeIterator","var keysArray = []; for(var key of iterator){keysArray.push(key);} return makeIterator(keysArray).next;")}catch{}function z(V){if(Array.isArray(V)){var H=0;return{next:function(){return H{rt=function(){function s(d){var w=this;this._insertTag=function(_){var E;w.tags.length===0?w.insertionPoint?E=w.insertionPoint.nextSibling:w.prepend?E=w.container.firstChild:E=w.before:E=w.tags[w.tags.length-1].nextSibling,w.container.insertBefore(_,E),w.tags.push(_)},this.isSpeedy=d.speedy===void 0?!0:d.speedy,this.tags=[],this.ctr=0,this.nonce=d.nonce,this.key=d.key,this.container=d.container,this.prepend=d.prepend,this.insertionPoint=d.insertionPoint,this.before=null}var p=s.prototype;return p.hydrate=function(d){d.forEach(this._insertTag)},p.insert=function(d){this.ctr%(this.isSpeedy?65e3:1)===0&&this._insertTag(Ke(this));var w=this.tags[this.tags.length-1];if(!1)var _;if(this.isSpeedy){var E=Ge(w);try{E.insertRule(d,E.cssRules.length)}catch{}}else w.appendChild(document.createTextNode(d));this.ctr++},p.flush=function(){this.tags.forEach(function(d){return d.parentNode&&d.parentNode.removeChild(d)}),this.tags=[],this.ctr=0},s}()}),dt,jt,Ze,Xt,at,lr,ht,xt,dr,yr=u(()=>{dt="-ms-",jt="-moz-",Ze="-webkit-",Xt="comm",at="rule",lr="decl",ht="@import",xt="@keyframes",dr="@layer"});function Hr(s,p){return nn(s,0)^45?(((p<<2^nn(s,0))<<2^nn(s,1))<<2^nn(s,2))<<2^nn(s,3):0}function ln(s){return s.trim()}function Sr(s,p){return(s=p.exec(s))?s[0]:s}function Bt(s,p,d){return s.replace(p,d)}function sn(s,p){return s.indexOf(p)}function nn(s,p){return s.charCodeAt(p)|0}function no(s,p,d){return s.slice(p,d)}function Xn(s){return s.length}function po(s){return s.length}function So(s,p){return p.push(s),s}function An(s,p){return s.map(p).join("")}var Vr,gn,zo,vn=u(()=>{Vr=Math.abs,gn=String.fromCharCode,zo=Object.assign});function yn(s,p,d,w,_,E,T){return{value:s,root:p,parent:d,type:w,props:_,children:E,line:js,column:Ba,length:T,return:""}}function Xo(s,p){return zo(yn("",null,null,"",null,null,0),s,{length:-s.length},p)}function Pc(){return oo}function _s(){return oo=li>0?nn(si,--li):0,Ba--,oo===10&&(Ba=1,js--),oo}function mr(){return oo=li2||Ll(oo)>3?"":" "}function Bp(s,p){for(;--p&&mr()&&!(oo<48||oo>102||oo>57&&oo<65||oo>70&&oo<97););return ml(s,kc()+(p<6&&ya()==32&&mr()==32))}function t0(s){for(;mr();)switch(oo){case s:return li;case 34:case 39:s!==34&&s!==39&&t0(oo);break;case 40:s===41&&t0(s);break;case 92:mr();break}return li}function Cc(s,p){for(;mr()&&s+oo!==47+10&&!(s+oo===42+42&&ya()===47););return"/*"+ml(p,li-1)+"*"+gn(s===47?s:mr())}function wu(s){for(;!Ll(ya());)mr();return ml(s,li)}var js,Ba,St,li,oo,si,Ei=u(()=>{vn(),js=1,Ba=1,St=0,li=0,oo=0,si=""});function Cr(s){return Ss(Ou("",null,null,null,[""],s=Ec(s),0,[0],s))}function Ou(s,p,d,w,_,E,T,z,V){for(var H=0,G=0,ee=T,ne=0,ie=0,oe=0,ce=1,me=1,ae=1,Te=0,Ne="",je=_,ke=E,we=w,Ae=Ne;me;)switch(oe=Te,Te=mr()){case 40:if(oe!=108&&nn(Ae,ee-1)==58){sn(Ae+=Bt(Dl(Te),"&","&\f"),"&\f")!=-1&&(ae=-1);break}case 34:case 39:case 91:Ae+=Dl(Te);break;case 9:case 10:case 13:case 32:Ae+=wm(oe);break;case 92:Ae+=Bp(kc()-1,7);continue;case 47:switch(ya()){case 42:case 47:So(xu(Cc(mr(),kc()),p,d),V);break;default:Ae+="/"}break;case 123*ce:z[H++]=Xn(Ae)*ae;case 125*ce:case 59:case 0:switch(Te){case 0:case 125:me=0;case 59+G:ae==-1&&(Ae=Bt(Ae,/\f/g,"")),ie>0&&Xn(Ae)-ee&&So(ie>32?Om(Ae+";",w,d,ee-1):Om(Bt(Ae," ","")+";",w,d,ee-2),V);break;case 59:Ae+=";";default:if(So(we=un(Ae,p,d,H,G,_,z,Ne,je=[],ke=[],ee),E),Te===123)if(G===0)Ou(Ae,p,we,we,je,E,ee,z,ke);else switch(ne===99&&nn(Ae,3)===110?100:ne){case 100:case 108:case 109:case 115:Ou(s,we,we,w&&So(un(s,we,we,0,0,_,z,Ne,_,je=[],ee),ke),_,ke,ee,z,w?je:ke);break;default:Ou(Ae,we,we,we,[""],ke,0,z,ke)}}H=G=ie=0,ce=ae=1,Ne=Ae="",ee=T;break;case 58:ee=1+Xn(Ae),ie=oe;default:if(ce<1){if(Te==123)--ce;else if(Te==125&&ce++==0&&_s()==125)continue}switch(Ae+=gn(Te),Te*ce){case 38:ae=G>0?1:(Ae+="\f",-1);break;case 44:z[H++]=(Xn(Ae)-1)*ae,ae=1;break;case 64:ya()===45&&(Ae+=Dl(mr())),ne=ya(),G=ee=Xn(Ne=Ae+=wu(kc())),Te++;break;case 45:oe===45&&Xn(Ae)==2&&(ce=0)}}return E}function un(s,p,d,w,_,E,T,z,V,H,G){for(var ee=_-1,ne=_===0?E:[""],ie=po(ne),oe=0,ce=0,me=0;oe0?ne[ae]+" "+Te:Bt(Te,/&\f/g,ne[ae])))&&(V[me++]=Ne);return yn(s,p,d,_===0?at:z,V,H,G)}function xu(s,p,d){return yn(s,p,d,Xt,gn(Pc()),no(s,2,-2),0)}function Om(s,p,d,w){return yn(s,p,d,lr,no(s,0,w),no(s,w+1,-1),w)}var Hp=u(()=>{yr(),vn(),Ei()}),Ko=u(()=>{});function Lo(s,p){for(var d="",w=po(s),_=0;_{yr(),vn()});function ba(s){var p=po(s);return function(d,w,_,E){for(var T="",z=0;z{vn()}),xm=u(()=>{yr(),vn(),Hp(),Ko(),Ei(),fo(),Is()}),r0,Nl=u(()=>{r0=function(s){var p=new WeakMap;return function(d){if(p.has(d))return p.get(d);var w=s(d);return p.set(d,w),w}}});function n0(s){var p=Object.create(null);return function(d){return p[d]===void 0&&(p[d]=s(d)),p[d]}}var Vp=u(()=>{}),Ps={};h(Ps,{default:()=>Va});function _u(s,p){switch(Hr(s,p)){case 5103:return Ze+"print-"+s+s;case 5737:case 4201:case 3177:case 3433:case 1641:case 4457:case 2921:case 5572:case 6356:case 5844:case 3191:case 6645:case 3005:case 6391:case 5879:case 5623:case 6135:case 4599:case 4855:case 4215:case 6389:case 5109:case 5365:case 5621:case 3829:return Ze+s+s;case 5349:case 4246:case 4810:case 6968:case 2756:return Ze+s+jt+s+dt+s+s;case 6828:case 4268:return Ze+s+dt+s+s;case 6165:return Ze+s+dt+"flex-"+s+s;case 5187:return Ze+s+Bt(s,/(\w+).+(:[^]+)/,Ze+"box-$1$2"+dt+"flex-$1$2")+s;case 5443:return Ze+s+dt+"flex-item-"+Bt(s,/flex-|-self/,"")+s;case 4675:return Ze+s+dt+"flex-line-pack"+Bt(s,/align-content|flex-|-self/,"")+s;case 5548:return Ze+s+dt+Bt(s,"shrink","negative")+s;case 5292:return Ze+s+dt+Bt(s,"basis","preferred-size")+s;case 6060:return Ze+"box-"+Bt(s,"-grow","")+Ze+s+dt+Bt(s,"grow","positive")+s;case 4554:return Ze+Bt(s,/([^-])(transform)/g,"$1"+Ze+"$2")+s;case 6187:return Bt(Bt(Bt(s,/(zoom-|grab)/,Ze+"$1"),/(image-set)/,Ze+"$1"),s,"")+s;case 5495:case 3959:return Bt(s,/(image-set\([^]*)/,Ze+"$1$`$1");case 4968:return Bt(Bt(s,/(.+:)(flex-)?(.*)/,Ze+"box-pack:$3"+dt+"flex-pack:$3"),/s.+-b[^;]+/,"justify")+Ze+s+s;case 4095:case 3583:case 4068:case 2532:return Bt(s,/(.+)-inline(.+)/,Ze+"$1$2")+s;case 8116:case 7059:case 5753:case 5535:case 5445:case 5701:case 4933:case 4677:case 5533:case 5789:case 5021:case 4765:if(Xn(s)-1-p>6)switch(nn(s,p+1)){case 109:if(nn(s,p+4)!==45)break;case 102:return Bt(s,/(.+:)(.+)-([^]+)/,"$1"+Ze+"$2-$3$1"+jt+(nn(s,p+3)==108?"$3":"$2-$3"))+s;case 115:return~sn(s,"stretch")?_u(Bt(s,"stretch","fill-available"),p)+s:s}break;case 4949:if(nn(s,p+1)!==115)break;case 6444:switch(nn(s,Xn(s)-3-(~sn(s,"!important")&&10))){case 107:return Bt(s,":",":"+Ze)+s;case 101:return Bt(s,/(.+:)([^;!]+)(;|!.+)?/,"$1"+Ze+(nn(s,14)===45?"inline-":"")+"box$3$1"+Ze+"$2$3$1"+dt+"$2box$3")+s}break;case 5936:switch(nn(s,p+11)){case 114:return Ze+s+dt+Bt(s,/[svh]\w+-[tblr]{2}/,"tb")+s;case 108:return Ze+s+dt+Bt(s,/[svh]\w+-[tblr]{2}/,"tb-rl")+s;case 45:return Ze+s+dt+Bt(s,/[svh]\w+-[tblr]{2}/,"lr")+s}return Ze+s+dt+s+s}return s}var qp,_m,Sm,o0,Kn,Up,jm,Ac,Va,Mc=u(()=>{ot(),xm(),Nl(),Vp(),qp=function(s,p,d){for(var w=0,_=0;w=_,_=ya(),w===38&&_===12&&(p[d]=1),!Ll(_);)mr();return ml(s,li)},_m=function(s,p){var d=-1,w=44;do switch(Ll(w)){case 0:w===38&&ya()===12&&(p[d]=1),s[d]+=qp(li-1,p,d);break;case 2:s[d]+=Dl(w);break;case 4:if(w===44){s[++d]=ya()===58?"&\f":"",p[d]=s[d].length;break}default:s[d]+=gn(w)}while(w=mr());return s},Sm=function(s,p){return Ss(_m(Ec(s),p))},o0=new WeakMap,Kn=function(s){if(!(s.type!=="rule"||!s.parent||s.length<1)){for(var p=s.value,d=s.parent,w=s.column===d.column&&s.line===d.line;d.type!=="rule";)if(d=d.parent,!d)return;if(!(s.props.length===1&&p.charCodeAt(0)!==58&&!o0.get(d))&&!w){o0.set(s,!0);for(var _=[],E=Sm(p,_),T=d.props,z=0,V=0;z-1&&!s.return)switch(s.type){case lr:s.return=_u(s.value,s.length);break;case xt:return Lo([Xo(s,{value:Bt(s.value,"@","@"+Ze)})],w);case at:if(s.length)return An(s.props,function(_){switch(Sr(_,/(::plac\w+|:read-\w+)/)){case":read-only":case":read-write":return Lo([Xo(s,{props:[Bt(_,/:(read-\w+)/,":"+jt+"$1")]})],w);case"::placeholder":return Lo([Xo(s,{props:[Bt(_,/:(plac\w+)/,":"+Ze+"input-$1")]}),Xo(s,{props:[Bt(_,/:(plac\w+)/,":"+jt+"$1")]}),Xo(s,{props:[Bt(_,/:(plac\w+)/,dt+"input-$1")]})],w)}return""})}},Ac=[jm],Va=function(s){var p=s.key;if(p==="css"){var d=document.querySelectorAll("style[data-emotion]:not([data-s])");Array.prototype.forEach.call(d,function(oe){var ce=oe.getAttribute("data-emotion");ce.indexOf(" ")!==-1&&(document.head.appendChild(oe),oe.setAttribute("data-s",""))})}var w=s.stylisPlugins||Ac,_={},E,T=[];E=s.container||document.head,Array.prototype.forEach.call(document.querySelectorAll('style[data-emotion^="'+p+' "]'),function(oe){for(var ce=oe.getAttribute("data-emotion").split(" "),me=1;me{ks=O(be()),Im=function(s,p){return(0,ks.default)(s,p)}});function i0(s,p,d){var w="";return d.split(" ").forEach(function(_){s[_]!==void 0?p.push(s[_]+";"):w+=_+" "}),w}var Pm,Su,Es,Tc=u(()=>{Pm=!0,Su=function(s,p,d){var w=s.key+"-"+p.name;(d===!1||Pm===!1)&&s.registered[w]===void 0&&(s.registered[w]=p.styles)},Es=function(s,p,d){Su(s,p,d);var w=s.key+"-"+p.name;if(s.inserted[p.name]===void 0){var _=p;do s.insert(p===_?"."+w:"",_,s.sheet,!0),_=_.next;while(_!==void 0)}}});function zy(s){for(var p=0,d,w=0,_=s.length;_>=4;++w,_-=4)d=s.charCodeAt(w)&255|(s.charCodeAt(++w)&255)<<8|(s.charCodeAt(++w)&255)<<16|(s.charCodeAt(++w)&255)<<24,d=(d&65535)*1540483477+((d>>>16)*59797<<16),d^=d>>>24,p=(d&65535)*1540483477+((d>>>16)*59797<<16)^(p&65535)*1540483477+((p>>>16)*59797<<16);switch(_){case 3:p^=(s.charCodeAt(w+2)&255)<<16;case 2:p^=(s.charCodeAt(w+1)&255)<<8;case 1:p^=s.charCodeAt(w)&255,p=(p&65535)*1540483477+((p>>>16)*59797<<16)}return p^=p>>>13,p=(p&65535)*1540483477+((p>>>16)*59797<<16),((p^p>>>15)>>>0).toString(36)}var Ly=u(()=>{}),a0,Dy=u(()=>{a0={animationIterationCount:1,aspectRatio:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1}});function qa(s,p,d){if(d==null)return"";if(d.__emotion_styles!==void 0)return d;switch(typeof d){case"boolean":return"";case"object":{if(d.anim===1)return Ua={name:d.name,styles:d.styles,next:Ua},d.name;if(d.styles!==void 0){var w=d.next;if(w!==void 0)for(;w!==void 0;)Ua={name:w.name,styles:w.styles,next:Ua},w=w.next;var _=d.styles+";";return _}return Rc(s,p,d)}case"function":{if(s!==void 0){var E=Ua,T=d(s);return Ua=E,qa(s,p,T)}break}case"string":if(!1)var z,V;break}if(p==null)return d;var H=p[d];return H!==void 0?H:d}function Rc(s,p,d){var w="";if(Array.isArray(d))for(var _=0;_{Ly(),Dy(),Vp(),l0=/[A-Z]|^ms/g,ju=/_EMO_([^_]+?)_([^]*?)_EMO_/g,wa=function(s){return s.charCodeAt(1)===45},s0=function(s){return s!=null&&typeof s!="boolean"},$p=n0(function(s){return wa(s)?s:s.replace(l0,"-$&").toLowerCase()}),u0=function(s,p){switch(s){case"animation":case"animationName":if(typeof p=="string")return p.replace(ju,function(d,w,_){return Ua={name:w,styles:_,next:Ua},w})}return a0[s]!==1&&!wa(s)&&typeof p=="number"&&p!==0?p+"px":p},c0=/label:\s*([^\s;\n{]+)\s*(;|$)/g,Iu=function(s,p,d){if(s.length===1&&typeof s[0]=="object"&&s[0]!==null&&s[0].styles!==void 0)return s[0];var w=!0,_="";Ua=void 0;var E=s[0];E==null||E.raw===void 0?(w=!1,_+=qa(d,p,E)):_+=E[0];for(var T=1;T{Gp=O(C()),Xp=function(s){return s()},p0=Gp.useInsertionEffect?Gp.useInsertionEffect:!1,Pu=p0||Xp,Kp=p0||Gp.useLayoutEffect});function Qp(s){var p=s.displayName||s.name||"Component",d=function(_,E){var T=mo.useContext(ui);return mo.createElement(s,K({theme:T,ref:E},_))},w=mo.forwardRef(d);return w.displayName="WithTheme("+p+")",Im(w,s)}var mo,zc,Zp,ef,Fl,tf,km,Wl,ui,Em,Cm,Am,Cs,Bl,f0,d0,m0,Mm,h0=u(()=>{mo=O(C()),zc=O(C()),Mc(),de(),Nl(),Ry(),Tc(),Jp(),Yp(),Zp=!0,ef={}.hasOwnProperty,Fl=mo.createContext(typeof HTMLElement<"u"?Va({key:"css"}):null),tf=Fl.Provider,km=function(){return(0,zc.useContext)(Fl)},Wl=function(s){return(0,zc.forwardRef)(function(p,d){var w=(0,zc.useContext)(Fl);return s(p,w,d)})},Zp||(Wl=function(s){return function(p){var d=(0,zc.useContext)(Fl);return d===null?(d=Va({key:"css"}),mo.createElement(Fl.Provider,{value:d},s(p,d))):s(p,d)}}),ui=mo.createContext({}),Em=function(){return mo.useContext(ui)},Cm=function(s,p){if(typeof p=="function"){var d=p(s);return d}return K({},s,p)},Am=r0(function(s){return r0(function(p){return Cm(s,p)})}),Cs=function(s){var p=mo.useContext(ui);return s.theme!==p&&(p=Am(p)(s.theme)),mo.createElement(ui.Provider,{value:p},s.children)},Bl="__EMOTION_TYPE_PLEASE_DO_NOT_USE__",f0=function(s,p){var d={};for(var w in p)ef.call(p,w)&&(d[w]=p[w]);if(d[Bl]=s,!1)var _;return d},d0=function(s){var p=s.cache,d=s.serialized,w=s.isStringTag;return Su(p,d,w),Pu(function(){return Es(p,d,w)}),null},m0=Wl(function(s,p,d){var w=s.css;typeof w=="string"&&p.registered[w]!==void 0&&(w=p.registered[w]);var _=s[Bl],E=[w],T="";typeof s.className=="string"?T=i0(p.registered,E,s.className):s.className!=null&&(T=s.className+" ");var z=Iu(E,void 0,mo.useContext(ui));if(!1)var V;T+=p.key+"-"+z.name;var H={};for(var G in s)ef.call(s,G)&&G!=="css"&&G!==Bl&&(H[G]=s[G]);return H.ref=d,H.className=T,mo.createElement(mo.Fragment,null,mo.createElement(d0,{cache:p,serialized:z,isStringTag:typeof _=="string"}),mo.createElement(_,H))}),Mm=m0}),Lc={};h(Lc,{CacheProvider:()=>tf,ClassNames:()=>Nc,Global:()=>zm,ThemeContext:()=>ui,ThemeProvider:()=>Cs,__unsafe_useEmotionCache:()=>km,createElement:()=>As,css:()=>Tm,jsx:()=>As,keyframes:()=>g0,useTheme:()=>Em,withEmotionCache:()=>Wl,withTheme:()=>Qp});function Tm(){for(var s=arguments.length,p=new Array(s),d=0;d{h0(),h0(),Gr=O(C()),Tc(),Yp(),Jp(),Mc(),de(),Nl(),Dc=O(be()),As=function(s,p){var d=arguments;if(p==null||!ef.call(p,"css"))return Gr.createElement.apply(void 0,d);var w=d.length,_=new Array(w);_[0]=Mm,_[1]=f0(s,p);for(var E=2;E{function d(w){return w&&w.__esModule?w:{default:w}}p.exports=d,p.exports.__esModule=!0,p.exports.default=p.exports}),Ny=f(s=>{"use strict";Object.defineProperty(s,"__esModule",{value:!0}),s.default=p;function p(d){let w="https://mui.com/production-error/?code="+d;for(let _=1;_{"use strict";var p=cn();Object.defineProperty(s,"__esModule",{value:!0}),Object.defineProperty(s,"default",{enumerable:!0,get:function(){return d.default}});var d=p(Ny())}),Dm,rf,Nm=u(()=>{Vp(),Dm=/^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|abbr|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|disableRemotePlayback|download|draggable|encType|enterKeyHint|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|translate|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|incremental|fallback|inert|itemProp|itemScope|itemType|itemID|itemRef|on|option|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/,rf=n0(function(s){return Dm.test(s)||s.charCodeAt(0)===111&&s.charCodeAt(1)===110&&s.charCodeAt(2)<91})}),ku,y0,Fc,Wc,b0,Fm,w0,Wm=u(()=>{de(),ku=O(C()),Nm(),Ki(),Tc(),Jp(),Yp(),y0=rf,Fc=function(s){return s!=="theme"},Wc=function(s){return typeof s=="string"&&s.charCodeAt(0)>96?y0:Fc},b0=function(s,p,d){var w;if(p){var _=p.shouldForwardProp;w=s.__emotion_forwardProp&&_?function(E){return s.__emotion_forwardProp(E)&&_(E)}:_}return typeof w!="function"&&d&&(w=s.__emotion_forwardProp),w},Fm=function(s){var p=s.cache,d=s.serialized,w=s.isStringTag;return Su(p,d,w),Pu(function(){return Es(p,d,w)}),null},w0=function s(p,d){var w=p.__emotion_real===p,_=w&&p.__emotion_base||p,E,T;d!==void 0&&(E=d.label,T=d.target);var z=b0(p,d,w),V=z||Wc(_),H=!V("as");return function(){var G=arguments,ee=w&&p.__emotion_styles!==void 0?p.__emotion_styles.slice(0):[];if(E!==void 0&&ee.push("label:"+E+";"),G[0]==null||G[0].raw===void 0)ee.push.apply(ee,G);else{ee.push(G[0][0]);for(var ne=G.length,ie=1;ienf});var Fy,Hm,nf,Wy=u(()=>{Wm(),de(),Fy=O(C()),Nm(),Tc(),Jp(),Yp(),Hm=["a","abbr","address","area","article","aside","audio","b","base","bdi","bdo","big","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","dialog","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","iframe","img","input","ins","kbd","keygen","label","legend","li","link","main","map","mark","marquee","menu","menuitem","meta","meter","nav","noscript","object","ol","optgroup","option","output","p","param","picture","pre","progress","q","rp","rt","ruby","s","samp","script","section","select","small","source","span","strong","style","sub","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","title","tr","track","u","ul","var","video","wbr","circle","clipPath","defs","ellipse","foreignObject","g","image","line","linearGradient","mask","path","pattern","polygon","polyline","radialGradient","rect","stop","svg","text","tspan"],nf=w0.bind(),Hm.forEach(function(s){nf[s]=nf(s)})}),O0=f((s,p)=>{"use strict";var d="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED";p.exports=d}),of=f((s,p)=>{"use strict";var d=O0();function w(){}function _(){}_.resetWarningCache=w,p.exports=function(){function E(V,H,G,ee,ne,ie){if(ie!==d){var oe=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw oe.name="Invariant Violation",oe}}E.isRequired=E;function T(){return E}var z={array:E,bigint:E,bool:E,func:E,number:E,object:E,string:E,symbol:E,any:E,arrayOf:T,element:E,elementType:E,instanceOf:T,node:E,objectOf:T,oneOf:T,oneOfType:T,shape:T,exact:T,checkPropTypes:_,resetWarningCache:w};return z.PropTypes=z,z}}),Oa=f((s,p)=>{p.exports=of()();var d,w}),Vm=f(s=>{"use strict";I();var p=C(),d=60103;s.Fragment=60107,typeof Symbol=="function"&&Symbol.for&&(w=Symbol.for,d=w("react.element"),s.Fragment=w("react.fragment"));var w,_=p.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,E=Object.prototype.hasOwnProperty,T={key:!0,ref:!0,__self:!0,__source:!0};function z(V,H,G){var ee,ne={},ie=null,oe=null;G!==void 0&&(ie=""+G),H.key!==void 0&&(ie=""+H.key),H.ref!==void 0&&(oe=H.ref);for(ee in H)E.call(H,ee)&&!T.hasOwnProperty(ee)&&(ne[ee]=H[ee]);if(V&&V.defaultProps)for(ee in H=V.defaultProps,H)ne[ee]===void 0&&(ne[ee]=H[ee]);return{$$typeof:d,type:V,key:ie,ref:oe,props:ne,_owner:_.current}}s.jsx=z,s.jsxs=z}),Xr=f((s,p)=>{"use strict";p.exports=Vm()}),qm=f(s=>{"use strict";"use client";var p=cn();Object.defineProperty(s,"__esModule",{value:!0}),s.default=G;var d=V(C()),w=p(Oa()),_=(Ki(),S(Lc)),E=p((Mc(),S(Ps))),T=Xr();function z(ee){if(typeof WeakMap!="function")return null;var ne=new WeakMap,ie=new WeakMap;return(z=function(oe){return oe?ie:ne})(ee)}function V(ee,ne){if(!ne&&ee&&ee.__esModule)return ee;if(ee===null||typeof ee!="object"&&typeof ee!="function")return{default:ee};var ie=z(ne);if(ie&&ie.has(ee))return ie.get(ee);var oe={__proto__:null},ce=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var me in ee)if(me!=="default"&&Object.prototype.hasOwnProperty.call(ee,me)){var ae=ce?Object.getOwnPropertyDescriptor(ee,me):null;ae&&(ae.get||ae.set)?Object.defineProperty(oe,me,ae):oe[me]=ee[me]}return oe.default=ee,ie&&ie.set(ee,oe),oe}var H;typeof document=="object"&&(H=(0,E.default)({key:"css",prepend:!0}));function G(ee){let{injectFirst:ne,children:ie}=ee;return ne&&H?(0,T.jsx)(_.CacheProvider,{value:H,children:ie}):ie}}),x0=f(s=>{"use strict";"use client";var p=cn();Object.defineProperty(s,"__esModule",{value:!0}),Object.defineProperty(s,"default",{enumerable:!0,get:function(){return d.default}});var d=p(qm())}),Um=f(s=>{"use strict";"use client";var p=cn();Object.defineProperty(s,"__esModule",{value:!0}),s.default=H;var d=z(C()),w=p(Oa()),_=(Ki(),S(Lc)),E=Xr();function T(G){if(typeof WeakMap!="function")return null;var ee=new WeakMap,ne=new WeakMap;return(T=function(ie){return ie?ne:ee})(G)}function z(G,ee){if(!ee&&G&&G.__esModule)return G;if(G===null||typeof G!="object"&&typeof G!="function")return{default:G};var ne=T(ee);if(ne&&ne.has(G))return ne.get(G);var ie={__proto__:null},oe=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var ce in G)if(ce!=="default"&&Object.prototype.hasOwnProperty.call(G,ce)){var me=oe?Object.getOwnPropertyDescriptor(G,ce):null;me&&(me.get||me.set)?Object.defineProperty(ie,ce,me):ie[ce]=G[ce]}return ie.default=G,ne&&ne.set(G,ie),ie}function V(G){return G==null||Object.keys(G).length===0}function H(G){let{styles:ee,defaultTheme:ne={}}=G,ie=typeof ee=="function"?oe=>ee(V(oe)?ne:oe):ee;return(0,E.jsx)(_.Global,{styles:ie})}}),By=f(s=>{"use strict";"use client";var p=cn();Object.defineProperty(s,"__esModule",{value:!0}),Object.defineProperty(s,"default",{enumerable:!0,get:function(){return d.default}});var d=p(Um())}),Hl=f(s=>{"use strict";"use client";var p=cn();Object.defineProperty(s,"__esModule",{value:!0}),Object.defineProperty(s,"GlobalStyles",{enumerable:!0,get:function(){return E.default}}),Object.defineProperty(s,"StyledEngineProvider",{enumerable:!0,get:function(){return _.default}}),Object.defineProperty(s,"ThemeContext",{enumerable:!0,get:function(){return w.ThemeContext}}),Object.defineProperty(s,"css",{enumerable:!0,get:function(){return w.css}}),s.default=T,s.internal_processStyles=void 0,Object.defineProperty(s,"keyframes",{enumerable:!0,get:function(){return w.keyframes}});var d=p((Wy(),S(Bm))),w=(Ki(),S(Lc)),_=p(x0()),E=p(By());function T(V,H){return(0,d.default)(V,H)}var z=(V,H)=>{Array.isArray(V.__emotion_styles)&&(V.__emotion_styles=H(V.__emotion_styles))};s.internal_processStyles=z}),Eu=f((s,p)=>{function d(){return p.exports=d=Object.assign?Object.assign.bind():function(w){for(var _=1;_{"use strict";var p=cn();Object.defineProperty(s,"__esModule",{value:!0}),s.default=E,s.isPlainObject=w;var d=p(Eu());function w(T){if(typeof T!="object"||T===null)return!1;let z=Object.getPrototypeOf(T);return(z===null||z===Object.prototype||Object.getPrototypeOf(z)===null)&&!(Symbol.toStringTag in T)&&!(Symbol.iterator in T)}function _(T){if(!w(T))return T;let z={};return Object.keys(T).forEach(V=>{z[V]=_(T[V])}),z}function E(T,z,V={clone:!0}){let H=V.clone?(0,d.default)({},T):T;return w(T)&&w(z)&&Object.keys(z).forEach(G=>{G!=="__proto__"&&(w(z[G])&&G in T&&w(T[G])?H[G]=E(T[G],z[G],V):V.clone?H[G]=w(z[G])?_(z[G]):z[G]:H[G]=z[G])}),H}}),Oi=f(s=>{"use strict";Object.defineProperty(s,"__esModule",{value:!0});var p={};Object.defineProperty(s,"default",{enumerable:!0,get:function(){return d.default}});var d=_($m());Object.keys(d).forEach(function(E){E==="default"||E==="__esModule"||Object.prototype.hasOwnProperty.call(p,E)||E in s&&s[E]===d[E]||Object.defineProperty(s,E,{enumerable:!0,get:function(){return d[E]}})});function w(E){if(typeof WeakMap!="function")return null;var T=new WeakMap,z=new WeakMap;return(w=function(V){return V?z:T})(E)}function _(E,T){if(!T&&E&&E.__esModule)return E;if(E===null||typeof E!="object"&&typeof E!="function")return{default:E};var z=w(T);if(z&&z.has(E))return z.get(E);var V={__proto__:null},H=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var G in E)if(G!=="default"&&Object.prototype.hasOwnProperty.call(E,G)){var ee=H?Object.getOwnPropertyDescriptor(E,G):null;ee&&(ee.get||ee.set)?Object.defineProperty(V,G,ee):V[G]=E[G]}return V.default=E,z&&z.set(E,V),V}}),Jm=f(s=>{"use strict";var p=cn();Object.defineProperty(s,"__esModule",{value:!0}),s.default=w;var d=p(Yi());function w(_){if(typeof _!="string")throw new Error((0,d.default)(7));return _.charAt(0).toUpperCase()+_.slice(1)}}),pn=f(s=>{"use strict";var p=cn();Object.defineProperty(s,"__esModule",{value:!0}),Object.defineProperty(s,"default",{enumerable:!0,get:function(){return d.default}});var d=p(Jm())}),Hy=f(s=>{"use strict";Object.defineProperty(s,"__esModule",{value:!0}),s.default=T,s.getFunctionName=w;var p=Ue(),d=/^\s*function(?:\s|\s*\/\*.*\*\/\s*)+([^(\s/]*)\s*/;function w(z){let V=`${z}`.match(d);return V&&V[1]||""}function _(z,V=""){return z.displayName||z.name||w(z)||V}function E(z,V,H){let G=_(V);return z.displayName||(G!==""?`${H}(${G})`:H)}function T(z){if(z!=null){if(typeof z=="string")return z;if(typeof z=="function")return _(z,"Component");if(typeof z=="object")switch(z.$$typeof){case p.ForwardRef:return E(z,z.render,"ForwardRef");case p.Memo:return E(z,z.type,"memo");default:return}}}}),Vy=f(s=>{"use strict";Object.defineProperty(s,"__esModule",{value:!0});var p={};Object.defineProperty(s,"default",{enumerable:!0,get:function(){return d.default}});var d=_(Hy());Object.keys(d).forEach(function(E){E==="default"||E==="__esModule"||Object.prototype.hasOwnProperty.call(p,E)||E in s&&s[E]===d[E]||Object.defineProperty(s,E,{enumerable:!0,get:function(){return d[E]}})});function w(E){if(typeof WeakMap!="function")return null;var T=new WeakMap,z=new WeakMap;return(w=function(V){return V?z:T})(E)}function _(E,T){if(!T&&E&&E.__esModule)return E;if(E===null||typeof E!="object"&&typeof E!="function")return{default:E};var z=w(T);if(z&&z.has(E))return z.get(E);var V={__proto__:null},H=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var G in E)if(G!=="default"&&Object.prototype.hasOwnProperty.call(E,G)){var ee=H?Object.getOwnPropertyDescriptor(E,G):null;ee&&(ee.get||ee.set)?Object.defineProperty(V,G,ee):V[G]=E[G]}return V.default=E,z&&z.set(E,V),V}}),Gm=f(s=>{"use strict";Object.defineProperty(s,"__esModule",{value:!0}),s.default=void 0;function p(w,_=Number.MIN_SAFE_INTEGER,E=Number.MAX_SAFE_INTEGER){return Math.max(_,Math.min(w,E))}var d=s.default=p}),qy=f(s=>{"use strict";var p=cn();Object.defineProperty(s,"__esModule",{value:!0}),Object.defineProperty(s,"default",{enumerable:!0,get:function(){return d.default}});var d=p(Gm())}),Bc=f(s=>{"use strict";var p=cn();Object.defineProperty(s,"__esModule",{value:!0}),s.default=void 0;var d=p(Oi());function w(E,T){return T?(0,d.default)(E,T,{clone:!1}):E}var _=s.default=w}),Hc=f(s=>{"use strict";var p=cn();Object.defineProperty(s,"__esModule",{value:!0}),s.default=void 0;var d=p(Oa()),w={},_=s.default=w}),$a=f(s=>{"use strict";var p=cn();Object.defineProperty(s,"__esModule",{value:!0}),s.computeBreakpointsBase=ie,s.createEmptyBreakpointObject=G,s.default=void 0,s.handleBreakpoints=V,s.mergeBreakpointsInOrder=ne,s.removeUnusedBreakpoints=ee,s.resolveBreakpointValues=oe,s.values=void 0;var d=p(Eu()),w=p(Oa()),_=p(Oi()),E=p(Bc()),T=s.values={xs:0,sm:600,md:900,lg:1200,xl:1536},z={keys:["xs","sm","md","lg","xl"],up:me=>`@media (min-width:${T[me]}px)`};function V(me,ae,Te){let Ne=me.theme||{};if(Array.isArray(ae)){let je=Ne.breakpoints||z;return ae.reduce((ke,we,Ae)=>(ke[je.up(je.keys[Ae])]=Te(ae[Ae]),ke),{})}if(typeof ae=="object"){let je=Ne.breakpoints||z;return Object.keys(ae).reduce((ke,we)=>{if(Object.keys(je.values||T).indexOf(we)!==-1){let Ae=je.up(we);ke[Ae]=Te(ae[we],we)}else{let Ae=we;ke[Ae]=ae[Ae]}return ke},{})}return Te(ae)}function H(me){let ae=Te=>{let Ne=Te.theme||{},je=me(Te),ke=Ne.breakpoints||z,we=ke.keys.reduce((Ae,ue)=>(Te[ue]&&(Ae=Ae||{},Ae[ke.up(ue)]=me((0,d.default)({theme:Ne},Te[ue]))),Ae),null);return(0,E.default)(je,we)};return ae.propTypes={},ae.filterProps=["xs","sm","md","lg","xl",...me.filterProps],ae}function G(me={}){var ae;return((ae=me.keys)==null?void 0:ae.reduce((Te,Ne)=>{let je=me.up(Ne);return Te[je]={},Te},{}))||{}}function ee(me,ae){return me.reduce((Te,Ne)=>{let je=Te[Ne];return(!je||Object.keys(je).length===0)&&delete Te[Ne],Te},ae)}function ne(me,...ae){let Te=G(me),Ne=[Te,...ae].reduce((je,ke)=>(0,_.default)(je,ke),{});return ee(Object.keys(Te),Ne)}function ie(me,ae){if(typeof me!="object")return{};let Te={},Ne=Object.keys(ae);return Array.isArray(me)?Ne.forEach((je,ke)=>{ke{me[je]!=null&&(Te[je]=!0)}),Te}function oe({values:me,breakpoints:ae,base:Te}){let Ne=Te||ie(me,ae),je=Object.keys(Ne);if(je.length===0)return me;let ke;return je.reduce((we,Ae,ue)=>(Array.isArray(me)?(we[Ae]=me[ue]!=null?me[ue]:me[ke],ke=ue):typeof me=="object"?(we[Ae]=me[Ae]!=null?me[Ae]:me[ke],ke=Ae):we[Ae]=me,we),{})}var ce=s.default=H}),Cu=f(s=>{"use strict";var p=cn();Object.defineProperty(s,"__esModule",{value:!0}),s.default=void 0,s.getPath=E,s.getStyleValue=T;var d=p(pn()),w=p(Hc()),_=$a();function E(H,G,ee=!0){if(!G||typeof G!="string")return null;if(H&&H.vars&&ee){let ne=`vars.${G}`.split(".").reduce((ie,oe)=>ie&&ie[oe]?ie[oe]:null,H);if(ne!=null)return ne}return G.split(".").reduce((ne,ie)=>ne&&ne[ie]!=null?ne[ie]:null,H)}function T(H,G,ee,ne=ee){let ie;return typeof H=="function"?ie=H(ee):Array.isArray(H)?ie=H[ee]||ne:ie=E(H,ee)||ne,G&&(ie=G(ie,ne,H)),ie}function z(H){let{prop:G,cssProperty:ee=H.prop,themeKey:ne,transform:ie}=H,oe=ce=>{if(ce[G]==null)return null;let me=ce[G],ae=ce.theme,Te=E(ae,ne)||{},Ne=je=>{let ke=T(Te,ie,je);return je===ke&&typeof je=="string"&&(ke=T(Te,ie,`${G}${je==="default"?"":(0,d.default)(je)}`,je)),ee===!1?ke:{[ee]:ke}};return(0,_.handleBreakpoints)(ce,me,Ne)};return oe.propTypes={},oe.filterProps=[G],oe}var V=s.default=z}),Uy=f(s=>{"use strict";Object.defineProperty(s,"__esModule",{value:!0}),s.default=p;function p(d){let w={};return _=>(w[_]===void 0&&(w[_]=d(_)),w[_])}}),Au=f(s=>{"use strict";var p=cn();Object.defineProperty(s,"__esModule",{value:!0}),s.createUnarySpacing=ce,s.createUnaryUnit=oe,s.default=void 0,s.getStyleFromPropValue=ae,s.getValue=me,s.margin=je,s.marginKeys=void 0,s.padding=ke,s.paddingKeys=void 0;var d=p(Hc()),w=$a(),_=Cu(),E=p(Bc()),T=p(Uy()),z={m:"margin",p:"padding"},V={t:"Top",r:"Right",b:"Bottom",l:"Left",x:["Left","Right"],y:["Top","Bottom"]},H={marginX:"mx",marginY:"my",paddingX:"px",paddingY:"py"},G=(0,T.default)(ue=>{if(ue.length>2)if(H[ue])ue=H[ue];else return[ue];let[Se,ze]=ue.split(""),We=z[Se],Je=V[ze]||"";return Array.isArray(Je)?Je.map(tt=>We+tt):[We+Je]}),ee=s.marginKeys=["m","mt","mr","mb","ml","mx","my","margin","marginTop","marginRight","marginBottom","marginLeft","marginX","marginY","marginInline","marginInlineStart","marginInlineEnd","marginBlock","marginBlockStart","marginBlockEnd"],ne=s.paddingKeys=["p","pt","pr","pb","pl","px","py","padding","paddingTop","paddingRight","paddingBottom","paddingLeft","paddingX","paddingY","paddingInline","paddingInlineStart","paddingInlineEnd","paddingBlock","paddingBlockStart","paddingBlockEnd"],ie=[...ee,...ne];function oe(ue,Se,ze,We){var Je;let tt=(Je=(0,_.getPath)(ue,Se,!1))!=null?Je:ze;return typeof tt=="number"?vt=>typeof vt=="string"?vt:tt*vt:Array.isArray(tt)?vt=>typeof vt=="string"?vt:tt[vt]:typeof tt=="function"?tt:()=>{}}function ce(ue){return oe(ue,"spacing",8,"spacing")}function me(ue,Se){if(typeof Se=="string"||Se==null)return Se;let ze=Math.abs(Se),We=ue(ze);return Se>=0?We:typeof We=="number"?-We:`-${We}`}function ae(ue,Se){return ze=>ue.reduce((We,Je)=>(We[Je]=me(Se,ze),We),{})}function Te(ue,Se,ze,We){if(Se.indexOf(ze)===-1)return null;let Je=G(ze),tt=ae(Je,We),vt=ue[ze];return(0,w.handleBreakpoints)(ue,vt,tt)}function Ne(ue,Se){let ze=ce(ue.theme);return Object.keys(ue).map(We=>Te(ue,Se,We,ze)).reduce(E.default,{})}function je(ue){return Ne(ue,ee)}je.propTypes={},je.filterProps=ee;function ke(ue){return Ne(ue,ne)}ke.propTypes={},ke.filterProps=ne;function we(ue){return Ne(ue,ie)}we.propTypes={},we.filterProps=ie;var Ae=s.default=we}),Vl=f(s=>{"use strict";var p=cn();Object.defineProperty(s,"__esModule",{value:!0}),s.default=void 0;var d=p(Bc());function w(...E){let T=E.reduce((V,H)=>(H.filterProps.forEach(G=>{V[G]=H}),V),{}),z=V=>Object.keys(V).reduce((H,G)=>T[G]?(0,d.default)(H,T[G](V)):H,{});return z.propTypes={},z.filterProps=E.reduce((V,H)=>V.concat(H.filterProps),[]),z}var _=s.default=w}),Vc=f(s=>{"use strict";var p=cn();Object.defineProperty(s,"__esModule",{value:!0}),s.borderTopColor=s.borderTop=s.borderRightColor=s.borderRight=s.borderRadius=s.borderLeftColor=s.borderLeft=s.borderColor=s.borderBottomColor=s.borderBottom=s.border=void 0,s.borderTransform=z,s.outlineColor=s.outline=s.default=void 0;var d=p(Hc()),w=p(Cu()),_=p(Vl()),E=Au(),T=$a();function z(ue){return typeof ue!="number"?ue:`${ue}px solid`}function V(ue,Se){return(0,w.default)({prop:ue,themeKey:"borders",transform:Se})}var H=s.border=V("border",z),G=s.borderTop=V("borderTop",z),ee=s.borderRight=V("borderRight",z),ne=s.borderBottom=V("borderBottom",z),ie=s.borderLeft=V("borderLeft",z),oe=s.borderColor=V("borderColor"),ce=s.borderTopColor=V("borderTopColor"),me=s.borderRightColor=V("borderRightColor"),ae=s.borderBottomColor=V("borderBottomColor"),Te=s.borderLeftColor=V("borderLeftColor"),Ne=s.outline=V("outline",z),je=s.outlineColor=V("outlineColor"),ke=ue=>{if(ue.borderRadius!==void 0&&ue.borderRadius!==null){let Se=(0,E.createUnaryUnit)(ue.theme,"shape.borderRadius",4,"borderRadius"),ze=We=>({borderRadius:(0,E.getValue)(Se,We)});return(0,T.handleBreakpoints)(ue,ue.borderRadius,ze)}return null};s.borderRadius=ke,ke.propTypes={},ke.filterProps=["borderRadius"];var we=(0,_.default)(H,G,ee,ne,ie,oe,ce,me,ae,Te,ke,Ne,je),Ae=s.default=we}),af=f(s=>{"use strict";var p=cn();Object.defineProperty(s,"__esModule",{value:!0}),s.rowGap=s.gridTemplateRows=s.gridTemplateColumns=s.gridTemplateAreas=s.gridRow=s.gridColumn=s.gridAutoRows=s.gridAutoFlow=s.gridAutoColumns=s.gridArea=s.gap=s.default=s.columnGap=void 0;var d=p(Cu()),w=p(Vl()),_=Au(),E=$a(),T=p(Hc()),z=ke=>{if(ke.gap!==void 0&&ke.gap!==null){let we=(0,_.createUnaryUnit)(ke.theme,"spacing",8,"gap"),Ae=ue=>({gap:(0,_.getValue)(we,ue)});return(0,E.handleBreakpoints)(ke,ke.gap,Ae)}return null};s.gap=z,z.propTypes={},z.filterProps=["gap"];var V=ke=>{if(ke.columnGap!==void 0&&ke.columnGap!==null){let we=(0,_.createUnaryUnit)(ke.theme,"spacing",8,"columnGap"),Ae=ue=>({columnGap:(0,_.getValue)(we,ue)});return(0,E.handleBreakpoints)(ke,ke.columnGap,Ae)}return null};s.columnGap=V,V.propTypes={},V.filterProps=["columnGap"];var H=ke=>{if(ke.rowGap!==void 0&&ke.rowGap!==null){let we=(0,_.createUnaryUnit)(ke.theme,"spacing",8,"rowGap"),Ae=ue=>({rowGap:(0,_.getValue)(we,ue)});return(0,E.handleBreakpoints)(ke,ke.rowGap,Ae)}return null};s.rowGap=H,H.propTypes={},H.filterProps=["rowGap"];var G=s.gridColumn=(0,d.default)({prop:"gridColumn"}),ee=s.gridRow=(0,d.default)({prop:"gridRow"}),ne=s.gridAutoFlow=(0,d.default)({prop:"gridAutoFlow"}),ie=s.gridAutoColumns=(0,d.default)({prop:"gridAutoColumns"}),oe=s.gridAutoRows=(0,d.default)({prop:"gridAutoRows"}),ce=s.gridTemplateColumns=(0,d.default)({prop:"gridTemplateColumns"}),me=s.gridTemplateRows=(0,d.default)({prop:"gridTemplateRows"}),ae=s.gridTemplateAreas=(0,d.default)({prop:"gridTemplateAreas"}),Te=s.gridArea=(0,d.default)({prop:"gridArea"}),Ne=(0,w.default)(z,V,H,G,ee,ne,ie,oe,ce,me,ae,Te),je=s.default=Ne}),Xm=f(s=>{"use strict";var p=cn();Object.defineProperty(s,"__esModule",{value:!0}),s.default=s.color=s.bgcolor=s.backgroundColor=void 0,s.paletteTransform=_;var d=p(Cu()),w=p(Vl());function _(G,ee){return ee==="grey"?ee:G}var E=s.color=(0,d.default)({prop:"color",themeKey:"palette",transform:_}),T=s.bgcolor=(0,d.default)({prop:"bgcolor",cssProperty:"backgroundColor",themeKey:"palette",transform:_}),z=s.backgroundColor=(0,d.default)({prop:"backgroundColor",themeKey:"palette",transform:_}),V=(0,w.default)(E,T,z),H=s.default=V}),qc=f(s=>{"use strict";var p=cn();Object.defineProperty(s,"__esModule",{value:!0}),s.sizeWidth=s.sizeHeight=s.minWidth=s.minHeight=s.maxWidth=s.maxHeight=s.height=s.default=s.boxSizing=void 0,s.sizingTransform=E,s.width=void 0;var d=p(Cu()),w=p(Vl()),_=$a();function E(ae){return ae<=1&&ae!==0?`${ae*100}%`:ae}var T=s.width=(0,d.default)({prop:"width",transform:E}),z=ae=>{if(ae.maxWidth!==void 0&&ae.maxWidth!==null){let Te=Ne=>{var je,ke;let we=((je=ae.theme)==null||(je=je.breakpoints)==null||(je=je.values)==null?void 0:je[Ne])||_.values[Ne];return we?((ke=ae.theme)==null||(ke=ke.breakpoints)==null?void 0:ke.unit)!=="px"?{maxWidth:`${we}${ae.theme.breakpoints.unit}`}:{maxWidth:we}:{maxWidth:E(Ne)}};return(0,_.handleBreakpoints)(ae,ae.maxWidth,Te)}return null};s.maxWidth=z,z.filterProps=["maxWidth"];var V=s.minWidth=(0,d.default)({prop:"minWidth",transform:E}),H=s.height=(0,d.default)({prop:"height",transform:E}),G=s.maxHeight=(0,d.default)({prop:"maxHeight",transform:E}),ee=s.minHeight=(0,d.default)({prop:"minHeight",transform:E}),ne=s.sizeWidth=(0,d.default)({prop:"size",cssProperty:"width",transform:E}),ie=s.sizeHeight=(0,d.default)({prop:"size",cssProperty:"height",transform:E}),oe=s.boxSizing=(0,d.default)({prop:"boxSizing"}),ce=(0,w.default)(T,z,V,H,G,ee,oe),me=s.default=ce}),lf=f(s=>{"use strict";Object.defineProperty(s,"__esModule",{value:!0}),s.default=void 0;var p=Au(),d=Vc(),w=af(),_=Xm(),E=qc(),T={border:{themeKey:"borders",transform:d.borderTransform},borderTop:{themeKey:"borders",transform:d.borderTransform},borderRight:{themeKey:"borders",transform:d.borderTransform},borderBottom:{themeKey:"borders",transform:d.borderTransform},borderLeft:{themeKey:"borders",transform:d.borderTransform},borderColor:{themeKey:"palette"},borderTopColor:{themeKey:"palette"},borderRightColor:{themeKey:"palette"},borderBottomColor:{themeKey:"palette"},borderLeftColor:{themeKey:"palette"},outline:{themeKey:"borders",transform:d.borderTransform},outlineColor:{themeKey:"palette"},borderRadius:{themeKey:"shape.borderRadius",style:d.borderRadius},color:{themeKey:"palette",transform:_.paletteTransform},bgcolor:{themeKey:"palette",cssProperty:"backgroundColor",transform:_.paletteTransform},backgroundColor:{themeKey:"palette",transform:_.paletteTransform},p:{style:p.padding},pt:{style:p.padding},pr:{style:p.padding},pb:{style:p.padding},pl:{style:p.padding},px:{style:p.padding},py:{style:p.padding},padding:{style:p.padding},paddingTop:{style:p.padding},paddingRight:{style:p.padding},paddingBottom:{style:p.padding},paddingLeft:{style:p.padding},paddingX:{style:p.padding},paddingY:{style:p.padding},paddingInline:{style:p.padding},paddingInlineStart:{style:p.padding},paddingInlineEnd:{style:p.padding},paddingBlock:{style:p.padding},paddingBlockStart:{style:p.padding},paddingBlockEnd:{style:p.padding},m:{style:p.margin},mt:{style:p.margin},mr:{style:p.margin},mb:{style:p.margin},ml:{style:p.margin},mx:{style:p.margin},my:{style:p.margin},margin:{style:p.margin},marginTop:{style:p.margin},marginRight:{style:p.margin},marginBottom:{style:p.margin},marginLeft:{style:p.margin},marginX:{style:p.margin},marginY:{style:p.margin},marginInline:{style:p.margin},marginInlineStart:{style:p.margin},marginInlineEnd:{style:p.margin},marginBlock:{style:p.margin},marginBlockStart:{style:p.margin},marginBlockEnd:{style:p.margin},displayPrint:{cssProperty:!1,transform:V=>({"@media print":{display:V}})},display:{},overflow:{},textOverflow:{},visibility:{},whiteSpace:{},flexBasis:{},flexDirection:{},flexWrap:{},justifyContent:{},alignItems:{},alignContent:{},order:{},flex:{},flexGrow:{},flexShrink:{},alignSelf:{},justifyItems:{},justifySelf:{},gap:{style:w.gap},rowGap:{style:w.rowGap},columnGap:{style:w.columnGap},gridColumn:{},gridRow:{},gridAutoFlow:{},gridAutoColumns:{},gridAutoRows:{},gridTemplateColumns:{},gridTemplateRows:{},gridTemplateAreas:{},gridArea:{},position:{},zIndex:{themeKey:"zIndex"},top:{},right:{},bottom:{},left:{},boxShadow:{themeKey:"shadows"},width:{transform:E.sizingTransform},maxWidth:{style:E.maxWidth},minWidth:{transform:E.sizingTransform},height:{transform:E.sizingTransform},maxHeight:{transform:E.sizingTransform},minHeight:{transform:E.sizingTransform},boxSizing:{},fontFamily:{themeKey:"typography"},fontSize:{themeKey:"typography"},fontStyle:{themeKey:"typography"},fontWeight:{themeKey:"typography"},letterSpacing:{},textTransform:{},lineHeight:{},textAlign:{},typography:{cssProperty:!1,themeKey:"typography"}},z=s.default=T}),Uc=f(s=>{"use strict";var p=cn();Object.defineProperty(s,"__esModule",{value:!0}),s.default=void 0,s.unstable_createStyleFunctionSx=H;var d=p(pn()),w=p(Bc()),_=Cu(),E=$a(),T=p(lf());function z(...ne){let ie=ne.reduce((ce,me)=>ce.concat(Object.keys(me)),[]),oe=new Set(ie);return ne.every(ce=>oe.size===Object.keys(ce).length)}function V(ne,ie){return typeof ne=="function"?ne(ie):ne}function H(){function ne(oe,ce,me,ae){let Te={[oe]:ce,theme:me},Ne=ae[oe];if(!Ne)return{[oe]:ce};let{cssProperty:je=oe,themeKey:ke,transform:we,style:Ae}=Ne;if(ce==null)return null;if(ke==="typography"&&ce==="inherit")return{[oe]:ce};let ue=(0,_.getPath)(me,ke)||{};if(Ae)return Ae(Te);let Se=ze=>{let We=(0,_.getStyleValue)(ue,we,ze);return ze===We&&typeof ze=="string"&&(We=(0,_.getStyleValue)(ue,we,`${oe}${ze==="default"?"":(0,d.default)(ze)}`,ze)),je===!1?We:{[je]:We}};return(0,E.handleBreakpoints)(Te,ce,Se)}function ie(oe){var ce;let{sx:me,theme:ae={}}=oe||{};if(!me)return null;let Te=(ce=ae.unstable_sxConfig)!=null?ce:T.default;function Ne(je){let ke=je;if(typeof je=="function")ke=je(ae);else if(typeof je!="object")return je;if(!ke)return null;let we=(0,E.createEmptyBreakpointObject)(ae.breakpoints),Ae=Object.keys(we),ue=we;return Object.keys(ke).forEach(Se=>{let ze=V(ke[Se],ae);if(ze!=null)if(typeof ze=="object")if(Te[Se])ue=(0,w.default)(ue,ne(Se,ze,ae,Te));else{let We=(0,E.handleBreakpoints)({theme:ae},ze,Je=>({[Se]:Je}));z(We,ze)?ue[Se]=ie({sx:ze,theme:ae}):ue=(0,w.default)(ue,We)}else ue=(0,w.default)(ue,ne(Se,ze,ae,Te))}),(0,E.removeUnusedBreakpoints)(Ae,ue)}return Array.isArray(me)?me.map(Ne):Ne(me)}return ie}var G=H();G.filterProps=["sx"];var ee=s.default=G}),Mu=f((s,p)=>{function d(w,_){if(w==null)return{};var E={},T=Object.keys(w),z,V;for(V=0;V=0)&&(E[z]=w[z]);return E}p.exports=d,p.exports.__esModule=!0,p.exports.default=p.exports}),_0=f(s=>{"use strict";var p=cn();Object.defineProperty(s,"__esModule",{value:!0}),s.default=V;var d=p(Eu()),w=p(Mu()),_=Oi(),E=p(lf()),T=["sx"],z=H=>{var G,ee;let ne={systemProps:{},otherProps:{}},ie=(G=H==null||(ee=H.theme)==null?void 0:ee.unstable_sxConfig)!=null?G:E.default;return Object.keys(H).forEach(oe=>{ie[oe]?ne.systemProps[oe]=H[oe]:ne.otherProps[oe]=H[oe]}),ne};function V(H){let{sx:G}=H,ee=(0,w.default)(H,T),{systemProps:ne,otherProps:ie}=z(ee),oe;return Array.isArray(G)?oe=[ne,...G]:typeof G=="function"?oe=(...ce)=>{let me=G(...ce);return(0,_.isPlainObject)(me)?(0,d.default)({},ne,me):ne}:oe=(0,d.default)({},ne,G),(0,d.default)({},ie,{sx:oe})}}),S0=f(s=>{"use strict";var p=cn();Object.defineProperty(s,"__esModule",{value:!0}),Object.defineProperty(s,"default",{enumerable:!0,get:function(){return d.default}}),Object.defineProperty(s,"extendSxProp",{enumerable:!0,get:function(){return w.default}}),Object.defineProperty(s,"unstable_createStyleFunctionSx",{enumerable:!0,get:function(){return d.unstable_createStyleFunctionSx}}),Object.defineProperty(s,"unstable_defaultSxConfig",{enumerable:!0,get:function(){return _.default}});var d=T(Uc()),w=p(_0()),_=p(lf());function E(z){if(typeof WeakMap!="function")return null;var V=new WeakMap,H=new WeakMap;return(E=function(G){return G?H:V})(z)}function T(z,V){if(!V&&z&&z.__esModule)return z;if(z===null||typeof z!="object"&&typeof z!="function")return{default:z};var H=E(V);if(H&&H.has(z))return H.get(z);var G={__proto__:null},ee=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var ne in z)if(ne!=="default"&&Object.prototype.hasOwnProperty.call(z,ne)){var ie=ee?Object.getOwnPropertyDescriptor(z,ne):null;ie&&(ie.get||ie.set)?Object.defineProperty(G,ne,ie):G[ne]=z[ne]}return G.default=z,H&&H.set(z,G),G}}),Km=f(s=>{"use strict";var p=cn();Object.defineProperty(s,"__esModule",{value:!0}),s.breakpointKeys=void 0,s.default=z;var d=p(Mu()),w=p(Eu()),_=["values","unit","step"],E=s.breakpointKeys=["xs","sm","md","lg","xl"],T=V=>{let H=Object.keys(V).map(G=>({key:G,val:V[G]}))||[];return H.sort((G,ee)=>G.val-ee.val),H.reduce((G,ee)=>(0,w.default)({},G,{[ee.key]:ee.val}),{})};function z(V){let{values:H={xs:0,sm:600,md:900,lg:1200,xl:1536},unit:G="px",step:ee=5}=V,ne=(0,d.default)(V,_),ie=T(H),oe=Object.keys(ie);function ce(je){return`@media (min-width:${typeof H[je]=="number"?H[je]:je}${G})`}function me(je){return`@media (max-width:${(typeof H[je]=="number"?H[je]:je)-ee/100}${G})`}function ae(je,ke){let we=oe.indexOf(ke);return`@media (min-width:${typeof H[je]=="number"?H[je]:je}${G}) and (max-width:${(we!==-1&&typeof H[oe[we]]=="number"?H[oe[we]]:ke)-ee/100}${G})`}function Te(je){return oe.indexOf(je)+1{"use strict";Object.defineProperty(s,"__esModule",{value:!0}),s.default=void 0;var p={borderRadius:4},d=s.default=p}),j0=f(s=>{"use strict";Object.defineProperty(s,"__esModule",{value:!0}),s.default=d;var p=Au();function d(w=8){if(w.mui)return w;let _=(0,p.createUnarySpacing)({spacing:w}),E=(...T)=>(T.length===0?[1]:T).map(z=>{let V=_(z);return typeof V=="number"?`${V}px`:V}).join(" ");return E.mui=!0,E}}),$c=f(s=>{"use strict";Object.defineProperty(s,"__esModule",{value:!0}),s.default=p;function p(d,w){let _=this;return _.vars&&typeof _.getColorSchemeSelector=="function"?{[_.getColorSchemeSelector(d).replace(/(\[[^\]]+\])/,"*:where($1)")]:w}:_.palette.mode===d?w:{}}}),I0=f(s=>{"use strict";var p=cn();Object.defineProperty(s,"__esModule",{value:!0}),s.default=void 0;var d=p(Eu()),w=p(Mu()),_=p(Oi()),E=p(Km()),T=p($y()),z=p(j0()),V=p(Uc()),H=p(lf()),G=p($c()),ee=["breakpoints","palette","spacing","shape"];function ne(oe={},...ce){let{breakpoints:me={},palette:ae={},spacing:Te,shape:Ne={}}=oe,je=(0,w.default)(oe,ee),ke=(0,E.default)(me),we=(0,z.default)(Te),Ae=(0,_.default)({breakpoints:ke,direction:"ltr",components:{},palette:(0,d.default)({mode:"light"},ae),spacing:we,shape:(0,d.default)({},T.default,Ne)},je);return Ae.applyStyles=G.default,Ae=ce.reduce((ue,Se)=>(0,_.default)(ue,Se),Ae),Ae.unstable_sxConfig=(0,d.default)({},H.default,je?.unstable_sxConfig),Ae.unstable_sx=function(ue){return(0,V.default)({sx:ue,theme:this})},Ae}var ie=s.default=ne}),Ym=f(s=>{"use strict";var p=cn();Object.defineProperty(s,"__esModule",{value:!0}),Object.defineProperty(s,"default",{enumerable:!0,get:function(){return d.default}}),Object.defineProperty(s,"private_createBreakpoints",{enumerable:!0,get:function(){return w.default}}),Object.defineProperty(s,"unstable_applyStyles",{enumerable:!0,get:function(){return _.default}});var d=p(I0()),w=p(Km()),_=p($c())}),P0=f(s=>{"use strict";var p=cn();Object.defineProperty(s,"__esModule",{value:!0}),s.alpha=ce,s.blend=Ae,s.colorChannel=void 0,s.darken=ae,s.decomposeColor=z,s.emphasize=ke,s.getContrastRatio=oe,s.getLuminance=ie,s.hexToRgb=E,s.hslToRgb=ne,s.lighten=Ne,s.private_safeAlpha=me,s.private_safeColorChannel=void 0,s.private_safeDarken=Te,s.private_safeEmphasize=we,s.private_safeLighten=je,s.recomposeColor=G,s.rgbToHex=ee;var d=p(Yi()),w=p(qy());function _(ue,Se=0,ze=1){return(0,w.default)(ue,Se,ze)}function E(ue){ue=ue.slice(1);let Se=new RegExp(`.{1,${ue.length>=6?2:1}}`,"g"),ze=ue.match(Se);return ze&&ze[0].length===1&&(ze=ze.map(We=>We+We)),ze?`rgb${ze.length===4?"a":""}(${ze.map((We,Je)=>Je<3?parseInt(We,16):Math.round(parseInt(We,16)/255*1e3)/1e3).join(", ")})`:""}function T(ue){let Se=ue.toString(16);return Se.length===1?`0${Se}`:Se}function z(ue){if(ue.type)return ue;if(ue.charAt(0)==="#")return z(E(ue));let Se=ue.indexOf("("),ze=ue.substring(0,Se);if(["rgb","rgba","hsl","hsla","color"].indexOf(ze)===-1)throw new Error((0,d.default)(9,ue));let We=ue.substring(Se+1,ue.length-1),Je;if(ze==="color"){if(We=We.split(" "),Je=We.shift(),We.length===4&&We[3].charAt(0)==="/"&&(We[3]=We[3].slice(1)),["srgb","display-p3","a98-rgb","prophoto-rgb","rec-2020"].indexOf(Je)===-1)throw new Error((0,d.default)(10,Je))}else We=We.split(",");return We=We.map(tt=>parseFloat(tt)),{type:ze,values:We,colorSpace:Je}}var V=ue=>{let Se=z(ue);return Se.values.slice(0,3).map((ze,We)=>Se.type.indexOf("hsl")!==-1&&We!==0?`${ze}%`:ze).join(" ")};s.colorChannel=V;var H=(ue,Se)=>{try{return V(ue)}catch{return ue}};s.private_safeColorChannel=H;function G(ue){let{type:Se,colorSpace:ze}=ue,{values:We}=ue;return Se.indexOf("rgb")!==-1?We=We.map((Je,tt)=>tt<3?parseInt(Je,10):Je):Se.indexOf("hsl")!==-1&&(We[1]=`${We[1]}%`,We[2]=`${We[2]}%`),Se.indexOf("color")!==-1?We=`${ze} ${We.join(" ")}`:We=`${We.join(", ")}`,`${Se}(${We})`}function ee(ue){if(ue.indexOf("#")===0)return ue;let{values:Se}=z(ue);return`#${Se.map((ze,We)=>T(We===3?Math.round(255*ze):ze)).join("")}`}function ne(ue){ue=z(ue);let{values:Se}=ue,ze=Se[0],We=Se[1]/100,Je=Se[2]/100,tt=We*Math.min(Je,1-Je),vt=(nr,Me=(nr+ze/30)%12)=>Je-tt*Math.max(Math.min(Me-3,9-Me,1),-1),qt="rgb",Jt=[Math.round(vt(0)*255),Math.round(vt(8)*255),Math.round(vt(4)*255)];return ue.type==="hsla"&&(qt+="a",Jt.push(Se[3])),G({type:qt,values:Jt})}function ie(ue){ue=z(ue);let Se=ue.type==="hsl"||ue.type==="hsla"?z(ne(ue)).values:ue.values;return Se=Se.map(ze=>(ue.type!=="color"&&(ze/=255),ze<=.03928?ze/12.92:((ze+.055)/1.055)**2.4)),Number((.2126*Se[0]+.7152*Se[1]+.0722*Se[2]).toFixed(3))}function oe(ue,Se){let ze=ie(ue),We=ie(Se);return(Math.max(ze,We)+.05)/(Math.min(ze,We)+.05)}function ce(ue,Se){return ue=z(ue),Se=_(Se),(ue.type==="rgb"||ue.type==="hsl")&&(ue.type+="a"),ue.type==="color"?ue.values[3]=`/${Se}`:ue.values[3]=Se,G(ue)}function me(ue,Se,ze){try{return ce(ue,Se)}catch{return ue}}function ae(ue,Se){if(ue=z(ue),Se=_(Se),ue.type.indexOf("hsl")!==-1)ue.values[2]*=1-Se;else if(ue.type.indexOf("rgb")!==-1||ue.type.indexOf("color")!==-1)for(let ze=0;ze<3;ze+=1)ue.values[ze]*=1-Se;return G(ue)}function Te(ue,Se,ze){try{return ae(ue,Se)}catch{return ue}}function Ne(ue,Se){if(ue=z(ue),Se=_(Se),ue.type.indexOf("hsl")!==-1)ue.values[2]+=(100-ue.values[2])*Se;else if(ue.type.indexOf("rgb")!==-1)for(let ze=0;ze<3;ze+=1)ue.values[ze]+=(255-ue.values[ze])*Se;else if(ue.type.indexOf("color")!==-1)for(let ze=0;ze<3;ze+=1)ue.values[ze]+=(1-ue.values[ze])*Se;return G(ue)}function je(ue,Se,ze){try{return Ne(ue,Se)}catch{return ue}}function ke(ue,Se=.15){return ie(ue)>.5?ae(ue,Se):Ne(ue,Se)}function we(ue,Se,ze){try{return we(ue,Se)}catch{return ue}}function Ae(ue,Se,ze,We=1){let Je=(Jt,nr)=>Math.round((Jt**(1/We)*(1-ze)+nr**(1/We)*ze)**We),tt=z(ue),vt=z(Se),qt=[Je(tt.values[0],vt.values[0]),Je(tt.values[1],vt.values[1]),Je(tt.values[2],vt.values[2])];return G({type:"rgb",values:qt})}}),k0=f(s=>{"use strict";var p=cn();Object.defineProperty(s,"__esModule",{value:!0}),s.default=Ae,s.shouldForwardProp=ae,s.systemDefaultTheme=void 0;var d=p(Eu()),w=p(Mu()),_=oe(Hl()),E=Oi(),T=p(pn()),z=p(Vy()),V=p(Ym()),H=p(S0()),G=["ownerState"],ee=["variants"],ne=["name","slot","skipVariantsResolver","skipSx","overridesResolver"];function ie(ue){if(typeof WeakMap!="function")return null;var Se=new WeakMap,ze=new WeakMap;return(ie=function(We){return We?ze:Se})(ue)}function oe(ue,Se){if(!Se&&ue&&ue.__esModule)return ue;if(ue===null||typeof ue!="object"&&typeof ue!="function")return{default:ue};var ze=ie(Se);if(ze&&ze.has(ue))return ze.get(ue);var We={__proto__:null},Je=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var tt in ue)if(tt!=="default"&&Object.prototype.hasOwnProperty.call(ue,tt)){var vt=Je?Object.getOwnPropertyDescriptor(ue,tt):null;vt&&(vt.get||vt.set)?Object.defineProperty(We,tt,vt):We[tt]=ue[tt]}return We.default=ue,ze&&ze.set(ue,We),We}function ce(ue){return Object.keys(ue).length===0}function me(ue){return typeof ue=="string"&&ue.charCodeAt(0)>96}function ae(ue){return ue!=="ownerState"&&ue!=="theme"&&ue!=="sx"&&ue!=="as"}var Te=s.systemDefaultTheme=(0,V.default)(),Ne=ue=>ue&&ue.charAt(0).toLowerCase()+ue.slice(1);function je({defaultTheme:ue,theme:Se,themeId:ze}){return ce(Se)?ue:Se[ze]||Se}function ke(ue){return ue?(Se,ze)=>ze[ue]:null}function we(ue,Se){let{ownerState:ze}=Se,We=(0,w.default)(Se,G),Je=typeof ue=="function"?ue((0,d.default)({ownerState:ze},We)):ue;if(Array.isArray(Je))return Je.flatMap(tt=>we(tt,(0,d.default)({ownerState:ze},We)));if(Je&&typeof Je=="object"&&Array.isArray(Je.variants)){let{variants:tt=[]}=Je,vt=(0,w.default)(Je,ee);return tt.forEach(qt=>{let Jt=!0;typeof qt.props=="function"?Jt=qt.props((0,d.default)({ownerState:ze},We,ze)):Object.keys(qt.props).forEach(nr=>{ze?.[nr]!==qt.props[nr]&&We[nr]!==qt.props[nr]&&(Jt=!1)}),Jt&&(Array.isArray(vt)||(vt=[vt]),vt.push(typeof qt.style=="function"?qt.style((0,d.default)({ownerState:ze},We,ze)):qt.style))}),vt}return Je}function Ae(ue={}){let{themeId:Se,defaultTheme:ze=Te,rootShouldForwardProp:We=ae,slotShouldForwardProp:Je=ae}=ue,tt=vt=>(0,H.default)((0,d.default)({},vt,{theme:je((0,d.default)({},vt,{defaultTheme:ze,themeId:Se}))}));return tt.__mui_systemSx=!0,(vt,qt={})=>{(0,_.internal_processStyles)(vt,Yn=>Yn.filter(ta=>!(ta!=null&&ta.__mui_systemSx)));let{name:Jt,slot:nr,skipVariantsResolver:Me,skipSx:st,overridesResolver:sr=ke(Ne(nr))}=qt,nt=(0,w.default)(qt,ne),Ot=Me!==void 0?Me:nr&&nr!=="Root"&&nr!=="root"||!1,Pt=st||!1,Tt,tr=ae;nr==="Root"||nr==="root"?tr=We:nr?tr=Je:me(vt)&&(tr=void 0);let kr=(0,_.default)(vt,(0,d.default)({shouldForwardProp:tr,label:Tt},nt)),Hn=Yn=>typeof Yn=="function"&&Yn.__emotion_real!==Yn||(0,E.isPlainObject)(Yn)?ta=>we(Yn,(0,d.default)({},ta,{theme:je({theme:ta.theme,defaultTheme:ze,themeId:Se})})):Yn,bo=(Yn,...ta)=>{let r1=Hn(Yn),Qa=ta?ta.map(Hn):[];Jt&&sr&&Qa.push(Il=>{let Ti=je((0,d.default)({},Il,{defaultTheme:ze,themeId:Se}));if(!Ti.components||!Ti.components[Jt]||!Ti.components[Jt].styleOverrides)return null;let Vu=Ti.components[Jt].styleOverrides,qs={};return Object.entries(Vu).forEach(([np,If])=>{qs[np]=we(If,(0,d.default)({},Il,{theme:Ti}))}),sr(Il,qs)}),Jt&&!Ot&&Qa.push(Il=>{var Ti;let Vu=je((0,d.default)({},Il,{defaultTheme:ze,themeId:Se})),qs=Vu==null||(Ti=Vu.components)==null||(Ti=Ti[Jt])==null?void 0:Ti.variants;return we({variants:qs},(0,d.default)({},Il,{theme:Vu}))}),Pt||Qa.push(tt);let jl=Qa.length-ta.length;if(Array.isArray(Yn)&&jl>0){let Il=new Array(jl).fill("");r1=[...Yn,...Il],r1.raw=[...Yn.raw,...Il]}let n1=kr(r1,...Qa);return vt.muiName&&(n1.muiName=vt.muiName),n1};return kr.withConfig&&(bo.withConfig=kr.withConfig),bo}}}),sf=O(C()),Qm=O(B()),Jy=O(X()),Zm=O(Z()),Ci=O(B());function Ms(s){s()}var Tu=Ms,Gy=s=>Tu=s,eh=()=>Tu,Jc=O(C()),E0=O(C()),uf=O(C()),C0=Symbol.for("react-redux-context"),th=typeof globalThis<"u"?globalThis:{};function rh(){var s;if(!uf.createContext)return{};let p=(s=th[C0])!=null?s:th[C0]=new Map,d=p.get(uf.createContext);return d||(d=uf.createContext(null),p.set(uf.createContext,d)),d}var gl=rh();function A0(s=gl){return function(){return(0,E0.useContext)(s)}}var nh=A0(),oh=()=>{throw new Error("uSES not initialized!")},ih=oh,Xy=s=>{ih=s},Ky=(s,p)=>s===p;function Yy(s=gl){let p=s===gl?nh:A0(s);return function(d,w={}){let{equalityFn:_=Ky,stabilityCheck:E=void 0,noopCheck:T=void 0}=typeof w=="function"?{equalityFn:w}:w,{store:z,subscription:V,getServerState:H,stabilityCheck:G,noopCheck:ee}=p(),ne=(0,Jc.useRef)(!0),ie=(0,Jc.useCallback)({[d.name](ce){let me=d(ce);if(!1){if((v==="always"||v==="once"&&ne.current)&&!_(me,b))try{}catch(ae){}if((x==="always"||x==="once"&&ne.current)&&me===ce)try{}catch(ae){}}return me}}[d.name],[d,G,E]),oe=ih(V.addNestedSub,z.getState,H||z.getState,ie,_);return(0,Jc.useDebugValue)(oe),oe}}var Qy=Yy();de();function Nn(s,p){if(s==null)return{};var d={},w=Object.keys(s),_,E;for(E=0;E=0)&&(d[_]=s[_]);return d}var oS=O(be()),iS=O(C()),M0=O(Ue());de();function Zy(){let s=eh(),p=null,d=null;return{clear(){p=null,d=null},notify(){s(()=>{let w=p;for(;w;)w.callback(),w=w.next})},get(){let w=[],_=p;for(;_;)w.push(_),_=_.next;return w},subscribe(w){let _=!0,E=d={callback:w,next:null,prev:d};return E.prev?E.prev.next=E:p=E,function(){!_||p===null||(_=!1,E.next?E.next.prev=E.prev:d=E.prev,E.prev?E.prev.next=E.next:p=E.next)}}}}var ah={notify(){},get:()=>[]};function lh(s,p){let d,w=ah,_=0,E=!1;function T(ce){G();let me=w.subscribe(ce),ae=!1;return()=>{ae||(ae=!0,me(),ee())}}function z(){w.notify()}function V(){oe.onStateChange&&oe.onStateChange()}function H(){return E}function G(){_++,d||(d=p?p.addNestedSub(V):s.subscribe(V),w=Zy())}function ee(){_--,d&&_===0&&(d(),d=void 0,w.clear(),w=ah)}function ne(){E||(E=!0,G())}function ie(){E&&(E=!1,ee())}let oe={addNestedSub:T,notifyNestedSubs:z,handleChangeWrapper:V,isSubscribed:H,trySubscribe:ne,tryUnsubscribe:ie,getListeners:()=>w};return oe}var T0=O(C()),e2=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",sh=e2?T0.useLayoutEffect:T0.useEffect,t2=oh,r2=s=>{t2=s},Ja=O(C());function uh({store:s,context:p,children:d,serverState:w,stabilityCheck:_="once",noopCheck:E="once"}){let T=Ja.useMemo(()=>{let V=lh(s);return{store:s,subscription:V,getServerState:w?()=>w:void 0,stabilityCheck:_,noopCheck:E}},[s,w,_,E]),z=Ja.useMemo(()=>s.getState(),[s]);return sh(()=>{let{subscription:V}=T;return V.onStateChange=V.notifyNestedSubs,V.trySubscribe(),z!==s.getState()&&V.notifyNestedSubs(),()=>{V.tryUnsubscribe(),V.onStateChange=void 0}},[T,z]),Ja.createElement((p||gl).Provider,{value:T},d)}var ch=uh;function Ga(s=gl){let p=s===gl?nh:A0(s);return function(){let{store:d}=p();return d}}var Ru=Ga();function cf(s=gl){let p=s===gl?Ru:Ga(s);return function(){return p().dispatch}}var ph=cf();Xy(Zm.useSyncExternalStoreWithSelector),r2(Jy.useSyncExternalStore),Gy(Ci.unstable_batchedUpdates);var Ts=()=>ph(),Yo=Qy;function ci(s){for(var p=arguments.length,d=Array(p>1?p-1:0),w=1;w3?p.i-4:p.i:Array.isArray(s)?1:Gc(s)?2:z0(s)?3:0}function Rs(s,p){return vl(s)===2?s.has(p):Object.prototype.hasOwnProperty.call(s,p)}function fh(s,p){return vl(s)===2?s.get(p):s[p]}function dh(s,p,d){var w=vl(s);w===2?s.set(p,d):w===3?s.add(d):s[p]=d}function R0(s,p){return s===p?s!==0||1/s==1/p:s!=s&&p!=p}function Gc(s){return V0&&s instanceof Map}function z0(s){return i2&&s instanceof Set}function yl(s){return s.o||s.t}function pf(s){if(Array.isArray(s))return Array.prototype.slice.call(s);var p=ut(s);delete p[Mn];for(var d=Nu(p),w=0;w1&&(s.set=s.add=s.clear=s.delete=n2),Object.freeze(s),p&&ql(s,function(d,w){return L0(w,!0)},!0)),s}function n2(){ci(2)}function D0(s){return s==null||typeof s!="object"||Object.isFrozen(s)}function Qi(s){var p=q0[s];return p||ci(18,s),p}function zu(s,p){q0[s]||(q0[s]=p)}function N0(){return Xc}function F0(s,p){p&&(Qi("Patches"),s.u=[],s.s=[],s.v=p)}function ff(s){df(s),s.p.forEach(W0),s.p=null}function df(s){s===Xc&&(Xc=s.l)}function zs(s){return Xc={p:[],l:Xc,h:s,m:!0,_:0}}function W0(s){var p=s[Mn];p.i===0||p.i===1?p.j():p.g=!0}function mf(s,p){p._=p.p.length;var d=p.p[0],w=s!==void 0&&s!==d;return p.h.O||Qi("ES5").S(p,s,w),w?(d[Mn].P&&(ff(p),ci(4)),Xa(s)&&(s=hf(p,s),p.l||Lu(p,s)),p.u&&Qi("Patches").M(d[Mn].t,s,p.u,p.s)):s=hf(p,d,[]),ff(p),p.u&&p.v(p.u,p.s),s!==xa?s:void 0}function hf(s,p,d){if(D0(p))return p;var w=p[Mn];if(!w)return ql(p,function(z,V){return mh(s,w,p,z,V,d)},!0),p;if(w.A!==s)return p;if(!w.P)return Lu(s,w.t,!0),w.t;if(!w.I){w.I=!0,w.A._--;var _=w.i===4||w.i===5?w.o=pf(w.k):w.o,E=_,T=!1;w.i===3&&(E=new Set(_),_.clear(),T=!0),ql(E,function(z,V){return mh(s,w,_,z,V,d,T)}),Lu(s,_,!1),d&&s.u&&Qi("Patches").N(w,d,s.u,s.s)}return w.o}function mh(s,p,d,w,_,E,T){if(ho(_)){var z=hf(s,_,E&&p&&p.i!==3&&!Rs(p.R,w)?E.concat(w):void 0);if(dh(d,w,z),!ho(z))return;s.m=!1}else T&&d.add(_);if(Xa(_)&&!D0(_)){if(!s.h.D&&s._<1)return;hf(s,_),p&&p.A.l||Lu(s,_)}}function Lu(s,p,d){d===void 0&&(d=!1),!s.l&&s.h.D&&s.m&&L0(p,d)}function Du(s,p){var d=s[Mn];return(d?yl(d):s)[p]}function hh(s,p){if(p in s)for(var d=Object.getPrototypeOf(s);d;){var w=Object.getOwnPropertyDescriptor(d,p);if(w)return w;d=Object.getPrototypeOf(d)}}function Ul(s){s.P||(s.P=!0,s.l&&Ul(s.l))}function B0(s){s.o||(s.o=pf(s.t))}function H0(s,p,d){var w=Gc(p)?Qi("MapSet").F(p,d):z0(p)?Qi("MapSet").T(p,d):s.O?function(_,E){var T=Array.isArray(_),z={i:T?1:0,A:E?E.A:N0(),P:!1,I:!1,R:{},l:E,t:_,k:null,o:null,j:null,C:!1},V=z,H=pi;T&&(V=[z],H=_a);var G=Proxy.revocable(V,H),ee=G.revoke,ne=G.proxy;return z.k=ne,z.j=ee,ne}(p,d):Qi("ES5").J(p,d);return(d?d.A:N0()).p.push(w),w}function o2(s){return ho(s)||ci(22,s),function p(d){if(!Xa(d))return d;var w,_=d[Mn],E=vl(d);if(_){if(!_.P&&(_.i<4||!Qi("ES5").K(_)))return _.t;_.I=!0,w=gh(d,E),_.I=!1}else w=gh(d,E);return ql(w,function(T,z){_&&fh(_.t,T)===z||dh(w,T,p(z))}),E===3?new Set(w):w}(s)}function gh(s,p){switch(p){case 2:return new Map(s);case 3:return Array.from(s)}return pf(s)}function vh(){function s(T,z){var V=E[T];return V?V.enumerable=z:E[T]=V={configurable:!0,enumerable:z,get:function(){var H=this[Mn];return pi.get(H,T)},set:function(H){var G=this[Mn];pi.set(G,T,H)}},V}function p(T){for(var z=T.length-1;z>=0;z--){var V=T[z][Mn];if(!V.P)switch(V.i){case 5:w(V)&&Ul(V);break;case 4:d(V)&&Ul(V)}}}function d(T){for(var z=T.t,V=T.k,H=Nu(V),G=H.length-1;G>=0;G--){var ee=H[G];if(ee!==Mn){var ne=z[ee];if(ne===void 0&&!Rs(z,ee))return!0;var ie=V[ee],oe=ie&&ie[Mn];if(oe?oe.t!==ne:!R0(ie,ne))return!0}}var ce=!!z[Mn];return H.length!==Nu(z).length+(ce?0:1)}function w(T){var z=T.k;if(z.length!==T.t.length)return!0;var V=Object.getOwnPropertyDescriptor(z,z.length-1);if(V&&!V.get)return!0;for(var H=0;H1?ae-1:0),Ne=1;Ne1?G-1:0),ne=1;ne=0;_--){var E=w[_];if(E.path.length===0&&E.op==="replace"){d=E.value;break}}_>-1&&(w=w.slice(_+1));var T=Qi("Patches").$;return ho(d)?T(d,w):this.produce(d,function(z){return T(z,w)})},s}(),jo=new Zr,wh=jo.produce,Fu=jo.produceWithPatches.bind(jo),aS=jo.setAutoFreeze.bind(jo),lS=jo.setUseProxies.bind(jo),sS=jo.applyPatches.bind(jo),uS=jo.createDraft.bind(jo),Oh=jo.finishDraft.bind(jo),go=wh;function Zi(s){"@babel/helpers - typeof";return Zi=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(p){return typeof p}:function(p){return p&&typeof Symbol=="function"&&p.constructor===Symbol&&p!==Symbol.prototype?"symbol":typeof p},Zi(s)}function bl(s,p){if(Zi(s)!="object"||!s)return s;var d=s[Symbol.toPrimitive];if(d!==void 0){var w=d.call(s,p||"default");if(Zi(w)!="object")return w;throw new TypeError("@@toPrimitive must return a primitive value.")}return(p==="string"?String:Number)(s)}function a2(s){var p=bl(s,"string");return Zi(p)=="symbol"?p:String(p)}function l2(s,p,d){return p=a2(p),p in s?Object.defineProperty(s,p,{value:d,enumerable:!0,configurable:!0,writable:!0}):s[p]=d,s}function U0(s,p){var d=Object.keys(s);if(Object.getOwnPropertySymbols){var w=Object.getOwnPropertySymbols(s);p&&(w=w.filter(function(_){return Object.getOwnPropertyDescriptor(s,_).enumerable})),d.push.apply(d,w)}return d}function xh(s){for(var p=1;p"u"&&(d=p,p=void 0),typeof d<"u"){if(typeof d!="function")throw new Error(Do(1));return d(bf)(s,p)}if(typeof s!="function")throw new Error(Do(2));var _=s,E=p,T=[],z=T,V=!1;function H(){z===T&&(z=T.slice())}function G(){if(V)throw new Error(Do(3));return E}function ee(ce){if(typeof ce!="function")throw new Error(Do(4));if(V)throw new Error(Do(5));var me=!0;return H(),z.push(ce),function(){if(me){if(V)throw new Error(Do(6));me=!1,H();var ae=z.indexOf(ce);z.splice(ae,1),T=null}}}function ne(ce){if(!_h(ce))throw new Error(Do(7));if(typeof ce.type>"u")throw new Error(Do(8));if(V)throw new Error(Do(9));try{V=!0,E=_(E,ce)}finally{V=!1}for(var me=T=z,ae=0;ae"u")throw new Error(Do(12));if(typeof d(void 0,{type:ea.PROBE_UNKNOWN_ACTION()})>"u")throw new Error(Do(13))})}function u2(s){for(var p=Object.keys(s),d={},w=0;w"u"){var Te=H&&H.type;throw new Error(Do(14))}ne[oe]=ae,ee=ee||ae!==me}return ee=ee||E.length!==Object.keys(V).length,ee?ne:V}}function wf(){for(var s=arguments.length,p=new Array(s),d=0;d0&&E[E.length-1])&&(H[0]===6||H[0]===2)){d=0;continue}if(H[0]===3&&(!E||H[1]>E[0]&&H[1]1){var d=s.shift();s[0]=d+s[0]}s[0].match(/^file:\/\/\//)?s[0]=s[0].replace(/^([^/:]+):\/*/,"$1:///"):s[0]=s[0].replace(/^([^/:]+):\/*/,"$1://");for(var w=0;w0&&(_=_.replace(/^[\/]+/,"")),w0?"?":"")+T.join("&"),E}function Io(){var s;return typeof arguments[0]=="object"?s=arguments[0]:s=[].slice.call(arguments),fi(s)}var xi={stats:void 0,bannerText:""},qr=Sa("home_stats",async(s,{rejectWithValue:p})=>{try{return await Kr("api/v2/stats")}catch(d){return p(d.message)}}),ct=Sa("home_banner",async(s,{rejectWithValue:p})=>{try{return(await fetch(Io("/","banner.txt"))).text()}catch(d){return p(d.message)}}),Yt=He({name:"home",initialState:xi,reducers:{},extraReducers:s=>{s.addCase(qr.fulfilled,(p,d)=>{p.stats=d.payload}),s.addCase(qr.rejected,p=>{p.stats=xi.stats}),s.addCase(ct.fulfilled,(p,d)=>{p.bannerText=d.payload}),s.addCase(ct.rejected,p=>{p.bannerText=xi.bannerText})}}),Mr=Yt.reducer,Tr=O(C()),Pr=class DY{constructor(p,d){this.value=p,this.axioms=d}static fromJson(p){return p?(Array.isArray(p)||(p=[p]),p.map(d=>typeof d=="object"&&Array.isArray(d.type)&&d.type.indexOf("reification")!==-1?new DY(d.value,d.axioms):new DY(d,null))):[]}hasMetadata(){return this.axioms!=null}getMetadata(){if(!this.axioms)return null;let p={};for(let d of this.axioms)for(let w of Object.keys(d)){let _=d[w],E=p[w];E!==void 0?E.push(_):p[w]=[_]}return p}},Fn=class NY{constructor(p){p?this.linkedEntities={...p}:this.linkedEntities={}}mergeWith(p){return p?new NY({...this.linkedEntities,linkedEntities:p}):new NY({...this.linkedEntities})}getLabelForIri(p){let d=this.linkedEntities[p];if(d){let w=Pr.fromJson(d.label);if(w&&w.length>0)return w[0].value}}get(p){return this.linkedEntities[p]}},Yr=class{constructor(s){this.properties=s}getId(){return this.properties.id}getIri(){return this.properties.iri}getType(){let s=this.properties.type;for(let p of s)if(["ontology","class","property","individual"].indexOf(p)!==-1)return p;throw new Error("unknown type")}getTypePlural(){switch(this.getType()){case"ontology":return"ontologies";case"class":return"classes";case"property":return"properties";case"individual":return"individuals";default:throw new Error("unknown type")}}getRdfTypes(){return Wn(this.properties["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"])}getName(){return this.getNames()[0]}getNames(){let s=Pr.fromJson(this.properties.label);return s&&s.length>0?s.map(p=>p.value):[this.getIri()]}getDescription(){let s=Pr.fromJson(this.properties.definition);return s&&s.length>0?s.map(p=>p.value||"").join(" "):""}getOntologyId(){return this.properties.ontologyId}getLabelForIri(s){let p=this.properties.linkedEntities;return p&&Pr.fromJson(p[s]?.label)[0]?.value||s}getAnnotationById(s){return Pr.fromJson(Wn(this.properties[s]))}getLinkedEntities(){return new Fn(this.properties.linkedEntities||{})}},on=class extends Yr{isCanonical(){return this.properties.isDefiningOntology===!0}isDeprecated(){return this.properties["http://www.w3.org/2002/07/owl#deprecated"]==="true"}getDeprecationVersion(){return this.properties["http://www.ebi.ac.uk/efo/obsoleted_in_version"]}getDeprecationReason(){return Pr.fromJson(this.properties["http://purl.obolibrary.org/obo/IAO_0000231"]).concat(Pr.fromJson(this.properties["http://www.ebi.ac.uk/efo/reason_for_obsolescence"]))}getDeprecationReplacement(){return this.properties["http://purl.obolibrary.org/obo/IAO_0100001"]}getRelatedFrom(){return Pr.fromJson(this.properties.relatedFrom)}getDescriptionAsArray(){return Pr.fromJson(this.properties.definition)}hasDirectChildren(){return this.properties.hasDirectChildren==="true"}hasHierarchicalChildren(){return this.properties.hasHierarchicalChildren==="true"}hasChildren(){return this.hasDirectChildren()||this.hasHierarchicalChildren()}getAncestorIris(){return Wn(this.properties.ancestor)}getHierarchicalAncestorIris(){return Wn(this.properties.hierarchicalAncestor)}getSynonyms(){return Pr.fromJson(this.properties.synonym)}getAppearsIn(){return this.properties.appearsIn||[]}getDefinedBy(){return this.properties.definedBy||[]}getShortForm(){return this.properties.curie||this.properties.shortForm}getDepictedBy(){return Pr.fromJson(this.properties["http://xmlns.com/foaf/0.1/depicted_by"])}getAnnotationPredicates(){let s=Wn(this.properties.definitionProperty),p=Wn(this.properties.synonymProperty),d=Wn(this.properties.hierarchicalProperty),w=new Set;for(let _ of Object.keys(this.properties)){if(_.indexOf("://")===-1||_.startsWith("negativePropertyAssertion+")||_==="http://xmlns.com/foaf/0.1/depicted_by")continue;let E=this.getLinkedEntities().get(_);E!=null&&E.type.indexOf("objectProperty")!==-1||E!=null&&E.type.indexOf("dataProperty")!==-1||s.indexOf(_)!==-1||p.indexOf(_)!==-1||d.indexOf(_)!==-1||(_.startsWith("http://www.w3.org/2000/01/rdf-schema#")||_.startsWith("http://www.w3.org/1999/02/22-rdf-syntax-ns#")||_.startsWith("http://www.w3.org/2002/07/owl#"))&&_!=="http://www.w3.org/2000/01/rdf-schema#comment"&&_!=="http://www.w3.org/2000/01/rdf-schema#seeAlso"&&_!=="http://www.w3.org/2002/07/owl#disjointUnionOf"||_!=="http://www.geneontology.org/formats/oboInOwl#id"&&w.add(_)}return Array.from(w)}getNumHierarchicalDescendants(){return this.properties.numHierarchicalDescendants?parseInt(this.properties.numHierarchicalDescendants):0}getNumDescendants(){return this.properties.numDescendants?parseInt(this.properties.numDescendants):0}getHierarchicalParentReificationAxioms(s){let p=Pr.fromJson(this.properties.hierarchicalParent);for(let d of p)if(d.value===s)return d.getMetadata()}},wn=class extends on{getParents(){return Pr.fromJson(this.properties.hierarchicalParent)}getSuperEntities(){return Pr.fromJson(this.properties["http://www.w3.org/2000/01/rdf-schema#subClassOf"])}getEquivalents(){return Pr.fromJson(this.properties["http://www.w3.org/2002/07/owl#equivalentClass"])}getDisjointWith(){return Wn(this.properties["http://www.w3.org/2002/07/owl#disjointWith"])}getHasKey(){return Wn(this.properties["http://www.w3.org/2002/07/owl#hasKey"])}},jn=class extends on{getParents(){return Pr.fromJson(this.properties.directParent)}getEquivalents(){return[]}getSuperEntities(){return Pr.fromJson([])}getDifferentFrom(){return Wn(this.properties["http://www.w3.org/2002/07/owl#differentFrom"])}getSameAs(){return Wn(this.properties["http://www.w3.org/2002/07/owl#sameAs"])}getIndividualTypes(){let s=this.getRdfTypes();return!s||!Array.isArray(s)?[]:s.filter(p=>p!=="http://www.w3.org/2002/07/owl#NamedIndividual"&&(typeof p!="string"||!p.startsWith("http://www.w3.org/2000/01/rdf-schema#")))}},Ol=class extends on{getParents(){return Pr.fromJson(this.properties["http://www.w3.org/2000/01/rdf-schema#subPropertyOf"])}getSuperEntities(){return Pr.fromJson(this.properties["http://www.w3.org/2000/01/rdf-schema#subPropertyOf"])}getEquivalents(){return Pr.fromJson(this.properties["http://www.w3.org/2002/07/owl#equivalentProperty"])}getDisjointWith(){return Wn(this.properties["http://www.w3.org/2002/07/owl#propertyDisjointWith"])}getInverseOf(){return Wn(this.properties["http://www.w3.org/2002/07/owl#inverseOf"])}getDomain(){return Wn(this.properties["http://www.w3.org/2000/01/rdf-schema#domain"])}getRange(){return Wn(this.properties["http://www.w3.org/2000/01/rdf-schema#range"])}getPropertyChains(){return Pr.fromJson(this.properties["http://www.w3.org/2002/07/owl#propertyChainAxiom"])}};function Wn(s){return Array.isArray(s)?s:s?[s]:[]}function Bu(){return(Math.random()*Math.pow(2,54)).toString(36)}function _i(s){let p=s.type||[];if(p.indexOf("class")!==-1)return new wn(s);if(p.indexOf("property")!==-1)return new Ol(s);if(p.indexOf("individual")!==-1)return new jn(s);throw new Error("Unknown entity type: "+JSON.stringify(s))}function Zc(s){let p=new URLSearchParams;return s.forEach((d,w)=>{let _=w.includes("_")?Fs(w):w;_==="oboId"&&(_="curie"),p.append(_,d)}),p}function Fs(s){return s.replace(/([-_][a-z])/gi,p=>p.toUpperCase().replace("-","").replace("_",""))}var Hu=class extends Yr{getOntologyId(){return this.properties.ontologyId}getName(){let s=Pr.fromJson(this.properties.label||this.properties.title||"");return s[0]&&s[0].value||this.getOntologyId()}getDescription(){let s=Pr.fromJson(this.properties.definition||this.properties.description||"");return s[0]&&s[0].value||""}getSourceFileTimestamp(){return this.properties.sourceFileTimestamp}getNumEntities(){return parseInt(this.properties.numberOfEntities)}getNumClasses(){return parseInt(this.properties.numberOfClasses)}getNumProperties(){return parseInt(this.properties.numberOfProperties)}getNumIndividuals(){return parseInt(this.properties.numberOfIndividuals)}getLogoURL(){return this.properties.depicted_by||void 0}getOntologyPurl(){return this.properties.ontology_purl}getHomepage(){return this.properties.homepage}getMailingList(){return this.properties.mailing_list}getTracker(){return this.properties.tracker}getVersionIri(){return this.properties["http://www.w3.org/2002/07/owl#versionIRI"]}getVersion(){return this.properties["http://www.w3.org/2002/07/owl#versionInfo"]}getVersionFromIri(){let s=this.properties["http://www.w3.org/2002/07/owl#versionIRI"];if(!s)return"";let p=s.match(/\d{4}-\d{2}-\d{2}/);if(p&&p.length>0)return p[0];{let d=s.match(/\/v[d.].*\//);return d?d[0].replaceAll("/","").replace("v",""):""}}getLoaded(){return this.properties.loaded}getAnnotationPredicates(){let s=new Set;for(let p of Object.keys(this.properties))p.indexOf("://")!==-1&&p!=="http://purl.obolibrary.org/obo/IAO_0000700"&&(p.startsWith("http://www.w3.org/2000/01/rdf-schema#")||p.startsWith("http://www.w3.org/1999/02/22-rdf-syntax-ns#")||p.startsWith("http://www.w3.org/2002/07/owl#")||s.add(p));return Array.from(s)}getPreferredRoots(){return Wn(this.properties.hasPreferredRoot)}getLanguages(){return Wn(this.properties.language)}getImportsFrom(){return Wn(this.properties.importsFrom)}getExportsTo(){return Wn(this.properties.exportsTo)}},xf=O(Le());function ep(s){let p=new xf.default,d=new Map;for(let z of s)d.set(z.getIri(),z);for(let z of s)if(!K0(z.getIri()))for(let V of z.getParents()){let H=V.value,G=d.get(H);if(K0(H)||!(G instanceof on))continue;var w,_;z.getType()==="individual"?(_="http://www.w3.org/1999/02/22-rdf-syntax-ns#type",w=null):z.getType()=="class"&&(w=V.getMetadata()&&V.getMetadata().parentRelationToChild&&V.getMetadata().parentRelationToChild[0],_=V.getMetadata()&&V.getMetadata().childRelationToParent&&V.getMetadata().childRelationToParent[0]);let ee={parent:G,child:z,parentRelationToChild:w,childRelationToParent:_};p.set(z.getIri(),ee)}var E=function(z,V){V.add(z);let H=p.get(z);if(H)for(let G of H)V.has(G.parent.getIri())?p.delete(z,G):E(G.parent.getIri(),new Set(V))};for(let z of s)E(z.getIri(),new Set);let T=new xf.default;for(let z of Array.from(p.keys())){let V=p.get(z);for(let H of V)T.set(H.parent.getIri(),H)}return{rootEntities:s.filter(z=>K0(z.getIri())?!1:(p.get(z.getIri())||[]).length===0),parentToChildRelations:T}}function K0(s){return s==="http://www.w3.org/2002/07/owl#Thing"||s==="http://www.w3.org/2002/07/owl#TopObjectProperty"}function Eh(s,p,d){let{rootEntities:w,parentToChildRelations:_}=ep(s);if(console.log("rootEntities"),console.dir(w),console.log("parentToChildRelations"),console.dir(_),p){let H=d.getPreferredRoots();H.length>0&&(w=H.map(G=>s.filter(ee=>ee.getIri()===G)[0]).filter(G=>!!G))}let E=[],T={},z=new Set;return{allNodes:E,rootNodes:w.map(H=>V(H,void 0,0,null,null)),nodeChildren:T,automaticallyExpandedNodes:z};function V(H,G,ee,ne,ie){if(ee>100)throw new Error("probable cyclic tree (createTreeNode)");let oe=_.get(H.getIri())||[],ce={absoluteIdentity:G?G.absoluteIdentity+";"+H.getIri():H.getIri(),iri:H.getIri(),title:H.getName(),expandable:H.hasChildren(),entity:H,numDescendants:H.getNumHierarchicalDescendants()||H.getNumDescendants(),parentRelationToChild:ne,childRelationToParent:ie};return E.push(ce),T[ce.absoluteIdentity]=oe.map(me=>V(me.child,ce,ee+1,me.parentRelationToChild,me.childRelationToParent)),H.hasChildren()&&oe.length>0&&z.add(ce.absoluteIdentity),ce}}var xl={ontology:void 0,entity:void 0,nodesWithChildrenLoaded:[],nodeChildren:{},rootNodes:[],ontologies:[],totalOntologies:0,entities:[],totalEntities:0,loadingOntologies:!1,loadingEntities:!1,numPendingTreeRequests:0,loadingOntology:!1,loadingEntity:!1,classInstances:null,loadingClassInstances:!1,automaticallyExpandedNodes:[],manuallyExpandedNodes:[],preferredRoots:!1,displayObsolete:!1,displaySiblings:!1,displayCounts:!0,errorMessage:""},BY=bn("ontologies_tree_reset_content"),HY=bn("ontologies_tree_reset_settings"),VY=bn("ontologies_preferred_enabled"),qY=bn("ontologies_preferred_disabled"),UY=bn("ontologies_node_open"),$Y=bn("ontologies_node_close"),JY=bn("ontologies_show_obsolete"),GY=bn("ontologies_hide_obsolete"),XY=bn("ontologies_show_siblings"),KY=bn("ontologies_hide_siblings"),YY=bn("ontologies_show_counts"),QY=bn("ontologies_hide_counts"),dS=Sa("ontologies_ontology",async({ontologyId:s,lang:p,apiUrl:d},{rejectWithValue:w})=>{let _=`api/v2/ontologies/${s}`;try{let E=await Kr(_,{lang:p},d);return new Hu(E)}catch(E){return w(`Error accessing: ${_}; ${E.message}`)}}),mS=Sa("ontologies_entity_type",async({ontologyId:s,entityType:p,entityIri:d,searchParams:w},{rejectWithValue:_})=>{let E=Zc(w),T=encodeURIComponent(encodeURIComponent(d)),z="";try{let V=null;if(d)z=`api/v2/ontologies/${s}/${p}/${T}?${new URLSearchParams(E)}`,V=await Kr(z);else{z=`api/v2/ontologies/${s}/${p}?${new URLSearchParams(E)}`;let H=await rr(z);if(H.elements.length===1&&H.totalElements===1)V=H.elements[0];else return _(`Error accessing: ${z}; Retrieved nondistinct entity: ${JSON.stringify(H)}`)}return _i(V)}catch(V){return _(`Error accessing: ${z}; ${V.message}`)}}),hS=Sa("ontologies_entity",async({ontologyId:s,entityIri:p},{rejectWithValue:d})=>{let w=encodeURIComponent(encodeURIComponent(p)),_="";try{_=`api/v2/ontologies/${s}/entities/${w}`;let E=await Kr(_);return _i(E)}catch(E){return d(`Error accessing: ${_}; ${E.message}`)}}),gS=Sa("ontologies_entity_class_instances",async({ontologyId:s,classIri:p,searchParams:d},{rejectWithValue:w})=>{let _="";try{if(p){let E=Zc(d),T=encodeURIComponent(encodeURIComponent(p));return _=`api/v2/ontologies/${s}/classes/${T}/instances?${new URLSearchParams(E)}`,(await rr(_)).map(z=>_i(z))}else return w(`Warning accessing: ${_}; Class IRI not provided`)}catch(E){return w(`Error accessing: ${_}; ${E.message}`)}}),RM=Sa("ontologies_ontologies",async({page:s,rowsPerPage:p,search:d},{rejectWithValue:w})=>{d.length>1&&!d.includes(" ")&&(d="*"+d+"*");let _=`api/v2/ontologies?page=${s}&size=${p}${d?"&search="+d:""}`;try{return(await rr(_)).map(E=>new Hu(E))}catch(E){return w(`Error accessing: ${_}; ${E.message}`)}}),zM=Sa("ontologies_entities",async({ontologyId:s,entityType:p,page:d,rowsPerPage:w,search:_},{rejectWithValue:E})=>{let T=`api/v2/ontologies/${s}/${p}?page=${d}&size=${w}${_?"&search="+_:""}`;try{return(await rr(T)).map(z=>_i(z))}catch(z){return E(`Error accessing: ${T}; ${z.message}`)}}),vS=Sa("ontologies_ancestors",async({ontologyId:s,entityType:p,entityIri:d,lang:w,showObsoleteEnabled:_,apiUrl:E})=>{let T=encodeURIComponent(encodeURIComponent(d));var z;return p==="classes"?z=await rr(`api/v2/ontologies/${s}/classes/${T}/hierarchicalAncestors?${new URLSearchParams({size:"1000",lang:w,includeObsoleteEntities:_})}`,void 0,E):z=await rr(`api/v2/ontologies/${s}/${p}/${T}/ancestors?${new URLSearchParams({size:"1000",lang:w,includeObsoleteEntities:_})}`,void 0,E),z.elements.map(V=>_i(V))}),yS=Sa("ontologies_roots",async({ontologyId:s,entityType:p,preferredRoots:d,lang:w,showObsoleteEnabled:_,apiUrl:E})=>{if(p==="individuals"){let[T,z]=await Promise.all([rr(`api/v2/ontologies/${s}/classes?${new URLSearchParams({hasIndividuals:"true",size:"1000",lang:w,includeObsoleteEntities:_})}`,void 0,E),rr(`api/v2/ontologies/${s}/individuals?${new URLSearchParams({hasDirectParent:"false",size:"1000",lang:w,includeObsoleteEntities:_})}`,void 0,E)]);return{entityType:p,rootTerms:null,classesWithIndividuals:T.elements.map(V=>_i(V)),orphanedIndividuals:z.elements.map(V=>_i(V))}}else if(p==="classes"&&d){let T=await rr(`api/v2/ontologies/${s}/${p}?${new URLSearchParams({isPreferredRoot:"true",size:"1000",lang:w,includeObsoleteEntities:_})}`,void 0,E);return{entityType:p,rootTerms:T.elements.map(z=>_i(z)),classesWithIndividuals:null,orphanedIndividuals:null}}else{let T=await rr(`api/v2/ontologies/${s}/${p}?${new URLSearchParams({hasDirectParent:"false",size:"1000",lang:w,includeObsoleteEntities:_})}`,void 0,E);return{entityType:p,rootTerms:T.elements.map(z=>_i(z)),classesWithIndividuals:null,orphanedIndividuals:null}}}),bS=Sa("ontologies_node_children",async({ontologyId:s,entityTypePlural:p,entityIri:d,absoluteIdentity:w,lang:_,apiUrl:E,includeObsoleteEntities:T})=>{let z=encodeURIComponent(encodeURIComponent(d));var V;return p==="classes"?V=await rr(`api/v2/ontologies/${s}/classes/${z}/hierarchicalChildren?${new URLSearchParams({size:"1000",lang:_,includeObsoleteEntities:T})}`,void 0,E):p==="individuals"?V=await rr(`api/v2/ontologies/${s}/classes/${z}/instances?${new URLSearchParams({size:"1000",lang:_,includeObsoleteEntities:T})}`,void 0,E):V=await rr(`api/v2/ontologies/${s}/${p}/${z}/children?${new URLSearchParams({size:"1000",lang:_,includeObsoleteEntities:T})}`,void 0,E),{absoluteIdentity:w,children:V.elements.map(H=>_i(H)).map(H=>{let G=H.getHierarchicalParentReificationAxioms(d);return{iri:H.getIri(),absoluteIdentity:w+";"+H.getIri(),title:H.getName(),expandable:H.hasChildren(),entity:H,numDescendants:H.getNumHierarchicalDescendants()||H.getNumDescendants(),parentRelationToChild:G&&G.parentRelationToChild?.[0]||null,childRelationToParent:G&&G.childRelationToParent?.[0]||null}})}}),_be=He({name:"ontologies",initialState:xl,reducers:{},extraReducers:s=>{s.addCase(dS.fulfilled,(p,d)=>{p.ontology=d.payload,p.loadingOntology=!1}),s.addCase(dS.pending,p=>{p.loadingOntology=!0,p.errorMessage=xl.errorMessage}),s.addCase(dS.rejected,(p,d)=>{p.ontology=xl.ontology,p.loadingOntology=!1,p.errorMessage=d.payload}),s.addCase(mS.fulfilled,(p,d)=>{p.entity=d.payload,p.loadingEntity=!1}),s.addCase(mS.pending,p=>{p.loadingEntity=!0,p.errorMessage=xl.errorMessage}),s.addCase(mS.rejected,(p,d)=>{p.loadingEntity=!1,p.entity=xl.entity,p.errorMessage=d.payload}),s.addCase(hS.fulfilled,(p,d)=>{p.entity=d.payload,p.loadingEntity=!1}),s.addCase(hS.pending,p=>{p.loadingEntity=!0,p.errorMessage=xl.errorMessage}),s.addCase(hS.rejected,(p,d)=>{p.loadingEntity=!1,p.entity=xl.entity,p.errorMessage=d.payload}),s.addCase(gS.fulfilled,(p,d)=>{p.classInstances=d.payload,p.loadingClassInstances=!1}),s.addCase(gS.pending,p=>{p.loadingClassInstances=!0,p.errorMessage=xl.errorMessage}),s.addCase(gS.rejected,(p,d)=>{p.loadingClassInstances=!1,p.classInstances=xl.classInstances,p.errorMessage=d.payload}),s.addCase(vS.pending,p=>{++p.numPendingTreeRequests}),s.addCase(vS.fulfilled,(p,d)=>{let{rootNodes:w,nodeChildren:_,automaticallyExpandedNodes:E}=Eh([p.entity,...d.payload],p.preferredRoots,p.ontology);p.rootNodes=w,p.nodeChildren=_,p.automaticallyExpandedNodes=Array.from(new Set([...p.automaticallyExpandedNodes,...Array.from(E)])),--p.numPendingTreeRequests}),s.addCase(vS.rejected,p=>{--p.numPendingTreeRequests}),s.addCase(bS.pending,p=>{++p.numPendingTreeRequests}),s.addCase(bS.fulfilled,(p,d)=>{p.nodeChildren={...p.nodeChildren,[d.payload.absoluteIdentity]:d.payload.children},p.nodesWithChildrenLoaded.push(d.payload.absoluteIdentity),--p.numPendingTreeRequests}),s.addCase(bS.rejected,p=>{--p.numPendingTreeRequests}),s.addCase(yS.pending,p=>{++p.numPendingTreeRequests}),s.addCase(yS.fulfilled,(p,d)=>{let{rootTerms:w,classesWithIndividuals:_,orphanedIndividuals:E}=d.payload,{rootNodes:T,nodeChildren:z,automaticallyExpandedNodes:V}=Eh([...w||[],..._||[],...E||[]],p.preferredRoots,p.ontology);p.rootNodes=T,p.nodeChildren=z,p.automaticallyExpandedNodes=Array.from(new Set([...p.automaticallyExpandedNodes,...Array.from(V)])),--p.numPendingTreeRequests}),s.addCase(yS.rejected,p=>{--p.numPendingTreeRequests}),s.addCase(RM.fulfilled,(p,d)=>{p.ontologies=d.payload.elements,p.totalOntologies=d.payload.totalElements,p.loadingOntologies=!1}),s.addCase(RM.pending,p=>{p.loadingOntologies=!0,p.errorMessage=xl.errorMessage}),s.addCase(RM.rejected,(p,d)=>{p.ontologies=xl.ontologies,p.loadingOntologies=!1,p.errorMessage=d.payload}),s.addCase(zM.fulfilled,(p,d)=>{p.entities=d.payload.elements,p.totalEntities=d.payload.totalElements,p.loadingEntities=!1}),s.addCase(zM.pending,p=>{p.loadingEntities=!0,p.errorMessage=xl.errorMessage}),s.addCase(zM.rejected,(p,d)=>{p.entities=xl.entities,p.loadingEntities=!1,p.errorMessage=d.payload}),s.addCase(BY,p=>{p.nodesWithChildrenLoaded=[],p.nodeChildren={},p.rootNodes=[],p.automaticallyExpandedNodes=[]}),s.addCase(HY,(p,d)=>{if(p.preferredRoots=d.payload.entityType==="classes"&&p.ontology.getPreferredRoots().length>0,d.payload.selectedEntity){let w=!1;for(let _ of p.ontology.getPreferredRoots())if(d.payload.selectedEntity.getHierarchicalAncestorIris().indexOf(_)!==-1){w=!0;break}w||(p.preferredRoots=!1)}p.displayObsolete=!1,p.displaySiblings=!1,p.displayCounts=!0,p.manuallyExpandedNodes=[]}),s.addCase(VY,p=>{p.preferredRoots=!0}),s.addCase(qY,p=>{p.preferredRoots=!1}),s.addCase(JY,p=>{p.displayObsolete=!0}),s.addCase(GY,p=>{p.displayObsolete=!1}),s.addCase(XY,p=>{p.displaySiblings=!0}),s.addCase(KY,p=>{p.displaySiblings=!1}),s.addCase(YY,p=>{p.displayCounts=!0}),s.addCase(QY,p=>{p.displayCounts=!1}),s.addCase(UY,(p,d)=>{p.manuallyExpandedNodes=Array.from(new Set([...p.manuallyExpandedNodes,d.payload.absoluteIdentity]))}),s.addCase($Y,(p,d)=>{p.manuallyExpandedNodes=p.manuallyExpandedNodes.filter(w=>w!==d.payload.absoluteIdentity),p.automaticallyExpandedNodes=p.automaticallyExpandedNodes.filter(w=>w!==d.payload.absoluteIdentity),delete p.nodeChildren[d.payload.absoluteIdentity],p.nodesWithChildrenLoaded=p.nodesWithChildrenLoaded.filter(w=>w!==d.payload.absoluteIdentity)})}}),Sbe=_be.reducer,LM={searchResults:[],loadingSearchResults:!1,totalSearchResults:0,facets:Object.create(null)},DM=Sa("search_results",async({page:s,rowsPerPage:p,search:d,ontologyId:w,type:_,searchParams:E},{rejectWithValue:T})=>{try{let z={search:d,size:p,page:s,facetFields:"ontologyId type",ontologyId:w.length>0?w[0]:null,type:_.length>0?_[0]:null,...Object.fromEntries(E)};for(let H in z)(z[H]===void 0||z[H]===null||z[H]==="")&&delete z[H];let V=new URLSearchParams(z);return E.get("ontology")&&(V.set("ontologyId",E.get("ontology")),V.delete("ontology")),E.get("q")&&V.delete("q"),(await rr(`api/v2/entities?${V}`)).map(H=>_i(H))}catch(z){return T(z.message)}}),jbe=He({name:"search",initialState:LM,reducers:{},extraReducers:s=>{s.addCase(DM.fulfilled,(p,d)=>{p.searchResults=d.payload.elements,p.totalSearchResults=d.payload.totalElements,p.facets=d.payload.facetFieldsToCounts,p.loadingSearchResults=!1}),s.addCase(DM.pending,p=>{p.loadingSearchResults=!0}),s.addCase(DM.rejected,p=>{p.loadingSearchResults=!1,p.searchResults=LM.searchResults,p.facets=LM.facets})}}),Ibe=jbe.reducer,Pbe=j({reducer:{home:Mr,search:Ibe,ontologies:Sbe},middleware:s=>s({serializableCheck:!1})});Ki();var kbe={black:"#000",white:"#fff"},g2=kbe,Ebe={50:"#ffebee",100:"#ffcdd2",200:"#ef9a9a",300:"#e57373",400:"#ef5350",500:"#f44336",600:"#e53935",700:"#d32f2f",800:"#c62828",900:"#b71c1c",A100:"#ff8a80",A200:"#ff5252",A400:"#ff1744",A700:"#d50000"},Ch=Ebe,Cbe={50:"#f3e5f5",100:"#e1bee7",200:"#ce93d8",300:"#ba68c8",400:"#ab47bc",500:"#9c27b0",600:"#8e24aa",700:"#7b1fa2",800:"#6a1b9a",900:"#4a148c",A100:"#ea80fc",A200:"#e040fb",A400:"#d500f9",A700:"#aa00ff"},Ah=Cbe,Abe={50:"#e3f2fd",100:"#bbdefb",200:"#90caf9",300:"#64b5f6",400:"#42a5f5",500:"#2196f3",600:"#1e88e5",700:"#1976d2",800:"#1565c0",900:"#0d47a1",A100:"#82b1ff",A200:"#448aff",A400:"#2979ff",A700:"#2962ff"},Mh=Abe,Mbe={50:"#e1f5fe",100:"#b3e5fc",200:"#81d4fa",300:"#4fc3f7",400:"#29b6f6",500:"#03a9f4",600:"#039be5",700:"#0288d1",800:"#0277bd",900:"#01579b",A100:"#80d8ff",A200:"#40c4ff",A400:"#00b0ff",A700:"#0091ea"},Th=Mbe,Tbe={50:"#e8f5e9",100:"#c8e6c9",200:"#a5d6a7",300:"#81c784",400:"#66bb6a",500:"#4caf50",600:"#43a047",700:"#388e3c",800:"#2e7d32",900:"#1b5e20",A100:"#b9f6ca",A200:"#69f0ae",A400:"#00e676",A700:"#00c853"},Rh=Tbe,Rbe={50:"#fff3e0",100:"#ffe0b2",200:"#ffcc80",300:"#ffb74d",400:"#ffa726",500:"#ff9800",600:"#fb8c00",700:"#f57c00",800:"#ef6c00",900:"#e65100",A100:"#ffd180",A200:"#ffab40",A400:"#ff9100",A700:"#ff6d00"},v2=Rbe,zbe={50:"#fafafa",100:"#f5f5f5",200:"#eeeeee",300:"#e0e0e0",400:"#bdbdbd",500:"#9e9e9e",600:"#757575",700:"#616161",800:"#424242",900:"#212121",A100:"#f5f5f5",A200:"#eeeeee",A400:"#bdbdbd",A700:"#616161"},Lbe=zbe,ZY="$$material",Y0=O(Hl());de();var eQ=O(Oi());de();var Dbe=["values","unit","step"],Nbe=s=>{let p=Object.keys(s).map(d=>({key:d,val:s[d]}))||[];return p.sort((d,w)=>d.val-w.val),p.reduce((d,w)=>K({},d,{[w.key]:w.val}),{})};function Fbe(s){let{values:p={xs:0,sm:600,md:900,lg:1200,xl:1536},unit:d="px",step:w=5}=s,_=Nn(s,Dbe),E=Nbe(p),T=Object.keys(E);function z(ne){return`@media (min-width:${typeof p[ne]=="number"?p[ne]:ne}${d})`}function V(ne){return`@media (max-width:${(typeof p[ne]=="number"?p[ne]:ne)-w/100}${d})`}function H(ne,ie){let oe=T.indexOf(ie);return`@media (min-width:${typeof p[ne]=="number"?p[ne]:ne}${d}) and (max-width:${(oe!==-1&&typeof p[T[oe]]=="number"?p[T[oe]]:ie)-w/100}${d})`}function G(ne){return T.indexOf(ne)+1`@media (min-width:${NM[s]}px)`};function Ws(s,p,d){let w=s.theme||{};if(Array.isArray(p)){let _=w.breakpoints||tQ;return p.reduce((E,T,z)=>(E[_.up(_.keys[z])]=d(p[z]),E),{})}if(typeof p=="object"){let _=w.breakpoints||tQ;return Object.keys(p).reduce((E,T)=>{if(Object.keys(_.values||NM).indexOf(T)!==-1){let z=_.up(T);E[z]=d(p[T],T)}else{let z=T;E[z]=p[z]}return E},{})}return d(p)}function rQ(s={}){var p;return((p=s.keys)==null?void 0:p.reduce((d,w)=>{let _=s.up(w);return d[_]={},d},{}))||{}}function nQ(s,p){return s.reduce((d,w)=>{let _=d[w];return(!_||Object.keys(_).length===0)&&delete d[w],d},p)}function Ube(s,...p){let d=rQ(s),w=[d,...p].reduce((_,E)=>(0,Hbe.default)(_,E),{});return nQ(Object.keys(d),w)}function $be(s,p){if(typeof s!="object")return{};let d={},w=Object.keys(p);return Array.isArray(s)?w.forEach((_,E)=>{E{s[_]!=null&&(d[_]=!0)}),d}function FM({values:s,breakpoints:p,base:d}){let w=d||$be(s,p),_=Object.keys(w);if(_.length===0)return s;let E;return _.reduce((T,z,V)=>(Array.isArray(s)?(T[z]=s[V]!=null?s[V]:s[E],E=V):typeof s=="object"?(T[z]=s[z]!=null?s[z]:s[E],E=z):T[z]=s,T),{})}var Jbe=O(pn());function wS(s,p,d=!0){if(!p||typeof p!="string")return null;if(s&&s.vars&&d){let w=`vars.${p}`.split(".").reduce((_,E)=>_&&_[E]?_[E]:null,s);if(w!=null)return w}return p.split(".").reduce((w,_)=>w&&w[_]!=null?w[_]:null,s)}function OS(s,p,d,w=d){let _;return typeof s=="function"?_=s(d):Array.isArray(s)?_=s[d]||w:_=wS(s,d)||w,p&&(_=p(_,w,s)),_}function Gbe(s){let{prop:p,cssProperty:d=s.prop,themeKey:w,transform:_}=s,E=T=>{if(T[p]==null)return null;let z=T[p],V=T.theme,H=wS(V,w)||{};return Ws(T,z,G=>{let ee=OS(H,_,G);return G===ee&&typeof G=="string"&&(ee=OS(H,_,`${p}${G==="default"?"":(0,Jbe.default)(G)}`,G)),d===!1?ee:{[d]:ee}})};return E.propTypes={},E.filterProps=[p],E}var Fo=Gbe;function Xbe(s){let p={};return d=>(p[d]===void 0&&(p[d]=s(d)),p[d])}var Kbe={m:"margin",p:"padding"},Ybe={t:"Top",r:"Right",b:"Bottom",l:"Left",x:["Left","Right"],y:["Top","Bottom"]},oQ={marginX:"mx",marginY:"my",paddingX:"px",paddingY:"py"},Qbe=Xbe(s=>{if(s.length>2)if(oQ[s])s=oQ[s];else return[s];let[p,d]=s.split(""),w=Kbe[p],_=Ybe[d]||"";return Array.isArray(_)?_.map(E=>w+E):[w+_]}),WM=["m","mt","mr","mb","ml","mx","my","margin","marginTop","marginRight","marginBottom","marginLeft","marginX","marginY","marginInline","marginInlineStart","marginInlineEnd","marginBlock","marginBlockStart","marginBlockEnd"],BM=["p","pt","pr","pb","pl","px","py","padding","paddingTop","paddingRight","paddingBottom","paddingLeft","paddingX","paddingY","paddingInline","paddingInlineStart","paddingInlineEnd","paddingBlock","paddingBlockStart","paddingBlockEnd"],iQ=[...WM,...BM];function b2(s,p,d,w){var _;let E=(_=wS(s,p,!1))!=null?_:d;return typeof E=="number"?T=>typeof T=="string"?T:E*T:Array.isArray(E)?T=>typeof T=="string"?T:E[T]:typeof E=="function"?E:()=>{}}function HM(s){return b2(s,"spacing",8,"spacing")}function Q0(s,p){if(typeof p=="string"||p==null)return p;let d=Math.abs(p),w=s(d);return p>=0?w:typeof w=="number"?-w:`-${w}`}function Zbe(s,p){return d=>s.reduce((w,_)=>(w[_]=Q0(p,d),w),{})}function e3e(s,p,d,w){if(p.indexOf(d)===-1)return null;let _=Qbe(d),E=Zbe(_,w),T=s[d];return Ws(s,T,E)}function VM(s,p){let d=HM(s.theme);return Object.keys(s).map(w=>e3e(s,p,w,d)).reduce(y2,{})}function Po(s){return VM(s,WM)}Po.propTypes={},Po.filterProps=WM;function ko(s){return VM(s,BM)}ko.propTypes={},ko.filterProps=BM;function aQ(s){return VM(s,iQ)}aQ.propTypes={},aQ.filterProps=iQ;function t3e(s=8){if(s.mui)return s;let p=HM({spacing:s}),d=(...w)=>(w.length===0?[1]:w).map(_=>{let E=p(_);return typeof E=="number"?`${E}px`:E}).join(" ");return d.mui=!0,d}var r3e=O(pn());function n3e(...s){let p=s.reduce((w,_)=>(_.filterProps.forEach(E=>{w[E]=_}),w),{}),d=w=>Object.keys(w).reduce((_,E)=>p[E]?y2(_,p[E](w)):_,{});return d.propTypes={},d.filterProps=s.reduce((w,_)=>w.concat(_.filterProps),[]),d}var xS=n3e;function $l(s){return typeof s!="number"?s:`${s}px solid`}function Jl(s,p){return Fo({prop:s,themeKey:"borders",transform:p})}var o3e=Jl("border",$l),i3e=Jl("borderTop",$l),a3e=Jl("borderRight",$l),l3e=Jl("borderBottom",$l),s3e=Jl("borderLeft",$l),u3e=Jl("borderColor"),c3e=Jl("borderTopColor"),p3e=Jl("borderRightColor"),f3e=Jl("borderBottomColor"),d3e=Jl("borderLeftColor"),m3e=Jl("outline",$l),h3e=Jl("outlineColor"),_S=s=>{if(s.borderRadius!==void 0&&s.borderRadius!==null){let p=b2(s.theme,"shape.borderRadius",4,"borderRadius"),d=w=>({borderRadius:Q0(p,w)});return Ws(s,s.borderRadius,d)}return null};_S.propTypes={},_S.filterProps=["borderRadius"];var oEt=xS(o3e,i3e,a3e,l3e,s3e,u3e,c3e,p3e,f3e,d3e,_S,m3e,h3e),SS=s=>{if(s.gap!==void 0&&s.gap!==null){let p=b2(s.theme,"spacing",8,"gap"),d=w=>({gap:Q0(p,w)});return Ws(s,s.gap,d)}return null};SS.propTypes={},SS.filterProps=["gap"];var jS=s=>{if(s.columnGap!==void 0&&s.columnGap!==null){let p=b2(s.theme,"spacing",8,"columnGap"),d=w=>({columnGap:Q0(p,w)});return Ws(s,s.columnGap,d)}return null};jS.propTypes={},jS.filterProps=["columnGap"];var IS=s=>{if(s.rowGap!==void 0&&s.rowGap!==null){let p=b2(s.theme,"spacing",8,"rowGap"),d=w=>({rowGap:Q0(p,w)});return Ws(s,s.rowGap,d)}return null};IS.propTypes={},IS.filterProps=["rowGap"];var g3e=Fo({prop:"gridColumn"}),v3e=Fo({prop:"gridRow"}),y3e=Fo({prop:"gridAutoFlow"}),b3e=Fo({prop:"gridAutoColumns"}),w3e=Fo({prop:"gridAutoRows"}),O3e=Fo({prop:"gridTemplateColumns"}),x3e=Fo({prop:"gridTemplateRows"}),_3e=Fo({prop:"gridTemplateAreas"}),S3e=Fo({prop:"gridArea"}),iEt=xS(SS,jS,IS,g3e,v3e,y3e,b3e,w3e,O3e,x3e,_3e,S3e);function zh(s,p){return p==="grey"?p:s}var j3e=Fo({prop:"color",themeKey:"palette",transform:zh}),I3e=Fo({prop:"bgcolor",cssProperty:"backgroundColor",themeKey:"palette",transform:zh}),P3e=Fo({prop:"backgroundColor",themeKey:"palette",transform:zh}),aEt=xS(j3e,I3e,P3e);function _l(s){return s<=1&&s!==0?`${s*100}%`:s}var k3e=Fo({prop:"width",transform:_l}),qM=s=>{if(s.maxWidth!==void 0&&s.maxWidth!==null){let p=d=>{var w,_;let E=((w=s.theme)==null||(w=w.breakpoints)==null||(w=w.values)==null?void 0:w[d])||NM[d];return E?((_=s.theme)==null||(_=_.breakpoints)==null?void 0:_.unit)!=="px"?{maxWidth:`${E}${s.theme.breakpoints.unit}`}:{maxWidth:E}:{maxWidth:_l(d)}};return Ws(s,s.maxWidth,p)}return null};qM.filterProps=["maxWidth"];var E3e=Fo({prop:"minWidth",transform:_l}),C3e=Fo({prop:"height",transform:_l}),A3e=Fo({prop:"maxHeight",transform:_l}),M3e=Fo({prop:"minHeight",transform:_l}),lEt=Fo({prop:"size",cssProperty:"width",transform:_l}),sEt=Fo({prop:"size",cssProperty:"height",transform:_l}),T3e=Fo({prop:"boxSizing"}),uEt=xS(k3e,qM,E3e,C3e,A3e,M3e,T3e),R3e={border:{themeKey:"borders",transform:$l},borderTop:{themeKey:"borders",transform:$l},borderRight:{themeKey:"borders",transform:$l},borderBottom:{themeKey:"borders",transform:$l},borderLeft:{themeKey:"borders",transform:$l},borderColor:{themeKey:"palette"},borderTopColor:{themeKey:"palette"},borderRightColor:{themeKey:"palette"},borderBottomColor:{themeKey:"palette"},borderLeftColor:{themeKey:"palette"},outline:{themeKey:"borders",transform:$l},outlineColor:{themeKey:"palette"},borderRadius:{themeKey:"shape.borderRadius",style:_S},color:{themeKey:"palette",transform:zh},bgcolor:{themeKey:"palette",cssProperty:"backgroundColor",transform:zh},backgroundColor:{themeKey:"palette",transform:zh},p:{style:ko},pt:{style:ko},pr:{style:ko},pb:{style:ko},pl:{style:ko},px:{style:ko},py:{style:ko},padding:{style:ko},paddingTop:{style:ko},paddingRight:{style:ko},paddingBottom:{style:ko},paddingLeft:{style:ko},paddingX:{style:ko},paddingY:{style:ko},paddingInline:{style:ko},paddingInlineStart:{style:ko},paddingInlineEnd:{style:ko},paddingBlock:{style:ko},paddingBlockStart:{style:ko},paddingBlockEnd:{style:ko},m:{style:Po},mt:{style:Po},mr:{style:Po},mb:{style:Po},ml:{style:Po},mx:{style:Po},my:{style:Po},margin:{style:Po},marginTop:{style:Po},marginRight:{style:Po},marginBottom:{style:Po},marginLeft:{style:Po},marginX:{style:Po},marginY:{style:Po},marginInline:{style:Po},marginInlineStart:{style:Po},marginInlineEnd:{style:Po},marginBlock:{style:Po},marginBlockStart:{style:Po},marginBlockEnd:{style:Po},displayPrint:{cssProperty:!1,transform:s=>({"@media print":{display:s}})},display:{},overflow:{},textOverflow:{},visibility:{},whiteSpace:{},flexBasis:{},flexDirection:{},flexWrap:{},justifyContent:{},alignItems:{},alignContent:{},order:{},flex:{},flexGrow:{},flexShrink:{},alignSelf:{},justifyItems:{},justifySelf:{},gap:{style:SS},rowGap:{style:IS},columnGap:{style:jS},gridColumn:{},gridRow:{},gridAutoFlow:{},gridAutoColumns:{},gridAutoRows:{},gridTemplateColumns:{},gridTemplateRows:{},gridTemplateAreas:{},gridArea:{},position:{},zIndex:{themeKey:"zIndex"},top:{},right:{},bottom:{},left:{},boxShadow:{themeKey:"shadows"},width:{transform:_l},maxWidth:{style:qM},minWidth:{transform:_l},height:{transform:_l},maxHeight:{transform:_l},minHeight:{transform:_l},boxSizing:{},fontFamily:{themeKey:"typography"},fontSize:{themeKey:"typography"},fontStyle:{themeKey:"typography"},fontWeight:{themeKey:"typography"},letterSpacing:{},textTransform:{},lineHeight:{},textAlign:{},typography:{cssProperty:!1,themeKey:"typography"}},UM=R3e;function z3e(...s){let p=s.reduce((w,_)=>w.concat(Object.keys(_)),[]),d=new Set(p);return s.every(w=>d.size===Object.keys(w).length)}function L3e(s,p){return typeof s=="function"?s(p):s}function D3e(){function s(d,w,_,E){let T={[d]:w,theme:_},z=E[d];if(!z)return{[d]:w};let{cssProperty:V=d,themeKey:H,transform:G,style:ee}=z;if(w==null)return null;if(H==="typography"&&w==="inherit")return{[d]:w};let ne=wS(_,H)||{};return ee?ee(T):Ws(T,w,ie=>{let oe=OS(ne,G,ie);return ie===oe&&typeof ie=="string"&&(oe=OS(ne,G,`${d}${ie==="default"?"":(0,r3e.default)(ie)}`,ie)),V===!1?oe:{[V]:oe}})}function p(d){var w;let{sx:_,theme:E={}}=d||{};if(!_)return null;let T=(w=E.unstable_sxConfig)!=null?w:UM;function z(V){let H=V;if(typeof V=="function")H=V(E);else if(typeof V!="object")return V;if(!H)return null;let G=rQ(E.breakpoints),ee=Object.keys(G),ne=G;return Object.keys(H).forEach(ie=>{let oe=L3e(H[ie],E);if(oe!=null)if(typeof oe=="object")if(T[ie])ne=y2(ne,s(ie,oe,E,T));else{let ce=Ws({theme:E},oe,me=>({[ie]:me}));z3e(ce,oe)?ne[ie]=p({sx:oe,theme:E}):ne=y2(ne,ce)}else ne=y2(ne,s(ie,oe,E,T))}),nQ(ee,ne)}return Array.isArray(_)?_.map(z):z(_)}return p}var lQ=D3e();lQ.filterProps=["sx"];var sQ=lQ;function N3e(s,p){let d=this;return d.vars&&typeof d.getColorSchemeSelector=="function"?{[d.getColorSchemeSelector(s).replace(/(\[[^\]]+\])/,"*:where($1)")]:p}:d.palette.mode===s?p:{}}var F3e=["breakpoints","palette","spacing","shape"];function W3e(s={},...p){let{breakpoints:d={},palette:w={},spacing:_,shape:E={}}=s,T=Nn(s,F3e),z=Fbe(d),V=t3e(_),H=(0,eQ.default)({breakpoints:z,direction:"ltr",components:{},palette:K({mode:"light"},w),spacing:V,shape:K({},Bbe,E)},T);return H.applyStyles=N3e,H=p.reduce((G,ee)=>(0,eQ.default)(G,ee),H),H.unstable_sxConfig=K({},UM,T?.unstable_sxConfig),H.unstable_sx=function(G){return sQ({sx:G,theme:this})},H}var $M=W3e,B3e=O(C()),H3e=O(Hl());function V3e(s){return Object.keys(s).length===0}function q3e(s=null){let p=B3e.useContext(H3e.ThemeContext);return!p||V3e(p)?s:p}var U3e=q3e,$3e=$M();function J3e(s=$3e){return U3e(s)}var G3e=J3e;de();var X3e=O(Oi()),K3e=["sx"],Y3e=s=>{var p,d;let w={systemProps:{},otherProps:{}},_=(p=s==null||(d=s.theme)==null?void 0:d.unstable_sxConfig)!=null?p:UM;return Object.keys(s).forEach(E=>{_[E]?w.systemProps[E]=s[E]:w.otherProps[E]=s[E]}),w};function Q3e(s){let{sx:p}=s,d=Nn(s,K3e),{systemProps:w,otherProps:_}=Y3e(d),E;return Array.isArray(p)?E=[w,...p]:typeof p=="function"?E=(...T)=>{let z=p(...T);return(0,X3e.isPlainObject)(z)?K({},w,z):w}:E=K({},w,p),K({},_,{sx:E})}var uQ=s=>s,Z3e=()=>{let s=uQ;return{configure(p){s=p},generate(p){return s(p)},reset(){s=uQ}}},e5e=Z3e(),t5e=e5e;function cQ(s){var p,d,w="";if(typeof s=="string"||typeof s=="number")w+=s;else if(typeof s=="object")if(Array.isArray(s)){var _=s.length;for(p=0;p<_;p++)s[p]&&(d=cQ(s[p]))&&(w&&(w+=" "),w+=d)}else for(d in s)s[d]&&(w&&(w+=" "),w+=d);return w}function r5e(){for(var s,p,d=0,w="",_=arguments.length;d<_;d++)(s=arguments[d])&&(p=cQ(s))&&(w&&(w+=" "),w+=p);return w}var Wo=r5e,n5e={active:"active",checked:"checked",completed:"completed",disabled:"disabled",error:"error",expanded:"expanded",focused:"focused",focusVisible:"focusVisible",open:"open",readOnly:"readOnly",required:"required",selected:"selected"};function Gl(s,p,d="Mui"){let w=n5e[p];return w?`${d}-${w}`:`${t5e.generate(s)}-${p}`}function Bs(s,p,d="Mui"){let w={};return p.forEach(_=>{w[_]=Gl(s,_,d)}),w}de();var pQ=O(Hl()),o5e=O(Oi()),i5e=["ownerState"],a5e=["variants"],l5e=["name","slot","skipVariantsResolver","skipSx","overridesResolver"];function s5e(s){return Object.keys(s).length===0}function u5e(s){return typeof s=="string"&&s.charCodeAt(0)>96}function JM(s){return s!=="ownerState"&&s!=="theme"&&s!=="sx"&&s!=="as"}var c5e=$M(),p5e=s=>s&&s.charAt(0).toLowerCase()+s.slice(1);function PS({defaultTheme:s,theme:p,themeId:d}){return s5e(p)?s:p[d]||p}function f5e(s){return s?(p,d)=>d[s]:null}function kS(s,p){let{ownerState:d}=p,w=Nn(p,i5e),_=typeof s=="function"?s(K({ownerState:d},w)):s;if(Array.isArray(_))return _.flatMap(E=>kS(E,K({ownerState:d},w)));if(_&&typeof _=="object"&&Array.isArray(_.variants)){let{variants:E=[]}=_,T=Nn(_,a5e);return E.forEach(z=>{let V=!0;typeof z.props=="function"?V=z.props(K({ownerState:d},w,d)):Object.keys(z.props).forEach(H=>{d?.[H]!==z.props[H]&&w[H]!==z.props[H]&&(V=!1)}),V&&(Array.isArray(T)||(T=[T]),T.push(typeof z.style=="function"?z.style(K({ownerState:d},w,d)):z.style))}),T}return _}function d5e(s={}){let{themeId:p,defaultTheme:d=c5e,rootShouldForwardProp:w=JM,slotShouldForwardProp:_=JM}=s,E=T=>sQ(K({},T,{theme:PS(K({},T,{defaultTheme:d,themeId:p}))}));return E.__mui_systemSx=!0,(T,z={})=>{(0,pQ.internal_processStyles)(T,ke=>ke.filter(we=>!(we!=null&&we.__mui_systemSx)));let{name:V,slot:H,skipVariantsResolver:G,skipSx:ee,overridesResolver:ne=f5e(p5e(H))}=z,ie=Nn(z,l5e),oe=G!==void 0?G:H&&H!=="Root"&&H!=="root"||!1,ce=ee||!1,me,ae=JM;H==="Root"||H==="root"?ae=w:H?ae=_:u5e(T)&&(ae=void 0);let Te=(0,pQ.default)(T,K({shouldForwardProp:ae,label:me},ie)),Ne=ke=>typeof ke=="function"&&ke.__emotion_real!==ke||(0,o5e.isPlainObject)(ke)?we=>kS(ke,K({},we,{theme:PS({theme:we.theme,defaultTheme:d,themeId:p})})):ke,je=(ke,...we)=>{let Ae=Ne(ke),ue=we?we.map(Ne):[];V&&ne&&ue.push(We=>{let Je=PS(K({},We,{defaultTheme:d,themeId:p}));if(!Je.components||!Je.components[V]||!Je.components[V].styleOverrides)return null;let tt=Je.components[V].styleOverrides,vt={};return Object.entries(tt).forEach(([qt,Jt])=>{vt[qt]=kS(Jt,K({},We,{theme:Je}))}),ne(We,vt)}),V&&!oe&&ue.push(We=>{var Je;let tt=PS(K({},We,{defaultTheme:d,themeId:p})),vt=tt==null||(Je=tt.components)==null||(Je=Je[V])==null?void 0:Je.variants;return kS({variants:vt},K({},We,{theme:tt}))}),ce||ue.push(E);let Se=ue.length-we.length;if(Array.isArray(ke)&&Se>0){let We=new Array(Se).fill("");Ae=[...ke,...We],Ae.raw=[...ke.raw,...We]}let ze=Te(Ae,...ue);return T.muiName&&(ze.muiName=T.muiName),ze};return Te.withConfig&&(je.withConfig=Te.withConfig),je}}var m5e=d5e(),h5e=m5e;de();function fQ(s,p){let d=K({},p);return Object.keys(s).forEach(w=>{if(w.toString().match(/^(components|slots)$/))d[w]=K({},s[w],d[w]);else if(w.toString().match(/^(componentsProps|slotProps)$/)){let _=s[w]||{},E=p[w];d[w]={},!E||!Object.keys(E)?d[w]=_:!_||!Object.keys(_)?d[w]=E:(d[w]=K({},E),Object.keys(_).forEach(T=>{d[w][T]=fQ(_[T],E[T])}))}else d[w]===void 0&&(d[w]=s[w])}),d}function g5e(s){let{theme:p,name:d,props:w}=s;return!p||!p.components||!p.components[d]||!p.components[d].defaultProps?w:fQ(p.components[d].defaultProps,w)}function dQ({props:s,name:p,defaultTheme:d,themeId:w}){let _=G3e(d);return w&&(_=_[w]||_),g5e({theme:_,name:p,props:s})}var mQ=O(C()),v5e=typeof window<"u"?mQ.useLayoutEffect:mQ.useEffect,y5e=v5e;function b5e(...s){return s.reduce((p,d)=>d==null?p:function(...w){p.apply(this,w),d.apply(this,w)},()=>{})}var w5e=O(C());function O5e(s,p){var d,w;return w5e.isValidElement(s)&&p.indexOf((d=s.type.muiName)!=null?d:(w=s.type)==null||(w=w._payload)==null||(w=w.value)==null?void 0:w.muiName)!==-1}function x5e(s,p){typeof s=="function"?s(p):s&&(s.current=p)}var GM=O(C()),hQ=0;function _5e(s){let[p,d]=GM.useState(s),w=s||p;return GM.useEffect(()=>{p==null&&(hQ+=1,d(`mui-${hQ}`))},[p]),w}var gQ=GM["useId".toString()];function S5e(s){if(gQ!==void 0){let p=gQ();return s??p}return _5e(s)}var XM=O(C());function j5e({controlled:s,default:p,name:d,state:w="value"}){let{current:_}=XM.useRef(s!==void 0),[E,T]=XM.useState(p),z=_?s:E,V=XM.useCallback(H=>{_||T(H)},[]);return[z,V]}var vQ=O(C());function I5e(s){let p=vQ.useRef(s);return y5e(()=>{p.current=s}),vQ.useRef((...d)=>(0,p.current)(...d)).current}var P5e=I5e,k5e=O(C());function E5e(...s){return k5e.useMemo(()=>s.every(p=>p==null)?null:p=>{s.forEach(d=>{x5e(d,p)})},s)}var C5e=O(C()),yQ={};function A5e(s,p){let d=C5e.useRef(yQ);return d.current===yQ&&(d.current=s(p)),d}var M5e=O(C()),T5e=[];function R5e(s){M5e.useEffect(s,T5e)}var bQ=class T2e{constructor(){this.currentId=null,this.clear=()=>{this.currentId!==null&&(clearTimeout(this.currentId),this.currentId=null)},this.disposeEffect=()=>this.clear}static create(){return new T2e}start(p,d){this.clear(),this.currentId=setTimeout(()=>{this.currentId=null,d()},p)}};function z5e(){let s=A5e(bQ.create).current;return R5e(s.disposeEffect),s}var wQ=O(C()),ES=!0,KM=!1,L5e=new bQ,D5e={text:!0,search:!0,url:!0,tel:!0,email:!0,password:!0,number:!0,date:!0,month:!0,week:!0,time:!0,datetime:!0,"datetime-local":!0};function N5e(s){let{type:p,tagName:d}=s;return!!(d==="INPUT"&&D5e[p]&&!s.readOnly||d==="TEXTAREA"&&!s.readOnly||s.isContentEditable)}function F5e(s){s.metaKey||s.altKey||s.ctrlKey||(ES=!0)}function YM(){ES=!1}function W5e(){this.visibilityState==="hidden"&&KM&&(ES=!0)}function B5e(s){s.addEventListener("keydown",F5e,!0),s.addEventListener("mousedown",YM,!0),s.addEventListener("pointerdown",YM,!0),s.addEventListener("touchstart",YM,!0),s.addEventListener("visibilitychange",W5e,!0)}function H5e(s){let{target:p}=s;try{return p.matches(":focus-visible")}catch{}return ES||N5e(p)}function V5e(){let s=wQ.useCallback(_=>{_!=null&&B5e(_.ownerDocument)},[]),p=wQ.useRef(!1);function d(){return p.current?(KM=!0,L5e.start(100,()=>{KM=!1}),p.current=!1,!0):!1}function w(_){return H5e(_)?(p.current=!0,!0):!1}return{isFocusVisibleRef:p,onFocus:w,onBlur:d,ref:s}}function Hs(s,p,d=void 0){let w={};return Object.keys(s).forEach(_=>{w[_]=s[_].reduce((E,T)=>{if(T){let z=p(T);z!==""&&E.push(z),d&&d[T]&&E.push(d[T])}return E},[]).join(" ")}),w}de();var QM=O(C()),q5e=O(Oi()),U5e=O(Xr()),$5e=["component","direction","spacing","divider","children","className","useFlexGap"],J5e=$M(),G5e=h5e("div",{name:"MuiStack",slot:"Root",overridesResolver:(s,p)=>p.root});function X5e(s){return dQ({props:s,name:"MuiStack",defaultTheme:J5e})}function K5e(s,p){let d=QM.Children.toArray(s).filter(Boolean);return d.reduce((w,_,E)=>(w.push(_),E({row:"Left","row-reverse":"Right",column:"Top","column-reverse":"Bottom"})[s],Q5e=({ownerState:s,theme:p})=>{let d=K({display:"flex",flexDirection:"column"},Ws({theme:p},FM({values:s.direction,breakpoints:p.breakpoints.values}),w=>({flexDirection:w})));if(s.spacing){let w=HM(p),_=Object.keys(p.breakpoints.values).reduce((z,V)=>((typeof s.spacing=="object"&&s.spacing[V]!=null||typeof s.direction=="object"&&s.direction[V]!=null)&&(z[V]=!0),z),{}),E=FM({values:s.direction,base:_}),T=FM({values:s.spacing,base:_});typeof E=="object"&&Object.keys(E).forEach((z,V,H)=>{if(!E[z]){let G=V>0?E[H[V-1]]:"column";E[z]=G}}),d=(0,q5e.default)(d,Ws({theme:p},T,(z,V)=>s.useFlexGap?{gap:Q0(w,z)}:{"& > :not(style):not(style)":{margin:0},"& > :not(style) ~ :not(style)":{[`margin${Y5e(V?E[V]:s.direction)}`]:Q0(w,z)}}))}return d=Ube(p.breakpoints,d),d};function Z5e(s={}){let{createStyledComponent:p=G5e,useThemeProps:d=X5e,componentName:w="MuiStack"}=s,_=()=>Hs({root:["root"]},T=>Gl(w,T),{}),E=p(Q5e);return QM.forwardRef(function(T,z){let V=d(T),H=Q3e(V),{component:G="div",direction:ee="column",spacing:ne=0,divider:ie,children:oe,className:ce,useFlexGap:me=!1}=H,ae=Nn(H,$5e),Te={direction:ee,spacing:ne,useFlexGap:me},Ne=_();return(0,U5e.jsx)(E,K({as:G,ownerState:Te,ref:z,className:Wo(Ne.root,ce)},ae,{children:ie?K5e(oe,ie):oe}))})}de();var e4e=O(Yi()),ZM=O(Oi()),OQ=O(S0()),t4e=O(Ym());de();function r4e(s,p){return K({toolbar:{minHeight:56,[s.up("xs")]:{"@media (orientation: landscape)":{minHeight:48}},[s.up("sm")]:{minHeight:64}}},p)}de();var xQ=O(Yi()),n4e=O(Oi()),eT=O(P0()),o4e=["mode","contrastThreshold","tonalOffset"],_Q={text:{primary:"rgba(0, 0, 0, 0.87)",secondary:"rgba(0, 0, 0, 0.6)",disabled:"rgba(0, 0, 0, 0.38)"},divider:"rgba(0, 0, 0, 0.12)",background:{paper:g2.white,default:g2.white},action:{active:"rgba(0, 0, 0, 0.54)",hover:"rgba(0, 0, 0, 0.04)",hoverOpacity:.04,selected:"rgba(0, 0, 0, 0.08)",selectedOpacity:.08,disabled:"rgba(0, 0, 0, 0.26)",disabledBackground:"rgba(0, 0, 0, 0.12)",disabledOpacity:.38,focus:"rgba(0, 0, 0, 0.12)",focusOpacity:.12,activatedOpacity:.12}},tT={text:{primary:g2.white,secondary:"rgba(255, 255, 255, 0.7)",disabled:"rgba(255, 255, 255, 0.5)",icon:"rgba(255, 255, 255, 0.5)"},divider:"rgba(255, 255, 255, 0.12)",background:{paper:"#121212",default:"#121212"},action:{active:g2.white,hover:"rgba(255, 255, 255, 0.08)",hoverOpacity:.08,selected:"rgba(255, 255, 255, 0.16)",selectedOpacity:.16,disabled:"rgba(255, 255, 255, 0.3)",disabledBackground:"rgba(255, 255, 255, 0.12)",disabledOpacity:.38,focus:"rgba(255, 255, 255, 0.12)",focusOpacity:.12,activatedOpacity:.24}};function SQ(s,p,d,w){let _=w.light||w,E=w.dark||w*1.5;s[p]||(s.hasOwnProperty(d)?s[p]=s[d]:p==="light"?s.light=(0,eT.lighten)(s.main,_):p==="dark"&&(s.dark=(0,eT.darken)(s.main,E)))}function i4e(s="light"){return s==="dark"?{main:Mh[200],light:Mh[50],dark:Mh[400]}:{main:Mh[700],light:Mh[400],dark:Mh[800]}}function a4e(s="light"){return s==="dark"?{main:Ah[200],light:Ah[50],dark:Ah[400]}:{main:Ah[500],light:Ah[300],dark:Ah[700]}}function l4e(s="light"){return s==="dark"?{main:Ch[500],light:Ch[300],dark:Ch[700]}:{main:Ch[700],light:Ch[400],dark:Ch[800]}}function s4e(s="light"){return s==="dark"?{main:Th[400],light:Th[300],dark:Th[700]}:{main:Th[700],light:Th[500],dark:Th[900]}}function u4e(s="light"){return s==="dark"?{main:Rh[400],light:Rh[300],dark:Rh[700]}:{main:Rh[800],light:Rh[500],dark:Rh[900]}}function c4e(s="light"){return s==="dark"?{main:v2[400],light:v2[300],dark:v2[700]}:{main:"#ed6c02",light:v2[500],dark:v2[900]}}function p4e(s){let{mode:p="light",contrastThreshold:d=3,tonalOffset:w=.2}=s,_=Nn(s,o4e),E=s.primary||i4e(p),T=s.secondary||a4e(p),z=s.error||l4e(p),V=s.info||s4e(p),H=s.success||u4e(p),G=s.warning||c4e(p);function ee(oe){return(0,eT.getContrastRatio)(oe,tT.text.primary)>=d?tT.text.primary:_Q.text.primary}let ne=({color:oe,name:ce,mainShade:me=500,lightShade:ae=300,darkShade:Te=700})=>{if(oe=K({},oe),!oe.main&&oe[me]&&(oe.main=oe[me]),!oe.hasOwnProperty("main"))throw new Error((0,xQ.default)(11,ce?` (${ce})`:"",me));if(typeof oe.main!="string")throw new Error((0,xQ.default)(12,ce?` (${ce})`:"",JSON.stringify(oe.main)));return SQ(oe,"light",ae,w),SQ(oe,"dark",Te,w),oe.contrastText||(oe.contrastText=ee(oe.main)),oe},ie={dark:tT,light:_Q};return(0,n4e.default)(K({common:K({},g2),mode:p,primary:ne({color:E,name:"primary"}),secondary:ne({color:T,name:"secondary",mainShade:"A400",lightShade:"A200",darkShade:"A700"}),error:ne({color:z,name:"error"}),warning:ne({color:G,name:"warning"}),info:ne({color:V,name:"info"}),success:ne({color:H,name:"success"}),grey:Lbe,contrastThreshold:d,getContrastText:ee,augmentColor:ne,tonalOffset:w},ie[p]),_)}de();var f4e=O(Oi()),d4e=["fontFamily","fontSize","fontWeightLight","fontWeightRegular","fontWeightMedium","fontWeightBold","htmlFontSize","allVariants","pxToRem"];function m4e(s){return Math.round(s*1e5)/1e5}var jQ={textTransform:"uppercase"},IQ='"Roboto", "Helvetica", "Arial", sans-serif';function h4e(s,p){let d=typeof p=="function"?p(s):p,{fontFamily:w=IQ,fontSize:_=14,fontWeightLight:E=300,fontWeightRegular:T=400,fontWeightMedium:z=500,fontWeightBold:V=700,htmlFontSize:H=16,allVariants:G,pxToRem:ee}=d,ne=Nn(d,d4e),ie=_/14,oe=ee||(ae=>`${ae/H*ie}rem`),ce=(ae,Te,Ne,je,ke)=>K({fontFamily:w,fontWeight:ae,fontSize:oe(Te),lineHeight:Ne},w===IQ?{letterSpacing:`${m4e(je/Te)}em`}:{},ke,G),me={h1:ce(E,96,1.167,-1.5),h2:ce(E,60,1.2,-.5),h3:ce(T,48,1.167,0),h4:ce(T,34,1.235,.25),h5:ce(T,24,1.334,0),h6:ce(z,20,1.6,.15),subtitle1:ce(T,16,1.75,.15),subtitle2:ce(z,14,1.57,.1),body1:ce(T,16,1.5,.15),body2:ce(T,14,1.43,.15),button:ce(z,14,1.75,.4,jQ),caption:ce(T,12,1.66,.4),overline:ce(T,12,2.66,1,jQ),inherit:{fontFamily:"inherit",fontWeight:"inherit",fontSize:"inherit",lineHeight:"inherit",letterSpacing:"inherit"}};return(0,f4e.default)(K({htmlFontSize:H,pxToRem:oe,fontFamily:w,fontSize:_,fontWeightLight:E,fontWeightRegular:T,fontWeightMedium:z,fontWeightBold:V},me),ne,{clone:!1})}function yo(...s){return[`${s[0]}px ${s[1]}px ${s[2]}px ${s[3]}px rgba(0,0,0,${.2})`,`${s[4]}px ${s[5]}px ${s[6]}px ${s[7]}px rgba(0,0,0,${.14})`,`${s[8]}px ${s[9]}px ${s[10]}px ${s[11]}px rgba(0,0,0,${.12})`].join(",")}var g4e=["none",yo(0,2,1,-1,0,1,1,0,0,1,3,0),yo(0,3,1,-2,0,2,2,0,0,1,5,0),yo(0,3,3,-2,0,3,4,0,0,1,8,0),yo(0,2,4,-1,0,4,5,0,0,1,10,0),yo(0,3,5,-1,0,5,8,0,0,1,14,0),yo(0,3,5,-1,0,6,10,0,0,1,18,0),yo(0,4,5,-2,0,7,10,1,0,2,16,1),yo(0,5,5,-3,0,8,10,1,0,3,14,2),yo(0,5,6,-3,0,9,12,1,0,3,16,2),yo(0,6,6,-3,0,10,14,1,0,4,18,3),yo(0,6,7,-4,0,11,15,1,0,4,20,3),yo(0,7,8,-4,0,12,17,2,0,5,22,4),yo(0,7,8,-4,0,13,19,2,0,5,24,4),yo(0,7,9,-4,0,14,21,2,0,5,26,4),yo(0,8,9,-5,0,15,22,2,0,6,28,5),yo(0,8,10,-5,0,16,24,2,0,6,30,5),yo(0,8,11,-5,0,17,26,2,0,6,32,5),yo(0,9,11,-5,0,18,28,2,0,7,34,6),yo(0,9,12,-6,0,19,29,2,0,7,36,6),yo(0,10,13,-6,0,20,31,3,0,8,38,7),yo(0,10,13,-6,0,21,33,3,0,8,40,7),yo(0,10,14,-6,0,22,35,3,0,8,42,7),yo(0,11,14,-7,0,23,36,3,0,9,44,8),yo(0,11,15,-7,0,24,38,3,0,9,46,8)],v4e=g4e;de();var y4e=["duration","easing","delay"],b4e={easeInOut:"cubic-bezier(0.4, 0, 0.2, 1)",easeOut:"cubic-bezier(0.0, 0, 0.2, 1)",easeIn:"cubic-bezier(0.4, 0, 1, 1)",sharp:"cubic-bezier(0.4, 0, 0.6, 1)"},w4e={shortest:150,shorter:200,short:250,standard:300,complex:375,enteringScreen:225,leavingScreen:195};function PQ(s){return`${Math.round(s)}ms`}function O4e(s){if(!s)return 0;let p=s/36;return Math.round((4+15*p**.25+p/5)*10)}function x4e(s){let p=K({},b4e,s.easing),d=K({},w4e,s.duration);return K({getAutoHeightDuration:O4e,create:(w=["all"],_={})=>{let{duration:E=d.standard,easing:T=p.easeInOut,delay:z=0}=_,V=Nn(_,y4e);return(Array.isArray(w)?w:[w]).map(H=>`${H} ${typeof E=="string"?E:PQ(E)} ${T} ${typeof z=="string"?z:PQ(z)}`).join(",")}},s,{easing:p,duration:d})}var _4e={mobileStepper:1e3,fab:1050,speedDial:1050,appBar:1100,drawer:1200,modal:1300,snackbar:1400,tooltip:1500},S4e=_4e,j4e=["breakpoints","mixins","spacing","palette","transitions","typography","shape"];function I4e(s={},...p){let{mixins:d={},palette:w={},transitions:_={},typography:E={}}=s,T=Nn(s,j4e);if(s.vars)throw new Error((0,e4e.default)(18));let z=p4e(w),V=(0,t4e.default)(s),H=(0,ZM.default)(V,{mixins:r4e(V.breakpoints,d),palette:z,shadows:v4e.slice(),typography:h4e(z,E),transitions:x4e(_),zIndex:K({},S4e)});return H=(0,ZM.default)(H,T),H=p.reduce((G,ee)=>(0,ZM.default)(G,ee),H),H.unstable_sxConfig=K({},OQ.unstable_defaultSxConfig,T?.unstable_sxConfig),H.unstable_sx=function(G){return(0,OQ.default)({sx:G,theme:this})},H}var kQ=I4e,P4e=kQ(),EQ=P4e;function Vs({props:s,name:p}){return dQ({props:s,name:p,defaultTheme:EQ,themeId:ZY})}var CQ=O(k0()),w2=s=>(0,CQ.shouldForwardProp)(s)&&s!=="classes",k4e=(0,CQ.default)({themeId:ZY,defaultTheme:EQ,rootShouldForwardProp:w2}),Zo=k4e,E4e=O(pn()),xo=E4e.default,C4e=b5e;de();var AQ=O(C());de();var MQ=O(C());function A4e(s){return Gl("MuiSvgIcon",s)}var cEt=Bs("MuiSvgIcon",["root","colorPrimary","colorSecondary","colorAction","colorError","colorDisabled","fontSizeInherit","fontSizeSmall","fontSizeMedium","fontSizeLarge"]),M4e=O(Xr()),T4e=O(Xr()),R4e=["children","className","color","component","fontSize","htmlColor","inheritViewBox","titleAccess","viewBox"],z4e=s=>{let{color:p,fontSize:d,classes:w}=s,_={root:["root",p!=="inherit"&&`color${xo(p)}`,`fontSize${xo(d)}`]};return Hs(_,A4e,w)},L4e=Zo("svg",{name:"MuiSvgIcon",slot:"Root",overridesResolver:(s,p)=>{let{ownerState:d}=s;return[p.root,d.color!=="inherit"&&p[`color${xo(d.color)}`],p[`fontSize${xo(d.fontSize)}`]]}})(({theme:s,ownerState:p})=>{var d,w,_,E,T,z,V,H,G,ee,ne,ie,oe;return{userSelect:"none",width:"1em",height:"1em",display:"inline-block",fill:p.hasSvgAsChild?void 0:"currentColor",flexShrink:0,transition:(d=s.transitions)==null||(w=d.create)==null?void 0:w.call(d,"fill",{duration:(_=s.transitions)==null||(_=_.duration)==null?void 0:_.shorter}),fontSize:{inherit:"inherit",small:((E=s.typography)==null||(T=E.pxToRem)==null?void 0:T.call(E,20))||"1.25rem",medium:((z=s.typography)==null||(V=z.pxToRem)==null?void 0:V.call(z,24))||"1.5rem",large:((H=s.typography)==null||(G=H.pxToRem)==null?void 0:G.call(H,35))||"2.1875rem"}[p.fontSize],color:(ee=(ne=(s.vars||s).palette)==null||(ne=ne[p.color])==null?void 0:ne.main)!=null?ee:{action:(ie=(s.vars||s).palette)==null||(ie=ie.action)==null?void 0:ie.active,disabled:(oe=(s.vars||s).palette)==null||(oe=oe.action)==null?void 0:oe.disabled,inherit:void 0}[p.color]}}),TQ=MQ.forwardRef(function(s,p){let d=Vs({props:s,name:"MuiSvgIcon"}),{children:w,className:_,color:E="inherit",component:T="svg",fontSize:z="medium",htmlColor:V,inheritViewBox:H=!1,titleAccess:G,viewBox:ee="0 0 24 24"}=d,ne=Nn(d,R4e),ie=MQ.isValidElement(w)&&w.type==="svg",oe=K({},d,{color:E,component:T,fontSize:z,instanceFontSize:s.fontSize,inheritViewBox:H,viewBox:ee,hasSvgAsChild:ie}),ce={};H||(ce.viewBox=ee);let me=z4e(oe);return(0,T4e.jsxs)(L4e,K({as:T,className:Wo(me.root,_),focusable:"false",color:V,"aria-hidden":G?void 0:!0,role:G?"img":void 0,ref:p},ce,ne,ie&&w.props,{ownerState:oe,children:[ie?w.props.children:w,G?(0,M4e.jsx)("title",{children:G}):null]}))});TQ.muiName="SvgIcon";var RQ=TQ,D4e=O(Xr());function O2(s,p){function d(w,_){return(0,D4e.jsx)(RQ,K({"data-testid":`${p}Icon`,ref:_},w,{children:s}))}return d.muiName=RQ.muiName,AQ.memo(AQ.forwardRef(d))}var rT=O5e,N4e=S5e,zQ=j5e,CS=P5e,nT=E5e,F4e=V5e;function oT(s,p){return oT=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(d,w){return d.__proto__=w,d},oT(s,p)}function x2(s,p){s.prototype=Object.create(p.prototype),s.prototype.constructor=s,oT(s,p)}var W4e=O(C()),LQ=W4e.default.createContext(null);de();function B4e(s){if(s===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return s}var AS=O(C()),tp=O(C());function iT(s,p){var d=function(_){return p&&(0,tp.isValidElement)(_)?p(_):_},w=Object.create(null);return s&&tp.Children.map(s,function(_){return _}).forEach(function(_){w[_.key]=d(_)}),w}function H4e(s,p){s=s||{},p=p||{};function d(G){return G in p?p[G]:s[G]}var w=Object.create(null),_=[];for(var E in s)E in p?_.length&&(w[E]=_,_=[]):_.push(E);var T,z={};for(var V in p){if(w[V])for(T=0;T{if(!z&&V!=null){let ce=setTimeout(V,H);return()=>{clearTimeout(ce)}}},[V,z,H]),(0,NQ.jsx)("span",{className:ne,style:ie,children:(0,NQ.jsx)("span",{className:oe})})}var X4e=G4e,K4e=Bs("MuiTouchRipple",["root","ripple","rippleVisible","ripplePulsate","child","childLeaving","childPulsate"]),Xl=K4e,lT=O(Xr()),Y4e=["center","classes","className"],MS=s=>s,FQ,WQ,BQ,HQ,sT=550,Q4e=80,Z4e=(0,Y0.keyframes)(FQ||(FQ=MS` 0% { transform: scale(0); opacity: 0.1; @@ -497,7 +497,7 @@ Add a component higher in the tree to provide a loading transform: scale(1); opacity: 0.3; } -`)),Y4e=(0,K0.keyframes)(zQ||(zQ=ES` +`)),e6e=(0,Y0.keyframes)(WQ||(WQ=MS` 0% { opacity: 1; } @@ -505,7 +505,7 @@ Add a component higher in the tree to provide a loading 100% { opacity: 0; } -`)),Q4e=(0,K0.keyframes)(LQ||(LQ=ES` +`)),t6e=(0,Y0.keyframes)(BQ||(BQ=MS` 0% { transform: scale(1); } @@ -517,7 +517,7 @@ Add a component higher in the tree to provide a loading 100% { transform: scale(1); } -`)),Z4e=Zo("span",{name:"MuiTouchRipple",slot:"Root"})({overflow:"hidden",pointerEvents:"none",position:"absolute",zIndex:0,top:0,right:0,bottom:0,left:0,borderRadius:"inherit"}),e6e=Zo($4e,{name:"MuiTouchRipple",slot:"Ripple"})(DQ||(DQ=ES` +`)),r6e=Zo("span",{name:"MuiTouchRipple",slot:"Root"})({overflow:"hidden",pointerEvents:"none",position:"absolute",zIndex:0,top:0,right:0,bottom:0,left:0,borderRadius:"inherit"}),n6e=Zo(X4e,{name:"MuiTouchRipple",slot:"Ripple"})(HQ||(HQ=MS` opacity: 0; position: absolute; @@ -560,7 +560,7 @@ Add a component higher in the tree to provide a loading animation-iteration-count: infinite; animation-delay: 200ms; } -`),Gl.rippleVisible,K4e,nT,({theme:s})=>s.transitions.easing.easeInOut,Gl.ripplePulsate,({theme:s})=>s.transitions.duration.shorter,Gl.child,Gl.childLeaving,Y4e,nT,({theme:s})=>s.transitions.easing.easeInOut,Gl.childPulsate,Q4e,({theme:s})=>s.transitions.easing.easeInOut),t6e=_l.forwardRef(function(s,p){let d=Ws({props:s,name:"MuiTouchRipple"}),{center:w=!1,classes:_={},className:E}=d,T=Nn(d,G4e),[z,V]=_l.useState([]),H=_l.useRef(0),G=_l.useRef(null);_l.useEffect(()=>{G.current&&(G.current(),G.current=null)},[z]);let ee=_l.useRef(!1),ne=M5e(),ie=_l.useRef(null),oe=_l.useRef(null),ce=_l.useCallback(De=>{let{pulsate:Ie,rippleX:Pe,rippleY:we,rippleSize:Ae,cb:ue}=De;V(je=>[...je,(0,rT.jsx)(e6e,{classes:{ripple:Wo(_.ripple,Gl.ripple),rippleVisible:Wo(_.rippleVisible,Gl.rippleVisible),ripplePulsate:Wo(_.ripplePulsate,Gl.ripplePulsate),child:Wo(_.child,Gl.child),childLeaving:Wo(_.childLeaving,Gl.childLeaving),childPulsate:Wo(_.childPulsate,Gl.childPulsate)},timeout:nT,pulsate:Ie,rippleX:Pe,rippleY:we,rippleSize:Ae},H.current)]),H.current+=1,G.current=ue},[_]),me=_l.useCallback((De={},Ie={},Pe=()=>{})=>{let{pulsate:we=!1,center:Ae=w||Ie.pulsate,fakeElement:ue=!1}=Ie;if(De?.type==="mousedown"&&ee.current){ee.current=!1;return}De?.type==="touchstart"&&(ee.current=!0);let je=ue?null:oe.current,ze=je?je.getBoundingClientRect():{width:0,height:0,left:0,top:0},Fe,Je,tt;if(Ae||De===void 0||De.clientX===0&&De.clientY===0||!De.clientX&&!De.touches)Fe=Math.round(ze.width/2),Je=Math.round(ze.height/2);else{let{clientX:gt,clientY:Ut}=De.touches&&De.touches.length>0?De.touches[0]:De;Fe=Math.round(gt-ze.left),Je=Math.round(Ut-ze.top)}if(Ae)tt=Math.sqrt((2*ze.width**2+ze.height**2)/3),tt%2===0&&(tt+=1);else{let gt=Math.max(Math.abs((je?je.clientWidth:0)-Fe),Fe)*2+2,Ut=Math.max(Math.abs((je?je.clientHeight:0)-Je),Je)*2+2;tt=Math.sqrt(gt**2+Ut**2)}De!=null&&De.touches?ie.current===null&&(ie.current=()=>{ce({pulsate:we,rippleX:Fe,rippleY:Je,rippleSize:tt,cb:Pe})},ne.start(X4e,()=>{ie.current&&(ie.current(),ie.current=null)})):ce({pulsate:we,rippleX:Fe,rippleY:Je,rippleSize:tt,cb:Pe})},[w,ce,ne]),le=_l.useCallback(()=>{me({},{pulsate:!0})},[me]),Te=_l.useCallback((De,Ie)=>{if(ne.clear(),De?.type==="touchend"&&ie.current){ie.current(),ie.current=null,ne.start(0,()=>{Te(De,Ie)});return}ie.current=null,V(Pe=>Pe.length>0?Pe.slice(1):Pe),G.current=Ie},[ne]);return _l.useImperativeHandle(p,()=>({pulsate:le,start:me,stop:Te}),[le,me,Te]),(0,rT.jsx)(Z4e,K({className:Wo(Gl.root,_.root,E),ref:oe},T,{children:(0,rT.jsx)(q4e,{component:null,exit:!0,children:z})}))}),r6e=t6e;function n6e(s){return Jl("MuiButtonBase",s)}var o6e=Ns("MuiButtonBase",["root","disabled","focusVisible"]),i6e=o6e,a6e=O(Xr()),l6e=O(Xr()),s6e=["action","centerRipple","children","className","component","disabled","disableRipple","disableTouchRipple","focusRipple","focusVisibleClassName","LinkComponent","onBlur","onClick","onContextMenu","onDragLeave","onFocus","onFocusVisible","onKeyDown","onKeyUp","onMouseDown","onMouseLeave","onMouseUp","onTouchEnd","onTouchMove","onTouchStart","tabIndex","TouchRippleProps","touchRippleRef","type"],u6e=s=>{let{disabled:p,focusVisible:d,focusVisibleClassName:w,classes:_}=s,E=Fs({root:["root",p&&"disabled",d&&"focusVisible"]},n6e,_);return d&&w&&(E.root+=` ${w}`),E},c6e=Zo("button",{name:"MuiButtonBase",slot:"Root",overridesResolver:(s,p)=>p.root})({display:"inline-flex",alignItems:"center",justifyContent:"center",position:"relative",boxSizing:"border-box",WebkitTapHighlightColor:"transparent",backgroundColor:"transparent",outline:0,border:0,margin:0,borderRadius:0,padding:0,cursor:"pointer",userSelect:"none",verticalAlign:"middle",MozAppearance:"none",WebkitAppearance:"none",textDecoration:"none",color:"inherit","&::-moz-focus-inner":{borderStyle:"none"},[`&.${i6e.disabled}`]:{pointerEvents:"none",cursor:"default"},"@media print":{colorAdjust:"exact"}}),p6e=ep.forwardRef(function(s,p){let d=Ws({props:s,name:"MuiButtonBase"}),{action:w,centerRipple:_=!1,children:E,className:T,component:z="button",disabled:V=!1,disableRipple:H=!1,disableTouchRipple:G=!1,focusRipple:ee=!1,LinkComponent:ne="a",onBlur:ie,onClick:oe,onContextMenu:ce,onDragLeave:me,onFocus:le,onFocusVisible:Te,onKeyDown:De,onKeyUp:Ie,onMouseDown:Pe,onMouseLeave:we,onMouseUp:Ae,onTouchEnd:ue,onTouchMove:je,onTouchStart:ze,tabIndex:Fe=0,TouchRippleProps:Je,touchRippleRef:tt,type:gt}=d,Ut=Nn(d,s6e),Gt=ep.useRef(null),or=ep.useRef(null),Me=QM(or,tt),{isFocusVisibleRef:st,onFocus:lr,onBlur:rt,ref:Ot}=L4e(),[It,Tt]=ep.useState(!1);V&&It&&Tt(!1),ep.useImperativeHandle(w,()=>({focusVisible:()=>{Tt(!0),Gt.current.focus()}}),[]);let[rr,kr]=ep.useState(!1);ep.useEffect(()=>{kr(!0)},[]);let Hn=rr&&!H&&!V;ep.useEffect(()=>{It&&ee&&!H&&rr&&or.current.pulsate()},[H,ee,It,rr]);function yo(hr,j2,BS=G){return kS(I2=>(j2&&j2(I2),!BS&&or.current&&or.current[hr](I2),!0))}let Kn=yo("start",Pe),ra=yo("stop",ce),t1=yo("stop",me),Qa=yo("stop",Ae),Sl=yo("stop",hr=>{It&&hr.preventDefault(),we&&we(hr)}),r1=yo("start",ze),jl=yo("stop",ue),Ri=yo("stop",je),Bu=yo("stop",hr=>{rt(hr),st.current===!1&&Tt(!1),ie&&ie(hr)},!1),Bs=kS(hr=>{Gt.current||(Gt.current=hr.currentTarget),lr(hr),st.current===!0&&(Tt(!0),Te&&Te(hr)),le&&le(hr)}),tp=()=>{let hr=Gt.current;return z&&z!=="button"&&!(hr.tagName==="A"&&hr.href)},Sf=ep.useRef(!1),WS=kS(hr=>{ee&&!Sf.current&&It&&or.current&&hr.key===" "&&(Sf.current=!0,or.current.stop(hr,()=>{or.current.start(hr)})),hr.target===hr.currentTarget&&tp()&&hr.key===" "&&hr.preventDefault(),De&&De(hr),hr.target===hr.currentTarget&&tp()&&hr.key==="Enter"&&!V&&(hr.preventDefault(),oe&&oe(hr))}),S2=kS(hr=>{ee&&hr.key===" "&&or.current&&It&&!hr.defaultPrevented&&(Sf.current=!1,or.current.stop(hr,()=>{or.current.pulsate(hr)})),Ie&&Ie(hr),oe&&hr.target===hr.currentTarget&&tp()&&hr.key===" "&&!hr.defaultPrevented&&oe(hr)}),n1=z;n1==="button"&&(Ut.href||Ut.to)&&(n1=ne);let rp={};n1==="button"?(rp.type=gt===void 0?"button":gt,rp.disabled=V):(!Ut.href&&!Ut.to&&(rp.role="button"),V&&(rp["aria-disabled"]=V));let vT=QM(p,Ot,Gt),Dh=K({},d,{centerRipple:_,component:z,disabled:V,disableRipple:H,disableTouchRipple:G,focusRipple:ee,tabIndex:Fe,focusVisible:It}),jf=u6e(Dh);return(0,l6e.jsxs)(c6e,K({as:n1,className:Wo(jf.root,T),ownerState:Dh,onBlur:Bu,onClick:oe,onContextMenu:ra,onFocus:Bs,onKeyDown:WS,onKeyUp:S2,onMouseDown:Kn,onMouseLeave:Sl,onMouseUp:Qa,onDragLeave:t1,onTouchEnd:jl,onTouchMove:Ri,onTouchStart:r1,ref:vT,tabIndex:V?-1:Fe,type:gt},rp,Ut,{children:[E,Hn?(0,a6e.jsx)(r6e,K({ref:Me,center:_},Je)):null]}))}),f6e=p6e;de();var d6e=O(C()),m6e=O(_0());function h6e(s){return Jl("MuiTypography",s)}var sEt=Ns("MuiTypography",["root","h1","h2","h3","h4","h5","h6","subtitle1","subtitle2","body1","body2","inherit","button","caption","overline","alignLeft","alignRight","alignCenter","alignJustify","noWrap","gutterBottom","paragraph"]),g6e=O(Xr()),v6e=["align","className","component","gutterBottom","noWrap","paragraph","variant","variantMapping"],y6e=s=>{let{align:p,gutterBottom:d,noWrap:w,paragraph:_,variant:E,classes:T}=s,z={root:["root",E,s.align!=="inherit"&&`align${Oo(p)}`,d&&"gutterBottom",w&&"noWrap",_&&"paragraph"]};return Fs(z,h6e,T)},b6e=Zo("span",{name:"MuiTypography",slot:"Root",overridesResolver:(s,p)=>{let{ownerState:d}=s;return[p.root,d.variant&&p[d.variant],d.align!=="inherit"&&p[`align${Oo(d.align)}`],d.noWrap&&p.noWrap,d.gutterBottom&&p.gutterBottom,d.paragraph&&p.paragraph]}})(({theme:s,ownerState:p})=>K({margin:0},p.variant==="inherit"&&{font:"inherit"},p.variant!=="inherit"&&s.typography[p.variant],p.align!=="inherit"&&{textAlign:p.align},p.noWrap&&{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},p.gutterBottom&&{marginBottom:"0.35em"},p.paragraph&&{marginBottom:16})),NQ={h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",h6:"h6",subtitle1:"h6",subtitle2:"h6",body1:"p",body2:"p",inherit:"p"},w6e={primary:"primary.main",textPrimary:"text.primary",secondary:"secondary.main",textSecondary:"text.secondary",error:"error.main"},O6e=s=>w6e[s]||s,x6e=d6e.forwardRef(function(s,p){let d=Ws({props:s,name:"MuiTypography"}),w=O6e(d.color),_=(0,m6e.extendSxProp)(K({},d,{color:w})),{align:E="inherit",className:T,component:z,gutterBottom:V=!1,noWrap:H=!1,paragraph:G=!1,variant:ee="body1",variantMapping:ne=NQ}=_,ie=Nn(_,v6e),oe=K({},_,{align:E,color:w,className:T,component:z,gutterBottom:V,noWrap:H,paragraph:G,variant:ee,variantMapping:ne}),ce=z||(G?"p":ne[ee]||NQ[ee])||"span",me=y6e(oe);return(0,g6e.jsx)(b6e,K({as:ce,ref:p,ownerState:oe,className:Wo(me.root,T)},ie))}),FQ=x6e;function WQ({props:s,states:p,muiFormControl:d}){return p.reduce((w,_)=>(w[_]=s[_],d&&typeof s[_]>"u"&&(w[_]=d[_]),w),{})}var _6e=O(C()),S6e=_6e.createContext(void 0),BQ=S6e,j6e=O(C());function oT(){return j6e.useContext(BQ)}function HQ(s){return s!=null&&!(Array.isArray(s)&&s.length===0)}function VQ(s,p=!1){return s&&(HQ(s.value)&&s.value!==""||p&&HQ(s.defaultValue)&&s.defaultValue!=="")}function I6e(s){return s.startAdornment}de();var iT=O(C()),k6e=O(I0());de();var P6e=O(C());function E6e(s){return Jl("PrivateSwitchBase",s)}var uEt=Ns("PrivateSwitchBase",["root","checked","disabled","input","edgeStart","edgeEnd"]),C6e=O(Xr()),A6e=O(Xr()),M6e=["autoFocus","checked","checkedIcon","className","defaultChecked","disabled","disableFocusRipple","edge","icon","id","inputProps","inputRef","name","onBlur","onChange","onFocus","readOnly","required","tabIndex","type","value"],T6e=s=>{let{classes:p,checked:d,disabled:w,edge:_}=s,E={root:["root",d&&"checked",w&&"disabled",_&&`edge${Oo(_)}`],input:["input"]};return Fs(E,E6e,p)},R6e=Zo(f6e)(({ownerState:s})=>K({padding:9,borderRadius:"50%"},s.edge==="start"&&{marginLeft:s.size==="small"?-3:-12},s.edge==="end"&&{marginRight:s.size==="small"?-3:-12})),z6e=Zo("input",{shouldForwardProp:y2})({cursor:"inherit",position:"absolute",opacity:0,width:"100%",height:"100%",top:0,left:0,margin:0,padding:0,zIndex:1}),L6e=P6e.forwardRef(function(s,p){let{autoFocus:d,checked:w,checkedIcon:_,className:E,defaultChecked:T,disabled:z,disableFocusRipple:V=!1,edge:H=!1,icon:G,id:ee,inputProps:ne,inputRef:ie,name:oe,onBlur:ce,onChange:me,onFocus:le,readOnly:Te,required:De=!1,tabIndex:Ie,type:Pe,value:we}=s,Ae=Nn(s,M6e),[ue,je]=CQ({controlled:w,default:!!T,name:"SwitchBase",state:"checked"}),ze=oT(),Fe=Me=>{le&&le(Me),ze&&ze.onFocus&&ze.onFocus(Me)},Je=Me=>{ce&&ce(Me),ze&&ze.onBlur&&ze.onBlur(Me)},tt=Me=>{if(Me.nativeEvent.defaultPrevented)return;let st=Me.target.checked;je(st),me&&me(Me,st)},gt=z;ze&&typeof gt>"u"&&(gt=ze.disabled);let Ut=Pe==="checkbox"||Pe==="radio",Gt=K({},s,{checked:ue,disabled:gt,disableFocusRipple:V,edge:H}),or=T6e(Gt);return(0,A6e.jsxs)(R6e,K({component:"span",className:Wo(or.root,E),centerRipple:!0,focusRipple:!V,disabled:gt,tabIndex:null,role:void 0,onFocus:Fe,onBlur:Je,ownerState:Gt,ref:p},Ae,{children:[(0,C6e.jsx)(z6e,K({autoFocus:d,checked:w,defaultChecked:T,className:or.input,disabled:gt,id:Ut?ee:void 0,name:oe,onChange:tt,readOnly:Te,ref:ie,required:De,ownerState:Gt,tabIndex:Ie,type:Pe},Pe==="checkbox"&&we===void 0?{}:{value:we},ne)),ue?_:G]}))}),qQ=L6e,cEt=O(C()),D6e=O(Xr()),N6e=b2((0,D6e.jsx)("path",{d:"M19 5v14H5V5h14m0-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z"}),"CheckBoxOutlineBlank"),pEt=O(C()),F6e=O(Xr()),W6e=b2((0,F6e.jsx)("path",{d:"M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.11 0 2-.9 2-2V5c0-1.1-.89-2-2-2zm-9 14l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"}),"CheckBox"),fEt=O(C()),B6e=O(Xr()),H6e=b2((0,B6e.jsx)("path",{d:"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-2 10H7v-2h10v2z"}),"IndeterminateCheckBox");function V6e(s){return Jl("MuiCheckbox",s)}var q6e=Ns("MuiCheckbox",["root","checked","disabled","indeterminate","colorPrimary","colorSecondary","sizeSmall","sizeMedium"]),aT=q6e,CS=O(Xr()),U6e=["checkedIcon","color","icon","indeterminate","indeterminateIcon","inputProps","size","className"],$6e=s=>{let{classes:p,indeterminate:d,color:w,size:_}=s,E={root:["root",d&&"indeterminate",`color${Oo(w)}`,`size${Oo(_)}`]},T=Fs(E,V6e,p);return K({},p,T)},J6e=Zo(qQ,{shouldForwardProp:s=>y2(s)||s==="classes",name:"MuiCheckbox",slot:"Root",overridesResolver:(s,p)=>{let{ownerState:d}=s;return[p.root,d.indeterminate&&p.indeterminate,p[`size${Oo(d.size)}`],d.color!=="default"&&p[`color${Oo(d.color)}`]]}})(({theme:s,ownerState:p})=>K({color:(s.vars||s).palette.text.secondary},!p.disableRipple&&{"&:hover":{backgroundColor:s.vars?`rgba(${p.color==="default"?s.vars.palette.action.activeChannel:s.vars.palette[p.color].mainChannel} / ${s.vars.palette.action.hoverOpacity})`:(0,k6e.alpha)(p.color==="default"?s.palette.action.active:s.palette[p.color].main,s.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:"transparent"}}},p.color!=="default"&&{[`&.${aT.checked}, &.${aT.indeterminate}`]:{color:(s.vars||s).palette[p.color].main},[`&.${aT.disabled}`]:{color:(s.vars||s).palette.action.disabled}})),G6e=(0,CS.jsx)(W6e,{}),X6e=(0,CS.jsx)(N6e,{}),K6e=(0,CS.jsx)(H6e,{}),Y6e=iT.forwardRef(function(s,p){var d,w;let _=Ws({props:s,name:"MuiCheckbox"}),{checkedIcon:E=G6e,color:T="primary",icon:z=X6e,indeterminate:V=!1,indeterminateIcon:H=K6e,inputProps:G,size:ee="medium",className:ne}=_,ie=Nn(_,U6e),oe=V?H:z,ce=V?H:E,me=K({},_,{color:T,indeterminate:V,size:ee}),le=$6e(me);return(0,CS.jsx)(J6e,K({type:"checkbox",inputProps:K({"data-indeterminate":V},G),icon:iT.cloneElement(oe,{fontSize:(d=oe.props.fontSize)!=null?d:ee}),checkedIcon:iT.cloneElement(ce,{fontSize:(w=ce.props.fontSize)!=null?w:ee}),ownerState:me,ref:p,className:Wo(le.root,ne)},ie,{classes:le}))}),lT=Y6e;de();var Q6e=O(C());function Z6e(s){return Jl("MuiCircularProgress",s)}var dEt=Ns("MuiCircularProgress",["root","determinate","indeterminate","colorPrimary","colorSecondary","svg","circle","circleDeterminate","circleIndeterminate","circleDisableShrink"]),sT=O(Xr()),ewe=["className","color","disableShrink","size","style","thickness","value","variant"],AS=s=>s,UQ,$Q,JQ,GQ,Of=44,twe=(0,K0.keyframes)(UQ||(UQ=AS` +`),Xl.rippleVisible,Z4e,sT,({theme:s})=>s.transitions.easing.easeInOut,Xl.ripplePulsate,({theme:s})=>s.transitions.duration.shorter,Xl.child,Xl.childLeaving,e6e,sT,({theme:s})=>s.transitions.easing.easeInOut,Xl.childPulsate,t6e,({theme:s})=>s.transitions.easing.easeInOut),o6e=Sl.forwardRef(function(s,p){let d=Vs({props:s,name:"MuiTouchRipple"}),{center:w=!1,classes:_={},className:E}=d,T=Nn(d,Y4e),[z,V]=Sl.useState([]),H=Sl.useRef(0),G=Sl.useRef(null);Sl.useEffect(()=>{G.current&&(G.current(),G.current=null)},[z]);let ee=Sl.useRef(!1),ne=z5e(),ie=Sl.useRef(null),oe=Sl.useRef(null),ce=Sl.useCallback(Ne=>{let{pulsate:je,rippleX:ke,rippleY:we,rippleSize:Ae,cb:ue}=Ne;V(Se=>[...Se,(0,lT.jsx)(n6e,{classes:{ripple:Wo(_.ripple,Xl.ripple),rippleVisible:Wo(_.rippleVisible,Xl.rippleVisible),ripplePulsate:Wo(_.ripplePulsate,Xl.ripplePulsate),child:Wo(_.child,Xl.child),childLeaving:Wo(_.childLeaving,Xl.childLeaving),childPulsate:Wo(_.childPulsate,Xl.childPulsate)},timeout:sT,pulsate:je,rippleX:ke,rippleY:we,rippleSize:Ae},H.current)]),H.current+=1,G.current=ue},[_]),me=Sl.useCallback((Ne={},je={},ke=()=>{})=>{let{pulsate:we=!1,center:Ae=w||je.pulsate,fakeElement:ue=!1}=je;if(Ne?.type==="mousedown"&&ee.current){ee.current=!1;return}Ne?.type==="touchstart"&&(ee.current=!0);let Se=ue?null:oe.current,ze=Se?Se.getBoundingClientRect():{width:0,height:0,left:0,top:0},We,Je,tt;if(Ae||Ne===void 0||Ne.clientX===0&&Ne.clientY===0||!Ne.clientX&&!Ne.touches)We=Math.round(ze.width/2),Je=Math.round(ze.height/2);else{let{clientX:vt,clientY:qt}=Ne.touches&&Ne.touches.length>0?Ne.touches[0]:Ne;We=Math.round(vt-ze.left),Je=Math.round(qt-ze.top)}if(Ae)tt=Math.sqrt((2*ze.width**2+ze.height**2)/3),tt%2===0&&(tt+=1);else{let vt=Math.max(Math.abs((Se?Se.clientWidth:0)-We),We)*2+2,qt=Math.max(Math.abs((Se?Se.clientHeight:0)-Je),Je)*2+2;tt=Math.sqrt(vt**2+qt**2)}Ne!=null&&Ne.touches?ie.current===null&&(ie.current=()=>{ce({pulsate:we,rippleX:We,rippleY:Je,rippleSize:tt,cb:ke})},ne.start(Q4e,()=>{ie.current&&(ie.current(),ie.current=null)})):ce({pulsate:we,rippleX:We,rippleY:Je,rippleSize:tt,cb:ke})},[w,ce,ne]),ae=Sl.useCallback(()=>{me({},{pulsate:!0})},[me]),Te=Sl.useCallback((Ne,je)=>{if(ne.clear(),Ne?.type==="touchend"&&ie.current){ie.current(),ie.current=null,ne.start(0,()=>{Te(Ne,je)});return}ie.current=null,V(ke=>ke.length>0?ke.slice(1):ke),G.current=je},[ne]);return Sl.useImperativeHandle(p,()=>({pulsate:ae,start:me,stop:Te}),[ae,me,Te]),(0,lT.jsx)(r6e,K({className:Wo(Xl.root,_.root,E),ref:oe},T,{children:(0,lT.jsx)(J4e,{component:null,exit:!0,children:z})}))}),i6e=o6e;function a6e(s){return Gl("MuiButtonBase",s)}var l6e=Bs("MuiButtonBase",["root","disabled","focusVisible"]),s6e=l6e,u6e=O(Xr()),c6e=O(Xr()),p6e=["action","centerRipple","children","className","component","disabled","disableRipple","disableTouchRipple","focusRipple","focusVisibleClassName","LinkComponent","onBlur","onClick","onContextMenu","onDragLeave","onFocus","onFocusVisible","onKeyDown","onKeyUp","onMouseDown","onMouseLeave","onMouseUp","onTouchEnd","onTouchMove","onTouchStart","tabIndex","TouchRippleProps","touchRippleRef","type"],f6e=s=>{let{disabled:p,focusVisible:d,focusVisibleClassName:w,classes:_}=s,E=Hs({root:["root",p&&"disabled",d&&"focusVisible"]},a6e,_);return d&&w&&(E.root+=` ${w}`),E},d6e=Zo("button",{name:"MuiButtonBase",slot:"Root",overridesResolver:(s,p)=>p.root})({display:"inline-flex",alignItems:"center",justifyContent:"center",position:"relative",boxSizing:"border-box",WebkitTapHighlightColor:"transparent",backgroundColor:"transparent",outline:0,border:0,margin:0,borderRadius:0,padding:0,cursor:"pointer",userSelect:"none",verticalAlign:"middle",MozAppearance:"none",WebkitAppearance:"none",textDecoration:"none",color:"inherit","&::-moz-focus-inner":{borderStyle:"none"},[`&.${s6e.disabled}`]:{pointerEvents:"none",cursor:"default"},"@media print":{colorAdjust:"exact"}}),m6e=rp.forwardRef(function(s,p){let d=Vs({props:s,name:"MuiButtonBase"}),{action:w,centerRipple:_=!1,children:E,className:T,component:z="button",disabled:V=!1,disableRipple:H=!1,disableTouchRipple:G=!1,focusRipple:ee=!1,LinkComponent:ne="a",onBlur:ie,onClick:oe,onContextMenu:ce,onDragLeave:me,onFocus:ae,onFocusVisible:Te,onKeyDown:Ne,onKeyUp:je,onMouseDown:ke,onMouseLeave:we,onMouseUp:Ae,onTouchEnd:ue,onTouchMove:Se,onTouchStart:ze,tabIndex:We=0,TouchRippleProps:Je,touchRippleRef:tt,type:vt}=d,qt=Nn(d,p6e),Jt=rp.useRef(null),nr=rp.useRef(null),Me=nT(nr,tt),{isFocusVisibleRef:st,onFocus:sr,onBlur:nt,ref:Ot}=F4e(),[Pt,Tt]=rp.useState(!1);V&&Pt&&Tt(!1),rp.useImperativeHandle(w,()=>({focusVisible:()=>{Tt(!0),Jt.current.focus()}}),[]);let[tr,kr]=rp.useState(!1);rp.useEffect(()=>{kr(!0)},[]);let Hn=tr&&!H&&!V;rp.useEffect(()=>{Pt&&ee&&!H&&tr&&nr.current.pulsate()},[H,ee,Pt,tr]);function bo(hr,P2,qS=G){return CS(k2=>(P2&&P2(k2),!qS&&nr.current&&nr.current[hr](k2),!0))}let Yn=bo("start",ke),ta=bo("stop",ce),r1=bo("stop",me),Qa=bo("stop",Ae),jl=bo("stop",hr=>{Pt&&hr.preventDefault(),we&&we(hr)}),n1=bo("start",ze),Il=bo("stop",ue),Ti=bo("stop",Se),Vu=bo("stop",hr=>{nt(hr),st.current===!1&&Tt(!1),ie&&ie(hr)},!1),qs=CS(hr=>{Jt.current||(Jt.current=hr.currentTarget),sr(hr),st.current===!0&&(Tt(!0),Te&&Te(hr)),ae&&ae(hr)}),np=()=>{let hr=Jt.current;return z&&z!=="button"&&!(hr.tagName==="A"&&hr.href)},If=rp.useRef(!1),VS=CS(hr=>{ee&&!If.current&&Pt&&nr.current&&hr.key===" "&&(If.current=!0,nr.current.stop(hr,()=>{nr.current.start(hr)})),hr.target===hr.currentTarget&&np()&&hr.key===" "&&hr.preventDefault(),Ne&&Ne(hr),hr.target===hr.currentTarget&&np()&&hr.key==="Enter"&&!V&&(hr.preventDefault(),oe&&oe(hr))}),I2=CS(hr=>{ee&&hr.key===" "&&nr.current&&Pt&&!hr.defaultPrevented&&(If.current=!1,nr.current.stop(hr,()=>{nr.current.pulsate(hr)})),je&&je(hr),oe&&hr.target===hr.currentTarget&&np()&&hr.key===" "&&!hr.defaultPrevented&&oe(hr)}),o1=z;o1==="button"&&(qt.href||qt.to)&&(o1=ne);let op={};o1==="button"?(op.type=vt===void 0?"button":vt,op.disabled=V):(!qt.href&&!qt.to&&(op.role="button"),V&&(op["aria-disabled"]=V));let xT=nT(p,Ot,Jt),Dh=K({},d,{centerRipple:_,component:z,disabled:V,disableRipple:H,disableTouchRipple:G,focusRipple:ee,tabIndex:We,focusVisible:Pt}),Pf=f6e(Dh);return(0,c6e.jsxs)(d6e,K({as:o1,className:Wo(Pf.root,T),ownerState:Dh,onBlur:Vu,onClick:oe,onContextMenu:ta,onFocus:qs,onKeyDown:VS,onKeyUp:I2,onMouseDown:Yn,onMouseLeave:jl,onMouseUp:Qa,onDragLeave:r1,onTouchEnd:Il,onTouchMove:Ti,onTouchStart:n1,ref:xT,tabIndex:V?-1:We,type:vt},op,qt,{children:[E,Hn?(0,u6e.jsx)(i6e,K({ref:Me,center:_},Je)):null]}))}),h6e=m6e;de();var g6e=O(C()),v6e=O(S0());function y6e(s){return Gl("MuiTypography",s)}var pEt=Bs("MuiTypography",["root","h1","h2","h3","h4","h5","h6","subtitle1","subtitle2","body1","body2","inherit","button","caption","overline","alignLeft","alignRight","alignCenter","alignJustify","noWrap","gutterBottom","paragraph"]),b6e=O(Xr()),w6e=["align","className","component","gutterBottom","noWrap","paragraph","variant","variantMapping"],O6e=s=>{let{align:p,gutterBottom:d,noWrap:w,paragraph:_,variant:E,classes:T}=s,z={root:["root",E,s.align!=="inherit"&&`align${xo(p)}`,d&&"gutterBottom",w&&"noWrap",_&&"paragraph"]};return Hs(z,y6e,T)},x6e=Zo("span",{name:"MuiTypography",slot:"Root",overridesResolver:(s,p)=>{let{ownerState:d}=s;return[p.root,d.variant&&p[d.variant],d.align!=="inherit"&&p[`align${xo(d.align)}`],d.noWrap&&p.noWrap,d.gutterBottom&&p.gutterBottom,d.paragraph&&p.paragraph]}})(({theme:s,ownerState:p})=>K({margin:0},p.variant==="inherit"&&{font:"inherit"},p.variant!=="inherit"&&s.typography[p.variant],p.align!=="inherit"&&{textAlign:p.align},p.noWrap&&{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},p.gutterBottom&&{marginBottom:"0.35em"},p.paragraph&&{marginBottom:16})),VQ={h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",h6:"h6",subtitle1:"h6",subtitle2:"h6",body1:"p",body2:"p",inherit:"p"},_6e={primary:"primary.main",textPrimary:"text.primary",secondary:"secondary.main",textSecondary:"text.secondary",error:"error.main"},S6e=s=>_6e[s]||s,j6e=g6e.forwardRef(function(s,p){let d=Vs({props:s,name:"MuiTypography"}),w=S6e(d.color),_=(0,v6e.extendSxProp)(K({},d,{color:w})),{align:E="inherit",className:T,component:z,gutterBottom:V=!1,noWrap:H=!1,paragraph:G=!1,variant:ee="body1",variantMapping:ne=VQ}=_,ie=Nn(_,w6e),oe=K({},_,{align:E,color:w,className:T,component:z,gutterBottom:V,noWrap:H,paragraph:G,variant:ee,variantMapping:ne}),ce=z||(G?"p":ne[ee]||VQ[ee])||"span",me=O6e(oe);return(0,b6e.jsx)(x6e,K({as:ce,ref:p,ownerState:oe,className:Wo(me.root,T)},ie))}),qQ=j6e;function UQ({props:s,states:p,muiFormControl:d}){return p.reduce((w,_)=>(w[_]=s[_],d&&typeof s[_]>"u"&&(w[_]=d[_]),w),{})}var I6e=O(C()),P6e=I6e.createContext(void 0),$Q=P6e,k6e=O(C());function uT(){return k6e.useContext($Q)}function JQ(s){return s!=null&&!(Array.isArray(s)&&s.length===0)}function GQ(s,p=!1){return s&&(JQ(s.value)&&s.value!==""||p&&JQ(s.defaultValue)&&s.defaultValue!=="")}function E6e(s){return s.startAdornment}de();var cT=O(C()),C6e=O(P0());de();var A6e=O(C());function M6e(s){return Gl("PrivateSwitchBase",s)}var fEt=Bs("PrivateSwitchBase",["root","checked","disabled","input","edgeStart","edgeEnd"]),T6e=O(Xr()),R6e=O(Xr()),z6e=["autoFocus","checked","checkedIcon","className","defaultChecked","disabled","disableFocusRipple","edge","icon","id","inputProps","inputRef","name","onBlur","onChange","onFocus","readOnly","required","tabIndex","type","value"],L6e=s=>{let{classes:p,checked:d,disabled:w,edge:_}=s,E={root:["root",d&&"checked",w&&"disabled",_&&`edge${xo(_)}`],input:["input"]};return Hs(E,M6e,p)},D6e=Zo(h6e)(({ownerState:s})=>K({padding:9,borderRadius:"50%"},s.edge==="start"&&{marginLeft:s.size==="small"?-3:-12},s.edge==="end"&&{marginRight:s.size==="small"?-3:-12})),N6e=Zo("input",{shouldForwardProp:w2})({cursor:"inherit",position:"absolute",opacity:0,width:"100%",height:"100%",top:0,left:0,margin:0,padding:0,zIndex:1}),F6e=A6e.forwardRef(function(s,p){let{autoFocus:d,checked:w,checkedIcon:_,className:E,defaultChecked:T,disabled:z,disableFocusRipple:V=!1,edge:H=!1,icon:G,id:ee,inputProps:ne,inputRef:ie,name:oe,onBlur:ce,onChange:me,onFocus:ae,readOnly:Te,required:Ne=!1,tabIndex:je,type:ke,value:we}=s,Ae=Nn(s,z6e),[ue,Se]=zQ({controlled:w,default:!!T,name:"SwitchBase",state:"checked"}),ze=uT(),We=Me=>{ae&&ae(Me),ze&&ze.onFocus&&ze.onFocus(Me)},Je=Me=>{ce&&ce(Me),ze&&ze.onBlur&&ze.onBlur(Me)},tt=Me=>{if(Me.nativeEvent.defaultPrevented)return;let st=Me.target.checked;Se(st),me&&me(Me,st)},vt=z;ze&&typeof vt>"u"&&(vt=ze.disabled);let qt=ke==="checkbox"||ke==="radio",Jt=K({},s,{checked:ue,disabled:vt,disableFocusRipple:V,edge:H}),nr=L6e(Jt);return(0,R6e.jsxs)(D6e,K({component:"span",className:Wo(nr.root,E),centerRipple:!0,focusRipple:!V,disabled:vt,tabIndex:null,role:void 0,onFocus:We,onBlur:Je,ownerState:Jt,ref:p},Ae,{children:[(0,T6e.jsx)(N6e,K({autoFocus:d,checked:w,defaultChecked:T,className:nr.input,disabled:vt,id:qt?ee:void 0,name:oe,onChange:tt,readOnly:Te,ref:ie,required:Ne,ownerState:Jt,tabIndex:je,type:ke},ke==="checkbox"&&we===void 0?{}:{value:we},ne)),ue?_:G]}))}),XQ=F6e,dEt=O(C()),W6e=O(Xr()),B6e=O2((0,W6e.jsx)("path",{d:"M19 5v14H5V5h14m0-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z"}),"CheckBoxOutlineBlank"),mEt=O(C()),H6e=O(Xr()),V6e=O2((0,H6e.jsx)("path",{d:"M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.11 0 2-.9 2-2V5c0-1.1-.89-2-2-2zm-9 14l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"}),"CheckBox"),hEt=O(C()),q6e=O(Xr()),U6e=O2((0,q6e.jsx)("path",{d:"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-2 10H7v-2h10v2z"}),"IndeterminateCheckBox");function $6e(s){return Gl("MuiCheckbox",s)}var J6e=Bs("MuiCheckbox",["root","checked","disabled","indeterminate","colorPrimary","colorSecondary","sizeSmall","sizeMedium"]),pT=J6e,TS=O(Xr()),G6e=["checkedIcon","color","icon","indeterminate","indeterminateIcon","inputProps","size","className"],X6e=s=>{let{classes:p,indeterminate:d,color:w,size:_}=s,E={root:["root",d&&"indeterminate",`color${xo(w)}`,`size${xo(_)}`]},T=Hs(E,$6e,p);return K({},p,T)},K6e=Zo(XQ,{shouldForwardProp:s=>w2(s)||s==="classes",name:"MuiCheckbox",slot:"Root",overridesResolver:(s,p)=>{let{ownerState:d}=s;return[p.root,d.indeterminate&&p.indeterminate,p[`size${xo(d.size)}`],d.color!=="default"&&p[`color${xo(d.color)}`]]}})(({theme:s,ownerState:p})=>K({color:(s.vars||s).palette.text.secondary},!p.disableRipple&&{"&:hover":{backgroundColor:s.vars?`rgba(${p.color==="default"?s.vars.palette.action.activeChannel:s.vars.palette[p.color].mainChannel} / ${s.vars.palette.action.hoverOpacity})`:(0,C6e.alpha)(p.color==="default"?s.palette.action.active:s.palette[p.color].main,s.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:"transparent"}}},p.color!=="default"&&{[`&.${pT.checked}, &.${pT.indeterminate}`]:{color:(s.vars||s).palette[p.color].main},[`&.${pT.disabled}`]:{color:(s.vars||s).palette.action.disabled}})),Y6e=(0,TS.jsx)(V6e,{}),Q6e=(0,TS.jsx)(B6e,{}),Z6e=(0,TS.jsx)(U6e,{}),ewe=cT.forwardRef(function(s,p){var d,w;let _=Vs({props:s,name:"MuiCheckbox"}),{checkedIcon:E=Y6e,color:T="primary",icon:z=Q6e,indeterminate:V=!1,indeterminateIcon:H=Z6e,inputProps:G,size:ee="medium",className:ne}=_,ie=Nn(_,G6e),oe=V?H:z,ce=V?H:E,me=K({},_,{color:T,indeterminate:V,size:ee}),ae=X6e(me);return(0,TS.jsx)(K6e,K({type:"checkbox",inputProps:K({"data-indeterminate":V},G),icon:cT.cloneElement(oe,{fontSize:(d=oe.props.fontSize)!=null?d:ee}),checkedIcon:cT.cloneElement(ce,{fontSize:(w=ce.props.fontSize)!=null?w:ee}),ownerState:me,ref:p,className:Wo(ae.root,ne)},ie,{classes:ae}))}),fT=ewe;de();var twe=O(C());function rwe(s){return Gl("MuiCircularProgress",s)}var gEt=Bs("MuiCircularProgress",["root","determinate","indeterminate","colorPrimary","colorSecondary","svg","circle","circleDeterminate","circleIndeterminate","circleDisableShrink"]),dT=O(Xr()),nwe=["className","color","disableShrink","size","style","thickness","value","variant"],RS=s=>s,KQ,YQ,QQ,ZQ,_f=44,owe=(0,Y0.keyframes)(KQ||(KQ=RS` 0% { transform: rotate(0deg); } @@ -568,7 +568,7 @@ Add a component higher in the tree to provide a loading 100% { transform: rotate(360deg); } -`)),rwe=(0,K0.keyframes)($Q||($Q=AS` +`)),iwe=(0,Y0.keyframes)(YQ||(YQ=RS` 0% { stroke-dasharray: 1px, 200px; stroke-dashoffset: 0; @@ -583,36 +583,36 @@ Add a component higher in the tree to provide a loading stroke-dasharray: 100px, 200px; stroke-dashoffset: -125px; } -`)),nwe=s=>{let{classes:p,variant:d,color:w,disableShrink:_}=s,E={root:["root",d,`color${Oo(w)}`],svg:["svg"],circle:["circle",`circle${Oo(d)}`,_&&"circleDisableShrink"]};return Fs(E,Z6e,p)},owe=Zo("span",{name:"MuiCircularProgress",slot:"Root",overridesResolver:(s,p)=>{let{ownerState:d}=s;return[p.root,p[d.variant],p[`color${Oo(d.color)}`]]}})(({ownerState:s,theme:p})=>K({display:"inline-block"},s.variant==="determinate"&&{transition:p.transitions.create("transform")},s.color!=="inherit"&&{color:(p.vars||p).palette[s.color].main}),({ownerState:s})=>s.variant==="indeterminate"&&(0,K0.css)(JQ||(JQ=AS` +`)),awe=s=>{let{classes:p,variant:d,color:w,disableShrink:_}=s,E={root:["root",d,`color${xo(w)}`],svg:["svg"],circle:["circle",`circle${xo(d)}`,_&&"circleDisableShrink"]};return Hs(E,rwe,p)},lwe=Zo("span",{name:"MuiCircularProgress",slot:"Root",overridesResolver:(s,p)=>{let{ownerState:d}=s;return[p.root,p[d.variant],p[`color${xo(d.color)}`]]}})(({ownerState:s,theme:p})=>K({display:"inline-block"},s.variant==="determinate"&&{transition:p.transitions.create("transform")},s.color!=="inherit"&&{color:(p.vars||p).palette[s.color].main}),({ownerState:s})=>s.variant==="indeterminate"&&(0,Y0.css)(QQ||(QQ=RS` animation: ${0} 1.4s linear infinite; - `),twe)),iwe=Zo("svg",{name:"MuiCircularProgress",slot:"Svg",overridesResolver:(s,p)=>p.svg})({display:"block"}),awe=Zo("circle",{name:"MuiCircularProgress",slot:"Circle",overridesResolver:(s,p)=>{let{ownerState:d}=s;return[p.circle,p[`circle${Oo(d.variant)}`],d.disableShrink&&p.circleDisableShrink]}})(({ownerState:s,theme:p})=>K({stroke:"currentColor"},s.variant==="determinate"&&{transition:p.transitions.create("stroke-dashoffset")},s.variant==="indeterminate"&&{strokeDasharray:"80px, 200px",strokeDashoffset:0}),({ownerState:s})=>s.variant==="indeterminate"&&!s.disableShrink&&(0,K0.css)(GQ||(GQ=AS` + `),owe)),swe=Zo("svg",{name:"MuiCircularProgress",slot:"Svg",overridesResolver:(s,p)=>p.svg})({display:"block"}),uwe=Zo("circle",{name:"MuiCircularProgress",slot:"Circle",overridesResolver:(s,p)=>{let{ownerState:d}=s;return[p.circle,p[`circle${xo(d.variant)}`],d.disableShrink&&p.circleDisableShrink]}})(({ownerState:s,theme:p})=>K({stroke:"currentColor"},s.variant==="determinate"&&{transition:p.transitions.create("stroke-dashoffset")},s.variant==="indeterminate"&&{strokeDasharray:"80px, 200px",strokeDashoffset:0}),({ownerState:s})=>s.variant==="indeterminate"&&!s.disableShrink&&(0,Y0.css)(ZQ||(ZQ=RS` animation: ${0} 1.4s ease-in-out infinite; - `),rwe)),lwe=Q6e.forwardRef(function(s,p){let d=Ws({props:s,name:"MuiCircularProgress"}),{className:w,color:_="primary",disableShrink:E=!1,size:T=40,style:z,thickness:V=3.6,value:H=0,variant:G="indeterminate"}=d,ee=Nn(d,ewe),ne=K({},d,{color:_,disableShrink:E,size:T,thickness:V,value:H,variant:G}),ie=nwe(ne),oe={},ce={},me={};if(G==="determinate"){let le=2*Math.PI*((Of-V)/2);oe.strokeDasharray=le.toFixed(3),me["aria-valuenow"]=Math.round(H),oe.strokeDashoffset=`${((100-H)/100*le).toFixed(3)}px`,ce.transform="rotate(-90deg)"}return(0,sT.jsx)(owe,K({className:Wo(ie.root,w),style:K({width:T,height:T},ce,z),ownerState:ne,ref:p,role:"progressbar"},me,ee,{children:(0,sT.jsx)(iwe,{className:ie.svg,ownerState:ne,viewBox:`${Of/2} ${Of/2} ${Of} ${Of}`,children:(0,sT.jsx)(awe,{className:ie.circle,style:oe,ownerState:ne,cx:Of,cy:Of,r:(Of-V)/2,fill:"none",strokeWidth:V})})}))}),swe=lwe;de();var Z0=O(C());function uwe(s){return Jl("MuiFormControl",s)}var mEt=Ns("MuiFormControl",["root","marginNone","marginNormal","marginDense","fullWidth","disabled"]),XQ=O(Xr()),cwe=["children","className","color","component","disabled","error","focused","fullWidth","hiddenLabel","margin","required","size","variant"],pwe=s=>{let{classes:p,margin:d,fullWidth:w}=s,_={root:["root",d!=="none"&&`margin${Oo(d)}`,w&&"fullWidth"]};return Fs(_,uwe,p)},fwe=Zo("div",{name:"MuiFormControl",slot:"Root",overridesResolver:({ownerState:s},p)=>K({},p.root,p[`margin${Oo(s.margin)}`],s.fullWidth&&p.fullWidth)})(({ownerState:s})=>K({display:"inline-flex",flexDirection:"column",position:"relative",minWidth:0,padding:0,margin:0,border:0,verticalAlign:"top"},s.margin==="normal"&&{marginTop:16,marginBottom:8},s.margin==="dense"&&{marginTop:8,marginBottom:4},s.fullWidth&&{width:"100%"})),dwe=Z0.forwardRef(function(s,p){let d=Ws({props:s,name:"MuiFormControl"}),{children:w,className:_,color:E="primary",component:T="div",disabled:z=!1,error:V=!1,focused:H,fullWidth:G=!1,hiddenLabel:ee=!1,margin:ne="none",required:ie=!1,size:oe="medium",variant:ce="outlined"}=d,me=Nn(d,cwe),le=K({},d,{color:E,component:T,disabled:z,error:V,fullWidth:G,hiddenLabel:ee,margin:ne,required:ie,size:oe,variant:ce}),Te=pwe(le),[De,Ie]=Z0.useState(()=>{let Je=!1;return w&&Z0.Children.forEach(w,tt=>{if(!YM(tt,["Input","Select"]))return;let gt=YM(tt,["Select"])?tt.props.input:tt;gt&&I6e(gt.props)&&(Je=!0)}),Je}),[Pe,we]=Z0.useState(()=>{let Je=!1;return w&&Z0.Children.forEach(w,tt=>{YM(tt,["Input","Select"])&&(VQ(tt.props,!0)||VQ(tt.props.inputProps,!0))&&(Je=!0)}),Je}),[Ae,ue]=Z0.useState(!1);z&&Ae&&ue(!1);let je=H!==void 0&&!z?H:Ae,ze,Fe=Z0.useMemo(()=>({adornedStart:De,setAdornedStart:Ie,color:E,disabled:z,error:V,filled:Pe,focused:je,fullWidth:G,hiddenLabel:ee,size:oe,onBlur:()=>{ue(!1)},onEmpty:()=>{we(!1)},onFilled:()=>{we(!0)},onFocus:()=>{ue(!0)},registerEffect:ze,required:ie,variant:ce}),[De,E,z,V,Pe,je,G,ee,ze,ie,oe,ce]);return(0,XQ.jsx)(BQ.Provider,{value:Fe,children:(0,XQ.jsx)(fwe,K({as:T,ownerState:le,className:Wo(Te.root,_),ref:p},me,{children:w}))})}),mwe=dwe;de();var KQ=O(C()),hwe=K5e({createStyledComponent:Zo("div",{name:"MuiStack",slot:"Root",overridesResolver:(s,p)=>p.root}),useThemeProps:s=>Ws({props:s,name:"MuiStack"})}),gwe=hwe;function vwe(s){return Jl("MuiFormControlLabel",s)}var ywe=Ns("MuiFormControlLabel",["root","labelPlacementStart","labelPlacementTop","labelPlacementBottom","disabled","label","error","required","asterisk"]),O2=ywe,bwe=O(Xr()),uT=O(Xr()),wwe=["checked","className","componentsProps","control","disabled","disableTypography","inputRef","label","labelPlacement","name","onChange","required","slotProps","value"],Owe=s=>{let{classes:p,disabled:d,labelPlacement:w,error:_,required:E}=s,T={root:["root",d&&"disabled",`labelPlacement${Oo(w)}`,_&&"error",E&&"required"],label:["label",d&&"disabled"],asterisk:["asterisk",_&&"error"]};return Fs(T,vwe,p)},xwe=Zo("label",{name:"MuiFormControlLabel",slot:"Root",overridesResolver:(s,p)=>{let{ownerState:d}=s;return[{[`& .${O2.label}`]:p.label},p.root,p[`labelPlacement${Oo(d.labelPlacement)}`]]}})(({theme:s,ownerState:p})=>K({display:"inline-flex",alignItems:"center",cursor:"pointer",verticalAlign:"middle",WebkitTapHighlightColor:"transparent",marginLeft:-11,marginRight:16,[`&.${O2.disabled}`]:{cursor:"default"}},p.labelPlacement==="start"&&{flexDirection:"row-reverse",marginLeft:16,marginRight:-11},p.labelPlacement==="top"&&{flexDirection:"column-reverse",marginLeft:16},p.labelPlacement==="bottom"&&{flexDirection:"column",marginLeft:16},{[`& .${O2.label}`]:{[`&.${O2.disabled}`]:{color:(s.vars||s).palette.text.disabled}}})),_we=Zo("span",{name:"MuiFormControlLabel",slot:"Asterisk",overridesResolver:(s,p)=>p.asterisk})(({theme:s})=>({[`&.${O2.error}`]:{color:(s.vars||s).palette.error.main}})),Swe=KQ.forwardRef(function(s,p){var d,w;let _=Ws({props:s,name:"MuiFormControlLabel"}),{className:E,componentsProps:T={},control:z,disabled:V,disableTypography:H,label:G,labelPlacement:ee="end",required:ne,slotProps:ie={}}=_,oe=Nn(_,wwe),ce=oT(),me=(d=V??z.props.disabled)!=null?d:ce?.disabled,le=ne??z.props.required,Te={disabled:me,required:le};["checked","name","onChange","value","inputRef"].forEach(ue=>{typeof z.props[ue]>"u"&&typeof _[ue]<"u"&&(Te[ue]=_[ue])});let De=WQ({props:_,muiFormControl:ce,states:["error"]}),Ie=K({},_,{disabled:me,labelPlacement:ee,required:le,error:De.error}),Pe=Owe(Ie),we=(w=ie.typography)!=null?w:T.typography,Ae=G;return Ae!=null&&Ae.type!==FQ&&!H&&(Ae=(0,bwe.jsx)(FQ,K({component:"span"},we,{className:Wo(Pe.label,we?.className),children:Ae}))),(0,uT.jsxs)(xwe,K({className:Wo(Pe.root,E),ownerState:Ie,ref:p},oe,{children:[KQ.cloneElement(z,Te),le?(0,uT.jsxs)(gwe,{display:"block",children:[Ae,(0,uT.jsxs)(_we,{ownerState:Ie,"aria-hidden":!0,className:Pe.asterisk,children:["\u2009","*"]})]}):Ae]}))}),x2=Swe;de();var jwe=O(C());function Iwe(s){return Jl("MuiFormGroup",s)}var hEt=Ns("MuiFormGroup",["root","row","error"]),kwe=O(Xr()),Pwe=["className","row"],Ewe=s=>{let{classes:p,row:d,error:w}=s;return Fs({root:["root",d&&"row",w&&"error"]},Iwe,p)},Cwe=Zo("div",{name:"MuiFormGroup",slot:"Root",overridesResolver:(s,p)=>{let{ownerState:d}=s;return[p.root,d.row&&p.row]}})(({ownerState:s})=>K({display:"flex",flexDirection:"column",flexWrap:"wrap"},s.row&&{flexDirection:"row"})),Awe=jwe.forwardRef(function(s,p){let d=Ws({props:s,name:"MuiFormGroup"}),{className:w,row:_=!1}=d,E=Nn(d,Pwe),T=oT(),z=WQ({props:d,muiFormControl:T,states:["error"]}),V=K({},d,{row:_,error:z.error}),H=Ewe(V);return(0,kwe.jsx)(Cwe,K({className:Wo(H.root,w),ownerState:V,ref:p},E))}),Mwe=Awe;de();var cT=O(C()),Twe=O(I0());de();var gEt=O(C()),vEt=O(C()),Rwe=O(Xr()),zwe=b2((0,Rwe.jsx)("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"}),"RadioButtonUnchecked"),yEt=O(C()),Lwe=O(Xr()),Dwe=b2((0,Lwe.jsx)("path",{d:"M8.465 8.465C9.37 7.56 10.62 7 12 7C14.76 7 17 9.24 17 12C17 13.38 16.44 14.63 15.535 15.535C14.63 16.44 13.38 17 12 17C9.24 17 7 14.76 7 12C7 10.62 7.56 9.37 8.465 8.465Z"}),"RadioButtonChecked"),YQ=O(Xr()),Nwe=O(Xr()),Fwe=Zo("span",{shouldForwardProp:y2})({position:"relative",display:"flex"}),Wwe=Zo(zwe)({transform:"scale(1)"}),Bwe=Zo(Dwe)(({theme:s,ownerState:p})=>K({left:0,position:"absolute",transform:"scale(0)",transition:s.transitions.create("transform",{easing:s.transitions.easing.easeIn,duration:s.transitions.duration.shortest})},p.checked&&{transform:"scale(1)",transition:s.transitions.create("transform",{easing:s.transitions.easing.easeOut,duration:s.transitions.duration.shortest})}));function Hwe(s){let{checked:p=!1,classes:d={},fontSize:w}=s,_=K({},s,{checked:p});return(0,Nwe.jsxs)(Fwe,{className:d.root,ownerState:_,children:[(0,YQ.jsx)(Wwe,{fontSize:w,className:d.background,ownerState:_}),(0,YQ.jsx)(Bwe,{fontSize:w,className:d.dot,ownerState:_})]})}var QQ=Hwe,Vwe=O(C()),qwe=O(C()),Uwe=qwe.createContext(void 0),ZQ=Uwe;function $we(){return Vwe.useContext(ZQ)}function Jwe(s){return Jl("MuiRadio",s)}var Gwe=Ns("MuiRadio",["root","checked","disabled","colorPrimary","colorSecondary","sizeSmall"]),eZ=Gwe,pT=O(Xr()),Xwe=["checked","checkedIcon","color","icon","name","onChange","size","className"],Kwe=s=>{let{classes:p,color:d,size:w}=s,_={root:["root",`color${Oo(d)}`,w!=="medium"&&`size${Oo(w)}`]};return K({},p,Fs(_,Jwe,p))},Ywe=Zo(qQ,{shouldForwardProp:s=>y2(s)||s==="classes",name:"MuiRadio",slot:"Root",overridesResolver:(s,p)=>{let{ownerState:d}=s;return[p.root,d.size!=="medium"&&p[`size${Oo(d.size)}`],p[`color${Oo(d.color)}`]]}})(({theme:s,ownerState:p})=>K({color:(s.vars||s).palette.text.secondary},!p.disableRipple&&{"&:hover":{backgroundColor:s.vars?`rgba(${p.color==="default"?s.vars.palette.action.activeChannel:s.vars.palette[p.color].mainChannel} / ${s.vars.palette.action.hoverOpacity})`:(0,Twe.alpha)(p.color==="default"?s.palette.action.active:s.palette[p.color].main,s.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:"transparent"}}},p.color!=="default"&&{[`&.${eZ.checked}`]:{color:(s.vars||s).palette[p.color].main}},{[`&.${eZ.disabled}`]:{color:(s.vars||s).palette.action.disabled}}));function Qwe(s,p){return typeof p=="object"&&p!==null?s===p:String(s)===String(p)}var tZ=(0,pT.jsx)(QQ,{checked:!0}),rZ=(0,pT.jsx)(QQ,{}),Zwe=cT.forwardRef(function(s,p){var d,w;let _=Ws({props:s,name:"MuiRadio"}),{checked:E,checkedIcon:T=tZ,color:z="primary",icon:V=rZ,name:H,onChange:G,size:ee="medium",className:ne}=_,ie=Nn(_,Xwe),oe=K({},_,{color:z,size:ee}),ce=Kwe(oe),me=$we(),le=E,Te=k4e(G,me&&me.onChange),De=H;return me&&(typeof le>"u"&&(le=Qwe(me.value,_.value)),typeof De>"u"&&(De=me.name)),(0,pT.jsx)(Ywe,K({type:"radio",icon:cT.cloneElement(V,{fontSize:(d=rZ.props.fontSize)!=null?d:ee}),checkedIcon:cT.cloneElement(T,{fontSize:(w=tZ.props.fontSize)!=null?w:ee}),ownerState:oe,classes:ce,name:De,checked:le,onChange:Te,ref:p,className:Wo(ce.root,ne)},ie))}),nZ=Zwe;de();var MS=O(C()),oZ=O(Xr()),eOe=["actions","children","defaultValue","name","onChange","value"],tOe=MS.forwardRef(function(s,p){let{actions:d,children:w,defaultValue:_,name:E,onChange:T,value:z}=s,V=Nn(s,eOe),H=MS.useRef(null),[G,ee]=CQ({controlled:z,default:_,name:"RadioGroup"});MS.useImperativeHandle(d,()=>({focus:()=>{let ce=H.current.querySelector("input:not(:disabled):checked");ce||(ce=H.current.querySelector("input:not(:disabled)")),ce&&ce.focus()}}),[]);let ne=QM(p,H),ie=z4e(E),oe=MS.useMemo(()=>({name:ie,onChange(ce){ee(ce.target.value),T&&T(ce,ce.target.value)},value:G}),[ie,T,ee,G]);return(0,oZ.jsx)(ZQ.Provider,{value:oe,children:(0,oZ.jsx)(Mwe,K({role:"radiogroup",ref:ne},V,{children:w}))})}),rOe=tOe,xf=O(C()),nOe=_Q({palette:{primary:{main:"#00827c"}}}),fT=O(Xr());function oOe({expandable:s,expanded:p,highlight:d,isLast:w,children:_,onClick:E}){let T=["jstree-node"];return p?T.push("jstree-open"):T.push("jstree-closed"),s||T.push("jstree-leaf"),w&&T.push("jstree-last"),d&&(_=(0,fT.jsx)("span",{className:"jstree-clicked",children:_})),(0,fT.jsxs)("li",{role:"treeitem",className:T.join(" "),children:[(0,fT.jsx)("i",{className:"jstree-icon jstree-ocl",role:"presentation",onClick:E}),_]})}var Bn=O(Xr());function iOe({ontology:s,entityType:p,selectedEntity:d,lang:w,onNavigateToEntity:_,onNavigateToOntology:E,apiUrl:T}){let z=Cs(),V=Yo(Ae=>Ae.ontologies.nodesWithChildrenLoaded),H=Yo(Ae=>Ae.ontologies.nodeChildren),G=Yo(Ae=>Ae.ontologies.rootNodes),ee=Yo(Ae=>Ae.ontologies.numPendingTreeRequests),ne=Yo(Ae=>Ae.ontologies.preferredRoots),ie=Yo(Ae=>Ae.ontologies.automaticallyExpandedNodes),oe=Yo(Ae=>Ae.ontologies.manuallyExpandedNodes),ce=d?d.isDeprecated():Yo(Ae=>Ae.ontologies.displayObsolete),me=Yo(Ae=>Ae.ontologies.displaySiblings),le=Yo(Ae=>Ae.ontologies.displayCounts),Te=(0,xf.useCallback)(Ae=>{let ue=oe.indexOf(Ae.absoluteIdentity)!==-1||ie.indexOf(Ae.absoluteIdentity)!==-1;z(ue?BY(Ae):WY(Ae))},[z,JSON.stringify(ie),JSON.stringify(oe)]);(0,xf.useEffect)(()=>{z(DY({entityType:p,selectedEntity:d}))},[z,s.getOntologyId(),p,d?.getIri()]),(0,xf.useEffect)(()=>{z(LY())},[z,s.getOntologyId(),p,JSON.stringify(d),ce,ne,w]),(0,xf.useEffect)(()=>{if(d){let Ae=d.getIri(),ue=z(mS({ontologyId:s.getOntologyId(),entityType:d.getTypePlural(),entityIri:Ae,lang:w,showObsoleteEnabled:ce,showSiblingsEnabled:me,apiUrl:T}));return()=>ue.abort()}else{let Ae=z(hS({ontologyId:s.getOntologyId(),entityType:p,preferredRoots:ne,lang:w,showObsoleteEnabled:ce,apiUrl:T}));return()=>Ae.abort()}},[z,p,JSON.stringify(d),s.getOntologyId(),ne,w,ce]),(0,xf.useEffect)(()=>{let Ae=oe.filter(je=>V.indexOf(je)===-1);me&&(Ae=[...Ae,...ie.filter(je=>V.indexOf(je)===-1)]);let ue=[];for(let je of Ae)ue.push(z(gS({ontologyId:s.getOntologyId(),entityTypePlural:d?.getTypePlural()||p,entityIri:je.split(";").pop(),absoluteIdentity:je,lang:w,showObsoleteEnabled:ce,apiUrl:T})));return()=>{for(let je of ue)je.abort()}},[z,w,JSON.stringify(oe),JSON.stringify(ie),JSON.stringify(H),s.getOntologyId(),p,ne,ce,me]);let De=(0,xf.useCallback)(()=>{z(ce?VY():HY())},[z,ce]),Ie=(0,xf.useCallback)(()=>{z(me?UY():qY())},[z,me]),Pe=(0,xf.useCallback)(()=>{z(le?JY():$Y())},[z,le]);function we(Ae,ue){if(ue>100)throw new Error("probable cyclic tree (renderNodeChildren)");let je=[...Ae];je.sort((Fe,Je)=>{let tt=Fe?.title?Fe.title.toString().toUpperCase():"",gt=Je?.title?Je.title.toString().toUpperCase():"";return tt===gt?0:tt>gt?1:-1});let ze=je.filter((Fe,Je,tt)=>!Je||Fe.absoluteIdentity!==tt[Je-1].absoluteIdentity);return(0,Bn.jsx)("ul",{role:"group",className:"jstree-container-ul jstree-children jstree-no-icons",children:ze.map((Fe,Je)=>{let tt=oe.indexOf(Fe.absoluteIdentity)!==-1||ie.indexOf(Fe.absoluteIdentity)!==-1,gt=Je===ze.length-1,Ut=d&&Fe.iri===d.getIri()||!1;return(0,Bn.jsxs)(oOe,{expandable:Fe.expandable,expanded:tt,highlight:Ut,isLast:gt,onClick:()=>{Te(Fe)},children:[Fe.childRelationToParent==="http://purl.obolibrary.org/obo/BFO_0000050"&&(0,Bn.jsx)("img",{className:"mr-1",src:Io("/","/part.svg"),style:{height:"1em",display:"inline"}}),Fe.childRelationToParent==="http://www.w3.org/1999/02/22-rdf-syntax-ns#type"&&(0,Bn.jsx)("img",{className:"mr-1",src:Io("/","/instance.svg"),style:{height:"1em",display:"inline"}}),(0,Bn.jsx)(aOe,{ontology:s,entity:Fe.entity,title:Fe.title,lang:w,onNavigateToEntity:_,onNavigateToOntology:E}),!ce&&le&&Fe.numDescendants>0&&(0,Bn.jsx)("span",{style:{color:"gray"},children:" ("+Fe.numDescendants.toLocaleString()+")"}),tt&&we(H[Fe.absoluteIdentity]||[],ue+1)]},Fu())})})}return(0,Bn.jsx)(ks,{theme:nOe,children:(0,Bn.jsxs)("div",{className:"flex flex-col-reverse lg:grid lg:grid-cols-3 lg:gap-4",children:[G?(0,Bn.jsxs)("div",{className:"lg:col-span-2 relative",children:[(0,Bn.jsx)("div",{className:"px-3 pb-3 jstree jstree-1 jstree-proton overflow-x-auto",role:"tree",children:we(G,0)}),ee>0?(0,Bn.jsx)("div",{className:"absolute spinner-default w-7 h-7 -top-1 -left-4 z-auto"}):null]}):null,(0,Bn.jsxs)("div",{className:"lg:col-span-1 flex flex-col bg-white px-2 mb-2 rounded-lg",children:[p==="classes"&&s.getPreferredRoots().length>0&&(0,Bn.jsx)("div",{className:"mb-2",children:(0,Bn.jsx)(mwe,{children:(0,Bn.jsxs)(rOe,{name:"radio-buttons-group",value:ne?"true":"false",children:[(0,Bn.jsx)(x2,{value:"true",onClick:()=>z(NY()),control:(0,Bn.jsx)(nZ,{}),label:"Preferred roots"}),(0,Bn.jsx)(x2,{value:"false",onClick:()=>z(FY()),control:(0,Bn.jsx)(nZ,{}),label:"All classes"})]})})}),(0,Bn.jsx)(x2,{control:(0,Bn.jsx)(lT,{disabled:ce,checked:!ce&&le,onClick:Pe}),label:"Show counts"}),(0,Bn.jsx)(x2,{control:(0,Bn.jsx)(lT,{checked:ce,onClick:De}),label:"Show obsolete terms"}),d&&(0,Bn.jsx)(x2,{control:(0,Bn.jsx)(lT,{checked:me,onClick:Ie}),label:"Show all siblings"})]})]})})}function aOe({ontology:s,entity:p,title:d,lang:w,onNavigateToEntity:_,onNavigateToOntology:E}){let T=p.getDefinedBy();return T.indexOf(s.getOntologyId())!==-1&&(T=[]),(0,Bn.jsxs)("span",{children:[(0,Bn.jsx)("a",{title:p.getIri(),className:"link-default",onClick:()=>_(s,p),children:d}),T.length>0&&T.map(z=>(0,Bn.jsx)("span",{onClick:()=>E(z,p),title:z.toUpperCase(),className:"mx-1 link-ontology px-2 py-0.5 rounded-md text-sm text-white uppercase ml-1",children:z}))]})}var TS=function(){function s(){this.listeners=[]}var p=s.prototype;return p.subscribe=function(d){var w=this,_=d||function(){};return this.listeners.push(_),this.onSubscribe(),function(){w.listeners=w.listeners.filter(function(E){return E!==_}),w.onUnsubscribe()}},p.hasListeners=function(){return this.listeners.length>0},p.onSubscribe=function(){},p.onUnsubscribe=function(){},s}();de();var iZ=typeof window>"u";function Ia(){}function lOe(s,p){return typeof s=="function"?s(p):s}function sOe(s){return typeof s=="number"&&s>=0&&s!==1/0}function RS(s){return Array.isArray(s)?s:[s]}function uOe(s,p){return Math.max(s+(p||0)-Date.now(),0)}function dT(s,p,d){return LS(s)?typeof p=="function"?K({},d,{queryKey:s,queryFn:p}):K({},p,{queryKey:s}):s}function _f(s,p,d){return LS(s)?[K({},p,{queryKey:s}),d]:[s||{},p]}function cOe(s,p){if(s===!0&&p===!0||s==null&&p==null)return"all";if(s===!1&&p===!1)return"none";var d=s??!p;return d?"active":"inactive"}function aZ(s,p){var d=s.active,w=s.exact,_=s.fetching,E=s.inactive,T=s.predicate,z=s.queryKey,V=s.stale;if(LS(z)){if(w){if(p.queryHash!==mT(z,p.options))return!1}else if(!zS(p.queryKey,z))return!1}var H=cOe(d,E);if(H==="none")return!1;if(H!=="all"){var G=p.isActive();if(H==="active"&&!G||H==="inactive"&&G)return!1}return!(typeof V=="boolean"&&p.isStale()!==V||typeof _=="boolean"&&p.isFetching()!==_||T&&!T(p))}function lZ(s,p){var d=s.exact,w=s.fetching,_=s.predicate,E=s.mutationKey;if(LS(E)){if(!p.options.mutationKey)return!1;if(d){if(e1(p.options.mutationKey)!==e1(E))return!1}else if(!zS(p.options.mutationKey,E))return!1}return!(typeof w=="boolean"&&p.state.status==="loading"!==w||_&&!_(p))}function mT(s,p){var d=p?.queryKeyHashFn||e1;return d(s)}function e1(s){var p=RS(s);return pOe(p)}function pOe(s){return JSON.stringify(s,function(p,d){return hT(d)?Object.keys(d).sort().reduce(function(w,_){return w[_]=d[_],w},{}):d})}function zS(s,p){return sZ(RS(s),RS(p))}function sZ(s,p){return s===p?!0:typeof s!=typeof p?!1:s&&p&&typeof s=="object"&&typeof p=="object"?!Object.keys(p).some(function(d){return!sZ(s[d],p[d])}):!1}function uZ(s,p){if(s===p)return s;var d=Array.isArray(s)&&Array.isArray(p);if(d||hT(s)&&hT(p)){for(var w=d?s.length:Object.keys(s).length,_=d?p:Object.keys(p),E=_.length,T=d?[]:{},z=0,V=0;V"u")return!0;var d=p.prototype;return!(!cZ(d)||!d.hasOwnProperty("isPrototypeOf"))}function cZ(s){return Object.prototype.toString.call(s)==="[object Object]"}function LS(s){return typeof s=="string"||Array.isArray(s)}function fOe(s){return new Promise(function(p){setTimeout(p,s)})}function pZ(s){Promise.resolve().then(s).catch(function(p){return setTimeout(function(){throw p})})}function fZ(){if(typeof AbortController=="function")return new AbortController}var dOe=function(s){w2(p,s);function p(){var w;return w=s.call(this)||this,w.setup=function(_){var E;if(!iZ&&(E=window)!=null&&E.addEventListener){var T=function(){return _()};return window.addEventListener("visibilitychange",T,!1),window.addEventListener("focus",T,!1),function(){window.removeEventListener("visibilitychange",T),window.removeEventListener("focus",T)}}},w}var d=p.prototype;return d.onSubscribe=function(){this.cleanup||this.setEventListener(this.setup)},d.onUnsubscribe=function(){if(!this.hasListeners()){var w;(w=this.cleanup)==null||w.call(this),this.cleanup=void 0}},d.setEventListener=function(w){var _,E=this;this.setup=w,(_=this.cleanup)==null||_.call(this),this.cleanup=w(function(T){typeof T=="boolean"?E.setFocused(T):E.onFocus()})},d.setFocused=function(w){this.focused=w,w&&this.onFocus()},d.onFocus=function(){this.listeners.forEach(function(w){w()})},d.isFocused=function(){return typeof this.focused=="boolean"?this.focused:typeof document>"u"?!0:[void 0,"visible","prerender"].includes(document.visibilityState)},p}(TS),DS=new dOe,mOe=function(s){w2(p,s);function p(){var w;return w=s.call(this)||this,w.setup=function(_){var E;if(!iZ&&(E=window)!=null&&E.addEventListener){var T=function(){return _()};return window.addEventListener("online",T,!1),window.addEventListener("offline",T,!1),function(){window.removeEventListener("online",T),window.removeEventListener("offline",T)}}},w}var d=p.prototype;return d.onSubscribe=function(){this.cleanup||this.setEventListener(this.setup)},d.onUnsubscribe=function(){if(!this.hasListeners()){var w;(w=this.cleanup)==null||w.call(this),this.cleanup=void 0}},d.setEventListener=function(w){var _,E=this;this.setup=w,(_=this.cleanup)==null||_.call(this),this.cleanup=w(function(T){typeof T=="boolean"?E.setOnline(T):E.onOnline()})},d.setOnline=function(w){this.online=w,w&&this.onOnline()},d.onOnline=function(){this.listeners.forEach(function(w){w()})},d.isOnline=function(){return typeof this.online=="boolean"?this.online:typeof navigator>"u"||typeof navigator.onLine>"u"?!0:navigator.onLine},p}(TS),NS=new mOe;function hOe(s){return Math.min(1e3*Math.pow(2,s),3e4)}function FS(s){return typeof s?.cancel=="function"}var dZ=function(s){this.revert=s?.revert,this.silent=s?.silent};function gT(s){return s instanceof dZ}var mZ=function(s){var p=this,d=!1,w,_,E,T;this.abort=s.abort,this.cancel=function(ee){return w?.(ee)},this.cancelRetry=function(){d=!0},this.continueRetry=function(){d=!1},this.continue=function(){return _?.()},this.failureCount=0,this.isPaused=!1,this.isResolved=!1,this.isTransportCancelable=!1,this.promise=new Promise(function(ee,ne){E=ee,T=ne});var z=function(ee){p.isResolved||(p.isResolved=!0,s.onSuccess==null||s.onSuccess(ee),_?.(),E(ee))},V=function(ee){p.isResolved||(p.isResolved=!0,s.onError==null||s.onError(ee),_?.(),T(ee))},H=function(){return new Promise(function(ee){_=ee,p.isPaused=!0,s.onPause==null||s.onPause()}).then(function(){_=void 0,p.isPaused=!1,s.onContinue==null||s.onContinue()})},G=function ee(){if(!p.isResolved){var ne;try{ne=s.fn()}catch(ie){ne=Promise.reject(ie)}w=function(ie){if(!p.isResolved&&(V(new dZ(ie)),p.abort==null||p.abort(),FS(ne)))try{ne.cancel()}catch{}},p.isTransportCancelable=FS(ne),Promise.resolve(ne).then(z).catch(function(ie){var oe,ce;if(!p.isResolved){var me=(oe=s.retry)!=null?oe:3,le=(ce=s.retryDelay)!=null?ce:hOe,Te=typeof le=="function"?le(p.failureCount,ie):le,De=me===!0||typeof me=="number"&&p.failureCount"u"&&(T.exact=!0),this.queries.find(function(z){return aZ(T,z)})},d.findAll=function(w,_){var E=_f(w,_),T=E[0];return Object.keys(T).length>0?this.queries.filter(function(z){return aZ(T,z)}):this.queries},d.notify=function(w){var _=this;Ti.batch(function(){_.listeners.forEach(function(E){E(w)})})},d.onFocus=function(){var w=this;Ti.batch(function(){w.queries.forEach(function(_){_.onFocus()})})},d.onOnline=function(){var w=this;Ti.batch(function(){w.queries.forEach(function(_){_.onOnline()})})},p}(TS);de(),de();var wOe=function(){function s(d){this.options=K({},d.defaultOptions,d.options),this.mutationId=d.mutationId,this.mutationCache=d.mutationCache,this.observers=[],this.state=d.state||OOe(),this.meta=d.meta}var p=s.prototype;return p.setState=function(d){this.dispatch({type:"setState",state:d})},p.addObserver=function(d){this.observers.indexOf(d)===-1&&this.observers.push(d)},p.removeObserver=function(d){this.observers=this.observers.filter(function(w){return w!==d})},p.cancel=function(){return this.retryer?(this.retryer.cancel(),this.retryer.promise.then(Ia).catch(Ia)):Promise.resolve()},p.continue=function(){return this.retryer?(this.retryer.continue(),this.retryer.promise):this.execute()},p.execute=function(){var d=this,w,_=this.state.status==="loading",E=Promise.resolve();return _||(this.dispatch({type:"loading",variables:this.options.variables}),E=E.then(function(){d.mutationCache.config.onMutate==null||d.mutationCache.config.onMutate(d.state.variables,d)}).then(function(){return d.options.onMutate==null?void 0:d.options.onMutate(d.state.variables)}).then(function(T){T!==d.state.context&&d.dispatch({type:"loading",context:T,variables:d.state.variables})})),E.then(function(){return d.executeMutation()}).then(function(T){w=T,d.mutationCache.config.onSuccess==null||d.mutationCache.config.onSuccess(w,d.state.variables,d.state.context,d)}).then(function(){return d.options.onSuccess==null?void 0:d.options.onSuccess(w,d.state.variables,d.state.context)}).then(function(){return d.options.onSettled==null?void 0:d.options.onSettled(w,null,d.state.variables,d.state.context)}).then(function(){return d.dispatch({type:"success",data:w}),w}).catch(function(T){return d.mutationCache.config.onError==null||d.mutationCache.config.onError(T,d.state.variables,d.state.context,d),gZ().error(T),Promise.resolve().then(function(){return d.options.onError==null?void 0:d.options.onError(T,d.state.variables,d.state.context)}).then(function(){return d.options.onSettled==null?void 0:d.options.onSettled(void 0,T,d.state.variables,d.state.context)}).then(function(){throw d.dispatch({type:"error",error:T}),T})})},p.executeMutation=function(){var d=this,w;return this.retryer=new mZ({fn:function(){return d.options.mutationFn?d.options.mutationFn(d.state.variables):Promise.reject("No mutationFn found")},onFail:function(){d.dispatch({type:"failed"})},onPause:function(){d.dispatch({type:"pause"})},onContinue:function(){d.dispatch({type:"continue"})},retry:(w=this.options.retry)!=null?w:0,retryDelay:this.options.retryDelay}),this.retryer.promise},p.dispatch=function(d){var w=this;this.state=xOe(this.state,d),Ti.batch(function(){w.observers.forEach(function(_){_.onMutationUpdate(d)}),w.mutationCache.notify(w)})},s}();function OOe(){return{context:void 0,data:void 0,error:null,failureCount:0,isPaused:!1,status:"idle",variables:void 0}}function xOe(s,p){switch(p.type){case"failed":return K({},s,{failureCount:s.failureCount+1});case"pause":return K({},s,{isPaused:!0});case"continue":return K({},s,{isPaused:!1});case"loading":return K({},s,{context:p.context,data:void 0,error:null,isPaused:!1,status:"loading",variables:p.variables});case"success":return K({},s,{data:p.data,error:null,status:"success",isPaused:!1});case"error":return K({},s,{data:void 0,error:p.error,failureCount:s.failureCount+1,isPaused:!1,status:"error"});case"setState":return K({},s,p.state);default:return s}}var _Oe=function(s){w2(p,s);function p(w){var _;return _=s.call(this)||this,_.config=w||{},_.mutations=[],_.mutationId=0,_}var d=p.prototype;return d.build=function(w,_,E){var T=new wOe({mutationCache:this,mutationId:++this.mutationId,options:w.defaultMutationOptions(_),state:E,defaultOptions:_.mutationKey?w.getMutationDefaults(_.mutationKey):void 0,meta:_.meta});return this.add(T),T},d.add=function(w){this.mutations.push(w),this.notify(w)},d.remove=function(w){this.mutations=this.mutations.filter(function(_){return _!==w}),w.cancel(),this.notify(w)},d.clear=function(){var w=this;Ti.batch(function(){w.mutations.forEach(function(_){w.remove(_)})})},d.getAll=function(){return this.mutations},d.find=function(w){return typeof w.exact>"u"&&(w.exact=!0),this.mutations.find(function(_){return lZ(w,_)})},d.findAll=function(w){return this.mutations.filter(function(_){return lZ(w,_)})},d.notify=function(w){var _=this;Ti.batch(function(){_.listeners.forEach(function(E){E(w)})})},d.onFocus=function(){this.resumePausedMutations()},d.onOnline=function(){this.resumePausedMutations()},d.resumePausedMutations=function(){var w=this.mutations.filter(function(_){return _.state.isPaused});return Ti.batch(function(){return w.reduce(function(_,E){return _.then(function(){return E.continue().catch(Ia)})},Promise.resolve())})},p}(TS);function SOe(){return{onFetch:function(s){s.fetchFn=function(){var p,d,w,_,E,T,z=(p=s.fetchOptions)==null||(d=p.meta)==null?void 0:d.refetchPage,V=(w=s.fetchOptions)==null||(_=w.meta)==null?void 0:_.fetchMore,H=V?.pageParam,G=V?.direction==="forward",ee=V?.direction==="backward",ne=((E=s.state.data)==null?void 0:E.pages)||[],ie=((T=s.state.data)==null?void 0:T.pageParams)||[],oe=fZ(),ce=oe?.signal,me=ie,le=!1,Te=s.options.queryFn||function(){return Promise.reject("Missing queryFn")},De=function(Je,tt,gt,Ut){return me=Ut?[tt].concat(me):[].concat(me,[tt]),Ut?[gt].concat(Je):[].concat(Je,[gt])},Ie=function(Je,tt,gt,Ut){if(le)return Promise.reject("Cancelled");if(typeof gt>"u"&&!tt&&Je.length)return Promise.resolve(Je);var Gt={queryKey:s.queryKey,signal:ce,pageParam:gt,meta:s.meta},or=Te(Gt),Me=Promise.resolve(or).then(function(lr){return De(Je,gt,lr,Ut)});if(FS(or)){var st=Me;st.cancel=or.cancel}return Me},Pe;if(!ne.length)Pe=Ie([]);else if(G){var we=typeof H<"u",Ae=we?H:vZ(s.options,ne);Pe=Ie(ne,we,Ae)}else if(ee){var ue=typeof H<"u",je=ue?H:jOe(s.options,ne);Pe=Ie(ne,ue,je,!0)}else(function(){me=[];var Je=typeof s.options.getNextPageParam>"u",tt=z&&ne[0]?z(ne[0],0,ne):!0;Pe=tt?Ie([],Je,ie[0]):Promise.resolve(De([],ie[0],ne[0]));for(var gt=function(Gt){Pe=Pe.then(function(or){var Me=z&&ne[Gt]?z(ne[Gt],Gt,ne):!0;if(Me){var st=Je?ie[Gt]:vZ(s.options,or);return Ie(or,Je,st)}return Promise.resolve(De(or,ie[Gt],ne[Gt]))})},Ut=1;Ut"u"&&(H.revert=!0);var G=Ti.batch(function(){return E.queryCache.findAll(z).map(function(ee){return ee.cancel(H)})});return Promise.all(G).then(Ia).catch(Ia)},p.invalidateQueries=function(d,w,_){var E,T,z,V=this,H=_f(d,w,_),G=H[0],ee=H[1],ne=K({},G,{active:(E=(T=G.refetchActive)!=null?T:G.active)!=null?E:!0,inactive:(z=G.refetchInactive)!=null?z:!1});return Ti.batch(function(){return V.queryCache.findAll(G).forEach(function(ie){ie.invalidate()}),V.refetchQueries(ne,ee)})},p.refetchQueries=function(d,w,_){var E=this,T=_f(d,w,_),z=T[0],V=T[1],H=Ti.batch(function(){return E.queryCache.findAll(z).map(function(ee){return ee.fetch(void 0,K({},V,{meta:{refetchPage:z?.refetchPage}}))})}),G=Promise.all(H).then(Ia);return V?.throwOnError||(G=G.catch(Ia)),G},p.fetchQuery=function(d,w,_){var E=dT(d,w,_),T=this.defaultQueryOptions(E);typeof T.retry>"u"&&(T.retry=!1);var z=this.queryCache.build(this,T);return z.isStaleByTime(T.staleTime)?z.fetch(T):Promise.resolve(z.state.data)},p.prefetchQuery=function(d,w,_){return this.fetchQuery(d,w,_).then(Ia).catch(Ia)},p.fetchInfiniteQuery=function(d,w,_){var E=dT(d,w,_);return E.behavior=SOe(),this.fetchQuery(E)},p.prefetchInfiniteQuery=function(d,w,_){return this.fetchInfiniteQuery(d,w,_).then(Ia).catch(Ia)},p.cancelMutations=function(){var d=this,w=Ti.batch(function(){return d.mutationCache.getAll().map(function(_){return _.cancel()})});return Promise.all(w).then(Ia).catch(Ia)},p.resumePausedMutations=function(){return this.getMutationCache().resumePausedMutations()},p.executeMutation=function(d){return this.mutationCache.build(this,d).execute()},p.getQueryCache=function(){return this.queryCache},p.getMutationCache=function(){return this.mutationCache},p.getDefaultOptions=function(){return this.defaultOptions},p.setDefaultOptions=function(d){this.defaultOptions=d},p.setQueryDefaults=function(d,w){var _=this.queryDefaults.find(function(E){return e1(d)===e1(E.queryKey)});_?_.defaultOptions=w:this.queryDefaults.push({queryKey:d,defaultOptions:w})},p.getQueryDefaults=function(d){var w;return d?(w=this.queryDefaults.find(function(_){return zS(d,_.queryKey)}))==null?void 0:w.defaultOptions:void 0},p.setMutationDefaults=function(d,w){var _=this.mutationDefaults.find(function(E){return e1(d)===e1(E.mutationKey)});_?_.defaultOptions=w:this.mutationDefaults.push({mutationKey:d,defaultOptions:w})},p.getMutationDefaults=function(d){var w;return d?(w=this.mutationDefaults.find(function(_){return zS(d,_.mutationKey)}))==null?void 0:w.defaultOptions:void 0},p.defaultQueryOptions=function(d){if(d?._defaulted)return d;var w=K({},this.defaultOptions.queries,this.getQueryDefaults(d?.queryKey),d,{_defaulted:!0});return!w.queryHash&&w.queryKey&&(w.queryHash=mT(w.queryKey,w)),w},p.defaultQueryObserverOptions=function(d){return this.defaultQueryOptions(d)},p.defaultMutationOptions=function(d){return d?._defaulted?d:K({},this.defaultOptions.mutations,this.getMutationDefaults(d?.mutationKey),d,{_defaulted:!0})},p.clear=function(){this.queryCache.clear(),this.mutationCache.clear()},s}(),kOe=O(B()),POe=kOe.default.unstable_batchedUpdates;Ti.setBatchNotifyFunction(POe);var EOe=console;vOe(EOe);var _2=O(C()),yZ=_2.default.createContext(void 0),COe=_2.default.createContext(!1);function AOe(s){return s&&typeof window<"u"?(window.ReactQueryClientContext||(window.ReactQueryClientContext=yZ),window.ReactQueryClientContext):yZ}var MOe=function(s){var p=s.client,d=s.contextSharing,w=d===void 0?!1:d,_=s.children;_2.default.useEffect(function(){return p.mount(),function(){p.unmount()}},[p]);var E=AOe(w);return _2.default.createElement(COe.Provider,{value:w},_2.default.createElement(E.Provider,{value:p},_))},Lh=O(Xr());function TOe(s,p,d){Qm.default.render(ROe(s),p,d)}function ROe(s){let p=new IOe;return(0,Lh.jsx)(ch,{store:Sbe,children:(0,Lh.jsx)(MOe,{client:p,children:(0,Lh.jsx)(zOe,{ontologyId:s.ontologyId,iri:s.iri,entityType:s.entityType,apiUrl:s.apiUrl,onNavigateToEntity:s.onNavigateToEntity,onNavigateToOntology:s.onNavigateToOntology})})})}function zOe(s){let{entityType:p,lang:d="en",onNavigateToEntity:w=()=>{},onNavigateToOntology:_=()=>{}}=s,E=Yo(ie=>ie.ontologies.ontology),T=Yo(ie=>ie.ontologies.loadingOntology),z=Yo(ie=>ie.ontologies.entity),V=Yo(ie=>ie.ontologies.loadingEntity),H=Yo(ie=>ie.ontologies.loadingClassInstances),G=Cs(),ee=(ie,oe)=>{let ce=ie.getOntologyId(),me=oe.getTypePlural(),le=oe.getIri();w(ce,me,le)},ne=(ie,oe)=>{let ce=oe.getTypePlural(),me=oe.getIri();_(ie,ce,me)};return(0,af.useEffect)(()=>{G(cS({ontologyId:s.ontologyId,lang:"en",apiUrl:s.apiUrl}))},[G,s.ontologyId,s.apiUrl]),(0,af.useEffect)(()=>{E&&s.iri&&(s.entityType&&s.entityType!=="entities"?G(pS({ontologyId:s.ontologyId,entityType:s.entityType,entityIri:s.iri,searchParams:new URLSearchParams})):G(fS({ontologyId:s.ontologyId,entityIri:s.iri})))},[G,s.ontologyId,s.entityType,s.iri,E]),(0,af.useEffect)(()=>{z&&s.entityType==="classes"&&G(dS({ontologyId:z.getOntologyId(),classIri:z.getIri(),searchParams:new URLSearchParams}))},[G,s.ontologyId,s.entityType,s.iri,z]),(0,Lh.jsxs)(af.Fragment,{children:[(V||T||H)&&(0,Lh.jsx)(swe,{}),!V&&!T&&!H&&E&&(0,Lh.jsx)(iOe,{ontology:E,entityType:p||"entities",lang:d,selectedEntity:z,onNavigateToEntity:ee,onNavigateToOntology:ne,apiUrl:s.apiUrl})]})}window.OLSWidgets={createEntityTree:TOe}})();var A2e=P(xo(),1),wM=e=>((0,Zd.useEffect)(()=>{let t=document.querySelector("#tree_container");window.OLSWidgets.createEntityTree({iri:e.iri,ontologyId:e.ontologyId,apiUrl:e.api.substring(0,e.api.lastIndexOf("api")),entityType:(e.entityType?_3(e.entityType,!1):void 0)||"entities",onNavigateToEntity:e.onNavigateToEntity?e.onNavigateToEntity:(n,r,o)=>{console.log(`navigate to entity with ontologyId: ${n}, entityType: ${r}, iri: ${o}`)},onNavigateToOntology:e.onNavigateToOntology?e.onNavigateToOntology:(n,r,o)=>{console.log(`navigate to ontology with ontologyId: ${n}, entityType: ${r}, iri: ${o}`)}},t)},[e.api,e.iri,e.ontologyId,e.entityType,e.onNavigateToEntity,e.onNavigateToOntology,"hierarchyWidget"]),Zd.default.createElement(Vi,{style:{minWidth:"600px"}},Zd.default.createElement("div",{id:"tree_container"})));function M2e(e,t,n){A2e.default.render(vPt(e),t,n)}function vPt(e){let t=new Br;return Zd.default.createElement(Fr,{colorMode:"light"},Zd.default.createElement(Hr,{client:t},Zd.default.createElement(wM,{ontologyId:e.ontologyId,api:e.api,iri:e.iri,entityType:e.entityType,onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology})))}var gu=P(L(),1);var Tl=P(L(),1);var pl=P(L(),1);var T2e=e=>fetch(e,{method:"GET",headers:{Accept:"application/json","Content-Type":"application/json"}}).then(t=>t.json()).catch(t=>[]),yPt=e=>e.substr(0,5)==="http:"?e.replace("http","https"):e,RY=e=>e===void 0?"":yPt(e.substring(0,e.search("/terms")+7));var R2e=P(xo(),1),OM=class{url;iri;label;id;isExpanded=!0;children=[];icon=pl.default.createElement(pl.default.Fragment,null,"+");iconWhenExpanded=pl.default.createElement(pl.default.Fragment,null,"-");constructor(t,n,r,o){this.label=t,this.id=n,this.iri=o,this.url=r}setchild(t){this.children.push(t),this.children.length>0&&(this.icon=pl.default.createElement(pl.default.Fragment,null,"+"))}is_root(){return this.id==="#"}to_string(){return this.label+"[ "+this.children.map(t=>t.to_string())+" ]"}callback(){if(this.isExpanded)return"";let t=this.url+encodeURIComponent(encodeURIComponent(this.iri))+"/jstree/children/"+this.id;return T2e(t).then(n=>{this.children=[],xM(this,n,this.url)}),""}},xM=(e,t,n)=>{t.filter(r=>r.parent===e.id).forEach(r=>{e.setchild(new OM(r.text,r.id,n,r.iri))}),e.children.map(r=>xM(r,t,n))};async function bPt(e,t,n){let r=await e.getTermTree({ontologyId:t,termIri:n},{viewMode:"All",siblings:!1},void 0,void 0).catch(o=>console.log(o));return n?r:r._embedded.terms.map((o,i)=>({id:(++i).toString(),parent:"#",iri:o.iri,text:o.label,children:o.has_children}))}var _M=e=>{let{iri:t,ontologyId:n,api:r}=e,[o,i]=(0,pl.useState)(),u=new un(r),f=r+"ontologies/"+n+"/terms/",h=async y=>{let O=await u.getTermTree({ontologyId:n,termIri:t},{child:y.id},void 0,void 0).catch(S=>console.log(S));y.children=[],xM(y,O,RY(f))};return on([r,"getTermTree",n,t],()=>bPt(u,n,t).then(y=>{let O=new OM("#","#","","");return y&&xM(O,y,RY(f)),i(O.children),y})),pl.default.createElement(Vi,null,o&&pl.default.createElement(F_,{expandByDefault:!0,"aria-label":"HierarchyTab",items:o}))};function z2e(e,t,n){R2e.default.render(wPt(e),t,n)}function wPt(e){let t=new Br;return pl.default.createElement(Fr,{colorMode:"light"},pl.default.createElement(Hr,{client:t},pl.default.createElement(_M,{ontologyId:e.ontologyId,api:e.api,iri:e.iri})))}function SM(e){function t(n){return Tl.default.createElement(Tl.default.Fragment,null,Tl.default.createElement(kt,null,Tl.default.createElement(cy,{size:"s",tabs:[{content:Tl.default.createElement(yM,{synonyms:n.getSynonyms().map(r=>r.value)}),id:"tab1",name:"Alternative Names"},{content:Tl.default.createElement(Tl.default.Fragment,null,e.useLegacy==null||e.useLegacy?Tl.default.createElement(_M,{ontologyId:e.ontologyId||(n&&n.getOntologyId()!==void 0?n.getOntologyId():""),api:e.api,iri:e.iri}):Tl.default.createElement(wM,{api:e.api,iri:e.iri,ontologyId:e.ontologyId||(n&&n.getOntologyId()!==void 0?n.getOntologyId():""),entityType:e.entityType})),id:"tab2",name:"Hierarchy"},{content:Tl.default.createElement(bM,{crossrefs:Rt.fromJson(n.getCrossReferences()).map(r=>r.value)}),id:"tab3",name:"Cross references"}]})))}return Tl.default.createElement(Tl.default.Fragment,null,us(e.data)||gd(e.data)||Kg(e.data)?t(e.data):null)}var L2e=P(xo(),1);function D2e(e){let{iri:t,api:n,ontologyId:r,entityType:o,parameter:i,useLegacy:u,...f}=e,h=new un(n),{data:y,isLoading:O,isSuccess:S,isError:I,error:A}=on(["tabdata",n,i,o,t,r,u],async()=>h.getEntityObject(t,o,r,i,u));function C(M){return gu.default.createElement(SM,{...f,data:M,iri:t,api:n,useLegacy:u,entityType:M.getType()})}return gu.default.createElement(gu.default.Fragment,null,O&&gu.default.createElement($r,null),I&&gu.default.createElement(fr,null,Vo(A,"description")),S&&y&&gu.default.createElement(gu.default.Fragment,null,us(y)?C(y):null))}function N2e(e,t,n){L2e.default.render(OPt(e),t,n)}function OPt(e){let t=new Br;return gu.default.createElement(Fr,{colorMode:"light"},gu.default.createElement(Hr,{client:t},gu.default.createElement(D2e,{iri:e.iri,api:e.api,ontologyId:e.ontologyId,entityType:e.entityType,parameter:e.parameter,useLegacy:e.useLegacy})))}var Np=P(L(),1);var F2e=P(L(),1);function jM(e){return F2e.default.createElement(fr,null,e.titleText||e.title)}var W2e=P(xo(),1),xPt="No title available.";function zY(e){let{iri:t,ontologyId:n,api:r,titleText:o,thingType:i,parameter:u,useLegacy:f,default_value:h}=e,y=new un(r),{data:O,isLoading:S,isSuccess:I,isError:A,error:C}=on(["metadata",r,u,i,t,n,f],async()=>y.getThingObject(t,i,n,u,f));return Np.default.createElement(Np.default.Fragment,null,S&&Np.default.createElement($r,{size:"s"}),I&&O&&Np.default.createElement(jM,{title:o||(Xie(O)?O.getName():O.getLabel())||h||xPt}),A&&Np.default.createElement(fr,null,Vo(C,"title")))}function B2e(e,t,n){W2e.default.render(_Pt(e),t,n)}function _Pt(e){let t=new Br;return Np.default.createElement(Fr,{colorMode:"light"},Np.default.createElement(Hr,{client:t},Np.default.createElement(zY,{api:e.api,thingType:e.thingType,iri:e.iri,ontologyId:e.ontologyId,titleText:e.titleText,parameter:e.parameter,useLegacy:e.useLegacy,default_value:e.default_value})))}var Ln=P(L(),1);var H2e=P(xo(),1);function V2e(e){let{iri:t,api:n,ontologyId:r,entityType:o,parameter:i,useLegacy:u}=e,f=new un(n),{data:h,isLoading:y,isSuccess:O,isError:S,error:I}=on(["metadata",n,i,o,t,r,u],async()=>f.getEntityObject(t,o,r,i,u));function A(C){return Ln.default.createElement(Ln.default.Fragment,null,Ln.default.createElement(eo,{direction:"column",style:{maxWidth:600}},Ln.default.createElement(kt,{grow:!1},Ln.default.createElement("span",null,Ln.default.createElement(vM,{isDefiningOntology:C.getIsDefiningOntology(),ontologyName:C.getOntologyId(),shortForm:C.getShortForm()}))),Ln.default.createElement(kt,null,Ln.default.createElement(eo,{direction:"column"},Ln.default.createElement(kt,null,Ln.default.createElement(eo,null,Ln.default.createElement(kt,{grow:!1},Ln.default.createElement(Ey,{iri:t,parameter:i})))),Ln.default.createElement(kt,{grow:!1},Ln.default.createElement(jM,{title:C.getLabel()})))),Ln.default.createElement(kt,null,Ln.default.createElement(hM,{description:C.getDescription()})),Ln.default.createElement(kt,null,Ln.default.createElement("div",{style:{maxHeight:"500px",overflow:"auto"}},Ln.default.createElement(SM,{data:C,iri:t,entityType:e.entityType,api:n,ontologyId:e.ontologyId?e.ontologyId:C.getOntologyId(),useLegacy:u})))))}return Ln.default.createElement(Ln.default.Fragment,null,y&&Ln.default.createElement($r,null),S&&Ln.default.createElement(fr,null,Vo(I,"metadata")),O&&h&&Ln.default.createElement(Ln.default.Fragment,null,us(h)?A(h):null))}function q2e(e,t,n){H2e.default.render(SPt(e),t,n)}function SPt(e){let t=new Br;return Ln.default.createElement(Fr,{colorMode:"light"},Ln.default.createElement(Hr,{client:t},Ln.default.createElement(V2e,{iri:e.iri,ontologyId:e.ontologyId,api:e.api,entityType:e.entityType,parameter:e.parameter,useLegacy:e.useLegacy})))}function IM(e){let{api:t,parameter:n,hasShortSelectedLabel:r,allowCustomTerms:o,selectionChangedEvent:i,preselected:u,placeholder:f,singleSelection:h,...y}=e,O=new un(t),S=Op(),I=pv(),[A,C]=(0,Vn.useState)(""),[M,W]=(0,Vn.useState)([]),[R,B]=(0,Vn.useState)([]),Y=(se,Se)=>{let{label:Oe,value:be}=se;if(o&&be.iri=="")return Oe;{let Ue="";be.type==="class"?Ue=I[5]:be.type==="individual"?Ue=I[3]:be.type==="property"&&(Ue=I[1]);let We=S[I.indexOf(Ue)];return be.description!=null?be.type==="ontology"?Vn.default.createElement(um,{title:"type: "+be.type+` + `),iwe)),cwe=twe.forwardRef(function(s,p){let d=Vs({props:s,name:"MuiCircularProgress"}),{className:w,color:_="primary",disableShrink:E=!1,size:T=40,style:z,thickness:V=3.6,value:H=0,variant:G="indeterminate"}=d,ee=Nn(d,nwe),ne=K({},d,{color:_,disableShrink:E,size:T,thickness:V,value:H,variant:G}),ie=awe(ne),oe={},ce={},me={};if(G==="determinate"){let ae=2*Math.PI*((_f-V)/2);oe.strokeDasharray=ae.toFixed(3),me["aria-valuenow"]=Math.round(H),oe.strokeDashoffset=`${((100-H)/100*ae).toFixed(3)}px`,ce.transform="rotate(-90deg)"}return(0,dT.jsx)(lwe,K({className:Wo(ie.root,w),style:K({width:T,height:T},ce,z),ownerState:ne,ref:p,role:"progressbar"},me,ee,{children:(0,dT.jsx)(swe,{className:ie.svg,ownerState:ne,viewBox:`${_f/2} ${_f/2} ${_f} ${_f}`,children:(0,dT.jsx)(uwe,{className:ie.circle,style:oe,ownerState:ne,cx:_f,cy:_f,r:(_f-V)/2,fill:"none",strokeWidth:V})})}))}),pwe=cwe;de();var e1=O(C());function fwe(s){return Gl("MuiFormControl",s)}var vEt=Bs("MuiFormControl",["root","marginNone","marginNormal","marginDense","fullWidth","disabled"]),eZ=O(Xr()),dwe=["children","className","color","component","disabled","error","focused","fullWidth","hiddenLabel","margin","required","size","variant"],mwe=s=>{let{classes:p,margin:d,fullWidth:w}=s,_={root:["root",d!=="none"&&`margin${xo(d)}`,w&&"fullWidth"]};return Hs(_,fwe,p)},hwe=Zo("div",{name:"MuiFormControl",slot:"Root",overridesResolver:({ownerState:s},p)=>K({},p.root,p[`margin${xo(s.margin)}`],s.fullWidth&&p.fullWidth)})(({ownerState:s})=>K({display:"inline-flex",flexDirection:"column",position:"relative",minWidth:0,padding:0,margin:0,border:0,verticalAlign:"top"},s.margin==="normal"&&{marginTop:16,marginBottom:8},s.margin==="dense"&&{marginTop:8,marginBottom:4},s.fullWidth&&{width:"100%"})),gwe=e1.forwardRef(function(s,p){let d=Vs({props:s,name:"MuiFormControl"}),{children:w,className:_,color:E="primary",component:T="div",disabled:z=!1,error:V=!1,focused:H,fullWidth:G=!1,hiddenLabel:ee=!1,margin:ne="none",required:ie=!1,size:oe="medium",variant:ce="outlined"}=d,me=Nn(d,dwe),ae=K({},d,{color:E,component:T,disabled:z,error:V,fullWidth:G,hiddenLabel:ee,margin:ne,required:ie,size:oe,variant:ce}),Te=mwe(ae),[Ne,je]=e1.useState(()=>{let Je=!1;return w&&e1.Children.forEach(w,tt=>{if(!rT(tt,["Input","Select"]))return;let vt=rT(tt,["Select"])?tt.props.input:tt;vt&&E6e(vt.props)&&(Je=!0)}),Je}),[ke,we]=e1.useState(()=>{let Je=!1;return w&&e1.Children.forEach(w,tt=>{rT(tt,["Input","Select"])&&(GQ(tt.props,!0)||GQ(tt.props.inputProps,!0))&&(Je=!0)}),Je}),[Ae,ue]=e1.useState(!1);z&&Ae&&ue(!1);let Se=H!==void 0&&!z?H:Ae,ze,We=e1.useMemo(()=>({adornedStart:Ne,setAdornedStart:je,color:E,disabled:z,error:V,filled:ke,focused:Se,fullWidth:G,hiddenLabel:ee,size:oe,onBlur:()=>{ue(!1)},onEmpty:()=>{we(!1)},onFilled:()=>{we(!0)},onFocus:()=>{ue(!0)},registerEffect:ze,required:ie,variant:ce}),[Ne,E,z,V,ke,Se,G,ee,ze,ie,oe,ce]);return(0,eZ.jsx)($Q.Provider,{value:We,children:(0,eZ.jsx)(hwe,K({as:T,ownerState:ae,className:Wo(Te.root,_),ref:p},me,{children:w}))})}),vwe=gwe;de();var tZ=O(C()),ywe=Z5e({createStyledComponent:Zo("div",{name:"MuiStack",slot:"Root",overridesResolver:(s,p)=>p.root}),useThemeProps:s=>Vs({props:s,name:"MuiStack"})}),bwe=ywe;function wwe(s){return Gl("MuiFormControlLabel",s)}var Owe=Bs("MuiFormControlLabel",["root","labelPlacementStart","labelPlacementTop","labelPlacementBottom","disabled","label","error","required","asterisk"]),_2=Owe,xwe=O(Xr()),mT=O(Xr()),_we=["checked","className","componentsProps","control","disabled","disableTypography","inputRef","label","labelPlacement","name","onChange","required","slotProps","value"],Swe=s=>{let{classes:p,disabled:d,labelPlacement:w,error:_,required:E}=s,T={root:["root",d&&"disabled",`labelPlacement${xo(w)}`,_&&"error",E&&"required"],label:["label",d&&"disabled"],asterisk:["asterisk",_&&"error"]};return Hs(T,wwe,p)},jwe=Zo("label",{name:"MuiFormControlLabel",slot:"Root",overridesResolver:(s,p)=>{let{ownerState:d}=s;return[{[`& .${_2.label}`]:p.label},p.root,p[`labelPlacement${xo(d.labelPlacement)}`]]}})(({theme:s,ownerState:p})=>K({display:"inline-flex",alignItems:"center",cursor:"pointer",verticalAlign:"middle",WebkitTapHighlightColor:"transparent",marginLeft:-11,marginRight:16,[`&.${_2.disabled}`]:{cursor:"default"}},p.labelPlacement==="start"&&{flexDirection:"row-reverse",marginLeft:16,marginRight:-11},p.labelPlacement==="top"&&{flexDirection:"column-reverse",marginLeft:16},p.labelPlacement==="bottom"&&{flexDirection:"column",marginLeft:16},{[`& .${_2.label}`]:{[`&.${_2.disabled}`]:{color:(s.vars||s).palette.text.disabled}}})),Iwe=Zo("span",{name:"MuiFormControlLabel",slot:"Asterisk",overridesResolver:(s,p)=>p.asterisk})(({theme:s})=>({[`&.${_2.error}`]:{color:(s.vars||s).palette.error.main}})),Pwe=tZ.forwardRef(function(s,p){var d,w;let _=Vs({props:s,name:"MuiFormControlLabel"}),{className:E,componentsProps:T={},control:z,disabled:V,disableTypography:H,label:G,labelPlacement:ee="end",required:ne,slotProps:ie={}}=_,oe=Nn(_,_we),ce=uT(),me=(d=V??z.props.disabled)!=null?d:ce?.disabled,ae=ne??z.props.required,Te={disabled:me,required:ae};["checked","name","onChange","value","inputRef"].forEach(ue=>{typeof z.props[ue]>"u"&&typeof _[ue]<"u"&&(Te[ue]=_[ue])});let Ne=UQ({props:_,muiFormControl:ce,states:["error"]}),je=K({},_,{disabled:me,labelPlacement:ee,required:ae,error:Ne.error}),ke=Swe(je),we=(w=ie.typography)!=null?w:T.typography,Ae=G;return Ae!=null&&Ae.type!==qQ&&!H&&(Ae=(0,xwe.jsx)(qQ,K({component:"span"},we,{className:Wo(ke.label,we?.className),children:Ae}))),(0,mT.jsxs)(jwe,K({className:Wo(ke.root,E),ownerState:je,ref:p},oe,{children:[tZ.cloneElement(z,Te),ae?(0,mT.jsxs)(bwe,{display:"block",children:[Ae,(0,mT.jsxs)(Iwe,{ownerState:je,"aria-hidden":!0,className:ke.asterisk,children:["\u2009","*"]})]}):Ae]}))}),S2=Pwe;de();var kwe=O(C());function Ewe(s){return Gl("MuiFormGroup",s)}var yEt=Bs("MuiFormGroup",["root","row","error"]),Cwe=O(Xr()),Awe=["className","row"],Mwe=s=>{let{classes:p,row:d,error:w}=s;return Hs({root:["root",d&&"row",w&&"error"]},Ewe,p)},Twe=Zo("div",{name:"MuiFormGroup",slot:"Root",overridesResolver:(s,p)=>{let{ownerState:d}=s;return[p.root,d.row&&p.row]}})(({ownerState:s})=>K({display:"flex",flexDirection:"column",flexWrap:"wrap"},s.row&&{flexDirection:"row"})),Rwe=kwe.forwardRef(function(s,p){let d=Vs({props:s,name:"MuiFormGroup"}),{className:w,row:_=!1}=d,E=Nn(d,Awe),T=uT(),z=UQ({props:d,muiFormControl:T,states:["error"]}),V=K({},d,{row:_,error:z.error}),H=Mwe(V);return(0,Cwe.jsx)(Twe,K({className:Wo(H.root,w),ownerState:V,ref:p},E))}),zwe=Rwe;de();var hT=O(C()),Lwe=O(P0());de();var bEt=O(C()),wEt=O(C()),Dwe=O(Xr()),Nwe=O2((0,Dwe.jsx)("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"}),"RadioButtonUnchecked"),OEt=O(C()),Fwe=O(Xr()),Wwe=O2((0,Fwe.jsx)("path",{d:"M8.465 8.465C9.37 7.56 10.62 7 12 7C14.76 7 17 9.24 17 12C17 13.38 16.44 14.63 15.535 15.535C14.63 16.44 13.38 17 12 17C9.24 17 7 14.76 7 12C7 10.62 7.56 9.37 8.465 8.465Z"}),"RadioButtonChecked"),rZ=O(Xr()),Bwe=O(Xr()),Hwe=Zo("span",{shouldForwardProp:w2})({position:"relative",display:"flex"}),Vwe=Zo(Nwe)({transform:"scale(1)"}),qwe=Zo(Wwe)(({theme:s,ownerState:p})=>K({left:0,position:"absolute",transform:"scale(0)",transition:s.transitions.create("transform",{easing:s.transitions.easing.easeIn,duration:s.transitions.duration.shortest})},p.checked&&{transform:"scale(1)",transition:s.transitions.create("transform",{easing:s.transitions.easing.easeOut,duration:s.transitions.duration.shortest})}));function Uwe(s){let{checked:p=!1,classes:d={},fontSize:w}=s,_=K({},s,{checked:p});return(0,Bwe.jsxs)(Hwe,{className:d.root,ownerState:_,children:[(0,rZ.jsx)(Vwe,{fontSize:w,className:d.background,ownerState:_}),(0,rZ.jsx)(qwe,{fontSize:w,className:d.dot,ownerState:_})]})}var nZ=Uwe,$we=O(C()),Jwe=O(C()),Gwe=Jwe.createContext(void 0),oZ=Gwe;function Xwe(){return $we.useContext(oZ)}function Kwe(s){return Gl("MuiRadio",s)}var Ywe=Bs("MuiRadio",["root","checked","disabled","colorPrimary","colorSecondary","sizeSmall"]),iZ=Ywe,gT=O(Xr()),Qwe=["checked","checkedIcon","color","icon","name","onChange","size","className"],Zwe=s=>{let{classes:p,color:d,size:w}=s,_={root:["root",`color${xo(d)}`,w!=="medium"&&`size${xo(w)}`]};return K({},p,Hs(_,Kwe,p))},eOe=Zo(XQ,{shouldForwardProp:s=>w2(s)||s==="classes",name:"MuiRadio",slot:"Root",overridesResolver:(s,p)=>{let{ownerState:d}=s;return[p.root,d.size!=="medium"&&p[`size${xo(d.size)}`],p[`color${xo(d.color)}`]]}})(({theme:s,ownerState:p})=>K({color:(s.vars||s).palette.text.secondary},!p.disableRipple&&{"&:hover":{backgroundColor:s.vars?`rgba(${p.color==="default"?s.vars.palette.action.activeChannel:s.vars.palette[p.color].mainChannel} / ${s.vars.palette.action.hoverOpacity})`:(0,Lwe.alpha)(p.color==="default"?s.palette.action.active:s.palette[p.color].main,s.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:"transparent"}}},p.color!=="default"&&{[`&.${iZ.checked}`]:{color:(s.vars||s).palette[p.color].main}},{[`&.${iZ.disabled}`]:{color:(s.vars||s).palette.action.disabled}}));function tOe(s,p){return typeof p=="object"&&p!==null?s===p:String(s)===String(p)}var aZ=(0,gT.jsx)(nZ,{checked:!0}),lZ=(0,gT.jsx)(nZ,{}),rOe=hT.forwardRef(function(s,p){var d,w;let _=Vs({props:s,name:"MuiRadio"}),{checked:E,checkedIcon:T=aZ,color:z="primary",icon:V=lZ,name:H,onChange:G,size:ee="medium",className:ne}=_,ie=Nn(_,Qwe),oe=K({},_,{color:z,size:ee}),ce=Zwe(oe),me=Xwe(),ae=E,Te=C4e(G,me&&me.onChange),Ne=H;return me&&(typeof ae>"u"&&(ae=tOe(me.value,_.value)),typeof Ne>"u"&&(Ne=me.name)),(0,gT.jsx)(eOe,K({type:"radio",icon:hT.cloneElement(V,{fontSize:(d=lZ.props.fontSize)!=null?d:ee}),checkedIcon:hT.cloneElement(T,{fontSize:(w=aZ.props.fontSize)!=null?w:ee}),ownerState:oe,classes:ce,name:Ne,checked:ae,onChange:Te,ref:p,className:Wo(ce.root,ne)},ie))}),sZ=rOe;de();var zS=O(C()),uZ=O(Xr()),nOe=["actions","children","defaultValue","name","onChange","value"],oOe=zS.forwardRef(function(s,p){let{actions:d,children:w,defaultValue:_,name:E,onChange:T,value:z}=s,V=Nn(s,nOe),H=zS.useRef(null),[G,ee]=zQ({controlled:z,default:_,name:"RadioGroup"});zS.useImperativeHandle(d,()=>({focus:()=>{let ce=H.current.querySelector("input:not(:disabled):checked");ce||(ce=H.current.querySelector("input:not(:disabled)")),ce&&ce.focus()}}),[]);let ne=nT(p,H),ie=N4e(E),oe=zS.useMemo(()=>({name:ie,onChange(ce){ee(ce.target.value),T&&T(ce,ce.target.value)},value:G}),[ie,T,ee,G]);return(0,uZ.jsx)(oZ.Provider,{value:oe,children:(0,uZ.jsx)(zwe,K({role:"radiogroup",ref:ne},V,{children:w}))})}),iOe=oOe,Sf=O(C()),aOe=kQ({palette:{primary:{main:"#00827c"}}}),vT=O(Xr());function lOe({expandable:s,expanded:p,highlight:d,isLast:w,children:_,onClick:E}){let T=["jstree-node"];return p?T.push("jstree-open"):T.push("jstree-closed"),s||T.push("jstree-leaf"),w&&T.push("jstree-last"),d&&(_=(0,vT.jsx)("span",{className:"jstree-clicked",children:_})),(0,vT.jsxs)("li",{role:"treeitem",className:T.join(" "),children:[(0,vT.jsx)("i",{className:"jstree-icon jstree-ocl",role:"presentation",onClick:E}),_]})}var Bn=O(Xr());function sOe({ontology:s,entityType:p,selectedEntity:d,lang:w,onNavigateToEntity:_,onNavigateToOntology:E,apiUrl:T}){let z=Ts(),V=Yo(Ae=>Ae.ontologies.nodesWithChildrenLoaded),H=Yo(Ae=>Ae.ontologies.nodeChildren),G=Yo(Ae=>Ae.ontologies.rootNodes),ee=Yo(Ae=>Ae.ontologies.numPendingTreeRequests),ne=Yo(Ae=>Ae.ontologies.preferredRoots),ie=Yo(Ae=>Ae.ontologies.automaticallyExpandedNodes),oe=Yo(Ae=>Ae.ontologies.manuallyExpandedNodes),ce=d?d.isDeprecated():Yo(Ae=>Ae.ontologies.displayObsolete),me=Yo(Ae=>Ae.ontologies.displaySiblings),ae=Yo(Ae=>Ae.ontologies.displayCounts),Te=(0,Sf.useCallback)(Ae=>{let ue=oe.indexOf(Ae.absoluteIdentity)!==-1||ie.indexOf(Ae.absoluteIdentity)!==-1;z(ue?$Y(Ae):UY(Ae))},[z,JSON.stringify(ie),JSON.stringify(oe)]);(0,Sf.useEffect)(()=>{z(HY({entityType:p,selectedEntity:d}))},[z,s.getOntologyId(),p,d?.getIri()]),(0,Sf.useEffect)(()=>{z(BY())},[z,s.getOntologyId(),p,JSON.stringify(d),ce,ne,w]),(0,Sf.useEffect)(()=>{if(d){let Ae=d.getIri(),ue=z(vS({ontologyId:s.getOntologyId(),entityType:d.getTypePlural(),entityIri:Ae,lang:w,showObsoleteEnabled:ce,showSiblingsEnabled:me,apiUrl:T}));return()=>ue.abort()}else{let Ae=z(yS({ontologyId:s.getOntologyId(),entityType:p,preferredRoots:ne,lang:w,showObsoleteEnabled:ce,apiUrl:T}));return()=>Ae.abort()}},[z,p,JSON.stringify(d),s.getOntologyId(),ne,w,ce]),(0,Sf.useEffect)(()=>{let Ae=oe.filter(Se=>V.indexOf(Se)===-1);me&&(Ae=[...Ae,...ie.filter(Se=>V.indexOf(Se)===-1)]);let ue=[];for(let Se of Ae)ue.push(z(bS({ontologyId:s.getOntologyId(),entityTypePlural:d?.getTypePlural()||p,entityIri:Se.split(";").pop(),absoluteIdentity:Se,lang:w,showObsoleteEnabled:ce,apiUrl:T})));return()=>{for(let Se of ue)Se.abort()}},[z,w,JSON.stringify(oe),JSON.stringify(ie),JSON.stringify(H),s.getOntologyId(),p,ne,ce,me]);let Ne=(0,Sf.useCallback)(()=>{z(ce?GY():JY())},[z,ce]),je=(0,Sf.useCallback)(()=>{z(me?KY():XY())},[z,me]),ke=(0,Sf.useCallback)(()=>{z(ae?QY():YY())},[z,ae]);function we(Ae,ue){if(ue>100)throw new Error("probable cyclic tree (renderNodeChildren)");let Se=[...Ae];Se.sort((We,Je)=>{let tt=We?.title?We.title.toString().toUpperCase():"",vt=Je?.title?Je.title.toString().toUpperCase():"";return tt===vt?0:tt>vt?1:-1});let ze=Se.filter((We,Je,tt)=>!Je||We.absoluteIdentity!==tt[Je-1].absoluteIdentity);return(0,Bn.jsx)("ul",{role:"group",className:"jstree-container-ul jstree-children jstree-no-icons",children:ze.map((We,Je)=>{let tt=oe.indexOf(We.absoluteIdentity)!==-1||ie.indexOf(We.absoluteIdentity)!==-1,vt=Je===ze.length-1,qt=d&&We.iri===d.getIri()||!1;return(0,Bn.jsxs)(lOe,{expandable:We.expandable,expanded:tt,highlight:qt,isLast:vt,onClick:()=>{Te(We)},children:[We.childRelationToParent==="http://purl.obolibrary.org/obo/BFO_0000050"&&(0,Bn.jsx)("img",{className:"mr-1",src:Io("/","/part.svg"),style:{height:"1em",display:"inline"}}),We.childRelationToParent==="http://www.w3.org/1999/02/22-rdf-syntax-ns#type"&&(0,Bn.jsx)("img",{className:"mr-1",src:Io("/","/instance.svg"),style:{height:"1em",display:"inline"}}),(0,Bn.jsx)(uOe,{ontology:s,entity:We.entity,title:We.title,lang:w,onNavigateToEntity:_,onNavigateToOntology:E}),!ce&&ae&&We.numDescendants>0&&(0,Bn.jsx)("span",{style:{color:"gray"},children:" ("+We.numDescendants.toLocaleString()+")"}),tt&&we(H[We.absoluteIdentity]||[],ue+1)]},Bu())})})}return(0,Bn.jsx)(Cs,{theme:aOe,children:(0,Bn.jsxs)("div",{className:"flex flex-col-reverse lg:grid lg:grid-cols-3 lg:gap-4",children:[G?(0,Bn.jsxs)("div",{className:"lg:col-span-2 relative",children:[(0,Bn.jsx)("div",{className:"px-3 pb-3 jstree jstree-1 jstree-proton overflow-x-auto",role:"tree",children:we(G,0)}),ee>0?(0,Bn.jsx)("div",{className:"absolute spinner-default w-7 h-7 -top-1 -left-4 z-auto"}):null]}):null,(0,Bn.jsxs)("div",{className:"lg:col-span-1 flex flex-col bg-white px-2 mb-2 rounded-lg",children:[p==="classes"&&s.getPreferredRoots().length>0&&(0,Bn.jsx)("div",{className:"mb-2",children:(0,Bn.jsx)(vwe,{children:(0,Bn.jsxs)(iOe,{name:"radio-buttons-group",value:ne?"true":"false",children:[(0,Bn.jsx)(S2,{value:"true",onClick:()=>z(VY()),control:(0,Bn.jsx)(sZ,{}),label:"Preferred roots"}),(0,Bn.jsx)(S2,{value:"false",onClick:()=>z(qY()),control:(0,Bn.jsx)(sZ,{}),label:"All classes"})]})})}),(0,Bn.jsx)(S2,{control:(0,Bn.jsx)(fT,{disabled:ce,checked:!ce&&ae,onClick:ke}),label:"Show counts"}),(0,Bn.jsx)(S2,{control:(0,Bn.jsx)(fT,{checked:ce,onClick:Ne}),label:"Show obsolete terms"}),d&&(0,Bn.jsx)(S2,{control:(0,Bn.jsx)(fT,{checked:me,onClick:je}),label:"Show all siblings"})]})]})})}function uOe({ontology:s,entity:p,title:d,lang:w,onNavigateToEntity:_,onNavigateToOntology:E}){let T=p.getDefinedBy();return T.indexOf(s.getOntologyId())!==-1&&(T=[]),(0,Bn.jsxs)("span",{children:[(0,Bn.jsx)("a",{title:p.getIri(),className:"link-default",onClick:()=>_(s,p),children:d}),T.length>0&&T.map(z=>(0,Bn.jsx)("span",{onClick:()=>E(z,p),title:z.toUpperCase(),className:"mx-1 link-ontology px-2 py-0.5 rounded-md text-sm text-white uppercase ml-1",children:z}))]})}var LS=function(){function s(){this.listeners=[]}var p=s.prototype;return p.subscribe=function(d){var w=this,_=d||function(){};return this.listeners.push(_),this.onSubscribe(),function(){w.listeners=w.listeners.filter(function(E){return E!==_}),w.onUnsubscribe()}},p.hasListeners=function(){return this.listeners.length>0},p.onSubscribe=function(){},p.onUnsubscribe=function(){},s}();de();var cZ=typeof window>"u";function ja(){}function cOe(s,p){return typeof s=="function"?s(p):s}function pOe(s){return typeof s=="number"&&s>=0&&s!==1/0}function DS(s){return Array.isArray(s)?s:[s]}function fOe(s,p){return Math.max(s+(p||0)-Date.now(),0)}function yT(s,p,d){return FS(s)?typeof p=="function"?K({},d,{queryKey:s,queryFn:p}):K({},p,{queryKey:s}):s}function jf(s,p,d){return FS(s)?[K({},p,{queryKey:s}),d]:[s||{},p]}function dOe(s,p){if(s===!0&&p===!0||s==null&&p==null)return"all";if(s===!1&&p===!1)return"none";var d=s??!p;return d?"active":"inactive"}function pZ(s,p){var d=s.active,w=s.exact,_=s.fetching,E=s.inactive,T=s.predicate,z=s.queryKey,V=s.stale;if(FS(z)){if(w){if(p.queryHash!==bT(z,p.options))return!1}else if(!NS(p.queryKey,z))return!1}var H=dOe(d,E);if(H==="none")return!1;if(H!=="all"){var G=p.isActive();if(H==="active"&&!G||H==="inactive"&&G)return!1}return!(typeof V=="boolean"&&p.isStale()!==V||typeof _=="boolean"&&p.isFetching()!==_||T&&!T(p))}function fZ(s,p){var d=s.exact,w=s.fetching,_=s.predicate,E=s.mutationKey;if(FS(E)){if(!p.options.mutationKey)return!1;if(d){if(t1(p.options.mutationKey)!==t1(E))return!1}else if(!NS(p.options.mutationKey,E))return!1}return!(typeof w=="boolean"&&p.state.status==="loading"!==w||_&&!_(p))}function bT(s,p){var d=p?.queryKeyHashFn||t1;return d(s)}function t1(s){var p=DS(s);return mOe(p)}function mOe(s){return JSON.stringify(s,function(p,d){return wT(d)?Object.keys(d).sort().reduce(function(w,_){return w[_]=d[_],w},{}):d})}function NS(s,p){return dZ(DS(s),DS(p))}function dZ(s,p){return s===p?!0:typeof s!=typeof p?!1:s&&p&&typeof s=="object"&&typeof p=="object"?!Object.keys(p).some(function(d){return!dZ(s[d],p[d])}):!1}function mZ(s,p){if(s===p)return s;var d=Array.isArray(s)&&Array.isArray(p);if(d||wT(s)&&wT(p)){for(var w=d?s.length:Object.keys(s).length,_=d?p:Object.keys(p),E=_.length,T=d?[]:{},z=0,V=0;V"u")return!0;var d=p.prototype;return!(!hZ(d)||!d.hasOwnProperty("isPrototypeOf"))}function hZ(s){return Object.prototype.toString.call(s)==="[object Object]"}function FS(s){return typeof s=="string"||Array.isArray(s)}function hOe(s){return new Promise(function(p){setTimeout(p,s)})}function gZ(s){Promise.resolve().then(s).catch(function(p){return setTimeout(function(){throw p})})}function vZ(){if(typeof AbortController=="function")return new AbortController}var gOe=function(s){x2(p,s);function p(){var w;return w=s.call(this)||this,w.setup=function(_){var E;if(!cZ&&(E=window)!=null&&E.addEventListener){var T=function(){return _()};return window.addEventListener("visibilitychange",T,!1),window.addEventListener("focus",T,!1),function(){window.removeEventListener("visibilitychange",T),window.removeEventListener("focus",T)}}},w}var d=p.prototype;return d.onSubscribe=function(){this.cleanup||this.setEventListener(this.setup)},d.onUnsubscribe=function(){if(!this.hasListeners()){var w;(w=this.cleanup)==null||w.call(this),this.cleanup=void 0}},d.setEventListener=function(w){var _,E=this;this.setup=w,(_=this.cleanup)==null||_.call(this),this.cleanup=w(function(T){typeof T=="boolean"?E.setFocused(T):E.onFocus()})},d.setFocused=function(w){this.focused=w,w&&this.onFocus()},d.onFocus=function(){this.listeners.forEach(function(w){w()})},d.isFocused=function(){return typeof this.focused=="boolean"?this.focused:typeof document>"u"?!0:[void 0,"visible","prerender"].includes(document.visibilityState)},p}(LS),WS=new gOe,vOe=function(s){x2(p,s);function p(){var w;return w=s.call(this)||this,w.setup=function(_){var E;if(!cZ&&(E=window)!=null&&E.addEventListener){var T=function(){return _()};return window.addEventListener("online",T,!1),window.addEventListener("offline",T,!1),function(){window.removeEventListener("online",T),window.removeEventListener("offline",T)}}},w}var d=p.prototype;return d.onSubscribe=function(){this.cleanup||this.setEventListener(this.setup)},d.onUnsubscribe=function(){if(!this.hasListeners()){var w;(w=this.cleanup)==null||w.call(this),this.cleanup=void 0}},d.setEventListener=function(w){var _,E=this;this.setup=w,(_=this.cleanup)==null||_.call(this),this.cleanup=w(function(T){typeof T=="boolean"?E.setOnline(T):E.onOnline()})},d.setOnline=function(w){this.online=w,w&&this.onOnline()},d.onOnline=function(){this.listeners.forEach(function(w){w()})},d.isOnline=function(){return typeof this.online=="boolean"?this.online:typeof navigator>"u"||typeof navigator.onLine>"u"?!0:navigator.onLine},p}(LS),BS=new vOe;function yOe(s){return Math.min(1e3*Math.pow(2,s),3e4)}function HS(s){return typeof s?.cancel=="function"}var yZ=function(s){this.revert=s?.revert,this.silent=s?.silent};function OT(s){return s instanceof yZ}var bZ=function(s){var p=this,d=!1,w,_,E,T;this.abort=s.abort,this.cancel=function(ee){return w?.(ee)},this.cancelRetry=function(){d=!0},this.continueRetry=function(){d=!1},this.continue=function(){return _?.()},this.failureCount=0,this.isPaused=!1,this.isResolved=!1,this.isTransportCancelable=!1,this.promise=new Promise(function(ee,ne){E=ee,T=ne});var z=function(ee){p.isResolved||(p.isResolved=!0,s.onSuccess==null||s.onSuccess(ee),_?.(),E(ee))},V=function(ee){p.isResolved||(p.isResolved=!0,s.onError==null||s.onError(ee),_?.(),T(ee))},H=function(){return new Promise(function(ee){_=ee,p.isPaused=!0,s.onPause==null||s.onPause()}).then(function(){_=void 0,p.isPaused=!1,s.onContinue==null||s.onContinue()})},G=function ee(){if(!p.isResolved){var ne;try{ne=s.fn()}catch(ie){ne=Promise.reject(ie)}w=function(ie){if(!p.isResolved&&(V(new yZ(ie)),p.abort==null||p.abort(),HS(ne)))try{ne.cancel()}catch{}},p.isTransportCancelable=HS(ne),Promise.resolve(ne).then(z).catch(function(ie){var oe,ce;if(!p.isResolved){var me=(oe=s.retry)!=null?oe:3,ae=(ce=s.retryDelay)!=null?ce:yOe,Te=typeof ae=="function"?ae(p.failureCount,ie):ae,Ne=me===!0||typeof me=="number"&&p.failureCount"u"&&(T.exact=!0),this.queries.find(function(z){return pZ(T,z)})},d.findAll=function(w,_){var E=jf(w,_),T=E[0];return Object.keys(T).length>0?this.queries.filter(function(z){return pZ(T,z)}):this.queries},d.notify=function(w){var _=this;Mi.batch(function(){_.listeners.forEach(function(E){E(w)})})},d.onFocus=function(){var w=this;Mi.batch(function(){w.queries.forEach(function(_){_.onFocus()})})},d.onOnline=function(){var w=this;Mi.batch(function(){w.queries.forEach(function(_){_.onOnline()})})},p}(LS);de(),de();var _Oe=function(){function s(d){this.options=K({},d.defaultOptions,d.options),this.mutationId=d.mutationId,this.mutationCache=d.mutationCache,this.observers=[],this.state=d.state||SOe(),this.meta=d.meta}var p=s.prototype;return p.setState=function(d){this.dispatch({type:"setState",state:d})},p.addObserver=function(d){this.observers.indexOf(d)===-1&&this.observers.push(d)},p.removeObserver=function(d){this.observers=this.observers.filter(function(w){return w!==d})},p.cancel=function(){return this.retryer?(this.retryer.cancel(),this.retryer.promise.then(ja).catch(ja)):Promise.resolve()},p.continue=function(){return this.retryer?(this.retryer.continue(),this.retryer.promise):this.execute()},p.execute=function(){var d=this,w,_=this.state.status==="loading",E=Promise.resolve();return _||(this.dispatch({type:"loading",variables:this.options.variables}),E=E.then(function(){d.mutationCache.config.onMutate==null||d.mutationCache.config.onMutate(d.state.variables,d)}).then(function(){return d.options.onMutate==null?void 0:d.options.onMutate(d.state.variables)}).then(function(T){T!==d.state.context&&d.dispatch({type:"loading",context:T,variables:d.state.variables})})),E.then(function(){return d.executeMutation()}).then(function(T){w=T,d.mutationCache.config.onSuccess==null||d.mutationCache.config.onSuccess(w,d.state.variables,d.state.context,d)}).then(function(){return d.options.onSuccess==null?void 0:d.options.onSuccess(w,d.state.variables,d.state.context)}).then(function(){return d.options.onSettled==null?void 0:d.options.onSettled(w,null,d.state.variables,d.state.context)}).then(function(){return d.dispatch({type:"success",data:w}),w}).catch(function(T){return d.mutationCache.config.onError==null||d.mutationCache.config.onError(T,d.state.variables,d.state.context,d),OZ().error(T),Promise.resolve().then(function(){return d.options.onError==null?void 0:d.options.onError(T,d.state.variables,d.state.context)}).then(function(){return d.options.onSettled==null?void 0:d.options.onSettled(void 0,T,d.state.variables,d.state.context)}).then(function(){throw d.dispatch({type:"error",error:T}),T})})},p.executeMutation=function(){var d=this,w;return this.retryer=new bZ({fn:function(){return d.options.mutationFn?d.options.mutationFn(d.state.variables):Promise.reject("No mutationFn found")},onFail:function(){d.dispatch({type:"failed"})},onPause:function(){d.dispatch({type:"pause"})},onContinue:function(){d.dispatch({type:"continue"})},retry:(w=this.options.retry)!=null?w:0,retryDelay:this.options.retryDelay}),this.retryer.promise},p.dispatch=function(d){var w=this;this.state=jOe(this.state,d),Mi.batch(function(){w.observers.forEach(function(_){_.onMutationUpdate(d)}),w.mutationCache.notify(w)})},s}();function SOe(){return{context:void 0,data:void 0,error:null,failureCount:0,isPaused:!1,status:"idle",variables:void 0}}function jOe(s,p){switch(p.type){case"failed":return K({},s,{failureCount:s.failureCount+1});case"pause":return K({},s,{isPaused:!0});case"continue":return K({},s,{isPaused:!1});case"loading":return K({},s,{context:p.context,data:void 0,error:null,isPaused:!1,status:"loading",variables:p.variables});case"success":return K({},s,{data:p.data,error:null,status:"success",isPaused:!1});case"error":return K({},s,{data:void 0,error:p.error,failureCount:s.failureCount+1,isPaused:!1,status:"error"});case"setState":return K({},s,p.state);default:return s}}var IOe=function(s){x2(p,s);function p(w){var _;return _=s.call(this)||this,_.config=w||{},_.mutations=[],_.mutationId=0,_}var d=p.prototype;return d.build=function(w,_,E){var T=new _Oe({mutationCache:this,mutationId:++this.mutationId,options:w.defaultMutationOptions(_),state:E,defaultOptions:_.mutationKey?w.getMutationDefaults(_.mutationKey):void 0,meta:_.meta});return this.add(T),T},d.add=function(w){this.mutations.push(w),this.notify(w)},d.remove=function(w){this.mutations=this.mutations.filter(function(_){return _!==w}),w.cancel(),this.notify(w)},d.clear=function(){var w=this;Mi.batch(function(){w.mutations.forEach(function(_){w.remove(_)})})},d.getAll=function(){return this.mutations},d.find=function(w){return typeof w.exact>"u"&&(w.exact=!0),this.mutations.find(function(_){return fZ(w,_)})},d.findAll=function(w){return this.mutations.filter(function(_){return fZ(w,_)})},d.notify=function(w){var _=this;Mi.batch(function(){_.listeners.forEach(function(E){E(w)})})},d.onFocus=function(){this.resumePausedMutations()},d.onOnline=function(){this.resumePausedMutations()},d.resumePausedMutations=function(){var w=this.mutations.filter(function(_){return _.state.isPaused});return Mi.batch(function(){return w.reduce(function(_,E){return _.then(function(){return E.continue().catch(ja)})},Promise.resolve())})},p}(LS);function POe(){return{onFetch:function(s){s.fetchFn=function(){var p,d,w,_,E,T,z=(p=s.fetchOptions)==null||(d=p.meta)==null?void 0:d.refetchPage,V=(w=s.fetchOptions)==null||(_=w.meta)==null?void 0:_.fetchMore,H=V?.pageParam,G=V?.direction==="forward",ee=V?.direction==="backward",ne=((E=s.state.data)==null?void 0:E.pages)||[],ie=((T=s.state.data)==null?void 0:T.pageParams)||[],oe=vZ(),ce=oe?.signal,me=ie,ae=!1,Te=s.options.queryFn||function(){return Promise.reject("Missing queryFn")},Ne=function(Je,tt,vt,qt){return me=qt?[tt].concat(me):[].concat(me,[tt]),qt?[vt].concat(Je):[].concat(Je,[vt])},je=function(Je,tt,vt,qt){if(ae)return Promise.reject("Cancelled");if(typeof vt>"u"&&!tt&&Je.length)return Promise.resolve(Je);var Jt={queryKey:s.queryKey,signal:ce,pageParam:vt,meta:s.meta},nr=Te(Jt),Me=Promise.resolve(nr).then(function(sr){return Ne(Je,vt,sr,qt)});if(HS(nr)){var st=Me;st.cancel=nr.cancel}return Me},ke;if(!ne.length)ke=je([]);else if(G){var we=typeof H<"u",Ae=we?H:xZ(s.options,ne);ke=je(ne,we,Ae)}else if(ee){var ue=typeof H<"u",Se=ue?H:kOe(s.options,ne);ke=je(ne,ue,Se,!0)}else(function(){me=[];var Je=typeof s.options.getNextPageParam>"u",tt=z&&ne[0]?z(ne[0],0,ne):!0;ke=tt?je([],Je,ie[0]):Promise.resolve(Ne([],ie[0],ne[0]));for(var vt=function(Jt){ke=ke.then(function(nr){var Me=z&&ne[Jt]?z(ne[Jt],Jt,ne):!0;if(Me){var st=Je?ie[Jt]:xZ(s.options,nr);return je(nr,Je,st)}return Promise.resolve(Ne(nr,ie[Jt],ne[Jt]))})},qt=1;qt"u"&&(H.revert=!0);var G=Mi.batch(function(){return E.queryCache.findAll(z).map(function(ee){return ee.cancel(H)})});return Promise.all(G).then(ja).catch(ja)},p.invalidateQueries=function(d,w,_){var E,T,z,V=this,H=jf(d,w,_),G=H[0],ee=H[1],ne=K({},G,{active:(E=(T=G.refetchActive)!=null?T:G.active)!=null?E:!0,inactive:(z=G.refetchInactive)!=null?z:!1});return Mi.batch(function(){return V.queryCache.findAll(G).forEach(function(ie){ie.invalidate()}),V.refetchQueries(ne,ee)})},p.refetchQueries=function(d,w,_){var E=this,T=jf(d,w,_),z=T[0],V=T[1],H=Mi.batch(function(){return E.queryCache.findAll(z).map(function(ee){return ee.fetch(void 0,K({},V,{meta:{refetchPage:z?.refetchPage}}))})}),G=Promise.all(H).then(ja);return V?.throwOnError||(G=G.catch(ja)),G},p.fetchQuery=function(d,w,_){var E=yT(d,w,_),T=this.defaultQueryOptions(E);typeof T.retry>"u"&&(T.retry=!1);var z=this.queryCache.build(this,T);return z.isStaleByTime(T.staleTime)?z.fetch(T):Promise.resolve(z.state.data)},p.prefetchQuery=function(d,w,_){return this.fetchQuery(d,w,_).then(ja).catch(ja)},p.fetchInfiniteQuery=function(d,w,_){var E=yT(d,w,_);return E.behavior=POe(),this.fetchQuery(E)},p.prefetchInfiniteQuery=function(d,w,_){return this.fetchInfiniteQuery(d,w,_).then(ja).catch(ja)},p.cancelMutations=function(){var d=this,w=Mi.batch(function(){return d.mutationCache.getAll().map(function(_){return _.cancel()})});return Promise.all(w).then(ja).catch(ja)},p.resumePausedMutations=function(){return this.getMutationCache().resumePausedMutations()},p.executeMutation=function(d){return this.mutationCache.build(this,d).execute()},p.getQueryCache=function(){return this.queryCache},p.getMutationCache=function(){return this.mutationCache},p.getDefaultOptions=function(){return this.defaultOptions},p.setDefaultOptions=function(d){this.defaultOptions=d},p.setQueryDefaults=function(d,w){var _=this.queryDefaults.find(function(E){return t1(d)===t1(E.queryKey)});_?_.defaultOptions=w:this.queryDefaults.push({queryKey:d,defaultOptions:w})},p.getQueryDefaults=function(d){var w;return d?(w=this.queryDefaults.find(function(_){return NS(d,_.queryKey)}))==null?void 0:w.defaultOptions:void 0},p.setMutationDefaults=function(d,w){var _=this.mutationDefaults.find(function(E){return t1(d)===t1(E.mutationKey)});_?_.defaultOptions=w:this.mutationDefaults.push({mutationKey:d,defaultOptions:w})},p.getMutationDefaults=function(d){var w;return d?(w=this.mutationDefaults.find(function(_){return NS(d,_.mutationKey)}))==null?void 0:w.defaultOptions:void 0},p.defaultQueryOptions=function(d){if(d?._defaulted)return d;var w=K({},this.defaultOptions.queries,this.getQueryDefaults(d?.queryKey),d,{_defaulted:!0});return!w.queryHash&&w.queryKey&&(w.queryHash=bT(w.queryKey,w)),w},p.defaultQueryObserverOptions=function(d){return this.defaultQueryOptions(d)},p.defaultMutationOptions=function(d){return d?._defaulted?d:K({},this.defaultOptions.mutations,this.getMutationDefaults(d?.mutationKey),d,{_defaulted:!0})},p.clear=function(){this.queryCache.clear(),this.mutationCache.clear()},s}(),COe=O(B()),AOe=COe.default.unstable_batchedUpdates;Mi.setBatchNotifyFunction(AOe);var MOe=console;wOe(MOe);var j2=O(C()),_Z=j2.default.createContext(void 0),TOe=j2.default.createContext(!1);function ROe(s){return s&&typeof window<"u"?(window.ReactQueryClientContext||(window.ReactQueryClientContext=_Z),window.ReactQueryClientContext):_Z}var zOe=function(s){var p=s.client,d=s.contextSharing,w=d===void 0?!1:d,_=s.children;j2.default.useEffect(function(){return p.mount(),function(){p.unmount()}},[p]);var E=ROe(w);return j2.default.createElement(TOe.Provider,{value:w},j2.default.createElement(E.Provider,{value:p},_))},Lh=O(Xr());function LOe(s,p,d){Qm.default.render(DOe(s),p,d)}function DOe(s){let p=new EOe;return(0,Lh.jsx)(ch,{store:Pbe,children:(0,Lh.jsx)(zOe,{client:p,children:(0,Lh.jsx)(NOe,{ontologyId:s.ontologyId,iri:s.iri,entityType:s.entityType,apiUrl:s.apiUrl,onNavigateToEntity:s.onNavigateToEntity,onNavigateToOntology:s.onNavigateToOntology})})})}function NOe(s){let{entityType:p,lang:d="en",onNavigateToEntity:w=()=>{},onNavigateToOntology:_=()=>{}}=s,E=Yo(ie=>ie.ontologies.ontology),T=Yo(ie=>ie.ontologies.loadingOntology),z=Yo(ie=>ie.ontologies.entity),V=Yo(ie=>ie.ontologies.loadingEntity),H=Yo(ie=>ie.ontologies.loadingClassInstances),G=Ts(),ee=(ie,oe)=>{let ce=ie.getOntologyId(),me=oe.getTypePlural(),ae=oe.getIri();w(ce,me,ae)},ne=(ie,oe)=>{let ce=oe.getTypePlural(),me=oe.getIri();_(ie,ce,me)};return(0,sf.useEffect)(()=>{G(dS({ontologyId:s.ontologyId,lang:"en",apiUrl:s.apiUrl}))},[G,s.ontologyId,s.apiUrl]),(0,sf.useEffect)(()=>{E&&s.iri&&(s.entityType&&s.entityType!=="entities"?G(mS({ontologyId:s.ontologyId,entityType:s.entityType,entityIri:s.iri,searchParams:new URLSearchParams})):G(hS({ontologyId:s.ontologyId,entityIri:s.iri})))},[G,s.ontologyId,s.entityType,s.iri,E]),(0,sf.useEffect)(()=>{z&&s.entityType==="classes"&&G(gS({ontologyId:z.getOntologyId(),classIri:z.getIri(),searchParams:new URLSearchParams}))},[G,s.ontologyId,s.entityType,s.iri,z]),(0,Lh.jsxs)(sf.Fragment,{children:[(V||T||H)&&(0,Lh.jsx)(pwe,{}),!V&&!T&&!H&&E&&(0,Lh.jsx)(sOe,{ontology:E,entityType:p||"entities",lang:d,selectedEntity:z,onNavigateToEntity:ee,onNavigateToOntology:ne,apiUrl:s.apiUrl})]})}window.OLSWidgets={createEntityTree:LOe}})();var R2e=k(_o()),jM=e=>((0,e0.useEffect)(()=>{let t=document.querySelector("#tree_container");window.OLSWidgets.createEntityTree({iri:e.iri,ontologyId:e.ontologyId,apiUrl:e.api.substring(0,e.api.lastIndexOf("api")),entityType:(e.entityType?j3(e.entityType,!1):void 0)||"entities",onNavigateToEntity:e.onNavigateToEntity?e.onNavigateToEntity:(n,r,o)=>{console.log(`navigate to entity with ontologyId: ${n}, entityType: ${r}, iri: ${o}`)},onNavigateToOntology:e.onNavigateToOntology?e.onNavigateToOntology:(n,r,o)=>{console.log(`navigate to ontology with ontologyId: ${n}, entityType: ${r}, iri: ${o}`)}},t)},[e.api,e.iri,e.ontologyId,e.entityType,e.onNavigateToEntity,e.onNavigateToOntology,"hierarchyWidget"]),e0.default.createElement(Hi,{style:{minWidth:"600px"}},e0.default.createElement("div",{id:"tree_container"})));function z2e(e,t,n){R2e.default.render(wkt(e),t,n)}function wkt(e){let t=new Wr;return e0.default.createElement(Nr,{colorMode:"light"},e0.default.createElement(Br,{client:t},e0.default.createElement(jM,{ontologyId:e.ontologyId,api:e.api,iri:e.iri,entityType:e.entityType,onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology})))}var yu=k(L());var Rl=k(L());var fl=k(L());var L2e=e=>fetch(e,{method:"GET",headers:{Accept:"application/json","Content-Type":"application/json"}}).then(t=>t.json()).catch(t=>[]),Okt=e=>e.substr(0,5)==="http:"?e.replace("http","https"):e,FY=e=>e===void 0?"":Okt(e.substring(0,e.search("/terms")+7));var D2e=k(_o()),IM=class{url;iri;label;id;isExpanded=!0;children=[];icon=fl.default.createElement(fl.default.Fragment,null,"+");iconWhenExpanded=fl.default.createElement(fl.default.Fragment,null,"-");constructor(t,n,r,o){this.label=t,this.id=n,this.iri=o,this.url=r}setchild(t){this.children.push(t),this.children.length>0&&(this.icon=fl.default.createElement(fl.default.Fragment,null,"+"))}is_root(){return this.id==="#"}to_string(){return this.label+"[ "+this.children.map(t=>t.to_string())+" ]"}callback(){if(this.isExpanded)return"";let t=this.url+encodeURIComponent(encodeURIComponent(this.iri))+"/jstree/children/"+this.id;return L2e(t).then(n=>{this.children=[],PM(this,n,this.url)}),""}},PM=(e,t,n)=>{t.filter(r=>r.parent===e.id).forEach(r=>{e.setchild(new IM(r.text,r.id,n,r.iri))}),e.children.map(r=>PM(r,t,n))};async function xkt(e,t,n){let r=await e.getTermTree({ontologyId:t,termIri:n},{viewMode:"All",siblings:!1},void 0,void 0).catch(o=>console.log(o));return n?r:r._embedded.terms.map((o,i)=>({id:(++i).toString(),parent:"#",iri:o.iri,text:o.label,children:o.has_children}))}var kM=e=>{let{iri:t,ontologyId:n,api:r}=e,[o,i]=(0,fl.useState)(),u=new fn(r),f=r+"ontologies/"+n+"/terms/",h=async y=>{let O=await u.getTermTree({ontologyId:n,termIri:t},{child:y.id},void 0,void 0).catch(S=>console.log(S));y.children=[],PM(y,O,FY(f))};return an([r,"getTermTree",n,t],()=>xkt(u,n,t).then(y=>{let O=new IM("#","#","","");return y&&PM(O,y,FY(f)),i(O.children),y})),fl.default.createElement(Hi,null,o&&fl.default.createElement(H_,{expandByDefault:!0,"aria-label":"HierarchyTab",items:o}))};function N2e(e,t,n){D2e.default.render(_kt(e),t,n)}function _kt(e){let t=new Wr;return fl.default.createElement(Nr,{colorMode:"light"},fl.default.createElement(Br,{client:t},fl.default.createElement(kM,{ontologyId:e.ontologyId,api:e.api,iri:e.iri})))}function EM(e){function t(n){return Rl.default.createElement(Rl.default.Fragment,null,Rl.default.createElement(fy,{size:"s",tabs:[{content:Rl.default.createElement(_M,{synonyms:n.getSynonyms().map(r=>r.value)}),id:"tab1",name:"Alternative Names"},{content:Rl.default.createElement(Rl.default.Fragment,null,Rl.default.createElement("div",{style:{overflow:"auto"}},e.useLegacy==null||e.useLegacy?Rl.default.createElement(kM,{ontologyId:e.ontologyId||(n&&n.getOntologyId()!==void 0?n.getOntologyId():""),api:e.api,iri:e.iri}):Rl.default.createElement(jM,{api:e.api,iri:e.iri,ontologyId:e.ontologyId||(n&&n.getOntologyId()!==void 0?n.getOntologyId():""),entityType:e.entityType}))),id:"tab2",name:"Hierarchy"},{content:Rl.default.createElement(SM,{crossrefs:Rt.fromJson(n.getCrossReferences()).map(r=>r.value)}),id:"tab3",name:"Cross references"}]}))}return Rl.default.createElement(Rl.default.Fragment,null,cs(e.data)||yd(e.data)||Kg(e.data)?t(e.data):null)}var F2e=k(_o());function W2e(e){let{iri:t,api:n,ontologyId:r,entityType:o,parameter:i,useLegacy:u,...f}=e,h=new fn(n),{data:y,isLoading:O,isSuccess:S,isError:I,error:A}=an(["tabdata",n,i,o,t,r,u],async()=>h.getEntityObject(t,o,r,i,u));function C(M){return yu.default.createElement(EM,{...f,data:M,iri:t,api:n,useLegacy:u,entityType:M.getType()})}return yu.default.createElement(yu.default.Fragment,null,O&&yu.default.createElement($r,null),I&&yu.default.createElement(ar,null,gi(A,"description")),S&&y&&yu.default.createElement(yu.default.Fragment,null,cs(y)?C(y):null))}function B2e(e,t,n){F2e.default.render(Skt(e),t,n)}function Skt(e){let t=new Wr;return yu.default.createElement(Nr,{colorMode:"light"},yu.default.createElement(Br,{client:t},yu.default.createElement(W2e,{iri:e.iri,api:e.api,ontologyId:e.ontologyId,entityType:e.entityType,parameter:e.parameter,useLegacy:e.useLegacy})))}var Wp=k(L());var H2e=k(L());function CM(e){return H2e.default.createElement(ar,null,e.titleText||e.title)}var V2e=k(_o()),jkt="No title available.";function WY(e){let{iri:t,ontologyId:n,api:r,titleText:o,thingType:i,parameter:u,useLegacy:f,default_value:h}=e,y=new fn(r),{data:O,isLoading:S,isSuccess:I,isError:A,error:C}=an(["metadata",r,u,i,t,n,f],async()=>y.getThingObject(t,i,n,u,f));return Wp.default.createElement(Wp.default.Fragment,null,S&&Wp.default.createElement($r,{size:"s"}),I&&O&&Wp.default.createElement(CM,{title:o||(Yie(O)?O.getName():O.getLabel())||h||jkt}),A&&Wp.default.createElement(ar,null,gi(C,"title")))}function q2e(e,t,n){V2e.default.render(Ikt(e),t,n)}function Ikt(e){let t=new Wr;return Wp.default.createElement(Nr,{colorMode:"light"},Wp.default.createElement(Br,{client:t},Wp.default.createElement(WY,{api:e.api,thingType:e.thingType,iri:e.iri,ontologyId:e.ontologyId,titleText:e.titleText,parameter:e.parameter,useLegacy:e.useLegacy,default_value:e.default_value})))}var Vn=k(L());var U2e=k(_o());function $2e(e){let{iri:t,api:n,ontologyId:r,entityType:o,parameter:i,useLegacy:u}=e,f=new fn(n),{data:h,isLoading:y,isSuccess:O,isError:S,error:I}=an(["metadata",n,i,o,t,r,u],async()=>f.getEntityObject(t,o,r,i,u));function A(C){return Vn.default.createElement(Vn.default.Fragment,null,Vn.default.createElement(to,{direction:"column"},Vn.default.createElement(Mt,{grow:!1},Vn.default.createElement("span",null,Vn.default.createElement(xM,{isDefiningOntology:C.getIsDefiningOntology(),ontologyName:C.getOntologyId(),shortForm:C.getShortForm()}))),Vn.default.createElement(Mt,null,Vn.default.createElement(to,{direction:"column"},Vn.default.createElement(Mt,null,Vn.default.createElement(to,null,Vn.default.createElement(Mt,{grow:!1,style:{maxWidth:600}},Vn.default.createElement(Ay,{iri:t,parameter:i})))),Vn.default.createElement(Mt,{grow:!1,style:{maxWidth:600}},Vn.default.createElement(CM,{title:C.getLabel()})))),Vn.default.createElement(Mt,{style:{maxWidth:600}},Vn.default.createElement(wM,{description:C.getDescription()})),Vn.default.createElement(Mt,null,Vn.default.createElement(EM,{data:C,iri:t,entityType:e.entityType,api:n,ontologyId:e.ontologyId?e.ontologyId:C.getOntologyId(),useLegacy:u}))))}return Vn.default.createElement(Vn.default.Fragment,null,y&&Vn.default.createElement($r,null),S&&Vn.default.createElement(ar,null,gi(I,"metadata")),O&&h&&Vn.default.createElement(Vn.default.Fragment,null,cs(h)?A(h):null))}function J2e(e,t,n){U2e.default.render(Pkt(e),t,n)}function Pkt(e){let t=new Wr;return Vn.default.createElement(Nr,{colorMode:"light"},Vn.default.createElement(Br,{client:t},Vn.default.createElement($2e,{iri:e.iri,ontologyId:e.ontologyId,api:e.api,entityType:e.entityType,parameter:e.parameter,useLegacy:e.useLegacy})))}function AM(e){let{api:t,parameter:n,hasShortSelectedLabel:r,allowCustomTerms:o,selectionChangedEvent:i,preselected:u,placeholder:f,singleSelection:h,...y}=e,O=new fn(t),S=_p(),I=pv(),[A,C]=(0,qn.useState)(""),[M,F]=(0,qn.useState)([]),[R,B]=(0,qn.useState)([]),Y=(se,_e)=>{let{label:be,value:Pe}=se;if(o&&Pe.iri=="")return be;{let Ue="";Pe.type==="class"?Ue=I[5]:Pe.type==="individual"?Ue=I[3]:Pe.type==="property"&&(Ue=I[1]);let Le=S[I.indexOf(Ue)];return Pe.description!=null?Pe.type==="ontology"?qn.default.createElement(cm,{title:"type: "+Pe.type+` -label: `+be.label+` +label: `+Pe.label+` -prefix: `+be.ontology_name+` +prefix: `+Pe.ontology_name+` -description: `+be.description,color:We},Vn.default.createElement("span",null,Vn.default.createElement(cu,{search:Se},be.label),Vn.default.createElement("br",null),be.description)):Vn.default.createElement("span",{style:{height:"200px"}},Vn.default.createElement(um,{title:"type: "+be.type+` +description: `+Pe.description,color:Le},qn.default.createElement("span",null,qn.default.createElement(fu,{search:_e},Pe.label),qn.default.createElement("br",null),Pe.description)):qn.default.createElement("span",{style:{height:"200px"}},qn.default.createElement(cm,{title:"type: "+Pe.type+` -label: `+be.label+` +label: `+Pe.label+` -prefix > short_form: `+be.ontology_name+" > "+be.short_form+` +prefix > short_form: `+Pe.ontology_name+" > "+Pe.short_form+` -description: `+be.description,color:We},Vn.default.createElement("span",null,Vn.default.createElement(cu,{search:Se},be.label),"\xA0\xA0\xA0\xA0\xA0",Vn.default.createElement(ym,{api:t,entityType:be.type,ontologyId:be.ontology_name,iri:be.iri,colorFirst:"primary",colorSecond:"success",parameter:be.parameter}),Vn.default.createElement("br",null),be.description.substring(0,40)+"..."))):be.type==="ontology"?Vn.default.createElement(um,{title:"type: "+be.type+` +description: `+Pe.description,color:Le},qn.default.createElement("span",null,qn.default.createElement(fu,{search:_e},Pe.label),"\xA0\xA0\xA0\xA0\xA0",qn.default.createElement(ym,{api:t,entityType:Pe.type,ontologyId:Pe.ontology_name,iri:Pe.iri,colorFirst:"primary",colorSecond:"success",parameter:Pe.parameter}),qn.default.createElement("br",null),Pe.description.substring(0,40)+"..."))):Pe.type==="ontology"?qn.default.createElement(cm,{title:"type: "+Pe.type+` -label: `+be.label+` +label: `+Pe.label+` -prefix: `+be.ontology_name,color:We},Vn.default.createElement("span",null,Vn.default.createElement(cu,{search:Se},be.label))):Vn.default.createElement(um,{title:"type: "+be.type+` +prefix: `+Pe.ontology_name,color:Le},qn.default.createElement("span",null,qn.default.createElement(fu,{search:_e},Pe.label))):qn.default.createElement(cm,{title:"type: "+Pe.type+` -label: `+be.label+` +label: `+Pe.label+` -prefix > short_form: `+be.ontology_name+" > "+be.short_form,color:We},Vn.default.createElement("span",null,Vn.default.createElement(cu,{search:Se},be.label),"\xA0\xA0\xA0\xA0\xA0",Vn.default.createElement(ym,{api:t,entityType:be.type,ontologyId:be.ontology_name,iri:be.iri,colorFirst:"primary",colorSecond:"success",parameter:be.parameter})))}},{isLoading:X}=on(["onMount",u],async()=>{let se=[],Se=[...new Set(u)].filter(Oe=>o&&Oe.label||Oe.iri);if(Se.length>0){h&&(Se=[Se[0]]);for(let Oe of Se)Oe.iri&&Oe.iri.startsWith("http")?await O.select({query:Oe.iri},void 0,void 0,n).then(be=>{be.response&&be.response.docs&&be.response.docs.map(Ue=>{Oe.iri===Ue.iri&&se.push({label:r?Ue.label:Z(Ue),key:Ue.iri,value:{iri:Ue.iri,label:Ue.label,ontology_name:Ue.ontology_name,type:Ue.type,short_form:Ue.short_form,description:Ue.description?.join()}})})}):Oe.label&&o&&se.push({label:Oe.label,key:Oe.label,value:{iri:"",label:"",ontology_name:"",type:"",short_form:"",description:""}});W(se),B(se)}}),{isLoading:ae}=on(["onSearchChange",A],async()=>{if(A.length>0)return O.select({query:A},void 0,void 0,n).then(se=>{se.response&&se.response.docs&&W(se.response.docs.map(Se=>({label:r?Se.label:Z(Se),key:Se.iri,value:{iri:Se.iri,label:Se.label,ontology_name:Se.ontology_name,type:Se.type,short_form:Se.short_form,description:Se.description?.join()}})))})});(0,Vn.useEffect)(()=>{i(R.map(se=>o&&se.value.iri==""?{iri:"",label:se.label,ontology_name:"",type:"",short_form:se.value.short_form,description:se.value.description}:se.value.iri==""?{iri:"",label:"",ontology_name:"",type:"",short_form:"",description:""}:{iri:se.value.iri,label:se.value.label,ontology_name:se.value.ontology_name,type:se.value.type,short_form:se.value.short_form,description:se.value.description}))},[R]);function Z(se){return se.label+" ("+se.ontology_name.toUpperCase()+" "+se.short_form+")"}function K(se){B(se)}function de(se){let Se={label:se,value:{iri:"",label:"",ontology_name:"",type:"",short_form:"",description:""}};W([...M,Se]),B([...R,Se])}return Vn.default.createElement(R_,{isClearable:!0,"aria-label":"searchBar",fullWidth:!0,...y,async:!0,isLoading:ae||X,singleSelection:h?{asPlainText:!0}:!1,placeholder:f||"Search for a Concept",options:M,selectedOptions:R,onSearchChange:C,onChange:K,renderOption:Y,onCreateOption:o?de:void 0,rowHeight:50})}function $2e(e,t,n){U2e.default.render(jPt(e),t,n)}function jPt(e){let t=new Br;return Vn.default.createElement(Fr,{colorMode:"light"},Vn.default.createElement(Hr,{client:t},Vn.default.createElement(IM,{api:e.api,parameter:e.parameter,selectionChangedEvent:e.selectionChangedEvent,preselected:e.preselected,singleSelection:e.singleSelection,placeholder:e.placeholder,hasShortSelectedLabel:e.hasShortSelectedLabel,allowCustomTerms:e.allowCustomTerms})))}var Oi=P(L(),1);var J2e=P(xo(),1);function G2e(e){let{api:t,parameter:n,...r}=e,o=new un(t),{data:i,isLoading:u,isError:f,dataUpdatedAt:h}=on(["ontologiesData",t,n],async()=>o.getOntologiesData(e.parameter));return Oi.default.createElement(Oi.default.Fragment,null,Oi.default.createElement(gs,{title:"Data Content",description:h?`Updated ${new Date(h).toLocaleString()}`:"",layout:"horizontal"},Oi.default.createElement(fr,{...r},f&&Oi.default.createElement(fr,null,"No data content available"),u?Oi.default.createElement($r,{size:"s"}):Oi.default.createElement("ul",null,i?.getTotalOntologies()?Oi.default.createElement("li",null,i?.getTotalOntologies().toLocaleString()," ontologies and terminologies"):Oi.default.createElement("li",{style:{fontStyle:"italic"}},"ontology number not available"),i?.getNumClasses()?Oi.default.createElement("li",null,i?.getNumClasses().toLocaleString()," terms"):Oi.default.createElement("li",{style:{fontStyle:"italic"}},"term number not available"),i?.getNumProperties()?Oi.default.createElement("li",null,i?.getNumProperties().toLocaleString()," properties"):Oi.default.createElement("li",{style:{fontStyle:"italic"}},"property number not available"),i?.getNumIndividuals()?Oi.default.createElement("li",null,i?.getNumIndividuals().toLocaleString()," individuals"):Oi.default.createElement("li",{style:{fontStyle:"italic"}},"individual number not available")," "))))}function X2e(e,t,n){J2e.default.render(IPt(e),t,n)}function IPt(e){let t=new Br;return Oi.default.createElement(Fr,{colorMode:"light"},Oi.default.createElement(Hr,{client:t},Oi.default.createElement(G2e,{api:e.api,parameter:e.parameter})))}var Ye=P(L(),1);var Be=P(L(),1);var Z_=!0;function kM(e){return Be.default.createElement(_E,{type:"iInCircle",color:"subdued",content:e})}function kPt(e,t){let n=Object.keys(t).map(r=>{let o=e.getLinkedEntities().getLabelForIri(r)||r;return o?"*"+t[r]+" ("+o+")":""}).join(` -`);return kM(n)}function Wa(e,t,n,r,o=Z_){let i=Bie(r),u=t.getLabelForIri(n)||n.split("/").pop()||n,f=t.get(n),h=e.getOntologyId();if(e.getType()!=="ontology"&&n===e?.getIri())return Be.default.createElement("b",null,e.getLabel());if(!f)return n.startsWith("http")?Be.default.createElement("a",{href:n},u):Be.default.createElement("span",null,u);let y=f.definedBy?f.definedBy.filter(S=>S!==h):[],O=f.type;return y.length===1?f.hasLocalDefinition?Be.default.createElement(Be.default.Fragment,null,Be.default.createElement("a",{href:i+hd(h,n,O)},u),o?Be.default.createElement(Be.default.Fragment,null,"\xA0",Be.default.createElement("a",{href:i+hd(y[0],n,O)},Be.default.createElement(wo,{color:"success"},y[0].toUpperCase()))):Be.default.createElement(Be.default.Fragment,null)):Be.default.createElement(Be.default.Fragment,null,Be.default.createElement("a",{href:i+hd(y[0],n,O)},u),o?Be.default.createElement(Be.default.Fragment,null,"\xA0",Be.default.createElement("a",{href:i+hd(y[0],n,O)},Be.default.createElement(wo,{color:"success"},y[0].toUpperCase()))):Be.default.createElement(Be.default.Fragment,null)):y.length>1?f.hasLocalDefinition?Be.default.createElement(Be.default.Fragment,null,Be.default.createElement("a",{href:i+hd(h,n,O)},u),o?Be.default.createElement(Be.default.Fragment,null,"\xA0",y.map(S=>Be.default.createElement("a",{key:zr(),href:i+hd(S,n,O)},Be.default.createElement(wo,{color:"success"},S.toUpperCase())))):Be.default.createElement(Be.default.Fragment,null)):Be.default.createElement(Be.default.Fragment,null,Be.default.createElement("a",{href:n},u),o?Be.default.createElement(Be.default.Fragment,null,"\xA0",Be.default.createElement("a",{key:zr(),href:i+`/search?q=${encodeURIComponent(u)}&exactMatch=true`},Be.default.createElement(wo,{color:"success"},Be.default.createElement(ar,{type:"search",size:"s"}),"\xA0",y.length,"\xA0","ontologies"))):Be.default.createElement(Be.default.Fragment,null)):f.hasLocalDefinition?Be.default.createElement(Be.default.Fragment,null,Be.default.createElement("a",{href:i+hd(h,n,O)},u)):parseInt(f.numAppearsIn)>0?Be.default.createElement(Be.default.Fragment,null,Be.default.createElement("a",{href:n},u),o?Be.default.createElement(Be.default.Fragment,null,"\xA0",Be.default.createElement("a",{key:zr(),href:i+`/search?q=${encodeURIComponent(u)}&exactMatch=true`},Be.default.createElement(wo,{color:"success"},Be.default.createElement(ar,{type:"search",size:"s"}),"\xA0",f.numAppearsIn,"\xA0",parseInt(f.numAppearsIn)>1?"ontologies":"ontology"))):Be.default.createElement(Be.default.Fragment,null)):Be.default.createElement(Be.default.Fragment,null,Be.default.createElement("a",{href:n},u))}function rn(e,t,n,r,o=Z_){let i=Be.default.createElement(Be.default.Fragment,null);if(t=t.mergeWith(n.linkedEntities),typeof n=="string")i=Wa(e,t,n,r,o);else if(typeof n=="object"&&!Array.isArray(n)&&Array.isArray(n.type)&&n.type.indexOf("reification")!==-1)i=fl(e,Rt.fromJson(n)[0],r,o);else{let u=n["http://www.w3.org/2002/07/owl#someValuesFrom"],f=n["http://www.w3.org/2002/07/owl#allValuesFrom"],h=vt(n["http://www.w3.org/2002/07/owl#intersectionOf"]),y=vt(n["http://www.w3.org/2002/07/owl#unionOf"]),O=n["http://www.w3.org/2002/07/owl#hasValue"],S=n["http://www.w3.org/2002/07/owl#minCardinality"]||n["http://www.w3.org/2002/07/owl#minQualifiedCardinality"],I=n["http://www.w3.org/2002/07/owl#maxCardinality"]||n["http://www.w3.org/2002/07/owl#maxQualifiedCardinality"],A=n["http://www.w3.org/2002/07/owl#cardinality"]||n["http://www.w3.org/2002/07/owl#qualifiedCardinality"],C=n["http://www.w3.org/2002/07/owl#hasSelf"],M=n["http://www.w3.org/2002/07/owl#complementOf"],W=vt(n["http://www.w3.org/2002/07/owl#oneOf"]),R=n["http://www.w3.org/2002/07/owl#inverseOf"],B=n["http://www.w3.org/2002/07/owl#onProperty"],Y=n["http://www.w3.org/2002/07/owl#onDatatype"];if(Y){let X=[rn(e,t,Y,r,o)],ae=vt(n["http://www.w3.org/2002/07/owl#withRestrictions"]);if(ae.length>0){X.push(Be.default.createElement(Be.default.Fragment,null,"["));let Z=!0;for(let K of ae){Z?Z=!1:X.push(Be.default.createElement(Be.default.Fragment,null,",\xA0"));let de=K["http://www.w3.org/2001/XMLSchema#minExclusive"],se=K["http://www.w3.org/2001/XMLSchema#minInclusive"],Se=K["http://www.w3.org/2001/XMLSchema#maxExclusive"],Oe=K["http://www.w3.org/2001/XMLSchema#maxInclusive"];de?X.push(Be.default.createElement(Be.default.Fragment,null,"> ",de)):se?X.push(Be.default.createElement(Be.default.Fragment,null,"\u2265 ",se)):Se?X.push(Be.default.createElement(Be.default.Fragment,null,"< ",Se)):Oe&&X.push(Be.default.createElement(Be.default.Fragment,null,"\u2264 ",Oe))}X.push(Be.default.createElement(Be.default.Fragment,null,"]"))}i=Be.default.createElement(Be.default.Fragment,null,X.map(Z=>Be.default.createElement("span",{key:zr()},Z)))}else if(u)i=Be.default.createElement(Be.default.Fragment,null,rn(e,t,B,r,o),Be.default.createElement("i",{style:{color:"purple"}}," some "),rn(e,t,vt(u)[0],r,o));else if(f)i=Be.default.createElement(Be.default.Fragment,null,rn(e,t,B,r,o),Be.default.createElement("i",{style:{color:"purple"}}," only "),rn(e,t,vt(f)[0],r,o));else if(h.length>0){let X=[Be.default.createElement("span",{key:zr(),className:"text-neutral-default"},"(")];for(let ae of h)X.length>1&&X.push(Be.default.createElement("i",null," and ")),X.push(rn(e,t,ae,r,o));X.push(Be.default.createElement("span",{className:"text-neutral-default"},")")),i=Be.default.createElement("span",null,X.map(ae=>Be.default.createElement("span",{key:zr()},ae)))}else if(y.length>0){let X=[Be.default.createElement("span",{key:zr(),className:"text-neutral-default"},"(")];for(let ae of y)X.length>1&&X.push(Be.default.createElement("i",null," or ")),X.push(rn(e,t,ae,r,o));X.push(Be.default.createElement("span",{className:"text-neutral-default"},")")),i=Be.default.createElement("span",null,X.map(ae=>Be.default.createElement("span",{key:zr()},ae)))}else if(O)i=Be.default.createElement(Be.default.Fragment,null,rn(e,t,B,r,o),Be.default.createElement("i",{style:{color:"purple"}}," value "),rn(e,t,vt(O)[0],r,o));else if(S)i=Be.default.createElement(Be.default.Fragment,null,rn(e,t,B,r,o),Be.default.createElement("i",{style:{color:"purple"}}," min "),rn(e,t,vt(S)[0],r,o));else if(I)i=Be.default.createElement(Be.default.Fragment,null,rn(e,t,B,r,o),Be.default.createElement("i",{style:{color:"purple"}}," max "),rn(e,t,vt(I)[0],r,o));else if(A)i=Be.default.createElement(Be.default.Fragment,null,rn(e,t,B,r,o),Be.default.createElement("i",{style:{color:"purple"}}," exactly "),rn(e,t,vt(A)[0],r,o));else if(C)i=Be.default.createElement(Be.default.Fragment,null,rn(e,t,B,r,o),Be.default.createElement("i",{style:{color:"purple"}}," Self "),rn(e,t,vt(C)[0],r,o));else if(M)i=Be.default.createElement(Be.default.Fragment,null,Be.default.createElement("i",null,"not "),rn(e,t,vt(M)[0],r,o));else if(W.length>0){let X=[Be.default.createElement("span",{key:zr(),className:"text-neutral-default"},"{")];for(let ae of W)X.length>1&&X.push(Be.default.createElement("span",{key:zr(),className:"text-neutral-default"},",\xA0")),X.push(rn(e,t,ae,r,o));X.push(Be.default.createElement("span",{className:"text-neutral-default"},"}")),i=Be.default.createElement("span",null,X.map(ae=>Be.default.createElement("span",{key:zr()},ae)))}else R&&(i=Be.default.createElement(Be.default.Fragment,null,Be.default.createElement("i",{style:{color:"purple"}},"inverse "),Be.default.createElement("span",{key:zr(),className:"text-neutral-default"},"("),rn(e,t,R,r,o),Be.default.createElement("span",{key:zr(),className:"text-neutral-default"},")")))}return i}function Ay(e,t,n,r,o=Z_){return Be.default.createElement(Be.default.Fragment,null,n.length===1?Be.default.createElement("p",null,rn(e,e.getLinkedEntities(),n[0],r,o)):Be.default.createElement("ul",null,n.map(i=>Be.default.createElement("li",{key:zr()},rn(e,e.getLinkedEntities(),i,r,o)))))}function K2e(e,t,n,r,o=Z_){let i=[];if(n)for(let y of Object.keys(n.linkedEntities))for(let O=t.indexOf(y,0);O!==-1;O=t.indexOf(y,O))i.push({start:O,end:O+y.length,link:Wa(e,n,y,r,o)}),O+=y.length;let u=/[A-z]+:\/\/[^\s]+/g;for(let y=u.exec(t);y;y=u.exec(t)){let O=y[0];i.push({start:y.index,end:y.index+O.length,link:Be.default.createElement("span",{key:zr()},Be.default.createElement("a",{href:O},O))})}i.sort((y,O)=>y.start-O.start);e:for(let y=0;y=I.start&&I.end>=S.start){S.end-S.startO.getEntityObject(n,i,r,u,h));function W(se){return Ye.default.createElement(Ye.default.Fragment,null,se.getLabel()&&Ye.default.createElement(Ye.default.Fragment,null,Ye.default.createElement(kt,null,Ye.default.createElement("b",null,"Label:"),se.getLabel()),Ye.default.createElement(bi,null)))}function R(se){return Ye.default.createElement(Ye.default.Fragment,null,se.getSynonyms().length>0&&Ye.default.createElement(Ye.default.Fragment,null,Ye.default.createElement(kt,null,Ye.default.createElement("b",null,"Synonyms:"),se.getSynonyms().length>1?Ye.default.createElement("ul",null,se.getSynonyms().map(Se=>Ye.default.createElement("li",{key:zr(),id:Se.value},fl(se,Se,t,f)))):Ye.default.createElement("p",null,fl(se,se.getSynonyms()[0],t,f)))))}function B(se){let Se=se.getHasKey();return Ye.default.createElement(Ye.default.Fragment,null,Se.length>0&&Ye.default.createElement(Ye.default.Fragment,null,Ye.default.createElement(kt,null,Ye.default.createElement("b",null,"Has Key:"),Se.length>1?Ye.default.createElement("ul",null,Se.map(Oe=>Ye.default.createElement("li",{key:zr()},rn(se,se.getLinkedEntities(),Oe,t,f)))):Ye.default.createElement("p",null,rn(se,se.getLinkedEntities(),Se[0],t,f)))))}function Y(se){return Ye.default.createElement(Ye.default.Fragment,null,se.getSubsets().length>0&&Ye.default.createElement(Ye.default.Fragment,null,Ye.default.createElement(kt,null,Ye.default.createElement("b",null,"In Subsets:"),se.getSubsets().length>1?Ye.default.createElement("ul",null,se.getSubsets().map(Se=>Ye.default.createElement("li",{key:zr(),id:Se+zr()},Wa(se,se.getLinkedEntities(),Se,t,f)))):Ye.default.createElement("p",null,Wa(se,se.getLinkedEntities(),se.getSubsets()[0],t,f)))))}function X(se){let Se=se.getRdfTypes().map(Oe=>({"http://www.w3.org/2002/07/owl#FunctionalProperty":"Functional","http://www.w3.org/2002/07/owl#InverseFunctionalProperty":"Inverse Functional","http://www.w3.org/2002/07/owl#TransitiveProperty":"Transitive","http://www.w3.org/2002/07/owl#SymmetricProperty":"Symmetric","http://www.w3.org/2002/07/owl#AsymmetricProperty":"Asymmetric","http://www.w3.org/2002/07/owl#ReflexiveProperty":"Reflexive","http://www.w3.org/2002/07/owl#IrreflexiveProperty":"Irreflexive"})[Oe]).filter(Oe=>!!Oe);return Ye.default.createElement(Ye.default.Fragment,null,Se.length>0&&Ye.default.createElement(Ye.default.Fragment,null,Ye.default.createElement(kt,null,Ye.default.createElement("b",null,"Characteristics:"),Se.length>1?Ye.default.createElement("ul",null,Se.map(Oe=>Ye.default.createElement("li",{key:zr()},Oe)).sort()):Ye.default.createElement("p",null,Se[0]))))}function ae(se){let Se=se.getDomain();return Ye.default.createElement(Ye.default.Fragment,null,Se.length>0&&Ye.default.createElement(Ye.default.Fragment,null,Ye.default.createElement(kt,null,Ye.default.createElement("b",null,"Domain:"),Se.length>1?Ye.default.createElement("ul",null,Se.map(Oe=>Ye.default.createElement("li",{key:zr()},rn(se,se.getLinkedEntities(),Oe,t,f)))):Ye.default.createElement("p",null,rn(se,se.getLinkedEntities(),Se[0],t,f)))))}function Z(se){let Se=se.getRange();return Ye.default.createElement(Ye.default.Fragment,null,Se.length>0&&Ye.default.createElement(kt,null,Ye.default.createElement("b",null,"Range:"),Se.length>1?Ye.default.createElement("ul",null,Se.map(Oe=>Ye.default.createElement("li",{key:zr()},rn(se,se.getLinkedEntities(),Oe,t,f)))):Ye.default.createElement("p",null,rn(se,se.getLinkedEntities(),Se[0],t,f))))}function K(se){let Se=Object.keys(se.properties),Oe=Se.filter(Ge=>Ge.startsWith("negativePropertyAssertion+")),be=Se.filter(Ge=>se.getLinkedEntities().get(Ge)&&se.getLinkedEntities().get(Ge)?.type.indexOf("objectProperty")!==-1),Ue=Se.filter(Ge=>se.getLinkedEntities().get(Ge)&&se.getLinkedEntities().get(Ge)?.type.indexOf("dataProperty")!==-1),We=[];for(let Ge of be){let Qe=vt(se.properties[Ge]);for(let ot of Qe)We.push(Ye.default.createElement(Ye.default.Fragment,null,rn(se,se.getLinkedEntities(),Ge,t,f),typeof ot=="string"&&ot.includes("http")?Ye.default.createElement(Ye.default.Fragment,null,"\xA0",Ye.default.createElement("span",{style:{fontSize:"medium",color:"gray"}},"\u25B8"),"\xA0",Wa(se,se.getLinkedEntities(),ot,t,f)):kM(typeof ot=="string"?ot:typeof ot=="object"&&!Array.isArray(ot)&&ot.value?JSON.stringify(ot.value):JSON.stringify(ot))))}for(let Ge of Ue){let Qe=vt(se.properties[Ge]);for(let ot of Qe)We.push(Ye.default.createElement(Ye.default.Fragment,null,rn(se,se.getLinkedEntities(),Ge,t,f),Ye.default.createElement(Ye.default.Fragment,null,"\xA0",Ye.default.createElement("span",{style:{fontSize:"medium",color:"gray"}},"\u25B8"),"\xA0",Wa(se,se.getLinkedEntities(),ot,t,f))))}for(let Ge of Oe){let Qe=Ge.slice(26),ot=se.getLinkedEntities().get(Qe),at=ot?.type.indexOf("dataProperty")!==-1,ht=ot?.type.indexOf("objectProperty")!==-1,Mt=vt(se.properties[Ge]);for(let Ze of Mt)We.push(Ye.default.createElement(Ye.default.Fragment,null,Ye.default.createElement("i",{style:{color:"purple"}},"not")," ",rn(se,se.getLinkedEntities(),Qe,t,f),typeof Ze=="string"&&Ze.includes("http")?Ye.default.createElement(Ye.default.Fragment,null,"\xA0",Ye.default.createElement("span",{style:{fontSize:"medium",color:"gray"}},"\u25B8"),"\xA0",Wa(se,se.getLinkedEntities(),Ze,t,f)):ht?kM(typeof Ze=="string"?Ze:typeof Ze=="object"&&!Array.isArray(Ze)&&Ze.value?JSON.stringify(Ze.value):JSON.stringify(Ze)):at?Ye.default.createElement(Ye.default.Fragment,null,"\xA0",Ye.default.createElement("span",{style:{fontSize:"medium",color:"gray"}},"\u25B8"),"\xA0",Wa(se,se.getLinkedEntities(),Ze,t,f)):Ye.default.createElement(Ye.default.Fragment,null)))}return Ye.default.createElement(Ye.default.Fragment,null,We.length>0&&Ye.default.createElement(Ye.default.Fragment,null,Ye.default.createElement(kt,null,Ye.default.createElement("b",null,"Property assertions:"),We.length>1?Ye.default.createElement("ul",null,We.map(Ge=>Ye.default.createElement("li",{key:zr()},Ge)).sort()):Ye.default.createElement("p",null,We[0]))))}function de(se){return Ye.default.createElement(Ye.default.Fragment,null,se.getAnnotationPredicates().map(Se=>{let Oe=se.getAnnotationById(Se);return Oe.length==0?Ye.default.createElement(Ye.default.Fragment,null):Ye.default.createElement(kt,{grow:!1,key:Se},Ye.default.createElement("b",null,Js(Xg(Gg(se.getAnnotationTitleById(Se)))),":"),Oe.length>1?Ye.default.createElement("ul",null,Oe.map(be=>Ye.default.createElement("li",{key:zr(),id:be.value},fl(se,be,t,f)))):Ye.default.createElement("p",{key:zr()},fl(se,Oe[0],t,f)))}))}return Ye.default.createElement(Ye.default.Fragment,null,Ye.default.createElement(gs,{title:o?(i?Js(mk(i)):A&&S?Js(S.getType()):"")+" Information":"",layout:"horizontal"},I&&Ye.default.createElement($r,{size:"s"}),A&&S!==void 0&&Ye.default.createElement(fr,{...y},W(S),R(S),T1(S)&&Ye.default.createElement(Ye.default.Fragment,null,Y(S),B(S)),gd(S)&&Ye.default.createElement(Ye.default.Fragment,null,X(S),ae(S),Z(S)),Kg(S)&&Ye.default.createElement(Ye.default.Fragment,null,K(S)),de(S)),C&&Ye.default.createElement(fr,null,Vo(M,"information"))))}function Z2e(e,t,n){Y2e.default.render(EPt(e),t,n)}function EPt(e){let t=new Br;return Ye.default.createElement(Fr,{colorMode:"light"},Ye.default.createElement(Hr,{client:t},Ye.default.createElement(Q2e,{api:e.api,iri:e.iri,ontologyId:e.ontologyId,hasTitle:e.hasTitle,entityType:e.entityType,parameter:e.parameter,useLegacy:e.useLegacy,showBadges:e.showBadges})))}var eS=P(L(),1);var ebe=P(xo(),1);function tbe(e){let{apiQuery:t,buttonText:n,buttonSize:r}=e;return eS.default.createElement(K9,{href:t,target:"_blank",size:r||"m"},n)}function rbe(e,t,n){ebe.default.render(CPt(e),t,n)}function CPt(e){let t=new Br;return eS.default.createElement(Fr,{colorMode:"light"},eS.default.createElement(Hr,{client:t},eS.default.createElement(tbe,{apiQuery:e.apiQuery,buttonText:e.buttonText,buttonSize:e.buttonSize})))}var Wt=P(L(),1);var nbe=P(xo(),1),APt=!0;function obe(e){let{ontologyId:t,api:n,parameter:r,hasTitle:o=APt,useLegacy:i,showBadges:u,...f}=e,h=new un(n),{data:y,isLoading:O,isSuccess:S,isError:I,error:A}=on(["ontologyInfo",e],()=>h.getOntologyObject(t,r,i));function C(Z){return Wt.default.createElement(Wt.default.Fragment,null,(Z.getIri()||Z.getOntologyPurl())&&Wt.default.createElement(kt,null,Wt.default.createElement("b",null,"Ontology IRI:"),Wt.default.createElement("p",null,Wt.default.createElement("a",{id:"ontologyIri",href:Z.getIri()||Z.getOntologyPurl()},Z.getIri()||Z.getOntologyPurl()))))}function M(Z){return Wt.default.createElement(Wt.default.Fragment,null,Z.getVersionIri()&&Wt.default.createElement(kt,null,Wt.default.createElement("b",null,"Version IRI:"),Wt.default.createElement("p",null,Wt.default.createElement("a",{id:"versionIri",href:Z.getVersionIri()},Z.getVersionIri()))))}function W(Z){return Wt.default.createElement(Wt.default.Fragment,null,Z.getSourceFileTimestamp()&&Wt.default.createElement(kt,null,Wt.default.createElement("b",null,"Last loaded:"),Wt.default.createElement("p",null,new Date(Z.getSourceFileTimestamp()).toString())))}function R(Z){return Wt.default.createElement(Wt.default.Fragment,null,Z.getOntologyId()&&Wt.default.createElement(kt,null,Wt.default.createElement("b",null,"Ontology ID:"),Wt.default.createElement("p",null,Z.getOntologyId())))}function B(Z){return Wt.default.createElement(Wt.default.Fragment,null,Z.getVersion()&&Wt.default.createElement(kt,null,Wt.default.createElement("b",null,"Version:"),Wt.default.createElement("p",null,Z.getVersion())))}function Y(Z){return Wt.default.createElement(Wt.default.Fragment,null,Z.getNumClasses()&&Wt.default.createElement(kt,null,Wt.default.createElement("b",null,"Number of classes:"),Wt.default.createElement("p",null,Z.getNumClasses().toLocaleString())))}function X(Z){return Wt.default.createElement(Wt.default.Fragment,null,Z.getCreators().length>0&&Wt.default.createElement(Wt.default.Fragment,null,Wt.default.createElement(kt,null,Wt.default.createElement("b",null,"Creators:"),Z.getCreators().length>1?Wt.default.createElement("ul",null,Z.getCreators().map(K=>Wt.default.createElement("li",{key:K+zr()},Wa(Z,Z.getLinkedEntities(),K,n,u)))):Wt.default.createElement("p",null,Wa(Z,Z.getLinkedEntities(),Z.getCreators()[0],n,u))),Wt.default.createElement(bi,null)))}function ae(Z){return Wt.default.createElement(Wt.default.Fragment,null,Z.getAnnotationPredicates().map(K=>{let de=Z.getAnnotationById(K);return de.length==0?Wt.default.createElement(Wt.default.Fragment,null):Wt.default.createElement(kt,{grow:!1,key:K},Wt.default.createElement("b",null,Js(Xg(Gg(Z.getAnnotationTitleById(K)))),":"),de.length>1?Wt.default.createElement("ul",null,de.map(se=>Wt.default.createElement("li",{key:zr(),id:se.value},fl(Z,se,n,u)))):Wt.default.createElement("p",{key:zr()},fl(Z,de[0],n,u)))}))}return Wt.default.createElement(Wt.default.Fragment,null,Wt.default.createElement(gs,{title:o?"Ontology Information":"",layout:"horizontal"},O&&Wt.default.createElement($r,{size:"s"}),S&&y!==void 0&&Wt.default.createElement(fr,{...f},C(y),M(y),W(y),Wt.default.createElement(Wt.default.Fragment,null,R(y),B(y),Y(y)),ae(y)),I&&Wt.default.createElement(fr,null,Vo(A,"information"))))}function ibe(e,t,n){nbe.default.render(MPt(e),t,n)}function MPt(e){let t=new Br;return Wt.default.createElement(Fr,{colorMode:"light"},Wt.default.createElement(Hr,{client:t},Wt.default.createElement(obe,{ontologyId:e.ontologyId,api:e.api,parameter:e.parameter,useLegacy:e.useLegacy,showBadges:e.showBadges,hasTitle:e.hasTitle})))}var _o=P(L(),1);var abe=P(xo(),1),TPt=10,RPt=[10,25,50,100],zPt="config.preferredPrefix",LPt="asc";function lbe(e){let{api:t,initialEntriesPerPage:n=TPt,pageSizeOptions:r=RPt,initialSortField:o=zPt,initialSortDir:i=LPt,targetLink:u,parameter:f}=e,h=new un(t),[y,O]=(0,_o.useState)(0),[S,I]=(0,_o.useState)(n),[A,C]=(0,_o.useState)(o),[M,W]=(0,_o.useState)(i),[R,B]=(0,_o.useState)(0),Y=[{name:"Resource Name",field:"config.title",width:"15%",sortable:!0},{name:"Short Name",field:"config.preferredPrefix",render:be=>u?_o.default.createElement(U1,{href:u+"ontologies/"+be.toLowerCase()+"/"},be):be,width:"10%",sortable:!0},{name:"Description",field:"config.description",width:"30%",css:Ne` - display: block; - max-height: 200px; - overflow: auto; - `},{name:"Version",field:"config.version",width:"7.5%"},{name:"Loaded on",field:"loaded",width:"10%",dataType:"date",sortable:!0},{name:"Terms",field:"numberOfTerms",render:be=>_o.default.createElement(_o.default.Fragment,null,be.toLocaleString()),width:"7.5%",sortable:!0},{name:"Properties",field:"numberOfProperties",render:be=>_o.default.createElement(_o.default.Fragment,null,be.toLocaleString()),width:"7.5%",sortable:!0},{name:"Individuals",field:"numberOfIndividuals",render:be=>_o.default.createElement(_o.default.Fragment,null,be.toLocaleString()),width:"7.5%",sortable:!0},{width:"5%",actions:[...e.actions||[],{render:be=>_o.default.createElement(eu,{href:be.config.fileLocation,iconType:"download","aria-label":"Download",isDisabled:!be.config.allowDownload||be.config.fileLocation.startsWith("file://")})}]}],X={pageIndex:y,pageSize:S,totalItemCount:R,pageSizeOptions:r},ae={sort:{field:A,direction:M}},Z=({page:be,sort:Ue})=>{let{index:We,size:Ge}=be;if(O(We),I(Ge),Ue){let{field:Qe,direction:ot}=Ue;C(Qe),W(ot)}},{data:K,isSuccess:de,isLoading:se,isError:Se,error:Oe}=on([t,"ontologiesMetadata",S,y,A,M,f],async()=>h.getOntologies({size:S.toString(),page:y.toString()},{sortField:A,sortDir:M},void 0,e.parameter).then(be=>{if(be.page.totalElements!=null&&be._embedded&&be._embedded.ontologies)return B(be.page.totalElements),be._embedded.ontologies;throw new Error("Unexpected API response")}));return _o.default.createElement(_o.default.Fragment,null,de&&_o.default.createElement(mm,{columns:Y,items:K,onChange:Z,pagination:X,sorting:ae}),se&&_o.default.createElement(mm,{columns:Y,items:[],onChange:Z,pagination:X,sorting:ae,loading:!0}),Se&&_o.default.createElement(mm,{columns:Y,items:[],onChange:Z,pagination:X,sorting:ae,error:Vo(Oe,"resources")}))}function sbe(e,t,n){abe.default.render(DPt(e),t,n)}function DPt(e){let t=new Br;return _o.default.createElement(Fr,{colorMode:"light"},_o.default.createElement(Hr,{client:t},_o.default.createElement(lbe,{api:e.api,initialEntriesPerPage:e.initialEntriesPerPage,pageSizeOptions:e.pageSizeOptions,initialSortField:e.initialSortField,initialSortDir:e.initialSortDir,targetLink:e.targetLink,actions:e.actions,parameter:e.parameter})))}var Rl=P(L(),1);var ube=P(xo(),1);function cbe(e){let{api:t,query:n,onSearchValueChange:r,...o}=e,i=new un(t),[u,f]=(0,Rl.useState)(n),[h,y]=(0,Rl.useState)([]);(0,Rl.useEffect)(()=>{f(n)},[n]),(0,Rl.useEffect)(()=>{r(u)},[r,u]),on(["onChange",u],async()=>i.suggest({query:u},void 0,void 0,e.parameter).then(S=>{S.response&&S.response.docs&&y(S.response.docs.map(I=>({label:I.autosuggest,type:{color:"tint1",iconType:""}})))}));function O(S){f(S.label)}return Rl.default.createElement(Rl.default.Fragment,null,Rl.default.createElement(DA,{"aria-label":"Search for Concept",placeholder:"Search for Concept",isClearable:!0,...o,suggestions:h,onChange:f,onItemClick:O,value:u}))}function pbe(e,t,n){ube.default.render(NPt(e),t,n)}function NPt(e){let t=new Br;return Rl.default.createElement(Fr,{colorMode:"light"},Rl.default.createElement(Hr,{client:t},Rl.default.createElement(cbe,{api:e.api,query:e.query,onSearchValueChange:e.onSearchValueChange,parameter:e.parameter})))}var Jt=P(L(),1);var vu=P(L(),1);function fbe(e){let{api:t,result:n,targetLink:r,...o}=e;return vu.default.createElement(gs,{textAlign:"left",...o,href:r?n.type!="ontology"?r+"ontologies/"+n.ontology_name+"/"+_3(n.type,!0)+"?iri="+n.iri:r+"ontologies/"+n.ontology_name:void 0,title:vu.default.createElement(eo,null,vu.default.createElement(kt,{grow:!1},vu.default.createElement(Qv,null,vu.default.createElement("h2",null,n.label))),vu.default.createElement(kt,null,n.type!="ontology"&&vu.default.createElement(ym,{api:t,iri:n.iri,entityType:n.type,ontologyId:n.ontology_name})))},n.type!="ontology"?vu.default.createElement(Ey,{iri:n.iri}):void 0,vu.default.createElement(bi,{size:"s"}),vu.default.createElement(gM,{api:t,ontologyId:n.ontology_name,iri:n.iri,thingType:n.type}))}var dbe=P(xo(),1),FPt=10,WPt=[10,25,50,100];function mbe(e){let{api:t,query:n,parameter:r,initialItemsPerPage:o=FPt,itemsPerPageOptions:i=WPt,targetLink:u,...f}=e,h=new un(t),[y,O]=(0,Jt.useState)(n),[S,I]=(0,Jt.useState)(0),[A,C]=(0,Jt.useState)(0),[M,W]=(0,Jt.useState)(o),[R,B]=(0,Jt.useState)(0),[Y,X]=(0,Jt.useState)(!1),[ae,Z]=(0,Jt.useState)(!1),[K,de]=(0,Jt.useState)([]),[se,Se]=(0,Jt.useState)([]);(0,Jt.useEffect)(()=>{O(n)},[n]);function Oe(xt,wt,Ht,sr){if(xt.length==0)Ht(wt.reduce((Er,_r,pn,Dr)=>(pn%2===0&&Er.push({label:sr?sr(_r):_r,key:_r,append:"("+Dr[pn+1]+")",disabled:Dr[pn+1]==0,data:{totalCount:Dr[pn+1]}}),Er),[]));else{let Er=[];for(let _r=0;_r{if(pn%2===0){let Bt=Er.find(Dn=>Dn.key==_r);Bt&&(Bt.append="("+Dr[pn+1],Bt.data&&Dr[pn+1]xt.checked==="on",{data:Ue,isLoading:We,isSuccess:Ge,isError:Qe,error:ot}=on(["searchResults",t,y,Y,ae,S,M,K.filter(be).map(xt=>xt.key),se.filter(be).map(xt=>xt.key),r],async({signal:xt})=>h.search({query:y,exactMatch:Y,showObsoleteTerms:ae,types:K.filter(be).map(wt=>wt.key).join(","),ontology:se.filter(be).map(wt=>wt.key).join(","),groupByIri:!0},{page:S.toString(),size:M.toString()},void 0,e.parameter,xt).then(wt=>{if(wt.response&&wt.response.docs!=null&&wt.response.numFound!=null){wt.facet_counts&&wt.facet_counts.facet_fields&&(wt.facet_counts.facet_fields.type&&Oe(K,wt.facet_counts.facet_fields.type,de,sr=>`${sr[0].toUpperCase()}${sr.slice(1)}`),wt.facet_counts.facet_fields.ontology_name&&Oe(se,wt.facet_counts.facet_fields.ontology_name,Se,sr=>sr.toUpperCase())),B(wt.response.numFound);let Ht=Math.ceil(wt.response.numFound/M);return C(Ht),S>=Ht&&I(0),wt.response.docs}else throw new Error("Unexpected API response")}),{keepPreviousData:!0});function at(xt){I(Math.floor((S*M+1)/xt)),W(xt)}function ht(){X(!Y)}function Mt(){Z(!ae)}function Ze(xt,wt){let Ht=[...xt];wt(Ht.map(sr=>({...sr,checked:void 0})))}function Kt(){Ze(K,de),Ze(se,Se)}function it(xt){O(xt[0]?xt[0].label:"")}return Jt.default.createElement(Jt.default.Fragment,null,Jt.default.createElement(IM,{api:t,selectionChangedEvent:xt=>{it(xt)},allowCustomTerms:!0,singleSelection:!0,hasShortSelectedLabel:!0,placeholder:"Search"}),Jt.default.createElement(bi,{size:"s"}),Jt.default.createElement(eo,null,Jt.default.createElement(kt,{grow:3,style:{minWidth:250}},Jt.default.createElement(Vi,null,Ge&&Jt.default.createElement(gc,{label:"Filter by type"},Jt.default.createElement(wc,{options:K,onChange:de,listProps:{bordered:!0}},xt=>xt)),We&&Jt.default.createElement(gc,{label:"Filter by type"},Jt.default.createElement($r,{size:"s"})),Qe&&Jt.default.createElement(gc,{label:"Filter by type"},Jt.default.createElement(wc,{options:[],onChange:de,listProps:{bordered:!0}},xt=>xt)),Ge&&Jt.default.createElement(gc,{label:"Filter by ontology"},Jt.default.createElement(wc,{options:se,onChange:Se,listProps:{bordered:!0},searchable:!0},(xt,wt)=>Jt.default.createElement(Jt.default.Fragment,null,wt,xt))),We&&Jt.default.createElement(gc,{label:"Filter by ontology"},Jt.default.createElement($r,{size:"s"})),Qe&&Jt.default.createElement(gc,{label:"Filter by ontology"},Jt.default.createElement(wc,{options:[],onChange:Se,listProps:{bordered:!0},searchable:!0},(xt,wt)=>Jt.default.createElement(Jt.default.Fragment,null,wt,xt))),Jt.default.createElement(La,{onClick:Kt},"Clear all filters"))),Jt.default.createElement(kt,{grow:7},Jt.default.createElement(Vi,{color:"transparent",grow:!1},Jt.default.createElement(eo,null,Jt.default.createElement(kt,{grow:!1},Jt.default.createElement(j_,{label:"Exact match",checked:Y,onChange:ht})),Jt.default.createElement(kt,null,Jt.default.createElement(j_,{label:"Show only obsolete terms",checked:ae,onChange:Mt}))),Jt.default.createElement(bi,{size:"m"}),Jt.default.createElement(fr,{size:"xs",style:{padding:"0 8px"}},"Showing ",Math.min(S*M+1,R)," to ",Math.min((S+1)*M,R)," of ",R," results"),Jt.default.createElement(bi,{size:"s"}),Jt.default.createElement(qC,{margin:"none",style:{height:2}}),Jt.default.createElement(bi,{size:"s"}),Jt.default.createElement(lm,{"aria-label":"Search result pagination",pageCount:A,activePage:S,onChangePage:I,itemsPerPage:M,onChangeItemsPerPage:at,itemsPerPageOptions:i}),Jt.default.createElement(bi,{size:"s"}),Ue&&Ue.map(xt=>Jt.default.createElement(Jt.default.Fragment,{key:xt.id},Jt.default.createElement(fbe,{api:t,result:xt,targetLink:u}),Jt.default.createElement(bi,null)))))))}function hbe(e,t,n){dbe.default.render(BPt(e),t,n)}function BPt(e){let t=new Br;return Jt.default.createElement(Fr,{colorMode:"light"},Jt.default.createElement(Hr,{client:t},Jt.default.createElement(mbe,{api:e.api,query:e.query,parameter:e.parameter,initialItemsPerPage:e.initialItemsPerPage,itemsPerPageOptions:e.itemsPerPageOptions,targetLink:e.targetLink})))}var bt=P(L(),1);var vbe=P(xo(),1),HPt=!0;function VPt(e,t){let n=e.getRdfTypes().filter(r=>r!=="http://www.w3.org/2002/07/owl#NamedIndividual"&&!r.startsWith("http://www.w3.org/2000/01/rdf-schema#"));return e.getRdfTypes().length>0?bt.default.createElement(kt,null,bt.default.createElement("b",null,"Type"),Ay(e,e.getLinkedEntities(),n,t.api,t.showBadges)):bt.default.createElement(bt.default.Fragment,null)}function qPt(e,t){let n=e.getSameAs();return bt.default.createElement(bt.default.Fragment,null,n.length>0&&bt.default.createElement(kt,null,bt.default.createElement("b",null,"Same As"),Ay(e,e.getLinkedEntities(),n,t.api,t.showBadges)))}function UPt(e,t){let n=e.getDifferentFrom();return bt.default.createElement(bt.default.Fragment,null,n.length>0&&bt.default.createElement(kt,null,bt.default.createElement("b",null,"Different from"),Ay(e,e.getLinkedEntities(),n,t.api,t.showBadges)))}function $Pt(e,t){let n=e.getDisjointWith();return bt.default.createElement(bt.default.Fragment,null,n.length>0&&bt.default.createElement(kt,null,bt.default.createElement("b",null,"Disjoint with"),Ay(e,e.getLinkedEntities(),n,t.api,t.showBadges)))}function JPt(e,t){let n=e.getInverseOf();return bt.default.createElement(bt.default.Fragment,null,n.length>0&&bt.default.createElement(kt,null,bt.default.createElement("b",null,"Inverse of"),Ay(e,e.getLinkedEntities(),n,t.api,t.showBadges)))}function gbe(e,t,n){return vt(e).slice().reverse().map((r,o)=>bt.default.createElement("span",{key:r},rn(t,t.getLinkedEntities(),r,n.api,n.showBadges),bt.default.createElement(bt.default.Fragment,null,oo.value),r=n.filter(o=>Array.isArray(o)).length>0;return bt.default.createElement(bt.default.Fragment,null,n.length>0&&bt.default.createElement(kt,null,bt.default.createElement("b",null,r?"Property chains":"Property chain"),r?bt.default.createElement("ul",null,n.map(o=>bt.default.createElement("li",{key:zr()},gbe(o,e,t)))):bt.default.createElement("p",null,gbe(n,e,t))))}function XPt(e,t){let n=e.getEquivalents();return bt.default.createElement(bt.default.Fragment,null,n.length>0&&bt.default.createElement(kt,null,bt.default.createElement("b",null,"Equivalent to"),n.length===1?bt.default.createElement("p",null,fl(e,n[0],t.api,t.showBadges)):bt.default.createElement("ul",null,n.map(r=>bt.default.createElement("li",{key:zr()},fl(e,r,t.api,t.showBadges))))))}function KPt(e,t){let n=e.getSuperEntities();return bt.default.createElement(bt.default.Fragment,null,n.length>0&&bt.default.createElement(kt,null,bt.default.createElement("b",null,"Sub",e.getType()," of"),n.length===1?bt.default.createElement("p",null,fl(e,n[0],t.api,t.showBadges)):bt.default.createElement("ul",null,n.map(r=>bt.default.createElement("li",{key:zr()},fl(e,r,t.api,t.showBadges))))))}function YPt(e,t){let n=e.getRelatedFrom(),r=Array.from(new Set(n.map(o=>o.value.property)));return bt.default.createElement(bt.default.Fragment,null,n.length>0&&bt.default.createElement(kt,null,bt.default.createElement("b",null,"Related from"),r.map(o=>{let i=e.getLinkedEntities().getLabelForIri(o);return bt.default.createElement("div",{key:o.toString()+zr()},bt.default.createElement("div",null,bt.default.createElement("a",{style:{color:"black"},href:o},bt.default.createElement("i",null,i||o))),bt.default.createElement("ul",{style:{marginBottom:0}},n.filter(u=>u.value.property===o).map(u=>bt.default.createElement("li",{key:zr()},rn(e,e.getLinkedEntities(),u.value.value,t.api,t.showBadges)))),bt.default.createElement("p",null)," ")})))}function QPt(e,t,n){return t.length>0?bt.default.createElement(kt,null,bt.default.createElement("b",null,"Instances"),bt.default.createElement("ul",null,t.map(r=>bt.default.createElement("li",{key:zr()},Wa(e,e.getLinkedEntities(),r.getIri(),n.api,n.showBadges))))):bt.default.createElement(bt.default.Fragment,null)}async function ZPt(e,t,n){let r=encodeURIComponent(encodeURIComponent(e.getIri())),o=await t.getClassInstances(void 0,void 0,{ontologyId:n.ontologyId||e.getOntologyId(),termIri:r},n.parameter).catch(i=>console.log(i));if(o.elements!==void 0)return vt(o.elements).map(i=>Qg({elements:[i]}));throw Error("Error fetching instances of '"+n.iri+"'")}function ybe(e){let{api:t,iri:n,ontologyId:r,hasTitle:o=HPt,showBadges:i,entityType:u,parameter:f,...h}=e,y=new un(t),{data:O,isLoading:S,isSuccess:I,isError:A}=on(["entityJson",t,n,r,u,f,i],async()=>y.getEntityObject(n,u,r,f,!1)),{data:C,isLoading:M,isSuccess:W}=on({queryKey:["instancesJson",O],queryFn:async()=>O&&T1(O)&&O.hasDirectChildren()?ZPt(O,y,e):[],enabled:!!O});return bt.default.createElement(bt.default.Fragment,null,bt.default.createElement(gs,{title:o?(u?Js(mk(u)):I&&O?Js(O.getType()):"")+" Relations":"",layout:"horizontal"},(S||M)&&bt.default.createElement($r,{size:"s"}),A&&bt.default.createElement(fr,null,"Requested resource not available"),I&&W&&O!==void 0&&C!==void 0&&bt.default.createElement(fr,{...h},Kg(O)&&bt.default.createElement(bt.default.Fragment,null,VPt(O,e),qPt(O,e),UPt(O,e)),(gd(O)||T1(O))&&bt.default.createElement(bt.default.Fragment,null,$Pt(O,e)),gd(O)&&bt.default.createElement(bt.default.Fragment,null,JPt(O,e),GPt(O,e)),(gd(O)||T1(O))&&bt.default.createElement(bt.default.Fragment,null,XPt(O,e),KPt(O,e),YPt(O,e)),T1(O)&&bt.default.createElement(bt.default.Fragment,null,QPt(O,C,e)))))}function bbe(e,t,n){vbe.default.render(eEt(e),t,n)}function eEt(e){let t=new Br;return bt.default.createElement(Fr,{colorMode:"light"},bt.default.createElement(Hr,{client:t},bt.default.createElement(ybe,{api:e.api,iri:e.iri,ontologyId:e.ontologyId,hasTitle:e.hasTitle,entityType:e.entityType,parameter:e.parameter,showBadges:e.showBadges})))}window.SemLookPWidgets={createAutocomplete:$2e,createDataContent:X2e,createEntityInfo:Z2e,createEntityRelations:bbe,createJsonApi:rbe,createBreadcrumb:x2e,createDescription:y2e,createIri:w2e,createTab:N2e,createAlternativeNameTab:j2e,createCrossRefTab:P2e,createHierarchy:M2e,createHierarchyDeprecated:z2e,createTitle:B2e,createOntologyInfo:ibe,createResources:sbe,createSearchBar:pbe,createSearchResultsList:hbe,createMetadata:q2e};})(); +prefix > short_form: `+Pe.ontology_name+" > "+Pe.short_form,color:Le},qn.default.createElement("span",null,qn.default.createElement(fu,{search:_e},Pe.label),"\xA0\xA0\xA0\xA0\xA0",qn.default.createElement(ym,{api:t,entityType:Pe.type,ontologyId:Pe.ontology_name,iri:Pe.iri,colorFirst:"primary",colorSecond:"success",parameter:Pe.parameter})))}},{isLoading:X}=an(["onMount",u],async()=>{let se=[],_e=[...new Set(u)].filter(be=>o&&be.label||be.iri);if(_e.length>0){h&&(_e=[_e[0]]);for(let be of _e)be&&be.iri&&be.iri.startsWith("http")?await O.select({query:be.iri},void 0,void 0,n).then(Pe=>{Pe.response&&Pe.response.docs&&(Pe.response.docs.map(Ue=>{be.iri===Ue.iri&&se.push({label:r?Ue.label:Z(Ue),key:Ue.iri,value:{iri:Ue.iri,label:Ue.label,ontology_name:Ue.ontology_name,type:Ue.type,short_form:Ue.short_form,description:Ue.description?.join()}})}),h&&se.length>1&&(se=[se[0]]))}):be&&be.label&&o&&se.push({label:be.label,key:be.label,value:{iri:"",label:"",ontology_name:"",type:"",short_form:"",description:""}});F(se),B(se)}}),{isLoading:le}=an(["onSearchChange",A],async()=>{if(A.length>0)return O.select({query:A},void 0,void 0,n).then(se=>{se.response&&se.response.docs&&F(se.response.docs.map(_e=>({label:r?_e.label:Z(_e),key:_e.iri,value:{iri:_e.iri,label:_e.label,ontology_name:_e.ontology_name,type:_e.type,short_form:_e.short_form,description:_e.description?.join()}})))})});(0,qn.useEffect)(()=>{i(R.map(se=>o&&se.value.iri==""?{iri:"",label:se.label,ontology_name:"",type:"",short_form:se.value.short_form,description:se.value.description}:se.value.iri==""?{iri:"",label:"",ontology_name:"",type:"",short_form:"",description:""}:{iri:se.value.iri,label:se.value.label,ontology_name:se.value.ontology_name,type:se.value.type,short_form:se.value.short_form,description:se.value.description}))},[R]);function Z(se){return se.label+" ("+se.ontology_name.toUpperCase()+" "+se.short_form+")"}function K(se){B(se)}function de(se){let _e={label:se,value:{iri:"",label:"",ontology_name:"",type:"",short_form:"",description:""}};F([...M,_e]),B(h?[_e]:[...R,_e])}return qn.default.createElement(D_,{isClearable:!0,"aria-label":"searchBar",fullWidth:!0,...y,async:!0,isLoading:le||X,singleSelection:h?{asPlainText:!0}:!1,placeholder:f||"Search for a Concept",options:M,selectedOptions:R,onSearchChange:C,onChange:K,renderOption:Y,onCreateOption:o?de:void 0,rowHeight:50})}function X2e(e,t,n){G2e.default.render(kkt(e),t,n)}function kkt(e){let t=new Wr;return qn.default.createElement(Nr,{colorMode:"light"},qn.default.createElement(Br,{client:t},qn.default.createElement(AM,{api:e.api,parameter:e.parameter,selectionChangedEvent:e.selectionChangedEvent,preselected:e.preselected,singleSelection:e.singleSelection,placeholder:e.placeholder,hasShortSelectedLabel:e.hasShortSelectedLabel,allowCustomTerms:e.allowCustomTerms})))}var wi=k(L());var K2e=k(_o());function Y2e(e){let{api:t,parameter:n,...r}=e,o=new fn(t),{data:i,isLoading:u,isError:f,dataUpdatedAt:h}=an(["ontologiesData",t,n],async()=>o.getOntologiesData(e.parameter));return wi.default.createElement(wi.default.Fragment,null,wi.default.createElement(ys,{title:"Data Content",description:h?`Updated ${new Date(h).toLocaleString()}`:"",layout:"horizontal"},wi.default.createElement(ar,{...r},f&&wi.default.createElement(ar,null,"No data content available"),u?wi.default.createElement($r,{size:"s"}):wi.default.createElement("ul",null,i?.getTotalOntologies()?wi.default.createElement("li",null,i?.getTotalOntologies().toLocaleString()," ontologies and terminologies"):wi.default.createElement("li",{style:{fontStyle:"italic"}},"ontology number not available"),i?.getNumClasses()?wi.default.createElement("li",null,i?.getNumClasses().toLocaleString()," terms"):wi.default.createElement("li",{style:{fontStyle:"italic"}},"term number not available"),i?.getNumProperties()?wi.default.createElement("li",null,i?.getNumProperties().toLocaleString()," properties"):wi.default.createElement("li",{style:{fontStyle:"italic"}},"property number not available"),i?.getNumIndividuals()?wi.default.createElement("li",null,i?.getNumIndividuals().toLocaleString()," individuals"):wi.default.createElement("li",{style:{fontStyle:"italic"}},"individual number not available")," "))))}function Q2e(e,t,n){K2e.default.render(Ekt(e),t,n)}function Ekt(e){let t=new Wr;return wi.default.createElement(Nr,{colorMode:"light"},wi.default.createElement(Br,{client:t},wi.default.createElement(Y2e,{api:e.api,parameter:e.parameter})))}var Qe=k(L());var Be=k(L());var rS=!0;function MM(e){return Be.default.createElement(EE,{type:"iInCircle",color:"subdued",content:e})}function Ckt(e,t){let n=Object.keys(t).map(r=>{let o=e.getLinkedEntities().getLabelForIri(r)||r;return o?"*"+t[r]+" ("+o+")":""}).join(` +`);return MM(n)}function Wa(e,t,n,r,o=rS){let i=$ie(r),u=t.getLabelForIri(n)||n.split("/").pop()||n,f=t.get(n),h=e.getOntologyId();if(e.getType()!=="ontology"&&n===e?.getIri())return Be.default.createElement("b",null,e.getLabel());if(!f)return n.startsWith("http")?Be.default.createElement("a",{href:n},u):Be.default.createElement("span",null,u);let y=f.definedBy?f.definedBy.filter(S=>S!==h):[],O=f.type;return y.length===1?f.hasLocalDefinition?Be.default.createElement(Be.default.Fragment,null,Be.default.createElement("a",{href:i+vd(h,n,O)},u),o?Be.default.createElement(Be.default.Fragment,null,"\xA0",Be.default.createElement("a",{href:i+vd(y[0],n,O)},Be.default.createElement(Oo,{color:"success"},y[0].toUpperCase()))):Be.default.createElement(Be.default.Fragment,null)):Be.default.createElement(Be.default.Fragment,null,Be.default.createElement("a",{href:i+vd(y[0],n,O)},u),o?Be.default.createElement(Be.default.Fragment,null,"\xA0",Be.default.createElement("a",{href:i+vd(y[0],n,O)},Be.default.createElement(Oo,{color:"success"},y[0].toUpperCase()))):Be.default.createElement(Be.default.Fragment,null)):y.length>1?f.hasLocalDefinition?Be.default.createElement(Be.default.Fragment,null,Be.default.createElement("a",{href:i+vd(h,n,O)},u),o?Be.default.createElement(Be.default.Fragment,null,"\xA0",y.map(S=>Be.default.createElement("a",{key:zr(),href:i+vd(S,n,O)},Be.default.createElement(Oo,{color:"success"},S.toUpperCase())))):Be.default.createElement(Be.default.Fragment,null)):Be.default.createElement(Be.default.Fragment,null,Be.default.createElement("a",{href:n},u),o?Be.default.createElement(Be.default.Fragment,null,"\xA0",Be.default.createElement("a",{key:zr(),href:i+`/search?q=${encodeURIComponent(u)}&exactMatch=true`},Be.default.createElement(Oo,{color:"success"},Be.default.createElement(ir,{type:"search",size:"s"}),"\xA0",y.length,"\xA0","ontologies"))):Be.default.createElement(Be.default.Fragment,null)):f.hasLocalDefinition?Be.default.createElement(Be.default.Fragment,null,Be.default.createElement("a",{href:i+vd(h,n,O)},u)):parseInt(f.numAppearsIn)>0?Be.default.createElement(Be.default.Fragment,null,Be.default.createElement("a",{href:n},u),o?Be.default.createElement(Be.default.Fragment,null,"\xA0",Be.default.createElement("a",{key:zr(),href:i+`/search?q=${encodeURIComponent(u)}&exactMatch=true`},Be.default.createElement(Oo,{color:"success"},Be.default.createElement(ir,{type:"search",size:"s"}),"\xA0",f.numAppearsIn,"\xA0",parseInt(f.numAppearsIn)>1?"ontologies":"ontology"))):Be.default.createElement(Be.default.Fragment,null)):Be.default.createElement(Be.default.Fragment,null,Be.default.createElement("a",{href:n},u))}function rn(e,t,n,r,o=rS){let i=Be.default.createElement(Be.default.Fragment,null);if(t=t.mergeWith(n.linkedEntities),typeof n=="string")i=Wa(e,t,n,r,o);else if(typeof n=="object"&&!Array.isArray(n)&&Array.isArray(n.type)&&n.type.indexOf("reification")!==-1)i=dl(e,Rt.fromJson(n)[0],r,o);else{let u=n["http://www.w3.org/2002/07/owl#someValuesFrom"],f=n["http://www.w3.org/2002/07/owl#allValuesFrom"],h=yt(n["http://www.w3.org/2002/07/owl#intersectionOf"]),y=yt(n["http://www.w3.org/2002/07/owl#unionOf"]),O=n["http://www.w3.org/2002/07/owl#hasValue"],S=n["http://www.w3.org/2002/07/owl#minCardinality"]||n["http://www.w3.org/2002/07/owl#minQualifiedCardinality"],I=n["http://www.w3.org/2002/07/owl#maxCardinality"]||n["http://www.w3.org/2002/07/owl#maxQualifiedCardinality"],A=n["http://www.w3.org/2002/07/owl#cardinality"]||n["http://www.w3.org/2002/07/owl#qualifiedCardinality"],C=n["http://www.w3.org/2002/07/owl#hasSelf"],M=n["http://www.w3.org/2002/07/owl#complementOf"],F=yt(n["http://www.w3.org/2002/07/owl#oneOf"]),R=n["http://www.w3.org/2002/07/owl#inverseOf"],B=n["http://www.w3.org/2002/07/owl#onProperty"],Y=n["http://www.w3.org/2002/07/owl#onDatatype"];if(Y){let X=[rn(e,t,Y,r,o)],le=yt(n["http://www.w3.org/2002/07/owl#withRestrictions"]);if(le.length>0){X.push(Be.default.createElement(Be.default.Fragment,null,"["));let Z=!0;for(let K of le){Z?Z=!1:X.push(Be.default.createElement(Be.default.Fragment,null,",\xA0"));let de=K["http://www.w3.org/2001/XMLSchema#minExclusive"],se=K["http://www.w3.org/2001/XMLSchema#minInclusive"],_e=K["http://www.w3.org/2001/XMLSchema#maxExclusive"],be=K["http://www.w3.org/2001/XMLSchema#maxInclusive"];de?X.push(Be.default.createElement(Be.default.Fragment,null,"> ",de)):se?X.push(Be.default.createElement(Be.default.Fragment,null,"\u2265 ",se)):_e?X.push(Be.default.createElement(Be.default.Fragment,null,"< ",_e)):be&&X.push(Be.default.createElement(Be.default.Fragment,null,"\u2264 ",be))}X.push(Be.default.createElement(Be.default.Fragment,null,"]"))}i=Be.default.createElement(Be.default.Fragment,null,X.map(Z=>Be.default.createElement("span",{key:zr()},Z)))}else if(u)i=Be.default.createElement(Be.default.Fragment,null,rn(e,t,B,r,o),Be.default.createElement("i",{style:{color:"purple"}}," some "),rn(e,t,yt(u)[0],r,o));else if(f)i=Be.default.createElement(Be.default.Fragment,null,rn(e,t,B,r,o),Be.default.createElement("i",{style:{color:"purple"}}," only "),rn(e,t,yt(f)[0],r,o));else if(h.length>0){let X=[Be.default.createElement("span",{key:zr(),className:"text-neutral-default"},"(")];for(let le of h)X.length>1&&X.push(Be.default.createElement("i",null," and ")),X.push(rn(e,t,le,r,o));X.push(Be.default.createElement("span",{className:"text-neutral-default"},")")),i=Be.default.createElement("span",null,X.map(le=>Be.default.createElement("span",{key:zr()},le)))}else if(y.length>0){let X=[Be.default.createElement("span",{key:zr(),className:"text-neutral-default"},"(")];for(let le of y)X.length>1&&X.push(Be.default.createElement("i",null," or ")),X.push(rn(e,t,le,r,o));X.push(Be.default.createElement("span",{className:"text-neutral-default"},")")),i=Be.default.createElement("span",null,X.map(le=>Be.default.createElement("span",{key:zr()},le)))}else if(O)i=Be.default.createElement(Be.default.Fragment,null,rn(e,t,B,r,o),Be.default.createElement("i",{style:{color:"purple"}}," value "),rn(e,t,yt(O)[0],r,o));else if(S)i=Be.default.createElement(Be.default.Fragment,null,rn(e,t,B,r,o),Be.default.createElement("i",{style:{color:"purple"}}," min "),rn(e,t,yt(S)[0],r,o));else if(I)i=Be.default.createElement(Be.default.Fragment,null,rn(e,t,B,r,o),Be.default.createElement("i",{style:{color:"purple"}}," max "),rn(e,t,yt(I)[0],r,o));else if(A)i=Be.default.createElement(Be.default.Fragment,null,rn(e,t,B,r,o),Be.default.createElement("i",{style:{color:"purple"}}," exactly "),rn(e,t,yt(A)[0],r,o));else if(C)i=Be.default.createElement(Be.default.Fragment,null,rn(e,t,B,r,o),Be.default.createElement("i",{style:{color:"purple"}}," Self "),rn(e,t,yt(C)[0],r,o));else if(M)i=Be.default.createElement(Be.default.Fragment,null,Be.default.createElement("i",null,"not "),rn(e,t,yt(M)[0],r,o));else if(F.length>0){let X=[Be.default.createElement("span",{key:zr(),className:"text-neutral-default"},"{")];for(let le of F)X.length>1&&X.push(Be.default.createElement("span",{key:zr(),className:"text-neutral-default"},",\xA0")),X.push(rn(e,t,le,r,o));X.push(Be.default.createElement("span",{className:"text-neutral-default"},"}")),i=Be.default.createElement("span",null,X.map(le=>Be.default.createElement("span",{key:zr()},le)))}else R&&(i=Be.default.createElement(Be.default.Fragment,null,Be.default.createElement("i",{style:{color:"purple"}},"inverse "),Be.default.createElement("span",{key:zr(),className:"text-neutral-default"},"("),rn(e,t,R,r,o),Be.default.createElement("span",{key:zr(),className:"text-neutral-default"},")")))}return i}function Ty(e,t,n,r,o=rS){return Be.default.createElement(Be.default.Fragment,null,n.length===1?Be.default.createElement("p",null,rn(e,e.getLinkedEntities(),n[0],r,o)):Be.default.createElement("ul",null,n.map(i=>Be.default.createElement("li",{key:zr()},rn(e,e.getLinkedEntities(),i,r,o)))))}function Z2e(e,t,n,r,o=rS){let i=[];if(n)for(let y of Object.keys(n.linkedEntities))for(let O=t.indexOf(y,0);O!==-1;O=t.indexOf(y,O))i.push({start:O,end:O+y.length,link:Wa(e,n,y,r,o)}),O+=y.length;let u=/[A-z]+:\/\/[^\s]+/g;for(let y=u.exec(t);y;y=u.exec(t)){let O=y[0];i.push({start:y.index,end:y.index+O.length,link:Be.default.createElement("span",{key:zr()},Be.default.createElement("a",{href:O},O))})}i.sort((y,O)=>y.start-O.start);e:for(let y=0;y=I.start&&I.end>=S.start){S.end-S.startO.getEntityObject(n,i,r,u,h));function F(se){return Qe.default.createElement(Qe.default.Fragment,null,se.getLabel()&&Qe.default.createElement(Qe.default.Fragment,null,Qe.default.createElement(Mt,null,Qe.default.createElement("b",null,"Label:"),se.getLabel()),Qe.default.createElement(Jo,null)))}function R(se){return Qe.default.createElement(Qe.default.Fragment,null,se.getSynonyms().length>0&&Qe.default.createElement(Qe.default.Fragment,null,Qe.default.createElement(Mt,null,Qe.default.createElement("b",null,"Synonyms:"),se.getSynonyms().length>1?Qe.default.createElement("ul",null,se.getSynonyms().map(_e=>Qe.default.createElement("li",{key:zr(),id:_e.value},dl(se,_e,t,f)))):Qe.default.createElement("p",null,dl(se,se.getSynonyms()[0],t,f)))))}function B(se){let _e=se.getHasKey();return Qe.default.createElement(Qe.default.Fragment,null,_e.length>0&&Qe.default.createElement(Qe.default.Fragment,null,Qe.default.createElement(Mt,null,Qe.default.createElement("b",null,"Has Key:"),_e.length>1?Qe.default.createElement("ul",null,_e.map(be=>Qe.default.createElement("li",{key:zr()},rn(se,se.getLinkedEntities(),be,t,f)))):Qe.default.createElement("p",null,rn(se,se.getLinkedEntities(),_e[0],t,f)))))}function Y(se){return Qe.default.createElement(Qe.default.Fragment,null,se.getSubsets().length>0&&Qe.default.createElement(Qe.default.Fragment,null,Qe.default.createElement(Mt,null,Qe.default.createElement("b",null,"In Subsets:"),se.getSubsets().length>1?Qe.default.createElement("ul",null,se.getSubsets().map(_e=>Qe.default.createElement("li",{key:zr(),id:_e+zr()},Wa(se,se.getLinkedEntities(),_e,t,f)))):Qe.default.createElement("p",null,Wa(se,se.getLinkedEntities(),se.getSubsets()[0],t,f)))))}function X(se){let _e=se.getRdfTypes().map(be=>({"http://www.w3.org/2002/07/owl#FunctionalProperty":"Functional","http://www.w3.org/2002/07/owl#InverseFunctionalProperty":"Inverse Functional","http://www.w3.org/2002/07/owl#TransitiveProperty":"Transitive","http://www.w3.org/2002/07/owl#SymmetricProperty":"Symmetric","http://www.w3.org/2002/07/owl#AsymmetricProperty":"Asymmetric","http://www.w3.org/2002/07/owl#ReflexiveProperty":"Reflexive","http://www.w3.org/2002/07/owl#IrreflexiveProperty":"Irreflexive"})[be]).filter(be=>!!be);return Qe.default.createElement(Qe.default.Fragment,null,_e.length>0&&Qe.default.createElement(Qe.default.Fragment,null,Qe.default.createElement(Mt,null,Qe.default.createElement("b",null,"Characteristics:"),_e.length>1?Qe.default.createElement("ul",null,_e.map(be=>Qe.default.createElement("li",{key:zr()},be)).sort()):Qe.default.createElement("p",null,_e[0]))))}function le(se){let _e=se.getDomain();return Qe.default.createElement(Qe.default.Fragment,null,_e.length>0&&Qe.default.createElement(Qe.default.Fragment,null,Qe.default.createElement(Mt,null,Qe.default.createElement("b",null,"Domain:"),_e.length>1?Qe.default.createElement("ul",null,_e.map(be=>Qe.default.createElement("li",{key:zr()},rn(se,se.getLinkedEntities(),be,t,f)))):Qe.default.createElement("p",null,rn(se,se.getLinkedEntities(),_e[0],t,f)))))}function Z(se){let _e=se.getRange();return Qe.default.createElement(Qe.default.Fragment,null,_e.length>0&&Qe.default.createElement(Mt,null,Qe.default.createElement("b",null,"Range:"),_e.length>1?Qe.default.createElement("ul",null,_e.map(be=>Qe.default.createElement("li",{key:zr()},rn(se,se.getLinkedEntities(),be,t,f)))):Qe.default.createElement("p",null,rn(se,se.getLinkedEntities(),_e[0],t,f))))}function K(se){let _e=Object.keys(se.properties),be=_e.filter(Ge=>Ge.startsWith("negativePropertyAssertion+")),Pe=_e.filter(Ge=>se.getLinkedEntities().get(Ge)&&se.getLinkedEntities().get(Ge)?.type.indexOf("objectProperty")!==-1),Ue=_e.filter(Ge=>se.getLinkedEntities().get(Ge)&&se.getLinkedEntities().get(Ge)?.type.indexOf("dataProperty")!==-1),Le=[];for(let Ge of Pe){let Ke=yt(se.properties[Ge]);for(let rt of Ke)Le.push(Qe.default.createElement(Qe.default.Fragment,null,rn(se,se.getLinkedEntities(),Ge,t,f),typeof rt=="string"&&rt.includes("http")?Qe.default.createElement(Qe.default.Fragment,null,"\xA0",Qe.default.createElement("span",{style:{fontSize:"medium",color:"gray"}},"\u25B8"),"\xA0",Wa(se,se.getLinkedEntities(),rt,t,f)):MM(typeof rt=="string"?rt:typeof rt=="object"&&!Array.isArray(rt)&&rt.value?JSON.stringify(rt.value):JSON.stringify(rt))))}for(let Ge of Ue){let Ke=yt(se.properties[Ge]);for(let rt of Ke)Le.push(Qe.default.createElement(Qe.default.Fragment,null,rn(se,se.getLinkedEntities(),Ge,t,f),Qe.default.createElement(Qe.default.Fragment,null,"\xA0",Qe.default.createElement("span",{style:{fontSize:"medium",color:"gray"}},"\u25B8"),"\xA0",Wa(se,se.getLinkedEntities(),rt,t,f))))}for(let Ge of be){let Ke=Ge.slice(26),rt=se.getLinkedEntities().get(Ke),ot=rt?.type.indexOf("dataProperty")!==-1,dt=rt?.type.indexOf("objectProperty")!==-1,jt=yt(se.properties[Ge]);for(let Ze of jt)Le.push(Qe.default.createElement(Qe.default.Fragment,null,Qe.default.createElement("i",{style:{color:"purple"}},"not")," ",rn(se,se.getLinkedEntities(),Ke,t,f),typeof Ze=="string"&&Ze.includes("http")?Qe.default.createElement(Qe.default.Fragment,null,"\xA0",Qe.default.createElement("span",{style:{fontSize:"medium",color:"gray"}},"\u25B8"),"\xA0",Wa(se,se.getLinkedEntities(),Ze,t,f)):dt?MM(typeof Ze=="string"?Ze:typeof Ze=="object"&&!Array.isArray(Ze)&&Ze.value?JSON.stringify(Ze.value):JSON.stringify(Ze)):ot?Qe.default.createElement(Qe.default.Fragment,null,"\xA0",Qe.default.createElement("span",{style:{fontSize:"medium",color:"gray"}},"\u25B8"),"\xA0",Wa(se,se.getLinkedEntities(),Ze,t,f)):Qe.default.createElement(Qe.default.Fragment,null)))}return Qe.default.createElement(Qe.default.Fragment,null,Le.length>0&&Qe.default.createElement(Qe.default.Fragment,null,Qe.default.createElement(Mt,null,Qe.default.createElement("b",null,"Property assertions:"),Le.length>1?Qe.default.createElement("ul",null,Le.map(Ge=>Qe.default.createElement("li",{key:zr()},Ge)).sort()):Qe.default.createElement("p",null,Le[0]))))}function de(se){return Qe.default.createElement(Qe.default.Fragment,null,se.getAnnotationPredicates().map(_e=>{let be=se.getAnnotationById(_e);return be.length==0?Qe.default.createElement(Qe.default.Fragment,null):Qe.default.createElement(Mt,{grow:!1,key:_e},Qe.default.createElement("b",null,Ks(Xg(Gg(se.getAnnotationTitleById(_e)))),":"),be.length>1?Qe.default.createElement("ul",null,be.map(Pe=>Qe.default.createElement("li",{key:zr(),id:Pe.value},dl(se,Pe,t,f)))):Qe.default.createElement("p",{key:zr()},dl(se,be[0],t,f)))}))}return Qe.default.createElement(Qe.default.Fragment,null,Qe.default.createElement(ys,{title:o?(i?Ks(vP(i)):A&&S?Ks(S.getType()):"")+" Information":"",layout:"horizontal"},I&&Qe.default.createElement($r,{size:"s"}),A&&S!==void 0&&Qe.default.createElement(ar,{...y},F(S),R(S),R1(S)&&Qe.default.createElement(Qe.default.Fragment,null,Y(S),B(S)),yd(S)&&Qe.default.createElement(Qe.default.Fragment,null,X(S),le(S),Z(S)),Kg(S)&&Qe.default.createElement(Qe.default.Fragment,null,K(S)),de(S)),C&&Qe.default.createElement(ar,null,gi(M,"information"))))}function rbe(e,t,n){ebe.default.render(Mkt(e),t,n)}function Mkt(e){let t=new Wr;return Qe.default.createElement(Nr,{colorMode:"light"},Qe.default.createElement(Br,{client:t},Qe.default.createElement(tbe,{api:e.api,iri:e.iri,ontologyId:e.ontologyId,hasTitle:e.hasTitle,entityType:e.entityType,parameter:e.parameter,useLegacy:e.useLegacy,showBadges:e.showBadges})))}var nS=k(L());var nbe=k(_o());function obe(e){let{apiQuery:t,buttonText:n,buttonSize:r}=e;return nS.default.createElement(Q9,{href:t,target:"_blank",size:r||"m"},n)}function ibe(e,t,n){nbe.default.render(Tkt(e),t,n)}function Tkt(e){let t=new Wr;return nS.default.createElement(Nr,{colorMode:"light"},nS.default.createElement(Br,{client:t},nS.default.createElement(obe,{apiQuery:e.apiQuery,buttonText:e.buttonText,buttonSize:e.buttonSize})))}var Wt=k(L());var abe=k(_o()),Rkt=!0;function lbe(e){let{ontologyId:t,api:n,parameter:r,hasTitle:o=Rkt,useLegacy:i,showBadges:u,...f}=e,h=new fn(n),{data:y,isLoading:O,isSuccess:S,isError:I,error:A}=an(["ontologyInfo",e],()=>h.getOntologyObject(t,r,i));function C(Z){return Wt.default.createElement(Wt.default.Fragment,null,(Z.getIri()||Z.getOntologyPurl())&&Wt.default.createElement(Mt,null,Wt.default.createElement("b",null,"Ontology IRI:"),Wt.default.createElement("p",null,Wt.default.createElement("a",{id:"ontologyIri",href:Z.getIri()||Z.getOntologyPurl()},Z.getIri()||Z.getOntologyPurl()))))}function M(Z){return Wt.default.createElement(Wt.default.Fragment,null,Z.getVersionIri()&&Wt.default.createElement(Mt,null,Wt.default.createElement("b",null,"Version IRI:"),Wt.default.createElement("p",null,Wt.default.createElement("a",{id:"versionIri",href:Z.getVersionIri()},Z.getVersionIri()))))}function F(Z){return Wt.default.createElement(Wt.default.Fragment,null,Z.getSourceFileTimestamp()&&Wt.default.createElement(Mt,null,Wt.default.createElement("b",null,"Last loaded:"),Wt.default.createElement("p",null,new Date(Z.getSourceFileTimestamp()).toString())))}function R(Z){return Wt.default.createElement(Wt.default.Fragment,null,Z.getOntologyId()&&Wt.default.createElement(Mt,null,Wt.default.createElement("b",null,"Ontology ID:"),Wt.default.createElement("p",null,Z.getOntologyId())))}function B(Z){return Wt.default.createElement(Wt.default.Fragment,null,Z.getVersion()&&Wt.default.createElement(Mt,null,Wt.default.createElement("b",null,"Version:"),Wt.default.createElement("p",null,Z.getVersion())))}function Y(Z){return Wt.default.createElement(Wt.default.Fragment,null,Z.getNumClasses()&&Wt.default.createElement(Mt,null,Wt.default.createElement("b",null,"Number of classes:"),Wt.default.createElement("p",null,Z.getNumClasses().toLocaleString())))}function X(Z){return Wt.default.createElement(Wt.default.Fragment,null,Z.getCreators().length>0&&Wt.default.createElement(Wt.default.Fragment,null,Wt.default.createElement(Mt,null,Wt.default.createElement("b",null,"Creators:"),Z.getCreators().length>1?Wt.default.createElement("ul",null,Z.getCreators().map(K=>Wt.default.createElement("li",{key:K+zr()},Wa(Z,Z.getLinkedEntities(),K,n,u)))):Wt.default.createElement("p",null,Wa(Z,Z.getLinkedEntities(),Z.getCreators()[0],n,u))),Wt.default.createElement(Jo,null)))}function le(Z){return Wt.default.createElement(Wt.default.Fragment,null,Z.getAnnotationPredicates().map(K=>{let de=Z.getAnnotationById(K);return de.length==0?Wt.default.createElement(Wt.default.Fragment,null):Wt.default.createElement(Mt,{grow:!1,key:K},Wt.default.createElement("b",null,Ks(Xg(Gg(Z.getAnnotationTitleById(K)))),":"),de.length>1?Wt.default.createElement("ul",null,de.map(se=>Wt.default.createElement("li",{key:zr(),id:se.value},dl(Z,se,n,u)))):Wt.default.createElement("p",{key:zr()},dl(Z,de[0],n,u)))}))}return Wt.default.createElement(Wt.default.Fragment,null,Wt.default.createElement(ys,{title:o?"Ontology Information":"",layout:"horizontal"},O&&Wt.default.createElement($r,{size:"s"}),S&&y!==void 0&&Wt.default.createElement(ar,{...f},C(y),M(y),F(y),Wt.default.createElement(Wt.default.Fragment,null,R(y),B(y),Y(y)),le(y)),I&&Wt.default.createElement(ar,null,gi(A,"information"))))}function sbe(e,t,n){abe.default.render(zkt(e),t,n)}function zkt(e){let t=new Wr;return Wt.default.createElement(Nr,{colorMode:"light"},Wt.default.createElement(Br,{client:t},Wt.default.createElement(lbe,{ontologyId:e.ontologyId,api:e.api,parameter:e.parameter,useLegacy:e.useLegacy,showBadges:e.showBadges,hasTitle:e.hasTitle})))}var Sn=k(L());var ube=k(_o()),Lkt=10,Dkt=[10,25,50,100],Nkt="config.preferredPrefix",Fkt="asc";function cbe(e){let{api:t,initialEntriesPerPage:n=Lkt,pageSizeOptions:r=Dkt,initialSortField:o=Nkt,initialSortDir:i=Fkt,targetLink:u,parameter:f}=e,h=new fn(t),[y,O]=(0,Sn.useState)(0),[S,I]=(0,Sn.useState)(n),[A,C]=(0,Sn.useState)(o),[M,F]=(0,Sn.useState)(i),R=[{name:"Resource Name",field:"config.title",width:"15%",sortable:!0},{name:"Short Name",field:"config.preferredPrefix",render:Le=>u?Sn.default.createElement(J1,{href:u+"ontologies/"+Le.toLowerCase()+"/"},Le):Le,width:"10%",sortable:!0},{name:"Description",field:"config.description",width:"30%",css:Fe` + display: block; + max-height: 200px; + overflow: auto; + `},{name:"Version",field:"config.version",width:"7.5%"},{name:"Loaded on",field:"loaded",width:"10%",dataType:"date",sortable:!0},{name:"Terms",field:"numberOfTerms",render:Le=>Sn.default.createElement(Sn.default.Fragment,null,Le.toLocaleString()),width:"7.5%",sortable:!0},{name:"Properties",field:"numberOfProperties",render:Le=>Sn.default.createElement(Sn.default.Fragment,null,Le.toLocaleString()),width:"7.5%",sortable:!0},{name:"Individuals",field:"numberOfIndividuals",render:Le=>Sn.default.createElement(Sn.default.Fragment,null,Le.toLocaleString()),width:"7.5%",sortable:!0},{width:"5%",actions:[...e.actions||[],{render:Le=>Sn.default.createElement(sl,{href:Le.config.fileLocation,iconType:"download","aria-label":"Download",isDisabled:!Le.config.allowDownload||Le.config.fileLocation.startsWith("file://")})}]}],B=({page:Le,sort:Ge})=>{let{index:Ke,size:rt}=Le;if(O(Ke),I(rt),Ge){let{field:ot,direction:dt}=Ge;C(ot),F(dt)}},{data:Y,isSuccess:X,isError:le,isLoading:Z}=an(["ontologiesData",t,f],async()=>h.getOntologiesData(e.parameter)),K=Y?.properties.map(Le=>({...Le.properties}))||[],de=(Le,Ge,Ke,rt,ot)=>{let dt;rt?dt=Le.slice(0).sort(d5.property(rt,d5.default(ot))):dt=Le;let jt;if(!Ge&&!Ke)jt=dt;else{let Ze=Ge*Ke;jt=dt.slice(Ze,Math.min(Ze+Ke,Le.length))}return{pageOfItems:jt,totalItemCount:Le.length}},{pageOfItems:se,totalItemCount:_e}=de(K,y,S,A,M),be={pageIndex:y,pageSize:S,totalItemCount:_e,pageSizeOptions:r},Pe=S===0?Sn.default.createElement("strong",null,"All"):Sn.default.createElement(Sn.default.Fragment,null,Sn.default.createElement("strong",null,S*y+1,"-",S*y+S)," ","of ",_e),Ue={sort:{field:A,direction:M}};return Sn.default.createElement(Sn.default.Fragment,null,X&&Sn.default.createElement(Sn.default.Fragment,null,Sn.default.createElement(ar,{size:"xs"},"Showing ",Pe," ",Sn.default.createElement("strong",null,"Ontologies")),Sn.default.createElement(Jo,{size:"s"}),Sn.default.createElement(ay,{margin:"none",style:{height:2}}),Sn.default.createElement(hm,{columns:R,items:se,onChange:B,pagination:be,sorting:Ue})),Z&&Sn.default.createElement(hm,{columns:R,items:se,onChange:B,pagination:be,sorting:Ue,loading:!0}),le&&Sn.default.createElement(hm,{columns:R,items:se,onChange:B,pagination:be,sorting:Ue}))}function pbe(e,t,n){ube.default.render(Wkt(e),t,n)}function Wkt(e){let t=new Wr;return Sn.default.createElement(Nr,{colorMode:"light"},Sn.default.createElement(Br,{client:t},Sn.default.createElement(cbe,{api:e.api,initialEntriesPerPage:e.initialEntriesPerPage,pageSizeOptions:e.pageSizeOptions,initialSortField:e.initialSortField,initialSortDir:e.initialSortDir,targetLink:e.targetLink,actions:e.actions,parameter:e.parameter})))}var zl=k(L());var fbe=k(_o());function dbe(e){let{api:t,query:n,onSearchValueChange:r,...o}=e,i=new fn(t),[u,f]=(0,zl.useState)(n),[h,y]=(0,zl.useState)([]);(0,zl.useEffect)(()=>{f(n)},[n]),(0,zl.useEffect)(()=>{r(u)},[r,u]),an(["onChange",u],async()=>i.suggest({query:u},void 0,void 0,e.parameter).then(S=>{S.response&&S.response.docs&&y(S.response.docs.map(I=>({label:I.autosuggest,type:{color:"tint1",iconType:""}})))}));function O(S){f(S.label)}return zl.default.createElement(zl.default.Fragment,null,zl.default.createElement(HA,{"aria-label":"Search for Concept",placeholder:"Search for Concept",isClearable:!0,...o,suggestions:h,onChange:f,onItemClick:O,value:u}))}function mbe(e,t,n){fbe.default.render(Bkt(e),t,n)}function Bkt(e){let t=new Wr;return zl.default.createElement(Nr,{colorMode:"light"},zl.default.createElement(Br,{client:t},zl.default.createElement(dbe,{api:e.api,query:e.query,onSearchValueChange:e.onSearchValueChange,parameter:e.parameter})))}var $t=k(L());var bu=k(L());function hbe(e){let{api:t,result:n,targetLink:r,...o}=e;return bu.default.createElement(ys,{textAlign:"left",...o,href:r?n.type!="ontology"?r+"ontologies/"+n.ontology_name+"/"+j3(n.type,!0)+"?iri="+encodeURIComponent(n.iri):r+"ontologies/"+n.ontology_name:void 0,title:bu.default.createElement(to,null,bu.default.createElement(Mt,{grow:!1},bu.default.createElement(Zv,null,bu.default.createElement("h2",null,n.label))),bu.default.createElement(Mt,null,n.type!="ontology"&&bu.default.createElement(ym,{api:t,iri:n.iri,entityType:n.type,ontologyId:n.ontology_name})))},n.type!="ontology"?bu.default.createElement(Ay,{iri:n.iri}):void 0,bu.default.createElement(Jo,{size:"s"}),bu.default.createElement(OM,{api:t,ontologyId:n.ontology_name,iri:n.iri,thingType:n.type}))}var gbe=k(_o()),Hkt=10,Vkt=[10,25,50,100];function vbe(e){let{api:t,query:n,parameter:r,initialItemsPerPage:o=Hkt,itemsPerPageOptions:i=Vkt,targetLink:u,preselected:f,...h}=e,y=new fn(t),[O,S]=(0,$t.useState)(n),[I,A]=(0,$t.useState)(0),[C,M]=(0,$t.useState)(0),[F,R]=(0,$t.useState)(o),[B,Y]=(0,$t.useState)(0),[X,le]=(0,$t.useState)(!1),[Z,K]=(0,$t.useState)(!1),[de,se]=(0,$t.useState)([]),[_e,be]=(0,$t.useState)([]);(0,$t.useEffect)(()=>{S(n)},[n]);function Pe(ht,xt,dr,yr){if(ht.length==0)dr(xt.reduce((Hr,ln,Sr,Bt)=>(Sr%2===0&&Hr.push({label:yr?yr(ln):ln,key:ln,append:"("+Bt[Sr+1]+")",disabled:Bt[Sr+1]==0,data:{totalCount:Bt[Sr+1]}}),Hr),[]));else{let Hr=[];for(let ln=0;ln{if(Sr%2===0){let sn=Hr.find(nn=>nn.key==ln);sn&&(sn.append="("+Bt[Sr+1],sn.data&&Bt[Sr+1]ht.checked==="on",{data:Le,isLoading:Ge,isSuccess:Ke,isError:rt,error:ot}=an(["searchResults",t,O,X,Z,I,F,de.filter(Ue).map(ht=>ht.key),_e.filter(Ue).map(ht=>ht.key),r],async({signal:ht})=>y.search({query:O,exactMatch:X,showObsoleteTerms:Z,types:de.filter(Ue).map(xt=>xt.key).join(","),ontology:_e.filter(Ue).map(xt=>xt.key).join(","),groupByIri:!0},{page:I.toString(),size:F.toString()},void 0,e.parameter,ht).then(xt=>{if(xt.response&&xt.response.docs!=null&&xt.response.numFound!=null){xt.facet_counts&&xt.facet_counts.facet_fields&&(xt.facet_counts.facet_fields.type&&Pe(de,xt.facet_counts.facet_fields.type,se,yr=>`${yr[0].toUpperCase()}${yr.slice(1)}`),xt.facet_counts.facet_fields.ontology_name&&Pe(_e,xt.facet_counts.facet_fields.ontology_name,be,yr=>yr.toUpperCase())),Y(xt.response.numFound);let dr=Math.ceil(xt.response.numFound/F);return M(dr),I>=dr&&A(0),xt.response.docs}else throw new Error("Unexpected API response")}),{keepPreviousData:!0});function dt(ht){A(Math.floor((I*F+1)/ht)),R(ht)}function jt(){le(!X)}function Ze(){K(!Z)}function Xt(ht,xt){let dr=[...ht];xt(dr.map(yr=>({...yr,checked:void 0})))}function at(){Xt(de,se),Xt(_e,be)}function lr(ht){S(ht[0]?ht[0].label:"")}return $t.default.createElement($t.default.Fragment,null,$t.default.createElement(AM,{api:t,selectionChangedEvent:ht=>{lr(ht)},allowCustomTerms:!0,singleSelection:!0,hasShortSelectedLabel:!0,placeholder:"Search",preselected:f}),$t.default.createElement(Jo,{size:"s"}),$t.default.createElement(to,null,$t.default.createElement(Mt,{grow:3,style:{minWidth:250}},$t.default.createElement(Hi,null,Ke&&$t.default.createElement(yc,{label:"Filter by type"},$t.default.createElement(xc,{options:de,onChange:se,listProps:{bordered:!0}},ht=>ht)),Ge&&$t.default.createElement(yc,{label:"Filter by type"},$t.default.createElement($r,{size:"s"})),rt&&$t.default.createElement(yc,{label:"Filter by type"},$t.default.createElement(xc,{options:[],onChange:se,listProps:{bordered:!0}},ht=>ht)),Ke&&$t.default.createElement(yc,{label:"Filter by ontology"},$t.default.createElement(xc,{options:_e,onChange:be,listProps:{bordered:!0},searchable:!0},(ht,xt)=>$t.default.createElement($t.default.Fragment,null,xt,ht))),Ge&&$t.default.createElement(yc,{label:"Filter by ontology"},$t.default.createElement($r,{size:"s"})),rt&&$t.default.createElement(yc,{label:"Filter by ontology"},$t.default.createElement(xc,{options:[],onChange:be,listProps:{bordered:!0},searchable:!0},(ht,xt)=>$t.default.createElement($t.default.Fragment,null,xt,ht))),$t.default.createElement(za,{onClick:at},"Clear all filters"))),$t.default.createElement(Mt,{grow:7},$t.default.createElement(Hi,{color:"transparent",grow:!1},$t.default.createElement(to,null,$t.default.createElement(Mt,{grow:!1},$t.default.createElement(k_,{label:"Exact match",checked:X,onChange:jt})),$t.default.createElement(Mt,null,$t.default.createElement(k_,{label:"Show only obsolete terms",checked:Z,onChange:Ze}))),$t.default.createElement(Jo,{size:"m"}),$t.default.createElement(ar,{size:"xs",style:{padding:"0 8px"}},"Showing ",Math.min(I*F+1,B)," to ",Math.min((I+1)*F,B)," of ",B," results"),$t.default.createElement(Jo,{size:"s"}),$t.default.createElement(ay,{margin:"none",style:{height:2}}),$t.default.createElement(Jo,{size:"s"}),$t.default.createElement(sm,{"aria-label":"Search result pagination",pageCount:C,activePage:I,onChangePage:A,itemsPerPage:F,onChangeItemsPerPage:dt,itemsPerPageOptions:i}),$t.default.createElement(Jo,{size:"s"}),Le&&Le.map(ht=>$t.default.createElement($t.default.Fragment,{key:ht.id},$t.default.createElement(hbe,{api:t,result:ht,targetLink:u}),$t.default.createElement(Jo,null)))))))}function ybe(e,t,n){gbe.default.render(qkt(e),t,n)}function qkt(e){let t=new Wr;return $t.default.createElement(Nr,{colorMode:"light"},$t.default.createElement(Br,{client:t},$t.default.createElement(vbe,{api:e.api,query:e.query,parameter:e.parameter,initialItemsPerPage:e.initialItemsPerPage,itemsPerPageOptions:e.itemsPerPageOptions,targetLink:e.targetLink})))}var wt=k(L());var wbe=k(_o()),Ukt=!0;function $kt(e,t){let n=e.getRdfTypes().filter(r=>r!=="http://www.w3.org/2002/07/owl#NamedIndividual"&&!r.startsWith("http://www.w3.org/2000/01/rdf-schema#"));return e.getRdfTypes().length>0?wt.default.createElement(Mt,null,wt.default.createElement("b",null,"Type"),Ty(e,e.getLinkedEntities(),n,t.api,t.showBadges)):wt.default.createElement(wt.default.Fragment,null)}function Jkt(e,t){let n=e.getSameAs();return wt.default.createElement(wt.default.Fragment,null,n.length>0&&wt.default.createElement(Mt,null,wt.default.createElement("b",null,"Same As"),Ty(e,e.getLinkedEntities(),n,t.api,t.showBadges)))}function Gkt(e,t){let n=e.getDifferentFrom();return wt.default.createElement(wt.default.Fragment,null,n.length>0&&wt.default.createElement(Mt,null,wt.default.createElement("b",null,"Different from"),Ty(e,e.getLinkedEntities(),n,t.api,t.showBadges)))}function Xkt(e,t){let n=e.getDisjointWith();return wt.default.createElement(wt.default.Fragment,null,n.length>0&&wt.default.createElement(Mt,null,wt.default.createElement("b",null,"Disjoint with"),Ty(e,e.getLinkedEntities(),n,t.api,t.showBadges)))}function Kkt(e,t){let n=e.getInverseOf();return wt.default.createElement(wt.default.Fragment,null,n.length>0&&wt.default.createElement(Mt,null,wt.default.createElement("b",null,"Inverse of"),Ty(e,e.getLinkedEntities(),n,t.api,t.showBadges)))}function bbe(e,t,n){return yt(e).slice().reverse().map((r,o)=>wt.default.createElement("span",{key:r},rn(t,t.getLinkedEntities(),r,n.api,n.showBadges),wt.default.createElement(wt.default.Fragment,null,oo.value),r=n.filter(o=>Array.isArray(o)).length>0;return wt.default.createElement(wt.default.Fragment,null,n.length>0&&wt.default.createElement(Mt,null,wt.default.createElement("b",null,r?"Property chains":"Property chain"),r?wt.default.createElement("ul",null,n.map(o=>wt.default.createElement("li",{key:zr()},bbe(o,e,t)))):wt.default.createElement("p",null,bbe(n,e,t))))}function Qkt(e,t){let n=e.getEquivalents();return wt.default.createElement(wt.default.Fragment,null,n.length>0&&wt.default.createElement(Mt,null,wt.default.createElement("b",null,"Equivalent to"),n.length===1?wt.default.createElement("p",null,dl(e,n[0],t.api,t.showBadges)):wt.default.createElement("ul",null,n.map(r=>wt.default.createElement("li",{key:zr()},dl(e,r,t.api,t.showBadges))))))}function Zkt(e,t){let n=e.getSuperEntities();return wt.default.createElement(wt.default.Fragment,null,n.length>0&&wt.default.createElement(Mt,null,wt.default.createElement("b",null,"Sub",e.getType()," of"),n.length===1?wt.default.createElement("p",null,dl(e,n[0],t.api,t.showBadges)):wt.default.createElement("ul",null,n.map(r=>wt.default.createElement("li",{key:zr()},dl(e,r,t.api,t.showBadges))))))}function eEt(e,t){let n=e.getRelatedFrom(),r=Array.from(new Set(n.map(o=>o.value.property)));return wt.default.createElement(wt.default.Fragment,null,n.length>0&&wt.default.createElement(Mt,null,wt.default.createElement("b",null,"Related from"),r.map(o=>{let i=e.getLinkedEntities().getLabelForIri(o);return wt.default.createElement("div",{key:o.toString()+zr()},wt.default.createElement("div",null,wt.default.createElement("a",{style:{color:"black"},href:o},wt.default.createElement("i",null,i||o))),wt.default.createElement("ul",{style:{marginBottom:0}},n.filter(u=>u.value.property===o).map(u=>wt.default.createElement("li",{key:zr()},rn(e,e.getLinkedEntities(),u.value.value,t.api,t.showBadges)))),wt.default.createElement("p",null)," ")})))}function tEt(e,t,n){return t.length>0?wt.default.createElement(Mt,null,wt.default.createElement("b",null,"Instances"),wt.default.createElement("ul",null,t.map(r=>wt.default.createElement("li",{key:zr()},Wa(e,e.getLinkedEntities(),r.getIri(),n.api,n.showBadges))))):wt.default.createElement(wt.default.Fragment,null)}async function rEt(e,t,n){let r=encodeURIComponent(encodeURIComponent(e.getIri())),o=await t.getClassInstances(void 0,void 0,{ontologyId:n.ontologyId||e.getOntologyId(),termIri:r},n.parameter).catch(i=>console.log(i));if(o.elements!==void 0)return yt(o.elements).map(i=>Qg({elements:[i]}));throw Error("Error fetching instances of '"+n.iri+"'")}function Obe(e){let{api:t,iri:n,ontologyId:r,hasTitle:o=Ukt,showBadges:i,entityType:u,parameter:f,...h}=e,y=new fn(t),{data:O,isLoading:S,isSuccess:I,isError:A}=an(["entityJson",t,n,r,u,f,i],async()=>y.getEntityObject(n,u,r,f,!1)),{data:C,isLoading:M,isSuccess:F}=an({queryKey:["instancesJson",O],queryFn:async()=>O&&R1(O)&&O.hasDirectChildren()?rEt(O,y,e):[],enabled:!!O});return wt.default.createElement(wt.default.Fragment,null,wt.default.createElement(ys,{title:o?(u?Ks(vP(u)):I&&O?Ks(O.getType()):"")+" Relations":"",layout:"horizontal"},(S||M)&&wt.default.createElement($r,{size:"s"}),A&&wt.default.createElement(ar,null,"Requested resource not available"),I&&F&&O!==void 0&&C!==void 0&&wt.default.createElement(ar,{...h},Kg(O)&&wt.default.createElement(wt.default.Fragment,null,$kt(O,e),Jkt(O,e),Gkt(O,e)),(yd(O)||R1(O))&&wt.default.createElement(wt.default.Fragment,null,Xkt(O,e)),yd(O)&&wt.default.createElement(wt.default.Fragment,null,Kkt(O,e),Ykt(O,e)),(yd(O)||R1(O))&&wt.default.createElement(wt.default.Fragment,null,Qkt(O,e),Zkt(O,e),eEt(O,e)),R1(O)&&wt.default.createElement(wt.default.Fragment,null,tEt(O,C,e)))))}function xbe(e,t,n){wbe.default.render(nEt(e),t,n)}function nEt(e){let t=new Wr;return wt.default.createElement(Nr,{colorMode:"light"},wt.default.createElement(Br,{client:t},wt.default.createElement(Obe,{api:e.api,iri:e.iri,ontologyId:e.ontologyId,hasTitle:e.hasTitle,entityType:e.entityType,parameter:e.parameter,showBadges:e.showBadges})))}window.SemLookPWidgets={createAutocomplete:X2e,createDataContent:Q2e,createEntityInfo:rbe,createEntityRelations:xbe,createJsonApi:ibe,createBreadcrumb:j2e,createDescription:O2e,createIri:_2e,createTab:B2e,createAlternativeNameTab:k2e,createCrossRefTab:A2e,createHierarchy:z2e,createHierarchyDeprecated:N2e,createTitle:q2e,createOntologyInfo:sbe,createResources:pbe,createSearchBar:mbe,createSearchResultsList:ybe,createMetadata:J2e};})(); /*! Bundled license information: object-assign/index.js: diff --git a/package-lock.json b/package-lock.json index 7af2e3aa..ab8979fc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,16 +1,21 @@ { "name": "@ts4nfdi/terminology-service-suite", - "version": "2.0.0", + "version": "2.0.2", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ts4nfdi/terminology-service-suite", - "version": "2.0.0", + "version": "2.0.2", "license": "MIT", "dependencies": { + "@emotion/react": "^11.11.3", "@storybook/html-vite": "^7.2.3", - "semlookp-widgets": "file:dist_plainjs/" + "react": "17.0.2", + "react-dom": "17.0.2", + "react-query": "^3.39.3", + "semlookp-widgets": "file:dist_plainjs/", + "vite": "^5.2.11" }, "devDependencies": { "@babel/preset-env": "^7.23.7", @@ -62,15 +67,10 @@ "semantic-release": "^19.0.5", "storybook": "^7.6.7", "typescript": "~4.5.3" - }, - "peerDependencies": { - "@emotion/react": "^11.11.3", - "react": "17.0.2", - "react-dom": "17.0.2", - "react-query": "^3.39.2" } }, "dist_plainjs": { + "name": "terminology-service-suite", "version": "1.0.0" }, "node_modules/@adobe/css-tools": { @@ -83,6 +83,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" @@ -118,6 +119,7 @@ "version": "7.24.4", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.4.tgz", "integrity": "sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==", + "dev": true, "engines": { "node": ">=6.9.0" } @@ -126,6 +128,7 @@ "version": "7.24.5", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.5.tgz", "integrity": "sha512-tVQRucExLQ02Boi4vdPp49svNGcfL2GhdTCT9aldhXgCJVAI21EtRfBettiuLUwce/7r6bFdgs6JFkcdTiFttA==", + "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.24.2", @@ -193,6 +196,7 @@ "version": "7.23.6", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", + "dev": true, "dependencies": { "@babel/compat-data": "^7.23.5", "@babel/helper-validator-option": "^7.23.5", @@ -318,6 +322,7 @@ "version": "7.24.5", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.5.tgz", "integrity": "sha512-9GxeY8c2d2mdQUP1Dye0ks3VDyIMS98kt/llQ2nUId8IsWqTF0l1LkSX0/uP7l7MCDrzXS009Hyhe2gzTiGW8A==", + "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-module-imports": "^7.24.3", @@ -391,6 +396,7 @@ "version": "7.24.5", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.5.tgz", "integrity": "sha512-uH3Hmf5q5n7n8mz7arjUlDOCbttY/DW4DYhE6FUsjKJ/oYC1kQQUvwEQWxRwUpX9qQKRXeqLwWxrqilMrf32sQ==", + "dev": true, "dependencies": { "@babel/types": "^7.24.5" }, @@ -441,6 +447,7 @@ "version": "7.23.5", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", + "dev": true, "engines": { "node": ">=6.9.0" } @@ -463,6 +470,7 @@ "version": "7.24.5", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.5.tgz", "integrity": "sha512-CiQmBMMpMQHwM5m01YnrM6imUG1ebgYJ+fAIW4FZe6m4qHTPaRHti+R8cggAwkdz4oXhtO4/K9JWlh+8hIfR2Q==", + "dev": true, "dependencies": { "@babel/template": "^7.24.0", "@babel/traverse": "^7.24.5", @@ -2352,7 +2360,6 @@ "os": [ "aix" ], - "peer": true, "engines": { "node": ">=12" } @@ -3217,7 +3224,7 @@ "version": "0.3.6", "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", - "devOptional": true, + "dev": true, "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25" @@ -4748,8 +4755,7 @@ "optional": true, "os": [ "android" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-android-arm64": { "version": "4.17.2", @@ -4761,8 +4767,7 @@ "optional": true, "os": [ "android" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-darwin-arm64": { "version": "4.17.2", @@ -4774,8 +4779,7 @@ "optional": true, "os": [ "darwin" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-darwin-x64": { "version": "4.17.2", @@ -4787,8 +4791,7 @@ "optional": true, "os": [ "darwin" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { "version": "4.17.2", @@ -4800,8 +4803,7 @@ "optional": true, "os": [ "linux" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { "version": "4.17.2", @@ -4813,8 +4815,7 @@ "optional": true, "os": [ "linux" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { "version": "4.17.2", @@ -4826,8 +4827,7 @@ "optional": true, "os": [ "linux" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { "version": "4.17.2", @@ -4839,8 +4839,7 @@ "optional": true, "os": [ "linux" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { "version": "4.17.2", @@ -4852,8 +4851,7 @@ "optional": true, "os": [ "linux" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { "version": "4.17.2", @@ -4865,8 +4863,7 @@ "optional": true, "os": [ "linux" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { "version": "4.17.2", @@ -4878,8 +4875,7 @@ "optional": true, "os": [ "linux" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { "version": "4.17.2", @@ -4891,8 +4887,7 @@ "optional": true, "os": [ "linux" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-linux-x64-musl": { "version": "4.17.2", @@ -4904,8 +4899,7 @@ "optional": true, "os": [ "linux" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { "version": "4.17.2", @@ -4917,8 +4911,7 @@ "optional": true, "os": [ "win32" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { "version": "4.17.2", @@ -4930,8 +4923,7 @@ "optional": true, "os": [ "win32" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { "version": "4.17.2", @@ -4943,8 +4935,7 @@ "optional": true, "os": [ "win32" - ], - "peer": true + ] }, "node_modules/@semantic-release/commit-analyzer": { "version": "9.0.2", @@ -6237,358 +6228,6 @@ "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/html-vite/node_modules/@esbuild/android-arm": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", - "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "android" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@storybook/html-vite/node_modules/@esbuild/android-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", - "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "android" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@storybook/html-vite/node_modules/@esbuild/android-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", - "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "android" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@storybook/html-vite/node_modules/@esbuild/darwin-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", - "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@storybook/html-vite/node_modules/@esbuild/darwin-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", - "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@storybook/html-vite/node_modules/@esbuild/freebsd-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", - "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@storybook/html-vite/node_modules/@esbuild/freebsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", - "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@storybook/html-vite/node_modules/@esbuild/linux-arm": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", - "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@storybook/html-vite/node_modules/@esbuild/linux-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", - "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@storybook/html-vite/node_modules/@esbuild/linux-ia32": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", - "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@storybook/html-vite/node_modules/@esbuild/linux-loong64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", - "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", - "cpu": [ - "loong64" - ], - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@storybook/html-vite/node_modules/@esbuild/linux-mips64el": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", - "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", - "cpu": [ - "mips64el" - ], - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@storybook/html-vite/node_modules/@esbuild/linux-ppc64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", - "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", - "cpu": [ - "ppc64" - ], - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@storybook/html-vite/node_modules/@esbuild/linux-riscv64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", - "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", - "cpu": [ - "riscv64" - ], - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@storybook/html-vite/node_modules/@esbuild/linux-s390x": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", - "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", - "cpu": [ - "s390x" - ], - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@storybook/html-vite/node_modules/@esbuild/linux-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", - "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@storybook/html-vite/node_modules/@esbuild/netbsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", - "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "netbsd" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@storybook/html-vite/node_modules/@esbuild/openbsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", - "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "openbsd" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@storybook/html-vite/node_modules/@esbuild/sunos-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", - "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "sunos" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@storybook/html-vite/node_modules/@esbuild/win32-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", - "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@storybook/html-vite/node_modules/@esbuild/win32-ia32": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", - "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@storybook/html-vite/node_modules/@esbuild/win32-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", - "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, "node_modules/@storybook/html-vite/node_modules/@storybook/builder-vite": { "version": "7.6.19", "resolved": "https://registry.npmjs.org/@storybook/builder-vite/-/builder-vite-7.6.19.tgz", @@ -6633,149 +6272,11 @@ } } }, - "node_modules/@storybook/html-vite/node_modules/@types/node": { - "version": "20.12.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.10.tgz", - "integrity": "sha512-Eem5pH9pmWBHoGAT8Dr5fdc5rYA+4NAovdM4EktRPVAAiJhmWWfQrA0cFhAbOsQdSfIHjAud6YdkbL69+zSKjw==", - "optional": true, - "peer": true, - "dependencies": { - "undici-types": "~5.26.4" - } - }, "node_modules/@storybook/html-vite/node_modules/es-module-lexer": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==" }, - "node_modules/@storybook/html-vite/node_modules/esbuild": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", - "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", - "hasInstallScript": true, - "peer": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.20.2", - "@esbuild/android-arm": "0.20.2", - "@esbuild/android-arm64": "0.20.2", - "@esbuild/android-x64": "0.20.2", - "@esbuild/darwin-arm64": "0.20.2", - "@esbuild/darwin-x64": "0.20.2", - "@esbuild/freebsd-arm64": "0.20.2", - "@esbuild/freebsd-x64": "0.20.2", - "@esbuild/linux-arm": "0.20.2", - "@esbuild/linux-arm64": "0.20.2", - "@esbuild/linux-ia32": "0.20.2", - "@esbuild/linux-loong64": "0.20.2", - "@esbuild/linux-mips64el": "0.20.2", - "@esbuild/linux-ppc64": "0.20.2", - "@esbuild/linux-riscv64": "0.20.2", - "@esbuild/linux-s390x": "0.20.2", - "@esbuild/linux-x64": "0.20.2", - "@esbuild/netbsd-x64": "0.20.2", - "@esbuild/openbsd-x64": "0.20.2", - "@esbuild/sunos-x64": "0.20.2", - "@esbuild/win32-arm64": "0.20.2", - "@esbuild/win32-ia32": "0.20.2", - "@esbuild/win32-x64": "0.20.2" - } - }, - "node_modules/@storybook/html-vite/node_modules/vite": { - "version": "5.2.11", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.11.tgz", - "integrity": "sha512-HndV31LWW05i1BLPMUCE1B9E9GFbOu1MbenhS58FuK6owSO5qHm7GiCotrNY1YE5rMeQSFBGmT5ZaLEjFizgiQ==", - "peer": true, - "dependencies": { - "esbuild": "^0.20.1", - "postcss": "^8.4.38", - "rollup": "^4.13.0" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^18.0.0 || >=20.0.0", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } - } - }, - "node_modules/@storybook/html-vite/node_modules/vite/node_modules/rollup": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.17.2.tgz", - "integrity": "sha512-/9ClTJPByC0U4zNLowV1tMBe8yMEAxewtR3cUNX5BoEpGH3dQEWpJLr6CLp0fPdYRF/fzVOgvDb1zXuakwF5kQ==", - "peer": true, - "dependencies": { - "@types/estree": "1.0.5" - }, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.17.2", - "@rollup/rollup-android-arm64": "4.17.2", - "@rollup/rollup-darwin-arm64": "4.17.2", - "@rollup/rollup-darwin-x64": "4.17.2", - "@rollup/rollup-linux-arm-gnueabihf": "4.17.2", - "@rollup/rollup-linux-arm-musleabihf": "4.17.2", - "@rollup/rollup-linux-arm64-gnu": "4.17.2", - "@rollup/rollup-linux-arm64-musl": "4.17.2", - "@rollup/rollup-linux-powerpc64le-gnu": "4.17.2", - "@rollup/rollup-linux-riscv64-gnu": "4.17.2", - "@rollup/rollup-linux-s390x-gnu": "4.17.2", - "@rollup/rollup-linux-x64-gnu": "4.17.2", - "@rollup/rollup-linux-x64-musl": "4.17.2", - "@rollup/rollup-win32-arm64-msvc": "4.17.2", - "@rollup/rollup-win32-ia32-msvc": "4.17.2", - "@rollup/rollup-win32-x64-msvc": "4.17.2", - "fsevents": "~2.3.2" - } - }, "node_modules/@storybook/manager": { "version": "7.6.19", "resolved": "https://registry.npmjs.org/@storybook/manager/-/manager-7.6.19.tgz", @@ -10258,6 +9759,7 @@ "version": "4.23.0", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", + "dev": true, "funding": [ { "type": "opencollective", @@ -10331,7 +9833,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "devOptional": true + "dev": true }, "node_modules/builtin-modules": { "version": "3.3.0", @@ -10497,6 +9999,7 @@ "version": "1.0.30001616", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001616.tgz", "integrity": "sha512-RHVYKov7IcdNjVHJFNY/78RdG4oGVjbayxv8u5IO74Wv7Hlq4PnJE6mo/OjFijjVFNy5ijnCt6H3IIo4t+wfEw==", + "dev": true, "funding": [ { "type": "opencollective", @@ -11317,7 +10820,8 @@ "node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true }, "node_modules/cookie": { "version": "0.6.0", @@ -12370,7 +11874,8 @@ "node_modules/electron-to-chromium": { "version": "1.4.758", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.758.tgz", - "integrity": "sha512-/o9x6TCdrYZBMdGeTifAP3wlF/gVT+TtWJe3BSmtNh92Mw81U9hrYwW9OAGUh+sEOX/yz5e34sksqRruZbjYrw==" + "integrity": "sha512-/o9x6TCdrYZBMdGeTifAP3wlF/gVT+TtWJe3BSmtNh92Mw81U9hrYwW9OAGUh+sEOX/yz5e34sksqRruZbjYrw==", + "dev": true }, "node_modules/emoji-regex": { "version": "9.2.2", @@ -12727,6 +12232,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "dev": true, "engines": { "node": ">=6" } @@ -14165,6 +13671,7 @@ "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, "engines": { "node": ">=6.9.0" } @@ -16638,6 +16145,7 @@ "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, "bin": { "json5": "lib/cli.js" }, @@ -17159,6 +16667,7 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, "dependencies": { "yallist": "^3.0.2" } @@ -17839,7 +17348,8 @@ "node_modules/node-releases": { "version": "2.0.14", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==" + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "dev": true }, "node_modules/normalize-package-data": { "version": "2.5.0", @@ -22863,7 +22373,6 @@ "version": "3.39.3", "resolved": "https://registry.npmjs.org/react-query/-/react-query-3.39.3.tgz", "integrity": "sha512-nLfLz7GiohKTJDuT4us4X3h/8unOh+00MLb2yJoGTPjxKs2bc1iDhkNx2bd5MKklXnOD3NrVZ+J2UXujA5In4g==", - "peer": true, "dependencies": { "@babel/runtime": "^7.5.5", "broadcast-channel": "^3.4.1", @@ -24634,7 +24143,7 @@ "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "devOptional": true, + "dev": true, "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -24644,7 +24153,7 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "devOptional": true, + "dev": true, "engines": { "node": ">=0.10.0" } @@ -25416,7 +24925,7 @@ "version": "5.31.0", "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.0.tgz", "integrity": "sha512-Q1JFAoUKE5IMfI4Z/lkE/E6+SwgzO+x4tq4v1AyBLRj8VSYvRO6A/rQrPg1yud4g0En9EKI1TvFRF2tQFcoUkg==", - "devOptional": true, + "dev": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", @@ -25506,7 +25015,7 @@ "version": "8.11.3", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", - "devOptional": true, + "dev": true, "bin": { "acorn": "bin/acorn" }, @@ -25518,7 +25027,7 @@ "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "devOptional": true + "dev": true }, "node_modules/test-exclude": { "version": "6.0.0", @@ -25912,7 +25421,7 @@ "version": "4.5.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==", - "devOptional": true, + "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -26220,6 +25729,7 @@ "version": "1.0.15", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.15.tgz", "integrity": "sha512-K9HWH62x3/EalU1U6sjSZiylm9C8tgq2mSvshZpqc7QE69RaA2qjhkW2HlNA0tFpEbtyFz7HTqbSdN4MSwUodA==", + "dev": true, "funding": [ { "type": "opencollective", @@ -26502,6 +26012,461 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/vite": { + "version": "5.2.11", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.11.tgz", + "integrity": "sha512-HndV31LWW05i1BLPMUCE1B9E9GFbOu1MbenhS58FuK6owSO5qHm7GiCotrNY1YE5rMeQSFBGmT5ZaLEjFizgiQ==", + "dependencies": { + "esbuild": "^0.20.1", + "postcss": "^8.4.38", + "rollup": "^4.13.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", + "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", + "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", + "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", + "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", + "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", + "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", + "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", + "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", + "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", + "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-loong64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", + "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", + "cpu": [ + "loong64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-mips64el": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", + "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", + "cpu": [ + "mips64el" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ppc64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", + "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-riscv64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", + "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-s390x": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", + "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", + "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/netbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", + "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/openbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", + "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/sunos-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", + "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", + "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", + "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", + "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/esbuild": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", + "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.20.2", + "@esbuild/android-arm": "0.20.2", + "@esbuild/android-arm64": "0.20.2", + "@esbuild/android-x64": "0.20.2", + "@esbuild/darwin-arm64": "0.20.2", + "@esbuild/darwin-x64": "0.20.2", + "@esbuild/freebsd-arm64": "0.20.2", + "@esbuild/freebsd-x64": "0.20.2", + "@esbuild/linux-arm": "0.20.2", + "@esbuild/linux-arm64": "0.20.2", + "@esbuild/linux-ia32": "0.20.2", + "@esbuild/linux-loong64": "0.20.2", + "@esbuild/linux-mips64el": "0.20.2", + "@esbuild/linux-ppc64": "0.20.2", + "@esbuild/linux-riscv64": "0.20.2", + "@esbuild/linux-s390x": "0.20.2", + "@esbuild/linux-x64": "0.20.2", + "@esbuild/netbsd-x64": "0.20.2", + "@esbuild/openbsd-x64": "0.20.2", + "@esbuild/sunos-x64": "0.20.2", + "@esbuild/win32-arm64": "0.20.2", + "@esbuild/win32-ia32": "0.20.2", + "@esbuild/win32-x64": "0.20.2" + } + }, + "node_modules/vite/node_modules/rollup": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.17.2.tgz", + "integrity": "sha512-/9ClTJPByC0U4zNLowV1tMBe8yMEAxewtR3cUNX5BoEpGH3dQEWpJLr6CLp0fPdYRF/fzVOgvDb1zXuakwF5kQ==", + "dependencies": { + "@types/estree": "1.0.5" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.17.2", + "@rollup/rollup-android-arm64": "4.17.2", + "@rollup/rollup-darwin-arm64": "4.17.2", + "@rollup/rollup-darwin-x64": "4.17.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.17.2", + "@rollup/rollup-linux-arm-musleabihf": "4.17.2", + "@rollup/rollup-linux-arm64-gnu": "4.17.2", + "@rollup/rollup-linux-arm64-musl": "4.17.2", + "@rollup/rollup-linux-powerpc64le-gnu": "4.17.2", + "@rollup/rollup-linux-riscv64-gnu": "4.17.2", + "@rollup/rollup-linux-s390x-gnu": "4.17.2", + "@rollup/rollup-linux-x64-gnu": "4.17.2", + "@rollup/rollup-linux-x64-musl": "4.17.2", + "@rollup/rollup-win32-arm64-msvc": "4.17.2", + "@rollup/rollup-win32-ia32-msvc": "4.17.2", + "@rollup/rollup-win32-x64-msvc": "4.17.2", + "fsevents": "~2.3.2" + } + }, "node_modules/void-elements": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", @@ -26994,7 +26959,8 @@ "node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true }, "node_modules/yaml": { "version": "1.10.2", @@ -27143,6 +27109,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, "requires": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" @@ -27168,12 +27135,14 @@ "@babel/compat-data": { "version": "7.24.4", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.4.tgz", - "integrity": "sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==" + "integrity": "sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==", + "dev": true }, "@babel/core": { "version": "7.24.5", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.5.tgz", "integrity": "sha512-tVQRucExLQ02Boi4vdPp49svNGcfL2GhdTCT9aldhXgCJVAI21EtRfBettiuLUwce/7r6bFdgs6JFkcdTiFttA==", + "dev": true, "requires": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.24.2", @@ -27225,6 +27194,7 @@ "version": "7.23.6", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", + "dev": true, "requires": { "@babel/compat-data": "^7.23.5", "@babel/helper-validator-option": "^7.23.5", @@ -27317,6 +27287,7 @@ "version": "7.24.5", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.5.tgz", "integrity": "sha512-9GxeY8c2d2mdQUP1Dye0ks3VDyIMS98kt/llQ2nUId8IsWqTF0l1LkSX0/uP7l7MCDrzXS009Hyhe2gzTiGW8A==", + "dev": true, "requires": { "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-module-imports": "^7.24.3", @@ -27366,6 +27337,7 @@ "version": "7.24.5", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.5.tgz", "integrity": "sha512-uH3Hmf5q5n7n8mz7arjUlDOCbttY/DW4DYhE6FUsjKJ/oYC1kQQUvwEQWxRwUpX9qQKRXeqLwWxrqilMrf32sQ==", + "dev": true, "requires": { "@babel/types": "^7.24.5" } @@ -27400,7 +27372,8 @@ "@babel/helper-validator-option": { "version": "7.23.5", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", - "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==" + "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", + "dev": true }, "@babel/helper-wrap-function": { "version": "7.24.5", @@ -27417,6 +27390,7 @@ "version": "7.24.5", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.5.tgz", "integrity": "sha512-CiQmBMMpMQHwM5m01YnrM6imUG1ebgYJ+fAIW4FZe6m4qHTPaRHti+R8cggAwkdz4oXhtO4/K9JWlh+8hIfR2Q==", + "dev": true, "requires": { "@babel/template": "^7.24.0", "@babel/traverse": "^7.24.5", @@ -27483,8 +27457,7 @@ "version": "7.21.0-placeholder-for-preset-env.2", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "dev": true, - "requires": {} + "dev": true }, "@babel/plugin-syntax-async-generators": { "version": "7.8.4", @@ -28710,8 +28683,7 @@ "@emotion/use-insertion-effect-with-fallbacks": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz", - "integrity": "sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==", - "requires": {} + "integrity": "sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==" }, "@emotion/utils": { "version": "1.2.1", @@ -28727,8 +28699,7 @@ "version": "0.20.2", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", - "optional": true, - "peer": true + "optional": true }, "@esbuild/android-arm": { "version": "0.18.20", @@ -29247,7 +29218,7 @@ "version": "0.3.6", "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", - "devOptional": true, + "dev": true, "requires": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25" @@ -29444,8 +29415,7 @@ "version": "7.2.14", "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.14.tgz", "integrity": "sha512-MZsBZ4q4HfzBsywtXgM1Ksj6HDThtiwmOKUXH1pKYISI9gAVXCNHNpo7TlGoGrBaYWZTdNoirIN7JsQcQUjmQQ==", - "dev": true, - "requires": {} + "dev": true }, "@mui/utils": { "version": "5.15.14", @@ -30135,113 +30105,97 @@ "version": "4.17.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.17.2.tgz", "integrity": "sha512-NM0jFxY8bB8QLkoKxIQeObCaDlJKewVlIEkuyYKm5An1tdVZ966w2+MPQ2l8LBZLjR+SgyV+nRkTIunzOYBMLQ==", - "optional": true, - "peer": true + "optional": true }, "@rollup/rollup-android-arm64": { "version": "4.17.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.17.2.tgz", "integrity": "sha512-yeX/Usk7daNIVwkq2uGoq2BYJKZY1JfyLTaHO/jaiSwi/lsf8fTFoQW/n6IdAsx5tx+iotu2zCJwz8MxI6D/Bw==", - "optional": true, - "peer": true + "optional": true }, "@rollup/rollup-darwin-arm64": { "version": "4.17.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.17.2.tgz", "integrity": "sha512-kcMLpE6uCwls023+kknm71ug7MZOrtXo+y5p/tsg6jltpDtgQY1Eq5sGfHcQfb+lfuKwhBmEURDga9N0ol4YPw==", - "optional": true, - "peer": true + "optional": true }, "@rollup/rollup-darwin-x64": { "version": "4.17.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.17.2.tgz", "integrity": "sha512-AtKwD0VEx0zWkL0ZjixEkp5tbNLzX+FCqGG1SvOu993HnSz4qDI6S4kGzubrEJAljpVkhRSlg5bzpV//E6ysTQ==", - "optional": true, - "peer": true + "optional": true }, "@rollup/rollup-linux-arm-gnueabihf": { "version": "4.17.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.17.2.tgz", "integrity": "sha512-3reX2fUHqN7sffBNqmEyMQVj/CKhIHZd4y631duy0hZqI8Qoqf6lTtmAKvJFYa6bhU95B1D0WgzHkmTg33In0A==", - "optional": true, - "peer": true + "optional": true }, "@rollup/rollup-linux-arm-musleabihf": { "version": "4.17.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.17.2.tgz", "integrity": "sha512-uSqpsp91mheRgw96xtyAGP9FW5ChctTFEoXP0r5FAzj/3ZRv3Uxjtc7taRQSaQM/q85KEKjKsZuiZM3GyUivRg==", - "optional": true, - "peer": true + "optional": true }, "@rollup/rollup-linux-arm64-gnu": { "version": "4.17.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.17.2.tgz", "integrity": "sha512-EMMPHkiCRtE8Wdk3Qhtciq6BndLtstqZIroHiiGzB3C5LDJmIZcSzVtLRbwuXuUft1Cnv+9fxuDtDxz3k3EW2A==", - "optional": true, - "peer": true + "optional": true }, "@rollup/rollup-linux-arm64-musl": { "version": "4.17.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.17.2.tgz", "integrity": "sha512-NMPylUUZ1i0z/xJUIx6VUhISZDRT+uTWpBcjdv0/zkp7b/bQDF+NfnfdzuTiB1G6HTodgoFa93hp0O1xl+/UbA==", - "optional": true, - "peer": true + "optional": true }, "@rollup/rollup-linux-powerpc64le-gnu": { "version": "4.17.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.17.2.tgz", "integrity": "sha512-T19My13y8uYXPw/L/k0JYaX1fJKFT/PWdXiHr8mTbXWxjVF1t+8Xl31DgBBvEKclw+1b00Chg0hxE2O7bTG7GQ==", - "optional": true, - "peer": true + "optional": true }, "@rollup/rollup-linux-riscv64-gnu": { "version": "4.17.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.17.2.tgz", "integrity": "sha512-BOaNfthf3X3fOWAB+IJ9kxTgPmMqPPH5f5k2DcCsRrBIbWnaJCgX2ll77dV1TdSy9SaXTR5iDXRL8n7AnoP5cg==", - "optional": true, - "peer": true + "optional": true }, "@rollup/rollup-linux-s390x-gnu": { "version": "4.17.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.17.2.tgz", "integrity": "sha512-W0UP/x7bnn3xN2eYMql2T/+wpASLE5SjObXILTMPUBDB/Fg/FxC+gX4nvCfPBCbNhz51C+HcqQp2qQ4u25ok6g==", - "optional": true, - "peer": true + "optional": true }, "@rollup/rollup-linux-x64-gnu": { "version": "4.17.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.17.2.tgz", "integrity": "sha512-Hy7pLwByUOuyaFC6mAr7m+oMC+V7qyifzs/nW2OJfC8H4hbCzOX07Ov0VFk/zP3kBsELWNFi7rJtgbKYsav9QQ==", - "optional": true, - "peer": true + "optional": true }, "@rollup/rollup-linux-x64-musl": { "version": "4.17.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.17.2.tgz", "integrity": "sha512-h1+yTWeYbRdAyJ/jMiVw0l6fOOm/0D1vNLui9iPuqgRGnXA0u21gAqOyB5iHjlM9MMfNOm9RHCQ7zLIzT0x11Q==", - "optional": true, - "peer": true + "optional": true }, "@rollup/rollup-win32-arm64-msvc": { "version": "4.17.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.17.2.tgz", "integrity": "sha512-tmdtXMfKAjy5+IQsVtDiCfqbynAQE/TQRpWdVataHmhMb9DCoJxp9vLcCBjEQWMiUYxO1QprH/HbY9ragCEFLA==", - "optional": true, - "peer": true + "optional": true }, "@rollup/rollup-win32-ia32-msvc": { "version": "4.17.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.17.2.tgz", "integrity": "sha512-7II/QCSTAHuE5vdZaQEwJq2ZACkBpQDOmQsE6D6XUbnBHW8IAhm4eTufL6msLJorzrHDFv3CF8oCA/hSIRuZeQ==", - "optional": true, - "peer": true + "optional": true }, "@rollup/rollup-win32-x64-msvc": { "version": "4.17.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.17.2.tgz", "integrity": "sha512-TGGO7v7qOq4CYmSBVEYpI1Y5xDuCEnbVC5Vth8mOsW0gDSzxNrVERPc790IGHsrT2dQSimgMr9Ub3Y1Jci5/8w==", - "optional": true, - "peer": true + "optional": true }, "@semantic-release/commit-analyzer": { "version": "9.0.2", @@ -31199,160 +31153,6 @@ "magic-string": "^0.30.0" }, "dependencies": { - "@esbuild/android-arm": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", - "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", - "optional": true, - "peer": true - }, - "@esbuild/android-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", - "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", - "optional": true, - "peer": true - }, - "@esbuild/android-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", - "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", - "optional": true, - "peer": true - }, - "@esbuild/darwin-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", - "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", - "optional": true, - "peer": true - }, - "@esbuild/darwin-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", - "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", - "optional": true, - "peer": true - }, - "@esbuild/freebsd-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", - "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", - "optional": true, - "peer": true - }, - "@esbuild/freebsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", - "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", - "optional": true, - "peer": true - }, - "@esbuild/linux-arm": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", - "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", - "optional": true, - "peer": true - }, - "@esbuild/linux-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", - "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", - "optional": true, - "peer": true - }, - "@esbuild/linux-ia32": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", - "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", - "optional": true, - "peer": true - }, - "@esbuild/linux-loong64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", - "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", - "optional": true, - "peer": true - }, - "@esbuild/linux-mips64el": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", - "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", - "optional": true, - "peer": true - }, - "@esbuild/linux-ppc64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", - "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", - "optional": true, - "peer": true - }, - "@esbuild/linux-riscv64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", - "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", - "optional": true, - "peer": true - }, - "@esbuild/linux-s390x": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", - "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", - "optional": true, - "peer": true - }, - "@esbuild/linux-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", - "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", - "optional": true, - "peer": true - }, - "@esbuild/netbsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", - "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", - "optional": true, - "peer": true - }, - "@esbuild/openbsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", - "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", - "optional": true, - "peer": true - }, - "@esbuild/sunos-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", - "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", - "optional": true, - "peer": true - }, - "@esbuild/win32-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", - "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", - "optional": true, - "peer": true - }, - "@esbuild/win32-ia32": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", - "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", - "optional": true, - "peer": true - }, - "@esbuild/win32-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", - "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", - "optional": true, - "peer": true - }, "@storybook/builder-vite": { "version": "7.6.19", "resolved": "https://registry.npmjs.org/@storybook/builder-vite/-/builder-vite-7.6.19.tgz", @@ -31376,91 +31176,10 @@ "rollup": "^2.25.0 || ^3.3.0" } }, - "@types/node": { - "version": "20.12.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.10.tgz", - "integrity": "sha512-Eem5pH9pmWBHoGAT8Dr5fdc5rYA+4NAovdM4EktRPVAAiJhmWWfQrA0cFhAbOsQdSfIHjAud6YdkbL69+zSKjw==", - "optional": true, - "peer": true, - "requires": { - "undici-types": "~5.26.4" - } - }, "es-module-lexer": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==" - }, - "esbuild": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", - "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", - "peer": true, - "requires": { - "@esbuild/aix-ppc64": "0.20.2", - "@esbuild/android-arm": "0.20.2", - "@esbuild/android-arm64": "0.20.2", - "@esbuild/android-x64": "0.20.2", - "@esbuild/darwin-arm64": "0.20.2", - "@esbuild/darwin-x64": "0.20.2", - "@esbuild/freebsd-arm64": "0.20.2", - "@esbuild/freebsd-x64": "0.20.2", - "@esbuild/linux-arm": "0.20.2", - "@esbuild/linux-arm64": "0.20.2", - "@esbuild/linux-ia32": "0.20.2", - "@esbuild/linux-loong64": "0.20.2", - "@esbuild/linux-mips64el": "0.20.2", - "@esbuild/linux-ppc64": "0.20.2", - "@esbuild/linux-riscv64": "0.20.2", - "@esbuild/linux-s390x": "0.20.2", - "@esbuild/linux-x64": "0.20.2", - "@esbuild/netbsd-x64": "0.20.2", - "@esbuild/openbsd-x64": "0.20.2", - "@esbuild/sunos-x64": "0.20.2", - "@esbuild/win32-arm64": "0.20.2", - "@esbuild/win32-ia32": "0.20.2", - "@esbuild/win32-x64": "0.20.2" - } - }, - "vite": { - "version": "5.2.11", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.11.tgz", - "integrity": "sha512-HndV31LWW05i1BLPMUCE1B9E9GFbOu1MbenhS58FuK6owSO5qHm7GiCotrNY1YE5rMeQSFBGmT5ZaLEjFizgiQ==", - "peer": true, - "requires": { - "esbuild": "^0.20.1", - "fsevents": "~2.3.3", - "postcss": "^8.4.38", - "rollup": "^4.13.0" - }, - "dependencies": { - "rollup": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.17.2.tgz", - "integrity": "sha512-/9ClTJPByC0U4zNLowV1tMBe8yMEAxewtR3cUNX5BoEpGH3dQEWpJLr6CLp0fPdYRF/fzVOgvDb1zXuakwF5kQ==", - "peer": true, - "requires": { - "@rollup/rollup-android-arm-eabi": "4.17.2", - "@rollup/rollup-android-arm64": "4.17.2", - "@rollup/rollup-darwin-arm64": "4.17.2", - "@rollup/rollup-darwin-x64": "4.17.2", - "@rollup/rollup-linux-arm-gnueabihf": "4.17.2", - "@rollup/rollup-linux-arm-musleabihf": "4.17.2", - "@rollup/rollup-linux-arm64-gnu": "4.17.2", - "@rollup/rollup-linux-arm64-musl": "4.17.2", - "@rollup/rollup-linux-powerpc64le-gnu": "4.17.2", - "@rollup/rollup-linux-riscv64-gnu": "4.17.2", - "@rollup/rollup-linux-s390x-gnu": "4.17.2", - "@rollup/rollup-linux-x64-gnu": "4.17.2", - "@rollup/rollup-linux-x64-musl": "4.17.2", - "@rollup/rollup-win32-arm64-msvc": "4.17.2", - "@rollup/rollup-win32-ia32-msvc": "4.17.2", - "@rollup/rollup-win32-x64-msvc": "4.17.2", - "@types/estree": "1.0.5", - "fsevents": "~2.3.2" - } - } - } } } }, @@ -31674,8 +31393,7 @@ "version": "7.6.19", "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-7.6.19.tgz", "integrity": "sha512-tpt2AC1428d1gF4fetMkpkeFZ1WdDr1CLKoLbSInWQZ7i96nbnIMIA9raR/W8ai1bo55KSz9Bq5ytC/1Pac2qQ==", - "dev": true, - "requires": {} + "dev": true }, "@storybook/react-webpack5": { "version": "7.6.19", @@ -32154,8 +31872,7 @@ "version": "14.5.2", "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.5.2.tgz", "integrity": "sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ==", - "dev": true, - "requires": {} + "dev": true }, "@trysound/sax": { "version": "0.2.0", @@ -33352,8 +33069,7 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "requires": {} + "dev": true }, "acorn-walk": { "version": "7.2.0", @@ -33430,8 +33146,7 @@ "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "requires": {} + "dev": true }, "ansi-escapes": { "version": "6.2.1", @@ -33764,8 +33479,7 @@ "version": "7.0.0-bridge.0", "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==", - "dev": true, - "requires": {} + "dev": true }, "babel-loader": { "version": "9.1.3", @@ -34178,6 +33892,7 @@ "version": "4.23.0", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", + "dev": true, "requires": { "caniuse-lite": "^1.0.30001587", "electron-to-chromium": "^1.4.668", @@ -34214,7 +33929,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "devOptional": true + "dev": true }, "builtin-modules": { "version": "3.3.0", @@ -34340,7 +34055,8 @@ "caniuse-lite": { "version": "1.0.30001616", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001616.tgz", - "integrity": "sha512-RHVYKov7IcdNjVHJFNY/78RdG4oGVjbayxv8u5IO74Wv7Hlq4PnJE6mo/OjFijjVFNy5ijnCt6H3IIo4t+wfEw==" + "integrity": "sha512-RHVYKov7IcdNjVHJFNY/78RdG4oGVjbayxv8u5IO74Wv7Hlq4PnJE6mo/OjFijjVFNy5ijnCt6H3IIo4t+wfEw==", + "dev": true }, "cardinal": { "version": "2.1.1", @@ -34947,7 +34663,8 @@ "convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true }, "cookie": { "version": "0.6.0", @@ -35042,8 +34759,7 @@ "version": "6.4.1", "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==", - "dev": true, - "requires": {} + "dev": true }, "css-loader": { "version": "6.11.0", @@ -35191,8 +34907,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", - "dev": true, - "requires": {} + "dev": true }, "csso": { "version": "4.2.0", @@ -35707,7 +35422,8 @@ "electron-to-chromium": { "version": "1.4.758", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.758.tgz", - "integrity": "sha512-/o9x6TCdrYZBMdGeTifAP3wlF/gVT+TtWJe3BSmtNh92Mw81U9hrYwW9OAGUh+sEOX/yz5e34sksqRruZbjYrw==" + "integrity": "sha512-/o9x6TCdrYZBMdGeTifAP3wlF/gVT+TtWJe3BSmtNh92Mw81U9hrYwW9OAGUh+sEOX/yz5e34sksqRruZbjYrw==", + "dev": true }, "emoji-regex": { "version": "9.2.2", @@ -35998,7 +35714,8 @@ "escalade": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==" + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "dev": true }, "escape-html": { "version": "1.0.3", @@ -36157,8 +35874,7 @@ "version": "8.10.0", "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz", "integrity": "sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==", - "dev": true, - "requires": {} + "dev": true }, "eslint-plugin-jsx-a11y": { "version": "6.8.0", @@ -36247,8 +35963,7 @@ "version": "4.6.2", "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", - "dev": true, - "requires": {} + "dev": true }, "eslint-plugin-storybook": { "version": "0.6.15", @@ -37088,7 +36803,8 @@ "gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true }, "get-caller-file": { "version": "2.0.5", @@ -37762,8 +37478,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true, - "requires": {} + "dev": true }, "ieee754": { "version": "1.2.1", @@ -38856,7 +38571,8 @@ "json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==" + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true }, "jsonfile": { "version": "6.1.0", @@ -39288,6 +39004,7 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, "requires": { "yallist": "^3.0.2" } @@ -39344,8 +39061,7 @@ "version": "7.4.7", "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-7.4.7.tgz", "integrity": "sha512-0+ls1IQZdU6cwM1yu0ZjjiVWYtkbExSyUIFU2ZeDIFuZM1W42Mh4OlJ4nb4apX4H8smxDHRdFaoIVJGwfv5hkg==", - "dev": true, - "requires": {} + "dev": true }, "marked": { "version": "4.3.0", @@ -39800,7 +39516,8 @@ "node-releases": { "version": "2.0.14", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==" + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "dev": true }, "normalize-package-data": { "version": "2.5.0", @@ -42387,29 +42104,25 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", - "dev": true, - "requires": {} + "dev": true }, "postcss-discard-duplicates": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", - "dev": true, - "requires": {} + "dev": true }, "postcss-discard-empty": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", - "dev": true, - "requires": {} + "dev": true }, "postcss-discard-overridden": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", - "dev": true, - "requires": {} + "dev": true }, "postcss-load-config": { "version": "3.1.4", @@ -42503,8 +42216,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", - "dev": true, - "requires": {} + "dev": true }, "postcss-modules-local-by-default": { "version": "4.0.5", @@ -42539,8 +42251,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", - "dev": true, - "requires": {} + "dev": true }, "postcss-normalize-display-values": { "version": "5.1.0", @@ -43212,8 +42923,7 @@ "version": "5.6.1", "resolved": "https://registry.npmjs.org/react-colorful/-/react-colorful-5.6.1.tgz", "integrity": "sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw==", - "dev": true, - "requires": {} + "dev": true }, "react-docgen": { "version": "7.0.3", @@ -43245,8 +42955,7 @@ "version": "2.2.2", "resolved": "https://registry.npmjs.org/react-docgen-typescript/-/react-docgen-typescript-2.2.2.tgz", "integrity": "sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg==", - "dev": true, - "requires": {} + "dev": true }, "react-dom": { "version": "17.0.2", @@ -43348,7 +43057,6 @@ "version": "3.39.3", "resolved": "https://registry.npmjs.org/react-query/-/react-query-3.39.3.tgz", "integrity": "sha512-nLfLz7GiohKTJDuT4us4X3h/8unOh+00MLb2yJoGTPjxKs2bc1iDhkNx2bd5MKklXnOD3NrVZ+J2UXujA5In4g==", - "peer": true, "requires": { "@babel/runtime": "^7.5.5", "broadcast-channel": "^3.4.1", @@ -43485,8 +43193,7 @@ "version": "1.0.24", "resolved": "https://registry.npmjs.org/react-virtualized-auto-sizer/-/react-virtualized-auto-sizer-1.0.24.tgz", "integrity": "sha512-3kCn7N9NEb3FlvJrSHWGQ4iVl+ydQObq2fHMn12i5wbtm74zHOPhz/i64OL3c1S1vi9i2GXtZqNqUJTQ+BnNfg==", - "dev": true, - "requires": {} + "dev": true }, "react-window": { "version": "1.8.10", @@ -43673,8 +43380,7 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.2.tgz", "integrity": "sha512-+P3TjtnP0k/FEjcBL5FZpoovtvrTNT/UXd4/sluaSyrURlSlhLSzEdfsTBW7WsKB6yPvgd7q/iZPICFjW4o57Q==", - "dev": true, - "requires": {} + "dev": true }, "reflect.getprototypeof": { "version": "1.0.6", @@ -44674,7 +44380,7 @@ "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "devOptional": true, + "dev": true, "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -44684,7 +44390,7 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "devOptional": true + "dev": true } } }, @@ -44999,8 +44705,7 @@ "version": "3.3.4", "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.4.tgz", "integrity": "sha512-0WqXzrsMTyb8yjZJHDqwmnwRJvhALK9LfRtRc6B4UTWe8AijYLZYZ9thuJTZc2VfQWINADW/j+LiJnfy2RoC1w==", - "dev": true, - "requires": {} + "dev": true }, "style-to-object": { "version": "0.3.0", @@ -45288,7 +44993,7 @@ "version": "5.31.0", "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.0.tgz", "integrity": "sha512-Q1JFAoUKE5IMfI4Z/lkE/E6+SwgzO+x4tq4v1AyBLRj8VSYvRO6A/rQrPg1yud4g0En9EKI1TvFRF2tQFcoUkg==", - "devOptional": true, + "dev": true, "requires": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", @@ -45300,13 +45005,13 @@ "version": "8.11.3", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", - "devOptional": true + "dev": true }, "commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "devOptional": true + "dev": true } } }, @@ -45651,7 +45356,7 @@ "version": "4.5.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==", - "devOptional": true + "dev": true }, "ufo": { "version": "1.5.3", @@ -45871,6 +45576,7 @@ "version": "1.0.15", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.15.tgz", "integrity": "sha512-K9HWH62x3/EalU1U6sjSZiylm9C8tgq2mSvshZpqc7QE69RaA2qjhkW2HlNA0tFpEbtyFz7HTqbSdN4MSwUodA==", + "dev": true, "requires": { "escalade": "^3.1.2", "picocolors": "^1.0.0" @@ -45940,8 +45646,7 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/use-memo-one/-/use-memo-one-1.1.3.tgz", "integrity": "sha512-g66/K7ZQGYrI6dy8GLpVcMsBp4s17xNkYJVSMvTEevGy3nDxHOfE6z8BVE22+5G5x7t3+bhzrlTDB7ObrEE0cQ==", - "dev": true, - "requires": {} + "dev": true }, "use-resize-observer": { "version": "9.1.0", @@ -45974,8 +45679,7 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.2.tgz", "integrity": "sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==", - "dev": true, - "requires": {} + "dev": true }, "util": { "version": "0.12.5", @@ -46082,6 +45786,206 @@ } } }, + "vite": { + "version": "5.2.11", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.11.tgz", + "integrity": "sha512-HndV31LWW05i1BLPMUCE1B9E9GFbOu1MbenhS58FuK6owSO5qHm7GiCotrNY1YE5rMeQSFBGmT5ZaLEjFizgiQ==", + "requires": { + "esbuild": "^0.20.1", + "fsevents": "~2.3.3", + "postcss": "^8.4.38", + "rollup": "^4.13.0" + }, + "dependencies": { + "@esbuild/android-arm": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", + "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", + "optional": true + }, + "@esbuild/android-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", + "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", + "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", + "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", + "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", + "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", + "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", + "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", + "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", + "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", + "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", + "optional": true + }, + "@esbuild/linux-mips64el": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", + "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", + "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", + "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", + "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", + "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", + "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", + "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", + "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", + "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", + "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", + "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", + "optional": true + }, + "esbuild": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", + "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", + "requires": { + "@esbuild/aix-ppc64": "0.20.2", + "@esbuild/android-arm": "0.20.2", + "@esbuild/android-arm64": "0.20.2", + "@esbuild/android-x64": "0.20.2", + "@esbuild/darwin-arm64": "0.20.2", + "@esbuild/darwin-x64": "0.20.2", + "@esbuild/freebsd-arm64": "0.20.2", + "@esbuild/freebsd-x64": "0.20.2", + "@esbuild/linux-arm": "0.20.2", + "@esbuild/linux-arm64": "0.20.2", + "@esbuild/linux-ia32": "0.20.2", + "@esbuild/linux-loong64": "0.20.2", + "@esbuild/linux-mips64el": "0.20.2", + "@esbuild/linux-ppc64": "0.20.2", + "@esbuild/linux-riscv64": "0.20.2", + "@esbuild/linux-s390x": "0.20.2", + "@esbuild/linux-x64": "0.20.2", + "@esbuild/netbsd-x64": "0.20.2", + "@esbuild/openbsd-x64": "0.20.2", + "@esbuild/sunos-x64": "0.20.2", + "@esbuild/win32-arm64": "0.20.2", + "@esbuild/win32-ia32": "0.20.2", + "@esbuild/win32-x64": "0.20.2" + } + }, + "rollup": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.17.2.tgz", + "integrity": "sha512-/9ClTJPByC0U4zNLowV1tMBe8yMEAxewtR3cUNX5BoEpGH3dQEWpJLr6CLp0fPdYRF/fzVOgvDb1zXuakwF5kQ==", + "requires": { + "@rollup/rollup-android-arm-eabi": "4.17.2", + "@rollup/rollup-android-arm64": "4.17.2", + "@rollup/rollup-darwin-arm64": "4.17.2", + "@rollup/rollup-darwin-x64": "4.17.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.17.2", + "@rollup/rollup-linux-arm-musleabihf": "4.17.2", + "@rollup/rollup-linux-arm64-gnu": "4.17.2", + "@rollup/rollup-linux-arm64-musl": "4.17.2", + "@rollup/rollup-linux-powerpc64le-gnu": "4.17.2", + "@rollup/rollup-linux-riscv64-gnu": "4.17.2", + "@rollup/rollup-linux-s390x-gnu": "4.17.2", + "@rollup/rollup-linux-x64-gnu": "4.17.2", + "@rollup/rollup-linux-x64-musl": "4.17.2", + "@rollup/rollup-win32-arm64-msvc": "4.17.2", + "@rollup/rollup-win32-ia32-msvc": "4.17.2", + "@rollup/rollup-win32-x64-msvc": "4.17.2", + "@types/estree": "1.0.5", + "fsevents": "~2.3.2" + } + } + } + }, "void-elements": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", @@ -46174,8 +46078,7 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", - "dev": true, - "requires": {} + "dev": true } } }, @@ -46424,8 +46327,7 @@ "ws": { "version": "8.17.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.0.tgz", - "integrity": "sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==", - "requires": {} + "integrity": "sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==" }, "xtend": { "version": "4.0.2", @@ -46442,7 +46344,8 @@ "yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true }, "yaml": { "version": "1.10.2", diff --git a/src/app/types.ts b/src/app/types.ts index a5520cbc..ea891601 100644 --- a/src/app/types.ts +++ b/src/app/types.ts @@ -221,6 +221,21 @@ export type IriWidgetProps = ForcedIriObj & { * Color of the text, names, hex or rgb */ color?: EuiLinkColor | string; + + /** + * Indicates that the target is external and needs an icon. + */ + externalIcon?: boolean; + + /** + * The iri should get appended to the urlPrefix or not. When provided, the iri gets encoded and appended to the urlPrefix. + */ + urlPrefix?: string; + + /** + * If true, a copy button is shown next to the link. + */ + copyButton?: boolean; } export type TabWidgetProps = ApiObj & OptionalEntityTypeObj & OptionalOntologyIdObj & ForcedIriObj & ParameterObj & UseLegacyObj; diff --git a/src/components/widgets/MetadataWidget/IriWidget/IriWidget.stories.tsx b/src/components/widgets/MetadataWidget/IriWidget/IriWidget.stories.tsx index 5a2e89dd..c5e56cbf 100644 --- a/src/components/widgets/MetadataWidget/IriWidget/IriWidget.stories.tsx +++ b/src/components/widgets/MetadataWidget/IriWidget/IriWidget.stories.tsx @@ -15,5 +15,5 @@ export default { }; export { - IriWidget1 + IriWidget1, withCopyButton, withoutExternalIcon, withUrlPrefix } from "./IriWidgetStories" diff --git a/src/components/widgets/MetadataWidget/IriWidget/IriWidget.tsx b/src/components/widgets/MetadataWidget/IriWidget/IriWidget.tsx index ad8729a6..c3026100 100644 --- a/src/components/widgets/MetadataWidget/IriWidget/IriWidget.tsx +++ b/src/components/widgets/MetadataWidget/IriWidget/IriWidget.tsx @@ -1,30 +1,70 @@ -import React from "react"; -import {EuiFlexItem, EuiLink, EuiProvider} from "@elastic/eui"; +import React, {useState} from "react"; +import {EuiFlexItem, EuiLink, EuiProvider, EuiButtonIcon} from "@elastic/eui"; import {IriWidgetProps} from "../../../../app/types"; import {isEuiLinkColor, isHexColor, isRgbColor} from "../../../../app/util"; import ReactDOM from "react-dom"; import {QueryClient, QueryClientProvider} from "react-query"; -function IriWidget(props: IriWidgetProps) { - const { iri, iriText, color } = props; +function IriWidget(props: IriWidgetProps) { + const { iri, iriText, color, externalIcon, urlPrefix, copyButton } = props; + const [copied, setCopied] = useState(false); + const urlPrefixExist = typeof(urlPrefix) !== "undefined" && urlPrefix !== "" ? true : false; + const iriUrl = urlPrefixExist ? urlPrefix + encodeURIComponent(iri) : iri; + + const CopyLinkButton = () => { + if (!copied) { + return ( + { + navigator.clipboard.writeText(iriUrl); + setCopied(true); + setTimeout(() => {setCopied(false);}, 2000); + }} + > + + ); + } + return ( + + + ); + }; return (
- - {iriText ? iriText : iri} + + {iriText ? iriText : iri} + {copyButton && }
); } -function createIri(props: IriWidgetProps, container: Element, callback?: ()=>void) { +function createIri(props: IriWidgetProps, container: Element, callback?: ()=>void) { ReactDOM.render(WrappedIriWidget(props), container, callback); } function WrappedIriWidget(props: IriWidgetProps) { - const queryClient = new QueryClient(); + const queryClient = new QueryClient(); return ( @@ -32,6 +72,9 @@ function WrappedIriWidget(props: IriWidgetProps) { iri={props.iri} iriText={props.iriText} color={props.color} + externalIcon={props.externalIcon} + urlPrefix={props.urlPrefix} + copyButton={props.copyButton} /> diff --git a/src/components/widgets/MetadataWidget/IriWidget/IriWidgetHTML.stories.ts b/src/components/widgets/MetadataWidget/IriWidget/IriWidgetHTML.stories.ts index f3f0b581..55e880f7 100644 --- a/src/components/widgets/MetadataWidget/IriWidget/IriWidgetHTML.stories.ts +++ b/src/components/widgets/MetadataWidget/IriWidget/IriWidgetHTML.stories.ts @@ -14,7 +14,7 @@ export default { parameters: { layout: "centered", }, - render: (args: IriWidgetProps) => { + render: (args: IriWidgetProps) => { // You can either use a function to create DOM elements or use a plain html string! // return `
${label}
`; const num = getIncNum(); @@ -27,7 +27,10 @@ window['SemLookPWidgets'].createIri( { iri:"${args.iri}", iriText:"${args.iriText}", - color:"${args.color}" + color:"${args.color}", + externalIcon: ${args.externalIcon}, + urlPrefix:"${args.urlPrefix}", + copyButton: ${args.copyButton} }, document.querySelector('#iri_widget_container_${num}') ) @@ -39,5 +42,5 @@ window['SemLookPWidgets'].createIri( } export { - IriWidget1 + IriWidget1, withCopyButton, withoutExternalIcon, withUrlPrefix } from "./IriWidgetStories" diff --git a/src/components/widgets/MetadataWidget/IriWidget/IriWidgetStories.ts b/src/components/widgets/MetadataWidget/IriWidget/IriWidgetStories.ts index 5413f4a2..6e47310b 100644 --- a/src/components/widgets/MetadataWidget/IriWidget/IriWidgetStories.ts +++ b/src/components/widgets/MetadataWidget/IriWidget/IriWidgetStories.ts @@ -22,16 +22,58 @@ export const IriWidgetStoryArgTypes = { iri: { description: "Object IRI that you want to link.", }, + externalIcon: { + options: [true, false], + defaultValue: true, + description: "Whether the link should have an external icon in the end or not. Default is true when not given." + }, + urlPrefix: { + type: { summary: `string` }, + description: "Prefix to be added to the IRI before linking. Iri gets encoded before adding the prefix.", + }, + copyButton: { + options: [true, false], + defaultValue: false, + description: "Whether to show a copy button next to the link or not. Default is false when not given." + + }, } export const IriWidgetStoryArgs = { color: "", iriText: "", - iri: "" + iri: "", + urlPrefix: "", + copyButton: false, + externalIcon: true, } export const IriWidget1 = { args: { iri: "http://purl.obolibrary.org/obo/NCIT_C2985", } +}; + + +export const withoutExternalIcon = { + args: { + iri: "http://purl.obolibrary.org/obo/NCIT_C2985", + externalIcon: false, + } +}; + + +export const withCopyButton = { + args: { + iri: "http://purl.obolibrary.org/obo/NCIT_C2985", + copyButton: true, + } +}; + + +export const withUrlPrefix = { + args: { + iri: "http://purl.obolibrary.org/obo/OBI_0000070", + urlPrefix: "https://terminology.nfdi4chem.de/ts/ontologies/vibso/terms?iri=", + } }; \ No newline at end of file diff --git a/src/components/widgets/MetadataWidget/MetadataWidgetHTML.stories.ts b/src/components/widgets/MetadataWidget/MetadataWidgetHTML.stories.ts index 951debe1..2f3d66c6 100644 --- a/src/components/widgets/MetadataWidget/MetadataWidgetHTML.stories.ts +++ b/src/components/widgets/MetadataWidget/MetadataWidgetHTML.stories.ts @@ -1,5 +1,5 @@ import 'semlookp-widgets'; -import 'semlookp-widgets/semlookp_widgets.css' +import 'semlookp-widgets/terminology-service-suite.css' import {MetadataWidgetProps} from "../../../app/types"; import {MetadataWidgetStoryArgs, MetadataWidgetStoryArgTypes} from "./MetadataWidgetStories" diff --git a/src/components/widgets/MetadataWidget/TabWidget/HierarchyWidget/HierarchyWidgetHTML.stories.ts b/src/components/widgets/MetadataWidget/TabWidget/HierarchyWidget/HierarchyWidgetHTML.stories.ts index 5182c216..899fe2b6 100644 --- a/src/components/widgets/MetadataWidget/TabWidget/HierarchyWidget/HierarchyWidgetHTML.stories.ts +++ b/src/components/widgets/MetadataWidget/TabWidget/HierarchyWidget/HierarchyWidgetHTML.stories.ts @@ -1,5 +1,5 @@ import 'semlookp-widgets'; -import "semlookp-widgets/semlookp_widgets.css" +import "semlookp-widgets/terminology-service-suite.css" import {HierarchyWidgetStoryArgs, HierarchyWidgetStoryArgTypes} from "./HierarchyWidgetStories"; import {HierarchyWidgetProps} from "../../../../../app/types"; diff --git a/src/components/widgets/MetadataWidget/TabWidget/TabWidgetHTML.stories.ts b/src/components/widgets/MetadataWidget/TabWidget/TabWidgetHTML.stories.ts index ce5db047..9db6ce1e 100644 --- a/src/components/widgets/MetadataWidget/TabWidget/TabWidgetHTML.stories.ts +++ b/src/components/widgets/MetadataWidget/TabWidget/TabWidgetHTML.stories.ts @@ -1,5 +1,5 @@ import 'semlookp-widgets'; -import "semlookp-widgets/semlookp_widgets.css" +import "semlookp-widgets/terminology-service-suite.css" import {TabWidgetProps} from "../../../../app/types"; import {TabWidgetStoryArgs, TabWidgetStoryArgTypes} from "./TabWidgetStories";